pax_global_header00006660000000000000000000000064130754330710014515gustar00rootroot0000000000000052 comment=9d9bcc5282cd975e739b2b30ed65ef767f824503 openturns-1.9/000077500000000000000000000000001307543307100134235ustar00rootroot00000000000000openturns-1.9/.gitignore000066400000000000000000000000371307543307100154130ustar00rootroot00000000000000build*/ *~ *.ipynb_checkpoints openturns-1.9/.travis.yml000066400000000000000000000131761307543307100155440ustar00rootroot00000000000000language: cpp addons: apt: sources: - ubuntu-toolchain-r-test packages: - cmake - gcc-4.8 - g++-4.8 - gfortran-4.8 - bison - flex - libmuparser-dev - liblapack-dev - libxml2-dev - libboost-math-dev - libtbb-dev - r-base-core - python-dev - python-scipy - python-matplotlib - texlive-latex-recommended - texlive-fonts-recommended - texlive-latex-extra - libkpathsea-dev - libpotrace-dev - python-lxml - xmlto - asciidoc matrix: include: - os: linux compiler: gcc - os: osx compiler: clang before_install: - if test "$TRAVIS_OS_NAME" = "osx"; then brew update && brew tap homebrew/science && brew install swig muparser R openblas && export HOMEBREW_PREFIX=`brew --prefix`; fi install: - if test "$TRAVIS_OS_NAME" = "linux"; then export CXX="g++-4.8" CC="gcc-4.8"; fi # dvisvgm - if test "$TRAVIS_OS_NAME" = "linux"; then git clone https://github.com/mgieseki/dvisvgm.git && pushd dvisvgm && ./autogen.sh && ./configure --prefix=$HOME/.local && make -j 2 && make install && export PATH=$PATH:$HOME/.local/bin && popd; fi # sphinx >=1.2 is looking better - if test "$TRAVIS_OS_NAME" = "linux"; then pip install six docutils numpydoc --user && pip install git+https://github.com/sphinx-doc/sphinx.git --user; fi # keep an eye on swig - git clone https://github.com/swig/swig.git - pushd swig - ./autogen.sh - ./configure --prefix=$HOME/.local - make -j2 - make install - popd # use latest hmat-oss - git clone https://github.com/jeromerobert/hmat-oss.git - pushd hmat-oss - if test "$TRAVIS_OS_NAME" = "linux"; then cmake -DCMAKE_INSTALL_PREFIX=~/.local . ; fi - if test "$TRAVIS_OS_NAME" = "osx"; then cmake -DCMAKE_INSTALL_PREFIX=~/.local -DCMAKE_MACOSX_RPATH=ON -DCBLAS_LIBRARIES=$HOMEBREW_PREFIX/opt/openblas/lib/libopenblas.dylib -DBLAS_LIBRARIES=$HOMEBREW_PREFIX/opt/openblas/lib/libopenblas.dylib -DLAPACK_LIBRARIES=$HOMEBREW_PREFIX/opt/openblas/lib/libopenblas.dylib -DCBLAS_INCLUDE_DIRS=$HOMEBREW_PREFIX/opt/openblas/include . ; fi - make install -j2 - popd # use latest nlopt - git clone https://github.com/stevengj/nlopt.git - pushd nlopt - cmake -DCMAKE_INSTALL_PREFIX=$HOME/.local -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_PYTHON=OFF -DBUILD_OCTAVE=OFF -DBUILD_GUILE=OFF -DCMAKE_MACOSX_RPATH=ON . - make -j2 - make install - popd # use tbb from sources for osx (not brew) - if test "$TRAVIS_OS_NAME" = "osx"; then git clone https://github.com/01org/tbb.git && pushd tbb && git checkout 2017_U5 && make -j4 cfg=release stdlib=libc++ && install -d $HOME/.local/lib && install -d $HOME/.local/include && cp `find . -name "*lib*" | grep tbb | grep release` $HOME/.local/lib && cp -r ./include/tbb $HOME/.local/include && popd; fi before_script: - R CMD INSTALL --library=$PWD utils/rot_1.4.6.tar.gz - export R_LIBS=$PWD script: - if test "$TRAVIS_OS_NAME" = "linux"; then cmake -DCMAKE_INSTALL_PREFIX=~/.local -DSPHINX_EXECUTABLE=~/.local/bin/sphinx-build -DSWIG_EXECUTABLE=~/.local/bin/swig -DHMAT_DIR=~/.local/lib/cmake/hmat -DNLOPT_LIBRARY=~/.local/lib/libnlopt.so -DNLOPT_INCLUDE_DIR=~/.local/include . && make install -j4; fi - if test "$TRAVIS_OS_NAME" = "osx"; then cmake -DCMAKE_INSTALL_PREFIX=~/.local -DSWIG_EXECUTABLE=~/.local/bin/swig -DCMAKE_MACOSX_RPATH=ON -DHMAT_DIR=~/.local/lib/cmake/hmat -DLAPACKE_FOUND=ON -DOPENTURNS_LIBRARIES="-framework Accelerate" -DNLOPT_LIBRARY=~/.local/lib/libnlopt.dylib -DNLOPT_INCLUDE_DIR=~/.local/include -DUSE_SPHINX=OFF -DPYTHON_EXECUTABLE=/usr/bin/python -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/libpython2.7.dylib -DUSE_COTIRE=ON -DCOTIRE_TESTS=OFF -DCOTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES="-j4" . && make python_unity -j4 && make install/fast; fi - ctest -R pyinstallcheck -j4 --output-on-failure --timeout 100 after_success: - exit 0 - test "$TRAVIS_PULL_REQUEST" = "false" -a "$TRAVIS_BRANCH" = "master" -a "$TRAVIS_OS_NAME" = "linux" || exit 0 - git clone https://${GH_TOKEN}@github.com/openturns/openturns.github.io.git - cp -r ~/.local/share/openturns/doc/html/* openturns.github.io - cd openturns.github.io - touch .nojekyll - git config user.email "support@travis-ci.com" - git config user.name "Travis CI" - git add -A . - git commit -a -m "Travis build $TRAVIS_BUILD_NUMBER" - git push --quiet origin master > /dev/null 2>&1 env: global: secure: azF2AfkEALFgd16Xh0XcAglAtExD5BhsMSPOcHFUftgDGrlsgsjD4p505UxrAOYYX5Exchne5D9pSV8gFlxKl5OIoVkJhSkvLRKANJKzdM95TnUqeJy6zplcEOvDPKdww37mKzJy/a9MduOqORqMeVErvpiEpYwrdiH1GUBHrvAp4NUSPhR5Ea/6d3TdOmaF1j0N8Bb66ZHn9SGThLM0ZEHk9iXHB5E9U0Y8dq7eDifD20hWGfIRiIksyWRyP+a/8WAnqf0mYPPkP1qEssexCHlF3tB2ZVyXBF84/laujOasWu1uApjjEhJADE6E3Rnv7BYMB6pvmiVMF/CZ07rflqgI5MjnYplg8ZShS//UuYUlGi7NwKztMob/5GUjp6PHYBbc0t1sjgqzxJhuN80Km51M7n4zvjQs7EyHeu61BxWQe0NwpKN17OavUucYL6yN9R3L/JLEg9EJnKFNo+CXnzMH28luCn1SgfNU9iuk3B4Lwa4IY6bm0lAHm/WvHIOfQFNuqzH/1QtY9dM0iLCl8IcvO7buYkmEip9i+XdSn7HURAjmUsStonwGBDSONQgiuSOJE8GUaPCOpr5+tDrTa/TxWr3y1xMv1uORcWMp4ulm7XGrjSxDsfCRhPx56AjWA9uf+xbnnYApHlyoYGETEsff3RbH91FBriuHAZVH5Dw= openturns-1.9/CMakeLists.txt000066400000000000000000000425621307543307100161740ustar00rootroot00000000000000# -*- cmake -*- cmake_minimum_required (VERSION 2.8) # By default, build in Release mode. Must appear before project() command if (NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") endif () if (CMAKE_VERSION VERSION_GREATER 2.8) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "" Release Debug RelWithDebInfo MinSizeRel) endif () project (OpenTURNS) option (USE_BISON "Looks for Bison if true and then build parser" ON) option (USE_FLEX "Looks for Flex if true and then build lexer" ON) option (USE_TBB "Use Intel Threading Building Blocks library for multithreading" ON) option (USE_HMAT "Use HMat library" ON) option (USE_MUPARSER "Use muParser libraries" ON) option (USE_LIBXML2 "Use LibXml2 for XML support" ON) option (USE_R "Use R for graph output support" ON) option (USE_OPENMP "Use OpenMP for multithreading" OFF) option (USE_BOOST "Use Boost for distribution computation" ON) option (USE_SPHINX "Use sphinx for documentation" ON) option (USE_DOXYGEN "Use Doxygen for API documentation" ON) option (USE_NLOPT "Use NLopt for additional optimization algorithms" ON) option (USE_COTIRE "Use cotire for unity builds" OFF) option (BUILD_PYTHON "Build the python module for the library" ON) option (BUILD_VALIDATION "Build the validation files of the library" ON) option (LINK_PYTHON_LIBRARY "Link python modules against python library" ON) option (BUILD_SHARED_LIBS "Build shared libraries" ON) if (MSVC) option (BUILD_MULTIPROCESSOR "Enable multiprocessor builds" ON) endif () # Defines our own module path list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) if (USE_COTIRE) if (POLICY CMP0058) # Ninja requires custom command byproducts to be explicit cmake_policy (SET CMP0058 NEW) endif() set (USE_BISON OFF CACHE BOOL "" FORCE) set (USE_FLEX OFF CACHE BOOL "" FORCE) set (USE_SPHINX OFF CACHE BOOL "" FORCE) set (CMAKE_BUILD_WITH_INSTALL_RPATH ON) include (cotire) add_custom_target (python_unity) endif () set (OPENTURNS_HOME_ENV_VAR OPENTURNS_HOME ) if (NOT DEFINED CMAKE_INSTALL_LIBDIR) set (CMAKE_INSTALL_LIBDIR lib${LIB_SUFFIX}) endif () set (OPENTURNS_LIBRARY_PATH ${CMAKE_INSTALL_LIBDIR} CACHE PATH "The directory where the library is installed" ) set (OPENTURNS_INCLUDE_PATH include CACHE PATH "The directory where the header files are installed" ) set (OPENTURNS_CONFIG_CMAKE_PATH ${CMAKE_INSTALL_LIBDIR}/cmake/openturns CACHE PATH "The directory where the CMake files are installed" ) set (OPENTURNS_SYSCONFIG_PATH etc CACHE PATH "The directory where the configuration file is installed" ) set (OPENTURNS_DATA_PATH share CACHE PATH "The directory where the common files are installed" ) set (OPENTURNS_EXAMPLE_PATH share/openturns/examples CACHE PATH "The directory where the example files are installed" ) set (OPENTURNS_SAMPLE_PATH share/openturns/examples CACHE PATH "The directory where the sample files are installed" ) set (OPENTURNS_VALIDATION_PATH share/openturns/validation CACHE PATH "The directory where validation files are installed" ) set (OPENTURNS_DOC_PATH share/openturns/doc CACHE PATH "The directory where the license files are installed" ) if (WIN32) set (DEFAULT_TMP TEMP) set (PATH_SEP "\\;") else () set(DEFAULT_TMP /tmp) set (PATH_SEP ":") endif() set (OPENTURNS_TEMPDIR ${DEFAULT_TMP} CACHE PATH "The directory for temporary files. /tmp by default." ) set (TEMPDIR ${OPENTURNS_TEMPDIR}) # WARNING: This is where variables without OPENTURNS_ prefix are defined ! foreach (_var INSTALL_PATH LIBRARY_PATH INCLUDE_PATH CONFIG_CMAKE_PATH SYSCONFIG_PATH DATA_PATH EXAMPLE_PATH SAMPLE_PATH VALIDATION_PATH DOC_PATH) file (TO_NATIVE_PATH "${OPENTURNS_${_var}}" NATIVE_OPENTURNS_${_var}) if (NOT IS_ABSOLUTE ${NATIVE_OPENTURNS_${_var}}) file (TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${OPENTURNS_${_var}} NATIVE_OPENTURNS_${_var}) endif () string(REPLACE "\\" "\\\\" ${_var} ${NATIVE_OPENTURNS_${_var}}) endforeach (_var) # CMake 2.x does not define MSVC when using Intel compiler on Windows, see # http://public.kitware.com/Bug/view.php?id=14476 if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(WINTEL TRUE) endif() if (NOT LAPACKE_FOUND) # workaround for cmake issue #0009976 if (CMAKE_VERSION VERSION_LESS 2.8.4) enable_language (Fortran) endif () find_package (LAPACK REQUIRED) if (LAPACK_FOUND) set (OPENTURNS_HAVE_LAPACK TRUE) list (APPEND OPENTURNS_LIBRARIES ${LAPACK_LIBRARIES}) endif () endif () if (USE_BISON) find_package (BISON 2.4) if (BISON_FOUND) set (OPENTURNS_HAVE_BISON TRUE) endif () endif () if (USE_FLEX) find_package (FLEX) if (FLEX_FOUND) set (OPENTURNS_HAVE_FLEX TRUE) endif () endif () if (USE_TBB) find_package (TBB) endif () if (TBB_FOUND) set (OPENTURNS_HAVE_TBB_TBB_H TRUE) set (OPENTURNS_HAVE_TBB TRUE) list (APPEND OPENTURNS_INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) list (APPEND OPENTURNS_LIBRARIES ${TBB_LIBRARIES}) if (MSVC OR WINTEL) set (OPENTURNS_TBB_NO_IMPLICIT_LINKAGE ON CACHE BOOL "Prevent implicit linkage against tbb.lib ") endif () endif () if (USE_MUPARSER) find_package (muParser 1.32) endif () if (MUPARSER_FOUND) set (OPENTURNS_HAVE_MUPARSER TRUE) list (APPEND OPENTURNS_LIBRARIES ${MUPARSER_LIBRARIES}) list (APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${MUPARSER_INCLUDE_DIRS}) endif () if (USE_HMAT) find_package (HMAT 1.2 NO_MODULE) endif () if (HMAT_FOUND) set (OPENTURNS_HAVE_HMAT TRUE) list (APPEND OPENTURNS_LIBRARIES ${HMAT_LIBRARIES}) list (APPEND OPENTURNS_INCLUDE_DIRS ${HMAT_INCLUDE_DIRS}) endif () if (USE_DOXYGEN) find_package (Doxygen) endif () if (USE_LIBXML2) find_package (LibXml2) endif () if (LIBXML2_FOUND) set (OPENTURNS_HAVE_LIBXML2 TRUE) list (APPEND OPENTURNS_DEFINITIONS ${LIBXML2_DEFINITIONS}) list (APPEND OPENTURNS_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) list (APPEND OPENTURNS_LIBRARIES ${LIBXML2_LIBRARIES}) endif () if (MSVC OR WINTEL) set (CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/lib/include/pthread_win32 ${CMAKE_CURRENT_SOURCE_DIR}/lib/include) include_directories (${PROJECT_SOURCE_DIR}/lib/include/pthread_win32 ${CMAKE_CURRENT_SOURCE_DIR}/lib/include) endif () find_package (Threads) if (Threads_FOUND) list (APPEND OPENTURNS_INCLUDE_DIRS ${THREADS_INCLUDE_DIRS}) list (APPEND OPENTURNS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) endif () if (MSVC OR WINTEL) set (BOOST_REQUIRED_ARG REQUIRED) set (USE_BOOST ON CACHE INTERNAL "Force use of Boost on Windows") endif () if (USE_BOOST) # doesn't pass all tests with boost <=1.42 (debian6) # but at least pass with 1.46 (ubuntu precise) find_package (Boost 1.46 ${BOOST_REQUIRED_ARG}) if (Boost_FOUND) set (OPENTURNS_HAVE_BOOST TRUE) list (APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS}) endif () endif () if (USE_R) find_package (R COMPONENTS base rot) endif () if (USE_OPENMP) find_package (OpenMP) if (OPENMP_FOUND) set (CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") endif () endif () if (USE_NLOPT) find_package (NLopt) if (NLOPT_FOUND) set (OPENTURNS_HAVE_NLOPT TRUE) list (APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${NLOPT_INCLUDE_DIRS}) list (APPEND OPENTURNS_LIBRARIES ${NLOPT_LIBRARIES}) endif () endif () if (MSVC) if (BUILD_MULTIPROCESSOR) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") endif () # Disable some warnings set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4197 /wd4244 /wd4251 /wd4267 /wd4996") endif () include (TestBigEndian) test_big_endian (__BIG_ENDIAN__) try_compile(OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/unsignedlong_same_as_uint64_t.cxx) # Find system prerequisites include (CheckIncludeFile) check_include_file (assert.h OPENTURNS_HAVE_ASSERT_H ) check_include_file (dirent.h OPENTURNS_HAVE_DIRENT_H ) check_include_file (errno.h OPENTURNS_HAVE_ERRNO_H ) check_include_file (inttypes.h OPENTURNS_HAVE_INTTYPES_H ) check_include_file (libgen.h OPENTURNS_HAVE_LIBGEN_H ) check_include_file (math.h OPENTURNS_HAVE_MATH_H ) check_include_file (pthread.h OPENTURNS_HAVE_PTHREAD_H ) check_include_file (signal.h OPENTURNS_HAVE_SIGNAL_H ) check_include_file (stdbool.h OPENTURNS_HAVE_STDBOOL_H ) check_include_file (stdint.h OPENTURNS_HAVE_STDINT_H ) check_include_file (stdlib.h OPENTURNS_HAVE_STDLIB_H ) check_include_file (string.h OPENTURNS_HAVE_STRING_H ) check_include_file (strings.h OPENTURNS_HAVE_STRINGS_H ) check_include_file (sys/stat.h OPENTURNS_HAVE_SYS_STAT_H ) check_include_file (sys/time.h OPENTURNS_HAVE_SYS_TIME_H ) check_include_file (sys/types.h OPENTURNS_HAVE_SYS_TYPES_H ) check_include_file (sys/un.h OPENTURNS_HAVE_SYS_UN_H ) check_include_file (unistd.h OPENTURNS_HAVE_UNISTD_H ) # Some useful macros to ease CMakeLists.txt file writing set (SOURCEFILES "" CACHE INTERNAL "List of source files to compile") macro (ot_add_source_file FILENAME) set (sf ${SOURCEFILES} ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}) set (SOURCEFILES ${sf} CACHE INTERNAL "List of source files to compile") endmacro (ot_add_source_file) set (BUILT_SOURCEFILES "" CACHE INTERNAL "List of source files to compile") macro (ot_add_built_source_file FILENAME) set (sf ${BUILT_SOURCEFILES} ${FILENAME}) set (BUILT_SOURCEFILES ${sf} CACHE INTERNAL "List of built source files to compile") endmacro (ot_add_built_source_file) set (HEADERFILES "" CACHE INTERNAL "List of header files to install") macro (ot_install_header_file FILENAME) set (hf ${HEADERFILES} ${CMAKE_CURRENT_SOURCE_DIR}/openturns/${FILENAME}) set (HEADERFILES ${hf} CACHE INTERNAL "List of header files to install") endmacro (ot_install_header_file) set (SWIGFILES "" CACHE INTERNAL "List of SWIG files to install") macro (ot_install_swig_file FILENAME) set (hf ${SWIGFILES} ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}) set (SWIGFILES ${hf} CACHE INTERNAL "List of SWIG files to install") endmacro (ot_install_swig_file) set (INTERNAL_INCLUDE_DIRS "" CACHE INTERNAL "List of directories with header files needed for build") macro (ot_add_current_dir_to_include_dirs) set (inc_dirs ${INTERNAL_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}) set (INTERNAL_INCLUDE_DIRS ${inc_dirs} CACHE INTERNAL "List of directories with header files needed for build") endmacro (ot_add_current_dir_to_include_dirs) macro (ot_add_build_dir_to_include_dirs DIR) set (inc_dirs ${INTERNAL_INCLUDE_DIRS} ${DIR}) set (INTERNAL_INCLUDE_DIRS ${inc_dirs} CACHE INTERNAL "List of directories with header files needed for build") endmacro (ot_add_build_dir_to_include_dirs) # Add definitions according to the prerequisites found add_definitions(-DHAVE_CONFIG_H) if (NOT BUILD_SHARED_LIBS) list (APPEND OPENTURNS_DEFINITIONS -DOT_STATIC) endif () if (MSVC OR WINTEL) list (APPEND OPENTURNS_DEFINITIONS -D_USE_MATH_DEFINES) endif () add_definitions (${OPENTURNS_DEFINITIONS}) if (OPENTURNS_INCLUDE_DIRS) list (REMOVE_DUPLICATES OPENTURNS_INCLUDE_DIRS) endif (OPENTURNS_INCLUDE_DIRS) include_directories (${OPENTURNS_INCLUDE_DIRS}) include_directories (${OPENTURNS_PRIVATE_INCLUDE_DIRS}) set (CPACK_PACKAGE_NAME openturns ) set (CPACK_PACKAGE_VERSION_MAJOR 1 ) set (CPACK_PACKAGE_VERSION_MINOR 9) set (CPACK_PACKAGE_VERSION_PATCH ) set (CPACK_SOURCE_GENERATOR "TGZ;TBZ2" ) set (CPACK_BINARY_STGZ "OFF" ) set (CPACK_BINARY_TBZ2 "ON" ) set (CPACK_BINARY_TGZ "ON" ) set (CPACK_BINARY_TZ "OFF" ) set (CPACK_SOURCE_IGNORE_FILES "/.git;/build;.*~;${CPACK_SOURCE_IGNORE_FILES}") #set (CPACK_INSTALL_CMAKE_PROJECTS "lib;OpenTURNSLib;ALL;/" "python;OpenTURNSPython;ALL;/") # Set global definitions # TODO: remove PACKAGE_ from source code. Needed for compatibility with autotools set (PACKAGE_NAME ${CPACK_PACKAGE_NAME}) set (PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}) if (CPACK_PACKAGE_VERSION_PATCH) set (PACKAGE_VERSION ${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}) endif (CPACK_PACKAGE_VERSION_PATCH) set (PACKAGE_BUGREPORT bugs@openturns.org) set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION}) # uninstall target configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake IMMEDIATE @ONLY ) add_custom_target (uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) # RPATH settings set (CMAKE_INSTALL_RPATH ${LIBRARY_PATH}) set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) if(POLICY CMP0042) # Set MACOSX_RPATH to ON cmake_policy(SET CMP0042 NEW) endif() set (OPENTURNS_SWIG_INCLUDE_DIRS ${INCLUDE_PATH}/openturns/swig) set (OPENTURNS_SWIG_DEFINITIONS -DSWIG_TYPE_TABLE=openturns) # necessary to link against Py_InitModule64 if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8) set (OPENTURNS_SWIG_DEFINITIONS "-DMS_WIN64 ${OPENTURNS_SWIG_DEFINITIONS}") endif () # The tests can't be run if this function is absent enable_testing () add_custom_target (tests COMMENT "Build tests") add_custom_target (check COMMENT "Run pre-installation tests") add_custom_target (installcheck COMMENT "Run post-installation tests") if (BUILD_PYTHON) # workaround for cmake bug #0013449 if (NOT DEFINED CMAKE_FIND_ROOT_PATH) find_package (SWIG) else () find_program (SWIG_EXECUTABLE NAMES swig2.0 swig) if (SWIG_EXECUTABLE) set (SWIG_USE_FILE ${CMAKE_ROOT}/Modules/UseSWIG.cmake) set (SWIG_FOUND TRUE) endif () endif () if (SWIG_FOUND) include (${SWIG_USE_FILE}) mark_as_advanced (SWIG_VERSION SWIG_DIR) endif () find_package (PythonInterp) find_package (PythonLibs) include (FindPythonModule) find_python_module (numpy) find_python_module (scipy) find_python_module (matplotlib 1.1) if (USE_SPHINX) find_program (SPHINX_EXECUTABLE NAMES sphinx-build DOC "Sphinx Documentation Builder (sphinx-doc.org)") find_program (PANDOC_EXECUTABLE NAMES pandoc DOC "a universal document converter") if (SPHINX_EXECUTABLE AND PANDOC_EXECUTABLE) find_python_module (sphinx 1.5.1) find_python_module (numpydoc) find_python_module (nbsphinx) find_python_module (IPython) endif () endif () if (PYTHONINTERP_FOUND) if (DEFINED SITE_PACKAGE) set (OPENTURNS_PYTHON_MODULE_PATH ${SITE_PACKAGE}) else () execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH RESULT_VARIABLE _PYTHON_pythonlib_result OUTPUT_STRIP_TRAILING_WHITESPACE) if (_PYTHON_pythonlib_result) message (SEND_ERROR "Could not run ${PYTHON_EXECUTABLE}") endif () get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE) file (RELATIVE_PATH OPENTURNS_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH}) endif () if (IS_ABSOLUTE ${OPENTURNS_PYTHON_MODULE_PATH}) set(PYTHON_MODULE_PATH ${OPENTURNS_PYTHON_MODULE_PATH}) else () set(PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/${OPENTURNS_PYTHON_MODULE_PATH}) endif () if (CMAKE_VERSION VERSION_LESS "2.8.6") execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print(sys.version_info[0])" OUTPUT_VARIABLE PYTHON_VERSION_MAJOR OUTPUT_STRIP_TRAILING_WHITESPACE) endif () set (OPENTURNS_PYTHON${PYTHON_VERSION_MAJOR}_MODULE_PATH ${OPENTURNS_PYTHON_MODULE_PATH}) endif () endif () add_subdirectory (lib) if (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND) add_subdirectory (python) endif () if (BUILD_VALIDATION) add_subdirectory (validation) endif () include (CPack) install (FILES COPYING COPYING.LESSER COPYING.cobyla COPYING.dsfmt COPYING.ev3 COPYING.faddeeva COPYING.hmat COPYING.kendall COPYING.kissfft COPYING.KolmogorovSmirnovDist COPYING.poissinv COPYING.tnc DESTINATION ${OPENTURNS_DOC_PATH} ) if (CMAKE_VERSION VERSION_GREATER 2.8.5) include(FeatureSummary) feature_summary(WHAT ALL) endif () openturns-1.9/COPYING000066400000000000000000001045131307543307100144620ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . openturns-1.9/COPYING.KolmogorovSmirnovDist000066400000000000000000000065201307543307100210200ustar00rootroot00000000000000/******************************************************************** * * File: KolmogorovSmirnovDist.h * Environment: ISO C99 or ANSI C89 * Author: Richard Simard * Organization: DIRO, Université de Montréal * Date: 1 February 2012 * Version 1.1 * * Copyright March 2010 by Université de Montréal, Richard Simard and Pierre L'Ecuyer ===================================================================== This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =====================================================================*/ Used in OpenTURNS with written permission of the author (in French, sorry): On 07/10/2013 05:39 PM, Regis Lebrun wrote: > > Bonjour Monsieur, > > J'ai lu avec un très grand intérêt votre article "Computing the Two-Sided Kolmogorov-Smirnov Distribution" paru dans le Journal of Statistical Software. > > Je suis un des principaux contributeurs de la librairie OpenTURNS (www.openturns.org) dédié à la propagation probabiliste d'incertitudes. Cette librairie comprend une implémentation du test de Kolmogorov-Smirnov, pour lequel j'ai implémenté l'algorithme de Durbin ainsi que la distribution asymptotique, avant de lire votre article. A cette lecture, il me semble évident que votre implémentation est en tout point largement préférable à la mienne, mais je ne peux pas utiliser tels quels vos développements car ils sont sous licence GPL alors qu'OpenTURNS est sous licence LGPL. > > J'ai vu que vous aviez donné votre autorisation au projet Accord (https://code.google.com/p/accord/) pour qu'ils puissent utiliser votre code dans une librairie sous licence LGPL. Pourrais-je bénéficier de la même autorisation pour pouvoir intégrer votre code à ma librairie, avec tout le crédit qui vous ai dû ainsi que je l'ai fait pour toutes les autres contributions externes à la librairie? > > Je vous remercie pour l'attention que vous avez porté à ma demande et espère beaucoup recevoir votre accord. > > Bien cordialement, > Regis Lebrun ============================================= Cher M. Lebrun, vous pouvez utiliser notre programme pour la distribution de Kolmogorov-Smirnov avec la licence LGPL. Je recommande d'utiliser la version 1.1 sur ma page http://www.iro.umontreal.ca/~simardr/ksdir/ La version sur le site du Journal of Statistical Software est la version 1.0. La différence est que la version 1.1 utilise les algorithmes exacts pour n <= 500 alors que l'ancienne version 1.0 les utilise pour n <= 140. Le programme sera donc plus précis pour n <= 500. Pour n > 500, on utilise des approximations asymptotiques comme avant. -- ================================================= Richard Simard Laboratoire de simulation et d'optimisation Université de Montréal, IRO openturns-1.9/COPYING.LESSER000066400000000000000000000167431307543307100154650ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. openturns-1.9/COPYING.cobyla000066400000000000000000000022001307543307100157200ustar00rootroot00000000000000Copyright (c) 1992, Michael J. D. Powell (M.J.D.Powell@damtp.cam.ac.uk) Copyright (c) 2004, Jean-Sebastien Roy (js@jeannot.org) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. openturns-1.9/COPYING.dsfmt000066400000000000000000000027001307543307100155710ustar00rootroot00000000000000Copyright (C) 2007 Takashi Takekawa. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the RIKEN nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. openturns-1.9/COPYING.ev3000066400000000000000000000002761307543307100151570ustar00rootroot00000000000000Extracted form the source files: ** Author: Leo Liberti ... ** Source: GNU C++ ... ** License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. openturns-1.9/COPYING.faddeeva000066400000000000000000000022561307543307100162210ustar00rootroot00000000000000/* Copyright (c) 2012 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Available at: http://ab-initio.mit.edu/Faddeeva openturns-1.9/COPYING.hmat000066400000000000000000000031401307543307100154040ustar00rootroot00000000000000/* HMat-OSS (HMatrix library, open source software) Copyright (C) 2014-2015 Airbus Group SAS This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. http://github.com/jeromerobert/hmat-oss */ Used within OpenTURNS with the written permission of the HMAT representative: De: Duceau, Eric Envoyé: mercredi 10 décembre 2014 17:17 À: Lebrun, Regis Cc: Risk, Ian; Mangeant, Fabien; Guilbert, Gerard Objet: deviation wrt GPL licence Dear colleague, In the limited frame of the development of Open Turns software, you are allowed to use the “Hmatrix library”, recently referenced in Open Source with the GPL v3 License. @ Ian & Gérard : This deviation is given to enrich our contribution to the partnership we have with EDF & Phimeca. There is no impact on our IPR nor on valorization. Regards Pr Eric Duceau Airbus Group Innovations Scientific Director System Engineering, Applied Math & IT 12, rue Pasteur BP 76 92152 Suresnes Cedex openturns-1.9/COPYING.kendall000066400000000000000000000033721307543307100160740ustar00rootroot00000000000000/* This file contains code to calculate Kendall's Tau in O(N log N) time in * a manner similar to the following reference: * * A Computer Method for Calculating Kendall's Tau with Ungrouped Data * William R. Knight Journal of the American Statistical Association, Vol. 61, * No. 314, Part 1 (Jun., 1966), pp. 436-439 * * Copyright (C) 2010 David Simcha * * License: * Boost Software License - Version 1.0 - August 17th, 2003 * * Permission is hereby granted, free of charge, to any person or organization * obtaining a copy of the software and accompanying documentation covered by * this license (the "Software") to use, reproduce, display, distribute, * execute, and transmit the Software, and to prepare derivative works of the * Software, and to permit third-parties to whom the Software is furnished to * do so, all subject to the following: * * The copyright notices in the Software and this entire statement, including * the above license grant, this restriction and the following disclaimer, * must be included in all copies of the Software, in whole or in part, and * all derivative works of the Software, unless such copies or derivative * works are solely in the form of machine-executable object code generated by * a source language processor. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ openturns-1.9/COPYING.kissfft000066400000000000000000000027031307543307100161300ustar00rootroot00000000000000Copyright (c) 2003-2010 Mark Borgerding All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. openturns-1.9/COPYING.poissinv000066400000000000000000000117021307543307100163300ustar00rootroot00000000000000/* This software was written by Mike Giles, copyright University of Oxford, and is provided under the terms of the GNU GPLv3 license: http://www.gnu.org/licenses/gpl.html Commercial users who would like to use the software under a more permissive license, such as BSD, should contact the author: mike.giles@maths.ox.ac.uk */ Used in OpenTURNS with written permission of the author: Mike Giles Aujourd’hui à 1h23 PM À regis lebrun That sounds fine so I'm happy for you to use it. Is this email sufficient authorisation or would you like something else? I suggest you review my validation software carefully to ensure that you are happy with the way in which I have validated the software. Or you might like to develop your own validation tests for it. Please ask me if you have any questions about anything. Cheers, Mike On 27 Jan 2014, at 11:27, regis lebrun wrote: > Dear Mike, > > Thank you for your quick answer and your positive feedback. I am pleased to clarify the point you raised: > > + Concerning OpenTURNS, yes, it is distributed in source form in addition to binary form (and you can even follow the development as our versioning system is public). so your source code will be visible (but it is already the case on your website). > > + Concerning the license, your code retains its initial license even if it is included in the sources of OpenTURNS. Nobody is allowed to extract it and use it independently of OpenTURNS without your written permission, but of course anybody using OpenTURNS in a commercial product can use your code through its openTURNS interface (ie the Poisson::computeQuantile() method) > > The GPL package ksdir, developed by Richard SIMARD (http://www.iro.umontreal.ca/~simardr/ksdir/) has been used by the LGPL Accord project (http://accord.googlecode.com/svn/docs/html/T_Accord_Statistics_Testing_KolmogorovSmirnovTest.htm) with the written permission of the author, and instead of copy/pasting this code, I asked the initial author for the authorization to use his work in OpenTURNS (see http://trac.openturns.org/browser/openturns/trunk/lib/COPYING.KolmogorovSmirnovDist) in the very same way I am asking you for the authorization to use your software. > > I perfectly understand your point of view concerning the interaction between profit and non-profit organizations, if a bank makes money with your work you can expect a kind of feedback at least by a generous funding of the academic research. OpenTURNS is made of contributions from many horizons, including several academic teams in Europe. I am sure that your work will be both appreciated and valorized by our users, mainly Electricité de France, Airbus (including Airbus UK at Filton) and many others. > > I hope that it will help you in making your decision. Whatever you decide, I would like to thank you once again for the good job you did with your algorithm. > > Best regards, > > Régis > > > > > ----- Mail original ----- >> De : Mike Giles >> À : Regis Lebrun >> Cc : >> Envoyé le : Lundi 27 janvier 2014 10h40 >> Objet : Re: Use of poissinv.h in a LGPL library >> >> >> Dear Regis, >> >> I am perfectly happy for you to use my software as part of your library, >> and I am willing to grant you an exception to allow you to do this. >> >> However, can I please ask a couple of questions. Do you distribute your >> library as source code? If you do, would the LGPL license allow >> companies to extract my piece of code from your library and use it on >> its own? >> >> To be honest, I'm not sure that this is a likely scenario, but I would >> like to be clear what I am agreeing to. >> >> (Broadly speaking, as I have an engineering background, I am very happy >> for engineering companies to use my software for free, because they have >> a good record of funding academic research. But banks and >> pharmaceutical companies who might be interested in this work are not so >> good at funding academic research so software licensing is one mechanism >> for obtaining funding from them.) >> >> Regards, >> >> Mike >> >> >> >> >> On 21/01/14 21:51, Regis Lebrun wrote: >>> Dear Professor, >>> >>> I read with great interest your article entitled "Fast evaluation of >> the >>> inverse Poisson cumulative distribution function" and I would be very >> pleased >>> to have the possibility to include the associated source code into the >>> OpenTURNS software (www.openturns.org), which is a scientific library >>> dedicated to probabilistic uncertainty modelling and quantification. >>> >>> As your software is released under the GPLv3 license and OpenTURNS is >> released >>> under the LGPL license, I need your written permission to use it as an >>> exception to your default license policy. You will obviously be credited >> for >>> your work in a dedicated COPYING.poissinv file in the source tree of >>> OpenTURNS. >>> >>> I would be very grateful if you could accept my request. >>> >>> Best regards, >>> >> openturns-1.9/COPYING.tnc000066400000000000000000000020751307543307100152450ustar00rootroot00000000000000Copyright (c) 2002-2005, Jean-Sebastien Roy (js@jeannot.org) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. openturns-1.9/ChangeLog000066400000000000000000002565031307543307100152100ustar00rootroot00000000000000= New Features = == 1.9 release (2017-04-18) == #release-1.9 === Library === ==== Major changes ==== * Integrate otlhs module * New function API * Canonical format low-rank tensor approximation ==== New classes ==== * SpaceFillingPhiP, SpaceFillingMinDist, SpaceFillingC2 * LinearProfile, GeometricProfile * MonteCarloLHS, SimulatedAnnealingLHS * LHSResult * MultiStart * MethodOfMomentsFactory * SymbolicFunction, AggregatedFunction, ComposedFunction, DatabaseFunction, DualLinearCombinationFunction * LinearCombinationFunction, LinearFunction, QuadraticFunction, ParametricFunction, IndicatorFunction * DistributionTransformation * GeneralizedExtremeValue * UniVariateFunctionFamily, UniVariateFunctionFactory, TensorizedUniVariateFunctionFactory * MonomialFunction, MonomialFunctionFactory * KarhunenLoeveSVDAlgorithm * RankMCovarianceModel * SparseMethod * CanonicalTensorEvaluation|Gradient, TensorApproximationAlgorithm|Result * GaussLegendre ==== API changes ==== * Removed deprecated SLSQP, LBFGS and NelderMead classes * Removed deprecated QuadraticCumul class * Removed classes UserDefinedPair, HistogramPair * Removed deprecated method WeightedExperiment::getWeight * Removed deprecated method DistributionFactory::build(NumericalSample, CovarianceMatrix&) * Removed deprecated distributions alternative parameters constructors, accessors * Added a generic implementation of the computeLogPDFGradient() method in the DistributionImplementation class. * Allow Box to support bounds * Deprecated LinearNumericalMathFunction in favor of LinearFunction * Deprecated QuadraticNumericalMathFunction in favor of QuadraticFunction * Deprecated NumericalMathFunction::GetValidConstants|GetValidFunctions|GetValidOperators * Renamed ComposedNumericalMathFunction to ComposedFunction * Renamed LinearNumericalMathFunction to LinearFunction * Swap covModel and basis arguments in KrigingAlgorithm constructors * Removed useless keepCholesky argument in KrigingAlgorithm constructors * Renamed OptimizationSolver to OptimizationAlgorithm * Renamed TemporalNormalProcess to GaussianProcess * Renamed SpectralNormalProcess to SpectralGaussianProcess * Renamed GeneralizedLinearModelAlgorithm to GeneralLinearModelAlgorithm * Renamed GeneralizedLinearModelResult to GeneralLinearModelResult * Renamed DynamicalFunction to FieldFunction * Renamed SpatialFunction to ValueFunction * Renamed TemporalFunction to VertexValueFunction * Deprecated [gs]etOptimizationSolver methods * Renamed ProductNumericalMathFunction to ProductFunction * Deprecated KarhunenLoeveP1Factory, KarhunenLoeveQuadratureFactory * Deprecated GramSchmidtAlgorithm, ChebychevAlgorithm * Added getSobolAggregatedIndices() to FunctionalChaosRandomVector * Added computeWeight() to Mesh * Deprecated NumericalMathFunction ctors * Deprecated NumericalMathFunction for Function * Deprecated NumericalSample for Sample * Deprecated NumericalPoint[WithDescription] for Point[WithDescription] * Deprecated ResourceMap::[SG]AsNumericalScalar for [SG]AsScalar * Deprecated SpecFunc::*NumericalScalar* * Deprecated NumericalScalar for Scalar * Deprecated NumericalComplex for Complex * Deprecated DistributionImplementation::getGaussNodesAndWeights === Python module === === Miscellaneous === === Bug fixes === * #351 (FORM is it possible to hav a ".setMaximumNumberOfEvaluations") * #729 (KDTree & save) * #774 (Exact limits of a normal distribution with unknown mean and variance) * #866 (Check the parameter estimate for the kriging model) * #869 (The ProductNumericalMathFunction class has no example) * #871 (GeneralizedExponential P parameter : int or float ?) * #872 (Cannot draw a Text drawable using R) * #874 (Compatibility between a distribution factory and an alternate parametrization not checked) * #875 (TruncatedNormalFactory randomly crashes) * #876 (Bad time grid in StationaryCovarianceModelFactory::build) * #877 (centered whitenoise limitation) * #878 (Viewer does not take into account labels in Contour) * #879 (Incomplete arguments in FunctionalChaosRandomVector docstrings) * #882 (RandomMixture segfaults with Dirac) * #883 (VisualTest.DrawHistogram should rely on Histogram.drawPDF) * #886 (Bogus RandomMixture::getSupport) * #887 (Bogus PDF evaluation in RandomMixture with mix of continuous/discrete variables) * #888 (Bogus RandomMixture::getSample) == 1.8 release (2016-11-18) == #release-1.8 === Library === ==== Major changes ==== * Changed the default orthonormalization algorithm of StandardDistributionPolynomialFactory from GramSchmidtAlgorithm to AdaptiveStieltjesAlgorithm * New api for sensitivity analysis * New methods to compute confidence regions in Distribution ==== New classes ==== * SubsetSampling * AdaptiveDirectionalSampling * KarhunenLoeveQuadratureFactory * SobolIndicesAlgorithm * SaltelliSensitivityAlgorithm * MartinezSensitivityAlgorithm * JansenSensitivityAlgorithm * MauntzKucherenkoSensitivityAlgorithm * SoizeGhanemFactory * LevelSetMesher * HistogramPolynomialFactory * ChebychevFactory * FourierSeriesFactory, HaarWaveletFactory * OrthogonalProductFunctionFactory ==== API changes ==== * Removed deprecated (AbdoRackwitz|Cobyla|SQP|TNC)SpecificParameters classes * Removed AbdoRackwitz|Cobyla|SQP::[gs]etLevelFunction|[gs]etLevelValue * Removed deprecated OptimizationSolver::setMaximumIterationsNumber * Removed deprecated method Distribution::setParametersCollection(NP) * Removed deprecated PersistentFactory string constructor * Deprecated QuadraticCumul class in favor of TaylorExpansionMoments * Renamed __contains__ to contains * Modified NumericalMathFunction::[sg]etParameter to operate on NumericalPoint instead NumericalPointWithDescription * Add NumericalMathFunction::[sg]etParameterDescription to access the parameter description * Deprecated classes UserDefinedPair, HistogramPair * Removed SensitivityAnalysis class * Deprecated SLSQP, LBFGS and NelderMead classes in favor of NLopt class * Deprecated LAR in favor of LARS * Deprecated DistributionFactory::build(NumericalSample, CovarianceMatrix&) * Deprecated distributions alternative parameters constructors, accessors * Swap SpectralModel scale & amplitude parameters: CauchyModel, ExponentialCauchy === Python module === * Added the possibility to distribute PythonFunction calls with multiprocessing === Miscellaneous === * Improved the computeCDF() method of Normal * Added the computeMinimumVolumeInterval(), computeBilateralConfidenceInterval(), computeUnilateralConfidenceInterval() and computeMinimumVolumeLevelSet() methods to compute several kind of confidence regions in Distribution * Added HarrisonMcCabe, BreuschPagan and DurbinWatson tests to test homoskedasticity, autocorrelation of linear regression residuals * Added two samples Kolmogorov test * Improved the speed of many algorithms based on method binding * Added more options to control LHSExperiment and LowDiscrepancyExperiment * Improved the IntervalMesher class: now it takes into account the diamond flag * Shortened ResourceMap keys to not contain 'Implementation' * Improved the performance of Classifier/MixtureClassifier/ExpertMixture === Bug fixes === * #535 (parallel-threads option cannot be changed at runtime with TBB) * #565 (The SensitivityAnalysis class manages only one single output.) * #604 (Bug concerning the NonCentralStudent distribution) * #698 (KernelSmoothing() as a factory) * #786 (Bug in sensitivity analysis) * #802 (Python issue with ComplexMatrix::solveLinearSystem) * #803 (prefix openturns includes) * #813 (Error when multiplying a Matrix by a SymmetricMatrix) * #815 (ConditionedNormalProcess test fails randomly) * #820 (Python distribution fails randomly when computing the PDF over a sample) * #822 (Incorect Matrix / point operations with cast) * #824 (Confusing behavior of NumericalSample::sort) * #828 (ImportFromCSVFile fails on a file created by exportToCSVFile) * #830 (more optim algos examples) * #831 (Missing get/setParameter in OpenTURNSPythonFunction) * #833 (Homogeneity in Covariance Models) * #837 (TruncatedDistribution::setParameter segfaults) * #838 (Symmetry of SymmetricMatrix not always enforced) * #840 (Remove WeightedExperiment::getWeight) * #841 (Better CovarianceModelCollection in Python) * #842 (Better ProcessCollection in Python) * #843 (Remove all the specific isCopula() methods) * #848 (Inverse Wishart sampling) * #849 (Ambiguous NumericalSample::computeQuantile) * #853 (Switch the default for normalize boolean from TRUE to FALSE in ot.GeneralizedLinearModelAlgorithm) * #854 (InverseWishart.computeLogPDF) * #861 (document HMatrix classes) == 1.7 release (2016-01-27) == #release-1.7 === Library === ==== Major changes ==== * Optimization API rework * New parametrization of covariance models * Changed behaviour of ExponentialCauchy * KrigingAlgorithm rework ==== New classes ==== * OptimizationSolver, OptimizationProblem * SLSQP, LBFGS, NelderMead optimization algorithms from NLopt * DiracCovarianceModel, TensorizedCovarianceModel * HMatrixParameters: support class for HMat * KarhunenLoeveP1Factory: Karhunen-Loeve decomposition of a covariance model using a P1 Lagrange interpolation * GeneralizedLinearModelAlgorithm, GeneralizedLinearModelResult: estimate parameters of a generalized linear model * BipartiteGraph: red/black graph * CumulativeDistributionNetwork: high dimensional distribution using a collection of (usually) small dimension distributions and a bipartite graph describing the interactions between these distributions * AdaptiveStieltjesAlgorithm: orthonormal polynomials wrt arbitrary measures using adaptive integration * MaximumLikelihoodFactory: generic maximum likelihood distribution estimation service ==== API changes ==== * Removed BoundConstrainedAlgorithm class * Removed NearestPointAlgorithm class * Deprecated AbdoRackwitz|Cobyla|SQP::[gs]etLevelFunction|[gs]etLevelValue * Deprecated (AbdoRackwitz|Cobyla|SQP|TNC)SpecificParameters classes * Replaced KrigingAlgorithm::[gs]etOptimizer methods by KrigingAlgorithm::[gs]etOptimizationSolver * Removed ConfidenceInterval class * Removed draw method to CovarianceModel * Added Distribution::[sg]etParameter parameter value accessors * Added Distribution::getParameterDescription parameter description accessor * Deprecated method Distribution::setParametersCollection(NP) * Removed CovarianceModel::getParameters * Added CovarianceModel::getParameter * Added CovarianceModel::getParameterDescription * Moved CovarianceModel::setParameters to CovarianceModel::setParameter * Added discretizeAndFactorize method to covariance model classes * Added discretizeHMatrix method to covariance model classes * Added discretizeAndFactorizeHMatrix method to covariance model classes * Deprecated OptimizationSolver::setMaximumIterationsNumber in favor of OptimizationSolver::[sg]etMaximumIterationNumber * Moved NumericalMathFunction::[sg]etParameters to NumericalMathFunction::[sg]etParameter * Moved NumericalMathFunction::parametersGradient to NumericalMathFunction::parameterGradient * Removed NumericalMathFunction::[sg]etInitial(Evaluation|Gradient|Hessian)Implementation * Renamed DistributionImplementationFactory to DistributionFactoryImplementation * Extended BoxCoxFactory::build to generalized linear models === Python module === * Support infix operator for matrix multiplication (PEP465) === Miscellaneous === * Enhanced print of samples * Dropped old library wrappers === Bug fixes === * #784 (Troubles with UserDefinedFactory/UserDefined) * #790 (AbdoRackwitz parameters) * #796 (Beta distribution: if sample contains Inf, freeze on getSample) * #797 (computeProbability might be wrong when distribution arithmetic is done) * #798 (Error message misstyping (Gamma distribution)) * #799 (Error message misstyping (Gumbel distribution factory)) * #800 (Exponential distribution built on constant sample) * #804 (no IntervalMesher documentation content) * #805 (Python segfault in computeSilvermanBandwidth) * #806 (DistributionImplementation::computeCDFParallel crash) * #808 (Index check of SymmetricTensor fails when embedded within a PythonFunction) * #812 (Sphinx documentation build error) == 1.6 release (2015-08-14) == #release-1.6 === Library === ==== Major changes ==== * Improved encapsulation of hmat-oss to use H-Matrices in more classes * Kriging metamodelling becomes vectorial * Conditional normal realizations * Polynomial chaos performance improvements (#413) ==== New classes ==== * VonMises, distribution * Frechet, distribution * ParametrizedDistribution, to reparametrize a distribution * DistributionParameters, ArcsineMuSigma, BetaMuSigma, GumbelAB, GumbelMuSigma, GammaMuSigma, LogNormalMuSigma, LogNormalMuSigmaOverMu, WeibullMuSigma parameters * PolygonArray, allows to draw a collection of polygons * MarginalDistribution, MaximumDistribution, RatioDistribution, arithmetic distributions * KrigingRandomVector * ConditionalNormalProcess * MetaModelValidation, for the validation of a metamodel ==== API changes ==== * Added a new draw3D() method based on Euler angles to the Mesh class. * Changed the parameter value of the default constructor for the AliMikhailHaqCopula and FarlieGumbelMorgensternCopula classes. * Added a new constructor to the ParametricEvaluationImplementation class. * Added floor, ceil, round, trunc symbols to analytical function. * Allow to save/load simulation algorithms * Added the low order G1K3 rule to the GaussKronrodRule class. * Added the BitCount() method to the SpecFunc class. * Added vectorized versions of the non-uniform random generation methods in the DistFunc class. * Added a generic implementation of the computePDF() method in the DistributionImplementation class. * Added the computeMinimumVolumeInterval() method to compute the minimum volume interval of a given probability content to the DistributionImplementation class in the univariate case. * Added the keys "CompositeDistribution-SolverEpsilon" and "FunctionalChaosAlgorithm-PValueThreshold" to the ResourceMap class. * Added the max() operator as well as new versions of the algebra operators to the DistributionImplementation class. * Added a new add() method to the ARMACoefficients class. * Allowed to parameterize the CompositeDistribution class through ResourceMap. * Allow the use of hmat in KrigingAlgorithm * Added getConditionalMean method to KrigingResult * Added getConditionalCovariance method to KrigingResult * Added operator() to KrigingResult to get the conditional normal distribution * Improved TemporalNormalProcess : added specific setMethod to fix numerical method for simulation === Python module === * Fixed IPython 3 inline svg conversion * Improved sequence[-n] accessors (#760) === Miscellaneous === * Improved performance of MetropolisHastings, set default burnin=0, thin=1, non-rejected components * Improved the coupling tools module using format mini-language spec * Improved the pretty-printing of the LinearCombinationEvaluationImplementation class. * Improved the draw() method of the NumericalMathEvaluationImplementation and NumericalMathFunction classes to better handle log scale. * Improved the GaussKronrod class to avoid inf in the case of pikes in the integrand. * Improved the numerical stability of the ATanh() method in the SpecFunc class. * Improved many of the nonlinear transformation methods of the distribution class. * Improved the automatic parameterization of the FunctionalChaosAlgorithm. It closes ticket #781. * Improved the robustness of the GeneralizedParetoFactory, TruncatedNormal and MeixnerDistributionFactory classes. * Made some minor optimizations in the TemporalNormalProcess class. === Bug fixes === * #751 (IndicesCollection as argument of Mesh) * #772 (FORM does not work if Event was constructed from Interval) * #773 (Problems with Event constructed from Interval) * #779 (PolygonArray not available from python) * #781 (failure to transform data in chaos) * #789 (Time consuming extraction of chaos-based Sobol indices in the presence of many outputs) * #791 (Bug in ProductCovarianceModel::partialGradient) * #792 (PythonFunction does not check the number of input args) == 1.5 release (2015-02-11) == #release-1.5 === Library === ==== Major changes ==== * PCE: polynomial cached evaluations * Kriging: new kernels including anisotropic ones * Distribution: more efficient algebra, more copulas and multivariate distributions * Bayesian modeling: improved MCMC, BayesDistribution, enhanced ConditionalDistribution, conjugate priors for Normal distribution ==== New classes ==== * AggregatedProcess, allowing to stack processes with common spatial dimension * ProductDistribution class, dedicated to the modeling of the distribution of the product of two independent absolutely continuous random variables. * MaximumEntropyStatisticsDistribution * MaximumEntropyStatisticsCopula * CovarianceHMatrix, which can be used by TemporalNormalProcess to approximate covariance matrix via an H-Matrix library. * InverseChiSquare * InverseGamma * NormalGamma * OrdinalSumCopula * MaternModel * ProductCovarianceModel * BoxCoxGradientImplementation * BoxCoxHessianImplementation * InverseBoxCoxGradientImplementation * InverseBoxCoxHessianImplementation * KrigingResult * BayesDistribution * PythonNumericalMathGradientImplementation * PythonNumericalMathHessianImplementation * PythonDynamicalFunctionImplementation ==== API changes ==== * Deprecated method NumericalMathFunction|NumericalMathFunctionEvaluation::getOutputHistory|getInputHistory in favor of NumericalMathFunction::getHistoryOutput|getHistoryInput * Removed method Graph::initializeValidLegendPositions * Renamed the getMarginalProcess() method into getMarginal() in the Process class and all the related classes. * Deprecated methods Graph::getBitmap|getPostscript|getVectorial|getPath|getFileName * Deprecated methods Graph::draw(path, file, width, height, format), use draw(path+file, width, height, format) instead * Removed deprecated methods ResourceMap::SetAsUnsignedLong|GetAsUnsignedLong in favor of ResourceMap::SetAsUnsignedInteger|GetAsUnsignedInteger * Removed deprecated methods NumericalSample::scale|translate * Renamed the acosh(), asinh(), atanh() and cbrt() methods of the SpecFunc class into Acosh(), Asinh(), Atanh() and Cbrt() and provided custom implementations. * Added the rUniformTriangle() method to the DistFunc class to generate uniform random deviates in a given nD triangle. * Extended the GaussKronrod, IntegrationAlgorithm and IntegrationAlgorithmImplementation classes to multi-valued functions. * Extended the FFT and RandomMixture classes to 2D and 3D. * Added the setValues() method to the Field class. * Added Simulation::setProgressCallback|setStopCallback to set up hooks * Added the getParameterDimension() method to the NumericalMathFunction class. * Added new parallel implementations of the discretize() and discretizeRow() methods in the CovarianceModelImplementation class. * Added the key "Os-RemoveFiles" to the ResourceMap class. * Added the BesselK(), LogBesselK() and BesselKDerivative() methods to the SpecFunc class. * Added the spatial dimension information to the CovarianceModel class. * Added a discretize() method based on sample to the CovarianceModel class. * Added a nugget factor to all the covariance models. * Added an history mechanism to the MCMC class. * Added accessors to the amplitude, scale, nugget factor, spatial correlation to the CovarianceModel class. * Added the getLogLikelihoodFunction() method to the KrigingAlgorithm class. * Added a link function to the ConditionalDistribution class. * Added the getMarginal(), hasIndependentCopula(), hasEllipticalCopula(), isElliptical(), isContinuous(), isDiscrete(), isIntegral() methods to the RandomMixture class. * Added the getSupport() and the computeProbability() methods to the Mixture class. * Added a simplified constructor to the BayesDistribution class. * Added the computeRange() and getMarginal() methods to the BayesDistribution class. * Added the isIncreasing() method to the Indices class. * Added a dedicated computeLogPDF() method to the Rice class. * Added the LargeCaseDeltaLogBesselI10() and DeltaLogBesselI10() methods to the SpecFunc class. * Removed the useless getPartialDiscretization() method to the CovarianceModel class. * Removed the getConditionalCovarianceModel() in the KrigingAlgorithm class. * Renamed the getMeshDimension() method into getSpatialDimension() in the DynamicalFunction class. * Renamed the isNormal(), isInf() and isNaN() methods into IsNormal(), IsInf() and IsNan() in the SpecFunc class. * Removed FittingTest::GetLastResult, FittingTest::BestModel*(sample, *) in favor of FittingTest::BestModel*(sample, *, &bestResult) * Deprecated NumericalMathFunction(Implementation)::set{Evaluation|Gradient|Hessian}Implementation in favor of NumericalMathFunction(Implementation)::set{Evaluation|Gradient|Hessian} * Deprecated NumericalSample::compute{Range,Median,Variance,Skewness,Kurtosis,CenteredMoment,RawMoment}PerComponent * Deprecated ProcessSample::setField(index, field) in favor of ProcessSample::setField(field, index) === Python module === * Include sphinx documentation * Improved collection accessors * Allow to overload gradient and hessian * Improved viewer's integration with matplotlib api * Added PythonDynamicalFunction to override DynamicalFunction === Miscellaneous === * In Graph::draw, the file extension overrides the format argument * Improved the compactSupport() method of the UserDefined class. Now, it works with multidimensional distributions. * Improved the computePDF() and computeCDF() methods of the UserDefined class. * Improved the RandomMixture class to allow for constant distribution and Dirac contributors. * Added /FORCE option to windows installer to allow out-of-python-tree install * Added a generic implementation of the getMarginal() method to the Process class for 1D processes. * Added a description to all the fields generated by a getRealization() method of a process. * Changed the values of the keys ConditionalDistribution-MarginalIntegrationNodesNumber, KernelSmoothing-BinNumber, SquaredExponential-DefaultTheta, AbsoluteExponential-DefaultTheta, GeneralizedExponential-DefaultTheta in the ResourceMap class and the openturns.conf file. * Changed the parameterization of the AbsoluteExponential, GeneralizedExponential and SquaredExponential classes. * Changed the default parameterization of the ComposedCopula, ConditionalDistribution, AliMikhailHaqCopula, FarlieGumbelMorgensternCopula, KernelMixture, Mixture and NormalCopula classes. * Changed the default presentation of analytical functions. * Changed the parameters of the default distribution of the FisherSnedecor class. * Changed the algorithm used in the FisherSnedecorFactory class. Now the estimation is based on MLE. * Extended the Debye() method of the SpecFunc class to negative arguments. * Extended the computeCDF(), computeDDF(), computeProbability() methods of the RandomMixture class. * Extended the ConditionalDistribution class to accept a link function. * Extended the build() method of the IntervalMesher class to dimension 3. * Improved the capabilities of the KrigingAlgorithm class. Now it can use anisotropic covariance models. * Improved the __str__() method of the CompositeDistribution class. * Improved the numerical stability of the computeCharacteristicFunction() in the Beta class. * Improved the distribution algebra in the DistributionImplementation class. * Improved the getKendallTau() and computeCovariance() methods of the SklarCopula class. * Improved the Gibbs sampler in the TemporalNormalProcess class. * Improved the presentation of the graphs generated by the drawPDF() and drawCDF() methods of the distributions. * Improved the messages sent by the NotYetImplementedException class. * Improved the pretty-print of the NumericalMathFunction class. * Improved the HistogramFactory and KernelSmoothing classes by using inter-quartiles instead of standard deviations to estimate scale parameters. * Improved the management of small coefficients in the DualLinearCombinationEvaluationImplementation class. * Improved the algorithms of the getRealization() and computePDF() methods of the Rice class. * Improved the operator() method of the PiecewiseLinearEvaluationImplementation class. === Bug fixes === * #614 (FORM Method - Development of sensitivity and importance factors in the physical space) * #673 (Perform the computeRange method of the PythonDistributionImplementation class) * #678 (Pretty-printer for gdb) * #688 (incorrect analytical gradient) * #704 (Problem with Exception) * #709 (MatrixImplementation::computeQR issues) * #713 (Dirichlet hangs on np.nans) * #720 (Missing LHSExperiment::getShuffle) * #721 (Python implementation of a NumericalMathGradientImplementation) * #731 (Problems with Rice and FisherSnedecor distributions) * #736 (Graph : keep getBitmap, getVectorial, getPDF, getPostScript, initializeValidLegendPositions?) * #737 (Bug in composeddistribution inverse iso-probabilistic transformation in the ellipical distribution case ) * #738 (Incorrect pickling of ComposedDistribution with ComposedCopula) * #739 (Bug in the SpecFunc::LnBeta() method) * #744 (Incorrect iso-probabilistic transformation for elliptical ComposedDistribution) * #745 (DirectionalSampling: ComposedCopula bug and budget limitation ignored) * #747 (Packaging for conda) * #748 (Can't add sklar copula to CopulaCollection) * #754 (Bad conversion list to python with negative integer) * #755 (inconsistency in functions API) * #757 (Spearman correlation in CorrelationAnalysis) * #759 (Problem with RandomMixture::project) * #762 (NumericalSample's export produce empty lines within the Windows environment) * #763 (Missing description of samples with RandomVector realizations) * #764 (RandomVector's description) * #769 (Dirichlet behaves strangely on constant) * #770 (Problem with FittingTest based on BIC) == 1.4 release (2014-07-25) == #release-1.4 === Library === ==== Major changes ==== * Native windows support, OT.dll can be generated by MSVC compilers; Python bindings not yet available * 64bits windows support * Python docstrings work started * Major speed improvement for random fields ==== New distributions ==== * Wishart * InverseWishart * CompositeDistribution ==== New classes ==== * KrigingResult * LevelSet * KDTree * ExponentiallyDampedCosineModel * SphericalModel * MeshFactory * IntervalMesher * ParametricEvaluationImplementation * ParametricGradientImplementation * ParametricHessianImplementation ==== API changes ==== * Removed deprecated types UnsignedLong, IndexType in favor of UnsignedInteger, SignedInteger * Deprecated method ResourceMap::SetAsUnsignedLong|GetAsUnsignedLong in favor of ResourceMap::SetAsUnsignedInteger|GetAsUnsignedInteger * Removed method ResourceMap::GetAsNewCharArray * Renamed Matrix::computeSingularValues(u, vT) to computeSVD(u, vT) * Renamed MatrixImplementation::computeEigenValues(v) to computeEV(v) * Added Matrix::computeTrace * Renamed WeightedExperiment::generate(weights) to WeightedExperiment::generateWithWeights(weights) * Removed DistributionImplementation::getGaussNodesAndWeights(void) * Removed DescriptionImplementation class * Removed deprecated method NumericalPoint::norm2 in favor of normSquare, normalize2 in favor of normalizeSquare * Removed deprecated method SpectralModel::computeSpectralDensity * Deprecated method NumericalSample::scale|translate === Python module === * Docstring documentation, can be used in combination with sphinx (in-progress) * Added Drawable|Graph::_repr_svg_ for automatic graphing within IPython notebook * Added Object::_repr_html_ to get html string representation of OpenTURNS objects * Some methods no longer return argument by reference, return tuple items instead (see #712) === Miscellaneous === * DrawHenryLine now works for any Normal sample/distribution. * Added a DrawHenryLine prototype with given Normal distribution. * Added a add_legend=True kwarg to openturns.viewer.View. * New arithmetic on Distribution (can add/substract/multiply/divide/transform by an elementary function) * New arithmetic on NumericalMathFunction (can add/substract/multiply) * New arithmetic on NumericalSample (can add/substract a scalar, a point or a sample, can multiply/divide by a scalar, a point or a square matrix) === Bug fixes === * #693 (Distribution.computeCDFGradient(NumericalSample) segfaults) * #697 (Problem with LogNormal on constant sample) * #700 (Problem with MeixnerDistribution (continuation)) * #706 (rot tests fail with r 3.1.0) * #707 (Error when executing ot.Multinomial().drawCDF()) * #708 (Typing across OpenTURNS matrices hangs, fills RAM and is eventually killed) * #710 (Slicing matrices) * #718 (DirectionalSampling does not set the dimension of the SamplingStrategy) * #712 (do not pass python arguments as reference) * #722 (Problem with drawPDF() for Triangular distribution) * #725 (Remove NumericalSample::scale/translate ?) * #726 (Defect in the Multinomial distribution constructor) == 1.3 release (2014-03-06) == #release-1.3 === Library === ==== Major changes ==== * Extended process algorithms to stochastic fields * Kriging metamodelling * Optionally use Boost for better distribution estimations ==== New kriging classes ==== * KrigingAlgorithm * KrigingGradient * SquaredExponential * GeneralizedExponential * AbsoluteExponential * ConstantBasisFactory * LinearBasisFactory * QuadraticBasisFactory ==== New classes ==== * Skellam * SkellamFactory * MeixnerDistribution * MeixnerDistributionFactory * GaussKronrod * GaussKronrodRule * TriangularMatrix * QuadraticNumericalMathFunction ==== API changes ==== * Removed framework field in generic wrapper * Added the getVerticesNumber(), getSimplicesNumber() and getClosestVertexIndex() methods to the Mesh class. * Renamed the getClosestVertexIndex() method into getNearestVertexIndex() in the Mesh class. * Added the computeSurvivalFunction() method to distributions * Added the getSpearmanCorrelation() and getKendallTau() to distributions * Added the DiLog() and Log1MExp() methods to the SpecFunc class. * Added the LogGamma() and Log1p() functions of complex argument to the SpecFunc class. * Added the setDefaultColors() method to the Graph class. * Added the computeLinearCorrelation() method as an alias to the computePearsonCorrelation() method of the NumericalSample class. * Added two in-place division operators to the NumericalSample class. * Added the getShapeMatrix() method to the NormalCopula, Copula, Distribution and DistributionImplementation classes. * Added the getLinearCorrelation() and getPearsonCorrelation() aliases to the getCorrelation() method in the Distribution and DistributionImplementation classes. * Added a new constructor to the SimulationSensitivityAnalysis class. * Added the stack() method to the NumericalSample class. * Added the inplace addition and soustraction of two NumericalSample with same size and dimension. * Removed the TimeSeriesImplementation class. * Added the isBlank() method to the Description class. * Added a new constructor to the Cloud, Curve and Polygon classes. * Added an optimization for regularly discretized locations to the PiecewiseHermiteEvaluationImplementation and PiecewiseLinearEvaluationImplementation classes. * Added the streamToVTKFormat() method to the Mesh class. * Create the RandomGeneratorState class and allow to save and load a RandomGeneratorState. * Allow the use of a sample as operator() method argument of the AnalyticalNumericalMathEvaluationImplementation class. * Removed deprecated method Distribution::computeCDF(x, tail) * Removed deprecated method Curve::set|getShowPoints * Removed deprecated method Drawable::set|getLegendName * Removed deprecated method Pie::Pie(NumericalSample), Pie::Pie(NumericalSample, Description, NumericalPoint) * Deprecated method NumericalPoint::norm2 in favor of normSquare, normalize2 in favor of normalizeSquare === Python module === * Added NumericalSample::_repr_html_ for html representation in IPython * Allow to reuse figure/axes instances from matplotlib viewer * PythonFunction now prints the complete traceback === Miscellaneous === * Improved numerical stability of InverseNormal * Preserve history state in the marginal function. * Port to MinGW-w64 3.0 CRT * Added a new simplification rule to the MarginalTransformationEvaluation for the case where the input and output distributions are linked by an affine transformation. * Propagated the use of potential parallel evaluations of the computeDDF(), computePDF() and computeCDF() methods in many places, which greatly improves the performance of many algorithms. * Allowed for non-continuous prior distributions in the MCMC class. === Bug fixes === * #442 (OT r1.0 Box Cox is only for Time Series Not for Linear Model) * #506 (There are unit tests which fail on Windows with OT 1.0) * #512 (The documentation is not provided with the Windows install) * #589 (The Histogram class is too complicated) * #640 (Optional values formatting in coupling_tools.replace) * #643 (Problem with description in graph) * #645 (Problem to build a truncated normal distribution from a sample) * #647 (cannot save a NumericalMathFunction issued from PythonFunction) * #648 (wrong non-independent normal ccdf) * #649 (Loss of accuracy in LogNormal vs Normal MarginalTransformation (in the (very) far tails)) * #650 (OpenTURNS has troubles with spaces in path names) * #651 (The generalized Nataf transformation is unplugged) * #652 (Problem with setParametersCollection() in KernelSmoothing) * #657 (RandomWalkMetropolisHastings moves to zero-probability regions) * #661 (Problem with getParametersCollection() while using KernelSmoothing) * #664 (AggregatedNumericalMathEvaluationImplementation::getParameters is not implemented) * #667 (Missing draw quantile function in distribution class) * #668 (__str__ method of the Study object occasionally throws an exception) * #669 (Bad export of NumericalSample) * #670 (TruncatedDistribution) * #672 (Multivariate python distribution requires getRange.) * #674 (python nmf dont force cache) * #675 (Bug with standard deviation evaluation for UserDefined distribution with dimension > 1) * #676 (DistributionCollection Study::add crash) * #677 (Error in SobolSequence.cxx on macos 10.9 with gcc4.8) * #681 (Incomplete new NumericalSample features regarding operators) * #682 (dcdflib.cxx license does not comply with Debian Free Software Guidelines) * #683 (Normal) * #685 (muParser.h not installed when using ExternalProject_Add) * #686 (Probabilistic model with SklarCopula can't be saved via pickle) * #687 (Segfault using BIC and SklarCopula) * #688 (incorrect analytical gradient) * #691 (Strange behavior of convergence graph) == 1.2 release (2013-07-26) == #release-1.2 === Library === ==== New combinatorial classes ==== * KPermutations * KPermutationsDistribution * Tuples * CombinatorialGenerator * Combinations ==== New classes ==== * PiecewiseEvaluationImplementation * GeneralizedPareto * GeneralizedParetoFactory * RungeKutta ==== API changes ==== * Switched from getLegendName() and setLegendName() to getLegend() and setLegend() in the drawables. * Extended the add() method of the Collection class to append a collection to a given collection; * Extended the add() method of the Graph class in order to add another Graph. * Added the getCallsNumber() method to the NumericalMathFunction class. * Removed deprecated methods getNumericalSample in Distribution, RandomVector, TimeSeries, and TimeSeries::asNumericalSample. * Removed deprecated methods HistoryStrategy::reset, and resetHistory in NumericalMathFunction, NumericalMathFunctionImplementation, NumericalMathEvaluationImplementation * Removed deprecated method Distribution::computeCharacteristicFunction(NumericalScalar x, Bool logScale) * Removed deprecated method Distribution::computeGeneratingFunction(NumericalComplex z, Bool logScale) * Removed deprecated method Distribution::computeCDF(x, tail) ==== Python module ==== * The distributed python wrapper is now shipped separately * No more need for base class casts * Enhanced collection classes wrapping: no more need for NumericalMathFunctionCollection, DistributionCollection, ... * Introduced pickle protocol support ==== Miscellaneous ==== * Modified the matplotlib viewer in order to use color codes instead of color names, to avoid errors when the color name is not known by matplotlib. * Added a binning capability to the KernelSmoothing class. It greatly improves its performance for large samples (300x faster for 10^6 points and above) * Changed the definition of the sample skewness and kurtosis. Now, we use the unbiased estimators for normal populations. * Changed back to the first (thinest) definition of hyperbolic stratas. Added a function to control the number of terms per degree. ==== Bug fixes ==== * #411 (Long time to instanciate a NumericaMathFunction (analytical function)) * #586 (The Pie graphics could be easily improved.) * #593 (Can't draw a Contour drawable with the new viewer) * #594 (Useless dependency to R library) * #595 (Bug in distributed_wrapper if tmpdir point to a network filesystem) * #596 (Bug in distributed_wrapper if files_to_send are not in current directory.) * #597 (The SWIG typemap is still failing to assign some prototypes for overloaded basic objects) * #598 (distributed_wrapper do not kill remote sleep process.) * #599 (Wrong quantile estimation in Histogram distribution) * #600 (Please remove timing checks from python/test/t_coupling_tools.py) * #606 (Too permissive constructors) * #608 (Distributed_python_wrapper : files permissions of files_to_send parameter are not propagated) * #609 (How about implementing a BlatmanHyperbolicEnumerateFunction?) * #612 (Missing description using slices) * #616 (PythonDistribution) * #619 (chaos rvector from empty chaos result segfault) * #620 (LogNormalFactory does not return a LogNormal) * #622 (undetermined CorrectedLeaveOneOut crash) * #630 (Fix build failure with Bison 2.7) * #634 (NMF bug within the python api) * #637 (The docstring of coupling_tools is not up-to-date.) * #638 (libopenturns-dev should bring libxml2-dev) == 1.1 release == #release-1.1 === Library === New stochastic process classes: * ARMALikelihood * ARMALikelihoodFactory * UserDefinedStationaryCovarianceModel * StationaryCovarianceModelFactory * UserDefinedCovarianceModel * CovarianceModelFactory * NonStationaryCovarianceModel * NonStationaryCovarianceModelFactory * DickeyFullerTest New bayesian updating classes: * RandomWalkMetropolisHastings * MCMC * Sampler * CalibrationStrategy * PosteriorRandomVector New distributions: * AliMikhailHaqCopula * AliMikhailHaqCopulaFactory * Dirac * DiracFactory * FarlieGumbelMorgensternCopula * FarlieGumbelMorgensternCopulaFactory * FisherSnedecorFactory * NegativeBinomialFactory * ConditionalDistribution * PosteriorDistribution * RiceFactory New classes: * FunctionalBasisProcess * Classifier * MixtureClassifier * ExpertMixture * Mesh * RestrictedEvaluationImplementation * RestrictedGradientImplementation * RestrictedHessianImplementation ==== API changes ==== * Changed the way the TrendFactory class uses the basis. It is now an argument of the build() method instead of a parameter of the constructor. * Deprecated Distribution::getNumericalSample, RandomVector::getNumericalSample, TimeSeries::getNumericalSample, and TimeSeries::asNumericalSample (getSample) * Deprecated Distribution::computeCharacteristicFunction(NumericalScalar x, Bool logScale) (computeCharacteristicFunction/computeLogCharacteristicFunction) * Deprecated Distribution::computeGeneratingFunction(NumericalComplex z, Bool logScale) (computeGeneratingFunction/computeLogGeneratingFunction) * Deprecated Distribution::computeCDF(x, Bool tail) (computeCDF/computeComplementaryCDF) * Removed SVMKernel, SVMRegression classes * Added samples accessors to MetaModelAlgorithm. * Added AggregatedNumericalMathEvaluationImplementation::operator()(NumericalSample) * Deprecated PlatformInfo::GetId. * Added a draw() method to the NumericalMathFunction class. * Changed the return type of the build() method for all the DistributionImplementationFactory related classes. Now, it returns a smart pointer on a DistributionImplementation rather than a C++ pointer. It closes the memory leak mentioned in ticket #545. * Changed the return type of the getMarginal() method of the DistributionImplementation, RandomVectorImplementation and ProcessImplementation related classes. Now, it returns smart pointers instead of C++ pointers to avoid memory leak. === Python module === * DistributedPythonFunction: new python wrapper module, which allows to launch a function to several nodes and cores in parallel * PythonFunction: added simplified constructor for functions * New matplotlib viewer as replacement for rpy2 & qt4 routines * Added PythonRandomVector, PythonDistribution to overload Distribution & RandomVector objects * Added NumericalSample, NumericalPoint, Description, Indice slicing * Added automatic python conversion to BoolCollection * Allowed use of wrapper data enums using their corresponding xml tags === Miscellaneous === * Added NumericalMathFunction::clearCache * CMake: MinGW build support * CMake: completed support for UseOpenTURNS.config * Added quantile function on a user-provided grid. * Added the SetColor() and GetColor() methods to the Log class. * Added row and column extraction to the several matrices. * Added the getInverse() method to the TrendTransform and InverseTrendTransform classes. * Improved the generic implementation of the computeQuantile() method in the CopulaImplementation class. * Improved the labeling of the Kendall plot in the VisualTest class. * Improved the robustness of the BestModelBIC(), BestModelKolmogorov() and BestModelChiSquared() methods in the FittingTest class. * Ship openturns on windows as a regular python module. * R & R.rot as only runtime dependencies. * Improved the pretty-printing of many classes. * Added a constructor based on the Indices class to the Box class. ==== Bug fixes ==== * #403 (do not display the name if object is unamed) * #424 (OT rc1.0 Ipython interactive mode: problem with "ctrl-c") * #429 (OT r1.0 Creation of a NumericalSample with an np.array of dimension 1) * #471 (The key 'BoxCox-RootEpsilon' is missing in the ResourceMap object) * #473 (Bug with generic wrapper) * #479 (Wrong output of getRealization() for the SpectralNormalProcess class when dimension>1) * #480 (Wrong random generator for the NegativeBinomial class) * #482 (Build failure with g++ 4.7) * #487 (Wrong output of getRealization() for the Event class built from a domain and a random vector when dimension>1) * #488 (The getConfidenceLength() method of the SimulationResult class does not take the given level into account) * #495 (g++ 4.7 miscompiles OT) * #496 (Missing name of DistributionFactories) * #497 (Spurious changes introduced in Python docstrings (r1985)) * #504 (Bad size of testResult in HypothesisTest) * #509 (I cannot install OT without admin rights) * #510 (Cast trouble with DistributionCollection) * #518 (DistributionCollection does not check indices) * #537 (Downgrade of numpy version at the installation of openturns) * #538 (Please remove CVS keywords from source files (2nd step)) * #541 (LogUniform, Burr distributions: incorrect std dev) * #542 (Bad default constructor of TruncatedNormal distribution) * #549 (OpenTURNSPythonFunction attributes can be inadvertendly redefined) * #551 (The generic wrapper fails on Windows) * #556 (OpenTURNSPythonFunction definition) * #560 (Missing getWeights method in Mixture class) * #561 (The Windows installer does not configure the env. var. appropriately.) * #562 (wrong value returned in coupling_tools.get_value with specific parameters.) * #572 (Various changes in distribution classes) * #576 (DrawHistogram fails with a constant NumericalSample) * #580 (ExpertMixture marginal problem) * #581 (ExpertMixture Debug Message) * #583 (Missing description when using NumericalMathFunction) * #584 (ComposedDistribution description) * #586 (The Pie graphics could be easily improved.) * #587 (Cannot save a NumericalMathFunction if built from a NumericalMathEvaluationImplementation) * #592 (View and Show) == 1.0 release == #release-1.0 ==== Library ==== Introducing stochastic processes modelling through these classes: * TimeSeries * TimeGrid * ProcessSample * SecondOrderModel * TemporalFunction * SpatialFunction * DynamicalFunction * ARMA * ARMACoefficients * ARMAState * Process * NormalProcess * CompositeProcess * TemporalNormalProcess * SpectralNormalProcess * WhiteNoise * RandomWalk * WhittleFactory * Domain * FilteringWindows * RegularGrid * WelchFactory * WhittleFactory * SpectralModel * ExponentialModel * CauchyModel * UserDefinedSpectralModel * SpectralModel * CovarianceModel * InverseBoxCoxTransform * BoxCoxTransform * BoxCoxFactory * BoxCoxEvaluationImplementation * InverseBoxCoxEvaluationImplementation * ComplexMatrix * TriangularComplexMatrix * HermitianMatrix * FFT * KissFFT * TrendTransform New classes: * Added the NegativeBinomial class. * Added the MeixnerFactory class, in charge of building the orthonormal basis associated to the negative binomial distribution. * Added the HaselgroveSequence class, which implements a new low discrepancy sequence based on irrational translations of the nD canonical torus. * Added the RandomizedLHS, RandomizedQuasiMonteCarlo classes. Enhancements: * Added an history mechanism to all the NumericalMathFunction types. It is deactivated by default, and stores all the input and output values of a function when activated. * Fixed callsNumbers being incorrecly incremented in ComputedNumericalMathEvaluationImplementation. * Added getCacheHits, addCacheContent methods to NumericalMathFunction * Improved the speed and accuracy of moments computation for the ZipfMandelbrot distribution. * Added the getMarginal() methods to the UserDefined class. * Added the MinCopula class. * Improved the buildDefaultLevels() method of the Contour class. Now, the levels are based on quantiles of the value to be sliced. * Improved the drawPDF() and drawCDF() methods of the CopulaImplementation class. * Restored the ability to compute importance factors and mean point in event domain to the SimulationResult class, using the SimulationSensitivityAnalysis class. * Improved the StandardDistributionPolynomialFactory class to take into account the NegativeBinomial special case using Meixner factory. * Added methods to define color using the Hue, Saturation, Value color space to the Drawable class. * Added the isDiagonal() method to the SymmetricMatrix class. * Improved the use of ResourceMap throughout the library. * The input sample of the projection strategy is stored in the physical space in all circumstances. * Parallelized NumericalSample::computeKendallTau() method. * Improved the FunctionalChaosRandomVector: it is now based on the polynomial meta model in the measure space instead of the input distribution based random vector. It provides the same output distribution for much cheaper realizations. * Improved the performance of the RandomMixture class. Now, all the Normal atoms are merged into a unique atom, which greatly improve the performance in case of random mixture of many such atoms. * Fixed bug in NumericalSample::exportToCSV method. ==== API changes ==== * deprecated Interval::isNumericallyInside(const NumericalPoint & point) in favor of numericallyContains(const NumericalPoint & point) * removed deprecated class SobolIndicesResult. * removed deprecated class SobolIndicesParameters. * removed deprecated method CorrelationAnalysis::SobolIndices. * Removed FunctionCache in favor of in/out History. * Added 2 mandatory macros for wrappers: WRAPPER_BEGIN and WRAPPER_END. === Python module === * Added Matrix / Tensor / ComplexMatrix conversion from/to python sequence/list/ndarray * Added typemaps to convert directly Indices and Description object from python sequences * Added operators NumericalPoint::__div__, __rmul__; NumericalSample::operator==; Matrix::__rmul__. * Fixed a memory leak in PythonNumericalMathEvaluationImplementation. === Miscellaneous === * Added patch for OSX build * Updated the MuParser version. OpenTURNS is now based on MuParser version 2.0.0. * Moved the Uncertainty/Algorithm/IsoProbabilisticTransformation folder into Uncertainty/Algorithm/Transformation folder, in order to prepare the development of the process transformations. * Added colorization to make check and make installcheck outputs. * Windows (un)installer can be run in quiet mode (e.g. openturns-setup-1.0.exe /S /D=C:\Program Files\OpenTURNS). * Windows installer can avoid admin check (e.g. openturns-setup-1.0.exe /userlevel=[0|1]). * The windows python example uses NumericalPythonMathFunction and can launch several external application in parallel. ==== Bug fixes ==== * #300 (openturns_preload makes it harder to bypass system libraries) * #365 (LeastSquaresStrategy sample contructor) * #366 (ProjectionStrategy's input sample gets erased) * #369 (ndarray of dimension > 1 casts into NumericalPoint) * #371 (Invalid DistributionImplementation::computeCDF dimension) * #376 (Confidence intervals for LHS and QMC / RQMC implementation) * #377 (Save a study crash after remove object) * #378 (CMake always calls swig even if source files have not changed) * #379 (Computation of the Cholesky factor) * #380 (Ease customizing installation paths with CMake) * #381 (Indices typemap) * #382 (CorrelationMatrix::isPositiveDefinite crashes when matrix empty) * #387 (cmake installs headers twice) * #388 (Broken illegal argument detection in TimeSeries[i,j]) * #389 (Bug in ARMA prediction) * #390 (Reorder tests launched by CMake to mimic Autotools) * #398 (Cannot copy a TimeSeries in TUI) * #399 (Wrong automatic cast of TimeSeries into NumericalSample in TUI) * #400 (segmentation fault with TBB and GCC 4.6) * #405 (missing headers in libopenturns-dev) * #406 (Calcul quantiles empiriques) * #407 (print fails with a gradient) * #410 (Problem with getMarginal on a NumericalMathFunction) * #414 (Fix compiler warnings) * #417 (Minor bug in FFT) * #418 (Problem in SpectralNormalProcess) * #420 (File WrapperCommon_static.h forgotten during the installation (make install) ?) * #421 (Problem when testing the wrapper template wrapper_calling_shell_command) * #423 (OT rc1.0 Bug while creating a NumericalPoint with a numpy array) * #425 (OT r1.0 Bug while creating a Matrix with a numpy matrix) * #432 (TemporalNormalProcess bad dimension) * #434 (Missing copyOnWrite() in TimeSeries.getValueAtIndex()) * #436 (Wrong results when using external code wrapper with openturns not linked to TBB and input provided in the command line) * #445 (slow NumericalSample deepcopy) * #464 (dimension not checked in NumericalSample) * #465 (The ViewImage function makes a cmd.exe console appear (on Windows)) == 0.15 release == #release-0.15 === Library === Sparse polynomial chaos expansion: * LAR algorithm * CorrectedLeaveOneOut cross-validation * KFold cross-validation New distributions: * Burr * InverseNormal New classe: * BlendedStep: proportional finite difference step * DualLinearCombination NumericalMathFunctions classes * CharlierFactory class, which provides orthonormal polynomials for the Poisson distribution. * KrawtchoukFactory class, which provides orthonormal polynomials for the Binomial distribution. Enhancements: * Added the DrawKendallPlot() method to the VisualTest class. * SensitivityAnalysis uses efficient Saltelli's algorith implementation without relying on R-sensitivity ==== Bug fixes ==== * #344 * #322 * #324 * #319 * #307 * #302 * #227 * #337 * #350 * #338 * #308 === Python module === * Numpy arra type conversion * Ability to pickle an OpenTURNSPythonFunction ==== Bug fixes ==== * #343 * #284 * Better handling of python exception in python NumericalMathFunction == 0.14.0 release == #release-0.14.0 {{{ #!html

WARNING: There is a bug regarding the iso-probabilistic transformation
affecting all the algorithms working in the standard space (FORM/SORM, chaos PCE, directional sampling),
as a result the values provided can be biased in certain cases.

}}} === Library === ==== Enhancements ==== New distributions: * Arcsine * ArcsineFactory * Bernoulli * BernoulliFactory * Burr * BurrFactory * Chi * ChiFactory * Dirichlet * DirichletFactory * FisherSnedecor * InverseNormal * InverseNormalFactory * Multinomial * MultinomialFactory * NonCentralChiSquare * Rice * Trapezoidal * TrapezoidalFactory * ZipfMandelBrot New differentation classes: * FiniteDifferenceGradient * FiniteDifferenceHessian * FiniteDifferenceStep * ProportionalStep * ConstantStep New low discrepancy sequences: * InverseHaltonSequence * FaureSequence New classes: * TBB * TTY * HyperbolicAnisotropicEnumerateFunction Enhancement of existing classes: * Wrappers library: * IO performance * Better error handling * Massive parallelization support: tested up to 1k threads and 10e7 points * Generic wrapper (no compilation required anymore) * NumericalSample * Use of TBB library for multithreading * New imlementation allowing storage up to 8Gb * Added clear() method to erase all content * Added merge() method to merge two instances * New accessors * Pretty print for the following classes: * Accessors to a composition of NumericalMathFunctions * Aggregated functions * FunctionalChaosAlgorithm allows for a multivariate model * Automatic differentiation of analytical formulas * Enhancement of distributions: * Enhanced PDF/CDF drawing for discrete distributions * Generic realization implementation for n-d distributions * LogNormalFactory uses maximum likeliHood * NormalCopulaFactory uses Kendall tau * HistogramFactory based on Scott estimator * Implementation of the RosenBlatt transformation * Enhancement of graphs: * Line width setting for StairCase and BarPlot * CobWeb plot * Copula fitting test (Kendall plot) * Cloud from complex numbers Methods: * Added a constructor based on two input/output NumericalSamples to the NumericalMathFunction allowing to use the FunctionalChaos provided a sample. * Added the getProjectionStrategy() method to FunctionalChaosAlgorithm allowing to retrieve the design experiment generated. ==== Miscellaneous ==== General: * Compatibility with r-sensitivity > 1.3.1 * CMake compatibility Moved classes: * LeastSquares, QuadraticLeastSquares, LinearTaylor, QuadraticTaylor got moved to Base/MetaModel ==== Bug fixes ==== Fixes: * Fixed Mixture distribution === Python module === ==== Enhancements ==== * No more upcasting necessary for the following classes: * Distribution * HistoryStrategy ==== Bug fixes ==== * Less RAM required to build openturns thanks to new module dist * Compatibility with swig 2 * Correct install on OSes that use a lib64 dir on x86_64 arch (rpm distros) ==== Miscellaneous ==== * Added some docstring to the main module ---- == 0.13.2 release == #release-0.13.2 === Library === ==== Enhancements ==== New classes: * BootstrapExperiment * ChebychevAlgorithm * ConditionalRandomVector * GaussProductExperiment * GramSchmidtAlgorithm * HaltonSequence * OrthogonalUnivariatePolynomial * OrthonormalizationAlgorithm * Os * StandardDistributionPolynomialFactory Enhancement of existing classes: * Pretty print for the following classes: * NumericalSample * Matrix * UniVariatePolynomial * New generic algorithm for the computeCovariance() and computeShiftedMoment() methods for the continuous distributions. * Improved the CSV parser of the NumericalSample class. It can now cope with the various end of line conventions and any kind of blank characters in lines. * Improved the CSV export by adding the description of the NumericalSample into the resulting file. * The default constructor of a CovarianceMatrix now initializes it to the identity matrix. * It is now possible to compute the tail quantile and tail CDF of any distribution. Methods: * Added the getStandardMoment() method that computes the raw moments of the standard version of the distribution for the following ones: * Beta * ChiSquare * Exponential * Laplace * Logistic * LogNormal * Normal * Rayleigh * Student * Triangular * Uniform * Weibull * setAlphaBeta() method to set simultaneously the two parameters of a Weibull distribution. * setParametersCollection() and getParametersCollection() for the Student distribution. * Added a constructor based on a NumericalSample and the optional corresponding weights to the UserDefined distribution. * Added two new methods for the computation of the bandwidth in the 1D case to the KernelSmoothing class, namely the computePluginBandwidth() and computeMixedBandwidth() methods. * Added the getMoment() and getCenteredMoment() methods to the Distribution class, with a generic implementation. * Added the setDistribution() method to the LHSExperiment class. * Added the getRoots() and getNodesAndWeights() methods to the OrthogonalUniVariatePolynomial and OrthogonalProductPolynomialFactory classes. * Added a constructor from two 1D NumericalSample to the cloud class. * Added the PDF format as export formats to the Graph class. * Added the computeSingularValues() method to the Matrix class. * Added a fill() method to the Indices class, that aloows to fill an Indices object with the terms of an arithmetic progression. * Added a constructor from a collection of String to the Description class. * Added a getNumericalVolume() method to the Interval class. It computes the volume of the interval based on its numerical bounds, which gives a finite number even for infinite intervals. * Added the printToLogDebug(), setWrapperError(), clearWrapperError(), getWrapperError() methods to the WrapperCommonFunctions class. * Added the setError() function to the WrapperCommon class. * Added the GetInstallationDirectory(), GetModuleDirectory(), CreateTemporaryDirectory(), DeleteTemporaryDirectory() methods to the Path class. * Added the getReccurenceCoefficients() method to the OrthogonalUnivariatePolynomialFamily class to give access to the three term reccurence coefficients verified by an orthonormal family of univariate polynomials. * Added a generate() method that also gives access to the weigths of the realizations to all the weighted experiements, namely: * BootstrapExperiment * FixedExperiment * ImportanceSamplingExperiment * LHSExperiment * LowDiscrepancyExperiment * MonteCarloExperiment ==== Miscellaneous ==== General: * Added the ability to set the log severity through the environment variable OPENTURNS_LOG_SEVERITY. * Deactivated the cache by default in the NumericalMathFunction class. * Added a warning about the use of the default implementation of the gradient and hessian in the NumericalMathFunction class. * Removed the exception declarations to all the methods. Moved classes: * LeastSquaresAlgorithm became PenalizedLeastSquaresAlgorithm, which allows to specify a general definite positive L2 penalization term to the least squares optimization problem. * Removed the classes related to the inverse marginal transformation: they have been merged with the corresponding marginal transformation classes. * Moved the BoundConstrainedAlgorithmImplementation::Result class into the BoundConstrainedAlgorithmImplementationResult class to ease the maintenance of the TUI. ==== Bug fixes ==== Fixes: * Unregistered Weibull factory. * Very bad performance of wrappers on analytical formulas. * The computeCDF() method of the UserDefined distribution invert the meaning of the tail flag. * Compilation options defined by OpenTURNS have errors. * And many more little bugs or missing sanity tests that have been added along the lines... === Python module === ==== Enhancements ==== * Any collection of objects can now be built from a sequence of such objects. * Improved the compatibility between the OpenTURNS classes and the Python structures. The following classes can now be built from Python sequences: * ConfidenceInterval * Description * Graph * Histogram * HistogramPair * Indices * Interval * NumericalPoint * NumericalPointWithDescription * TestResult * UniVariatePolynomial * UserDefinedPair * Improved the use of interface classes in place of implementation classes: it removes the need to explicitely cast an implementation class into an interface class. * Split the module into 16 sub-modules, to allow for a fine grain loading of OpenTURNS. ==== Bug fixes ==== * 1Gb of RAM required to build openturns ==== Miscellaneous ==== * The ViewImage facility is now based on Qt4. * The Show facility is now based on rpy2, with an improved stability. === Documentation === see [wiki:NewFeaturesDoc#January2010 here] ---- == 0.13.1 release == #release-0.13.1 === Library === ==== Enhancements ==== New classes: * Added the LowDiscrepancyExperiment class to allow for the generation of a sample from any distribution with independent copula using low discrepancy sequences. * Added pretty printing to C++ library. * Added the ImportanceSamplingExperiment class, that allows to generate a sample according to a distribution and weights such that the weighted sample is representative of another distribution. Enhancement of existing classes: * TruncatedDistribution. * Changed the constructor of the FunctionalChaosResult class in order to store the orthogonal basis instead of just the measure defining the dot product. * QuasiMonteCarlo now uses sample generation. * More accurate range computation in Gamma class. * NumericalMathEvaluationImplementation * Added a default description to the ProductPolynomialEvaluationImplementation class. * Added debug logs to the DistributionImplementation class. * Made minor enhancements to the RandomMixture class. * Improvement of poutre.cxx in order to support multithreading. * Added a switching strategy to the RandomMixture class for bandwidth selection. * Improved the computeScalarQuantile() method of the DistributionImplementation class. * Improved the project() and computeProbability() methods of the RandomMixture class. * Adopted a more conventionnal representation of the class that will change the results when using non-centered kernels compared to the previous implementation for the KernelMixture class. * Improved const correctness of the MatrixImplementation class. * Improved const correctness of the SquareMatrix class. * Improved const correctness of the SymmetricMatrix class. * Improved the numerical stability of the computePDF() method for the Gamma class. It avoids NaNs for Gamma distributions with large k parameter. * Improved the RandomMixture class performance and robustness. * DistributionImplementation. * Added the specification of input and output dimensions for the MethodBoundNumericalMathEvaluationImplementation class. * Improved const usage in the NumericalSampleImplementation class. * Added ResourceMap cast methods to integral and base types. * Added streaming to WrapperFile class * Add optional framework tag to XML DTD (for use with Salome). * Started implementation of output filtering for libxml2. * Changed some debug messages. * Minor enhancement of the ComposedNumericalMathFunction class to improve the save/load mechanism. * Enhanced the Curve class to allow the drawing of 1D sample or the drawing of a pair of 1D samples. * Changed the default precision for the PDF and CDF computations in the RandomMixture class. * Enhanced the Indices class: is is now persistent. * Enhanced the WeightedExperiment class in order to add a non-uniform scalar weight to each realization of the generated sample. * Enhanced the LeastSquaresStrategy class to use the non-uniformly weighted experiments. * Enhanced the ProjectionStrategy class to prepare the development of the IntegrationStrategy class. * Enhanced the ProjectionStrategyImplementation class to prepare the development of the IntegrationStrategy class. * Enhanced the AdaptiveStrategy class to prepare the development of the IntegrationStrategy class. * Enhanced the CleaningStrategy class to take into account the changes in the AdaptiveStrategy class. * Enhanced the SequentialStrategy class to take into account the changes in the AdaptiveStrategy class. * Enhanced the FixedStrategy class to take into account the changes in the AdaptiveStrategy class. * Enhanced the FunctionalChaosAlgorithm class to take into account the changes in the AdaptiveStrategy class. Methods: * Added the computeRange() method to the NonCentralStudent class. * Added an accessor to the enumerate function in the OrthogonalBasis, OrthogonalFunctionFactory and OrthogonalProductPolynomialFactory classes. * Added the computeCharacteristicFunction() method to the Gumbel class. * Added the computeCharacteristicFunction() method to the LogNormal class. * Added the computePDF(), computeCDF(), computeQuantile() methods based on a regular grid for the 1D case of the DistributionImplementation class. * Added a setParametersCollection() method to the DistributionImplementation class. * Added the computePDF(), computeCDF() and computeQuantile() methods based on a regular grid to the RandomMixture class. * Added accessors to the reference bandwidth to the RandomMixture class. * Added the getStandardDeviation(), getSkewness() and getKurtosis() methods to the KernelMixture class * Added a flag to the computeCharacteristicFunction() method to perform the computation on a logarithmic scale to the ChiSquare, Exponential, Gamma, Geometric, KernelMixture, Laplace, Logistic, LogNormal, Mixture, Normal, RandomMixture, Rayleigh, Triangular, TruncatedNormal and Uniform classes. * Changed the quantile computation of the Beta, ChiSquare, Epanechnikov, Exponential, Gamma, Geometric, Gumbel, Histogram, Laplace, Logistic, LogNormal, Poisson, RandomMixture, Rayleigh, Triangular, TruncatedDistribution, TruncatedNormal, Uniform and Weibull classes. * Added a setParametersCollection method to the Beta, ChiSquare, ClaytonCopula, Exponential, FrankCopula, Gamma, Geometric, GumbelCopula, Gumbel, Laplace, Logistic, LogNormal, NonCentralStudent, Poisson, Rayleigh, Triangular, TruncatedNormal, Uniform and Weibull classes. * Added a buildImplementation() method based on parameters to the BetaFactory, ChiSquareFactory, ClaytonCopulaFactory, ExponentialFactory, FrankCopulaFactory, GammaFactory, GeometricFactory, GumbelCopulaFactory, GumbelFactory, LaplaceFactory, LogisticFactory, LogNormalFactory, PoissonFactory, RayleighFactory, TriangularFactory, TruncatedNormalFactory, UniformFactory and WeibullFactory classes. * Added a new buildImplementation() to the DistributionFactory and DistributionImplementationFactory classes. It allows to build the default representative instance of any distribution. All the distribution factories have been updated. * Added a default constructor to the MultiNomial and Histogram classes. * Added a setParametersCollection() method to the EllipticalDistribution class. * Added a method to compute centered moments of any order on a component basis in the NumericalSample and NumericalSampleImplementation classes. * Added the computation of arbitrary Sobol indices and total indices in the FunctionalChaosRandomVector class. ==== Miscellaneous ==== General: * Added patch in order to support MS Windows platform (mingw). * Defined the name of OpenTURNS home environment variable in OTconfig.h. * Changed messages printed to log in wrapper substitution functions. * Added an include file to allow the compilation of the Log class for windows. * Cleaned TODO file. * Checked multi-repos behavior. * Checked repository is working * Started refactoring of header files. * Prepared the loading of const data from a configuration file. * Removed the initialization during declaration of all the static const attributes. * Started implementation of output filtering for libxml2. * Changed some debug messages. Moved classes: * Removed SVMRegression from lib and python. Removed tests files too. Renamed methods: * Renamed the generateSample() method of the LowDiscrepancySequence, LowDiscrepancySequenceImplementation and SobolSequence classes in order to be more coherent with the RandomGenerator class. * Fixed a typo in the name of the sorting method of the NumericalSample class: sortAccordingAComponent() became sortAccordingToAComponent(). ==== Bug fixes ==== Fixes: * Fixed a bug in the computeRange() method of several distributions. * Fixed a bug in the SequentialStrategy, it was not storing the index of the first vector. * Fixed a bug in the PythonNumericalMathEvaluationImplementation class. This closes ticket #204. * Fixed a bug in the ComputedNumericalMathEvaluationImplementation class. This closes ticket #205. * Fixed bug #505650 from Debian. * Fixed an overflow bug in the computeRange() method of the ChiSquared and Gamma distributions. * Fixed a bug in the computeCharacteristicFunction() method of the KernelMixture class. * Fixed an aliasing issue for bounded distributions in the the RandomMixture class. * Fixed bug in t_Cache_std.cxx : double definition for TEMPLATE_CLASSNAMEINIT. * Fixed bug in openturns_preload.c: look for the library libOT.so.0 in the standard paths, ${OPENTURNS_HOME}/lib/openturns and install path. Closes #211. * Fixed bug in Path.cxx: Use env var OPENTURNS_HOME to find OpenTURNS standard paths. Closes #212. * Correct compilation error that are not detected by linux distcheck. * Fixed bug in ot_check_openturns.m4 macro. Closes #207. * Fixed bug in WrapperMacros.h file. Closes #209. * Fixed bug in wrapper substitution function when a regexp matched two similar lines in file. Closes #199. * Fixed a bug in the drawPDF() method of the Distribution class, due to a change in the Box class. It closed ticket #208. * Fixed a typo in the LogNormal class. * Fixed a bug in the computeCovariance() method of the KernelMixture class. * Fixed a typo in WrapperFile class. * Fixed a bug in the computeCharacteristicFunction() method of the Gamma class. * Fixed a bug in the computeSkewness() and computeKurtosis() methods of the KernelMixture class. * Fixed a bug in the computeRange() method of the Laplace class. * Fixed bug concerning DTD validation for wrapper description files. * Fixed bug concerning wrapper templates that didn't link to OpenTURNS correclty. * Fixed bug on wrapper description structure. * Fixed minor cast warnings. === Python module === ==== Enhancements ==== * Welcome message is now printed to stderr. * Added new python modules common and wrapper (from base). ==== Bug fixes ==== * Fixed bug concerning openturns_viewer module, now called as openturns.viewer. * Fixed bug in base_all.i interface file. * Added the missing SWIG files in base.i and uncertainty.i that prevented the FunctionalChaosAlgorithm and SVMRegression classes to be useable from the TUI. ==== Miscellaneous ==== === External Modules === ==== Enhancements ==== * Added curl support for URLs. ==== Bug fixes ==== * Fixed many bugs preventing from using the library and the python module from an external component. === Documentation === ==== UseCase Guide ==== * Added a description on how to manage the welcome message of the TUI in the UseCase guide. * Updated the UseCaseGuide in order to reflect the new functionalities. ==== Constribution Guide ==== * How to use version control system * How to develop an external module * Typos fixed ==== User Manual ==== * Updated the UserManual in order to reflect the new functionalities. * Fixed various typos. ==== Examples Guide ==== * Updated the ExamplesGuide in order to reflect the new functionalities. ==== Bug fixes ==== * Fixed bug concerning doc directory (autotools crashed). ---- == 0.13.0 release == #release-0.13.0 === Library === ==== Enhancements ==== * Generic wrapper (compatible with Salome). * Wrapper designer guide. * Polynomial Chaos Expansion. WARNING! Due to a mistake, this feature is only available in the C++ library and not the TUI. * Support Vector Regression. WARNING! Due to a mistake, this feature is only available in the C++ library and not the TUI. * Sensitivity Analysis (Sobol indices). === GUI === The gui module is definitely removed. A new (and simplier) GUI will be proposed later. ---- == 0.12.3 release == #release-0.12.3 === Library === ==== Enhancements ==== New classes: * LeastSquareAlgorithm * StratifiedExperiment * WeightedExperiment * MonteCarloExperiment * IndicatorNumericalMathEvaluationImplementation * ProductNumericalMathEvaluationImplementation * ProductNumericalMathFunction * ProductNumericalMathGradientImplementation * ProductNumericalMathHessianImplementation * Generalized Laguerre orthonormal factory * Orthonormal Jacobi factory * LHSExperiment * CleaningStrategy * FixedExperiment: allow to reuse an existing sample into a factory of NumericalSample. Enhancement of existing classes: * WrapperFile * WrapperData * Distribution * NumericalMathFunction * NumericalMathFunctionImplementation * HermiteFactory and LegendreFactory: from Orthogonal Polynomials to Orthonormal Polynomials & Product Polynomial Evaluation * ProductPolynomialEvaluationImplementation * UniVariatePolynomial * HermiteFactory * LaguerreFactory * LegendreFactory * JacobiFactory * MonteCarloExperiment * WeightedExperiment * FunctionalChaosAlgorithm * FunctionalChaosResult * ProjectionStrategy * ProjectionStrategyImplementation * RegressionStrategy * HermiteFactory * JacobiFactory * LaguerreFactory * LegendreFactory * OrthogonalFunctionFactory * OrthogonalProductPolynomialFactory * OrthogonalUniVariatePolynomialFactory * UserDefined * FunctionalChaosAlgorithm: now can handle any input distribution. * performance of the LinearLeastSquares and QuadraticLeastSquares classes for the case of multidimensional output dimension. * VisualTest * EnumerateFunction Methods: * Add write method and validation to WrapperFile class. * Add MethodBoundNumericalMathEvaluationImplementation class test. * Missing method in OrthogonalFunctionFactory class. * Add a constructor for linear combinations in NumericalMathFunction class. * Add drawing capabilities to the UniVariatePolynomial class. * Add a compaction mechanism for leading zeros in UniVariatePolynomial class. * AdaptiveStrategy: accessor to the partial basis. * Add missing getInputNumericalPointDimension() and getOutputNumericalPointDimension() methods in LinearCombinationGradientImplementation and LinearCombinationHessianImplementation classes. ==== Miscellaneous ==== Add skeletons for the very first classes of chaos expansion : * UniVariatePolynomial * ProductPolynomialEvaluationImplementation * OrthogonalUniVariatePolynomialFactory * Hermite * Legendre * EnumerateFunction * OrthogonalProductPolynomialFactory * OrthogonalFunctionFactory * OrthogonalUniVariatePolynomialFamily * OrthogonalBasis * AdaptiveStrategyImplementation * AdaptiveStrategy * FixedStrategy * SequentialStrategy * ProjectionStrategyImplementation * ProjectionStrategy * RegressionStrategy * FunctionalChaos * FunctionalChaosResult * LeastSquareAlgorithm * LinearCombinationEvaluationImplementation * LinearCombinationGradientImplementation * LinearCombinationHessianImplementation Reworked the Experiment class hierarchy. Moved classes: * Legendre to LegendreFactory * Hermite to HermiteFactory * LeastSquareAlgorithm to LeastSquaresAlgorithm Removed unimplemented AggregatedNumericalMathFunction class. Implementation: * EnumerateFunction * Hermite * OrthogonalUniVariatePolynomialFactory * UniVariatePolynomial * Distribution in Orthogonal Univariate Polynomial Factory * AdaptiveStrategy * AdaptiveStrategyImplementation * FixedStrategy * FunctionalChaosAlgorithm * FunctionalChaosResult * ProjectionStrategy * ProjectionStrategyImplementation * RegressionStrategy * SequentialStrategy * SequentialStrategy * OrthogonalUniVariatePolynomialFamily * LinearCombinationEvaluationImplementation * LinearCombinationGradientImplementation * OrthogonalProductPolynomialFactory Normalized the residual in LeastSquaresAlgorithm class. Added const correctness in SymmetricTensor, Tensor and TensorImplementation classes. Added verbosity control to the CleaningStrategy class. Changed the computation of the computeKurtosisPerComponent() method of the NumericalSample class in order to be consistent with the getKurtosis() method of the Distribution class. ==== Bug fixes ==== Fixes: * Fix bug in prerequisite detection. * Fix minor bugs to support GCC 4.4 (from Debian Bug!#505650: FTBFS with GCC 4.4: missing #include). * Fix typo in UniVariatePolynomial class. * Fix typo in Hermite class. * Fix typo in Legendre class. * Fix typo in OrthogonalBasis class. * Fix typo in OrthogonalFunctionFactory class. * Fix typo in OrthogonalUniVariatePolynomialFactory class. * Fix minor bug in UniVariatePolynomial class. * Fix bugs in OrthogonalBasis/OrthogonalUniVariatePolynomialFactory class. * Fix bug in LaguerreFactory class. * Fix small bug in SequentialStrategy class. * Fix bug in FunctionalChaosResult.cxx class. * Fix typo in the computeKendallTau() method of the NumericalSample class. This closed ticket #161. * Fix typo in Normal class. This closed ticket #164. Rectified the recurrence in the orthonormal Laguerre Factory === Python module === ==== Enhancements ==== New classes: * all classes related to the FunctionalChaosAlgorithm class ==== Miscellaneous ==== Added the python test for the particular orthonormal polynomial factories === Documentation === ==== Bug fixes ==== Fixes: * Fix typo in the User Manual. This closes ticket #55. === Validation === ==== Miscellaneous ==== Converted Maple binary files into Maple text files into validation directory. ---- == 0.12.2 release == #release-0.12.2 === Library === ==== Enhancements ==== New classes: * SensitivityAnalysis : using R sensitivity package for Sobol indices computation. Might strongly evolve soon * SklarCopula : allows to extract the copula of any multidimensional distribution * StandardSpaceSimulation * StandardSpaceImportanceSampling * ClaytonCopulaFactory * FrankCopulaFactory * GumbelCopulaFactory * RosenblattEvaluation * InverseRosenblattTransformation * XMLToolbox Enhancement of existing classes: * IndependentCopula * QuadraticNumericalMathEvaluationImplementation * StandardSpaceControlledImportanceSampling * TruncatedNormal * Classes related to matrices for constness consistency * ContinuousDistribution * Interval: added basic arithmetic and set union. Dependencies: * Removed dependency to rotRPackage for the Kolmogorov() method of the FittingTest class. It greatly improves both the performance and the generality of this method. * Removed BOOST dependency. * Removed Xerces-C XML dependency. * Added libxml2 dependency. Wrappers: * Wrapper load time and NumericalMathFunction creation are now separated. A NumericalMathFunction can be created from a WrapperFile object. * Add customize script to help writing new wrappers. * Simplified wrapper writing through the usage of macros. * Renewed wrapper templates. * Multithreaded wrappers. The number of CPUs is computed at startup. Methods: * Add method adapter to NumericalMathFunction : one can use any object's method as a execute part of a NumericalMathFunction. * Started to implement complementary CDF for all the distributions. It will allow to greatly improve the accuracy of the isoprobabilistic transformations. * Added tail CDF computation for most of the distributions (ongoing work). * Added Debye function to SpecFunc class. * Added a method to solve linear systems with several right-hand sides to all the matrices classes. * Added a simplified interface to build scalar functions in NumericalMathFunction class. * Added methods related to the archimedean generator to the ClaytonCopula class. * Enhanced LambertW evaluation in SpecFunc class. * Added constructor based on Distribution and Interval to the TruncatedDistribution class. * Enhanced DrawQQplot and DrawHenryLine methods in VisualTest class. * Added methods for the computation of conditional pdf, conditional cdf and conditional quantile to the following classes: * ClaytonCopula * ComposedCopula * ComposedDistribution * FrankCopula * GumbelCopula * IndependentCopula * NormalCopula * Normal * ArchimedeanCopula * ContinuousDistribution * Distribution * DistributionImplementation * Added verbosity control to the classes AbdoRackwitz, BoundConstrainedAlgorithm, BoundConstrainedAlgorithmImplementation, Cobyla, NearestPointAlgorithm, NearestPointAlgorithmImplementation, SQP, TNC. * Added constructor based on String to the Description class. * Added range computation and more consistent quantile coputation to the classes Beta, ComposedDistribution, Epanechnikov, Exponential, Gamma, Geometric, Gumbel, Histogram, KernelMixture, Logistic, LogNormal, Mixture, Normal, RandomMixture, Triangular, TruncatedDistribution, TruncatedNormal, Uniform, Weibull, CopulaImplementation, Distribution, DistributionImplementation, EllipticalDistribution. * Enhanced quantile computation for the classes NormalCopula, Student, FrankCopula, ComposedDistribution, Gumbel, ComposedCopula, GumbelCopula, Normal, IndependentCopula and EllipticalDistribution. ==== Miscellaneous ==== Better logging facility. Various improvements: * Improved recompilation process. * Improved the const correctness of many classes. * Improved performance of LinearNumericalMathEvaluationImplementation, QuandraticNumericalMathEvaluationImplementation, SymmetricMatrix, StorageManager, XMLStorageManager, WrapperData and some utility classes Build process: * General cleaning in Uncertainty/Distribution (ongoing work). * Removed useless files. * Allow final user to compile the installed tests in a private directory. * Reorganized the MetaModel directory: Taylor approximations and LeastSquares approximation have a separate folder. * Renamed XXXFunction classes into XXXEvaluation classes in IsoProbabilisticTransformation hierarchy. * Modified WrapperCommon class to suppress compiler warnings. * Minor enhancement of WrapperObject class to suppress compiler warnings. Wrappers: * Add trace to optional functions in wrapper. * Add tag to XML description files. Other: * Removed Kronecker product implementation as it is never used and should have been implemented another way. * Removed the use of OT::DefaultName as an explicit default value for the name of all classes in Base and a significant part of Uncertainty. Ongoing work. * Minor enhancement of DistFunc class. * Reduced dependence to dcdflib library. * Replaced Analytical::Result, FORM::Result and SORM::Result classes by AnalyticalResult, FORMResult and SORMResult classes. ==== Bug fixes ==== Fixes: * Fixed a minor bug in KernelMixture class. * Fixed a minor bug in Contour class. * Fixed a minor bug in Mixture class. * Fixed a bug in SQP class. This fix ticket #146, see trac for details. * Fixed a bug in QuadraticLeastSquares class. * Fixed a bug in LinearLeastSquares class. * Fixed bugs in computeConditionalQuantile() and computeCinditionalCDF() methods of ComposedCopula class. * Fixed a minor bug in the computeProbability() method of the ComposedCopula and the ComposedDistribution classes. * Fixed a typo in the ComposedDistribution class. * Fixed a bug in StandardSpaceImportanceSampling class. * Fixed a bug in the LambertW method of SpecFunc class. * Fixed bugs in solveLinearSystemRect() method of MatrixImplementation class. * Applied patch from support-0.12 to fix ticket #132 and #133. * Fixed bug in Path class. * Added a missing method into the IndependentCopula class. This closes the ticket #149. * Improved PythonNumericalMathFunctionImplementation class. Now supports sequence objects as input. NumericalSample.ImportFromCSVFile now warns when file is missing. Closes #144. * Promoted some NumericalPoint into NumericalPointWithDescription that were missed during the separation between NumericalPoint and Description into the getParameters() method of several distributions. This solves tickets #155. * Changed the return type of the getImportanceFactors() method of the QuadraticCumul class. This solves ticket #156. * Added a simplified constructor from a String to the class Description. It closes ticket #108. * Fixed a bug in the calling sequence of LAPACK into MatrixImplementation class. * Changed utils/Makefile.am in order to have rotRPackage_1.4.3.tar.gz in distribution. Closes #143. * Fix bug in WrapperObjet.cxx. * Fix typo in wrapper.c examples. * Fix memory leak in WrapperCommon library. * Fix minor bug in WrapperTemplates. * Better cache behavior in ComputedNumericalMathEvaluationImplementation: avoid useless computations. Closes #137. * Fixed a typo in the description of AbdoRackwitzSpecificParameter class in the User Manual. This closes ticket #110. * Fix lintian warning. === Python module === ==== Enhancements ==== Added the FrankCopulaFactory class to the TUI. NumericalPoint can now be created from sequence objects (list, tuple) in Python. ==== Bug fixes ==== Solve some obscure and annoying Python bug concerning dynamic library loading. === Documentation === ==== Enhancements ==== New guides: * Added a new guide that provides full-length studies, the Examples guide. Enhancements of existing guides: * Updated the ReferenceGuide figures. * Added the description of the computeProbability() method into the User Manual and the Use Cases guide. * Added the description of the Interval class to the User Manual. * Added a new documentation: the Example guide, which presents full length studies examples. * Updated the Use Cases guide with the description of the new wrapper loading mechanism, the better Python integration, the ability to define a NumericalMathFunction based on a Python function, a new use-case showing how to compute moments from a sample of the output variable. ==== Miscellaneous ==== Updated the User Manual: * Enhanced description of the Distribution class. * Enhanced description of the Copula class. * Enhanced description of the NumericalSample class. * Enhanced description of the Graph class. * Enhanced description of the Simulation algorithm classes. * Enhanced description of the KernelSmmothing class. * Enhanced description of the Experiment classes. Updated the Use Case Guide: * Reworked the use-cases of the experiments planes. * Created a use-case on copula modelling. * Created a use-case on distribution manipulation. * Modified the use-cases related to the usual distributions. * Modified the use-cases related to the NumericalSample. * Modified the use-cases related to the KernelSmoothing. * Modified the use-cases related to the Simulation algorithm classes. * Added illustrations for each use-cases. * Completely reworked the index. * Changed the description of the SpecificParameter class usage in the UseCase guide. Build process: * Moved ExampleGuide to ExamplesGuide. * Moved ExampleGuide.tex to ExamplesGuide.tex. * Added automatic inclusion of the Python script and its result into the Examples Guide. Wrapper Design Guide: * Adapt wrapper examples to Wrapper design guide text (ongoing work). * Minor changes to match wrapper's guide text. ==== Bug fixes ==== Fixes: * Fixed minor bugs in doc build process. * Fixed a typo in the User Manual. It closed ticket #151. * Changed the description of the NonCentralStudent distribution in the UseCases guide and the UserManual. This fixed the ticket #152. * Fixed a typo in the UseCases guide and the UserManual concerning the static methods of the NormalCopula class. This fix ticket #145. * Fixed a bug in the Makefile.am that prevented the UseCaseGuide from being compiled. * Fixed typo in UseCaseGuide and UserManual. Closes #145. * Enhanced the documentation (Reference guide and UseCase guide). This closes ticket #147. openturns-1.9/README.rst000066400000000000000000000042271307543307100151170ustar00rootroot00000000000000.. image:: https://circleci.com/gh/openturns/openturns.svg?style=shield :target: https://circleci.com/gh/openturns/openturns .. image:: https://travis-ci.org/openturns/openturns.svg?branch=master :target: https://travis-ci.org/openturns/openturns .. image:: https://ci.appveyor.com/api/projects/status/eclivj94bqwhh1mq/branch/master?svg=true :target: https://ci.appveyor.com/project/openturns/openturns ============================================================================= OpenTURNS (Open source initiative to Treat Uncertainties, Risks'N Statistics) ============================================================================= OpenTURNS is a scientific C++ and Python library including an internal data model and algorithms dedicated to the treatment of uncertainties. The main goal of this library is giving to specific applications all the functionalities needed to treat uncertainties in studies. Targeted users are all engineers who want to introduce the probabilistic dimension in their so far deterministic studies. Up-to-date information can be found at http://www.openturns.org License ======= OpenTURNS is distributed under the Lesser General Public License. Please see the COPYING* files for details of the license of each components. Release Notes ============= Please see the ChangeLog file for a summary of bug fixes and new features for the current release. Backwards Compatibility ======================= The developers strive their best to preserve backwards compatibility between releases, but this is not always possible. Where backwards compatibility is known to be broken, it is clearly marked as an incompatibility in the ChangeLog file. Installation ============ Please see the http://openturns.github.io/openturns/latest/install.html for instructions on installing OpenTURNS on various platforms from binaries or sources. Documentation ============= The http://openturns.github.io/openturns/latest/contents.html page contains the most recent set of updated documentation for this release. Contributing ============ See http://openturns.github.io/openturns/latest/developer_guide/developer_guide.html for instructions. -- The OpenTURNS team openturns-1.9/TODO000066400000000000000000000022521307543307100141140ustar00rootroot00000000000000Remove deprecated LAR class in 1.10 version Remove deprecated LinearNumericalMathFunction in 1.10 version Remove deprecated QuadraticNumericalMathFunction in 1.10 version Remove deprecated NumericalMathFunction::GetValidConstants|GetValidFunctions|GetValidOperators in 1.10 version Remove TemporalNormalProcess alias Remove SpectralNormalProcess alias Remove GeneralizedLinearModelAlgorithm alias Remove GeneralizedLinearModelResult alias Remove DynamicalFunction aliases Remove SpatialFunction alias Remove TemporalFuncion alias Remove [gs]etOptimizationSolver methods Rename AnalyticalNumericalMath*Implementation to SymbolicEvaluation|Gradient|Hessian Remove deprecated KarhunenLoeveP1Factory, KarhunenLoeveQuadratureFactory Remove deprecated GramSchmidtAlgorithm, ChebychevAlgorithm Render DistributionImplementation::getGaussNodesAndWeights private Remove deprecated NumericalMathFunction in 1.11 Remove deprecated NumericalSample in 1.11 Remove deprecated NumericalPoint[WithDescription] in 1.11 Remove deprecated ResourceMap::[SG]AsNumericalScalar Remove deprecated SpecFunc::*NumericalScalar* Remove deprecated NumericalScalar[Collection] Remove deprecated NumericalComplex[Collection] openturns-1.9/VERSION000066400000000000000000000000041307543307100144650ustar00rootroot000000000000001.9 openturns-1.9/appveyor.yml000066400000000000000000000032151307543307100160140ustar00rootroot00000000000000environment: matrix: - VS_GEN: Visual Studio 10 2010 - VS_GEN: Visual Studio 14 2015 install: - appveyor-retry appveyor DownloadFile https://downloads.sourceforge.net/openblas/v0.2.15/OpenBLAS-v0.2.15-Win32.zip - 7z x OpenBLAS-v0.2.15-Win32.zip -oC:\Libraries > nil - appveyor-retry appveyor DownloadFile http://sourceforge.net/projects/openblas/files/v0.2.15/mingw32_dll.zip - 7z x mingw32_dll.zip -oC:\Libraries > nil - appveyor-retry appveyor DownloadFile https://sourceforge.net/projects/swig/files/swigwin/swigwin-3.0.11/swigwin-3.0.11.zip - 7z x swigwin-3.0.11.zip -oC:\Libraries > nul build_script: - mkdir build && cd build - cmake -G"%VS_GEN%" \ -DCMAKE_INSTALL_PREFIX=%cd%\install \ -DBOOST_ROOT="C:\Libraries\boost_1_62_0" \ -DLAPACKE_FOUND=ON \ -DOPENTURNS_LIBRARIES="C:\Libraries\OpenBLAS-v0.2.15-Win32\lib\libopenblas.dll.a" \ -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/OPT:NOREF /INCREMENTAL:NO" \ -DUSE_HMAT=OFF \ -DSWIG_EXECUTABLE="C:\Libraries\swigwin-3.0.11\swig.exe" \ .. - cmake --build . --config Release --target install - set PYTHONPATH=%cd%\install\Lib\site-packages - copy %cd%\install\bin\OT.dll %cd%\install\Lib\site-packages\openturns - copy C:\Libraries\OpenBLAS-v0.2.15-Win32\bin\libopenblas.dll %cd%\install\Lib\site-packages\openturns - copy C:\Libraries\mingw32_dll\libgcc_s_sjlj-1.dll %cd%\install\Lib\site-packages\openturns - copy C:\Libraries\mingw32_dll\libgfortran-3.dll %cd%\install\Lib\site-packages\openturns - copy C:\Libraries\mingw32_dll\libquadmath-0.dll %cd%\install\Lib\site-packages\openturns - python ..\python\test\t_Description_std.py openturns-1.9/ci_support/000077500000000000000000000000001307543307100156125ustar00rootroot00000000000000openturns-1.9/ci_support/build.sh000077500000000000000000000005751307543307100172570ustar00rootroot00000000000000#!/bin/sh # build & test set -e R CMD INSTALL --library=$PWD utils/rot_1.4.6.tar.gz export R_LIBS=$PWD cmake -DCMAKE_INSTALL_PREFIX=~/.local \ -DSPHINX_EXECUTABLE=~/.local/bin/sphinx-build \ -DSWIG_EXECUTABLE=~/.local/bin/swig \ -DHMAT_DIR=~/.local/lib/cmake/hmat . make install -j2 #make tests -j2 ctest -R pyinstallcheck --output-on-failure --timeout 100 -j2 openturns-1.9/ci_support/upload_github_io.sh000077500000000000000000000012641307543307100214710ustar00rootroot00000000000000#!/bin/sh # upload doc to openturns.github.io set -e test -z "${CI_PULL_REQUEST}" || exit 0 git clone https://${GH_TOKEN}@github.com/openturns/openturns.github.io.git if test -n "${CIRCLE_TAG}" then CIRCLE_BRANCH="${CIRCLE_TAG:1}" fi mkdir -p openturns.github.io/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BRANCH} cp -r ~/.local/share/${CIRCLE_PROJECT_REPONAME}/doc/html/* openturns.github.io/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BRANCH} cd openturns.github.io touch .nojekyll git config user.email "sayhi@circleci.com" git config user.name "CircleCI" git add -A . git commit -a -m "CircleCI build ${CIRCLE_PROJECT_REPONAME} ${CIRCLE_BUILD_NUM}" git push --quiet origin master > /dev/null 2>&1 openturns-1.9/circle.yml000066400000000000000000000021551307543307100154120ustar00rootroot00000000000000dependencies: override: - sudo apt-get update - sudo apt-get install -y cmake gfortran bison flex libmuparser-dev liblapack-dev libxml2-dev libboost-math-dev libtbb-dev libnlopt-dev r-base-core - sudo apt-get install -y python-dev python-scipy python-matplotlib texlive-latex-recommended texlive-fonts-recommended texlive-latex-extra pandoc - pip install matplotlib numpydoc git+https://github.com/sphinx-doc/sphinx.git nbsphinx jupyter_client ipython --user - sudo rm -r /opt/circleci/.pyenv # keep an eye on swig - git clone https://github.com/swig/swig.git - cd swig && ./autogen.sh && ./configure --prefix=$HOME/.local --without-alllang && make -j2 && make install # use latest hmat-oss - git clone https://github.com/jeromerobert/hmat-oss.git - cd hmat-oss && cmake -DCMAKE_INSTALL_PREFIX=~/.local . && make install -j2 test: override: - ./ci_support/build.sh deployment: staging: branch: /.*/ commands: - export GH_TOKEN && ./ci_support/upload_github_io.sh release: tag: /v.*/ commands: - export GH_TOKEN && ./ci_support/upload_github_io.sh openturns-1.9/cmake/000077500000000000000000000000001307543307100145035ustar00rootroot00000000000000openturns-1.9/cmake/FindNLopt.cmake000066400000000000000000000025721307543307100173500ustar00rootroot00000000000000# - Find Nlopt # library for nonlinear optimization # http://ab-initio.mit.edu/nlopt # # The module defines the following variables: # NLOPT_FOUND - the system has nlopt # NLOPT_INCLUDE_DIR - where to find nlopt.h # NLOPT_INCLUDE_DIRS - nlopt includes # NLOPT_LIBRARY - where to find the nlopt library # NLOPT_LIBRARIES - aditional libraries # NLOPT_ROOT_DIR - root dir (ex. /usr/local) # set NLOPT_INCLUDE_DIR find_path (NLOPT_INCLUDE_DIR NAMES nlopt.h DOC "Nlopt include directory" ) # set NLOPT_INCLUDE_DIRS set (NLOPT_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR}) # set NLOPT_LIBRARY find_library (NLOPT_LIBRARY NAMES nlopt nlopt_cxx DOC "Nlopt library location" ) # set NLOPT_LIBRARIES set (NLOPT_LIBRARIES ${NLOPT_LIBRARY}) # root dir # try to guess root dir from include dir if (NLOPT_INCLUDE_DIR) string (REGEX REPLACE "(.*)/include.*" "\\1" NLOPT_ROOT_DIR ${NLOPT_INCLUDE_DIR}) # try to guess root dir from library dir elseif (NLOPT_LIBRARY) string (REGEX REPLACE "(.*)/lib[/|32|64].*" "\\1" NLOPT_ROOT_DIR ${NLOPT_LIBRARY}) endif () # handle REQUIRED and QUIET options include (FindPackageHandleStandardArgs) find_package_handle_standard_args (NLopt DEFAULT_MSG NLOPT_LIBRARY NLOPT_INCLUDE_DIR NLOPT_INCLUDE_DIRS NLOPT_LIBRARIES NLOPT_ROOT_DIR ) mark_as_advanced ( NLOPT_LIBRARY NLOPT_LIBRARIES NLOPT_INCLUDE_DIR NLOPT_INCLUDE_DIRS NLOPT_ROOT_DIR ) openturns-1.9/cmake/FindPythonModule.cmake000066400000000000000000000071451307543307100207440ustar00rootroot00000000000000# - Macro to find a python module # # Usage: # include (FindPythonModule) # find_python_module (module [VERSION] [REQUIRED]) # # The following variables are defined: # MODULE_FOUND - true if found # MODULE_LOCATION - directory of the module, or it's library file if binary module # MODULE_VERSION_STRING - module version, if available through __version__ # #============================================================================= # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) macro (find_python_module module) string (TOUPPER ${module} module_upper) if (NOT ${module_upper}_FOUND) # parse arguments set (${module}_FIND_OPTIONAL TRUE) if (${ARGC} EQUAL 2) if (${ARGV1} MATCHES REQUIRED) set (${module}_FIND_OPTIONAL FALSE) else () set (${module}_FIND_VERSION ${ARGV1}) endif () elseif (${ARGC} EQUAL 3) if (${ARGV2} MATCHES REQUIRED) set (${module}_FIND_OPTIONAL FALSE) endif () set (${module}_FIND_VERSION ${ARGV1}) endif () # A module's location is usually a directory, but for binary modules it's a .so file. execute_process (COMMAND "${PYTHON_EXECUTABLE}" "-c" "import re, ${module}; print(re.compile('/__init__.py.*').sub('',${module}.__file__))" RESULT_VARIABLE _${module}_status OUTPUT_VARIABLE _${module}_location ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if (NOT _${module}_status) set (${module_upper}_LOCATION ${_${module}_location} CACHE STRING "Location of Python module ${module}") # retrieve version execute_process (COMMAND "${PYTHON_EXECUTABLE}" "-c" "import ${module}; print(${module}.__version__)" RESULT_VARIABLE _${module}_status OUTPUT_VARIABLE _${module}_version ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) set (_${module_upper}_VERSION_MATCH TRUE) if (NOT _${module}_status) set (${module_upper}_VERSION_STRING ${_${module}_version}) if (${module}_FIND_VERSION) if (${module}_FIND_VERSION VERSION_GREATER ${module_upper}_VERSION_STRING) set (_${module_upper}_VERSION_MATCH FALSE) endif () endif () mark_as_advanced (${module_upper}_VERSION_STRING) endif () endif () if (CMAKE_VERSION VERSION_LESS 2.8.3) find_package_handle_standard_args (${module} DEFAULT_MSG ${module_upper}_LOCATION ${module}_FIND_OPTIONAL _${module_upper}_VERSION_MATCH ) else () find_package_handle_standard_args (${module} REQUIRED_VARS ${module_upper}_LOCATION ${module}_FIND_OPTIONAL _${module_upper}_VERSION_MATCH VERSION_VAR ${module_upper}_VERSION_STRING ) endif () mark_as_advanced (${module_upper}_LOCATION) endif (NOT ${module_upper}_FOUND) endmacro (find_python_module) openturns-1.9/cmake/FindR.cmake000066400000000000000000000071561307543307100165200ustar00rootroot00000000000000# - Find R # R is a free software environment for statistical computing and graphics # http://www.r-project.org/ # # The module defines the following variables: # R_FOUND - System has R # R_EXECUTABLE - The R interpreter # R_INCLUDE_DIR - the R include directory # R_LIBRARIES - The libraries needed to use R # R_VERSION_STRING - R version # #============================================================================= # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) if (R_EXECUTABLE) # in cache already set(R_FIND_QUIETLY TRUE) endif () find_program (R_EXECUTABLE NAMES R R.exe DOC "Path to the R command interpreter" ) if (R_EXECUTABLE) execute_process (COMMAND ${R_EXECUTABLE} --slave --no-save -e "cat(R.home('home'))" OUTPUT_VARIABLE _R_HOME OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process (COMMAND ${R_EXECUTABLE} --slave --no-save -e "cat(R.home('include'))" OUTPUT_VARIABLE _R_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process (COMMAND ${R_EXECUTABLE} --slave --no-save -e "cat(R.version.string)" OUTPUT_VARIABLE R_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE ) if (R_VERSION_STRING) string (REGEX REPLACE ".*version (.*) .*" "\\1" R_VERSION_STRING ${R_VERSION_STRING}) endif () endif () find_path (R_INCLUDE_DIR NAMES R.h HINTS ${_R_INCLUDE} ) find_library (R_LIBRARIES NAMES R HINTS ${PC_R_LIBDIR} ${PC_R_LIBRARY_DIRS} ${_R_HOME}/lib ${_R_HOME}/lib/x86_64 ) set (R_PACKAGES) if (R_EXECUTABLE) foreach (_component ${R_FIND_COMPONENTS}) if (NOT R_${_component}_FOUND) execute_process (COMMAND echo "library(${_component})" COMMAND ${R_EXECUTABLE} --no-save --silent --no-readline --slave RESULT_VARIABLE _res OUTPUT_VARIABLE _trashout ERROR_VARIABLE _trasherr ) if (NOT _res) message (STATUS "Looking for R package ${_component} - found") set (R_${_component}_FOUND 1 CACHE INTERNAL "True if R package ${_component} is here") else () message (STATUS "Looking for R package ${_component} - not found") set (R_${_component}_FOUND 0 CACHE INTERNAL "True if R package ${_component} is here") endif () # find_package's OPTIONAL_COMPONENTS is only available as of cmake 2.8.8 # if (R_FIND_REQUIRED_${_component}) # list (APPEND R_PACKAGES R_${_component}_FOUND) # endif () endif () endforeach () endif () include (FindPackageHandleStandardArgs) if (CMAKE_VERSION VERSION_LESS 2.8.3) find_package_handle_standard_args (R DEFAULT_MSG R_EXECUTABLE R_VERSION_STRING ${R_PACKAGES}) else () find_package_handle_standard_args (R REQUIRED_VARS R_EXECUTABLE ${R_PACKAGES} VERSION_VAR R_VERSION_STRING ) endif () mark_as_advanced (R_EXECUTABLE R_INCLUDE_DIR R_LIBRARIES R_VERSION_STRING ${R_PACKAGES}) openturns-1.9/cmake/FindTBB.cmake000066400000000000000000000074601307543307100167240ustar00rootroot00000000000000# - Find TBB # Intel Threading Building Blocks offers a rich and complete approach to expressing parallelism in a C++ program # www.threadingbuildingblocks.org # # The module defines the following variables: # TBB_FOUND - the system has TBB # TBB_INCLUDE_DIR - where to find tbb/tbb.h # TBB_INCLUDE_DIRS - tbb includes # TBB_LIBRARY - where to find the TBB library # TBB_LIBRARIES - aditional libraries # TBB_VERSION_STRING - version (ex. 2.2) # TBB_MAJOR_VERSION - major version # TBB_MINOR_VERSION - minor version # TBB_INTERFACE_VERSION - interface version # TBB_ROOT_DIR - root dir (ex. /usr/local) #============================================================================= # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) # set TBB_INCLUDE_DIR find_path (TBB_INCLUDE_DIR NAMES tbb/tbb.h DOC "TBB include directory" ) # set TBB_INCLUDE_DIRS set (TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) # version set (_VERSION_FILE ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h) if (EXISTS ${_VERSION_FILE}) file (STRINGS ${_VERSION_FILE} _VERSION_MAJOR_STRING REGEX ".*define[ ]+TBB_VERSION_MAJOR[ ]+[0-9]+.*") file (STRINGS ${_VERSION_FILE} _VERSION_MINOR_STRING REGEX ".*define[ ]+TBB_VERSION_MINOR[ ]+[0-9]+.*") if (_VERSION_MAJOR_STRING AND _VERSION_MINOR_STRING) string (REGEX REPLACE ".*TBB_VERSION_MAJOR[ ]+([0-9]+)" "\\1" TBB_MAJOR_VERSION ${_VERSION_MAJOR_STRING}) string (REGEX REPLACE ".*TBB_VERSION_MINOR[ ]+([0-9]+)" "\\1" TBB_MINOR_VERSION ${_VERSION_MINOR_STRING}) set (TBB_VERSION_STRING "${TBB_MAJOR_VERSION}.${TBB_MINOR_VERSION}") endif () file (STRINGS ${_VERSION_FILE} _VERSION_INTERFACE_STRING REGEX ".*define[ ]+TBB_INTERFACE_VERSION[ ]+[0-9]+.*") if (_VERSION_INTERFACE_STRING) string (REGEX REPLACE ".*TBB_INTERFACE_VERSION[ ]+([0-9]+)" "\\1" TBB_INTERFACE_VERSION ${_VERSION_INTERFACE_STRING}) endif () endif () # check version set (_TBB_VERSION_MATCH TRUE) if (TBB_FIND_VERSION AND TBB_VERSION_STRING) if (TBB_FIND_VERSION_EXACT) if (${TBB_FIND_VERSION} VERSION_EQUAL ${TBB_VERSION_STRING}) else() set (_TBB_VERSION_MATCH FALSE) endif () else () if (${TBB_FIND_VERSION} VERSION_GREATER ${TBB_VERSION_STRING}) set (_TBB_VERSION_MATCH FALSE) endif () endif () endif () # set TBB_LIBRARY find_library (TBB_LIBRARY NAMES tbb DOC "TBB library location" ) # set TBB_LIBRARIES set (TBB_LIBRARIES ${TBB_LIBRARY}) # root dir # try to guess root dir from include dir if (TBB_INCLUDE_DIR) string (REGEX REPLACE "(.*)/include.*" "\\1" TBB_ROOT_DIR ${TBB_INCLUDE_DIR}) # try to guess root dir from library dir elseif (TBB_LIBRARY) string (REGEX REPLACE "(.*)/lib[/|32|64].*" "\\1" TBB_ROOT_DIR ${TBB_LIBRARY}) endif () # handle REQUIRED and QUIET options include (FindPackageHandleStandardArgs) if (CMAKE_VERSION VERSION_LESS 2.8.3) find_package_handle_standard_args (TBB DEFAULT_MSG TBB_LIBRARY _TBB_VERSION_MATCH TBB_INCLUDE_DIR TBB_INCLUDE_DIRS TBB_LIBRARIES TBB_VERSION_STRING ) else () find_package_handle_standard_args (TBB REQUIRED_VARS TBB_LIBRARY _TBB_VERSION_MATCH TBB_INCLUDE_DIR TBB_INCLUDE_DIRS TBB_LIBRARIES VERSION_VAR TBB_VERSION_STRING ) endif () mark_as_advanced ( TBB_LIBRARY TBB_LIBRARIES TBB_INCLUDE_DIR TBB_INCLUDE_DIRS TBB_ROOT_DIR TBB_VERSION_STRING TBB_MAJOR_VERSION TBB_MINOR_VERSION TBB_INTERFACE_VERSION ) openturns-1.9/cmake/FindmuParser.cmake000066400000000000000000000073701307543307100201130ustar00rootroot00000000000000# - Find muParser # muParser is an extensible high performance math expression parser library written in C++ # http://muparser.sourceforge.net # # The module defines the following variables: # MUPARSER_FOUND - True if muParser found. # MUPARSER_INCLUDE_DIRS - where to find muParser.h, etc. # MUPARSER_LIBRARIES - List of libraries when using muParser. # #============================================================================= # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) if (MUPARSER_INCLUDE_DIR AND MUPARSER_LIBRARIES) # Already in cache, be silent set (muParser_FIND_QUIETLY TRUE) endif () find_path (MUPARSER_INCLUDE_DIR muParser.h PATHS C:/muparser/include PATH_SUFFIXES muParser) set (MUPARSER_INCLUDE_DIRS ${MUPARSER_INCLUDE_DIR}) # version set (_VERSION_FILE ${MUPARSER_INCLUDE_DIR}/muParserDef.h) if (EXISTS ${_VERSION_FILE}) file (STRINGS ${_VERSION_FILE} _MUPARSER_VERSION_LINE REGEX "#define[ ]+MUP_VERSION[ ]+_T\\(\".*\"\\)") if (_MUPARSER_VERSION_LINE) string (REGEX REPLACE ".*_T\\(\"(.*)\"\\)" "\\1" MUPARSER_VERSION_STRING ${_MUPARSER_VERSION_LINE}) if (MUPARSER_VERSION_STRING) string (REGEX REPLACE "([0-9]+)\\..*" "\\1" MUPARSER_MAJOR_VERSION ${MUPARSER_VERSION_STRING}) string (REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" MUPARSER_MINOR_VERSION ${MUPARSER_VERSION_STRING}) string (REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" MUPARSER_PATCH_VERSION ${MUPARSER_VERSION_STRING}) if (MUPARSER_PATCH_VERSION STREQUAL MUPARSER_VERSION_STRING) set (MUPARSER_PATCH_VERSION) endif () endif () endif () endif () # check version set (_MUPARSER_VERSION_MATCH TRUE) if (muParser_FIND_VERSION AND MUPARSER_VERSION_STRING) if (muParser_FIND_VERSION_EXACT) if (${muParser_FIND_VERSION} VERSION_EQUAL ${MUPARSER_VERSION_STRING}) else() set (_MUPARSER_VERSION_MATCH FALSE) endif () else () if (${muParser_FIND_VERSION} VERSION_GREATER ${MUPARSER_VERSION_STRING}) set (_MUPARSER_VERSION_MATCH FALSE) endif () endif () endif () find_library (MUPARSER_LIBRARY NAMES muparser PATH_SUFFIXES muparser) # set MUPARSER_LIBRARIES set (MUPARSER_LIBRARIES ${MUPARSER_LIBRARY}) # root dir # try to guess root dir from include dir if (MUPARSER_INCLUDE_DIR) string (REGEX REPLACE "(.*)/include.*" "\\1" MUPARSER_ROOT_DIR ${MUPARSER_INCLUDE_DIR}) # try to guess root dir from library dir elseif (MUPARSER_LIBRARY) string (REGEX REPLACE "(.*)/lib[/|32|64].*" "\\1" MUPARSER_ROOT_DIR ${MUPARSER_LIBRARY}) endif () # handle REQUIRED and QUIET options include (FindPackageHandleStandardArgs) if (CMAKE_VERSION VERSION_LESS 2.8.3) find_package_handle_standard_args (muParser DEFAULT_MSG MUPARSER_LIBRARY _MUPARSER_VERSION_MATCH MUPARSER_LIBRARIES MUPARSER_INCLUDE_DIR MUPARSER_VERSION_STRING ) else () find_package_handle_standard_args (muParser REQUIRED_VARS MUPARSER_LIBRARY _MUPARSER_VERSION_MATCH MUPARSER_LIBRARIES MUPARSER_INCLUDE_DIR VERSION_VAR MUPARSER_VERSION_STRING ) endif () mark_as_advanced ( MUPARSER_LIBRARY MUPARSER_LIBRARIES MUPARSER_INCLUDE_DIR MUPARSER_INCLUDE_DIRS MUPARSER_ROOT_DIR MUPARSER_VERSION_STRING MUPARSER_MAJOR_VERSION MUPARSER_MINOR_VERSION MUPARSER_PATCH_VERSION ) openturns-1.9/cmake/cmake_uninstall.cmake.in000066400000000000000000000020451307543307100212640ustar00rootroot00000000000000if(POLICY CMP0007) cmake_policy(SET CMP0007 OLD) endif() if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") list(REVERSE files) foreach (file ${files}) message(STATUS "Uninstalling: $ENV{DESTDIR}${file}") if (EXISTS "$ENV{DESTDIR}${file}") execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT ${rm_retval} EQUAL 0) message(FATAL_ERROR "Problem when removing: $ENV{DESTDIR}${file}") endif (NOT ${rm_retval} EQUAL 0) else (EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File $ENV{DESTDIR}${file} does not exist.") endif (EXISTS "$ENV{DESTDIR}${file}") endforeach(file) openturns-1.9/cmake/cotire.cmake000066400000000000000000004774441307543307100170160ustar00rootroot00000000000000# - cotire (compile time reducer) # # See the cotire manual for usage hints. # #============================================================================= # Copyright 2012-2016 Sascha Kratky # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. #============================================================================= if(__COTIRE_INCLUDED) return() endif() set(__COTIRE_INCLUDED TRUE) # call cmake_minimum_required, but prevent modification of the CMake policy stack in include mode # cmake_minimum_required also sets the policy version as a side effect, which we have to avoid if (NOT CMAKE_SCRIPT_MODE_FILE) cmake_policy(PUSH) endif() cmake_minimum_required(VERSION 2.8.12) if (NOT CMAKE_SCRIPT_MODE_FILE) cmake_policy(POP) endif() set (COTIRE_CMAKE_MODULE_FILE "${CMAKE_CURRENT_LIST_FILE}") set (COTIRE_CMAKE_MODULE_VERSION "1.7.8") # activate select policies if (POLICY CMP0025) # Compiler id for Apple Clang is now AppleClang cmake_policy(SET CMP0025 NEW) endif() if (POLICY CMP0026) # disallow use of the LOCATION target property cmake_policy(SET CMP0026 NEW) endif() if (POLICY CMP0038) # targets may not link directly to themselves cmake_policy(SET CMP0038 NEW) endif() if (POLICY CMP0039) # utility targets may not have link dependencies cmake_policy(SET CMP0039 NEW) endif() if (POLICY CMP0040) # target in the TARGET signature of add_custom_command() must exist cmake_policy(SET CMP0040 NEW) endif() if (POLICY CMP0045) # error on non-existent target in get_target_property cmake_policy(SET CMP0045 NEW) endif() if (POLICY CMP0046) # error on non-existent dependency in add_dependencies cmake_policy(SET CMP0046 NEW) endif() if (POLICY CMP0049) # do not expand variables in target source entries cmake_policy(SET CMP0049 NEW) endif() if (POLICY CMP0050) # disallow add_custom_command SOURCE signatures cmake_policy(SET CMP0050 NEW) endif() if (POLICY CMP0051) # include TARGET_OBJECTS expressions in a target's SOURCES property cmake_policy(SET CMP0051 NEW) endif() if (POLICY CMP0053) # simplify variable reference and escape sequence evaluation cmake_policy(SET CMP0053 NEW) endif() if (POLICY CMP0054) # only interpret if() arguments as variables or keywords when unquoted cmake_policy(SET CMP0054 NEW) endif() include(CMakeParseArguments) include(ProcessorCount) function (cotire_get_configuration_types _configsVar) set (_configs "") if (CMAKE_CONFIGURATION_TYPES) list (APPEND _configs ${CMAKE_CONFIGURATION_TYPES}) endif() if (CMAKE_BUILD_TYPE) list (APPEND _configs "${CMAKE_BUILD_TYPE}") endif() if (_configs) list (REMOVE_DUPLICATES _configs) set (${_configsVar} ${_configs} PARENT_SCOPE) else() set (${_configsVar} "None" PARENT_SCOPE) endif() endfunction() function (cotire_get_source_file_extension _sourceFile _extVar) # get_filename_component returns extension from first occurrence of . in file name # this function computes the extension from last occurrence of . in file name string (FIND "${_sourceFile}" "." _index REVERSE) if (_index GREATER -1) math (EXPR _index "${_index} + 1") string (SUBSTRING "${_sourceFile}" ${_index} -1 _sourceExt) else() set (_sourceExt "") endif() set (${_extVar} "${_sourceExt}" PARENT_SCOPE) endfunction() macro (cotire_check_is_path_relative_to _path _isRelativeVar) set (${_isRelativeVar} FALSE) if (IS_ABSOLUTE "${_path}") foreach (_dir ${ARGN}) file (RELATIVE_PATH _relPath "${_dir}" "${_path}") if (NOT _relPath OR (NOT IS_ABSOLUTE "${_relPath}" AND NOT "${_relPath}" MATCHES "^\\.\\.")) set (${_isRelativeVar} TRUE) break() endif() endforeach() endif() endmacro() function (cotire_filter_language_source_files _language _target _sourceFilesVar _excludedSourceFilesVar _cotiredSourceFilesVar) if (CMAKE_${_language}_SOURCE_FILE_EXTENSIONS) set (_languageExtensions "${CMAKE_${_language}_SOURCE_FILE_EXTENSIONS}") else() set (_languageExtensions "") endif() if (CMAKE_${_language}_IGNORE_EXTENSIONS) set (_ignoreExtensions "${CMAKE_${_language}_IGNORE_EXTENSIONS}") else() set (_ignoreExtensions "") endif() if (COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS) set (_excludeExtensions "${COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS}") else() set (_excludeExtensions "") endif() if (COTIRE_DEBUG AND _languageExtensions) message (STATUS "${_language} source file extensions: ${_languageExtensions}") endif() if (COTIRE_DEBUG AND _ignoreExtensions) message (STATUS "${_language} ignore extensions: ${_ignoreExtensions}") endif() if (COTIRE_DEBUG AND _excludeExtensions) message (STATUS "${_language} exclude extensions: ${_excludeExtensions}") endif() if (CMAKE_VERSION VERSION_LESS "3.1.0") set (_allSourceFiles ${ARGN}) else() # as of CMake 3.1 target sources may contain generator expressions # since we cannot obtain required property information about source files added # through generator expressions at configure time, we filter them out string (GENEX_STRIP "${ARGN}" _allSourceFiles) endif() set (_filteredSourceFiles "") set (_excludedSourceFiles "") foreach (_sourceFile ${_allSourceFiles}) get_source_file_property(_sourceIsHeaderOnly "${_sourceFile}" HEADER_FILE_ONLY) get_source_file_property(_sourceIsExternal "${_sourceFile}" EXTERNAL_OBJECT) get_source_file_property(_sourceIsSymbolic "${_sourceFile}" SYMBOLIC) if (NOT _sourceIsHeaderOnly AND NOT _sourceIsExternal AND NOT _sourceIsSymbolic) cotire_get_source_file_extension("${_sourceFile}" _sourceExt) if (_sourceExt) list (FIND _ignoreExtensions "${_sourceExt}" _ignoreIndex) if (_ignoreIndex LESS 0) list (FIND _excludeExtensions "${_sourceExt}" _excludeIndex) if (_excludeIndex GREATER -1) list (APPEND _excludedSourceFiles "${_sourceFile}") else() list (FIND _languageExtensions "${_sourceExt}" _sourceIndex) if (_sourceIndex GREATER -1) # consider source file unless it is excluded explicitly get_source_file_property(_sourceIsExcluded "${_sourceFile}" COTIRE_EXCLUDED) if (_sourceIsExcluded) list (APPEND _excludedSourceFiles "${_sourceFile}") else() list (APPEND _filteredSourceFiles "${_sourceFile}") endif() else() get_source_file_property(_sourceLanguage "${_sourceFile}" LANGUAGE) if ("${_sourceLanguage}" STREQUAL "${_language}") # add to excluded sources, if file is not ignored and has correct language without having the correct extension list (APPEND _excludedSourceFiles "${_sourceFile}") endif() endif() endif() endif() endif() endif() endforeach() # separate filtered source files from already cotired ones # the COTIRE_TARGET property of a source file may be set while a target is being processed by cotire set (_sourceFiles "") set (_cotiredSourceFiles "") foreach (_sourceFile ${_filteredSourceFiles}) get_source_file_property(_sourceIsCotired "${_sourceFile}" COTIRE_TARGET) if (_sourceIsCotired) list (APPEND _cotiredSourceFiles "${_sourceFile}") else() get_source_file_property(_sourceCompileFlags "${_sourceFile}" COMPILE_FLAGS) if (_sourceCompileFlags) # add to excluded sources, if file has custom compile flags list (APPEND _excludedSourceFiles "${_sourceFile}") else() list (APPEND _sourceFiles "${_sourceFile}") endif() endif() endforeach() if (COTIRE_DEBUG) if (_sourceFiles) message (STATUS "Filtered ${_target} ${_language} sources: ${_sourceFiles}") endif() if (_excludedSourceFiles) message (STATUS "Excluded ${_target} ${_language} sources: ${_excludedSourceFiles}") endif() if (_cotiredSourceFiles) message (STATUS "Cotired ${_target} ${_language} sources: ${_cotiredSourceFiles}") endif() endif() set (${_sourceFilesVar} ${_sourceFiles} PARENT_SCOPE) set (${_excludedSourceFilesVar} ${_excludedSourceFiles} PARENT_SCOPE) set (${_cotiredSourceFilesVar} ${_cotiredSourceFiles} PARENT_SCOPE) endfunction() function (cotire_get_objects_with_property_on _filteredObjectsVar _property _type) set (_filteredObjects "") foreach (_object ${ARGN}) get_property(_isSet ${_type} "${_object}" PROPERTY ${_property} SET) if (_isSet) get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) if (_propertyValue) list (APPEND _filteredObjects "${_object}") endif() endif() endforeach() set (${_filteredObjectsVar} ${_filteredObjects} PARENT_SCOPE) endfunction() function (cotire_get_objects_with_property_off _filteredObjectsVar _property _type) set (_filteredObjects "") foreach (_object ${ARGN}) get_property(_isSet ${_type} "${_object}" PROPERTY ${_property} SET) if (_isSet) get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) if (NOT _propertyValue) list (APPEND _filteredObjects "${_object}") endif() endif() endforeach() set (${_filteredObjectsVar} ${_filteredObjects} PARENT_SCOPE) endfunction() function (cotire_get_source_file_property_values _valuesVar _property) set (_values "") foreach (_sourceFile ${ARGN}) get_source_file_property(_propertyValue "${_sourceFile}" ${_property}) if (_propertyValue) list (APPEND _values "${_propertyValue}") endif() endforeach() set (${_valuesVar} ${_values} PARENT_SCOPE) endfunction() function (cotire_resolve_config_properites _configurations _propertiesVar) set (_properties "") foreach (_property ${ARGN}) if ("${_property}" MATCHES "") foreach (_config ${_configurations}) string (TOUPPER "${_config}" _upperConfig) string (REPLACE "" "${_upperConfig}" _configProperty "${_property}") list (APPEND _properties ${_configProperty}) endforeach() else() list (APPEND _properties ${_property}) endif() endforeach() set (${_propertiesVar} ${_properties} PARENT_SCOPE) endfunction() function (cotire_copy_set_properites _configurations _type _source _target) cotire_resolve_config_properites("${_configurations}" _properties ${ARGN}) foreach (_property ${_properties}) get_property(_isSet ${_type} ${_source} PROPERTY ${_property} SET) if (_isSet) get_property(_propertyValue ${_type} ${_source} PROPERTY ${_property}) set_property(${_type} ${_target} PROPERTY ${_property} "${_propertyValue}") endif() endforeach() endfunction() function (cotire_get_target_usage_requirements _target _targetRequirementsVar) set (_targetRequirements "") get_target_property(_librariesToProcess ${_target} LINK_LIBRARIES) while (_librariesToProcess) # remove from head list (GET _librariesToProcess 0 _library) list (REMOVE_AT _librariesToProcess 0) if (TARGET ${_library}) list (FIND _targetRequirements ${_library} _index) if (_index LESS 0) list (APPEND _targetRequirements ${_library}) # BFS traversal of transitive libraries get_target_property(_libraries ${_library} INTERFACE_LINK_LIBRARIES) if (_libraries) list (APPEND _librariesToProcess ${_libraries}) list (REMOVE_DUPLICATES _librariesToProcess) endif() endif() endif() endwhile() set (${_targetRequirementsVar} ${_targetRequirements} PARENT_SCOPE) endfunction() function (cotire_filter_compile_flags _language _flagFilter _matchedOptionsVar _unmatchedOptionsVar) if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") set (_flagPrefix "[/-]") else() set (_flagPrefix "--?") endif() set (_optionFlag "") set (_matchedOptions "") set (_unmatchedOptions "") foreach (_compileFlag ${ARGN}) if (_compileFlag) if (_optionFlag AND NOT "${_compileFlag}" MATCHES "^${_flagPrefix}") # option with separate argument list (APPEND _matchedOptions "${_compileFlag}") set (_optionFlag "") elseif ("${_compileFlag}" MATCHES "^(${_flagPrefix})(${_flagFilter})$") # remember option set (_optionFlag "${CMAKE_MATCH_2}") elseif ("${_compileFlag}" MATCHES "^(${_flagPrefix})(${_flagFilter})(.+)$") # option with joined argument list (APPEND _matchedOptions "${CMAKE_MATCH_3}") set (_optionFlag "") else() # flush remembered option if (_optionFlag) list (APPEND _matchedOptions "${_optionFlag}") set (_optionFlag "") endif() # add to unfiltered options list (APPEND _unmatchedOptions "${_compileFlag}") endif() endif() endforeach() if (_optionFlag) list (APPEND _matchedOptions "${_optionFlag}") endif() if (COTIRE_DEBUG AND _matchedOptions) message (STATUS "Filter ${_flagFilter} matched: ${_matchedOptions}") endif() if (COTIRE_DEBUG AND _unmatchedOptions) message (STATUS "Filter ${_flagFilter} unmatched: ${_unmatchedOptions}") endif() set (${_matchedOptionsVar} ${_matchedOptions} PARENT_SCOPE) set (${_unmatchedOptionsVar} ${_unmatchedOptions} PARENT_SCOPE) endfunction() function (cotire_is_target_supported _target _isSupportedVar) if (NOT TARGET "${_target}") set (${_isSupportedVar} FALSE PARENT_SCOPE) return() endif() get_target_property(_imported ${_target} IMPORTED) if (_imported) set (${_isSupportedVar} FALSE PARENT_SCOPE) return() endif() get_target_property(_targetType ${_target} TYPE) if (NOT _targetType MATCHES "EXECUTABLE|(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") set (${_isSupportedVar} FALSE PARENT_SCOPE) return() endif() set (${_isSupportedVar} TRUE PARENT_SCOPE) endfunction() function (cotire_get_target_compile_flags _config _language _target _flagsVar) string (TOUPPER "${_config}" _upperConfig) # collect options from CMake language variables set (_compileFlags "") if (CMAKE_${_language}_FLAGS) set (_compileFlags "${_compileFlags} ${CMAKE_${_language}_FLAGS}") endif() if (CMAKE_${_language}_FLAGS_${_upperConfig}) set (_compileFlags "${_compileFlags} ${CMAKE_${_language}_FLAGS_${_upperConfig}}") endif() if (_target) # add target compile flags get_target_property(_targetflags ${_target} COMPILE_FLAGS) if (_targetflags) set (_compileFlags "${_compileFlags} ${_targetflags}") endif() endif() if (UNIX) separate_arguments(_compileFlags UNIX_COMMAND "${_compileFlags}") elseif(WIN32) separate_arguments(_compileFlags WINDOWS_COMMAND "${_compileFlags}") else() separate_arguments(_compileFlags) endif() # target compile options if (_target) get_target_property(_targetOptions ${_target} COMPILE_OPTIONS) if (_targetOptions) list (APPEND _compileFlags ${_targetOptions}) endif() endif() # interface compile options from linked library targets if (_target) set (_linkedTargets "") cotire_get_target_usage_requirements(${_target} _linkedTargets) foreach (_linkedTarget ${_linkedTargets}) get_target_property(_targetOptions ${_linkedTarget} INTERFACE_COMPILE_OPTIONS) if (_targetOptions) list (APPEND _compileFlags ${_targetOptions}) endif() endforeach() endif() # handle language standard properties if (_target) get_target_property(_targetLanguageStandard ${_target} ${_language}_STANDARD) get_target_property(_targetLanguageExtensions ${_target} ${_language}_EXTENSIONS) get_target_property(_targetLanguageStandardRequired ${_target} ${_language}_STANDARD_REQUIRED) if (_targetLanguageExtensions) if (CMAKE_${_language}${_targetLanguageExtensions}_EXTENSION_COMPILE_OPTION) list (APPEND _compileFlags "${CMAKE_${_language}${_targetLanguageExtensions}_EXTENSION_COMPILE_OPTION}") endif() elseif (_targetLanguageStandard) if (_targetLanguageStandardRequired) if (CMAKE_${_language}${_targetLanguageStandard}_STANDARD_COMPILE_OPTION) list (APPEND _compileFlags "${CMAKE_${_language}${_targetLanguageStandard}_STANDARD_COMPILE_OPTION}") endif() else() if (CMAKE_${_language}${_targetLanguageStandard}_EXTENSION_COMPILE_OPTION) list (APPEND _compileFlags "${CMAKE_${_language}${_targetLanguageStandard}_EXTENSION_COMPILE_OPTION}") endif() endif() endif() endif() # handle the POSITION_INDEPENDENT_CODE target property if (_target) get_target_property(_targetPIC ${_target} POSITION_INDEPENDENT_CODE) if (_targetPIC) get_target_property(_targetType ${_target} TYPE) if (_targetType STREQUAL "EXECUTABLE" AND CMAKE_${_language}_COMPILE_OPTIONS_PIE) list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_PIE}") elseif (CMAKE_${_language}_COMPILE_OPTIONS_PIC) list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_PIC}") endif() endif() endif() # handle visibility target properties if (_target) get_target_property(_targetVisibility ${_target} ${_language}_VISIBILITY_PRESET) if (_targetVisibility AND CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY) list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY}${_targetVisibility}") endif() get_target_property(_targetVisibilityInlines ${_target} VISIBILITY_INLINES_HIDDEN) if (_targetVisibilityInlines AND CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN) list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN}") endif() endif() # platform specific flags if (APPLE) get_target_property(_architectures ${_target} OSX_ARCHITECTURES_${_upperConfig}) if (NOT _architectures) get_target_property(_architectures ${_target} OSX_ARCHITECTURES) endif() if (_architectures) foreach (_arch ${_architectures}) list (APPEND _compileFlags "-arch" "${_arch}") endforeach() endif() if (CMAKE_OSX_SYSROOT) if (CMAKE_${_language}_SYSROOT_FLAG) list (APPEND _compileFlags "${CMAKE_${_language}_SYSROOT_FLAG}" "${CMAKE_OSX_SYSROOT}") else() list (APPEND _compileFlags "-isysroot" "${CMAKE_OSX_SYSROOT}") endif() endif() if (CMAKE_OSX_DEPLOYMENT_TARGET) if (CMAKE_${_language}_OSX_DEPLOYMENT_TARGET_FLAG) list (APPEND _compileFlags "${CMAKE_${_language}_OSX_DEPLOYMENT_TARGET_FLAG}${CMAKE_OSX_DEPLOYMENT_TARGET}") else() list (APPEND _compileFlags "-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") endif() endif() endif() if (COTIRE_DEBUG AND _compileFlags) message (STATUS "Target ${_target} compile flags: ${_compileFlags}") endif() set (${_flagsVar} ${_compileFlags} PARENT_SCOPE) endfunction() function (cotire_get_target_include_directories _config _language _target _includeDirsVar _systemIncludeDirsVar) set (_includeDirs "") set (_systemIncludeDirs "") # default include dirs if (CMAKE_INCLUDE_CURRENT_DIR) list (APPEND _includeDirs "${CMAKE_CURRENT_BINARY_DIR}") list (APPEND _includeDirs "${CMAKE_CURRENT_SOURCE_DIR}") endif() set (_targetFlags "") cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) # parse additional include directories from target compile flags if (CMAKE_INCLUDE_FLAG_${_language}) string (STRIP "${CMAKE_INCLUDE_FLAG_${_language}}" _includeFlag) string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") if (_includeFlag) set (_dirs "") cotire_filter_compile_flags("${_language}" "${_includeFlag}" _dirs _ignore ${_targetFlags}) if (_dirs) list (APPEND _includeDirs ${_dirs}) endif() endif() endif() # parse additional system include directories from target compile flags if (CMAKE_INCLUDE_SYSTEM_FLAG_${_language}) string (STRIP "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" _includeFlag) string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") if (_includeFlag) set (_dirs "") cotire_filter_compile_flags("${_language}" "${_includeFlag}" _dirs _ignore ${_targetFlags}) if (_dirs) list (APPEND _systemIncludeDirs ${_dirs}) endif() endif() endif() # target include directories get_directory_property(_dirs DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" INCLUDE_DIRECTORIES) if (_target) get_target_property(_targetDirs ${_target} INCLUDE_DIRECTORIES) if (_targetDirs) list (APPEND _dirs ${_targetDirs}) endif() get_target_property(_targetDirs ${_target} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) if (_targetDirs) list (APPEND _systemIncludeDirs ${_targetDirs}) endif() endif() # interface include directories from linked library targets if (_target) set (_linkedTargets "") cotire_get_target_usage_requirements(${_target} _linkedTargets) foreach (_linkedTarget ${_linkedTargets}) get_target_property(_linkedTargetType ${_linkedTarget} TYPE) if (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE AND NOT CMAKE_VERSION VERSION_LESS "3.4.0" AND _linkedTargetType MATCHES "(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") # CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE refers to CMAKE_CURRENT_BINARY_DIR and CMAKE_CURRENT_SOURCE_DIR # at the time, when the target was created. These correspond to the target properties BINARY_DIR and SOURCE_DIR # which are only available with CMake 3.4 or later. get_target_property(_targetDirs ${_linkedTarget} BINARY_DIR) if (_targetDirs) list (APPEND _dirs ${_targetDirs}) endif() get_target_property(_targetDirs ${_linkedTarget} SOURCE_DIR) if (_targetDirs) list (APPEND _dirs ${_targetDirs}) endif() endif() get_target_property(_targetDirs ${_linkedTarget} INTERFACE_INCLUDE_DIRECTORIES) if (_targetDirs) list (APPEND _dirs ${_targetDirs}) endif() get_target_property(_targetDirs ${_linkedTarget} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) if (_targetDirs) list (APPEND _systemIncludeDirs ${_targetDirs}) endif() endforeach() endif() if (dirs) list (REMOVE_DUPLICATES _dirs) endif() list (LENGTH _includeDirs _projectInsertIndex) foreach (_dir ${_dirs}) if (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE) cotire_check_is_path_relative_to("${_dir}" _isRelative "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}") if (_isRelative) list (LENGTH _includeDirs _len) if (_len EQUAL _projectInsertIndex) list (APPEND _includeDirs "${_dir}") else() list (INSERT _includeDirs _projectInsertIndex "${_dir}") endif() math (EXPR _projectInsertIndex "${_projectInsertIndex} + 1") else() list (APPEND _includeDirs "${_dir}") endif() else() list (APPEND _includeDirs "${_dir}") endif() endforeach() list (REMOVE_DUPLICATES _includeDirs) list (REMOVE_DUPLICATES _systemIncludeDirs) if (CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES) list (REMOVE_ITEM _includeDirs ${CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES}) endif() if (COTIRE_DEBUG AND _includeDirs) message (STATUS "Target ${_target} include dirs: ${_includeDirs}") endif() set (${_includeDirsVar} ${_includeDirs} PARENT_SCOPE) if (COTIRE_DEBUG AND _systemIncludeDirs) message (STATUS "Target ${_target} system include dirs: ${_systemIncludeDirs}") endif() set (${_systemIncludeDirsVar} ${_systemIncludeDirs} PARENT_SCOPE) endfunction() function (cotire_get_target_export_symbol _target _exportSymbolVar) set (_exportSymbol "") get_target_property(_targetType ${_target} TYPE) get_target_property(_enableExports ${_target} ENABLE_EXPORTS) if (_targetType MATCHES "(SHARED|MODULE)_LIBRARY" OR (_targetType STREQUAL "EXECUTABLE" AND _enableExports)) get_target_property(_exportSymbol ${_target} DEFINE_SYMBOL) if (NOT _exportSymbol) set (_exportSymbol "${_target}_EXPORTS") endif() string (MAKE_C_IDENTIFIER "${_exportSymbol}" _exportSymbol) endif() set (${_exportSymbolVar} ${_exportSymbol} PARENT_SCOPE) endfunction() function (cotire_get_target_compile_definitions _config _language _target _definitionsVar) string (TOUPPER "${_config}" _upperConfig) set (_configDefinitions "") # CMAKE_INTDIR for multi-configuration build systems if (NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") list (APPEND _configDefinitions "CMAKE_INTDIR=\"${_config}\"") endif() # target export define symbol cotire_get_target_export_symbol("${_target}" _defineSymbol) if (_defineSymbol) list (APPEND _configDefinitions "${_defineSymbol}") endif() # directory compile definitions get_directory_property(_definitions DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMPILE_DEFINITIONS) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() get_directory_property(_definitions DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMPILE_DEFINITIONS_${_upperConfig}) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() # target compile definitions get_target_property(_definitions ${_target} COMPILE_DEFINITIONS) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() get_target_property(_definitions ${_target} COMPILE_DEFINITIONS_${_upperConfig}) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() # interface compile definitions from linked library targets set (_linkedTargets "") cotire_get_target_usage_requirements(${_target} _linkedTargets) foreach (_linkedTarget ${_linkedTargets}) get_target_property(_definitions ${_linkedTarget} INTERFACE_COMPILE_DEFINITIONS) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() endforeach() # parse additional compile definitions from target compile flags # and don't look at directory compile definitions, which we already handled set (_targetFlags "") cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) cotire_filter_compile_flags("${_language}" "D" _definitions _ignore ${_targetFlags}) if (_definitions) list (APPEND _configDefinitions ${_definitions}) endif() list (REMOVE_DUPLICATES _configDefinitions) if (COTIRE_DEBUG AND _configDefinitions) message (STATUS "Target ${_target} compile definitions: ${_configDefinitions}") endif() set (${_definitionsVar} ${_configDefinitions} PARENT_SCOPE) endfunction() function (cotire_get_target_compiler_flags _config _language _target _compilerFlagsVar) # parse target compile flags omitting compile definitions and include directives set (_targetFlags "") cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) set (_flagFilter "D") if (CMAKE_INCLUDE_FLAG_${_language}) string (STRIP "${CMAKE_INCLUDE_FLAG_${_language}}" _includeFlag) string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") if (_includeFlag) set (_flagFilter "${_flagFilter}|${_includeFlag}") endif() endif() if (CMAKE_INCLUDE_SYSTEM_FLAG_${_language}) string (STRIP "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" _includeFlag) string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") if (_includeFlag) set (_flagFilter "${_flagFilter}|${_includeFlag}") endif() endif() set (_compilerFlags "") cotire_filter_compile_flags("${_language}" "${_flagFilter}" _ignore _compilerFlags ${_targetFlags}) if (COTIRE_DEBUG AND _compilerFlags) message (STATUS "Target ${_target} compiler flags: ${_compilerFlags}") endif() set (${_compilerFlagsVar} ${_compilerFlags} PARENT_SCOPE) endfunction() function (cotire_add_sys_root_paths _pathsVar) if (APPLE) if (CMAKE_OSX_SYSROOT AND CMAKE_${_language}_HAS_ISYSROOT) foreach (_path IN LISTS ${_pathsVar}) if (IS_ABSOLUTE "${_path}") get_filename_component(_path "${CMAKE_OSX_SYSROOT}/${_path}" ABSOLUTE) if (EXISTS "${_path}") list (APPEND ${_pathsVar} "${_path}") endif() endif() endforeach() endif() endif() set (${_pathsVar} ${${_pathsVar}} PARENT_SCOPE) endfunction() function (cotire_get_source_extra_properties _sourceFile _pattern _resultVar) set (_extraProperties ${ARGN}) set (_result "") if (_extraProperties) list (FIND _extraProperties "${_sourceFile}" _index) if (_index GREATER -1) math (EXPR _index "${_index} + 1") list (LENGTH _extraProperties _len) math (EXPR _len "${_len} - 1") foreach (_index RANGE ${_index} ${_len}) list (GET _extraProperties ${_index} _value) if (_value MATCHES "${_pattern}") list (APPEND _result "${_value}") else() break() endif() endforeach() endif() endif() set (${_resultVar} ${_result} PARENT_SCOPE) endfunction() function (cotire_get_source_compile_definitions _config _language _sourceFile _definitionsVar) set (_compileDefinitions "") if (NOT CMAKE_SCRIPT_MODE_FILE) string (TOUPPER "${_config}" _upperConfig) get_source_file_property(_definitions "${_sourceFile}" COMPILE_DEFINITIONS) if (_definitions) list (APPEND _compileDefinitions ${_definitions}) endif() get_source_file_property(_definitions "${_sourceFile}" COMPILE_DEFINITIONS_${_upperConfig}) if (_definitions) list (APPEND _compileDefinitions ${_definitions}) endif() endif() cotire_get_source_extra_properties("${_sourceFile}" "^[a-zA-Z0-9_]+(=.*)?$" _definitions ${ARGN}) if (_definitions) list (APPEND _compileDefinitions ${_definitions}) endif() if (COTIRE_DEBUG AND _compileDefinitions) message (STATUS "Source ${_sourceFile} compile definitions: ${_compileDefinitions}") endif() set (${_definitionsVar} ${_compileDefinitions} PARENT_SCOPE) endfunction() function (cotire_get_source_files_compile_definitions _config _language _definitionsVar) set (_configDefinitions "") foreach (_sourceFile ${ARGN}) cotire_get_source_compile_definitions("${_config}" "${_language}" "${_sourceFile}" _sourceDefinitions) if (_sourceDefinitions) list (APPEND _configDefinitions "${_sourceFile}" ${_sourceDefinitions} "-") endif() endforeach() set (${_definitionsVar} ${_configDefinitions} PARENT_SCOPE) endfunction() function (cotire_get_source_undefs _sourceFile _property _sourceUndefsVar) set (_sourceUndefs "") if (NOT CMAKE_SCRIPT_MODE_FILE) get_source_file_property(_undefs "${_sourceFile}" ${_property}) if (_undefs) list (APPEND _sourceUndefs ${_undefs}) endif() endif() cotire_get_source_extra_properties("${_sourceFile}" "^[a-zA-Z0-9_]+$" _undefs ${ARGN}) if (_undefs) list (APPEND _sourceUndefs ${_undefs}) endif() if (COTIRE_DEBUG AND _sourceUndefs) message (STATUS "Source ${_sourceFile} ${_property} undefs: ${_sourceUndefs}") endif() set (${_sourceUndefsVar} ${_sourceUndefs} PARENT_SCOPE) endfunction() function (cotire_get_source_files_undefs _property _sourceUndefsVar) set (_sourceUndefs "") foreach (_sourceFile ${ARGN}) cotire_get_source_undefs("${_sourceFile}" ${_property} _undefs) if (_undefs) list (APPEND _sourceUndefs "${_sourceFile}" ${_undefs} "-") endif() endforeach() set (${_sourceUndefsVar} ${_sourceUndefs} PARENT_SCOPE) endfunction() macro (cotire_set_cmd_to_prologue _cmdVar) set (${_cmdVar} "${CMAKE_COMMAND}") if (COTIRE_DEBUG) list (APPEND ${_cmdVar} "--warn-uninitialized") endif() list (APPEND ${_cmdVar} "-DCOTIRE_BUILD_TYPE:STRING=$") if (COTIRE_VERBOSE) list (APPEND ${_cmdVar} "-DCOTIRE_VERBOSE:BOOL=ON") elseif("${CMAKE_GENERATOR}" MATCHES "Makefiles") list (APPEND ${_cmdVar} "-DCOTIRE_VERBOSE:BOOL=$(VERBOSE)") endif() endmacro() function (cotire_init_compile_cmd _cmdVar _language _compilerLauncher _compilerExe _compilerArg1) if (NOT _compilerLauncher) set (_compilerLauncher ${CMAKE_${_language}_COMPILER_LAUNCHER}) endif() if (NOT _compilerExe) set (_compilerExe "${CMAKE_${_language}_COMPILER}") endif() if (NOT _compilerArg1) set (_compilerArg1 ${CMAKE_${_language}_COMPILER_ARG1}) endif() string (STRIP "${_compilerArg1}" _compilerArg1) if ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") # compiler launcher is only supported for Makefile and Ninja set (${_cmdVar} ${_compilerLauncher} "${_compilerExe}" ${_compilerArg1} PARENT_SCOPE) else() set (${_cmdVar} "${_compilerExe}" ${_compilerArg1} PARENT_SCOPE) endif() endfunction() macro (cotire_add_definitions_to_cmd _cmdVar _language) foreach (_definition ${ARGN}) if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") list (APPEND ${_cmdVar} "/D${_definition}") else() list (APPEND ${_cmdVar} "-D${_definition}") endif() endforeach() endmacro() function (cotire_add_includes_to_cmd _cmdVar _language _includesVar _systemIncludesVar) set (_includeDirs ${${_includesVar}} ${${_systemIncludesVar}}) if (_includeDirs) list (REMOVE_DUPLICATES _includeDirs) foreach (_include ${_includeDirs}) if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") file (TO_NATIVE_PATH "${_include}" _include) list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_FLAG_${_language}}${CMAKE_INCLUDE_FLAG_${_language}_SEP}${_include}") else() set (_index -1) if ("${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" MATCHES ".+") list (FIND ${_systemIncludesVar} "${_include}" _index) endif() if (_index GREATER -1) list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}${_include}") else() list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_FLAG_${_language}}${CMAKE_INCLUDE_FLAG_${_language}_SEP}${_include}") endif() endif() endforeach() endif() set (${_cmdVar} ${${_cmdVar}} PARENT_SCOPE) endfunction() function (cotire_add_frameworks_to_cmd _cmdVar _language _includesVar _systemIncludesVar) if (APPLE) set (_frameworkDirs "") foreach (_include ${${_includesVar}}) if (IS_ABSOLUTE "${_include}" AND _include MATCHES "\\.framework$") get_filename_component(_frameworkDir "${_include}" DIRECTORY) list (APPEND _frameworkDirs "${_frameworkDir}") endif() endforeach() set (_systemFrameworkDirs "") foreach (_include ${${_systemIncludesVar}}) if (IS_ABSOLUTE "${_include}" AND _include MATCHES "\\.framework$") get_filename_component(_frameworkDir "${_include}" DIRECTORY) list (APPEND _systemFrameworkDirs "${_frameworkDir}") endif() endforeach() if (_systemFrameworkDirs) list (APPEND _frameworkDirs ${_systemFrameworkDirs}) endif() if (_frameworkDirs) list (REMOVE_DUPLICATES _frameworkDirs) foreach (_frameworkDir ${_frameworkDirs}) set (_index -1) if ("${CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG}" MATCHES ".+") list (FIND _systemFrameworkDirs "${_frameworkDir}" _index) endif() if (_index GREATER -1) list (APPEND ${_cmdVar} "${CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG}${_frameworkDir}") else() list (APPEND ${_cmdVar} "${CMAKE_${_language}_FRAMEWORK_SEARCH_FLAG}${_frameworkDir}") endif() endforeach() endif() endif() set (${_cmdVar} ${${_cmdVar}} PARENT_SCOPE) endfunction() macro (cotire_add_compile_flags_to_cmd _cmdVar) foreach (_flag ${ARGN}) list (APPEND ${_cmdVar} "${_flag}") endforeach() endmacro() function (cotire_check_file_up_to_date _fileIsUpToDateVar _file) if (EXISTS "${_file}") set (_triggerFile "") foreach (_dependencyFile ${ARGN}) if (EXISTS "${_dependencyFile}") # IS_NEWER_THAN returns TRUE if both files have the same timestamp # thus we do the comparison in both directions to exclude ties if ("${_dependencyFile}" IS_NEWER_THAN "${_file}" AND NOT "${_file}" IS_NEWER_THAN "${_dependencyFile}") set (_triggerFile "${_dependencyFile}") break() endif() endif() endforeach() if (_triggerFile) if (COTIRE_VERBOSE) get_filename_component(_fileName "${_file}" NAME) message (STATUS "${_fileName} update triggered by ${_triggerFile} change.") endif() set (${_fileIsUpToDateVar} FALSE PARENT_SCOPE) else() if (COTIRE_VERBOSE) get_filename_component(_fileName "${_file}" NAME) message (STATUS "${_fileName} is up-to-date.") endif() set (${_fileIsUpToDateVar} TRUE PARENT_SCOPE) endif() else() if (COTIRE_VERBOSE) get_filename_component(_fileName "${_file}" NAME) message (STATUS "${_fileName} does not exist yet.") endif() set (${_fileIsUpToDateVar} FALSE PARENT_SCOPE) endif() endfunction() macro (cotire_find_closest_relative_path _headerFile _includeDirs _relPathVar) set (${_relPathVar} "") foreach (_includeDir ${_includeDirs}) if (IS_DIRECTORY "${_includeDir}") file (RELATIVE_PATH _relPath "${_includeDir}" "${_headerFile}") if (NOT IS_ABSOLUTE "${_relPath}" AND NOT "${_relPath}" MATCHES "^\\.\\.") string (LENGTH "${${_relPathVar}}" _closestLen) string (LENGTH "${_relPath}" _relLen) if (_closestLen EQUAL 0 OR _relLen LESS _closestLen) set (${_relPathVar} "${_relPath}") endif() endif() elseif ("${_includeDir}" STREQUAL "${_headerFile}") # if path matches exactly, return short non-empty string set (${_relPathVar} "1") break() endif() endforeach() endmacro() macro (cotire_check_header_file_location _headerFile _insideIncludeDirs _outsideIncludeDirs _headerIsInside) # check header path against ignored and honored include directories cotire_find_closest_relative_path("${_headerFile}" "${_insideIncludeDirs}" _insideRelPath) if (_insideRelPath) # header is inside, but could be become outside if there is a shorter outside match cotire_find_closest_relative_path("${_headerFile}" "${_outsideIncludeDirs}" _outsideRelPath) if (_outsideRelPath) string (LENGTH "${_insideRelPath}" _insideRelPathLen) string (LENGTH "${_outsideRelPath}" _outsideRelPathLen) if (_outsideRelPathLen LESS _insideRelPathLen) set (${_headerIsInside} FALSE) else() set (${_headerIsInside} TRUE) endif() else() set (${_headerIsInside} TRUE) endif() else() # header is outside set (${_headerIsInside} FALSE) endif() endmacro() macro (cotire_check_ignore_header_file_path _headerFile _headerIsIgnoredVar) if (NOT EXISTS "${_headerFile}") set (${_headerIsIgnoredVar} TRUE) elseif (IS_DIRECTORY "${_headerFile}") set (${_headerIsIgnoredVar} TRUE) elseif ("${_headerFile}" MATCHES "\\.\\.|[_-]fixed" AND "${_headerFile}" MATCHES "\\.h$") # heuristic: ignore C headers with embedded parent directory references or "-fixed" or "_fixed" in path # these often stem from using GCC #include_next tricks, which may break the precompiled header compilation # with the error message "error: no include path in which to search for header.h" set (${_headerIsIgnoredVar} TRUE) else() set (${_headerIsIgnoredVar} FALSE) endif() endmacro() macro (cotire_check_ignore_header_file_ext _headerFile _ignoreExtensionsVar _headerIsIgnoredVar) # check header file extension cotire_get_source_file_extension("${_headerFile}" _headerFileExt) set (${_headerIsIgnoredVar} FALSE) if (_headerFileExt) list (FIND ${_ignoreExtensionsVar} "${_headerFileExt}" _index) if (_index GREATER -1) set (${_headerIsIgnoredVar} TRUE) endif() endif() endmacro() macro (cotire_parse_line _line _headerFileVar _headerDepthVar) if (MSVC) # cl.exe /showIncludes output looks different depending on the language pack used, e.g.: # English: "Note: including file: C:\directory\file" # German: "Hinweis: Einlesen der Datei: C:\directory\file" # We use a very general regular expression, relying on the presence of the : characters if (_line MATCHES "( +)([a-zA-Z]:[^:]+)$") # Visual Studio compiler output string (LENGTH "${CMAKE_MATCH_1}" ${_headerDepthVar}) get_filename_component(${_headerFileVar} "${CMAKE_MATCH_2}" ABSOLUTE) else() set (${_headerFileVar} "") set (${_headerDepthVar} 0) endif() else() if (_line MATCHES "^(\\.+) (.*)$") # GCC like output string (LENGTH "${CMAKE_MATCH_1}" ${_headerDepthVar}) if (IS_ABSOLUTE "${CMAKE_MATCH_2}") set (${_headerFileVar} "${CMAKE_MATCH_2}") else() get_filename_component(${_headerFileVar} "${CMAKE_MATCH_2}" REALPATH) endif() else() set (${_headerFileVar} "") set (${_headerDepthVar} 0) endif() endif() endmacro() function (cotire_parse_includes _language _scanOutput _ignoredIncludeDirs _honoredIncludeDirs _ignoredExtensions _selectedIncludesVar _unparsedLinesVar) if (WIN32) # prevent CMake macro invocation errors due to backslash characters in Windows paths string (REPLACE "\\" "/" _scanOutput "${_scanOutput}") endif() # canonize slashes string (REPLACE "//" "/" _scanOutput "${_scanOutput}") # prevent semicolon from being interpreted as a line separator string (REPLACE ";" "\\;" _scanOutput "${_scanOutput}") # then separate lines string (REGEX REPLACE "\n" ";" _scanOutput "${_scanOutput}") list (LENGTH _scanOutput _len) # remove duplicate lines to speed up parsing list (REMOVE_DUPLICATES _scanOutput) list (LENGTH _scanOutput _uniqueLen) if (COTIRE_VERBOSE OR COTIRE_DEBUG) message (STATUS "Scanning ${_uniqueLen} unique lines of ${_len} for includes") if (_ignoredExtensions) message (STATUS "Ignored extensions: ${_ignoredExtensions}") endif() if (_ignoredIncludeDirs) message (STATUS "Ignored paths: ${_ignoredIncludeDirs}") endif() if (_honoredIncludeDirs) message (STATUS "Included paths: ${_honoredIncludeDirs}") endif() endif() set (_sourceFiles ${ARGN}) set (_selectedIncludes "") set (_unparsedLines "") # stack keeps track of inside/outside project status of processed header files set (_headerIsInsideStack "") foreach (_line IN LISTS _scanOutput) if (_line) cotire_parse_line("${_line}" _headerFile _headerDepth) if (_headerFile) cotire_check_header_file_location("${_headerFile}" "${_ignoredIncludeDirs}" "${_honoredIncludeDirs}" _headerIsInside) if (COTIRE_DEBUG) message (STATUS "${_headerDepth}: ${_headerFile} ${_headerIsInside}") endif() # update stack list (LENGTH _headerIsInsideStack _stackLen) if (_headerDepth GREATER _stackLen) math (EXPR _stackLen "${_stackLen} + 1") foreach (_index RANGE ${_stackLen} ${_headerDepth}) list (APPEND _headerIsInsideStack ${_headerIsInside}) endforeach() else() foreach (_index RANGE ${_headerDepth} ${_stackLen}) list (REMOVE_AT _headerIsInsideStack -1) endforeach() list (APPEND _headerIsInsideStack ${_headerIsInside}) endif() if (COTIRE_DEBUG) message (STATUS "${_headerIsInsideStack}") endif() # header is a candidate if it is outside project if (NOT _headerIsInside) # get parent header file's inside/outside status if (_headerDepth GREATER 1) math (EXPR _index "${_headerDepth} - 2") list (GET _headerIsInsideStack ${_index} _parentHeaderIsInside) else() set (_parentHeaderIsInside TRUE) endif() # select header file if parent header file is inside project # (e.g., a project header file that includes a standard header file) if (_parentHeaderIsInside) cotire_check_ignore_header_file_path("${_headerFile}" _headerIsIgnored) if (NOT _headerIsIgnored) cotire_check_ignore_header_file_ext("${_headerFile}" _ignoredExtensions _headerIsIgnored) if (NOT _headerIsIgnored) list (APPEND _selectedIncludes "${_headerFile}") else() # fix header's inside status on stack, it is ignored by extension now list (REMOVE_AT _headerIsInsideStack -1) list (APPEND _headerIsInsideStack TRUE) endif() endif() if (COTIRE_DEBUG) message (STATUS "${_headerFile} ${_ignoredExtensions} ${_headerIsIgnored}") endif() endif() endif() else() if (MSVC) # for cl.exe do not keep unparsed lines which solely consist of a source file name string (FIND "${_sourceFiles}" "${_line}" _index) if (_index LESS 0) list (APPEND _unparsedLines "${_line}") endif() else() list (APPEND _unparsedLines "${_line}") endif() endif() endif() endforeach() list (REMOVE_DUPLICATES _selectedIncludes) set (${_selectedIncludesVar} ${_selectedIncludes} PARENT_SCOPE) set (${_unparsedLinesVar} ${_unparsedLines} PARENT_SCOPE) endfunction() function (cotire_scan_includes _includesVar) set(_options "") set(_oneValueArgs COMPILER_ID COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_VERSION LANGUAGE UNPARSED_LINES) set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS INCLUDE_PRIORITY_PATH COMPILER_LAUNCHER) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) if (NOT _option_LANGUAGE) set (_option_LANGUAGE "CXX") endif() if (NOT _option_COMPILER_ID) set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") endif() if (NOT _option_COMPILER_VERSION) set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") endif() cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_LAUNCHER}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}") cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS}) cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS}) cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) cotire_add_makedep_flags("${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}" _cmd) # only consider existing source files for scanning set (_existingSourceFiles "") foreach (_sourceFile ${_sourceFiles}) if (EXISTS "${_sourceFile}") list (APPEND _existingSourceFiles "${_sourceFile}") endif() endforeach() if (NOT _existingSourceFiles) set (${_includesVar} "" PARENT_SCOPE) return() endif() list (APPEND _cmd ${_existingSourceFiles}) if (COTIRE_VERBOSE) message (STATUS "execute_process: ${_cmd}") endif() if (_option_COMPILER_ID MATCHES "MSVC") # cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared unset (ENV{VS_UNICODE_OUTPUT}) endif() execute_process( COMMAND ${_cmd} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE _result OUTPUT_QUIET ERROR_VARIABLE _output) if (_result) message (STATUS "Result ${_result} scanning includes of ${_existingSourceFiles}.") endif() cotire_parse_includes( "${_option_LANGUAGE}" "${_output}" "${_option_IGNORE_PATH}" "${_option_INCLUDE_PATH}" "${_option_IGNORE_EXTENSIONS}" _includes _unparsedLines ${_sourceFiles}) if (_option_INCLUDE_PRIORITY_PATH) set (_sortedIncludes "") foreach (_priorityPath ${_option_INCLUDE_PRIORITY_PATH}) foreach (_include ${_includes}) string (FIND ${_include} ${_priorityPath} _position) if (_position GREATER -1) list (APPEND _sortedIncludes ${_include}) endif() endforeach() endforeach() if (_sortedIncludes) list (INSERT _includes 0 ${_sortedIncludes}) list (REMOVE_DUPLICATES _includes) endif() endif() set (${_includesVar} ${_includes} PARENT_SCOPE) if (_option_UNPARSED_LINES) set (${_option_UNPARSED_LINES} ${_unparsedLines} PARENT_SCOPE) endif() endfunction() macro (cotire_append_undefs _contentsVar) set (_undefs ${ARGN}) if (_undefs) list (REMOVE_DUPLICATES _undefs) foreach (_definition ${_undefs}) list (APPEND ${_contentsVar} "#undef ${_definition}") endforeach() endif() endmacro() macro (cotire_comment_str _language _commentText _commentVar) if ("${_language}" STREQUAL "CMAKE") set (${_commentVar} "# ${_commentText}") else() set (${_commentVar} "/* ${_commentText} */") endif() endmacro() function (cotire_write_file _language _file _contents _force) get_filename_component(_moduleName "${COTIRE_CMAKE_MODULE_FILE}" NAME) cotire_comment_str("${_language}" "${_moduleName} ${COTIRE_CMAKE_MODULE_VERSION} generated file" _header1) cotire_comment_str("${_language}" "${_file}" _header2) set (_contents "${_header1}\n${_header2}\n${_contents}") if (COTIRE_DEBUG) message (STATUS "${_contents}") endif() if (_force OR NOT EXISTS "${_file}") file (WRITE "${_file}" "${_contents}") else() file (READ "${_file}" _oldContents) if (NOT "${_oldContents}" STREQUAL "${_contents}") file (WRITE "${_file}" "${_contents}") else() if (COTIRE_DEBUG) message (STATUS "${_file} unchanged") endif() endif() endif() endfunction() function (cotire_generate_unity_source _unityFile) set(_options "") set(_oneValueArgs LANGUAGE) set(_multiValueArgs DEPENDS SOURCES_COMPILE_DEFINITIONS PRE_UNDEFS SOURCES_PRE_UNDEFS POST_UNDEFS SOURCES_POST_UNDEFS PROLOGUE EPILOGUE) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) if (_option_DEPENDS) cotire_check_file_up_to_date(_unityFileIsUpToDate "${_unityFile}" ${_option_DEPENDS}) if (_unityFileIsUpToDate) return() endif() endif() set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) if (NOT _option_PRE_UNDEFS) set (_option_PRE_UNDEFS "") endif() if (NOT _option_SOURCES_PRE_UNDEFS) set (_option_SOURCES_PRE_UNDEFS "") endif() if (NOT _option_POST_UNDEFS) set (_option_POST_UNDEFS "") endif() if (NOT _option_SOURCES_POST_UNDEFS) set (_option_SOURCES_POST_UNDEFS "") endif() set (_contents "") if (_option_PROLOGUE) list (APPEND _contents ${_option_PROLOGUE}) endif() if (_option_LANGUAGE AND _sourceFiles) if ("${_option_LANGUAGE}" STREQUAL "CXX") list (APPEND _contents "#ifdef __cplusplus") elseif ("${_option_LANGUAGE}" STREQUAL "C") list (APPEND _contents "#ifndef __cplusplus") endif() endif() set (_compileUndefinitions "") foreach (_sourceFile ${_sourceFiles}) cotire_get_source_compile_definitions( "${_option_CONFIGURATION}" "${_option_LANGUAGE}" "${_sourceFile}" _compileDefinitions ${_option_SOURCES_COMPILE_DEFINITIONS}) cotire_get_source_undefs("${_sourceFile}" COTIRE_UNITY_SOURCE_PRE_UNDEFS _sourcePreUndefs ${_option_SOURCES_PRE_UNDEFS}) cotire_get_source_undefs("${_sourceFile}" COTIRE_UNITY_SOURCE_POST_UNDEFS _sourcePostUndefs ${_option_SOURCES_POST_UNDEFS}) if (_option_PRE_UNDEFS) list (APPEND _compileUndefinitions ${_option_PRE_UNDEFS}) endif() if (_sourcePreUndefs) list (APPEND _compileUndefinitions ${_sourcePreUndefs}) endif() if (_compileUndefinitions) cotire_append_undefs(_contents ${_compileUndefinitions}) set (_compileUndefinitions "") endif() if (_sourcePostUndefs) list (APPEND _compileUndefinitions ${_sourcePostUndefs}) endif() if (_option_POST_UNDEFS) list (APPEND _compileUndefinitions ${_option_POST_UNDEFS}) endif() foreach (_definition ${_compileDefinitions}) if (_definition MATCHES "^([a-zA-Z0-9_]+)=(.+)$") list (APPEND _contents "#define ${CMAKE_MATCH_1} ${CMAKE_MATCH_2}") list (INSERT _compileUndefinitions 0 "${CMAKE_MATCH_1}") else() list (APPEND _contents "#define ${_definition}") list (INSERT _compileUndefinitions 0 "${_definition}") endif() endforeach() # use absolute path as source file location get_filename_component(_sourceFileLocation "${_sourceFile}" ABSOLUTE) if (WIN32) file (TO_NATIVE_PATH "${_sourceFileLocation}" _sourceFileLocation) endif() list (APPEND _contents "#include \"${_sourceFileLocation}\"") endforeach() if (_compileUndefinitions) cotire_append_undefs(_contents ${_compileUndefinitions}) set (_compileUndefinitions "") endif() if (_option_LANGUAGE AND _sourceFiles) list (APPEND _contents "#endif") endif() if (_option_EPILOGUE) list (APPEND _contents ${_option_EPILOGUE}) endif() list (APPEND _contents "") string (REPLACE ";" "\n" _contents "${_contents}") if (COTIRE_VERBOSE) message ("${_contents}") endif() cotire_write_file("${_option_LANGUAGE}" "${_unityFile}" "${_contents}" TRUE) endfunction() function (cotire_generate_prefix_header _prefixFile) set(_options "") set(_oneValueArgs LANGUAGE COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_ID COMPILER_VERSION) set(_multiValueArgs DEPENDS COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS INCLUDE_PRIORITY_PATH COMPILER_LAUNCHER) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) if (NOT _option_COMPILER_ID) set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") endif() if (NOT _option_COMPILER_VERSION) set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") endif() if (_option_DEPENDS) cotire_check_file_up_to_date(_prefixFileIsUpToDate "${_prefixFile}" ${_option_DEPENDS}) if (_prefixFileIsUpToDate) # create empty log file set (_unparsedLinesFile "${_prefixFile}.log") file (WRITE "${_unparsedLinesFile}" "") return() endif() endif() set (_prologue "") set (_epilogue "") if (_option_COMPILER_ID MATCHES "Clang") set (_prologue "#pragma clang system_header") elseif (_option_COMPILER_ID MATCHES "GNU") set (_prologue "#pragma GCC system_header") elseif (_option_COMPILER_ID MATCHES "MSVC") set (_prologue "#pragma warning(push, 0)") set (_epilogue "#pragma warning(pop)") elseif (_option_COMPILER_ID MATCHES "Intel") # Intel compiler requires hdrstop pragma to stop generating PCH file set (_epilogue "#pragma hdrstop") endif() set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) cotire_scan_includes(_selectedHeaders ${_sourceFiles} LANGUAGE "${_option_LANGUAGE}" COMPILER_LAUNCHER "${_option_COMPILER_LAUNCHER}" COMPILER_EXECUTABLE "${_option_COMPILER_EXECUTABLE}" COMPILER_ARG1 "${_option_COMPILER_ARG1}" COMPILER_ID "${_option_COMPILER_ID}" COMPILER_VERSION "${_option_COMPILER_VERSION}" COMPILE_DEFINITIONS ${_option_COMPILE_DEFINITIONS} COMPILE_FLAGS ${_option_COMPILE_FLAGS} INCLUDE_DIRECTORIES ${_option_INCLUDE_DIRECTORIES} SYSTEM_INCLUDE_DIRECTORIES ${_option_SYSTEM_INCLUDE_DIRECTORIES} IGNORE_PATH ${_option_IGNORE_PATH} INCLUDE_PATH ${_option_INCLUDE_PATH} IGNORE_EXTENSIONS ${_option_IGNORE_EXTENSIONS} INCLUDE_PRIORITY_PATH ${_option_INCLUDE_PRIORITY_PATH} UNPARSED_LINES _unparsedLines) cotire_generate_unity_source("${_prefixFile}" PROLOGUE ${_prologue} EPILOGUE ${_epilogue} LANGUAGE "${_option_LANGUAGE}" ${_selectedHeaders}) set (_unparsedLinesFile "${_prefixFile}.log") if (_unparsedLines) if (COTIRE_VERBOSE OR NOT _selectedHeaders) list (LENGTH _unparsedLines _skippedLineCount) message (STATUS "${_skippedLineCount} line(s) skipped, see ${_unparsedLinesFile}") endif() string (REPLACE ";" "\n" _unparsedLines "${_unparsedLines}") endif() file (WRITE "${_unparsedLinesFile}" "${_unparsedLines}") endfunction() function (cotire_add_makedep_flags _language _compilerID _compilerVersion _flagsVar) set (_flags ${${_flagsVar}}) if (_compilerID MATCHES "MSVC") # cl.exe options used # /nologo suppresses display of sign-on banner # /TC treat all files named on the command line as C source files # /TP treat all files named on the command line as C++ source files # /EP preprocess to stdout without #line directives # /showIncludes list include files set (_sourceFileTypeC "/TC") set (_sourceFileTypeCXX "/TP") if (_flags) # append to list list (APPEND _flags /nologo "${_sourceFileType${_language}}" /EP /showIncludes) else() # return as a flag string set (_flags "${_sourceFileType${_language}} /EP /showIncludes") endif() elseif (_compilerID MATCHES "GNU") # GCC options used # -H print the name of each header file used # -E invoke preprocessor # -fdirectives-only do not expand macros, requires GCC >= 4.3 if (_flags) # append to list list (APPEND _flags -H -E) if (NOT "${_compilerVersion}" VERSION_LESS "4.3.0") list (APPEND _flags "-fdirectives-only") endif() else() # return as a flag string set (_flags "-H -E") if (NOT "${_compilerVersion}" VERSION_LESS "4.3.0") set (_flags "${_flags} -fdirectives-only") endif() endif() elseif (_compilerID MATCHES "Clang") # Clang options used # -H print the name of each header file used # -E invoke preprocessor # -fno-color-diagnostics don't prints diagnostics in color if (_flags) # append to list list (APPEND _flags -H -E -fno-color-diagnostics) else() # return as a flag string set (_flags "-H -E -fno-color-diagnostics") endif() elseif (_compilerID MATCHES "Intel") if (WIN32) # Windows Intel options used # /nologo do not display compiler version information # /QH display the include file order # /EP preprocess to stdout, omitting #line directives # /TC process all source or unrecognized file types as C source files # /TP process all source or unrecognized file types as C++ source files set (_sourceFileTypeC "/TC") set (_sourceFileTypeCXX "/TP") if (_flags) # append to list list (APPEND _flags /nologo "${_sourceFileType${_language}}" /EP /QH) else() # return as a flag string set (_flags "${_sourceFileType${_language}} /EP /QH") endif() else() # Linux / Mac OS X Intel options used # -H print the name of each header file used # -EP preprocess to stdout, omitting #line directives # -Kc++ process all source or unrecognized file types as C++ source files if (_flags) # append to list if ("${_language}" STREQUAL "CXX") list (APPEND _flags -Kc++) endif() list (APPEND _flags -H -EP) else() # return as a flag string if ("${_language}" STREQUAL "CXX") set (_flags "-Kc++ ") endif() set (_flags "${_flags}-H -EP") endif() endif() else() message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") endif() set (${_flagsVar} ${_flags} PARENT_SCOPE) endfunction() function (cotire_add_pch_compilation_flags _language _compilerID _compilerVersion _prefixFile _pchFile _hostFile _flagsVar) set (_flags ${${_flagsVar}}) if (_compilerID MATCHES "MSVC") file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) file (TO_NATIVE_PATH "${_hostFile}" _hostFileNative) # cl.exe options used # /Yc creates a precompiled header file # /Fp specifies precompiled header binary file name # /FI forces inclusion of file # /TC treat all files named on the command line as C source files # /TP treat all files named on the command line as C++ source files # /Zs syntax check only # /Zm precompiled header memory allocation scaling factor set (_sourceFileTypeC "/TC") set (_sourceFileTypeCXX "/TP") if (_flags) # append to list list (APPEND _flags /nologo "${_sourceFileType${_language}}" "/Yc${_prefixFileNative}" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}" /Zs "${_hostFileNative}") if (COTIRE_PCH_MEMORY_SCALING_FACTOR) list (APPEND _flags "/Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") endif() else() # return as a flag string set (_flags "/Yc\"${_prefixFileNative}\" /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") if (COTIRE_PCH_MEMORY_SCALING_FACTOR) set (_flags "${_flags} /Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") endif() endif() elseif (_compilerID MATCHES "GNU|Clang") # GCC / Clang options used # -x specify the source language # -c compile but do not link # -o place output in file # note that we cannot use -w to suppress all warnings upon pre-compiling, because turning off a warning may # alter compile flags as a side effect (e.g., -Wwrite-string implies -fconst-strings) set (_xLanguage_C "c-header") set (_xLanguage_CXX "c++-header") if (_flags) # append to list list (APPEND _flags "-x" "${_xLanguage_${_language}}" "-c" "${_prefixFile}" -o "${_pchFile}") else() # return as a flag string set (_flags "-x ${_xLanguage_${_language}} -c \"${_prefixFile}\" -o \"${_pchFile}\"") endif() elseif (_compilerID MATCHES "Intel") if (WIN32) file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) file (TO_NATIVE_PATH "${_hostFile}" _hostFileNative) # Windows Intel options used # /nologo do not display compiler version information # /Yc create a precompiled header (PCH) file # /Fp specify a path or file name for precompiled header files # /FI tells the preprocessor to include a specified file name as the header file # /TC process all source or unrecognized file types as C source files # /TP process all source or unrecognized file types as C++ source files # /Zs syntax check only # /Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) set (_sourceFileTypeC "/TC") set (_sourceFileTypeCXX "/TP") if (_flags) # append to list list (APPEND _flags /nologo "${_sourceFileType${_language}}" "/Yc" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}" /Zs "${_hostFileNative}") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") list (APPEND _flags "/Wpch-messages") endif() else() # return as a flag string set (_flags "/Yc /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") set (_flags "${_flags} /Wpch-messages") endif() endif() else() # Linux / Mac OS X Intel options used # -pch-dir location for precompiled header files # -pch-create name of the precompiled header (PCH) to create # -Kc++ process all source or unrecognized file types as C++ source files # -fsyntax-only check only for correct syntax # -Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) get_filename_component(_pchDir "${_pchFile}" DIRECTORY) get_filename_component(_pchName "${_pchFile}" NAME) set (_xLanguage_C "c-header") set (_xLanguage_CXX "c++-header") if (_flags) # append to list if ("${_language}" STREQUAL "CXX") list (APPEND _flags -Kc++) endif() list (APPEND _flags "-include" "${_prefixFile}" "-pch-dir" "${_pchDir}" "-pch-create" "${_pchName}" "-fsyntax-only" "${_hostFile}") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") list (APPEND _flags "-Wpch-messages") endif() else() # return as a flag string set (_flags "-include \"${_prefixFile}\" -pch-dir \"${_pchDir}\" -pch-create \"${_pchName}\"") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") set (_flags "${_flags} -Wpch-messages") endif() endif() endif() else() message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") endif() set (${_flagsVar} ${_flags} PARENT_SCOPE) endfunction() function (cotire_add_prefix_pch_inclusion_flags _language _compilerID _compilerVersion _prefixFile _pchFile _flagsVar) set (_flags ${${_flagsVar}}) if (_compilerID MATCHES "MSVC") file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) # cl.exe options used # /Yu uses a precompiled header file during build # /Fp specifies precompiled header binary file name # /FI forces inclusion of file # /Zm precompiled header memory allocation scaling factor if (_pchFile) file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) if (_flags) # append to list list (APPEND _flags "/Yu${_prefixFileNative}" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}") if (COTIRE_PCH_MEMORY_SCALING_FACTOR) list (APPEND _flags "/Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") endif() else() # return as a flag string set (_flags "/Yu\"${_prefixFileNative}\" /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") if (COTIRE_PCH_MEMORY_SCALING_FACTOR) set (_flags "${_flags} /Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") endif() endif() else() # no precompiled header, force inclusion of prefix header if (_flags) # append to list list (APPEND _flags "/FI${_prefixFileNative}") else() # return as a flag string set (_flags "/FI\"${_prefixFileNative}\"") endif() endif() elseif (_compilerID MATCHES "GNU") # GCC options used # -include process include file as the first line of the primary source file # -Winvalid-pch warns if precompiled header is found but cannot be used # note: ccache requires the -include flag to be used in order to process precompiled header correctly if (_flags) # append to list list (APPEND _flags "-Winvalid-pch" "-include" "${_prefixFile}") else() # return as a flag string set (_flags "-Winvalid-pch -include \"${_prefixFile}\"") endif() elseif (_compilerID MATCHES "Clang") # Clang options used # -include process include file as the first line of the primary source file # -include-pch include precompiled header file # -Qunused-arguments don't emit warning for unused driver arguments # note: ccache requires the -include flag to be used in order to process precompiled header correctly if (_flags) # append to list list (APPEND _flags "-Qunused-arguments" "-include" "${_prefixFile}") else() # return as a flag string set (_flags "-Qunused-arguments -include \"${_prefixFile}\"") endif() elseif (_compilerID MATCHES "Intel") if (WIN32) file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) # Windows Intel options used # /Yu use a precompiled header (PCH) file # /Fp specify a path or file name for precompiled header files # /FI tells the preprocessor to include a specified file name as the header file # /Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) if (_pchFile) file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) if (_flags) # append to list list (APPEND _flags "/Yu" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") list (APPEND _flags "/Wpch-messages") endif() else() # return as a flag string set (_flags "/Yu /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") set (_flags "${_flags} /Wpch-messages") endif() endif() else() # no precompiled header, force inclusion of prefix header if (_flags) # append to list list (APPEND _flags "/FI${_prefixFileNative}") else() # return as a flag string set (_flags "/FI\"${_prefixFileNative}\"") endif() endif() else() # Linux / Mac OS X Intel options used # -pch-dir location for precompiled header files # -pch-use name of the precompiled header (PCH) to use # -include process include file as the first line of the primary source file # -Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) if (_pchFile) get_filename_component(_pchDir "${_pchFile}" DIRECTORY) get_filename_component(_pchName "${_pchFile}" NAME) if (_flags) # append to list list (APPEND _flags "-include" "${_prefixFile}" "-pch-dir" "${_pchDir}" "-pch-use" "${_pchName}") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") list (APPEND _flags "-Wpch-messages") endif() else() # return as a flag string set (_flags "-include \"${_prefixFile}\" -pch-dir \"${_pchDir}\" -pch-use \"${_pchName}\"") if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") set (_flags "${_flags} -Wpch-messages") endif() endif() else() # no precompiled header, force inclusion of prefix header if (_flags) # append to list list (APPEND _flags "-include" "${_prefixFile}") else() # return as a flag string set (_flags "-include \"${_prefixFile}\"") endif() endif() endif() else() message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") endif() set (${_flagsVar} ${_flags} PARENT_SCOPE) endfunction() function (cotire_precompile_prefix_header _prefixFile _pchFile _hostFile) set(_options "") set(_oneValueArgs COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_ID COMPILER_VERSION LANGUAGE) set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES SYS COMPILER_LAUNCHER) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) if (NOT _option_LANGUAGE) set (_option_LANGUAGE "CXX") endif() if (NOT _option_COMPILER_ID) set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") endif() if (NOT _option_COMPILER_VERSION) set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") endif() cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_LAUNCHER}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}") cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS}) cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS}) cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) cotire_add_pch_compilation_flags( "${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" "${_hostFile}" _cmd) if (COTIRE_VERBOSE) message (STATUS "execute_process: ${_cmd}") endif() if (_option_COMPILER_ID MATCHES "MSVC") # cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared unset (ENV{VS_UNICODE_OUTPUT}) endif() execute_process( COMMAND ${_cmd} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE _result) if (_result) message (FATAL_ERROR "cotire: error ${_result} precompiling ${_prefixFile}.") endif() endfunction() function (cotire_check_precompiled_header_support _language _target _msgVar) set (_unsupportedCompiler "Precompiled headers not supported for ${_language} compiler ${CMAKE_${_language}_COMPILER_ID}") if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC") # supported since Visual Studio C++ 6.0 # and CMake does not support an earlier version set (${_msgVar} "" PARENT_SCOPE) elseif (CMAKE_${_language}_COMPILER_ID MATCHES "GNU") # GCC PCH support requires version >= 3.4 if ("${CMAKE_${_language}_COMPILER_VERSION}" VERSION_LESS "3.4.0") set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}." PARENT_SCOPE) else() set (${_msgVar} "" PARENT_SCOPE) endif() elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Clang") # all Clang versions have PCH support set (${_msgVar} "" PARENT_SCOPE) elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Intel") # Intel PCH support requires version >= 8.0.0 if ("${CMAKE_${_language}_COMPILER_VERSION}" VERSION_LESS "8.0.0") set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}." PARENT_SCOPE) else() set (${_msgVar} "" PARENT_SCOPE) endif() else() set (${_msgVar} "${_unsupportedCompiler}." PARENT_SCOPE) endif() get_target_property(_launcher ${_target} ${_language}_COMPILER_LAUNCHER) if (CMAKE_${_language}_COMPILER MATCHES "ccache" OR _launcher MATCHES "ccache") if (NOT "$ENV{CCACHE_SLOPPINESS}" MATCHES "time_macros|pch_defines") set (${_msgVar} "ccache requires the environment variable CCACHE_SLOPPINESS to be set to \"pch_defines,time_macros\"." PARENT_SCOPE) endif() endif() if (APPLE) # PCH compilation not supported by GCC / Clang for multi-architecture builds (e.g., i386, x86_64) cotire_get_configuration_types(_configs) foreach (_config ${_configs}) set (_targetFlags "") cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) cotire_filter_compile_flags("${_language}" "arch" _architectures _ignore ${_targetFlags}) list (LENGTH _architectures _numberOfArchitectures) if (_numberOfArchitectures GREATER 1) string (REPLACE ";" ", " _architectureStr "${_architectures}") set (${_msgVar} "Precompiled headers not supported on Darwin for multi-architecture builds (${_architectureStr})." PARENT_SCOPE) break() endif() endforeach() endif() endfunction() macro (cotire_get_intermediate_dir _cotireDir) # ${CMAKE_CFG_INTDIR} may reference a build-time variable when using a generator which supports configuration types get_filename_component(${_cotireDir} "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${COTIRE_INTDIR}" ABSOLUTE) endmacro() macro (cotire_setup_file_extension_variables) set (_unityFileExt_C ".c") set (_unityFileExt_CXX ".cxx") set (_prefixFileExt_C ".h") set (_prefixFileExt_CXX ".hxx") set (_prefixSourceFileExt_C ".c") set (_prefixSourceFileExt_CXX ".cxx") endmacro() function (cotire_make_single_unity_source_file_path _language _target _unityFileVar) cotire_setup_file_extension_variables() if (NOT DEFINED _unityFileExt_${_language}) set (${_unityFileVar} "" PARENT_SCOPE) return() endif() set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") set (_unityFileName "${_unityFileBaseName}${_unityFileExt_${_language}}") cotire_get_intermediate_dir(_baseDir) set (_unityFile "${_baseDir}/${_unityFileName}") set (${_unityFileVar} "${_unityFile}" PARENT_SCOPE) endfunction() function (cotire_make_unity_source_file_paths _language _target _maxIncludes _unityFilesVar) cotire_setup_file_extension_variables() if (NOT DEFINED _unityFileExt_${_language}) set (${_unityFileVar} "" PARENT_SCOPE) return() endif() set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") cotire_get_intermediate_dir(_baseDir) set (_startIndex 0) set (_index 0) set (_unityFiles "") set (_sourceFiles ${ARGN}) foreach (_sourceFile ${_sourceFiles}) get_source_file_property(_startNew "${_sourceFile}" COTIRE_START_NEW_UNITY_SOURCE) math (EXPR _unityFileCount "${_index} - ${_startIndex}") if (_startNew OR (_maxIncludes GREATER 0 AND NOT _unityFileCount LESS _maxIncludes)) if (_index GREATER 0) # start new unity file segment math (EXPR _endIndex "${_index} - 1") set (_unityFileName "${_unityFileBaseName}_${_startIndex}_${_endIndex}${_unityFileExt_${_language}}") list (APPEND _unityFiles "${_baseDir}/${_unityFileName}") endif() set (_startIndex ${_index}) endif() math (EXPR _index "${_index} + 1") endforeach() list (LENGTH _sourceFiles _numberOfSources) if (_startIndex EQUAL 0) # there is only a single unity file cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFiles) elseif (_startIndex LESS _numberOfSources) # end with final unity file segment math (EXPR _endIndex "${_index} - 1") set (_unityFileName "${_unityFileBaseName}_${_startIndex}_${_endIndex}${_unityFileExt_${_language}}") list (APPEND _unityFiles "${_baseDir}/${_unityFileName}") endif() set (${_unityFilesVar} ${_unityFiles} PARENT_SCOPE) if (COTIRE_DEBUG AND _unityFiles) message (STATUS "unity files: ${_unityFiles}") endif() endfunction() function (cotire_unity_to_prefix_file_path _language _target _unityFile _prefixFileVar) cotire_setup_file_extension_variables() if (NOT DEFINED _unityFileExt_${_language}) set (${_prefixFileVar} "" PARENT_SCOPE) return() endif() set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") set (_prefixFileBaseName "${_target}_${_language}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") string (REPLACE "${_unityFileBaseName}" "${_prefixFileBaseName}" _prefixFile "${_unityFile}") string (REGEX REPLACE "${_unityFileExt_${_language}}$" "${_prefixFileExt_${_language}}" _prefixFile "${_prefixFile}") set (${_prefixFileVar} "${_prefixFile}" PARENT_SCOPE) endfunction() function (cotire_prefix_header_to_source_file_path _language _prefixHeaderFile _prefixSourceFileVar) cotire_setup_file_extension_variables() if (NOT DEFINED _prefixSourceFileExt_${_language}) set (${_prefixSourceFileVar} "" PARENT_SCOPE) return() endif() string (REGEX REPLACE "${_prefixFileExt_${_language}}$" "${_prefixSourceFileExt_${_language}}" _prefixSourceFile "${_prefixHeaderFile}") set (${_prefixSourceFileVar} "${_prefixSourceFile}" PARENT_SCOPE) endfunction() function (cotire_make_prefix_file_name _language _target _prefixFileBaseNameVar _prefixFileNameVar) cotire_setup_file_extension_variables() if (NOT _language) set (_prefixFileBaseName "${_target}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") set (_prefixFileName "${_prefixFileBaseName}${_prefixFileExt_C}") elseif (DEFINED _prefixFileExt_${_language}) set (_prefixFileBaseName "${_target}_${_language}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") set (_prefixFileName "${_prefixFileBaseName}${_prefixFileExt_${_language}}") else() set (_prefixFileBaseName "") set (_prefixFileName "") endif() set (${_prefixFileBaseNameVar} "${_prefixFileBaseName}" PARENT_SCOPE) set (${_prefixFileNameVar} "${_prefixFileName}" PARENT_SCOPE) endfunction() function (cotire_make_prefix_file_path _language _target _prefixFileVar) cotire_make_prefix_file_name("${_language}" "${_target}" _prefixFileBaseName _prefixFileName) set (${_prefixFileVar} "" PARENT_SCOPE) if (_prefixFileName) if (NOT _language) set (_language "C") endif() if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang|Intel|MSVC") cotire_get_intermediate_dir(_baseDir) set (${_prefixFileVar} "${_baseDir}/${_prefixFileName}" PARENT_SCOPE) endif() endif() endfunction() function (cotire_make_pch_file_path _language _target _pchFileVar) cotire_make_prefix_file_name("${_language}" "${_target}" _prefixFileBaseName _prefixFileName) set (${_pchFileVar} "" PARENT_SCOPE) if (_prefixFileBaseName AND _prefixFileName) cotire_check_precompiled_header_support("${_language}" "${_target}" _msg) if (NOT _msg) if (XCODE) # For Xcode, we completely hand off the compilation of the prefix header to the IDE return() endif() cotire_get_intermediate_dir(_baseDir) if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC") # MSVC uses the extension .pch added to the prefix header base name set (${_pchFileVar} "${_baseDir}/${_prefixFileBaseName}.pch" PARENT_SCOPE) elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Clang") # Clang looks for a precompiled header corresponding to the prefix header with the extension .pch appended set (${_pchFileVar} "${_baseDir}/${_prefixFileName}.pch" PARENT_SCOPE) elseif (CMAKE_${_language}_COMPILER_ID MATCHES "GNU") # GCC looks for a precompiled header corresponding to the prefix header with the extension .gch appended set (${_pchFileVar} "${_baseDir}/${_prefixFileName}.gch" PARENT_SCOPE) elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Intel") # Intel uses the extension .pchi added to the prefix header base name set (${_pchFileVar} "${_baseDir}/${_prefixFileBaseName}.pchi" PARENT_SCOPE) endif() endif() endif() endfunction() function (cotire_select_unity_source_files _unityFile _sourcesVar) set (_sourceFiles ${ARGN}) if (_sourceFiles AND "${_unityFile}" MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}_([0-9]+)_([0-9]+)") set (_startIndex ${CMAKE_MATCH_1}) set (_endIndex ${CMAKE_MATCH_2}) list (LENGTH _sourceFiles _numberOfSources) if (NOT _startIndex LESS _numberOfSources) math (EXPR _startIndex "${_numberOfSources} - 1") endif() if (NOT _endIndex LESS _numberOfSources) math (EXPR _endIndex "${_numberOfSources} - 1") endif() set (_files "") foreach (_index RANGE ${_startIndex} ${_endIndex}) list (GET _sourceFiles ${_index} _file) list (APPEND _files "${_file}") endforeach() else() set (_files ${_sourceFiles}) endif() set (${_sourcesVar} ${_files} PARENT_SCOPE) endfunction() function (cotire_get_unity_source_dependencies _language _target _dependencySourcesVar) set (_dependencySources "") # depend on target's generated source files get_target_property(_targetSourceFiles ${_target} SOURCES) cotire_get_objects_with_property_on(_generatedSources GENERATED SOURCE ${_targetSourceFiles}) if (_generatedSources) # but omit all generated source files that have the COTIRE_EXCLUDED property set to true cotire_get_objects_with_property_on(_excludedGeneratedSources COTIRE_EXCLUDED SOURCE ${_generatedSources}) if (_excludedGeneratedSources) list (REMOVE_ITEM _generatedSources ${_excludedGeneratedSources}) endif() # and omit all generated source files that have the COTIRE_DEPENDENCY property set to false explicitly cotire_get_objects_with_property_off(_excludedNonDependencySources COTIRE_DEPENDENCY SOURCE ${_generatedSources}) if (_excludedNonDependencySources) list (REMOVE_ITEM _generatedSources ${_excludedNonDependencySources}) endif() if (_generatedSources) list (APPEND _dependencySources ${_generatedSources}) endif() endif() if (COTIRE_DEBUG AND _dependencySources) message (STATUS "${_language} ${_target} unity source dependencies: ${_dependencySources}") endif() set (${_dependencySourcesVar} ${_dependencySources} PARENT_SCOPE) endfunction() function (cotire_get_prefix_header_dependencies _language _target _dependencySourcesVar) set (_dependencySources "") # depend on target source files marked with custom COTIRE_DEPENDENCY property get_target_property(_targetSourceFiles ${_target} SOURCES) cotire_get_objects_with_property_on(_dependencySources COTIRE_DEPENDENCY SOURCE ${_targetSourceFiles}) if (COTIRE_DEBUG AND _dependencySources) message (STATUS "${_language} ${_target} prefix header dependencies: ${_dependencySources}") endif() set (${_dependencySourcesVar} ${_dependencySources} PARENT_SCOPE) endfunction() function (cotire_generate_target_script _language _configurations _target _targetScriptVar _targetConfigScriptVar) set (_targetSources ${ARGN}) cotire_get_prefix_header_dependencies(${_language} ${_target} COTIRE_TARGET_PREFIX_DEPENDS ${_targetSources}) cotire_get_unity_source_dependencies(${_language} ${_target} COTIRE_TARGET_UNITY_DEPENDS ${_targetSources}) # set up variables to be configured set (COTIRE_TARGET_LANGUAGE "${_language}") get_target_property(COTIRE_TARGET_IGNORE_PATH ${_target} COTIRE_PREFIX_HEADER_IGNORE_PATH) cotire_add_sys_root_paths(COTIRE_TARGET_IGNORE_PATH) get_target_property(COTIRE_TARGET_INCLUDE_PATH ${_target} COTIRE_PREFIX_HEADER_INCLUDE_PATH) cotire_add_sys_root_paths(COTIRE_TARGET_INCLUDE_PATH) get_target_property(COTIRE_TARGET_PRE_UNDEFS ${_target} COTIRE_UNITY_SOURCE_PRE_UNDEFS) get_target_property(COTIRE_TARGET_POST_UNDEFS ${_target} COTIRE_UNITY_SOURCE_POST_UNDEFS) get_target_property(COTIRE_TARGET_MAXIMUM_NUMBER_OF_INCLUDES ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES) get_target_property(COTIRE_TARGET_INCLUDE_PRIORITY_PATH ${_target} COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH) cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_PRE_UNDEFS COTIRE_TARGET_SOURCES_PRE_UNDEFS ${_targetSources}) cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_POST_UNDEFS COTIRE_TARGET_SOURCES_POST_UNDEFS ${_targetSources}) set (COTIRE_TARGET_CONFIGURATION_TYPES "${_configurations}") foreach (_config ${_configurations}) string (TOUPPER "${_config}" _upperConfig) cotire_get_target_include_directories( "${_config}" "${_language}" "${_target}" COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig} COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig}) cotire_get_target_compile_definitions( "${_config}" "${_language}" "${_target}" COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig}) cotire_get_target_compiler_flags( "${_config}" "${_language}" "${_target}" COTIRE_TARGET_COMPILE_FLAGS_${_upperConfig}) cotire_get_source_files_compile_definitions( "${_config}" "${_language}" COTIRE_TARGET_SOURCES_COMPILE_DEFINITIONS_${_upperConfig} ${_targetSources}) endforeach() get_target_property(COTIRE_TARGET_${_language}_COMPILER_LAUNCHER ${_target} ${_language}_COMPILER_LAUNCHER) # set up COTIRE_TARGET_SOURCES set (COTIRE_TARGET_SOURCES "") foreach (_sourceFile ${_targetSources}) get_source_file_property(_generated "${_sourceFile}" GENERATED) if (_generated) # use absolute paths for generated files only, retrieving the LOCATION property is an expensive operation get_source_file_property(_sourceLocation "${_sourceFile}" LOCATION) list (APPEND COTIRE_TARGET_SOURCES "${_sourceLocation}") else() list (APPEND COTIRE_TARGET_SOURCES "${_sourceFile}") endif() endforeach() # copy variable definitions to cotire target script get_cmake_property(_vars VARIABLES) string (REGEX MATCHALL "COTIRE_[A-Za-z0-9_]+" _matchVars "${_vars}") # omit COTIRE_*_INIT variables string (REGEX MATCHALL "COTIRE_[A-Za-z0-9_]+_INIT" _initVars "${_matchVars}") if (_initVars) list (REMOVE_ITEM _matchVars ${_initVars}) endif() # omit COTIRE_VERBOSE which is passed as a CMake define on command line list (REMOVE_ITEM _matchVars COTIRE_VERBOSE) set (_contents "") set (_contentsHasGeneratorExpressions FALSE) foreach (_var IN LISTS _matchVars ITEMS XCODE MSVC CMAKE_GENERATOR CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES CMAKE_${_language}_COMPILER_ID CMAKE_${_language}_COMPILER_VERSION CMAKE_${_language}_COMPILER_LAUNCHER CMAKE_${_language}_COMPILER CMAKE_${_language}_COMPILER_ARG1 CMAKE_INCLUDE_FLAG_${_language} CMAKE_INCLUDE_FLAG_${_language}_SEP CMAKE_INCLUDE_SYSTEM_FLAG_${_language} CMAKE_${_language}_FRAMEWORK_SEARCH_FLAG CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG CMAKE_${_language}_SOURCE_FILE_EXTENSIONS) if (DEFINED ${_var}) string (REPLACE "\"" "\\\"" _value "${${_var}}") set (_contents "${_contents}set (${_var} \"${_value}\")\n") if (NOT _contentsHasGeneratorExpressions) if ("${_value}" MATCHES "\\$<.*>") set (_contentsHasGeneratorExpressions TRUE) endif() endif() endif() endforeach() # generate target script file get_filename_component(_moduleName "${COTIRE_CMAKE_MODULE_FILE}" NAME) set (_targetCotireScript "${CMAKE_CURRENT_BINARY_DIR}/${_target}_${_language}_${_moduleName}") cotire_write_file("CMAKE" "${_targetCotireScript}" "${_contents}" FALSE) if (_contentsHasGeneratorExpressions) # use file(GENERATE ...) to expand generator expressions in the target script at CMake generate-time set (_configNameOrNoneGeneratorExpression "$<$:None>$<$>:$>") set (_targetCotireConfigScript "${CMAKE_CURRENT_BINARY_DIR}/${_target}_${_language}_${_configNameOrNoneGeneratorExpression}_${_moduleName}") file (GENERATE OUTPUT "${_targetCotireConfigScript}" INPUT "${_targetCotireScript}") else() set (_targetCotireConfigScript "${_targetCotireScript}") endif() set (${_targetScriptVar} "${_targetCotireScript}" PARENT_SCOPE) set (${_targetConfigScriptVar} "${_targetCotireConfigScript}" PARENT_SCOPE) endfunction() function (cotire_setup_pch_file_compilation _language _target _targetScript _prefixFile _pchFile _hostFile) set (_sourceFiles ${ARGN}) if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") # for Visual Studio and Intel, we attach the precompiled header compilation to the host file # the remaining files include the precompiled header, see cotire_setup_pch_file_inclusion if (_sourceFiles) set (_flags "") cotire_add_pch_compilation_flags( "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" "${_hostFile}" _flags) set_property (SOURCE ${_hostFile} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") set_property (SOURCE ${_hostFile} APPEND PROPERTY OBJECT_OUTPUTS "${_pchFile}") # make object file generated from host file depend on prefix header set_property (SOURCE ${_hostFile} APPEND PROPERTY OBJECT_DEPENDS "${_prefixFile}") # mark host file as cotired to prevent it from being used in another cotired target set_property (SOURCE ${_hostFile} PROPERTY COTIRE_TARGET "${_target}") endif() elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") # for makefile based generator, we add a custom command to precompile the prefix header if (_targetScript) cotire_set_cmd_to_prologue(_cmds) list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "precompile" "${_targetScript}" "${_prefixFile}" "${_pchFile}" "${_hostFile}") if (MSVC_IDE) file (TO_NATIVE_PATH "${_pchFile}" _pchFileLogPath) else() file (RELATIVE_PATH _pchFileLogPath "${CMAKE_BINARY_DIR}" "${_pchFile}") endif() if (COTIRE_DEBUG) message (STATUS "add_custom_command: OUTPUT ${_pchFile} ${_cmds} DEPENDS ${_prefixFile} IMPLICIT_DEPENDS ${_language} ${_prefixFile}") endif() set_property (SOURCE "${_pchFile}" PROPERTY GENERATED TRUE) add_custom_command( OUTPUT "${_pchFile}" COMMAND ${_cmds} DEPENDS "${_prefixFile}" IMPLICIT_DEPENDS ${_language} "${_prefixFile}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Building ${_language} precompiled header ${_pchFileLogPath}" VERBATIM) endif() endif() endfunction() function (cotire_setup_pch_file_inclusion _language _target _wholeTarget _prefixFile _pchFile _hostFile) if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") # for Visual Studio and Intel, we include the precompiled header in all but the host file # the host file does the precompiled header compilation, see cotire_setup_pch_file_compilation set (_sourceFiles ${ARGN}) list (LENGTH _sourceFiles _numberOfSourceFiles) if (_numberOfSourceFiles GREATER 0) # mark sources as cotired to prevent them from being used in another cotired target set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") set (_flags "") cotire_add_prefix_pch_inclusion_flags( "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" _flags) set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") # make object files generated from source files depend on precompiled header set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_pchFile}") endif() elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") set (_sourceFiles ${_hostFile} ${ARGN}) if (NOT _wholeTarget) # for makefile based generator, we force the inclusion of the prefix header for a subset # of the source files, if this is a multi-language target or has excluded files set (_flags "") cotire_add_prefix_pch_inclusion_flags( "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" _flags) set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") # mark sources as cotired to prevent them from being used in another cotired target set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") endif() # make object files generated from source files depend on precompiled header set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_pchFile}") endif() endfunction() function (cotire_setup_prefix_file_inclusion _language _target _prefixFile) set (_sourceFiles ${ARGN}) # force the inclusion of the prefix header for the given source files set (_flags "") set (_pchFile "") cotire_add_prefix_pch_inclusion_flags( "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" _flags) set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") # mark sources as cotired to prevent them from being used in another cotired target set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") # make object files generated from source files depend on prefix header set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_prefixFile}") endfunction() function (cotire_get_first_set_property_value _propertyValueVar _type _object) set (_properties ${ARGN}) foreach (_property ${_properties}) get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) if (_propertyValue) set (${_propertyValueVar} ${_propertyValue} PARENT_SCOPE) return() endif() endforeach() set (${_propertyValueVar} "" PARENT_SCOPE) endfunction() function (cotire_setup_combine_command _language _targetScript _joinedFile _cmdsVar) set (_files ${ARGN}) set (_filesPaths "") foreach (_file ${_files}) get_filename_component(_filePath "${_file}" ABSOLUTE) list (APPEND _filesPaths "${_filePath}") endforeach() cotire_set_cmd_to_prologue(_prefixCmd) list (APPEND _prefixCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "combine") if (_targetScript) list (APPEND _prefixCmd "${_targetScript}") endif() list (APPEND _prefixCmd "${_joinedFile}" ${_filesPaths}) if (COTIRE_DEBUG) message (STATUS "add_custom_command: OUTPUT ${_joinedFile} COMMAND ${_prefixCmd} DEPENDS ${_files}") endif() set_property (SOURCE "${_joinedFile}" PROPERTY GENERATED TRUE) if (MSVC_IDE) file (TO_NATIVE_PATH "${_joinedFile}" _joinedFileLogPath) else() file (RELATIVE_PATH _joinedFileLogPath "${CMAKE_BINARY_DIR}" "${_joinedFile}") endif() get_filename_component(_joinedFileBaseName "${_joinedFile}" NAME_WE) get_filename_component(_joinedFileExt "${_joinedFile}" EXT) if (_language AND _joinedFileBaseName MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}$") set (_comment "Generating ${_language} unity source ${_joinedFileLogPath}") elseif (_language AND _joinedFileBaseName MATCHES "${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}$") if (_joinedFileExt MATCHES "^\\.c") set (_comment "Generating ${_language} prefix source ${_joinedFileLogPath}") else() set (_comment "Generating ${_language} prefix header ${_joinedFileLogPath}") endif() else() set (_comment "Generating ${_joinedFileLogPath}") endif() add_custom_command( OUTPUT "${_joinedFile}" COMMAND ${_prefixCmd} DEPENDS ${_files} COMMENT "${_comment}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" VERBATIM) list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd}) set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) endfunction() function (cotire_setup_target_pch_usage _languages _target _wholeTarget) if (XCODE) # for Xcode, we attach a pre-build action to generate the unity sources and prefix headers set (_prefixFiles "") foreach (_language ${_languages}) get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) if (_prefixFile) list (APPEND _prefixFiles "${_prefixFile}") endif() endforeach() set (_cmds ${ARGN}) list (LENGTH _prefixFiles _numberOfPrefixFiles) if (_numberOfPrefixFiles GREATER 1) # we also generate a generic, single prefix header which includes all language specific prefix headers set (_language "") set (_targetScript "") cotire_make_prefix_file_path("${_language}" ${_target} _prefixHeader) cotire_setup_combine_command("${_language}" "${_targetScript}" "${_prefixHeader}" _cmds ${_prefixFiles}) else() set (_prefixHeader "${_prefixFiles}") endif() if (COTIRE_DEBUG) message (STATUS "add_custom_command: TARGET ${_target} PRE_BUILD ${_cmds}") endif() # because CMake PRE_BUILD command does not support dependencies, # we check dependencies explicity in cotire script mode when the pre-build action is run add_custom_command( TARGET "${_target}" PRE_BUILD ${_cmds} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Updating target ${_target} prefix headers" VERBATIM) # make Xcode precompile the generated prefix header with ProcessPCH and ProcessPCH++ set_target_properties(${_target} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") set_target_properties(${_target} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${_prefixHeader}") elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") # for makefile based generator, we force inclusion of the prefix header for all target source files # if this is a single-language target without any excluded files if (_wholeTarget) set (_language "${_languages}") # for Visual Studio and Intel, precompiled header inclusion is always done on the source file level # see cotire_setup_pch_file_inclusion if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) if (_prefixFile) get_property(_pchFile TARGET ${_target} PROPERTY COTIRE_${_language}_PRECOMPILED_HEADER) set (_options COMPILE_OPTIONS) cotire_add_prefix_pch_inclusion_flags( "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" "${_prefixFile}" "${_pchFile}" _options) set_property(TARGET ${_target} APPEND PROPERTY ${_options}) endif() endif() endif() endif() endfunction() function (cotire_setup_unity_generation_commands _language _target _targetScript _targetConfigScript _unityFiles _cmdsVar) set (_dependencySources "") cotire_get_unity_source_dependencies(${_language} ${_target} _dependencySources ${ARGN}) foreach (_unityFile ${_unityFiles}) set_property (SOURCE "${_unityFile}" PROPERTY GENERATED TRUE) # set up compiled unity source dependencies via OBJECT_DEPENDS # this ensures that missing source files are generated before the unity file is compiled if (COTIRE_DEBUG AND _dependencySources) message (STATUS "${_unityFile} OBJECT_DEPENDS ${_dependencySources}") endif() if (_dependencySources) # the OBJECT_DEPENDS property requires a list of full paths set (_objectDependsPaths "") foreach (_sourceFile ${_dependencySources}) get_source_file_property(_sourceLocation "${_sourceFile}" LOCATION) list (APPEND _objectDependsPaths "${_sourceLocation}") endforeach() set_property (SOURCE "${_unityFile}" PROPERTY OBJECT_DEPENDS ${_objectDependsPaths}) endif() if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") # unity file compilation results in potentially huge object file, thus use /bigobj by default unter MSVC and Windows Intel set_property (SOURCE "${_unityFile}" APPEND_STRING PROPERTY COMPILE_FLAGS "/bigobj") endif() cotire_set_cmd_to_prologue(_unityCmd) list (APPEND _unityCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "unity" "${_targetConfigScript}" "${_unityFile}") if (CMAKE_VERSION VERSION_LESS "3.1.0") set (_unityCmdDepends "${_targetScript}") else() # CMake 3.1.0 supports generator expressions in arguments to DEPENDS set (_unityCmdDepends "${_targetConfigScript}") endif() if (MSVC_IDE) file (TO_NATIVE_PATH "${_unityFile}" _unityFileLogPath) else() file (RELATIVE_PATH _unityFileLogPath "${CMAKE_BINARY_DIR}" "${_unityFile}") endif() if (COTIRE_DEBUG) message (STATUS "add_custom_command: OUTPUT ${_unityFile} COMMAND ${_unityCmd} DEPENDS ${_unityCmdDepends}") endif() add_custom_command( OUTPUT "${_unityFile}" COMMAND ${_unityCmd} DEPENDS ${_unityCmdDepends} COMMENT "Generating ${_language} unity source ${_unityFileLogPath}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM) list (APPEND ${_cmdsVar} COMMAND ${_unityCmd}) endforeach() set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) endfunction() function (cotire_setup_prefix_generation_command _language _target _targetScript _prefixFile _unityFiles _cmdsVar) set (_sourceFiles ${ARGN}) set (_dependencySources "") cotire_get_prefix_header_dependencies(${_language} ${_target} _dependencySources ${_sourceFiles}) cotire_set_cmd_to_prologue(_prefixCmd) list (APPEND _prefixCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "prefix" "${_targetScript}" "${_prefixFile}" ${_unityFiles}) set_property (SOURCE "${_prefixFile}" PROPERTY GENERATED TRUE) if (COTIRE_DEBUG) message (STATUS "add_custom_command: OUTPUT ${_prefixFile} COMMAND ${_prefixCmd} DEPENDS ${_unityFile} ${_dependencySources}") endif() if (MSVC_IDE) file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileLogPath) else() file (RELATIVE_PATH _prefixFileLogPath "${CMAKE_BINARY_DIR}" "${_prefixFile}") endif() get_filename_component(_prefixFileExt "${_prefixFile}" EXT) if (_prefixFileExt MATCHES "^\\.c") set (_comment "Generating ${_language} prefix source ${_prefixFileLogPath}") else() set (_comment "Generating ${_language} prefix header ${_prefixFileLogPath}") endif() # prevent pre-processing errors upon generating the prefix header when a target's generated include file does not yet exist # we do not add a file-level dependency for the target's generated files though, because we only want to depend on their existence # thus we make the prefix header generation depend on a custom helper target which triggers the generation of the files set (_preTargetName "${_target}${COTIRE_PCH_TARGET_SUFFIX}_pre") if (TARGET ${_preTargetName}) # custom helper target has already been generated while processing a different language list (APPEND _dependencySources ${_preTargetName}) else() get_target_property(_targetSourceFiles ${_target} SOURCES) cotire_get_objects_with_property_on(_generatedSources GENERATED SOURCE ${_targetSourceFiles}) if (_generatedSources) add_custom_target("${_preTargetName}" DEPENDS ${_generatedSources}) cotire_init_target("${_preTargetName}") list (APPEND _dependencySources ${_preTargetName}) endif() endif() add_custom_command( OUTPUT "${_prefixFile}" "${_prefixFile}.log" COMMAND ${_prefixCmd} DEPENDS ${_unityFiles} ${_dependencySources} COMMENT "${_comment}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM) list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd}) set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) endfunction() function (cotire_setup_prefix_generation_from_unity_command _language _target _targetScript _prefixFile _unityFiles _cmdsVar) set (_sourceFiles ${ARGN}) if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") # GNU and Clang require indirect compilation of the prefix header to make them honor the system_header pragma cotire_prefix_header_to_source_file_path(${_language} "${_prefixFile}" _prefixSourceFile) else() set (_prefixSourceFile "${_prefixFile}") endif() cotire_setup_prefix_generation_command( ${_language} ${_target} "${_targetScript}" "${_prefixSourceFile}" "${_unityFiles}" ${_cmdsVar} ${_sourceFiles}) if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") # set up generation of a prefix source file which includes the prefix header cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixFile}" _cmds ${_prefixSourceFile}) endif() set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) endfunction() function (cotire_setup_prefix_generation_from_provided_command _language _target _targetScript _prefixFile _cmdsVar) set (_prefixHeaderFiles ${ARGN}) if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") # GNU and Clang require indirect compilation of the prefix header to make them honor the system_header pragma cotire_prefix_header_to_source_file_path(${_language} "${_prefixFile}" _prefixSourceFile) else() set (_prefixSourceFile "${_prefixFile}") endif() cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixSourceFile}" _cmds ${_prefixHeaderFiles}) if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") # set up generation of a prefix source file which includes the prefix header cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixFile}" _cmds ${_prefixSourceFile}) endif() set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) endfunction() function (cotire_init_cotire_target_properties _target) get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER TRUE) endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD TRUE) endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ADD_CLEAN SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_ADD_CLEAN FALSE) endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH "${CMAKE_SOURCE_DIR}") cotire_check_is_path_relative_to("${CMAKE_BINARY_DIR}" _isRelative "${CMAKE_SOURCE_DIR}") if (NOT _isRelative) set_property(TARGET ${_target} APPEND PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH "${CMAKE_BINARY_DIR}") endif() endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PATH SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PATH "") endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH "") endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_PRE_UNDEFS SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_PRE_UNDEFS "") endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_POST_UNDEFS SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_POST_UNDEFS "") endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_LINK_LIBRARIES_INIT SET) if (NOT _isSet) set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_LINK_LIBRARIES_INIT "COPY_UNITY") endif() get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES SET) if (NOT _isSet) if (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES) set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES "${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES}") else() set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES "") endif() endif() endfunction() function (cotire_make_target_message _target _languages _disableMsg _targetMsgVar) get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) string (REPLACE ";" " " _languagesStr "${_languages}") math (EXPR _numberOfExcludedFiles "${ARGC} - 4") if (_numberOfExcludedFiles EQUAL 0) set (_excludedStr "") elseif (COTIRE_VERBOSE OR _numberOfExcludedFiles LESS 4) string (REPLACE ";" ", " _excludedStr "excluding ${ARGN}") else() set (_excludedStr "excluding ${_numberOfExcludedFiles} files") endif() set (_targetMsg "") if (NOT _languages) set (_targetMsg "Target ${_target} cannot be cotired.") if (_disableMsg) set (_targetMsg "${_targetMsg} ${_disableMsg}") endif() elseif (NOT _targetUsePCH AND NOT _targetAddSCU) set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build and precompiled header.") if (_disableMsg) set (_targetMsg "${_targetMsg} ${_disableMsg}") endif() elseif (NOT _targetUsePCH) if (_excludedStr) set (_targetMsg "${_languagesStr} target ${_target} cotired without precompiled header ${_excludedStr}.") else() set (_targetMsg "${_languagesStr} target ${_target} cotired without precompiled header.") endif() if (_disableMsg) set (_targetMsg "${_targetMsg} ${_disableMsg}") endif() elseif (NOT _targetAddSCU) if (_excludedStr) set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build ${_excludedStr}.") else() set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build.") endif() else() if (_excludedStr) set (_targetMsg "${_languagesStr} target ${_target} cotired ${_excludedStr}.") else() set (_targetMsg "${_languagesStr} target ${_target} cotired.") endif() endif() set (${_targetMsgVar} "${_targetMsg}" PARENT_SCOPE) endfunction() function (cotire_choose_target_languages _target _targetLanguagesVar _wholeTargetVar) set (_languages ${ARGN}) set (_allSourceFiles "") set (_allExcludedSourceFiles "") set (_allCotiredSourceFiles "") set (_targetLanguages "") set (_pchEligibleTargetLanguages "") get_target_property(_targetType ${_target} TYPE) get_target_property(_targetSourceFiles ${_target} SOURCES) get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) set (_disableMsg "") foreach (_language ${_languages}) get_target_property(_prefixHeader ${_target} COTIRE_${_language}_PREFIX_HEADER) get_target_property(_unityBuildFile ${_target} COTIRE_${_language}_UNITY_SOURCE) if (_prefixHeader OR _unityBuildFile) message (STATUS "cotire: target ${_target} has already been cotired.") set (${_targetLanguagesVar} "" PARENT_SCOPE) return() endif() if (_targetUsePCH AND "${_language}" MATCHES "^C|CXX$" AND NOT "${CMAKE_${_language}_COMPILER_ID}" STREQUAL "") cotire_check_precompiled_header_support("${_language}" "${_target}" _disableMsg) if (_disableMsg) set (_targetUsePCH FALSE) endif() endif() set (_sourceFiles "") set (_excludedSources "") set (_cotiredSources "") cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) if (_sourceFiles OR _excludedSources OR _cotiredSources) list (APPEND _targetLanguages ${_language}) endif() if (_sourceFiles) list (APPEND _allSourceFiles ${_sourceFiles}) endif() list (LENGTH _sourceFiles _numberOfSources) if (NOT _numberOfSources LESS ${COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES}) list (APPEND _pchEligibleTargetLanguages ${_language}) endif() if (_excludedSources) list (APPEND _allExcludedSourceFiles ${_excludedSources}) endif() if (_cotiredSources) list (APPEND _allCotiredSourceFiles ${_cotiredSources}) endif() endforeach() set (_targetMsgLevel STATUS) if (NOT _targetLanguages) string (REPLACE ";" " or " _languagesStr "${_languages}") set (_disableMsg "No ${_languagesStr} source files.") set (_targetUsePCH FALSE) set (_targetAddSCU FALSE) endif() if (_targetUsePCH) if (_allCotiredSourceFiles) cotire_get_source_file_property_values(_cotireTargets COTIRE_TARGET ${_allCotiredSourceFiles}) list (REMOVE_DUPLICATES _cotireTargets) string (REPLACE ";" ", " _cotireTargetsStr "${_cotireTargets}") set (_disableMsg "Target sources already include a precompiled header for target(s) ${_cotireTargets}.") set (_disableMsg "${_disableMsg} Set target property COTIRE_ENABLE_PRECOMPILED_HEADER to FALSE for targets ${_target},") set (_disableMsg "${_disableMsg} ${_cotireTargetsStr} to get a workable build system.") set (_targetMsgLevel SEND_ERROR) set (_targetUsePCH FALSE) elseif (NOT _pchEligibleTargetLanguages) set (_disableMsg "Too few applicable sources.") set (_targetUsePCH FALSE) elseif (XCODE AND _allExcludedSourceFiles) # for Xcode, we cannot apply the precompiled header to individual sources, only to the whole target set (_disableMsg "Exclusion of source files not supported for generator Xcode.") set (_targetUsePCH FALSE) elseif (XCODE AND "${_targetType}" STREQUAL "OBJECT_LIBRARY") # for Xcode, we cannot apply the required PRE_BUILD action to generate the prefix header to an OBJECT_LIBRARY target set (_disableMsg "Required PRE_BUILD action not supported for OBJECT_LIBRARY targets for generator Xcode.") set (_targetUsePCH FALSE) endif() endif() set_property(TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER ${_targetUsePCH}) set_property(TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD ${_targetAddSCU}) cotire_make_target_message(${_target} "${_targetLanguages}" "${_disableMsg}" _targetMsg ${_allExcludedSourceFiles}) if (_targetMsg) if (NOT DEFINED COTIREMSG_${_target}) set (COTIREMSG_${_target} "") endif() if (COTIRE_VERBOSE OR NOT "${_targetMsgLevel}" STREQUAL "STATUS" OR NOT "${COTIREMSG_${_target}}" STREQUAL "${_targetMsg}") # cache message to avoid redundant messages on re-configure set (COTIREMSG_${_target} "${_targetMsg}" CACHE INTERNAL "${_target} cotire message.") message (${_targetMsgLevel} "${_targetMsg}") endif() endif() list (LENGTH _targetLanguages _numberOfLanguages) if (_numberOfLanguages GREATER 1 OR _allExcludedSourceFiles) set (${_wholeTargetVar} FALSE PARENT_SCOPE) else() set (${_wholeTargetVar} TRUE PARENT_SCOPE) endif() set (${_targetLanguagesVar} ${_targetLanguages} PARENT_SCOPE) endfunction() function (cotire_compute_unity_max_number_of_includes _target _maxIncludesVar) set (_sourceFiles ${ARGN}) get_target_property(_maxIncludes ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES) if (_maxIncludes MATCHES "(-j|--parallel|--jobs) ?([0-9]*)") set (_numberOfThreads "${CMAKE_MATCH_2}") if (NOT _numberOfThreads) # use all available cores ProcessorCount(_numberOfThreads) endif() list (LENGTH _sourceFiles _numberOfSources) math (EXPR _maxIncludes "(${_numberOfSources} + ${_numberOfThreads} - 1) / ${_numberOfThreads}") elseif (NOT _maxIncludes MATCHES "[0-9]+") set (_maxIncludes 0) endif() if (COTIRE_DEBUG) message (STATUS "${_target} unity source max includes: ${_maxIncludes}") endif() set (${_maxIncludesVar} ${_maxIncludes} PARENT_SCOPE) endfunction() function (cotire_process_target_language _language _configurations _target _wholeTarget _cmdsVar) set (${_cmdsVar} "" PARENT_SCOPE) get_target_property(_targetSourceFiles ${_target} SOURCES) set (_sourceFiles "") set (_excludedSources "") set (_cotiredSources "") cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) if (NOT _sourceFiles AND NOT _cotiredSources) return() endif() set (_cmds "") # check for user provided unity source file list get_property(_unitySourceFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE_INIT) if (NOT _unitySourceFiles) set (_unitySourceFiles ${_sourceFiles} ${_cotiredSources}) endif() cotire_generate_target_script( ${_language} "${_configurations}" ${_target} _targetScript _targetConfigScript ${_unitySourceFiles}) # set up unity files for parallel compilation cotire_compute_unity_max_number_of_includes(${_target} _maxIncludes ${_unitySourceFiles}) cotire_make_unity_source_file_paths(${_language} ${_target} ${_maxIncludes} _unityFiles ${_unitySourceFiles}) list (LENGTH _unityFiles _numberOfUnityFiles) if (_numberOfUnityFiles EQUAL 0) return() elseif (_numberOfUnityFiles GREATER 1) cotire_setup_unity_generation_commands( ${_language} ${_target} "${_targetScript}" "${_targetConfigScript}" "${_unityFiles}" _cmds ${_unitySourceFiles}) endif() # set up single unity file for prefix header generation cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFile) cotire_setup_unity_generation_commands( ${_language} ${_target} "${_targetScript}" "${_targetConfigScript}" "${_unityFile}" _cmds ${_unitySourceFiles}) cotire_make_prefix_file_path(${_language} ${_target} _prefixFile) # set up prefix header if (_prefixFile) # check for user provided prefix header files get_property(_prefixHeaderFiles TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT) if (_prefixHeaderFiles) cotire_setup_prefix_generation_from_provided_command( ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" _cmds ${_prefixHeaderFiles}) else() cotire_setup_prefix_generation_from_unity_command( ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" "${_unityFile}" _cmds ${_unitySourceFiles}) endif() # check if selected language has enough sources at all list (LENGTH _sourceFiles _numberOfSources) if (_numberOfSources LESS ${COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES}) set (_targetUsePCH FALSE) else() get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) endif() if (_targetUsePCH) cotire_make_pch_file_path(${_language} ${_target} _pchFile) if (_pchFile) # first file in _sourceFiles is passed as the host file cotire_setup_pch_file_compilation( ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" "${_pchFile}" ${_sourceFiles}) cotire_setup_pch_file_inclusion( ${_language} ${_target} ${_wholeTarget} "${_prefixFile}" "${_pchFile}" ${_sourceFiles}) endif() elseif (_prefixHeaderFiles) # user provided prefix header must be included unconditionally cotire_setup_prefix_file_inclusion(${_language} ${_target} "${_prefixFile}" ${_sourceFiles}) endif() endif() # mark target as cotired for language set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE "${_unityFiles}") if (_prefixFile) set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER "${_prefixFile}") if (_targetUsePCH AND _pchFile) set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_PRECOMPILED_HEADER "${_pchFile}") endif() endif() set (${_cmdsVar} ${_cmds} PARENT_SCOPE) endfunction() function (cotire_setup_clean_target _target) set (_cleanTargetName "${_target}${COTIRE_CLEAN_TARGET_SUFFIX}") if (NOT TARGET "${_cleanTargetName}") cotire_set_cmd_to_prologue(_cmds) get_filename_component(_outputDir "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" ABSOLUTE) list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "cleanup" "${_outputDir}" "${COTIRE_INTDIR}" "${_target}") add_custom_target(${_cleanTargetName} COMMAND ${_cmds} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Cleaning up target ${_target} cotire generated files" VERBATIM) cotire_init_target("${_cleanTargetName}") endif() endfunction() function (cotire_setup_pch_target _languages _configurations _target) if ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") # for makefile based generators, we add a custom target to trigger the generation of the cotire related files set (_dependsFiles "") foreach (_language ${_languages}) set (_props COTIRE_${_language}_PREFIX_HEADER COTIRE_${_language}_UNITY_SOURCE) if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") # Visual Studio and Intel only create precompiled header as a side effect list (INSERT _props 0 COTIRE_${_language}_PRECOMPILED_HEADER) endif() cotire_get_first_set_property_value(_dependsFile TARGET ${_target} ${_props}) if (_dependsFile) list (APPEND _dependsFiles "${_dependsFile}") endif() endforeach() if (_dependsFiles) set (_pchTargetName "${_target}${COTIRE_PCH_TARGET_SUFFIX}") add_custom_target("${_pchTargetName}" DEPENDS ${_dependsFiles}) cotire_init_target("${_pchTargetName}") cotire_add_to_pch_all_target(${_pchTargetName}) endif() else() # for other generators, we add the "clean all" target to clean up the precompiled header cotire_setup_clean_all_target() endif() endfunction() function (cotire_collect_unity_target_sources _target _languages _unityTargetSourcesVar) get_target_property(_targetSourceFiles ${_target} SOURCES) set (_unityTargetSources ${_targetSourceFiles}) foreach (_language ${_languages}) get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE) if (_unityFiles) # remove source files that are included in the unity source set (_sourceFiles "") set (_excludedSources "") set (_cotiredSources "") cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) if (_sourceFiles OR _cotiredSources) list (REMOVE_ITEM _unityTargetSources ${_sourceFiles} ${_cotiredSources}) endif() # add unity source files instead list (APPEND _unityTargetSources ${_unityFiles}) endif() endforeach() set (${_unityTargetSourcesVar} ${_unityTargetSources} PARENT_SCOPE) endfunction() function (cotire_setup_unity_target_pch_usage _languages _target) foreach (_language ${_languages}) get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE) if (_unityFiles) get_property(_userPrefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT) get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) if (_userPrefixFile AND _prefixFile) # user provided prefix header must be included unconditionally by unity sources cotire_setup_prefix_file_inclusion(${_language} ${_target} "${_prefixFile}" ${_unityFiles}) endif() endif() endforeach() endfunction() function (cotire_setup_unity_build_target _languages _configurations _target) get_target_property(_unityTargetName ${_target} COTIRE_UNITY_TARGET_NAME) if (NOT _unityTargetName) set (_unityTargetName "${_target}${COTIRE_UNITY_BUILD_TARGET_SUFFIX}") endif() # determine unity target sub type get_target_property(_targetType ${_target} TYPE) if ("${_targetType}" STREQUAL "EXECUTABLE") set (_unityTargetSubType "") elseif (_targetType MATCHES "(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") set (_unityTargetSubType "${CMAKE_MATCH_1}") else() message (WARNING "cotire: target ${_target} has unknown target type ${_targetType}.") return() endif() # determine unity target sources set (_unityTargetSources "") cotire_collect_unity_target_sources(${_target} "${_languages}" _unityTargetSources) # handle automatic Qt processing get_target_property(_targetAutoMoc ${_target} AUTOMOC) get_target_property(_targetAutoUic ${_target} AUTOUIC) get_target_property(_targetAutoRcc ${_target} AUTORCC) if (_targetAutoMoc OR _targetAutoUic OR _targetAutoRcc) # if the original target sources are subject to CMake's automatic Qt processing, # also include implicitly generated _automoc.cpp file list (APPEND _unityTargetSources "${_target}_automoc.cpp") set_property (SOURCE "${_target}_automoc.cpp" PROPERTY GENERATED TRUE) endif() # prevent AUTOMOC, AUTOUIC and AUTORCC properties from being set when the unity target is created set (CMAKE_AUTOMOC OFF) set (CMAKE_AUTOUIC OFF) set (CMAKE_AUTORCC OFF) if (COTIRE_DEBUG) message (STATUS "add target ${_targetType} ${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}") endif() # generate unity target if ("${_targetType}" STREQUAL "EXECUTABLE") add_executable(${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}) else() add_library(${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}) endif() if (_targetAutoMoc OR _targetAutoUic OR _targetAutoRcc) # depend on the original target's implicity generated _automoc target add_dependencies(${_unityTargetName} ${_target}_automoc) endif() # copy output location properties set (_outputDirProperties ARCHIVE_OUTPUT_DIRECTORY ARCHIVE_OUTPUT_DIRECTORY_ LIBRARY_OUTPUT_DIRECTORY LIBRARY_OUTPUT_DIRECTORY_ RUNTIME_OUTPUT_DIRECTORY RUNTIME_OUTPUT_DIRECTORY_) if (COTIRE_UNITY_OUTPUT_DIRECTORY) set (_setDefaultOutputDir TRUE) if (IS_ABSOLUTE "${COTIRE_UNITY_OUTPUT_DIRECTORY}") set (_outputDir "${COTIRE_UNITY_OUTPUT_DIRECTORY}") else() # append relative COTIRE_UNITY_OUTPUT_DIRECTORY to target's actual output directory cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} ${_outputDirProperties}) cotire_resolve_config_properites("${_configurations}" _properties ${_outputDirProperties}) foreach (_property ${_properties}) get_property(_outputDir TARGET ${_target} PROPERTY ${_property}) if (_outputDir) get_filename_component(_outputDir "${_outputDir}/${COTIRE_UNITY_OUTPUT_DIRECTORY}" ABSOLUTE) set_property(TARGET ${_unityTargetName} PROPERTY ${_property} "${_outputDir}") set (_setDefaultOutputDir FALSE) endif() endforeach() if (_setDefaultOutputDir) get_filename_component(_outputDir "${CMAKE_CURRENT_BINARY_DIR}/${COTIRE_UNITY_OUTPUT_DIRECTORY}" ABSOLUTE) endif() endif() if (_setDefaultOutputDir) set_target_properties(${_unityTargetName} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${_outputDir}" LIBRARY_OUTPUT_DIRECTORY "${_outputDir}" RUNTIME_OUTPUT_DIRECTORY "${_outputDir}") endif() else() cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} ${_outputDirProperties}) endif() # copy output name cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} ARCHIVE_OUTPUT_NAME ARCHIVE_OUTPUT_NAME_ LIBRARY_OUTPUT_NAME LIBRARY_OUTPUT_NAME_ OUTPUT_NAME OUTPUT_NAME_ RUNTIME_OUTPUT_NAME RUNTIME_OUTPUT_NAME_ PREFIX _POSTFIX SUFFIX IMPORT_PREFIX IMPORT_SUFFIX) # copy compile stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} COMPILE_DEFINITIONS COMPILE_DEFINITIONS_ COMPILE_FLAGS COMPILE_OPTIONS Fortran_FORMAT Fortran_MODULE_DIRECTORY INCLUDE_DIRECTORIES INTERPROCEDURAL_OPTIMIZATION INTERPROCEDURAL_OPTIMIZATION_ POSITION_INDEPENDENT_CODE C_COMPILER_LAUNCHER CXX_COMPILER_LAUNCHER C_INCLUDE_WHAT_YOU_USE CXX_INCLUDE_WHAT_YOU_USE C_VISIBILITY_PRESET CXX_VISIBILITY_PRESET VISIBILITY_INLINES_HIDDEN) # copy compile features cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} C_EXTENSIONS C_STANDARD C_STANDARD_REQUIRED CXX_EXTENSIONS CXX_STANDARD CXX_STANDARD_REQUIRED COMPILE_FEATURES) # copy interface stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} COMPATIBLE_INTERFACE_BOOL COMPATIBLE_INTERFACE_NUMBER_MAX COMPATIBLE_INTERFACE_NUMBER_MIN COMPATIBLE_INTERFACE_STRING INTERFACE_COMPILE_DEFINITIONS INTERFACE_COMPILE_FEATURES INTERFACE_COMPILE_OPTIONS INTERFACE_INCLUDE_DIRECTORIES INTERFACE_SOURCES INTERFACE_POSITION_INDEPENDENT_CODE INTERFACE_SYSTEM_INCLUDE_DIRECTORIES INTERFACE_AUTOUIC_OPTIONS NO_SYSTEM_FROM_IMPORTED) # copy link stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} BUILD_WITH_INSTALL_RPATH INSTALL_RPATH INSTALL_RPATH_USE_LINK_PATH SKIP_BUILD_RPATH LINKER_LANGUAGE LINK_DEPENDS LINK_DEPENDS_NO_SHARED LINK_FLAGS LINK_FLAGS_ LINK_INTERFACE_LIBRARIES LINK_INTERFACE_LIBRARIES_ LINK_INTERFACE_MULTIPLICITY LINK_INTERFACE_MULTIPLICITY_ LINK_SEARCH_START_STATIC LINK_SEARCH_END_STATIC STATIC_LIBRARY_FLAGS STATIC_LIBRARY_FLAGS_ NO_SONAME SOVERSION VERSION) # copy cmake stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} IMPLICIT_DEPENDS_INCLUDE_TRANSFORM RULE_LAUNCH_COMPILE RULE_LAUNCH_CUSTOM RULE_LAUNCH_LINK) # copy Apple platform specific stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} BUNDLE BUNDLE_EXTENSION FRAMEWORK FRAMEWORK_VERSION INSTALL_NAME_DIR MACOSX_BUNDLE MACOSX_BUNDLE_INFO_PLIST MACOSX_FRAMEWORK_INFO_PLIST MACOSX_RPATH OSX_ARCHITECTURES OSX_ARCHITECTURES_ PRIVATE_HEADER PUBLIC_HEADER RESOURCE XCTEST IOS_INSTALL_COMBINED) # copy Windows platform specific stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} GNUtoMS COMPILE_PDB_NAME COMPILE_PDB_NAME_ COMPILE_PDB_OUTPUT_DIRECTORY COMPILE_PDB_OUTPUT_DIRECTORY_ PDB_NAME PDB_NAME_ PDB_OUTPUT_DIRECTORY PDB_OUTPUT_DIRECTORY_ VS_DESKTOP_EXTENSIONS_VERSION VS_DOTNET_REFERENCES VS_DOTNET_TARGET_FRAMEWORK_VERSION VS_GLOBAL_KEYWORD VS_GLOBAL_PROJECT_TYPES VS_GLOBAL_ROOTNAMESPACE VS_IOT_EXTENSIONS_VERSION VS_IOT_STARTUP_TASK VS_KEYWORD VS_MOBILE_EXTENSIONS_VERSION VS_SCC_AUXPATH VS_SCC_LOCALPATH VS_SCC_PROJECTNAME VS_SCC_PROVIDER VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION VS_WINRT_COMPONENT VS_WINRT_EXTENSIONS VS_WINRT_REFERENCES WIN32_EXECUTABLE WINDOWS_EXPORT_ALL_SYMBOLS) # copy Android platform specific stuff cotire_copy_set_properites("${_configurations}" TARGET ${_target} ${_unityTargetName} ANDROID_API ANDROID_API_MIN ANDROID_GUI ANDROID_ANT_ADDITIONAL_OPTIONS ANDROID_ARCH ANDROID_ASSETS_DIRECTORIES ANDROID_JAR_DEPENDENCIES ANDROID_JAR_DIRECTORIES ANDROID_JAVA_SOURCE_DIR ANDROID_NATIVE_LIB_DEPENDENCIES ANDROID_NATIVE_LIB_DIRECTORIES ANDROID_PROCESS_MAX ANDROID_PROGUARD ANDROID_PROGUARD_CONFIG_PATH ANDROID_SECURE_PROPS_PATH ANDROID_SKIP_ANT_STEP ANDROID_STL_TYPE) # use output name from original target get_target_property(_targetOutputName ${_unityTargetName} OUTPUT_NAME) if (NOT _targetOutputName) set_property(TARGET ${_unityTargetName} PROPERTY OUTPUT_NAME "${_target}") endif() # use export symbol from original target cotire_get_target_export_symbol("${_target}" _defineSymbol) if (_defineSymbol) set_property(TARGET ${_unityTargetName} PROPERTY DEFINE_SYMBOL "${_defineSymbol}") if ("${_targetType}" STREQUAL "EXECUTABLE") set_property(TARGET ${_unityTargetName} PROPERTY ENABLE_EXPORTS TRUE) endif() endif() cotire_init_target(${_unityTargetName}) cotire_add_to_unity_all_target(${_unityTargetName}) set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_TARGET_NAME "${_unityTargetName}") endfunction(cotire_setup_unity_build_target) function (cotire_target _target) set(_options "") set(_oneValueArgs "") set(_multiValueArgs LANGUAGES CONFIGURATIONS) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) if (NOT _option_LANGUAGES) get_property (_option_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) endif() if (NOT _option_CONFIGURATIONS) cotire_get_configuration_types(_option_CONFIGURATIONS) endif() # check if cotire can be applied to target at all cotire_is_target_supported(${_target} _isSupported) if (NOT _isSupported) get_target_property(_imported ${_target} IMPORTED) get_target_property(_targetType ${_target} TYPE) if (_imported) message (WARNING "cotire: imported ${_targetType} target ${_target} cannot be cotired.") else() message (STATUS "cotire: ${_targetType} target ${_target} cannot be cotired.") endif() return() endif() # resolve alias get_target_property(_aliasName ${_target} ALIASED_TARGET) if (_aliasName) if (COTIRE_DEBUG) message (STATUS "${_target} is an alias. Applying cotire to aliased target ${_aliasName} instead.") endif() set (_target ${_aliasName}) endif() # check if target needs to be cotired for build type # when using configuration types, the test is performed at build time cotire_init_cotire_target_properties(${_target}) if (NOT CMAKE_CONFIGURATION_TYPES) if (CMAKE_BUILD_TYPE) list (FIND _option_CONFIGURATIONS "${CMAKE_BUILD_TYPE}" _index) else() list (FIND _option_CONFIGURATIONS "None" _index) endif() if (_index EQUAL -1) if (COTIRE_DEBUG) message (STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} not cotired (${_option_CONFIGURATIONS})") endif() return() endif() endif() # when not using configuration types, immediately create cotire intermediate dir if (NOT CMAKE_CONFIGURATION_TYPES) cotire_get_intermediate_dir(_baseDir) file (MAKE_DIRECTORY "${_baseDir}") endif() # choose languages that apply to the target cotire_choose_target_languages("${_target}" _targetLanguages _wholeTarget ${_option_LANGUAGES}) if (NOT _targetLanguages) return() endif() set (_cmds "") foreach (_language ${_targetLanguages}) cotire_process_target_language("${_language}" "${_option_CONFIGURATIONS}" ${_target} ${_wholeTarget} _cmd) if (_cmd) list (APPEND _cmds ${_cmd}) endif() endforeach() get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) if (_targetAddSCU) cotire_setup_unity_build_target("${_targetLanguages}" "${_option_CONFIGURATIONS}" ${_target}) endif() get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) if (_targetUsePCH) cotire_setup_target_pch_usage("${_targetLanguages}" ${_target} ${_wholeTarget} ${_cmds}) cotire_setup_pch_target("${_targetLanguages}" "${_option_CONFIGURATIONS}" ${_target}) if (_targetAddSCU) cotire_setup_unity_target_pch_usage("${_targetLanguages}" ${_target}) endif() endif() get_target_property(_targetAddCleanTarget ${_target} COTIRE_ADD_CLEAN) if (_targetAddCleanTarget) cotire_setup_clean_target(${_target}) endif() endfunction(cotire_target) function (cotire_map_libraries _strategy _mappedLibrariesVar) set (_mappedLibraries "") foreach (_library ${ARGN}) if (_library MATCHES "^\\$$") set (_libraryName "${CMAKE_MATCH_1}") set (_linkOnly TRUE) else() set (_libraryName "${_library}") set (_linkOnly FALSE) endif() if ("${_strategy}" MATCHES "COPY_UNITY") cotire_is_target_supported(${_libraryName} _isSupported) if (_isSupported) # use target's corresponding unity target, if available get_target_property(_libraryUnityTargetName ${_libraryName} COTIRE_UNITY_TARGET_NAME) if (TARGET "${_libraryUnityTargetName}") if (_linkOnly) list (APPEND _mappedLibraries "$") else() list (APPEND _mappedLibraries "${_libraryUnityTargetName}") endif() else() list (APPEND _mappedLibraries "${_library}") endif() else() list (APPEND _mappedLibraries "${_library}") endif() else() list (APPEND _mappedLibraries "${_library}") endif() endforeach() list (REMOVE_DUPLICATES _mappedLibraries) set (${_mappedLibrariesVar} ${_mappedLibraries} PARENT_SCOPE) endfunction() function (cotire_target_link_libraries _target) cotire_is_target_supported(${_target} _isSupported) if (NOT _isSupported) return() endif() get_target_property(_unityTargetName ${_target} COTIRE_UNITY_TARGET_NAME) if (TARGET "${_unityTargetName}") get_target_property(_linkLibrariesStrategy ${_target} COTIRE_UNITY_LINK_LIBRARIES_INIT) if (COTIRE_DEBUG) message (STATUS "unity target ${_unityTargetName} link strategy: ${_linkLibrariesStrategy}") endif() if ("${_linkLibrariesStrategy}" MATCHES "^(COPY|COPY_UNITY)$") get_target_property(_linkLibraries ${_target} LINK_LIBRARIES) if (_linkLibraries) cotire_map_libraries("${_linkLibrariesStrategy}" _unityLinkLibraries ${_linkLibraries}) set_target_properties(${_unityTargetName} PROPERTIES LINK_LIBRARIES "${_unityLinkLibraries}") if (COTIRE_DEBUG) message (STATUS "unity target ${_unityTargetName} link libraries: ${_unityLinkLibraries}") endif() endif() get_target_property(_interfaceLinkLibraries ${_target} INTERFACE_LINK_LIBRARIES) if (_interfaceLinkLibraries) cotire_map_libraries("${_linkLibrariesStrategy}" _unityLinkInterfaceLibraries ${_interfaceLinkLibraries}) set_target_properties(${_unityTargetName} PROPERTIES INTERFACE_LINK_LIBRARIES "${_unityLinkInterfaceLibraries}") if (COTIRE_DEBUG) message (STATUS "unity target ${_unityTargetName} interface link libraries: ${_unityLinkInterfaceLibraries}") endif() endif() endif() endif() endfunction(cotire_target_link_libraries) function (cotire_cleanup _binaryDir _cotireIntermediateDirName _targetName) if (_targetName) file (GLOB_RECURSE _cotireFiles "${_binaryDir}/${_targetName}*.*") else() file (GLOB_RECURSE _cotireFiles "${_binaryDir}/*.*") endif() # filter files in intermediate directory set (_filesToRemove "") foreach (_file ${_cotireFiles}) get_filename_component(_dir "${_file}" DIRECTORY) get_filename_component(_dirName "${_dir}" NAME) if ("${_dirName}" STREQUAL "${_cotireIntermediateDirName}") list (APPEND _filesToRemove "${_file}") endif() endforeach() if (_filesToRemove) if (COTIRE_VERBOSE) message (STATUS "cleaning up ${_filesToRemove}") endif() file (REMOVE ${_filesToRemove}) endif() endfunction() function (cotire_init_target _targetName) if (COTIRE_TARGETS_FOLDER) set_target_properties(${_targetName} PROPERTIES FOLDER "${COTIRE_TARGETS_FOLDER}") endif() set_target_properties(${_targetName} PROPERTIES EXCLUDE_FROM_ALL TRUE) if (MSVC_IDE) set_target_properties(${_targetName} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE) endif() endfunction() function (cotire_add_to_pch_all_target _pchTargetName) set (_targetName "${COTIRE_PCH_ALL_TARGET_NAME}") if (NOT TARGET "${_targetName}") add_custom_target("${_targetName}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" VERBATIM) cotire_init_target("${_targetName}") endif() cotire_setup_clean_all_target() add_dependencies(${_targetName} ${_pchTargetName}) endfunction() function (cotire_add_to_unity_all_target _unityTargetName) set (_targetName "${COTIRE_UNITY_BUILD_ALL_TARGET_NAME}") if (NOT TARGET "${_targetName}") add_custom_target("${_targetName}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" VERBATIM) cotire_init_target("${_targetName}") endif() cotire_setup_clean_all_target() add_dependencies(${_targetName} ${_unityTargetName}) endfunction() function (cotire_setup_clean_all_target) set (_targetName "${COTIRE_CLEAN_ALL_TARGET_NAME}") if (NOT TARGET "${_targetName}") cotire_set_cmd_to_prologue(_cmds) list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "cleanup" "${CMAKE_BINARY_DIR}" "${COTIRE_INTDIR}") add_custom_target(${_targetName} COMMAND ${_cmds} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Cleaning up all cotire generated files" VERBATIM) cotire_init_target("${_targetName}") endif() endfunction() function (cotire) set(_options "") set(_oneValueArgs "") set(_multiValueArgs LANGUAGES CONFIGURATIONS) cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) set (_targets ${_option_UNPARSED_ARGUMENTS}) foreach (_target ${_targets}) if (TARGET ${_target}) cotire_target(${_target} LANGUAGES ${_option_LANGUAGES} CONFIGURATIONS ${_option_CONFIGURATIONS}) else() message (WARNING "cotire: ${_target} is not a target.") endif() endforeach() foreach (_target ${_targets}) if (TARGET ${_target}) cotire_target_link_libraries(${_target}) endif() endforeach() endfunction() if (CMAKE_SCRIPT_MODE_FILE) # cotire is being run in script mode # locate -P on command args set (COTIRE_ARGC -1) foreach (_index RANGE ${CMAKE_ARGC}) if (COTIRE_ARGC GREATER -1) set (COTIRE_ARGV${COTIRE_ARGC} "${CMAKE_ARGV${_index}}") math (EXPR COTIRE_ARGC "${COTIRE_ARGC} + 1") elseif ("${CMAKE_ARGV${_index}}" STREQUAL "-P") set (COTIRE_ARGC 0) endif() endforeach() # include target script if available if ("${COTIRE_ARGV2}" MATCHES "\\.cmake$") # the included target scripts sets up additional variables relating to the target (e.g., COTIRE_TARGET_SOURCES) include("${COTIRE_ARGV2}") endif() if (COTIRE_DEBUG) message (STATUS "${COTIRE_ARGV0} ${COTIRE_ARGV1} ${COTIRE_ARGV2} ${COTIRE_ARGV3} ${COTIRE_ARGV4} ${COTIRE_ARGV5}") endif() if (NOT COTIRE_BUILD_TYPE) set (COTIRE_BUILD_TYPE "None") endif() string (TOUPPER "${COTIRE_BUILD_TYPE}" _upperConfig) set (_includeDirs ${COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig}}) set (_systemIncludeDirs ${COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig}}) set (_compileDefinitions ${COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig}}) set (_compileFlags ${COTIRE_TARGET_COMPILE_FLAGS_${_upperConfig}}) # check if target has been cotired for actual build type COTIRE_BUILD_TYPE list (FIND COTIRE_TARGET_CONFIGURATION_TYPES "${COTIRE_BUILD_TYPE}" _index) if (_index GREATER -1) set (_sources ${COTIRE_TARGET_SOURCES}) set (_sourcesDefinitions ${COTIRE_TARGET_SOURCES_COMPILE_DEFINITIONS_${_upperConfig}}) else() if (COTIRE_DEBUG) message (STATUS "COTIRE_BUILD_TYPE=${COTIRE_BUILD_TYPE} not cotired (${COTIRE_TARGET_CONFIGURATION_TYPES})") endif() set (_sources "") set (_sourcesDefinitions "") endif() set (_targetPreUndefs ${COTIRE_TARGET_PRE_UNDEFS}) set (_targetPostUndefs ${COTIRE_TARGET_POST_UNDEFS}) set (_sourcesPreUndefs ${COTIRE_TARGET_SOURCES_PRE_UNDEFS}) set (_sourcesPostUndefs ${COTIRE_TARGET_SOURCES_POST_UNDEFS}) if ("${COTIRE_ARGV1}" STREQUAL "unity") if (XCODE) # executing pre-build action under Xcode, check dependency on target script set (_dependsOption DEPENDS "${COTIRE_ARGV2}") else() # executing custom command, no need to re-check for dependencies set (_dependsOption "") endif() cotire_select_unity_source_files("${COTIRE_ARGV3}" _sources ${_sources}) cotire_generate_unity_source( "${COTIRE_ARGV3}" ${_sources} LANGUAGE "${COTIRE_TARGET_LANGUAGE}" SOURCES_COMPILE_DEFINITIONS ${_sourcesDefinitions} PRE_UNDEFS ${_targetPreUndefs} POST_UNDEFS ${_targetPostUndefs} SOURCES_PRE_UNDEFS ${_sourcesPreUndefs} SOURCES_POST_UNDEFS ${_sourcesPostUndefs} ${_dependsOption}) elseif ("${COTIRE_ARGV1}" STREQUAL "prefix") if (XCODE) # executing pre-build action under Xcode, check dependency on unity file and prefix dependencies set (_dependsOption DEPENDS "${COTIRE_ARGV4}" ${COTIRE_TARGET_PREFIX_DEPENDS}) else() # executing custom command, no need to re-check for dependencies set (_dependsOption "") endif() set (_files "") foreach (_index RANGE 4 ${COTIRE_ARGC}) if (COTIRE_ARGV${_index}) list (APPEND _files "${COTIRE_ARGV${_index}}") endif() endforeach() cotire_generate_prefix_header( "${COTIRE_ARGV3}" ${_files} COMPILER_LAUNCHER "${COTIRE_TARGET_${COTIRE_TARGET_LANGUAGE}_COMPILER_LAUNCHER}" COMPILER_EXECUTABLE "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER}" COMPILER_ARG1 ${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ARG1} COMPILER_ID "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ID}" COMPILER_VERSION "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_VERSION}" LANGUAGE "${COTIRE_TARGET_LANGUAGE}" IGNORE_PATH "${COTIRE_TARGET_IGNORE_PATH};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH}" INCLUDE_PATH ${COTIRE_TARGET_INCLUDE_PATH} IGNORE_EXTENSIONS "${CMAKE_${COTIRE_TARGET_LANGUAGE}_SOURCE_FILE_EXTENSIONS};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS}" INCLUDE_PRIORITY_PATH ${COTIRE_TARGET_INCLUDE_PRIORITY_PATH} INCLUDE_DIRECTORIES ${_includeDirs} SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs} COMPILE_DEFINITIONS ${_compileDefinitions} COMPILE_FLAGS ${_compileFlags} ${_dependsOption}) elseif ("${COTIRE_ARGV1}" STREQUAL "precompile") set (_files "") foreach (_index RANGE 5 ${COTIRE_ARGC}) if (COTIRE_ARGV${_index}) list (APPEND _files "${COTIRE_ARGV${_index}}") endif() endforeach() cotire_precompile_prefix_header( "${COTIRE_ARGV3}" "${COTIRE_ARGV4}" "${COTIRE_ARGV5}" COMPILER_LAUNCHER "${COTIRE_TARGET_${COTIRE_TARGET_LANGUAGE}_COMPILER_LAUNCHER}" COMPILER_EXECUTABLE "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER}" COMPILER_ARG1 ${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ARG1} COMPILER_ID "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ID}" COMPILER_VERSION "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_VERSION}" LANGUAGE "${COTIRE_TARGET_LANGUAGE}" INCLUDE_DIRECTORIES ${_includeDirs} SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs} COMPILE_DEFINITIONS ${_compileDefinitions} COMPILE_FLAGS ${_compileFlags}) elseif ("${COTIRE_ARGV1}" STREQUAL "combine") if (COTIRE_TARGET_LANGUAGE) set (_combinedFile "${COTIRE_ARGV3}") set (_startIndex 4) else() set (_combinedFile "${COTIRE_ARGV2}") set (_startIndex 3) endif() set (_files "") foreach (_index RANGE ${_startIndex} ${COTIRE_ARGC}) if (COTIRE_ARGV${_index}) list (APPEND _files "${COTIRE_ARGV${_index}}") endif() endforeach() if (XCODE) # executing pre-build action under Xcode, check dependency on files to be combined set (_dependsOption DEPENDS ${_files}) else() # executing custom command, no need to re-check for dependencies set (_dependsOption "") endif() if (COTIRE_TARGET_LANGUAGE) cotire_generate_unity_source( "${_combinedFile}" ${_files} LANGUAGE "${COTIRE_TARGET_LANGUAGE}" ${_dependsOption}) else() cotire_generate_unity_source("${_combinedFile}" ${_files} ${_dependsOption}) endif() elseif ("${COTIRE_ARGV1}" STREQUAL "cleanup") cotire_cleanup("${COTIRE_ARGV2}" "${COTIRE_ARGV3}" "${COTIRE_ARGV4}") else() message (FATAL_ERROR "cotire: unknown command \"${COTIRE_ARGV1}\".") endif() else() # cotire is being run in include mode # set up all variable and property definitions if (NOT DEFINED COTIRE_DEBUG_INIT) if (DEFINED COTIRE_DEBUG) set (COTIRE_DEBUG_INIT ${COTIRE_DEBUG}) else() set (COTIRE_DEBUG_INIT FALSE) endif() endif() option (COTIRE_DEBUG "Enable cotire debugging output?" ${COTIRE_DEBUG_INIT}) if (NOT DEFINED COTIRE_VERBOSE_INIT) if (DEFINED COTIRE_VERBOSE) set (COTIRE_VERBOSE_INIT ${COTIRE_VERBOSE}) else() set (COTIRE_VERBOSE_INIT FALSE) endif() endif() option (COTIRE_VERBOSE "Enable cotire verbose output?" ${COTIRE_VERBOSE_INIT}) set (COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS "inc;inl;ipp" CACHE STRING "Ignore headers with the listed file extensions from the generated prefix header.") set (COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH "" CACHE STRING "Ignore headers from these directories when generating the prefix header.") set (COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS "m;mm" CACHE STRING "Ignore sources with the listed file extensions from the generated unity source.") set (COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES "3" CACHE STRING "Minimum number of sources in target required to enable use of precompiled header.") if (NOT DEFINED COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT) if (DEFINED COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES) set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT ${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES}) elseif ("${CMAKE_GENERATOR}" MATCHES "JOM|Ninja|Visual Studio") # enable parallelization for generators that run multiple jobs by default set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT "-j") else() set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT "0") endif() endif() set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES "${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT}" CACHE STRING "Maximum number of source files to include in a single unity source file.") if (NOT COTIRE_PREFIX_HEADER_FILENAME_SUFFIX) set (COTIRE_PREFIX_HEADER_FILENAME_SUFFIX "_prefix") endif() if (NOT COTIRE_UNITY_SOURCE_FILENAME_SUFFIX) set (COTIRE_UNITY_SOURCE_FILENAME_SUFFIX "_unity") endif() if (NOT COTIRE_INTDIR) set (COTIRE_INTDIR "cotire") endif() if (NOT COTIRE_PCH_ALL_TARGET_NAME) set (COTIRE_PCH_ALL_TARGET_NAME "all_pch") endif() if (NOT COTIRE_UNITY_BUILD_ALL_TARGET_NAME) set (COTIRE_UNITY_BUILD_ALL_TARGET_NAME "all_unity") endif() if (NOT COTIRE_CLEAN_ALL_TARGET_NAME) set (COTIRE_CLEAN_ALL_TARGET_NAME "clean_cotire") endif() if (NOT COTIRE_CLEAN_TARGET_SUFFIX) set (COTIRE_CLEAN_TARGET_SUFFIX "_clean_cotire") endif() if (NOT COTIRE_PCH_TARGET_SUFFIX) set (COTIRE_PCH_TARGET_SUFFIX "_pch") endif() if (MSVC) # MSVC default PCH memory scaling factor of 100 percent (75 MB) is too small for template heavy C++ code # use a bigger default factor of 170 percent (128 MB) if (NOT DEFINED COTIRE_PCH_MEMORY_SCALING_FACTOR) set (COTIRE_PCH_MEMORY_SCALING_FACTOR "170") endif() endif() if (NOT COTIRE_UNITY_BUILD_TARGET_SUFFIX) set (COTIRE_UNITY_BUILD_TARGET_SUFFIX "_unity") endif() if (NOT DEFINED COTIRE_TARGETS_FOLDER) set (COTIRE_TARGETS_FOLDER "cotire") endif() if (NOT DEFINED COTIRE_UNITY_OUTPUT_DIRECTORY) if ("${CMAKE_GENERATOR}" MATCHES "Ninja") # generated Ninja build files do not work if the unity target produces the same output file as the cotired target set (COTIRE_UNITY_OUTPUT_DIRECTORY "unity") else() set (COTIRE_UNITY_OUTPUT_DIRECTORY "") endif() endif() # define cotire cache variables define_property( CACHED_VARIABLE PROPERTY "COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH" BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." FULL_DOCS "The variable can be set to a semicolon separated list of include directories." "If a header file is found in one of these directories or sub-directories, it will be excluded from the generated prefix header." "If not defined, defaults to empty list." ) define_property( CACHED_VARIABLE PROPERTY "COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS" BRIEF_DOCS "Ignore includes with the listed file extensions from the generated prefix header." FULL_DOCS "The variable can be set to a semicolon separated list of file extensions." "If a header file extension matches one in the list, it will be excluded from the generated prefix header." "Includes with an extension in CMAKE__SOURCE_FILE_EXTENSIONS are always ignored." "If not defined, defaults to inc;inl;ipp." ) define_property( CACHED_VARIABLE PROPERTY "COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS" BRIEF_DOCS "Exclude sources with the listed file extensions from the generated unity source." FULL_DOCS "The variable can be set to a semicolon separated list of file extensions." "If a source file extension matches one in the list, it will be excluded from the generated unity source file." "Source files with an extension in CMAKE__IGNORE_EXTENSIONS are always excluded." "If not defined, defaults to m;mm." ) define_property( CACHED_VARIABLE PROPERTY "COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES" BRIEF_DOCS "Minimum number of sources in target required to enable use of precompiled header." FULL_DOCS "The variable can be set to an integer > 0." "If a target contains less than that number of source files, cotire will not enable the use of the precompiled header for the target." "If not defined, defaults to 3." ) define_property( CACHED_VARIABLE PROPERTY "COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES" BRIEF_DOCS "Maximum number of source files to include in a single unity source file." FULL_DOCS "This may be set to an integer >= 0." "If 0, cotire will only create a single unity source file." "If a target contains more than that number of source files, cotire will create multiple unity source files for it." "Can be set to \"-j\" to optimize the count of unity source files for the number of available processor cores." "Can be set to \"-j jobs\" to optimize the number of unity source files for the given number of simultaneous jobs." "Is used to initialize the target property COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES." "Defaults to \"-j\" for the generators Visual Studio, JOM or Ninja. Defaults to 0 otherwise." ) # define cotire directory properties define_property( DIRECTORY PROPERTY "COTIRE_ENABLE_PRECOMPILED_HEADER" BRIEF_DOCS "Modify build command of cotired targets added in this directory to make use of the generated precompiled header." FULL_DOCS "See target property COTIRE_ENABLE_PRECOMPILED_HEADER." ) define_property( DIRECTORY PROPERTY "COTIRE_ADD_UNITY_BUILD" BRIEF_DOCS "Add a new target that performs a unity build for cotired targets added in this directory." FULL_DOCS "See target property COTIRE_ADD_UNITY_BUILD." ) define_property( DIRECTORY PROPERTY "COTIRE_ADD_CLEAN" BRIEF_DOCS "Add a new target that cleans all cotire generated files for cotired targets added in this directory." FULL_DOCS "See target property COTIRE_ADD_CLEAN." ) define_property( DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_IGNORE_PATH" BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." FULL_DOCS "See target property COTIRE_PREFIX_HEADER_IGNORE_PATH." ) define_property( DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PATH" BRIEF_DOCS "Honor headers from these directories when generating the prefix header." FULL_DOCS "See target property COTIRE_PREFIX_HEADER_INCLUDE_PATH." ) define_property( DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH" BRIEF_DOCS "Header paths matching one of these directories are put at the top of the prefix header." FULL_DOCS "See target property COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH." ) define_property( DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of each source file." FULL_DOCS "See target property COTIRE_UNITY_SOURCE_PRE_UNDEFS." ) define_property( DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of each source file." FULL_DOCS "See target property COTIRE_UNITY_SOURCE_POST_UNDEFS." ) define_property( DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES" BRIEF_DOCS "Maximum number of source files to include in a single unity source file." FULL_DOCS "See target property COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES." ) define_property( DIRECTORY PROPERTY "COTIRE_UNITY_LINK_LIBRARIES_INIT" BRIEF_DOCS "Define strategy for setting up the unity target's link libraries." FULL_DOCS "See target property COTIRE_UNITY_LINK_LIBRARIES_INIT." ) # define cotire target properties define_property( TARGET PROPERTY "COTIRE_ENABLE_PRECOMPILED_HEADER" INHERITED BRIEF_DOCS "Modify this target's build command to make use of the generated precompiled header." FULL_DOCS "If this property is set to TRUE, cotire will modify the build command to make use of the generated precompiled header." "Irrespective of the value of this property, cotire will setup custom commands to generate the unity source and prefix header for the target." "For makefile based generators cotire will also set up a custom target to manually invoke the generation of the precompiled header." "The target name will be set to this target's name with the suffix _pch appended." "Inherited from directory." "Defaults to TRUE." ) define_property( TARGET PROPERTY "COTIRE_ADD_UNITY_BUILD" INHERITED BRIEF_DOCS "Add a new target that performs a unity build for this target." FULL_DOCS "If this property is set to TRUE, cotire creates a new target of the same type that uses the generated unity source file instead of the target sources." "Most of the relevant target properties will be copied from this target to the new unity build target." "Target dependencies and linked libraries have to be manually set up for the new unity build target." "The unity target name will be set to this target's name with the suffix _unity appended." "Inherited from directory." "Defaults to TRUE." ) define_property( TARGET PROPERTY "COTIRE_ADD_CLEAN" INHERITED BRIEF_DOCS "Add a new target that cleans all cotire generated files for this target." FULL_DOCS "If this property is set to TRUE, cotire creates a new target that clean all files (unity source, prefix header, precompiled header)." "The clean target name will be set to this target's name with the suffix _clean_cotire appended." "Inherited from directory." "Defaults to FALSE." ) define_property( TARGET PROPERTY "COTIRE_PREFIX_HEADER_IGNORE_PATH" INHERITED BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." FULL_DOCS "The property can be set to a list of directories." "If a header file is found in one of these directories or sub-directories, it will be excluded from the generated prefix header." "Inherited from directory." "If not set, this property is initialized to \${CMAKE_SOURCE_DIR};\${CMAKE_BINARY_DIR}." ) define_property( TARGET PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PATH" INHERITED BRIEF_DOCS "Honor headers from these directories when generating the prefix header." FULL_DOCS "The property can be set to a list of directories." "If a header file is found in one of these directories or sub-directories, it will be included in the generated prefix header." "If a header file is both selected by COTIRE_PREFIX_HEADER_IGNORE_PATH and COTIRE_PREFIX_HEADER_INCLUDE_PATH," "the option which yields the closer relative path match wins." "Inherited from directory." "If not set, this property is initialized to the empty list." ) define_property( TARGET PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH" INHERITED BRIEF_DOCS "Header paths matching one of these directories are put at the top of prefix header." FULL_DOCS "The property can be set to a list of directories." "Header file paths matching one of these directories will be inserted at the beginning of the generated prefix header." "Header files are sorted according to the order of the directories in the property." "If not set, this property is initialized to the empty list." ) define_property( TARGET PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" INHERITED BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of each target source file." FULL_DOCS "This may be set to a semicolon-separated list of preprocessor symbols." "cotire will add corresponding #undef directives to the generated unit source file before each target source file." "Inherited from directory." "Defaults to empty string." ) define_property( TARGET PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" INHERITED BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of each target source file." FULL_DOCS "This may be set to a semicolon-separated list of preprocessor symbols." "cotire will add corresponding #undef directives to the generated unit source file after each target source file." "Inherited from directory." "Defaults to empty string." ) define_property( TARGET PROPERTY "COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES" INHERITED BRIEF_DOCS "Maximum number of source files to include in a single unity source file." FULL_DOCS "This may be set to an integer > 0." "If a target contains more than that number of source files, cotire will create multiple unity build files for it." "If not set, cotire will only create a single unity source file." "Inherited from directory." "Defaults to empty." ) define_property( TARGET PROPERTY "COTIRE__UNITY_SOURCE_INIT" BRIEF_DOCS "User provided unity source file to be used instead of the automatically generated one." FULL_DOCS "If set, cotire will only add the given file(s) to the generated unity source file." "If not set, cotire will add all the target source files to the generated unity source file." "The property can be set to a user provided unity source file." "Defaults to empty." ) define_property( TARGET PROPERTY "COTIRE__PREFIX_HEADER_INIT" BRIEF_DOCS "User provided prefix header file to be used instead of the automatically generated one." FULL_DOCS "If set, cotire will add the given header file(s) to the generated prefix header file." "If not set, cotire will generate a prefix header by tracking the header files included by the unity source file." "The property can be set to a user provided prefix header file (e.g., stdafx.h)." "Defaults to empty." ) define_property( TARGET PROPERTY "COTIRE_UNITY_LINK_LIBRARIES_INIT" INHERITED BRIEF_DOCS "Define strategy for setting up unity target's link libraries." FULL_DOCS "If this property is empty or set to NONE, the generated unity target's link libraries have to be set up manually." "If this property is set to COPY, the unity target's link libraries will be copied from this target." "If this property is set to COPY_UNITY, the unity target's link libraries will be copied from this target with considering existing unity targets." "Inherited from directory." "Defaults to empty." ) define_property( TARGET PROPERTY "COTIRE__UNITY_SOURCE" BRIEF_DOCS "Read-only property. The generated unity source file(s)." FULL_DOCS "cotire sets this property to the path of the generated single computation unit source file for the target." "Defaults to empty string." ) define_property( TARGET PROPERTY "COTIRE__PREFIX_HEADER" BRIEF_DOCS "Read-only property. The generated prefix header file." FULL_DOCS "cotire sets this property to the full path of the generated language prefix header for the target." "Defaults to empty string." ) define_property( TARGET PROPERTY "COTIRE__PRECOMPILED_HEADER" BRIEF_DOCS "Read-only property. The generated precompiled header file." FULL_DOCS "cotire sets this property to the full path of the generated language precompiled header binary for the target." "Defaults to empty string." ) define_property( TARGET PROPERTY "COTIRE_UNITY_TARGET_NAME" BRIEF_DOCS "The name of the generated unity build target corresponding to this target." FULL_DOCS "This property can be set to the desired name of the unity target that will be created by cotire." "If not set, the unity target name will be set to this target's name with the suffix _unity appended." "After this target has been processed by cotire, the property is set to the actual name of the generated unity target." "Defaults to empty string." ) # define cotire source properties define_property( SOURCE PROPERTY "COTIRE_EXCLUDED" BRIEF_DOCS "Do not modify source file's build command." FULL_DOCS "If this property is set to TRUE, the source file's build command will not be modified to make use of the precompiled header." "The source file will also be excluded from the generated unity source file." "Source files that have their COMPILE_FLAGS property set will be excluded by default." "Defaults to FALSE." ) define_property( SOURCE PROPERTY "COTIRE_DEPENDENCY" BRIEF_DOCS "Add this source file to dependencies of the automatically generated prefix header file." FULL_DOCS "If this property is set to TRUE, the source file is added to dependencies of the generated prefix header file." "If the file is modified, cotire will re-generate the prefix header source upon build." "Defaults to FALSE." ) define_property( SOURCE PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of this source file." FULL_DOCS "This may be set to a semicolon-separated list of preprocessor symbols." "cotire will add corresponding #undef directives to the generated unit source file before this file is included." "Defaults to empty string." ) define_property( SOURCE PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of this source file." FULL_DOCS "This may be set to a semicolon-separated list of preprocessor symbols." "cotire will add corresponding #undef directives to the generated unit source file after this file is included." "Defaults to empty string." ) define_property( SOURCE PROPERTY "COTIRE_START_NEW_UNITY_SOURCE" BRIEF_DOCS "Start a new unity source file which includes this source file as the first one." FULL_DOCS "If this property is set to TRUE, cotire will complete the current unity file and start a new one." "The new unity source file will include this source file as the first one." "This property essentially works as a separator for unity source files." "Defaults to FALSE." ) define_property( SOURCE PROPERTY "COTIRE_TARGET" BRIEF_DOCS "Read-only property. Mark this source file as cotired for the given target." FULL_DOCS "cotire sets this property to the name of target, that the source file's build command has been altered for." "Defaults to empty string." ) message (STATUS "cotire ${COTIRE_CMAKE_MODULE_VERSION} loaded.") endif() openturns-1.9/cmake/escape_backslash_x4.cmake000066400000000000000000000003251307543307100213730ustar00rootroot00000000000000file (READ ${DOCSTRING_IN_FILE} DOCSTRING_IN_FILE_LINES) string (REGEX REPLACE "\\\\" "\\\\\\\\\\\\\\\\" DOCSTRING_FILE_LINES "${DOCSTRING_IN_FILE_LINES}") file (WRITE ${DOCSTRING_FILE} "${DOCSTRING_FILE_LINES}") openturns-1.9/cmake/unsignedlong_same_as_uint64_t.cxx000066400000000000000000000004271307543307100231520ustar00rootroot00000000000000#include template struct is_same_type; template< typename T > struct is_same_type { }; int main(int /*argc*/, const char* /*argv*/[]) { is_same_type compiles_only_if_types_are_identical; return 0; } openturns-1.9/distro/000077500000000000000000000000001307543307100147275ustar00rootroot00000000000000openturns-1.9/distro/debian/000077500000000000000000000000001307543307100161515ustar00rootroot00000000000000openturns-1.9/distro/debian/README.Debian000066400000000000000000000007271307543307100202200ustar00rootroot00000000000000openturns for Debian -------------------- * Library The OpenTURNS library used to be before 0.13.2 in /usr/lib/openturns. It is now in /usr/lib as it should be. Also All rpath info have been deleted fropm shared libraries. * OpenTURNS OpenTurns is available on sourceforge http://sourceforge.net/project/showfiles.php?group_id=198476 OpenTurns uses trac: http://trac.openturns.org/ -- Christophe Prud'homme , Sat, 6 Mar 2010 12:19:44 +0100 openturns-1.9/distro/debian/changelog000066400000000000000000000676101307543307100200350ustar00rootroot00000000000000openturns (1.9-1) experimental; urgency=low [ Julien Schueller ] * New upstream release. -- Denis Barbier Tue, 18 Apr 2017 18:14:47 +0200 openturns (1.9~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. -- Denis Barbier Mon, 03 Apr 2017 18:14:47 +0200 openturns (1.8-1) experimental; urgency=low [ Julien Schueller ] * New upstream release. -- Denis Barbier Thu, 16 Nov 2016 18:14:47 +0100 openturns (1.8~rc2-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. -- Denis Barbier Thu, 03 Nov 2016 18:14:47 +0100 openturns (1.8~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. -- Denis Barbier Thu, 30 Jun 2016 18:14:47 +0200 openturns (1.7-3) unstable; urgency=medium * Team upload. * Keep swig files only in libopenturns-dev, not also in python-openturns-dev. Closes: #826688 -- Mattia Rizzolo Tue, 21 Jun 2016 08:16:28 +0000 openturns (1.7-2) unstable; urgency=medium * Team upload. * Upload to unstable. * debian/control: Use https in Vcs-* fields. -- Mattia Rizzolo Mon, 20 Jun 2016 19:34:28 +0000 openturns (1.7-1) experimental; urgency=medium [ Julien Schueller ] * New upstream release. [ Denis Barbier ] * debian/docs: Remove ChangeLog, this file is already copied by dh_installchangelogs. -- Denis Barbier Sun, 05 Jun 2016 17:54:45 +0100 openturns (1.7~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. -- Denis Barbier Thu, 10 Dec 2015 18:14:47 +0100 openturns (1.6-1) experimental; urgency=low [ Julien Schueller ] * New upstream release. -- Denis Barbier Thu, 13 Aug 2015 18:14:47 +0200 openturns (1.6~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. -- Denis Barbier Mon, 16 Jun 2015 16:34:47 +0100 openturns (1.5-7) unstable; urgency=medium * debian/patches/randommixture-x86.patch: Fix Python tests, they are also failing on x86. -- Denis Barbier Sat, 23 May 2015 13:57:25 +0100 openturns (1.5-6) unstable; urgency=medium * debian/patches/randommixture-x86.patch: Rewrite patch, there were still failures with RandomMixture_grid3d. -- Denis Barbier Thu, 21 May 2015 20:48:55 +0100 openturns (1.5-5) unstable; urgency=medium * debian/patches/tests-fix-precision-32bits.patch: Modify test to really fix tests failures on ARM 32bits. * debian/patches/randommixture-x86.patch: New patch to fix tests failures on i386. -- Denis Barbier Wed, 20 May 2015 20:34:39 +0100 openturns (1.5-4) unstable; urgency=medium * debian/rules: add --no-diffs option to 2to3. * debian/rules: less verbose tests output. * debian/patches/tests-fix-precision-32bits.patch: New patch to avoid tests failures on 32 bits systems. -- Denis Barbier Tue, 19 May 2015 21:17:40 +0100 openturns (1.5-3) unstable; urgency=medium * Upload into unstable. * debian/control: Readd Build-Depends: gfortran to fix build failures. -- Denis Barbier Mon, 11 May 2015 21:05:11 +0100 openturns (1.5-2) experimental; urgency=medium * Merge python-openturns-dev into lib-openturns-dev. * Add a versioned dependency on swig to ensure that backports work properly. -- Denis Barbier Fri, 01 May 2015 14:27:55 +0100 openturns (1.5-1) experimental; urgency=low [ Julien Schueller ] * New upstream release. * Updated debian/patches/tests-disable-coupling_tools.patches [ Denis Barbier ] * Rename libopenturns-dbg package into libopenturns0.6-dbg. * New python3-openturns binary package. * debian/control: Bump Standards-Version to 3.9.6, no changes are needed. -- Denis Barbier Tue, 28 Apr 2015 21:46:44 +0200 openturns (1.5~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. * Add build-dependency to libhmat-oss-dev * Upstreamed libOT-gdb.py -- Denis Barbier Wed, 10 Dec 2014 10:34:47 +0100 openturns (1.4-3) experimental; urgency=medium * debian/rules: Disable again mips and mipsel builds. Mipsel failed to build, and mips did not even try. -- Denis Barbier Sat, 23 Aug 2014 00:37:17 +0200 openturns (1.4-2) experimental; urgency=medium * modify-tests-O0-i386.patch: Patch dropped; with newer gcc, t_TrapezoidalFactory_std now gives the same result on *-i386 architectures as on other. * debian/libOT-gdb.py: Make it compatible with python3. Closes: #752663 Report and patch by Matthias Klose, thanks. * debian/rules: Re-enable mips and mipsel builds. Closes: #753594 Report and patch by Dejan Latinovic, thanks. -- Denis Barbier Wed, 13 Aug 2014 10:20:28 +0200 openturns (1.4-1) experimental; urgency=low [ Julien Schueller ] * New upstream release. * tests-disable-broken-R.patch: Patch dropped, a fix has been applied upstream. * debian/control: Build Python bindings with -j1 [ Denis Barbier ] * debian/copyright: Updated. -- Denis Barbier Fri, 25 Jul 2014 18:34:34 +0200 openturns (1.4~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. * Set CMAKE_INSTALL_LIBDIR overriden by Ubuntu -- Denis Barbier Wed, 02 Jul 2014 10:34:47 +0200 openturns (1.3-2) unstable; urgency=medium * tests-disable-broken-R.patch: New patch, to disable 3 tests which fail with latest R. Closes: #743073 -- Denis Barbier Sat, 19 Apr 2014 21:40:58 +0200 openturns (1.3-1) unstable; urgency=medium [ Julien Schueller ] * New upstream release -- Denis Barbier Thu, 06 Mar 2014 22:15:54 +0100 openturns (1.3~rc3-1) experimental; urgency=medium [ Julien Schueller ] * New upstream pre-release * Add build-dependency to libboost-math-dev [ Denis Barbier ] * Add a pretty-printer for OT types in gdb -- Denis Barbier Fri, 21 Feb 2014 19:39:09 +0100 openturns (1.3~rc2-1) experimental; urgency=medium [ Julien Schueller ] * New upstream pre-release. * Upstream removes cdflib. Closes: #734855 [ Denis Barbier ] * debian/copyright: Add missing stanzas. Closes: #734856 -- Denis Barbier Tue, 21 Jan 2014 20:31:20 +0100 openturns (1.3~rc1-1) experimental; urgency=low [ Julien Schueller ] * New upstream pre-release. * Output test log on failure * Bump soname to 0.4 * Build-depends on libmuparser-dev [ Denis Barbier ] * Update libopenturns0.4.lintian-overrides -- Denis Barbier Wed, 08 Jan 2014 22:34:47 +0100 openturns (1.2-2) unstable; urgency=low * Upload into unstable * debian/rules: also set CMAKE_EXE_LINKER_FLAGS with dpkg-buildflags's output. -- Denis Barbier Fri, 09 Aug 2013 22:22:59 +0200 openturns (1.2-1) experimental; urgency=low [Julien Schueller] * New upstream version 1.2 * Drop patches merged upstream: fix-bigendian.patch remove-soname-python-module.patches * Rename debian/patches/tests-disable-distributed_python_wrapper.patch into debian/patches/tests-disable-coupling_tools.patch -- Denis Barbier Thu, 25 Jul 2013 20:06:52 +0200 openturns (1.2~rc1-2) experimental; urgency=low [ Denis Barbier ] * debian/rules: Fix FTBFS on *-i386, copied from 1.1-8. [ Julien Schueller ] * debian/patches/fix-bigendian.patch: Patch rewritten to use CMake detection of endianness. -- Denis Barbier Mon, 15 Jul 2013 20:47:24 +0200 openturns (1.2~rc1-1) experimental; urgency=low [Julien Schueller] * New upstream version 1.2rc1 * Bump soname to 0.3 * Drop patches merged upstream: add-missing-header-file.patch debian-soname.patch fix-swig-warning.patch ftbfs-bison-2.7.patch * Launch tests in parallel -- Denis Barbier Fri, 28 Jun 2013 01:51:22 +0200 openturns (1.1-9) unstable; urgency=low [ Julien Schueller ] * debian/control: All libraries listed in OPENTURNS_LIBRARIES variable into OpenTURNSConfig.cmake must be installed in order to link against OT. Let libopenturns-dev depend on libxml2-dev, liblapack-dev, libblas-dev, libtbb-dev [i386 amd64 ia64] [ Denis Barbier ] * debian/control: Replace Architecture: any by an hardcoded list of supported architectures. Openturns requires more than 1GB RAM, this caused a lot of trouble on mips* architectures. -- Denis Barbier Thu, 18 Jul 2013 19:10:04 +0200 openturns (1.1-8) unstable; urgency=low * debian/rules: Fix building source package on *-i386, there was trouble with debian/patches/modify-tests-O0-i386.patch. -- Denis Barbier Fri, 05 Jul 2013 18:06:37 +0200 openturns (1.1-7) unstable; urgency=low * debian/patches/modify-tests-O0-i386.patch: On *-i386 architectures, algocobyla.c is compiled with -O0 flag since 1.1-6; output of two tests is modified. Closes: #714915 -- Denis Barbier Thu, 04 Jul 2013 22:36:45 +0200 openturns (1.1-6) unstable; urgency=low * debian/rules: The previous change fixed C++ tests on kfreebsd-i386, but pyinstallcheck_Cobyla_nonlinear hangs. There is another hang on i386. The -fno-guess-branch-probability flag fixes the failure on kfreebsd-i386, but compile instead algocobyla.c with -O0 flag on *-i386 architectures to be safe. Closes: #714411 -- Denis Barbier Tue, 02 Jul 2013 20:08:27 +0200 openturns (1.1-5) unstable; urgency=low * debian/rules: algocobyla.c is again miscompiled with gcc 4.8.1 on kfreebsd-i386 and hurd-i386, cppcheck_TrapezoidalFactory_std and cppcheck_WhittleFactory_std hang; compile with -fno-caller-saves to avoid these problems. Closes: #714411 -- Denis Barbier Sat, 29 Jun 2013 23:50:27 +0200 openturns (1.1-4) unstable; urgency=low * Upload into unstable * Bump Standards-Version to 3.9.4, no changes are needed. -- Denis Barbier Thu, 27 Jun 2013 22:58:17 +0200 openturns (1.1-3) experimental; urgency=low * debian/rules: Adjust Python detection so that it works with multiarch and non-multiarch Python. * debian/patches/ftbfs-bison-2.7.patch: New patch, to fix build failures with newer Bison. * debian/patches/tests-disable-distributed_python_wrapper.patch: New patch, to disable distributed python wrapper tests, these tests sometimes fail in strange ways. * debian/patches/fix-swig-warning.patch: New patch, taken from upstream. Several tests are missing because of a behavior change in swig 2.0.9, fix .i files. -- Denis Barbier Thu, 30 May 2013 23:51:47 +0200 openturns (1.1-2) experimental; urgency=low [ Julien Schueller ] * debian/rules: Install CMake files into /usr/lib/cmake/openturns * debian/patches/add-missing-header-file.patch: New patch, to install missing header file WrapperCommon_extern.h [ Denis Barbier ] * debian/patches/tests-disable-timing.patch: New patch, to disable test timings. They are useless, and prevent openturns from building on Hurd. * debian/patches/remove-soname-python-module.patch: New patch, to remove SONAME from Python modules, this confuses dpkg-shlibdeps. * debian/control: Let openturns-examples explicitly depend on python. * debian/rules: Pass LDFLAGS when building shared libraries. * openturns-examples: Remove duplicates from /usr/lib/openturns/examples/. -- Denis Barbier Tue, 05 Feb 2013 01:23:41 +0100 openturns (1.1-1) experimental; urgency=low [ Denis Barbier ] * New upstream version * License has been updated to LGPL-3+ * Drop patches merged upstream: fix-dtd-search-path.patch install_cmake_files.patch kfreebsd-fix-t_WrapperFile_generic.patch * Let libopenturns-dev ship CMake files. * debian/watch: Check for tar.bz2 instead of tar.gz * debian/copyright: Convert to machine-readable format and add missing stanzas. [ Julien Schueller ] * debian/rules: Drop chmod calls, they are useless. * debian/rules: Removed useless clean override. * debian/control: Fix URL in Homepage field. -- Denis Barbier Sun, 13 Jan 2013 09:46:40 +0100 openturns (1.1~rc1-3) experimental; urgency=low * debian/patches/kfreebsd-fix-t_WrapperFile_generic.patch: New patch to fix t_WrapperFile_generic.py failure on kfreebsd. -- Denis Barbier Sun, 09 Dec 2012 21:39:44 +0100 openturns (1.1~rc1-2) experimental; urgency=low * debian/patches/disable-coupling_tools.patch: Replaced by... * debian/patches/fix-dtd-search-path.patch: Fix DTD search path to look into all wrapper directories and not only Path::GetStandardWrapperDirectory(). All tests can now run. * debian/rules: Thanks to this new patch, there is no more need to set OPENTURNS_HOME. * debian/rules: Append current value of LD_LIBRARY_PATH into CTestTestfile.cmake, this should avoid FTBFS on kfreebsd-*. -- Denis Barbier Sun, 09 Dec 2012 08:44:04 +0100 openturns (1.1~rc1-1) experimental; urgency=low * New upstream version * Drop patches merged upstream: bigendian-randomgenerator.patch cmake-configdir.patch cmake-tools.patch fix-tests-clang.patch ftbfs-4.7.patch ftbfs-clang.patch installcheck.patch test-output.patch * debian/patches/disable-coupling_tools.patch: New patch. Disable two tests which require changing LD_LIBRARY_PATH, this breaks fakeroot. * debian/rules: Set R_LIBS_SITE when running tests. * debian/rules: Now that all architectures run tests without failures, let test failures abort build. * debian/rules: Also use dpkg-buildflags to set CPPFLAGS. * debian/rules: On mips, do not build Python libraries in parallel to avoid build failures due to memory problems. * debian/control: Adjust package dependencies + Build-Depends: remove unused python-rpy2, ghostscript, graphviz. + libopenturns0.2: Demote r-other-rot from Depends into Suggests, it is needed by few files only. Ditto for ghostscript, only needed by R. + python-openturns: Drop Depends on python-rpy2, ghostscript, python-qt4; Add Suggests: python-matplotlib, python-scipy -- Denis Barbier Tue, 04 Dec 2012 19:39:48 +0100 openturns (1.0-4) unstable; urgency=low [ Denis Barbier ] * debian/patches/test-output.patch: New patch. Fix test output, some compilers print 'df(x)=' twice because exception is thrown after text is printed to stdout. * debian/patches/ftbfs-clang.patch: New patch. Allows building with the clang compiler. * debian/patches/fix-bigendian.patch: New patch. Many checks fail on some (but not all) big endian machines, it seems that not all systems define __BIG_ENDIAN__. Add some compile-time checks to determine endianness. * debian/rules: Do not ignore test results for architectures on which tests currently pass. * debian/rules: Also compile algocobyla.c with -fno-cse-follow-jumps on kfreebsd-i386 and hurd-i386, one test hangs as on i386. * debian/rules: On mipsel, do not build Python libraries in parallel to avoid build failures due to memory problems. -- Denis Barbier Fri, 15 Jun 2012 20:45:14 +0200 openturns (1.0-3) unstable; urgency=low [ Denis Barbier ] * debian/control: Fix dependency on r-other-rot, packages were not installable. * debian/patches/bigendian-randomgenerator.patch: New patch. Fix t_RandomGenerator_std unit test, it fails on PowerPC because of endianness. * debian/patches/cmake-tools.patch: New patch. Scripts openturns-config and openturns-module were broken. * Cleanup debian/patches by removing obsolete patches. Also rewrite patch headers to follow DEP3. -- Denis Barbier Sat, 19 May 2012 19:39:30 +0200 openturns (1.0-2) unstable; urgency=low [ Denis Barbier ] * debian/control: Fix dependency on tbb, it is available only on amd64, i386 and ia64. * debian/rules: Display output of failed tests to help debug failures. * debian/rules: Do not abort if tests fail; this was the behaviour when compiling with Autotools. -- Denis Barbier Thu, 17 May 2012 17:43:20 +0200 openturns (1.0-1) experimental; urgency=low [ Christophe Trophime ] * debian/rules: explicit python version in override_dh_auto_configure target * debian/copyright: fix lintian warning [ Denis Barbier ] * New upstream release (Closes: #669425). * Build with g++ 4.6, several tests fail with g++ 4.7. * debian/patches/ftbfs-4.7.patch: Patch upgraded, previous fix had been applied upstream but there is another error. * debian/patches/debian-soname.patch: New patch. Use a Debian specific SONAME (0.1), upstream does not yet take care of SONAME. Rename libopenturns0 package into libopenturns0.1. * debian/patches/no-link-python.patch: New patch. Bugfix: "python-openturns is unusable" (Closes: #670066) * debian/rules: Compile algocobyla.c with -fno-cse-follow-jumps to work around an undefined GCC bug which makes one test hang on x86. (Closes: #666782) * Do not build-depends on doxygen-latex, docbook-to-man. * Build-depends on bison, flex and bc (the latter is needed to run one test). * Move rotRpackage into a new binary package: r-other-rot, and let libopenturns0.1 depend on this package. (Closes: #662800) * Install files into versioned directories /usr/lib/openturns-1.0 and /etc/openturns-1.0 to avoid file conflicts during library transitions. * Add myself to Uploaders. [ Julien Schueller ] * Remove openturns-wrapper package, its files are now shipped by libopenturns0, libopenturns-dev and openturns-examples. * Moved dtd files to libopenturns0 * Added missing generic wrapper to libopenturns0 * Added python-openturns-dev * Added dependency to libtbb -- Denis Barbier Wed, 16 May 2012 20:03:53 +0200 openturns (0.15-3.1) unstable; urgency=low * Non-maintainer upload. * Fix "ftbfs with GCC-4.7": add patch from Denis Barbier: move declaration of streamObject before first usage. (Closes: #667315) -- gregor herrmann Sat, 21 Apr 2012 13:54:09 +0200 openturns (0.15-3) unstable; urgency=low * Team upload. (Closes: #662792). * Getting rid of unneeded *.la (Closes: #622492). * Transition to dh_python2 (Closes: #616928). * Use dh rules.tiny, enable parallel build. -- Aron Xu Mon, 26 Mar 2012 08:40:35 +0000 openturns (0.15-2) unstable; urgency=low * openturns-wrappers: install wrappers, wrapper.xml and wrapper.dtd -- Christophe Prud'homme Fri, 09 Sep 2011 06:34:05 +0200 openturns (0.15-1) unstable; urgency=low * New upstream release -- Christophe Prud'homme Tue, 30 Aug 2011 12:12:18 +0200 openturns (0.13.2-8) unstable; urgency=low * debian/control: add python-qt4 depends to python-openturns and openturns-examples now depends on python-openturns -- Christophe Prud'homme Tue, 28 Dec 2010 16:12:44 +0100 openturns (0.13.2-7) unstable; urgency=low [Christophe Prud'homme] * Bug fix: "creates a mess in sys.path by adding its own namespace", thanks to Bernd Zeimetz (Closes: #606870). * Bug fix: "Preparations for the removal of the KDE3 and Qt3 libraries", thanks to Eckhart Wörner (Closes: #604605). -- Christophe Prud'homme Tue, 28 Dec 2010 08:14:21 +0100 openturns (0.13.2-6) unstable; urgency=low [Christophe Prud'homme] * debian/rules: reduce optimization level to O1 on armel -- Christophe Prud'homme Fri, 13 Aug 2010 15:44:53 +0200 openturns (0.13.2-5) unstable; urgency=low [Christophe Prud'homme] * Bug fix: "FTBFS with Python 2.6: Could not link test program to Python.", thanks to Jakub Wilk (Closes: #586351). -- Christophe Prud'homme Sat, 19 Jun 2010 07:22:38 +0200 openturns (0.13.2-4) unstable; urgency=low * Bug fix: "ftbfs with gcc-4.5", thanks to Matthias Klose (Closes: #565081). -- Christophe Prud'homme Wed, 09 Jun 2010 21:55:51 +0200 openturns (0.13.2-3) unstable; urgency=low * Bug fix: "python-openturns must be depend on python-rpy2", thanks to Jerome Robert (Closes: #582532). -- Christophe Prud'homme Sun, 23 May 2010 10:10:14 +0200 openturns (0.13.2-2) unstable; urgency=low * Bug fix: "command not found", thanks to Jerome Robert (Closes: #573143). * Bug fix: "does not byte-compile Python files", thanks to dktrkranz@debian.org; (Closes: #566041). -- Christophe Prud'homme Sat, 13 Mar 2010 13:56:14 +0100 openturns (0.13.2-1) unstable; urgency=low * New upstream release * debian/libopenturns0.install: move lib to /usr/lib * Fixed almost all lintian warnings and errors * debian/control: update to Standard-Versions 3.8.4 (no change) * debian/patches/fix_ftbfs_on_arm_and_mips: removed, applied upstream -- Christophe Prud'homme Mon, 01 Mar 2010 13:13:47 +0100 openturns (0.13.1-4) unstable; urgency=low * debian/control: Moved openturns to Debian Science -- Christophe Prud'homme Tue, 16 Feb 2010 13:39:07 +0100 openturns (0.13.1-3) unstable; urgency=low * debian/rules: enable quilt(the patches were not applied before) * Bug fix: "Please support Renesas SH(sh4)", thanks to Nobuhiro Iwamatsu (Closes: #565120). -- Christophe Prud'homme Mon, 08 Feb 2010 19:13:55 +0100 openturns (0.13.1-2) unstable; urgency=low [Christophe Prud'homme] * debian/control: no more depending on xerces * Bug fix: "package-installs-python-pyc /usr/lib/python2.5/site-packages/openturns/__init__.pyc", thanks to Manoj Srivastava (Closes: #553479). * Bug fix: "FTBFS with python2.6", thanks to Fabrice Coutadeur (Closes: #542524). * Bug fix: "The package is empty", thanks to Jerome Robert (Closes: #548794). * debian/control: openturns-doc is now removed from control file as the documentation is now provided by upstream in a separate archive. * Bug fix: "FTBFS: XMLToolbox.cxx:207: error: 'vsnprintf' is not a member of 'std'", thanks to Nobuhiro Iwamatsu (Closes: #565118). * Bug fix: "Please support Renesas SH(sh4)", thanks to Nobuhiro Iwamatsu (Closes: #565120). -- Christophe Prud'homme Thu, 14 Jan 2010 07:34:22 +0100 openturns (0.13.1-1) unstable; urgency=low [Christophe Prud'homme] * New upstream release * Fix some lintian warnings * Fix wrongly formatted description, thanks to Gerfried Fuchs (Closes: #530594). * debian/control: updated Standard-Versions to 3.8.2 (no changes) -- Christophe Prud'homme Tue, 21 Jul 2009 10:52:57 +0200 openturns (0.13.0-2) unstable; urgency=low * Bug fix: "libboost1.35-dev", thanks to Lucas Nussbaum (Closes: #527800). * Bug fix: "Killed (program cc1plus)", thanks to Bastian Blank (Closes: #499738). * Bug fix: "FTBFS on sparc", thanks to Martin Zobel-Helas (Closes: #500999). * debian/control: -dbg in debug section now * debian/python-openturns.install: create openturns subdirectory in site-packages -- Christophe Prud'homme Sat, 09 May 2009 12:57:35 +0200 openturns (0.13.0-1) unstable; urgency=low * New upstream release + Generic wrapper (compatible with Salome). + Wrapper designer guide. + Polynomial Chaos Expansion. WARNING! Due to a mistake, this feature is only available in the C++ library and not the TUI. + Support Vector Regression. WARNING! Due to a mistake, this feature is only available in the C++ library and not the TUI. + Sensitivity Analysis (Sobol indices). + The gui module is definitely removed. A new (and simplier) GUI will be proposed later. * debian/{control,compat}: updated dh compat to 7 * debian/{control,rules}: get rid of qopenturns which was removed * debian/control: get rid on lintian warnings, Depends on ${misc:Depends} for openturns-{doc,validation} -- Christophe Prud'homme Thu, 19 Mar 2009 13:43:52 +0100 openturns (0.12.2-2) unstable; urgency=low * Bug fix: "Dynamic loading of library 'libOT.so' failed at /usr/lib/openturns ", thanks to Jerome Robert (Closes: #507162). -- Christophe Prud'homme Fri, 28 Nov 2008 18:56:36 +0100 openturns (0.12.2-1) unstable; urgency=low * New upstream release * Bug fix: "New upstream release available (0.12.2)", thanks to Jerome Robert (Closes: #506005). * Applied patch by J. Robert. * debian/control: build-depends on libxml2 -- Christophe Prud'homme Tue, 18 Nov 2008 06:32:22 +0100 openturns (0.12.1-7) unstable; urgency=low * Bug fix: "Killed (program cc1plus)", thanks to Bastian Blank (Closes: #499738). * Bug fix: "FTBFS on sparc", thanks to Martin Zobel-Helas (Closes: #500999). * debian/rules: set OT_DEBUG_LEVEL to 3 as per default -- Christophe Prud'homme Sat, 04 Oct 2008 08:42:57 +0200 openturns (0.12.1-6) unstable; urgency=low * debian/rules: Fix FTBS on hppa, sparc, arm, and armel because of __sync_fetch_and_add_4 not being available, the remedy is to use -DBOOST_SP_USE_PTHREADS * debian/rules: add --disable-debug option to configure and set the compiler flags to -g -O2 (no -Wall) -- Christophe Prud'homme Fri, 03 Oct 2008 10:55:20 +0200 openturns (0.12.1-5) unstable; urgency=low * Bug fix: "Should recommend python-rpy", thanks to Jerome Robert (Closes: #500874). * Bug fix: "Missing r-rot package", thanks to Jerome Robert (Closes: #500872). -- Christophe Prud'homme Thu, 02 Oct 2008 12:57:48 +0200 openturns (0.12.1-4) unstable; urgency=low * debian/rules: use DEB_COMPRESS_EXCLUDE to avoid zipping pdf files * Bug fix: "gzipped pdf", thanks to Jerome Robert (Closes: #499673). * debian/qopenturns.sgml: fixed warnings and errors from docbook-to-man * Bug fix: "No module named _openturns", thanks to Jerome Robert (Closes: #499668). * Bug fix: "short description should not contain 'A' by policy", thanks to Eugene V. Lyubimkin (Closes: #500427). * Bug fix: "short description should not start with a capital letter by policy", thanks to Eugene V. Lyubimkin (Closes: #500428). * Bug fix: "Duplicated documentation", thanks to Jerome Robert (Closes: #499672). -- Christophe Prud'homme Wed, 01 Oct 2008 11:06:56 +0200 openturns (0.12.1-3) unstable; urgency=low * debian/control: Fixed override disparity, python-openturns is now in section python and no more in section science * debian/rules: use -O2 instead -O3, it might help build OpenTURNS on the other arch * debian/rules: fixed typo, changed -enable-lib to --enable-lib -- Christophe Prud'homme Tue, 09 Sep 2008 14:59:04 +0200 openturns (0.12.1-2) unstable; urgency=low * debian/control: Improved package description, "the description does not explain what OpenTURNS is" thanks to Helmut Grohne (Closes: #498026). * debian/control: Fixed FTBFS, "OpenTURNS_ArchitectureGuide.tex: command not found" thanks to Kurt Roeckx (Closes: #498036). * debian/control: Improved openturns-doc, "Useless long description" tanks to Vincent Danjean (Closes: #498245) -- Christophe Prud'homme Tue, 09 Sep 2008 08:04:26 +0200 openturns (0.12.1-1) unstable; urgency=low * Initial release (Closes: #490907) -- Christophe Prud'homme Sun, 06 Jul 2008 21:39:33 +0200 openturns-1.9/distro/debian/compat000066400000000000000000000000021307543307100173470ustar00rootroot000000000000007 openturns-1.9/distro/debian/control000066400000000000000000000233241307543307100175600ustar00rootroot00000000000000Source: openturns Section: science Priority: extra Maintainer: Debian Science Maintainers Uploaders: Christophe Prud'homme , Denis Barbier Build-Depends: debhelper (>= 8), quilt, gfortran, bison, flex, cmake, bc, libmuparser-dev, libxml2-dev, liblapack-dev, libblas-dev, libboost-math-dev, libhmat-oss-dev, libnlopt-dev, libtbb-dev [i386 amd64 ia64], r-base-core, python-dev, python3-dev, swig (>= 2.0.9) Standards-Version: 3.9.6 Homepage: http://www.openturns.org/ Vcs-Browser: https://anonscm.debian.org/git/debian-science/packages/openturns.git Vcs-Git: https://anonscm.debian.org/git/debian-science/packages/openturns.git X-Python-Version: current X-Python3-Version: current Package: libopenturns0.10 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: python-openturns, r-base-core, ghostscript, r-other-rot (= ${binary:Version}) Replaces: openturns-wrapper Breaks: openturns-wrapper Description: dynamic libraries for OpenTURNS OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * define the outputs of interest and decision criteria; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides the dynamic libraries. . The library implements almost all the treatments of uncertainty that OpenTURNS can provide. It is designed to be linked against any user specific application, or with either the textual front-end (see python-openturns or python3-openturns packages). . The main function of that library is giving to specific applications all the functionalities needed to treat uncertainties in studies. Targeted users are all engineers who want to introduce the probabilistic dimension in their so far deterministic studies. Package: libopenturns-dev Section: libdevel Architecture: any Depends: ${misc:Depends}, libopenturns0.10 (= ${binary:Version}), libmuparser-dev, libxml2-dev, liblapack-dev, libblas-dev, libtbb-dev [i386 amd64 ia64], libhmat-oss-dev, libnlopt-dev Replaces: python-openturns-dev (<< 1.5-2) Breaks: python-openturns-dev (<< 1.5-2) Description: headers and development libraries for OpenTURNS OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides the OpenTURNS headers should be used if one wants to link its application against the library. Package: libopenturns0.10-dbg Section: debug Architecture: any Depends: libopenturns0.10 (= ${binary:Version}), ${misc:Depends} Description: debug symbols for OpenTURNS OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides the debug symbols of the OpenTurns libraries to help with debugging either your applications or OpenTURNS Package: python-openturns Section: python Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libopenturns0.10 (= ${binary:Version}), ${python:Depends} Provides: ${python:Provides} Suggests: python-matplotlib, python-scipy Description: Python front-end of OpenTURNS (aka TUI) OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides a textual user interface that gives access to all the functionalities provided by the OpenTURNS library. Package: python3-openturns Section: python Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libopenturns0.10 (= ${binary:Version}), ${python3:Depends} Provides: ${python3:Provides} Suggests: python3-matplotlib, python3-scipy Description: Python3 front-end of OpenTURNS (aka TUI) OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides a textual user interface with Python3 that gives access to all the functionalities provided by the OpenTURNS library. Package: python-openturns-dev Section: oldlibs Architecture: all Depends: ${misc:Depends}, libopenturns-dev Description: Python front-end of OpenTURNS (transitional package) OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This is a transitional package, python-openturns-dev has been merged into libopenturns-dev. Package: r-other-rot Section: gnu-r Architecture: any Depends: ${misc:Depends}, r-base-core Description: GNU R package of few tools needed by OpenTURNS OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides R files needed by some OpenTURNS objects. Package: openturns-examples Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-openturns (= ${binary:Version}), libopenturns-dev Replaces: openturns-wrapper Breaks: openturns-wrapper Description: examples of OpenTURNS functionalities OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package provides examples which are written either in C++ or in Python. . They are primarly used as validation tests for the whole platform but they can also be seen as tutorials for beginners. Package: openturns-validation Section: science Architecture: all Depends: ${misc:Depends} Description: validation files for OpenTURNS OpenTURNS is a powerful and generic tool to treat and quantify uncertainties in numerical simulations in design, optimization and control. It allows both sensitivity and reliability analysis studies: * defining the outputs of interest and decision criterion; * quantify and model the source of uncertainties; * propagate uncertainties and/or analyse sensitivity and * rank the sources of uncertainty . OpenTURNS is a large project with more than 300 C++ classes which uses well known and supported software such as R for the statistical methods and BLAS/LAPACK for the linear algebra. . This package includes many maple input files that validates the results and the algorithms of OpenTURNS in a mathematical sense. openturns-1.9/distro/debian/copyright000066400000000000000000000435131307543307100201120ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: OpenTURNS Upstream-Contact: users@openturns.org Source: http://switch.dl.sourceforge.net/sourceforge/openturns/ Debianized-By: Christophe Prud'homme Debianized-Date: Sun, 06 Jul 2008 18:12:15 +0200. Comment: hmat-oss authors gave written permission to link their library (GPLv3) with OpenTURNS. Files: * Copyright: Copyright (C) 2005-2013 Électricité de France (EDF), Copyright (C) 2005-2013 European Aeronautic Defence and Space company (EADS), Copyright (C) 2005-2013 Phimeca License: LGPL-3+ Files: debian/* Copyright: 2008 Christophe Prud'homme, 2012-2013 Denis Barbier License: GPL-2 Files: lib/include/pthread_win32/*.h Copyright: 2010-2013 Université Bordeaux 1, CNRS License: LGPL-2.1+ Files: lib/src/Base/Algo/kissfft.hh Copyright: 2003-2010 Mark Borgerding License: BSD-3-clause Files: lib/src/Base/Diff/Ev3/* Copyright: 2003-2006 Leo Liberti License: CPL-1.0 Files: lib/src/Base/Func/SpecFunc/Faddeeva.* Copyright: 2012 Massachusetts Institute of Technology License: Expat Files: lib/src/Base/Optim/Cobyla/algocobyla.* Copyright: 1992 Michael J. D. Powell (M.J.D.Powell@damtp.cam.ac.uk), 2004 Jean-Sebastien Roy (js@jeannot.org) License: Expat Files: lib/src/Base/Optim/TNC/algotnc.* Copyright: 2002-2005 Jean-Sebastien Roy (js@jeannot.org) License: Expat Files: lib/src/Base/Stat/dsfmt.* Copyright: 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima University, 2007 Takashi Takekawa License: BSD-3-clause Files: lib/src/Base/Stat/kendall.* Copyright: 2010 David Simcha License: BSL-1.0 Files: lib/src/Uncertainty/Distribution/KolmogorovSmirnovDist.* Copyright: 2010 Université de Montréal, Richard Simard and Pierre L'Ecuyer License: GPL-3 Comment: Author gave written permission to embed these files into OpenTURNS, see lib/COPYING.KolmogorovSmirnovDist License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSL-1.0 Boost Software License - Version 1.0 - August 17th, 2003 . Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: . The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: CPL-1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. . 1. DEFINITIONS . "Contribution" means: . a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and . b) in the case of each subsequent Contributor: . i) changes to the Program, and . ii) additions to the Program; . where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. . "Contributor" means any person or entity that distributes the Program. . "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. . "Program" means the Contributions distributed in accordance with this Agreement. . "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. . 2. GRANT OF RIGHTS . a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. . b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. . c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. . d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. . 3. REQUIREMENTS . A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: . a) it complies with the terms and conditions of this Agreement; and . b) its license agreement: . i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; . ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; . iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and . iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. . When the Program is made available in source code form: . a) it must be made available under this Agreement; and . b) a copy of this Agreement must be included with each copy of the Program. . Contributors may not remove or alter any copyright notices contained within the Program. . Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. . 4. COMMERCIAL DISTRIBUTION . Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. . For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. . 5. NO WARRANTY . EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. . 6. DISCLAIMER OF LIABILITY . EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. . 7. GENERAL . If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. . If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. . All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. . Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. . This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: LGPL-2.1+ On Debian systems, the full text of the GNU Lesser General Public License version 2.1 can be found in the file `/usr/share/common-licenses/LGPL-2.1'. License: LGPL-3+ On Debian systems, the full text of the GNU Lesser General Public License version 3 can be found in the file `/usr/share/common-licenses/LGPL-3'. License: GPL-2 On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. License: GPL-3 On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-3'. openturns-1.9/distro/debian/docs000066400000000000000000000000201307543307100170140ustar00rootroot00000000000000README.rst TODO openturns-1.9/distro/debian/libopenturns-dev.install000066400000000000000000000001611307543307100230370ustar00rootroot00000000000000usr/bin/* usr/lib/libOT.so usr/lib/cmake/openturns/*.cmake usr/include/openturns/*.h* usr/include/openturns/swig openturns-1.9/distro/debian/libopenturns0.10-dbg.install000066400000000000000000000000561307543307100233170ustar00rootroot00000000000000usr/share/gdb/auto-load/usr/lib/libOT*-gdb.py openturns-1.9/distro/debian/libopenturns0.10.install000066400000000000000000000000461307543307100225640ustar00rootroot00000000000000usr/lib/libOT.so.0* etc/openturns-1.* openturns-1.9/distro/debian/libopenturns0.10.lintian-overrides000066400000000000000000000001051307543307100245500ustar00rootroot00000000000000libopenturns0.10 binary: package-name-doesnt-match-sonames libOT0.10 openturns-1.9/distro/debian/openturns-doc.docs000066400000000000000000000000461307543307100216230ustar00rootroot00000000000000usr/share/doc/openturns/* README TODO openturns-1.9/distro/debian/openturns-examples.install000066400000000000000000000000371307543307100234120ustar00rootroot00000000000000usr/share/openturns/examples/* openturns-1.9/distro/debian/openturns-validation.install000066400000000000000000000000421307543307100237220ustar00rootroot00000000000000usr/share/openturns/validation/* openturns-1.9/distro/debian/openturns.doc-base000066400000000000000000000004361307543307100216100ustar00rootroot00000000000000Document: openturns Title: Debian openturns Manual Author: OpenTurns Consortium Abstract: This manual describes what openturns is and how it can be used to manage online manuals on Debian systems. Section: Science/Engineering Format: PDF Files: /usr/share/doc/openturns-doc/*.pdf openturns-1.9/distro/debian/patches/000077500000000000000000000000001307543307100176005ustar00rootroot00000000000000openturns-1.9/distro/debian/patches/modify-tests-O0-i386.patch000066400000000000000000000047421307543307100242220ustar00rootroot00000000000000Description: Modify output of TrapezoidalFactory tests. There is a bug in GCC 4.8 on *-i386 architectures, several tests hang. In order to avoid these problems, algocobyla.c is compiled without optimization; but those tests must be modified. This patch is applied only on *-i386 architectures. Author: Denis Barbier Origin: Debian Forwarded: no Last-Update: 2013-07-02 --- openturns-1.1.orig/lib/test/t_TrapezoidalFactory_std.expout +++ openturns-1.1/lib/test/t_TrapezoidalFactory_std.expout @@ -1,8 +1,8 @@ Distribution =class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 -Estimated distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 +Estimated distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=1.005 b=2.279 c=4.545 d=4.99 h=0.32 Default distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1 c=1 d=2 h=0.333333 Distribution from parameters=class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Trapezoidal =class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 -Estimated trapezoidal=class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 +Estimated trapezoidal=class=Trapezoidal name=Trapezoidal dimension=1 a=1.005 b=2.279 c=4.545 d=4.99 h=0.32 Default trapezoidal=class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1 c=1 d=2 h=0.333333 Trapezoidal from parameters=class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 --- openturns-1.1.orig/python/test/t_TrapezoidalFactory_std.expout +++ openturns-1.1/python/test/t_TrapezoidalFactory_std.expout @@ -1,8 +1,8 @@ distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 -Estimated distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 +Estimated distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1.005 b=2.279 c=4.545 d=4.99 h=0.32 Default distribution= Trapezoidal(a = -2, b = -1, c = 1, d = 2) Distribution from parameters= Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) Trapezoidal = Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) -Estimated trapezoidal= Trapezoidal(a = 1.006, b = 2.275, c = 4.545, d = 4.99) +Estimated trapezoidal= Trapezoidal(a = 1.005, b = 2.279, c = 4.545, d = 4.99) Default trapezoidal= Trapezoidal(a = -2, b = -1, c = 1, d = 2) Trapezoidal from parameters= Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) openturns-1.9/distro/debian/patches/series000066400000000000000000000000431307543307100210120ustar00rootroot00000000000000tests-disable-coupling_tools.patch openturns-1.9/distro/debian/patches/tests-disable-coupling_tools.patch000066400000000000000000000011551307543307100264240ustar00rootroot00000000000000Description: Disable coupling_tools test Some tests mysteriously fail on several architectures. Author: Denis Barbier Origin: Debian Forwarded: No Last-Update: 2014-07-02 Index: openturns/python/test/CMakeLists.txt =================================================================== --- openturns.orig/python/test/CMakeLists.txt (révision 3135) +++ openturns/python/test/CMakeLists.txt (copie de travail) @@ -624,7 +624,7 @@ # FIXME: check_get_line_col fails through wine on newer native version if (NOT WIN32) - ot_pyinstallcheck_test (coupling_tools) +#DEB#ot_pyinstallcheck_test (coupling_tools) endif () openturns-1.9/distro/debian/python-openturns.install000066400000000000000000000001261307543307100231140ustar00rootroot00000000000000usr/lib/python2*/*-packages/openturns/*.py usr/lib/python2*/*-packages/openturns/*.so openturns-1.9/distro/debian/python3-openturns.install000066400000000000000000000001261307543307100231770ustar00rootroot00000000000000usr/lib/python3*/*-packages/openturns/*.py usr/lib/python3*/*-packages/openturns/*.so openturns-1.9/distro/debian/r-other-rot.install000066400000000000000000000000331307543307100217170ustar00rootroot00000000000000usr/lib/R/site-library/rot openturns-1.9/distro/debian/rules000077500000000000000000000115311307543307100172320ustar00rootroot00000000000000#!/usr/bin/make -f ifeq ($(findstring parallel=,$(DEB_BUILD_OPTIONS)),) export DEB_BUILD_OPTIONS+=parallel=$(shell getconf _NPROCESSORS_ONLN) endif $(info DEB_BUILD_OPTIONS:$(origin DEB_BUILD_OPTIONS)=$(DEB_BUILD_OPTIONS)) ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) test_makeflags = -j$(NUMJOBS) endif cppflags := $(shell dpkg-buildflags --get CPPFLAGS) cflags := $(shell dpkg-buildflags --get CFLAGS) $(cppflags) cxxflags := $(shell dpkg-buildflags --get CXXFLAGS) $(cppflags) fflags := $(shell dpkg-buildflags --get FFLAGS) ldflags := $(shell dpkg-buildflags --get LDFLAGS) ldflags += -Wl,--as-needed ifeq ($(shell dpkg --print-architecture),armel) cflags := $(subst -O2,-O1,$(cflags)) cxxflags := $(subst -O2,-O1,$(cxxflags)) fflags := $(subst -O2,-O1,$(fflags)) endif ifeq ($(shell dpkg --print-architecture),armhf) cflags := $(subst -O2,-O1,$(cflags)) cxxflags := $(subst -O2,-O1,$(cxxflags)) fflags := $(subst -O2,-O1,$(fflags)) endif ifneq (,$(findstring $(shell dpkg-architecture -qDEB_HOST_ARCH), i386 kfreebsd-i386 hurd-i386)) cflags += -O0 endif ifneq (,$(findstring $(shell dpkg-architecture -qDEB_HOST_ARCH), i386 amd64 ia64)) with_tbb := -DUSE_TBB:BOOL=ON else with_tbb := -DUSE_TBB:BOOL=OFF endif debRlib := $(CURDIR)/debian/tmp/usr/lib/R/site-library export R_LIBS=$(debRlib) PYVER = $(shell pyversions -d) PY3VER = $(shell py3versions -d) PYALL = $(PYVER) $(PY3VER) %: ifneq (,$(findstring $(shell dpkg-architecture -qDEB_HOST_ARCH), mips mipsel)) $(error This package requires more than 1GB RAM; do not build on mips/mipsel) endif dh $@ --buildsystem=cmake --with python2,python3 --with quilt --parallel debian/tmp/usr/lib/R/site-library/rot: -mkdir -p $(debRlib) R CMD INSTALL --library=$(debRlib) utils/rot_1.4.6.tar.gz override_dh_auto_configure: debian/tmp/usr/lib/R/site-library/rot $(PYALL:python%=cmake-configure-%) \ cmake-configure-%: dh_auto_configure -Bbuild-python$* -- \ $(with_tbb) \ -DUSE_SPHINX:BOOL=OFF \ -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ \ -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc \ -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING='$(cflags)' \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING='$(cxxflags)' \ -DCMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING='$(ldflags)' \ -DCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING='$(ldflags)' \ -DCMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING='$(ldflags)' \ -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ -DCMAKE_INSTALL_PREFIX:PATH=/usr \ -DCMAKE_INSTALL_LIBDIR:PATH=/usr/lib \ -DLIB_SOVERSION=0.9 \ -DLIB_VERSION=0.9.0 \ -DOPENTURNS_SYSCONFIG_PATH:PATH=/etc/openturns-1.7 \ -DINSTALL_DESTDIR:PATH=$(CURDIR)/debian/tmp \ -DLINK_PYTHON_LIBRARY:BOOL=OFF \ -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python$* \ -DPYTHON_INCLUDE_DIR:PATH=$$(python$*-config --includes | sed -e 's/ .*//' -e 's/^-I//') \ -DPYTHON_INCLUDE_DIR2:PATH=$$(python$*-config --includes | sed -e 's/ .*//' -e 's/^-I//') \ -DPYTHON_LIBRARY:PATH=$$(python$*-config --ldflags | sed -e 's/ .*//' -e 's/^-L//')/libpython$*.so override_dh_auto_build: $(PYALL:python%=cmake-build-%) cmake-build-%: $(MAKE) $(test_makeflags) -C build-python$*/lib $(MAKE) -j1 -C build-python$*/python $(MAKE) $(test_makeflags) -C build-python$* override_dh_auto_install: debian/tmp/usr/lib/R/site-library/rot $(PYALL:python%=cmake-install-%) cmake-install-%: dh_auto_install -Bbuild-python$* mkdir -p debian/libopenturns0.10-dbg/usr/lib/debug/usr/lib ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$${LD_LIBRARY_PATH}:}$(CURDIR)/debian/tmp/usr/lib \ CTEST_OUTPUT_ON_FAILURE=1 \ R_LIBS_SITE=$(CURDIR)/debian/tmp/usr/lib/R/site-library \ $(MAKE) $(test_makeflags) -C build-python$* test ARGS="$(test_makeflags) -R pyinstallcheck" endif override_dh_makeshlibs: dh_makeshlibs -Xpyshared override_dh_strip: dh_strip -plibopenturns0.10 --dbg-package=libopenturns0.10-dbg dh_strip override_dh_python2: dh_python2 -p python-openturns override_dh_python3: dh_python3 -p python3-openturns override_dh_compress: dh_compress -X.pdf -X.git -X.py override_dh_auto_test: $(PYALL:python%=cmake-test-%) cmake-test-%: # 'make test' does not build binary tests ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) $(MAKE) $(test_makeflags) -C build-python$* tests LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$${LD_LIBRARY_PATH}:}$(CURDIR)/debian/tmp/usr/lib \ CTEST_OUTPUT_ON_FAILURE=1 \ $(MAKE) -C build-python$* test ARGS="$(test_makeflags) -R cppcheck" endif get-orig-source: uscan --force-download --verbose mv ../openturn*.tar.[gzbz2]* ../tarballs openturns-1.9/distro/debian/source/000077500000000000000000000000001307543307100174515ustar00rootroot00000000000000openturns-1.9/distro/debian/source/format000066400000000000000000000000141307543307100206570ustar00rootroot000000000000003.0 (quilt) openturns-1.9/distro/debian/watch000066400000000000000000000001001307543307100171710ustar00rootroot00000000000000version=3 http://sf.net/openturns/openturns-([\d.]+)\.tar\.bz2 openturns-1.9/distro/rpm/000077500000000000000000000000001307543307100155255ustar00rootroot00000000000000openturns-1.9/distro/rpm/R-rot.spec000066400000000000000000000042101307543307100174010ustar00rootroot00000000000000# norootforbuild %define r_library %{_libdir}/R/library %define packname rot Name: R-%{packname} Version: 1.4.6 Release: 1%{?dist} Source: %{packname}_%{version}.tar.gz License: LGPLv2 URL: http://www.openturns.org Group: Applications/Engineering Summary: R package for OpenTURNS %if 0%{?suse_version} BuildRequires: R-base-devel >= 2.0 %endif %if 0%{?mdkversion} BuildRequires: R-base >= 2.0 %endif %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version} || 0%{?scientificlinux_version} BuildRequires: R-devel >= 2.0 %endif %if 0%{?rhel_version} || 0%{?centos_version} || 0%{?mdkversion} BuildRequires: tetex-latex %endif %if 0%{?fedora} >= 15 BuildRequires: sane-backends-libs %endif %if 0%{?suse_version} BuildRequires: texlive-latex %endif %if 0%{?suse_version} || 0%{?mdkversion} Requires(post): R-base >= 2.0 Requires(postun): R-base >= 2.0 %endif %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version} Requires(post): R-core >= 2.0 Requires(postun): R-core >= 2.0 %endif BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %description R package for OpenTURNS enabling additional statistical capabilities %prep %setup -q -c -n %{packname} %build %install rm -rf %{buildroot} mkdir -p %{buildroot}%{r_library} %{_bindir}/R CMD INSTALL -l %{buildroot}%{r_library} %{packname} test -d %{packname}/src && (cd %{packname}/src; rm -f *.o *.so) rm -f %{buildroot}%{r_library}/R.css %check %if 0%{?fedora} >= 15 %else %{_bindir}/R CMD check %{packname} %endif %clean rm -rf %{buildroot} %files %defattr(-,root,root,-) %dir %{r_library}/%{packname} %doc %{r_library}/%{packname}/html %doc %{r_library}/%{packname}/DESCRIPTION %{r_library}/%{packname}/NAMESPACE %{r_library}/%{packname}/INDEX %{r_library}/%{packname}/Meta %{r_library}/%{packname}/R %{r_library}/%{packname}/help %changelog * Sat Nov 30 2012 Julien Schueller 1.4.5-1 - New upstream release * Sat Oct 9 2010 Julien Schueller 1.4.4-1 - New upstream release * Mon Nov 26 2007 Remy Pagniez - Initial package creation openturns-1.9/distro/rpm/openturns-rpmlintrc000066400000000000000000000000511307543307100215110ustar00rootroot00000000000000setBadness('shlib-policy-name-error', 0) openturns-1.9/distro/rpm/openturns.spec000066400000000000000000000123351307543307100204420ustar00rootroot00000000000000# norootforbuild %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} %define __cmake %{_bindir}/cmake %define _cmake_lib_suffix64 -DLIB_SUFFIX=64 %define cmake \ CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \ %__cmake \\\ -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \\\ %if "%{?_lib}" == "lib64" \ %{?_cmake_lib_suffix64} \\\ %endif \ -DBUILD_SHARED_LIBS:BOOL=ON Name: openturns Version: 1.9 Release: 1%{?dist} Summary: Uncertainty treatment library Group: System Environment/Libraries License: LGPLv3+ URL: http://www.openturns.org Source0: http://downloads.sourceforge.net/openturns/openturns/openturns-%{version}.tar.bz2 Source1: %{name}-rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: gcc-c++, cmake, bison, flex, bc, swig BuildRequires: muParser-devel BuildRequires: libxml2-devel BuildRequires: boost-devel BuildRequires: nlopt-devel #BuildRequires: hmat-oss-devel %if 0%{?suse_version} BuildRequires: lapack %else BuildRequires: lapack-devel %endif %if 0%{?suse_version} BuildRequires: gcc-fortran %else BuildRequires: gcc-gfortran %endif BuildRequires: python-devel %description OpenTURNS Uncertainty treatment library %package libs Summary: Uncertainty treatment library Group: Development/Libraries/C and C++ Requires: muParser Requires: libxml2 Requires: lapack %if ! 0%{?suse_version} Requires: nlopt %endif #Requires: libhmat-oss1 %description libs Uncertainty treatment library binaries %package devel Summary: OpenTURNS development files Group: Development/Libraries/C and C++ Requires: %{name}-libs = %{version} Requires: muParser-devel Requires: libxml2-devel %if ! 0%{?suse_version} Requires: lapack-devel %endif Requires: nlopt-devel %description devel Development files for OpenTURNS uncertainty library %package examples Summary: OpenTURNS examples Group: Productivity/Scientific/Math %description examples OpenTURNS python examples %package validation BuildArch: noarch Summary: OpenTURNS validation files Group: Productivity/Scientific/Math %description validation OpenTURNS validation text files %package -n python-%{name} Summary: Uncertainty treatment library Group: Productivity/Scientific/Math Requires: python Requires: %{name}-libs = %{version} %description -n python-%{name} Python textual interface to OpenTURNS uncertainty library %prep %setup -q %build %cmake -DINSTALL_DESTDIR:PATH=%{buildroot} \ -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ %ifarch i586 i686 -DCMAKE_C_FLAGS_RELEASE="%optflags -O0" \ %endif -DOPENTURNS_SYSCONFIG_PATH=/etc . make %{?_smp_mflags} OT make %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} rm -r %{buildroot}%{_datadir}/%{name}/doc %check make tests %{?_smp_mflags} LD_LIBRARY_PATH=%{buildroot}%{_libdir} ctest %{?_smp_mflags} || cat Testing/Temporary/LastTest.log rm %{buildroot}%{python_sitearch}/%{name}/*.pyc %clean rm -rf %{buildroot} %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig %files libs %defattr(-,root,root,-) %doc COPYING README.rst %dir %{_sysconfdir}/%{name} %config %{_sysconfdir}/%{name}/%{name}.conf %{_libdir}/*.so.* %dir %{_datadir}/%{name} %{_datadir}/gdb/auto-load%{_libdir}/libOT*-gdb.py* %files devel %defattr(-,root,root,-) %dir %{_includedir}/%{name} %{_includedir}/%{name}/*.h* %{_includedir}/%{name}/swig/ %{_libdir}/*.so %{_libdir}/cmake/ %{_bindir}/%{name}-* %files examples %defattr(-,root,root,-) %{_datadir}/%{name}/examples/ %files validation %defattr(-,root,root,-) %{_datadir}/%{name}/validation/ %files -n python-%{name} %defattr(-,root,root,-) %{python_sitearch}/%{name}/ %changelog * Mon Apr 3 2017 Julien Schueller 1.9-1 - New upstream release * Thu Jun 30 2016 Julien Schueller 1.8-1 - New upstream release * Mon Dec 7 2015 Julien Schueller 1.7-1 - New upstream release * Mon Jun 15 2015 Julien Schueller 1.6-1 - New upstream release * Wed Dec 3 2014 Julien Schueller 1.5-1 - New upstream release * Wed Jul 2 2014 Julien Schueller 1.4-1 - New upstream release * Tue Dec 17 2013 Julien Schueller 1.3-1 - New upstream release * Mon Jul 22 2013 Julien Schueller 1.2-1 - New upstream release * Wed Nov 28 2012 Julien Schueller 1.1-1 - New upstream release * Sat Feb 18 2012 Julien Schueller 1.0-1 - New upstream release * Sat Jul 30 2011 Julien Schueller 0.15-1 - New upstream release * Sat Apr 9 2011 Julien Schueller 0.14.0-1 - New upstream release * Sat Oct 9 2010 Julien Schueller 0.13.2-1 - New upstream release * Mon Nov 26 2007 Remy Pagniez 0.11.1-1 - Initial package creation openturns-1.9/distro/windows/000077500000000000000000000000001307543307100164215ustar00rootroot00000000000000openturns-1.9/distro/windows/COPYING.txt000066400000000000000000000167431307543307100203050ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. openturns-1.9/distro/windows/Makefile000066400000000000000000000152271307543307100200700ustar00rootroot00000000000000# # Compile and create OpenTURNS installer for windows # # Rules dependencies make things done in the right order, however it does not # detect if OpenTURNS sources has changed. This has to be specified manually: # - to recompute a rules, remove the corresponding file # i.e. some OpenTURNS .cxx have changed: # rm ot-compile; make # - to recompute every rules: make clean; make # ############################################################################### # adapt these following lines to your configuration : # compiler prefix ARCH=i686 TARGET = $(ARCH)-w64-mingw32 # OpenTurns paths OT_SRC ?= $(PWD)/../.. OT_BUILD ?= $(OT_SRC)/build-$(TARGET) OT_PREFIX ?= $(OT_BUILD)/install OT_VERSION ?= $(shell cat ../../VERSION) WINDEPS = $(PWD)/openturns-developers-windeps # Wine WINE=/usr/bin/wine WINE_PREFIX = $(WINDEPS)/wine-$(ARCH) export WINEPREFIX = $(WINE_PREFIX) ifeq ($(ARCH), i686) export WINEARCH = win32 else export WINEARCH = win64 endif MINGW_PREFIX = $(WINDEPS)/mingw-w64-x86_64/usr # Python PYBASEVER = 2.7 PYBASEVER_NODOT = $(shell echo $(PYBASEVER) | sed "s|\.||g") PYBASEVER_MAJOR = $(shell echo $(PYBASEVER) | head -c 1) PYTHON_EXECUTABLE=$(MINGW_PREFIX)/$(TARGET)/bin/python$(PYBASEVER_NODOT).exe export PYTHONHOME := $(MINGW_PREFIX)/$(TARGET) export PYTHONPATH := $(MINGW_PREFIX)/$(TARGET)/lib/python$(PYBASEVER_NODOT) R_PATH = $(WINDEPS)/opt/R-2.12.0 PATH := $(R_PATH)/bin:$(PATH) CMAKE=cmake # launch OpenTURNS checktests before creating the installer (y,n) CHECK_OT=y JOBS=$(shell getconf _NPROCESSORS_ONLN) JOBS_PYTHON=$(JOBS) JOBS_TEST=$(JOBS) export PATH := $(MINGW_PREFIX)/bin:$(PATH) DEBUG_OT=n ############################################################################### # rules: .PHONY: all clean-python clean mrproper all: ot-installer ot-check-compiler: @echo -n "Check OpenTURNS dependencies: " @ls $(OT_SRC) $(PYTHON_EXECUTABLE) > /dev/null @echo "ok" touch ot-check-compiler ifeq ($(PYBASEVER_MAJOR),3) wine wineboot xvfb-run winetricks -q vcrun2015 endif ot-config: ot-check-compiler -mkdir -p $(OT_BUILD) cp $(MINGW_PREFIX)/share/mingw/toolchain-$(TARGET).cmake $(OT_BUILD) echo "set(CMAKE_FIND_ROOT_PATH $(MINGW_PREFIX)/$(TARGET))" >> $(OT_BUILD)/toolchain-$(TARGET).cmake cp $(MINGW_PREFIX)/$(TARGET)/bin/python$(PYBASEVER_NODOT).dll $(OT_BUILD) cd $(OT_BUILD) && rm -f CMakeCache.txt && $(CMAKE) \ -DCMAKE_TOOLCHAIN_FILE=toolchain-$(TARGET).cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4" \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -D_hypot=hypot" \ -DPYTHON_INCLUDE_DIR=$(MINGW_PREFIX)/$(TARGET)/include/python$(PYBASEVER_NODOT) \ -DPYTHON_INCLUDE_DIR2=$(MINGW_PREFIX)/$(TARGET)/include/python$(PYBASEVER_NODOT) \ -DPYTHON_LIBRARY=$(MINGW_PREFIX)/$(TARGET)/lib/libpython$(PYBASEVER_NODOT).dll.a \ -DPYTHON_EXECUTABLE=$(PYTHON_EXECUTABLE) \ -DR_EXECUTABLE=$(R_PATH)/bin/R.exe \ -DCMAKE_INSTALL_PREFIX=$(OT_PREFIX) \ -DUSE_TBB=OFF \ -DUSE_SPHINX=OFF \ -DCMAKE_CROSSCOMPILING_EMULATOR=$(WINE) \ -DUSE_COTIRE=ON -DCOTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES="-j$(JOBS)" \ $(OT_SRC) touch ot-config ot-compile: ot-config cd $(OT_BUILD) && make OT_unity -j$(JOBS) cd $(OT_BUILD) && make python_unity -j$(JOBS_PYTHON) touch ot-compile ot-install: ot-compile cd $(OT_BUILD) && make install/fast -j$(JOBS) ifeq ($(DEBUG_OT),n) $(TARGET)-strip --strip-unneeded $(OT_PREFIX)/bin/*.dll $(TARGET)-strip -g $(OT_PREFIX)/lib/*.a $(TARGET)-strip --strip-unneeded $(OT_PREFIX)/Lib/site-packages/*/*.pyd endif cp $(MINGW_PREFIX)/$(TARGET)/bin/libgcc_s_*-1.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libquadmath-0.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libgfortran-3.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libstdc++-6.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libwinpthread-1.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libblas.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/liblapack.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libiconv-2.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/liblzma-5.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libxml2-2.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/muparser.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/zlib1.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libnlopt-0.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libgomp-1.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libcblas.dll $(OT_PREFIX)/bin cp $(MINGW_PREFIX)/$(TARGET)/bin/libhmat-oss.dll $(OT_PREFIX)/bin tar cjf openturns-mingw-$(OT_VERSION)-py$(PYBASEVER)-$(ARCH).tar.bz2 --directory $(OT_PREFIX)/.. `basename $(OT_PREFIX)` touch ot-install ot-test: ot-install cd $(OT_BUILD) && make all_unity -j$(JOBS) ifeq ($(CHECK_OT),y) cp $(OT_PREFIX)/bin/*.dll $(OT_BUILD)/lib/test cp $(OT_PREFIX)/bin/*.dll $(OT_BUILD)/python/test cp $(MINGW_PREFIX)/$(TARGET)/bin/python$(PYBASEVER_NODOT).dll $(OT_BUILD)/python/test cd $(OT_BUILD) && ctest -j$(JOBS_TEST) --output-on-failure --timeout 1500 endif touch ot-test ot-install-test: ot-test cp $(OT_SRC)/lib/test/*.expout $(OT_PREFIX)/share/openturns/examples for exp_file in `find $(OT_SRC)/python/test -name "t_*.expout"`; do \ base_file=`basename $${exp_file} .expout`; \ cp $${exp_file} $(OT_PREFIX)/share/openturns/examples/$${base_file}.py.expout; done cp $(OT_BUILD)/lib/test/*.exe $(OT_PREFIX)/share/openturns/examples ifeq ($(DEBUG_OT),n) $(TARGET)-strip --strip-all $(OT_PREFIX)/share/openturns/examples/*.exe endif touch ot-install-test ot-check-installer: ot-install @echo -n "Check OpenTURNS prefix: " @ls $(OT_PREFIX) > /dev/null @echo "ok" @echo -n "Check nsis compiler: " @makensis -VERSION > /dev/null 2>&1 @echo "ok" @echo "OpenTURNS installer dependencies seems all right." touch ot-check-installer ot-module-installer: ot-check-installer sed "s|@version@|$(OT_VERSION)|g" OpenTURNSDoc.url.in > OpenTURNSDoc.url makensis -DOPENTURNS_PREFIX=$(OT_PREFIX) -DPRODUCT_VERSION=$(OT_VERSION) -DPYBASEVER=$(PYBASEVER) -DPYBASEVER_NODOT=$(PYBASEVER_NODOT) -DARCH=$(ARCH) openturns.nsi touch ot-module-installer ot-dev-installer: ot-install-test ot-check-installer makensis -DOPENTURNS_PREFIX=$(OT_PREFIX) -DPRODUCT_VERSION=$(OT_VERSION) -DPYBASEVER=$(PYBASEVER) -DPYBASEVER_NODOT=$(PYBASEVER_NODOT) -DARCH=$(ARCH) openturns_developer.nsi touch ot-dev-installer ot-installer: ot-module-installer ot-dev-installer @echo "ok" clean: -rm -f ot-* -cd $(OT_BUILD) && make clean mrproper: -rm -f ot-* -rm -rf $(OT_PREFIX) $(OT_BUILD) -rm -f *.exe openturns-1.9/distro/windows/OpenTURNS.bmp000066400000000000000000006223261307543307100206710ustar00rootroot00000000000000BM$6(: $  [WpOqNrSsRsQqRtRtQsQtQsQrRrSsNnNoRsQtLpQuRtNqOrPsNpOnNnNnMlLkNmPpPpQqOpOqNsNqKnPrKnKnMpNpOrKoLpNrMpJmKmOqNrPqQpRqRqOpNpNpNrLqNrNoNoLmKmPrQoRqNnOpMpKnNqNqPrRqRqOpNoPpOpNnNlOoOpNoMnMoOqQsQsMpLnLmNoMmNoMoPoPpPpOqOrPrPpNpLpMpLqMoKnNpOsNqMpJmKmLmOpLoIpRuPrPrOqQqPqPqPqOrMoNqLoMpLnNqNtOsOsQtSvQuRwQwPsRqQpPrStRtRtRtSuNoQrRuPqPrRpV0v(u/!y1"w2'z,')&}()+$|((})/}+-|(-|(/~).~&,~**{)(z'0/.,+~.,2*~/*0+1*}/.{--z-.{.%r&)u*,y'-z',y&,y&,x&*w%'t#)w&,z(+z'*z'&v+%v+'z.)}/(~/'{.,|1)z/)z/'x.&v+,w(+y&,y%,y&+w',z(+y'+y&'u$,x''x)#z.&|0'}1"x+%|.-1-2-~0(x,)w-,z(,x&*v',x(-y'-y%-z'-y'-y',x&,y&#y)${*${)#y(${)'{+,1(z,)|-*|.)}-(*)-&}+#z(${+*x&+x%-y'*v%+w',x(+y&*y&+y',z),z)+{/)y-({--2*/'z+*{/)z.'x-&w,'v**u'*v%-z'+x'-x)$x(#x'#x%$z&$|&*z,0z1.{/.|/*{,,~.(0)~0)}/(z-,2/-+(.,,|)-{&)}'&*(+&)'*(+.}((w#0*/~*-{'(~+"z)-w0t.z)-.0,3|3,x3,w1,x2+v0/|5&|4%z2%y3'|5(}6'~4(5&}2(3(4(~/,.+.-1/1+~.'{1&y0'{2&y1%y0'x5&w3%w0#u-%w0#t/ p+$t1%x5%y4%|3/|/+x,-{.-{.+y,,y+.{-0}0.{0.y/+x0'x7&w2$w0"v/"v2&y2&x1%w0&w1*y5)x0,z/-}0+{-'x(./)1&|-,~0+z/-{.*y3#s0"r1&v5&x4#w/&w0'x2%v1'w3#u0,s0+s/.v0,u.0x1-|/({*#v%({+.1*}-.|.0}1.{1-y1/y3'x3'x3$v1"t/#t0$v1$x3'y5(x4&v3#r/({*+~/*}-,/+/-}-0~.-z,0~1,y.+w0*w7(w2&w/ q,$u3,s1+r/+r/1w41v2*v.*|1)}0(0(/)0,0*.*~.-/-.*4%|3*9'|7%}5,~5+w/)u-/{4.{3.z2(~5)~6*6)~5(}71/)y$0t3~'x))1)//1(~-)~-+/*.,0/0-~.&w),}/,}.%p-$n-!j+g(d&b%b&b&c'e(`#]`b i$$n'&p*,x.,{+,{)-z+,y,,y,'q+"j(h%g b$`#d(d(d)c(c'_"]!b%g*&l*%n'*v*+z,)z-){*+z**w*(q)&m&f$d'a#\^"c'a(_%a'b(^#b$!e% f&g#'s*,z,-{*,z+,y-,y.*v+"k-e(c&c'^"c'a&`%\ b&_#]!c&d&g(!k+(t+,x-*v*)v*,y,,x,)u,%o)"h% d%`"[_#a%a&^$`#d&`"b#f'e%$g%(p(,x+,z+*y*&y+(y,(w,(s,#m&b#]$]!_$d'a$c)c'b$b"f%j#!l%#o*$r)+{-/0)~-)~--0*~-+.+},,-././,~,-4!t-29|*y((.&|..}4,5,~5+}3+~4,~3/~3-|3.}50|9#r+XTT KX+^4S*X.W.X.S+Z9$a:LAPZ*s1-y/+w*-w/,w2(t/TKKJP"^1T*V.W0Q,S-Y0"_/ I LLT)n/.v1(v,(z*+y0-t4]" O N N L%c5R*U.U1W0V-W+b5 GJ MQc&-u0*w,,x/.w2/w7i&P M N J$c7T,T,T-U-V.T-]: M"K M Ma-v5+t0(r,(t-.w1'i,RJK E`4Y/T,U0U2U0S*!_3R N MLW,r1.y2+z.&y-*x3&p2X P> I%a3$]3T.S/X2W0V*`1[, PRSW&o,-{3'w..~5+{2+{2)y0)y./3,|0)x./}4./"})9<(z$+1+2-~0*/,1,1+}1&z.(0)|/*3()%u/V'O$8 InaB`U"0-$40"3/#40/*3ZRsrWB$W&&v-!}($|.$z/'y.*u0`K9"6RMQmg3,6/4,!40207NLcz-EQ#$t."z(.u1+s3!z)!|*d(N;! '>9_|x62"62!3-!3.4.%>7a|w/! %?#R#k)(x-*z,'w/!x.#z) h-N$@* "m&=5#2/#3/#2/$3/1+_x%51#@L#^*$z*!{.%w0$w)'t0%o0 WI#)Yup5LG2-!40!3."3.1-Rkh=UO6"O \%"y+#}(+v10t3%x+(x,T'F_vr2XM3-40"5.!604/?XRSoi6!N$`#n)/y2&y+){/&x,+|0+}0(~/)0$|,$|+(0+0* 6<&{#)~0(/*~.)~.+1+1,4({2,0.z/*z2+'%h.   (),. -*$'"!4)3 " +m-'{))v0-w2'z*'o, - "'+-- (&   #^(&+,v-*q2#z(*v.=   '+ .,*#   P",{2,w**v0"u/*~*N$  '*- - ,&"  9,{+$z.)x2*x++|1&c(  $$*,,**%   /)m,()+w1*t0"z,+o, "2"4&*"+--,($   " "_%-2,~4+}3)|1({0){0)z-'x,*}/-1,1,6.#4?'|#*1)/-1+1(|.'{.)|1%x.({+-{/&w002I4+X24*5 4 343 24 9,h>&f: 4'_+,z.+u/.u0%'b# &&a2D%( 2 3 5 5 30.*9.`;;#@.4%}($y-(|,0j3 !O0N+ & ./. 4 4 1 2 . )&e3O (+~0&y((x.%w1/0 + J*]3++2 33430++U.#R//t,(y.+y1)y)&-H  :#$j5?(2 2 55324)?%X3 ) *X+-~/%|,${)(~1*^+1%d;'e=7%, 05 3 4 45 .4$[.7H&/,|3,~3-4+}2+}2+}0)z.-3/4+1,3'}6?&z"-4,304-3+~1(|.)|1'z0)z,/~1*}545Q+5&e4K# "**,,,'&,A!f/[*4!'c5'{/$v.#u,%}-&`.,])e$!  ++,,,++ (Q%`+7O%,|2(z+*w/,y-4n6 1O'a1, ) *) +- (*( Ik,=/>)},&z)(x-'y20z/="C!g0 B% +),,)( '3!c.O&11q,*y/+y/)z($|2S'6!g,]!+* , --,. # %X+_0 0*^0-w.'y.)w+(x1-h20Z#!h2>-& (/ , *)-$  Oh-6" Q(,5'x-*|1(z/,~3-4+}0.316.3+1.5'};B)}$,4)0,0(}.+2)}0,4*|3-}2.~0)~240N%2H'<+. :(J:#[J&`N UDA1,$!0,;* ;. #&`1(|-&w-&y0)|1&a+, 9> + - 4$B4,UH0\P/WI%F74(,+71#L*}2,x.,v/*|,,o/0)5/'-"<.-RC/^R.ZL$L>7) .(67& =-y4'v*'u*(y1/|-8' 64&,#:+N>$]K$^LQ@<,/$$0 9,,.s+'z-'v,(y**w8L( 2;)/ 3$F7-WJ/_R5VH"D44&,-; 6+"\),~/(x--s-)z2$e,"1 >=&6& 0$@1&WF0^S.YL#J<9*. (;H(6Q!/}6&x-*|1+}2,~3,}304/4.3-2)0-4,!>B(}%-3)0/3.3)}/*~0+3-4+{/*|,(~00.Q )'!,,(44:(7'&32!84":5"52#3/6"!2/#57,( %\)/|.,v,-v/)y.&i+#"*:(#5. 2,!6273!;7;4922.2/(84*%  K!*2*z-'w+(*,r0&&5/*543.7081:895!62!3.$2+95./ 90w;,x.'t,%v,1}29 !-/57"3*%2+"42":5#;6!51!2-2%'45 13 %+u.%y+'w.%v+1y8 R &,<.!3- 3-!62 84 :7#818/4-#52'50&#  ^(),%z+,u-%z.!a*!+,*81$6,3+"51$75<673 511,%3.;(#*-)"3 "V.4){0&y-%x,+}2(z.*{/)z.-304(}.+1'{;D$y&.~/)2.6.3-216,1/3/1*.*0.{:`$ 22*,)!0+1%-" ,$+$,%+$*$+!.$3*0( $-#h2)x/-x.)w.#y.(m1$ $-#2'!1(+$+&,$/".#,$,%.'2(/$%*V$,y0+z-)u,+{,*s09") /'#/+. , )(,%,%,$,#-#$0(1()"$J.1(z-&x0'y-2y:K ' -(0) ,#*$-$-#-",#+$!+ 2(0)'"9.s8$v,%w.(u-)y.^'% ' .&&0+-'+$,$,"1%*'-"/$0*/+,$ !/%m.-0'y/(x/&t+b-. $.' 5+"0$."-#,#0"-$,&,%/& 1'*(.,2`)-3,2+1)}/.3*~0'w-*z006,|2*y/)z/+s&;G#z&-0*1.4/4/4-2+//406-2,1+~2'x1[/J)C-!?.@,?-=.=+ E0!J2F.!A/!B0B-># >K .v5$w&&s''t,'~1+{4L& 8A(!A-<*<,:+:)C.$F/!@, >.?/C1?(< D (p6*z.*w.,w1&v',x1Z* 9*<%:*I. I1?+@-#?/!A1B, =#>e+(}/+u."o*&v,+y1!j/=@"A+B0?. <,!=*"G0"H0<'!;*?/@/C0@%:\(/y3'{*'z/+x1%x,#s1 C ?"?'A0@-@-C-G1I0<-?+A,#=/!B/C'<N"1}9*~..~4-{1){,+v6R(>=$A/$A/A-F/!G0D.<*:+<-!?, >/>0B,Y/&w5'~0+~0.4170605.4,2.5,2&|-*0.z*=G$}(15(~/'z-/305.3/405,6+2).)//6CSAP)\6E,?*:'8& 6"F-Q4H*:'C.L0%a5(t9 c(/}3'~*-|/,z2%~/)2#g.&h6$]5"K1?+<):( 9&H1Q4E*;(B0D.$R1'i7^+(t2'w*+x1)t/$u'.3c($f3&b5K0?1?+?%;%Q0S5A':$=+@0P2&f7!a-"k)'w*+t/&p.%t)'z,&v2^(&g8 Q1 D-?-<(@'O3O2 <"<'<- A/J.$c9"a0'n--|-'|('x.)w0)z-)v.`)+n=!Y5D0B-=%D*O4K.9&;'<'>.I-&b4+l9`'06%y')y0/~4+,-4f,'m5'b8$O6D/ <(G-N1E, 8#;);(@,C+([7ERGS)3*2.4-3-3-3+2)0)0)0,2+1.3.z)>J"~(/4+0-~2.3.3-2/4+1)1/3*.+1)1=K`lEyPBgSƼ̾˻uBlSHV1>g$.3&+.3/~5'.(~/ m'3?BR3[DoûȽͼɹƽLhV8^=4Ca&'u/)y,(u0%t,*z,.~1c")u6AM)V9gź¸ʼ˼ĶƺUld0\EozYg5Bn(l,#v0$y)(v0+w-(z*%x/&f&/|Ectp|3~H,o-"o,({.)y,)v1(x/'y/'t1i!.9L[IO3:d#46,-(}0&{1*..3k*-;GSXgU_FK){0+w206/5+2,2,3*~0.4-3(}.,2,/*y&FI"y&03*414.405.3,1-3,3'{--2.5)18Fhiw*9q!-|4%u+*z/+102&2#s'/w9qz<|Im!%{+)u0*y.'|%+v1,x8k 'u,YiG~Sn+ p'*w.%v-(u-)v-(y.%z- g,T|^÷Qh#o)!u('z/+y/)u-&u,)w.%w,m%9yEt7>j#.8.0,1,}7-+*8t'0:pcm4F+{5/30303-0,//207*~0'{-(|.-2*2&w(MM&}*14+5/2-2/4/4.3/4.5*~0'{-+1'-;Jvz:+le@Lv'/6+z0,|0)}//~2%0&x+7{E4-<42!D?Ucm&'{-'r.&w*(|**u0+y2s$1u:t4-^W~% {`o%r1$v+-z0(x0(u,+x/'x-&|/&u%mncZ/*ZX(m*q3$y,'y.+y/(t,%t+)x/){.q*JX@%4 9:!=7FQq(,1,~0+}4*}4,++~8!x-@Iw:H.5/302.0/2.0*-.4-3)}/+1-2-5(x+NO÷&|*14(2-1,10505-2.3.517+1+1)0@Ot}6'`SV])1,4-~2,}0)}/){/'.)0@}O201ig np·jx2x8){-)v/'y-&w.(t.*{+){+@tL!*jY(;3p.z9+0)x/&v-(u,-z0%w,'}/6yGxrm"+!8xC'}0'y.*x.(t,(w.&v-)/&x/[l*" 2I>T}d(x,--,~2){4*~2)~*'{4-4SZyDM(-*004050505,1)}/.4-3/5/4*3(w*P¯Pĸ(~,25&0,~/-2,1*//4'}-)0,2/5.4)0@My$SPYd(2+4*}/(z-+}/*~3+/)1K\rb*M>x3z:(},$s*(v,)w0+w1*}+'y)HxU!o[LH{/y7(~,%v.&v-'t,+x/'w-%|,6zDpm4%>}H'~0&x-,z0*w.(w.&w/'~-,|1dwKAvH6+^l(z+'+*z4-~4,1)~,'~5-/[d@H)/(1-2.3-2.305,2+1.4.4.4*2$r$SðSǺ'~+25)402*/-2+0-2-3,3*~005,2'.@K|#METg#/+3'|-*{.,~1(~7-~/%-R_ {y'<3x+y3$'"r'(r-+x-+v0'{/#x*EyS,LA}s w2{6&}+$v1(x.)v-*w.&x-%|,47nf z f\<~D#.$v++y/+w/(w-#t0$|,,|.nzZQƻ\m%}*"~1&s5-~*-~0,0(6'%]j8A+1-905)}/#w)-3/5.4,206/505,3,x+VűSƿ'|+.1*0+3+1.4,1+1.4/5-3)~/*1)0;ErF>FY$|/-4(},+}1-3)~2+/%/BR np:3j|&t-%~-'x1+x0.y,+y.&|-#v-8zD9* r z|:,y's.$y+(v3'v,*x.*y/'y.(|.'p5ql$ [R .v5%{-'x-)y.)w.(w.'v1)/"u'\mgf-eHFƵS_"|*'3*z5---0+}4'5&*JZ¼t=H,3,3,1.3.41705.4*~0-3-3/5+0*x+UƴU'{,-2+,#/+1*1)}/-3,~3-3,2&~.)0*19Dbt&P=28%r,16({*+}2+~3-0*1'31B!2(K:ʽDR!l%)|2'x4)z,+u+)y*)+ o+'q0s33X\OE&Qbo)"s*-w2)x-'v,'y.'y.*|1!l![iut7(82"^x#j('v+&y,'y.*y0&t,%q+(z-n#9wIǸ_N C;BI#|,,2,2(}0+/$u1'|3&x,/{>οhwBN)/-10516/4-2+0,2-3+1)}/06*/%v+VɹX!w(-4,-*5,2).+1*~0,1,2,2+3.4+2@G\cuC4XC_i/0n',|1&{),~3+3,~0)z0%0,9KX//`XZUr.u:m#*}0'v.,v.*u/(w.)}.j$)q-@~Q?Bfmsr6zE q($r)+x/)x.(w-#t)'y.({0&i(1y@sp=9/,?Iʵ4zK+k*&u+&y.'y.*y0&u+)v0+y1k#.wB.~<h,)x/*|*(x0(w/+z0/}1 g%*t/?~H%3+jmiþDZIYS&Q,EC3A"++2.{3(~0*{2-.-{0!n.2>DNkx{yVbO[Xf=I)005/4.3,1-205-4)}/)}/(|.-3,2%u-\ξ^"}/*5--)|2'y.'{--4-4*1*~0$z*-4-3*1;D[bYdZlL]jvΔۣ}ʊlljxiIY68i#.~3*~,,~3+3+~.)|.'/4??yG-M44L4^mamv=PF9:58pA2@e/)v0(})'y0)z.)z-/}3 d&*t1>M1WB6B/N`OzD_I:=84a:6E#g.%i."v)'v,+y/'x-'y/&w-(b329:j@9;1BVKqPiQ8=>9\6;I'h/ n('x0&w.&t*)x,'|,*v/`)2B6q@489;]Cky_pe7D9+I4EL5A#}-.4-}3%-&w/*|)-y0j/0?IXkzjrnt|׫ϤʑlxQU]`Q]Xj=N*0/0-3,2/4-2-2.4,2.4$x*'{-*0*z3`W).+6'0+2*1,4-4-5-405*0,3*3*3=I[hVaV_V_jpkzmrՐeqjskwn{Q^2?g)16),'/,4)~-,}..|71?1z<8S;|JkT5c;0@&d(,v0#{,-y/1w1!z'$y0#_-%n55?1LDhoixp,^88F!l($k*'y.&w,)v,+x.(y/$x-#f(Y;0B'j/"p((z/*x.)v,%t*'y/+u0d$3A1l=Vg_|-Q19B7=#v4,|3*|,$0+z1.}4){1p&7DP]oypyoxiqъo{ktlrY`[dT_Ye_kÿq}IXb"r)'{/*v3*y/(x.,u0+y.q$/u6li{(o2$w*(x,&w,*w-*w-%w,(}0"n.^ox+m5!w+'x-+y/*w-(w-(x-)|,!l+\lx=I#~(*/*w2,}1,2)|.*0&z.4AQ_pzoxoxmvՐnyoymtX_W`T_Yf9E+2/5-3+1,2*~0-2.305/4.304*-&z;ctc+,+}4+0.3,4-4-4-5-405-3-4*3)3:FYfT_V_Zckro{svҌjtr{o{o}S`0<)7-2+{--x3(x//0+-$~1K[hv({3#|-+v3)|)&y-)o,-y0!x+2tCCFų|k~1x<)/)x,'x.+y/*x.%v,)21{=pK l*)|/)z-*w-*x.+y/*{/m)$p-brtcyk\m!l+$u**{0(x.+x.+x.&v,'{/#o'E[e|$i*$w+&x-+y/,y/(w-$u*)z0 m*EVx3=#-)1-}4+0*0*}0+}0&x.1>MZmxoyoxowԏoxryryU^ZdU`Vc6A+2).(}-.305/4-2-3+1+1.4/5+.*DeΘ^i)6+40~3+1+|0+|/'y,*|/,~1-2-2,2-4)04@WdWaYaXaltrzt|ؒmvmwtzpzQa2@"r*18)}/(~.*{/,y1+|/(2-8JXp-y9$l-(y.%z))w,-x1(y,.}2!g)#s-:Fİ J@|kgX8Eq)$r*-z2(y.+x.+x.'y.(|1%n))z>ͷ6~I&k.%u+'z.*x.)v,)y.)x/)u/m'-x:~ӻ@N/8$1(}0,{0)0&{,&w+*y/#s+4@LYnyp{pyox}ˆmwpwqxS[V`T_Xe6A*1+0.4.3.3.3,1*~0&z,+1+1.3'}*,FiʚYl&8,3/2.3-2*}/'z,+~0*}/+0.4/5-4,37BZfVaWaX`kss{t{ՎnvpzqxozO_2An(28'~-'~/){.*z,*{-(3,77DWitCT-~:#k,&t-%z)(x+,x.&z-.3"e'&u.7AGYO`3@o($o).z1)z/,y0)w-'x-&y- i',>QX^e.@#h,$s+(z/*x.)v,*z0*x0+u1j$.~;L\M_:E07'3*1+z.)~0*0-3)w.#s,4BN[p{pzpyox֑pzqzjqPYW`U`Xe6A,3+0-2/4.305/5,1+0)}/,2/5.1,IhƝUp'>,.*}/03/4+0'|,/40507,3'{-,2-35?ZeWcT_V_fnqyr|ؐqypxp{p}P_2A"r-05+0,6-3+-&}.-604C4u5=6BrI6Ck*#k(){-)w.'v,(y.(z/#u* j'6A>mH*7,n~3B87hD9I'i-%u,(z/+y/,y/)y.*x/+u/g&4CDzN,:.h~r;J<.Q1DO1:'1*1-z2){-+1,3'v-"r+4BN]nxoxpxnv؎qzmxltT\YbU`Xf4@*1-2,1-305-305/20505.4)|1,{+'JbØPs(>.1.304/4,1-204-3.4.4-3/5.35?[fVaU`Xahqnxo{֑luqyq|q}Ue3B#t/15*/,6.404.6-51;=E3Y5/H7Sl_qMaW)A.8g=8E$p-%t-,}4,}3/0(~/+2#h&*w.=L,^51F7QkaxsHaU/=16h=;F!k)#k()z/)w.&u+'x.(z/#u*&g)=E8a<4>3Vf\ruSfX0=/9b=uG(<,G^Rk}Vsh6K;%M'CK0:'1*10}5*}.%y**}1(v-!p(5CQ`nxoxnvks֍oxnxksT\ZcS^Wd3>'.-2-2-2,2'|--2,1/3,2)|/'{-+|+)Le޾Lu"{9,1'}..205/4/4.3,1(|.-3.4*1({.2H#k*$l)*}0)x.)w.&w-(z/$w+!g)9H0^=m~ui}o3`>7G&j,"r)'y.+y/,y/*z/(x/'t.g$9C7l@Wk^Ǿ~+R0=F/8%/(}/.{3+~/&z,'y.)v- n'6DUcpzluownvِoxkuenXaXaVaWd2=*1*/+0/4,1+105*~0/4-3+0+000*MeߺIw#{:(-)2-3-2,1)~.-2+0.4+1&z,&z,*}/2+2-2-2-2-2.316.5.5-4*1,2)+1\aB#J2/+~3)//4/4,1,1-2-2+0+2,3'|/3=XcV_[cV_jss{owݒnvpzr{q|Zg4A0<.7,2-2-3-1)2%3=Es2~;)/,~3.~2*{0%{.3/$}05>dQk[v.x7*~0(x/'w.'t,,y/&x-(07z>}w2x='|/&w,)w-+y/)x.'x.*~/-z8gzA}P!-/}2*..}4,}3+}0*/-61>Zgq|q{r{rz׎oxqzjsZcXaS`Xd4>*1.3.3/4/4.3.3.5-4+2+2.5),4^e?%N21-5)/.3,1*/,1-2-2,1.5-4$y,2,3-2.3/4/405.3.5.5.5-4.4')2\c=&P12/8,2.3)~.1605-2,1.3-5+2*23>XcV`YbR[clmunvܑpxq{pzkvVb4B/:*2(-'z,+}1+~-/5(5@I4~=).&x.*{/*{5%~0.|(&0=FEP0w:)|.)y.'w.+x/+y/&x-'}/6{@5yA'|/'y.+y/,y/*y0'x+*~,-w7wI\+.|/&}*)x1'x/&x+*0+43@S_pyr{qzs{׍pys|dmR[YbT`Wc1<.5/4/4.3,1/4+0,3.5,3-4-3#}%3^g:&Q/2-6+1-2)~.+0/4/4,1*/-4,4)~12BMQZԸ̣EO8D'x/#u+,3(|0$y+-}/,1(4'}2(w1DNH|T7C#k*%o,(|.)w-)x.(y/'y.$v+i*1AH[M\4@ j0$x-+~0*y/+y0%u,(x/(z/m(4ALXwK]8B0:(5)~/-}0+6+2.5({-$x.5EUbp{nwnvowۑpxu}goW_W`UaVc/:)0/4.3.3.3.3+0,105/4*/)~.-)3gd0&[0,*1.2/4/416/4/405.3/4/4-11;WbV_[dW`fnt{pxޓېmvnzqwpzP]*4/7*2+2,2-2,1(.'21?=GJNW_ǖĊN\CV9C'x/%s+08(~2'|/.~0,1(4'}//y?3j5.A+y\ue'8*7j?:E k*$n,)|/(w-(v,'x-*|1$v+"i+=C=mA 7(hxyg|u)8*AuC;E)i3'y/*1.~2.~4){0(z0+}3n(8B>sE#6(Uh^*;23d5?D1<)5)/.1*6,3,4)|.%x.4CYgozpynwluُޓltqygoYaZcT`Wc0:'//305/4-2/4.3/405.3)~.,1-(3hf-)_3-'{/.2.3-2+0/4/4.3.3/4,1-11HKUW^_irƑݲ~qwekT_JZ:F(v1'r,17&/*1/~1,0'4'}20}7-X60^7:G l+%n+*{/+y0*y/(y.*|1$v+!i)AH4^:1D7_vjzwZuc=C8;i@5C+h/$x+(~/+}0+}1,4+|2){0m)>G6i@3A7_yhx}Vtg:J:3X2CL/9(4*0.2)5.407(|.%y/7G\ip{pyqynwُߕowqygoW_WaTaUa-8.5/3/4.3,105.3.3/4.3.3.3,(6kh+*a+y()|//3.4*/*/,205-2+0.3-3.31:UaXbZcT]fot|nvݒݒpynxpvs}MZ)31:*3*1/5,1(}/*5'/3:BLN]Wddokshoۊ݃hjmxcpR[OU:I(v2&q-17'-+~2-~/+3)4(0,}8(T:~9fE6F!l,$n*({.*y0*x.(x.*|1$v+ h*6D;cHz|9iE,D(j.$x+'~-({-,~0+~2*~2){0!o+5AAnKy7^=?L-6'5'-03)3-4)}1$x+&z06E]jq}oxnwnwۑߓnvu}hpT\V_UaUa.8+205,1.3)~.(}-*/-2.305.3*/,~(8nj)-h(~/24+3)0-4/6,3,3.3*/,1/4.319VaUaZdR[emt|pxېݒpxpyoypyPZ*}42<+4+2/5.3/304)11=?JLTYaenqzpyّؐmwnwdlS]O^8G&y1#t+06)01{5)+(|705%('y2dosvu7~H&j*&p*&|0)x.*x.*w-*z0$w,&e.*=}-G)m.'z-*2*|/.~1,~1#~..y0 p*.Ajw>D-5':-41/+~2-5/5(z0%y07Fbppzlvoykt׍ߐlspwgoX`ZcU`Ua.8*1.2)/0505-2-2/4/4-2.3-3-~)6rl&1l)~/-0(0+2,3-4/6,3+0/40505*/19WbUaXbRZemrzmuَېltoxpzq{Q\+~51:+4+1-3+0,015*34?ALJSV^hqqzmvڑܒpyrzeoS]Q^:H({2%w,/4*0*x0,.(|5-3%}*@}K6Pc(k-(s*$w+'v,+x.*x.)z/%z.'f*K^Ja'q+%{+,3-~1.~2,1$}-.1%r.H\[d.7*7'.,/-5*1,2)|/(~27F_lr|s|pymvُ܎nws{gpW`YbT`Ua-7(/0405/4.3-2.3.3.3(}-,1-3*|&9tk$3n#w),/)1.5,3*1*1*1/4+0.305-2/7U`T`XbU]gnpxmuېݒpxq{q{u~S](|22<+3*1.4-3)~..3*31ALNVW`hpoxjsڑڐpys{dmT^MZ;G/8*0+/)y-(0.|.&v2$,2|8s}J83y?*~0&w,)y/+x.)v,)z/'}06{@}2;(3+1+|/)z-+~1+/(08@v}I*]Rp_)K^%r'(v.(x2)z,*z-)y,'y,(~/m(N^8xG*4,5'|,,~0.2)|/'z1%|/(x.N\Xo/5+4'0*3*~1/4+1*4-8&}3Wat}qzqznwӊ֌oxqzbjU\XaVbS^+4,0/2-205+0(}-,1+1,2/5*~0,1'}*Hhb7.*-6,1,2,2)}/.4)}/,105+0,2.3,6Q\XbT^S]dmrzpxՊَowqylupyYc+|5/9*3'0,4/5+2.5)31q=m|B~N1C(s+*w.)2,1,0.1,1%~.$o-1@@Rupz>sF#{,+4.6).-1-1+1.3*}0"x28EMXŖƙDQwF8H)t2-z2*0.305/5-3&/,q37E5rB!3(ZogǿüOj\%5*8i<(0,6.6)/,006+2.3,1'w16FOZQ]{xOYGT=L.8+3)0*~0'{,,1,2+5.:)5[fr}oyp{qz֋vʁnwu}fnV^XbVcQ]+5)0-2.3.3.3.3,1-2+1-3+1)}.%y%F\<%|$-0,~3+106.4/5,102/2-2*0-3-4P[YdYcV]aiu}qy҇؍owqzs|u~Yd.9/:*4+30606,3-3)20J18,3*0,3/4,~1(0,6/:(3\hp}nznyp{ڏӉpyqz_gU]YbWbPZ*2-4+1'|,,1,10505/40505,1,2,}'AYA&~%*~/+~2-3/517-3+114-1*/*/({.)2MXU`YcW``hrzqy}Ѕَowr{r{s|Yd-8,7(1,506,2&}-(~/&/-9@KGRYaemqynvӈڏrzqzktXbOY?P,4"s',3-2*5.6,2*1*22<2g@AxM>M&w1+z11505-4.5.6)2%v*5LF(bjo*4,204.3.5-4*2,53:niw*~9+3,2,2/4-3(0.32:8JP]X_fqnxox}Ԇ{Ӄlvr{`gW_JTAL09-5(.*10506,3-7/:)4\foxoxs|mu׌z΄nwqzaiW_R\WcQ[*3,30505/4/4,1(}--2*/,116/4 x!MJD'z")0/5/4+0/4).)~.05-3-3*}1"u*(0LWU`WaV^ais|qzz΃׌oxnwr|qz[f-90:,4+1.4.3.2*0(2,8?KIRW`cks{qyz΃ӈnvqyksX_T^:K/7*3*5/4*2.50~6+3|>257H3#}9?02+3,1.416.3.37=zw:{@-1)/,/15+2,3,5/<8DYaS]isr|q{Պ|цnyr|aiV^HS>K0:,3.0.3,3/5(0/609&3^hnwoxqyqyՊxȁmvq{ajU]TaVcO[)1*0.3/40505,1)~.-2/4.3.3-3(v$HHL®){',3060505/4,1-1/1/2,0,1-2,4NYYdWaW^_gnws{z͂~ӈoxr{s|s}]h-8/9+3'./505/4-3)3+7@LHRU^`hs|qy}ц֋ows{jrX`Q[+4+4/4,1%y*-3)/1<{6~A+2,20404-4-3-50<6AOXW`lvs}q{Պ{Ѕozs|dlZbIT1;-6+206.3/4-3,500?Q^irq~nzs}ےՉq{r}udoKX/5,1*2,3/5*1-53<6@MY˗ɚM\5A.6,2&-,1.4.3+0,5->3CYds|ъ׏ےۑَ}҇kwO\=K,9-5,1/4-3.4.4071<8F`jz̃Ռڑ؏؏؎{Іmx[gWdMX*2*.-2-2+0/4-2-2,//1.3-2/5(|0N:Y˾#r%,2/4-30505-/,0,2,1&{+,1/4*2ISYfXdӊܓܓߖڒۖ؍בfu>J3=)2+2-315.4*1-6-7JVNZ׌ߔߖےߙڑߖߖےbn>J/<,6/5,1,3,2.3.7,8EPX`؋ܙۗՑ_h>J.:18.3,4+2.3*2-41<>GXaّٗۙԊR\?H0:.4+2-2.405)}.,5,;;Idoݑّݘܒߔܒ֋UbGU,8-6,1/4+3/4-3/6/;.5*0)/-305*0*4.-5,1+2.5,2(//7/;IVt̂ޗݔڒݕܓۖߖݒp|MZ/=/5*0-2-3,1,3092>JT|цܔےޔ؏ܓߓkwR^/:+3.3/6-8+~1){..61.4'~,+2,2+0(/-509S^~׊ܐ׍ڋڊڑڒzԂW`0;07*1.3-3+0/4/94@Va܎ڏَڍڏ؏ܒߐiu\h2;-4.2/4,4,2,1094AUfݓޓ؍ڐ؎ޓڏ؎ߔܒisclIR)2(//4/5/5-3/406.2,0*0,1-2%{.X1X$z/04,4+2(/)}/+2/4-/1303.1)}+*1HQgqbljtjscj`hckjq`h_halnrx|Oc;L+5*..0-2*4*y0+.2=[iglmxfpaibjdlfm`gcjemkspzN`9F09-2-313./-2.68B\ghqnvjrfl`faj_gaickemltftK\7@04*|0)|105.2)0/77GQ`fsluhldj`hgnfn`geliqpxgo_j2?07+2)/,0/205,68FQ_r{ougm`g_egnel^kbmiqmu`kan7?-5)/-115.3+1-69IPdq|mrdjejbhdjdibhbjfrkxeljsGQ,4,0-1-5.5,4)0+2+0(}--205/4%}0Q/W t)-1(0-4,3(|.&z,&z+.2.2.104.1(2ISbkRZU\^e\d\d_gdlX`\`Zc[aZ`5I6E/9,1.3-3*003017C?NR\X_[b\c^d_dag[b^e]e]eV_8G7C3:-2)0-2-2+3-77C>IQYZb^e]cY^aj`h]e^f\dYbO_5G7B17.6+3-2,1*11:9F7CS_[e]c^d]dbicj]dW_]dX_R[AJ5?07*1,1+0-0-2/86C7CV][a\c[b_fdkbiX`]e]cZbP\>L6A,5*2*1(0-2-2084A9JXbZ_[a_e^dbh_eZa\c[dWbW^bjKT+4,0,0/6,3,2+2*1+0-216/4/4&~1Q-Z"v+,/+2&}-.4/5(|.(|..3-2+0/5.2(2EP]eY_\a]cYaZbaiem_f`b]f\c_eCU5A.6,40605+/02026ABRV`_e_f`e_cbgek`g`g^f`h_hEQ4>/6/4*2+2*2,4,64?@K[d_h^e\c_ecjem_g_f[b_gWf>O3=.6,5+3-2,1+2-66@>HXc^h^d]d^eeldk^e[b_eag[cDL5>.6,4/5,1.3/3-51B04*/.316,5)%(o-A*+{-)0*~..3.3+/27=EAIDLGOIQFLFJ?D5:-2*3-6/~5/*"f2I({,.4/4/3-/'{+/5>DEKJPJQIOJPCI>D5;./'1)444)'\5S2w)06*7-,/4-2+0+0,2.0V$e#|2*/25/6.4.4+1(z.,7,x0D -tc+9+3/40515.1,1)0+3*1)0)0+~1+0,1.2-0*/+.1:'s+KD+w]//,1,/*/&z-+0-2-2+0(|-+0).).,1.3/3/1)~2)/16%r)[[+uP27+0,6.016-2+0+0)~.'}.)0(~/*1,4,1)/-3,2*0.6(w< aV%y71<*2+2-4-4,3*2+1+0#x((}--2,1-2-2050504.8*2*{MVQ#t127/30505/4.3)1*1*1'}.&}.'|-,1.3.3/4,2*,-|3+4.x_GA"v'06-203-0(|,+0,1+0+0%z*)~.*/(}.,1-226,6-403&/*rd?+%n+/4+4)',1*/(}-.3/5/3X"f%~6+/3606,2.4+1+{2.7**%h,(3.3.4*/.2/1/4)0+2.5+2+2,2.3/5.2,.*5-/23)}1*$s/*.3.3,1+1-2/40505-2,1*/-2-2-2+/02/7.2-3/5#&`-}-.+)7*1/405-2-2,1.5-4+2+2(/+3,4*3+4-4,4'}H1C+~403*1-4*1,3.5-3.3+0/4.3,1-2.3.3/4.315&1$_/&:0//5.305.3/4-4-4-5,3,3/4.3.3-2,1.3/017}.)n()}/-2*//3/2-105/4/4-2+1-2-2.3/4.307*3-/*. 2/*|l+5/.-4.3-2-2/405-306Y e$|6(,35,2(|.-3-3,}2),)% f#)++/,2,1-103/4)0*1-4-4+2,2,2-2.113.9*.,-',!sf+|%+1/6/4/405-2-2/4/4.3+0.3-2.3.2/318)},#{+/9~!S+%-(*9+3)}-.3/4.3-2.4/5,2-3.4.4-5.5/5-3+~/$C$A,~*--,4,3+2-4-5,2.3-2-20505-2/4-2/416.."z%!X"~!4-})-3/416.3,2.4,1+0-3.3/4-2-2.3+/-5/41~5!( _r*1,1,104/2.104/3/3-1-004,0+/1414.5)2+-*-"2&w!c&+0*,3){4,005.3+0-2/9Xg&}9)-02&z,,2,2.4-4'/4~5%ev+**~/)~//4+/-005.5-4.5.5,3%x++005/30343++&3)6'q#_+~&+~2'y0,2/2.3/4.3-2/4/4-2-2*/-2-1-1,4+.'0*7!u'U+0+++2./-305-2.3-2.2/4-2+0-2/2/4/3&v*$r(33&A|+B7~.%0+4,4-5/6,3-3.3.305/4/4)~.*//4.3,1){2-~*+Ss":23+1.30505/4.2-1,1-2,1-2/4/4-2,0*2(/4}4*,#`r-3,1,1.2.00202/1-/,..103/2,//113,1)3-~223*. lh)62107*/,1-1.3,1.2-9[k'A,)+1-4,2*~/-3.3*,(}>K,({-,--3*/-104+1+3*2-5,4-4-1-004/5/4-4+.(0"BS,w+~%.4%z+)}./3/4,1.3/405-2+0-2-2,1-3'~.-//0*7+=J,_.}+*0(~1../5.3*/-2-3.3*/.3,1-2/3.2(|-)|-/31/*PR&Z/$/~9-0-1.1,2+2.4/4-2.3+0.305/4/4+0)--x5-{.*ZP!H31*0+0,1/4-2)0-3-2-2-1,2-3.305-1&|1&}373,10rE,2/3*.)~.,1+0,1/3-2/416/2/203/3-0,2*1-204*(5D!|543/6(.*/05/4.3.2+:b{l$~D.(+3/6-4*/.3'|-+,(>yN+/22-2)~.*/.3,2+2(/*1-5-403/3/4.4+~1'2.1+*,FH,*0515)~.*//4.3/405.3,1*/*/,1+0)0#y,00-,'}38J|Fi-}&&2&|1-}.*}0/5+1-2-2.3+0-2,1-1.3*/*/.406/.8T2_* 1402,~.+0-2,5-4,0-2-1*/-205/4+0,1-3-~.,~/:]+H1,-3+0%z**/.3*1.5-2.3/3-3-2,2-2+~0({/,51,%z+Gu-2/204-2*}0'{.*~1-3.5*~0-3.01403/2+.*}2-2,1,3${&R}~,//,~5*~..305+005/3);f~wl&D1,,5-4,3.3/4)1*4.1(@#?1/1405.3*/)~.+/-2/3.3-2,10415,2'|,'{,)0-010*1(:!~314+0,105,1*/-216.3/3/4/4-3-3,2(/*3030/*0&2%A,2-.&7*}121+1+0-3/4-3-3.4-3,2/4*0*/.3/4.4/2'.#:*341*1/4.3'{.(|0-5,3,2-3.4+1.3/4)~.+0/405)-25+4!:$,23/405-2*/)~.'}..4.4.3/3.4/4.4,1-315./&}(*0'6 {8.2/305/4.3+1*}0%y+-3.4.3.2/415-1*.,3-4-4(/.4#}8!~:-0'0+720-2*/*//4.2,''604/4.3.305-217.2&{++/06-2,1.3.305-1-+,}8N@Y10/5/4-2*//4/405-3-2,0.3/4-2-3/62.,5(:,,+w5 G.Y#,2,64-(3.705&z,-3,2*}..003-1-0,/)}//5+1({-,0,Fh_q-O)*14.3-2-2,1.3/4-2+0,1/4.3-2/4/4.3.3./(2$h,pp0a00/4/405/4/40505-2*/,1-2/4.3-2,1.3.4,3,0$s:2}~$94714+4-203.20303.1+0.3-2/4).-2-2/41605)~+#t`)}(~2)6'00305/4.305/4/4,1*/0505/2/20505-2*4(~:(q xe-.'7150505+0(}-*/0505-2/40516/4.3/4.4,804*G3~xj@,0/4/4/4+0+0-2/4.3)~.,1/405/4/4.4.0)2-5-3._!px"g)-1/730,5,416.3/4-2*0,3.4-2-2&z,'{-/5&z,+1.3-Fmr/Q''-1.3.3+0-216/4-2-2+0.305,1.305.2-504(+.,-,5,-*1-4.3.3/4.3,1)}/*~0'{--4.4.5/5-3.5/4/Hs0R&'/3+1-2-2(}-05.3.3/405,1-2-2*/05/4+409*+)9%A+}-*~0+1*~0.4/4,1.4-2-216+0.3.3.2+/)z-'4+1,~,N(8/1+|*,5*1+0-2,2*//4/4/4-2/4-2.305-2.3+/*,&\)v(+,}24~445,2-2.3/4,1,1/4.305.3.1,/+0,1+2,~)){.%r$n0(*|*-316/405/4.305.3-2/4,1,2)~.-2.3/5)-1*"C#|$R'~+*/.3(}-,1/4/405/4/41605/4050504.7+9(x)-'!M|.E00-6*0.3.2.1/30302.2,1,1+0.4.3-5.6-5-5*1/It3T'&*~..3-2.3-2/4-2-2.30505/4,1&{++0/3)1/5,.%>z.@/2)}/'|.*~0.5-2/4.3+0.3/405.3-2/4,0.3"0,/6.L'~$5.1,-,3/~5'|-*~0/6,2.4*/+0,1*/,1+0.3-2+0*/.0$d"w*4*4*,.0050504.3+0+0-2.3-2.203-0.3+0*~0.4-<id/.'5(|,.3-2-2-2)~..3/3.3.3/4.3.3/4-2(.*3:0%Ft)O/1+0+0/4,1,1+0*/'|,-2060405,1,1+1,-+2+{3){-)Q$w&B2..7'0,~1/2/2/2/2.1.1/3.1.1/203,5(~0+3.6)0.Fx-V),0/-2/4.3/4/5,3.4-4.4.5/405-2/4-3-,*?.,p}$---5.4.20505.3/3/4/4/4-2-205*/*//4/402,Py.X'~+0/.405+0/4-2.5-4.5+2+2-205/4.3/6.,)5.,8N[Ƥ,<(|+-2.3-2*~/-328-4,3,2-305/405-2+0+,'6...(5dV':5-&}1)8/-+1.305/4,1,3.4,3.5+1,1,0,1/4/4+-GmI*%75*:*/(|.*~0,2/5+1)0-4,3-4-4/4-2+0-204+2*(PF*$/4/4+0)~/+105-2*0-2+1-2,2*1.4*}0%w,.331+}0--WBe-,/5(|.+1(|.&{,/4,1031402+3*1-3-2+~00/*3*45,,@[Ğ5W (.0.6+/,0,1.3/4/4-2-2/416-2-3/4/4.3+0./*P{0Y%|(10/50505-2)/+2,3.5+2,3/405.30516+/+0/}6$~,x26/4,105,1*0&z,-3-3'}.-4+1.2/4/4+0*/2.(5)30-&/y,-084*|5(3..,2,1-205*/+2,2-406*|1*}0-205.3-303#~#v/1*44+;-4+1*~0,2/5.4,3/5-3,2+1)~.,1/4.3*.(2//#|,#}*0'*|6-1.3.3+0-2.1,0-1,0/2.3*~/*~/)}..3-1)(/}9.,y+,|.0/,3+106,2)~//5)~.-20403.4.4-2,1-41/*1&8.0/. z+&/0206/8),.2*/,1/405+0(}-,1.3*/+0/405/4-2.0/Tz4](,22/5/4/4.305-5+2,3.5-405*/)~.,1,0'0.4.<-52&/5-3-2-2)/*/+1)~.,1'z--4.4-1.3(}-+0,1-2)5*9*2000/---|/.~5.4.116-2(}-,105+2)/.4)|0){0+}0.30505-2-3-}22~7+114,4+2,2/5*~0+1.406.4-3/5,2*//416/4-1.7*5216.*.-{:-0.214-1*.,004-10414/3(z-)}.0504-2%3.<&4/3/3,3*1)0-4-4,3+~1.405041405-2+0-3,3-2,6*:*6122-/.,/-5+3*./3.3+0(}--2,1-2/4-2/4/4.3/405/4,.0V|3\%}*21,2.305/4&{++3.5(/,3.6-3/4'|,(}-+/-71}5*2'398%2,1-2-2,1(--4.4*~0({1-3/2.2,1)}.*//4)61112)3-510,2*2/./1,7/3/4+0(~.-3.3-3,3+~0.5,3/30405/4-5(691 5-412,4-3-3.4,2*~1*1,/+2*~1,20505/4,1.43/$5-631 134/2/20303.0)|.*~2+1/4.6-~2-~2,004.2+2*63,"37;,4'3*1,3-4,3+2+~1+1,3+..4-1*~.,2*1+3*50401(}2*602.0)2*1+007/4/4.3.405.3,10505/4/4,1-2/4-2+,1V|1]+~+04/4.305/3,1,2/5-3,2-3-2050505/4.514+.)24:(1-3-3-3-3.3*1*4+..|,a(c-)1.115,3,3+4//10-4-5/4-5+4*,,0-6,1,2+1,~0+|-V%*m-1/+4(0/5/5/5/5.4*1)22/'5.5.0-4.4/4/5+2+,*y(X+({+./.1/4/4,1.3061/)3,5.2&2210404/305/3.700k([(1}0+21505/3/3-3.30(*347*0*3-2+1.4.4&|-+~3*14-d+%j&.00405(~.-4-51231.2'1*0.4/6,2+/.60504/3/3/2-2/4/40505/4-2-2,1/4..0_{2`/}**3(|.-2.2.10316,105.3+0*/-2-2/4/40405,1.2.305-5-5-5,3-4,3(6021{,Q3,va*6.2,0,5)2-1.406/3.3/5-4/6-5-5.4-3,2-3/6)s']Q0zN()&3%w,,{1+3,3-4*1+2/4.403.305/4/4/4.3-211+}6&fi!|2.1-4-2,1+0-216,204/3/404,2-3,105/5/3*7.~.&}L]N*w,)5.2/4*0.305.3-4/3,2,10416*/%z*.3.4+2)65.'ugL*--05.305.304/5/5/405-2,005.3-4.5.2/1.1/2.1/31605/4/405/4*/+005-,.f|3a'v"+3&y+.3/4/104-2-205/4.3+0+0*/+0+00505,1-2/4/4-5+2,3+2)0/1+~4.2+|4(}f.u,:,2/4-4+1,1,1/4/4.3.4+2-4.5-4.5+1+0.208/{, c&0+}4-2-4+2,3-4-4.5.305.3)~.*//4/4160515)0"G2#D'~2(5-2+005/405-2.3/405.3,1,1.30505/3,5$w/a'{&7'1/3/4,1-2-2+0*/-2.3-205-2-2+0.3-2*/$6(1(#yj01.3-2-2-2-2.305-2/4-1,1-1'|,'~..5-0*-03/2.1/2-20505/4(}-.3/4-205/.1h~6d-|(,4-2.3/4,/.2+0.3.3-2/4/4.3.3.3,1/4,1.3.3,1/4-4*1*1/6'~0-)0/0-(0"h$t*}9(}/)}/,4*/+/-2,1-2(}-,2-5-4-4)0)0,3-2/2(|1)z+(a/~*0.(+(1.5,3*1+3*1,10505,1,1-2,105/4/3+/$F,$@/|,01,1-2-2.316.3.3,1.3.3/4.3,1/405.4/+2~/_#|&1,,/4/4.3-2/4,1*/-2.3-2/4.3/416-2/334(3,+"u#e01/4-2,1+0/4/4.3-2-2-205-2(}-+2,4/3,.*-.1.0/3+0.30505%z*(}-05.3/40/4l~6c-|(-517,1.303-1-2/4/4.3.3-2-2+0.305*/-2.305.3.3+3,3.5.5.6///1/+)/fp+5).*~.07)}0&{+/405.4.2-3,3.5-4,3*1,4.2+.)~1*2#~,\2*/,(+)4,2.5.5-4+2/4/4,1.3-2,10505-2+1//*B$'C2{*))*005-2)~.-20516/4-2.327-2-20505,1)+:/$Y#v.7.-(}..305/4.3-2.3-2.3-2/405+0.3.3-2/z3,32*$p#`*~+.305/4,10505-2(}-.3.3,1)~.+1-4-4/3/2+..1/21505.3,1-2,1-2,1.3/4.,6m~8e+z&*2.4/4-2/203.4.3.3/4/4.305*/-2+0-2-2.3,1-2/4+2,3.5.5-4+5-701%|1/)+/,.,/+|2*~1.3+0.305,1)/.4/6+2-4,4*3*--/.8-5+&d)--4*}2,~5-3-4.5-4,305/4*/+0,1/4/4,1+0,111'E+$M32%2(~..3-2,1.305.4/5/505,2.305.3+0+/#644)`/$};.4).)~./405/4).,1-2-2,2-2.3-2-2,1(0)~1*5++*/-/05/405,1.3-2/4/4/4/4+/,1.3-4,4/3-0,//203/3.305.3,1.305.305/4,*7p{:o*|'.4-5-4(0,4-4-2-2-2-2.3.3.3.3(}-+0,0-/03/2/2.1/4/4/4-1.3-6-/0+t6y`Ը+{".4.3-2+/+2+1/30202/2.3-4-3-2.3*|0+0,2,905M$y%-5(5*.,1.3.2-1-2-4*1+2+2-405-2)~.,1/5205[1i0#'5,3)~.*/-2/4-3-4-3/6,2%{,,~104,0)~,/202$y/K!I0*-4,1+0.3/4+3-4*1*1,4-3-205.3*/*~0/4..x.kҧt%{--2,1,1/4,1+0-2.305/4-2.3.3.2.2.5-5+2+3-4.4.3/405,1.3/405/4.3)|&6x{,U.84*-5.3,1*/.4+2+2*1+2-5.3/4.3,1.3.408321/5D,K+1,1.3,105-2/405+0,1.3-2.3.3-2-2-3+2)0*1,3.416.3*/,1.3.305/4-2/-8y};p){%-4-5-4.5+2,3/3,1,1/4,1+0.3-205-2,1-205/4%z*.3)~.)~./405-3/},,0*4,{,-|'/.+1,1.30505,2)~/*0.3-2-2-2/4*|/*z0+z0.1.0+-,0+3.,0,.1,6+~/.0-3,1*/.3.3+1/506.4,2+1*/-2/4/3*5'//z .-'5/41505-2)~.+016/4*~/+0/4.3*}/)~.(~.-2-1'5103-)~/-.0/.4.3-2,1)~.-3,2,2*0.406-2+0-205,2)3.401,})*|#-2+0/4/4/4-2*//4+0-2/4,1.3,1-2-1.4+2.5-4,3-315-2)~.+0-2-2,1-2-2+~)8y;q&x#-4-4-4*1.5-4-2/4).,1-205.3.3/4/405.3+0(}-&{+-2,1.3/4/4-32+*~,(8&{3(6(50305/4.3/4-2+0)}/*~1.5-4/5-3,~1-2)|/.303/1-1-214'~4%6)0).(/16.3+0*/,1.4.4.4*~0+~1/4.3.3+004*5$20,/3'8)905/4.3-2+0,1/4-2/4,~2#v)(}/06,3,2,2#4(4/2-.&/,604/4*/-2,1*~0+1/517/6+1,0,1,105.3(0(4(4-515/4,1.3/4-2/4-2-2,1-2,1(--2+0,1-2,3-4-4.5-5/50516-2,1/4/4-2.3,1*}(=}~Cv(z$-3,4-4*2,3,2,1-2&~+)/,105-205-2*/06.4+1+1+2/50505/4.304/7(4+511-3'2/3,1.3-2.3-2-1-4({1,5*x*/y2&u-,2.3+1-6,1.0-1,3-0&5,36+/3(5/2.3,1+0,2)~-&y%+2+~1.4.3/405.2-211-2''y'.3+0+0*/05+0+0.3/4-205-2/4,1/4-2*/*/,1/41605-4.5-4.5,3-205-2+0,1)~./4*.(~.,3-5.1+5,0+1%E"&F,}2 |*03.4-4,3*1(/-4-4-4.5,3-4-3/405/4+0*}*&`%,5-020,3.5,3.5,3-3/40505/4,1+0/416-2+/.|2.1"yf,z*-y..3.3/4-2-2-2.3.3-2/4+0,105/4.3/3.13}/'G#-H+2/305.3.3,1-2-2-2-2.3.3+0.3/4.3/4.3,1+005/4.305/4,1,1/4.3,1.3*/-3-4+2.5+2,3/2-1.305,}(AA&y&-3.305*/,1/4-3/5-3,1,205.3-2/405*/)~.-2,1+0.3,3-4,3+2,3-3/3/4/4/405/3.3-3-4,3+1,5/0-2#D})?43)/03)2)0.5-4)0+2,4*1'/*1,3+2/4/4+0+0.-%Yw.5.4.}0'0,3.5,3+2.50405/4/4-2-30516*~/+0,4)-!v~_/++1+0.30505-2.304/4.305.3.3/405-2+/+.52&F~,E*0.2,1-1/4.3/4/4.305/4)~.,105-2,1.30505+0+0-2+0/4.3/4.3.3/4/4/4-1.4,3,3.5-4,4/2/2/405+{'CA&w'.3.3.3-2,1'},)}/-3-3+1.416-2.3,1/405/4/4/4*/*/,3.4-3,2-3.4,1.4.4-3/5/4-3-3,3,302)5--+*5^u$>-*-2,~3&-.406-4,3.4.4.4,3-4,3/4.2+0,1.2)~+F_ƽ|1.502)/+2-4-4-4*1.4/5-3/3.206.4-3+1/5,2#4^µH!{..1-2,1.3.3-2/405.4*}/-205.4-2-2'|,+1&4+((Oe:a'/-2,2.4.4+105(}--2/4.3/4-2.305-2-2-3/4+1)/,2-2/4/405.3/4-2+0.3.305.4-2-3.3.4/3-1,1-2,}'D:)y+.1-2,1-2/4-2-2-2)~..305/4-2/4/4.3-2.4.3-3-2*/)}--2050505-4,4+2*1-5-5.5-4,3+2'~.2.%8*//&3b|}B'(*2-:++(|..41706/505/4/4.3+1(~-)}.,1,1,0%|+HjȮ{22243/2+0+00505,1,3-3-2-1-1.4)}/*~006/71."~;`śL {65-,3,1+0-2/4/3.3.5*~1+//305+0*/+0.6+82%,JoԴ6](/-4,3-5,4.4-2.3/4.305/4.3.3/4.2,2,3-4.5-4-4.2,1,1/4050505/4-2.3.20203.0,/.0/5/4-205,&D?(x*.1.3-2,1,1-2.305+0/405.3.305/4/4,1'{-/4-2-1+0+0,1/4/4-2-3,3,3,3+2+2)0,3-4-3.4/0(9+24-$6y5)31.,6+6//,3*~0,2/506+0*0.3.3-2)}.,1/4-2-2.12&){5110/)8,4/4,1+0/4/4-1.2,1-5,4,1+0.3/4.315+~2"}*)(/-3~6.4-2,1+0.3-2*/,3-4,1-1.3*/,105052-:2+2}-0103-5-4*1-4-3,1,1050505+0,1.305/4-3-4.5-4+2-4/4-2,1-2.3.316/4,1)~.-115/3,0/3-1.3/4/405,~%HA$t&-1+1,1+0(-).+0.305.3.3+0/4.3+0-204(|..3-3,1.305/4-2-2.3-3*2,3-4)0+2,3-4.5+2-3.2,9,4/,.-+./,30+7*4./-4-3(|.,2/5+0/4+1){.+|0-3,2-3-3*0-10-)2-32/)1)0+0.3+0*/,013/2-2,3+~3)~.,105.3/5,0)//443*,)0/4-2/4,1*/+/-3,4-4-2'~,+0-2.3/404-/0;,5**2106-4-4*1+2*1/4.3.30505-2-2.3/4-2+1,3-4,3.5.4,1/405/4.3*/-2/4.3/4/405/4+016,1'|,.305.3){"IE(x*/2+0.3-2*/,1.3,1.305-2/4/4.3,1,1(|-+1*/+1-2-2.3-2-2.316-4.5+2*1,3-4/6-4.5.5.5.6.3.3+100--11.3'2,503*~006*~0'z,-3/~4.}3,~1,1.3,2'~.+2-4.5-5(;#0*:0.--.4.305/4+0)~..3,2.4*~0,2,/03/2/204*+(1,~<-9)1(1/4-2/405,1,0+~0+}2.5,1'{+.3/4.3.3.3(3(8*5,0+4,5-4-4,3+2*1/4.3)~..30516-2/4.3-2-3-4+2)0-4,2*/,116/4/4/4,1/4-2/4.3,1(}.*/.3/4+0+0+0-2(z!LI'x).2.3,1-2+0.3/4.305/4.3.3.305)~.+0+0-3.3.3-2-2-2+0+005-2*1,3,3.5.5,3-4,3,3)0.5.810-/(5-6*3)|2-6(1*306,2.4/5,2-3"j%#l%.~4(~-+2,3,3-4-4-4,425,(.;11+0,5/4/405/4,2({0k'{,.2/20303/2/203031502+*.4.:.2+0-205/403-|2m%k"-|2/3/4/4.3-2/405+-/2/|6(3+3.5-4+2-4.4,105.3-2.3-20505-2+0.4-4+2,3,3-4/4/4-2/4-2-216/4)~.*/16+1+~1/5*~0/505/4/4/4){"PI$y,,1+2.5.5+2-4-2,1,1-2,1.4-3-3,2+~1,1/4/405,1,1/4,1.3-2,1+1,3/6-4.5,206.406*~0,205/4/4-2.4.5)0-4.5-4*1-/030607-,fa)}]/1-603-2,3,3,3+2-41516/4/4-2,1/4/4-2+/.2)|?u{'|<30+2,2.5/6-4+2.4.2-1-1/4/4.3.3,1.3-2-62-"~`g`)}*06+2-4,3-5-4.2,0-1,104.3-2+0,1,1-2.3/4-2-205/4.3.3/4.3,1.3/405,1-2,3/6+2+2*1,3.5,3-5-4,3*1,3.5+2-4,3*1-4.5'{!JJ#x+.3.6,3.5,3+2-2,1-2.3.2+1,1.4,1,1-2-2/4/4,1+0.3-2/4*/.3.5,3+2,3-4-3+0,2-316)~/+0/405/4/3.4.5.5-4+3${+-0.2,1.5,,#y.b+-/6-/-2.5)0,3)0.5/3-2/4-2/4/4-2/4-2/4,1+B))?.|,*1,3-5-4*1,3.4*/,1-2'|,/405/4,1/4,1-6.('f)u01-3-4-4-4,3,3+0+0/4.3/4.3-2,1.3,1,1-2/4/4/4/4,1+0*/,1.3+0.30505/4.3,3.5.5,3-3-4,3,3.5-4.5.5.5.5.5.5,3+2-4,3({!MM%z--2+3,3-4-4+2,1.3.3.3-2.3.3/4,1-2-2(}--205-2/4/4,1-2-205-3,3,3,3-4-4-2.3+1.3.3-2*/,105/3,2,3-4,3-4-3/2/3-2*2-,")b*+-2+/-4-5*1/6-4+2.3,1-2-2.3.3+0-205.2(-(A$'B-},+1.3-3,2.4.4.3/405-2*/05/4,1+005.2+3-($g)z.2+2,3,3.5-4.5.2.3050505.3-2+0-2.3,1-2/4/4/405+0,1.3.3/4,1-2/405.3-2-4.5.5.5.5,3*1-4-4,3+2,3-4,3+2-4-4.5.5*1&yOQª%z-+1)0,3,3,3+2*/*/,1,1',/3/2-0-104/4-2.305.3.3/4/4.3,1.3,2.5-4-4,3,2/3/314.204.3,1.3.3.3-3)0,3-4-4-3.10316,3/-|$`+*-0,/+3,3,3-4-4)0/4/4*/,1-2/4-2.3-2+0-2*E$C//).,1.2.3.3/4.3.3-205/4.3/4+0.3.3*/,23.d u'.,4.5-4.5*1,3/4/4050505.3.3,1-2/4.3*/(}-.3.3.3/4.3050505/4/4.3-2-2,2)0,3+2+2,3-4+2(/,3-4-4,3,3(/(/,3,3,3-4-4'z PTĬ'|0,2*1+2.5*2-3.3-2,1.3,1.10202.10203.3-2-205/4/4/405/4-2&}--5.5+2,3*0/2/202/2.0*/-205*/-2/5.5-5-4-5,3/203-3-41/&(g+)/2*~/)~1+2.5-4+3+2/304/4/305.3-2(}-)~--1*1,H-"B.1/1+/*//4,0-205.3)~.-1/40505*/*/,1,1052,!l-)/+4+2*1,3*2+2.2+0,1/4.3*/.3,0-2/4,1,1/405.3/416/5/4/404/4.3.3.3)~./5,3,3-4,4*2.5-4+2+2+3.5.5+2,4+2*1)1*1*1-4)|"S÷Nó&~-05,2+1/5)/.3.3.3.3/4/4/3-1.2.204,1-2.3.3.3.3-0/305/4,2)~.+1.3.5/6-3.2.3,0.3+/+0.3+0,1/405/5,2*0/4*0-1-1,1.5)~'Rx%1--0*2*/-3.4/4,2+4+4)0-3.4.3+1%y*)}/06,.3P2\(&(~3*}2)}0,1/404/2/3)~2)}2-3,/16-2&{+*//427!,U&=(,-3.3+1-3,2*/-2,1/4/3+1-4,2+2.4,2.5.4+1+0.3.2,/+0/4-205+0,1/4'|,.3.4/5/5/5-3/506,205.4-3.4/4/5/5(}--.,4-5-2'|$UƹNŹ&+16-2/4.3(}-+0.3/4,1.305/4.4/4-3-2+0/4-2-2-2.2/1/205+0)}0.3+/-2.4-4-3.2-3-2+0-2/4.3/405/4.3-2.30505/3,2,1.3.4+-+V*H+/2.-3,5,0+0.304/4+3)1'~./5/5+0+1.4-3,222(7,\'<4)+3*~4*~1+1,1/303+0-4/6,2-2-2+0,1/4/411(.&?5['70.17,1,0/4-2)~./4-2-2.3+1+2+2,3,3,3+4,3+2.3,1/2/20505-3-3.3-2.3,1-205-204,1,005.3-2.3.3/404/4/4,0-10/,3)1,0$y#UƹQǻ$}*0405+0,1-2,10505,1+0)~.+0/4.3.3/4-2-2+0-2.3.303-0.3&{+,215.3-2,2,4-3.2.3-2*/.3/4.316/4.305-2.3/4.3,1+0,1,1.2,24*5.//.3+2-2-2,1+0.3/4,0.2.3.3+~1*/-2/4-2-22625*,6/82+0-4-3.3+0-1.6-4-./0.3+3*.+0/416.3.23/4./~32300.4.3.3*//4,1.3-2+0/4+2,3+2.5.5.5(~0(.-4.3-203/2/4/4-3/515.3-2/4/4/4.3-2,1.3)~.-2.3+0-205.3-2.3.3/4/0,3*1+0$x$XɼT˾&~+/3.3-2.3.3/4/405)~.*/-2-2-2+0.3-2-2-2,1-2-2-2-/+.-2+0-4+/.3,1*0.5-4,1-2+0).,1.3/4/4/4/4/4+0&{+.3.3-2,1-2+0-2,213,4'6)3.,32-3.3.3*/-10527/5,3+2/40404-2/2.7-8*#411<%4/304-1.3)~-+2/40213,1)|0*/-2/4-3/3&8.52..-+2*3.3.3/4,1.3,1.3/4+004.4.5,3,3.5.6,4'~.-4,0.303/2/4,1'{-)~/05.3.3-2-2.3.3.3/4/4.3/4/4-2/4.3+0/405/405.2+3.4*.'y)]X&+04+0+0/4/4-1/405*/.3.305*/,1.3.3.3,1.3-2.3,1,//2+0,1,2,1/404+1-4-3.3.3,1(--2.3/4/4*~/+0-2*/)~.050505-2.3+0-2-2'6+8-6.3/305+0.3/4,1,1(u1 o&,~5*~0-4/30203+.-/-3+3)}/(3+6/50102/2/3-3+/+1!r)'x1-4.20505/3,1/3)3+6,503+3+4-2/4/4+00505/405/4/3.5,4+2,3,3,4-5,3-4-2.303-0.3.3-3.3+0.30505,1.3-2.3160505.3+005.305/4.3/4-2.3.3,4,0+0%v)\Y&~*/5.3/5,1+0,1/4/4/405.3.30505-205/4*/.3.3+0+003/3/4/4,2)}./404,2,3,2).,1.3.3-2.3/4/4.3*/+1-2(~.*/,1-2,1-2.3+0.3.1/-4/22*7+7-1,1/405.1%r<o?){2-4.4/303-1-1.2-...1;+6./7103/204/4/5.0-3"sCm8+}4.0/5.3.3.3,21/+1+4030013.3.3/4+0,1/5/4.4.3+0.5-4-4+2)0,3.6-4,3.3/3.2.2+0/406.4*/+0.3.3.3-2,1/405/4/4.3-2(}-)~.-2/4/4+0&{+/4)|/'|0-1-2$w*^X*,-5+0,2-2.3,1/405.3/4-20505+0,116,1/40505.3.3+0,105/4.3-2-2.3-1.2.3.4-2/4.3/4+0,1.3,1.2/5-4,3.3+0*~/16/4-2.3/4+1+1/5.4/3/3.3*/-2.3.*#V%).+6*4)0/4.305/5/4.4/405,1-3.6,4,4+2*1,129%yV-}0,3-4.5-5+2*206.3&{+.4.3.3.3-2/4/3+1-5-4+2)0'~.,3-4/6+2'/-4.4+/*//202-2-2-2/4,1,1-2(}--2-2,1.3/4/4'|,.3/405.3,1/4.305/4.3/404.4(6,200"z(\[(+.5+0,1.3,2.3.3/4/4.305.305.3(}--2.3/4-2.305/4/4,105/4/4.3-2,1.3-2-205/4.3+0-2+0*/-2-2+0,2+2,3.3-2)}--2/4-205-2+005/4,1,1-2-2.305.30-*U()-+2/5*0.3/405,1-2/4,10505/4-3,3.5,3,3)-.~4{,Z./+1,3-4.5,3-4/4.3-2.3/4.3-2/4.3+0+0,3+2)0+2,3+2.5,3-4,3.5.3.3-2.1.1.3-2+0,1,1,105-205/4/4/4.3.3,1/4,105-2-2.305-2,1-2/4,0,1)6-2./v'_]'~**1,1.305-3/5/4+0-216/4-2/4.3-2-2/4-2.3-2/4.305+0&{++0/4.3.3.3.3-2.3/4,1-2*/,1-2-2+0.3-2*0,4.4.3*/+/*/.3/4/4.3-2-2/4.305.3,105/4,1+)'U'-0*0/|2,1.30505/4-2-2+01616,1+1.305-2(}-(*17y)Z/2,/,3,3,3-4-4.3/4.3-2/4.3-2.305/405,3-4.5.5,3*1-4,3+2.5,3,1.3.3/2.0-2.3,1+0*/*//405.3/40505/4.3.3*/.3.3+0-2-2/4*/(}--2/4+/+/*5+001"y+b`*,,3,0,2+0*0+0/4*/+005/4/405/416/4.3.305,1/4/405.3&{+-316,1-2,1+0.3,1/4/4-2,1+0.3,1-2.3+0+1-4.5.3+0-2-2/4-2/405/4-2.3/4/4.3.305-2.30.V|*1.50~1).-2050505,1,1-2/4.3/4+005.3*/+/-0/8v!W,2(-,4.5-4.5,3+0,1/4,1-205-2.3/4/4/4-4-4.5.5-4+2,2,2*1-4+2+~1,1/403/2-2-2-2+0+0(~-*//4.3/4/4-2,1.3.3,105-216-2-2-205*/,1-2-102+6.202#z.ea*,/6,0-3/4&z,)}/16,1+0/405.3-205,1,1.3.3/4(}-.3.3-20515.3-2.3-2.3-2*/).05/405.3-2,1-2.3.3.3-3,3-4/4050405/4,1*/0515160505/4/4,1/4.3.3*(Efw(,635(-*~/,1.3/4.3.3/3*~/-204/3.3%z**~.-1)-0DAGDJFMJPLROURXUZX^[`]bafchfkinkqntqvtyw|z}šÜŠǢȥʧ˫έϰвҵԸֻ׽Ļ׽ҶίɧŠv|otgm`eX^QWJOBH:A3:-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-406395<8?;A>DAGDJFMIPMSOURXUZW^[`]c`fchfkinkqotqvtyx|z~|šĝŠǢȥʨ̪ͭϰгҵԸֻ׽ĺ׽ӵϯɧşw|othm`eY^PVJOBH:A3:-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4073:6<9?;A>DAGCJFMJPLRPURWUZX^Z`^c`echfkhnlqntqvtyw|z}šÝşƢɥʨ˪ͭϰѲҵԸֻؽŻ׽ӶίʨƠw|otgm`eY^QVJOBH:A3:-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-407395<8?EAHDJGLIPLROURXU[X][`^c`echekinkqosqvuyw{z~}šÜŠǢȥʨ˪ͭϰвҵԸպؽŻ׽ҶϮʧŠ~v{othmaeX^PWJOBH:A3:+}0,1-2.3.4.4-2+}0(s-'q,)v.*{/)x/*y/+}0+}0*z/)x.)y/)y/)y/*z/*y/)x.)w.)w.*z/,1,1+~1+}0+}0+}0*{/*y/*y/*y/)w.)v.*z/+~1,1,1,1+~1+~1+~1+}0-4062:6<9?;B>EAHDJFMIOMRPURXUZW]Z`^c`fcifkinlqosqvtyw|z~}ĝƠƢȥʨ˫ͮϯгҵԸֻ׾Ļ׾ҶίʧƠw{otgl`eY^QWJPBI:A39+~1,1-3.3.4.4-3+}0)v.)v.*|0+~1+}0+~1,1+1+~1+|0*|0*{0*{/+|0+}0+}0*z/)w.*z/,1,1+1+|0)x.$h(Z#S OP\##g((v-*|0+~1+1+~1+}0*z/)x.*z/-406296<8?;B?EAGDJGMIPLROURXU[X][`^b`fchfkinkqosqvtyw{z}šÜŠƢȥʧ̫ͭϰѳӵԹֻ׾Ż׽ӶίʧŠ~w{othm`eX^PWJPBH:A3:-2,1,2-3.4-3,2+~1*{/*|0+1+1+~1,1+1+}0+~1+1+~1+~1+|0+}0+1+}0*z/*z/+~1,1+}0(u-R.      $-2J%l*+}0+~1+}0)x.(u-*z/-406395<8?;A>EAGDJGLIPLROURXU[X][`]b`echfkhnlposqvuyw|z~}šĜŠǢɥʨ̫έϰѳҵԸֻؽĻؽӶίʧƠ~w{otgl`eY^QWJOAH:A39-3-2,2-3-3-2,1,2,2,1,1+~1+}0+}0+~1+~1+~1+~1+~1+~1+}0+|0+1+~1*z/*z/+}0*y/M !  $.J)y/+~1*{/*z/+}0-407396<8?;B>DAGCJGMIPMSOURXUZX]Z`]b`ecifkinlqosqvtyw{y~}šĝşǢɥʨ˫ͭϯгӵԹֻؽŻ׽ҵήʧƠw|ptgm`eY^QWIOAH:A2:,1,2,2,2,2,1,1-3.3-2,1+~1*z/)y/+}0,1,1+~1+|0+}0+}0*{/+}0+}0)x.)x.'q+3 ):'q,+}0+~1,1-4/62:5<9?;A>EAHDJGMIPLROURXU[W][`^caechfkinkqntrvtxw|z}šĜŠƢɥʨ˫έϰѳӶԹջ׾Ż׾ӶίʧƠv{othm`eX_QWIPBH:A39:U!'r,*{/+}0,1-2-3-3-3,2+1*{0*z/+}0,1,1+1+|0+|0+|0*z/*{/)y/(v-&o+ ' !#2((9-%6*-#  '4$i(V!7-4073:6<8?EAGDJGMJOLSOURXU[X][`]c`fchfkhnlqntrvuyw|z~|ÝşǢɥʨ̫έϰгӵԸջؽĻ׽ҶήʧƠ~w{othm`fY^QWIOAH:A2:=MS "s+~1,2-2,2-2,1,1,1,1+~1+}0+~1+|0+}0+1+}0*{0*z/*z/)y/H  5KDAHDJGMIPLROURXU[W^[`]c`edhfkinkqnsqvtyw|y~}šÜşǢȤʧ˫ͭϰѳҵԸֻ׾Ļ׽ҶίɧƠ~w{othl`fX^QVIPBH:A3:+~1pl!$l+~1,1,1,1-2-2-2,2+}0*z/*|0+~1+|0+}0+~1*{0*z/*z/)y/&p+HfR^lkztǿȱȨƾqgvZhD`O@Ow}jm's,-407395=8?EAGDJFMJOLSOURXU[X]Z`^c`echfkinkpnsqvtyw|z}šĜşǢȥʨ̫ͭϰѳҶոջ׾Ļ׽ӶήɧŠ~w{othm`eX^QWJOBH;A2:,3!!%a+}0+}0,1,1,2-3-3-2+}0*{/+}0,1+}0+|0*{0)y/)y/*y/)x.GPq\fuuƻڥƼ~paoGeV>Ks{ ~V#-406395<8?EAGDJFMIOLROURXUZX]Z`]b`fchfkinkposqvtyw|z|ĝŠǣȥ˧̫έϰѲӵԸջ׾Ļ׽ҶίʧƠw{othm`fY^QWIPAH;A3:*:!!&Z*|0*{0+~1,1,1,2-3-3-3,2,2,1*{0)x.)x.*y/)y/)y/)x. $ JiUl||׊vcrBt~o{ I%-4/7295=9?DAHDJFLIOLROURXU[X]Z`^cafchfkinlqntqvtyw|y~}šÜşǢɥʨ˪ͭϰвӵԸֺؽĺ׽ӶϮʧƠw{otgl`fX^QWIOBH;A2:(I !(L*{0*{0+}0+1,1,1,2-3.4.4-2+~1*z/)v.)w.)y/)x.)y/'r,0F7l{ۊwW${ J3-4/73:6<9?;B>EAHDJFMJOMSOURXUZX^[`^b`fcifkhnkpnsqvtyw|z~}ÝşǢɤʨ˪έϰвҵԸֻ׽Ż׽ӶήʧƠv|othm`eX^QWIOAH:A29+`dK)@+|0+|0+}0+}0+~1+~1+|0,1-3.4-2+~1+}0*z/)w.)w.)x.*y/#f'  cqac"ΊqWdZL-4/62:6<9?DAHDJGLJOLROURWU[X][`]c`ecifkinlposrvuyw{z~}šÜŠƢȥʨ̪ͭϰѳҶԸֻؾĺ׽ӵϯʧŠ~w|otgm`eY^QWIOAI;A3:2gva+~4*{0+|0+}0*|0+~1+~1*z/*z/+~1,2,2+|0*{/*{0)y/)x.*z/*z/!b&/D5xͶ2,  䈼nw [O-4073:6<8?;B>DAGCJGMJOLROURXTZW][`^c`fchfkinlpntqvtxw|z~}šĜŠǢɥʧ̫ͭϰѲҵԸֻؾĻ׽ӶήɨƠ~w{otgm`eY^QWIPBH:A29+}11a.L+}0*|0+}0+1+}0+}0+~1+|0+|0*{0+|0+~1*|0)x.)x.)y/*{/*{0)x.!a%Uvaȳ  +"¹yJ|3-407396=8?DAHDJGMJOLROURXT[X][`^baechekinkqntqvtyw{z~}šĝŠǣȥʨ˫ͭϰѳҵոֻ׽Ż׽ҵϯʧş~w{othm`eY^QVIPBH:@29)x.*y/*{0+~1+1+1+~1+~1+~1+~1+~1+}0*y/)w.*{0+~1+|0)x.*z/+~1+~1*z/)q.r!  Мɲds8-407396<8?;B>DAGDJFMIPLRPURWT[X][`^c`fchfkinlpnsrvuxw|z~}šĝşƢɥʨ̪ͭϰѳҶԸջ׽Ļ׾ӶήʧŠw{otgm`fY^QWJPBH:A39)y/)w.)x/*|0+~1+1+}0+~1,1,1+~1*{/)w.(u-)x.+~1,1+~1+}0+1,1,139ǰ  0&Ēu R$-407395<9?;B>EAGCJFMJOMSOURWUZW][`]cafciflimlqnsrvtyw{z~|ÝŠǢɥʧ̪έϰѳӵԸֻ׾Ż׽Ӷίʧş~w{otgm`fY^QWJOBH:A39+}0*{/*z/*{0+}0+~1+~1+~1,1,1*|0*y/)x.)x.)y/+}0,2,1+1+|0+|0+1:AϷ" ΕؘƮ})j.-4/7396<8?;B>DAGDJGLJPMROURXT[X]Z`]c`ecifkinkqntqvtyw{z~}šÜşǢȥʨ˫ͮϰѳӵԸֻؾŻ׽ӶίʧƠ~w{othmafX^QVJOBH:@39+~1+~1+|0+}0+~1,1,1,1+}0%k)M<68BQ&p++}0+~1+|0*{0+}06=ս&ʳ39-407295<8?;B>EAGDJGMIOLROURWUZX][`]c`fcifkinlpotrvuxw|z|Ýşǣȥʧ̪έϰѳҶԸֻؾĺؾӶίɧƟ~w{otgm`eY^QWIPBH:A3:+1+~1*{0+|0,1,1(u-K " .[#+}0+~1+}0/5,#ζ~/5-4/72:6<8?;B>D@HCJGLIPMROVRXUZW]Z`]c`fchfkinkpnsqvtyw{z~}šÜşǢɥ˧̪έϰгӵԸֺ׾Ż׽ӵίʨŠv{othm`eY^PVJOBH:A3:+~1+~1*|0+|0+~1R  0$i(+}0,1ζo-3-4072:6<8?DAGCJGMJPMROURXUZX^[`^c`fchfkinlposqvtyw{z~}šÝŠǢȥʨ̪ͭϰѳҵԸֻؾĻ׽ҶίʧƠ~w|otgm`fY^PWJPBH:A2:+}0+1+}0(v-B *$4)$5*!1&   \#,1cq=7SOacҜʲVb,2-4/72:5<8?;A>DAHDJFMIPLROURXU[X][`]cafchekinlpnsrvuyw|y}ĝşǢɤʨ̪ͭϰгҵչպؾĻؽҶήʧŠw|otgm`fX^QVIOBH:A39+1,1)x.@  +@1FcQTw`Y}fZg[hY}fVycNnZ7O?'   [#=E?:  ǒ9@,2-4073:5<8?DAHDJGMIOLROURXU[X]Z`^cafdhfkinlpnsrvtyw|y~}šĝşƢȥʧ˪ͭϰѳӵԸջ׽Ļ׽ӶήɧŠ~w|othm`eX^PWJPAI:@3:+~1+~1J  %9*NnY\iewm}qstsojy`nTp`7O?    &n*yqu )ab   agҨؿiw-2,2-4062:6<8?;B>EAGDJGLIPMSPURXTZW^[`^c`edhfkinlqotqvtyw|z}šĝşƢȥʨ˪ͭϰѳӵԸֻؾŻ׾ҵίʧŠw{ptgm`fX^QWIOBH:A39+}0#e',  7P?Z~gixszui{x[lhH^R$1:A+     94ΐ¤5<,2-2-4/73:6=8?;A>EAHDJFLIPLROURWUZX]Z`]c`echfkinlqnsrvtyw{z~}ÜşǢȥʧ̪ͮϰѳӵոջ׽Ż׽Ҷήʧş~w{otgm`eY^QVIOBH;A3:+}0=   ;VCaor~ԣʹl|NcY#"c&R^  +"פԻJT-3-3-3-4/72:5<9?;B>EAHDJFMIPLROURXU[W]Z`]caechfkimlqnsqvtyw{z~}šÜşǣɥʧ̪έϰѳӶԸֻؽĻ׽ӶίɧƠv|pthm`eY^QVJOAH:A2:%k)0/G6drwըџtKcU ;,1]jvz  ۨQ\.4.3-3-2-406396<8?;B>E@HDJFMIOLROURXU[X^[`]c`ecifkinkposrvtyw{z}šĝşǢȥʨ˪ͭϰѲҶԸֺ׽Ļ׽ӶίʨƠ~w|othm`fY^QVJOBI:@39S **`nyŰw~\^]`ɒp6O>  +}0+~1MWӿ %|ؚϯDM.3.3-3-3-3-4063:5=8?;B>DAHCJFLIOLSOURXU[X][`^c`fchfkimlpotqvtyw{z~|šÜşǢȥʨ˪ͭϰѳҵԸֻ׾Ļ׽ӶήʧƟ~w{othl`fY_QWJOBI:A3:D 'EcOuƯIF   z z ~ QS޿ˍc~q"'s,+~1,129o}۩iw28-3.3.3-3-3-3-407396<8?;A>DAGDJFMIPLSOURXUZW][`^c`echfkinlqotqvuyw{z~}šĝŠǢɥʨ̫ͭϰѳҶԸֻؽŻ׽ӶήɧŠ~v{otgmafX^QWIOAH:A3:<3jyë/&        !ٓz1J8"d'*{0+}0,1,117Ua|ִ̥״̥pP[18-3-2-2-3.3-3,2,2-4063:6<8?;B>E@GCJGMIOLSPURXTZW][`^c`fcifkinkqnsrvtyw{z}šĜşǢɥʨ̪ͭϰѳҵԸջ׽Ļ׽ҶίɧŠ~w{othm`eY^QWIPBH:A2::3V;zл81   NMzWX   ޕӍ[~h"d&+}0+~1,2-3-3,2+}0+}0,1-3,2+|0+~1-2-2,2-2-3-3-3-3-2-4073:6<8?DAGCJGMJOMROURXUZX][a^cafchfkinlposqvtxw|z}™ÝşǢȥʧ̫ͭϰгҶԸֺ׽ĻؽӶήɧŠ~w|othm`eX^QVIOAH:A3:FLrWȰty   ;6TT  ) ëu+y1-2-2-3-3,2*{0*{/+~1-2-3-3-2-2-2-3,2,2-3-3-3.3.3-407295=8?DAGCJGLIOLSOURXU[X^Z`]c`echekinkpntrvtyw{z~|šÝşƢȥʨ̪έϰгҵԸջ׾Ż׽ӶήʧƠ~w|otgm`fY^QWIOAH:A3:Q\iй   604-  ܑ˝̳6=,2-2-3-2+}0*z/+}0,2-3-3-3.3.3-3-3-2,2-3-3-3-3-3-407395<8?DAGCJGMJPLSOURWU[W^[`]c`ecifkinlqosqvtyw|y}šĜşƢɥʨ̫ͭϰвӵԸջ׽Ż׽ҶίʨƠw|otgm`eX^PVJOBH:@3:#e'fuor    adܣҺ7?,1-2,2+1+|0+~1,2-2-3-3-3-3.3-3-3-2-3-3,2,2-2-3-4073:5<8?;B>E@GDJGMJOMROURWU[X]Z`]b`fchekinlqosqvuyw{z}šÝşǢȥʨ̪ͮϯвӶԸֻؾź׽ҵίʧŠv{otgl`eX^QVIPBH;@39,2hvŭ'  ]^  ON־6=-2,2,1+}0+}0,2-3-3-3,2,2-3-3-2,2-3.3-2+|0+~1-3-3-4063:6<8?;B>EAGDJGMIPLSPURXU[X][`]c`fcifkhnlqntqvtyw|z}ĝŠǢȥʧ˪ͭавӵԸֻ׾Ļ׽ӵήʧƠ~w{ptgm`eY^QWIOBH;A39-3drǯ    Z\06,1+~1,1,1,2-2-3-3-3-2-2-3-3-2,2-3.3,2+}0,1-3-3-4/73:6<9?DAGDJGMJPMRPURXU[W]Z`^c`fchfkimlqotrvuyw|z~}ĜşƢȥʨ˪έϰѳӵԸֺ׾Ż׽ӶϯʧƠ~w{othm`fX^QVIPBH:@39-3R]ŭ  y~ ׿{+}0+~1,1,2-3.3-3-3-3-3-3-3-3.3-3-3-3-3-2-2-2-3-3-407396<8?;B>DAGCJGLJPMROURXU[X][`]b`ecifkinlqotqvtyw|z~}™ĝşǢɥʧ̪ήϰѳӵոֻ׾Ļ׾ҶϮʧŠ~w{othm`fY^PVJPBH:A3:-2;B  *ӤӻZg+}0+~1,2-2-3.4-3-3-3-3-3-3-3-3-3-3-3-2-2,2,2,2-2-4073:5<9?DAGDJGLJPMRPURXU[X][`]c`echfkinlposqvtyw|z}ĝşƢɤʨ̪ͭЯѲӶԸֻؽŻ׽ӶίʧƠw{ptgl`fX_QWJOBH:A3:-3-3u־A=  z UTΙȰ2v*~5,1,2-2-3.3-3-2-3-3-3-3-3-3-3-3-3-3,2+~1,1,2,2-4073:5<8?;B>EAHCJFMJOLROURXU[X^[`]caechekhmlqntqvtyw|z|šĜŠǢȥ˧˫έϰѲҵԸջ׽ź׽ҶίʧƠw|otgm`eY^QWIOBH;A39-3-3CLʲ @:f!)H-2-2-3-3-3-2,2-3-3-2-2-3-3-3-3-3-3,2,1,2-2-2-4062:6<8?;B>DAHDJGMJPLRPURXU[X][`]caechfkhmkpnsrvuyw|z~|ÜŠǢɥʨ̫έϰѲҵԸֻؽŻ׽Ӷίɧş~w|othm`fY^QWJPBI:A39-3-2-3n}hl 80 ґij`t!)D-3-3-3-3-3-2,2-3,2+~1+~1,1,2-3-3-3-3-3-3-3-3-3-4063:6=8?;B?DAGDJGMJPLRPURXUZX][`]c`fcifkinlqntqvtxw|z}ĝşǢȥʧ̪ͭϰѲӵԸջؾŻ׽ҶήʨŠw|othmaeX^QWIPBH:A39-3,2,228}  "+!=`Tm (}C-2-2-2-3-3-3-2,2,1,1+~1+|0,1-2-3-3,2,2-2-3-3-3-4/7395<9?;B>DAHDJGMIPLROURXU[X][`]caechfkinlqntqvuyw|z}ÝşǢɥ˧̪έϰвҵԸֺؽŻ׾ӶήɨƠv{othmafX^QWIPBH:A2:-3,2,2,228VVMLޡFS*DRl *H-2-3-2-2-3-3-3-2-2-3-3,2,2-3-3-3,2,1-2-3-3-3-407395<8?;B>EAGDJFMIOLROURXUZX][`]c`fchfkinlqnsrvtyw{z|šÜŠǢȥʧ˪έϰѳҵԸջ׽ŻؽӶϯʧƠ~w{otgl`fX^QWIPBH:@2:,2,2-3-2,206m{困ԋÞDAGDJFMIOLROURWUZX][`]c`fchfkinlqnsrvtyw|z~|šĜƠƢȥʨ̫έϰѳҶԸֻؽĻ׽ҵήɧŠ~v|othm`fY^QWJOBH:A39+~1,1-3-3,2+1,2@H{žݷёʥQ\-~2+}0,2)H&q *F-3-3-3-3-3-2-2-2,2,2-3-3-3-3-3-3-2,2-2-3-3-3-4063:5=8?DAHCJGMJPLROURXUZX]Z`^c`fcifkinlpnsrvtyw|z~}ÜŠǣȥʨ̫ήϰѳӵԸջؾĻ׽ӶίɨŠ~w{otgl`fY^QVIPBH:A2:+~1,1-2-3-2,1,1-3-317OZdruvm|Xc:A-2-2,2,1,2,NbY*I-3-3-3-3-3-2,2-2-2,2-3-3-3-3-3-3-2,2-2-3-3-3-4073:6<8?;A>EAGCJGLIPLROURXU[X]Z`^c`fchfkhnlqntqvtyw{z~}šĝşƢɥʧ̪ήϰѳӶԸֻ׾ź׽ҶήʧŠ~v{othl`eX^PWIOBH:A3:,2,2-2-3-3-3-2,2-2-3-3-3,2,1,2-2-2-2-2-3-2,2-@ec,=-3-3,2-3-3-3-2-3-3-3-3-3-3-3-2,2,1,2-3-2-2,2-407395<9?;B>DAGDJFLJPMRPURXU[X]Z`]b`fchekimlqnsqvtyx|z~|ÝşƢɥʧ̪έϯѳӵԸջ׽Ļ׽ӶήʧŠw{othm`eY_QWIPBH:@29-3-2-2-3-2,1,1,1,1,2-3-3-2-2-2-3-3-3-2-3-3-2-3-=->-3-3-3-2-2-3-3-2-3-2-2-2-2-3,2+~1,1,2,2-3-3-2,2-407296<8?;B>DAGDJFLIPMSOURWUZX]Z`]c`ecifkinlqntqvtyw|y~|šÝşǢȥʨ̪ͭϰѲӵոֺ׽Ļ׽Ҷήʨşw|ptgm`eY^QWJOAH:@3:-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4/63:6=8?;B>DAGDJFMIOLROURXU[X]Z`]baechfkimlqosrvtyw|z~}™ĝşǢȥʨ̫έϰгӶԸֻ׾Ż׽ӶϯɨƠ~v{othm`eY^QWIOAH;A39-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-407396<8?;B>DAHDJGMJOLSOURXUZX][a^bafdhekinlqnsrvtxw|y|šÝşǢȥʨ̪ͭϰгҵԸֻ׾Ļ׽ӶήʨŠ~w{othm`fY^QWJPAH:A3:-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4073:5<8?;B>DAGDJGMIOLROURXTZX]Z`]b`echfkinlqotrvtyw|z~}ÝşǢȥʧ˪ͭϰѲҶԸֻ׾Ļ׽ҶίʨŠw{otgm`eX_QWJPBH:A39-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4073:5<8?;B>DAGDJGMJPLSOURXU[W^[`^caechfkinlqnsqvtyw|y~|šĜşǢȥʨ̪ͭϰгҵԸֻ׾Ż׽ӶϮʧƠ~w{othl`eY^QWJPBH;A39-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4073:5<9?;A>EAGDJGLIPMROURXU[W]Z`^c`fdhflinkqosqvtyw|z~}ĝŠƢȥʧ̪ͭϰѳӶԸֻؾopenturns-1.9/distro/windows/README.txt000066400000000000000000000010501307543307100201130ustar00rootroot00000000000000Use OpenTURNS Python module on Windows. 1. users Users interact with OpenTURNS through Python script. - use To launch OpenTURNS, type "import openturns" in a Python console. No environment variable need to be set. - examples Python examples can be found in C:\Python27\Lib\site-packages\openturns\examples directory. Start them by dragging .py to _drag_to_me_to_start_it.bat batch file. 2. developers The Developer manual explains how to compile and use the C++ library. This documentation can be found on the website. openturns-1.9/distro/windows/_drag_to_me_to_start_it.bat000077500000000000000000000002741307543307100237710ustar00rootroot00000000000000@echo off rem start the script set PYTHON_INSTALL_PATH=C:\Python27 set PATH=%PATH%;%PYTHON_INSTALL_PATH% rem echo %* rem C:\OpenTURNS\bin\pyot.bat %1 %2 %3 python.exe %* pause openturns-1.9/distro/windows/common.nsi000066400000000000000000000113551307543307100204310ustar00rootroot00000000000000; ; Common var and function definition for ot windows installer. ; SetCompressor /SOLID lzma RequestExecutionLevel user ; Prefix where openturns is installed on Linux. !ifndef OPENTURNS_PREFIX !error "OPENTURNS_PREFIX must be defined" !endif !ifndef ARCH !error "ARCH must be defined" !endif !include "WordFunc.nsh" ; for ${WordAdd}, ${WordReplace} !include "FileFunc.nsh" ; for ${DirState} , ${GetParent}, ${ConfigWrite}, ${GetFileAttributes} !include "TextFunc.nsh" ; for ${ConfigRead} !include "LogicLib.nsh" ; for ${If} ; Script generated by the HM NIS Edit Script Wizard. ; HM NIS Edit Wizard helper defines !ifndef PRODUCT_VERSION !error "PRODUCT_VERSION must be defined" !endif !define PRODUCT_WEB_SITE "http://www.openturns.org" !define PRODUCT_DIR_REGKEY "Software\OpenTURNS" !define PRODUCT_INST_ROOT_KEY "HKLM" ; Where win-specific things reside : examples, dependencies installers (relative path) !define WINDEPS openturns-developers-windeps !macro CHECK_REG_VIEW ${If} "${ARCH}" == "x86_64" SetRegView 64 ${EndIf} !macroend !macro PRINT MSG SetDetailsPrint both DetailPrint "${MSG}" SetDetailsPrint none !macroend Var UserInstall ; Check that current user has administrator privileges ; if ok : set UserInstall to 0, if not : set UserInstall to 1 !macro CHECK_USER_INSTALL WARN_MSG StrCpy $UserInstall "0" ; avoid check if /userlevel option is present on command line ${GetParameters} $R1 ClearErrors ${GetOptions} $R1 '/userlevel=' $R0 IfErrors 0 set_level ClearErrors WriteRegStr ${PRODUCT_INST_ROOT_KEY} ${PRODUCT_DIR_REGKEY} "Test" "${PRODUCT_VERSION}" IfErrors user_install admin_install user_install: StrCpy $UserInstall "1" MessageBox MB_OK|MB_ICONINFORMATION "You are not running Windows from an administrator account.$\r$\rTo enable admin rights on Windows Vista and above: right click on the installer, choose 'Run as administrator'.$\r$\r${WARN_MSG}" /SD IDOK admin_install: DeleteRegValue ${PRODUCT_INST_ROOT_KEY} ${PRODUCT_DIR_REGKEY} "Test" Goto end_set_level set_level: StrCpy $UserInstall $R0 end_set_level: !macroend !macro CHECK_USER_INSTALL_FILE FILE_NAME ; Get previous installation mode IfFileExists "${FILE_NAME}" user_mode 0 StrCpy $UserInstall "0" Goto end_user_mode user_mode: StrCpy $UserInstall "1" end_user_mode: ${If} "$UserInstall" == "0" !insertmacro CHECK_USER_INSTALL "Uninstall from a non-administrator could not work cause you installed ${PRODUCT_NAME} from an admin account." ${EndIf} !macroend !macro CREATE_USER_INSTALL_FILE FILE_NAME ; create a file for uninstaller FileOpen $0 "${FILE_NAME}" w IfErrors userfile_fail FileWrite $0 "${PRODUCT_NAME} was installed in user mode." FileClose $0 userfile_fail: !macroend ; Set whether OpenTURNS shortcuts will be in every user menu or only in current user menu. ; CHECK_USER_INSTALL must have been called first !macro SET_MENU_CONTEXT ${If} "$UserInstall" == "0" SetShellVarContext all ${Else} SetShellVarContext current ${EndIf} !macroend Var OT_INSTALL_PATH !define Python_default_INSTALL_PATH "C:\Python${PYBASEVER_NODOT}" !define Default_OT_INSTALL_PATH "${Python_default_INSTALL_PATH}\Lib\site-packages\openturns" ; get openturns version from the file VERSION.TXT ; need $R5 set to VERSION.txt path ; return in $R1 openturns version found Function GetOpenTURNSFileVersion ClearErrors FileOpen $0 $R5 r IfErrors done FileRead $0 $1 ${WordFind} $1 " " "+2" $R1 FileClose $0 done: FunctionEnd ; return in $R0 openturns path found. ; return in $R1 openturns version found. Function CheckOpenTURNS StrCpy $R0 "" StrCpy $R1 "" ClearErrors ; search the prog in registry ReadRegStr $R0 HKLM "${PRODUCT_DIR_REGKEY}" "InstallPath" ${If} "$R0" == "" !insertmacro PRINT "OpenTURNS not found in registry." ${Else} ; Check that the directory fetched in the registry is existing. IfFileExists "$R0\*.*" 0 openturns_reg_not_found !insertmacro PRINT "=> OpenTURNS found here: $R0." ReadRegStr $R1 HKLM "${PRODUCT_DIR_REGKEY}" "Current Version" ; version not found in registry rty with the version file ${If} $R1 == "" StrCpy $R5 "$R0\VERSION.TXT" Call GetOpenTURNSFileVersion ${EndIf} Goto end_openturns_reg_not_found openturns_reg_not_found: !insertmacro PRINT "OpenTURNS not found in $R0." StrCpy $R0 "" end_openturns_reg_not_found: ${EndIf} ; Search the prog in default directory ${If} $R0 == "" IfFileExists "${Default_OT_INSTALL_PATH}\*.*" 0 openturns_not_found !insertmacro PRINT "OpenTURNS found in ${Default_OT_INSTALL_PATH}." StrCpy $R0 "${Default_OT_INSTALL_PATH}" StrCpy $R5 "$R0\VERSION.TXT" Call GetOpenTURNSFileVersion openturns_not_found: ${EndIf} FunctionEnd openturns-1.9/distro/windows/install-openturns-deps.bat000077500000000000000000000042641307543307100235540ustar00rootroot00000000000000rem How to use this script that install python + OT + ... automatically: rem 1. comment out any already installed program. rem 2. fetch every .msi or .exe needed: rem http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi set PYTHON_SETUP=python-2.7.3.msi rem http://peak.telecommunity.com/dist/ez_setup.py set SETUPTOOLS_SETUP=ez_setup.py rem http://pypi.python.org/packages/any/p/pyreadline/pyreadline-1.7.1.win32.exe set PYREADLINE_SETUP=pyreadline-1.7.1.win32.exe rem http://pypi.python.org/packages/2.7/i/ipython/ipython-0.13.1-py2.7.egg set IPYTHON_SETUP=ipython-0.13.1-py2.7.egg rem http://pypi.python.org/packages/2.7/n/numpy/numpy-1.6.2.win32-py2.7.exe set NUMPY_SETUP=numpy-1.6.2.win32-py2.7.exe rem http://sourceforge.net/projects/scipy/files/scipy/0.11.0/scipy-0.11.0-win32-superpack-python2.7.exe/download set SCIPY_SETUP=scipy-0.11.0-win32-superpack-python2.7.exe rem https://github.com/downloads/matplotlib/matplotlib/matplotlib-1.2.0.win32-py2.7.exe set MATPLOTLIB_SETUP=matplotlib-1.2.0.win32-py2.7.exe rem http://sourceforge.net/projects/openturns/files/openturns/openturns-1.0-based-devel/openturns-1.0-based-devel-py27.exe/download set OT_SETUP=openturns-1.0-based-devel-py27.exe rem 3. start this .bat script rem install dir set PYTHON_DIR=C:\Python27 rem python rem doc at http://www.python.org/download/releases/2.5/msi/ rem ALLUSERS=1 rem TARGETDIR=c:\Python273 msiexec /i %PYTHON_SETUP% /qn TARGETDIR="%PYTHON_DIR%" rem setuptools rem download ez_setup.py from http://peak.telecommunity.com/dist/ez_setup.py rem Run "ez_setup.py -U setuptools" to reinstall or upgrade "%PYTHON_DIR%\python.exe" %SETUPTOOLS_SETUP% set EASY_INSTALL="%PYTHON_DIR%\Scripts\easy_install.exe" rem ipython %EASY_INSTALL% %PYREADLINE_SETUP% rem %EASY_INSTALL% pyreadline %EASY_INSTALL% %IPYTHON_SETUP% rem %EASY_INSTALL% ipython rem numpy, scipy %EASY_INSTALL% %NUMPY_SETUP% %EASY_INSTALL% %SCIPY_SETUP% rem matplotlib %EASY_INSTALL% %MATPLOTLIB_SETUP% rem finally openturns :-) %OT_SETUP% /S pause rem uninstall previous install: rem msiexec /x python-2.7.3.msi /qn rem C:\Python27\Lib\site-packages\openturns\uninst.exe /S rem rmdir C:\Python27\ /S /Q openturns-1.9/distro/windows/openturns.ico000066400000000000000000000422061307543307100211560ustar00rootroot00000000000000 hF   600 %(  G7J>B!J$;v"^t`  - ! -B3jyzr?\I  -XL9RAĴLlX !K%ѕ0(&>.t=6YfC/ ' ""=Vq^>5=1"IiTQs]DaN),Q.F?yxRJĞM@6Q>ɼ- w}5+GR!E&bd' 843дRȻ쐷ԬKUBlK*!%Q\n~SS\e#+"^pA\jXS7,vMW製euğܭ2)}. ͙.4)C(0 $j(W!\#)x/7<+ ! &L(L0 $        '#i'/ ':,St``obq`nQq]$8).>sBB EcPn~k{)@0.v:TC}q%;, Ck|  .LU Pz[ô st,I7տjhлOZ!`%7!>" + $ .,'s,7|kf{>    Spq{{dr<1"OoZfuixgvWxd)>/ ?j@ =8 anǥV6P>o~ƵɻvFZPbnzx.)`m!M$'=-yǴ=RFnj{ %^k/n~ǰx t =M]7խLJܺʢJS7&M,UU L|W=oEʲTU50C=eswMNrw.$ciMη ) abkypy:7HF DѤ_k-ٿB@qn'y-ٻYZ]cv0x"6ʪvř۳с/57p( @ (s,( ^$3U 3X"3$k)7P0 ' %*:7`c?d &  ! F8   (*  E9c, FbPZg]k^l\iUwb6N>!  > B^Kcqn~{gvW{d) 64CLkWoȾ{Pr\)63I:wHgT& $l(7(u3,9SD .L ^$JCgL&bx%:oA@sű#I*QTһ:1=qD04(7f:6.6H%<'5$i((ɯ6/ëm|\$        '"d&}Ŭx@e    $%8+1F8/D6."S[fDCd_ba@H"P #7(MnXaqk{n~n~hx[|h@YI vv{"!0*{^gkz`"446O>fuu~n~Yof'! YSK ;5BuE0I7m~;avoJgw@6 ӴMXdE,pSSB@pvOi[S^ٴHM0+Զ288Pr[<6~z{W[!?%!j&([m(Ɯ`z˰Ыhv%qAnŮJF  OLpq%]b²S}_^(P[&V*   Ҹ|2o9ՊA= KHtft/ q{PY+ JGr{ʹ -$ӱV}W5;ʱQJ1( sExe3-RIND'ήw |LJ4.2+CA̮cmXcdxݼanße Uao~hvPX@x?(0` $$h(Z#S OP\##g(R.      $-2JnqM !  $.J3 ):D ' !#2((9-%6*-#  'J/"5L=LkWTw`V{cX}eW|dUybSu_JhU3I:! ':H  5K/   -0F7l{ŷixIiV$9+ #f'  cqac"ƶvA^N!b&/D5xͶ2,  [|k 4(.L!a% )`.Z|gȳ  +"ҿvB`Q !a%0R}]u!  ɲ]n3yŮ  0&u R$Oζ" Ʈ|5k:QTM<68BQ"ս&ɲ_kK " .[#,#͵qR  0$i(ζ}ufB *$4)$5*!1&   \#cq=7SOacʲVb@  +@1FcQTw`Y}fZg[hY}fVycNnZ7O?'   [#~?:  J  %9*NnY\iewm}qstsojy`nTp`7O?    Ūfyqu )ab   agؿiw#e',  7P?Z~gixszui{x[lhH^R$1"+     94¤=   ;VCaor~ʹl|NcY#"c&R^  +"ԻJTQT0/G6drwtKcU ;]jvz  Q\S **`nyŰw~\^]`p6O>  MWӿ %|ϯDMD 'EcOuƯIF   z z ~ QSc~q"o}iw<3jyë/&        !z1J8"d'Ua|ִ̥״̥pP[:3V;zл81   NMzWX   [~h"d&FLrWȰty   ;6TT  ) ëuQ\iй   604-  ̳#e'fuor    adҺhvŭ'  ]^  ON־drǯ    Z\R]ŭ  y~ ׿{D  *ftu־A=  z UT԰\bCLʲ @:Зz]&n}hl 80 }  "+!sIVVMLȫ_mPm{Þd@H{ʥQ\OZdruvm|Xc"?@`x>?openturns-1.9/distro/windows/openturns.nsi000066400000000000000000000272751307543307100212060ustar00rootroot00000000000000; ; Setup script in order to create a windows auto-installer for OpenTURNS and its dependancies. ; ; To lauch the creation of the installer : ; makensis -DOPENTURNS_PREFIX=/absolute/path -DPRODUCT_VERSION=0.13.2 openturns.nsi ; !define PRODUCT_NAME "OpenTURNS" !include "common.nsi" ; deactivate some sections to speed up compilation ;!define DEBUG ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "openturns.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "OpenTURNS.bmp" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "OpenTURNS_header.bmp" BrandingText "OpenTURNS ${PRODUCT_VERSION}" ; Language Selection Dialog Settings !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" !define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; Welcome page !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of ${PRODUCT_NAME} ${PRODUCT_VERSION}.\r\rThis installer has been tested on Windows 2000, XP and Vista. Although OpenTURNS may work on it, other operating systems are not supported." !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "COPYING.txt" ; Components page !insertmacro MUI_PAGE_COMPONENTS ; Directory page !define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install ${PRODUCT_NAME} ${PRODUCT_VERSION} in the following folder. To install in a different folder, click Browse and select another folder.$\r$\rOpenTURNS must be installed in an already installed Python directory (e.g. ${Python_default_INSTALL_PATH})." !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_TEXT "${PRODUCT_NAME} ${PRODUCT_VERSION} has been installed on your computer.\r\n\r\n${PRODUCT_NAME} can be launched from the start menu." !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "openturns-${PRODUCT_VERSION}-py${PYBASEVER}-${ARCH}.exe" InstallDir "${Python_default_INSTALL_PATH}\" ShowInstDetails show ShowUnInstDetails show Var Python_INSTALL_PATH Var R_EXE ; set $Python_INSTALL_PATH to python dir found Function CheckPython ClearErrors ; user set the python path ${If} $INSTDIR != "${Python_default_INSTALL_PATH}" StrCpy $Python_INSTALL_PATH "$INSTDIR" ${Else} ; search the prog in the Windows registry ReadRegStr $Python_INSTALL_PATH HKLM "Software\Python\PythonCore\${PYBASEVER}\InstallPath" "" ${If} $Python_INSTALL_PATH == "" !insertmacro PRINT "! Python not found in machine registry, try user registry." ReadRegStr $Python_INSTALL_PATH HKCU "Software\Python\PythonCore\${PYBASEVER}\InstallPath" "" ${EndIf} ${If} $Python_INSTALL_PATH == "" !insertmacro PRINT "! Python not found in registry, try default directory (${Python_default_INSTALL_PATH}) ." StrCpy $Python_INSTALL_PATH "${Python_default_INSTALL_PATH}" ${EndIf} ${EndIf} ; Check that the python exe is there IfFileExists "$Python_INSTALL_PATH\python.exe" 0 python_not_found_error !insertmacro PRINT "=> Python found here: $Python_INSTALL_PATH." Goto python_not_found_error_end python_not_found_error: StrCpy $Python_INSTALL_PATH "" !insertmacro PRINT "! Python not found !" python_not_found_error_end: FunctionEnd ; Launch before the section are displayed Function .onInit !insertmacro CHECK_REG_VIEW !insertmacro MUI_LANGDLL_DISPLAY !insertmacro CHECK_USER_INSTALL "Installation switched to user install." !insertmacro PRINT "CheckPython." Call CheckPython ${If} $Python_INSTALL_PATH == "" MessageBox MB_OK|MB_ICONEXCLAMATION "Python ${PYBASEVER} installation directory not found!$\rEnter manually the Python installation directory." /SD IDOK ; abort if silent install and not FORCE flag IfSilent 0 end_abort ${GetParameters} $R1 ClearErrors ${GetOptions} $R1 '/FORCE' $R0 IfErrors 0 +2 Abort end_abort: ${Else} ; if there is a \ at the end of Python_INSTALL_PATH: remove it StrCpy $0 "$Python_INSTALL_PATH" "" -1 ${if} $0 == "\" StrCpy $0 "$Python_INSTALL_PATH" -1 StrCpy $Python_INSTALL_PATH "$0" ${EndIf} StrCpy $INSTDIR "$Python_INSTALL_PATH" StrCpy $OT_INSTALL_PATH "$Python_INSTALL_PATH\Lib\site-packages\openturns" ; MessageBox MB_OK|MB_ICONEXCLAMATION "Python found in $Python_INSTALL_PATH." /SD IDOK ; !insertmacro PRINT "Python $PYBASEVER found in directory $Python_INSTALL_PATH." ${EndIf} ; if OT already installed, uninstall previous OT. ; search first in python directory IfFileExists "$OT_INSTALL_PATH\uninst.exe" 0 search_elsewhere StrCpy $R0 "$OT_INSTALL_PATH" Goto end_search_elsewhere search_elsewhere: ; search too elsewhere Call CheckOpenTURNS end_search_elsewhere: ${If} $R0 != "" IfFileExists "$R0\uninst.exe" 0 continue_anyway MessageBox MB_YESNO|MB_ICONEXCLAMATION "OpenTURNS $R1 is already installed in directory $R0.$\rDo you want to uninstall this installed version (recommended)?" /SD IDYES IDNO continue_anyway ; copy uninstaller to temp dir in order to erase the whole ot dir ; _? option permit to avoid uninstaller to copy itself to tempdir. it permit too to make ExecWait work CopyFiles "$R0\uninst.exe" $TEMP IfSilent 0 +3 ; silent uninstall ExecWait '"$TEMP\uninst.exe" /S _?=$R0' Goto +2 ExecWait '"$TEMP\uninst.exe" _?=$R0' continue_anyway: ${EndIf} ; Avoid huge logs of File function. PRINT macro permit to put user log. SetDetailsPrint none SetAutoClose false FunctionEnd Section "!OpenTURNS" SEC01 SetOverwrite on ; reread $INSTDIR in case user change it. StrCpy $Python_INSTALL_PATH "$INSTDIR" StrCpy $OT_INSTALL_PATH "$Python_INSTALL_PATH\Lib\site-packages\openturns" SetDetailsPrint both ClearErrors CreateDirectory "$OT_INSTALL_PATH" IfErrors permisssion_nok permission_ok permisssion_nok: MessageBox MB_OK|MB_ICONEXCLAMATION "Failed to create OpenTURNS directory $OT_INSTALL_PATH!$\rCheck directory permission.$\rInstallation aborted." /SD IDOK Abort permission_ok: SetDetailsPrint none !insertmacro PRINT "Install OT to $OT_INSTALL_PATH." SetOutPath "$OT_INSTALL_PATH" File "COPYING.txt" File "README.txt" File openturns.ico File "OpenTURNSDoc.url" !ifndef DEBUG !insertmacro PRINT "Install binary files." File /r "${OPENTURNS_PREFIX}\bin\*.*" !insertmacro PRINT "Install python files." File /r "${OPENTURNS_PREFIX}\Lib\site-packages\openturns\*.*" !insertmacro PRINT "Install conf files." File /r "${OPENTURNS_PREFIX}\etc\openturns\*.*" !insertmacro PRINT "Install ghostcript and R." SetOutPath "$OT_INSTALL_PATH\gs8.64" File /r "${WINDEPS}\opt\gs8.64\*.*" SetOutPath "$OT_INSTALL_PATH\R-2.12.0" File /r "${WINDEPS}\opt\R-2.12.0\*.*" ; Replace wine R path with windows path in openturns.conf: ; ; short mode allows to allow paths with spaces, like in C:/Program Files: ; GetFullPathName /SHORT $R_EXE "$OT_INSTALL_PATH\R-2.12.0\bin\R.exe" SetOutPath "$OT_INSTALL_PATH" ${ConfigWrite} "openturns.conf" " " $R0 !endif # create a version file ClearErrors FileOpen $0 $OT_INSTALL_PATH\VERSION.txt w IfErrors versionfile_fail FileWrite $0 "OpenTURNS ${PRODUCT_VERSION}" FileClose $0 versionfile_fail: ${If} "$UserInstall" == "0" !insertmacro PRINT "Put OpenTURNS in windows registry." WriteRegStr ${PRODUCT_INST_ROOT_KEY} ${PRODUCT_DIR_REGKEY} "Current Version" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_INST_ROOT_KEY} ${PRODUCT_DIR_REGKEY} "InstallPath" "$OT_INSTALL_PATH" ${Else} !insertmacro CREATE_USER_INSTALL_FILE "$OT_INSTALL_PATH\UserInstall" ${EndIf} !insertmacro PRINT "Install uninstaller in $OT_INSTALL_PATH\uninst.exe." ; Change instdir for uninstaller StrCpy $INSTDIR "$OT_INSTALL_PATH" WriteUninstaller "$OT_INSTALL_PATH\uninst.exe" ${If} "$UserInstall" == "0" !insertmacro PRINT "Put ${PRODUCT_NAME} uninstaller in registry." WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$OT_INSTALL_PATH\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" ${EndIf} SectionEnd Section "OT python examples" SEC02 SetOverwrite on !ifndef DEBUG !insertmacro PRINT "Install Python examples in $OT_INSTALL_PATH\examples." SetOutPath "$OT_INSTALL_PATH\examples" File "${OPENTURNS_PREFIX}\share\openturns\examples\*.py" File "_drag_to_me_to_start_it.bat" ${ConfigWrite} "_drag_to_me_to_start_it.bat" "set PYTHON_INSTALL_PATH=" "$\"$Python_INSTALL_PATH$\"" $R0 !endif SectionEnd Section -AdditionalIcons !insertmacro PRINT "Create OpenTURNS menu." ; install shortcuts on every accounts !insertmacro SET_MENU_CONTEXT CreateDirectory "$SMPROGRAMS\OpenTURNS" CreateShortCut "$SMPROGRAMS\OpenTURNS\Python.lnk" "$Python_INSTALL_PATH\python.exe" "" "" 0 CreateShortCut "$SMPROGRAMS\OpenTURNS\README.lnk" "$OT_INSTALL_PATH\README.txt" "" "" 1 CreateShortCut "$SMPROGRAMS\OpenTURNS\Uninstall.lnk" "$OT_INSTALL_PATH\uninst.exe" "" "" 2 CreateShortCut "$SMPROGRAMS\OpenTURNS\Documentation.lnk" "$OT_INSTALL_PATH\OpenTURNSDoc.url" "" "" 3 ; ipython if present StrCpy $0 "$Python_INSTALL_PATH\Scripts\ipython.exe" IfFileExists "$0" 0 ipython_not_found !insertmacro PRINT "Create shortcut for IPython (found here: $0)." CreateShortCut "$SMPROGRAMS\OpenTURNS\IPython.lnk" "$0" "" "" 3 ;Goto ipython_not_found_end ipython_not_found: ;!insertmacro PRINT "Do not create IPython shortcut." ;ipython_not_found_end: SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "OpenTURNS python libraries. Mandatory." !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "OpenTURNS python examples." !insertmacro MUI_FUNCTION_DESCRIPTION_END Function un.onInit !insertmacro MUI_UNGETLANGUAGE ; Get previous installation mode !insertmacro CHECK_USER_INSTALL_FILE "$INSTDIR\UserInstall" MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to remove $(^Name) (directory $\"$INSTDIR$\" will be erased)?" /SD IDYES IDYES +2 Abort FunctionEnd Section Uninstall ; nsis can't delete current directory SetOutPath $TEMP SetDetailsPrint textonly ; do not delete if $INSTDIR not set !insertmacro PRINT "Delete $\"$INSTDIR$\" directory." StrCmp "$INSTDIR" "" +2 RMDir /r "$INSTDIR" !insertmacro SET_MENU_CONTEXT SetDetailsPrint both !insertmacro PRINT "Delete ${PRODUCT_NAME} menu." RMDir /r "$SMPROGRAMS\OpenTURNS" ${If} "$UserInstall" == "0" !insertmacro PRINT "Delete ${PRODUCT_NAME} registry entry." DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey ${PRODUCT_INST_ROOT_KEY} "${PRODUCT_DIR_REGKEY}" ${EndIf} SetAutoClose false SectionEnd openturns-1.9/distro/windows/openturns_developer.nsi000066400000000000000000000170351307543307100232440ustar00rootroot00000000000000; ; Setup script in order to create a windows auto-installer for OpenTURNS and its dependencies. ; ; To lauch the creation of the installer : ; makensis -DOPENTURNS_PREFIX=/absolute/path -DPRODUCT_VERSION=0.13.2 openturns_developer.nsi ; !define PRODUCT_NAME "OpenTURNS for developer" !include "common.nsi" ; deactivate some sections to speed up compilation ;!define DEBUG ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "openturns.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "OpenTURNS.bmp" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "OpenTURNS_header.bmp" BrandingText "OpenTURNS ${PRODUCT_VERSION}" ; Language Selection Dialog Settings !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" ; Welcome page !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of ${PRODUCT_NAME} ${PRODUCT_VERSION}." !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "COPYING.txt" ; Components page !insertmacro MUI_PAGE_COMPONENTS !define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install ${PRODUCT_NAME} ${PRODUCT_VERSION} in the following folder. To install in a different folder, click Browse and select another folder.$\r$\r${PRODUCT_NAME} must be installed in an already installed OpenTURNS directory (e.g. ${Default_OT_INSTALL_PATH})." !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_TEXT "${PRODUCT_NAME} ${PRODUCT_VERSION} has been installed on your computer.\r\n\r\nTo uninstall it, launch uninst-developer.exe." !insertmacro MUI_PAGE_FINISH ; Language files !insertmacro MUI_LANGUAGE "English" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "openturns-developer-${PRODUCT_VERSION}-${ARCH}.exe" InstallDir "${Default_OT_INSTALL_PATH}" ShowInstDetails show ShowUnInstDetails show ; Launch before the section are displayed Function .onInit !insertmacro CHECK_REG_VIEW !insertmacro MUI_LANGDLL_DISPLAY !insertmacro CHECK_USER_INSTALL "Installation switched to user install." Call CheckOpenTURNS ${If} $R0 != "" StrCpy $OT_INSTALL_PATH $R0 StrCpy $INSTDIR $R0 ; Search the coresponding OpenTURNS version ${If} $R1 == "${PRODUCT_VERSION}" !insertmacro PRINT "=> OpenTURNS ${PRODUCT_VERSION} found here: $OT_INSTALL_PATH." ${Else} MessageBox MB_YESNO|MB_ICONEXCLAMATION "OpenTURNS has been found but with another version (found version $R1)!\ $\rDo you want to install ${PRODUCT_NAME} anyway?" /SD IDNO IDYES openturns_install abort openturns_install: ${EndIf} ${Else} MessageBox MB_OK|MB_ICONEXCLAMATION "OpenTURNS installation directory not found!$\r$\rEnter manually the OpenTURNS installation directory." /SD IDOK ; abort if silent install IfSilent 0 end_abort Abort end_abort: ${EndIf} SetAutoClose false ; Avoid huge logs of File function SetDetailsPrint none FunctionEnd Var MinGW_INSTALL_PATH Section "!OpenTURNS MinGW" SEC01 ; reread $INSTDIR in case user change it. (fixme: OT_INSTALL_PATH should be INSTDIR) StrCpy $OT_INSTALL_PATH "$INSTDIR" StrCpy $MinGW_INSTALL_PATH "$OT_INSTALL_PATH\MinGW" ; Ot install and OT-dev install should have the same install mode IfFileExists "$OT_INSTALL_PATH\UserInstall" 0 ot_admin_install ${If} "$UserInstall" == "0" MessageBox MB_OK|MB_ICONINFORMATION "OpenTURNS was installed in user mode. You are installing ${PRODUCT_NAME} in admin mode.$\r$\rSome ${PRODUCT_NAME} fonctionality will perhaps be not available." /SD IDOK ${EndIf} Goto end_ot_admin_install ot_admin_install: ${If} "$UserInstall" == "1" MessageBox MB_OK|MB_ICONINFORMATION "OpenTURNS was installed in admin mode. You are installing ${PRODUCT_NAME} in user mode.$\r$\rSome ${PRODUCT_NAME} fonctionality will perhaps be not available." /SD IDOK ${EndIf} end_ot_admin_install: !insertmacro PRINT "Extracting MinGW to $MinGW_INSTALL_PATH." SetOutPath "$MinGW_INSTALL_PATH" File /r "${WINDEPS}\opt\MinGW\*.*" !insertmacro PRINT "Extracting OT deps headers to $MinGW_INSTALL_PATH\include." SetOutPath "$MinGW_INSTALL_PATH\include" ;File /r "${WINDEPS}\include\*.*" !insertmacro PRINT "Extracting OT deps libraries to $MinGW_INSTALL_PATH\lib." SetOutPath "$MinGW_INSTALL_PATH\lib" ;File /r "${WINDEPS}\lib\*.*" !insertmacro PRINT "Extracting OT headers to $OT_INSTALL_PATH\include." SetOutPath "$OT_INSTALL_PATH\include" File /r "${OPENTURNS_PREFIX}\include\openturns\*.*" !insertmacro PRINT "Install uninstaller in $OT_INSTALL_PATH\uninst-developer.exe." WriteUninstaller "$OT_INSTALL_PATH\uninst-developer.exe" ${If} "$UserInstall" != "0" !insertmacro CREATE_USER_INSTALL_FILE "$OT_INSTALL_PATH\UserInstallDev" ${EndIf} SectionEnd Section "OpenTURNS checktests" SEC02 SetOverwrite on !insertmacro PRINT "Install checktests in $OT_INSTALL_PATH\examples." SetOutPath "$OT_INSTALL_PATH\examples" !ifndef DEBUG ; delete the dead link used for 'make installcheck' File /r /x "libOT-0.dll" "${OPENTURNS_PREFIX}\share\openturns\examples\*.*" !endif File "start_check_test.sh" File "start_pythoninstallcheck_test.sh" File "start_all_check_test.sh" ${ConfigWrite} "$OT_INSTALL_PATH\examples\start_all_check_test.sh" "OT_PREFIX=" '"$OT_INSTALL_PATH"' $R0 SectionEnd Section -AdditionalIcons !insertmacro PRINT "Create a shortcut in OpenTURNS menu to start checktests." !insertmacro SET_MENU_CONTEXT CreateShortCut "$SMPROGRAMS\OpenTURNS\Uninstall-developer.lnk" "$OT_INSTALL_PATH\uninst-developer.exe" CreateShortCut "$SMPROGRAMS\OpenTURNS\start-checktests.lnk" "$MinGW_INSTALL_PATH\msys\1.0\bin\sh.exe" '"$OT_INSTALL_PATH\examples\start_all_check_test.sh"' "$OT_INSTALL_PATH\openturns.ico" SetOutPath "$MinGW_INSTALL_PATH\msys\1.0" CreateShortCut "$SMPROGRAMS\OpenTURNS\MSYS-Shell.lnk" "$MinGW_INSTALL_PATH\msys\1.0\msys.bat" SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Install MinGW + OpenTURNS deps (pthread headers & dlls, ...). Recquired to compile with OT." !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "OpenTURNS checktests.$\r$\rStart them from OT's menu." !insertmacro MUI_FUNCTION_DESCRIPTION_END Function un.onInit !insertmacro MUI_UNGETLANGUAGE ; Get previous installation mode !insertmacro CHECK_USER_INSTALL_FILE "$INSTDIR\UserInstallDev" MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to remove $(^Name)?" /SD IDYES IDYES +2 Abort FunctionEnd Section Uninstall ; nsis can't delete current directory SetOutPath $TEMP SetDetailsPrint textonly !insertmacro SET_MENU_CONTEXT ; do not delete if $INSTDIR not set !insertmacro PRINT "Delete $\"$INSTDIR\MinGW$\" directory." StrCmp "$INSTDIR" "" abort_install RMDir /r "$INSTDIR\MinGW" RMDir /r "$INSTDIR\include" Delete "$INSTDIR\examples\*.exe" Delete "$INSTDIR\examples\start_all_check_test.sh" Delete "$INSTDIR\UserInstallDev" Delete "$SMPROGRAMS\OpenTURNS\Uninstall-developer.lnk" Delete "$SMPROGRAMS\OpenTURNS\start-checktests.lnk" Delete "$SMPROGRAMS\OpenTURNS\MSYS-Shell.lnk" Goto abort_install_end abort_install: MessageBox MB_OK|MB_ICONEXCLAMATION "INSTDIR not found. Installation aborted." /SD IDOK abort_install_end: SetAutoClose false SectionEnd BrandingText "OpenTURNS ${PRODUCT_VERSION}" openturns-1.9/distro/windows/openturns_icon_48x48.png000066400000000000000000000072561307543307100230650ustar00rootroot00000000000000PNG  IHDR00WsRGBbKGD pHYs  tIME+'c~.IDATh՚yUv?W{uw 4@ (ˠ@$p caQ,vQFO3", 64FuWW]ݶa''sww~ )%̢)B>? v_w,vgs# :z͘8݊,zj\07<ل^Ci3u>7)oo&/6[nƧ&=Gɋ&NCRChK3FX H=OQ˗`DQ|^6rxmץ/CJ)[Wg%r#̔%79[Gvyٗ'"v=|b Kۻڎq{(SwsyR mR.&yy# @Vҩl9T6^FI(}uͩ]X9w$_Z\`|zIŽ]ڤv>b[@x_b61L:(Y**Cjx_|*qJJJF@9EQ1YAZ}qfMu% P΀kurcF>G$#4=? 5rL8ԧeD2~E UU% [U@R3; HS T5# ٗ"J F@`$俯X dNhkH5 Diɑ=5$OH&ihPr>E.Âhi=NE.Ň(0:I&RёJ{{'hx&@]?ʘ6h7pOd$:ꛩKLY))V)DB1mطG?{J jq ևba(++!7EÅ^@g'n'ǏK1TO ]urwmcomoLWɕ.c tu$Lpژ{u] 褋nBGxq}''Kf4-ޑ`st9p;LGN:@azEAy^UUtImc=}J][{߾3Wx"_W٫fH&7L^#ڍ_; K eC5f͝Ƥ #/ύafPe.&j 4Xhp8F{k;6>pJ9U?ɀa\9^} o2 %M?Ghwvp{WT˞}$z((\8k2'iRb73= ql6K: jnB9eVnLkff;4jZ $Ht@޸*!t+<¡Fvq,#BdY0)Nch6c0Qw!*TX(Nx ѣ>CUUt&^{G]qR@ (<ɑ3K NpL>!H4`ʲEj#70!\޼Z&TO g^B[} ̙?6ױ/ M;j^dh1L(D`@ _[@,z`< I"ؑ6(H)1eYp u1{t ]eI `ΐJ heZm Vh&d2)ȁ=Aef'3ΛJÅlD}^\ U͐JeEl;V_;.Z`zO`z}n:2c 0RiƗU3шNmpJim{`8J&))$WRT[o6{f-aw0wL<8vV RV`O%FCĢq;RyqUZb+..`KR3F0L(_=;0 \pD'Vb1cZ0 CD;d2*Dd2I,WbD"o䒩VsxcU9?j2u1*{s-seCf*zmأjq4EIh ;ΤP b3K/MO_ +3 TMzCc9utHpIENDB`openturns-1.9/distro/windows/otprog.bat000077500000000000000000000014771307543307100204370ustar00rootroot00000000000000@echo off rem Launch a program that use openturns lib. rem First argument of otprog.bat will be executed. rem Set env var for openturns set OPENTURNS_HOME=C:\OpenTURNS set PYTHON_HOME=%OPENTURNS_HOME%\opt\Python27 set PATH=%PYTHON_HOME%;%PATH% set PATH=%OPENTURNS_HOME%\opt\gs8.64\bin;%PATH% set PATH=%OPENTURNS_HOME%\opt\R-2.12.0\bin;%PATH% set PATH=%OPENTURNS_HOME%\bin;%PATH% set PATH=%OPENTURNS_HOME%\lib\bin;%PATH% set PATH=%OPENTURNS_HOME%\lib\openturns\module\lib\bin;%PATH% set PYTHONPATH=%PYTHON_HOME%\Lib;%PYTHONPATH% set PYTHONPATH=%PYTHON_HOME%\Lib\site-packages;%PYTHONPATH% set PYTHONPATH=%OPENTURNS_HOME%\lib\python27\site-packages;%PYTHONPATH% set OPENTURNS_CONFIG_PATH=%OPENTURNS_HOME%\etc\openturns rem Set OpenTURNS verbosity: rem set OPENTURNS_LOG_SEVERITY=ALL rem Start prog %1 openturns-1.9/distro/windows/pyot.bat000077500000000000000000000017001307543307100201050ustar00rootroot00000000000000@echo off rem Start a python shell that will be able to use OpenTURNS. rem First argument of pyot.bat will be given to python (e.g. a python file). rem Set env var for openturns set OPENTURNS_HOME=C:\OpenTURNS set PYTHON_HOME=%OPENTURNS_HOME%\opt\Python27 set PATH=%PYTHON_HOME%;%PATH% set PATH=%OPENTURNS_HOME%\opt\gs8.64\bin;%PATH% set PATH=%OPENTURNS_HOME%\opt\R-2.12.0\bin;%PATH% set PATH=%OPENTURNS_HOME%\bin;%PATH% set PATH=%OPENTURNS_HOME%\lib\bin;%PATH% set PATH=%OPENTURNS_HOME%\lib\openturns\module\lib\bin;%PATH% set PYTHONPATH=%PYTHON_HOME%\Lib;%PYTHONPATH% set PYTHONPATH=%PYTHON_HOME%\Lib\site-packages;%PYTHONPATH% set PYTHONPATH=%OPENTURNS_HOME%\lib\python27\site-packages;%PYTHONPATH% set OPENTURNS_CONFIG_PATH=%OPENTURNS_HOME%\etc\openturns rem Set OpenTURNS verbosity: rem set OPENTURNS_LOG_SEVERITY=ALL rem Start python rem "%PYTHON_HOME%"\python.exe" %1 "%PYTHON_HOME%\Scripts\ipython.exe" %1 %2 %3 pause openturns-1.9/distro/windows/pyot.vbs000077500000000000000000000034361307543307100201410ustar00rootroot00000000000000' Start a python shell that will be able to use OpenTURNS. ' First argument of pyot.bat will be given to python (e.g. a python file). ' OpenTURNS prefix dim OPENTURNS_HOME ' adapt the following line if OpenTURNS is not installed in C:\OpenTURNS OPENTURNS_HOME = "C:\OpenTURNS" ' Use Process vars : Applies to current process and might be passed to child processes Set wshShell = CreateObject("WScript.Shell") Set wshEnv = wshShell.Environment("Process") ' Set required env vars dim PYTHON_HOME PYTHON_HOME = OPENTURNS_HOME & "\opt\Python27" wshEnv("PATH") = PYTHON_HOME & ";" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\opt\gs8.64\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\opt\R-2.12.0\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\lib\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\lib\openturns\module\lib\bin;" & wshEnv("PATH") wshEnv("PYTHONPATH") = PYTHON_HOME & "\Lib;" & wshEnv("PYTHONPATH") wshEnv("PYTHONPATH") = PYTHON_HOME & "\Lib\site-packages;" & wshEnv("PYTHONPATH") wshEnv("PYTHONPATH") = OPENTURNS_HOME & "\lib\python27\site-packages;" & wshEnv("PYTHONPATH") wshEnv("OPENTURNS_CONFIG_PATH") = OPENTURNS_HOME & "\etc\openturns" wshEnv("OPENTURNS_MODULE_PATH") = OPENTURNS_HOME & "\lib\openturns\module;" & wshEnv("OPENTURNS_MODULE_PATH") 'WScript.Echo "PATH=" & wshEnv("PATH") ' Debug OpenTURNS 'wshEnv("OPENTURNS_LOG_SEVERITY") = "ALL" ' Pass first arg in order to open file by copy/paste firstArg = "" if WScript.Arguments.count > 0 then Set args = WScript.Arguments firstArg = """" & args(0) & """" end if ' Launch OpenTURNS Set resu = wshShell.Exec("""" & PYTHON_HOME & "\python.exe"" " & firstArg) ' print pid of python that runs openturns 'WScript.Echo "ot-pid=" & resu.ProcessID openturns-1.9/distro/windows/pyotgui.vbs000077500000000000000000000027001307543307100206370ustar00rootroot00000000000000' Start a python shell that will be able to use OpenTURNS. ' OpenTURNS prefix dim OPENTURNS_HOME ' adapt the following line if OpenTURNS is not installed in C:\OpenTURNS OPENTURNS_HOME = "C:\OpenTURNS" ' Use Process vars : Applies to current process and might be passed to child processes Set wshShell = CreateObject("WScript.Shell") Set wshEnv = wshShell.Environment("Process") ' Set required env vars dim PYTHON_HOME PYTHON_HOME = OPENTURNS_HOME & "\opt\Python27" wshEnv("PATH") = PYTHON_HOME & ";" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\opt\gs8.64\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\opt\R-2.12.0\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\lib\bin;" & wshEnv("PATH") wshEnv("PATH") = OPENTURNS_HOME & "\lib\openturns\module\lib\bin;" & wshEnv("PATH") wshEnv("PYTHONPATH") = PYTHON_HOME & "\Lib;" & wshEnv("PYTHONPATH") wshEnv("PYTHONPATH") = PYTHON_HOME & "\Lib\site-packages;" & wshEnv("PYTHONPATH") wshEnv("PYTHONPATH") = OPENTURNS_HOME & "\lib\python27\site-packages;" & wshEnv("PYTHONPATH") wshEnv("OPENTURNS_CONFIG_PATH") = OPENTURNS_HOME & "\etc\openturns" wshEnv("OPENTURNS_MODULE_PATH") = OPENTURNS_HOME & "\lib\openturns\module;" & wshEnv("OPENTURNS_MODULE_PATH") 'WScript.Echo "PATH=" & wshEnv("PATH") ' Debug OpenTURNS 'wshEnv("OPENTURNS_LOG_SEVERITY") = "ALL" ' Launch OpenTURNS wshShell.run """" & PYTHON_HOME & "\Scripts\ipython.exe""" openturns-1.9/distro/windows/start_all_check_test.sh000066400000000000000000000012311307543307100231330ustar00rootroot00000000000000#!/bin/sh PATH=$PATH:/bin OT_PREFIX="C:\Python27\Lib\site-packages\openturns" cd $OT_PREFIX\\examples # add python dir PATH=$PATH:$PWD/../../../.. FAILED_TEST="" function check_error { if [ "$?" != "0" ]; then FAILED_TEST="$FAILED_TEST $1" fi } echo "./start_check_test.sh" ./start_check_test.sh check_error "./start_check_test.sh" echo "./start_pythoninstallcheck_test.sh" ./start_pythoninstallcheck_test.sh check_error "./start_pythoninstallcheck_test.sh" RC=0 if [ "$FAILED_TEST" = "" ]; then echo "Every check tests are OK." else echo "Some tests in$FAILED_TEST failed!" RC=1 fi echo echo "Press any key to exit." read ANYKEY exit $RC openturns-1.9/distro/windows/start_check_test.sh000066400000000000000000000017721307543307100223150ustar00rootroot00000000000000#!/bin/sh #set -e export PRINTF_EXPONENT_DIGITS=2 export AUTOTEST_PATH=$PWD export OPENTURNS_CONFIG_PATH=$PWD/.. #export OPENTURNS_LOG_SEVERITY=ALL DEBUG_FILE=stdouterr.dbg PATH=$PWD:$PWD/..:$PATH FAILED_TEST="" function check_error { if [ "$?" != "0" ]; then FAILED_TEST="$FAILED_TEST $1" echo "std_err output:" cat $DEBUG_FILE echo "Test #$1: $2 failed!" echo fi } start_tests() { test_files=`ls t_*.exe` NB_CHECK=`ls t_*.exe|wc -l|tr -d " "` CUR_CHECK=1 for test_file in $test_files do test_base=`basename $test_file .exe` echo "Test #${CUR_CHECK}/$NB_CHECK: $test_base" if test -f $test_base.expout then (./$test_base 2>$DEBUG_FILE | tr -d '\r' > $test_base.out) && diff -u $test_base.expout $test_base.out else ./$test_base > $DEBUG_FILE 2>&1 fi check_error ${CUR_CHECK} $test_base CUR_CHECK=`expr ${CUR_CHECK} + 1` done } start_tests echo RC=0 if [ "$FAILED_TEST" = "" ]; then echo "Every check tests are OK." else echo "Tests$FAILED_TEST failed!" RC=1 fi exit $RC openturns-1.9/distro/windows/start_pythoninstallcheck_test.sh000066400000000000000000000021261307543307100251400ustar00rootroot00000000000000#!/bin/sh #set -e export PRINTF_EXPONENT_DIGITS=2 export AUTOTEST_PATH=$PWD export OPENTURNS_CONFIG_PATH=$PWD/.. #export OPENTURNS_LOG_SEVERITY=ALL DEBUG_FILE=stdouterr.dbg export OPENTURNS_HOME=$PWD/.. PATH=$PWD:$PWD/..:$PATH PYTHON_EXE=../../../../python.exe FAILED_TEST="" function check_error { if [ "$?" != "0" ]; then FAILED_TEST="$FAILED_TEST $1" echo "std_err output:" cat $DEBUG_FILE echo "Test #$1: $2 failed!" echo fi } start_tests() { test_files=`ls t_*.py` NB_CHECK=`ls t_*.py|wc -l|tr -d " "` CUR_CHECK=1 for test_file in $test_files do test_base=`basename $test_file .py` echo "Test #${CUR_CHECK}/$NB_CHECK: $test_base" if test -f $test_base.py.expout then ($PYTHON_EXE $test_base.py 2>$DEBUG_FILE | tr -d '\r' > $test_base.out) && diff -u $test_base.py.expout $test_base.out else $PYTHON_EXE $test_base.py > $DEBUG_FILE 2>&1 fi check_error ${CUR_CHECK} $test_base CUR_CHECK=`expr ${CUR_CHECK} + 1` done } start_tests echo RC=0 if [ "$FAILED_TEST" = "" ]; then echo "Every check tests are OK." else echo "Tests$FAILED_TEST failed!" RC=1 fi exit $RC openturns-1.9/lib/000077500000000000000000000000001307543307100141715ustar00rootroot00000000000000openturns-1.9/lib/CMakeLists.txt000066400000000000000000000071071307543307100167360ustar00rootroot00000000000000# -*- cmake -*- # Recurse in subdirectories add_subdirectory (include) add_subdirectory (src) add_subdirectory (etc) # Build the OpenTURNSConfig.cmake file set (OPENTURNS_LIBRARY_DIRS ${LIBRARY_PATH}) set (OPENTURNS_LIBRARY OT) list (APPEND OPENTURNS_LIBRARIES ${OPENTURNS_LIBRARY}) set (OPENTURNS_INCLUDE_DIR ${INCLUDE_PATH}) list (INSERT OPENTURNS_INCLUDE_DIRS 0 ${OPENTURNS_INCLUDE_DIR}) set (OPENTURNS_ROOT_DIR ${INSTALL_PATH}) set (OPENTURNS_VERSION_STRING ${PACKAGE_VERSION}) set (OPENTURNS_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}) set (OPENTURNS_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) set (OPENTURNS_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH}) set (OPENTURNS_USE_FILE ${CONFIG_CMAKE_PATH}/UseOpenTURNS.cmake) if(CMAKE_VERSION VERSION_LESS 2.8.8) # CMakePackageConfigHelpers is not available set (PACKAGE_INIT " # Generated by a CMake version without CMakePackageConfigHelpers. macro(set_and_check _var _value) set(\${_var} \"\${_value}\") endmacro(set_and_check _var _value) " ) foreach (_var OPENTURNS_USE_FILE OPENTURNS_ROOT_DIR OPENTURNS_INCLUDE_DIR OPENTURNS_INCLUDE_DIRS OPENTURNS_LIBRARY_DIRS OPENTURNS_SWIG_INCLUDE_DIRS) set(PACKAGE_${_var} ${${_var}}) endforeach () configure_file (OpenTURNSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/OpenTURNSConfig.cmake @ONLY ) install (FILES UseOpenTURNS.cmake ${CMAKE_CURRENT_BINARY_DIR}/OpenTURNSConfig.cmake DESTINATION ${OPENTURNS_CONFIG_CMAKE_PATH} ) else (CMAKE_VERSION VERSION_LESS 2.8.8) include(CMakePackageConfigHelpers) configure_package_config_file ( OpenTURNSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/OpenTURNSConfig.cmake INSTALL_DESTINATION ${OPENTURNS_CONFIG_CMAKE_PATH} PATH_VARS OPENTURNS_USE_FILE OPENTURNS_ROOT_DIR OPENTURNS_INCLUDE_DIR OPENTURNS_INCLUDE_DIRS OPENTURNS_LIBRARY_DIRS OPENTURNS_SWIG_INCLUDE_DIRS NO_CHECK_REQUIRED_COMPONENTS_MACRO ) write_basic_package_version_file(OpenTURNSConfigVersion.cmake VERSION ${OPENTURNS_VERSION_STRING} COMPATIBILITY AnyNewerVersion) install (FILES UseOpenTURNS.cmake ${CMAKE_CURRENT_BINARY_DIR}/OpenTURNSConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/OpenTURNSConfigVersion.cmake DESTINATION ${OPENTURNS_CONFIG_CMAKE_PATH} ) endif (CMAKE_VERSION VERSION_LESS 2.8.8) # Recurse in subdirectories : test should be run after src (for target OT to be built) add_subdirectory (test) if (DOXYGEN_FOUND) # generate Doxyfile set (VERSION ${PACKAGE_VERSION}) set (builddir ${CMAKE_CURRENT_BINARY_DIR}) set ( top_srcdir ${CMAKE_CURRENT_SOURCE_DIR}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) # generate html doc and compress it add_custom_target (html COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/doc COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile COMMAND tar czf doc-api-${PACKAGE_VERSION}.tar.gz doc COMMAND tar cjf doc-api-${PACKAGE_VERSION}.tar.bz2 doc ) endif (DOXYGEN_FOUND) install (FILES ${HEADERFILES} DESTINATION ${INCLUDE_PATH}/openturns ) openturns-1.9/lib/Doxyfile.in000066400000000000000000001434301307543307100163110ustar00rootroot00000000000000# Doxyfile 1.4.2 # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # Id Doxyfile.in # # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "OpenTURNS library" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = @builddir@/doc/api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = NO # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the progam writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = Doxygen.log #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/include @top_srcdir@/src # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = *.cxx *.hxx *.c *.h *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = */t_*.cxx */.git/* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # m4 file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's m4 file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES openturns-1.9/lib/OpenTURNSConfig.cmake.in000066400000000000000000000075451307543307100204760ustar00rootroot00000000000000# -*- cmake -*- # # OpenTURNSConfig.cmake(.in) # # Find OpenTURNS includes and libraries # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # # Use the following variables to compile and link against OpenTURNS: # OPENTURNS_FOUND - True if OpenTURNS was found on your system # OPENTURNS_USE_FILE - The file making OpenTURNS usable # OPENTURNS_DEFINITIONS - Definitions needed to build with OpenTURNS # OPENTURNS_INCLUDE_DIR - Directory where OT.hxx can be found # OPENTURNS_INCLUDE_DIRS - List of directories of OpenTURNS and it's dependencies # OPENTURNS_LIBRARY - OpenTURNS library location # OPENTURNS_LIBRARIES - List of libraries to link against # OPENTURNS_LIBRARY_DIRS - List of directories containing OpenTURNS' libraries # OPENTURNS_ROOT_DIR - The base directory of OpenTURNS # OPENTURNS_VERSION_STRING - A human-readable string containing the version # OPENTURNS_VERSION_MAJOR - The major version of OpenTURNS # OPENTURNS_VERSION_MINOR - The minor version of OpenTURNS # OPENTURNS_VERSION_PATCH - The patch version of OpenTURNS # OPENTURNS_SWIG_INCLUDE_DIRS - Location of swig interface files # OPENTURNS_SWIG_DEFINITIONS - Definitions to compile the swig generated source # OPENTURNS_PYTHON_MODULE_PATH - Path to the python module @PACKAGE_INIT@ set ( OPENTURNS_FOUND 1 ) set_and_check ( OPENTURNS_USE_FILE "@PACKAGE_OPENTURNS_USE_FILE@" ) set ( OPENTURNS_DEFINITIONS "@OPENTURNS_DEFINITIONS@" ) set_and_check ( OPENTURNS_INCLUDE_DIR "@PACKAGE_OPENTURNS_INCLUDE_DIR@" ) set ( OPENTURNS_INCLUDE_DIRS "@PACKAGE_OPENTURNS_INCLUDE_DIRS@" ) set ( OPENTURNS_LIBRARY "@OPENTURNS_LIBRARY@" ) set ( OPENTURNS_LIBRARIES "@OPENTURNS_LIBRARIES@" ) set ( OPENTURNS_LIBRARY_DIRS "@PACKAGE_OPENTURNS_LIBRARY_DIRS@" ) set_and_check ( OPENTURNS_ROOT_DIR "@PACKAGE_OPENTURNS_ROOT_DIR@" ) set ( OPENTURNS_VERSION_STRING "@OPENTURNS_VERSION_STRING@" ) set ( OPENTURNS_VERSION_MAJOR "@OPENTURNS_VERSION_MAJOR@" ) set ( OPENTURNS_VERSION_MINOR "@OPENTURNS_VERSION_MINOR@" ) set ( OPENTURNS_VERSION_PATCH "@OPENTURNS_VERSION_PATCH@" ) set (OPENTURNS_SWIG_INCLUDE_DIRS "@PACKAGE_OPENTURNS_SWIG_INCLUDE_DIRS@") set ( OPENTURNS_SWIG_DEFINITIONS "@OPENTURNS_SWIG_DEFINITIONS@" ) set (OPENTURNS_PYTHON@PYTHON_VERSION_MAJOR@_MODULE_PATH "@PYTHON_MODULE_PATH@") if ("1" STREQUAL "@HMAT_FOUND@") set (HMAT_DIR "@HMAT_DIR@") # if CMAKE_FIND_ROOT_PATH is defined and CMAKE_FIND_ROOT_PATH_MODE_PACKAGE set to ONLY # hardcoded PATHS guesses must be relative to CMAKE_FIND_ROOT_PATH if (DEFINED CMAKE_FIND_ROOT_PATH) file (RELATIVE_PATH HMAT_DIR ${CMAKE_FIND_ROOT_PATH} ${HMAT_DIR}) set (HMAT_DIR "/${HMAT_DIR}") endif () find_package (HMAT REQUIRED NO_MODULE PATHS ${HMAT_DIR} NO_DEFAULT_PATH) endif () # CMAKE_CURRENT_LIST_DIR defined since 2.8.3 if(CMAKE_VERSION VERSION_LESS 2.8.3) get_filename_component (CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) endif () # Our library dependencies (contains definitions for IMPORTED targets) include("${CMAKE_CURRENT_LIST_DIR}/OpenTURNS-Targets.cmake") if(CMAKE_VERSION VERSION_LESS 2.8.3) set(CMAKE_CURRENT_LIST_DIR) endif () openturns-1.9/lib/UseOpenTURNS.cmake000066400000000000000000000017301307543307100174060ustar00rootroot00000000000000# -*- cmake -*- # # OpenTURNSUse.cmake # # Use OpenTURNS in CMake files # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # add_definitions ( ${OPENTURNS_DEFINITIONS} ) include_directories ( ${OPENTURNS_INCLUDE_DIRS} ) link_directories ( ${OPENTURNS_LIBRARY_DIRS} ) openturns-1.9/lib/etc/000077500000000000000000000000001307543307100147445ustar00rootroot00000000000000openturns-1.9/lib/etc/CMakeLists.txt000066400000000000000000000005211307543307100175020ustar00rootroot00000000000000# -*- cmake -*- configure_file (${CMAKE_CURRENT_SOURCE_DIR}/openturns.conf.in ${CMAKE_CURRENT_BINARY_DIR}/openturns.conf @ONLY) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/openturns.conf DESTINATION ${OPENTURNS_SYSCONFIG_PATH}/openturns ) openturns-1.9/lib/etc/openturns.conf.in000066400000000000000000000725101307543307100202620ustar00rootroot00000000000000 openturns-1.9/lib/include/000077500000000000000000000000001307543307100156145ustar00rootroot00000000000000openturns-1.9/lib/include/CMakeLists.txt000066400000000000000000000047201307543307100203570ustar00rootroot00000000000000# -*- cmake -*- if (CMAKE_Fortran_COMPILER_WORKS) # workaround for bug #0014358 if (CMAKE_VERSION VERSION_LESS 2.8.13 AND NOT DEFINED FortranCInterface_EXE) set (FortranCInterface_EXE ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterface/FortranCInterface${CMAKE_EXECUTABLE_SUFFIX}) endif () include (FortranCInterface) FortranCInterface_HEADER (FortranCInterface.h) endif () ot_add_current_dir_to_include_dirs () ot_add_build_dir_to_include_dirs (${CMAKE_CURRENT_BINARY_DIR}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/OTconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/openturns/OTconfig.h @ONLY ) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/installed-OTconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/openturns/installed-OTconfig.h @ONLY ) set (ot_configure_args) if (NOT ot_configure_date) if (UNIX) execute_process (COMMAND date "+%a, %d %b %Y %H:%M:%S %z" OUTPUT_VARIABLE ot_configure_date OUTPUT_STRIP_TRAILING_WHITESPACE ) elseif(MSVC OR WINTEL) execute_process (COMMAND cmd " /C date /T" OUTPUT_VARIABLE ot_configure_date OUTPUT_STRIP_TRAILING_WHITESPACE) endif() set (ot_configure_date "${ot_configure_date}" CACHE STRING "First configure date.") endif () if (NOT ot_revision) execute_process (COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE ot_revision OUTPUT_STRIP_TRAILING_WHITESPACE ) set (ot_revision "${ot_revision}" CACHE STRING "Revision number.") endif () mark_as_advanced(ot_configure_date ot_revision) set (prefix ${CMAKE_INSTALL_PREFIX}) set (PACKAGE openturns) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/OTconfigure_args.hxx.in ${CMAKE_CURRENT_BINARY_DIR}/openturns/OTconfigureArgs.hxx @ONLY ) install (DIRECTORY openturns DESTINATION ${OPENTURNS_INCLUDE_PATH}) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/openturns/installed-OTconfig.h DESTINATION ${OPENTURNS_INCLUDE_PATH}/openturns RENAME OTconfig.h ) if (MSVC OR WINTEL) install (FILES pthread_win32/pthread.h pthread_win32/semaphore.h pthread_win32/unistd.h DESTINATION ${OPENTURNS_INCLUDE_PATH} ) endif () openturns-1.9/lib/include/OTconfig.h.in000066400000000000000000000140341307543307100201040ustar00rootroot00000000000000/* include/OTconfig.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the CMake's FortranCInterface */ #define HAVE_FORTRANCINTERFACE 1 /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #cmakedefine F77_DUMMY_MAIN /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #define F77_FUNC(name,NAME) FortranCInterface_GLOBAL(name,NAME) /* As F77_FUNC, but for C identifiers containing underscores. */ #define F77_FUNC_(name,NAME) FortranCInterface_GLOBAL_(name,NAME) /* Define if F77 and FC dummy `main' functions are identical. */ #cmakedefine FC_DUMMY_MAIN_EQ_F77 /* Define to 1 if you have the `alarm' function. */ #cmakedefine HAVE_ALARM /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_ASSERT_H /* Define to 1 if you have the `atexit' function. */ #cmakedefine HAVE_ATEXIT /* Define if you have a BLAS library. */ #cmakedefine HAVE_BLAS /* Define if you have bison parser generator. */ #cmakedefine OPENTURNS_HAVE_BISON /* Define to 1 if you have flex lexical analyser generator. */ #cmakedefine OPENTURNS_HAVE_FLEX /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_ERRNO_H /* Define to 1 if you have the `getcwd' function. */ #cmakedefine HAVE_GETCWD /* Define to 1 if you have the `gethostbyname' function. */ #cmakedefine HAVE_GETHOSTBYNAME /* Support for ghostscript */ #cmakedefine HAVE_GS /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_LIBGEN_H /* Define if you have LAPACK library. */ #cmakedefine OPENTURNS_HAVE_LAPACK /* Support for regular expression library */ #cmakedefine OPENTURNS_HAVE_LIBXML2 /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_MATH_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_MUPARSER /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_HMAT /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_PTHREAD_H /* Define to 1 if you have the NLopt library. */ #cmakedefine OPENTURNS_HAVE_NLOPT /* Define to 1 if R has package base. */ #cmakedefine HAVE_R_PACKAGE_BASE /* Define to 1 if R has package rot. */ #cmakedefine HAVE_R_PACKAGE_ROT /* Define to 1 if stdbool.h conforms to C99. */ #cmakedefine OPENTURNS_HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_STDINT_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_STRING_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_SYS_UN_H /* Support for TBB library */ #cmakedefine OPENTURNS_HAVE_TBB #cmakedefine OPENTURNS_TBB_NO_IMPLICIT_LINKAGE /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_TBB_TBB_H /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #cmakedefine HAVE__BOOL /* Define to 1 if the system has Boost libraries. */ #cmakedefine OPENTURNS_HAVE_BOOST /* Define to the full path where OpenTURNS is installed */ #define INSTALL_PATH "@INSTALL_PATH@" /* Define to the full path where OpenTURNS library is installed */ #define LIBRARY_PATH "@OPENTURNS_LIBRARY_PATH@" /* Define to the full path where OpenTURNS configuration files are installed */ #define SYSCONFIG_PATH "@SYSCONFIG_PATH@" /* Define to the full path where OpenTURNS shared files are installed */ #define DATA_PATH "@DATA_PATH@" /* Name of OpenTURNS home environment variable. */ #define OPENTURNS_HOME_ENV_VAR "@OPENTURNS_HOME_ENV_VAR@" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The path to the R executable */ #define R_EXECUTABLE "@R_EXECUTABLE@" /* Define to 1 if you have the ANSI C header files. */ #cmakedefine STDC_HEADERS /* Define to 1 if you can safely include both and . */ #cmakedefine TIME_WITH_SYS_TIME /* Version number of package */ #define VERSION "@PACKAGE_VERSION@" /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #cmakedefine YYTEXT_POINTER /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #cmakedefine malloc /* Define to `unsigned int' if does not define. */ #cmakedefine size_t /* Define to 1 if big endian system */ #cmakedefine __BIG_ENDIAN__ /* Define to 1 if UnsignedInteger and uint64_t are the same type */ #cmakedefine OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 openturns-1.9/lib/include/OTconfigure_args.hxx.in000066400000000000000000000023551307543307100222170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A file that contains the configure command line arguments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTtypes.hxx" /** The command line arguments of the configure script */ BEGIN_NAMESPACE_OPENTURNS static const char ConfigureArgs[] = "@ot_configure_args@"; static const char ConfigureDate[] = "@ot_configure_date@"; static const char Revision[] = "@ot_revision@"; static const char InstallationDirectory[] = "@prefix@"; END_NAMESPACE_OPENTURNS openturns-1.9/lib/include/installed-OTconfig.h.in000066400000000000000000000025161307543307100220630ustar00rootroot00000000000000/** * @brief The header file that contains macros needed by other installed header files * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ /* Support for regular expression library */ #cmakedefine OPENTURNS_HAVE_LIBXML2 /* Define to 1 if you have the header file. */ #cmakedefine OPENTURNS_HAVE_PTHREAD_H /* Support for TBB library */ #cmakedefine OPENTURNS_HAVE_TBB /* Define to 1 if UnsignedLong and uint64_t are the same type */ #cmakedefine OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" openturns-1.9/lib/include/openturns/000077500000000000000000000000001307543307100176515ustar00rootroot00000000000000openturns-1.9/lib/include/openturns/OTconfig.hxx000066400000000000000000000035311307543307100221140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A wrapper file to include OTconfig.h and redefine some symbols * @brief A wrapper file to include OTconfig.h and redefine some symbols * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTCONFIG_HXX #define OPENTURNS_OTCONFIG_HXX /** * The OTconfig.h header file is generated automatically at configuration * step (see CMake documentation) according to the build platform environment. * It contains macro definitions whose value is determined by the CMakeLists.txt * script and propagated inside any source files. */ #ifndef OPENTURNS_OTCONFIG_H #define OPENTURNS_OTCONFIG_H #include "openturns/OTconfig.h" // #define OPENTURNS_PACKAGE_BUGREPORT PACKAGE_BUGREPORT // #define OPENTURNS_PACKAGE_NAME PACKAGE_NAME // #define OPENTURNS_PACKAGE_STRING PACKAGE_STRING // #define OPENTURNS_PACKAGE_TARNAME PACKAGE_TARNAME // #define OPENTURNS_PACKAGE_VERSION PACKAGE_VERSION // #undef PACKAGE_BUGREPORT // #undef PACKAGE_NAME // #undef PACKAGE_STRING // #undef PACKAGE_TARNAME // #undef PACKAGE_VERSION // #undef VERSION #endif /* OPENTURNS_OTCONFIG_H */ #endif /* OPENTURNS_OTCONFIG_HXX */ openturns-1.9/lib/include/openturns/OTdebug.h000066400000000000000000000073111307543307100213550ustar00rootroot00000000000000// -*- C -*- /** * @brief The header file of OpenTURNS for debug level * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTDEBUG_H # define OPENTURNS_OTDEBUG_H # include /* POSIX: for inclusion of in GNU glibc systems */ /* BEGIN_C_DECLS should be used at the beginning of your declarations, so that C++ compilers don't mangle their names. Use END_C_DECLS at the end of C declarations. */ #undef BEGIN_C_DECLS #undef END_C_DECLS #ifdef __cplusplus # define BEGIN_C_DECLS extern "C" { # define END_C_DECLS } #else # define BEGIN_C_DECLS /* empty */ # define END_C_DECLS /* empty */ #endif # ifdef __GNUC__ # define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) # if GCC_VERSION <= 30406 /* GCC 3.4.6 and below */ # define REINTERPRET_CAST(T,V) ( (T) (V) ) # else /* GCC after 3.4.6 */ # define REINTERPRET_CAST(T,V) ( reinterpret_cast< T > (V) ) # endif /* GCC 3.4.6 test */ # if !defined(WIN32) && !defined(__APPLE__) /* __GLIBC_PREREQ not defined on mingw or OSX */ /* The pthread library is bogus for glibc < 2.10 */ # if defined(__GNU_LIBRARY__) && ! __GLIBC_PREREQ(2, 10) # define BOGUS_PTHREAD_LIBRARY 1 # endif # endif # ifdef SWIG # define DEPRECATED # define UNUSED # define NOTHROW # else /* not SWIG */ # define DEPRECATED __attribute__ ((deprecated)) # define UNUSED __attribute__ ((unused)) # define NOTHROW __attribute__ ((nothrow)) # endif /* SWIG */ # else /* not __GNUC_ */ # define REINTERPRET_CAST(T,V) ( reinterpret_cast< T > (V) ) # define GCC_VERSION 0 # define DEPRECATED # define UNUSED # define NOTHROW # endif /* __GNUC_ */ /* From http://gcc.gnu.org/wiki/Visibility */ /* Generic helper definitions for shared library support */ #if defined _WIN32 || defined __CYGWIN__ #define OT_HELPER_DLL_IMPORT __declspec(dllimport) #define OT_HELPER_DLL_EXPORT __declspec(dllexport) #define OT_HELPER_DLL_LOCAL #else #if __GNUC__ >= 4 #define OT_HELPER_DLL_IMPORT __attribute__ ((visibility ("default"))) #define OT_HELPER_DLL_EXPORT __attribute__ ((visibility ("default"))) #define OT_HELPER_DLL_LOCAL __attribute__ ((visibility ("hidden"))) #else #define OT_HELPER_DLL_IMPORT #define OT_HELPER_DLL_EXPORT #define OT_HELPER_DLL_LOCAL #endif #endif /* Now we use the generic helper definitions above to define OT_API and OT_LOCAL. * OT_API is used for the public API symbols. It either DLL imports or DLL exports (or does nothing for static build) * OT_LOCAL is used for non-api symbols. */ #ifndef OT_STATIC /* defined if OT is compiled as a DLL */ #ifdef OT_DLL_EXPORTS /* defined if we are building the OT DLL (instead of using it) */ #define OT_API OT_HELPER_DLL_EXPORT #else #define OT_API OT_HELPER_DLL_IMPORT #endif /* OT_DLL_EXPORTS */ #define OT_LOCAL OT_HELPER_DLL_LOCAL #else /* OT_STATIC is defined: this means OT is a static lib. */ #define OT_API #define OT_LOCAL #endif /* !OT_STATIC */ #endif /* OPENTURNS_OTDEBUG_H */ openturns-1.9/lib/include/openturns/OTmemory.hxx000066400000000000000000000024121307543307100221540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The header file that declares de-/allocation operators * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTMEMORY_HXX #define OPENTURNS_OTMEMORY_HXX #ifdef DEBUG_MEMORY #ifndef SWIG #include // These static functions are overloaded for debugging purpose extern void * operator new (size_t sz); extern void operator delete (void * ptr); extern void * operator new [] (size_t sz); extern void operator delete [] (void * ptr); #endif /* SWIG */ #endif /* DEBUG_MEMORY */ #endif /* OPENTURNS_OTMEMORY_HXX */ openturns-1.9/lib/include/openturns/OTprivate.hxx000066400000000000000000000065231307543307100223250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The internal header file of OpenTURNS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ /** * @mainpage OpenTURNS API documentation * * This documentation is intented to be used by experienced programmers. * It shows the API of almost all the objects defined by the C++ core library * of OpenTURNS. * * There may be undocumented features or objects. This is a mistake. You can help * us improve the software by noticing us of these caveats or by documenting them yourself * as a friendly user. * * As visible either in the directory structure or in the namespace naming, * the library is divided in two main pieces: * - the Base part * - the Uncertainty part * * \section Base * The Base part of the library provides containers and algorithms of common usage, such * as multidimensional points (\link OT::Point Point\endlink), * aka vectors, samples * (\link OT::Sample Sample\endlink) * or functions (\link OT::Function Function\endlink). * Every concept in OpenTURNS is multidimensional unless clearly expressed or documented. * * \section Uncertainty * The Uncertainty part of the library provides objects and algorithms designed to achieve * probabilistic analyses. Here you will find things like distributions (\link OT::Distribution * Distribution\endlink or \link OT::Normal Normal\endlink), * random vectors (\link OT::RandomVector RandomVector\endlink), algorithms * (\link OT::FORM FORM\endlink or \link OT::MonteCarlo * MonteCarlo\endlink) or statistical tests (\link OT::FittingTest FittingTest\endlink). * * As you will probably see, a particular attention was paid to precisely name classes and objects * according to their usage. We hope this will help you enter the library. * * The OpenTURNS core team. */ #ifndef OPENTURNS_OTPRIVATE_HXX #define OPENTURNS_OTPRIVATE_HXX /* * This include defines the debug level in all source code. */ #include "openturns/OTdebug.h" /* * The OTtypes.hxx header file contains all type declarations used by * the OpenTURNS platform. */ #include "openturns/OTtypes.hxx" /* * The OTmemory.hxx header file declares some debugging memory functions */ #include "openturns/OTmemory.hxx" /* * Assertions are needed to ensure invariant respect */ #include /* * Some templates to ease C memory allocation */ #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_STDLIB_H #include #endif template T * newC(size_t count = 1) { T * ptr = static_cast( calloc( count, sizeof(T) ) ); return ptr; } template void deleteC(const T * ptr) { free( const_cast( ptr ) ); } #endif /* OPENTURNS_OTPRIVATE_HXX */ openturns-1.9/lib/include/openturns/OTtestcode.hxx000066400000000000000000000173011307543307100224610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The header file that declares exit codes for tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTESTCODE_HXX #define OPENTURNS_OTTESTCODE_HXX #include "openturns/OTconfig.hxx" #include #include // for std::string #include // for std::ostringstream #include // for exit codes #include // for strcmp #ifdef _MSC_VER # include // for _set_output_format #endif #include "openturns/RandomGenerator.hxx" #include "openturns/OStream.hxx" #include "openturns/Sample.hxx" #define TESTPREAMBLE { OT::Test::parseOptions(argc, argv); } BEGIN_NAMESPACE_OPENTURNS /** * @brief The namespace for test specific definitions */ namespace Test { /** * @typedef int ExitCodeValue * ExitCodeValue is the type of the exit code to the operating * system. The actual type is determined at configuration time. */ typedef int ExitCodeValue; /** * @class ExitCode * Class ExitCode is a compound that declares exit codes to the * operating system when doing the test suite of the project. * Each code has a special meaning to the operating system, and * precisely to the compilation tools (automake et al.) that use * them to know if the test succeeded or failed. */ class ExitCode { public: /** You should return Success when it's OK */ static const ExitCodeValue Success = EXIT_SUCCESS; /** You should return Error when something went wrong */ static const ExitCodeValue Error = EXIT_FAILURE; /** You should return ExpectedToFail when it failed as it should */ static const ExitCodeValue ExpectedToFail = 77; } ; /* class ExitCode */ /** * Function parseOptions analyse what the user put * on the command line of the executable. */ inline void parseOptions(int argc, char *argv[]) { for(int i = 1; i < argc; ++ i) { if (!strcmp(argv[i], "--version")) { std::cout << argv[0] << " version " << PACKAGE_VERSION << " (copyright 2005-2010 " << PACKAGE_NAME << ")" << std::endl; exit(ExitCode::Success); } } /* end for */ #if defined(_MSC_VER) && (_MSC_VER < 1900) // Windows displays scientific notation with 3 digits in the exponent. // We force 2 digits to avoid test failures. _set_output_format(_TWO_DIGIT_EXPONENT); #endif } /** * Random generator initialization */ inline void setRandomGenerator() { RandomGenerator::SetSeed(0); } /** * @class TestFailed * * Class TestFailed is an exception derived class that should be * used to throw exception in unitary test code. */ class TestFailed : public std::exception { public: TestFailed(const std::string & message) : message_(message) {} ~TestFailed() throw() {} const char * what() const throw() { return message_.c_str(); } private: const std::string message_; }; inline std::ostream & operator <<(std::ostream & os, const TestFailed & obj) { return os << "*** EXCEPTION ***" << std::endl << "TestFailed : " << obj.what() << std::endl << "*****************"; } /** * @fn streamObject(const T & anObject) * * Try to stream an object onto an ostream object (std::cout). * This method tests the operator << of the object. */ template void streamObject(const T & anObject) { std::cout << "streamObject(const T & anObject)" << std::endl; OT::OStream fullprint(std::cout); fullprint << anObject << std::endl; } /** * @fn show_className() * * Try to get the name of the class. Check the GetClassName static * method. */ template void showClassName() { std::cout << "Testing class " << T::GetClassName() << std::endl; } /** * @fn checkConstructorAndDestructor() * * Try to instanciate an object and delete it. This method tests the * default constructor and the destructor ot the class. */ template void checkConstructorAndDestructor() { std::cout << "checkConstructorAndDestructor()" << std::endl; // Call the default constructor T anObject; } /** * @fn checkCopyConstructor() * * Try to instanciate an object and copy-construct it. */ template void checkCopyConstructor() { std::cout << "checkCopyConstructor()" << std::endl; // Call the default constructor T anObject; // Call the copy-contructor T anCopiedObject( anObject ); } /** * @fn areSameObjects(const T & firstObject, const T & secondObject) * * Try to compare two objects supposed to be identical. * This method tests the operator == of the object. */ template OT::Bool areSameObjects(const T & firstObject, const T & secondObject) { std::cout << "areSameObjects(const T & firstObject, const T & secondObject)" << std::endl; return (firstObject == secondObject); } /** * @fn areDifferentObjects(const T & firstObject, const T & secondObject) * * Try to compare two objects supposed to be different. * This method tests the operator != of the object. */ template OT::Bool areDifferentObjects(const T & firstObject, const T & secondObject) { std::cout << "areDifferentObjects(const T & firstObject, const T & secondObject)" << std::endl; return (firstObject != secondObject); } /** * @fn checkClassWithoutClassName() * * Try to check the standard functionnalities of the class */ template void checkClassWithoutClassName() { checkConstructorAndDestructor(); checkCopyConstructor(); T object1; streamObject(object1); T object2(object1); streamObject(object2); if (! areSameObjects(object1, object2)) { throw TestFailed("areSameObjects(object1, object2)"); } if (areDifferentObjects(object1, object2)) { throw TestFailed("areDifferentObjects(object1, object2)"); } } /** * @fn checkClassWithClassName() * * Try to check some basic functionnalities of the class */ template void checkClassWithClassName() { showClassName(); checkClassWithoutClassName(); } inline void assert_almost_equal(Scalar a, Scalar b, Scalar rtol = 1.0e-5, Scalar atol = 1.0e-8) { if (std::abs(a - b) > atol + rtol * std::abs(b) ) { throw TestFailed(OSS() << "Value " << a << " is not close enough to " << b); } } inline void assert_almost_equal(const Point & a, const Point & b, Scalar rtol = 1.0e-5, Scalar atol = 1.0e-8) { const UnsignedInteger dimension = a.getDimension(); for (UnsignedInteger j = 0; j < dimension; ++ j ) { assert_almost_equal(a[j], b[j], rtol, atol); } } inline void assert_almost_equal(const Sample & a, const Sample & b, Scalar rtol = 1.0e-5, Scalar atol = 1.0e-8) { const UnsignedInteger size = a.getSize(); const UnsignedInteger dimension = a.getDimension(); for ( UnsignedInteger i = 0; i < size; ++ i ) { for (UnsignedInteger j = 0; j < dimension; ++ j ) { assert_almost_equal(a[i][j], b[i][j], rtol, atol); } } } } /* namespace Test */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OTTESTCODE_HXX */ openturns-1.9/lib/include/openturns/OTthread.hxx000066400000000000000000000021331307543307100221130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The header file that declares thread operators * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTHREAD_HXX #define OPENTURNS_OTTHREAD_HXX #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_PTHREAD_H #include #include "openturns/OTwindows.h" #endif /* OPENTURNS_HAVE_PTHREAD_H */ #endif /* OPENTURNS_OTTHREAD_HXX */ openturns-1.9/lib/include/openturns/OTtypes.hxx000066400000000000000000000054461307543307100220220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The header file that declares all general types * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTYPES_HXX #define OPENTURNS_OTTYPES_HXX #include // for std::string #include // for std::complex #include // for u_int64_t /** * @namespace OpenTURNS * @brief The namespace where all OpenTURNS symbols live. */ #define BEGIN_NAMESPACE_OPENTURNS namespace OT { #define END_NAMESPACE_OPENTURNS } BEGIN_NAMESPACE_OPENTURNS /** * Type Bool is an alias for the C++ standard bool type */ typedef bool Bool; /** * Type String should store Unicode strings (for later internationalization) */ typedef std::string String; /** * Type Id is an unique identifier number for PersistentObjects */ typedef unsigned long Id; /** * Type Scalar is a floating point number representation */ typedef double Scalar; /** @deprecated */ typedef double NumericalScalar; /** * Type Complex is a complex floating point number representation */ typedef std::complex Complex; /** @deprecated */ typedef std::complex NumericalComplex; /** * Type FileName stores file names and pathes */ typedef std::string FileName; /** * Type UnsignedInteger stores unsigned integers. */ typedef unsigned long UnsignedInteger; /** * Type SignedInteger stores signed integers. */ typedef long SignedInteger; /** * Type Unsigned64BitsInteger stores unsigned values that needs 64 bits word length. */ typedef uint64_t Unsigned64BitsInteger; /** * Type Signed64BitsInteger stores signed values that needs 64 bits word length. */ typedef int64_t Signed64BitsInteger; /** * Type LibraryHandle stores dynamic library pointers */ typedef void * LibraryHandle; /** * Type LibrarySymbol stores pointers library symbols */ typedef void * LibrarySymbol; /** * The types for utility functions */ typedef void (*LogFunctionPointer) (const String &); END_NAMESPACE_OPENTURNS /** * An alias to namespace OT. * @sa OT */ namespace OpenTURNS = OT; #endif /* OPENTURNS_OTTYPES_HXX */ openturns-1.9/lib/include/openturns/OTwindows.h000066400000000000000000000006031307543307100217560ustar00rootroot00000000000000/* * @brief Include windows.h cleanly */ #ifdef WIN32 #ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN #endif #ifndef NOMINMAX # define NOMINMAX #endif #include // windows.h which defines a HUGE number of macros... // wrappers #undef GetClassName #undef ERROR #undef IN #undef OUT // ev3 #undef DIFFERENCE #undef CONST #undef interface #undef NONE #endif openturns-1.9/lib/include/pthread_win32/000077500000000000000000000000001307543307100202655ustar00rootroot00000000000000openturns-1.9/lib/include/pthread_win32/pthread.h000066400000000000000000000266211307543307100220740ustar00rootroot00000000000000/* * StarPU * Copyright (C) Université Bordeaux 1, CNRS 2010 (see AUTHORS file) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License in COPYING.LGPL for more details. */ /* This is a minimal pthread implementation based on windows functions. * It is *not* intended to be complete - just complete enough to get * StarPU running. */ #ifndef __STARPU_PTHREAD_H__ #define __STARPU_PTHREAD_H__ /* pthread_mutex_init does not support PTHREAD_MUTEX_ERRORCHECK */ #define OT_MUTEXINIT_NOCHECK 1 /* TODO: * pthread_rwlock_* * pthread_spinlock_* */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include #undef interface #include #include #include #ifdef __CYGWIN32__ #include #define unixErrno() cygwin_internal(CW_GET_ERRNO_FROM_WINERROR, (GetLastError()) #else #define unixErrno() EIO #endif #if 0 #define setSystemErrno() do { fprintf(stderr,"%s:%d: win %d\n", __FILE__, __LINE__, GetLastError()); errno = unixErrno(); } while (0) #define winPthreadAssertWindows(expr) do { if (!(expr)) { fprintf(stderr,"%s:%d: %d\n", __FILE__, __LINE__, unixErrno()); return unixErrno(); } } while (0) #define winPthreadAssertPthread(expr) do { int ret = (expr); if (ret) { fprintf(stderr,"%s:%d: %d\n", __FILE__, __LINE__, ret); return ret; } } while (0) #define winPthreadAssert(expr) do { if (!(expr)) { fprintf(stderr,"%s:%d: %d\n", __FILE__, __LINE__, errno); return EIO; } } while (0) #else #define setSystemErrno() errno = unixErrno() #define winPthreadAssertWindows(expr) do { if (!(expr)) { return unixErrno(); } } while (0) #define winPthreadAssertPthread(expr) do { int ret = (expr); if (ret) return ret; } while (0) #define winPthreadAssert(expr) do { if (!(expr)) return EIO; } while (0) #endif /*********** * threads * ***********/ typedef DWORD pthread_attr_t; typedef HANDLE pthread_t; static __inline pthread_t pthread_self(void) { return GetCurrentThread(); } static __inline int pthread_equal(pthread_t t1, pthread_t t2) { return t1 == t2; } static __inline int pthread_attr_init (pthread_attr_t *attr) { *attr = 0; return 0; } #define PTHREAD_CREATE_DETACHED 1 static __inline int pthread_attr_setdetachstate (pthread_attr_t *attr, int yes) { (void)attr; (void)yes; /* not supported, ignore */ return 0; } static __inline int pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize) { (void)attr; (void)stacksize; /* not supported, ignore */ return 0; } static __inline int pthread_attr_destroy (pthread_attr_t *attr) { (void)attr; return 0; } /* "real" cleanup handling not yet implemented */ typedef struct { void (*routine) (void *); void *arg; } __pthread_cleanup_handler; void pthread_cleanup_push (void (*routine) (void *), void *arg); #define pthread_cleanup_push(routine, arg) do { \ __pthread_cleanup_handler __cleanup_handler = {routine, arg}; void pthread_cleanup_pop (int execute); #define pthread_cleanup_pop(execute) \ if (execute) __cleanup_handler.routine(__cleanup_handler.arg); \ } while (0); static __inline int pthread_create ( pthread_t *thread, const pthread_attr_t *attr, void * (*fun) (void *), void *arg ) { if (attr && *attr) return EINVAL; winPthreadAssertWindows(*thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) fun, arg, 0, NULL)); return 0; } static __inline int pthread_setcancelstate (int state, int *oldstate) { (void)state; (void)oldstate; /* not yet implemented :( */ return 0; } static __inline int pthread_cancel (pthread_t thread) { /* This is quite harsh :( */ winPthreadAssertWindows(TerminateThread(thread, 0)); return 0; } static __inline void pthread_exit (void *res) { ExitThread((DWORD) (DWORD_PTR) res); } static __inline int pthread_join (pthread_t thread, void **res) { again: switch (WaitForSingleObject(thread, INFINITE)) { default: case WAIT_FAILED: return unixErrno(); case WAIT_ABANDONED: case WAIT_OBJECT_0: break; case WAIT_TIMEOUT: goto again; } if (res) { DWORD _res; if (GetExitCodeThread(thread, &_res)) *res = (void *)(DWORD_PTR)_res; } return 0; } /*********** * mutexes * ***********/ #define PTHREAD_MUTEX_INITIALIZER NULL typedef HANDLE pthread_mutex_t; #define PTHREAD_MUTEX_RECURSIVE 1 #define PTHREAD_MUTEX_ERRORCHECK 2 typedef int pthread_mutexattr_t; static __inline int pthread_mutexattr_init(pthread_mutexattr_t *attr) { *attr = PTHREAD_MUTEX_RECURSIVE; return 0; } static __inline int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type) { if (type != PTHREAD_MUTEX_RECURSIVE && type != PTHREAD_MUTEX_ERRORCHECK) return EINVAL; *attr = type; return 0; } static __inline int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *attr) { if (attr && *attr!=PTHREAD_MUTEX_RECURSIVE) return EINVAL; winPthreadAssertWindows(*mutex = CreateMutex(NULL, FALSE, NULL)); return 0; } static __inline int pthread_mutex_unlock (pthread_mutex_t *mutex) { winPthreadAssertWindows(ReleaseMutex(*mutex)); return 0; } static __inline int pthread_mutex_lock (pthread_mutex_t *mutex); static __inline int __pthread_mutex_alloc_concurrently (pthread_mutex_t *mutex) { HANDLE mutex_init_mutex; /* Get access to one global named mutex to serialize mutex initialization */ winPthreadAssertWindows((mutex_init_mutex = CreateMutex(NULL, FALSE, "StarPU mutex init"))); winPthreadAssertPthread(pthread_mutex_lock(&mutex_init_mutex)); /* Now we are the one that can initialize it */ if (!*mutex) winPthreadAssertPthread(pthread_mutex_init(mutex,NULL)); winPthreadAssertPthread(pthread_mutex_unlock(&mutex_init_mutex)); winPthreadAssertWindows(CloseHandle(mutex_init_mutex)); return 0; } static __inline int pthread_mutex_lock (pthread_mutex_t *mutex) { if (!*mutex) __pthread_mutex_alloc_concurrently (mutex); again: switch (WaitForSingleObject(*mutex, INFINITE)) { default: case WAIT_FAILED: return unixErrno();; case WAIT_ABANDONED: case WAIT_OBJECT_0: return 0; case WAIT_TIMEOUT: goto again; } } static __inline int pthread_mutex_trylock (pthread_mutex_t *mutex) { if (!*mutex) __pthread_mutex_alloc_concurrently (mutex); switch (WaitForSingleObject(*mutex, 0)) { default: case WAIT_FAILED: return unixErrno(); case WAIT_ABANDONED: case WAIT_OBJECT_0: return 0; case WAIT_TIMEOUT: return EBUSY; } } static __inline int pthread_mutex_destroy (pthread_mutex_t *mutex) { winPthreadAssertWindows(CloseHandle(*mutex)); *mutex = INVALID_HANDLE_VALUE; return 0; } /******************************************** * rwlock * * VERY LAZY, don't even look at it please! * * Should be fine unoptimized for now. * * TODO: FIXME, using conds for instance? * ********************************************/ #define PTHREAD_RWLOCK_INITIALIZER NULL typedef pthread_mutex_t pthread_rwlock_t; typedef int pthread_rwlockattr_t; #define pthread_rwlock_init(lock, attr) pthread_mutex_init(lock, NULL) #define pthread_rwlock_wrlock(lock) pthread_mutex_lock(lock) #define pthread_rwlock_rdlock(lock) pthread_mutex_lock(lock) #define pthread_rwlock_unlock(lock) pthread_mutex_unlock(lock) #define pthread_rwlock_destroy(lock) pthread_mutex_destroy(lock) /************** * conditions * **************/ typedef struct { HANDLE sem; volatile unsigned nbwait; } pthread_cond_t; #define PTHREAD_COND_INITIALIZER { NULL, 0} #ifndef _TIMESPEC_DEFINED #if !defined(STARPU_TIMESPEC_DEFINED) && (defined(_MSC_VER) && (_MSC_VER < 1800)) #define STARPU_TIMESPEC_DEFINED 1 struct timespec { time_t tv_sec; /* Seconds */ long tv_nsec; /* Nanoseconds */ }; #endif /* STARPU_TIMESPEC_DEFINED */ #endif typedef unsigned pthread_condattr_t; static __inline int pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr) { if (attr) return EINVAL; winPthreadAssertWindows(cond->sem = CreateSemaphore(NULL, 0, MAXLONG, NULL)); cond->nbwait = 0; return 0; } static __inline int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *time) { if (!cond->sem) winPthreadAssertPthread(pthread_cond_init(cond,NULL)); cond->nbwait++; winPthreadAssertPthread(pthread_mutex_unlock(mutex)); again: switch (WaitForSingleObject(cond->sem, (DWORD) (time->tv_sec*1000+time->tv_nsec/1000))) { default: case WAIT_FAILED: { int error = unixErrno(); winPthreadAssertPthread(pthread_mutex_lock(mutex)); return error; } case WAIT_TIMEOUT: goto again; case WAIT_ABANDONED: case WAIT_OBJECT_0: break; } winPthreadAssertPthread(pthread_mutex_lock(mutex)); cond->nbwait--; return 0; } static __inline int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) { if (!cond->sem) winPthreadAssertPthread(pthread_cond_init(cond,NULL)); cond->nbwait++; winPthreadAssertPthread(pthread_mutex_unlock(mutex)); again: switch (WaitForSingleObject(cond->sem, INFINITE)) { case WAIT_FAILED: { int error; error = unixErrno(); winPthreadAssertPthread(pthread_mutex_lock(mutex)); return error; } case WAIT_TIMEOUT: goto again; case WAIT_ABANDONED: case WAIT_OBJECT_0: break; } winPthreadAssertPthread(pthread_mutex_lock(mutex)); cond->nbwait--; return 0; } static __inline int pthread_cond_signal (pthread_cond_t *cond) { if (!cond->sem) winPthreadAssertPthread(pthread_cond_init(cond,NULL)); if (cond->nbwait) ReleaseSemaphore(cond->sem, 1, NULL); return 0; } static __inline int pthread_cond_broadcast (pthread_cond_t *cond) { if (!cond->sem) winPthreadAssertPthread(pthread_cond_init(cond,NULL)); ReleaseSemaphore(cond->sem, cond->nbwait, NULL); return 0; } static __inline int pthread_cond_destroy (pthread_cond_t *cond) { if (cond->sem) { winPthreadAssertWindows(CloseHandle(cond->sem)); cond->sem = NULL; } return 0; } /******* * TLS * *******/ typedef DWORD pthread_key_t; #define PTHREAD_ONCE_INIT {PTHREAD_MUTEX_INITIALIZER, 0} typedef struct { pthread_mutex_t mutex; unsigned done; } pthread_once_t; static __inline int pthread_once (pthread_once_t *once, void (*oncefun)(void)) { winPthreadAssertPthread(pthread_mutex_lock(&once->mutex)); if (!once->done) { oncefun(); once->done = 1; } winPthreadAssertPthread(pthread_mutex_unlock(&once->mutex)); return 0; } static __inline int pthread_key_create (pthread_key_t *key, void (*freefun)(void *)) { pthread_key_t res; winPthreadAssertWindows((res = TlsAlloc()) != 0xFFFFFFFF); *key = res; return 0; } static __inline int pthread_key_delete (pthread_key_t key) { winPthreadAssertWindows(TlsFree(key)); return 0; } static __inline void *pthread_getspecific (pthread_key_t key) { return TlsGetValue(key); } static __inline int pthread_setspecific (pthread_key_t key, const void *data) { winPthreadAssertWindows(TlsSetValue(key, (LPVOID) data)); return 0; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __STARPU_PTHREAD_H__ */ openturns-1.9/lib/include/pthread_win32/semaphore.h000066400000000000000000000034231307543307100224230ustar00rootroot00000000000000/* * StarPU * Copyright (C) Université Bordeaux 1, CNRS 2010 (see AUTHORS file) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License in COPYING.LGPL for more details. */ /* This is a minimal pthread implementation based on windows functions. * It is *not* intended to be complete - just complete enough to get * StarPU running. */ #ifndef __STARPU_SEMAPHORE_H__ #define __STARPU_SEMAPHORE_H__ #include "pthread.h" /************** * semaphores * **************/ typedef HANDLE sem_t; static __inline int sem_init(sem_t *sem, int pshared, unsigned int value) { (void)pshared; winPthreadAssertWindows(*sem = CreateSemaphore(NULL, value, MAXLONG, NULL)); return 0; } static __inline int do_sem_wait(sem_t *sem, DWORD timeout) { switch (WaitForSingleObject(*sem, timeout)) { default: case WAIT_FAILED: setSystemErrno(); return -1; case WAIT_TIMEOUT: errno = EAGAIN; return -1; case WAIT_ABANDONED: case WAIT_OBJECT_0: return 0; } } #define sem_wait(sem) do_sem_wait(sem, INFINITE) #define sem_trywait(sem) do_sem_wait(sem, 0) static __inline int sem_post(sem_t *sem) { winPthreadAssertWindows(ReleaseSemaphore(*sem, 1, NULL)); return 0; } static __inline int sem_destroy(sem_t *sem) { winPthreadAssertWindows(CloseHandle(*sem)); return 0; } #endif /* __STARPU_SEMAPHORE_H__ */ openturns-1.9/lib/include/pthread_win32/unistd.h000066400000000000000000000000671307543307100217470ustar00rootroot00000000000000/* Empty file for Windows builds with MSVC compiler */ openturns-1.9/lib/src/000077500000000000000000000000001307543307100147605ustar00rootroot00000000000000openturns-1.9/lib/src/Base/000077500000000000000000000000001307543307100156325ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Algo/000077500000000000000000000000001307543307100165145ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Algo/ApproximationAlgorithm.cxx000066400000000000000000000057211307543307100237460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Regression from a data sample upon a particular basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ApproximationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ApproximationAlgorithm); /* Constructor from implementation */ ApproximationAlgorithm::ApproximationAlgorithm(const ApproximationAlgorithmImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* Constructor from implementation */ ApproximationAlgorithm::ApproximationAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Accessors */ Sample ApproximationAlgorithm::getX() const { return getImplementation()->getX(); } Sample ApproximationAlgorithm::getY() const { return getImplementation()->getY(); } Point ApproximationAlgorithm::getWeight() const { return getImplementation()->getWeight(); } Basis ApproximationAlgorithm::getPsi() const { return getImplementation()->getPsi(); } /* Verbosity accessor */ void ApproximationAlgorithm::setVerbose(const Bool verbose) { copyOnWrite(); getImplementation()->setVerbose(verbose); } Bool ApproximationAlgorithm::getVerbose() const { return getImplementation()->getVerbose(); } /* String converter */ String ApproximationAlgorithm::__repr__() const { return getImplementation()->__repr__(); } String ApproximationAlgorithm::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } /* Perform approximation */ void ApproximationAlgorithm::run() { getImplementation()->run(); } void ApproximationAlgorithm::run(const DesignProxy & proxy) { getImplementation()->run(proxy); } /* Acccessor to the coefficients of the selected metamodel on the provided basis */ Point ApproximationAlgorithm::getCoefficients() { return getImplementation()->getCoefficients(); } Scalar ApproximationAlgorithm::getResidual() { return getImplementation()->getResidual(); } /* Acccessor to the residual of the selected metamodel on the provided basis */ Scalar ApproximationAlgorithm::getRelativeError() { return getImplementation()->getRelativeError(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/ApproximationAlgorithmImplementation.cxx000066400000000000000000000157231307543307100266570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Regression from a data sample upon a particular basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ApproximationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ApproximationAlgorithmImplementation); static const Factory Factory_ApproximationAlgorithmImplementation; /* Default constructor */ ApproximationAlgorithmImplementation::ApproximationAlgorithmImplementation() : PersistentObject() , hasUniformWeight_(true) , isAlreadyComputedCoefficients_(false) , residual_(0.0) , relativeError_(0.0) , verbose_(false) { // Nothing to do } /* Default constructor */ ApproximationAlgorithmImplementation::ApproximationAlgorithmImplementation(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) : PersistentObject() , x_(x) , y_(y) , weight_(Point( x.getSize(), 1.0 )) , hasUniformWeight_(true) , psi_(psi) , currentIndices_(indices) , isAlreadyComputedCoefficients_(false) , residual_(0.0) , relativeError_(0.0) , verbose_(false) { const UnsignedInteger dataSize = x.getSize(); if (dataSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on an empty sample."; if (dataSize != y.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on samples of different size."; if (y.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on output sample of dimension different from 1."; } /* Default constructor */ ApproximationAlgorithmImplementation::ApproximationAlgorithmImplementation(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) : PersistentObject() , x_(x) , y_(y) , weight_() , hasUniformWeight_(false) , psi_(psi) , currentIndices_(indices) , isAlreadyComputedCoefficients_(false) , residual_(0.0) , relativeError_(0.0) , verbose_(false) { UnsignedInteger dataSize = x.getSize(); if (dataSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on an empty sample."; if (dataSize != y.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on samples of different size."; if (y.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation based on output sample of dimension different from 1."; if ( dataSize != weight.getDimension() ) throw InvalidArgumentException(HERE) << "Error: cannot perform approximation with weight of improper dimension."; setWeight(weight); } /* Virtual constructor */ ApproximationAlgorithmImplementation * ApproximationAlgorithmImplementation::clone() const { return new ApproximationAlgorithmImplementation(*this); } /* Accessors */ Sample ApproximationAlgorithmImplementation::getX() const { return x_; } Sample ApproximationAlgorithmImplementation::getY() const { return y_; } /* Weight accessors */ void ApproximationAlgorithmImplementation::setWeight(const Point & weight) { const UnsignedInteger size = weight.getSize(); const Scalar firstWeight = weight[0]; hasUniformWeight_ = true; for (UnsignedInteger i = 0; i < size; ++ i) { const Scalar wI = weight[i]; if (!(wI > 0.0)) throw InvalidArgumentException(HERE) << "Error: can only use positive weight."; hasUniformWeight_ = hasUniformWeight_ && (wI == firstWeight); } weight_ = weight; } Point ApproximationAlgorithmImplementation::getWeight() const { return weight_; } Basis ApproximationAlgorithmImplementation::getPsi() const { return psi_; } /* Perform the selection */ void ApproximationAlgorithmImplementation::run() { const DesignProxy proxy(x_, psi_); run(proxy); } void ApproximationAlgorithmImplementation::run(const DesignProxy & proxy) { throw NotYetImplementedException(HERE) << "In ApproximationAlgorithmImplementation::run(const DesignProxy & proxy)"; } /* String converter */ String ApproximationAlgorithmImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " x=" << x_ << " y=" << y_ << " weight=" << weight_ << " psi=" << psi_ << " verbose=" << verbose_ ; } String ApproximationAlgorithmImplementation::__str__(const String & offset) const { return __repr__(); } void ApproximationAlgorithmImplementation::setCoefficients(const Point & coefficients) { coefficients_ = coefficients; isAlreadyComputedCoefficients_ = true; } Point ApproximationAlgorithmImplementation::getCoefficients() { if (! isAlreadyComputedCoefficients_) run(); return coefficients_; } void ApproximationAlgorithmImplementation::setResidual(const Scalar residual) { residual_ = residual; } Scalar ApproximationAlgorithmImplementation::getResidual() { if (! isAlreadyComputedCoefficients_) run(); return residual_; } void ApproximationAlgorithmImplementation::setRelativeError(const Scalar relativeError) { relativeError_ = relativeError; } Scalar ApproximationAlgorithmImplementation::getRelativeError() { if (! isAlreadyComputedCoefficients_) run(); return relativeError_; } /* Verbosity accessor */ void ApproximationAlgorithmImplementation::setVerbose(const Bool verbose) { verbose_ = verbose; } Bool ApproximationAlgorithmImplementation::getVerbose() const { return verbose_; } /* Method save() stores the object through the StorageManager */ void ApproximationAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("x_", x_); adv.saveAttribute("y_", y_); adv.saveAttribute("weight_", weight_); adv.saveAttribute("psi_", psi_); adv.saveAttribute("currentIndices_", currentIndices_); adv.saveAttribute("verbose_", verbose_); } /* Method load() reloads the object from the StorageManager */ void ApproximationAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); Point weight; adv.loadAttribute("x_", x_); adv.loadAttribute("y_", y_); adv.loadAttribute("weight_", weight); adv.loadAttribute("psi_", psi_); adv.loadAttribute("currentIndices_", currentIndices_); adv.loadAttribute("verbose_", verbose_); setWeight(weight); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/ApproximationAlgorithmImplementationFactory.cxx000066400000000000000000000053061307543307100302030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building ApproximationAlgorithmImplementation objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ApproximationAlgorithmImplementationFactory); /* Default constructor */ ApproximationAlgorithmImplementationFactory::ApproximationAlgorithmImplementationFactory() : PersistentObject() { // Nothing to do } ApproximationAlgorithmImplementationFactory * ApproximationAlgorithmImplementationFactory::clone() const { return new ApproximationAlgorithmImplementationFactory( *this ); } ApproximationAlgorithmImplementation * ApproximationAlgorithmImplementationFactory::build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) const { const UnsignedInteger size = x.getSize(); return build( x, y, Point( size, 1.0 ), psi, indices); } ApproximationAlgorithmImplementation * ApproximationAlgorithmImplementationFactory::build(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const { throw NotYetImplementedException(HERE) << "In ApproximationAlgorithmImplementationFactory::build(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const"; // return new PenalizedLeastSquaresAlgorithm( x, y, weight, psi ); } String ApproximationAlgorithmImplementationFactory::__repr__() const { return OSS() << "class=" << getClassName(); } /* Method save() stores the object through the StorageManager */ void ApproximationAlgorithmImplementationFactory::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void ApproximationAlgorithmImplementationFactory::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/CMakeLists.txt000066400000000000000000000073631307543307100212650ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (ApproximationAlgorithmImplementation.cxx) ot_add_source_file (ApproximationAlgorithm.cxx) ot_add_source_file (ApproximationAlgorithmImplementationFactory.cxx) ot_add_source_file (ClassifierImplementation.cxx) ot_add_source_file (Classifier.cxx) ot_add_source_file (FittingAlgorithmImplementation.cxx) ot_add_source_file (FittingAlgorithm.cxx) ot_add_source_file (CorrectedLeaveOneOut.cxx) ot_add_source_file (KDTree.cxx) ot_add_source_file (KFold.cxx) ot_add_source_file (LeastSquaresMetaModelSelection.cxx) ot_add_source_file (LeastSquaresMetaModelSelectionFactory.cxx) ot_add_source_file (PenalizedLeastSquaresAlgorithm.cxx) ot_add_source_file (PenalizedLeastSquaresAlgorithmFactory.cxx) ot_add_source_file (FFTImplementation.cxx) ot_add_source_file (FFT.cxx) ot_add_source_file (KissFFT.cxx) ot_add_source_file (IntegrationAlgorithmImplementation.cxx) ot_add_source_file (IntegrationAlgorithm.cxx) ot_add_source_file (GaussKronrod.cxx) ot_add_source_file (GaussKronrodRule.cxx) ot_add_source_file (GaussLegendre.cxx) ot_add_source_file (IteratedQuadrature.cxx) ot_add_source_file (DesignProxy.cxx) ot_add_source_file (LeastSquaresMethodImplementation.cxx) ot_add_source_file (LeastSquaresMethod.cxx) ot_add_source_file (QRMethod.cxx) ot_add_source_file (SVDMethod.cxx) ot_add_source_file (CholeskyMethod.cxx) ot_add_source_file (SparseMethod.cxx) ot_add_source_file (KarhunenLoeveResultImplementation.cxx) ot_add_source_file (KarhunenLoeveResult.cxx) ot_add_source_file (KarhunenLoeveAlgorithmImplementation.cxx) ot_add_source_file (KarhunenLoeveAlgorithm.cxx) ot_add_source_file (KarhunenLoeveP1Factory.cxx) ot_add_source_file (KarhunenLoeveP1Algorithm.cxx) ot_add_source_file (KarhunenLoeveSVDAlgorithm.cxx) ot_install_header_file (OTAlgo.hxx) ot_install_header_file (ApproximationAlgorithmImplementation.hxx) ot_install_header_file (ApproximationAlgorithm.hxx) ot_install_header_file (ApproximationAlgorithmImplementationFactory.hxx) ot_install_header_file (ClassifierImplementation.hxx) ot_install_header_file (Classifier.hxx) ot_install_header_file (FittingAlgorithmImplementation.hxx) ot_install_header_file (FittingAlgorithm.hxx) ot_install_header_file (CorrectedLeaveOneOut.hxx) ot_install_header_file (KDTree.hxx) ot_install_header_file (KFold.hxx) ot_install_header_file (LeastSquaresMetaModelSelection.hxx) ot_install_header_file (LeastSquaresMetaModelSelectionFactory.hxx) ot_install_header_file (PenalizedLeastSquaresAlgorithm.hxx) ot_install_header_file (PenalizedLeastSquaresAlgorithmFactory.hxx) ot_install_header_file (FFTImplementation.hxx) ot_install_header_file (FFT.hxx) ot_install_header_file (KissFFT.hxx) # ot_install_header_file (kissfft.hh) ot_install_header_file (IntegrationAlgorithmImplementation.hxx) ot_install_header_file (IntegrationAlgorithm.hxx) ot_install_header_file (GaussKronrod.hxx) ot_install_header_file (GaussKronrodRule.hxx) ot_install_header_file (GaussLegendre.hxx) ot_install_header_file (IteratedQuadrature.hxx) ot_install_header_file (DesignProxy.hxx) ot_install_header_file (LeastSquaresMethodImplementation.hxx) ot_install_header_file (LeastSquaresMethod.hxx) ot_install_header_file (QRMethod.hxx) ot_install_header_file (SVDMethod.hxx) ot_install_header_file (CholeskyMethod.hxx) ot_install_header_file (SparseMethod.hxx) ot_install_header_file (KarhunenLoeveResultImplementation.hxx) ot_install_header_file (KarhunenLoeveResult.hxx) ot_install_header_file (KarhunenLoeveAlgorithmImplementation.hxx) ot_install_header_file (KarhunenLoeveAlgorithm.hxx) ot_install_header_file (KarhunenLoeveP1Factory.hxx) ot_install_header_file (KarhunenLoeveP1Algorithm.hxx) ot_install_header_file (KarhunenLoeveSVDAlgorithm.hxx) openturns-1.9/lib/src/Base/Algo/CholeskyMethod.cxx000066400000000000000000000312051307543307100221630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cholesky decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/CholeskyMethod.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CholeskyMethod); static const Factory Factory_CholeskyMethod; /* Default constructor */ CholeskyMethod::CholeskyMethod() : LeastSquaresMethodImplementation() , l_(0) { // Nothing to do } /* Parameters constructor */ CholeskyMethod::CholeskyMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices) : LeastSquaresMethodImplementation(proxy, weight, indices) , l_(0) { // Nothing to do } /* Parameters constructor */ CholeskyMethod::CholeskyMethod(const DesignProxy & proxy, const Indices & indices) : LeastSquaresMethodImplementation(proxy, indices) , l_(0) { // Nothing to do } /* Virtual constructor */ CholeskyMethod * CholeskyMethod::clone() const { return new CholeskyMethod( *this ); } /* String converter */ String CholeskyMethod::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Update the decomposition depending on the way the database or the basis have evolved */ void CholeskyMethod::update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row) { const UnsignedInteger addedSize = addedIndices.getSize(); const UnsignedInteger removedSize = removedIndices.getSize(); // Early exit if nothing has changed if (addedSize == 0 && removedSize == 0) { // initialize decomposition if needed if (l_.getNbRows() == 0) { Indices previousRowFilter(proxy_.getRowFilter()); proxy_.setRowFilter(Indices(0)); MatrixImplementation mPsiAk2(computeWeightedDesign()); // current design l_ = mPsiAk2.computeGram(true).computeCholesky(); proxy_.setRowFilter(previousRowFilter); } else return; } // On row modification if (row) { // Early exit if no computation is reused from the previous call. A more // elaborate strategy could be implemented here, comparing the size of the // reused information and the size of the new information. if (conservedIndices.getSize() == 0) { proxy_.setRowFilter(addedIndices); MatrixImplementation mPsiAk(computeWeightedDesign()); // current design l_ = mPsiAk.computeGram(true).computeCholesky(); return; } // Here we know that some rows have been preserved, so l_ must have been initialized // Compute the full design matrix as we need also the removed rows Indices previousRowFilter(proxy_.getRowFilter()); proxy_.setRowFilter(Indices(0)); MatrixImplementation mPsiAk(computeWeightedDesign()); // current design const UnsignedInteger nbRows = mPsiAk.getNbRows(); const UnsignedInteger nbColumns = mPsiAk.getNbColumns(); proxy_.setRowFilter(previousRowFilter); Point vector(nbColumns); // Start by the added vectors, as it increases the positiveness of // the Gram matrix for (UnsignedInteger i = 0; i < addedSize; ++i) { UnsignedInteger shift = addedIndices[i]; // Extract the row giving the update for (UnsignedInteger j = 0; j < nbColumns; ++j) { const Scalar value = mPsiAk[shift]; vector[j] = value; shift += nbRows; } MatrixImplementation::CholeskyUpdate(*l_.getImplementation(), vector); } // Added rows // Then the removed vectors for (UnsignedInteger i = 0; i < removedSize; ++i) { UnsignedInteger shift = removedIndices[i]; // Extract the row giving the update for (UnsignedInteger j = 0; j < nbColumns; ++j) { vector[j] = mPsiAk[shift]; shift += nbRows; } // The downdating process may failed due to bad conditioning or catastrophic propagation of errors try { MatrixImplementation::CholeskyDowndate(*l_.getImplementation(), vector); } // In case of problems, try a full factorization catch (...) { LOGINFO(OSS() << "In CholeskyMethod::update: failed to downdate row " << removedIndices[i]); MatrixImplementation mPsiAk2(computeWeightedDesign()); // current design l_ = mPsiAk2.computeGram(true).computeCholesky(); return; } } // Added rows } // Update on row modification // On column modification else { Indices newBasis(conservedIndices); newBasis.add(addedIndices); if (removedIndices.getSize() > 0) throw NotYetImplementedException(HERE) << " in CholeskyMethod::update removedIndices.getSize() > 0"; // Update decomposition if (addedIndices.getSize() > 0) { // Do incremental update only if the matrix size is large enough static const UnsignedInteger LargeCase = ResourceMap::GetAsUnsignedInteger("CholeskyMethod-LargeCase"); if (newBasis.getSize() >= LargeCase) { MatrixImplementation mPsiAk(computeWeightedDesign());// old design currentIndices_ = newBasis; if (addedIndices.getSize() != 1) throw InvalidArgumentException(HERE) << " in CholeskyMethod::update addedIndices.getSize() != 1"; const UnsignedInteger basisSize = currentIndices_.getSize(); // update the cholesky decomposition of the Gram matrix const Point xk(computeWeightedDesign(addedIndices)); const Scalar diagk = xk.normSquare(); // solve lower triangular system L*rk=xk'*A to get the extra line panel const Point colk(mPsiAk.genVectProd(xk, true)); const Point rk(l_.solveLinearSystem(colk)); const Scalar rk2 = rk.normSquare(); // Check if the pivot is positive if (diagk > rk2) { // the extra diagonal term const Scalar rkk = sqrt(diagk - rk2); // reconstitute the whole decomposition matrix MatrixImplementation newL(basisSize, basisSize); MatrixImplementation::iterator startNewL(newL.begin()); const MatrixImplementation & l_impl(*l_.getImplementation()); MatrixImplementation::const_iterator startL(l_impl.begin()); UnsignedInteger newShift = 0; UnsignedInteger toCopy = basisSize - 1; for (UnsignedInteger j = 0; j < basisSize - 1; ++ j) { std::copy(startL, startL + toCopy, startNewL); startL += basisSize; startNewL += basisSize + 1; --toCopy; } newShift = basisSize - 1; for (UnsignedInteger j = 0; j < basisSize - 1; ++ j) { newL[newShift] = rk[j]; newShift += basisSize; } newL[newShift] = rkk; // The MatrixImplementation is automatically converted into a TriangularMatrix of the proper shape l_ = newL; return; } // Positive pivot else LOGINFO(OSS() << "In CholeskyMethod::update: failed to update column " << addedIndices[0]); } // newBasis.getSize() > LargeCase // For small problems or negative pivot, use full factorization currentIndices_ = newBasis; // Compute the Cholesky factor l_ = computeWeightedDesign().computeGram(true).computeCholesky(); } // New indices } // Update on column modification } Point CholeskyMethod::solve(const Point & rhs) { // This call insures that the decomposition has already been computed. // No cost if it is up to date. update(Indices(0), currentIndices_, Indices(0)); Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weightSqrt_[i]; } const MatrixImplementation psiAk(computeWeightedDesign()); const Point c(psiAk.genVectProd(b, true)); // We first solve Ly=b then L^Tx=y. The flags given to solveLinearSystemTri() are: // 1) To keep the matrix intact // 2) To say that the matrix L is lower triangular // 3) To say that it is L^Tx=y that is solved instead of Lx=y return l_.getImplementation()->solveLinearSystemTri(l_.solveLinearSystem(c), true, true, true); } Point CholeskyMethod::solveNormal(const Point & rhs) { const UnsignedInteger basisSize = currentIndices_.getSize(); if (rhs.getDimension() != basisSize) throw InvalidArgumentException(HERE) << "CholeskyMethod::solve invalid rhs!"; // This call insures that the decomposition has already been computed. // No cost if it is up to date. update(Indices(0), currentIndices_, Indices(0)); Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weight_[i]; } // We first solve Ly=b then L^Tx=y. The flags given to solveLinearSystemTri() are: // 1) To keep the matrix intact // 2) To say that the matrix L is lower triangular // 3) To say that it is L^Tx=y that is solved instead of Lx=y return l_.getImplementation()->solveLinearSystemTri(l_.solveLinearSystem(b), true, true, true); } CovarianceMatrix CholeskyMethod::getGramInverse() const { const UnsignedInteger basisSize = currentIndices_.getSize(); TriangularMatrix invL(l_.solveLinearSystem(IdentityMatrix(basisSize)).getImplementation()); return invL.computeGram(true); } SymmetricMatrix CholeskyMethod::getH() const { const UnsignedInteger basisSize = currentIndices_.getSize(); TriangularMatrix invL(l_.solveLinearSystem(IdentityMatrix(basisSize)).getImplementation()); MatrixImplementation psiAk(computeWeightedDesign()); return invL.getImplementation()->genProd(psiAk, false, true).computeGram(true); } Point CholeskyMethod::getHDiag() const { const UnsignedInteger basisSize = currentIndices_.getSize(); const MatrixImplementation invL(*l_.solveLinearSystem(IdentityMatrix(basisSize)).getImplementation()); const MatrixImplementation psiAk(computeWeightedDesign()); const MatrixImplementation invLPsiAk(invL.genProd(psiAk, false, true)); const UnsignedInteger dimension = psiAk.getNbRows(); Point diag(dimension); MatrixImplementation::const_iterator invLPsiAk_iterator(invLPsiAk.begin()); for (UnsignedInteger i = 0; i < dimension; ++ i) { Scalar value = 0.0; for (UnsignedInteger j = 0; j < basisSize; ++ j) { value += (*invLPsiAk_iterator) * (*invLPsiAk_iterator); ++invLPsiAk_iterator; } diag[i] = value; } return diag; } Point CholeskyMethod::getGramInverseDiag() const { const UnsignedInteger basisSize = currentIndices_.getSize(); const MatrixImplementation invL(*l_.solveLinearSystem(IdentityMatrix(basisSize)).getImplementation()); Point diag(basisSize); MatrixImplementation::const_iterator invL_iterator(invL.begin()); for (UnsignedInteger i = 0; i < basisSize; ++ i) { Scalar value = 0.0; for (UnsignedInteger j = 0; j < basisSize; ++ j) { value += (*invL_iterator) * (*invL_iterator); ++invL_iterator; } diag[i] = value; } return diag; } Scalar CholeskyMethod::getGramInverseTrace() const { Scalar traceInverse = 0.0; const UnsignedInteger basisSize = currentIndices_.getSize(); const MatrixImplementation invL(*l_.solveLinearSystem(IdentityMatrix(basisSize)).getImplementation()); for (MatrixImplementation::const_iterator it = invL.begin(); it != invL.end(); ++it) { traceInverse += (*it) * (*it); } return traceInverse; } void CholeskyMethod::trashDecomposition() { l_ = TriangularMatrix(); } /* Method save() stores the object through the StorageManager */ void CholeskyMethod::save(Advocate & adv) const { LeastSquaresMethodImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void CholeskyMethod::load(Advocate & adv) { LeastSquaresMethodImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/Classifier.cxx000066400000000000000000000061461307543307100213330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Classification algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Classifier.hxx" #include "openturns/ClassifierImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Classifier); /* Constructor from implementation */ Classifier::Classifier() : TypedInterfaceObject( new ClassifierImplementation() ) { // Nothing to do } /* Constructor from implementation */ Classifier::Classifier(const ClassifierImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* Constructor from implementation */ Classifier::Classifier(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Constructor from implementation */ Classifier::Classifier(const Sample & inS, const Indices & outC) : TypedInterfaceObject( new ClassifierImplementation(inS, outC) ) { // Nothing to do } /* Classify a point */ UnsignedInteger Classifier::classify(const Point & inP) const { return getImplementation()->classify(inP); } /* Classify a sample */ Indices Classifier::classify(const Sample & inS) const { return getImplementation()->classify(inS); } /* Grade a point */ Scalar Classifier::grade(const Point & inP, UnsignedInteger hClass) const { return getImplementation()->grade(inP, hClass); } /* Grade a sample */ Point Classifier::grade(const Sample & inS, const Indices & hClass) const { return getImplementation()->grade(inS, hClass); } /* Verbosity accessor */ void Classifier::setVerbose(const Bool verbose) { copyOnWrite(); getImplementation()->setVerbose(verbose); } Bool Classifier::getVerbose() const { return getImplementation()->getVerbose(); } /** Parallelization flag accessor */ void Classifier::setParallel(const Bool flag) { copyOnWrite(); getImplementation()->setParallel(flag); } Bool Classifier::isParallel() const { return getImplementation()->isParallel(); } /* Input space dimension */ UnsignedInteger Classifier::getDimension() const { return getImplementation()->getDimension(); } /* String converter */ String Classifier::__repr__() const { return getImplementation()->__repr__(); } String Classifier::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/ClassifierImplementation.cxx000066400000000000000000000151141307543307100242340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Classification algorithm base type * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ClassifierImplementation.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ClassifierImplementation); static const Factory Factory_ClassifierImplementation; /* Default constructor */ ClassifierImplementation::ClassifierImplementation() : PersistentObject() , inputSample_(0, 0) , classes_(0) , verbose_(false) , isParallel_(ResourceMap::GetAsBool("Classifier-Parallel")) { // Nothing to do } /* Default constructor */ ClassifierImplementation::ClassifierImplementation(const Sample & inputSample, const Indices & classes) : PersistentObject() , inputSample_(inputSample) , classes_(classes) , verbose_(false) , isParallel_(ResourceMap::GetAsBool("Classifier-Parallel")) { // Nothing to do } ClassifierImplementation * ClassifierImplementation::clone() const { return new ClassifierImplementation(*this); } /* Classify a sample */ UnsignedInteger ClassifierImplementation::classify(const Point & inP) const { throw NotYetImplementedException(HERE) << "In ClassifierImplementation::classify(const Point & inP) const"; } /* Classify a sample */ struct ClassifyPolicy { const Sample & input_; Indices & output_; const ClassifierImplementation * p_classifier_; ClassifyPolicy( const Sample & input, Indices & output, const ClassifierImplementation * p_classifier) : input_(input) , output_(output) , p_classifier_(p_classifier) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i] = p_classifier_->classify(input_[i]); } }; /* end struct ClassifyPolicy */ Indices ClassifierImplementation::classifyParallel(const Sample & inS) const { const UnsignedInteger size = inS.getSize(); Indices result(size); const ClassifyPolicy policy(inS, result, this); TBB::ParallelFor(0, size, policy); return result; } Indices ClassifierImplementation::classifySequential(const Sample & inS) const { const UnsignedInteger size = inS.getSize(); Indices prediction(size); for (UnsignedInteger i = 0; i < size; ++ i) prediction[i] = classify(inS[i]); return prediction; } Indices ClassifierImplementation::classify(const Sample & inS) const { if (isParallel_) return classifyParallel(inS); return classifySequential(inS); } /* Grade a point */ Scalar ClassifierImplementation::grade(const Point & inP, const UnsignedInteger hClass) const { throw NotYetImplementedException(HERE) << "In ClassifierImplementation::grade(const Point & inP, const UnsignedInteger hClass) const"; } /* Grade a sample */ struct GradePolicy { const Sample & input_; const Indices & classes_; Point & output_; const ClassifierImplementation * p_classifier_; GradePolicy( const Sample & input, const Indices & classes, Point & output, const ClassifierImplementation * p_classifier) : input_(input) , classes_(classes) , output_(output) , p_classifier_(p_classifier) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i] = p_classifier_->grade(input_[i], classes_[i]); } }; /* end struct GradePolicy */ /* Grade a sample */ Point ClassifierImplementation::gradeParallel(const Sample & inS, const Indices & hClass) const { const UnsignedInteger size = inS.getSize(); Point result(size); const GradePolicy policy(inS, hClass, result, this); TBB::ParallelFor(0, size, policy); return result; } Point ClassifierImplementation::gradeSequential(const Sample & inS, const Indices & hClass) const { const UnsignedInteger size = inS.getSize(); Point grades(size); for ( UnsignedInteger i = 0; i < size; ++ i ) grades[i] = grade(inS[i], hClass[i]); return grades; } Point ClassifierImplementation::grade(const Sample & inS, const Indices & hClass) const { const UnsignedInteger size = inS.getSize(); if ( size != hClass.getSize() ) throw InvalidDimensionException(HERE) << "Input sample dimension (=" << size << ") and classes dimension (=" << hClass.getSize() << ") do not match."; if (isParallel_) return gradeParallel(inS, hClass); return gradeSequential(inS, hClass); } /** Parallelization flag accessor */ void ClassifierImplementation::setParallel(const Bool flag) { isParallel_ = flag; } Bool ClassifierImplementation::isParallel() const { return isParallel_; } /* String converter */ String ClassifierImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " x=" << inputSample_ << " y=" << classes_ << " verbose=" << verbose_ ; } String ClassifierImplementation::__str__(const String & offset) const { return __repr__(); } /* Verbosity accessor */ void ClassifierImplementation::setVerbose(const Bool verbose) { verbose_ = verbose; } Bool ClassifierImplementation::getVerbose() const { return verbose_; } /* Input space dimension accessor */ UnsignedInteger ClassifierImplementation::getDimension() const { return inputSample_.getDimension(); } /* Method save() stores the object through the StorageManager */ void ClassifierImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "inputSample_", inputSample_ ); adv.saveAttribute( "classes_", classes_ ); adv.saveAttribute( "verbose_", verbose_ ); } /* Method load() reloads the object from the StorageManager */ void ClassifierImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "inputSample_", inputSample_ ); adv.loadAttribute( "classes_", classes_ ); adv.loadAttribute( "verbose_", verbose_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/CorrectedLeaveOneOut.cxx000066400000000000000000000111441307543307100232620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Corrected implicit leave-one-out cross validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Function.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" #include "openturns/SVDMethod.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CorrectedLeaveOneOut); static const Factory Factory_CorrectedLeaveOneOut; /* Default constructor */ CorrectedLeaveOneOut::CorrectedLeaveOneOut() : FittingAlgorithmImplementation() { // Nothing to do } /* Virtual constructor */ CorrectedLeaveOneOut * CorrectedLeaveOneOut::clone() const { return new CorrectedLeaveOneOut( *this ); } /* String converter */ String CorrectedLeaveOneOut::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Perform cross-validation */ Scalar CorrectedLeaveOneOut::run(const Sample & x, const Sample & y, const Point & weight, const Basis & basis, const Indices & indices) const { return FittingAlgorithmImplementation::run(x, y, weight, basis, indices); } Scalar CorrectedLeaveOneOut::run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const { return FittingAlgorithmImplementation::run(y, weight, indices, proxy); } Scalar CorrectedLeaveOneOut::run(LeastSquaresMethod & method, const Sample & y) const { const Sample x(method.getInputSample()); const UnsignedInteger sampleSize = y.getSize(); if (y.getDimension() != 1) throw InvalidArgumentException(HERE) << "Output sample should be unidimensional (dim=" << y.getDimension() << ")."; if (y.getSize() != sampleSize) throw InvalidArgumentException(HERE) << "Samples should be equally sized (in=" << sampleSize << " out=" << y.getSize() << ")."; const Scalar variance = y.computeVariance()[0]; if (!(variance > 0.0)) throw InvalidArgumentException(HERE) << "Null output sample variance."; const UnsignedInteger basisSize = method.getImplementation()->currentIndices_.getSize(); if (sampleSize < basisSize) throw InvalidArgumentException(HERE) << "Not enough samples (" << sampleSize << ") required (" << basisSize << ")"; // Build the design of experiments LOGINFO("Build the design matrix"); const Matrix psiAk(method.computeWeightedDesign()); // Solve the least squares problem argmin ||psiAk * coefficients - b||^2 using this decomposition LOGINFO("Solve the least squares problem"); // Use the equivalence between SampleImplementation::data_ and Point const Point coefficients(method.solve(y.getImplementation()->getData())); // Compute the empirical error LOGINFO("Compute the empirical error"); const Point yHat(psiAk * coefficients); const Point h(method.getHDiag()); Scalar empiricalError = 0.0; for (UnsignedInteger i = 0; i < sampleSize; ++ i) { const Scalar ns = (y[i][0] - yHat[i]) / (1.0 - h[i]); empiricalError += ns * ns / sampleSize; } LOGINFO(OSS() << "Empirical error=" << empiricalError); LOGINFO("Compute the correcting factor"); const Scalar traceInverse = method.getGramInverseTrace(); const Scalar correctingFactor = (1.0 * sampleSize) / (sampleSize - basisSize) * (1.0 + traceInverse); const Scalar relativeError = correctingFactor * empiricalError / variance; LOGINFO(OSS() << "Relative error=" << relativeError); return relativeError; } /* Method save() stores the object through the StorageManager */ void CorrectedLeaveOneOut::save(Advocate & adv) const { FittingAlgorithmImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void CorrectedLeaveOneOut::load(Advocate & adv) { FittingAlgorithmImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/DesignProxy.cxx000066400000000000000000000141671307543307100215240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Design matrix cached evaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/DesignProxy.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DesignProxy); /* Default constructor */ DesignProxy::DesignProxy () : Object() , x_() , basis_() , designCache_(0, 0) , alreadyComputed_(0) , rowFilter_(0) , weight_(0) { // Nothing to do } /* Parameters constructor */ DesignProxy::DesignProxy(const Sample & x, const Basis & basis) : Object() , x_(x) , basis_(basis) , designCache_(0, 0) , alreadyComputed_(0) , rowFilter_(0) , weight_(0) { // keep initialization in the ctor for designCache_ to be shared among DesignProxy copies initialize(); } void DesignProxy::initialize() const { // allocate cache UnsignedInteger cacheSize = ResourceMap::GetAsUnsignedInteger("DesignProxy-DefaultCacheSize"); UnsignedInteger nbRows = x_.getSize(); if (nbRows == 0) throw InvalidArgumentException(HERE) << "Cannot initialize a DesignProxy with an empty sample"; UnsignedInteger nbCols = cacheSize / nbRows; // The cache stores at least the first function values if (nbCols <= 0) nbCols = 1; designCache_ = Matrix(nbRows, nbCols); alreadyComputed_ = Indices(nbCols, 0); } /* Virtual constructor */ DesignProxy * DesignProxy::clone() const { return new DesignProxy( *this ); } /* String converter */ String DesignProxy::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Compute the design matrix with the provided basis terms indices */ MatrixImplementation DesignProxy::computeDesign(const Indices & indices) const { const UnsignedInteger cacheSize = designCache_.getNbColumns(); const UnsignedInteger indicesSize = indices.getSize(); const UnsignedInteger xSize = x_.getSize(); MatrixImplementation design(xSize, indicesSize); MatrixImplementation::iterator startDesign(design.begin()); for (UnsignedInteger j = 0; j < indicesSize; ++j) { const UnsignedInteger phiIndex = indices[j]; // If the index is too large for the cache, compute the column and copy it directly in the design matrix if (phiIndex >= cacheSize) { const Point column(basis_[phiIndex](x_).getImplementation()->getData()); std::copy(column.begin(), column.end(), startDesign); } // Exceeds cache capacity else { MatrixImplementation::iterator startCache(designCache_.getImplementation()->begin() + phiIndex * xSize); // If the current index is already in the cache if (alreadyComputed_[phiIndex]) { // Simply copy the cache content in the design matrix std::copy(startCache, startCache + xSize, startDesign); } // Values in the cache else // The value is not in the cache { // Compute the values Point column(basis_[phiIndex](x_).getImplementation()->getData()); // Copy the values in the cache alreadyComputed_[phiIndex] = 1; std::copy(column.begin(), column.end(), startCache);// copyOnWrite not called // And copy the value in the design matrix std::copy(column.begin(), column.end(), startDesign); } // values stored in the cache } // Index in cache capacity startDesign += xSize; } // j // Apply row filter if needed if (hasRowFilter()) { const UnsignedInteger newRowDim = rowFilter_.getSize(); MatrixImplementation filteredDesign(newRowDim, indicesSize); UnsignedInteger linearIndex = 0; UnsignedInteger shift = 0; for (UnsignedInteger j = 0; j < indicesSize; ++ j) { for (UnsignedInteger i = 0; i < newRowDim; ++ i) { filteredDesign[linearIndex] = design[shift + rowFilter_[i]]; ++ linearIndex; } shift += xSize; } design = filteredDesign; } // hasRowFilter() if (hasWeight()) { UnsignedInteger linearIndex = 0; for (UnsignedInteger j = 0; j < design.getNbColumns(); ++ j) { for (UnsignedInteger i = 0; i < design.getNbRows(); ++ i) { const UnsignedInteger newI = hasRowFilter() ? rowFilter_[i] : i; design[linearIndex] *= weight_[newI]; ++ linearIndex; } // i } // j } // hasWeight() return design; } /* Input sample accessor */ Sample DesignProxy::getInputSample() const { return x_; } /* Basis accessor */ Basis DesignProxy::getBasis() const { return basis_; } /* Row filter accessor */ void DesignProxy::setRowFilter(const Indices & rowFilter) { rowFilter.check(x_.getSize()); rowFilter_ = rowFilter; } Indices DesignProxy::getRowFilter() const { return rowFilter_; } /* Row filter flag accessor */ Bool DesignProxy::hasRowFilter() const { return rowFilter_.getSize() > 0; } /* Effective size of sample */ UnsignedInteger DesignProxy::getSampleSize() const { return hasRowFilter() ? rowFilter_.getSize() : x_.getSize(); } /* Weight accessor */ void DesignProxy::setWeight(const Point & weight) { if (weight.getDimension() > 0 && !(weight.getDimension() == x_.getSize())) throw InvalidArgumentException(HERE) << "Error: the weight dimension=" << weight.getDimension() << " is different from the sample size=" << x_.getSize(); weight_ = weight; } Point DesignProxy::getWeight() const { return weight_; } /* Weight flag accessor */ Bool DesignProxy::hasWeight() const { return weight_.getSize() > 0; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/FFT.cxx000066400000000000000000000161351307543307100176650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FFT.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/KissFFT.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FFT); /* Constructor with parameters */ FFT::FFT() : TypedInterfaceObject(new KissFFT()) { // Nothing to do } /* Parameters constructor */ FFT::FFT(const FFTImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ FFT::FFT(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ FFT::FFT(FFTImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* FFT transformation on real */ FFT::ComplexCollection FFT::transform(const ScalarCollection & collection) const { return getImplementation()->transform(collection); } /** FFT transformation on real - The transformation is applied on a part of the collection*/ FFT::ComplexCollection FFT::transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { return getImplementation()->transform(collection, first, size); } /** FFT transformation on real with a regular sequence of the collection (between first and last, by step = step)*/ FFT::ComplexCollection FFT::transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { return getImplementation()->transform(collection, first, step, last); } /* FFT transformation on complex */ FFT::ComplexCollection FFT::transform(const ComplexCollection & collection) const { return getImplementation()->transform(collection); } /* FFT transformation on complex. The transformation is applied on a part of the collection */ FFT::ComplexCollection FFT::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { return getImplementation()->transform(collection, first, size); } /* FFT transformation on complex. This transforms a regular sequence of the collection (between first and last, with elements separated by step)*/ FFT::ComplexCollection FFT::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { return getImplementation()->transform(collection, first, step, last); } /** FFT 2D transformation on complex */ ComplexMatrix FFT::transform2D(const ComplexMatrix & matrix) const { return getImplementation()->transform2D(matrix); } /** FFT 2D transformation on complex */ ComplexMatrix FFT::transform2D(const Matrix & matrix) const { return getImplementation()->transform2D(matrix); } /** FFT 2D transformation on complex */ ComplexMatrix FFT::transform2D(const Sample & sample) const { return getImplementation()->transform2D(sample); } /** FFT 3D transformation on complex */ ComplexTensor FFT::transform3D(const ComplexTensor & tensor) const { return getImplementation()->transform3D(tensor); } /* FFT 3D transformation on real data */ ComplexTensor FFT::transform3D(const Tensor & tensor) const { return getImplementation()->transform3D(tensor); } FFT::ComplexCollection FFT::inverseTransform(const ScalarCollection & collection) const { return getImplementation()->inverseTransform(collection); } /** FFT inverse transformation - The transformation is applied on a part of the collection */ FFT::ComplexCollection FFT::inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { return getImplementation()->inverseTransform(collection, first, size); } /** FFT inverse transformation on a regular sequence of the collection (between first and last, spearated by step)*/ FFT::ComplexCollection FFT::inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { return getImplementation()->inverseTransform(collection, first, step, last); } /* FFT inverse transformation */ FFT::ComplexCollection FFT::inverseTransform(const ComplexCollection & collection) const { return getImplementation()->inverseTransform(collection); } /* FFT transformation on complex. The transformation is applied on a part of the collection */ FFT::ComplexCollection FFT::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { return getImplementation()->inverseTransform(collection, first, size); } /* FFT transformation on complex. This transforms a regular sequence of the collection (between first and last, with elements separated by step)*/ FFT::ComplexCollection FFT::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { return getImplementation()->inverseTransform(collection, first, step, last); } /** IFFT 2D transformation on complex */ ComplexMatrix FFT::inverseTransform2D(const ComplexMatrix & matrix) const { return getImplementation()->inverseTransform2D(matrix); } /** IFFT 2D transformation on real matrix */ ComplexMatrix FFT::inverseTransform2D(const Matrix & matrix) const { return getImplementation()->inverseTransform2D(matrix); } /** IFFT 2D transformation on sample */ ComplexMatrix FFT::inverseTransform2D(const Sample & sample) const { return getImplementation()->inverseTransform2D(sample); } /* IFFT 3D transformation */ ComplexTensor FFT::inverseTransform3D(const ComplexTensor & tensor) const { return getImplementation()->inverseTransform3D(tensor); } /* IFFT 3D transformation on real tensors*/ ComplexTensor FFT::inverseTransform3D(const Tensor & tensor) const { return getImplementation()->inverseTransform3D(tensor); } /* String converter */ String FFT::__repr__() const { OSS oss(true); oss << "class=" << FFT::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String FFT::__str__(const String & offset) const { OSS oss(false); oss << "class=" << FFT::GetClassName() << " implementation=" << getImplementation()->__str__(offset); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/FFTImplementation.cxx000066400000000000000000000212151307543307100225660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FFTImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FFTImplementation */ CLASSNAMEINIT(FFTImplementation); static const Factory Factory_FFTImplementation; /* Constructor without parameters */ FFTImplementation::FFTImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ FFTImplementation * FFTImplementation::clone() const { return new FFTImplementation(*this); } /* FFT transformation on real */ FFTImplementation::ComplexCollection FFTImplementation::transform(const ScalarCollection & collection) const { const UnsignedInteger size = collection.getSize(); ComplexCollection coll(size); for (UnsignedInteger i = 0; i < size; ++i) coll[i] = collection[i]; return transform(coll); } /** FFT transformation on real - The transformation is applied on a part of the collection*/ FFTImplementation::ComplexCollection FFTImplementation::transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { ComplexCollection coll(size); for (UnsignedInteger i = 0; i < size; ++i) coll[i] = collection[first + i]; return transform(coll); } /** FFT transformation on real with a regular sequence of the collection (between first and last, by step = step)*/ FFTImplementation::ComplexCollection FFTImplementation::transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { throw NotYetImplementedException(HERE); } /* FFT transformation on complex */ FFTImplementation::ComplexCollection FFTImplementation::transform(const ComplexCollection & collection) const { return transform(collection, 0, collection.getSize()); } /* FFT transformation on complex - For some FFT implementation, the transformation is applied on a part of the collection */ FFTImplementation::ComplexCollection FFTImplementation::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const"; } /* FFT transformation on complex - For some FFT implementation, the need is to transform a regular sequence of the collection (between first and last, by step = step)*/ FFTImplementation::ComplexCollection FFTImplementation::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const"; } /** FFT inverse transformation */ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ScalarCollection & collection) const { throw NotYetImplementedException(HERE); } /** FFT inverse transformation - The transformation is applied on a part of the collection */ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { ComplexCollection coll(size); for (UnsignedInteger i = 0; i < size; ++i) coll[i] = collection[first + i]; return inverseTransform(coll); } /** FFT inverse transformation on a regular sequence of the collection (between first and last, spearated by step)*/ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { throw NotYetImplementedException(HERE); } /* FFT inverse transformation */ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ComplexCollection & collection) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform(const ComplexCollection & collection) const"; } /* FFT inverse transformation - The transformation is applied on a part of the collection */ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const"; } /* FFT transformation on a regular sequence of the collection (between first and last, spearated by step)*/ FFTImplementation::ComplexCollection FFTImplementation::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const"; } /** FFT 2D transformation on complex */ ComplexMatrix FFTImplementation::transform2D(const ComplexMatrix & complexMatrix) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform2D(const ComplexMatrix & complexMatrix) const"; } /** FFT 2D transformation on real matrix */ ComplexMatrix FFTImplementation::transform2D(const Matrix & matrix) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform2D(const Matrix & matrix) const"; } /** FFT 2D transformation on sample */ ComplexMatrix FFTImplementation::transform2D(const Sample & sample) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform2D(const Sample & sample) const"; } /** FFT 3D transformation on complex */ ComplexTensor FFTImplementation::transform3D(const ComplexTensor & tensor) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform3D(const ComplexTensor & tensor) const"; } /* FFT 3D transformation on real data */ ComplexTensor FFTImplementation::transform3D(const Tensor & tensor) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::transform3D(const Tensor & tensor) const"; } /** IFFT 2D transformation on complex */ ComplexMatrix FFTImplementation::inverseTransform2D(const ComplexMatrix & complexMatrix) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform2D(const ComplexMatrix & complexMatrix) const"; } /** IFFT 2D transformation on real matrix */ ComplexMatrix FFTImplementation::inverseTransform2D(const Matrix & matrix) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform2D(const Matrix & matrix) const"; } /** IFFT 2D transformation on sample */ ComplexMatrix FFTImplementation::inverseTransform2D(const Sample & sample) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform2D(const Sample & sample) const"; } /** IFFT 3D transformation on complex */ ComplexTensor FFTImplementation::inverseTransform3D(const ComplexTensor & tensor) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform3D(const ComplexTensor & tensor) const"; } /** IFFT 3D transformation on complex */ ComplexTensor FFTImplementation::inverseTransform3D(const Tensor & tensor) const { throw NotYetImplementedException(HERE) << "In FFTImplementation::inverseTransform3D(const Tensor & tensor) const"; } /* String converter */ String FFTImplementation::__repr__() const { OSS oss(true); oss << "class=" << FFTImplementation::GetClassName(); return oss; } /* String converter */ String FFTImplementation::__str__(const String & offset) const { OSS oss(false); oss << "class=" << FFTImplementation::GetClassName(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/FittingAlgorithm.cxx000066400000000000000000000055101307543307100225140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cross-validation algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FittingAlgorithm.hxx" #include "openturns/FittingAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FittingAlgorithm); /* Default constructor */ FittingAlgorithm::FittingAlgorithm() : TypedInterfaceObject() { // Nothing to do } /* Constructor from implementation */ FittingAlgorithm::FittingAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Constructor from implementation */ FittingAlgorithm::FittingAlgorithm(const FittingAlgorithmImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* String converter */ String FittingAlgorithm::__repr__() const { return getImplementation()->__repr__(); } String FittingAlgorithm::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } Scalar FittingAlgorithm::run(const Sample & x, const Sample & y, const Point & weight, const Basis & basis, const Indices & indices) const { return getImplementation()->run(x, y, weight, basis, indices); } Scalar FittingAlgorithm::run(const Sample & x, const Sample & y, const Basis & basis, const Indices & indices) const { return getImplementation()->run(x, y, basis, indices); } Scalar FittingAlgorithm::run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const { return getImplementation()->run(y, weight, indices, proxy); } Scalar FittingAlgorithm::run(LeastSquaresMethod & method, const Sample & y) const { return getImplementation()->run(method, y); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/FittingAlgorithmImplementation.cxx000066400000000000000000000057061307543307100254310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cross-validation algorithm implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/FittingAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FittingAlgorithmImplementation); static const Factory Factory_FittingAlgorithmImplementation; /* Default constructor */ FittingAlgorithmImplementation::FittingAlgorithmImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ FittingAlgorithmImplementation * FittingAlgorithmImplementation::clone() const { return new FittingAlgorithmImplementation(*this); } /* Perform cross-validation */ Scalar FittingAlgorithmImplementation::run(const Sample & x, const Sample & y, const Point & weight, const Basis & basis, const Indices & indices) const { const DesignProxy proxy(x, basis); return run(y, weight, indices, proxy); } Scalar FittingAlgorithmImplementation::run(const Sample & x, const Sample & y, const Basis & basis, const Indices & indices) const { const DesignProxy proxy(x, basis); return run(y, indices, proxy); } /* Perform cross-validation */ Scalar FittingAlgorithmImplementation::run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const { LeastSquaresMethod method(proxy, weight, indices); return run(method, y); } Scalar FittingAlgorithmImplementation::run(const Sample & y, const Indices & indices, const DesignProxy & proxy) const { LeastSquaresMethod method(proxy, indices); return run(method, y); } Scalar FittingAlgorithmImplementation::run(LeastSquaresMethod & method, const Sample & y) const { throw NotYetImplementedException(HERE); } /* String converter */ String FittingAlgorithmImplementation::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Method save() stores the object through the StorageManager */ void FittingAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void FittingAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/GaussKronrod.cxx000066400000000000000000000213511307543307100216630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement the Gauss-Kronrod adaptive integration method for functions * with 1D argument. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GaussKronrod.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussKronrod */ CLASSNAMEINIT(GaussKronrod); static const Factory Factory_GaussKronrod; /* Constructor without parameters */ GaussKronrod::GaussKronrod() : IntegrationAlgorithmImplementation() , maximumSubIntervals_(ResourceMap::GetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals")) , maximumError_(ResourceMap::GetAsScalar("GaussKronrod-MaximumError")) , rule_() { // Check the maximum number of sub-intervals if (maximumSubIntervals_ < 2) throw InvalidArgumentException(HERE) << "Error: the maximum number of sub-intervals must be at least 2, here maximumSubIntervals=" << maximumSubIntervals_ << ". Check the value of the key 'GaussKronrod-MaximumSubIntervals' in ResourceMap."; } /* Parameters constructor */ GaussKronrod::GaussKronrod(const UnsignedInteger maximumSubIntervals, const Scalar maximumError, const GaussKronrodRule & rule) : IntegrationAlgorithmImplementation() , maximumSubIntervals_(maximumSubIntervals) , maximumError_(maximumError) , rule_(rule) { // Check the maximum number of sub-intervals if (maximumSubIntervals < 2) throw InvalidArgumentException(HERE) << "Error: the maximum number of sub-intervals must be at least 2, here maximumSubIntervals=" << maximumSubIntervals; } /* Virtual constructor */ GaussKronrod * GaussKronrod::clone() const { return new GaussKronrod(*this); } /* Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an 1D interval and f a scalar function */ Point GaussKronrod::integrate(const Function & function, const Interval & interval, Scalar & error) const { if (interval.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given interval should be 1D, here dimension=" << interval.getDimension(); Point ai(0); Point bi(0); Sample fi(0, 0); Point ei(0); return integrate(function, interval.getLowerBound()[0], interval.getUpperBound()[0], error, ai, bi, fi, ei); } Point GaussKronrod::integrate(const Function & function, const Scalar a, const Scalar b, Scalar & error, Point & ai, Point & bi, Sample & fi, Point & ei) const { if (function.getInputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can integrate only 1D function, here input dimension=" << function.getInputDimension(); const UnsignedInteger outputDimension = function.getOutputDimension(); if (outputDimension == 0) throw InvalidArgumentException(HERE) << "Error: can integrate only non-zero output dimension function"; Point result(outputDimension); ai = Point(maximumSubIntervals_); ai[0] = a; bi = Point(maximumSubIntervals_); bi[0] = b; fi = Sample(maximumSubIntervals_, outputDimension); ei = Point(maximumSubIntervals_); UnsignedInteger ip = 0; UnsignedInteger im = 0; error = maximumError_; while ((error > 0.25 * maximumError_) && (im < maximumSubIntervals_ - 1)) { ++im; bi[im] = bi[ip]; ai[im] = 0.5 * (ai[ip] + bi[ip]); bi[ip] = ai[im]; fi[ip] = computeRule(function, ai[ip], bi[ip], ei[ip]); fi[im] = computeRule(function, ai[im], bi[im], ei[im]); UnsignedInteger iErrorMax = 0; Scalar errorMax = 0.0; error = 0.0; result = Point(outputDimension); for (UnsignedInteger i = 0; i <= im; ++i) { const Scalar localError = ei[i]; for (UnsignedInteger j = 0; j < outputDimension; ++j) result[j] += fi[i][j]; error += localError * localError; // Add a test on the integration interval length to avoid too short intervals if ((localError > errorMax) && (bi[i] - ai[i] > maximumError_)) { errorMax = localError; iErrorMax = i; } } ip = iErrorMax; error = sqrt(error); } // while (error >...) ai.resize(im + 1); bi.resize(im + 1); ei.resize(im + 1); fi.erase(im + 1, maximumSubIntervals_); if (error > maximumError_) LOGINFO(OSS() << "The GaussKronrod algorithm was not able to reach the requested error=" << maximumError_ << ", the achieved error is " << error); return result; } Point GaussKronrod::integrate(const Function & function, const Scalar a, const Scalar b, Point & error, Point & ai, Point & bi, Sample & fi, Point & ei) const { // Here we initialize the error to a 1D Point in order to use the interface with scalar error error = Point(1); return integrate(function, a, b, error[0], ai, bi, fi, ei); } /* Compute the local GaussKronrod rule over [a, b]. */ Point GaussKronrod::computeRule(const Function & function, const Scalar a, const Scalar b, Scalar & localError) const { const Scalar width = 0.5 * (b - a); const Scalar center = 0.5 * (a + b); // Generate the set of points Sample x(2 * rule_.order_ + 1, 1); x[0][0] = center; for (UnsignedInteger i = 0; i < rule_.order_; ++i) { const Scalar t = width * rule_.otherKronrodNodes_[i]; x[2 * i + 1][0] = center - t; x[2 * i + 2][0] = center + t; } // Use possible parallelization of the evaluation const Sample y(function(x)); Point value(y[0]); Point resultGauss(value * rule_.zeroGaussWeight_); Point resultGaussKronrod(value * rule_.zeroKronrodWeight_); for (UnsignedInteger j = 0; j < (rule_.order_ - 1) / 2; ++j) { value = y[4 * j + 1] + y[4 * j + 2]; resultGaussKronrod += value * rule_.otherKronrodWeights_[2 * j]; value = y[4 * j + 3] + y[4 * j + 4]; resultGaussKronrod += value * rule_.otherKronrodWeights_[2 * j + 1]; resultGauss += value * rule_.otherGaussWeights_[j]; } value = y[2 * rule_.order_ - 1] + y[2 * rule_.order_]; resultGaussKronrod = (resultGaussKronrod + rule_.otherKronrodWeights_[rule_.order_ - 1] * value) * width; localError = (resultGaussKronrod - resultGauss * width).norm1(); return resultGaussKronrod; } /* Maximum sub-intervals accessor */ UnsignedInteger GaussKronrod::getMaximumSubIntervals() const { return maximumSubIntervals_; } void GaussKronrod::setMaximumSubIntervals(const UnsignedInteger maximumSubIntervals) { if (maximumSubIntervals < 1) throw InvalidArgumentException(HERE) << "Error: the number of intervals must be at least 1."; maximumSubIntervals_ = maximumSubIntervals; } /* Maximum error accessor */ Scalar GaussKronrod::getMaximumError() const { return maximumError_; } void GaussKronrod::setMaximumError(const Scalar maximumError) { if (!(maximumError >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the maximum error must be nonnegative, here maximum error=" << maximumError; maximumError_ = maximumError; } /* Rule accessor */ GaussKronrodRule GaussKronrod::getRule() const { return rule_; } void GaussKronrod::setRule(const GaussKronrodRule & rule) { rule_ = rule; } /* String converter */ String GaussKronrod::__repr__() const { OSS oss(true); oss << "class=" << GaussKronrod::GetClassName() << ", maximum sub intervals=" << maximumSubIntervals_ << ", maximum error=" << maximumError_ << ", rule=" << rule_; return oss; } /* String converter */ String GaussKronrod::__str__(const String & offset) const { OSS oss(false); oss << offset << GaussKronrod::GetClassName() << "(maximum sub intervals=" << maximumSubIntervals_ << ", maximum error=" << maximumError_ << ", rule=" << rule_.__str__(offset) << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/GaussKronrodRule.cxx000066400000000000000000000340531307543307100225160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GaussKronrodRule.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussKronrodRule */ CLASSNAMEINIT(GaussKronrodRule); static const Factory Factory_GaussKronrodRule; /* Constructor without parameters */ GaussKronrodRule::GaussKronrodRule() : PersistentObject() { // Select the high order rule *this = GaussKronrodRule(G11K23); } /* Parameters constructor */ GaussKronrodRule::GaussKronrodRule(const GaussKronrodPair pair) : PersistentObject() , order_(0) , zeroGaussWeight_(0.0) , otherGaussWeights_(0) , otherKronrodNodes_(0) , zeroKronrodWeight_(0.0) , otherKronrodWeights_(0) { // Select the parameters associated with the given pair switch (pair) { case G1K3: /* * Low order Gauss-Kronrod integration rule */ // Order order_ = 1; // Central Gauss weight zeroGaussWeight_ = 2.0; // Gauss/Kronrod nodes otherKronrodNodes_.add(0.77459666924148337704); // Central Gauss/Kronrod weight, half of the central Gauss weight zeroKronrodWeight_ = 0.888888888888888888889; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.555555555555555555556); break; case G3K7: /* * Low order Gauss-Kronrod integration rule */ // Order order_ = 3; // Central Gauss weight zeroGaussWeight_ = 8.0 / 9.0; // Symmetric Gauss weights otherGaussWeights_.add(5.0 / 9.0); // Gauss/Kronrod nodes otherKronrodNodes_.add(0.96049126870802028342); otherKronrodNodes_.add(0.77459666924148337704); otherKronrodNodes_.add(0.43424374934680255800); // Central Gauss/Kronrod weight, half of the central Gauss weight zeroKronrodWeight_ = 0.450916538658474142345; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.104656226026467265194); otherKronrodWeights_.add(0.268488089868333440729); otherKronrodWeights_.add(0.401397414775962222905); break; case G7K15: /* * Medium order Gauss-Kronrod integration rule */ // Order order_ = 7; // Central Gauss weight zeroGaussWeight_ = 0.4179591836734693877551020; // Symmetric Gauss weights otherGaussWeights_.add(0.1294849661688696932706114); otherGaussWeights_.add(0.2797053914892766679014678); otherGaussWeights_.add(0.3818300505051189449503698); // Gauss/Kronrod nodes otherKronrodNodes_.add(0.9914553711208126392068547); otherKronrodNodes_.add(0.9491079123427585245261897); otherKronrodNodes_.add(0.8648644233597690727897128); otherKronrodNodes_.add(0.7415311855993944398638648); otherKronrodNodes_.add(0.5860872354676911302941448); otherKronrodNodes_.add(0.4058451513773971669066064); otherKronrodNodes_.add(0.2077849550078984676006894); // Central Gauss/Kronrod weight); zeroKronrodWeight_ = 0.2094821410847278280129992; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.0229353220105292249637320); otherKronrodWeights_.add(0.0630920926299785532907007); otherKronrodWeights_.add(0.1047900103222501838398763); otherKronrodWeights_.add(0.1406532597155259187451896); otherKronrodWeights_.add(0.1690047266392679028265834); otherKronrodWeights_.add(0.1903505780647854099132564); otherKronrodWeights_.add(0.2044329400752988924141620); break; case G11K23: /* * High order Gauss-Kronrod integration rule */ // Order order_ = 11; // Central Gauss weight zeroGaussWeight_ = 0.2729250867779007; // Symmetric Gauss weights otherGaussWeights_.add(0.05566856711617449); otherGaussWeights_.add(0.1255803694649048); otherGaussWeights_.add(0.1862902109277352); otherGaussWeights_.add(0.2331937645919914); otherGaussWeights_.add(0.2628045445102478); // Gauss/Kronrod nodes otherKronrodNodes_.add(0.9963696138895427); otherKronrodNodes_.add(0.9782286581460570); otherKronrodNodes_.add(0.9416771085780681); otherKronrodNodes_.add(0.8870625997680953); otherKronrodNodes_.add(0.8160574566562211); otherKronrodNodes_.add(0.7301520055740492); otherKronrodNodes_.add(0.6305995201619651); otherKronrodNodes_.add(0.5190961292068118); otherKronrodNodes_.add(0.3979441409523776); otherKronrodNodes_.add(0.2695431559523450); otherKronrodNodes_.add(0.1361130007993617); // Central Gauss/Kronrod weight); zeroKronrodWeight_ = 0.1365777947111183; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.00976544104596129); otherKronrodWeights_.add(0.02715655468210443); otherKronrodWeights_.add(0.04582937856442671); otherKronrodWeights_.add(0.06309742475037484); otherKronrodWeights_.add(0.07866457193222764); otherKronrodWeights_.add(0.09295309859690074); otherKronrodWeights_.add(0.1058720744813894); otherKronrodWeights_.add(0.1167395024610472); otherKronrodWeights_.add(0.1251587991003195); otherKronrodWeights_.add(0.1312806842298057); otherKronrodWeights_.add(0.1351935727998845); break; case G15K31: /* * High order Gauss-Kronrod integration rule */ // Order order_ = 15; // Central Gauss weight zeroGaussWeight_ = 0.2025782419255612728806202; // Symmetric Gauss weights otherGaussWeights_.add(0.0307532419961172683546284); otherGaussWeights_.add(0.0703660474881081247092674); otherGaussWeights_.add(0.1071592204671719350118695); otherGaussWeights_.add(0.1395706779261543144478048); otherGaussWeights_.add(0.1662692058169939335532009); otherGaussWeights_.add(0.1861610000155622110268006); otherGaussWeights_.add(0.1984314853271115764561183); // Gauss/Kronrod nodes otherKronrodNodes_.add(0.9980022986933970602851728); otherKronrodNodes_.add(0.9879925180204854284895657); otherKronrodNodes_.add(0.9677390756791391342573480); otherKronrodNodes_.add(0.9372733924007059043077589); otherKronrodNodes_.add(0.8972645323440819008825097); otherKronrodNodes_.add(0.8482065834104272162006483); otherKronrodNodes_.add(0.7904185014424659329676493); otherKronrodNodes_.add(0.7244177313601700474161861); otherKronrodNodes_.add(0.6509967412974169705337359); otherKronrodNodes_.add(0.5709721726085388475372267); otherKronrodNodes_.add(0.4850818636402396806936557); otherKronrodNodes_.add(0.3941513470775633698972074); otherKronrodNodes_.add(0.2991800071531688121667800); otherKronrodNodes_.add(0.2011940939974345223006283); otherKronrodNodes_.add(0.1011420669187174990270742); // Central Gauss/Kronrod weight); zeroKronrodWeight_ = 0.1013300070147915490173748; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.0053774798729233489877921); otherKronrodWeights_.add(0.0150079473293161225383748); otherKronrodWeights_.add(0.0254608473267153201868740); otherKronrodWeights_.add(0.0353463607913758462220379); otherKronrodWeights_.add(0.0445897513247648766082273); otherKronrodWeights_.add(0.0534815246909280872653431); otherKronrodWeights_.add(0.0620095678006706402851392); otherKronrodWeights_.add(0.0698541213187282587095201); otherKronrodWeights_.add(0.0768496807577203788944328); otherKronrodWeights_.add(0.0830805028231330210382892); otherKronrodWeights_.add(0.0885644430562117706472754); otherKronrodWeights_.add(0.0931265981708253212254869); otherKronrodWeights_.add(0.0966427269836236785051799); otherKronrodWeights_.add(0.0991735987217919593323932); otherKronrodWeights_.add(0.1007698455238755950449467); break; case G25K51: /* * High order Gauss-Kronrod integration rule */ // Order order_ = 25; // Central Gauss weight zeroGaussWeight_ = 0.1231760537267154512039029; // Symmetric Gauss weights otherGaussWeights_.add(0.1222424429903100416889595); otherGaussWeights_.add(0.1194557635357847722281781); otherGaussWeights_.add(0.1148582591457116483393255); otherGaussWeights_.add(0.1085196244742636531160940); otherGaussWeights_.add(0.1005359490670506442022069); otherGaussWeights_.add(0.0910282619829636498114972); otherGaussWeights_.add(0.0801407003350010180132350); otherGaussWeights_.add(0.0680383338123569172071872); otherGaussWeights_.add(0.0549046959758351919259369); otherGaussWeights_.add(0.0409391567013063126556235); otherGaussWeights_.add(0.0263549866150321372619018); otherGaussWeights_.add(0.1222424429903100416889595); // Gauss/Kronrod nodes otherKronrodNodes_.add(0.9992621049926098341934575); otherKronrodNodes_.add(0.9955569697904980979087849); otherKronrodNodes_.add(0.9880357945340772476373310); otherKronrodNodes_.add(0.9766639214595175114983154); otherKronrodNodes_.add(0.9616149864258425124181300); otherKronrodNodes_.add(0.9429745712289743394140112); otherKronrodNodes_.add(0.9207471152817015617463461); otherKronrodNodes_.add(0.8949919978782753688510420); otherKronrodNodes_.add(0.8658470652932755954489970); otherKronrodNodes_.add(0.8334426287608340014210211); otherKronrodNodes_.add(0.7978737979985000594104109); otherKronrodNodes_.add(0.7592592630373576305772829); otherKronrodNodes_.add(0.7177664068130843881866541); otherKronrodNodes_.add(0.6735663684734683644851206); otherKronrodNodes_.add(0.6268100990103174127881227); otherKronrodNodes_.add(0.5776629302412229677236898); otherKronrodNodes_.add(0.5263252843347191825996238); otherKronrodNodes_.add(0.4730027314457149605221821); otherKronrodNodes_.add(0.4178853821930377488518144); otherKronrodNodes_.add(0.3611723058093878377358217); otherKronrodNodes_.add(0.3030895389311078301674789); otherKronrodNodes_.add(0.2438668837209884320451904); otherKronrodNodes_.add(0.1837189394210488920159699); otherKronrodNodes_.add(0.1228646926107103963873598); otherKronrodNodes_.add(0.0615444830056850788865464); // Central Gauss/Kronrod weight); zeroKronrodWeight_ = 0.0615808180678329350787598; // Other Gauss/Kronrod weights otherKronrodWeights_.add(0.0019873838923303159265079); otherKronrodWeights_.add(0.0055619321353567137580402); otherKronrodWeights_.add(0.0094739733861741516072077); otherKronrodWeights_.add(0.0132362291955716748136564); otherKronrodWeights_.add(0.0168478177091282982315167); otherKronrodWeights_.add(0.0204353711458828354565683); otherKronrodWeights_.add(0.0240099456069532162200925); otherKronrodWeights_.add(0.0274753175878517378029485); otherKronrodWeights_.add(0.0307923001673874888911090); otherKronrodWeights_.add(0.0340021302743293378367488); otherKronrodWeights_.add(0.0371162714834155435603306); otherKronrodWeights_.add(0.0400838255040323820748393); otherKronrodWeights_.add(0.0428728450201700494768958); otherKronrodWeights_.add(0.0455029130499217889098706); otherKronrodWeights_.add(0.0479825371388367139063923); otherKronrodWeights_.add(0.0502776790807156719633253); otherKronrodWeights_.add(0.0523628858064074758643667); otherKronrodWeights_.add(0.0542511298885454901445434); otherKronrodWeights_.add(0.0559508112204123173082407); otherKronrodWeights_.add(0.0574371163615678328535827); otherKronrodWeights_.add(0.0586896800223942079619742); otherKronrodWeights_.add(0.0597203403241740599790993); otherKronrodWeights_.add(0.0605394553760458629453603); otherKronrodWeights_.add(0.0611285097170530483058590); otherKronrodWeights_.add(0.0614711898714253166615441); break; default: throw InvalidArgumentException(HERE) << "Invalid pair argument"; } /* end switch */ } /* Virtual constructor */ GaussKronrodRule * GaussKronrodRule::clone() const { return new GaussKronrodRule(*this); } /* Pair accessor */ GaussKronrodRule::GaussKronrodPair GaussKronrodRule::getPair() const { return pair_; } /* Order accessor */ UnsignedInteger GaussKronrodRule::getOrder() const { return order_; } /* Zero Gauss weight accessor */ Scalar GaussKronrodRule::getZeroGaussWeight() const { return zeroGaussWeight_; } /* Other Gauss weight accessor */ Point GaussKronrodRule::getOtherGaussWeights() const { return otherGaussWeights_; } /* Other Kronrod nodes accessor */ Point GaussKronrodRule::getOtherKronrodNodes() const { return otherKronrodNodes_; } /* Zero Kronrod weight accessor */ Scalar GaussKronrodRule::getZeroKronrodWeight() const { return zeroKronrodWeight_; } /* Other Kronrod weight accessor */ Point GaussKronrodRule::getOtherKronrodWeights() const { return otherKronrodWeights_; } /* String converter */ String GaussKronrodRule::__repr__() const { OSS oss(true); oss << "class=" << GaussKronrodRule::GetClassName() << ", pair=" << "G" << order_ << "K" << 2 * order_ + 1 << ")"; return oss; } /* String converter */ String GaussKronrodRule::__str__(const String & offset) const { OSS oss(false); oss << offset << GaussKronrodRule::GetClassName() << "(pair=G" << order_ << "K" << 2 * order_ + 1 << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/GaussLegendre.cxx000066400000000000000000000160661307543307100220010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement a tensorized Gauss-Legendre quadrature * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GaussLegendre.hxx" #include "openturns/Tuples.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Lapack.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussLegendre */ CLASSNAMEINIT(GaussLegendre); static const Factory Factory_GaussLegendre; /* Constructor without parameters */ GaussLegendre::GaussLegendre(const UnsignedInteger dimension) : IntegrationAlgorithmImplementation() , discretization_(Indices(dimension, ResourceMap::GetAsUnsignedInteger("GaussLegendre-DefaultMarginalIntegrationPointsNumber"))) , nodes_(0, 0) , weights_(0) { // Generate nodes and weights generateNodesAndWeights(); } /* Parameters constructor */ GaussLegendre::GaussLegendre(const Indices & discretization) : IntegrationAlgorithmImplementation() , discretization_(discretization) , nodes_(0, 0) , weights_(0) { // Generate nodes and weights generateNodesAndWeights(); } /* Virtual constructor */ GaussLegendre * GaussLegendre::clone() const { return new GaussLegendre(*this); } /* Compute an approximation of \int_a^b f(x_1,\dots,x_n)dx_1\dotsdx_n, where [a,b] is an n-D interval. */ Point GaussLegendre::integrate(const Function & function, const Interval & interval) const { Sample adaptedNodes; return integrateWithNodes(function, interval, adaptedNodes); } Point GaussLegendre::integrateWithNodes(const Function & function, const Interval & interval, Sample & adaptedNodes) const { const UnsignedInteger inputDimension = discretization_.getSize(); if (interval.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected an interval of dimension=" << inputDimension << ", got dimension=" << interval.getDimension(); if (function.getInputDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a function of input dimension=" << inputDimension << ", got input dimension=" << function.getInputDimension(); // Compute the volume of the interval const Scalar volume = interval.getVolume(); Point integral(function.getOutputDimension()); if (volume == 0.0) return integral; // Adapt the nodes to the bounds of the interval adaptedNodes = nodes_ * (interval.getUpperBound() - interval.getLowerBound()) + interval.getLowerBound(); // Compute the function over the adapted nodes const Sample values(function(adaptedNodes)); // Compute the integral for (UnsignedInteger i = 0; i < values.getSize(); ++i) integral += values[i] * weights_[i]; return integral * volume; } /* Generate nodes and weights */ void GaussLegendre::generateNodesAndWeights() { // First, generate the 1D marginal rules over [0, 1] const UnsignedInteger dimension = discretization_.getSize(); if (dimension == 0) throw InvalidArgumentException(HERE) << "Error: expected a positive dimension"; Collection marginalNodes(dimension); Collection marginalWeights(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const UnsignedInteger integrationNodesNumber(discretization_[i]); if (integrationNodesNumber == 0) throw InvalidArgumentException(HERE) << "Error: the discretization must be positive, here discretization[" << i << "] is null."; // Check if we already computed this 1D rule // We use the value 'dimension' as a guard UnsignedInteger indexAlreadyComputed = dimension; for (UnsignedInteger j = 0; j < i; ++j) if (discretization_[j] == integrationNodesNumber) { indexAlreadyComputed = j; break; } // If indexAlreadyComputed < dimension we found a match if (indexAlreadyComputed < dimension) { marginalNodes[i] = marginalNodes[indexAlreadyComputed]; marginalWeights[i] = marginalWeights[indexAlreadyComputed]; } // A match found else { marginalNodes[i] = Point(integrationNodesNumber); marginalWeights[i] = Point(integrationNodesNumber); // First, build a symmetric tridiagonal matrix whose eigenvalues are the nodes of the // gauss integration rule char jobz('V'); int ljobz(1); Point d(integrationNodesNumber); Point e(integrationNodesNumber); for (UnsignedInteger k = 1; k < integrationNodesNumber; ++k) e[k - 1] = 0.5 / std::sqrt(1.0 - std::pow(2.0 * k, -2)); int ldz(integrationNodesNumber); SquareMatrix z(integrationNodesNumber); Point work(2 * integrationNodesNumber - 2); int info; int n = static_cast(integrationNodesNumber); dstev_(&jobz, &n, &d[0], &e[0], &z(0, 0), &ldz, &work[0], &info, &ljobz); if (info != 0) throw InternalException(HERE) << "Lapack DSTEV: error code=" << info; for (UnsignedInteger k = 0; k < integrationNodesNumber; ++k) { // Nodes marginalNodes[i][k] = 0.5 * (1.0 + d[k]); // Weights marginalWeights[i][k] = std::pow(z(0, k), 2); } } // No match found } // For i // Now, generate the nD rule over [0, 1]^n Tuples::IndicesCollection allTuples(Tuples(discretization_).generate()); const UnsignedInteger size = allTuples.getSize(); nodes_ = Sample(size, dimension); weights_ = Point(size, 1.0); for (UnsignedInteger i = 0; i < size; ++i) { const Indices indices(allTuples[i]); for (UnsignedInteger j = 0; j < dimension; ++j) { nodes_[i][j] = marginalNodes[j][indices[j]]; weights_[i] *= marginalWeights[j][indices[j]]; } } // tuples } /* Discretization accessor */ Indices GaussLegendre::getDiscretization() const { return discretization_; } /* Nodes accessor */ Sample GaussLegendre::getNodes() const { return nodes_; } /* Weights accessor */ Point GaussLegendre::getWeights() const { return weights_; } /* String converter */ String GaussLegendre::__repr__() const { OSS oss(true); oss << "class=" << GaussLegendre::GetClassName() << ", discretization=" << discretization_ << ", nodes=" << nodes_ << ", weights=" << weights_; return oss; } /* String converter */ String GaussLegendre::__str__(const String & offset) const { OSS oss(false); oss << offset << GaussLegendre::GetClassName() << "(" << discretization_ << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/IntegrationAlgorithm.cxx000066400000000000000000000062271307543307100234010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IntegrationAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/GaussKronrod.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IntegrationAlgorithm); /* Constructor with parameters */ IntegrationAlgorithm::IntegrationAlgorithm() : TypedInterfaceObject(new GaussKronrod()) { // Nothing to do } /* Parameters constructor */ IntegrationAlgorithm::IntegrationAlgorithm(const IntegrationAlgorithmImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ IntegrationAlgorithm::IntegrationAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ IntegrationAlgorithm::IntegrationAlgorithm(IntegrationAlgorithmImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an n-D interval */ Point IntegrationAlgorithm::integrate(const Function & function, const Interval & interval) const { return getImplementation()->integrate(function, interval); } Point IntegrationAlgorithm::integrate(const Function & function, const Interval & interval, Scalar & error) const { return getImplementation()->integrate(function, interval, error); } Point IntegrationAlgorithm::integrate(const Function & function, const Interval & interval, Point & error) const { return getImplementation()->integrate(function, interval, error); } /* String converter */ String IntegrationAlgorithm::__repr__() const { OSS oss(true); oss << "class=" << IntegrationAlgorithm::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String IntegrationAlgorithm::__str__(const String & offset) const { OSS oss(false); oss << "class=" << IntegrationAlgorithm::GetClassName() << " implementation=" << getImplementation()->__str__(offset); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/IntegrationAlgorithmImplementation.cxx000066400000000000000000000052751307543307100263110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IntegrationAlgorithmImplementation */ CLASSNAMEINIT(IntegrationAlgorithmImplementation); static const Factory Factory_IntegrationAlgorithmImplementation; /* Constructor without parameters */ IntegrationAlgorithmImplementation::IntegrationAlgorithmImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ IntegrationAlgorithmImplementation * IntegrationAlgorithmImplementation::clone() const { return new IntegrationAlgorithmImplementation(*this); } /* Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an n-D interval */ Point IntegrationAlgorithmImplementation::integrate(const Function & function, const Interval & interval) const { Scalar error = 0.0; return integrate(function, interval, error); } Point IntegrationAlgorithmImplementation::integrate(const Function & function, const Interval & interval, Point & error) const { error = Point(1); return integrate(function, interval, error[0]); } Point IntegrationAlgorithmImplementation::integrate(const Function & function, const Interval & interval, Scalar & error) const { throw NotYetImplementedException(HERE) << "In IntegrationAlgorithmImplementation::integrate(const Function & function, const Interval & interval, Scalar & error) const"; } /* String converter */ String IntegrationAlgorithmImplementation::__repr__() const { OSS oss(true); oss << "class=" << IntegrationAlgorithmImplementation::GetClassName(); return oss; } /* String converter */ String IntegrationAlgorithmImplementation::__str__(const String & offset) const { OSS oss(false); oss << "class=" << IntegrationAlgorithmImplementation::GetClassName(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/IteratedQuadrature.cxx000066400000000000000000000141101307543307100230340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement an iterated quadrature based on a 1D quadrature * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IteratedQuadrature.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DatabaseFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IteratedQuadrature */ CLASSNAMEINIT(IteratedQuadrature); static const Factory Factory_IteratedQuadrature; /* Constructor without parameters */ IteratedQuadrature::IteratedQuadrature() : IntegrationAlgorithmImplementation() , algorithm_(GaussKronrod(ResourceMap::GetAsUnsignedInteger("IteratedQuadrature-MaximumSubIntervals"), ResourceMap::GetAsScalar("IteratedQuadrature-MaximumError"), GaussKronrodRule(GaussKronrodRule::G3K7))) { // Nothing to do } /* Parameters constructor */ IteratedQuadrature::IteratedQuadrature(const IntegrationAlgorithm & algorithm) : IntegrationAlgorithmImplementation() , algorithm_(algorithm) { // Nothing to do } /* Virtual constructor */ IteratedQuadrature * IteratedQuadrature::clone() const { return new IteratedQuadrature(*this); } /* Compute an approximation of \int_a^b\int_{L_1(x_1)}^{U_1(x_1)}\int_{L_1(x_1,x_2)}^{U_2(x_1,x_2)}\dots\int_{L_1(x_1,\dots,x_{n-1})}^{U_2(x_1,\dots,x_{n-1})} f(x_1,\dots,x_n)dx_1\dotsdx_n, where [a,b] is an 1D interval, L_k and U_k are functions from R^k into R. */ Point IteratedQuadrature::integrate(const Function & function, const Scalar a, const Scalar b, const FunctionCollection & lowerBounds, const FunctionCollection & upperBounds, const Bool check) const { const UnsignedInteger inputDimension = function.getInputDimension(); if (check) { // Check the compatibility of the lower bound functions and the upper bound functions // First, check the number of such functions if (lowerBounds.getSize() != inputDimension - 1) throw InvalidArgumentException(HERE) << "Error: expected " << inputDimension - 1 << " lower bound functions, got " << lowerBounds.getSize(); if (upperBounds.getSize() != inputDimension - 1) throw InvalidArgumentException(HERE) << "Error: expected " << inputDimension - 1 << " upper bound functions, got " << upperBounds.getSize(); // Second, check the input and output dimensions of each bound function for (UnsignedInteger i = 1; i < inputDimension; ++i) { const Function lower(lowerBounds[i - 1]); if (lower.getInputDimension() != i) throw InvalidArgumentException(HERE) << "Error: expected a lower bound function of rank=" << i - 1 << " to be of input dimension=" << i << ", got " << lower.getInputDimension(); if (lower.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected a lower bound function of rank=" << i - 1 << " to be of output dimension=1, got " << lower.getOutputDimension(); const Function upper(lowerBounds[i - 1]); if (upper.getInputDimension() != i) throw InvalidArgumentException(HERE) << "Error: expected an upper bound function of rank=" << i - 1 << " to be of input dimension=" << i << ", got " << upper.getInputDimension(); if (upper.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected an upper bound function of rank=" << i - 1 << " to be of output dimension=1, got " << upper.getOutputDimension(); } // bounds dimensions } // check if (inputDimension == 1) return algorithm_.integrate(function, Interval(a, b)); // Prepare the integrand using a PartialFunctionWrapper::evaluate const Function partialFunction(PartialFunctionWrapper(*this, function, lowerBounds, upperBounds).clone()); return algorithm_.integrate(partialFunction, Interval(a, b)); } Point IteratedQuadrature::integrate(const Function & function, const Interval & interval) const { const UnsignedInteger inputDimension = function.getInputDimension(); if (interval.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected an interval of dimension=" << inputDimension << ", got dimension=" << interval.getDimension(); if (interval.getDimension() == 1) return algorithm_.integrate(function, interval); // Build the bound functions associated with the interval const Point lower(interval.getLowerBound()); const Point upper(interval.getUpperBound()); Scalar a = lower[0]; Scalar b = upper[0]; FunctionCollection lowerBounds(inputDimension - 1); FunctionCollection upperBounds(inputDimension - 1); for (UnsignedInteger i = 1; i < inputDimension; ++i) { lowerBounds[i - 1] = DatabaseFunction(Sample(1, i), Sample(1, Point(1, lower[i]))); upperBounds[i - 1] = DatabaseFunction(Sample(1, i), Sample(1, Point(1, upper[i]))); } return integrate(function, a, b, lowerBounds, upperBounds, false); } /* String converter */ String IteratedQuadrature::__repr__() const { OSS oss(true); oss << "class=" << IteratedQuadrature::GetClassName() << ", algorithm=" << algorithm_; return oss; } /* String converter */ String IteratedQuadrature::__str__(const String & offset) const { OSS oss(false); oss << offset << IteratedQuadrature::GetClassName() << "(algorithm=" << algorithm_ << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KDTree.cxx000066400000000000000000000327411307543307100203650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief KDTree structure to speed-up queries on large samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/KDTree.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Indices.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KDTree); static const Factory Factory_KDTree; /** * @class KDNearestNeighboursFinder * * A fixed-size heap to find k-nearest neighbours in a KDTree */ class KDNearestNeighboursFinder { public: /** Constructor */ KDNearestNeighboursFinder(const Sample & sample, const UnsignedInteger size) : sample_(sample) , capacity_(size) , size_(0) , values_(size) , indices_(size) { // Initialize values_[0] to a valid value values_[0] = SpecFunc::MaxScalar; } /** Get the indices of the k nearest neighbours of the given point */ Indices getNearestNeighboursIndices(const KDTree::KDNode::KDNodePointer & p_node, const Point & x, const bool sorted) { if (size_ != 0) { // Clear heap indices_.clear(); values_.clear(); size_ = 0; values_[0] = SpecFunc::MaxScalar; } collectNearestNeighbours(p_node, x, 0); if (sorted) { /* Sort heap in-place in ascending order. This breaks heap structure, but it does not matter, heap is rebuilt when calling collectNearestNeighbours. */ const UnsignedInteger realSize = size_; while (size_ > 1) { // Move largest value at the end std::swap(values_[size_ - 1], values_[0]); std::swap(indices_[size_ - 1], indices_[0]); // Make heap believe that largest value has been removed --size_; // Move new root to a valid location moveNodeDown(0); } // Restore heap size size_ = realSize; } return indices_; } private: /* Recursive method to find the indices of the k nearest neighbours Strategy: + for a new candidate, if there is still room just add it to the list of neighbours + else replace the worst candidate from the current list by the new candidate Complexity: O(k) at each insertion, O(log(n)) expected insertions */ void collectNearestNeighbours(const KDTree::KDNode::KDNodePointer & p_node, const Point & x, const UnsignedInteger activeDimension) { const Scalar delta = x[activeDimension] - sample_[p_node->index_][activeDimension]; const KDTree::KDNode::KDNodePointer & sameSide(delta < 0.0 ? p_node->p_left_ : p_node->p_right_); const KDTree::KDNode::KDNodePointer & oppositeSide(delta < 0.0 ? p_node->p_right_ : p_node->p_left_); const UnsignedInteger dimension = sample_.getDimension(); Scalar currentGreatestValidSquaredDistance = values_[0]; if (sameSide != 0) { collectNearestNeighbours(sameSide, x, (activeDimension + 1) % dimension); currentGreatestValidSquaredDistance = values_[0]; } if (size_ == capacity_ && currentGreatestValidSquaredDistance < delta * delta) return; const UnsignedInteger localIndex = p_node->index_; const Scalar localSquaredDistance = (x - sample_[localIndex]).normSquare(); if (size_ != capacity_) { // Put index/value at the first free node and move it up to a valid location indices_[size_] = localIndex; values_[size_] = localSquaredDistance; moveNodeUp(size_); ++size_; } else if (localSquaredDistance < currentGreatestValidSquaredDistance) { // Heap is full, and current value is smaller than heap largest value. // Replace the largest value by current value and move it down to a // valid location. if (localSquaredDistance < values_[0]) { indices_[0] = localIndex; values_[0] = localSquaredDistance; moveNodeDown(0); } } if (oppositeSide != 0) { collectNearestNeighbours(oppositeSide, x, (activeDimension + 1) % dimension); } } /** Move node down to its final location */ void moveNodeDown(const UnsignedInteger index) { const UnsignedInteger left = (index << 1) + 1; const UnsignedInteger right = left + 1; UnsignedInteger maxValueIndex = index; if (left < size_ && values_[left] > values_[maxValueIndex]) { maxValueIndex = left; } if (right < size_ && values_[right] > values_[maxValueIndex]) { maxValueIndex = right; } if (index != maxValueIndex) { std::swap(values_[index], values_[maxValueIndex]); std::swap(indices_[index], indices_[maxValueIndex]); moveNodeDown(maxValueIndex); } } /** Move node up to its final location */ void moveNodeUp(const UnsignedInteger index) { if (index == 0) return; const UnsignedInteger parent = (index - 1) >> 1; if (values_[index] > values_[parent]) { std::swap(values_[index], values_[parent]); std::swap(indices_[index], indices_[parent]); moveNodeUp(parent); } } // Points contained in the tree const Sample sample_; // Maximum heap size const UnsignedInteger capacity_; // Number of used buckets UnsignedInteger size_; // Array containing values Collection values_; // Array containing point indices Indices indices_; }; /* class KDNearestNeighboursFinder */ /** * @class KDTree * * Organize d-dimensional points into a hierarchical tree-like structure */ /* Default constructor */ KDTree::KDTree() : PersistentObject() , points_(0, 0) , p_root_(0) { // Nothing to do } /* Parameters constructor */ KDTree::KDTree(const Sample & points) : PersistentObject() , points_(points) , p_root_(0) { // Build the tree initialize(); } void KDTree::initialize() { // Scramble the order in which the points are inserted in the tree in order to improve its balancing const UnsignedInteger size = points_.getSize(); Indices buffer(size); buffer.fill(); SobolSequence sequence(1); for (UnsignedInteger i = 0; i < points_.getSize(); ++ i) { const UnsignedInteger index = i + static_cast< UnsignedInteger >((size - i) * sequence.generate()[0]); insert(p_root_, buffer[index], 0); buffer[index] = buffer[i]; } } /* Virtual constructor */ KDTree * KDTree::clone() const { return new KDTree( *this ); } /* String converter */ String KDTree::__repr__() const { return OSS() << "class=" << GetClassName() << " root=" << p_root_->__repr__(); } /* Check if the tree is empty */ Bool KDTree::isEmpty() const { return points_.getSize() == 0; } /* Insert the given point into the tree */ void KDTree::insert(const Point & point) { if (point.getDimension() != points_.getDimension()) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << points_.getDimension() << ", got dimension=" << point.getDimension(); points_.add(point); insert(p_root_, points_.getSize(), 0); } /* Insert the point at given index into the tree */ void KDTree::insert(KDNode::KDNodePointer & p_node, const UnsignedInteger index, const UnsignedInteger activeDimension) { if (index >= points_.getSize()) throw InvalidArgumentException(HERE) << "Error: expected an index less than " << points_.getSize() << ", got " << index; // We are on a leaf if (p_node == 0) p_node = new KDNode(index); else if (points_[index][activeDimension] < points_[p_node->index_][activeDimension]) insert(p_node->p_left_, index, (activeDimension + 1) % points_.getDimension()); else insert(p_node->p_right_, index, (activeDimension + 1) % points_.getDimension()); } /* Get the indices of the k nearest neighbours of the given point */ Indices KDTree::getNearestNeighboursIndices(const Point & x, const UnsignedInteger k, const bool sorted) const { if (k > points_.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot return more neighbours than points in the database!"; Indices result(k); // If we need as many neighbours as points in the sample, just return all the possible indices if (k == points_.getSize() && !sorted) { result.fill(); } else { KDNearestNeighboursFinder heap(points_, k); result = heap.getNearestNeighboursIndices(p_root_, x, sorted); } return result; } /* Get the k nearest neighbours of the given point */ Sample KDTree::getNearestNeighbours(const Point & x, const UnsignedInteger k) const { if (k > points_.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot return more neighbours than points in the database!"; const Indices indices(getNearestNeighboursIndices(x, k)); Sample result(k, points_.getDimension()); for (UnsignedInteger i = 0; i < k; ++i) result[i] = points_[indices[i]]; return result; } UnsignedInteger KDTree::getNearestNeighbourIndex(const Point & x) const { if (points_.getSize() == 1) return 0; Scalar smallestDistance = SpecFunc::MaxScalar; return getNearestNeighbourIndex(p_root_, x, smallestDistance, 0); } Point KDTree::getNearestNeighbour(const Point & x) const { return points_[getNearestNeighbourIndex(x)]; } UnsignedInteger KDTree::getNearestNeighbourIndex(const KDNode::KDNodePointer & p_node, const Point & x, Scalar & bestSquaredDistance, const UnsignedInteger activeDimension) const { if (p_node == 0) throw NotDefinedException(HERE) << "Error: cannot find a nearest neighbour in an emty tree"; // Set delta = x[activeDimension] - points_[p_node->index_] // sameSide = p_node->p_left_ if delta < 0, p_node->p_right_ else // oppositeSide = p_node->p_right_ if delta < 0, p_node->p_left_ else // Possibilities: // 1) sameSide != 0 // 1.1) Go on the same side. On return, the index is the best candidate index. If the associated distance is less than the current best index, update the current best index and the associated squared distance. // 2) Check if the current best squared distance is less than delta^2 // 2.1*) If yes, the points associated to p_node or to its opposite side can't be better than the current best candidate so return it and the associated squared distance to the upper level // 2.2) If no, check the point associated to the current node and update the current best index and the associated squared distance // 2.3) oppositeSide != 0 // 2.4) Go on the opposite side. On return, check if the returned squared distance is less than the current best squared distance and update the current best index and the associated squared distance. // 3*) Return the current best index and the associated squared distance to the upper level const Scalar delta = x[activeDimension] - points_[p_node->index_][activeDimension]; const KDNode::KDNodePointer & sameSide(delta < 0.0 ? p_node->p_left_ : p_node->p_right_); const KDNode::KDNodePointer & oppositeSide(delta < 0.0 ? p_node->p_right_ : p_node->p_left_); UnsignedInteger currentBestIndex = points_.getSize(); Scalar currentBestSquaredDistance = bestSquaredDistance; // 1) if (sameSide != 0) { // 1.1) UnsignedInteger candidateBestIndex = getNearestNeighbourIndex(sameSide, x, bestSquaredDistance, (activeDimension + 1) % points_.getDimension()); if (bestSquaredDistance < currentBestSquaredDistance) { currentBestSquaredDistance = bestSquaredDistance; currentBestIndex = candidateBestIndex; } } // sameSide != 0 // 2) if (currentBestSquaredDistance < delta * delta) { // 2.1) bestSquaredDistance = currentBestSquaredDistance; return currentBestIndex; } // 2.2) const UnsignedInteger localIndex = p_node->index_; const Scalar localSquaredDistance = (x - points_[localIndex]).normSquare(); if (localSquaredDistance < currentBestSquaredDistance) { currentBestSquaredDistance = localSquaredDistance; // To send the current best squared distance to the lower levels bestSquaredDistance = localSquaredDistance; currentBestIndex = localIndex; } // 2.3) if (oppositeSide != 0) { // 2.4) UnsignedInteger candidateBestIndex = getNearestNeighbourIndex(oppositeSide, x, bestSquaredDistance, (activeDimension + 1) % points_.getDimension()); if (bestSquaredDistance < currentBestSquaredDistance) { currentBestSquaredDistance = bestSquaredDistance; currentBestIndex = candidateBestIndex; } } // oppositeSide != 0 // 3) bestSquaredDistance = currentBestSquaredDistance; return currentBestIndex; } /* Points accessor */ Sample KDTree::getPoints() const { return points_; } /* Method save() stores the object through the StorageManager */ void KDTree::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("points_", points_); } /* Method load() reloads the object from the StorageManager */ void KDTree::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("points_", points_); initialize(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KFold.cxx000066400000000000000000000135001307543307100202360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief K-Fold cross validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/KFold.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KFold); static const Factory Factory_KFold; /* Default constructor */ KFold::KFold( const UnsignedInteger k, const Bool useNormal) : FittingAlgorithmImplementation() { setK( k ); } /* Virtual constructor */ KFold * KFold::clone() const { return new KFold( *this ); } /* String converter */ String KFold::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Perform cross-validation */ Scalar KFold::run(const Sample & x, const Sample & y, const Point & weight, const Basis & basis, const Indices & indices) const { return FittingAlgorithmImplementation::run(x, y, weight, basis, indices); } Scalar KFold::run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const { return FittingAlgorithmImplementation::run(y, weight, indices, proxy); } Scalar KFold::run(LeastSquaresMethod & method, const Sample & y) const { const Sample x(method.getInputSample()); const Basis basis(method.getBasis()); const UnsignedInteger sampleSize = x.getSize(); const Scalar variance = y.computeVariance()[0]; if (y.getDimension() != 1) throw InvalidArgumentException( HERE ) << "Output sample should be unidimensional (dim=" << y.getDimension() << ")."; if (y.getSize() != sampleSize) throw InvalidArgumentException( HERE ) << "Samples should be equally sized (in=" << sampleSize << " out=" << y.getSize() << ")."; if (k_ >= sampleSize) throw InvalidArgumentException( HERE ) << "K (" << k_ << ") should be < size (" << sampleSize << ")."; if (!(variance > 0.0)) throw InvalidArgumentException( HERE ) << "Null output sample variance."; // the size of a subsample const UnsignedInteger testSize = sampleSize / k_; Scalar quadraticResidual = 0.0; // Store the initial row filter if any const Indices initialRowFilter(method.getImplementation()->proxy_.getRowFilter()); // We build the test sample by selecting one over k points of the given samples up to the test size, with a varying initial index // i is the initial index for (UnsignedInteger i = 0; i < k_; ++ i) { LOGINFO(OSS() << "Sub-sample " << i << " over " << k_ - 1); // build training/test samples Point yTest(0); Point rhs(0); Indices addedIndices(0); Indices conservedIndices(0); Indices removedIndices(0); Indices rowFilter(0); Indices inverseRowFilter(0); for (UnsignedInteger j = 0; j < (k_ * testSize); ++ j) { const UnsignedInteger jModK = j % k_; // If j is in the learning database if (jModK != i) { // If it is the first pass or if j was in the previous test database, it is a new index if ((i == 0) || (jModK == (i - 1))) addedIndices.add(j); // Else it is a conserved index else conservedIndices.add(j); rhs.add(y[j][0]); rowFilter.add(j); } else { // If it is not the first pass, the test points were in the learning database at the previous pass if (i > 0) removedIndices.add(j); yTest.add(y[j][0]); inverseRowFilter.add(j); } } // Partitioning loop // perform LS regression on the current basis LOGINFO("Solve current least-squares problem"); method.getImplementation()->proxy_.setRowFilter(rowFilter); method.update(addedIndices, conservedIndices, removedIndices, true); const Point coefficients(method.solve(rhs)); // evaluate on the test sample method.getImplementation()->proxy_.setRowFilter(inverseRowFilter); const Matrix psiAk(method.computeWeightedDesign()); const Point yHatTest(psiAk * coefficients); LOGINFO("Compute the residual"); // The empirical error is the normalized L2 error quadraticResidual += (yTest - yHatTest).normSquare() / yTest.getSize(); LOGINFO(OSS() << "Cumulated residual=" << quadraticResidual); } // Restore the row filter method.getImplementation()->proxy_.setRowFilter(initialRowFilter); const Scalar empiricalError = quadraticResidual / (testSize * k_); const Scalar relativeError = empiricalError / variance; LOGINFO(OSS() << "Relative error=" << relativeError); return relativeError; } /* Method save() stores the object through the StorageManager */ void KFold::save(Advocate & adv) const { FittingAlgorithmImplementation::save(adv); adv.saveAttribute( "k_", k_ ); } /* Method load() reloads the object from the StorageManager */ void KFold::load(Advocate & adv) { FittingAlgorithmImplementation::load(adv); adv.loadAttribute( "k_", k_ ); } /* K accessor */ void KFold::setK(const UnsignedInteger k) { if ( k < 1 ) throw InvalidArgumentException(HERE) << "KFold k parameter should be > 0"; k_ = k; } UnsignedInteger KFold::getK() const { return k_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveAlgorithm.cxx000066400000000000000000000047571307543307100236720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KarhunenLoeveAlgorithm); /* Constructor from implementation */ KarhunenLoeveAlgorithm::KarhunenLoeveAlgorithm(const KarhunenLoeveAlgorithmImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* Constructor from implementation */ KarhunenLoeveAlgorithm::KarhunenLoeveAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Threshold accessors */ Scalar KarhunenLoeveAlgorithm::getThreshold() const { return getImplementation()->getThreshold(); } void KarhunenLoeveAlgorithm::setThreshold(const Scalar threshold) { copyOnWrite(); return getImplementation()->setThreshold(threshold); } /* Covariance model accessor */ void KarhunenLoeveAlgorithm::setCovarianceModel(const CovarianceModel & covariance) { copyOnWrite(); getImplementation()->setCovarianceModel(covariance); } CovarianceModel KarhunenLoeveAlgorithm::getCovarianceModel() const { return getImplementation()->getCovarianceModel(); } /* String converter */ String KarhunenLoeveAlgorithm::__repr__() const { return getImplementation()->__repr__(); } String KarhunenLoeveAlgorithm::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } /* Do the computation */ void KarhunenLoeveAlgorithm::run() { getImplementation()->run(); } /* Result accessor */ KarhunenLoeveResult KarhunenLoeveAlgorithm::getResult() const { return getImplementation()->getResult(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveAlgorithmImplementation.cxx000066400000000000000000000070431307543307100265670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KarhunenLoeveAlgorithmImplementation); static const Factory Factory_KarhunenLoeveAlgorithmImplementation; /* Default constructor */ KarhunenLoeveAlgorithmImplementation::KarhunenLoeveAlgorithmImplementation() : PersistentObject() , covariance_() , threshold_(0.0) , result_() { // Nothing to do } /* Default constructor */ KarhunenLoeveAlgorithmImplementation::KarhunenLoeveAlgorithmImplementation(const CovarianceModel & covariance, const Scalar threshold) : PersistentObject() , covariance_(covariance) , threshold_(threshold) , result_() { // Nothing to do } /* Virtual constructor */ KarhunenLoeveAlgorithmImplementation * KarhunenLoeveAlgorithmImplementation::clone() const { return new KarhunenLoeveAlgorithmImplementation(*this); } /* Threshold accessors */ Scalar KarhunenLoeveAlgorithmImplementation::getThreshold() const { return threshold_; } void KarhunenLoeveAlgorithmImplementation::setThreshold(const Scalar threshold) { threshold_ = threshold; } /* Covariance model accessors */ CovarianceModel KarhunenLoeveAlgorithmImplementation::getCovarianceModel() const { return covariance_; } void KarhunenLoeveAlgorithmImplementation::setCovarianceModel(const CovarianceModel & covariance) { covariance_ = covariance; } /* Result accessor */ KarhunenLoeveResult KarhunenLoeveAlgorithmImplementation::getResult() const { return result_; } /* Compute the decomposition */ void KarhunenLoeveAlgorithmImplementation::run() { throw NotYetImplementedException(HERE) << "In KarhunenLoeveAlgorithmImplementation::run()"; } /* String converter */ String KarhunenLoeveAlgorithmImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " covariance model=" << covariance_ << " threshold=" << threshold_ << " result=" << result_; } String KarhunenLoeveAlgorithmImplementation::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("covariance_", covariance_); adv.saveAttribute("threshold_", threshold_); adv.saveAttribute("result_", result_); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("covariance_", covariance_); adv.loadAttribute("threshold_", threshold_); adv.loadAttribute("result_", result_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveP1Algorithm.cxx000066400000000000000000000204151307543307100240600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * P1 Lagrange approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveP1Algorithm.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/PiecewiseLinearEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveP1Algorithm */ CLASSNAMEINIT(KarhunenLoeveP1Algorithm); static const Factory Algorithm_KarhunenLoeveP1Algorithm; /* Constructor without parameters */ KarhunenLoeveP1Algorithm::KarhunenLoeveP1Algorithm() : KarhunenLoeveAlgorithmImplementation() , mesh_() { // Nothing to do } /* Constructor with parameters */ KarhunenLoeveP1Algorithm::KarhunenLoeveP1Algorithm(const Mesh & mesh, const CovarianceModel & covariance, const Scalar threshold) : KarhunenLoeveAlgorithmImplementation(covariance, threshold) , mesh_(mesh) { // Nothing to do } /* Virtual constructor */ KarhunenLoeveP1Algorithm * KarhunenLoeveP1Algorithm::clone() const { return new KarhunenLoeveP1Algorithm( *this ); } /* Here we discretize the following Fredholm problem: \int_{\Omega}C(s,t)\phi_n(s)ds=\lambda_n\phi_n(t) using a P1 approximation of C and \phi_n: C(s,t)=\sum_{i,j}C(s_i,s_j)\theta_i(s)\theta_j(t) \phi_n(t)=\sum_k\alpha_k^n\theta_k(t) where s_i,s_j are vertices of the mesh, C(s_i,s_j)\in\cS^+_d(\R), \alpha_k^n\in\R^d leading to: \forall t\in\Omega, \sum_{i,j}C(s_i,s_j)\theta_j(t)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\sum_l\alpha_k^l\theta_l(t) For each value of n we get d equations in \alpha^n. We write these equations for t=s_1,...,s_N the N vertices of the mesh: \sum_{i,j}C(s_i,s_j)\theta_j(s_m)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\sum_l\alpha_l^n\theta_l(s_m) ie: \sum_i C(s_i,s_m)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\alpha_m^n\theta_m(s_m) In a block-matrix form we get: [C(s_1,s_1) ... C(s_1,s_N)][K_11 ... K_1N][\alpha_1] [\alpha_1] [ ... ... ][ ... ...][ ... ] = \lambda_n [ ... ] [C(s_N,s_1) ... C(s_N,s_N)][K_N1 ... K_NN][\alpha_N] [\alpha_N] Where: K_ij = \int_{\Omega}\theta_i(s)\theta_j(s)ds I with I the dxd identity matrix */ void KarhunenLoeveP1Algorithm::run() { // Compute the gram of the mesh LOGINFO("Build the Gram matrix"); CovarianceMatrix gram(mesh_.computeP1Gram()); const UnsignedInteger numVertices = mesh_.getVerticesNumber(); if (!(gram.getDimension() == numVertices)) throw InternalException(HERE) << "Error: the P1 Gram matrix of the mesh has a dimension=" << gram.getDimension() << " different from the number of vertices=" << numVertices; const Scalar epsilon = ResourceMap::GetAsScalar("KarhunenLoeveP1Algorithm-RegularizationFactor"); if (epsilon > 0.0) for (UnsignedInteger i = 0; i < gram.getDimension(); ++i) gram(i, i) += epsilon; // Extend the Gram matrix of the mesh const UnsignedInteger dimension = covariance_.getDimension(); const UnsignedInteger augmentedDimension = dimension * numVertices; CovarianceMatrix G; if (dimension == 1) G = gram; else { G = CovarianceMatrix(augmentedDimension); for (UnsignedInteger i = 0; i < numVertices; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { const Scalar gij = gram(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) G(i * dimension + k, j * dimension + k) = gij; } // Loop over j } // Loop over i } // Discretize the covariance model LOGINFO("Discretize the covariance model"); CovarianceMatrix C(covariance_.discretize(mesh_)); LOGINFO("Discretize the Fredholm equation"); SquareMatrix M((C * G).getImplementation()); LOGINFO("Solve the eigenvalue problem"); SquareComplexMatrix eigenVectorsComplex; SquareMatrix::ComplexCollection eigenValuesComplex(M.computeEV(eigenVectorsComplex, false)); LOGINFO("Post-process the eigenvalue problem"); Sample eigenPairs(augmentedDimension, augmentedDimension + 1); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenPairs[i][j] = eigenVectorsComplex(j, i).real(); eigenPairs[i][augmentedDimension] = -eigenValuesComplex[i].real(); } eigenPairs = eigenPairs.sortAccordingToAComponent(augmentedDimension); SquareMatrix eigenVectors(augmentedDimension); Point eigenValues(augmentedDimension); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenVectors(i, j) = eigenPairs[j][i]; eigenValues[i] = -eigenPairs[i][augmentedDimension]; } LOGDEBUG(OSS(false) << "eigenVectors=\n" << eigenVectors << ", eigenValues=" << eigenValues); LOGINFO("Extract the relevant eigenpairs"); UnsignedInteger K = 0; Scalar cumulatedVariance = std::abs(eigenValues[0]); // Find the cut-off in the eigenvalues while ((K < eigenValues.getSize()) && (eigenValues[K] >= threshold_ * cumulatedVariance)) { cumulatedVariance += eigenValues[K]; ++K; } // Reduce and rescale the eigenvectors MatrixImplementation transposedProjection(augmentedDimension, K); Point selectedEV(K); Basis modes(0); ProcessSample modesAsProcessSample(mesh_, 0, dimension); const UnsignedInteger meshDimension = mesh_.getDimension(); SampleImplementation values(numVertices, dimension); UnsignedInteger index = 0; for (UnsignedInteger k = 0; k < K; ++k) { selectedEV[k] = eigenValues[k]; const MatrixImplementation a(*eigenVectors.getColumn(k).getImplementation()); const MatrixImplementation Ga(G.getImplementation()->genProd(a)); const Scalar norm = std::sqrt(a.genProd(Ga, true, false)[0]); const Scalar factor = a[0] < 0.0 ? -1.0 / norm : 1.0 / norm; // Store the eigen modes in two forms values.setData(a * factor); modesAsProcessSample.add(values); if (meshDimension == 1) modes.add(PiecewiseLinearEvaluation(mesh_.getVertices().getImplementation()->getData(), values)); else modes.add(P1LagrangeEvaluation(modesAsProcessSample.getField(k))); // Build the relevant column of the transposed projection matrix const MatrixImplementation b(Ga * (factor / sqrt(selectedEV[k]))); std::copy(b.begin(), b.end(), transposedProjection.begin() + index); index += augmentedDimension; } result_ = KarhunenLoeveResultImplementation(covariance_, threshold_, selectedEV, modes, modesAsProcessSample, transposedProjection.transpose()); } /* Mesh accessor */ Mesh KarhunenLoeveP1Algorithm::getMesh() const { return mesh_; } /* String converter */ String KarhunenLoeveP1Algorithm::__repr__() const { OSS oss(true); oss << "class=" << KarhunenLoeveP1Algorithm::GetClassName() << ", mesh=" << mesh_; return oss; } /* String converter */ String KarhunenLoeveP1Algorithm::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KarhunenLoeveP1Algorithm::GetClassName() << ", mesh=" << mesh_; return oss; } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveP1Algorithm::save(Advocate & adv) const { KarhunenLoeveAlgorithmImplementation::save(adv); adv.saveAttribute( "mesh_", mesh_ ); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveP1Algorithm::load(Advocate & adv) { KarhunenLoeveAlgorithmImplementation::load(adv); adv.loadAttribute( "mesh_", mesh_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveP1Factory.cxx000066400000000000000000000167031307543307100235460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * P1 Lagrange approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveP1Factory.hxx" #include "openturns/Exception.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/Sample.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveP1Factory */ CLASSNAMEINIT(KarhunenLoeveP1Factory); static const Factory Factory_KarhunenLoeveP1Factory; /* Constructor without parameters */ KarhunenLoeveP1Factory::KarhunenLoeveP1Factory() : PersistentObject() , mesh_() , threshold_(0.0) { // Nothing to do } /* Constructor with parameters */ KarhunenLoeveP1Factory::KarhunenLoeveP1Factory(const Mesh & mesh, const Scalar threshold) : PersistentObject() , mesh_(mesh) , threshold_(threshold) { Log::Warn(OSS() << "KarhunenLoeveP1Factory is deprecated"); // Compute the gram of the mesh gram_ = mesh.computeP1Gram(); const Scalar epsilon = ResourceMap::GetAsScalar("KarhunenLoeveP1Factory-RegularizationFactor"); if (epsilon > 0.0) for (UnsignedInteger i = 0; i < gram_.getDimension(); ++i) gram_(i, i) += epsilon; } /* Virtual constructor */ KarhunenLoeveP1Factory * KarhunenLoeveP1Factory::clone() const { return new KarhunenLoeveP1Factory( *this ); } /* Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using P1 approximation */ Basis KarhunenLoeveP1Factory::build(const CovarianceModel & covarianceModel, Point & selectedEV) const { const ProcessSample resultAsProcessSample(buildAsProcessSample(covarianceModel, selectedEV)); Basis result(0); for (UnsignedInteger i = 0; i < resultAsProcessSample.getSize(); ++i) result.add(P1LagrangeEvaluation(resultAsProcessSample.getField(i))); return result; } /* Here we discretize the following Fredholm problem: \int_{\Omega}C(s,t)\phi_n(s)ds=\lambda_n\phi_n(t) using a P1 approximation of C and \phi_n: C(s,t)=\sum_{i,j}C(s_i,s_j)\theta_i(s)\theta_j(t) \phi_n(t)=\sum_k\alpha_k^n\theta_k(t) where s_i,s_j are vertices of the mesh, C(s_i,s_j)\in\cS^+_d(\R), \alpha_k^n\in\R^d leading to: \forall t\in\Omega, \sum_{i,j}C(s_i,s_j)\theta_j(t)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\sum_l\alpha_k^l\theta_l(t) For each value of n we get d equations in \alpha^n. We write these equations for t=s_1,...,s_N the N vertices of the mesh: \sum_{i,j}C(s_i,s_j)\theta_j(s_m)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\sum_l\alpha_l^n\theta_l(s_m) ie: \sum_i C(s_i,s_m)\int_{\Omega}\theta_i(s)\sum_k\alpha_k^n\theta_k(s)=\lambda_n\alpha_m^n\theta_m(s_m) In a block-matrix form we get: [C(s_1,s_1) ... C(s_1,s_N)][K_11 ... K_1N][\alpha_1] [\alpha_1] [ ... ... ][ ... ...][ ... ] = \lambda_n [ ... ] [C(s_N,s_1) ... C(s_N,s_N)][K_N1 ... K_NN][\alpha_N] [\alpha_N] Where: K_ij = \int_{\Omega}\theta_i(s)\theta_j(s)ds I with I the dxd identity matrix */ ProcessSample KarhunenLoeveP1Factory::buildAsProcessSample(const CovarianceModel & covarianceModel, Point & selectedEV) const { const UnsignedInteger numVertices = mesh_.getVerticesNumber(); // Extend the Gram matrix of the mesh const UnsignedInteger dimension = covarianceModel.getDimension(); const UnsignedInteger augmentedDimension = dimension * numVertices; CovarianceMatrix G(augmentedDimension); for (UnsignedInteger i = 0; i < numVertices; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { const Scalar gij = gram_(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) G(i * dimension + k, j * dimension + k) = gij; } // Loop over j } // Loop over i // Discretize the covariance model CovarianceMatrix C(covarianceModel.discretize(mesh_)); SquareMatrix M((C * G).getImplementation()); SquareComplexMatrix eigenVectorsComplex; SquareMatrix::ComplexCollection eigenValuesComplex(M.computeEV(eigenVectorsComplex, false)); Sample eigenPairs(augmentedDimension, augmentedDimension + 1); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenPairs[i][j] = eigenVectorsComplex(j, i).real(); eigenPairs[i][augmentedDimension] = -eigenValuesComplex[i].real(); } eigenPairs = eigenPairs.sortAccordingToAComponent(augmentedDimension); SquareMatrix eigenVectors(augmentedDimension); Point eigenValues(augmentedDimension); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenVectors(i, j) = eigenPairs[j][i]; eigenValues[i] = -eigenPairs[i][augmentedDimension]; } LOGINFO(OSS(false) << "eigenVectors=\n" << eigenVectors << ", eigenValues=" << eigenValues); selectedEV = Point(0); ProcessSample result(mesh_, 0, dimension); UnsignedInteger j = 0; while ((j < augmentedDimension) && (eigenValues[j] > threshold_ * std::abs(eigenValues[0]))) { selectedEV.add(eigenValues[j]); Sample values(numVertices, dimension); const Matrix a(eigenVectors.getColumn(j)); const Scalar norm = std::sqrt((a.transpose() * (G * a))(0, 0)); const Scalar factor = eigenVectors(0, j) < 0.0 ? -1.0 / norm : 1.0 / norm; for (UnsignedInteger i = 0; i < numVertices; ++i) for (UnsignedInteger k = 0; k < dimension; ++k) values[i][k] = eigenVectors(i * dimension + k, j) * factor; result.add(values); ++j; } return result; } /* String converter */ String KarhunenLoeveP1Factory::__repr__() const { OSS oss(true); oss << "class=" << KarhunenLoeveP1Factory::GetClassName() << ", mesh=" << mesh_ << ", threshold=" << threshold_; return oss; } /* String converter */ String KarhunenLoeveP1Factory::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KarhunenLoeveP1Factory::GetClassName() << ", mesh=" << mesh_ << ", threshold=" << threshold_; return oss; } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveP1Factory::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "mesh_", mesh_ ); adv.saveAttribute( "threshold_", threshold_ ); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveP1Factory::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "mesh_", mesh_ ); adv.loadAttribute( "threshold_", threshold_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveResult.cxx000066400000000000000000000072271307543307100232150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveResult.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KarhunenLoeveResult); /* Default constructor */ KarhunenLoeveResult::KarhunenLoeveResult() : TypedInterfaceObject( new KarhunenLoeveResultImplementation() ) { // Nothing to do } /* Constructor from implementation */ KarhunenLoeveResult::KarhunenLoeveResult(const KarhunenLoeveResultImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* Constructor from implementation */ KarhunenLoeveResult::KarhunenLoeveResult(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Threshold accessors */ Scalar KarhunenLoeveResult::getThreshold() const { return getImplementation()->getThreshold(); } /* Covariance model accessor */ CovarianceModel KarhunenLoeveResult::getCovarianceModel() const { return getImplementation()->getCovarianceModel(); } /* Eigenvalues accessor */ Point KarhunenLoeveResult::getEigenValues() const { return getImplementation()->getEigenValues(); } /* Modes accessors */ Basis KarhunenLoeveResult::getModes() const { return getImplementation()->getModes(); } ProcessSample KarhunenLoeveResult::getModesAsProcessSample() const { return getImplementation()->getModesAsProcessSample(); } /* Scaled modes accessors */ Basis KarhunenLoeveResult::getScaledModes() const { return getImplementation()->getScaledModes(); } ProcessSample KarhunenLoeveResult::getScaledModesAsProcessSample() const { return getImplementation()->getScaledModesAsProcessSample(); } /* Projection matrix accessor */ Matrix KarhunenLoeveResult::getProjectionMatrix() const { return getImplementation()->getProjectionMatrix(); } /* Projection method */ Point KarhunenLoeveResult::project(const Function & function) const { return getImplementation()->project(function); } Point KarhunenLoeveResult::project(const Field & field) const { return getImplementation()->project(field); } Sample KarhunenLoeveResult::project(const Basis & basis) const { return getImplementation()->project(basis); } Sample KarhunenLoeveResult::project(const ProcessSample & sample) const { return getImplementation()->project(sample); } /* Lift method */ Function KarhunenLoeveResult::lift(const Point & coefficients) const { return getImplementation()->lift(coefficients); } Field KarhunenLoeveResult::liftAsField(const Point & coefficients) const { return getImplementation()->liftAsField(coefficients); } /* String converter */ String KarhunenLoeveResult::__repr__() const { return getImplementation()->__repr__(); } String KarhunenLoeveResult::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveResultImplementation.cxx000066400000000000000000000213031307543307100261120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and by-products * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/KarhunenLoeveResultImplementation.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/Point.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/LinearCombinationFunction.hxx" #include "openturns/P1LagrangeEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KarhunenLoeveResultImplementation); static const Factory Factory_KarhunenLoeveResultImplementation; /* Default constructor */ KarhunenLoeveResultImplementation::KarhunenLoeveResultImplementation() : PersistentObject() , covariance_() , threshold_(0.0) , eigenvalues_() , modes_() , modesAsProcessSample_() , projection_() { // Nothing to do } /* Default constructor */ KarhunenLoeveResultImplementation::KarhunenLoeveResultImplementation(const CovarianceModel & covariance, const Scalar threshold, const Point & eigenvalues, const Basis & modes, const ProcessSample & modesAsProcessSample, const Matrix & projection) : PersistentObject() , covariance_(covariance) , threshold_(threshold) , eigenvalues_(eigenvalues) , modes_(modes) , modesAsProcessSample_(modesAsProcessSample) , projection_(projection) { // Nothing to do } /* Virtual constructor */ KarhunenLoeveResultImplementation * KarhunenLoeveResultImplementation::clone() const { return new KarhunenLoeveResultImplementation(*this); } /* Threshold accessor */ Scalar KarhunenLoeveResultImplementation::getThreshold() const { return threshold_; } /* Covariance model accessor */ CovarianceModel KarhunenLoeveResultImplementation::getCovarianceModel() const { return covariance_; } /* Eigenvalues accessor */ Point KarhunenLoeveResultImplementation::getEigenValues() const { return eigenvalues_; } /* Modes accessors */ Basis KarhunenLoeveResultImplementation::getModes() const { return modes_; } ProcessSample KarhunenLoeveResultImplementation::getModesAsProcessSample() const { return modesAsProcessSample_; } /* Scaled modes accessors */ Basis KarhunenLoeveResultImplementation::getScaledModes() const { Collection scaledModes(modes_.getSize()); const UnsignedInteger dimension = modes_.getDimension(); const Point zero(dimension); const IdentityMatrix id(dimension); for (UnsignedInteger i = 0; i < scaledModes.getSize(); ++i) { const Function modeI(modes_.build(i)); LinearFunction scaling(zero, zero, id * std::sqrt(eigenvalues_[i])); scaledModes[i] = ComposedFunction(scaling, modeI); } return scaledModes; } ProcessSample KarhunenLoeveResultImplementation::getScaledModesAsProcessSample() const { ProcessSample scaledModesAsProcessSample(modesAsProcessSample_.getMesh(), modesAsProcessSample_.getSize(), modesAsProcessSample_.getDimension()); for (UnsignedInteger i = 0; i < modesAsProcessSample_.getSize(); ++i) scaledModesAsProcessSample[i] = modesAsProcessSample_[i] * std::sqrt(eigenvalues_[i]); return scaledModesAsProcessSample; } /* Projection matrix accessor */ Matrix KarhunenLoeveResultImplementation::getProjectionMatrix() const { return projection_; } /* Projection method */ Point KarhunenLoeveResultImplementation::project(const Function & function) const { // Evaluate the function over the vertices of the mesh and cast it into a Point const Point functionValues(function(modesAsProcessSample_.getMesh().getVertices()).getImplementation()->getData()); return projection_ * functionValues; } Point KarhunenLoeveResultImplementation::project(const Field & field) const { if (field.getMesh() == modesAsProcessSample_.getMesh()) return projection_ * field.getValues().getImplementation()->getData(); return project(Function(P1LagrangeEvaluation(field).clone())); } struct ProjectBasisPolicy { const Basis & basis_; Sample & output_; const KarhunenLoeveResultImplementation & result_; ProjectBasisPolicy( const Basis & basis, Sample & output, const KarhunenLoeveResultImplementation & result) : basis_(basis) , output_(output) , result_(result) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i] = result_.project(basis_.build(i)); } }; /* end struct ProjectBasisPolicy */ Sample KarhunenLoeveResultImplementation::project(const Basis & basis) const { const UnsignedInteger size = basis.getSize(); Sample result(size, projection_.getNbRows()); const ProjectBasisPolicy policy( basis, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } struct ProjectSamplePolicy { const ProcessSample & sample_; Sample & output_; const KarhunenLoeveResultImplementation & result_; ProjectSamplePolicy( const ProcessSample & sample, Sample & output, const KarhunenLoeveResultImplementation & result) : sample_(sample) , output_(output) , result_(result) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i] = result_.project(sample_.getField(i)); } }; /* end struct ProjectSamplePolicy */ Sample KarhunenLoeveResultImplementation::project(const ProcessSample & sample) const { const UnsignedInteger size = sample.getSize(); Sample result(size, projection_.getNbRows()); const ProjectSamplePolicy policy( sample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } /* Lift method */ Function KarhunenLoeveResultImplementation::lift(const Point & coefficients) const { const UnsignedInteger dimension = eigenvalues_.getDimension(); Point scaledCoefficients(dimension); Collection functions(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { scaledCoefficients[i] = std::sqrt(eigenvalues_[i]) * coefficients[i]; functions[i] = modes_.build(i); } return LinearCombinationFunction(functions, scaledCoefficients); } Field KarhunenLoeveResultImplementation::liftAsField(const Point & coefficients) const { const UnsignedInteger dimension = eigenvalues_.getDimension(); Sample values(modesAsProcessSample_.getMesh().getVerticesNumber(), modesAsProcessSample_.getDimension()); for (UnsignedInteger i = 0; i < dimension; ++i) values += modesAsProcessSample_[i] * (std::sqrt(eigenvalues_[i]) * coefficients[i]); return Field(modesAsProcessSample_.getMesh(), values); } /* String converter */ String KarhunenLoeveResultImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " covariance model=" << covariance_ << " threshold=" << threshold_ << " eigenvalues=" << eigenvalues_ << " modes=" << modes_ << " modesAsProcessSample=" << modesAsProcessSample_ << " projection=" << projection_; } String KarhunenLoeveResultImplementation::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveResultImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("covariance_", covariance_); adv.saveAttribute("threshold_", threshold_); adv.saveAttribute("eigenvalues_", eigenvalues_); adv.saveAttribute("modes_", modes_); adv.saveAttribute("modesAsProcessSample_", modesAsProcessSample_); adv.saveAttribute("projection_", projection_); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveResultImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("covariance_", covariance_); adv.loadAttribute("threshold_", threshold_); adv.loadAttribute("eigenvalues_", eigenvalues_); adv.loadAttribute("modes_", modes_); adv.loadAttribute("modesAsProcessSample_", modesAsProcessSample_); adv.loadAttribute("projection_", projection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KarhunenLoeveSVDAlgorithm.cxx000066400000000000000000000330561307543307100242410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * SVD decomposition of a process sample. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveSVDAlgorithm.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/PiecewiseLinearEvaluation.hxx" #include "openturns/RankMCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveSVDAlgorithm */ CLASSNAMEINIT(KarhunenLoeveSVDAlgorithm); static const Factory Algorithm_KarhunenLoeveSVDAlgorithm; /* Constructor without parameters */ KarhunenLoeveSVDAlgorithm::KarhunenLoeveSVDAlgorithm() : KarhunenLoeveAlgorithmImplementation() , sample_() , centeredSample_(false) , verticesWeights_(0) , uniformVerticesWeights_(true) , sampleWeights_(0) , uniformSampleWeights_(true) { // Nothing to do } /* Constructor with parameters */ KarhunenLoeveSVDAlgorithm::KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Scalar threshold, const Bool centeredSample) : KarhunenLoeveAlgorithmImplementation(CovarianceModel(), threshold) , sample_(sample) , centeredSample_(centeredSample) , verticesWeights_(0) , uniformVerticesWeights_(false) , sampleWeights_(sample.getSize(), 1.0 / sample.getSize()) , uniformSampleWeights_(true) { // Set the vertices weights in order to check their uniformity and positivity setVerticesWeights(sample.getMesh().computeWeights()); } /* Constructor with parameters */ KarhunenLoeveSVDAlgorithm::KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Point & verticesWeights, const Scalar threshold, const Bool centeredSample) : KarhunenLoeveAlgorithmImplementation(CovarianceModel(), threshold) , sample_(sample) , centeredSample_(centeredSample) , verticesWeights_(0) , uniformVerticesWeights_(true) , sampleWeights_(sample.getSize(), 1.0 / sample.getSize()) , uniformSampleWeights_(true) { // Set the vertices weights in order to check their uniformity and positivity setVerticesWeights(verticesWeights); } /* Constructor with parameters */ KarhunenLoeveSVDAlgorithm::KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Point & verticesWeights, const Point & sampleWeights, const Scalar threshold, const Bool centeredSample) : KarhunenLoeveAlgorithmImplementation(CovarianceModel(), threshold) , sample_(sample) , centeredSample_(centeredSample) , verticesWeights_(0) , uniformVerticesWeights_(true) , sampleWeights_(0) , uniformSampleWeights_(true) { // Set the vertices weights in order to check their uniformity and positivity setVerticesWeights(verticesWeights); // Set the sample weights in order to check their uniformity and positivity setSampleWeights(sampleWeights); } /* Virtual constructor */ KarhunenLoeveSVDAlgorithm * KarhunenLoeveSVDAlgorithm::clone() const { return new KarhunenLoeveSVDAlgorithm( *this ); } /* Here we discretize the following Fredholm problem: \int_{\Omega}C(s,t)\phi_n(s)ds=\lambda_n\phi_n(t) using the empirical estimate for C and the SVD decomposition of the design matrix */ void KarhunenLoeveSVDAlgorithm::run() { // Compute the design matrix of the sample LOGINFO("Build the Design matrix"); const UnsignedInteger size = sample_.getSize(); const UnsignedInteger kTilde = centeredSample_ ? size : size - 1; const UnsignedInteger verticesNumber = sample_.getMesh().getVerticesNumber(); const UnsignedInteger dimension = sample_.getDimension(); const UnsignedInteger augmentedDimension = verticesNumber * dimension; MatrixImplementation designMatrix(augmentedDimension, kTilde); // Compute the empirical mean if the sample is not centered Point mean; if (!centeredSample_) { LOGINFO("Noncentered sample: compute mean"); const Scalar unbiasedRatio = size / (size - 1.0); mean = Point(augmentedDimension); for (UnsignedInteger i = 0; i < size; ++i) { mean += sampleWeights_[i] * sample_[i].getImplementation()->getData(); sampleWeights_[i] *= unbiasedRatio; } } if (uniformVerticesWeights_) { LOGINFO("Uniform vertices weights"); UnsignedInteger shift = 0; const Scalar coeff = std::sqrt(verticesWeights_[0]); for (UnsignedInteger i = 0; i < kTilde; ++i) { Point data = sample_[i].getImplementation()->getData(); if (!centeredSample_) data -= mean; data *= coeff * std::sqrt(sampleWeights_[i]); std::copy(data.begin(), data.end(), designMatrix.begin() + shift); shift += augmentedDimension; } } // uniformVerticesWeights else // Take the vertices weights into account { LOGINFO("Non-uniform vertices weights"); Point coeffs(verticesNumber); for (UnsignedInteger j = 0; j < verticesNumber; ++j) coeffs[j] = std::sqrt(verticesWeights_[j]); UnsignedInteger shift = 0; for (UnsignedInteger i = 0; i < kTilde; ++i) { const Scalar wI = std::sqrt(sampleWeights_[i]); const Sample currentSample(sample_[i]); for (UnsignedInteger j = 0; j < verticesNumber; ++j) { const Scalar wJ = coeffs[j]; const Point currentPoint(currentSample[j]); for (UnsignedInteger k = 0; k < dimension; ++k) { designMatrix[shift] = wI * wJ * currentPoint[k]; ++shift; } // k } // j } // i } // !uniformWeights LOGDEBUG(OSS(false) << "Design matrix=" << designMatrix); // Compute the SVD decomposition of the design matrix MatrixImplementation U; MatrixImplementation Vt; const Point svd(designMatrix.computeSVD(U, Vt)); LOGDEBUG(OSS(false) << "U=\n" << U << ", singular values=" << svd); Point eigenValues(svd.getDimension()); for (UnsignedInteger i = 0; i < svd.getDimension(); ++i) eigenValues[i] = svd[i] * svd[i]; LOGINFO("Extract the relevant eigenpairs"); UnsignedInteger K = 0; Scalar cumulatedVariance = std::abs(eigenValues[0]); // Find the cut-off in the eigenvalues while ((K < eigenValues.getSize()) && (eigenValues[K] >= threshold_ * cumulatedVariance)) { cumulatedVariance += eigenValues[K]; ++K; } LOGINFO("Create eigenmodes values"); // Stores the eigenmodes values in-place to avoid wasting memory MatrixImplementation & eigenModesValues = U; if (uniformVerticesWeights_) eigenModesValues *= 1.0 / std::sqrt(verticesWeights_[0]); else { UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < K; ++j) { for (UnsignedInteger i = 0; i < verticesNumber; ++i) { const Scalar coefficient = 1.0 / std::sqrt(verticesWeights_[i]); for (UnsignedInteger k = 0; k < dimension; ++k) { eigenModesValues[index] *= coefficient; ++index; } // k } // i } // j } // !uniformVerticesWeights_ // Reduce and rescale the eigenvectors MatrixImplementation transposedProjection(augmentedDimension, K); Point selectedEV(K); Basis modes(0); ProcessSample modesAsProcessSample(sample_.getMesh(), 0, dimension); const UnsignedInteger meshDimension = sample_.getMesh().getDimension(); SampleImplementation values(verticesNumber, dimension); UnsignedInteger index = 0; LOGINFO("Create modes and projection"); for (UnsignedInteger k = 0; k < K; ++k) { selectedEV[k] = eigenValues[k]; MatrixImplementation a(eigenModesValues.getColumn(k)); const Scalar factor = a[0] < 0.0 ? -1.0 : 1.0; // Store the eigen modes in two forms values.setData(a * factor); modesAsProcessSample.add(values); if (meshDimension == 1) modes.add(PiecewiseLinearEvaluation(sample_.getMesh().getVertices().getImplementation()->getData(), values)); else modes.add(P1LagrangeEvaluation(modesAsProcessSample.getField(k))); // Build the relevant column of the transposed projection matrix // \vect{\alpha}=\diag{1/\sqrt{\lambda}}[(\sqrt{W}^{-1}U)^tW]F // =\diag{1/\sqrt{\lambda}}[(W.eigenModesValues)^t]F // so M^t=[W.eigenModesValues.\diag{1/\sqrt{\lambda}}]^t if (uniformVerticesWeights_) { a *= (factor * verticesWeights_[0] / sqrt(selectedEV[k])); std::copy(a.begin(), a.end(), transposedProjection.begin() + index); index += augmentedDimension; } // uniformVerticesWeights_ else { const Scalar inverseSqrtLambda = factor / sqrt(selectedEV[k]); UnsignedInteger shift = 0; for (UnsignedInteger i = 0; i < verticesNumber; ++i) { const Scalar coefficient = verticesWeights_[i] * inverseSqrtLambda; for (UnsignedInteger j = 0; j < dimension; ++j) { transposedProjection[index] = coefficient * a[shift]; ++shift; ++index; } // j } // i } // !uniformVerticesWeights_ } // k LOGINFO("Create KL result"); covariance_ = RankMCovarianceModel(selectedEV, modes); result_ = KarhunenLoeveResultImplementation(covariance_, threshold_, selectedEV, modes, modesAsProcessSample, transposedProjection.transpose()); } /* Sample accessor */ ProcessSample KarhunenLoeveSVDAlgorithm::getSample() const { return sample_; } /* Vertices weights accessor */ Point KarhunenLoeveSVDAlgorithm::getVerticesWeights() const { return verticesWeights_; } void KarhunenLoeveSVDAlgorithm::setVerticesWeights(const Point & verticesWeights) { const UnsignedInteger verticesNumber = sample_.getMesh().getVerticesNumber(); if (!(verticesWeights.getSize() == verticesNumber)) throw InvalidArgumentException(HERE) << "Error: expected vertices weights of dimension=" << verticesNumber << ", got dimension=" << verticesWeights.getSize(); const Scalar weight0 = verticesWeights[0]; for (UnsignedInteger i = 0; i < verticesNumber; ++i) { if (!(verticesWeights[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected positive vertices weights, here weights[" << i << "]=" << verticesWeights[i]; uniformVerticesWeights_ = uniformVerticesWeights_ && (verticesWeights[i] == weight0); } verticesWeights_ = verticesWeights; } /* Sample weights accessor */ Point KarhunenLoeveSVDAlgorithm::getSampleWeights() const { return sampleWeights_; } void KarhunenLoeveSVDAlgorithm::setSampleWeights(const Point & sampleWeights) { const UnsignedInteger sampleSize = sample_.getSize(); if (!(sampleWeights.getSize() == sampleSize)) throw InvalidArgumentException(HERE) << "Error: expected sample weights of dimension=" << sampleSize << ", got dimension=" << sampleWeights.getSize(); const Scalar weight0 = sampleWeights[0]; Scalar weightSum = 0.0; for (UnsignedInteger i = 0; i < sampleSize; ++i) { if (!(sampleWeights[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected positive sample weights, here weights[" << i << "]=" << sampleWeights[i]; uniformSampleWeights_ = uniformSampleWeights_ && (sampleWeights[i] == weight0); weightSum += sampleWeights[i]; } // Normalize the sample weights to have an unbiased estimator of the mean sampleWeights_ = sampleWeights / weightSum; } /* Covariance model accessors */ CovarianceModel KarhunenLoeveSVDAlgorithm::getCovarianceModel() const { // If run() has already been called, it gives the tensor form of the covariance // else it is the default covariance model return getResult().getCovarianceModel(); } /* Hide the covariance model accessor as it has no meaning in the SVD context */ void KarhunenLoeveSVDAlgorithm::setCovarianceModel(const CovarianceModel & covariance) { // Nothing to do } /* String converter */ String KarhunenLoeveSVDAlgorithm::__repr__() const { OSS oss(true); oss << "class=" << KarhunenLoeveSVDAlgorithm::GetClassName() << ", sample=" << sample_ << ", centered=" << std::boolalpha << centeredSample_ << ", weights=" << verticesWeights_; return oss; } /* String converter */ String KarhunenLoeveSVDAlgorithm::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KarhunenLoeveSVDAlgorithm::GetClassName() << ", sample=" << sample_ << ", centered=" << std::boolalpha << centeredSample_ << ", weights=" << verticesWeights_; return oss; } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveSVDAlgorithm::save(Advocate & adv) const { KarhunenLoeveAlgorithmImplementation::save(adv); adv.saveAttribute( "sample_", sample_ ); adv.saveAttribute( "centeredSample_", centeredSample_ ); adv.saveAttribute( "verticesWeights_", verticesWeights_ ); adv.saveAttribute( "uniformVerticesWeights_", uniformVerticesWeights_ ); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveSVDAlgorithm::load(Advocate & adv) { KarhunenLoeveAlgorithmImplementation::load(adv); adv.loadAttribute( "sample_", sample_ ); adv.loadAttribute( "centeredSample_", centeredSample_ ); adv.loadAttribute( "verticesWeights_", verticesWeights_ ); adv.loadAttribute( "uniformVerticesWeights_", uniformVerticesWeights_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/KissFFT.cxx000066400000000000000000000275611307543307100205240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KissFFT.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "kissfft.hh" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS typedef kissfft KISSFFTScalar; struct FFTPolicy { const KissFFT::ComplexCollection & input_; KissFFT::ComplexCollection & output_; KISSFFTScalar & fft_; const UnsignedInteger fftSize_; FFTPolicy(const KissFFT::ComplexCollection & input, KissFFT::ComplexCollection & output, KISSFFTScalar & fft, UnsignedInteger fftSize) : input_(input) , output_(output) , fft_(fft) , fftSize_(fftSize) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const UnsignedInteger first = fftSize_ * i; fft_.transform( &input_[first] , &output_[first] ); } } }; /* end struct FFTPolicy */ /** * @class KissFFT */ CLASSNAMEINIT(KissFFT); static const Factory Factory_KissFFT; /* Constructor with parameters */ KissFFT::KissFFT() : FFTImplementation() { // Nothing to do } /* Virtual constructor */ KissFFT * KissFFT::clone() const { return new KissFFT(*this); } /* String converter */ String KissFFT::__repr__() const { OSS oss(true); oss << "class=" << KissFFT::GetClassName(); return oss; } /* String converter */ String KissFFT::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KissFFT::GetClassName(); return oss; } /* FFT transformation on complex */ KissFFT::ComplexCollection KissFFT::transform(const ComplexCollection & collection) const { // Get the size of the collection const UnsignedInteger fftSize = collection.getSize(); // Init of kissfft - Boolean argument is to tell that we perform a direct transformation KISSFFTScalar fft(fftSize, false); // Allocation of memory for final result ComplexCollection transformationResult(fftSize); fft.transform( &collection[0] , &transformationResult[0] ); return transformationResult; } /* FFT transformation on a regular complex sequence of the collection (between first and last, with elements separated by step)*/ KissFFT::ComplexCollection KissFFT::transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { // Init of kissfft - Boolean argument is to tell that we perform a direct transformation KISSFFTScalar fft(size, false); // Allocation of memory for final result ComplexCollection transformationResult(size); fft.transform( &collection[first] , &transformationResult[0] ); return transformationResult; } /* FFT T transformation */ KissFFT::ComplexCollection KissFFT::inverseTransform(const ComplexCollection & collection) const { // Get the size of the collection const UnsignedInteger size = collection.getSize(); // Init of kissfft - Boolean argument is to tell that we perform an inverse transformation KISSFFTScalar fft(size, true); // Allocation of memory for final result ComplexCollection transformationResult(size); // Inverse transform = transform with the opposite sign in the exponent and a 1/N factor // Call inverse transformation fft.transform( &collection[0] , &transformationResult[0] ); const Scalar alpha = 1.0 / size; for (UnsignedInteger index = 0; index < size; ++index) transformationResult[index] *= alpha; return transformationResult; } /* FFT transformation on a regular complex sequence of the collection (between first and last, with elements separated by step)*/ KissFFT::ComplexCollection KissFFT::inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const { // Init of kissfft - Boolean argument is true KISSFFTScalar fft(size, true); // Allocation of memory for final result ComplexCollection transformationResult(size); fft.transform( &collection[first] , &transformationResult[0] ); const Scalar alpha = 1.0 / size; for (UnsignedInteger index = 0; index < size; ++index) transformationResult[index] *= alpha; return transformationResult; } ComplexMatrix KissFFT::fft2D(const ComplexMatrix & complexMatrix, const Bool isIFFT) const { const UnsignedInteger columns = complexMatrix.getNbColumns(); const UnsignedInteger rows = complexMatrix.getNbRows(); ComplexCollection output(rows * columns); KISSFFTScalar fftRows(rows, isIFFT); const FFTPolicy policyRows(*(complexMatrix.getImplementation().get()), output, fftRows, rows); TBB::ParallelFor( 0, columns, policyRows); ComplexCollection transposedData(rows * columns); for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) transposedData[columnIndex + rowIndex * columns] = output[rowIndex + rows * columnIndex]; KISSFFTScalar fftColumns(columns, isIFFT); const FFTPolicy policyColumns(transposedData, output, fftColumns, columns); TBB::ParallelFor( 0, rows, policyColumns ); ComplexMatrix result(rows, columns); Complex factor(1.0); if (isIFFT) factor /= (rows * columns); for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) result(rowIndex, columnIndex) = output[columnIndex + rowIndex * columns] * factor; return result; } /** FFT 2D transformation on complex */ ComplexMatrix KissFFT::transform2D(const ComplexMatrix & complexMatrix) const { return fft2D(complexMatrix, false); } /** FFT 2D transformation on real matrix */ ComplexMatrix KissFFT::transform2D(const Matrix & matrix) const { const UnsignedInteger rows = matrix.getNbRows(); const UnsignedInteger columns = matrix.getNbColumns(); ComplexMatrix complexMatrix(rows, columns); for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexMatrix(rowIndex, columnIndex) = matrix(rowIndex, columnIndex); return transform2D(complexMatrix); } /** FFT 2D transformation on sample */ ComplexMatrix KissFFT::transform2D(const Sample & sample) const { const UnsignedInteger rows = sample.getSize(); const UnsignedInteger columns = sample.getDimension(); ComplexMatrix complexMatrix(rows, columns); for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexMatrix(rowIndex, columnIndex) = sample[rowIndex][columnIndex]; return transform2D(complexMatrix); } /** IFFT 2D transformation on complex */ ComplexMatrix KissFFT::inverseTransform2D(const ComplexMatrix & complexMatrix) const { return fft2D(complexMatrix, true); } /** IFFT 2D transformation on real matrix */ ComplexMatrix KissFFT::inverseTransform2D(const Matrix & matrix) const { const UnsignedInteger rows = matrix.getNbRows(); const UnsignedInteger columns = matrix.getNbColumns(); ComplexMatrix complexMatrix(rows, columns); for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexMatrix(rowIndex, columnIndex) = matrix(rowIndex, columnIndex); return inverseTransform2D(complexMatrix); } /** IFFT 2D transformation on sample */ ComplexMatrix KissFFT::inverseTransform2D(const Sample & sample) const { const UnsignedInteger rows = sample.getSize(); const UnsignedInteger columns = sample.getDimension(); ComplexMatrix complexMatrix(rows, columns); for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexMatrix(rowIndex, columnIndex) = sample[rowIndex][columnIndex]; return inverseTransform2D(complexMatrix); } ComplexTensor KissFFT::fft3D(const ComplexTensor & tensor, const Bool isIFFT) const { // Get the dimensions of the tensor const UnsignedInteger rows = tensor.getNbRows(); const UnsignedInteger columns = tensor.getNbColumns(); const UnsignedInteger sheets = tensor.getNbSheets(); // tensor result ComplexTensor result(rows, columns, sheets); for(UnsignedInteger sheetIndex = 0; sheetIndex < sheets; ++sheetIndex) { // 2D transform on the current sheet ComplexMatrix sheet(tensor.getSheet(sheetIndex)); result.setSheet(sheetIndex, fft2D(sheet, isIFFT)); } ComplexCollection input(rows * columns * sheets); ComplexCollection output(rows * columns * sheets); UnsignedInteger index = 0; for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) { for(UnsignedInteger sheetIndex = 0; sheetIndex < sheets; ++sheetIndex) { input[index] = result(rowIndex, columnIndex, sheetIndex); index += 1; } } } KISSFFTScalar fft(sheets, isIFFT); const FFTPolicy policy(input, output, fft, sheets); TBB::ParallelFor( 0, rows * columns, policy ); index = 0; Complex factor(1.0); if (isIFFT) factor /= sheets; for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) { for(UnsignedInteger sheetIndex = 0; sheetIndex < sheets; ++sheetIndex) { result(rowIndex, columnIndex, sheetIndex) = output[index] * factor; index += 1; } } } return result; } /** FFT 3D transformation on complex */ ComplexTensor KissFFT::transform3D(const ComplexTensor & tensor) const { return fft3D(tensor, false); } /* FFT 3D transformation on real data */ ComplexTensor KissFFT::transform3D(const Tensor & tensor) const { // Get the dimensions of the tensor const UnsignedInteger rows = tensor.getNbRows(); const UnsignedInteger columns = tensor.getNbColumns(); const UnsignedInteger sheets = tensor.getNbSheets(); // tensor result ComplexTensor complexTensor(rows, columns, sheets); for(UnsignedInteger sheetIndex = 0; sheetIndex < sheets; ++sheetIndex) for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexTensor(rowIndex, columnIndex, sheetIndex) = tensor(rowIndex, columnIndex, sheetIndex); return transform3D(complexTensor); } /** IFFT 3D transformation on complex */ ComplexTensor KissFFT::inverseTransform3D(const ComplexTensor & tensor) const { return fft3D(tensor, true); } /** IFFT 3D transformation on real */ ComplexTensor KissFFT::inverseTransform3D(const Tensor & tensor) const { // Get the dimensions of the tensor const UnsignedInteger rows = tensor.getNbRows(); const UnsignedInteger columns = tensor.getNbColumns(); const UnsignedInteger sheets = tensor.getNbSheets(); // tensor result ComplexTensor complexTensor(rows, columns, sheets); for(UnsignedInteger sheetIndex = 0; sheetIndex < sheets; ++sheetIndex) for (UnsignedInteger columnIndex = 0; columnIndex < columns; ++columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < rows; ++rowIndex) complexTensor(rowIndex, columnIndex, sheetIndex) = tensor(rowIndex, columnIndex, sheetIndex); return inverseTransform3D(complexTensor); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/LeastSquaresMetaModelSelection.cxx000066400000000000000000000163441307543307100253220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Basis selection algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Log.hxx" #include "openturns/Indices.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" #include "openturns/LeastSquaresMetaModelSelection.hxx" #include "openturns/SVDMethod.hxx" #include "openturns/CholeskyMethod.hxx" #include "openturns/QRMethod.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LeastSquaresMetaModelSelection); static const Factory Factory_LeastSquaresMetaModelSelection; /* Default constructor */ LeastSquaresMetaModelSelection::LeastSquaresMetaModelSelection() : ApproximationAlgorithmImplementation() { // Nothing to do } /* Default constructor */ LeastSquaresMetaModelSelection::LeastSquaresMetaModelSelection(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices, const BasisSequenceFactory & basisSequenceFactory, const FittingAlgorithm & fittingAlgorithm) : ApproximationAlgorithmImplementation( x, y, psi, indices ) , basisSequenceFactory_(basisSequenceFactory) , fittingAlgorithm_(fittingAlgorithm) { // Nothing to do } /* Default constructor */ LeastSquaresMetaModelSelection::LeastSquaresMetaModelSelection(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const BasisSequenceFactory & basisSequenceFactory, const FittingAlgorithm & fittingAlgorithm) : ApproximationAlgorithmImplementation( x, y, weight, psi, indices ) , basisSequenceFactory_(basisSequenceFactory) , fittingAlgorithm_(fittingAlgorithm) { // Nothing to do } /* Virtual constructor */ LeastSquaresMetaModelSelection * LeastSquaresMetaModelSelection::clone() const { return new LeastSquaresMetaModelSelection( *this ); } /* BasisSequenceFactory accessor */ void LeastSquaresMetaModelSelection::setBasisSequenceFactory(const BasisSequenceFactory & basisSequenceFactory) { basisSequenceFactory_ = basisSequenceFactory; } BasisSequenceFactory LeastSquaresMetaModelSelection::getBasisSequenceFactory() const { return basisSequenceFactory_; } /* FittingAlgorithm accessor */ void LeastSquaresMetaModelSelection::setFittingAlgorithm(const FittingAlgorithm & fittingAlgorithm) { fittingAlgorithm_ = fittingAlgorithm; } FittingAlgorithm LeastSquaresMetaModelSelection::getFittingAlgorithm() const { return fittingAlgorithm_; } /* String converter */ String LeastSquaresMetaModelSelection::__repr__() const { return OSS() << "class=" << getClassName() << " basisSequenceFactory=" << basisSequenceFactory_ << " fittingAlgorithm=" << fittingAlgorithm_; } /* Perform the selection */ void LeastSquaresMetaModelSelection::run(const DesignProxy & proxy) { // for each sub-basis ... Scalar minimumError = SpecFunc::MaxScalar; const String methodName(ResourceMap::Get("LeastSquaresMetaModelSelection-DecompositionMethod")); LeastSquaresMethod method(LeastSquaresMethod::Build(methodName, proxy, weight_, currentIndices_)); Indices optimalBasisIndices; UnsignedInteger iterations = 0; basisSequenceFactory_.initialize(); basisSequenceFactory_.updateBasis(method, y_); // for each sub-basis ... const Scalar alpha = std::max(1.0, ResourceMap::GetAsScalar("LeastSquaresMetaModelSelection-MaximumErrorFactor")); const Scalar errorThreshold = std::max(0.0, ResourceMap::GetAsScalar("LeastSquaresMetaModelSelection-ErrorThreshold")); while ((basisSequenceFactory_.getImplementation()->addedPsi_k_ranks_.getSize() > 0) || (basisSequenceFactory_.getImplementation()->removedPsi_k_ranks_.getSize() > 0)) { // retrieve the i-th basis of the sequence const Scalar error = fittingAlgorithm_.run(method, y_); LOGINFO(OSS() << "\nsubbasis=" << iterations << ", size=" << basisSequenceFactory_.getImplementation()->currentIndices_.getSize() << ", error=" << error << ", qSquare=" << 1.0 - error); if (error < minimumError) { optimalBasisIndices = basisSequenceFactory_.getImplementation()->currentIndices_; minimumError = error; } else { if (error > alpha * minimumError) { LOGINFO(OSS() << "Error=" << error << " larger than " << alpha << "*" << minimumError << "=" << alpha * minimumError); break; } } if (minimumError < errorThreshold) { LOGINFO(OSS() << "Minimum error=" << minimumError << " smaller than threshold=" << errorThreshold); break; } basisSequenceFactory_.updateBasis(method, y_); ++ iterations; } // recompute the coefficients of the selected sparse metamodel by least-square regression PenalizedLeastSquaresAlgorithm penalizedLeastSquaresAlgorithm(x_, y_, weight_, method.getBasis(), optimalBasisIndices); penalizedLeastSquaresAlgorithm.run(proxy); const Point optimalBasisCoefficients(penalizedLeastSquaresAlgorithm.getCoefficients()); const Scalar optimalResidual = penalizedLeastSquaresAlgorithm.getResidual(); // New relative error based on cross-validation error const Scalar optimalRelativeError = minimumError / y_.getSize(); // compute the coefficients in the master basis from the ones in the optimal sub-basis Point optimalCoefficients( currentIndices_.getSize() ); for (UnsignedInteger i = 0; i < optimalBasisIndices.getSize(); ++ i) { for (UnsignedInteger j = 0; j < currentIndices_.getSize(); ++ j) if (currentIndices_[j] == optimalBasisIndices[i]) optimalCoefficients[j] = optimalBasisCoefficients[i]; } setCoefficients(optimalCoefficients); setResidual(optimalResidual); setRelativeError(optimalRelativeError); LOGINFO(OSS() << "optimalBasisIndices=" << optimalBasisIndices); LOGINFO(OSS() << "optimalError=" << minimumError); LOGINFO(OSS() << "optimalResidual=" << optimalResidual); LOGINFO(OSS() << "optimalRelativeError=" << optimalRelativeError); } /* Method save() stores the object through the StorageManager */ void LeastSquaresMetaModelSelection::save(Advocate & adv) const { ApproximationAlgorithmImplementation::save(adv); adv.saveAttribute( "basisSequenceFactory_", basisSequenceFactory_ ); adv.saveAttribute( "fittingAlgorithm_", fittingAlgorithm_ ); } /* Method load() reloads the object from the StorageManager */ void LeastSquaresMetaModelSelection::load(Advocate & adv) { ApproximationAlgorithmImplementation::load(adv); adv.loadAttribute( "basisSequenceFactory_", basisSequenceFactory_ ); adv.loadAttribute( "fittingAlgorithm_", fittingAlgorithm_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/LeastSquaresMetaModelSelectionFactory.cxx000066400000000000000000000062611307543307100266470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building LeastSquaresMetaModelSelectionFactory objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LeastSquaresMetaModelSelectionFactory.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/BasisSequenceFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LeastSquaresMetaModelSelectionFactory); static const Factory Factory_LeastSquaresMetaModelSelectionFactory; /* Constructor */ LeastSquaresMetaModelSelectionFactory::LeastSquaresMetaModelSelectionFactory(const BasisSequenceFactory & fact, const FittingAlgorithm & algo) : ApproximationAlgorithmImplementationFactory(), basisSequenceFactory_(fact), fittingAlgorithm_(algo) { // Nothing to do } /* Virtual constructor */ LeastSquaresMetaModelSelectionFactory * LeastSquaresMetaModelSelectionFactory::clone() const { return new LeastSquaresMetaModelSelectionFactory(*this); } /* Accessors */ BasisSequenceFactory LeastSquaresMetaModelSelectionFactory::getBasisSequenceFactory() const { return basisSequenceFactory_; } FittingAlgorithm LeastSquaresMetaModelSelectionFactory::getFittingAlgorithm() const { return fittingAlgorithm_; } /* String converter */ String LeastSquaresMetaModelSelectionFactory::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Method to create new LeastSquaresMetaModelSelection objects */ LeastSquaresMetaModelSelection * LeastSquaresMetaModelSelectionFactory::build(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const { return new LeastSquaresMetaModelSelection( x, y, weight, psi, indices, basisSequenceFactory_, fittingAlgorithm_ ); } /* Method save() stores the object through the StorageManager */ void LeastSquaresMetaModelSelectionFactory::save(Advocate & adv) const { ApproximationAlgorithmImplementationFactory::save(adv); adv.saveAttribute( "basisSequenceFactory_", basisSequenceFactory_ ); adv.saveAttribute( "fittingAlgorithm_", fittingAlgorithm_ ); } /* Method load() reloads the object from the StorageManager */ void LeastSquaresMetaModelSelectionFactory::load(Advocate & adv) { ApproximationAlgorithmImplementationFactory::load(adv); adv.loadAttribute( "basisSequenceFactory_", basisSequenceFactory_ ); adv.loadAttribute( "fittingAlgorithm_", fittingAlgorithm_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/LeastSquaresMethod.cxx000066400000000000000000000121011307543307100230100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LeastSquares solving algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LeastSquaresMethod.hxx" #include "openturns/LeastSquaresMethodImplementation.hxx" #include "openturns/SVDMethod.hxx" #include "openturns/CholeskyMethod.hxx" #include "openturns/QRMethod.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LeastSquaresMethod); /* Default constructor */ LeastSquaresMethod::LeastSquaresMethod() : TypedInterfaceObject() { // Nothing to do } /* Parameters constructor */ LeastSquaresMethod::LeastSquaresMethod (const DesignProxy & proxy, const Point & weight, const Indices & indices) : TypedInterfaceObject(new SVDMethod(proxy, weight, indices)) { // Nothing to do } /* Parameters constructor */ LeastSquaresMethod::LeastSquaresMethod (const DesignProxy & proxy, const Indices & indices) : TypedInterfaceObject(new SVDMethod(proxy, indices)) { // Nothing to do } /* Constructor from implementation */ LeastSquaresMethod::LeastSquaresMethod(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation */ LeastSquaresMethod::LeastSquaresMethod(const LeastSquaresMethodImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* String converter */ String LeastSquaresMethod::__repr__() const { return getImplementation()->__repr__(); } String LeastSquaresMethod::__str__(const String & offset) const { return getImplementation()->__str__(offset); } Point LeastSquaresMethod::solve(const Point & rhs) { return getImplementation()->solve(rhs); } Point LeastSquaresMethod::solveNormal(const Point & rhs) { return getImplementation()->solveNormal(rhs); } Point LeastSquaresMethod::getHDiag() const { return getImplementation()->getHDiag(); } Point LeastSquaresMethod::getGramInverseDiag() const { return getImplementation()->getGramInverseDiag(); } Scalar LeastSquaresMethod::getGramInverseTrace() const { return getImplementation()->getGramInverseTrace(); } void LeastSquaresMethod::update(const Indices& addedIndices, const Indices& conservedIndices, const Indices& removedIndices, const Bool row) { getImplementation()->update(addedIndices, conservedIndices, removedIndices, row); } Basis LeastSquaresMethod::buildCurrentBasis() const { return getImplementation()->buildCurrentBasis(); } Basis LeastSquaresMethod::getBasis() const { return getImplementation()->getBasis(); } Indices LeastSquaresMethod::getCurrentIndices() const { return getImplementation()->getCurrentIndices(); } Indices LeastSquaresMethod::getInitialIndices() const { return getImplementation()->getInitialIndices(); } Sample LeastSquaresMethod::getInputSample() const { return getImplementation()->getInputSample(); } Point LeastSquaresMethod::getWeight() const { return getImplementation()->getWeight(); } Matrix LeastSquaresMethod::computeWeightedDesign(bool whole) const { return getImplementation()->computeWeightedDesign(whole); } LeastSquaresMethod LeastSquaresMethod::Build(const String name, const DesignProxy & proxy, const Point & weight, const Indices & indices) { if (name == "SVD") return SVDMethod(proxy, weight, indices); else if (name == "Cholesky") return CholeskyMethod(proxy, weight, indices); else if (name == "QR") return QRMethod(proxy, weight, indices); else throw InvalidArgumentException(HERE) << "Error: invalid value for decomposition method: " << name; return LeastSquaresMethod(); } LeastSquaresMethod LeastSquaresMethod::Build(const String name, const DesignProxy & proxy, const Indices & indices) { if (name == "SVD") return SVDMethod(proxy, indices); else if (name == "Cholesky") return CholeskyMethod(proxy, indices); else if (name == "QR") return QRMethod(proxy, indices); else throw InvalidArgumentException(HERE) << "Error: invalid value for decomposition method: " << name; return LeastSquaresMethod(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/LeastSquaresMethodImplementation.cxx000066400000000000000000000204361307543307100257300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LeastSquares solving algorithm implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LeastSquaresMethodImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LeastSquaresMethodImplementation); static const Factory Factory_LeastSquaresMethodImplementation; /* Default constructor */ LeastSquaresMethodImplementation::LeastSquaresMethodImplementation() : PersistentObject() { // Nothing to do } /* Parameters constructor */ LeastSquaresMethodImplementation::LeastSquaresMethodImplementation(const DesignProxy & proxy, const Point & weight, const Indices & indices) : PersistentObject() , proxy_(proxy) , weight_(0) , weightSqrt_(0) , hasUniformWeight_(false) , currentIndices_(indices) , initialIndices_(indices) { const UnsignedInteger size = proxy.getInputSample().getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: expected a non-empty output sample"; // Check the argument compatibility if (proxy.getSampleSize() != size) throw InvalidArgumentException(HERE) << "Error: the size of the output sample=" << size << " is different from the size of the input sample=" << proxy.getSampleSize(); if (weight.getSize() != size) throw InvalidArgumentException(HERE) << "Error: the size of the output sample=" << size << " is different from the size of the weight=" << weight.getSize(); // Check the weight uniformity setWeight(weight); } /* Parameters constructor */ LeastSquaresMethodImplementation::LeastSquaresMethodImplementation(const DesignProxy & proxy, const Indices & indices) : PersistentObject() , proxy_(proxy) , weight_(1, 1.0) , weightSqrt_(1, 1.0) , hasUniformWeight_(true) , currentIndices_(indices) , initialIndices_(indices) { // const UnsignedInteger size = proxy.getInputSample().getSize(); // if (size == 0) throw InvalidArgumentException(HERE) << "Error: expected a non-empty output sample"; } /* Weight accessor */ void LeastSquaresMethodImplementation::setWeight(const Point & weight) { const UnsignedInteger size = weight.getSize(); // First, check for uniformity const Scalar w0 = weight[0]; if (!(w0 > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected positive weights, here w[0]=" << w0; hasUniformWeight_ = true; for (UnsignedInteger i = 1; i < size; ++i) if (weight[i] != w0) { hasUniformWeight_ = false; break; } if (hasUniformWeight_) { weight_ = Point(1, w0); weightSqrt_ = Point(1, std::sqrt(w0)); return; } // Second, check for positiveness and compute the square roots weight_ = weight; weightSqrt_ = Point(size); for (UnsignedInteger i = 0; i < size; ++i) { if (!(weight[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected positive weights, here w[" << i << "]=" << weight[i]; weightSqrt_[i] = std::sqrt(weight[i]); } } Point LeastSquaresMethodImplementation::getWeight() const { return weight_; } /* Virtual constructor */ LeastSquaresMethodImplementation * LeastSquaresMethodImplementation::clone() const { return new LeastSquaresMethodImplementation(*this); } Point LeastSquaresMethodImplementation::solve(const Point & rhs) { throw NotYetImplementedException(HERE) << " in LeastSquaresMethodImplementation::solve"; } Point LeastSquaresMethodImplementation::solveNormal(const Point & rhs) { throw NotYetImplementedException(HERE) << " in LeastSquaresMethodImplementation::solveNormal"; } CovarianceMatrix LeastSquaresMethodImplementation::getGramInverse() const { throw NotYetImplementedException(HERE) << " in LeastSquaresMethodImplementation::getGramInverse"; } SymmetricMatrix LeastSquaresMethodImplementation::getH() const { MatrixImplementation psiAk(computeWeightedDesign()); // H = Psi.G.Psi^T return getGramInverse().getImplementation()->symProd(psiAk, 'R').genProd(psiAk, false, true); } Point LeastSquaresMethodImplementation::getHDiag() const { const SymmetricMatrix H(getH()); const UnsignedInteger dimension = H.getDimension(); Point diag(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) diag[i] = H(i, i); return diag; } Point LeastSquaresMethodImplementation::getGramInverseDiag() const { const CovarianceMatrix G(getGramInverse()); const UnsignedInteger dimension = G.getDimension(); Point diag(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) diag[i] = G(i, i); return diag; } Scalar LeastSquaresMethodImplementation::getGramInverseTrace() const { // subclasses better override this return getGramInverse().getImplementation()->computeTrace(); } /* String converter */ String LeastSquaresMethodImplementation::__repr__() const { return OSS() << "class=" << GetClassName() << ", proxy=" << proxy_ << ", weight=" << weight_ << ", weightSqrt=" << weightSqrt_ << ", hasUniformWeight=" << hasUniformWeight_ << ", currentIndices=" << currentIndices_ << ", initialIndices=" << initialIndices_; } Basis LeastSquaresMethodImplementation::getBasis() const { return proxy_.getBasis(); } Indices LeastSquaresMethodImplementation::getCurrentIndices() const { return currentIndices_; } Indices LeastSquaresMethodImplementation::getInitialIndices() const { return initialIndices_; } Sample LeastSquaresMethodImplementation::getInputSample() const { return proxy_.getInputSample(); } MatrixImplementation LeastSquaresMethodImplementation::computeWeightedDesign(const Bool whole) const { if (whole) return computeWeightedDesign(initialIndices_); return computeWeightedDesign(currentIndices_); } MatrixImplementation LeastSquaresMethodImplementation::computeWeightedDesign(const Indices & indices) const { MatrixImplementation design(proxy_.computeDesign(indices)); if (hasUniformWeight_) return design; // Here we take the weights into account UnsignedInteger flatIndex = 0; const UnsignedInteger basisDimension = design.getNbColumns(); const UnsignedInteger sampleSize = design.getNbRows(); for (UnsignedInteger j = 0; j < basisDimension; ++j) for (UnsignedInteger i = 0; i < sampleSize; ++i) { design[flatIndex] *= weightSqrt_[i]; ++flatIndex; } return design; } Basis LeastSquaresMethodImplementation::buildCurrentBasis() const { const UnsignedInteger currentBasisSize = currentIndices_.getSize(); const Basis fullBasis(proxy_.getBasis()); Basis basis(currentBasisSize); for (UnsignedInteger j = 0; j < currentBasisSize; ++j) basis[j] = fullBasis[currentIndices_[j]]; return basis; } // Update the decomposition and the by-products when the given indices // are added and removed from the current indices. // We always must have conservedIndices + removedIndices == currentIndices void LeastSquaresMethodImplementation::update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row) { if ((addedIndices.getSize() > 0) || (removedIndices.getSize() > 0)) { trashDecomposition(); currentIndices_ = conservedIndices; currentIndices_.add(addedIndices); } } /* Destroy the internal decomposition of the design matrix */ void LeastSquaresMethodImplementation::trashDecomposition() { throw NotYetImplementedException(HERE); } /* Method save() stores the object through the StorageManager */ void LeastSquaresMethodImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void LeastSquaresMethodImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/PenalizedLeastSquaresAlgorithm.cxx000066400000000000000000000262031307543307100253620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This Penalized Least Squares Algorithm as a functor class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PenalizedLeastSquaresAlgorithm); static const Factory Factory_PenalizedLeastSquaresAlgorithm; /* Default constructor */ PenalizedLeastSquaresAlgorithm::PenalizedLeastSquaresAlgorithm(const Bool useNormal) : ApproximationAlgorithmImplementation() , useNormal_(useNormal) { // Nothing to do } /* Parameters constructor */ PenalizedLeastSquaresAlgorithm::PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices, const Scalar penalizationFactor, const Bool useNormal) : ApproximationAlgorithmImplementation( x, y, psi, indices ) , penalizationFactor_(penalizationFactor) , penalizationMatrix_(0) , useNormal_(useNormal) { // If the penalization factor is strictly positive, use the identity matrix as a penalization term if (penalizationFactor > 0.0) { const UnsignedInteger basisSize = indices.getSize(); penalizationMatrix_ = IdentityMatrix(basisSize); } } /* Parameters constructor */ PenalizedLeastSquaresAlgorithm::PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const Scalar penalizationFactor, const Bool useNormal) : ApproximationAlgorithmImplementation( x, y, weight, psi, indices ) , penalizationFactor_(penalizationFactor) , penalizationMatrix_(0) , useNormal_(useNormal) { // If the penalization factor is strictly positive, use the identity matrix as a penalization term if (penalizationFactor > 0.0) { const UnsignedInteger basisSize = indices.getSize(); penalizationMatrix_ = IdentityMatrix(basisSize); } } /* Parameters constructor */ PenalizedLeastSquaresAlgorithm::PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const Scalar penalizationFactor, const CovarianceMatrix & penalizationMatrix, const Bool useNormal) : ApproximationAlgorithmImplementation( x, y, weight, psi, indices ) , penalizationFactor_(penalizationFactor) , penalizationMatrix_(penalizationMatrix) , useNormal_(useNormal) { const UnsignedInteger basisSize = indices.getSize(); // Check if the penalization matrix has the proper dimension if (penalizationMatrix_.getDimension() != basisSize) throw InvalidArgumentException(HERE) << "Error: the given penalization matrix has an improper dimension."; // Must const_cast here because the isPositiveDefinite() method is not const in // the general case, but no modification will occur here. if (!const_cast(&penalizationMatrix)->isPositiveDefinite()) throw NotSymmetricDefinitePositiveException(HERE) << "Error: the given penalization matrix is not strictly definite positive."; } void PenalizedLeastSquaresAlgorithm::run() { ApproximationAlgorithmImplementation::run(); } /* Perform the optimization */ void PenalizedLeastSquaresAlgorithm::run(const DesignProxy & proxy) { const UnsignedInteger basisDimension = currentIndices_.getSize(); const UnsignedInteger sampleSize = x_.getSize(); // Here we use directly a MatrixImplementation in order to have access to // the flat indexing of the data MatrixImplementation basisMatrix; Point rightHandSide; // We have four cases: // + no penalization and uniform weights // + no penalization and non-uniform weights // + penalization and uniform weights // + penalization and non-uniform weights // The penalization affects the size of the matrix and the right-hand side // The non-uniform weights impose additional computations // Starting from here, we build the matrix and the left-hand side of the least-squares problem // First, the most usual case: no penalization if (penalizationFactor_ == 0.0) { // First, get the data as if the weights were uniform basisMatrix = proxy.computeDesign(currentIndices_); rightHandSide = y_.getImplementation()->getData(); // If the weights are not uniform some additional work is needed if (!hasUniformWeight_) { // Now we take the weights into account. It is better to access the matrix in a column-wise fashion, so we precompute the square-roots of the weights as they act on a row-wise fashion on the design matrix. We scale the right-hand side in the same loop. Point weightSqrt(sampleSize); for (UnsignedInteger i = 0; i < sampleSize; ++i) { weightSqrt[i] = std::sqrt(weight_[i]); rightHandSide[i] *= weightSqrt[i]; } // Update the design matrix UnsignedInteger flatIndex = 0; for (UnsignedInteger j = 0; j < basisDimension; ++j) for (UnsignedInteger i = 0; i < sampleSize; ++i) { basisMatrix[flatIndex] *= weightSqrt[i]; ++flatIndex; } } // (!hasUniformWeight_) } // (penalizationFactor_ == 0.0) else // (penalizationFactor_ > 0.0) { // Here we have a more complex situation: the penalized least-squares problem is reduced to a classical one by extending the matrix // First, get the data as if the weights were uniform const UnsignedInteger newNbRows = sampleSize + basisDimension; basisMatrix = MatrixImplementation(newNbRows, basisDimension); const MatrixImplementation Phi(proxy.computeDesign(currentIndices_)); rightHandSide = y_.getImplementation()->getData(); rightHandSide.resize(newNbRows); // Extend the right-hand side with zeros std::fill(rightHandSide.begin() + sampleSize, rightHandSide.end(), 0.0); // Fill the upper part of the basisMatrix with the design matrix MatrixImplementation::const_iterator startPhi(Phi.begin()); MatrixImplementation::iterator startBasisMatrix(basisMatrix.begin()); for (UnsignedInteger j = 0; j < basisDimension; ++j) { MatrixImplementation::const_iterator stopPhi(startPhi + sampleSize); std::copy(startPhi, stopPhi, startBasisMatrix); startPhi = stopPhi; startBasisMatrix += newNbRows; } const TriangularMatrix penalizationCholesky(penalizationMatrix_.computeCholesky()); // If the weights are uniform, they are taken into account by a change in the penalization factor if (hasUniformWeight_) { const Scalar rho = std::sqrt(penalizationFactor_ / weight_[0]); for (UnsignedInteger i = 0; i < basisDimension; ++i) { // The cholesky factor has to be transposed, thus we fill only the upper triangular part of the trailing block for (UnsignedInteger j = i; j < basisDimension; ++j) basisMatrix(sampleSize + i, j) = penalizationCholesky(j, i) * rho; } } // (hasUniformWeight_) else { const Scalar rho = std::sqrt(penalizationFactor_); // Here the upper part of the matrix and the right-hand side have to be changed to take into account the weights, the lower part to take into account the regularization Point weightSqrt(sampleSize); for (UnsignedInteger i = 0; i < sampleSize; ++i) { weightSqrt[i] = std::sqrt(weight_[i]); rightHandSide[i] *= weightSqrt[i]; } // Update the design matrix UnsignedInteger flatIndex = 0; for (UnsignedInteger j = 0; j < basisDimension; ++j) { for (UnsignedInteger i = 0; i < sampleSize; ++i) { basisMatrix[flatIndex] *= weightSqrt[i]; ++flatIndex; } for (UnsignedInteger i = 0; i <= j; ++i) basisMatrix(sampleSize + i, j) = penalizationCholesky(j, i) * rho; flatIndex += basisDimension; } } // !hasUniformWeight_ } // penalizationFactor_ > 0.0 // Solve the linear system (least squares solution) // If we can use the normal equation (fastest method, not very stable) Bool isSolved = false; // The normal matrix will be singular if not enough rows if (useNormal_ && (basisMatrix.getNbRows() >= basisMatrix.getNbColumns())) { try { LOGINFO("In PenalizedLeastSquaresAlgorithm::run(), use normal equation"); CovarianceMatrix normalMatrix(basisMatrix.computeGram(true)); setCoefficients(normalMatrix.solveLinearSystem(basisMatrix.genVectProd(rightHandSide, true), false)); isSolved = true; } catch (NotDefinedException & ex) { LOGINFO(OSS() << ex); isSolved = false; } } // Use normal equation // Use the QR decomposition, slowest but more stable and able to deal with singular cases if (!(useNormal_ && isSolved)) { LOGINFO("In PenalizedLeastSquaresAlgorithm::run(), use QR decomposition"); setCoefficients(basisMatrix.solveLinearSystemRect(rightHandSide)); } Scalar quadraticResidual = (basisMatrix.genVectProd(getCoefficients()) - rightHandSide).normSquare(); if (hasUniformWeight_) quadraticResidual *= weight_[0]; // The residual is the mean L2 norm of the fitting setResidual(std::sqrt(quadraticResidual) / sampleSize); const Scalar empiricalError = quadraticResidual / sampleSize; // The relative error setRelativeError(empiricalError / y_.computeVariance()[0]); } /* Virtual constructor */ PenalizedLeastSquaresAlgorithm * PenalizedLeastSquaresAlgorithm::clone() const { return new PenalizedLeastSquaresAlgorithm(*this); } /* String converter */ String PenalizedLeastSquaresAlgorithm::__repr__() const { return OSS() << "class=" << getClassName() << ApproximationAlgorithmImplementation::__repr__() << " penalization factor=" << penalizationFactor_ << " penalization matrix=" << penalizationMatrix_; } /* Method save() stores the object through the StorageManager */ void PenalizedLeastSquaresAlgorithm::save(Advocate & adv) const { ApproximationAlgorithmImplementation::save(adv); adv.saveAttribute( "penalizationFactor_", penalizationFactor_ ); adv.saveAttribute( "penalizationMatrix_", penalizationMatrix_ ); } /* Method load() reloads the object from the StorageManager */ void PenalizedLeastSquaresAlgorithm::load(Advocate & adv) { ApproximationAlgorithmImplementation::load(adv); adv.loadAttribute( "penalizationFactor_", penalizationFactor_ ); adv.loadAttribute( "penalizationMatrix_", penalizationMatrix_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/PenalizedLeastSquaresAlgorithmFactory.cxx000066400000000000000000000047351307543307100267200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building PenalizedLeastSquaresAlgorithm objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/PenalizedLeastSquaresAlgorithmFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PenalizedLeastSquaresAlgorithmFactory); static const Factory Factory_PenalizedLeastSquaresAlgorithmFactory; /* Default constructor */ PenalizedLeastSquaresAlgorithmFactory::PenalizedLeastSquaresAlgorithmFactory(const Bool useNormal) : ApproximationAlgorithmImplementationFactory() , useNormal_(useNormal) { // Nothing to do } /* Virtual constructor */ PenalizedLeastSquaresAlgorithmFactory * PenalizedLeastSquaresAlgorithmFactory::clone() const { return new PenalizedLeastSquaresAlgorithmFactory(*this); } /* String converter */ String PenalizedLeastSquaresAlgorithmFactory::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Method to create new PenalizedLeastSquaresAlgorithm objects */ PenalizedLeastSquaresAlgorithm * PenalizedLeastSquaresAlgorithmFactory::build(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const { const PenalizedLeastSquaresAlgorithm algo( x, y, weight, psi, indices, false, useNormal_ ); return algo.clone(); } /* Method save() stores the object through the StorageManager */ void PenalizedLeastSquaresAlgorithmFactory::save(Advocate & adv) const { ApproximationAlgorithmImplementationFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void PenalizedLeastSquaresAlgorithmFactory::load(Advocate & adv) { ApproximationAlgorithmImplementationFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/QRMethod.cxx000066400000000000000000000153401307543307100207260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief QR-decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/QRMethod.hxx" #include "openturns/TriangularMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QRMethod); static const Factory Factory_QRMethod; /* Default constructor */ QRMethod::QRMethod() : LeastSquaresMethodImplementation() { // Nothing to do } /* Parameters constructor */ QRMethod::QRMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices) : LeastSquaresMethodImplementation(proxy, weight, indices) { // Nothing to do } /* Parameters constructor */ QRMethod::QRMethod(const DesignProxy & proxy, const Indices & indices) : LeastSquaresMethodImplementation(proxy, indices) { // Nothing to do } /* Virtual constructor */ QRMethod * QRMethod::clone() const { return new QRMethod( *this ); } /* String converter */ String QRMethod::__repr__() const { return OSS() << "class=" << GetClassName(); } void QRMethod::update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row) { // Update the SVD according to the row/column modifications of the design matrix. // It should be done in an incremental way to improve speed // If something has changed since last call if ((addedIndices.getSize() > 0) || (removedIndices.getSize() > 0) || (conservedIndices != currentIndices_) || (q_.getNbColumns() == 0)) { // If it is a row modification, update the row filter if (row) { Matrix psiAk(computeWeightedDesign()); const UnsignedInteger m = psiAk.getNbRows(); const UnsignedInteger n = psiAk.getNbColumns(); q_ = psiAk.computeQR(r_, m < n, false); } // row modification else { currentIndices_ = conservedIndices; currentIndices_.add(addedIndices); Matrix psiAk(computeWeightedDesign()); const UnsignedInteger m = psiAk.getNbRows(); const UnsignedInteger n = psiAk.getNbColumns(); q_ = psiAk.computeQR(r_, m < n, false); } // column modification } // Something has changed } /* Solve least-squares problem */ Point QRMethod::solve(const Point & rhs) { // This call insures that the decomposition has already been computed. // No cost if it is up to date. update(Indices(0), currentIndices_, Indices(0)); Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weightSqrt_[i]; } const Point c(q_.getImplementation()->genVectProd(b, true)); const Point coefficients(r_.getImplementation()->solveLinearSystemTri(c, true, false, false)); // rhs, keep, lower, transpose return coefficients; } Point QRMethod::solveNormal(const Point & rhs) { // G=R^T*R // This call insures that the decomposition has already been computed. // No cost if it is up to date. update(Indices(0), currentIndices_, Indices(0)); Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weight_[i]; } const Point c(r_.getImplementation()->solveLinearSystemTri(b, true, false, true)); // rhs, keep, lower, transpose const Point coefficients(r_.getImplementation()->solveLinearSystemTri(c, true, false, false)); // rhs, keep, lower, transpose return coefficients; } Point QRMethod::getHDiag() const { const UnsignedInteger dimension = q_.getNbRows(); const UnsignedInteger basisSize = currentIndices_.getSize(); Point diag(dimension); MatrixImplementation::const_iterator q_iterator(q_.getImplementation()->begin()); for (UnsignedInteger j = 0; j < basisSize; ++ j) { for (MatrixImplementation::iterator diag_iterator = diag.begin(); diag_iterator != diag.end(); ++ diag_iterator) { *diag_iterator += (*q_iterator) * (*q_iterator); ++ q_iterator; } } return diag; } CovarianceMatrix QRMethod::getGramInverse() const { // G^{-1}=R^-1*R*^-T const UnsignedInteger basisSize = currentIndices_.getSize(); const MatrixImplementation b(*IdentityMatrix(basisSize).getImplementation()); Matrix invR(r_.getImplementation()->solveLinearSystemTri(b, true, false)); return invR.computeGram(false); } Point QRMethod::getGramInverseDiag() const { // G^{-1}=R^-1*R*^-T const UnsignedInteger dimension = r_.getNbRows(); const UnsignedInteger basisSize = currentIndices_.getSize(); const MatrixImplementation b(*IdentityMatrix(dimension).getImplementation()); const MatrixImplementation invRT(r_.getImplementation()->solveLinearSystemTri(b, true, false, true)); Point diag(dimension); MatrixImplementation::const_iterator invRT_iterator(invRT.begin()); for (UnsignedInteger i = 0; i < dimension; ++ i) { Scalar value = 0.0; for (UnsignedInteger j = 0; j < basisSize; ++ j) { value += (*invRT_iterator) * (*invRT_iterator); ++ invRT_iterator; } diag[i] = value; } return diag; } Scalar QRMethod::getGramInverseTrace() const { // G^{-1}=R^-1*R*^-T const UnsignedInteger dimension = r_.getNbRows(); const MatrixImplementation b(*IdentityMatrix(dimension).getImplementation()); const MatrixImplementation invRT(r_.getImplementation()->solveLinearSystemTri(b, true, false, true)); Scalar traceInverse = 0.0; for (MatrixImplementation::const_iterator it = invRT.begin(); it != invRT.end(); ++it) { traceInverse += (*it) * (*it); } return traceInverse; } void QRMethod::trashDecomposition() { q_ = Matrix(); r_ = Matrix(); } /* Method save() stores the object through the StorageManager */ void QRMethod::save(Advocate & adv) const { LeastSquaresMethodImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void QRMethod::load(Advocate & adv) { LeastSquaresMethodImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/SVDMethod.cxx000066400000000000000000000155671307543307100210530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SVD-decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SVDMethod.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SVDMethod); static const Factory Factory_SVDMethod; /* Default constructor */ SVDMethod::SVDMethod() : LeastSquaresMethodImplementation() { // Nothing to do } /* Default constructor */ SVDMethod::SVDMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices) : LeastSquaresMethodImplementation(proxy, weight, indices) { // Nothing to do } /* Default constructor */ SVDMethod::SVDMethod(const DesignProxy & proxy, const Indices & indices) : LeastSquaresMethodImplementation(proxy, indices) { // Nothing to do } /* Virtual constructor */ SVDMethod * SVDMethod::clone() const { return new SVDMethod( *this ); } /* String converter */ String SVDMethod::__repr__() const { return OSS() << "class=" << GetClassName(); } void SVDMethod::trashDecomposition() { singularValues_.clear(); u_ = Matrix(); vT_ = SquareMatrix(); } void SVDMethod::update(const Indices& addedIndices, const Indices& conservedIndices, const Indices& removedIndices, const Bool row) { // Update the SVD according to the row/column modifications of the design matrix. // It should be done in an incremental way to improve speed // If something has changed since last call if ((addedIndices.getSize() > 0) || (removedIndices.getSize() > 0) || (conservedIndices != currentIndices_) || (singularValues_.getSize() == 0)) { // If it is a row modification, update the row filter if (!row) { currentIndices_ = conservedIndices; currentIndices_.add(addedIndices); } // column modification Matrix psiAk(computeWeightedDesign()); singularValues_ = psiAk.computeSVD(u_, vT_, false, false); // check eigen values const UnsignedInteger svdSize = singularValues_.getSize(); for (UnsignedInteger i = 0; i < svdSize; ++ i) if (!(singularValues_[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: null eigen value in svd decomposition"; } // Something has changed } Point SVDMethod::solve(const Point & rhs) { // This call insures that the decomposition has already been computed. // No cost if it is up to date. update(Indices(0), currentIndices_, Indices(0)); // To take into account possible under-determined least-squares problems // We consider the number of singular values instead of the basis size // It leads to the minimal norm solution in the under-determined case const UnsignedInteger svdSize = singularValues_.getSize(); // First step Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weightSqrt_[i]; } const Point c(u_.getImplementation()->genVectProd(b, true)); // Second step Point d(svdSize); for (UnsignedInteger i = 0; i < svdSize; ++i) d[i] = c[i] / singularValues_[i]; // Third step const Point coefficients(vT_.getImplementation()->genVectProd(d, true)); return coefficients; } Point SVDMethod::solveNormal(const Point & rhs) { update(Indices(0), currentIndices_, Indices(0)); const UnsignedInteger basisSize = currentIndices_.getSize(); Point b(rhs); if (!hasUniformWeight_) { const UnsignedInteger size = rhs.getSize(); for (UnsignedInteger i = 0; i < size; ++i) b[i] *= weight_[i]; } // G^-1= V*S^-2*V^T Point coefficients(vT_ * b); for (UnsignedInteger i = 0; i < basisSize; ++i) { const Scalar sv = singularValues_[i]; coefficients[i] /= (sv * sv); } return vT_.getImplementation()->genVectProd(coefficients, true); } CovarianceMatrix SVDMethod::getGramInverse() const { // G^{-1}=V\Sigma^{-2}V^T const UnsignedInteger m = vT_.getNbRows(); const UnsignedInteger n = vT_.getNbColumns(); const MatrixImplementation & vTimpl(*vT_.getImplementation()); MatrixImplementation sigmaInvVt(m, n); UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < n; ++j) for (UnsignedInteger i = 0; i < m; ++i) { sigmaInvVt[index] = (1.0 / singularValues_[i]) * vTimpl[index]; ++ index; } return sigmaInvVt.computeGram(); } Scalar SVDMethod::getGramInverseTrace() const { Scalar traceInverse = 0.0; for (UnsignedInteger k = 0; k < singularValues_.getDimension(); ++ k) { traceInverse += 1.0 / singularValues_[k] / singularValues_[k]; } return traceInverse; } Point SVDMethod::getHDiag() const { const UnsignedInteger sampleSize = u_.getNbRows(); const UnsignedInteger basisSize = currentIndices_.getSize(); Point h(sampleSize); // matrices are stored by columns MatrixImplementation::const_iterator u_iterator(u_.getImplementation()->begin()); for (UnsignedInteger j = 0; j < basisSize; ++ j) { for (MatrixImplementation::iterator h_iterator = h.begin(); h_iterator != h.end(); ++ h_iterator) { *h_iterator += (*u_iterator) * (*u_iterator); ++ u_iterator; } } return h; } Point SVDMethod::getGramInverseDiag() const { // G^{-1}=V\Sigma^{-2}V^T const UnsignedInteger m = vT_.getNbRows(); const UnsignedInteger n = vT_.getNbColumns(); const MatrixImplementation & vTimpl(*vT_.getImplementation()); UnsignedInteger index = 0; const UnsignedInteger svdSize = singularValues_.getSize(); Point diag(n); for (UnsignedInteger j = 0; j < n; ++j) { Scalar diag_value = 0.0; for (UnsignedInteger i = 0; i < svdSize; ++i) { const Scalar val = vTimpl[index] / singularValues_[i]; diag_value += val * val; ++ index; } diag[j] = diag_value; index += (m - svdSize); } return diag; } /* Method save() stores the object through the StorageManager */ void SVDMethod::save(Advocate & adv) const { LeastSquaresMethodImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void SVDMethod::load(Advocate & adv) { LeastSquaresMethodImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Algo/SparseMethod.cxx000066400000000000000000000137621307543307100216470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Sparse approximation LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SparseMethod.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SparseMethod); static const Factory Factory_SparseMethod; /* Default constructor */ SparseMethod::SparseMethod() : LeastSquaresMethodImplementation() { // Nothing to do } /* Parameters constructor */ SparseMethod::SparseMethod(const LeastSquaresMethod & method, const BasisSequenceFactory & basisSequenceFactory, const FittingAlgorithm & fittingAlgorithm) : LeastSquaresMethodImplementation(DesignProxy(), method.getCurrentIndices()) , method_(method) , basisSequenceFactory_(basisSequenceFactory) , fittingAlgorithm_(fittingAlgorithm) { // Nothing to do } /* Virtual constructor */ SparseMethod * SparseMethod::clone() const { return new SparseMethod( *this ); } /* String converter */ String SparseMethod::__repr__() const { return OSS() << "class=" << GetClassName(); } void SparseMethod::update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row) { method_.update(addedIndices, conservedIndices, removedIndices, row); } /* Solve least-squares problem */ Point SparseMethod::solve(const Point & rhs) { // save state const Indices currentIndices(method_.getCurrentIndices()); // for each sub-basis ... Scalar minimumError = SpecFunc::MaxScalar; Indices optimalBasisIndices; UnsignedInteger iterations = 0; Sample rhsSample(rhs.getSize(), 1); rhsSample.getImplementation()->setData(rhs.getCollection()); basisSequenceFactory_.initialize(); basisSequenceFactory_.updateBasis(method_, rhsSample); // for each sub-basis ... const Scalar alpha = std::max(1.0, ResourceMap::GetAsScalar("SparseMethod-MaximumErrorFactor")); const Scalar errorThreshold = std::max(0.0, ResourceMap::GetAsScalar("SparseMethod-ErrorThreshold")); while ((basisSequenceFactory_.getImplementation()->addedPsi_k_ranks_.getSize() > 0) || (basisSequenceFactory_.getImplementation()->removedPsi_k_ranks_.getSize() > 0)) { // retrieve the i-th basis of the sequence const Scalar error = fittingAlgorithm_.run(method_, rhsSample); LOGINFO(OSS() << "\nsubbasis=" << iterations << ", size=" << basisSequenceFactory_.getImplementation()->currentIndices_.getSize() << ", error=" << error << ", qSquare=" << 1.0 - error); if (error < minimumError) { optimalBasisIndices = basisSequenceFactory_.getImplementation()->currentIndices_; minimumError = error; } else { if (error > alpha * minimumError) { LOGINFO(OSS() << "Error=" << error << " larger than " << alpha << "*" << minimumError << "=" << alpha * minimumError); break; } } if (minimumError < errorThreshold) { LOGINFO(OSS() << "Minimum error=" << minimumError << " smaller than threshold=" << errorThreshold); break; } basisSequenceFactory_.updateBasis(method_, rhsSample); ++ iterations; } //std::cout << "-- SparseMethod::solve optimalBasisIndices="< { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Constructor from implementation */ ApproximationAlgorithm(const ApproximationAlgorithmImplementation & implementation); /** Constructor from implementation */ ApproximationAlgorithm(const Implementation & p_implementation); /** Sample accessors */ Sample getX() const; Sample getY() const; /** Weights accessors */ Point getWeight() const; /** Basis accessor */ Basis getPsi() const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Perform approximation */ void run(); #ifndef SWIG void run(const DesignProxy & proxy); #endif /** Acccessor to the coefficients of the selected metamodel on the provided basis */ Point getCoefficients(); /** Acccessor to the residual of the selected metamodel on the provided basis */ Scalar getResidual(); /** Acccessor to the residual of the selected metamodel on the provided basis */ Scalar getRelativeError(); }; /* class ApproximationAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_APPROXIMATIONALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/ApproximationAlgorithmImplementation.hxx000066400000000000000000000075721307543307100307240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Regression from a data sample upon a particular basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/DesignProxy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ApproximationAlgorithmImplementation * * Regression from a data sample upon a particular basis */ class OT_API ApproximationAlgorithmImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ ApproximationAlgorithmImplementation(); /** Default constructor */ ApproximationAlgorithmImplementation(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices); /** Default constructor */ ApproximationAlgorithmImplementation(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices); /** Virtual constructor */ virtual ApproximationAlgorithmImplementation * clone() const; /** Sample accessors */ Sample getX() const; Sample getY() const; /** Weigths accessor */ protected: void setWeight(const Point & weight); public: Point getWeight() const; /** Basis accessor */ Basis getPsi() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Perform the selection */ virtual void run(); #ifndef SWIG virtual void run(const DesignProxy & proxy); #endif /** Accessor to the coefficients of the selected metamodel on the provided basis */ Point getCoefficients(); /** Accessor to the residual of the selected metamodel on the provided basis */ Scalar getResidual(); Scalar getRelativeError(); /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: void setCoefficients(const Point & coefficients); void setResidual(const Scalar residual); void setRelativeError(const Scalar relativeError); /** Input sample */ Sample x_; /** Output sample */ Sample y_; /** Weights */ Point weight_; /** Flag to tell if the weights are uniform */ Bool hasUniformWeight_; /** Basis */ Basis psi_; Indices currentIndices_; mutable Bool isAlreadyComputedCoefficients_; private: /** Regression coefficients */ Point coefficients_; /** Residual */ Scalar residual_; /** Relative error */ Scalar relativeError_; /** Verbosity flag */ Bool verbose_; }; /* class ApproximationAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/ApproximationAlgorithmImplementationFactory.hxx000066400000000000000000000050371307543307100322460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building ApproximationAlgorithmImplementation objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATIONFACTORY_HXX #define OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATIONFACTORY_HXX #include #include "openturns/ApproximationAlgorithmImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Basis.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ApproximationAlgorithmImplementationFactory * * A factory for building ApproximationAlgorithmImplementation objects */ class OT_API ApproximationAlgorithmImplementationFactory : public PersistentObject { CLASSNAME; public: /** Default constructor */ ApproximationAlgorithmImplementationFactory(); /** Virtual constructor */ virtual ApproximationAlgorithmImplementationFactory * clone() const; /** Method to create new ApproximationAlgorithmImplementation objects */ virtual ApproximationAlgorithmImplementation * build (const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) const; /** Method to create new ApproximationAlgorithmImplementation objects */ virtual ApproximationAlgorithmImplementation * build (const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); }; /* class ApproximationAlgorithmImplementationFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_APPROXIMATIONALGORITHMIMPLEMENTATIONFACTORY_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/CholeskyMethod.hxx000066400000000000000000000050111307543307100242210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cholesky decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHOLESKYMETHOD_HXX #define OPENTURNS_CHOLESKYMETHOD_HXX #include "openturns/LeastSquaresMethodImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CholeskyMethod * * Cholesky decomposition based LS solver */ class OT_API CholeskyMethod : public LeastSquaresMethodImplementation { CLASSNAME; public: /** Default constructor */ CholeskyMethod(); /** Parameters constructor */ CholeskyMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices); /** Parameters constructor */ CholeskyMethod(const DesignProxy & proxy, const Indices & indices); /** Virtual constructor */ virtual CholeskyMethod * clone() const; /** String converter */ String __repr__() const; /** Solve least-squares problem, ie x=\argmin |Mx-b|^2 */ Point solve(const Point & rhs); Point solveNormal(const Point & rhs); /** Update */ void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); void trashDecomposition(); CovarianceMatrix getGramInverse() const; SymmetricMatrix getH() const; Point getGramInverseDiag() const; Point getHDiag() const; Scalar getGramInverseTrace() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: // cholesky decomposition A=LL^T (lower triangular) mutable TriangularMatrix l_; }; /* class CholeskyMethod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHOLESKYMETHOD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/Classifier.hxx000066400000000000000000000046771307543307100234040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Classification algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLASSIFIER_HXX #define OPENTURNS_CLASSIFIER_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Sample.hxx" #include "openturns/ClassifierImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Classifier * * Classification algorithm interface */ class OT_API Classifier : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Default constructor */ Classifier(); /** Constructor from implementation */ Classifier(const ClassifierImplementation & implementation); /** Constructor from implementation */ Classifier(const Implementation & p_implementation); /** Constructor from sample */ Classifier(const Sample & inS, const Indices & outC); /** Associate a point with a class */ UnsignedInteger classify(const Point & inP) const; Indices classify(const Sample & inS) const; /** Grade a point as if it were associated to a class */ Scalar grade(const Point & inP, UnsignedInteger outC) const; Point grade(const Sample & inS, const Indices & outC) const; /** Parallelization flag accessor */ void setParallel(const Bool flag); Bool isParallel() const; /** Input space dimension */ UnsignedInteger getDimension() const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; }; /* class Classifier */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLASSIFIER_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/ClassifierImplementation.hxx000066400000000000000000000062711307543307100263020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Classification algorithm base type * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLASSIFIERIMPLEMENTATION_HXX #define OPENTURNS_CLASSIFIERIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ClassifierImplementation * * Classification algorithm base type */ class OT_API ClassifierImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ ClassifierImplementation(); /** Default constructor */ ClassifierImplementation(const Sample & inputSample, const Indices & outClasses); /** Virtual constructor */ virtual ClassifierImplementation * clone() const; /** Associate a point with a class */ virtual UnsignedInteger classify(const Point & inP) const; virtual Indices classify(const Sample & inS) const; protected: virtual Indices classifyParallel(const Sample & inS) const; virtual Indices classifySequential(const Sample & inS) const; public: /** Grade a point as if it were associated to a class */ virtual Scalar grade(const Point & inP, const UnsignedInteger outC) const; virtual Point grade(const Sample & inS, const Indices & outC) const; protected: virtual Point gradeParallel(const Sample & inS, const Indices & outC) const; virtual Point gradeSequential(const Sample & inS, const Indices & outC) const; public: /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Input space dimension */ virtual UnsignedInteger getDimension() const; /** Parallelization flag accessor */ void setParallel(const Bool flag); Bool isParallel() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Input sample */ Sample inputSample_; /** Output sample */ Indices classes_; private: /** Verbosity flag */ Bool verbose_; /** Flag to tell if parallelization must be used */ Bool isParallel_; }; /* class ClassifierImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLASSIFIERIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/CorrectedLeaveOneOut.hxx000066400000000000000000000043721307543307100253310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Corrected implicit leave-one-out cross validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CORRECTEDLEAVEONEOUT_HXX #define OPENTURNS_CORRECTEDLEAVEONEOUT_HXX #include "openturns/FittingAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CorrectedLeaveOneOut * * Corrected implicit leave-one-out cross validation */ class OT_API CorrectedLeaveOneOut : public FittingAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ CorrectedLeaveOneOut(); /** Virtual constructor */ virtual CorrectedLeaveOneOut * clone() const; /** String converter */ virtual String __repr__() const; /** Perform cross-validation */ virtual Scalar run(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; #ifndef SWIG virtual Scalar run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const; virtual Scalar run(LeastSquaresMethod & method, const Sample & y) const; #endif /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); }; /* class CorrectedLeaveOneOut */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CORRECTEDLEAVEONEOUT_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/DesignProxy.hxx000066400000000000000000000050471307543307100235630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Design matrix cached evaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DESIGNPROXY_HXX #define OPENTURNS_DESIGNPROXY_HXX #include "openturns/Sample.hxx" #include "openturns/Basis.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DesignProxy * * Design matrix cached evaluation */ class OT_API DesignProxy : public Object { CLASSNAME; public: /** Default constructor */ DesignProxy(); /** Parameters constructor */ DesignProxy(const Sample & x, const Basis & basis); /** Virtual constructor */ virtual DesignProxy * clone() const; /** String converter */ virtual String __repr__() const; /** Accessors */ Sample getInputSample() const; Basis getBasis() const; /** Compute the design matrix with the provided basis terms indices */ MatrixImplementation computeDesign(const Indices & indices) const; /** Row filter accessor */ void setRowFilter(const Indices & rowFilter); Indices getRowFilter() const; /** Row filter flag accessor */ Bool hasRowFilter() const; /** Effective size of sample */ UnsignedInteger getSampleSize() const; /** Weight accessor */ void setWeight(const Point & weight); Point getWeight() const; /** Weight flag accessor */ Bool hasWeight() const; protected: void initialize() const; /** Input sample */ Sample x_; /** Basis */ Basis basis_; /** Design matrix cache */ mutable Matrix designCache_; /** Flags to tell if the column has already been computed */ mutable Indices alreadyComputed_; /** Filter on the rows of the design matrix */ Indices rowFilter_; /** Weight on each basis function */ Point weight_; }; /* class DesignProxy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DESIGNPROXY_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/FFT.hxx000066400000000000000000000161661307543307100217330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to launch an FFT transformation /inverse transformation * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FFT_HXX #define OPENTURNS_FFT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FFTImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FFT */ class OT_API FFT : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; typedef Collection ScalarCollection; typedef Collection ComplexCollection; /** Default onstructor */ FFT(); /** Copy constructors */ FFT(const FFTImplementation & implementation); /** Constructor from implementation */ FFT(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ FFT(FFTImplementation * p_implementation); #endif /** FFT transformation on real * Given the real sequence X_n, compute the sequence Z_k such that: * Z_k = \sum_{n=0}^{N-1} X_n\exp(-\frac{2i\pi kn}{N}) */ ComplexCollection transform(const ScalarCollection & collection) const; /** FFT transformation on real - The transformation is applied on a part of the collection*/ ComplexCollection transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT transformation on real with a regular sequence of the collection (between first and last, by step = step)*/ ComplexCollection transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT transformation on complex * Given the complex sequence Y_n, compute the sequence Z_k such that: * Z_k = \sum_{n=0}^{N-1} Y_n\exp(-\frac{2i\pi kn}{N}) */ ComplexCollection transform(const ComplexCollection & collection) const; /** FFT transformation on complex - For some FFT implementation, the transformation is applied on a part of the collection */ ComplexCollection transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT transformation on complex - For some FFT implementation, the need is to transform a regular sequence of the collection (between first and last, by step = step)*/ ComplexCollection transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT 2D transformation on real * Given the real sequence X_n, compute the sequence Z_k such that: * Z_{k,l} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1} X_{m,n}\exp(-\frac{2i\pi km}{M}) \exp(-\frac{2i\pi ln}{N}) */ ComplexMatrix transform2D(const ComplexMatrix & matrix) const; /** FFT 2D transformation on complex */ ComplexMatrix transform2D(const Matrix & matrix) const; /** FFT 2D transformation on complex */ ComplexMatrix transform2D(const Sample & sample) const; /** FFT 3D transformation * Given the real sequence X, compute the sequence Z such that: * Z_{k,l,r} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}\sum_{p=0}^{P-1} X_{m,n,p}\exp(-\frac{2i\pi km}{M}) \exp(-\frac{2i\pi ln}{N}) \exp(-\frac{2i\pi rp}{P}) */ ComplexTensor transform3D(const ComplexTensor & tensor) const; /** FFT 3D transformation on real data */ ComplexTensor transform3D(const Tensor & tensor) const; /** FFT inverse transformation * Given the complex sequence Z_n, compute the sequence Y_k such that: * Y_k = \frac{1}{N}\sum_{n=0}^{N-1} Z_n\exp(\frac{2i\pi kn}{N}) */ /** FFT inverse transformation */ ComplexCollection inverseTransform(const ScalarCollection & collection) const; /** FFT inverse transformation - The transformation is applied on a part of the collection */ ComplexCollection inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT inverse transformation on a regular sequence of the collection (between first and last, spearated by step)*/ ComplexCollection inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; ComplexCollection inverseTransform(const ComplexCollection & collection) const; /** FFT inverse transformation - The transformation is applied on a part of the collection */ ComplexCollection inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT inverse transformation on a regular sequence of the collection (between first and last, by step = step)*/ ComplexCollection inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT inverse transformation * Given the complex sequence Z_n, compute the sequence Y_k such that: * Y_{k,l} = \frac{1}{M.N}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1} Z_{m,n}\exp(\frac{2i\pi km}{M} \exp(\frac{2i\pi ln}{N}) */ ComplexMatrix inverseTransform2D(const ComplexMatrix & matrix) const; /** IFFT 2D transformation on real matrix */ ComplexMatrix inverseTransform2D(const Matrix & matrix) const; /** IFFT 2D transformation on sample */ ComplexMatrix inverseTransform2D(const Sample & sample) const; /** FFT inverse transformation * Given the complex sequence Z, compute the sequence Y such that: * Y_{k,l,r} = \frac{1}{M.N.P}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}\sum_{n=0}^{P-1} Z_{m,n,p}\exp(\frac{2i\pi km}{M} \exp(\frac{2i\pi ln}{N}) \exp(\frac{2i\pi rp}{P}) */ ComplexTensor inverseTransform3D(const ComplexTensor & tensor) const; /** IFFT 3D transformation on real tensors */ ComplexTensor inverseTransform3D(const Tensor & tensor) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; } ; /* class FFT */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FFT_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/FFTImplementation.hxx000066400000000000000000000133021307543307100246260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to launch an FFT transform/inverse transform * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FFTIMPLEMENTATION_HXX #define OPENTURNS_FFTIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Collection.hxx" #include "openturns/ComplexMatrix.hxx" #include "openturns/Matrix.hxx" #include "openturns/Sample.hxx" #include "openturns/ComplexTensor.hxx" #include "openturns/Tensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FFTImplementation */ class OT_API FFTImplementation : public PersistentObject { CLASSNAME; public: typedef Collection ScalarCollection; typedef Collection ComplexCollection; /** Default constructor without parameters */ FFTImplementation(); /** Virtual copy constructor */ virtual FFTImplementation * clone() const; /** FFT transformation on real */ virtual ComplexCollection transform(const ScalarCollection & collection) const; /** FFT transformation on real - The transformation is applied on a part of the collection*/ virtual ComplexCollection transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT transformation on real with a regular sequence of the collection (between first and last, by step = step)*/ virtual ComplexCollection transform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT transformation on complex */ virtual ComplexCollection transform(const ComplexCollection & collection) const; /** FFT transformation on complex - For some FFT implementation, the transformation is applied on a part of the collection */ virtual ComplexCollection transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT transformation on complex - For some FFT implementation, the need is to transform a regular sequence of the collection (between first and last, by step = step)*/ virtual ComplexCollection transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT inverse transformation */ virtual ComplexCollection inverseTransform(const ScalarCollection & collection) const; /** FFT inverse transformation - The transformation is applied on a part of the collection */ virtual ComplexCollection inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT inverse transformation on a regular sequence of the collection (between first and last, spearated by step)*/ virtual ComplexCollection inverseTransform(const ScalarCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT inverse transformation */ virtual ComplexCollection inverseTransform(const ComplexCollection & collection) const; /** FFT inverse transformation - The transformation is applied on a part of the collection */ virtual ComplexCollection inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT transformation on a regular sequence of the collection (between first and last, spearated by step)*/ virtual ComplexCollection inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger step, const UnsignedInteger last) const; /** FFT 2D transformation on complex */ virtual ComplexMatrix transform2D(const ComplexMatrix & complexMatrix) const; /** FFT 2D transformation on real matrix */ virtual ComplexMatrix transform2D(const Matrix & matrix) const; /** FFT 2D transformation on sample */ virtual ComplexMatrix transform2D(const Sample & sample) const; /** IFFT 2D transformation on complex */ virtual ComplexMatrix inverseTransform2D(const ComplexMatrix & complexMatrix) const; /** IFFT 2D transformation on real matrix */ virtual ComplexMatrix inverseTransform2D(const Matrix & matrix) const; /** IFFT 2D transformation on sample */ virtual ComplexMatrix inverseTransform2D(const Sample & sample) const; /** FFT 3D transformation */ virtual ComplexTensor transform3D(const ComplexTensor & tensor) const; /** FFT 3D transformation on real data */ virtual ComplexTensor transform3D(const Tensor & tensor) const; /** IFFT 3D transformation */ virtual ComplexTensor inverseTransform3D(const ComplexTensor & tensor) const; /** IFFT 3D transformation */ virtual ComplexTensor inverseTransform3D(const Tensor & tensor) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class FFTImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FFTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/FittingAlgorithm.hxx000066400000000000000000000045761307543307100245710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cross-validation algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FITTINGALGORITHM_HXX #define OPENTURNS_FITTINGALGORITHM_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FittingAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FittingAlgorithm * * Cross-validation algorithm interface */ class OT_API FittingAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Default constructor */ FittingAlgorithm(); /** Constructor from implementation */ FittingAlgorithm(const Implementation & p_implementation); /** Constructor from implementation */ FittingAlgorithm(const FittingAlgorithmImplementation & implementation); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Perform cross-validation */ Scalar run(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; Scalar run(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) const; #ifndef SWIG Scalar run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const; Scalar run(LeastSquaresMethod & method, const Sample & y) const; #endif }; /* class FittingAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FITTINGALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/FittingAlgorithmImplementation.hxx000066400000000000000000000053511307543307100274670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cross-validation algorithm implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FITTINGALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_FITTINGALGORITHMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/Basis.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/DesignProxy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FittingAlgorithmImplementation * * Cross-validation algorithm implementation */ class OT_API FittingAlgorithmImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ FittingAlgorithmImplementation(); /** Virtual constructor */ virtual FittingAlgorithmImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** Perform cross-validation */ virtual Scalar run(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; virtual Scalar run(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) const; #ifndef SWIG virtual Scalar run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const; virtual Scalar run(const Sample & y, const Indices & indices, const DesignProxy & proxy) const; virtual Scalar run(LeastSquaresMethod & method, const Sample & y) const; #endif /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); }; /* class FittingAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FITTINGALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/GaussKronrod.hxx000066400000000000000000000073671307543307100237400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class allows to compute integrals of a function over an interval * using GaussKronrod method for 1D scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAUSSKRONROD_HXX #define OPENTURNS_GAUSSKRONROD_HXX #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/GaussKronrodRule.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussKronrod */ class OT_API GaussKronrod : public IntegrationAlgorithmImplementation { CLASSNAME; public: /** Default constructor without parameters */ GaussKronrod(); /** Parameter constructor */ GaussKronrod(const UnsignedInteger maximumSubIntervals, const Scalar maximumError, const GaussKronrodRule & rule); /** Virtual copy constructor */ virtual GaussKronrod * clone() const; /** Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an 1D interval */ using IntegrationAlgorithmImplementation::integrate; #ifndef SWIG virtual Point integrate(const Function & function, const Interval & interval, Scalar & error) const; // This method allows to get the estimated integration error as a scalar virtual Point integrate(const Function & function, const Scalar a, const Scalar b, Scalar & error, Point & ai, Point & bi, Sample & fi, Point & ei) const; #endif // This method allows to get the estimated integration error as a Point, // needed by Python virtual Point integrate(const Function & function, const Scalar a, const Scalar b, Point & error, Point & ai, Point & bi, Sample & fi, Point & ei) const; /** Maximum sub-intervals accessor */ UnsignedInteger getMaximumSubIntervals() const; void setMaximumSubIntervals(const UnsignedInteger maximumSubIntervals); /** Maximum error accessor */ Scalar getMaximumError() const; void setMaximumError(const Scalar maximumError); /** Rule accessor */ GaussKronrodRule getRule() const; void setRule(const GaussKronrodRule & rule); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; private: /** Compute the local GaussKronrod rule over [a, b] */ Point computeRule(const Function & function, const Scalar a, const Scalar b, Scalar & localError) const; /* Maximum number of sub-intervals */ UnsignedInteger maximumSubIntervals_; /* Maximum estimated error */ Scalar maximumError_; /* Local integration rule */ GaussKronrodRule rule_; } ; /* class GaussKronrod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAUSSKRONROD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/GaussKronrodRule.hxx000066400000000000000000000053731307543307100245630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class defines embredded Gauss/Kronrod integration rules * used by the GaussKronrod integration method for 1D scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAUSSKRONRODRULE_HXX #define OPENTURNS_GAUSSKRONRODRULE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussKronrodRule */ class OT_API GaussKronrodRule : public PersistentObject { CLASSNAME; /** Default constructor without parameters */ GaussKronrodRule(); public: typedef enum {G1K3 = 0, G3K7 = 1, G7K15 = 2, G11K23 = 3, G15K31 = 4, G25K51 = 5} GaussKronrodPair; /** Parameter constructor */ GaussKronrodRule(const GaussKronrodPair pair); /** Virtual copy constructor */ virtual GaussKronrodRule * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Pair accessor */ GaussKronrodPair getPair() const; /** Order accessor */ UnsignedInteger getOrder() const; /** Zero Gauss weight accessor */ Scalar getZeroGaussWeight() const; /** Other Gauss weight accessor */ Point getOtherGaussWeights() const; /** Other Kronrod nodes accessor */ Point getOtherKronrodNodes() const; /** Zero Kronrod weight accessor */ Scalar getZeroKronrodWeight() const; /** Other Kronrod weight accessor */ Point getOtherKronrodWeights() const; private: friend class GaussKronrod; /** Pair of rules */ GaussKronrodPair pair_; /** Order of the rule */ UnsignedInteger order_; /** Gauss weight of node 0.0 */ Scalar zeroGaussWeight_; /** Gauss weights of the nonzero nodes */ Point otherGaussWeights_; /** Kronrod nodes */ Point otherKronrodNodes_; /** Kronrod weight of node 0.0 */ Scalar zeroKronrodWeight_; /** Kronrod weights of the nonzero nodes */ Point otherKronrodWeights_; } ; /* class GaussKronrodRule */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAUSSKRONRODRULE_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/GaussLegendre.hxx000066400000000000000000000050731307543307100240370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class allows to compute integrals of a function over an * interval. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAUSSLEGENDRE_HXX #define OPENTURNS_GAUSSLEGENDRE_HXX #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/IntegrationAlgorithm.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussLegendre */ class OT_API GaussLegendre : public IntegrationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ explicit GaussLegendre(const UnsignedInteger dimension = 1); /** Parameter constructor */ explicit GaussLegendre(const Indices & discretization); /** Virtual copy constructor */ virtual GaussLegendre * clone() const; /** Compute an approximation of \int_a^b f(x_1,\dots,x_n)dx_1\dotsdx_n, where [a,b] is an nD interval. */ using IntegrationAlgorithmImplementation::integrate; Point integrate(const Function & function, const Interval & interval) const; Point integrateWithNodes(const Function & function, const Interval & interval, Sample & adaptedNodes) const; /** Discretization accessor */ Indices getDiscretization() const; /** Nodes accessor */ Sample getNodes() const; /** Weights accessor */ Point getWeights() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; private: /* Generate nodes and weights */ void generateNodesAndWeights(); /* Discretization of the tensorized rule */ Indices discretization_; /* Integration nodes */ Sample nodes_; /* Integration weights */ Point weights_; } ; /* class GaussLegendre */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAUSSLEGENDRE_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/IntegrationAlgorithm.hxx000066400000000000000000000047701307543307100254440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to integrate a function over an interval * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTEGRATIONALGORITHM_HXX #define OPENTURNS_INTEGRATIONALGORITHM_HXX #include "openturns/PersistentObject.hxx" #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IntegrationAlgorithm */ class OT_API IntegrationAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default onstructor */ IntegrationAlgorithm(); /** Copy constructors */ IntegrationAlgorithm(const IntegrationAlgorithmImplementation & implementation); /** Constructor from implementation */ IntegrationAlgorithm(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ IntegrationAlgorithm(IntegrationAlgorithmImplementation * p_implementation); #endif /** Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an n-D interval */ Point integrate(const Function & function, const Interval & interval) const; #ifndef SWIG Point integrate(const Function & function, const Interval & interval, Scalar & error) const; #endif Point integrate(const Function & function, const Interval & interval, Point & error) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; } ; /* class IntegrationAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTEGRATIONALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/IntegrationAlgorithmImplementation.hxx000066400000000000000000000043741307543307100303520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class allows to compute integrals of a function over an interval * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTEGRATIONALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_INTEGRATIONALGORITHMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Function.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IntegrationAlgorithmImplementation */ class OT_API IntegrationAlgorithmImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor without parameters */ IntegrationAlgorithmImplementation(); /** Virtual copy constructor */ virtual IntegrationAlgorithmImplementation * clone() const; /** Compute an approximation of \int_{[a,b]}f(x)dx, where [a,b] * is an n-D interval */ virtual Point integrate(const Function & function, const Interval & interval) const; #ifndef SWIG virtual Point integrate(const Function & function, const Interval & interval, Scalar & error) const; #endif virtual Point integrate(const Function & function, const Interval & interval, Point & error) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class IntegrationAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTEGRATIONALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/IteratedQuadrature.hxx000066400000000000000000000151541307543307100251070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class allows to compute integrals of a function over a * domain defined by functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ITERATEDQUADRATURE_HXX #define OPENTURNS_ITERATEDQUADRATURE_HXX #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/IntegrationAlgorithm.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ParametricFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IteratedQuadrature */ class OT_API IteratedQuadrature : public IntegrationAlgorithmImplementation { CLASSNAME; public: typedef Collection< Function > FunctionCollection; /** Default constructor without parameters */ IteratedQuadrature(); /** Parameter constructor */ IteratedQuadrature(const IntegrationAlgorithm & algorithm); /** Virtual copy constructor */ virtual IteratedQuadrature * clone() const; /** Compute an approximation of \int_a^b\int_{L_1(x_1)}^{U_1(x_1)}\int_{L_1(x_1,x_2)}^{U_2(x_1,x_2)}\dots\int_{L_1(x_1,\dots,x_{n-1})}^{U_2(x_1,\dots,x_{n-1})} f(x_1,\dots,x_n)dx_1\dotsdx_n, where [a,b] is an 1D interval, L_k and U_k are functions from R^k into R. */ using IntegrationAlgorithmImplementation::integrate; Point integrate(const Function & function, const Interval & interval) const; // This method allows to get the estimated integration error as a scalar Point integrate(const Function & function, const Scalar a, const Scalar b, const FunctionCollection & lowerBounds, const FunctionCollection & upperBounds, const Bool check = true) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; private: // Class to compute in a recursive way a multidimensional integral class PartialFunctionWrapper: public FunctionImplementation { public: /* Default constructor */ PartialFunctionWrapper(const IteratedQuadrature & quadrature, const Function & function, const IteratedQuadrature::FunctionCollection & lowerBounds, const IteratedQuadrature::FunctionCollection & upperBounds) : FunctionImplementation() , quadrature_(quadrature) , function_(function) , lowerBounds_(lowerBounds) , upperBounds_(upperBounds) { // Nothing to do } Point operator()(const Point & point) const { // Create the arguments of the local integration problem const Indices index(1, 0); const ParametricFunction function(function_, index, point); const UnsignedInteger size = lowerBounds_.getSize() - 1; const Scalar a = lowerBounds_[0](point)[0]; const Scalar b = upperBounds_[0](point)[0]; IteratedQuadrature::FunctionCollection lowerBounds(size); IteratedQuadrature::FunctionCollection upperBounds(size); for (UnsignedInteger i = 0; i < size; ++i) { lowerBounds[i] = ParametricFunction(lowerBounds_[i + 1], index, point); upperBounds[i] = ParametricFunction(upperBounds_[i + 1], index, point); } const Point value(quadrature_.integrate(function, a, b, lowerBounds, upperBounds, false)); for (UnsignedInteger i = 0; i < value.getDimension(); ++i) if (!SpecFunc::IsNormal(value[i])) throw InternalException(HERE) << "Error: NaN or Inf produced for x=" << point << " while integrating " << function; return value; } Sample operator()(const Sample & sample) const { const UnsignedInteger sampleSize = sample.getSize(); const UnsignedInteger outputDimension = function_.getOutputDimension(); const UnsignedInteger size = lowerBounds_.getSize() - 1; IteratedQuadrature::FunctionCollection lowerBounds(size); IteratedQuadrature::FunctionCollection upperBounds(size); Sample result(sampleSize, outputDimension); const Indices index(1, 0); const Sample sampleA(lowerBounds_[0](sample)); const Sample sampleB(upperBounds_[0](sample)); for (UnsignedInteger k = 0; k < sampleSize; ++k) { const Point x(sample[k]); // Create the arguments of the local integration problem const ParametricFunction function(function_, index, x); const Scalar a = sampleA[k][0]; const Scalar b = sampleB[k][0]; for (UnsignedInteger i = 0; i < size; ++i) { lowerBounds[i] = ParametricFunction(lowerBounds_[i + 1], index, x); upperBounds[i] = ParametricFunction(upperBounds_[i + 1], index, x); } // Loop over bound functions result[k] = quadrature_.integrate(function, a, b, lowerBounds, upperBounds, false); for (UnsignedInteger i = 0; i < outputDimension; ++i) if (!SpecFunc::IsNormal(result[k][i])) throw InternalException(HERE) << "Error: NaN or Inf produced for x=" << x << " while integrating " << function; } // Loop over sample points return result; } PartialFunctionWrapper * clone() const { return new PartialFunctionWrapper(*this); } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return function_.getOutputDimension(); } Description getInputDescription() const { return Description(1, "t"); } Description getOutputDescription() const { return function_.getOutputDescription(); } private: const IteratedQuadrature & quadrature_; const Function & function_; const IteratedQuadrature::FunctionCollection & lowerBounds_; const IteratedQuadrature::FunctionCollection & upperBounds_; }; // class PartialFunctionWrapper /* Underlying integration algorithm */ IntegrationAlgorithm algorithm_; } ; /* class IteratedQuadrature */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ITERATEDQUADRATURE_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KDTree.hxx000066400000000000000000000077631307543307100224350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief KDTree structure to speed-up queries on large samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KDTREE_HXX #define OPENTURNS_KDTREE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS class KDNearestNeighboursFinder; /** * @class KDTree * * Organize d-dimensional points into a hierarchical tree-like structure */ class OT_API KDTree : public PersistentObject { CLASSNAME; friend class KDNearestNeighboursFinder; public: /** Default constructor */ KDTree(); /** Parameter constructor */ explicit KDTree(const Sample & sample); /** Virtual constructor */ virtual KDTree * clone() const; /** String converter */ virtual String __repr__() const; /** Check if the tree is empty */ virtual Bool isEmpty() const; /** Insert a point */ virtual void insert(const Point & point); /** Get the indices of the k nearest neighbours of the given point */ virtual Indices getNearestNeighboursIndices(const Point & x, const UnsignedInteger k, const bool sorted = false) const; /** Get the k nearest neighbours of the given point */ virtual Sample getNearestNeighbours(const Point & x, const UnsignedInteger k) const; /** Get the index of the nearest neighbour of the given point */ virtual UnsignedInteger getNearestNeighbourIndex(const Point & x) const; /** Get the nearest neighbour of the given point */ virtual Point getNearestNeighbour(const Point & x) const; /** Points accessor */ Sample getPoints() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: #ifndef SWIG /** * @class KDNode * * A node in a KDTree */ struct KDNode { typedef Pointer< KDNode> KDNodePointer; /** Parameter constructor */ explicit KDNode(const UnsignedInteger index) : index_(index) , p_left_(0) , p_right_(0) { // Nothing to do } /** String converter */ String __repr__() const { return OSS() << "class=KDNode" << " index=" << index_ << " left=" << (p_left_ ? p_left_->__repr__() : "NULL") << " right=" << (p_right_ ? p_right_->__repr__() : "NULL"); } /* Index of the nodal point */ UnsignedInteger index_; /* Children */ KDNodePointer p_left_; KDNodePointer p_right_; }; /* class KDNode */ #endif /** Insert the point of the database at index i in the tree */ void insert(KDNode::KDNodePointer & p_node, const UnsignedInteger index, const UnsignedInteger activeDimension); /** Get the index of the nearest neighbour of the given point */ virtual UnsignedInteger getNearestNeighbourIndex(const KDNode::KDNodePointer & p_node, const Point & x, Scalar & bestSquaredDistance, const UnsignedInteger activeDimension) const; /** Build the tree */ void initialize(); /** The data organized by the tree */ Sample points_; /** The root of the tree */ KDNode::KDNodePointer p_root_; }; /* class KDTree */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KDTREE_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KFold.hxx000066400000000000000000000050441307543307100223040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief K-Fold cross validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KFOLD_HXX #define OPENTURNS_KFOLD_HXX #include "openturns/ResourceMap.hxx" #include "openturns/FittingAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KFold * * Creates all the possible training sets by removing P samples from the complete set */ class OT_API KFold : public FittingAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ explicit KFold(const UnsignedInteger k = ResourceMap::GetAsUnsignedInteger( "KFold-DefaultK" ), const Bool useNormal = false); /** Virtual constructor */ virtual KFold * clone() const; /** String converter */ virtual String __repr__() const; /** Perform cross-validation */ virtual Scalar run(const Sample & x, const Sample & y, const Point & weight, const Basis & basis, const Indices & indices) const; #ifndef SWIG virtual Scalar run(const Sample & y, const Point & weight, const Indices & indices, const DesignProxy & proxy) const; virtual Scalar run(LeastSquaresMethod & method, const Sample & y) const; #endif /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** K accessor */ void setK(const UnsignedInteger p); UnsignedInteger getK() const; protected: /** The data is split into k subsamples */ UnsignedInteger k_; /** Use the normal equation for the least square problems */ Bool useNormal_; }; /* class KFold */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KFOLD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveAlgorithm.hxx000066400000000000000000000043041307543307100257200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEALGORITHM_HXX #define OPENTURNS_KARHUNENLOEVEALGORITHM_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveAlgorithm * * Compute the KL decomposition of a given covariance model */ class OT_API KarhunenLoeveAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Constructor from implementation */ KarhunenLoeveAlgorithm(const KarhunenLoeveAlgorithmImplementation & implementation); /** Constructor from implementation */ KarhunenLoeveAlgorithm(const Implementation & p_implementation); /** Threshold accessors */ Scalar getThreshold() const; void setThreshold(const Scalar threshold); /** Covariance model accessors */ CovarianceModel getCovarianceModel() const; void setCovarianceModel(const CovarianceModel & covariance); /** Result accessor */ KarhunenLoeveResult getResult() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Compute the decomposition */ void run(); }; /* class KarhunenLoeveAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveAlgorithmImplementation.hxx000066400000000000000000000052001307543307100306220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_KARHUNENLOEVEALGORITHMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/KarhunenLoeveResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveAlgorithmImplementation * * Compute the KL decomposition of a given covariance model */ class OT_API KarhunenLoeveAlgorithmImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ KarhunenLoeveAlgorithmImplementation(); /** Default constructor */ explicit KarhunenLoeveAlgorithmImplementation(const CovarianceModel & covariance, const Scalar threshold = 0.0); /** Virtual constructor */ virtual KarhunenLoeveAlgorithmImplementation * clone() const; /** Threshold accessors */ Scalar getThreshold() const; void setThreshold(const Scalar threshold); /** Covariance model accessors */ virtual CovarianceModel getCovarianceModel() const; virtual void setCovarianceModel(const CovarianceModel & covariance); /** Do the computation */ virtual void run(); /** Result accessor */ KarhunenLoeveResult getResult() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Covariance model */ CovarianceModel covariance_; /** Threshold */ Scalar threshold_; /** Result */ KarhunenLoeveResult result_; }; /* class KarhunenLoeveAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveP1Algorithm.hxx000066400000000000000000000047061307543307100261270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * P1 Lagrange approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEP1ALGORITHM_HXX #define OPENTURNS_KARHUNENLOEVEP1ALGORITHM_HXX #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveP1Algorithm */ class OT_API KarhunenLoeveP1Algorithm : public KarhunenLoeveAlgorithmImplementation { CLASSNAME; public: /** Default constructor without parameters */ KarhunenLoeveP1Algorithm(); /** Default constructor without parameters */ KarhunenLoeveP1Algorithm(const Mesh & mesh, const CovarianceModel & covariance, const Scalar threshold = 0.0); /** Virtual copy constructor */ virtual KarhunenLoeveP1Algorithm * clone() const; /** Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using P1 approximation */ void run(); /** Mesh accessor */ Mesh getMesh() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Underlying mesh */ Mesh mesh_; } ; /* class KarhunenLoeveP1Algorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEP1ALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveP1Factory.hxx000066400000000000000000000055151307543307100256070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * P1 Lagrange approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEP1FACTORY_HXX #define OPENTURNS_KARHUNENLOEVEP1FACTORY_HXX #include "openturns/Mesh.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Basis.hxx" #include "openturns/Point.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveP1Factory */ class OT_API KarhunenLoeveP1Factory : public PersistentObject { CLASSNAME; public: /** Default constructor without parameters */ KarhunenLoeveP1Factory(); /** Default constructor without parameters */ KarhunenLoeveP1Factory(const Mesh & mesh, const Scalar threshold); /** Virtual copy constructor */ virtual KarhunenLoeveP1Factory * clone() const; /** Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using P1 approximation */ Basis build(const CovarianceModel & covarianceModel, Point & eigenvalues) const; ProcessSample buildAsProcessSample(const CovarianceModel & covarianceModel, Point & eigenvalues) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Underlying mesh */ Mesh mesh_; /** Gram matrix of the mesh */ CovarianceMatrix gram_; /** Threshold for eigenvalues selection */ Scalar threshold_; } ; /* class KarhunenLoeveP1Factory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEP1FACTORY_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveResult.hxx000066400000000000000000000052661307543307100252600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and projection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVERESULT_HXX #define OPENTURNS_KARHUNENLOEVERESULT_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/KarhunenLoeveResultImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveResult * * Compute the KL decomposition of a given covariance model */ class OT_API KarhunenLoeveResult : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Default constructor */ KarhunenLoeveResult(); /** Constructor from implementation */ KarhunenLoeveResult(const KarhunenLoeveResultImplementation & implementation); /** Constructor from implementation */ KarhunenLoeveResult(const Implementation & p_implementation); /** Threshold accessor */ Scalar getThreshold() const; /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Eigenvalues accessor */ Point getEigenValues() const; /** Modes accessors */ Basis getModes() const; ProcessSample getModesAsProcessSample() const; /** Scaled modes accessors */ Basis getScaledModes() const; ProcessSample getScaledModesAsProcessSample() const; /** Projection matrix accessor */ Matrix getProjectionMatrix() const; /** Projection method */ Point project(const Function & function) const; Point project(const Field & field) const; Sample project(const Basis & basis) const; Sample project(const ProcessSample & sample) const; /** Lift method */ Function lift(const Point & coefficients) const; Field liftAsField(const Point & coefficients) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; }; /* class KarhunenLoeveResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVERESULT_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveResultImplementation.hxx000066400000000000000000000067601307543307100301660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Karhunen-Loeve decomposition and by-products * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVERESULTIMPLEMENTATION_HXX #define OPENTURNS_KARHUNENLOEVERESULTIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Point.hxx" #include "openturns/Basis.hxx" #include "openturns/Function.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/Matrix.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveResultImplementation * * Compute the KL decomposition of a given covariance model */ class OT_API KarhunenLoeveResultImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ KarhunenLoeveResultImplementation(); /** Default constructor */ explicit KarhunenLoeveResultImplementation(const CovarianceModel & covariance, const Scalar threshold, const Point & eigenvalues, const Basis & modes, const ProcessSample & modesAsProcessSample, const Matrix & projection); /** Virtual constructor */ virtual KarhunenLoeveResultImplementation * clone() const; /** Threshold accessor */ Scalar getThreshold() const; /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Eigenvalues accessor */ Point getEigenValues() const; /** Modes accessors */ Basis getModes() const; ProcessSample getModesAsProcessSample() const; /** Scaled modes accessors */ Basis getScaledModes() const; ProcessSample getScaledModesAsProcessSample() const; /** Projection matrix accessor */ Matrix getProjectionMatrix() const; /** Projection method */ Point project(const Function & function) const; Point project(const Field & field) const; Sample project(const Basis & basis) const; Sample project(const ProcessSample & sample) const; /** Lift method */ Function lift(const Point & coefficients) const; Field liftAsField(const Point & coefficients) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Covariance model */ CovarianceModel covariance_; /** Threshold */ Scalar threshold_; /** Eigenvalues */ Point eigenvalues_; /** Modes */ Basis modes_; /** Modes as process sample */ ProcessSample modesAsProcessSample_; /** Projection matrix */ Matrix projection_; }; /* class KarhunenLoeveResultImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVERESULTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KarhunenLoeveSVDAlgorithm.hxx000066400000000000000000000076721307543307100263100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * SVD decomposition of a process sample. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVESVDALGORITHM_HXX #define OPENTURNS_KARHUNENLOEVESVDALGORITHM_HXX #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" #include "openturns/ProcessSample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveSVDAlgorithm */ class OT_API KarhunenLoeveSVDAlgorithm : public KarhunenLoeveAlgorithmImplementation { CLASSNAME; public: /** Default constructor without parameters */ KarhunenLoeveSVDAlgorithm(); /** Parameters constructor */ KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Scalar threshold = 0.0, const Bool centeredSample = false); KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Point & verticesWeights, const Scalar threshold = 0.0, const Bool centeredSample = false); KarhunenLoeveSVDAlgorithm(const ProcessSample & sample, const Point & verticesWeights, const Point & sampleWeights, const Scalar threshold = 0.0, const Bool centeredSample = false); /** Virtual copy constructor */ virtual KarhunenLoeveSVDAlgorithm * clone() const; /** Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using SVD approximation */ void run(); /** Process sample accessor */ ProcessSample getSample() const; /** Vertices weights accessor */ Point getVerticesWeights() const; private: void setVerticesWeights(const Point & verticesWeights); public: /** Sample weights accessor */ Point getSampleWeights() const; private: void setSampleWeights(const Point & sampleWeights); public: /** Covariance model accessors */ CovarianceModel getCovarianceModel() const; private: /** Hide the covariance model accessor as it has no meaning in the SVD context */ void setCovarianceModel(const CovarianceModel & covariance); public: /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Underlying sample */ ProcessSample sample_; /** Flag to tell if the sample is centered */ Bool centeredSample_; /** Potential vertices weights */ Point verticesWeights_; /** Flag to tell if the weights are uniform */ Bool uniformVerticesWeights_; /** Potential sample weights */ Point sampleWeights_; /** Flag to tell if the sample weights are uniform */ Bool uniformSampleWeights_; } ; /* class KarhunenLoeveSVDAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVESVDALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/KissFFT.hxx000066400000000000000000000067231307543307100225630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KISSFFT_HXX #define OPENTURNS_KISSFFT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FFTImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KissFFT */ class OT_API KissFFT : public FFTImplementation { CLASSNAME; public: /** Default constructor without parameters */ KissFFT(); /** Virtual copy constructor */ KissFFT * clone() const; /** FFT transformation on complex */ ComplexCollection transform(const ComplexCollection & collection) const; /** FFT transformation with application on a block-part of the collection */ ComplexCollection transform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT inverse transformation */ ComplexCollection inverseTransform(const ComplexCollection & collection) const; /** FFT inverse transformation with application on a block-part of the collection */ ComplexCollection inverseTransform(const ComplexCollection & collection, const UnsignedInteger first, const UnsignedInteger size) const; /** FFT 2D transformation on complex */ ComplexMatrix transform2D(const ComplexMatrix & complexMatrix) const; /** FFT 2D transformation on real matrix */ ComplexMatrix transform2D(const Matrix & matrix) const; /** FFT 2D transformation on sample */ ComplexMatrix transform2D(const Sample & sample) const; /** IFFT 2D transformation on complex */ ComplexMatrix inverseTransform2D(const ComplexMatrix & complexMatrix) const; /** IFFT 2D transformation on real matrix */ ComplexMatrix inverseTransform2D(const Matrix & matrix) const; /** IFFT 2D transformation on sample */ ComplexMatrix inverseTransform2D(const Sample & sample) const; /** FFT 3D transformation */ ComplexTensor transform3D(const ComplexTensor & tensor) const; /** FFT 3D transformation on real data */ ComplexTensor transform3D(const Tensor & tensor) const; /** IFFT 3D transformation */ ComplexTensor inverseTransform3D(const ComplexTensor & tensor) const; /** IFFT 3D transformation */ ComplexTensor inverseTransform3D(const Tensor & tensor) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; private: ComplexMatrix fft2D(const ComplexMatrix & complexMatrix, const Bool isIFFT) const; ComplexTensor fft3D(const ComplexTensor & tensor, const Bool isIFFT) const; } ; /* class KissFFT */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KISSFFT_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/LeastSquaresMetaModelSelection.hxx000066400000000000000000000070021307543307100273530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Basis selection algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEASTSQUARESMETAMODELSELECTION_HXX #define OPENTURNS_LEASTSQUARESMETAMODELSELECTION_HXX #include "openturns/ApproximationAlgorithmImplementation.hxx" #include "openturns/FittingAlgorithm.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" #include "openturns/LARS.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LeastSquaresMetaModelSelection * * Basis selection algorithm */ class OT_API LeastSquaresMetaModelSelection : public ApproximationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ LeastSquaresMetaModelSelection(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices, const BasisSequenceFactory & basisSequenceFactory = LARS(), const FittingAlgorithm & fittingAlgorithm = CorrectedLeaveOneOut()); /** Default constructor */ LeastSquaresMetaModelSelection(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const BasisSequenceFactory & basisSequenceFactory = LARS(), const FittingAlgorithm & fittingAlgorithm = CorrectedLeaveOneOut()); /** Virtual constructor */ virtual LeastSquaresMetaModelSelection * clone() const; /** String converter */ virtual String __repr__() const; /** BasisSequenceFactory accessor */ void setBasisSequenceFactory(const BasisSequenceFactory & basisSequenceFactory); BasisSequenceFactory getBasisSequenceFactory() const; /** FittingAlgorithm accessor */ void setFittingAlgorithm(const FittingAlgorithm & fittingAlgorithm); FittingAlgorithm getFittingAlgorithm() const; /** Perform the selection */ using ApproximationAlgorithmImplementation::run; virtual void run(const DesignProxy & proxy); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ LeastSquaresMetaModelSelection(); /** Algorithm that builds the BasisSequence */ BasisSequenceFactory basisSequenceFactory_; /** Basis selection algorithm */ FittingAlgorithm fittingAlgorithm_; }; /* class LeastSquaresMetaModelSelection */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEASTSQUARESMETAMODELSELECTION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/LeastSquaresMetaModelSelectionFactory.hxx000066400000000000000000000053441307543307100307120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building LeastSquaresMetaModelSelection objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEASTSQUARESMETAMODELSELECTIONFACTORY_HXX #define OPENTURNS_LEASTSQUARESMETAMODELSELECTIONFACTORY_HXX #include "openturns/Sample.hxx" #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" #include "openturns/LeastSquaresMetaModelSelection.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LeastSquaresMetaModelSelectionFactory * * A factory for building LeastSquaresMetaModelSelection objects */ class OT_API LeastSquaresMetaModelSelectionFactory : public ApproximationAlgorithmImplementationFactory { CLASSNAME; public: /** Constructor */ explicit LeastSquaresMetaModelSelectionFactory(const BasisSequenceFactory & fact = LARS(), const FittingAlgorithm & algo = CorrectedLeaveOneOut()); /** Virtual constructor */ virtual LeastSquaresMetaModelSelectionFactory * clone() const; /** Accessors */ BasisSequenceFactory getBasisSequenceFactory() const; FittingAlgorithm getFittingAlgorithm() const; /** Method to create new LeastSquaresMetaModelSelection objects */ virtual LeastSquaresMetaModelSelection * build (const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The algorithm that generates a family of basis */ BasisSequenceFactory basisSequenceFactory_; /** The cross-validation algorithm */ FittingAlgorithm fittingAlgorithm_; }; /* class LeastSquaresMetaModelSelectionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEASTSQUARESMETAMODELSELECTIONFACTORY_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/LeastSquaresMethod.hxx000066400000000000000000000072761307543307100250730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LeastSquares solving algorithm interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEASTSQUARESMETHOD_HXX #define OPENTURNS_LEASTSQUARESMETHOD_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Sample.hxx" #include "openturns/Basis.hxx" #include "openturns/LeastSquaresMethodImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LeastSquaresMethod * * LeastSquares solving algorithm interface */ class OT_API LeastSquaresMethod : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Default constructor */ LeastSquaresMethod(); /** Parameters constructor */ LeastSquaresMethod (const DesignProxy & proxy, const Point & weight, const Indices & indices); /** Parameters constructor */ LeastSquaresMethod (const DesignProxy & proxy, const Indices & indices); /** Constructor from implementation */ LeastSquaresMethod(const Implementation & p_implementation); /** Constructor from implementation */ LeastSquaresMethod(const LeastSquaresMethodImplementation & implementation); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Input sample accessor */ Sample getInputSample() const; /** Weight accessor */ Point getWeight() const; /** Basis accessor */ Basis getBasis() const; /** Current indices accessor */ Indices getCurrentIndices() const; /** Initial indices accessor */ Indices getInitialIndices() const; /** Build the current functions */ Basis buildCurrentBasis() const; /** Solve least-squares problem, ie x=\argmin |Mx-b|^2 */ Point solve(const Point & rhs); /** Solve normal equation M^T*M*x=M^T*b */ Point solveNormal(const Point & rhs); /** Get the diagonal of H */ Point getHDiag() const; /** Get the diagonal of the Gram inverse */ Point getGramInverseDiag() const; /** Get the trace of the Gram inverse */ Scalar getGramInverseTrace() const; /** Update basis */ void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); /** Build the Gram matrix */ Matrix computeWeightedDesign(bool whole = false) const; /** Build a method instance from its name */ static LeastSquaresMethod Build(const String name, const DesignProxy & proxy, const Point & weight, const Indices & indices); static LeastSquaresMethod Build(const String name, const DesignProxy & proxy, const Indices & indices); protected: }; /* class LeastSquaresMethod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEASTSQUARESMETHOD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/LeastSquaresMethodImplementation.hxx000066400000000000000000000111111307543307100277600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LeastSquares solving algorithm implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEASTSQUARESMETHODIMPLEMENTATION_HXX #define OPENTURNS_LEASTSQUARESMETHODIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/FunctionalBasis.hxx" #include "openturns/DesignProxy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LeastSquaresMethodImplementation * * LeastSquares solving algorithm implementation */ class OT_API LeastSquaresMethodImplementation : public PersistentObject { friend class KFold; friend class CorrectedLeaveOneOut; friend class LeastSquaresMetaModelSelection; CLASSNAME; public: /** Default constructor */ LeastSquaresMethodImplementation(); /** Parameters constructor */ LeastSquaresMethodImplementation(const DesignProxy & proxy, const Point & weight, const Indices & indices); /** Parameters constructor */ LeastSquaresMethodImplementation(const DesignProxy & proxy, const Indices & indices); /** Virtual constructor */ virtual LeastSquaresMethodImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** Input sample accessor */ virtual Sample getInputSample() const; /** Weight accessor */ virtual Point getWeight() const; /** Basis accessor */ virtual Basis getBasis() const; /** Current indices accessor */ virtual Indices getCurrentIndices() const; /** Initial indices accessor */ virtual Indices getInitialIndices() const; /** Solve least-squares problem, ie x=\argmin |D(Mx-b)|^2 */ virtual Point solve(const Point & rhs); virtual Point solveNormal(const Point & rhs); /** Get the inverse of the Gram matrix */ virtual CovarianceMatrix getGramInverse() const; /** Get the scaled inverse H = Psi.G^{-1}.Psi^t of the Gram matrix */ virtual SymmetricMatrix getH() const; /** Get the diagonal of H */ virtual Point getHDiag() const; /** Get the diagonal of the Gram inverse */ virtual Point getGramInverseDiag() const; /** Get the trace of the Gram inverse */ virtual Scalar getGramInverseTrace() const; /** Update */ virtual void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); /** Destroy the internal decomposition of the design matrix */ virtual void trashDecomposition(); /** Build the current functions */ virtual Basis buildCurrentBasis() const; /** Build the weighted design matrix */ virtual MatrixImplementation computeWeightedDesign(const Bool whole = false) const; protected: virtual MatrixImplementation computeWeightedDesign(const Indices & indices) const; public: /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Weight accessor, check for positivness and uniformity, compute the square roots */ void setWeight(const Point & weight); /** Proxy to the input sample and the basis */ DesignProxy proxy_; /** Weights for the least-squares norm. The size is positive if and only if the weights are not uniform. */ Point weight_; /** Square-roots of the weights for the least-squares norm. The size is positive if and only if the weights are not uniform. */ Point weightSqrt_; /** Flag to tell if the points have uniform weights */ Bool hasUniformWeight_; /** Current indices */ Indices currentIndices_; /** Initial indices */ Indices initialIndices_; }; /* class LeastSquaresMethodImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEASTSQUARESMETHODIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/OTAlgo.hxx000066400000000000000000000052611307543307100224330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Algo * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTALGO_HXX #define OPENTURNS_OTALGO_HXX #include "openturns/ApproximationAlgorithmImplementation.hxx" #include "openturns/ApproximationAlgorithm.hxx" #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" #include "openturns/ClassifierImplementation.hxx" #include "openturns/Classifier.hxx" #include "openturns/ApproximationAlgorithm.hxx" #include "openturns/FittingAlgorithmImplementation.hxx" #include "openturns/FittingAlgorithm.hxx" #include "openturns/KDTree.hxx" #include "openturns/KFold.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" #include "openturns/LeastSquaresMetaModelSelection.hxx" #include "openturns/LeastSquaresMetaModelSelectionFactory.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" #include "openturns/PenalizedLeastSquaresAlgorithmFactory.hxx" #include "openturns/FFTImplementation.hxx" #include "openturns/FFT.hxx" #include "openturns/KissFFT.hxx" #include "openturns/IntegrationAlgorithmImplementation.hxx" #include "openturns/IntegrationAlgorithm.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/GaussKronrodRule.hxx" #include "openturns/GaussLegendre.hxx" #include "openturns/IteratedQuadrature.hxx" #include "openturns/KarhunenLoeveP1Factory.hxx" #include "openturns/DesignProxy.hxx" #include "openturns/LeastSquaresMethodImplementation.hxx" #include "openturns/LeastSquaresMethod.hxx" #include "openturns/CholeskyMethod.hxx" #include "openturns/QRMethod.hxx" #include "openturns/SVDMethod.hxx" #include "openturns/SparseMethod.hxx" #include "openturns/KarhunenLoeveResultImplementation.hxx" #include "openturns/KarhunenLoeveResult.hxx" #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" #include "openturns/KarhunenLoeveAlgorithm.hxx" #include "openturns/KarhunenLoeveP1Algorithm.hxx" #include "openturns/KarhunenLoeveSVDAlgorithm.hxx" #endif /* OPENTURNS_OTALGO_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/PenalizedLeastSquaresAlgorithm.hxx000066400000000000000000000074361307543307100274330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This Penalized Least Squares Algorithm as a functor class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PENALIZEDLEASTSQUARESALGORITHM_HXX #define OPENTURNS_PENALIZEDLEASTSQUARESALGORITHM_HXX #include "openturns/ApproximationAlgorithmImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/CovarianceMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PenalizedLeastSquaresAlgorithm * * This PenalizedLeast Square Algorithm as a functor class */ class OT_API PenalizedLeastSquaresAlgorithm : public ApproximationAlgorithmImplementation { CLASSNAME; public: typedef Collection FunctionCollection; // friend class Factory; /** Default constructor */ PenalizedLeastSquaresAlgorithm(const Bool useNormal = true); /** Parameters constructor, simple least squares problem with default parameters, spherically penalized for general parameters */ PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices, const Scalar penalizationFactor = 0.0, const Bool useNormal = false); /** Parameters constructor, simple weighted least squares problem with default parameters, spherically penalized for general parameters */ PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const Scalar penalizationFactor = 0.0, const Bool useNormal = false); /** Parameters constructor, general penalized weighted least squares problem */ PenalizedLeastSquaresAlgorithm(const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices, const Scalar penalizationFactor, const CovarianceMatrix & penalizationMatrix, const Bool useNormal = false); /** Virtual constructor */ virtual PenalizedLeastSquaresAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** Perform the optimization */ void run(); #ifndef SWIG void run(const DesignProxy & proxy); #endif protected: private: Scalar penalizationFactor_; CovarianceMatrix penalizationMatrix_; Bool useNormal_; } ; /* class PenalizedLeastSquaresAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PENALIZEDLEASTSQUARESALGORITHM_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/PenalizedLeastSquaresAlgorithmFactory.hxx000066400000000000000000000044401307543307100307530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building PenalizedLeastSquaresAlgorithm objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PENALIZEDLEASTSQUARESALGORITHMFACTORY_HXX #define OPENTURNS_PENALIZEDLEASTSQUARESALGORITHMFACTORY_HXX #include "openturns/Point.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PenalizedLeastSquaresAlgorithmFactory * * A factory for building PenalizedLeastSquaresAlgorithm objects */ class OT_API PenalizedLeastSquaresAlgorithmFactory : public ApproximationAlgorithmImplementationFactory { CLASSNAME; public: /** Default constructor */ PenalizedLeastSquaresAlgorithmFactory(const Bool useNormal = false); /** Virtual constructor */ virtual PenalizedLeastSquaresAlgorithmFactory * clone() const; /** Method to create new ApproximationAlgorithmImplementation objects */ virtual PenalizedLeastSquaresAlgorithm * build (const Sample & x, const Sample & y, const Point & weight, const Basis & psi, const Indices & indices) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: Bool useNormal_; }; /* class PenalizedLeastSquaresAlgorithmFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PENALIZEDLEASTSQUARESALGORITHMFACTORY_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/QRMethod.hxx000066400000000000000000000045401307543307100227700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief QR-decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QRMETHOD_HXX #define OPENTURNS_QRMETHOD_HXX #include "openturns/LeastSquaresMethodImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QRMethod * * QR-decomposition based LS solver */ class OT_API QRMethod : public LeastSquaresMethodImplementation { CLASSNAME; public: /** Default constructor */ QRMethod(); /** Parameters constructor */ QRMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices); /** Parameters constructor */ QRMethod(const DesignProxy & proxy, const Indices & indices); /** Virtual constructor */ virtual QRMethod * clone() const; /** String converter */ String __repr__() const; /** Solve least-squares problem, ie x=\argmin |D(Mx-b)|^2 */ Point solve(const Point & rhs); Point solveNormal(const Point & rhs); CovarianceMatrix getGramInverse() const; Point getGramInverseDiag() const; Point getHDiag() const; Scalar getGramInverseTrace() const; /** Update */ void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); void trashDecomposition(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: Matrix q_; mutable Matrix r_; }; /* class QRMethod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QRMETHOD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/SVDMethod.hxx000066400000000000000000000046351307543307100231070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SVD-decomposition based LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SVDMETHOD_HXX #define OPENTURNS_SVDMETHOD_HXX #include "openturns/Matrix.hxx" #include "openturns/LeastSquaresMethodImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SVDMethod * * SVD-decomposition based LS solver */ class OT_API SVDMethod : public LeastSquaresMethodImplementation { CLASSNAME; public: /** Default constructor */ SVDMethod(); /** Default constructor */ SVDMethod(const DesignProxy & proxy, const Point & weight, const Indices & indices); /** Default constructor */ SVDMethod(const DesignProxy & proxy, const Indices & indices); /** Virtual constructor */ virtual SVDMethod * clone() const; /** String converter */ String __repr__() const; /** Solve least-squares problem, ie x=\argmin |Mx-b|^2 */ Point solve(const Point & rhs); Point solveNormal(const Point & rhs); CovarianceMatrix getGramInverse() const; Point getGramInverseDiag() const; Point getHDiag() const; Scalar getGramInverseTrace() const; /** Update */ void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); void trashDecomposition(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: Matrix u_; SquareMatrix vT_; Point singularValues_; }; /* class SVDMethod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SVDMETHOD_HXX */ openturns-1.9/lib/src/Base/Algo/openturns/SparseMethod.hxx000066400000000000000000000063121307543307100237020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Sparse approximation LS solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPARSEMETHOD_HXX #define OPENTURNS_SPARSEMETHOD_HXX #include "openturns/LeastSquaresMethodImplementation.hxx" #include "openturns/LeastSquaresMethod.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/FittingAlgorithm.hxx" #include "openturns/LARS.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SparseMethod * * Sparse approximation LS solver */ class OT_API SparseMethod : public LeastSquaresMethodImplementation { CLASSNAME; public: /** Default constructor */ SparseMethod(); /** Parameters constructor */ SparseMethod(const LeastSquaresMethod & method, const BasisSequenceFactory & basisSequenceFactory = LARS(), const FittingAlgorithm & fittingAlgorithm = CorrectedLeaveOneOut()); /** Virtual constructor */ virtual SparseMethod * clone() const; /** String converter */ String __repr__() const; /** Input sample accessor */ virtual Sample getInputSample() const; /** Weight accessor */ virtual Point getWeight() const; /** Basis accessor */ virtual Basis getBasis() const; /** Current indices accessor */ virtual Indices getCurrentIndices() const; /** Initial indices accessor */ virtual Indices getInitialIndices() const; /** Solve least-squares problem, ie x=\argmin |D(Mx-b)|^2 */ Point solve(const Point & rhs); virtual CovarianceMatrix getGramInverse() const; /** Update */ virtual void update(const Indices & addedIndices, const Indices & conservedIndices, const Indices & removedIndices, const Bool row = false); virtual void trashDecomposition(); /** Build the current functions */ virtual Basis buildCurrentBasis() const; /** Build the weighted design matrix */ virtual MatrixImplementation computeWeightedDesign(const Bool whole = false) const; public: /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: LeastSquaresMethod method_; /** Algorithm that builds the BasisSequence */ BasisSequenceFactory basisSequenceFactory_; /** Basis selection algorithm */ FittingAlgorithm fittingAlgorithm_; }; /* class SparseMethod */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPARSEMETHOD_HXX */ openturns-1.9/lib/src/Base/CMakeLists.txt000066400000000000000000000007731307543307100204010ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_install_header_file (OTBase.hxx) # Recurse in subdirectories add_subdirectory (Algo) add_subdirectory (Common) add_subdirectory (Diff) add_subdirectory (Experiments) add_subdirectory (Func) add_subdirectory (Geom) add_subdirectory (Graph) add_subdirectory (MetaModel) add_subdirectory (Optim) add_subdirectory (Solver) add_subdirectory (Stat) add_subdirectory (Type) openturns-1.9/lib/src/Base/Common/000077500000000000000000000000001307543307100170625ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Common/AtomicFunctions.cxx000066400000000000000000000023171307543307100227160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies some atomic functions to support multithreading * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AtomicFunctions.hxx" BEGIN_NAMESPACE_OPENTURNS #if !defined(HAVE_SYNC_PRIMITIVES) pthread_mutex_t Atomic::Atomic_Mutex_ = PTHREAD_MUTEX_INITIALIZER; #endif #if !defined(HAVE_SYNC_PRIMITIVES) && !defined(WIN32) && !defined(__i386__) #warning "Using slow implementation for synchronization functions." #endif END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/BinaryStorageManager.cxx000066400000000000000000001011571307543307100236570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BinaryStorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ // For lseek64(3) #define _LARGEFILE64_SOURCE #include #include // for open(3) #include // for open(3) #include // for lseek64(3) #include // for lseek64(3) #include // for errno(3) #include // for strerror(3) #include "openturns/BinaryStorageManager.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/InterfaceObject.hxx" #include "openturns/Exception.hxx" #include "openturns/Catalog.hxx" #include "openturns/Study.hxx" #include "openturns/OSS.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS #define MAGIC "OpenTURNS-binary" /************ Attributes ************/ #define DEFINE_ATTRIBUTE(name,value) \ static char name ## Attribute = value; \ struct name ## _attribute { typedef short Type; static inline Type Get() { return name ## Attribute ; } } namespace BIN_STMGR { DEFINE_ATTRIBUTE( StudyVisible, 0 ); DEFINE_ATTRIBUTE( StudyLabel , 1 ); DEFINE_ATTRIBUTE( version , 2 ); DEFINE_ATTRIBUTE( class , 3 ); DEFINE_ATTRIBUTE( id , 4 ); DEFINE_ATTRIBUTE( name , 5 ); DEFINE_ATTRIBUTE( index , 6 ); DEFINE_ATTRIBUTE( member , 7 ); } // namespace BIN_STMGR /** @todo: ensure that reads and writes are actually done */ static inline void doWrite( int fd, const void * buf, size_t count ) { ssize_t bytes; while ( (bytes = write( fd, buf, count )) > -1 ) { if (bytes == count) break; reinterpret_cast(buf) += bytes; count -= bytes; } if (bytes < 0) throw InternalException(HERE) << "Error in writing file. Reason: " << strerror(errno); } static inline void doRead( int fd, void * buf, size_t count ) { ssize_t bytes; while ( (bytes = read( fd, buf, count )) > -1 ) { if (bytes == count) break; reinterpret_cast(buf) += bytes; count -= bytes; } if (bytes < 0) throw InternalException(HERE) << "Error in reading file. Reason: " << strerror(errno); } template static inline void writeToFile( int fd, const T & obj ) { doWrite( fd, static_cast(&obj), sizeof(obj) ); } template <> inline void writeToFile( int fd, const String & st ) { writeToFile( fd, st.size() ); doWrite( fd, static_cast(st.c_str()), st.size() ); } template <> inline void writeToFile( int fd, const Complex & cpx ) { writeToFile( fd, cpx.real() ); writeToFile( fd, cpx.imag() ); } template static inline void readFromFile( int fd, T & obj ) { doRead( fd, static_cast(&obj), sizeof(obj) ); } template <> inline void readFromFile( int fd, String & st ) { String::size_type sz; readFromFile( fd, sz ); char * tmp = new char[sz + 1]; doRead( fd, static_cast(tmp), sz ); tmp[sz] = 0; st = tmp; delete[] tmp; } template <> inline void readFromFile( int fd, Complex & cpx ) { readFromFile( fd, cpx.real() ); readFromFile( fd, cpx.imag() ); } /* ====================================================================== */ struct BinaryInternalObject : public StorageManager::InternalObject { Id id_; String label_; Bool visibility_; size_t size_; void * buf_; BinaryInternalObject() : id_(0), label_(), visibility_(false), size_(0), buf_(0) {} virtual ~BinaryInternalObject() throw() { free( buf_ ); } template void add(T val) { buf_ = realloc( buf_, size_ + sizeof( T ) ); memcpy( buf_ + size_, &val, sizeof(T) ); size_ += sizeof( T ); } }; struct BinaryStorageManagerState : public StorageManager::InternalObject { Id id_; Bool visibility_; BinaryStorageManagerState() : id_(0), visibility_(false) {} virtual ~BinaryStorageManagerState() throw() {} }; /* ====================================================================== */ CLASSNAMEINIT(BinaryStorageManager); const BinaryStorageManager::VersionList BinaryStorageManager::SupportedVersions; /* Default constructor */ BinaryStorageManager::BinaryStorageManager(const FileName & filename) : StorageManager(1), fileName_(filename), p_state_(new BinaryStorageManagerState), filefd_(-1), visibleObjects_() { // Nothing to do } /* * Virtual constructor */ BinaryStorageManager * BinaryStorageManager::clone() const { return new BinaryStorageManager(*this); } /* String converter */ String BinaryStorageManager::__repr__() const { return OSS() << "class=" << getClassName(); } /* Filename accessors */ String BinaryStorageManager::getFileName() const { return fileName_; } void BinaryStorageManager::setFileName(const String & fileName) { fileName_ = fileName; } /* Return the current state of the storage manager (for those having one) */ const StorageManager::InternalObject & BinaryStorageManager::getState() const { assert(p_state_); return *p_state_; } /* Query the manager if the version is correct */ Bool BinaryStorageManager::canManageVersion(UnsignedInteger version) const { return BinaryStorageManager::SupportedVersions.contains(version); } /* Erase the map of visible objects */ void BinaryStorageManager::cleanVisibleObjects() { visibleObjects_.erase( visibleObjects_.begin(), visibleObjects_.end() ); } /* Do some administrative tasks before saving/reloading */ void BinaryStorageManager::initialize(const SaveAction caller) { cleanSavedObjects(); cleanVisibleObjects(); mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; filefd_ = open( fileName_.c_str(), O_WRONLY | O_CREAT | O_TRUNC, mode); if (filefd_ < 0) throw FileOpenException(HERE) << "Can NOT open binary file " << fileName_ << ". Reason: " << strerror(errno); // Save header doWrite( filefd_, static_cast(MAGIC), strlen(MAGIC) ); } /* Do some administrative tasks before saving/reloading */ void BinaryStorageManager::initialize(const LoadAction caller) { cleanVisibleObjects(); filefd_ = open( fileName_.c_str(), O_RDONLY ); if (filefd_ < 0) throw FileNotFoundException(HERE) << "Can NOT open binary file " << fileName_ << ". Reason: " << strerror(errno); // Read header char * buf = new char[strlen(MAGIC)]; if (buf != 0) { doRead( filefd_, static_cast(buf), strlen(MAGIC) ); if (strncmp(buf, MAGIC, strlen(MAGIC))) throw InternalException(HERE) << "Error in reading binary file header"; delete[] buf; } else throw InternalException(HERE) << "Memory error"; } /* Do some administrative tasks after saving/reloading */ void BinaryStorageManager::finalize(const SaveAction caller) { // We write the end marker (zero) off64_t objsize = 0x0000000000000000; writeToFile( filefd_, objsize ); // we save the position where the size will be written (0 at first) off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); writeToFile( filefd_, objsize ); // create file footer for( VisibleObjectsMap::const_iterator it = visibleObjects_.begin(); it != visibleObjects_.end(); ++it, ++objsize ) { std::cout << "id=" << it->first << " label=" << it->second.first << " visible=" << it->second.second << std::endl; writeToFile( filefd_, it->first ); // id writeToFile( filefd_, it->second.first ); // label writeToFile( filefd_, it->second.second ); // visibility } // we rewind to the saved position and save the actual size lseek64( filefd_, pos, SEEK_SET ); writeToFile( filefd_, objsize ); close( filefd_ ); } /* Do some administrative tasks after saving/reloading */ void BinaryStorageManager::finalize(const LoadAction caller) { // we read the size of the footer off64_t objsize = 0x0000000000000000; readFromFile( filefd_, objsize ); // we read the footer content Id id; String label; Bool visibility; for ( ; objsize; --objsize ) { readFromFile( filefd_, id ); readFromFile( filefd_, label ); readFromFile( filefd_, visibility ); defineLabel( id, label ); defineVisibility( id, visibility ); std::cout << "Got label for id=" << id << " label=" << label << " visible=" << visibility << std::endl; } close( filefd_ ); } /* Read and create the internal representation */ void BinaryStorageManager::read() { assert(filefd_ > -1); // TODO : do NOT forget study version } /* Write the internal representation */ void BinaryStorageManager::write() { assert(filefd_ > -1); } /* * This method saves the PersistentObject onto the medium */ void BinaryStorageManager::save(const PersistentObject & obj, const String & label, bool fromStudy) { assert(filefd_ > -1); #ifdef SAVELOAD_CHECKING try { #endif if (! isSavedObject( obj.getId() )) { // we save the current offset off64_t before = lseek64( filefd_, 0, SEEK_CUR ); off64_t objsize = 0x0000000000000000; writeToFile( filefd_, objsize ); // we actually save the object obj.save(*this, label, fromStudy); // we compute the real object size as written in the file off64_t after = lseek64( filefd_, 0, SEEK_CUR ); objsize = after - before; // we rewrite the actual size infront of the object in file lseek( filefd_, before, SEEK_SET); writeToFile( filefd_, objsize ); lseek( filefd_, after, SEEK_SET); markObjectAsSaved( obj.getId() ); } #ifdef SAVELOAD_CHECKING } catch ( const Exception & ex ) { LOGERROR( OSS() << "When saving " << obj.getClassName() << " : " << ex ); } #endif } /* * This method reloads the PersistentObject from the medium */ void BinaryStorageManager::load(Study & study) { setStudy( &study ); assert(p_state_); // get first element -> node off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); off64_t objsize = 0x0000000000000000; readFromFile( filefd_, objsize ); while( objsize > 0 ) { BINReadObject ro = readBinaryObject(); if (ro.p_obj_) { study.add( *(ro.p_obj_) ); } // get next element pos = lseek64( filefd_, pos + objsize, SEEK_SET ); readFromFile( filefd_, objsize ); } } /* Methods to read object */ BinaryStorageManager::BINReadObject BinaryStorageManager::readBinaryObject() { assert(p_state_); off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token != "class") throw InternalException(HERE) << "File format error. Expected 'class' token at position " << pos; String className; readFromFile( filefd_, className ); BINReadObject ro; ro.p_obj_ = Catalog::Get(className).build(*this); // pos = lseek64( filefd_, 0, SEEK_CUR ); // BIN_STMGR::StudyVisible_attribute::Type tokenV; // readFromFile( filefd_, tokenV ); // if (tokenV != BIN_STMGR::StudyVisible_attribute::Get()) throw InternalException(HERE) << "File format error. Expected '" // << std::hex // << BIN_STMGR::StudyVisible_attribute::Get() // << "' token at position " << pos; // readFromFile( filefd_, ro.visibility_ ); // pos = lseek64( filefd_, 0, SEEK_CUR ); // BIN_STMGR::StudyLabel_attribute::Type tokenL; // readFromFile( filefd_, tokenL ); // if (tokenL != BIN_STMGR::StudyLabel_attribute::Get()) throw InternalException(HERE) << "File format error. Expected '" // << std::hex // << BIN_STMGR::StudyLabel_attribute::Get() // << "' token at position " << pos; // readFromFile( filefd_, ro.label_ ); //ro.p_obj_->setVisibility( ro.visibility_ ); return ro; } Pointer BinaryStorageManager::registerObject(const PersistentObject & obj, bool fromStudy) { p_state_->id_ = obj.getId(); p_state_->visibility_ = fromStudy; return new Advocate(*this, getState(), String()); } /* Create a new empty object that will gather all saved information */ Pointer BinaryStorageManager::createObject(const String & tag) const { BinaryInternalObject * p_obj = new BinaryInternalObject; assert(p_obj); p_obj->id_ = p_state_->id_; p_obj->visibility_ = p_state_->visibility_; return p_obj; } /* Append an internal object to the collection of saved ones */ void BinaryStorageManager::appendObject(Pointer & p_obj) { assert(p_obj); BinaryInternalObject & obj = static_cast(*p_obj); doWrite( filefd_, obj.buf_, obj.size_ ); if (obj.visibility_) { visibleObjects_[ obj.id_ ] = std::make_pair( obj.label_, obj.visibility_ ); std::cout << "Add visible object id=" << obj.id_ << " label=" << obj.label_ << std::endl; } } void BinaryStorageManager::setVisibility(Pointer & p_obj, Bool visible) { assert(p_obj); BinaryInternalObject & obj = static_cast(*p_obj); obj.visibility_ = visible; } void BinaryStorageManager::setLabel(Pointer & p_obj, const String & label) { // @todo: Append this to file footer assert(p_obj); BinaryInternalObject & obj = static_cast(*p_obj); obj.label_ = label; } /************ Helper Functions ************/ /* toStringConverter */ static inline void toStringConverter(const String & value, String & st) { st = value; } template static inline void toStringConverter(const _Tp & value, String & st) { st = ( OSS() << value ); } /* fromStringConverter */ static inline void fromStringConverter(const String & st, Bool & value) { value = (st == "true" ) ? true : false; } static inline void fromStringConverter(const String & st, String & value) { value = st; } template static inline void fromStringConverter(const String & st, _Tp & value) { std::istringstream iss (st); iss >> value; } /* getValueToConvert */ // template // static inline // String getValueToConvert(XML::Node node) // { // return XML::GetNodeValue( node ); // } // template <> // inline // String getValueToConvert(XML::Node node) // { // return XML::GetAttributeByName( node, BIN_STMGR::id_attribute::Get() ); // } /* fromNodeConverter */ // template // static inline // void fromNodeConverter(XML::Node node, _Tp & value) // { // fromStringConverter( getValueToConvert( node ), value ); // } // template <> // inline // void fromNodeConverter(XML::Node node, // Complex & value) // { // XML::Node node_real = XML::FindElementByName( node, BIN_STMGR::real_tag::Get() ); // XML::Node node_imag = XML::FindElementByName( node, BIN_STMGR::imag_tag::Get() ); // Scalar real = -1.0; // Scalar imag = -1.0; // fromStringConverter( getValueToConvert( node_real ), real ); // fromStringConverter( getValueToConvert( node_imag ), imag ); // value = Complex( real,imag ); // } /************ Generic Functions ************/ /* AttributeWriter */ template static inline void AttributeWriter(Pointer & p_obj, const String & name, _Tp value) { assert(p_obj); // XMLInternalObject & obj = dynamic_cast(*p_obj); // XML::Node node = obj.node_; // assert(node); // String attrValue; // toStringConverter( value, attrValue ); // XML::SetAttribute( node, name, attrValue ); } template <> inline void AttributeWriter(Pointer & p_obj, const String & name, Complex value) { assert(p_obj); // XMLInternalObject & obj = dynamic_cast(*p_obj); // XML::Node node = obj.node_; // assert(node); // XML::Node child = XML::NewNode( BIN_STMGR::numericalcomplex_tag::Get() ); // assert(child); // XML::SetAttribute( child, BIN_STMGR::name_attribute::Get(), name ); // XML::Node real = XML::NewNode( BIN_STMGR::real_tag::Get(), OSS() << value.real() ); // assert(real); // XML::AddChild( child, real ); // XML::Node imag = XML::NewNode( BIN_STMGR::imag_tag::Get(), OSS() << value.imag() ); // assert(imag); // XML::AddChild( child, imag ); // XML::AddChild( node, child ); } /* AttributeReader */ template static inline void AttributeReader(TAG tag, Pointer & p_state, const String & name, _Tp & value) { assert(p_state); // String st = XML::GetAttributeByName( p_state->current_, name ); // fromStringConverter( st, value ); } /* IndexedValueWriter */ // template // static inline // void IndexedValueWriter(TAG tag, // Pointer & p_obj, // UnsignedInteger index, // _Tp value) // { // assert(p_obj); // XMLInternalObject & obj = dynamic_cast(*p_obj); // XML::Node node = obj.node_; // assert(node); // String attrValue; // toStringConverter( value, attrValue ); // XML::Node child = XML::NewNode( tag.Get(), attrValue ); // assert(child); // XML::SetAttribute( child, BIN_STMGR::index_attribute::Get(), OSS() << index ); // XML::AddChild( node, child ); // } // template <> // inline // void IndexedValueWriter(BIN_STMGR::numericalcomplex_tag tag, // Pointer & p_obj, // UnsignedInteger index, // Complex value) // { // assert(p_obj); // XMLInternalObject & obj = dynamic_cast(*p_obj); // XML::Node node = obj.node_; // assert(node); // XML::Node child = XML::NewNode( BIN_STMGR::numericalcomplex_tag::Get() ); // assert(child); // XML::SetAttribute( child, BIN_STMGR::index_attribute::Get(), OSS() << index ); // XML::Node real = XML::NewNode( BIN_STMGR::real_tag::Get(), OSS() << value.real() ); // assert(real); // XML::AddChild( child, real ); // XML::Node imag = XML::NewNode( BIN_STMGR::imag_tag::Get(), OSS() << value.imag() ); // assert(imag); // XML::AddChild( child, imag ); // XML::AddChild( node, child ); // } /* IndexedValueReader */ // template // static inline // void IndexedValueReader(TAG tag, // Pointer & p_obj, // UnsignedInteger index, // _Tp & value) // { // assert(p_obj); // BinaryStorageManagerState & state = dynamic_cast(*p_obj); // XML::Node node; // while ( node = XML::FindNextElementByName( state.current_, tag.Get() ) ) { // UnsignedInteger idx = 0; // fromStringConverter( XML::GetAttributeByName(node, BIN_STMGR::index_attribute::Get()), idx ); // state.next(); // if (idx == index) { // fromNodeConverter( node, value ); // return; // } // } // LOGWARN( OSS() << "Failed when reading indexed value. Expected tag '" << tag.Get() // << "'. Got '" << XML::GetNodeName(state.current_) << "'" ); // } /* NamedObjectWriter */ // template // static inline // void NamedObjectWriter(TAG tag, // Pointer & p_obj, // const String & name, // _Tp & value) // { // assert(p_obj); // XMLInternalObject & obj = dynamic_cast(*p_obj); // XML::Node node = obj.node_; // assert(node); // XML::Node child = XML::NewNode( tag.Get() ); // assert(child); // XML::SetAttribute( child, BIN_STMGR::member_attribute::Get(), name); // XML::SetAttribute( child, BIN_STMGR::id_attribute::Get(), OSS() << value.getId() ); // XML::AddChild( node, child ); // } /* NamedObjectReader */ // template // static inline // int NamedObjectReader(TAG tag, // Pointer & p_obj, // const String & name, // _Tp & value) // { // assert(p_obj); // BinaryStorageManagerState state = dynamic_cast(*p_obj); // XML::Node node = XML::FindElementByName( state.current_, tag.Get() ); // while ( node ) { // String nm; // fromStringConverter( XML::GetAttributeByName(node, BIN_STMGR::member_attribute::Get()), nm ); // if (nm == name) { // fromNodeConverter( node, value ); // return 1; // } // node = XML::FindNextElementByName( node, tag.Get() ); // } // return 0; // } /************ Type = Bool ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, Bool value) { writeToFile( filefd_, name ); writeToFile( filefd_, value ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, Bool & value) { off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token == name) readFromFile( filefd_, value ); else lseek64( filefd_, pos, SEEK_SET ); } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value) { writeToFile( filefd_, value ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value) { readFromFile( filefd_, value ); } /************ Type = UnsignedInteger ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value) { writeToFile( filefd_, name ); writeToFile( filefd_, value ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value) { off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token == name) readFromFile( filefd_, value ); else lseek64( filefd_, pos, SEEK_SET ); } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value) { writeToFile( filefd_, value ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value) { readFromFile( filefd_, value ); } /************ Type = Scalar ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, Scalar value) { writeToFile( filefd_, name ); writeToFile( filefd_, value ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, Scalar & value) { off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token == name) readFromFile( filefd_, value ); else lseek64( filefd_, pos, SEEK_SET ); } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value) { writeToFile( filefd_, value ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value) { readFromFile( filefd_, value ); } /************ Type = Complex ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, Complex value) { writeToFile( filefd_, name ); writeToFile( filefd_, value ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, Complex & value) { off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token == name) readFromFile( filefd_, value ); else lseek64( filefd_, pos, SEEK_SET ); } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value) { writeToFile( filefd_, value ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value) { readFromFile( filefd_, value ); } /************ Type = String ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, const String & value) { writeToFile( filefd_, name ); writeToFile( filefd_, value ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, String & value) { off64_t pos = lseek64( filefd_, 0, SEEK_CUR ); String token; readFromFile( filefd_, token ); if (token == name) readFromFile( filefd_, value ); else lseek64( filefd_, pos, SEEK_SET ); } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value) { writeToFile( filefd_, value ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value) { readFromFile( filefd_, value ); } /************ Type = InterfaceObject ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value) { value.save( *this ); assert(p_obj); writeToFile( filefd_, BIN_STMGR::member_attribute::Get() ); writeToFile( filefd_, name ); writeToFile( filefd_, BIN_STMGR::id_attribute::Get() ); writeToFile( filefd_, value.getId() ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value) { // Id shadowedId; // if (NamedObjectReader( BIN_STMGR::object_tag(), p_obj, name, shadowedId )) { // if (! getStudy()->hasObject(shadowedId)) // throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId // << " in file '" << getFileName() // << "' referenced before used"; // value.setImplementationAsPersistentObject(getStudy()->getObject(shadowedId)); // } } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value) { value.save( *this ); assert(p_obj); writeToFile( filefd_, BIN_STMGR::index_attribute::Get() ); writeToFile( filefd_, index ); writeToFile( filefd_, BIN_STMGR::id_attribute::Get() ); writeToFile( filefd_, value.getId() ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value) { // Id shadowedId; // IndexedValueReader( BIN_STMGR::object_tag(), p_obj, index, shadowedId ); // if (! getStudy()->hasObject(shadowedId)) // throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId // << " in file '" << getFileName() // << "' referenced before used"; // value.setImplementationAsPersistentObject(getStudy()->getObject(shadowedId)); } /************ Type = PersistentObject ************/ /* Add an attribute to an internal object */ void BinaryStorageManager::addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value) { value.save( *this ); assert(p_obj); writeToFile( filefd_, BIN_STMGR::member_attribute::Get() ); writeToFile( filefd_, name ); writeToFile( filefd_, BIN_STMGR::id_attribute::Get() ); writeToFile( filefd_, value.getId() ); } /* Read an attribute */ void BinaryStorageManager::readAttribute(Pointer & p_obj, const String & name, PersistentObject & value) { // Id shadowedId; // if (NamedObjectReader( BIN_STMGR::object_tag(), p_obj, name, shadowedId )) { // if (! getStudy()->hasObject(shadowedId)) // throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId // << " in file '" << getFileName() // << "' referenced before used"; // Study * p_study = getStudy(); // Pointer p_po = p_study->getObject(shadowedId); // Catalog::GetInstance().get(value.getClassName()).assign(value, *p_po); // } } /* Add an indexed value to an internal object */ void BinaryStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value) { value.save( *this ); assert(p_obj); writeToFile( filefd_, BIN_STMGR::index_attribute::Get() ); writeToFile( filefd_, index ); writeToFile( filefd_, BIN_STMGR::id_attribute::Get() ); writeToFile( filefd_, value.getId() ); } /* Read an indexed value */ void BinaryStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value) { // Id shadowedId; // IndexedValueReader( BIN_STMGR::object_tag(), p_obj, index, shadowedId ); // if (! getStudy()->hasObject(shadowedId)) // throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId // << " in file '" << getFileName() // << "' referenced before used"; // Study * p_study = getStudy(); // Pointer p_po = p_study->getObject(shadowedId); // Catalog::GetInstance().get(value.getClassName()).assign(value, *p_po); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/CMakeLists.txt000066400000000000000000000053211307543307100216230ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Memory.cxx) ot_add_source_file (OSS.cxx) ot_add_source_file (PlatformInfo.cxx) ot_add_source_file (AtomicFunctions.cxx) ot_add_source_file (Object.cxx) ot_add_source_file (PersistentObject.cxx) ot_add_source_file (IdFactory.cxx) ot_add_source_file (Catalog.cxx) ot_add_source_file (Exception.cxx) ot_add_source_file (InterfaceObject.cxx) ot_add_source_file (Lockable.cxx) ot_add_source_file (StorageManager.cxx) ot_add_source_file (Os.cxx) ot_add_source_file (Path.cxx) ot_add_source_file (ComparisonOperator.cxx) ot_add_source_file (ComparisonOperatorImplementation.cxx) ot_add_source_file (OStream.cxx) ot_add_source_file (Less.cxx) ot_add_source_file (LessOrEqual.cxx) ot_add_source_file (Equal.cxx) ot_add_source_file (Greater.cxx) ot_add_source_file (GreaterOrEqual.cxx) ot_add_source_file (ResourceMap.cxx) ot_add_source_file (Log.cxx) ot_add_source_file (TTY.cxx) ot_add_source_file (TBB.cxx) ot_add_source_file (Study.cxx) if (LIBXML2_FOUND) ot_add_source_file (XMLStorageManager.cxx) ot_add_source_file (XMLToolbox.cxx) endif (LIBXML2_FOUND) ot_install_header_file (Greater.hxx) ot_install_header_file (ResourceMap.hxx) ot_install_header_file (ComparisonOperatorImplementation.hxx) ot_install_header_file (OStream.hxx) ot_install_header_file (SharedPointer.hxx) ot_install_header_file (StorageManager.hxx) ot_install_header_file (OSS.hxx) ot_install_header_file (Study.hxx) ot_install_header_file (Less.hxx) ot_install_header_file (PersistentObject.hxx) ot_install_header_file (PlatformInfo.hxx) ot_install_header_file (AtomicFunctions.hxx) ot_install_header_file (MutexLock.hxx) ot_install_header_file (Equal.hxx) ot_install_header_file (Pointer.hxx) ot_install_header_file (IdFactory.hxx) ot_install_header_file (Memory.hxx) ot_install_header_file (PersistentObjectFactory.hxx) ot_install_header_file (Lockable.hxx) ot_install_header_file (ComparisonOperator.hxx) ot_install_header_file (TypedInterfaceObject.hxx) ot_install_header_file (InterfaceObject.hxx) ot_install_header_file (OTCommon.hxx) ot_install_header_file (Catalog.hxx) ot_install_header_file (GreaterOrEqual.hxx) ot_install_header_file (Log.hxx) ot_install_header_file (TBB.hxx) ot_install_header_file (TypedCollectionInterfaceObject.hxx) ot_install_header_file (Os.hxx) ot_install_header_file (Object.hxx) ot_install_header_file (LessOrEqual.hxx) ot_install_header_file (Exception.hxx) ot_install_header_file (Path.hxx) ot_install_header_file (TTY.hxx) ot_install_header_file (XMLToolbox.hxx) ot_install_header_file (XMLchar_traits.hxx) if (LIBXML2_FOUND) ot_install_header_file (XMLStorageManager.hxx) endif (LIBXML2_FOUND) openturns-1.9/lib/src/Base/Common/Catalog.cxx000066400000000000000000000100331307543307100211550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Catalog records all user information to a file or tty * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/OSS.hxx" #include "openturns/Catalog.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/MutexLock.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS static pthread_mutex_t Catalog_InstanceMutex_; static Catalog * Catalog_P_instance_ = 0; static const Catalog_init static_initializer_Catalog; Catalog_init::Catalog_init() { if (!Catalog_P_instance_) { #ifndef OT_MUTEXINIT_NOCHECK pthread_mutexattr_t attr; pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK ); pthread_mutex_init( &Catalog_InstanceMutex_, &attr ); #else pthread_mutex_init( &Catalog_InstanceMutex_, NULL ); #endif Catalog_P_instance_ = new Catalog; } assert(Catalog_P_instance_); } Catalog_init::~Catalog_init() { if (Catalog_P_instance_) pthread_mutex_destroy(&Catalog_InstanceMutex_); delete Catalog_P_instance_; Catalog_P_instance_ = 0; } /* Constructor */ Catalog::Catalog() : catalog_() { // Do nothing } /* Destructor */ Catalog::~Catalog() { CatalogType::iterator it; for(it = catalog_.begin(); it != catalog_.end(); ++it) { delete it->second; } } template<> MutexLockSingleton::MutexLockSingleton( Catalog & singleton ) throw() : singleton_(singleton) , lock_(Catalog_InstanceMutex_) {} MutexLockSingleton Catalog::GetInstance() { static const Catalog_init force_instantiation; // Catalog_InstanceMutex_ is always initialized return *Catalog_P_instance_; } /* Get the list of keys */ std::vector Catalog::GetKeys() { return GetInstance().lock().getKeys(); } /* Get the factory from its name */ const PersistentObjectFactory & Catalog::Get(const String & factoryName) { return GetInstance().lock().get( factoryName ); } /* Get the factory from its name */ const PersistentObjectFactory & Catalog::get(const String & factoryName) const { CatalogType::const_iterator it = catalog_.find( factoryName ); if (it == catalog_.end()) throw InvalidArgumentException(HERE) << "No factory named '" << factoryName << "' in Catalog"; return *(it->second); } /* Get the list of keys */ std::vector Catalog::getKeys() const { std::vector keys; for(CatalogType::const_iterator it = catalog_.begin(); it != catalog_.end(); ++it) { keys.push_back(it->first); } return keys; } /* Add a new factory to the catalog */ void Catalog::Add(const String & factoryName, const PersistentObjectFactory * p_factory) { GetInstance().lock().add( factoryName, p_factory ); } /* Add a new factory to the catalog */ void Catalog::add(const String & factoryName, const PersistentObjectFactory * p_factory) { if (catalog_.find( factoryName ) == catalog_.end()) { catalog_[ factoryName ] = p_factory->clone(); } } /* String converter */ String Catalog::__repr__() const { OSS oss; oss << "Catalog={"; const char * separator = "\n "; for(CatalogType::const_iterator it = catalog_.begin(); it != catalog_.end(); ++it, separator = ",\n ") oss << separator << it->first; oss << "\n}"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/ComparisonOperator.cxx000066400000000000000000000032461307543307100234410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComparisonOperator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComparisonOperator.hxx" #include "openturns/Less.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComparisonOperator); /* Default constructor */ ComparisonOperator::ComparisonOperator() : TypedInterfaceObject(new Less()) { // Nothing to do } /* Constructor from implementation */ ComparisonOperator::ComparisonOperator(const ComparisonOperatorImplementation & op) : TypedInterfaceObject(op.clone()) { // Nothing to do } /* Return true if comparison succeeds */ Bool ComparisonOperator::operator()(const Scalar a, const Scalar b) const { return (*getImplementation())(a, b); } Bool ComparisonOperator::compare(Scalar a, Scalar b) const { return (*getImplementation())(a, b); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/ComparisonOperatorImplementation.cxx000066400000000000000000000044471307543307100263530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComparisonOperatorImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComparisonOperatorImplementation); static const Factory Factory_ComparisonOperatorImplementation; /* Default constructor */ ComparisonOperatorImplementation::ComparisonOperatorImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ ComparisonOperatorImplementation * ComparisonOperatorImplementation::clone() const { return new ComparisonOperatorImplementation(*this); } /* Evaluation operator */ Bool ComparisonOperatorImplementation::operator() (const Scalar a, const Scalar b) const { throw NotYetImplementedException(HERE) << "In ComparisonOperatorImplementation::operator() (const Scalar a, const Scalar b) const"; } /* String converter */ String ComparisonOperatorImplementation::__repr__() const { return OSS() << "class=" << ComparisonOperatorImplementation::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Method save() stores the object through the StorageManager */ void ComparisonOperatorImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void ComparisonOperatorImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Equal.cxx000066400000000000000000000035651307543307100206660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Equal * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Equal.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Equal); static const Factory Factory_Equal; /* Default constructor */ Equal::Equal() : ComparisonOperatorImplementation() { // Nothing to do } /* String converter */ String Equal::__repr__() const { return OSS() << "class=" << Equal::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Virtual constructor */ Equal * Equal::clone() const { return new Equal(*this); } /* Return true if comparison succeeds */ Bool Equal::operator() (const Scalar a, const Scalar b) const { return (a == b); } /* Method save() stores the object through the StorageManager */ void Equal::save(Advocate & adv) const { ComparisonOperatorImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Equal::load(Advocate & adv) { ComparisonOperatorImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Exception.cxx000066400000000000000000000074731307543307100215570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Exception defines top-most exception strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include //#include #include "openturns/OSS.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS /* Default constructor */ Exception::Exception(const PointInSourceFile & point) : std::exception() , point_(point) , reason_() , className_("Exception") { // Nothing to do //LOGDEBUG(OSS() << className_ << " typeid = " << typeid(*this).name() ); } /* Copy constructor */ Exception::Exception(const Exception & other) : std::exception(other) , point_(other.point_) , reason_(other.reason_) , className_(other.className_) { //LOGDEBUG(OSS() << className_ << " emited at " << point_.str() << ": " << String(reason_) ); } /* Inheritance constructor */ Exception::Exception(const PointInSourceFile & point, const char * className) : std::exception() , point_(point) , reason_() , className_(className) { // Nothing to do } /* Destructor */ Exception::~Exception() throw() { // Nothing to do } /* String converter */ String Exception::__repr__() const throw() { return OSS() << className_ << " : " << reason_; } /* Point accessor */ const char * Exception::where() const throw() { return point_.str().c_str(); } /* Reason accessor */ const char * Exception::what() const throw() { return reason_.c_str(); } /* Class name accessor */ const char * Exception::type() const throw() { return className_; } /* * @fn std::ostream & operator <<(std::ostream & os, const Exception & obj) * @brief Output stream converter * @param os A STL output stream exception * @param obj The exception read by \em os * @return A reference to \em os * * Operator << converts the Exception object to an output stream * so it is easy to show the reason of the exception. */ std::ostream & operator <<(std::ostream & os, const Exception & obj) { return os << obj.__repr__(); } OStream & operator <<(OStream & OS, const Exception & obj) { return OS << obj.__repr__(); } #define DEFINE_EXCEPTION( CName ) \ static const char * CName ## Name = #CName; \ static const CName CName ## Obj ( HERE ); \ CName::CName(const PointInSourceFile & point) \ : Exception(point, CName ## Name) {} \ CName::~CName () throw() {} DEFINE_EXCEPTION( FileNotFoundException ) DEFINE_EXCEPTION( InternalException ) DEFINE_EXCEPTION( InvalidArgumentException ) DEFINE_EXCEPTION( InvalidDimensionException ) DEFINE_EXCEPTION( NotYetImplementedException ) DEFINE_EXCEPTION( OutOfBoundException ) DEFINE_EXCEPTION( XMLException ) DEFINE_EXCEPTION( XMLParserException ) DEFINE_EXCEPTION( DynamicLibraryException ) DEFINE_EXCEPTION( NotSymmetricDefinitePositiveException ) DEFINE_EXCEPTION( InvalidRangeException ) DEFINE_EXCEPTION( NotDefinedException ) DEFINE_EXCEPTION( FileOpenException ) DEFINE_EXCEPTION( StudyFileParsingException ) DEFINE_EXCEPTION( ObjectNotInStudyException ) DEFINE_EXCEPTION( ConfigurationFileParsingException ) #undef DEFINE_EXCEPTION END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Greater.cxx000066400000000000000000000036251307543307100212050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Greater * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Greater.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Greater); static const Factory Factory_Greater; /* Default constructor */ Greater::Greater() : ComparisonOperatorImplementation() { // Nothing to do } /* String converter */ String Greater::__repr__() const { return OSS() << "class=" << Greater::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Virtual constructor */ Greater * Greater::clone() const { return new Greater(*this); } /* Return true if comparison succeeds */ Bool Greater::operator() (const Scalar a, const Scalar b) const { return (a > b); } /* Method save() stores the object through the StorageManager */ void Greater::save(Advocate & adv) const { ComparisonOperatorImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Greater::load(Advocate & adv) { ComparisonOperatorImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/GreaterOrEqual.cxx000066400000000000000000000040061307543307100224700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all GreaterOrEqual * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GreaterOrEqual.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GreaterOrEqual); static const Factory Factory_GreaterOrEqual; /* Default constructor */ GreaterOrEqual::GreaterOrEqual() : ComparisonOperatorImplementation() { // Nothing to do } /* String converter */ String GreaterOrEqual::__repr__() const { return OSS() << "class=" << GreaterOrEqual::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Virtual constructor */ GreaterOrEqual * GreaterOrEqual::clone() const { return new GreaterOrEqual(*this); } /* Return true if comparison succeeds */ Bool GreaterOrEqual::operator() (const Scalar a, const Scalar b) const { return (a >= b); } /* Method save() stores the object through the StorageManager */ void GreaterOrEqual::save(Advocate & adv) const { ComparisonOperatorImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void GreaterOrEqual::load(Advocate & adv) { ComparisonOperatorImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/IdFactory.cxx000066400000000000000000000022521307543307100214730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class IdFactory builds unique Ids for all Objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/IdFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/OTthread.hxx" #include "openturns/MutexLock.hxx" BEGIN_NAMESPACE_OPENTURNS /* Id accessor */ Id IdFactory::BuildId() { static AtomicInt IdFactory_NextId; return IdFactory_NextId.fetchAndAdd( 1 ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/InterfaceObject.cxx000066400000000000000000000040701307543307100226360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The abstract class InterfaceObject defines the GetImplementation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // for std::ostream #include "openturns/InterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InterfaceObject); /* String converter */ String InterfaceObject::__repr__() const { return getImplementationAsPersistentObject()->__repr__(); } /* String converter */ String InterfaceObject::__str__(const String & offset) const { return getImplementationAsPersistentObject()->__str__(offset); } /* Id accessor */ Id InterfaceObject::getId() const { return getImplementationAsPersistentObject()->getId(); } /* Name accessor */ void InterfaceObject::setName(const String & name) { getImplementationAsPersistentObject()->setName(name); } /* Name accessor */ String InterfaceObject::getName() const { return getImplementationAsPersistentObject()->getName(); } /* Method save() stores the object through the StorageManager */ void InterfaceObject::save(StorageManager & mgr, const String & label) const { getImplementationAsPersistentObject()->save( mgr, label ); } /* Method save() stores the object through the StorageManager */ void InterfaceObject::save(StorageManager & mgr) const { getImplementationAsPersistentObject()->save( mgr ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Less.cxx000066400000000000000000000035461307543307100205240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Less * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Less.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Less); static const Factory Factory_Less; /* Default constructor */ Less::Less() : ComparisonOperatorImplementation() { // Nothing to do } /* String converter */ String Less::__repr__() const { return OSS() << "class=" << Less::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Virtual constructor */ Less * Less::clone() const { return new Less(*this); } /* Return true if comparison succeeds */ Bool Less::operator() (const Scalar a, const Scalar b) const { return (a < b); } /* Method save() stores the object through the StorageManager */ void Less::save(Advocate & adv) const { ComparisonOperatorImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Less::load(Advocate & adv) { ComparisonOperatorImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/LessOrEqual.cxx000066400000000000000000000037261307543307100220150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all LessOrEqual * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LessOrEqual.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LessOrEqual); static const Factory Factory_LessOrEqual; /* Default constructor */ LessOrEqual::LessOrEqual() : ComparisonOperatorImplementation() { // Nothing to do } /* String converter */ String LessOrEqual::__repr__() const { return OSS() << "class=" << LessOrEqual::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ /* Virtual constructor */ LessOrEqual * LessOrEqual::clone() const { return new LessOrEqual(*this); } /* Return true if comparison succeeds */ Bool LessOrEqual::operator() (const Scalar a, const Scalar b) const { return (a <= b); } /* Method save() stores the object through the StorageManager */ void LessOrEqual::save(Advocate & adv) const { ComparisonOperatorImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void LessOrEqual::load(Advocate & adv) { ComparisonOperatorImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Lockable.cxx000066400000000000000000000035111307543307100213220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Lockable defines an interface for the lock functionality * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Lockable.hxx" BEGIN_NAMESPACE_OPENTURNS /* Default constructor */ Lockable::Lockable() { // Initialize the mutex //pthread_mutex_init(&mutex_, NULL); } /* Copy constructor */ Lockable::Lockable(const Lockable & other ///< The copied Thread ) { // Initialize the mutex //pthread_mutex_init(&mutex_, NULL); } /* Destructor */ Lockable::~Lockable() { // Destroy the mutex //pthread_mutex_destroy(&mutex_); } /* Usual constructor */ Lockable::Lock::Lock(const Lockable * p_lockableObject) //: p_mutex_(&p_lockableObject->mutex_) { // Take the mutex //pthread_mutex_lock(p_mutex_); } /* Constructor with another mutex */ // Lockable::Lock::Lock(pthread_mutex_t & mutex) // : p_mutex_(&mutex) // { // // Take the mutex // pthread_mutex_lock(p_mutex_); // } /* Destructor */ Lockable::Lock::~Lock() { // Release the mutex //pthread_mutex_unlock(p_mutex_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Log.cxx000066400000000000000000000221611307543307100203310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Log records all user information to a file or tty * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/OTthread.hxx" #include "openturns/Log.hxx" #include "openturns/OTconfig.hxx" #include "openturns/MutexLock.hxx" BEGIN_NAMESPACE_OPENTURNS static pthread_mutex_t Log_InstanceMutex_; static Log * Log_P_instance_ = 0; static const Log_init static_initializer_Log; static inline _Prefix make_prefix( const _Prefix::Value & color, const _Prefix::Value & nocolor, const _Prefix::Value & prefix) { return _Prefix( color, nocolor, prefix ); } std::ostream & operator << ( std::ostream & os, const _Prefix & pfx ) { return os << (TTY::ColoredOutput() ? pfx.color_ : pfx.nocolor_) << pfx.prefix_; } Log_init::Log_init() { if (!Log_P_instance_) { #ifndef OT_MUTEXINIT_NOCHECK pthread_mutexattr_t attr; pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); pthread_mutex_init( &Log_InstanceMutex_, &attr ); #else pthread_mutex_init( &Log_InstanceMutex_, NULL ); #endif Log_P_instance_ = new Log; Log_P_instance_->push(Log::Entry(Log::INFO, "*** Log Beginning ***")); } assert(Log_P_instance_); } Log_init::~Log_init() { if (Log_P_instance_) { Log_P_instance_->push(Log::Entry(Log::INFO, "*** Log End ***")); pthread_mutex_destroy(&Log_InstanceMutex_); } delete Log_P_instance_; Log_P_instance_ = 0; } const Log::Severity Log::NONE = 0; const Log::Severity Log::ALL = ~0; const Log::Severity Log::DBG = 1 << 0; const Log::Severity Log::INFO = 1 << 2; const Log::Severity Log::USER = 1 << 3; const Log::Severity Log::WARN = 1 << 4; const Log::Severity Log::ERROR = 1 << 5; const Log::Severity Log::TRACE = 1 << 6; const Log::Severity Log::DEFAULT = Log::USER | Log::WARN | Log::ERROR | Log::TRACE; static volatile Log::Severity Log_Severity_ = Log::DEFAULT; /* Constructor */ Log::Log() : logName_(), openturnsLogSeverityVariableName_("OPENTURNS_LOG_SEVERITY"), p_file_(0), previousMessage_(), count_(0), repeat_(1) { logName_[NONE] = make_prefix( String(TTY::GetColor(TTY::DEFAULT)) , "", " " ); logName_[ALL] = make_prefix( String(TTY::GetColor(TTY::DEFAULT)) , "", "ALL" ); logName_[DBG] = make_prefix( String(TTY::GetColor(TTY::DEFAULT)) , "", "DBG" ); logName_[INFO] = make_prefix( String(TTY::GetColor(TTY::GREENFG)) , "", "INF" ); logName_[USER] = make_prefix( String(TTY::GetColor(TTY::CYANFG)) , "", "USR" ); logName_[WARN] = make_prefix( String(TTY::GetColor(TTY::BLUEFG)) + String(TTY::GetColor(TTY::BOLD)), "", "WRN" ); logName_[ERROR] = make_prefix( String(TTY::GetColor(TTY::REDFG)) + String(TTY::GetColor(TTY::BOLD)), "", "ERR" ); logName_[TRACE] = make_prefix( String(TTY::GetColor(TTY::YELLOWFG)) , "", "TRA" ); initSeverityFromEnvironment(); } /* Destructor */ Log::~Log() { delete p_file_; p_file_ = 0; } /* Set Severity according to Openturns LogSeverity Variable */ void Log::initSeverityFromEnvironment() { const char * logSeverityVariableContent = getenv(openturnsLogSeverityVariableName_); if (logSeverityVariableContent != NULL) { String severityVariableContent(logSeverityVariableContent); Severity theSeverity = Log::NONE; const char delim = ','; SignedInteger begPos = 0, endPos; do { // search token endPos = severityVariableContent.find(delim, begPos); if (endPos == static_cast(String::npos)) endPos = severityVariableContent.size(); const String token(severityVariableContent.substr(begPos, endPos - begPos)); // add severity std::map::const_iterator iter; for (iter = logName_.begin(); iter != logName_.end(); ++iter) if (token == iter->second.prefix_) theSeverity |= iter->first; // next token begPos = endPos + 1; } while (endPos != static_cast(severityVariableContent.size())); Show( theSeverity ); } } template<> MutexLockSingleton::MutexLockSingleton( Log & singleton ) throw() : singleton_(singleton) , lock_(Log_InstanceMutex_) {} /* GetInstance gives a locked access to the singleton */ MutexLockSingleton Log::GetInstance() { static const Log_init force_instantiation; // Log_InstanceMutex_ is always initialized return *Log_P_instance_; } void Log::Reset() { } /* Log messages according to its relative severity */ void Log::Debug(const String & msg) { GetInstance().lock().push(Entry(DBG, msg)); } /* Log messages according to its relative severity */ void Log::Info(const String & msg) { GetInstance().lock().push(Entry(INFO, msg)); } /* Log messages according to its relative severity */ void Log::User(const String & msg) { GetInstance().lock().push(Entry(USER, msg)); } /* Log messages according to its relative severity */ void Log::Warn(const String & msg) { GetInstance().lock().push(Entry(WARN, msg)); } /* Log messages according to its relative severity */ void Log::Error(const String & msg) { GetInstance().lock().push(Entry(ERROR, msg)); } /* Log messages according to its relative severity */ void Log::Trace(const String & msg) { GetInstance().lock().push(Entry(TRACE, msg)); } /* Get/Set the severity flags for the messages logged to the file */ void Log::Show(Severity flags) { Atomic::Reset( (int*) & Log_Severity_); Atomic::OrAndFetch( (int*) & Log_Severity_, flags ); } Log::Severity Log::Flags() { return Atomic::OrAndFetch( (int*) & Log_Severity_, 0x00 ); } /* Flush pending messages */ void Log::Flush() { GetInstance().lock().flush(); } /* Does Log show repeated messages or not * If repeat is false then Log shows every messages it receives * even if they are identical to the previous ones. * If repeat is true then Log only shows the first message * and a message counting how much identical messages were * received after that. */ void Log::Repeat( Bool r ) { GetInstance().lock().repeat( r ); } void Log::repeat( Bool r ) { repeat_ = r ? 1 : 0; } void Log::flush() { printRepeatedMessage( previousMessage_ ); previousMessage_ = Entry(); count_ = 0; } /* Append an entry at the end of the list */ void Log::push(const Entry & entry) { std::ostream & os = p_file_ ? *p_file_ : std::clog; if (entry.sev_ & Log::Flags()) { if (entry.sev_ != Log::TRACE && repeat_.get() && entry == previousMessage_) ++count_; else { printRepeatedMessage( previousMessage_ ); previousMessage_ = entry ; count_ = 0; os << logName_[entry.sev_] << " - " << entry.msg_ << TTY::GetColor(TTY::DEFAULT) << std::endl; } } } void Log::printRepeatedMessage(const Entry & entry) { std::ostream & os = p_file_ ? *p_file_ : std::clog; if (count_ > 0) os << logName_[entry.sev_] << " - (previous message repeated " << count_ << " time" << ((count_ == 1) ? "" : "s") << ")" << TTY::GetColor(TTY::DEFAULT) << std::endl; } /* Set the name of the log file */ void Log::SetFile(const FileName & file) { GetInstance().lock().setFile(file); } /* Set the name of the log file */ void Log::setFile(const FileName & file) { push(Entry(INFO, String("Diverting log to file: ") + file)); push(Entry(INFO, "*** Log End ***")); delete p_file_; TTY::ShowColors( false ); p_file_ = new std::ofstream(file.c_str()); push(Entry(INFO, "*** Log Beginning ***")); } /* Color accessor */ void Log::SetColor(const Log::Severity severity, const TTY::Color color) { GetInstance().lock().setColor(severity, String(TTY::GetColor(color))); } void Log::SetColor(const Log::Severity severity, const String & color) { GetInstance().lock().setColor(severity, color); } void Log::setColor(const Log::Severity severity, const String & color) { if (logName_.find(severity) != logName_.end()) logName_[severity].color_ = color; } /* Get the color */ String Log::GetColor(const Log::Severity severity) { return GetInstance().lock().getColor(severity); } String Log::getColor(const Log::Severity severity) const { if (logName_.find(severity) != logName_.end()) return logName_[severity].color_; return String(""); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Memory.cxx000066400000000000000000000200201307543307100210500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file declares memory debugging functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include "openturns/Memory.hxx" #ifdef DEBUG_MEMORY pthread_mutex_t LockNewDelete::NewMutex_ = PTHREAD_MUTEX_INITIALIZER; LockNewDelete::LockNewDelete() { //std::fprintf( stderr, "Lock\n" ); Lock(); } LockNewDelete::~LockNewDelete() { Unlock(); //std::fprintf( stderr, "Unlock\n" ); } void LockNewDelete::Lock() { pthread_mutex_lock( & NewMutex_ ); } void LockNewDelete::Unlock() { pthread_mutex_unlock( & NewMutex_ ); } MemoryImplementation::MemoryImplementation() : memList_(), memSpectrum_(), memoryUsage_(0), fullMemoryUsage_(0), maxMemoryUsage_(0), maxFullMemoryUsage_(0), flag_(false) { std::fprintf( stderr, "Memory debugging enabled. Library will run slowlier.\n" ); } MemoryImplementation::~MemoryImplementation() { std::fprintf( stderr, "Memory used : std=%16zu full=%16zu maxstd=%16zu maxfull=%16zu\n", memoryUsage_, fullMemoryUsage_, maxMemoryUsage_, maxFullMemoryUsage_ ); } MemoryImplementation * Memory::p_impl_ = 0; MemoryImplementation & Memory::GetInstance() { if ( ! p_impl_ ) { void * buf = calloc( 1, sizeof(MemoryImplementation) ); p_impl_ = new(buf) MemoryImplementation; atexit( Memory::Release ); } assert( p_impl_ ); return *p_impl_; } void Memory::Release() { assert( p_impl_ ); p_impl_->~MemoryImplementation(); free( p_impl_ ); p_impl_ = 0; } static void printSpectrumHeader(const char * pfx) { std::fprintf( stderr, "%s%16s : %16s\n", pfx, "size_", "number" ); } class printSpectrumChunk { const char * pfx_; public: printSpectrumChunk(const char * pfx) : pfx_(pfx) {} void operator() (const MemSpectrum::value_type & ref) const { std::fprintf( stderr, "%s%16zu : %16zu\n", pfx_, ref.first, ref.second ); } }; void _printMemorySpectrum(const char * pfx, const MemSpectrum & spectrum) { printSpectrumHeader( pfx ); std::for_each( spectrum.begin(), spectrum.end(), printSpectrumChunk(pfx) ); } static void printMemListHeader(const char * pfx) { std::fprintf( stderr, "%s%16s %16s (%16s)\n", pfx, "addr", "size_", "ptr_"); } static void printChunk(const char * pfx, const _OpenTURNS_memory * p_chunk) { if (p_chunk) { std::fprintf( stderr, "%s%16p %16zu (%16p)\n", pfx, p_chunk, p_chunk->size_, p_chunk->ptr_); } else { std::fprintf( stderr, "%s%16s %16s (%16s)\n", pfx, "*", "*", "*"); } } class printMemListChunk { const char * pfx_; public: printMemListChunk(const char * pfx) : pfx_(pfx) {} void operator() (const MemContainer::value_type & ref) const { const _OpenTURNS_memory * p_chunk = ref.second; printChunk( pfx_, p_chunk ); } }; class makeSpectrum { MemSpectrum & spectrum_; public: makeSpectrum( MemSpectrum & spectrum) : spectrum_(spectrum) {} void operator() (const MemContainer::value_type & ref) const { const _OpenTURNS_memory * p_chunk = ref.second; ++(spectrum_[ p_chunk->size_ ]); } }; void * operator new (size_t sz) { //std::fprintf( stderr, "Entering new (sz = %zu)\n", sz ); void * buf = std::calloc( 1 , sz ); // Allocates storage and set it to zero if (buf == 0) return buf; // Keep trace of allocated storage LockNewDelete lock; MemoryImplementation & inst = Memory::GetInstance(); _OpenTURNS_memory * p_chunk = static_cast<_OpenTURNS_memory *>( std::calloc( 1 , sizeof(_OpenTURNS_memory) ) ); if (p_chunk) { p_chunk->ptr_ = buf; p_chunk->size_ = sz; inst.memList_[ buf ] = p_chunk; ++(inst.memSpectrum_[ sz ]); inst.memoryUsage_ += sz; inst.fullMemoryUsage_ += sz + sizeof(_OpenTURNS_memory); inst.maxMemoryUsage_ = std::max( inst.maxMemoryUsage_, inst.memoryUsage_ ); inst.maxFullMemoryUsage_ = std::max( inst.maxFullMemoryUsage_, inst.fullMemoryUsage_ ); } //printChunk( "new : ", p_chunk ); //std::fprintf( stderr, "Exiting new\n" ); if (inst.flag_) std::fprintf( stderr, "operator new ( %d ) -> %p\n", sz, buf ); return buf; } void operator delete (void * ptr) { //std::fprintf( stderr, "Entering delete (ptr = %p)\n", ptr ); // Check storage and free trace LockNewDelete lock; MemoryImplementation & inst = Memory::GetInstance(); MemContainer::iterator it = inst.memList_.find( ptr ); if (it != inst.memList_.end()) { _OpenTURNS_memory * p_chunk = it->second; inst.memoryUsage_ -= p_chunk->size_; inst.fullMemoryUsage_ -= p_chunk->size_ + sizeof(_OpenTURNS_memory); if (inst.flag_) std::fprintf( stderr, "operator delete ( %d ) <- %p\n", p_chunk->size_, ptr ); inst.memList_.erase( it ); //printChunk( "delete : ", p_chunk ); std::free( p_chunk ); } std::free( ptr ); // Deallocates storage //std::fprintf( stderr, "Exiting delete\n" ); } void * operator new [] (size_t sz) { //std::fprintf( stderr, "Entering new [] (sz = %zu)\n", sz ); void * ptr = operator new ( sz ); //std::fprintf( stderr, "Exiting new []\n" ); return ptr; } void operator delete [] (void * ptr) { //std::fprintf( stderr, "Entering delete [] (ptr = %p)\n", ptr ); operator delete ( ptr ); //std::fprintf( stderr, "Exiting delete []\n" ); } #endif /* DEBUG_MEMORY */ size_t GetMemoryUsage() { #ifdef DEBUG_MEMORY LockNewDelete lock; return Memory::GetInstance().memoryUsage_; #else return 0; #endif /* DEBUG_MEMORY */ } size_t GetFullMemoryUsage() { #ifdef DEBUG_MEMORY LockNewDelete lock; return Memory::GetInstance().fullMemoryUsage_; #else return 0; #endif /* DEBUG_MEMORY */ } size_t GetMaxMemoryUsage() { #ifdef DEBUG_MEMORY LockNewDelete lock; return Memory::GetInstance().maxMemoryUsage_; #else return 0; #endif /* DEBUG_MEMORY */ } size_t GetMaxFullMemoryUsage() { #ifdef DEBUG_MEMORY LockNewDelete lock; return Memory::GetInstance().maxFullMemoryUsage_; #else return 0; #endif /* DEBUG_MEMORY */ } void printMemoryUsage() { #ifdef DEBUG_MEMORY LockNewDelete lock; MemoryImplementation & inst = Memory::GetInstance(); const char pfx1[] = "usage : "; printMemListHeader( pfx1 ); std::for_each( inst.memList_.begin(), inst.memList_.end(), printMemListChunk( pfx1 ) ); const char pfx2[] = "cur. sp. : "; MemSpectrum spectrum; std::for_each( inst.memList_.begin(), inst.memList_.end(), makeSpectrum( spectrum ) ); _printMemorySpectrum( pfx2, spectrum ); std::fprintf( stderr, "summary : std=%16zu full=%16zu maxstd=%16zu maxfull=%16zu\n", inst.memoryUsage_, inst.fullMemoryUsage_, inst.maxMemoryUsage_, inst.maxFullMemoryUsage_ ); #else fprintf( stderr, "No memory debugging available. Compile with -DDEBUG_MEMORY flag or --enable-debug=memory option.\n" ); #endif /* DEBUG_MEMORY */ } void printMemorySpectrum() { #ifdef DEBUG_MEMORY LockNewDelete lock; const char pfx[] = "cum. sp. : "; _printMemorySpectrum( pfx, Memory::GetInstance().memSpectrum_ ); #else fprintf( stderr, "No memory debugging available. Compile with -DDEBUG_MEMORY flag or --enable-debug=memory option.\n" ); #endif /* DEBUG_MEMORY */ } void SetMemoryFlag(bool flag) { #ifdef DEBUG_MEMORY LockNewDelete lock; Memory::GetInstance().flag_ = flag; #else fprintf( stderr, "No memory debugging available. Compile with -DDEBUG_MEMORY flag or --enable-debug=memory option.\n" ); #endif /* DEBUG_MEMORY */ } openturns-1.9/lib/src/Base/Common/OSS.cxx000066400000000000000000000022731307543307100202560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class OSS streams out objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OSS.hxx" #include "openturns/PlatformInfo.hxx" BEGIN_NAMESPACE_OPENTURNS OSS::OSS(bool full) : oss_(), precision_(PlatformInfo::GetNumericalPrecision()), full_(full) {} OSS::operator std::string() const { return oss_.str(); } std::string OSS::str() const { return oss_.str(); } void OSS::clear() { oss_.clear(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/OStream.cxx000066400000000000000000000072671307543307100211740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Ostream is an helper for pretty printing of Objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/OStream.hxx" BEGIN_NAMESPACE_OPENTURNS // This operator writes Object derived objects to OStream OStream & operator << (OStream & OS, const Object & obj) { OS.getStream() << obj.__repr__(); return OS; } OStream & operator << (OStream & OS, const String & st) { OS.getStream() << st; return OS; } OStream & operator << (OStream & OS, const char * ch) { OS.getStream() << ch; return OS; } OStream & operator << (OStream & OS, int val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, long val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, long long val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, short val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, unsigned int val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, unsigned long val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, unsigned long long val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, unsigned short val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, char val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, bool val) { OS.getStream() << (val ? "true" : "false"); return OS; } OStream & operator << (OStream & OS, float val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, double val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, long double val) { OS.getStream() << val; return OS; } OStream & operator << (OStream & OS, const Complex & c) { OS.getStream() << c; return OS; } OStream & operator << (OStream & OS, const void * ptr) { OS.getStream() << ptr; return OS; } OStream & operator << (OStream & OS, std::ostream & (*manip)(std::ostream &)) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::ios_base & (*manip)(std::ios_base &)) { OS.getStream() << manip; return OS; } #if defined(__GNUC__) && !defined(_LIBCPP_VERSION) OStream & operator << (OStream & OS, std::_Setw manip) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::_Setprecision manip) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::_Setbase manip) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::_Resetiosflags manip) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::_Setiosflags manip) { OS.getStream() << manip; return OS; } OStream & operator << (OStream & OS, std::_Setfill manip) { OS.getStream() << manip; return OS; } #endif END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Object.cxx000066400000000000000000000025761307543307100210260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Object is the top-most class of OpenTURNS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Object.hxx" #include "openturns/OSS.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Object); /* Destructor */ Object::~Object() { // Nothing to do } /* String converter */ String Object::__repr__() const { return OSS(true) << "class=" << getClassName(); } /* Pretty string converter */ String Object::__str__(const String & offset) const { return __repr__(); } /* Output stream converter */ std::ostream & operator <<(std::ostream & os, const Object & obj) { return os << obj.__str__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Os.cxx000066400000000000000000000160051307543307100201710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class provides operating system specific variables * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTwindows.h" // For CreateProcess #include "openturns/Os.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/ResourceMap.hxx" // For ResourceMap // include OTConfig that defines OPENTURNS_HAVE_XXX #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_UNISTD_H # include // for rmdir, unlink #endif #include // for system(3) #ifdef OPENTURNS_HAVE_SYS_TYPES_H # include // for stat #endif #ifdef OPENTURNS_HAVE_SYS_STAT_H # include // for stat #endif #include #ifndef WIN32 #include // for stat(2) #endif #ifdef _MSC_VER # include # define MKDIR(p, mode) _mkdir(p) # if !defined(S_ISDIR) # define S_ISDIR(mode) (((mode) & S_IFDIR) != 0) # endif # if !defined(S_ISREG) # define S_ISREG(mode) (((mode) & S_IFREG) != 0) # endif #elif defined(WIN32) # define MKDIR(p, mode) mkdir(p) #else # define MKDIR(p, mode) mkdir(p, mode) #endif BEGIN_NAMESPACE_OPENTURNS const char * Os::GetDirectorySeparator() { #ifndef WIN32 return "/"; #else return "\\"; #endif } const char * Os::GetDirectoryListSeparator() { #ifndef WIN32 return ":"; #else return ";"; #endif } const char * Os::GetEndOfLine() { #ifndef __MINGW32__ return "\n"; #else return "\r\n"; #endif } String Os::GetDeleteCommandOutput() { #ifndef WIN32 return " > /dev/null 2>&1"; #else return " > NUL"; #endif } // Returns 0 if no error int Os::ExecuteCommand(const String & command) { int rc = -1; LOGINFO( OSS() << "Execute command=" << command ); #ifdef WIN32 if ( ResourceMap::GetAsUnsignedInteger("Os-create-process") == 1 ) { // Startup information STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; // Process information PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(pi)); // Create the process DWORD dwProcessFlags = 0; char * cmd = strdup(command.c_str()); const Bool processOk = CreateProcess(NULL, cmd, NULL, NULL, true, dwProcessFlags, NULL, NULL, &si, &pi) != 0; free(cmd); if ( processOk ) { // Wait for the external application to finish DWORD waitRc = WaitForSingleObject(pi.hProcess, INFINITE); if ( waitRc != WAIT_FAILED ) { DWORD exit_code = 0; const Bool codeOk = GetExitCodeProcess(pi.hProcess, &exit_code) != 0; if (codeOk) { rc = exit_code; } else { rc = GetLastError(); } } // Close everything CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else { rc = GetLastError(); } } // use create process else #endif { rc = system(command.c_str()); } LOGINFO( OSS() << "Return code=" << rc << " for command=" << command ); return rc; } void Os::Remove(const String& fileName) { if (ResourceMap::GetAsUnsignedInteger("Os-RemoveFiles") == 0) return; if (remove(fileName.c_str()) == -1) { Log::Warn(OSS() << "Warning: cannot remove file " << fileName); } } // Function helper for Os::MakeDirectory: replace backslash by slash static void convert_backslashes(String & path) { #ifdef _WIN32 const char* current_char = path.c_str(); String::size_type pos = 0; // On Windows, leading \\ is for network paths and must not be stripped if (*current_char == '\\' && *(current_char + 1) == '\\') { pos = 2; current_char += pos; } for ( ; *current_char != '\0'; ++pos, ++current_char ) { if (*current_char == '\\') path[pos] = '/'; } #endif } Bool Os::IsDirectory(const String & fileName) { struct stat dir_stat; if(stat(fileName.c_str(), &dir_stat) != 0) return false; return S_ISDIR(dir_stat.st_mode); } Bool Os::IsFile(const String & fileName) { struct stat dir_stat; if(stat(fileName.c_str(), &dir_stat) != 0) return false; return S_ISREG(dir_stat.st_mode); } // Returns 0 if no error int Os::MakeDirectory(const String & path) { if (path.empty()) return 1; if (IsDirectory(path)) return 0; String slashPath(path); convert_backslashes(slashPath); String::size_type pos = 0; while((pos = slashPath.find('/', pos)) != String::npos) { String current_dir(path.substr(0, pos)); const char * cpath = current_dir.c_str(); if (!IsDirectory(current_dir) && (0 != MKDIR(cpath, 0777))) return 1; pos++; } return 0; } #ifndef WIN32 static int deleteRegularFileOrDirectory(const char * path, const struct stat * p_sb, int typeflag, struct FTW * ftwbuf) { int rc; switch (typeflag) { case FTW_DP: rc = rmdir( path ); if ( rc < 0 ) return 1; break; case FTW_SL: case FTW_SLN: case FTW_F: rc = unlink( path ); if ( rc < 0 ) return 1; break; } /* end switch */ return 0; } #endif /* !WIN32 */ // Delete a directory and its contents recursively. Returns 0 if no error int Os::DeleteDirectory(const String & path) { if (path.empty()) return 1; if (!IsDirectory(path)) return 1; // Refuse to delete root directory (/) and current directory (.) if (path == "/" || path == ".") return 1; const char * directory = path.c_str(); #ifdef WIN32 if ( ((strlen( directory ) == 3) && (directory[1] == ':') && (directory[2] == '\\' || directory[2] == '/')) || ((strlen( directory ) == 2) && (directory[1] == ':')) ) { // do not delete root directory return 1; } #endif int rc = 0; #ifndef WIN32 rc = nftw(directory, deleteRegularFileOrDirectory, 20, FTW_DEPTH); #else /* WIN32 */ UnsignedInteger countdown = ResourceMap::GetAsUnsignedInteger("output-files-timeout"); String rmdirCmd("rmdir /Q /S \"" + path + "\""); Bool directoryExists = true; do { rc = system((rmdirCmd + " > NUL 2>&1").c_str()); // check if directory still there (rmdir dos command always return 0) directoryExists = IsDirectory(path); if (directoryExists) { if (countdown == 0) return 1; -- countdown; } Sleep(1000); } while (directoryExists); #endif /* WIN32 */ return rc; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Path.cxx000066400000000000000000000322371307543307100205110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class provides all the treatments for wrapper file manipulation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // for std::vector #include // for std::string #include // for getenv #include // for strcpy #ifdef WIN32 #include // for ofstream #include "openturns/OTwindows.h" // for GetTempFileName, GetModuleFileName #ifdef _MSC_VER # include #define mkdir(p) _mkdir(p) #endif /* _MSC_VER */ #endif /* WIN32 */ // Include OTConfig that defines OPENTURNS_HAVE_XXX // It also defines INSTALL_PATH, SYSCONFIG_PATH, DATA_PATH, OPENTURNS_HOME_ENV_VAR #include "openturns/OTconfig.hxx" #include "openturns/OTthread.hxx" #include "openturns/OSS.hxx" #include "openturns/Path.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Os.hxx" #include "openturns/Log.hxx" #ifdef OPENTURNS_HAVE_LIBGEN_H #include // for dirname #endif #ifdef OPENTURNS_HAVE_UNISTD_H #include // for getpid, readlink, close #endif #ifndef INSTALL_PATH #error "INSTALL_PATH is NOT defined. Check configuration." #endif #ifdef OPENTURNS_HAVE_DIRENT_H #include #endif #ifndef SYSCONFIG_PATH #error "SYSCONFIG_PATH is NOT defined. Check configuration." #endif #ifndef DATA_PATH #error "DATA_PATH is NOT defined. Check configuration." #endif #ifndef OPENTURNS_HOME_ENV_VAR #error "OPENTURNS_HOME_ENV_VAR is NOT defined. Check configuration." #endif BEGIN_NAMESPACE_OPENTURNS /* The environment variable name */ const char * Path::OpenturnsConfigPathVariableName_ = "OPENTURNS_CONFIG_PATH"; /* The HOME subdirectory path */ const char * Path::HomeConfigSubdirectory_ = "/openturns/etc"; /* The 'openturns' configuration subdirectory path */ const char * Path::PrefixConfigSubdirectory_ = "/openturns"; /* * Default constructor */ Path::Path() { // Nothing to do } /** * Return the OpenTURNS prefix * * The search rule is: check the following paths, in that order: * + if the env var OPENTURNS_HOME exists, return ${OPENTURNS_HOME} if it exists and is a * directory, * + otherwise return the installation path ${prefix}, where 'prefix' is the installation path * of the platform as provided at configuration time. */ FileName Path::GetInstallationDirectory() { FileName directory; bool dirExists = false; const char * otHome = getenv(OPENTURNS_HOME_ENV_VAR); if (otHome) { directory = String(otHome); dirExists = Os::IsDirectory(directory); } if (!dirExists) { directory = String(INSTALL_PATH); } return directory; } FileName Path::GetExecutableDirectory() { // get executable absolute path #ifdef _WIN32 TCHAR szPath[MAX_PATH]; GetModuleFileName(NULL, szPath, MAX_PATH); #else const UnsignedInteger MAX_PATH = 512; char path[MAX_PATH]; char szPath[MAX_PATH]; pid_t pid = getpid(); sprintf(path, "/proc/%d/exe", pid); if (readlink(path, szPath, MAX_PATH) == -1) perror("readlink"); #endif // get parent dir #ifdef OPENTURNS_HAVE_LIBGEN_H String pythonDir(dirname(szPath)); #else String pythonDir(szPath); if (pythonDir.empty()) return pythonDir; for(SignedInteger i = pythonDir.size() - 1; i >= 0; -- i) { /* We do not care about escaped backslashes */ if(pythonDir.at(i) == '\\') { pythonDir.resize(i); break; } } #endif return pythonDir; } /** * Analyse the process environment * and return a list of directories to search in for configuration files. * * The search rule is :look for the file in the following directories, in that order : * + if the env var OPENTURNS_CONFIG_PATH exists, in directories listed in * ${OPENTURNS_CONFIG_PATH} (see openturnsConfigPathVariableName_) * + in directory ${HOME}/openturns/etc (see homeSubdirectory_) * + in standard config directory (either ${OPENTURNS_HOME}/etc/openturns if OPENTURNS_HOME * is defined and if this path is a directory, or the path ${prefix}/etc/openturns * where 'prefix' is the installation path of the platform as provided at configuration time. */ Path::DirectoryList Path::GetConfigDirectoryList() { // Create an empty directory list DirectoryList directoryList; // ... search in ${OPENTURNS_CONFIG_PATH} // Because OPENTURNS_CONFIG_PATH is a path, we have to split it char * openturnsConfigDirectory = getenv(Path::OpenturnsConfigPathVariableName_); if (openturnsConfigDirectory) { std::string pathToSplit = openturnsConfigDirectory; String::size_type lastColonPosition = 0; String::size_type currentColonPosition = 0; while ( ((currentColonPosition = pathToSplit.find(Os::GetDirectoryListSeparator(), lastColonPosition)) != String::npos) && ( currentColonPosition < pathToSplit.size() ) ) { FileName directory(pathToSplit, lastColonPosition, currentColonPosition - lastColonPosition); if (directory.size() == 0) directory = "."; directoryList.push_back(directory); lastColonPosition = currentColonPosition + 1; } /* end while */ FileName directory(pathToSplit, lastColonPosition, pathToSplit.size() - lastColonPosition); if (directory.size() == 0) directory = "."; directoryList.push_back(directory); } // ... search in ${HOME}/openturns/etc char * homeDirectory = getenv("HOME"); if (homeDirectory) { FileName directory = homeDirectory; directory += Path::HomeConfigSubdirectory_; directoryList.push_back(directory); } // ... search in standard config directory // (${OPENTURNS_HOME}/etc/openturns or ${prefix}/etc/openturns) FileName directory; bool dirExists = false; const char * otHome = getenv(OPENTURNS_HOME_ENV_VAR); if (otHome) { directory = String(otHome); #ifndef WIN32 directory += "/etc"; directory += PrefixConfigSubdirectory_; #endif dirExists = Os::IsDirectory(directory); } if (!dirExists) { directory = String(SYSCONFIG_PATH) + PrefixConfigSubdirectory_; } directoryList.push_back(directory); // When the compile-time prefix is not the actual installation prefix, // guess from the Python location, happens with the Windows installer #ifdef _WIN32 directoryList.push_back(GetExecutableDirectory() + "\\Lib\\site-packages\\openturns"); #endif return directoryList; } /* * Find a file named 'name' located in one of the directories * listed in 'dirList'. The function returns the full path (directory/name) * of the first match. */ FileName Path::FindFileByNameInDirectoryList(const FileName & name, const DirectoryList & dirList) { if (name.size() == 0) throw FileNotFoundException(HERE) << "Can NOT find a file with no name"; // If the name starts with a slash then it is an absolute path // and it did not need to be searched in the directory list // so we return it as is. if (name[0] == '/') return name; #ifdef WIN32 if ((name.size() > 1) && (name[1] == ':')) return name; #endif // We create the full path name of the file with each directory // of the list in turn, and then we check if this file exists DirectoryList::const_iterator currentDirectory; for(currentDirectory = dirList.begin(); currentDirectory != dirList.end(); ++ currentDirectory) { LOGDEBUG(OSS() << "Searching '" << name << "' in directory : " << *currentDirectory); FileName fullPathForFile(*currentDirectory + Os::GetDirectorySeparator() + name); if (Os::IsFile(fullPathForFile)) return fullPathForFile; } // Hmm ! Seems we have a problem... // No file was found is the search path so we throw an exception OSS errorMessage; errorMessage << "No file named '" << name << "' was found in any of those directories :"; for(currentDirectory = dirList.begin(); currentDirectory != dirList.end(); ++ currentDirectory) { errorMessage << " " << *currentDirectory; } throw FileNotFoundException(HERE) << String(errorMessage); } /* end findFileByNameInDirectoryList */ #ifdef WIN32 /* * Convert slash to antislash. * ex: if filename = C:/windows/temp, return C:/windows/temp */ void Path::AntislashFileName(FileName & filename) { for (UnsignedInteger i = 0; i < filename.size(); ++ i) if (filename.at(i) == '/') filename.at(i) = '\\'; } /* * add windows backslash to filename (e.g. for compatibility with R) * ex: if filename = C:\windows\temp, return C:\\windows\\temp */ void Path::DoubleslashFileName(FileName & filename) { String::size_type loc = filename.find(Os::GetDirectorySeparator()); while(loc != String::npos) { // "\" at the last pos if(loc == filename.size() - 1) { filename.insert(loc, Os::GetDirectorySeparator()); break; } // "\" in the middle if(filename.at(loc + 1) != Os::GetDirectorySeparator()[0]) filename.insert(loc, Os::GetDirectorySeparator()); // else: no "\", or "\\" in the middle loc = filename.find(Os::GetDirectorySeparator(), loc + 2); } } #endif FileName Path::GetTemporaryDirectory() { FileName tempDirectory; String tempStr(ResourceMap::Get("temporary-directory")); #ifndef WIN32 tempDirectory = tempStr; #else const char * tempEnv = getenv(tempStr.c_str()); if (tempEnv) { // if temporary-directory is an env var, return the content of the env var. tempDirectory = String(tempEnv); } else { // if not, just return the content of temporary-directory tempDirectory = tempStr; } #endif return tempDirectory; } /* Build a temporary file name given a pattern */ FileName Path::BuildTemporaryFileName(const FileName & pattern) { #ifndef WIN32 String fullPattern(GetTemporaryDirectory() + String(Os::GetDirectorySeparator()) + pattern); UnsignedInteger size = fullPattern.size(); char temporaryFileName[size + 1]; strcpy(temporaryFileName, fullPattern.c_str()); temporaryFileName[size] = 0; int fileDescriptor(mkstemp(temporaryFileName)); close(fileDescriptor); return temporaryFileName; #else // get uniq name char temporaryFileName[MAX_PATH]; GetTempFileName(GetTemporaryDirectory().c_str(), // directory for tmp files TEXT(pattern.c_str()), // temp file name prefix 0, // create unique name temporaryFileName); // buffer for name // check temporary filename if (!Os::IsFile(String(temporaryFileName))) LOGERROR(OSS() << "Temporary file name " << temporaryFileName << " does NOT exists. Check your temporary directory."); // add "/" to the directory String slashedTemporaryFileName(temporaryFileName); DoubleslashFileName(slashedTemporaryFileName); return slashedTemporaryFileName; #endif } /* Create a temporary directory. */ String Path::CreateTemporaryDirectory (const FileName & directoryPrefix) { if (directoryPrefix.size() == 0) throw InvalidArgumentException(HERE) << "No prefix defined to create temporary directory"; #ifndef WIN32 String tempDir(GetTemporaryDirectory()); tempDir += Os::GetDirectorySeparator(); tempDir += directoryPrefix; tempDir += "_XXXXXX"; char * tempDirName = (char *) calloc(tempDir.size() + 1, sizeof (char)); strncpy(tempDirName, tempDir.c_str(), tempDir.size() + 1); char *tempDirName_p = mkdtemp(tempDirName); if ( ! tempDirName_p ) throw FileOpenException(HERE) << "Could not create temporary directory from template " << tempDir; const String finalTempDirName(tempDirName); free(tempDirName); #else char temporaryDirName[MAX_PATH]; int ret = 0; for (int retry = 10000; retry >= 0; --retry) { ret = GetTempFileName(GetTemporaryDirectory().c_str(), // directory for tmp files TEXT((directoryPrefix + "abc").c_str()), // temp file name prefix (only 3 characters are used) 0, // create unique name temporaryDirName); // buffer for name if (0 == ret) { ret = -1; continue; } DeleteFile(temporaryDirName); ret = mkdir(temporaryDirName); if (0 == ret) break; } if (0 != ret) { LOGERROR(OSS() << "Can't create temporary directory."); temporaryDirName[0] = '\0'; } const String finalTempDirName(temporaryDirName); #endif return finalTempDirName; } /* Delete a temporary directory. */ void Path::DeleteTemporaryDirectory (const FileName & directoryName) { if (Os::DeleteDirectory(directoryName)) LOGWARN(OSS() << "Can't remove temporary directory " << directoryName); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/PersistentObject.cxx000066400000000000000000000044351307543307100231030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class PersistentObject saves and reloads the object's internal state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObject.hxx" #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PersistentObject); /* Method save() stores the object through the StorageManager */ void PersistentObject::save(StorageManager & mgr, const String & label, bool fromStudy) const { if (! mgr.isSavedObject(id_)) { Pointer p_adv ( mgr.registerObject(*this, fromStudy) ); p_adv->setLabel( label ); save(*p_adv); p_adv->saveObject(); mgr.markObjectAsSaved(id_); } } /* Method save() stores the object through the StorageManager */ void PersistentObject::save(StorageManager & mgr, bool fromStudy) const { if (! mgr.isSavedObject(id_)) { Pointer p_adv ( mgr.registerObject(*this, fromStudy) ); save(*p_adv); p_adv->saveObject(); mgr.markObjectAsSaved(id_); } } /* Method save() stores the object through the StorageManager */ void PersistentObject::save(Advocate & adv) const { adv.saveAttribute( "class", getClassName() ); adv.saveAttribute( "id", id_ ); if ( hasVisibleName() ) { adv.saveAttribute( "name", getName() ); } } /* Method load() reloads the object from the StorageManager */ void PersistentObject::load(Advocate & adv) { adv.loadAttribute( "id", shadowedId_); if ( adv.hasAttribute("name") ) { String name; adv.loadAttribute( "name", name ); setName( name ); } } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/PersistentObjectFactory.cxx000066400000000000000000000032761307543307100244350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class PersistentObjectFactory saves and reloads the object's internal state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Catalog.hxx" BEGIN_NAMESPACE_OPENTURNS /* Virtual constructor */ // PersistentObjectFactory * PersistentObjectFactory::clone() const = 0 /* This method register the factory into the Catalog */ void PersistentObjectFactory::registerMe(const String & className) const { Catalog::Add(className, this); } /* Method build() creates a new PersistentObject from the storage manager */ // PersistentObject * PersistentObjectFactory::build(const StorageManager & mgr) const = 0; /* Accessor to PersistentObject's shadowed id */ void PersistentObjectFactory::setShadowedId(PersistentObject & obj, Id id) const { obj.setShadowedId(id); } Id PersistentObjectFactory::getShadowedId(PersistentObject & obj) const { return obj.getShadowedId(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/PlatformInfo.cxx000066400000000000000000000034441307543307100222130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class PlatformInfo gives information about the library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTconfig.hxx" #include "openturns/OTconfigureArgs.hxx" #include "openturns/OSS.hxx" #include "openturns/Log.hxx" #include "openturns/PlatformInfo.hxx" BEGIN_NAMESPACE_OPENTURNS UnsignedInteger PlatformInfo::Precision_ = 6; PlatformInfo::PlatformInfo() { } String PlatformInfo::GetVersion() { return PACKAGE_VERSION; } String PlatformInfo::GetName() { return PACKAGE_NAME; } String PlatformInfo::GetRevision() { return Revision; } String PlatformInfo::GetDate() { return ConfigureDate; } String PlatformInfo::GetInstallationDirectory() { return InstallationDirectory; } String PlatformInfo::GetConfigureCommandLine() { return ConfigureArgs; } UnsignedInteger PlatformInfo::GetNumericalPrecision() { return PlatformInfo::Precision_; } void PlatformInfo::SetNumericalPrecision(SignedInteger precision) { PlatformInfo::Precision_ = (precision >= 0) ? precision : PlatformInfo::Precision_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/ResourceMap.cxx000066400000000000000000001131721307543307100220400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ResourceMap defines top-most resourceMap strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // for sysconf #include "openturns/OTthread.hxx" #include "openturns/OTconfig.hxx" #include "openturns/OSS.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" #include "openturns/Path.hxx" #include "openturns/XMLToolbox.hxx" BEGIN_NAMESPACE_OPENTURNS static const char * ConfigurationFileName = "openturns.conf"; #if defined OPENTURNS_HAVE_LIBXML2 static const char * RootElementName = "openturns-configuration"; static const char * XMLTag_value = "value"; #endif static pthread_mutex_t ResourceMap_InstanceMutex_; static ResourceMap * ResourceMap_P_instance_ = 0; static const ResourceMap_init static_initializer_ResourceMap; ResourceMap_init::ResourceMap_init() { if (!ResourceMap_P_instance_) { #ifndef OT_MUTEXINIT_NOCHECK pthread_mutexattr_t attr; pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); pthread_mutex_init( &ResourceMap_InstanceMutex_, &attr ); #else pthread_mutex_init( &ResourceMap_InstanceMutex_, NULL ); #endif ResourceMap_P_instance_ = new ResourceMap; } assert(ResourceMap_P_instance_); } ResourceMap_init::~ResourceMap_init() { if (ResourceMap_P_instance_) pthread_mutex_destroy(&ResourceMap_InstanceMutex_); delete ResourceMap_P_instance_; ResourceMap_P_instance_ = 0; } template<> MutexLockSingleton::MutexLockSingleton( ResourceMap & singleton ) throw() : singleton_(singleton) , lock_(ResourceMap_InstanceMutex_) {} /* GetInstance gives a locked access to the singleton */ MutexLockSingleton ResourceMap::GetInstance() { static const ResourceMap_init force_instantiation; // ResourceMap_InstanceMutex_ is always initialized return *ResourceMap_P_instance_; } /* Get the list of keys */ std::vector ResourceMap::GetKeys() { return GetInstance().lock().getKeys(); } /* Get a value in the map */ String ResourceMap::Get(String key) { return GetInstance().lock().get( key ); } Bool ResourceMap::GetAsBool(String key) { return GetInstance().lock().getAsBool( key ); } UnsignedInteger ResourceMap::GetAsUnsignedInteger(String key) { return GetInstance().lock().getAsUnsignedInteger( key ); } Scalar ResourceMap::GetAsScalar(String key) { return GetInstance().lock().getAsScalar( key ); } Scalar ResourceMap::GetAsNumericalScalar(String key) { return GetAsScalar(key); } /* Get the size of the map */ UnsignedInteger ResourceMap::GetSize() { return GetInstance().lock().getSize(); } /* Set a value in the map */ void ResourceMap::Set(String key, String value) { GetInstance().lock().set( key, value ); } void ResourceMap::SetAsBool(String key, Bool value) { GetInstance().lock().setAsBool( key, value ); } void ResourceMap::SetAsUnsignedInteger(String key, UnsignedInteger value) { GetInstance().lock().setAsUnsignedInteger( key, value ); } void ResourceMap::SetAsScalar(String key, Scalar value) { GetInstance().lock().setAsScalar( key, value ); } void ResourceMap::SetAsNumericalScalar(String key, Scalar value) { SetAsScalar(key, value); } /* Default constructor */ ResourceMap::ResourceMap() : map_() { loadDefaultConfiguration(); loadConfigurationFile(); } /* Method for retrieving information from the resource map */ String ResourceMap::get(String key) const { MapType::const_iterator it = map_.find(key); if (it == map_.end()) throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap. Report Bug"; return it->second; } Bool ResourceMap::getAsBool(String key) const { Bool value = false; String st = get( key ); if (st == String(OSS() << true)) value = true; else { std::istringstream iss( st ); iss >> value; } return value; } UnsignedInteger ResourceMap::getAsUnsignedInteger(String key) const { UnsignedInteger value = 0; String st = get( key ); std::istringstream iss( st ); iss >> value; return value; } Scalar ResourceMap::getAsScalar(String key) const { Scalar value = -1.0; String st = get( key ); std::istringstream iss( st ); iss >> value; return value; } /* Get the size of the map */ UnsignedInteger ResourceMap::getSize() const { return map_.size(); } /* Method for setting information into the resource map */ void ResourceMap::set(String key, String value) { map_[ key ] = value; } void ResourceMap::setAsBool(String key, Bool value) { set( key, OSS() << value ); } void ResourceMap::setAsUnsignedInteger(String key, UnsignedInteger value) { set( key, OSS() << value ); } void ResourceMap::setAsScalar(String key, Scalar value) { set( key, OSS() << value ); } /* Update the ResourceMap with information from the configuration file */ void ResourceMap::readConfigurationFile(const FileName & configurationFile) { #if defined OPENTURNS_HAVE_LIBXML2 LOGINFO(OSS() << "Using configuration file " << configurationFile); // Open the configuration file and load it in a DOM document for later analysis XMLDoc document( configurationFile ); // Check it is an OpenTURNS' one xmlNodePtr rootElt = xmlDocGetRootElement( document ); if (rootElt == NULL) throw ConfigurationFileParsingException(HERE) << "Wrapper file has no root element" << configurationFile; if (xmlStrcmp( rootElt->name, REINTERPRET_CAST(const xmlChar *, RootElementName) )) throw ConfigurationFileParsingException(HERE) << "Wrapper file " << configurationFile << " has an invalid root element (" << rootElt->name << ")" << " at line " << xmlGetLineNo(rootElt); // Walk through the DOM document to read the data if (rootElt && rootElt->children) { for (xmlNodePtr current = rootElt->children; current; current = current->next) { if (XML::IsElement(current)) { String key = XML::ToString(current->name); String value = XML::GetAttributeByName( current, XMLTag_value ); //if (value.empty()) value = XMLAttr_undefined; map_[ key ] = value; } } } #else LOGWARN(OSS() << "Cannot parse configuration file due to lacking xml support"); #endif } /* Find the configuration file in specific path (see Path class for algorithm) */ FileName ResourceMap::findConfigurationFile() const { Path::DirectoryList dirList = Path::GetConfigDirectoryList(); return Path::FindFileByNameInDirectoryList(ConfigurationFileName, dirList); } /* Load the configuration file */ void ResourceMap::loadConfigurationFile() { try { readConfigurationFile(findConfigurationFile()); } catch (FileNotFoundException &) { LOGWARN(OSS() << "The configuration file has not been found, using default parameters."); } } /* Load the configuration defined at installation time */ void ResourceMap::loadDefaultConfiguration() { #ifdef R_EXECUTABLE set( "R-executable-command", R_EXECUTABLE ); #else set( "R-executable-command", "" ); #endif set( "csv-file-separator", ";" ); #ifndef WIN32 set( "temporary-directory", "/tmp" ); setAsUnsignedInteger( "parallel-threads", sysconf(_SC_NPROCESSORS_CONF) ); #else set( "temporary-directory", "TEMP" ); set( "parallel-threads", getenv("NUMBER_OF_PROCESSORS") ); #endif setAsUnsignedInteger( "cache-max-size", 1024 ); setAsUnsignedInteger( "output-files-timeout", 2 ); // Os parameters setAsUnsignedInteger( "Os-create-process", 0 ); setAsUnsignedInteger( "Os-RemoveFiles", 1 ); // Collection parameters setAsUnsignedInteger( "Collection-size-visible-in-str-from", 10 ); // SpecFunc parameters setAsUnsignedInteger( "SpecFunc-MaximumIteration", 1000 ); setAsScalar( "SpecFunc-Precision", 2.0e-16 ); // GramProxy parameters setAsUnsignedInteger( "DesignProxy-DefaultCacheSize", 16777216 );// 2^24=16777216=128 Mio // KFold parameters setAsUnsignedInteger( "KFold-DefaultK", 10 ); // BlendedStep parameters // setAsScalar( "BlendedStep-DefaultEta", 1.0 ); // CenteredFiniteDifferenceGradient parameters // setAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon", 1.0e-5 ); // CenteredFiniteDifferenceHessian parameters // setAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon", 1.0e-4 ); // NonCenteredFiniteDifferenceGradient parameters // setAsScalar( "NonCenteredFiniteDifferenceGradient-DefaultEpsilon", 1.0e-7 ); // PiecewiseHermiteEvaluation parameters // setAsScalar( "PiecewiseHermiteEvaluation-EpsilonRegular", 1.0e-12 ); // PiecewiseLinearEvaluation parameters // setAsScalar( "PiecewiseLinearEvaluation-EpsilonRegular", 1.0e-12 ); // UniVariatePolynomialImplementation parameters // setAsUnsignedInteger( "UniVariatePolynomial-SmallDegree", 400 ); // Pie parameters // setAsScalar( "Pie-HorizontalMargin", 0.3 ); setAsScalar( "Pie-VerticalMargin", 0.1 ); setAsScalar( "Pie-LabelThreshold", 0.02 ); // DrawableImplementation parameters // set( "Drawable-NoSpecifiedLabel", "" ); set( "Drawable-DefaultColor", "blue" ); set( "Drawable-DefaultSurfaceColor", "white" ); set( "Drawable-DefaultFillStyle", "solid" ); set( "Drawable-DefaultPointStyle", "plus" ); set( "Drawable-DefaultLineStyle", "solid" ); set( "Drawable-DefaultPattern", "s" ); set( "Drawable-AlternativePattern", "S" ); setAsUnsignedInteger( "Drawable-DefaultLineWidth", 1 ); setAsUnsignedInteger( "Drawable-DataThreshold", 2000 ); // GraphImplementation parameters // set( "Graph-NoSpecifiedLabel", "" ); setAsUnsignedInteger( "Graph-DefaultWidth", 640 ); setAsUnsignedInteger( "Graph-DefaultHeight", 480 ); setAsScalar( "Graph-DefaultLegendFontSize", 1.0 ); // Contour parameters // setAsUnsignedInteger( "Contour-DefaultLevelsNumber", 10 ); // IntervalMesher parameters // setAsBool( "IntervalMesher-UseDiamond", false ); // SQP parameters // setAsScalar( "SQP-DefaultTau", 0.5 ); setAsScalar( "SQP-DefaultOmega", 1.0e-4 ); setAsScalar( "SQP-DefaultSmooth", 1.2 ); // TNC parameters // setAsUnsignedInteger( "TNC-DefaultMaxCGit", 50 ); setAsScalar( "TNC-DefaultEta", 0.25 ); setAsScalar( "TNC-DefaultStepmx", 10.0 ); setAsScalar( "TNC-DefaultAccuracy", 1.0e-4 ); setAsScalar( "TNC-DefaultFmin", 1.0 ); setAsScalar( "TNC-DefaultRescale", 1.3 ); // AbdoRackwitz parameters // setAsScalar( "AbdoRackwitz-DefaultTau", 0.5 ); setAsScalar( "AbdoRackwitz-DefaultOmega", 1.0e-4 ); setAsScalar( "AbdoRackwitz-DefaultSmooth", 1.2 ); // OptimizationAlgorithm parameters // setAsScalar( "OptimizationAlgorithm-DefaultLevelValue", 0.0 ); setAsUnsignedInteger( "OptimizationAlgorithm-DefaultMaximumIteration", 100 ); setAsUnsignedInteger( "OptimizationAlgorithm-DefaultMaximumEvaluationNumber", 100000); setAsScalar( "OptimizationAlgorithm-DefaultMaximumAbsoluteError", 1.0e-5 ); setAsScalar( "OptimizationAlgorithm-DefaultMaximumRelativeError", 1.0e-5 ); setAsScalar( "OptimizationAlgorithm-DefaultMaximumResidualError", 1.0e-5 ); setAsScalar( "OptimizationAlgorithm-DefaultMaximumConstraintError", 1.0e-5 ); // EfficientGlobalOptimization parameters // setAsUnsignedInteger( "EfficientGlobalOptimization-DefaultMultiStartExperimentSize", 100); setAsUnsignedInteger( "EfficientGlobalOptimization-DefaultMultiStartNumber", 20); setAsUnsignedInteger( "EfficientGlobalOptimization-DefaultParameterEstimationPeriod", 1); setAsScalar( "EfficientGlobalOptimization-DefaultImprovementFactor", 1.0); setAsScalar( "EfficientGlobalOptimization-DefaultCorrelationLengthFactor", 1.0); setAsScalar( "EfficientGlobalOptimization-DefaultAEITradeoff", 1.0); // Cobyla parameters // setAsScalar( "Cobyla-DefaultRhoBeg", 0.1 ); // SolverImplementation parameters // setAsScalar( "Solver-DefaultAbsoluteError", 1.0e-5 ); setAsScalar( "Solver-DefaultRelativeError", 1.0e-5 ); setAsScalar( "Solver-DefaultResidualError", 1.0e-8 ); setAsUnsignedInteger( "Solver-DefaultMaximumFunctionEvaluation", 100 ); // GaussKronrod parameters // setAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 100 ); setAsScalar( "GaussKronrod-MaximumError", 1.0e-12 ); // GaussLegendre parameters // setAsUnsignedInteger( "GaussLegendre-DefaultMarginalIntegrationPointsNumber", 64); // IteratedQuadrature parameters // setAsUnsignedInteger( "IteratedQuadrature-MaximumSubIntervals", 32 ); setAsScalar( "IteratedQuadrature-MaximumError", 1.0e-7 ); // KarhunenLoeveQuadratureFactory parameters // setAsScalar( "KarhunenLoeveQuadratureFactory-RegularizationFactor", 0.0); // KarhunenLoeveP1Factory parameters // setAsScalar( "KarhunenLoeveP1Factory-RegularizationFactor", 0.0); // KarhunenLoeveP1Algorithm parameters // setAsScalar( "KarhunenLoeveP1Algorithm-RegularizationFactor", 0.0); // AdaptiveStieltjesAlgorithm parameters // setAsUnsignedInteger( "AdaptiveStieltjesAlgorithm-MaximumSubIntervalsBetweenRoots", 64 ); setAsScalar( "AdaptiveStieltjesAlgorithm-MaximumError", 1.0e-12 ); // LinearModelFactory parameters // setAsScalar( "LinearModelFactory-DefaultLevelValue", 0.95 ); // LinearModelTest parameters // setAsScalar( "LinearModelTest-DefaultLevel", 0.95 ); setAsScalar( "LinearModelTest-DefaultHarrisonMcCabeBreakpoint", 0.5 ); setAsUnsignedInteger( "LinearModelTest-DefaultHarrisonMcCabeSimulationSize", 1000 ); set( "LinearModelTest-DefaultDurbinWatsonHypothesis", "Equal" ); // Last parameters // setAsUnsignedInteger( "Last-DefaultMaximumSize", 65536 ); // Compact parameters // setAsUnsignedInteger( "Compact-DefaultHalfMaximumSize", 1024 ); // FaureSequence parameters // setAsUnsignedInteger( "FaureSequence-InitialSeed", 1 ); // HaltonSequence parameters // setAsUnsignedInteger( "HaltonSequence-InitialSeed", 1 ); // HaselgroveSequence parameters // setAsUnsignedInteger( "HaselgroveSequence-InitialSeed", 1 ); // ReverseHaltonSequence parameters // setAsUnsignedInteger( "ReverseHaltonSequence-InitialSeed", 1 ); // SobolSequence parameters // setAsUnsignedInteger( "SobolSequence-InitialSeed", 1 ); // SensitivityAlgorithm parameters // setAsBool( "MartinezSensitivityAlgorithm-UseAsymptoticInterval", false ); setAsUnsignedInteger( "SobolIndicesAlgorithm-DefaultBlockSize", 1 ); setAsUnsignedInteger( "SobolIndicesAlgorithm-DefaultBootstrapSize", 100 ); setAsScalar( "SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel", 0.95 ); // FAST parameters // setAsUnsignedInteger( "FAST-DefaultResamplingSize", 1 ); setAsUnsignedInteger( "FAST-DefaultInterferenceFactor", 4 ); // RandomGenerator parameters // setAsUnsignedInteger( "RandomGenerator-InitialSeed", 0 ); // CovarianceModelImplementation parameters // setAsScalar( "CovarianceModel-DefaultNuggetFactor", 1e-12 ); setAsScalar( "SpectralModel-DefaultTMin", -5.0 ); setAsScalar( "SpectralModel-DefaultTMax", 5.0 ); setAsUnsignedInteger( "SpectralModel-DefaultPointNumber", 129 ); // SpectralModel parameters // setAsScalar( "SpectralModel-DefaultMinimumFrequency", -5.0 ); setAsScalar( "SpectralModel-DefaultMaximumFrequency", 5.0 ); setAsUnsignedInteger( "SpectralModel-DefaultFrequencyNumber", 129 ); // FieldImplementation parameters // setAsUnsignedInteger( "Field-LevelNumber", 30 ); setAsScalar( "Field-ArrowRatio", 0.01 ); setAsScalar( "Field-ArrowScaling", 1.0 ); // SampleImplementation parameters setAsUnsignedInteger( "Sample-SmallKendallTau", 23 ); setAsUnsignedInteger("Sample-PrintEllipsisThreshold", 1000); setAsUnsignedInteger("Sample-PrintEllipsisSize", 3); // DomainImplementation parameters setAsScalar( "Domain-SmallVolume", 1.0e-12 ); // Mesh parameters setAsScalar( "Mesh-VertexEpsilon", 1.0e-12 ); setAsUnsignedInteger( "Mesh-LargeSize", 5000 ); setAsUnsignedInteger( "Mesh-UseKDTree", 1 ); // Matrix parameters setAsUnsignedInteger( "Matrix-size-visible-in-str-from", 5 ); // Tensor parameters setAsUnsignedInteger( "Tensor-size-visible-in-str-from", 5 ); // Tensor parameters setAsUnsignedInteger( "ComplexTensor-size-visible-in-str-from", 6 ); // MatrixImplementation parameters // setAsScalar( "Matrix-DefaultSmallPivot", 1.0e-7 ); setAsScalar( "Matrix-SymmetryThreshold", 1.0e-12 ); // BernsteinCopulaFactory parameters // setAsBool( "BernsteinCopulaFactory-Parallel", false ); // BurrFactory parameters // setAsScalar( "BurrFactory-AbsolutePrecision", 1.0e-12 ); setAsScalar( "BurrFactory-RelativePrecision", 1.0e-12 ); setAsScalar( "BurrFactory-ResidualPrecision", 1.0e-12 ); setAsUnsignedInteger( "BurrFactory-MaximumIteration", 10 ); // ConditionalDistribution parameters // setAsUnsignedInteger( "ConditionalDistribution-MarginalIntegrationNodesNumber", 256 ); setAsUnsignedInteger( "ConditionalDistribution-MaximumIntegrationNodesNumber", 100000 ); // CompositeDistribution parameters // setAsUnsignedInteger( "CompositeDistribution-StepNumber", 256 ); setAsScalar( "CompositeDistribution-SolverEpsilon", 1.0e-10 ); // ComposedDistribution parameters // setAsBool("ComposedDistribution-UseGenericCovarianceAlgorithm", false); // DirichletFactory parameters // setAsUnsignedInteger( "Dirichlet-DefaultSamplingSize", 500000 ); setAsUnsignedInteger( "Dirichlet-DefaultIntegrationSize", 50 ); // DirichletFactory parameters // setAsScalar( "DirichletFactory-ParametersEpsilon", 1.0e-12 ); setAsUnsignedInteger( "DirichletFactory-MaximumIteration", 10 ); // FisherSnedecorFactory parameters // setAsScalar( "FisherSnedecorFactory-D1LowerBound", 1.0e-2 ); setAsScalar( "FisherSnedecorFactory-D2LowerBound", 1.0e-2 ); // GeneralizedExtremeValue parameters // setAsScalar( "GeneralizedExtremeValue-XiThreshold", 1.0e-6 ); // GeneralizedParetoFactory parameters // setAsUnsignedInteger( "GeneralizedParetoFactory-SmallSize", 20 ); setAsUnsignedInteger( "GeneralizedParetoFactory-MaximumEvaluationNumber", 1000 ); setAsScalar( "GeneralizedParetoFactory-MaximumAbsoluteError", 1.0e-10 ); setAsScalar( "GeneralizedParetoFactory-MaximumRelativeError", 1.0e-10 ); setAsScalar( "GeneralizedParetoFactory-MaximumObjectiveError", 1.0e-10 ); setAsScalar( "GeneralizedParetoFactory-MaximumConstraintError", 1.0e-10 ); // InverseNormalFactory parameters // set( "InverseNormalFactory-Method", "MLE" ); // KernelMixture parameters // setAsUnsignedInteger( "KernelMixture-SmallSize", 50 ); setAsUnsignedInteger( "KernelMixture-LargeSize", 20 ); setAsUnsignedInteger( "KernelMixture-PDFCDFDiscretization", 1000 ); // KernelSmoothing parameters // setAsUnsignedInteger( "KernelSmoothing-SmallSize", 250 ); setAsUnsignedInteger( "KernelSmoothing-BinNumber", 1024 ); setAsScalar( "KernelSmoothing-CutOffPlugin", 5.0 ); setAsScalar( "KernelSmoothing-AbsolutePrecision", 0.0 ); setAsScalar( "KernelSmoothing-RelativePrecision", 1.0e-5 ); setAsScalar( "KernelSmoothing-ResidualPrecision", 1.0e-10 ); setAsUnsignedInteger( "KernelSmoothing-MaximumIteration", 50 ); // LogNormal parameters // setAsUnsignedInteger( "LogNormal-CharacteristicFunctionIntegrationNodes", 256 ); setAsScalar( "LogNormal-CharacteristicFunctionSmallSigmaThreshold", 0.2 ); // LogNormalFactory parameters // setAsUnsignedInteger( "LogNormalFactory-EstimationMethod", 0 ); setAsScalar( "LogNormalFactory-AbsolutePrecision", 1.0e-12 ); setAsScalar( "LogNormalFactory-RelativePrecision", 1.0e-12 ); setAsScalar( "LogNormalFactory-ResidualPrecision", 1.0e-12 ); setAsUnsignedInteger( "LogNormalFactory-MaximumIteration", 50 ); // Meixner parameters // setAsUnsignedInteger( "MeixnerDistribution-CDFIntegrationNodesNumber", 32 ); setAsUnsignedInteger( "MeixnerDistribution-CDFDiscretization", 10000 ); setAsScalar( "MeixnerDistribution-MaximumAbsoluteError", 1.0e-12 ); setAsScalar( "MeixnerDistribution-MaximumRelativeError", 1.0e-12 ); setAsScalar( "MeixnerDistribution-MaximumConstraintError", 1.0e-12 ); setAsScalar( "MeixnerDistribution-MaximumObjectiveError", 1.0e-12 ); // Mixture parameters // setAsScalar( "Mixture-SmallWeight", 1.0e-12 ); setAsUnsignedInteger( "Mixture-SmallSize", 50 ); setAsUnsignedInteger( "Mixture-LargeSize", 20 ); setAsUnsignedInteger( "Mixture-PDFCDFDiscretization", 1000 ); // Multinomial parameters // setAsUnsignedInteger( "Multinomial-smallA", 10 ); setAsScalar( "Multinomial-eta", 1.0e-9 ); // NegativeBinomialFactory parameters // setAsScalar( "NegativeBinomialFactory-AbsolutePrecision", 1.0e-12 ); setAsScalar( "NegativeBinomialFactory-RelativePrecision", 1.0e-12 ); setAsScalar( "NegativeBinomialFactory-ResidualPrecision", 1.0e-12 ); setAsUnsignedInteger( "NegativeBinomialFactory-MaximumIteration", 50 ); // Normal parameters // setAsUnsignedInteger( "Normal-MaximumNumberOfPoints", 10000000 ); setAsUnsignedInteger( "Normal-MinimumNumberOfPoints", 100000 ); setAsUnsignedInteger( "Normal-SmallDimension", 6 ); setAsUnsignedInteger( "Normal-MarginalIntegrationNodesNumber", 16 ); setAsScalar( "Normal-MaximumCDFEpsilon", 5.0e-6 ); setAsScalar( "Normal-MinimumCDFEpsilon", 5.0e-2 ); // ProductDistribution parameters // setAsScalar( "ProductDistribution-LargeCharacteristicFunctionArgument", 10.0 ); // RiceFactory parameters // setAsScalar( "RiceFactory-AbsolutePrecision", 1.0e-12 ); setAsScalar( "RiceFactory-RelativePrecision", 1.0e-12 ); setAsScalar( "RiceFactory-ResidualPrecision", 1.0e-12 ); setAsUnsignedInteger( "RiceFactory-MaximumIteration", 10 ); // TrapezoidalFactory parameters // setAsScalar( "TrapezoidalFactory-RhoBeg", 0.1 ); setAsScalar( "TrapezoidalFactory-RhoEnd", 1.0e-5 ); setAsUnsignedInteger( "TrapezoidalFactory-MaximumIteration", 10000 ); // TruncatedDistribution parameters // setAsScalar( "TruncatedDistribution-DefaultThresholdRealization", 0.5 ); // TruncatedNormalFactory parameters // setAsScalar( "TruncatedNormalFactory-SigmaLowerBound", 1.0e-4 ); // MaximumLikelihoodFactory parameters // setAsUnsignedInteger( "MaximumLikelihoodFactory-MaximumEvaluationNumber", 1000 ); setAsScalar( "MaximumLikelihoodFactory-MaximumAbsoluteError", 1.0e-10 ); setAsScalar( "MaximumLikelihoodFactory-MaximumRelativeError", 1.0e-10 ); setAsScalar( "MaximumLikelihoodFactory-MaximumObjectiveError", 1.0e-10 ); setAsScalar( "MaximumLikelihoodFactory-MaximumConstraintError", 1.0e-10 ); // MethodOfMomentsFactory parameters // setAsUnsignedInteger( "MethodOfMomentsFactory-MaximumEvaluationNumber", 1000 ); setAsScalar( "MethodOfMomentsFactory-MaximumAbsoluteError", 1.0e-10 ); setAsScalar( "MethodOfMomentsFactory-MaximumRelativeError", 1.0e-10 ); setAsScalar( "MethodOfMomentsFactory-MaximumObjectiveError", 1.0e-10 ); setAsScalar( "MethodOfMomentsFactory-MaximumConstraintError", 1.0e-10 ); // Student parameters // setAsUnsignedInteger( "Student-MaximumNumberOfPoints", 10000000 ); setAsUnsignedInteger( "Student-MinimumNumberOfPoints", 100000 ); setAsUnsignedInteger( "Student-SmallDimension", 6 ); setAsUnsignedInteger( "Student-MarginalIntegrationNodesNumber", 16 ); setAsScalar( "Student-MaximumCDFEpsilon", 5.0e-6 ); setAsScalar( "Student-MinimumCDFEpsilon", 5.0e-2 ); // NonCentralStudent parameters // setAsUnsignedInteger( "NonCentralStudent-CDFAlgo", 0 ); // UserDefined parameters // setAsUnsignedInteger( "UserDefined-SmallSize", 10000 ); // AliMikhailHaqCopulaFactory parameters // setAsScalar( "AliMikhailHaqCopulaFactory-ThetaEpsilon", 1.0e-14 ); // FrankCopulaFactory parameters // setAsScalar( "FrankCopulaFactory-AbsolutePrecision", 1.0e-14 ); setAsScalar( "FrankCopulaFactory-RelativePrecision", 1.0e-14 ); setAsScalar( "FrankCopulaFactory-ResidualPrecision", 1.0e-14 ); setAsUnsignedInteger( "FrankCopulaFactory-MaximumIteration", 100 ); // RandomMixture parameters // setAsUnsignedInteger( "RandomMixture-DefaultBlockMin", 3 ); setAsUnsignedInteger( "RandomMixture-DefaultBlockMax", 16 ); setAsUnsignedInteger( "RandomMixture-DefaultMaxSize", 65536 ); setAsScalar( "RandomMixture-DefaultAlpha", 5.0 ); setAsScalar( "RandomMixture-DefaultBeta", 8.5 ); setAsScalar( "RandomMixture-DefaultPDFEpsilon", 1.0e-10 ); setAsScalar( "RandomMixture-DefaultCDFEpsilon", 1.0e-10 ); setAsScalar( "RandomMixture-GraphPDFEpsilon", 1.0e-5 ); setAsScalar( "RandomMixture-GraphCDFEpsilon", 1.0e-5 ); setAsUnsignedInteger( "RandomMixture-SmallSize", 100 ); setAsUnsignedInteger( "RandomMixture-ProjectionDefaultSize", 25 ); setAsUnsignedInteger( "RandomMixture-MarginalIntegrationNodesNumber", 128 ); setAsUnsignedInteger( "RandomMixture-MaximumIntegrationNodesNumber", 1024 ); setAsUnsignedInteger( "RandomMixture-MaximumSupportSize", 2048 ); setAsBool( "RandomMixture-SimplifyAtoms", true ); // NumericalMathEvaluation parameters // setAsUnsignedInteger( "NumericalMathEvaluation-DefaultPointNumber", 129 ); setAsScalar( "NumericalMathEvaluation-ParameterEpsilon", 1.0e-7 ); // DualLinearCombinationEvaluation // setAsScalar( "DualLinearCombinationEvaluation-SmallCoefficient", 0.0); // LinearCombinationEvaluation // setAsScalar( "LinearCombinationEvaluation-SmallCoefficient", 0.0); // DistFunc parameters // setAsScalar( "DistFunc-Precision", 1.0e-14 ); setAsUnsignedInteger( "DistFunc-MaximumIteration", 5000 ); // KFactor parameters // setAsScalar( "KFactor-Precision", 1.0e-8 ); setAsUnsignedInteger( "KFactor-MaximumIteration", 32 ); setAsUnsignedInteger( "KFactor-DefaultIntegrationNodesNumber", 256 ); // RootStrategyImplementation parameters // setAsScalar( "RootStrategy-DefaultMaximumDistance", 8.0 ); setAsScalar( "RootStrategy-DefaultStepSize", 1.0 ); // Simulation parameters // setAsUnsignedInteger( "Simulation-DefaultMaximumOuterSampling", 1000 ); setAsScalar( "Simulation-DefaultMaximumCoefficientOfVariation", 1.0e-1 ); setAsScalar( "Simulation-DefaultMaximumStandardDeviation", 0.0 ); setAsUnsignedInteger( "Simulation-DefaultBlockSize", 1 ); // SimulationResultImplementation parameters // setAsScalar( "SimulationResult-DefaultConfidenceLevel", 0.95 ); // SimulationSensitivityAnalysis parameters // setAsUnsignedInteger( "SimulationSensitivityAnalysis-DefaultSampleMargin", 400 ); // SubsetSampling parameters // setAsUnsignedInteger( "SubsetSampling-DefaultMaximumOuterSampling", 10000 ); setAsScalar( "SubsetSampling-DefaultConditionalProbability", 0.1 ); setAsScalar( "SubsetSampling-DefaultProposalRange", 2.0 ); setAsScalar( "SubsetSampling-DefaultBetaMin", 2.0 ); // DirectionalSampling parameters // setAsUnsignedInteger( "DirectionalSampling-MeanContributionIntegrationNodesNumber", 255 ); // AdaptiveDirectionalSampling parameters // setAsUnsignedInteger( "AdaptiveDirectionalSampling-DefaultMaximumStratificationDimension", 3 ); setAsScalar( "AdaptiveDirectionalSampling-DefaultGamma", 0.5 ); setAsUnsignedInteger( "AdaptiveDirectionalSampling-DefaultNumberOfSteps", 2 ); // AnalyticalResult parameters // setAsScalar( "AnalyticalResult-DefaultWidth", 1.0 ); setAsUnsignedInteger( "AnalyticalResult-MeanPointIntegrationNodesNumber", 255 ); // StrongMaximumTest parameters // setAsScalar( "StrongMaximumTest-DefaultDeltaPrecision", 1.0e-7 ); setAsScalar( "StrongMaximumTest-Epsilon", 1.0e-10 ); // CleaningStrategy parameters // setAsUnsignedInteger( "CleaningStrategy-DefaultMaximumSize", 20 ); setAsScalar( "CleaningStrategy-DefaultSignificanceFactor", 1.0e-4 ); // FunctionalChaosAlgorithm parameters // setAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual", 1.0e-6 ); setAsScalar( "FunctionalChaosAlgorithm-QNorm", 0.5); setAsScalar( "FunctionalChaosAlgorithm-PValueThreshold", 1.0e-3); setAsUnsignedInteger( "FunctionalChaosAlgorithm-SmallSampleSize", 1000); setAsUnsignedInteger( "FunctionalChaosAlgorithm-LargeSampleSize", 10000); setAsUnsignedInteger( "FunctionalChaosAlgorithm-MaximumTotalDegree", 10 ); // GeneralLinearModelAlgorithm parameters // set("GeneralLinearModelAlgorithm-LinearAlgebra", "LAPACK"); setAsBool("GeneralLinearModelAlgorithm-NormalizeData", false); setAsBool("GeneralLinearModelAlgorithm-KeepCovariance", true); setAsBool("GeneralLinearModelAlgorithm-OptimizeParameters", true); setAsBool("GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate", true); setAsBool("GeneralLinearModelAlgorithm-UnbiasedVariance", true); setAsScalar( "GeneralLinearModelAlgorithm-MeanEpsilon", 1.0e-12 ); setAsScalar( "GeneralLinearModelAlgorithm-StartingScaling", 1.0e-13 ); setAsScalar( "GeneralLinearModelAlgorithm-MaximalScaling", 1.0e5 ); setAsScalar( "GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound", 1.0e-2 ); setAsScalar( "GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound", 1.0e2 ); set("GeneralLinearModelAlgorithm-DefaultOptimizationAlgorithm", "TNC"); // KrigingAlgorithm parameters // setAsScalar( "KrigingAlgorithm-StartingScaling", 1.0e-13 ); setAsScalar( "KrigingAlgorithm-MaximalScaling", 1.0e5 ); set("KrigingAlgorithm-LinearAlgebra", "LAPACK"); // SquaredExponential parameters // setAsScalar( "SquaredExponential-DefaultTheta", 1.0 ); // AbsoluteExponential parameters // setAsScalar( "AbsoluteExponential-DefaultTheta", 1.0 ); // GeneralizedExponential parameters // setAsScalar( "GeneralizedExponential-DefaultTheta", 1.0 ); // MaternModel parameters // setAsScalar( "MaternModel-DefaultNu", 1.5 ); setAsScalar( "MaternModel-DefaultTheta", 1.0 ); // WeightedExperimentImplementation parameters // setAsUnsignedInteger( "WeightedExperiment-DefaultSize", 100 ); // GaussProductExperiment parameters // setAsUnsignedInteger( "GaussProductExperiment-DefaultMarginalDegree", 5 ); // HyperbolicAnisotropicEnumerateFunction parameters // setAsScalar( "HyperbolicAnisotropicEnumerateFunction-DefaultQ", 0.4 ); // MarginalTransformationEvaluation parameters // setAsScalar( "MarginalTransformationEvaluation-DefaultTailThreshold", 0.99 ); setAsUnsignedInteger( "MarginalTransformationEvaluation-Simplify", 1 ); setAsScalar( "MarginalTransformationEvaluation-ParametersEpsilon", 1.0e-14 ); // DistributionImplementation parameters // setAsUnsignedInteger( "Distribution-DefaultPointNumber", 129 ); setAsScalar( "Distribution-DefaultQuantileEpsilon", 1.0e-12 ); setAsScalar( "Distribution-DefaultPDFEpsilon", 1.0e-14 ); setAsScalar( "Distribution-DefaultCDFEpsilon", 1.0e-14 ); setAsUnsignedInteger( "Distribution-DefaultQuantileIteration", 100 ); setAsScalar( "Distribution-QMin", 0.15 ); setAsScalar( "Distribution-QMax", 0.85 ); setAsUnsignedInteger( "Distribution-DefaultIntegrationNodesNumber", 255 ); setAsUnsignedInteger( "Distribution-DefaultLevelNumber", 10 ); setAsUnsignedInteger( "Distribution-DefaultQuantileCacheSize", 128 ); setAsBool("Distribution-Parallel", true); setAsUnsignedInteger( "Distribution-CharacteristicFunctionBlockMax", 20 ); setAsUnsignedInteger( "Distribution-CharacteristicFunctionNMax", 1000000 ); setAsUnsignedInteger( "Distribution-MinimumVolumeLevelSetSamplingSize", 1000000 ); setAsBool( "Distribution-MinimumVolumeLevelSetBySampling", false ); setAsBool( "Distribution-UseCovarianceAdaptiveAlgorithm", false ); // ContinuousDistribution parameters // setAsUnsignedInteger( "ContinuousDistribution-DefaultIntegrationNodesNumber", 256 ); // DiscreteDistribution parameters // setAsScalar( "DiscreteDistribution-SupportEpsilon", 1.0e-14 ); // DistributionFactoryImplementation parameters // setAsUnsignedInteger( "DistributionFactory-DefaultBootstrapSize", 100 ); // OrderStatisticsMarginalChecker // setAsUnsignedInteger( "OrderStatisticsMarginalChecker-QuantileIteration", 100 ); setAsScalar( "OrderStatisticsMarginalChecker-OptimizationEpsilon", 1.0e-7 ); // MaximumEntropyOrderStatisticsDistribution // setAsBool( "MaximumEntropyOrderStatisticsDistribution-UseApproximation", true ); setAsBool( "MaximumEntropyOrderStatisticsDistribution-CheckMarginals", true ); setAsUnsignedInteger( "MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization", 100 ); setAsUnsignedInteger( "MaximumEntropyOrderStatisticsDistribution-MaximumApproximationSubdivision", 2 ); setAsScalar( "MaximumEntropyOrderStatisticsDistribution-SupportShift", 1.0e-15 ); setAsUnsignedInteger( "MaximumEntropyOrderStatisticsDistribution-MaximumQuantileIteration", 10); setAsUnsignedInteger( "MaximumEntropyOrderStatisticsDistribution-CDFIntegrationNodesNumber", 16); // HMatrix parameters // set( "HMatrix-ClusteringAlgorithm", "median" ); setAsScalar( "HMatrix-AdmissibilityFactor", 2.0 ); setAsUnsignedInteger( "HMatrix-CompressionMethod", 1 ); setAsScalar( "HMatrix-AssemblyEpsilon", 1.0e-4); setAsScalar( "HMatrix-RecompressionEpsilon", 1.0e-4); setAsUnsignedInteger( "HMatrix-MaxLeafSize", 100); setAsUnsignedInteger( "HMatrix-MaxParallelLeaves", 5000); setAsScalar( "HMatrix-ValidationError", 0.0); setAsUnsignedInteger( "HMatrix-ValidationRerun", 0); setAsUnsignedInteger( "HMatrix-ValidationDump", 0); setAsBool( "HMatrix-ForceSequential", false); // GaussianProcess parameters // setAsScalar( "GaussianProcess-StartingScaling", 1.0e-13 ); setAsScalar( "GaussianProcess-MaximalScaling", 1.0e5 ); setAsUnsignedInteger( "GaussianProcess-GibbsMaximumIteration", 100 ); // SpectralGaussianProcess parameters // setAsScalar( "SpectralGaussianProcess-StartingScaling", 1.0e-13 ); setAsScalar( "SpectralGaussianProcess-MaximalScaling", 1.0e5 ); setAsUnsignedInteger( "SpectralGaussianProcess-CholeskyCacheSize", 16384 ); // WhittleFactory parameters // setAsScalar( "WhittleFactory-DefaultRhoBeg", 0.1 ); setAsScalar( "WhittleFactory-DefaultRhoEnd", 1.0e-10 ); setAsScalar( "WhittleFactory-DefaultMaxFun", 2000 ); setAsScalar( "WhittleFactory-DefaultStartingPointScale", 1.0 ); setAsScalar( "WhittleFactory-RootEpsilon", 1.0e-6); // BoxCoxFactory parameters // setAsScalar( "BoxCoxFactory-DefaultRhoBeg", 0.1 ); setAsScalar( "BoxCoxFactory-DefaultRhoEnd", 1.0e-10 ); setAsUnsignedInteger( "BoxCoxFactory-DefaultMaxFun", 2000 ); setAsUnsignedInteger( "BoxCoxFactory-DefaultPointNumber", 201 ); // VisualTest parameters // setAsUnsignedInteger( "VisualTest-KendallPlot-MonteCarloSize", 100 ); // CalibrationStrategyImplementation parameters // setAsScalar( "CalibrationStrategy-DefaultLowerBound", 0.117 ); // = 0.5 * 0.234 setAsScalar( "CalibrationStrategy-DefaultUpperBound", 0.468 ); // = 2.0 * 0.234 setAsScalar( "CalibrationStrategy-DefaultShrinkFactor", 0.8 ); setAsScalar( "CalibrationStrategy-DefaultExpansionFactor", 1.2 ); setAsUnsignedInteger( "CalibrationStrategy-DefaultCalibrationStep", 100 ); // MCMC parameters // setAsUnsignedInteger("MCMC-DefaultBurnIn", 0); setAsUnsignedInteger("MCMC-DefaultThinning", 1); // ARMA parameters // setAsScalar( "ARMA-MeanEpsilon", 1.0e-14 ); // ARMALikelihoodFactory parameters // setAsScalar( "ARMALikelihoodFactory-StartingScaling", 1.0e-13 ); setAsScalar( "ARMALikelihoodFactory-MaximalScaling", 1.0e5 ); setAsScalar( "ARMALikelihoodFactory-DefaultRhoBeg", 0.01 ); setAsScalar( "ARMALikelihoodFactory-DefaultRhoEnd", 1.0e-10 ); setAsUnsignedInteger( "ARMALikelihoodFactory-DefaultMaxFun", 10000 ); setAsScalar( "ARMALikelihoodFactory-DefaultStartingPointScale", 1.0 ); setAsScalar( "ARMALikelihoodFactory-RootEpsilon", 1.0e-6); // FittingTest parameters // setAsUnsignedInteger( "FittingTest-ChiSquaredMinFrequency", 5 ); // LeastSquaresMetaModelSelection parameters // set("LeastSquaresMetaModelSelection-DecompositionMethod", "SVD"); setAsScalar("LeastSquaresMetaModelSelection-MaximumErrorFactor", 2.0); setAsScalar("LeastSquaresMetaModelSelection-ErrorThreshold", 0.0); // SparseMethod parameters // setAsScalar("SparseMethod-MaximumErrorFactor", 2.0); setAsScalar("SparseMethod-ErrorThreshold", 1.0e-3); // CholeskyMethod parameters // setAsUnsignedInteger("CholeskyMethod-LargeCase", 128); // Classifier parameters // setAsBool( "Classifier-Parallel", true); // TensorApproximationAlgorithm parameters // set("TensorApproximationAlgorithm-Method", "GreedyRankOne"); set("TensorApproximationAlgorithm-DecompositionMethod", "SVD"); setAsUnsignedInteger("TensorApproximationAlgorithm-DefaultMaximumAlternatingLeastSquaresIteration", 100); setAsScalar("TensorApproximationAlgorithm-DefaultMaximumRadiusError", 1.0e-5); setAsScalar("TensorApproximationAlgorithm-DefaultMaximumResidualError", 1.0e-5); } /* String converter */ String ResourceMap::__repr__() const { OSS oss; oss << "ResourceMap={"; const char * separator = "\n "; for(MapType::const_iterator it = map_.begin(); it != map_.end(); ++it, separator = ",\n ") oss << separator << it->first << " => " << it->second; oss << "\n}"; return oss; } std::vector ResourceMap::getKeys() const { std::vector keys; for(MapType::const_iterator it = map_.begin(); it != map_.end(); ++it) { keys.push_back(it->first); } return keys; } /* * @fn std::ostream & operator <<(std::ostream & os, const ResourceMap & obj) * @brief Output stream converter * @param os A STL output stream resourceMap * @param obj The resourceMap read by \em os * @return A reference to \em os * * Operator << converts the ResourceMap object to an output stream * so it is easy to show the content of the resourceMap. */ std::ostream & operator <<(std::ostream & os, const MutexLockSingleton & obj) { return os << obj.lock().__repr__(); } OStream & operator <<(OStream & OS, const MutexLockSingleton & obj) { return OS << obj.lock().__repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/StorageManager.cxx000066400000000000000000000266401307543307100225150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StorageManager.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/InterfaceObject.hxx" #include "openturns/Study.hxx" #include "openturns/OSS.hxx" #include "openturns/Log.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StorageManager); Pointer StorageManager::registerObject(const PersistentObject & obj, bool fromStudy) { return new Advocate(*this, getState(), "object"); } Advocate StorageManager::readObject() { return Advocate(*this, getState()); } /* Return the current state of the storage manager (for those having one) */ const StorageManager::InternalObject & StorageManager::getState() const { static const InternalObject State = StorageManager::InternalObject(); return State; } /* Default constructor */ StorageManager::StorageManager(UnsignedInteger defaultVersion) : Object(), p_study_(0), defaultVersion_(defaultVersion), version_(defaultVersion), savedObjects_() { // Nothing to do } /* * Virtual constructor */ StorageManager * StorageManager::clone() const { return new StorageManager(*this); } /* String converter */ String StorageManager::__repr__() const { return OSS() << "class=" << getClassName(); } /* Do some administrative tasks before saving/reloading */ void StorageManager::initialize(const SaveAction) { // Nothing to do } /* Do some administrative tasks before saving/reloading */ void StorageManager::initialize(const LoadAction) { // Nothing to do } /* Do some administrative tasks after saving/reloading */ void StorageManager::finalize(const SaveAction) { // Nothing to do } /* Do some administrative tasks after saving/reloading */ void StorageManager::finalize(const LoadAction) { // Nothing to do } /* Read and create the internal representation */ void StorageManager::read() { // Nothing to do } /* Write the internal representation */ void StorageManager::write() { // Nothing to do } /* Create a new empty object that will gather all saved information */ Pointer StorageManager::createObject(const String & tag) const { return new InternalObject; } /* Append an internal object to the collection of saved ones */ void StorageManager::appendObject(Pointer & p_obj) { // Nothing to do } Bool StorageManager::hasAttribute(Pointer & p_obj, const String& name) { throw NotYetImplementedException(HERE) << "In StorageManager::hasAttribute(Pointer & p_obj, const String& name)"; } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, Bool value) { // Nothing to do } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value) { // Nothing to do } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger value) { // Nothing to do } #endif /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, Scalar value) { // Nothing to do } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, Complex value) { // Nothing to do } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, const String & value) { // Nothing to do } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value) { // Nothing to do value.save( *this ); } /* Add an attribute to an internal object */ void StorageManager::addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value) { // Nothing to do value.save( *this ); } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value) { // Nothing to do } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value) { // Nothing to do } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger value) { // Nothing to do } #endif /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value) { // Nothing to do } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value) { // Nothing to do } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value) { // Nothing to do } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value) { // Nothing to do value.save( *this ); } /* Add an indexed value to an internal object */ void StorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value) { // Nothing to do value.save( *this ); } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, Bool & value) { // Nothing to do } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value) { // Nothing to do } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger & value) { // Nothing to do } #endif /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, Scalar & value) { // Nothing to do } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, Complex & value) { // Nothing to do } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, String & value) { // Nothing to do } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value) { // Nothing to do } /* Read an attribute */ void StorageManager::readAttribute(Pointer & p_obj, const String & name, PersistentObject & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value) { // Nothing to do } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger & value) { // Nothing to do } #endif /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value) { // Nothing to do } /* Read an indexed value */ void StorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value) { // Nothing to do } /* Returns true if an object is already saved */ Bool StorageManager::isSavedObject(Id id) const { return savedObjects_[id]; } /* Tells that an object is saved */ void StorageManager::markObjectAsSaved(Id id) const { savedObjects_[id] = true; } /* Refresh the status of saved objects */ void StorageManager::cleanSavedObjects() const { savedObjects_.erase(savedObjects_.begin(), savedObjects_.end()); } /* * This method saves the PersistentObject onto the medium * * @todo implement StorageManager::save method */ void StorageManager::save(const PersistentObject & obj, const String & label, bool fromStudy) { #ifdef SAVELOAD_CHECKING try { #endif obj.save(*this, label, fromStudy); #ifdef SAVELOAD_CHECKING } catch ( const Exception & ex ) { LOGERROR( OSS() << "When saving " << obj.getClassName() << " : " << ex ); } #endif } /* * This method reloads the PersistentObject from the medium * * @todo implement StorageManager::load method */ void StorageManager::load(Study & study) { setStudy( &study ); } /* Study accessor */ Study * StorageManager::getStudy() const { return p_study_; } void StorageManager::setStudy(Study * p_study) { p_study_ = p_study; } /* Returns the version of the study that the manager can read/write */ UnsignedInteger StorageManager::getDefaultStudyVersion() const { return defaultVersion_; } /* Query the manager if the version is correct */ Bool StorageManager::canManageVersion(UnsignedInteger version) const { return (version == defaultVersion_); } /* Study version accessor */ UnsignedInteger StorageManager::getStudyVersion() const { return version_; } void StorageManager::setStudyVersion(UnsignedInteger version) { if (canManageVersion(version)) version_ = version; else throw InvalidArgumentException(HERE) << "Study version " << version << " is NOT supported"; } void StorageManager::setVisibility(Pointer & p_obj, Bool visible) { // Nothing to do } void StorageManager::setLabel(Pointer & p_obj, const String & label) { // Nothing to do } /* Label element in study */ void StorageManager::defineLabel(Id id, const String & label) { p_study_->defineLabel( id, label ); } /* Define element visibility in study */ void StorageManager::defineVisibility(Id id, Bool visible) { p_study_->defineVisibility( id, visible ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/Study.cxx000066400000000000000000000264721307543307100207310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Study keeps all PersistentObjects in a file * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InterfaceObject.hxx" #include "openturns/Study.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Exception.hxx" #include "openturns/Catalog.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Study); /* * Default constructor */ Study::Study() : map_(), labelMap_(), p_storageManager_(new StorageManager) { p_storageManager_->setStudy(this); } /* String converter */ String Study::__repr__() const { OSS oss; oss << "class=" << getClassName(); const char * separator = " "; for(Map::const_iterator it = map_.begin(); it != map_.end(); ++it, separator = "\n ") { #if 0 oss << separator << (*it).first << " => " << ((*it).second)->getClassName() << " name='" << ((*it).second)->getName() << "' id=" << ((*it).second)->getId(); #endif #if 0 if (((*it).second)->getVisibility()) oss << separator << (*it).first << " => id=" << ((*it).second)->getId() << " " << ((*it).second)->__repr__(); #endif #if 1 oss << separator << (*it).first << " => " << (((*it).second)->getVisibility() ? "*" : " ") << " id=" << ((*it).second)->getId() << " " << ((*it).second)->__repr__(); #endif } oss << "\n"; separator = " "; for(LabelMap::const_iterator it = labelMap_.begin(); it != labelMap_.end(); ++it, separator = "\n ") { oss << separator << "'" << (*it).first << "' is aliased to " << (*it).second; } return oss; } /* String converter */ String Study::__str__(const String & offset) const { OSS oss(false); const char * separator = " "; for(Map::const_iterator it = map_.begin(); it != map_.end(); ++it, separator = "\n ") { oss << separator << (*it).first << " => " << ((*it).second)->getClassName() << "\n" << ((*it).second)->__str__( String( 7 + int( ((*it).first != 0 ? log10(static_cast((*it).first)) : 1) ), ' ') ); } oss << "\n"; separator = " "; for(LabelMap::const_iterator it = labelMap_.begin(); it != labelMap_.end(); ++it, separator = "\n ") { oss << separator << "'" << (*it).first << "' is aliased to " << (*it).second; } return oss; } /* This method saves the study through the storage manager */ void Study::save() { assert(p_storageManager_); StorageManager & mgr = *p_storageManager_; mgr.initialize( SaveAction() ); for(LabelMap::const_iterator it = labelMap_.begin(); it != labelMap_.end(); ++it) { mgr.save(*map_[ it->second ], it->first, true); } for(Map::const_iterator it = map_.begin(); it != map_.end(); ++it) { mgr.save(*(it->second), "", true); } mgr.write(); mgr.finalize( SaveAction() ); } /* This method reloads the study from the storage manager */ void Study::load() { assert(p_storageManager_); StorageManager & mgr = *p_storageManager_; mgr.initialize( LoadAction() ); mgr.read(); mgr.load(*this); mgr.finalize( LoadAction() ); cleanUnvisibleObject(); translateId(); } /* This method purges the study from the reloaded objects that are tagged unvisible */ void Study::cleanUnvisibleObject() { Map newMap; for(Map::const_iterator it = map_.begin(); it != map_.end(); ++it) { if (it->second->getVisibility()) newMap[ it->second->getShadowedId() ] = it->second; } map_ = newMap; } /* This method performs the translation of ids after a study load */ void Study::translateId() { std::map translationTable; Map newMap; for(Map::const_iterator it = map_.begin(); it != map_.end(); ++it) { translationTable[ it->first ] = it->second->getId(); newMap[ it->second->getId() ] = it->second; } LabelMap newLabelMap; for(LabelMap::const_iterator it = labelMap_.begin(); it != labelMap_.end(); ++it) newLabelMap[ it->first ] = translationTable[ it->second ]; map_ = newMap; labelMap_ = newLabelMap; } /* Query if object is stored in study */ Bool Study::hasObject(Id id) const { Map::const_iterator it = map_.find( id ); return ( it != map_.end() ); } /* Get object whose id is given */ Study::MapElement Study::getObject(Id id) const { MapElement element; Map::const_iterator it = map_.find( id ); if (it != map_.end()) { element = (*it).second; } return element; } /* Query if object is stored in study */ Bool Study::hasObject(const String & label) const { if (label.empty()) return false; LabelMap::const_iterator it = labelMap_.find( label ); return (it == labelMap_.end()) ? false : hasObject( it->second ); } /* Get object whose id is given */ Study::MapElement Study::getObject(const String & label) const { LabelMap::const_iterator it_label = labelMap_.find( label ); if (it_label == labelMap_.end()) throw InvalidArgumentException(HERE) << "No object with label '" << label << "' in study"; return getObject( it_label->second ); } /* Local class for the following method. Should have been declared inside the method but find_if crashes */ struct element_whose_class_and_name_are { const String & className_; const String & name_; element_whose_class_and_name_are(const String & className, const String & name) : className_(className), name_(name) {} Bool operator()(const Study::Map::value_type & element) const { return (element.second->getClassName() == className_) && (element.second->getName() == name_); } }; /* Get object whose class and name are given */ Study::MapElement Study::getObjectByName(const String & className, const String & name) const { MapElement element; Map::const_iterator it = std::find_if(map_.begin(), map_.end(), element_whose_class_and_name_are(className, name)); if (it != map_.end()) { element = (*it).second; } return element; } /* Fill an object with one got from study */ void Study::fillObjectByName(PersistentObject & po, const String & name) const { MapElement element = getObjectByName(po.getClassName(), name); if (! element) throw InvalidArgumentException(HERE) << "No object of name " << name << " in study"; Catalog::Get(po.getClassName()).assign(po, *element); } void Study::fillObjectByName(InterfaceObject & io, const String & name) const { MapElement element = getObjectByName(io.getImplementationAsPersistentObject()->getClassName(), name); if (! element) throw InvalidArgumentException(HERE) << "No object of name " << name << " in study"; io.setImplementationAsPersistentObject(element); } void Study::fillObject(Id id, PersistentObject & po) const { MapElement element = getObject(id); if (! element) throw InvalidArgumentException(HERE) << "No object of id " << id << " in study"; Catalog::Get(po.getClassName()).assign(po, *element); } void Study::fillObject(Id id, InterfaceObject & io) const { MapElement element = getObject(id); if (! element) throw InvalidArgumentException(HERE) << "No object of id " << id << " in study"; io.setImplementationAsPersistentObject(element); } void Study::fillObject(const String & label, PersistentObject & po) const { MapElement element = getObject(label); if (! element) throw InvalidArgumentException(HERE) << "No object labelled '" << label << "' in study"; Catalog::Get(po.getClassName()).assign(po, *element); } void Study::fillObject(const String & label, InterfaceObject & io) const { MapElement element = getObject(label); if (! element) throw InvalidArgumentException(HERE) << "No object labelled '" << label << "' in study"; io.setImplementationAsPersistentObject(element); } /* Storage manager accessor */ void Study::setStorageManager(const StorageManager & smgr) { p_storageManager_.reset(smgr.clone()); p_storageManager_->setStudy(this); } /* Storage manager accessor */ Study::StorageManagerImplementation Study::getStorageManager() const { return p_storageManager_; } /* Define a label for an object */ void Study::defineLabel(Id id, const String & label) { if (! label.empty()) labelMap_[ label ] = id; } /* Define the visibility of an object */ void Study::defineVisibility(Id id, Bool visible) { MapElement elt = getObject( id ); elt->setVisibility( visible ); } /* Add a PersistentObject to the study */ void Study::add(const InterfaceObject & io) { map_[ io.getId() ] = io.getImplementationAsPersistentObject(); } /* Add a PersistentObject to the study */ void Study::add(const String & label, const InterfaceObject & io, Bool force) { if ( hasObject( label ) ) { if (force) remove( label ); else throw InvalidArgumentException(HERE) << "Label '" << label << "' already defined in study. Use 'force = true' to remove previously saved element before saving this one"; } map_[ io.getId() ] = io.getImplementationAsPersistentObject(); defineLabel( io.getId(), label ); } /* Remove a PersistentObject from the study */ void Study::remove(const InterfaceObject & io) { Map::iterator it = map_.find( io.getId() ); map_.erase(it); } /* Remove a PersistentObject from the study */ void Study::remove(const String & label) { LabelMap::iterator it_label = labelMap_.find( label ); if (it_label == labelMap_.end()) throw InvalidArgumentException(HERE) << "No object with label '" << label << "' in study"; Map::iterator it_obj = map_.find( it_label->second ); map_.erase(it_obj); labelMap_.erase( it_label ); } /* Add a PersistentObject to the study */ void Study::add(const PersistentObject & po) { add(po.clone()); } /* Add a PersistentObject to the study */ void Study::add(const String & label, const PersistentObject & po, Bool force) { add(label, po.clone(), force); } /* Add a PersistentObject to the study (any map) */ void Study::add(const PersistentObject * po) { if (! po) throw InvalidArgumentException(HERE) << "Null pointer passed to method"; map_[ po->getShadowedId() ] = const_cast(po); } /* Add a PersistentObject to the study (any map) */ void Study::add(const String & label, const PersistentObject * po, Bool force) { if (! po) throw InvalidArgumentException(HERE) << "Null pointer passed to method"; if ( hasObject( label ) ) { if (force) remove( label ); else throw InvalidArgumentException(HERE) << "Label '" << label << "' already defined in study. Use 'force = true' to remove previously saved element before saving this one"; } map_[ po->getShadowedId() ] = const_cast(po); defineLabel( po->getShadowedId(), label ); } /* Print all the labels in the study */ String Study::printLabels() const { OSS oss; String separator(""); for(LabelMap::const_iterator it = labelMap_.begin(); it != labelMap_.end(); ++it, separator = ";") oss << separator << (*it).first; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/TBB.cxx000066400000000000000000000046741307543307100202300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies support for multithreading * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/OTconfig.hxx" #include "openturns/OTthread.hxx" #include "openturns/TBB.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS static pthread_mutex_t TBB_InstanceMutex_; static TBB * TBB_P_instance_ = 0; static const TBB_init initializer_TBB; #ifdef OPENTURNS_HAVE_TBB tbb::task_scheduler_init * TBB_P_scheduler_ = 0; #endif /* OPENTURNS_HAVE_TBB */ Bool TBB::IsAvailable() { #ifdef OPENTURNS_HAVE_TBB return true; #else return false; #endif } void TBB::SetNumberOfThreads(const UnsignedInteger numberOfThreads) { #ifdef OPENTURNS_HAVE_TBB delete TBB_P_scheduler_; TBB_P_scheduler_ = new tbb::task_scheduler_init(numberOfThreads); #endif } void TBB::Enable() { const UnsignedInteger nbThreads = ResourceMap::GetAsUnsignedInteger("parallel-threads"); SetNumberOfThreads(nbThreads); } void TBB::Disable() { SetNumberOfThreads(1); } TBB_init::TBB_init() { if (!TBB_P_instance_) { #ifndef OT_MUTEXINIT_NOCHECK pthread_mutexattr_t attr; pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK ); pthread_mutex_init( &TBB_InstanceMutex_, &attr ); #else pthread_mutex_init( &TBB_InstanceMutex_, NULL ); #endif TBB_P_instance_ = new TBB; } TBB::Enable(); } TBB_init::~TBB_init() { if (TBB_P_instance_) pthread_mutex_destroy(&TBB_InstanceMutex_); delete TBB_P_instance_; TBB_P_instance_ = 0; #ifdef OPENTURNS_HAVE_TBB delete TBB_P_scheduler_; TBB_P_scheduler_ = 0; #endif /* OPENTURNS_HAVE_TBB */ } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/TTY.cxx000066400000000000000000000043471307543307100202760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides definitions for tty control sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TTY.hxx" BEGIN_NAMESPACE_OPENTURNS #ifndef WIN32 static volatile Bool Colored( true ); // default is colored output #else static volatile Bool Colored( false ); // default is standard output #endif static const char * ColorMap[] = { /* ISO 6429 color sequences */ "\033[0m", /* DEFAULT */ "\033[1m", /* BOLD */ "\033[4m", /* UNDERLINE */ "\033[5m", /* BLINK */ /* Foreground */ "\033[30m", /* BLACKFG */ "\033[31m", /* REDFG */ "\033[32m", /* GREENFG */ "\033[33m", /* YELLOWFG */ "\033[34m", /* BLUEFG */ "\033[35m", /* PURPLEFG */ "\033[36m", /* CYANFG */ "\033[37m", /* WHITEFG */ /* Background */ "\033[30m", /* BLACKBG */ "\033[31m", /* REDBG */ "\033[32m", /* GREENBG */ "\033[33m", /* YELLOWBG */ "\033[34m", /* BLUEBG */ "\033[35m", /* PURPLEBG */ "\033[36m", /* CYANBG */ "\033[37m", /* WHITEBG */ }; /* Return a control sequence corresponding to the current color */ const char * TTY::GetColor( Color c ) { if ( !Colored || (c < 0) || (c >= LASTCOLOR) ) return ""; return ColorMap[ c ]; } /* Define the colorization strategy. Flag = true if colored output */ /* Q: Do we need to perform MT-safe programming ? Not sure. Ivan */ void TTY::ShowColors( Bool flag ) { Colored = flag; } /* Query the colorization strategy. Return true if colored output */ Bool TTY::ColoredOutput() { return Colored; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/XMLStorageManager.cxx000066400000000000000000000735611307543307100231020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief XMLStorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/XMLStorageManager.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/InterfaceObject.hxx" #include "openturns/Exception.hxx" #include "openturns/Catalog.hxx" #include "openturns/Study.hxx" #include "openturns/OSS.hxx" #include "openturns/PlatformInfo.hxx" #include "openturns/Log.hxx" #include "openturns/XMLToolbox.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OTconfig.hxx" #ifndef WIN32 #ifndef SWIG #ifndef XML_SUPPORTED #error "XML support is mandatory. Check configuration." #endif #endif #endif BEGIN_NAMESPACE_OPENTURNS #if defined OPENTURNS_HAVE_LIBXML2 /************ Tags ************/ #define DEFINE_TAG(name,value) \ static const char name ## Tag[] = value; \ struct name ## _tag { static inline const char * Get() { return name ## Tag ; } } namespace XML_STMGR { DEFINE_TAG( root , "openturns-study" ); DEFINE_TAG( bool , "bool" ); DEFINE_TAG( unsignedlong , "unsignedlong" ); DEFINE_TAG( numericalscalar , "numericalscalar" ); DEFINE_TAG( numericalcomplex, "numericalcomplex" ); DEFINE_TAG( real , "real" ); DEFINE_TAG( imag , "imag" ); DEFINE_TAG( string , "string" ); DEFINE_TAG( object , "object" ); } // namespace XML_STMGR /************ Attributes ************/ #define DEFINE_ATTRIBUTE(name,value) \ static const char name ## Attribute[] = value; \ struct name ## _attribute { static inline const char * Get() { return name ## Attribute ; } } namespace XML_STMGR { DEFINE_ATTRIBUTE( StudyVisible, "StudyVisible" ); DEFINE_ATTRIBUTE( StudyLabel , "StudyLabel" ); DEFINE_ATTRIBUTE( version , "version" ); DEFINE_ATTRIBUTE( class , "class" ); DEFINE_ATTRIBUTE( id , "id" ); DEFINE_ATTRIBUTE( name , "name" ); DEFINE_ATTRIBUTE( index , "index" ); DEFINE_ATTRIBUTE( member , "member" ); } // namespace XML_STMGR struct XMLInternalObject : public StorageManager::InternalObject { XML::Node node_; XMLInternalObject() : node_(0) {} XMLInternalObject(XML::Node node) : node_(node) {} virtual ~XMLInternalObject() throw() {} virtual XMLInternalObject * clone() const { return new XMLInternalObject(*this); } virtual void first() { node_ = XML::GetFirstChild( node_ ); } virtual void next() { node_ = XML::GetNextNode( node_ ); } virtual String __repr__() const { return OSS() << "XMLInternalObject { node = <" << node_ << ">}"; } virtual String __str__(const String & offset) const { return __repr__(); } }; struct XMLStorageManagerState : public StorageManager::InternalObject { XML::Node root_; XML::Node current_; XMLStorageManagerState() : root_(0), current_(0) {} virtual ~XMLStorageManagerState() throw() {} virtual XMLStorageManagerState * clone() const { return new XMLStorageManagerState(*this); } virtual void first() { current_ = XML::GetFirstChild( current_ ); } virtual void next() { current_ = XML::GetNextNode( current_ ); } virtual String __repr__() const { return OSS(true) << "XMLStorageManagerState { root = <" << root_ << ">, current_ = <" << current_ << ">}"; } virtual String __str__(const String & offset) const { return __repr__(); } }; const int XMLStorageManager::Precision_ = 17; CLASSNAMEINIT(XMLStorageManager); const VersionList XMLStorageManager::SupportedVersions; /* Default constructor */ XMLStorageManager::XMLStorageManager(const FileName & filename) : StorageManager(1), fileName_(filename), p_state_(new XMLStorageManagerState), p_document_() { // Nothing to do } /* * Virtual constructor */ XMLStorageManager * XMLStorageManager::clone() const { return new XMLStorageManager(*this); } /* String converter */ String XMLStorageManager::__repr__() const { return OSS() << "class=" << getClassName(); } /* Filename accessors */ String XMLStorageManager::getFileName() const { return fileName_; } void XMLStorageManager::setFileName(const String & fileName) { fileName_ = fileName; } /* Return the current state of the storage manager (for those having one) */ const StorageManager::InternalObject & XMLStorageManager::getState() const { assert(p_state_); return *p_state_; } /* Query the manager if the version is correct */ Bool XMLStorageManager::canManageVersion(UnsignedInteger version) const { return XMLStorageManager::SupportedVersions.contains(version); } /* Do some administrative tasks before saving/reloading */ void XMLStorageManager::initialize(const SaveAction caller) { cleanSavedObjects(); OSS oss; oss << getStudyVersion(); p_document_.reset(new XMLDoc); assert(p_document_); assert(p_state_); p_state_->root_ = XML::NewNode( XML_STMGR::root_tag::Get() ); XML::SetAttribute(p_state_->root_, XML_STMGR::version_attribute::Get(), oss); XML::SetRootNode(*p_document_, p_state_->root_); } /* Do some administrative tasks before saving/reloading */ void XMLStorageManager::initialize(const LoadAction caller) { p_document_.reset(new XMLDoc( fileName_ )); } /* Do some administrative tasks after saving/reloading */ void XMLStorageManager::finalize(const SaveAction caller) { // Nothing to do } /* Do some administrative tasks after saving/reloading */ void XMLStorageManager::finalize(const LoadAction caller) { // Nothing to do } /* Read and create the internal representation */ void XMLStorageManager::read() { assert(p_document_); assert(p_state_); p_state_->root_ = XML::GetRootNode( *p_document_ ); if (! p_state_->root_) throw StudyFileParsingException(HERE) << "Study file has no root element (" << fileName_ << ")"; if (! XML::IsElement( p_state_->root_, XML_STMGR::root_tag::Get() )) throw StudyFileParsingException(HERE) << "Can NOT find root element '" << XML_STMGR::root_tag::Get() << "' in file '" << fileName_ << "'. Got '" << XML::GetNodeName( p_state_->root_ ) << "'"; UnsignedInteger version = 0; String stul = XML::GetAttributeByName( p_state_->root_, XML_STMGR::version_attribute::Get() ); std::istringstream iss (stul); iss >> version; setStudyVersion(version); } /* Write the internal representation */ void XMLStorageManager::write() { assert(p_document_); p_document_->save( fileName_ ); } /* * This method saves the PersistentObject onto the medium */ void XMLStorageManager::save(const PersistentObject & obj, const String & label, bool fromStudy) { #ifdef SAVELOAD_CHECKING try { #endif if (! isSavedObject( obj.getId() )) { obj.save(*this, label, fromStudy); markObjectAsSaved( obj.getId() ); } #ifdef SAVELOAD_CHECKING } catch ( const Exception & ex ) { LOGERROR( OSS() << "When saving " << obj.getClassName() << " : " << ex ); } #endif } /* * This method reloads the PersistentObject from the medium */ void XMLStorageManager::load(Study & study) { setStudy( &study ); assert(p_state_); XML::Node node = XML::GetFirstChild( p_state_->root_ ); while( node ) { p_state_->current_ = node; XMLReadObject ro = readDOMElement(); if (ro.p_obj_) { study.add( ro.label_, *(ro.p_obj_) ); } node = XML::GetNextNode(node); } } /* Methods to read DOM elements */ XMLStorageManager::XMLReadObject XMLStorageManager::readDOMElement() { assert(p_state_); XMLReadObject ro; if ( p_state_->current_ ) { if (XML::IsElement(p_state_->current_, XML_STMGR::object_tag::Get() ) ) { String className = XML::GetAttributeByName(p_state_->current_, XML_STMGR::class_attribute::Get()); ro.label_ = XML::GetAttributeByName(p_state_->current_, XML_STMGR::StudyLabel_attribute::Get()); ro.visibility_ = XML::GetAttributeByName(p_state_->current_, XML_STMGR::StudyVisible_attribute::Get()); ro.p_obj_ = Catalog::Get(className).build(*this); if (! ro.visibility_.empty()) ro.p_obj_->setVisibility(ro.visibility_ == "true"); } } return ro; } /* Create a new empty object that will gather all saved information */ Pointer XMLStorageManager::createObject(const String & tag) const { return new XMLInternalObject( XML::NewNode(tag) ); } /* Append an internal object to the collection of saved ones */ void XMLStorageManager::appendObject(Pointer & p_obj) { assert(p_state_); assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::AddChild( p_state_->root_, node ); } void XMLStorageManager::setVisibility(Pointer & p_obj, Bool visible) { addAttribute( p_obj, XML_STMGR::StudyVisible_attribute::Get(), visible); } void XMLStorageManager::setLabel(Pointer & p_obj, const String & label) { addAttribute( p_obj, XML_STMGR::StudyLabel_attribute::Get(), label); } /************ Helper Functions ************/ /* toStringConverter */ static inline void toStringConverter(const String & value, String & st) { st = value; } template static inline void toStringConverter(const _Tp & value, String & st) { const int oldPrecision(PlatformInfo::GetNumericalPrecision()); PlatformInfo::SetNumericalPrecision(XMLStorageManager::Precision_); st = ( OSS() << value ); PlatformInfo::SetNumericalPrecision(oldPrecision); } /* fromStringConverter */ static inline void fromStringConverter(const String & st, Bool & value) { value = (st == "true" ) ? true : false; } static inline void fromStringConverter(const String & st, String & value) { value = st; } template static inline void fromStringConverter(const String & st, _Tp & value) { std::istringstream iss (st); iss >> value; } /* getValueToConvert */ template static inline String getValueToConvert(XML::Node node) { return XML::GetNodeValue( node ); } template <> inline String getValueToConvert(XML::Node node) { return XML::GetAttributeByName( node, XML_STMGR::id_attribute::Get() ); } /* fromNodeConverter */ template static inline void fromNodeConverter(XML::Node node, _Tp & value) { fromStringConverter( getValueToConvert( node ), value ); } template <> inline void fromNodeConverter(XML::Node node, Complex & value) { XML::Node node_real = XML::FindElementByName( node, XML_STMGR::real_tag::Get() ); XML::Node node_imag = XML::FindElementByName( node, XML_STMGR::imag_tag::Get() ); Scalar real = -1.0; Scalar imag = -1.0; fromStringConverter( getValueToConvert( node_real ), real ); fromStringConverter( getValueToConvert( node_imag ), imag ); value = Complex( real, imag ); } /************ Generic Functions ************/ /* AttributeWriter */ template static inline void AttributeWriter(Pointer & p_obj, const String & name, _Tp value) { assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); String attrValue; toStringConverter( value, attrValue ); XML::SetAttribute( node, name, attrValue ); } template <> inline void AttributeWriter(Pointer & p_obj, const String & name, Complex value) { assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::Node child = XML::NewNode( XML_STMGR::numericalcomplex_tag::Get() ); assert(child); XML::SetAttribute( child, XML_STMGR::name_attribute::Get(), name ); int oldPrecision(PlatformInfo::GetNumericalPrecision()); PlatformInfo::SetNumericalPrecision(XMLStorageManager::Precision_); XML::Node real = XML::NewNode( XML_STMGR::real_tag::Get(), OSS() << value.real() ); PlatformInfo::SetNumericalPrecision(oldPrecision); assert(real); XML::AddChild( child, real ); oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(XMLStorageManager::Precision_); XML::Node imag = XML::NewNode( XML_STMGR::imag_tag::Get(), OSS() << value.imag() ); PlatformInfo::SetNumericalPrecision(oldPrecision); assert(imag); XML::AddChild( child, imag ); XML::AddChild( node, child ); } /* AttributeReader */ template static inline void AttributeReader(TAG tag, Pointer & p_state, const String & name, _Tp & value) { assert(p_state); String st = XML::GetAttributeByName( p_state->current_, name ); fromStringConverter( st, value ); } /* IndexedValueWriter */ template static inline void IndexedValueWriter(TAG tag, Pointer & p_obj, UnsignedInteger index, _Tp value) { assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); String attrValue; toStringConverter( value, attrValue ); XML::Node child = XML::NewNode( tag.Get(), attrValue ); assert(child); XML::SetAttribute( child, XML_STMGR::index_attribute::Get(), OSS() << index ); XML::AddChild( node, child ); } template <> inline void IndexedValueWriter(XML_STMGR::numericalcomplex_tag tag, Pointer & p_obj, UnsignedInteger index, Complex value) { assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::Node child = XML::NewNode( XML_STMGR::numericalcomplex_tag::Get() ); assert(child); XML::SetAttribute( child, XML_STMGR::index_attribute::Get(), OSS() << index ); int oldPrecision(PlatformInfo::GetNumericalPrecision()); PlatformInfo::SetNumericalPrecision(XMLStorageManager::Precision_); XML::Node real = XML::NewNode( XML_STMGR::real_tag::Get(), OSS() << value.real() ); PlatformInfo::SetNumericalPrecision(oldPrecision); assert(real); XML::AddChild( child, real ); oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(XMLStorageManager::Precision_); XML::Node imag = XML::NewNode( XML_STMGR::imag_tag::Get(), OSS() << value.imag() ); PlatformInfo::SetNumericalPrecision(oldPrecision); assert(imag); XML::AddChild( child, imag ); XML::AddChild( node, child ); } /* IndexedValueReader */ template static inline void IndexedValueReader(TAG tag, Pointer & p_obj, UnsignedInteger index, _Tp & value) { assert(p_obj); XMLStorageManagerState & state = dynamic_cast(*p_obj); XML::Node node; while (( node = XML::FindNextElementByName( state.current_, tag.Get() ) )) { UnsignedInteger idx = 0; fromStringConverter( XML::GetAttributeByName(node, XML_STMGR::index_attribute::Get()), idx ); state.next(); if (idx == index) { fromNodeConverter( node, value ); return; } } LOGWARN( OSS() << "Failed when reading indexed value. Expected tag '" << tag.Get() << "'. Got '" << XML::GetNodeName(state.current_) << "'" ); } /* NamedObjectWriter */ template static inline void NamedObjectWriter(TAG tag, Pointer & p_obj, const String & name, _Tp & value) { assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::Node child = XML::NewNode( tag.Get() ); assert(child); XML::SetAttribute( child, XML_STMGR::member_attribute::Get(), name); XML::SetAttribute( child, XML_STMGR::id_attribute::Get(), OSS() << value.getId() ); XML::AddChild( node, child ); } /* NamedObjectReader */ template static inline int NamedObjectReader(TAG tag, Pointer & p_obj, const String & name, _Tp & value) { assert(p_obj); XMLStorageManagerState state = dynamic_cast(*p_obj); XML::Node node = XML::FindElementByName( state.current_, tag.Get() ); while ( node ) { String nm; fromStringConverter( XML::GetAttributeByName(node, XML_STMGR::member_attribute::Get()), nm ); if (nm == name) { fromNodeConverter( node, value ); return 1; } node = XML::FindNextElementByName( node, tag.Get() ); } return 0; } /************ Type = Bool ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, Bool value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, Bool & value) { AttributeReader( XML_STMGR::bool_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value) { IndexedValueWriter( XML_STMGR::bool_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value) { IndexedValueReader( XML_STMGR::bool_tag(), p_obj, index, value ); } /************ Type = UnsignedInteger ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value) { AttributeReader( XML_STMGR::unsignedlong_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value) { IndexedValueWriter( XML_STMGR::unsignedlong_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value) { IndexedValueReader( XML_STMGR::unsignedlong_tag(), p_obj, index, value ); } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 /************ Type = Unsigned64BitsInteger ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger & value) { AttributeReader( XML_STMGR::unsignedlong_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger value) { IndexedValueWriter( XML_STMGR::unsignedlong_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger & value) { IndexedValueReader( XML_STMGR::unsignedlong_tag(), p_obj, index, value ); } #endif /************ Type = Scalar ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, Scalar value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, Scalar & value) { AttributeReader( XML_STMGR::numericalscalar_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value) { IndexedValueWriter( XML_STMGR::numericalscalar_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value) { IndexedValueReader( XML_STMGR::numericalscalar_tag(), p_obj, index, value ); } /************ Type = Complex ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, Complex value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, Complex & value) { AttributeReader( XML_STMGR::numericalcomplex_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value) { IndexedValueWriter( XML_STMGR::numericalcomplex_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value) { IndexedValueReader( XML_STMGR::numericalcomplex_tag(), p_obj, index, value ); } /************ Type = String ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, const String & value) { AttributeWriter( p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, String & value) { AttributeReader( XML_STMGR::string_tag(), p_state_, name, value ); } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value) { IndexedValueWriter( XML_STMGR::string_tag(), p_obj, index, value ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value) { IndexedValueReader( XML_STMGR::string_tag(), p_obj, index, value ); } /************ Type = InterfaceObject ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value) { value.save( *this ); NamedObjectWriter( XML_STMGR::object_tag(), p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value) { Id shadowedId; if (NamedObjectReader( XML_STMGR::object_tag(), p_obj, name, shadowedId )) { if (! getStudy()->hasObject(shadowedId)) throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId << " in file '" << getFileName() << "' referenced before used"; value.setImplementationAsPersistentObject(getStudy()->getObject(shadowedId)); } } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value) { value.save( *this ); assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::Node child = XML::NewNode( XML_STMGR::object_tag::Get() ); assert(child); XML::SetAttribute( child, XML_STMGR::index_attribute::Get(), OSS() << index ); XML::SetAttribute( child, XML_STMGR::id_attribute::Get(), OSS() << value.getId()); XML::AddChild( node, child ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value) { Id shadowedId; IndexedValueReader( XML_STMGR::object_tag(), p_obj, index, shadowedId ); if (! getStudy()->hasObject(shadowedId)) throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId << " in file '" << getFileName() << "' referenced before used"; value.setImplementationAsPersistentObject(getStudy()->getObject(shadowedId)); } /* Returns true if the internal object has an attribute */ Bool XMLStorageManager::hasAttribute(Pointer & p_obj, const String & name) { assert(p_obj); XMLStorageManagerState & state = dynamic_cast(*p_obj); XML::Node node = state.current_; assert(node); return XML::ElementHasAttribute( node, name ); } /************ Type = PersistentObject ************/ /* Add an attribute to an internal object */ void XMLStorageManager::addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value) { value.save( *this ); NamedObjectWriter( XML_STMGR::object_tag(), p_obj, name, value ); } /* Read an attribute */ void XMLStorageManager::readAttribute(Pointer & p_obj, const String & name, PersistentObject & value) { Id shadowedId; if (NamedObjectReader( XML_STMGR::object_tag(), p_obj, name, shadowedId )) { if (! getStudy()->hasObject(shadowedId)) throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId << " in file '" << getFileName() << "' referenced before used"; Study * p_study = getStudy(); Pointer p_po = p_study->getObject(shadowedId); Catalog::Get(value.getClassName()).assign(value, *p_po); } } /* Add an indexed value to an internal object */ void XMLStorageManager::addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value) { value.save( *this ); assert(p_obj); XMLInternalObject & obj = dynamic_cast(*p_obj); XML::Node node = obj.node_; assert(node); XML::Node child = XML::NewNode( XML_STMGR::object_tag::Get() ); assert(child); XML::SetAttribute( child, XML_STMGR::index_attribute::Get(), OSS() << index ); XML::SetAttribute( child, XML_STMGR::id_attribute::Get(), OSS() << value.getId()); XML::AddChild( node, child ); } /* Read an indexed value */ void XMLStorageManager::readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value) { Id shadowedId; IndexedValueReader( XML_STMGR::object_tag(), p_obj, index, shadowedId ); if (! getStudy()->hasObject(shadowedId)) throw StudyFileParsingException(HERE) << "Element of id = " << shadowedId << " in file '" << getFileName() << "' referenced before used"; Study * p_study = getStudy(); Pointer p_po = p_study->getObject(shadowedId); Catalog::Get(value.getClassName()).assign(value, *p_po); } #endif /* OPENTURNS_HAVE_LIBXML2 */ END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/XMLToolbox.cxx000066400000000000000000000247151307543307100216260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides basic XML functionalities * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/OSS.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" #include "openturns/XMLToolbox.hxx" #include #include #include #include #if defined OPENTURNS_HAVE_LIBXML2 #include #include #endif BEGIN_NAMESPACE_OPENTURNS #if defined OPENTURNS_HAVE_LIBXML2 static //inline String xmlStringToString( const XML::xmlString & xst ) { return String( reinterpret_cast(xst.c_str()), xst.size() ); } static //inline XML::xmlString StringToXmlString( const String & st ) { return XML::xmlString( reinterpret_cast(st.c_str()), st.size() ); } XMLDoc::XMLDoc() : doc_(xmlNewDoc( REINTERPRET_CAST( const xmlChar *, "1.0" ) )) { // Nothing to do } XMLDoc::XMLDoc(const XMLDoc & other) : doc_(xmlCopyDoc( other.doc_, 1 )) { // Nothing to do } XMLDoc::XMLDoc(const FileName & pathToFile) : doc_(0) { doc_ = xmlParseFile( pathToFile.c_str() ); if (doc_ == NULL) throw XMLParserException(HERE) << "Error in parsing wrapper file " << pathToFile; } XMLDoc::XMLDoc(const char * buffer, int size) : doc_(0) { doc_ = xmlParseMemory( buffer, size ); if (doc_ == NULL) throw XMLParserException(HERE) << "Error in parsing buffer"; } XMLDoc::~XMLDoc() throw() { xmlFreeDoc( doc_ ); } XMLDoc & XMLDoc::operator =(const XMLDoc & other) { if (this != &other) { xmlFreeDoc( doc_ ); doc_ = xmlCopyDoc( other.doc_, 1 ); } return *this; } XMLDoc::operator xmlDocPtr() const { return doc_; } void XMLDoc::save( const FileName & fileName ) const { xmlSaveFormatFileEnc(fileName.c_str(), doc_, "UTF-8", 1); } String XMLDoc::__repr__() const { xmlSaveCtxt * xctx; xmlBuffer * buf; // Buffer allocation if ( !( buf = xmlBufferCreate() ) ) return String(); // Context definition if ( !( xctx = xmlSaveToBuffer( buf, NULL, XML_SAVE_NO_DECL ) ) ) { xmlBufferFree( buf ); return String(); } // Document streaming if ( xmlSaveDoc( xctx, doc_ ) < 0 ) { xmlSaveClose( xctx ); xmlBufferFree( buf ); return String(); } // Context closing (?) if ( xmlSaveClose( xctx ) <= 0) { xmlBufferFree( buf ); return String(); } String data = REINTERPRET_CAST( char * , buf->content ); xmlBufferFree( buf ); return data; } Bool XMLDoc::hasDTD() const { xmlDtdPtr dtd = xmlGetIntSubset( doc_ ); return (dtd != NULL); } Bool XMLDoc::validate() const { int ok = 0; xmlValidCtxtPtr validCtxt = xmlNewValidCtxt(); if (validCtxt != NULL) { validCtxt->error = REINTERPRET_CAST( xmlValidityErrorFunc, XML::ErrorHandler ); validCtxt->warning = REINTERPRET_CAST( xmlValidityWarningFunc, XML::WarningHandler ); ok = xmlValidateDocument( validCtxt, doc_ ); xmlFreeValidCtxt( validCtxt ); } else LOGWARN( OSS() << "Internal Error: Can't allocate storage for validation. No validation" ); return (ok == 1); } Bool XMLDoc::validate(const String & name, const FileName & dtd) const { int ok = 0; XML::xmlString aName = StringToXmlString( name ); XML::xmlString aDtd = StringToXmlString( dtd ); xmlDtdPtr theDTD = xmlParseDTD( NULL, aDtd.c_str() ); xmlValidCtxtPtr validCtxt = xmlNewValidCtxt(); if (validCtxt != NULL) { validCtxt->userData = (void *) stderr; validCtxt->error = REINTERPRET_CAST( xmlValidityErrorFunc, XML::ErrorHandler ); validCtxt->warning = REINTERPRET_CAST( xmlValidityWarningFunc, XML::WarningHandler ); ok = xmlValidateDtd( validCtxt, doc_, theDTD ); xmlFreeValidCtxt( validCtxt ); } else LOGWARN( OSS() << "Internal Error: Can't allocate storage for validation. No validation" ); xmlFreeDtd( theDTD ); return (ok == 1); } void XML::WarningHandler( void * ptr, const char * format, ...) { // int ret = 0; va_list args; char *msg; va_start(args, format); msg = MakeMessage( format, args ); va_end(args); LOGWARN( OSS() << "XML::WarningHandler: " << msg ); free(msg); } void XML::ErrorHandler( void * ptr, const char * format, ...) { // int ret = 0; va_list args; char *msg; va_start(args, format); msg = MakeMessage( format, args ); va_end(args); LOGERROR( OSS() << "XML::ErrorHandler: " << msg ); free(msg); } /* From printf(3) linux manpage */ char * XML::MakeMessage(const char *fmt, va_list args) { /* Guess we need no more than 100 bytes. */ int n, size = 100; char *p, *np; va_list args_copy; if ((p = (char*) calloc (sizeof(char), size)) == NULL) return NULL; while (1) { /* Try to print in the allocated space. */ #ifdef _MSC_VER args_copy = args; #else va_copy(args_copy, args); #endif n = vsnprintf (p, size, fmt, args_copy); va_end(args_copy); /* If that worked, return the string. */ if (n > -1 && n < size) return p; /* Else try again with more space. */ if (n > -1) /* glibc 2.1 */ size = n + 1; /* precisely what is needed */ else /* glibc 2.0 */ size *= 2; /* twice the old size */ if ((np = (char*) realloc (p, size)) == NULL) { free(p); return NULL; } else { p = np; } } } String XML::ToString(const xmlString & st) { return xmlStringToString( st ); } Bool XML::IsText(const Node & elt) { return elt ? (elt->type == XML_TEXT_NODE) : false; } Bool XML::IsElement(const Node & elt) { return elt ? (elt->type == XML_ELEMENT_NODE) : false; } Bool XML::IsElement(const Node & elt, const String & name) { xmlString aName = StringToXmlString( name ); Bool isElt = IsElement( elt ); return isElt && ( xmlStrcmp( elt->name, aName.c_str() ) == 0 ); } Bool XML::ElementHasAttribute(const Node & elt, const String & name) { xmlString aName = StringToXmlString( name ); assert(elt); return xmlHasProp( elt, aName.c_str() ); } String XML::GetAttributeByName(const Node & node, const String & name) { String attrVal; if (node) { xmlString aName = StringToXmlString( name ); if ( xmlHasProp( node, aName.c_str() ) ) { xmlChar * prop = xmlGetProp(node, aName.c_str() ); xmlString val = prop; attrVal = xmlStringToString( val ); xmlFree( prop ); } } return attrVal; } void XML::SetAttribute(const Node & node, const String & attribute, const String & value) { if (node) { xmlString aAttr = StringToXmlString( attribute ); xmlString aValue = StringToXmlString( value ); xmlNewProp( node, aAttr.c_str(), aValue.c_str() ); } } XML::Node XML::FindElementByName(const Node & node, const String & name) { Node cur = NULL; if (node) { for(cur = node->children; cur; cur = cur->next) { if (IsElement(cur, name)) { break; } } } return cur; } XML::Node XML::FindNextElementByName(const Node & node, const String & name) { Node cur = node; while (cur) { cur = cur->next; if (IsElement(cur, name)) break; } return cur; } String XML::GetNodeValue(const Node & node) { String value; Node cur = NULL; if (node) { for(cur = node->children; cur; cur = cur->next) { if (IsText(cur)) { xmlString val = cur->content; value = xmlStringToString( val ); break; } } } return value; } String XML::GetNodeName(const Node & node) { String name; if (node) { xmlString aName = node->name; name = xmlStringToString( aName ); } return name; } UnsignedInteger XML::GetNodeLineNumber(const Node & node) { UnsignedInteger lineno = 0; if (node) lineno = xmlGetLineNo(node); return lineno; } XML::Node XML::NewNode(const String & name) { xmlString aName = StringToXmlString( name ); Node node = xmlNewNode( NULL, aName.c_str() ); return node; } XML::Node XML::NewTextNode(const String & value) { xmlString aValue = StringToXmlString( value ); Node node = xmlNewText( aValue.c_str() ); return node; } XML::Node XML::NewNode(const String & name, const String & value) { Node node = NewNode( name ); Node child = NewTextNode( value ); AddChild( node, child ); return node; } void XML::AddChild(const Node & parent, const Node & child) { xmlAddChild( parent, child ); } XML::Node XML::GetRootNode( const XMLDoc & doc ) { return xmlDocGetRootElement( doc ); } void XML::SetRootNode( const XMLDoc & doc, const Node & root ) { assert(root); xmlDocSetRootElement( doc, root ); } XML::Node XML::GetFirstChild( const Node & node ) { assert(node); return node->children; } XML::Node XML::GetNextNode( const Node & node ) { assert(node); return node->next; } void XML::SetDTD( const XMLDoc & doc, const String & name, const String & path ) { xmlString aName = StringToXmlString( name ); xmlString aPath = StringToXmlString( path ); xmlCreateIntSubset( doc, aName.c_str(), NULL, aPath.c_str() ); } std::ostream & operator <<(std::ostream & os, const xmlNodePtr & node) { assert(node); String name = XML::GetNodeName( node ); os << "XML node='" << name << "'"; os << " attributes{"; xmlAttrPtr attr = node->properties; while(attr) { XML::xmlString aName = attr->name; xmlChar * prop = xmlGetProp(node, aName.c_str() ); XML::xmlString val = prop; String attrName = xmlStringToString( aName ); String attrVal = xmlStringToString( val ); os << attrName << "=" << attrVal << " "; attr = attr->next; } os << " }"; os << " children={ "; xmlNodePtr child = node->xmlChildrenNode; while (child) { os << child << " "; child = child->next; } os << " }"; if (XML::IsText(node)) { XML::xmlString val = node->content; os << " value='" << xmlStringToString( val ) << "'"; } return os; } #endif /* OPENTURNS_HAVE_LIBXML2 */ END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Common/openturns/000077500000000000000000000000001307543307100211175ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Common/openturns/AtomicFunctions.hxx000066400000000000000000000112461307543307100247610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies some atomic functions to support multithreading * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ATOMICFUNCTIONS_HXX #define OPENTURNS_ATOMICFUNCTIONS_HXX #include #include "openturns/OTconfig.hxx" #include "openturns/MutexLock.hxx" #ifdef OPENTURNS_HAVE_TBB #include #include "openturns/OTwindows.h" #endif BEGIN_NAMESPACE_OPENTURNS struct OT_API Atomic { // sometimes __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 is not defined altough sync primitives are available #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || ( ( GCC_VERSION >= 40100 ) && ! defined( __i386__ ) ) #define HAVE_SYNC_PRIMITIVES #endif #ifdef _MSC_VER #undef HAVE_SYNC_PRIMITIVES #endif #if !defined(HAVE_SYNC_PRIMITIVES) static pthread_mutex_t Atomic_Mutex_; #endif static inline int FetchAndAdd( int * p , int d ) { #if defined(HAVE_SYNC_PRIMITIVES) return __sync_fetch_and_add( p, d ); #elif defined(WIN32) return InterlockedExchangeAdd( (LONG *)p, d ); #elif defined(__i386__) int result; __asm__ __volatile__ ( "lock\n\t" "xadd %1, %0" : "=m" (*p), "=r" (result) : "m" (*p), "1" (d) : "memory", "cc" ); return result; #else MutexLock lock( Atomic_Mutex_ ); int result( *p ); *p += d; return result; #endif } static inline void Increment( int * p ) { #if defined(HAVE_SYNC_PRIMITIVES) __sync_fetch_and_add( p, 1 ); #elif defined(WIN32) InterlockedIncrement( (LONG *)p ); #elif defined(__i386__) __asm__ ( "lock\n\t" "incl %0" : "=m" (*p) : "m" (*p) : "cc" ); #else MutexLock lock( Atomic_Mutex_ ); ++ *p; #endif } static inline void Decrement( int * p ) { #if defined(HAVE_SYNC_PRIMITIVES) __sync_fetch_and_sub( p, 1 ); #elif defined(WIN32) InterlockedDecrement( (LONG *)p ); #elif defined(__i386__) __asm__ ( "lock\n\t" "decl %0" : "=m" (*p) : "m" (*p) : "cc" ); #else MutexLock lock( Atomic_Mutex_ ); -- *p; #endif } static inline int OrAndFetch( int * p , int d ) { #if defined(HAVE_SYNC_PRIMITIVES) return __sync_or_and_fetch( p, d ); #else // TODO: windows ? i386 ? MutexLock lock( Atomic_Mutex_ ); *p |= d; int result( *p ); return result; #endif } static inline void Reset( int * p ) { #if defined(HAVE_SYNC_PRIMITIVES) __sync_and_and_fetch( p, 0x00 ); #elif defined(WIN32) InterlockedExchange ( (LONG *)p, 0x00 ); #else // TODO: i386 ? MutexLock lock( Atomic_Mutex_ ); *p = 0; #endif } }; /* end struct Atomic */ #if defined(OPENTURNS_HAVE_TBB) class OT_API AtomicInt { typedef tbb::atomic Integer; Integer val_; public: AtomicInt(int v = 0) : val_() { val_ = v; } inline AtomicInt & operator = ( int v ) { val_ = v; return *this; } // Get p value, increment it by d and return the old value inline int fetchAndAdd( int d ) { return val_.fetch_and_add( d ); } inline void increment() { val_.fetch_and_add( 1 ); } inline void decrement() { val_.fetch_and_add( -1 ); } inline int get() const { return val_; } }; /* end class AtomicInt */ #else class OT_API AtomicInt { typedef int Integer; Integer val_; public: AtomicInt(int v = 0) { Atomic::Reset( & val_ ); Atomic::FetchAndAdd( & val_, v ); } inline AtomicInt & operator = ( int v ) { Atomic::Reset( & val_ ); Atomic::FetchAndAdd( & val_, v ); return *this; } // Get p value, increment it by d and return the old value inline int fetchAndAdd( int d ) { return Atomic::FetchAndAdd( & val_, d ); } inline void increment() { Atomic::Increment( & val_ ); } inline void decrement() { Atomic::Decrement( & val_ ); } inline int get() const { return val_; } }; /* end class AtomicInt */ #endif END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ATOMICFUNCTIONS_HXX */ openturns-1.9/lib/src/Base/Common/openturns/BinaryStorageManager.hxx000066400000000000000000000200471307543307100257170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BinaryStorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BINARYSTORAGEMANAGER_HXX #define OPENTURNS_BINARYSTORAGEMANAGER_HXX #include // for std::ostream #include // for std::ostream #include // for std::map #include "openturns/OTprivate.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /* Forward declaration of PersistentObject */ class PersistentObject; /* Forward declaration of BinaryStorageManagerState */ class BinaryStorageManagerState; /** * @class BinaryStorageManager * @brief Implements a storage manager that drives a XML file * @see StorageManager * @see Study */ class OT_API BinaryStorageManager : public StorageManager { CLASSNAME; class VersionList { std::vector versions_; public: VersionList() : versions_() { versions_.push_back(1); } Bool contains(UnsignedInteger v) const { return find(versions_.begin(), versions_.end(), v) != versions_.end(); } }; static const VersionList SupportedVersions; public: /** * Constructor for a XML StorageManager that reads/writes * to a XML file */ explicit BinaryStorageManager(const FileName & filename); /** * Virtual constructor */ virtual BinaryStorageManager * clone() const; /** @copydoc StorageManager::__repr__() const */ virtual String __repr__() const; /** Get the name of the file containing the study */ String getFileName() const; /** Set the name of the file containing the study */ void setFileName(const String & fileName); /** * This method saves the PersistentObject onto the medium */ virtual void save(const PersistentObject & obj, const String & label, bool fromStudy = false); /** * This method reloads the PersistentObject from the medium */ virtual void load(Study & study); /** Do some administrative tasks before saving/reloading * @internal */ virtual void initialize(const SaveAction caller); virtual void initialize(const LoadAction caller); /** Do some administrative tasks after saving/reloading * @internal */ virtual void finalize(const SaveAction caller); virtual void finalize(const LoadAction caller); /** Read and create the internal representation * @internal */ virtual void read(); /** Write the internal representation * @internal */ virtual void write(); #ifndef SWIG virtual Pointer registerObject(const PersistentObject & obj, bool fromStudy = false); /* Create a new empty object that will gather all saved information * @internal */ virtual Pointer createObject(const String & tag) const; /* Append an internal object to the collection of saved ones * @internal */ virtual void appendObject(Pointer & p_obj); /* Set the visibility attribute of the object * @internal */ virtual void setVisibility(Pointer & p_obj, Bool visible); /* Set the label associated with the object * @internal */ virtual void setLabel(Pointer & p_obj, const String & label); /* Add an attribute to an internal object * @internal */ virtual void addAttribute(Pointer & p_obj, const String & name, Bool value); virtual void addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value); virtual void addAttribute(Pointer & p_obj, const String & name, Scalar value); virtual void addAttribute(Pointer & p_obj, const String & name, Complex value); virtual void addAttribute(Pointer & p_obj, const String & name, const String & value); virtual void addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value); virtual void addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value); /* Add an indexed value to an internal object * @internal */ virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value); /* Read an attribute * @internal */ virtual void readAttribute(Pointer & p_obj, const String & name, Bool & value); virtual void readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value); virtual void readAttribute(Pointer & p_obj, const String & name, Scalar & value); virtual void readAttribute(Pointer & p_obj, const String & name, Complex & value); virtual void readAttribute(Pointer & p_obj, const String & name, String & value); virtual void readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value); virtual void readAttribute(Pointer & p_obj, const String & name, PersistentObject & value); /* Read an indexed value * @internal */ virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value); #endif protected: /** Query the manager if the version is correct */ virtual Bool canManageVersion(UnsignedInteger version) const; /** Return the current state of the storage manager (for those having one) */ virtual const StorageManager::InternalObject & getState() const; struct BINReadObject { Pointer p_obj_; BINReadObject() : p_obj_(0) {} }; /** Methods to read object */ BINReadObject readBinaryObject(); /** Erase the map of visible objects */ void cleanVisibleObjects(); private: /** The file we read from/write to */ FileName fileName_; /** The internal state of the manager */ Pointer p_state_; /** The internal document */ int filefd_; /** Map of visible objects */ typedef std::map > VisibleObjectsMap; VisibleObjectsMap visibleObjects_; }; /* class BinaryStorageManager */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BINARYSTORAGEMANAGER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Catalog.hxx000066400000000000000000000055101307543307100232230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Catalog records all the factories into a dictionnary * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CATALOG_HXX #define OPENTURNS_CATALOG_HXX #include // for std::map #include #include "openturns/OTprivate.hxx" #include "openturns/MutexLock.hxx" BEGIN_NAMESPACE_OPENTURNS /** Forward declaration */ class PersistentObjectFactory; /** * @class Catalog * * @brief %Catalog records all the object's factories into a dictionnary. * * %Catalog implements the 'singleton' strategy to share an unique dictionnary. * The catalog is readonly for common usage but writable only for factories * that record themselves within their constructor. */ class OT_API Catalog { public: #ifndef SWIG /** Return the catalog as a singleton */ static MutexLockSingleton GetInstance(); #endif /** Return the catalog as a singleton */ static void Add(const String & factoryName, const PersistentObjectFactory * p_factory); /** Get the factory by name */ static const PersistentObjectFactory & Get(const String & factoryName); /** Get the list of keys */ static std::vector GetKeys(); /** Destructor */ ~Catalog(); /** @copydoc Object::__repr__() const */ String __repr__() const; private: typedef std::map CatalogType; /** The dictionnary of factories */ CatalogType catalog_; /** Default constructor is private so Catalog can not be instanciated */ Catalog(); /** Add a new factory to the catalog */ void add(const String & factoryName, const PersistentObjectFactory * p_factory); /** Get the factory by name */ const PersistentObjectFactory & get(const String & factoryName) const; /** Get the list of keys */ std::vector getKeys() const; friend struct Catalog_init; /* friendship for static member initialization */ }; /* end class Catalog */ /** This class initializes all static members of Catalog */ struct OT_API Catalog_init { Catalog_init(); ~Catalog_init(); }; /* end struct Catalog_init */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CATALOG_HXX */ openturns-1.9/lib/src/Base/Common/openturns/ComparisonOperator.hxx000066400000000000000000000041241307543307100254770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComparisonOperator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPARISONOPERATOR_HXX #define OPENTURNS_COMPARISONOPERATOR_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComparisonOperator * * @brief The class describes the concept of a comparison operator. * * The implementation defined what comparison is actually performed. * @see ComparisonOperatorImplementation */ class OT_API ComparisonOperator : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ ComparisonOperator(); /** Constructor from implementation */ ComparisonOperator(const ComparisonOperatorImplementation & op); /** * Return true if comparison succeeds * @param a The left hand side of the expression * @param b The right hand side of the expression * @return True if comparison succeeds */ Bool operator()(Scalar a, Scalar b) const; /** @copydoc operator()() * This method is an alias for ComparisonOperator::operator()(const Scalar a, const Scalar b). */ Bool compare(const Scalar a, const Scalar b) const; }; /* class ComparisonOperator */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPARISONOPERATOR_HXX */ openturns-1.9/lib/src/Base/Common/openturns/ComparisonOperatorImplementation.hxx000066400000000000000000000042411307543307100304050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComparisonOperatorImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPARISONOPERATORIMPLEMENTATION_HXX #define OPENTURNS_COMPARISONOPERATORIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComparisonOperatorImplementation * * @brief The class implements the concept of comparison operator defined in ComparisonOperator. * * This class is abstract so it can not be instanciated. It must be derived. * @see ComparisonOperator */ class OT_API ComparisonOperatorImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ ComparisonOperatorImplementation(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual ComparisonOperatorImplementation * clone() const; /** @copydoc ComparisonOperator::operator()() const */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class ComparisonOperatorImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPARISONOPERATORIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Equal.hxx000066400000000000000000000040711307543307100227210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of equality comparison * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EQUAL_HXX #define OPENTURNS_EQUAL_HXX #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Equal * * @brief The class implements the equality comparison * * This class is derived from ComparisonOperatorImplementation. It performs the comparison * of two Scalar and is mainly used in threshold exceedence algorithms. */ class OT_API Equal : public ComparisonOperatorImplementation { CLASSNAME; public: /** Default constructor */ Equal(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual Equal * clone() const; /** * Return true if a == b * @param a The left hand side of the expression * @param b The right hand side of the expression * @return True if comparison succeeds */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class Equal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EQUAL_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Exception.hxx000066400000000000000000000170771307543307100236220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Exception defines top-most exception strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXCEPTION_HXX #define OPENTURNS_EXCEPTION_HXX #include #include "openturns/OTprivate.hxx" #include "openturns/OSS.hxx" BEGIN_NAMESPACE_OPENTURNS #ifndef SWIG /* * A helper class that saves the position where it was instanciated in file. * This class works in conjonction with the preprocessor (cpp). See HERE macro */ class OT_API PointInSourceFile { public: PointInSourceFile(const char * file, int line ) : file_(file), line_(line) {} ~PointInSourceFile() {} const char * getFile() const { return file_; } int getLine() const { return line_; } std::string str() const { std::ostringstream oss; oss << file_ << ":" << line_ ; return oss.str(); } private: const char * file_; int line_; }; /* class PointInSourceFile */ /* * The macro HERE creates a PointInSourceFile object that saves the position * in the source file. */ #define HERE OT::PointInSourceFile(__FILE__,__LINE__) #endif /* SWIG */ /** * @class Exception * * @brief The base class for all OpenTURNS' exceptions * * Exception defines top-most exception strategies. It derives from STL std::exception * so OpenTURNS' exceptions can be catched as standard exceptions. */ class OT_API Exception : public std::exception { public: /** Default constructor * @internal */ Exception(const PointInSourceFile & point); /** Copy constructor */ Exception(const Exception & other); /** Destructor */ virtual ~Exception() throw(); /** @copydoc Object::__repr__() const */ String __repr__() const throw(); /** Point accessor * * This method returns a string describing where the exception was launched. * No need to free the string. */ const char * where() const throw(); /** Reason accessor * * This method returns a string describing what was the reason of the exception. * No need to free the string. */ const char * what() const throw(); /** Class name accessor * * This method returns a string containing the class of the exception. * No need to free the string. */ const char * type() const throw(); /** Stream operator * * This method makes exceptions as friendly as std::ostream to add information. * @param obj Any object that can be streamed out to an std::ostream can be appended to the exception's reason */ template Exception & operator << (T obj) { reason_ += OSS() << obj; return *this; } protected: /* Inheritance constructor */ Exception(const PointInSourceFile & point, const char * type); private: /** The point in source file where the exception was raised */ const PointInSourceFile point_; /** Reason describes what was the exception */ String reason_; /** Exception class name */ const char * className_; }; /* class Exception */ /** * @fn std::ostream & operator <<(std::ostream & os, const Exception & obj) * @brief Output stream converter * @param os A STL output stream exception * @param obj The exception read by \em os * @return A reference to \em os * * Operator << converts the Exception object to an output stream * so it is easy to show the reason of the exception. */ OT_API std::ostream & operator <<(std::ostream & os, const Exception & obj); #ifndef SWIG OT_API OStream & operator <<(OStream & OS, const Exception & obj); #endif /* * * All exceptions defined for the user are listed below * */ #define NEW_EXCEPTION( CName ) class OT_API CName : public Exception \ { \ public: \ CName (const PointInSourceFile & point); \ virtual ~CName () throw(); \ template CName & operator << (T obj) \ { \ this->Exception::operator << ( obj ); \ return *this; \ } \ } /** * @class FileNotFoundException * @brief Raised when a file can not be found on filesystem * @internal */ NEW_EXCEPTION( FileNotFoundException ); /** * @class InternalException * @brief Raised when an internal failure happened preventing processing termination * @internal */ NEW_EXCEPTION( InternalException ); /** * @class InvalidArgumentException * @brief Raised when an incorrect argument is passed to a method * @internal */ NEW_EXCEPTION( InvalidArgumentException ); /** * @class InvalidDimensionException * @brief Raised when an abject of an incorrect dimension is passed to a method * @internal */ NEW_EXCEPTION( InvalidDimensionException ); /** * @class NotYetImplementedException * @brief Raised when a method has not been implemented yet though it should be * @internal */ NEW_EXCEPTION( NotYetImplementedException ); /** * @class OutOfBoundException * @brief Raised when an index of a collection jumped out of the expected bounds * @internal */ NEW_EXCEPTION( OutOfBoundException ); /** * @class XMLException * @brief Raised when a general XML error was detected * @internal */ NEW_EXCEPTION( XMLException ); /** * @class XMLParserException * @brief Raised when an XML error was detected during file parsing * @internal */ NEW_EXCEPTION( XMLParserException ); /** * @class DynamicLibraryException * @brief Raised when a dynamic library can not be loaded or when a symbol can not be found in it * @internal */ NEW_EXCEPTION( DynamicLibraryException ); /** * @class NotSymmetricDefinitePositiveException * @brief Raised when a matrix seems not to be symmetric nor positive definite * @internal */ NEW_EXCEPTION( NotSymmetricDefinitePositiveException ); /** * @class InvalidRangeException * @brief Raised when an incorrect * @internal */ NEW_EXCEPTION( InvalidRangeException ); /** * @class NotDefinedException * @brief Raised when raise when a method has no definition and should not have one * @internal */ NEW_EXCEPTION( NotDefinedException ); /** * @class FileOpenException * @brief Raised when a file can not be opened * @internal */ NEW_EXCEPTION( FileOpenException ); /** * @class StudyFileParsingException * @brief Raised when the study file can be read * @internal */ NEW_EXCEPTION( StudyFileParsingException ); /** * @class ObjectNotInStudyException * @brief Raised when a file does not belong to a saved study * @internal */ NEW_EXCEPTION( ObjectNotInStudyException ); /** * @class ConfigurationFileParsingException * @brief Raised when the configuration file can not be read * @internal */ NEW_EXCEPTION( ConfigurationFileParsingException ); #undef NEW_EXCEPTION END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXCEPTION_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Greater.hxx000066400000000000000000000041241307543307100232420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of strict greater comparison * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GREATER_HXX #define OPENTURNS_GREATER_HXX #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Greater * * @brief The class implements the strict greater comparison * * This class is derived from ComparisonOperatorImplementation. It performs the comparison * of two Scalar and is mainly used in threshold exceedence algorithms. */ class OT_API Greater : public ComparisonOperatorImplementation { CLASSNAME; public: /** Default constructor */ Greater(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual Greater * clone() const; /** * Return true if a > b * @param a The left hand side of the expression * @param b The right hand side of the expression * @return True if comparison succeeds */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class Greater */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GREATER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/GreaterOrEqual.hxx000066400000000000000000000042211307543307100245310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of greater or equal comparison * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GREATEROREQUAL_HXX #define OPENTURNS_GREATEROREQUAL_HXX #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GreaterOrEqual * * @brief The class implements the greater or equal comparison * * This class is derived from ComparisonOperatorImplementation. It performs the comparison * of two Scalar and is mainly used in threshold exceedence algorithms. */ class OT_API GreaterOrEqual : public ComparisonOperatorImplementation { CLASSNAME; public: /** Default constructor */ GreaterOrEqual(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual GreaterOrEqual * clone() const; /** * Return true if a >= b * @param a The left hand side of the expression * @param b The right hand side of the expression * @return True if comparison succeeds */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class GreaterOrEqual */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GREATEROREQUAL_HXX */ openturns-1.9/lib/src/Base/Common/openturns/IdFactory.hxx000066400000000000000000000034251307543307100235400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class IdFactory builds unique Ids for all Objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IDFACTORY_HXX #define OPENTURNS_IDFACTORY_HXX #include // for std::ostream #include "openturns/OTprivate.hxx" #include "openturns/AtomicFunctions.hxx" #include "openturns/OStream.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IdFactory * * @brief %IdFactory builds unique Ids for all PersistentObjects * @see PersistentObject * @see StorageManager * * The IdFactory ensures that each PersistentObject has an unique Id so they can be * distinguished from each other. * The IdFactory implements a 'singleton' strategy. */ class OT_API IdFactory { public: /** Id accessor * * The way to get an Id for a new PersistentObject. */ static Id BuildId(); private: /** Disable default constructors */ IdFactory(); IdFactory(const IdFactory& other); IdFactory & operator=(const IdFactory& other); }; /* class IdFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_IDFACTORY_HXX */ openturns-1.9/lib/src/Base/Common/openturns/InterfaceObject.hxx000066400000000000000000000052511307543307100247020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The abstract class InterfaceObject defines the GetImplementation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTERFACEOBJECT_HXX #define OPENTURNS_INTERFACEOBJECT_HXX #include "openturns/OTprivate.hxx" #include "openturns/Pointer.hxx" #include "openturns/Object.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InterfaceObject * * @brief The top-most class that allows the construction of the Interface/Implementation design pattern * @internal * @see TypedInterfaceObject * * InterfaceObject defines a pure virtual method getImplementation * that returns a pointer to a PersistentObject. See TypedInterfaceObject for concrete implementation. */ class OT_API InterfaceObject : public Object { CLASSNAME; public: typedef Pointer ImplementationAsPersistentObject; /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** @copydoc Object::__str__() const */ virtual String __str__(const String & offset = "") const; /** Returns a pointer to the underlying implementation object viewed as a PersistentObject * @internal */ virtual ImplementationAsPersistentObject getImplementationAsPersistentObject() const = 0 ; /** Sets the pointer to the underlying implementation object * @internal */ virtual void setImplementationAsPersistentObject(const ImplementationAsPersistentObject & obj) = 0; /** Id accessor */ Id getId() const; /** Name accessor */ virtual void setName(const String & name); virtual String getName() const; /** Method save() stores the object through the StorageManager * @internal */ void save(StorageManager & mgr, const String & label) const; /** Method save() stores the object through the StorageManager * @internal */ void save(StorageManager & mgr) const; }; /* class InterfaceObject */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTERFACEOBJECT_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Less.hxx000066400000000000000000000037601307543307100225640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of strict less comparison * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LESS_HXX #define OPENTURNS_LESS_HXX #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Less * * @brief The class implements the strict less comparison * * This class is derived from ComparisonOperatorImplementation. It performs the comparison * of two Scalar and is mainly used in threshold exceedence algorithms. */ class OT_API Less : public ComparisonOperatorImplementation { CLASSNAME; public: /** Default constructor */ Less(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual Less * clone() const; /** @copydoc ComparisonOperator::operator()(const Scalar, const Scalar) const * Return true if a < b */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class Less */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LESS_HXX */ openturns-1.9/lib/src/Base/Common/openturns/LessOrEqual.hxx000066400000000000000000000041631307543307100240530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of less or equal comparison * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LESSOREQUAL_HXX #define OPENTURNS_LESSOREQUAL_HXX #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LessOrEqual * * @brief The class implements the less or equal comparison * * This class is derived from ComparisonOperatorImplementation. It performs the comparison * of two Scalar and is mainly used in threshold exceedence algorithms. */ class OT_API LessOrEqual : public ComparisonOperatorImplementation { CLASSNAME; public: /** Default constructor */ LessOrEqual(); /* String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual LessOrEqual * clone() const; /** * Return true if a <= b * @param a The left hand side of the expression * @param b The right hand side of the expression * @return True if comparison succeeds */ virtual Bool operator() (const Scalar a, const Scalar b) const; /* Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class LessOrEqual */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LESSOREQUAL_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Lockable.hxx000066400000000000000000000052101307543307100233620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Lockable defines an interface for the lock functionality * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOCKABLE_HXX #define OPENTURNS_LOCKABLE_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Lockable * @brief Makes a class lockable for multithreading * @internal * * Lockable is an interface (an abstract class) intended to * be derived by any class that need to be run in a multithreaded * environment. It provides a lock mechanism that protect the object * from being concurrently accessed and then being corrupted. * The embedded Lock class is a scoped-lock, ie the lock is * guaranted during the lifetime of the Lock object. */ class OT_API Lockable { public: /** * @class Lock * @brief Implements a myltithreaded lock * @internal * * This class provides a mechanism of scoped lock. */ class Lock { public: /** * Usual constructor * * Take the mutex of the Lockable Object * @param p_lockableObject A pointer to the object to be locked */ Lock(const Lockable * p_lockableObject); /* * Constructor with another mutex */ //Lock(pthread_mutex_t & mutex); /** * Destructor * * Release the mutex of the Lockable Object */ virtual ~Lock(); protected: private: /** A pointer to the mutex to lock/unlock */ //pthread_mutex_t * p_mutex_; }; /* class Lock */ friend class Lock; /** * Default constructor * * Initialize the mutex */ Lockable(); /** * Copy constructor * * Initialize the mutex */ Lockable(const Lockable & other); /** * Destructor * * Destroy the mutex */ virtual ~Lockable(); protected: /** The mutex that protect the object */ //mutable pthread_mutex_t mutex_; private: }; /* class Lockable */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOCKABLE_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Log.hxx000066400000000000000000000147121307543307100223760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Log records all user information to a file or tty * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOG_HXX #define OPENTURNS_LOG_HXX #include #include #include "openturns/OTprivate.hxx" #include "openturns/AtomicFunctions.hxx" #include "openturns/TTY.hxx" #include "openturns/MutexLock.hxx" #define LOGDEBUG(st) do { if (OT::Log::HasDebug() ) OT::Log::Debug(st); } while(0) #define LOGINFO(st) do { if (OT::Log::HasInfo() ) OT::Log::Info(st); } while(0) #define LOGUSER(st) do { if (OT::Log::HasUser() ) OT::Log::User(st); } while(0) #define LOGWARN(st) do { if (OT::Log::HasWarn() ) OT::Log::Warn(st); } while(0) #define LOGERROR(st) do { if (OT::Log::HasError() ) OT::Log::Error(st); } while(0) #define LOGTRACE(st) do { if (OT::Log::HasTrace() ) OT::Log::Trace(st); } while(0) BEGIN_NAMESPACE_OPENTURNS #ifndef SWIG struct _Prefix { typedef String Value; Value color_, nocolor_, prefix_; _Prefix() : color_(), nocolor_(), prefix_() {} _Prefix( const Value & color, const Value & nocolor, const Value & prefix) : color_(color), nocolor_(nocolor), prefix_(prefix) {} }; std::ostream & operator << ( std::ostream & os, const _Prefix & pfx ); #endif /** * @class log * @brief Records all user information to a file or tty * @internal */ class OT_API Log { public: typedef unsigned long Severity; private: #ifndef SWIG /** GetInstance gives a locked access to the singleton */ static MutexLockSingleton GetInstance(); #endif public: /** Those flags should be ORed */ static const Severity DBG; static const Severity INFO; static const Severity USER; static const Severity WARN; static const Severity ERROR; static const Severity TRACE; static const Severity DEFAULT; static const Severity NONE; static const Severity ALL; #ifndef SWIG /** Change the Log */ static void Reset(); #endif /** Log messages according to the DBG level * @param msg The message to be logged */ static void Debug(const String & msg); static inline Bool HasDebug() { return 0 != (Flags() & Log::DBG); } /** Log messages according to the INFO level * @param msg The message to be logged */ static void Info(const String & msg); static inline Bool HasInfo() { return 0 != (Flags() & Log::INFO); } /** Log messages according to the USER level * @param msg The message to be logged */ static void User(const String & msg); static inline Bool HasUser() { return 0 != (Flags() & Log::USER); } /** Log messages according to the WARN level * @param msg The message to be logged */ static void Warn(const String & msg); static inline Bool HasWarn() { return 0 != (Flags() & Log::WARN); } /** Log messages according to the ERROR level * @param msg The message to be logged */ static void Error(const String & msg); static inline Bool HasError() { return 0 != (Flags() & Log::ERROR); } /** Log messages according to the TRACE level * @param msg The message to be logged */ static void Trace(const String & msg); static inline Bool HasTrace() { return 0 != (Flags() & Log::TRACE); } /** Divert the output to a file * @param file The filename where the log will be written */ static void SetFile(const FileName & file); /** Set the level flags for the messages logged to the file * @param flags An integer built from ORed level flags */ static void Show(Severity flags); /** Get the current level flags * @return An integer built from ORed level flags */ static Severity Flags(); /** Flush pending messages * @internal */ static void Flush(); /** Does Log show repeated messages or not * If repeat is false then Log shows every messages it receives * even if they are identical to the previous ones. * If repeat is true then Log only shows the first message * and a message counting how much identical messages were * received after that. */ static void Repeat( Bool repeat ); /** Color accessors. */ static void SetColor(const Log::Severity severity, const TTY::Color color); static void SetColor(const Log::Severity severity, const String & color); static String GetColor(const Log::Severity severity); #ifndef SWIG struct OT_API Entry { Severity sev_; String msg_; Entry(Severity sev, String msg) : sev_(sev), msg_(msg) {} Entry() : sev_(0), msg_() {} Bool operator== (const Entry & other) const { return (this->sev_ == other.sev_) && (this->msg_ == other.msg_); } }; /* end struct Entry */ #endif ~Log(); private: Log(); void push(const Entry & entry); void printRepeatedMessage(const Entry & entry); void flush(); void repeat( Bool r ); void setColor(const Log::Severity severity, const String & color); String getColor(const Log::Severity severity) const; /** Set the name of the log file */ void setFile(const FileName & file); /** Human readable log */ mutable std::map logName_; /** The environment variable name */ const char * openturnsLogSeverityVariableName_; /** Set Severity according to Openturns LogSeverity Variable */ void initSeverityFromEnvironment(); /** The file where to write messages */ std::ostream * p_file_; /** Remember the previous message */ mutable Entry previousMessage_; mutable UnsignedInteger count_; mutable AtomicInt repeat_; friend struct Log_init; /* friendship for static member initialization */ }; /* end class Log */ /** This struct initializes all static members of Log */ struct OT_API Log_init { Log_init(); ~Log_init(); }; /* end struct Log_init */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOG_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Memory.hxx000066400000000000000000000073001307543307100231200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file declares memory debugging functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MEMORY_HXX #define OPENTURNS_MEMORY_HXX #include #include "openturns/OTdebug.h" #ifdef DEBUG_MEMORY #include #include #include #include "openturns/OTthread.hxx" #include "openturns/OTmemory.hxx" #ifndef SWIG template struct CStyleAllocator { typedef T value_type; typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef ptrdiff_t difference_type; typedef size_t size_type; template struct rebind { typedef CStyleAllocator other; }; CStyleAllocator() {} CStyleAllocator(const CStyleAllocator & other) {} template CStyleAllocator(const CStyleAllocator & other) {} ~CStyleAllocator() {} pointer allocate(size_type n, const void * = 0) { if (n > this->max_size()) std::__throw_bad_alloc(); return static_cast( std::calloc( n, sizeof(T) ) ); } void deallocate(pointer p, size_type) { std::free( p ); } size_type max_size() const { return size_t(-1) / sizeof(T); } void construct(void * p, const T & x) { ::new((void *)p) T(x); } void destroy(pointer p) { p->~T(); } pointer address(reference x) const { return &x; } const_pointer address(const_reference x) const { return &x; } }; template bool operator == (const CStyleAllocator & lhs, const CStyleAllocator & rhs) { return true; } template bool operator != (const CStyleAllocator & lhs, const CStyleAllocator & rhs) { return false; } struct OT_API _OpenTURNS_memory { void * ptr_; size_t size_; }; typedef std::map < void *, _OpenTURNS_memory *, std::less, CStyleAllocator > > MemContainer; typedef std::map, CStyleAllocator > > MemSpectrum; class OT_API MemoryImplementation { public: MemContainer memList_; MemSpectrum memSpectrum_; size_t memoryUsage_; size_t fullMemoryUsage_; size_t maxMemoryUsage_; size_t maxFullMemoryUsage_; bool flag_; MemoryImplementation(); ~MemoryImplementation(); }; class OT_API Memory { static MemoryImplementation * p_impl_; Memory() {} static void Release(); public: ~Memory() {} static MemoryImplementation & GetInstance(); }; class OT_API LockNewDelete { static pthread_mutex_t NewMutex_; static void Lock(); static void Unlock(); public: LockNewDelete(); ~LockNewDelete(); }; #endif /* SWIG */ #endif /* DEBUG_MEMORY */ OT_API size_t GetMemoryUsage(); OT_API size_t GetFullMemoryUsage(); OT_API size_t GetMaxMemoryUsage(); OT_API size_t GetMaxFullMemoryUsage(); OT_API void printMemoryUsage(); OT_API void printMemorySpectrum(); OT_API void SetMemoryFlag(bool); #endif /* OPENTURNS_MEMORY_HXX */ openturns-1.9/lib/src/Base/Common/openturns/MutexLock.hxx000066400000000000000000000053711307543307100235710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class MutexLock manages the lock/unlock of Pthread mutexes * This file is intended to be only include in .cxx files (avoid .hxx) * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MUTEXLOCK_HXX #define OPENTURNS_MUTEXLOCK_HXX #include // for errno(3) #include // for perror(3) #include // for exit(3) #include // for strerror(3) #include "openturns/OTprivate.hxx" #include "openturns/OTthread.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API MutexLock { pthread_mutex_t & mtx_; public: MutexLock( pthread_mutex_t & mtx ) : mtx_(mtx) { int rc = pthread_mutex_lock( &mtx_ ); if (rc != 0) { fprintf( stderr, "(MutexLock ctor) rc=%d : %s\n", rc, strerror(rc) ); exit(1); } } MutexLock( const MutexLock & other ) : mtx_(other.mtx_) { int rc = pthread_mutex_lock( &mtx_ ); if (rc != 0) { fprintf( stderr, "(MutexLock copy ctor) rc=%d : %s\n", rc, strerror(rc) ); exit(1); } } virtual ~MutexLock() throw() { int rc = pthread_mutex_unlock( &mtx_ ); if (rc != 0) { fprintf( stderr, "(MutexLock dtor) rc=%d : %s\n", rc, strerror(rc) ); exit(1); } } }; /* class MutexLock */ template class MutexLockSingleton { T & singleton_; MutexLock lock_; public: // Default constructor, defined by client classes MutexLockSingleton( T & singleton ) throw(); // Default copy-constructor MutexLockSingleton( const MutexLockSingleton & other ) : singleton_(other.singleton_), lock_(other.lock_) {} private: // Disable copy-assignment MutexLockSingleton& operator=( const MutexLockSingleton & other ); public: /** @copydoc Object::__repr__() const */ String __repr__() const { return singleton_.__repr__(); } #ifndef SWIG T & lock() throw() { return singleton_; } const T & lock() const throw() { return singleton_; } #endif }; /* class MutexLockSingleton */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MUTEXLOCK_HXX */ openturns-1.9/lib/src/Base/Common/openturns/OSS.hxx000066400000000000000000000145021307543307100223160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class OSS streams out objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OSS_HXX #define OPENTURNS_OSS_HXX #include #include #include #include // for std::pair #include "openturns/OStream.hxx" BEGIN_NAMESPACE_OPENTURNS template std::ostream & operator << (std::ostream & os, const std::pair & p) { return os << "(" << p.first << "," << p.second << ")"; } template OStream & operator << (OStream & OS, const std::pair & p) { return OS << "(" << p.first << "," << p.second << ")"; } /** * Struct Bulk protects the underlying object output from being * modified by OSSFormater */ template struct Bulk { T data_; Bulk(T data) : data_(data) {} operator T() const { return data_; } }; /** * Struct OSSFormater is a helper class for OSS that adapt the * format of output according to type T */ /* Any type */ template struct OSSFormater { inline static void apply(std::ostringstream & oss, T obj, int /*precision*/) { oss << obj; } inline static void apply(OStream & OS, T obj, int /*precision*/) { OS << obj; } }; /* struct OSSFormater */ /* double */ template <> struct OSSFormater { inline static void apply(std::ostringstream & oss, double d, int precision) { int oldPrecision = static_cast(oss.precision(precision)); oss << d; oss.precision(oldPrecision); } inline static void apply(OStream & OS, double d, int precision) { int oldPrecision = static_cast(OS.getStream().precision(precision)); OS.getStream() << d; OS.getStream().precision(oldPrecision); } }; /* float */ template <> struct OSSFormater { inline static void apply(std::ostringstream & oss, float f, int precision) { int oldPrecision = static_cast(oss.precision(precision)); oss << f; oss.precision(oldPrecision); } inline static void apply(OStream & OS, float f, int precision) { int oldPrecision = static_cast(OS.getStream().precision(precision)); OS.getStream() << f; OS.getStream().precision(oldPrecision); } }; /* bool */ template <> struct OSSFormater { inline static void apply(std::ostringstream & oss, bool b, int /*precision*/) { oss << (b ? "true" : "false"); } inline static void apply(OStream & OS, bool b, int /*precision*/) { OS.getStream() << (b ? "true" : "false"); } }; /** * Class OSS is useful when streaming data through a function * that expect a string as parameter */ class OT_API OSS { private: std::ostringstream oss_; mutable int precision_; mutable bool full_; public: explicit OSS(bool full = true); template inline OSS & operator << (T obj) { if (full_) { OStream OS(oss_); OSSFormater::apply(OS, obj, precision_); } else OSSFormater::apply(oss_, obj, precision_); return *this; } inline OSS & setPrecision(int precision) { precision_ = precision; oss_.precision(precision_); return *this; } inline int getPrecision() const { precision_ = static_cast(oss_.precision()); return precision_; } operator std::string() const; std::string str() const; void clear(); }; /* class OSS */ template struct AllElementsPredicate : public std::unary_function<_Tp, Bool> { Bool operator()(const _Tp&) const { return true; } }; template < typename _Tp, typename _UnaryPredicate = AllElementsPredicate<_Tp>, typename _CharT = char, typename _Traits = std::char_traits<_CharT> > class OSS_iterator : public std::iterator { public: //@{ /// Public typedef typedef _CharT char_type; typedef _Traits traits_type; typedef OSS ostream_type; //@} private: ostream_type* _M_stream; String _M_string; String _M_prefix; mutable bool _M_first; public: /** * Construct from an ostream * * The delimiter string @a c is written to the stream after every Tp * written to the stream. The delimiter is not copied, and thus must * not be destroyed while this iterator is in use. * * @param s Underlying ostream to write to. * @param c CharT delimiter string to insert. */ OSS_iterator(ostream_type & __s, const String & __c = "", const String & __p = "") : _M_stream(&__s) , _M_string(__c) , _M_prefix(__p) , _M_first(true) {} /// Copy constructor. OSS_iterator(const OSS_iterator& __obj) : _M_stream(__obj._M_stream) , _M_string(__obj._M_string) , _M_prefix(__obj._M_prefix) , _M_first(__obj._M_first) {} /// Copy assignment OSS_iterator& operator=(const OSS_iterator& obj) { _M_stream = obj._M_stream; _M_string = obj._M_string; _M_prefix = obj._M_prefix; _M_first = obj._M_first; return *this; } /// Writes @a value to underlying ostream using operator<<. If /// constructed with delimiter string, writes delimiter to ostream. OSS_iterator& operator=(const _Tp& value) { if (_UnaryPredicate()(value)) { if (!_M_first) *_M_stream << _M_string; *_M_stream << _M_prefix << value; _M_first = false; } return *this; } OSS_iterator& operator*() { return *this; } OSS_iterator& operator++() { return *this; } OSS_iterator& operator++(int) { return *this; } }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OSS_HXX */ openturns-1.9/lib/src/Base/Common/openturns/OStream.hxx000066400000000000000000000075221307543307100232300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Ostream is an helper for pretty printing of Objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OSTREAM_HXX #define OPENTURNS_OSTREAM_HXX #include // for std::ostream #include // for manipulators like setw, setprecision, etc. #include "openturns/Object.hxx" BEGIN_NAMESPACE_OPENTURNS // This class defines an new ostream based stream class OT_API OStream { std::ostream & os_; public: explicit OStream(std::ostream & os) : os_(os) {} std::ostream & getStream() { return os_; } }; // end class OStream // This operator writes Object derived objects to OStream OT_API OStream & operator << (OStream & OS, const Object & obj); OT_API OStream & operator << (OStream & OS, const String & st); OT_API OStream & operator << (OStream & OS, const char * ch); OT_API OStream & operator << (OStream & OS, int val); OT_API OStream & operator << (OStream & OS, long val); OT_API OStream & operator << (OStream & OS, long long val); OT_API OStream & operator << (OStream & OS, short val); OT_API OStream & operator << (OStream & OS, unsigned int val); OT_API OStream & operator << (OStream & OS, unsigned long val); OT_API OStream & operator << (OStream & OS, unsigned long long val); OT_API OStream & operator << (OStream & OS, unsigned short val); OT_API OStream & operator << (OStream & OS, char val); OT_API OStream & operator << (OStream & OS, bool val); OT_API OStream & operator << (OStream & OS, float val); OT_API OStream & operator << (OStream & OS, double val); OT_API OStream & operator << (OStream & OS, long double val); OT_API OStream & operator << (OStream & OS, const Complex & c); OT_API OStream & operator << (OStream & OS, const void * ptr); OT_API OStream & operator << (OStream & OS, std::ostream & (*manip)(std::ostream &)); OT_API OStream & operator << (OStream & OS, std::ios_base & (*manip)(std::ios_base &)); #ifdef _MSC_VER template inline OStream & operator << (OStream & OS, std::_Smanip manip) { OS.getStream() << manip; return OS; } template inline OStream & operator << (OStream & OS, std::_Fillobj manip) { OS.getStream() << manip; return OS; } #elif defined(__clang__) && defined(_LIBCPP_VERSION) inline OStream & operator << (OStream & OS, std::__1::__iom_t6 manip) { OS.getStream() << manip; return OS; } template inline OStream & operator << (OStream & OS, std::__1::__iom_t4 manip) { OS.getStream() << manip; return OS; } inline OStream & operator << (OStream & OS, std::__1::__iom_t5 manip) { OS.getStream() << manip; return OS; } #elif defined(__GNUC__) OT_API OStream & operator << (OStream & OS, std::_Setw manip); OT_API OStream & operator << (OStream & OS, std::_Setprecision manip); OT_API OStream & operator << (OStream & OS, std::_Setbase manip); OT_API OStream & operator << (OStream & OS, std::_Resetiosflags manip); OT_API OStream & operator << (OStream & OS, std::_Setiosflags manip); OT_API OStream & operator << (OStream & OS, std::_Setfill manip); #endif END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OSTREAM_HXX */ openturns-1.9/lib/src/Base/Common/openturns/OTCommon.hxx000066400000000000000000000042771307543307100233550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Common * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTCOMMON_HXX #define OPENTURNS_OTCOMMON_HXX #include "openturns/AtomicFunctions.hxx" //#include "BinaryStorageManager.hxx" #include "openturns/Catalog.hxx" #include "openturns/ComparisonOperator.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/Equal.hxx" #include "openturns/Exception.hxx" #include "openturns/Greater.hxx" #include "openturns/GreaterOrEqual.hxx" #include "openturns/IdFactory.hxx" #include "openturns/InterfaceObject.hxx" #include "openturns/Less.hxx" #include "openturns/LessOrEqual.hxx" #include "openturns/Lockable.hxx" #include "openturns/Log.hxx" #include "openturns/Memory.hxx" #include "openturns/Os.hxx" #include "openturns/OSS.hxx" #include "openturns/Object.hxx" #include "openturns/Path.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/PlatformInfo.hxx" #include "openturns/Pointer.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SharedPointer.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Study.hxx" #include "openturns/TypedCollectionInterfaceObject.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_LIBXML2 #include "openturns/XMLStorageManager.hxx" #include "openturns/XMLchar_traits.hxx" #endif #endif /* OPENTURNS_OTCOMMON_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Object.hxx000066400000000000000000000065341307543307100230660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Object is the top-most class of OpenTURNS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OBJECT_HXX #define OPENTURNS_OBJECT_HXX #include // for std::ostream #include // for std::ostringstream #include "openturns/OTprivate.hxx" /** Declare GetClassName() and getClassName() for Object-like classes */ #define CLASSNAME \ public: \ /** Class name accessor */ \ static OT::String GetClassName(); \ virtual OT::String getClassName() const; \ /** Define GetClassName() and getClassName() for Object-like classes */ #define CLASSNAMEINIT(T) \ OT::String T::GetClassName() { return OT::String(#T); } \ OT::String T::getClassName() const { return T::GetClassName(); } \ BEGIN_NAMESPACE_OPENTURNS /** * @class Object * * @brief The base classe for almost every object in OpenTURNS. * * Object defines common methods needed by all classes. * These are default constructor, copy constructor, virtual * destructor, affectation operator, comparison operator and * string converters. * These methods should be overloaded by every derived class */ class OT_API Object { CLASSNAME; public: /** Destructor */ virtual ~Object() = 0; /** * String converter * * This method shows human readable information on the * internal state of an object. It is used when streaming * the object or for user information. * * @return A string fully describing the object */ virtual String __repr__() const; /** * Pretty string converter * * This method shows human readable information on the * internal state of an object. It is used for printing the object * and should only show relevant information. * * @return A human readable string */ virtual String __str__(const String & offset = "") const; protected: private: } ; /* class Object */ #ifndef SWIG /** * @fn std::ostream & operator <<(std::ostream & os, const Object & obj) * @brief Output stream converter * @param os A STL output stream object * @param obj The object read by \p os * @return A reference to \p os * * This method allows any Object-derived class to be streamed whitout * redefining this method. Each derived-class should have a public * method str() that returns a String. * * @sa String __repr__() const */ OT_API std::ostream & operator <<(std::ostream & os, const Object & obj); #endif END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OBJECT_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Os.hxx000066400000000000000000000041651307543307100222370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class provides operating system specific variables * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OS_HXX #define OPENTURNS_OS_HXX #include "openturns/OTtypes.hxx" #include "openturns/OTdebug.h" BEGIN_NAMESPACE_OPENTURNS /** * @class Os * * This class provides operating system specific. */ class OT_API Os { public: /** * Return the path separator of the target OS. */ static const char * GetDirectorySeparator(); /** * Return the separator to split directory list. */ static const char * GetDirectoryListSeparator(); /** * Return the end of line in text files */ static const char * GetEndOfLine(); /** * Return the command that permit to snub the output of a command. */ static String GetDeleteCommandOutput(); /** * Remove a file. */ static void Remove(const String & fileName); /** * Create a directory. */ static int MakeDirectory(const String & fileName); /** * Delete a directory recursively. */ static int DeleteDirectory(const String & path); /** * Make a system call. Return 0 if no error. */ static int ExecuteCommand(const String & command); static Bool IsDirectory(const String & fileName); static Bool IsFile(const String & fileName); private: /** Default constructor */ Os() {}; }; /* class Os */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OS_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Path.hxx000066400000000000000000000112301307543307100225410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class provides all the mechanism of path manipulation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PATH_HXX #define OPENTURNS_PATH_HXX #include // for std::ostream #include // for std::vector #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Path * @brief Provides mechanism for path manipulation * * The class defines the search algorithms used to find a file or a directory * through the filesystem. It also defines the standard hardcoded paths and the * way temporary files are built. */ class OT_API Path { public: typedef std::vector DirectoryList; /** * Return the OpenTURNS prefix * * The search rule is: check the following paths, in that order: * + if the env var OPENTURNS_HOME exists, return ${OPENTURNS_HOME} if it exists and is a * directory, * + otherwise return the installation path ${prefix}, where 'prefix' is the installation path * of the platform as provided at configuration time. */ static FileName GetInstallationDirectory(); /** * Analyse the process environment * and return a list of directories to search in for configuration files. * * The search rule is :look for the file in the following directories, in that order : * + if the env var OPENTURNS_CONFIG_PATH exists, in directories listed in * ${OPENTURNS_CONFIG_PATH} (see openturnsConfigPathVariableName_) * + in directory ${HOME}/openturns/etc (see homeSubdirectory_) * + in standard config directory (either ${OPENTURNS_HOME}/etc/openturns if OPENTURNS_HOME * is defined and if this path is a directory, or the path ${prefix}/etc/openturns * where 'prefix' is the installation path of the platform as provided at configuration time. */ static DirectoryList GetConfigDirectoryList(); /** * Find a file named \em name located in one of the directories * listed in \em dirList. The function returns the full path (directory/name) * of the first match. */ static FileName FindFileByNameInDirectoryList(const FileName & name, const DirectoryList & dirList); /** Get the temporary directory set in the openturns conf file. * * On Windows, if temporary-directory is an env var, return the content of the env var, * if not, just return the content of temporary-directory. * This function is mostly useful on windows in order to get the TEMP env var. */ static FileName GetTemporaryDirectory(); /** Build a temporary file name given a pattern * @param pattern A filename containing at least the 'XXXXXX' string * @result A new unique filename based on the \em pattern */ static FileName BuildTemporaryFileName(const FileName & pattern); /** Create a temporary directory. */ static FileName CreateTemporaryDirectory(const FileName & directoryPrefix); /** Delete a temporary directory */ static void DeleteTemporaryDirectory(const FileName & directoryName); #ifdef _WIN32 /** Convert slash to antislash. */ static void AntislashFileName(FileName & filename); /** Add windows backslash to filename for compatibility with R. */ static void DoubleslashFileName(FileName & filename); #endif protected: /** * @var static const char * Path::OpenturnsConfigPathVariableName_ * * The environment variable name */ static const char * OpenturnsConfigPathVariableName_; /** * @var static const char * Path::HomeConfigSubdirectory_ * * The HOME subdirectory path */ static const char * HomeConfigSubdirectory_; /** * @var static const char * Path::PrefixConfigSubdirectory_ * * The 'prefix' subdirectory path */ static const char * PrefixConfigSubdirectory_; private: /** Get the executable directory */ static FileName GetExecutableDirectory(); /** Default constructor */ Path(); }; /* class Path */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PATH_HXX */ openturns-1.9/lib/src/Base/Common/openturns/PersistentObject.hxx000066400000000000000000000164401307543307100251440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class PersistentObject saves and reloads the object's internal state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PERSISTENTOBJECT_HXX #define OPENTURNS_PERSISTENTOBJECT_HXX #include "openturns/OSS.hxx" #include "openturns/Object.hxx" #include "openturns/StorageManager.hxx" #include "openturns/IdFactory.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS class StorageManager; class Advocate; template class Factory; /** * @class PersistentObject * * @brief This class defines load and save mechanisms. * * This is the base class of all objects that can be stored into * and reloaded from the study. * * The class defines an unique Id for every object so they can be * equal but not identical. This Id is an essential part for the management * of objects in studies. * @sa Study */ class OT_API PersistentObject : public Object { public: CLASSNAME; /** * Default constructor * * The constructor sets a new Id to the object, * so it can be later referenced by a Study object. * It is also declared visible if member of a study. * * The object has the default name but it does not * use storage for it. */ PersistentObject() : p_name_(), id_(IdFactory::BuildId()), shadowedId_(id_), studyVisible_(true) {} /** Copy constructor */ PersistentObject(const PersistentObject & other) : p_name_(other.p_name_), id_(IdFactory::BuildId()), shadowedId_(other.shadowedId_), studyVisible_(other.studyVisible_) {} /** * Virtual constructor * * @warning This method MUST be overloaded in derived classes. * @return A pointer to a newly allocated object similar to this one */ virtual PersistentObject * clone() const = 0; /** Destructor */ virtual ~PersistentObject() {} /** Assignment */ inline PersistentObject & operator =(const PersistentObject & other) { if (this != &other) // Other is NOT me, so I can assign it to me { p_name_ = other.p_name_; studyVisible_ = other.studyVisible_; } return *this; } /** * Comparison operator * * This method compares objects based on their content. */ inline virtual Bool operator ==(const PersistentObject & /*other*/) const { return true; } /** * Comparison operator * * This method compares objects based on their content. */ inline virtual Bool operator !=(const PersistentObject & other) const { return !operator==(other); } /** * Identity comparator * * This method compares objects based on their Id. * @return True if objects are the same */ inline Bool is(const PersistentObject & other) const { return (getId() == other.getId()); } /* String converter */ inline virtual String __repr__() const { return OSS() << "class=" << getClassName() << " name=" << getName(); } /* String converter */ inline virtual String __str__(const String & offset = "") const { (void)offset; return __repr__(); } /** * Id accessor * @return The id of this object */ inline Id getId() const { return id_; } /** * Shadowed id accessor * @internal */ inline void setShadowedId(Id id) { shadowedId_ = id; } inline Id getShadowedId() const { return shadowedId_; } /** Visibility accessor */ inline void setVisibility(Bool visible) { studyVisible_ = visible; } inline Bool getVisibility() const { return studyVisible_; } /** * %Object name query * * This methos returns true if a name was given to the object * @return True if object has a name */ inline Bool hasName() const { return p_name_; } /** * %Object name visibility query * * This method returns true if a non-empty name was given to the object * @return True if object has a non-empty name */ inline Bool hasVisibleName() const { return (p_name_ && !p_name_->empty()); } /** * %Object name accessor * * This method returns the name of the object if it has been previously set * or the default name. Accessing the default name does not cause storage * allocation as a side effect. * @return The name of this object */ inline String getName() const { return ( hasName() ? *p_name_ : "Unnamed" ); } /** * %Object name accessor * * This method sets \p name as the new name for the object. Setting the name * may cause storage allocation for the new name, especially of the name was * not defined so far. * @param name The new name for this object */ inline void setName(const String & name) { if (name.empty()) p_name_.reset(); else p_name_.reset(new String(name)); } /** Method save() stores the object through the StorageManager * @internal */ void save(StorageManager & mgr, const String & label, bool fromStudy = false) const; /** Method save() stores the object through the StorageManager * @internal */ void save(StorageManager & mgr, bool fromStudy = false) const; /** Method save() stores the object through the StorageManager * * @warning This method MUST be overloaded in derived classes. * @internal */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager * * @warning This method MUST be overloaded in derived classes. * @internal */ virtual void load(Advocate & adv); protected: private: /** The name of the object */ mutable Pointer p_name_; /** * The unique identifier of the object * * This identifier is needed when saving and reloading the object * because it allows the chaining of objects even if they are * relocated. */ const Id id_; /** * The shadowed id is used when object is reloaded. The object gets * a new id that is almost always different from that stored in the study. * So when we need to rebuild the objects dependency tree (ie, when * object A embed object B), we have to make the id translation: the * object holds the both ids, the new one (aka the Id as returned by getId) * and the former one stored in the study (aka the shadowed id). This latter * is never seen except by the object factory. * @internal */ Id shadowedId_; /** * This flag is used by the Study to know if the object should be displayed * even if it had been added to the study (in particular, when the object * was rebuild from file) */ Bool studyVisible_; }; /* class PersistentObject */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PERSISTENTOBJECT_HXX */ openturns-1.9/lib/src/Base/Common/openturns/PersistentObjectFactory.hxx000066400000000000000000000102311307543307100264640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class PersistentObjectFactory reloads a PersistentObject from a storage manager * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PERSISTENTOBJECTFACTORY_HXX #define OPENTURNS_PERSISTENTOBJECTFACTORY_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Exception.hxx" #include "openturns/Catalog.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PersistentObjectFactory * * @brief Reloads a PersistentObject from a storage manager * @see PersistentObject * @see StorageManager */ class OT_API PersistentObjectFactory { public: /** @copydoc PersistentObject::clone() const */ virtual PersistentObjectFactory * clone() const = 0; /** Destructor */ virtual ~PersistentObjectFactory() {}; /** Method build() creates a new PersistentObject from the storage manager * @param mgr The storage manager that points to the object to be reloaded * @return A pointer to a newly allocated object * @internal */ virtual PersistentObject * build(StorageManager & mgr) const = 0; /** Method assign() fills a PersistentObject with another one (must have same type) * * This method performs an assignment between the two objects after having casted them to the same type * @param po The persistent object to be refilled (may be empty, ie default constructed) * @param other The persistent object of the same type as \em po that should be copied to \em po * @internal */ virtual void assign(PersistentObject & po, const PersistentObject & other) const = 0; /** This method register the factory into the Catalog * @see Catalog * @internal */ void registerMe(const String & className) const { Catalog::Add(className, this); } /** Accessor to PersistentObject's shadowed id */ void setShadowedId(PersistentObject & obj, Id id) const { obj.setShadowedId(id); } Id getShadowedId(PersistentObject & obj) const { return obj.getShadowedId(); } protected: private: }; /* class PersistentObjectFactory */ /** * @class Factory * @brief Ease the creation of factories for any PersistentObject based class * @tparam PERSISTENT The class which the %Factory is bounded to */ template class Factory : PersistentObjectFactory { public: /** Constructor * * @internal See the CLASSNAME_INIT macro. */ Factory() { registerMe(PERSISTENT::GetClassName()); } /** Virtual constructor */ virtual Factory * clone() const { return new Factory(*this); } /** Method build() creates a new PersistentObject from the storage manager */ virtual PersistentObject * build(StorageManager & mgr) const { Advocate adv ( mgr.readObject() ); PERSISTENT * p_rebuildObject = new PERSISTENT(); assert(p_rebuildObject && "PersistentObject not allocated"); //try { p_rebuildObject->load(adv); //} catch (Exception & ex) { // Nothing to do // The rebuild object remains the default one //} return p_rebuildObject; } /** Method assign() fills a PersistentObject with another one (must have same type) */ virtual void assign(PersistentObject & po, const PersistentObject & other) const { PERSISTENT & ref_po = static_cast(po); const PERSISTENT & ref_other = static_cast(other); ref_po = ref_other; } }; /* end class Factory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PERSISTENTOBJECTFACTORY_HXX */ openturns-1.9/lib/src/Base/Common/openturns/PlatformInfo.hxx000066400000000000000000000044271307543307100242570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class PlatformInfo gives information about the library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PLATFORMINFO_HXX #define OPENTURNS_PLATFORMINFO_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PlatformInfo * @brief Defines static methods to query the library about various information (name, version, etc.) */ class OT_API PlatformInfo { private: /** * The numerical precision used to write out scientific numbers */ static UnsignedInteger Precision_; public: /** Return the version number of OpenTURNS */ static String GetVersion(); /** Return the name of the package OpenTURNS was built from */ static String GetName(); /** Return the revision of the versioning system this version corresponds to (broken for the moment) */ static String GetRevision(); /** Return the date OpenTURNS was built */ static String GetDate(); /** Return the path OpenTURNS was installed to */ static String GetInstallationDirectory(); /** Return the command line used to configure OpenTURNS */ static String GetConfigureCommandLine(); /** Return the precision used for floating %point output */ static UnsignedInteger GetNumericalPrecision(); /** Define the precision used for floating %point output * @param precision A positive integer counting the number of digits shown */ static void SetNumericalPrecision(SignedInteger precision); private: PlatformInfo(); }; /* class PlatformInfo */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PLATFORMINFO_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Pointer.hxx000066400000000000000000000133241307543307100232730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Pointer implements a shared pointer strategy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POINTER_HXX #define OPENTURNS_POINTER_HXX #include "openturns/OTprivate.hxx" #include "openturns/SharedPointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Pointer * @brief Implements a shared pointer strategy * @see SharedPointer * @see InterfaceObject * @tparam T The class to point to * @tparam IMPL The class used to actually implement the shared pointer * * Pointer implements a shared pointer strategy. The pointee * object is shared among all pointers so none has pointee * ownership. When one of them wants to modify the object, it * MUST deep-copy it (copy-on-write strategy). */ #ifdef SWIG template #else template < class T, template class IMPL = SharedPointer > #endif class Pointer { #ifdef SWIG template friend class Pointer; #else template class I> friend class Pointer; #endif public: /** * Pointer_type gives access to the shared pointer * implementation type */ #ifdef SWIG typedef SharedPointer pointer_type; #else typedef IMPL pointer_type; #endif /** * The actual shared pointer is \em ptr_ */ pointer_type ptr_; typedef T ElementType; typedef T ValueType; /** * Default constructor. * * Constructed like this, the underlying pointer is NULL */ Pointer() : ptr_() { } /** * Constructor from T * type * * The object pointed t is from now owned and taken in charge * by the shared pointer. It MUST NOT be manually deleted */ Pointer(T * ptr) : ptr_(ptr) { } /** * Destructor does nothing */ ~Pointer() { } /** * Copy constructor adds one more reference * on the underying object so its reference counter is * incremented by one */ template Pointer(const Pointer & ref) : ptr_(ref.ptr_) { } #ifndef SWIG /** * Equality operator adds one more reference * on the underying object so its reference counter is * incremented by one */ template Pointer & operator = (const Pointer & ref) { ptr_ = ref.ptr_; return *this; } #endif /** * Method to cast objects passed as base class into * derived class */ template Pointer & assign(const Pointer & ref) { ptr_.assign(ref.ptr_); return *this; } /** * Reset forsakes its reference on the pointed-to object. * If the shared pointer is the only owner of the object, * reset leads to its deletion */ inline void reset() { ptr_.reset(); } /** * Reset forsakes its reference on the pointed-to object. * If the shared pointer is the only owner of the object, * reset leads to its deletion. This method takes the new * pointed-to object and takes it in charge inside the * shared pointer */ template inline void reset(Y * p) { ptr_.reset(p); } /** * Operator * dereferences the const shared pointer and gives * access to the underlying object */ inline const T & operator * () const { return *ptr_; } #ifndef SWIG /** * Operator -> dereferences the const shared pointer and gives * access to the underlying object */ inline const T * operator -> () const { return ptr_.get(); } #endif /** * Operator * dereferences the shared pointer and gives * access to the underlying object */ inline T & operator * () { return *ptr_; } /** * Operator -> dereferences the shared pointer and gives * access to the underlying object */ inline T * operator -> () { return ptr_.get(); } /** * Method isNull returns true if there is no underlying * object pointed to */ inline Bool isNull() const { return ptr_.get() == 0; } /** * Operator bool() allows null pointer checking is assertions or tests */ inline operator bool() const { return ptr_.get() != 0; } /** * Method get gives access to the underlying object * pointed to */ inline T * get() const { return ptr_.get(); } /** * Method getImplementation() gives access to the * underlying implementation object (for copy * constructor needs) */ inline const pointer_type & getImplementation() const { return ptr_; } /** * Unique returns true when the shared pointer is the only * one that takes in charge the pointed-to object * It is semantically equivalent to use_count() == 1 */ inline Bool unique() const { return ptr_.unique(); } /** * Use_count returns the number of shared pointers that * share the pointed-to object */ inline UnsignedInteger use_count() const { return ptr_.use_count(); } /** * Swap exchanges the pointed-to objects between two * shared pointers */ inline void swap(Pointer & other) { ptr_.swap(other.ptr_); } }; /* class Pointer */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POINTER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/ResourceMap.hxx000066400000000000000000000142551307543307100241040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ResourceMap defines a resource catalog * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RESOURCEMAP_HXX #define OPENTURNS_RESOURCEMAP_HXX #include #include "openturns/Log.hxx" // ensures correct static initialization order #include "openturns/OStream.hxx" #include "openturns/Pointer.hxx" #include "openturns/Path.hxx" #include "openturns/MutexLock.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ResourceMap * @brief Defines a catalog containing all default values used by OpenTURNS * * As OpenTURNS uses many default values for its computations, their actual values are * accessible and editable through this class. Some default values are hardcoded in this class, * some other are read in an configuration file. */ class OT_API ResourceMap { public: #ifndef SWIG /** GetInstance gives a locked access to the singleton */ static MutexLockSingleton GetInstance(); #endif /** Get a value in the map */ static String Get(String key); static Bool GetAsBool(String key); static UnsignedInteger GetAsUnsignedInteger(String key); static Scalar GetAsScalar(String key); /** @deprecated */ static Scalar GetAsNumericalScalar(String key); /** Set a value in the map */ static void Set(String key, String value); static void SetAsBool(String key, Bool value); static void SetAsUnsignedInteger(String key, UnsignedInteger value); static void SetAsScalar(String key, Scalar value); /** @deprecated */ static void SetAsNumericalScalar(String key, Scalar value); /** Get the size of the map */ static UnsignedInteger GetSize(); /** Get the list of keys */ static std::vector GetKeys(); /** @copydoc Object::__repr__() const */ String __repr__() const; protected: /** Method for retrieving information from the resource map * @return The list of keys */ std::vector getKeys() const; /** Method for retrieving information from the resource map * @param key The name under which the value is stored in the ResourceMap * @return The value written into a string */ String get(String key) const; /** Method for retrieving information from the resource map * @param key The name under which the value is stored in the ResourceMap * @return The value if the value is boolean castable, false otherwise */ Bool getAsBool(String key) const; /** Method for retrieving information from the resource map * @param key The name under which the value is stored in the ResourceMap * @return The value if the value is integer castable, zero otherwise */ UnsignedInteger getAsUnsignedInteger(String key) const; /** Method for retrieving information from the resource map * @param key The name under which the value is stored in the ResourceMap * @return The value if the value is double castable, zero otherwise */ Scalar getAsScalar(String key) const; /** Method for retrieving information from the resource map * @return The number of constants defined in the ResourceMap */ UnsignedInteger getSize() const; /** Method for setting information into the resource map * @param key The name under which the value is stored in the ResourceMap * @param value The value written to a string */ void set(String key, String value); /** Method for setting information into the resource map * @param key The name under which the value is stored in the ResourceMap * @param value The value as a boolean */ void setAsBool(String key, Bool value); /** Method for setting information into the resource map * @param key The name under which the value is stored in the ResourceMap * @param value The value as an integer */ void setAsUnsignedInteger(String key, UnsignedInteger value); /** Method for setting information into the resource map * @param key The name under which the value is stored in the ResourceMap * @param value The value as a double */ void setAsScalar(String key, Scalar value); /** Update the ResourceMap with information from the configuration file */ void readConfigurationFile(const FileName & configurationFile); /** Find the configuration file in specific path (see Path class for algorithm) */ FileName findConfigurationFile() const; /** Load the configuration file */ void loadConfigurationFile(); /** Load the configuration defined at installation time */ void loadDefaultConfiguration(); private: /** Default constructor */ ResourceMap(); /** Default constructor */ ResourceMap(const ResourceMap & other) : map_(other.map_) {} /** The actual map that stores the key/value pairs */ typedef std::map< String, String > MapType; MapType map_; friend struct ResourceMap_init; }; /* class ResourceMap */ /** This struct initializes all static members of ResourceMap */ struct OT_API ResourceMap_init { ResourceMap_init(); ~ResourceMap_init(); }; /** * @fn std::ostream & operator <<(std::ostream & os, const ResourceMap & obj) * @brief Output stream converter * @param os A STL output stream resourceMap * @param obj The resourceMap read by \em os * @return A reference to \em os * * Operator << converts the ResourceMap object to an output stream * so it is easy to show the content of the resourceMap. */ #ifndef SWIG OT_API std::ostream & operator <<(std::ostream & os, const MutexLockSingleton & obj); OT_API OStream & operator <<(OStream & OS, const MutexLockSingleton & obj); #endif END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RESOURCEMAP_HXX */ openturns-1.9/lib/src/Base/Common/openturns/SharedPointer.hxx000066400000000000000000000211361307543307100244220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class SharedPointer implements a shared pointer * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SHAREDPOINTER_HXX #define OPENTURNS_SHAREDPOINTER_HXX #include "openturns/OTconfig.hxx" #include // for std::swap #include #include "openturns/AtomicFunctions.hxx" #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS #ifndef SWIG /* * class GenericCounterImplementation * * brief This class is in charge of the reference counter for the shared pointer. * * This class implements the base mechanisms of reference counting. * It keeps track of the number of references to an hypothetic pointee (not defined here * because the class is abstract). * * This class, its interface and its implementation are rewrittings of the BOOST shared_ptr * template class. We forgived using BOOST because of some pain in compiling OpenTURNS on * some architectures (with the help of Debian autobuilder) but the implementation was * so smart we decided to reimplement ours (with lesser dependencies) by cloning the interface * and part of the implementation of the BOOST one. Many thanks to BOOST for its work. */ class OT_API GenericCounterImplementation { /* The number of references to the pointee */ AtomicInt use_count_; public: /* * brief Default constructor. * * It initializes the reference counter to one. */ GenericCounterImplementation() : use_count_() { use_count_.increment(); } /* Destructor */ virtual ~GenericCounterImplementation() {} /* * brief Delete the pointee. * * This method diposes of the pointee by deleting it because it isn't referenced any more. * This method is pure because the allocation and deallocation are not handled here. The * derived class is in charge ot this functionnality. * See also: release() */ virtual void dispose() = 0; /* * brief Remove one reference. * * This method removes one reference to the counter. If it is the last one, it calls * dispose() to delete the pointee. * See also: dispose() and add_ref_copy() */ void release() { if ( use_count_.fetchAndAdd( -1 ) == 1 ) dispose(); } /* * brief Add one reference. * * This method adds one reference to the counter. * See also: release() */ void add_ref_copy() { use_count_.increment(); } /* * brief Get the number of references. * * This methods returns the number of references currently owned by the counter. * Return: the number of references * See also: release() and add_ref_copy() */ UnsignedInteger use_count() { return static_cast( use_count_.get() ); } }; /* end class GenericCounterImplementation */ /* * class CounterImplementation * * brief This class is in charge of the pointer allocation/deallocation */ template class CounterImplementation : public GenericCounterImplementation { T * ptr_; public: CounterImplementation(T * p) : ptr_( p ) {} void dispose() { delete ptr_; ptr_ = 0; } }; /* end class CounterImplementation */ class OT_API Counter { GenericCounterImplementation * p_impl_; public: Counter() : p_impl_(0) {} ~Counter() { if ( p_impl_ != 0 ) p_impl_->release(); if (use_count() == 0) { delete p_impl_; p_impl_ = 0; } } Counter( const Counter & other ) : p_impl_( other.p_impl_ ) { if ( p_impl_ != 0 ) p_impl_->add_ref_copy(); } template Counter(T * p) : p_impl_(0) { p_impl_ = new CounterImplementation< T >( p ); } Counter & operator =( const Counter & other ) { Counter newCounter( other ); swap( newCounter ); return *this; } Bool unique() const { return use_count() == 1; } UnsignedInteger use_count() const { return ( p_impl_ != 0 ) ? p_impl_->use_count() : 0 ; } void swap(Counter & other) { std::swap( p_impl_, other.p_impl_ ); } }; #endif /* SWIG */ class OT_API dynamic_cast_tag {}; /** * @class SharedPointer * * @brief This class implements a shared pointer strategy */ template class SharedPointer { template friend class SharedPointer; /** * The actual pointer is \em ptr_ */ T * ptr_; Counter count_; public: /** * Default constructor * * Constructed like this, the underlying pointer is NULL */ SharedPointer() : ptr_(0), count_() { // Nothing to do } /** * Constructor from T * type * * The object pointed t is from now owned and taken in charge * by the shared pointer. It MUST NOT be manually deleted */ explicit SharedPointer(T * ptr) : ptr_(ptr), count_(ptr) { // Nothing to do } /** * Copy constructor adds one more reference * on the underying object so its reference counter is * incremented by one */ template SharedPointer(const SharedPointer & ref) : ptr_(ref.ptr_), count_(ref.count_) { // Nothing to do } template SharedPointer(const SharedPointer & ref, dynamic_cast_tag) : ptr_(dynamic_cast(ref.ptr_)), count_(ref.count_) { if (ptr_ == 0) count_ = Counter(); } /** * Method to cast objects passed as base class into * derived class */ template SharedPointer & assign(const SharedPointer & ref) { // We want to do : ptr_ = ref.ptr_ // but ref.ptr_ is a base class of ptr_ // so we need to dynamic cast it... // Dynamic cast using a temporary // pointer_type tmp(ref.ptr_, dynamic_cast_tag()); // ptr_ = tmp; SharedPointer( ref, dynamic_cast_tag() ).swap( *this ); return *this; } /** * Reset forsakes its reference on the pointed-to object. * If the shared pointer is the only owner of the object, * reset leads to its deletion */ inline void reset() { SharedPointer().swap( *this); } /** * Reset forsakes its reference on the pointed-to object. * If the shared pointer is the only owner of the object, * reset leads to its deletion. This method takes the new * pointed-to object and takes it in charge inside the * shared pointer */ template inline void reset(Y * p) { SharedPointer( p ).swap( *this); } /** * Operator * dereferences the const shared pointer and gives * access to the underlying object */ inline const T & operator * () const { return *ptr_; } /** * Operator -> dereferences the const shared pointer and gives * access to the underlying object */ inline const T * operator -> () const { return ptr_; } /** * Operator * dereferences the shared pointer and gives * access to the underlying object */ inline T & operator * () { return *ptr_; } /** * Operator -> dereferences the shared pointer and gives * access to the underlying object */ inline T * operator -> () { return ptr_; } /** * Get returns a pointer to the underlying object */ inline T * get() const { return ptr_; } /** * Method getImplementation() gives access to the * underlying implementation object (for copy * constructor needs) */ inline const T * getImplementation() const { return ptr_; } /** * Unique returns true when the shared pointer is the only * one that takes in charge the pointed-to object * It is semantically equivalent to use_count() == 1 */ inline Bool unique() const { return count_.unique(); } /** * Use_count returns the number of shared pointers that * share the pointed-to object */ inline UnsignedInteger use_count() const { return count_.use_count(); } /** * Swap exchanges the pointed-to objects between two * shared pointers */ inline void swap(SharedPointer & other) { std::swap( ptr_, other.ptr_ ); count_.swap( other.count_ ); } } ; /* end class SharedPointer */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SHAREDPOINTER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/StorageManager.hxx000066400000000000000000000344601307543307100245560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STORAGEMANAGER_HXX #define OPENTURNS_STORAGEMANAGER_HXX #include // for std::ostream #include // for std::vector #include // for std::set #include // for std::map #include // for ptrdiff_t #include "openturns/Object.hxx" #include "openturns/Pointer.hxx" #include "openturns/Exception.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS /* Forward declaration of Advocate */ class Advocate; /* Forward declaration of PersistentObject */ class PersistentObject; /* Forward declaration of InterfaceObject */ class InterfaceObject; /* Forward declaration of Study */ class Study; /** Helper classes for StorageManager * * Allow correct selection of method */ struct OT_API SaveAction {}; struct OT_API LoadAction {}; /** * @class StorageManager * @brief Abstract class defining the way OpenTURNS' objects are saved and reloaded * * StorageManager defines a common interface implemented by * different classes that must store and reload object onto * a persistent medium * @see Study */ class OT_API StorageManager : public Object { CLASSNAME; public: #ifndef SWIG struct InternalObject { virtual ~InternalObject() throw() {} virtual InternalObject * clone() const { return new InternalObject(*this); } virtual void first() {} virtual void next() {} }; virtual Pointer registerObject(const PersistentObject & obj, bool fromStudy = false); virtual Advocate readObject(); #endif /** * Default constructor * * The default constructor allows the object to be * stored in STL containers like vector or map. * It takes an optional argument interpreted as the * name of the object in a user point of view. This * name is never used in another way than for user * information. This name has no meaning to the platform. */ explicit StorageManager(UnsignedInteger defaultVersion = 1); /** * Virtual constructor */ virtual StorageManager * clone() const; /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** * This method saves the PersistentObject onto the medium * @param obj The object to be saved * @param fromStudy Tell if the object was explicitely put in the study or not */ virtual void save(const PersistentObject & obj, const String & label, bool fromStudy = false); /** * This method reloads the whole study from the medium * @param study The study to reload objects from */ virtual void load(Study & study); /** Study accessor */ Study * getStudy() const; /** Defines the study bound to the manager */ void setStudy(Study * p_study); /** Returns the version of the study that the manager can read/write */ UnsignedInteger getDefaultStudyVersion() const; /** Study version accessor */ UnsignedInteger getStudyVersion() const; /** Study version accessor */ void setStudyVersion(UnsignedInteger version); /** Do some administrative tasks before saving/reloading * @internal */ virtual void initialize(const SaveAction caller); virtual void initialize(const LoadAction caller); /** Do some administrative tasks after saving/reloading * @internal */ virtual void finalize(const SaveAction caller); virtual void finalize(const LoadAction caller); /** Read and create the internal representation * @internal */ virtual void read(); /** Write the internal representation * @internal */ virtual void write(); #ifndef SWIG /* Create a new empty object that will gather all saved information * @internal */ virtual Pointer createObject(const String & tag) const; /* Append an internal object to the collection of saved ones * @internal */ virtual void appendObject(Pointer & p_obj); /* Set the visibility attribute of the object * @internal */ virtual void setVisibility(Pointer & p_obj, Bool visible); /* Set the label associated with the object * @internal */ virtual void setLabel(Pointer & p_obj, const String & label); /* Returns true if the internal object has an attribute */ virtual Bool hasAttribute(Pointer & p_obj, const String & name); /* Add an attribute to an internal object * @internal */ virtual void addAttribute(Pointer & p_obj, const String & name, Bool value); virtual void addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void addAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger value); #endif virtual void addAttribute(Pointer & p_obj, const String & name, Scalar value); virtual void addAttribute(Pointer & p_obj, const String & name, Complex value); virtual void addAttribute(Pointer & p_obj, const String & name, const String & value); virtual void addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value); virtual void addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value); /* Add an indexed value to an internal object * @internal */ virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger value); #endif virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value); /* Read an attribute * @internal */ virtual void readAttribute(Pointer & p_obj, const String & name, Bool & value); virtual void readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void readAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger & value); #endif virtual void readAttribute(Pointer & p_obj, const String & name, Scalar & value); virtual void readAttribute(Pointer & p_obj, const String & name, Complex & value); virtual void readAttribute(Pointer & p_obj, const String & name, String & value); virtual void readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value); virtual void readAttribute(Pointer & p_obj, const String & name, PersistentObject & value); /* Read an indexed value * @internal */ virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger & value); #endif virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value); #endif /** Returns true if an object is already saved * @internal */ Bool isSavedObject(Id id) const; /* Tells that an object is saved * @internal */ void markObjectAsSaved(Id id) const; protected: /** Refresh the status of saved objects */ void cleanSavedObjects() const; /** Query the manager if the version is correct */ virtual Bool canManageVersion(UnsignedInteger version) const; /** Return the current state of the storage manager (for those having one) */ virtual const InternalObject & getState() const; /** Label element in study */ void defineLabel(Id id, const String & label); /** Define element visibility in study */ void defineVisibility(Id id, Bool visible); private: /** A reference to the current study */ Study * p_study_; /** The default version of the study */ const UnsignedInteger defaultVersion_; /** The version of the study actually used */ UnsignedInteger version_; /** The map that tells if objects wera already saved */ mutable std::map savedObjects_; }; /* class StorageManager */ #ifndef SWIG class OT_API Advocate { public: Advocate(StorageManager & mgr, const StorageManager::InternalObject & state) : mgr_(mgr), p_state_(state.clone()), p_obj_(0), studyVisible_(false), label_(), savedAttributes_() {} Advocate(StorageManager & mgr, const StorageManager::InternalObject & state, const String & tag) : mgr_(mgr), p_state_(state.clone()), p_obj_(mgr.createObject(tag)), studyVisible_(false), label_(), savedAttributes_() {} Advocate(const Advocate & other) : mgr_(other.mgr_), p_state_(other.p_state_->clone()), p_obj_(other.p_obj_), studyVisible_(other.studyVisible_), label_(other.label_), savedAttributes_(other.savedAttributes_) {} void saveObject() { mgr_.setVisibility( p_obj_, studyVisible_ ); mgr_.setLabel( p_obj_, label_ ); mgr_.appendObject( p_obj_ ); } void setLabel(const String & label) { label_ = label; studyVisible_ = true; } void firstValue() { p_state_->first(); } void nextValue() { p_state_->next(); } Bool hasAttribute(const String & attributeName) { return mgr_.hasAttribute( p_state_, attributeName ); } template inline Advocate & saveAttribute(const String & attributeName, const _Tp & attributeValue) { checkSavedAttribute( attributeName ); mgr_.addAttribute( p_obj_, attributeName, attributeValue ); return *this; } template inline Advocate & saveIndexedValue(long attributeIndex, const _Tp & attributeValue) { mgr_.addIndexedValue( p_obj_, attributeIndex, attributeValue ); return *this; } template inline Advocate & loadAttribute(const String & attributeName, _Tp & attributeValue) { mgr_.readAttribute( p_state_, attributeName, attributeValue ); return *this; } template inline Advocate & loadIndexedValue(long attributeIndex, _Tp & attributeValue) { mgr_.readIndexedValue( p_state_, attributeIndex, attributeValue ); return *this; } private: StorageManager & mgr_; Pointer p_state_; Pointer p_obj_; Bool studyVisible_; String label_; std::set savedAttributes_; void checkSavedAttribute(const String & attributeName) { #ifdef SAVELOAD_CHECKING if (savedAttributes_.insert(attributeName).second == false) throw InternalException(HERE) << "Attribute '" << attributeName << "' is already saved. Report bug"; #else (void)attributeName; #endif } }; /* end class Advocate */ template struct PtrTraits { typedef _Tp value_type; typedef ptrdiff_t difference_type; typedef _Tp * pointer; typedef _Tp & reference; }; template class AdvocateIterator { Advocate advocate_; long index_; Bool first_; public: typedef typename PtrTraits<_Tp>::value_type value_type; typedef typename PtrTraits<_Tp>::difference_type difference_type; typedef typename PtrTraits<_Tp>::pointer pointer; typedef typename PtrTraits<_Tp>::reference reference; typedef std::output_iterator_tag iterator_category; explicit AdvocateIterator(Advocate & advocate) : advocate_(advocate), index_(0), first_(true) {} AdvocateIterator & operator = (const _Tp & value) { advocate_.saveIndexedValue( index_, value ); ++index_; return *this; } AdvocateIterator & operator = (const AdvocateIterator & other ) { // Copy-assignment does not make sense on different advocate_ if (&advocate_ != &other.advocate_) throw InternalException(HERE) << "Wrong advocates in copy assignment. Report bug"; index_ = other.index_; first_ = other.first_; return *this; } _Tp operator () () { _Tp value; if (first_) { advocate_.firstValue(); first_ = false; } advocate_.loadIndexedValue( index_, value ); advocate_.nextValue(); ++index_; return value; } AdvocateIterator & operator * () { return *this; } AdvocateIterator & operator ++ () { return *this; } AdvocateIterator & operator ++ (int) { return *this; } }; /* end class AdvocateIterator */ #endif /* SWIG */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STORAGEMANAGER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/Study.hxx000066400000000000000000000160031307543307100227600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Study keeps all PersistentObjects in a file * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STUDY_HXX #define OPENTURNS_STUDY_HXX #include // for std::ostream #include // for std::map #include "openturns/Object.hxx" #include "openturns/Pointer.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /* Forward declarations */ class InterfaceObject; class StorageManager; /** * @class Study * @brief Keeps all PersistentObjects in a file * * The study allows the user to save all its data to a structure looking like a map. * Tha data are copied verbatim to the study. This is not a link so future modification * of the original won't affect the data saved in the study. To update the data saved * in the study, the user has to explicitely save it again. * Study allows the user to retrieve previously saved objects either by their name if * a name was defined for the object or by their Id. * @see PersistentObject * @see StorageManager */ class OT_API Study : public Object { CLASSNAME; friend class StorageManager; public: /* Some typedefs for easy reading */ typedef Pointer MapElement; typedef std::map Map; typedef std::map LabelMap; typedef Pointer StorageManagerImplementation; /** * Default constructor */ Study(); /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** @copydoc Object::__str__() const */ virtual String __str__(const String & offset = "") const; /** This method saves the study through the storage manager */ void save(); /** This method reloads the study from the storage manager */ void load(); /** Defines which storage manager must be used to save and reload data */ void setStorageManager(const StorageManager & smgr); /** Get the storage manager used by the study */ StorageManagerImplementation getStorageManager() const; /** Add a PersistentObject to the study */ void add(const InterfaceObject & io); /** Add a PersistentObject to the study */ void add(const String & label, const InterfaceObject & io, Bool force = false); /** Add a PersistentObject to the study */ void add(const PersistentObject & po); /** Add a PersistentObject to the study */ void add(const String & label, const PersistentObject & po, Bool force = false); #ifndef SWIG /** Add a PersistentObject to the study * @throw InvalidArgumentException */ void add(const PersistentObject * po); /** Add a PersistentObject to the study * @throw InvalidArgumentException */ void add(const String & label, const PersistentObject * po, Bool force = false); #endif /** Remove a PersistentObject from the study */ void remove(const InterfaceObject & io); /** Remove a PersistentObject from the study */ void remove(const String & label); /** Query if object is stored in study * @param id The Id of the object * @return True if the object is stored in the study */ Bool hasObject(Id id) const; /** Query if object is stored in study * @param label The label of the object * @return True if the object is stored in the study */ Bool hasObject(const String & label) const; /** Get object whose id is given * @param id The Id of the object * @return The object saved in the study */ MapElement getObject(Id id) const; /** Get object whose id is given * @param label The label of the object * @return The object saved in the study */ MapElement getObject(const String & label) const; /** Fill an object with one got from study * @param po An object to be refilled (may be empty, ie default constructed) * @param name The name of the object stored in the study * @throw InvalidArgumentException */ void fillObjectByName(PersistentObject & po, const String & name) const; /** Fill an object with one got from study * @param io An object to be refilled (may be empty, ie default constructed) * @param name The name of the object stored in the study * @throw InvalidArgumentException */ void fillObjectByName(InterfaceObject & io, const String & name) const; /** Fill an object with one got from study * @param id The Id of the object stored in the study * @param po An object to be refilled (may be empty, ie default constructed) * @throw InvalidArgumentException */ void fillObject(Id id, PersistentObject & po) const; /** Fill an object with one got from study * @param id The Id of the object stored in the study * @param io An object to be refilled (may be empty, ie default constructed) * @throw InvalidArgumentException */ void fillObject(Id id, InterfaceObject & io) const; /** Fill an object with one got from study * @param label The label of the object stored in the study * @param po An object to be refilled (may be empty, ie default constructed) * @throw InvalidArgumentException */ void fillObject(const String & name, PersistentObject & po) const; /** Fill an object with one got from study * @param label The label of the object stored in the study * @param io An object to be refilled (may be empty, ie default constructed) * @throw InvalidArgumentException */ void fillObject(const String & name, InterfaceObject & io) const; /** Print all the labels in the study */ String printLabels() const; protected: /** Define a label for an object */ void defineLabel(Id id, const String & label); /** Define the visibility of an object */ void defineVisibility(Id id, Bool visible); /** Get object whose class and name are given */ MapElement getObjectByName(const String & className, const String & name) const; /** This method purges the study from the reloaded objects that are tagged unvisible */ void cleanUnvisibleObject(); /** This method performs the translation of ids after a study load */ void translateId(); private: /** Assignment */ Study & operator =(const Study & other); /** The map storing the saved objects */ Map map_; /** The map storing the saved objects */ LabelMap labelMap_; /** The StorageManager that drives the load/store operations */ StorageManagerImplementation p_storageManager_; }; /* class Study */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STUDY_HXX */ openturns-1.9/lib/src/Base/Common/openturns/TBB.hxx000066400000000000000000000106261307543307100222640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies support for multithreading * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TBB_HXX #define OPENTURNS_TBB_HXX #include #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_TBB #ifdef OPENTURNS_TBB_NO_IMPLICIT_LINKAGE # ifndef __TBB_NO_IMPLICIT_LINKAGE # define __TBB_NO_IMPLICIT_LINKAGE 1 # endif # ifndef __TBBMALLOC_NO_IMPLICIT_LINKAGE # define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1 # endif #endif #include #include "openturns/OTwindows.h" #else /* OPENTURNS_HAVE_TBB */ #include "openturns/Exception.hxx" // We redefine some TBB elements to simulate TBB availability through the code // Those redefinitions are single threaded namespace tbb { template class blocked_range { public: typedef T value_type; typedef std::size_t size_type; blocked_range(value_type from, value_type to, size_type gs = 1) : from_(from), to_(to), grainSize_(gs) { #ifdef DEBUG_BOUNDCHECKING if (from_ > to_) throw OT::InvalidArgumentException(HERE) << "Range is malformed (from > to) with from=" << from_ << " and to=" << to; if (grainSize_ < 1) throw OT::InvalidArgumentException(HERE) << "Range is malformed (grainSize < 1) with grainSize=" << grainSize_; #endif /* DEBUG_BOUNDCHECKING */ } value_type begin() const { return from_; } value_type end() const { return to_; } size_type size() const { return size_t(to_ - from_); } size_type grainsize() const { return grainSize_; } private: value_type from_; value_type to_; size_type grainSize_; }; // end class blocked_range template void parallel_for( const RANGE & range, const BODY & body ) { body( range ); } template void parallel_reduce( const RANGE & range, BODY & body ) { body( range ); } template void parallel_sort( ITERATOR first, ITERATOR last ) { std::stable_sort( first, last ); } } // namespace tbb #endif /* OPENTURNS_HAVE_TBB */ BEGIN_NAMESPACE_OPENTURNS class OT_API TBB { public: #ifndef SWIG // swig 1.3.40 fails to parse BlockedRange #ifdef OPENTURNS_HAVE_TBB typedef tbb::split Split; #else /* OPENTURNS_HAVE_TBB */ struct Split {}; #endif /* OPENTURNS_HAVE_TBB */ template struct BlockedRange : public tbb::blocked_range { typedef T value_type; typedef typename tbb::blocked_range::size_type size_type; BlockedRange(value_type from, value_type to, size_type gs = 1) : tbb::blocked_range(from, to, gs) {} BlockedRange(const tbb::blocked_range & range) : tbb::blocked_range(range) {} }; #endif // SWIG template static inline void ParallelFor( UnsignedInteger from, UnsignedInteger to, const BODY & body, std::size_t gs = 1 ) { tbb::parallel_for( tbb::blocked_range( from, to, gs ), body ); } template static inline void ParallelReduce( UnsignedInteger from, UnsignedInteger to, BODY & body, std::size_t gs = 1) { tbb::parallel_reduce( tbb::blocked_range( from, to, gs ), body ); } template static inline void ParallelSort( ITERATOR first, ITERATOR last ) { tbb::parallel_sort( first, last ); } static Bool IsAvailable(); static void Enable(); static void Disable(); private: static void SetNumberOfThreads(const UnsignedInteger numberOfThreads); friend struct TBB_init; }; /* end class TBB */ /** This struct initializes all static members of TBB */ struct OT_API TBB_init { TBB_init(); ~TBB_init(); }; /* end class TBB_init */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TBB_HXX */ openturns-1.9/lib/src/Base/Common/openturns/TTY.hxx000066400000000000000000000033021307543307100223260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides definitions for tty control sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TTY_HXX #define OPENTURNS_TTY_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS struct OT_API TTY { enum Color { DEFAULT = 0, BOLD, UNDERLINE, BLINK, BLACKFG, REDFG, GREENFG, YELLOWFG, BLUEFG, PURPLEFG, CYANFG, WHITEFG, BLACKBG, REDBG, GREENBG, YELLOWBG, BLUEBG, PURPLEBG, CYANBG, WHITEBG, LASTCOLOR /* for internal usage only */ }; /** Return a control sequence corresponding to the current color */ static const char * GetColor( Color c ); /** Define the colorization strategy. Flag = true if colored output */ static void ShowColors( Bool flag ); /** Query the colorization strategy. Return true if colored output */ static Bool ColoredOutput(); }; // struct TTY END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TTY_HXX */ openturns-1.9/lib/src/Base/Common/openturns/TypedCollectionInterfaceObject.hxx000066400000000000000000000160661307543307100277320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TypedCollectionInterfaceObject implements TypedInterfaceObject for a class that manages a collection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TYPEDCOLLECTIONINTERFACEOBJECT_HXX #define OPENTURNS_TYPEDCOLLECTIONINTERFACEOBJECT_HXX #include #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TypedCollectionInterfaceObject * @brief Implements TypedInterfaceObject for a class that manages a collection * @internal * @see PersistentCollection */ template class TypedCollectionInterfaceObject : public TypedInterfaceObject { public: typedef typename TypedInterfaceObject::ImplementationAsPersistentObject ImplementationAsPersistentObject; typedef typename TypedInterfaceObject::ImplementationType ImplementationType; typedef typename ImplementationType::ElementType ImplementationElementType; typedef typename TypedInterfaceObject::Implementation Implementation; typedef typename ImplementationType::iterator iterator; typedef typename ImplementationType::const_iterator const_iterator; typedef typename ImplementationType::reverse_iterator reverse_iterator; typedef typename ImplementationType::const_reverse_iterator const_reverse_iterator; /** Constructor */ TypedCollectionInterfaceObject() {} TypedCollectionInterfaceObject(const Implementation & impl) : TypedInterfaceObject(impl) {} #ifndef SWIG /** Operator[]() gives access to the elements of the collection */ inline ImplementationElementType & operator [] (UnsignedInteger i) { #ifdef DEBUG_BOUNDCHECKING return this->at(i); #else TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->operator[](i); #endif /* DEBUG_BOUNDCHECKING */ } /** Operator[]() gives access to the elements of the const collection */ inline const ImplementationElementType & operator [] (UnsignedInteger i) const { #ifdef DEBUG_BOUNDCHECKING return this->at(i); #else return TypedInterfaceObject::getImplementation()->operator[](i); #endif /* DEBUG_BOUNDCHECKING */ } /** Element accessor */ inline ImplementationElementType & at(UnsignedInteger i) { TypedInterfaceObject::copyOnWrite(); try { return TypedInterfaceObject::getImplementation()->at(i); } catch (std::out_of_range & ex) { throw OutOfBoundException(HERE) << "sample size=" << getSize() << " - erroneous index=" << i << " - " << ex.what(); } } inline const ImplementationElementType & at(UnsignedInteger i) const { try { return TypedInterfaceObject::getImplementation()->at(i); } catch (std::out_of_range & ex) { throw OutOfBoundException(HERE) << "sample size=" << getSize() << " - erroneous index=" << i << " - " << ex.what(); } } #endif /* Method __getitem__() is for Python */ inline const ImplementationElementType & __getitem__(UnsignedInteger i) const { return this->at(i); } /* Method __setitem__() is for Python */ inline void __setitem__(UnsignedInteger i, const ImplementationElementType & val) { this->at(i) = val; } /** Method add() appends an element to the collection */ inline void add(const ImplementationElementType & elt) { TypedInterfaceObject::copyOnWrite(); TypedInterfaceObject::getImplementation()->add(elt); } #ifndef SWIG /** Erase the elements between first and last */ inline iterator erase(iterator first, iterator last) { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->erase(first, last); } /** Erase the element pointed by position */ inline iterator erase(iterator position) { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->erase(position); } /** Erase the element pointed by position */ inline iterator erase(UnsignedInteger position) { return erase(begin() + position); } #endif /** Method getSize() returns the number of elements of the collection (viewed as a size) */ inline UnsignedInteger getSize() const { return TypedInterfaceObject::getImplementation()->getSize(); } /** Method getDimension() returns the number of elements of the collection (viewed as a dimension) */ inline UnsignedInteger getDimension() const { return TypedInterfaceObject::getImplementation()->getDimension(); } /** Method empty() returns true if there is no element in the collection */ inline Bool isEmpty() const { return TypedInterfaceObject::getImplementation()->isEmpty(); } #ifndef SWIG /** Method begin() points to the first element of the collection */ inline iterator begin() { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->begin(); } inline const_iterator begin() const { return TypedInterfaceObject::getImplementation()->begin(); } /** Method end() points beyond the last element of the collection */ inline iterator end() { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->end(); } inline const_iterator end() const { return TypedInterfaceObject::getImplementation()->end(); } /** Method rbegin() points to the last element of the collection */ inline reverse_iterator rbegin() { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->rbegin(); } inline const_reverse_iterator rbegin() const { return TypedInterfaceObject::getImplementation()->rbegin(); } /** Method rend() points before the first element of the collection */ inline reverse_iterator rend() { TypedInterfaceObject::copyOnWrite(); return TypedInterfaceObject::getImplementation()->rend(); } inline const_reverse_iterator rend() const { return TypedInterfaceObject::getImplementation()->rend(); } #endif }; /* class TypedCollectionInterfaceObject */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TYPEDCOLLECTIONINTERFACEOBJECT_HXX */ openturns-1.9/lib/src/Base/Common/openturns/TypedInterfaceObject.hxx000066400000000000000000000065531307543307100257160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TypedInterfaceObject implements InterfaceObject for a specific class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TYPEDINTERFACEOBJECT_HXX #define OPENTURNS_TYPEDINTERFACEOBJECT_HXX #include "openturns/InterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TypedInterfaceObject * @brief Implements InterfaceObject for a specific class * @internal * @tparam T The class bound to the interface object * @see PersistentObject */ template class TypedInterfaceObject : public InterfaceObject { public: typedef T ImplementationType; typedef Pointer Implementation; /** Constructor */ TypedInterfaceObject() : p_implementation_(0) {} TypedInterfaceObject(const Implementation & impl) : p_implementation_(impl) {} /** Returns a pointer to the underlying implementation object */ inline Implementation & getImplementation() { return p_implementation_; } inline const Implementation & getImplementation() const { return p_implementation_; } #ifndef SWIG /** Copy-on-write checker * @internal * This method must be called in every non const method before any access to the underlying object */ inline void copyOnWrite() { if (!p_implementation_.unique()) p_implementation_.reset(p_implementation_->clone()); } #endif /** Return a pointer to the underlying implementation object viewed as a PersistentObject */ inline virtual ImplementationAsPersistentObject getImplementationAsPersistentObject() const { return p_implementation_; } /** Set the pointer to the underlying implementation object */ inline virtual void setImplementationAsPersistentObject(const ImplementationAsPersistentObject & obj) { p_implementation_.assign(obj); } /** This method exchanges the two pointed objects */ inline void swap(TypedInterfaceObject & other) { p_implementation_.swap(other.p_implementation_); } /** Name accessor */ inline virtual void setName(const String & name) { this->copyOnWrite(); p_implementation_->setName(name); } /** Name accessor */ inline virtual String getName() const { return p_implementation_->getName(); } /** Comparison Operator */ inline virtual Bool operator == (const TypedInterfaceObject & other) const { return *getImplementation() == *(other.getImplementation()); } protected: /** A pointer to the underlying implementation object */ Implementation p_implementation_; }; /* class TypedInterfaceObject */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TYPEDINTERFACEOBJECT_HXX */ openturns-1.9/lib/src/Base/Common/openturns/XMLStorageManager.hxx000066400000000000000000000213271307543307100251350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief XMLStorageManager provides an interface for different storage classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_XMLSTORAGEMANAGER_HXX #define OPENTURNS_XMLSTORAGEMANAGER_HXX #include // for std::ostream #include // for std::stack #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /* Forward declaration of XMLDoc */ class XMLDoc; /* Forward declaration of PersistentObject */ class PersistentObject; /* Forward declaration of XMLStorageManagerState */ struct XMLStorageManagerState; class OT_API VersionList { std::vector versions_; public: VersionList() : versions_() { versions_.push_back(1); } Bool contains(UnsignedInteger v) const { return find(versions_.begin(), versions_.end(), v) != versions_.end(); } }; /** * @class XMLStorageManager * @brief Implements a storage manager that drives a XML file * @see StorageManager * @see Study */ class OT_API XMLStorageManager : public StorageManager { CLASSNAME; static const VersionList SupportedVersions; public: /** * The numerical precision used to write out scientific numbers */ static const int Precision_; /** * Constructor for a XML StorageManager that reads/writes * to a XML file */ explicit XMLStorageManager(const FileName & filename); /** * Virtual constructor */ virtual XMLStorageManager * clone() const; /** @copydoc StorageManager::__repr__() const */ virtual String __repr__() const; /** Get the name of the file containing the study */ String getFileName() const; /** Set the name of the file containing the study */ void setFileName(const String & fileName); /** * This method saves the PersistentObject onto the medium */ virtual void save(const PersistentObject & obj, const String & label, bool fromStudy = false); /** * This method reloads the PersistentObject from the medium */ virtual void load(Study & study); /** Do some administrative tasks before saving/reloading * @internal */ virtual void initialize(const SaveAction caller); virtual void initialize(const LoadAction caller); /** Do some administrative tasks after saving/reloading * @internal */ virtual void finalize(const SaveAction caller); virtual void finalize(const LoadAction caller); /** Read and create the internal representation * @internal */ virtual void read(); /** Write the internal representation * @internal */ virtual void write(); #ifndef SWIG /* Create a new empty object that will gather all saved information * @internal */ virtual Pointer createObject(const String & tag) const; /* Append an internal object to the collection of saved ones * @internal */ virtual void appendObject(Pointer & p_obj); /* Set the visibility attribute of the object * @internal */ virtual void setVisibility(Pointer & p_obj, Bool visible); /* Set the label associated with the object * @internal */ virtual void setLabel(Pointer & p_obj, const String & label); /* Returns true if the internal object has an attribute */ virtual Bool hasAttribute(Pointer & p_obj, const String & name); /* Add an attribute to an internal object * @internal */ virtual void addAttribute(Pointer & p_obj, const String & name, Bool value); virtual void addAttribute(Pointer & p_obj, const String & name, UnsignedInteger value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void addAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger value); #endif virtual void addAttribute(Pointer & p_obj, const String & name, Scalar value); virtual void addAttribute(Pointer & p_obj, const String & name, Complex value); virtual void addAttribute(Pointer & p_obj, const String & name, const String & value); virtual void addAttribute(Pointer & p_obj, const String & name, const InterfaceObject & value); virtual void addAttribute(Pointer & p_obj, const String & name, const PersistentObject & value); /* Add an indexed value to an internal object * @internal */ virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger value); #endif virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const String & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const InterfaceObject & value); virtual void addIndexedValue(Pointer & p_obj, UnsignedInteger index, const PersistentObject & value); /* Read an attribute * @internal */ virtual void readAttribute(Pointer & p_obj, const String & name, Bool & value); virtual void readAttribute(Pointer & p_obj, const String & name, UnsignedInteger & value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void readAttribute(Pointer & p_obj, const String & name, Unsigned64BitsInteger & value); #endif virtual void readAttribute(Pointer & p_obj, const String & name, Scalar & value); virtual void readAttribute(Pointer & p_obj, const String & name, Complex & value); virtual void readAttribute(Pointer & p_obj, const String & name, String & value); virtual void readAttribute(Pointer & p_obj, const String & name, InterfaceObject & value); virtual void readAttribute(Pointer & p_obj, const String & name, PersistentObject & value); /* Read an indexed value * @internal */ virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Bool & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, UnsignedInteger & value); #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Unsigned64BitsInteger & value); #endif virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Scalar & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, Complex & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, String & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, InterfaceObject & value); virtual void readIndexedValue(Pointer & p_obj, UnsignedInteger index, PersistentObject & value); #endif protected: /** Query the manager if the version is correct */ virtual Bool canManageVersion(UnsignedInteger version) const; /** Return the current state of the storage manager (for those having one) */ virtual const StorageManager::InternalObject & getState() const; private: struct XMLReadObject { Pointer p_obj_; String visibility_; String label_; XMLReadObject() : p_obj_(0), visibility_(), label_() {} }; /** The file we read from/write to */ FileName fileName_; /** The internal state of the manager */ Pointer p_state_; /** The internal document */ Pointer p_document_; /** Methods to read DOM elements */ XMLReadObject readDOMElement(); }; /* class XMLStorageManager */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_XMLSTORAGEMANAGER_HXX */ openturns-1.9/lib/src/Base/Common/openturns/XMLToolbox.hxx000066400000000000000000000107751307543307100236710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides basic XML functionalities * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_XMLTOOLBOX_HXX #define OPENTURNS_XMLTOOLBOX_HXX #include #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" #include "openturns/XMLchar_traits.hxx" #if defined OPENTURNS_HAVE_LIBXML2 #include #define XML_SUPPORTED #endif BEGIN_NAMESPACE_OPENTURNS #if defined OPENTURNS_HAVE_LIBXML2 /** * @class XMLDoc * * This class stores a pointer to an XML document and manages its life cycle */ class OT_API XMLDoc { xmlDocPtr doc_; public: XMLDoc(); XMLDoc( const XMLDoc & other ); XMLDoc( const FileName & pathToFile ); XMLDoc(const char * buffer, int size); ~XMLDoc() throw(); XMLDoc & operator =( const XMLDoc & other ); operator xmlDocPtr() const; void save( const FileName & fileName ) const; String __repr__() const; Bool hasDTD() const; Bool validate() const; Bool validate( const String & name, const FileName & dtd ) const; }; /** * @class XML * * This is a compound class to gather general methods */ class OT_API XML { public: typedef xmlNodePtr Node; typedef std::basic_string xmlString; /** Convert XML string to basic string */ static String ToString( const xmlString & st ); /** Returns true if node 'elt' is an XML text node */ static Bool IsText( const Node & elt ); /** Returns true if node 'elt' is an XML Element node */ static Bool IsElement( const Node & elt ); /** Returns true if node 'elt' is an XML element node named 'name' */ static Bool IsElement( const Node & elt, const String & name ); /** Returns true if node 'elt' has a attribute named 'name' */ static Bool ElementHasAttribute( const Node & elt, const String & name ); /** Returns the value of the attribute named 'name' hold by 'node' */ static String GetAttributeByName( const Node & node, const String & name ); /** Set the attribute of a node */ static void SetAttribute( const Node & node, const String & attribute, const String & value ); /** Returns the child node named 'name' of node 'parent' */ static Node FindElementByName( const Node & parent, const String & name ); /** Returns the brother node named 'name' of node 'node' */ static Node FindNextElementByName( const Node & node, const String & name ); /** Returns the content of 'node' */ static String GetNodeValue( const Node & node ); /** Returns the name of 'node' */ static String GetNodeName( const Node & node ); /** Returns the line number where 'node' appears */ static UnsignedInteger GetNodeLineNumber( const Node & node ); /** Create a new node */ static Node NewNode( const String & name ); static Node NewNode( const String & name, const String & value ); static Node NewTextNode( const String & value ); /** Link a child node to its parent */ static void AddChild( const Node & parent, const Node & child ); /** Get/Set the root node of an XML file */ static Node GetRootNode( const XMLDoc & doc ); static void SetRootNode( const XMLDoc & doc, const Node & root ); /** Node tree traversal */ static Node GetFirstChild( const Node & node ); static Node GetNextNode( const Node & node ); /** Set the DTD of the document */ static void SetDTD( const XMLDoc & doc, const String & name, const String & path ); /** An error handler to write out messages to Log */ static void WarningHandler( void * ptr, const char * format, ...); static void ErrorHandler( void * ptr, const char * format, ...); protected: static char * MakeMessage(const char *fmt, va_list args); }; /* end class XML */ OT_API std::ostream & operator <<(std::ostream & os, const xmlNodePtr & node); #endif /* OPENTURNS_HAVE_LIBXML2 */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_XMLTOOLBOX_HXX */ openturns-1.9/lib/src/Base/Common/openturns/XMLchar_traits.hxx000066400000000000000000000077501307543307100245450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides a definition for char traits for old versions of GCC * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_XMLCHAR_TRAITS_HXX #define OPENTURNS_XMLCHAR_TRAITS_HXX #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" #include #if defined OPENTURNS_HAVE_LIBXML2 #if defined(__GNUC__) && GCC_VERSION < 30400 /* below GCC 3.4.0 */ #include namespace std { template static void char_traits<_CharT>:: assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; } template static bool char_traits<_CharT>:: eq(const char_type& __c1, const char_type& __c2) { return __c1 == __c2; } template static bool char_traits<_CharT>:: lt(const char_type& __c1, const char_type& __c2) { return __c1 < __c2; } template static typename char_traits<_CharT>::char_type char_traits<_CharT>:: to_char_type(const int_type& __c) { return static_cast(__c); } template static typename char_traits<_CharT>::int_type char_traits<_CharT>:: to_int_type(const char_type& __c) { return static_cast(__c); } template static bool char_traits<_CharT>:: eq_int_type(const int_type& __c1, const int_type& __c2) { return __c1 == __c2; } template static typename char_traits<_CharT>::int_type char_traits<_CharT>:: eof() { return static_cast(EOF); } template static typename char_traits<_CharT>::int_type char_traits<_CharT>:: not_eof(const int_type& __c) { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } template static int char_traits<_CharT>:: compare(const char_type* __s1, const char_type* __s2, std::size_t __n) { for (std::size_t __i = 0; __i < __n; ++__i) if (lt(__s1[__i], __s2[__i])) return -1; else if (lt(__s2[__i], __s1[__i])) return 1; return 0; } template static std::size_t char_traits<_CharT>:: length(const char_type* __p) { std::size_t __i = 0; while (!eq(__p[__i], char_type())) ++__i; return __i; } template static const typename char_traits<_CharT>::char_type* char_traits<_CharT>:: find(const char_type* __s, std::size_t __n, const char_type& __a) { for (std::size_t __i = 0; __i < __n; ++__i) if (eq(__s[__i], __a)) return __s + __i; return 0; } template static typename char_traits<_CharT>::char_type* char_traits<_CharT>:: move(char_type* __s1, const char_type* __s2, std::size_t __n) { return static_cast<_CharT*>(memmove(__s1, __s2, __n * sizeof(char_type))); } template static typename char_traits<_CharT>::char_type* char_traits<_CharT>:: copy(char_type* __s1, const char_type* __s2, std::size_t __n) { // NB: Inline std::copy so no recursive dependencies. std::copy(__s2, __s2 + __n, __s1); return __s1; } template static typename char_traits<_CharT>::char_type* char_traits<_CharT>:: assign(char_type* __s, std::size_t __n, char_type __a) { // NB: Inline std::fill_n so no recursive dependencies. std::fill_n(__s, __n, __a); return __s; } } #endif #endif /* HAS_LIXML2 */ #endif /* OPENTURNS_XMLCHAR_TRAITS_HXX */ openturns-1.9/lib/src/Base/Diff/000077500000000000000000000000001307543307100165025ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Diff/BlendedStep.cxx000066400000000000000000000064411307543307100214240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of BlendedStep * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BlendedStep.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BlendedStep); static const Factory Factory_BlendedStep; /* Default constructor */ BlendedStep::BlendedStep() : FiniteDifferenceStepImplementation() { // Nothing to do } /* Parameters constructor */ BlendedStep::BlendedStep(const Point & epsilon, const Scalar eta) : FiniteDifferenceStepImplementation(epsilon) { setEta( Point( epsilon.getDimension(), eta ) ); } /* Parameters constructor */ BlendedStep::BlendedStep(const Point & epsilon, const Point & eta) : FiniteDifferenceStepImplementation(epsilon) { setEta( eta ); } /* String converter */ String BlendedStep::__repr__() const { OSS oss; oss << "class=" << BlendedStep::GetClassName() << " derived from " << FiniteDifferenceStepImplementation::__repr__() << " eta=" << eta_; return oss; } /* Virtual constructor */ BlendedStep * BlendedStep::clone() const { return new BlendedStep(*this); } /* Compute step */ Point BlendedStep::operator()(const Point & inP) const { const UnsignedInteger dimension = epsilon_.getDimension(); if (dimension != inP.getDimension()) throw InvalidArgumentException(HERE) << "Invalid dimension eps:" << dimension << " x:" << inP.getDimension(); Point result( epsilon_ ); for (UnsignedInteger i = 0; i < dimension; ++ i) { result[i] *= ( std::abs( inP[i] ) + eta_[i] ); if (result[i] < SpecFunc::MinScalar ) throw InvalidArgumentException(HERE) << "Nul step for component " << i << ": eps=" << epsilon_[i] << " x=" << inP[i]; } return result; } /* Method save() stores the object through the StorageManager */ void BlendedStep::save(Advocate & adv) const { FiniteDifferenceStepImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void BlendedStep::load(Advocate & adv) { FiniteDifferenceStepImplementation::load(adv); } /* Eta accessor */ void BlendedStep::setEta(const Point & eta) { const UnsignedInteger dimension = epsilon_.getDimension(); if (eta.getDimension() != epsilon_.getDimension()) throw InvalidArgumentException(HERE) << "Invalid dimension: eta dimension doesn't match epsilon dimension"; for( UnsignedInteger i = 0; i < dimension; ++ i ) { if ( eta[i] < 0.0 ) throw InvalidArgumentException(HERE) << "Negative eta component " << i; } eta_ = eta; } Point BlendedStep::getEta() const { return eta_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/CMakeLists.txt000066400000000000000000000022251307543307100212430ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (FiniteDifferenceStepImplementation.cxx) ot_add_source_file (FiniteDifferenceStep.cxx) ot_add_source_file (ConstantStep.cxx) ot_add_source_file (BlendedStep.cxx) ot_add_source_file (FiniteDifferenceGradient.cxx) ot_add_source_file (FiniteDifferenceHessian.cxx) ot_add_source_file (NonCenteredFiniteDifferenceGradient.cxx) ot_add_source_file (CenteredFiniteDifferenceGradient.cxx) ot_add_source_file (CenteredFiniteDifferenceHessian.cxx) ot_install_header_file (FiniteDifferenceStepImplementation.hxx) ot_install_header_file (FiniteDifferenceStep.hxx) ot_install_header_file (ConstantStep.hxx) ot_install_header_file (BlendedStep.hxx) ot_install_header_file (FiniteDifferenceGradient.hxx) ot_install_header_file (FiniteDifferenceHessian.hxx) ot_install_header_file (NonCenteredFiniteDifferenceGradient.hxx) ot_install_header_file (CenteredFiniteDifferenceGradient.hxx) ot_install_header_file (OTDiff.hxx) ot_install_header_file (CenteredFiniteDifferenceHessian.hxx) # Recurse in subdirectories add_subdirectory (Ev3)openturns-1.9/lib/src/Base/Diff/CenteredFiniteDifferenceGradient.cxx000066400000000000000000000077471307543307100255660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CenteredFiniteDifferenceGradient); static const Factory Factory_CenteredFiniteDifferenceGradient; /* Default constructor */ CenteredFiniteDifferenceGradient::CenteredFiniteDifferenceGradient() : FiniteDifferenceGradient() { // Nothing to do } /* Parameter constructor */ CenteredFiniteDifferenceGradient::CenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(epsilon, p_evaluation) { } /* Parameter constructor */ CenteredFiniteDifferenceGradient::CenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(epsilon, p_evaluation) { } /* Parameter constructor */ CenteredFiniteDifferenceGradient::CenteredFiniteDifferenceGradient(const FiniteDifferenceStep & step, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(step, p_evaluation) { // Nothing to do } /* Virtual constructor */ CenteredFiniteDifferenceGradient * CenteredFiniteDifferenceGradient::clone() const { return new CenteredFiniteDifferenceGradient(*this); } /* String converter */ String CenteredFiniteDifferenceGradient::__repr__() const { OSS oss(true); oss << "class=" << CenteredFiniteDifferenceGradient::GetClassName() << " name=" << getName() << " epsilon=" << getEpsilon().__repr__() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String CenteredFiniteDifferenceGradient::__str__(const String & offset) const { return OSS(false) << offset << "CenteredFiniteDifferenceGradient epsilon : " << getEpsilon(); } /* Here is the interface that all derived class must implement */ /* Gradient () */ Matrix CenteredFiniteDifferenceGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = inP.getDimension(); Point step(finiteDifferenceStep_.operator()(inP)); if (inputDimension != step.getDimension()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; /* At which points do we have to compute the evaluation for the centered finite difference. We need 2*dim points. */ Sample gridPoints(2 * inputDimension, inP); for(UnsignedInteger i = 0; i < inputDimension; ++i) { gridPoints[2 * i][i] += step[i]; gridPoints[2 * i + 1][i] -= step[i]; } // For i /* Evaluate the evaluation */ Sample gridValues(p_evaluation_->operator()(gridPoints)); /* Compute the gradient */ Matrix result(p_evaluation_->getInputDimension(), p_evaluation_->getOutputDimension()); for (UnsignedInteger i = 0; i < result.getNbRows(); ++i) for (UnsignedInteger j = 0; j < result.getNbColumns(); ++j) /* result(i, j) = (f_j(x + e_i) - f_j(x - e_i)) / (2 * e_i) ~ df_j / dx_i */ result(i, j) = (gridValues[2 * i][j] - gridValues[2 * i + 1][j]) / (2.0 * step[i]); return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/CenteredFiniteDifferenceHessian.cxx000066400000000000000000000136721307543307100254150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math hessian implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CenteredFiniteDifferenceHessian); static const Factory Factory_CenteredFiniteDifferenceHessian; /* Default constructor */ CenteredFiniteDifferenceHessian::CenteredFiniteDifferenceHessian() : FiniteDifferenceHessian() { // Nothing to do } /* Parameter constructor */ CenteredFiniteDifferenceHessian::CenteredFiniteDifferenceHessian(const Point & epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceHessian(epsilon, p_evaluation) { // Nothing to do } /* Parameter constructor */ CenteredFiniteDifferenceHessian::CenteredFiniteDifferenceHessian(const Scalar epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceHessian(epsilon, p_evaluation) { // Nothing to do } /* Parameter constructor */ CenteredFiniteDifferenceHessian::CenteredFiniteDifferenceHessian(const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation) : FiniteDifferenceHessian(finiteDifferenceStep, p_evaluation) { // Nothing to do } /* Virtual constructor */ CenteredFiniteDifferenceHessian * CenteredFiniteDifferenceHessian::clone() const { return new CenteredFiniteDifferenceHessian(*this); } /* Comparison operator */ Bool CenteredFiniteDifferenceHessian::operator ==(const CenteredFiniteDifferenceHessian & other) const { return (getEpsilon() == other.getEpsilon()); } /* String converter */ String CenteredFiniteDifferenceHessian::__repr__() const { OSS oss(true); oss << "class=" << CenteredFiniteDifferenceHessian::GetClassName() << " name=" << getName() << " epsilon=" << getEpsilon().__repr__() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String CenteredFiniteDifferenceHessian::__str__(const String & offset) const { return OSS(false) << offset << "CenteredFiniteDifferenceHessian epsilon : " << getEpsilon(); } /* Here is the interface that all derived class must implement */ /* Hessian () */ SymmetricTensor CenteredFiniteDifferenceHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = inP.getDimension(); Point step(finiteDifferenceStep_.operator()(inP)); if (inputDimension != step.getDimension()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; /* At which points do we have to compute the evaluation for the centered finite difference. We need 2*dim^2+1 points. */ Sample gridPoints(2 * inputDimension * inputDimension + 1, inP); UnsignedInteger index = 0; for(UnsignedInteger i = 1; i < inputDimension; ++i) for(UnsignedInteger j = 0; j < i; ++j) { gridPoints[index][i] += step[i]; gridPoints[index][j] += step[j]; ++index; gridPoints[index][i] += step[i]; gridPoints[index][j] -= step[j]; ++index; gridPoints[index][i] -= step[i]; gridPoints[index][j] -= step[j]; ++index; gridPoints[index][i] -= step[i]; gridPoints[index][j] += step[j]; ++index; } // For j for(UnsignedInteger i = 0; i < inputDimension; ++i) { /* Special case for the diagonal terms, in order to avoid computing twice * f(x) = f(x + e_i - e_i) = f(x - e_i + e_i) */ gridPoints[index][i] += 2.0 * step[i]; ++index; gridPoints[index][i] -= 2.0 * step[i]; ++index; } // For i /* Evaluate the evaluation */ Sample gridValues(p_evaluation_->operator()(gridPoints)); /* Get the center value */ Point center(gridValues[gridValues.getSize() - 1]); /* Compute the hessian */ UnsignedInteger outputDimension = p_evaluation_->getOutputDimension(); SymmetricTensor result(inputDimension, outputDimension); UnsignedInteger diagonalOffset = 2 * inputDimension * (inputDimension - 1); Scalar scale = -1.0; UnsignedInteger offDiagonalOffset = 0; for (UnsignedInteger i = 0; i < inputDimension; ++i) { // Diagonal term /* result(i, i, k) = (f_k(x + 2 * e_i) - 2 * f_k(x) + f_k(x + 2 * e_i)) / (4 * e_i * e_i) */ scale = 1.0 / (4.0 * step[i] * step[i]); for (UnsignedInteger k = 0; k < outputDimension; ++k) { result(i, i, k) = scale * (gridValues[diagonalOffset + 2 * i][k] - 2.0 * center[k] + gridValues[diagonalOffset + 2 * i + 1][k]); } // k // Compute only the upper part of each sheet, as the hessian is symmetric for (UnsignedInteger j = 0; j < i; ++j) { scale = 1.0 / (4.0 * step[i] * step[j]); for (UnsignedInteger k = 0; k < outputDimension; ++k) /* result(i, j, k) = (f_k(x + e_i + e_j) - f_k(x + e_i - e_j) + f_k(x - e_i - e_j) - f_k(x - e_i + e_j)) / (4 * e_i * e_j) ~ d2f_k / dx_idx_j */ result(i, j, k) = scale * (gridValues[offDiagonalOffset + 4 * j][k] - gridValues[offDiagonalOffset + 4 * j + 1][k] + gridValues[offDiagonalOffset + 4 * j + 2][k] - gridValues[offDiagonalOffset + 4 * j + 3][k]); } // j offDiagonalOffset += 4 * i; } // i return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/ConstantStep.cxx000066400000000000000000000043661307543307100216640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of ConstantStep * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ConstantStep.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConstantStep); static const Factory Factory_ConstantStep; /* Default constructor */ ConstantStep::ConstantStep() : FiniteDifferenceStepImplementation() { // Nothing to do } /* Parameters constructor */ ConstantStep::ConstantStep(const Point & epsilon) : FiniteDifferenceStepImplementation(epsilon) { // Nothing to do } /* String converter */ String ConstantStep::__repr__() const { OSS oss; oss << "class=" << ConstantStep::GetClassName() << " derived from " << FiniteDifferenceStepImplementation::__repr__(); return oss; } /* Virtual constructor */ ConstantStep * ConstantStep::clone() const { return new ConstantStep(*this); } /* Compute step */ Point ConstantStep::operator()(const Point & inP) const { const UnsignedInteger dimension = epsilon_.getDimension(); if (dimension != inP.getDimension()) throw InvalidArgumentException(HERE) << "Invalid dimension eps:" << dimension << " x:" << inP.getDimension(); return epsilon_; } /* Method save() stores the object through the StorageManager */ void ConstantStep::save(Advocate & adv) const { FiniteDifferenceStepImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void ConstantStep::load(Advocate & adv) { FiniteDifferenceStepImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/Ev3/000077500000000000000000000000001307543307100171375ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Diff/Ev3/CMakeLists.txt000066400000000000000000000003571307543307100217040ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (expression.cxx) ot_add_source_file (operand.cxx) ot_add_source_file (parser.cxx) openturns-1.9/lib/src/Base/Diff/Ev3/auxiliary.h000066400000000000000000000014341307543307100213210ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: auxiliary.h * * Source: GNU C++ * * Purpose: prototypes for auxiliary functions in expression.cxx * * History: 030121 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ namespace Ev3 { bool is_integer(const double); bool is_even(const double); bool is_odd(const double); double Ev3NearZero(); double Ev3Infinity(); } /* namespace Ev3 */ openturns-1.9/lib/src/Base/Diff/Ev3/common.h000066400000000000000000000025201307543307100205770ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: common.h * * Source: GNU C++ * * Purpose: common stuff * * History: 050909 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #ifndef __EV3COMMONH__ #define __EV3COMMONH__ #define NOVARIABLE -1 #define LARGE 1E10 #define NOTVARNAME "_var_not_found_" namespace Ev3 { typedef int Int; // various operator types enum OperatorType { SUM, DIFFERENCE, PRODUCT, FRACTION, POWER, PLUS, MINUS, SIN, COS, TAN, ASIN, ACOS, ATAN, SINH, COSH, TANH, ASINH, ACOSH, ATANH, LOG2, LOG10, LOG, LN, LNGAMMA, GAMMA, EXP, ERF, ERFC, SQRT, CBRT, BESSELJ0, BESSELJ1, BESSELY0, BESSELY1, SIGN, RINT, ABS, COT, COTH, VAR, CONST, ERROR }; // utility functions extern double Ev3NearZero(); extern double Ev3Infinity(); } /* namespace Ev3 */ #ifdef _MSC_VER template T log2(T arg) { return log(arg) / log(2.0); } #endif #endif /* __EV3COMMONH__ */ openturns-1.9/lib/src/Base/Diff/Ev3/exceptions.h000066400000000000000000000060061307543307100214730ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: exceptions.h * * Source: GNU C++ * * Purpose: Expression v3 exceptions * * History: 010622 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #ifndef __EV3EXCEPTIONSH__ #define __EV3EXCEPTIONSH__ #include #include namespace Ev3 { const std::string HELPURL = "http://liberti.dhs.org/"; const std::string NONE = "[none]"; inline void STDACTION() { //std::cerr << interface_ << "::" << scope_ << ": in [" << operation_ << "]: " << description_ << ", code = " << code_ << ", see " << moreinfo_ << std::endl } class ErrBase { public: unsigned long code_; std::string interface_; std::string scope_; std::string operation_; std::string description_; std::string moreinfo_; ErrBase() : code_(0), interface_(NONE), scope_(NONE), operation_(NONE), description_(NONE), moreinfo_(HELPURL) { STDACTION(); } ErrBase(const unsigned long mycode, const std::string & myif, const std::string & myscope, const std::string & myop, const std::string & mydesc, const std::string & myinfo) : code_(mycode), interface_(myif), scope_(myscope), operation_(myop), description_(mydesc), moreinfo_(myinfo) { STDACTION(); } }; class ErrUnknown : public ErrBase { public: ErrUnknown(const unsigned long mycode, const std::string & myif, const std::string & myscope, const std::string & myop, const std::string & mydesc, const std::string & myinfo) : ErrBase(mycode, myif, myscope, myop, mydesc, myinfo) { STDACTION(); } }; class ErrNotPermitted : public ErrBase { public: ErrNotPermitted(const unsigned long mycode, const std::string & myif, const std::string & myscope, const std::string & myop, const std::string & mydesc, const std::string & myinfo) : ErrBase(mycode, myif, myscope, myop, mydesc, myinfo) { STDACTION(); } }; class ErrDivideByZero : public ErrBase { public: std::string dividend; ErrDivideByZero(const unsigned long mycode, const std::string & myif, const std::string & myscope, const std::string & myop, const std::string & mydesc, const std::string & myinfo, const std::string & mydiv) : ErrBase(mycode, myif, myscope, myop, mydesc, myinfo), dividend(mydiv) { STDACTION(); } }; } /* namespace Ev3 */ #endif /* __EV3EXCEPTIONSH__ */ openturns-1.9/lib/src/Base/Diff/Ev3/expression.cxx000066400000000000000000004640441307543307100220760ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: expression.cxx * * Source: GNU C++ * * Purpose: symbolic expression (base classes and functionality) * * History: 010517 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #include #include #include #include #include #include #ifdef _MSC_VER #include #endif #include "expression.h" #ifdef _MSC_VER using namespace boost::math; //because of 'deprecated' warnings #define j0(x) _j0(x) #define j1(x) _j1(x) #define y0(x) _y0(x) #define y1(x) _y1(x) #define i0(x) _i0(x) #define i1(x) _i1(x) #endif namespace Ev3 { ////////////// auxiliary functions /////////////// //#define VNAMEIDXCHAR "_" #define VNAMEIDXCHAR "" #define ISINTTOLERANCE 1e-8 static bool is_integer(double a) { double b = std::abs(a); int bi = (int) round(b); return (std::abs(b - bi) < ISINTTOLERANCE); } static bool is_even(double a) { if (is_integer(a)) { int ai = (int) round(a); return (ai % 2 == 0); } return false; } static bool is_odd(double a) { if (is_integer(a)) { int ai = (int) round(a); return (ai % 2 == 1); } return false; } double Ev3NearZero() { // returns a very small positive value return 1 / LARGE; } double Ev3Infinity() { // returns a very large positive value return LARGE; } // create empty BasicExpression::BasicExpression() { } // create a constant leaf BasicExpression::BasicExpression(const double t) : Operand(t) { } // create a constant (integer-valued) leaf BasicExpression::BasicExpression(const Int t) : Operand(t) { } // create an (empty) operator or a variable leaf BasicExpression::BasicExpression(const Int t, const bool isvar) : Operand(t, isvar) { } // create a variable leaf and set coefficient BasicExpression::BasicExpression(const double c, const Int t, const std::string & vn) : Operand(c, t, vn) { } // user-defined copy constructor with two options BasicExpression::BasicExpression(const Expression & t, const bool iscopy) : Operand(t.GetPointee()) { const Int s = t->GetSize(); // create a _copy_ of t, subnode by subnode if (iscopy) for (int i = 0; i < s; i++) nodes.push_back(t->GetCopyOfNode(i)); // create a copy of the pointers in t else for (int i = 0; i < s; i++) nodes.push_back(t->GetNode(i)); } // copy constructor BasicExpression::BasicExpression(const BasicExpression & t) : Operand(t) { const Int s = t.GetSize(); // necessary for constructs "(BasicExpression) e =" where e already // existed prior to assignment // -- segvs (?) for(int i = 0; i < GetSize(); i++) RecursiveDestroy(GetNodePtr(i)); DeleteAllNodes(); // create a copy of the subnode pointers in t for (int i = 0; i < s; i++) nodes.push_back(t.GetNode(i)); } // destructor BasicExpression::~BasicExpression() { } // BasicExpression class methods: void BasicExpression::Debug () const { Int s = GetSize(); std::cerr << "BasicExpression: Debug:\n"; std::cerr << "\tthis = " << this << std::endl; std::cerr << "\toptype = " << GetOpType() << std::endl; std::cerr << "\tnodes = " << s << std::endl; for (Int i = 0; i < s; i++) std::cerr << "\tnode " << i << ": " << GetNode(i)->GetOpType() << std::endl; } void BasicExpression::Zero() { // -- segvs (?) for(int i = 0; i < GetSize(); i++) RecursiveDestroy(GetNodePtr(i)); DeleteAllNodes(); SetCoeff(1.0); SetExponent(1.0); SetValue(0.0); SetOpType(CONST); } void BasicExpression::One() { // -- segvs (?) for(int i = 0; i < GetSize(); i++) RecursiveDestroy(GetNodePtr(i)); DeleteAllNodes(); SetCoeff(1.0); SetExponent(1.0); SetValue(1.0); SetOpType(CONST); } std::string BasicExpression::PrintTree(const int blanks, const int tabs) const { std::stringstream outbuf; std::string b(blanks, ' '); if (IsLeaf()) outbuf << b << Operand::ToString(); else { outbuf << b << "OP[" << GetOpType() << "](" << std::endl; for(int i = 0; i < GetSize(); i++) { outbuf << GetNode(i)->PrintTree(blanks + tabs, tabs); if (i < GetSize() - 1) { outbuf << ","; } outbuf << std::endl; } outbuf << b << ")"; } return outbuf.str(); } std::ostream & operator<< (std::ostream & outbuf, const BasicExpression & expr) { Int i, s; if (expr.IsLeaf()) { // leaf node, use Operand::ToString() outbuf << Operand(expr); } else { double tc( expr.GetCoeff()); // operator node if (tc != 1) { if (tc != -1) outbuf << "(" << tc << "*("; else outbuf << "(-("; } s = expr.GetSize(); if (s > 1) { for (i = 0; i < s; i++) { outbuf << "(" << expr.GetNode(i) << ")"; if (i < s - 1) { switch( expr.GetOpType()) { case SUM: outbuf << "+"; break; case DIFFERENCE: outbuf << "-"; break; case PRODUCT: outbuf << "*"; break; case FRACTION: outbuf << "/"; break; case POWER: outbuf << "^"; break; default: outbuf << "UNKNOWNOP"; break; } } } } else { switch( expr.GetOpType()) { case PLUS: break; case MINUS: outbuf << "-"; break; case SIN: outbuf << "sin"; break; case COS: outbuf << "cos"; break; case TAN: outbuf << "tan"; break; case ASIN: outbuf << "asin"; break; case ACOS: outbuf << "acos"; break; case ATAN: outbuf << "atan"; break; case SINH: outbuf << "sinh"; break; case COSH: outbuf << "cosh"; break; case TANH: outbuf << "tanh"; break; case ASINH: outbuf << "asinh"; break; case ACOSH: outbuf << "acosh"; break; case ATANH: outbuf << "atanh"; break; case LOG2: outbuf << "log2"; break; case LOG10: outbuf << "log10"; break; case LOG: outbuf << "log"; break; case LN: outbuf << "ln"; break; case LNGAMMA: outbuf << "lngamma"; break; case GAMMA: outbuf << "gamma"; break; case EXP: outbuf << "exp"; break; case ERF: outbuf << "erf"; break; case ERFC: outbuf << "erfc"; break; case SQRT: outbuf << "sqrt"; break; case CBRT: outbuf << "cbrt"; break; case BESSELJ0: outbuf << "besselJ0"; break; case BESSELJ1: outbuf << "besselJ1"; break; case BESSELY0: outbuf << "besselY0"; break; case BESSELY1: outbuf << "besselY1"; break; case SIGN: outbuf << "sign"; break; case RINT: outbuf << "rint"; break; case ABS: outbuf << "abs"; break; case COT: outbuf << "cot"; break; case COTH: outbuf << "coth"; break; default: outbuf << "UNKNOWNOP"; } if (s == 1) { outbuf << "(" << expr.GetNode(0) << ")"; } else { // no arguments - error outbuf << "(NOARG)"; } } if ( expr.GetCoeff() != 1) { outbuf << "))"; } } return outbuf; } std::string BasicExpression::ToString() const { std::stringstream outbuf; outbuf << *this; return outbuf.str(); } std::ostream & operator<< (std::ostream & outbuf, const Expression & expr) { outbuf << expr.GetPointee(); return outbuf; } // is expression this == expression t? bool BasicExpression::IsEqualTo(const Expression& t) const { //Just in case constant value not consolidated in coeff if (GetOpType() == CONST && t->GetOpType() == CONST) { if (GetValue() == t->GetValue()) { return true; } else { return false; } } if (IsEqualToNoCoeff(t)) { if (GetCoeff() == t->GetCoeff()) return true; else return false; } else return false; } bool BasicExpression::operator == (const BasicExpression& t) const { // fast checks if (IsLeaf() && t.IsLeaf()) { if (GetOpType() == t.GetOpType()) { if (GetOpType() == CONST) { // if both are constants, they're always equal up to coefficient return true; } else if (GetOpType() == VAR && GetVarIndex() == t.GetVarIndex() && GetExponent() == t.GetExponent()) return true; else return false; } else return false; } else if ((!IsLeaf()) && (!t.IsLeaf())) { // both BasicExpressions are not leaves, recurse using PRECISE // (i.e. not up to coefficient) form if (GetSize() != t.GetSize()) return false; if (GetOpType() != t.GetOpType()) return false; Int i; bool ret = true; for (i = 0; i < GetSize(); i++) { if (!(GetNode(i)->IsEqualTo(t.GetNode(i)))) { ret = false; break; } } if (ret) { return true; } return false; } else return false; } bool BasicExpression::IsEqualTo(const double t) const { return (IsLeaf() && GetOpType() == CONST && GetValue() == t); } int BasicExpression::NumberOfVariables() const { int maxvi = 0; return NumberOfVariables(maxvi); } int BasicExpression::NumberOfVariables(int& maxvi) const { int newvi = 0; if (IsVariable()) { newvi = GetVarIndex(); if (newvi > maxvi) { maxvi = newvi; } return maxvi; } else if (!IsLeaf()) { for(int i = 0; i < GetSize(); i++) { newvi = GetNode(i)->NumberOfVariables(maxvi); if (newvi > maxvi) { maxvi = newvi; } } return maxvi; } else { return 0; } } // taken and adapted from operator == bool BasicExpression::IsEqualToNoCoeff(const Expression & t) const { // fast checks if (IsLeaf() && t->IsLeaf()) { if (GetOpType() == t->GetOpType()) { if (GetOpType() == CONST) { // if both are constants, they're always equal up to coefficient return true; } else { if (GetOpType() == VAR && GetVarIndex() == t->GetVarIndex() && GetExponent() == t->GetExponent()) return true; else return false; } } else return false; } else if ((!IsLeaf()) && (!t->IsLeaf())) { // both BasicExpressions are not leaves, recurse using PRECISE // (i.e. not up to coefficient) form if (GetSize() != t->GetSize() || GetOpType() != t->GetOpType() || GetExponent() != t->GetExponent()) { return false; } Int i; bool ret = true; for (i = 0; i < GetSize(); i++) { if (!(GetNode(i)->IsEqualTo(t->GetNode(i)))) { ret = false; break; } } if (ret) { return true; } return false; } else return false; } bool BasicExpression::IsEqualBySchema(const Expression& t) const { if (IsLeaf() && t->IsLeaf()) { if (GetOpType() == t->GetOpType() && IsLinear() == t->IsLinear()) { return true; } else { return false; } } else if ((!IsLeaf()) && (!t->IsLeaf())) { // both BasicExpressions are not leaves, recurse if (GetSize() != t->GetSize()) { return false; } if (GetOpType() != t->GetOpType()) { return false; } Int i; bool ret = true; for (i = 0; i < GetSize(); i++) { if (!(GetNode(i)->IsEqualBySchema(t->GetNode(i)))) { ret = false; break; } } if (ret) { return true; } return false; } else { return false; } } bool BasicExpression::IsEqualByOperator(const int theoplabel) const { if (GetOpType() == theoplabel) { return true; } else { return false; } } bool BasicExpression::DependsOnVariable(Int vi) const { if (IsLeaf()) { if (GetOpType() == VAR) { if (GetVarIndex() == vi) return true; else return false; } else return false; } else { Int i; bool ret = false; for (i = 0; i < GetSize(); i++) { ret = GetNode(i)->DependsOnVariable(vi); if (ret) return true; } return false; } } int BasicExpression::DependsLinearlyOnVariable(Int vi) const { if (IsVariable()) { if (GetVarIndex() == vi) { if (GetExponent() == 1) { return 1; // depends linearly } else { return 0; // depends nonlinearly } } else { return 2; // doesn't depend on vi at all } } else { int i; int d; bool dependsatall = false; // if node is linear: if (GetOpType() == SUM || GetOpType() == DIFFERENCE || GetOpType() == PLUS || GetOpType() == MINUS) { for(i = 0; i < GetSize(); i++) { d = GetNode(i)->DependsLinearlyOnVariable(vi); if (d == 0) { // depends nonlinearly, return 0 return 0; } if (d == 1) { // depends linearly, record dependsatall = true; } } if (dependsatall) { return 1; } else { return 2; } } else { if (DependsOnVariable(vi)) { return 0; // depends nonlinearly } else { return 2; // doesn't depend on vi at all } } } } void BasicExpression::ConsolidateProductCoeffs() { if (GetOpType() == PRODUCT) { Int i; double tc = GetCoeff(); for (i = 0; i < GetSize(); i++) { tc *= GetNode(i)->GetCoeff(); GetNode(i)->SetCoeff(1.0); } if (std::abs(tc) < Ev3NearZero()) { Zero(); } else { SetCoeff(tc); } } } void BasicExpression::DistributeCoeffOverSum() { if (GetOpType() == SUM) { double tc = GetCoeff(); if (tc != 1) { SetCoeff(1.0); Int i; for(i = 0; i < GetSize(); i++) { GetNode(i)->SetCoeff(tc * GetNode(i)->GetCoeff()); GetNode(i)->DistributeCoeffOverSum(); } } } } void BasicExpression::DistributeCoeffOverProduct() { if (GetOpType() == PRODUCT) { double tc = GetCoeff(); if (tc != 1 && GetSize() > 0) { SetCoeff(1.0); GetNode(0)->SetCoeff(tc * GetNode(0)->GetCoeff()); } } } // enforce constant dependencies (added for MORON - see ../PROGNOTES) // this only acts on the proper leaf nodes void BasicExpression::EnforceDependency() { if (IsLeaf()) { // nonrecursive EnforceDependencyOnOperand(); } else { // recursive int i; for (i = 0; i < GetSize(); i++) { GetNode(i)->EnforceDependency(); } } } // substitute a variable with a constant void BasicExpression::VariableToConstant(int varindex, double c) { if (IsLeaf()) { // nonrecursive SubstituteVariableWithConstant(varindex, c); } else { // recursive int i; for (i = 0; i < GetSize(); i++) { GetNode(i)->VariableToConstant(varindex, c); } } } // replace variable indexed v1 with variable indexed v2 void BasicExpression::ReplaceVariable(int v1, int v2, const std::string & vn) { if (DependsOnVariable(v1)) { if (IsVariable() && GetVarIndex() == v1) { SetVarIndex(v2); SetVarName(vn); } else { int i; for(i = 0; i < GetSize(); i++) { GetNode(i)->ReplaceVariable(v1, v2, vn); } } } } void BasicExpression::ReplaceVariable(int v1, int v2, const std::string & vn, double c2) { if (DependsOnVariable(v1)) { if (IsVariable() && GetVarIndex() == v1) { SetVarIndex(v2); SetVarName(vn); SetCoeff(GetCoeff() * c2); } else { int i; for(i = 0; i < GetSize(); i++) { GetNode(i)->ReplaceVariable(v1, v2, vn, c2); } } } } // replace with a variable the deepest node conforming to schema and // return replaced term or zero expression if no replacement occurs Expression BasicExpression::ReplaceBySchema(int vi, const std::string & vn, const Expression & schema) { Expression ret(0.0); ret = ReplaceBySchemaRecursive(vi, vn, schema); if (ret->IsZero()) { // no subnodes with schema found, wor on this one if (IsEqualBySchema(schema)) { // this node is according to schema // save (recursively) this into ret ret.SetToCopyOf(*this); // replace with w_vi // -- segvs (?) for(int i = 0; i < GetSize(); i++) { RecursiveDestroy(GetNodePtr(i)); } DeleteAllNodes(); SetOpType(VAR); SetVarIndex(vi); SetVarName(vn); SetCoeff(1.0); SetExponent(1.0); } } return ret; } // recursive version - works on subnodes, not on current node Expression BasicExpression::ReplaceBySchemaRecursive(int vi, const std::string & vn, const Expression & schema) { bool done = false; Expression ret(0.0); for(int i = 0; i < GetSize(); i++) { if (!GetNode(i)->IsLeaf()) { ret = GetNode(i)->ReplaceBySchemaRecursive(vi, vn, schema); if (!ret->IsZero()) { done = true; break; } } if (!done) { if (GetNode(i)->IsEqualBySchema(schema)) { ret = GetNode(i); Expression w(1, vi, vn); GetNodePtr(i)->SetTo(w); done = true; break; } } } return ret; } // replace with a variable the deepest node with given operator label // return replaced term or zero expression if no replacement occurs Expression BasicExpression::ReplaceByOperator(int vi, const std::string & vn, int theoplabel) { Expression ret(0.0); ret = ReplaceByOperatorRecursive(vi, vn, theoplabel); if (ret->IsZero()) { // no subnodes with schema found, wor on this one if (IsEqualByOperator(theoplabel)) { // this node is according to schema // save (recursively) this into ret ret.SetToCopyOf(*this); // replace with w_vi // -- segvs for(int i = 0; i < GetSize(); i++) { RecursiveDestroy(GetNodePtr(i)); } DeleteAllNodes(); SetOpType(VAR); SetVarIndex(vi); SetVarName(vn); SetCoeff(1.0); SetExponent(1.0); } } return ret; } // recursive version - works on subnodes, not on current node Expression BasicExpression::ReplaceByOperatorRecursive(int vi, const std::string & vn, int theoplabel) { bool done = false; Expression ret(0.0); for(int i = 0; i < GetSize(); i++) { if (!GetNode(i)->IsLeaf()) { ret = GetNode(i)->ReplaceByOperatorRecursive(vi, vn, theoplabel); if (!ret->IsZero()) { done = true; break; } } if (!done) { if (GetNode(i)->IsEqualByOperator(theoplabel)) { ret = GetNode(i); Expression w(1, vi, vn); GetNodePtr(i)->SetTo(w); done = true; break; } } } return ret; } void BasicExpression::ReplaceWithExpression(const Expression & replace) { /* // -- segvs (?) for(int i = 0; i < GetSize(); i++) { RecursiveDestroy(GetNodePtr(i)); } */ DeleteAllNodes(); if (replace->GetOpType() == VAR) { SetVarIndex(replace->GetVarIndex()); SetVarName(replace->GetVarName()); SetCoeff(replace->GetCoeff()); SetExponent(replace->GetExponent()); } else if (replace->GetOpType() == CONST) { SetValue(replace->GetValue()); } else { SetCoeff(replace->GetCoeff()); SetExponent(replace->GetExponent()); SetOpType(replace->GetOpType()); } for (int i = 0; i < replace->GetSize(); i++) { nodes.push_back(replace->GetNode(i)); } } int BasicExpression::ReplaceSubexpression(const Expression & needle, const Expression & replace) { int ret = 0; if (!IsLeaf()) { // recurse for(int i = 0; i < GetSize(); i++) { ret += GetNode(i)->ReplaceSubexpression(needle, replace); } } // act on this node if (IsEqualTo(needle)) { ret++; ReplaceWithExpression(replace); } return ret; } void BasicExpression::ResetVarNames(const std::string & vn, int lid, int uid) { // set all variable names in the expression to vn if (!IsLeaf()) { for(int i = 0; i < GetSize(); i++) { GetNode(i)->ResetVarNames(vn, lid, uid); } } else { if (GetOpType() == VAR) { int vi = GetVarIndex(); if (vi >= lid && vi <= uid) { SetVarName(vn); } } } } bool BasicExpression::DistributeProductsOverSums() { // recursive part bool ret = false; if (!IsLeaf()) { for(int i = 0; i < GetSize(); i++) { bool haschanged = GetNode(i)->DistributeProductsOverSums(); if (haschanged) { ret = true; } } } // deal with this node Expression e(0.0); if (GetOpType() == PRODUCT) { for(int i = 0; i < GetSize(); i++) { if (GetNode(i)->GetOpType() == SUM) { // found occurrence of *(+), distribute ret = true; Expression f = (*this) / GetNode(i); Simplify(&f); for(int j = 0; j < GetNode(i)->GetSize(); j++) { e = e + f * GetNode(i)->GetNode(j); } // now replace this with e ReplaceWithExpression(e); } } } return ret; } void BasicExpression::GetVarIndices(std::vector & vidx) { if (!IsLeaf()) { for(int i = 0; i < GetSize(); i++) { GetNode(i)->GetVarIndices(vidx); } } else if (IsVariable()) { int vi = GetVarIndex(); if (find(vidx.begin(), vidx.end(), vi) == vidx.end()) { vidx.push_back(vi); } } } void BasicExpression::GetVarIndicesInSchema(std::vector & vidx, const Expression & schema) { // recurse if (!IsLeaf()) { for(int i = 0; i < GetSize(); i++) { GetNode(i)->GetVarIndicesInSchema(vidx, schema); } } // deal with this node if (IsEqualBySchema(schema)) { GetVarIndices(vidx); } } // find the variable name corresponding to variable index vi std::string BasicExpression::FindVariableName(int vi) { std::string vn; if (IsVariable()) { if (GetVarIndex() == vi) { return GetVarName(); } else { return ""; } } else { int i; for(i = 0; i < GetSize(); i++) { vn = GetNode(i)->FindVariableName(vi); if (vn.length() > 0) { return vn; } } } return ""; } // is this expression linear? bool BasicExpression::IsLinear() const { if (IsVariable()) { if (GetExponent() != 0 && GetExponent() != 1) { return false; } else { return true; } } if (IsConstant()) { return true; } if(GetOpType() == SUM || GetOpType() == DIFFERENCE) { int i; for(i = 0; i < GetSize(); i++) { if (!GetNode(i)->IsLinear()) { return false; } } return true; } else { return false; } } // is this expression a quadratic product? bool BasicExpression::IsQuadratic(int& prodtype) const { bool ret = false; if ((GetOpType() == PRODUCT && GetNode(0)->GetOpType() == VAR && GetNode(1)->GetOpType() == VAR) || (GetOpType() == POWER && GetNode(0)->GetOpType() == VAR && GetNode(1)->GetValue() == 2) || (GetOpType() == VAR && GetExponent() == 2)) { prodtype = GetOpType(); ret = true; } return ret; } bool BasicExpression::IsQuadratic() const { int ret = 0; return IsQuadratic(ret); } // return info about the linear part (assumes Simplify() has already been // called on this) - return false if expression has no linear part // by "linear part" we mean lin(x) in expr(x,y) = lin(x) + nonlin(y) bool BasicExpression::GetLinearInfo(std::vector & lincoeff, std::vector & linvi, std::vector & linvn, double& c) { c = 0; bool ret = false; Expression nl(GetPureNonlinearPart()); if (IsLinear()) { nl->Zero(); } if (lincoeff.size() > 0) { lincoeff.erase(lincoeff.begin(), lincoeff.end()); linvi.erase(linvi.begin(), linvi.end()); linvn.erase(linvn.begin(), linvn.end()); } if (IsLeaf()) { if (IsConstant()) { // just a constant c = GetValue(); ret = true; } else if (IsVariable() && GetExponent() == 1) { // just a variable linvi.push_back(GetVarIndex()); lincoeff.push_back(GetCoeff()); linvn.push_back(GetVarName()); ret = true; } } else { if (GetOpType() == SUM) { int i, vi; c = 0; for(i = 0; i < GetSize(); i++) { if (GetNode(i)->IsConstant()) { if (i > 0) { //std::cerr << "BasicExpression::GetLinearInfo: WARNING: " // << "run Simplify() first\n"; } c += GetNode(i)->GetValue(); } else if (GetNode(i)->IsVariable() && GetNode(i)->GetExponent() == 1) { vi = GetNode(i)->GetVarIndex(); if (!nl->DependsOnVariable(vi)) { // vi depends only linearly on expression linvi.push_back(vi); lincoeff.push_back(GetNode(i)->GetCoeff()); linvn.push_back(GetNode(i)->GetVarName()); ret = true; } } } } } return ret; } // return info about the purely linear part // (assumes Simplify() has already been // called on this) - return false if expression has no linear part // by "pure linear part" we mean e.g. x+y in x+y+y^2 bool BasicExpression::GetPureLinearInfo(std::vector & lincoeff, std::vector & linvi, std::vector & linvn, double& c) { c = 0; bool ret = false; int i; Expression nl(GetPureNonlinearPart()); if (IsLinear()) { nl->Zero(); } if (lincoeff.size() > 0) { lincoeff.erase(lincoeff.begin(), lincoeff.end()); linvi.erase(linvi.begin(), linvi.end()); linvn.erase(linvn.begin(), linvn.end()); } if (IsLeaf()) { if (IsConstant()) { // just a constant c = GetValue(); ret = true; } else if (IsVariable() && GetExponent() == 1) { // just a variable linvi.push_back(GetVarIndex()); lincoeff.push_back(GetCoeff()); linvn.push_back(GetVarName()); ret = true; } } else { if (GetOpType() == SUM) { int vi; c = 0; for(i = 0; i < GetSize(); i++) { if (GetNode(i)->IsConstant()) { if (i > 0) { //std::cerr << "BasicExpression::GetLinearInfo: WARNING: " // << "run Simplify() first\n"; } c += GetNode(i)->GetValue(); } else if (GetNode(i)->IsVariable() && GetNode(i)->GetExponent() == 1) { vi = GetNode(i)->GetVarIndex(); linvi.push_back(vi); lincoeff.push_back(GetNode(i)->GetCoeff()); linvn.push_back(GetNode(i)->GetVarName()); ret = true; } } } } return ret; } // get the linear part - x in x+y+y^2 Expression BasicExpression::GetLinearPart() { std::vector lincoeff; std::vector linvi; std::vector linvn; double c; GetLinearInfo(lincoeff, linvi, linvn, c); int i; Expression ret; if (lincoeff.size() > 0) { ret->SetOpType(VAR); ret->SetVarIndex(linvi[0]); ret->SetCoeff(lincoeff[0]); ret->SetVarName(linvn[0]); ret->SetExponent(1.0); if (lincoeff.size() > 1) { Expression addend(1.0, -1, NOTVARNAME); for(i = 1; i < (int) lincoeff.size(); i++) { addend->SetVarIndex(linvi[i]); addend->SetCoeff(lincoeff[i]); addend->SetVarName(linvn[i]); ret = ret + addend; } } } return ret; } // get the pure linar part - x+y in x+y+y^2 Expression BasicExpression::GetPureLinearPart() { std::vector lincoeff; std::vector linvi; std::vector linvn; double c; GetPureLinearInfo(lincoeff, linvi, linvn, c); int i; Expression ret(0.0); if (lincoeff.size() > 0) { ret->SetOpType(VAR); ret->SetVarIndex(linvi[0]); ret->SetCoeff(lincoeff[0]); ret->SetVarName(linvn[0]); ret->SetExponent(1.0); if (lincoeff.size() > 1) { for(i = 1; i < (int) lincoeff.size(); i++) { Expression addend(lincoeff[i], linvi[i], linvn[i]); ret = SumLink(ret, addend); } } } return ret; } // get the nonlinear part - nonlin(y) in expr(x,y) = lin(x) + nonlin(y) Expression BasicExpression::GetNonlinearPart() { Expression ret(GetPureNonlinearPart()); std::vector linval; std::vector linidx; std::vector linvn; double c = 0; GetPureLinearInfo(linval, linidx, linvn, c); int i; Expression addend(1.0, -1, NOTVARNAME); // we cycle backwards to keep the order of addends in ret for(i = linidx.size() - 1; i >= 0 ; i--) { if (ret->DependsOnVariable(linidx[i])) { // pure nonlinear part depends on varindex i, add it to ret addend->SetCoeff(linval[i]); addend->SetVarIndex(linidx[i]); addend->SetVarName(linvn[i]); ret = addend + ret; } } return ret; } // get the purely nonlinear part - e.g. only y^2 in x+y+y^2 Expression BasicExpression::GetPureNonlinearPart() { Expression ret(0.0); if (!IsLeaf()) { if (GetOpType() == SUM) { int i; for(i = 0; i < GetSize(); i++) { if (!GetNode(i)->IsLinear()) { ret = SumLink(ret, GetNode(i)); } } } else if (GetOpType() == DIFFERENCE) { int i; for(i = 0; i < GetSize(); i++) { if (!GetNode(i)->IsLinear()) { ret = ret - GetNode(i); } } } else if (GetOpType() == PLUS) { ret = GetNode(0); } else if (GetOpType() == MINUS) { ret = GetNode(0); ret->SetCoeff(-ret->GetCoeff()); } else { ret = *this; } } else { // leaf but can be a power if (GetExponent() != 0 && GetExponent() != 1) { ret = *this; } } return ret; } // get value of additive constant double BasicExpression::GetConstantPart() { double ret = 0; if (IsConstant()) { ret = GetValue(); } else if (!IsLeaf()) { int op = GetOpType(); if (op == SUM || op == DIFFERENCE) { int i = 0; int sz = GetSize(); while(i < sz) { if (GetNode(i)->IsConstant()) { if (op == SUM || (op == DIFFERENCE && i == 0)) { ret += GetNode(i)->GetValue(); } else { ret -= GetNode(i)->GetValue(); } } i++; } } } return ret; } // doesn't deal with additive constants in PLUS/MINUS operands double BasicExpression::RemoveAdditiveConstant() { double ret = 0; if (IsConstant()) { ret = GetValue(); SetValue(0); } else if (!IsLeaf()) { int op = GetOpType(); if (op == SUM || op == DIFFERENCE) { int i = 0; int sz = GetSize(); while(i < sz) { if (GetNode(i)->IsConstant()) { if (op == SUM || (op == DIFFERENCE && i == 0)) { ret += GetNode(i)->GetValue(); } else { ret -= GetNode(i)->GetValue(); } DeleteNode(i); sz--; } else { i++; } } } } return ret; } /************** expression creation (no change to args) ***************/ // BIG FAT WARNING: when you change these operators, also please // change their "-Link" counterparts! // sums: Expression operator + (Expression a, Expression b) { Expression ret; // make a preliminary check if (a->GetCoeff() == 0 || a->HasValue(0)) { ret.SetToCopyOf(b); return ret; } if (b->GetCoeff() == 0 || b->HasValue(0)) { ret.SetToCopyOf(a); return ret; } if (!(a->IsConstant() && b->IsConstant()) && a->IsEqualToNoCoeff(b)) { a->SetCoeff(a->GetCoeff() + b->GetCoeff()); if (std::abs(a->GetCoeff()) < Ev3NearZero()) { // simplify to zero - for differences Expression zero(0.0); return zero; } else { ret.SetToCopyOf(a); return ret; } } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && b->IsLeaf() && b->GetOpType() == CONST) { // a, b are numbers - add them ret.SetToCopyOf(a); ret->SetValue(a->GetValue() + b->GetValue()); ret->SetCoeff(1.0); ret->SetExponent(1.0); return ret; } else if (a->IsLeaf() && a->GetOpType() == VAR && b->IsLeaf() && b->GetOpType() == VAR && a->GetVarIndex() == b->GetVarIndex() && a->GetExponent() == b->GetExponent()) { // a, b are the same variable - add coefficients ret.SetToCopyOf(a); ret->SetCoeff(a->GetCoeff() + b->GetCoeff()); return ret; } else if (a->GetOpType() == SUM && b->GetOpType() != SUM) { // a is a sum and b isn't - just add the term b ret.SetToCopyOf(a); ret->DistributeCoeffOverSum(); Int i = 0; bool couldsimplify = false; Expression tmp; // if t is a leaf and there is a like leaf in this, // just add it to the value/coefficient if (b->IsLeaf() && b->GetOpType() == CONST) { // b is a constant for (i = 0; i < ret->GetSize(); i++) { tmp = ret->GetNode(i); if (tmp->IsLeaf() && tmp->GetOpType() == CONST) { tmp->SetValue(tmp->GetValue() + b->GetValue() / ret->GetCoeff()); tmp->SetCoeff(1.0); tmp->SetExponent(1.0); // NB: changing tmp should also change a couldsimplify = true; break; } } } else if (b->IsLeaf() && b->GetOpType() == VAR) { // b is a variable for (i = 0; i < ret->GetSize(); i++) { if (ret->GetNode(i)->IsLeaf() && ret->GetNode(i)->GetOpType() == VAR && b->GetVarIndex() == ret->GetNode(i)->GetVarIndex() && b->GetExponent() == ret->GetNode(i)->GetExponent()) { double tc = ret->GetNode(i)->GetCoeff() + b->GetCoeff() / ret->GetCoeff(); // warning: tc could be zero, but it would be cumbersome // to simplify it here - do it in SimplifyConstant ret->GetNode(i)->SetCoeff(tc); couldsimplify = true; break; } } } else if (!b->IsLeaf()) { // a is a sum, b is a nonleaf, look for a subnode of a similar to b for (i = 0; i < ret->GetSize(); i++) { if (ret->GetNode(i)->IsEqualTo(b)) { // found one, add coefficients - notice, as above, coeff could // be zero, but deal with that case in SimplifyConstant ret->GetNode(i)->SetCoeff(ret->GetNode(i)->GetCoeff() + b->GetCoeff()); couldsimplify = true; break; } } } if (!couldsimplify) { // either could not simplify in steps above, or b is an operator ret->AddCopyOfNode(b); } return ret; } else if (a->GetOpType() == SUM && b->GetOpType() == SUM) { // a, b are sums - add terms of b to a b->DistributeCoeffOverSum(); ret.SetToCopyOf(a); Int i = 0; Int s = b->GetSize(); for (i = 0; i < s; i++) { ret = ret + b->GetNode(i); } return ret; } else if (a->GetOpType() != SUM && b->GetOpType() == SUM) { // a is not a sum but b is - transform this into a sum ret.SetToCopyOf(b); ret = ret + a; return ret; } else { // all other cases - make new node on top of the addends ret->SetOpType(SUM); ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->AddCopyOfNode(a); ret->AddCopyOfNode(b); return ret; } } // product Expression operator * (Expression a, Expression t) { Expression ret; // make a preliminary check if (a->GetCoeff() == 0 || t->GetCoeff() == 0 || a->HasValue(0) || t->HasValue(0)) { Expression zero(0.0); return zero; } if (a->HasValue(1)) { return t; } if (t->HasValue(1)) { return a; } if (!(a->IsConstant() && t->IsConstant()) && a->IsEqualToNoCoeff(t)) { Expression two(2.0); ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret = ret ^ two; ret->SetCoeff(a->GetCoeff() * t->GetCoeff()); return ret; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // a, t are numbers - multiply them ret.SetToCopyOf(a); ret->SetValue(a->GetValue() * t->GetValue()); ret->SetCoeff(1.0); ret->SetExponent(1.0); return ret; } else if (a->IsLeaf() && a->GetOpType() == VAR && t->IsLeaf() && t->GetOpType() == VAR && a->GetVarIndex() == t->GetVarIndex()) { // a, t are the same variable - multiply coefficients // and add exponents ret.SetToCopyOf(a); ret->SetCoeff(a->GetCoeff() * t->GetCoeff()); ret->SetExponent(a->GetExponent() + t->GetExponent()); return ret; } else if (t->IsConstant()) { // t is constant, set coeff of a ret.SetToCopyOf(a); ret->SetCoeff(a->GetCoeff() * t->GetValue()); ret->DistributeCoeffOverSum(); return ret; } else if (a->IsConstant()) { // a is constant, set coeff of t ret.SetToCopyOf(t); ret->SetCoeff(t->GetCoeff() * a->GetValue()); ret->DistributeCoeffOverSum(); return ret; } else if (a->GetOpType() == PRODUCT && t->GetOpType() != PRODUCT) { // a is a product and t isn't - just multiply the term t ret.SetToCopyOf(a); Int i = 0; bool couldsimplify = false; if (t->IsLeaf() && t->GetOpType() == VAR) { // t is a variable Expression tmp; for (i = 0; i < ret->GetSize(); i++) { tmp = ret->GetNode(i); if (tmp->IsLeaf() && tmp->GetOpType() == VAR && t->GetVarIndex() == tmp->GetVarIndex()) { // found same variable in a, multiply coeffs and add exponents tmp->SetCoeff(tmp->GetCoeff() * t->GetCoeff()); tmp->SetExponent(tmp->GetExponent() + t->GetExponent()); couldsimplify = true; break; } } } // here we shan't try to simplify f*f <-- f^2 (f nonleaf) // because a product of nonleaves is easier to manipulate than // a power (as it adds a depth level) if (!couldsimplify) { // either could not simplify in steps above, or t is an operator ret->AddCopyOfNode(t); } return ret; } else if (a->GetOpType() == PRODUCT && t->GetOpType() == PRODUCT) { // a, t are products - multiply terms of t to a t->DistributeCoeffOverProduct(); ret.SetToCopyOf(a); Int s = t->GetSize(); for (Int i = 0; i < s; i++) { ret = ret * t->GetNode(i); } return ret; } else if (a->GetOpType() != PRODUCT && t->GetOpType() == PRODUCT) { // a is not a products but t is - transform this into a product ret.SetToCopyOf(t); ret = ret * a; return ret; } else { // all other cases - make new node on top of the addends ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(PRODUCT); ret->AddCopyOfNode(a); ret->AddCopyOfNode(t); return ret; } } // fractions: Expression operator / (Expression a, Expression t) { Expression ret; // make a preliminary check if (t->GetCoeff() == 0) { // divide by zero unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("operator/"); std::string myop("t.GetCoeff()==0"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } if (a->GetCoeff() == 0 || a->HasValue(0)) { // dividend has zero coeff, return zero Expression zero(0.0); return zero; } if (t->HasValue(1)) { ret.SetToCopyOf(a); return ret; } if (!(a->IsConstant() && t->IsConstant()) && a->IsEqualToNoCoeff(t)) { // dividend = divisor, return ratio of coefficients Expression one(1.0); one->SetCoeff(a->GetCoeff() / t->GetCoeff()); return one; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // a, t are numbers - divide them if (t->GetValue() == 0) { unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("operator/"); std::string myop("t.GetValue()==0"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } else { ret.SetToCopyOf(a); ret->SetValue(a->GetValue() / t->GetValue()); ret->SetCoeff(1.0); ret->SetExponent(1.0); return ret; } } else if (t->HasValue(1)) { // divide by constant 1, don't do anything ret.SetToCopyOf(a); return ret; } else if (t->IsConstant()) { // t is constant, set coeff of a ret.SetToCopyOf(a); ret->SetCoeff(a->GetCoeff() / t->GetValue()); ret->DistributeCoeffOverSum(); return ret; } else if (a->IsVariable() && t->IsVariable() && a->GetVarIndex() == t->GetVarIndex()) { // cx^e / dx^f = (c/d)x^(e-f) ret.SetToCopyOf(a); double te = a->GetExponent() - t->GetExponent(); double tc = a->GetCoeff() / t->GetCoeff(); if (std::abs(te) < Ev3NearZero()) { Expression c(tc); return c; } ret->SetCoeff(tc); ret->SetExponent(te); return ret; } else if (a->IsVariable() && t->GetOpType() == PRODUCT) { // a is a variable, t is a product - see if a appears in t // and cancel common term // first simplify coeffs of divisor Expression at; at.SetToCopyOf(a); ret.SetToCopyOf(t); ret->ConsolidateProductCoeffs(); // denominator if (std::abs(ret->GetCoeff()) < Ev3NearZero()) { // divide by zero unsigned long mycode(22); std::string myif("Expression Building"); std::string myscope("operator/"); std::string myop("t->GetCoeff()"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } if (std::abs(at->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } double accumulatedcoeff = at->GetCoeff() / ret->GetCoeff(); at->SetCoeff(1.0); ret->SetCoeff(1.0); // now try simplification Int i; for (i = 0; i < ret->GetSize(); i++) { if (ret->GetNode(i)->GetOpType() == VAR && at->GetVarIndex() == ret->GetNode(i)->GetVarIndex()) { double te = at->GetExponent() - ret->GetNode(i)->GetExponent(); if (std::abs(te) < Ev3NearZero()) { // exponents are the same, just cancel at->One(); ret->DeleteNode(i); } else if (te > 0) { // numerator remains, cancel denominator at->SetExponent(te); ret->DeleteNode(i); } else if (te < 0) { // numerator goes to one, denominator remains at->One(); ret->GetNode(i)->SetExponent(-te); } // exit loop break; } } // check that denominator (t) has more than one operand; // if not, bring up a rank level if (ret->GetSize() == 1) { ret = ret->GetNode(0); } // build ratio Expression ret2; ret2->SetOpType(FRACTION); ret2->SetCoeff(accumulatedcoeff); ret2->SetExponent(1.0); ret2->AddCopyOfNode(at); ret2->AddCopyOfNode(ret); return ret2; } else if (t->IsVariable() && a->GetOpType() == PRODUCT) { // t is a variable, a is a product - see if t appears in a // and cancel common term // first simplify coeffs of divisor Expression bt; bt.SetToCopyOf(t); ret.SetToCopyOf(a); ret->ConsolidateProductCoeffs(); // denominator - already checked if (std::abs(ret->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } double accumulatedcoeff = ret->GetCoeff() / bt->GetCoeff(); ret->SetCoeff(1.0); bt->SetCoeff(1.0); // now try simplification Int i; for (i = 0; i < ret->GetSize(); i++) { if (ret->GetNode(i)->GetOpType() == VAR && bt->GetVarIndex() == ret->GetNode(i)->GetVarIndex()) { double te = ret->GetNode(i)->GetExponent() - bt->GetExponent(); if (std::abs(te) < Ev3NearZero()) { // exponents are the same, just cancel bt->One(); ret->DeleteNode(i); } else if (te > 0) { // numerator remains, cancel denominator bt->One(); ret->GetNode(i)->SetExponent(te); } else if (te < 0) { // numerator goes to one, denominator remains bt->SetExponent(-te); ret->DeleteNode(i); } // exit loop break; } } // check that numerator (a) has more than one operands; // if not, bring up a rank level if (ret->GetSize() == 1) { ret = ret->GetNode(0); } // build ratio Expression ret2; ret2->SetOpType(FRACTION); ret2->SetCoeff(accumulatedcoeff); ret2->SetExponent(1.0); ret2->AddCopyOfNode(ret); ret2->AddCopyOfNode(bt); return ret2; } else if (a->GetOpType() == PRODUCT && t->GetOpType() == PRODUCT) { // a, t are products, try to cancel common terms Expression at; Expression bt; at.SetToCopyOf(a); bt.SetToCopyOf(t); Int i = 0, j = 0; double accumulatedcoeff; // first simplify coefficients of operands at->ConsolidateProductCoeffs(); bt->ConsolidateProductCoeffs(); // denominator if (std::abs(bt->GetCoeff()) < Ev3NearZero()) { // divide by zero unsigned long mycode(21); std::string myif("Expression Building"); std::string myscope("operator/"); std::string myop("t->GetCoeff()"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } if (std::abs(at->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } // save ratio of coeffs of products accumulatedcoeff = at->GetCoeff() / bt->GetCoeff(); at->SetCoeff(1.0); bt->SetCoeff(1.0); // now try simplification i = 0; bool isnumeratorempty = false; bool isdenominatorempty = false; int szi = at->GetSize(); int szj = bt->GetSize(); while(!isnumeratorempty && !isdenominatorempty && i < szi) { j = 0; while(!isnumeratorempty && !isdenominatorempty && j < szj) { if (at->GetNode(i)->IsEqualTo(bt->GetNode(j))) { // found like terms i and j at->DeleteNode(i); szi--; if(szi == 0) { isnumeratorempty = true; at->One(); } bt->DeleteNode(j); szj--; if (szj == 0) { isdenominatorempty = true; bt->One(); } i--; // cancel the effect of the later i++ break; // go to outer cycle } else { j++; } } i++; } if (bt->HasValue(1)) { // denominator is 1, return a at->SetCoeff(accumulatedcoeff); return at; } // now construct fraction // check that numerator, denominator have more than one operands; // if not, bring up a rank level if (at->GetSize() == 1) { at = at->GetNode(0); } if (bt->GetSize() == 1) { bt = bt->GetNode(0); } ret->SetCoeff(accumulatedcoeff); // already contains coeffs of a, t ret->SetExponent(1.0); ret->SetOpType(FRACTION); ret->AddCopyOfNode(at); ret->AddCopyOfNode(bt); return ret; } else { Expression at; Expression bt; at.SetToCopyOf(a); bt.SetToCopyOf(t); ret->SetCoeff(at->GetCoeff() / bt->GetCoeff()); at->SetCoeff(1.0); bt->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(FRACTION); ret->AddCopyOfNode(at); ret->AddCopyOfNode(bt); return ret; } } // unary minus: Expression operator - (Expression a) { Expression ret; ret.SetToCopyOf(a); if (ret->IsLeaf() && ret->GetOpType() == CONST) { ret->SetValue(- ret->GetValue()); ret->SetCoeff(1.0); ret->SetExponent(1.0); } else { ret->SetCoeff(- ret->GetCoeff()); } return ret; } // binary minus: Expression operator - (Expression a, Expression b) { Expression ret; if (a->HasValue(0)) return -b; if (b->HasValue(0)) { ret.SetToCopyOf(a); return a; } ret = a + (-b); return ret; } // power: Expression operator ^ (Expression a, Expression t) { // make a preliminary check Expression ret; if (a->GetCoeff() == 0) { // *this is zero, just return zero Expression zero(0.0); return zero; } if (t->HasValue(0.0)) { // exponent is 0, just return 1 Expression one(1.0); return one; } else if (t->HasValue(1.0)) { // exponent is 1, just return a ret.SetToCopyOf(a); return ret; } if (a->HasValue(0.0)) { // base is zero, return 0 Expression zero(0.0); return zero; } else if (a->HasValue(1.0)) { // base is one, return 1 Expression one(1.0); return one; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // constant to constant ret.SetToCopyOf(a); ret->SetValue(pow(ret->GetValue(), t->GetValue())); ret->SetCoeff(1.0); ret->SetExponent(1.0); return ret; } else if (a->IsLeaf() && a->GetOpType() == VAR && t->IsLeaf() && t->GetOpType() == CONST) { // variable to constant ret.SetToCopyOf(a); ret->SetCoeff(pow(ret->GetCoeff(), t->GetValue())); ret->SetExponent(ret->GetExponent() * t->GetValue()); return ret; } else { ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(POWER); ret->AddCopyOfNode(a); ret->AddCopyOfNode(t); return ret; } } Expression Sin(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(sin(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SIN); ret->AddCopyOfNode(a); return ret; } } Expression Cos(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(cos(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COS); ret->AddCopyOfNode(a); return ret; } } Expression Tan(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(tan(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(TAN); ret->AddCopyOfNode(a); return ret; } } Expression Asin(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(asin(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ASIN); ret->AddCopyOfNode(a); return ret; } } Expression Acos(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(acos(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ACOS); ret->AddCopyOfNode(a); return ret; } } Expression Atan(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(atan(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ATAN); ret->AddCopyOfNode(a); return ret; } } Expression Sinh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(sinh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SINH); ret->AddCopyOfNode(a); return ret; } } Expression Cosh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(cosh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COSH); ret->AddCopyOfNode(a); return ret; } } Expression Tanh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(tanh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(TANH); ret->AddCopyOfNode(a); return ret; } } Expression Asinh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(asinh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ASINH); ret->AddCopyOfNode(a); return ret; } } Expression Acosh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(acosh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ACOSH); ret->AddCopyOfNode(a); return ret; } } Expression Atanh(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(atanh(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ATANH); ret->AddCopyOfNode(a); return ret; } } Expression Log2(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log2"); std::string myop("IsZero()"); std::string mydesc("log2(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } if (a->IsLessThan(0)) { // argument is < zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log2"); std::string myop("value <= 0"); std::string mydesc("log2(<=0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = ret->GetValue(); assert(t >= 0); ret->SetCoeff(1.0); ret->SetValue(log2(t)); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG2); ret->AddCopyOfNode(a); return ret; } } Expression Log10(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log10"); std::string myop("IsZero()"); std::string mydesc("log10(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } if (a->IsLessThan(0)) { // argument is < zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log10"); std::string myop("value <= 0"); std::string mydesc("log10(<=0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = ret->GetValue(); assert(t >= 0); ret->SetCoeff(1.0); ret->SetValue(log10(t)); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG10); ret->AddCopyOfNode(a); return ret; } } Expression Log(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log"); std::string myop("IsZero()"); std::string mydesc("log(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } if (a->IsLessThan(0)) { // argument is < zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Log"); std::string myop("value <= 0"); std::string mydesc("log(<=0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = ret->GetValue(); assert(t >= 0); ret->SetCoeff(1.0); ret->SetValue(log(t)); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG); ret->AddCopyOfNode(a); return ret; } } Expression Ln(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Ln"); std::string myop("IsZero()"); std::string mydesc("ln(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } if (a->IsLessThan(0)) { // argument is < zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Ln"); std::string myop("value <= 0"); std::string mydesc("ln(<=0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = ret->GetValue(); assert(t >= 0); ret->SetCoeff(1.0); ret->SetValue(log(t)); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LN); ret->AddCopyOfNode(a); return ret; } } Expression Lngamma(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(lgamma(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LNGAMMA); ret->AddCopyOfNode(a); return ret; } } Expression Gamma(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(exp(lgamma(a->GetValue()))); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(GAMMA); ret->AddCopyOfNode(a); return ret; } } Expression Exp(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(exp(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(EXP); ret->AddCopyOfNode(a); return ret; } } Expression Erf(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(erf(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ERF); ret->AddCopyOfNode(a); return ret; } } Expression Erfc(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(erfc(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ERFC); ret->AddCopyOfNode(a); return ret; } } Expression Sqrt(Expression a) { // make a preliminary check if (a->IsLessThan(0) && !a->HasValue(0)) { // argument is < zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Sqrt"); std::string myop("value < 0"); std::string mydesc("sqrt(<0) is complex, can't do"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = a->GetValue(); assert(t >= 0); ret->SetCoeff(1.0); ret->SetValue(sqrt(t)); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SQRT); ret->AddCopyOfNode(a); return ret; } } Expression Cbrt(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(cbrt(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(CBRT); ret->AddCopyOfNode(a); return ret; } } Expression BesselJ0(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(j0(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELJ0); ret->AddCopyOfNode(a); return ret; } } Expression BesselJ1(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(j1(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELJ1); ret->AddCopyOfNode(a); return ret; } } Expression BesselY0(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(y0(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELY0); ret->AddCopyOfNode(a); return ret; } } Expression BesselY1(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(y1(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELY1); ret->AddCopyOfNode(a); return ret; } } Expression Sign(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); double val = a->GetValue(); ret->SetValue((val < 0.0) ? -1.0 : (val > 0.0) ? 1.0 : 0.0); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SIGN); ret->AddCopyOfNode(a); return ret; } } Expression Rint(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(floor(0.5 + a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(RINT); ret->AddCopyOfNode(a); return ret; } } Expression Abs(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); ret->SetCoeff(1.0); ret->SetValue(std::abs(a->GetValue())); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ABS); ret->AddCopyOfNode(a); return ret; } } Expression Cot(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Cot"); std::string myop("IsZero()"); std::string mydesc("cot(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = tan(a->GetValue()); assert(t != 0); ret->SetCoeff(1.0); ret->SetValue(1 / t); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COT); ret->AddCopyOfNode(a); return ret; } } Expression Coth(Expression a) { // make a preliminary check if (a->IsZero()) { // *this is zero, can't do unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("Coth"); std::string myop("IsZero()"); std::string mydesc("coth(0) is undefined"); std::string myinfo(HELPURL); throw ErrNotPermitted(mycode, myif, myscope, myop, mydesc, myinfo); } // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { Expression ret; ret.SetToCopyOf(a); double t = tanh(a->GetValue()); assert(t != 0); ret->SetCoeff(1.0); ret->SetValue(1 / t); ret->SetExponent(1.0); ret->SetOpType(CONST); return ret; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COTH); ret->AddCopyOfNode(a); return ret; } } /***************** expression creation (affects arguments) ***********/ // sums: Expression SumLink(Expression a, Expression b) { // make a preliminary check if (a->GetCoeff() == 0 || a->HasValue(0)) return b; if (b->GetCoeff() == 0 || b->HasValue(0)) return a; if (!(a->IsConstant() && b->IsConstant()) && a->IsEqualToNoCoeff(b)) { a->SetCoeff(a->GetCoeff() + b->GetCoeff()); if (std::abs(a->GetCoeff()) < Ev3NearZero()) { // simplify to zero - for differences Expression zero(0.0); return zero; } else return a; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && b->IsLeaf() && b->GetOpType() == CONST) { // a, b are numbers - add them a->SetValue(a->GetValue() + b->GetValue()); a->SetCoeff(1.0); a->SetExponent(1.0); return a; } else if (a->IsLeaf() && a->GetOpType() == VAR && b->IsLeaf() && b->GetOpType() == VAR && a->GetVarIndex() == b->GetVarIndex() && a->GetExponent() == b->GetExponent()) { // a, b are the same variable - add coefficients a->SetCoeff(a->GetCoeff() + b->GetCoeff()); return a; } else if (a->GetOpType() == SUM && b->GetOpType() != SUM) { // a is a sum and b isn't - just add the term b a->DistributeCoeffOverSum(); Int i = 0; bool couldsimplify = false; Expression tmp; // if t is a leaf and there is a like leaf in this, // just add it to the value/coefficient if (b->IsLeaf() && b->GetOpType() == CONST) { // b is a constant for (i = 0; i < a->GetSize(); i++) { tmp = a->GetNode(i); if (tmp->IsLeaf() && tmp->GetOpType() == CONST) { tmp->SetValue(tmp->GetValue() + b->GetValue() / a->GetCoeff()); tmp->SetCoeff(1.0); tmp->SetExponent(1.0); // NB: changing tmp should also change a couldsimplify = true; break; } } } else if (b->IsLeaf() && b->GetOpType() == VAR) { // b is a variable for (i = 0; i < a->GetSize(); i++) { if (a->GetNode(i)->IsLeaf() && a->GetNode(i)->GetOpType() == VAR && b->GetVarIndex() == a->GetNode(i)->GetVarIndex() && b->GetExponent() == a->GetNode(i)->GetExponent()) { double tc = a->GetNode(i)->GetCoeff() + b->GetCoeff() / a->GetCoeff(); // warning: tc could be zero, but it would be cumbersome // to simplify it here - do it in SimplifyConstant a->GetNode(i)->SetCoeff(tc); couldsimplify = true; break; } } } else if (!b->IsLeaf()) { // a is a sum, b is a nonleaf, look for a subnode of a similar to b for (i = 0; i < a->GetSize(); i++) { if (a->GetNode(i)->IsEqualTo(b)) { // found one, add coefficients - notice, as above, coeff could // be zero, but deal with that case in SimplifyConstant a->GetNode(i)->SetCoeff(a->GetNode(i)->GetCoeff() + b->GetCoeff()); couldsimplify = true; break; } } } if (!couldsimplify) { // either could not simplify in steps above, or b is an operator a->AddNode(b); } return a; } else if (a->GetOpType() == SUM && b->GetOpType() == SUM) { // a, b are sums - add terms of b to a b->DistributeCoeffOverSum(); Int i = 0; Int s = b->GetSize(); for (i = 0; i < s; i++) { a = SumLink(a, b->GetNode(i)); } return a; } else if (a->GetOpType() != SUM && b->GetOpType() == SUM) { // a is not a sum but b is - transform this into a sum b = SumLink(b, a); return b; } else { // all other cases - make new node on top of the addends Expression ret; ret->SetOpType(SUM); ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->AddNode(a); ret->AddNode(b); return ret; } } // product Expression ProductLink(Expression a, Expression t) { // make a preliminary check if (a->GetCoeff() == 0 || t->GetCoeff() == 0 || a->HasValue(0) || t->HasValue(0)) { Expression zero(0.0); return zero; } if (a->HasValue(1)) return t; if (t->HasValue(1)) return a; if (!(a->IsConstant() && t->IsConstant()) && a->IsEqualToNoCoeff(t)) { Expression two(2.0); double c = a->GetCoeff(); a->SetCoeff(1.); Expression power2(a ^ two); power2->SetCoeff(c * t->GetCoeff()); return power2; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // a, t are numbers - multiply them a->SetValue(a->GetValue() * t->GetValue()); a->SetCoeff(1.0); a->SetExponent(1.0); return a; } else if (a->IsLeaf() && a->GetOpType() == VAR && t->IsLeaf() && t->GetOpType() == VAR && a->GetVarIndex() == t->GetVarIndex()) { // a, t are the same variable - multiply coefficients // and add exponents a->SetCoeff(a->GetCoeff() * t->GetCoeff()); a->SetExponent(a->GetExponent() + t->GetExponent()); return a; } else if (t->IsConstant()) { // t is constant, set coeff of a a->SetCoeff(a->GetCoeff() * t->GetValue()); a->DistributeCoeffOverSum(); return a; } else if (a->IsConstant()) { // a is constant, set coeff of t t->SetCoeff(t->GetCoeff() * a->GetValue()); t->DistributeCoeffOverSum(); return t; } else if (a->GetOpType() == PRODUCT && t->GetOpType() != PRODUCT) { // a is a product and t isn't - just multiply the term t Int i = 0; bool couldsimplify = false; if (t->IsLeaf() && t->GetOpType() == VAR) { // t is a variable Expression tmp; for (i = 0; i < a->GetSize(); i++) { tmp = a->GetNode(i); if (tmp->IsLeaf() && tmp->GetOpType() == VAR && t->GetVarIndex() == tmp->GetVarIndex()) { // found same variable in a, multiply coeffs and add exponents tmp->SetCoeff(tmp->GetCoeff() * t->GetCoeff()); tmp->SetExponent(tmp->GetExponent() + t->GetExponent()); couldsimplify = true; break; } } } // here we shan't try to simplify f*f <-- f^2 (f nonleaf) // because a product of nonleaves is easier to manipulate than // a power (as it adds a depth level) if (!couldsimplify) { // either could not simplify in steps above, or t is an operator a->AddNode(t); } return a; } else if (a->GetOpType() == PRODUCT && t->GetOpType() == PRODUCT) { // a, t are products - multiply terms of t to a t->DistributeCoeffOverProduct(); Int i = 0; Int s = t->GetSize(); for (i = 0; i < s; i++) { a = ProductLink(a, t->GetNode(i)); } return a; } else if (a->GetOpType() != PRODUCT && t->GetOpType() == PRODUCT) { // a is not a products but t is - transform this into a product t = ProductLink(t, a); return t; } else { // all other cases - make new node on top of the addends Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(PRODUCT); ret->AddNode(a); ret->AddNode(t); return ret; } } // fractions: Expression FractionLink(Expression a, Expression t) { // make a preliminary check if (t->GetCoeff() == 0) { // divide by zero unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("FractionLink"); std::string myop("t.GetCoeff()==0"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } if (a->GetCoeff() == 0 || a->HasValue(0)) { // dividend has zero coeff, return zero Expression zero(0.0); return zero; } if (t->HasValue(1)) return a; if (!(a->IsConstant() && t->IsConstant()) && a->IsEqualToNoCoeff(t)) { // dividend = divisor, return ratio of coefficients Expression one(1.0); one->SetCoeff(a->GetCoeff() / t->GetCoeff()); return one; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // a, t are numbers - divide them if (t->GetValue() == 0) { unsigned long mycode(0); std::string myif("Expression Building"); std::string myscope("FractionLink"); std::string myop("t.GetValue()==0"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } else { a->SetValue(a->GetValue() / t->GetValue()); a->SetCoeff(1.0); a->SetExponent(1.0); return a; } } else if (t->HasValue(1)) { // divide by constant 1, don't do anything return a; } else if (t->IsConstant()) { // t is constant, set coeff of a a->SetCoeff(a->GetCoeff() / t->GetValue()); a->DistributeCoeffOverSum(); return a; } else if (a->IsVariable() && t->IsVariable() && a->GetVarIndex() == t->GetVarIndex()) { // cx^e / dx^f = (c/d)x^(e-f) double te = a->GetExponent() - t->GetExponent(); double tc = a->GetCoeff() / t->GetCoeff(); if (std::abs(te) < Ev3NearZero()) { Expression c(tc); return c; } a->SetCoeff(tc); a->SetExponent(te); return a; } else if (a->IsVariable() && t->GetOpType() == PRODUCT) { // a is a variable, t is a product - see if a appears in t // and cancel common term // first simplify coeffs of divisor t->ConsolidateProductCoeffs(); // denominator if (std::abs(t->GetCoeff()) < Ev3NearZero()) { // divide by zero unsigned long mycode(22); std::string myif("Expression Building"); std::string myscope("FractionLink"); std::string myop("t->GetCoeff()"); std::string mydesc("Divisor cannot be zero"); std::string myinfo(HELPURL); std::string mydiv(NONE); throw ErrDivideByZero(mycode, myif, myscope, myop, mydesc, myinfo, mydiv); } if (std::abs(a->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } double accumulatedcoeff = a->GetCoeff() / t->GetCoeff(); a->SetCoeff(1.0); t->SetCoeff(1.0); // now try simplification Int i; for (i = 0; i < t->GetSize(); i++) { if (t->GetNode(i)->GetOpType() == VAR && a->GetVarIndex() == t->GetNode(i)->GetVarIndex()) { double te = a->GetExponent() - t->GetNode(i)->GetExponent(); if (std::abs(te) < Ev3NearZero()) { // exponents are the same, just cancel a->One(); t->DeleteNode(i); } else if (te > 0) { // numerator remains, cancel denominator a->SetExponent(te); t->DeleteNode(i); } else if (te < 0) { // numerator goes to one, denominator remains a->One(); t->GetNode(i)->SetExponent(-te); } // exit loop break; } } // check that denominator (t) has more than one operands; // if not, bring up a rank level if (t->GetSize() == 1) { t = t->GetNode(0); } // build ratio Expression ret; ret->SetOpType(FRACTION); ret->SetCoeff(accumulatedcoeff); ret->SetExponent(1.0); ret->AddNode(a); ret->AddNode(t); return ret; } else if (t->IsVariable() && a->GetOpType() == PRODUCT) { // t is a variable, a is a product - see if t appears in a // and cancel common term // first simplify coeffs of divisor a->ConsolidateProductCoeffs(); // denominator - already checked if (std::abs(a->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } double accumulatedcoeff = a->GetCoeff() / t->GetCoeff(); a->SetCoeff(1.0); t->SetCoeff(1.0); // now try simplification Int i; for (i = 0; i < a->GetSize(); i++) { if (a->GetNode(i)->GetOpType() == VAR && t->GetVarIndex() == a->GetNode(i)->GetVarIndex()) { double te = a->GetNode(i)->GetExponent() - t->GetExponent(); if (std::abs(te) < Ev3NearZero()) { // exponents are the same, just cancel t->One(); a->DeleteNode(i); } else if (te > 0) { // numerator remains, cancel denominator t->One(); a->GetNode(i)->SetExponent(te); } else if (te < 0) { // numerator goes to one, denominator remains t->SetExponent(-te); a->DeleteNode(i); } // exit loop break; } } // check that numerator (a) has more than one operands; // if not, bring up a rank level if (a->GetSize() == 1) { a = a->GetNode(0); } // build ratio Expression ret; ret->SetOpType(FRACTION); ret->SetCoeff(accumulatedcoeff); ret->SetExponent(1.0); ret->AddNode(a); ret->AddNode(t); return ret; } else if (a->GetOpType() == PRODUCT && t->GetOpType() == PRODUCT) { // a, t are products, try to cancel common terms Int i = 0, j = 0; double accumulatedcoeff; // first simplify coefficients of operands a->ConsolidateProductCoeffs(); t->ConsolidateProductCoeffs(); // denominator if (std::abs(t->GetCoeff()) < Ev3NearZero()) throw ErrDivideByZero(21, "Expression Building", "FractionLink", "t->GetCoeff()", "Divisor cannot be zero", HELPURL, NONE); if (std::abs(a->GetCoeff()) < Ev3NearZero()) { Expression zero(0.0); return zero; } // save ratio of coeffs of products accumulatedcoeff = a->GetCoeff() / t->GetCoeff(); a->SetCoeff(1.0); t->SetCoeff(1.0); // now try simplification i = 0; bool isnumeratorempty = false; bool isdenominatorempty = false; int szi = a->GetSize(); int szj = t->GetSize(); while(!isnumeratorempty && !isdenominatorempty && i < szi) { j = 0; while(!isnumeratorempty && !isdenominatorempty && j < szj) { if (a->GetNode(i)->IsEqualTo(t->GetNode(j))) { // found like terms i and j a->DeleteNode(i); szi--; if(szi == 0) { isnumeratorempty = true; a->One(); } t->DeleteNode(j); szj--; if (szj == 0) { isdenominatorempty = true; t->One(); } i--; // cancel the effect of the later i++ break; // go to outer cycle } else { j++; } } i++; } if (t->HasValue(1)) { // denominator is 1, return a a->SetCoeff(accumulatedcoeff); return a; } // now construct fraction // check that numerator, denominator have more than one operands; // if not, bring up a rank level if (a->GetSize() == 1) { a = a->GetNode(0); } if (t->GetSize() == 1) { t = t->GetNode(0); } Expression ret; ret->SetCoeff(accumulatedcoeff); // already contains coeffs of a, t ret->SetExponent(1.0); ret->SetOpType(FRACTION); ret->AddNode(a); ret->AddNode(t); return ret; } else { Expression ret; ret->SetCoeff(a->GetCoeff() / t->GetCoeff()); a->SetCoeff(1.0); t->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(FRACTION); ret->AddNode(a); ret->AddNode(t); return ret; } } // unary minus: Expression MinusLink(Expression a) { if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(- a->GetValue()); a->SetCoeff(1.0); a->SetExponent(1.0); } else { a->SetCoeff(- a->GetCoeff()); } return a; } // binary minus: Expression DifferenceLink(Expression a, Expression b) { if (a->HasValue(0)) return MinusLink(b); if (b->HasValue(0)) return a; return SumLink(a, MinusLink(b)); } // power: Expression PowerLink(Expression a, Expression t) { // make a preliminary check if (a->GetCoeff() == 0) { // *this is zero, just return zero Expression zero(0.0); return zero; } if (t->HasValue(0.0)) { // exponent is 0, just return 1 Expression one(1.0); return one; } else if (t->HasValue(1.0)) { // exponent is 1, just return a return a; } if (a->HasValue(0.0)) { // base is zero, return 0 Expression zero(0.0); return zero; } else if (a->HasValue(1.0)) { // base is one, return 1 Expression one(1.0); return one; } // go for it if (a->IsLeaf() && a->GetOpType() == CONST && t->IsLeaf() && t->GetOpType() == CONST) { // constant to constant a->SetValue(pow(a->GetValue(), t->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); return a; } else if ((std::abs(a->GetCoeff()) == 1.0) && a->IsLeaf() && (a->GetOpType() == VAR) && t->IsLeaf() && (t->GetOpType() == CONST)) { // variable to constant a->SetExponent(a->GetExponent() * t->GetValue()); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(POWER); ret->AddNode(a); ret->AddNode(t); return ret; } } Expression SinLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(sin(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SIN); ret->AddNode(a); return ret; } } Expression CosLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(cos(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COS); ret->AddNode(a); return ret; } } Expression TanLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(tan(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(TAN); ret->AddNode(a); return ret; } } Expression AsinLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(asin(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ASIN); ret->AddNode(a); return ret; } } Expression AcosLink(Expression a) { if (a->IsLessThan(-1.0) || a->IsGreaterThan(1.0)) throw ErrNotPermitted(0, "Expression Building", "AcosLink", "value <-1|>1", "acos(<-1|>1) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(acos(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ACOS); ret->AddNode(a); return ret; } } Expression AtanLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(atan(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ATAN); ret->AddNode(a); return ret; } } Expression SinhLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(sinh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SINH); ret->AddNode(a); return ret; } } Expression CoshLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(cosh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COSH); ret->AddNode(a); return ret; } } Expression TanhLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(tanh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(TANH); ret->AddNode(a); return ret; } } Expression AsinhLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(asinh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ASINH); ret->AddNode(a); return ret; } } Expression AcoshLink(Expression a) { if (a->IsLessThan(1.0)) throw ErrNotPermitted(0, "Expression Building", "AcoshLink", "value < 1", "acosh(<1) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(acosh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ACOSH); ret->AddNode(a); return ret; } } Expression AtanhLink(Expression a) { if (a->IsLessThan(-1.0) || a->IsGreaterThan(1.0)) throw ErrNotPermitted(0, "Expression Building", "AtanhLink", "value <-1|>1", "atanh(<-1|>1) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(atanh(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ATANH); ret->AddNode(a); return ret; } } Expression Log2Link(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "Log2Link", "IsZero()", "log2(0) is undefined", HELPURL); if (a->IsLessThan(0)) throw ErrNotPermitted(0, "Expression Building", "Log2Link", "value <= 0", "log2(<=0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = a->GetValue(); assert(t >= 0); a->SetCoeff(1.0); a->SetValue(log2(t)); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG2); ret->AddNode(a); return ret; } } Expression Log10Link(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "Log10Link", "IsZero()", "log10(0) is undefined", HELPURL); if (a->IsLessThan(0)) throw ErrNotPermitted(0, "Expression Building", "Log10Link", "value <= 0", "log10(<=0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = a->GetValue(); assert(t >= 0); a->SetCoeff(1.0); a->SetValue(log10(t)); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG10); ret->AddNode(a); return ret; } } Expression LogLink(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "LogLink", "IsZero()", "log(0) is undefined", HELPURL); if (a->IsLessThan(0)) throw ErrNotPermitted(0, "Expression Building", "LogLink", "value <= 0", "log(<=0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = a->GetValue(); assert(t >= 0); a->SetCoeff(1.0); a->SetValue(log(t)); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LOG); ret->AddNode(a); return ret; } } Expression LnLink(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "LnLink", "IsZero()", "ln(0) is undefined", HELPURL); if (a->IsLessThan(0)) throw ErrNotPermitted(0, "Expression Building", "LnLink", "value <= 0", "ln(<=0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = a->GetValue(); assert(t >= 0); a->SetCoeff(1.0); a->SetValue(log(t)); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LN); ret->AddNode(a); return ret; } } Expression LngammaLink(Expression a) { if (a->IsLessThan(0.0)) throw ErrNotPermitted(0, "Expression Building", "LngammaLink", "value < 0", "lngamma(<0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(lgamma(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(LNGAMMA); ret->AddNode(a); return ret; } } Expression GammaLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(exp(lgamma(a->GetValue()))); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(GAMMA); ret->AddNode(a); return ret; } } Expression ExpLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(exp(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(EXP); ret->AddNode(a); return ret; } } Expression ErfLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(erf(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ERF); ret->AddNode(a); return ret; } } Expression ErfcLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(erfc(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ERFC); ret->AddNode(a); return ret; } } Expression SqrtLink(Expression a) { // make a preliminary check if (a->IsLessThan(0) && !a->HasValue(0)) throw ErrNotPermitted(0, "Expression Building", "SqrtLink", "value < 0", "sqrt(<0) is complex, can't do", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = a->GetValue(); assert(t >= 0.); a->SetCoeff(1.0); a->SetValue(sqrt(t)); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SQRT); ret->AddNode(a); return ret; } } Expression CbrtLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(cbrt(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(CBRT); ret->AddNode(a); return ret; } } Expression BesselJ0Link(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(j0(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELJ0); ret->AddNode(a); return ret; } } Expression BesselJ1Link(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(j1(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELJ1); ret->AddNode(a); return ret; } } Expression BesselY0Link(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(y0(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELY0); ret->AddNode(a); return ret; } } Expression BesselY1Link(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(y1(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(BESSELY1); ret->AddNode(a); return ret; } } Expression SignLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double tmp(a->GetValue()); a->SetValue((tmp < 0) ? -1.0 : (tmp > 0) ? 1.0 : 0.0); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(SIGN); ret->AddNode(a); return ret; } } Expression RintLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(floor(0.5 + a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(RINT); ret->AddNode(a); return ret; } } Expression AbsLink(Expression a) { // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { a->SetValue(std::abs(a->GetValue())); a->SetCoeff(1.0); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(ABS); ret->AddNode(a); return ret; } } Expression CotLink(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "CotLink", "IsZero()", "cot(0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = tan(a->GetValue()); assert(t != 0); a->SetCoeff(1.0); a->SetValue(1 / t); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COT); ret->AddNode(a); return ret; } } Expression CothLink(Expression a) { // make a preliminary check if (a->IsZero()) throw ErrNotPermitted(0, "Expression Building", "CothLink", "IsZero()", "coth(0) is undefined", HELPURL); // go for it if (a->IsLeaf() && a->GetOpType() == CONST) { double t = tanh(a->GetValue()); assert(t != 0); a->SetCoeff(1.0); a->SetValue(1 / t); a->SetExponent(1.0); a->SetOpType(CONST); return a; } else { Expression ret; ret->SetCoeff(1.0); ret->SetExponent(1.0); ret->SetOpType(COTH); ret->AddNode(a); return ret; } } /***************** differentiation ******************/ // differentiate w.r.t. variable varindex Expression Diff(const Expression& ac, Int vi) { Expression ret(DiffNoSimplify(ac, vi)); Simplify(&ret); return ret; } Expression DiffNoSimplify(const Expression& ac, Int vi) { Expression a; a.SetToCopyOf(ac); Expression zero(0.0); Expression c(1.0); if (a->DependsOnVariable(vi)) { if (a->IsLeaf()) { if (a->GetOpType() == CONST || a->GetVarIndex() != vi) { // safety check std::cerr << "Expression::Diff: warning: this node should " << "not diff to zero\n"; return zero; } else { // variable vi, check exponent if (a->GetExponent() == 0) { // exponent is zero, node is actually constant return zero; } else if (a->GetExponent() == 1) { // exponent is one, node is variable c->SetValue(a->GetCoeff()); return c; } else { // for all other cases, apply rule x^c = c*x^(c-1) double expon = a->GetExponent(); Expression ret(a.Copy()); ret->SetExponent(expon - 1); ret->SetCoeff(ret->GetCoeff() * expon); return ret; } } } else { // non-leaf node. build derivative. int op = a->GetOpType(); Int sz = a->GetSize(); double opcoeff = a->GetCoeff(); if (sz == 0) { throw ErrNotPermitted(10, "Expression", "Diff", "GetSize() == 0", "non-leaf node can't have size 0", HELPURL); } Int i, j; Expression ret(0.0); Expression tmp(1.0); Expression tmp2(1.0); Expression two(2.0); switch(op) { case SUM: ret = Diff(a->GetNode(0), vi); // f_0' for(i = 1; i < sz; i++) { tmp = Diff(a->GetNode(i), vi); if (!tmp->IsZero()) { ret = ret + tmp; // ... + g_i' } } break; case DIFFERENCE: ret = Diff(a->GetNode(0), vi); // f_0' for(i = 1; i < sz; i++) { tmp = Diff(a->GetNode(i), vi); if (!tmp->IsZero()) { ret = ret - tmp; // ... - g_i' } } break; case PRODUCT: if (sz == 1) { // warn about product with one operand std::cerr << "Expression::Diff: warning: product with 1 operand " << "should not occur\n"; } ret = Diff(a->GetNode(0), vi); // f_0' if (!ret->IsZero()) { for(j = 1; j < sz; j++) { // get copies, not references ret = ret * a->GetCopyOfNode(j); // ... * f_i[i!=0] } } tmp->One(); // reset temporary to 1.0 for(i = 1; i < sz; i++) { tmp = Diff(a->GetNode(i), vi); // tmp = f_i' if (!tmp->IsZero()) { for(j = 0; j < sz; j++) { if (j != i) { // get references, and copy later (in sum) tmp = tmp * a->GetNode(j); // ... * f_j[i!=i] } } ret = ret + tmp.Copy(); // ... + tmp tmp->One(); // reset temporary to 1.0 } } break; case FRACTION: if (sz != 2) { // check that there are exactly two operands throw ErrNotPermitted(11, "Expression", "Diff", "GetSize() != 2", "fraction must have exactly 2 operands", HELPURL); } if (a->GetNode(1)->IsZero()) { // check denominator is not zero throw ErrDivideByZero(20, "Expression", "Diff", "GetNode(1)->IsZero()", "cannot divide by zero", HELPURL, a->GetNode(1)->ToString()); } tmp->One(); ret = Diff(a->GetNode(0), vi); // f' if (!ret->IsZero()) { ret = ret / a->GetCopyOfNode(1); // f'/g } // can dispense from using GetCopyOf because tmp gets copied anyway tmp = a->GetNode(0); // tmp = f tmp2 = Diff(a->GetNode(1), vi); if (!tmp2->IsZero()) { tmp = tmp * tmp2; // tmp = fg' ret = ret - tmp.Copy() / (a->GetCopyOfNode(1) ^ two); // f'/g - fg'/g^2 } // can dispense from using copy here - tmp is not used thereafter // and when tmp is deleted, its subnodes are not automatically // deleted unless reference counter is zero - which won't be. break; case POWER: if (sz != 2) { // check that there are exactly two operands throw ErrNotPermitted(12, "Expression", "Diff", "GetSize() != 2", "power must have exactly 2 operands", HELPURL); } // check exponent if (a->GetNode(1)->IsZero()) { // exponent is zero, whole node is one, diff is zero ret->Zero(); } else if (a->GetNode(1)->HasValue(1.0)) { // exponent is one, whole node is first operand, diff // is diff of first operand ret = Diff(a->GetNode(0), vi); } else if (a->GetNode(1)->HasValue(2.0)) { // exponent is two, diff is 2 * first op * diff of first operand ret = Diff(a->GetNode(0), vi); // f' ret = ret * a->GetCopyOfNode(0); // f'f ret->SetCoeff(ret->GetCoeff() * 2.0); // 2f'f } else { // all other cases if (a->GetNode(1)->IsConstant()) { // numeric exponent != 0,1,2 ret = Diff(a->GetNode(0), vi); // f' tmp = a->GetCopyOfNode(0); // f tmp = tmp ^ a->GetCopyOfNode(1); // f^c tmp->GetNode(1)->ConsolidateValue(); tmp->SetCoeff(tmp->GetCoeff() * tmp->GetNode(1)->GetValue());//cf^c tmp->GetNode(1)->SetValue(tmp->GetNode(1)->GetValue() - 1); //cf^(c-1) // can dispense from using copy here - Diff returns copies anyway. // when temporary is deleted, its subnodes are not automatically // deleted unless their reference counter is zero - which won't be. ret = ret * tmp; // f'(cf^(c-1)) } else { // symbolic exponent f^g ret = a->GetCopyOfNode(0); // f ret = Log(ret); // log(f) // can dispense from using copy here - Diff returns copies anyway. // when temporary is deleted, its subnodes are not automatically // deleted unless their reference counter is zero - which won't be. ret = ret * Diff(a->GetNode(1), vi); // g' log(f) tmp = Diff(a->GetNode(0), vi); // f' tmp = tmp * a->GetCopyOfNode(1); // gf' tmp = tmp / a->GetCopyOfNode(0); // gf'/f // can dispense from using copy here - tmp is not used thereafter // and when tmp is deleted, its subnodes are not automatically // deleted unless their reference counter is zero - which won't be. ret = ret + tmp; // g'log(f) + gf'/f tmp = a.Copy(); tmp->SetCoeff(1.0); ret = ret * tmp; // (g'log(f) + gf'/f)(f^g) } } break; case MINUS: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(13, "Expression", "Diff", "GetSize() != 1", "unary minus must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi); ret->SetCoeff(- ret->GetCoeff()); break; case SIN: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(17, "Expression", "Diff", "GetSize() != 1", "sin must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi) * Cos(a->GetCopyOfNode(0)); // f' cos(f) break; case COS: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(18, "Expression", "Diff", "GetSize() != 1", "cos must have exactly 1 operand", HELPURL); } ret = -Diff(a->GetNode(0), vi) * Sin(a->GetCopyOfNode(0)); // -f'sin(f) break; case TAN: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(19, "Expression", "Diff", "GetSize() != 1", "tan must have exactly 1 operand", HELPURL); } ret = a.Copy(); // tan(f) ret->SetCoeff(1.0); ret = ret ^ two; // tan(f)^2 c->One(); ret = ret + c; // tan(f)^2 + 1 ret = ret * Diff(a->GetNode(0), vi); // f' * (tan(f)^2 + 1) break; case ASIN: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(17, "Expression", "Diff", "GetSize() != 1", "asin must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = c - ret; ret = Diff(a->GetNode(0), vi) / Sqrt(ret); // f' / sqrt(1 - f^2) break; case ACOS: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(18, "Expression", "Diff", "GetSize() != 1", "acos must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = c - ret; ret = -Diff(a->GetNode(0), vi) / Sqrt(ret); // -f' / sqrt(1 - f^2) break; case ATAN: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(19, "Expression", "Diff", "GetSize() != 1", "atan must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = ret + c; ret = Diff(a->GetNode(0), vi) / ret; // f' / (f^2 + 1) break; case SINH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(17, "Expression", "Diff", "GetSize() != 1", "sinh must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi) * Cosh(a->GetCopyOfNode(0)); // f' cosh(f) break; case COSH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(18, "Expression", "Diff", "GetSize() != 1", "cosh must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi) * Sinh(a->GetCopyOfNode(0)); // f'sinh(f) break; case TANH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(19, "Expression", "Diff", "GetSize() != 1", "tanh must have exactly 1 operand", HELPURL); } ret = a.Copy(); ret->SetCoeff(1.0); ret = ret ^ two; c->One(); ret = c - ret; ret = ret * Diff(a->GetNode(0), vi); // f' * (1 - tan(f)^2) break; case ASINH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(17, "Expression", "Diff", "GetSize() != 1", "asinh must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = c + ret; ret = Diff(a->GetNode(0), vi) / Sqrt(ret); // f' / sqrt(1 + f^2) break; case ACOSH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(18, "Expression", "Diff", "GetSize() != 1", "acosh must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = ret - c; ret = Diff(a->GetNode(0), vi) / Sqrt(ret); // f' / sqrt(f^2 - 1) break; case ATANH: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(19, "Expression", "Diff", "GetSize() != 1", "atanh must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = ret ^ two; c->One(); ret = c - ret; ret = Diff(a->GetNode(0), vi) / ret; // f' / (1 - tan(f)^2) break; case LOG2: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(14, "Expression", "Diff", "GetSize() != 1", "log2 must have exactly 1 operand", HELPURL); } if (a->GetNode(0)->IsLessThan(0)) { throw ErrNotPermitted(15, "Expression", "Diff", "arg <= 0", "log2 argument must be symbolic or positive", HELPURL); } ret = Diff(a->GetNode(0), vi); ret = ret / (Expression(M_LN2) * a->GetCopyOfNode(0)); // f'/(log(2)f) break; case LOG10: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(14, "Expression", "Diff", "GetSize() != 1", "log10 must have exactly 1 operand", HELPURL); } if (a->GetNode(0)->IsLessThan(0)) { throw ErrNotPermitted(15, "Expression", "Diff", "arg <= 0", "log10 argument must be symbolic or positive", HELPURL); } ret = Diff(a->GetNode(0), vi); ret = ret / (Expression(M_LN10) * a->GetCopyOfNode(0)); // f'/(log(10)f) break; case LOG: case LN: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(14, "Expression", "Diff", "GetSize() != 1", "log (ln) must have exactly 1 operand", HELPURL); } if (a->GetNode(0)->IsLessThan(0)) { throw ErrNotPermitted(15, "Expression", "Diff", "arg <= 0", "log (ln) argument must be symbolic or positive", HELPURL); } ret = Diff(a->GetNode(0), vi); ret = ret / a->GetCopyOfNode(0); // f'/f break; case EXP: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "exp must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi) * Exp(a->GetCopyOfNode(0)); // f'exp(f) break; case ERF: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "erf must have exactly 1 operand", HELPURL); } ret = Expression(M_2_SQRTPI) * Diff(a->GetCopyOfNode(0), vi) * Exp(-(a->GetCopyOfNode(0) ^ two)); // (2/sqrt(pi)) f'e^(-f^2) break; case ERFC: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "erfc must have exactly 1 operand", HELPURL); } ret = Expression(-M_2_SQRTPI) * Diff(a->GetCopyOfNode(0), vi) * Exp(-(a->GetCopyOfNode(0) ^ two)); // (2/sqrt(pi)) f'e^(-f^2) break; case SQRT: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(19, "Expression", "Diff", "GetSize() != 1", "sqrt must have exactly 1 operand", HELPURL); } if (a->GetNode(0)->IsLessThan(0)) { throw ErrNotPermitted(15, "Expression", "Diff", "arg < 0", "sqrt argument must be symbolic or positive", HELPURL); } ret = Expression(0.5) * Diff(a->GetNode(0), vi) / Sqrt(a->GetCopyOfNode(0)); // 1/2 * f' / sqrt(f) break; case CBRT: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "cbrt must have exactly 1 operand", HELPURL); } ret = Expression(1.0 / 3.0) * Diff(a->GetNode(0), vi) / (a->GetCopyOfNode(0) ^ Expression(2.0 / 3.0)); // (1/3) f' / f^(2/3) break; case BESSELJ0: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "besselJ0 must have exactly 1 operand", HELPURL); } ret = -Diff(a->GetNode(0), vi) * BesselJ1(a->GetCopyOfNode(0)); // -f'besselJ1(f) break; case BESSELJ1: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "besselJ1 must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = BesselJ0(ret) - BesselJ1(ret) / ret; ret = Diff(a->GetNode(0), vi) * ret; // f'(besselJ0(f) - besselJ1(f) / f) break; case BESSELY0: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "besselY0 must have exactly 1 operand", HELPURL); } ret = -Diff(a->GetNode(0), vi) * BesselY1(a->GetCopyOfNode(0)); // -f'besselY1(f) break; case BESSELY1: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "besselY1 must have exactly 1 operand", HELPURL); } ret = a->GetCopyOfNode(0); ret = BesselY0(ret) - BesselY1(ret) / ret; ret = Diff(a->GetNode(0), vi) * ret; // f'(besselY0(f) - besselY1(f) / f) break; case SIGN: case RINT: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "sign (rint) must have exactly 1 operand", HELPURL); } ret = zero; // 0 break; case ABS: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(16, "Expression", "Diff", "GetSize() != 1", "abs must have exactly 1 operand", HELPURL); } ret = Diff(a->GetNode(0), vi) * Sign(a->GetCopyOfNode(0)); // f'sign(f) break; default: if (sz != 1) { // check that there is exactly one operand throw ErrNotPermitted(14, "Expression", "Diff", "GetSize() != 1", "log must have exactly 1 operand", HELPURL); } throw ErrNotPermitted(16, "Expression", "Diff", "not implemented", "The derivative of the function is not implemented.", HELPURL); break; } ret->SetCoeff(ret->GetCoeff() * opcoeff); return ret; } } else { return zero; } return zero; } /************************ simplifications **********************/ bool TrigSimp(Expression a) { Int i = 0; Int ret = 0; bool bret = false; bool ischanged = false; // first, recurse over all subnodes of a for(i = 0; i < a->GetSize(); i++) { ischanged = TrigSimp(a->GetNode(i)); if (!bret && ischanged) { bret = true; } } // now try simplification on a if (a->GetOpType() == SUM && a->GetSize() > 1) { // try to look for a sin^2 and a cos^2 Int sinpos = -1; Int cospos = -1; Int sinpossimple = -1; Int cospossimple = -1; for (i = 0; i < a->GetSize(); i++) { // cycle over subnodes if (a->GetNode(i)->GetOpType() == POWER) { if (a->GetNode(i)->GetNode(0)->GetOpType() == SIN && a->GetNode(i)->GetNode(1)->HasValue(2)) sinpos = i; } if (a->GetNode(i)->GetOpType() == POWER) { if (a->GetNode(i)->GetNode(0)->GetOpType() == COS && a->GetNode(i)->GetNode(1)->HasValue(2)) cospos = i; } if (a->GetNode(i)->GetOpType() == SIN && a->GetNode(i)->GetExponent() == 2) { sinpossimple = i; } if (a->GetNode(i)->GetOpType() == COS && a->GetNode(i)->GetExponent() == 2) { cospossimple = i; } } if (sinpos != -1 && cospos != -1) { double coscoeff = a->GetNode(sinpos)->GetCoeff(); double sincoeff = a->GetNode(cospos)->GetCoeff(); // found both, check their arguments if ((coscoeff == sincoeff) && a->GetNode(sinpos)->GetNode(0)->GetNode(0)->IsEqualTo (a->GetNode(cospos)->GetNode(0)->GetNode(0))) { ret++; // augment simplification counter bret = true; // arguments are equal, can simplify Int f = sinpos < cospos ? sinpos : cospos; // last to delete Int l = sinpos > cospos ? sinpos : cospos; // first to delete a->DeleteNode(l); a->DeleteNode(f); // verify that there are still some nodes left if (a->GetSize() == 0) { // there aren't any, set a to one a->One(); a->SetCoeff(coscoeff); } else { // there are some, check whether there is a constant part // we can add the 1 to bool addflag = false; for (i = 0; i < a->GetSize(); i++) { if (a->GetNode(i)->IsConstant()) { // yes there is a->GetNode(i)->SetValue(a->GetNode(i)->GetSimpleValue() + 1); addflag = true; break; } } if (!addflag) { // no there wasn't, add it as a symbolic node Expression coeffexpr(coscoeff); a->AddNode(coeffexpr); } // check that there is more than just one node if (a->GetSize() == 1) { // only one node, shift everything one rank level up a = a->GetNode(0); } } } } if (sinpossimple != -1 && cospossimple != -1) { double coscoeff = a->GetNode(sinpossimple)->GetCoeff(); double sincoeff = a->GetNode(cospossimple)->GetCoeff(); if ((coscoeff == sincoeff) && a->GetNode(sinpossimple)->GetNode(0)->IsEqualTo (a->GetNode(cospossimple)->GetNode(0))) { ret++; bret = true; // arguments are equal, can simplify Int f = sinpossimple < cospossimple ? sinpossimple : cospossimple; Int l = sinpossimple > cospossimple ? sinpossimple : cospossimple; a->DeleteNode(l); a->DeleteNode(f); // verify that there are still some nodes left if (a->GetSize() == 0) { // there aren't any, set a to one a->One(); a->SetCoeff(coscoeff); } else { // there are some, check whether there is a constant part // we can add the 1 to bool addflag = false; for (i = 0; i < a->GetSize(); i++) { if (a->GetNode(i)->IsConstant()) { // yes there is a->GetNode(i)->SetValue(a->GetNode(i)->GetSimpleValue() + 1); addflag = true; break; } } if (!addflag) { // no there wasn't, add it as a symbolic node Expression coeffexpr(coscoeff); a->AddNode(coeffexpr); } // check that there is more than just one node if (a->GetSize() == 1) { // only one node, shift everything one rank level up a = a->GetNode(0); } } } } } if (ret > 0) bret = true; return bret; } // generic simplification with modification of the expression bool Simplify(Expression* a) { bool changedflag = false; bool ret = false; bool goonflag = true; while(goonflag) { goonflag = false; (*a)->ConsolidateProductCoeffs(); (*a)->DistributeCoeffOverSum(); ret = DifferenceToSum(a); if (ret) { changedflag = true; goonflag = true; } ret = SimplifyConstant(a); if (ret) { changedflag = true; goonflag = true; } ret = CompactProducts(a); if (ret) { changedflag = true; goonflag = true; } ret = CompactLinearPart(a); if (ret) { changedflag = true; goonflag = true; } ret = SimplifyRecursive(a); if (ret) { changedflag = true; goonflag = true; } ret = TrigSimp(*a); if (ret) { changedflag = true; goonflag = true; } } return changedflag; } // call after DifferenceToSum bool SimplifyConstant(Expression* a) { bool ret = false; Expression one(1.0); Expression zero(0.0); if ((*a)->GetExponent() == 0) { double c = (*a)->GetCoeff(); RecursiveDestroy(a); a->SetTo(one); (*a)->SetCoeff(c); ret = true; } else if ((*a)->GetCoeff() == 0) { RecursiveDestroy(a); a->SetTo(zero); ret = true; } else { int i = 0; int op, ops; op = (*a)->GetOpType(); bool ischanged = false; int sz = (*a)->GetSize(); while (i < sz) { // simplify each of the terms ischanged = SimplifyConstant((*a)->GetNodePtr(i)); if (!ret && ischanged) { ret = true; } i++; } i = 0; while (i < sz) { // simplify this operand as a whole ops = (*a)->GetNode(i)->GetOpType(); switch(op) { case SUM: if (ops == CONST) { if ((*a)->GetNode(i)->GetValue() == 0) { (*a)->DeleteNode(i); ret = true; sz--; if (sz == 1) { a->SetTo((*a)->GetNode(1 - i)); i = 0; sz = (*a)->GetSize(); } } else { i++; } } else { i++; } break; case PRODUCT: if (ops == CONST) { if ((*a)->GetNode(i)->GetValue() == 1) { (*a)->DeleteNode(i); ret = true; sz--; if (sz == 1) { a->SetTo((*a)->GetNode(1 - i)); i = 0; sz = (*a)->GetSize(); } } else if ((*a)->GetNode(i)->GetValue() == 0) { RecursiveDestroy(a); ret = true; a->SetTo(zero); sz = 0; } else { i++; } } else { i++; } break; case FRACTION: if (ops == CONST && i == 1) { double c = (*a)->GetCoeff(); a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff((*a)->GetCoeff() * c); ret = true; sz--; } else { i++; } if (sz >= 2 && (*a)->GetNode(0)->IsConstant() && (*a)->GetNode(1)->IsConstant()) { double d = (*a)->GetNode(1)->GetValue(); if (d == 0) { throw ErrDivideByZero(23, "Expression", "SimplifyConstant", "d==0", "cannot divide by zero", HELPURL, (*a)->ToString()); } ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue((*a)->GetValue() / d); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } break; case POWER: if (sz >= 2 && (*a)->GetNode(0)->IsConstant() && (*a)->GetNode(1)->IsConstant()) { double d = (*a)->GetNode(1)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(pow((*a)->GetValue(), d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case LOG: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); if (d <= 0) { throw ErrNotPermitted(24, "Expression", "SimplifyConstant", "d<=0", "log of nonpositive not allowed", HELPURL); } ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(log(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case EXP: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(exp(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case SIN: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(sin(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case COS: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(cos(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case TAN: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(tan(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case COT: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(1 / tan(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case SINH: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(sinh(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case COSH: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(cosh(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case TANH: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(tanh(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case COTH: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(1 / tanh(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; case SQRT: if ((*a)->GetNode(0)->IsConstant()) { double d = (*a)->GetNode(0)->GetValue(); if (d <= 0) { throw ErrNotPermitted(25, "Expression", "SimplifyConstant", "d<=0", "sqrt of nonpositive not allowed", HELPURL); } ret = true; a->SetTo((*a)->GetNode(0)); (*a)->SetValue(sqrt(d)); (*a)->SetCoeff(1.0); (*a)->SetExponent(1.0); sz = 0; } else { i++; } break; default: i++; break; } } } return ret; } bool SimplifyRecursive(Expression* a) { bool ret = false; bool ischanged = false; // signals whether we're dealing with // -1 : nothing // 0 : constants // 1 : linear variables // 2 : a variable raised to an exponent different from 1 // 3 : any other more complex node if (!(*a)->IsLeaf()) { int op = (*a)->GetOpType(); Expression t1, t2; int i, j; for(i = 0; i < (*a)->GetSize(); i++) { ischanged = SimplifyRecursive((*a)->GetNodePtr(i)); if (!ret && ischanged) ret = true; } int status = -1; int prestatus = -1; double consolidated[4] = {0, 0, 0, 0}; double expon = 0; double preexpon = 0; double c = 0; int prevarindex = -1; int prevarpowindex = -1; int varindex = -1; int varpowindex = -1; int firstvarindex = -1; int firstvarpowindex = -1; int firstconstindex = -1; int sz = (*a)->GetSize(); Expression one(1.0); switch(op) { case SUM: i = 0; while(i < sz) { // work out which status we're in if ((*a)->GetNode(i)->IsConstant()) { if (status == -1 || firstconstindex == -1) { firstconstindex = i; } // constant status = 0; } else if ((*a)->GetNode(i)->IsVariable() && (*a)->GetNode(i)->GetExponent() == 1) { // variable status = 1; } else if ((*a)->GetNode(i)->IsVariable() && (*a)->GetNode(i)->GetExponent() != 1) { // variable raised to power status = 2; } else { // other term status = 3; } if (status == 0) { // constant consolidated[status] += (*a)->GetNode(i)->GetValue(); (*a)->GetNode(firstconstindex)->SetValue(consolidated[status]); (*a)->GetNode(firstconstindex)->SetCoeff(1.0); (*a)->GetNode(firstconstindex)->SetExponent(1.0); if (prestatus == 0) { (*a)->DeleteNode(i); ret = true; sz--; if (sz == 1) { a->SetTo((*a)->GetNode(0)); i = 0; sz = (*a)->GetSize(); } } else { i++; } } else if (status == 1) { // variable varindex = (*a)->GetNode(i)->GetVarIndex(); c = (*a)->GetNode(i)->GetCoeff(); if (varindex != prevarindex) { firstvarindex = i; consolidated[status] = c; i++; } else { consolidated[status] += c; (*a)->GetNode(firstvarindex)->SetCoeff(consolidated[status]); ret = true; (*a)->DeleteNode(i); sz--; if (sz == 1) { a->SetTo((*a)->GetNode(0)); i = 0; sz = (*a)->GetSize(); } } prevarindex = varindex; } else if (status == 2) { // variable raised to power varpowindex = (*a)->GetNode(i)->GetVarIndex(); expon = (*a)->GetNode(i)->GetExponent(); c = (*a)->GetNode(i)->GetCoeff(); if (expon != preexpon || varpowindex != prevarpowindex) { firstvarpowindex = i; consolidated[status] = c; i++; } else { consolidated[status] += c; (*a)->GetNode(firstvarpowindex)->SetCoeff(consolidated[status]); ret = true; (*a)->DeleteNode(i); sz--; if (sz == 1) { a->SetTo((*a)->GetNode(0)); i = 0; sz = (*a)->GetSize(); } } preexpon = expon; prevarpowindex = varpowindex; } else if (status == 3) { // other term c = (*a)->GetNode(i)->GetCoeff(); firstvarindex = i; consolidated[status] = c; j = i + 1; while(j < sz) { if ((*a)->GetNode(i)->IsEqualToNoCoeff((*a)->GetNode(j))) { c = (*a)->GetNode(j)->GetCoeff(); consolidated[status] += c; ret = true; (*a)->GetNode(firstvarindex)->SetCoeff(consolidated[status]); RecursiveDestroy((*a)->GetNodePtr(j)); (*a)->DeleteNode(j); sz--; if (sz == 1) { a->SetTo((*a)->GetNode(0)); j = i + 1; sz = (*a)->GetSize(); } } else { j++; } } i++; } else { // should never happen, but anyway... i++; } // update status of last iteration prestatus = status; } break; case PRODUCT: i = 0; prevarindex = -1; consolidated[0] = 1; expon = 0; while(i < sz) { if ((*a)->GetNode(i)->IsVariable()) { varindex = (*a)->GetNode(i)->GetVarIndex(); if (varindex != prevarindex) { firstvarindex = i; consolidated[0] = (*a)->GetNode(i)->GetCoeff(); expon = (*a)->GetNode(i)->GetExponent(); i++; } else { consolidated[0] *= (*a)->GetNode(i)->GetCoeff(); expon += (*a)->GetNode(i)->GetExponent(); (*a)->GetNode(firstvarindex)->SetCoeff(consolidated[0]); (*a)->GetNode(firstvarindex)->SetExponent(expon); (*a)->DeleteNode(i); ret = true; sz--; if (sz == 1) { a->SetTo((*a)->GetNode(0)); i = 0; sz = (*a)->GetSize(); } } } else if (!(*a)->GetNode(i)->IsLeaf()) { // WARNING: work to be done // not going to do the same as in sum just yet, maybe future // work - transform expr * expr in expr^2 when expr not a variable i++; } } break; case FRACTION: if ((*a)->GetNode(0)->IsEqualTo((*a)->GetNode(1))) { // f(x)/f(x) c = (*a)->GetCoeff(); RecursiveDestroy(a); a->SetTo(Expression(c)); ret = true; sz = 0; } else { // try to simplify denominator by one of numerator factors if ((*a)->GetNode(0)->GetOpType() == PRODUCT) { for(j = 0; j < (*a)->GetNode(0)->GetSize(); j++) { if ((*a)->GetNode(1)->IsEqualTo((*a)->GetNode(0)->GetNode(j))) { c = (*a)->GetCoeff(); a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff((*a)->GetCoeff() * c); (*a)->DeleteNode(j); ret = true; sz = 0; break; } } } // do the opposite if (sz > 0 && (*a)->GetNode(1)->GetOpType() == PRODUCT) { for(j = 0; j < (*a)->GetNode(1)->GetSize(); j++) { if ((*a)->GetNode(0)->IsEqualTo((*a)->GetNode(1)->GetNode(j))) { *((*a)->GetNodePtr(0)) = Pointer(one); (*a)->GetNode(1)->DeleteNode(j); ret = true; sz = 0; break; } } } if (sz > 0 && (*a)->GetNode(0)->GetOpType() == PRODUCT && (*a)->GetNode(1)->GetOpType() == PRODUCT) { // both num and denom. are products, try and find common factors int k = 0; int sz1, sz2; j = 0; sz1 = (*a)->GetNode(0)->GetSize(); sz2 = (*a)->GetNode(1)->GetSize(); while (j < sz1) { k = 0; while (k < sz2) { if ((*a)->GetNode(0)->GetNode(j)->IsEqualTo ((*a)->GetNode(1)->GetNode(k))) { (*a)->GetNode(0)->DeleteNode(j); (*a)->GetNode(1)->DeleteNode(k); ret = true; sz1--; if (sz1 == 0) { // numerator empty, replace with 1 (*a)->GetNode(0)->One(); } sz2--; if (sz2 == 0) { // denominator empty, node becomes num. a->SetTo((*a)->GetNode(0)); } if (sz1 == 0 && sz2 == 0) { // 1/1, simplify (*a)->One(); } if (sz1 == 0 || sz2 == 0) { // either num. or den. 1, exit loop sz1 = 0; sz2 = 0; break; } j--; } else { k++; } } j++; } } } sz = 0; break; case POWER: if (sz == 2 && (*a)->GetNode(0)->IsVariable() && (*a)->GetNode(1)->IsConstant()) { // case var^const, transform in variable with an exponent expon = (*a)->GetNode(1)->GetValue(); c = (*a)->GetCoeff(); double c0 = (*a)->GetNode(0)->GetCoeff(); (*a)->GetNode(0)->SetExponent(expon); (*a)->DeleteNode(1); a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff(c * pow(c0, expon)); } break; default: break; } } return ret; } bool DifferenceToSum(Expression* a) { bool ret = false; double d = 0., e = 0.; if (!(*a)->IsLeaf()) { if (((*a)->GetOpType() == SUM || (*a)->GetOpType() == DIFFERENCE) && (*a)->GetSize() == 1) { DifferenceToSum((*a)->GetNodePtr(0)); // replace a with its child a->SetTo((*a)->GetNode(0)); ret = true; } if ((*a)->GetOpType() == DIFFERENCE) { int i; (*a)->SetOpType(SUM); for(i = 1; i < (*a)->GetSize(); i++) { // start from node 1 not 0 because a difference is +op0 -op1 -op2 ... (*a)->GetNode(i)->SetCoeff(- (*a)->GetNode(i)->GetCoeff()); } } else if ((*a)->GetOpType() == MINUS) { d = (*a)->GetCoeff(); e = (*a)->GetExponent(); if (is_even(e)) { // replace a with its child and adjust coeff a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff((*a)->GetCoeff() * d); // since exponent is even, + (*a)->SetExponent((*a)->GetExponent() * e); ret = true; } else if (is_odd(e)) { // replace a with its child and adjust coeff a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff(- (*a)->GetCoeff() * d); // since exponent is odd, - (*a)->SetExponent((*a)->GetExponent() * e); ret = true; } } else if ((*a)->GetOpType() == PLUS) { // replace a with its child a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff((*a)->GetCoeff() * d); // since exponent is even, + (*a)->SetExponent((*a)->GetExponent() * e); ret = true; } } return ret; } // standard order for a set of subnodes of a sum is: // constants + linear variables + vars^{rising powers} + complex operands class NodeOrderSum { public: int operator() (const Expression& a, const Expression& b) { if (a->IsConstant() && !b->IsConstant()) { return true; } else if (a->IsVariable() && b->IsVariable()) { if (a->GetExponent() == 1 && b->GetExponent() != 1) { return true; } else if (a->GetExponent() < b->GetExponent()) { return true; } else if (a->GetExponent() > b->GetExponent()) { return false; } else { if (a->GetVarIndex() < b->GetVarIndex()) { return true; } else { return false; } } } else if (a->IsLeaf() && !b->IsLeaf()) { return true; } else { return false; } } }; // standard order for a set of subnodes is: // constants + vars^{rising powers} + complex operands class NodeOrder { public: int operator() (const Expression& a, const Expression& b) { if (a->IsConstant() && !b->IsConstant()) { return true; } else if (a->IsVariable() && b->IsVariable()) { if (a->GetExponent() < b->GetExponent()) { return true; } else if (a->GetExponent() > b->GetExponent()) { return false; } else { if (a->GetVarIndex() < b->GetVarIndex()) { return true; } else { return false; } } } else if (a->IsLeaf() && !b->IsLeaf()) { return true; } else { return false; } } }; bool ReorderNodes(Expression* a) { bool ret = false; if (!(*a)->IsLeaf() && (*a)->GetSize() > 1 && ((*a)->GetOpType() == SUM || (*a)->GetOpType() == PRODUCT)) { int i; for(i = 0; i < (*a)->GetSize(); i++) { ReorderNodes((*a)->GetNodePtr(i)); } // how do I get this sort to tell me whether it did anything or not? // at the moment this function returns false by definition, incorrect if ((*a)->GetOpType() == SUM) { sort(((*a)->GetNodeVectorPtr())->begin(), ((*a)->GetNodeVectorPtr())->end(), NodeOrderSum()); } else { sort(((*a)->GetNodeVectorPtr())->begin(), ((*a)->GetNodeVectorPtr())->end(), NodeOrder()); } } return ret; } bool CompactLinearPart(Expression* a) { bool ret = false; bool ischanged = false; ischanged = SimplifyConstant(a); if (!ret && ischanged) ret = true; ischanged = DifferenceToSum(a); if (!ret && ischanged) ret = true; ischanged = CompactLinearPartRecursive(a); if (!ret && ischanged) ret = true; ischanged = ReorderNodes(a); return ret; } bool CompactLinearPartRecursive(Expression* a) { bool ret = false; bool ischanged = false; int i, j; i = 0; int sz = (*a)->GetSize(); if ((*a)->GetOpType() == SUM) { while(i < sz) { ischanged = CompactLinearPartRecursive((*a)->GetNodePtr(i)); if (!ret && ischanged) ret = true; if ((*a)->GetNode(i)->GetOpType() == SUM) { ret = true; double ci = (*a)->GetNode(i)->GetCoeff(); for(j = 0; j < (*a)->GetNode(i)->GetSize(); j++) { Expression nodej((*a)->GetNode(i)->GetNode(j)); nodej->SetCoeff(nodej->GetCoeff() * ci); (*a)->AddNode(nodej); ++ sz;// we added a node } (*a)->DeleteNode(i); -- sz; // we have deleted a node // we don't need to increase i, since we have deleted the i-th node // the next node is still the i-th node if (sz == 1) { a->SetTo((*a)->GetNode(0)); i = 0; sz = (*a)->GetSize(); } } else { i++; } } } return ret; } // deals with cases like *(*(x,y), z) --> *(x,y,z) bool CompactProducts(Expression* a) { bool ret = false; bool ischanged = false; int i, j; if ((*a)->GetOpType() == PRODUCT) { for(i = 0; i < (*a)->GetSize(); i++) { ischanged = CompactProducts((*a)->GetNodePtr(i)); if (!ret && ischanged) ret = true; if ((*a)->GetNode(i)->GetOpType() == PRODUCT) { ret = true; for(j = 0; j < (*a)->GetNode(i)->GetSize(); j++) { (*a)->AddNode((*a)->GetNode(i)->GetNode(j)); } (*a)->DeleteNode(i); } } if ((*a)->GetSize() == 1) { // product with just one operand, up a level double c = (*a)->GetCoeff(); a->SetTo((*a)->GetNode(0)); (*a)->SetCoeff((*a)->GetCoeff() * c); ret = true; } } else { // not a product, recurse for(i = 0; i < (*a)->GetSize(); i++) { ischanged = CompactProducts((*a)->GetNodePtr(i)); if (!ret && ischanged) { ret = true; } } } (*a)->ConsolidateProductCoeffs(); return ret; } // generic simplification on a copy of the expression Expression SimplifyCopy(Expression* a, bool & ischanged) { Expression b; b = (*a).Copy(); ischanged = Simplify(&b); return b; } // recursive destroy - deleted all the tree and nodes in a tree - use // with caution void RecursiveDestroy(Expression* a) { int i; for(i = 0; i < (*a)->GetSize(); i++) { RecursiveDestroy((*a)->GetNodePtr(i)); } a->Destroy(); } } /* namespace Ev3 */ openturns-1.9/lib/src/Base/Diff/Ev3/expression.h000066400000000000000000000320451307543307100215130ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: expression.h * * Source: GNU C++ * * Purpose: symbolic expression (base classes and functionality) * * History: 010517 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #ifndef __EV3EXPRESSIONH__ #define __EV3EXPRESSIONH__ #include #include #include #include "common.h" #include "tree.h" #include "exceptions.h" #include "operand.h" namespace Ev3 { class BasicExpression; typedef Pointer Expression; class BasicExpression : public Operand, public Tree { private: public: // constructors // create empty BasicExpression(); // create a constant leaf explicit BasicExpression(const double t); // create a constant (integer-valued) leaf explicit BasicExpression(const Int t); // create an (empty) operator or a variable leaf BasicExpression(const Int t, const bool isvar); // create a variable leaf and set coefficient BasicExpression(const double c, const Int t, const std::string & vn); // user-defined copy constructor with two options (to make a copy) BasicExpression(const Expression & t, const bool iscopy); // copy constructor BasicExpression(const BasicExpression & t); // destructor ~BasicExpression(); // BasicExpression class methods: void Debug () const; // prints to a string std::string ToString() const; // output is a tree std::string PrintTree(const int blanks, const int tabs) const; // sets an expression to zero (deleting all existing subnodes) void Zero(); // sets an expression to one (deleting all existing subnodes) void One(); // is expression this == expression t? // (note that this half-replicates Tree::operator==, // but I couldn't think of any other convenient way to fit in // the operand data in == and still use the Tree's ==) bool IsEqualTo(const Expression & t) const; bool operator == (const BasicExpression & t) const; // other comparison operators bool IsEqualTo(const double t) const; // this returns true if args are equal up to top node coefficient bool IsEqualToNoCoeff(const Expression & t) const; // this returns true if args have equal operator structures and // maintain variable/constant assignment to leaf nodes // (a schema is an expression modulo leaves) bool IsEqualBySchema(const Expression & t) const; // this returns true if args have equal operator label bool IsEqualByOperator(const int theoplabel) const; // this returns the number of variables in the expression int NumberOfVariables() const; int NumberOfVariables(int & maxvi) const; // whether expression depends on variable bool DependsOnVariable(const Int vi) const; // whether expression depends on variable linearly // (0=depends nonlinearly, 1=depends linearly, 2=doesn't depend at all) int DependsLinearlyOnVariable(const Int vi) const; // in a product, multiply all coeffs. of the operands, set result // as coeff of whole product, reset all operand coffs at 1; if // resulting global coeff is zero, delete all nodes and set // this to zero constant. // don't do anything on other operators void ConsolidateProductCoeffs(); // in a sum or product, if coeff of sum operand is not 1, distribute it // to the operands and set whole coeff to 1 void DistributeCoeffOverSum(); void DistributeCoeffOverProduct(); // enforce constant dependencies (added for MORON - see ../PROGNOTES) // this only acts on the proper leaf nodes void EnforceDependency(); // substitute a variable with a constant void VariableToConstant(const int varindex, const double c); // replace variable indexed v1 with variable indexed v2 (with varname vn) void ReplaceVariable(const int v1, const int v2, const std::string & vn); void ReplaceVariable(const int v1, const int v2, const std::string & vn, const double c2); // replace with a variable the deepest node conforming to schema and // return replaced term or zero expression if no replacement occurs Expression ReplaceBySchema(const int vi, const std::string & vn, const Expression & schema); // works on subnodes not on current node Expression ReplaceBySchemaRecursive(const int vi, const std::string & vn, const Expression & schema); // replace with a variable the deepest node with given operator label // return replaced term or zero expression if no replacement occurs Expression ReplaceByOperator(const int vi, const std::string & vn, const int oplabel); // works on subnodes not on current node Expression ReplaceByOperatorRecursive(const int vi, const std::string & vn, const int oplabel); // replace all occurrences of subexpression needle with replace // return number of replacements int ReplaceSubexpression(const Expression & needle, const Expression & replace); // replace this with given expression (SIGSEGV risk, see implementation) void ReplaceWithExpression(const Expression & replace); // reset all names of variables having IDs between lid, uid to vn void ResetVarNames(const std::string & vn, int lid, int uid); // distribute products over sums - returns true if changed // (re-call until false) bool DistributeProductsOverSums(); // find variable indices in an expression void GetVarIndices(std::vector & vidx); // return list of varIDs involved in a certain schema // e.g. f(x1*x2+x1*x3+x4*log(x5), x*y) = {1,2,3} void GetVarIndicesInSchema(std::vector & vidx, const Expression & schema); // find the variable name corresponding to variable index vi std::string FindVariableName(int vi); // is this expression linear? bool IsLinear() const; // is this expression a quadratic product of variables? // If yes, return the product type: PRODUCT, POWER or VAR bool IsQuadratic(int & prodtype) const; bool IsQuadratic() const; // return info about the linear part (assumes Simplify() has already been // called on this) - return false if expression has no linear part // by "linear part" we mean lin(x) in expr(x,y) = lin(x) + nonlin(y) // lincoeff[i] is the i-th nonzero coeff, linvi[i] is the corresponding // i-th varindex (starts from 1), c is the constant term to be added bool GetLinearInfo(std::vector & lincoeff, std::vector & linvi, std::vector & linvn, double & c); // return info about the pure linear part (assumes Simplify() has // already been called on this) - much as above call but the "pure // linear part" is e.g. x+y in x+y+y^2 bool GetPureLinearInfo(std::vector & lincoeff, std::vector& linvi, std::vector & linvn, double & c); // get the linear part - x in x+y+y^2 Expression GetLinearPart(); // get the pure linar part - x+y in x+y+y^2 Expression GetPureLinearPart(); // get the nonlinear part - nonlin(y) in expr(x,y) = lin(x) + nonlin(y) Expression GetNonlinearPart(); // get the purely nonlinear part - eg. y^2 in x+y+y^2 Expression GetPureNonlinearPart(); // return the additive constant of the expression double GetConstantPart(); // return the additive constant of the expression and remove it from the // expression itself double RemoveAdditiveConstant(); }; std::ostream & operator<< (std::ostream & out, const BasicExpression & expr); std::ostream & operator<< (std::ostream & out, const Expression & expr); // All these functions contain tricks to simplify the operands. This // means that both the operands may be changed, and indeed that the // return value is often one of the changed operands. To make sure // you are not changing the operands, use the CopyOf function or the // Copy() method in Pointer class; or use the equivalent operators below // in order not to touch the argument expressions. // add a link of b to a, return link to created expression Expression SumLink(Expression a, Expression b); // add a link of b to a with coeff -1, return link of a Expression DifferenceLink(Expression a, Expression b); // multiply a by a link of b, return link of a Expression ProductLink(Expression a, Expression b); // divide a by a link of b, return link of a Expression FractionLink(Expression a, Expression b); // raise a to power b, return link of a Expression PowerLink(Expression a, Expression b); // change sign to coeff of a, return link of a Expression MinusLink(Expression a); // other unary functions (of a): Expression SinLink(Expression a); Expression CosLink(Expression a); Expression TanLink(Expression a); Expression AsinLink(Expression a); Expression AcosLink(Expression a); Expression AtanLink(Expression a); Expression SinhLink(Expression a); Expression CoshLink(Expression a); Expression TanhLink(Expression a); Expression AsinhLink(Expression a); Expression AcoshLink(Expression a); Expression AtanhLink(Expression a); Expression Log2Link(Expression a); Expression Log10Link(Expression a); Expression LogLink(Expression a); Expression LnLink(Expression a); Expression LngammaLink(Expression a); Expression GammaLink(Expression a); Expression ExpLink(Expression a); Expression ErfLink(Expression a); Expression ErfcLink(Expression a); Expression SqrtLink(Expression a); Expression CbrtLink(Expression a); Expression BesselJ0Link(Expression a); Expression BesselJ1Link(Expression a); Expression BesselY0Link(Expression a); Expression BesselY1Link(Expression a); Expression SignLink(Expression a); Expression RintLink(Expression a); Expression AbsLink(Expression a); Expression CotLink(Expression a); Expression CothLink(Expression a); // these are equivalent to the above but they don't change the arguments Expression operator + (Expression a, Expression b); Expression operator - (Expression a, Expression b); Expression operator * (Expression a, Expression b); Expression operator / (Expression a, Expression b); Expression operator ^ (Expression a, Expression b); Expression operator - (Expression a); Expression Sin(Expression a); Expression Cos(Expression a); Expression Tan(Expression a); Expression Asin(Expression a); Expression Acos(Expression a); Expression Atan(Expression a); Expression Sinh(Expression a); Expression Cosh(Expression a); Expression Tanh(Expression a); Expression Asinh(Expression a); Expression Acosh(Expression a); Expression Atanh(Expression a); Expression Log2(Expression a); Expression Log10(Expression a); Expression Log(Expression a); Expression Ln(Expression a); Expression Lngamma(Expression a); Expression Gamma(Expression a); Expression Exp(Expression a); Expression Erf(Expression a); Expression Erfc(Expression a); Expression Sqrt(Expression a); Expression Cbrt(Expression a); Expression BesselJ0(Expression a); Expression BesselJ1(Expression a); Expression BesselY0(Expression a); Expression BesselY1(Expression a); Expression Sign(Expression a); Expression Rint(Expression a); Expression Abs(Expression a); Expression Cot(Expression a); Expression Coth(Expression a); // symbolic differentiation of a w.r.t. variable with index vi, // return the created expression (a is not changed) Expression Diff(const Expression & a, Int vi); Expression DiffNoSimplify(const Expression & ac, Int vi); // SIMPLIFICATIONS - all simplifications return true if they were // effective or false if they weren't // sin^2+cos^2 = 1 simplification bool TrigSimp(Expression a); // generic simplification with modification of the expression bool Simplify(Expression* a); bool SimplifyRecursive(Expression* a); bool SimplifyConstant(Expression* a); bool DifferenceToSum(Expression* a); bool CompactLinearPart(Expression* a); bool CompactLinearPartRecursive(Expression* a); bool CompactProducts(Expression* a); bool ReorderNodes(Expression* a); // destroys the whole tree and all nodes, be careful void RecursiveDestroy(Expression* a); // generic simplification on a copy of the expression Expression SimplifyCopy(Expression* a, bool& ischanged); } /* namespace Ev3 */ #endif /* __EV3EXPRESSIONH__ */ openturns-1.9/lib/src/Base/Diff/Ev3/operand.cxx000066400000000000000000000204601307543307100213150ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: operand.cxx * * Source: GNU C++ * * Purpose: symbolic expression (base classes and functionality) * * History: 010517 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #include #include #include "operand.h" namespace Ev3 { // constructors Operand::Operand() : oplabel_(CONST), dependency_(0), constant_(0), depconstant_(NULL), varindex_(NOVARIABLE), varname_(), coefficient_(1), depcoefficient_(NULL), exponent_(1), depexponent_(NULL) { } Operand::Operand(double t) : oplabel_(CONST), dependency_(0), constant_(t), depconstant_(NULL), varindex_(NOVARIABLE), varname_(), coefficient_(1), depcoefficient_(NULL), exponent_(1), depexponent_(NULL) { } Operand::Operand(const Int t) : oplabel_(CONST), dependency_(0), constant_(t), depconstant_(NULL), varindex_(NOVARIABLE), varname_(), coefficient_(1), depcoefficient_(NULL), exponent_(1), depexponent_(NULL) { } Operand::Operand(const Int t, const bool isvar) : dependency_(0), depconstant_(NULL), coefficient_(1), depcoefficient_(NULL), exponent_(1), depexponent_(NULL) { if (isvar) { // make it a variable oplabel_ = VAR; constant_ = 0; varindex_ = t; } else { // make it an operator label oplabel_ = static_cast< int > (t); constant_ = 0; varindex_ = NOVARIABLE; } } // create an (empty) operator or a variable leaf and set coefficient Operand::Operand(const double c, const Int t, const std::string & vn) : coefficient_(c), exponent_(1) { // make it a variable oplabel_ = VAR; constant_ = 0; varindex_ = t; varname_ = vn; dependency_ = 0; depconstant_ = NULL; depcoefficient_ = NULL; depexponent_ = NULL; } // Operand class methods: std::ostream & operator<< (std::ostream & outbuf, const Operand & operand) { std::string vn; if (operand.GetCoeff() == 0) { // coefficient is 0 outbuf << 0; } // GetCoeff() == 0 else if (operand.GetOpType() == CONST) { // constant outbuf << operand.GetValue(); } // GetOpType() == CONST else if (operand.GetOpType() == VAR) { // variable if (operand.GetCoeff() == 1) { int vi = operand.GetVarIndex(); if (vi == NOVARIABLE) { if (operand.GetExponent() == 1) { outbuf << NOTVARNAME; } // GetExponent() == 1 else { outbuf << NOTVARNAME << "^" << operand.GetExponent(); } // GetExponent() != 1 } // vi == NOVARIABLE else { vn = operand.GetVarName(); if (operand.GetExponent() == 1) { outbuf << vn;// << VNAMEIDXCHAR << vi; } // GetExponent() == 1 else { outbuf << vn/* << VNAMEIDXCHAR << vi*/ << "^" << operand.GetExponent(); } // GetExponent() != 1 } // vi != NOVARIABLE } // GetCoeff() == 1 else { int vi = operand.GetVarIndex(); if (vi == NOVARIABLE) { if (operand.GetExponent() == 1) { outbuf << operand.GetCoeff() << "*_" << NOTVARNAME; } else { outbuf << operand.GetCoeff() << "*" << NOTVARNAME << "^" << operand.GetExponent(); } } // vi == NOVARIABLE else { vn = operand.GetVarName(); if (operand.GetExponent() == 1) { outbuf << operand.GetCoeff() << "*" << vn;// << VNAMEIDXCHAR << vi; } // GetExponent() == 1 else { outbuf << operand.GetCoeff() << "*" << vn/* << VNAMEIDXCHAR << vi*/ << "^" << operand.GetExponent(); } // GetExponent() != 1 } // vi != NOVARIABLE } // GetCoeff() != 1 } // GetOpType() == VAR else { // operand, don't print anything } return outbuf; } std::string Operand::ToString() const { std::stringstream outbuf; outbuf << *this; return outbuf.str(); } // get operator type int Operand::GetOpType() const { return oplabel_; } // get constant value - in CONSTs, multiply by coeff. and raise // to exponent, first double Operand::GetValue() const { if ((oplabel_ == CONST) && (dependency_ == 0)) { if (exponent_ == 1) return coefficient_ * constant_; else if (exponent_ == 2) return coefficient_ * constant_ * constant_; else return coefficient_ * pow(constant_, exponent_); } else if ((oplabel_ == CONST) && (dependency_ == 1) && depconstant_) return *depconstant_; else return constant_; } // just get the value in any case double Operand::GetSimpleValue() const { if ((dependency_ == 1) && depconstant_) return *depconstant_; return constant_; } // get variable index Int Operand::GetVarIndex() const { return varindex_; } // get variable name std::string Operand::GetVarName() const { return varname_; } // set operator type void Operand::SetOpType(const int t) { oplabel_ = t; } // set constant value void Operand::SetValue(const double t) { oplabel_ = CONST; constant_ = t; } // set variable index void Operand::SetVarIndex(const Int t) { oplabel_ = VAR; varindex_ = t; } // set variable name void Operand::SetVarName(const std::string & vn) { oplabel_ = VAR; varname_ = vn; } // is operand a constant? bool Operand::IsConstant() const { return (GetOpType() == CONST); } // is operand a variable? bool Operand::IsVariable() const { return (GetOpType() == VAR); } // is operand a leaf node? bool Operand::IsLeaf() const { return (IsConstant() || IsVariable()); } void Operand::SetCoeff(const double coeff) { coefficient_ = coeff; } double Operand::GetCoeff() const { if ((dependency_ == 2) && depcoefficient_) return *depcoefficient_; else return coefficient_; } void Operand::SetExponent(const double expon) { exponent_ = expon; } double Operand::GetExponent() const { if ((dependency_ == 3) && depexponent_) return *depexponent_; else return exponent_; } void Operand::SetDependencyOnOperand(const int whichconstant, double** depvalue) { dependency_ = whichconstant + 1; switch(dependency_) { case 1: depconstant_ = *depvalue; break; case 2: depcoefficient_ = *depvalue; break; case 3: depexponent_ = *depvalue; break; } } void Operand::EnforceDependencyOnOperand() { switch(dependency_) { case 1: constant_ = *depconstant_; break; case 2: coefficient_ = *depcoefficient_; break; case 3: exponent_ = *depexponent_; break; } } void Operand::ConsolidateValue() { SetValue(GetValue()); SetCoeff(1.0); SetExponent(1.0); } // is operand a zero constant? bool Operand::IsZero() const { if (GetOpType() == CONST) return (std::abs(GetValue()) < Ev3NearZero()); return false; } // is operand a constant having value v? bool Operand::HasValue(const double v) const { if (GetOpType() == CONST) return (std::abs(v - GetValue()) < Ev3NearZero()); return false; } // is operand a negative constant? bool Operand::IsLessThan(const double v) const { if (GetOpType() == CONST) return (GetValue() < v + Ev3NearZero()); return false; } // is operand a negative constant? bool Operand::IsGreaterThan(const double v) const { if (GetOpType() == CONST) return (GetValue() > v - Ev3NearZero()); return false; } // is operand this == operand t? bool Operand::operator == (const Operand & t) { if (this == &t) return true; // not the same operand - check data fields return (GetOpType() == t.GetOpType() && GetValue() == t.GetValue() && GetVarIndex() == t.GetVarIndex()); } // substitute a variable with a constant void Operand::SubstituteVariableWithConstant(const int varindex, const double c) { if ((GetOpType() == VAR) && (GetVarIndex() == varindex)) { SetOpType(CONST); SetVarIndex(NOVARIABLE); double t; t = GetCoeff() * pow(c, GetExponent()); SetCoeff(1.0); SetExponent(1.0); SetValue(t); } } } /* namespace Ev3 */openturns-1.9/lib/src/Base/Diff/Ev3/operand.h000066400000000000000000000100011307543307100207300ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: expression.h * * Source: GNU C++ * * Purpose: symbolic expression (base classes and functionality) * * History: 010517 0.0 work started * * License: Code published under the Common Public License. * ***********************************************************************/ #ifndef __EV3OPERANDH__ #define __EV3OPERANDH__ #include #include "common.h" #include "exceptions.h" namespace Ev3 { // algebraic expression operand class Operand { private: protected: // one of the OperatorTypes above int oplabel_; // 0 if no dependency, 1 if constant, 2 if coefficient, 3 if exponent int dependency_; // if oplabel == CONST, the value of the constant double constant_; // dependency for constants (added for MORON - see ../PROGNOTES) double* depconstant_; // if oplabel == VAR, the index of the variable - should start from 1 Int varindex_; // if oplabel == VAR, the name of the variable std::string varname_; // we allow multiplication for a constant coefficient in each Operand double coefficient_; // dependency for coefficients (added for MORON - see ../PROGNOTES) double* depcoefficient_; // we allow a real constant exponent in each Operand // THIS HAS MEANING ONLY IF operand IS A LEAF!!! double exponent_; // dependency for exponents (added for MORON - see ../PROGNOTES) double* depexponent_; public: // constructors Operand(); explicit Operand(const double t); explicit Operand(const Int t); Operand(const Int t, const bool isvar); // create a variable leaf and set coefficient Operand(const double c, const Int t, const std::string & vn); // Operand class methods: // prints to a string std::string ToString() const; // get operator type int GetOpType() const; // get constant value - in CONSTs it multiplies by coefficient and // raises to exponent double GetValue() const; // just get the value, in all cases double GetSimpleValue() const; // get variable index Int GetVarIndex() const; // get variable name std::string GetVarName() const; // get the coefficient double GetCoeff() const; // get the exponent double GetExponent() const; // set operator type void SetOpType(const int t); // set constant value void SetValue(const double t); // set variable index (start from 1 and add by steps of 1 when creating new // variables) void SetVarIndex(const Int t); // set variable name void SetVarName(const std::string & vn); // set the exponent void SetExponent(const double expon); // set the coefficient void SetCoeff(const double coeff); // set constant dependencies (added for MORON - see ../PROGNOTES) void SetDependencyOnOperand(const int whichconstant, double** depvalue); // is operand a constant? bool IsConstant() const; // is operand a variable? bool IsVariable() const; // is operand a leaf node? bool IsLeaf() const; // is operand a zero constant? bool IsZero() const; // is operand a constant == v? bool HasValue(double v) const; // is operand a constant <= v? bool IsLessThan(double v) const; // is operand constant >= v? bool IsGreaterThan(double v) const; // set value = coefficient * value ^ exponent void ConsolidateValue(); // enforce constant dependencies (added for MORON - see ../PROGNOTES) void EnforceDependencyOnOperand(); // is operand this == operand t? bool operator == (const Operand & t); // substitute a variable with a constant void SubstituteVariableWithConstant(const int varindex, const double c); }; std::ostream & operator<< (std::ostream & out, const Operand & operand); } /* namespace Ev3 */ #endif /* __EV3OPERANDHXX__ */ openturns-1.9/lib/src/Base/Diff/Ev3/parser.cxx000066400000000000000000000232651307543307100211670ustar00rootroot00000000000000/* ** Name: parser.cxx ** Author: Leo Liberti ** Purpose: C++ class that builds an Expression v3 ** n-ary tree from a string containing a ** mathematical expression in n variables ** Source: GNU C++ ** History: 010624 derived from project Eval (class/EvalClass.cc) ** License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. */ #include "parser.h" #include "common.h" namespace Ev3 { ExpressionParser::ExpressionParser() : input_(0) { isinitialized_ = false; currentvid_ = 1; } // set variable ID void ExpressionParser::SetVariableID(const std::string & vname, const int vid) { isinitialized_ = true; variable_[vname] = vid; varname_[vid] = vname; } // set variable ID for internal use void ExpressionParser::InternalSetVariableID(const std::string & vname, const int vid) { variable_[vname] = vid; varname_[vid] = vname; } // get variable ID int ExpressionParser::GetVariableID(const std::string & vname) { if (variable_.find(vname) != variable_.end()) return variable_[vname]; else return (IsVariableName(vname) ? PEV3UNKNOWNVAR : PEV3NOVARIABLE); } // get variable name std::string ExpressionParser::GetVariableName(const int vid) { if (varname_.find(vid) != varname_.end()) return varname_[vid]; return NOTVARNAME; } bool ExpressionParser::IsVariableName(const std::string & vname) { return !((vname == "sin") || (vname == "cos") || (vname == "tan") || (vname == "asin") || (vname == "acos") || (vname == "atan") || (vname == "sinh") || (vname == "cosh") || (vname == "tanh") || (vname == "asinh") || (vname == "acosh") || (vname == "atanh") || (vname == "log2") || (vname == "log10") || (vname == "log") || (vname == "ln") || (vname == "lngamma") || (vname == "gamma") || (vname == "exp") || (vname == "erf") || (vname == "erfc") || (vname == "sqrt") || (vname == "cbrt") || (vname == "besselJ0") || (vname == "besselJ1") || (vname == "besselY0") || (vname == "besselY1") || (vname == "sign") || (vname == "rint") || (vname == "abs")); } // driver evaluating routine (public method) Expression ExpressionParser::Parse(const char* buf, int & nerrors) { curr_tok_ = PEV3PRINT; std::string buf_str(buf); // explicit unary minuses at beginning or after a closing parenthesis for (size_t i = 0; i < buf_str.size(); ++ i) if ((buf_str[i] == PEV3MINUS) && ((i == 0) || ((i > 0) && (buf_str[i - 1] == '(')))) buf_str[i] = PEV3UNARYMINUS; Expression ret; input_ = new std::stringstream(buf_str); no_of_functions_ = 0; no_of_errors_ = 0; table_["_pi"] = PEV3PI; table_["_e"] = PEV3E; while (*input_) { get_token(); switch(curr_tok_) { case PEV3END: break; case PEV3PRINT: continue; case PEV3RP: if (no_of_functions_ == 0) error("primary expected, found", curr_tok_); else --no_of_functions_; continue; default: ret = expr(false); } // switch(curr_tok_) } // while (*input) delete input_; input_ = 0; nerrors = no_of_errors_; return ret; } // parser: report error (private method) double ExpressionParser::error(const std::string & s) { ++no_of_errors_; return 0; } double ExpressionParser::error(const std::string & s, const Token_value tk) { ++no_of_errors_; return 0; } // parser: primary expressions (private method) Expression ExpressionParser::prim(const bool get) { Expression ret; if (get) get_token(); switch (curr_tok_) { case PEV3NUMBER: { ret = Expression(number_value_); get_token(); } break; case PEV3NAME: { int vid = GetVariableID(string_value_); std::string vn = GetVariableName(vid); double v = table_[string_value_]; if (v != 0) { ret = Expression(v); get_token(); } else if (vid == PEV3UNKNOWNVAR && !isinitialized_) { InternalSetVariableID(string_value_, currentvid_); ret->SetOpType(VAR); ret->SetVarIndex(currentvid_); ret->SetVarName(string_value_); ++currentvid_; get_token(); } else if (vid != PEV3NOVARIABLE) { ret->SetOpType(VAR); ret->SetVarIndex(vid); ret->SetVarName(vn); get_token(); } else { Token_value tk = get_token(); if (tk == PEV3LP) { std::string s(string_value_); ++no_of_functions_; ret = expr(true); if (s == "sin") ret = SinLink(ret); else if (s == "cos") ret = CosLink(ret); else if (s == "tan") ret = TanLink(ret); else if (s == "acos") ret = AcosLink(ret); else if (s == "asin") ret = AsinLink(ret); else if (s == "atan") ret = AtanLink(ret); else if (s == "sinh") ret = SinhLink(ret); else if (s == "cosh") ret = CoshLink(ret); else if (s == "tanh") ret = TanhLink(ret); else if (s == "asinh") ret = AsinhLink(ret); else if (s == "acosh") ret = AcoshLink(ret); else if (s == "atanh") ret = AtanhLink(ret); else if (s == "log2") ret = Log2Link(ret); else if (s == "log10") ret = Log10Link(ret); else if (s == "log") ret = LogLink(ret); else if (s == "ln") ret = LogLink(ret); else if (s == "lngamma") ret = LngammaLink(ret); else if (s == "gamma") ret = GammaLink(ret); else if (s == "exp") ret = ExpLink(ret); else if (s == "erf") ret = ErfLink(ret); else if (s == "erfc") ret = ErfcLink(ret); else if (s == "sqrt") ret = SqrtLink(ret); else if (s == "cbrt") ret = CbrtLink(ret); else if (s == "besselJ0") ret = BesselJ0Link(ret); else if (s == "besselJ1") ret = BesselJ1Link(ret); else if (s == "besselY0") ret = BesselY0Link(ret); else if (s == "besselY1") ret = BesselY1Link(ret); else if (s == "sign") ret = SignLink(ret); else if (s == "rint") ret = RintLink(ret); else if (s == "abs") ret = AbsLink(ret); else error("unknown function"); if (curr_tok_ != PEV3RP) error("bracket ) expected for end-of-function"); else { --no_of_functions_; get_token(); } } // if (tk == PEV3LP) } } // case PEV3NAME: break; case PEV3MINUS: ret = MinusLink(prim(true)); break; case PEV3UNARYMINUS: ret = MinusLink(ret); break; case PEV3LP: { ret = expr(true); if (curr_tok_ != PEV3RP) error("bracket ) expected"); else get_token(); } break; default: error("primary expected, found", curr_tok_); } return ret; } // parser: power Expression ExpressionParser::power(const bool get) { Expression ret = prim(get); for (;;) { switch (curr_tok_) { case PEV3POWER: ret = PowerLink(ret, prim(true)); break; default: return ret; } } } Expression ExpressionParser::uminus(const bool get) { Expression ret = power(get); for (;;) { switch (curr_tok_) { case PEV3UNARYMINUS: ret = DifferenceLink(ret, power(true)); break; default: return ret; } } } // parser: products and fractions (private method) Expression ExpressionParser::term(const bool get) { Expression ret = uminus(get); for (;;) { switch (curr_tok_) { case PEV3MUL: ret = ProductLink(ret, uminus(true)); break; case PEV3DIV: ret = FractionLink(ret, uminus(true)); break; default: return ret; } } } // parser: sums and subtractions (private method) Expression ExpressionParser::expr(const bool get) { Expression ret = term(get); for (;;) { switch (curr_tok_) { case PEV3PLUS: case PEV3NLPLUS: ret = SumLink(ret, term(true)); break; case PEV3MINUS: ret = DifferenceLink(ret, term(true)); break; default: return ret; } } } // lexical analyser (private method) Token_value ExpressionParser::get_token() { char ch; do { // skip whitespace except '\n' if (!input_->get(ch)) return curr_tok_ = PEV3END; } while (ch != '\n' && isspace(ch)); switch(ch) { case ';': case '\n': return curr_tok_ = PEV3PRINT; case 0: return curr_tok_ = PEV3END; case '*': case '/': case '+': case '-': case '|': case '(': case ')': case '=': case '^': case '#': return curr_tok_ = Token_value(ch); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': input_->putback(ch); *input_ >> number_value_; return curr_tok_ = PEV3NUMBER; default: // PEV3NAME, PEV3NAME=, or error if (isalpha(ch) || (ch == '_')) { char* sv = string_value_; *sv = ch; while (input_->get(ch) && (isalnum(ch) || (ch == '_'))) { ++sv; *sv = ch; } ++sv; *sv = '\0'; input_->putback(ch); return curr_tok_ = PEV3NAME; } error("bad token"); return curr_tok_ = PEV3PRINT; } } } /* namespace Ev3 */ openturns-1.9/lib/src/Base/Diff/Ev3/parser.h000066400000000000000000000056541307543307100206160ustar00rootroot00000000000000/* ** Name: parser.h ** Author: Leo Liberti ** Purpose: C++ class that builds an Expression v3 ** n-ary tree from a string containing a ** mathematical expression in n variables ** Source: GNU C++ ** History: 010624 derived from project Eval (class/EvalClass.cc) ** License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. */ #ifndef __EV3PARSERH__ #define __EV3PARSERH__ #include #include #include #include #include "expression.h" namespace Ev3 { // global declarations enum Token_value { PEV3NAME, PEV3NUMBER, PEV3END, PEV3PLUS = '+', PEV3NLPLUS = '|', PEV3MINUS = '-', PEV3MUL = '*', PEV3DIV = '/', PEV3POWER = '^', PEV3PRINT = ';', PEV3ASSIGN = '=', PEV3LP = '(', PEV3RP = ')', PEV3UNARYMINUS = '#', }; // constants //const double PEV3infinity = std::numeric_limits::infinity(); #define PEV3PI M_PI #define PEV3E M_E #define PEV3NOVARIABLE -1 #define PEV3UNKNOWNVAR -2 // the Eval class class ExpressionParser { private: // user data std::map variable_; std::map varname_; // internal parser/lexer data Token_value curr_tok_; // contains the map varnames -> varindices std::map table_; double number_value_; char string_value_[1024]; int no_of_errors_; int no_of_functions_; std::istream *input_; // if parser hasn't been initialized with SetVariableIDs, false bool isinitialized_; public: // constructors & destructors (public methods) ExpressionParser(); // set variable ID void SetVariableID(const std::string & vname, const int vid); // get variable ID int GetVariableID(const std::string & vname); // get variable name std::string GetVariableName(const int vid); // driver evaluating routine (public method) Expression Parse(const char* buf, int& nerrors); private: // parser: report error (private method) double error(const std::string& s); double error(const std::string& s, const Token_value tk); // parser: primary expressions (private method) Expression prim(const bool get); // parser: power Expression power(const bool get); // parser: unary minus Expression uminus(const bool get); // parser: products and fractions (private method) Expression term(const bool get); // parser: sums and subtractions (private method) Expression expr(const bool get); // lexical analyser (private method) Token_value get_token(); // set variable ID (for internal use - doesn't set isinitialized) void InternalSetVariableID(const std::string & vname, const int vid); // check whether a string is a function name or an unknown variable bool IsVariableName(const std::string & vname); // progressive vid int currentvid_; }; // end class ExpressionParser } /* namespace Ev3 */ #endif /* __EV3PARSERH__ */ openturns-1.9/lib/src/Base/Diff/Ev3/tree.h000066400000000000000000000147631307543307100202620ustar00rootroot00000000000000/********************************************************************** * Author: Leo Liberti * * Name: tree.hxx * * Source: GNU C++ * * Purpose: template for tree construction * * History: 010517 0.0 work started * * License: (C) Leo Liberti, all rights reserved. Code published under the Common Public License. ***********************************************************************/ #ifndef __EV3TREEH__ #define __EV3TREEH__ #include #include #include #include "common.h" #include "exceptions.h" namespace Ev3 { template class Pointer { private: // pointer to node data NodeType* node; // how many Pointers point to the NodeType pointed to by *node Int* ncount; public: // constructors Pointer() { node = new NodeType; ncount = new Int(1); } Pointer(NodeType& n) { node = new NodeType(n); ncount = new Int(1); } explicit Pointer(double v) { node = new NodeType(v); ncount = new Int(1); } Pointer(double c, int vi, std::string vn) { node = new NodeType(c, vi, vn); ncount = new Int(1); } explicit Pointer(bool notinitialized) { if (!notinitialized) { node = new NodeType; ncount = new Int(1); } else { node = NULL; ncount = NULL; } } // copy constructor void SetTo(const Pointer& t) { if (node != t.node) { Destroy(); node = t.node; ncount = t.ncount; (*ncount)++; } } Pointer(const Pointer& t) { node = NULL; ncount = NULL; SetTo(t); } // copy assignment: does NOT copy, it just references. Pointer& operator = (const Pointer& t) { SetTo(t); return *this; } // copy factory // 1. this is a copy of pointer void SetToCopyOf(const Pointer& t) { if ( (node != t.node) || ((node == t.node) && ncount && (*ncount == 1)) ) { Destroy(); } else if (node == t.node) { assert(ncount); ncount--; } // destroys generality to use the user-defined constructor to force // the copy, but what the heck, can't work miracles. node = new NodeType(t, true); ncount = new Int(1); } // 2. returns a copy of this Pointer Copy() const { Pointer ret(true); // uninitialized ret.SetToCopyOf(*this); return ret; } // destructor void Destroy() { if (ncount) { if (--(*ncount) == 0) { if (node) { delete node; node = NULL; } delete ncount; ncount = NULL; } } } ~Pointer() { Destroy(); } // overload of -> NodeType* operator->() const { return node; } NodeType GetPointee() const { return *node; } // check for equality bool operator == (const Pointer& t) { if (node == t.node) { // fast check return true; } else { // use the NodeType::operator== if (*node == *(t.node)) { return true; } } return false; } }; template class Tree { private: protected: // the vector containing the nodes std::vector > nodes; public: // constructor Tree() { } // destructor ~Tree() { /* // SIGSEGVs -- investigate or bear the memleak int sz = nodes.size(); for(int i = 0; i < sz; i++) { nodes[i].Destroy(); } */ DeleteAllNodes(); } // Tree's methods // add a subnode void AddNode(const Pointer n) { nodes.push_back(n); } void AddCopyOfNode(const Pointer n) { nodes.push_back(n.Copy()); } // delete a subnode bool DeleteNode(const Int i) { if (i >= (Int) nodes.size()) return false; else { nodes.erase(nodes.begin() + i); return true; } } // I would love to just return the iterators to this vector, // but GCC3.2 issues warnings against it, says it's deprecated. // I really don't see how, but still... Never mind, do it this // way. It's only ever used in Expression::ReorderNodes() anyway std::vector >* GetNodeVectorPtr() { return &nodes; } // delete all subnodes void DeleteAllNodes() { nodes.erase(nodes.begin(), nodes.end()); } // get a subnode Pointer GetNode(const Int i) const { if (nodes.size() == 0) { throw ErrNotPermitted(30, "Tree", "GetNode", "nodes.size()==0", "vector of nodes is empty", HELPURL); } if (i < (Int)nodes.size()) return nodes[i]; else throw ErrNotPermitted(32, "Tree", "GetNode", "i>=nodes.size()", "not enough nodes in vector", HELPURL); } // get a subnode Pointer* GetNodePtr(const Int i) { if (nodes.size() == 0) { throw ErrNotPermitted(33, "Tree", "GetNodePtr", "nodes.size()==0", "vector of nodes is empty", HELPURL); } if (i < (Int)nodes.size()) return &(nodes[i]); else throw ErrNotPermitted(34, "Tree", "GetNodePtr", "i>=nodes.size()", "not enough nodes in vector", HELPURL); } // get a copy of subnode Pointer GetCopyOfNode(const Int i) { Int j = i; if (nodes.size() == 0) { throw ErrNotPermitted(31, "Tree", "GetNode", "nodes.size()==0", "vector of nodes is empty", HELPURL); } if (j >= (Int) nodes.size()) { throw ErrNotPermitted(35, "Tree", "GetCopyOfNode", "i>=nodes.size()", "not enough nodes in vector", HELPURL); } Pointer ret; ret.SetToCopyOf(nodes[j]); return ret; } // get the size of nodes Int GetSize() const { return nodes.size(); } // compare two trees bool operator == (const Tree& t) const { if (this == &t) { // fast check return true; } else { // recurse Int s = GetSize(); if (s == t.GetSize()) { Int i; for(i = 0; i < s; i++) { if (!(GetNode(i) == t.GetNode(i))) return false; } return true; } else return false; } } }; } /* namespace Ev3 */ #endif /* __EV3TREEHXX__ */ openturns-1.9/lib/src/Base/Diff/FiniteDifferenceGradient.cxx000066400000000000000000000135641307543307100241060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FiniteDifferenceGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/NoEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FiniteDifferenceGradient); static const Factory Factory_FiniteDifferenceGradient; /* Default constructor */ FiniteDifferenceGradient::FiniteDifferenceGradient() : GradientImplementation() , p_evaluation_(new NoEvaluation) { // Nothing to do } /* First Parameter constructor */ FiniteDifferenceGradient::FiniteDifferenceGradient( const Point & epsilon, const EvaluationPointer & p_evaluation) : GradientImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(epsilon) { /* Check if the dimension of the constant term is compatible with the linear and quadratic terms */ if (epsilon.getDimension() != p_evaluation->getInputDimension()) throw InvalidDimensionException(HERE) << "Epsilon dimension is incompatible with the given evaluation"; /* Check if any epsilon component is exactly zero */ for (UnsignedInteger i = 0; i < epsilon.getDimension(); i++) { if (epsilon[i] == 0.0) throw InvalidArgumentException(HERE) << "At least one of the components of epsilon is equal to 0.0, namely component " << i; } } /* SecondParameter constructor */ FiniteDifferenceGradient::FiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation) : GradientImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(Point(p_evaluation->getInputDimension(), epsilon)) { // Check if epsilon is exactly zero if (epsilon == 0.0) throw InvalidArgumentException(HERE) << "The given scalar epsilon is equal to 0.0"; } /* Parameter constructor with FiniteDifferenceStep*/ FiniteDifferenceGradient::FiniteDifferenceGradient( const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation) : GradientImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(finiteDifferenceStep) { Point epsilon(getEpsilon()); //Check if the dimension of the constant term is compatible with the linear and quadratic terms if (epsilon.getDimension() != p_evaluation->getInputDimension()) throw InvalidDimensionException(HERE) << "Epsilon dimension is incompatible with the given evaluation"; //Check if any epsilon component is exactly zero for (UnsignedInteger i = 0; i < epsilon.getDimension(); i++) { if (epsilon[i] == 0.0) throw InvalidArgumentException(HERE) << "At least one of the components of epsilon is equal to 0.0, namely component " << i; } } /* Virtual constructor */ FiniteDifferenceGradient * FiniteDifferenceGradient::clone() const { return new FiniteDifferenceGradient(*this); } /* Comparison operator */ Bool FiniteDifferenceGradient::operator ==(const FiniteDifferenceGradient & other) const { return (getEpsilon() == other.getEpsilon()); } /* String converter */ String FiniteDifferenceGradient:: __repr__() const { OSS oss; oss << "class=" << FiniteDifferenceGradient::GetClassName() << " name=" << getName() << " evaluation=" << p_evaluation_-> __repr__(); return oss; } /* Accessor for epsilon */ Point FiniteDifferenceGradient::getEpsilon() const { return finiteDifferenceStep_.getEpsilon(); } /* Accessor for the evaluation */ FiniteDifferenceGradient::EvaluationPointer FiniteDifferenceGradient::getEvaluation() const { return p_evaluation_; } /* Accessor for input point dimension */ UnsignedInteger FiniteDifferenceGradient::getInputDimension() const { return p_evaluation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger FiniteDifferenceGradient::getOutputDimension() const { return p_evaluation_->getOutputDimension(); } /* Accessor for the finite difference step */ void FiniteDifferenceGradient::setFiniteDifferenceStep(const FiniteDifferenceStep & finiteDifferenceStep) { finiteDifferenceStep_ = finiteDifferenceStep; } FiniteDifferenceStep FiniteDifferenceGradient::getFiniteDifferenceStep() const { return finiteDifferenceStep_; } /* Evaluation method */ Matrix FiniteDifferenceGradient::gradient(const Point & inP) const { throw NotYetImplementedException(HERE) << "In FiniteDifferenceGradient::gradient(const Point & inP) const"; } /* Method save() stores the object through the StorageManager */ void FiniteDifferenceGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "evaluation_", *p_evaluation_ ); adv.saveAttribute( "finiteDifferenceStep_", finiteDifferenceStep_ ); } /* Method load() reloads the object from the StorageManager */ void FiniteDifferenceGradient::load(Advocate & adv) { GradientImplementation::load(adv); TypedInterfaceObject evaluation; adv.loadAttribute( "evaluation_", evaluation ); p_evaluation_ = evaluation.getImplementation(); adv.loadAttribute( "finiteDifferenceStep_", finiteDifferenceStep_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/FiniteDifferenceHessian.cxx000066400000000000000000000135731307543307100237430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FiniteDifferenceHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/NoEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FiniteDifferenceHessian); static const Factory Factory_FiniteDifferenceHessian; /* Default constructor */ FiniteDifferenceHessian::FiniteDifferenceHessian() : HessianImplementation() , p_evaluation_(new NoEvaluation) { // Nothing to do } /* First Parameter constructor */ FiniteDifferenceHessian::FiniteDifferenceHessian( const Point & epsilon, const EvaluationPointer & p_evaluation) : HessianImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(epsilon) { /* Check if the dimension of the constant term is compatible with the linear and quadratic terms */ if (epsilon.getDimension() != p_evaluation->getInputDimension()) throw InvalidDimensionException(HERE) << "Epsilon dimension is incompatible with the given evaluation"; /* Check if any epsilon component is exactly zero */ for (UnsignedInteger i = 0; i < epsilon.getDimension(); i++) if (epsilon[i] == 0.0) throw InvalidArgumentException(HERE) << "At least one of the components of epsilon is equal to 0.0, namely component " << i; } /* SecondParameter constructor */ FiniteDifferenceHessian::FiniteDifferenceHessian(const Scalar epsilon, const EvaluationPointer & p_evaluation) : HessianImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(Point(p_evaluation->getInputDimension(), epsilon)) { // Check if epsilon is exactly zero if (epsilon == 0.0) throw InvalidArgumentException(HERE) << "The given scalar epsilon is equal to 0.0"; } /* Parameter constructor with FiniteDifferenceStep*/ FiniteDifferenceHessian::FiniteDifferenceHessian( const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation) : HessianImplementation() , p_evaluation_(p_evaluation) , finiteDifferenceStep_(finiteDifferenceStep) { Point epsilon(getEpsilon()); //Check if the dimension of the constant term is compatible with the linear and quadratic terms if (epsilon.getDimension() != p_evaluation->getInputDimension()) throw InvalidDimensionException(HERE) << "Epsilon dimension is incompatible with the given evaluation"; //Check if any epsilon component is exactly zero for (UnsignedInteger i = 0; i < epsilon.getDimension(); i++) if (epsilon[i] == 0.0) throw InvalidArgumentException(HERE) << "At least one of the components of epsilon is equal to 0.0, namely component " << i; } /* Virtual constructor */ FiniteDifferenceHessian * FiniteDifferenceHessian::clone() const { return new FiniteDifferenceHessian(*this); } /* Comparison operator */ Bool FiniteDifferenceHessian::operator ==(const FiniteDifferenceHessian & other) const { if (this == &other) return true; return (getEpsilon() == other.getEpsilon()); } /* String converter */ String FiniteDifferenceHessian:: __repr__() const { OSS oss; oss << "class=" << FiniteDifferenceHessian::GetClassName() << " name=" << getName() << " epsilon=" << getEpsilon() << " evaluation=" << p_evaluation_-> __repr__(); return oss; } /* Accessor for epsilon */ Point FiniteDifferenceHessian::getEpsilon() const { return finiteDifferenceStep_.getEpsilon(); } /* Accessor for the evaluation */ FiniteDifferenceHessian::EvaluationPointer FiniteDifferenceHessian::getEvaluation() const { return p_evaluation_; } /* Accessor for input point dimension */ UnsignedInteger FiniteDifferenceHessian::getInputDimension() const { return p_evaluation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger FiniteDifferenceHessian::getOutputDimension() const { return p_evaluation_->getOutputDimension(); } /* Accessor for the finite difference step */ void FiniteDifferenceHessian::setFiniteDifferenceStep(const FiniteDifferenceStep & finiteDifferenceStep) { finiteDifferenceStep_ = finiteDifferenceStep; } FiniteDifferenceStep FiniteDifferenceHessian::getFiniteDifferenceStep() const { return finiteDifferenceStep_; } /* Evaluation method */ SymmetricTensor FiniteDifferenceHessian::hessian(const Point & inP) const { throw NotYetImplementedException(HERE) << "In FiniteDifferenceHessian::hessian(const Point & inP) const"; } /* Method save() stores the object through the StorageManager */ void FiniteDifferenceHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "evaluation_", *p_evaluation_ ); adv.saveAttribute( "finiteDifferenceStep_", finiteDifferenceStep_ ); } /* Method load() reloads the object from the StorageManager */ void FiniteDifferenceHessian::load(Advocate & adv) { HessianImplementation::load(adv); TypedInterfaceObject evaluation; adv.loadAttribute( "evaluation_", evaluation ); p_evaluation_ = evaluation.getImplementation(); adv.loadAttribute( "finiteDifferenceStep_", finiteDifferenceStep_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/FiniteDifferenceStep.cxx000066400000000000000000000046561307543307100232660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface for finite difference steps * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FiniteDifferenceStep.hxx" #include "openturns/ConstantStep.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FiniteDifferenceStep); /* Default constructor */ FiniteDifferenceStep::FiniteDifferenceStep() : TypedInterfaceObject(new ConstantStep()) { // Nothing to do } /* Parameters constructor */ FiniteDifferenceStep::FiniteDifferenceStep(const Point & eps) : TypedInterfaceObject(new ConstantStep(eps)) { // Nothing to do } /* Constructor from implementation */ FiniteDifferenceStep::FiniteDifferenceStep(const FiniteDifferenceStepImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation pointer */ FiniteDifferenceStep::FiniteDifferenceStep(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* String converter */ String FiniteDifferenceStep::__repr__() const { OSS oss; oss << "class=" << FiniteDifferenceStep::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* Epsilon accessor */ void FiniteDifferenceStep::setEpsilon(const Point & epsilon) { copyOnWrite(); getImplementation()->setEpsilon(epsilon); } Point FiniteDifferenceStep::getEpsilon() const { return getImplementation()->getEpsilon(); } /* Compute step */ Point FiniteDifferenceStep::operator()(const Point & in) const { return getImplementation()->operator()(in); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/FiniteDifferenceStepImplementation.cxx000066400000000000000000000057601307543307100261710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of finite difference step * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FiniteDifferenceStepImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FiniteDifferenceStepImplementation); static const Factory Factory_FiniteDifferenceStepImplementation; /* Default constructor */ FiniteDifferenceStepImplementation::FiniteDifferenceStepImplementation() : PersistentObject() , epsilon_(1, 1.0) { // Nothing to do } /* Parameters constructor */ FiniteDifferenceStepImplementation::FiniteDifferenceStepImplementation(const Point & epsilon) : PersistentObject() , epsilon_(epsilon) { // Nothing to do } /* Virtual constructor */ FiniteDifferenceStepImplementation * FiniteDifferenceStepImplementation::clone() const { return new FiniteDifferenceStepImplementation(*this); } /* Epsilon accessor */ void FiniteDifferenceStepImplementation::setEpsilon(const Point & epsilon) { const UnsignedInteger dimension = epsilon.getDimension(); for (UnsignedInteger i = 0; i < dimension; ++ i) { if (epsilon[i] < SpecFunc::MinScalar ) throw InvalidArgumentException(HERE) << "Null epsilon for component " << i; } epsilon_ = epsilon; } Point FiniteDifferenceStepImplementation::getEpsilon() const { return epsilon_; } /* Evaluation operator */ Point FiniteDifferenceStepImplementation::operator()(const Point & inP) const { throw NotYetImplementedException(HERE) << "In FiniteDifferenceStepImplementation::operator()(const Point & inP) const"; } /* String converter */ String FiniteDifferenceStepImplementation::__repr__() const { OSS oss; oss << "class=" << FiniteDifferenceStepImplementation::GetClassName() << " epsilon=" << epsilon_.__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void FiniteDifferenceStepImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("epsilon_", epsilon_); } /* Method load() reloads the object from the StorageManager */ void FiniteDifferenceStepImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("epsilon_", epsilon_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/NonCenteredFiniteDifferenceGradient.cxx000066400000000000000000000100171307543307100262210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using noncentered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NonCenteredFiniteDifferenceGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NonCenteredFiniteDifferenceGradient); static const Factory Factory_NonCenteredFiniteDifferenceGradient; /* Default constructor */ NonCenteredFiniteDifferenceGradient::NonCenteredFiniteDifferenceGradient() : FiniteDifferenceGradient() { // Nothing to do } /* Parameter constructor */ NonCenteredFiniteDifferenceGradient::NonCenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(epsilon, p_evaluation) { } /* Parameter constructor */ NonCenteredFiniteDifferenceGradient::NonCenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(epsilon, p_evaluation) { } /* Parameter constructor */ NonCenteredFiniteDifferenceGradient::NonCenteredFiniteDifferenceGradient(const FiniteDifferenceStep & step, const EvaluationPointer & p_evaluation) : FiniteDifferenceGradient(step, p_evaluation) { // Nothing to do } /* Virtual constructor */ NonCenteredFiniteDifferenceGradient * NonCenteredFiniteDifferenceGradient::clone() const { return new NonCenteredFiniteDifferenceGradient(*this); } /* String converter */ String NonCenteredFiniteDifferenceGradient::__repr__() const { OSS oss(true); oss << "class=" << NonCenteredFiniteDifferenceGradient::GetClassName() << " name=" << getName() << " epsilon=" << getEpsilon() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String NonCenteredFiniteDifferenceGradient::__str__(const String & offset) const { return OSS(false) << offset << "NonCenteredFiniteDifferenceGradient epsilon : " << getEpsilon(); } /* Here is the interface that all derived class must implement */ /* Gradient () */ Matrix NonCenteredFiniteDifferenceGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = inP.getDimension(); Point step(finiteDifferenceStep_.operator()(inP)); if (inputDimension != step.getDimension()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; /* At which points do we have to compute the evaluation for the decentered finite difference. We need 1+dim pionts. */ Sample gridPoints(inputDimension + 1, inP); for(UnsignedInteger i = 0; i < inputDimension; ++i) gridPoints[i][i] += step[i]; /* Evaluate the evaluation */ Sample gridValues(p_evaluation_->operator()(gridPoints)); /* Get the value at the center of the grid */ Point center(gridValues[inputDimension]); /* Compute the gradient */ Matrix result(p_evaluation_->getInputDimension(), p_evaluation_->getOutputDimension()); for (UnsignedInteger i = 0; i < result.getNbRows(); ++i) for (UnsignedInteger j = 0; j < result.getNbColumns(); ++j) /* result(i, j) = (f_j(x + e_i) - f_j(x)) / e_i ~ df_j / dx_i */ result(i, j) = (gridValues[i][j] - center[j]) / step[i]; return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Diff/openturns/000077500000000000000000000000001307543307100205375ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Diff/openturns/BlendedStep.hxx000066400000000000000000000040661307543307100234670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of BlendedStep * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BLENDEDSTEP_HXX #define OPENTURNS_BLENDEDSTEP_HXX #include "openturns/FiniteDifferenceStepImplementation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API BlendedStep : public FiniteDifferenceStepImplementation { CLASSNAME; public: /** Default constructor */ BlendedStep(); /** Parameters constructor */ explicit BlendedStep(const Point & epsilon, const Scalar eta = ResourceMap::GetAsScalar( "BlendedStep-DefaultEta" )); /** Parameters constructor */ BlendedStep(const Point & epsilon, const Point & eta); /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual BlendedStep * clone() const; /** Compute step */ virtual Point operator()(const Point & inP) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Eta accessor */ void setEta(const Point & eta); Point getEta() const; protected: /** Step offset */ Point eta_; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Diff/openturns/CenteredFiniteDifferenceGradient.hxx000066400000000000000000000060171307543307100276150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CENTEREDFINITEDIFFERENCEGRADIENT_HXX #define OPENTURNS_CENTEREDFINITEDIFFERENCEGRADIENT_HXX #include "openturns/FiniteDifferenceGradient.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CenteredFiniteDifferenceGradient * @brief This class is for the creation of a numerical math gradient implementation * * This class is for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula */ class OT_API CenteredFiniteDifferenceGradient : public FiniteDifferenceGradient { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ CenteredFiniteDifferenceGradient(); /** Parameter constructor */ CenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationPointer & p_evaluation); /** Second parameter constructor */ CenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation); /** Constructor from finite difference step */ CenteredFiniteDifferenceGradient(const FiniteDifferenceStep & step, const EvaluationPointer & p_evaluation); /* Virtual constructor */ virtual CenteredFiniteDifferenceGradient * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** This method computes the gradient at some point * @param in The point where the gradient is computed * @result A matrix constructed with the dF_i/dx_j values (Jacobian transposed) */ virtual Matrix gradient(const Point & inP) const; protected: private: }; /* class CenteredFiniteDifferenceGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CENTEREDFINITEDIFFERENCEGRADIENT_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/CenteredFiniteDifferenceHessian.hxx000066400000000000000000000061601307543307100274510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math hessian implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CENTEREDFINITEDIFFERENCEHESSIAN_HXX #define OPENTURNS_CENTEREDFINITEDIFFERENCEHESSIAN_HXX #include "openturns/FiniteDifferenceHessian.hxx" #include "openturns/HessianImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CenteredFiniteDifferenceHessian * @brief This class is for the creation of a numerical math hessian implementation * * This class is for the creation of a numerical math hessian implementation * form a numerical math evaluation implementation by using centered * finite difference formula */ class OT_API CenteredFiniteDifferenceHessian : public FiniteDifferenceHessian { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ CenteredFiniteDifferenceHessian(); /** Parameter constructor */ CenteredFiniteDifferenceHessian(const Point & epsilon, const EvaluationPointer & p_evaluation); /** Second parameter constructor */ CenteredFiniteDifferenceHessian(const Scalar epsilon, const EvaluationPointer & p_evaluation); /** Constructor with FiniteDifferenceStep */ CenteredFiniteDifferenceHessian(const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation); /* Virtual constructor */ virtual CenteredFiniteDifferenceHessian * clone() const; /* Comparison operator */ Bool operator ==(const CenteredFiniteDifferenceHessian & other) const; /* String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** This method computes the hessian at some point * @param in The point where the hessian is computed * @result A tensor */ virtual SymmetricTensor hessian(const Point & inP) const; protected: private: }; /* class CenteredFiniteDifferenceHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CENTEREDFINITEDIFFERENCEHESSIAN_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/ConstantStep.hxx000066400000000000000000000033031307543307100237140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of ConstantStep * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONSTANTSTEP_HXX #define OPENTURNS_CONSTANTSTEP_HXX #include "openturns/FiniteDifferenceStepImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API ConstantStep : public FiniteDifferenceStepImplementation { CLASSNAME; public: /** Default constructor */ ConstantStep(); /** Parameters constructor */ explicit ConstantStep(const Point & eps); /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual ConstantStep * clone() const; /** Compute step */ Point operator()(const Point & inP) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Diff/openturns/FiniteDifferenceGradient.hxx000066400000000000000000000076141307543307100261470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FINITEDIFFERENCEGRADIENT_HXX #define OPENTURNS_FINITEDIFFERENCEGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/FiniteDifferenceStep.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FiniteDifferenceGradient * * This class is for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula */ class OT_API FiniteDifferenceGradient : public GradientImplementation { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ FiniteDifferenceGradient(); /** First Parameter constructor */ FiniteDifferenceGradient(const Point & epsilon, const EvaluationPointer & p_evaluation); /** SecondParameter constructor */ FiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation); /** Constructor with FiniteDifferenceStep */ FiniteDifferenceGradient(const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation); /** Comparison operator */ virtual Bool operator ==(const FiniteDifferenceGradient & other) const; /** String converter */ virtual String __repr__() const; /** Accessor for input point dimension * @return The size of the point passed to the gradient method */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension * @return The size of the point returned by the function whose gradient is computed */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the epsilon */ virtual Point getEpsilon() const; /** Accessor for the evaluation */ virtual EvaluationPointer getEvaluation() const; /** Accessor for the finite difference step */ virtual void setFiniteDifferenceStep(const FiniteDifferenceStep & finiteDifferenceStep); virtual FiniteDifferenceStep getFiniteDifferenceStep() const; /* Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /* Here is the interface that all derived class must implement */ /** Virtual Constructor */ virtual FiniteDifferenceGradient * clone() const; /** This method computes the gradient at some point * @param in The point where the gradient is computed * @result A matrix constructed with the dF_i/dx_j values (Jacobian transposed) */ virtual Matrix gradient(const Point & inP) const; protected: EvaluationPointer p_evaluation_; FiniteDifferenceStep finiteDifferenceStep_; }; /* class FiniteDifferenceGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FINITEDIFFERENCEGRADIENT_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/FiniteDifferenceHessian.hxx000066400000000000000000000076761307543307100260140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FINITEDIFFERENCE_HXX #define OPENTURNS_FINITEDIFFERENCE_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/FiniteDifferenceStep.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FiniteDifferenceHessian * * This class is for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using centered * finite difference formula */ class OT_API FiniteDifferenceHessian : public HessianImplementation { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ FiniteDifferenceHessian(); /** First Parameter constructor */ FiniteDifferenceHessian(const Point & epsilon, const EvaluationPointer & p_evaluation); /** SecondParameter constructor */ FiniteDifferenceHessian(const Scalar epsilon, const EvaluationPointer & p_evaluation); /** Constructor with FiniteDifferenceStep */ FiniteDifferenceHessian(const FiniteDifferenceStep & finiteDifferenceStep, const EvaluationPointer & p_evaluation); /** Comparison operator */ virtual Bool operator ==(const FiniteDifferenceHessian & other) const; /** String converter */ virtual String __repr__() const; /** Accessor for input point dimension * @return The size of the point passed to the gradient method */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension * @return The size of the point returned by the function whose gradient is computed */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the epsilon */ virtual Point getEpsilon() const; /** Accessor for the evaluation */ virtual EvaluationPointer getEvaluation() const; /** Accessor for the finite difference step */ virtual void setFiniteDifferenceStep(const FiniteDifferenceStep & finiteDifferenceStep); virtual FiniteDifferenceStep getFiniteDifferenceStep() const; /* Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /* Here is the interface that all derived class must implement */ /** Virtual Constructor */ virtual FiniteDifferenceHessian * clone() const; /** This method computes the gradient at some point * @param in The point where the gradient is computed * @result A matrix constructed with the dF_i/dx_j values (Jacobian transposed) */ virtual SymmetricTensor hessian(const Point & inP) const; protected: /* The underlying evaluation object */ EvaluationPointer p_evaluation_; /* The finite difference strategy */ FiniteDifferenceStep finiteDifferenceStep_; }; /* class FiniteDifferenceHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FINITEDIFFERENCE_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/FiniteDifferenceStep.hxx000066400000000000000000000034711307543307100253220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface for finite difference steps * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FINITEDIFFERENCESTEP_HXX #define OPENTURNS_FINITEDIFFERENCESTEP_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FiniteDifferenceStepImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API FiniteDifferenceStep : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ FiniteDifferenceStep(); /** Parameters constructor */ explicit FiniteDifferenceStep(const Point & eps); /** Constructor from implementation */ FiniteDifferenceStep(const FiniteDifferenceStepImplementation & implementation); #ifndef SWIG /** Constructor from implementation pointer */ FiniteDifferenceStep(const Implementation & p_implementation); #endif /** String converter */ String __repr__() const; /** Epsilon accessor */ void setEpsilon(const Point & epsilon); Point getEpsilon() const; /** Compute step */ Point operator()(const Point & inP) const; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Diff/openturns/FiniteDifferenceStepImplementation.hxx000066400000000000000000000041431307543307100302250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of finite difference step * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FINITEDIFFERENCESTEPIMPLEMENTATION_HXX #define OPENTURNS_FINITEDIFFERENCESTEPIMPLEMENTATION_HXX #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API FiniteDifferenceStepImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ FiniteDifferenceStepImplementation(); /** Parameters constructor */ explicit FiniteDifferenceStepImplementation(const Point & epsilon); /** String converter */ virtual String __repr__() const; /** Epsilon accessor */ virtual void setEpsilon(const Point & epsilon); virtual Point getEpsilon() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual FiniteDifferenceStepImplementation * clone() const; /** Compute value */ virtual Point operator()(const Point & inP) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /* The small increments */ Point epsilon_; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FINITEDIFFERENCESTEPIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/NonCenteredFiniteDifferenceGradient.hxx000066400000000000000000000060321307543307100302650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using noncentered * finite difference formula. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NONCENTEREDFINITEDIFFERENCEGRADIENT_HXX #define OPENTURNS_NONCENTEREDFINITEDIFFERENCEGRADIENT_HXX #include "openturns/FiniteDifferenceGradient.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NonCenteredFiniteDifferenceGradient * @brief This class is for the creation of a numerical math gradient implementation * * This class is for the creation of a numerical math gradient implementation * form a numerical math evaluation implementation by using noncentered * finite difference formula */ class OT_API NonCenteredFiniteDifferenceGradient : public FiniteDifferenceGradient { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ NonCenteredFiniteDifferenceGradient(); /** Parameter constructor */ NonCenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationPointer & p_evaluation); /** Second parameter constructor */ NonCenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationPointer & p_evaluation); /** Constructor from finite difference step */ NonCenteredFiniteDifferenceGradient(const FiniteDifferenceStep & step, const EvaluationPointer & p_evaluation); /** Virtual constructor */ virtual NonCenteredFiniteDifferenceGradient * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** This method computes the gradient at some point * @param in The point where the gradient is computed * @result A matrix constructed with the dF_i/dx_j values (Jacobian transposed) */ virtual Matrix gradient(const Point & inP) const; protected: private: }; /* class NonCenteredFiniteDifferenceGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NONCENTEREDFINITEDIFFERENCEGRADIENT_HXX */ openturns-1.9/lib/src/Base/Diff/openturns/OTDiff.hxx000066400000000000000000000026041307543307100224050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Diff * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTDIFF_HXX #define OPENTURNS_OTDIFF_HXX #include "openturns/FiniteDifferenceStepImplementation.hxx" #include "openturns/FiniteDifferenceStep.hxx" #include "openturns/ConstantStep.hxx" #include "openturns/BlendedStep.hxx" #include "openturns/FiniteDifferenceGradient.hxx" #include "openturns/FiniteDifferenceHessian.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/NonCenteredFiniteDifferenceGradient.hxx" #endif /* OPENTURNS_OTDIFF_HXX */ openturns-1.9/lib/src/Base/Experiments/000077500000000000000000000000001307543307100201355ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Experiments/Axial.cxx000066400000000000000000000056411307543307100217250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the axial experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/Axial.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Axial); static const Factory Factory_Axial; /* Default constructor */ Axial::Axial() : StratifiedExperiment() { // Nothing to do } /* Constructor with parameters */ Axial::Axial(const Point & center, const Point & levels) : StratifiedExperiment(center, levels) { // Nothing to do } /* Constructor with parameters */ Axial::Axial(const UnsignedInteger dimension, const Point & levels) : StratifiedExperiment(Point(dimension, 0.0), levels) { // Nothing to do } /* Virtual constructor */ Axial * Axial::clone() const { return new Axial(*this); } /* Experiment plane generation */ Sample Axial::generate() const { /* Dimension of the realizations */ const UnsignedInteger dimension = center_.getDimension(); /* Number of level to be generated */ const UnsignedInteger levelNumber = levels_.getDimension(); /* Size of the sample to be generated: 1 + 2 x number of levels x dimension */ const UnsignedInteger size = 1 + 2 * levelNumber * dimension; Sample axialPlane(size, center_); axialPlane.setName("Axial plane"); UnsignedInteger index = 1; /* For each level of the axial plane */ for(UnsignedInteger levelIndex = 0; levelIndex < levelNumber; ++levelIndex) { const Scalar levelValue = levels_[levelIndex]; /* For each vertex of one half of the current level */ for(UnsignedInteger vertex = 0; vertex < dimension; ++vertex) { /* Compute the coordinates of the positive vertex */ axialPlane[index][vertex] += levelValue; ++index; /* Compute the coordinates of the negative vertex */ axialPlane[index][vertex] -= levelValue; ++index; } // vertex } // levelIndex return axialPlane; } // generate() /* String converter */ String Axial::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " center=" << center_ << " levels=" << levels_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/Box.cxx000066400000000000000000000117611307543307100214170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the box experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OTprivate.hxx" #include "openturns/Box.hxx" #include "openturns/Tuples.hxx" #include "openturns/SpecFunc.hxx" // for boost.math.round #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Box); static const Factory Factory_Box; /* Default constructor */ Box::Box() : StratifiedExperiment() { // Nothing to do } /* Constructor with parameters */ Box::Box(const Point & levels) : StratifiedExperiment(Point(levels.getDimension(), 0.0), levels) , bounds_(levels_.getDimension()) { // Check if there is the same number of levels than the dimension of the experiment plane if (levels.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: the levels dimension must be > 0"; setLevels(levels); } /* Constructor with parameters */ Box::Box(const Indices & levels) : StratifiedExperiment(Point(levels.getSize(), 0.0), Point(levels.getSize(), 0.0)) , bounds_(levels_.getDimension()) { // Check if there is the same number of levels than the dimension of the experiment plane const UnsignedInteger size = levels.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the levels dimension must be > 0"; setLevels(Collection(levels.begin(), levels.end())); } Box::Box(const Indices & levels, const Interval & bounds) : StratifiedExperiment(Point(levels.getSize(), 0.0), Point(levels.getSize(), 0.0)) , bounds_(bounds) { // Check if there is the same number of levels than the dimension of the experiment plane const UnsignedInteger size = levels.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the levels dimension must be > 0"; setLevels(Collection(levels.begin(), levels.end())); if (bounds.getDimension() != size) throw InvalidArgumentException(HERE) << "Error: the bounds dimension must match the levels dimension"; } /* Virtual constructor */ Box * Box::clone() const { return new Box(*this); } /* Experiment plane generation The box [0, 1]^n is uniformly sampled in each dimension levels counts the number of interior points in each dimension */ Sample Box::generate() const { const UnsignedInteger dimension = levels_.getDimension(); Indices bounds(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) bounds[i] = static_cast< UnsignedInteger > (round(levels_[i] + 2.0)); Tuples::IndicesCollection tuples(Tuples(bounds).generate()); const UnsignedInteger size = tuples.getSize(); Sample boxPlane(size, dimension); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j) boxPlane[i][j] = tuples[i][j] / (levels_[j] + 1.0); // scale sample if (bounds_ != Interval(dimension)) { const Point lowerBound(bounds_.getLowerBound()); const Point upperBound(bounds_.getUpperBound()); const Point delta(upperBound - lowerBound); boxPlane *= delta; boxPlane += lowerBound; } return boxPlane; } // generate() /* String converter */ String Box::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " levels=" << levels_ << " bounds=" << bounds_; return oss; } /** Specific levels accessor */ void Box::setLevels(const Point & levels) { UnsignedInteger dimension = center_.getDimension(); UnsignedInteger size = levels.getDimension(); if (size != dimension) throw InvalidArgumentException(HERE) << "Error: levels dimension must equal center dimension for the Box design of experiment, here levels dimension=" << size << " and center dimension=" << dimension; for (UnsignedInteger i = 0; i < dimension; ++i) if (!(levels[i] >= 0.0)) throw InvalidArgumentException(HERE) << "Error: levels values must be greater or equal to 0 for the Box design of experiment"; StratifiedExperiment::setLevels(levels); } /* Method save() stores the object through the StorageManager */ void Box::save(Advocate & adv) const { StratifiedExperiment::save(adv); adv.saveAttribute("bounds_", bounds_); } /* Method load() reloads the object from the StorageManager */ void Box::load(Advocate & adv) { StratifiedExperiment::load(adv); adv.loadAttribute("bounds_", bounds_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/CMakeLists.txt000066400000000000000000000025701307543307100227010ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Experiment.cxx) ot_add_source_file (ExperimentImplementation.cxx) ot_add_source_file (StratifiedExperiment.cxx) ot_add_source_file (Axial.cxx) ot_add_source_file (Box.cxx) ot_add_source_file (Composite.cxx) ot_add_source_file (Factorial.cxx) ot_add_source_file (CombinatorialGenerator.cxx) ot_add_source_file (CombinatorialGeneratorImplementation.cxx) ot_add_source_file (Combinations.cxx) ot_add_source_file (KPermutations.cxx) ot_add_source_file (SphereUniformNorm.cxx) ot_add_source_file (SphereUniformNormImplementation.cxx) ot_add_source_file (Tuples.cxx) ot_install_header_file (OTExperiments.hxx) ot_install_header_file (Experiment.hxx) ot_install_header_file (ExperimentImplementation.hxx) ot_install_header_file (StratifiedExperiment.hxx) ot_install_header_file (Axial.hxx) ot_install_header_file (Box.hxx) ot_install_header_file (Composite.hxx) ot_install_header_file (Factorial.hxx) ot_install_header_file (CombinatorialGenerator.hxx) ot_install_header_file (CombinatorialGeneratorImplementation.hxx) ot_install_header_file (Combinations.hxx) ot_install_header_file (KPermutations.hxx) ot_install_header_file (SphereUniformNorm.hxx) ot_install_header_file (SphereUniformNormImplementation.hxx) ot_install_header_file (Tuples.hxx) openturns-1.9/lib/src/Base/Experiments/Combinations.cxx000066400000000000000000000057201307543307100233120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the combinations experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OTprivate.hxx" #include "openturns/Combinations.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Combinations); /* Default constructor */ Combinations::Combinations() : CombinatorialGeneratorImplementation() , k_(1) , n_(1) { // Nothing to do } /* Constructor with parameters */ Combinations::Combinations(const UnsignedInteger k, const UnsignedInteger n) : CombinatorialGeneratorImplementation() , k_(k) , n_(n) { // Nothing to do } /* Virtual constructor */ Combinations * Combinations::clone() const { return new Combinations(*this); } /* Experiment plane generation : * all the combinations of k elements amongst {0, ..., n-1} */ CombinatorialGeneratorImplementation::IndicesCollection Combinations::generate() { /* Quick return for trivial cases */ if (k_ > n_) return IndicesCollection(0, Indices(k_)); if (k_ == 0) return IndicesCollection(1, Indices(0)); Indices indices(k_); indices.fill(); if (k_ == n_) return IndicesCollection(1, indices); /* Size of the sample to be generated: C(k, n) */ const UnsignedInteger size = SpecFunc::BinomialCoefficient(n_, k_); IndicesCollection allCombinations(size, indices); for (UnsignedInteger flatIndex = 0; flatIndex < size; ++flatIndex) { allCombinations[flatIndex] = indices; /* Update the indices */ UnsignedInteger t = k_ - 1; while ((t != 0) && (indices[t] == n_ + t - k_)) --t; ++indices[t]; for (UnsignedInteger i = t + 1; i < k_; ++i) indices[i] = indices[i - 1] + 1; } return allCombinations; } // generate() /* String converter */ String Combinations::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " k=" << k_ << " n=" << n_; return oss; } /* Subset size accessor */ void Combinations::setK(const UnsignedInteger k) { k_ = k; } UnsignedInteger Combinations::getK() const { return k_; } /* Set size accessor */ void Combinations::setN(const UnsignedInteger n) { n_ = n; } UnsignedInteger Combinations::getN() const { return n_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/CombinatorialGenerator.cxx000066400000000000000000000043071307543307100253170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an combinatorialGenerator plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CombinatorialGenerator.hxx" #include "openturns/Tuples.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CombinatorialGenerator); /* Default constructor */ CombinatorialGenerator::CombinatorialGenerator() : TypedInterfaceObject(Tuples().clone()) { // Nothing to do } /* Constructor from implementation pointer */ CombinatorialGenerator::CombinatorialGenerator(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation */ CombinatorialGenerator::CombinatorialGenerator(const CombinatorialGeneratorImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* String converter */ String CombinatorialGenerator::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName () << " implementation=" << getImplementation()->__repr__(); return oss; } void CombinatorialGenerator::setImplementation(const Implementation & p_implementation) { copyOnWrite(); getImplementation() = p_implementation; } /* Sample generation */ CombinatorialGenerator::IndicesCollection CombinatorialGenerator::generate() { return getImplementation()->generate(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/CombinatorialGeneratorImplementation.cxx000066400000000000000000000034721307543307100302270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an combinatorialGenerator plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/CombinatorialGeneratorImplementation.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CombinatorialGeneratorImplementation); /* Default constructor */ CombinatorialGeneratorImplementation::CombinatorialGeneratorImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ CombinatorialGeneratorImplementation * CombinatorialGeneratorImplementation::clone() const { return new CombinatorialGeneratorImplementation(*this); } /* String converter */ String CombinatorialGeneratorImplementation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName(); return oss; } /* Sample generation */ CombinatorialGeneratorImplementation::IndicesCollection CombinatorialGeneratorImplementation::generate() { throw NotYetImplementedException(HERE) << "In CombinatorialGeneratorImplementation::generate()"; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/Composite.cxx000066400000000000000000000071711307543307100226310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the composite experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Factorial.hxx" #include "openturns/Axial.hxx" #include "openturns/Composite.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Composite); static const Factory Factory_Composite; /* Default constructor */ Composite::Composite() : StratifiedExperiment() { // Nothing to do } /* Constructor with parameters */ Composite::Composite(const Point & center, const Point & levels) : StratifiedExperiment(center, levels) { // Nothing to do } /* Constructor with parameters */ Composite::Composite(const UnsignedInteger dimension, const Point & levels) : StratifiedExperiment(Point(dimension, 0.0), levels) { // Nothing to do } /* Virtual constructor */ Composite * Composite::clone() const { return new Composite(*this); } /* Experiment plane generation */ Sample Composite::generate() const { /* Dimension of the realizations */ const UnsignedInteger dimension = center_.getDimension(); /* Hypercube number of vertices */ const UnsignedInteger verticesNumber = (UnsignedInteger)round(pow(2.0, static_cast(dimension))); /* Number of levels to be generated */ const UnsignedInteger levelNumber = levels_.getDimension(); /* Size of the sample to be generated: 1 + number of levels x (2 x dimension + 2^dimension) */ UnsignedInteger size = 1 + levelNumber * (2 * dimension + verticesNumber); /* A composite plane is made of an axial plane and a factorial plane with the same levels */ /* First the axial plane */ Axial axial(center_, levels_); const Sample axialPlane(axial.generate()); /* Second the factorial plane */ Factorial factorial(center_, levels_); const Sample factorialPlane(factorial.generate()); /* We create the composite plane by copying the factorial plane (larger than the axial plane) then we append all the elements of the axial plane excepted its first one, which is the center of the plane and thus already present in the factorial plane */ Sample compositePlane(size, center_); compositePlane.setName("Composite plane"); UnsignedInteger index = 0; size = factorialPlane.getSize(); for(UnsignedInteger factorialIndex = 0; factorialIndex < size; factorialIndex++) { compositePlane[index] = factorialPlane[factorialIndex]; index++; } size = axialPlane.getSize(); for(UnsignedInteger axialIndex = 1; axialIndex < size; axialIndex++) { compositePlane[index] = axialPlane[axialIndex]; index++; } return compositePlane; } // generate() /* String converter */ String Composite::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " center=" << center_ << " levels=" << levels_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/Experiment.cxx000066400000000000000000000037441307543307100230110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Experiment.hxx" #include "openturns/Axial.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Experiment); /* Default constructor */ Experiment::Experiment() : TypedInterfaceObject(new Axial()) { // Nothing to do } /* Constructor from implementation pointer */ Experiment::Experiment(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation */ Experiment::Experiment(const ExperimentImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* String converter */ String Experiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName () << " implementation=" << getImplementation()->__repr__(); return oss; } void Experiment::setImplementation(const Implementation & p_implementation) { copyOnWrite(); getImplementation() = p_implementation; } /* Sample generation */ Sample Experiment::generate() const { return getImplementation()->generate(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/ExperimentImplementation.cxx000066400000000000000000000032131307543307100257060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/ExperimentImplementation.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ExperimentImplementation); /* Default constructor */ ExperimentImplementation::ExperimentImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ ExperimentImplementation * ExperimentImplementation::clone() const { return new ExperimentImplementation(*this); } /* String converter */ String ExperimentImplementation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName(); return oss; } /* Sample generation */ Sample ExperimentImplementation::generate() const { throw NotYetImplementedException(HERE) << "In ExperimentImplementation::generate()"; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/Factorial.cxx000066400000000000000000000067241307543307100225760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the factorial experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/Factorial.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" // for boost.math.round #include BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Factorial); static const Factory Factory_Factorial; /* Default constructor */ Factorial::Factorial() : StratifiedExperiment() { // Nothing to do } /* Constructor with parameters */ Factorial::Factorial(const Point & center, const Point & levels) : StratifiedExperiment(center, levels) { // Nothing to do } /* Constructor with parameters */ Factorial::Factorial(const UnsignedInteger dimension, const Point & levels) : StratifiedExperiment(Point(dimension, 0.0), levels) { // Nothing to do } /* Virtual constructor */ Factorial * Factorial::clone() const { return new Factorial(*this); } /* Experiment plane generation */ Sample Factorial::generate() const { /* Dimension of the realizations */ const UnsignedInteger dimension = center_.getDimension(); /* Hypercube number of vertices */ const UnsignedInteger verticesNumber = (UnsignedInteger)round(pow(2.0, static_cast(dimension))); /* Number of levels to be generated */ const UnsignedInteger levelNumber = levels_.getDimension(); /* Size of the sample to be generated: 1 + number of levels x 2^dimension */ const UnsignedInteger size = 1 + levelNumber * verticesNumber; Sample factorialPlane(size, center_); factorialPlane.setName("Factorial plane"); UnsignedInteger index = 1; /* For each level of the factorial plane */ for(UnsignedInteger levelIndex = 0; levelIndex < levelNumber; ++levelIndex) { const Scalar levelValue = levels_[levelIndex]; /* For each vertex of the current level */ for(UnsignedInteger vertex = 0; vertex < verticesNumber; ++vertex) { /* Compute the coordinates of the current vertex */ UnsignedInteger binaryIndex = vertex; for(UnsignedInteger coordinate = 0; coordinate < dimension; ++coordinate) { /* If the current bit of binaryIndex is 1, set the coordinate to center[coordinate]+levelValue, else set it to center[coordinate]-levelValue */ factorialPlane[index][coordinate] += (2.0 * (binaryIndex % 2) - 1.0) * levelValue; binaryIndex /= 2; } // coordinate ++index; } // vertex } // levelIndex return factorialPlane; } // generate() /* String converter */ String Factorial::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " center=" << center_ << " levels=" << levels_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/KPermutations.cxx000066400000000000000000000101671307543307100234730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the kPermutations experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include "openturns/OTprivate.hxx" #include "openturns/KPermutations.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Combinations.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KPermutations); /* Default constructor */ KPermutations::KPermutations() : CombinatorialGeneratorImplementation() , k_(1) , n_(1) { // Nothing to do } /* Constructor with parameters */ KPermutations::KPermutations(const UnsignedInteger n) : CombinatorialGeneratorImplementation() , k_(n) , n_(n) { // Nothing to do } KPermutations::KPermutations(const UnsignedInteger k, const UnsignedInteger n) : CombinatorialGeneratorImplementation() , k_(k) , n_(n) { // Nothing to do } /* Virtual constructor */ KPermutations * KPermutations::clone() const { return new KPermutations(*this); } /* Experiment plane generation : * all the kPermutations of k elements amongst {0, ..., n-1} */ CombinatorialGeneratorImplementation::IndicesCollection KPermutations::generate() { /* Quick return for trivial cases */ if (k_ > n_) return IndicesCollection(0, Indices(k_)); if (k_ == 0) return IndicesCollection(1, Indices(0)); Indices indices(k_); indices.fill(); /* Size of the sample to be generated: A(k, n) */ const UnsignedInteger size = static_cast< UnsignedInteger >(round(exp(SpecFunc::LogGamma(n_ + 1) - SpecFunc::LogGamma(n_ - k_ + 1)))); IndicesCollection allKPermutations(size, indices); /* First, generate all the permutations of k integers */ IndicesCollection allPermutations(static_cast< UnsignedInteger >(round(exp(SpecFunc::LogGamma(k_ + 1)))), indices); UnsignedInteger flatIndex = 1; while (std::next_permutation(indices.begin(), indices.end())) { std::copy(indices.begin(), indices.end(), allPermutations[flatIndex].begin()); ++flatIndex; } /* Quick return if k == n */ if (k_ == n_) return allPermutations; /* Second, generate all the combinations of k out of n elements */ IndicesCollection allCombinations(Combinations(k_, n_).generate()); flatIndex = 0; const UnsignedInteger combinationSize = allCombinations.getSize(); const UnsignedInteger permutationSize = allPermutations.getSize(); for (UnsignedInteger i = 0; i < combinationSize; ++i) { /* Base combination */ const Indices & combination(allCombinations[i]); /* Generate all the permutations of the base combination */ for (UnsignedInteger j = 0; j < permutationSize; ++j) { /* Current permutation */ const Indices & permutation(allPermutations[j]); for (UnsignedInteger k = 0; k < k_; ++k) allKPermutations[flatIndex][k] = combination[permutation[k]]; ++flatIndex; } } return allKPermutations; } // generate() /* String converter */ String KPermutations::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " k=" << k_ << " n=" << n_; return oss; } /* Subset size accessor */ void KPermutations::setK(const UnsignedInteger k) { k_ = k; } UnsignedInteger KPermutations::getK() const { return k_; } /* Set size accessor */ void KPermutations::setN(const UnsignedInteger n) { n_ = n; } UnsignedInteger KPermutations::getN() const { return n_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/SphereUniformNorm.cxx000066400000000000000000000056541307543307100243150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of a generic grid iterator. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SphereUniformNorm.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SphereUniformNorm); /** Default constructor */ SphereUniformNorm::SphereUniformNorm() : TypedInterfaceObject(new SphereUniformNormImplementation(Point(0), true)) { } /** Default constructor */ SphereUniformNorm::SphereUniformNorm(const Point step, const Bool symmetric) : TypedInterfaceObject(new SphereUniformNormImplementation(step, symmetric)) { // Nothing to do } /** Copy constructor */ SphereUniformNorm::SphereUniformNorm(const SphereUniformNormImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { } /** Constructor from implementation */ SphereUniformNorm::SphereUniformNorm(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { } /** Constructor from implementation pointer */ SphereUniformNorm::SphereUniformNorm(SphereUniformNormImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { } /** Constructor from grid steps */ SphereUniformNorm SphereUniformNorm::GetFromGridSteps(const Point & step, const Bool symmetric) { SphereUniformNorm result(SphereUniformNormImplementation::GetFromGridSteps(step, symmetric)); return result; } /** Symmettric accessor */ Bool SphereUniformNorm::isSymmetric() const { return getImplementation()->isSymmetric(); } Sample SphereUniformNorm::getPoints(const UnsignedInteger distance) const { return getImplementation()->getPoints(distance); } /** Get index offset, needed by RandomMixture cache */ UnsignedInteger SphereUniformNorm::getOffsetLevel(const UnsignedInteger distance) const { return getImplementation()->getOffsetLevel(distance); } /* String converter */ String SphereUniformNorm::__repr__() const { return getImplementation()->__repr__(); } String SphereUniformNorm::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/SphereUniformNormImplementation.cxx000066400000000000000000000264111307543307100272150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of a generic grid iterator. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SphereUniformNormImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS class SphereUniformNorm1D : public SphereUniformNormImplementation { public: SphereUniformNorm1D(const Point & step, const Bool symmetric) : SphereUniformNormImplementation(step, symmetric) { if (step.getDimension() != 1) throw InvalidDimensionException(HERE) << "Expected a point of dimension 1"; stepX_ = step[0]; } Sample getPoints(const UnsignedInteger distance) const { const UnsignedInteger size = getSizeOfLevel(distance); Sample points(size, 1); if (distance == 0) { points[0] = Point(1, 0.0); } else { const Scalar cx = distance * stepX_; Point element(1, cx); element[0] = cx; points[0] = element; if (!isSymmetric()) { element[0] = -cx; points[1] = element; } } return points; } UnsignedInteger getOffsetLevel(const UnsignedInteger distance) const { if (distance == 0) return 0; if (isSymmetric()) return distance; else return 2 * distance - 1; } private: UnsignedInteger getSizeOfLevel(const UnsignedInteger distance) const { if (distance == 0 || isSymmetric()) return 1; else return 2; } Scalar stepX_; }; class SphereUniformNorm2D : public SphereUniformNormImplementation { public: SphereUniformNorm2D(const Point & step, const Bool symmetric) : SphereUniformNormImplementation(step, symmetric) { // nothing to do if (step.getDimension() != 2) throw InvalidDimensionException(HERE) << "Expected a point of dimension 2"; stepX_ = step[0]; stepY_ = step[1]; } Sample getPoints(const UnsignedInteger distance) const { // Basic method that uses Sample // TODO use of iterators ? if (distance == 0) return Sample(1, 2); const UnsignedInteger size = getSizeOfLevel(distance); Sample points(size, 2); UnsignedInteger iterator = 0; const Scalar cx = distance * stepX_; const Scalar cy = distance * stepY_; if (isSymmetric()) { Point element(2, 0.0); element[1] = cy; // 1) top for (UnsignedInteger ix = 0; ix < 2 * distance; ++ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } // 2) right element[0] = cx; for (UnsignedInteger iy = 2 * distance; iy > 0; --iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } } else { Point element(2, 0.0); // 1) left element[0] = - cx; for (UnsignedInteger iy = 0; iy < 2 * distance; ++iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } // 2) top element[1] = cy; for (UnsignedInteger ix = 0; ix < 2 * distance; ++ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } // 3) right element[0] = cx; for (UnsignedInteger iy = 2 * distance; iy > 0; --iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } // 4) bottom element[1] = - cy; for (UnsignedInteger ix = 2 * distance; ix > 0; --ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } } if (iterator != size) throw InternalException(HERE) << "Error in SphereUniformNorm2D::getPoints"; return points; } UnsignedInteger getOffsetLevel(const UnsignedInteger distance) const { if (distance == 0) return 0; if (isSymmetric()) return 2 * distance * (distance - 1) + 1; else return (2 * distance - 1) * (2 * distance - 1); } private: UnsignedInteger getSizeOfLevel(const UnsignedInteger distance) const { if (distance == 0) return 1; if (isSymmetric()) return 4 * distance; else return 8 * distance; } Scalar stepX_; Scalar stepY_; }; class SphereUniformNorm3D : public SphereUniformNormImplementation { public: SphereUniformNorm3D(const Point & step, const Bool symmetric) : SphereUniformNormImplementation(step, symmetric) { // nothing to do if (step.getDimension() != 3) throw InvalidDimensionException(HERE) << "Expected a point of dimension 3"; stepX_ = step[0]; stepY_ = step[1]; stepZ_ = step[2]; } Sample getPoints(const UnsignedInteger distance) const { // Basic method that uses Sample // TODO use of iterators ? if (distance == 0) return Sample(1, 3); const UnsignedInteger size = getSizeOfLevel(distance); Sample points(size, 3); UnsignedInteger iterator = 0; const Scalar cx = distance * stepX_; const Scalar cy = distance * stepY_; const Scalar cz = distance * stepZ_; if (isSymmetric()) { Point element(3, 0.0); // 1) contour (like 2D case) for each z for (UnsignedInteger iz = 0; iz <= 2 * distance; ++iz) { // b) front element[0] = cx; element[2] = iz * stepZ_ - cz; for (UnsignedInteger iy = 0; iy < 2 * distance; ++iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } // c) right element[1] = cy; for (UnsignedInteger ix = 2 * distance; ix > 0; --ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } } // 2) top element[2] = distance * stepZ_; for (UnsignedInteger ix = 1; ix < 2 * distance; ++ix) { element[0] = ix * stepX_ - cx; for (UnsignedInteger iy = 1; iy < 2 * distance; ++iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } } } else { Point element(3, 0.0); // 1) contour (like 2D case) for each z for (UnsignedInteger iz = 0; iz <= 2 * distance; ++iz) { // a) left element[1] = - cy; element[2] = iz * stepZ_ - cz; for (UnsignedInteger ix = 0; ix < 2 * distance; ++ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } // b) front element[0] = cx; for (UnsignedInteger iy = 0; iy < 2 * distance; ++iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } // c) right element[1] = cy; for (UnsignedInteger ix = 2 * distance; ix > 0; --ix, ++iterator) { element[0] = ix * stepX_ - cx; points[iterator] = element; } // d) rear element[0] = - cx; element[2] = iz * stepZ_ - cz; for (UnsignedInteger iy = 2 * distance; iy > 0; --iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } } // 2) squares for |z| = distance for (UnsignedInteger iz = 0; iz <= 2 * distance; iz += 2 * distance) { element[2] = iz * stepZ_ - cz; for (UnsignedInteger ix = 1; ix < 2 * distance; ++ix) { element[0] = ix * stepX_ - cx; for (UnsignedInteger iy = 1; iy < 2 * distance; ++iy, ++iterator) { element[1] = iy * stepY_ - cy; points[iterator] = element; } } } } // else not symmetric if (iterator != size) throw InternalException(HERE) << "Error in SphereUniformNorm3D::getPoints"; return points; } UnsignedInteger getOffsetLevel(const UnsignedInteger distance) const { if (distance == 0) return 0; if (isSymmetric()) return distance * (1 + (2 * distance - 1) * (2 * distance - 2)); else return (2 * distance - 1) * (2 * distance - 1) * (2 * distance - 1); } private: UnsignedInteger getSizeOfLevel(const UnsignedInteger distance) const { if (distance == 0) return 1; if (isSymmetric()) return 12 * distance * distance + 1; else return 24 * distance * distance + 2; } Scalar stepX_; Scalar stepY_; Scalar stepZ_; }; CLASSNAMEINIT(SphereUniformNormImplementation); /** Default constructor */ SphereUniformNormImplementation::SphereUniformNormImplementation(const Point & step, const Bool symmetric) : PersistentObject() , step_(step) , symmetric_(symmetric) { // Nothing to do } /** Virtual constructor */ SphereUniformNormImplementation * SphereUniformNormImplementation::clone() const { return new SphereUniformNormImplementation(*this); } /** Factory of SphereUniformNormImplementation from grid steps */ SphereUniformNormImplementation::Implementation SphereUniformNormImplementation::GetFromGridSteps(const Point & step, const Bool symmetric) { switch(step.getDimension()) { case 1: return new SphereUniformNorm1D(step, symmetric); break; case 2: return new SphereUniformNorm2D(step, symmetric); break; case 3: return new SphereUniformNorm3D(step, symmetric); break; default: throw InvalidDimensionException(HERE) << "Expected a point of dimension 1, 2 or 3"; } } UnsignedInteger SphereUniformNormImplementation::getOffsetLevel(const UnsignedInteger distance) const { throw NotYetImplementedException(HERE) << "In SphereUniformNormImplementation::getOffsetLevel(const UnsignedInteger distance) const"; } Sample SphereUniformNormImplementation::getPoints(const UnsignedInteger distance) const { throw NotYetImplementedException(HERE) << "In SphereUniformNormImplementation::getPoints(const UnsignedInteger distance) const"; } /* String converter */ String SphereUniformNormImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " step=" << step_ << " symmetric=" << symmetric_; } String SphereUniformNormImplementation::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void SphereUniformNormImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "step_", step_); adv.saveAttribute( "symmetric_", symmetric_); } /* Method load() reloads the object from the StorageManager */ void SphereUniformNormImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "step_", step_); adv.loadAttribute( "symmetric_", symmetric_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/StratifiedExperiment.cxx000066400000000000000000000051361307543307100250250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of a stratified experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StratifiedExperiment.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StratifiedExperiment); static const Factory Factory_StratifiedExperiment; /* Default constructor */ StratifiedExperiment::StratifiedExperiment() : ExperimentImplementation() , center_(Point(0)) , levels_(Point(0)) { // Nothing to do } /* Constructor with parameters */ StratifiedExperiment::StratifiedExperiment(const Point & center, const Point & levels) : ExperimentImplementation() , center_(center) , levels_(levels) { // Nothing to do } /* String converter */ String StratifiedExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName () << " center=" << center_ << " levels=" << levels_; return oss; } /* Center accessor */ void StratifiedExperiment::setCenter(const Point & center) { center_ = center; } /* Center accessor */ Point StratifiedExperiment::getCenter() const { return center_; } /* Levels accessor */ void StratifiedExperiment::setLevels(const Point & levels) { levels_ = levels; } /* Levels accessor */ Point StratifiedExperiment::getLevels() const { return levels_; } /* Method save() stores the object through the StorageManager */ void StratifiedExperiment::save(Advocate & adv) const { ExperimentImplementation::save(adv); adv.saveAttribute("center_", center_); adv.saveAttribute("levels_", levels_); } /* Method load() reloads the object from the StorageManager */ void StratifiedExperiment::load(Advocate & adv) { ExperimentImplementation::load(adv); adv.loadAttribute("center_", center_); adv.loadAttribute("levels_", levels_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/Tuples.cxx000066400000000000000000000055411307543307100221420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the tuples experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OTprivate.hxx" #include "openturns/Tuples.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Tuples); /* Default constructor */ Tuples::Tuples() : CombinatorialGeneratorImplementation() , bounds_(1) { // Nothing to do } /* Constructor with parameters */ Tuples::Tuples(const Indices & bounds) : CombinatorialGeneratorImplementation() , bounds_(bounds) { // Nothing to do } /* Virtual constructor */ Tuples * Tuples::clone() const { return new Tuples(*this); } /* Experiment plane generation : * all the tuples taking values in {0,...,bounds[0]-1}x...x{0,...,bounds[n-1]-1} */ CombinatorialGeneratorImplementation::IndicesCollection Tuples::generate() { /* Dimension of the realizations */ const UnsignedInteger dimension = bounds_.getSize(); /* Size of the sample to be generated: levels[0] * ... * levels[dimension-1] */ UnsignedInteger size = bounds_[0]; for (UnsignedInteger i = 1; i < dimension; ++i) size *= bounds_[i]; IndicesCollection allTuples(size, Indices(dimension)); /* Indices would have stored the indices of the nested loops if we were able to code "dimension" nested loops dynamically */ Indices indices(dimension); for (UnsignedInteger flatIndex = 0; flatIndex < size; ++flatIndex) { allTuples[flatIndex] = indices; /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger i = 0; i < dimension - 1; ++i) indices[i + 1] += (indices[i] == bounds_[i]); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger i = 0; i < dimension - 1; ++i) indices[i] = indices[i] % bounds_[i]; } return allTuples; } // generate() /* String converter */ String Tuples::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " bounds=" << bounds_; return oss; } /** Bounds accessor */ void Tuples::setBounds(const Indices & bounds) { bounds_ = bounds; } Indices Tuples::getBounds() const { return bounds_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Experiments/openturns/000077500000000000000000000000001307543307100221725ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Experiments/openturns/Axial.hxx000066400000000000000000000032041307543307100237600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Axial experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AXIAL_HXX #define OPENTURNS_AXIAL_HXX #include "openturns/StratifiedExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Axial * * The class describes the probabilistic concept of axial experiment plan */ class OT_API Axial : public StratifiedExperiment { CLASSNAME; public: /** Default constructor */ Axial(); /** Constructor with parameters */ Axial(const Point & center, const Point & levels); /** Constructor with parameters */ Axial(const UnsignedInteger dimension, const Point & levels); /** Virtual constructor */ virtual Axial * clone() const; /** Experiment plane generation */ virtual Sample generate() const; /** String converter */ virtual String __repr__() const; }; /* class Axial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AXIAL_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Box.hxx000066400000000000000000000037711307543307100234630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Box experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BOX_HXX #define OPENTURNS_BOX_HXX #include "openturns/StratifiedExperiment.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Box * * The class describes the probabilistic concept of box experiment plan */ class OT_API Box : public StratifiedExperiment { CLASSNAME; public: /** Default constructor */ Box(); /** Constructor with parameters */ explicit Box(const Point & levels); explicit Box(const Indices & levels); Box(const Indices & levels, const Interval & bounds); /** Virtual constructor */ virtual Box * clone() const; /** Experiment plane generation : * The box [0, 1]^n is uniformly sampled in each dimension */ virtual Sample generate() const; /** String converter */ virtual String __repr__() const; /** Specific levels accessor */ void setLevels(const Point & levels); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: Interval bounds_; }; /* class Box */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOX_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Combinations.hxx000066400000000000000000000037241307543307100253560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Combinations experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMBINATIONS_HXX #define OPENTURNS_COMBINATIONS_HXX #include "openturns/CombinatorialGeneratorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Combinations * * The class describes the concept of combinations generator */ class OT_API Combinations : public CombinatorialGeneratorImplementation { CLASSNAME; public: /** Default constructor */ Combinations(); Combinations(const UnsignedInteger k, const UnsignedInteger n); /** Virtual constructor */ virtual Combinations * clone() const; /** Experiment plane generation : * all the combinations of k elements amongst {0, ..., n-1} */ virtual IndicesCollection generate(); /** String converter */ virtual String __repr__() const; /** Subset size accessor */ void setK(const UnsignedInteger k); UnsignedInteger getK() const; /** Set size accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; private: /** Size of the subsets */ UnsignedInteger k_; /** Size of the set */ UnsignedInteger n_; }; /* class Combinations */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMBINATIONS_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/CombinatorialGenerator.hxx000066400000000000000000000040671307543307100273640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an combinatorialGenerator plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMBINATORIALGENERATOR_HXX #define OPENTURNS_COMBINATORIALGENERATOR_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/CombinatorialGeneratorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CombinatorialGenerator * * The class describes the probabilistic concept of combinatorialGenerator plan */ class OT_API CombinatorialGenerator : public TypedInterfaceObject { CLASSNAME; public: typedef CombinatorialGeneratorImplementation::IndicesCollection IndicesCollection; /** Default constructor */ CombinatorialGenerator(); /** Constructor from implementation */ CombinatorialGenerator(const CombinatorialGeneratorImplementation & implementation); #ifndef SWIG /** Constructor from implementation pointer */ CombinatorialGenerator(const Implementation & p_implementation); #endif /** String converter */ virtual String __repr__() const; /** Sample generation */ virtual IndicesCollection generate(); /** Implementation accessor */ void setImplementation(const Implementation & p_implementation); }; /* class CombinatorialGenerator */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMBINATORIALGENERATOR_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/CombinatorialGeneratorImplementation.hxx000066400000000000000000000040061307543307100322630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an combinatorialGenerator plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMBINATORIALGENERATORIMPLEMENTATION_HXX #define OPENTURNS_COMBINATORIALGENERATORIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Pointer.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CombinatorialGeneratorImplementation * * The class describes the probabilistic concept of combinatorialGeneratorImplementation plan */ class OT_API CombinatorialGeneratorImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; typedef Collection< Indices > IndicesCollection; /** Default constructor */ CombinatorialGeneratorImplementation(); /** Virtual constructor */ virtual CombinatorialGeneratorImplementation * clone() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ virtual IndicesCollection generate(); protected: private: }; /* class CombinatorialGeneratorImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMBINATORIALGENERATORIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Composite.hxx000066400000000000000000000032741307543307100246730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Composite experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSITE_HXX #define OPENTURNS_COMPOSITE_HXX #include "openturns/StratifiedExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Composite * * The class describes the probabilistic concept of composite experiment plan */ class OT_API Composite : public StratifiedExperiment { CLASSNAME; public: /** Default constructor */ Composite(); /** Constructor with parameters */ Composite(const Point & center, const Point & levels); /** Constructor with parameters */ Composite(const UnsignedInteger dimension, const Point & levels); /** Virtual constructor */ virtual Composite * clone() const; /** Experiment plane generation */ virtual Sample generate() const; /** String converter */ virtual String __repr__() const; }; /* class Composite */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSITE_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Experiment.hxx000066400000000000000000000034661307543307100250540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPERIMENT_HXX #define OPENTURNS_EXPERIMENT_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/ExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Experiment * * The class describes the probabilistic concept of experiment plan */ class OT_API Experiment : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ Experiment(); /** Constructor from implementation */ Experiment(const ExperimentImplementation & implementation); #ifndef SWIG /** Constructor from implementation pointer */ Experiment(const Implementation & p_implementation); #endif /** String converter */ virtual String __repr__() const; /** Sample generation */ virtual Sample generate() const; /** Implementation accessor */ void setImplementation(const Implementation & p_implementation); }; /* class Experiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPERIMENT_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/ExperimentImplementation.hxx000066400000000000000000000034621307543307100277560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPERIMENTIMPLEMENTATION_HXX #define OPENTURNS_EXPERIMENTIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Pointer.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExperimentImplementation * * The class describes the probabilistic concept of experimentImplementation plan */ class OT_API ExperimentImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ ExperimentImplementation(); /** Virtual constructor */ virtual ExperimentImplementation * clone() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ virtual Sample generate() const; protected: private: }; /* class ExperimentImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPERIMENTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Factorial.hxx000066400000000000000000000033371307543307100246350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factorial experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FACTORIAL_HXX #define OPENTURNS_FACTORIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/StratifiedExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Factorial * * The class describes the probabilistic concept of factorial experiment plan */ class OT_API Factorial : public StratifiedExperiment { CLASSNAME; public: /** Default constructor */ Factorial(); /** Constructor with parameters */ Factorial(const Point & center, const Point & levels); /** Constructor with parameters */ Factorial(const UnsignedInteger dimension, const Point & levels); /** Virtual constructor */ virtual Factorial * clone() const; /** Experiment plane generation */ virtual Sample generate() const; /** String converter */ virtual String __repr__() const; }; /* class Factorial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FACTORIAL_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/KPermutations.hxx000066400000000000000000000040251307543307100255310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief KPermutations experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KPERMUTATIONS_HXX #define OPENTURNS_KPERMUTATIONS_HXX #include "openturns/CombinatorialGeneratorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KPermutations * * The class describes the concept of kPermutations generator */ class OT_API KPermutations : public CombinatorialGeneratorImplementation { CLASSNAME; public: /** Default constructor */ KPermutations(); explicit KPermutations(const UnsignedInteger n); KPermutations(const UnsignedInteger k, const UnsignedInteger n); /** Virtual constructor */ virtual KPermutations * clone() const; /** Experiment plane generation : * all the kPermutations of k elements amongst {0, ..., n-1} */ virtual IndicesCollection generate(); /** String converter */ virtual String __repr__() const; /** Subset size accessor */ void setK(const UnsignedInteger k); UnsignedInteger getK() const; /** Set size accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; private: /** Size of the subsets */ UnsignedInteger k_; /** Size of the set */ UnsignedInteger n_; }; /* class KPermutations */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KPERMUTATIONS_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/OTExperiments.hxx000066400000000000000000000030351307543307100254720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Experiments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTEXPERIMENTS_HXX #define OPENTURNS_OTEXPERIMENTS_HXX #include "openturns/Axial.hxx" #include "openturns/Box.hxx" #include "openturns/Composite.hxx" #include "openturns/Combinations.hxx" #include "openturns/CombinatorialGenerator.hxx" #include "openturns/CombinatorialGeneratorImplementation.hxx" #include "openturns/Experiment.hxx" #include "openturns/ExperimentImplementation.hxx" #include "openturns/Factorial.hxx" #include "openturns/KPermutations.hxx" #include "openturns/SphereUniformNorm.hxx" #include "openturns/SphereUniformNormImplementation.hxx" #include "openturns/StratifiedExperiment.hxx" #include "openturns/Tuples.hxx" #endif /* OPENTURNS_OTEXPERIMENTS_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/SphereUniformNorm.hxx000066400000000000000000000045711307543307100263540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of a generic grid iterator. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPHEREUNIFORMNORM_HXX #define OPENTURNS_SPHEREUNIFORMNORM_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/SphereUniformNormImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API SphereUniformNorm : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SphereUniformNorm(); /** Default constructor */ SphereUniformNorm(const Point step, const Bool symmetric); /** Copy constructor */ SphereUniformNorm(const SphereUniformNormImplementation & implementation); /** Constructor from implementation */ SphereUniformNorm(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ SphereUniformNorm(SphereUniformNormImplementation * p_implementation); #endif /** Symmettric accessor */ Bool isSymmetric() const; /** Get all points at a certain distance */ virtual Sample getPoints(const UnsignedInteger distance) const; /** Get index offset, needed by RandomMixture cache */ virtual UnsignedInteger getOffsetLevel(const UnsignedInteger distance) const; /** Constructor from grid steps */ static SphereUniformNorm GetFromGridSteps(const Point & step, const Bool symmetric); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPHEREUNIFORMNORM_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/SphereUniformNormImplementation.hxx000066400000000000000000000051061307543307100312550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class SphereUniformNormImplementation implements walker on a regular grid * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPHEREUNIFORMNORMIMPLEMENTATION_HXX #define OPENTURNS_SPHEREUNIFORMNORMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SphereUniformNormImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API SphereUniformNormImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SphereUniformNormImplementation(const Point & step, const Bool symmetric); /** Virtual constructor */ virtual SphereUniformNormImplementation * clone() const; /** Symmettric accessor */ Bool isSymmetric() const { return symmetric_; } /** Get all points at a certain distance */ virtual Sample getPoints(const UnsignedInteger distance) const; /** Get index offset, needed by RandomMixture cache */ virtual UnsignedInteger getOffsetLevel(const UnsignedInteger distance) const; #ifndef SWIG /** Constructor from grid steps */ static Implementation GetFromGridSteps(const Point & step, const Bool symmetric); #endif /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Disable default constructor */ SphereUniformNormImplementation(); private: /** Grid steps */ Point step_; /** Symmetric grid? */ Bool symmetric_; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPHEREUNIFORMNORMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/StratifiedExperiment.hxx000066400000000000000000000041671307543307100270720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an stratifiedExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STRATIFIEDEXPERIMENT_HXX #define OPENTURNS_STRATIFIEDEXPERIMENT_HXX #include "openturns/ExperimentImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StratifiedExperiment * * The class describes the probabilistic concept of stratifiedExperiment plan */ class OT_API StratifiedExperiment : public ExperimentImplementation { CLASSNAME; public: /** Default constructor */ StratifiedExperiment(); /** Constructor with parameters */ StratifiedExperiment(const Point & center, const Point & levels); /** String converter */ virtual String __repr__() const; /** Center accessor */ virtual void setCenter(const Point & center); /** Center accessor */ virtual Point getCenter() const; /** Levels accessor */ virtual void setLevels(const Point & levels); /** Levels accessor */ virtual Point getLevels() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: Point center_; Point levels_; }; /* class StratifiedExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STRATIFIEDEXPERIMENT_HXX */ openturns-1.9/lib/src/Base/Experiments/openturns/Tuples.hxx000066400000000000000000000034041307543307100242000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Tuples experiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TUPLES_HXX #define OPENTURNS_TUPLES_HXX #include "openturns/CombinatorialGeneratorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Tuples * * The class describes the concept of tuples generator */ class OT_API Tuples : public CombinatorialGeneratorImplementation { CLASSNAME; public: /** Default constructor */ Tuples(); explicit Tuples(const Indices & bounds); /** Virtual constructor */ virtual Tuples * clone() const; /** Experiment plane generation : * all the tuples taking values in {0,...,bounds[0]-1}x...x{0,...,bounds[n-1]-1} */ virtual IndicesCollection generate(); /** String converter */ virtual String __repr__() const; /** Bounds accessor */ void setBounds(const Indices & bounds); Indices getBounds() const; private: /** Bounds on the marginal values of the tuple */ Indices bounds_; }; /* class Tuples */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TUPLES_HXX */ openturns-1.9/lib/src/Base/Func/000077500000000000000000000000001307543307100165255ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Func/AggregatedEvaluation.cxx000066400000000000000000000257361307543307100233500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of an aggregation of functions from R^n to R^p_1,...,R^n to R^p_k * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AggregatedEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AggregatedEvaluation); static const Factory Factory_AggregatedEvaluation; /* Default constructor */ AggregatedEvaluation::AggregatedEvaluation() : EvaluationImplementation() , functionsCollection_(0) , outputDimension_(0) { // Nothing to do } /* Parameters constructor */ AggregatedEvaluation::AggregatedEvaluation(const FunctionCollection & functionsCollection) : EvaluationImplementation() , functionsCollection_(0) , outputDimension_(0) { setFunctionsCollection(functionsCollection); } /* Virtual constructor */ AggregatedEvaluation * AggregatedEvaluation::clone() const { return new AggregatedEvaluation(*this); } /* String converter */ String AggregatedEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " functions=" << functionsCollection_; } String AggregatedEvaluation::__str__(const String & offset) const { return OSS(false) << functionsCollection_.__str__(offset); } /* Evaluation operator */ Point AggregatedEvaluation::operator () (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; const UnsignedInteger size = functionsCollection_.getSize(); Point result(outputDimension_); UnsignedInteger outputIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Point atomValue(functionsCollection_[i](inP)); const UnsignedInteger atomDimension = atomValue.getDimension(); for (UnsignedInteger j = 0; j < atomDimension; ++j) { result[outputIndex] = atomValue[j]; ++outputIndex; } } if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } Sample AggregatedEvaluation::operator () (const Sample & inS) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); ++ callsNumber_; const UnsignedInteger collectionSize = functionsCollection_.getSize(); const UnsignedInteger size = inS.getSize(); Sample result(size, outputDimension_); UnsignedInteger outputIndex = 0; for ( UnsignedInteger k = 0; k < collectionSize; ++ k ) { const Sample atomValue(functionsCollection_[k](inS)); const UnsignedInteger atomDimension = atomValue.getDimension(); for ( UnsignedInteger i = 0; i < size; ++ i ) for ( UnsignedInteger j = 0; j < atomDimension; ++ j ) result[i][outputIndex + j] = atomValue[i][j]; outputIndex += atomDimension; } result.setDescription(getOutputDescription()); if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Functions accessor */ AggregatedEvaluation::FunctionCollection AggregatedEvaluation::getFunctionsCollection() const { return functionsCollection_; } void AggregatedEvaluation::setFunctionsCollection(const FunctionCollection & functionsCollection) { const UnsignedInteger size = functionsCollection.getSize(); // Check for empty functions collection if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an aggregated function from an empty collection of functions."; // Check for coherent input and output dimensions of the functions UnsignedInteger inputDimension = functionsCollection[0].getInputDimension(); outputDimension_ = functionsCollection[0].getOutputDimension(); Description description(functionsCollection[0].getDescription()); if (outputDimension_ == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an aggregated function with atoms of null output dimension."; for (UnsignedInteger i = 1; i < size; ++i) { if (functionsCollection[i].getInputDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given functions have incompatible input dimension."; const UnsignedInteger atomOutputDimension = functionsCollection[i].getOutputDimension(); if (atomOutputDimension == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an aggregated function with atoms of null output dimension."; outputDimension_ += atomOutputDimension; const Description outputDescription(functionsCollection[i].getOutputDescription()); for (UnsignedInteger j = 0; j < atomOutputDimension; ++j) description.add(outputDescription[j]); } functionsCollection_ = functionsCollection; setDescription(description); } /* Get the i-th marginal function */ AggregatedEvaluation::Implementation AggregatedEvaluation::getMarginal(const UnsignedInteger i) const { return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ AggregatedEvaluation::Implementation AggregatedEvaluation::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getOutputDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal aggregated function must be in the range [0, dim-1] and must be different"; FunctionCollection marginalFunctions; const UnsignedInteger indicesSize = indices.getSize(); const UnsignedInteger size = functionsCollection_.getSize(); // For each copula, see if there is something to extract UnsignedInteger currentPosition = 0; UnsignedInteger currentIndex = indices[currentPosition]; // Lower bound of indices related to the current copula UnsignedInteger lowerIndex = 0; // Upper bound of indices related to the current copula plus 1 UnsignedInteger upperIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Function function(functionsCollection_[i]); // Update index range for the current function lowerIndex = upperIndex; upperIndex += function.getOutputDimension(); Indices functionIndices(0); // Find the indices related to the current function while ((currentPosition < indicesSize) && (currentIndex >= lowerIndex) && (currentIndex < upperIndex)) { functionIndices.add(currentIndex - lowerIndex); // Go to next index ++currentPosition; if (currentPosition == indicesSize) break; currentIndex = indices[currentPosition]; } // If there is something to extract if (functionIndices.getSize() > 0) marginalFunctions.add(functionsCollection_[i].getMarginal(functionIndices)); // All the indices have been taken into account if (currentPosition == indicesSize) break; // Check if a bad case occurs: one index related to function i is found after indices related to function j, with j > i. In this case we use the generic marginal extraction if (currentIndex < lowerIndex) return EvaluationImplementation::getMarginal(indices); } return new AggregatedEvaluation(marginalFunctions); } /* Input dimension accessor */ UnsignedInteger AggregatedEvaluation::getInputDimension() const { return functionsCollection_[0].getInputDimension(); } /* Output dimension accessor */ UnsignedInteger AggregatedEvaluation::getOutputDimension() const { return outputDimension_; } /* Gradient according to the marginal parameters */ Matrix AggregatedEvaluation::parameterGradient(const Point & inP) const { Matrix result(getParameter().getDimension(), getOutputDimension()); const UnsignedInteger size = functionsCollection_.getSize(); UnsignedInteger rowShift = 0; UnsignedInteger columnShift = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Matrix currentGradient(functionsCollection_[i].parameterGradient(functionsCollection_[i].getParameter())); const UnsignedInteger currentRowDim = currentGradient.getNbRows(); const UnsignedInteger currentColumnDim = currentGradient.getNbColumns(); for (UnsignedInteger j = 0; j < currentRowDim; ++j) for (UnsignedInteger k = 0; k < currentColumnDim; ++k) result(rowShift + j, columnShift + k) = currentGradient(j, k); rowShift += currentRowDim; columnShift += currentColumnDim; } return result; } /* Parameters value accessor */ Point AggregatedEvaluation::getParameter() const { Point parameter; const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { parameter.add(functionsCollection_[i].getParameter()); } return parameter; } void AggregatedEvaluation::setParameter(const Point & parameter) { const UnsignedInteger size = functionsCollection_.getSize(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++ i) { Point marginalParameter(functionsCollection_[i].getParameter()); const UnsignedInteger marginalDimension = marginalParameter.getDimension(); for (UnsignedInteger j = 0; j < marginalDimension; ++ j) { marginalParameter[j] = parameter[index]; ++ index; } functionsCollection_[i].setParameter(marginalParameter); } } /* Parameters description accessor */ Description AggregatedEvaluation::getParameterDescription() const { Description description; const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { description.add(functionsCollection_[i].getParameterDescription()); } return description; } /* Method save() stores the object through the StorageManager */ void AggregatedEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "functionsCollection_", functionsCollection_ ); adv.saveAttribute( "outputDimension_", outputDimension_ ); } /* Method load() reloads the object from the StorageManager */ void AggregatedEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "functionsCollection_", functionsCollection_ ); adv.loadAttribute( "outputDimension_", outputDimension_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/AggregatedFunction.cxx000066400000000000000000000035501307543307100230140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements aggregated functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AggregatedFunction.hxx" #include "openturns/AggregatedEvaluation.hxx" #include "openturns/AggregatedGradient.hxx" #include "openturns/AggregatedHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AggregatedFunction); /* Default constructor */ AggregatedFunction::AggregatedFunction () : Function() { } /* Parameter constructor */ AggregatedFunction::AggregatedFunction (const FunctionCollection & functionCollection) : Function() { const AggregatedEvaluation evaluation(functionCollection); setEvaluation(evaluation.clone()); setGradient(new AggregatedGradient(evaluation)); setHessian(new AggregatedHessian(evaluation)); } /* Comparison operator */ Bool AggregatedFunction::operator ==(const AggregatedFunction & other) const { return true; } /* String converter */ String AggregatedFunction::__repr__() const { return getImplementation()->__repr__(); } String AggregatedFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/AggregatedGradient.cxx000066400000000000000000000072251307543307100227670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AggregatedGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AggregatedGradient); static const Factory Factory_AggregatedGradient; /* Default constructor */ AggregatedGradient::AggregatedGradient() : GradientImplementation() , evaluation_() { // Nothing to do } /* Parameters constructor */ AggregatedGradient::AggregatedGradient(const AggregatedEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ AggregatedGradient * AggregatedGradient::clone() const { return new AggregatedGradient(*this); } /* Gradient method */ Matrix AggregatedGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); Matrix result(evaluation_.getInputDimension(), evaluation_.getOutputDimension()); UnsignedInteger columnIndex = 0; // Loop over the contributors for (UnsignedInteger contributorIndex = 0; contributorIndex < size; ++contributorIndex) { const Matrix contributorGradient(evaluation_.functionsCollection_[contributorIndex].gradient(inP)); // Copy the contributor gradient into the global matrix gradient // Must proceed in column order for (UnsignedInteger j = 0; j < contributorGradient.getNbColumns(); ++j) { for (UnsignedInteger i = 0; i < contributorGradient.getNbRows(); ++i) result(i, columnIndex) = contributorGradient(i, j); ++columnIndex; } } // contributorIndex return result; } /* Accessor for input point dimension */ UnsignedInteger AggregatedGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger AggregatedGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String AggregatedGradient::__repr__() const { return OSS(true) << "class=" << GetClassName() << " evaluation=" << evaluation_; } String AggregatedGradient::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void AggregatedGradient::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void AggregatedGradient::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/AggregatedHessian.cxx000066400000000000000000000073531307543307100226260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AggregatedHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AggregatedHessian); static const Factory Factory_AggregatedHessian; /* Default constructor */ AggregatedHessian::AggregatedHessian() : HessianImplementation() , evaluation_() { // Nothing to do } /* Parameters constructor */ AggregatedHessian::AggregatedHessian(const AggregatedEvaluation & evaluation) : HessianImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ AggregatedHessian * AggregatedHessian::clone() const { return new AggregatedHessian(*this); } /* Hessian method */ SymmetricTensor AggregatedHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); SymmetricTensor result(evaluation_.getInputDimension(), evaluation_.getOutputDimension()); UnsignedInteger sheetIndex = 0; // Loop over the contributors for (UnsignedInteger contributorIndex = 0; contributorIndex < size; ++contributorIndex) { const SymmetricTensor contributorHessian(evaluation_.functionsCollection_[contributorIndex].hessian(inP)); // Copy the contributor hessian into the global tensor hessian for (UnsignedInteger k = 0; k < contributorHessian.getNbSheets(); ++k) { for (UnsignedInteger j = 0; j < contributorHessian.getNbColumns(); ++j) for (UnsignedInteger i = j; i < contributorHessian.getNbRows(); ++i) result(i, j, sheetIndex) = contributorHessian(i, j, k); ++sheetIndex; } } // contributorIndex return result; } /* Accessor for input point dimension */ UnsignedInteger AggregatedHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger AggregatedHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String AggregatedHessian::__repr__() const { return OSS(true) << "class=" << GetClassName() << " evaluation=" << evaluation_; } String AggregatedHessian::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void AggregatedHessian::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void AggregatedHessian::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/Basis.cxx000066400000000000000000000063371307543307100203230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A collection of numerical math function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Basis.hxx" #include "openturns/FiniteBasis.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Basis); /* Default constructor */ Basis::Basis() : TypedInterfaceObject(new FiniteBasis(0)) { // Nothing to do } /* Constructor from a collection */ Basis::Basis(const Collection & coll) : TypedInterfaceObject(new FiniteBasis(coll)) { // Nothing to do } /* Constructor from a collection */ Basis::Basis(const UnsignedInteger size) : TypedInterfaceObject(new FiniteBasis(size)) { // Nothing to do } /* Constructor from implementation */ Basis::Basis(const BasisImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } Basis::operator FunctionCollection() const { FunctionCollection coll; for (UnsignedInteger i = 0; i < getSize(); ++ i) { coll.add(build(i)); } return coll; } /* Constructor from implementation */ // Basis::Basis(BasisImplementation * p_implementation) // : TypedInterfaceObject(p_implementation->clone()) // { // // Nothing to do // } /* String converter */ String Basis::__repr__() const { // return OSS(true) << "class=" << GetClassName(); return getImplementation()->__repr__(); } String Basis::__str__(const String & offset) const { return getImplementation()->__str__(offset); } Function Basis::build(const UnsignedInteger index) const { return getImplementation()->build(index); } Function Basis::operator[](const UnsignedInteger index) const { return getImplementation()->operator[](index); } Function & Basis::operator[](const UnsignedInteger index) { copyOnWrite(); return getImplementation()->operator[](index); } Basis::FunctionCollection Basis::getSubBasis(const Indices & indices) const { return getImplementation()->getSubBasis(indices); } void Basis::add(const Function & elt) { copyOnWrite(); getImplementation()->add(elt); } /* Dimension accessor */ UnsignedInteger Basis::getDimension() const { return getImplementation()->getDimension(); } UnsignedInteger Basis::getSize() const { return getImplementation()->getSize(); } Bool Basis::isOrthogonal() const { return getImplementation()->isOrthogonal(); } Bool Basis::isFunctional() const { return getImplementation()->isFunctional(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisFactory.cxx000066400000000000000000000031131307543307100216400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all BasisFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BasisFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BasisFactory); static const Factory Factory_BasisFactory; /* Default constructor */ BasisFactory::BasisFactory() : PersistentObject() { // Nothing to do } /* String converter */ String BasisFactory::__repr__() const { return OSS() << "class=" << BasisFactory::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ BasisFactory* BasisFactory::clone() const { return new BasisFactory(*this); } Basis BasisFactory::build() const { throw NotYetImplementedException(HERE) << "In BasisFactory::build() const"; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisImplementation.cxx000066400000000000000000000064051307543307100232250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BasisImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BasisImplementation); static const Factory Factory_BasisImplementation; /* Default constructor */ BasisImplementation::BasisImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ BasisImplementation * BasisImplementation::clone() const { return new BasisImplementation(*this); } /* Build the Function of the given index */ Function BasisImplementation::build(const UnsignedInteger index) const { throw NotYetImplementedException(HERE) << "In Function BasisImplementation::build(const UnsignedInteger index) const"; } /* Build the Function of the given index */ Function BasisImplementation::operator[](const UnsignedInteger index) const { return build(index); } Function & BasisImplementation::operator[](const UnsignedInteger index) { throw NotYetImplementedException(HERE) << "In BasisImplementation::operator[](const UnsignedInteger index)"; } BasisImplementation::FunctionCollection BasisImplementation::getSubBasis(const Indices& indices) const { const UnsignedInteger size = indices.getSize(); FunctionCollection coll(size); for (UnsignedInteger i = 0; i < size; ++ i) { coll[i] = operator[](indices[i]); } return coll; } void BasisImplementation::add(const Function & elt) { throw NotYetImplementedException(HERE) << "In BasisImplementation::add(const Function & elt)"; } UnsignedInteger BasisImplementation::getDimension() const { throw NotYetImplementedException(HERE) << "In BasisImplementation::getDimension() const"; } UnsignedInteger BasisImplementation::getSize() const { throw NotYetImplementedException(HERE) << "In BasisImplementation::getSize() const"; } Bool BasisImplementation::isOrthogonal() const { return false; } Bool BasisImplementation::isFunctional() const { return false; } String BasisImplementation::__repr__() const { return OSS() << "class=" << getClassName(); } // String BasisImplementation::__str__(const String & offset) const // { // return OSS() << "class=" << getClassName(); // } void BasisImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void BasisImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisSequence.cxx000066400000000000000000000050171307543307100220060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A sequence of numerical math function collection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BasisSequence.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BasisSequence); /* Default constructor */ BasisSequence::BasisSequence() : TypedCollectionInterfaceObject( new BasisSequenceImplementation ) { // Nothing to do } /* Default constructor */ BasisSequence::BasisSequence(const Basis & psi) : TypedCollectionInterfaceObject( new BasisSequenceImplementation(psi) ) { // Nothing to do } /* Constructor from implementation */ BasisSequence::BasisSequence(const BasisSequenceImplementation & implementation) : TypedCollectionInterfaceObject( implementation.clone() ) { // Nothing to do } /* Dimension accessor */ UnsignedInteger BasisSequence::getDimension() const { return getImplementation()->getDimension(); } /* Returns the master basis */ Basis BasisSequence::getMasterBasis() const { return getImplementation()->getMasterBasis(); } /* Sub-basis accessor */ Basis BasisSequence::getBasis(const UnsignedInteger index) const { return getImplementation()->getBasis( index ); } /* Indices accessor */ Indices BasisSequence::getIndices(const UnsignedInteger index) const { return getImplementation()->getIndices( index ); } /* Converter to Basis collection */ BasisSequence::operator PersistentCollection () const { return *getImplementation(); } /* String converter */ String BasisSequence::__repr__() const { return OSS(true) << "class=" << GetClassName() << " implementation=" << getImplementation()->__repr__(); } String BasisSequence::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisSequenceFactory.cxx000066400000000000000000000061071307543307100233370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building BasisSequence objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BasisSequenceFactory.hxx" #include "openturns/LARS.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BasisSequenceFactory); /* Default constructor */ BasisSequenceFactory::BasisSequenceFactory() : TypedInterfaceObject(new LARS()) { // Nothing to do } /* Constructor from implementation */ BasisSequenceFactory::BasisSequenceFactory(const BasisSequenceFactoryImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* String converter */ String BasisSequenceFactory::__repr__() const { return getImplementation()->__repr__(); } String BasisSequenceFactory::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } /* Verbosity accessor */ void BasisSequenceFactory::setVerbose(const Bool verbose) { copyOnWrite(); getImplementation()->setVerbose( verbose ); } Bool BasisSequenceFactory::getVerbose() const { return getImplementation()->getVerbose(); } /* Method to create new BasisSequence objects */ BasisSequence BasisSequenceFactory::build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) { return getImplementation()->build(x, y, psi, indices); } BasisSequence BasisSequenceFactory::build(const Sample & y, const Indices & indices, const DesignProxy & proxy) { return getImplementation()->build(y, indices, proxy); } BasisSequence BasisSequenceFactory::build(LeastSquaresMethod & method, const Sample & y) { return getImplementation()->build(method, y); } void BasisSequenceFactory::initialize() { getImplementation()->initialize(); } void BasisSequenceFactory::updateBasis(LeastSquaresMethod & method, const Sample & y) { getImplementation()->updateBasis(method, y); } /* Stopping criterion on the L1-norm of the coefficients accessor */ void BasisSequenceFactory::setMaximumRelativeConvergence(const Scalar coefficientsPaths) { copyOnWrite(); getImplementation()->setMaximumRelativeConvergence(coefficientsPaths); } Scalar BasisSequenceFactory::getMaximumRelativeConvergence() const { return getImplementation()->getMaximumRelativeConvergence(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisSequenceFactoryImplementation.cxx000066400000000000000000000105511307543307100262430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building BasisSequence objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BasisSequenceFactoryImplementation); static const Factory Factory_BasisSequenceFactoryImplementation; /* Default constructor */ BasisSequenceFactoryImplementation::BasisSequenceFactoryImplementation(const Bool verbose) : PersistentObject() , verbose_(verbose) , maximumRelativeConvergence_(SpecFunc::MinScalar) { // Nothing to do } /* Virtual constructor */ BasisSequenceFactoryImplementation * BasisSequenceFactoryImplementation::clone() const { return new BasisSequenceFactoryImplementation(*this); } /* String converter */ String BasisSequenceFactoryImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " verbose=" << verbose_ ; } String BasisSequenceFactoryImplementation::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Verbosity accessor */ void BasisSequenceFactoryImplementation::setVerbose(const Bool verbose) { verbose_ = verbose; } Bool BasisSequenceFactoryImplementation::getVerbose() const { return verbose_; } /* Method to create new BasisSequence objects */ BasisSequence BasisSequenceFactoryImplementation::build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices) { const DesignProxy proxy(x, psi); return build(y, indices, proxy); } BasisSequence BasisSequenceFactoryImplementation::build(const Sample & y, const Indices & indices, const DesignProxy & proxy) { LeastSquaresMethod method(proxy, indices); return build(method, y); } BasisSequence BasisSequenceFactoryImplementation::build(LeastSquaresMethod & method, const Sample & y) { // BasisSequence basisSequence(method.buildCurrentBasis()); BasisSequence basisSequence(method.getBasis()); initialize(); updateBasis(method, y); while ((addedPsi_k_ranks_.getSize() > 0) || (removedPsi_k_ranks_.getSize() > 0)) { basisSequence.add(currentIndices_); updateBasis(method, y); } return basisSequence; } void BasisSequenceFactoryImplementation::initialize() { currentIndices_.clear(); addedPsi_k_ranks_.clear(); conservedPsi_k_ranks_.clear(); removedPsi_k_ranks_.clear(); } void BasisSequenceFactoryImplementation::updateBasis(LeastSquaresMethod & method, const Sample & y) { throw NotYetImplementedException(HERE) << " in BasisSequenceFactoryImplementation::updateBasis"; } /* Stopping criterion on the L1-norm of the coefficients accessor */ void BasisSequenceFactoryImplementation::setMaximumRelativeConvergence(const Scalar maximumRelativeConvergence) { maximumRelativeConvergence_ = maximumRelativeConvergence; } Scalar BasisSequenceFactoryImplementation::getMaximumRelativeConvergence() const { return maximumRelativeConvergence_; } /* Method save() stores the object through the StorageManager */ void BasisSequenceFactoryImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "verbose_", verbose_ ); adv.saveAttribute( "maximumRelativeConvergence_", maximumRelativeConvergence_ ); } /* Method load() reloads the object from the StorageManager */ void BasisSequenceFactoryImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "verbose_", verbose_ ); adv.loadAttribute( "maximumRelativeConvergence_", maximumRelativeConvergence_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BasisSequenceImplementation.cxx000066400000000000000000000063461307543307100247220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A sequence of numerical math function collection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/BasisSequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT( PersistentCollection ); static const Factory > Factory_PersistentCollection_Indices; CLASSNAMEINIT(BasisSequenceImplementation); static const Factory Factory_BasisSequenceImplementation; /* Default constructor */ BasisSequenceImplementation::BasisSequenceImplementation() : PersistentCollection() { // Nothing to do } /* Default constructor */ BasisSequenceImplementation::BasisSequenceImplementation(const Basis & masterBasis) : PersistentCollection(), masterBasis_(masterBasis) { // Nothing to do } /* Virtual constructor */ BasisSequenceImplementation * BasisSequenceImplementation::clone() const { return new BasisSequenceImplementation( *this ); } /* String converter */ String BasisSequenceImplementation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " collection=" << PersistentCollection::__repr__() << " masterBasis=" << masterBasis_; } String BasisSequenceImplementation::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Dimension accessor */ UnsignedInteger BasisSequenceImplementation::getDimension() const { return masterBasis_.getDimension(); } /* Returns the master basis */ Basis BasisSequenceImplementation::getMasterBasis() const { return masterBasis_; } Basis BasisSequenceImplementation::getBasis(const UnsignedInteger index) const { Basis result; Indices subBasisIndices(operator[](index)); for (UnsignedInteger i = 0; i < subBasisIndices.getSize(); ++ i) result.add(masterBasis_[subBasisIndices[i]]); return result; } Indices BasisSequenceImplementation::getIndices(const UnsignedInteger index) const { return operator[](index); } /* Method save() stores the object through the StorageManager */ void BasisSequenceImplementation::save(Advocate & adv) const { PersistentCollection::save( adv ); adv.saveAttribute( "masterBasis_", masterBasis_ ); } /* Method load() reloads the object from the StorageManager */ void BasisSequenceImplementation::load(Advocate & adv) { PersistentCollection::load( adv ); adv.loadAttribute( "masterBasis_", masterBasis_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BoxCoxEvaluation.cxx000066400000000000000000000146721307543307100225150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/BoxCoxEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BoxCoxEvaluation); static const Factory Factory_BoxCoxEvaluation; /* Default constructor */ BoxCoxEvaluation::BoxCoxEvaluation() : EvaluationImplementation() { // Nothing to do } /* Parameter constructor */ BoxCoxEvaluation::BoxCoxEvaluation(const Point & lambda) : EvaluationImplementation() , lambda_(lambda) , shift_(lambda.getDimension()) { setInputDescription(Description::BuildDefault(lambda_.getSize(), "x")); setOutputDescription(Description::BuildDefault(lambda_.getSize(), "y")); } BoxCoxEvaluation::BoxCoxEvaluation(const Point & lambda, const Point & shift) : EvaluationImplementation() , lambda_(lambda) , shift_(shift) { if (lambda.getDimension() != shift.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given exponent vector has a dimension=" << lambda.getDimension() << " different from the shift dimension=" << shift.getDimension(); setInputDescription(Description::BuildDefault(lambda_.getSize(), "x")); setOutputDescription(Description::BuildDefault(lambda_.getSize(), "y")); } /* Clone constructor */ BoxCoxEvaluation * BoxCoxEvaluation::clone() const { return new BoxCoxEvaluation(*this); } /* Comparison operator */ Bool BoxCoxEvaluation::operator ==(const BoxCoxEvaluation & other) const { if (this == &other) return true; return (lambda_ == other.lambda_) && (shift_ == other.shift_); } /* String converter */ String BoxCoxEvaluation::__repr__() const { OSS oss(true); oss << "class=" << BoxCoxEvaluation::GetClassName() << " name=" << getName() << " dimension=" << getInputDimension() << " lambda=" << lambda_.__repr__() << " shift=" << shift_.__repr__(); return oss; } /* String converter __str__ */ String BoxCoxEvaluation::__str__(const String & offset) const { OSS oss (false); oss << "BoxCox(lambda=" << lambda_ << ", shift=" << shift_ << ")"; return oss; } /* Accessor for the lambda */ Point BoxCoxEvaluation::getLambda() const { return lambda_; } /* Accessor for the shift */ Point BoxCoxEvaluation::getShift() const { return shift_; } struct BoxCoxEvaluationComputeSamplePolicy { const Sample & input_; Sample & output_; const BoxCoxEvaluation & evaluation_; BoxCoxEvaluationComputeSamplePolicy(const Sample & input, Sample & output, const BoxCoxEvaluation & evaluation) : input_(input) , output_(output) , evaluation_(evaluation) { // Nothing to do } inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { for (UnsignedInteger j = 0; j < evaluation_.getInputDimension(); ++j) { const Scalar lambda_j = evaluation_.getLambda()[j]; const Scalar logX = log(input_[i][j] + evaluation_.getShift()[j]); if (std::abs(lambda_j * logX) < 1e-8) output_[i][j] = logX * (1.0 + 0.5 * lambda_j * logX); else output_[i][j] = expm1(lambda_j * logX) / lambda_j; } // j } // i } // operator () }; // struct BoxCoxEvaluationComputeSamplePolicy /* Operator () */ Sample BoxCoxEvaluation::operator() (const Sample & inS) const { const UnsignedInteger inDimension = inS.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << getInputDimension() << ", got " << inS.getDimension(); const UnsignedInteger size = inS.getSize(); Sample result(size, inDimension); const BoxCoxEvaluationComputeSamplePolicy policy( inS, result, *this ); TBB::ParallelFor( 0, size, policy ); result.setDescription(getOutputDescription()); callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } result.setDescription(getOutputDescription()); return result; } /* Operator () */ Point BoxCoxEvaluation::operator() (const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); Point result(lambda_.getDimension()); // There is no check of positive variables // This last one must be done by user or, as the evaluation is used in a stochastic context, in the BoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] + shift_[index]; if (x <= 0.0) throw InvalidArgumentException(HERE) << "Can not apply the Box Cox evaluation function to a negative shifted value x=" << x; // Applying the Box-Cox function const Scalar lambda_i = lambda_[index]; const Scalar logX = log(x); if (std::abs(lambda_i * logX) < 1e-8) result[index] = logX * (1.0 + 0.5 * lambda_i * logX); else result[index] = expm1(lambda_i * logX) / lambda_i; } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger BoxCoxEvaluation::getInputDimension() const { return lambda_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger BoxCoxEvaluation::getOutputDimension() const { return lambda_.getDimension(); } /* Method save() stores the object through the StorageManager */ void BoxCoxEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "shift_", shift_ ); } /* Method load() reloads the object from the StorageManager */ void BoxCoxEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "shift_", shift_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BoxCoxGradient.cxx000066400000000000000000000074401307543307100221360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/BoxCoxGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BoxCoxGradient); static const Factory Factory_BoxCoxGradient; /* Default constructor */ BoxCoxGradient::BoxCoxGradient() : GradientImplementation() { // Nothing to do } /* Parameter constructor */ BoxCoxGradient::BoxCoxGradient(const BoxCoxEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Clone constructor */ BoxCoxGradient * BoxCoxGradient::clone() const { return new BoxCoxGradient(*this); } /* Comparison operator */ Bool BoxCoxGradient::operator ==(const BoxCoxGradient & other) const { if (this == &other) return true; return (evaluation_ == other.evaluation_); } /* String converter */ String BoxCoxGradient::__repr__() const { OSS oss(true); oss << "class=" << BoxCoxGradient::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter __str__ */ String BoxCoxGradient::__str__(const String & offset) const { OSS oss (false); oss << "BoxCoxGradient(lambda=" << getLambda() << ", shift=" << getShift() << ")"; return oss; } /* Accessor for the evaluation */ BoxCoxEvaluation BoxCoxGradient::getEvaluation() const { return evaluation_; } /* Gradient evaluation method */ Matrix BoxCoxGradient::gradient(const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); Matrix result(1, dimension); // There is no check of positive variables // This last one must be done by user or, as the gradient is used in a stochastic context, in the BoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] + getShift()[index]; if (x <= 0.0) throw InvalidArgumentException(HERE) << "Can not apply the Box Cox gradient function to a negative shifted value x=" << x; // Applying the Box-Cox function const Scalar lambda_i = getLambda()[index]; const Scalar logX = log(x); if (std::abs(lambda_i * logX) < 1e-8) result(0, index) = (1.0 + lambda_i * logX) / x; else result(0, index) = exp((lambda_i - 1.0) * logX); } return result; } /* Accessor for input point dimension */ UnsignedInteger BoxCoxGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger BoxCoxGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Accessor for the lambda */ Point BoxCoxGradient::getLambda() const { return evaluation_.getLambda(); } /* Accessor for the shift */ Point BoxCoxGradient::getShift() const { return evaluation_.getShift(); } /* Method save() stores the object through the StorageManager */ void BoxCoxGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void BoxCoxGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BoxCoxHessian.cxx000066400000000000000000000074711307543307100217770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/BoxCoxHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BoxCoxHessian); static const Factory Factory_BoxCoxHessian; /* Default constructor */ BoxCoxHessian::BoxCoxHessian() : HessianImplementation() { // Nothing to do } /* Parameter constructor */ BoxCoxHessian::BoxCoxHessian(const BoxCoxEvaluation & evaluation) : HessianImplementation() , evaluation_(evaluation) { // Nothing to do } /* Clone constructor */ BoxCoxHessian * BoxCoxHessian::clone() const { return new BoxCoxHessian(*this); } /* Comparison operator */ Bool BoxCoxHessian::operator ==(const BoxCoxHessian & other) const { if (this == &other) return true; return (evaluation_ == other.evaluation_); } /* String converter */ String BoxCoxHessian::__repr__() const { OSS oss(true); oss << "class=" << BoxCoxHessian::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter __str__ */ String BoxCoxHessian::__str__(const String & offset) const { OSS oss (false); oss << "BoxCoxHessian(lambda=" << getLambda() << ", shift=" << getShift() << ")"; return oss; } /* Accessor for the evaluation */ BoxCoxEvaluation BoxCoxHessian::getEvaluation() const { return evaluation_; } /* Hessian evaluation method */ SymmetricTensor BoxCoxHessian::hessian(const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); SymmetricTensor result(1, dimension); // There is no check of positive variables // This last one must be done by user or, as the hessian is used in a stochastic context, in the BoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] + getShift()[index]; if (x <= 0.0) throw InvalidArgumentException(HERE) << "Can not apply the Box Cox hessian function to a negative shifted value x=" << x; // Applying the Box-Cox function const Scalar lambda_i = getLambda()[index]; const Scalar logX = log(x); if (std::abs(lambda_i * logX) < 1e-8) result(0, 0, index) = -(1.0 + lambda_i * (logX - 1.0)) / (x * x); else result(0, 0, index) = (lambda_i - 1.0) * exp((lambda_i - 2.0) * logX); } return result; } /* Accessor for input point dimension */ UnsignedInteger BoxCoxHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger BoxCoxHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Accessor for the lambda */ Point BoxCoxHessian::getLambda() const { return evaluation_.getLambda(); } /* Accessor for the shift */ Point BoxCoxHessian::getShift() const { return evaluation_.getShift(); } /* Method save() stores the object through the StorageManager */ void BoxCoxHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void BoxCoxHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/BoxCoxTransform.cxx000066400000000000000000000057731307543307100223630ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BoxCoxTransform.hxx" #include "openturns/BoxCoxEvaluation.hxx" #include "openturns/BoxCoxGradient.hxx" #include "openturns/BoxCoxHessian.hxx" #include "openturns/InverseBoxCoxTransform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BoxCoxTransform); /* Default constructor */ BoxCoxTransform::BoxCoxTransform() : Function(BoxCoxEvaluation()) { // Nothing to do } /* Standard parameter constructor */ BoxCoxTransform::BoxCoxTransform(const Point & lambda) : Function() { const BoxCoxEvaluation evaluation(lambda); setEvaluation(evaluation.clone()); setGradient(BoxCoxGradient(evaluation).clone()); setHessian(BoxCoxHessian(evaluation).clone()); } /* ScalarCollection parameter constructor */ BoxCoxTransform::BoxCoxTransform(const Point & lambda, const Point & shift) : Function() { const BoxCoxEvaluation evaluation(lambda, shift); setEvaluation(evaluation.clone()); setGradient(BoxCoxGradient(evaluation).clone()); setHessian(BoxCoxHessian(evaluation).clone()); } /* 1D Scalar parameter constructor */ BoxCoxTransform::BoxCoxTransform(const Scalar & lambda) : Function() { const BoxCoxEvaluation evaluation(Point(1, lambda)); setEvaluation(evaluation.clone()); setGradient(BoxCoxGradient(evaluation).clone()); setHessian(BoxCoxHessian(evaluation).clone()); } BoxCoxTransform::BoxCoxTransform(const Scalar & lambda, const Scalar & shift) : Function() { const BoxCoxEvaluation evaluation(Point(1, lambda), Point(1, shift)); setEvaluation(evaluation.clone()); setGradient(BoxCoxGradient(evaluation).clone()); setHessian(BoxCoxHessian(evaluation).clone()); } /* Virtual constructor */ BoxCoxTransform * BoxCoxTransform::clone() const { return new BoxCoxTransform(*this); } /* Lambda accessor */ Point BoxCoxTransform::getLambda() const { return dynamic_cast< BoxCoxEvaluation* >(getEvaluation().get())->getLambda(); } /* Shift accessor */ Point BoxCoxTransform::getShift() const { return dynamic_cast< BoxCoxEvaluation* >(getEvaluation().get())->getShift(); } /* Inverse accessor */ InverseBoxCoxTransform BoxCoxTransform::getInverse() const { return InverseBoxCoxTransform(getLambda(), getShift()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/CMakeLists.txt000066400000000000000000000243441307543307100212740ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (AggregatedFunction.cxx) if (MUPARSER_FOUND) ot_add_source_file (SymbolicParser.cxx) ot_add_source_file (SymbolicEvaluation.cxx) ot_add_source_file (SymbolicGradient.cxx) ot_add_source_file (SymbolicHessian.cxx) endif () ot_add_source_file (ComposedFunction.cxx) ot_add_source_file (DualLinearCombinationFunction.cxx) ot_add_source_file (EnumerateFunction.cxx) ot_add_source_file (EnumerateFunctionImplementation.cxx) ot_add_source_file (LinearCombinationFunction.cxx) ot_add_source_file (LinearEnumerateFunction.cxx) ot_add_source_file (HyperbolicAnisotropicEnumerateFunction.cxx) ot_add_source_file (FieldFunction.cxx) ot_add_source_file (FieldFunctionImplementation.cxx) ot_add_source_file (ParametricFunction.cxx) ot_add_source_file (ValueFunction.cxx) ot_add_source_file (SymbolicFunction.cxx) ot_add_source_file (VertexValueFunction.cxx) ot_add_source_file (Function.cxx) ot_add_source_file (FunctionImplementation.cxx) ot_add_source_file (LinearFunction.cxx) ot_add_source_file (IdentityFunction.cxx) ot_add_source_file (IndicatorFunction.cxx) ot_add_source_file (QuadraticFunction.cxx) ot_add_source_file (EvaluationImplementation.cxx) ot_add_source_file (GradientImplementation.cxx) ot_add_source_file (HessianImplementation.cxx) ot_add_source_file (NoEvaluation.cxx) ot_add_source_file (NoGradient.cxx) ot_add_source_file (NoHessian.cxx) ot_add_source_file (LinearEvaluation.cxx) ot_add_source_file (IdentityEvaluation.cxx) ot_add_source_file (QuadraticEvaluation.cxx) ot_add_source_file (LinearGradient.cxx) ot_add_source_file (ConstantGradient.cxx) ot_add_source_file (ConstantHessian.cxx) ot_add_source_file (ComposedEvaluation.cxx) ot_add_source_file (ComposedGradient.cxx) ot_add_source_file (ComposedHessian.cxx) ot_add_source_file (IndicatorEvaluation.cxx) ot_add_source_file (UniVariatePolynomialImplementation.cxx) ot_add_source_file (UniVariatePolynomial.cxx) ot_add_source_file (UniVariateFunctionImplementation.cxx) ot_add_source_file (UniVariateFunction.cxx) ot_add_source_file (FourierSeries.cxx) ot_add_source_file (HaarWavelet.cxx) ot_add_source_file (UniVariateFunctionEvaluation.cxx) ot_add_source_file (ProductUniVariateFunctionEvaluation.cxx) ot_add_source_file (ProductUniVariateFunctionGradient.cxx) ot_add_source_file (ProductUniVariateFunctionHessian.cxx) ot_add_source_file (DualLinearCombinationEvaluation.cxx) ot_add_source_file (DualLinearCombinationGradient.cxx) ot_add_source_file (DualLinearCombinationHessian.cxx) ot_add_source_file (ExpertMixture.cxx) ot_add_source_file (LinearCombinationEvaluation.cxx) ot_add_source_file (LinearCombinationGradient.cxx) ot_add_source_file (LinearCombinationHessian.cxx) ot_add_source_file (ProductEvaluation.cxx) ot_add_source_file (ProductFunction.cxx) ot_add_source_file (ProductGradient.cxx) ot_add_source_file (ProductHessian.cxx) ot_add_source_file (DatabaseFunction.cxx) ot_add_source_file (DatabaseEvaluation.cxx) ot_add_source_file (AggregatedGradient.cxx) ot_add_source_file (AggregatedHessian.cxx) ot_add_source_file (AggregatedEvaluation.cxx) ot_add_source_file (PiecewiseLinearEvaluation.cxx) ot_add_source_file (PiecewiseHermiteEvaluation.cxx) ot_add_source_file (ProductPolynomialEvaluation.cxx) ot_add_source_file (ProductPolynomialHessian.cxx) ot_add_source_file (ProductPolynomialGradient.cxx) ot_add_source_file (BasisImplementation.cxx) ot_add_source_file (Basis.cxx) ot_add_source_file (FiniteBasis.cxx) ot_add_source_file (BasisSequenceImplementation.cxx) ot_add_source_file (BasisSequence.cxx) ot_add_source_file (BasisSequenceFactoryImplementation.cxx) ot_add_source_file (BasisSequenceFactory.cxx) ot_add_source_file (LARS.cxx) ot_add_source_file (BoxCoxEvaluation.cxx) ot_add_source_file (BoxCoxGradient.cxx) ot_add_source_file (BoxCoxHessian.cxx) ot_add_source_file (BoxCoxTransform.cxx) ot_add_source_file (InverseBoxCoxEvaluation.cxx) ot_add_source_file (InverseBoxCoxGradient.cxx) ot_add_source_file (InverseBoxCoxHessian.cxx) ot_add_source_file (InverseBoxCoxTransform.cxx) ot_add_source_file (TrendEvaluation.cxx) ot_add_source_file (TrendTransform.cxx) ot_add_source_file (InverseTrendEvaluation.cxx) ot_add_source_file (InverseTrendTransform.cxx) ot_add_source_file (BasisFactory.cxx) ot_add_source_file (ConstantBasisFactory.cxx) ot_add_source_file (LinearBasisFactory.cxx) ot_add_source_file (QuadraticBasisFactory.cxx) ot_add_source_file (ParametricEvaluation.cxx) ot_add_source_file (ParametricGradient.cxx) ot_add_source_file (ParametricHessian.cxx) ot_add_source_file (P1LagrangeEvaluation.cxx) ot_add_source_file (FunctionalBasisImplementation.cxx) ot_add_source_file (FunctionalBasis.cxx) ot_add_source_file (UniVariateFunctionFamily.cxx) ot_add_source_file (UniVariateFunctionFactory.cxx) ot_add_source_file (TensorizedUniVariateFunctionFactory.cxx) ot_add_source_file (MonomialFunction.cxx) ot_add_source_file (MonomialFunctionFactory.cxx) ot_install_header_file (AggregatedFunction.hxx) if (MUPARSER_FOUND) ot_install_header_file (SymbolicParser.hxx) ot_install_header_file (SymbolicEvaluation.hxx) ot_install_header_file (SymbolicGradient.hxx) ot_install_header_file (SymbolicHessian.hxx) endif () ot_install_header_file (ComposedFunction.hxx) ot_install_header_file (DualLinearCombinationFunction.hxx) ot_install_header_file (EnumerateFunction.hxx) ot_install_header_file (EnumerateFunctionImplementation.hxx) ot_install_header_file (LinearCombinationFunction.hxx) ot_install_header_file (LinearEnumerateFunction.hxx) ot_install_header_file (HyperbolicAnisotropicEnumerateFunction.hxx) ot_install_header_file (ParametricFunction.hxx) ot_install_header_file (ProductPolynomialEvaluation.hxx) ot_install_header_file (ProductPolynomialGradient.hxx) ot_install_header_file (ProductPolynomialHessian.hxx) ot_install_header_file (AggregatedEvaluation.hxx) ot_install_header_file (AggregatedGradient.hxx) ot_install_header_file (AggregatedHessian.hxx) ot_install_header_file (PiecewiseLinearEvaluation.hxx) ot_install_header_file (PiecewiseHermiteEvaluation.hxx) ot_install_header_file (ConstantGradient.hxx) ot_install_header_file (QuadraticEvaluation.hxx) ot_install_header_file (NoGradient.hxx) ot_install_header_file (ProductEvaluation.hxx) ot_install_header_file (NoHessian.hxx) ot_install_header_file (IndicatorEvaluation.hxx) ot_install_header_file (MethodBoundEvaluation.hxx) ot_install_header_file (ComposedHessian.hxx) ot_install_header_file (OTFunc.hxx) ot_install_header_file (HessianImplementation.hxx) ot_install_header_file (ProductFunction.hxx) ot_install_header_file (LinearGradient.hxx) ot_install_header_file (LinearEvaluation.hxx) ot_install_header_file (IdentityEvaluation.hxx) ot_install_header_file (NoEvaluation.hxx) ot_install_header_file (ConstantHessian.hxx) ot_install_header_file (LinearFunction.hxx) ot_install_header_file (IdentityFunction.hxx) ot_install_header_file (IndicatorFunction.hxx) ot_install_header_file (QuadraticFunction.hxx) ot_install_header_file (UniVariatePolynomial.hxx) ot_install_header_file (UniVariatePolynomialImplementation.hxx) ot_install_header_file (UniVariateFunction.hxx) ot_install_header_file (UniVariateFunctionImplementation.hxx) ot_install_header_file (FourierSeries.hxx) ot_install_header_file (HaarWavelet.hxx) ot_install_header_file (UniVariateFunctionEvaluation.hxx) ot_install_header_file (ProductUniVariateFunctionEvaluation.hxx) ot_install_header_file (ProductUniVariateFunctionHessian.hxx) ot_install_header_file (ProductUniVariateFunctionGradient.hxx) ot_install_header_file (ProductGradient.hxx) ot_install_header_file (ComposedEvaluation.hxx) ot_install_header_file (GradientImplementation.hxx) ot_install_header_file (EvaluationImplementation.hxx) ot_install_header_file (ComposedGradient.hxx) ot_install_header_file (DualLinearCombinationEvaluation.hxx) ot_install_header_file (DualLinearCombinationGradient.hxx) ot_install_header_file (DualLinearCombinationHessian.hxx) ot_install_header_file (ExpertMixture.hxx) ot_install_header_file (LinearCombinationEvaluation.hxx) ot_install_header_file (LinearCombinationGradient.hxx) ot_install_header_file (LinearCombinationHessian.hxx) ot_install_header_file (FunctionImplementation.hxx) ot_install_header_file (Function.hxx) ot_install_header_file (FieldFunctionImplementation.hxx) ot_install_header_file (FieldFunction.hxx) ot_install_header_file (ValueFunction.hxx) ot_install_header_file (SymbolicFunction.hxx) ot_install_header_file (VertexValueFunction.hxx) ot_install_header_file (ProductHessian.hxx) ot_install_header_file (DatabaseFunction.hxx) ot_install_header_file (DatabaseEvaluation.hxx) ot_install_header_file (BasisImplementation.hxx) ot_install_header_file (Basis.hxx) ot_install_header_file (FiniteBasis.hxx) ot_install_header_file (BasisSequenceImplementation.hxx) ot_install_header_file (BasisSequence.hxx) ot_install_header_file (BasisSequenceFactoryImplementation.hxx) ot_install_header_file (BasisSequenceFactory.hxx) ot_install_header_file (LARS.hxx) ot_install_header_file (BoxCoxEvaluation.hxx) ot_install_header_file (BoxCoxGradient.hxx) ot_install_header_file (BoxCoxHessian.hxx) ot_install_header_file (BoxCoxTransform.hxx) ot_install_header_file (InverseBoxCoxEvaluation.hxx) ot_install_header_file (InverseBoxCoxGradient.hxx) ot_install_header_file (InverseBoxCoxHessian.hxx) ot_install_header_file (InverseBoxCoxTransform.hxx) ot_install_header_file (TrendEvaluation.hxx) ot_install_header_file (TrendTransform.hxx) ot_install_header_file (InverseTrendEvaluation.hxx) ot_install_header_file (InverseTrendTransform.hxx) ot_install_header_file (BasisFactory.hxx) ot_install_header_file (ConstantBasisFactory.hxx) ot_install_header_file (LinearBasisFactory.hxx) ot_install_header_file (QuadraticBasisFactory.hxx) ot_install_header_file (ParametricEvaluation.hxx) ot_install_header_file (ParametricGradient.hxx) ot_install_header_file (ParametricHessian.hxx) ot_install_header_file (P1LagrangeEvaluation.hxx) ot_install_header_file (FunctionalBasisImplementation.hxx) ot_install_header_file (FunctionalBasis.hxx) ot_install_header_file (UniVariateFunctionFamily.hxx) ot_install_header_file (UniVariateFunctionFactory.hxx) ot_install_header_file (TensorizedUniVariateFunctionFactory.hxx) ot_install_header_file (MonomialFunction.hxx) ot_install_header_file (MonomialFunctionFactory.hxx) # Recurse in subdirectories add_subdirectory (SpecFunc) openturns-1.9/lib/src/Base/Func/ComposedEvaluation.cxx000066400000000000000000000165061307543307100230620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/ComposedEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComposedEvaluation); static const Factory Factory_ComposedEvaluation; /* Default constructor */ ComposedEvaluation::ComposedEvaluation(const EvaluationPointer & p_leftFunction, const EvaluationPointer & p_rightFunction) : EvaluationImplementation() , p_leftFunction_(p_leftFunction) , p_rightFunction_(p_rightFunction) { // Check if the dimensions of the left and right functions are compatible if (p_leftFunction->getInputDimension() != p_rightFunction->getOutputDimension()) throw InvalidArgumentException(HERE) << "The input dimension=" << p_leftFunction->getInputDimension() << " of the left function must be equal to the output dimension=" << p_rightFunction->getOutputDimension() << " of the right function to compose them"; setInputDescription(p_rightFunction->getInputDescription()); setOutputDescription(p_leftFunction->getOutputDescription()); } /* Virtual constructor */ ComposedEvaluation * ComposedEvaluation::clone() const { return new ComposedEvaluation(*this); } /* Comparison operator */ Bool ComposedEvaluation::operator ==(const ComposedEvaluation & other) const { return true; } /* Get the i-th marginal function */ ComposedEvaluation::Implementation ComposedEvaluation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return new ComposedEvaluation(p_leftFunction_->getMarginal(i), p_rightFunction_); } /* Get the function corresponding to indices components */ ComposedEvaluation::Implementation ComposedEvaluation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal function must be in the range [0, dim-1] and must be different"; return new ComposedEvaluation(p_leftFunction_->getMarginal(indices), p_rightFunction_); } /* String converter */ String ComposedEvaluation::__repr__() const { OSS oss(true); oss << "class=" << ComposedEvaluation::GetClassName() << " name=" << getName() << " leftFunction=" << p_leftFunction_->__repr__() << " rightFunction=" << p_rightFunction_->__repr__(); return oss; } String ComposedEvaluation::__str__(const String & offset) const { OSS oss(false); if (hasVisibleName()) oss << offset << "name=" << getName() << "\n"; oss << "(" << p_leftFunction_->__str__(offset) << ")o("; oss << p_rightFunction_->__str__(offset) << ")"; return oss; } /* Operator () */ Point ComposedEvaluation::operator() (const Point & inP) const { if (inP.getDimension() != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a Function with an argument of invalid dimension"; ++callsNumber_; const Point rightValue(p_rightFunction_->operator()(inP)); const Point leftValue(p_leftFunction_->operator()(rightValue)); if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(leftValue); } return leftValue; } /* Operator () */ Sample ComposedEvaluation::operator() (const Sample & inSample) const { callsNumber_ += inSample.getSize(); const Sample rightSample(p_rightFunction_->operator()(inSample)); Sample leftSample(p_leftFunction_->operator()(rightSample)); leftSample.setDescription(getOutputDescription()); if (isHistoryEnabled_) { inputStrategy_.store(inSample); outputStrategy_.store(leftSample); } return leftSample; } /* Parameters value accessor */ Point ComposedEvaluation::getParameter() const { Point parameter(p_rightFunction_->getParameter()); parameter.add(p_leftFunction_->getParameter()); return parameter; } void ComposedEvaluation::setParameter(const Point & parameter) { Point rightParameter(p_rightFunction_->getParameter()); const UnsignedInteger rightDimension = rightParameter.getDimension(); Point leftParameter(p_leftFunction_->getParameter()); const UnsignedInteger leftDimension = leftParameter.getDimension(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < rightDimension; ++ i) { rightParameter[i] = parameter[index]; ++ index; } p_rightFunction_->setParameter(rightParameter); for (UnsignedInteger i = 0; i < leftDimension; ++ i) { leftParameter[i] = parameter[index]; ++ index; } p_leftFunction_->setParameter(leftParameter); } /* Parameters description accessor */ Description ComposedEvaluation::getParameterDescription() const { Description description(p_rightFunction_->getParameterDescription()); description.add(p_leftFunction_->getParameterDescription()); return description; } void ComposedEvaluation::setParameterDescription(const Description & description) { Description rightDescription(p_rightFunction_->getParameterDescription()); const UnsignedInteger rightDimension = rightDescription.getSize(); Description leftDescription(p_leftFunction_->getParameterDescription()); const UnsignedInteger leftDimension = leftDescription.getSize(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < rightDimension; ++ i) { rightDescription[i] = description[index]; ++ index; } p_rightFunction_->setParameterDescription(rightDescription); for (UnsignedInteger i = 0; i < leftDimension; ++ i) { leftDescription[i] = description[index]; ++ index; } p_leftFunction_->setParameterDescription(leftDescription); } /* Accessor for input point dimension */ UnsignedInteger ComposedEvaluation::getInputDimension() const { return p_rightFunction_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ComposedEvaluation::getOutputDimension() const { return p_leftFunction_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ComposedEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "leftFunction_", *p_leftFunction_ ); adv.saveAttribute( "rightFunction_", *p_rightFunction_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedEvaluation::load(Advocate & adv) { TypedInterfaceObject evaluationValue; EvaluationImplementation::load(adv); adv.loadAttribute( "leftFunction_", evaluationValue ); p_leftFunction_ = evaluationValue.getImplementation(); adv.loadAttribute( "rightFunction_", evaluationValue ); p_rightFunction_ = evaluationValue.getImplementation(); } /* Composed implementation accessor */ ComposedEvaluation::EvaluationPointer ComposedEvaluation::getLeftEvaluationImplementation() const { return p_leftFunction_; } ComposedEvaluation::EvaluationPointer ComposedEvaluation::getRightEvaluationImplementation() const { return p_rightFunction_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ComposedFunction.cxx000066400000000000000000000160671307543307100225420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for the composed function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComposedFunction.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" #include "openturns/ComposedEvaluation.hxx" #include "openturns/ComposedGradient.hxx" #include "openturns/ComposedHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComposedFunction); static const Factory Factory_ComposedFunction; /* Default constructor */ ComposedFunction::ComposedFunction() : FunctionImplementation() , p_leftFunction_() , p_rightFunction_() { // Nothing to do } /* Composition constructor */ ComposedFunction::ComposedFunction(const Implementation & p_left, const Implementation & p_right) : FunctionImplementation(new ComposedEvaluation(p_left->getEvaluation(), p_right->getEvaluation()), new NoGradient(), new NoHessian()) , p_leftFunction_(p_left) , p_rightFunction_(p_right) { try { GradientPointer p_gradientImplementation(new ComposedGradient(p_left->getGradient(), p_right->getEvaluation(), p_right->getGradient())); setGradient(p_gradientImplementation); setUseDefaultGradientImplementation(p_left->getUseDefaultGradientImplementation() || p_right->getUseDefaultGradientImplementation()); } catch(InvalidArgumentException &) { // Nothing to do } try { HessianPointer p_hessianImplementation(new ComposedHessian(p_left->getGradient(), p_left->getHessian(), p_right->getEvaluation(), p_right->getGradient(), p_right->getHessian())); setHessian(p_hessianImplementation); setUseDefaultHessianImplementation(p_left->getUseDefaultHessianImplementation() || p_right->getUseDefaultHessianImplementation()); } catch(InvalidArgumentException &) { // Nothing to do } } /* Composition constructor */ ComposedFunction::ComposedFunction(const Function & left, const Function & right) : FunctionImplementation(new ComposedEvaluation(left.getEvaluation(), right.getEvaluation()), new NoGradient(), new NoHessian()) , p_leftFunction_(left.getImplementation()) , p_rightFunction_(right.getImplementation()) { try { GradientPointer p_gradientImplementation(new ComposedGradient(left.getGradient(), right.getEvaluation(), right.getGradient())); setGradient(p_gradientImplementation); setUseDefaultGradientImplementation(left.getUseDefaultGradientImplementation() || right.getUseDefaultGradientImplementation()); } catch(InvalidArgumentException &) { // Nothing to do } try { HessianPointer p_hessianImplementation(new ComposedHessian(left.getGradient(), left.getHessian(), right.getEvaluation(), right.getGradient(), right.getHessian())); setHessian(p_hessianImplementation); setUseDefaultHessianImplementation(left.getUseDefaultHessianImplementation() || right.getUseDefaultHessianImplementation()); } catch(InvalidArgumentException &) { // Nothing to do } } /* Virtual constructor */ ComposedFunction * ComposedFunction::clone() const { return new ComposedFunction(*this); } /* Comparison operator */ Bool ComposedFunction::operator ==(const ComposedFunction & other) const { return true; } /* String converter */ String ComposedFunction::__repr__() const { OSS oss; oss << "class=" << ComposedFunction::GetClassName() << " name=" << getName() << " description=" << getDescription() << " left function=" << p_leftFunction_->__repr__() << " right function=" << p_rightFunction_->__repr__(); return oss; } /* * Gradient according to the marginal parameters * * F : RkxRs -> Rn * (y, pf) -> F(y, pf) * * G : RmxRt -> Rk * (x, pg) -> G(x, pg) * * Let p = [pg, pf] be the parameter vector of H, with: * * H : RmxRt+s -> Rn * (x, p) -> F(G(x, pg), pf) * * We have: * * (dH/dp)(x, p) = [(dF/dy)(G(x, pg), pf) . (dG/dpg)(x, pg), 0] + [0, (dF/dpf)(G(x, pg), pf)] * * the needed gradient is [(dH/dp)(x,p)]^t */ Matrix ComposedFunction::parameterGradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); // y = G(x, pg) const Point y(p_rightFunction_->operator()(inP)); // (dG/dpg)(x, pg) const Matrix rightGradientP(p_rightFunction_->parameterGradient(inP)); // (dF/dy)(y, pf) const Matrix leftGradientY(p_leftFunction_->gradient(y)); // (dF/dpf)(G(x, pg), pf) const Matrix leftGradientP(p_leftFunction_->parameterGradient(y)); // (dF/dy)(G(x, pg), pf) . (dG/dpg)(x, pg) const Matrix upper(rightGradientP * leftGradientY); // Build the full gradient const UnsignedInteger rightParametersDimension = upper.getNbRows(); const UnsignedInteger leftParametersDimension = leftGradientP.getNbRows(); Matrix grad(rightParametersDimension + leftParametersDimension, inputDimension); UnsignedInteger rowIndex = 0; // Gradient according to left parameters for (UnsignedInteger i = 0; i < rightParametersDimension; ++i) { for (UnsignedInteger j = 0; j < inputDimension; ++j) grad(rowIndex, j) = upper(i, j); ++ rowIndex; } // Gradient according to right parameters for (UnsignedInteger i = 0; i < leftParametersDimension; ++i) { for (UnsignedInteger j = 0; j < inputDimension; ++j) grad(rowIndex, j) = leftGradientP(i, j); ++ rowIndex; } return grad; } /* Method save() stores the object through the StorageManager */ void ComposedFunction::save(Advocate & adv) const { FunctionImplementation::save(adv); adv.saveAttribute( "leftFunction_", *p_leftFunction_ ); adv.saveAttribute( "rightFunction_", *p_rightFunction_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedFunction::load(Advocate & adv) { TypedInterfaceObject functionValue; FunctionImplementation::load(adv); adv.loadAttribute( "leftFunction_", functionValue ); p_leftFunction_ = functionValue.getImplementation(); adv.loadAttribute( "rightFunction_", functionValue ); p_rightFunction_ = functionValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ComposedGradient.cxx000066400000000000000000000114701307543307100225030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for the gradient of composed functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComposedGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComposedGradient); static const Factory Factory_ComposedGradient; /* Default constructor */ ComposedGradient::ComposedGradient(const GradientPointer & p_leftGradient, const EvaluationPointer & p_rightFunction, const GradientPointer & p_rightGradient) : GradientImplementation(), p_leftGradient_(p_leftGradient), p_rightFunction_(p_rightFunction), p_rightGradient_(p_rightGradient) { // We check that the dimensions of the input parameters are compatible // First, check the compatibility between the right function and the right gradient if ((p_rightFunction->getInputDimension() != p_rightGradient->getInputDimension()) || (p_rightFunction->getOutputDimension() != p_rightGradient->getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the right function and the right gradient have incompatible input or output dimensions."; // Second, check the left gradient and the right function if (p_leftGradient->getInputDimension() != p_rightFunction->getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the left gradient and the right function have incompatible input or output dimensions."; } /* Virtual constructor */ ComposedGradient * ComposedGradient::clone() const { return new ComposedGradient(*this); } /* Comparison operator */ Bool ComposedGradient::operator ==(const ComposedGradient & other) const { return true; } /* String converter */ String ComposedGradient::__repr__() const { OSS oss; oss << "class=" << ComposedGradient::GetClassName() << " name=" << getName() << " leftGradient=" << p_leftGradient_->__repr__() << " rightFunction=" << p_rightFunction_->__repr__() << " rightGradient=" << p_rightGradient_->__repr__(); return oss; } /* Method gradient() returns the Jacobian transposed matrix of the function at point * f goes from Rn to Rp and g from Rq to Rp, so h = f o g goes from Rq to Rn. Its * jacobian goes from Rq to L(Rq, Rn), thus its gradient goes from Rq to L(Rn, Rq): * it is an n by q matrix */ Matrix ComposedGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; return p_rightGradient_->gradient(inP) * p_leftGradient_->gradient(p_rightFunction_->operator()(inP)); } /* Accessor for input point dimension */ UnsignedInteger ComposedGradient::getInputDimension() const { return p_rightGradient_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ComposedGradient::getOutputDimension() const { return p_leftGradient_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ComposedGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "leftGradient_", *p_leftGradient_ ); adv.saveAttribute( "rightFunction_", *p_rightFunction_ ); adv.saveAttribute( "rightGradient_", *p_rightGradient_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedGradient::load(Advocate & adv) { TypedInterfaceObject evaluationValue; TypedInterfaceObject gradientValue; GradientImplementation::load(adv); adv.loadAttribute( "leftGradient_", gradientValue ); p_leftGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "rightFunction_", evaluationValue ); p_rightFunction_ = evaluationValue.getImplementation(); adv.loadAttribute( "rightGradient_", gradientValue ); p_rightGradient_ = gradientValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ComposedHessian.cxx000066400000000000000000000163311307543307100223410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math hessians * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComposedHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComposedHessian); static const Factory Factory_ComposedHessian; /* Default constructor */ ComposedHessian::ComposedHessian(const GradientPointer & p_leftGradient, const HessianPointer & p_leftHessian, const EvaluationPointer & p_rightFunction, const GradientPointer & p_rightGradient, const HessianPointer & p_rightHessian) : HessianImplementation(), p_leftGradient_(p_leftGradient), p_leftHessian_(p_leftHessian), p_rightFunction_(p_rightFunction), p_rightGradient_(p_rightGradient), p_rightHessian_(p_rightHessian) { // We check that the dimensions of the input parameters are compatible // First, check the compatibility between the right function, the right gradient and the right hessian if ((p_rightFunction->getInputDimension() != p_rightGradient->getInputDimension()) || (p_rightFunction->getInputDimension() != p_rightHessian->getInputDimension()) || (p_rightFunction->getOutputDimension() != p_rightGradient->getOutputDimension()) || (p_rightFunction->getOutputDimension() != p_rightHessian->getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the right function, the right gradient and the right hessian have incompatible input or output dimensions."; // Second, check the compatibility between the left gradient and the left hessian if ((p_leftGradient->getInputDimension() != p_leftHessian->getInputDimension()) || (p_leftGradient->getOutputDimension() != p_leftHessian->getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the left gradient and the left hessian have incompatible input or output dimensions."; // Third, check the compatibility between the right output dimension and the left input dimension if (p_leftGradient->getInputDimension() != p_rightFunction->getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the left gradient and the right function have incompatible input or output dimensions."; } /* Virtual constructor */ ComposedHessian * ComposedHessian::clone() const { return new ComposedHessian(*this); } /* Comparison operator */ Bool ComposedHessian::operator ==(const ComposedHessian & other) const { return true; } /* String converter */ String ComposedHessian::__repr__() const { OSS oss; oss << "class=" << ComposedHessian::GetClassName() << " name=" << getName() << " leftGradient=" << p_leftGradient_->__repr__() << " leftHessian=" << p_leftHessian_->__repr__() << " rightFunction=" << p_rightFunction_->__repr__() << " rightGradient=" << p_rightGradient_->__repr__() << " rightHessian=" << p_rightHessian_->__repr__(); return oss; } /* Method hessian() returns the symmetric tensor of the second gradient of the function at point */ SymmetricTensor ComposedHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; // Hessian of the composed function fog, g:R^n->R^p, f:R^p->R^q so fog:R^n->R^q const Point p_rightIn(p_rightFunction_->operator()(inP)); const Matrix p_rightGradientIn(p_rightGradient_->gradient(inP)); const SymmetricTensor p_rightHessianIn(p_rightHessian_->hessian(inP)); const Matrix p_leftGradientIn(p_leftGradient_->gradient(p_rightIn)); const SymmetricTensor p_leftHessianIn(p_leftHessian_->hessian(p_rightIn)); // Get the several dimensions const UnsignedInteger outputDimension = getOutputDimension(); const UnsignedInteger innerDimension = p_rightIn.getDimension(); SymmetricTensor result(inputDimension, outputDimension); /* We unroll the formula: * D2(h)(x) = D2(f)(g(x))D(g)(x)D(g)(x)+D(f)(g(x))D2(g)(x) * after transposition to convert jacobian and hessian into * the associated gradients */ for (UnsignedInteger i = 0; i < inputDimension; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { for (UnsignedInteger k = 0; k < outputDimension; ++k) { result(i, j, k) = 0.0; for (UnsignedInteger m = 0; m < innerDimension; ++m) { result(i, j, k) += p_leftGradientIn(m, k) * p_rightHessianIn(i, j, m); for (UnsignedInteger n = 0; n < p_rightIn.getDimension(); ++n) { result(i, j, k) += p_leftHessianIn(m, n, k) * p_rightGradientIn(i, m) * p_rightGradientIn(j, n); } // n } // m } // k } // j } // i return result; } /* Accessor for input point dimension */ UnsignedInteger ComposedHessian::getInputDimension() const { return p_rightHessian_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ComposedHessian::getOutputDimension() const { return p_leftHessian_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ComposedHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "leftGradient_", *p_leftGradient_ ); adv.saveAttribute( "leftHessian_", *p_leftHessian_ ); adv.saveAttribute( "rightFunction_", *p_rightFunction_ ); adv.saveAttribute( "rightGradient_", *p_rightGradient_ ); adv.saveAttribute( "rightHessian_", *p_rightHessian_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedHessian::load(Advocate & adv) { TypedInterfaceObject evaluationValue; TypedInterfaceObject gradientValue; TypedInterfaceObject hessianValue; HessianImplementation::load(adv); adv.loadAttribute( "leftGradient_", gradientValue ); p_leftGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "leftHessian_", hessianValue ); p_leftHessian_ = hessianValue.getImplementation(); adv.loadAttribute( "rightFunction_", evaluationValue ); p_rightFunction_ = evaluationValue.getImplementation(); adv.loadAttribute( "rightGradient_", gradientValue ); p_rightGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "rightHessian_", hessianValue ); p_rightHessian_ = hessianValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ConstantBasisFactory.cxx000066400000000000000000000044501307543307100233570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Constant basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ConstantBasisFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConstantBasisFactory); static const Factory Factory_ConstantBasisFactory; /* Default constructor */ ConstantBasisFactory::ConstantBasisFactory (const UnsignedInteger inputDimension) : BasisFactory() , inputDimension_(inputDimension) { // Nothing to do } /* String converter */ String ConstantBasisFactory::__repr__() const { return OSS() << "class=" << ConstantBasisFactory::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ ConstantBasisFactory* ConstantBasisFactory::clone() const { return new ConstantBasisFactory(*this); } Basis ConstantBasisFactory::build() const { Basis basis; Point constant(1); constant[0] = 1.; basis.add(LinearFunction (Point(inputDimension_, 0.0), constant, Matrix(1, inputDimension_))); return basis; } /* Method save() stores the object through the StorageManager */ void ConstantBasisFactory::save(Advocate & adv) const { BasisFactory::save(adv); adv.saveAttribute("inputDimension_", inputDimension_); } /* Method load() reloads the object from the StorageManager */ void ConstantBasisFactory::load(Advocate & adv) { BasisFactory::load(adv); adv.loadAttribute("inputDimension_", inputDimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ConstantGradient.cxx000066400000000000000000000071051307543307100225230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a constant numerical math gradient implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ConstantGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConstantGradient); static const Factory Factory_ConstantGradient; /* Default constructor */ ConstantGradient::ConstantGradient() : GradientImplementation() { // Nothing to do } /* Parameter constructor */ ConstantGradient::ConstantGradient(const Matrix & constant) : GradientImplementation() , constant_(constant) { /* Check if the dimensions of the constant term is compatible with the linear term */ } /* Virtual constructor */ ConstantGradient * ConstantGradient::clone() const { return new ConstantGradient(*this); } /* Comparison operator */ Bool ConstantGradient::operator ==(const ConstantGradient & other) const { return (constant_ == other.constant_); } /* String converter */ String ConstantGradient::__repr__() const { OSS oss(true); oss << "class=" << ConstantGradient::GetClassName() << " name=" << getName() << " constant=" << constant_; return oss; } /* String converter */ String ConstantGradient::__str__(const String & offset) const { OSS oss(false); const UnsignedInteger inputDimension = getInputDimension(); const Description description(Description::BuildDefault(inputDimension, "x")); if (hasVisibleName()) oss << offset << getName() << ":\n"; for (UnsignedInteger i = 0; i < inputDimension; ++i) { if (i == 0) oss << offset << " ("; oss << description[i]; if (i == inputDimension - 1) oss << ")"; else oss << ", "; } oss << " ->\n"; oss << constant_.__str__(offset + " "); return oss; } /* Accessor for the constant term */ Matrix ConstantGradient::getConstant() const { return constant_; } /* Here is the interface that all derived class must implement */ /* Operator () */ Matrix ConstantGradient::gradient(const Point & inP) const { if (inP.getDimension() != constant_.getNbRows()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; ++callsNumber_; return constant_; } /* Accessor for input point dimension */ UnsignedInteger ConstantGradient::getInputDimension() const { return constant_.getNbRows(); } /* Accessor for output point dimension */ UnsignedInteger ConstantGradient::getOutputDimension() const { return constant_.getNbColumns(); } /* Method save() stores the object through the StorageManager */ void ConstantGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "constant_", constant_ ); } /* Method load() reloads the object from the StorageManager */ void ConstantGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "constant_", constant_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ConstantHessian.cxx000066400000000000000000000071521307543307100223620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a constant numerical math hessian implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ConstantHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConstantHessian); static const Factory Factory_ConstantHessian; /* Default constructor */ ConstantHessian::ConstantHessian() : HessianImplementation() { // Nothing to do } /* Parameter constructor */ ConstantHessian::ConstantHessian(const SymmetricTensor & constant) : HessianImplementation() , constant_(constant) { /* Check if the dimensions of the constant term is compatible with the linear term */ } /* Virtual constructor */ ConstantHessian * ConstantHessian::clone() const { return new ConstantHessian(*this); } /* Comparison operator */ Bool ConstantHessian::operator ==(const ConstantHessian & other) const { return (constant_ == other.constant_); } /* String converter */ String ConstantHessian::__repr__() const { OSS oss(true); oss << "class=" << ConstantHessian::GetClassName() << " name=" << getName() << " constant=" << constant_; return oss; } /* String converter */ String ConstantHessian::__str__(const String & offset) const { OSS oss(false); const UnsignedInteger inputDimension = getInputDimension(); const Description description(Description::BuildDefault(inputDimension, "x")); if (hasVisibleName()) oss << offset << getName() << ":" << Os::GetEndOfLine(); for (UnsignedInteger i = 0; i < inputDimension; ++i) { if (i == 0) oss << offset << " ("; oss << description[i]; if (i == inputDimension - 1) oss << ")"; else oss << ", "; } oss << " ->" << Os::GetEndOfLine(); oss << constant_.__str__(offset + " "); return oss; } /* Accessor for the constant term */ SymmetricTensor ConstantHessian::getConstant() const { return constant_; } /* Here is the interface that all derived class must implement */ /* Hessian () */ SymmetricTensor ConstantHessian::hessian(const Point & inP) const { if (inP.getDimension() != constant_.getNbRows()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; ++callsNumber_; return constant_; } /* Accessor for input point dimension */ UnsignedInteger ConstantHessian::getInputDimension() const { return constant_.getNbRows(); } /* Accessor for output point dimension */ UnsignedInteger ConstantHessian::getOutputDimension() const { return constant_.getNbSheets(); } /* Method save() stores the object through the StorageManager */ void ConstantHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "constant_", constant_ ); } /* Method load() reloads the object from the StorageManager */ void ConstantHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "constant_", constant_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DatabaseEvaluation.cxx000066400000000000000000000150431307543307100230100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation from samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DatabaseEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS typedef EvaluationImplementation::CacheKeyType CacheKeyType; typedef EvaluationImplementation::CacheValueType CacheValueType; typedef EvaluationImplementation::CacheType CacheType; CLASSNAMEINIT(DatabaseEvaluation); static const Factory Factory_DatabaseEvaluation; /* Default constructor */ DatabaseEvaluation::DatabaseEvaluation() : EvaluationImplementation() { // Nothing to do } /* Default constructor */ DatabaseEvaluation::DatabaseEvaluation(const Sample & inputSample, const Sample & outputSample, const Bool activateCache) : EvaluationImplementation() { setSample(inputSample, outputSample, activateCache); } /* Virtual constructor */ DatabaseEvaluation * DatabaseEvaluation::clone() const { return new DatabaseEvaluation(*this); } /* Comparison operator */ Bool DatabaseEvaluation::operator ==(const DatabaseEvaluation & other) const { if (this == &other) return true; return (inputSample_ == other.inputSample_) && (outputSample_ == other.outputSample_); } /* String converter */ String DatabaseEvaluation::__repr__() const { OSS oss(true); oss << "class=" << DatabaseEvaluation::GetClassName() << " name=" << getName() << " inputSample=" << inputSample_ << " outputSample" << outputSample_; return oss; } String DatabaseEvaluation::__str__( const String & offset ) const { OSS oss(false); oss << DatabaseEvaluation::GetClassName() << Os::GetEndOfLine() << offset << " input sample :" << Os::GetEndOfLine() << inputSample_.__str__(offset) << Os::GetEndOfLine() << offset << " output sample :" << Os::GetEndOfLine() << outputSample_.__str__(offset); return oss; } /* Input sample accessor */ void DatabaseEvaluation::setInputSample(const Sample &inputSample) { setSample( inputSample, outputSample_ ); } Sample DatabaseEvaluation::getInputSample() const { return inputSample_; } /* Output sample accessor */ void DatabaseEvaluation::setOutputSample(const Sample &outputSample) { setSample( inputSample_, outputSample ); } Sample DatabaseEvaluation::getOutputSample() const { return outputSample_; } void DatabaseEvaluation::setSample(const Sample & inputSample, const Sample & outputSample, const Bool activateCache) { const UnsignedInteger size = inputSample.getSize(); if(size == 0) throw InvalidDimensionException(HERE) << "Empty input sample"; if (outputSample.getSize() == 0) throw InvalidDimensionException(HERE) << "Empty output sample"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidDimensionException(HERE) << "Input and output samples have different sizes (in=" << inputSample.getSize() << " out=" << outputSample.getSize() << ")"; inputSample_ = inputSample; outputSample_ = outputSample; setInputDescription(inputSample.getDescription()); setOutputDescription(outputSample.getDescription()); tree_ = KDTree(inputSample); // Don't activate the cache systematically as it can take a significant amount of time for large samples if (activateCache) { addCacheContent( inputSample, outputSample ); enableCache(); } else disableCache(); } /* Here is the interface that all derived class must implement */ /* Operator () */ Point DatabaseEvaluation::operator()( const Point & inP ) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); Point result; CacheKeyType inKey(inP.getCollection()); if ( isCacheEnabled() && p_cache_->hasKey(inKey) ) { result = Point::ImplementationType( p_cache_->find(inKey) ); } else { result = outputSample_[tree_.getNearestNeighbourIndex(inP)]; } ++ callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } Sample DatabaseEvaluation::operator()( const Sample & inS ) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); Sample result; if (inS == inputSample_) result = outputSample_; else result = EvaluationImplementation::operator()(inS); callsNumber_ += inS.getSize(); if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger DatabaseEvaluation::getInputDimension() const { return inputSample_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger DatabaseEvaluation::getOutputDimension() const { return outputSample_.getDimension(); } /* Method save() stores the object through the StorageManager */ void DatabaseEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("inputSample_", inputSample_); adv.saveAttribute("outputSample_", outputSample_); } /* Method load() reloads the object from the StorageManager */ void DatabaseEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("inputSample_", inputSample_); adv.loadAttribute("outputSample_", outputSample_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DatabaseFunction.cxx000066400000000000000000000033631307543307100224700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements a pre-computed function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DatabaseFunction.hxx" #include "openturns/DatabaseEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DatabaseFunction); /* Default constructor */ DatabaseFunction::DatabaseFunction () : Function() { } /* Parameter constructor */ DatabaseFunction::DatabaseFunction (const Sample & inputSample, const Sample & outputSample, const Bool enableCache) : Function() { setEvaluation(new DatabaseEvaluation(inputSample, outputSample, enableCache)); } /* Comparison operator */ Bool DatabaseFunction::operator ==(const DatabaseFunction & other) const { return true; } /* String converter */ String DatabaseFunction::__repr__() const { return getImplementation()->__repr__(); } String DatabaseFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DualLinearCombinationEvaluation.cxx000066400000000000000000000362311307543307100255110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DualLinearCombinationEvaluation.hxx" #include "openturns/LinearCombinationEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DualLinearCombinationEvaluation); static const Factory Factory_DualLinearCombinationEvaluation; /* Default constructor */ DualLinearCombinationEvaluation::DualLinearCombinationEvaluation() : EvaluationImplementation() , functionsCollection_(0) , coefficients_(0, 0) { // Nothing to do } /* Parameters constructor */ DualLinearCombinationEvaluation::DualLinearCombinationEvaluation(const FunctionCollection & functionsCollection, const Sample & coefficients) : EvaluationImplementation() , functionsCollection_(0) , coefficients_(0, 0) { setFunctionsCollectionAndCoefficients(functionsCollection, coefficients); } /* Virtual constructor */ DualLinearCombinationEvaluation * DualLinearCombinationEvaluation::clone() const { return new DualLinearCombinationEvaluation(*this); } /* Description accessor */ void DualLinearCombinationEvaluation::setDescription(const Description & description) { EvaluationImplementation::setDescription(description); const Description inputDescription(getInputDescription()); const UnsignedInteger inputDimension = getInputDimension(); const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { Description atomDescription(functionsCollection_[i].getDescription()); for (UnsignedInteger j = 0; j < inputDimension; ++j) atomDescription[j] = inputDescription[j]; functionsCollection_[i].setDescription(atomDescription); } } /* Get the i-th marginal function */ DualLinearCombinationEvaluation::Implementation DualLinearCombinationEvaluation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; // We use a LinearCombinationEvaluation instead of a DualLinearCombinationEvaluation as it is more efficient and more easy to read const UnsignedInteger size = coefficients_.getSize(); Point marginalCoefficients(size); for (UnsignedInteger marginalIndex = 0; marginalIndex < size; ++marginalIndex) marginalCoefficients[marginalIndex] = coefficients_[marginalIndex][i]; return new LinearCombinationEvaluation(functionsCollection_, marginalCoefficients); } /* Get the function corresponding to indices components */ DualLinearCombinationEvaluation::Implementation DualLinearCombinationEvaluation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal function must be in the range [0, dim-1] and must be different"; // Special case for 1D marginal if (indices.getSize() == 1) return getMarginal(indices[0]); return new DualLinearCombinationEvaluation(functionsCollection_, coefficients_.getMarginal(indices)); } /* String converter */ String DualLinearCombinationEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " functions=" << functionsCollection_ << " coefficients=" << coefficients_.__repr__(); } String DualLinearCombinationEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset; const UnsignedInteger size = functionsCollection_.getSize(); const UnsignedInteger outputDimension = getOutputDimension(); Bool first = true; static const String valid("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_()[]{}^*/"); for (UnsignedInteger i = 0; i < size; ++i) { if (outputDimension == 1) { const Scalar value = coefficients_[i][0]; if (value != 0.0) { if (first) oss << value; else if (value > 0.0) oss << " + " << value; else oss << " - " << -value; first = false; const String expr(functionsCollection_[i].getEvaluation()->__str__()); // Print the function factor only if it is different from 1 if (expr != "1") { oss << " * "; const Bool complexString = expr.find_first_not_of(valid) != String::npos; if (complexString) oss << "("; oss << expr; if (complexString) oss << ")"; } } } // output dimension == 1 else { if (first) oss << coefficients_[i]; else oss << " + " << coefficients_[i]; first = false; const String expr(functionsCollection_[i].getEvaluation()->__str__()); if (expr != "1") { oss << " * "; const Bool complexString = expr.find_first_not_of(valid) != String::npos; if (complexString) oss << "("; oss << expr; if (complexString) oss << ")"; } } } return oss; } // Helper for the parallel version of the point-based evaluation operator struct DualLinearCombinationEvaluationPointFunctor { const Point & input_; const DualLinearCombinationEvaluation & evaluation_; Point accumulator_; DualLinearCombinationEvaluationPointFunctor(const Point & input, const DualLinearCombinationEvaluation & evaluation) : input_(input) , evaluation_(evaluation) , accumulator_(Point(evaluation.getOutputDimension())) {} DualLinearCombinationEvaluationPointFunctor(const DualLinearCombinationEvaluationPointFunctor & other, TBB::Split) : input_(other.input_) , evaluation_(other.evaluation_) , accumulator_(Point(other.accumulator_.getDimension())) {} inline void operator()( const TBB::BlockedRange & r ) { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) accumulator_ += evaluation_.coefficients_[i] * evaluation_.functionsCollection_[i](input_)[0]; } // operator() inline void join(const DualLinearCombinationEvaluationPointFunctor & other) { accumulator_ += other.accumulator_; } }; // struct DualLinearCombinationEvaluationPointFunctor /* Evaluation operator */ Point DualLinearCombinationEvaluation::operator () (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = functionsCollection_.getSize(); DualLinearCombinationEvaluationPointFunctor functor( inP, *this ); TBB::ParallelReduce( 0, size, functor ); const Point result(functor.accumulator_); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } Sample DualLinearCombinationEvaluation::operator () (const Sample & inS) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); const UnsignedInteger sampleSize = inS.getSize(); Sample result(sampleSize, getOutputDimension()); result.setDescription(getOutputDescription()); if (sampleSize == 0) return result; const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // Exploit possible parallelism in the basis functions const Sample basisSample(functionsCollection_[i](inS)); // Should be parallelized for (UnsignedInteger j = 0; j < sampleSize; ++j) result[j] += coefficients_[i] * basisSample[j][0]; } callsNumber_ += sampleSize; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Coefficients accessor */ Sample DualLinearCombinationEvaluation::getCoefficients() const { return coefficients_; } /* Functions accessor */ DualLinearCombinationEvaluation::FunctionCollection DualLinearCombinationEvaluation::getFunctionsCollection() const { return functionsCollection_; } void DualLinearCombinationEvaluation::setFunctionsCollectionAndCoefficients(const FunctionCollection & functionsCollection, const Sample & coefficients) { const UnsignedInteger size = functionsCollection.getSize(); // Check for empty functions collection if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a linear combination from an empty collection of functions."; // Check for incompatible number of functions and coefficients if (size != coefficients.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot build a linear combination with a different number of functions and coefficients."; // Check for coherent input and output dimensions of the functions UnsignedInteger inputDimension = functionsCollection[0].getInputDimension(); for (UnsignedInteger i = 1; i < size; ++i) { if (functionsCollection[i].getInputDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given functions have incompatible input dimension."; if (functionsCollection[i].getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given functions must have a one dimensional output."; } // Keep only the non zero coefficients coefficients_ = Sample(0, coefficients.getDimension()); functionsCollection_ = FunctionCollection(0); // First pass, extract the maximum absolute coefficient Scalar maximumAbsoluteCoefficient = 0.0; Point absoluteCoefficients(size); for (UnsignedInteger i = 0; i < size; ++i) { // Must cast the NSI_const_point into a Point to use the norm() method. absoluteCoefficients[i] = Point(coefficients[i]).norm(); if (absoluteCoefficients[i] > maximumAbsoluteCoefficient) maximumAbsoluteCoefficient = absoluteCoefficients[i]; } if (maximumAbsoluteCoefficient == 0.0) throw InvalidArgumentException(HERE) << "Error: all the coefficients are zero."; // Second pass, remove the small coefficients const Scalar epsilon = maximumAbsoluteCoefficient * ResourceMap::GetAsScalar("DualLinearCombinationEvaluation-SmallCoefficient"); for (UnsignedInteger i = 0; i < size; ++i) { if (absoluteCoefficients[i] > epsilon) { coefficients_.add(coefficients[i]); functionsCollection_.add(functionsCollection[i]); } else LOGWARN(OSS() << "removed the contributor " << i << "=" << functionsCollection[i] << " from the linear combination as its coefficient is too small."); } Description description(0); Description inputDescription(functionsCollection[0].getInputDescription()); for (UnsignedInteger i = 0; i < inputDescription.getSize(); ++i) { if (inputDescription[i].size() == 0) description.add(OSS() << "x" << i); else description.add(inputDescription[i]); } Description outputDescription(coefficients.getDescription()); for (UnsignedInteger i = 0; i < outputDescription.getSize(); ++i) { if (outputDescription[i].size() == 0) description.add(OSS() << "y" << i); else description.add(outputDescription[i]); } setDescription(description); } /* Input dimension accessor */ UnsignedInteger DualLinearCombinationEvaluation::getInputDimension() const { if (functionsCollection_.getSize() == 0) return 0; return functionsCollection_[0].getInputDimension(); } /* Output dimension accessor */ UnsignedInteger DualLinearCombinationEvaluation::getOutputDimension() const { return coefficients_.getDimension(); } /* Gradient according to the marginal parameters */ Matrix DualLinearCombinationEvaluation::parameterGradient(const Point & inP) const { Matrix result(getParameter().getDimension(), getOutputDimension()); // const UnsignedInteger size(functionsCollection_.getSize()); // // Get the parameters gradients for each atom and stack them into the result // UnsignedInteger rowIndex(0); // for (UnsignedInteger i = 0; i < size; ++i) // { // // Extract the atom gradient // const Matrix atomParametersGradient(functionsCollection_[i].parameterGradient(inP)); // const UnsignedInteger rowDimension(atomParametersGradient.getNbRows()); // const UnsignedInteger columnDimension(atomParametersGradient.getNbColumns()); // // Scale the atom gradient and copy it into the result // const Scalar coefficient(coefficients_[i]); // for (UnsignedInteger j = 0; j < rowDimension; ++j) // { // for (UnsignedInteger k = 0; k < columnDimension; ++k) // { // result(rowIndex, k) = coefficient * atomParametersGradient(j, k); // } // ++rowIndex; // } // } return result; } /* Parameters value accessor */ Point DualLinearCombinationEvaluation::getParameter() const { Point parameter(0); const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { parameter.add(functionsCollection_[i].getParameter()); } return parameter; } void DualLinearCombinationEvaluation::setParameter(const Point & parameter) { const UnsignedInteger size = functionsCollection_.getSize(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++ i) { Point marginalParameter(functionsCollection_[i].getParameter()); const UnsignedInteger marginalDimension = marginalParameter.getDimension(); for (UnsignedInteger j = 0; j < marginalDimension; ++ j) { marginalParameter[j] = parameter[index]; ++ index; } functionsCollection_[i].setParameter(marginalParameter); } } /* Parameters description accessor */ Description DualLinearCombinationEvaluation::getParameterDescription() const { Description description; const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { description.add(functionsCollection_[i].getParameterDescription()); } return description; } /* Method save() stores the object through the StorageManager */ void DualLinearCombinationEvaluation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "functionsCollection_", functionsCollection_ ); adv.saveAttribute( "coefficients_", coefficients_ ); } /* Method load() reloads the object from the StorageManager */ void DualLinearCombinationEvaluation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "functionsCollection_", functionsCollection_ ); adv.loadAttribute( "coefficients_", coefficients_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DualLinearCombinationFunction.cxx000066400000000000000000000041201307543307100251570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements linear combination of vectors. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DualLinearCombinationFunction.hxx" #include "openturns/DualLinearCombinationEvaluation.hxx" #include "openturns/DualLinearCombinationGradient.hxx" #include "openturns/DualLinearCombinationHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DualLinearCombinationFunction); /* Default constructor */ DualLinearCombinationFunction::DualLinearCombinationFunction () : Function() { } /* Parameter constructor */ DualLinearCombinationFunction::DualLinearCombinationFunction (const FunctionCollection & functionCollection, const Sample & coefficients) : Function() { const DualLinearCombinationEvaluation evaluation(functionCollection, coefficients); setEvaluation(evaluation.clone()); setGradient(new DualLinearCombinationGradient(evaluation)); setHessian(new DualLinearCombinationHessian(evaluation)); } /* Comparison operator */ Bool DualLinearCombinationFunction::operator ==(const DualLinearCombinationFunction & other) const { return true; } /* String converter */ String DualLinearCombinationFunction::__repr__() const { return getImplementation()->__repr__(); } String DualLinearCombinationFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DualLinearCombinationGradient.cxx000066400000000000000000000070231307543307100251340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DualLinearCombinationGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DualLinearCombinationGradient); static const Factory Factory_DualLinearCombinationGradient; /* Default constructor */ DualLinearCombinationGradient::DualLinearCombinationGradient() : GradientImplementation() , evaluation_() { // Nothing to do } /* Parameters constructor */ DualLinearCombinationGradient::DualLinearCombinationGradient(const DualLinearCombinationEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ DualLinearCombinationGradient * DualLinearCombinationGradient::clone() const { return new DualLinearCombinationGradient(*this); } /* Gradient method */ Matrix DualLinearCombinationGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); const UnsignedInteger outputDimension = getOutputDimension(); Matrix result(inputDimension, outputDimension); for (UnsignedInteger i = 0; i < size; ++i) { const Matrix gradientI(evaluation_.functionsCollection_[i].gradient(inP)); const Point coefficientI(evaluation_.coefficients_[i]); for (UnsignedInteger j = 0; j < inputDimension; ++j) for (UnsignedInteger k = 0; k < outputDimension; ++k) result(j, k) += gradientI(j, 0) * coefficientI[k]; } return result; } /* Accessor for input point dimension */ UnsignedInteger DualLinearCombinationGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger DualLinearCombinationGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String DualLinearCombinationGradient::__repr__() const { return OSS() << "class=" << GetClassName() << " evaluation=" << evaluation_; } /* Method save() stores the object through the StorageManager */ void DualLinearCombinationGradient::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void DualLinearCombinationGradient::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/DualLinearCombinationHessian.cxx000066400000000000000000000071671307543307100250020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DualLinearCombinationHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DualLinearCombinationHessian); static const Factory Factory_DualLinearCombinationHessian; /* Default constructor */ DualLinearCombinationHessian::DualLinearCombinationHessian() : HessianImplementation() , evaluation_() { // Nothing to do } /* Parameters constructor */ DualLinearCombinationHessian::DualLinearCombinationHessian(const DualLinearCombinationEvaluation & evaluation) : HessianImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ DualLinearCombinationHessian * DualLinearCombinationHessian::clone() const { return new DualLinearCombinationHessian(*this); } /* Hessian method */ SymmetricTensor DualLinearCombinationHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); const UnsignedInteger outputDimension = getOutputDimension(); SymmetricTensor result(inputDimension, outputDimension); for (UnsignedInteger i = 0; i < size; ++i) { const SymmetricTensor hessianI(evaluation_.functionsCollection_[i].hessian(inP)); const Point coefficientI(evaluation_.coefficients_[i]); for (UnsignedInteger j = 0; j < inputDimension; ++j) for (UnsignedInteger k = 0; k <= j; ++k) for (UnsignedInteger n = 0; n < outputDimension; ++n) result(j, k, n) += hessianI(j, k, 0) * coefficientI[n]; } return result; } /* Accessor for input point dimension */ UnsignedInteger DualLinearCombinationHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger DualLinearCombinationHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String DualLinearCombinationHessian::__repr__() const { return OSS() << "class=" << GetClassName() << " evaluation=" << evaluation_; } /* Method save() stores the object through the StorageManager */ void DualLinearCombinationHessian::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void DualLinearCombinationHessian::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/EnumerateFunction.cxx000066400000000000000000000100771307543307100227110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EnumerateFunction.hxx" #include "openturns/LinearEnumerateFunction.hxx" #include "openturns/HyperbolicAnisotropicEnumerateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EnumerateFunction); /* Constructor with parameters */ EnumerateFunction::EnumerateFunction(const EnumerateFunctionImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor with parameters */ EnumerateFunction::EnumerateFunction(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Parameter constructor */ EnumerateFunction::EnumerateFunction(const UnsignedInteger dimension) : TypedInterfaceObject(new LinearEnumerateFunction(dimension)) { // Nothing to do } /* Parameter constructor */ EnumerateFunction::EnumerateFunction(const UnsignedInteger dimension, const Scalar q) : TypedInterfaceObject(new HyperbolicAnisotropicEnumerateFunction(dimension, q)) { // Nothing to do } /* Parameter constructor */ EnumerateFunction::EnumerateFunction(const Point & weight, const Scalar q) : TypedInterfaceObject(new HyperbolicAnisotropicEnumerateFunction(weight, q)) { // Nothing to do } /* String converter */ String EnumerateFunction::__repr__() const { return getImplementation()->__repr__(); } String EnumerateFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* The bijective association between an integer and a set of indices */ Indices EnumerateFunction::operator() (const UnsignedInteger index) const { return getImplementation()->operator()( index ); } /* The inverse of the association */ UnsignedInteger EnumerateFunction::inverse(const Indices & indices) const { return getImplementation()->inverse( indices ); } /* The cardinal of the given strata */ UnsignedInteger EnumerateFunction::getStrataCardinal(const UnsignedInteger strataIndex) const { return getImplementation()->getStrataCardinal( strataIndex ); } /* The cardinal of the cumulated strata above or equal to the given strata */ UnsignedInteger EnumerateFunction::getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const { return getImplementation()->getStrataCumulatedCardinal( strataIndex ); } /* The index of the strata of degree max < degree */ UnsignedInteger EnumerateFunction::getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const { return getImplementation()->getMaximumDegreeStrataIndex( maximumDegree ); } /* The cardinal of indices of degree max <= maximumDegree */ UnsignedInteger EnumerateFunction::getMaximumDegreeCardinal(const UnsignedInteger maximumDegree) const { return getImplementation()->getMaximumDegreeCardinal(maximumDegree); } /* Dimension accessor */ void EnumerateFunction::setDimension(const UnsignedInteger dimension) { copyOnWrite(); getImplementation()->setDimension( dimension ); } UnsignedInteger EnumerateFunction::getDimension() const { return getImplementation()->getDimension(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/EnumerateFunctionImplementation.cxx000066400000000000000000000103221307543307100256100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EnumerateFunctionImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EnumerateFunctionImplementation); static const Factory Factory_EnumerateFunctionImplementation; /* Parameter constructor */ EnumerateFunctionImplementation::EnumerateFunctionImplementation(const UnsignedInteger dimension) : PersistentObject() , dimension_(dimension) { if ( dimension == 0 ) throw InvalidArgumentException ( HERE ) << "Cannot build an EnumerateFunction of dimension 0."; } /* Virtual constructor */ EnumerateFunctionImplementation * EnumerateFunctionImplementation::clone() const { return new EnumerateFunctionImplementation(*this); } /* String converter */ String EnumerateFunctionImplementation::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << dimension_; } /* The cardinal of indices of degree max <= maximumDegree */ UnsignedInteger EnumerateFunctionImplementation::getMaximumDegreeCardinal(const UnsignedInteger maximumDegree) const { return getStrataCumulatedCardinal(getMaximumDegreeStrataIndex(maximumDegree)); } /* Evaluation operator */ Indices EnumerateFunctionImplementation::operator() (const UnsignedInteger index) const { throw NotYetImplementedException( HERE ) << "In EnumerateFunctionImplementation::operator() (const UnsignedInteger index) const"; } /* The inverse of the association */ UnsignedInteger EnumerateFunctionImplementation::inverse(const Indices & indices) const { throw NotYetImplementedException( HERE ) << "In EnumerateFunctionImplementation::inverse(const Indices & indices) const"; } /* The cardinal of the given strata */ UnsignedInteger EnumerateFunctionImplementation::getStrataCardinal(const UnsignedInteger strateIndex) const { throw NotYetImplementedException( HERE ) << "In EnumerateFunctionImplementation::getStrataCardinal(const UnsignedInteger strateIndex) const"; } /* The cardinal of the cumulated strata above or equal to the given strate */ UnsignedInteger EnumerateFunctionImplementation::getStrataCumulatedCardinal(const UnsignedInteger strateIndex) const { throw NotYetImplementedException( HERE ) << "In EnumerateFunctionImplementation::getStrataCumulatedCardinal(const UnsignedInteger strateIndex) const"; } /* The index of the strata of degree max <= maximumDegree */ UnsignedInteger EnumerateFunctionImplementation::getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const { throw NotYetImplementedException( HERE ) << "In EnumerateFunctionImplementation::getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const"; } /* Dimension accessor */ void EnumerateFunctionImplementation::setDimension(const UnsignedInteger dimension) { dimension_ = dimension; } UnsignedInteger EnumerateFunctionImplementation::getDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void EnumerateFunctionImplementation::save(Advocate & adv) const { PersistentObject::save( adv ); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void EnumerateFunctionImplementation::load(Advocate & adv) { PersistentObject::load( adv ); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/EvaluationImplementation.cxx000066400000000000000000000642141307543307100242750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all evaluation implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/EvaluationImplementation.hxx" #include "openturns/ComposedEvaluation.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #endif #include "openturns/LinearEvaluation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Full.hxx" #include "openturns/Contour.hxx" #include "openturns/Curve.hxx" #include "openturns/Indices.hxx" #include "openturns/Box.hxx" BEGIN_NAMESPACE_OPENTURNS typedef EvaluationImplementation::CacheType EvaluationImplementationCache; static const Factory Factory_EvaluationImplementationCache; /* These methods are implemented here for the needs of Cache */ /* We should be careful because they may interfere with other definitions placed elsewhere */ static const Factory > Factory_PersistentCollection_UnsignedInteger; #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 static const Factory > Factory_PersistentCollection_Unsigned64BitsInteger; #endif TEMPLATE_CLASSNAMEINIT(PersistentCollection >); static const Factory > > Factory_PersistentCollection_PersistentCollection_Scalar; CLASSNAMEINIT(EvaluationImplementation); static const Factory Factory_EvaluationImplementation; /* Default constructor */ EvaluationImplementation::EvaluationImplementation() : PersistentObject() , callsNumber_(0) , p_cache_(new CacheType) , inputStrategy_(Full()) , outputStrategy_(Full()) , isHistoryEnabled_(false) , parameter_(0) , inputDescription_(0) , outputDescription_(0) { // We disable the cache by default p_cache_->disable(); } /* Virtual constructor */ EvaluationImplementation * EvaluationImplementation::clone() const { return new EvaluationImplementation(*this); } /* Comparison operator */ Bool EvaluationImplementation::operator ==(const EvaluationImplementation & other) const { return true; } /* String converter */ String EvaluationImplementation::__repr__() const { PointWithDescription parameters(parameter_); parameters.setDescription(parameterDescription_); OSS oss(true); oss << "class=" << EvaluationImplementation::GetClassName() << " name=" << getName() << " input description=" << inputDescription_ << " output description=" << outputDescription_ << " parameters=" << parameters; return oss; } /* String converter */ String EvaluationImplementation::__str__(const String & offset) const { return OSS(false) << offset << "EvaluationImplementation"; } /* Description Accessor */ void EvaluationImplementation::setDescription(const Description & description) { if (description.getSize() != getInputDimension() + getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the description must have a size of input dimension + output dimension, here size=" << description.getSize() << ", input dimension=" << getInputDimension() << ", output dimension=" << getOutputDimension(); inputDescription_ = Description(getInputDimension()); std::copy(description.begin(), description.begin() + getInputDimension(), inputDescription_.begin()); outputDescription_ = Description(getOutputDimension()); std::copy(description.begin() + getInputDimension(), description.begin() + description.getSize(), outputDescription_.begin()); } /* Description Accessor */ Description EvaluationImplementation::getDescription() const { Description description(getInputDescription()); Description outputDescription(getOutputDescription()); for (UnsignedInteger i = 0; i < getOutputDimension(); ++i) description.add(outputDescription[i]); return description; } /* Input description Accessor */ void EvaluationImplementation::setInputDescription(const Description & inputDescription) { if (inputDescription.getSize() != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the input description must have a size=" << inputDescription.getSize() << " equal to the input dimension=" << getInputDimension(); inputDescription_ = inputDescription; } Description EvaluationImplementation::getInputDescription() const { if (inputDescription_.getSize() == 0) return Description::BuildDefault(getInputDimension(), "x"); return inputDescription_; } /* Output description Accessor */ void EvaluationImplementation::setOutputDescription(const Description & outputDescription) { if (outputDescription.getSize() != getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the output description must have a size=" << outputDescription.getSize() << " equal to the output dimension=" << getOutputDimension(); outputDescription_ = outputDescription; } Description EvaluationImplementation::getOutputDescription() const { if (outputDescription_.getSize() == 0) return Description::BuildDefault(getOutputDimension(), "y"); return outputDescription_; } /* Test for actual implementation */ Bool EvaluationImplementation::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Operator () */ Sample EvaluationImplementation::operator() (const Sample & inSample) const { const UnsignedInteger inputDimension = getInputDimension(); if (inSample.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample outSample(size, getOutputDimension()); // Simple loop over the evaluation operator based on point // The calls number is updated by these calls for (UnsignedInteger i = 0; i < size; ++i) outSample[i] = operator()(inSample[i]); outSample.setDescription(getOutputDescription()); return outSample; } /* Operator () */ Field EvaluationImplementation::operator() (const Field & inField) const { const UnsignedInteger inputDimension = getInputDimension(); if (inField.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given time series has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inField.getDimension(); return Field(inField.getMesh(), operator()(inField.getValues())); } /* Enable or disable the internal cache */ void EvaluationImplementation::enableCache() const { p_cache_->enable(); } void EvaluationImplementation::disableCache() const { p_cache_->disable(); } Bool EvaluationImplementation::isCacheEnabled() const { return p_cache_->isEnabled(); } UnsignedInteger EvaluationImplementation::getCacheHits() const { return p_cache_->getHits(); } void EvaluationImplementation::addCacheContent(const Sample& inSample, const Sample& outSample) { p_cache_->enable(); const UnsignedInteger size = inSample.getSize(); for ( UnsignedInteger i = 0; i < size; ++ i ) { p_cache_->add( inSample[i], outSample[i] ); } } Sample EvaluationImplementation::getCacheInput() const { Bool cacheEnabled = isCacheEnabled(); enableCache(); PersistentCollection keyColl( p_cache_->getKeys() ); if ( ! cacheEnabled ) disableCache(); Sample inSample(0, getInputDimension()); for ( UnsignedInteger i = 0; i < keyColl.getSize(); ++ i ) inSample.add( keyColl[i] ); return inSample; } Sample EvaluationImplementation::getCacheOutput() const { Bool cacheEnabled = isCacheEnabled(); enableCache(); PersistentCollection valuesColl( p_cache_->getValues() ); if ( ! cacheEnabled ) disableCache(); Sample outSample(0, getOutputDimension()); for ( UnsignedInteger i = 0; i < valuesColl.getSize(); ++ i ) { outSample.add( valuesColl[i] ); } return outSample; } void EvaluationImplementation::clearCache() const { p_cache_->clear(); } /* Enable or disable the input/output history */ void EvaluationImplementation::enableHistory() const { isHistoryEnabled_ = true; } void EvaluationImplementation::disableHistory() const { isHistoryEnabled_ = false; } Bool EvaluationImplementation::isHistoryEnabled() const { return isHistoryEnabled_; } void EvaluationImplementation::clearHistory() const { inputStrategy_ = Full(); outputStrategy_ = Full(); } HistoryStrategy EvaluationImplementation::getHistoryInput() const { return inputStrategy_; } HistoryStrategy EvaluationImplementation::getHistoryOutput() const { return outputStrategy_; } /* Input point / parameter history accessor */ Sample EvaluationImplementation::getInputPointHistory() const { if (getParameterDimension() == 0) return inputStrategy_.getSample(); throw NotYetImplementedException(HERE) << "in EvaluationImplementation::getInputPointHistory"; } Sample EvaluationImplementation::getInputParameterHistory() const { throw NotYetImplementedException(HERE) << "in EvaluationImplementation::getInputParameterHistory"; } /* Gradient according to the marginal parameters */ Matrix EvaluationImplementation::parameterGradient(const Point & inP) const { Point parameter(getParameter()); const UnsignedInteger parameterDimension = parameter.getDimension(); const UnsignedInteger outputDimension = getOutputDimension(); const Scalar epsilon = ResourceMap::GetAsScalar("NumericalMathEvaluation-ParameterEpsilon"); Sample inS(parameterDimension + 1, parameter); for (UnsignedInteger i = 0; i < parameterDimension; ++ i) { inS[1 + i][i] += epsilon; } // operator()(x, theta) is non-const as it sets the parameter Pointer p_evaluation(clone()); Sample outS(p_evaluation->operator()(inP, inS)); Matrix grad(parameterDimension, outputDimension); for (UnsignedInteger i = 0; i < parameterDimension; ++ i) { for (UnsignedInteger j = 0; j < outputDimension; ++ j) { grad(i, j) = (outS[1 + i][j] - outS[0][j]) / epsilon; } } return grad; } /* Parameters value accessor */ Point EvaluationImplementation::getParameter() const { return parameter_; } void EvaluationImplementation::setParameter(const Point & parameter) { parameter_ = parameter; } void EvaluationImplementation::setParameterDescription(const Description & description) { parameterDescription_ = description; } /* Parameters description accessor */ Description EvaluationImplementation::getParameterDescription() const { return parameterDescription_; } /* Operator () */ Point EvaluationImplementation::operator() (const Point & inP) const { throw NotYetImplementedException(HERE) << "In EvaluationImplementation::operator() (const Point & inP) const"; } Point EvaluationImplementation::operator() (const Point & inP, const Point & parameter) { setParameter(parameter); return (*this)(inP); } Sample EvaluationImplementation::operator() (const Point & inP, const Sample & parameters) { const UnsignedInteger size = parameters.getSize(); Sample outS(size, getOutputDimension()); for (UnsignedInteger i = 0; i < size; ++ i) { setParameter(parameters[i]); outS[i] = operator()(inP); } return outS; } /* Accessor for input point dimension */ UnsignedInteger EvaluationImplementation::getInputDimension() const { throw NotYetImplementedException(HERE) << "In EvaluationImplementation::getInputDimension() const"; } /* Accessor for output point dimension */ UnsignedInteger EvaluationImplementation::getOutputDimension() const { throw NotYetImplementedException(HERE) << "In EvaluationImplementation::getOutputDimension() const"; } /* Accessor for input point dimension */ UnsignedInteger EvaluationImplementation::getParameterDimension() const { return getParameter().getDimension(); } /* Get the i-th marginal function */ EvaluationImplementation::Implementation EvaluationImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ EvaluationImplementation::Implementation EvaluationImplementation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; // We build an analytical function that extract the needed component // If X1,...,XN are the descriptions of the input of this function, it is a function from R^n to R^p // with formula Yk = Xindices[k] for k=1,...,p // Build non-ambigous names for the inputs. We cannot simply use the output description, as it must be valid muParser identifiers const UnsignedInteger inputDimension = getOutputDimension(); const UnsignedInteger outputDimension = indices.getSize(); #ifdef OPENTURNS_HAVE_MUPARSER Description input(inputDimension); for (UnsignedInteger index = 0; index < inputDimension; ++index) input[index] = OSS() << "x" << index; // Extract the components Description output(outputDimension); Description formulas(outputDimension); Description currentOutputDescription(getOutputDescription()); for (UnsignedInteger index = 0; index < outputDimension; ++index) { output[index] = currentOutputDescription[indices[index]]; formulas[index] = input[indices[index]]; } const SymbolicEvaluation left(input, output, formulas); #else Point center(inputDimension); Matrix linear(inputDimension, outputDimension); for ( UnsignedInteger index = 0; index < outputDimension; ++ index ) linear(indices[index], index) = 1.0; Point constant(outputDimension); const LinearEvaluation left(center, constant, linear); #endif ComposedEvaluation marginal(left.clone(), clone()); if (isHistoryEnabled()) { marginal.enableHistory(); } return marginal.clone(); } /* Get the number of calls to operator() */ UnsignedInteger EvaluationImplementation::getCallsNumber() const { return callsNumber_; } /* Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ Graph EvaluationImplementation::draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { if (getInputDimension() < 1) throw InvalidArgumentException(HERE) << "Error: cannot use this version of the draw() method with a function of input dimension less than 1"; if (inputMarginal >= getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the given input marginal index=" << inputMarginal << " must be less than the input dimension=" << getInputDimension(); if (outputMarginal >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the given output marginal index=" << outputMarginal << " must be less than the output dimension=" << getOutputDimension(); if ((scale != GraphImplementation::NONE) && (scale != GraphImplementation::LOGX)) throw InvalidArgumentException(HERE) << "Error: expected scale=" << GraphImplementation::NONE << " or scale=" << GraphImplementation::LOGX << ", got scale=" << scale; if ((scale == GraphImplementation::LOGX) && ((xMin <= 0.0) || (xMax <= 0.0))) throw InvalidArgumentException(HERE) << "Error: cannot use logarithmic scale on an interval containing nonpositive values."; Sample inputData(pointNumber, centralPoint); if (scale == GraphImplementation::NONE) { const Scalar dx = (xMax - xMin) / (pointNumber - 1.0); for (UnsignedInteger i = 0; i < pointNumber; ++i) inputData[i][inputMarginal] = xMin + i * dx; } else { const Scalar a = std::log(xMin); const Scalar b = std::log(xMax); const Scalar dLogX = (b - a) / (pointNumber - 1.0); for (UnsignedInteger i = 0; i < pointNumber; ++i) inputData[i][inputMarginal] = std::exp(a + i * dLogX); } // Evaluate the function over all its input in one call in order to benefit from potential parallelism const Sample outputData((*this)(inputData)); const Description inputDescription(getInputDescription()); const Description outputDescription(getOutputDescription()); const String xName(inputDescription[inputMarginal]); const String yName(outputDescription[outputMarginal]); String title(OSS() << yName << " as a function of " << xName); if (centralPoint.getDimension() > 1) title = String(OSS(false) << title << " around " << centralPoint); Graph graph(title, xName, yName, true, "", 1.0, scale); graph.add(Curve(inputData.getMarginal(inputMarginal), outputData.getMarginal(outputMarginal))); // Add a slight vertical margin GraphImplementation::BoundingBox bb(graph.getBoundingBox()); const Scalar height = bb[3] - bb[2]; bb[2] -= 0.05 * height; bb[3] += 0.05 * height; graph.setBoundingBox(bb); return graph; } /* Draw the given 1D marginal output as a function of the given 2D marginal input around the given central point */ Graph EvaluationImplementation::draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { if (getInputDimension() < 2) throw InvalidArgumentException(HERE) << "Error: cannot use this version of the draw() method with a function of input dimension less than 2"; if ((xMin.getDimension() != 2) || (xMax.getDimension() != 2) || (pointNumber.getSize() != 2)) throw InvalidArgumentException(HERE) << "Error: xMin, xMax and PointNumber must be bidimensional"; if ((pointNumber[0] <= 2) || (pointNumber[1] <= 2)) throw InvalidArgumentException(HERE) << "Error: the discretization must have at least 2 points per component"; if ((scale != GraphImplementation::NONE) && (scale != GraphImplementation::LOGX) && (scale != GraphImplementation::LOGY) && (scale != GraphImplementation::LOGXY)) throw InvalidArgumentException(HERE) << "Error: expected scale=" << GraphImplementation::NONE << " or scale=" << GraphImplementation::LOGX << " or scale=" << GraphImplementation::LOGY << " or scale=" << GraphImplementation::LOGXY << ", got scale=" << scale; if (((scale == GraphImplementation::LOGX) || (scale == GraphImplementation::LOGXY)) && ((xMin[0] <= 0.0) || (xMax[0] <= 0.0))) throw InvalidArgumentException(HERE) << "Error: cannot use logarithmic scale on an interval containing nonpositive values for the first argument."; if (((scale == GraphImplementation::LOGY) || (scale == GraphImplementation::LOGXY)) && ((xMin[1] <= 0.0) || (xMax[1] <= 0.0))) throw InvalidArgumentException(HERE) << "Error: cannot use logarithmic scale on an interval containing nonpositive values for the second argument."; Point discretization(2); Point scaling(2); Point origin(2); const Scalar nX = pointNumber[0] - 2; discretization[0] = nX; // Discretization of the first component Sample x(Box(Point(1, nX)).generate()); { Scalar a = xMin[0]; Scalar b = xMax[0]; if ((scale == GraphImplementation::LOGX) || (scale == GraphImplementation::LOGXY)) { a = std::log(a); b = std::log(b); } origin[0] = a; scaling[0] = b - a; } x *= Point(1, scaling[0]); x += Point(1, origin[0]); // Recover the original scale if the discretization has been done in the logarithmic scale if ((scale == GraphImplementation::LOGY) || (scale == GraphImplementation::LOGXY)) for (UnsignedInteger i = 0; i < x.getDimension(); ++i) x[i][0] = std::exp(x[i][0]); const Scalar nY = pointNumber[1] - 2; discretization[1] = nY; // Discretization of the second component Sample y(Box(Point(1, nY)).generate()); { Scalar a = xMin[1]; Scalar b = xMax[1]; if ((scale == GraphImplementation::LOGY) || (scale == GraphImplementation::LOGXY)) { a = std::log(a); b = std::log(b); } origin[1] = a; scaling[1] = b - a; } y *= Point(1, scaling[1]); y += Point(1, origin[1]); // Recover the original scale if the discretization has been done in the logarithmic scale if ((scale == GraphImplementation::LOGY) || (scale == GraphImplementation::LOGXY)) for (UnsignedInteger i = 0; i < y.getDimension(); ++i) y[i][0] = std::exp(y[i][0]); // Discretization of the XY plane Sample inputSample((nX + 2) * (nY + 2), centralPoint); // Prepare the input sample UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < nY + 2; ++j) { const Scalar yJ = (scale == GraphImplementation::LOGY) || (scale == GraphImplementation::LOGXY) ? exp(y[j][0]) : y[j][0]; for (UnsignedInteger i = 0; i < nX + 2; ++i) { const Scalar xI = (scale == GraphImplementation::LOGX) || (scale == GraphImplementation::LOGXY) ? exp(x[i][0]) : x[i][0]; inputSample[index][firstInputMarginal] = xI; inputSample[index][secondInputMarginal] = yJ; ++index; } // i } // j // Compute the output sample, using possible parallelism const Sample z((*this)(inputSample).getMarginal(outputMarginal)); const String xName(getInputDescription()[firstInputMarginal]); const String yName(getInputDescription()[secondInputMarginal]); String title(OSS() << getOutputDescription()[outputMarginal] << " as a function of (" << xName << "," << yName << ")"); if (centralPoint.getDimension() > 2) title = String(OSS(false) << title << " around " << centralPoint); Graph graph(title, xName, yName, true, "topright", 1.0, scale); Contour isoValues(Contour(x, y, z, Point(0), Description(0), true, title)); isoValues.buildDefaultLevels(); isoValues.buildDefaultLabels(); const Point levels(isoValues.getLevels()); const Description labels(isoValues.getLabels()); for (UnsignedInteger i = 0; i < levels.getDimension(); ++i) { Contour current(isoValues); current.setLevels(Point(1, levels[i])); current.setLabels(Description(1, labels[i])); current.setDrawLabels(false); current.setLegend(labels[i]); current.setColor(Contour::ConvertFromHSV((360.0 * i / levels.getDimension()), 1.0, 1.0)); graph.add(current); } return graph; } /* Draw the output of the function with respect to its input when the input and output dimensions are 1 */ Graph EvaluationImplementation::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { if (getInputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw a function with input dimension=" << getInputDimension() << " different from 1 using this method. See the other draw() methods."; if (getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw a function with output dimension=" << getOutputDimension() << " different from 1 using this method. See the other draw() methods."; return draw(0, 0, Point(1), xMin, xMax, pointNumber, scale); } /* Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ Graph EvaluationImplementation::draw(const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { if (getInputDimension() == 1) return draw(xMin[0], xMax[0], pointNumber[0], scale); if ((getInputDimension() == 0) || (getInputDimension() > 2)) throw InvalidArgumentException(HERE) << "Error: cannot draw a function with input dimension=" << getInputDimension() << " different from 1 or 2 using this method. See the other draw() methods."; if (getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw a function with output dimension=" << getOutputDimension() << " different from 1 using this method. See the other draw() methods."; return draw(0, 1, 0, Point(2), xMin, xMax, pointNumber, scale); } /* Method save() stores the object through the StorageManager */ void EvaluationImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "callsNumber_", callsNumber_ ); adv.saveAttribute( "cache_", *p_cache_ ); adv.saveAttribute( "inputDescription_", inputDescription_ ); adv.saveAttribute( "outputDescription_", outputDescription_ ); adv.saveAttribute( "parameter_", parameter_ ); adv.saveAttribute( "parameterDescription_", parameterDescription_ ); } /* Method load() reloads the object from the StorageManager */ void EvaluationImplementation::load(Advocate & adv) { TypedInterfaceObject cache; PersistentObject::load(adv); adv.loadAttribute( "callsNumber_", callsNumber_ ); adv.loadAttribute( "cache_", cache ); p_cache_ = cache.getImplementation(); adv.loadAttribute( "inputDescription_", inputDescription_ ); adv.loadAttribute( "outputDescription_", outputDescription_ ); adv.loadAttribute( "parameter_", parameter_ ); adv.loadAttribute( "parameterDescription_", parameterDescription_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ExpertMixture.cxx000066400000000000000000000167301307543307100221050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building chaos expansions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ExpertMixture.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ExpertMixture); static const Factory Factory_ExpertMixture; /* Default constructor */ ExpertMixture::ExpertMixture() : EvaluationImplementation() , experts_() , classifier_() { // Nothing to do } /* Constructor */ ExpertMixture::ExpertMixture(const Basis & experts, const Classifier & classifier) : EvaluationImplementation() , experts_(experts) , classifier_(classifier) { // Check if there is at least one expert if (experts.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an ExpertMixture with no expert!"; // Check that the experts and the classifier are compatible if (classifier.getDimension() != (experts[0].getInputDimension() + experts[0].getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the classifier dimension must be equal to the sum of the experts input and output dimensions, here the classifier dimension=" << classifier.getDimension() << " and the experts input dimension=" << experts[0].getInputDimension() << " and output dimension=" << experts[0].getOutputDimension(); setDescription(experts[0].getDescription()); } /* Virtual constructor */ ExpertMixture * ExpertMixture::clone() const { return new ExpertMixture(*this); } /* Comparison operator */ Bool ExpertMixture::operator ==(const ExpertMixture & other) const { if (this == &other) return true; return (experts_ == other.experts_) && (classifier_ == other.classifier_); } /* String converter */ String ExpertMixture::__repr__() const { return OSS(true) << "class=" << getClassName() << ", experts=" << experts_ << ", classifier=" << classifier_; } String ExpertMixture::__str__(const String & offset) const { return OSS(false) << "experts=" << experts_.__str__(offset) << "\nclassifier=" << classifier_.__str__(offset); } /* Local experts accessor */ void ExpertMixture::setExperts(const Basis & experts) { if (experts.getDimension() != classifier_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the local experts must have the same input dimension as the classifier dimension. Here, experts input dimension=" << experts.getDimension() << " and classifier dimension=" << classifier_.getDimension(); experts_ = experts; } Basis ExpertMixture::getExperts() const { return experts_; } /* Classifier accessor */ void ExpertMixture::setClassifier(const Classifier & classifier) { if (experts_.getDimension() != classifier.getDimension()) throw InvalidArgumentException(HERE) << "Error: the local experts must have the same input dimension as the classifier dimension. Here, experts input dimension=" << experts_.getDimension() << " and classifier dimension=" << classifier.getDimension(); classifier_ = classifier; } Classifier ExpertMixture::getClassifier() const { return classifier_; } /* Operator () */ Point ExpertMixture::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension << " and got a point of dimension=" << inP.getDimension(); const UnsignedInteger outputDimension = getOutputDimension(); const UnsignedInteger size = experts_.getSize(); UnsignedInteger bestClass = 0; // Build the point (x, f(x)) for the first class and grade it according to the classifier Point mixedPoint(inP); Point bestValue(experts_[0](inP)); mixedPoint.add(bestValue); Scalar bestGrade = classifier_.grade(mixedPoint, bestClass); LOGDEBUG(OSS() << "Class index=" << 0 << ", grade=" << bestGrade << ", value=" << bestValue); for (UnsignedInteger classIndex = 1; classIndex < size; ++classIndex) { // Build the point (x, f(x)) for each other class and grade it according to the classifier const Point localValue(experts_[classIndex](inP)); for (UnsignedInteger i = 0; i < outputDimension; ++i) mixedPoint[inputDimension + i] = localValue[i]; const Scalar grade = classifier_.grade(mixedPoint, classIndex); LOGDEBUG(OSS() << "Class index=" << classIndex << ", grade=" << grade << ", value=" << localValue); // The best class will give the output value if (grade > bestGrade) { bestGrade = grade; bestClass = classIndex; bestValue = localValue; } } LOGDEBUG(OSS() << "Best class index=" << bestClass << ", best grade=" << bestGrade << ", best value=" << bestValue); return bestValue; } Sample ExpertMixture::operator() (const Sample & inS) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension << " and got a sample of dimension=" << inS.getDimension(); const UnsignedInteger size = inS.getSize(); const UnsignedInteger outputDimension = getOutputDimension(); Sample bestValues(size, outputDimension); const UnsignedInteger expertSize = experts_.getSize(); Point bestGrades(size, -SpecFunc::MaxScalar); for (UnsignedInteger classIndex = 0; classIndex < expertSize; ++classIndex) { // Build the point (x, f(x)) for each other class and grade it according to the classifier Sample mixedSample(inS); // Here is the evaluation of the expert over a sample, benefiting from possible // parallelism/vectorization const Sample localValues(experts_[classIndex](inS)); mixedSample.stack(localValues); const Point grades = classifier_.grade(mixedSample, Indices(size, classIndex)); for (UnsignedInteger i = 0; i < size; ++i) if (grades[i] > bestGrades[i]) { bestGrades[i] = grades[i]; bestValues[i] = localValues[i]; } } // classIndex return bestValues; } /* Accessor for input point dimension */ UnsignedInteger ExpertMixture::getInputDimension() const { return experts_[0].getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ExpertMixture::getOutputDimension() const { return experts_[0].getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ExpertMixture::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "experts_", experts_ ); adv.saveAttribute( "classifier_", classifier_ ); } /* Method load() reloads the object from the StorageManager */ void ExpertMixture::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "experts_", experts_ ); adv.loadAttribute( "classifier_", classifier_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FieldFunction.cxx000066400000000000000000000112521307543307100220030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all dynamical functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FieldFunction.hxx" #include "openturns/ValueFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FieldFunction); /* Default constructor */ FieldFunction::FieldFunction(const UnsignedInteger spatialDimension) : TypedInterfaceObject(new FieldFunctionImplementation(spatialDimension)) { // Nothing to do } /* Constructor from Function */ FieldFunction::FieldFunction(const Function & function, const UnsignedInteger spatialDimension) : TypedInterfaceObject(ValueFunction(function, spatialDimension).clone()) { // Nothing to do } /* Constructor from FieldFunctionImplementation */ FieldFunction::FieldFunction(const FieldFunctionImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ FieldFunction::FieldFunction(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ FieldFunction::FieldFunction(FieldFunctionImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Comparison operator */ Bool FieldFunction::operator ==(const FieldFunction & other) const { return true; } /* String converter */ String FieldFunction::__repr__() const { return OSS(true) << "class=" << FieldFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String FieldFunction::__str__(const String & offset) const { return OSS(false) << offset << getClassName() << " :\n" << getImplementation()->__str__( offset + " "); } /* Get the i-th marginal function */ FieldFunction FieldFunction::getMarginal(const UnsignedInteger i) const { return *(getImplementation()->getMarginal(i)); } /* Get the function corresponding to indices components */ FieldFunction FieldFunction::getMarginal(const Indices & indices) const { return *(getImplementation()->getMarginal(indices)); } /* Input description Accessor */ Description FieldFunction::getInputDescription() const { return getImplementation()->getInputDescription(); } /* Output description Accessor */ Description FieldFunction::getOutputDescription() const { return getImplementation()->getOutputDescription(); } /* Output mesh Accessor */ Mesh FieldFunction::getOutputMesh(const Mesh & inputMesh) const { return getImplementation()->getOutputMesh(inputMesh); } /* Operator () */ Point FieldFunction::operator() (const Scalar timeStamp, const Point & inP) const { return getImplementation()->operator()(timeStamp, inP); } Point FieldFunction::operator() (const Point & location, const Point & inP) const { return getImplementation()->operator()(location, inP); } Field FieldFunction::operator() (const Field & inFld) const { return getImplementation()->operator()(inFld); } /* Operator () */ ProcessSample FieldFunction::operator() (const ProcessSample & inPS) const { return getImplementation()->operator()(inPS); } /* Accessor for mesh dimension */ UnsignedInteger FieldFunction::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } /* Accessor for input point dimension */ UnsignedInteger FieldFunction::getInputDimension() const { return getImplementation()->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger FieldFunction::getOutputDimension() const { return getImplementation()->getOutputDimension(); } /* Number of calls to the dynamical function */ UnsignedInteger FieldFunction::getCallsNumber() const { return getImplementation()->getCallsNumber(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FieldFunctionImplementation.cxx000066400000000000000000000155461307543307100247230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all dynamical function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FieldFunctionImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FieldFunctionImplementation); static const Factory Factory_FieldFunctionImplementation; /* Default constructor */ FieldFunctionImplementation::FieldFunctionImplementation(const UnsignedInteger spatialDimension) : PersistentObject() , spatialDimension_(spatialDimension) , inputDescription_() , outputDescription_() , callsNumber_(0) { // Nothing to do } /* Virtual constructor */ FieldFunctionImplementation * FieldFunctionImplementation::clone() const { return new FieldFunctionImplementation(*this); } /* Comparison operator */ Bool FieldFunctionImplementation::operator ==(const FieldFunctionImplementation & other) const { return true; } /* String converter */ String FieldFunctionImplementation::__repr__() const { OSS oss(true); oss << "class=" << FieldFunctionImplementation::GetClassName() << " name=" << getName() << " input description=" << inputDescription_ << " output description=" << outputDescription_ << " number of calls=" << callsNumber_; return oss; } /* String converter */ String FieldFunctionImplementation::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Get the i-th marginal function */ FieldFunctionImplementation::Implementation FieldFunctionImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ FieldFunctionImplementation::Implementation FieldFunctionImplementation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; throw NotYetImplementedException(HERE) << "In FieldFunctionImplementation::getMarginal(const Indices & indices) const"; } /* Input description Accessor */ void FieldFunctionImplementation::setInputDescription(const Description & inputDescription) { inputDescription_ = inputDescription; } Description FieldFunctionImplementation::getInputDescription() const { return inputDescription_; } /* Output description Accessor */ void FieldFunctionImplementation::setOutputDescription(const Description & outputDescription) { outputDescription_ = outputDescription; } Description FieldFunctionImplementation::getOutputDescription() const { return outputDescription_; } /* Accessor for the output mesh associated with the given input mesh */ Mesh FieldFunctionImplementation::getOutputMesh(const Mesh & inputMesh) const { return inputMesh; } /* Operator () */ Point FieldFunctionImplementation::operator() (const Scalar timeStamp, const Point & inP) const { return (*this)(Point(1, timeStamp), inP); } Point FieldFunctionImplementation::operator() (const Point & location, const Point & inP) const { return (*this)(Field(Mesh(Sample(1, location), Collection(0)), Sample(1, inP))).getValues()[0]; } Field FieldFunctionImplementation::operator() (const Field & inFld) const { throw NotYetImplementedException(HERE) << "In FieldFunctionImplementation::operator() (const Field & inFld) const"; } /* Operator () */ ProcessSample FieldFunctionImplementation::operator() (const ProcessSample & inPS) const { if (inPS.getDimension() != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the given process sample has an invalid dimension. Expect a dimension " << getInputDimension() << ", got " << inPS.getDimension(); if (inPS.getMesh().getDimension() != getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: the given process sample has an invalid mesh dimension. Expect a mesh dimension " << getSpatialDimension() << ", got " << inPS.getMesh().getDimension(); const UnsignedInteger size = inPS.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the given process sample has a size of 0."; Field field0(operator()(inPS.getField(0))); ProcessSample outSample(field0.getMesh(), size, field0.getDimension()); outSample.setField(field0, 0); // Simple loop over the evaluation operator based on time series // The calls number is updated by these calls for (UnsignedInteger i = 1; i < size; ++i) outSample.setField(operator()(inPS.getField(i)), i); return outSample; } /* Accessor for mesh dimension */ UnsignedInteger FieldFunctionImplementation::getSpatialDimension() const { return spatialDimension_; } /* Accessor for input point dimension */ UnsignedInteger FieldFunctionImplementation::getInputDimension() const { return inputDescription_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger FieldFunctionImplementation::getOutputDimension() const { return outputDescription_.getSize(); } /* Number of calls to the dynamical function */ UnsignedInteger FieldFunctionImplementation::getCallsNumber() const { return callsNumber_; } /* Method save() stores the object through the StorageManager */ void FieldFunctionImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "spatialDimension_", spatialDimension_ ); adv.saveAttribute( "inputDescription_", inputDescription_ ); adv.saveAttribute( "outputDescription_", outputDescription_ ); adv.saveAttribute( "callsNumber_", callsNumber_ ); } /* Method load() reloads the object from the StorageManager */ void FieldFunctionImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "spatialDimension_", spatialDimension_ ); adv.loadAttribute( "inputDescription_", inputDescription_ ); adv.loadAttribute( "outputDescription_", outputDescription_ ); adv.loadAttribute( "callsNumber_", callsNumber_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FiniteBasis.cxx000066400000000000000000000052151307543307100214540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FiniteBasis.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FiniteBasis); static const Factory Factory_FiniteBasis; FiniteBasis::FiniteBasis(const UnsignedInteger size) : BasisImplementation() , collection_(size) { } FiniteBasis::FiniteBasis(const FunctionCollection & collection) : BasisImplementation() , collection_(collection) { // Nothing to do } /* Virtual constructor */ FiniteBasis * FiniteBasis::clone() const { return new FiniteBasis(*this); } /* Build the Function of the given index */ Function FiniteBasis::build(const UnsignedInteger index) const { if (index >= collection_.getSize()) throw InvalidArgumentException(HERE) << "Cannot build " << index << "-th term"; return collection_[index]; } Function & FiniteBasis::operator[](const UnsignedInteger index) { return collection_[index]; } String FiniteBasis::__repr__() const { return OSS() << "class=" << "Basis" " coll=" << collection_; } String FiniteBasis::__str__(const String & offset) const { return OSS() << "Basis( " << collection_.__str__(offset) << " )"; } UnsignedInteger FiniteBasis::getDimension() const { return (collection_.getSize() > 0) ? collection_[0].getInputDimension() : 0; } UnsignedInteger FiniteBasis::getSize() const { return collection_.getSize(); } void FiniteBasis::add(const Function & elt) { collection_.add(elt); } void FiniteBasis::save(Advocate & adv) const { BasisImplementation::save(adv); adv.saveAttribute("collection_", collection_); } /* Method load() reloads the object from the StorageManager */ void FiniteBasis::load(Advocate & adv) { BasisImplementation::load(adv); adv.loadAttribute("collection_", collection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FourierSeries.cxx000066400000000000000000000057171307543307100220510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Fourier series function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FourierSeries.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FourierSeries); static const Factory Factory_FourierSeries; /* Parameter constructor */ FourierSeries::FourierSeries(const Bool isCosine, const UnsignedInteger k) : UniVariateFunctionImplementation() , isCosine_(isCosine) , k_(k) { // Nothing to do } /* Virtual constructor */ FourierSeries * FourierSeries::clone() const { return new FourierSeries(*this); } /* String converter */ String FourierSeries::__repr__() const { return OSS(true) << "class=" << GetClassName() << " isCosine=" << isCosine_ << " k=" << k_; } String FourierSeries::__str__(const String & offset) const { OSS oss(false); if (k_ == 0) oss << offset << "f:X -> 1"; else if (k_ == 1) oss << offset << "f:X -> sqrt(2) * " << (isCosine_ ? "cos(X)" : "sin(X)"); else oss << offset << "f:X -> sqrt(2) * " << (isCosine_ ? "cos(" : "sin(") << k_ << " * X)"; return oss; } /* FourierSeries are evaluated as functors */ Scalar FourierSeries::operator() (const Scalar x) const { const Scalar coef = k_ == 0 ? 1.0 : M_SQRT2; return coef * (isCosine_ ? cos(k_ * x) : sin(k_ * x)); } /* FourierSeries gradient */ Scalar FourierSeries::gradient(const Scalar x) const { if (k_ == 0) return 0.0; return M_SQRT2 * k_ * (isCosine_ ? -sin(k_ * x) : cos(k_ * x)); } /* FourierSeries hessian */ Scalar FourierSeries::hessian(const Scalar x) const { if (k_ == 0) return 0.0; return M_SQRT2 * k_ * k_ * (isCosine_ ? -cos(k_ * x) : -sin(k_ * x)); } /* Method save() stores the object through the StorageManager */ void FourierSeries::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("isCosine_", isCosine_); adv.saveAttribute("k_", k_); } /* Method load() reloads the object from the StorageManager */ void FourierSeries::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("isCosine_", isCosine_); adv.loadAttribute("k_", k_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/Function.cxx000066400000000000000000000506211307543307100210420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Function.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/AggregatedEvaluation.hxx" #include "openturns/AggregatedGradient.hxx" #include "openturns/AggregatedHessian.hxx" #include "openturns/IndicatorEvaluation.hxx" #include "openturns/DualLinearCombinationEvaluation.hxx" #include "openturns/DualLinearCombinationGradient.hxx" #include "openturns/DualLinearCombinationHessian.hxx" #include "openturns/LinearCombinationEvaluation.hxx" #include "openturns/LinearCombinationGradient.hxx" #include "openturns/LinearCombinationHessian.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" #include "openturns/ParametricEvaluation.hxx" #include "openturns/ParametricGradient.hxx" #include "openturns/ParametricHessian.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Function); /* Default constructor */ Function::Function() : TypedInterfaceObject(new FunctionImplementation()) { // Nothing to do } /* Constructor from FunctionImplementation */ Function::Function(const FunctionImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ Function::Function(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ Function::Function(FunctionImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ Function::Function(const EvaluationImplementation & evaluation) : TypedInterfaceObject(new FunctionImplementation(evaluation.clone())) { // Nothing to do } /* Composition constructor */ Function::Function(const Function & left, const Function & right) : TypedInterfaceObject(new ComposedFunction(left.getImplementation(), right.getImplementation())) { Log::Warn(OSS() << "Function(FunctionCollection, Sample) is deprecated: use ComposedFunction"); } /* Analytical formula constructor */ Function::Function(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas) : TypedInterfaceObject(new FunctionImplementation(inputVariablesNames, outputVariablesNames, formulas)) { // Nothing to do } /* Analytical formula constructor */ Function::Function(const Description & inputVariablesNames, const Description & formulas) : TypedInterfaceObject() { Log::Warn(OSS() << "Function(Description, Description) is deprecated: use SymbolicFunction"); const UnsignedInteger size = formulas.getSize(); Description outputVariablesNames(size); for (UnsignedInteger i = 0; i < size; ++i) outputVariablesNames[i] = String(OSS() << "y" << i); *this = Function(inputVariablesNames, outputVariablesNames, formulas); } /* Indicator function constructor */ Function::Function(const Function & function, const ComparisonOperator & comparisonOperator, const Scalar threshold) : TypedInterfaceObject(new FunctionImplementation(new IndicatorEvaluation(function.getEvaluation(), comparisonOperator, threshold), new NoGradient(), new NoHessian())) { Log::Warn(OSS() << "Function(Function, ComparisonOperator, Scalar) is deprecated: use IndicatorFunction"); } /* Aggregated function constructor: the output is the aggregation of the several functions */ Function::Function(const FunctionCollection & functionCollection) : TypedInterfaceObject(new FunctionImplementation()) { Log::Warn(OSS() << "Function(FunctionCollection) is deprecated: use AggregatedFunction"); const AggregatedEvaluation evaluation(functionCollection); setEvaluation(evaluation.clone()); setGradient(new AggregatedGradient(evaluation)); setHessian(new AggregatedHessian(evaluation)); } /* Linear combination function constructor */ Function::Function(const FunctionCollection & functionCollection, const Point & coefficients) : TypedInterfaceObject(new FunctionImplementation()) { Log::Warn(OSS() << "Function(FunctionCollection, Point) is deprecated: use LinearCombinationFunction"); const LinearCombinationEvaluation evaluation(functionCollection, coefficients); setEvaluation(evaluation.clone()); setGradient(new LinearCombinationGradient(evaluation)); setHessian(new LinearCombinationHessian(evaluation)); } /* Dual linear combination function constructor */ Function::Function(const FunctionCollection & functionCollection, const Sample & coefficients) : TypedInterfaceObject(new FunctionImplementation()) { Log::Warn(OSS() << "Function(FunctionCollection, Sample) is deprecated: use DualLinearCombinationFunction"); const DualLinearCombinationEvaluation evaluation(functionCollection, coefficients); setEvaluation(evaluation.clone()); setGradient(new DualLinearCombinationGradient(evaluation)); setHessian(new DualLinearCombinationHessian(evaluation)); } /* Simplified analytical formula constructor */ Function::Function(const String & inputVariableName, const String & formula, const String & outputVariableName) : TypedInterfaceObject(new FunctionImplementation(Description(1, inputVariableName), Description(1, outputVariableName), Description(1, formula))) { Log::Warn(OSS() << "Function(String, String, String) is deprecated: use SymbolicFunction"); } /* Constructor from evaluation */ Function::Function(const EvaluationPointer & evaluationImplementation) : TypedInterfaceObject(new FunctionImplementation(evaluationImplementation)) { // Nothing to do } /* Constructor from implementations */ Function::Function(const EvaluationPointer & evaluationImplementation, const GradientPointer & gradientImplementation, const HessianPointer & hessianImplementation) : TypedInterfaceObject(new FunctionImplementation(evaluationImplementation, gradientImplementation, hessianImplementation)) { // Nothing to do } /* Constructor from samples */ Function::Function(const Sample & inputSample, const Sample & outputSample) : TypedInterfaceObject(new FunctionImplementation( inputSample, outputSample )) { Log::Warn(OSS() << "Function(Sample, Sample) is deprecated: use DatabaseFunction"); } /* Constructor from field */ Function::Function(const Field & field) : TypedInterfaceObject(new FunctionImplementation(new P1LagrangeEvaluation( field ))) { // Nothing to do } /* Constructor by splitting the input of a function between variables and parameters */ Function::Function(const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet) : TypedInterfaceObject(new FunctionImplementation()) { Log::Warn(OSS() << "Function(Function, Indices, Point, Bool) is deprecated: use ParametricFunction"); const Pointer p_evaluation = new ParametricEvaluation(function, set, referencePoint, parametersSet); setEvaluation(p_evaluation); setGradient(new ParametricGradient(p_evaluation)); setHessian(new ParametricHessian(p_evaluation)); } /* Comparison operator */ Bool Function::operator ==(const Function & other) const { if (this == &other) return true; return *getImplementation() == *other.getImplementation(); } /* String converter */ String Function::__repr__() const { return OSS(true) << "class=" << Function::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String Function::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Description Accessor */ void Function::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } /* Description Accessor */ Description Function::getDescription() const { return getImplementation()->getDescription(); } /* Input description Accessor */ Description Function::getInputDescription() const { return getImplementation()->getInputDescription(); } /* Output description Accessor */ Description Function::getOutputDescription() const { return getImplementation()->getOutputDescription(); } /* Enable or disable the internal cache */ void Function::enableCache() const { getImplementation()->enableCache(); } void Function::disableCache() const { getImplementation()->disableCache(); } Bool Function::isCacheEnabled() const { return getImplementation()->isCacheEnabled(); } UnsignedInteger Function::getCacheHits() const { return getImplementation()->getCacheHits(); } void Function::addCacheContent(const Sample & inSample, const Sample & outSample) { getImplementation()->addCacheContent(inSample, outSample); } Sample Function::getCacheInput() const { return getImplementation()->getCacheInput(); } Sample Function::getCacheOutput() const { return getImplementation()->getCacheOutput(); } void Function::clearCache() const { return getImplementation()->clearCache(); } /* Enable or disable the input/output history */ void Function::enableHistory() const { return getImplementation()->enableHistory(); } void Function::disableHistory() const { return getImplementation()->disableHistory(); } Bool Function::isHistoryEnabled() const { return getImplementation()->isHistoryEnabled(); } void Function::clearHistory() const { return getImplementation()->clearHistory(); } HistoryStrategy Function::getHistoryInput() const { return getImplementation()->getHistoryInput(); } HistoryStrategy Function::getHistoryOutput() const { return getImplementation()->getHistoryOutput(); } Sample Function::getInputPointHistory() const { return getImplementation()->getInputPointHistory(); } Sample Function::getInputParameterHistory() const { return getImplementation()->getInputParameterHistory(); } /* Multiplication operator between two functions with the same input dimension and 1D output dimension */ ProductFunction Function::operator * (const Function & right) const { return ProductFunction(getImplementation(), right.getImplementation()); } /* Addition operator between two functions with the same input dimension and output dimension */ Function Function::operator + (const Function & right) const { const Point coefficients(2, 1.0); FunctionCollection collection(2); collection[0] = *this; collection[1] = right; const LinearCombinationEvaluation evaluation(collection, coefficients); return Function(evaluation.clone(), LinearCombinationGradient(evaluation).clone(), LinearCombinationHessian(evaluation).clone()); } /* Soustraction operator between two functions with the same input dimension and output dimension */ Function Function::operator - (const Function & right) const { Point coefficients(2, 1.0); coefficients[1] = -1.0; FunctionCollection collection(2); collection[0] = *this; collection[1] = right; const LinearCombinationEvaluation evaluation(collection, coefficients); return Function(evaluation.clone(), LinearCombinationGradient(evaluation).clone(), LinearCombinationHessian(evaluation).clone()); } /* Function implementation accessors */ void Function::setEvaluation(const EvaluationPointer & functionImplementation) { copyOnWrite(); getImplementation()->setEvaluation(functionImplementation); } const Function::EvaluationPointer & Function::getEvaluation() const { return getImplementation()->getEvaluation(); } /* Gradient implementation accessors */ void Function::setGradient(const GradientImplementation & gradientImplementation) { copyOnWrite(); getImplementation()->setGradient(GradientPointer(gradientImplementation.clone())); } void Function::setGradient(const GradientPointer & gradientImplementation) { copyOnWrite(); getImplementation()->setGradient(gradientImplementation); } const Function::GradientPointer & Function::getGradient() const { return getImplementation()->getGradient(); } /* Hessian implementation accessors */ void Function::setHessian(const HessianImplementation & hessianImplementation) { copyOnWrite(); getImplementation()->setHessian(HessianPointer(hessianImplementation.clone())); } void Function::setHessian(const HessianPointer & hessianImplementation) { copyOnWrite(); getImplementation()->setHessian(hessianImplementation); } const Function::HessianPointer & Function::getHessian() const { return getImplementation()->getHessian(); } /* Flag for default gradient accessors */ Bool Function::getUseDefaultGradientImplementation() const { return getImplementation()->getUseDefaultGradientImplementation(); } void Function::setUseDefaultGradientImplementation(const Bool gradientFlag) { copyOnWrite(); getImplementation()->setUseDefaultGradientImplementation(gradientFlag); } /* Flag for default hessian accessors */ Bool Function::getUseDefaultHessianImplementation() const { return getImplementation()->getUseDefaultHessianImplementation(); } void Function::setUseDefaultHessianImplementation(const Bool hessianFlag) { copyOnWrite(); getImplementation()->setUseDefaultHessianImplementation(hessianFlag); } /* Gradient according to the marginal parameters */ Matrix Function::parameterGradient(const Point & inP) const { return getImplementation()->parameterGradient(inP); } Matrix Function::parameterGradient(const Point & inP, const Point & parameter) { copyOnWrite(); return getImplementation()->parameterGradient(inP, parameter); } /* Parameters value accessor */ Point Function::getParameter() const { return getImplementation()->getParameter(); } void Function::setParameter(const Point & parameter) { copyOnWrite(); getImplementation()->setParameter(parameter); } /* Parameters description accessor */ Description Function::getParameterDescription() const { return getImplementation()->getParameterDescription(); } void Function::setParameterDescription(const Description & description) { copyOnWrite(); getImplementation()->setParameterDescription(description); } /* Operator () */ Point Function::operator() (const Point & inP) const { return getImplementation()->operator()(inP); } Point Function::operator() (const Point & inP, const Point & parameter) { copyOnWrite(); return getImplementation()->operator()(inP, parameter); } Sample Function::operator() (const Point & inP, const Sample & parameters) { copyOnWrite(); return getImplementation()->operator()(inP, parameters); } /* Operator () */ Sample Function::operator() (const Sample & inSample) const { return getImplementation()->operator()(inSample); } /* Operator () */ Field Function::operator() (const Field & inField) const { return getImplementation()->operator()(inField); } /* Method gradient() returns the Jacobian transposed matrix of the function at point */ Matrix Function::gradient(const Point & inP) const { return getImplementation()->gradient(inP); } Matrix Function::gradient(const Point & inP, const Point & parameters) { copyOnWrite(); return getImplementation()->gradient(inP, parameters); } /* Method hessian() returns the symmetric tensor of the function at point */ SymmetricTensor Function::hessian(const Point & inP) const { return getImplementation()->hessian(inP); } SymmetricTensor Function::hessian(const Point & inP, const Point & parameters) { copyOnWrite(); return getImplementation()->hessian(inP, parameters); } /* Accessor for parameter dimension */ UnsignedInteger Function::getParameterDimension() const { return getImplementation()->getParameterDimension(); } /* Accessor for input point dimension */ UnsignedInteger Function::getInputDimension() const { return getImplementation()->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger Function::getOutputDimension() const { return getImplementation()->getOutputDimension(); } /* Get the i-th marginal function */ Function Function::getMarginal(const UnsignedInteger i) const { return *(getImplementation()->getMarginal(i)); } /* Get the function corresponding to indices components */ Function Function::getMarginal(const Indices & indices) const { return *(getImplementation()->getMarginal(indices)); } /* Number of calls to the evaluation */ UnsignedInteger Function::getCallsNumber() const { return getEvaluationCallsNumber(); } UnsignedInteger Function::getEvaluationCallsNumber() const { return getImplementation()->getEvaluationCallsNumber(); } /* Number of calls to the gradient */ UnsignedInteger Function::getGradientCallsNumber() const { return getImplementation()->getGradientCallsNumber(); } /* Number of calls to the hessian */ UnsignedInteger Function::getHessianCallsNumber() const { return getImplementation()->getHessianCallsNumber(); } /* Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ Graph Function::draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { return getImplementation()->draw(inputMarginal, outputMarginal, centralPoint, xMin, xMax, pointNumber, scale); } /* Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ Graph Function::draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { return getImplementation()->draw(firstInputMarginal, secondInputMarginal, outputMarginal, centralPoint, xMin, xMax, pointNumber, scale); } /* Draw the output of the function with respect to its input when the input and output dimensions are 1 */ Graph Function::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { return getImplementation()->draw(xMin, xMax, pointNumber, scale); } /* Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ Graph Function::draw(const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { return getImplementation()->draw(xMin, xMax, pointNumber, scale); } /* Static methods for documentation of analytical fnctions */ Description Function::GetValidConstants() { return FunctionImplementation::GetValidConstants(); } Description Function::GetValidFunctions() { return FunctionImplementation::GetValidFunctions(); } Description Function::GetValidOperators() { return FunctionImplementation::GetValidOperators(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FunctionImplementation.cxx000066400000000000000000000542031307543307100237500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Function.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/NoEvaluation.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #include "openturns/SymbolicGradient.hxx" #include "openturns/SymbolicHessian.hxx" #endif #include "openturns/DatabaseEvaluation.hxx" #include "openturns/ProductFunction.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/Os.hxx" #include "openturns/SymbolicFunction.hxx" #undef GetClassName BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionImplementation); static const Factory Factory_FunctionImplementation; /* Default constructor */ FunctionImplementation::FunctionImplementation() : PersistentObject() , p_evaluationImplementation_(new NoEvaluation) , p_gradientImplementation_(new NoGradient) , p_hessianImplementation_(new NoHessian) , useDefaultGradientImplementation_(false) , useDefaultHessianImplementation_(false) { // Nothing to do } /* Analytical formula constructor */ FunctionImplementation::FunctionImplementation(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas) : PersistentObject() , p_evaluationImplementation_(new NoEvaluation) , p_gradientImplementation_(new NoGradient) , p_hessianImplementation_(new NoHessian) , useDefaultGradientImplementation_(true) , useDefaultHessianImplementation_(true) { #ifdef OPENTURNS_HAVE_MUPARSER // Try to build an analytical gradient SymbolicEvaluation evaluation(inputVariablesNames, outputVariablesNames, formulas); p_evaluationImplementation_ = evaluation.clone(); try { p_gradientImplementation_ = new SymbolicGradient(evaluation); useDefaultGradientImplementation_ = false; } catch(...) { LOGWARN("Cannot compute an analytical gradient, using finite differences instead."); p_gradientImplementation_ = new CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), p_evaluationImplementation_); } try { p_hessianImplementation_ = new SymbolicHessian(evaluation); useDefaultHessianImplementation_ = false; } catch(...) { LOGWARN("Cannot compute an analytical hessian, using finite differences instead."); p_hessianImplementation_ = new CenteredFiniteDifferenceHessian(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon" ), p_evaluationImplementation_); } #else throw NotYetImplementedException(HERE) << "In FunctionImplementation::FunctionImplementation(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas): Analytical function requires muParser"; #endif } /* Constructor from a wrapper file */ FunctionImplementation::FunctionImplementation(const Sample & inputSample, const Sample & outputSample) : PersistentObject() , p_gradientImplementation_(new NoGradient) , p_hessianImplementation_(new NoHessian) , useDefaultGradientImplementation_(false) , useDefaultHessianImplementation_(false) { p_evaluationImplementation_ = new DatabaseEvaluation( inputSample, outputSample ); } /* Single function implementation constructor */ FunctionImplementation::FunctionImplementation(const EvaluationPointer & evaluationImplementation) : PersistentObject() , p_evaluationImplementation_(evaluationImplementation) , p_gradientImplementation_(new CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), p_evaluationImplementation_)) , p_hessianImplementation_(new CenteredFiniteDifferenceHessian(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon" ), p_evaluationImplementation_)) , useDefaultGradientImplementation_(true) , useDefaultHessianImplementation_(true) { // Nothing to do } /* Constructor from implementations */ FunctionImplementation::FunctionImplementation(const EvaluationPointer & evaluationImplementation, const GradientPointer & gradientImplementation, const HessianPointer & hessianImplementation) : PersistentObject() , p_evaluationImplementation_(evaluationImplementation) , p_gradientImplementation_(gradientImplementation) , p_hessianImplementation_(hessianImplementation) , useDefaultGradientImplementation_(false) , useDefaultHessianImplementation_(false) { // Nothing to do } /* Virtual constructor */ FunctionImplementation * FunctionImplementation::clone() const { return new FunctionImplementation(*this); } /* Comparison operator */ Bool FunctionImplementation::operator ==(const FunctionImplementation & other) const { if (this == &other) return true; return (*p_evaluationImplementation_ == *other.p_evaluationImplementation_) && (*p_gradientImplementation_ == *other.p_gradientImplementation_) && (*p_hessianImplementation_ == *other.p_hessianImplementation_); } /* String converter */ String FunctionImplementation::__repr__() const { OSS oss(true); oss << "class=" << FunctionImplementation::GetClassName() << " name=" << getName() << " description=" << getDescription() << " evaluationImplementation=" << p_evaluationImplementation_->__repr__() << " gradientImplementation=" << p_gradientImplementation_->__repr__() << " hessianImplementation=" << p_hessianImplementation_->__repr__(); return oss; } /* String converter */ String FunctionImplementation::__str__(const String & offset) const { return p_evaluationImplementation_->__str__(offset); } /* Description Accessor */ void FunctionImplementation::setDescription(const Description & description) { p_evaluationImplementation_->setDescription(description); } /* Description Accessor */ Description FunctionImplementation::getDescription() const { return p_evaluationImplementation_->getDescription(); } /* Input description Accessor */ Description FunctionImplementation::getInputDescription() const { return p_evaluationImplementation_->getInputDescription(); } /* Output description Accessor */ Description FunctionImplementation::getOutputDescription() const { return p_evaluationImplementation_->getOutputDescription(); } /* Enable or disable the internal cache */ void FunctionImplementation::enableCache() const { p_evaluationImplementation_->enableCache(); } void FunctionImplementation::disableCache() const { p_evaluationImplementation_->disableCache(); } Bool FunctionImplementation::isCacheEnabled() const { return p_evaluationImplementation_->isCacheEnabled(); } UnsignedInteger FunctionImplementation::getCacheHits() const { return p_evaluationImplementation_->getCacheHits(); } void FunctionImplementation::addCacheContent(const Sample& inSample, const Sample& outSample) { p_evaluationImplementation_->addCacheContent(inSample, outSample); } Sample FunctionImplementation::getCacheInput() const { return p_evaluationImplementation_->getCacheInput(); } Sample FunctionImplementation::getCacheOutput() const { return p_evaluationImplementation_->getCacheOutput(); } void FunctionImplementation::clearCache() const { p_evaluationImplementation_->clearCache(); } /* Enable or disable the input/output history */ void FunctionImplementation::enableHistory() const { p_evaluationImplementation_->enableHistory(); } void FunctionImplementation::disableHistory() const { p_evaluationImplementation_->disableHistory(); } Bool FunctionImplementation::isHistoryEnabled() const { return p_evaluationImplementation_->isHistoryEnabled(); } void FunctionImplementation::clearHistory() const { p_evaluationImplementation_->clearHistory(); } HistoryStrategy FunctionImplementation::getHistoryInput() const { return p_evaluationImplementation_->getHistoryInput(); } HistoryStrategy FunctionImplementation::getHistoryOutput() const { return p_evaluationImplementation_->getHistoryOutput(); } Sample FunctionImplementation::getInputPointHistory() const { return p_evaluationImplementation_->getInputPointHistory(); } Sample FunctionImplementation::getInputParameterHistory() const { return p_evaluationImplementation_->getInputParameterHistory(); } /* Multiplication operator between two functions with the same input dimension and 1D output dimension */ FunctionImplementation FunctionImplementation::operator * (const FunctionImplementation & right) const { return ProductFunction(clone(), right.clone()); } /* Multiplication operator between two functions with the same input dimension and 1D output dimension */ FunctionImplementation FunctionImplementation::operator * (const Implementation & p_right) const { return ProductFunction(clone(), p_right); } /* Function implementation accessors */ void FunctionImplementation::setEvaluation(const EvaluationPointer & evaluation) { p_evaluationImplementation_ = evaluation; } const FunctionImplementation::EvaluationPointer & FunctionImplementation::getEvaluation() const { return p_evaluationImplementation_; } /* Gradient implementation accessors */ void FunctionImplementation::setGradient(const GradientPointer & gradientImplementation) { p_gradientImplementation_ = gradientImplementation; useDefaultGradientImplementation_ = false; } const FunctionImplementation::GradientPointer & FunctionImplementation::getGradient() const { return p_gradientImplementation_; } /* Hessian implementation accessors */ void FunctionImplementation::setHessian(const HessianPointer & hessianImplementation) { p_hessianImplementation_ = hessianImplementation; useDefaultHessianImplementation_ = false; } const FunctionImplementation::HessianPointer & FunctionImplementation::getHessian() const { return p_hessianImplementation_; } /* Flag for default gradient accessors */ Bool FunctionImplementation::getUseDefaultGradientImplementation() const { return useDefaultGradientImplementation_; } void FunctionImplementation::setUseDefaultGradientImplementation(const Bool gradientFlag) { useDefaultGradientImplementation_ = gradientFlag; } /* Flag for default hessian accessors */ Bool FunctionImplementation::getUseDefaultHessianImplementation() const { return useDefaultHessianImplementation_; } void FunctionImplementation::setUseDefaultHessianImplementation(const Bool hessianFlag) { useDefaultHessianImplementation_ = hessianFlag; } /* Gradient according to the marginal parameters */ Matrix FunctionImplementation::parameterGradient(const Point & inP) const { return p_evaluationImplementation_->parameterGradient(inP); } /* Gradient according to the marginal parameters */ Matrix FunctionImplementation::parameterGradient(const Point & inP, const Point & parameter) { setParameter(parameter); return p_evaluationImplementation_->parameterGradient(inP); } /* Parameters value accessor */ Point FunctionImplementation::getParameter() const { return p_evaluationImplementation_->getParameter(); } void FunctionImplementation::setParameter(const Point & parameter) { p_evaluationImplementation_->setParameter(parameter); p_gradientImplementation_->setParameter(parameter); p_hessianImplementation_->setParameter(parameter); } /* Parameters description accessor */ Description FunctionImplementation::getParameterDescription() const { return p_evaluationImplementation_->getParameterDescription(); } void FunctionImplementation::setParameterDescription(const Description & description) { p_evaluationImplementation_->setParameterDescription(description); } /* Operator () */ Point FunctionImplementation::operator() (const Point & inP) const { return p_evaluationImplementation_->operator()(inP); } Point FunctionImplementation::operator() (const Point & inP, const Point & parameter) { setParameter(parameter); return p_evaluationImplementation_->operator()(inP); } Sample FunctionImplementation::operator() (const Point & inP, const Sample & parameters) { return p_evaluationImplementation_->operator()(inP, parameters); } /* Operator () */ Sample FunctionImplementation::operator() (const Sample & inSample) const { return p_evaluationImplementation_->operator()(inSample); } /* Operator () */ Field FunctionImplementation::operator() (const Field & inField) const { return p_evaluationImplementation_->operator()(inField); } /* Method gradient() returns the Jacobian transposed matrix of the function at point */ Matrix FunctionImplementation::gradient(const Point & inP) const { if (useDefaultGradientImplementation_) LOGWARN(OSS() << "You are using a default implementation for the gradient. Be careful, your computation can be severely wrong!"); // Here we must catch the exceptions raised by functions with no gradient try { return p_gradientImplementation_->gradient(inP); } catch (...) { // Fallback on non-centered finite difference gradient try { LOGWARN(OSS() << "Switch to finite difference to compute the gradient at point=" << inP); const CenteredFiniteDifferenceGradient gradientFD(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), p_evaluationImplementation_); return gradientFD.gradient(inP); } catch (...) { throw InternalException(HERE) << "Error: cannot compute gradient at point=" << inP; } } // Usual gradient failed } Matrix FunctionImplementation::gradient(const Point & inP, const Point & parameters) { if (useDefaultGradientImplementation_) LOGWARN(OSS() << "You are using a default implementation for the gradient. Be careful, your computation can be severely wrong!"); setParameter(parameters); return p_gradientImplementation_->gradient(inP); } /* Method hessian() returns the symetric tensor of the function at point */ SymmetricTensor FunctionImplementation::hessian(const Point & inP) const { if (useDefaultHessianImplementation_) LOGWARN(OSS() << "You are using a default implementation for the hessian. Be careful, your computation can be severely wrong!"); // Here we must catch the exceptions raised by functions with no gradient try { return p_hessianImplementation_->hessian(inP); } catch (...) { // Fallback on non-centered finite difference gradient try { LOGWARN(OSS() << "Switch to finite difference to compute the hessian at point=" << inP); const CenteredFiniteDifferenceHessian hessianFD(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon" ), p_evaluationImplementation_); return hessianFD.hessian(inP); } catch (...) { throw InternalException(HERE) << "Error: cannot compute hessian at point=" << inP; } } // Usual gradient failed } SymmetricTensor FunctionImplementation::hessian(const Point & inP, const Point & parameters) { if (useDefaultHessianImplementation_) LOGWARN(OSS() << "You are using a default implementation for the hessian. Be careful, your computation can be severely wrong!"); setParameter(parameters); return p_hessianImplementation_->hessian(inP); } /* Accessor for parameter dimension */ UnsignedInteger FunctionImplementation::getParameterDimension() const { return p_evaluationImplementation_->getParameterDimension(); } /* Accessor for input point dimension */ UnsignedInteger FunctionImplementation::getInputDimension() const { return p_evaluationImplementation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger FunctionImplementation::getOutputDimension() const { return p_evaluationImplementation_->getOutputDimension(); } /* Get the i-th marginal function */ FunctionImplementation::Implementation FunctionImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ FunctionImplementation::Implementation FunctionImplementation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; return new FunctionImplementation(p_evaluationImplementation_->getMarginal(indices), p_gradientImplementation_->getMarginal(indices), p_hessianImplementation_->getMarginal(indices)); } /* Number of calls to the evaluation */ UnsignedInteger FunctionImplementation::getEvaluationCallsNumber() const { return p_evaluationImplementation_->getCallsNumber(); } /* Number of calls to the gradient */ UnsignedInteger FunctionImplementation::getGradientCallsNumber() const { return p_gradientImplementation_->getCallsNumber(); } /* Number of calls to the hessian */ UnsignedInteger FunctionImplementation::getHessianCallsNumber() const { return p_hessianImplementation_->getCallsNumber(); } /* Static methods for documentation of analytical fonctions */ Description FunctionImplementation::GetValidConstants() { Log::Warn(OSS() << "Function:GetValidConstants is deprecated"); return SymbolicFunction::GetValidConstants(); } Description FunctionImplementation::GetValidFunctions() { Log::Warn(OSS() << "Function:GetValidFunctions is deprecated"); return SymbolicFunction::GetValidFunctions(); } Description FunctionImplementation::GetValidOperators() { Log::Warn(OSS() << "Function:GetValidOperators is deprecated"); return SymbolicFunction::GetValidOperators(); } /* Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ Graph FunctionImplementation::draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { return p_evaluationImplementation_->draw(inputMarginal, outputMarginal, centralPoint, xMin, xMax, pointNumber, scale); } /* Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ Graph FunctionImplementation::draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { return p_evaluationImplementation_->draw(firstInputMarginal, secondInputMarginal, outputMarginal, centralPoint, xMin, xMax, pointNumber, scale); } /* Draw the output of the function with respect to its input when the input and output dimensions are 1 */ Graph FunctionImplementation::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, const GraphImplementation::LogScale scale) const { return p_evaluationImplementation_->draw(xMin, xMax, pointNumber, scale); } /* Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ Graph FunctionImplementation::draw(const Point & xMin, const Point & xMax, const Indices & pointNumber, const GraphImplementation::LogScale scale) const { return p_evaluationImplementation_->draw(xMin, xMax, pointNumber, scale); } /* Method save() stores the object through the StorageManager */ void FunctionImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluationImplementation_", *p_evaluationImplementation_ ); adv.saveAttribute( "gradientImplementation_", *p_gradientImplementation_ ); adv.saveAttribute( "hessianImplementation_", *p_hessianImplementation_ ); adv.saveAttribute( "useDefaultGradientImplementation_", useDefaultGradientImplementation_ ); adv.saveAttribute( "useDefaultHessianImplementation_", useDefaultHessianImplementation_ ); } /* Method load() reloads the object from the StorageManager */ void FunctionImplementation::load(Advocate & adv) { TypedInterfaceObject evaluationValue; TypedInterfaceObject gradientValue; TypedInterfaceObject hessianValue; PersistentObject::load(adv); adv.loadAttribute( "evaluationImplementation_", evaluationValue ); p_evaluationImplementation_ = evaluationValue.getImplementation(); adv.loadAttribute( "gradientImplementation_", gradientValue ); p_gradientImplementation_ = gradientValue.getImplementation(); adv.loadAttribute( "hessianImplementation_", hessianValue ); p_hessianImplementation_ = hessianValue.getImplementation(); adv.loadAttribute( "useDefaultGradientImplementation_", useDefaultGradientImplementation_ ); adv.loadAttribute( "useDefaultHessianImplementation_", useDefaultHessianImplementation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FunctionalBasis.cxx000066400000000000000000000037571307543307100223510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FunctionalBasis.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionalBasis); /* Default constructor */ FunctionalBasis::FunctionalBasis() : TypedInterfaceObject(new FunctionalBasisImplementation()) { // Nothing to do } /* Constructor from implementation */ FunctionalBasis::FunctionalBasis(const FunctionalBasisImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Build the Function of the given index */ Function FunctionalBasis::build(const UnsignedInteger index) const { return getImplementation()->build(index); } Function FunctionalBasis::operator[](const UnsignedInteger index) const { return getImplementation()->operator[](index); } Bool FunctionalBasis::isOrthogonal() const { return getImplementation()->isOrthogonal(); } /* String converter */ String FunctionalBasis::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/FunctionalBasisImplementation.cxx000066400000000000000000000036341307543307100252510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FunctionalBasisImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionalBasisImplementation); static const Factory Factory_FunctionalBasisImplementation; /* Default constructor */ FunctionalBasisImplementation::FunctionalBasisImplementation() : BasisImplementation() { // Nothing to do } /* Virtual constructor */ FunctionalBasisImplementation * FunctionalBasisImplementation::clone() const { return new FunctionalBasisImplementation(*this); } Bool FunctionalBasisImplementation::isFunctional() const { return true; } String FunctionalBasisImplementation::__repr__() const { return OSS() << "class=" << getClassName(); } void FunctionalBasisImplementation::save(Advocate & adv) const { BasisImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void FunctionalBasisImplementation::load(Advocate & adv) { BasisImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/GradientImplementation.cxx000066400000000000000000000142721307543307100237220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all gradient implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GradientImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #else #include "openturns/LinearEvaluation.hxx" #endif #include "openturns/ConstantGradient.hxx" #include "openturns/ComposedGradient.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GradientImplementation); static const Factory Factory_GradientImplementation; /* Default constructor */ GradientImplementation::GradientImplementation() : PersistentObject() , callsNumber_(0) , parameter_(0) { // Nothing to do } /* Virtual constructor */ GradientImplementation * GradientImplementation::clone() const { return new GradientImplementation(*this); } /* Comparison operator */ Bool GradientImplementation::operator ==(const GradientImplementation & other) const { return true; } /* String converter */ String GradientImplementation::__repr__() const { OSS oss(true); oss << "class=" << GradientImplementation::GetClassName() << " name=" << getName(); return oss; } /* String converter */ String GradientImplementation::__str__(const String & offset) const { return OSS(false) << offset << "GradientImplementation"; } /* Test for actual implementation */ Bool GradientImplementation::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Gradient method */ Matrix GradientImplementation::gradient(const Point & inP) const { throw NotYetImplementedException(HERE) << "In GradientImplementation::gradient(const Point & inP) const"; } /* Gradient method */ Matrix GradientImplementation::gradient (const Point & inP, const Point & parameter) { setParameter(parameter); return gradient(inP); } /* Accessor for input point dimension */ UnsignedInteger GradientImplementation::getInputDimension() const { throw NotYetImplementedException(HERE) << "In GradientImplementation::getInputDimension() const"; } /* Accessor for output point dimension */ UnsignedInteger GradientImplementation::getOutputDimension() const { throw NotYetImplementedException(HERE) << "In GradientImplementation::getOutputDimension() const"; } /* Get the number of calls to operator() */ UnsignedInteger GradientImplementation::getCallsNumber() const { return callsNumber_; } /* Parameters value and description accessor */ Point GradientImplementation::getParameter() const { return parameter_; } void GradientImplementation::setParameter(const Point & parameter) { parameter_ = parameter; } /* Get the i-th marginal function */ GradientImplementation::Implementation GradientImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ GradientImplementation::Implementation GradientImplementation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; // Here we use the linear algebra representation of the marginal extraction operation in order to extract the marginal gradient. // The chain rule gives: // D(Af) = AD(f) in our case, instead of D(gof) = Dg(f)Df, so we don't need f as in our case Dg(f) = A is a constant. As we don't // have access to f here but only to Df, we build an arbitrary cheap evaluation with the proper dimension in order to reuse the // generic implementation of the chain rule for the gradients. We choose to build a null function using an analytical function. // Fake f const UnsignedInteger inputDimension = getInputDimension(); const UnsignedInteger outputDimension = getOutputDimension(); #ifdef OPENTURNS_HAVE_MUPARSER Description input(inputDimension); for (UnsignedInteger index = 0; index < inputDimension; ++index) input[index] = OSS() << "x" << index; Description output(outputDimension); for (UnsignedInteger index = 0; index < outputDimension; ++index) output[index] = OSS() << "y" << index; const Description formulas(outputDimension, "0.0"); const SymbolicEvaluation right(input, output, formulas); #else Point center(inputDimension); Matrix linear(inputDimension, outputDimension); Point constant(outputDimension); const LinearEvaluation right(center, constant, linear); #endif // A const UnsignedInteger marginalOutputDimension = indices.getSize(); Matrix gradientExtraction(outputDimension, marginalOutputDimension); for (UnsignedInteger i = 0; i < marginalOutputDimension; ++i) gradientExtraction(indices[i], i) = 1.0; const ConstantGradient leftGradient(gradientExtraction); return new ComposedGradient(leftGradient.clone(), right.clone(), clone()); } /* Method save() stores the object through the StorageManager */ void GradientImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "callsNumber_", callsNumber_ ); } /* Method load() reloads the object from the StorageManager */ void GradientImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "callsNumber_", callsNumber_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/HaarWavelet.cxx000066400000000000000000000064711307543307100214640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Haar wavelet function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HaarWavelet.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HaarWavelet); static const Factory Factory_HaarWavelet; /* Parameter constructor */ HaarWavelet::HaarWavelet(const UnsignedInteger j, const UnsignedInteger k, const Bool isScaling) : UniVariateFunctionImplementation() , j_(j) , k_(k) , isScaling_(isScaling) , a_(0.0) , m_(0.5) , b_(1.0) , value_(1.0) { // Nothing to do if (!isScaling) { const Scalar denominator = 1 << j; value_ = std::sqrt(denominator); a_ = k / denominator; m_ = (k + 0.5) / denominator; b_ = (k + 1.0) / denominator; } } /* Virtual constructor */ HaarWavelet * HaarWavelet::clone() const { return new HaarWavelet(*this); } /* String converter */ String HaarWavelet::__repr__() const { return OSS(true) << "class=" << GetClassName() << " j=" << j_ << " k=" << k_ << " isScaling=" << isScaling_ << " a=" << a_ << " m=" << m_ << " b=" << b_; } String HaarWavelet::__str__(const String & offset) const { OSS oss(false); if (isScaling_) oss << offset << "f:X -> {1.0 for 0.0<=X<1.0, 0.0 elsewhere}"; else oss << offset << "f:X -> {" << value_ << " for " << a_ << "<=X<" << m_ << ", " << -value_ << " for " << m_ << "<=X<" << b_ << ", 0.0 elsewhere}"; return oss; } /* HaarWavelet are evaluated as functors */ Scalar HaarWavelet::operator() (const Scalar x) const { if (isScaling_) return ((x < 0.0 || x > 1.0) ? 0.0 : 1.0); if (x < a_) return 0.0; if (x < m_) return value_; if (x < b_) return -value_; return 0.0; } /* HaarWavelet gradient */ Scalar HaarWavelet::gradient(const Scalar x) const { return 0.0; } /* HaarWavelet hessian */ Scalar HaarWavelet::hessian(const Scalar x) const { return 0.0; } /* Method save() stores the object through the StorageManager */ void HaarWavelet::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("j_", j_); adv.saveAttribute("k_", k_); adv.saveAttribute("isScaling_", isScaling_); } /* Method load() reloads the object from the StorageManager */ void HaarWavelet::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("j_", j_); adv.loadAttribute("k_", k_); adv.loadAttribute("isScaling_", isScaling_); *this = HaarWavelet(j_, k_, isScaling_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/HessianImplementation.cxx000066400000000000000000000144361307543307100235610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all hessian implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HessianImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #else #include "openturns/LinearEvaluation.hxx" #endif #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" #include "openturns/ComposedHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HessianImplementation); static const Factory Factory_HessianImplementation; /* Default constructor */ HessianImplementation::HessianImplementation() : PersistentObject() , callsNumber_(0) { // Nothing to do } /* Virtual constructor */ HessianImplementation * HessianImplementation::clone() const { return new HessianImplementation(*this); } /* Comparison operator */ Bool HessianImplementation::operator ==(const HessianImplementation & other) const { return true; } /* String converter */ String HessianImplementation::__repr__() const { OSS oss(true); oss << "class=" << HessianImplementation::GetClassName() << " name=" << getName(); return oss; } /* String converter */ String HessianImplementation::__str__(const String & offset) const { return OSS(false) << offset << "HessianImplementation"; } /* Test for actual implementation */ Bool HessianImplementation::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Hessian method */ SymmetricTensor HessianImplementation::hessian(const Point & inP) const { throw NotYetImplementedException(HERE) << "In HessianImplementation::hessian(const Point & inP) const"; } SymmetricTensor HessianImplementation::hessian(const Point & inP, const Point & parameters) { setParameter(parameters); return hessian(inP); } /* Accessor for input point dimension */ UnsignedInteger HessianImplementation::getInputDimension() const { throw NotYetImplementedException(HERE) << "In HessianImplementation::getInputDimension() const"; } /* Accessor for output point dimension */ UnsignedInteger HessianImplementation::getOutputDimension() const { throw NotYetImplementedException(HERE) << "In HessianImplementation::getOutputDimension() const"; } /* Get the number of calls to operator() */ UnsignedInteger HessianImplementation::getCallsNumber() const { return callsNumber_; } /* Parameters value and description accessor */ Point HessianImplementation::getParameter() const { return parameter_; } void HessianImplementation::setParameter(const Point & parameter) { parameter_ = parameter; } /* Get the i-th marginal function */ HessianImplementation::Implementation HessianImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ HessianImplementation::Implementation HessianImplementation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; // Here we use the linear algebra representation of the marginal extraction operation in order to extract the marginal hessian. // The chain rule gives: // D2(Af) = AD2(f) in our case, instead of D2(gof) = D(Dg(f)Df) = (D2g(f)Df)Df + Dg(f)D2f, so we don't need f as in our case Dg(f) = A is a constant, and we don't need D(f) as D2g(f) = 0. // As we don't have access to f and Df here but only to D2f, we build an arbitrary cheap evaluation with the proper dimension in order to reuse the // generic implementation of the chain rule for the hessians. We choose to build a null function using an analytical function. // Fake f const UnsignedInteger inputDimension = getInputDimension(); const UnsignedInteger outputDimension = getOutputDimension(); #ifdef OPENTURNS_HAVE_MUPARSER const SymbolicEvaluation right(Description::BuildDefault(inputDimension, "x"), Description::BuildDefault(outputDimension, "y"), Description(outputDimension, "0.0")); #else Point center(inputDimension); Matrix linear(inputDimension, outputDimension); Point constant(outputDimension); const LinearEvaluation right(center, constant, linear); #endif // Fake DF const ConstantGradient rightGradient(Matrix(inputDimension, outputDimension)); // Dg = A const UnsignedInteger marginalOutputDimension = indices.getSize(); Matrix gradientExtraction(outputDimension, marginalOutputDimension); for (UnsignedInteger i = 0; i < marginalOutputDimension; ++i) gradientExtraction(indices[i], i) = 1.0; const ConstantGradient leftGradient(gradientExtraction); // D2g = 0 const ConstantHessian leftHessian(SymmetricTensor(outputDimension, marginalOutputDimension)); return new ComposedHessian(leftGradient.clone(), leftHessian.clone(), right.clone(), rightGradient.clone(), clone()); } /* Method save() stores the object through the StorageManager */ void HessianImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "callsNumber_", callsNumber_ ); } /* Method load() reloads the object from the StorageManager */ void HessianImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "callsNumber_", callsNumber_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/HyperbolicAnisotropicEnumerateFunction.cxx000066400000000000000000000200471307543307100271430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/HyperbolicAnisotropicEnumerateFunction.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HyperbolicAnisotropicEnumerateFunction); static const Factory Factory_HyperbolicAnisotropicEnumerateFunction; /* Default constructor */ HyperbolicAnisotropicEnumerateFunction::HyperbolicAnisotropicEnumerateFunction() : EnumerateFunctionImplementation() , weight_() , q_(0.0) { // Nothing to do } /* Parameter constructor */ HyperbolicAnisotropicEnumerateFunction::HyperbolicAnisotropicEnumerateFunction(const UnsignedInteger dimension, const Scalar q) : EnumerateFunctionImplementation(dimension) , weight_(dimension, 1.0) { setQ(q); initialize(); } /* Parameter constructor */ HyperbolicAnisotropicEnumerateFunction::HyperbolicAnisotropicEnumerateFunction(const Point & weight, const Scalar q) : EnumerateFunctionImplementation(weight.getDimension()) , weight_(weight) , q_(q) { initialize(); } /* Virtual constrcutor */ HyperbolicAnisotropicEnumerateFunction * HyperbolicAnisotropicEnumerateFunction::clone() const { return new HyperbolicAnisotropicEnumerateFunction(*this); } /* String converter */ String HyperbolicAnisotropicEnumerateFunction::__repr__() const { return OSS() << "class=" << getClassName() << " derived from " << EnumerateFunctionImplementation::__repr__() << " q=" << q_ << " weights=" << weight_; } void HyperbolicAnisotropicEnumerateFunction::initialize() { cache_.clear(); candidates_.clear(); // insert indice 0, with q-norm 0.0 in the candidate list ValueType zero(Indices( getDimension(), 0), 0.0); candidates_.insert(candidates_.begin(), zero); } /* Returns the q-norm of the indice set */ Scalar HyperbolicAnisotropicEnumerateFunction::qNorm(const Indices & indices) const { Scalar result = 0.0; UnsignedInteger dimension = indices.getSize(); if (q_ == 1.0) { for (UnsignedInteger j = 0; j < dimension; ++ j) result += indices[j] * weight_[j]; return result; } for (UnsignedInteger j = 0; j < dimension; ++ j) result += pow(indices[j] * weight_[j], q_); return pow(result, 1.0 / q_); } UnsignedInteger HyperbolicAnisotropicEnumerateFunction::computeDegree(const Indices& indices) const { return *max_element(indices.begin(), indices.end()); } /* * We start from the zero-filled indice set, * and for every indice set asked, compute its immediate neighbors and add them to the list of candidates * this list contains all the potential next indices, sorted according to their q-norm * so the next indice set is the first in the list, i.e. the one closest to the origin * then we put it in a vector, allowing for fast retrieval according to the index */ Indices HyperbolicAnisotropicEnumerateFunction::operator() (const UnsignedInteger index) const { // if we haven't generated enough indices, generate them for (UnsignedInteger i = cache_.getSize(); i <= index; ++ i) { // the current indice is the first candidate in the list as we maintain q-norm sorting ValueType current(candidates_.front()); // move it to cache candidates_.pop_front(); // detect a norm leap if ((cache_.getSize() > 0) && (current.second > qNorm(cache_[cache_.getSize() - 1]))) strataCumulatedCardinal_.add( cache_.getSize() ); cache_.add( current.first ); // generate all the neighbours indices for(UnsignedInteger j = 0; j < getDimension(); ++ j) { Indices nextIndices( current.first ); ++ nextIndices[j]; Scalar nextNorm = qNorm( nextIndices ); ValueType next( nextIndices, nextNorm ); IndiceCache::iterator it = candidates_.begin(); // we'll try to insert the indice in the list according to its q-norm while ((it != candidates_.end()) && (it->second < nextNorm)) ++ it; // check if the same indice was already added bool duplicate( false ); while ((it != candidates_.end()) && (it->second == nextNorm)) { if (it->first == nextIndices) { duplicate = true; break; } ++ it; } // insert it in the list if not a duplicate if (!duplicate) candidates_.insert(it, next); } // loop over neighbours } return cache_[index]; } /* The cardinal of the given strata */ UnsignedInteger HyperbolicAnisotropicEnumerateFunction::inverse(const Indices & indices) const { UnsignedInteger result = 0; while ((cache_[result] != indices) && (result < cache_.getSize())) ++ result; if (result == cache_.getSize()) { do { operator()(result); ++ result; } while (cache_[result] != indices); } return result; } /* The cardinal of the given strata */ UnsignedInteger HyperbolicAnisotropicEnumerateFunction::getStrataCardinal(const UnsignedInteger strataIndex) const { UnsignedInteger result = getStrataCumulatedCardinal(strataIndex); if (strataIndex > 0) result -= getStrataCumulatedCardinal( strataIndex - 1 ); return result; } /* The cardinal of the cumulated strata above or equal to the given strata */ UnsignedInteger HyperbolicAnisotropicEnumerateFunction::getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const { while (strataCumulatedCardinal_.getSize() <= strataIndex) operator()(cache_.getSize()); return strataCumulatedCardinal_[strataIndex]; } UnsignedInteger HyperbolicAnisotropicEnumerateFunction::getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const { // find indice UnsignedInteger index = 0; UnsignedInteger degree = 0; // First, a geometrical search to find an upper bound LOGINFO("Find upper bound"); do { degree = computeDegree(operator()(index)); ++index; } while (degree <= maximumDegree); UnsignedInteger strataIndex = 0; LOGINFO("Find strata index"); while(getStrataCumulatedCardinal(strataIndex) < index) { ++ strataIndex; } return strataIndex - 1; } /* Q accessor */ void HyperbolicAnisotropicEnumerateFunction::setQ(const Scalar q) { if (!(q > 0.0)) throw InvalidRangeException( HERE ) << "q parameter should be positive"; q_ = q; } Scalar HyperbolicAnisotropicEnumerateFunction::getQ() const { return q_; } /* Weight accessor */ void HyperbolicAnisotropicEnumerateFunction::setWeight(const Point & weight) { for (UnsignedInteger i = 0; i < getDimension(); ++ i) { if (weight[i] < 0.0) { throw InvalidRangeException( HERE ) << "Anisotropic weights should not be negative."; } } weight_ = weight; } Point HyperbolicAnisotropicEnumerateFunction::getWeight() const { return weight_; } /* Method save() stores the object through the StorageManager */ void HyperbolicAnisotropicEnumerateFunction::save(Advocate & adv) const { EnumerateFunctionImplementation::save(adv); adv.saveAttribute( "q_", q_ ); adv.saveAttribute( "weight_", weight_ ); } /* Method load() reloads the object from the StorageManager */ void HyperbolicAnisotropicEnumerateFunction::load(Advocate & adv) { EnumerateFunctionImplementation::load(adv); adv.loadAttribute( "q_", q_ ); adv.loadAttribute( "weight_", weight_ ); initialize(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/IdentityEvaluation.cxx000066400000000000000000000071541307543307100231010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for identity evaluation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IdentityEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IdentityEvaluation); static const Factory Factory_IdentityEvaluation; /* Parameter constructor */ IdentityEvaluation::IdentityEvaluation(const UnsignedInteger dimension) : EvaluationImplementation() , dimension_(dimension) { /* Check if the dimension of the constant term is compatible with the linear term */ if (dimension_ == 0) throw InvalidDimensionException(HERE) << "Error: cannot build an identity evaluation of dimension 0"; setInputDescription(Description::BuildDefault(dimension, "x")); setOutputDescription(Description::BuildDefault(dimension, "y")); } /* Virtual constructor */ IdentityEvaluation * IdentityEvaluation::clone() const { return new IdentityEvaluation(*this); } /* Comparison operator */ Bool IdentityEvaluation::operator ==(const IdentityEvaluation & other) const { return dimension_ == other.dimension_; } /* String converter */ String IdentityEvaluation::__repr__() const { OSS oss(true); oss << "class=" << IdentityEvaluation::GetClassName() << " name=" << getName() << " dimension=" << dimension_; return oss; } String IdentityEvaluation::__str__(const String & offset) const { OSS oss(false); oss << IdentityEvaluation::GetClassName() << "(dimension=" << dimension_ << ")"; return oss; } /* Here is the interface that all derived class must implement */ /* Operator () */ Point IdentityEvaluation::operator() (const Point & inP) const { if (inP.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Invalid input dimension"; ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(inP); } return inP; } /* Operator () */ Sample IdentityEvaluation::operator() (const Sample & inS) const { if (inS.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Invalid input dimension"; callsNumber_ += inS.getSize(); if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(inS); } return inS; } /* Accessor for input point dimension */ UnsignedInteger IdentityEvaluation::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger IdentityEvaluation::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void IdentityEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void IdentityEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/IdentityFunction.cxx000066400000000000000000000041471307543307100225560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for the identity function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IdentityFunction.hxx" #include "openturns/IdentityEvaluation.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IdentityFunction); /* Default constructor */ IdentityFunction::IdentityFunction(const UnsignedInteger dimension) : Function(new IdentityEvaluation(dimension), new ConstantGradient(IdentityMatrix(dimension)), new ConstantHessian(SymmetricTensor(dimension, dimension))) { // Nothing to do } /* Comparison operator */ Bool IdentityFunction::operator ==(const IdentityFunction & other) const { if (this == &other) return true; return *getImplementation() == *other.getImplementation(); } /* String converter */ String IdentityFunction::__repr__() const { OSS oss(true); oss << "class=" << IdentityFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } String IdentityFunction::__str__(const String & offset) const { OSS oss(false); oss << "class=" << IdentityFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__str__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/IndicatorEvaluation.cxx000066400000000000000000000107711307543307100232230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/IndicatorEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Less.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IndicatorEvaluation); static const Factory Factory_IndicatorEvaluation; /* Default constructor */ IndicatorEvaluation::IndicatorEvaluation() : EvaluationImplementation() , p_evaluation_() , comparisonOperator_() , threshold_(0.0) { // Nothing to do } // IndicatorEvaluation /* Default constructor */ IndicatorEvaluation::IndicatorEvaluation(const EvaluationPointer & p_evaluation, const ComparisonOperator & comparisonOperator, const Scalar threshold) : EvaluationImplementation() , p_evaluation_() , comparisonOperator_(comparisonOperator) , threshold_(threshold) { setEvaluation(p_evaluation); setDescription(p_evaluation->getDescription()); } // IndicatorEvaluation /* Virtual constructor */ IndicatorEvaluation * IndicatorEvaluation::clone() const { return new IndicatorEvaluation(*this); } /* Comparison operator */ Bool IndicatorEvaluation::operator ==(const IndicatorEvaluation & other) const { return true; } /* String converter */ String IndicatorEvaluation::__repr__() const { OSS oss; oss << "class=" << IndicatorEvaluation::GetClassName() << " name=" << getName() << " evaluation=" << p_evaluation_->__repr__() << " comparisonOperator=" << comparisonOperator_ << " threshold=" << threshold_; return oss; } /* Operator () */ Point IndicatorEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const Point result(1, (comparisonOperator_.compare(p_evaluation_->operator()(inP)[0], threshold_) ? 1.0 : 0.0)); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger IndicatorEvaluation::getInputDimension() const { return p_evaluation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger IndicatorEvaluation::getOutputDimension() const { return 1; } /* Accessor for the underlying evaluation */ IndicatorEvaluation::EvaluationPointer IndicatorEvaluation::getEvaluation() const { return p_evaluation_; } void IndicatorEvaluation::setEvaluation(const EvaluationPointer & p_evaluation) { if (p_evaluation->getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot use an evaluation implementation with output dimension not equal to 1"; p_evaluation_ = p_evaluation; } /* Accessor for the comparison operator */ ComparisonOperator IndicatorEvaluation::getComparisonOperator() const { return comparisonOperator_; } void IndicatorEvaluation::setComparisonOperator(const ComparisonOperator & comparisonOperator) { comparisonOperator_ = comparisonOperator; } /* Accessor for the threshold */ Scalar IndicatorEvaluation::getThreshold() const { return threshold_; } void IndicatorEvaluation::setThreshold(const Scalar threshold) { threshold_ = threshold; } /* Method save() stores the object through the StorageManager */ void IndicatorEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "evaluation_", *p_evaluation_ ); adv.saveAttribute( "comparisonOperator_", comparisonOperator_ ); adv.saveAttribute( "threshold_", threshold_ ); } /* Method load() reloads the object from the StorageManager */ void IndicatorEvaluation::load(Advocate & adv) { TypedInterfaceObject evaluation; EvaluationImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation ); p_evaluation_ = evaluation.getImplementation(); adv.loadAttribute( "comparisonOperator_", comparisonOperator_ ); adv.loadAttribute( "threshold_", threshold_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/IndicatorFunction.cxx000066400000000000000000000037231307543307100227000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements indicator functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IndicatorFunction.hxx" #include "openturns/IndicatorEvaluation.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IndicatorFunction); /* Default constructor */ IndicatorFunction::IndicatorFunction () : Function() { } /* Parameter constructor */ IndicatorFunction::IndicatorFunction (const Function & function, const ComparisonOperator & comparisonOperator, const Scalar threshold) : Function() { const IndicatorEvaluation evaluation(function.getEvaluation(), comparisonOperator, threshold); setEvaluation(evaluation.clone()); setGradient(NoGradient().clone()); setHessian(NoHessian().clone()); } /* Comparison operator */ Bool IndicatorFunction::operator ==(const IndicatorFunction & other) const { return true; } /* String converter */ String IndicatorFunction::__repr__() const { return getImplementation()->__repr__(); } String IndicatorFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseBoxCoxEvaluation.cxx000066400000000000000000000145721307543307100240500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the inverse Box cox function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/InverseBoxCoxEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseBoxCoxEvaluation); static const Factory Factory_InverseBoxCoxEvaluation; /* Default constructor */ InverseBoxCoxEvaluation::InverseBoxCoxEvaluation() : EvaluationImplementation() { // Nothing to do } /* Parameter constructor */ InverseBoxCoxEvaluation::InverseBoxCoxEvaluation(const Point & lambda) : EvaluationImplementation() , lambda_(lambda) , shift_(lambda.getDimension()) { setInputDescription(Description::BuildDefault(lambda_.getSize(), "x")); setOutputDescription(Description::BuildDefault(lambda_.getSize(), "y")); } InverseBoxCoxEvaluation::InverseBoxCoxEvaluation(const Point & lambda, const Point & shift) : EvaluationImplementation() , lambda_(lambda) , shift_(shift) { if (lambda.getDimension() != shift.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given exponent vector has a dimension=" << lambda.getDimension() << " different from the shift dimension=" << shift.getDimension(); setInputDescription(Description::BuildDefault(lambda_.getSize(), "x")); setOutputDescription(Description::BuildDefault(lambda_.getSize(), "y")); } /* Clone constructor */ InverseBoxCoxEvaluation * InverseBoxCoxEvaluation::clone() const { return new InverseBoxCoxEvaluation(*this); } /* Comparison operator */ Bool InverseBoxCoxEvaluation::operator ==(const InverseBoxCoxEvaluation & other) const { if (this == &other) return true; return (lambda_ == other.lambda_) && (shift_ == other.shift_); } /* String converter */ String InverseBoxCoxEvaluation::__repr__() const { OSS oss(true); oss << "class=" << InverseBoxCoxEvaluation::GetClassName() << " name=" << getName() << " dimension=" << getInputDimension() << " lambda=" << lambda_ << " shift=" << shift_; return oss; } /* String converter __str__ */ String InverseBoxCoxEvaluation::__str__(const String & offset) const { OSS oss(false); oss << "InverseBoxCox(lambda=" << lambda_ << ", shift=" << shift_ << ")"; return oss; } /* Accessor for the lambda */ Point InverseBoxCoxEvaluation::getLambda() const { return lambda_; } /* Accessor for the shift */ Point InverseBoxCoxEvaluation::getShift() const { return shift_; } struct InverseBoxCoxEvaluationComputeSamplePolicy { const Sample & input_; Sample & output_; const InverseBoxCoxEvaluation & evaluation_; InverseBoxCoxEvaluationComputeSamplePolicy(const Sample & input, Sample & output, const InverseBoxCoxEvaluation & evaluation) : input_(input) , output_(output) , evaluation_(evaluation) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { for (UnsignedInteger j = 0; j < evaluation_.getInputDimension(); ++j) { const Scalar lambda_j = evaluation_.getLambda()[j]; const Scalar x = input_[i][j] - evaluation_.getShift()[j]; if (std::abs(lambda_j * x * x) < 1e-8) output_[i][j] = exp(x) * (1.0 - 0.5 * lambda_j * x * x); else output_[i][j] = pow(lambda_j * x + 1.0, 1.0 / lambda_j); } // j } // i } // operator () }; /* end struct InverseBoxCoxEvaluationComputeSamplePolicy */ /* Operator () */ Sample InverseBoxCoxEvaluation::operator() (const Sample & inS) const { if (inS.getDimension() != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << getInputDimension() << ", got " << inS.getDimension(); const UnsignedInteger size = inS.getSize(); Sample result(size, getInputDimension()); const InverseBoxCoxEvaluationComputeSamplePolicy policy( inS, result, *this ); TBB::ParallelFor( 0, size, policy ); callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } result.setDescription(getOutputDescription()); return result; } /* Operator () */ Point InverseBoxCoxEvaluation::operator() (const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); Point result(dimension); // There is no check of positive variables // This last one must be done by user or, as the evaluation is used in a stochastic context, in the BoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] - shift_[index]; const Scalar lambda_i = lambda_[index]; if (std::abs(lambda_i * x * x) < 1e-8) result[index] = exp(x) * (1.0 - 0.5 * lambda_i * x * x); else { const Scalar evaluation = lambda_i * x + 1.0; if (evaluation <= 0) throw InvalidArgumentException(HERE) << "Can not apply the inverse Box Cox function " ; result[index] = pow(evaluation, 1.0 / lambda_i); } } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseBoxCoxEvaluation::getInputDimension() const { return lambda_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseBoxCoxEvaluation::getOutputDimension() const { return lambda_.getDimension(); } /* Method save() stores the object through the StorageManager */ void InverseBoxCoxEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "shift_", shift_ ); } /* Method load() reloads the object from the StorageManager */ void InverseBoxCoxEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "shift_", shift_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseBoxCoxGradient.cxx000066400000000000000000000077311307543307100234750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/InverseBoxCoxGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseBoxCoxGradient); static const Factory Factory_InverseBoxCoxGradient; /* Default constructor */ InverseBoxCoxGradient::InverseBoxCoxGradient() : GradientImplementation() { // Nothing to do } /* Parameter constructor */ InverseBoxCoxGradient::InverseBoxCoxGradient(const InverseBoxCoxEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Clone constructor */ InverseBoxCoxGradient * InverseBoxCoxGradient::clone() const { return new InverseBoxCoxGradient(*this); } /* Comparison operator */ Bool InverseBoxCoxGradient::operator ==(const InverseBoxCoxGradient & other) const { if (this == &other) return true; return (evaluation_ == other.evaluation_); } /* String converter */ String InverseBoxCoxGradient::__repr__() const { OSS oss(true); oss << "class=" << InverseBoxCoxGradient::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter __str__ */ String InverseBoxCoxGradient::__str__(const String & offset) const { OSS oss (false); oss << "InverseBoxCoxGradient(lambda=" << getLambda() << ", shift=" << getShift() << ")"; return oss; } /* Accessor for the evaluation */ InverseBoxCoxEvaluation InverseBoxCoxGradient::getEvaluation() const { return evaluation_; } /* Gradient evaluation method */ Matrix InverseBoxCoxGradient::gradient(const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); Matrix result(1, dimension); // There is no check of positive variables // This last one must be done by user or, as the gradient is used in a stochastic context, in the InverseBoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] + getShift()[index]; if (x <= 0.0) throw InvalidArgumentException(HERE) << "Can not apply the Box Cox gradient function to a negative shifted value x=" << x; // Applying the Box-Cox function const Scalar lambda_i = getLambda()[index]; if (std::abs(lambda_i * x * x) < 1e-8) result(0, index) = exp(x) * (1.0 - lambda_i * x * (1.0 + 0.5 * x)); else result(0, index) = pow(x, 1.0 / lambda_i - 1.0); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseBoxCoxGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseBoxCoxGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Accessor for the lambda */ Point InverseBoxCoxGradient::getLambda() const { return evaluation_.getLambda(); } /* Accessor for the shift */ Point InverseBoxCoxGradient::getShift() const { return evaluation_.getShift(); } /* Method save() stores the object through the StorageManager */ void InverseBoxCoxGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void InverseBoxCoxGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseBoxCoxHessian.cxx000066400000000000000000000077531307543307100233360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/InverseBoxCoxHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseBoxCoxHessian); static const Factory Factory_InverseBoxCoxHessian; /* Default constructor */ InverseBoxCoxHessian::InverseBoxCoxHessian() : HessianImplementation() { // Nothing to do } /* Parameter constructor */ InverseBoxCoxHessian::InverseBoxCoxHessian(const InverseBoxCoxEvaluation & evaluation) : HessianImplementation() , evaluation_(evaluation) { // Nothing to do } /* Clone constructor */ InverseBoxCoxHessian * InverseBoxCoxHessian::clone() const { return new InverseBoxCoxHessian(*this); } /* Comparison operator */ Bool InverseBoxCoxHessian::operator ==(const InverseBoxCoxHessian & other) const { if (this == &other) return true; return (evaluation_ == other.evaluation_); } /* String converter */ String InverseBoxCoxHessian::__repr__() const { OSS oss(true); oss << "class=" << InverseBoxCoxHessian::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter __str__ */ String InverseBoxCoxHessian::__str__(const String & offset) const { OSS oss (false); oss << "InverseBoxCoxHessian(lambda=" << getLambda() << ", shift=" << getShift() << ")"; return oss; } /* Accessor for the evaluation */ InverseBoxCoxEvaluation InverseBoxCoxHessian::getEvaluation() const { return evaluation_; } /* Hessian evaluation method */ SymmetricTensor InverseBoxCoxHessian::hessian(const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << dimension << ", got " << inP.getDimension(); SymmetricTensor result(1, dimension); // There is no check of positive variables // This last one must be done by user or, as the hessian is used in a stochastic context, in the InverseBoxCoxTransform class for (UnsignedInteger index = 0; index < dimension; ++index) { const Scalar x = inP[index] + getShift()[index]; if (x <= 0.0) throw InvalidArgumentException(HERE) << "Can not apply the Box Cox hessian function to a negative shifted value x=" << x; // Applying the Box-Cox function const Scalar lambda_i = getLambda()[index]; if (std::abs(lambda_i * x * x) < 1e-8) result(0, 0, index) = exp(x) * (1.0 - lambda_i * (1.0 + x * (2.0 + 0.5 * x))); else result(0, 0, index) = (1.0 - lambda_i) * pow(x, 1.0 / lambda_i - 2.0); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseBoxCoxHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseBoxCoxHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Accessor for the lambda */ Point InverseBoxCoxHessian::getLambda() const { return evaluation_.getLambda(); } /* Accessor for the shift */ Point InverseBoxCoxHessian::getShift() const { return evaluation_.getShift(); } /* Method save() stores the object through the StorageManager */ void InverseBoxCoxHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void InverseBoxCoxHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseBoxCoxTransform.cxx000066400000000000000000000062461307543307100237130ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseBoxCoxTransform.hxx" #include "openturns/InverseBoxCoxEvaluation.hxx" #include "openturns/InverseBoxCoxGradient.hxx" #include "openturns/InverseBoxCoxHessian.hxx" #include "openturns/BoxCoxTransform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseBoxCoxTransform); /* Default constructor */ InverseBoxCoxTransform::InverseBoxCoxTransform() : Function(InverseBoxCoxEvaluation()) { // Nothing to do } /* Standard parameter constructor */ InverseBoxCoxTransform::InverseBoxCoxTransform(const Point & lambda) : Function() { const InverseBoxCoxEvaluation evaluation(lambda); setEvaluation(evaluation.clone()); setGradient(InverseBoxCoxGradient(evaluation).clone()); setHessian(InverseBoxCoxHessian(evaluation).clone()); } /* ScalarCollection parameter constructor */ InverseBoxCoxTransform::InverseBoxCoxTransform(const Point & lambda, const Point & shift) : Function() { const InverseBoxCoxEvaluation evaluation(lambda, shift); setEvaluation(evaluation.clone()); setGradient(InverseBoxCoxGradient(evaluation).clone()); setHessian(InverseBoxCoxHessian(evaluation).clone()); } /* 1D Scalar parameter constructor */ InverseBoxCoxTransform::InverseBoxCoxTransform(const Scalar & lambda) : Function() { const InverseBoxCoxEvaluation evaluation(Point(1, lambda)); setEvaluation(evaluation.clone()); setGradient(InverseBoxCoxGradient(evaluation).clone()); setHessian(InverseBoxCoxHessian(evaluation).clone()); } InverseBoxCoxTransform::InverseBoxCoxTransform(const Scalar & lambda, const Scalar & shift) : Function() { const InverseBoxCoxEvaluation evaluation(Point(1, lambda), Point(1, shift)); setEvaluation(evaluation.clone()); setGradient(InverseBoxCoxGradient(evaluation).clone()); setHessian(InverseBoxCoxHessian(evaluation).clone()); } /* Virtual constructor */ InverseBoxCoxTransform * InverseBoxCoxTransform::clone() const { return new InverseBoxCoxTransform(*this); } /* Lambda accessor */ Point InverseBoxCoxTransform::getLambda() const { return dynamic_cast(getEvaluation().get())->getLambda(); } /* Shift accessor */ Point InverseBoxCoxTransform::getShift() const { return dynamic_cast(getEvaluation().get())->getShift(); } /* Inverse accessor */ BoxCoxTransform InverseBoxCoxTransform::getInverse() const { return BoxCoxTransform(getLambda(), getShift()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseTrendEvaluation.cxx000066400000000000000000000075411307543307100237200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/InverseTrendEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseTrendEvaluation); static const Factory Factory_InverseTrendEvaluation; /* Default constructor */ InverseTrendEvaluation::InverseTrendEvaluation() : EvaluationImplementation() , function_() { // Nothing to do } /* Parameter constructor */ InverseTrendEvaluation::InverseTrendEvaluation(const Function & function) : EvaluationImplementation() , function_(function) { Description inputDescription(function.getInputDescription()); const Description outputDescription(function.getOutputDescription()); const UnsignedInteger outputDimension = outputDescription.getSize(); const Description otherInputDescription(Description::BuildDefault(outputDimension, "x")); for (UnsignedInteger i = 0; i < outputDimension; ++i) inputDescription.add(otherInputDescription[i]); setInputDescription(inputDescription); setOutputDescription(outputDescription); } /* Clone constructor */ InverseTrendEvaluation * InverseTrendEvaluation::clone() const { return new InverseTrendEvaluation(*this); } /* Comparison operator */ Bool InverseTrendEvaluation::operator ==(const InverseTrendEvaluation & other) const { if (this == &other) return true; return (function_ == other.function_); } /* String converter */ String InverseTrendEvaluation::__repr__() const { OSS oss(true); oss << "class=" << InverseTrendEvaluation::GetClassName() << " name=" << getName() << " function=" << function_.__repr__(); return oss; } /* String converter __str__ */ String InverseTrendEvaluation::__str__(const String & offset) const { OSS oss (false); oss << function_.__str__(offset); return oss; } /* Accessor for the function */ Function InverseTrendEvaluation::getFunction() const { return function_; } /* Operator () */ Point InverseTrendEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Invalid input dimension"; UnsignedInteger outputDimension = getOutputDimension(); Point result(outputDimension); const UnsignedInteger reducedInputDimension = function_.getInputDimension(); Point t(reducedInputDimension); for (UnsignedInteger i = 0; i < reducedInputDimension; ++i) t[i] = inP[i]; const Point z(function_(t)); for (UnsignedInteger i = 0; i < outputDimension; ++i) result[i] = inP[i + reducedInputDimension] - z[i]; ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseTrendEvaluation::getInputDimension() const { return function_.getInputDimension() + function_.getOutputDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseTrendEvaluation::getOutputDimension() const { return function_.getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void InverseTrendEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "function_", function_ ); } /* Method load() reloads the object from the StorageManager */ void InverseTrendEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "function_", function_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/InverseTrendTransform.cxx000066400000000000000000000106061307543307100235600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for inverse trend function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseTrendTransform.hxx" #include "openturns/TrendTransform.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseTrendTransform); static const Factory Factory_InverseTrendTransform; /* Default constructor */ InverseTrendTransform::InverseTrendTransform() : VertexValueFunction() { // Nothing to do } /* Parameter constructor */ InverseTrendTransform::InverseTrendTransform(const Function & function) : VertexValueFunction(function.getInputDimension()) { p_evaluation_ = function.getEvaluation() ; // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ InverseTrendTransform::InverseTrendTransform(const EvaluationPointer & p_evaluation) : VertexValueFunction(p_evaluation->getInputDimension()) { p_evaluation_ = p_evaluation; // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ InverseTrendTransform::InverseTrendTransform(const EvaluationImplementation & evaluation) : VertexValueFunction(evaluation.getInputDimension()) { p_evaluation_ = evaluation.clone(); // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Virtual constructor */ InverseTrendTransform * InverseTrendTransform::clone() const { return new InverseTrendTransform(*this); } /* Comparison operator */ Bool InverseTrendTransform::operator ==(const InverseTrendTransform & other) const { return (getEvaluation() == other.getEvaluation()); } /* String converter */ String InverseTrendTransform::__repr__() const { OSS oss(true); oss << "class=" << InverseTrendTransform::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String InverseTrendTransform::__str__(const String & offset) const { return OSS(false) << p_evaluation_->__str__(offset); } /* Operator () */ Field InverseTrendTransform::operator() (const Field & inFld) const { if (inFld.getSpatialDimension() != p_evaluation_->getInputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a Field with mesh dimension=" << p_evaluation_->getInputDimension() << ", got mesh dimension=" << inFld.getSpatialDimension(); if (inFld.getDimension() != p_evaluation_->getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a Field with dimension=" << p_evaluation_->getOutputDimension() << ", got dimension=" << inFld.getDimension(); Sample outputSample((*p_evaluation_)(inFld.getMesh().getVertices())); // finally as the function adds a trend, result for (UnsignedInteger k = 0; k < outputSample.getSize(); ++k) outputSample[k] = inFld.getValueAtIndex(k) - outputSample[k]; ++callsNumber_; return Field(inFld.getMesh(), outputSample); } /* Inverse accessor */ TrendTransform InverseTrendTransform::getInverse() const { return TrendTransform(p_evaluation_); } /* Method save() stores the object through the StorageManager */ void InverseTrendTransform::save(Advocate & adv) const { VertexValueFunction::save(adv); } /* Method load() reloads the object from the StorageManager */ void InverseTrendTransform::load(Advocate & adv) { VertexValueFunction::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LARS.cxx000066400000000000000000000166321307543307100200220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Least Angle Regression Algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/LARS.hxx" #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LARS); typedef Collection ScalarCollection; static const Factory Factory_LARS; /* Default constructor */ LARS::LARS(const Bool verbose) : BasisSequenceFactoryImplementation(verbose) , relativeConvergence_(1.0) , oldCoefficientsL1Norm_(0.0) , coefficientsL1Norm_(0.0) { // Nothing to do } /* Virtual constructor */ LARS * LARS::clone() const { return new LARS( *this ); } /* Method to create new BasisSequence objects */ BasisSequence LARS::build (const Sample & x, const Sample & y, const Basis & basis, const Indices & indices) { return BasisSequenceFactoryImplementation::build(x, y, basis, indices); } void LARS::initialize() { BasisSequenceFactoryImplementation::initialize(); oldCoefficientsL1Norm_ = 0.0; coefficientsL1Norm_ = 0.0; coefficients_.clear(); mu_.clear(); relativeConvergence_ = 1.0; predictors_.clear(); inPredictors_.clear(); mPsiX_ = Matrix(); } /* Method to create new BasisSequence objects */ void LARS::updateBasis(LeastSquaresMethod & method, const Sample & y) { Sample x(method.getInputSample()); const UnsignedInteger sampleSize = x.getSize(); if (sampleSize == 0) throw InvalidArgumentException( HERE ) << "Output sample cannot be empty."; if (y.getDimension() != 1) throw InvalidArgumentException( HERE ) << "Output sample should be unidimensional (dim=" << y.getDimension() << ")."; if (y.getSize() != sampleSize) throw InvalidArgumentException( HERE ) << "Samples should be equally sized (in=" << sampleSize << " out=" << y.getSize() << ")."; // if (x.getDimension() != psi.getDimension()) throw InvalidArgumentException( HERE ) << "Sample dimension (" << x.getDimension() << ") does not match basis dimension (" << psi.getDimension() << ")."; // get y as as point const Point mY(y.getImplementation()->getData()); // precompute the design matrix on the whole basis if (mPsiX_.getNbRows() == 0) { mPsiX_ = method.computeWeightedDesign(true); } const UnsignedInteger basisSize = mPsiX_.getNbColumns(); // regression coefficients if (coefficients_.getDimension() == 0) coefficients_ = Point(basisSize); // current least-square state if (mu_.getDimension() == 0) mu_ = Point(sampleSize); conservedPsi_k_ranks_ = currentIndices_; addedPsi_k_ranks_.clear(); const UnsignedInteger maximumNumberOfIterations = std::min( basisSize, sampleSize - 1 ); const UnsignedInteger iterations = predictors_.getSize(); if (iterations == 0) inPredictors_ = Indices(basisSize, 0); if ((iterations < maximumNumberOfIterations) && (relativeConvergence_ > maximumRelativeConvergence_)) { // find the predictor most correlated with the current residual const Point cC(mPsiX_.getImplementation()->genVectProd(mY - mu_, true)); UnsignedInteger candidatePredictor = 0; Scalar cMax = -1.0; for (UnsignedInteger j = 0; j < basisSize; ++ j) if (!inPredictors_[j]) { const Scalar cAbs = std::abs(cC[j]); if (cAbs > cMax) { cMax = cAbs; candidatePredictor = j; } } // if if (getVerbose()) LOGINFO(OSS() << "predictor=" << candidatePredictor << " residual=" << cMax); // add the predictor index predictors_.add(candidatePredictor); inPredictors_[candidatePredictor] = 1; const UnsignedInteger globalPredictor = method.getInitialIndices()[candidatePredictor]; addedPsi_k_ranks_.add(globalPredictor); currentIndices_.add(globalPredictor); method.update(addedPsi_k_ranks_, conservedPsi_k_ranks_, removedPsi_k_ranks_); // Starting from here, predictors_ has a size at least equal to 1 // store the sign of the correlation UnsignedInteger predictorsSize = predictors_.getSize(); Point sC(predictorsSize); for (UnsignedInteger j = 0; j < predictorsSize; ++ j) sC[j] = (cC[predictors_[j]] < 0.0 ? -1.0 : 1.0); // store correlations of the inactive set Point cI; for (UnsignedInteger j = 0; j < basisSize; ++ j) if (!inPredictors_[j]) cI.add(cC[j]); if (getVerbose()) LOGINFO(OSS() << "matrix of elements of the inactive set built."); Matrix mPsiAk(method.computeWeightedDesign()); if (getVerbose()) LOGINFO(OSS() << "matrix of elements of the active set built."); Point ga1(method.solveNormal(sC)); if (getVerbose()) LOGINFO( OSS() << "Solved normal equation."); // normalization coefficient Scalar cNorm = 1.0 / sqrt(dot(sC, ga1)); // descent direction const Point descentDirectionAk(cNorm * ga1); const Point u(mPsiAk * descentDirectionAk); const Point d2(mPsiX_.getImplementation()->genVectProd(u, true)); Point d; for (UnsignedInteger j = 0; j < basisSize; ++ j) if (!inPredictors_[j]) d.add(d2[j]); // compute step Scalar step = cMax / cNorm; for (UnsignedInteger j = 0; j < basisSize - predictorsSize; ++ j) { Scalar lhs = (cMax - cI[j]) / (cNorm - d[j]); Scalar rhs = (cMax + cI[j]) / (cNorm + d[j]); if (lhs > 0.0) step = std::min(step, lhs); if (rhs > 0.0) step = std::min(step, rhs); } // update mu mu_ += step * u; // update coefficients oldCoefficientsL1Norm_ = coefficientsL1Norm_; coefficientsL1Norm_ = 0.0; for (UnsignedInteger j = 0; j < predictorsSize; ++ j) { coefficients_[predictors_[j]] += step * descentDirectionAk[j]; coefficientsL1Norm_ += std::abs(coefficients_[predictors_[j]]); } if (coefficientsL1Norm_ > 0.0) relativeConvergence_ = std::abs(1.0 - oldCoefficientsL1Norm_ / coefficientsL1Norm_); else relativeConvergence_ = -1.0; if (getVerbose()) LOGINFO( OSS() << "End of iteration " << iterations << " over " << maximumNumberOfIterations - 1 << " iteration(s)" << ", relative convergence=" << relativeConvergence_ << " for a target=" << maximumRelativeConvergence_); } } /* String converter */ String LARS::__repr__() const { return OSS(true) << "class=" << getClassName(); } String LARS::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Method save() stores the object through the StorageManager */ void LARS::save(Advocate & adv) const { BasisSequenceFactoryImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void LARS::load(Advocate & adv) { BasisSequenceFactoryImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearBasisFactory.cxx000066400000000000000000000046651307543307100230100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Linear canonical basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearBasisFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearBasisFactory); static const Factory Factory_LinearBasisFactory; /* Default constructor */ LinearBasisFactory::LinearBasisFactory (const UnsignedInteger inputDimension) : BasisFactory() , inputDimension_(inputDimension) { // Nothing to do } /* String converter */ String LinearBasisFactory::__repr__() const { return OSS() << "class=" << LinearBasisFactory::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ LinearBasisFactory* LinearBasisFactory::clone() const { return new LinearBasisFactory(*this); } Basis LinearBasisFactory::build() const { Basis basis; // constant term basis.add(LinearFunction (Point(inputDimension_, 0.0), Point(1, 1.0), Matrix(1, inputDimension_))); // linear term for ( UnsignedInteger i = 0; i < inputDimension_; ++ i ) { Matrix linear(1, inputDimension_); linear(0, i) = 1.0; basis.add(LinearFunction (Point(inputDimension_, 0.0), Point(1, 0.0), linear)); } return basis; } /* Method save() stores the object through the StorageManager */ void LinearBasisFactory::save(Advocate & adv) const { BasisFactory::save(adv); adv.saveAttribute("inputDimension_", inputDimension_); } /* Method load() reloads the object from the StorageManager */ void LinearBasisFactory::load(Advocate & adv) { BasisFactory::load(adv); adv.loadAttribute("inputDimension_", inputDimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearCombinationEvaluation.cxx000066400000000000000000000314151307543307100247020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearCombinationEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Function; CLASSNAMEINIT(LinearCombinationEvaluation); static const Factory Factory_LinearCombinationEvaluation; /* Default constructor */ LinearCombinationEvaluation::LinearCombinationEvaluation() : EvaluationImplementation() , functionsCollection_(0) , coefficients_(0) , isZero_(false) { // Nothing to do } /* Parameters constructor */ LinearCombinationEvaluation::LinearCombinationEvaluation(const FunctionCollection & functionsCollection, const Point & coefficients) : EvaluationImplementation() , functionsCollection_(0) , coefficients_(0) , isZero_(false) { setFunctionsCollectionAndCoefficients(functionsCollection, coefficients); } /* Virtual constructor */ LinearCombinationEvaluation * LinearCombinationEvaluation::clone() const { return new LinearCombinationEvaluation(*this); } /* String converter */ String LinearCombinationEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " functions=" << functionsCollection_ << " coefficients=" << coefficients_; } String LinearCombinationEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset; const UnsignedInteger size = functionsCollection_.getSize(); if (size > 1) oss << "("; for (UnsignedInteger i = 0; i < size; ++i) { const Bool isNegative = coefficients_[i] < 0.0; const Scalar absCoefficient = std::abs(coefficients_[i]); if (i > 0) oss << (isNegative ? " - " : " + "); else if (isNegative) oss << "-"; if (absCoefficient != 1.0) oss << absCoefficient << " * "; oss << "(" << functionsCollection_[i].getEvaluation()->__str__() << ")"; } if (size > 1) oss << ")"; if (size == 0) oss << "0.0"; return oss; } // Helper for the parallel version of the point-based evaluation operator struct LinearCombinationEvaluationPointFunctor { const Point & input_; const LinearCombinationEvaluation & evaluation_; Point accumulator_; LinearCombinationEvaluationPointFunctor(const Point & input, const LinearCombinationEvaluation & evaluation) : input_(input) , evaluation_(evaluation) , accumulator_(Point(evaluation.getOutputDimension())) {} LinearCombinationEvaluationPointFunctor(const LinearCombinationEvaluationPointFunctor & other, TBB::Split) : input_(other.input_) , evaluation_(other.evaluation_) , accumulator_(Point(other.accumulator_.getDimension())) {} inline void operator()( const TBB::BlockedRange & r ) { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) accumulator_ += evaluation_.coefficients_[i] * evaluation_.functionsCollection_[i](input_); } // operator() inline void join(const LinearCombinationEvaluationPointFunctor & other) { accumulator_ += other.accumulator_; } }; // struct LinearCombinationEvaluationPointFunctor /* Evaluation operator */ Point LinearCombinationEvaluation::operator () (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); if (isZero_) return Point(getOutputDimension()); const UnsignedInteger size = functionsCollection_.getSize(); LinearCombinationEvaluationPointFunctor functor( inP, *this ); TBB::ParallelReduce( 0, size, functor ); const Point result(functor.accumulator_); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } Sample LinearCombinationEvaluation::operator () (const Sample & inS) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); const UnsignedInteger sampleSize = inS.getSize(); Sample result(sampleSize, getOutputDimension()); result.setDescription(getOutputDescription()); if (sampleSize == 0) return result; if (!isZero_) { const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) // Exploit possible parallelism in the basis functions result += functionsCollection_[i](inS) * coefficients_[i]; callsNumber_ += sampleSize; } if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Coefficients accessor */ Point LinearCombinationEvaluation::getCoefficients() const { return coefficients_; } /* Functions accessor */ LinearCombinationEvaluation::FunctionCollection LinearCombinationEvaluation::getFunctionsCollection() const { return functionsCollection_; } void LinearCombinationEvaluation::setFunctionsCollectionAndCoefficients(const FunctionCollection & functionsCollection, const Point & coefficients) { const UnsignedInteger size = functionsCollection.getSize(); // Check for empty functions collection if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a linear combination from an empty collection of functions."; // Check for incompatible number of functions and coefficients if (size != coefficients.getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot build a linear combination with a different number of functions and coefficients."; // Check for coherent input and output dimensions of the functions UnsignedInteger inputDimension = functionsCollection[0].getInputDimension(); UnsignedInteger outputDimension = functionsCollection[0].getOutputDimension(); for (UnsignedInteger i = 1; i < size; ++i) { if (functionsCollection[i].getInputDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given functions have incompatible input dimension."; if (functionsCollection[i].getOutputDimension() != outputDimension) throw InvalidArgumentException(HERE) << "Error: the given functions have incompatible output dimension."; } // Keep only the non zero coefficients isZero_ = false; coefficients_ = Point(0); functionsCollection_ = FunctionCollection(0); const Scalar epsilon = ResourceMap::GetAsScalar("LinearCombinationEvaluation-SmallCoefficient"); for (UnsignedInteger i = 0; i < size; ++i) if (std::abs(coefficients[i]) > epsilon) { coefficients_.add(coefficients[i]); functionsCollection_.add(functionsCollection[i]); } else LOGWARN(OSS() << "removed the contributor " << i << "=" << functionsCollection[i] << " from the linear combination as its coefficient=" << coefficients[i] << " is too small."); if (functionsCollection_.getSize() == 0) { LOGINFO("Error: no significant contributors in the linear combination."); // Must keep at least one function and one coefficient for dimension accessors and consistency coefficients_.add(coefficients[0]); functionsCollection_.add(functionsCollection[0]); isZero_ = true; } setDescription(functionsCollection[0].getDescription()); } /* Input dimension accessor */ UnsignedInteger LinearCombinationEvaluation::getInputDimension() const { return functionsCollection_[0].getInputDimension(); } /* Output dimension accessor */ UnsignedInteger LinearCombinationEvaluation::getOutputDimension() const { return functionsCollection_[0].getOutputDimension(); } /* Gradient according to the marginal parameters */ Matrix LinearCombinationEvaluation::parameterGradient(const Point & inP) const { Matrix result(getParameter().getDimension(), getOutputDimension()); const UnsignedInteger size = functionsCollection_.getSize(); // Get the parameters gradients for each atom and stack them into the result UnsignedInteger rowIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { // Extract the atom gradient const Matrix atomParametersGradient(functionsCollection_[i].parameterGradient(inP)); const UnsignedInteger rowDimension = atomParametersGradient.getNbRows(); const UnsignedInteger columnDimension = atomParametersGradient.getNbColumns(); // Scale the atom gradient and copy it into the result const Scalar coefficient = coefficients_[i]; for (UnsignedInteger j = 0; j < rowDimension; ++j) { for (UnsignedInteger k = 0; k < columnDimension; ++k) { result(rowIndex, k) = coefficient * atomParametersGradient(j, k); } ++rowIndex; } } return result; } /* Parameters value accessor */ Point LinearCombinationEvaluation::getParameter() const { Point parameter(0); const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { parameter.add(functionsCollection_[i].getParameter()); } return parameter; } void LinearCombinationEvaluation::setParameter(const Point & parameter) { const UnsignedInteger size = functionsCollection_.getSize(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++ i) { Point marginalParameter(functionsCollection_[i].getParameter()); const UnsignedInteger marginalDimension = marginalParameter.getDimension(); for (UnsignedInteger j = 0; j < marginalDimension; ++ j) { marginalParameter[j] = parameter[index]; ++ index; } functionsCollection_[i].setParameter(marginalParameter); } } /* Parameters description accessor */ Description LinearCombinationEvaluation::getParameterDescription() const { Description description; const UnsignedInteger size = functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { description.add(functionsCollection_[i].getParameterDescription()); } return description; } /* Get the i-th marginal function */ LinearCombinationEvaluation::Implementation LinearCombinationEvaluation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; const UnsignedInteger size = functionsCollection_.getSize(); FunctionCollection marginalFunctions(size); for (UnsignedInteger j = 0; j < size; ++j) marginalFunctions[j] = functionsCollection_[j].getMarginal(i); return new LinearCombinationEvaluation(marginalFunctions, coefficients_); } /* Get the function corresponding to indices components */ LinearCombinationEvaluation::Implementation LinearCombinationEvaluation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal function must be in the range [0, dim-1] and must be different"; const UnsignedInteger size = functionsCollection_.getSize(); FunctionCollection marginalFunctions(size); for (UnsignedInteger i = 0; i < size; ++i) marginalFunctions[i] = functionsCollection_[i].getMarginal(indices); return new LinearCombinationEvaluation(marginalFunctions, coefficients_); } /* Method save() stores the object through the StorageManager */ void LinearCombinationEvaluation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "functionsCollection_", functionsCollection_ ); adv.saveAttribute( "coefficients_", coefficients_ ); } /* Method load() reloads the object from the StorageManager */ void LinearCombinationEvaluation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "functionsCollection_", functionsCollection_ ); adv.loadAttribute( "coefficients_", coefficients_ ); // For additional checks setFunctionsCollectionAndCoefficients(functionsCollection_, coefficients_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearCombinationFunction.cxx000066400000000000000000000040211307543307100243510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements linear combination of functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearCombinationFunction.hxx" #include "openturns/LinearCombinationEvaluation.hxx" #include "openturns/LinearCombinationGradient.hxx" #include "openturns/LinearCombinationHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearCombinationFunction); /* Default constructor */ LinearCombinationFunction::LinearCombinationFunction () : Function() { } /* Parameter constructor */ LinearCombinationFunction::LinearCombinationFunction (const FunctionCollection & functionCollection, const Point & coefficients) : Function() { const LinearCombinationEvaluation evaluation(functionCollection, coefficients); setEvaluation(evaluation.clone()); setGradient(new LinearCombinationGradient(evaluation)); setHessian(new LinearCombinationHessian(evaluation)); } /* Comparison operator */ Bool LinearCombinationFunction::operator ==(const LinearCombinationFunction & other) const { return true; } /* String converter */ String LinearCombinationFunction::__repr__() const { return getImplementation()->__repr__(); } String LinearCombinationFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearCombinationGradient.cxx000066400000000000000000000071131307543307100243260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearCombinationGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearCombinationGradient); static const Factory Factory_LinearCombinationGradient; /* Default constructor */ LinearCombinationGradient::LinearCombinationGradient() : GradientImplementation() , evaluation_() { // Nothing to do } /* Parameters constructor */ LinearCombinationGradient::LinearCombinationGradient(const LinearCombinationEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ LinearCombinationGradient * LinearCombinationGradient::clone() const { return new LinearCombinationGradient(*this); } /* Gradient method */ Matrix LinearCombinationGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); Matrix result(evaluation_.getInputDimension(), evaluation_.getOutputDimension()); for (UnsignedInteger i = 0; i < size; ++i) result = result + evaluation_.coefficients_[i] * evaluation_.functionsCollection_[i].gradient(inP); return result; } /* Accessor for input point dimension */ UnsignedInteger LinearCombinationGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger LinearCombinationGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String LinearCombinationGradient::__repr__() const { return OSS(true) << "class=" << GetClassName() << " evaluation=" << evaluation_; } String LinearCombinationGradient::__str__(const String & offset) const { OSS oss(false); oss << offset; const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) oss << (i > 0 ? "+" : "") << "(" << evaluation_.coefficients_[i] << ")*" << evaluation_.functionsCollection_[i].getGradient()->__str__(); return oss; } /* Method save() stores the object through the StorageManager */ void LinearCombinationGradient::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void LinearCombinationGradient::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearCombinationHessian.cxx000066400000000000000000000077211307543307100241700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearCombinationHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearCombinationHessian); static const Factory Factory_LinearCombinationHessian; /* Default constructor */ LinearCombinationHessian::LinearCombinationHessian() : HessianImplementation(), evaluation_() { // Nothing to do } /* Parameters constructor */ LinearCombinationHessian::LinearCombinationHessian(const LinearCombinationEvaluation & evaluation) : HessianImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ LinearCombinationHessian * LinearCombinationHessian::clone() const { return new LinearCombinationHessian(*this); } /* Hessian method */ SymmetricTensor LinearCombinationHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); const UnsignedInteger sheetSize = evaluation_.getOutputDimension(); SymmetricTensor result(evaluation_.getInputDimension(), sheetSize); // We work on a sheet basis because there is no tensor arithmetic for (UnsignedInteger i = 0; i < size; ++i) { const SymmetricTensor currentTensor(evaluation_.functionsCollection_[i].hessian(inP)); const Scalar factor = evaluation_.coefficients_[i]; for (UnsignedInteger k = 0; k < sheetSize; ++k) { SymmetricMatrix sheet(result.getSheet(k) + factor * currentTensor.getSheet(k)); result.setSheet(k, sheet); } } return result; } /* Accessor for input point dimension */ UnsignedInteger LinearCombinationHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger LinearCombinationHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* String converter */ String LinearCombinationHessian::__repr__() const { return OSS(true) << "class=" << GetClassName() << " evaluation=" << evaluation_; } String LinearCombinationHessian::__str__(const String & offset) const { OSS oss(false); oss << offset; const UnsignedInteger size = evaluation_.functionsCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) oss << (i > 0 ? "+" : "") << "(" << evaluation_.coefficients_[i] << ")*" << evaluation_.functionsCollection_[i].getGradient()->__str__(); return oss; } /* Method save() stores the object through the StorageManager */ void LinearCombinationHessian::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void LinearCombinationHessian::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearEnumerateFunction.cxx000066400000000000000000000150111307543307100240350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearEnumerateFunction.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearEnumerateFunction); static const Factory Factory_LinearEnumerateFunction; /* Default constructor */ LinearEnumerateFunction::LinearEnumerateFunction() : EnumerateFunctionImplementation() { // Nothing to do } /* Parameter constructor */ LinearEnumerateFunction::LinearEnumerateFunction(const UnsignedInteger dimension) : EnumerateFunctionImplementation(dimension) { // Nothing to do } /* Virtual constrcutor */ LinearEnumerateFunction * LinearEnumerateFunction::clone() const { return new LinearEnumerateFunction(*this); } /* String converter */ String LinearEnumerateFunction::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << getDimension(); } /* Find the smallest n such that Binomial(n, n + dimension) > index and also returns the value of Binomial(n - 1, n - 1 + dimension) */ UnsignedInteger LinearEnumerateFunction::findBinomialCoefficient(const UnsignedInteger index, const UnsignedInteger dimension, UnsignedInteger & binomialCoefficient) const { UnsignedInteger n = 0; binomialCoefficient = 1; // Use floating point arithmetic to avoid overflow Scalar newBinomialCoefficient = 1.0; // Special treatment to avoid roundoff error during conversion while(static_cast(round(newBinomialCoefficient)) <= index) { ++n; binomialCoefficient = static_cast(round(newBinomialCoefficient)); // Using integer arithmetic, the computation should have been implemented this way to avoid truncation: // newBinomialCoefficient = (newBinomialCoefficient * (n + dimension)) / n; // but for large n it should lead to an overflow. // Instead, we use floating point arithmetic newBinomialCoefficient *= 1.0 + static_cast(dimension) / static_cast(n); } return n; } /* The bijective association between an integer and a set of indices. First, we look for the total degree of the associated polynom. Then, we compute recursively the complement by looping over the degree of the remainder. For a given index I, we have: I = Binomial(n_1, d) + ... + Binomial(n_{d-1}, 1) where Binomial(n_1, d_1) is */ Indices LinearEnumerateFunction::operator() (const UnsignedInteger index) const { const UnsignedInteger dimension = getDimension(); Indices result(dimension, 0); if (index == 0) return result; UnsignedInteger binomialCoefficient = 0; UnsignedInteger degree = findBinomialCoefficient(index, dimension, binomialCoefficient); // Loop over the dimension of the remaining polynomial UnsignedInteger currentIndex = index; for (UnsignedInteger i = 0; i < dimension - 1; ++i) { // Early exit if the remaining polynomial is constant if (currentIndex <= binomialCoefficient) { result[i] = degree; return result; } currentIndex -= binomialCoefficient; const UnsignedInteger remainingDegree = findBinomialCoefficient(currentIndex, dimension - i - 1, binomialCoefficient); result[i] = degree - remainingDegree; degree = remainingDegree; } result[dimension - 1] = degree; return result; } /* The inverse of the association */ UnsignedInteger LinearEnumerateFunction::inverse(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = indices.getSize(); if (size != dimension) throw InvalidArgumentException(HERE) << "Error: the size of the given indices must match the dimension."; // Quick return for dimension == 1 case if (size == 1) return indices[0]; UnsignedInteger totalDegree = 0; for (UnsignedInteger i = 0; i < size; ++i) totalDegree += indices[i]; UnsignedInteger result = 0; // Loop over the marginal degrees for (UnsignedInteger i = 0; i < size; ++i) { // Early return if nothing is left if (totalDegree == 0) return result; result += LinearEnumerateFunction(dimension - i).getStrataCumulatedCardinal(totalDegree - 1); totalDegree -= indices[i]; } return result; } /* The cardinal of the given strata * = C(strataIndex, dimension - 1 + strataIndex) * = (dimension - 1 + strataIndex) ! / (dimension - 1)!.strataIndex!) */ UnsignedInteger LinearEnumerateFunction::getStrataCardinal(const UnsignedInteger strataIndex) const { const UnsignedInteger dimension = getDimension(); return static_cast(round(exp(SpecFunc::LnGamma(dimension + strataIndex) - SpecFunc::LnGamma(dimension) - SpecFunc::LnGamma(strataIndex + 1)))); } /* The cardinal of the cumulated strata less or equal to the given strata * = C(strataIndex, dimension + strataIndex) * = (dimension + strataIndex)! / (dimension!.strataIndex!) */ UnsignedInteger LinearEnumerateFunction::getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const { const UnsignedInteger dimension = getDimension(); return static_cast(round(exp(SpecFunc::LnGamma(dimension + strataIndex + 1) - SpecFunc::LnGamma(dimension + 1) - SpecFunc::LnGamma(strataIndex + 1)))); } /* The index of the strata of degree max < degree */ UnsignedInteger LinearEnumerateFunction::getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const { return maximumDegree; } /* Method save() stores the object through the StorageManager */ void LinearEnumerateFunction::save(Advocate & adv) const { EnumerateFunctionImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void LinearEnumerateFunction::load(Advocate & adv) { EnumerateFunctionImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearEvaluation.cxx000066400000000000000000000135611307543307100225210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a linear numerical math function implementation * of the form y = constant + where c is a * dim(x) numerical point, linear a dim(x) by dim(y) matrix * and means Transpose(linear).(x - c) * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearEvaluation); static const Factory Factory_LinearEvaluation; /* Default constructor */ LinearEvaluation::LinearEvaluation() : EvaluationImplementation() { // Nothing to do } /* Parameter constructor */ LinearEvaluation::LinearEvaluation(const Point & center, const Point & constant, const Matrix & linear) : EvaluationImplementation() , center_(center) , constant_(constant) , linear_(linear.transpose()) { /* Check if the dimension of the constant term is compatible with the linear term */ if (constant.getDimension() != linear.getNbColumns()) throw InvalidDimensionException(HERE) << "Constant term dimension is incompatible with the linear term"; /* Check if the dimension of the center term is compatible with the linear term */ if (center.getDimension() != linear.getNbRows()) throw InvalidDimensionException(HERE) << "Center term dimension is incompatible with the linear term"; setInputDescription(Description::BuildDefault(getInputDimension(), "x")); setOutputDescription(Description::BuildDefault(getOutputDimension(), "y")); } /* Virtual constructor */ LinearEvaluation * LinearEvaluation::clone() const { return new LinearEvaluation(*this); } /* Comparison operator */ Bool LinearEvaluation::operator ==(const LinearEvaluation & other) const { return ((linear_ == other.linear_) && (constant_ == other.constant_) && (center_ == other.center_)); } /* String converter */ String LinearEvaluation::__repr__() const { OSS oss(true); oss << "class=" << LinearEvaluation::GetClassName() << " name=" << getName() << " center=" << center_ << " constant=" << constant_ << " linear=" << linear_.transpose(); return oss; } String LinearEvaluation::__str__(const String & offset) const { OSS oss(false); oss << "class=" << LinearEvaluation::GetClassName() << " name=" << getName() << " center=" << center_ << " constant=" << constant_ << " linear=" << linear_.transpose(); return oss; } /* Accessor for the center */ Point LinearEvaluation::getCenter() const { return center_; } /* Accessor for the constant term */ Point LinearEvaluation::getConstant() const { return constant_; } /* Accessor for the linear term */ Matrix LinearEvaluation::getLinear() const { return linear_.transpose(); } /* Here is the interface that all derived class must implement */ /* Operator () */ Point LinearEvaluation::operator() (const Point & inP) const { if (inP.getDimension() != center_.getDimension()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; const Point result(constant_ + linear_ * (inP - center_)); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Operator () */ Sample LinearEvaluation::operator() (const Sample & inS) const { if (inS.getDimension() != center_.getDimension()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; const UnsignedInteger size = inS.getSize(); if (size == 0) return Sample(0, getOutputDimension()); SampleImplementation temporary(inS.getSize(), getOutputDimension()); // Some OT black magic // + We use the parallelized translation of the input sample inS - center_ // + We cast the resulting sample into a matrix // + We perform a matrix/matrix multiplication, using potentially // high-performance BLAS // + Then the resulting matrix is converted into a sample and the final // translation is parallelized temporary.setData(*(linear_ * Matrix(getInputDimension(), inS.getSize(), (inS - center_).getImplementation()->getData())).getImplementation()); const Sample result(temporary + constant_); callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger LinearEvaluation::getInputDimension() const { return center_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger LinearEvaluation::getOutputDimension() const { return constant_.getDimension(); } /* Method save() stores the object through the StorageManager */ void LinearEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "center_", center_ ); adv.saveAttribute( "constant_", constant_ ); adv.saveAttribute( "linear_", linear_ ); } /* Method load() reloads the object from the StorageManager */ void LinearEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "center_", center_ ); adv.loadAttribute( "constant_", constant_ ); adv.loadAttribute( "linear_", linear_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearFunction.cxx000066400000000000000000000042661307543307100222010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all linear functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearFunction.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearFunction); /* Default constructor */ LinearFunction::LinearFunction(const Point & center, const Point & constant, const Matrix & linear) : Function(new LinearEvaluation(center, constant, linear.transpose()), new ConstantGradient(linear.transpose()), new ConstantHessian(SymmetricTensor(center.getDimension(), constant.getDimension()))) { // Nothing to do } /* Comparison operator */ Bool LinearFunction::operator ==(const LinearFunction & other) const { if (this == &other) return true; return *getImplementation() == *other.getImplementation(); } /* String converter */ String LinearFunction::__repr__() const { OSS oss(true); oss << "class=" << LinearFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } String LinearFunction::__str__(const String & offset) const { OSS oss(false); oss << "class=" << LinearFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__str__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/LinearGradient.cxx000066400000000000000000000117371307543307100221520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a quadratic numerical math gradient implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearGradient); static const Factory Factory_LinearGradient; /* Default constructor */ LinearGradient::LinearGradient() : GradientImplementation() { // Nothing to do } /* Parameter constructor */ LinearGradient::LinearGradient(const Point & center, const Matrix & constant, const SymmetricTensor & linear) : GradientImplementation() , center_(center) , constant_(constant) , linear_(linear) { /* Check if the dimensions of the constant term is compatible with the linear term */ if ((constant.getNbRows() != linear.getNbRows()) || (constant.getNbColumns() != linear.getNbSheets())) throw InvalidDimensionException(HERE) << "Constant term dimensions are incompatible with the linear term"; /* Check if the dimensions of the center term is compatible with the linear term */ if ((center.getDimension() != constant.getNbRows()) || (center.getDimension() != linear.getNbRows())) throw InvalidDimensionException(HERE) << "Center term dimensions are incompatible with the constant term or the linear term"; } /* Virtual constructor */ LinearGradient * LinearGradient::clone() const { return new LinearGradient(*this); } /* Comparison operator */ Bool LinearGradient::operator ==(const LinearGradient & other) const { return ((linear_ == other.linear_) && (constant_ == other.constant_) && (center_ == other.center_)); } /* String converter */ String LinearGradient::__repr__() const { OSS oss(true); oss << "class=" << LinearGradient::GetClassName() << " name=" << getName() << " center=" << center_.__repr__() << " constant=" << constant_.__repr__() << " linear=" << linear_; return oss; } String LinearGradient::__str__(const String & offset) const { OSS oss(false); oss << offset << LinearGradient::GetClassName() << Os::GetEndOfLine() << offset << " center :" << Os::GetEndOfLine() << center_.__str__(offset + " ") << Os::GetEndOfLine() << offset << " constant :" << Os::GetEndOfLine() << constant_.__str__(offset + " ") << Os::GetEndOfLine() << offset << " linear :" << Os::GetEndOfLine() << linear_.__str__(offset + " ") << Os::GetEndOfLine(); return oss; } /* Accessor for the center */ Point LinearGradient::getCenter() const { return center_; } /* Accessor for the constant term */ Matrix LinearGradient::getConstant() const { return constant_; } /* Accessor for the linear term */ SymmetricTensor LinearGradient::getLinear() const { return linear_; } /* Here is the interface that all derived class must implement */ /* Gradient() */ Matrix LinearGradient::gradient(const Point & inP) const { if (inP.getDimension() != constant_.getNbRows()) throw InvalidArgumentException(HERE) << "Invalid input dimension"; Matrix value(constant_); // Add the linear term for(UnsignedInteger i = 0; i < linear_.getNbRows(); ++i) { for(UnsignedInteger j = 0; j < linear_.getNbColumns(); ++j) { for(UnsignedInteger k = 0; k < linear_.getNbSheets(); ++k) { value(i, k) += (inP[j] - center_[j]) * linear_(i, j, k); } } } ++callsNumber_; return value; } /* Accessor for input point dimension */ UnsignedInteger LinearGradient::getInputDimension() const { return center_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger LinearGradient::getOutputDimension() const { return constant_.getNbColumns(); } /* Method save() stores the object through the StorageManager */ void LinearGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "center_", center_ ); adv.saveAttribute( "constant_", constant_ ); adv.saveAttribute( "linear_", linear_ ); } /* Method load() reloads the object from the StorageManager */ void LinearGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "center_", center_ ); adv.loadAttribute( "constant_", constant_ ); adv.loadAttribute( "linear_", linear_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/MonomialFunction.cxx000066400000000000000000000056141307543307100225400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monomial function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MonomialFunction.hxx" #include "openturns/OSS.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MonomialFunction); static const Factory Factory_MonomialFunction; /* Default constructor */ MonomialFunction::MonomialFunction() : UniVariateFunctionImplementation() , degree_(0) { // Nothing to do } /** Standard constructor */ MonomialFunction::MonomialFunction(const UnsignedInteger degree) : UniVariateFunctionImplementation() , degree_(degree) { // Nothing to do } /* Virtual constructor */ MonomialFunction * MonomialFunction::clone() const { return new MonomialFunction(*this); } /* String converter */ String MonomialFunction::__repr__() const { return OSS(true) << "class=" << getClassName() << " degree=" << degree_; } String MonomialFunction::__str__(const String & offset) const { // Pretty print if (degree_ == 0) return OSS(true) << "[x] -> 1" ; else if (degree_ == 1) { return OSS(true) << "[x] --> x" ; } return OSS(true) << "[x] --> x^" << degree_ ; } /* MonomialFunction are evaluated as functors */ Scalar MonomialFunction::operator() (const Scalar x) const { // Evaluate x ^n return std::pow(x, 1.0 * degree_); } /* MonomialFunction gradient */ Scalar MonomialFunction::gradient(const Scalar x) const { // Evaluate gradien = n * x ^{n-1} if (degree_ == 0) return 0.0; return degree_ * std::pow(x, 1.0 * degree_ - 1.0); } /* MonomialFunction hessian */ Scalar MonomialFunction::hessian(const Scalar x) const { if (degree_ < 2) return 0.0; return degree_ * (degree_ - 1) * std::pow(x, 1.0 * degree_ - 2.0); } /* Method save() stores the object through the StorageManager */ void MonomialFunction::save(Advocate & adv) const { UniVariateFunctionImplementation::save(adv); adv.saveAttribute( "degree_", degree_ ); } /* Method load() reloads the object from the StorageManager */ void MonomialFunction::load(Advocate & adv) { UniVariateFunctionImplementation::load(adv); adv.loadAttribute( "degree_", degree_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/MonomialFunctionFactory.cxx000066400000000000000000000043151307543307100240650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This a class for 1D monomial function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MonomialFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MonomialFunctionFactory); static const Factory Factory_MonomialFunctionFactory; /* Default constructor */ MonomialFunctionFactory::MonomialFunctionFactory() : UniVariateFunctionFactory() { // Nothing to do. } /* Virtual constructor */ MonomialFunctionFactory * MonomialFunctionFactory::clone() const { return new MonomialFunctionFactory(*this); } /* String converter */ String MonomialFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName(); } /* The method to get the function of any order as MonomialFunction*/ MonomialFunction MonomialFunctionFactory::buildAsMonomialFunction(const UnsignedInteger order) const { return MonomialFunction(order); } /* The method to get the function of any order */ UniVariateFunction MonomialFunctionFactory::build(const UnsignedInteger order) const { return buildAsMonomialFunction(order).clone(); } /* Method save() stores the object through the StorageManager */ void MonomialFunctionFactory::save(Advocate & adv) const { UniVariateFunctionFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void MonomialFunctionFactory::load(Advocate & adv) { UniVariateFunctionFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/NoEvaluation.cxx000066400000000000000000000047071307543307100216650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for unavailable evaluation implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NoEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NoEvaluation); static const Factory Factory_NoEvaluation; /* Default constructor */ NoEvaluation::NoEvaluation() : EvaluationImplementation() { // Nothing to do } /* Virtual constructor */ NoEvaluation * NoEvaluation::clone() const { return new NoEvaluation(*this); } /* Comparison operator */ Bool NoEvaluation::operator ==(const NoEvaluation & other) const { return true; } /* String converter */ String NoEvaluation::__repr__() const { OSS oss; oss << "class=" << NoEvaluation::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool NoEvaluation::isActualImplementation() const { return false; } /* Here is the interface that all derived class must implement */ /* Operator () */ Point NoEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; const Point result; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger NoEvaluation::getInputDimension() const { return 0; } /* Accessor for output point dimension */ UnsignedInteger NoEvaluation::getOutputDimension() const { return 0; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/NoGradient.cxx000066400000000000000000000045101307543307100213030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math gradient implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NoGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NoGradient); static const Factory Factory_NoGradient; /* Default constructor */ NoGradient::NoGradient() : GradientImplementation() { // Nothing to do } /* Virtual constructor */ NoGradient * NoGradient::clone() const { return new NoGradient(*this); } /* Comparison operator */ Bool NoGradient::operator ==(const NoGradient & other) const { return true; } /* String converter */ String NoGradient::__repr__() const { OSS oss; oss << "class=" << NoGradient::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool NoGradient::isActualImplementation() const { return false; } /* Here is the interface that all derived class must implement */ /* Gradient method */ Matrix NoGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; return Matrix(); } /* Accessor for input point dimension */ UnsignedInteger NoGradient::getInputDimension() const { return 0; } /* Accessor for output point dimension */ UnsignedInteger NoGradient::getOutputDimension() const { return 0; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/NoHessian.cxx000066400000000000000000000045071307543307100211460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math hessian implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NoHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NoHessian); static const Factory Factory_NoHessian; /* Default constructor */ NoHessian::NoHessian() : HessianImplementation() { // Nothing to do } /* Virtual constructor */ NoHessian * NoHessian::clone() const { return new NoHessian(*this); } /* Comparison operator */ Bool NoHessian::operator ==(const NoHessian & other) const { return true; } /* String converter */ String NoHessian::__repr__() const { OSS oss; oss << "class=" << NoHessian::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool NoHessian::isActualImplementation() const { return false; } /* Here is the interface that all derived class must implement */ /* Hessian method */ SymmetricTensor NoHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; return SymmetricTensor(); } /* Accessor for input point dimension */ UnsignedInteger NoHessian::getInputDimension() const { return 0; } /* Accessor for output point dimension */ UnsignedInteger NoHessian::getOutputDimension() const { return 0; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/P1LagrangeEvaluation.cxx000066400000000000000000000166431307543307100232340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief P1 Lagrange piecewise linear function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(P1LagrangeEvaluation); static const Factory Factory_P1LagrangeEvaluation; /* Default constructor */ P1LagrangeEvaluation::P1LagrangeEvaluation() : EvaluationImplementation() { // Nothing to do } /* Default constructor */ P1LagrangeEvaluation::P1LagrangeEvaluation(const Field & field) : EvaluationImplementation() { setField(field); } /* Virtual constructor */ P1LagrangeEvaluation * P1LagrangeEvaluation::clone() const { return new P1LagrangeEvaluation(*this); } /* Comparison operator */ Bool P1LagrangeEvaluation::operator ==(const P1LagrangeEvaluation & other) const { if (this == &other) return true; return (mesh_ == other.mesh_) && (values_ == other.values_); } /* String converter */ String P1LagrangeEvaluation::__repr__() const { OSS oss(true); oss << "class=" << P1LagrangeEvaluation::GetClassName() << " name=" << getName() << " mesh=" << mesh_ << " values=" << values_; return oss; } String P1LagrangeEvaluation::__str__( const String & offset ) const { OSS oss(false); oss << P1LagrangeEvaluation::GetClassName() << Os::GetEndOfLine() << offset << "field :" << Os::GetEndOfLine() << getField().__str__(offset); return oss; } /* Field accessor */ void P1LagrangeEvaluation::setField(const Field & field) { values_ = field.getValues(); // To check for pending vertices setMesh(field.getMesh()); } Field P1LagrangeEvaluation::getField() const { return Field(mesh_, values_); } /* Mesh accessor */ void P1LagrangeEvaluation::setMesh(const Mesh & mesh) { if (mesh.getVerticesNumber() != values_.getSize()) throw InvalidArgumentException(HERE) << "Error: expected a mesh with =" << values_.getSize() << " vertices, got " << mesh_.getVerticesNumber() << " vertices"; mesh_ = mesh; // Check for pending vertices Mesh::IndicesCollection verticesToSimplices(mesh_.getVerticesToSimplicesMap()); Indices pendingVertices(0); for (UnsignedInteger i = 0; i < verticesToSimplices.getSize(); ++i) if (verticesToSimplices[i].getSize() == 0) pendingVertices.add(i); if (pendingVertices.getSize() > 0) { LOGWARN(OSS() << "There are " << pendingVertices.getSize() << " pending vertices. Check the simplices of the mesh"); LOGDEBUG(OSS() << "The pending vertices indices are " << pendingVertices); } } Mesh P1LagrangeEvaluation::getMesh() const { return mesh_; } /* Vertices accessor */ void P1LagrangeEvaluation::setVertices(const Sample & vertices) { mesh_.setVertices(vertices); } Sample P1LagrangeEvaluation::getVertices() const { return mesh_.getVertices(); } /* Simplices accessor */ void P1LagrangeEvaluation::setSimplices(const IndicesCollection & simplices) { mesh_.setSimplices(simplices); } P1LagrangeEvaluation::IndicesCollection P1LagrangeEvaluation::getSimplices() const { return mesh_.getSimplices(); } /* Values accessor */ void P1LagrangeEvaluation::setValues(const Sample & values) { if (values.getSize() != mesh_.getVerticesNumber()) throw InvalidArgumentException(HERE) << "Error: expected a sample of size=" << mesh_.getVerticesNumber() << ", got size=" << values.getSize(); values_ = values; } Sample P1LagrangeEvaluation::getValues() const { return values_; } /* Here is the interface that all derived class must implement */ /* Operator () */ Point P1LagrangeEvaluation::operator()( const Point & inP ) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); Point result; CacheKeyType inKey(inP.getCollection()); if ( isCacheEnabled() && p_cache_->hasKey(inKey) ) { result = Point::ImplementationType( p_cache_->find(inKey) ); } else { result = evaluate(inP); } ++ callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Evaluation method */ Point P1LagrangeEvaluation::evaluate( const Point & inP ) const { Point coordinates(0); const Indices vertexAndSimplexIndices(mesh_.getNearestVertexAndSimplexIndicesWithCoordinates(inP, coordinates)); // Here, perform the P1 interpolation // First get the index of the nearest vertex const UnsignedInteger nearestIndex = vertexAndSimplexIndices[0]; // As a first guess, take the value at the nearest index. It will be the final value if no simplex contains the point Point result(values_[nearestIndex]); if (coordinates.getSize() > 0) { const Indices simplex(mesh_.getSimplex(vertexAndSimplexIndices[1])); result = values_[simplex[0]] * coordinates[0]; for (UnsignedInteger j = 1; j < simplex.getSize(); ++j) result += values_[simplex[j]] * coordinates[j]; } return result; } Sample P1LagrangeEvaluation::operator()( const Sample & inS ) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); const UnsignedInteger size = inS.getSize(); Sample result(size, values_.getDimension()); if (size == 0) return result; if (inS == mesh_.getVertices()) result = values_; else { const P1LagrangeEvaluationComputeSamplePolicy policy( inS, result, *this ); TBB::ParallelFor( 0, size, policy ); } // The input sample is different from callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger P1LagrangeEvaluation::getInputDimension() const { return mesh_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger P1LagrangeEvaluation::getOutputDimension() const { return values_.getDimension(); } /* Method save() stores the object through the StorageManager */ void P1LagrangeEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("mesh_", mesh_); adv.saveAttribute("values_", values_); } /* Method load() reloads the object from the StorageManager */ void P1LagrangeEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("mesh_", mesh_); adv.loadAttribute("values_", values_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ParametricEvaluation.cxx000066400000000000000000000305601307543307100233740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricEvaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ParametricEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ParametricEvaluation); static const Factory Factory_ParametricEvaluation; /* Default constructor */ ParametricEvaluation::ParametricEvaluation() : EvaluationImplementation() , function_() , parametersPositions_(0) , inputPositions_(0) { // Nothing to do } /* Parameter constructor */ ParametricEvaluation::ParametricEvaluation(const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet) : EvaluationImplementation() , function_(function) , parametersPositions_(0) , inputPositions_(0) { const UnsignedInteger inputDimension = function.getInputDimension(); const UnsignedInteger setDimension = set.getSize(); // Check if the given parameters positions are compatible with the input dimension of the function if (inputDimension < setDimension) throw InvalidArgumentException(HERE) << "Error: the size of the " << (parametersSet ? "parameters" : "input") << " positions=" << setDimension << " is greater than the input dimension=" << inputDimension << " of the function."; // Check if the given indices are valid if (!set.check(inputDimension)) throw InvalidArgumentException(HERE) << "Error: the given set of positions contain either duplicate positions or positions greater than the input dimension of the function."; // Deduce the input position from the input dimension of the function and the parameters positions // Warning! the parameters positions can be in any order Indices fullIndices(inputDimension); Indices otherSet(0); fullIndices.fill(); // Flag by inputDimension all the positions already used by the parameters for (UnsignedInteger i = 0; i < setDimension; ++i) fullIndices[set[i]] = inputDimension; // Then gather all the available indices for (UnsignedInteger i = 0; i < inputDimension; ++i) if (fullIndices[i] != inputDimension) otherSet.add(i); if (parametersSet) { parametersPositions_ = set; inputPositions_ = otherSet; } else { parametersPositions_ = otherSet; inputPositions_ = set; } const UnsignedInteger parametersSize = parametersPositions_.getSize(); // Check if the given reference point has a dimension compatible with the function if (referencePoint.getDimension() != parametersSize) throw InvalidArgumentException(HERE) << "Error: the given reference point dimension=" << referencePoint.getDimension() << " does not match the parameters size=" << parametersSize; // Set the relevant part of the reference point in the parameters const Description functionInputDescription(function.getInputDescription()); Description parameterDescription(parametersSize); for (UnsignedInteger i = 0; i < parametersSize; ++ i) { parameterDescription[i] = functionInputDescription[parametersPositions_[i]]; } parameter_ = referencePoint; parameterDescription_ = parameterDescription; // And finally the input/output descriptions Description inputDescription(0); for (UnsignedInteger i = 0; i < inputPositions_.getSize(); ++i) inputDescription.add(functionInputDescription[inputPositions_[i]]); setInputDescription(inputDescription); setOutputDescription(function_.getOutputDescription()); } /* Parameter constructor */ ParametricEvaluation::ParametricEvaluation(const ParametricEvaluation & evaluation, const Indices & set, const Point & referencePoint) : EvaluationImplementation() , function_() , parametersPositions_(0) , inputPositions_(0) { // Here we reuse the antecedent parameters // The function is kept unchanged function_ = evaluation.function_; // The parameters position will be enlarged parametersPositions_ = evaluation.parametersPositions_; // The parameters values too parameter_ = evaluation.getParameter(); // And their description Description parametersDescription(parameter_.getDescription()); const Description inputDescription(evaluation.getInputDescription()); // The input positions will be reduced Indices antecedentInputPosition(evaluation.inputPositions_); const UnsignedInteger inputDimension = evaluation.getInputDimension(); const UnsignedInteger size = set.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger index = set[i]; // Mark the given index as a parameter index parametersPositions_.add(antecedentInputPosition[index]); // And flag it to be removed from the input indices antecedentInputPosition[index] = inputDimension; // Add the parameter value to the parameters parameter_.add(referencePoint[i]); // Add the description to the parameters description parametersDescription.add(inputDescription[antecedentInputPosition[index]]); } parameter_.setDescription(parametersDescription); // And finally the input/output descriptions Description newInputDescription(0); for (UnsignedInteger i = 0; i < inputPositions_.getSize(); ++i) newInputDescription.add(inputDescription[inputPositions_[i]]); setInputDescription(inputDescription); setOutputDescription(function_.getOutputDescription()); } /* Virtual constructor method */ ParametricEvaluation * ParametricEvaluation::clone() const { return new ParametricEvaluation(*this); } /* Evaluation operator */ Point ParametricEvaluation::operator() (const Point & point) const { const UnsignedInteger inputDimension = function_.getInputDimension(); const UnsignedInteger pointDimension = point.getDimension(); const UnsignedInteger parametersDimension = getParameterDimension(); if (pointDimension + parametersDimension != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension - parametersDimension << ", got dimension=" << pointDimension; Point x(inputDimension); for (UnsignedInteger i = 0; i < parametersDimension; ++i) x[parametersPositions_[i]] = parameter_[i]; for (UnsignedInteger i = 0; i < pointDimension; ++i) x[inputPositions_[i]] = point[i]; const Point value(function_(x)); if (isHistoryEnabled_) { inputStrategy_.store(x); outputStrategy_.store(value); } ++callsNumber_; return value; } /* Operator () */ Sample ParametricEvaluation::operator() (const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); const UnsignedInteger inputDimension = function_.getInputDimension(); const UnsignedInteger sampleDimension = inSample.getDimension(); const UnsignedInteger parametersDimension = getParameterDimension(); if (sampleDimension + parametersDimension != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a sample of dimension=" << inputDimension - parametersDimension << ", got dimension=" << sampleDimension; Sample input(size, inputDimension); for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < parametersDimension; ++j) input[i][parametersPositions_[j]] = parameter_[j]; for (UnsignedInteger j = 0; j < sampleDimension; ++j) input[i][inputPositions_[j]] = inSample[i][j]; } const Sample output(function_(input)); if (isHistoryEnabled_) { inputStrategy_.store(input); outputStrategy_.store(output); } callsNumber_ += size; return output; } Sample ParametricEvaluation::operator() (const Point & point, const Sample & parameters) { const UnsignedInteger size = parameters.getSize(); const UnsignedInteger inputDimension = function_.getInputDimension(); const UnsignedInteger pointDimension = inputPositions_.getSize(); const UnsignedInteger parametersDimension = getParameterDimension(); if (point.getDimension() != pointDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << pointDimension << ", got dimension" << point.getDimension(); if (parameters.getDimension() != parametersDimension) throw InvalidArgumentException(HERE) << "Error: expected parameters of dimension=" << parametersDimension << ", got dimension=" << parameters.getDimension(); Sample input(size, inputDimension); for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < parametersDimension; ++j) input[i][parametersPositions_[j]] = parameters[i][j]; for (UnsignedInteger j = 0; j < pointDimension; ++j) input[i][inputPositions_[j]] = point[j]; } const Sample output(function_(input)); if (isHistoryEnabled_) { inputStrategy_.store(input); outputStrategy_.store(output); } callsNumber_ += size; return output; } /* Parameters accessor */ void ParametricEvaluation::setParameter(const Point & parameters) { const UnsignedInteger parametersDimension = parameters.getDimension(); if (parametersDimension != parametersPositions_.getSize()) throw InvalidArgumentException(HERE) << "Error: expected a parameters of dimension=" << parametersPositions_.getSize() << ", got dimension=" << parametersDimension; for (UnsignedInteger i = 0; i < parametersDimension; ++i) parameter_[i] = parameters[i]; } /* Parameters positions accessor */ Indices ParametricEvaluation::getParametersPositions() const { return parametersPositions_; } /* Input positions accessor */ Indices ParametricEvaluation::getInputPositions() const { return inputPositions_; } /* Function accessor */ Function ParametricEvaluation::getFunction() const { return function_; } /* Dimension accessor */ UnsignedInteger ParametricEvaluation::getInputDimension() const { return inputPositions_.getSize(); } UnsignedInteger ParametricEvaluation::getParameterDimension() const { return parametersPositions_.getSize(); } UnsignedInteger ParametricEvaluation::getOutputDimension() const { return function_.getOutputDimension(); } /* Input point / parameter history accessor */ Sample ParametricEvaluation::getInputPointHistory() const { Sample sample(inputStrategy_.getSample()); return sample.getSize() > 0 ? sample.getMarginal(inputPositions_) : Sample(0, getInputDimension()); } Sample ParametricEvaluation::getInputParameterHistory() const { Sample sample(inputStrategy_.getSample()); return sample.getSize() > 0 ? sample.getMarginal(parametersPositions_) : Sample(0, getParameterDimension()); } /* String converter */ String ParametricEvaluation::__repr__() const { PointWithDescription parameters(parameter_); parameters.setDescription(parameterDescription_); OSS oss; oss << "class=" << ParametricEvaluation::GetClassName() << " function=" << function_ << " parameters positions=" << parametersPositions_ << " parameters=" << parameters << " input positions=" << inputPositions_; return oss; } String ParametricEvaluation::__str__(const String & offset) const { PointWithDescription parameters(parameter_); parameters.setDescription(parameterDescription_); OSS oss(false); oss << offset << ParametricEvaluation::GetClassName() << "(" << function_ << ", parameters positions=" << parametersPositions_ << ", parameters=" << parameters << ", input positions=" << inputPositions_ << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void ParametricEvaluation::save(Advocate & adv) const { EvaluationImplementation::save( adv ); adv.saveAttribute( "function_", function_ ); adv.saveAttribute( "parametersPositions_", parametersPositions_ ); adv.saveAttribute( "inputPositions_", inputPositions_ ); } /* Method load() reloads the object from the StorageManager */ void ParametricEvaluation::load(Advocate & adv) { EvaluationImplementation::load( adv ); adv.loadAttribute( "function_", function_ ); adv.loadAttribute( "parametersPositions_", parametersPositions_ ); adv.loadAttribute( "inputPositions_", inputPositions_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ParametricFunction.cxx000066400000000000000000000041271307543307100230520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements parametric functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ParametricFunction.hxx" #include "openturns/ParametricEvaluation.hxx" #include "openturns/ParametricGradient.hxx" #include "openturns/ParametricHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ParametricFunction); /* Default constructor */ ParametricFunction::ParametricFunction () : Function() { } /* Parameter constructor */ ParametricFunction::ParametricFunction (const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet) : Function() { const Pointer p_evaluation = new ParametricEvaluation(function, set, referencePoint, parametersSet); setEvaluation(p_evaluation); setGradient(new ParametricGradient(p_evaluation)); setHessian(new ParametricHessian(p_evaluation)); } /* Comparison operator */ Bool ParametricFunction::operator ==(const ParametricFunction & other) const { return true; } /* String converter */ String ParametricFunction::__repr__() const { return getImplementation()->__repr__(); } String ParametricFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ParametricGradient.cxx000066400000000000000000000112041307543307100230140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricGradient * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ParametricGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ParametricGradient); static const Factory Factory_ParametricGradient; /* Default constructor */ ParametricGradient::ParametricGradient() : GradientImplementation() , p_evaluation_() { // Nothing to do } /* Parameter constructor */ ParametricGradient::ParametricGradient(const EvaluationPointer & p_evaluation) : GradientImplementation() , p_evaluation_(p_evaluation) { // Nothing to do } /* Virtual constructor method */ ParametricGradient * ParametricGradient::clone() const { return new ParametricGradient(*this); } /* Gradient operator */ Matrix ParametricGradient::gradient(const Point & point, const Point & parameters) const { const UnsignedInteger parametersDimension = parameters.getDimension(); if (parametersDimension != p_evaluation_->getParametersPositions().getSize()) throw InvalidArgumentException(HERE) << "Error: expected a parameters of dimension=" << p_evaluation_->getParametersPositions().getSize() << ", got dimension=" << parametersDimension; const UnsignedInteger inputDimension = p_evaluation_->getFunction().getInputDimension(); const UnsignedInteger pointDimension = point.getDimension(); if (pointDimension + parametersDimension != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension - parametersDimension << ", got dimension=" << pointDimension; Point x(inputDimension); for (UnsignedInteger i = 0; i < parametersDimension; ++i) x[p_evaluation_->parametersPositions_[i]] = parameters[i]; for (UnsignedInteger i = 0; i < pointDimension; ++i) x[p_evaluation_->inputPositions_[i]] = point[i]; const UnsignedInteger outputDimension = getOutputDimension(); const Matrix fullGradient(p_evaluation_->getFunction().gradient(x)); // The gradient wrt x corresponds to the inputPositions rows of the full gradient Matrix result(pointDimension, outputDimension); for (UnsignedInteger i = 0; i < pointDimension; ++i) { const UnsignedInteger i0 = p_evaluation_->inputPositions_[i]; for (UnsignedInteger j = 0; j < outputDimension; ++j) result(i, j) = fullGradient(i0, j); } return result; } /* Gradient operator */ Matrix ParametricGradient::gradient(const OT::Point & point) const { // Use the current parameters value return gradient(point, p_evaluation_->getParameter()); } /* Evaluation accessor */ ParametricEvaluation ParametricGradient::getEvaluation() const { return *p_evaluation_; } /* Dimension accessors */ UnsignedInteger ParametricGradient::getInputDimension() const { return p_evaluation_->getInputDimension(); } UnsignedInteger ParametricGradient::getParameterDimension() const { return p_evaluation_->getParameterDimension(); } UnsignedInteger ParametricGradient::getOutputDimension() const { return p_evaluation_->getOutputDimension(); } /* String converter */ String ParametricGradient::__repr__() const { OSS oss; oss << "class=" << ParametricGradient::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } String ParametricGradient::__str__(const String & offset) const { OSS oss; oss << offset << ParametricGradient::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void ParametricGradient::save(Advocate & adv) const { GradientImplementation::save( adv ); adv.saveAttribute( "evaluation_", *p_evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void ParametricGradient::load(Advocate & adv) { GradientImplementation::load( adv ); TypedInterfaceObject evaluation; adv.loadAttribute( "evaluation_", evaluation ); p_evaluation_ = evaluation.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ParametricHessian.cxx000066400000000000000000000114051307543307100226540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricHessian * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ParametricHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ParametricHessian); static const Factory Factory_ParametricHessian; /* Default constructor */ ParametricHessian::ParametricHessian() : HessianImplementation() , p_evaluation_() { // Nothing to do } /* Parameter constructor */ ParametricHessian::ParametricHessian(const EvaluationPointer & p_evaluation) : HessianImplementation() , p_evaluation_(p_evaluation) { // Nothing to do } /* Virtual constructor method */ ParametricHessian * ParametricHessian::clone() const { return new ParametricHessian(*this); } /* Hessian operator */ SymmetricTensor ParametricHessian::hessian(const Point & point, const Point & parameters) const { const UnsignedInteger parametersDimension = parameters.getDimension(); if (parametersDimension != p_evaluation_->getParametersPositions().getSize()) throw InvalidArgumentException(HERE) << "Error: expected a parameters of dimension=" << p_evaluation_->getParametersPositions().getSize() << ", got dimension=" << parametersDimension; const UnsignedInteger inputDimension = p_evaluation_->function_.getInputDimension(); const UnsignedInteger pointDimension = point.getDimension(); if (pointDimension + parametersDimension != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension - parametersDimension << ", got dimension=" << pointDimension; Point x(inputDimension); for (UnsignedInteger i = 0; i < parametersDimension; ++i) x[p_evaluation_->parametersPositions_[i]] = parameters[i]; for (UnsignedInteger i = 0; i < pointDimension; ++i) x[p_evaluation_->inputPositions_[i]] = point[i]; const UnsignedInteger outputDimension = getOutputDimension(); const SymmetricTensor fullHessian(p_evaluation_->function_.hessian(x)); // The gradient wrt x corresponds to the inputPositions rows of the full gradient SymmetricTensor result(pointDimension, outputDimension); for (UnsignedInteger i = 0; i < pointDimension; ++i) { const UnsignedInteger i0 = p_evaluation_->inputPositions_[i]; for (UnsignedInteger j = 0; j < pointDimension; ++j) { const UnsignedInteger j0 = p_evaluation_->inputPositions_[j]; { for (UnsignedInteger k = 0; k < outputDimension; ++k) result(i, j, k) = fullHessian(i0, j0, k); } } } return result; } /* Hessian operator */ SymmetricTensor ParametricHessian::hessian(const OT::Point & point) const { // Use the current parameters value return hessian(point, p_evaluation_->getParameter()); } /* Evaluation accessors */ ParametricEvaluation ParametricHessian::getEvaluation() const { return *p_evaluation_; } /* Dimension accessors */ UnsignedInteger ParametricHessian::getInputDimension() const { return p_evaluation_->getInputDimension(); } UnsignedInteger ParametricHessian::getParameterDimension() const { return p_evaluation_->getParameterDimension(); } UnsignedInteger ParametricHessian::getOutputDimension() const { return p_evaluation_->getOutputDimension(); } /* String converter */ String ParametricHessian::__repr__() const { OSS oss; oss << "class=" << ParametricHessian::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } String ParametricHessian::__str__(const String & offset) const { OSS oss; oss << offset << ParametricHessian::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void ParametricHessian::save(Advocate & adv) const { HessianImplementation::save( adv ); adv.saveAttribute( "evaluation_", *p_evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void ParametricHessian::load(Advocate & adv) { HessianImplementation::load( adv ); TypedInterfaceObject evaluation; adv.loadAttribute( "evaluation_", evaluation ); p_evaluation_ = evaluation.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/PiecewiseHermiteEvaluation.cxx000066400000000000000000000267431307543307100245500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of a hermite piecewise scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PiecewiseHermiteEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PiecewiseHermiteEvaluation); static const Factory Factory_PiecewiseHermiteEvaluation; /* Default constructor */ PiecewiseHermiteEvaluation::PiecewiseHermiteEvaluation() : EvaluationImplementation() , locations_(1) , values_(1, 1) , derivatives_(1, 1) { // Nothing to do } /* Parameters constructor */ PiecewiseHermiteEvaluation::PiecewiseHermiteEvaluation(const Point & locations, const Point & values, const Point & derivatives) : EvaluationImplementation() , locations_(0) , values_(0, 0) , derivatives_(0, 0) { const UnsignedInteger sizeValues = values.getSize(); Sample sampleValues(sizeValues, 1); for (UnsignedInteger i = 0; i < sizeValues; ++i) sampleValues[i][0] = values[i]; const UnsignedInteger sizeDerivatives = derivatives.getSize(); Sample sampleDerivatives(sizeDerivatives, 1); for (UnsignedInteger i = 0; i < sizeDerivatives; ++i) sampleDerivatives[i][0] = derivatives[i]; // Check the input setLocationsValuesAndDerivatives(locations, sampleValues, sampleDerivatives); } /* Parameters constructor */ PiecewiseHermiteEvaluation::PiecewiseHermiteEvaluation(const Point & locations, const Sample & values, const Sample & derivatives) : EvaluationImplementation() , locations_(0) , values_(0, 0) , derivatives_(0, 0) { // Check the input setLocationsValuesAndDerivatives(locations, values, derivatives); } /* Virtual constructor */ PiecewiseHermiteEvaluation * PiecewiseHermiteEvaluation::clone() const { return new PiecewiseHermiteEvaluation(*this); } /* String converter */ String PiecewiseHermiteEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " locations=" << locations_ << " values=" << values_ << " derivatives=" << derivatives_; } String PiecewiseHermiteEvaluation::__str__(const String & offset) const { return OSS(false) << GetClassName() << "(" << "locations=" << locations_ << ", values=" << values_ << ", derivatives=" << derivatives_ << ")"; } /* Evaluation operator */ Point PiecewiseHermiteEvaluation::operator () (const Point & inP) const { if (inP.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected an input point of dimension 1, got dimension=" << inP.getDimension(); const Scalar x = inP[0]; UnsignedInteger iLeft = 0; if (x <= locations_[iLeft]) return values_[iLeft]; UnsignedInteger iRight = locations_.getSize() - 1; if (x >= locations_[iRight]) return values_[iRight]; if (isRegular_) { iLeft = static_cast(floor((x - locations_[0]) / (locations_[1] - locations_[0]))); iRight = iLeft + 1; } else // Find the segment containing x by bisection while (iRight - iLeft > 1) { const UnsignedInteger im = (iRight + iLeft) / 2; if (x < locations_[im]) iRight = im; else iLeft = im; } const Scalar h = locations_[iRight] - locations_[iLeft]; const Scalar theta = (x - locations_[iLeft]) / h; const Point vLeft(values_[iLeft]); const Point vRight(values_[iRight]); const Point dvLeft(derivatives_[iLeft]); const Point dvRight(derivatives_[iRight]); const UnsignedInteger dimension = getOutputDimension(); Point value(dimension); const Scalar alpha = 1.0 - theta; const Scalar beta = theta * alpha; const Scalar gamma = 2.0 * theta - 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) value[i] = alpha * vLeft[i] + theta * vRight[i] + beta * (gamma * (vRight[i] - vLeft[i]) + h * (alpha * dvLeft[i] - theta * dvRight[i])); return value; } /* Compute the derivative */ Point PiecewiseHermiteEvaluation::derivate(const Point & inP) const { if (inP.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected an input point of dimension 1, got dimension=" << inP.getDimension(); const Scalar x = inP[0]; UnsignedInteger iLeft = 0; if (x <= locations_[iLeft]) return values_[iLeft]; UnsignedInteger iRight = locations_.getSize() - 1; if (x >= locations_[iRight]) return values_[iRight]; if (isRegular_) { iLeft = static_cast(trunc((x - locations_[0]) / (locations_[1] - locations_[0]))); iRight = iLeft + 1; } else // Find the segment containing x by bisection while (iRight - iLeft > 1) { const UnsignedInteger im = (iRight + iLeft) / 2; if (x < locations_[im]) iRight = im; else iLeft = im; } const Scalar h = locations_[iRight] - locations_[iLeft]; const Scalar theta = (x - locations_[iLeft]) / h; const Point vLeft(values_[iLeft]); const Point vRight(values_[iRight]); const Point dvLeft(derivatives_[iLeft]); const Point dvRight(derivatives_[iRight]); const UnsignedInteger dimension = getOutputDimension(); Point value(dimension); const Scalar alpha = 1.0 - theta; const Scalar beta = theta * alpha; const Scalar gamma = 2.0 * theta - 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) value[i] = (-vLeft[i] + vRight[i] + alpha * (gamma * (vRight[i] - vLeft[i]) + h * (alpha * dvLeft[i] - theta * dvRight[i])) + beta * (2.0 * (vRight[i] - vLeft[i]) + h * (- dvLeft[i] - dvRight[i]))) / h; return value; } /* Locations accessor */ Point PiecewiseHermiteEvaluation::getLocations() const { return locations_; } void PiecewiseHermiteEvaluation::setLocations(const Point & locations) { const UnsignedInteger size = locations.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise Hermite interpolation function."; if (locations.getSize() != values_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of locations=" << size << " must match the number of previously set values=" << values_.getSize(); const Scalar step = locations_[0] - locations_[0]; const Scalar epsilon = ResourceMap::GetAsScalar("PiecewiseHermiteEvaluation-EpsilonRegular") * std::abs(step); isRegular_ = true; for (UnsignedInteger i = 0; i < size; ++i) isRegular_ = isRegular_ && (std::abs(locations[i] - locations[0] - i * step) < epsilon); locations_ = locations; std::stable_sort(locations_.begin(), locations_.end()); } /* Values accessor */ Sample PiecewiseHermiteEvaluation::getValues() const { return values_; } void PiecewiseHermiteEvaluation::setValues(const Sample & values) { const UnsignedInteger size = values.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise Hermite interpolation function."; if (size != locations_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of values=" << size << " must match the number of previously set locations=" << locations_.getSize(); values_ = values; } /* Derivatives accessor */ Sample PiecewiseHermiteEvaluation::getDerivatives() const { return derivatives_; } void PiecewiseHermiteEvaluation::setDerivatives(const Sample & derivatives) { const UnsignedInteger size = derivatives.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise Hermite interpolation function."; if (size != locations_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of derivatives=" << size << " must match the number of previously set locations=" << locations_.getSize(); derivatives_ = derivatives; } void PiecewiseHermiteEvaluation::setLocationsValuesAndDerivatives(const Point & locations, const Sample & values, const Sample & derivatives) { const UnsignedInteger size = locations.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise Hermite interpolation function."; if (size != values.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of values=" << values.getSize() << " must match the number of locations=" << size; if (size != derivatives.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of derivatives=" << derivatives.getSize() << " must match the number of locations=" << size; const UnsignedInteger outputDimension = values.getDimension(); if (outputDimension != derivatives.getDimension()) throw InvalidArgumentException(HERE) << "Error: the dimension of the derivatives=" << derivatives.getDimension() << " must match the dimension of the locations=" << outputDimension; // Sort the data in increasing order according to the locations Sample data(size, 1 + 2 * outputDimension); for (UnsignedInteger i = 0; i < size; ++i) { data[i][0] = locations[i]; for (UnsignedInteger j = 0; j < outputDimension; ++j) data[i][1 + j] = values[i][j]; for (UnsignedInteger j = 0; j < outputDimension; ++j) data[i][1 + outputDimension + j] = derivatives[i][j]; } data = data.sortAccordingToAComponent(0); locations_ = Point(size); values_ = Sample(size, outputDimension); derivatives_ = Sample(size, outputDimension); const Scalar step = data[1][0] - data[0][0]; const Scalar epsilon = ResourceMap::GetAsScalar("PiecewiseHermiteEvaluation-EpsilonRegular") * std::abs(step); isRegular_ = true; for (UnsignedInteger i = 0; i < size; ++i) { locations_[i] = data[i][0]; isRegular_ = isRegular_ && (std::abs(locations_[i] - locations_[0] - i * step) < epsilon); for (UnsignedInteger j = 0; j < outputDimension; ++j) values_[i][j] = data[i][1 + j]; for (UnsignedInteger j = 0; j < outputDimension; ++j) derivatives_[i][j] = data[i][1 + outputDimension + j]; } } /* Input dimension accessor */ UnsignedInteger PiecewiseHermiteEvaluation::getInputDimension() const { return 1; } /* Output dimension accessor */ UnsignedInteger PiecewiseHermiteEvaluation::getOutputDimension() const { return values_.getDimension(); } /* Method save() stores the object through the StorageManager */ void PiecewiseHermiteEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "locations_", locations_ ); adv.saveAttribute( "values_", values_ ); adv.saveAttribute( "derivatives_", derivatives_ ); adv.saveAttribute( "isRegular_", isRegular_ ); } /* Method load() reloads the object from the StorageManager */ void PiecewiseHermiteEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "locations_", locations_ ); adv.loadAttribute( "values_", values_ ); adv.loadAttribute( "derivatives_", derivatives_ ); adv.loadAttribute( "isRegular_", isRegular_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/PiecewiseLinearEvaluation.cxx000066400000000000000000000203411307543307100243510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of a linear piecewise scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PiecewiseLinearEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PiecewiseLinearEvaluation); static const Factory Factory_PiecewiseLinearEvaluation; /* Default constructor */ PiecewiseLinearEvaluation::PiecewiseLinearEvaluation() : EvaluationImplementation() , locations_(0) , values_(0, 0) { // Nothing to do } /* Parameters constructor */ PiecewiseLinearEvaluation::PiecewiseLinearEvaluation(const Point & locations, const Point & values) : EvaluationImplementation() , locations_(0) , values_(0, 0) { // Convert the values into a sample const UnsignedInteger size = values.getSize(); Sample sampleValues(size, 1); for (UnsignedInteger i = 0; i < size; ++i) sampleValues[i][0] = values[i]; // Check the input setLocationsAndValues(locations, sampleValues); } /* Parameters constructor */ PiecewiseLinearEvaluation::PiecewiseLinearEvaluation(const Point & locations, const Sample & values) : EvaluationImplementation() , locations_(0) , values_(0, values.getDimension()) { setLocationsAndValues(locations, values); } /* Virtual constructor */ PiecewiseLinearEvaluation * PiecewiseLinearEvaluation::clone() const { return new PiecewiseLinearEvaluation(*this); } /* String converter */ String PiecewiseLinearEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " locations=" << locations_ << " values=" << values_; } String PiecewiseLinearEvaluation::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Evaluation operator */ Point PiecewiseLinearEvaluation::operator () (const Point & inP) const { if (inP.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected an input point of dimension 1, got dimension=" << inP.getDimension(); const Scalar x = inP[0]; UnsignedInteger iLeft = 0; if (x <= locations_[iLeft]) return values_[iLeft]; UnsignedInteger iRight = locations_.getSize() - 1; if (x >= locations_[iRight]) return values_[iRight]; if (isRegular_) { iLeft = static_cast(floor((x - locations_[0]) / (locations_[1] - locations_[0]))); iRight = iLeft + 1; } else // Find the segment containing x by bisection while (iRight - iLeft > 1) { const UnsignedInteger im = (iRight + iLeft) / 2; if (x < locations_[im]) iRight = im; else iLeft = im; } const Scalar xLeft = locations_[iLeft]; const Scalar xRight = locations_[iRight]; const Scalar dx = xLeft - xRight; const Point vLeft(values_[iLeft]); const Point vRight(values_[iRight]); const UnsignedInteger dimension = getOutputDimension(); Point value(dimension); const Scalar alpha = (x - xRight) / dx; const Scalar beta = (xLeft - x) / dx; for (UnsignedInteger i = 0; i < dimension; ++i) value[i] = alpha * vLeft[i] + beta * vRight[i]; return value; } /* Locations accessor */ Point PiecewiseLinearEvaluation::getLocations() const { return locations_; } void PiecewiseLinearEvaluation::setLocations(const Point & locations) { const UnsignedInteger size = locations.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise linear interpolation function."; if (locations.getSize() != values_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of locations=" << size << " must match the number of previously set values=" << values_.getSize(); Collection< std::pair > locationsAndValues(size); for (UnsignedInteger i = 0; i < size; ++i) locationsAndValues[i] = std::pair(locations[i], values_[i]); std::stable_sort(locationsAndValues.begin(), locationsAndValues.end()); locations_ = Point(size); for (UnsignedInteger i = 0; i < size; ++i) { locations_[i] = locationsAndValues[i].first; values_[i] = locationsAndValues[i].second; } const Scalar step = locations_[1] - locations_[0]; const Scalar epsilon = ResourceMap::GetAsScalar("PiecewiseLinearEvaluation-EpsilonRegular") * std::abs(step); isRegular_ = true; for (UnsignedInteger i = 0; i < size; ++i) isRegular_ = isRegular_ && (std::abs(locations_[i] - locations_[0] - i * step) < epsilon); } /* Values accessor */ Sample PiecewiseLinearEvaluation::getValues() const { return values_; } void PiecewiseLinearEvaluation::setValues(const Point & values) { const UnsignedInteger size = values.getSize(); if (size != locations_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of values=" << size << " must match the number of previously set locations=" << locations_.getSize(); Sample sampleValues(size, 1); for (UnsignedInteger i = 0; i < size; ++i) sampleValues[i][0] = values[i]; values_ = sampleValues; } void PiecewiseLinearEvaluation::setValues(const Sample & values) { const UnsignedInteger size = values.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least 2 points to build a piecewise linear interpolation function."; if (size != locations_.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of values=" << size << " must match the number of previously set locations=" << locations_.getSize(); values_ = values; } void PiecewiseLinearEvaluation::setLocationsAndValues(const Point & locations, const Sample & values) { const UnsignedInteger size = locations.getSize(); if (size != values.getSize()) throw InvalidArgumentException(HERE) << "Error: the number of values=" << values.getSize() << " must match the number of locations=" << size; // Sort the data in increasing order according to the locations const UnsignedInteger dimension = values.getDimension(); Sample data(size, 1 + dimension); for (UnsignedInteger i = 0; i < size; ++i) { data[i][0] = locations[i]; for (UnsignedInteger j = 0; j < dimension; ++j) data[i][j + 1] = values[i][j]; } data = data.sortAccordingToAComponent(0); locations_ = Point(size); values_ = Sample(size, dimension); const Scalar step = data[1][0] - data[0][0]; const Scalar epsilon = ResourceMap::GetAsScalar("PiecewiseLinearEvaluation-EpsilonRegular") * std::abs(step); isRegular_ = true; for (UnsignedInteger i = 0; i < size; ++i) { locations_[i] = data[i][0]; isRegular_ = isRegular_ && (std::abs(locations_[i] - locations_[0] - i * step) < epsilon); for (UnsignedInteger j = 0; j < dimension; ++j) values_[i][j] = data[i][j + 1]; } } /* Input dimension accessor */ UnsignedInteger PiecewiseLinearEvaluation::getInputDimension() const { return 1; } /* Output dimension accessor */ UnsignedInteger PiecewiseLinearEvaluation::getOutputDimension() const { return values_.getDimension(); } /* Method save() stores the object through the StorageManager */ void PiecewiseLinearEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "locations_", locations_ ); adv.saveAttribute( "values_", values_ ); } /* Method load() reloads the object from the StorageManager */ void PiecewiseLinearEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "locations_", locations_ ); adv.loadAttribute( "values_", values_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductEvaluation.cxx000066400000000000000000000142111307543307100227200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * * \author $LastChangedBy: lebrun $ * \date $LastChangedDate: 2008-07-03 08:31:34 +0200 (jeu, 03 jui 2008) $ */ #include "openturns/ProductEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductEvaluation); static const Factory Factory_ProductEvaluation; /* Default constructor */ ProductEvaluation::ProductEvaluation(const EvaluationPointer & p_leftEvaluation, const EvaluationPointer & p_rightEvaluation) : EvaluationImplementation() , p_leftEvaluation_(p_leftEvaluation) , p_rightEvaluation_(p_rightEvaluation) { // Check if the dimensions of the left and right functions are compatible if (p_leftEvaluation->getOutputDimension() != 1) { if (p_rightEvaluation->getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the output dimension of at least one of the functions must be 1 in a product."; LOGWARN("We exchanged the functions in order to have the left one with output dimension equals to 1"); p_leftEvaluation_ = p_rightEvaluation; p_rightEvaluation_ = p_leftEvaluation; } if (p_leftEvaluation_->getInputDimension() != p_rightEvaluation_->getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the two functions must have the same input dimension."; setDescription(p_rightEvaluation_->getDescription()); } /* Virtual constructor */ ProductEvaluation * ProductEvaluation::clone() const { return new ProductEvaluation(*this); } /* Comparison operator */ Bool ProductEvaluation::operator ==(const ProductEvaluation & other) const { return true; } /* String converter */ String ProductEvaluation::__repr__() const { OSS oss(true); oss << "class=" << ProductEvaluation::GetClassName() << " name=" << getName() << " leftEvaluation=" << p_leftEvaluation_->__repr__() << " rightEvaluation=" << p_rightEvaluation_->__repr__(); return oss; } String ProductEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset; if (hasVisibleName()) oss << getName() << " :"; if (getOutputDimension() > 1) oss << "\n"; oss << "(" << p_leftEvaluation_->__str__(offset) << ") * (" << "(" << p_rightEvaluation_->__str__(offset) << ")"; return oss; } /* Operator () */ Point ProductEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); const Point left(p_leftEvaluation_->operator()(inP)); const Point right(p_rightEvaluation_->operator()(inP)); const Point result(left[0] * right); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Operator () */ Sample ProductEvaluation::operator() (const Sample & inSample) const { const UnsignedInteger inputDimension = getInputDimension(); if (inSample.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); callsNumber_ += size; const Sample leftSample(p_leftEvaluation_->operator()(inSample)); Sample rightSample(p_rightEvaluation_->operator()(inSample)); for (UnsignedInteger i = 0; i < size; ++i) rightSample[i] *= leftSample[i][0]; rightSample.setDescription(getOutputDescription()); return rightSample; } /* Parameters value accessor */ Point ProductEvaluation::getParameter() const { Point parameter(p_rightEvaluation_->getParameter()); parameter.add(p_leftEvaluation_->getParameter()); return parameter; } void ProductEvaluation::setParameter(const Point & parameter) { Point rightParameter(p_rightEvaluation_->getParameter()); const UnsignedInteger rightDimension = rightParameter.getDimension(); PointWithDescription leftParameter(p_leftEvaluation_->getParameter()); const UnsignedInteger leftDimension = leftParameter.getDimension(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < rightDimension; ++ i) { rightParameter[i] = parameter[index]; ++ index; } p_rightEvaluation_->setParameter(rightParameter); for (UnsignedInteger i = 0; i < leftDimension; ++ i) { leftParameter[i] = parameter[index]; ++ index; } p_leftEvaluation_->setParameter(leftParameter); } /* Parameters description accessor */ Description ProductEvaluation::getParameterDescription() const { Description description(p_rightEvaluation_->getParameterDescription()); description.add(p_leftEvaluation_->getParameterDescription()); return description; } /* Accessor for input point dimension */ UnsignedInteger ProductEvaluation::getInputDimension() const { return p_rightEvaluation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ProductEvaluation::getOutputDimension() const { return p_rightEvaluation_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ProductEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "leftEvaluation_", *p_leftEvaluation_ ); adv.saveAttribute( "rightEvaluation_", *p_rightEvaluation_ ); } /* Method load() reloads the object from the StorageManager */ void ProductEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.saveAttribute( "leftEvaluation_", *p_leftEvaluation_ ); adv.saveAttribute( "rightEvaluation_", *p_rightEvaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductFunction.cxx000066400000000000000000000130151307543307100223770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for product functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductFunction.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" #include "openturns/ProductEvaluation.hxx" #include "openturns/ProductGradient.hxx" #include "openturns/ProductHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductFunction); static const Factory Factory_ProductFunction; /* Composition constructor */ ProductFunction::ProductFunction(const Implementation & p_left, const Implementation & p_right) : FunctionImplementation(new ProductEvaluation(p_left->getEvaluation(), p_right->getEvaluation()), new NoGradient(), new NoHessian()), p_leftFunction_(p_left), p_rightFunction_(p_right) { // try{ GradientPointer p_gradientImplementation(new ProductGradient(p_leftFunction_->getEvaluation(), p_leftFunction_->getGradient(), p_rightFunction_->getEvaluation(), p_rightFunction_->getGradient())); setGradient(p_gradientImplementation); // } // catch(InvalidArgumentException &) { // Nothing to do // } // try{ HessianPointer p_hessianImplementation(new ProductHessian(p_left->getEvaluation(), p_left->getGradient(), p_left->getHessian(), p_right->getEvaluation(), p_right->getGradient(), p_right->getHessian())); setHessian(p_hessianImplementation); // } // catch(InvalidArgumentException & ex) { // Nothing to do // } } /* Virtual constructor */ ProductFunction * ProductFunction::clone() const { return new ProductFunction(*this); } /* Comparison operator */ Bool ProductFunction::operator ==(const ProductFunction & other) const { return true; } /* String converter */ String ProductFunction::__repr__() const { OSS oss(true); oss << "class=" << ProductFunction::GetClassName() << " name=" << getName() << " description=" << getDescription() << " left function=" << p_leftFunction_->__repr__() << " right function=" << p_rightFunction_->__repr__(); return oss; } String ProductFunction::__str__(const String & offset) const { OSS oss(false); oss << "class=" << ProductFunction::GetClassName() << " name=" << getName() << " description=" << getDescription() << " left function=" << p_leftFunction_->__str__() << " right function=" << p_rightFunction_->__str__(); return oss; } /* * Gradient according to the marginal parameters * H(x, p) = F(x, pf) . G(x, pg) * dH/dp = dF/dp(x, pf) . G(x, pg) + F(x, pf) . dG/dp(x, pg) * with * p = [pf, pg], dF/dp = [dF/dpf, 0], dG/dp = [0, dG/dpg] * thus * dH/dp = [dF/dpf(x, pf) . G(x, pg), dG/dpg(x, pg) . F(x, pf)] * and the needed gradient is (dH/dp)^t */ Matrix ProductFunction::parameterGradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); // Values of the functions Scalar leftValue = p_leftFunction_->operator()(inP)[0]; Scalar rightValue = p_rightFunction_->operator()(inP)[0]; // Parameters gradient of the functions scaled by the value of there product term Matrix upper(p_leftFunction_->parameterGradient(inP) * leftValue); Matrix lower(p_rightFunction_->parameterGradient(inP) * rightValue); // Fill-in the result UnsignedInteger leftParametersDimension = upper.getNbRows(); UnsignedInteger rightParametersDimension = lower.getNbRows(); Matrix grad(rightParametersDimension + leftParametersDimension, 1); UnsignedInteger rowIndex = 0; // Gradient according to left parameters for (UnsignedInteger i = 0; i < leftParametersDimension; ++i) { grad(rowIndex, 0) = upper(i, 0); ++ rowIndex; } // Gradient accroding to right parameters for (UnsignedInteger i = 0; i < leftParametersDimension; ++i) { grad(rowIndex, 0) = lower(i, 0); ++ rowIndex; } return grad; } /* Method save() stores the object through the StorageManager */ void ProductFunction::save(Advocate & adv) const { FunctionImplementation::save(adv); adv.saveAttribute( "leftFunction_", *p_leftFunction_ ); adv.saveAttribute( "rightFunction_", *p_rightFunction_ ); } /* Method load() reloads the object from the StorageManager */ void ProductFunction::load(Advocate & adv) { TypedInterfaceObject functionValue; FunctionImplementation::load(adv); adv.loadAttribute( "leftFunction_", functionValue ); p_leftFunction_ = functionValue.getImplementation(); adv.loadAttribute( "rightFunction_", functionValue ); p_rightFunction_ = functionValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductGradient.cxx000066400000000000000000000127641307543307100223610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for the gradient of product functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductGradient); static const Factory Factory_ProductGradient; /* Default constructor */ ProductGradient::ProductGradient(const EvaluationPointer & p_leftEvaluation, const GradientPointer & p_leftGradient, const EvaluationPointer & p_rightEvaluation, const GradientPointer & p_rightGradient) : GradientImplementation(), p_leftEvaluation_(p_leftEvaluation), p_leftGradient_(p_leftGradient), p_rightEvaluation_(p_rightEvaluation), p_rightGradient_(p_rightGradient) { // Check the compatibility of the evaluations if (p_leftEvaluation_->getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the left function must have an output dimension equal to 1."; if (p_leftEvaluation_->getInputDimension() != p_rightEvaluation_->getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the two functions must have the same input dimension."; // Check the compatibility of the gradients if ((p_leftGradient_->getInputDimension() != p_rightGradient_->getInputDimension()) || (p_leftGradient_->getInputDimension() != p_leftEvaluation_->getInputDimension()) || (p_leftGradient_->getOutputDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the gradients have incompatible dimensions."; } /* Virtual constructor */ ProductGradient * ProductGradient::clone() const { return new ProductGradient(*this); } /* Comparison operator */ Bool ProductGradient::operator ==(const ProductGradient & other) const { return true; } /* String converter */ String ProductGradient::__repr__() const { OSS oss; oss << "class=" << ProductGradient::GetClassName() << " name=" << getName() << " leftEvaluation=" << p_leftEvaluation_->__repr__() << " leftGradient=" << p_leftGradient_->__repr__() << " rightEvaluation=" << p_rightEvaluation_->__repr__() << " rightGradient=" << p_rightGradient_->__repr__(); return oss; } /* Method gradient() returns the Jacobian transposed matrix of the function at point * h = f . g with f from R^n to R, g from R^n to R^p and then h from R^n to R^p * J(f) \in M_{1, n}, J(g) \in M_{p, n}, J(h) \in M_{p, n} * grad(f) \in M_{n, 1}, grad(g) \in M_{n, p}, grad(h) \in M_{n, p} * grad(h)_{i,j} = d(fg)_j / dx_i = f . dg_j / dx_i + df / dx_i . g_j * grad(h) = f . grad(g) + grad(f) . g^t */ Matrix ProductGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; const Scalar leftValue = p_leftEvaluation_->operator()(inP)[0]; const Point rightValue(p_rightEvaluation_->operator()(inP)); const Matrix leftGradient(p_leftGradient_->gradient(inP)); const Matrix rightGradient(p_rightGradient_->gradient(inP)); return leftValue * rightGradient + leftGradient * Matrix(1, getOutputDimension(), rightValue); } /* Accessor for input point dimension */ UnsignedInteger ProductGradient::getInputDimension() const { return p_rightEvaluation_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ProductGradient::getOutputDimension() const { return p_rightEvaluation_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ProductGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "leftEvaluation_", *p_leftEvaluation_ ); adv.saveAttribute( "leftGradient_", *p_leftGradient_ ); adv.saveAttribute( "rightEvaluation_", *p_rightEvaluation_ ); adv.saveAttribute( "rightGradient_", *p_rightGradient_ ); } /* Method load() reloads the object from the StorageManager */ void ProductGradient::load(Advocate & adv) { TypedInterfaceObject evaluationValue; TypedInterfaceObject gradientValue; GradientImplementation::load(adv); adv.loadAttribute( "leftEvaluation_", evaluationValue ); p_leftEvaluation_ = evaluationValue.getImplementation(); adv.loadAttribute( "leftGradient_", gradientValue ); p_leftGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "rightEvaluation_", evaluationValue ); p_rightEvaluation_ = evaluationValue.getImplementation(); adv.loadAttribute( "rightGradient_", gradientValue ); p_rightGradient_ = gradientValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductHessian.cxx000066400000000000000000000171061307543307100222110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math hessians * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductHessian); static const Factory Factory_ProductHessian; /* Default constructor */ ProductHessian::ProductHessian(const EvaluationPointer & p_leftEvaluation, const GradientPointer & p_leftGradient, const HessianPointer & p_leftHessian, const EvaluationPointer & p_rightEvaluation, const GradientPointer & p_rightGradient, const HessianPointer & p_rightHessian) : HessianImplementation(), p_leftEvaluation_(p_leftEvaluation), p_leftGradient_(p_leftGradient), p_leftHessian_(p_leftHessian), p_rightEvaluation_(p_rightEvaluation), p_rightGradient_(p_rightGradient), p_rightHessian_(p_rightHessian) { // Check the compatibility of the evaluations if (p_leftEvaluation_->getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the left function must have an output dimension equal to 1."; if (p_leftEvaluation_->getInputDimension() != p_rightEvaluation_->getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the two functions must have the same input dimension."; // Check the compatibility of the gradients if ((p_leftGradient_->getInputDimension() != p_rightGradient_->getInputDimension()) || (p_leftGradient_->getInputDimension() != p_leftEvaluation_->getInputDimension()) || (p_leftGradient_->getOutputDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the gradients have incompatible dimensions."; // Check the compatibility of the hessians if ((p_leftHessian_->getInputDimension() != p_rightHessian_->getInputDimension()) || (p_leftHessian_->getInputDimension() != p_leftEvaluation_->getInputDimension()) || (p_leftHessian_->getOutputDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the hessians have incompatible dimensions."; } /* Virtual constructor */ ProductHessian * ProductHessian::clone() const { return new ProductHessian(*this); } /* Comparison operator */ Bool ProductHessian::operator ==(const ProductHessian & other) const { return true; } /* String converter */ String ProductHessian::__repr__() const { OSS oss; oss << "class=" << ProductHessian::GetClassName() << " name=" << getName() << " leftEvaluation=" << p_leftEvaluation_->__repr__() << " leftGradient=" << p_leftGradient_->__repr__() << " leftHessian=" << p_leftHessian_->__repr__() << " rightEvaluation=" << p_rightEvaluation_->__repr__() << " rightGradient=" << p_rightGradient_->__repr__() << " rightHessian=" << p_rightHessian_->__repr__(); return oss; } /* Method hessian() returns the symmetric tensor of the second gradient of the function at point * h = f . g with f from R^n to R, g from R^n to R^p and then h from R^n to R^p * J(f) \in M_{1, n}, J(g) \in M_{p, n}, J(h) \in M_{p, n} * grad(f) \in M_{n, 1}, grad(g) \in M_{n, p}, grad(h) \in M_{n, p} * grad(h)_{i,j} = d(fg)_j / dx_i = f . dg_j / dx_i + df / dx_i . g_j * grad(h) = f . grad(g) + grad(f) . g^t * H(f) \in T_{1, n, n}, H(g) \in T_{p, n, n}, H(h) \in T_{p, n, n} * hessian(h)_{i,j,k} = d^2(fg)_k / (dx_i . dx_j) = f . d^2g_k / (dx_i . dx_j) + df / dx_j . dg_k / dx_i + d^2f / (dx_i . dx_j) + df / dx_i . dg_k / dx_j */ SymmetricTensor ProductHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); ++callsNumber_; const Point leftValue(p_leftEvaluation_->operator()(inP)); const Point rightValue(p_rightEvaluation_->operator()(inP)); const Matrix leftGradient(p_leftGradient_->gradient(inP)); const Matrix rightGradient(p_rightGradient_->gradient(inP)); const SymmetricTensor leftHessian(p_leftHessian_->hessian(inP)); const SymmetricTensor rightHessian(p_rightHessian_->hessian(inP)); const UnsignedInteger sheetDimension = getOutputDimension(); SymmetricTensor result(inputDimension, sheetDimension); for (UnsignedInteger k = 0; k < sheetDimension; ++k) { const SymmetricMatrix leftHessianSheet(leftHessian.getSheet(0)); const SymmetricMatrix rightHessianSheet(rightHessian.getSheet(k)); const Scalar rightValueScalar = rightValue[k]; const Scalar leftValueScalar = leftValue[0]; const SymmetricMatrix term1(leftHessianSheet * rightValueScalar); const SymmetricMatrix term2(rightHessianSheet * leftValueScalar); const Matrix term3(leftGradient * rightGradient.transpose().getRow(k)); const Matrix term4(rightGradient.getColumn(k) * leftGradient.transpose()); const SymmetricMatrix sheet((term1 + term2 + term3 + term4).getImplementation()); for (UnsignedInteger i = 0; i < inputDimension; ++i) for (UnsignedInteger j = i; j < inputDimension; ++j) result(i, j, k) = sheet(i, j); } return result; } /* Accessor for input point dimension */ UnsignedInteger ProductHessian::getInputDimension() const { return p_rightHessian_->getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger ProductHessian::getOutputDimension() const { return p_rightHessian_->getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void ProductHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "leftGradient_", *p_leftGradient_ ); adv.saveAttribute( "leftHessian_", *p_leftHessian_ ); adv.saveAttribute( "rightEvaluation_", *p_rightEvaluation_ ); adv.saveAttribute( "rightGradient_", *p_rightGradient_ ); adv.saveAttribute( "rightHessian_", *p_rightHessian_ ); } /* Method load() reloads the object from the StorageManager */ void ProductHessian::load(Advocate & adv) { TypedInterfaceObject evaluationValue; TypedInterfaceObject gradientValue; TypedInterfaceObject hessianValue; HessianImplementation::load(adv); adv.loadAttribute( "leftGradient_", gradientValue ); p_leftGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "leftHessian_", hessianValue ); p_leftHessian_ = hessianValue.getImplementation(); adv.loadAttribute( "rightEvaluation_", evaluationValue ); p_rightEvaluation_ = evaluationValue.getImplementation(); adv.loadAttribute( "rightGradient_", gradientValue ); p_rightGradient_ = gradientValue.getImplementation(); adv.loadAttribute( "rightHessian_", hessianValue ); p_rightHessian_ = hessianValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductPolynomialEvaluation.cxx000066400000000000000000000160451307543307100247730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductPolynomialEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_UniVariatePolynomial; CLASSNAMEINIT(ProductPolynomialEvaluation); static const Factory Factory_ProductPolynomialEvaluation; /* Default constructor */ ProductPolynomialEvaluation::ProductPolynomialEvaluation() : EvaluationImplementation() , polynomials_() { // Nothing to do } /* Constructor */ ProductPolynomialEvaluation::ProductPolynomialEvaluation(const PolynomialCollection & coll) : EvaluationImplementation() , polynomials_(coll) { // Set the descriptions setInputDescription(Description::BuildDefault(getInputDimension(), "x")); setOutputDescription(Description::BuildDefault(getOutputDimension(), "y")); } /* Virtual constructor */ ProductPolynomialEvaluation * ProductPolynomialEvaluation::clone() const { return new ProductPolynomialEvaluation(*this); } /* String converter */ String ProductPolynomialEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << ", polynomials=" << polynomials_; } String ProductPolynomialEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset; const UnsignedInteger size = polynomials_.getSize(); if (size == 0) return oss; const Description description(getInputDescription()); if (size == 1) return (oss << polynomials_[0].__str__(description[0], "")); Bool allScalar = true; Scalar scalarValue = 1.0; Bool onlyOneNotScalar = false; UnsignedInteger indexNotScalar = 0; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger degree = polynomials_[i].getDegree(); const Bool isScalar = degree == 0; // Only one non-scalar so far, and the current one is not scalar if (onlyOneNotScalar && !isScalar) onlyOneNotScalar = false; // Only scalars so far, and the current is not scalar if (allScalar && !isScalar) { onlyOneNotScalar = true; indexNotScalar = i; } if (isScalar) scalarValue *= polynomials_[i].getCoefficients()[0]; allScalar = allScalar && isScalar; } // Scalar polynomial if (allScalar) oss << scalarValue; // Only one no unit polynomial in the product else if (onlyOneNotScalar) oss << (polynomials_[indexNotScalar] * scalarValue).__str__(description[indexNotScalar], ""); // At least two non-scalar factors else { const String scalarValueString(OSS(false) << scalarValue); Bool first = scalarValueString == "1"; // There is a non-unit factor if (!first) oss << scalarValue; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger degree = polynomials_[i].getDegree(); // All the degree 0 factors have already been taken into account if (degree > 0) { if (!first) oss << " * "; oss << "(" << polynomials_[i].__str__(description[i], "") << ")"; first = false; } } // Loop over the factors } // At least two non-scalar factors return oss; } /* Operator (): Evaluate a product of 1D polynomials for one sample */ Point ProductPolynomialEvaluation::operator() (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation(1.0) ; for (UnsignedInteger i = 0; i < inDimension; ++i) productEvaluation *= polynomials_[i](inP[i]); const Point result(1, productEvaluation); if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } struct ProductPolynomialEvaluationComputeSamplePolicy { const Sample & input_; Sample & output_; const ProductPolynomialEvaluation::PolynomialCollection & polynomials_; ProductPolynomialEvaluationComputeSamplePolicy(const Sample & input, Sample & output, const ProductPolynomialEvaluation::PolynomialCollection & polynomials) : input_(input) , output_(output) , polynomials_(polynomials) { // Nothing to do } inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { Scalar value = polynomials_[0](input_[i][0]); for (UnsignedInteger j = 1; j < polynomials_.getSize(); ++j) value *= polynomials_[j](input_[i][j]); output_[i][0] = value; } // i } // operator () }; // struct ProductPolynomialEvaluationComputeSamplePolicy /* Operator (): Evaluate a product of 1D polynomials for one sample */ Sample ProductPolynomialEvaluation::operator() (const Sample & inS) const { const UnsignedInteger inDimension = inS.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; const UnsignedInteger size = inS.getSize(); Sample result(size, getOutputDimension()); const ProductPolynomialEvaluationComputeSamplePolicy policy( inS, result, polynomials_ ); TBB::ParallelFor( 0, size, policy ); result.setDescription(getOutputDescription()); callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger ProductPolynomialEvaluation::getInputDimension() const { return polynomials_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductPolynomialEvaluation::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductPolynomialEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "polynomials_", polynomials_ ); } /* Method load() reloads the object from the StorageManager */ void ProductPolynomialEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "polynomials_", polynomials_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductPolynomialGradient.cxx000066400000000000000000000073771307543307100244310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductPolynomialGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductPolynomialGradient); static const Factory Factory_ProductPolynomialGradient; /* Default constructor */ ProductPolynomialGradient::ProductPolynomialGradient() : GradientImplementation() , polynomials_() { // Nothing to do } /* Constructor */ ProductPolynomialGradient::ProductPolynomialGradient(const PolynomialCollection & coll) : GradientImplementation() , polynomials_(coll) { // Nothing to do } /* Virtual constructor */ ProductPolynomialGradient * ProductPolynomialGradient::clone() const { return new ProductPolynomialGradient(*this); } /* String converter */ String ProductPolynomialGradient::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Compute the gradient of a product of univariate polynomials */ Matrix ProductPolynomialGradient::gradient (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation = 1.0; Point evaluations(inDimension); Point derivatives(inDimension); for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar x = inP[i]; const Scalar y = polynomials_[i](x); const Scalar dy = polynomials_[i].gradient(x); evaluations[i] = y; derivatives[i] = dy; productEvaluation *= y; } Matrix grad(inDimension, 1); // Usual case: productEvaluation <> 0 if (productEvaluation != 0.0) { for (UnsignedInteger i = 0; i < inDimension; ++i) { grad(i, 0) = derivatives[i] * (productEvaluation / evaluations[i]); } } // Must compute the gradient in a more expensive way else { for (UnsignedInteger i = 0; i < inDimension; ++i) { grad(i, 0) = derivatives[i]; for (UnsignedInteger j = 0; j < i; ++j) grad(i, 0) *= evaluations[j]; for (UnsignedInteger j = i + 1; j < inDimension; ++j) grad(i, 0) *= evaluations[j]; } } return grad; } /* Accessor for input point dimension */ UnsignedInteger ProductPolynomialGradient::getInputDimension() const { return polynomials_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductPolynomialGradient::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductPolynomialGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "polynomials_", polynomials_ ); } /* Method load() reloads the object from the StorageManager */ void ProductPolynomialGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "polynomials_", polynomials_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductPolynomialHessian.cxx000066400000000000000000000107241307543307100242540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductPolynomialHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductPolynomialHessian); static const Factory Factory_ProductPolynomialHessian; /* Default constructor */ ProductPolynomialHessian::ProductPolynomialHessian() : HessianImplementation() , polynomials_() { // Nothing to do } /* Constructor */ ProductPolynomialHessian::ProductPolynomialHessian(const PolynomialCollection & coll) : HessianImplementation() , polynomials_(coll) { // Nothing to do } /* Virtual constructor */ ProductPolynomialHessian * ProductPolynomialHessian::clone() const { return new ProductPolynomialHessian(*this); } /* String converter */ String ProductPolynomialHessian::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Compute the hessian of a product of univariate polynomials */ SymmetricTensor ProductPolynomialHessian::hessian (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation = 1.0; Point evaluations(inDimension); Point derivatives(inDimension); Point secondDerivatives(inDimension); for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar x = inP[i]; const Scalar y = polynomials_[i](x); const Scalar dy = polynomials_[i].gradient(x); const Scalar d2y = polynomials_[i].hessian(x); evaluations[i] = y; derivatives[i] = dy; secondDerivatives[i] = d2y; productEvaluation *= y; } SymmetricTensor hess(inDimension, 1); // Usual case: productEvaluation <> 0 if (productEvaluation != 0.0) { for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar dyi = derivatives[i] * (productEvaluation / evaluations[i]); for (UnsignedInteger j = 0; j < i; ++j) { hess(i, j, 0) = derivatives[j] * (dyi / evaluations[j]); } hess(i, i, 0) = secondDerivatives[i] * (productEvaluation / evaluations[i]); } } // Must compute the hessian in a more expensive way else { for (UnsignedInteger i = 0; i < inDimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { hess(i, j, 0) = derivatives[i] * derivatives[j]; for (UnsignedInteger k = 0; k < j; ++k) hess(i, j, 0) *= evaluations[k]; for (UnsignedInteger k = j + 1; k < i; ++k) hess(i, j, 0) *= evaluations[k]; for (UnsignedInteger k = i + 1; k < inDimension; ++k) hess(i, j, 0) *= evaluations[k]; } hess(i, i, 0) = secondDerivatives[i]; for (UnsignedInteger k = 0; k < i; ++k) hess(i, i, 0) *= evaluations[k]; for (UnsignedInteger k = i + 1; k < inDimension; ++k) hess(i, i, 0) *= evaluations[k]; } } return hess; } /* Accessor for input point dimension */ UnsignedInteger ProductPolynomialHessian::getInputDimension() const { return polynomials_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductPolynomialHessian::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductPolynomialHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "polynomials_", polynomials_ ); } /* Method load() reloads the object from the StorageManager */ void ProductPolynomialHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "polynomials_", polynomials_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductUniVariateFunctionEvaluation.cxx000066400000000000000000000127471307543307100264320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductUniVariateFunctionEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_UniVariateFunction; CLASSNAMEINIT(ProductUniVariateFunctionEvaluation); static const Factory Factory_ProductUniVariateFunctionEvaluation; /* Default constructor */ ProductUniVariateFunctionEvaluation::ProductUniVariateFunctionEvaluation() : EvaluationImplementation() , functions_() { // Nothing to do } /* Constructor */ ProductUniVariateFunctionEvaluation::ProductUniVariateFunctionEvaluation(const UniVariateFunctionCollection & coll) : EvaluationImplementation() , functions_(coll) { // Set the descriptions setInputDescription(Description::BuildDefault(getInputDimension(), "x")); setOutputDescription(Description::BuildDefault(getOutputDimension(), "y")); } /* Virtual constructor */ ProductUniVariateFunctionEvaluation * ProductUniVariateFunctionEvaluation::clone() const { return new ProductUniVariateFunctionEvaluation(*this); } /* String converter */ String ProductUniVariateFunctionEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " functions=" << functions_; } String ProductUniVariateFunctionEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << __repr__(); return oss; } /* Operator (): Evaluate a product of 1D polynomials for one sample */ Point ProductUniVariateFunctionEvaluation::operator() (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation(1.0) ; for (UnsignedInteger i = 0; i < inDimension; ++ i) productEvaluation *= functions_[i](inP[i]); const Point result(1, productEvaluation); if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } struct ProductUniVariateFunctionEvaluationComputeSamplePolicy { const Sample & input_; Sample & output_; const ProductUniVariateFunctionEvaluation::UniVariateFunctionCollection & functions_; ProductUniVariateFunctionEvaluationComputeSamplePolicy(const Sample & input, Sample & output, const ProductUniVariateFunctionEvaluation::UniVariateFunctionCollection & functions) : input_(input) , output_(output) , functions_(functions) { // Nothing to do } inline void operator()(const TBB::BlockedRange & r) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) { Scalar value = functions_[0](input_[i][0]); for (UnsignedInteger j = 1; j < functions_.getSize(); ++j) value *= functions_[j](input_[i][j]); output_[i][0] = value; } // i } // operator () }; // struct ProductUniVariateFunctionEvaluationComputeSamplePolicy /* Operator (): Evaluate a product of 1D polynomials for one sample */ Sample ProductUniVariateFunctionEvaluation::operator() (const Sample & inS) const { const UnsignedInteger inDimension = inS.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; const UnsignedInteger size = inS.getSize(); Sample result(size, getOutputDimension()); const ProductUniVariateFunctionEvaluationComputeSamplePolicy policy( inS, result, functions_ ); TBB::ParallelFor( 0, size, policy ); result.setDescription(getOutputDescription()); callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger ProductUniVariateFunctionEvaluation::getInputDimension() const { return functions_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductUniVariateFunctionEvaluation::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductUniVariateFunctionEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("functions_", functions_); } /* Method load() reloads the object from the StorageManager */ void ProductUniVariateFunctionEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("functions_", functions_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductUniVariateFunctionGradient.cxx000066400000000000000000000100641307543307100260460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductUniVariateFunctionGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductUniVariateFunctionGradient); static const Factory Factory_ProductUniVariateFunctionGradient; /* Default constructor */ ProductUniVariateFunctionGradient::ProductUniVariateFunctionGradient() : GradientImplementation() { // Nothing to do } /* Constructor */ ProductUniVariateFunctionGradient::ProductUniVariateFunctionGradient(const Pointer & p_evaluation) : GradientImplementation() , p_evaluation_(p_evaluation) { // Nothing to do } /* Virtual constructor */ ProductUniVariateFunctionGradient * ProductUniVariateFunctionGradient::clone() const { return new ProductUniVariateFunctionGradient(*this); } /* String converter */ String ProductUniVariateFunctionGradient::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Compute the gradient of a product of univariate polynomials */ Matrix ProductUniVariateFunctionGradient::gradient (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation = 1.0; Point evaluations(inDimension); Point derivatives(inDimension); for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar x = inP[i]; const Scalar y = p_evaluation_->functions_[i](x); const Scalar dy = p_evaluation_->functions_[i].gradient(x); evaluations[i] = y; derivatives[i] = dy; productEvaluation *= y; } Matrix grad(inDimension, 1); // Usual case: productEvaluation <> 0 if (productEvaluation != 0.0) { for (UnsignedInteger i = 0; i < inDimension; ++i) { grad(i, 0) = derivatives[i] * (productEvaluation / evaluations[i]); } } // Must compute the gradient in a more expensive way else { for (UnsignedInteger i = 0; i < inDimension; ++i) { grad(i, 0) = derivatives[i]; for (UnsignedInteger j = 0; j < i; ++j) grad(i, 0) *= evaluations[j]; for (UnsignedInteger j = i + 1; j < inDimension; ++j) grad(i, 0) *= evaluations[j]; } } return grad; } /* Accessor for input point dimension */ UnsignedInteger ProductUniVariateFunctionGradient::getInputDimension() const { return p_evaluation_->functions_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductUniVariateFunctionGradient::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductUniVariateFunctionGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute("evaluation_", *p_evaluation_); } /* Method load() reloads the object from the StorageManager */ void ProductUniVariateFunctionGradient::load(Advocate & adv) { GradientImplementation::load(adv); TypedInterfaceObject evaluation; adv.loadAttribute("evaluation_", evaluation); p_evaluation_ = evaluation.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ProductUniVariateFunctionHessian.cxx000066400000000000000000000114261307543307100257060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductUniVariateFunctionHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductUniVariateFunctionHessian); static const Factory Factory_ProductUniVariateFunctionHessian; /* Default constructor */ ProductUniVariateFunctionHessian::ProductUniVariateFunctionHessian() : HessianImplementation() { // Nothing to do } /* Constructor */ ProductUniVariateFunctionHessian::ProductUniVariateFunctionHessian(const Pointer & p_evaluation) : HessianImplementation() , p_evaluation_(p_evaluation) { // Nothing to do } /* Virtual constructor */ ProductUniVariateFunctionHessian * ProductUniVariateFunctionHessian::clone() const { return new ProductUniVariateFunctionHessian(*this); } /* String converter */ String ProductUniVariateFunctionHessian::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Compute the hessian of a product of univariate polynomials */ SymmetricTensor ProductUniVariateFunctionHessian::hessian (const Point & inP) const { const UnsignedInteger inDimension = inP.getDimension(); if (inDimension != getInputDimension()) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a ProductPolynomialFunction with an argument of invalid dimension"; Scalar productEvaluation = 1.0; Point evaluations(inDimension); Point derivatives(inDimension); Point secondDerivatives(inDimension); for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar x = inP[i]; const Scalar y = p_evaluation_->functions_[i](x); const Scalar dy = p_evaluation_->functions_[i].gradient(x); const Scalar d2y = p_evaluation_->functions_[i].hessian(x); evaluations[i] = y; derivatives[i] = dy; secondDerivatives[i] = d2y; productEvaluation *= y; } SymmetricTensor hess(inDimension, 1); // Usual case: productEvaluation <> 0 if (productEvaluation != 0.0) { for (UnsignedInteger i = 0; i < inDimension; ++i) { const Scalar dyi = derivatives[i] * (productEvaluation / evaluations[i]); for (UnsignedInteger j = 0; j < i; ++j) { hess(i, j, 0) = derivatives[j] * (dyi / evaluations[j]); } hess(i, i, 0) = secondDerivatives[i] * (productEvaluation / evaluations[i]); } } // Must compute the hessian in a more expensive way else { for (UnsignedInteger i = 0; i < inDimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { hess(i, j, 0) = derivatives[i] * derivatives[j]; for (UnsignedInteger k = 0; k < j; ++k) hess(i, j, 0) *= evaluations[k]; for (UnsignedInteger k = j + 1; k < i; ++k) hess(i, j, 0) *= evaluations[k]; for (UnsignedInteger k = i + 1; k < inDimension; ++k) hess(i, j, 0) *= evaluations[k]; } hess(i, i, 0) = secondDerivatives[i]; for (UnsignedInteger k = 0; k < i; ++k) hess(i, i, 0) *= evaluations[k]; for (UnsignedInteger k = i + 1; k < inDimension; ++k) hess(i, i, 0) *= evaluations[k]; } } return hess; } /* Accessor for input point dimension */ UnsignedInteger ProductUniVariateFunctionHessian::getInputDimension() const { return p_evaluation_->functions_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger ProductUniVariateFunctionHessian::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void ProductUniVariateFunctionHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute("evaluation_", *p_evaluation_); } /* Method load() reloads the object from the StorageManager */ void ProductUniVariateFunctionHessian::load(Advocate & adv) { HessianImplementation::load(adv); TypedInterfaceObject evaluation; adv.loadAttribute("evaluation_", evaluation); p_evaluation_ = evaluation.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/QuadraticBasisFactory.cxx000066400000000000000000000056721307543307100235120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Quadratic canonical basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuadraticBasisFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/QuadraticFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuadraticBasisFactory); static const Factory Factory_QuadraticBasisFactory; /* Default constructor */ QuadraticBasisFactory::QuadraticBasisFactory (const UnsignedInteger inputDimension) : BasisFactory() , inputDimension_(inputDimension) { // Nothing to do } /* String converter */ String QuadraticBasisFactory::__repr__() const { return OSS() << "class=" << QuadraticBasisFactory::GetClassName() << " name=" << getName(); } /* Here is the interface that all derived class must implement */ QuadraticBasisFactory* QuadraticBasisFactory::clone() const { return new QuadraticBasisFactory(*this); } Basis QuadraticBasisFactory::build() const { Basis basis; // constant term basis.add(LinearFunction (Point(inputDimension_, 0.0), Point(1, 1.0), Matrix(1, inputDimension_))); // linear terms for ( UnsignedInteger i = 0; i < inputDimension_; ++ i ) { Matrix linear(1, inputDimension_); linear(0, i) = 1.0; basis.add(LinearFunction (Point(inputDimension_, 0.0), Point(1, 0.0), linear)); } // square terms for ( UnsignedInteger i = 0; i < inputDimension_; ++ i ) { for ( UnsignedInteger j = i; j < inputDimension_; ++ j ) { SymmetricTensor quadratic(inputDimension_, 1); quadratic(i, j, 0) = 1.0; Point center(inputDimension_, 0.0); Point constant(1, 0.0); Matrix linear(inputDimension_, 1); basis.add(QuadraticFunction(center, constant, linear, quadratic)); } } return basis; } /* Method save() stores the object through the StorageManager */ void QuadraticBasisFactory::save(Advocate & adv) const { BasisFactory::save(adv); adv.saveAttribute("inputDimension_", inputDimension_); } /* Method load() reloads the object from the StorageManager */ void QuadraticBasisFactory::load(Advocate & adv) { BasisFactory::load(adv); adv.loadAttribute("inputDimension_", inputDimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/QuadraticEvaluation.cxx000066400000000000000000000141021307543307100232140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a quadratic numerical math function implementation * of the form y = constant + + <, x-c> * where constant is a dim(y) numerical point, c a dim(x) numerical * point, linear is a dim(x) by dim(y) matrix, quadratic is a * dim(x) by dim(x) by dim(y) symmetric tensor and * means Transpose(linear).x, means * Transpose_kj(quadratic).x * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/QuadraticEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuadraticEvaluation); static const Factory Factory_QuadraticEvaluation; /* Default constructor */ QuadraticEvaluation::QuadraticEvaluation() : EvaluationImplementation() { // Nothing to do } /* Parameter constructor f(x) = constant + linear.x + 1/2 x'.quadratic.x */ QuadraticEvaluation::QuadraticEvaluation(const Point & center, const Point & constant, const Matrix & linear, const SymmetricTensor & quadratic) : EvaluationImplementation(), center_(center), constant_(constant), linear_(linear.transpose()), quadratic_(quadratic) { /* Check if the dimension of the constant term is compatible with the linear and quadratic terms */ if ((constant.getDimension() != linear.getNbColumns()) || (constant.getDimension() != quadratic.getNbSheets())) throw InvalidDimensionException(HERE) << "Constant term dimension is incompatible with the linear term or with the quadratic term"; /* Check if the dimension of the center is compatible with the linear and quadratic terms */ if ((center.getDimension() != linear.getNbRows()) || (center.getDimension() != quadratic.getNbRows())) throw InvalidDimensionException(HERE) << "Center term dimension is incompatible with the linear term or with the quadratic term"; setInputDescription(Description::BuildDefault(center.getDimension(), "x")); setOutputDescription(Description::BuildDefault(constant.getDimension(), "y")); } /* Virtual constructor */ QuadraticEvaluation * QuadraticEvaluation::clone() const { return new QuadraticEvaluation(*this); } /* Comparison operator */ Bool QuadraticEvaluation::operator ==(const QuadraticEvaluation & other) const { return ((quadratic_ == other.getQuadratic()) && (linear_ == other.getLinear()) && (constant_ == other.getConstant()) && (center_ == other.getCenter())); } /* String converter */ String QuadraticEvaluation::__repr__() const { OSS oss; oss << "class=" << QuadraticEvaluation::GetClassName() << " name=" << getName() << " center=" << center_.__repr__() << " constant=" << constant_.__repr__() << " linear=" << linear_.transpose() << " quadratic=" << quadratic_; return oss; } String QuadraticEvaluation::__str__(const String & offset) const { OSS oss; oss << offset << QuadraticEvaluation::GetClassName() << Os::GetEndOfLine() << offset << " center :" << Os::GetEndOfLine() << center_.__str__(offset + " ") << Os::GetEndOfLine() << offset << " constant :" << Os::GetEndOfLine() << constant_.__str__(offset + " ") << Os::GetEndOfLine() << offset << " linear :" << Os::GetEndOfLine() << linear_.transpose().__str__(offset + " ") << Os::GetEndOfLine() << offset << " quadratic :" << Os::GetEndOfLine() << quadratic_.__str__(offset + " ") << Os::GetEndOfLine(); return oss; } /* Accessor for the center */ Point QuadraticEvaluation::getCenter() const { return center_; } /* Accessor for the constant term */ Point QuadraticEvaluation::getConstant() const { return constant_; } /* Accessor for the linear term */ Matrix QuadraticEvaluation::getLinear() const { return linear_.transpose(); } /* Accessor for the quadratic term */ SymmetricTensor QuadraticEvaluation::getQuadratic() const { return quadratic_; } /* Here is the interface that all derived class must implement */ /* Operator () */ Point QuadraticEvaluation::operator() (const Point & inP) const { if ((inP.getDimension() != linear_.getNbColumns()) || (inP.getDimension() != quadratic_.getNbRows())) throw InvalidArgumentException(HERE) << "Invalid input dimension"; /* We don't have a true linear algebra with tensors, so we must perform the tensor/vector product by hand */ const Point delta(inP - center_); Point result(constant_ + linear_ * delta); /* As we don't have a sheet extractor yet, we can't use the following code */ const UnsignedInteger sheetNumber = quadratic_.getNbSheets(); for(UnsignedInteger index = 0; index < sheetNumber; ++index) result[index] += 0.5 * dot(delta, quadratic_.getSheet(index) * delta); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger QuadraticEvaluation::getInputDimension() const { return center_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger QuadraticEvaluation::getOutputDimension() const { return constant_.getDimension(); } /* Method save() stores the object through the StorageManager */ void QuadraticEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "center_", center_ ); adv.saveAttribute( "constant_", constant_ ); adv.saveAttribute( "linear_", linear_ ); adv.saveAttribute( "quadratic_", quadratic_ ); } /* Method load() reloads the object from the StorageManager */ void QuadraticEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "center_", center_ ); adv.loadAttribute( "constant_", constant_ ); adv.loadAttribute( "linear_", linear_ ); adv.loadAttribute( "quadratic_", quadratic_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/QuadraticFunction.cxx000066400000000000000000000042541307543307100227010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements quadratic numerical math functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuadraticFunction.hxx" #include "openturns/QuadraticEvaluation.hxx" #include "openturns/LinearGradient.hxx" #include "openturns/ConstantHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuadraticFunction); /* Default constructor */ QuadraticFunction::QuadraticFunction (const Point & center, const Point & constant, const Matrix & linear, const SymmetricTensor & quadratic) : Function(new QuadraticEvaluation(center, constant, linear, quadratic), new LinearGradient(center, linear, quadratic), new ConstantHessian(quadratic)) { // Nothing to do } /* Comparison operator */ Bool QuadraticFunction::operator ==(const QuadraticFunction & other) const { return true; } /* String converter */ String QuadraticFunction::__repr__() const { OSS oss; oss << "class=" << QuadraticFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } String QuadraticFunction::__str__(const String & offset) const { OSS oss; oss << "class=" << QuadraticFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__str__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/000077500000000000000000000000001307543307100202335ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Func/SpecFunc/BetaFunctions.cxx000066400000000000000000000413161307543307100235300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the incomplete * regularized beta function and related functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/BetaFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #ifdef OPENTURNS_HAVE_BOOST #include #endif BEGIN_NAMESPACE_OPENTURNS namespace BetaFunctions { Scalar IncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; return RegularizedIncompleteBeta(a, b, x, tail) * SpecFunc::Beta(a, b); } Scalar IncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; return RegularizedIncompleteBetaInverse(a, b, x * SpecFunc::Beta(a, b)); } Scalar RegularizedIncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { if (!(a >= 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b >= 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if ((a <= 0.0) && (b <= 0.0)) throw InvalidArgumentException(HERE) << "Error: a and b cannot be null at the same time"; if (x <= 0.0) return (tail ? 1.0 : 0.0); if (x >= 1.0) return (tail ? 0.0 : 1.0); #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::ibetac(a, b, x) : boost::math::ibeta(a, b, x)); #else if (tail) return RegularizedIncompleteBetaQ(a, b, x); return RegularizedIncompleteBetaP(a, b, x); #endif } Scalar RegularizedIncompleteBetaSlatec(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { Scalar p = a; Scalar q = b; Scalar y = x; Bool isSwapped = false; if (((q <= p) && (x >= 0.8)) || ((q > p) && (x >= 0.2))) { p = b; q = a; y = 0.5 + (0.5 - x); isSwapped = true; } if ((p + q) * y < SpecFunc::ScalarEpsilon * (p + 1.0)) return (tail == isSwapped ? 1.0 : 0.0); const Scalar qFrac = std::max(1.0, q - floor(q)); Scalar xBeta = p * log(y) - SpecFunc::LogBeta(qFrac, p) - log(p); Scalar value = exp(xBeta); Scalar term = p * value; if (qFrac < 1.0) { const UnsignedInteger n = static_cast(std::max(4.0, round(log(SpecFunc::ScalarEpsilon) / log(y)))); for (UnsignedInteger i = 1; i <= n; ++i) { term *= (i - qFrac) * y / i; value += term / (p + i); } } // bFrac < 1.0 if (q <= 1.0) return (tail == isSwapped ? value : 0.5 + (0.5 - value)); xBeta = p * log(y) + q * log1p(-y) - SpecFunc::LogBeta(p, q) - log(q); UnsignedInteger iBeta = static_cast(std::max(0.0, xBeta / SpecFunc::LogMinScalar)); term = exp(xBeta - iBeta * SpecFunc::LogMinScalar); const Scalar c = 1.0 / (1.0 - y); const Bool smallCase = q * c <= (p + q - 1.0); Scalar finiteSum = 0.0; const UnsignedInteger n = static_cast(ceil(q)); for (UnsignedInteger i = 0; i < n; ++i) { if (smallCase && (term <= SpecFunc::ScalarEpsilon * finiteSum)) break; term *= (q - i) * c / (p + q - i - 1.0); if (term > 1.0) { --iBeta; term *= SpecFunc::MinScalar; } // term > 1.0 if (iBeta == 0) { finiteSum += term; break; } // ib == 0 } // for i value += finiteSum; return (tail == isSwapped ? value : 0.5 + (0.5 - value)); } Scalar RegularizedIncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if (x <= 0.0) return (tail ? 1.0 : 0.0); if (x >= 1.0) return (tail ? 0.0 : 1.0); #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::ibetac_inv(a, b, x) : boost::math::ibeta_inv(a, b, x)); #else Scalar lower = 0.0; Scalar betaLower = tail ? 1.0 : 0.0; Scalar upper = 1.0; const Bool lowerLessThanX = betaLower < x; for (UnsignedInteger k = 0; k < SpecFunc::MaximumIteration; ++k) { if (std::abs(upper - lower) <= SpecFunc::Precision) break; const Scalar middle = 0.5 * (lower + upper); const Scalar betaMiddle = RegularizedIncompleteBeta(a, b, middle, tail); const Bool middleLessThanX = betaMiddle < x; if (middleLessThanX == lowerLessThanX) lower = middle; else upper = middle; } // Bisection loop return 0.5 * (upper + lower); #endif } Scalar RegularizedIncompleteBetaP(const Scalar a, const Scalar b, const Scalar x) { if (!(a >= 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b >= 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if ((a <= 0.0) && (b <= 0.0)) throw InvalidArgumentException(HERE) << "Error: a and b cannot be null at the same time"; if (x <= 0.0) return 0.0; if (x >= 1.0) return 1.0; if (x * (a + b + 2) < a + 1.0) return RegularizedIncompleteBetaContinuedFraction(a, b, x) * exp(lgamma(a + b) - lgamma(a) - lgamma(b) + a * log(x) + b * log1p(-x)) / a; return 1.0 - RegularizedIncompleteBetaContinuedFraction(b, a, 1.0 - x) * exp(lgamma(a + b) - lgamma(a) - lgamma(b) + a * log(x) + b * log1p(-x)) / b; } Scalar RegularizedIncompleteBetaQ(const Scalar a, const Scalar b, const Scalar x) { if (!(a >= 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b >= 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if ((a <= 0.0) && (b <= 0.0)) throw InvalidArgumentException(HERE) << "Error: a and b cannot be null at the same time"; if (x >= 1.0) return 0.0; if (x <= 0.0) return 1.0; if (x * (a + b + 2) < a + 1.0) return 1.0 - RegularizedIncompleteBetaContinuedFraction(a, b, x) * exp(lgamma(a + b) - lgamma(a) - lgamma(b) + a * log(x) + b * log1p(-x)) / a; return RegularizedIncompleteBetaContinuedFraction(b, a, 1.0 - x) * exp(lgamma(a + b) - lgamma(a) - lgamma(b) + a * log(x) + b * log1p(-x)) / b; } //#define USE_NEW_ALGO #ifdef USE_NEW_ALGO // Computational subroutines // FPSER // APSER // BPSER // BFRAC // BUP // BGRAT // BASYM // Border cases // a < 0.0 || b < 0.0 // a == 0.0 && b == 0.0 // x < 0.0 || x > 1.0 // y < 0.0 || y > 1.0 // x + y != 1 // x == 0.0 && a == 0.0 // y == 0.0 && b == 0.0 // Sub-cases // a == 0.0 cdf = 1.0, ccdf = 0.0 // b == 0.0 cdf = 0.0, ccdf = 1.0 // max(a, b) < eps cdf = b / (a + b), ccdf = a / (a + b) // a, b > 1: // a > b: // lambda = (a + b)y - b // a <= b: // lambda = a - (a + b)x // lambda >= 0.0: // b < 40.0: // bx <= 0.7 cdf = BPSER(a, b, x), ccdf = 1.0 - cdf // bx > 0.7: // frac(b) != 0: // x > 0.7: // a > 15: // Scalar BRATIO(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if (x <= 0.0) return (tail ? 1.0 : 0.0); if (x >= 1.0) return (tail ? 0.0 : 1.0); // For very small a, b if (std::max(a, b) < SpecFunc::ScalarEpsilon) return (tail ? a / (a + b) : b / (a + b)); // Here we implement the decision tree as described in Section 3 of the reference Scalar newA = a; Scalar newB = b; Scalar newX = x; Scalar newY = 1.0 - x; const Bool minABGreater1 = std::min(a, b) > 1.0; if (minABGreater1) { const Scalar p = a / (a + b); const Bool swappedABXY = x > p; if (swappedABXY) { std::swap(newA, newB); std::swap(newX, newY); } if (newB < 40.0) { if (newB * newX <= 0.7) { const Scalar value = BPSER(newA, newB, newX); return (tail == swappedABXY ? value : value); } else if (x <= 0.7) { const UnsignedInteger n = static_cast(floor(newB)); const Scalar value = BPSER(newA, newB - n, x) + BUP(newB - n, newA, newY, newX, n); return (tail == swappedABXY ? value : 1.0 - value); } // (newB * newX > 0.7) && (x <= 0.7) // Here we can have newB * newX <= 0.7 if (newX > 0.7) { const UnsignedInteger n = static_cast(floor(newB)); const Scalar bBar = newB - n; if (newA > 15.0) { const Scalar w0 = BUP(bBar, newA, newY, newX, n); const Scalar value = BGRAT(newA, bBar, newX, newY, w0); return (tail == swappedABXY ? value : 1.0 - value); } // newA > 15.0 // Here, newA <= 15.0 const Scalar w0 = BUP(bBar, newA, newY, newX, n) + BUP(newA, bBar, newX, newY, 20.0); const Scalar value = BGRAT(newA + 20.0, bBar, newX, newY, w0); return (tail == swappedABXY ? value : 1.0 - value); } // newX > 0.7 } // newB < 40.0 // Here, newB >= 40.0 const Scalar q = b / (a + b); const Scalar lambda = newA - (newA + newB) * newX; if ( ((newA <= newB) && (newA <= 100.0)) || ((100.0 < newA) && (newA <= newB) && (newX < 0.97 * p)) || ((newA > newB) && (newB <= 100.0)) || ((100.0 < newB) && (newB < newA) && (newY > 1.03 * q)) ) { const Scalar value = BFRAC(newA, newB, newX, newY, lambda); return (tail == swappedABXY ? value : 1.0 - value); } // Here we are in the remaining cases of newB >= 40.0 const Scalar value = BASYM(newA, newB, newX, newY, lambda); return (tail == swappedABXY ? value : 1.0 - value); } // minABGreater1 // Here, min(a, b) <= 1.0 const Bool swappedABXY = x > 0.5; if (swappedABXY) { std::swap(newA, newB); std::swap(newX, newY); } const Bool maxABGreater1 = std::max(newA, newB) > 1; if ((maxABGreater1 && ((newB <= 1.0) || ((newX <= 0.1) && (pow(newB * newX, newA) <= 0.7)))) || (!maxABGreater1 && ((newA >= std::min(0.2, newB)) || (pow(newX, newA) <= 0.9)))) { const Scalar value = BPSER(newA, newB, newX); return (tail == swappedABXY ? value : 1.0 - value); } if ((maxABGreater1 && (newB > 1.0) && (newX >= 0.3)) || (!maxABGreater1 && (newA < std::min(0.2, newB)) && (newX >= 0.3) && (pow(newX, newA) > 0.9))) { const Scalar value = BPSER(newB, newA, newY); return (tail != swappedABXY ? value : 1.0 - value); } if (maxABGreater1 && (newB > 15.0) && (((0.1 <= newX) && (newX < 0.3)) || ((newX < 0.1) && (pow(newB * newX, newA) > 0.7)))) { const Scalar value = BGRAT(newB, newA, newY, newX, 0.0); return (tail != swappedABXY ? value : 1.0 - value); } // The remaining cases of min(a, b) <= 1 const Scalar w0 = BUP(newB, newA, newY, newX, 20); const Scalar value = BGRAT(newB + 20, newA, newY, newX, w0); return (tail != swappedABXY ? value : 1.0 - value); } // Function BPSER in: // Armido R. Didonato a,d Alfred H. Morris, "Algorithm 708: Significant Digit Computation of the Incomplete Beta Function Ratios" Scalar BPSER(const Scalar a, const Scalar b, const Scalar x) { if (x == 0.0) return 0.0; const Scalar pMin = std::min(a, b); Scalar value = 0.0; if (pMin >= 1.0) value = exp(a * log(a) - SpecFunc::LnBeta(a, b)) / a; else { const Scalar pMax = std::max(a, b); value = (pMax >= 8.0 ? pMin * exp(a * log(x) - SpecFunc::LogGamma1p(pMin) - ALGDIV(pMin, pMax)) / a : pow(x, a) * (b / (a + b)) * (1.0 + SpecFunc::IGamma1pm1(a)) * (1.0 + SpecFunc::IGamma1pm1(b)) / (1.0 + SpecFunc::IGamma1pm1(a + b))); } // pMin < 1.0 const Scalar epsilon = SpecFunc::ScalarEpsilon / a; Scalar sum = 0.0; Scalar term = 1.0; for (UnsignedInteger j = 1; j < SpecFunc::MaximumIteration; ++n) { term *= x * (0.5 + (0.5 - b / j)); sum += term / (a + j); if (std::abs(term) < epsilon) break; } return value * (1.0 + a * sum); } // Function ALGDIV Scalar ALGDIV(const Scalar a, const Scalar b) { Scalar x = -1.0; Scalar xM1 = -1.0; Scalar d = -1.0; if (a > b) { const Scalar h = b / a; xM1 = 1.0 / (1.0 + h); x = h / (1.0 + h); d = a + (b - 0.5); } // a > b else { // a <= b const Scalar h = a / b; xM1 = h / (1.0 + h); x = 1.0 / (1.0 + h); d = b + (a - 0.5); } // a <= b const Scalar x2 = x * x; const Scalar s3 = 1.0 + (x + x2); const Scalar s5 = 1.0 + (x + x2 * s3); const Scalar s7 = 1.0 + (x + x2 * s5); const Scalar s9 = 1.0 + (x + x2 * s7); const Scalar s11 = 1.0 + (x + x2 * s9); const Scalar t = 1.0 / (b * b); const Scalar w = xM1 * (0.833333333333333e-01 + t * (-0.277777777760991e-02 * s3 + t * (0.793650666825390e-03 * s5 + t * (-0.595202931351870e-03 * s7 + t * (0.837308034031215e-03 * s9 - 0.165322962780713e-02 * s11 * t))))) / b; const Scalar u = d * log1p(a / b); const Scalar v = a * (log(b) - 1.0); return (u > v ? (w - v) - u : (w - u) - v); } // Function BUP in: // Armido R. Didonato a,d Alfred H. Morris, "Algorithm 708: Significant Digit Computation of the Incomplete Beta Function Ratios" Scalar BUP(const Scalar a, const Scalar b, const Scalar x, const Scalar y, const UnsignedInteger n) { Scalar value = 1.0; Scalar term = a * x * (1.0 - b) / (1.0 + a); for (UnsignedInteger k = 1; k <= SpecFunc::MaximumIteration; ++k) { value += term; if (std::abs(term) <= value * SpecFunc::Precision) break; term *= x * (k - b) / (k * (k + a)); } return exp(a * log(x) - log(a) - SpecFunc::LogBeta(a, b)) * value; } Scalar BGRAT(const Scalar a, const Scalar b, const Scalar x, const Scalar y, const Scalar w) { } #endif // Based on [8.17(v)] of the NIST Digital Library of Mathematical Functions // Implementation using the modified Lentz method as in Boost and the Numerical Recipes Ed.3 Scalar RegularizedIncompleteBetaContinuedFraction(const Scalar a, const Scalar b, const Scalar x) { if (!(a >= 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (!(b >= 0.0)) throw InvalidArgumentException(HERE) << "Error: b must be positive, here b=" << b; if ((a <= 0.0) && (b <= 0.0)) throw InvalidArgumentException(HERE) << "Error: a and b cannot be null at the same time"; if (x <= 0.0) return 1.0; const Scalar epsilon = SpecFunc::Precision * SpecFunc::Precision; const Scalar aPb = a + b; const Scalar aP1 = a + 1.0; const Scalar aM1 = a - 1.0; Scalar c = 1.0; Scalar d = 1.0 - aPb * x / aP1; if (std::abs(d) < epsilon) d = epsilon; Scalar value = c / d; for (UnsignedInteger k = 1; k <= SpecFunc::MaximumIteration; ++k) { const UnsignedInteger k2 = 2 * k; Scalar aK = k * (k - b) * x / ((aM1 + k2) * (a + k2)); d = 1.0 - aK / d; if (std::abs(d) < epsilon) d = epsilon; c = 1.0 - aK / c; if (std::abs(c) < epsilon) c = epsilon; Scalar delta = c / d; value *= delta; if (std::abs(delta - 1) <= epsilon) break; aK = (a + k) * (aPb + k) * x / ((a + k2) * (aP1 + k2)); d = 1.0 - aK / d; if (std::abs(d) < epsilon) d = epsilon; c = 1.0 - aK / c; if (std::abs(c) < epsilon) c = epsilon; delta = c / d; value *= delta; if (std::abs(delta - 1) <= epsilon) break; } return value; } } // BetaFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/CMakeLists.txt000066400000000000000000000011601307543307100227710ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Debye.cxx) ot_add_source_file (BetaFunctions.cxx) ot_add_source_file (ExponentialIntegralFunctions.cxx) ot_add_source_file (Faddeeva.cc) ot_add_source_file (GammaFunctions.cxx) ot_add_source_file (SpecFunc.cxx) ot_add_source_file (incgam.cxx) ot_install_header_file (SpecFunc.hxx) ot_install_header_file (BetaFunctions.hxx) ot_install_header_file (ExponentialIntegralFunctions.hxx) ot_install_header_file (GammaFunctions.hxx) ot_install_header_file (OTSpecFunc.hxx) openturns-1.9/lib/src/Base/Func/SpecFunc/Debye.cxx000066400000000000000000000167641307543307100220250ustar00rootroot00000000000000#include #include "openturns/Debye.hxx" /** 1/(2pi) */ #define M_1_2PI .159154943091895335768883763373 /** Debye function of order n. int(t=0..x) t^n dt / [exp(t)-1] The underivative for n=0 is log[1-exp(-x)], which is infinite at x=0, so the corresponding Debye-function is not defined at n=0. Literature: Ng et al, Math. Comp. 24 (110) (1970) 405 Guseinov et al, Intl. J. Thermophys. 28 (4) (2007) 1420 Engeln et al, Colloid & Polymer Sci. 261 (9) (1983) 736 Maximon , Proc. R. Soc. A 459 (2039) (2003) 2807 @param[in] x the argument and upper limit of the integral. x>=0. @param[in] n the power in the numerator of the integral, 1<=n<=20 . @return the Debye function. Zero if x<=0, and -1 if n is outside the parameter range that is implemented. @since 2007-10-31 implemented range n=8..10 */ double debyen(const double x, const int n) { if (x <= 0. ) return 0. ; if ( n < 1 || n > 20) return -1. ; /* for values up to 4.80 the list of zeta functions and the sum up to k < K are huge enough to gain numeric stability in the sum */ if(x >= 3. ) { double sum ; static double nzetan[] = { 0., 1.64493406684822643647241516665e+00, 2.40411380631918857079947632302e+00, 6.49393940226682914909602217926e+00, 2.48862661234408782319527716750e+01, 1.22081167438133896765742151575e+02, 7.26011479714984435324654235892e+02, 5.06054987523763947046857360209e+03, 4.04009783987476348853278236554e+04, 3.63240911422382626807143525567e+05, 3.63059331160662871299061884284e+06, 3.99266229877310867023270732405e+07, 4.79060379889831452426876764501e+08, 6.22740219341097176419285340896e+09, 8.71809578301720678451912203103e+10, 1.30769435221891382089009990749e+12, 2.09229496794815109066316556880e+13, 3.55688785859223715975612396717e+14, 6.40238592281892140073564945334e+15, 1.21645216453639396669876696274e+17, 2.43290316850786132173725681824e+18, 5.10909543543702856776502748606e+19, 1.12400086178089123060215294900e+21 } ; /* constrained to the list of nzetan[] given above */ if ( n >= static_cast(sizeof(nzetan) / sizeof(double)) ) return -1. ; /* n!*zeta(n) is the integral for x=infinity , 27.1.3 */ sum = nzetan[n] ; /* the number of terms needed in the k-sum for x=0,1,2,3... * Reflects the n=1 case, because higher n need less terms. */ static int kLim[] = {0, 0, 0, 13, 10, 8, 7, 6, 5, 5, 4, 4, 4, 3} ; const int kmax = (static_cast(x) < static_cast( sizeof(kLim) / sizeof(int))) ? kLim[static_cast(x)] : 3 ; /* Abramowitz Stegun 27.1.2 */ for(int k = 1; k <= kmax ; k++) { /* do not use x(k+1)=xk+x to avoid loss of precision */ const double xk = x * k ; double ksum = 1. / xk ; double tmp = n * ksum / xk ; /* n/(xk)^2 */ for (int s = 1 ; s <= n ; s++) { ksum += tmp ; tmp *= (n - s) / xk ; } sum -= exp(-xk) * ksum * pow(x, n + 1.) ; } return sum ; } else { static double koeff[] = { 0., 1.289868133696452872944830333292e+00, 1.646464674222763830320073930823e-01, 3.468612396889827942903585958184e-02, 8.154712395888678757370477017305e-03, 1.989150255636170674291917800638e-03, 4.921731066160965972759960954793e-04, 1.224962701174096585170902102707e-04, 3.056451881730374346514297527344e-05, 7.634586529999679712923289243879e-06, 1.907924067745592226304077366899e-06, 4.769010054554659800072963735060e-07, 1.192163781025189592248804158716e-07, 2.980310965673008246931701326140e-08, 7.450668049576914109638408036805e-09, 1.862654864839336365743529470042e-09, 4.656623667353010984002911951881e-10, 1.164154417580540177848737197821e-10, 2.910384378208396847185926449064e-11, 7.275959094757302380474472711747e-12, 1.818989568052777856506623677390e-12, 4.547473691649305030453643155957e-13, 1.136868397525517121855436593505e-13, 2.842170965606321353966861428348e-14, 7.105427382674227346596939068119e-15, 1.776356842186163180619218277278e-15, 4.440892101596083967998640188409e-16, 1.110223024969096248744747318102e-16, 2.775557561945046552567818981300e-17, 6.938893904331845249488542992219e-18, 1.734723476023986745668411013469e-18, 4.336808689994439570027820336642e-19, 1.084202172491329082183740080878e-19, 2.710505431220232916297046799365e-20, 6.776263578041593636171406200902e-21, 1.694065894509399669649398521836e-21, 4.235164736272389463688418879636e-22, 1.058791184067974064762782460584e-22, 2.646977960169798160618902050189e-23, 6.617444900424343177893912768629e-24, 1.654361225106068880734221123349e-24, 4.135903062765153408791935838694e-25, 1.033975765691286264082026643327e-25, 2.584939414228213340076225223666e-26, 6.462348535570530772269628236053e-27, 1.615587133892632406631747637268e-27, 4.038967834731580698317525293132e-28, 1.009741958682895139216954234507e-28, 2.524354896707237808750799932127e-29, 6.310887241768094478219682436680e-30, 1.577721810442023614704107565240e-30, 3.944304526105059031370476640000e-31, 9.860761315262647572437533499000e-32, 2.465190328815661892443976898000e-32, 6.162975822039154730370601500000e-33, 1.540743955509788682510501190000e-33, 3.851859888774471706184973900000e-34, 9.629649721936179265360991000000e-35, 2.407412430484044816328953000000e-35, 6.018531076210112040809600000000e-36, 1.504632769052528010200750000000e-36, 3.761581922631320025497600000000e-37, 9.403954806578300063715000000000e-38, 2.350988701644575015901000000000e-38, 5.877471754111437539470000000000e-39, 1.469367938527859384580000000000e-39, 3.673419846319648458500000000000e-40, 9.183549615799121117000000000000e-41, 2.295887403949780249000000000000e-41, 5.739718509874450320000000000000e-42, 1.434929627468612270000000000000e-42 } ; double sum = 0. ; /* Abramowitz-Stegun 27.1.1 */ const double x2pi = x * M_1_2PI ; for(int k = 1; k < static_cast(sizeof(koeff) / sizeof(double)) - 1 ; k++) { const double sumold = sum ; /* do not precompute x2pi^2 to avoid loss of precision */ sum += (2. + koeff[k]) * pow(x2pi, 2.*k) / (2 * k + n) ; k++ ; sum -= (2. + koeff[k]) * pow(x2pi, 2.*k) / (2 * k + n) ; if(sum == sumold) break ; } sum += 1. / n - x / (2 * (1 + n)) ; return sum * pow(x, (double)n) ; } } #undef M_1_2PI openturns-1.9/lib/src/Base/Func/SpecFunc/ExponentialIntegralFunctions.cxx000066400000000000000000000105201307543307100266220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the exponential integral function * for complex arguments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ExponentialIntegralFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /* Algorithms to compute the Exponential Integral function as described in: Vincent Pegoraro and Philipp Slusallek, On the Evaluation of the Complex-Valued Exponential Integral, Journal of Graphics, GPU, and Game Tools, 15(3), 183-198, 2011. */ namespace ExponentialIntegralFunctions { Bool hasConverged(const Complex & current, const Complex & previous) { return (std::abs(std::real(current) - std::real(previous)) <= SpecFunc::Precision * std::abs(std::real(current))) && (std::abs(std::imag(current) - std::imag(previous)) <= SpecFunc::Precision * std::abs(std::imag(current))); } inline Scalar sign(const Scalar x) { return (x > 0.0) - (x < 0.0); } Complex Ei(const Complex & z) { const Scalar absZ = std::abs(z); if (absZ >= SpecFunc::LogMaxScalar) return std::exp(z) / z + Complex(0.0, sign(std::imag(z)) * M_PI); if (absZ > 2.0 - 1.035 * std::log(SpecFunc::Precision)) return EiAsymptoticSeries(z); if ((absZ > 1.0) && ((std::real(z) < 0.0) || (std::abs(std::imag(z)) > 1.0))) return EiContinuedFractionForward(z); if (absZ > 0.0) return EiPowerSeries(z); return SpecFunc::LogMinScalar; } Scalar Ei(const Scalar z) { return std::real(Ei(Complex(z, 0.0))); } Complex EiPowerSeries(const Complex & z) { Complex ei(SpecFunc::EulerConstant + std::log(std::abs(z)), std::abs(std::arg(z)) * sign(std::imag(z))); Complex tmp(1.0); for (UnsignedInteger k = 1; k < SpecFunc::MaximumIteration; ++k) { tmp *= z / static_cast(k); const Complex old(ei); ei += tmp / static_cast(k); if (hasConverged(ei, old)) break; } return ei; } Scalar EiPowerSeries(const Scalar z) { return real(EiPowerSeries(Complex(z, 0.0))); } Complex EiAsymptoticSeries(const Complex & z) { Complex ei(0.0, sign(std::imag(z) * M_PI)); Complex tmp(std::exp(z) / z); for (UnsignedInteger k = 1; k <= std::floor(std::abs(z)) + 1; ++k) { const Complex old(ei); ei += tmp; if (hasConverged(ei, old)) break; tmp *= static_cast(k) / z; } return ei; } Scalar EiAsymptoticSeries(const Scalar z) { return std::real(EiAsymptoticSeries(Complex(z, 0.0))); } Complex EiContinuedFractionBackward(const Complex & z) { Complex ei(0.0); for (UnsignedInteger k = SpecFunc::MaximumIteration; k >= 1; --k) ei = - static_cast(k) / (2.0 + (1.0 - z + ei) / static_cast(k)); return -std::exp(z) / (1.0 - z + ei) + Complex(0.0, sign(std::imag(z))); } Scalar EiContinuedFractionBackward(const Scalar z) { return std::real(EiContinuedFractionBackward(Complex(z, 0.0))); } Complex EiContinuedFractionForward(const Complex & z) { Complex ei(0.0, sign(std::imag(z)) * M_PI); Complex c(0.0); Complex d(1.0 / (1.0 - z)); if (ei != 0.0) { c = 1.0 / (1.0 - z - std::exp(z) / ei); ei *= d / c; } else { ei = -d * std::exp(z); } for (UnsignedInteger k = 1; k <= SpecFunc::MaximumIteration; ++k) { const Scalar l = 2 * k + 1; const Scalar k2 = k * k; c = 1.0 / (l - z - k2 * c); d = 1.0 / (l - z - k2 * d); const Complex old(ei); ei *= d / c; if (hasConverged(ei, old)) break; } return ei; } Scalar EiContinuedFractionForward(const Scalar z) { return std::real(EiContinuedFractionBackward(Complex(z, 0.0))); } } // ExponentialIntegralFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/Faddeeva.cc000066400000000000000000003663131307543307100222550ustar00rootroot00000000000000// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; -*- /* Copyright (c) 2012 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* (Note that this file can be compiled with either C++, in which case it uses C++ std::complex, or C, in which case it uses C99 double complex.) */ /* Available at: http://ab-initio.mit.edu/Faddeeva Computes various error functions (erf, erfc, erfi, erfcx), including the Dawson integral, in the complex plane, based on algorithms for the computation of the Faddeeva function w(z) = exp(-z^2) * erfc(-i*z). Given w(z), the error functions are mostly straightforward to compute, except for certain regions where we have to switch to Taylor expansions to avoid cancellation errors [e.g. near the origin for erf(z)]. To compute the Faddeeva function, we use a combination of two algorithms: For sufficiently large |z|, we use a continued-fraction expansion for w(z) similar to those described in: Walter Gautschi, "Efficient computation of the complex error function," SIAM J. Numer. Anal. 7(1), pp. 187-198 (1970) G. P. M. Poppe and C. M. J. Wijers, "More efficient computation of the complex error function," ACM Trans. Math. Soft. 16(1), pp. 38-46 (1990). Unlike those papers, however, we switch to a completely different algorithm for smaller |z|: Mofreh R. Zaghloul and Ahmed N. Ali, "Algorithm 916: Computing the Faddeyeva and Voigt Functions," ACM Trans. Math. Soft. 38(2), 15 (2011). (I initially used this algorithm for all z, but it turned out to be significantly slower than the continued-fraction expansion for larger |z|. On the other hand, it is competitive for smaller |z|, and is significantly more accurate than the Poppe & Wijers code in some regions, e.g. in the vicinity of z=1+1i.) Note that this is an INDEPENDENT RE-IMPLEMENTATION of these algorithms, based on the description in the papers ONLY. In particular, I did not refer to the authors' Fortran or Matlab implementations, respectively, (which are under restrictive ACM copyright terms and therefore unusable in free/open-source software). Steven G. Johnson, Massachusetts Institute of Technology http://math.mit.edu/~stevenj October 2012. -- Note that Algorithm 916 assumes that the erfc(x) function, or rather the scaled function erfcx(x) = exp(x*x)*erfc(x), is supplied for REAL arguments x. I originally used an erfcx routine derived from DERFC in SLATEC, but I have since replaced it with a much faster routine written by me which uses a combination of continued-fraction expansions and a lookup table of Chebyshev polynomials. For speed, I implemented a similar algorithm for Im[w(x)] of real x, since this comes up frequently in the other error functions. A small test program is included the end, which checks the w(z) etc. results against several known values. To compile the test function, compile with -DTEST_FADDEEVA (that is, #define TEST_FADDEEVA). If HAVE_CONFIG_H is #defined (e.g. by compiling with -DHAVE_CONFIG_H), then we #include "config.h", which is assumed to be a GNU autoconf-style header defining HAVE_* macros to indicate the presence of features. In particular, if HAVE_ISNAN and HAVE_ISINF are #defined, we use those functions in math.h instead of defining our own, and if HAVE_ERF and/or HAVE_ERFC are defined we use those functions from for erf and erfc of real arguments, respectively, instead of defining our own. REVISION HISTORY: 4 October 2012: Initial public release (SGJ) 5 October 2012: Revised (SGJ) to fix spelling error, start summation for large x at round(x/a) (> 1) rather than ceil(x/a) as in the original paper, which should slightly improve performance (and, apparently, slightly improves accuracy) 19 October 2012: Revised (SGJ) to fix bugs for large x, large -y, and 15 1e154. Set relerr argument to min(relerr,0.1). 27 October 2012: Enhance accuracy in Re[w(z)] taken by itself, by switching to Alg. 916 in a region near the real-z axis where continued fractions have poor relative accuracy in Re[w(z)]. Thanks to M. Zaghloul for the tip. 29 October 2012: Replace SLATEC-derived erfcx routine with completely rewritten code by me, using a very different algorithm which is much faster. 30 October 2012: Implemented special-case code for real z (where real part is exp(-x^2) and imag part is Dawson integral), using algorithm similar to erfx. Export ImFaddeeva_w function to make Dawson's integral directly accessible. 3 November 2012: Provide implementations of erf, erfc, erfcx, and Dawson functions in Faddeeva:: namespace, in addition to Faddeeva::w. Provide header file Faddeeva.hh. 4 November 2012: Slightly faster erf for real arguments. Updated MATLAB and Octave plugins. 27 November 2012: Support compilation with either C++ or plain C (using C99 complex numbers). For real x, use standard-library erf(x) and erfc(x) if available (for C99 or C++11). #include "config.h" if HAVE_CONFIG_H is #defined. 15 December 2012: Portability fixes (copysign, Inf/NaN creation), use CMPLX/__builtin_complex if available in C, slight accuracy improvements to erf and dawson functions near the origin. Use gnulib functions if GNULIB_NAMESPACE is defined. 18 December 2012: Slight tweaks (remove recomputation of x*x in Dawson) */ ///////////////////////////////////////////////////////////////////////// /* If this file is compiled as a part of a larger project, support using an autoconf-style config.h header file (with various "HAVE_*" #defines to indicate features) if HAVE_CONFIG_H is #defined (in GNU autotools style). */ /* #ifdef HAVE_CONFIG_H # include "config.h" #endif */ ///////////////////////////////////////////////////////////////////////// // macros to allow us to use either C++ or C (with C99 features) #ifdef __cplusplus # include "Faddeeva.hh" # include # include # include using namespace std; // use std::numeric_limits, since 1./0. and 0./0. fail with some compilers (MS) # define Inf numeric_limits::infinity() # define NaN numeric_limits::quiet_NaN() typedef complex cmplx; // Use C-like complex syntax, since the C syntax is more restrictive # define cexp(z) exp(z) # define creal(z) real(z) # define cimag(z) imag(z) # define cpolar(r,t) polar(r,t) # define C(a,b) cmplx(a,b) # define FADDEEVA(name) Faddeeva::name # define FADDEEVA_RE(name) Faddeeva::name // isnan/isinf were introduced in C++11 # if (__cplusplus < 201103L) && (!defined(HAVE_ISNAN) || !defined(HAVE_ISINF)) static inline bool my_isnan(double x) { return x != x; } # define isnan my_isnan static inline bool my_isinf(double x) { return 1/x == 0.; } # define isinf my_isinf # elif (__cplusplus >= 201103L) // g++ gets confused between the C and C++ isnan/isinf functions # define isnan std::isnan # define isinf std::isinf # endif // copysign was introduced in C++11 (and is also in POSIX and C99) # if defined(_WIN32) || defined(__WIN32__) # define copysign _copysign // of course MS had to be different # elif defined(GNULIB_NAMESPACE) // we are using using gnulib # define copysign GNULIB_NAMESPACE::copysign # elif (__cplusplus < 201103L) && !defined(HAVE_COPYSIGN) && !defined(__linux__) && !(defined(__APPLE__) && defined(__MACH__)) && !defined(_AIX) static inline double my_copysign(double x, double y) { return y<0 ? -x : x; } # define copysign my_copysign # endif // If we are using the gnulib (e.g. in the GNU Octave sources), // gnulib generates a link warning if we use ::floor instead of gnulib::floor. // This warning is completely innocuous because the only difference between // gnulib::floor and the system ::floor (and only on ancient OSF systems) // has to do with floor(-0), which doesn't occur in the usage below, but // the Octave developers prefer that we silence the warning. # ifdef GNULIB_NAMESPACE # define floor GNULIB_NAMESPACE::floor # endif #else // !__cplusplus, i.e. pure C (requires C99 features) # include "Faddeeva.h" # define _GNU_SOURCE // enable GNU libc NAN extension if possible # include # include typedef double complex cmplx; # define FADDEEVA(name) Faddeeva_ ## name # define FADDEEVA_RE(name) Faddeeva_ ## name ## _re /* Constructing complex numbers like 0+i*NaN is problematic in C99 without the C11 CMPLX macro, because 0.+I*NAN may give NaN+i*NAN if I is a complex (rather than imaginary) constant. For some reason, however, it works fine in (pre-4.7) gcc if I define Inf and NaN as 1/0 and 0/0 (and only if I compile with optimization -O1 or more), but not if I use the INFINITY or NAN macros. */ /* __builtin_complex was introduced in gcc 4.7, but the C11 CMPLX macro may not be defined unless we are using a recent (2012) version of glibc and compile with -std=c11... note that icc lies about being gcc and probably doesn't have this builtin(?), so exclude icc explicitly */ # if !defined(CMPLX) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !(defined(__ICC) || defined(__INTEL_COMPILER)) # define CMPLX(a,b) __builtin_complex((double) (a), (double) (b)) # endif # ifdef CMPLX // C11 # define C(a,b) CMPLX(a,b) # define Inf INFINITY // C99 infinity # ifdef NAN // GNU libc extension # define NaN NAN # else # define NaN (0./0.) // NaN # endif # else # define C(a,b) ((a) + I*(b)) # define Inf (1./0.) # define NaN (0./0.) # endif static inline cmplx cpolar(double r, double t) { if (r == 0.0 && !isnan(t)) return 0.0; else return C(r * cos(t), r * sin(t)); } #endif // !__cplusplus, i.e. pure C (requires C99 features) ///////////////////////////////////////////////////////////////////////// // Auxiliary routines to compute other special functions based on w(z) // compute erfcx(z) = exp(z^2) erfz(z) cmplx FADDEEVA(erfcx)(cmplx z, double relerr) { return FADDEEVA(w)(C(-cimag(z), creal(z)), relerr); } // compute the error function erf(x) double FADDEEVA_RE(erf)(double x) { #if !defined(__cplusplus) return erf(x); // C99 supplies erf in math.h #elif (__cplusplus >= 201103L) || defined(HAVE_ERF) return ::erf(x); // C++11 supplies std::erf in cmath #else double mx2 = -x*x; if (mx2 < -750) // underflow return (x >= 0 ? 1.0 : -1.0); if (x >= 0) { if (x < 8e-2) goto taylor; return 1.0 - exp(mx2) * FADDEEVA_RE(erfcx)(x); } else { // x < 0 if (x > -8e-2) goto taylor; return exp(mx2) * FADDEEVA_RE(erfcx)(-x) - 1.0; } // Use Taylor series for small |x|, to avoid cancellation inaccuracy // erf(x) = 2/sqrt(pi) * x * (1 - x^2/3 + x^4/10 - x^6/42 + x^8/216 + ...) taylor: return x * (1.1283791670955125739 + mx2 * (0.37612638903183752464 + mx2 * (0.11283791670955125739 + mx2 * (0.026866170645131251760 + mx2 * 0.0052239776254421878422)))); #endif } // compute the error function erf(z) cmplx FADDEEVA(erf)(cmplx z, double relerr) { double x = creal(z), y = cimag(z); if (y == 0) return C(FADDEEVA_RE(erf)(x), y); // preserve sign of 0 if (x == 0) // handle separately for speed & handling of y = Inf or NaN return C(x, // preserve sign of 0 /* handle y -> Inf limit manually, since exp(y^2) -> Inf but Im[w(y)] -> 0, so IEEE will give us a NaN when it should be Inf */ y*y > 720 ? (y > 0 ? Inf : -Inf) : exp(y*y) * FADDEEVA(w_im)(y)); double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow double mIm_z2 = -2*x*y; // Im(-z^2) if (mRe_z2 < -750) // underflow return (x >= 0 ? 1.0 : -1.0); /* Handle positive and negative x via different formulas, using the mirror symmetries of w, to avoid overflow/underflow problems from multiplying exponentially large and small quantities. */ if (x >= 0) { if (x < 8e-2) { if (fabs(y) < 1e-2) goto taylor; else if (fabs(mIm_z2) < 5e-3 && x < 5e-3) goto taylor_erfi; } /* don't use complex exp function, since that will produce spurious NaN values when multiplying w in an overflow situation. */ return 1.0 - exp(mRe_z2) * (C(cos(mIm_z2), sin(mIm_z2)) * FADDEEVA(w)(C(-y,x), relerr)); } else { // x < 0 if (x > -8e-2) { // duplicate from above to avoid fabs(x) call if (fabs(y) < 1e-2) goto taylor; else if (fabs(mIm_z2) < 5e-3 && x > -5e-3) goto taylor_erfi; } else if (isnan(x)) return C(NaN, y == 0 ? 0 : NaN); /* don't use complex exp function, since that will produce spurious NaN values when multiplying w in an overflow situation. */ return exp(mRe_z2) * (C(cos(mIm_z2), sin(mIm_z2)) * FADDEEVA(w)(C(y,-x), relerr)) - 1.0; } // Use Taylor series for small |z|, to avoid cancellation inaccuracy // erf(z) = 2/sqrt(pi) * z * (1 - z^2/3 + z^4/10 - z^6/42 + z^8/216 + ...) taylor: { cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2 return z * (1.1283791670955125739 + mz2 * (0.37612638903183752464 + mz2 * (0.11283791670955125739 + mz2 * (0.026866170645131251760 + mz2 * 0.0052239776254421878422)))); } /* for small |x| and small |xy|, use Taylor series to avoid cancellation inaccuracy: erf(x+iy) = erf(iy) + 2*exp(y^2)/sqrt(pi) * [ x * (1 - x^2 * (1+2y^2)/3 + x^4 * (3+12y^2+4y^4)/30 + ... - i * x^2 * y * (1 - x^2 * (3+2y^2)/6 + ...) ] where: erf(iy) = exp(y^2) * Im[w(y)] */ taylor_erfi: { double x2 = x*x, y2 = y*y; double expy2 = exp(y2); return C (expy2 * x * (1.1283791670955125739 - x2 * (0.37612638903183752464 + 0.75225277806367504925*y2) + x2*x2 * (0.11283791670955125739 + y2 * (0.45135166683820502956 + 0.15045055561273500986*y2))), expy2 * (FADDEEVA(w_im)(y) - x2*y * (1.1283791670955125739 - x2 * (0.56418958354775628695 + 0.37612638903183752464*y2)))); } } // erfi(z) = -i erf(iz) cmplx FADDEEVA(erfi)(cmplx z, double relerr) { cmplx e = FADDEEVA(erf)(C(-cimag(z),creal(z)), relerr); return C(cimag(e), -creal(e)); } // erfi(x) = -i erf(ix) double FADDEEVA_RE(erfi)(double x) { return x*x > 720 ? (x > 0 ? Inf : -Inf) : exp(x*x) * FADDEEVA(w_im)(x); } // erfc(x) = 1 - erf(x) double FADDEEVA_RE(erfc)(double x) { #if !defined(__cplusplus) return erfc(x); // C99 supplies erfc in math.h #elif (__cplusplus >= 201103L) || defined(HAVE_ERFC) return ::erfc(x); // C++11 supplies std::erfc in cmath #else if (x*x > 750) // underflow return (x >= 0 ? 0.0 : 2.0); return x >= 0 ? exp(-x*x) * FADDEEVA_RE(erfcx)(x) : 2. - exp(-x*x) * FADDEEVA_RE(erfcx)(-x); #endif } // erfc(z) = 1 - erf(z) cmplx FADDEEVA(erfc)(cmplx z, double relerr) { double x = creal(z), y = cimag(z); if (x == 0.) return C(1, /* handle y -> Inf limit manually, since exp(y^2) -> Inf but Im[w(y)] -> 0, so IEEE will give us a NaN when it should be Inf */ y*y > 720 ? (y > 0 ? -Inf : Inf) : -exp(y*y) * FADDEEVA(w_im)(y)); if (y == 0.) { if (x*x > 750) // underflow return C(x >= 0 ? 0.0 : 2.0, -y); // preserve sign of 0 return C(x >= 0 ? exp(-x*x) * FADDEEVA_RE(erfcx)(x) : 2. - exp(-x*x) * FADDEEVA_RE(erfcx)(-x), -y); // preserve sign of zero } double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow double mIm_z2 = -2*x*y; // Im(-z^2) if (mRe_z2 < -750) // underflow return (x >= 0 ? 0.0 : 2.0); if (x >= 0) return cexp(C(mRe_z2, mIm_z2)) * FADDEEVA(w)(C(-y,x), relerr); else return 2.0 - cexp(C(mRe_z2, mIm_z2)) * FADDEEVA(w)(C(y,-x), relerr); } // compute Dawson(x) = sqrt(pi)/2 * exp(-x^2) * erfi(x) double FADDEEVA_RE(Dawson)(double x) { const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2 return spi2 * FADDEEVA(w_im)(x); } // compute Dawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) cmplx FADDEEVA(Dawson)(cmplx z, double relerr) { const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2 double x = creal(z), y = cimag(z); // handle axes separately for speed & proper handling of x or y = Inf or NaN if (y == 0) return C(spi2 * FADDEEVA(w_im)(x), -y); // preserve sign of 0 if (x == 0) { double y2 = y*y; if (y2 < 2.5e-5) { // Taylor expansion return C(x, // preserve sign of 0 y * (1. + y2 * (0.6666666666666666666666666666666666666667 + y2 * 0.26666666666666666666666666666666666667))); } return C(x, // preserve sign of 0 spi2 * (y >= 0 ? exp(y2) - FADDEEVA_RE(erfcx)(y) : FADDEEVA_RE(erfcx)(-y) - exp(y2))); } double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow double mIm_z2 = -2*x*y; // Im(-z^2) cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2 /* Handle positive and negative x via different formulas, using the mirror symmetries of w, to avoid overflow/underflow problems from multiplying exponentially large and small quantities. */ if (y >= 0) { if (y < 5e-3) { if (fabs(x) < 5e-3) goto taylor; else if (fabs(mIm_z2) < 5e-3) goto taylor_realaxis; } cmplx res = cexp(mz2) - FADDEEVA(w)(z, relerr); return spi2 * C(-cimag(res), creal(res)); } else { // y < 0 if (y > -5e-3) { // duplicate from above to avoid fabs(x) call if (fabs(x) < 5e-3) goto taylor; else if (fabs(mIm_z2) < 5e-3) goto taylor_realaxis; } else if (isnan(y)) return C(x == 0 ? 0 : NaN, NaN); cmplx res = FADDEEVA(w)(-z, relerr) - cexp(mz2); return spi2 * C(-cimag(res), creal(res)); } // Use Taylor series for small |z|, to avoid cancellation inaccuracy // dawson(z) = z - 2/3 z^3 + 4/15 z^5 + ... taylor: return z * (1. + mz2 * (0.6666666666666666666666666666666666666667 + mz2 * 0.2666666666666666666666666666666666666667)); /* for small |y| and small |xy|, use Taylor series to avoid cancellation inaccuracy: dawson(x + iy) = D + y^2 (D + x - 2Dx^2) + y^4 (D/2 + 5x/6 - 2Dx^2 - x^3/3 + 2Dx^4/3) + iy [ (1-2Dx) + 2/3 y^2 (1 - 3Dx - x^2 + 2Dx^3) + y^4/15 (4 - 15Dx - 9x^2 + 20Dx^3 + 2x^4 - 4Dx^5) ] + ... where D = dawson(x) However, for large |x|, 2Dx -> 1 which gives cancellation problems in this series (many of the leading terms cancel). So, for large |x|, we need to substitute a continued-fraction expansion for D. dawson(x) = 0.5 / (x-0.5/(x-1/(x-1.5/(x-2/(x-2.5/(x...)))))) The 6 terms shown here seems to be the minimum needed to be accurate as soon as the simpler Taylor expansion above starts breaking down. Using this 6-term expansion, factoring out the denominator, and simplifying with Maple, we obtain: Re dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / x = 33 - 28x^2 + 4x^4 + y^2 (18 - 4x^2) + 4 y^4 Im dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / y = -15 + 24x^2 - 4x^4 + 2/3 y^2 (6x^2 - 15) - 4 y^4 Finally, for |x| > 5e7, we can use a simpler 1-term continued-fraction expansion for the real part, and a 2-term expansion for the imaginary part. (This avoids overflow problems for huge |x|.) This yields: Re dawson(x + iy) = [1 + y^2 (1 + y^2/2 - (xy)^2/3)] / (2x) Im dawson(x + iy) = y [ -1 - 2/3 y^2 + y^4/15 (2x^2 - 4) ] / (2x^2 - 1) */ taylor_realaxis: { double x2 = x*x; if (x2 > 1600) { // |x| > 40 double y2 = y*y; if (x2 > 25e14) {// |x| > 5e7 double xy2 = (x*y)*(x*y); return C((0.5 + y2 * (0.5 + 0.25*y2 - 0.16666666666666666667*xy2)) / x, y * (-1 + y2 * (-0.66666666666666666667 + 0.13333333333333333333*xy2 - 0.26666666666666666667*y2)) / (2*x2 - 1)); } return (1. / (-15 + x2*(90 + x2*(-60 + 8*x2)))) * C(x * (33 + x2 * (-28 + 4*x2) + y2 * (18 - 4*x2 + 4*y2)), y * (-15 + x2 * (24 - 4*x2) + y2 * (4*x2 - 10 - 4*y2))); } else { double D = spi2 * FADDEEVA(w_im)(x); double y2 = y*y; return C (D + y2 * (D + x - 2*D*x2) + y2*y2 * (D * (0.5 - x2 * (2 - 0.66666666666666666667*x2)) + x * (0.83333333333333333333 - 0.33333333333333333333 * x2)), y * (1 - 2*D*x + y2 * 0.66666666666666666667 * (1 - x2 - D*x * (3 - 2*x2)) + y2*y2 * (0.26666666666666666667 - x2 * (0.6 - 0.13333333333333333333 * x2) - D*x * (1 - x2 * (1.3333333333333333333 - 0.26666666666666666667 * x2))))); } } } ///////////////////////////////////////////////////////////////////////// // return sinc(x) = sin(x)/x, given both x and sin(x) // [since we only use this in cases where sin(x) has already been computed] static inline double sinc(double x, double sinx) { return fabs(x) < 1e-4 ? 1 - (0.1666666666666666666667)*x*x : sinx / x; } // sinh(x) via Taylor series, accurate to machine precision for |x| < 1e-2 static inline double sinh_taylor(double x) { return x * (1 + (x*x) * (0.1666666666666666666667 + 0.00833333333333333333333 * (x*x))); } static inline double sqr(double x) { return x*x; } // precomputed table of expa2n2[n-1] = exp(-a2*n*n) // for double-precision a2 = 0.26865... in FADDEEVA(w), below. static const double expa2n2[] = { 7.64405281671221563e-01, 3.41424527166548425e-01, 8.91072646929412548e-02, 1.35887299055460086e-02, 1.21085455253437481e-03, 6.30452613933449404e-05, 1.91805156577114683e-06, 3.40969447714832381e-08, 3.54175089099469393e-10, 2.14965079583260682e-12, 7.62368911833724354e-15, 1.57982797110681093e-17, 1.91294189103582677e-20, 1.35344656764205340e-23, 5.59535712428588720e-27, 1.35164257972401769e-30, 1.90784582843501167e-34, 1.57351920291442930e-38, 7.58312432328032845e-43, 2.13536275438697082e-47, 3.51352063787195769e-52, 3.37800830266396920e-57, 1.89769439468301000e-62, 6.22929926072668851e-68, 1.19481172006938722e-73, 1.33908181133005953e-79, 8.76924303483223939e-86, 3.35555576166254986e-92, 7.50264110688173024e-99, 9.80192200745410268e-106, 7.48265412822268959e-113, 3.33770122566809425e-120, 8.69934598159861140e-128, 1.32486951484088852e-135, 1.17898144201315253e-143, 6.13039120236180012e-152, 1.86258785950822098e-160, 3.30668408201432783e-169, 3.43017280887946235e-178, 2.07915397775808219e-187, 7.36384545323984966e-197, 1.52394760394085741e-206, 1.84281935046532100e-216, 1.30209553802992923e-226, 5.37588903521080531e-237, 1.29689584599763145e-247, 1.82813078022866562e-258, 1.50576355348684241e-269, 7.24692320799294194e-281, 2.03797051314726829e-292, 3.34880215927873807e-304, 0.0 // underflow (also prevents reads past array end, below) }; ///////////////////////////////////////////////////////////////////////// cmplx FADDEEVA(w)(cmplx z, double relerr) { if (creal(z) == 0.0) return C(FADDEEVA_RE(erfcx)(cimag(z)), creal(z)); // give correct sign of 0 in cimag(w) else if (cimag(z) == 0) return C(exp(-sqr(creal(z))), FADDEEVA(w_im)(creal(z))); double a, a2, c; if (relerr <= DBL_EPSILON) { relerr = DBL_EPSILON; a = 0.518321480430085929872; // pi / sqrt(-log(eps*0.5)) c = 0.329973702884629072537; // (2/pi) * a; a2 = 0.268657157075235951582; // a^2 } else { const double pi = 3.14159265358979323846264338327950288419716939937510582; if (relerr > 0.1) relerr = 0.1; // not sensible to compute < 1 digit a = pi / sqrt(-log(relerr*0.5)); c = (2/pi)*a; a2 = a*a; } const double x = fabs(creal(z)); const double y = cimag(z), ya = fabs(y); cmplx ret = 0.; // return value double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0; #define USE_CONTINUED_FRACTION 1 // 1 to use continued fraction for large |z| #if USE_CONTINUED_FRACTION if (ya > 7 || (x > 6 // continued fraction is faster /* As pointed out by M. Zaghloul, the continued fraction seems to give a large relative error in Re w(z) for |x| ~ 6 and small |y|, so use algorithm 816 in this region: */ && (ya > 0.1 || (x > 8 && ya > 1e-10) || x > 28))) { /* Poppe & Wijers suggest using a number of terms nu = 3 + 1442 / (26*rho + 77) where rho = sqrt((x/x0)^2 + (y/y0)^2) where x0=6.3, y0=4.4. (They only use this expansion for rho >= 1, but rho a little less than 1 seems okay too.) Instead, I did my own fit to a slightly different function that avoids the hypotenuse calculation, using NLopt to minimize the sum of the squares of the errors in nu with the constraint that the estimated nu be >= minimum nu to attain machine precision. I also separate the regions where nu == 2 and nu == 1. */ const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0 if (x + ya > 4000) { // nu <= 2 if (x + ya > 1e7) { // nu == 1, w(z) = i/sqrt(pi) / z // scale to avoid overflow if (x > ya) { double yax = ya / xs; double denom = ispi / (xs + yax*ya); ret = C(denom*yax, denom); } else if (isinf(ya)) return ((isnan(x) || y < 0) ? C(NaN,NaN) : C(0,0)); else { double xya = xs / ya; double denom = ispi / (xya*xs + ya); ret = C(denom, denom*xya); } } else { // nu == 2, w(z) = i/sqrt(pi) * z / (z*z - 0.5) double dr = xs*xs - ya*ya - 0.5, di = 2*xs*ya; double denom = ispi / (dr*dr + di*di); ret = C(denom * (xs*di-ya*dr), denom * (xs*dr+ya*di)); } } else { // compute nu(z) estimate and do general continued fraction const double c0=3.9, c1=11.398, c2=0.08254, c3=0.1421, c4=0.2023; // fit double nu = floor(c0 + c1 / (c2*x + c3*ya + c4)); double wr = xs, wi = ya; for (nu = 0.5 * (nu - 1); nu > 0.4; nu -= 0.5) { // w <- z - nu/w: double denom = nu / (wr*wr + wi*wi); wr = xs - wr * denom; wi = ya + wi * denom; } { // w(z) = i/sqrt(pi) / w: double denom = ispi / (wr*wr + wi*wi); ret = C(denom*wi, denom*wr); } } if (y < 0) { // use w(z) = 2.0*exp(-z*z) - w(-z), // but be careful of overflow in exp(-z*z) // = exp(-(xs*xs-ya*ya) -2*i*xs*ya) return 2.0*cexp(C((ya-xs)*(xs+ya), 2*xs*y)) - ret; } else return ret; } #else // !USE_CONTINUED_FRACTION if (x + ya > 1e7) { // w(z) = i/sqrt(pi) / z, to machine precision const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0 // scale to avoid overflow if (x > ya) { double yax = ya / xs; double denom = ispi / (xs + yax*ya); ret = C(denom*yax, denom); } else { double xya = xs / ya; double denom = ispi / (xya*xs + ya); ret = C(denom, denom*xya); } if (y < 0) { // use w(z) = 2.0*exp(-z*z) - w(-z), // but be careful of overflow in exp(-z*z) // = exp(-(xs*xs-ya*ya) -2*i*xs*ya) return 2.0*cexp(C((ya-xs)*(xs+ya), 2*xs*y)) - ret; } else return ret; } #endif // !USE_CONTINUED_FRACTION /* Note: The test that seems to be suggested in the paper is x < sqrt(-log(DBL_MIN)), about 26.6, since otherwise exp(-x^2) underflows to zero and sum1,sum2,sum4 are zero. However, long before this occurs, the sum1,sum2,sum4 contributions are negligible in double precision; I find that this happens for x > about 6, for all y. On the other hand, I find that the case where we compute all of the sums is faster (at least with the precomputed expa2n2 table) until about x=10. Furthermore, if we try to compute all of the sums for x > 20, I find that we sometimes run into numerical problems because underflow/overflow problems start to appear in the various coefficients of the sums, below. Therefore, we use x < 10 here. */ else if (x < 10) { double prod2ax = 1, prodm2ax = 1; double expx2; if (isnan(y)) return C(y,y); /* Somewhat ugly copy-and-paste duplication here, but I see significant speedups from using the special-case code with the precomputed exponential, and the x < 5e-4 special case is needed for accuracy. */ if (relerr == DBL_EPSILON) { // use precomputed exp(-a2*(n*n)) table if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4 const double x2 = x*x; expx2 = 1 - x2 * (1 - 0.5*x2); // exp(-x*x) via Taylor // compute exp(2*a*x) and exp(-2*a*x) via Taylor, to double precision const double ax2 = 1.036642960860171859744*x; // 2*a*x const double exp2ax = 1 + ax2 * (1 + ax2 * (0.5 + 0.166666666666666666667*ax2)); const double expm2ax = 1 - ax2 * (1 - ax2 * (0.5 - 0.166666666666666666667*ax2)); for (int n = 1; 1; ++n) { const double coef = expa2n2[n-1] * expx2 / (a2*(n*n) + y*y); prod2ax *= exp2ax; prodm2ax *= expm2ax; sum1 += coef; sum2 += coef * prodm2ax; sum3 += coef * prod2ax; // really = sum5 - sum4 sum5 += coef * (2*a) * n * sinh_taylor((2*a)*n*x); // test convergence via sum3 if (coef * prod2ax < relerr * sum3) break; } } else { // x > 5e-4, compute sum4 and sum5 separately expx2 = exp(-x*x); const double exp2ax = exp((2*a)*x), expm2ax = 1 / exp2ax; for (int n = 1; 1; ++n) { const double coef = expa2n2[n-1] * expx2 / (a2*(n*n) + y*y); prod2ax *= exp2ax; prodm2ax *= expm2ax; sum1 += coef; sum2 += coef * prodm2ax; sum4 += (coef * prodm2ax) * (a*n); sum3 += coef * prod2ax; sum5 += (coef * prod2ax) * (a*n); // test convergence via sum5, since this sum has the slowest decay if ((coef * prod2ax) * (a*n) < relerr * sum5) break; } } } else { // relerr != DBL_EPSILON, compute exp(-a2*(n*n)) on the fly const double exp2ax = exp((2*a)*x), expm2ax = 1 / exp2ax; if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4 const double x2 = x*x; expx2 = 1 - x2 * (1 - 0.5*x2); // exp(-x*x) via Taylor for (int n = 1; 1; ++n) { const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y); prod2ax *= exp2ax; prodm2ax *= expm2ax; sum1 += coef; sum2 += coef * prodm2ax; sum3 += coef * prod2ax; // really = sum5 - sum4 sum5 += coef * (2*a) * n * sinh_taylor((2*a)*n*x); // test convergence via sum3 if (coef * prod2ax < relerr * sum3) break; } } else { // x > 5e-4, compute sum4 and sum5 separately expx2 = exp(-x*x); for (int n = 1; 1; ++n) { const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y); prod2ax *= exp2ax; prodm2ax *= expm2ax; sum1 += coef; sum2 += coef * prodm2ax; sum4 += (coef * prodm2ax) * (a*n); sum3 += coef * prod2ax; sum5 += (coef * prod2ax) * (a*n); // test convergence via sum5, since this sum has the slowest decay if ((coef * prod2ax) * (a*n) < relerr * sum5) break; } } } const double expx2erfcxy = // avoid spurious overflow for large negative y y > -6 // for y < -6, erfcx(y) = 2*exp(y*y) to double precision ? expx2*FADDEEVA_RE(erfcx)(y) : 2*exp(y*y-x*x); if (y > 5) { // imaginary terms cancel const double sinxy = sin(x*y); ret = (expx2erfcxy - c*y*sum1) * cos(2*x*y) + (c*x*expx2) * sinxy * sinc(x*y, sinxy); } else { double xs = creal(z); const double sinxy = sin(xs*y); const double sin2xy = sin(2*xs*y), cos2xy = cos(2*xs*y); const double coef1 = expx2erfcxy - c*y*sum1; const double coef2 = c*xs*expx2; ret = C(coef1 * cos2xy + coef2 * sinxy * sinc(xs*y, sinxy), coef2 * sinc(2*xs*y, sin2xy) - coef1 * sin2xy); } } else { // x large: only sum3 & sum5 contribute (see above note) if (isnan(x)) return C(x,x); if (isnan(y)) return C(y,y); #if USE_CONTINUED_FRACTION ret = exp(-x*x); // |y| < 1e-10, so we only need exp(-x*x) term #else if (y < 0) { /* erfcx(y) ~ 2*exp(y*y) + (< 1) if y < 0, so erfcx(y)*exp(-x*x) ~ 2*exp(y*y-x*x) term may not be negligible if y*y - x*x > -36 or so. So, compute this term just in case. We also need the -exp(-x*x) term to compute Re[w] accurately in the case where y is very small. */ ret = cpolar(2*exp(y*y-x*x) - exp(-x*x), -2*creal(z)*y); } else ret = exp(-x*x); // not negligible in real part if y very small #endif // (round instead of ceil as in original paper; note that x/a > 1 here) double n0 = floor(x/a + 0.5); // sum in both directions, starting at n0 double dx = a*n0 - x; sum3 = exp(-dx*dx) / (a2*(n0*n0) + y*y); sum5 = a*n0 * sum3; double exp1 = exp(4*a*dx), exp1dn = 1; int dn; for (dn = 1; n0 - dn > 0; ++dn) { // loop over n0-dn and n0+dn terms double np = n0 + dn, nm = n0 - dn; double tp = exp(-sqr(a*dn+dx)); double tm = tp * (exp1dn *= exp1); // trick to get tm from tp tp /= (a2*(np*np) + y*y); tm /= (a2*(nm*nm) + y*y); sum3 += tp + tm; sum5 += a * (np * tp + nm * tm); if (a * (np * tp + nm * tm) < relerr * sum5) goto finish; } while (1) { // loop over n0+dn terms only (since n0-dn <= 0) double np = n0 + dn++; double tp = exp(-sqr(a*dn+dx)) / (a2*(np*np) + y*y); sum3 += tp; sum5 += a * np * tp; if (a * np * tp < relerr * sum5) goto finish; } } finish: return ret + C((0.5*c)*y*(sum2+sum3), (0.5*c)*copysign(sum5-sum4, creal(z))); } ///////////////////////////////////////////////////////////////////////// /* erfcx(x) = exp(x^2) erfc(x) function, for real x, written by Steven G. Johnson, October 2012. This function combines a few different ideas. First, for x > 50, it uses a continued-fraction expansion (same as for the Faddeeva function, but with algebraic simplifications for z=i*x). Second, for 0 <= x <= 50, it uses Chebyshev polynomial approximations, but with two twists: a) It maps x to y = 4 / (4+x) in [0,1]. This simple transformation, inspired by a similar transformation in the octave-forge/specfun erfcx by Soren Hauberg, results in much faster Chebyshev convergence than other simple transformations I have examined. b) Instead of using a single Chebyshev polynomial for the entire [0,1] y interval, we break the interval up into 100 equal subintervals, with a switch/lookup table, and use much lower degree Chebyshev polynomials in each subinterval. This greatly improves performance in my tests. For x < 0, we use the relationship erfcx(-x) = 2 exp(x^2) - erfc(x), with the usual checks for overflow etcetera. Performance-wise, it seems to be substantially faster than either the SLATEC DERFC function [or an erfcx function derived therefrom] or Cody's CALERF function (from netlib.org/specfun), while retaining near machine precision in accuracy. */ /* Given y100=100*y, where y = 4/(4+x) for x >= 0, compute erfc(x). Uses a look-up table of 100 different Chebyshev polynomials for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated with the help of Maple and a little shell script. This allows the Chebyshev polynomials to be of significantly lower degree (about 1/4) compared to fitting the whole [0,1] interval with a single polynomial. */ static double erfcx_y100(double y100) { switch ((int) y100) { case 0: { double t = 2*y100 - 1; return 0.70878032454106438663e-3 + (0.71234091047026302958e-3 + (0.35779077297597742384e-5 + (0.17403143962587937815e-7 + (0.81710660047307788845e-10 + (0.36885022360434957634e-12 + 0.15917038551111111111e-14 * t) * t) * t) * t) * t) * t; } case 1: { double t = 2*y100 - 3; return 0.21479143208285144230e-2 + (0.72686402367379996033e-3 + (0.36843175430938995552e-5 + (0.18071841272149201685e-7 + (0.85496449296040325555e-10 + (0.38852037518534291510e-12 + 0.16868473576888888889e-14 * t) * t) * t) * t) * t) * t; } case 2: { double t = 2*y100 - 5; return 0.36165255935630175090e-2 + (0.74182092323555510862e-3 + (0.37948319957528242260e-5 + (0.18771627021793087350e-7 + (0.89484715122415089123e-10 + (0.40935858517772440862e-12 + 0.17872061464888888889e-14 * t) * t) * t) * t) * t) * t; } case 3: { double t = 2*y100 - 7; return 0.51154983860031979264e-2 + (0.75722840734791660540e-3 + (0.39096425726735703941e-5 + (0.19504168704300468210e-7 + (0.93687503063178993915e-10 + (0.43143925959079664747e-12 + 0.18939926435555555556e-14 * t) * t) * t) * t) * t) * t; } case 4: { double t = 2*y100 - 9; return 0.66457513172673049824e-2 + (0.77310406054447454920e-3 + (0.40289510589399439385e-5 + (0.20271233238288381092e-7 + (0.98117631321709100264e-10 + (0.45484207406017752971e-12 + 0.20076352213333333333e-14 * t) * t) * t) * t) * t) * t; } case 5: { double t = 2*y100 - 11; return 0.82082389970241207883e-2 + (0.78946629611881710721e-3 + (0.41529701552622656574e-5 + (0.21074693344544655714e-7 + (0.10278874108587317989e-9 + (0.47965201390613339638e-12 + 0.21285907413333333333e-14 * t) * t) * t) * t) * t) * t; } case 6: { double t = 2*y100 - 13; return 0.98039537275352193165e-2 + (0.80633440108342840956e-3 + (0.42819241329736982942e-5 + (0.21916534346907168612e-7 + (0.10771535136565470914e-9 + (0.50595972623692822410e-12 + 0.22573462684444444444e-14 * t) * t) * t) * t) * t) * t; } case 7: { double t = 2*y100 - 15; return 0.11433927298290302370e-1 + (0.82372858383196561209e-3 + (0.44160495311765438816e-5 + (0.22798861426211986056e-7 + (0.11291291745879239736e-9 + (0.53386189365816880454e-12 + 0.23944209546666666667e-14 * t) * t) * t) * t) * t) * t; } case 8: { double t = 2*y100 - 17; return 0.13099232878814653979e-1 + (0.84167002467906968214e-3 + (0.45555958988457506002e-5 + (0.23723907357214175198e-7 + (0.11839789326602695603e-9 + (0.56346163067550237877e-12 + 0.25403679644444444444e-14 * t) * t) * t) * t) * t) * t; } case 9: { double t = 2*y100 - 19; return 0.14800987015587535621e-1 + (0.86018092946345943214e-3 + (0.47008265848816866105e-5 + (0.24694040760197315333e-7 + (0.12418779768752299093e-9 + (0.59486890370320261949e-12 + 0.26957764568888888889e-14 * t) * t) * t) * t) * t) * t; } case 10: { double t = 2*y100 - 21; return 0.16540351739394069380e-1 + (0.87928458641241463952e-3 + (0.48520195793001753903e-5 + (0.25711774900881709176e-7 + (0.13030128534230822419e-9 + (0.62820097586874779402e-12 + 0.28612737351111111111e-14 * t) * t) * t) * t) * t) * t; } case 11: { double t = 2*y100 - 23; return 0.18318536789842392647e-1 + (0.89900542647891721692e-3 + (0.50094684089553365810e-5 + (0.26779777074218070482e-7 + (0.13675822186304615566e-9 + (0.66358287745352705725e-12 + 0.30375273884444444444e-14 * t) * t) * t) * t) * t) * t; } case 12: { double t = 2*y100 - 25; return 0.20136801964214276775e-1 + (0.91936908737673676012e-3 + (0.51734830914104276820e-5 + (0.27900878609710432673e-7 + (0.14357976402809042257e-9 + (0.70114790311043728387e-12 + 0.32252476000000000000e-14 * t) * t) * t) * t) * t) * t; } case 13: { double t = 2*y100 - 27; return 0.21996459598282740954e-1 + (0.94040248155366777784e-3 + (0.53443911508041164739e-5 + (0.29078085538049374673e-7 + (0.15078844500329731137e-9 + (0.74103813647499204269e-12 + 0.34251892320000000000e-14 * t) * t) * t) * t) * t) * t; } case 14: { double t = 2*y100 - 29; return 0.23898877187226319502e-1 + (0.96213386835900177540e-3 + (0.55225386998049012752e-5 + (0.30314589961047687059e-7 + (0.15840826497296335264e-9 + (0.78340500472414454395e-12 + 0.36381553564444444445e-14 * t) * t) * t) * t) * t) * t; } case 15: { double t = 2*y100 - 31; return 0.25845480155298518485e-1 + (0.98459293067820123389e-3 + (0.57082915920051843672e-5 + (0.31613782169164830118e-7 + (0.16646478745529630813e-9 + (0.82840985928785407942e-12 + 0.38649975768888888890e-14 * t) * t) * t) * t) * t) * t; } case 16: { double t = 2*y100 - 33; return 0.27837754783474696598e-1 + (0.10078108563256892757e-2 + (0.59020366493792212221e-5 + (0.32979263553246520417e-7 + (0.17498524159268458073e-9 + (0.87622459124842525110e-12 + 0.41066206488888888890e-14 * t) * t) * t) * t) * t) * t; } case 17: { double t = 2*y100 - 35; return 0.29877251304899307550e-1 + (0.10318204245057349310e-2 + (0.61041829697162055093e-5 + (0.34414860359542720579e-7 + (0.18399863072934089607e-9 + (0.92703227366365046533e-12 + 0.43639844053333333334e-14 * t) * t) * t) * t) * t) * t; } case 18: { double t = 2*y100 - 37; return 0.31965587178596443475e-1 + (0.10566560976716574401e-2 + (0.63151633192414586770e-5 + (0.35924638339521924242e-7 + (0.19353584758781174038e-9 + (0.98102783859889264382e-12 + 0.46381060817777777779e-14 * t) * t) * t) * t) * t) * t; } case 19: { double t = 2*y100 - 39; return 0.34104450552588334840e-1 + (0.10823541191350532574e-2 + (0.65354356159553934436e-5 + (0.37512918348533521149e-7 + (0.20362979635817883229e-9 + (0.10384187833037282363e-11 + 0.49300625262222222221e-14 * t) * t) * t) * t) * t) * t; } case 20: { double t = 2*y100 - 41; return 0.36295603928292425716e-1 + (0.11089526167995268200e-2 + (0.67654845095518363577e-5 + (0.39184292949913591646e-7 + (0.21431552202133775150e-9 + (0.10994259106646731797e-11 + 0.52409949102222222221e-14 * t) * t) * t) * t) * t) * t; } case 21: { double t = 2*y100 - 43; return 0.38540888038840509795e-1 + (0.11364917134175420009e-2 + (0.70058230641246312003e-5 + (0.40943644083718586939e-7 + (0.22563034723692881631e-9 + (0.11642841011361992885e-11 + 0.55721092871111111110e-14 * t) * t) * t) * t) * t) * t; } case 22: { double t = 2*y100 - 45; return 0.40842225954785960651e-1 + (0.11650136437945673891e-2 + (0.72569945502343006619e-5 + (0.42796161861855042273e-7 + (0.23761401711005024162e-9 + (0.12332431172381557035e-11 + 0.59246802364444444445e-14 * t) * t) * t) * t) * t) * t; } case 23: { double t = 2*y100 - 47; return 0.43201627431540222422e-1 + (0.11945628793917272199e-2 + (0.75195743532849206263e-5 + (0.44747364553960993492e-7 + (0.25030885216472953674e-9 + (0.13065684400300476484e-11 + 0.63000532853333333334e-14 * t) * t) * t) * t) * t) * t; } case 24: { double t = 2*y100 - 49; return 0.45621193513810471438e-1 + (0.12251862608067529503e-2 + (0.77941720055551920319e-5 + (0.46803119830954460212e-7 + (0.26375990983978426273e-9 + (0.13845421370977119765e-11 + 0.66996477404444444445e-14 * t) * t) * t) * t) * t) * t; } case 25: { double t = 2*y100 - 51; return 0.48103121413299865517e-1 + (0.12569331386432195113e-2 + (0.80814333496367673980e-5 + (0.48969667335682018324e-7 + (0.27801515481905748484e-9 + (0.14674637611609884208e-11 + 0.71249589351111111110e-14 * t) * t) * t) * t) * t) * t; } case 26: { double t = 2*y100 - 53; return 0.50649709676983338501e-1 + (0.12898555233099055810e-2 + (0.83820428414568799654e-5 + (0.51253642652551838659e-7 + (0.29312563849675507232e-9 + (0.15556512782814827846e-11 + 0.75775607822222222221e-14 * t) * t) * t) * t) * t) * t; } case 27: { double t = 2*y100 - 55; return 0.53263363664388864181e-1 + (0.13240082443256975769e-2 + (0.86967260015007658418e-5 + (0.53662102750396795566e-7 + (0.30914568786634796807e-9 + (0.16494420240828493176e-11 + 0.80591079644444444445e-14 * t) * t) * t) * t) * t) * t; } case 28: { double t = 2*y100 - 57; return 0.55946601353500013794e-1 + (0.13594491197408190706e-2 + (0.90262520233016380987e-5 + (0.56202552975056695376e-7 + (0.32613310410503135996e-9 + (0.17491936862246367398e-11 + 0.85713381688888888890e-14 * t) * t) * t) * t) * t) * t; } case 29: { double t = 2*y100 - 59; return 0.58702059496154081813e-1 + (0.13962391363223647892e-2 + (0.93714365487312784270e-5 + (0.58882975670265286526e-7 + (0.34414937110591753387e-9 + (0.18552853109751857859e-11 + 0.91160736711111111110e-14 * t) * t) * t) * t) * t) * t; } case 30: { double t = 2*y100 - 61; return 0.61532500145144778048e-1 + (0.14344426411912015247e-2 + (0.97331446201016809696e-5 + (0.61711860507347175097e-7 + (0.36325987418295300221e-9 + (0.19681183310134518232e-11 + 0.96952238400000000000e-14 * t) * t) * t) * t) * t) * t; } case 31: { double t = 2*y100 - 63; return 0.64440817576653297993e-1 + (0.14741275456383131151e-2 + (0.10112293819576437838e-4 + (0.64698236605933246196e-7 + (0.38353412915303665586e-9 + (0.20881176114385120186e-11 + 0.10310784480000000000e-13 * t) * t) * t) * t) * t) * t; } case 32: { double t = 2*y100 - 65; return 0.67430045633130393282e-1 + (0.15153655418916540370e-2 + (0.10509857606888328667e-4 + (0.67851706529363332855e-7 + (0.40504602194811140006e-9 + (0.22157325110542534469e-11 + 0.10964842115555555556e-13 * t) * t) * t) * t) * t) * t; } case 33: { double t = 2*y100 - 67; return 0.70503365513338850709e-1 + (0.15582323336495709827e-2 + (0.10926868866865231089e-4 + (0.71182482239613507542e-7 + (0.42787405890153386710e-9 + (0.23514379522274416437e-11 + 0.11659571751111111111e-13 * t) * t) * t) * t) * t) * t; } case 34: { double t = 2*y100 - 69; return 0.73664114037944596353e-1 + (0.16028078812438820413e-2 + (0.11364423678778207991e-4 + (0.74701423097423182009e-7 + (0.45210162777476488324e-9 + (0.24957355004088569134e-11 + 0.12397238257777777778e-13 * t) * t) * t) * t) * t) * t; } case 35: { double t = 2*y100 - 71; return 0.76915792420819562379e-1 + (0.16491766623447889354e-2 + (0.11823685320041302169e-4 + (0.78420075993781544386e-7 + (0.47781726956916478925e-9 + (0.26491544403815724749e-11 + 0.13180196462222222222e-13 * t) * t) * t) * t) * t) * t; } case 36: { double t = 2*y100 - 73; return 0.80262075578094612819e-1 + (0.16974279491709504117e-2 + (0.12305888517309891674e-4 + (0.82350717698979042290e-7 + (0.50511496109857113929e-9 + (0.28122528497626897696e-11 + 0.14010889635555555556e-13 * t) * t) * t) * t) * t) * t; } case 37: { double t = 2*y100 - 75; return 0.83706822008980357446e-1 + (0.17476561032212656962e-2 + (0.12812343958540763368e-4 + (0.86506399515036435592e-7 + (0.53409440823869467453e-9 + (0.29856186620887555043e-11 + 0.14891851591111111111e-13 * t) * t) * t) * t) * t) * t; } case 38: { double t = 2*y100 - 77; return 0.87254084284461718231e-1 + (0.17999608886001962327e-2 + (0.13344443080089492218e-4 + (0.90900994316429008631e-7 + (0.56486134972616465316e-9 + (0.31698707080033956934e-11 + 0.15825697795555555556e-13 * t) * t) * t) * t) * t) * t; } case 39: { double t = 2*y100 - 79; return 0.90908120182172748487e-1 + (0.18544478050657699758e-2 + (0.13903663143426120077e-4 + (0.95549246062549906177e-7 + (0.59752787125242054315e-9 + (0.33656597366099099413e-11 + 0.16815130613333333333e-13 * t) * t) * t) * t) * t) * t; } case 40: { double t = 2*y100 - 81; return 0.94673404508075481121e-1 + (0.19112284419887303347e-2 + (0.14491572616545004930e-4 + (0.10046682186333613697e-6 + (0.63221272959791000515e-9 + (0.35736693975589130818e-11 + 0.17862931591111111111e-13 * t) * t) * t) * t) * t) * t; } case 41: { double t = 2*y100 - 83; return 0.98554641648004456555e-1 + (0.19704208544725622126e-2 + (0.15109836875625443935e-4 + (0.10567036667675984067e-6 + (0.66904168640019354565e-9 + (0.37946171850824333014e-11 + 0.18971959040000000000e-13 * t) * t) * t) * t) * t) * t; } case 42: { double t = 2*y100 - 85; return 0.10255677889470089531e0 + (0.20321499629472857418e-2 + (0.15760224242962179564e-4 + (0.11117756071353507391e-6 + (0.70814785110097658502e-9 + (0.40292553276632563925e-11 + 0.20145143075555555556e-13 * t) * t) * t) * t) * t) * t; } case 43: { double t = 2*y100 - 87; return 0.10668502059865093318e0 + (0.20965479776148731610e-2 + (0.16444612377624983565e-4 + (0.11700717962026152749e-6 + (0.74967203250938418991e-9 + (0.42783716186085922176e-11 + 0.21385479360000000000e-13 * t) * t) * t) * t) * t) * t; } case 44: { double t = 2*y100 - 89; return 0.11094484319386444474e0 + (0.21637548491908170841e-2 + (0.17164995035719657111e-4 + (0.12317915750735938089e-6 + (0.79376309831499633734e-9 + (0.45427901763106353914e-11 + 0.22696025653333333333e-13 * t) * t) * t) * t) * t) * t; } case 45: { double t = 2*y100 - 91; return 0.11534201115268804714e0 + (0.22339187474546420375e-2 + (0.17923489217504226813e-4 + (0.12971465288245997681e-6 + (0.84057834180389073587e-9 + (0.48233721206418027227e-11 + 0.24079890062222222222e-13 * t) * t) * t) * t) * t) * t; } case 46: { double t = 2*y100 - 93; return 0.11988259392684094740e0 + (0.23071965691918689601e-2 + (0.18722342718958935446e-4 + (0.13663611754337957520e-6 + (0.89028385488493287005e-9 + (0.51210161569225846701e-11 + 0.25540227111111111111e-13 * t) * t) * t) * t) * t) * t; } case 47: { double t = 2*y100 - 95; return 0.12457298393509812907e0 + (0.23837544771809575380e-2 + (0.19563942105711612475e-4 + (0.14396736847739470782e-6 + (0.94305490646459247016e-9 + (0.54366590583134218096e-11 + 0.27080225920000000000e-13 * t) * t) * t) * t) * t) * t; } case 48: { double t = 2*y100 - 97; return 0.12941991566142438816e0 + (0.24637684719508859484e-2 + (0.20450821127475879816e-4 + (0.15173366280523906622e-6 + (0.99907632506389027739e-9 + (0.57712760311351625221e-11 + 0.28703099555555555556e-13 * t) * t) * t) * t) * t) * t; } case 49: { double t = 2*y100 - 99; return 0.13443048593088696613e0 + (0.25474249981080823877e-2 + (0.21385669591362915223e-4 + (0.15996177579900443030e-6 + (0.10585428844575134013e-8 + (0.61258809536787882989e-11 + 0.30412080142222222222e-13 * t) * t) * t) * t) * t) * t; } case 50: { double t = 2*y100 - 101; return 0.13961217543434561353e0 + (0.26349215871051761416e-2 + (0.22371342712572567744e-4 + (0.16868008199296822247e-6 + (0.11216596910444996246e-8 + (0.65015264753090890662e-11 + 0.32210394506666666666e-13 * t) * t) * t) * t) * t) * t; } case 51: { double t = 2*y100 - 103; return 0.14497287157673800690e0 + (0.27264675383982439814e-2 + (0.23410870961050950197e-4 + (0.17791863939526376477e-6 + (0.11886425714330958106e-8 + (0.68993039665054288034e-11 + 0.34101266222222222221e-13 * t) * t) * t) * t) * t) * t; } case 52: { double t = 2*y100 - 105; return 0.15052089272774618151e0 + (0.28222846410136238008e-2 + (0.24507470422713397006e-4 + (0.18770927679626136909e-6 + (0.12597184587583370712e-8 + (0.73203433049229821618e-11 + 0.36087889048888888890e-13 * t) * t) * t) * t) * t) * t; } case 53: { double t = 2*y100 - 107; return 0.15626501395774612325e0 + (0.29226079376196624949e-2 + (0.25664553693768450545e-4 + (0.19808568415654461964e-6 + (0.13351257759815557897e-8 + (0.77658124891046760667e-11 + 0.38173420035555555555e-13 * t) * t) * t) * t) * t) * t; } case 54: { double t = 2*y100 - 109; return 0.16221449434620737567e0 + (0.30276865332726475672e-2 + (0.26885741326534564336e-4 + (0.20908350604346384143e-6 + (0.14151148144240728728e-8 + (0.82369170665974313027e-11 + 0.40360957457777777779e-13 * t) * t) * t) * t) * t) * t; } case 55: { double t = 2*y100 - 111; return 0.16837910595412130659e0 + (0.31377844510793082301e-2 + (0.28174873844911175026e-4 + (0.22074043807045782387e-6 + (0.14999481055996090039e-8 + (0.87348993661930809254e-11 + 0.42653528977777777779e-13 * t) * t) * t) * t) * t) * t; } case 56: { double t = 2*y100 - 113; return 0.17476916455659369953e0 + (0.32531815370903068316e-2 + (0.29536024347344364074e-4 + (0.23309632627767074202e-6 + (0.15899007843582444846e-8 + (0.92610375235427359475e-11 + 0.45054073102222222221e-13 * t) * t) * t) * t) * t) * t; } case 57: { double t = 2*y100 - 115; return 0.18139556223643701364e0 + (0.33741744168096996041e-2 + (0.30973511714709500836e-4 + (0.24619326937592290996e-6 + (0.16852609412267750744e-8 + (0.98166442942854895573e-11 + 0.47565418097777777779e-13 * t) * t) * t) * t) * t) * t; } case 58: { double t = 2*y100 - 117; return 0.18826980194443664549e0 + (0.35010775057740317997e-2 + (0.32491914440014267480e-4 + (0.26007572375886319028e-6 + (0.17863299617388376116e-8 + (0.10403065638343878679e-10 + 0.50190265831111111110e-13 * t) * t) * t) * t) * t) * t; } case 59: { double t = 2*y100 - 119; return 0.19540403413693967350e0 + (0.36342240767211326315e-2 + (0.34096085096200907289e-4 + (0.27479061117017637474e-6 + (0.18934228504790032826e-8 + (0.11021679075323598664e-10 + 0.52931171733333333334e-13 * t) * t) * t) * t) * t) * t; } case 60: { double t = 2*y100 - 121; return 0.20281109560651886959e0 + (0.37739673859323597060e-2 + (0.35791165457592409054e-4 + (0.29038742889416172404e-6 + (0.20068685374849001770e-8 + (0.11673891799578381999e-10 + 0.55790523093333333334e-13 * t) * t) * t) * t) * t) * t; } case 61: { double t = 2*y100 - 123; return 0.21050455062669334978e0 + (0.39206818613925652425e-2 + (0.37582602289680101704e-4 + (0.30691836231886877385e-6 + (0.21270101645763677824e-8 + (0.12361138551062899455e-10 + 0.58770520160000000000e-13 * t) * t) * t) * t) * t) * t; } case 62: { double t = 2*y100 - 125; return 0.21849873453703332479e0 + (0.40747643554689586041e-2 + (0.39476163820986711501e-4 + (0.32443839970139918836e-6 + (0.22542053491518680200e-8 + (0.13084879235290858490e-10 + 0.61873153262222222221e-13 * t) * t) * t) * t) * t) * t; } case 63: { double t = 2*y100 - 127; return 0.22680879990043229327e0 + (0.42366354648628516935e-2 + (0.41477956909656896779e-4 + (0.34300544894502810002e-6 + (0.23888264229264067658e-8 + (0.13846596292818514601e-10 + 0.65100183751111111110e-13 * t) * t) * t) * t) * t) * t; } case 64: { double t = 2*y100 - 129; return 0.23545076536988703937e0 + (0.44067409206365170888e-2 + (0.43594444916224700881e-4 + (0.36268045617760415178e-6 + (0.25312606430853202748e-8 + (0.14647791812837903061e-10 + 0.68453122631111111110e-13 * t) * t) * t) * t) * t) * t; } case 65: { double t = 2*y100 - 131; return 0.24444156740777432838e0 + (0.45855530511605787178e-2 + (0.45832466292683085475e-4 + (0.38352752590033030472e-6 + (0.26819103733055603460e-8 + (0.15489984390884756993e-10 + 0.71933206364444444445e-13 * t) * t) * t) * t) * t) * t; } case 66: { double t = 2*y100 - 133; return 0.25379911500634264643e0 + (0.47735723208650032167e-2 + (0.48199253896534185372e-4 + (0.40561404245564732314e-6 + (0.28411932320871165585e-8 + (0.16374705736458320149e-10 + 0.75541379822222222221e-13 * t) * t) * t) * t) * t) * t; } case 67: { double t = 2*y100 - 135; return 0.26354234756393613032e0 + (0.49713289477083781266e-2 + (0.50702455036930367504e-4 + (0.42901079254268185722e-6 + (0.30095422058900481753e-8 + (0.17303497025347342498e-10 + 0.79278273368888888890e-13 * t) * t) * t) * t) * t) * t; } case 68: { double t = 2*y100 - 137; return 0.27369129607732343398e0 + (0.51793846023052643767e-2 + (0.53350152258326602629e-4 + (0.45379208848865015485e-6 + (0.31874057245814381257e-8 + (0.18277905010245111046e-10 + 0.83144182364444444445e-13 * t) * t) * t) * t) * t) * t; } case 69: { double t = 2*y100 - 139; return 0.28426714781640316172e0 + (0.53983341916695141966e-2 + (0.56150884865255810638e-4 + (0.48003589196494734238e-6 + (0.33752476967570796349e-8 + (0.19299477888083469086e-10 + 0.87139049137777777779e-13 * t) * t) * t) * t) * t) * t; } case 70: { double t = 2*y100 - 141; return 0.29529231465348519920e0 + (0.56288077305420795663e-2 + (0.59113671189913307427e-4 + (0.50782393781744840482e-6 + (0.35735475025851713168e-8 + (0.20369760937017070382e-10 + 0.91262442613333333334e-13 * t) * t) * t) * t) * t) * t; } case 71: { double t = 2*y100 - 143; return 0.30679050522528838613e0 + (0.58714723032745403331e-2 + (0.62248031602197686791e-4 + (0.53724185766200945789e-6 + (0.37827999418960232678e-8 + (0.21490291930444538307e-10 + 0.95513539182222222221e-13 * t) * t) * t) * t) * t) * t; } case 72: { double t = 2*y100 - 145; return 0.31878680111173319425e0 + (0.61270341192339103514e-2 + (0.65564012259707640976e-4 + (0.56837930287837738996e-6 + (0.40035151353392378882e-8 + (0.22662596341239294792e-10 + 0.99891109760000000000e-13 * t) * t) * t) * t) * t) * t; } case 73: { double t = 2*y100 - 147; return 0.33130773722152622027e0 + (0.63962406646798080903e-2 + (0.69072209592942396666e-4 + (0.60133006661885941812e-6 + (0.42362183765883466691e-8 + (0.23888182347073698382e-10 + 0.10439349811555555556e-12 * t) * t) * t) * t) * t) * t; } case 74: { double t = 2*y100 - 149; return 0.34438138658041336523e0 + (0.66798829540414007258e-2 + (0.72783795518603561144e-4 + (0.63619220443228800680e-6 + (0.44814499336514453364e-8 + (0.25168535651285475274e-10 + 0.10901861383111111111e-12 * t) * t) * t) * t) * t) * t; } case 75: { double t = 2*y100 - 151; return 0.35803744972380175583e0 + (0.69787978834882685031e-2 + (0.76710543371454822497e-4 + (0.67306815308917386747e-6 + (0.47397647975845228205e-8 + (0.26505114141143050509e-10 + 0.11376390933333333333e-12 * t) * t) * t) * t) * t) * t; } case 76: { double t = 2*y100 - 153; return 0.37230734890119724188e0 + (0.72938706896461381003e-2 + (0.80864854542670714092e-4 + (0.71206484718062688779e-6 + (0.50117323769745883805e-8 + (0.27899342394100074165e-10 + 0.11862637614222222222e-12 * t) * t) * t) * t) * t) * t; } case 77: { double t = 2*y100 - 155; return 0.38722432730555448223e0 + (0.76260375162549802745e-2 + (0.85259785810004603848e-4 + (0.75329383305171327677e-6 + (0.52979361368388119355e-8 + (0.29352606054164086709e-10 + 0.12360253370666666667e-12 * t) * t) * t) * t) * t) * t; } case 78: { double t = 2*y100 - 157; return 0.40282355354616940667e0 + (0.79762880915029728079e-2 + (0.89909077342438246452e-4 + (0.79687137961956194579e-6 + (0.55989731807360403195e-8 + (0.30866246101464869050e-10 + 0.12868841946666666667e-12 * t) * t) * t) * t) * t) * t; } case 79: { double t = 2*y100 - 159; return 0.41914223158913787649e0 + (0.83456685186950463538e-2 + (0.94827181359250161335e-4 + (0.84291858561783141014e-6 + (0.59154537751083485684e-8 + (0.32441553034347469291e-10 + 0.13387957943111111111e-12 * t) * t) * t) * t) * t) * t; } case 80: { double t = 2*y100 - 161; return 0.43621971639463786896e0 + (0.87352841828289495773e-2 + (0.10002929142066799966e-3 + (0.89156148280219880024e-6 + (0.62480008150788597147e-8 + (0.34079760983458878910e-10 + 0.13917107176888888889e-12 * t) * t) * t) * t) * t) * t; } case 81: { double t = 2*y100 - 163; return 0.45409763548534330981e0 + (0.91463027755548240654e-2 + (0.10553137232446167258e-3 + (0.94293113464638623798e-6 + (0.65972492312219959885e-8 + (0.35782041795476563662e-10 + 0.14455745872000000000e-12 * t) * t) * t) * t) * t) * t; } case 82: { double t = 2*y100 - 165; return 0.47282001668512331468e0 + (0.95799574408860463394e-2 + (0.11135019058000067469e-3 + (0.99716373005509038080e-6 + (0.69638453369956970347e-8 + (0.37549499088161345850e-10 + 0.15003280712888888889e-12 * t) * t) * t) * t) * t) * t; } case 83: { double t = 2*y100 - 167; return 0.49243342227179841649e0 + (0.10037550043909497071e-1 + (0.11750334542845234952e-3 + (0.10544006716188967172e-5 + (0.73484461168242224872e-8 + (0.39383162326435752965e-10 + 0.15559069118222222222e-12 * t) * t) * t) * t) * t) * t; } case 84: { double t = 2*y100 - 169; return 0.51298708979209258326e0 + (0.10520454564612427224e-1 + (0.12400930037494996655e-3 + (0.11147886579371265246e-5 + (0.77517184550568711454e-8 + (0.41283980931872622611e-10 + 0.16122419680000000000e-12 * t) * t) * t) * t) * t) * t; } case 85: { double t = 2*y100 - 171; return 0.53453307979101369843e0 + (0.11030120618800726938e-1 + (0.13088741519572269581e-3 + (0.11784797595374515432e-5 + (0.81743383063044825400e-8 + (0.43252818449517081051e-10 + 0.16692592640000000000e-12 * t) * t) * t) * t) * t) * t; } case 86: { double t = 2*y100 - 173; return 0.55712643071169299478e0 + (0.11568077107929735233e-1 + (0.13815797838036651289e-3 + (0.12456314879260904558e-5 + (0.86169898078969313597e-8 + (0.45290446811539652525e-10 + 0.17268801084444444444e-12 * t) * t) * t) * t) * t) * t; } case 87: { double t = 2*y100 - 175; return 0.58082532122519320968e0 + (0.12135935999503877077e-1 + (0.14584223996665838559e-3 + (0.13164068573095710742e-5 + (0.90803643355106020163e-8 + (0.47397540713124619155e-10 + 0.17850211608888888889e-12 * t) * t) * t) * t) * t) * t; } case 88: { double t = 2*y100 - 177; return 0.60569124025293375554e0 + (0.12735396239525550361e-1 + (0.15396244472258863344e-3 + (0.13909744385382818253e-5 + (0.95651595032306228245e-8 + (0.49574672127669041550e-10 + 0.18435945564444444444e-12 * t) * t) * t) * t) * t) * t; } case 89: { double t = 2*y100 - 179; return 0.63178916494715716894e0 + (0.13368247798287030927e-1 + (0.16254186562762076141e-3 + (0.14695084048334056083e-5 + (0.10072078109604152350e-7 + (0.51822304995680707483e-10 + 0.19025081422222222222e-12 * t) * t) * t) * t) * t) * t; } case 90: { double t = 2*y100 - 181; return 0.65918774689725319200e0 + (0.14036375850601992063e-1 + (0.17160483760259706354e-3 + (0.15521885688723188371e-5 + (0.10601827031535280590e-7 + (0.54140790105837520499e-10 + 0.19616655146666666667e-12 * t) * t) * t) * t) * t) * t; } case 91: { double t = 2*y100 - 183; return 0.68795950683174433822e0 + (0.14741765091365869084e-1 + (0.18117679143520433835e-3 + (0.16392004108230585213e-5 + (0.11155116068018043001e-7 + (0.56530360194925690374e-10 + 0.20209663662222222222e-12 * t) * t) * t) * t) * t) * t; } case 92: { double t = 2*y100 - 185; return 0.71818103808729967036e0 + (0.15486504187117112279e-1 + (0.19128428784550923217e-3 + (0.17307350969359975848e-5 + (0.11732656736113607751e-7 + (0.58991125287563833603e-10 + 0.20803065333333333333e-12 * t) * t) * t) * t) * t) * t; } case 93: { double t = 2*y100 - 187; return 0.74993321911726254661e0 + (0.16272790364044783382e-1 + (0.20195505163377912645e-3 + (0.18269894883203346953e-5 + (0.12335161021630225535e-7 + (0.61523068312169087227e-10 + 0.21395783431111111111e-12 * t) * t) * t) * t) * t) * t; } case 94: { double t = 2*y100 - 189; return 0.78330143531283492729e0 + (0.17102934132652429240e-1 + (0.21321800585063327041e-3 + (0.19281661395543913713e-5 + (0.12963340087354341574e-7 + (0.64126040998066348872e-10 + 0.21986708942222222222e-12 * t) * t) * t) * t) * t) * t; } case 95: { double t = 2*y100 - 191; return 0.81837581041023811832e0 + (0.17979364149044223802e-1 + (0.22510330592753129006e-3 + (0.20344732868018175389e-5 + (0.13617902941839949718e-7 + (0.66799760083972474642e-10 + 0.22574701262222222222e-12 * t) * t) * t) * t) * t) * t; } case 96: { double t = 2*y100 - 193; return 0.85525144775685126237e0 + (0.18904632212547561026e-1 + (0.23764237370371255638e-3 + (0.21461248251306387979e-5 + (0.14299555071870523786e-7 + (0.69543803864694171934e-10 + 0.23158593688888888889e-12 * t) * t) * t) * t) * t) * t; } case 97: { double t = 2*y100 - 195; return 0.89402868170849933734e0 + (0.19881418399127202569e-1 + (0.25086793128395995798e-3 + (0.22633402747585233180e-5 + (0.15008997042116532283e-7 + (0.72357609075043941261e-10 + 0.23737194737777777778e-12 * t) * t) * t) * t) * t) * t; } case 98: { double t = 2*y100 - 197; return 0.93481333942870796363e0 + (0.20912536329780368893e-1 + (0.26481403465998477969e-3 + (0.23863447359754921676e-5 + (0.15746923065472184451e-7 + (0.75240468141720143653e-10 + 0.24309291271111111111e-12 * t) * t) * t) * t) * t) * t; } case 99: { double t = 2*y100 - 199; return 0.97771701335885035464e0 + (0.22000938572830479551e-1 + (0.27951610702682383001e-3 + (0.25153688325245314530e-5 + (0.16514019547822821453e-7 + (0.78191526829368231251e-10 + 0.24873652355555555556e-12 * t) * t) * t) * t) * t) * t; } } // we only get here if y = 1, i.e. |x| < 4*eps, in which case // erfcx is within 1e-15 of 1.. return 1.0; } double FADDEEVA_RE(erfcx)(double x) { if (x >= 0) { if (x > 50) { // continued-fraction expansion is faster const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) if (x > 5e7) // 1-term expansion, important to avoid overflow return ispi / x; /* 5-term expansion (rely on compiler for CSE), simplified from: ispi / (x+0.5/(x+1/(x+1.5/(x+2/x)))) */ return ispi*((x*x) * (x*x+4.5) + 2) / (x * ((x*x) * (x*x+5) + 3.75)); } return erfcx_y100(400/(4+x)); } else return x < -26.7 ? HUGE_VAL : (x < -6.1 ? 2*exp(x*x) : 2*exp(x*x) - erfcx_y100(400/(4-x))); } ///////////////////////////////////////////////////////////////////////// /* Compute a scaled Dawson integral FADDEEVA(w_im)(x) = 2*Dawson(x)/sqrt(pi) equivalent to the imaginary part w(x) for real x. Uses methods similar to the erfcx calculation above: continued fractions for large |x|, a lookup table of Chebyshev polynomials for smaller |x|, and finally a Taylor expansion for |x|<0.01. Steven G. Johnson, October 2012. */ /* Given y100=100*y, where y = 1/(1+x) for x >= 0, compute w_im(x). Uses a look-up table of 100 different Chebyshev polynomials for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated with the help of Maple and a little shell script. This allows the Chebyshev polynomials to be of significantly lower degree (about 1/30) compared to fitting the whole [0,1] interval with a single polynomial. */ static double w_im_y100(double y100, double x) { switch ((int) y100) { case 0: { double t = 2*y100 - 1; return 0.28351593328822191546e-2 + (0.28494783221378400759e-2 + (0.14427470563276734183e-4 + (0.10939723080231588129e-6 + (0.92474307943275042045e-9 + (0.89128907666450075245e-11 + 0.92974121935111111110e-13 * t) * t) * t) * t) * t) * t; } case 1: { double t = 2*y100 - 3; return 0.85927161243940350562e-2 + (0.29085312941641339862e-2 + (0.15106783707725582090e-4 + (0.11716709978531327367e-6 + (0.10197387816021040024e-8 + (0.10122678863073360769e-10 + 0.10917479678400000000e-12 * t) * t) * t) * t) * t) * t; } case 2: { double t = 2*y100 - 5; return 0.14471159831187703054e-1 + (0.29703978970263836210e-2 + (0.15835096760173030976e-4 + (0.12574803383199211596e-6 + (0.11278672159518415848e-8 + (0.11547462300333495797e-10 + 0.12894535335111111111e-12 * t) * t) * t) * t) * t) * t; } case 3: { double t = 2*y100 - 7; return 0.20476320420324610618e-1 + (0.30352843012898665856e-2 + (0.16617609387003727409e-4 + (0.13525429711163116103e-6 + (0.12515095552507169013e-8 + (0.13235687543603382345e-10 + 0.15326595042666666667e-12 * t) * t) * t) * t) * t) * t; } case 4: { double t = 2*y100 - 9; return 0.26614461952489004566e-1 + (0.31034189276234947088e-2 + (0.17460268109986214274e-4 + (0.14582130824485709573e-6 + (0.13935959083809746345e-8 + (0.15249438072998932900e-10 + 0.18344741882133333333e-12 * t) * t) * t) * t) * t) * t; } case 5: { double t = 2*y100 - 11; return 0.32892330248093586215e-1 + (0.31750557067975068584e-2 + (0.18369907582308672632e-4 + (0.15761063702089457882e-6 + (0.15577638230480894382e-8 + (0.17663868462699097951e-10 + (0.22126732680711111111e-12 + 0.30273474177737853668e-14 * t) * t) * t) * t) * t) * t) * t; } case 6: { double t = 2*y100 - 13; return 0.39317207681134336024e-1 + (0.32504779701937539333e-2 + (0.19354426046513400534e-4 + (0.17081646971321290539e-6 + (0.17485733959327106250e-8 + (0.20593687304921961410e-10 + (0.26917401949155555556e-12 + 0.38562123837725712270e-14 * t) * t) * t) * t) * t) * t) * t; } case 7: { double t = 2*y100 - 15; return 0.45896976511367738235e-1 + (0.33300031273110976165e-2 + (0.20423005398039037313e-4 + (0.18567412470376467303e-6 + (0.19718038363586588213e-8 + (0.24175006536781219807e-10 + (0.33059982791466666666e-12 + 0.49756574284439426165e-14 * t) * t) * t) * t) * t) * t) * t; } case 8: { double t = 2*y100 - 17; return 0.52640192524848962855e-1 + (0.34139883358846720806e-2 + (0.21586390240603337337e-4 + (0.20247136501568904646e-6 + (0.22348696948197102935e-8 + (0.28597516301950162548e-10 + (0.41045502119111111110e-12 + 0.65151614515238361946e-14 * t) * t) * t) * t) * t) * t) * t; } case 9: { double t = 2*y100 - 19; return 0.59556171228656770456e-1 + (0.35028374386648914444e-2 + (0.22857246150998562824e-4 + (0.22156372146525190679e-6 + (0.25474171590893813583e-8 + (0.34122390890697400584e-10 + (0.51593189879111111110e-12 + 0.86775076853908006938e-14 * t) * t) * t) * t) * t) * t) * t; } case 10: { double t = 2*y100 - 21; return 0.66655089485108212551e-1 + (0.35970095381271285568e-2 + (0.24250626164318672928e-4 + (0.24339561521785040536e-6 + (0.29221990406518411415e-8 + (0.41117013527967776467e-10 + (0.65786450716444444445e-12 + 0.11791885745450623331e-13 * t) * t) * t) * t) * t) * t) * t; } case 11: { double t = 2*y100 - 23; return 0.73948106345519174661e-1 + (0.36970297216569341748e-2 + (0.25784588137312868792e-4 + (0.26853012002366752770e-6 + (0.33763958861206729592e-8 + (0.50111549981376976397e-10 + (0.85313857496888888890e-12 + 0.16417079927706899860e-13 * t) * t) * t) * t) * t) * t) * t; } case 12: { double t = 2*y100 - 25; return 0.81447508065002963203e-1 + (0.38035026606492705117e-2 + (0.27481027572231851896e-4 + (0.29769200731832331364e-6 + (0.39336816287457655076e-8 + (0.61895471132038157624e-10 + (0.11292303213511111111e-11 + 0.23558532213703884304e-13 * t) * t) * t) * t) * t) * t) * t; } case 13: { double t = 2*y100 - 27; return 0.89166884027582716628e-1 + (0.39171301322438946014e-2 + (0.29366827260422311668e-4 + (0.33183204390350724895e-6 + (0.46276006281647330524e-8 + (0.77692631378169813324e-10 + (0.15335153258844444444e-11 + 0.35183103415916026911e-13 * t) * t) * t) * t) * t) * t) * t; } case 14: { double t = 2*y100 - 29; return 0.97121342888032322019e-1 + (0.40387340353207909514e-2 + (0.31475490395950776930e-4 + (0.37222714227125135042e-6 + (0.55074373178613809996e-8 + (0.99509175283990337944e-10 + (0.21552645758222222222e-11 + 0.55728651431872687605e-13 * t) * t) * t) * t) * t) * t) * t; } case 15: { double t = 2*y100 - 31; return 0.10532778218603311137e0 + (0.41692873614065380607e-2 + (0.33849549774889456984e-4 + (0.42064596193692630143e-6 + (0.66494579697622432987e-8 + (0.13094103581931802337e-9 + (0.31896187409777777778e-11 + 0.97271974184476560742e-13 * t) * t) * t) * t) * t) * t) * t; } case 16: { double t = 2*y100 - 33; return 0.11380523107427108222e0 + (0.43099572287871821013e-2 + (0.36544324341565929930e-4 + (0.47965044028581857764e-6 + (0.81819034238463698796e-8 + (0.17934133239549647357e-9 + (0.50956666166186293627e-11 + (0.18850487318190638010e-12 + 0.79697813173519853340e-14 * t) * t) * t) * t) * t) * t) * t) * t; } case 17: { double t = 2*y100 - 35; return 0.12257529703447467345e0 + (0.44621675710026986366e-2 + (0.39634304721292440285e-4 + (0.55321553769873381819e-6 + (0.10343619428848520870e-7 + (0.26033830170470368088e-9 + (0.87743837749108025357e-11 + (0.34427092430230063401e-12 + 0.10205506615709843189e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 18: { double t = 2*y100 - 37; return 0.13166276955656699478e0 + (0.46276970481783001803e-2 + (0.43225026380496399310e-4 + (0.64799164020016902656e-6 + (0.13580082794704641782e-7 + (0.39839800853954313927e-9 + (0.14431142411840000000e-10 + 0.42193457308830027541e-12 * t) * t) * t) * t) * t) * t) * t; } case 19: { double t = 2*y100 - 39; return 0.14109647869803356475e0 + (0.48088424418545347758e-2 + (0.47474504753352150205e-4 + (0.77509866468724360352e-6 + (0.18536851570794291724e-7 + (0.60146623257887570439e-9 + (0.18533978397305276318e-10 + (0.41033845938901048380e-13 - 0.46160680279304825485e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 20: { double t = 2*y100 - 41; return 0.15091057940548936603e0 + (0.50086864672004685703e-2 + (0.52622482832192230762e-4 + (0.95034664722040355212e-6 + (0.25614261331144718769e-7 + (0.80183196716888606252e-9 + (0.12282524750534352272e-10 + (-0.10531774117332273617e-11 - 0.86157181395039646412e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 21: { double t = 2*y100 - 43; return 0.16114648116017010770e0 + (0.52314661581655369795e-2 + (0.59005534545908331315e-4 + (0.11885518333915387760e-5 + (0.33975801443239949256e-7 + (0.82111547144080388610e-9 + (-0.12357674017312854138e-10 + (-0.24355112256914479176e-11 - 0.75155506863572930844e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 22: { double t = 2*y100 - 45; return 0.17185551279680451144e0 + (0.54829002967599420860e-2 + (0.67013226658738082118e-4 + (0.14897400671425088807e-5 + (0.40690283917126153701e-7 + (0.44060872913473778318e-9 + (-0.52641873433280000000e-10 - 0.30940587864543343124e-11 * t) * t) * t) * t) * t) * t) * t; } case 23: { double t = 2*y100 - 47; return 0.18310194559815257381e0 + (0.57701559375966953174e-2 + (0.76948789401735193483e-4 + (0.18227569842290822512e-5 + (0.41092208344387212276e-7 + (-0.44009499965694442143e-9 + (-0.92195414685628803451e-10 + (-0.22657389705721753299e-11 + 0.10004784908106839254e-12 * t) * t) * t) * t) * t) * t) * t) * t; } case 24: { double t = 2*y100 - 49; return 0.19496527191546630345e0 + (0.61010853144364724856e-2 + (0.88812881056342004864e-4 + (0.21180686746360261031e-5 + (0.30652145555130049203e-7 + (-0.16841328574105890409e-8 + (-0.11008129460612823934e-9 + (-0.12180794204544515779e-12 + 0.15703325634590334097e-12 * t) * t) * t) * t) * t) * t) * t) * t; } case 25: { double t = 2*y100 - 51; return 0.20754006813966575720e0 + (0.64825787724922073908e-2 + (0.10209599627522311893e-3 + (0.22785233392557600468e-5 + (0.73495224449907568402e-8 + (-0.29442705974150112783e-8 + (-0.94082603434315016546e-10 + (0.23609990400179321267e-11 + 0.14141908654269023788e-12 * t) * t) * t) * t) * t) * t) * t) * t; } case 26: { double t = 2*y100 - 53; return 0.22093185554845172146e0 + (0.69182878150187964499e-2 + (0.11568723331156335712e-3 + (0.22060577946323627739e-5 + (-0.26929730679360840096e-7 + (-0.38176506152362058013e-8 + (-0.47399503861054459243e-10 + (0.40953700187172127264e-11 + 0.69157730376118511127e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 27: { double t = 2*y100 - 55; return 0.23524827304057813918e0 + (0.74063350762008734520e-2 + (0.12796333874615790348e-3 + (0.18327267316171054273e-5 + (-0.66742910737957100098e-7 + (-0.40204740975496797870e-8 + (0.14515984139495745330e-10 + (0.44921608954536047975e-11 - 0.18583341338983776219e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 28: { double t = 2*y100 - 57; return 0.25058626331812744775e0 + (0.79377285151602061328e-2 + (0.13704268650417478346e-3 + (0.11427511739544695861e-5 + (-0.10485442447768377485e-6 + (-0.34850364756499369763e-8 + (0.72656453829502179208e-10 + (0.36195460197779299406e-11 - 0.84882136022200714710e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 29: { double t = 2*y100 - 59; return 0.26701724900280689785e0 + (0.84959936119625864274e-2 + (0.14112359443938883232e-3 + (0.17800427288596909634e-6 + (-0.13443492107643109071e-6 + (-0.23512456315677680293e-8 + (0.11245846264695936769e-9 + (0.19850501334649565404e-11 - 0.11284666134635050832e-12 * t) * t) * t) * t) * t) * t) * t) * t; } case 30: { double t = 2*y100 - 61; return 0.28457293586253654144e0 + (0.90581563892650431899e-2 + (0.13880520331140646738e-3 + (-0.97262302362522896157e-6 + (-0.15077100040254187366e-6 + (-0.88574317464577116689e-9 + (0.12760311125637474581e-9 + (0.20155151018282695055e-12 - 0.10514169375181734921e-12 * t) * t) * t) * t) * t) * t) * t) * t; } case 31: { double t = 2*y100 - 63; return 0.30323425595617385705e0 + (0.95968346790597422934e-2 + (0.12931067776725883939e-3 + (-0.21938741702795543986e-5 + (-0.15202888584907373963e-6 + (0.61788350541116331411e-9 + (0.11957835742791248256e-9 + (-0.12598179834007710908e-11 - 0.75151817129574614194e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 32: { double t = 2*y100 - 65; return 0.32292521181517384379e0 + (0.10082957727001199408e-1 + (0.11257589426154962226e-3 + (-0.33670890319327881129e-5 + (-0.13910529040004008158e-6 + (0.19170714373047512945e-8 + (0.94840222377720494290e-10 + (-0.21650018351795353201e-11 - 0.37875211678024922689e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 33: { double t = 2*y100 - 67; return 0.34351233557911753862e0 + (0.10488575435572745309e-1 + (0.89209444197248726614e-4 + (-0.43893459576483345364e-5 + (-0.11488595830450424419e-6 + (0.28599494117122464806e-8 + (0.61537542799857777779e-10 - 0.24935749227658002212e-11 * t) * t) * t) * t) * t) * t) * t; } case 34: { double t = 2*y100 - 69; return 0.36480946642143669093e0 + (0.10789304203431861366e-1 + (0.60357993745283076834e-4 + (-0.51855862174130669389e-5 + (-0.83291664087289801313e-7 + (0.33898011178582671546e-8 + (0.27082948188277716482e-10 + (-0.23603379397408694974e-11 + 0.19328087692252869842e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 35: { double t = 2*y100 - 71; return 0.38658679935694939199e0 + (0.10966119158288804999e-1 + (0.27521612041849561426e-4 + (-0.57132774537670953638e-5 + (-0.48404772799207914899e-7 + (0.35268354132474570493e-8 + (-0.32383477652514618094e-11 + (-0.19334202915190442501e-11 + 0.32333189861286460270e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 36: { double t = 2*y100 - 73; return 0.40858275583808707870e0 + (0.11006378016848466550e-1 + (-0.76396376685213286033e-5 + (-0.59609835484245791439e-5 + (-0.13834610033859313213e-7 + (0.33406952974861448790e-8 + (-0.26474915974296612559e-10 + (-0.13750229270354351983e-11 + 0.36169366979417390637e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 37: { double t = 2*y100 - 75; return 0.43051714914006682977e0 + (0.10904106549500816155e-1 + (-0.43477527256787216909e-4 + (-0.59429739547798343948e-5 + (0.17639200194091885949e-7 + (0.29235991689639918688e-8 + (-0.41718791216277812879e-10 + (-0.81023337739508049606e-12 + 0.33618915934461994428e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 38: { double t = 2*y100 - 77; return 0.45210428135559607406e0 + (0.10659670756384400554e-1 + (-0.78488639913256978087e-4 + (-0.56919860886214735936e-5 + (0.44181850467477733407e-7 + (0.23694306174312688151e-8 + (-0.49492621596685443247e-10 + (-0.31827275712126287222e-12 + 0.27494438742721623654e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 39: { double t = 2*y100 - 79; return 0.47306491195005224077e0 + (0.10279006119745977570e-1 + (-0.11140268171830478306e-3 + (-0.52518035247451432069e-5 + (0.64846898158889479518e-7 + (0.17603624837787337662e-8 + (-0.51129481592926104316e-10 + (0.62674584974141049511e-13 + 0.20055478560829935356e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 40: { double t = 2*y100 - 81; return 0.49313638965719857647e0 + (0.97725799114772017662e-2 + (-0.14122854267291533334e-3 + (-0.46707252568834951907e-5 + (0.79421347979319449524e-7 + (0.11603027184324708643e-8 + (-0.48269605844397175946e-10 + (0.32477251431748571219e-12 + 0.12831052634143527985e-13 * t) * t) * t) * t) * t) * t) * t) * t; } case 41: { double t = 2*y100 - 83; return 0.51208057433416004042e0 + (0.91542422354009224951e-2 + (-0.16726530230228647275e-3 + (-0.39964621752527649409e-5 + (0.88232252903213171454e-7 + (0.61343113364949928501e-9 + (-0.42516755603130443051e-10 + (0.47910437172240209262e-12 + 0.66784341874437478953e-14 * t) * t) * t) * t) * t) * t) * t) * t; } case 42: { double t = 2*y100 - 85; return 0.52968945458607484524e0 + (0.84400880445116786088e-2 + (-0.18908729783854258774e-3 + (-0.32725905467782951931e-5 + (0.91956190588652090659e-7 + (0.14593989152420122909e-9 + (-0.35239490687644444445e-10 + 0.54613829888448694898e-12 * t) * t) * t) * t) * t) * t) * t; } case 43: { double t = 2*y100 - 87; return 0.54578857454330070965e0 + (0.76474155195880295311e-2 + (-0.20651230590808213884e-3 + (-0.25364339140543131706e-5 + (0.91455367999510681979e-7 + (-0.23061359005297528898e-9 + (-0.27512928625244444444e-10 + 0.54895806008493285579e-12 * t) * t) * t) * t) * t) * t) * t; } case 44: { double t = 2*y100 - 89; return 0.56023851910298493910e0 + (0.67938321739997196804e-2 + (-0.21956066613331411760e-3 + (-0.18181127670443266395e-5 + (0.87650335075416845987e-7 + (-0.51548062050366615977e-9 + (-0.20068462174044444444e-10 + 0.50912654909758187264e-12 * t) * t) * t) * t) * t) * t) * t; } case 45: { double t = 2*y100 - 91; return 0.57293478057455721150e0 + (0.58965321010394044087e-2 + (-0.22841145229276575597e-3 + (-0.11404605562013443659e-5 + (0.81430290992322326296e-7 + (-0.71512447242755357629e-9 + (-0.13372664928000000000e-10 + 0.44461498336689298148e-12 * t) * t) * t) * t) * t) * t) * t; } case 46: { double t = 2*y100 - 93; return 0.58380635448407827360e0 + (0.49717469530842831182e-2 + (-0.23336001540009645365e-3 + (-0.51952064448608850822e-6 + (0.73596577815411080511e-7 + (-0.84020916763091566035e-9 + (-0.76700972702222222221e-11 + 0.36914462807972467044e-12 * t) * t) * t) * t) * t) * t) * t; } case 47: { double t = 2*y100 - 95; return 0.59281340237769489597e0 + (0.40343592069379730568e-2 + (-0.23477963738658326185e-3 + (0.34615944987790224234e-7 + (0.64832803248395814574e-7 + (-0.90329163587627007971e-9 + (-0.30421940400000000000e-11 + 0.29237386653743536669e-12 * t) * t) * t) * t) * t) * t) * t; } case 48: { double t = 2*y100 - 97; return 0.59994428743114271918e0 + (0.30976579788271744329e-2 + (-0.23308875765700082835e-3 + (0.51681681023846925160e-6 + (0.55694594264948268169e-7 + (-0.91719117313243464652e-9 + (0.53982743680000000000e-12 + 0.22050829296187771142e-12 * t) * t) * t) * t) * t) * t) * t; } case 49: { double t = 2*y100 - 99; return 0.60521224471819875444e0 + (0.21732138012345456060e-2 + (-0.22872428969625997456e-3 + (0.92588959922653404233e-6 + (0.46612665806531930684e-7 + (-0.89393722514414153351e-9 + (0.31718550353777777778e-11 + 0.15705458816080549117e-12 * t) * t) * t) * t) * t) * t) * t; } case 50: { double t = 2*y100 - 101; return 0.60865189969791123620e0 + (0.12708480848877451719e-2 + (-0.22212090111534847166e-3 + (0.12636236031532793467e-5 + (0.37904037100232937574e-7 + (-0.84417089968101223519e-9 + (0.49843180828444444445e-11 + 0.10355439441049048273e-12 * t) * t) * t) * t) * t) * t) * t; } case 51: { double t = 2*y100 - 103; return 0.61031580103499200191e0 + (0.39867436055861038223e-3 + (-0.21369573439579869291e-3 + (0.15339402129026183670e-5 + (0.29787479206646594442e-7 + (-0.77687792914228632974e-9 + (0.61192452741333333334e-11 + 0.60216691829459295780e-13 * t) * t) * t) * t) * t) * t) * t; } case 52: { double t = 2*y100 - 105; return 0.61027109047879835868e0 + (-0.43680904508059878254e-3 + (-0.20383783788303894442e-3 + (0.17421743090883439959e-5 + (0.22400425572175715576e-7 + (-0.69934719320045128997e-9 + (0.67152759655111111110e-11 + 0.26419960042578359995e-13 * t) * t) * t) * t) * t) * t) * t; } case 53: { double t = 2*y100 - 107; return 0.60859639489217430521e0 + (-0.12305921390962936873e-2 + (-0.19290150253894682629e-3 + (0.18944904654478310128e-5 + (0.15815530398618149110e-7 + (-0.61726850580964876070e-9 + 0.68987888999111111110e-11 * t) * t) * t) * t) * t) * t; } case 54: { double t = 2*y100 - 109; return 0.60537899426486075181e0 + (-0.19790062241395705751e-2 + (-0.18120271393047062253e-3 + (0.19974264162313241405e-5 + (0.10055795094298172492e-7 + (-0.53491997919318263593e-9 + (0.67794550295111111110e-11 - 0.17059208095741511603e-13 * t) * t) * t) * t) * t) * t) * t; } case 55: { double t = 2*y100 - 111; return 0.60071229457904110537e0 + (-0.26795676776166354354e-2 + (-0.16901799553627508781e-3 + (0.20575498324332621581e-5 + (0.51077165074461745053e-8 + (-0.45536079828057221858e-9 + (0.64488005516444444445e-11 - 0.29311677573152766338e-13 * t) * t) * t) * t) * t) * t) * t; } case 56: { double t = 2*y100 - 113; return 0.59469361520112714738e0 + (-0.33308208190600993470e-2 + (-0.15658501295912405679e-3 + (0.20812116912895417272e-5 + (0.93227468760614182021e-9 + (-0.38066673740116080415e-9 + (0.59806790359111111110e-11 - 0.36887077278950440597e-13 * t) * t) * t) * t) * t) * t) * t; } case 57: { double t = 2*y100 - 115; return 0.58742228631775388268e0 + (-0.39321858196059227251e-2 + (-0.14410441141450122535e-3 + (0.20743790018404020716e-5 + (-0.25261903811221913762e-8 + (-0.31212416519526924318e-9 + (0.54328422462222222221e-11 - 0.40864152484979815972e-13 * t) * t) * t) * t) * t) * t) * t; } case 58: { double t = 2*y100 - 117; return 0.57899804200033018447e0 + (-0.44838157005618913447e-2 + (-0.13174245966501437965e-3 + (0.20425306888294362674e-5 + (-0.53330296023875447782e-8 + (-0.25041289435539821014e-9 + (0.48490437205333333334e-11 - 0.42162206939169045177e-13 * t) * t) * t) * t) * t) * t) * t; } case 59: { double t = 2*y100 - 119; return 0.56951968796931245974e0 + (-0.49864649488074868952e-2 + (-0.11963416583477567125e-3 + (0.19906021780991036425e-5 + (-0.75580140299436494248e-8 + (-0.19576060961919820491e-9 + (0.42613011928888888890e-11 - 0.41539443304115604377e-13 * t) * t) * t) * t) * t) * t) * t; } case 60: { double t = 2*y100 - 121; return 0.55908401930063918964e0 + (-0.54413711036826877753e-2 + (-0.10788661102511914628e-3 + (0.19229663322982839331e-5 + (-0.92714731195118129616e-8 + (-0.14807038677197394186e-9 + (0.36920870298666666666e-11 - 0.39603726688419162617e-13 * t) * t) * t) * t) * t) * t) * t; } case 61: { double t = 2*y100 - 123; return 0.54778496152925675315e0 + (-0.58501497933213396670e-2 + (-0.96582314317855227421e-4 + (0.18434405235069270228e-5 + (-0.10541580254317078711e-7 + (-0.10702303407788943498e-9 + (0.31563175582222222222e-11 - 0.36829748079110481422e-13 * t) * t) * t) * t) * t) * t) * t; } case 62: { double t = 2*y100 - 125; return 0.53571290831682823999e0 + (-0.62147030670760791791e-2 + (-0.85782497917111760790e-4 + (0.17553116363443470478e-5 + (-0.11432547349815541084e-7 + (-0.72157091369041330520e-10 + (0.26630811607111111111e-11 - 0.33578660425893164084e-13 * t) * t) * t) * t) * t) * t) * t; } case 63: { double t = 2*y100 - 127; return 0.52295422962048434978e0 + (-0.65371404367776320720e-2 + (-0.75530164941473343780e-4 + (0.16613725797181276790e-5 + (-0.12003521296598910761e-7 + (-0.42929753689181106171e-10 + (0.22170894940444444444e-11 - 0.30117697501065110505e-13 * t) * t) * t) * t) * t) * t) * t; } case 64: { double t = 2*y100 - 129; return 0.50959092577577886140e0 + (-0.68197117603118591766e-2 + (-0.65852936198953623307e-4 + (0.15639654113906716939e-5 + (-0.12308007991056524902e-7 + (-0.18761997536910939570e-10 + (0.18198628922666666667e-11 - 0.26638355362285200932e-13 * t) * t) * t) * t) * t) * t) * t; } case 65: { double t = 2*y100 - 131; return 0.49570040481823167970e0 + (-0.70647509397614398066e-2 + (-0.56765617728962588218e-4 + (0.14650274449141448497e-5 + (-0.12393681471984051132e-7 + (0.92904351801168955424e-12 + (0.14706755960177777778e-11 - 0.23272455351266325318e-13 * t) * t) * t) * t) * t) * t) * t; } case 66: { double t = 2*y100 - 133; return 0.48135536250935238066e0 + (-0.72746293327402359783e-2 + (-0.48272489495730030780e-4 + (0.13661377309113939689e-5 + (-0.12302464447599382189e-7 + (0.16707760028737074907e-10 + (0.11672928324444444444e-11 - 0.20105801424709924499e-13 * t) * t) * t) * t) * t) * t) * t; } case 67: { double t = 2*y100 - 135; return 0.46662374675511439448e0 + (-0.74517177649528487002e-2 + (-0.40369318744279128718e-4 + (0.12685621118898535407e-5 + (-0.12070791463315156250e-7 + (0.29105507892605823871e-10 + (0.90653314645333333334e-12 - 0.17189503312102982646e-13 * t) * t) * t) * t) * t) * t) * t; } case 68: { double t = 2*y100 - 137; return 0.45156879030168268778e0 + (-0.75983560650033817497e-2 + (-0.33045110380705139759e-4 + (0.11732956732035040896e-5 + (-0.11729986947158201869e-7 + (0.38611905704166441308e-10 + (0.68468768305777777779e-12 - 0.14549134330396754575e-13 * t) * t) * t) * t) * t) * t) * t; } case 69: { double t = 2*y100 - 139; return 0.43624909769330896904e0 + (-0.77168291040309554679e-2 + (-0.26283612321339907756e-4 + (0.10811018836893550820e-5 + (-0.11306707563739851552e-7 + (0.45670446788529607380e-10 + (0.49782492549333333334e-12 - 0.12191983967561779442e-13 * t) * t) * t) * t) * t) * t) * t; } case 70: { double t = 2*y100 - 141; return 0.42071877443548481181e0 + (-0.78093484015052730097e-2 + (-0.20064596897224934705e-4 + (0.99254806680671890766e-6 + (-0.10823412088884741451e-7 + (0.50677203326904716247e-10 + (0.34200547594666666666e-12 - 0.10112698698356194618e-13 * t) * t) * t) * t) * t) * t) * t; } case 71: { double t = 2*y100 - 143; return 0.40502758809710844280e0 + (-0.78780384460872937555e-2 + (-0.14364940764532853112e-4 + (0.90803709228265217384e-6 + (-0.10298832847014466907e-7 + (0.53981671221969478551e-10 + (0.21342751381333333333e-12 - 0.82975901848387729274e-14 * t) * t) * t) * t) * t) * t) * t; } case 72: { double t = 2*y100 - 145; return 0.38922115269731446690e0 + (-0.79249269708242064120e-2 + (-0.91595258799106970453e-5 + (0.82783535102217576495e-6 + (-0.97484311059617744437e-8 + (0.55889029041660225629e-10 + (0.10851981336888888889e-12 - 0.67278553237853459757e-14 * t) * t) * t) * t) * t) * t) * t; } case 73: { double t = 2*y100 - 147; return 0.37334112915460307335e0 + (-0.79519385109223148791e-2 + (-0.44219833548840469752e-5 + (0.75209719038240314732e-6 + (-0.91848251458553190451e-8 + (0.56663266668051433844e-10 + (0.23995894257777777778e-13 - 0.53819475285389344313e-14 * t) * t) * t) * t) * t) * t) * t; } case 74: { double t = 2*y100 - 149; return 0.35742543583374223085e0 + (-0.79608906571527956177e-2 + (-0.12530071050975781198e-6 + (0.68088605744900552505e-6 + (-0.86181844090844164075e-8 + (0.56530784203816176153e-10 + (-0.43120012248888888890e-13 - 0.42372603392496813810e-14 * t) * t) * t) * t) * t) * t) * t; } case 75: { double t = 2*y100 - 151; return 0.34150846431979618536e0 + (-0.79534924968773806029e-2 + (0.37576885610891515813e-5 + (0.61419263633090524326e-6 + (-0.80565865409945960125e-8 + (0.55684175248749269411e-10 + (-0.95486860764444444445e-13 - 0.32712946432984510595e-14 * t) * t) * t) * t) * t) * t) * t; } case 76: { double t = 2*y100 - 153; return 0.32562129649136346824e0 + (-0.79313448067948884309e-2 + (0.72539159933545300034e-5 + (0.55195028297415503083e-6 + (-0.75063365335570475258e-8 + (0.54281686749699595941e-10 - 0.13545424295111111111e-12 * t) * t) * t) * t) * t) * t; } case 77: { double t = 2*y100 - 155; return 0.30979191977078391864e0 + (-0.78959416264207333695e-2 + (0.10389774377677210794e-4 + (0.49404804463196316464e-6 + (-0.69722488229411164685e-8 + (0.52469254655951393842e-10 - 0.16507860650666666667e-12 * t) * t) * t) * t) * t) * t; } case 78: { double t = 2*y100 - 157; return 0.29404543811214459904e0 + (-0.78486728990364155356e-2 + (0.13190885683106990459e-4 + (0.44034158861387909694e-6 + (-0.64578942561562616481e-8 + (0.50354306498006928984e-10 - 0.18614473550222222222e-12 * t) * t) * t) * t) * t) * t; } case 79: { double t = 2*y100 - 159; return 0.27840427686253660515e0 + (-0.77908279176252742013e-2 + (0.15681928798708548349e-4 + (0.39066226205099807573e-6 + (-0.59658144820660420814e-8 + (0.48030086420373141763e-10 - 0.20018995173333333333e-12 * t) * t) * t) * t) * t) * t; } case 80: { double t = 2*y100 - 161; return 0.26288838011163800908e0 + (-0.77235993576119469018e-2 + (0.17886516796198660969e-4 + (0.34482457073472497720e-6 + (-0.54977066551955420066e-8 + (0.45572749379147269213e-10 - 0.20852924954666666667e-12 * t) * t) * t) * t) * t) * t; } case 81: { double t = 2*y100 - 163; return 0.24751539954181029717e0 + (-0.76480877165290370975e-2 + (0.19827114835033977049e-4 + (0.30263228619976332110e-6 + (-0.50545814570120129947e-8 + (0.43043879374212005966e-10 - 0.21228012028444444444e-12 * t) * t) * t) * t) * t) * t; } case 82: { double t = 2*y100 - 165; return 0.23230087411688914593e0 + (-0.75653060136384041587e-2 + (0.21524991113020016415e-4 + (0.26388338542539382413e-6 + (-0.46368974069671446622e-8 + (0.40492715758206515307e-10 - 0.21238627815111111111e-12 * t) * t) * t) * t) * t) * t; } case 83: { double t = 2*y100 - 167; return 0.21725840021297341931e0 + (-0.74761846305979730439e-2 + (0.23000194404129495243e-4 + (0.22837400135642906796e-6 + (-0.42446743058417541277e-8 + (0.37958104071765923728e-10 - 0.20963978568888888889e-12 * t) * t) * t) * t) * t) * t; } case 84: { double t = 2*y100 - 169; return 0.20239979200788191491e0 + (-0.73815761980493466516e-2 + (0.24271552727631854013e-4 + (0.19590154043390012843e-6 + (-0.38775884642456551753e-8 + (0.35470192372162901168e-10 - 0.20470131678222222222e-12 * t) * t) * t) * t) * t) * t; } case 85: { double t = 2*y100 - 171; return 0.18773523211558098962e0 + (-0.72822604530339834448e-2 + (0.25356688567841293697e-4 + (0.16626710297744290016e-6 + (-0.35350521468015310830e-8 + (0.33051896213898864306e-10 - 0.19811844544000000000e-12 * t) * t) * t) * t) * t) * t; } case 86: { double t = 2*y100 - 173; return 0.17327341258479649442e0 + (-0.71789490089142761950e-2 + (0.26272046822383820476e-4 + (0.13927732375657362345e-6 + (-0.32162794266956859603e-8 + (0.30720156036105652035e-10 - 0.19034196304000000000e-12 * t) * t) * t) * t) * t) * t; } case 87: { double t = 2*y100 - 175; return 0.15902166648328672043e0 + (-0.70722899934245504034e-2 + (0.27032932310132226025e-4 + (0.11474573347816568279e-6 + (-0.29203404091754665063e-8 + (0.28487010262547971859e-10 - 0.18174029063111111111e-12 * t) * t) * t) * t) * t) * t; } case 88: { double t = 2*y100 - 177; return 0.14498609036610283865e0 + (-0.69628725220045029273e-2 + (0.27653554229160596221e-4 + (0.92493727167393036470e-7 + (-0.26462055548683583849e-8 + (0.26360506250989943739e-10 - 0.17261211260444444444e-12 * t) * t) * t) * t) * t) * t; } case 89: { double t = 2*y100 - 179; return 0.13117165798208050667e0 + (-0.68512309830281084723e-2 + (0.28147075431133863774e-4 + (0.72351212437979583441e-7 + (-0.23927816200314358570e-8 + (0.24345469651209833155e-10 - 0.16319736960000000000e-12 * t) * t) * t) * t) * t) * t; } case 90: { double t = 2*y100 - 181; return 0.11758232561160626306e0 + (-0.67378491192463392927e-2 + (0.28525664781722907847e-4 + (0.54156999310046790024e-7 + (-0.21589405340123827823e-8 + (0.22444150951727334619e-10 - 0.15368675584000000000e-12 * t) * t) * t) * t) * t) * t; } case 91: { double t = 2*y100 - 183; return 0.10422112945361673560e0 + (-0.66231638959845581564e-2 + (0.28800551216363918088e-4 + (0.37758983397952149613e-7 + (-0.19435423557038933431e-8 + (0.20656766125421362458e-10 - 0.14422990012444444444e-12 * t) * t) * t) * t) * t) * t; } case 92: { double t = 2*y100 - 185; return 0.91090275493541084785e-1 + (-0.65075691516115160062e-2 + (0.28982078385527224867e-4 + (0.23014165807643012781e-7 + (-0.17454532910249875958e-8 + (0.18981946442680092373e-10 - 0.13494234691555555556e-12 * t) * t) * t) * t) * t) * t; } case 93: { double t = 2*y100 - 187; return 0.78191222288771379358e-1 + (-0.63914190297303976434e-2 + (0.29079759021299682675e-4 + (0.97885458059415717014e-8 + (-0.15635596116134296819e-8 + (0.17417110744051331974e-10 - 0.12591151763555555556e-12 * t) * t) * t) * t) * t) * t; } case 94: { double t = 2*y100 - 189; return 0.65524757106147402224e-1 + (-0.62750311956082444159e-2 + (0.29102328354323449795e-4 + (-0.20430838882727954582e-8 + (-0.13967781903855367270e-8 + (0.15958771833747057569e-10 - 0.11720175765333333333e-12 * t) * t) * t) * t) * t) * t; } case 95: { double t = 2*y100 - 191; return 0.53091065838453612773e-1 + (-0.61586898417077043662e-2 + (0.29057796072960100710e-4 + (-0.12597414620517987536e-7 + (-0.12440642607426861943e-8 + (0.14602787128447932137e-10 - 0.10885859114666666667e-12 * t) * t) * t) * t) * t) * t; } case 96: { double t = 2*y100 - 193; return 0.40889797115352738582e-1 + (-0.60426484889413678200e-2 + (0.28953496450191694606e-4 + (-0.21982952021823718400e-7 + (-0.11044169117553026211e-8 + (0.13344562332430552171e-10 - 0.10091231402844444444e-12 * t) * t) * t) * t) * t) * t; } case 97: case 98: case 99: case 100: { // use Taylor expansion for small x (|x| <= 0.0309...) // (2/sqrt(pi)) * (x - 2/3 x^3 + 4/15 x^5 - 8/105 x^7 + 16/945 x^9) double x2 = x*x; return x * (1.1283791670955125739 - x2 * (0.75225277806367504925 - x2 * (0.30090111122547001970 - x2 * (0.085971746064420005629 - x2 * 0.016931216931216931217)))); } } /* Since 0 <= y100 < 101, this is only reached if x is NaN, in which case we should return NaN. */ return NaN; } double FADDEEVA(w_im)(double x) { if (x >= 0) { if (x > 45) { // continued-fraction expansion is faster const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) if (x > 5e7) // 1-term expansion, important to avoid overflow return ispi / x; /* 5-term expansion (rely on compiler for CSE), simplified from: ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */ return ispi*((x*x) * (x*x-4.5) + 2) / (x * ((x*x) * (x*x-5) + 3.75)); } return w_im_y100(100/(1+x), x); } else { // = -FADDEEVA(w_im)(-x) if (x < -45) { // continued-fraction expansion is faster const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi) if (x < -5e7) // 1-term expansion, important to avoid overflow return ispi / x; /* 5-term expansion (rely on compiler for CSE), simplified from: ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */ return ispi*((x*x) * (x*x-4.5) + 2) / (x * ((x*x) * (x*x-5) + 3.75)); } return -w_im_y100(100/(1-x), -x); } } ///////////////////////////////////////////////////////////////////////// // Compile with -DTEST_FADDEEVA to compile a little test program #ifdef TEST_FADDEEVA #ifdef __cplusplus # include #else # include #endif // compute relative error |b-a|/|a|, handling case of NaN and Inf, static double relerr(double a, double b) { if (isnan(a) || isnan(b) || isinf(a) || isinf(b)) { if ((isnan(a) && !isnan(b)) || (!isnan(a) && isnan(b)) || (isinf(a) && !isinf(b)) || (!isinf(a) && isinf(b)) || (isinf(a) && isinf(b) && a*b < 0)) return Inf; // "infinite" error return 0; // matching infinity/nan results counted as zero error } if (a == 0) return b == 0 ? 0 : Inf; else return fabs((b-a) / a); } int main(void) { double errmax_all = 0; { printf("############# w(z) tests #############\n"); #define NTST 57 // define instead of const for C compatibility cmplx z[NTST] = { C(624.2,-0.26123), C(-0.4,3.), C(0.6,2.), C(-1.,1.), C(-1.,-9.), C(-1.,9.), C(-0.0000000234545,1.1234), C(-3.,5.1), C(-53,30.1), C(0.0,0.12345), C(11,1), C(-22,-2), C(9,-28), C(21,-33), C(1e5,1e5), C(1e14,1e14), C(-3001,-1000), C(1e160,-1e159), C(-6.01,0.01), C(-0.7,-0.7), C(2.611780000000000e+01, 4.540909610972489e+03), C(0.8e7,0.3e7), C(-20,-19.8081), C(1e-16,-1.1e-16), C(2.3e-8,1.3e-8), C(6.3,-1e-13), C(6.3,1e-20), C(1e-20,6.3), C(1e-20,16.3), C(9,1e-300), C(6.01,0.11), C(8.01,1.01e-10), C(28.01,1e-300), C(10.01,1e-200), C(10.01,-1e-200), C(10.01,0.99e-10), C(10.01,-0.99e-10), C(1e-20,7.01), C(-1,7.01), C(5.99,7.01), C(1,0), C(55,0), C(-0.1,0), C(1e-20,0), C(0,5e-14), C(0,51), C(Inf,0), C(-Inf,0), C(0,Inf), C(0,-Inf), C(Inf,Inf), C(Inf,-Inf), C(NaN,NaN), C(NaN,0), C(0,NaN), C(NaN,Inf), C(Inf,NaN) }; cmplx w[NTST] = { /* w(z), computed with WolframAlpha ... note that WolframAlpha is problematic some of the above inputs, so I had to use the continued-fraction expansion in WolframAlpha in some cases, or switch to Maple */ C(-3.78270245518980507452677445620103199303131110e-7, 0.000903861276433172057331093754199933411710053155), C(0.1764906227004816847297495349730234591778719532788, -0.02146550539468457616788719893991501311573031095617), C(0.2410250715772692146133539023007113781272362309451, 0.06087579663428089745895459735240964093522265589350), C(0.30474420525691259245713884106959496013413834051768, -0.20821893820283162728743734725471561394145872072738), C(7.317131068972378096865595229600561710140617977e34, 8.321873499714402777186848353320412813066170427e34), C(0.0615698507236323685519612934241429530190806818395, -0.00676005783716575013073036218018565206070072304635), C(0.3960793007699874918961319170187598400134746631, -5.593152259116644920546186222529802777409274656e-9), C(0.08217199226739447943295069917990417630675021771804, -0.04701291087643609891018366143118110965272615832184), C(0.00457246000350281640952328010227885008541748668738, -0.00804900791411691821818731763401840373998654987934), C(0.8746342859608052666092782112565360755791467973338452, 0.), C(0.00468190164965444174367477874864366058339647648741, 0.0510735563901306197993676329845149741675029197050), C(-0.0023193175200187620902125853834909543869428763219, -0.025460054739731556004902057663500272721780776336), C(9.11463368405637174660562096516414499772662584e304, 3.97101807145263333769664875189354358563218932e305), C(-4.4927207857715598976165541011143706155432296e281, -2.8019591213423077494444700357168707775769028e281), C(2.820947917809305132678577516325951485807107151e-6, 2.820947917668257736791638444590253942253354058e-6), C(2.82094791773878143474039725787438662716372268e-15, 2.82094791773878143474039725773333923127678361e-15), C(-0.0000563851289696244350147899376081488003110150498, -0.000169211755126812174631861529808288295454992688), C(-5.586035480670854326218608431294778077663867e-162, 5.586035480670854326218608431294778077663867e-161), C(0.00016318325137140451888255634399123461580248456, -0.095232456573009287370728788146686162555021209999), C(0.69504753678406939989115375989939096800793577783885, -1.8916411171103639136680830887017670616339912024317), C(0.0001242418269653279656612334210746733213167234822, 7.145975826320186888508563111992099992116786763e-7), C(2.318587329648353318615800865959225429377529825e-8, 6.182899545728857485721417893323317843200933380e-8), C(-0.0133426877243506022053521927604277115767311800303, -0.0148087097143220769493341484176979826888871576145), C(1.00000000000000012412170838050638522857747934, 1.12837916709551279389615890312156495593616433e-16), C(0.9999999853310704677583504063775310832036830015, 2.595272024519678881897196435157270184030360773e-8), C(-1.4731421795638279504242963027196663601154624e-15, 0.090727659684127365236479098488823462473074709), C(5.79246077884410284575834156425396800754409308e-18, 0.0907276596841273652364790985059772809093822374), C(0.0884658993528521953466533278764830881245144368, 1.37088352495749125283269718778582613192166760e-22), C(0.0345480845419190424370085249304184266813447878, 2.11161102895179044968099038990446187626075258e-23), C(6.63967719958073440070225527042829242391918213e-36, 0.0630820900592582863713653132559743161572639353), C(0.00179435233208702644891092397579091030658500743634, 0.0951983814805270647939647438459699953990788064762), C(9.09760377102097999924241322094863528771095448e-13, 0.0709979210725138550986782242355007611074966717), C(7.2049510279742166460047102593255688682910274423e-304, 0.0201552956479526953866611812593266285000876784321), C(3.04543604652250734193622967873276113872279682e-44, 0.0566481651760675042930042117726713294607499165), C(3.04543604652250734193622967873276113872279682e-44, 0.0566481651760675042930042117726713294607499165), C(0.5659928732065273429286988428080855057102069081e-12, 0.056648165176067504292998527162143030538756683302), C(-0.56599287320652734292869884280802459698927645e-12, 0.0566481651760675042929985271621430305387566833029), C(0.0796884251721652215687859778119964009569455462, 1.11474461817561675017794941973556302717225126e-22), C(0.07817195821247357458545539935996687005781943386550, -0.01093913670103576690766705513142246633056714279654), C(0.04670032980990449912809326141164730850466208439937, 0.03944038961933534137558064191650437353429669886545), C(0.36787944117144232159552377016146086744581113103176, 0.60715770584139372911503823580074492116122092866515), C(0, 0.010259688805536830986089913987516716056946786526145), C(0.99004983374916805357390597718003655777207908125383, -0.11208866436449538036721343053869621153527769495574), C(0.99999999999999999999999999999999999999990000, 1.12837916709551257389615890312154517168802603e-20), C(0.999999999999943581041645226871305192054749891144158, 0), C(0.0110604154853277201542582159216317923453996211744250, 0), C(0,0), C(0,0), C(0,0), C(Inf,0), C(0,0), C(NaN,NaN), C(NaN,NaN), C(NaN,NaN), C(NaN,0), C(NaN,NaN), C(NaN,NaN) }; double errmax = 0; for (int i = 0; i < NTST; ++i) { cmplx fw = FADDEEVA(w)(z[i],0.); double re_err = relerr(creal(w[i]), creal(fw)); double im_err = relerr(cimag(w[i]), cimag(fw)); printf("w(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n", creal(z[i]),cimag(z[i]), creal(fw),cimag(fw), creal(w[i]),cimag(w[i]), re_err, im_err); if (re_err > errmax) errmax = re_err; if (im_err > errmax) errmax = im_err; } if (errmax > 1e-13) { printf("FAILURE -- relative error %g too large!\n", errmax); return 1; } printf("SUCCESS (max relative error = %g)\n", errmax); if (errmax > errmax_all) errmax_all = errmax; } { #undef NTST #define NTST 41 // define instead of const for C compatibility cmplx z[NTST] = { C(1,2), C(-1,2), C(1,-2), C(-1,-2), C(9,-28), C(21,-33), C(1e3,1e3), C(-3001,-1000), C(1e160,-1e159), C(5.1e-3, 1e-8), C(-4.9e-3, 4.95e-3), C(4.9e-3, 0.5), C(4.9e-4, -0.5e1), C(-4.9e-5, -0.5e2), C(5.1e-3, 0.5), C(5.1e-4, -0.5e1), C(-5.1e-5, -0.5e2), C(1e-6,2e-6), C(0,2e-6), C(0,2), C(0,20), C(0,200), C(Inf,0), C(-Inf,0), C(0,Inf), C(0,-Inf), C(Inf,Inf), C(Inf,-Inf), C(NaN,NaN), C(NaN,0), C(0,NaN), C(NaN,Inf), C(Inf,NaN), C(1e-3,NaN), C(7e-2,7e-2), C(7e-2,-7e-4), C(-9e-2,7e-4), C(-9e-2,9e-2), C(-7e-4,9e-2), C(7e-2,0.9e-2), C(7e-2,1.1e-2) }; cmplx w[NTST] = { // erf(z[i]), evaluated with Maple C(-0.5366435657785650339917955593141927494421, -5.049143703447034669543036958614140565553), C(0.5366435657785650339917955593141927494421, -5.049143703447034669543036958614140565553), C(-0.5366435657785650339917955593141927494421, 5.049143703447034669543036958614140565553), C(0.5366435657785650339917955593141927494421, 5.049143703447034669543036958614140565553), C(0.3359473673830576996788000505817956637777e304, -0.1999896139679880888755589794455069208455e304), C(0.3584459971462946066523939204836760283645e278, 0.3818954885257184373734213077678011282505e280), C(0.9996020422657148639102150147542224526887, 0.00002801044116908227889681753993542916894856), C(-1, 0), C(1, 0), C(0.005754683859034800134412990541076554934877, 0.1128349818335058741511924929801267822634e-7), C(-0.005529149142341821193633460286828381876955, 0.005585388387864706679609092447916333443570), C(0.007099365669981359632319829148438283865814, 0.6149347012854211635026981277569074001219), C(0.3981176338702323417718189922039863062440e8, -0.8298176341665249121085423917575122140650e10), C(-Inf, -Inf), C(0.007389128308257135427153919483147229573895, 0.6149332524601658796226417164791221815139), C(0.4143671923267934479245651547534414976991e8, -0.8298168216818314211557046346850921446950e10), C(-Inf, -Inf), C(0.1128379167099649964175513742247082845155e-5, 0.2256758334191777400570377193451519478895e-5), C(0, 0.2256758334194034158904576117253481476197e-5), C(0, 18.56480241457555259870429191324101719886), C(0, 0.1474797539628786202447733153131835124599e173), C(0, Inf), C(1,0), C(-1,0), C(0,Inf), C(0,-Inf), C(NaN,NaN), C(NaN,NaN), C(NaN,NaN), C(NaN,0), C(0,NaN), C(NaN,NaN), C(NaN,NaN), C(NaN,NaN), C(0.07924380404615782687930591956705225541145, 0.07872776218046681145537914954027729115247), C(0.07885775828512276968931773651224684454495, -0.0007860046704118224342390725280161272277506), C(-0.1012806432747198859687963080684978759881, 0.0007834934747022035607566216654982820299469), C(-0.1020998418798097910247132140051062512527, 0.1010030778892310851309082083238896270340), C(-0.0007962891763147907785684591823889484764272, 0.1018289385936278171741809237435404896152), C(0.07886408666470478681566329888615410479530, 0.01010604288780868961492224347707949372245), C(0.07886723099940260286824654364807981336591, 0.01235199327873258197931147306290916629654) }; #define TST(f,isc) \ printf("############# " #f "(z) tests #############\n"); \ double errmax = 0; \ for (int i = 0; i < NTST; ++i) { \ cmplx fw = FADDEEVA(f)(z[i],0.); \ double re_err = relerr(creal(w[i]), creal(fw)); \ double im_err = relerr(cimag(w[i]), cimag(fw)); \ printf(#f "(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n", \ creal(z[i]),cimag(z[i]), creal(fw),cimag(fw), creal(w[i]),cimag(w[i]), \ re_err, im_err); \ if (re_err > errmax) errmax = re_err; \ if (im_err > errmax) errmax = im_err; \ } \ if (errmax > 1e-13) { \ printf("FAILURE -- relative error %g too large!\n", errmax); \ return 1; \ } \ printf("Checking " #f "(x) special case...\n"); \ for (int i = 0; i < 10000; ++i) { \ double x = pow(10., -300. + i * 600. / (10000 - 1)); \ double re_err = relerr(FADDEEVA_RE(f)(x), \ creal(FADDEEVA(f)(C(x,x*isc),0.))); \ if (re_err > errmax) errmax = re_err; \ re_err = relerr(FADDEEVA_RE(f)(-x), \ creal(FADDEEVA(f)(C(-x,x*isc),0.))); \ if (re_err > errmax) errmax = re_err; \ } \ { \ double re_err = relerr(FADDEEVA_RE(f)(Inf), \ creal(FADDEEVA(f)(C(Inf,0.),0.))); \ if (re_err > errmax) errmax = re_err; \ re_err = relerr(FADDEEVA_RE(f)(-Inf), \ creal(FADDEEVA(f)(C(-Inf,0.),0.))); \ if (re_err > errmax) errmax = re_err; \ re_err = relerr(FADDEEVA_RE(f)(NaN), \ creal(FADDEEVA(f)(C(NaN,0.),0.))); \ if (re_err > errmax) errmax = re_err; \ } \ if (errmax > 1e-13) { \ printf("FAILURE -- relative error %g too large!\n", errmax); \ return 1; \ } \ printf("SUCCESS (max relative error = %g)\n", errmax); \ if (errmax > errmax_all) errmax_all = errmax TST(erf, 1e-20); } { // since erfi just calls through to erf, just one test should // be sufficient to make sure I didn't screw up the signs or something #undef NTST #define NTST 1 // define instead of const for C compatibility cmplx z[NTST] = { C(1.234,0.5678) }; cmplx w[NTST] = { // erfi(z[i]), computed with Maple C(1.081032284405373149432716643834106923212, 1.926775520840916645838949402886591180834) }; TST(erfi, 0); } { // since erfcx just calls through to w, just one test should // be sufficient to make sure I didn't screw up the signs or something #undef NTST #define NTST 1 // define instead of const for C compatibility cmplx z[NTST] = { C(1.234,0.5678) }; cmplx w[NTST] = { // erfcx(z[i]), computed with Maple C(0.3382187479799972294747793561190487832579, -0.1116077470811648467464927471872945833154) }; TST(erfcx, 0); } { #undef NTST #define NTST 30 // define instead of const for C compatibility cmplx z[NTST] = { C(1,2), C(-1,2), C(1,-2), C(-1,-2), C(9,-28), C(21,-33), C(1e3,1e3), C(-3001,-1000), C(1e160,-1e159), C(5.1e-3, 1e-8), C(0,2e-6), C(0,2), C(0,20), C(0,200), C(2e-6,0), C(2,0), C(20,0), C(200,0), C(Inf,0), C(-Inf,0), C(0,Inf), C(0,-Inf), C(Inf,Inf), C(Inf,-Inf), C(NaN,NaN), C(NaN,0), C(0,NaN), C(NaN,Inf), C(Inf,NaN), C(88,0) }; cmplx w[NTST] = { // erfc(z[i]), evaluated with Maple C(1.536643565778565033991795559314192749442, 5.049143703447034669543036958614140565553), C(0.4633564342214349660082044406858072505579, 5.049143703447034669543036958614140565553), C(1.536643565778565033991795559314192749442, -5.049143703447034669543036958614140565553), C(0.4633564342214349660082044406858072505579, -5.049143703447034669543036958614140565553), C(-0.3359473673830576996788000505817956637777e304, 0.1999896139679880888755589794455069208455e304), C(-0.3584459971462946066523939204836760283645e278, -0.3818954885257184373734213077678011282505e280), C(0.0003979577342851360897849852457775473112748, -0.00002801044116908227889681753993542916894856), C(2, 0), C(0, 0), C(0.9942453161409651998655870094589234450651, -0.1128349818335058741511924929801267822634e-7), C(1, -0.2256758334194034158904576117253481476197e-5), C(1, -18.56480241457555259870429191324101719886), C(1, -0.1474797539628786202447733153131835124599e173), C(1, -Inf), C(0.9999977432416658119838633199332831406314, 0), C(0.004677734981047265837930743632747071389108, 0), C(0.5395865611607900928934999167905345604088e-175, 0), C(0, 0), C(0, 0), C(2, 0), C(1, -Inf), C(1, Inf), C(NaN, NaN), C(NaN, NaN), C(NaN, NaN), C(NaN, 0), C(1, NaN), C(NaN, NaN), C(NaN, NaN), C(0,0) }; TST(erfc, 1e-20); } { #undef NTST #define NTST 48 // define instead of const for C compatibility cmplx z[NTST] = { C(2,1), C(-2,1), C(2,-1), C(-2,-1), C(-28,9), C(33,-21), C(1e3,1e3), C(-1000,-3001), C(1e-8, 5.1e-3), C(4.95e-3, -4.9e-3), C(5.1e-3, 5.1e-3), C(0.5, 4.9e-3), C(-0.5e1, 4.9e-4), C(-0.5e2, -4.9e-5), C(0.5e3, 4.9e-6), C(0.5, 5.1e-3), C(-0.5e1, 5.1e-4), C(-0.5e2, -5.1e-5), C(1e-6,2e-6), C(2e-6,0), C(2,0), C(20,0), C(200,0), C(0,4.9e-3), C(0,-5.1e-3), C(0,2e-6), C(0,-2), C(0,20), C(0,-200), C(Inf,0), C(-Inf,0), C(0,Inf), C(0,-Inf), C(Inf,Inf), C(Inf,-Inf), C(NaN,NaN), C(NaN,0), C(0,NaN), C(NaN,Inf), C(Inf,NaN), C(39, 6.4e-5), C(41, 6.09e-5), C(4.9e7, 5e-11), C(5.1e7, 4.8e-11), C(1e9, 2.4e-12), C(1e11, 2.4e-14), C(1e13, 2.4e-16), C(1e300, 2.4e-303) }; cmplx w[NTST] = { // dawson(z[i]), evaluated with Maple C(0.1635394094345355614904345232875688576839, -0.1531245755371229803585918112683241066853), C(-0.1635394094345355614904345232875688576839, -0.1531245755371229803585918112683241066853), C(0.1635394094345355614904345232875688576839, 0.1531245755371229803585918112683241066853), C(-0.1635394094345355614904345232875688576839, 0.1531245755371229803585918112683241066853), C(-0.01619082256681596362895875232699626384420, -0.005210224203359059109181555401330902819419), C(0.01078377080978103125464543240346760257008, 0.006866888783433775382193630944275682670599), C(-0.5808616819196736225612296471081337245459, 0.6688593905505562263387760667171706325749), C(Inf, -Inf), C(0.1000052020902036118082966385855563526705e-7, 0.005100088434920073153418834680320146441685), C(0.004950156837581592745389973960217444687524, -0.004899838305155226382584756154100963570500), C(0.005100176864319675957314822982399286703798, 0.005099823128319785355949825238269336481254), C(0.4244534840871830045021143490355372016428, 0.002820278933186814021399602648373095266538), C(-0.1021340733271046543881236523269967674156, -0.00001045696456072005761498961861088944159916), C(-0.01000200120119206748855061636187197886859, 0.9805885888237419500266621041508714123763e-8), C(0.001000002000012000023960527532953151819595, -0.9800058800588007290937355024646722133204e-11), C(0.4244549085628511778373438768121222815752, 0.002935393851311701428647152230552122898291), C(-0.1021340732357117208743299813648493928105, -0.00001088377943049851799938998805451564893540), C(-0.01000200120119126652710792390331206563616, 0.1020612612857282306892368985525393707486e-7), C(0.1000000000007333333333344266666666664457e-5, 0.2000000000001333333333323199999999978819e-5), C(0.1999999999994666666666675199999999990248e-5, 0), C(0.3013403889237919660346644392864226952119, 0), C(0.02503136792640367194699495234782353186858, 0), C(0.002500031251171948248596912483183760683918, 0), C(0,0.004900078433419939164774792850907128053308), C(0,-0.005100088434920074173454208832365950009419), C(0,0.2000000000005333333333341866666666676419e-5), C(0,-48.16001211429122974789822893525016528191), C(0,0.4627407029504443513654142715903005954668e174), C(0,-Inf), C(0,0), C(-0,0), C(0, Inf), C(0, -Inf), C(NaN, NaN), C(NaN, NaN), C(NaN, NaN), C(NaN, 0), C(0, NaN), C(NaN, NaN), C(NaN, NaN), C(0.01282473148489433743567240624939698290584, -0.2105957276516618621447832572909153498104e-7), C(0.01219875253423634378984109995893708152885, -0.1813040560401824664088425926165834355953e-7), C(0.1020408163265306334945473399689037886997e-7, -0.1041232819658476285651490827866174985330e-25), C(0.9803921568627452865036825956835185367356e-8, -0.9227220299884665067601095648451913375754e-26), C(0.5000000000000000002500000000000000003750e-9, -0.1200000000000000001800000188712838420241e-29), C(5.00000000000000000000025000000000000000000003e-12, -1.20000000000000000000018000000000000000000004e-36), C(5.00000000000000000000000002500000000000000000e-14, -1.20000000000000000000000001800000000000000000e-42), C(5e-301, 0) }; TST(Dawson, 1e-20); } printf("#####################################\n"); printf("SUCCESS (max relative error = %g)\n", errmax_all); } #endif openturns-1.9/lib/src/Base/Func/SpecFunc/Faddeeva.hh000066400000000000000000000051251307543307100222560ustar00rootroot00000000000000/* Copyright (c) 2012 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Available at: http://ab-initio.mit.edu/Faddeeva Header file for Faddeeva.cc; see that file for more information. */ #ifndef FADDEEVA_HH #define FADDEEVA_HH 1 #include namespace Faddeeva { // compute w(z) = exp(-z^2) erfc(-iz) [ Faddeeva / scaled complex error func ] extern std::complex w(std::complex z,double relerr=0); extern double w_im(double x); // special-case code for Im[w(x)] of real x // Various functions that we can compute with the help of w(z) // compute erfcx(z) = exp(z^2) erfc(z) extern std::complex erfcx(std::complex z, double relerr=0); extern double erfcx(double x); // special case for real x // compute erf(z), the error function of complex arguments extern std::complex erf(std::complex z, double relerr=0); extern double erf(double x); // special case for real x // compute erfi(z) = -i erf(iz), the imaginary error function extern std::complex erfi(std::complex z, double relerr=0); extern double erfi(double x); // special case for real x // compute erfc(z) = 1 - erf(z), the complementary error function extern std::complex erfc(std::complex z, double relerr=0); extern double erfc(double x); // special case for real x // compute Dawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) extern std::complex Dawson(std::complex z, double relerr=0); extern double Dawson(double x); // special case for real x } // namespace Faddeeva #endif // FADDEEVA_HH openturns-1.9/lib/src/Base/Func/SpecFunc/GammaFunctions.cxx000066400000000000000000000066041307543307100237000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the incomplete * regularized gamma function and related functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/GammaFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/incgam.hxx" #ifdef OPENTURNS_HAVE_BOOST #include #endif BEGIN_NAMESPACE_OPENTURNS namespace GammaFunctions { Scalar IncompleteGamma(const Scalar a, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; return RegularizedIncompleteGamma(a, x, tail) * SpecFunc::Gamma(a); } Scalar IncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; return RegularizedIncompleteGammaInverse(a, x / SpecFunc::Gamma(a), tail); } Scalar RegularizedIncompleteGamma(const Scalar a, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; if (x <= 0.0) return (tail ? 1.0 : 0.0); #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::gamma_q(a, x) : boost::math::gamma_p(a, x)); #else Scalar p = -1.0; Scalar q = -1.0; SignedInteger ierr; incgam(a, x, p, q, ierr); if (ierr == 1) LOGWARN(OSS() << "underflow or overflow in RegularizedIncompleteGamma for a=" << a << ", x=" << x); return (tail ? q : p); #endif } Scalar RegularizedIncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: a must be positive, here a=" << a; #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::gamma_q_inv(a, x) : boost::math::gamma_p_inv(a, x)); #else const Scalar y = 0.5 + (0.5 - x); Scalar xr = -1.0; SignedInteger ierr; invincgam(a, (tail ? y : x), (tail ? x : y), xr, ierr); if (ierr == -1) LOGWARN(OSS() << "cannot compute the RegularizedIncompleteGammaInverse funtion to full precision for a=" << a << ", x=" << x << ", tail=" << tail << " because of an overflow."); if (ierr == -2) LOGWARN(OSS() << "up to 15 Newton iterations have been made to compute the RegularizedIncompleteGammaInverse funtion for a=" << a << ", x=" << x << ", tail=" << tail << ". The accuracy may be reduced."); return xr; #endif } } // GammaFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/SpecFunc.cxx000066400000000000000000001157231307543307100224760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OpenTURNS wrapper to a library of special functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/SpecFunc.hxx" #include "openturns/BetaFunctions.hxx" #include "openturns/ExponentialIntegralFunctions.hxx" #include "openturns/Debye.hxx" #include "Faddeeva.hh" #include "openturns/GammaFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Function.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/PlatformInfo.hxx" #ifdef OPENTURNS_HAVE_BOOST #include #include #if (BOOST_VERSION >= 105600) #include #endif #else #include "openturns/GaussKronrod.hxx" #include "openturns/Function.hxx" #include "openturns/Interval.hxx" #endif BEGIN_NAMESPACE_OPENTURNS // 0.39894228040143267 = 1 / sqrt(2.pi) const Scalar SpecFunc::ISQRT2PI = 0.39894228040143267; // 2.5066282746310005024 = sqrt(2.pi) const Scalar SpecFunc::SQRT2PI = 2.5066282746310005024; // 0.91893853320467274177 = log(sqrt(2.pi)) const Scalar SpecFunc::LOGSQRT2PI = 0.91893853320467274177; // 0.57721566490153286 = Euler constant gamma const Scalar SpecFunc::EulerConstant = 0.57721566490153286; // 1.64493406684822643 = pi^2 / 6 const Scalar SpecFunc::PI2_6 = 1.64493406684822643; // 1.28254983016118640 = pi / sqrt(6) const Scalar SpecFunc::PI_SQRT6 = 1.28254983016118640; // 0.45005320754569466 = gamma * sqrt(6) / pi const Scalar SpecFunc::EULERSQRT6_PI = 0.45005320754569466; // 3.28986813369645287 = pi^2 / 3 const Scalar SpecFunc::PI2_3 = 3.28986813369645287; // 0.55132889542179204 = sqrt(3) / pi const Scalar SpecFunc::SQRT3_PI = 0.55132889542179204; // 1.81379936423421785 = pi / sqrt(3) const Scalar SpecFunc::PI_SQRT3 = 1.81379936423421785; // 1.81379936423421785 = pi / sqrt(3) const Scalar SpecFunc::ZETA3 = 1.20205690315959429; // Scalar limits const Scalar SpecFunc::MinScalar = std::numeric_limits::min(); const Scalar SpecFunc::LogMinScalar = log(MinScalar); const Scalar SpecFunc::MaxScalar = std::numeric_limits::max(); const Scalar SpecFunc::LogMaxScalar = log(MaxScalar); const Scalar SpecFunc::ScalarEpsilon = std::numeric_limits::epsilon(); // Maximum number of iterations for the algorithms const UnsignedInteger SpecFunc::MaximumIteration = ResourceMap::GetAsUnsignedInteger("SpecFunc-MaximumIteration"); const Scalar SpecFunc::Precision = ResourceMap::GetAsScalar("SpecFunc-Precision"); // @deprecated const Scalar SpecFunc::MinNumericalScalar = MinScalar; const Scalar SpecFunc::LogMinNumericalScalar = LogMinScalar; const Scalar SpecFunc::MaxNumericalScalar = MaxScalar; const Scalar SpecFunc::LogMaxNumericalScalar = LogMaxScalar; const Scalar SpecFunc::NumericalScalarEpsilon = ScalarEpsilon; // Some facilities for NaN and inf Bool SpecFunc::IsNaN(const Scalar value) { return value != value; } Bool SpecFunc::IsInf(const Scalar value) { return (value == value) && IsNaN(value - value); } Bool SpecFunc::IsNormal(const Scalar value) { return value - value == 0.0; } // Modified first kind Bessel function of order 0: BesselI0(x) = \sum_{m=0}\infty\frac{1}{m!^2}\left(\frac{x}{2}\right)^{2m} Scalar SpecFunc::SmallCaseBesselI0(const Scalar x) { const Scalar x2 = x * x; Scalar value = 1.0; Scalar r = 1.0; UnsignedInteger k = 1; while ((std::abs(r / value) > 0.0) && (k < SpecFunc::MaximumIteration)) { r *= 0.25 * x2 / (k * k); value += r; ++k; } return value; } Scalar SpecFunc::LargeCaseLogBesselI0(const Scalar x) { static Scalar A[12] = {0.125, 7.03125e-02, 7.32421875e-02, 1.1215209960938e-01, 2.2710800170898e-01, 5.7250142097473e-01, 1.7277275025845, 6.0740420012735, 2.4380529699556e+01, 1.1001714026925e+02, 5.5133589612202e+02, 3.0380905109224e+03 }; const Scalar ax = std::abs(x); UnsignedInteger k0 = 12; if (ax >= 35.0) k0 = 9; if (ax >= 50.0) k0 = 7; Scalar value = 1.0; const Scalar xR = 1.0 / ax; Scalar xRPow = xR; for (UnsignedInteger k = 0; k < k0; ++k) { value += A[k] * xRPow; xRPow *= xR; } value = log(value) + ax - 0.5 * log(2.0 * M_PI * ax); return value; } Scalar SpecFunc::BesselI0(const Scalar x) { if (x == 0.0) return 1.0; // Small argument if (std::abs(x) <= 23.5) return SmallCaseBesselI0(x); // Large argument else return exp(LargeCaseLogBesselI0(x)); } Scalar SpecFunc::LogBesselI0(const Scalar x) { if (x == 0.0) return 0.0; // Small argument if (std::abs(x) <= 23.5) return log(SmallCaseBesselI0(x)); // Large argument else return LargeCaseLogBesselI0(x); } // Modified first kind Bessel function of order 1: BesselI1(x) = \sum_{m=0}\infty\frac{1}{m!(m+1)!}\left(\frac{x}{2}\right)^{2m+1} Scalar SpecFunc::SmallCaseBesselI1(const Scalar x) { const Scalar x2 = x * x; Scalar value = 1.0; Scalar r = 1.0; UnsignedInteger k = 1; while ((std::abs(r / value) > 0.0) && (k < SpecFunc::MaximumIteration)) { r *= 0.25 * x2 / (k * (k + 1)); value += r; ++k; } value *= 0.5 * x; return value; } Scalar SpecFunc::LargeCaseLogBesselI1(const Scalar x) { static Scalar B[12] = { -0.375, -1.171875e-01, -1.025390625e-01, -1.4419555664063e-01, -2.7757644653320e-01, -6.7659258842468e-01, -1.9935317337513, -6.8839142681099, -2.7248827311269e+01, -1.2159789187654e+02, -6.0384407670507e+02, -3.3022722944809e+03 }; const Scalar ax = std::abs(x); UnsignedInteger k0 = 12; if (ax >= 35.0) k0 = 9; if (ax >= 50.0) k0 = 7; Scalar value = 1.0; const Scalar xR = 1.0 / ax; Scalar xRPow = xR; for (UnsignedInteger k = 0; k < k0; ++k) { value += B[k] * xRPow; xRPow *= xR; } value = log(value) + ax - 0.5 * log(2.0 * M_PI * ax); return value; } Scalar SpecFunc::BesselI1(const Scalar x) { if (x == 0.0) return 0.0; // Small argument if (std::abs(x) <= 22.0) return SmallCaseBesselI1(x); else { const Scalar signX = x <= 0.0 ? -1.0 : 1.0; const Scalar value = signX * exp(LargeCaseLogBesselI1(x)); return value; } } Scalar SpecFunc::LogBesselI1(const Scalar x) { if (x <= 0.0) return -MaxScalar; // Small argument if (std::abs(x) <= 22.0) return log(SmallCaseBesselI1(x)); else return LargeCaseLogBesselI1(x); } // Difference between the logarithms of BesselI1 and BesselI0: // DeltaLogBesselI10(x) = log(BesselI1(x)) - log(BesselI0(x)) Scalar SpecFunc::LargeCaseDeltaLogBesselI10(const Scalar x) { static Scalar A[12] = {0.125, 7.03125e-02, 7.32421875e-02, 1.1215209960938e-01, 2.2710800170898e-01, 5.7250142097473e-01, 1.7277275025845, 6.0740420012735, 2.4380529699556e+01, 1.1001714026925e+02, 5.5133589612202e+02, 3.0380905109224e+03 }; static Scalar B[12] = { -0.375, -1.171875e-01, -1.025390625e-01, -1.4419555664063e-01, -2.7757644653320e-01, -6.7659258842468e-01, -1.9935317337513, -6.8839142681099, -2.7248827311269e+01, -1.2159789187654e+02, -6.0384407670507e+02, -3.3022722944809e+03 }; const Scalar ax = std::abs(x); UnsignedInteger k0 = 12; if (ax >= 35.0) k0 = 9; if (ax >= 50.0) k0 = 7; Scalar valueI0 = 1.0; Scalar valueI1 = 1.0; const Scalar xR = 1.0 / ax; Scalar xRPow = xR; for (UnsignedInteger k = 0; k < k0; ++k) { valueI0 += A[k] * xRPow; valueI1 += B[k] * xRPow; xRPow *= xR; } return log(valueI1) - log(valueI0); } Scalar SpecFunc::DeltaLogBesselI10(const Scalar x) { if (x <= 0.0) return -MaxScalar; // Small argument if (std::abs(x) <= 22.0) return log(SmallCaseBesselI1(x) / SmallCaseBesselI0(x)); else return LargeCaseDeltaLogBesselI10(x); } // Logarithm of the modified second kind Bessel function of order nu: LogBesselK(nu, x)=log(\frac{\pi}{2}\frac{I_{-\nu}(x)-I_[\nu}(x)}{\sin{\nu\pi}}) Scalar SpecFunc::LogBesselK(const Scalar nu, const Scalar x) { if (!(x > 0.0)) throw InvalidArgumentException(HERE) << "Error: x must be positive, here x=" << x; // Reflection formula if (nu < 0.0) return LogBesselK(-nu, x); // Special cases if (nu == 0.5) return 0.5 * std::log(M_PI / (2.0 * x)) - x; if (nu == 1.5) { const Scalar num = 1.0 + 1.0 / x; return 0.5 * std::log(M_PI * num * num / (2.0 * x)) - x; } if (nu == 2.5) { const Scalar num = 1.0 + (3.0 / x) * (1.0 + 1.0 / x); return 0.5 * std::log(M_PI * num * num / (2.0 * x)) - x; } #ifdef OPENTURNS_HAVE_BOOST return std::log(boost::math::cyl_bessel_k(nu, x)); #else Scalar logFactor = 0.0; Function integrand; UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(16); Scalar upper = -1.0; if (nu == 0.0) { integrand = Function("t", String(OSS() << "exp(-" << x << "*cosh(t))")); upper = std::log(-2.0 * std::log(ScalarEpsilon) / x); } else { logFactor = nu * std::log(0.5 * x) - LogGamma(0.5 + nu) + 0.5 * std::log(M_PI); integrand = Function("t", String(OSS() << "exp(-" << x << "*cosh(t))*(sinh(t))^" << 2.0 * nu)); upper = std::log(ScalarEpsilon) / (2.0 * nu) - LambertW(-0.25 * x * std::exp(0.5 * std::log(ScalarEpsilon) / nu) / nu, false); } Scalar epsilon = -1.0; const Scalar integral = GaussKronrod().integrate(integrand, Interval(ScalarEpsilon, upper), epsilon)[0]; PlatformInfo::SetNumericalPrecision(precision); if (!IsNormal(integral) || (integral == 0.0)) return -LogMaxScalar; return logFactor + std::log(integral); #endif } // Modified second kind Bessel function of order nu: BesselK(nu, x)=\frac{\pi}{2}\frac{I_{-\nu}(x)-I_[\nu}(x)}{\sin{\nu\pi}} Scalar SpecFunc::BesselK(const Scalar nu, const Scalar x) { #ifdef OPENTURNS_HAVE_BOOST return boost::math::cyl_bessel_k(nu, x); #else if (!(x > 0.0)) throw InvalidArgumentException(HERE) << "Error: x must be positive, here x=" << x; // Reflection formula if (nu < 0.0) return BesselK(-nu, x); // First the limit cases if ((std::abs(x) < 0.0056) && (nu == 0.0)) { const Scalar logX = log(x); const Scalar x2 = 0.25 * x * x; return M_LN2 - logX - EulerConstant + x2 * (M_LN2 - logX + 1.0 - EulerConstant + 0.25 * x2 * (M_LN2 - logX + 1.5 - EulerConstant)); } if (std::abs(x) < 1e-8) return 0.5 * exp(LogGamma(nu) - nu * std::log(0.5 * x)); if ((std::abs(x) > 1e4) && (x > nu)) return std::sqrt(M_PI / (2.0 * x)) * exp(-x); const Scalar logK = LogBesselK(nu, x); if (logK <= -LogMaxScalar) return 0.0; if (logK >= LogMaxScalar) return MaxScalar; return std::exp(logK); #endif } // Modified second kind Bessel derivative function of order nu: BesselKDerivative(nu, x)=dBesselK(nu, x) / dx Scalar SpecFunc::BesselKDerivative(const Scalar nu, const Scalar x) { #if defined(OPENTURNS_HAVE_BOOST) && (BOOST_VERSION >= 105600) return boost::math::cyl_bessel_k_prime(nu, x); #else if (x == 0.0) return -MaxScalar; return -0.5 * (BesselK(nu - 1, x) + BesselK(nu + 1.0, x)); #endif } // LnBeta function: LnBeta(a, b) = \log(Beta(a, b)) Scalar SpecFunc::LnBeta(const Scalar a, const Scalar b) { const Scalar first = std::min(a, b); if (!(first > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute the LogBeta function when a or b is nonpositive, a=" << a << ", b=" << b; const Scalar second = std::max(a, b); const Scalar sum = a + b; // Common case: a and b small if (second < 7.75) return lgamma(first) - lgamma(sum) + lgamma(second); const Scalar correctionSecond = GammaCorrection(second); const Scalar correctionSum = GammaCorrection(sum); // Case a and b large if (first >= 7.75) { // b not very large wrt a if (second < 103.25 * first) return correctionSecond - correctionSum + GammaCorrection(first) - 0.5 * log(second) + second * log(second / first) + (sum - 0.5) * log1p(-second / sum) + LOGSQRT2PI; else { const Scalar epsilon = 1.0 / second; Scalar value = log(epsilon); // Here we use an expansion of (log(Gamma(b)) - log(Gamma(a+b))) / a - log(b) pour a << b // The expansion is in double Padé form wrt a and b const Scalar c1 = -1.0 + first; const Scalar c2 = c1 * (2 * first - 1); const Scalar c3 = c1 * c1; const Scalar c4 = -6.0 + 3.0 * first; const Scalar c5 = first * first; value += epsilon * (-0.5 * c1 + epsilon * (c2 / 12.0 + epsilon * (-(c3 * first) / 12.0 + epsilon * (((-1.0 + 3.0 * first * c1) * c2) / 120.0 + epsilon * (-(c3 * (-1.0 + 2.0 * first * c1) * first) / 60.0 + epsilon * (((1.0 + first * (3.0 + c5 * c4)) * c2) / 252.0 + epsilon * (-(c3 * (2.0 + first * (4.0 + first * (-1.0 + first * c4))) * first) / 168.0 + ((-3.0 + (-9.0 + (-1.0 + (15.0 + (5.0 + (-15.0 + 5.0 * first) * first) * first) * first) * first) * first) * epsilon * c2) / 720.0))))))); value *= first; value += LogGamma(first); return value; } } // Case one of a,b large, the other small return LogGamma(first) + correctionSecond - correctionSum + first * (1.0 - log(sum)) + (second - 0.5) * log1p(-first / sum); } // LogBeta = LnBeta Scalar SpecFunc::LogBeta(const Scalar a, const Scalar b) { return LnBeta(a, b); } // Beta function: Beta(a, b) = \int_0^1 t^{a-1}(1-t)^{b-1} dt Scalar SpecFunc::Beta(const Scalar a, const Scalar b) { return exp(LnBeta(a, b)); } // Incomplete Beta function: BetaInc(a, b, x) = \int_0^x t^{a-1}(1-t)^{b-1} dt Scalar SpecFunc::IncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { return RegularizedIncompleteBeta(a, b, x, tail) * Beta(a, b); } // Incomplete Beta function inverse Scalar SpecFunc::IncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { return RegularizedIncompleteBetaInverse(a, b, x / Beta(a, b), tail); } // Regularized Incomplete Beta function: RegularizedIncompleteBeta(a, b, x) = 1/beta(a, b) * \int_0^x t^{a-1}(1-t)^{b-1} dt Scalar SpecFunc::RegularizedIncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { return BetaFunctions::RegularizedIncompleteBeta(a, b, x, tail); } // Regularized incomplete Beta Function inverse Scalar SpecFunc::RegularizedIncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail) { return BetaFunctions::RegularizedIncompleteBetaInverse(a, b, x, tail); } // Dawson function: Dawson(x) = \exp(-x^2) * \int_0^x \exp(t^2) dt Scalar SpecFunc::Dawson(const Scalar x) { return Faddeeva::Dawson(x); } Complex SpecFunc::Dawson(const Complex & z) { return Faddeeva::Dawson(z); } // Debye function of order n: DebyeN(x, n) = n / x^n \int_0^x t^n/(\exp(t)-1) dt Scalar SpecFunc::Debye(const Scalar x, const UnsignedInteger n) { if ((n == 0) || (n > 20)) throw InvalidArgumentException(HERE) << "Error: cannot compute Debye function of order outside of {1,...,20}"; if (x < 0.0) return Debye(-x, n) - n * x / (n + 1.0); // The threshold is such that the overall error is less than 1.0e-16 if (x < 1.0e-8) return 1.0 - n * x / (2.0 * (n + 1.0)); return debyen(x, static_cast(n)) * n / pow(x, static_cast(n)); } // DiLog function: DiLog(x) = -\int_0^x \log(1-t)/t dt Scalar SpecFunc::DiLog(const Scalar x) { // Special case for 0 if (x == 0.0) return 0.0; // No real value on (1, \infty) if (!(x <= 1.0)) throw InvalidArgumentException(HERE) << "Error: the DiLog function does not take real values for arguments greater than 1."; // Use DiLog(x) = -DiLog(1 / x) - \pi^2 / 6 - \log^2(-x) / 2 // to map (-\infty, -1) into (-1, 0) for the argument if (x < -1.0) return -DiLog(1.0 / x) - SpecFunc::PI2_6 - 0.5 * pow(log(-x), 2); // Use DiLog(x) = \pi^2 / 6 - DiLog(1 - x) - \log(x)\log(1-x) // to map (1/2, 1] into [0, 1/2) if (x > 0.5) return SpecFunc::PI2_6 - DiLog(1.0 - x) - log(x) * log1p(-x); // Use DiLog(x) = DiLog(x^2) / 2 - DiLog(-x) // to map [-1, 0) into (0, 1] if (x < 0.0) return 0.5 * DiLog(x * x) - DiLog(-x); // Use the definition of DiLog in terms of series // DiLog(x)=\sum_{k=1}^{\infty} x^k/k^2 // for (0, 1/2) // This upper bound is an easy-to compute tight upper bound of the number of iterations const UnsignedInteger nMax = static_cast(round(8 + 68 * x)); Scalar value = 0.0; Scalar powerX = 1.0; for (UnsignedInteger n = 1; n <= nMax; ++n) { powerX *= x; value += powerX / (n * n); } return value; } // Exponential integral function: Ei(x) = -\int_{-x}^{\infty}exp(-t)/t dt Scalar SpecFunc::Ei(const Scalar x) { return ExponentialIntegralFunctions::Ei(x); } // Complex exponential integral function: Ei(z) = -\int_{-z}^{\infty}exp(-t)/t dt Complex SpecFunc::Ei(const Complex & z) { return ExponentialIntegralFunctions::Ei(z); } // Complex Faddeeva function: faddeeva(z) = \exp(-z^2)\erfc(-I*z) Complex SpecFunc::Faddeeva(const Complex & z) { return Faddeeva::w(z); } Scalar SpecFunc::FaddeevaIm(const Scalar x) { return Faddeeva::w_im(x); } // Gamma function: Gamma(a) = \int_0^{\infty} t^{a-1}\exp(-t) dt Scalar SpecFunc::Gamma(const Scalar a) { return tgamma(a); } // igamma1pm1(a) = 1 / Gamma(1 + a) - 1 Scalar SpecFunc::IGamma1pm1(const Scalar a) { if (a < -0.5) return a + IGamma1pm1(a + 1.0); if (a > 0.5) return (IGamma1pm1(a - 1.0) - a) / (1.0 + a); return a * (0.55840397973848040460 + (-0.28693519326375203685 + (-0.28661639813928077048 + (0.56469202267873782108e-2 + (0.12419086997568707715e-1 + (-0.28455238049924868708e-2 + (-0.11632361891621759586e-3 + 0.43452535150473018757e-4 * a) * a) * a) * a) * a) * a) * a) / (0.967409607349687017271 + (0.602145048219053169110 + (0.258051013832915714221 + (0.677000815494264186575e-1 + (0.142113296913915958898e-1 + (0.183821175266489590252e-2 + 0.192078142776918599109e-3 * a) * a) * a) * a) * a) * a); } // GammaCorrection(a) = LogGamma(a) - log(sqrt(2.Pi)) + a - (a - 1/2) log(a) Scalar SpecFunc::GammaCorrection(const Scalar a) { if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute GammaCorrection for nonpositive a, here a=" << a; // Use an asymptotic series for large argument if (a > 7.7490453948312251620) { const Scalar ia2 = 1.0 / (a * a); return (0.83333333333333333333e-1 + (-0.27777777777777777778e-2 + (0.79365079365079365079e-3 + (-0.59523809523809523810e-3 + (0.84175084175084175084e-3 + (-0.19175269175269175269e-2 + (0.64102564102564102564e-2 + (-0.29550653594771241830e-1 + (0.17964437236883057316e0 - 0.13924322169059011164e1 * ia2) * ia2) * ia2) * ia2) * ia2) * ia2) * ia2) * ia2) * ia2) / a; } return LogGamma(a) + a - (a - 0.5) * log(a) - LOGSQRT2PI; } // Complex gamma function: Gamma(a) = \int_0^{\infty} t^{a-1}\exp(-t) dt, // Computed using Lanczos approximation, using a C++ translation of // Paul Godfrey's matlab implementation // http://home.att.net/~numericana/answer/info/godfrey.htm#matlabgamma Complex SpecFunc::Gamma(const Complex & a) { if (a.imag() == 0.0) return Gamma(a.real()); return exp(LogGamma(a)); } Complex SpecFunc::LogGamma(const Complex & a) { if (a.imag() == 0.0) return LogGamma(a.real()); const Scalar sqrt2Pi = sqrt(2.0 * M_PI); Complex z(a); Bool flip = false; if (z.real() < 0.0) { z = -z; flip = true; } const UnsignedInteger coefficientsSize = 11; static const Scalar coefficients[coefficientsSize] = { 1.000000000000000174663, 5716.400188274341379136, -14815.30426768413909044, 14291.49277657478554025, -6348.160217641458813289, 1301.608286058321874105, -108.1767053514369634679, 2.605696505611755827729, -0.7423452510201416151527e-2, 0.5384136432509564062961e-7, -0.4023533141268236372067e-8 }; const Scalar g = coefficientsSize - 2.0; Complex t(z + g); Complex s(0.0); Complex ss(t - 0.5); for (UnsignedInteger k = coefficientsSize - 1; k > 0; --k) { s += coefficients[k] / t; t -= 1.0; } s += coefficients[0]; s = log(s * sqrt2Pi) + (z - 0.5) * log(ss) - ss; Complex f(s); if (flip) f = f + Log1p(-M_PI * exp(-f) / (a * f * sin(M_PI * a))); return f; } // Natural logarithm of the Gamma function Scalar SpecFunc::LnGamma(const Scalar a) { return LogGamma(a); } // LogGamma = LnGamma Scalar SpecFunc::LogGamma(const Scalar a) { return lgamma(a); } Scalar SpecFunc::LogGamma1p(const Scalar a) { return (std::abs(a) < 0.5 ? -a * (0.34229051727072805652 + (0.75305954018877769214 + (0.25594427350421023219 + (-0.54867134418632830931 + (-0.57006260085649768851 + (-0.20361938002564003637 + (-0.27922966566918143201e-1 - 0.10180389882069314488e-2 * a) * a) * a) * a) * a) * a) * a) / (0.59300282040876235168 + (0.21496034951064079616e1 + (0.30947091018029240660e1 + (0.22448538584537209829e1 + (0.85741167089803858333 + (0.16321946228463159159 + (0.12893353820029086191e-1 + 0.24787923059095734273e-3 * a) * a) * a) * a) * a) * a) * a) : LogGamma(a - 1.0)); } // Incomplete Gamma function: IncompleteGamma(a, x) = \int_0^x t^{a-1}\exp(-t) dt Scalar SpecFunc::IncompleteGamma(const Scalar a, const Scalar x, const Bool tail) { return GammaFunctions::IncompleteGamma(a, x, tail); } // Incomplete Gamma function inverse with respect to x Scalar SpecFunc::IncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail) { return GammaFunctions::IncompleteGammaInverse(a, x, tail); } // Regularized incomplete Gamma function: RegularizedIncompleteGamma(a, x) = \int_0^x t^{a-1}\exp(-t) dt / \Gamma(a) Scalar SpecFunc::RegularizedIncompleteGamma(const Scalar a, const Scalar x, const Bool tail) { return GammaFunctions::RegularizedIncompleteGamma(a, x, tail); } // Regularized incomplete Gamma function inverse with respect to x Scalar SpecFunc::RegularizedIncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail) { return GammaFunctions::RegularizedIncompleteGammaInverse(a, x, tail); } // Digamma function: Psi(x) = ((dgamma/dx) / gamma)(x) // Derivative of a Lanczos approximation of log(Gamma) Scalar SpecFunc::DiGamma(const Scalar x) { // Check that the argument is not non positive, i.e. not in {0, -1, -2, ...} if ((x <= 0.0) && (x == round(x))) throw InvalidArgumentException(HERE) << "Error: the argument of the DiGamma function cannot be a non positive integer."; // Approximation for small arguments // Here, 0.025 is a bound that insure Scalar precision approximation if ( std::abs(x) <= 0.025 ) return -1.0 / x - 0.57721566490153286 + (1.6449340668482264 + (-1.2020569031595943 + (1.0823232337111381 + (-1.0369277551433699 + (1.0173430619844491 + (-1.0083492773819228 + (1.0040773561979442 + (-1.0020083928260822 + 1.0009945751278180 * x) * x) * x) * x) * x) * x) * x) * x) * x; // If the argument is negative, use the reflexion formula if (x < 0.0) return -M_PI / tan(M_PI * x) + DiGamma(1.0 - x); // Shift the argument until it reaches the asymptotic expansion region // Here, 7.69 is a bound that insure Scalar precision of the approximation Scalar z = x; Scalar value = 0.0; while ( z < 7.33 ) { value -= 1.0 / z; z += 1.0; } // Use the asymptotic expansion in Horner form const Scalar y = 1.0 / (z * z); return value + log(z) - 0.5 / z + (-0.83333333333333333e-1 + (0.83333333333333333e-2 + (-0.39682539682539683e-2 + (0.41666666666666667e-2 + (-0.75757575757575758e-2 + (0.21092796092796093e-1 + (-0.83333333333333333e-1 + (.44325980392156863 - 3.0539543302701197 * y) * y) * y) * y) * y) * y) * y) * y) * y; } Scalar SpecFunc::Psi(const Scalar x) { return DiGamma(x); } // Inverse of the DiGamma function Scalar SpecFunc::DiGammaInv(const Scalar a) { // Initialization using an asymptotic approximation of the DiGamma function Scalar x = a < -2.22 ? -1.0 / (a - EulerConstant) : exp(a) + 0.5; // Use a Newton scheme Scalar d = 0.0; for (UnsignedInteger k = 0; k < 6; ++k) { d = (DiGamma(x) - a) / TriGamma(x); if (d == 0.0) break; x -= d; } return x; } // Trigamma function: TriGamma(x) = ((d^2gamma/dx^2) / gamma)(x) Scalar SpecFunc::TriGamma(const Scalar x) { // Check that the argument is not non positive, i.e. not in {0, -1, -2, ...} if ((x <= 0.0) && (x == round(x))) throw InvalidArgumentException(HERE) << "Error: the argument of the TriGamma function cannot be a non positive integer."; // Approximation for small arguments // Here, 0.02 is a bound that insure Scalar precision approximation if ( std::abs(x) <= 0.02 ) return 1.0 / (x * x) + 1.6449340668482264 + (-2.4041138063191886 + (3.2469697011334144 + (-4.1477110205734796 + (5.0867153099222453 + (-6.0500956642915368 + (7.0285414933856097 + (-8.0160671426086576 + (9.0089511761503616 - 10.004941886041195 * x) * x) * x) * x) * x) * x) * x) * x) * x; // If the argument is negative, use the reflexion formula if (x < 0.0) return pow(M_PI / sin(M_PI * x), 2.0) - TriGamma(1.0 - x); // Shift the argument until it reaches the asymptotic expansion region // Here, 7.69 is a bound that insure Scalar precision of the approximation Scalar z = x; Scalar value = 0.0; while ( z < 7.69 ) { value += 1.0 / (z * z); z += 1.0; } // Use the asymptotic expansion in Horner form const Scalar y = 1.0 / (z * z); return value + 0.5 * y + (1. + (.16666666666666667 + (-0.33333333333333333e-1 + (0.23809523809523810e-1 + (-0.33333333333333333e-1 + (0.75757575757575758e-1 + (-.25311355311355311 + (1.1666666666666667 + (-7.0921568627450980 + 54.971177944862155 * y) * y) * y) * y) * y) * y) * y) * y) * y) / z; } // Hypergeometric function of type (1,1): HyperGeom_1_1(p1, q1, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) / (q1 + k)] * x^n / n! Scalar SpecFunc::HyperGeom_1_1(const Scalar p1, const Scalar q1, const Scalar x) { if (q1 == p1) return exp(x); if (x == 0) return 1.0; Scalar term = 1.0; Scalar t = x; Scalar pochhammerP1 = p1; if (x < 0) { pochhammerP1 = q1 - p1; t = -x; term = exp(x); } Scalar pochhammerQ1 = q1; Scalar factorial = 1.0; Scalar sum = term; Scalar eps = -1.0; UnsignedInteger k = 0; do { term *= pochhammerP1 * t / (pochhammerQ1 * factorial); ++pochhammerP1; ++pochhammerQ1; ++factorial; sum += term; eps = std::abs(term / sum); ++k; } while ((eps > 0.0) && (k < SpecFunc::MaximumIteration)); return sum; } // Complex hypergeometric function of type (1,1): HyperGeom_1_1(p1, q1, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) / (q1 + k)] * x^n / n! Complex SpecFunc::HyperGeom_1_1(const Scalar p1, const Scalar q1, const Complex & x) { Complex pochhammerP1(p1); Complex pochhammerQ1(q1); Scalar factorial = 1.0; Complex term(1.0); Complex sum(term); Complex eps(0.0); UnsignedInteger k = 0; do { term *= pochhammerP1 * x / (pochhammerQ1 * factorial); pochhammerP1 += 1.0; pochhammerQ1 += 1.0; ++factorial; sum += term; eps = term / sum; ++k; } // std::abs() for complex argument while ((std::abs(eps) > 0.0) && (k < SpecFunc::MaximumIteration)); return sum; } // Hypergeometric function of type (2,1): HyperGeom_2_1(p1, p2, q1, x) = sum_{n=0}^{\infty} [prod_{k=0}^{n-1} (p1 + k) . (p2 + k) / (q1 + k)] * x^n / n! Scalar SpecFunc::HyperGeom_2_1(const Scalar p1, const Scalar p2, const Scalar q1, const Scalar x) { Scalar pochhammerP1 = p1; Scalar pochhammerP2 = p2; Scalar pochhammerQ1 = q1; Scalar factorial = 1.0; Scalar term = 1.0; Scalar sum = term; Scalar eps = 0.0; UnsignedInteger k = 0; do { term *= pochhammerP1 * pochhammerP2 * x / (pochhammerQ1 * factorial); ++pochhammerP1; ++pochhammerP2; ++pochhammerQ1; ++factorial; sum += term; eps = std::abs(term / sum); ++k; } while ((eps > 0.0) && (k < SpecFunc::MaximumIteration)); return sum; } // Hypergeometric function of type (2,2): HyperGeom_2_1(p1, p2, q1, q2, x) = sum_{n=0}^{\infty} [prod_{k=0}^{n-1} (p1 + k) . (p2 + k) / (q1 + k) / (q2 + k)] * x^n / n! Scalar SpecFunc::HyperGeom_2_2(const Scalar p1, const Scalar p2, const Scalar q1, const Scalar q2, const Scalar x) { if (x == 0.0) return 1.0; Scalar pochhammerP1 = p1; Scalar pochhammerP2 = p2; Scalar pochhammerQ1 = q1; Scalar pochhammerQ2 = q2; Scalar factorial = 1.0; Scalar term = 0.0; Scalar sum = term; Scalar eps = 0.0; const Scalar logX = log(std::abs(x)); Scalar signX = x > 0.0 ? 1.0 : -1.0; Scalar signTerm = 1.0; UnsignedInteger k = 0; do { term += log(pochhammerP1) + log(pochhammerP2) + logX - log(pochhammerQ1) - log(pochhammerQ2) - log(factorial); ++pochhammerP1; ++pochhammerP2; ++pochhammerQ1; ++pochhammerQ2; ++factorial; sum += signTerm * exp(term); signTerm *= signX; eps = std::abs(term / sum); ++k; } while ((eps > 0.0) && (k < SpecFunc::MaximumIteration)); return sum; } // Erf function Erf(x) = 2 / sqrt(Pi) . \int_0^x \exp(-t^2) dt Scalar SpecFunc::Erf(const Scalar x) { return Faddeeva::erf(x); } Complex SpecFunc::Erf(const Complex & z) { return Faddeeva::erf(z); } // Erf function ErfI(x) = -i.erf(ix) Scalar SpecFunc::ErfI(const Scalar x) { return Faddeeva::erfi(x); } Complex SpecFunc::ErfI(const Complex & z) { return Faddeeva::erfi(z); } // Erf function ErfC(x) = 1 - Erf(x) Scalar SpecFunc::ErfC(const Scalar x) { return Faddeeva::erfc(x); } Complex SpecFunc::ErfC(const Complex & z) { return Faddeeva::erfc(z); } // Erf function ErfCX(x) = exp(x^2).erfC(x) Scalar SpecFunc::ErfCX(const Scalar x) { return Faddeeva::erfcx(x); } Complex SpecFunc::ErfCX(const Complex & z) { return Faddeeva::erfcx(z); } // Inverse of the Erf function // We use a rational approximation followed by one Halley's iteration (higher order Newton iteration) Scalar SpecFunc::ErfInverse(const Scalar x) { Scalar p = 0.5 * (x + 1.0); static const Scalar a[6] = { -3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02, 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00 }; static const Scalar b[5] = { -5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02, 6.680131188771972e+01, -1.328068155288572e+01 }; static const Scalar c[6] = { -7.784894002430293e-03, -3.223964580411365e-01, -2.400758277161838e+00, -2.549732539343734e+00, 4.374664141464968e+00, 2.938163982698783e+00 }; static const Scalar d[4] = { 7.784695709041462e-03, 3.224671290700398e-01, 2.445134137142996e+00, 3.754408661907416e+00 }; Scalar q = -1.0; Scalar t = -1.0; Scalar u = -1.0; q = std::min(p, 1.0 - p); if (q > 0.02425) { /* Rational approximation for central region. */ u = q - 0.5; t = u * u; u = u * (((((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) / (((((b[0] * t + b[1]) * t + b[2]) * t + b[3]) * t + b[4]) * t + 1.0); } else { /* Rational approximation for tail region. */ t = sqrt(-2.0 * log(q)); u = (((((c[0] * t + c[1]) * t + c[2]) * t + c[3]) * t + c[4]) * t + c[5]) / ((((d[0] * t + d[1]) * t + d[2]) * t + d[3]) * t + 1.0); } /* The relative error of the approximation has absolute value less than 1.15e-9. One iteration of Halley's rational method (third order) gives full machine precision... */ t = 0.5 + 0.5 * Erf(u * M_SQRT1_2) - q; /* f(u) = error */ // 2.50662827463100050241576528481 = sqrt(2.pi) t = t * 2.50662827463100050241576528481 * exp(0.5 * u * u); /* f(u)/df(u) */ u = u - t / (1.0 + 0.5 * u * t); /* Halley's method */ return (p > 0.5 ? -M_SQRT1_2 * u : M_SQRT1_2 * u); } /* Evaluation of the principal branch of Lambert W function. Based on formulas exposed in: Robert M. Corless, G. H. Gonnet, D. E. G. Hare, D. J. Jeffrey, and D. E. Knuth, "On the Lambert W Function", Advances in Computational Mathematics, volume 5, 1996, pp. 329--359 */ Scalar SpecFunc::LambertW(const Scalar x, const Bool principal) { Scalar w = -1.0; // -0.36787944117144232159552377016146086 = -1 / exp(1) if (x <= -0.3678794411714423215955238) return w; // Principal branch, defined over [-1/e,+inf], LambertW >= -1 if (principal) { if (x == 0) return 0.0; if(x < 6.46) w = x * (3.0 + 4.0 * x) / (3.0 + x * (7.0 + 2.5 * x)); // Large argument, use asymptotic expansion, formula 4.18 else { const Scalar t1 = log(x); w = t1 - log(t1); } } // Second real branch, defined over [-1/e, 0[, LambertW <= -1 else { if (x >= 0.0) return - std::numeric_limits::infinity(); if (x < -0.1) w = -2.0; else { const Scalar t1 = log(-x); w = t1 - log(-t1); } } // Halley's iteration for (UnsignedInteger i = 0; i < 3; ++i) { const Scalar expW = exp(w); const Scalar numerator = w * expW - x; const Scalar dw = numerator / (expW * (w + 1.0) - 0.5 * (w + 2.0) * numerator / (w + 1.0)); w -= dw; } return w; } // Accurate evaluation of log(1+z) for |z|<<1 Complex SpecFunc::Log1p(const Complex & z) { if (std::norm(z) < 1e-5) return z * (1.0 + z * (-0.5 + z / 3.0)); return log(1.0 + z); } // Accurate evaluation of exp(z)-1 for |z|<<1 Complex SpecFunc::Expm1(const Complex & z) { if (std::norm(z) < 1e-5) return z * (1.0 + 0.5 * z * (1.0 + z / 3.0)); return exp(z) - 1.0; } // Accurate evaluation of log(1-exp(-x)) for all x > 0 Complex SpecFunc::Log1MExp(const Scalar x) { if (!(x > 0.0)) throw InvalidArgumentException(HERE) << "Error: x must be positive"; if (x <= M_LN2) return log(-expm1(-x)); return log1p(-exp(-x)); } // Integer log2 UnsignedInteger SpecFunc::Log2(const Unsigned64BitsInteger n) { if (n == 0) throw InvalidArgumentException(HERE) << "Error: n must be positive"; // De Bruijn sequence const UnsignedInteger tab64[64] = { 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3, 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4, 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21, 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5 }; // http://www.pearsonhighered.com/samplechapter/0201914654.pdf Unsigned64BitsInteger value = n; value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; value |= value >> 32; return tab64[((Unsigned64BitsInteger)((value - (value >> 1)) * 0x07EDD5E59A4E28C2)) >> 58]; } // Compute the smallest power of two greater or equal to the given n UnsignedInteger SpecFunc::NextPowerOfTwo(const UnsignedInteger n) { UnsignedInteger powerOfTwo = 1; while (powerOfTwo < n) powerOfTwo <<= 1; return powerOfTwo; } // Compute the number of bits sets to 1 in n // Best known algorithm for 64 bits n and fast multiply UnsignedInteger SpecFunc::BitCount(const Unsigned64BitsInteger n) { // types and constants used in the functions below const Unsigned64BitsInteger m1 = 0x5555555555555555; //binary: 0101... const Unsigned64BitsInteger m2 = 0x3333333333333333; //binary: 00110011.. const Unsigned64BitsInteger m4 = 0x0f0f0f0f0f0f0f0f; //binary: 4 zeros, 4 ones ... const Unsigned64BitsInteger h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3... // This uses fewer arithmetic operations than any other known // implementation on machines with fast multiplication. // It uses 12 arithmetic operations, one of which is a multiply. Unsigned64BitsInteger x = n; x -= (x >> 1) & m1; // put count of each 2 bits into those 2 bits x = (x & m2) + ((x >> 2) & m2); // put count of each 4 bits into those 4 bits x = (x + (x >> 4)) & m4; // put count of each 8 bits into those 8 bits return (x * h01) >> 56; // returns left 8 bits of x + (x << 8) + (x << 16) + (x << 24) + ... } // Missing functions in cmath wrt math.h as of C++98 Scalar SpecFunc::Acosh(const Scalar x) { if (!(x >= 1.0)) throw InvalidArgumentException(HERE) << "Error: acosh is not defined for x<1, here x=" << x; return 2.0 * log(sqrt(0.5 * (x + 1.0)) + sqrt(0.5 * (x - 1.0))); } Scalar SpecFunc::Asinh(const Scalar x) { if (std::abs(x) < 0.0081972522783123062436) return x * (1.0 + x * x * (-1.0 / 6.0 + 3.0 * x * x / 40.0)); return log(x + sqrt(1.0 + x * x)); } Scalar SpecFunc::Atanh(const Scalar x) { if (std::abs(x) < 0.0069422277258991260322) return x * (1.0 + x * x * (1.0 / 3.0 + x * x / 5.0)); if (x > 0.0) return 0.5 * log1p(2.0 * x / (1.0 - x)); return -0.5 * log1p(-2.0 * x / (1.0 + x)); } Scalar SpecFunc::Cbrt(const Scalar x) { if (x == 0.0) return 0.0; return (x < 0.0 ? -exp(log(-x) / 3.0) : exp(log(x) / 3.0)); } UnsignedInteger SpecFunc::BinomialCoefficient(const UnsignedInteger n, const UnsignedInteger k) { if (k > n) return 0; // by convention UnsignedInteger value = 1; for (UnsignedInteger i = 0; i < std::min(k, n - k); ++ i) { value *= n - i; value /= i + 1; } return value; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/incgam.cxx000066400000000000000000000466271307543307100222340ustar00rootroot00000000000000#include "openturns/SpecFunc.hxx" #include "openturns/incgam.hxx" BEGIN_NAMESPACE_OPENTURNS namespace GammaFunctions { #define explow -300 #define exphigh 300 void incgam(const Scalar a, const Scalar x, Scalar & p, Scalar & q, SignedInteger & ierr) { // ------------------------------------------------------------- // Calculation of the incomplete gamma functions ratios P(a,x) // and Q(a,x). // ------------------------------------------------------------- // Inputs: // a , argument of the functions // x , argument of the functions // Outputs: // p, function P(a,x) // q, function Q(a,x) // ierr , error flag // ierr = 0, computation succesful // ierr = 1, overflow/underflow problems. The function values // (P(a,x) and Q(a,x)) are set to zero. // ---------------------------------------------------------------------- // Authors: // Amparo Gil (U. Cantabria, Santander, Spain) // e-mail: amparo.gil@unican.es // Javier Segura (U. Cantabria, Santander, Spain) // e-mail: javier.segura@unican.es // Nico M. Temme (CWI, Amsterdam, The Netherlands) // e-mail: nico.temme@cwi.nl // ------------------------------------------------------------- // References: "Efficient and accurate algorithms for // the computation and inversion of the incomplete gamma function ratios", // A. Gil, J. Segura and N.M. Temme, submitted to SIAM J Sci Comput // ------------------------------------------------------------------- Scalar lnx = -1.0; ierr = 0; if (a > alpha(x)) { const Scalar dp = dompart(a, x, false); if (dp < 0.0) { ierr = 1; p = 0.0; q = 0.0; return; } if ((x < 0.3 * a) || (a < 12)) p = ptaylor(a, x, dp); else p = pqasymp(a, x, dp, true); q = 1.0 - p; return; } // a > alpha(x) if (x < SpecFunc::MinScalar) lnx = SpecFunc::LogMinScalar; else lnx = log(x); if (a < -SpecFunc::MinScalar / lnx) { q = 0.0; p = 1.0; return; } if (x < 1.0) { const Scalar dp = dompart(a, x, true); if (dp < 0.0) { ierr = 1; q = 0.0; p = 0.0; return; } q = qtaylor(a, x, dp); p = 1.0 - q; return; } // x < 1.0 const Scalar dp = dompart(a, x, false); if (dp < 0.0) { ierr = 1; p = 0.0; q = 0.0; return; } if ((x > 2.35 * a) || (a < 12)) q = qfraction(a, x, dp); else q = pqasymp(a, x, dp, false); p = 1.0 - q; } // incgam void invincgam(const Scalar a, const Scalar p, const Scalar q, Scalar & xr, SignedInteger & ierr) { // ------------------------------------------------------------- // invincgam computes xr in the equations P(a, xr) = p and Q(a, xr) = q // with a as a given positive parameter. // In most cases, we invert the equation with min(p, q) // ------------------------------------------------------------- // Inputs: // a , argument of the functions // p, function P(a, x) // q, function Q(a, x) // Outputs: // xr , soluction of the equations P(a, xr) = p and Q(a, xr) = q // with a as a given positive parameter. // ierr , error flag // ierr = 0, computation succesful // ierr = -1, overflow problem in the computation of one of the // gamma factors before starting the Newton iteration. // The initial approximation to the root is given // as output. // ierr = -2, the number of iterations in the Newton method // reached the upper limit N = 15. The last value // obtained for the root is given as output. // ------------------------------------------------------------------ ierr = 0; Bool pcase = true; Scalar porq = p; Scalar s = -1.0; if (p > 0.5) { pcase = false; porq = q; s = 1.0; } // p > 0.5 const Scalar logr = (1.0 / a) * (log(p) + SpecFunc::LogGamma(a + 1.0)); Scalar x = 0.0; Bool m0 = true; Scalar eta = 0.0; if (logr < log(0.2 * (1.0 + a))) { const Scalar r = exp(logr); const Scalar ap1 = a + 1.0; const Scalar ap12 = ap1 * ap1; const Scalar ap13 = ap1 * ap12; const Scalar ap14 = ap12 * ap12; const Scalar ap2 = a + 2.0; const Scalar ap22 = ap2 * ap2; const Scalar ck1 = 1.0 / ap1; const Scalar ck2 = 0.5 * (3.0 * a + 5.0) / (ap12 * ap2); const Scalar ck3 = (31.0 + a * (33.0 + 8.0 * a)) / (3.0 * (ap13 * ap2 * (a + 3.0))); const Scalar ck4 = (2888.0 + a * (5661.0 + a * (3971.0 + a * (1179.0 + 125.0 * a)))) / (24.0 * (ap14 * ap22 * (a + 3.0) * (a + 4.0))); x = r * (1.0 + r * (ck1 + r * (ck2 + r * (ck3 + r * ck4)))); } // logr < log(0.2 * (1 + a)) else if ((q < std::min(0.02, exp(-1.5 * a) / SpecFunc::Gamma(a))) && (a < 10.0)) { const Scalar b = 1.0 - a; eta = sqrt(-2.0 / a * log(q * gamstar(a) * SpecFunc::SQRT2PI / sqrt(a))); x = a * lambdaeta(eta); const Scalar L = log(x); const Scalar r = 1.0 / x; if ((a > 0.12) || (x > 5.0)) { const Scalar ck0 = L - 1.0; const Scalar ck1 = 1.0 + 1.5 * b + L * (-b - 1.0 + 0.5 * L); const Scalar ck2 = -2.0 + (-4.0 - 11.0 / 6.0 * b) * b + (2.0 + (4.0 + b) * b + (-1.5 * b - 1.0 + L / 3.0) * L) * L; const Scalar ck3 = 6.0 + (13.5 + (10.0 + 25.0 / 12.0 * b) * b) * b + (-6.0 + (-14.0 + (-9.5 - b) * b) * b + (3.0 + (7.0 + 3.0 * b) * b + (-1.0 - 11.0 / 6.0 * b + 0.25 * L) * L) * L) * L; x += -L + b * r * (ck0 + r * (ck1 + r * (ck2 + r * ck3))); } // (a > 0.12) || (x > 5.0) else x += -L + b * r * (L - 1.0); } else if (std::abs(porq - 0.5) < 1.0e-5) x = a - 1.0 / 3.0 + (8.0 / 405.0 + 184.0 / 25515.0 / a) / a; else if (std::abs(a - 1.0) < 1.0e-4) x = (pcase ? -log1p(-p) : -log(q)); else if (a < 1.0) x = (pcase ? exp((1.0 / a) * (log(porq) + SpecFunc::LogGamma(a + 1.0))) : exp((1.0 / a) * (log1p(-porq) + SpecFunc::LogGamma(a + 1.0)))); else { // a >= 1.0 m0 = false; const Scalar r = inverfc(2.0 * porq); eta = s * r / sqrt(a * 0.5); eta += (eps1(eta) + (eps2(eta) + eps3(eta) / a) / a) / a; x = a * lambdaeta(eta); } // a >= 1.0 Scalar t = 1.0; UnsignedInteger n = 1; // Implementation of the high order Newton-like method; while ((t > SpecFunc::ScalarEpsilon) && (n < 15)) { Scalar dx = 0.0; Scalar r = 0.0; if (m0) { const Scalar dlnr = (1.0 - a) * log(x) + x + SpecFunc::LogGamma(a); if (dlnr > SpecFunc::LogMaxScalar) { n = 20; ierr = -1; continue; } // dlnr > log(giant) r = exp(dlnr); } else r = x * gamstar(a) / (sqrt(a) * SpecFunc::ISQRT2PI * exp(-0.5 * a * eta * eta)); SignedInteger ierrf; Scalar px = -1.0; Scalar qx = -1.0; incgam(a, x, px, qx, ierrf); r = (pcase ? -r * (px - p) : r * (qx - q)); if (a <= 0.05) dx = r; else { // a > 0.05 const Scalar ck1 = (x - a + 1.0) / (2.0 * x); if (a <= 0.1) dx = r * (1.0 + r * ck1); else { // a > 0.1 const Scalar ck2 = (1.0 + (-3.0 + 2.0 * a) * a + (4.0 - 4.0 * a + 2.0 * x) * x) / (6.0 * x * x); dx = r * (1.0 + r * (ck1 + r * ck2)); } // a > 0.1 } // a > 0.05 x += dx; t = std::abs(dx / x); ++n; } // (t > 1.0e-15) && (n < 15) if (n == 15) ierr = -2; xr = x; } // invincgam Scalar exmin1(const Scalar x) { // computes (exp(x)-1)/x; if (std::abs(x) < 3.65e-8) return 1.0 + 0.5 * x; return expm1(x) / x; } // exmin1 Scalar lnec(const Scalar x) { // x > -1; lnec: = ln1: = ln(1+x)-x if (std::abs(x) < 1.3e-5) return x * x * (-0.5 + x * (1.0 / 3.0 - 0.25 * x)); return log1p(x) - x; } // lnec Scalar alpha(const Scalar x) { if (x > 0.25) return x + 0.25; if (x >= SpecFunc::MinScalar) return -0.6931 / log(x); return -0.6931 / SpecFunc::LogMinScalar; } // alpha Scalar dompart(const Scalar a, const Scalar x, const Bool qt) { // dompart is approx. of x^a * exp(-x) / gamma(a+1) ; Scalar r = -1.0; const Scalar lnx = log(x); if (a <= 1.0) r = -x + a * lnx; else { if (x == a) r = 0.0; else { const Scalar la = x / a; r = a * (1.0 - la + log(la)); } r += -0.5 * log(6.2832 * a); } const Scalar dp = r < explow ? 0.0 : exp(r); if (qt) return dp; if ((a < 3.0) || (x < 0.2)) return exp(a * lnx - x) / SpecFunc::Gamma(a + 1.0); const Scalar mu = (x - a) / a; const Scalar c = lnec(mu); if ((a * c) > SpecFunc::LogMaxScalar) return -100.0; return exp(a * c) / (sqrt(a) * SpecFunc::SQRT2PI * gamstar(a)); } // dompart Scalar chepolsum(const Scalar x, const Point & a) { //{a[0]/2+a[1]T1(x)+...a[n]Tn(x); series of Chebychev polynomials} const UnsignedInteger n = a.getDimension() - 1; if (n == 0) return 0.5 * a[0]; if (n == 1) return 0.5 * a[0] + x * a[1]; const Scalar tx = x + x; Scalar r = a[n]; Scalar h = a[n - 1] + r * tx; for (UnsignedInteger k = n - 2; k >= 1; --k) { const Scalar s = r; r = h; h = a[k] + r * tx - s; } return 0.5 * a[0] - r + h * x; } // chepolsum Scalar auxgam(const Scalar x) { // function g in 1/gamma(x+1) = 1+x*(x-1)*g(x), -1 <= x <= 1 if (x < 0.0) return -(1.0 + (1.0 + x) * (1.0 + x) * auxgam(1.0 + x)) / (1.0 - x); Point dr(18); dr[0] = -1.013609258009865776949; dr[1] = 0.784903531024782283535e-1; dr[2] = 0.67588668743258315530e-2; dr[3] = -0.12790434869623468120e-2; dr[4] = 0.462939838642739585e-4; dr[5] = 0.43381681744740352e-5; dr[6] = -0.5326872422618006e-6; dr[7] = 0.172233457410539e-7; dr[8] = 0.8300542107118e-9; dr[9] = -0.10553994239968e-9; dr[10] = 0.39415842851e-11; dr[11] = 0.362068537e-13; dr[12] = -0.107440229e-13; dr[13] = 0.5000413e-15; dr[14] = -0.62452e-17; dr[15] = -0.5185e-18; dr[16] = 0.347e-19; dr[17] = -0.9e-21; return chepolsum(2.0 * x - 1.0, dr); } // auxgam Scalar gamstar(const Scalar x) { // gamstar(x) = exp(SpecFunc::GammaCorrection(x)), x > 0; or // gamma(x)/(exp(-x+(x-0.5)*ln(x))/sqrt(2pi) if (x >= 3.0) return exp(SpecFunc::GammaCorrection(x)); if (x > 0.0) return SpecFunc::Gamma(x) / (exp(-x + (x - 0.5) * log(x)) * SpecFunc::SQRT2PI); return SpecFunc::MaxScalar; } // gamstar Scalar fractio(const Scalar x, const Point & r, const Point & s) { const UnsignedInteger n = r.getSize() - 1; Scalar a = r[n]; Scalar b = 1.0; for (SignedInteger k = n - 1; k >= 0; --k) { a = a * x + r[k]; b = b * x + s[k]; } return a / b; } // fractio Scalar pqasymp(const Scalar a, const Scalar x, const Scalar dp, const Bool p) { if (dp == 0.0) return (p ? 0.0 : 1.0); const SignedInteger s = p ? -1 : 1; const Scalar mu = x / a - 1.0; Scalar y = -lnec(mu); Scalar eta = y < 0.0 ? 0.0 : sqrt(2.0 * y); y *= a; Scalar v = sqrt(std::abs(y)); if (mu < 0.0) { eta = -eta; v = -v; } const Scalar u = 0.5 * SpecFunc::ErfC(s * v); v = s * exp(-y) * saeta(a, eta) / (SpecFunc::SQRT2PI * sqrt(a)); return u + v; } // FUNCTION pqasymp; Scalar saeta(const Scalar a, const Scalar eta) { Point fm(27); fm[0] = 1.0; fm[1] = -1.0 / 3.0; fm[2] = 1.0 / 12.0; fm[3] = -2.0 / 135.0; fm[4] = 1.0 / 864.0; fm[5] = 1.0 / 2835.0; fm[6] = -139.0 / 777600.0; fm[7] = 1.0 / 25515.0; fm[8] = -571.0 / 261273600.0; fm[9] = -281.0 / 151559100.0; fm[10] = 8.29671134095308601e-7; fm[11] = -1.76659527368260793e-7; fm[12] = 6.70785354340149857e-9; fm[13] = 1.02618097842403080e-8; fm[14] = -4.38203601845335319e-9; fm[15] = 9.14769958223679023e-10; fm[16] = -2.55141939949462497e-11; fm[17] = -5.83077213255042507e-11; fm[18] = 2.43619480206674162e-11; fm[19] = -5.02766928011417559e-12; fm[20] = 1.10043920319561347e-13; fm[21] = 3.37176326240098538e-13; fm[22] = -1.39238872241816207e-13; fm[23] = 2.85348938070474432e-14; fm[24] = -5.13911183424257258e-16; fm[25] = -1.97522882943494428e-15; fm[26] = 8.09952115670456133e-16; Point bm(27); bm[25] = fm[26]; bm[24] = fm[25]; for (UnsignedInteger m = 24; m > 0; --m) bm[m - 1] = fm[m] + (m + 1) * bm[m + 1] / a; Scalar s = bm[0]; Scalar t = s; Scalar y = eta; for (UnsignedInteger m = 1; m < 25; ++m) { if (std::abs(t / s) <= SpecFunc::ScalarEpsilon) break; t = bm[m] * y; s += t; y *= eta; } return s / (1.0 + bm[1] / a); } // saeta Scalar qfraction(const Scalar a, const Scalar x, const Scalar dp) { if (dp == 0.0) return 0.0; Scalar p = 0.0; Scalar q = (x - 1.0 - a) * (x + 1.0 - a); Scalar r = 4.0 * (x + 1.0 - a); Scalar s = 1.0 - a; Scalar ro = 0.0; Scalar t = 1.0; Scalar g = 1.0; while (std::abs(t / g) >= SpecFunc::ScalarEpsilon) { p += s; q += r; r += 8.0; s += 2.0; const Scalar tau = p * (1.0 + ro); ro = tau / (q - tau); t *= ro; g += t; } return (a / (x + 1.0 - a)) * g * dp; } // qfraction Scalar qtaylor(const Scalar a, const Scalar x, const Scalar dp) { if (dp == 0.0) return 0.0; const Scalar lnx = log(x); Scalar r = a * lnx; Scalar q(r * exmin1(r)); // {q = x^a - 1} Scalar s(a * (1.0 - a) * auxgam(a)); // {s = 1 - 1 / Gamma(1 + a)} q *= 1.0 - s; Scalar u(s - q); // {u = 1 - x^a/Gamma(1+a)} Scalar p = a * x; Scalar t = 1.0; Scalar v = 1.0; q = a + 1.0; r = a + 3.0; while (std::abs(t / v) > SpecFunc::ScalarEpsilon) { p += x; q += r; r += 2.0; t *= -p / q; v += t; } v *= a * (1.0 - s) * exp((a + 1.0) * lnx) / (a + 1.0); return u + v; } // qtaylor Scalar ptaylor(const Scalar a, const Scalar x, const Scalar dp) { if (dp == 0.0) return 0.0; Scalar p = 1.0; Scalar c = 1.0; Scalar r = a; while (c > p * SpecFunc::ScalarEpsilon) { r += 1.0; c *= x / r; p += c; } return p * dp; } // ptaylor Scalar eps1(const Scalar eta) { if (std::abs(eta) < 1.0) { Point ak(5); ak[0] = -3.333333333438e-1; ak[1] = -2.070740359969e-1; ak[2] = -5.041806657154e-2; ak[3] = -4.923635739372e-3; ak[4] = -4.293658292782e-5; Point bk(5); bk[0] = 1.000000000000e+0; bk[1] = 7.045554412463e-1; bk[2] = 2.118190062224e-1; bk[3] = 3.048648397436e-2; bk[4] = 1.605037988091e-3; return ratfun(eta, ak, bk); } return log(eta / (lambdaeta(eta) - 1.0)) / eta; } // eps1 Scalar eps2(const Scalar eta) { if (eta < -5.0) { const Scalar x = eta * eta; const Scalar lnmeta = log(-eta); return (12.0 - x - 6.0 * (lnmeta * lnmeta)) / (12.0 * x * eta); } if (eta < -2.0) { Point ak(5); ak[0] = -1.72847633523e-2; ak[1] = -1.59372646475e-2; ak[2] = -4.64910887221e-3; ak[3] = -6.06834887760e-4; ak[4] = -6.14830384279e-6; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 7.64050615669e-1; bk[2] = 2.97143406325e-1; bk[3] = 5.79490176079e-2; bk[4] = 5.74558524851e-3; return ratfun(eta, ak, bk); } if (eta < 2.0) { Point ak(5); ak[0] = -1.72839517431e-2; ak[1] = -1.46362417966e-2; ak[2] = -3.57406772616e-3; ak[3] = -3.91032032692e-4; ak[4] = 2.49634036069e-6; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 6.90560400696e-1; bk[2] = 2.49962384741e-1; bk[3] = 4.43843438769e-2; bk[4] = 4.24073217211e-3; return ratfun(eta, ak, bk); } if (eta < 1000.0) { Point ak(5); ak[0] = 9.99944669480e-1; ak[1] = 1.04649839762e+2; ak[2] = 8.57204033806e+2; ak[3] = 7.31901559577e+2; ak[4] = 4.55174411671e+1; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 1.04526456943e+2; bk[2] = 8.23313447808e+2; bk[3] = 3.11993802124e+3; bk[4] = 3.97003311219e+3; return ratfun(1.0 / eta, ak, bk) / (-12.0 * eta); } return -1.0 / (12.0 * eta); } // eps2 Scalar eps3(const Scalar eta) { if (eta < -8.0) { const Scalar x = eta * eta; const Scalar y = log(-eta) / eta; return (-30.0 + eta * y * (6.0 * x * y * y - 12.0 + x)) / (12.0 * eta * x * x); } if (eta < -4.0) { Point ak(5); ak[0] = 4.95346498136e-2; ak[1] = 2.99521337141e-2; ak[2] = 6.88296911516e-3; ak[3] = 5.12634846317e-4; ak[4] = -2.01411722031e-5; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 7.59803615283e-1; bk[2] = 2.61547111595e-1; bk[3] = 4.64854522477e-2; bk[4] = 4.03751193496e-3; return ratfun(eta, ak, bk) / (eta * eta); } if (eta < -2.0) { Point ak(5); ak[0] = 4.52313583942e-3; ak[1] = 1.20744920113e-3; ak[2] = -7.89724156582e-5; ak[3] = -5.04476066942e-5; ak[4] = -5.35770949796e-6; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 9.12203410349e-1; bk[2] = 4.05368773071e-1; bk[3] = 9.01638932349e-2; bk[4] = 9.48935714996e-3; return ratfun(eta, ak, bk); } if (eta < 2.0) { Point ak(5); ak[0] = 4.39937562904e-3; ak[1] = 4.87225670639e-4; ak[2] = -1.28470657374e-4; ak[3] = 5.29110969589e-6; ak[4] = 1.57166771750e-7; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 7.94435257415e-1; bk[2] = 3.33094721709e-1; bk[3] = 7.03527806143e-2; bk[4] = 8.06110846078e-3; return ratfun(eta, ak, bk); } if (eta < 10.0) { Point ak(5); ak[0] = -1.14811912320e-3; ak[1] = -1.12850923276e-1; ak[2] = 1.51623048511e+0; ak[3] = -2.18472031183e-1; ak[4] = 7.30002451555e-2; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 1.42482206905e+1; bk[2] = 6.97360396285e+1; bk[3] = 2.18938950816e+2; bk[4] = 2.77067027185e+2; return ratfun(1.0 / eta, ak, bk) / (eta * eta); } if (eta < 100.0) { Point ak(5); ak[0] = -1.45727889667e-4; ak[1] = -2.90806748131e-1; ak[2] = -1.33085045450e+1; ak[3] = 1.99722374056e+2; ak[4] = -1.14311378756e+1; Point bk(5); bk[0] = 1.00000000000e+0; bk[1] = 1.39612587808e+2; bk[2] = 2.18901116348e+3; bk[3] = 7.11524019009e+3; bk[4] = 4.55746081453e+4; return ratfun(1.0 / eta, ak, bk) / (eta * eta); } return -log(eta) / (12.0 * eta * eta * eta); } // eps3 Scalar lambdaeta(const Scalar eta) { // lambdaeta is the positive number satisfying; // eta^2/2 = lambda-1-ln(lambda); // with sign(lambda-1) = sign(eta); if (eta == 0.0) return 1.0; const Scalar z = 1.0 + 0.5 * eta * eta; return exp(-z - SpecFunc::LambertW(-exp(-z), eta < 0.0)); } // lambdaeta Scalar invq(const Scalar x) { // Abramowitx & Stegun 26.2.23; Scalar t = sqrt(-2 * log(x)); return t - (2.515517 + t * (0.802853 + t * 0.010328)) / (1.0 + t * (1.432788 + t * (0.189269 + t * 0.001308))); } // invq Scalar inverfc(const Scalar x) { if (x > 1.0) return -inverfc(2.0 - x); const Scalar y0 = 0.70710678 * invq(0.5 * x); const Scalar f = SpecFunc::ErfC(y0) - x; const Scalar y02 = y0 * y0; const Scalar fp = -M_2_SQRTPI * exp(-y02); const Scalar c1 = -1.0 / fp; const Scalar c2 = y0; const Scalar c3 = (4.0 * y02 + 1.0) / 3.0; const Scalar c4 = y0 * (12.0 * y02 + 7.0) / 6.0; const Scalar c5 = (8.0 * y02 + 7.0) * (12.0 * y02 + 1.0) / 30.0; const Scalar r = f * c1; const Scalar h = r * (1.0 + r * (c2 + r * (c3 + r * (c4 + r * c5)))); return y0 + h; } // inverfc Scalar ratfun(const Scalar x, const Point & ak, const Point & bk) { return (ak[0] + x * (ak[1] + x * (ak[2] + x * (ak[3] + x * ak[4])))) / (bk[0] + x * (bk[1] + x * (bk[2] + x * (bk[3] + x * bk[4])))); } // ratfun } // GammaFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/000077500000000000000000000000001307543307100222705ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/BetaFunctions.hxx000066400000000000000000000065241307543307100255740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the incomplete * regularized beta function and related functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BETAFUNCTIONS_HXX #define OPENTURNS_BETAFUNCTIONS_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS namespace BetaFunctions { Scalar IncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); Scalar IncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); Scalar IncompleteBetaP(const Scalar a, const Scalar b, const Scalar x); Scalar IncompleteBetaQ(const Scalar a, const Scalar b, const Scalar x); Scalar RegularizedIncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); Scalar RegularizedIncompleteBetaSlatec(const Scalar a, const Scalar b, const Scalar x, const Bool tail); Scalar RegularizedIncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); Scalar RegularizedIncompleteBetaP(const Scalar a, const Scalar b, const Scalar x); Scalar RegularizedIncompleteBetaQ(const Scalar a, const Scalar b, const Scalar x); Scalar RegularizedIncompleteBetaContinuedFraction(const Scalar a, const Scalar b, const Scalar x); Scalar BRATIO(const Scalar a, const Scalar b, const Scalar x, const Bool tail); Scalar BPSER(const Scalar a, const Scalar b, const Scalar x); Scalar BUP(const Scalar a, const Scalar b, const Scalar x, const Scalar y, const UnsignedInteger n); Scalar ALGDIV(const Scalar a, const Scalar b); Scalar BGRAT(const Scalar a, const Scalar b, const Scalar x, const Scalar y, const Scalar w); } // BetaFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BETAFUNCTIONS_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/Debye.hxx000066400000000000000000000021071307543307100240510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file includes the interface to the routine that computes Debye function up to order 20. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DEBYE_HXX #define OPENTURNS_DEBYE_HXX /** Method that evaluates Debye function up to order 20. */ double debyen(const double x, const int n); #endif /* OPENTURNS_DEBYE_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/ExponentialIntegralFunctions.hxx000066400000000000000000000033421307543307100306700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the exponential integral function * for complex arguments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIALINTEGRALFUNCTIONS_HXX #define OPENTURNS_EXPONENTIALINTEGRALFUNCTIONS_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS namespace ExponentialIntegralFunctions { Complex Ei(const Complex & z); Scalar Ei(const Scalar z); Complex EiPowerSeries(const Complex & z); Scalar EiPowerSeries(const Scalar z); Complex EiAsymptoticSeries(const Complex & z); Scalar EiAsymptoticSeries(const Scalar z); Complex EiContinuedFractionBackward(const Complex & z); Scalar EiContinuedFractionBackward(const Scalar z); Complex EiContinuedFractionForward(const Complex & z); Scalar EiContinuedFractionForward(const Scalar z); Bool hasConverged(const Complex & current, const Complex & previous); } // ExponentialIntegralFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIALINTEGRALFUNCTIONS_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/GammaFunctions.hxx000066400000000000000000000033001307543307100257300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the incomplete * regularized gamma function and related functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAMMAFUNCTIONS_HXX #define OPENTURNS_GAMMAFUNCTIONS_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS namespace GammaFunctions { Scalar IncompleteGamma(const Scalar a, const Scalar x, const Bool tail = false); Scalar IncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail = false); Scalar RegularizedIncompleteGamma(const Scalar a, const Scalar x, const Bool tail = false); Scalar RegularizedIncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail = false); } // GammaFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAMMAFUNCTIONS_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/OTSpecFunc.hxx000066400000000000000000000020751307543307100247760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir SpecFunc * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSPECFUNC_HXX #define OPENTURNS_OTSPECFUNC_HXX #include "openturns/BetaFunctions.hxx" #include "openturns/GammaFunctions.hxx" #include "openturns/SpecFunc.hxx" #endif /* OPENTURNS_OTSPECFUNC_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/SpecFunc.hxx000066400000000000000000000302111307543307100245240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OpenTURNS wrapper to a library of special functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECFUNC_HXX #define OPENTURNS_SPECFUNC_HXX #include "openturns/OTprivate.hxx" /* Many mathematical functions lack on Windows when using Microsoft or Intel compilers. We use Boost to define them here, so that these definitions are not duplicated across many files. */ #ifdef _MSC_VER #include #include using boost::math::asinh; using boost::math::acosh; using boost::math::atanh; using boost::math::cbrt; using boost::math::erf; using boost::math::erfc; using boost::math::lgamma; using boost::math::tgamma; using boost::math::log1p; using boost::math::expm1; using boost::math::trunc; using boost::math::round; /* log2 is not defined */ static inline double log2(double x) { return log(x) / log(2.); } /* rint is not defined */ static inline double rint(double x) { return boost::numeric::RoundEven::nearbyint(x); } /* nearbyint is not defined */ static inline double nearbyint(double x) { return boost::numeric::RoundEven::nearbyint(x); } #endif /* _MSC_VER */ BEGIN_NAMESPACE_OPENTURNS class OT_API SpecFunc { public: // 0.39894228040143267 = 1 / sqrt(2.pi) static const Scalar ISQRT2PI; // 2.5066282746310005024 = sqrt(2.pi) static const Scalar SQRT2PI; // 0.91893853320467274177 = log(sqrt(2.pi)) static const Scalar LOGSQRT2PI; // 0.57721566490153286 = Euler constant gamma static const Scalar EulerConstant; // 1.64493406684822643 = pi^2 / 6 static const Scalar PI2_6; // 1.28254983016118640 = pi / sqrt(6) static const Scalar PI_SQRT6; // 0.45005320754569466 = gamma * sqrt(6) / pi static const Scalar EULERSQRT6_PI; // 3.28986813369645287 = pi^2 / 3 static const Scalar PI2_3; // 0.55132889542179204 = sqrt(3) / pi static const Scalar SQRT3_PI; // 1.81379936423421785 = pi / sqrt(3) static const Scalar PI_SQRT3; // 1.20205690315959429 = Zeta(3) static const Scalar ZETA3; // Maximum number of iterations for algorithms static const UnsignedInteger MaximumIteration; // Maximum precision for algorithms static const Scalar Precision; // Minimum positive real number static const Scalar MinScalar; static const Scalar LogMinScalar; // Maximum positive real number static const Scalar MaxScalar; static const Scalar LogMaxScalar; // Real number accuracy static const Scalar ScalarEpsilon; // @deprecated static const Scalar MinNumericalScalar; static const Scalar LogMinNumericalScalar; static const Scalar MaxNumericalScalar; static const Scalar LogMaxNumericalScalar; static const Scalar NumericalScalarEpsilon; // Some facilities for NaN and inf static Bool IsNaN(const Scalar value); static Bool IsInf(const Scalar value); static Bool IsNormal(const Scalar value); // Modified first kind Bessel function of order 0: BesselI0(x) = \sum_{m=0}\infty\frac{1}{m!^2}\left(\frac{x}{2}\right)^{2m} private: static Scalar SmallCaseBesselI0(const Scalar x); static Scalar LargeCaseLogBesselI0(const Scalar x); public: static Scalar BesselI0(const Scalar x); static Scalar LogBesselI0(const Scalar x); // Modified first kind Bessel function of order 1: BesselI1(x) = \sum_{m=0}\infty\frac{1}{m!(m+1)!}\left(\frac{x}{2}\right)^{2m+1} private: static Scalar SmallCaseBesselI1(const Scalar x); static Scalar LargeCaseLogBesselI1(const Scalar x); public: static Scalar BesselI1(const Scalar x); static Scalar LogBesselI1(const Scalar x); // Difference between the logarithms of BesselI1 and BesselI0: // DeltaLogBesselI10(x) = log(BesselI1(x)) - log(BesselI0(x)) private: static Scalar LargeCaseDeltaLogBesselI10(const Scalar x); public: static Scalar DeltaLogBesselI10(const Scalar x); // Modified second kind Bessel function of order nu: BesselK(nu, x)=\frac{\pi}{2}\frac{I_{-\nu}(x)-I_[\nu}(x)}{\sin{\nu\pi}} static Scalar LogBesselK(const Scalar nu, const Scalar x); static Scalar BesselK(const Scalar nu, const Scalar x); static Scalar BesselKDerivative(const Scalar nu, const Scalar x); // Beta function: beta(a, b) = \int_0^1 t^{a-1}.(1-t)^{b-1} dt static Scalar Beta(const Scalar a, const Scalar b); // Incomplete beta function: betaInc(a, b, x) = \int_0^x t^{a-1}.(1-t)^{b-1} dt static Scalar IncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); // Incomplete beta function inverse with respect to x static Scalar IncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); // Incomplete beta ratio function: betaRatioInc(a, b, x) = \int_0^x t^{a-1}.(1-t)^{b-1} dt / beta(a, b) static Scalar RegularizedIncompleteBeta(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); // Incomplete beta ratio function inverse with respect to x static Scalar RegularizedIncompleteBetaInverse(const Scalar a, const Scalar b, const Scalar x, const Bool tail = false); // Natural logarithm of the beta function static Scalar LnBeta(const Scalar a, const Scalar b); static Scalar LogBeta(const Scalar a, const Scalar b); // Dawson function: Dawson(x) = \exp(-x^2) * \int_0^x \exp(t^2) dt static Scalar Dawson(const Scalar x); static Complex Dawson(const Complex & z); // Debye function of order n: DebyeN(x, n) = n / x^n \int_0^x t^n/(\exp(t)-1) dt static Scalar Debye(const Scalar x, const UnsignedInteger n); // DiLog function: Dilog(x) = -\int_0^x \log(1-t)/t dt static Scalar DiLog(const Scalar x); // Exponential integral function: Ei(x) = -\int_{-x}^{\infty}exp(-t)/t dt static Scalar Ei(const Scalar x); // Complex exponential integral function: Ei(z) = -\int_{-z}^{\infty}exp(-t)/t dt static Complex Ei(const Complex & z); // Complex Faddeeva function: Faddeeva(z) = exp(-z^2)\erfc(-I*z) static Complex Faddeeva(const Complex & z); // Imaginary part of the Faddeeva function: FaddeevaIm(z) = Im(Faddeeva(x)) static Scalar FaddeevaIm(const Scalar x); // Gamma function: gamma(a) = \int_0^{\infty} t^{a-1}\exp(-t) dt static Scalar Gamma(const Scalar a); // igamma1pm1(a) = 1 / gamma(1 + a) - 1 static Scalar IGamma1pm1(const Scalar a); // GammaCorrection(a) = LogGamma(a) - log(sqrt(2.Pi)) + a - (a - 1/2) log(a) static Scalar GammaCorrection(const Scalar a); // Complex gamma function: gamma(a) = \int_0^{\infty} t^{a-1}\exp(-t) dt static Complex Gamma(const Complex & a); // Natural logarithm of the gamma function static Scalar LnGamma(const Scalar a); static Scalar LogGamma(const Scalar a); static Scalar LogGamma1p(const Scalar a); static Complex LogGamma(const Complex & a); // Incomplete gamma function: gamma(a, x) = \int_0^x t^{a-1}\exp(-t) dt static Scalar IncompleteGamma(const Scalar a, const Scalar x, const Bool tail = false); // Incomplete gamma function inverse with respect to x static Scalar IncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail = false); // Regularized incomplete gamma function: gamma(a, x) = \int_0^x t^{a-1}\exp(-t) dt / \Gamma(a) static Scalar RegularizedIncompleteGamma(const Scalar a, const Scalar x, const Bool tail = false); // Regularized incomplete gamma function inverse with respect to x static Scalar RegularizedIncompleteGammaInverse(const Scalar a, const Scalar x, const Bool tail = false); // Digamma function: psi(x) = ((dgamma/dx) / gamma)(x) static Scalar DiGamma(const Scalar x); static Scalar Psi(const Scalar x); // Inverse of the DiGamma function static Scalar DiGammaInv(const Scalar a); // Trigamma function: TriGamma(x) = ((d^2gamma/dx^2) / gamma)(x) static Scalar TriGamma(const Scalar x); // Hypergeometric function of type (1,1): hyperGeom_1_1(p1, q1, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) / (q1 + k)] * x^n / n! static Scalar HyperGeom_1_1(const Scalar p1, const Scalar q1, const Scalar x); // Complex hypergeometric function of type (1,1): hyperGeom_1_1(p1, q1, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) / (q1 + k)] * x^n / n! static Complex HyperGeom_1_1(const Scalar p1, const Scalar q1, const Complex & x); // Hypergeometric function of type (2,1): hyperGeom_2_1(p1, p2, q1, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) . (p2 + k) / (q1 + k)] * x^n / n! static Scalar HyperGeom_2_1(const Scalar p1, const Scalar p2, const Scalar q1, const Scalar x); // Hypergeometric function of type (2,2): hyperGeom_2_1(p1, p2, q1, q2, x) = \sum_{n=0}^{\infty} [\prod_{k=0}^{n-1} (p1 + k) . (p2 + k) / (q1 + k) / (q2 + k)] * x^n / n! static Scalar HyperGeom_2_2(const Scalar p1, const Scalar p2, const Scalar q1, const Scalar q2, const Scalar x); // Erf function erf(x) = 2 / \sqrt(\pi) . \int_0^x \exp(-t^2) dt static Scalar Erf(const Scalar x); static Complex Erf(const Complex & z); // Erf function erfi(x) = -i.erf(iz) static Scalar ErfI(const Scalar x); static Complex ErfI(const Complex & z); // Erf function erfc(x) = 1 - erf(x) static Scalar ErfC(const Scalar x); static Complex ErfC(const Complex & z); // Erf function erfcx(x) = exp(x^2).erfc(x) static Scalar ErfCX(const Scalar x); static Complex ErfCX(const Complex & z); // Inverse of the erf function static Scalar ErfInverse(const Scalar x); // Real branch of Lambert W function (principal or secndary) static Scalar LambertW(const Scalar x, const Bool principal = true); // Accurate value of log(1+z) for |z|<<1 static Complex Log1p(const Complex & z); // Accurate value of exp(z)-1 for |z|<<1 static Complex Expm1(const Complex & z); // Accurate value of log(1-exp(-x)) for all x static Complex Log1MExp(const Scalar x); // MarcumQ- function // static Scalar MarcumQFunction(const Scalar a,const Scalar b); // Next power of two static UnsignedInteger NextPowerOfTwo(const UnsignedInteger n); // Integer log2 static UnsignedInteger Log2(const Unsigned64BitsInteger n); // Compute the number of bits sets to 1 in n // Best known algorithm for 64 bits n and fast multiply static UnsignedInteger BitCount(const Unsigned64BitsInteger n); // Missing functions in cmath wrt math.h as of C++98 static Scalar Acosh(const Scalar x); static Scalar Asinh(const Scalar x); static Scalar Atanh(const Scalar x); static Scalar Cbrt(const Scalar x); // binomial coefficient C(n, k) static UnsignedInteger BinomialCoefficient(const UnsignedInteger n, const UnsignedInteger k); }; /* class SpecFunc */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECFUNC_HXX */ openturns-1.9/lib/src/Base/Func/SpecFunc/openturns/incgam.hxx000066400000000000000000000062531307543307100242650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the incomplete * regularized gamma function and related functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INCGAM_HXX #define OPENTURNS_INCGAM_HXX #include "openturns/OTprivate.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS namespace GammaFunctions { void incgam(const Scalar a, const Scalar x, Scalar & p, Scalar & q, SignedInteger & ierr); void invincgam(const Scalar a, const Scalar p, const Scalar q, Scalar & xr, SignedInteger & ierr); // computes (exp(x)-1)/x; Scalar exmin1(const Scalar x); // computes (exp(x)-1-x)/(0.5*x*x) Scalar exmin1minx(const Scalar x); // computes ln(1+x)-x Scalar lnec(const Scalar x); // partition the domain of the incomplete gamma function Scalar alpha(const Scalar x); // dompart is approx. of x^a * exp(-x) / gamma(a+1) ; Scalar dompart(const Scalar a, const Scalar x, const Bool qt); // a[0]/2+a[1]T1(x)+...a[n]Tn(x); series of Chebychev polynomials Scalar chepolsum(const Scalar x, const Point & a); // function g in 1/gamma(x+1) = 1+x*(x-1)*g(x), -1 <= x <= 1 Scalar auxgam(const Scalar x); // gamstar(x) = exp(stirling(x)), x > 0; or // gamma(x)/(exp(-x+(x-0.5)*ln(x))/sqrt(2pi) Scalar gamstar(const Scalar x); Scalar errorfunction(const Scalar x, const Bool erfcc, const Bool expo); Scalar fractio(const Scalar x, const Point & r, const Point & s); Scalar pqasymp(const Scalar a, const Scalar x, const Scalar dp, const Bool p); Scalar saeta(const Scalar a, const Scalar eta); Scalar qfraction(const Scalar a, const Scalar x, const Scalar dp); Scalar qtaylor(const Scalar a, const Scalar x, const Scalar dp); Scalar ptaylor(const Scalar a, const Scalar x, const Scalar dp); Scalar eps1(const Scalar eta); Scalar eps2(const Scalar eta); Scalar eps3(const Scalar eta); Scalar lambdaeta(const Scalar eta); Scalar invq(const Scalar x); Scalar inverfc(const Scalar x); Scalar ratfun(const Scalar x, const Point & ak, const Point & bk); } // GammaFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INCGAM_HXX */ openturns-1.9/lib/src/Base/Func/SymbolicEvaluation.cxx000066400000000000000000000135001307543307100230610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the evaluation of an analytical function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include #include "openturns/SymbolicEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymbolicEvaluation); static const Factory Factory_SymbolicEvaluation; /* Default constructor */ SymbolicEvaluation::SymbolicEvaluation() : EvaluationImplementation() , inputVariablesNames_() , outputVariablesNames_() , formulas_() { // Nothing to do } // SymbolicEvaluation /* Default constructor */ SymbolicEvaluation::SymbolicEvaluation(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas) : EvaluationImplementation() , inputVariablesNames_(inputVariablesNames) , outputVariablesNames_(outputVariablesNames) , formulas_(formulas) { if (outputVariablesNames.getSize() != formulas.getSize()) throw InvalidDimensionException(HERE) << "The number of outputVariablesNames (" << outputVariablesNames.getSize() << ") does not match the number of formulas (" << formulas.getSize() << ")"; parser_.setVariablesFormulas(inputVariablesNames, formulas); setInputDescription(inputVariablesNames_); setOutputDescription(outputVariablesNames_); } // SymbolicEvaluation /* Virtual constructor */ SymbolicEvaluation * SymbolicEvaluation::clone() const { return new SymbolicEvaluation(*this); } /* Comparison operator */ Bool SymbolicEvaluation::operator ==(const SymbolicEvaluation & other) const { return true; } /* String converter */ String SymbolicEvaluation::__repr__() const { OSS oss(true); oss << "class=" << SymbolicEvaluation::GetClassName() << " name=" << getName() << " inputVariablesNames=" << inputVariablesNames_ << " outputVariablesNames=" << outputVariablesNames_ << " formulas=" << formulas_; return oss; } /* String converter */ String SymbolicEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << getInputDescription() << "->" << formulas_; return oss; } /* Operator () */ Point SymbolicEvaluation::operator() (const Point & inP) const { Point result(parser_(inP)); ++ callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Operator () */ Sample SymbolicEvaluation::operator() (const Sample & inS) const { UnsignedInteger size = inS.getSize(); Sample outSample(size, getOutputDimension()); for (UnsignedInteger i = 0; i < size; ++ i) outSample[i] = operator()(inS[i]); outSample.setDescription(getOutputDescription()); return outSample; } /* Accessor for input point dimension */ UnsignedInteger SymbolicEvaluation::getInputDimension() const { return inputVariablesNames_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger SymbolicEvaluation::getOutputDimension() const { return outputVariablesNames_.getSize(); } /* Get the i-th marginal function */ SymbolicEvaluation::Implementation SymbolicEvaluation::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return new SymbolicEvaluation(inputVariablesNames_, Description(1, outputVariablesNames_[i]), Description(1, formulas_[i])); } /* Get the function corresponding to indices components */ SymbolicEvaluation::Implementation SymbolicEvaluation::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal function must be in the range [0, dim-1] and must be different"; const UnsignedInteger size = indices.getSize(); Description marginalOutputVariablesNames(size); Description marginalFormulas(size); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger j = indices[i]; marginalOutputVariablesNames[i] = outputVariablesNames_[j]; marginalFormulas[i] = formulas_[j]; } return new SymbolicEvaluation(inputVariablesNames_, marginalOutputVariablesNames, marginalFormulas); } /* Accessor to the input variables names */ Description SymbolicEvaluation::getInputVariablesNames() const { return inputVariablesNames_; } /* Accessor to the output variables names */ Description SymbolicEvaluation::getOutputVariablesNames() const { return outputVariablesNames_; } /* Accessor to the formulas */ Description SymbolicEvaluation::getFormulas() const { return formulas_; } /* Method save() stores the object through the StorageManager */ void SymbolicEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "inputVariablesNames_", inputVariablesNames_ ); adv.saveAttribute( "outputVariablesNames_", outputVariablesNames_ ); adv.saveAttribute( "formulas_", formulas_ ); } /* Method load() reloads the object from the StorageManager */ void SymbolicEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "inputVariablesNames_", inputVariablesNames_ ); adv.loadAttribute( "outputVariablesNames_", outputVariablesNames_ ); adv.loadAttribute( "formulas_", formulas_ ); *this = SymbolicEvaluation(inputVariablesNames_, outputVariablesNames_, formulas_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SymbolicFunction.cxx000066400000000000000000000205301307543307100225400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements analytical functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SymbolicFunction.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #include "openturns/SymbolicGradient.hxx" #include "openturns/SymbolicHessian.hxx" #endif #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymbolicFunction); // Inline documentation for analytical functions Bool SymbolicFunction::IsDocumentationInitialized_ = false; Description SymbolicFunction::ValidConstants_; Description SymbolicFunction::ValidFunctions_; Description SymbolicFunction::ValidOperators_; /* Default constructor */ SymbolicFunction::SymbolicFunction () : Function() { } /* Parameter constructor */ SymbolicFunction::SymbolicFunction (const String & inputVariablesName, const String & formula) : Function() { *this = SymbolicFunction(Description(1, inputVariablesName), Description(1, formula)); } /* Parameter constructor */ SymbolicFunction::SymbolicFunction (const Description & inputVariablesNames, const Description & formulas) : Function() { #ifdef OPENTURNS_HAVE_MUPARSER const Description outputVariablesNames(Description::BuildDefault(formulas.getSize(), "y")); // Try to build an analytical gradient SymbolicEvaluation evaluation(inputVariablesNames, outputVariablesNames, formulas); setEvaluation(evaluation.clone()); try { setGradient(new SymbolicGradient(evaluation)); } catch(...) { LOGWARN("Cannot compute an analytical gradient, using finite differences instead."); const Scalar epsilon = ResourceMap::GetAsScalar("CenteredFiniteDifferenceGradient-DefaultEpsilon"); setGradient(new CenteredFiniteDifferenceGradient(epsilon, getEvaluation())); } try { setHessian(new SymbolicHessian(evaluation)); } catch(...) { LOGWARN("Cannot compute an analytical hessian, using finite differences instead."); const Scalar epsilon = ResourceMap::GetAsScalar("CenteredFiniteDifferenceHessian-DefaultEpsilon"); setHessian(new CenteredFiniteDifferenceHessian(epsilon, getEvaluation())); } #else throw NotYetImplementedException(HERE) << "SymbolicFunction requires muParser"; #endif } /* Comparison operator */ Bool SymbolicFunction::operator ==(const SymbolicFunction & other) const { return true; } /* String converter */ String SymbolicFunction::__repr__() const { OSS oss; oss << "class=" << SymbolicFunction::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } String SymbolicFunction::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Initialization of the documentation */ void SymbolicFunction::InitializeDocumentation() { if (IsDocumentationInitialized_) return; // First, the constants ValidConstants_.setName("Valid constants"); ValidConstants_.add("_e -> Euler's constant (2.71828...)"); ValidConstants_.add("_pi -> Pi constant (3.14159...)"); // Second, the functions ValidFunctions_.setName("Valid functions"); ValidFunctions_.add("sin(arg) -> sine function"); ValidFunctions_.add("cos(arg) -> cosine function"); ValidFunctions_.add("cotan(arg) -> cotangent function"); ValidFunctions_.add("tan(arg) -> tangent function"); ValidFunctions_.add("asin(arg) -> inverse sine function"); ValidFunctions_.add("acos(arg) -> inverse cosine function"); ValidFunctions_.add("acotan(arg) -> inverse cotangent function"); ValidFunctions_.add("atan(arg) -> inverse tangent function, values in (-pi/2, pi/2)"); ValidFunctions_.add("atan2(arg1, arg2) -> inverse tangent function, values in (-pi, pi)"); ValidFunctions_.add("sinh(arg) -> hyperbolic sine function"); ValidFunctions_.add("cosh(arg) -> hyperbolic cosine function"); ValidFunctions_.add("tanh(arg) -> hyperbolic tangens function"); ValidFunctions_.add("asinh(arg) -> inverse hyperbolic sine function"); ValidFunctions_.add("acosh(arg) -> inverse hyperbolic cosine function"); ValidFunctions_.add("atanh(arg) -> inverse hyperbolic tangent function"); ValidFunctions_.add("log2(arg) -> logarithm in base 2"); ValidFunctions_.add("log10(arg) -> logarithm in base 10"); ValidFunctions_.add("log(arg) -> logarithm in base e (2.71828...)"); ValidFunctions_.add("ln(arg) -> alias for log function"); ValidFunctions_.add("lngamma(arg) -> log of the gamma function"); ValidFunctions_.add("gamma(arg) -> gamma function"); ValidFunctions_.add("exp(arg) -> exponential function"); ValidFunctions_.add("erf(arg) -> error function"); ValidFunctions_.add("erfc(arg) -> complementary error function"); ValidFunctions_.add("abs(arg) -> absolute value function"); ValidFunctions_.add("sqrt(arg) -> square root function"); ValidFunctions_.add("cbrt(arg) -> cubic root function"); ValidFunctions_.add("besselJ0(arg) -> 1rst kind Bessel function with parameter 0"); ValidFunctions_.add("besselJ1(arg) -> 1rst kind Bessel function with parameter 1"); ValidFunctions_.add("besselY0(arg) -> 2nd kind Bessel function with parameter 0"); ValidFunctions_.add("besselY1(arg) -> 2nd kind Bessel function with parameter 1"); ValidFunctions_.add("floor(arg) -> round to nearest integer"); ValidFunctions_.add("ceil(arg) -> round to nearest integer"); ValidFunctions_.add("trunc(arg) -> round to nearest integer"); ValidFunctions_.add("round(arg) -> round to nearest integer"); ValidFunctions_.add("rint(arg) -> round to nearest integer"); ValidFunctions_.add("sign(arg) -> sign function -1 if x<0; 1 if x>0"); ValidFunctions_.add("(condition ? value1 : value2) -> if condition then value1 else value2"); ValidFunctions_.add("sum(arg1, ..., argn) -> sum of all arguments"); ValidFunctions_.add("avg(arg1, ..., argn) -> mean value of all arguments"); ValidFunctions_.add("min(arg1, ..., argn) -> min of all arguments"); ValidFunctions_.add("max(arg1, ..., argn) -> max of all arguments"); // Third, the operators ValidOperators_.setName("Valid operators"); ValidOperators_.add("= -> assignement, can only be applied to variable names (priority -1)"); ValidOperators_.add("and -> logical and (priority 1)"); ValidOperators_.add("or -> logical or (priority 1)"); ValidOperators_.add("xor -> logical xor (priority 1)"); ValidOperators_.add("<= -> less or equal (priority 2)"); ValidOperators_.add(">= -> greater or equal (priority 2)"); ValidOperators_.add("!= -> not equal (priority 2)"); ValidOperators_.add("== -> equal (priority 2)"); ValidOperators_.add("> -> greater than (priority 2)"); ValidOperators_.add("< -> less than (priority 2)"); ValidOperators_.add("+ -> addition (priority 3)"); ValidOperators_.add("- -> subtraction (priority 3)"); ValidOperators_.add("* -> multiplication (priority 4)"); ValidOperators_.add("/ -> division (priority 4)"); ValidOperators_.add("~ -> logical negation (priority 4)"); ValidOperators_.add("- -> sign change (priority 4)"); ValidOperators_.add("^ -> raise x to the power of y (priority 5)"); IsDocumentationInitialized_ = true; } /* Static methods for documentation of analytical fonctions */ Description SymbolicFunction::GetValidConstants() { if (!IsDocumentationInitialized_) InitializeDocumentation(); return ValidConstants_; } Description SymbolicFunction::GetValidFunctions() { if (!IsDocumentationInitialized_) InitializeDocumentation(); return ValidFunctions_; } Description SymbolicFunction::GetValidOperators() { if (!IsDocumentationInitialized_) InitializeDocumentation(); return ValidOperators_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SymbolicGradient.cxx000066400000000000000000000216641307543307100225210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the gradient of an analytical function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/SymbolicGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "Ev3/expression.h" #include "Ev3/parser.h" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymbolicGradient); static const Factory Factory_SymbolicGradient; /* Default constructor */ SymbolicGradient::SymbolicGradient() : GradientImplementation() , isInitialized_(false) , isAnalytical_(true) , evaluation_() { // Nothing to do } // SymbolicGradient /* Default constructor */ SymbolicGradient::SymbolicGradient(const SymbolicEvaluation & evaluation) : GradientImplementation() , isInitialized_(false) , isAnalytical_(true) , evaluation_(evaluation) { // Nothing to do } // SymbolicGradient /* Virtual constructor */ SymbolicGradient * SymbolicGradient::clone() const { SymbolicGradient * result = new SymbolicGradient(*this); result->isInitialized_ = false; return result; } /* Comparison operator */ Bool SymbolicGradient::operator ==(const SymbolicGradient & other) const { return (evaluation_ == other.evaluation_); } /* String converter */ String SymbolicGradient::__repr__() const { OSS oss(true); oss << "class=" << SymbolicGradient::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter */ String SymbolicGradient::__str__(const String & offset) const { OSS oss(false); oss << offset; // Check that the symbolic differentiation has been done try { initialize(); if (isAnalytical_) { oss << "\n"; // First, find the maximum length of the output variable names const Description inputVariablesNames(evaluation_.getInputVariablesNames()); const Description outputVariablesNames(evaluation_.getOutputVariablesNames()); UnsignedInteger length = 0; const UnsignedInteger iMax = getInputDimension(); const UnsignedInteger jMax = getOutputDimension(); for (UnsignedInteger i = 0; i < iMax; ++i) { const UnsignedInteger lengthI = inputVariablesNames[i].length(); for (UnsignedInteger j = 0; j < jMax; ++j) length = std::max(length, lengthI + static_cast(outputVariablesNames[j].length()) + 8); } for (UnsignedInteger j = 0; j < jMax; ++j) { for (UnsignedInteger i = 0; i < iMax; ++i) { oss << offset << "| " << std::setw(length) << ("d(" + outputVariablesNames[j] + ") / d(" + inputVariablesNames[i] + ")") << " = " << getFormula(i, j) << Os::GetEndOfLine(); } } } // isAnalytical } catch(...) { // Nothing to do } if (!isAnalytical_) oss << offset << "No analytical gradient available. Try using finite difference instead."; return oss; } /* Must initialize the parser at the first call to operator() as the reference associated with the variables may have change after the construction */ void SymbolicGradient::initialize() const { if (isInitialized_) return; isAnalytical_ = false; const UnsignedInteger inputSize = evaluation_.inputVariablesNames_.getSize(); const UnsignedInteger outputSize = evaluation_.outputVariablesNames_.getSize(); const UnsignedInteger gradientSize = inputSize * outputSize; Description gradientFormulas(gradientSize); // For each element of the gradient, do UnsignedInteger gradientIndex = 0; for (UnsignedInteger columnIndex = 0; columnIndex < outputSize; ++columnIndex) { // Parse the current formula with Ev3 int nerr(0); Ev3::ExpressionParser ev3Parser; // Initialize the variable indices in order to match the order of OpenTURNS in Ev3 for (UnsignedInteger inputVariableIndex = 0; inputVariableIndex < inputSize; ++inputVariableIndex) ev3Parser.SetVariableID(evaluation_.inputVariablesNames_[inputVariableIndex], inputVariableIndex); Ev3::Expression ev3Expression; try { ev3Expression = ev3Parser.Parse(evaluation_.formulas_[columnIndex].c_str(), nerr); } catch (Ev3::ErrBase & exc) { throw InternalException(HERE) << exc.description_; } if (nerr != 0) throw InvalidArgumentException(HERE) << "Error: cannot parse " << evaluation_.formulas_[columnIndex] << " with Ev3. No analytical gradient."; // Ev3::Simplify(&ev3Expression); for (UnsignedInteger rowIndex = 0; rowIndex < inputSize; ++rowIndex) { try { Ev3::Expression derivative(Ev3::Diff(ev3Expression, rowIndex)); // Ev3::Simplify(&derivative); LOGINFO(OSS() << "d(" << ev3Expression->ToString() << ")/d(" << evaluation_.inputVariablesNames_[rowIndex] << ")=" << derivative->ToString()); gradientFormulas[gradientIndex] = derivative->ToString(); ++ gradientIndex; } catch(...) { throw InternalException(HERE) << "Error: cannot compute the derivative of " << ev3Expression->ToString() << " with respect to " << evaluation_.inputVariablesNames_[rowIndex]; } } } parser_.setVariablesFormulas(evaluation_.inputVariablesNames_, gradientFormulas); // Everything is ok (no exception) isAnalytical_ = true; isInitialized_ = true; } /* Gradient */ Matrix SymbolicGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a Function with an argument of invalid dimension"; if (!isInitialized_) initialize(); if (!isAnalytical_) throw InternalException(HERE) << "The gradient does not have an analytical expression."; const UnsignedInteger outputDimension = getOutputDimension(); Matrix out(inputDimension, outputDimension); Point outP(parser_(inP)); ++ callsNumber_; UnsignedInteger parserIndex = 0; for (UnsignedInteger columnIndex = 0; columnIndex < outputDimension; ++ columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < inputDimension; ++ rowIndex) { out(rowIndex, columnIndex) = outP[parserIndex]; ++ parserIndex; } } return out; } /* Accessor for input point dimension */ UnsignedInteger SymbolicGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger SymbolicGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Accessor to a specific formula */ String SymbolicGradient::getFormula(const UnsignedInteger i, const UnsignedInteger j) const { const UnsignedInteger inputDimension = getInputDimension(); if ((i >= inputDimension) || (j >= getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: cannot access to a formula outside of the gradient dimensions."; if (!isInitialized_) initialize(); return parser_.getFormulas()[i + j * inputDimension]; } /* Get the i-th marginal function */ SymbolicGradient::Implementation SymbolicGradient::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal gradient must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ SymbolicGradient::Implementation SymbolicGradient::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal gradient must be in the range [0, dim-1] and must be different"; const UnsignedInteger marginalDimension = indices.getSize(); Description marginalFormulas(marginalDimension); Description marginalOutputNames(marginalDimension); Description outputNames(evaluation_.getOutputVariablesNames()); Description formulas(evaluation_.getFormulas()); for (UnsignedInteger i = 0; i < marginalDimension; ++i) { marginalFormulas[i] = formulas[indices[i]]; marginalOutputNames[i] = outputNames[indices[i]]; } return new SymbolicGradient(SymbolicEvaluation(evaluation_.getInputVariablesNames(), marginalOutputNames, marginalFormulas)); } /* Method save() stores the object through the StorageManager */ void SymbolicGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void SymbolicGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); *this = SymbolicGradient(evaluation_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SymbolicHessian.cxx000066400000000000000000000260611307543307100223520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the Hessian of analytical functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/SymbolicHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "Ev3/expression.h" #include "Ev3/parser.h" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymbolicHessian); static const Factory Factory_SymbolicHessian; /* Default constructor */ SymbolicHessian::SymbolicHessian() : HessianImplementation() , isInitialized_(false) , isAnalytical_(true) , evaluation_() { // Nothing to do } // SymbolicHessian /* Default constructor */ SymbolicHessian::SymbolicHessian(const SymbolicEvaluation & evaluation) : HessianImplementation() , isInitialized_(false) , isAnalytical_(true) , evaluation_(evaluation) { // Nothing to do } // SymbolicHessian /* Virtual constructor */ SymbolicHessian * SymbolicHessian::clone() const { SymbolicHessian * result = new SymbolicHessian(*this); result->isInitialized_ = false; return result; } /* Comparison operator */ Bool SymbolicHessian::operator ==(const SymbolicHessian & other) const { return true; } /* String converter */ String SymbolicHessian::__repr__() const { OSS oss(true); oss << "class=" << SymbolicHessian::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter */ String SymbolicHessian::__str__(const String & offset) const { OSS oss(false); oss << offset; // Check that the symbolic differentiation has been done try { initialize(); if (isAnalytical_) { oss << "\n"; // First, find the maximum length of the output variable names const Description inputVariablesNames(evaluation_.getInputVariablesNames()); const Description outputVariablesNames(evaluation_.getOutputVariablesNames()); UnsignedInteger length = 0; const UnsignedInteger iMax = getInputDimension(); const UnsignedInteger kMax = getOutputDimension(); for (UnsignedInteger k = 0; k < kMax; ++k) { const UnsignedInteger lengthK = outputVariablesNames[k].length(); for (UnsignedInteger i = 0; i < iMax; ++i) { const UnsignedInteger lengthI = inputVariablesNames[i].length(); // The diagonal term is always shorter than one of the off-diagonal terms for (UnsignedInteger j = 0; j < i; ++j) length = std::max(length, lengthI + lengthK + static_cast(inputVariablesNames[j].length()) + 14); } // For i } // For k for (UnsignedInteger k = 0; k < kMax; ++k) { for (UnsignedInteger i = 0; i < iMax; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { oss << offset << "| " << std::setw(length) << ("d^2(" + outputVariablesNames[k] + ") / d(" + inputVariablesNames[i] + ")d(" + inputVariablesNames[j] + ")") << " = " << getFormula(i, j, k) << Os::GetEndOfLine(); } oss << offset << "| " << std::setw(length) << ("d^2(" + outputVariablesNames[k] + ") / d(" + inputVariablesNames[i] + ")^2") << " = " << getFormula(i, i, k) << Os::GetEndOfLine(); } // For i } // For k } // isAnalytical } catch(...) { // Nothing to do } if (!isAnalytical_) oss << offset << "No analytical hessian available. Try using finite difference instead."; return oss; } /* Must initialize the parser at the first call to operator() as the reference associated with the variables may have change after the construction */ void SymbolicHessian::initialize() const { if (isInitialized_) return; isAnalytical_ = false; const UnsignedInteger inputSize = evaluation_.inputVariablesNames_.getSize(); const UnsignedInteger outputSize = evaluation_.outputVariablesNames_.getSize(); const UnsignedInteger hessianSize = inputSize * (inputSize + 1) * outputSize / 2; // For each element of the hessian, do UnsignedInteger hessianIndex = 0; Description hessianFormulas(hessianSize); for (UnsignedInteger sheetIndex = 0; sheetIndex < outputSize; ++sheetIndex) { // Parse the current formula with Ev3 int nerr(0); Ev3::ExpressionParser ev3Parser; // Initialize the variable indices in order to match the order of OpenTURNS in Ev3 for (UnsignedInteger inputVariableIndex = 0; inputVariableIndex < inputSize; ++inputVariableIndex) ev3Parser.SetVariableID(evaluation_.inputVariablesNames_[inputVariableIndex], inputVariableIndex); Ev3::Expression ev3Expression; try { ev3Expression = ev3Parser.Parse(evaluation_.formulas_[sheetIndex].c_str(), nerr); } catch (Ev3::ErrBase & exc) { throw InternalException(HERE) << exc.description_; } if (nerr != 0) throw InvalidArgumentException(HERE) << "Error: cannot parse " << evaluation_.formulas_[sheetIndex] << " with Ev3. No analytical hessian."; // Ev3::Simplify(&ev3Expression); for (UnsignedInteger rowIndex = 0; rowIndex < inputSize; ++rowIndex) { Ev3::Expression firstDerivative; try { firstDerivative = Ev3::Diff(ev3Expression, rowIndex); // Ev3::Simplify(&firstDerivative); LOGINFO(OSS() << "First variable=" << evaluation_.inputVariablesNames_[rowIndex] << ", derivative=" << firstDerivative->ToString()); } catch(...) { throw InternalException(HERE) << "Error: cannot compute the derivative of " << ev3Expression->ToString() << " with respect to " << evaluation_.inputVariablesNames_[rowIndex]; } for (UnsignedInteger columnIndex = 0; columnIndex <= rowIndex; ++columnIndex) { try { Ev3::Expression secondDerivative(Ev3::Diff(firstDerivative, columnIndex)); // Ev3::Simplify(&secondDerivative); LOGINFO(OSS() << "d2(" << ev3Expression->ToString() << ")/d(" << evaluation_.inputVariablesNames_[rowIndex] << ")d(" << evaluation_.inputVariablesNames_[columnIndex] << ")=" << secondDerivative->ToString()); hessianFormulas[hessianIndex] = secondDerivative->ToString(); ++ hessianIndex; } catch(...) { throw InternalException(HERE) << "Error: cannot compute the derivative of " << firstDerivative->ToString() << " with respect to " << evaluation_.inputVariablesNames_[columnIndex]; } } // columnIndex } // rowIndex } // sheetIndex parser_.setVariablesFormulas(evaluation_.inputVariablesNames_, hessianFormulas); // Everything is ok (no exception) isAnalytical_ = true; isInitialized_ = true; } /* Hessian */ SymmetricTensor SymbolicHessian::hessian(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a Function with an argument of invalid dimension"; if (!isInitialized_) initialize(); if (!isAnalytical_) throw InternalException(HERE) << "The hessian does not have an analytical expression."; const UnsignedInteger outputDimension = getOutputDimension(); SymmetricTensor out(inputDimension, outputDimension); ++ callsNumber_; Point outP(parser_(inP)); UnsignedInteger parserIndex = 0; for (UnsignedInteger sheetIndex = 0; sheetIndex < outputDimension; ++ sheetIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < inputDimension; ++ rowIndex) { for (UnsignedInteger columnIndex = 0; columnIndex <= rowIndex; ++ columnIndex) { out(rowIndex, columnIndex, sheetIndex) = outP[parserIndex]; ++ parserIndex; } // columnIndex } // rowIndex } // sheetIndex return out; } /* Accessor to a specific formula */ String SymbolicHessian::getFormula(const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { const UnsignedInteger inputDimension = getInputDimension(); if ((i >= inputDimension) || (j >= inputDimension) || (k >= getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: cannot access to a formula outside of the hessian dimensions."; if (!isInitialized_) initialize(); // Convert the 3D index into a linear index UnsignedInteger rowIndex = i; UnsignedInteger columnIndex = j; UnsignedInteger sheetIndex = k; // First, take the symmetry into account if (i < j) { rowIndex = j; columnIndex = i; } // Now, columnIndex <= rowIndex UnsignedInteger linearIndex = 0; // Each sheet adds a triangle with the main diagonal linearIndex += ((inputDimension * (inputDimension + 1)) / 2) * sheetIndex; // Compute the linear sub-index into the triangle linearIndex += (rowIndex * (rowIndex + 1)) / 2 + columnIndex; return parser_.getFormulas()[linearIndex]; } /* Accessor for input point dimension */ UnsignedInteger SymbolicHessian::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger SymbolicHessian::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Get the i-th marginal function */ SymbolicHessian::Implementation SymbolicHessian::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal hessian must be in the range [0, outputDimension-1]"; return getMarginal(Indices(1, i)); } /* Get the function corresponding to indices components */ SymbolicHessian::Implementation SymbolicHessian::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal hessian must be in the range [0, dim-1] and must be different"; const UnsignedInteger marginalDimension = indices.getSize(); Description marginalFormulas(marginalDimension); Description marginalOutputNames(marginalDimension); Description outputNames(evaluation_.getOutputVariablesNames()); Description formulas(evaluation_.getFormulas()); for (UnsignedInteger i = 0; i < marginalDimension; ++i) { marginalFormulas[i] = formulas[indices[i]]; marginalOutputNames[i] = outputNames[indices[i]]; } return new SymbolicHessian(SymbolicEvaluation(evaluation_.getInputVariablesNames(), marginalOutputNames, marginalFormulas)); } /* Method save() stores the object through the StorageManager */ void SymbolicHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void SymbolicHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); *this = SymbolicHessian(evaluation_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/SymbolicParser.cxx000066400000000000000000000153331307543307100222140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A math expression parser * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SymbolicParser.hxx" #include "openturns/SpecFunc.hxx" #include "muParser.h" using namespace mu; BEGIN_NAMESPACE_OPENTURNS class MuParser : public mu::Parser { public: /** Default constructor */ MuParser(); protected: static mu::value_type Cotan(mu::value_type v); static mu::value_type ACotan(mu::value_type v); static mu::value_type ASinh(mu::value_type v); static mu::value_type ACosh(mu::value_type v); static mu::value_type ATanh(mu::value_type v); static mu::value_type Ln(mu::value_type v); static mu::value_type Log2(mu::value_type v); static mu::value_type LnGamma(mu::value_type v); static mu::value_type Gamma(mu::value_type v); static mu::value_type Erf(mu::value_type v); static mu::value_type Erfc(mu::value_type v); static mu::value_type Abs(mu::value_type v); static mu::value_type Cbrt(mu::value_type v); static mu::value_type J0(mu::value_type v); static mu::value_type J1(mu::value_type v); static mu::value_type Y0(mu::value_type v); static mu::value_type Y1(mu::value_type v); static mu::value_type Rint(mu::value_type v); static mu::value_type Floor(mu::value_type v); static mu::value_type Ceil(mu::value_type v); static mu::value_type Trunc(mu::value_type v); static mu::value_type Round(mu::value_type v); }; SymbolicParser::SymbolicParser() : Object() { } void SymbolicParser::setVariablesFormulas(const Description & inputVariablesNames, const Description & formulas) { inputVariablesNames_ = inputVariablesNames; formulas_ = formulas; } void SymbolicParser::initialize() const { const UnsignedInteger inputDimension = inputVariablesNames_.getSize(); const UnsignedInteger outputDimension = formulas_.getSize(); inputStack_ = Point(inputDimension); if (parsers_.getSize() == outputDimension) return; parsers_ = Collection >(outputDimension); try { // For each parser of a formula, do for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++ outputIndex) { parsers_[outputIndex] = new MuParser; for (UnsignedInteger inputIndex = 0; inputIndex < inputDimension; ++ inputIndex) { // DefineVar defines all the values given to variables parsers_[outputIndex].get()->DefineVar(inputVariablesNames_[inputIndex].c_str(), &inputStack_[inputIndex]); } parsers_[outputIndex].get()->SetExpr(formulas_[outputIndex].c_str()); } } catch (mu::Parser::exception_type & ex) { throw InvalidArgumentException(HERE) << "Error constructing an analytical function, message=" << ex.GetMsg() << " formula=" << ex.GetExpr() << " token=" << ex.GetToken() << " position=" << ex.GetPos(); } } Point SymbolicParser::operator() (const Point & inP) const { const UnsignedInteger inputDimension = inputVariablesNames_.getSize(); const UnsignedInteger outputDimension = formulas_.getSize(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: invalid input dimension (" << inP.getDimension() << ") expected " << inputDimension; initialize(); std::copy(inP.begin(), inP.end(), inputStack_.begin()); Point result(outputDimension); try { for (UnsignedInteger outputIndex = 0; outputIndex < result.getDimension(); ++ outputIndex) { result[outputIndex] = parsers_[outputIndex].get()->Eval(); } } catch (mu::Parser::exception_type & ex) { throw InternalException(HERE) << ex.GetMsg(); } return result; } Description SymbolicParser::getFormulas() const { return formulas_; } MuParser::MuParser() : Parser() { DefineFun(_T("cotan"), Cotan); // modified DefineFun(_T("acotan"), ACotan); // modified DefineFun(_T("asinh"), ASinh); // modified DefineFun(_T("acosh"), ACosh); // modified DefineFun(_T("atanh"), ATanh); // modified DefineFun(_T("log"), Ln); // modified: assigned to log10 by default DefineFun(_T("log2"), Log2); // modified DefineFun(_T("lngamma"), LnGamma); // added DefineFun(_T("gamma"), Gamma); // added DefineFun(_T("erf"), Erf); // added DefineFun(_T("erfc"), Erfc); // added DefineFun(_T("abs"), Abs); // modified DefineFun(_T("cbrt"), Cbrt); // added DefineFun(_T("besselJ0"), J0); // added DefineFun(_T("besselJ1"), J1); // added DefineFun(_T("besselY0"), Y0); // added DefineFun(_T("besselY1"), Y1); // added DefineFun(_T("rint"), Rint); // modified DefineFun(_T("floor"), Floor); // added DefineFun(_T("ceil"), Ceil); // added DefineFun(_T("trunc"), Trunc); // added DefineFun(_T("round"), Round); // added } value_type MuParser::Cotan(value_type v) { return 1.0 / tan(v); } value_type MuParser::ACotan(value_type v) { if (v < 0.0) return -M_PI_2 - atan(v); return M_PI_2 - atan(v); } value_type MuParser::ASinh(value_type v) { return asinh(v); } value_type MuParser::ACosh(value_type v) { return acosh(v); } value_type MuParser::ATanh(value_type v) { return atanh(v); } value_type MuParser::Ln(value_type v) { return log(v); } value_type MuParser::Log2(value_type v) { return log2(v); } value_type MuParser::LnGamma(value_type v) { return lgamma(v); } value_type MuParser::Gamma(value_type v) { return tgamma(v); } value_type MuParser::Erf(value_type v) { return erf(v); } value_type MuParser::Erfc(value_type v) { return erfc(v); } value_type MuParser::Abs(value_type v) { return std::abs(v); } value_type MuParser::Cbrt(value_type v) { return cbrt(v); } value_type MuParser::J0(value_type v) { return j0(v); } value_type MuParser::J1(value_type v) { return j1(v); } value_type MuParser::Y0(value_type v) { return y0(v); } value_type MuParser::Y1(value_type v) { return y1(v); } value_type MuParser::Rint(value_type v) { return rint(v); } value_type MuParser::Floor(value_type v) { return floor(v); } value_type MuParser::Ceil(value_type v) { return ceil(v); } value_type MuParser::Trunc(value_type v) { return trunc(v); } value_type MuParser::Round(value_type v) { return round(v); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/TensorizedUniVariateFunctionFactory.cxx000066400000000000000000000122741307543307100264330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the tensorized function basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TensorizedUniVariateFunctionFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Indices.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/ProductUniVariateFunctionEvaluation.hxx" #include "openturns/ProductUniVariateFunctionGradient.hxx" #include "openturns/ProductUniVariateFunctionHessian.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_UniVariateFunctionFamily; CLASSNAMEINIT(TensorizedUniVariateFunctionFactory); static const Factory Factory_TensorizedUniVariateFunctionFactory; typedef Collection PointCollection; typedef ProductUniVariateFunctionEvaluation::UniVariateFunctionCollection UniVariateFunctionCollection; /* Default constructor */ TensorizedUniVariateFunctionFactory::TensorizedUniVariateFunctionFactory() : FunctionalBasisImplementation() , coll_() , phi_() { // Nothing to do } /* Constructor */ TensorizedUniVariateFunctionFactory::TensorizedUniVariateFunctionFactory(const FunctionFamilyCollection & coll) : FunctionalBasisImplementation() , coll_(coll) , phi_(coll.getSize()) { // Nothing to do } /* Constructor */ TensorizedUniVariateFunctionFactory::TensorizedUniVariateFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi) : FunctionalBasisImplementation(), coll_(coll), phi_(phi) { if (coll.getSize() != phi.getDimension()) throw InvalidArgumentException(HERE) << "Error: the enumerate function must have a dimension equal to the collection size"; } /* Virtual constructor */ TensorizedUniVariateFunctionFactory * TensorizedUniVariateFunctionFactory::clone() const { return new TensorizedUniVariateFunctionFactory(*this); } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction TensorizedUniVariateFunctionFactory::getEnumerateFunction() const { return phi_; } /* set the enumerate function that translate unidimensional indices into multidimensional indices */ void TensorizedUniVariateFunctionFactory::setEnumerateFunction(const EnumerateFunction & phi) { phi_ = phi; } /* set the function familly collection */ void TensorizedUniVariateFunctionFactory::setFunctionFamilyCollection(const FunctionFamilyCollection & coll) { coll_ = coll; if (coll.getSize() != phi_.getDimension()) { setEnumerateFunction(EnumerateFunction(coll.getSize())); } } TensorizedUniVariateFunctionFactory::FunctionFamilyCollection TensorizedUniVariateFunctionFactory::getFunctionFamilyCollection() const { return coll_; } /* Build the Function of the given index */ Function TensorizedUniVariateFunctionFactory::build(const UnsignedInteger index) const { // Compute the multi-indices using the EnumerateFunction const Indices indices(phi_(index)); const UnsignedInteger size = indices.getSize(); // Then build the collection of functions using the collection of factories UniVariateFunctionCollection functions(size); for (UnsignedInteger i = 0; i < size; ++ i) { functions[i] = coll_[i].build(indices[i]); } const Pointer p_evaluation(ProductUniVariateFunctionEvaluation(functions).clone()); return FunctionImplementation(p_evaluation, ProductUniVariateFunctionGradient(p_evaluation).clone(), ProductUniVariateFunctionHessian(p_evaluation).clone()); } /* String converter */ String TensorizedUniVariateFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName() << " univariate function collection=" << coll_ << " enumerate function=" << phi_; } /* Method save() stores the object through the StorageManager */ void TensorizedUniVariateFunctionFactory::save(Advocate & adv) const { FunctionalBasisImplementation::save(adv); adv.saveAttribute( "coll_", coll_ ); adv.saveAttribute( "phi_", phi_ ); } /* Method load() reloads the object from the StorageManager */ void TensorizedUniVariateFunctionFactory::load(Advocate & adv) { FunctionalBasisImplementation::load(adv); adv.loadAttribute( "coll_", coll_ ); adv.loadAttribute( "phi_", phi_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/TrendEvaluation.cxx000066400000000000000000000073071307543307100223640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a Box cox implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #include "openturns/TrendEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TrendEvaluation); static const Factory Factory_TrendEvaluation; /* Default constructor */ TrendEvaluation::TrendEvaluation() : EvaluationImplementation() , function_() { // Nothing to do } /* Parameter constructor */ TrendEvaluation::TrendEvaluation(const Function & function) : EvaluationImplementation() , function_(function) { Description inputDescription(function.getInputDescription()); const Description outputDescription(function.getOutputDescription()); const UnsignedInteger outputDimension = outputDescription.getSize(); const Description otherInputDescription(Description::BuildDefault(outputDimension, "x")); for (UnsignedInteger i = 0; i < outputDimension; ++i) inputDescription.add(otherInputDescription[i]); setInputDescription(inputDescription); setOutputDescription(outputDescription); } /* Clone constructor */ TrendEvaluation * TrendEvaluation::clone() const { return new TrendEvaluation(*this); } /* Comparison operator */ Bool TrendEvaluation::operator ==(const TrendEvaluation & other) const { if (this == &other) return true; return (function_ == other.function_); } /* String converter */ String TrendEvaluation::__repr__() const { OSS oss(true); oss << "class=" << TrendEvaluation::GetClassName() << " name=" << getName() << " function=" << function_.__repr__(); return oss; } /* String converter __str__ */ String TrendEvaluation::__str__(const String & offset) const { OSS oss (false); oss << function_.__str__(offset); return oss; } /* Accessor for the function */ Function TrendEvaluation::getFunction() const { return function_; } /* Operator () */ Point TrendEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Invalid input dimension"; UnsignedInteger outputDimension = getOutputDimension(); Point result(outputDimension); const UnsignedInteger reducedInputDimension = function_.getInputDimension(); Point t(reducedInputDimension); for (UnsignedInteger i = 0; i < reducedInputDimension; ++i) t[i] = inP[i]; const Point z(function_(t)); for (UnsignedInteger i = 0; i < outputDimension; ++i) result[i] = inP[i + reducedInputDimension] + z[i]; ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger TrendEvaluation::getInputDimension() const { return function_.getInputDimension() + function_.getOutputDimension(); } /* Accessor for output point dimension */ UnsignedInteger TrendEvaluation::getOutputDimension() const { return function_.getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void TrendEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "function_", function_ ); } /* Method load() reloads the object from the StorageManager */ void TrendEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "function_", function_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/TrendTransform.cxx000066400000000000000000000103601307543307100222210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for the trend transform * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TrendTransform.hxx" #include "openturns/InverseTrendTransform.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TrendTransform); static const Factory Factory_TrendTransform; /* Default constructor */ TrendTransform::TrendTransform() : VertexValueFunction() { // Nothing to do } /* Parameter constructor */ TrendTransform::TrendTransform(const Function & function) : VertexValueFunction(function.getInputDimension()) { p_evaluation_ = function.getEvaluation() ; // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ TrendTransform::TrendTransform(const EvaluationPointer & p_evaluation) : VertexValueFunction(p_evaluation->getInputDimension()) { p_evaluation_ = p_evaluation; // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ TrendTransform::TrendTransform(const EvaluationImplementation & evaluation) : VertexValueFunction(evaluation.getInputDimension()) { p_evaluation_ = evaluation.clone(); // Set the descriptions setInputDescription(p_evaluation_->getOutputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Virtual constructor */ TrendTransform * TrendTransform::clone() const { return new TrendTransform(*this); } /* Comparison operator */ Bool TrendTransform::operator ==(const TrendTransform & other) const { return (getEvaluation() == other.getEvaluation()); } /* String converter */ String TrendTransform::__repr__() const { OSS oss(true); oss << "class=" << TrendTransform::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String TrendTransform::__str__(const String & offset) const { return OSS(false) << p_evaluation_->__str__(offset); } /* Operator () */ Field TrendTransform::operator() (const Field & inFld) const { if (inFld.getSpatialDimension() != p_evaluation_->getInputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a Field with mesh dimension=" << p_evaluation_->getInputDimension() << ", got mesh dimension=" << inFld.getSpatialDimension(); if (inFld.getDimension() != p_evaluation_->getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a Field with dimension=" << p_evaluation_->getOutputDimension() << ", got dimension=" << inFld.getDimension(); Sample outputSample((*p_evaluation_)(inFld.getMesh().getVertices())); // finally as the function adds a trend, result for (UnsignedInteger k = 0; k < outputSample.getSize(); ++k) outputSample[k] = inFld.getValueAtIndex(k) + outputSample[k]; ++callsNumber_; return Field(inFld.getMesh(), outputSample); } /* Inverse accessor */ InverseTrendTransform TrendTransform::getInverse() const { return InverseTrendTransform(p_evaluation_); } /* Method save() stores the object through the StorageManager */ void TrendTransform::save(Advocate & adv) const { VertexValueFunction::save(adv); } /* Method load() reloads the object from the StorageManager */ void TrendTransform::load(Advocate & adv) { VertexValueFunction::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariateFunction.cxx000066400000000000000000000054771307543307100230430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Univariate function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariateFunction); /* Default constructor */ UniVariateFunction::UniVariateFunction() : TypedInterfaceObject(new UniVariateFunctionImplementation()) { // Nothing to do } /* Constructor from implementation */ UniVariateFunction::UniVariateFunction(const UniVariateFunctionImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation pointer */ UniVariateFunction::UniVariateFunction(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ UniVariateFunction::UniVariateFunction(UniVariateFunctionImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* String converter */ String UniVariateFunction::__repr__() const { return getImplementation()->__repr__(); } String UniVariateFunction::__str__(const String & offset) const { return OSS(false) << getImplementation()->__str__(offset); } /* UniVariateFunction are evaluated as functors */ Scalar UniVariateFunction::operator() (const Scalar x) const { return getImplementation()->operator()(x); } /* UniVariateFunctionImplementation gradient */ Scalar UniVariateFunction::gradient(const Scalar x) const { return getImplementation()->gradient(x); } /* UniVariateFunctionImplementation hessian */ Scalar UniVariateFunction::hessian(const Scalar x) const { return getImplementation()->hessian(x); } /* Method to draw the graph of the polynomial between given bounds */ Graph UniVariateFunction::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->draw(xMin, xMax, pointNumber); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariateFunctionEvaluation.cxx000066400000000000000000000064601307543307100250640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariateFunctionEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariateFunctionEvaluation); static const Factory Factory_UniVariateFunctionEvaluation; /* Default constructor */ UniVariateFunctionEvaluation::UniVariateFunctionEvaluation() : EvaluationImplementation() , function_() { // Nothing to do } /* Constructor */ UniVariateFunctionEvaluation::UniVariateFunctionEvaluation(const UniVariateFunction & function) : EvaluationImplementation() , function_(function) { // Set the descriptions setInputDescription(Description::BuildDefault(getInputDimension(), "x")); setOutputDescription(Description::BuildDefault(getOutputDimension(), "y")); } /* Virtual constructor */ UniVariateFunctionEvaluation * UniVariateFunctionEvaluation::clone() const { return new UniVariateFunctionEvaluation(*this); } /* String converter */ String UniVariateFunctionEvaluation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " function=" << function_; } String UniVariateFunctionEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << __repr__(); return oss; } /* Operator (): Evaluate a product of 1D polynomials for one sample */ Point UniVariateFunctionEvaluation::operator() (const Point & inP) const { const UnsignedInteger inDimension(inP.getDimension()); if (inDimension != 1) throw InvalidArgumentException(HERE) << "Error: trying to evaluate an UniVariateFunction with an argument of invalid dimension"; const Point result(1, function_(inP[0])); if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger UniVariateFunctionEvaluation::getInputDimension() const { return 1; } /* Accessor for output point dimension */ UnsignedInteger UniVariateFunctionEvaluation::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void UniVariateFunctionEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("function_", function_); } /* Method load() reloads the object from the StorageManager */ void UniVariateFunctionEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("function_", function_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariateFunctionFactory.cxx000066400000000000000000000044171307543307100243640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This an abstract class for 1D function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariateFunctionFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariateFunctionFactory); static const Factory Factory_UniVariateFunctionFactory; /* Default constructor */ UniVariateFunctionFactory::UniVariateFunctionFactory() : PersistentObject() , functionsCache_(0) { // Nothing to do. The derived class will have to call initializeCache(). } /* Virtual constructor */ UniVariateFunctionFactory * UniVariateFunctionFactory::clone() const { return new UniVariateFunctionFactory(*this); } /* String converter */ String UniVariateFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName(); } /* The method to get the function of any order */ UniVariateFunction UniVariateFunctionFactory::build(const UnsignedInteger order) const { throw NotYetImplementedException(HERE) << "UniVariateFunctionFactory::build"; } /* Cache initialization */ void UniVariateFunctionFactory::initializeCache() { // Nothing to do } /* Method save() stores the object through the StorageManager */ void UniVariateFunctionFactory::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void UniVariateFunctionFactory::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariateFunctionFamily.cxx000066400000000000000000000036141307543307100241740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariateFunctionFamily.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/FourierSeriesFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariateFunctionFamily); /* Default constructor */ UniVariateFunctionFamily::UniVariateFunctionFamily() : TypedInterfaceObject(new UniVariateFunctionFactory) { // Nothing to do } /* Constructor from implementation */ UniVariateFunctionFamily::UniVariateFunctionFamily(const UniVariateFunctionFactory & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* The method to get the function of any order */ UniVariateFunction UniVariateFunctionFamily::build(const UnsignedInteger order) const { return getImplementation()->build(order); } /* String converter */ String UniVariateFunctionFamily::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariateFunctionImplementation.cxx000066400000000000000000000065761307543307100257520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Univariate function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariateFunctionImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Graph.hxx" #include "openturns/Curve.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariateFunctionImplementation); static const Factory Factory_UniVariateFunctionImplementation; /* Default constructor */ UniVariateFunctionImplementation::UniVariateFunctionImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ UniVariateFunctionImplementation * UniVariateFunctionImplementation::clone() const { return new UniVariateFunctionImplementation(*this); } /* String converter */ String UniVariateFunctionImplementation::__repr__() const { return OSS(true) << "class=" << getClassName(); } String UniVariateFunctionImplementation::__str__(const String & offset) const { return OSS(true) << offset << __repr__(); } /* UniVariateFunctionImplementation are evaluated as functors */ Scalar UniVariateFunctionImplementation::operator() (const Scalar x) const { throw NotYetImplementedException(HERE) << "UniVariateFunctionImplementation::operator() (const Scalar x)"; } /* UniVariateFunctionImplementation gradient */ Scalar UniVariateFunctionImplementation::gradient(const Scalar x) const { throw NotYetImplementedException(HERE) << "UniVariateFunctionImplementation::gradient(const Scalar x)"; } /* UniVariateFunctionImplementation hessian */ Scalar UniVariateFunctionImplementation::hessian(const Scalar x) const { throw NotYetImplementedException(HERE) << "UniVariateFunctionImplementation::hessian(const Scalar x)"; } /* Method to draw the graph of the function between given bounds */ Graph UniVariateFunctionImplementation::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Sample data(pointNumber, 2); for (UnsignedInteger i = 0; i < pointNumber; ++ i) { const Scalar x = xMin + (xMax - xMin) * i / (1.0 * pointNumber); data[i][0] = x; data[i][1] = operator()(x); } Curve curve(data, "red", "solid", 2, getName()); Graph graph(getName(), "x", "y", true, "topright"); graph.add(curve); return graph; } /* Method save() stores the object through the StorageManager */ void UniVariateFunctionImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void UniVariateFunctionImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariatePolynomial.cxx000066400000000000000000000130421307543307100233640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariatePolynomial.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariatePolynomial); /* Default constructor */ UniVariatePolynomial::UniVariatePolynomial() : TypedInterfaceObject(new UniVariatePolynomialImplementation()) { // Nothing to do } /* Constructor from coefficients */ UniVariatePolynomial::UniVariatePolynomial(const Coefficients & coefficients) : TypedInterfaceObject(new UniVariatePolynomialImplementation(coefficients)) { // Nothing to do } /* Constructor from implementation */ UniVariatePolynomial::UniVariatePolynomial(const UniVariatePolynomialImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation pointer */ UniVariatePolynomial::UniVariatePolynomial(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ UniVariatePolynomial::UniVariatePolynomial(UniVariatePolynomialImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* String converter */ String UniVariatePolynomial::__repr__() const { return OSS(true) << "class=" << getClassName() << " coefficients=" << getImplementation()->getCoefficients().__repr__(); } String UniVariatePolynomial::__str__(const String & offset) const { return OSS(false) << getImplementation()->__str__("X", offset); } String UniVariatePolynomial::__str__(const String & variableName, const String & offset) const { return OSS() << getImplementation()->__str__(variableName, offset); } /* UniVariatePolynomial are evaluated as functors */ Scalar UniVariatePolynomial::operator() (const Scalar x) const { return getImplementation()->operator()(x); } Complex UniVariatePolynomial::operator() (const Complex z) const { return getImplementation()->operator()(z); } /* UniVariatePolynomialImplementation derivative */ Scalar UniVariatePolynomial::gradient(const Scalar x) const { return getImplementation()->gradient(x); } Scalar UniVariatePolynomial::hessian(const Scalar x) const { return getImplementation()->hessian(x); } /* Compute the derivative of the polynomial */ UniVariatePolynomial UniVariatePolynomial::derivate() const { return getImplementation()->derivate(); } /* Multiply the polynomial P by a Scalar */ UniVariatePolynomial UniVariatePolynomial::operator* (const Scalar scal) const { return getImplementation()->operator*(scal); } // end method operator* /* Multiply the polynomial P by an UniVariatePolynomial */ UniVariatePolynomial UniVariatePolynomial::operator* (const UniVariatePolynomial & uniVariatePolynomial) const { return getImplementation()->operator*(*(uniVariatePolynomial.getImplementation())); } // end method operator* /* Multiply the polynomial by (x to the power deg) */ UniVariatePolynomial UniVariatePolynomial::incrementDegree(const UnsignedInteger deg) const { return getImplementation()->incrementDegree(deg); }// end incrementDegree /* Realize the summation of two polynomials of any degree ex:P=P1+P2 */ UniVariatePolynomial UniVariatePolynomial::operator + (const UniVariatePolynomial & uniVariatePolynomial) const { return getImplementation()->operator+(*(uniVariatePolynomial.getImplementation())); } // end summation of P1 & P2 /* Realize the substraction of two polynomials of any degree ex:P=P1-P2 */ UniVariatePolynomial UniVariatePolynomial::operator - (const UniVariatePolynomial & uniVariatePolynomial) const { return getImplementation()->operator-(*(uniVariatePolynomial.getImplementation())); } // end substraction of P1 & P2 */ /* Coefficients accessor */ void UniVariatePolynomial::setCoefficients(const Coefficients & coefficients) { copyOnWrite(); getImplementation()->setCoefficients(coefficients); } UniVariatePolynomial::Coefficients UniVariatePolynomial::getCoefficients() const { return getImplementation()->getCoefficients(); } /* Method to draw the graph of the polynomial between given bounds */ Graph UniVariatePolynomial::draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->draw(xMin, xMax, pointNumber); } /* Get the degree of the polynomial */ UnsignedInteger UniVariatePolynomial::getDegree() const { return getImplementation()->getDegree(); } /* Root of the polynomial */ UniVariatePolynomial::ComplexCollection UniVariatePolynomial::getRoots() const { return getImplementation()->getRoots(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/UniVariatePolynomialImplementation.cxx000066400000000000000000000304541307543307100263000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniVariatePolynomialImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Sample.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Exception.hxx" #include "openturns/FFT.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniVariatePolynomialImplementation); static const Factory Factory_UniVariatePolynomialImplementation; /* Default constructor */ UniVariatePolynomialImplementation::UniVariatePolynomialImplementation() : UniVariateFunctionImplementation() , coefficients_(1, 0.0) { // Nothing to do } /* Constructor from coefficients */ UniVariatePolynomialImplementation::UniVariatePolynomialImplementation(const Coefficients & coefficients) : UniVariateFunctionImplementation() , coefficients_(coefficients) { compactCoefficients(); } /* Virtual constructor */ UniVariatePolynomialImplementation * UniVariatePolynomialImplementation::clone() const { return new UniVariatePolynomialImplementation(*this); } /* String converter */ String UniVariatePolynomialImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " coefficients=" << coefficients_.__repr__(); } String UniVariatePolynomialImplementation::__str__(const String & offset) const { return __str__("X", offset); } String UniVariatePolynomialImplementation::__str__(const String & variableName, const String & offset) const { OSS oss(false); const UnsignedInteger size = coefficients_.getSize(); // Specific case for empty polynomial if (size == 0) return oss; Bool firstTerm = true; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar aI = coefficients_[i]; // Only deal with non-zero coefficients if (String(OSS(false) << std::abs(aI)) != "0") { // Special case for the first term: no + sign, no leading blank and no trailing blank for the - sign if (firstTerm) { firstTerm = false; // Sign if (aI < 0) oss << "-"; // If the leading term is a constant, print it even if its absolute value is 1 if (i == 0) oss << std::abs(aI); else { // Print the coefficient only if its absolute value is not 1 if (String(OSS(false) << std::abs(aI)) != "1") oss << std::abs(aI) << " * "; oss << variableName; // Print the exponent only if it is > 1 if (i > 1) oss << "^" << i; } } // Leading term // For the other coefficients else { // Separate the sign from the absolute value by a binay +/- operator // Here, i > 0 if (aI > 0.0) oss << " + "; else oss << " - "; if (String(OSS(false) << std::abs(aI)) != "1") oss << std::abs(aI) << " * "; oss << variableName; // Print the exponent only if it is > 1 if (i > 1) oss << "^" << i; } // Non-leading term } // Non-null coefficient } // Loop over the coefficients // Here, if firstTerm is true it is because all the coefficients are zero if (firstTerm) oss << "0"; return oss; } /* UniVariatePolynomialImplementation are evaluated as functors */ Scalar UniVariatePolynomialImplementation::operator() (const Scalar x) const { const UnsignedInteger size = coefficients_.getSize(); Scalar y(coefficients_[size - 1]); /* y represents the value of P(x)*/ // Evaluation using Horner scheme for (UnsignedInteger i = size - 1; i > 0; --i) y = y * x + coefficients_[i - 1]; return y; } Complex UniVariatePolynomialImplementation::operator() (const Complex z) const { const UnsignedInteger size = coefficients_.getSize(); Complex y(coefficients_[size - 1]); /* y represents the value of P(x)*/ // Evaluation using Horner scheme for (UnsignedInteger i = size - 1; i > 0; --i) y = y * z + coefficients_[i - 1]; return y; } /* UniVariatePolynomialImplementation derivative */ Scalar UniVariatePolynomialImplementation::gradient(const Scalar x) const { const UnsignedInteger size = coefficients_.getSize(); if (size == 1) return 0.0; Scalar y((size - 1 ) * coefficients_[size - 1]); /* y represents the value of P'(x)*/ // Evaluation using Horner scheme for (UnsignedInteger i = size - 1; i > 1; --i) y = y * x + (i - 1) * coefficients_[i - 1]; return y; } Scalar UniVariatePolynomialImplementation::hessian(const Scalar x) const { return derivate().gradient(x); } /* Compute the derivative of the polynomial */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::derivate() const { const UnsignedInteger size = coefficients_.getSize(); if (size <= 1) return UniVariatePolynomialImplementation(); Coefficients derivativeCoefficients(size - 1); for (UnsignedInteger i = 0; i < size - 1; ++i) derivativeCoefficients[i] = coefficients_[i + 1] * (i + 1); return derivativeCoefficients; } /* Multiply the polynomial P by a Scalar */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::operator * (const Scalar scal) const { if (scal == 0.0) return UniVariatePolynomialImplementation(); return UniVariatePolynomialImplementation(coefficients_ * scal); } // end method operator* /* Multiply the polynomial P by an UniVariatePolynomialImplementation */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::operator * (const UniVariatePolynomialImplementation & uniVariatePolynomial) const { // Special cases for constant polynomials const UnsignedInteger leftDegree = getDegree(); if (leftDegree == 0) return uniVariatePolynomial.operator * (coefficients_[0]); Coefficients factorCoefficients(uniVariatePolynomial.getCoefficients()); const UnsignedInteger rightDegree = uniVariatePolynomial.getDegree(); if (rightDegree == 0) return operator*(factorCoefficients[0]); // General case const UnsignedInteger resultDimension = leftDegree + rightDegree + 1; Coefficients resultCoefficients(resultDimension); // For small total degree, use the elementary algorithm // We use a static local variable to avoid a systematic call to ResourceMap const UnsignedInteger smallDegree = ResourceMap::GetAsUnsignedInteger("UniVariatePolynomial-SmallDegree"); if (resultDimension < smallDegree) { for (UnsignedInteger i = 0; i < resultDimension; ++i) { Scalar coefficientValue = 0.0; const UnsignedInteger jMin = i >= rightDegree ? (i - rightDegree) : 0; const UnsignedInteger jMax = i >= leftDegree ? leftDegree : i; for (UnsignedInteger j = jMin; j <= jMax; j++) coefficientValue += coefficients_[j] * factorCoefficients[i - j]; resultCoefficients[i] = coefficientValue; } } // small degree else { const FFT fft; const UnsignedInteger powerOfTwo = SpecFunc::NextPowerOfTwo(resultDimension); ComplexCollection leftCoefficients(powerOfTwo); ComplexCollection rightCoefficients(powerOfTwo); for (UnsignedInteger i = 0; i <= leftDegree; ++i) leftCoefficients[i] = coefficients_[i]; for (UnsignedInteger i = 0; i <= rightDegree; ++i) rightCoefficients[i] = factorCoefficients[i]; leftCoefficients = fft.transform(leftCoefficients); rightCoefficients = fft.transform(rightCoefficients); for (UnsignedInteger i = 0; i < powerOfTwo; ++i) leftCoefficients[i] *= rightCoefficients[i]; rightCoefficients = fft.inverseTransform(leftCoefficients); for (UnsignedInteger i = 0; i < resultDimension; ++i) resultCoefficients[i] = rightCoefficients[i].real(); } return UniVariatePolynomialImplementation(resultCoefficients); } // end method operator* /* Multiply the polynomial by (x to the power deg) */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::incrementDegree(const UnsignedInteger deg) const { // Special case for the null coefficient if ((getDegree() == 0) && (coefficients_[0] == 0.0)) return *this; const UnsignedInteger size = coefficients_.getSize(); // The coefficients are initialized to 0.0 Coefficients incrementedCoefficients(size + deg); // Just shift the coefficients by deg places for (UnsignedInteger j = 0; j < size; ++j) incrementedCoefficients[j + deg] = coefficients_[j]; return UniVariatePolynomialImplementation(incrementedCoefficients); }// end incrementDegree /* Realize the summation of two polynomials of any degree ex:P=P1+P2 */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::operator + (const UniVariatePolynomialImplementation & uniVariatePolynomial) const { Coefficients leftCoefficients(coefficients_); Coefficients rightCoefficients(uniVariatePolynomial.getCoefficients()); const UnsignedInteger lhsSize = leftCoefficients.getSize(); const UnsignedInteger rhsSize = rightCoefficients.getSize(); // If the left hand side has a degree greater than the right hand side, add enough zeros to the coefficients in order to equal the degrees if (lhsSize > rhsSize) rightCoefficients.add(Point(lhsSize - rhsSize, 0.0)); // Else the right hand side has a degree greater than the left hand side, add enough zeros to the coefficients in order to equal the degrees else leftCoefficients.add(Point(rhsSize - lhsSize, 0.0)); // Then, we just have to sum-up the degrees UniVariatePolynomialImplementation sum(leftCoefficients + rightCoefficients); sum.compactCoefficients(); return sum; } // end summation of P1 & P2 /* Realize the substraction of two polynomials of any degree ex:P=P1-P2 */ UniVariatePolynomialImplementation UniVariatePolynomialImplementation::operator - (const UniVariatePolynomialImplementation & uniVariatePolynomial) const { return operator + (uniVariatePolynomial * (-1.0)); } // end substraction of P1 & P2 */ /* Coefficients accessor */ void UniVariatePolynomialImplementation::setCoefficients(const Coefficients & coefficients) { coefficients_ = coefficients; compactCoefficients(); } UniVariatePolynomialImplementation::Coefficients UniVariatePolynomialImplementation::getCoefficients() const { return coefficients_; } /* Get the degree of the polynomial */ UnsignedInteger UniVariatePolynomialImplementation::getDegree() const { return coefficients_.getDimension() - 1; } /* Root of the polynomial of degree n as the eigenvalues of the associated matrix */ UniVariatePolynomialImplementation::ComplexCollection UniVariatePolynomialImplementation::getRoots() const { const UnsignedInteger degree = getDegree(); if (degree == 0) throw NotDefinedException(HERE) << "Error: cannot compute the roots of a constant polynomial."; const Scalar scale = -1.0 / coefficients_[degree]; SquareMatrix m(degree); m(0, degree - 1) = coefficients_[0] * scale; for (UnsignedInteger i = 1; i < degree; ++i) { m(i, i - 1) = 1.0; m(i, degree - 1) = coefficients_[i] * scale; } return m.computeEigenValues(); } /* remove null leading coefficients. Special case for the null coefficient, which is constant so we don't remove this particular zero. */ void UniVariatePolynomialImplementation::compactCoefficients() { UnsignedInteger degree = coefficients_.getDimension() - 1; while ((degree > 0) && (coefficients_[degree] == 0.0)) { coefficients_.erase(degree); --degree; } } /* Method save() stores the object through the StorageManager */ void UniVariatePolynomialImplementation::save(Advocate & adv) const { UniVariateFunctionImplementation::save(adv); adv.saveAttribute( "coefficients_", coefficients_ ); } /* Method load() reloads the object from the StorageManager */ void UniVariatePolynomialImplementation::load(Advocate & adv) { UniVariateFunctionImplementation::load(adv); adv.loadAttribute( "coefficients_", coefficients_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/ValueFunction.cxx000066400000000000000000000115301307543307100220330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all spatial functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ValueFunction.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/NoEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ValueFunction); static const Factory Factory_ValueFunction; /* Default constructor */ ValueFunction::ValueFunction(const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(new NoEvaluation) { // Nothing to do } /* Parameter constructor */ ValueFunction::ValueFunction(const Function & function, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(function.getEvaluation()) { // Set the descriptions setInputDescription(p_evaluation_->getInputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ ValueFunction::ValueFunction(const EvaluationPointer & p_evaluation, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(p_evaluation) { // Set the descriptions setInputDescription(p_evaluation_->getInputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ ValueFunction::ValueFunction(const EvaluationImplementation & evaluation, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(evaluation.clone()) { // Set the descriptions setInputDescription(p_evaluation_->getInputDescription()); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Virtual constructor */ ValueFunction * ValueFunction::clone() const { return new ValueFunction(*this); } /* Comparison operator */ Bool ValueFunction::operator ==(const ValueFunction & other) const { return true; } /* String converter */ String ValueFunction::__repr__() const { OSS oss(true); oss << "class=" << ValueFunction::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String ValueFunction::__str__(const String & offset) const { return OSS(false) << p_evaluation_->__str__(offset); } /* Operator () */ Field ValueFunction::operator() (const Field & inFld) const { if (inFld.getSpatialDimension() != getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: expected a field with mesh dimension=" << getSpatialDimension() << ", got mesh dimension=" << inFld.getSpatialDimension(); ++callsNumber_; return Field(inFld.getMesh(), (*p_evaluation_)(inFld.getValues())); } /* Get the i-th marginal function */ ValueFunction::Implementation ValueFunction::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return new ValueFunction(p_evaluation_->getMarginal(i)); } /* Get the function corresponding to indices components */ ValueFunction::Implementation ValueFunction::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; return new ValueFunction(p_evaluation_->getMarginal(indices)); } /* Method save() stores the object through the StorageManager */ void ValueFunction::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", *p_evaluation_ ); } /* Evaluation accessor */ ValueFunction::EvaluationPointer ValueFunction::getEvaluation() const { return p_evaluation_; } /* Method load() reloads the object from the StorageManager */ void ValueFunction::load(Advocate & adv) { TypedInterfaceObject evaluationValue; PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluationValue ); p_evaluation_ = evaluationValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/VertexValueFunction.cxx000066400000000000000000000150471307543307100232400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all temporal functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/VertexValueFunction.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/NoEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(VertexValueFunction); static const Factory Factory_VertexValueFunction; /* Default constructor */ VertexValueFunction::VertexValueFunction(const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(new NoEvaluation) { // Nothing to do } /* Parameter constructor */ VertexValueFunction::VertexValueFunction(const Function & function, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(function.getEvaluation()) { // Check that the given function has an input dimension large enough to be compatible with the mesh dimension if (p_evaluation_->getInputDimension() < meshDimension) throw InvalidArgumentException(HERE) << "Error: the given function should have an input dimension at least equal to the mesh dimension=" << meshDimension << ". Here input dimension=" << p_evaluation_->getInputDimension(); // Set the descriptions Description inputDescription(p_evaluation_->getInputDescription()); inputDescription.erase(inputDescription.begin(), inputDescription.begin() + meshDimension); setInputDescription(inputDescription); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ VertexValueFunction::VertexValueFunction(const EvaluationPointer & p_evaluation, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(p_evaluation) { // Check that the given function has an input dimension large enough to be compatible with the mesh dimension if (p_evaluation_->getInputDimension() < meshDimension) throw InvalidArgumentException(HERE) << "Error: the given function should have an input dimension at least equal to the mesh dimension=" << meshDimension << ". Here input dimension=" << p_evaluation_->getInputDimension(); // Set the descriptions Description inputDescription(p_evaluation_->getInputDescription()); inputDescription.erase(inputDescription.begin(), inputDescription.begin() + meshDimension); setInputDescription(inputDescription); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Parameter constructor */ VertexValueFunction::VertexValueFunction(const EvaluationImplementation & evaluation, const UnsignedInteger meshDimension) : FieldFunctionImplementation(meshDimension) , p_evaluation_(evaluation.clone()) { // Check that the given function has an input dimension large enough to be compatible with the mesh dimension if (p_evaluation_->getInputDimension() < meshDimension) throw InvalidArgumentException(HERE) << "Error: the given function should have an input dimension at least equal to the mesh dimension=" << meshDimension << ". Here input dimension=" << p_evaluation_->getInputDimension(); // Set the descriptions Description inputDescription(p_evaluation_->getInputDescription()); inputDescription.erase(inputDescription.begin(), inputDescription.begin() + meshDimension); setInputDescription(inputDescription); setOutputDescription(p_evaluation_->getOutputDescription()); } /* Virtual constructor */ VertexValueFunction * VertexValueFunction::clone() const { return new VertexValueFunction(*this); } /* Comparison operator */ Bool VertexValueFunction::operator ==(const VertexValueFunction & other) const { return true; } /* String converter */ String VertexValueFunction::__repr__() const { OSS oss(true); oss << "class=" << VertexValueFunction::GetClassName() << " evaluation=" << p_evaluation_->__repr__(); return oss; } /* String converter */ String VertexValueFunction::__str__(const String & offset) const { return OSS(false) << p_evaluation_->__str__(offset); } /* Operator () */ Field VertexValueFunction::operator() (const Field & inFld) const { if (inFld.getSpatialDimension() != getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: expected a field with mesh dimension=" << getSpatialDimension() << ", got mesh dimension=" << inFld.getSpatialDimension(); ++callsNumber_; return Field(inFld.getMesh(), (*p_evaluation_)(inFld.getImplementation()->asSample())); } /* Get the i-th marginal function */ VertexValueFunction::Implementation VertexValueFunction::getMarginal(const UnsignedInteger i) const { if (i >= getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the index of a marginal function must be in the range [0, outputDimension-1]"; return new VertexValueFunction(p_evaluation_->getMarginal(i)); } /* Get the function corresponding to indices components */ VertexValueFunction::Implementation VertexValueFunction::getMarginal(const Indices & indices) const { if (!indices.check(getOutputDimension())) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal function must be in the range [0, outputDimension-1] and must be different"; return new VertexValueFunction(p_evaluation_->getMarginal(indices)); } /* Method save() stores the object through the StorageManager */ void VertexValueFunction::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "evaluation_", *p_evaluation_ ); } /* Evaluation accessor */ VertexValueFunction::EvaluationPointer VertexValueFunction::getEvaluation() const { return p_evaluation_; } /* Method load() reloads the object from the StorageManager */ void VertexValueFunction::load(Advocate & adv) { TypedInterfaceObject evaluationValue; PersistentObject::load(adv); adv.loadAttribute( "evaluation_", evaluationValue ); p_evaluation_ = evaluationValue.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Func/openturns/000077500000000000000000000000001307543307100205625ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Func/openturns/AggregatedEvaluation.hxx000066400000000000000000000071151307543307100254010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of an aggregation of functions from R^n to R^p_1,...,R^n to R^p_k * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AGGREGATEDEVALUATION_HXX #define OPENTURNS_AGGREGATEDEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AggregatedEvaluation * * The evaluation part of an aggregation of functions from R^n to R^p_1,...,R^n to R^p_k */ class OT_API AggregatedEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; // friend class Factory; /** Default constructor */ AggregatedEvaluation(); /** Parameter constructor */ AggregatedEvaluation(const FunctionCollection & functionsCollection); /** Virtual constructor */ virtual AggregatedEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Evaluation operator */ Point operator () (const Point & inP) const; Sample operator () (const Sample & inS) const; /** Functions accessor */ FunctionCollection getFunctionsCollection() const; void setFunctionsCollection(const FunctionCollection & functionsCollection); /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Input dimension accessor */ UnsignedInteger getInputDimension() const; /** Output dimension accessor */ UnsignedInteger getOutputDimension() const; /** Gradient according to the marginal parameters */ Matrix parameterGradient(const Point & inP) const; /** Parameters value accessor */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: // Make the gradient and the hessian friend classes of the evaluation in order to share the functions and the coefficients friend class AggregatedGradient; friend class AggregatedHessian; // The functions to be aggregated FunctionPersistentCollection functionsCollection_; // The output dimension UnsignedInteger outputDimension_; } ; /* class AggregatedEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AGGREGATEDEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/AggregatedFunction.hxx000066400000000000000000000032341307543307100250550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements aggregated functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AGGREGATEDFUNCTION_HXX #define OPENTURNS_AGGREGATEDFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AggregatedFunction * */ class OT_API AggregatedFunction : public Function { CLASSNAME; public: /* Default constructor */ AggregatedFunction(); /** Parameter constructor */ AggregatedFunction(const FunctionCollection & functionCollection); /** Comparison operator */ Bool operator ==(const AggregatedFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class QuadraticFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AGGREGATEDFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/AggregatedGradient.hxx000066400000000000000000000043651307543307100250330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AGGREGATEDGRADIENT_HXX #define OPENTURNS_AGGREGATEDGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/AggregatedEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AggregatedGradient * * The gradient part of linear combination of polynomials */ class OT_API AggregatedGradient : public GradientImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ AggregatedGradient(); /** Parameters constructor */ AggregatedGradient(const AggregatedEvaluation & evaluation); /** Virtual constructor */ virtual AggregatedGradient * clone() const; /** Gradient method */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The associated evaluation */ AggregatedEvaluation evaluation_; } ; /* class AggregatedGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AGGREGATEDGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/AggregatedHessian.hxx000066400000000000000000000043561307543307100246700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AGGREGATEDHESSIAN_HXX #define OPENTURNS_AGGREGATEDHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/AggregatedEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AggregatedHessian * * The hessian part of linear combination of polynomials */ class OT_API AggregatedHessian : public HessianImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ AggregatedHessian(); /** Parameters constructor */ AggregatedHessian(const AggregatedEvaluation & evaluation); /** Virtual constructor */ virtual AggregatedHessian * clone() const; /** Hessian method */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The associated evaluation */ AggregatedEvaluation evaluation_; } ; /* class AggregatedHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AGGREGATEDHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/Basis.hxx000066400000000000000000000047171307543307100223650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A collection of numerical math function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASIS_HXX #define OPENTURNS_BASIS_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/BasisImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Basis * * A collection of numerical math function. */ class OT_API Basis : public TypedInterfaceObject { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; /** Default constructor */ Basis(); /** Constructor from a collection */ Basis(const FunctionCollection & coll); explicit Basis(const UnsignedInteger size); #ifndef SWIG operator FunctionCollection() const; #endif /** Constructor from implementation */ Basis(const BasisImplementation & implementation); // Basis(BasisImplementation * p_implementation); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Build the Function of the given index */ Function operator[](const UnsignedInteger index) const; Function & operator[](const UnsignedInteger index); /** Accessor to the sub-basis */ FunctionCollection getSubBasis(const Indices & indices) const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; virtual UnsignedInteger getSize() const; /** add an element */ void add(const Function & elt); Bool isFunctional() const; Bool isOrthogonal() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; }; /* class Basis */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASIS_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BasisFactory.hxx000066400000000000000000000026121307543307100237050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all BasisFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISFACTORY_HXX #define OPENTURNS_BASISFACTORY_HXX #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API BasisFactory : public PersistentObject { CLASSNAME; public: /** Default constructor */ BasisFactory(); /* String converter */ OT::String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual BasisFactory * clone() const; /** @copydoc BasisFactory::build() const */ virtual Basis build() const; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Func/openturns/BasisImplementation.hxx000066400000000000000000000047361307543307100252740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISIMPLEMENTATION_HXX #define OPENTURNS_BASISIMPLEMENTATION_HXX #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BasisImplementation * */ class OT_API BasisImplementation : public PersistentObject { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; /** Default constructor */ BasisImplementation(); /** Build the Function of the given index */ virtual Function build(const UnsignedInteger index) const; /** Build the Function of the given index */ virtual Function operator[](const UnsignedInteger index) const; virtual Function & operator[](const UnsignedInteger index); /** Accessor to the sub-basis */ virtual FunctionCollection getSubBasis(const Indices & indices) const; /** Virtual constructor */ virtual BasisImplementation * clone() const; /** String converter */ virtual String __repr__() const; // virtual String __str__(const String & offset = "") const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; virtual UnsignedInteger getSize() const; /** Tells whether the basis is orthogonal */ virtual Bool isOrthogonal() const; virtual Bool isFunctional() const; virtual void add(const Function & elt); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: } ; /* class BasisImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASISIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BasisSequence.hxx000066400000000000000000000041071307543307100240470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A sequence of numerical math function collection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISSEQUENCE_HXX #define OPENTURNS_BASISSEQUENCE_HXX #include "openturns/TypedCollectionInterfaceObject.hxx" #include "openturns/BasisSequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BasisSequence * * A sequence of numerical math function collection. */ class OT_API BasisSequence : public TypedCollectionInterfaceObject { CLASSNAME; public: /** Default constructor */ BasisSequence(); /** Default constructor */ BasisSequence(const Basis & psi); /** Contructor from implementation */ BasisSequence(const BasisSequenceImplementation & implementation); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Returns the master basis */ Basis getMasterBasis() const; /** Sub-basis accessor */ Basis getBasis(const UnsignedInteger index) const; /** Indices accessor */ Indices getIndices(const UnsignedInteger index) const; /** Converter to Basis collection */ operator PersistentCollection< Indices > () const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class BasisSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASISSEQUENCE_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BasisSequenceFactory.hxx000066400000000000000000000051461307543307100254030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building BasisSequence objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISSEQUENCEFACTORY_HXX #define OPENTURNS_BASISSEQUENCEFACTORY_HXX #include #include "openturns/TypedInterfaceObject.hxx" #include "openturns/BasisSequence.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/LeastSquaresMethod.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BasisSequenceFactory * * A factory for building BasisSequence objects */ class OT_API BasisSequenceFactory : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ BasisSequenceFactory(); /** Constructor from implementation */ BasisSequenceFactory(const BasisSequenceFactoryImplementation & implementation); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Method to create new BasisSequence objects */ BasisSequence build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices); #ifndef SWIG BasisSequence build(const Sample & y, const Indices & indices, const DesignProxy & proxy); BasisSequence build(LeastSquaresMethod & method, const Sample & y); void initialize(); void updateBasis(LeastSquaresMethod & method, const Sample & y); #endif /** Stopping criterion on the L1-norm of the coefficients accessor */ void setMaximumRelativeConvergence(const Scalar coefficientsPaths); Scalar getMaximumRelativeConvergence() const; }; /* class BasisSequenceFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASISSEQUENCEFACTORY_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BasisSequenceFactoryImplementation.hxx000066400000000000000000000073321307543307100303100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A factory for building BasisSequence objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISSEQUENCEFACTORYIMPLEMENTATION_HXX #define OPENTURNS_BASISSEQUENCEFACTORYIMPLEMENTATION_HXX #include #include "openturns/PersistentObject.hxx" #include "openturns/BasisSequence.hxx" #include "openturns/Sample.hxx" #include "openturns/DesignProxy.hxx" #include "openturns/LeastSquaresMethod.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BasisSequenceFactoryImplementation * * A factory for building BasisSequence objects */ class OT_API BasisSequenceFactoryImplementation : public PersistentObject { friend class LeastSquaresMetaModelSelection; friend class SparseMethod; CLASSNAME; public: /** Default constructor */ explicit BasisSequenceFactoryImplementation(const Bool verbose = false); /** Virtual constructor */ virtual BasisSequenceFactoryImplementation * clone() const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Method to create new BasisSequence objects */ virtual BasisSequence build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices); #ifndef SWIG virtual BasisSequence build(const Sample & y, const Indices & indices, const DesignProxy & proxy); virtual BasisSequence build(LeastSquaresMethod & method, const Sample & y); virtual void initialize(); virtual void updateBasis(LeastSquaresMethod & method, const Sample & y); #endif /** Stopping criterion on the L1-norm of the coefficients accessor */ void setMaximumRelativeConvergence(const Scalar coefficientsPaths); Scalar getMaximumRelativeConvergence() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Verbosity flag */ Bool verbose_; /** Stopping criterion on the L1-norm of the coefficients */ Scalar maximumRelativeConvergence_; /** The collection of indices of the vectors in the partial basis with respect to the orthogonal basis */ Indices currentIndices_; /** The ranks of the added vectors in the current partial basis */ Indices addedPsi_k_ranks_; /** The ranks of the vectors common between the previous partial basis and the current partial basis, as found in the previous partial basis */ Indices conservedPsi_k_ranks_; /** The ranks of the removed vectors in the previous partial basis */ Indices removedPsi_k_ranks_; }; /* class BasisSequenceFactoryImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASISSEQUENCEFACTORYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BasisSequenceImplementation.hxx000066400000000000000000000045141307543307100267570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A sequence of numerical math function collection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BASISSEQUENCEIMPLEMENTATION_HXX #define OPENTURNS_BASISSEQUENCEIMPLEMENTATION_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/Indices.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BasisSequenceImplementation * * A sequence of numerical math function collection. */ class OT_API BasisSequenceImplementation : public PersistentCollection { CLASSNAME; public: /** Default constructor */ BasisSequenceImplementation(); /** Default constructor */ BasisSequenceImplementation(const Basis & masterBasis); /** Virtual constructor */ virtual BasisSequenceImplementation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Returns the master basis */ Basis getMasterBasis() const; /** Basis accessor */ Basis getBasis(const UnsignedInteger index) const; /** Indices accessor */ Indices getIndices(const UnsignedInteger index) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The internal basis of the sequence */ Basis masterBasis_; }; /* class BasisSequenceImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BASISSEQUENCEIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BoxCoxEvaluation.hxx000066400000000000000000000045761307543307100245610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_BOXCOXEVALUATION_HXX #define OPENTURNS_BOXCOXEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxEvaluation * * This class offers an easy evaluation of the Box Cox function defined by : * h(x) = \frac{(x-s)^\lambda - 1}{\lambda} for \lambda non zero, log(x-s) otherwise * Care that x should be > s */ class OT_API BoxCoxEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ BoxCoxEvaluation(); /** Parameter constructor */ explicit BoxCoxEvaluation(const Point & lamda); BoxCoxEvaluation(const Point & lamda, const Point & shift); /** Virtual constructor */ virtual BoxCoxEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const BoxCoxEvaluation & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Lambda vector of the box cox transform */ Point lambda_; /** Shift vector of the box cox transform */ Point shift_; }; /* class BoxCoxEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOXCOXEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BoxCoxGradient.hxx000066400000000000000000000043161307543307100241770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_BOXCOXGRADIENT_HXX #define OPENTURNS_BOXCOXGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/BoxCoxEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxGradient * * This class offers an easy gradient of the Box Cox function defined by : * \Delta(h)(x) = (x-s)^{\lambda - 1} for \lambda non zero, 1/(x-s) otherwise * Care that x should be > s */ class OT_API BoxCoxGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ BoxCoxGradient(); /** Parameter constructor */ explicit BoxCoxGradient(const BoxCoxEvaluation & evaluation); /** Virtual constructor */ virtual BoxCoxGradient * clone() const; /** Comparison operator */ Bool operator ==(const BoxCoxGradient & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Gradient evaluation method */ using GradientImplementation::gradient; Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Accessor for the evaluation */ BoxCoxEvaluation getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The underlying evaluation */ BoxCoxEvaluation evaluation_; }; /* class BoxCoxGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOXCOXGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BoxCoxHessian.hxx000066400000000000000000000043261307543307100240350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_BOXCOXHESSIAN_HXX #define OPENTURNS_BOXCOXHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/BoxCoxEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxHessian * * This class offers an easy hessian of the Box Cox function defined by : * \Delta(h)(x) = (\lambda - 1)(x-s)^{\lambda - 2} for \lambda non zero, -1/(x-s)^2 otherwise * Care that x should be > s */ class OT_API BoxCoxHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ BoxCoxHessian(); /** Parameter constructor */ explicit BoxCoxHessian(const BoxCoxEvaluation & evaluation); /** Virtual constructor */ virtual BoxCoxHessian * clone() const; /** Comparison operator */ Bool operator ==(const BoxCoxHessian & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Hessian evaluation method */ using HessianImplementation::hessian; SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Accessor for the evaluation */ BoxCoxEvaluation getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The underlying evaluation */ BoxCoxEvaluation evaluation_; }; /* class BoxCoxHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOXCOXHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/BoxCoxTransform.hxx000066400000000000000000000040501307543307100244100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BOXCOXTRANSFORM_HXX #define OPENTURNS_BOXCOXTRANSFORM_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxTransform * * The class that simulates the classical Box Cox method which acts on the spatial part of a time series. */ class InverseBoxCoxTransform; class OT_API BoxCoxTransform : public Function { CLASSNAME; public: /** Default constructor */ BoxCoxTransform(); /** Standard parameter constructor */ explicit BoxCoxTransform(const Point & lambda); BoxCoxTransform(const Point & lambda, const Point & shift); /** 1D Scalar parameter constructor */ explicit BoxCoxTransform(const Scalar & lambda); BoxCoxTransform(const Scalar & lambda, const Scalar & shift); /** Virtual constructor */ BoxCoxTransform * clone() const; /** Lambda accessor */ Point getLambda () const; /** Shift accessor */ Point getShift () const; /** Inverse accessor */ InverseBoxCoxTransform getInverse() const; private: }; /* class BoxCoxTransform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOXCOXTRANSFORM_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ComposedEvaluation.hxx000066400000000000000000000060471307543307100251230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_COMPOSEDNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_COMPOSEDNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedEvaluation * * The class that implement the composition of two numerical math functions implementations. */ class OT_API ComposedEvaluation : public EvaluationImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer EvaluationPointer; /** Default constructor */ ComposedEvaluation(const EvaluationPointer & p_leftFunction, const EvaluationPointer & p_rightFunction); /** Virtual constructor */ virtual ComposedEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const ComposedEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Parameters description accessor */ virtual Description getParameterDescription() const; virtual void setParameterDescription(const Description & description); /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Composed implementation accessor */ EvaluationPointer getLeftEvaluationImplementation() const; EvaluationPointer getRightEvaluationImplementation() const; protected: ComposedEvaluation() {}; friend class Factory; private: /** The function f in h = f o g */ EvaluationPointer p_leftFunction_; /** The function g in h = f o g */ EvaluationPointer p_rightFunction_; }; /* class ComposedEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ComposedFunction.hxx000066400000000000000000000045441307543307100246010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements composed numerical math functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSEDFUNCTION_HXX #define OPENTURNS_COMPOSEDFUNCTION_HXX #include "openturns/FunctionImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedFunction */ class OT_API ComposedFunction : public FunctionImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ /** Default constructor */ ComposedFunction(); /** Composition constructor */ ComposedFunction(const Implementation & p_left, const Implementation & p_right); /** Composition constructor */ ComposedFunction(const Function & left, const Function & right); /** Virtual constructor */ virtual ComposedFunction * clone() const; /** Comparison operator */ Bool operator ==(const ComposedFunction & other) const; /** String converter */ virtual String __repr__() const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: //ComposedFunction() {}; //friend class Factory; private: /** The f function in fog */ Implementation p_leftFunction_; /** The g function in fog */ Implementation p_rightFunction_; }; /* class ComposedFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ComposedGradient.hxx000066400000000000000000000055521307543307100245510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSEDGRADIENT_HXX #define OPENTURNS_COMPOSEDGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedGradient * * The class that implement the composition of two numerical math functions, * its gradient and its hessian. This class has no implementation class */ class OT_API ComposedGradient : public GradientImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer EvaluationPointer; typedef Pointer GradientPointer; /** Default constructor */ ComposedGradient(const GradientPointer & p_leftGradient, const EvaluationPointer & p_rightFunction, const GradientPointer & p_rightGradient); /** Virtual constructor */ virtual ComposedGradient * clone() const; /** Comparison operator */ Bool operator ==(const ComposedGradient & other) const; /** String converter */ virtual String __repr__() const; /** Method gradient() returns the Jacobian transposed matrix of the function at point */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ComposedGradient() {}; friend class Factory; private: /** The gradient of f in h = f o g */ GradientPointer p_leftGradient_; /** The function g in h = f o g */ EvaluationPointer p_rightFunction_; /** The gradient of g in h = f o g */ GradientPointer p_rightGradient_; }; /* class ComposedGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ComposedHessian.hxx000066400000000000000000000061761307543307100244110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math hessians * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSEDHESSIAN_HXX #define OPENTURNS_COMPOSEDHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedHessian * * The class that implement the composition of two numerical math hessians */ class OT_API ComposedHessian : public HessianImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer HessianPointer; typedef Pointer GradientPointer; typedef Pointer EvaluationPointer; /** Default constructor */ ComposedHessian(const GradientPointer & p_leftGradient, const HessianPointer & p_leftHessian, const EvaluationPointer & p_rightFunction, const GradientPointer & p_rightGradient, const HessianPointer & p_rightHessian); /** Virtual constructor */ virtual ComposedHessian * clone() const; /** Comparison operator */ Bool operator ==(const ComposedHessian & other) const; /** String converter */ virtual String __repr__() const; /** Method hessian() returns the symmetric tensor of the function at point */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ComposedHessian() {}; friend class Factory; private: /** The gradient of f in h = f o g */ GradientPointer p_leftGradient_; /** The hessian of f in h = f o g */ HessianPointer p_leftHessian_; /** The function g in h = f o g */ EvaluationPointer p_rightFunction_; /** The gradient of g in h = f o g */ GradientPointer p_rightGradient_; /** The hessian of g in h = f o g */ HessianPointer p_rightHessian_; }; /* class ComposedHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ConstantBasisFactory.hxx000066400000000000000000000033121307543307100254150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Constant basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONSTANTBASISFACTORY_HXX #define OPENTURNS_CONSTANTBASISFACTORY_HXX #include "openturns/BasisFactory.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API ConstantBasisFactory : public BasisFactory { CLASSNAME; public: /** Default constructor */ explicit ConstantBasisFactory (const UnsignedInteger inputDimension = 1); /* String converter */ OT::String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual ConstantBasisFactory * clone() const; /** @copydoc BasisFactory::build() const */ virtual Basis build() const; /* Method save() stores the object through the StorageManager */ void save(OT::Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(OT::Advocate & adv); private: UnsignedInteger inputDimension_; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Func/openturns/ConstantGradient.hxx000066400000000000000000000051151307543307100245640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a linear numerical math gradient impelmentation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONSTANTGRADIENT_HXX #define OPENTURNS_CONSTANTGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConstantGradient * * This class offers an interface for an real numerical mathematical gradient * implementations into the platform. It realizes the computation of the image matrix * of a vector (aka Point) through the gradient. The * gradient may be loaded in an external way through a wrapper. */ class OT_API ConstantGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ ConstantGradient(); /** Parameter constructor */ ConstantGradient(const Matrix & constant); /** Virtual constructor */ virtual ConstantGradient * clone() const; /** Comparison operator */ Bool operator ==(const ConstantGradient & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the constant term */ Matrix getConstant() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Matrix constant_; }; /* class ConstantGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONSTANTGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ConstantHessian.hxx000066400000000000000000000050611307543307100244210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a constant numerical math hessian implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONSTANTHESSIAN_HXX #define OPENTURNS_CONSTANTHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConstantHessian * * This class offers an interface for a real numerical mathematical hessian * implementations into the platform. It realizes the computation of the image symmetric tensor * of a vector (aka Point) through the hessian. */ class OT_API ConstantHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ ConstantHessian(); /** Parameter constructor */ ConstantHessian(const SymmetricTensor & constant); /** Virtual constructor */ virtual ConstantHessian * clone() const; /** Comparison operator */ Bool operator ==(const ConstantHessian & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Hessian method */ virtual SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the constant term */ SymmetricTensor getConstant() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: SymmetricTensor constant_; }; /* class ConstantHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONSTANTHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DatabaseEvaluation.hxx000066400000000000000000000060031307543307100250460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation from samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DATABASEEVALUATION_HXX #define OPENTURNS_DATABASEEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/KDTree.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DatabaseEvaluation * Provided two samples X (input) and Y (output), returns Yi when evaluated on Xi. */ class OT_API DatabaseEvaluation : public EvaluationImplementation { CLASSNAME; friend class FunctionImplementation; public: /** Default constructor */ DatabaseEvaluation(); /** Default constructor */ DatabaseEvaluation(const Sample & inputSample, const Sample & outputSample, const Bool activateCache = true); /** Virtual constructor */ virtual DatabaseEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const DatabaseEvaluation & other) const; /** String converter */ String __repr__() const; String __str__( const String & offset = "" ) const; /** Input sample accessor */ void setInputSample(const Sample & inputSample); Sample getInputSample() const; /** Output sample accessor */ void setOutputSample(const Sample & outputSample); Sample getOutputSample() const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator()(const Point & inP) const; virtual Sample operator()(const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Set cached sample */ void setSample(const Sample & inputSample, const Sample & outputSample, const Bool activateCache = true); Sample inputSample_; Sample outputSample_; KDTree tree_; private: }; /* class DatabaseEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DATABASEEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DatabaseFunction.hxx000066400000000000000000000033411307543307100245260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements a pre-computed function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DATABASEFUNCTION_HXX #define OPENTURNS_DATABASEFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DatabaseFunction * */ class OT_API DatabaseFunction : public Function { CLASSNAME; public: /* Default constructor */ DatabaseFunction(); /** Parameter constructor */ DatabaseFunction (const Sample & inputSample, const Sample & outputSample, const Bool enableCache = true); /** Comparison operator */ Bool operator ==(const DatabaseFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class DatabaseFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DATABASEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DualLinearCombinationEvaluation.hxx000066400000000000000000000100561307543307100275500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DUALLINEARCOMBINATIONEVALUATION_HXX #define OPENTURNS_DUALLINEARCOMBINATIONEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DualLinearCombinationEvaluation * * The evaluation part of functional linear combination of vectors */ class OT_API DualLinearCombinationEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; // friend class Factory; /** Default constructor */ DualLinearCombinationEvaluation(); public: /** Parameter constructor */ DualLinearCombinationEvaluation(const FunctionCollection & functionsCollection, const Sample & coefficients); /** Virtual constructor */ virtual DualLinearCombinationEvaluation * clone() const; /** Description accessor */ void setDescription(const Description & description); /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Evaluation operator */ Point operator () (const Point & inP) const; Sample operator () (const Sample & inS) const; /** Coefficients accessor */ Sample getCoefficients() const; /** Functions accessor */ FunctionCollection getFunctionsCollection() const; void setFunctionsCollectionAndCoefficients(const FunctionCollection & functionsCollection, const Sample & coefficients); /** Input dimension accessor */ UnsignedInteger getInputDimension() const; /** Output dimension accessor */ UnsignedInteger getOutputDimension() const; /** Gradient according to the marginal parameters */ Matrix parameterGradient(const Point & inP) const; /** Parameters value accessor */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // Make the gradient and the hessian friend classes of the evaluation in order to share the functions and the coefficients friend class DualLinearCombinationGradient; friend class DualLinearCombinationHessian; friend struct DualLinearCombinationEvaluationPointFunctor; // The functional coefficients of the combination FunctionPersistentCollection functionsCollection_; // The vectors of the combination Sample coefficients_; } ; /* class DualLinearCombinationEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DUALLINEARCOMBINATIONEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DualLinearCombinationFunction.hxx000066400000000000000000000034341307543307100272300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements linear combination of vectors. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DUALLINEARCOMBINATIONFUNCTION_HXX #define OPENTURNS_DUALLINEARCOMBINATIONFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DualLinearCombinationFunction * */ class OT_API DualLinearCombinationFunction : public Function { CLASSNAME; public: /* Default constructor */ DualLinearCombinationFunction(); /** Parameter constructor */ DualLinearCombinationFunction(const FunctionCollection & functionCollection, const Sample & coefficients); /** Comparison operator */ Bool operator ==(const DualLinearCombinationFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DUALLINEARCOMBINATIONFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DualLinearCombinationGradient.hxx000066400000000000000000000046161307543307100272030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DUALLINEARCOMBINATIONGRADIENT_HXX #define OPENTURNS_DUALLINEARCOMBINATIONGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/DualLinearCombinationEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DualLinearCombinationGradient * * The gradient part of functional linear combination of vectors */ class OT_API DualLinearCombinationGradient : public GradientImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ DualLinearCombinationGradient(); /** Parameters constructor */ DualLinearCombinationGradient(const DualLinearCombinationEvaluation & evaluation); /** Virtual constructor */ virtual DualLinearCombinationGradient * clone() const; /** Gradient method */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** The associated evaluation */ DualLinearCombinationEvaluation evaluation_; } ; /* class DualLinearCombinationGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DUALLINEARCOMBINATIONGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/DualLinearCombinationHessian.hxx000066400000000000000000000045271307543307100270410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of functional linear combination of vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DUALLINEARCOMBINATIONHESSIAN_HXX #define OPENTURNS_DUALLINEARCOMBINATIONHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/DualLinearCombinationEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DualLinearCombinationHessian * * The hessian part of functional linear combination of vectors */ class OT_API DualLinearCombinationHessian : public HessianImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ DualLinearCombinationHessian(); /** Parameters constructor */ DualLinearCombinationHessian(const DualLinearCombinationEvaluation & evaluation); /** Virtual constructor */ virtual DualLinearCombinationHessian * clone() const; /** Hessian method */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The associated evaluation */ DualLinearCombinationEvaluation evaluation_; } ; /* class DualLinearCombinationHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DUALLINEARCOMBINATIONHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/EnumerateFunction.hxx000066400000000000000000000061561307543307100247560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ENUMERATEFUNCTION_HXX #define OPENTURNS_ENUMERATEFUNCTION_HXX #include "openturns/EnumerateFunctionImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EnumerateFunction * * The bijective function to select polynomials in the orthogonal basis */ class OT_API EnumerateFunction : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Constructor with parameters */ EnumerateFunction(const EnumerateFunctionImplementation & implementation); /** Constructor with parameters */ EnumerateFunction(Implementation & p_implementation); /** Parameter constructor */ explicit EnumerateFunction(const UnsignedInteger dimension = 1); /** Parameter constructor */ EnumerateFunction(const UnsignedInteger dimension, const Scalar q); /** Parameter constructor */ EnumerateFunction(const Point & weight, const Scalar q); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** The bijective association between an integer and a set of indices */ Indices operator() (const UnsignedInteger index) const; /** The inverse of the association */ UnsignedInteger inverse(const Indices & indices) const; /** The cardinal of the given strata */ UnsignedInteger getStrataCardinal(const UnsignedInteger strataIndex) const; /** The cardinal of the cumulated strata above or equal to the given strata */ UnsignedInteger getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const; /** The index of the strata of degree max <= maximumDegree */ UnsignedInteger getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const; /** The cardinal of indices of degree max <= maximumDegree */ UnsignedInteger getMaximumDegreeCardinal(const UnsignedInteger maximumDegree) const; /** Dimension accessor */ void setDimension(const UnsignedInteger dimension); UnsignedInteger getDimension() const; protected: private: } ; /* class EnumerateFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ENUMERATEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/EnumerateFunctionImplementation.hxx000066400000000000000000000057301307543307100276610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ENUMERATEFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_ENUMERATEFUNCTIONIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EnumerateFunctionImplementation * * The bijective function to select polynomials in the orthogonal basis */ class OT_API EnumerateFunctionImplementation : public PersistentObject { CLASSNAME; public: /** Parameter constructor */ explicit EnumerateFunctionImplementation(const UnsignedInteger dimension = 1); /** Virtual constrcutor */ virtual EnumerateFunctionImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** The bijective association between an integer and a set of indices */ virtual Indices operator() (const UnsignedInteger index) const; /** The inverse of the association */ virtual UnsignedInteger inverse(const Indices & indices) const; /** The cardinal of the given strata */ virtual UnsignedInteger getStrataCardinal(const UnsignedInteger strateIndex) const; /** The cardinal of the cumulated strata above or equal to the given strate */ virtual UnsignedInteger getStrataCumulatedCardinal(const UnsignedInteger strateIndex) const; /** The index of the strata of degree max <= maximumDegree */ virtual UnsignedInteger getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const; /** The cardinal of indices of degree max <= maximumDegree */ virtual UnsignedInteger getMaximumDegreeCardinal(const UnsignedInteger maximumDegree) const; /** Dimension accessor */ void setDimension(const UnsignedInteger dimension); UnsignedInteger getDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // The enumerate function maps N into N^dimension UnsignedInteger dimension_; } ; /* class EnumerateFunctionImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ENUMERATEFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/EvaluationImplementation.hxx000066400000000000000000000225151307543307100263350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EVALUATIONIMPLEMENTATION_HXX #define OPENTURNS_EVALUATIONIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Sample.hxx" #include "openturns/Field.hxx" #include "openturns/HistoryStrategy.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" #include "openturns/Matrix.hxx" #include "openturns/Collection.hxx" #include "openturns/Pointer.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Cache.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EvaluationImplementation * * This class offers an abstract interface for the implementation * of an real numerical mathematical function into the platform. */ class OT_API EvaluationImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; typedef PersistentCollection CacheKeyType; typedef PersistentCollection CacheValueType; typedef Cache CacheType; typedef Pointer CacheImplementation; /** Default constructor */ EvaluationImplementation(); /** Virtual constructor */ virtual EvaluationImplementation * clone() const; /** Comparison operator */ Bool operator ==(const EvaluationImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Description Accessor, i.e. the names of the input and output parameters */ virtual void setDescription(const Description & description); Description getDescription() const; /** Input description Accessor, i.e. the names of the input parameters */ Description getInputDescription() const; void setInputDescription(const Description & inputDescription); /** Output description Accessor, i.e. the names of the Output parameters */ Description getOutputDescription() const; void setOutputDescription(const Description & outputDescription); /** Enable or disable the input/output history */ void enableHistory() const; void disableHistory() const; /** @brief Test the history mechanism activity * @see enableHistory() */ Bool isHistoryEnabled() const; /** @brief Clear the history mechanism * @see enableHistory() */ void clearHistory() const; /** @brief Retrieve the history of the input values * @see enableHistory() */ HistoryStrategy getHistoryInput() const; /** @brief Retrieve the history of the output values * @see enableHistory() */ HistoryStrategy getHistoryOutput() const; /** Input point / parameter history accessor */ virtual Sample getInputPointHistory() const; virtual Sample getInputParameterHistory() const; /** Enable or disable the internal cache */ void enableCache() const; void disableCache() const; /** @brief Test the internal cache activity * @see enableCache() */ Bool isCacheEnabled() const; /** @brief Returns the number of successful hits in the cache */ UnsignedInteger getCacheHits() const; /** @brief Add some content to the cache */ void addCacheContent(const Sample & inSample, const Sample & outSample); /** @brief Returns the cache input */ Sample getCacheInput() const; /** @brief Returns the cache output */ Sample getCacheOutput() const; /** @brief Empty the cache */ void clearCache() const; /* Here is the interface that all derived class must implement */ /** Test for actual implementation */ virtual Bool isActualImplementation() const; /** Operator () */ virtual Point operator() (const Point & inP) const; virtual Point operator() (const Point & inP, const Point & parameters); virtual Sample operator() (const Point & point, const Sample & parameters); /** Operator () on a sample, not pure virtual because a generic implementation is given */ virtual Sample operator() (const Sample & inSample) const; /** Operator () on a time series, not pure virtual because a generic implementation is given */ virtual Field operator() (const Field & inField) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for parameters dimension */ virtual UnsignedInteger getParameterDimension() const; /** Get the i-th marginal evaluation */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the evaluation corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameters); /** Parameters description accessor */ virtual Description getParameterDescription() const; virtual void setParameterDescription(const Description & description); /** Get the number of calls to operator() */ UnsignedInteger getCallsNumber() const; /** Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the given 1D marginal output as a function of the given 2D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input and output dimensions are 1 */ virtual Graph draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ virtual Graph draw(const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Number of calls since the construction */ mutable UnsignedInteger callsNumber_; /** A cache to store already computed points */ mutable CacheImplementation p_cache_; /** An history mechanism that allows to remember all the input/output associations including duplicate calls */ mutable HistoryStrategy inputStrategy_; mutable HistoryStrategy outputStrategy_; /** Flag to activate or deactivate the history mechanism */ mutable Bool isHistoryEnabled_; /** The value of the parameters */ Point parameter_; /** The description of the parameters */ Description parameterDescription_; private: /** The description of the input components */ Description inputDescription_; /** The description of the input components */ Description outputDescription_; }; /* class EvaluationImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EVALUATIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ExpertMixture.hxx000066400000000000000000000052621307543307100241450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements a meta-model based on mixture of experts * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPERTMIXTURE_HXX #define OPENTURNS_EXPERTMIXTURE_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Indices.hxx" #include "openturns/Point.hxx" #include "openturns/Classifier.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExpertMixture * * The class building chaos expansions */ class OT_API ExpertMixture : public EvaluationImplementation { CLASSNAME; public: /** Constructor */ ExpertMixture(); /** Constructor */ ExpertMixture(const Basis & experts, const Classifier & classifier); /** Virtual constructor */ virtual ExpertMixture * clone() const; /** Comparison operator */ Bool operator ==(const ExpertMixture & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for local experts */ Basis getExperts() const; void setExperts(const Basis & experts); /** Accessor for classifier */ Classifier getClassifier() const; void setClassifier(const Classifier & classifier); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The local experts */ Basis experts_; /** The classifier */ Classifier classifier_; } ; /* class ExpertMixture */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPERTMIXTURE_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FieldFunction.hxx000066400000000000000000000074231307543307100240520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements dynamical functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIELDFUNCTION_HXX #define OPENTURNS_FIELDFUNCTION_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FieldFunctionImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FieldFunction * @brief Simulates a dynamical function * * The class that simulates a dynamical function, it means * a function acting on a set of vectors indexed by the time. * This class is just an interface to actual implementation * objects that can be hot-replaced during computation. * Each implementation object refers to a specific evaluation * @see FieldFunctionImplementation */ class OT_API FieldFunction : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ /** Default constructor */ explicit FieldFunction(const UnsignedInteger spatialDimension = 1); /** Constructor from Function */ explicit FieldFunction(const Function & function, const UnsignedInteger spatialDimension = 1); /** Constructor from FieldFunctionImplementation */ FieldFunction(const FieldFunctionImplementation & implementation); /** Constructor from implementation */ FieldFunction(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ FieldFunction(FieldFunctionImplementation * p_implementation); #endif /** Comparison operator */ Bool operator ==(const FieldFunction & other) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Operator () */ Point operator() (const Scalar timeStamp, const Point & inP) const; Point operator() (const Point & location, const Point & inP) const; Field operator() (const Field & inFld) const; ProcessSample operator() (const ProcessSample & inPS) const; /** Get the i-th marginal function */ FieldFunction getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ FieldFunction getMarginal(const Indices & indices) const; /** Accessor for mesh dimension */ UnsignedInteger getSpatialDimension() const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the output mesh associated with the given input mesh */ Mesh getOutputMesh(const Mesh & inputMesh) const; /** Input description Accessor, i.e. the names of the input parameters */ Description getInputDescription() const; /** Output description Accessor, i.e. the names of the Output parameters */ Description getOutputDescription() const; /** Number of calls to the evaluation */ UnsignedInteger getCallsNumber() const; }; /* class FieldFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIELDFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FieldFunctionImplementation.hxx000066400000000000000000000103721307543307100267550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIELDFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_FIELDFUNCTIONIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Description.hxx" #include "openturns/Field.hxx" #include "openturns/ProcessSample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FieldFunctionImplementation * * The class that simulates a numerical math function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the evaluation, the gradient or the hessian. */ class OT_API FieldFunctionImplementation : public PersistentObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer Implementation; /** Default constructor */ explicit FieldFunctionImplementation(const UnsignedInteger spatialDimension = 1); /** Virtual constructor */ virtual FieldFunctionImplementation * clone() const; /** Comparison operator */ Bool operator ==(const FieldFunctionImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ virtual Point operator() (const Scalar timeStamp, const Point & inP) const; virtual Point operator() (const Point & location, const Point & inP) const; virtual Field operator() (const Field & inFld) const; virtual ProcessSample operator() (const ProcessSample & inPS) const; /** Accessor for mesh dimension */ virtual UnsignedInteger getSpatialDimension() const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Input description Accessor, i.e. the names of the input parameters */ virtual void setInputDescription(const Description & inputDescription); virtual Description getInputDescription() const; /** Output description Accessor, i.e. the names of the Output parameters */ virtual void setOutputDescription(const Description & outputDescription); virtual Description getOutputDescription() const; /** Accessor for the output mesh associated with the given input mesh */ Mesh getOutputMesh(const Mesh & inputMesh) const; /** Get the i-th marginal function */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Number of calls to the dynamical function */ virtual UnsignedInteger getCallsNumber() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Expected dimension of the mesh underlying the field arguments */ UnsignedInteger spatialDimension_; /** Description of the input variables */ Description inputDescription_; /** Description of the output variables */ Description outputDescription_; /** Counter for the number of calls */ mutable UnsignedInteger callsNumber_; }; /* class FieldFunctionImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIELDFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FiniteBasis.hxx000066400000000000000000000045501307543307100235170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FINITEBASIS_HXX #define OPENTURNS_FINITEBASIS_HXX #include "openturns/BasisImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FiniteBasis * * Allows to use a NMF collection as FunctionalBasis required to use chaos algo, used in TrendFactory */ class OT_API FiniteBasis : public BasisImplementation { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; /** Default constructor */ explicit FiniteBasis(const UnsignedInteger size = 0); /** Collection constructor */ explicit FiniteBasis(const FunctionCollection & collection); /** Build the Function of the given index */ virtual Function build(const UnsignedInteger index) const; virtual Function & operator[](const UnsignedInteger index); /** Virtual constructor */ virtual FiniteBasis * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; virtual UnsignedInteger getSize() const; virtual void add(const Function & elt); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: FunctionPersistentCollection collection_; } ; /* class FiniteBasis */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FINITEBASIS_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FourierSeries.hxx000066400000000000000000000041441307543307100241040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Fourier series function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FOURIERSERIES_HXX #define OPENTURNS_FOURIERSERIES_HXX #include "openturns/UniVariateFunctionImplementation.hxx" #include "openturns/UniVariatePolynomial.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FourierSeries * * Fourier series function implementation */ class OT_API FourierSeries : public UniVariateFunctionImplementation { CLASSNAME; public: /** Parameter constructor */ explicit FourierSeries(const Bool isCosine = true, const UnsignedInteger k = 0); /** Virtual constructor */ virtual FourierSeries * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** FourierSeries are evaluated as functors */ Scalar operator() (const Scalar x) const; /** FourierSeries gradient */ Scalar gradient(const Scalar x) const; /** FourierSeries hessian */ Scalar hessian(const Scalar x) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: Bool isCosine_; UnsignedInteger k_; } ; /* Class FourierSeries */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FOURIERSERIES_HXX */ openturns-1.9/lib/src/Base/Func/openturns/Function.hxx000066400000000000000000000351251307543307100231060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements numerical math functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTION_HXX #define OPENTURNS_FUNCTION_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/ProductFunction.hxx" #include "openturns/ComparisonOperator.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Function * @brief Simulates a numerical math function * * The class that simulates a numerical math function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the function, the gradient or the hessian. * @see FunctionImplementation */ class OT_API Function : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Collection FunctionCollection; typedef FunctionImplementation::EvaluationPointer EvaluationPointer; typedef FunctionImplementation::GradientPointer GradientPointer; typedef FunctionImplementation::HessianPointer HessianPointer; /** Default constructor */ Function(); /** Constructor from FunctionImplementation */ Function(const FunctionImplementation & implementation); #ifndef SWIG /** Constructor from implementation */ Function(const Implementation & p_implementation); /** Constructor from implementation pointer */ Function(FunctionImplementation * p_implementation); #endif /** Constructor from evaluation implementation */ Function(const EvaluationImplementation & evaluation); /** @brief Composition constructor * * Builds a new %Function from two others as if they were mathematicaly composed, * * Example: h = f o g * - f is the left %Function * - g is the right %Function * - h is the composed %Function * . * The condition for successful composition is that the dimension of the output of g is the dimension * of the input of f. The composed %Function has the input dimension of g and the output dimension * of f. * @param left The left %Function (aka f) * @param right The right %Function (aka g) */ Function(const Function & left, const Function & right); /** @brief Analytical formula constructor * * Builds a new %Function by analytical expression parsing. The expression involving the input * variables (stored in \e inputVariablesNames) to produce the output variables (stored in \e outputVariablesNames) * are described in \e formulas. * * The input dimension of the new %Function is the size of \e inputVariablesNames and * the output dimension of the new %Function is the size of \e outputVariablesName. * @param inputVariablesNames The ordered collection of input variables names * @param outputVariablesNames The ordered collection of output variables names * @param formulas The ordered collection of analytical expressions to compute the output variables */ Function(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas); /** Same as the previous one, but with default names for the output variables * @deprecated */ Function(const Description & inputVariablesNames, const Description & formulas); /** Indicator function constructor * @deprecated */ Function(const Function & function, const ComparisonOperator & comparisonOperator, const Scalar threshold); /** Aggregated function constructor: the output is the aggregation of the several functions */ Function(const FunctionCollection & functionCollection); /** Linear combination function constructor * @deprecated */ Function(const FunctionCollection & functionCollection, const Point & coefficients); /** Dual linear combination function constructor */ Function(const FunctionCollection & functionCollection, const Sample & coefficients); /** Simplified analytical formula constructor * @deprecated */ Function(const String & inputVariableName, const String & formula, const String & outputVariableName = "outputVariable"); #ifndef SWIG /** Constructor from evaluation */ explicit Function(const EvaluationPointer & evaluationImplementation); /** Constructor from implementations */ Function(const EvaluationPointer & evaluationImplementation, const GradientPointer & gradientImplenmentation, const HessianPointer & hessianImplementation); #endif /** Constructor from samples * @deprecated */ Function(const Sample & inputSample, const Sample & outputSample); /** Constructor from field using P1 Lagrange interpolation */ Function(const Field & field); /** Constructor by splitting the input of a function between variables and parameters * @deprecated */ Function(const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet = true); /** Comparison operator */ Bool operator ==(const Function & other) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** @brief Enable the internal cache * * The cache stores previously computed output values, so calling the cache before processing the %Function * can save much time and avoid useless computations. However, calling the cache can eat time if the computation is * very short. So cache is disabled by default, except when the underlying implementation uses a wrapper. * * The reason is that building and linking to a wrapper is an extra burden that is valuable only if the computation * code is long enough to justify it. Calling the cache in this case will save time for sure. */ void enableCache() const; /** @brief Disable the internal cache * @see enableCache() */ void disableCache() const; /** @brief Test the internal cache activity * @see enableCache() */ Bool isCacheEnabled() const; /** @brief Returns the number of successful hits in the cache */ UnsignedInteger getCacheHits() const; /** @brief Add some content to the cache */ void addCacheContent(const Sample & inSample, const Sample & outSample); /** @brief Returns the cache input */ Sample getCacheInput() const; /** @brief Returns the cache output */ Sample getCacheOutput() const; /** @brief Empty the cache */ void clearCache() const; /** Enable or disable the input/output history * The input and output strategies store input and output values of the function, * in order to allow to retrieve these values e.g. after the execution of an algorithm * for which the user has no access to the generated inputs and the corresponding output. */ void enableHistory() const; /** @brief Disable the history mechanism * @see enableHistory() */ void disableHistory() const; /** @brief Test the history mechanism activity * @see enableHistory() */ Bool isHistoryEnabled() const; /** @brief Clear the history mechanism * @see enableHistory() */ void clearHistory() const; /** @brief Retrieve the history of the input values * @see enableHistory() */ HistoryStrategy getHistoryInput() const; /** @brief Retrieve the history of the output values * @see enableHistory() */ HistoryStrategy getHistoryOutput() const; /** Input point / parameter history accessor */ Sample getInputPointHistory() const; Sample getInputParameterHistory() const; /** Function implementation accessors */ void setEvaluation(const EvaluationPointer & evaluation); const EvaluationPointer & getEvaluation() const; /** Gradient implementation accessors */ void setGradient(const GradientImplementation & gradient); #ifndef SWIG void setGradient(const GradientPointer & gradient); #endif const GradientPointer & getGradient() const; /** Hessian implementation accessors */ void setHessian(const HessianImplementation & hessian); #ifndef SWIG void setHessian(const HessianPointer & hessian); #endif const HessianPointer & getHessian() const; /** Flag for default gradient accessors */ Bool getUseDefaultGradientImplementation() const; void setUseDefaultGradientImplementation(const Bool gradientFlag); /** Flag for default hessian accessors */ Bool getUseDefaultHessianImplementation() const; void setUseDefaultHessianImplementation(const Bool hessianFlag); /** Multiplication of two 1D output functions with the same input dimension */ virtual ProductFunction operator * (const Function & right) const; /** Addition of two functions with the same input and output dimensions */ virtual Function operator + (const Function & right) const; /** Soustraction of two functions with the same input and output dimensions */ virtual Function operator - (const Function & right) const; /** Operator () */ Point operator() (const Point & inP) const; Point operator() (const Point & inP, const Point & parameter); Sample operator() (const Point & point, const Sample & parameters); Sample operator() (const Sample & inS) const; Field operator() (const Field & inTS) const; /** Method gradient() returns the Jacobian transposed matrix of the function at point */ Matrix gradient(const Point & inP) const; Matrix gradient(const Point & inP, const Point & parameters); /** Method hessian() returns the symmetric tensor of the function at point */ SymmetricTensor hessian(const Point & inP) const; SymmetricTensor hessian(const Point & inP, const Point & parameters); /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; virtual Matrix parameterGradient(const Point & inP, const Point & parameters); /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Parameters description accessor */ virtual Description getParameterDescription() const; virtual void setParameterDescription(const Description & description); /** Accessor for parameter dimension */ UnsignedInteger getParameterDimension() const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Description Accessor, i.e. the names of the input and output parameters */ void setDescription(const Description & description); Description getDescription() const; /** Input description Accessor, i.e. the names of the input parameters */ Description getInputDescription() const; /** Output description Accessor, i.e. the names of the Output parameters */ Description getOutputDescription() const; /** Get the i-th marginal function */ Function getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Function getMarginal(const Indices & indices) const; /** Number of calls to the evaluation */ UnsignedInteger getCallsNumber() const; UnsignedInteger getEvaluationCallsNumber() const; /** Number of calls to the gradient */ UnsignedInteger getGradientCallsNumber() const; /** Number of calls to the hessian */ UnsignedInteger getHessianCallsNumber() const; /** Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the given 1D marginal output as a function of the given 2D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input and output dimensions are 1 */ virtual Graph draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ virtual Graph draw(const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Static methods for documentation of analytical functions * @deprecated */ static Description GetValidConstants(); static Description GetValidFunctions(); static Description GetValidOperators(); }; /* class Function */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FunctionImplementation.hxx000066400000000000000000000307511307543307100260140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_FUNCTIONIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Sample.hxx" #include "openturns/Field.hxx" #include "openturns/Indices.hxx" #include "openturns/Pointer.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/HessianImplementation.hxx" #include "openturns/Description.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionImplementation * * The class that simulates a numerical math function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the evaluation, the gradient or the hessian. */ class OT_API FunctionImplementation : public PersistentObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer Implementation; typedef EvaluationImplementation::Implementation EvaluationPointer; typedef GradientImplementation::Implementation GradientPointer; typedef HessianImplementation::Implementation HessianPointer; public: /** Static methods for documentation of analytical functions * @deprecated */ static Description GetValidConstants(); static Description GetValidFunctions(); static Description GetValidOperators(); public: /** Default constructor */ FunctionImplementation(); /** Analytical formula constructor */ FunctionImplementation(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas); /** Database constructor */ FunctionImplementation(const Sample & inputSample, const Sample & outputSample); /** Constructor from implementations */ FunctionImplementation(const EvaluationPointer & funcImpl, const GradientPointer & gradImpl, const HessianPointer & hessImpl); /** Single function implementation constructor */ FunctionImplementation(const EvaluationPointer & evaluationImplementation); /** Multiplication of two 1D output functions with the same input dimension */ virtual FunctionImplementation operator * (const FunctionImplementation & right) const; /** Multiplication of two 1D output functions with the same input dimension */ virtual FunctionImplementation operator * (const Implementation & p_right) const; /** Virtual constructor */ virtual FunctionImplementation * clone() const; /** Comparison operator */ Bool operator ==(const FunctionImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** @brief Enable the internal cache * * The cache stores previously computed output values, so calling the cache before processing the %Function * can save much time and avoid useless computations. However, calling the cache can eat time if the computation is * very short. So cache is disabled by default, except when the underlying implementation uses a wrapper. * * The reason is that building and linking to a wrapper is an extra burden that is valuable only if the computation * code is long enough to justify it. Calling the cache in this case will save time for sure. */ void enableCache() const; /** @brief Disable the internal cache * @see enableCache() */ void disableCache() const; /** @brief Test the internal cache activity * @see enableCache() */ Bool isCacheEnabled() const; /** @brief Returns the number of successful hits in the cache */ UnsignedInteger getCacheHits() const; /** @brief Add some content to the cache */ void addCacheContent(const Sample & inSample, const Sample & outSample); /** @brief Returns the cache input */ Sample getCacheInput() const; /** @brief Returns the cache output */ Sample getCacheOutput() const; void clearCache() const; /** Enable or disable the input/output history * The input and output strategies store input and output values of the function, * in order to allow to retrieve these values e.g. after the execution of an algorithm * for which the user has no access to the generated inputs and the corresponding output. */ void enableHistory() const; /** @brief Disable the history mechanism * @see enableHistory() */ void disableHistory() const; /** @brief Test the history mechanism activity * @see enableHistory() */ Bool isHistoryEnabled() const; /** @brief Clear the history mechanism * @see enableHistory() */ void clearHistory() const; /** @brief Retrieve the history of the input values * @see enableHistory() */ HistoryStrategy getHistoryInput() const; /** @brief Retrieve the history of the output values * @see enableHistory() */ HistoryStrategy getHistoryOutput() const; /** Input point / parameter history accessor */ virtual Sample getInputPointHistory() const; virtual Sample getInputParameterHistory() const; /** Function implementation accessors */ void setEvaluation(const EvaluationPointer & evaluation); const EvaluationPointer & getEvaluation() const; /** Gradient implementation accessors */ void setGradient(const GradientPointer & gradient); const GradientPointer & getGradient() const; /** Hessian implementation accessors */ void setHessian(const HessianPointer & hessian); const HessianPointer & getHessian() const; /** Flag for default gradient accessors */ Bool getUseDefaultGradientImplementation() const; void setUseDefaultGradientImplementation(const Bool gradientFlag); /** Flag for default hessian accessors */ Bool getUseDefaultHessianImplementation() const; void setUseDefaultHessianImplementation(const Bool hessianFlag); /** Operator () */ virtual Point operator() (const Point & inP) const; virtual Point operator()(const Point & inP, const Point & parameter); virtual Sample operator() (const Point & point, const Sample & parameters); virtual Sample operator() (const Sample & inS) const; virtual Field operator() (const Field & inField) const; /** Method gradient() returns the Jacobian transposed matrix of the function at point */ virtual Matrix gradient(const Point & inP) const; virtual Matrix gradient(const Point & inP, const Point & parameter); /** Method hessian() returns the symmetric tensor of the function at point */ virtual SymmetricTensor hessian(const Point & inP) const; virtual SymmetricTensor hessian(const Point & inP, const Point & parameter); /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; virtual Matrix parameterGradient(const Point & inP, const Point & parameter); /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Parameters description accessor */ virtual Description getParameterDescription() const; virtual void setParameterDescription(const Description & description); /** Accessor for parameter dimension */ virtual UnsignedInteger getParameterDimension() const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Description Accessor, i.e. the names of the input and output parameters */ virtual void setDescription(const Description & description); virtual Description getDescription() const; /** Input description Accessor, i.e. the names of the input parameters */ virtual Description getInputDescription() const; /** Output description Accessor, i.e. the names of the Output parameters */ virtual Description getOutputDescription() const; /** Get the i-th marginal function */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Number of calls to the evaluation */ virtual UnsignedInteger getEvaluationCallsNumber() const; /** Number of calls to the gradient */ virtual UnsignedInteger getGradientCallsNumber() const; /** Number of calls to the hessian */ virtual UnsignedInteger getHessianCallsNumber() const; /** Draw the given 1D marginal output as a function of the given 1D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger inputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the given 1D marginal output as a function of the given 2D marginal input around the given central point */ virtual Graph draw(const UnsignedInteger firstInputMarginal, const UnsignedInteger secondInputMarginal, const UnsignedInteger outputMarginal, const Point & centralPoint, const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input and output dimensions are 1 */ virtual Graph draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber"), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Draw the output of the function with respect to its input when the input dimension is 2 and the output dimension is 1 */ virtual Graph draw(const Point & xMin, const Point & xMax, const Indices & pointNumber = Indices(2, ResourceMap::GetAsUnsignedInteger("NumericalMathEvaluation-DefaultPointNumber")), const GraphImplementation::LogScale scale = GraphImplementation::NONE) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** A pointer on the actual numerical math function implementation */ EvaluationPointer p_evaluationImplementation_; /** A pointer on the actual numerical math gradient implementation */ GradientPointer p_gradientImplementation_; /** A pointer on the actual numerical math hessian implementation */ HessianPointer p_hessianImplementation_; protected: /** Flag to tell if the current gradient is a default implementation */ mutable Bool useDefaultGradientImplementation_; /** Flag to tell if the curren hessian is a default implementation */ mutable Bool useDefaultHessianImplementation_; }; /* class FunctionImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FunctionalBasis.hxx000066400000000000000000000035531307543307100244050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALBASIS_HXX #define OPENTURNS_FUNCTIONALBASIS_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FunctionalBasisImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalBasis * * This is the interface class for orthogonal basis */ class OT_API FunctionalBasis : public TypedInterfaceObject { CLASSNAME; public: typedef Collection FunctionCollection; /** Default constructor */ FunctionalBasis(); /** Constructor from implementation */ FunctionalBasis(const FunctionalBasisImplementation & implementation); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; Function operator[](const UnsignedInteger index) const; /** Tells whether the basis is orthogonal */ Bool isOrthogonal() const; /** String converter */ virtual String __repr__() const; protected: private: } ; /* class FunctionalBasis */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALBASIS_HXX */ openturns-1.9/lib/src/Base/Func/openturns/FunctionalBasisImplementation.hxx000066400000000000000000000036111307543307100273060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALBASISIMPLEMENTATION_HXX #define OPENTURNS_FUNCTIONALBASISIMPLEMENTATION_HXX #include "openturns/BasisImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalBasisImplementation * * This is an abstract class for orthogonal basis */ class OT_API FunctionalBasisImplementation : public BasisImplementation { CLASSNAME; public: typedef Collection FunctionCollection; /** Default constructor */ FunctionalBasisImplementation(); /** Virtual constructor */ virtual FunctionalBasisImplementation * clone() const; virtual Bool isFunctional() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: } ; /* class FunctionalBasisImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALBASISIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/GradientImplementation.hxx000066400000000000000000000067451307543307100257720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math gradient implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GRADIENTIMPLEMENTATION_HXX #define OPENTURNS_GRADIENTIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" #include "openturns/Matrix.hxx" #include "openturns/Tensor.hxx" #include "openturns/Pointer.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GradientImplementation * * This class offers an abstract interface for the implementation * of an real numerical mathematical Gradient into the platform. */ class OT_API GradientImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ GradientImplementation(); /** The Gradient that actually realizes assignment between objects */ /** Virtual constructor */ virtual GradientImplementation * clone() const; /** Comparison operator */ Bool operator ==(const GradientImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Get the i-th marginal evaluation */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the evaluation corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual Matrix gradient(const Point & inP) const; virtual Matrix gradient(const Point & inP, const Point & parameters); /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Get the number of calls to operator() */ UnsignedInteger getCallsNumber() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Number of calls since the construction */ mutable UnsignedInteger callsNumber_; private: /** The value of the parameters */ Point parameter_; }; /* class GradientImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GRADIENTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/HaarWavelet.hxx000066400000000000000000000044571307543307100235300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Haar wavelet function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HAARWAVELET_HXX #define OPENTURNS_HAARWAVELET_HXX #include "openturns/UniVariateFunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HaarWavelet * * Haar wavelet function implementation */ class OT_API HaarWavelet : public UniVariateFunctionImplementation { CLASSNAME; public: /** Parameter constructor */ explicit HaarWavelet(const UnsignedInteger j = 0, const UnsignedInteger k = 0, const Bool isScaling = true); /** Virtual constructor */ virtual HaarWavelet * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** HaarWavelet are evaluated as functors */ Scalar operator() (const Scalar x) const; /** HaarWavelet gradient */ Scalar gradient(const Scalar x) const; /** HaarWavelet hessian */ Scalar hessian(const Scalar x) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* Wavelet order */ UnsignedInteger j_; /* Wavelet shift */ UnsignedInteger k_; /* Scaling flag */ Bool isScaling_; /* Left bound */ Scalar a_; /* Middle bound */ Scalar m_; /* Right bound */ Scalar b_; /* Value */ Scalar value_; } ; /* Class HaarWavelet */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HAARWAVELET_HXX */ openturns-1.9/lib/src/Base/Func/openturns/HessianImplementation.hxx000066400000000000000000000066201307543307100256170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math hessian implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HESSIANIMPLEMENTATION_HXX #define OPENTURNS_HESSIANIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Pointer.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HessianImplementation * * This class offers an abstract interface for the implementation * of an real numerical mathematical hessian into the platform. */ class OT_API HessianImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ HessianImplementation(); /** Virtual constructor */ virtual HessianImplementation * clone() const; /** Comparison operator */ Bool operator ==(const HessianImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /** Get the i-th marginal evaluation */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the evaluation corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /* Here is the interface that all derived class must implement */ /** Hessian method */ virtual SymmetricTensor hessian(const Point & inP) const; virtual SymmetricTensor hessian(const Point & inP, const Point & parameter); /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Get the number of calls to operator() */ UnsignedInteger getCallsNumber() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Number of calls since the construction */ mutable UnsignedInteger callsNumber_; /** The value of the parameters */ Point parameter_; private: }; /* class HessianImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HESSIANIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/HyperbolicAnisotropicEnumerateFunction.hxx000066400000000000000000000101041307543307100311760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HYPERBOLICANISOTROPICENUMERATEFUNCTION_HXX #define OPENTURNS_HYPERBOLICANISOTROPICENUMERATEFUNCTION_HXX #include #include "openturns/EnumerateFunctionImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HyperbolicAnisotropicEnumerateFunction * * The bijective function to select polynomials in the orthogonal basis */ class OT_API HyperbolicAnisotropicEnumerateFunction : public EnumerateFunctionImplementation { CLASSNAME; public: typedef std::pair< Indices , Scalar > ValueType; typedef std::list IndiceCache; typedef Collection IndicesCollection; /** Default constructor */ HyperbolicAnisotropicEnumerateFunction(); /** Parameter constructor */ HyperbolicAnisotropicEnumerateFunction(const UnsignedInteger dimension, const Scalar q = ResourceMap::GetAsScalar("HyperbolicAnisotropicEnumerateFunction-DefaultQ")); /** Parameter constructor */ HyperbolicAnisotropicEnumerateFunction(const Point & weight, const Scalar q = ResourceMap::GetAsScalar("HyperbolicAnisotropicEnumerateFunction-DefaultQ")); /** Virtual constrcutor */ virtual HyperbolicAnisotropicEnumerateFunction * clone() const; /** String converter */ virtual String __repr__() const; /** The bijective association between an integer and a set of indices */ virtual Indices operator() (const UnsignedInteger index) const; /** The inverse of the association */ virtual UnsignedInteger inverse(const Indices & indices) const; /** The cardinal of the given strata */ virtual UnsignedInteger getStrataCardinal(const UnsignedInteger strataIndex) const; /** The cardinal of the cumulated strata above or equal to the given strata */ virtual UnsignedInteger getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const; /** The index of the strata of degree max < degree */ virtual UnsignedInteger getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const; /** Q accessor */ void setQ(const Scalar q); Scalar getQ() const; /** Weight accessor */ void setWeight(const Point & weight); Point getWeight() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Initialize the generation of indices */ void initialize(); /** Returns the q-norm of the indice set */ Scalar qNorm(const Indices & indices) const; /** Returns the maximum degree of the indice set */ UnsignedInteger computeDegree(const Indices & indices) const; private: /** Weight of each component */ Point weight_; /** Q-Norm q term */ Scalar q_; /** Cache of already generated indices */ mutable IndiceCache candidates_; /** Candidate indices */ mutable IndicesCollection cache_; /** Cumulated strata cardinals */ mutable Indices strataCumulatedCardinal_; } ; /* class HyperbolicAnisotropicEnumerateFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HYPERBOLICANISOTROPICENUMERATEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/IdentityEvaluation.hxx000066400000000000000000000045411307543307100251400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for identity evaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IDENTITYEVALUATION_HXX #define OPENTURNS_IDENTITYEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IdentityEvaluation */ class OT_API IdentityEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Parameter constructor */ explicit IdentityEvaluation(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual IdentityEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const IdentityEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const; /** Operator () */ virtual Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The dimension of the input/output */ UnsignedInteger dimension_; }; /* class IdentityEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_IDENTITYEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/IdentityFunction.hxx000066400000000000000000000034511307543307100246150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements identity functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IDENTITYFUNCTION_HXX #define OPENTURNS_IDENTITYFUNCTION_HXX #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IdentityFunction * * The class that simulates a identity function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the function, the gradient or the hessian. */ class OT_API IdentityFunction : public Function { CLASSNAME; public: /* Some typedefs for easy reading */ /** Default constructor */ explicit IdentityFunction(const UnsignedInteger dimension); /** Comparison operator */ Bool operator ==(const IdentityFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class IdentityFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_IDENTITYFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/IndicatorEvaluation.hxx000066400000000000000000000053441307543307100252650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_INDICATORNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_INDICATORNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/ComparisonOperator.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IndicatorEvaluation * * The class that implement the composition of two numerical math functions implementations. */ class OT_API IndicatorEvaluation : public EvaluationImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer EvaluationPointer; /** Default constructor */ IndicatorEvaluation(); /** Default constructor */ IndicatorEvaluation(const EvaluationPointer & p_evaluation, const ComparisonOperator & comparisonOperator, const Scalar threshold); /** Virtual constructor */ virtual IndicatorEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const IndicatorEvaluation & other) const; /** String converter */ virtual String __repr__() const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; /** Accessor for the underlying evaluation */ EvaluationPointer getEvaluation() const; void setEvaluation(const EvaluationPointer & p_evaluation); /** Accessor for the comparison operator */ ComparisonOperator getComparisonOperator() const; void setComparisonOperator(const ComparisonOperator & comparisonOperator); /** Accessor for the threshold */ Scalar getThreshold() const; void setThreshold(const Scalar threshold); /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: EvaluationPointer p_evaluation_; ComparisonOperator comparisonOperator_; Scalar threshold_; }; /* class IndicatorEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INDICATORNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/IndicatorFunction.hxx000066400000000000000000000033561307543307100247440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements indicator functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INDICATORFUNCTION_HXX #define OPENTURNS_INDICATORFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IndicatorFunction * */ class OT_API IndicatorFunction : public Function { CLASSNAME; public: /* Default constructor */ IndicatorFunction(); /** Parameter constructor */ IndicatorFunction(const Function & function, const ComparisonOperator & comparisonOperator, const Scalar threshold); /** Comparison operator */ Bool operator ==(const IndicatorFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class QuadraticFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INDICATORFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseBoxCoxEvaluation.hxx000066400000000000000000000046521307543307100261100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Inverse Box Cox function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_INVERSEBOXCOXEVALUATION_HXX #define OPENTURNS_INVERSEBOXCOXEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseBoxCoxEvaluation * * This class offers an easy evaluation of the Box Cox function defined by : * h(x) = \frac{x^\lambda - 1}{\lambda} for \lambda non zero, log(x) oherwise * Care that x should be positive */ class OT_API InverseBoxCoxEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ InverseBoxCoxEvaluation(); /** Parameter constructor */ explicit InverseBoxCoxEvaluation(const Point & lamda); InverseBoxCoxEvaluation(const Point & lamda, const Point & shift); /** Virtual constructor */ virtual InverseBoxCoxEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const InverseBoxCoxEvaluation & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** lambda vector of the box cox transform */ Point lambda_; /** Shift vector of the box cox transform */ Point shift_; }; /* class InverseBoxCoxEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEBOXCOXEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseBoxCoxGradient.hxx000066400000000000000000000044601307543307100255330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_INVERSEBOXCOXGRADIENT_HXX #define OPENTURNS_INVERSEBOXCOXGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/InverseBoxCoxEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseBoxCoxGradient * * This class offers an easy gradient of the Box Cox function defined by : * \Delta(h)(x) = (x-s)^{\lambda - 1} for \lambda non zero, 1/(x-s) otherwise * Care that x should be > s */ class OT_API InverseBoxCoxGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ InverseBoxCoxGradient(); /** Parameter constructor */ explicit InverseBoxCoxGradient(const InverseBoxCoxEvaluation & evaluation); /** Virtual constructor */ virtual InverseBoxCoxGradient * clone() const; /** Comparison operator */ Bool operator ==(const InverseBoxCoxGradient & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Gradient evaluation method */ using GradientImplementation::gradient; Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Accessor for the evaluation */ InverseBoxCoxEvaluation getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The underlying evaluation */ InverseBoxCoxEvaluation evaluation_; }; /* class InverseBoxCoxGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEBOXCOXGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseBoxCoxHessian.hxx000066400000000000000000000044701307543307100253710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_INVERSEBOXCOXHESSIAN_HXX #define OPENTURNS_INVERSEBOXCOXHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/InverseBoxCoxEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseBoxCoxHessian * * This class offers an easy hessian of the Box Cox function defined by : * \Delta(h)(x) = (\lambda - 1)(x-s)^{\lambda - 2} for \lambda non zero, -1/(x-s)^2 otherwise * Care that x should be > s */ class OT_API InverseBoxCoxHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ InverseBoxCoxHessian(); /** Parameter constructor */ explicit InverseBoxCoxHessian(const InverseBoxCoxEvaluation & evaluation); /** Virtual constructor */ virtual InverseBoxCoxHessian * clone() const; /** Comparison operator */ Bool operator ==(const InverseBoxCoxHessian & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Hessian evaluation method */ using HessianImplementation::hessian; SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the lambda point */ Point getLambda() const; /** Accessor for the shift */ Point getShift() const; /** Accessor for the evaluation */ InverseBoxCoxEvaluation getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The underlying evaluation */ InverseBoxCoxEvaluation evaluation_; }; /* class InverseBoxCoxHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEBOXCOXHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseBoxCoxTransform.hxx000066400000000000000000000041741307543307100257530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSEBOXCOXTRANSFORM_HXX #define OPENTURNS_INVERSEBOXCOXTRANSFORM_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseBoxCoxTransform * * The class that simulates the classical Box Cox method which acts on the spatial part of a time series. */ class BoxCoxTransform; class OT_API InverseBoxCoxTransform : public Function { CLASSNAME; public: /** Default constructor */ InverseBoxCoxTransform(); /** Standard parameter constructor */ explicit InverseBoxCoxTransform(const Point & lambda); InverseBoxCoxTransform(const Point & lambda, const Point & shift); /** 1D Scalar parameter constructor */ explicit InverseBoxCoxTransform(const Scalar & lambda); InverseBoxCoxTransform(const Scalar & lambda, const Scalar & shift); /** Virtual constructor */ InverseBoxCoxTransform * clone() const; /** Lambda accessor */ Point getLambda () const; /** Shift accessor */ Point getShift () const; /** Inverse accessor */ BoxCoxTransform getInverse() const; private: }; /* class InverseBoxCoxTransform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEBOXCOXTRANSFORM_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseTrendEvaluation.hxx000066400000000000000000000042611307543307100257560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_INVERSETRENDEVALUATION_HXX #define OPENTURNS_INVERSETRENDEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseTrendEvaluation * * This class offers an easy evaluation of the Box Cox function defined by : * h(x) = \frac{x^\lambda - 1}{\lambda} for \lambda non zero, log(x) oherwise * Care that x should be positive */ class OT_API InverseTrendEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ InverseTrendEvaluation(); /** Parameter constructor */ InverseTrendEvaluation(const Function & function); /** Virtual constructor */ virtual InverseTrendEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const InverseTrendEvaluation & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the 1D function */ Function getFunction() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The 1D function underlying the InverseTrend transform */ Function function_; }; /* class InverseTrendEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSETRENDEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/InverseTrendTransform.hxx000066400000000000000000000047751307543307100256340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSETRENDTRANSOFORM_HXX #define OPENTURNS_INVERSETRENDTRANSOFORM_HXX #include "openturns/VertexValueFunction.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseTrendTransform * * The class that simulates a dynamical function based on a * numerical math function that acts only on the mesh part * of a field. */ class TrendTransform; class OT_API InverseTrendTransform : public VertexValueFunction { CLASSNAME; public: typedef EvaluationImplementation::Implementation EvaluationPointer; /** Default constructor */ InverseTrendTransform(); /** Parameter constructor */ explicit InverseTrendTransform(const Function & function); /** Parameter constructor */ InverseTrendTransform(const EvaluationPointer & p_evaluation); /** Parameter constructor */ InverseTrendTransform(const EvaluationImplementation & evaluation); /** Virtual constructor */ virtual InverseTrendTransform * clone() const; /** Inverse accessor */ TrendTransform getInverse() const; /** Comparison operator */ Bool operator ==(const InverseTrendTransform & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using VertexValueFunction::operator(); Field operator() (const Field & inTS) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class InverseTrendTransform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSETRENDTRANSOFORM_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LARS.hxx000066400000000000000000000047611307543307100220640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Least Angle Regression Algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LARS_HXX #define OPENTURNS_LARS_HXX #include #include "openturns/Matrix.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LARS * * A sequence of numerical math function collection. */ class OT_API LARS : public BasisSequenceFactoryImplementation { CLASSNAME; public: /** Default constructor */ explicit LARS(const Bool verbose = false); /** Virtual constructor */ virtual LARS * clone() const; /** Method to create new BasisSequence objects */ virtual BasisSequence build(const Sample & x, const Sample & y, const Basis & psi, const Indices & indices); #ifndef SWIG // virtual BasisSequence build(const Sample & y, // const Indices & indices, // const DesignProxy & proxy); virtual void initialize(); virtual void updateBasis(LeastSquaresMethod & method, const Sample & y); #endif /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: Scalar relativeConvergence_; Point coefficients_; Point mu_; Scalar oldCoefficientsL1Norm_; Scalar coefficientsL1Norm_; Indices predictors_; Indices inPredictors_; mutable Matrix mPsiX_; }; /* class LARS */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LARS_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearBasisFactory.hxx000066400000000000000000000033101307543307100250340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Linear canonical basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARBASISFACTORY_HXX #define OPENTURNS_LINEARBASISFACTORY_HXX #include "openturns/BasisFactory.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API LinearBasisFactory : public BasisFactory { CLASSNAME; public: /** Default constructor */ explicit LinearBasisFactory (const UnsignedInteger inputDimension = 1); /* String converter */ OT::String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual LinearBasisFactory * clone() const; /** @copydoc BasisFactory::build() const */ virtual Basis build() const; /* Method save() stores the object through the StorageManager */ void save(OT::Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(OT::Advocate & adv); private: UnsignedInteger inputDimension_; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Func/openturns/LinearCombinationEvaluation.hxx000066400000000000000000000076151307543307100267510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARCOMBINATIONEVALUATION_HXX #define OPENTURNS_LINEARCOMBINATIONEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearCombinationEvaluation * * The evaluation part of linear combination of polynomials */ class OT_API LinearCombinationEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; // friend class Factory; /** Default constructor */ LinearCombinationEvaluation(); public: /** Parameter constructor */ LinearCombinationEvaluation(const FunctionCollection & functionsCollection, const Point & coefficients); /** Virtual constructor */ virtual LinearCombinationEvaluation * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Evaluation operator */ Point operator () (const Point & inP) const; Sample operator () (const Sample & inS) const; /** Coefficients accessor */ Point getCoefficients() const; /** Functions accessor */ FunctionCollection getFunctionsCollection() const; void setFunctionsCollectionAndCoefficients(const FunctionCollection & functionsCollection, const Point & coefficients); /** Input dimension accessor */ UnsignedInteger getInputDimension() const; /** Output dimension accessor */ UnsignedInteger getOutputDimension() const; /** Gradient according to the marginal parameters */ Matrix parameterGradient(const Point & inP) const; /** Parameters value accessor */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Make the gradient and the hessian friend classes of the evaluation in order to share the functions and the coefficients friend class LinearCombinationGradient; friend class LinearCombinationHessian; friend struct LinearCombinationEvaluationPointFunctor; // The functions of the combination FunctionPersistentCollection functionsCollection_; // The coefficients of the combination Point coefficients_; // The flag telling if the combination reduces to zero Bool isZero_; } ; /* class LinearCombinationEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARCOMBINATIONEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearCombinationFunction.hxx000066400000000000000000000034371307543307100264250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements linear combination of functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARCOMBINATIONFUNCTION_HXX #define OPENTURNS_LINEARCOMBINATIONFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearCombinationFunction * */ class OT_API LinearCombinationFunction : public Function { CLASSNAME; public: /* Default constructor */ LinearCombinationFunction(); /** Parameter constructor */ LinearCombinationFunction(const FunctionCollection & functionCollection, const Point & coefficients); /** Comparison operator */ Bool operator ==(const LinearCombinationFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class LinearCombinationFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARCOMBINATIONFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearCombinationGradient.hxx000066400000000000000000000045201307543307100263670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The gradient part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARCOMBINATIONGRADIENT_HXX #define OPENTURNS_LINEARCOMBINATIONGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/LinearCombinationEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearCombinationGradient * * The gradient part of linear combination of polynomials */ class OT_API LinearCombinationGradient : public GradientImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ LinearCombinationGradient(); /** Parameters constructor */ LinearCombinationGradient(const LinearCombinationEvaluation & evaluation); /** Virtual constructor */ virtual LinearCombinationGradient * clone() const; /** Gradient method */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The associated evaluation */ LinearCombinationEvaluation evaluation_; } ; /* class LinearCombinationGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARCOMBINATIONGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearCombinationHessian.hxx000066400000000000000000000045111307543307100262240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The hessian part of linear combination of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARCOMBINATIONHESSIAN_HXX #define OPENTURNS_LINEARCOMBINATIONHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/LinearCombinationEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearCombinationHessian * * The hessian part of linear combination of polynomials */ class OT_API LinearCombinationHessian : public HessianImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ LinearCombinationHessian(); /** Parameters constructor */ LinearCombinationHessian(const LinearCombinationEvaluation & evaluation); /** Virtual constructor */ virtual LinearCombinationHessian * clone() const; /** Hessian method */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The associated evaluation */ LinearCombinationEvaluation evaluation_; } ; /* class LinearCombinationHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARCOMBINATIONHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearEnumerateFunction.hxx000066400000000000000000000055721307543307100261120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The bijective function to select polynomials in the orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARENUMERATEFUNCTION_HXX #define OPENTURNS_LINEARENUMERATEFUNCTION_HXX #include "openturns/EnumerateFunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearEnumerateFunction * * The bijective function to select polynomials in the orthogonal basis */ class OT_API LinearEnumerateFunction : public EnumerateFunctionImplementation { CLASSNAME; public: /** Default constructor */ LinearEnumerateFunction(); /** Parameter constructor */ explicit LinearEnumerateFunction(const UnsignedInteger dimension); /** Virtual constrcutor */ virtual LinearEnumerateFunction * clone() const; /** String converter */ virtual String __repr__() const; /** The bijective association between an integer and a set of indices */ virtual Indices operator() (const UnsignedInteger index) const; /** The inverse of the association */ virtual UnsignedInteger inverse(const Indices & indices) const; /** The cardinal of the given strata */ virtual UnsignedInteger getStrataCardinal(const UnsignedInteger strataIndex) const; /** The cardinal of the cumulated strata above or equal to the given strata */ virtual UnsignedInteger getStrataCumulatedCardinal(const UnsignedInteger strataIndex) const; /** The index of the strata of degree max <= maximumDegree */ virtual UnsignedInteger getMaximumDegreeStrataIndex(const UnsignedInteger maximumDegree) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Find the smallest n such that Binomial(n, n + dimension) > index and also returns the value of Binomial(n, n + dimension) */ UnsignedInteger findBinomialCoefficient(const UnsignedInteger index, const UnsignedInteger dimension, UnsignedInteger & BinomialCoefficient) const; } ; /* class LinearEnumerateFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARENUMERATEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearEvaluation.hxx000066400000000000000000000056771307543307100245740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a linear numerical math function implementation * of the form y = constant + where c is a * dim(x) numerical point, linear a dim(x) by dim(y) matrix * and means Transpose(linear).(x - c) * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_LINEARNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearEvaluation */ class OT_API LinearEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ LinearEvaluation(); /** Parameter constructor */ LinearEvaluation(const Point & center, const Point & constant, const Matrix & linear); /** Virtual constructor */ virtual LinearEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const LinearEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const; /** Operator () */ virtual Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the center */ Point getCenter() const; /** Accessor for the constant term */ Point getConstant() const; /** Accessor for the linear term */ Matrix getLinear() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Point center_; Point constant_; Matrix linear_; }; /* class LinearEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearFunction.hxx000066400000000000000000000036621307543307100242420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements linear numerical math functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARFUNCTION_HXX #define OPENTURNS_LINEARFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearFunction * * The class that simulates a linear numerical math function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the function, the gradient or the hessian. */ class OT_API LinearFunction : public Function { CLASSNAME; public: /* Some typedefs for easy reading */ /** Default constructor */ LinearFunction(const Point & center, const Point & constant, const Matrix & linear); /** Comparison operator */ Bool operator ==(const LinearFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class LinearFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/LinearGradient.hxx000066400000000000000000000056161307543307100242130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a quadratic numerical math gradient implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARGRADIENT_HXX #define OPENTURNS_LINEARGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearGradient * * This class offers an interface for an real numerical mathematical gradient * implementations into the platform. It realizes the computation of the image matrix * of a vector (aka Point) through the gradient. The * gradient may be loaded in an external way through a wrapper. */ class OT_API LinearGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ LinearGradient(); /** Parameter constructor */ LinearGradient(const Point & center, const Matrix & constant, const SymmetricTensor & linear); /** Virtual constructor */ virtual LinearGradient * clone() const; /** Comparison operator */ Bool operator ==(const LinearGradient & other) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the center */ Point getCenter() const; /** Accessor for the constant term */ Matrix getConstant() const; /** Accessor for the linear term */ SymmetricTensor getLinear() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Point center_; Matrix constant_; SymmetricTensor linear_; }; /* class LinearGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/MethodBoundEvaluation.hxx000066400000000000000000000141651307543307100255620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class gives a implementation for object's methods so they can be used in Functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_METHODBOUNDEVALUATION_HXX #define OPENTURNS_METHODBOUNDEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS struct OT_API NO_MATCH_ON_ReturnTypeAdapter {}; template struct ReturnTypeAdapter { typedef NO_MATCH_ON_ReturnTypeAdapter Type_; }; template <> struct ReturnTypeAdapter< Scalar > { typedef Scalar Type_; static inline Point toPoint( const Scalar val ) { return Point(1, val) ; } }; template <> struct ReturnTypeAdapter< Point > { typedef Point Type_; static inline Point toPoint( const Point & val ) { return val ; } }; struct OT_API NO_MATCH_ON_ArgumentTypeAdapter {}; template struct ArgumentTypeAdapter { typedef NO_MATCH_ON_ArgumentTypeAdapter Type_; }; template <> struct ArgumentTypeAdapter< Scalar > { typedef const Scalar Type_; static inline Scalar fromPoint( const Point & val ) { return val[0] ; } }; template <> struct ArgumentTypeAdapter< Point > { typedef const Point & Type_; static inline Point fromPoint( const Point & val ) { return val ; } }; template struct MethodAdapter : public ReturnTypeAdapter, public ArgumentTypeAdapter { typedef typename ArgumentTypeAdapter::Type_ ArgumentType; typedef typename ReturnTypeAdapter::Type_ ReturnType; }; /** * @class MethodBoundEvaluation * * This class gives a implementation for object's methods so they can be used in Functions */ template class MethodBoundEvaluation : public EvaluationImplementation { public: typedef typename MethodAdapter::ReturnType (EvaluableObject::*EvaluationMethod) (typename MethodAdapter::ArgumentType) const; /** Default constructor */ MethodBoundEvaluation( const EvaluableObject & obj, EvaluationMethod method, const UnsignedInteger inputDimension, const UnsignedInteger outputDimension ) : obj_(obj), method_(method), inputDimension_(inputDimension), outputDimension_(outputDimension) { // Build the descriptions setInputDescription(Description::BuildDefault(inputDimension, "x")); setOutputDescription(Description::BuildDefault(outputDimension, "y")); } /** Virtual constructor */ virtual MethodBoundEvaluation * clone() const { return new MethodBoundEvaluation(*this); } /** Comparison operator */ Bool operator ==(const MethodBoundEvaluation & other) const { return true; } /** String converter */ virtual String __repr__() const { OSS oss; oss << "class=MethodBoundEvaluation name=" << getName(); return oss; } /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const { Point result; // Specific code if cache is enabled if (p_cache_->isEnabled()) { CacheKeyType inKey = inP.getCollection(); // Evaluate the binded method if ( p_cache_->hasKey( inKey ) ) { result = Point::ImplementationType( p_cache_->find( inKey ) ); } else { ++callsNumber_; result = ReturnTypeAdapter::toPoint( ( obj_.*method_ ) ( ArgumentTypeAdapter::fromPoint( inP ) ) ); CacheValueType outValue(result.getCollection()); p_cache_->add( inKey, outValue ); } } // If cache is enabled else { ++callsNumber_; result = ReturnTypeAdapter::toPoint( ( obj_.*method_ ) ( ArgumentTypeAdapter::fromPoint( inP ) ) ); } // Cache disabled if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const { return inputDimension_; } /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const { return outputDimension_; } /** Method save() stores the object through the StorageManager * The inherited method is sufficient as we do not have any * attribute */ /** Method load() reloads the object from the StorageManager * The inherited method is sufficient as we do not have any * attribute */ protected: private: const EvaluableObject & obj_; EvaluationMethod method_; UnsignedInteger inputDimension_; UnsignedInteger outputDimension_; }; /* class MethodBoundEvaluation */ template FunctionImplementation bindMethod (const EvaluableObject & obj, typename MethodBoundEvaluation::EvaluationMethod method, const UnsignedInteger inputDimension, const UnsignedInteger outputDimension ) { return FunctionImplementation( new MethodBoundEvaluation( obj, method, inputDimension, outputDimension ) ); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_METHODBOUNDEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/MonomialFunction.hxx000066400000000000000000000042611307543307100245770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monomial function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MONOMIALFUNCTION_HXX #define OPENTURNS_MONOMIALFUNCTION_HXX #include "openturns/UniVariateFunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MonomialFunction * * Monomial function implementation */ class OT_API MonomialFunction : public UniVariateFunctionImplementation { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ explicit MonomialFunction(); /** Standard constructor */ MonomialFunction(const UnsignedInteger degree); /** Virtual constructor */ virtual MonomialFunction * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** UniVariateFunctionImplementation are evaluated as functors */ Scalar operator() (const Scalar x) const; /** UniVariateFunctionImplementation gradient */ Scalar gradient(const Scalar x) const; /** UniVariateFunctionImplementation hessian */ Scalar hessian(const Scalar x) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: UnsignedInteger degree_; } ; /* Class MonomialFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MONOMIALFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/MonomialFunctionFactory.hxx000066400000000000000000000037641307543307100261360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This a class for 1D monomial function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MONOMIALFUNCTIONFACTORY #define OPENTURNS_MONOMIALFUNCTIONFACTORY #include "openturns/UniVariateFunctionFactory.hxx" #include "openturns/MonomialFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MonomialFunctionFactory * * This a class for 1D monomial function factories */ class OT_API MonomialFunctionFactory : public UniVariateFunctionFactory { CLASSNAME; public: /** Default constructor */ MonomialFunctionFactory(); /** Virtual constructor */ MonomialFunctionFactory * clone() const; /** String converter */ String __repr__() const; /** The build method to get the function of any order as MonomialFunction. */ MonomialFunction buildAsMonomialFunction(const UnsignedInteger order) const; /** The method to get the function of any order. */ UniVariateFunction build(const UnsignedInteger order) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); } ; /* class MonomialFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MONOMIALFUNCTIONFACTORY */ openturns-1.9/lib/src/Base/Func/openturns/NoEvaluation.hxx000066400000000000000000000043731307543307100237260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for unavailable evaluation implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NOEVALUATION_HXX #define OPENTURNS_NOEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NoEvaluation * * Class for unavailable evaluation implementations */ class OT_API NoEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ NoEvaluation(); /** Virtual constructor */ virtual NoEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const NoEvaluation & other) const; /** String converter */ virtual String __repr__() const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager * The inherited method is sufficient as we do not have any * attribute */ /** Method load() reloads the object from the StorageManager * The inherited method is sufficient as we do not have any * attribute */ protected: private: }; /* class NoEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NONOEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/NoGradient.hxx000066400000000000000000000050511307543307100233460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math gradient implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NOGRADIENT_HXX #define OPENTURNS_NOGRADIENT_HXX #include "openturns/GradientImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NoGradient * * This class offers an interface for an real numerical mathematical gradient * implementations into the platform. It realizes the computation of the image vector * of a vector (aka Point) through the gradient. The * gradient may be loaded in an external way through a wrapper. */ class OT_API NoGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ NoGradient(); /** Virtual constructor */ virtual NoGradient * clone() const; /** Comparison operator */ Bool operator ==(const NoGradient & other) const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /** Method save() stores the object through the StorageManager * The inherited method is sufficient as we do not have any * attribute */ /** Method load() reloads the object from the StorageManager * The inherited method is sufficient as we do not have any * attribute */ protected: /** The gradient that actually realizes assignment between objects */ private: }; /* class NoGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NOGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/NoHessian.hxx000066400000000000000000000050421307543307100232030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math hessian implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NOHESSIAN_HXX #define OPENTURNS_NOHESSIAN_HXX #include "openturns/HessianImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NoHessian * * This class offers an interface for an real numerical mathematical hessian * implementations into the platform. It realizes the computation of the image vector * of a vector (aka Point) through the hessian. The * hessian may be loaded in an external way through a wrapper. */ class OT_API NoHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ NoHessian(); /** Virtual constructor */ virtual NoHessian * clone() const; /** Comparison operator */ Bool operator ==(const NoHessian & other) const; /** String converter */ virtual String __repr__() const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Hessian method */ virtual SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager * The inherited method is sufficient as we do not have any * attribute */ /** Method load() reloads the object from the StorageManager * The inherited method is sufficient as we do not have any * attribute */ protected: /** The hessian that actually realizes assignment between objects */ private: }; /* class NoHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NOHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/OTFunc.hxx000066400000000000000000000131701307543307100224530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Func * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTFUNC_HXX #define OPENTURNS_OTFUNC_HXX #include "openturns/AggregatedFunction.hxx" #include "openturns/AggregatedEvaluation.hxx" #include "openturns/AggregatedGradient.hxx" #include "openturns/AggregatedHessian.hxx" #ifdef OPENTURNS_HAVE_MUPARSER #include "openturns/SymbolicEvaluation.hxx" #include "openturns/SymbolicGradient.hxx" #include "openturns/SymbolicHessian.hxx" #endif #include "openturns/Basis.hxx" #include "openturns/BasisSequence.hxx" #include "openturns/BasisSequenceImplementation.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/BasisSequenceFactoryImplementation.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/ComposedEvaluation.hxx" #include "openturns/ComposedGradient.hxx" #include "openturns/ComposedHessian.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" #include "openturns/DatabaseFunction.hxx" #include "openturns/DatabaseEvaluation.hxx" #include "openturns/DualLinearCombinationFunction.hxx" #include "openturns/DualLinearCombinationEvaluation.hxx" #include "openturns/DualLinearCombinationGradient.hxx" #include "openturns/DualLinearCombinationHessian.hxx" #include "openturns/FieldFunction.hxx" #include "openturns/FieldFunctionImplementation.hxx" #include "openturns/EnumerateFunction.hxx" #include "openturns/EnumerateFunctionImplementation.hxx" #include "openturns/LinearCombinationFunction.hxx" #include "openturns/LinearEnumerateFunction.hxx" #include "openturns/HyperbolicAnisotropicEnumerateFunction.hxx" #include "openturns/ExpertMixture.hxx" #include "openturns/IndicatorEvaluation.hxx" #include "openturns/LARS.hxx" #include "openturns/LinearCombinationEvaluation.hxx" #include "openturns/LinearCombinationGradient.hxx" #include "openturns/LinearCombinationHessian.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/IdentityEvaluation.hxx" #include "openturns/IdentityFunction.hxx" #include "openturns/IndicatorFunction.hxx" #include "openturns/QuadraticFunction.hxx" #include "openturns/LinearGradient.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/NoEvaluation.hxx" #include "openturns/NoGradient.hxx" #include "openturns/NoHessian.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/HessianImplementation.hxx" #include "openturns/ParametricFunction.hxx" #include "openturns/ParametricEvaluation.hxx" #include "openturns/ParametricGradient.hxx" #include "openturns/ParametricHessian.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/PiecewiseLinearEvaluation.hxx" #include "openturns/PiecewiseHermiteEvaluation.hxx" #include "openturns/ProductEvaluation.hxx" #include "openturns/ProductFunction.hxx" #include "openturns/ProductGradient.hxx" #include "openturns/ProductHessian.hxx" #include "openturns/ProductPolynomialEvaluation.hxx" #include "openturns/ProductPolynomialGradient.hxx" #include "openturns/ProductPolynomialHessian.hxx" #include "openturns/QuadraticEvaluation.hxx" #include "openturns/ValueFunction.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/VertexValueFunction.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/UniVariatePolynomialImplementation.hxx" #include "openturns/UniVariateFunction.hxx" #include "openturns/UniVariateFunctionImplementation.hxx" #include "openturns/FourierSeries.hxx" #include "openturns/HaarWavelet.hxx" #include "openturns/ProductUniVariateFunctionEvaluation.hxx" #include "openturns/ProductUniVariateFunctionGradient.hxx" #include "openturns/ProductUniVariateFunctionHessian.hxx" #include "openturns/UniVariateFunctionFamily.hxx" #include "openturns/UniVariateFunctionFactory.hxx" #include "openturns/TensorizedUniVariateFunctionFactory.hxx" #include "openturns/MonomialFunction.hxx" #include "openturns/MonomialFunctionFactory.hxx" #include "openturns/OTSpecFunc.hxx" #include "openturns/BoxCoxEvaluation.hxx" #include "openturns/BoxCoxGradient.hxx" #include "openturns/BoxCoxHessian.hxx" #include "openturns/BoxCoxTransform.hxx" #include "openturns/InverseBoxCoxEvaluation.hxx" #include "openturns/InverseBoxCoxGradient.hxx" #include "openturns/InverseBoxCoxHessian.hxx" #include "openturns/InverseBoxCoxTransform.hxx" #include "openturns/TrendEvaluation.hxx" #include "openturns/TrendTransform.hxx" #include "openturns/InverseTrendEvaluation.hxx" #include "openturns/InverseTrendTransform.hxx" #include "openturns/FunctionalBasis.hxx" #include "openturns/FunctionalBasisImplementation.hxx" #include "openturns/FiniteBasis.hxx" #include "openturns/ConstantBasisFactory.hxx" #include "openturns/LinearBasisFactory.hxx" #include "openturns/QuadraticBasisFactory.hxx" #endif /* OPENTURNS_OTFUNC_HXX */ openturns-1.9/lib/src/Base/Func/openturns/P1LagrangeEvaluation.hxx000066400000000000000000000077571307543307100253040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief P1 Lagrange piecewise linear function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_P1LAGRANGEEVALUATION_HXX #define OPENTURNS_P1LAGRANGEEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class P1LagrangeEvaluation * Provided a field, compute the P1 piecewise-linear Lagrange interpolation. */ class OT_API P1LagrangeEvaluation : public EvaluationImplementation { CLASSNAME; friend class FunctionImplementation; friend class P1LagrangeEvaluationComputeSamplePolicy; public: typedef Mesh::IndicesCollection IndicesCollection; /** Default constructor */ P1LagrangeEvaluation(); /** Default constructor */ explicit P1LagrangeEvaluation(const Field & field); /** Virtual constructor */ virtual P1LagrangeEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const P1LagrangeEvaluation & other) const; /** String converter */ String __repr__() const; String __str__( const String & offset = "" ) const; /** Field accessor */ void setField(const Field & field); Field getField() const; /** Mesh accessor */ void setMesh(const Mesh & mesh); Mesh getMesh() const; /** Vertices accessor */ void setVertices(const Sample & vertices); Sample getVertices() const; /** Simplices accessor */ void setSimplices(const IndicesCollection & simplices); IndicesCollection getSimplices() const; /** Values accessor */ void setValues(const Sample & values); Sample getValues() const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator()(const Point & inP) const; virtual Sample operator()(const Sample & inS) const; protected: Point evaluate(const Point & inP) const; public: /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* Mesh of the field defining the P1 Lagrange interpolation */ Mesh mesh_; /* Values of the field defining the P1 Lagrange interpolation */ Sample values_; private: class P1LagrangeEvaluationComputeSamplePolicy { const Sample & input_; Sample & output_; const P1LagrangeEvaluation & lagrange_; public: P1LagrangeEvaluationComputeSamplePolicy(const Sample & input, Sample & output, const P1LagrangeEvaluation & lagrange) : input_(input) , output_(output) , lagrange_(lagrange) { // Nothing to do } inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i] = lagrange_.evaluate(input_[i]); } // operator () }; // class P1LagrangeEvaluationComputeSamplePolicy }; /* class P1LagrangeEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_P1LAGRANGEEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ParametricEvaluation.hxx000066400000000000000000000065521307543307100254420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricEvaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PARAMETRICEVALUATION_HXX #define OPENTURNS_PARAMETRICEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Indices.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ParametricEvaluation * * ParametricEvaluation implements the concept of parametric function for its evaluation part */ class OT_API ParametricEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ ParametricEvaluation(); /** Parameters constructor */ ParametricEvaluation(const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet = true); /** Virtual constructor method */ ParametricEvaluation * clone() const; /** Evaluation operator */ using EvaluationImplementation::operator(); Point operator() (const Point & point) const; Sample operator() (const Point & point, const Sample & parameters); Sample operator() (const Sample & inS) const; /** Parameters positions accessor */ Indices getParametersPositions() const; /** Input positions accessor */ Indices getInputPositions() const; /** Function accessor */ Function getFunction() const; /** Dimension accessor */ UnsignedInteger getInputDimension() const; UnsignedInteger getParameterDimension() const; UnsignedInteger getOutputDimension() const; /** Parameters accessor */ void setParameter(const Point & parameters); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Input point / parameter history accessor */ Sample getInputPointHistory() const; Sample getInputParameterHistory() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: ParametricEvaluation(const ParametricEvaluation & evaluation, const Indices & set, const Point & referencePoint); private: friend class ParametricGradient; friend class ParametricHessian; /** The underlying function */ Function function_; /** The position of the parameters */ Indices parametersPositions_; /** The position of the input */ Indices inputPositions_; }; /* class ParametricEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PARAMETRICEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ParametricFunction.hxx000066400000000000000000000034401307543307100251110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements parametric functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PARAMETRICFUNCTION_HXX #define OPENTURNS_PARAMETRICFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ParametricFunction * */ class OT_API ParametricFunction : public Function { CLASSNAME; public: /* Default constructor */ ParametricFunction(); /** Parameter constructor */ ParametricFunction (const Function & function, const Indices & set, const Point & referencePoint, const Bool parametersSet = true); /** Comparison operator */ Bool operator ==(const ParametricFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class QuadraticFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PARAMETRICFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ParametricGradient.hxx000066400000000000000000000047641307543307100250730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricGradient * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PARAMETRICGRADIENT_HXX #define OPENTURNS_PARAMETRICGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/ParametricEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ParametricGradient * * ParametricGradient implements the concept of parametric function for its gradient part */ class OT_API ParametricGradient : public GradientImplementation { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ ParametricGradient(); /** Parameters constructor */ ParametricGradient(const EvaluationPointer & p_evaluation); /** Virtual constructor method */ ParametricGradient * clone() const; /** Gradient operator */ using GradientImplementation::gradient; Matrix gradient(const Point & point) const; Matrix gradient(const Point & point, const Point & parameters) const; /** Evaluation accessor */ ParametricEvaluation getEvaluation() const; /** Dimension accessor */ UnsignedInteger getInputDimension() const; UnsignedInteger getParameterDimension() const; UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The underlying function */ EvaluationPointer p_evaluation_; }; /* class ParametricGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PARAMETRICGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ParametricHessian.hxx000066400000000000000000000047731307543307100247300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ParametricHessian * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PARAMETRICHESSIAN_HXX #define OPENTURNS_PARAMETRICHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/ParametricEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ParametricHessian * * ParametricHessian implements the concept of parametric function for its hessian part */ class OT_API ParametricHessian : public HessianImplementation { CLASSNAME; public: typedef Pointer EvaluationPointer; /** Default constructor */ ParametricHessian(); /** Parameters constructor */ ParametricHessian(const EvaluationPointer & p_evaluation); /** Virtual constructor method */ ParametricHessian * clone() const; /** Hessian operator */ using HessianImplementation::hessian; SymmetricTensor hessian(const Point & point) const; SymmetricTensor hessian(const Point & point, const Point & parameters) const; /** Evaluation accessor */ ParametricEvaluation getEvaluation() const; /** Dimension accessor */ UnsignedInteger getInputDimension() const; UnsignedInteger getParameterDimension() const; UnsignedInteger getOutputDimension() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The underlying function */ EvaluationPointer p_evaluation_; }; /* class ParametricHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PARAMETRICHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/PiecewiseHermiteEvaluation.hxx000066400000000000000000000067371307543307100266130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of a hermite piecewise scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PIECEWISEHERMITEEVALUATION_HXX #define OPENTURNS_PIECEWISEHERMITEEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PiecewiseHermiteEvaluation * * The evaluation part of a hermite piecewise scalar function * */ class OT_API PiecewiseHermiteEvaluation : public EvaluationImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ PiecewiseHermiteEvaluation(); /** Parameter constructor */ PiecewiseHermiteEvaluation(const Point & locations, const Point & values, const Point & derivatives); /** Parameter constructor */ PiecewiseHermiteEvaluation(const Point & locations, const Sample & values, const Sample & derivatives); /** Virtual constructor */ virtual PiecewiseHermiteEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Evaluation operator */ using EvaluationImplementation::operator (); Point operator () (const Point & inP) const; /** Compute the derivative */ Point derivate(const Point & inP) const; /** Locations accessor */ Point getLocations() const; void setLocations(const Point & locations); /** Values accessor */ Sample getValues() const; void setValues(const Sample & values); /** Derivatives accessor */ Sample getDerivatives() const; void setDerivatives(const Sample & derivatives); /** Simultaneous locations and values acessor */ void setLocationsValuesAndDerivatives(const Point & locations, const Sample & values, const Sample & derivatives); /** Input dimension accessor */ UnsignedInteger getInputDimension() const; /** Output dimension accessor */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // The locations Point locations_; // The values Sample values_; // The derivatives Sample derivatives_; // Are locations regularly spaced? Bool isRegular_; } ; /* class PiecewiseHermiteEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PIECEWISEHERMITEEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/PiecewiseLinearEvaluation.hxx000066400000000000000000000061011307543307100264110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The evaluation part of a linear piecewise scalar function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PIECEWISELINEAREVALUATION_HXX #define OPENTURNS_PIECEWISELINEAREVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PiecewiseLinearEvaluation * * The evaluation part of a linear piecewise scalar function * */ class OT_API PiecewiseLinearEvaluation : public EvaluationImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ PiecewiseLinearEvaluation(); /** Parameter constructor */ PiecewiseLinearEvaluation(const Point & locations, const Point & values); /** Parameter constructor */ PiecewiseLinearEvaluation(const Point & locations, const Sample & values); /** Virtual constructor */ virtual PiecewiseLinearEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Evaluation operator */ using EvaluationImplementation::operator (); Point operator () (const Point & inP) const; /** Locations accessor */ Point getLocations() const; void setLocations(const Point & locations); /** Values accessor */ Sample getValues() const; void setValues(const Point & values); void setValues(const Sample & values); /** Simultaneous locations and values acessor */ void setLocationsAndValues(const Point & locations, const Sample & values); /** Input dimension accessor */ UnsignedInteger getInputDimension() const; /** Output dimension accessor */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // The locations Point locations_; // The values Sample values_; // Are locations regularly spaced? Bool isRegular_; } ; /* class PiecewiseLinearEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PIECEWISELINEAREVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductEvaluation.hxx000066400000000000000000000052351307543307100247700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical * math functions implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * * \author $LastChangedBy: lebrun $ * \date $LastChangedDate: 2008-07-03 08:31:34 +0200 (jeu, 03 jui 2008) $ */ #ifndef OPENTURNS_PRODUCTNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_PRODUCTNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductEvaluation * * The class that implement the composition of two numerical math functions implementations. */ class OT_API ProductEvaluation : public EvaluationImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer EvaluationPointer; /** Default constructor */ ProductEvaluation(const EvaluationPointer & p_leftEvaluation, const EvaluationPointer & p_rightEvaluation); /** Virtual constructor */ virtual ProductEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const ProductEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameter); /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ProductEvaluation() {}; friend class Factory; private: /** The function f in h = f . g */ EvaluationPointer p_leftEvaluation_; /** The function g in h = f . g */ EvaluationPointer p_rightEvaluation_; }; /* class ProductEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTNUMERICALMATHFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductFunction.hxx000066400000000000000000000043011307543307100244370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements product numerical math functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTFUNCTION_HXX #define OPENTURNS_PRODUCTFUNCTION_HXX #include "openturns/FunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductFunction */ class OT_API ProductFunction : public FunctionImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ /** Composition constructor */ ProductFunction(const Implementation & p_left, const Implementation & p_right); /** Virtual constructor */ virtual ProductFunction * clone() const; /** Comparison operator */ Bool operator ==(const ProductFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ProductFunction() {}; friend class Factory; private: /** The f function in fog */ Implementation p_leftFunction_; /** The g function in fog */ Implementation p_rightFunction_; }; /* class ProductFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductGradient.hxx000066400000000000000000000057661307543307100244270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTGRADIENT_HXX #define OPENTURNS_PRODUCTGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductGradient * * The class that implement the composition of two numerical math functions, * its gradient and its hessian. This class has no implementation class */ class OT_API ProductGradient : public GradientImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer EvaluationPointer; typedef Pointer GradientPointer; /** Default constructor */ ProductGradient(const EvaluationPointer & p_leftEvaluation, const GradientPointer & p_leftGradient, const EvaluationPointer & p_rightEvaluation, const GradientPointer & p_rightGradient); /** Virtual constructor */ virtual ProductGradient * clone() const; /** Comparison operator */ Bool operator ==(const ProductGradient & other) const; /** String converter */ virtual String __repr__() const; /** Method gradient() returns the Jacobian transposed matrix of the function at point */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ProductGradient() {}; friend class Factory; private: /** The evaluation of f in h = f . g */ EvaluationPointer p_leftEvaluation_; /** The gradient of f in h = f . g */ GradientPointer p_leftGradient_; /** The evaluation of g in h = f . g */ EvaluationPointer p_rightEvaluation_; /** The gradient of g in h = f . g */ GradientPointer p_rightGradient_; }; /* class ProductGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductHessian.hxx000066400000000000000000000063771307543307100242630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the composition between numerical math hessians * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTHESSIAN_HXX #define OPENTURNS_PRODUCTHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductHessian * * The class that implement the composition of two numerical math hessians */ class OT_API ProductHessian : public HessianImplementation { CLASSNAME; public: /* Some typedefs for easy reading */ typedef Pointer HessianPointer; typedef Pointer GradientPointer; typedef Pointer EvaluationPointer; /** Default constructor */ ProductHessian(const EvaluationPointer & p_leftEvaluation, const GradientPointer & p_leftGradient, const HessianPointer & p_leftHessian, const EvaluationPointer & p_rightEvaluation, const GradientPointer & p_rightGradient, const HessianPointer & p_rightHessian); /** Virtual constructor */ virtual ProductHessian * clone() const; /** Comparison operator */ Bool operator ==(const ProductHessian & other) const; /** String converter */ virtual String __repr__() const; /** Method hessian() returns the symmetric tensor of the function at point */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: ProductHessian() {}; friend class Factory; private: /** The function of f in h = f . g */ EvaluationPointer p_leftEvaluation_; /** The gradient of f in h = f . g */ GradientPointer p_leftGradient_; /** The hessian of f in h = f . g */ HessianPointer p_leftHessian_; /** The function g in h = f . g */ EvaluationPointer p_rightEvaluation_; /** The gradient of g in h = f . g */ GradientPointer p_rightGradient_; /** The hessian of g in h = f . g */ HessianPointer p_rightHessian_; }; /* class ProductHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductPolynomialEvaluation.hxx000066400000000000000000000053001307543307100270250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTPOLYNOMIALEVALUATION_HXX #define OPENTURNS_PRODUCTPOLYNOMIALEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductPolynomialEvaluation * * This is a nD polynomial build as a product of n 1D polynomial */ class OT_API ProductPolynomialEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection PolynomialCollection; typedef PersistentCollection PolynomialPersistentCollection; /** Constructor */ ProductPolynomialEvaluation(const PolynomialCollection & coll); /** Virtual constructor */ virtual ProductPolynomialEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ virtual Point operator() (const Point & inP) const; virtual Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /* Default constructor */ ProductPolynomialEvaluation(); private: /** The set of 1d polynomials to build the nD polynomial */ PolynomialPersistentCollection polynomials_; } ; /* class ProductPolynomialEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTPOLYNOMIALEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductPolynomialGradient.hxx000066400000000000000000000051421307543307100264570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTPOLYNOMIALGRADIENT_HXX #define OPENTURNS_PRODUCTPOLYNOMIALGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductPolynomialGradient * * This is a nD polynomial build as a product of n 1D polynomial */ class OT_API ProductPolynomialGradient : public GradientImplementation { CLASSNAME; public: typedef Collection PolynomialCollection; typedef PersistentCollection PolynomialPersistentCollection; /** Constructor */ ProductPolynomialGradient(const PolynomialCollection & coll); /** Virtual constructor */ virtual ProductPolynomialGradient * clone() const; /** String converter */ virtual String __repr__() const; /** Compute the gradient of a product of univariate polynomials */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /* Default constructor */ ProductPolynomialGradient(); private: /** The set of 1d polynomials to build the nD polynomial */ PolynomialPersistentCollection polynomials_; } ; /* class ProductPolynomialGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTPOLYNOMIALGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductPolynomialHessian.hxx000066400000000000000000000051361307543307100263170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTPOLYNOMIALHESSIAN_HXX #define OPENTURNS_PRODUCTPOLYNOMIALHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductPolynomialHessian * * This is a nD polynomial build as a product of n 1D polynomial */ class OT_API ProductPolynomialHessian : public HessianImplementation { CLASSNAME; public: typedef Collection PolynomialCollection; typedef PersistentCollection PolynomialPersistentCollection; /** Constructor */ ProductPolynomialHessian(const PolynomialCollection & coll); /** Virtual constructor */ virtual ProductPolynomialHessian * clone() const; /** String converter */ virtual String __repr__() const; /** Compute the hessian of a product of univariate polynomials */ virtual SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /* Default constructor */ ProductPolynomialHessian(); private: /** The set of 1d polynomials to build the nD polynomial */ PolynomialPersistentCollection polynomials_; } ; /* class ProductPolynomialHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTPOLYNOMIALHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductUniVariateFunctionEvaluation.hxx000066400000000000000000000055771307543307100304770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTUNIVARIATEFUNCTIONEVALUATION_HXX #define OPENTURNS_PRODUCTUNIVARIATEFUNCTIONEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/UniVariateFunction.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductUniVariateFunctionEvaluation * * This is a nD function build as a product of n 1D function */ class OT_API ProductUniVariateFunctionEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection UniVariateFunctionCollection; typedef PersistentCollection UniVariateFunctionPersistentCollection; /** Constructor */ ProductUniVariateFunctionEvaluation(const UniVariateFunctionCollection & coll); /** Virtual constructor */ virtual ProductUniVariateFunctionEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ virtual Point operator() (const Point & inP) const; virtual Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; friend class ProductUniVariateFunctionGradient; friend class ProductUniVariateFunctionHessian; /* Default constructor */ ProductUniVariateFunctionEvaluation(); private: /** The set of 1d functions to build the nD function */ UniVariateFunctionPersistentCollection functions_; } ; /* class ProductUniVariateFunctionEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTUNIVARIATEFUNCTIONEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductUniVariateFunctionGradient.hxx000066400000000000000000000047041307543307100301140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD polynomial build as a product of n 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTUNIVARIATEFUNCTIONGRADIENT_HXX #define OPENTURNS_PRODUCTUNIVARIATEFUNCTIONGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/ProductUniVariateFunctionEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductUniVariateFunctionGradient * * This is a nD polynomial build as a product of n 1D polynomial */ class OT_API ProductUniVariateFunctionGradient : public GradientImplementation { CLASSNAME; public: /** Constructor */ ProductUniVariateFunctionGradient(const Pointer & p_evaluation); /** Virtual constructor */ virtual ProductUniVariateFunctionGradient * clone() const; /** String converter */ virtual String __repr__() const; /** Compute the gradient of a product of univariate polynomials */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /* Default constructor */ ProductUniVariateFunctionGradient(); private: Pointer p_evaluation_; } ; /* class ProductUniVariateFunctionGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTUNIVARIATEFUNCTIONGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ProductUniVariateFunctionHessian.hxx000066400000000000000000000046701307543307100277530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTUNIVARIATEFUNCTIONHESSIAN_HXX #define OPENTURNS_PRODUCTUNIVARIATEFUNCTIONHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/ProductUniVariateFunctionEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductUniVariateFunctionHessian * * This is a nD function build as a product of n 1D function */ class OT_API ProductUniVariateFunctionHessian : public HessianImplementation { CLASSNAME; public: /** Constructor */ ProductUniVariateFunctionHessian(const Pointer & p_evaluation); /** Virtual constructor */ virtual ProductUniVariateFunctionHessian * clone() const; /** String converter */ virtual String __repr__() const; /** Compute the hessian of a product of univariate polynomials */ virtual SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /* Default constructor */ ProductUniVariateFunctionHessian(); private: Pointer p_evaluation_; } ; /* class ProductUniVariateFunctionHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTUNIVARIATEFUNCTIONHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/QuadraticBasisFactory.hxx000066400000000000000000000033321307543307100255430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Quadratic canonical basis factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUADRATICBASISFACTORY_HXX #define OPENTURNS_QUADRATICBASISFACTORY_HXX #include "openturns/BasisFactory.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API QuadraticBasisFactory : public BasisFactory { CLASSNAME; public: /** Default constructor */ explicit QuadraticBasisFactory (const UnsignedInteger inputDimension = 1); /* String converter */ OT::String __repr__() const; /* Here is the interface that all derived class must implement */ /* Virtual constructor */ virtual QuadraticBasisFactory * clone() const; /** @copydoc BasisFactory::build() const */ virtual Basis build() const; /* Method save() stores the object through the StorageManager */ void save(OT::Advocate & adv) const; /* Method load() reloads the object from the StorageManager */ void load(OT::Advocate & adv); private: UnsignedInteger inputDimension_; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Func/openturns/QuadraticEvaluation.hxx000066400000000000000000000061271307543307100252660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a quadratic numerical math function implementation * of the form y = constant + + <, x-c> * where constant is a dim(y) numerical point, c a dim(x) numerical * point, linear is a dim(x) by dim(y) matrix, quadratic is a * dim(x) by dim(x) by dim(y) symmetric tensor and * means Transpose(linear).x, means * Transpose_kj(quadratic).x * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_QUADRATICEVALUATION_HXX #define OPENTURNS_QUADRATICEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuadraticEvaluation * * This class offers an interface for an real numerical mathematical evaluation * implementations into the platform. It realizes the computation of the image vector * of a vector (aka Point) through the evaluation. The * evaluation may be loaded in an external way through a wrapper. */ class OT_API QuadraticEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ QuadraticEvaluation(); /** Parameter constructor */ QuadraticEvaluation(const Point & center, const Point & constant, const Matrix & linear, const SymmetricTensor & quadratic); /** Virtual constructor */ virtual QuadraticEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const QuadraticEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Accessor for the center */ Point getCenter() const; /** Accessor for the constant term */ Point getConstant() const; /** Accessor for the linear term */ Matrix getLinear() const; /** Accessor for the quadratic term */ SymmetricTensor getQuadratic() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Point center_; Point constant_; Matrix linear_; SymmetricTensor quadratic_; }; /* class QuadraticEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRATICEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/QuadraticFunction.hxx000066400000000000000000000041361307543307100247420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements quadratic numerical math functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUADRATICNUMERICALMATHFUNCTION_HXX #define OPENTURNS_QUADRATICNUMERICALMATHFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuadraticFunction * * The class that simulates a linear numerical math function, * its gradient and its hessian. This class is just an interface * to actual implementation objects that can be hot-replaced * during computation. Each implementation object refers to * the function, the gradient or the hessian. */ class OT_API QuadraticFunction : public Function { CLASSNAME; public: /* Some typedefs for easy reading */ /** Default constructor */ QuadraticFunction (const Point & center, const Point & constant, const Matrix & linear, const SymmetricTensor & quadratic); /** Comparison operator */ Bool operator ==(const QuadraticFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class QuadraticFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRATICNUMERICALMATHFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/SymbolicEvaluation.hxx000066400000000000000000000055131307543307100251300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the evaluation of an analytical function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_SYMBOLICEVALUATION_HXX #define OPENTURNS_SYMBOLICEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/SymbolicParser.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SymbolicEvaluation * * The class that implement the evaluation of an analytical function. */ class OT_API SymbolicEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ SymbolicEvaluation(); /** Default constructor */ SymbolicEvaluation(const Description & inputVariablesNames, const Description & outputVariablesNames, const Description & formulas); /** Virtual constructor */ virtual SymbolicEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const SymbolicEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Accessor to the input variables names */ Description getInputVariablesNames() const; /** Accessor to the output variables names */ Description getOutputVariablesNames() const; /** Accessor to the formulas */ Description getFormulas() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: friend class SymbolicGradient; friend class SymbolicHessian; Description inputVariablesNames_; Description outputVariablesNames_; Description formulas_; /** A mathematical expression parser from the muParser library */ mutable SymbolicParser parser_; }; /* class SymbolicEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SYMBOLICEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/SymbolicFunction.hxx000066400000000000000000000047611307543307100246120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements symbolic functions. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SYMBOLICFUNCTION_HXX #define OPENTURNS_SYMBOLICFUNCTION_HXX #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SymbolicFunction * */ class OT_API SymbolicFunction : public Function { CLASSNAME; public: /* Default constructor */ SymbolicFunction(); /** Parameter constructor */ SymbolicFunction (const String & inputVariableName, const String & formula); /** Parameter constructor */ SymbolicFunction (const Description & inputVariablesNames, const Description & formulas); /** Comparison operator */ Bool operator ==(const SymbolicFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Static methods for documentation of analytical fnctions */ static Description GetValidConstants(); static Description GetValidFunctions(); static Description GetValidOperators(); private: /** List of muParser valid constants */ static Description ValidConstants_; /** List of muParser valid functions */ static Description ValidFunctions_; /** List of muParser valid operators */ static Description ValidOperators_; /** Flag to tell if the documentation has been initialized */ static Bool IsDocumentationInitialized_; /** Method that initialize the fields related to the documentation of the analytical functions */ static void InitializeDocumentation(); }; /* class QuadraticFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SYMBOLICFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/SymbolicGradient.hxx000066400000000000000000000051441307543307100245560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the gradient of an analytical function. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_SYMBOLICGRADIENT_HXX #define OPENTURNS_SYMBOLICGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/SymbolicEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SymbolicGradient * * The class that implement the gradient of an analytical function. */ class OT_API SymbolicGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ SymbolicGradient(); /** Default constructor */ SymbolicGradient(const SymbolicEvaluation & evaluation); /** Virtual constructor */ virtual SymbolicGradient * clone() const; /** Comparison operator */ Bool operator ==(const SymbolicGradient & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using GradientImplementation::gradient; Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor to a specific formula */ String getFormula(const UnsignedInteger i, const UnsignedInteger j) const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /* Must initialize the parser at the first call to operator() as the reference associated with the variables may have change after the construction */ void initialize() const; mutable Bool isInitialized_; mutable Bool isAnalytical_; SymbolicEvaluation evaluation_; /** A mathematical expression parser from the muParser library */ mutable SymbolicParser parser_; }; /* class SymbolicGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SYMBOLICGRADIENT_HXX */ openturns-1.9/lib/src/Base/Func/openturns/SymbolicHessian.hxx000066400000000000000000000052041307543307100244100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements the Hessian of analytical functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_SYMBOLICHESSIAN_HXX #define OPENTURNS_SYMBOLICHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/SymbolicEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SymbolicHessian * * The class that implement the Hessian of analytical functions. */ class OT_API SymbolicHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ SymbolicHessian(); /** Default constructor */ SymbolicHessian(const SymbolicEvaluation & evaluation); /** Virtual constructor */ virtual SymbolicHessian * clone() const; /** Comparison operator */ Bool operator ==(const SymbolicHessian & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using HessianImplementation::hessian; SymmetricTensor hessian(const Point & inP) const; /** Accessor to a specific formula */ String getFormula(const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /* Must initialize the parser at the first call to operator() as the reference associated with the variables may have change after the construction */ void initialize() const; mutable Bool isInitialized_; mutable Bool isAnalytical_; SymbolicEvaluation evaluation_; /** A mathematical expression parser from the muParser library */ mutable SymbolicParser parser_; }; /* class SymbolicHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SYMBOLICHESSIAN_HXX */ openturns-1.9/lib/src/Base/Func/openturns/SymbolicParser.hxx000066400000000000000000000030101307543307100242430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A math expression parser * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SYMBOLICPARSER_HXX #define OPENTURNS_SYMBOLICPARSER_HXX #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS class MuParser; class SymbolicParser : public Object { public: /** Default constructor */ SymbolicParser(); Point operator()(const Point & inP) const; void setVariablesFormulas(const Description & inputVariablesNames, const Description & formulas); Description getFormulas() const; protected: void initialize() const; Description inputVariablesNames_; Description formulas_; mutable Collection > parsers_; mutable Point inputStack_; }; END_NAMESPACE_OPENTURNS #endif // OPENTURNS_SYMBOLICPARSER_HXX openturns-1.9/lib/src/Base/Func/openturns/TensorizedUniVariateFunctionFactory.hxx000066400000000000000000000064151307543307100304750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the tensorized function basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSORIZEDUNIVARIATEFUNCTIONFACTORY_HXX #define OPENTURNS_TENSORIZEDUNIVARIATEFUNCTIONFACTORY_HXX #include "openturns/FunctionalBasisImplementation.hxx" #include "openturns/EnumerateFunction.hxx" #include "openturns/Function.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/UniVariateFunctionFamily.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TensorizedUniVariateFunctionFactory * * This is the function basis */ class OT_API TensorizedUniVariateFunctionFactory : public FunctionalBasisImplementation { CLASSNAME; public: typedef Collection FunctionFamilyCollection; typedef PersistentCollection FunctionFamilyPersistentCollection; friend class Factory; /** Default constructor */ TensorizedUniVariateFunctionFactory(); /** Constructor */ TensorizedUniVariateFunctionFactory(const FunctionFamilyCollection & coll); /** Constructor */ TensorizedUniVariateFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction getEnumerateFunction() const; /** set the enumerate function that translate unidimensional indices into multidimensional indices */ void setEnumerateFunction(const EnumerateFunction & phi); /** set the function familly collection */ FunctionFamilyCollection getFunctionFamilyCollection() const; void setFunctionFamilyCollection(const FunctionFamilyCollection & coll); /** Virtual constructor */ virtual TensorizedUniVariateFunctionFactory * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** The 1D function family collection */ FunctionFamilyPersistentCollection coll_; /** The enumeration function that maps a linear index into a multi-indices */ EnumerateFunction phi_; } ; /* class TensorizedUniVariateFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TENSORIZEDUNIVARIATEFUNCTIONFACTORY_HXX */ openturns-1.9/lib/src/Base/Func/openturns/TrendEvaluation.hxx000066400000000000000000000041441307543307100244220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for Box Cox function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * */ #ifndef OPENTURNS_TRENDEVALUATION_HXX #define OPENTURNS_TRENDEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TrendEvaluation * * This class offers an easy evaluation of the Box Cox function defined by : * h(x) = \frac{x^\lambda - 1}{\lambda} for \lambda non zero, log(x) oherwise * Care that x should be positive */ class OT_API TrendEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ TrendEvaluation(); /** Parameter constructor */ TrendEvaluation(const Function & function); /** Virtual constructor */ virtual TrendEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const TrendEvaluation & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for the 1D function */ Function getFunction() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The 1D function underlying the Trend transform */ Function function_; }; /* class TrendEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRENDEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/TrendTransform.hxx000066400000000000000000000047001307543307100242640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRENDTRANSOFORM_HXX #define OPENTURNS_TRENDTRANSOFORM_HXX #include "openturns/VertexValueFunction.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TrendTransform * * The class that simulates a dynamical function based on a * numerical math function that acts only on the temporal part * of a time series. */ class InverseTrendTransform; class OT_API TrendTransform : public VertexValueFunction { CLASSNAME; public: typedef EvaluationImplementation::Implementation EvaluationPointer; /** Default constructor */ TrendTransform(); /** Parameter constructor */ explicit TrendTransform(const Function & function); /** Parameter constructor */ TrendTransform(const EvaluationPointer & p_evaluation); /** Parameter constructor */ TrendTransform(const EvaluationImplementation & evaluation); /** Virtual constructor */ virtual TrendTransform * clone() const; /** Comparison operator */ Bool operator ==(const TrendTransform & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Operator () */ using VertexValueFunction::operator(); Field operator() (const Field & inFld) const; /** Inverse accessor */ InverseTrendTransform getInverse() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class TrendTransform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRENDTRANSOFORM_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariateFunction.hxx000066400000000000000000000045431307543307100250760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Univariate function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEFUNCTION_HXX #define OPENTURNS_UNIVARIATEFUNCTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/UniVariateFunctionImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariateFunction * * Univariate function */ class OT_API UniVariateFunction : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ UniVariateFunction(); /** Constructor from implementation */ UniVariateFunction(const UniVariateFunctionImplementation & implementation); /** Constructor from implementation pointer */ UniVariateFunction(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ UniVariateFunction(UniVariateFunctionImplementation * p_implementation); #endif /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** UniVariateFunction are evaluated as functors */ Scalar operator() (const Scalar x) const; /** UniVariateFunctionImplementation gradient */ Scalar gradient(const Scalar x) const; /** UniVariateFunctionImplementation hessian */ Scalar hessian(const Scalar x) const; /** Method to draw the graph of the polynomial between given bounds */ Graph draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; } ; /* class UniVariateFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariateFunctionEvaluation.hxx000066400000000000000000000050711307543307100271230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a nD function build as a product of n 1D function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEFUNCTIONEVALUATION_HXX #define OPENTURNS_UNIVARIATEFUNCTIONEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/UniVariateFunction.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariateFunctionEvaluation * * This is a nD function build as a product of n 1D function */ class OT_API UniVariateFunctionEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Constructor */ UniVariateFunctionEvaluation(const UniVariateFunction & function); /** Virtual constructor */ virtual UniVariateFunctionEvaluation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ virtual Point operator() (const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; friend class ProductUniVariateFunctionGradient; friend class ProductUniVariateFunctionHessian; /* Default constructor */ UniVariateFunctionEvaluation(); private: /** The set of 1d functions to build the nD function */ UniVariateFunction function_; } ; /* class UniVariateFunctionEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEFUNCTIONEVALUATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariateFunctionFactory.hxx000066400000000000000000000043101307543307100264160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This an abstract class for 1D function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEFUNCTIONFACTORY #define OPENTURNS_UNIVARIATEFUNCTIONFACTORY #include "openturns/PersistentObject.hxx" #include "openturns/Collection.hxx" #include "openturns/UniVariateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariateFunctionFactory * * This an abstract class for 1D function factories */ class OT_API UniVariateFunctionFactory : public PersistentObject { CLASSNAME; public: typedef Collection UniVariateFunctionCollection; /** Virtual constructor */ virtual UniVariateFunctionFactory * clone() const; /** String converter */ virtual String __repr__() const; /** The method to get the function of any order. */ virtual UniVariateFunction build(const UnsignedInteger order) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Default constructor */ UniVariateFunctionFactory(); protected: friend class Factory; /** Cache initialization */ virtual void initializeCache(); /** A cache to save already computed functions */ mutable UniVariateFunctionCollection functionsCache_; } ; /* class UniVariateFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEFUNCTIONFACTORY */ openturns-1.9/lib/src/Base/Func/openturns/UniVariateFunctionFamily.hxx000066400000000000000000000034161307543307100262360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for function factories * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEFUNCTIONFAMILY_HXX #define OPENTURNS_UNIVARIATEFUNCTIONFAMILY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/UniVariateFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariateFunctionFamily * * This is the interface class for function factories */ class OT_API UniVariateFunctionFamily : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ UniVariateFunctionFamily(); /** Constructor from implementation */ UniVariateFunctionFamily(const UniVariateFunctionFactory & implementation); /** String converter */ virtual String __repr__() const; /** The method to get the function of any order. */ UniVariateFunction build(const UnsignedInteger order) const; protected: private: } ; /* class UniVariateFunctionFamily */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEFUNCTIONFAMILY_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariateFunctionImplementation.hxx000066400000000000000000000046141307543307100300030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Univariate function implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEFUNCTIONIMPLEMENTATION_HXX #define OPENTURNS_UNIVARIATEFUNCTIONIMPLEMENTATION_HXX #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariateFunctionImplementation * * Univariate function implementation */ class OT_API UniVariateFunctionImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ UniVariateFunctionImplementation(); /** Virtual constructor */ virtual UniVariateFunctionImplementation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** UniVariateFunctionImplementation are evaluated as functors */ virtual Scalar operator() (const Scalar x) const; /** UniVariateFunctionImplementation gradient */ virtual Scalar gradient(const Scalar x) const; /** UniVariateFunctionImplementation hessian */ virtual Scalar hessian(const Scalar x) const; /** Method to draw the graph of the function between given bounds */ virtual Graph draw (const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); } ; /* Class UniVariateFunctionImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEFUNCTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariatePolynomial.hxx000066400000000000000000000075771307543307100254460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEPOLYNOMIAL_HXX #define OPENTURNS_UNIVARIATEPOLYNOMIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/UniVariatePolynomialImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariatePolynomial * * This is a 1D polynomial */ class OT_API UniVariatePolynomial : public TypedInterfaceObject { CLASSNAME; public: typedef UniVariatePolynomialImplementation::ComplexCollection ComplexCollection; typedef UniVariatePolynomialImplementation::Coefficients Coefficients; /** Default constructor */ UniVariatePolynomial(); /** Constructor from coefficients */ UniVariatePolynomial(const Coefficients & coefficients); /** Constructor from implementation */ UniVariatePolynomial(const UniVariatePolynomialImplementation & implementation); /** Constructor from implementation pointer */ UniVariatePolynomial(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ UniVariatePolynomial(UniVariatePolynomialImplementation * p_implementation); #endif /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; virtual String __str__(const String & variableName, const String & offset) const; /** UniVariatePolynomial are evaluated as functors */ Scalar operator() (const Scalar x) const; Complex operator() (const Complex z) const; /** UniVariatePolynomialImplementation derivative */ Scalar gradient(const Scalar x) const; Scalar hessian(const Scalar x) const; /** Compute the derivative of the polynomial */ UniVariatePolynomial derivate() const; /** Multiply the polynomial P by a Scalar */ UniVariatePolynomial operator * (const Scalar scalar) const; /** Multiply the polynomial P by a polynomial Q */ UniVariatePolynomial operator * (const UniVariatePolynomial & uniVariatePolynomial) const; /** Multiply the polynomial by (x to the power deg) */ UniVariatePolynomial incrementDegree (const UnsignedInteger degree = 1) const; /** Realize the summation of two polynomials of any degree */ UniVariatePolynomial operator + (const UniVariatePolynomial & uniVariatePolynomial) const; /** Realize the substraction of two polynomials of any degree */ UniVariatePolynomial operator - (const UniVariatePolynomial & uniVariatePolynomial) const; /** Coefficients accessor */ void setCoefficients(const Coefficients & coefficients); Coefficients getCoefficients() const; /** Get the degree of the polynomial */ UnsignedInteger getDegree() const; /** Root of the polynomial of degree n as the eigenvalues of the associated matrix */ ComplexCollection getRoots() const; /** Method to draw the graph of the polynomial between given bounds */ Graph draw(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; } ; /* class UniVariatePolynomial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEPOLYNOMIAL_HXX */ openturns-1.9/lib/src/Base/Func/openturns/UniVariatePolynomialImplementation.hxx000066400000000000000000000101701307543307100303330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIVARIATEPOLYNOMIALIMPLEMENTATION_HXX #define OPENTURNS_UNIVARIATEPOLYNOMIALIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/Pointer.hxx" #include "openturns/UniVariateFunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniVariatePolynomialImplementation * * This is a 1D polynomial */ class OT_API UniVariatePolynomialImplementation : public UniVariateFunctionImplementation { CLASSNAME; public: typedef Pointer Implementation; typedef Matrix::ComplexCollection ComplexCollection; typedef Point Coefficients; /** Default constructor */ UniVariatePolynomialImplementation(); /** Constructor from coefficients */ UniVariatePolynomialImplementation(const Coefficients & coefficients); /** Virtual constructor */ virtual UniVariatePolynomialImplementation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; virtual String __str__(const String & variableName, const String & offset) const; /** UniVariatePolynomialImplementation are evaluated as functors */ virtual Scalar operator() (const Scalar x) const; Complex operator() (const Complex z) const; /** UniVariatePolynomialImplementation derivative */ virtual Scalar gradient(const Scalar x) const; virtual Scalar hessian(const Scalar x) const; /** Compute the derivative of the polynomial */ UniVariatePolynomialImplementation derivate() const; /** Multiply the polynomial P by a Scalar */ UniVariatePolynomialImplementation operator * (const Scalar scalar) const; /** Multiply the polynomial P by a polynomial Q */ UniVariatePolynomialImplementation operator * (const UniVariatePolynomialImplementation & uniVariatePolynomial) const; /** Multiply the polynomial by (x to the power degree) */ UniVariatePolynomialImplementation incrementDegree (const UnsignedInteger degree = 1) const; /** Sum of two polynomials of any degree */ UniVariatePolynomialImplementation operator + (const UniVariatePolynomialImplementation & uniVariatePolynomial) const; /** Substraction of two polynomials of any degree */ UniVariatePolynomialImplementation operator - (const UniVariatePolynomialImplementation & uniVariatePolynomial) const; /** Coefficients accessor */ void setCoefficients(const Coefficients & coefficients); Coefficients getCoefficients() const; /** Get the degree of the polynomial */ UnsignedInteger getDegree() const; /** Root of the polynomial of degree n as the eigenvalues of the associated matrix */ ComplexCollection getRoots() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Remove null leading coefficients */ void compactCoefficients(); /** The table of polynomial coefficients in ascending order: P(X) = C0 + C1 * X + ... + Cn * X^n */ Coefficients coefficients_; private: } ; /* Class UniVariatePolynomialImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIVARIATEPOLYNOMIALIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/ValueFunction.hxx000066400000000000000000000061651307543307100241050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_VALUEFUNCTION_HXX #define OPENTURNS_VALUEFUNCTION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FieldFunctionImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ValueFunction * * The class that simulates a dynamical function based on a * numerical math function that acts only on the spatial part * of a time series. */ class OT_API ValueFunction : public FieldFunctionImplementation { CLASSNAME; public: typedef EvaluationImplementation::Implementation EvaluationPointer; /** Default constructor */ explicit ValueFunction(const UnsignedInteger meshDimension = 1); /** Parameter constructor */ explicit ValueFunction(const Function & function, const UnsignedInteger meshDimension = 1); #ifndef SWIG /** Parameter constructor */ explicit ValueFunction(const EvaluationPointer & p_evaluation, const UnsignedInteger meshDimension = 1); #endif /** Parameter constructor */ explicit ValueFunction(const EvaluationImplementation & evaluation, const UnsignedInteger meshDimension = 1); /** Virtual constructor */ virtual ValueFunction * clone() const; /** Comparison operator */ Bool operator ==(const ValueFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using FieldFunctionImplementation::operator(); Field operator() (const Field & inFld) const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Evaluation accessor */ EvaluationPointer getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Pointer to the actual evaluation class */ EvaluationPointer p_evaluation_; }; /* class ValueFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_VALUEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Func/openturns/VertexValueFunction.hxx000066400000000000000000000063201307543307100252740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all numerical math function implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_VERTEXVALUEFUNCTION_HXX #define OPENTURNS_VERTEXVALUEFUNCTION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FieldFunctionImplementation.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class VertexValueFunction * * The class that simulates a dynamical function based on a * numerical math function that acts only on the temporal part * of a time series. */ class OT_API VertexValueFunction : public FieldFunctionImplementation { CLASSNAME; public: typedef EvaluationImplementation::Implementation EvaluationPointer; /** Default constructor */ explicit VertexValueFunction(const UnsignedInteger meshDimension = 1); /** Parameter constructor */ explicit VertexValueFunction(const Function & function, const UnsignedInteger meshDimension = 1); #ifndef SWIG /** Parameter constructor */ explicit VertexValueFunction(const EvaluationPointer & p_evaluation, const UnsignedInteger meshDimension = 1); #endif /** Parameter constructor */ explicit VertexValueFunction(const EvaluationImplementation & evaluation, const UnsignedInteger meshDimension = 1); /** Virtual constructor */ virtual VertexValueFunction * clone() const; /** Comparison operator */ Bool operator ==(const VertexValueFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using FieldFunctionImplementation::operator(); Field operator() (const Field & inFld) const; /** Get the i-th marginal function */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the function corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Evaluation accessor */ EvaluationPointer getEvaluation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Pointer to the actual evaluation class */ EvaluationPointer p_evaluation_; }; /* class VertexValueFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_VERTEXVALUEFUNCTION_HXX */ openturns-1.9/lib/src/Base/Geom/000077500000000000000000000000001307543307100165215ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Geom/CMakeLists.txt000066400000000000000000000014301307543307100212570ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (DomainImplementation.cxx) ot_add_source_file (Domain.cxx) ot_add_source_file (Interval.cxx) ot_add_source_file (IntervalMesher.cxx) ot_add_source_file (LevelSet.cxx) ot_add_source_file (LevelSetMesher.cxx) ot_add_source_file (Mesh.cxx) ot_add_source_file (RegularGrid.cxx) ot_install_header_file (OTGeom.hxx) ot_install_header_file (DomainImplementation.hxx) ot_install_header_file (Domain.hxx) ot_install_header_file (Interval.hxx) ot_install_header_file (IntervalMesher.hxx) ot_install_header_file (LevelSet.hxx) ot_install_header_file (LevelSetMesher.hxx) ot_install_header_file (Mesh.hxx) ot_install_header_file (RegularGrid.hxx) openturns-1.9/lib/src/Base/Geom/Domain.cxx000066400000000000000000000054011307543307100204540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Domain is the interface of DomainImplementation.cxx * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Domain.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Domain); /* Default constructor */ Domain::Domain(): TypedInterfaceObject(new Interval()) { // Nothing to do } Domain::Domain(const Point & a, const Point & b): TypedInterfaceObject(new Interval(a, b)) { // Nothing to do } /* Default constructor */ Domain::Domain(const DomainImplementation & implementation): TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Dimension accessor */ UnsignedInteger Domain::getDimension() const { return getImplementation()->getDimension(); } /* Check if the given point is inside of the domain */ Bool Domain::contains(const Point & point) const { return getImplementation()->contains(point); } /* Check if the given point is inside of the closed interval */ Bool Domain::numericallyContains(const Point & point) const { return getImplementation()->numericallyContains(point); } /* Check if the domain is empty, i.e if its numerical volume is zero */ Bool Domain::isEmpty() const { return getImplementation()->isEmpty(); } /* Check if the domain is numerically empty, i.e if its numerical volume is zero */ Bool Domain::isNumericallyEmpty() const { return getImplementation()->isNumericallyEmpty(); } /* Get the volume of the domain */ Scalar Domain::getVolume() const { return getImplementation()->getVolume(); } /* Get the numerical volume of the domain */ Scalar Domain::getNumericalVolume() const { return getImplementation()->getNumericalVolume(); } /* Lower bound of the bounding box */ Point Domain::getLowerBound() const { return getImplementation()->getLowerBound(); } /* Upper bound of the bounding box */ Point Domain::getUpperBound() const { return getImplementation()->getUpperBound(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/DomainImplementation.cxx000066400000000000000000000075511307543307100233720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief DomainImplementation is defined as a domain of \mathbb{R}^d * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DomainImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DomainImplementation); static const Factory Factory_DomainImplementation; /* Default constructor */ DomainImplementation::DomainImplementation(UnsignedInteger dimension) : PersistentObject() , dimension_(dimension) , volume_(0.0) , isAlreadyComputedVolume_(false) { // Nothing to do } /* Clone method */ DomainImplementation * DomainImplementation::clone() const { return new DomainImplementation(*this); } /* String converter */ String DomainImplementation::__repr__() const { return OSS(true) << "class=" << GetClassName() << " name=" << getName() << " dimension=" << dimension_; } String DomainImplementation::__str__(const String & offset) const { return OSS(false) << offset << __repr__(); } /* Check if the given point is inside of the domain */ Bool DomainImplementation::contains(const Point & point) const { throw NotYetImplementedException(HERE) << "In DomainImplementation::contains(const Point & point) const"; } /* Check if the given point is inside of the discretization of the domain */ Bool DomainImplementation::numericallyContains(const Point & point) const { return contains(point); } /* Check if the domain is empty, i.e if its numerical volume is zero */ Bool DomainImplementation::isEmpty() const { return isNumericallyEmpty(); } /* Check if the domain is numerically empty, i.e if its numerical volume is zero */ Bool DomainImplementation::isNumericallyEmpty() const { return getNumericalVolume() <= ResourceMap::GetAsScalar("Domain-SmallVolume"); } /* Get the volume of the domain */ Scalar DomainImplementation::getVolume() const { return getNumericalVolume(); } /* Get the numerical volume of the domain */ Scalar DomainImplementation::getNumericalVolume() const { if (!isAlreadyComputedVolume_) computeVolume(); return volume_; } /* Compute the volume of the mesh */ void DomainImplementation::computeVolume() const { throw NotYetImplementedException(HERE); } /* Lower bound of the bounding box */ Point DomainImplementation::getLowerBound() const { throw NotYetImplementedException(HERE) << "In DomainImplementation::getLowerBound()"; } /* Upper bound of the bounding box */ Point DomainImplementation::getUpperBound() const { throw NotYetImplementedException(HERE) << "In DomainImplementation::getUpperBound()"; } /* Get the dimension of the domain*/ UnsignedInteger DomainImplementation::getDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void DomainImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("dimension_", dimension_); } /* Method load() reloads the object from the StorageManager */ void DomainImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("dimension_", dimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/Interval.cxx000066400000000000000000000401101307543307100210250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interval is defined as the cartesian product of n 1D intervalls ]low_1, up_1]x...x]low_n,up_n] * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Interval.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Interval); static const Factory Factory_Interval; /* Default constructor */ Interval::Interval(const UnsignedInteger dimension) : DomainImplementation(dimension) , lowerBound_(dimension, 0.0) , upperBound_(dimension, 1.0) , finiteLowerBound_(dimension, true) , finiteUpperBound_(dimension, true) { // Nothing to do } /* Parameters constructor, simplified interface for 1D case */ Interval::Interval(const Scalar lowerBound, const Scalar upperBound) : DomainImplementation(1) , lowerBound_(1, lowerBound) , upperBound_(1, upperBound) , finiteLowerBound_(1, true) , finiteUpperBound_(1, true) { // Nothing to do } /* Parameters constructor */ Interval::Interval(const Point & lowerBound, const Point & upperBound) : DomainImplementation(lowerBound.getDimension()) , lowerBound_(lowerBound) , upperBound_(upperBound) , finiteLowerBound_(getDimension(), true) , finiteUpperBound_(getDimension(), true) { if (upperBound.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot build an Interval from two Point of different dimensions"; } /* Parameters constructor */ Interval::Interval(const Point & lowerBound, const Point & upperBound, const BoolCollection & finiteLowerBound, const BoolCollection & finiteUpperBound) : DomainImplementation(lowerBound.getDimension()) , lowerBound_(lowerBound) , upperBound_(upperBound) , finiteLowerBound_(finiteLowerBound) , finiteUpperBound_(finiteUpperBound) { if (upperBound.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot build an Interval from two Point of different dimensions"; if ((finiteLowerBound.getSize() != getDimension()) || (finiteUpperBound.getSize() != getDimension())) throw InvalidArgumentException(HERE) << "Error: cannot build an interval with lower bound flags or upper bound flags of improper dimension"; } /* Clone method */ Interval * Interval::clone() const { return new Interval(*this); } /* Returns the interval equals to the intersection between the interval and another one */ Interval Interval::intersect(const Interval & other) const { // If one intersect the interval with itself if (this == &other) return (*this); // else check dimension compatibility if (other.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot intersect intervals of different dimensions"; // Extract other elements const Point otherLower(other.getLowerBound()); const Point otherUpper(other.getUpperBound()); const BoolCollection otherFiniteLower(other.getFiniteLowerBound()); const BoolCollection otherFiniteUpper(other.getFiniteUpperBound()); // Built intersection elements Point intersectLower(getDimension()); Point intersectUpper(getDimension()); BoolCollection intersectFiniteLower(getDimension()); BoolCollection intersectFiniteUpper(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++i) { intersectLower[i] = std::max(lowerBound_[i], otherLower[i]); intersectUpper[i] = std::min(upperBound_[i], otherUpper[i]); intersectFiniteLower[i] = finiteLowerBound_[i] || otherFiniteLower[i]; intersectFiniteUpper[i] = finiteUpperBound_[i] || otherFiniteUpper[i]; } return Interval(intersectLower, intersectUpper, intersectFiniteLower, intersectFiniteUpper); } /* Returns the interval equals to the union between the interval and another one */ Interval Interval::join(const Interval & other) const { // If one intersect the interval with itself if (this == &other) return (*this); // else check dimension compatibility if (other.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot intersect intervals of different dimensions"; // Extract other elements const Point otherLower(other.getLowerBound()); const Point otherUpper(other.getUpperBound()); const BoolCollection otherFiniteLower(other.getFiniteLowerBound()); const BoolCollection otherFiniteUpper(other.getFiniteUpperBound()); // Built intersection elements Point intersectLower(getDimension()); Point intersectUpper(getDimension()); BoolCollection intersectFiniteLower(getDimension()); BoolCollection intersectFiniteUpper(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++i) { intersectLower[i] = std::min(lowerBound_[i], otherLower[i]); intersectUpper[i] = std::max(upperBound_[i], otherUpper[i]); intersectFiniteLower[i] = finiteLowerBound_[i] && otherFiniteLower[i]; intersectFiniteUpper[i] = finiteUpperBound_[i] && otherFiniteUpper[i]; } return Interval(intersectLower, intersectUpper, intersectFiniteLower, intersectFiniteUpper); } /* Check if the interval is empty, i.e. if we have lowerBound >= upperBound for at least one component with finite bounds. */ Bool Interval::isEmpty() const { for (UnsignedInteger i = 0; i < getDimension(); ++i) if (finiteLowerBound_[i] && finiteUpperBound_[i] && (lowerBound_[i] > upperBound_[i])) return true; return false; } /* Check if the given point is inside of the closed interval */ Bool Interval::contains(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension << ", got dimension=" << point.getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) { // Check against the lower bound if (finiteLowerBound_[i] && (point[i] < lowerBound_[i])) return false; // Check against the upper bound if (finiteUpperBound_[i] && (point[i] > upperBound_[i])) return false; } return true; } /* Compute the numerical volume of the interval */ void Interval::computeVolume() const { const UnsignedInteger dimension = getDimension(); if (dimension == 0) { volume_ = 0.0; return; } volume_ = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { volume_ *= upperBound_[i] - lowerBound_[i]; if (volume_ <= 0.0) { volume_ = 0.0; return; } } } /* Check if the given point is numerically inside of the closed interval, i.e. using only the bounds part of the interval */ Bool Interval::numericallyContains(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension << ", got dimension=" << point.getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) if ((point[i] < lowerBound_[i]) || (point[i] > upperBound_[i])) return false; return true; } /* Addition operator */ Interval Interval::operator +(const Interval & rhs) const { if (getDimension() != rhs.getDimension()) throw InvalidArgumentException(HERE) << "Intervals of different dimensions cannot be added (LHS dimension = " << getDimension() << "; RHS dimension = " << rhs.getDimension(); const Point lowerBound(lowerBound_ + rhs.getLowerBound()); const Point upperBound(upperBound_ + rhs.getUpperBound()); Interval::BoolCollection finiteLowerBound(rhs.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(rhs.getFiniteUpperBound()); for(UnsignedInteger i = 0; i < (getDimension()); ++i) { finiteLowerBound[i] = finiteLowerBound[i] && finiteLowerBound_[i]; finiteUpperBound[i] = finiteUpperBound[i] && finiteUpperBound_[i]; } return Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound); } /* In-place addition operator */ Interval & Interval::operator +=(const Interval & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Intervals of different dimensions cannot be added (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); lowerBound_ += other.getLowerBound(); upperBound_ += other.getUpperBound(); Interval::BoolCollection finiteLowerBound(other.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(other.getFiniteUpperBound()); for(UnsignedInteger i = 0; i < (getDimension()); ++i) { finiteLowerBound_[i] = finiteLowerBound[i] && finiteLowerBound_[i]; finiteUpperBound_[i] = finiteUpperBound[i] && finiteUpperBound_[i]; } return *this; } /* Substraction operator */ Interval Interval::operator -(const Interval & rhs) const { if (getDimension() != rhs.getDimension()) throw InvalidArgumentException(HERE) << "Intervals of different dimensions cannot be added (LHS dimension = " << getDimension() << "; RHS dimension = " << rhs.getDimension(); const Point lowerBound(lowerBound_ - rhs.getUpperBound()); const Point upperBound(upperBound_ - rhs.getLowerBound()); Interval::BoolCollection finiteLowerBound(rhs.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(rhs.getFiniteUpperBound()); for(UnsignedInteger i = 0; i < (getDimension()); ++i) { finiteLowerBound[i] = finiteLowerBound[i] && finiteUpperBound_[i]; finiteUpperBound[i] = finiteUpperBound[i] && finiteLowerBound_[i]; } return Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound); } /* In-place substraction operator */ Interval & Interval::operator -=(const Interval & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Intervals of different dimensions cannot be substracted (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); lowerBound_ -= other.getUpperBound(); upperBound_ -= other.getLowerBound(); Interval::BoolCollection finiteLowerBound(other.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(other.getFiniteUpperBound()); for(UnsignedInteger i = 0; i < (getDimension()); ++i) { finiteLowerBound_[i] = finiteLowerBound[i] && finiteUpperBound_[i]; finiteUpperBound_[i] = finiteUpperBound[i] && finiteLowerBound_[i]; } return *this; } /* Product operator */ Interval Interval::operator *(const Scalar scalar) const { // Special case for multiplication by 0. We assume that 0 x (+/-inf) = 0. if (scalar == 0.0) return Interval(Point(getDimension(), 0.0), Point(getDimension(), 0.0)); Point lowerBound(lowerBound_); Point upperBound(upperBound_); Interval::BoolCollection finiteLowerBound(finiteLowerBound_); Interval::BoolCollection finiteUpperBound(finiteUpperBound_); if (scalar > 0.0) return Interval(scalar * lowerBound, scalar * upperBound, finiteLowerBound, finiteUpperBound); return Interval(scalar * upperBound, scalar * lowerBound, finiteUpperBound, finiteLowerBound); } /* In-place product operator */ Interval & Interval::operator *=(const Scalar scalar) { // Special case for multiplication by 0. We assume that 0 x (+/-inf) = 0. if (scalar == 0.0) { lowerBound_ = Point(getDimension()); upperBound_ = Point(getDimension()); finiteLowerBound_ = BoolCollection(getDimension(), true); finiteUpperBound_ = BoolCollection(getDimension(), true); return *this; } if (scalar > 0.0) { lowerBound_ *= scalar; upperBound_ *= scalar; return *this; } const Point tmpBound(lowerBound_); lowerBound_ = scalar * upperBound_; upperBound_ = scalar * tmpBound; const BoolCollection tmpFiniteBound(finiteLowerBound_); finiteLowerBound_ = finiteUpperBound_; finiteUpperBound_ = tmpFiniteBound; return *this; } /* Comparison operator */ Bool Interval::operator == (const Interval & other) const { if (this == &other) return true; return (lowerBound_ == other.lowerBound_) && (upperBound_ == other.upperBound_) && (finiteLowerBound_ == other.finiteLowerBound_) && (finiteUpperBound_ == other.finiteUpperBound_); } Bool Interval::operator != (const Interval & other) const { return !operator==(other); } /* Lower bound accessor */ Point Interval::getLowerBound() const { return lowerBound_; } void Interval::setLowerBound(const Point & lowerBound) { if (lowerBound.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given lower bound has a dimension incompatible with the interval dimension."; lowerBound_ = lowerBound; } /* Upper bound accessor */ Point Interval::getUpperBound() const { return upperBound_; } void Interval::setUpperBound(const Point & upperBound) { if (upperBound.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given upper bound has a dimension incompatible with the interval dimension."; upperBound_ = upperBound; } /* Lower bound flag accessor */ Interval::BoolCollection Interval::getFiniteLowerBound() const { return finiteLowerBound_; } void Interval::setFiniteLowerBound(const BoolCollection & finiteLowerBound) { if (finiteLowerBound.getSize() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given lower bound flag has a dimension incompatible with the interval dimension."; finiteLowerBound_ = finiteLowerBound; } /* Upper bound flag accessor */ Interval::BoolCollection Interval::getFiniteUpperBound() const { return finiteUpperBound_; } void Interval::setFiniteUpperBound(const BoolCollection & finiteUpperBound) { if (finiteUpperBound.getSize() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given upper bound flag has a dimension incompatible with the interval dimension."; finiteUpperBound_ = finiteUpperBound; } /* String converter */ String Interval::__repr__() const { return OSS(true) << "class=" << GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lower bound=" << lowerBound_.__repr__() << " upper bound=" << upperBound_.__repr__() << " finite lower bound=" << finiteLowerBound_.__repr__() << " finite upper bound=" << finiteUpperBound_.__repr__(); } String Interval::__str__(const String & offset) const { if (getDimension() == 0) return "empty"; OSS oss(false); for (UnsignedInteger i = 0; i < getDimension(); ++i) { if (i > 0) oss << Os::GetEndOfLine(); if (finiteLowerBound_[i]) oss << offset << "[" << lowerBound_[i] << ", "; else oss << offset << "]-inf (" << lowerBound_[i] << "), "; if (finiteUpperBound_[i]) oss << upperBound_[i] << "]"; else oss << offset << "(" << upperBound_[i] << ") +inf["; } return oss; } /* Method save() stores the object through the StorageManager */ void Interval::save(Advocate & adv) const { DomainImplementation::save(adv); adv.saveAttribute("lowerBound_", lowerBound_); adv.saveAttribute("upperBound_", upperBound_); adv.saveAttribute("finiteLowerBound_", finiteLowerBound_); adv.saveAttribute("finiteUpperBound_", finiteUpperBound_); } /* Method load() reloads the object from the StorageManager */ void Interval::load(Advocate & adv) { DomainImplementation::load(adv); adv.loadAttribute("lowerBound_", lowerBound_); adv.loadAttribute("upperBound_", upperBound_); adv.loadAttribute("finiteLowerBound_", finiteLowerBound_); adv.loadAttribute("finiteUpperBound_", finiteUpperBound_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/IntervalMesher.cxx000066400000000000000000000335601307543307100222040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meshing algorithm for intervals * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/IntervalMesher.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IntervalMesher); static const Factory Factory_IntervalMesher; /* Default constructor */ IntervalMesher::IntervalMesher() : PersistentObject() , discretization_(0) { // Nothing to do } /* Parameter constructor */ IntervalMesher::IntervalMesher(const Indices & discretization) : PersistentObject() , discretization_(discretization) { // Check if the discretization is valid for (UnsignedInteger i = 0; i < discretization.getSize(); ++i) if (discretization[i] == 0) throw InvalidArgumentException(HERE) << "Error: expected a positive discretization, got " << discretization; } /* Virtual constructor */ IntervalMesher * IntervalMesher::clone() const { return new IntervalMesher(*this); } /* String converter */ String IntervalMesher::__repr__() const { OSS oss(true); oss << "class=" << IntervalMesher::GetClassName() << " discretization=" << discretization_; return oss; } /* String converter */ String IntervalMesher::__str__(const String & offset) const { return __repr__(); } /* Discretization accessors */ void IntervalMesher::setDiscretization(const Indices & discretization) { // At least one slice per dimension for (UnsignedInteger i = 0; i < discretization.getSize(); ++i) if (discretization_[i] == 0) throw InvalidArgumentException(HERE) << "Error: expected positive values for the discretization, here discretization[" << i << "]=" << discretization[i]; discretization_ = discretization; } Indices IntervalMesher::getDiscretization() const { return discretization_; } /* Here is the interface that all derived class must implement */ Mesh IntervalMesher::build(const Interval & interval, const Bool diamond) const { const UnsignedInteger dimension = interval.getDimension(); if (discretization_.getSize() != dimension) throw InvalidArgumentException(HERE) << "Error: the mesh factory is for intervals of dimension=" << discretization_.getSize() << ", here dimension=" << dimension; if (dimension > 3) throw NotYetImplementedException(HERE) << "In IntervalMesher::build(const Interval & interval, const Bool diamond) const"; Mesh result; // Waiting for a generic implementation in higher dimension if (dimension == 1) { // We must insure that the interval bounds will be within the vertices const UnsignedInteger n = diamond ? 2 * discretization_[0] - 1 : discretization_[0]; Sample vertices(n + 1, 1); // First the vertices const Scalar a = interval.getLowerBound()[0]; const Scalar b = interval.getUpperBound()[0]; vertices[0][0] = a; vertices[n][0] = b; for (UnsignedInteger i = 1; i < n; ++i) vertices[i][0] = (i * b + (n - i) * a) / n; // Second the simplices Mesh::IndicesCollection simplices(n); Indices simplex(2); for (UnsignedInteger i = 0; i < n; ++i) { simplex[0] = i; simplex[1] = i + 1; simplices[i] = simplex; } // i result = Mesh(vertices, simplices); } // dimension == 1 if (dimension == 2) { const UnsignedInteger m = discretization_[0]; const UnsignedInteger n = discretization_[1]; // First the vertices Sample vertices(0, 2); Point point(2); for (UnsignedInteger j = 0; j <= n; ++j) { point[1] = ((n - j) * interval.getLowerBound()[1] + j * interval.getUpperBound()[1]) / n; for (UnsignedInteger i = 0; i <= m; ++i) { point[0] = ((m - i) * interval.getLowerBound()[0] + i * interval.getUpperBound()[0]) / m; vertices.add(point); } // i } // j // Second the simplices Mesh::IndicesCollection simplices(0, Indices(3)); UnsignedInteger cellIndex = 0; Indices index(3); for (UnsignedInteger j = 0; j < n; ++j) { for (UnsignedInteger i = 0; i < m; ++i) { // The current cell is // c--d // | | // a--b const UnsignedInteger a = cellIndex; const UnsignedInteger b = cellIndex + 1; const UnsignedInteger c = cellIndex + 1 + m; const UnsignedInteger d = cellIndex + 2 + m; if (diamond) { const Point center((vertices[a] + vertices[b] + vertices[c] + vertices[d]) * 0.25); const UnsignedInteger centerIndex = vertices.getSize(); vertices.add(center); index[0] = a; index[1] = b; index[2] = centerIndex; simplices.add(index); index[0] = b; index[1] = d; simplices.add(index); index[0] = d; index[1] = c; simplices.add(index); index[0] = c; index[1] = a; simplices.add(index); } else { index[0] = a; index[1] = b; index[2] = c; simplices.add(index); index[0] = b; index[1] = d; simplices.add(index); } ++cellIndex; } // i ++cellIndex; } // j result = Mesh(vertices, simplices); } // dimension == 2 if (dimension == 3) { const UnsignedInteger m = discretization_[0]; const UnsignedInteger n = discretization_[1]; const UnsignedInteger p = discretization_[2]; // First the vertices Sample vertices(0, 3); Point point(3); for (UnsignedInteger k = 0; k <= p; ++k) { point[2] = ((p - k) * interval.getLowerBound()[2] + k * interval.getUpperBound()[2]) / p; for (UnsignedInteger j = 0; j <= n; ++j) { point[1] = ((n - j) * interval.getLowerBound()[1] + j * interval.getUpperBound()[1]) / n; for (UnsignedInteger i = 0; i <= m; ++i) { point[0] = ((m - i) * interval.getLowerBound()[0] + i * interval.getUpperBound()[0]) / m; vertices.add(point); } // i } // j } // k // Second the simplices Mesh::IndicesCollection simplices(0, Indices(4)); UnsignedInteger cellIndex = 0; const UnsignedInteger mp1 = m + 1; const UnsignedInteger np1 = n + 1; const UnsignedInteger mp1np1 = mp1 * np1; Indices index(4); for (UnsignedInteger k = 0; k < p; ++k) { for (UnsignedInteger j = 0; j < n; ++j) { for (UnsignedInteger i = 0; i < m; ++i) { // The current cube has vertices indices // A = ( i*dx, j*dy, k*dz) -> cellIndex // B = (dx + i*dx, j*dy, k*dz) -> cellIndex + 1 // C = ( i*dx, dy + j*dy, k*dz) -> cellIndex + mp1 // D = (dx + i*dx, dy + j*dy, k*dz) -> cellIndex + 1 + mp1 // E = ( i*dx, j*dy, dz + k*dz) -> cellIndex + mp1 * np1 // F = (dx + i*dx, j*dy, dz + k*dz) -> cellIndex + 1 + mp1 * np1 // G = ( i*dx, dy + j*dy, dz + k*dz) -> cellIndex + mp1 + mp1 * np1 // H = (dx + i*dx, dy + j*dy, dz + k*dz) -> cellIndex + 1 + mp1 + mp1 * np1 // Its faces are // G----H // /| /| // E----F | // | C--|-D // |/ |/ // A----B // ABDC/EFHG/ACGE/BDHF/ABFE/CDHG const UnsignedInteger a = cellIndex; const UnsignedInteger b = cellIndex + 1; const UnsignedInteger c = cellIndex + mp1; const UnsignedInteger d = cellIndex + 1 + mp1; const UnsignedInteger e = cellIndex + mp1np1; const UnsignedInteger f = cellIndex + 1 + mp1np1; const UnsignedInteger g = cellIndex + mp1 + mp1np1; const UnsignedInteger h = cellIndex + 1 + mp1 + mp1np1; if (diamond) { // Center is the center of the cube (shortcut I) const Point center((vertices[a] + vertices[b] + vertices[c] + vertices[d] + vertices[e] + vertices[f] + vertices[g] + vertices[h]) * 0.125); const UnsignedInteger centerIndex = vertices.getSize(); vertices.add(center); // c* is the center of the current face const Point centerABDC((vertices[a] + vertices[b] + vertices[c] + vertices[d]) * 0.25); const UnsignedInteger centerABDCIndex = vertices.getSize(); vertices.add(centerABDC); // ABDC->c*BAI/c*DBI/c*CDI/c*ACI index[0] = centerABDCIndex; index[1] = b; index[2] = a; index[3] = centerIndex; simplices.add(index); index[1] = d; index[2] = b; simplices.add(index); index[1] = c; index[2] = d; simplices.add(index); index[1] = a; index[2] = c; simplices.add(index); // c* is the center of the current face const Point centerEFHG((vertices[e] + vertices[f] + vertices[g] + vertices[h]) * 0.25); const UnsignedInteger centerEFHGIndex = vertices.getSize(); vertices.add(centerEFHG); // EFHG->c*EFI/c*FHI/c*HGI/c*GEI index[0] = centerEFHGIndex; index[1] = e; index[2] = f; simplices.add(index); index[1] = f; index[2] = h; simplices.add(index); index[1] = h; index[2] = g; simplices.add(index); index[1] = g; index[2] = e; simplices.add(index); // c* is the center of the current face const Point centerACGE((vertices[a] + vertices[c] + vertices[e] + vertices[g]) * 0.25); const UnsignedInteger centerACGEIndex = vertices.getSize(); vertices.add(centerACGE); // ACGE->c*CAI/c*GCI/c*EGI/c*AEI index[0] = centerACGEIndex; index[1] = c; index[2] = a; simplices.add(index); index[1] = g; index[2] = c; simplices.add(index); index[1] = e; index[2] = g; simplices.add(index); index[1] = a; index[2] = e; simplices.add(index); // c* is the center of the current face const Point centerBDHF((vertices[b] + vertices[d] + vertices[f] + vertices[h]) * 0.25); const UnsignedInteger centerBDHFIndex = vertices.getSize(); vertices.add(centerBDHF); // BDHF->c*BDI/c*DHI/c*HFI/c*FBI index[0] = centerBDHFIndex; index[1] = b; index[2] = d; simplices.add(index); index[1] = d; index[2] = h; simplices.add(index); index[1] = h; index[2] = f; simplices.add(index); index[1] = f; index[2] = b; simplices.add(index); // c* is the center of the current face const Point centerABFE((vertices[a] + vertices[b] + vertices[e] + vertices[f]) * 0.25); const UnsignedInteger centerABFEIndex = vertices.getSize(); vertices.add(centerABFE); // ABFE->c*ABI/c*BFI/c*FEI/c*EAI index[0] = centerABFEIndex; index[1] = a; index[2] = b; simplices.add(index); index[1] = b; index[2] = f; simplices.add(index); index[1] = f; index[2] = e; simplices.add(index); index[1] = e; index[2] = a; simplices.add(index); // c* is the center of the current face const Point centerCDHG((vertices[c] + vertices[d] + vertices[g] + vertices[h]) * 0.25); const UnsignedInteger centerCDHGIndex = vertices.getSize(); vertices.add(centerCDHG); // CDHG->c*DCI/c*HDI/c*GHI/c*CGI index[0] = centerCDHGIndex; index[1] = d; index[2] = c; simplices.add(index); index[1] = h; index[2] = d; simplices.add(index); index[1] = g; index[2] = h; simplices.add(index); index[1] = c; index[2] = g; simplices.add(index); } else { // The 6 simplices of the Kuhn triangulation are the shortest paths // from A to H // 1: ABFH index[0] = a; index[1] = b; index[2] = f; index[3] = h; simplices.add(index); // 2: ADBH index[1] = d; index[2] = b; simplices.add(index); // 3: AFEH index[1] = f; index[2] = e; simplices.add(index); // 4: AEGH index[1] = e; index[2] = g; simplices.add(index); // 5: AGCH index[1] = g; index[2] = c; simplices.add(index); // 6: ACDH index[1] = c; index[2] = d; simplices.add(index); } ++cellIndex; } // i ++cellIndex; } // j cellIndex += mp1; } // k result = Mesh(vertices, simplices); } // dimension == 3 return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/LevelSet.cxx000066400000000000000000000224621307543307100207760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LevelSet is defined as the set of points such that f(x_1,...,x_n) <= level * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LevelSet.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/Matrix.hxx" #include "openturns/Cobyla.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/AggregatedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LevelSet); static const Factory Factory_LevelSet; /* Default constructor */ LevelSet::LevelSet(const UnsignedInteger dimension) : DomainImplementation(dimension) , function_(SymbolicFunction(Description::BuildDefault(dimension, "x"), Description(1, "1.0"))) , level_(0.0) , lowerBound_(0) , upperBound_(0) { // Nothing to do } /* Parameters constructor, simplified interface for 1D case */ LevelSet::LevelSet(const Function & function, const Scalar level) : DomainImplementation(function.getInputDimension()) , function_(function) , level_(level) , lowerBound_(0) , upperBound_(0) { if (function.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot build a level set based on functions with output dimension different from 1. Here, output dimension=" << function.getOutputDimension(); } /* Clone method */ LevelSet * LevelSet::clone() const { return new LevelSet(*this); } /* Returns the levelSet equals to the intersection between the levelSet and another one */ LevelSet LevelSet::intersect(const LevelSet & other) const { // If one intersect the levelSet with itself if (this == &other) return (*this); // else check dimension compatibility if (other.dimension_ != dimension_) throw InvalidArgumentException(HERE) << "Error: cannot intersect level sets of different dimensions"; // The intersectFunction is negative or zero iff the given point is inside of the resulting level set, ie if both functions are less or equal to their respective level const SymbolicFunction intersectFunction(Description::BuildDefault(2, "x"), Description(1, (OSS() << "max(x0 - " << level_ << ", x1 - " << other.level_ << ")"))); Function::FunctionCollection coll(2); coll[0] = function_; coll[1] = other.function_; LevelSet result(ComposedFunction(intersectFunction, AggregatedFunction(coll)), 0.0); // Check if we can compute a bounding box if ((lowerBound_.getDimension() == dimension_) && (upperBound_.getDimension() == dimension_) && (other.lowerBound_.getDimension() == dimension_) && (other.upperBound_.getDimension() == dimension_)) { const Interval boundingBox(Interval(lowerBound_, upperBound_).intersect(Interval(other.lowerBound_, other.upperBound_))); result.setLowerBound(boundingBox.getLowerBound()); result.setUpperBound(boundingBox.getUpperBound()); } return result; } /* Returns the levelSet equals to the union between the levelSet and another one */ LevelSet LevelSet::join(const LevelSet & other) const { // If one intersect the levelSet with itself if (this == &other) return (*this); // else check dimension compatibility if (other.dimension_ != dimension_) throw InvalidArgumentException(HERE) << "Error: cannot intersect level sets of different dimensions"; // The intersectFunction is negative or zero iff the given point is inside of the resulting level set, ie if at least on function is less or equal to its level const SymbolicFunction intersectFunction(Description::BuildDefault(2, "x"), Description(1, (OSS() << "min(x0 - " << level_ << ", x1 - " << other.level_ << ")"))); Function::FunctionCollection coll(2); coll[0] = function_; coll[1] = other.function_; LevelSet result(ComposedFunction(intersectFunction, AggregatedFunction(coll)), 0.0); // Check if we can compute a bounding box if ((lowerBound_.getDimension() == dimension_) && (upperBound_.getDimension() == dimension_) && (other.lowerBound_.getDimension() == dimension_) && (other.upperBound_.getDimension() == dimension_)) { const Interval boundingBox(Interval(lowerBound_, upperBound_).join(Interval(other.lowerBound_, other.upperBound_))); result.setLowerBound(boundingBox.getLowerBound()); result.setUpperBound(boundingBox.getUpperBound()); } return result; } /* Check if the given point is inside of the closed levelSet */ Bool LevelSet::contains(const Point & point) const { if (point.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension_ << ", got dimension=" << point.getDimension(); // If a bounding box has been computed/provided if ((lowerBound_.getDimension() == dimension_) && (upperBound_.getDimension() == dimension_) && !Interval(lowerBound_, upperBound_).contains(point)) return false; return function_(point)[0] <= level_; } /* Comparison operator */ Bool LevelSet::operator == (const LevelSet & other) const { if (this == &other) return true; return (function_ == other.function_) && (level_ == other.level_); } /* Functio accessor */ Function LevelSet::getFunction() const { return function_; } void LevelSet::setFunction(const Function & function) { if (function.getInputDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given function has an input dimension=" << function.getInputDimension() << " incompatible with the levelSet dimension=" << dimension_; function_ = function; } /* Level accessor */ Scalar LevelSet::getLevel() const { return level_; } void LevelSet::setLevel(const Scalar level) { level_ = level; } /* Lower bound of the bounding box */ void LevelSet::setLowerBound(const Point & bound) { if (bound.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: expected a lower bound of dimension=" << dimension_ << ", got dimension=" << bound.getDimension(); lowerBound_ = bound; } Point LevelSet::getLowerBound() const { if (lowerBound_.getDimension() != dimension_) computeLowerBound(); return lowerBound_; } void LevelSet::computeLowerBound() const { lowerBound_ = Point(dimension_); LinearFunction translate(Point(1, level_), Point(1), IdentityMatrix(1)); ComposedFunction equality(translate, function_); for (UnsignedInteger i = 0; i < dimension_; ++i) { Matrix m(1, dimension_); m(0, i) = 1.0; LinearFunction coordinate(Point(dimension_), Point(1), m); OptimizationProblem problem(coordinate, equality, Function(), Interval()); problem.setMinimization(true); Cobyla solver(problem); solver.setStartingPoint(Point(dimension_)); solver.run(); lowerBound_[i] = solver.getResult().getOptimalPoint()[i]; } } /* Upper bound of the bounding box */ void LevelSet::setUpperBound(const Point & bound) { if (bound.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: expected an upper bound of dimension=" << dimension_ << ", got dimension=" << bound.getDimension(); upperBound_ = bound; } Point LevelSet::getUpperBound() const { if (upperBound_.getDimension() != dimension_) computeUpperBound(); return upperBound_; } void LevelSet::computeUpperBound() const { upperBound_ = Point(dimension_); LinearFunction translate(Point(1, level_), Point(1), IdentityMatrix(1)); ComposedFunction equality(translate, function_); for (UnsignedInteger i = 0; i < dimension_; ++i) { Matrix m(1, dimension_); m(0, i) = 1.0; LinearFunction coordinate(Point(dimension_), Point(1), m); OptimizationProblem problem(coordinate, equality, Function(), Interval()); problem.setMinimization(false); Cobyla solver(problem); solver.setStartingPoint(Point(dimension_)); solver.run(); upperBound_[i] = solver.getResult().getOptimalPoint()[i]; } } /* String converter */ String LevelSet::__repr__() const { return OSS(true) << "class=" << GetClassName() << " name=" << getName() << " dimension=" << dimension_ << " function=" << function_.__repr__() << " level=" << level_; } String LevelSet::__str__(const String & offset) const { OSS oss(false); oss << offset << "{x | f(x) <= " << level_ << "} with f=\n" << function_.__str__(offset); return oss; } void LevelSet::save(Advocate & adv) const { DomainImplementation::save(adv); adv.saveAttribute("function_", function_); adv.saveAttribute("level_", level_); } /* Method load() reloads the object from the StorageManager */ void LevelSet::load(Advocate & adv) { DomainImplementation::load(adv); adv.loadAttribute("function_", function_); adv.loadAttribute("level_", level_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/LevelSetMesher.cxx000066400000000000000000000277411307543307100221470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meshing algorithm for levelSets * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LevelSetMesher.hxx" #include "openturns/IntervalMesher.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/OptimizationProblem.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/AbdoRackwitz.hxx" #include "openturns/Cobyla.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/NLopt.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/ParametricFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LevelSetMesher); static const Factory Factory_LevelSetMesher; /* Default constructor */ LevelSetMesher::LevelSetMesher() : PersistentObject() , discretization_(0) , solver_(AbdoRackwitz()) { // Nothing to do } /* Parameter constructor */ LevelSetMesher::LevelSetMesher(const Indices & discretization, const OptimizationAlgorithm & solver) : PersistentObject() , discretization_(discretization) , solver_(solver) { // Check if the discretization is valid for (UnsignedInteger i = 0; i < discretization.getSize(); ++i) if (discretization[i] == 0) throw InvalidArgumentException(HERE) << "Error: expected a positive discretization, got " << discretization; } /* Virtual constructor */ LevelSetMesher * LevelSetMesher::clone() const { return new LevelSetMesher(*this); } /* String converter */ String LevelSetMesher::__repr__() const { OSS oss(true); oss << "class=" << LevelSetMesher::GetClassName() << " discretization=" << discretization_; return oss; } /* String converter */ String LevelSetMesher::__str__(const String & offset) const { return __repr__(); } /* Optimization solver accessor */ void LevelSetMesher::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm LevelSetMesher::getOptimizationAlgorithm() const { return solver_; } void LevelSetMesher::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "LevelSetMesher::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } OptimizationAlgorithm LevelSetMesher::getOptimizationSolver() const { Log::Warn(OSS() << "LevelSetMesher::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } /* Discretization accessors */ void LevelSetMesher::setDiscretization(const Indices & discretization) { // At least one slice per dimension for (UnsignedInteger i = 0; i < discretization.getSize(); ++i) if (discretization_[i] == 0) throw InvalidArgumentException(HERE) << "Error: expected positive values for the discretization, here discretization[" << i << "]=" << discretization[i]; discretization_ = discretization; } Indices LevelSetMesher::getDiscretization() const { return discretization_; } /* Here is the interface that all derived class must implement */ Mesh LevelSetMesher::build(const LevelSet & levelSet, const Bool project) const { const UnsignedInteger dimension = levelSet.getDimension(); if (discretization_.getSize() != dimension) throw InvalidArgumentException(HERE) << "Error: the mesh factory is for levelSets of dimension=" << discretization_.getSize() << ", here dimension=" << dimension; if (dimension > 3) throw NotYetImplementedException(HERE) << "In LevelSetMesher::build(const LevelSet & levelSet, const Bool project) const"; return build(levelSet, Interval(levelSet.getLowerBound(), levelSet.getUpperBound()), project); } Mesh LevelSetMesher::build(const LevelSet & levelSet, const Interval & boundingBox, const Bool project) const { const UnsignedInteger dimension = levelSet.getDimension(); if (discretization_.getSize() != dimension) throw InvalidArgumentException(HERE) << "Error: the mesh factory is for levelSets of dimension=" << discretization_.getSize() << ", here dimension=" << dimension; if (dimension > 3) throw NotYetImplementedException(HERE) << "In LevelSetMesher::build(const LevelSet & levelSet, const Interval & boundingBox, const Bool project) const"; // First, mesh the bounding box const Mesh boundingMesh(IntervalMesher(discretization_).build(boundingBox)); Sample boundingVertices(boundingMesh.getVertices()); const UnsignedInteger numVertices = boundingVertices.getSize(); const Mesh::IndicesCollection boundingSimplices(boundingMesh.getSimplices()); const UnsignedInteger numSimplices = boundingSimplices.getSize(); // Second, keep only the simplices with a majority of vertices in the level set const Function function(levelSet.getFunction()); Sample values(function(boundingVertices)); const Scalar level = levelSet.getLevel(); Mesh::IndicesCollection goodSimplices(0); Sample goodVertices(0, dimension); // Flags for the vertices to keep Indices flagGoodVertices(numVertices, 0); // Vertices that have moved Sample movedVertices(0, dimension); // Flag for the vertices that have moved Indices flagMovedVertices(0); // Prepare the optimization problem for the projection Function shiftFunction; OptimizationProblem problem; if (project) { Matrix linear(dimension, 2 * dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { linear(i, i) = 1.0; linear(i, dimension + i) = 1.0; } LinearFunction shiftFunctionBase(Point(2 * dimension), Point(dimension), linear); Indices parameters(dimension); parameters.fill(); shiftFunction = ParametricFunction(shiftFunctionBase, parameters, Point(dimension)); problem.setLevelValue(level); } // project for (UnsignedInteger i = 0; i < numSimplices; ++i) { const Indices currentSimplex(boundingSimplices[i]); UnsignedInteger numGood = 0; // Count the vertices in the level set for (UnsignedInteger j = 0; j <= dimension; ++j) { const UnsignedInteger globalVertexIndex = currentSimplex[j]; if (values[globalVertexIndex][0] <= level) { ++numGood; ++flagGoodVertices[globalVertexIndex]; } } // If enough vertices, keep the simplex and flag all the vertices if (numGood > 0) { goodSimplices.add(currentSimplex); // Check if we have to move some vertices if (numGood <= dimension) { Sample localVertices(dimension + 1, dimension); Point localValues(dimension + 1, dimension); for (UnsignedInteger j = 0; j <= dimension; ++j) { const UnsignedInteger index = currentSimplex[j]; localVertices[j] = boundingVertices[index]; localValues[j] = values[index][0]; } Point center(dimension); Scalar centerValue = 0.0; // First pass: compute the center of the good points for (UnsignedInteger j = 0; j <= dimension; ++j) if (localValues[j] <= level) { center += localVertices[j]; centerValue += localValues[j]; } center /= numGood; centerValue /= numGood; // Second pass, move the vertices that are outside of the level set // using a linear interpolation between the center and the vertex for (UnsignedInteger j = 0; j <= dimension; ++j) { const UnsignedInteger globalVertexIndex = currentSimplex[j]; // If the vertex has to be moved if ((flagGoodVertices[globalVertexIndex] == 0) && (localValues[j] > level)) { // C(v*) [inside], M(level) [on], B(v) [outside] // (M-C)/(B-C) = (level-v*)/(v-v*) = a // M-B=(v-level)/(v-v*)(C-B) const Point currentVertex(boundingVertices[globalVertexIndex]); const Point delta((center - currentVertex) * (localValues[j] - centerValue) / (localValues[j] - centerValue)); // If no projection, just add the linear correction flagMovedVertices.add(globalVertexIndex); if (!project) movedVertices.add(currentVertex + delta); else { // Project the vertices not in the level set on the boundary of the level set // Build the optimization problem argmin ||x - x_0||^2 such that level - f(x) >= 0, where x_0 is the current vertex shiftFunction.setParameter(currentVertex); ComposedFunction levelFunction(function, shiftFunction); problem.setLevelFunction(levelFunction); solver_.setStartingPoint(delta); OptimizationResult result; // Here we have to catch exceptions raised by the gradient try { solver_.run(); result = solver_.getResult(); } catch(...) { LOGDEBUG(OSS() << "Problem to project point=" << currentVertex << " with solver=" << solver_ << ", using finite differences for gradient"); // Here we may have to fix the gradient eg in the case of analytical functions, when Ev3 does not handle the expression. const Scalar epsilon = ResourceMap::GetAsScalar("CenteredFiniteDifferenceGradient-DefaultEpsilon"); levelFunction.setGradient(CenteredFiniteDifferenceGradient((localVertices.getMin() - localVertices.getMax()) * epsilon + Point(dimension, epsilon), levelFunction.getEvaluation()).clone()); problem.setLevelFunction(levelFunction); solver_.setProblem(problem); // Try with the new gradients try { solver_.run(); result = solver_.getResult(); } catch(...) { // There is definitely a problem with this vertex. Try a gradient-free solver Cobyla solver(solver_.getProblem()); solver.setStartingPoint(solver_.getStartingPoint()); LOGDEBUG(OSS() << "Problem to project point=" << currentVertex << " with solver=" << solver_ << " and finite differences for gradient, switching to solver=" << solver); solver.run(); result = solver.getResult(); } // Even finite differences gradient failed? } // Gradient failed ? movedVertices.add(currentVertex + result.getOptimalPoint()); } // project ++flagGoodVertices[globalVertexIndex]; } // localValue[j] > level } // j = 0; j <= dimension; ++j } // numGood <= dimension } // numGood > 0 } // i < numSimplices // Insert the vertices that have moved for (UnsignedInteger i = 0; i < flagMovedVertices.getSize(); ++i) boundingVertices[flagMovedVertices[i]] = movedVertices[i]; // Extract the vertices to keep and reuse the flag to store vertices // indices shifts for (UnsignedInteger i = 0; i < numVertices; ++i) { if (flagGoodVertices[i] > 0) goodVertices.add(boundingVertices[i]); flagGoodVertices[i] = i + 1 - goodVertices.getSize(); } // Shift the vertices indices into the good simplices for (UnsignedInteger i = 0; i < goodSimplices.getSize(); ++i) for (UnsignedInteger j = 0; j <= dimension; ++j) goodSimplices[i][j] -= flagGoodVertices[goodSimplices[i][j]]; return Mesh(goodVertices, goodSimplices); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/Mesh.cxx000066400000000000000000001000431307543307100201370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Mesh is defined as a collection of n-D vertices and simplices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Mesh.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" #include "openturns/Graph.hxx" #include "openturns/Cloud.hxx" #include "openturns/Curve.hxx" #include "openturns/Polygon.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PlatformInfo.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Mesh); static const Factory Factory_Mesh; /* Default constructor */ Mesh::Mesh(const UnsignedInteger dimension) : DomainImplementation(dimension) , vertices_(1, dimension) // At least one point , simplices_() , tree_() , verticesToSimplices_(0) { // Nothing to do if (vertices_.getDescription().isBlank()) vertices_.setDescription(Description::BuildDefault(dimension, "t")); } /* Parameters constructor, simplified interface for 1D case */ Mesh::Mesh(const Sample & vertices) : DomainImplementation(vertices.getDimension()) , vertices_(0, vertices.getDimension()) , simplices_(0) , tree_() , verticesToSimplices_(0) { // Use the vertices accessor to initialize the kd-tree setVertices(vertices); } /* Parameters constructor, simplified interface for 1D case */ Mesh::Mesh(const Sample & vertices, const IndicesCollection & simplices) : DomainImplementation(vertices.getDimension()) , vertices_(0, vertices.getDimension()) , simplices_(simplices) , tree_() , verticesToSimplices_(0) { // Use the vertices accessor to initialize the kd-tree setVertices(vertices); } /* Clone method */ Mesh * Mesh::clone() const { return new Mesh(*this); } /* Description of the vertices accessor */ Description Mesh::getDescription() const { return vertices_.getDescription(); } /* Vertices accessor */ Sample Mesh::getVertices() const { return vertices_; } void Mesh::setVertices(const Sample & vertices) { isAlreadyComputedVolume_ = false; vertices_ = vertices; tree_ = KDTree(vertices_); if (vertices_.getDescription().isBlank()) vertices_.setDescription(Description::BuildDefault(vertices_.getDimension(), "t")); } /* Vertex accessor */ Point Mesh::getVertex(const UnsignedInteger index) const { if (index >= getVerticesNumber()) throw InvalidArgumentException(HERE) << "Error: the vertex index=" << index << " must be less than the number of vertices=" << getVerticesNumber(); return vertices_[index]; } void Mesh::setVertex(const UnsignedInteger index, const Point & vertex) { isAlreadyComputedVolume_ = false; vertices_[index] = vertex; } /* Simplices accessor */ Mesh::IndicesCollection Mesh::getSimplices() const { return simplices_; } void Mesh::setSimplices(const IndicesCollection & simplices) { if (!(simplices == simplices_)) { simplices_ = simplices; verticesToSimplices_ = IndicesCollection(0); } } /* Simplex accessor */ Indices Mesh::getSimplex(const UnsignedInteger index) const { if (index >= getSimplicesNumber()) throw InvalidArgumentException(HERE) << "Error: the simplex index=" << index << " must be less than the number of simplices=" << getSimplicesNumber(); return simplices_[index]; } /* Check the mesh validity */ void Mesh::checkValidity() const { // Check the vertices: no duplicate, no unused vertex // Check the simplices: no simplex with duplicate vertices, no simplex with unknown vertex, no simplex with a number of vertices different from dimension+1 for (UnsignedInteger i = 0; i < getSimplicesNumber(); ++ i) { Indices simplex(simplices_[i]); if (simplex.getSize() != getDimension() + 1) throw InvalidArgumentException(HERE) << "Error: mesh has dimension " << getDimension() << " but simplex #" << i << " has size" << simplex.getSize(); if (!simplex.check(getVerticesNumber())) throw InvalidArgumentException(HERE) << "Error: mesh has " << getVerticesNumber() << " vertices but simplex #" << i << " refers to an unknown vertex"; } // Check that no ball can be included into the intersection of two simplices } Bool Mesh::isValid() const { Bool result = true; try { checkValidity(); } catch (Exception) { result = false; } return result; } /* Check if the given point is in the mesh */ Bool Mesh::contains(const Point & point) const { const UnsignedInteger simplicesSize = getSimplicesNumber(); for (UnsignedInteger i = 0; i < simplicesSize; ++i) if (checkPointInSimplex(point, i)) return true; return false; } /* Check if the given point is in the given simplex */ SquareMatrix Mesh::buildSimplexMatrix(const UnsignedInteger index) const { if (index >= getSimplicesNumber()) throw InvalidArgumentException(HERE) << "Error: the simplex index=" << index << " must be less than the number of simplices=" << getSimplicesNumber(); SquareMatrix matrix(dimension_ + 1); const Indices vertexIndices(simplices_[index]); // Loop over the vertices of the simplex for (UnsignedInteger j = 0; j <= dimension_; ++j) { const Point vertexJ(vertices_[vertexIndices[j]]); for (UnsignedInteger i = 0; i < dimension_; ++i) matrix(i, j) = vertexJ[i]; matrix(dimension_, j) = 1.0; } return matrix; } /* Check if the given point is in the given simplex */ Bool Mesh::checkPointInSimplex(const Point & point, const UnsignedInteger index) const { Point alpha; return checkPointInSimplexWithCoordinates(point, index, alpha); } /* Check if the given point is in the given simplex and returns its barycentric coordinates */ Bool Mesh::checkPointInSimplexWithCoordinates(const Point & point, const UnsignedInteger index, Point & coordinates) const { SquareMatrix matrix(buildSimplexMatrix(index)); Point v(point); v.add(1.0); coordinates = matrix.solveLinearSystem(v, false); for (UnsignedInteger i = 0; i <= dimension_; ++i) if ((coordinates[i] < 0.0) || (coordinates[i] > 1.0)) return false; return true; } /* Get the number of vertices */ UnsignedInteger Mesh::getVerticesNumber() const { return vertices_.getSize(); } /* Get the number of simplices */ UnsignedInteger Mesh::getSimplicesNumber() const { return simplices_.getSize(); } /* TBB functor to speed-up nearest index computation */ struct NearestFunctor { const Mesh & mesh_; const Point & point_; Scalar minDistance_; UnsignedInteger minIndex_; NearestFunctor(const Mesh & mesh, const Point & point) : mesh_(mesh), point_(point), minDistance_(SpecFunc::MaxScalar), minIndex_(0) {} NearestFunctor(const NearestFunctor & other, TBB::Split) : mesh_(other.mesh_), point_(other.point_), minDistance_(SpecFunc::MaxScalar), minIndex_(0) {} void operator() (const TBB::BlockedRange & r) { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const Scalar d = (point_ - mesh_.getVertices()[i]).normSquare(); if (d < minDistance_) { minDistance_ = d; minIndex_ = i; } // d < minDistance_ } // i } // operator void join(const NearestFunctor & other) { if (other.minDistance_ < minDistance_) { minDistance_ = other.minDistance_; minIndex_ = other.minIndex_; } // minDistance } // join }; /* end struct NearestFunctor */ /* Get the index of the nearest vertex */ UnsignedInteger Mesh::getNearestVertexIndex(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension " << getDimension() << ", got a point of dimension " << point.getDimension(); if (!tree_.isEmpty()) return tree_.getNearestNeighbourIndex(point); NearestFunctor functor( *this, point ); TBB::ParallelReduce( 0, getVerticesNumber(), functor ); return functor.minIndex_; } /* Get the index of the nearest vertex and the index of the containing simplex if any */ Indices Mesh::getNearestVertexAndSimplexIndicesWithCoordinates(const Point & point, Point & coordinates) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension " << getDimension() << ", got a point of dimension " << point.getDimension(); const UnsignedInteger nearestIndex = getNearestVertexIndex(point); Indices result(1, nearestIndex); // To be sure that the vertices to simplices map is up to date if (verticesToSimplices_.getSize() == 0) (void) getVerticesToSimplicesMap(); const Indices simplicesCandidates(verticesToSimplices_[nearestIndex]); coordinates = Point(0); for (UnsignedInteger i = 0; i < simplicesCandidates.getSize(); ++i) { const UnsignedInteger simplexIndex = simplicesCandidates[i]; if (checkPointInSimplexWithCoordinates(point, simplexIndex, coordinates)) { result.add(simplexIndex); break; } } // Loop over the simplices candidates // If no simplex contains the given point, reset the coordinates vector if (result.getSize() == 1) coordinates = Point(0); return result; } /* Get the nearest vertex */ Point Mesh::getNearestVertex(const Point & point) const { return vertices_[getNearestVertexIndex(point)]; } /* TBB policy to speed-up nearest index computation over a sample */ struct MeshNearestPolicy { const Sample & points_; Indices & indices_; const Mesh & mesh_; MeshNearestPolicy(const Sample & points, Indices & indices, const Mesh & mesh) : points_(points) , indices_(indices) , mesh_(mesh) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) indices_[i] = mesh_.getNearestVertexIndex(points_[i]); } }; /* end struct MeshNearestPolicy */ /* Get the index of the nearest vertex for a set of points */ Indices Mesh::getNearestVertexIndex(const Sample & points) const { if (points.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: expected points of dimension " << getDimension() << ", got points of dimension " << points.getDimension(); const UnsignedInteger size = points.getSize(); Indices indices(size); if (size == 0) return indices; const MeshNearestPolicy policy( points, indices, *this ); TBB::ParallelFor( 0, size, policy ); return indices; } /* Get the nearest vertex for a set of points */ Sample Mesh::getNearestVertex(const Sample & points) const { const Indices indices(getNearestVertexIndex(points)); const UnsignedInteger size = indices.getSize(); Sample neighbours(size, getDimension()); for (UnsignedInteger i = 0; i < size; ++i) neighbours[i] = vertices_[indices[i]]; return neighbours; } /* Compute the volume of a given simplex */ Scalar Mesh::computeSimplexVolume(const UnsignedInteger index) const { if (index >= getSimplicesNumber()) throw InvalidArgumentException(HERE) << "Error: the simplex index=" << index << " must be less than the number of simplices=" << getSimplicesNumber(); // First special case: 1D simplex if (getDimension() == 1) { const Scalar x0 = vertices_[simplices_[index][0]][0]; const Scalar x1 = vertices_[simplices_[index][1]][0]; return std::abs(x1 - x0); } // Second special case: 2D simplex if (getDimension() == 2) { const Scalar x0 = vertices_[simplices_[index][0]][0]; const Scalar y0 = vertices_[simplices_[index][0]][1]; const Scalar x1 = vertices_[simplices_[index][1]][0]; const Scalar y1 = vertices_[simplices_[index][1]][1]; const Scalar x2 = vertices_[simplices_[index][2]][0]; const Scalar y2 = vertices_[simplices_[index][2]][1]; return 0.5 * std::abs((x2 - x0) * (y1 - y0) - (x0 - x1) * (y2 - y0)); } SquareMatrix matrix(buildSimplexMatrix(index)); Scalar sign = 0.0; return exp(matrix.computeLogAbsoluteDeterminant(sign, false) - SpecFunc::LogGamma(dimension_ + 1)); } /* Compute P1 gram matrix */ CovarianceMatrix Mesh::computeP1Gram() const { // If no simplex, the P1 gram matrix is null if (simplices_.getSize() == 0) return CovarianceMatrix(0); const UnsignedInteger simplexSize = getVertices().getDimension() + 1; SquareMatrix elementaryGram(simplexSize, Point(simplexSize * simplexSize, 1.0 / SpecFunc::Gamma(simplexSize + 2.0))); for (UnsignedInteger i = 0; i < simplexSize; ++i) elementaryGram(i, i) *= 2.0; const UnsignedInteger verticesSize = vertices_.getSize(); const UnsignedInteger simplicesSize = simplices_.getSize(); SquareMatrix gram(verticesSize); for (UnsignedInteger i = 0; i < simplicesSize; ++i) { const Indices simplex(getSimplex(i)); const Scalar delta = computeSimplexVolume(i); for (UnsignedInteger j = 0; j < simplexSize; ++j) { const UnsignedInteger newJ = simplex[j]; for (UnsignedInteger k = 0; k < simplexSize; ++k) { const UnsignedInteger newK = simplex[k]; gram(newJ, newK) += delta * elementaryGram(j, k); } // Loop over second vertex } // Loop over first vertex } // Loop over simplices return CovarianceMatrix(gram.getImplementation()); } /* TBB functor to speed-up volume computation */ struct VolumeFunctor { const Mesh & mesh_; Scalar accumulator_; VolumeFunctor(const Mesh & mesh) : mesh_(mesh), accumulator_(0.0) {} VolumeFunctor(const VolumeFunctor & other, TBB::Split) : mesh_(other.mesh_), accumulator_(0.0) {} void operator() (const TBB::BlockedRange & r) { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) accumulator_ += mesh_.computeSimplexVolume(i); } void join(const VolumeFunctor & other) { accumulator_ += other.accumulator_; } }; /* end struct VolumeFunctor */ /* Compute the volume of the mesh */ void Mesh::computeVolume() const { VolumeFunctor functor( *this ); TBB::ParallelReduce( 0, getSimplicesNumber(), functor ); volume_ = functor.accumulator_; isAlreadyComputedVolume_ = true; } /* Tells if the mesh is regular */ Bool Mesh::isRegular() const { // For now, only 1D regular meshes are considered if (getDimension() != 1) return false; const UnsignedInteger size = getSimplicesNumber(); if (size <= 1) return true; Bool regular = true; const Scalar epsilon = ResourceMap::GetAsScalar("Mesh-VertexEpsilon"); const Scalar step = vertices_[simplices_[0][1]][0] - vertices_[simplices_[0][0]][0]; for (UnsignedInteger i = 1; i < size; ++i) { regular = regular && (std::abs(vertices_[simplices_[i][1]][0] - vertices_[simplices_[i][0]][0] - step) < epsilon); if (!regular) break; } return regular; } /* Lower bound of the bounding box */ Point Mesh::getLowerBound() const { return vertices_.getMin(); } /* Upper bound of the bounding box */ Point Mesh::getUpperBound() const { return vertices_.getMax(); } /* Get the map between vertices and simplices: for each vertex, list the vertices indices it belongs to */ Mesh::IndicesCollection Mesh::getVerticesToSimplicesMap() const { if (verticesToSimplices_.getSize() > 0) return verticesToSimplices_; const UnsignedInteger numSimplices = getSimplicesNumber(); const UnsignedInteger numVertices = getVerticesNumber(); verticesToSimplices_ = IndicesCollection(numVertices, Indices(0)); for (UnsignedInteger i = 0; i < numSimplices; ++i) { const Indices simplex(simplices_[i]); for (UnsignedInteger j = 0; j < simplex.getSize(); ++j) { const UnsignedInteger index = simplex[j]; verticesToSimplices_[index].add(i); } } // Loop over simplices return verticesToSimplices_; } /* Compute weights such that an integral of a function over the mesh * is a weighted sum of its values at the vertices */ Point Mesh::computeWeights() const { // First compute the volume of the simplices const UnsignedInteger numSimplices = getSimplicesNumber(); Point simplicesVolume(numSimplices); for (UnsignedInteger i = 0; i < numSimplices; ++i) simplicesVolume[i] = computeSimplexVolume(i); // Second compute the map between vertices and simplices const IndicesCollection verticesToSimplices(getVerticesToSimplicesMap()); // Then compute the weights of the vertices by distributing the volume of each simplex among its vertices const UnsignedInteger numVertices = getVerticesNumber(); Point weights(numVertices, 0.0); for (UnsignedInteger i = 0; i < numVertices; ++i) { const Indices vertexSimplices(verticesToSimplices[i]); Scalar weight = 0.0; for (UnsignedInteger j = 0; j < vertexSimplices.getSize(); ++j) weight += simplicesVolume[vertexSimplices[j]]; weights[i] = weight; } // i // Normalize the weights: each simplex has dim+1 vertices, so each vertex // get 1/(dim+1) of the volume of the simplices it belongs to weights /= (dimension_ + 1.0); return weights; } /* Comparison operator */ Bool Mesh::operator == (const Mesh & other) const { if (this == &other) return true; return (vertices_ == other.vertices_) && (simplices_ == other.simplices_); } /* String converter */ String Mesh::__repr__() const { return OSS(true) << "class=" << GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " vertices=" << vertices_.__repr__() << " simplices=" << simplices_.__repr__(); } String Mesh::__str__(const String & offset) const { return __repr__(); } /* Drawing method */ Graph Mesh::draw() const { if (dimension_ > 3) throw InvalidArgumentException(HERE) << "Error: cannot draw a mesh of dimension > 3."; if (dimension_ == 1) return draw1D(); if (dimension_ == 2) return draw2D(); if (dimension_ == 3) return draw3D(); return Graph(); } Graph Mesh::draw1D() const { checkValidity(); if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw a mesh of dimension different from 1 with the draw1D() method."; const UnsignedInteger verticesSize = getVerticesNumber(); const UnsignedInteger simplicesSize = getSimplicesNumber(); if (verticesSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot draw a mesh with no vertex."; Graph graph(String(OSS() << "Mesh " << getName()), "x", "y", true, "topright"); // The vertices Cloud vertices(vertices_, Sample(verticesSize, Point(1, 0.0))); vertices.setColor("red"); vertices.setLegend(String(OSS() << verticesSize << " node" << (verticesSize > 1 ? "s" : ""))); // The simplices for (UnsignedInteger i = 0; i < simplicesSize; ++i) { Sample data(2, 2); data[0][0] = vertices_[simplices_[i][0]][0]; data[1][0] = vertices_[simplices_[i][1]][0]; Curve simplex(data); simplex.setColor("blue"); if (i == 0) simplex.setLegend(String(OSS() << simplicesSize << " element" << (simplicesSize > 1 ? "s" : ""))); graph.add(simplex); } graph.add(vertices); return graph; } Graph Mesh::draw2D() const { checkValidity(); const UnsignedInteger verticesSize = getVerticesNumber(); const UnsignedInteger simplicesSize = getSimplicesNumber(); if (verticesSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot draw a mesh with no vertex."; Graph graph(String(OSS() << "Mesh " << getName()), "x", "y", true, "topright"); // The vertices Cloud vertices(vertices_); vertices.setColor("red"); if (vertices_.getSize() > ResourceMap::GetAsUnsignedInteger("Mesh-LargeSize")) vertices.setPointStyle("dot"); vertices.setLegend(String(OSS() << verticesSize << " node" << (verticesSize > 1 ? "s" : ""))); // The simplices for (UnsignedInteger i = 0; i < simplicesSize; ++i) { Sample data(4, 2); data[0] = vertices_[simplices_[i][0]]; data[1] = vertices_[simplices_[i][1]]; data[2] = vertices_[simplices_[i][2]]; data[3] = vertices_[simplices_[i][0]]; Curve simplex(data); simplex.setColor("blue"); if (i == 0) simplex.setLegend(String(OSS() << simplicesSize << " element" << (simplicesSize > 1 ? "s" : ""))); graph.add(simplex); } graph.add(vertices); return graph; } Graph Mesh::draw3D(const Bool drawEdge, const Scalar thetaX, const Scalar thetaY, const Scalar thetaZ, const Bool shading, const Scalar rho) const { SquareMatrix R(3); const Scalar sinThetaX = sin(thetaX); const Scalar cosThetaX = cos(thetaX); const Scalar sinThetaY = sin(thetaY); const Scalar cosThetaY = cos(thetaY); const Scalar sinThetaZ = sin(thetaZ); const Scalar cosThetaZ = cos(thetaZ); R(0, 0) = cosThetaY * cosThetaZ; R(1, 0) = -cosThetaY * sinThetaZ; R(2, 0) = sinThetaY; R(0, 1) = cosThetaX * sinThetaZ + sinThetaX * sinThetaY * cosThetaZ; R(1, 1) = cosThetaX * cosThetaZ - sinThetaX * sinThetaY * sinThetaZ; R(2, 1) = -sinThetaX * cosThetaY; R(0, 2) = sinThetaX * sinThetaZ - cosThetaX * sinThetaY * cosThetaZ; R(1, 2) = sinThetaX * cosThetaZ + cosThetaX * sinThetaY * sinThetaZ; R(2, 2) = cosThetaX * cosThetaY; return draw3D(drawEdge, R, shading, rho); } Graph Mesh::draw3D(const Bool drawEdge, const SquareMatrix & rotation, const Bool shading, const Scalar rho) const { checkValidity(); // First, check if the matrix is a rotation matrix of R^3 if (rotation.getDimension() != 3) throw InvalidArgumentException(HERE) << "Error: the matrix is not a 3d square matrix."; if (Point((rotation * rotation.transpose() - IdentityMatrix(3)).getImplementation()).norm() > 1e-5) throw InvalidArgumentException(HERE) << "Error: the matrix is not a rotation matrix."; const UnsignedInteger verticesSize = getVerticesNumber(); const UnsignedInteger simplicesSize = getSimplicesNumber(); if (verticesSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot draw a mesh with no vertex or no simplex."; // We use a basic Painter algorithm for the visualization // Second, transform the vertices if needed Sample visuVertices(vertices_); if (!rotation.isDiagonal()) visuVertices *= rotation; // Third, split all the simplices into triangles and compute their mean depth Sample trianglesAndDepth(0, 4); Point triWithDepth(4); for (UnsignedInteger i = 0; i < simplicesSize; ++i) { const UnsignedInteger i0 = simplices_[i][0]; const UnsignedInteger i1 = simplices_[i][1]; const UnsignedInteger i2 = simplices_[i][2]; const UnsignedInteger i3 = simplices_[i][3]; // First face: AB=p0p1, AC=p0p2. triWithDepth[0] = i0; triWithDepth[1] = i1; triWithDepth[2] = i2; triWithDepth[3] = vertices_[i0][2] + vertices_[i1][2] + vertices_[i2][2]; trianglesAndDepth.add(triWithDepth); // Second face: AB=p0p2, AC=p0p3. triWithDepth[0] = i0; triWithDepth[1] = i2; triWithDepth[2] = i3; triWithDepth[3] = vertices_[i0][2] + vertices_[i2][2] + vertices_[i3][2]; trianglesAndDepth.add(triWithDepth); // Third face: AB=p0p3, AC=p0p1. triWithDepth[0] = i0; triWithDepth[1] = i3; triWithDepth[2] = i1; triWithDepth[3] = vertices_[i0][2] + vertices_[i3][2] + vertices_[i1][2]; trianglesAndDepth.add(triWithDepth); // Fourth face: AB=p1p3, AC=p1p2. triWithDepth[0] = i1; triWithDepth[1] = i3; triWithDepth[2] = i2; triWithDepth[3] = vertices_[i1][2] + vertices_[i3][2] + vertices_[i2][2]; trianglesAndDepth.add(triWithDepth); } // Fourth, draw the triangles in decreasing depth Graph graph(String(OSS() << "Mesh " << getName()), "x", "y", true, "topright"); trianglesAndDepth = trianglesAndDepth.sortAccordingToAComponent(3); Scalar clippedRho = std::min(1.0, std::max(0.0, rho)); if (rho != clippedRho) LOGWARN(OSS() << "The shrinking factor must be in (0,1), here rho=" << rho); for (UnsignedInteger i = trianglesAndDepth.getSize(); i > 0; --i) { const UnsignedInteger i0 = static_cast(trianglesAndDepth[i - 1][0]); const UnsignedInteger i1 = static_cast(trianglesAndDepth[i - 1][1]); const UnsignedInteger i2 = static_cast(trianglesAndDepth[i - 1][2]); Sample data(3, 2); if (clippedRho < 1.0) { const Point center((visuVertices[i0] + visuVertices[i1] + visuVertices[i2]) / 3.0); data[0][0] = center[0]; data[0][1] = center[1]; data[1][0] = center[0]; data[1][1] = center[1]; data[2][0] = center[0]; data[2][1] = center[1]; if (clippedRho > 0.0) { data[0][0] += clippedRho * (visuVertices[i0][0] - center[0]); data[0][1] += clippedRho * (visuVertices[i0][1] - center[1]); data[1][0] += clippedRho * (visuVertices[i1][0] - center[0]); data[1][1] += clippedRho * (visuVertices[i1][1] - center[1]); data[2][0] += clippedRho * (visuVertices[i2][0] - center[0]); data[2][1] += clippedRho * (visuVertices[i2][1] - center[1]); } } else { data[0][0] = visuVertices[i0][0]; data[0][1] = visuVertices[i0][1]; data[1][0] = visuVertices[i1][0]; data[1][1] = visuVertices[i1][1]; data[2][0] = visuVertices[i2][0]; data[2][1] = visuVertices[i2][1]; } Polygon triangle(data); Scalar redFace = 0.0; Scalar greenFace = 0.0; Scalar blueFace = 1.0; Scalar redEdge = 1.0; Scalar greenEdge = 0.0; Scalar blueEdge = 0.0; Scalar redLight = 1.0; Scalar greenLight = 1.0; Scalar blueLight = 1.0; if (shading) { const Point ab(visuVertices[i1] - visuVertices[i0]); const Point ac(visuVertices[i2] - visuVertices[i0]); Point N(3); N[0] = ab[1] * ac[2] - ab[2] * ac[1]; N[1] = ab[2] * ac[0] - ab[0] * ac[2]; N[2] = ab[0] * ac[1] - ab[1] * ac[0]; const Scalar cosTheta = std::abs(N[2]) / N.norm(); Point R(N * (2.0 * cosTheta)); R[2] -= 1.0; const Scalar cosPhi = std::abs(R[2] / R.norm()); redFace *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * redLight; greenFace *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * greenLight; blueFace *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * blueLight; redEdge *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * redLight; greenEdge *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * greenLight; blueEdge *= 0.1 + 0.7 * cosTheta + 0.2 * pow(cosPhi, 50) * blueLight; } triangle.setColor(triangle.ConvertFromRGB(redFace, greenFace, blueFace)); if (drawEdge) triangle.setEdgeColor(triangle.ConvertFromRGB(redEdge, greenEdge, blueEdge)); else triangle.setEdgeColor(triangle.ConvertFromRGB(redFace, greenFace, blueFace)); graph.add(triangle); } return graph; } /* Import mesh from FreeFem 2D mesh files */ Mesh Mesh::ImportFromMSHFile(const String & fileName) { std::ifstream file(fileName.c_str(), std::ios::in); if (!file) throw FileNotFoundException(HERE) << "Error: can't open file " << fileName; // Bording case: empty file if (file.eof()) { Log::Info(OSS() << "File " << fileName << " is empty."); return Mesh(); } // First, the header: it is made of 3 integers, the number of vertices, the number of simplices and the number of elements on the boundary, currently not used by OT UnsignedInteger verticesNumber = 0; UnsignedInteger simplicesNumber = 0; UnsignedInteger scratch = 0; file >> verticesNumber; file >> simplicesNumber; file >> scratch; LOGINFO(OSS() << "Number of vertices=" << verticesNumber << ", number of simplices=" << simplicesNumber); // Parse the vertices Sample vertices(verticesNumber, 2); for (UnsignedInteger i = 0; i < verticesNumber; ++i) { file >> vertices[i][0]; file >> vertices[i][1]; file >> scratch; LOGINFO(OSS() << "vertex " << i << "=" << vertices[i]); } // Parse the simplices IndicesCollection simplices(simplicesNumber, Indices(3)); for (UnsignedInteger i = 0; i < simplicesNumber; ++i) { file >> simplices[i][0]; file >> simplices[i][1]; file >> simplices[i][2]; --simplices[i][0]; --simplices[i][1]; --simplices[i][2]; file >> scratch; LOGINFO(OSS() << "simplex " << i << "=" << simplices[i]); } file.close(); return Mesh(vertices, simplices); } /* VTK export */ String Mesh::streamToVTKFormat() const { if (dimension_ > 3) throw InvalidDimensionException(HERE) << "Error: cannot export a mesh of dimension=" << dimension_ << " into the VTK format. Maximum dimension is 3."; const UnsignedInteger oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(16); OSS oss; // First, the file version and identifier oss << "# vtk DataFile Version 3.0\n"; // Second, the header oss << getName() << "\n"; // Third, the format oss << "ASCII\n"; oss << "\n"; // Fourth, the data set oss << "DATASET UNSTRUCTURED_GRID\n"; // Fifth, the geometrical and topological data // The vertices const UnsignedInteger numVertices = getVerticesNumber(); oss << "POINTS " << numVertices << " float\n"; for (UnsignedInteger i = 0; i < numVertices; ++i) { String separator(""); for (UnsignedInteger j = 0; j < dimension_; ++j, separator = " ") oss << separator << vertices_[i][j]; for (UnsignedInteger j = dimension_; j < 3; ++j) oss << separator << "0.0"; oss << "\n"; } // The simplices oss << "\n"; const UnsignedInteger numSimplices = getSimplicesNumber(); // If no simplex, assume that it is a cloud of points if (numSimplices == 0) { oss << "CELLS " << numVertices << " " << 2 * numVertices << "\n"; for (UnsignedInteger i = 0; i < numVertices; ++i) oss << "1 " << i << "\n"; oss << "\n"; oss << "CELL_TYPES " << numVertices << "\n"; for (UnsignedInteger i = 0; i < numVertices; ++i) oss << "1\n"; PlatformInfo::SetNumericalPrecision(oldPrecision); return oss; } // There is at least on simplex. Assume homogeneous simplices, // ie all the simplices are of the same kind as the first one UnsignedInteger verticesPerSimplex = 1; UnsignedInteger lastIndex = simplices_[0][0]; while ((verticesPerSimplex <= dimension_) && (simplices_[0][verticesPerSimplex] != lastIndex)) { lastIndex = simplices_[0][verticesPerSimplex]; ++verticesPerSimplex; } oss << "CELLS " << numSimplices << " " << (verticesPerSimplex + 1) * numSimplices << "\n"; for (UnsignedInteger i = 0; i < numSimplices; ++i) { oss << verticesPerSimplex; for (UnsignedInteger j = 0; j < verticesPerSimplex; ++j) oss << " " << simplices_[i][j]; oss << "\n"; } oss << "\n"; // If no simplices, assume vertices type oss << "CELL_TYPES " << numSimplices << "\n"; UnsignedInteger cellType = 0; // Cell type is: // 1 for vertex // 3 for line // 5 for triangle // 10 for tetrahedron if (verticesPerSimplex == 1) cellType = 1; if (verticesPerSimplex == 2) cellType = 3; if (verticesPerSimplex == 3) cellType = 5; if (verticesPerSimplex == 4) cellType = 10; for (UnsignedInteger i = 0; i < numSimplices; ++i) oss << cellType << "\n"; PlatformInfo::SetNumericalPrecision(oldPrecision); return oss; } void Mesh::exportToVTKFile(const String & fileName) const { std::ofstream file(fileName.c_str(), std::ios::out); if (!file) throw FileNotFoundException(HERE) << "Error: can't open file " << fileName; const String content(streamToVTKFormat()); file << content; file.close(); } /* Method save() stores the object through the StorageManager */ void Mesh::save(Advocate & adv) const { DomainImplementation::save(adv); adv.saveAttribute("vertices_", vertices_); adv.saveAttribute("simplices_", simplices_); adv.saveAttribute("tree_", tree_); adv.saveAttribute("verticesToSimplices_", verticesToSimplices_); } /* Method load() reloads the object from the StorageManager */ void Mesh::load(Advocate & adv) { DomainImplementation::load(adv); adv.loadAttribute("vertices_", vertices_); adv.loadAttribute("simplices_", simplices_); adv.loadAttribute("tree_", tree_); adv.loadAttribute("verticesToSimplices_", verticesToSimplices_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/RegularGrid.cxx000066400000000000000000000130111307543307100214500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class RegularGrid implements an equaly spaced set of real values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RegularGrid.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS static const Factory Factory_RegularGrid; CLASSNAMEINIT(RegularGrid); /* Default constructor */ RegularGrid::RegularGrid() : Mesh() , start_(0.0) , step_(1.0) , n_(0) { // Nothing to do vertices_.setDescription(Description(1, "t")); } /* Parameters constructor */ RegularGrid::RegularGrid(const Scalar start, const Scalar step, const UnsignedInteger n) : Mesh() , start_(start) , step_(step) , n_(n) { // Check if there is at least one point if (n >= 1) { // The mesh is the description by extension of the grid vertices_ = Sample(n, 1); for (UnsignedInteger i = 0; i < n; ++i) vertices_[i][0] = start_ + i * step_; // Here we know that n > 0 simplices_ = IndicesCollection(n - 1); for (UnsignedInteger i = 0; i < n - 1; ++i) { Indices element(2); element[0] = i; element[1] = i + 1; simplices_[i] = element; } } vertices_.setDescription(Description(1, "t")); } RegularGrid::RegularGrid(const Mesh & mesh) : Mesh(mesh) , start_(0.0) , step_(1.0) , n_(0) { // Check if the given mesh can be upgraded to a RegularGrid if (mesh.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the mesh must be of dimension 1 to be converted into a RegularGrid."; if (!mesh.isRegular()) throw InvalidArgumentException(HERE) << "Error: the mesh must be regular to be converted into a RegularGrid."; n_ = mesh.getVerticesNumber(); if (n_ == 0) throw InvalidArgumentException(HERE) << "Error: the mesh must contains at least one vertex to be converted into a RegularGrid."; start_ = mesh.getVertices()[0][0]; if (n_ > 1) step_ = (mesh.getVertices()[n_ - 1][0] - start_) / (n_ - 1); vertices_.setDescription(Description(1, "t")); } /* Virtual constructor method */ RegularGrid * RegularGrid::clone() const { return new RegularGrid( *this ); } Bool RegularGrid::operator == (const RegularGrid & rhs) const { const RegularGrid & lhs = *this; return (lhs.start_ == rhs.start_) && (lhs.step_ == rhs.step_) && (lhs.n_ == rhs.n_); } Bool RegularGrid::operator != (const RegularGrid & rhs) const { return !operator==(rhs); } Scalar RegularGrid::getStart() const { return start_; } /* This method computes the timestamp of the very next step past the time series (STL convention) */ Scalar RegularGrid::getEnd() const { return start_ + step_ * n_; } Scalar RegularGrid::getStep() const { return step_; } UnsignedInteger RegularGrid::getN() const { return n_; } Scalar RegularGrid::getValue(const UnsignedInteger i) const { if (i >= n_) throw OutOfBoundException(HERE) << "Error: the given index i=" << i << " must be less than the number of ticks n=" << n_; return vertices_[i][0]; } Point RegularGrid::getValues() const { return vertices_.getImplementation()->getData(); } /* Tells if it is regular */ Bool RegularGrid::isRegular() const { return true; } /* Get the index of the nearest vertex */ UnsignedInteger RegularGrid::getNearestVertexIndex(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension 1, got a point of dimension " << point.getDimension(); const Scalar x = point[0]; if (x <= start_) return 0; if (x >= start_ + (n_ - 1) * step_) return n_ - 1; return static_cast(round((x - start_) / step_)); } /* Tells if the given grid follows the current one */ Bool RegularGrid::follows(const RegularGrid & starter) const { const RegularGrid & continuer = *this; return (starter.getEnd() == continuer.getStart()) && (starter.getStep()) == continuer.getStep(); } /* * String converter */ String RegularGrid::__repr__() const { return OSS(true) << "class=RegularGrid name=" << getName() << " start=" << start_ << " step=" << step_ << " n=" << n_; } String RegularGrid::__str__(const String & offset) const { return OSS(false) << offset << "RegularGrid(start=" << start_ << ", step=" << step_ << ", n=" << n_ << ")"; } /* Method save() stores the object through the StorageManager */ void RegularGrid::save(Advocate & adv) const { Mesh::save(adv); adv.saveAttribute( "start_", start_); adv.saveAttribute( "step_", step_); adv.saveAttribute( "n_", n_); } /* Method load() reloads the object from the StorageManager */ void RegularGrid::load(Advocate & adv) { Mesh::load(adv); adv.loadAttribute( "start_", start_); adv.loadAttribute( "step_", step_); adv.loadAttribute( "n_", n_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Geom/openturns/000077500000000000000000000000001307543307100205565ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Geom/openturns/Domain.hxx000066400000000000000000000046051307543307100225230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Domain is the interface of DomainImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DOMAIN_HXX #define OPENTURNS_DOMAIN_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/DomainImplementation.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Domain * * A class that holds a domain */ class OT_API Domain : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ Domain(); /** Copy-Standard constructors */ Domain(const DomainImplementation & implementation); /** Standard constructor based on Interval(a,b) */ Domain(const Point & a, const Point & b); /** Check if the domain is empty, ie if its volume is zero */ Bool isEmpty() const; /** Check if the mesh is numerically empty, i.e. if the volume of its discretization is zero */ Bool isNumericallyEmpty() const; /** Check if the closed domain contains a given point */ virtual Bool contains(const Point & point) const; /** Check if the given point is numerically inside of the domain, i.e. in its discretization */ Bool numericallyContains(const Point & point) const; /** Get the numerical volume of the discretization of the domain */ Scalar getNumericalVolume() const; /** Get the volume of the domain */ Scalar getVolume() const; /** Dimension accessors */ virtual UnsignedInteger getDimension() const; /** Lower bound of the bounding box */ Point getLowerBound() const; /** Upper bound of the bounding box */ Point getUpperBound() const; }; /* class Domain */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DOMAIN_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/DomainImplementation.hxx000066400000000000000000000060731307543307100254320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief DomainImplementation is defined as a domain of \mathbb{R}^d * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DOMAINIMPLEMENTATION_HXX #define OPENTURNS_DOMAINIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DomainImplementation * * A class that holds a collection of domain */ class OT_API DomainImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ explicit DomainImplementation(const UnsignedInteger dimension = 1); /** Virtual constructor method */ virtual DomainImplementation * clone() const; /** Check if the domain is empty, ie if its volume is zero */ Bool isEmpty() const; /** Check if the mesh is numerically empty, i.e. if the volume of its discretization is zero */ Bool isNumericallyEmpty() const; /** Check if the closed domain contains a given point */ virtual Bool contains(const Point & point) const; /** Check if the given point is numerically inside of the domain, i.e. in its discretization */ Bool numericallyContains(const Point & point) const; /** Get the numerical volume of the discretization of the domain */ Scalar getNumericalVolume() const; /** Get the volume of the domain */ Scalar getVolume() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Dimension accessors */ UnsignedInteger getDimension() const; /** Lower bound of the bounding box */ virtual Point getLowerBound() const; /** Upper bound of the bounding box */ virtual Point getUpperBound() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: // Compute the total volume of the domain virtual void computeVolume() const; /** The dimension of the DomainImplementation */ UnsignedInteger dimension_; // The global volume mutable Scalar volume_; // Flag to tell if the global volume has already been computed mutable Bool isAlreadyComputedVolume_; }; /* class DomainImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DOMAINIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/Interval.hxx000066400000000000000000000115431307543307100230770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interval is defined as the cartesian product of n 1D intervalls ]low_1, up_1]x...x]low_n,up_n] * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTERVAL_HXX #define OPENTURNS_INTERVAL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/DomainImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Interval * * A class that holds a collection of interval */ class OT_API Interval : public DomainImplementation { CLASSNAME; public: typedef Collection BoolCollection; typedef PersistentCollection BoolPersistentCollection; /** Default constructor */ explicit Interval(const UnsignedInteger dimension = 0); /** Parameters constructor, simplified for 1D case */ Interval(const Scalar lowerBound, const Scalar upperBound); /** Parameters constructor */ Interval(const Point & lowerBound, const Point & upperBound); /** Parameters constructor */ Interval(const Point & lowerBound, const Point & upperBound, const BoolCollection & finiteLowerBound, const BoolCollection & finiteUpperBound); /** Virtual constructor method */ virtual Interval * clone() const; /** Check if the interval is empty, i.e. if we have lowerBound >= upperBound for at least one component */ Bool isEmpty() const; /** Check if the given point is inside of the closed interval */ Bool contains(const Point & point) const; /** Check if the given point is numerically inside of the closed interval, i.e. using only the bounds part of the interval */ Bool numericallyContains(const Point & point) const; /** Returns the interval equals to the intersection between the interval and another one */ Interval intersect(const Interval & other) const; /** Returns the interval equals to the union between the interval and another one */ Interval join(const Interval & other) const; /** Addition operator */ Interval operator +(const Interval & rhs) const; /** Substraction operator */ Interval operator -(const Interval & rhs) const; /** In-place addition operator */ Interval & operator +=(const Interval & other); /** In-place substraction operator */ Interval & operator -=(const Interval & other); /** Product operator */ Interval operator *(const Scalar scalar) const; /** In-place product operator */ Interval & operator *=(const Scalar scalar); /** Comparison operator */ Bool operator == (const Interval & other) const; Bool operator != (const Interval & other) const; using DomainImplementation::operator ==; using DomainImplementation::operator !=; /** Lower bound accessor */ Point getLowerBound() const; void setLowerBound(const Point & lowerBound); /** Upper bound accessor */ Point getUpperBound() const; void setUpperBound(const Point & upperBound); /** Lower bound flag accessor */ BoolCollection getFiniteLowerBound() const; void setFiniteLowerBound(const BoolCollection & finiteLowerBound); /** Upper bound flag accessor */ BoolCollection getFiniteUpperBound() const; void setFiniteUpperBound(const BoolCollection & finiteUpperBound); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Get the numerical volume of the interval */ void computeVolume() const; // An n-D intervall is defined as the cartesian product of n 1D intervalls ]low_1, up_1]x...x]low_n,up_n] Point lowerBound_; Point upperBound_; // Flags that tell if the bounds are finite or not. // The bound is finite if the flag is true, else it is equal to -inf if the associated value is < 0, +inf else BoolPersistentCollection finiteLowerBound_; BoolPersistentCollection finiteUpperBound_; }; /* class Interval */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTERVAL_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/IntervalMesher.hxx000066400000000000000000000040061307543307100242370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meshing algorithm for intervals * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTERVALMESHER_HXX #define OPENTURNS_INTERVALMESHER_HXX #include "openturns/Interval.hxx" #include "openturns/Mesh.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IntervalMesher */ class OT_API IntervalMesher : public PersistentObject { CLASSNAME; public: /** Default constructor */ IntervalMesher(); /** Default constructor */ explicit IntervalMesher(const Indices & discretization); /** Virtual constructor */ virtual IntervalMesher * clone() const; /** Discretization accessors */ void setDiscretization(const Indices & discretization); Indices getDiscretization() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ virtual Mesh build(const Interval & interval, const Bool diamond = ResourceMap::GetAsBool("IntervalMesher-UseDiamond")) const; protected: private: /* Discretization in each dimension */ Indices discretization_; }; /* class IntervalMesher */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTERVALMESHER_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/LevelSet.hxx000066400000000000000000000065471307543307100230460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LevelSet is defined as the set of points such that f(x_1,...,x_n) <= level * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEVELSET_HXX #define OPENTURNS_LEVELSET_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/DomainImplementation.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LevelSet * * A class that holds a collection of levelSet */ class OT_API LevelSet : public DomainImplementation { CLASSNAME; public: /** Default constructor */ explicit LevelSet(const UnsignedInteger dimension = 1); /** Parameters constructor, simplified for 1D case */ explicit LevelSet(const Function & function, const Scalar level = 0.0); /** Virtual constructor method */ virtual LevelSet * clone() const; /** Check if the given point is inside of the closed levelSet */ Bool contains(const Point & point) const; /** Returns the levelSet equals to the intersection between the levelSet and another one */ LevelSet intersect(const LevelSet & other) const; /** Returns the levelSet equals to the union between the levelSet and another one */ LevelSet join(const LevelSet & other) const; /** Comparison operator */ Bool operator == (const LevelSet & other) const; /** Function accessor */ Function getFunction() const; void setFunction(const Function & function); /** Level accessor */ Scalar getLevel() const; void setLevel(const Scalar level); /** Lower bound of the bounding box */ void setLowerBound(const Point & bound); Point getLowerBound() const; /** Upper bound of the bounding box */ void setUpperBound(const Point & bound); Point getUpperBound() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute the lower bound using optimization */ void computeLowerBound() const; /** Compute the upper bound using optimization */ void computeUpperBound() const; /** Function defining the level set*/ Function function_; /** Level defining the level set */ Scalar level_; /** Lower bound of the bounding box */ mutable Point lowerBound_; /** Upper bound of the bounding box */ mutable Point upperBound_; }; /* class LevelSet */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEVELSET_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/LevelSetMesher.hxx000066400000000000000000000053251307543307100242030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meshing algorithm for levelSets * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEVELSETMESHER_HXX #define OPENTURNS_LEVELSETMESHER_HXX #include "openturns/LevelSet.hxx" #include "openturns/Interval.hxx" #include "openturns/Mesh.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/AbdoRackwitz.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LevelSetMesher */ class OT_API LevelSetMesher : public PersistentObject { CLASSNAME; public: /** Default constructor */ LevelSetMesher(); /** Default constructor */ explicit LevelSetMesher(const Indices & discretization, const OptimizationAlgorithm & solver = AbdoRackwitz()); /** Virtual constructor */ virtual LevelSetMesher * clone() const; /** Discretization accessors */ void setDiscretization(const Indices & discretization); Indices getDiscretization() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Optimization solver accessor */ void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationAlgorithm() const; // @deprecated void setOptimizationSolver(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationSolver() const; /* Here is the interface that all derived class must implement */ /** Build a mesh based on a domain */ virtual Mesh build(const LevelSet & levelSet, const Bool project = true) const; virtual Mesh build(const LevelSet & levelSet, const Interval & boundingBox, const Bool project = true) const; protected: private: /* Discretization in each dimension */ Indices discretization_; /* Optimization solver used to project the vertices */ mutable OptimizationAlgorithm solver_; }; /* class LevelSetMesher */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEVELSETMESHER_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/Mesh.hxx000066400000000000000000000146771307543307100222220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Mesh is defined as a collection of n-D vertices and simplices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MESH_HXX #define OPENTURNS_MESH_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/Indices.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/DomainImplementation.hxx" #include "openturns/Graph.hxx" #include "openturns/TBB.hxx" #include "openturns/KDTree.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Mesh * * A class that holds a mesh */ class OT_API Mesh : public DomainImplementation { CLASSNAME; public: typedef Collection< Indices > IndicesCollection; typedef PersistentCollection< Indices > IndicesPersistentCollection; /** Default constructor */ explicit Mesh(const UnsignedInteger dimension = 1); /** Parameters constructor */ explicit Mesh(const Sample & vertices); /** Parameters constructor */ Mesh(const Sample & vertices, const IndicesCollection & simplices); /** Virtual constructor method */ virtual Mesh * clone() const; /** Check if the given point is inside of the closed mesh */ Bool contains(const Point & point) const; /** Get the description of the vertices */ Description getDescription() const; /** Get the number of vertices */ UnsignedInteger getVerticesNumber() const; /** Get the number of simplices */ UnsignedInteger getSimplicesNumber() const; /** Get the index of the nearest vertex */ UnsignedInteger getNearestVertexIndex(const Point & point) const; /** Get the index of the nearest vertex and the index of the containing simplex if any */ Indices getNearestVertexAndSimplexIndicesWithCoordinates(const Point & point, Point & coordinates) const; /** Get the nearest vertex */ Point getNearestVertex(const Point & point) const; /** Get the index of the nearest vertex for a set of points */ Indices getNearestVertexIndex(const Sample & points) const; /** Get the nearest vertex for a set of points */ Sample getNearestVertex(const Sample & points) const; /** Get the map between vertices and simplices: for each vertex, list the vertices indices it belongs to */ IndicesCollection getVerticesToSimplicesMap() const; /** Compute weights such that an integral of a function over the mesh * is a weighted sum of its values at the vertices */ Point computeWeights() const; /** Comparison operator */ Bool operator == (const Mesh & rhs) const; /** Check mesh validity, i.e: non-overlaping simplices, no unused vertex, no simplices with duplicate vertices, no coincident vertices */ Bool isValid() const; /** Check if the given point is in the given simplex */ Bool checkPointInSimplex(const Point & point, const UnsignedInteger index) const; /** Check if the given point is in the given simplex and returns its barycentric coordinates */ Bool checkPointInSimplexWithCoordinates(const Point & point, const UnsignedInteger index, Point & coordinates) const; /** Vertices accessor */ Sample getVertices() const; void setVertices(const Sample & vertices); /** Vertex accessor */ Point getVertex(const UnsignedInteger index) const; void setVertex(const UnsignedInteger index, const Point & vertex); /** Simplices accessor */ IndicesCollection getSimplices() const; void setSimplices(const IndicesCollection & simplices); /** Simplex accessor */ Indices getSimplex(const UnsignedInteger index) const; /** Compute the volume of a given simplex */ Scalar computeSimplexVolume(const UnsignedInteger index) const; /** Compute P1 gram matrix */ CovarianceMatrix computeP1Gram() const; /** Tells if the mesh is regular */ Bool isRegular() const; /** Lower bound of the bounding box */ Point getLowerBound() const; /** Upper bound of the bounding box */ Point getUpperBound() const; /** Drawing method */ Graph draw() const; Graph draw1D() const; Graph draw2D() const; Graph draw3D(const Bool drawEdge = true, const Scalar thetaX = 0.0, const Scalar thetaY = 0.0, const Scalar thetaZ = 0.0, const Bool shading = false, const Scalar rho = 1.0) const; Graph draw3D(const Bool drawEdge, const SquareMatrix & rotation, const Bool shading, const Scalar rho) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** FreeFem mesh import */ static Mesh ImportFromMSHFile(const String & fileName); /** VTK export */ String streamToVTKFormat() const; void exportToVTKFile(const String & fileName) const; protected: // Build the affine matrix associated with a given simplex SquareMatrix buildSimplexMatrix(const UnsignedInteger index) const; // Compute the total volume of the mesh void computeVolume() const; void checkValidity() const; // An n-D mesh is a set of vertices with a topology described by a set of simplices // The vertices Sample vertices_; // The simplices IndicesPersistentCollection simplices_; // The kd-tree associated to the vertices KDTree tree_; // The vertices to simplices map mutable IndicesPersistentCollection verticesToSimplices_; }; /* class Mesh */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MESH_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/OTGeom.hxx000066400000000000000000000023401307543307100224400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Geom * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTGEOM_HXX #define OPENTURNS_OTGEOM_HXX #include "openturns/DomainImplementation.hxx" #include "openturns/Domain.hxx" #include "openturns/Interval.hxx" #include "openturns/IntervalMesher.hxx" #include "openturns/LevelSet.hxx" #include "openturns/LevelSetMesher.hxx" #include "openturns/Mesh.hxx" #include "openturns/RegularGrid.hxx" #endif /* OPENTURNS_OTGEOM_HXX */ openturns-1.9/lib/src/Base/Geom/openturns/RegularGrid.hxx000066400000000000000000000064471307543307100235310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class RegularGrid implements an equaly spaced set of real values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTCULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_REGULARGRID_HXX #define OPENTURNS_REGULARGRID_HXX #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RegularGrid * * The RegularGrid class defines some regular time slice defined by three values: * - either a start time, an interval (aka timeStep) and a number of steps * - or a start time, a number of steps and an end time * * Note: the end time conforms to the STL standard of "one past the end", so * the following formula defines the end time: * end time = start time + ( timeStep * steps ) */ class OT_API RegularGrid : public Mesh { CLASSNAME; public: /** Default constructor */ RegularGrid(); /** Parameters constructor */ RegularGrid(const Scalar start, const Scalar step, const UnsignedInteger n); /** Parameters constructor */ RegularGrid(const Mesh & mesh); /** Virtual constructor method */ virtual RegularGrid * clone() const; /** Comparison operator */ Bool operator == (const RegularGrid & rhs) const; /** Comparison operator */ Bool operator != (const RegularGrid & rhs) const; /** Start accessor */ Scalar getStart() const; /** This method computes the timestamp of the very next step past the time series (STL convention) */ Scalar getEnd() const; /** Step accessor */ Scalar getStep() const; /** TimeStamp number accessor */ UnsignedInteger getN() const; /** Get the value at index i */ Scalar getValue(const UnsignedInteger i) const; /** Get all the values as a sample */ Point getValues() const; /** Check if the given grid follows the current grid */ Bool follows(const RegularGrid & starter) const; /** Tells if it is regular */ Bool isRegular() const; /** Get the index of the nearest vertex */ UnsignedInteger getNearestVertexIndex(const Point & point) const; /** * String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The start of the regular grid */ Scalar start_; /** The step of the regular grid */ Scalar step_; /** The number of stamps of the underlying regular grid */ UnsignedInteger n_; }; // end class RegularGrid END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_REGULARGRID_HXX */ openturns-1.9/lib/src/Base/Graph/000077500000000000000000000000001307543307100166735ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Graph/BarPlot.cxx000066400000000000000000000106611307543307100207660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BarPlot class for barplots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BarPlot.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BarPlot); static const Factory Factory_BarPlot; /* Default constructor */ BarPlot::BarPlot(const Sample & data, const Scalar origin, const String & legend) : DrawableImplementation(data, legend) , origin_(origin) { // Check data validity setData(data); } /* Constructor with parameters */ BarPlot::BarPlot(const Sample & data, const Scalar origin, const String & color, const String & fillStyle, const String & lineStyle, const UnsignedInteger lineWidth, const String & legend) : DrawableImplementation(data, legend) , origin_(origin) { // Check data validity setData(data); setColor(color); setFillStyle(fillStyle); setLineStyle(lineStyle); setLineWidth(lineWidth); } /* Constructor with old parameters */ BarPlot::BarPlot(const Sample & data, const Scalar origin, const String & color, const String & fillStyle, const String & lineStyle, const String & legend) : DrawableImplementation(data, legend) , origin_(origin) { // Check data validity setData(data); setColor(color); setFillStyle(fillStyle); setLineStyle(lineStyle); setLineWidth(1); } /* String converter */ String BarPlot::__repr__() const { OSS oss; oss << "class=" << BarPlot::GetClassName() << " name=" << getName() << " origin=" << origin_ << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Accessor for origin */ Scalar BarPlot::getOrigin() const { return origin_; } /* Accessor for origin */ void BarPlot::setOrigin(const Scalar origin) { origin_ = origin; } /* Accessor for boundingbox */ BarPlot::BoundingBox BarPlot::getBoundingBox() const { BoundingBox boundingBox(BoundingBoxSize); const Point max(data_.getMax()); const Point min(data_.getMin()); boundingBox[0] = origin_; boundingBox[1] = origin_; const UnsignedInteger size = data_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) { boundingBox[1] += data_[i][0]; } boundingBox[2] = std::min(0.0, min[1]); boundingBox[3] = std::max(0.0, max[1]); return boundingBox; } /* Draw method */ String BarPlot::draw() const { dataFileName_ = ""; OSS oss; // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing oss << "x <- dataOT[, 1];" << "y <- dataOT[, 2];" << "n <- length(y)" << ";" << "x <- cumsum(c(" << origin_ << ", x));" << "rect(x[1:n], rep(0, n), x[2:(n + 1)], y, col=\"" << color_ << "\", lwd=" << lineWidth_ << ",lty=\"" << lineStyle_; if(getFillStyle() == "shaded") oss << "\", density=20)"; else oss << "\")"; return oss; } /* Clone method */ BarPlot * BarPlot::clone() const { return new BarPlot(*this); } /* Check validity of data */ void BarPlot::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Method save() stores the object through the StorageManager */ void BarPlot::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "origin_", origin_ ); } /* Method load() reloads the object from the StorageManager */ void BarPlot::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "origin_", origin_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/CMakeLists.txt000066400000000000000000000023231307543307100214330ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Drawable.cxx) ot_add_source_file (DrawableImplementation.cxx) ot_add_source_file (Contour.cxx) ot_add_source_file (Curve.cxx) ot_add_source_file (Cloud.cxx) ot_add_source_file (Staircase.cxx) ot_add_source_file (BarPlot.cxx) ot_add_source_file (Pairs.cxx) ot_add_source_file (Pie.cxx) ot_add_source_file (Polygon.cxx) ot_add_source_file (PolygonArray.cxx) ot_add_source_file (Text.cxx) ot_add_source_file (Graph.cxx) ot_add_source_file (GraphImplementation.cxx) ot_install_header_file (Contour.hxx) ot_install_header_file (OTGraph.hxx) ot_install_header_file (DrawableImplementation.hxx) ot_install_header_file (Cloud.hxx) ot_install_header_file (Drawable.hxx) ot_install_header_file (BarPlot.hxx) ot_install_header_file (GraphImplementation.hxx) ot_install_header_file (Pairs.hxx) ot_install_header_file (Pie.hxx) ot_install_header_file (Polygon.hxx) ot_install_header_file (PolygonArray.hxx) ot_install_header_file (Staircase.hxx) ot_install_header_file (Text.hxx) ot_install_header_file (Rfunctions.hxx) ot_install_header_file (Curve.hxx) ot_install_header_file (Graph.hxx) openturns-1.9/lib/src/Base/Graph/Cloud.cxx000066400000000000000000000111021307543307100204600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cloud class for cloud plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Cloud.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Cloud); static const Factory Factory_Cloud; /* Default constructor */ Cloud::Cloud(const Sample & data, const String & legend) : DrawableImplementation(data, legend) { // Check data validity setData(data); } /* Constructor from complex numbers */ Cloud::Cloud(const ComplexCollection & data, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { // Convert the complex numbers into a Sample const UnsignedInteger size = data.getSize(); Sample sample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { sample[i][0] = data[i].real(); sample[i][1] = data[i].imag(); } // Check data validity setData(sample); } /* Contructor from 2 data sets */ Cloud::Cloud(const Sample & dataX, const Sample & dataY, const String & legend): DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getSize(); if (dataY.getSize() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Cloud based on two numerical samples with different size."; if ((dataX.getDimension() != 1) || (dataY.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: cannot build a Cloud based on two numerical samples of dimension greater than 1."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i][0]; dataFull[i][1] = dataY[i][0]; } // Check data validity setData(dataFull); } Cloud::Cloud(const Point & dataX, const Point & dataY, const String & legend): DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getDimension(); if (dataY.getDimension() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Cloud based on two numerical points with different dimension."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i]; dataFull[i][1] = dataY[i]; } // Check data validity setData(dataFull); } /* Constructor with parameters */ Cloud::Cloud(const Sample & data, const String & color, const String & pointStyle, const String & legend) : DrawableImplementation(data, legend) { // Check data validity setData(data); setColor(color); setPointStyle(pointStyle); } /* String converter */ String Cloud::__repr__() const { OSS oss; oss << "class=" << Cloud::GetClassName() << " name=" << getName() << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Draw method */ String Cloud::draw() const { dataFileName_ = ""; OSS oss; if (pointStyle_ != "none") { // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing oss << "points(dataOT[,1], dataOT[,2]"; const String code((OSS() << getPointCode(pointStyle_))); oss << ",pch=" << (pointStyle_ == "dot" ? "\".\"" : code) << ",col=\"" << color_ << "\",lwd=" << lineWidth_ << ")"; } return oss; } /* Clone method */ Cloud * Cloud::clone() const { return new Cloud(*this); } /* Check validity of data */ void Cloud::checkData(const Sample & data) const { if (data.getDimension() != 2) throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } /* Method save() stores the object through the StorageManager */ void Cloud::save(Advocate & adv) const { DrawableImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Cloud::load(Advocate & adv) { DrawableImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Contour.cxx000066400000000000000000000204461307543307100210560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Contour class for contourchart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Contour.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Contour); static const Factory Factory_Contour; /* Default constructor */ Contour::Contour(const UnsignedInteger dimX, const UnsignedInteger dimY, const Sample & data, const String & legend) : DrawableImplementation(data, legend) , x_(Sample(dimX, 1)) , y_(Sample(dimY, 1)) , levels_(Point(ResourceMap::GetAsUnsignedInteger( "Contour-DefaultLevelsNumber" ))) , labels_(ResourceMap::GetAsUnsignedInteger( "Contour-DefaultLevelsNumber" )) , drawLabels_(true) { if (dimX < 2) throw InvalidArgumentException(HERE) << "Error: the x dimension must be greater or equal to 2"; if (dimY < 2) throw InvalidArgumentException(HERE) << "Error: the y dimension must be greater or equal to 2"; if (dimX * dimY != data.getSize()) throw InvalidArgumentException(HERE) << "Error: the given dimensions are not compatible with the data"; // Check data validity setData(data); // By default, x is assumed to be equally spaced in [0, 1] for (UnsignedInteger i = 0; i < dimX; ++i) x_[i][0] = Scalar(i) / (dimX - 1.0); // By default, y is assumed to be equally spaced in [0, 1] for (UnsignedInteger i = 0; i < dimY; ++i) y_[i][0] = Scalar(i) / (dimY - 1.0); // Build the levels buildDefaultLevels(); // Build the labels buildDefaultLabels(); } /* Constructor with parameters */ Contour::Contour(const Sample & x, const Sample & y, const Sample & data, const Point & levels, const Description & labels, const Bool drawLabels, const String & legend) : DrawableImplementation(data, legend) , x_(x) , y_(y) , levels_(levels) , labels_(labels) , drawLabels_(drawLabels) { if (levels.getDimension() == 0) buildDefaultLevels(); if (drawLabels && (labels.getSize() == 0)) buildDefaultLabels(); if (drawLabels && (levels.getDimension() > 0) && (labels.getSize() > 0) && (levels.getDimension() != labels.getSize())) throw InvalidArgumentException(HERE) << "Error: the levels are incompatible with the labels"; // Check data validity setData(data); } /* String converter */ String Contour::__repr__() const { OSS oss; oss << "class=" << Contour::GetClassName() << " name=" << getName() << " x=" << x_ << " y=" << y_ << " levels=" << levels_ << " labels=" << labels_ << " show labels=" << drawLabels_ << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Accessor for first coordinate */ Sample Contour::getX() const { return x_; } void Contour::setX(const Sample & x) { x_ = x; } /* Accessor for second coordinate */ Sample Contour::getY() const { return y_; } void Contour::setY(const Sample & y) { y_ = y; } /* Accessor for levels */ Point Contour::getLevels() const { return levels_; } void Contour::setLevels(const Point & levels) { levels_ = levels; if (levels.getDimension() != labels_.getSize()) buildDefaultLabels(); } /* Accessor for labels */ Description Contour::getLabels() const { return labels_; } void Contour::setLabels(const Description & labels) { if (labels.getSize() != levels_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the labels size must be equal to the levels dimension"; labels_ = labels; } /* Accessor for drawLabels */ Bool Contour::getDrawLabels() const { return drawLabels_; } void Contour::setDrawLabels(const Bool & drawLabels) { drawLabels_ = drawLabels; } /* Accessor for boundingbox */ Contour::BoundingBox Contour::getBoundingBox() const { BoundingBox boundingBox(BoundingBoxSize); boundingBox[0] = x_.getMin()[0]; boundingBox[1] = x_.getMax()[0]; boundingBox[2] = y_.getMin()[0]; boundingBox[3] = y_.getMax()[0]; return boundingBox; } /* Clean all the temporary data created by draw() method */ void Contour::clean() const { DrawableImplementation::clean(); if (xFileName_ != "") Os::Remove(xFileName_); if (yFileName_ != "") Os::Remove(yFileName_); } /* Draw method */ String Contour::draw() const { dataFileName_ = ""; xFileName_ = ""; yFileName_ = ""; OSS oss; // Stores the data in a temporary file // For a contour, it is a matrix of values oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing // Here we store the discretizations of the axes if (x_.getDimension() * x_.getSize() > ResourceMap::GetAsUnsignedInteger("Drawable-DataThreshold")) { xFileName_ = x_.storeToTemporaryFile(); yFileName_ = y_.storeToTemporaryFile(); oss << "x <- dataOT.matrix(read.table(\"" << xFileName_ << "\", stringsAsFactors = F))\n" << "y <- dataOT.matrix(read.table(\"" << yFileName_ << "\", stringsAsFactors = F))\n"; } else { oss << "x <- " << x_.streamToRFormat() << "\n" << "y <- " << y_.streamToRFormat() << "\n"; } oss << "dataOT <- matrix(dataOT, length(x), length(y))\n" << "levels=c("; const UnsignedInteger length = levels_.getSize() - 1; for(UnsignedInteger i = 0; i < length; ++i) { oss << levels_[i] << ","; } oss << levels_[length] << ")\n" << "labels=c(\""; for(UnsignedInteger i = 0; i < length; ++i) { oss << labels_[i] << "\",\""; } oss << labels_[length] << "\")\n"; oss << "contour(x, y, dataOT, " << "levels=levels," << "labels=labels," << "drawlabels=" << (drawLabels_ ? "TRUE" : "FALSE") << "," << "lty=\"" << lineStyle_ << "\"," << "col=\"" << color_ << "\"," << "lwd=" << lineWidth_ << ", add=TRUE, axes=FALSE)"; return oss; } /* Clone method */ Contour * Contour::clone() const { return new Contour(*this); } /* Check for data validity */ void Contour::checkData(const Sample & data) const { if (data.getDimension() != 1) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 1: got " << data.getDimension(); } } /* Build default levels using quantiles associated with regularly spaced probability levels */ void Contour::buildDefaultLevels(const UnsignedInteger number) { // Use the empirical quantiles const Sample sortedData(data_.sort(0)); const UnsignedInteger size = data_.getSize(); levels_ = Point(number); for (UnsignedInteger i = 0; i < number; ++i) levels_[i] = sortedData[static_cast(size * (i + 0.5) / number)][0]; levels_.erase(std::unique(levels_.begin(), levels_.end()), levels_.end()); } /* Build default labels by taking the level values */ void Contour::buildDefaultLabels() { const UnsignedInteger number = levels_.getDimension(); labels_ = Description(number); for (UnsignedInteger i = 0; i < number; ++i) labels_[i] = OSS() << levels_[i]; } /* Method save() stores the object through the StorageManager */ void Contour::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "x_", x_ ); adv.saveAttribute( "y_", y_ ); adv.saveAttribute( "levels_", levels_ ); adv.saveAttribute( "labels_", labels_ ); adv.saveAttribute( "drawLabels_", drawLabels_ ); } /* Method load() reloads the object from the StorageManager */ void Contour::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "x_", x_ ); adv.loadAttribute( "y_", y_ ); adv.loadAttribute( "levels_", levels_ ); adv.loadAttribute( "labels_", labels_ ); adv.loadAttribute( "drawLabels_", drawLabels_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Curve.cxx000066400000000000000000000125411307543307100205060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Curve class for curve plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Curve.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Curve); static const Factory Factory_Curve; /* Default constructor */ Curve::Curve(const String & legend) : DrawableImplementation(Sample(0, 2), legend) { // Nothing to do setPointStyle("none"); } /* Default constructor */ Curve::Curve(const Sample & data, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { Sample dataFull; // If data is unidimensional, assume that it means Y values with indices as X values if (data.getDimension() == 1) { const UnsignedInteger size = data.getSize(); dataFull = Sample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = i; dataFull[i][1] = data[i][0]; } } else dataFull = data; // Check data validity setData(dataFull); setPointStyle("none"); } /* Contructor from 2 data sets */ Curve::Curve(const Sample & dataX, const Sample & dataY, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getSize(); if (dataY.getSize() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Curve based on two numerical samples with different size."; if ((dataX.getDimension() != 1) || (dataY.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: cannot build a Curve based on two numerical samples of dimension greater than 1."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i][0]; dataFull[i][1] = dataY[i][0]; } // Check data validity setData(dataFull); setPointStyle("none"); } /* Contructor from 2 data sets */ Curve::Curve(const Point & dataX, const Point & dataY, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getDimension(); if (dataY.getDimension() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Curve based on two numerical points with different dimension."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i]; dataFull[i][1] = dataY[i]; } // Check data validity setData(dataFull); setPointStyle("none"); } /* Constructor with parameters */ Curve::Curve(const Sample & data, const String & color, const String & lineStyle, const UnsignedInteger lineWidth, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { Sample dataFull; // If data is unidimensional, assume that it means Y values with indices as X values if (data.getDimension() == 1) { const UnsignedInteger size = data.getSize(); dataFull = Sample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = i; dataFull[i][1] = data[i][0]; } } else dataFull = data; // Check data validity setData(dataFull); setLineStyle(lineStyle); setLineWidth(lineWidth); setColor(color); setPointStyle("none"); } /* String converter */ String Curve::__repr__() const { OSS oss; oss << "class=" << Curve::GetClassName() << " name=" << getName() << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Draw method */ String Curve::draw() const { dataFileName_ = ""; OSS oss; // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing oss << "lines(dataOT[,1], dataOT[,2]" << ", lty=\"" << lineStyle_ << "\", col=\"" << color_ << "\", lwd=" << lineWidth_; if (pointStyle_ != "none") { const String code((OSS() << getPointCode(pointStyle_))); oss << ", type=\"b\"" << ", pch=" << (pointStyle_ == "dot" ? "\".\"" : code); } else { oss << ", type=\"l\""; } oss << ")"; return oss; } /* Clone method */ Curve * Curve::clone() const { return new Curve(*this); } /* Check validity of data */ void Curve::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Method save() stores the object through the StorageManager */ void Curve::save(Advocate & adv) const { DrawableImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Curve::load(Advocate & adv) { DrawableImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Drawable.cxx000066400000000000000000000242621307543307100211460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Drawable * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Drawable.hxx" #include "openturns/Curve.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Drawable); /* Default constructor */ Drawable::Drawable(): TypedInterfaceObject(Curve(Sample(1, 2)).clone()) { // Nothing to do } /* Default constructor */ Drawable::Drawable(const DrawableImplementation & implementation): TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* String converter */ String Drawable::__repr__() const { OSS oss; oss << "class=" << Drawable::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* Here is the interface */ /* Accessor for bounding box of the drawable */ Point Drawable::getBoundingBox() const { return getImplementation()->getBoundingBox(); } /* Accessor for legend */ String Drawable::getLegend() const { return getImplementation()->getLegend(); } /* Accessor for legend */ void Drawable::setLegend(const String & legend) { copyOnWrite(); getImplementation()->setLegend(legend); } /* Accessor for legend line style */ String Drawable::getLineStyle() const { return getImplementation()->getLineStyle(); } /* Accessor for legend point style */ void Drawable::setLineStyle(const String & lineStyle) { copyOnWrite(); getImplementation()->setLineStyle(lineStyle); } /* Accessor for legend point style */ String Drawable::getPointStyle() const { return getImplementation()->getPointStyle(); } /* Accessor for legend point style */ void Drawable::setPointStyle(const String & pointStyle) { copyOnWrite(); getImplementation()->setPointStyle(pointStyle); } /* Accessor for legend fill style */ String Drawable::getFillStyle() const { return getImplementation()->getFillStyle(); } /* Accessor for legend fill style */ void Drawable::setFillStyle(const String & fillStyle) { copyOnWrite(); getImplementation()->setFillStyle(fillStyle); } /* Accessor for color */ String Drawable::getColor() const { return getImplementation()->getColor(); } String Drawable::getColorCode() const { return getImplementation()->getColorCode(); } /* Accessor for color */ void Drawable::setColor(const String & color) { copyOnWrite(); getImplementation()->setColor(color); } String Drawable::getEdgeColor() const { return getImplementation()->getEdgeColor(); } /* Accessor for line width */ UnsignedInteger Drawable::getLineWidth() const { return getImplementation()->getLineWidth(); } /* Accessor for line width */ void Drawable::setLineWidth(const UnsignedInteger lineWidth) { copyOnWrite(); getImplementation()->setLineWidth(lineWidth); } /* Accessor for pattern */ String Drawable::getPattern() const { return getImplementation()->getPattern(); } void Drawable::setPattern(const String style) { copyOnWrite(); getImplementation()->setPattern(style); } /* Accessor for center */ Point Drawable::getCenter() const { return getImplementation()->getCenter(); } void Drawable::setCenter(const Point & center) { copyOnWrite(); getImplementation()->setCenter(center); } /* Accessor for radius */ Scalar Drawable::getRadius() const { return getImplementation()->getRadius(); } void Drawable::setRadius(const Scalar radius) { copyOnWrite(); getImplementation()->setRadius(radius); } /* Accessor for labels */ Description Drawable::getLabels() const { return getImplementation()->getLabels(); } void Drawable::setLabels(const Description & labels) { copyOnWrite(); getImplementation()->setLabels(labels); } /* Accessor for color palette */ Description Drawable::getPalette() const { return getImplementation()->getPalette(); } void Drawable::setPalette(const Description & palette) { copyOnWrite(); getImplementation()->setPalette(palette); } /* Accessor for origin */ Scalar Drawable::getOrigin() const { return getImplementation()->getOrigin(); } void Drawable::setOrigin(const Scalar origin) { copyOnWrite(); getImplementation()->setOrigin(origin); } /* Accessor for first coordinate */ Sample Drawable::getX() const { return getImplementation()->getX(); } void Drawable::setX(const Sample & x) { copyOnWrite(); getImplementation()->setX(x); } /* Accessor for second coordinate */ Sample Drawable::getY() const { return getImplementation()->getY(); } void Drawable::setY(const Sample & y) { copyOnWrite(); getImplementation()->setY(y); } /* Accessor for levels */ Point Drawable::getLevels() const { return getImplementation()->getLevels(); } void Drawable::setLevels(const Point & levels) { copyOnWrite(); getImplementation()->setLevels(levels); } /* Accessor for drawLabels */ Bool Drawable::getDrawLabels() const { return getImplementation()->getDrawLabels(); } void Drawable::setDrawLabels(const Bool & drawLabels) { copyOnWrite(); getImplementation()->setDrawLabels(drawLabels); } /* Accessor for textAnnotations */ Description Drawable::getTextAnnotations() const { return getImplementation()->getTextAnnotations(); } void Drawable::setTextAnnotations(const Description & textAnnotations) { copyOnWrite(); getImplementation()->setTextAnnotations(textAnnotations); } /* Accessor for textPositions */ Description Drawable::getTextPositions() const { return getImplementation()->getTextPositions(); } void Drawable::setTextPositions(const Description & textPositions) { copyOnWrite(); getImplementation()->setTextPositions(textPositions); } /* Accessor for data */ Sample Drawable::getData() const { return getImplementation()->getData(); } /* Generate de R commands for plotting the graphic */ String Drawable::draw() const { return getImplementation()->draw(); } /* Clean all the temporary data created by draw() method */ void Drawable::clean() const { return getImplementation()->clean(); } /* Get R point code from key */ UnsignedInteger Drawable::getPointCode(const String key) const { return getImplementation()->getPointCode(key); } /* Give the colors name */ Description Drawable::GetValidColors() { return DrawableImplementation::GetValidColors(); } /* Give the line style names */ Description Drawable::GetValidLineStyles() { return DrawableImplementation::GetValidLineStyles(); } /* Give the fill style names */ Description Drawable::GetValidFillStyles() { return DrawableImplementation::GetValidFillStyles(); } /* Give the point style names */ Description Drawable::GetValidPointStyles() { return DrawableImplementation::GetValidPointStyles(); } /* Convert an hexadecimal code into an RGB triplet */ Indices Drawable::ConvertToRGB(const String & key) { return DrawableImplementation::ConvertToRGB(key); } /* Convert an hexadecimal code into an RGBA quadruplet */ Indices Drawable::ConvertToRGBA(const String & key) { return DrawableImplementation::ConvertToRGBA(key); } /* Convert an RGB triplet to a valid hexadecimal code */ String Drawable::ConvertFromName(const String & name) { return DrawableImplementation::ConvertFromName(name); } /* Convert an RGB triplet to a valid hexadecimal code */ String Drawable::ConvertFromRGB(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue) { return DrawableImplementation::ConvertFromRGB(red, green, blue); } /* Convert an RGBA quadruplet to a valid hexadecimal code */ String Drawable::ConvertFromRGBA(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue, const UnsignedInteger alpha) { return DrawableImplementation::ConvertFromRGBA(red, green, blue, alpha); } /* Convert an RGB triplet to a valid hexadecimal code */ String Drawable::ConvertFromRGB(const Scalar red, const Scalar green, const Scalar blue) { return DrawableImplementation::ConvertFromRGB(red, green, blue); } /* Convert an RGBA quadruplet to a valid hexadecimal code */ String Drawable::ConvertFromRGBA(const Scalar red, const Scalar green, const Scalar blue, const Scalar alpha) { return DrawableImplementation::ConvertFromRGBA(red, green, blue, alpha); } /* Convert an HSV triplet into an RGB triplet */ Point Drawable::ConvertFromHSVIntoRGB(const Scalar hue, const Scalar saturation, const Scalar value) { return DrawableImplementation::ConvertFromHSVIntoRGB(hue, saturation, value); } /* Convert an HSV triplet to a valid hexadecimal code */ String Drawable::ConvertFromHSV(const Scalar hue, const Scalar saturation, const Scalar value) { return DrawableImplementation::ConvertFromHSV(hue, saturation, value); } /* Convert an HSVA quadruplet to a valid hexadecimal code */ String Drawable::ConvertFromHSVA(const Scalar hue, const Scalar saturation, const Scalar value, const Scalar alpha) { return DrawableImplementation::ConvertFromHSVA(hue, saturation, value, alpha); } /* Build default palette Cycle through the hue wheel with 10 nuances and increasing darkness */ Description Drawable::BuildDefaultPalette(const UnsignedInteger size) { return DrawableImplementation::BuildDefaultPalette(size); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/DrawableImplementation.cxx000066400000000000000000001613071307543307100240560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Drawable * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/DrawableImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DrawableImplementation); static const Factory Factory_DrawableImplementation; /* default graphic paramaters */ const UnsignedInteger DrawableImplementation::BoundingBoxSize = 4; Bool DrawableImplementation::IsFirstInitialization = true; /* A map matching keys with R codes for point symbols */ std::map DrawableImplementation::SymbolCodes; /* A map matching keys with R codes for point symbols */ std::map DrawableImplementation::ColorCodes; /* Accepted line styles */ Description DrawableImplementation::ValidLineStyles; /* Accepted fill styles */ Description DrawableImplementation::ValidFillStyles; void DrawableImplementation::InitializeValidParameterList() { /* A map matching keys with R codes for point symbols */ SymbolCodes["square"] = 0; SymbolCodes["circle"] = 1; SymbolCodes["triangleup"] = 2; SymbolCodes["plus"] = 3; SymbolCodes["times"] = 4; SymbolCodes["diamond"] = 5; SymbolCodes["triangledown"] = 6; SymbolCodes["star"] = 8; SymbolCodes["fsquare"] = 15; SymbolCodes["fcircle"] = 16; SymbolCodes["ftriangleup"] = 17; SymbolCodes["fdiamond"] = 18; SymbolCodes["bullet"] = 20; SymbolCodes["dot"] = 127; SymbolCodes["none"] = 256; /* Accepted colors */ ColorCodes["white"] = "#FFFFFF"; ColorCodes["aliceblue"] = "#F0F8FF"; ColorCodes["antiquewhite"] = "#FAEBD7"; ColorCodes["antiquewhite1"] = "#FFEFDB"; ColorCodes["antiquewhite2"] = "#EEDFCC"; ColorCodes["antiquewhite3"] = "#CDC0B0"; ColorCodes["antiquewhite4"] = "#8B8378"; ColorCodes["aquamarine"] = "#7FFFD4"; ColorCodes["aquamarine1"] = "#7FFFD4"; ColorCodes["aquamarine2"] = "#76EEC6"; ColorCodes["aquamarine3"] = "#66CDAA"; ColorCodes["aquamarine4"] = "#458B74"; ColorCodes["azure"] = "#F0FFFF"; ColorCodes["azure1"] = "#F0FFFF"; ColorCodes["azure2"] = "#E0EEEE"; ColorCodes["azure3"] = "#C1CDCD"; ColorCodes["azure4"] = "#838B8B"; ColorCodes["beige"] = "#F5F5DC"; ColorCodes["bisque"] = "#FFE4C4"; ColorCodes["bisque1"] = "#FFE4C4"; ColorCodes["bisque2"] = "#EED5B7"; ColorCodes["bisque3"] = "#CDB79E"; ColorCodes["bisque4"] = "#8B7D6B"; ColorCodes["black"] = "#000000"; ColorCodes["blanchedalmond"] = "#FFEBCD"; ColorCodes["blue"] = "#0000FF"; ColorCodes["blue1"] = "#0000FF"; ColorCodes["blue2"] = "#0000EE"; ColorCodes["blue3"] = "#0000CD"; ColorCodes["blue4"] = "#00008B"; ColorCodes["blueviolet"] = "#8A2BE2"; ColorCodes["brown"] = "#A52A2A"; ColorCodes["brown1"] = "#FF4040"; ColorCodes["brown2"] = "#EE3B3B"; ColorCodes["brown3"] = "#CD3333"; ColorCodes["brown4"] = "#8B2323"; ColorCodes["burlywood"] = "#DEB887"; ColorCodes["burlywood1"] = "#FFD39B"; ColorCodes["burlywood2"] = "#EEC591"; ColorCodes["burlywood3"] = "#CDAA7D"; ColorCodes["burlywood4"] = "#8B7355"; ColorCodes["cadetblue"] = "#5F9EA0"; ColorCodes["cadetblue1"] = "#98F5FF"; ColorCodes["cadetblue2"] = "#8EE5EE"; ColorCodes["cadetblue3"] = "#7AC5CD"; ColorCodes["cadetblue4"] = "#53868B"; ColorCodes["chartreuse"] = "#7FFF00"; ColorCodes["chartreuse1"] = "#7FFF00"; ColorCodes["chartreuse2"] = "#76EE00"; ColorCodes["chartreuse3"] = "#66CD00"; ColorCodes["chartreuse4"] = "#458B00"; ColorCodes["chocolate"] = "#D2691E"; ColorCodes["chocolate1"] = "#FF7F24"; ColorCodes["chocolate2"] = "#EE7621"; ColorCodes["chocolate3"] = "#CD661D"; ColorCodes["chocolate4"] = "#8B4513"; ColorCodes["coral"] = "#FF7F50"; ColorCodes["coral1"] = "#FF7256"; ColorCodes["coral2"] = "#EE6A50"; ColorCodes["coral3"] = "#CD5B45"; ColorCodes["coral4"] = "#8B3E2F"; ColorCodes["cornflowerblue"] = "#6495ED"; ColorCodes["cornsilk"] = "#FFF8DC"; ColorCodes["cornsilk1"] = "#FFF8DC"; ColorCodes["cornsilk2"] = "#EEE8CD"; ColorCodes["cornsilk3"] = "#CDC8B1"; ColorCodes["cornsilk4"] = "#8B8878"; ColorCodes["cyan"] = "#00FFFF"; ColorCodes["cyan1"] = "#00FFFF"; ColorCodes["cyan2"] = "#00EEEE"; ColorCodes["cyan3"] = "#00CDCD"; ColorCodes["cyan4"] = "#008B8B"; ColorCodes["darkblue"] = "#00008B"; ColorCodes["darkcyan"] = "#008B8B"; ColorCodes["darkgoldenrod"] = "#B8860B"; ColorCodes["darkgoldenrod1"] = "#FFB90F"; ColorCodes["darkgoldenrod2"] = "#EEAD0E"; ColorCodes["darkgoldenrod3"] = "#CD950C"; ColorCodes["darkgoldenrod4"] = "#8B6508"; ColorCodes["darkgray"] = "#A9A9A9"; ColorCodes["darkgreen"] = "#006400"; ColorCodes["darkgrey"] = "#A9A9A9"; ColorCodes["darkkhaki"] = "#BDB76B"; ColorCodes["darkmagenta"] = "#8B008B"; ColorCodes["darkolivegreen"] = "#556B2F"; ColorCodes["darkolivegreen1"] = "#CAFF70"; ColorCodes["darkolivegreen2"] = "#BCEE68"; ColorCodes["darkolivegreen3"] = "#A2CD5A"; ColorCodes["darkolivegreen4"] = "#6E8B3D"; ColorCodes["darkorange"] = "#FF8C00"; ColorCodes["darkorange1"] = "#FF7F00"; ColorCodes["darkorange2"] = "#EE7600"; ColorCodes["darkorange3"] = "#CD6600"; ColorCodes["darkorange4"] = "#8B4500"; ColorCodes["darkorchid"] = "#9932CC"; ColorCodes["darkorchid1"] = "#BF3EFF"; ColorCodes["darkorchid2"] = "#B23AEE"; ColorCodes["darkorchid3"] = "#9A32CD"; ColorCodes["darkorchid4"] = "#68228B"; ColorCodes["darkred"] = "#8B0000"; ColorCodes["darksalmon"] = "#E9967A"; ColorCodes["darkseagreen"] = "#8FBC8F"; ColorCodes["darkseagreen1"] = "#C1FFC1"; ColorCodes["darkseagreen2"] = "#B4EEB4"; ColorCodes["darkseagreen3"] = "#9BCD9B"; ColorCodes["darkseagreen4"] = "#698B69"; ColorCodes["darkslateblue"] = "#483D8B"; ColorCodes["darkslategray"] = "#2F4F4F"; ColorCodes["darkslategray1"] = "#97FFFF"; ColorCodes["darkslategray2"] = "#8DEEEE"; ColorCodes["darkslategray3"] = "#79CDCD"; ColorCodes["darkslategray4"] = "#528B8B"; ColorCodes["darkslategrey"] = "#2F4F4F"; ColorCodes["darkturquoise"] = "#00CED1"; ColorCodes["darkviolet"] = "#9400D3"; ColorCodes["deeppink"] = "#FF1493"; ColorCodes["deeppink1"] = "#FF1493"; ColorCodes["deeppink2"] = "#EE1289"; ColorCodes["deeppink3"] = "#CD1076"; ColorCodes["deeppink4"] = "#8B0A50"; ColorCodes["deepskyblue"] = "#00BFFF"; ColorCodes["deepskyblue1"] = "#00BFFF"; ColorCodes["deepskyblue2"] = "#00B2EE"; ColorCodes["deepskyblue3"] = "#009ACD"; ColorCodes["deepskyblue4"] = "#00688B"; ColorCodes["dimgray"] = "#696969"; ColorCodes["dimgrey"] = "#696969"; ColorCodes["dodgerblue"] = "#1E90FF"; ColorCodes["dodgerblue1"] = "#1E90FF"; ColorCodes["dodgerblue2"] = "#1C86EE"; ColorCodes["dodgerblue3"] = "#1874CD"; ColorCodes["dodgerblue4"] = "#104E8B"; ColorCodes["firebrick"] = "#B22222"; ColorCodes["firebrick1"] = "#FF3030"; ColorCodes["firebrick2"] = "#EE2C2C"; ColorCodes["firebrick3"] = "#CD2626"; ColorCodes["firebrick4"] = "#8B1A1A"; ColorCodes["floralwhite"] = "#FFFAF0"; ColorCodes["forestgreen"] = "#228B22"; ColorCodes["gainsboro"] = "#DCDCDC"; ColorCodes["ghostwhite"] = "#F8F8FF"; ColorCodes["gold"] = "#FFD700"; ColorCodes["gold1"] = "#FFD700"; ColorCodes["gold2"] = "#EEC900"; ColorCodes["gold3"] = "#CDAD00"; ColorCodes["gold4"] = "#8B7500"; ColorCodes["goldenrod"] = "#DAA520"; ColorCodes["goldenrod1"] = "#FFC125"; ColorCodes["goldenrod2"] = "#EEB422"; ColorCodes["goldenrod3"] = "#CD9B1D"; ColorCodes["goldenrod4"] = "#8B6914"; { ColorCodes["gray"] = "#BEBEBE"; ColorCodes["gray0"] = "#000000"; ColorCodes["gray1"] = "#030303"; ColorCodes["gray2"] = "#050505"; ColorCodes["gray3"] = "#080808"; ColorCodes["gray4"] = "#0A0A0A"; ColorCodes["gray5"] = "#0D0D0D"; ColorCodes["gray6"] = "#0F0F0F"; ColorCodes["gray7"] = "#121212"; ColorCodes["gray8"] = "#141414"; ColorCodes["gray9"] = "#171717"; ColorCodes["gray10"] = "#1A1A1A"; ColorCodes["gray11"] = "#1C1C1C"; ColorCodes["gray12"] = "#1F1F1F"; ColorCodes["gray13"] = "#212121"; ColorCodes["gray14"] = "#242424"; ColorCodes["gray15"] = "#262626"; ColorCodes["gray16"] = "#292929"; ColorCodes["gray17"] = "#2B2B2B"; ColorCodes["gray18"] = "#2E2E2E"; ColorCodes["gray19"] = "#303030"; ColorCodes["gray20"] = "#333333"; ColorCodes["gray21"] = "#363636"; ColorCodes["gray22"] = "#383838"; ColorCodes["gray23"] = "#3B3B3B"; ColorCodes["gray24"] = "#3D3D3D"; ColorCodes["gray25"] = "#404040"; ColorCodes["gray26"] = "#424242"; ColorCodes["gray27"] = "#454545"; ColorCodes["gray28"] = "#474747"; ColorCodes["gray29"] = "#4A4A4A"; ColorCodes["gray30"] = "#4D4D4D"; ColorCodes["gray31"] = "#4F4F4F"; ColorCodes["gray32"] = "#525252"; ColorCodes["gray33"] = "#545454"; ColorCodes["gray34"] = "#575757"; ColorCodes["gray35"] = "#595959"; ColorCodes["gray36"] = "#5C5C5C"; ColorCodes["gray37"] = "#5E5E5E"; ColorCodes["gray38"] = "#616161"; ColorCodes["gray39"] = "#636363"; ColorCodes["gray40"] = "#666666"; ColorCodes["gray41"] = "#696969"; ColorCodes["gray42"] = "#6B6B6B"; ColorCodes["gray43"] = "#6E6E6E"; ColorCodes["gray44"] = "#707070"; ColorCodes["gray45"] = "#737373"; ColorCodes["gray46"] = "#757575"; ColorCodes["gray47"] = "#787878"; ColorCodes["gray48"] = "#7A7A7A"; ColorCodes["gray49"] = "#7D7D7D"; ColorCodes["gray50"] = "#7F7F7F"; ColorCodes["gray51"] = "#828282"; ColorCodes["gray52"] = "#858585"; ColorCodes["gray53"] = "#878787"; ColorCodes["gray54"] = "#8A8A8A"; ColorCodes["gray55"] = "#8C8C8C"; ColorCodes["gray56"] = "#8F8F8F"; ColorCodes["gray57"] = "#919191"; ColorCodes["gray58"] = "#949494"; ColorCodes["gray59"] = "#969696"; ColorCodes["gray60"] = "#999999"; ColorCodes["gray61"] = "#9C9C9C"; ColorCodes["gray62"] = "#9E9E9E"; ColorCodes["gray63"] = "#A1A1A1"; ColorCodes["gray64"] = "#A3A3A3"; ColorCodes["gray65"] = "#A6A6A6"; ColorCodes["gray66"] = "#A8A8A8"; ColorCodes["gray67"] = "#ABABAB"; ColorCodes["gray68"] = "#ADADAD"; ColorCodes["gray69"] = "#B0B0B0"; ColorCodes["gray70"] = "#B3B3B3"; ColorCodes["gray71"] = "#B5B5B5"; ColorCodes["gray72"] = "#B8B8B8"; ColorCodes["gray73"] = "#BABABA"; ColorCodes["gray74"] = "#BDBDBD"; ColorCodes["gray75"] = "#BFBFBF"; ColorCodes["gray76"] = "#C2C2C2"; ColorCodes["gray77"] = "#C4C4C4"; ColorCodes["gray78"] = "#C7C7C7"; ColorCodes["gray79"] = "#C9C9C9"; ColorCodes["gray80"] = "#CCCCCC"; ColorCodes["gray81"] = "#CFCFCF"; ColorCodes["gray82"] = "#D1D1D1"; ColorCodes["gray83"] = "#D4D4D4"; ColorCodes["gray84"] = "#D6D6D6"; ColorCodes["gray85"] = "#D9D9D9"; ColorCodes["gray86"] = "#DBDBDB"; ColorCodes["gray87"] = "#DEDEDE"; ColorCodes["gray88"] = "#E0E0E0"; ColorCodes["gray89"] = "#E3E3E3"; ColorCodes["gray90"] = "#E5E5E5"; ColorCodes["gray91"] = "#E8E8E8"; ColorCodes["gray92"] = "#EBEBEB"; ColorCodes["gray93"] = "#EDEDED"; ColorCodes["gray94"] = "#F0F0F0"; ColorCodes["gray95"] = "#F2F2F2"; ColorCodes["gray96"] = "#F5F5F5"; ColorCodes["gray97"] = "#F7F7F7"; ColorCodes["gray98"] = "#FAFAFA"; ColorCodes["gray99"] = "#FCFCFC"; ColorCodes["gray100"] = "#FFFFFF"; ColorCodes["green"] = "#00FF00"; ColorCodes["green1"] = "#00FF00"; ColorCodes["green2"] = "#00EE00"; ColorCodes["green3"] = "#00CD00"; ColorCodes["green4"] = "#008B00"; ColorCodes["greenyellow"] = "#ADFF2F"; ColorCodes["grey"] = "#BEBEBE"; ColorCodes["grey0"] = "#000000"; ColorCodes["grey1"] = "#030303"; ColorCodes["grey2"] = "#050505"; ColorCodes["grey3"] = "#080808"; ColorCodes["grey4"] = "#0A0A0A"; ColorCodes["grey5"] = "#0D0D0D"; ColorCodes["grey6"] = "#0F0F0F"; ColorCodes["grey7"] = "#121212"; ColorCodes["grey8"] = "#141414"; ColorCodes["grey9"] = "#171717"; ColorCodes["grey10"] = "#1A1A1A"; ColorCodes["grey11"] = "#1C1C1C"; ColorCodes["grey12"] = "#1F1F1F"; ColorCodes["grey13"] = "#212121"; ColorCodes["grey14"] = "#242424"; ColorCodes["grey15"] = "#262626"; ColorCodes["grey16"] = "#292929"; ColorCodes["grey17"] = "#2B2B2B"; ColorCodes["grey18"] = "#2E2E2E"; ColorCodes["grey19"] = "#303030"; ColorCodes["grey20"] = "#333333"; ColorCodes["grey21"] = "#363636"; ColorCodes["grey22"] = "#383838"; ColorCodes["grey23"] = "#3B3B3B"; ColorCodes["grey24"] = "#3D3D3D"; ColorCodes["grey25"] = "#404040"; ColorCodes["grey26"] = "#424242"; ColorCodes["grey27"] = "#454545"; ColorCodes["grey28"] = "#474747"; ColorCodes["grey29"] = "#4A4A4A"; ColorCodes["grey30"] = "#4D4D4D"; ColorCodes["grey31"] = "#4F4F4F"; ColorCodes["grey32"] = "#525252"; ColorCodes["grey33"] = "#545454"; ColorCodes["grey34"] = "#575757"; ColorCodes["grey35"] = "#595959"; ColorCodes["grey36"] = "#5C5C5C"; ColorCodes["grey37"] = "#5E5E5E"; ColorCodes["grey38"] = "#616161"; ColorCodes["grey39"] = "#636363"; ColorCodes["grey40"] = "#666666"; ColorCodes["grey41"] = "#696969"; ColorCodes["grey42"] = "#6B6B6B"; ColorCodes["grey43"] = "#6E6E6E"; ColorCodes["grey44"] = "#707070"; ColorCodes["grey45"] = "#737373"; ColorCodes["grey46"] = "#757575"; ColorCodes["grey47"] = "#787878"; ColorCodes["grey48"] = "#7A7A7A"; ColorCodes["grey49"] = "#7D7D7D"; ColorCodes["grey50"] = "#7F7F7F"; ColorCodes["grey51"] = "#828282"; ColorCodes["grey52"] = "#858585"; ColorCodes["grey53"] = "#878787"; ColorCodes["grey54"] = "#8A8A8A"; ColorCodes["grey55"] = "#8C8C8C"; ColorCodes["grey56"] = "#8F8F8F"; ColorCodes["grey57"] = "#919191"; ColorCodes["grey58"] = "#949494"; ColorCodes["grey59"] = "#969696"; ColorCodes["grey60"] = "#999999"; ColorCodes["grey61"] = "#9C9C9C"; ColorCodes["grey62"] = "#9E9E9E"; ColorCodes["grey63"] = "#A1A1A1"; ColorCodes["grey64"] = "#A3A3A3"; ColorCodes["grey65"] = "#A6A6A6"; ColorCodes["grey66"] = "#A8A8A8"; ColorCodes["grey67"] = "#ABABAB"; ColorCodes["grey68"] = "#ADADAD"; ColorCodes["grey69"] = "#B0B0B0"; ColorCodes["grey70"] = "#B3B3B3"; ColorCodes["grey71"] = "#B5B5B5"; ColorCodes["grey72"] = "#B8B8B8"; ColorCodes["grey73"] = "#BABABA"; ColorCodes["grey74"] = "#BDBDBD"; ColorCodes["grey75"] = "#BFBFBF"; ColorCodes["grey76"] = "#C2C2C2"; ColorCodes["grey77"] = "#C4C4C4"; ColorCodes["grey78"] = "#C7C7C7"; ColorCodes["grey79"] = "#C9C9C9"; ColorCodes["grey80"] = "#CCCCCC"; ColorCodes["grey81"] = "#CFCFCF"; ColorCodes["grey82"] = "#D1D1D1"; ColorCodes["grey83"] = "#D4D4D4"; ColorCodes["grey84"] = "#D6D6D6"; ColorCodes["grey85"] = "#D9D9D9"; ColorCodes["grey86"] = "#DBDBDB"; ColorCodes["grey87"] = "#DEDEDE"; ColorCodes["grey88"] = "#E0E0E0"; ColorCodes["grey89"] = "#E3E3E3"; ColorCodes["grey90"] = "#E5E5E5"; ColorCodes["grey91"] = "#E8E8E8"; ColorCodes["grey92"] = "#EBEBEB"; ColorCodes["grey93"] = "#EDEDED"; ColorCodes["grey94"] = "#F0F0F0"; ColorCodes["grey95"] = "#F2F2F2"; ColorCodes["grey96"] = "#F5F5F5"; ColorCodes["grey97"] = "#F7F7F7"; ColorCodes["grey98"] = "#FAFAFA"; ColorCodes["grey99"] = "#FCFCFC"; ColorCodes["grey100"] = "#FFFFFF"; } ColorCodes["honeydew"] = "#F0FFF0"; ColorCodes["honeydew1"] = "#F0FFF0"; ColorCodes["honeydew2"] = "#E0EEE0"; ColorCodes["honeydew3"] = "#C1CDC1"; ColorCodes["honeydew4"] = "#838B83"; ColorCodes["hotpink"] = "#FF69B4"; ColorCodes["hotpink1"] = "#FF6EB4"; ColorCodes["hotpink2"] = "#EE6AA7"; ColorCodes["hotpink3"] = "#CD6090"; ColorCodes["hotpink4"] = "#8B3A62"; ColorCodes["indianred"] = "#CD5C5C"; ColorCodes["indianred1"] = "#FF6A6A"; ColorCodes["indianred2"] = "#EE6363"; ColorCodes["indianred3"] = "#CD5555"; ColorCodes["indianred4"] = "#8B3A3A"; ColorCodes["ivory"] = "#FFFFF0"; ColorCodes["ivory1"] = "#FFFFF0"; ColorCodes["ivory2"] = "#EEEEE0"; ColorCodes["ivory3"] = "#CDCDC1"; ColorCodes["ivory4"] = "#8B8B83"; ColorCodes["khaki"] = "#F0E68C"; ColorCodes["khaki1"] = "#FFF68F"; ColorCodes["khaki2"] = "#EEE685"; ColorCodes["khaki3"] = "#CDC673"; ColorCodes["khaki4"] = "#8B864E"; ColorCodes["lavender"] = "#E6E6FA"; ColorCodes["lavenderblush"] = "#FFF0F5"; ColorCodes["lavenderblush1"] = "#FFF0F5"; ColorCodes["lavenderblush2"] = "#EEE0E5"; ColorCodes["lavenderblush3"] = "#CDC1C5"; ColorCodes["lavenderblush4"] = "#8B8386"; ColorCodes["lawngreen"] = "#7CFC00"; ColorCodes["lemonchiffon"] = "#FFFACD"; ColorCodes["lemonchiffon1"] = "#FFFACD"; ColorCodes["lemonchiffon2"] = "#EEE9BF"; ColorCodes["lemonchiffon3"] = "#CDC9A5"; ColorCodes["lemonchiffon4"] = "#8B8970"; ColorCodes["lightblue"] = "#ADD8E6"; ColorCodes["lightblue1"] = "#BFEFFF"; ColorCodes["lightblue2"] = "#B2DFEE"; ColorCodes["lightblue3"] = "#9AC0CD"; ColorCodes["lightblue4"] = "#68838B"; ColorCodes["lightcoral"] = "#F08080"; ColorCodes["lightcyan"] = "#E0FFFF"; ColorCodes["lightcyan1"] = "#E0FFFF"; ColorCodes["lightcyan2"] = "#D1EEEE"; ColorCodes["lightcyan3"] = "#B4CDCD"; ColorCodes["lightcyan4"] = "#7A8B8B"; ColorCodes["lightgoldenrod"] = "#EEDD82"; ColorCodes["lightgoldenrod1"] = "#FFEC8B"; ColorCodes["lightgoldenrod2"] = "#EEDC82"; ColorCodes["lightgoldenrod3"] = "#CDBE70"; ColorCodes["lightgoldenrod4"] = "#8B814C"; ColorCodes["lightgoldenrodyellow"] = "#FAFAD2"; ColorCodes["lightgray"] = "#D3D3D3"; ColorCodes["lightgreen"] = "#90EE90"; ColorCodes["lightgrey"] = "#D3D3D3"; ColorCodes["lightpink"] = "#FFB6C1"; ColorCodes["lightpink1"] = "#FFAEB9"; ColorCodes["lightpink2"] = "#EEA2AD"; ColorCodes["lightpink3"] = "#CD8C95"; ColorCodes["lightpink4"] = "#8B5F65"; ColorCodes["lightsalmon"] = "#FFA07A"; ColorCodes["lightsalmon1"] = "#FFA07A"; ColorCodes["lightsalmon2"] = "#EE9572"; ColorCodes["lightsalmon3"] = "#CD8162"; ColorCodes["lightsalmon4"] = "#8B5742"; ColorCodes["lightseagreen"] = "#20B2AA"; ColorCodes["lightskyblue"] = "#87CEFA"; ColorCodes["lightskyblue1"] = "#B0E2FF"; ColorCodes["lightskyblue2"] = "#A4D3EE"; ColorCodes["lightskyblue3"] = "#8DB6CD"; ColorCodes["lightskyblue4"] = "#607B8B"; ColorCodes["lightslateblue"] = "#8470FF"; ColorCodes["lightslategray"] = "#778899"; ColorCodes["lightslategrey"] = "#778899"; ColorCodes["lightsteelblue"] = "#B0C4DE"; ColorCodes["lightsteelblue1"] = "#CAE1FF"; ColorCodes["lightsteelblue2"] = "#BCD2EE"; ColorCodes["lightsteelblue3"] = "#A2B5CD"; ColorCodes["lightsteelblue4"] = "#6E7B8B"; ColorCodes["lightyellow"] = "#FFFFE0"; ColorCodes["lightyellow1"] = "#FFFFE0"; ColorCodes["lightyellow2"] = "#EEEED1"; ColorCodes["lightyellow3"] = "#CDCDB4"; ColorCodes["lightyellow4"] = "#8B8B7A"; ColorCodes["limegreen"] = "#32CD32"; ColorCodes["linen"] = "#FAF0E6"; ColorCodes["magenta"] = "#FF00FF"; ColorCodes["magenta1"] = "#FF00FF"; ColorCodes["magenta2"] = "#EE00EE"; ColorCodes["magenta3"] = "#CD00CD"; ColorCodes["magenta4"] = "#8B008B"; ColorCodes["maroon"] = "#B03060"; ColorCodes["maroon1"] = "#FF34B3"; ColorCodes["maroon2"] = "#EE30A7"; ColorCodes["maroon3"] = "#CD2990"; ColorCodes["maroon4"] = "#8B1C62"; ColorCodes["mediumaquamarine"] = "#66CDAA"; ColorCodes["mediumblue"] = "#0000CD"; ColorCodes["mediumorchid"] = "#BA55D3"; ColorCodes["mediumorchid1"] = "#E066FF"; ColorCodes["mediumorchid2"] = "#D15FEE"; ColorCodes["mediumorchid3"] = "#B452CD"; ColorCodes["mediumorchid4"] = "#7A378B"; ColorCodes["mediumpurple"] = "#9370DB"; ColorCodes["mediumpurple1"] = "#AB82FF"; ColorCodes["mediumpurple2"] = "#9F79EE"; ColorCodes["mediumpurple3"] = "#8968CD"; ColorCodes["mediumpurple4"] = "#5D478B"; ColorCodes["mediumseagreen"] = "#3CB371"; ColorCodes["mediumslateblue"] = "#7B68EE"; ColorCodes["mediumspringgreen"] = "#00FA9A"; ColorCodes["mediumturquoise"] = "#48D1CC"; ColorCodes["mediumvioletred"] = "#C71585"; ColorCodes["midnightblue"] = "#191970"; ColorCodes["mintcream"] = "#F5FFFA"; ColorCodes["mistyrose"] = "#FFE4E1"; ColorCodes["mistyrose1"] = "#FFE4E1"; ColorCodes["mistyrose2"] = "#EED5D2"; ColorCodes["mistyrose3"] = "#CDB7B5"; ColorCodes["mistyrose4"] = "#8B7D7B"; ColorCodes["moccasin"] = "#FFE4B5"; ColorCodes["navajowhite"] = "#FFDEAD"; ColorCodes["navajowhite1"] = "#FFDEAD"; ColorCodes["navajowhite2"] = "#EECFA1"; ColorCodes["navajowhite3"] = "#CDB38B"; ColorCodes["navajowhite4"] = "#8B795E"; ColorCodes["navy"] = "#000080"; ColorCodes["navyblue"] = "#000080"; ColorCodes["oldlace"] = "#FDF5E6"; ColorCodes["olivedrab"] = "#6B8E23"; ColorCodes["olivedrab1"] = "#C0FF3E"; ColorCodes["olivedrab2"] = "#B3EE3A"; ColorCodes["olivedrab3"] = "#9ACD32"; ColorCodes["olivedrab4"] = "#698B22"; ColorCodes["orange"] = "#FFA500"; ColorCodes["orange1"] = "#FFA500"; ColorCodes["orange2"] = "#EE9A00"; ColorCodes["orange3"] = "#CD8500"; ColorCodes["orange4"] = "#8B5A00"; ColorCodes["orangered"] = "#FF4500"; ColorCodes["orangered1"] = "#FF4500"; ColorCodes["orangered2"] = "#EE4000"; ColorCodes["orangered3"] = "#CD3700"; ColorCodes["orangered4"] = "#8B2500"; ColorCodes["orchid"] = "#DA70D6"; ColorCodes["orchid1"] = "#FF83FA"; ColorCodes["orchid2"] = "#EE7AE9"; ColorCodes["orchid3"] = "#CD69C9"; ColorCodes["orchid4"] = "#8B4789"; ColorCodes["palegoldenrod"] = "#EEE8AA"; ColorCodes["palegreen"] = "#98FB98"; ColorCodes["palegreen1"] = "#9AFF9A"; ColorCodes["palegreen2"] = "#90EE90"; ColorCodes["palegreen3"] = "#7CCD7C"; ColorCodes["palegreen4"] = "#548B54"; ColorCodes["paleturquoise"] = "#AFEEEE"; ColorCodes["paleturquoise1"] = "#BBFFFF"; ColorCodes["paleturquoise2"] = "#AEEEEE"; ColorCodes["paleturquoise3"] = "#96CDCD"; ColorCodes["paleturquoise4"] = "#668B8B"; ColorCodes["palevioletred"] = "#DB7093"; ColorCodes["palevioletred1"] = "#FF82AB"; ColorCodes["palevioletred2"] = "#EE799F"; ColorCodes["palevioletred3"] = "#CD6889"; ColorCodes["palevioletred4"] = "#8B475D"; ColorCodes["papayawhip"] = "#FFEFD5"; ColorCodes["peachpuff"] = "#FFDAB9"; ColorCodes["peachpuff1"] = "#FFDAB9"; ColorCodes["peachpuff2"] = "#EECBAD"; ColorCodes["peachpuff3"] = "#CDAF95"; ColorCodes["peachpuff4"] = "#8B7765"; ColorCodes["peru"] = "#CD853F"; ColorCodes["pink"] = "#FFC0CB"; ColorCodes["pink1"] = "#FFB5C5"; ColorCodes["pink2"] = "#EEA9B8"; ColorCodes["pink3"] = "#CD919E"; ColorCodes["pink4"] = "#8B636C"; ColorCodes["plum"] = "#DDA0DD"; ColorCodes["plum1"] = "#FFBBFF"; ColorCodes["plum2"] = "#EEAEEE"; ColorCodes["plum3"] = "#CD96CD"; ColorCodes["plum4"] = "#8B668B"; ColorCodes["powderblue"] = "#B0E0E6"; ColorCodes["purple"] = "#A020F0"; ColorCodes["purple1"] = "#9B30FF"; ColorCodes["purple2"] = "#912CEE"; ColorCodes["purple3"] = "#7D26CD"; ColorCodes["purple4"] = "#551A8B"; ColorCodes["red"] = "#FF0000"; ColorCodes["red1"] = "#FF0000"; ColorCodes["red2"] = "#EE0000"; ColorCodes["red3"] = "#CD0000"; ColorCodes["red4"] = "#8B0000"; ColorCodes["rosybrown"] = "#BC8F8F"; ColorCodes["rosybrown1"] = "#FFC1C1"; ColorCodes["rosybrown2"] = "#EEB4B4"; ColorCodes["rosybrown3"] = "#CD9B9B"; ColorCodes["rosybrown4"] = "#8B6969"; ColorCodes["royalblue"] = "#4169E1"; ColorCodes["royalblue1"] = "#4876FF"; ColorCodes["royalblue2"] = "#436EEE"; ColorCodes["royalblue3"] = "#3A5FCD"; ColorCodes["royalblue4"] = "#27408B"; ColorCodes["saddlebrown"] = "#8B4513"; ColorCodes["salmon"] = "#FA8072"; ColorCodes["salmon1"] = "#FF8C69"; ColorCodes["salmon2"] = "#EE8262"; ColorCodes["salmon3"] = "#CD7054"; ColorCodes["salmon4"] = "#8B4C39"; ColorCodes["sandybrown"] = "#F4A460"; ColorCodes["seagreen"] = "#2E8B57"; ColorCodes["seagreen1"] = "#54FF9F"; ColorCodes["seagreen2"] = "#4EEE94"; ColorCodes["seagreen3"] = "#43CD80"; ColorCodes["seagreen4"] = "#2E8B57"; ColorCodes["seashell"] = "#FFF5EE"; ColorCodes["seashell1"] = "#FFF5EE"; ColorCodes["seashell2"] = "#EEE5DE"; ColorCodes["seashell3"] = "#CDC5BF"; ColorCodes["seashell4"] = "#8B8682"; ColorCodes["sienna"] = "#A0522D"; ColorCodes["sienna1"] = "#FF8247"; ColorCodes["sienna2"] = "#EE7942"; ColorCodes["sienna3"] = "#CD6839"; ColorCodes["sienna4"] = "#8B4726"; ColorCodes["skyblue"] = "#87CEEB"; ColorCodes["skyblue1"] = "#87CEFF"; ColorCodes["skyblue2"] = "#7EC0EE"; ColorCodes["skyblue3"] = "#6CA6CD"; ColorCodes["skyblue4"] = "#4A708B"; ColorCodes["slateblue"] = "#6A5ACD"; ColorCodes["slateblue1"] = "#836FFF"; ColorCodes["slateblue2"] = "#7A67EE"; ColorCodes["slateblue3"] = "#6959CD"; ColorCodes["slateblue4"] = "#473C8B"; ColorCodes["slategray"] = "#708090"; ColorCodes["slategray1"] = "#C6E2FF"; ColorCodes["slategray2"] = "#B9D3EE"; ColorCodes["slategray3"] = "#9FB6CD"; ColorCodes["slategray4"] = "#6C7B8B"; ColorCodes["slategrey"] = "#708090"; ColorCodes["snow"] = "#FFFAFA"; ColorCodes["snow1"] = "#FFFAFA"; ColorCodes["snow2"] = "#EEE9E9"; ColorCodes["snow3"] = "#CDC9C9"; ColorCodes["snow4"] = "#8B8989"; ColorCodes["springgreen"] = "#00FF7F"; ColorCodes["springgreen1"] = "#00FF7F"; ColorCodes["springgreen2"] = "#00EE76"; ColorCodes["springgreen3"] = "#00CD66"; ColorCodes["springgreen4"] = "#008B45"; ColorCodes["steelblue"] = "#4682B4"; ColorCodes["steelblue1"] = "#63B8FF"; ColorCodes["steelblue2"] = "#5CACEE"; ColorCodes["steelblue3"] = "#4F94CD"; ColorCodes["steelblue4"] = "#36648B"; ColorCodes["tan"] = "#D2B48C"; ColorCodes["tan1"] = "#FFA54F"; ColorCodes["tan2"] = "#EE9A49"; ColorCodes["tan3"] = "#CD853F"; ColorCodes["tan4"] = "#8B5A2B"; ColorCodes["thistle"] = "#D8BFD8"; ColorCodes["thistle1"] = "#FFE1FF"; ColorCodes["thistle2"] = "#EED2EE"; ColorCodes["thistle3"] = "#CDB5CD"; ColorCodes["thistle4"] = "#8B7B8B"; ColorCodes["tomato"] = "#FF6347"; ColorCodes["tomato1"] = "#FF6347"; ColorCodes["tomato2"] = "#EE5C42"; ColorCodes["tomato3"] = "#CD4F39"; ColorCodes["tomato4"] = "#8B3626"; ColorCodes["turquoise"] = "#40E0D0"; ColorCodes["turquoise1"] = "#00F5FF"; ColorCodes["turquoise2"] = "#00E5EE"; ColorCodes["turquoise3"] = "#00C5CD"; ColorCodes["turquoise4"] = "#00868B"; ColorCodes["violet"] = "#EE82EE"; ColorCodes["violetred"] = "#D02090"; ColorCodes["violetred1"] = "#FF3E96"; ColorCodes["violetred2"] = "#EE3A8C"; ColorCodes["violetred3"] = "#CD3278"; ColorCodes["violetred4"] = "#8B2252"; ColorCodes["wheat"] = "#F5DEB3"; ColorCodes["wheat1"] = "#FFE7BA"; ColorCodes["wheat2"] = "#EED8AE"; ColorCodes["wheat3"] = "#CDBA96"; ColorCodes["wheat4"] = "#8B7E66"; ColorCodes["whitesmoke"] = "#F5F5F5"; ColorCodes["yellow"] = "#FFFF00"; ColorCodes["yellow1"] = "#FFFF00"; ColorCodes["yellow2"] = "#EEEE00"; ColorCodes["yellow3"] = "#CDCD00"; ColorCodes["yellow4"] = "#8B8B00"; ColorCodes["yellowgreen"] = "#9ACD32"; /* Accepted line styles */ ValidLineStyles.setName("ValidLineStyles"); ValidLineStyles.add("blank"); ValidLineStyles.add("solid"); ValidLineStyles.add("dashed"); ValidLineStyles.add("dotted"); ValidLineStyles.add("dotdash"); ValidLineStyles.add("longdash"); ValidLineStyles.add("twodash"); /* Accepted fill styles */ ValidFillStyles.setName("ValidFillStyles"); ValidFillStyles.add(ResourceMap::Get("Drawable-DefaultFillStyle")); ValidFillStyles.add("shaded"); } /* Give the colors name */ Description DrawableImplementation::GetValidColors() { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } Description validColors; std::map::const_iterator it(ColorCodes.begin()); for (it = ColorCodes.begin(); it != ColorCodes.end(); ++it) { validColors.add(it->first); } return validColors; } /* Give the line style names */ Description DrawableImplementation::GetValidLineStyles() { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } return ValidLineStyles; } /* Give the fill style names */ Description DrawableImplementation::GetValidFillStyles() { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } return ValidFillStyles; } /* Give the point style names */ Description DrawableImplementation::GetValidPointStyles() { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } Description validPointStyle; std::map::const_iterator it(SymbolCodes.begin()); for (it = SymbolCodes.begin(); it != SymbolCodes.end(); ++it) validPointStyle.add(it->first); return validPointStyle; } /* Convert a color name to a valid hexadecimal code */ String DrawableImplementation::ConvertFromName(const String & name) { if (IsValidColorCode(name)) return name; if (IsValidColorName(name)) return ColorCodes[name]; LOGWARN(OSS() << "The given name=" << name << " is not a valid color name. Default to black."); return "#000000"; } /* Convert an hexadecimal code into an RGB triplet */ Indices DrawableImplementation::ConvertToRGB(const String & key) { Indices rgb(3, 0); UnsignedInteger code = 0; if (ScanColorCode(key, code)) { code = code >> 8; rgb[2] = code % 256; code = code >> 8; rgb[1] = code % 256; code = code >> 8; rgb[0] = code; } else LOGWARN(OSS() << "Code " << key << " is an invalid color code. Default to black."); return rgb; } /* Convert an hexadecimal code into an RGBA quadruplet */ Indices DrawableImplementation::ConvertToRGBA(const String & key) { Indices rgba(4, 0); UnsignedInteger code = 0; if (ScanColorCode(key, code)) { rgba[3] = code % 256; code = code >> 8; rgba[2] = code % 256; code = code >> 8; rgba[1] = code % 256; code = code >> 8; rgba[0] = code; } else LOGWARN(OSS() << "Code " << key << " is an invalid color code. Default to black."); return rgba; } /* Convert an RGB triplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromRGB(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue) { return OSS() << "#" << std::hex << std::setw(2) << std::setfill('0') << std::right << std::min(red, 255UL) << std::hex << std::setw(2) << std::setfill('0') << std::right << std::min(green, 255UL) << std::hex << std::setw(2) << std::setfill('0') << std::right << std::min(blue, 255UL); } /* Convert an RGBA quadruplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromRGBA(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue, const UnsignedInteger alpha) { return OSS() << ConvertFromRGB(red, green, blue) << std::hex << std::setw(2) << std::setfill('0') << std::right << std::min(alpha, 255UL); } /* Convert an RGB triplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromRGB(const Scalar red, const Scalar green, const Scalar blue) { return ConvertFromRGB(static_cast(round(255 * red)), static_cast(round(255 * green)), static_cast(round(255 * blue))); } /* Convert an RGBA quadruplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromRGBA(const Scalar red, const Scalar green, const Scalar blue, const Scalar alpha) { return ConvertFromRGBA(static_cast(round(255 * red)), static_cast(round(255 * green)), static_cast(round(255 * blue)), static_cast(round(255 * alpha))); } /* Convert an HSV triplet to a valid hexadecimal code */ Point DrawableImplementation::ConvertFromHSVIntoRGB(const Scalar hue, const Scalar saturation, const Scalar value) { const UnsignedInteger i = static_cast(hue / 60.0) % 6; const Scalar f = hue / 60.0 - i; const Scalar l = value * (1.0 - saturation); const Scalar m = value * (1.0 - f * saturation); const Scalar n = value * (1.0 - (1.0 - f) * saturation); Point redGreenBlue(3); switch (i) { case 0: redGreenBlue[0] = value; redGreenBlue[1] = n; redGreenBlue[2] = l; break; case 1: redGreenBlue[0] = m; redGreenBlue[1] = value; redGreenBlue[2] = l; break; case 2: redGreenBlue[0] = l; redGreenBlue[1] = value; redGreenBlue[2] = n; break; case 3: redGreenBlue[0] = l; redGreenBlue[1] = m; redGreenBlue[2] = value; break; case 4: redGreenBlue[0] = n; redGreenBlue[1] = l; redGreenBlue[2] = value; break; case 5: redGreenBlue[0] = value; redGreenBlue[1] = l; redGreenBlue[2] = m; break; default: throw InternalException(HERE) << "Error: bad Hue index=" << i << ", should be in {0,...,5}"; } return redGreenBlue; } /* Convert an HSV triplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromHSV(const Scalar hue, const Scalar saturation, const Scalar value) { const Point redGreenBlue(ConvertFromHSVIntoRGB(hue, saturation, value)); return ConvertFromRGB(redGreenBlue[0], redGreenBlue[1], redGreenBlue[2]); } /* Convert an HSVA quadruplet to a valid hexadecimal code */ String DrawableImplementation::ConvertFromHSVA(const Scalar hue, const Scalar saturation, const Scalar value, const Scalar alpha) { const Point redGreenBlue(ConvertFromHSVIntoRGB(hue, saturation, value)); return ConvertFromRGBA(redGreenBlue[0], redGreenBlue[1], redGreenBlue[2], alpha); } /* Default constructor */ DrawableImplementation::DrawableImplementation(const Sample & data, const String & legend) : PersistentObject(), legend_(legend), data_(data), color_(ResourceMap::Get("Drawable-DefaultColor")), fillStyle_(ResourceMap::Get("Drawable-DefaultFillStyle")), lineStyle_(ResourceMap::Get("Drawable-DefaultLineStyle")), pointStyle_(ResourceMap::Get("Drawable-DefaultPointStyle")), lineWidth_(ResourceMap::GetAsUnsignedInteger("Drawable-DefaultLineWidth")), dataFileName_("") { setName(legend); if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } } /* Clone method */ DrawableImplementation * DrawableImplementation::clone() const { return new DrawableImplementation(*this); } /* String converter */ String DrawableImplementation::__repr__() const { OSS oss(true); oss << "class=" << DrawableImplementation::GetClassName() << " name=" << getName() << " legend=" << legend_ << " data=" << data_ << " color=" << color_ << " fillStyle=" << fillStyle_ << " lineStyle=" << lineStyle_ << " pointStyle=" << pointStyle_ << " lineWidth=" << lineWidth_; return oss; } String DrawableImplementation::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << offset << "(name=" << getName() << offset << ", color=" << color_ << offset << ", fill=" << fillStyle_ << offset << ", line=" << lineStyle_ << offset << ", point=" << pointStyle_ << offset << ", width=" << lineWidth_ << offset << ", data=\n" << data_.__str__(offset); return oss; } /* Comparison operator */ Bool DrawableImplementation::operator == (const DrawableImplementation & other) const { return false; } /* Legend name accessor */ String DrawableImplementation::getLegend() const { return legend_; } void DrawableImplementation::setLegend(const String & legend) { legend_ = legend; } /* Point code accessor */ UnsignedInteger DrawableImplementation::getPointCode(const String & key) const { const std::map::const_iterator it(SymbolCodes.find(key)); UnsignedInteger pointCode = 0; if(it != SymbolCodes.end()) pointCode = it->second; return pointCode; } /* Check validity of color */ Bool DrawableImplementation::IsValidColorName(const String & key) { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } const std::map::iterator it(ColorCodes.find(key)); return (it != ColorCodes.end()); } Bool DrawableImplementation::ScanColorCode(const String & key, UnsignedInteger & code) { code = 255; // First, check if the color is given in RGB format const UnsignedInteger keySize = key.size(); if (keySize == 0) return false; // Check if it is a #RRGGBB[AA] code if (key[0] != '#') return false; // First, check the key length: // 7 for #RRGGBB // 9 for #RRGGBBAA if ((keySize != 7) && (keySize != 9)) return false; // Second, check that the values are ok UnsignedInteger shift = 1 << 28; for (UnsignedInteger i = 1; i < keySize; ++i) { const char c(key[i]); // If the current character is not a valid hexadecimal figure const Bool isNum = (c >= '0') && (c <= '9'); const Bool isValidLower = (c >= 'a') && (c <= 'f'); const Bool isValidUpper = (c >= 'A') && (c <= 'F'); if ((!isNum) && !(isValidLower) && !(isValidUpper)) return false; if (isNum) code += (c - '0') * shift; if (isValidLower) code += (c - 'a' + 10) * shift; if (isValidUpper) code += (c - 'A' + 10) * shift; shift = shift >> 4; } return true; } Bool DrawableImplementation::IsValidColorCode(const String & key) { UnsignedInteger code = 0; return ScanColorCode(key, code); } Bool DrawableImplementation::IsValidColor(const String & key) { if (IsValidColorCode(key)) return true; return IsValidColorName(key); } /* Check validity of line style */ Bool DrawableImplementation::IsValidLineStyle(const String & key) { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } const Description::const_iterator it = std::find(ValidLineStyles.begin(), ValidLineStyles.end(), key); return (it != ValidLineStyles.end()); } /* Check validity of point style */ Bool DrawableImplementation::IsValidPointStyle(const String & key) { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } const std::map::iterator it(SymbolCodes.find(key)); return (it != SymbolCodes.end()); } /* Check validity of fill style */ Bool DrawableImplementation::IsValidFillStyle(const String & key) { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } const Description::const_iterator it = std::find(ValidFillStyles.begin(), ValidFillStyles.end(), key); return (it != ValidFillStyles.end()); } /* Check validity of pattern parameter */ Bool DrawableImplementation::IsValidPattern(const String & pattern) { if(IsFirstInitialization) { InitializeValidParameterList(); IsFirstInitialization = false; } return (pattern == ResourceMap::Get("Drawable-DefaultPattern") || pattern == ResourceMap::Get("Drawable-AlternativePattern")); } /* Check validity of the data */ void DrawableImplementation::checkData(const Sample & data) const { throw NotYetImplementedException(HERE) << "DrawableImplementation::checkData(const Sample & data) const"; } void DrawableImplementation::checkData(const Point & data) const { throw NotYetImplementedException(HERE) << "In DrawableImplementation::checkData(const Point & data) const"; } /* Data Accessor */ Sample DrawableImplementation::getData() const { return data_; } /* Data accessor */ void DrawableImplementation::setData(const Sample & data) { checkData(data); data_ = data; } void DrawableImplementation::setData(const Point & data) { checkData(data); const UnsignedInteger size = data.getDimension(); data_ = Sample(size, 1); data_.getImplementation()->setData(data); } /* Bounding box accessor */ DrawableImplementation::BoundingBox DrawableImplementation::getBoundingBox() const { BoundingBox boundingBox(BoundingBoxSize); const Point min(data_.getMin()); const Point max(data_.getMax()); boundingBox[0] = min[0]; boundingBox[1] = max[0]; boundingBox[2] = min[1]; boundingBox[3] = max[1]; return boundingBox; } /* Accessor for color */ String DrawableImplementation::getColor() const { return color_; } String DrawableImplementation::getColorCode() const { return ConvertFromName(color_); } /* Accessor for color */ void DrawableImplementation::setColor(const String & color) { if(!IsValidColor(color)) throw InvalidArgumentException(HERE) << "Given color = " << color << " is incorrect"; color_ = color; } /* Accessor for edge color */ String DrawableImplementation::getEdgeColor() const { throw NotDefinedException(HERE) << "Error: no edge color in " << getClassName(); } /* Accessor for line style */ String DrawableImplementation::getLineStyle() const { return lineStyle_; } /* Accesor for line style */ void DrawableImplementation::setLineStyle(const String & lineStyle) { if(!IsValidLineStyle(lineStyle)) throw InvalidArgumentException(HERE) << "Given line style=" << lineStyle << " is incorrect"; lineStyle_ = lineStyle; } /* Accessor for fill style */ String DrawableImplementation::getFillStyle() const { return fillStyle_; } /* Accessor for fill style */ void DrawableImplementation::setFillStyle(const String & fillStyle) { if(!IsValidFillStyle(fillStyle)) throw InvalidArgumentException(HERE) << "Given fill style=" << fillStyle << " is incorrect"; fillStyle_ = fillStyle; } /* Accessor for point style */ String DrawableImplementation::getPointStyle() const { return pointStyle_; } /* Accessor for point style */ void DrawableImplementation::setPointStyle(const String & pointStyle) { if(!IsValidPointStyle(pointStyle)) throw InvalidArgumentException(HERE) << "Given point symbol=" << pointStyle << " is incorrect"; pointStyle_ = pointStyle; } /* Accessor for line width */ UnsignedInteger DrawableImplementation::getLineWidth() const { return lineWidth_; } /* Accessor for line width */ void DrawableImplementation::setLineWidth(const UnsignedInteger lineWidth) { if(lineWidth == 0) throw InvalidArgumentException(HERE) << "Given line width=" << lineWidth << " is incorrect"; lineWidth_ = lineWidth; } /* Accessor for pattern */ String DrawableImplementation::getPattern() const { throw NotDefinedException(HERE) << "Error: no pattern in " << getClassName(); } void DrawableImplementation::setPattern(const String style) { throw NotDefinedException(HERE) << "Error: no pattern in " << getClassName(); } /* Accessor for center */ Point DrawableImplementation::getCenter() const { throw NotDefinedException(HERE) << "Error: no center in " << getClassName(); } void DrawableImplementation::setCenter(const Point & center) { throw NotDefinedException(HERE) << "Error: no center in " << getClassName(); } /* Accessor for radius */ Scalar DrawableImplementation::getRadius() const { throw NotDefinedException(HERE) << "Error: no radius in " << getClassName(); } void DrawableImplementation::setRadius(const Scalar radius) { throw NotDefinedException(HERE) << "Error: no radius in " << getClassName(); } /* Accessor for labels */ Description DrawableImplementation::getLabels() const { throw NotDefinedException(HERE) << "Error: no labels in " << getClassName(); } void DrawableImplementation::setLabels(const Description & labels) { throw NotDefinedException(HERE) << "Error: no labels in " << getClassName(); } /* Accessor for color palette */ Description DrawableImplementation::getPalette() const { throw NotDefinedException(HERE) << "Error: no palette in " << getClassName(); } void DrawableImplementation::setPalette(const Description & palette) { throw NotDefinedException(HERE) << "Error: no palette in " << getClassName(); } /* Accessor for origin */ Scalar DrawableImplementation::getOrigin() const { throw NotDefinedException(HERE) << "Error: no origin in " << getClassName(); } void DrawableImplementation::setOrigin(const Scalar origin) { throw NotDefinedException(HERE) << "Error: no origin in " << getClassName(); } /* Accessor for first coordinate */ Sample DrawableImplementation::getX() const { throw NotDefinedException(HERE) << "Error: no sample X in " << getClassName(); } void DrawableImplementation::setX(const Sample & x) { throw NotDefinedException(HERE) << "Error: no sample X in " << getClassName(); } /* Accessor for second coordinate */ Sample DrawableImplementation::getY() const { throw NotDefinedException(HERE) << "Error: no sample Y in " << getClassName(); } void DrawableImplementation::setY(const Sample & y) { throw NotDefinedException(HERE) << "Error: no sample Y in " << getClassName(); } /* Accessor for levels */ Point DrawableImplementation::getLevels() const { throw NotDefinedException(HERE) << "Error: no levels in " << getClassName(); } void DrawableImplementation::setLevels(const Point & levels) { throw NotDefinedException(HERE) << "Error: no levels in " << getClassName(); } /* Accessor for drawLabels */ Bool DrawableImplementation::getDrawLabels() const { throw NotDefinedException(HERE) << "Error: no flag drawLabels in " << getClassName(); } void DrawableImplementation::setDrawLabels(const Bool & drawLabels) { throw NotDefinedException(HERE) << "Error: no flag drawLabels in " << getClassName(); } /* Accessor for textAnnotations */ Description DrawableImplementation::getTextAnnotations() const { throw NotDefinedException(HERE) << "Error: no flag textAnnotations in " << getClassName(); } void DrawableImplementation::setTextAnnotations(const Description & textAnnotations) { throw NotDefinedException(HERE) << "Error: no flag textAnnotations in " << getClassName(); } /* Accessor for textPositions */ Description DrawableImplementation::getTextPositions() const { throw NotDefinedException(HERE) << "Error: no flag textPositions in " << getClassName(); } void DrawableImplementation::setTextPositions(const Description & textPositions) { throw NotDefinedException(HERE) << "Error: no flag textPositions in " << getClassName(); } /* R command generating method, for plotting through R */ String DrawableImplementation::draw() const { const UnsignedInteger size = data_.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: trying to build a Drawable with empty data"; // Two strategies: if data is small, it is inlined, else it is passed through a file const UnsignedInteger dimension = data_.getDimension(); dataFileName_ = ""; if (size * dimension > ResourceMap::GetAsUnsignedInteger("Drawable-DataThreshold")) { dataFileName_ = data_.storeToTemporaryFile(); return OSS() << "dataOT <- data.matrix(read.table(\"" << dataFileName_ << "\", stringsAsFactors = F))" << "\n"; } return OSS().setPrecision(20) << "dataOT <- " << data_.streamToRFormat() << "\n"; } /* Clean all the temporary data created by draw() method */ void DrawableImplementation::clean() const { if (dataFileName_ != "") Os::Remove(dataFileName_); } /* Build default palette Cycle through the hue wheel with 10 nuances and increasing darkness */ Description DrawableImplementation::BuildDefaultPalette(const UnsignedInteger size) { if (size == 0) throw InvalidArgumentException(HERE) << "Error: the size must be > 0"; Description palette(size); const UnsignedInteger divider = std::min(size + 1, static_cast< UnsignedInteger >(12)); const Scalar multiplier = 360.0 / divider; const UnsignedInteger cycles = size / divider + 1; UnsignedInteger paletteIndex = 0; for (UnsignedInteger iCycle = 0; iCycle < cycles; ++iCycle) { const Scalar value = 1.0 - iCycle / static_cast< Scalar >(cycles); const UnsignedInteger iHueMax = std::min(size - paletteIndex, static_cast< UnsignedInteger >(12)); for (UnsignedInteger iHue = 0; iHue < iHueMax; ++iHue) { const Scalar hue = multiplier * iHue; palette[paletteIndex] = ConvertFromHSV(hue, 1.0, value); ++paletteIndex; } } return palette; } /* Method save() stores the object through the StorageManager */ void DrawableImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "legend_", legend_ ); adv.saveAttribute( "data_", data_ ); adv.saveAttribute( "color_", color_ ); adv.saveAttribute( "fillStyle_", fillStyle_ ); adv.saveAttribute( "lineStyle_", lineStyle_ ); adv.saveAttribute( "pointStyle_", pointStyle_ ); adv.saveAttribute( "lineWidth_", lineWidth_ ); } /* Method load() reloads the object from the StorageManager */ void DrawableImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "legend_", legend_ ); adv.loadAttribute( "data_", data_ ); adv.loadAttribute( "color_", color_ ); adv.loadAttribute( "fillStyle_", fillStyle_ ); adv.loadAttribute( "lineStyle_", lineStyle_ ); adv.loadAttribute( "pointStyle_", pointStyle_ ); adv.loadAttribute( "lineWidth_", lineWidth_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Graph.cxx000066400000000000000000000175351307543307100204730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Graph implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Graph.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Graph); /* Default constructor */ Graph::Graph(const String & title): TypedInterfaceObject(new GraphImplementation(title)) { // Nothing to do } /* Constructor from implementation */ Graph::Graph(const GraphImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor with parameters */ Graph::Graph(const String & title, const String & xTitle, const String & yTitle, const Bool showAxes, const String & legendPosition, const Scalar legendFontSize, const LogScale logScale) : TypedInterfaceObject(new GraphImplementation(title, xTitle, yTitle, showAxes, legendPosition, legendFontSize, logScale)) { // Nothing to do } /* String converter */ String Graph::__repr__() const { return OSS(true) << "class=" << GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String Graph::__str__(const String & offset) const { return __repr__(); } /* Adds a drawable instance to the collection of drawables contained in Graph */ void Graph::add(const Drawable & aDrawable) { copyOnWrite(); getImplementation()->add(aDrawable); } /* Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void Graph::add(const Graph & graph) { copyOnWrite(); getImplementation()->add(*graph.getImplementation()); } /* Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void Graph::add(const DrawableCollection & drawableCollection) { copyOnWrite(); getImplementation()->add(drawableCollection); } /* Erase a drawable instance from the collection of drawables contained in GraphImplementation */ void Graph::erase(const UnsignedInteger i) { copyOnWrite(); getImplementation()->erase(i); } /* Drawables accessor */ Graph::DrawableCollection Graph::getDrawables() const { return getImplementation()->getDrawables(); } void Graph::setDrawables(const DrawableCollection & drawableCollection) { copyOnWrite(); getImplementation()->setDrawables(drawableCollection); } /* Individual drawable accessor */ Drawable Graph::getDrawable(const UnsignedInteger index) const { return getImplementation()->getDrawable(index); } void Graph::setDrawable(const Drawable & drawable, const UnsignedInteger index) { copyOnWrite(); getImplementation()->setDrawable(drawable, index); } /* Global color accessor */ Description Graph::getColors() const { return getImplementation()->getColors(); } void Graph::setColors(const Description & colors) { copyOnWrite(); getImplementation()->setColors(colors); } void Graph::setDefaultColors() { copyOnWrite(); getImplementation()->setDefaultColors(); } /* Global legend accessor */ void Graph::setLegends(const Description & legends) { copyOnWrite(); getImplementation()->setLegends(legends); } Description Graph::getLegends() const { return getImplementation()->getLegends(); } /* Hide or show x and y axes */ void Graph::setAxes(const Bool showAxes) { copyOnWrite(); getImplementation()->setAxes(showAxes); } /* Accessor for showAxes_ */ Bool Graph::getAxes() const { return getImplementation()->getAxes(); } /* Set log scale for x, y both or none axes */ void Graph::setLogScale(const LogScale logScale) { copyOnWrite(); getImplementation()->setLogScale(logScale); } /* Accessor for showAxes_ */ Graph::LogScale Graph::getLogScale() const { return getImplementation()->getLogScale(); } /* Hide or show grid */ void Graph::setGrid(const Bool showGrid) { copyOnWrite(); getImplementation()->setGrid(showGrid); } /* Accessor for showAxes_ */ Bool Graph::getGrid() const { return getImplementation()->getGrid(); } /* Grid color accessors */ void Graph::setGridColor(const String & color) { copyOnWrite(); getImplementation()->setGridColor(color); } /* Accessor for showGrid_ */ String Graph::getGridColor() const { return getImplementation()->getGridColor(); } /* Accesor for xTitle */ String Graph::getXTitle() const { return getImplementation()->getXTitle(); } /* Accessor for xTitle */ void Graph::setXTitle(const String & title) { copyOnWrite(); getImplementation()->setXTitle(title); } /* Accessor for yTitle */ String Graph::getYTitle() const { return getImplementation()->getYTitle(); } /* Accessor for yTitle */ void Graph::setYTitle(const String & title) { copyOnWrite(); getImplementation()->setYTitle(title); } /* Accesor for title */ String Graph::getTitle() const { return getImplementation()->getTitle(); } /* Accesor for title */ void Graph::setTitle(const String & title) { copyOnWrite(); getImplementation()->setTitle(title); } /* The method that generates the graphic files */ void Graph::draw(const String & file, const Scalar width, const Scalar height, SignedInteger format) { getImplementation()->draw(file, width, height, format); } /* Get the R command corresponding to the graph */ String Graph::getRCommand() const { return getImplementation()->getRCommand(); } /* Clean temporary files */ void Graph::clean() { getImplementation()->clean(); } /* Get the bounding box of the whole plot */ Graph::BoundingBox Graph::getBoundingBox() const { return getImplementation()->getBoundingBox(); } /* Set the bounding box of the whole plot */ void Graph::setBoundingBox(const BoundingBox & boundingBox) { copyOnWrite(); getImplementation()->setBoundingBox(boundingBox); } void Graph::setBoundingBox(const Interval & boundingBox) { copyOnWrite(); getImplementation()->setBoundingBox(boundingBox); } /* Automatic bounding box accessor */ Bool Graph::getAutomaticBoundingBox() const { return getImplementation()->getAutomaticBoundingBox(); } void Graph::setAutomaticBoundingBox(const Bool automaticBoundingBox) { copyOnWrite(); getImplementation()->setAutomaticBoundingBox(automaticBoundingBox); } /* Get the legend position */ String Graph::getLegendPosition() const { return getImplementation()->getLegendPosition(); } /* Set the legend position */ void Graph::setLegendPosition(const String & position) { copyOnWrite(); return getImplementation()->setLegendPosition(position); } /* Get the legend font size */ Scalar Graph::getLegendFontSize() const { return getImplementation()->getLegendFontSize(); } /* Set the legend font size */ void Graph::setLegendFontSize(const Scalar legendFontSize) { copyOnWrite(); return getImplementation()->setLegendFontSize(legendFontSize); } /* check for legend position validity */ Bool Graph::IsValidLegendPosition(const String & position) { return GraphImplementation::IsValidLegendPosition(position); } /* Gives all the valid legend positions */ Description Graph::GetValidLegendPositions() { return GraphImplementation::GetValidLegendPositions(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/GraphImplementation.cxx000066400000000000000000000572561307543307100234050ustar00rootroot00000000000000// -*- C++ -*- /* * @brief Graph implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/GraphImplementation.hxx" #include "openturns/Rfunctions.hxx" #include "openturns/Path.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/OTconfig.hxx" #include "openturns/Os.hxx" #include "openturns/Pie.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Drawable; CLASSNAMEINIT(GraphImplementation); static const Factory Factory_GraphImplementation; Bool GraphImplementation::IsFirstInitialization = true; Description GraphImplementation::ValidLegendPositions; /* Initialize valid legend positions */ void GraphImplementation::InitializeValidLegendPositions() { ValidLegendPositions.setName("ValidLegendPositions"); ValidLegendPositions.add(""); ValidLegendPositions.add("bottomright"); ValidLegendPositions.add("bottom"); ValidLegendPositions.add("bottomleft"); ValidLegendPositions.add("left"); ValidLegendPositions.add("topleft"); ValidLegendPositions.add("top"); ValidLegendPositions.add("topright"); ValidLegendPositions.add("right"); ValidLegendPositions.add("center"); } /* Default constructor */ GraphImplementation::GraphImplementation(const String & title) : PersistentObject() , title_(title) , legendPosition_() , legendFontSize_(ResourceMap::GetAsScalar("Graph-DefaultLegendFontSize")) , xTitle_() , yTitle_() , showAxes_(false) , logScale_(NONE) , showGrid_(false) , gridColor_("gray") , automaticBoundingBox_(true) , boundingBox_(4) , drawablesCollection_(0) { if(IsFirstInitialization) { InitializeValidLegendPositions(); IsFirstInitialization = false; } } /* Constructor with parameters */ GraphImplementation::GraphImplementation(const String & title, const String & xTitle, const String & yTitle, const Bool showAxes, const String & legendPosition, const Scalar legendFontSize, const LogScale logScale) : PersistentObject() , title_(title) , legendFontSize_(legendFontSize) , xTitle_(xTitle) , yTitle_(yTitle) , showAxes_(showAxes) , logScale_(logScale) , showGrid_(true) , gridColor_("gray") , automaticBoundingBox_(true) , boundingBox_(4) , drawablesCollection_(0) { setName(title); if(IsFirstInitialization) { InitializeValidLegendPositions(); IsFirstInitialization = false; } // Check if the given legend position is valid if (!IsValidLegendPosition(legendPosition)) throw InvalidArgumentException(HERE) << "The given legend position = " << legendPosition << " is invalid"; if (!(legendFontSize > 0.0)) throw InvalidArgumentException(HERE) << "The given legend font size = " << legendFontSize << " is invalid, it must be > 0"; legendPosition_ = legendPosition; } /* Virtual constructor */ GraphImplementation * GraphImplementation::clone() const { return new GraphImplementation(*this); } /* String converter */ String GraphImplementation::__repr__() const { OSS oss; oss << "class=" << GraphImplementation::GetClassName() << " name=" << getName() << " title=" << title_ << " xTitle=" << xTitle_ << " yTitle=" << yTitle_ << " axes=" << (showAxes_ ? "ON" : "OFF") << " grid=" << (showGrid_ ? "ON" : "OFF") << " legendposition=" << legendPosition_ << " legendFontSize=" << legendFontSize_ << " drawables=" << drawablesCollection_; return oss; } /* Adds a drawable instance to the collection of drawables contained in GraphImplementation */ void GraphImplementation::add(const Drawable & aDrawable) { drawablesCollection_.add(aDrawable); } /* Erase a drawable instance from the collection of drawables contained in GraphImplementation */ void GraphImplementation::erase(const UnsignedInteger i) { drawablesCollection_.erase(drawablesCollection_.begin() + i); } /* Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void GraphImplementation::add(const DrawableCollection & drawableCollection) { for (UnsignedInteger i = 0; i < drawableCollection.getSize(); ++i) drawablesCollection_.add(drawableCollection[i]); } /* Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void GraphImplementation::add(const GraphImplementation & graphImplementation) { // Add the drawables add(graphImplementation.getDrawables()); // Update the bounding box const BoundingBox otherBoundingBox(graphImplementation.getBoundingBox()); boundingBox_[0] = std::min(boundingBox_[0], otherBoundingBox[0]); boundingBox_[1] = std::max(boundingBox_[1], otherBoundingBox[1]); boundingBox_[2] = std::min(boundingBox_[2], otherBoundingBox[2]); boundingBox_[3] = std::max(boundingBox_[3], otherBoundingBox[3]); automaticBoundingBox_ = false; } /* Drawables accessor */ GraphImplementation::DrawableCollection GraphImplementation::getDrawables() const { return drawablesCollection_; } void GraphImplementation::setDrawables(const DrawableCollection & drawableCollection) { drawablesCollection_ = drawableCollection; } /* Individual drawable accessor */ Drawable GraphImplementation::getDrawable(const UnsignedInteger index) const { if (index >= drawablesCollection_.getSize()) throw InvalidRangeException(HERE) << "Error: trying to get a drawable at position " << index << " from a collection of size " << drawablesCollection_.getSize(); return drawablesCollection_[index]; } void GraphImplementation::setDrawable(const Drawable & drawable, const UnsignedInteger index) { if (index >= drawablesCollection_.getSize()) throw InvalidRangeException(HERE) << "Error: trying to set a drawable at position " << index << " into a collection of size " << drawablesCollection_.getSize(); drawablesCollection_[index] = drawable; } /** Global color accessor */ Description GraphImplementation::getColors() const { const UnsignedInteger size = drawablesCollection_.getSize(); Description colors(size); for (UnsignedInteger i = 0; i < size; ++i) colors[i] = drawablesCollection_[i].getColor(); return colors; } void GraphImplementation::setColors(const Description & colors) { const UnsignedInteger size = drawablesCollection_.getSize(); const UnsignedInteger inputSize = colors.getSize(); for (UnsignedInteger i = 0; i < size; ++i) drawablesCollection_[i].setColor(colors[i % inputSize]); } void GraphImplementation::setDefaultColors() { const UnsignedInteger size = drawablesCollection_.getSize(); setColors(Drawable::BuildDefaultPalette(size)); } /** Global legend accessor */ Description GraphImplementation::getLegends() const { const UnsignedInteger size = drawablesCollection_.getSize(); Description legends(size); for (UnsignedInteger i = 0; i < size; ++i) legends[i] = drawablesCollection_[i].getLegend(); return legends; } void GraphImplementation::setLegends(const Description & legends) { const UnsignedInteger size = drawablesCollection_.getSize(); const UnsignedInteger inputSize = legends.getSize(); for (UnsignedInteger i = 0; i < size; ++i) drawablesCollection_[i].setLegend(legends[i % inputSize]); } /* Hide or show x and y axes */ void GraphImplementation::setAxes(const Bool showAxes) { showAxes_ = showAxes; } /* Accessor for showAxes_ */ Bool GraphImplementation::getAxes() const { return showAxes_; } /* Set log scale for x, y both or none axes */ void GraphImplementation::setLogScale(const LogScale logScale) { if (logScale > LOGXY) logScale_ = NONE; else logScale_ = logScale; } /* Accessor for logScale_ */ GraphImplementation::LogScale GraphImplementation::getLogScale() const { return logScale_; } /* Hide or show x grid */ void GraphImplementation::setGrid(const Bool showGrid) { showGrid_ = showGrid; } /* Accessor for showGrid_ */ Bool GraphImplementation::getGrid() const { return showGrid_; } /* Grid color accessors */ void GraphImplementation::setGridColor(const String & color) { if(!DrawableImplementation::IsValidColor(color)) throw InvalidArgumentException(HERE) << "Given color = " << color << " is incorrect"; gridColor_ = color; } /* Accessor for showGrid_ */ String GraphImplementation::getGridColor() const { return gridColor_; } /* Accesor for xTitle */ String GraphImplementation::getXTitle() const { return xTitle_; } /* Accessor for xTitle */ void GraphImplementation::setXTitle(const String & title) { xTitle_ = title; } /* Accessor for yTitle */ String GraphImplementation::getYTitle() const { return yTitle_; } /* Accessor for yTitle */ void GraphImplementation::setYTitle(const String & title) { yTitle_ = title; } /* Accesor for title */ String GraphImplementation::getTitle() const { return title_; } /* Accesor for title */ void GraphImplementation::setTitle(const String & title) { title_ = title; } /* Build the R command corresponding to the legend */ String GraphImplementation::makeRLegendCommand() const { OSS labels, colors, lines, points, fill; labels << "c("; colors << "c("; lines << "c("; points << "c("; fill << "c("; Bool drawLegend = false; for(DrawableCollection::const_iterator it = drawablesCollection_.begin(); it != drawablesCollection_.end(); ++it) { if (it->getLegend().size() != 0) { drawLegend = true; labels << "\"" << it->getLegend() << "\","; if(it->getColor().size() == 0) colors << "NA,"; else colors << "\"" << it->getColor() << "\","; if(it->getFillStyle().size() == 0) fill << "NA,"; else fill << "\"" << it->getFillStyle() << "\","; if(it->getPointStyle().size() == 0 || it->getFillStyle().size() != 0) //cannot merge fill and point symbol points << "NA,"; else points << it->getPointCode(it->getPointStyle()) << ","; if(it->getLineStyle().size() == 0 || it->getFillStyle().size() != 0 ) //cannot merge line and fill symbol lines << "NA,"; else lines << "\"" << it->getLineStyle() << "\","; } } if (drawLegend) { String labels_str(labels); labels_str.replace(labels_str.length() - 1, 1, ")"); String colors_str(colors); colors_str.replace(colors_str.length() - 1, 1, ")"); String lines_str(lines); lines_str.replace(lines_str.length() - 1, 1, ")"); String points_str(points); points_str.replace(points_str.length() - 1, 1, ")"); String fill_str(fill); fill_str.replace(fill_str.length() - 1, 1, ")"); OSS rCommand; rCommand << "legend(\"" << legendPosition_ << "\"," << "legend=" << labels_str << "," << "col=" << colors_str << "," << "lty=" << lines_str << "," << "pch=" << points_str << "," << "fill=" << fill_str << "," << "cex=" << legendFontSize_ << "," << "bg=\"grey90\",merge=TRUE,density=40)"; return rCommand; } else return String(); } /* Get the R command corresponding to the graph */ String GraphImplementation::getRCommand() const { return OSS() << makeRHeaderCommand() << makeRCoreCommand(); } /* Make R header commande */ String GraphImplementation::makeRHeaderCommand() const { OSS oss; // Check if we want to print a legend and if there is a legend to print before to include the corresponding R code // First, do we want a legend? if (legendPosition_ != "") { // Secodn, is there a legend to print? for (UnsignedInteger i = 0; i < drawablesCollection_.getSize(); ++i) { if (drawablesCollection_[i].getLegend().size() > 0) { oss << R_LEGEND << "\n"; break; } } } // Check if we want to draw a Pie before to include the corresponding R code for (UnsignedInteger i = 0; i < drawablesCollection_.getSize(); ++i) { if (drawablesCollection_[i].getImplementation()->getClassName() == Pie::GetClassName()) { oss << "\n" << R_PIE << "\n"; break; } } oss << "options(digits=17)" << "\n" << "options(warn=-1)" << "\n"; return oss; } /* Make R core command */ String GraphImplementation::makeRCoreCommand() const { // get the general bounding box BoundingBox boundingBox(getBoundingBox()); //load the R code attached to the general plot OSS graphCommand; graphCommand << "plot(c(" << boundingBox[0] << "," << boundingBox[1] << ")," << "c(" << boundingBox[2] << "," << boundingBox[3] << ")," << "type=\"n\",main=\"" << title_ << "\","; if (showAxes_) { graphCommand << "xlab=\"" << xTitle_ << "\",ylab=\"" << yTitle_ << "\"," << "axes=TRUE"; } else { graphCommand << "xlab=\"\",ylab=\"\",axes=FALSE"; } if (showGrid_) { graphCommand << ", panel.first=grid(col=\"" + gridColor_ + "\")"; } switch (logScale_) { case NONE: break; case LOGX: graphCommand << ", log=\"x\""; break; case LOGY: graphCommand << ", log=\"y\""; break; case LOGXY: graphCommand << ", log=\"xy\""; break; } graphCommand << ", cex.main=2, cex.axis=1.5, cex.lab=1.5)\n"; // add the R code attached to each drawable UnsignedInteger drawablesSize = drawablesCollection_.getSize(); for(UnsignedInteger i = 0; i < drawablesSize; ++i) { if (drawablesCollection_[i].getData().getSize() != 0) graphCommand << drawablesCollection_[i].draw() << "\n"; } // make the legend command graphCommand << (legendPosition_.size() == 0 ? String() : makeRLegendCommand()); return graphCommand; } std::map GraphImplementation::GetExtensionMap() { std::map m; m[PNG] = ".png"; m[EPS] = ".eps"; m[FIG] = ".fig"; m[PDF] = ".pdf"; return m; } /* The method that generates the graphic files */ void GraphImplementation::draw(const String & file, const Scalar width, const Scalar height, SignedInteger drawingFormat) { // Override format base on extension size_t pos = file.find_last_of("."); Bool matchedExtension = false; static std::map extensionMap = GetExtensionMap(); if (pos != String::npos) { String extension = file.substr(pos, file.length()); std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); for(std::map::iterator iter = extensionMap.begin(); iter != extensionMap.end(); ++iter) { if (!extension.compare(iter->second)) { drawingFormat = iter->first; matchedExtension = true; break; } } } // Check the needed drawingFormat. If it is invalid, set it to ALL if (!(drawingFormat & (PNG | EPS | FIG | PDF))) { LOGINFO(OSS() << "Warning: invalid drawing format: " << drawingFormat << ", selecting all formats."); drawingFormat = ALL; } OSS rCommand; rCommand << makeRHeaderCommand(); String rCoreCommand(makeRCoreCommand()); if (drawingFormat & EPS) { rCommand << "postscript(\"" << file + (matchedExtension ? "" : extensionMap[EPS]) << "\", horizontal = FALSE, onefile = FALSE, paper = \"special\", height=" << height / 72. << ", width=" << width / 72. << ")" << "\n" << rCoreCommand << "\n" << "dev.off()" << "\n"; } if (drawingFormat & PDF) { rCommand << "pdf(\"" << file + (matchedExtension ? "" : extensionMap[PDF]) << "\", onefile = FALSE, paper = \"special\", height=" << height / 72. << ", width=" << width / 72. << ")" << "\n" << rCoreCommand << "\n" << "dev.off()" << "\n"; } if (drawingFormat & PNG) { rCommand << "png(\"" << file + (matchedExtension ? "" : extensionMap[PNG]) << "\",height=" << height << ", width=" << width << ",res=72)" << "\n" << rCoreCommand << "\n" << "dev.off()" << "\n"; } if (drawingFormat & FIG) { rCommand << "xfig(\"" << file + (matchedExtension ? "" : extensionMap[FIG]) << "\", horizontal = FALSE, onefile = FALSE, paper = \"A4\", height=" << height / 72. << ", width=" << width / 72. << ")" << "\n" << rCoreCommand << "\n" << "dev.off()" << "\n"; } LOGDEBUG(OSS() << "R command=" << String(rCommand)); // system commands to write R code in a temporary file /* using mkstemp non standard C for temporary file generation */ String temporaryFileName(Path::BuildTemporaryFileName("tmp_graph.R.XXXXXX")); std::ofstream cmdFile(temporaryFileName.c_str(), std::ios::out); cmdFile << String(rCommand); cmdFile.close(); //execute R and load R script in temporary file const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << "" << RExecutable << "" << " --no-save --silent < \"" << temporaryFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In GraphImplementation::draw(): needs R. Please install it and set the absolute path of the R executable in ResourceMap."; if (Os::ExecuteCommand(systemCommand) != 0) throw InternalException(HERE) << "GraphImplementation: error trying to execute R command=" << String(systemCommand); Os::Remove(temporaryFileName); clean(); } /* Clean temporary files */ void GraphImplementation::clean() { UnsignedInteger drawableNumber = drawablesCollection_.getSize(); // Clean all the temporary data created by the drawables during their drawing for (UnsignedInteger i = 0; i < drawableNumber; ++i) { if (drawablesCollection_[i].getData().getSize() != 0) drawablesCollection_[i].clean(); } } /* Get the bounding box of the whole plot */ GraphImplementation::BoundingBox GraphImplementation::getBoundingBox() const { if (automaticBoundingBox_) computeBoundingBox(); return boundingBox_; } /* Set the bounding box of the whole plot */ void GraphImplementation::setBoundingBox(const BoundingBox & boundingBox) { if (boundingBox.getDimension() != 4) throw InvalidArgumentException(HERE) << "Error: the given bounding box must have a dimension equal to 4, here boundingBox=" << boundingBox; boundingBox_ = boundingBox; automaticBoundingBox_ = false; } void GraphImplementation::setBoundingBox(const Interval & boundingBox) { if (boundingBox.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: the given bounding box must have a dimension equal to 2"; if (!boundingBox.getFiniteLowerBound()[0]) throw InvalidArgumentException(HERE) << "Error: the lower bound of the first component must be finite"; if (!boundingBox.getFiniteLowerBound()[1]) throw InvalidArgumentException(HERE) << "Error: the lower bound of the second component must be finite"; if (!boundingBox.getFiniteUpperBound()[0]) throw InvalidArgumentException(HERE) << "Error: the upper bound of the first component must be finite"; if (!boundingBox.getFiniteUpperBound()[1]) throw InvalidArgumentException(HERE) << "Error: the upper bound of the second component must be finite"; boundingBox_[0] = boundingBox.getLowerBound()[0]; boundingBox_[1] = boundingBox.getUpperBound()[0]; boundingBox_[2] = boundingBox.getLowerBound()[1]; boundingBox_[3] = boundingBox.getUpperBound()[1]; automaticBoundingBox_ = false; } /* Automatic bounding box accessor */ Bool GraphImplementation::getAutomaticBoundingBox() const { return automaticBoundingBox_; } void GraphImplementation::setAutomaticBoundingBox(const Bool automaticBoundingBox) { automaticBoundingBox_ = automaticBoundingBox; } /* Compute the best bounding box to enclose all the drawables */ void GraphImplementation::computeBoundingBox() const { UnsignedInteger size = drawablesCollection_.getSize(); boundingBox_ = BoundingBox(4); // First exceptional case: no drawable, we default to default bounding box if (size == 0) { LOGINFO("Warning: cannot compute the bounding box of a graph with no drawable, switch to [0,1]x[0,1] default bounding box"); boundingBox_[0] = 0.0; boundingBox_[1] = 1.0; boundingBox_[2] = 0.0; boundingBox_[3] = 1.0; return; } Sample boxes(size, 4); // first, get each Drawable's bounding box and drawing command for(UnsignedInteger i = 0; i < size; ++i) { if (drawablesCollection_[i].getData().getSize() != 0) boxes[i] = drawablesCollection_[i].getBoundingBox(); } BoundingBox min(boxes.getMin()); BoundingBox max(boxes.getMax()); boundingBox_[0] = min[0]; boundingBox_[1] = max[1]; boundingBox_[2] = min[2]; boundingBox_[3] = max[3]; // All the bounding boxes are degenerated to a point, we default to a 1x1 box centered at this point if ((boundingBox_[0] == boundingBox_[1]) || (boundingBox_[2] == boundingBox_[3])) { LOGINFO("Warning: the overall bounding box is degenerated to a point. Switch to a 1x1 box centered at this point"); boundingBox_[0] -= 0.5; boundingBox_[1] += 0.5; boundingBox_[2] -= 0.5; boundingBox_[3] += 0.5; return; } return; } /* Get the legend position */ String GraphImplementation::getLegendPosition() const { return legendPosition_; } /* Set the legend position */ void GraphImplementation::setLegendPosition(const String & position) { if(!IsValidLegendPosition(position)) throw InvalidArgumentException(HERE) << "The given legend position = " << position << " is invalid"; legendPosition_ = position; } /* Gives all the valid legend positions */ Description GraphImplementation::GetValidLegendPositions() { if(IsFirstInitialization) { InitializeValidLegendPositions(); IsFirstInitialization = false; } return ValidLegendPositions; } /* Get the legend font size */ Scalar GraphImplementation::getLegendFontSize() const { return legendFontSize_; } /* Set the legend font size */ void GraphImplementation::setLegendFontSize(const Scalar legendFontSize) { if(legendFontSize <= 0.0) throw InvalidArgumentException(HERE) << "The given legend font size = " << legendFontSize << " is invalid"; legendFontSize_ = legendFontSize; } /* check for legend position validity */ Bool GraphImplementation::IsValidLegendPosition(const String & position) { const Description::const_iterator it = find(ValidLegendPositions.begin(), ValidLegendPositions.end(), position); return (it != ValidLegendPositions.end()); } /* Method save() stores the object through the StorageManager */ void GraphImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "title_", title_ ); adv.saveAttribute( "legendPosition_", legendPosition_ ); adv.saveAttribute( "legendFontSize_", legendFontSize_ ); adv.saveAttribute( "xTitle_", xTitle_ ); adv.saveAttribute( "yTitle_", yTitle_ ); adv.saveAttribute( "showAxes_", showAxes_ ); adv.saveAttribute( "drawablesCollection_", drawablesCollection_ ); } /* Method load() reloads the object from the StorageManager */ void GraphImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "title_", title_ ); adv.loadAttribute( "legendPosition_", legendPosition_ ); adv.loadAttribute( "legendFontSize_", legendFontSize_ ); adv.loadAttribute( "xTitle_", xTitle_ ); adv.loadAttribute( "yTitle_", yTitle_ ); adv.loadAttribute( "showAxes_", showAxes_ ); adv.loadAttribute( "drawablesCollection_", drawablesCollection_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/LegendAndPie.R000066400000000000000000000237101307543307100213000ustar00rootroot00000000000000legend <-function(x, y = NULL, legend, fill=NULL, col = par("col"), lty, lwd, pch, angle = 45, density = NULL, bty = "o", bg = par("bg"), pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd, xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1, adj = c(0, 0.5), text.width = NULL, text.col = par("col"), merge = do.lines && has.pch, trace = FALSE, plot = TRUE, ncol = 1, horiz = FALSE, title = NULL, inset = 0) { if(missing(legend) && !missing(y) && (is.character(y) || is.expression(y))) { legend <- y; y <- NULL } mfill <- !missing(fill) || !missing(density); if(length(title) > 1) stop("invalid title"); n.leg <- if(is.call(legend)) 1 else length(legend); if(n.leg == 0) stop("'legend' is of length 0"); auto <- if (is.character(x)) match.arg(x, c("bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right", "center")) else NA; if (is.na(auto)) { xy <- xy.coords(x, y); x <- xy$x; y <- xy$y; nx <- length(x); if (nx < 1 || nx > 2) stop("invalid coordinate lengths") } else nx <- 0; xlog <- par("xlog"); ylog <- par("ylog"); rect2 <- function(left, top, dx, dy, density = NULL, angle, ...) { r <- left + dx; if(xlog) { left <- 10^left; r <- 10^r }; b <- top - dy; if(ylog) { top <- 10^top; b <- 10^b }; rect(left, top, r, b, angle = angle, density = density, ...) }; segments2 <- function(x1, y1, dx, dy, ...) { x2 <- x1 + dx; if(xlog) { x1 <- 10^x1; x2 <- 10^x2 }; y2 <- y1 + dy; if(ylog) { y1 <- 10^y1; y2 <- 10^y2 }; segments(x1, y1, x2, y2, ...) }; points2 <- function(x, y, ...) { if(xlog) x <- 10^x; if(ylog) y <- 10^y; points(x, y, ...) }; text2 <- function(x, y, ...) { if(xlog) x <- 10^x; if(ylog) y <- 10^y; text(x, y, ...) } if(trace) catn <- function(...) do.call("cat", c(lapply(list(...),formatC), list(""))); cin <- par("cin"); Cex <- cex * par("cex"); if(is.null(text.width)) text.width <- max(strwidth(legend, units="user", cex=cex)) else if(!is.numeric(text.width) || text.width < 0) stop("'text.width' must be numeric, >= 0"); xc <- Cex * xinch(cin[1], warn.log=FALSE); yc <- Cex * yinch(cin[2], warn.log=FALSE); xchar <- xc; xextra <- 0; yextra <- yc * (y.intersp - 1); ymax <- max(yc, strheight(legend, units="user", cex=cex)); ychar <- yextra + ymax; if(trace) catn(" xchar=", xchar, "; (yextra,ychar)=", c(yextra,ychar)); if(mfill) { xbox <- xc * 0.8; ybox <- yc * 0.5; dx.fill <- xbox; } do.lines <- (!missing(lty) && (is.character(lty) || any(lty > 0)) ) || !missing(lwd); if(is.na(do.lines)); do.lines <- FALSE; n.legpercol <- if(horiz) { if(ncol != 1) warning("horizontal specification overrides: Number of columns := ", n.leg); ncol <- n.leg } else ceiling(n.leg / ncol) if(has.pch <- !missing(pch) && length(pch) > 0) { if(is.character(pch) && !is.na(pch[1]) && nchar(pch[1], type="c") > 1) { if(length(pch) > 1) warning("not using pch[2..] since pch[1] has multiple chars") np <- nchar(pch[1], type="c") pch <- substr(rep.int(pch[1], np), 1:np, 1:np) } if(!merge) dx.pch <- x.intersp/2 * xchar } x.off <- if(merge) -0.7 else 0 if (is.na(auto)) { ##- Adjust (x,y) : if (xlog) x <- log10(x) if (ylog) y <- log10(y) } if(nx == 2) { ## (x,y) are specifiying OPPOSITE corners of the box x <- sort(x) y <- sort(y) left <- x[1] top <- y[2] w <- diff(x)# width h <- diff(y)# height w0 <- w/ncol # column width x <- mean(x) y <- mean(y) if(missing(xjust)) xjust <- 0.5 if(missing(yjust)) yjust <- 0.5 } else {## nx == 1 or auto ## -- (w,h) := (width,height) of the box to draw -- computed in steps h <- (n.legpercol + !is.null(title)) * ychar + yc w0 <- text.width + (x.intersp + 1) * xchar if(mfill) w0 <- w0 + dx.fill if(has.pch && !merge) w0 <- w0 + dx.pch if(do.lines) w0 <- w0 + (2+x.off) * xchar w <- ncol*w0 + .5* xchar if (!is.null(title) && (tw <- strwidth(title, units="user", cex=cex) + 0.5*xchar) > w) { xextra <- (tw - w)/2 w <- tw } ##-- (w,h) are now the final box width/height. if (is.na(auto)) { left <- x - xjust * w top <- y + (1 - yjust) * h } else { usr <- par("usr") inset <- rep(inset, length.out = 2) insetx <- inset[1]*(usr[2] - usr[1]) left <- switch(auto, "bottomright"=, "topright"=, "right" = usr[2] - w - insetx, "bottomleft"=, "left"=, "topleft"= usr[1] + insetx, "bottom"=, "top"=, "center"= (usr[1] + usr[2] - w)/2) insety <- inset[2]*(usr[4] - usr[3]) top <- switch(auto, "bottomright"=, "bottom"=, "bottomleft"= usr[3] + h + insety, "topleft"=, "top"=, "topright" = usr[4] - insety, "left"=, "right"=, "center" = (usr[3] + usr[4] + h)/2) } } if (plot && bty != "n") { ## The legend box : if(trace) catn(" rect2(",left,",",top,", w=",w,", h=",h,", ...)",sep="") rect2(left, top, dx = w, dy = h, col = bg, density = NULL) } ## (xt[],yt[]) := `current' vectors of (x/y) legend text xt <- left + xchar + xextra + (w0 * rep.int(0:(ncol-1), rep.int(n.legpercol,ncol)))[1:n.leg] yt <- top - 0.5 * yextra - ymax - (rep.int(1:n.legpercol,ncol)[1:n.leg] - 1 + !is.null(title)) * ychar if(plot && (has.pch || do.lines || mfill)) col <- rep(col, length.out = n.leg) if (mfill) { #- draw filled boxes ------------- if(plot) { fill <- rep(fill, length.out = n.leg) #rect2(left = xt, top=yt+ybox/2, dx = xbox, dy = yb,col = fill,density = density, angle = angle, border = "white") for (boxcount in 1:length(xt)) { if (!is.na(fill[boxcount])){ dens <- NA if(fill[boxcount] == "solid") dens <- NA if(fill[boxcount] == "shaded") dens <- density rect2(.9*xbox + xt[boxcount], yt[boxcount] + 1.2*ybox/2, dx = xbox, dy = 1.2*ybox/2, col = col[boxcount],density=dens,angle=angle,border=col[boxcount]) } } } xt <- xt + dx.fill } seg.len <- 2 # length of drawn segment, in xchar units if(missing(lwd)) lwd <- par("lwd") # = default for pt.lwd if (do.lines) { #- draw lines --------------------- if(missing(lty)) lty <- 1 lty <- rep(lty, length.out = n.leg) lwd <- rep(lwd, length.out = n.leg) ok.l <- !is.na(lty) & (is.character(lty) | lty > 0) if(trace) catn(" segments2(",xt[ok.l] + x.off*xchar, ",", yt[ok.l], ", dx=", seg.len*xchar, ", dy=0, ...)") if(plot) segments2(xt[ok.l] + x.off*xchar, yt[ok.l], dx= seg.len*xchar, dy=0, lty = lty[ok.l], lwd = lwd[ok.l], col = col[ok.l]) # if (!merge) xt <- xt + (seg.len+x.off) * xchar } if (has.pch) { #- draw points ------------------- pch <- rep(pch, length.out = n.leg) pt.bg <- rep(pt.bg, length.out = n.leg) pt.cex<- rep(pt.cex, length.out = n.leg) pt.lwd<- rep(pt.lwd, length.out = n.leg) ok <- !is.na(pch) & (is.character(pch) | pch >= 0) x1 <- (if(merge) xt-(seg.len/2)*xchar else xt)[ok] y1 <- yt[ok] if(trace) catn(" points2(", x1,",", y1,", pch=", pch[ok],", ...)") if(plot) points2(x1, y1, pch = pch[ok], col = col[ok], cex = pt.cex[ok], bg = pt.bg[ok], lwd = pt.lwd[ok]) if (!merge) xt <- xt + dx.pch } xt <- xt + x.intersp * xchar if(plot) { if (!is.null(title)) text2(left + w/2, top - ymax, labels = title, adj = c(0.5, 0), cex = cex, col = text.col) text2(xt, yt, labels = legend, adj = adj, cex = cex, col = text.col) } invisible(list(rect = list(w = w, h = h, left = left, top = top), text = list(x = xt, y = yt))) } pie <- function (x,center=c(0,0), labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE, init.angle = if (clockwise) 90 else 0, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) { if (!is.numeric(x) || any(is.na(x) | x < 0)) stop("'x' values must be positive.") if (is.null(labels)) labels <- as.character(1:length(x)) x <- c(0, cumsum(x)/sum(x)) dx <- diff(x) nx <- length(dx) pin <- par("pin") usr <- par("usr") rhoy <- (usr[4]-usr[3])/(usr[2]-usr[1])*pin[1]/pin[2] rhox <- 1 if(rhoy>1) { rhox <- 1/rhoy rhoy <- 1 } if (is.null(col)) col <- if (is.null(density)) c("white", "lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk") else par("fg") col <- rep(col, length.out = nx) border <- rep(border, length.out = nx) lty <- rep(lty, length.out = nx) angle <- rep(angle, length.out = nx) density <- rep(density, length.out = nx) twopi <- if (clockwise) -2 * pi else 2 * pi t2xy <- function(t) { t2p <- twopi * t + init.angle * pi/180 list(x = radius * cos(t2p), y = radius * sin(t2p)) } for (i in 1:nx) { n <- max(2, floor(edges * dx[i])) P <- t2xy(seq(x[i], x[i + 1], length = n)) #rescaling for pie to look circular, whatever the axis of the plot P$y <- P$y*rhoy P$x <- P$x*rhox polygon(c(P$x, 0)+center[1], c(P$y, 0)+center[2], density = density[i], angle = angle[i],border = border[i], col = col[i], lty = lty[i]) P <- t2xy(mean(x[i + 0:1])) P$y <- P$y*rhoy P$x <- P$x*rhox if (!is.na(lab <- labels[i]) && lab != "") { lines(c(1,1.05)*P$x+center[1], c(1,1.05)*P$y+center[2]) text(1.1 * P$x + center[1], 1.1 * P$y + center[2], lab, xpd = TRUE, adj = ifelse(P$x <0, 1, 0), ...) } } # title(main = main, ...) invisible(NULL) } openturns-1.9/lib/src/Base/Graph/Pairs.cxx000066400000000000000000000112021307543307100204710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Pairs class for contourchart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Pairs.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Pairs); static const Factory Factory_Pairs; /* Default constructor */ Pairs::Pairs(const Sample & data, const String & title) : DrawableImplementation(data) { checkData(data); labels_ = data_.getDescription(); if(labels_.getSize() == 0) buildDefaultLabels(); } /* Constructor with parameters*/ Pairs::Pairs(const Sample & data, const String & title, const Description & labels, const String & color, const String & pointStyle) : DrawableImplementation(data) { checkData(data); setTitle(title); setColor(color); setLabels(labels); setPointStyle(pointStyle); } /* String converter */ String Pairs::__repr__() const { OSS oss; oss << "class=" << Pairs::GetClassName() << " name=" << getName() << " data=" << data_ << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Accessor for first coordinate */ Sample Pairs::getData() const { return data_; } /* Accessor for labels */ Description Pairs::getLabels() const { return labels_; } void Pairs::setLabels(const Description & labels) { if (labels.getSize() != data_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the labels size must be equal equal to the data dimension"; labels_ = labels; } /* Clean all the temporary data created by draw() method */ void Pairs::clean() const { DrawableImplementation::clean(); if (dataFileName_ != "") Os::Remove(dataFileName_); } /* Draw method */ String Pairs::draw() const { dataFileName_ = ""; OSS oss; if (pointStyle_ != "none") { // Stores the data in a temporary file // The specific R command for drawing oss << "dim_ <- " << data_.getDimension() << "\n" ; oss << "size_ <- " << data_.getSize() << "\n"; oss << DrawableImplementation::draw() << "\n"; oss << "description=c("; const UnsignedInteger length = data_.getDimension(); for(UnsignedInteger i = 0; i < length - 1; ++i) oss << "\"" << labels_[i] << "\"" << ","; oss << "\"" << labels_[length - 1] << "\"" << ") \n"; // DataFrame organisation const String code((OSS() << getPointCode(pointStyle_))); oss << "dataOT = data.frame(dataOT) \n"; oss << "names(dataOT) <- description \n"; oss << "points(pairs(dataOT " << ",pch=" << (pointStyle_ == "dot" ? "\".\"" : code) << ",col=\"" << color_ << "\"" << ",main=\"" << getTitle() << "\"))"; } return oss; } /* Clone method */ Pairs * Pairs::clone() const { return new Pairs(*this); } String Pairs::getTitle() const { return title_; } void Pairs::setTitle(const String & title) { title_ = title; } /* Check for data validity */ void Pairs::checkData(const Sample & data) const { if (data.getDimension() < 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension >=2: got " << data.getDimension(); } } /* Build default labels by taking the level values */ void Pairs::buildDefaultLabels() { const UnsignedInteger number = data_.getDimension(); labels_ = Description(number); for (UnsignedInteger i = 0; i < number; ++i) labels_[i] = OSS() << "V" << i + 1; } /* Method save() stores the object through the StorageManager */ void Pairs::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "labels_", labels_ ); adv.saveAttribute( "title_", title_ ); } /* Method load() reloads the object from the StorageManager */ void Pairs::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "labels_", labels_ ); adv.loadAttribute( "title_", title_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Pie.cxx000066400000000000000000000160111307543307100201330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Pie class for piechart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Pie.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Pie); static const Factory Factory_Pie; /* Default constructor */ Pie::Pie(const Point & data) : DrawableImplementation() , palette_(0) , radius_(1.0) , center_(2, 0.0) , labels_(0) { // Check data validity setData(data); buildDefaultPalette(); buildDefaultLabels(); } /* Constructor with parameters */ Pie::Pie(const Point & data, const Description & labels) : DrawableImplementation() , palette_() , radius_(1) , center_(2, 0.0) , labels_(labels) { // Check data validity setData(data); buildDefaultPalette(); } /* Constructor with parameters */ Pie::Pie(const Point & data, const Description & labels, const Point & center, const Scalar & radius, const Description & palette) : DrawableImplementation() , palette_() , radius_(radius) , center_(center) , labels_(labels) { if(!IsValidColorPalette(palette)) throw InvalidArgumentException(HERE) << "Given color palette = " << palette << " is incorrect"; // Check data validity setData(data); palette_ = palette; } /* String converter */ String Pie::__repr__() const { OSS oss; oss << "class=" << Pie::GetClassName() << " name=" << getName() << " labels=" << labels_ << " radius=" << radius_ << " center=" << center_ << " color palette=" << palette_ << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Accessor for center */ Point Pie::getCenter() const { return center_; } void Pie::setCenter(const Point & center) { center_ = center; } /* Accessor for radius */ Scalar Pie::getRadius() const { return radius_; } void Pie::setRadius(const Scalar radius) { radius_ = radius; } /* Accessor for labels */ Description Pie::getLabels() const { return labels_; } void Pie::setLabels(const Description & labels) { labels_ = labels; } /* Accessor for color palette */ Description Pie::getPalette() const { return palette_; } void Pie::setPalette(const Description & palette) { if(!IsValidColorPalette(palette)) throw InvalidArgumentException(HERE) << "Given color palette = " << palette << " is incorrect"; palette_ = palette; } /* Accessor for boundingbox */ Pie::BoundingBox Pie::getBoundingBox() const { BoundingBox boundingBox(BoundingBoxSize); boundingBox[0] = center_[0] - (1.0 + ResourceMap::GetAsScalar("Pie-HorizontalMargin")) * radius_; boundingBox[1] = center_[0] + (1.0 + ResourceMap::GetAsScalar("Pie-HorizontalMargin")) * radius_; boundingBox[2] = center_[1] - (1.0 + ResourceMap::GetAsScalar("Pie-VerticalMargin")) * radius_; boundingBox[3] = center_[1] + (1.0 + ResourceMap::GetAsScalar("Pie-VerticalMargin")) * radius_; return boundingBox; } /* Draw method */ String Pie::draw() const { dataFileName_ = ""; //pie(xpi,center=center,radius=rayon,labels=noms) OSS oss; // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing // Labels are drawn only if the associated data shares a sufficient amount of the total Scalar labelThreshold = data_.getMax()[0] * ResourceMap::GetAsScalar("Pie-LabelThreshold"); oss << "pie(dataOT[,1]," << "center=c(" << center_[0] << "," << center_[1] << "),radius=" << radius_; UnsignedInteger size = labels_.getSize(); // If there is any label defined if (size > 0) { oss << ",labels=c(\""; String separator(""); for(UnsignedInteger i = 0; i < size; ++i, separator = "\",\"") oss << separator << (data_[i][0] >= labelThreshold ? labels_[i] : ""); oss << "\")"; } size = palette_.getSize(); // If there is any color defined if (size > 0) { oss << ",col=c(\""; String separator(""); for(UnsignedInteger i = 0; i < size; ++i, separator = "\",\"") oss << separator << palette_[i]; oss << "\")"; } oss << ")"; return oss; } /* Clone method */ Pie * Pie::clone() const { return new Pie(*this); } /* Check for color palette validity */ Bool Pie::IsValidColorPalette(const Description & palette) { Bool IsValid = true; Description::const_iterator it; for(it = palette.begin(); it != palette.end(); ++it) IsValid &= IsValidColor(*it); return IsValid; } void Pie::checkData(const Point & data) const { const UnsignedInteger size = data.getSize(); // Check if there is any data to display if (size == 0) { throw InvalidArgumentException(HERE) << "No data to display"; } // Then, check the positivity of the data Scalar max = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { Scalar x = data[i]; if (x < 0.0) { throw InvalidArgumentException(HERE) << "Expected positive values"; } if (x > max) max = x; } // Check if there is at least one strictly positive data if (max == 0.0) { throw InvalidArgumentException(HERE) << "Expected at least one strictly positive data"; } } /* Build default palette Cycle through the hue wheel with 10 nuances and increasing darkness */ void Pie::buildDefaultPalette() { palette_ = BuildDefaultPalette(data_.getSize()); } /* Build default labels */ void Pie::buildDefaultLabels() { const UnsignedInteger size = data_.getSize(); labels_ = Description(size); Scalar sum = 0.0; for (UnsignedInteger i = 0; i < size; ++i) sum += data_[i][0]; for (UnsignedInteger i = 0; i < size; ++i) labels_[i] = String(OSS() << "L" << i << " " << 0.1 * round(1000.0 * data_[i][0] / sum) << "%"); } /* Method save() stores the object through the StorageManager */ void Pie::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "palette_", palette_ ); adv.saveAttribute( "radius_", radius_ ); adv.saveAttribute( "center_", center_ ); adv.saveAttribute( "labels_", labels_ ); } /* Method load() reloads the object from the StorageManager */ void Pie::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "palette_", palette_ ); adv.loadAttribute( "radius_", radius_ ); adv.loadAttribute( "center_", center_ ); adv.loadAttribute( "labels_", labels_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Polygon.cxx000066400000000000000000000130431307543307100210470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Polygon class for polygon plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Polygon.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Polygon); static const Factory Factory_Polygon; /* Default constructor */ Polygon::Polygon(const String & legend) : DrawableImplementation(Sample(0, 2), legend) , edgeColor_("") { // Nothing to do setEdgeColor(getColor()); } /* Default constructor */ Polygon::Polygon(const Sample & data, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , edgeColor_("") { // Check data validity setData(data); setEdgeColor(getColor()); } /* Contructor from 2 data sets */ Polygon::Polygon(const Sample & dataX, const Sample & dataY, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , edgeColor_("") { const UnsignedInteger size = dataX.getSize(); if (dataY.getSize() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Polygon based on two numerical samples with different size."; if ((dataX.getDimension() != 1) || (dataY.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: cannot build a Polygon based on two numerical samples of dimension greater than 1."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i][0]; dataFull[i][1] = dataY[i][0]; } // Check data validity setData(dataFull); setEdgeColor(getColor()); } /* Contructor from 2 data sets */ Polygon::Polygon(const Point & dataX, const Point & dataY, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , edgeColor_("") { const UnsignedInteger size = dataX.getDimension(); if (dataY.getDimension() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Polygon based on two numerical points with different size."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i]; dataFull[i][1] = dataY[i]; } // Check data validity setData(dataFull); setEdgeColor(getColor()); } /* Constructor with parameters */ Polygon::Polygon(const Sample & data, const String & color, const String & edgeColor, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , edgeColor_("") { Sample dataFull; // If data is unidimensional, assume that it means Y values with indices as X values if (data.getDimension() == 1) { const UnsignedInteger size = data.getSize(); dataFull = Sample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = i; dataFull[i][1] = data[i][0]; } } else dataFull = data; // Check data validity setData(dataFull); setColor(color); setEdgeColor(edgeColor); } /* String converter */ String Polygon::__repr__() const { OSS oss; oss << "class=" << Polygon::GetClassName() << " name=" << getName() << " derived from " << DrawableImplementation::__repr__() << " edge color=" << edgeColor_; return oss; } /* Draw method */ String Polygon::draw() const { dataFileName_ = ""; OSS oss; // Stores the data in a temporary file oss << DrawableImplementation::draw(); // The specific R command for drawing oss << "polygon(dataOT[,1], dataOT[,2]" << ", border=" << "\"" << edgeColor_ << "\"" << ", lty=\"" << lineStyle_ << "\"" << ", col=" << "\"" << color_ << "\"" << ", lwd=" << lineWidth_; if (pointStyle_ != "none") { const String code((OSS() << getPointCode(pointStyle_))); oss << ", pch=" << (pointStyle_ == "dot" ? "\".\"" : code); } oss << ")"; return oss; } /* Clone method */ Polygon * Polygon::clone() const { return new Polygon(*this); } /* Check validity of data */ void Polygon::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Accessor for edge color */ String Polygon::getEdgeColor() const { return edgeColor_; } /* Accessor for edge color */ void Polygon::setEdgeColor(const String & edgeColor) { if(!IsValidColor(edgeColor)) throw InvalidArgumentException(HERE) << "Given edge color = " << edgeColor << " is incorrect"; edgeColor_ = edgeColor; } /* Method save() stores the object through the StorageManager */ void Polygon::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "edgeColor_", edgeColor_ ); } /* Method load() reloads the object from the StorageManager */ void Polygon::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "edgeColor_", edgeColor_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/PolygonArray.cxx000066400000000000000000000162511307543307100220520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PolygonArray class for polygonArray plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PolygonArray.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PolygonArray); static const Factory Factory_PolygonArray; /* Default constructor */ PolygonArray::PolygonArray(const String & legend) : DrawableImplementation(Sample(0, 2), legend) , verticesNumber_(2) , palette_(0) , paletteFileName_("") { // Nothing to do } /* Default constructor */ PolygonArray::PolygonArray(const PolygonCollection & polygons, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , verticesNumber_(2) , palette_(0) , paletteFileName_("") { // Convert the collection of polygons into a valid (coordinates, verticesNumber) pair const UnsignedInteger size = polygons.getSize(); if (size > 0) { palette_ = Description(size); // The first polygon gives the number of vertices verticesNumber_ = polygons[0].getData().getSize(); if (verticesNumber_ < 2) throw InvalidArgumentException(HERE) << "Error: cannot have polygons with less than 2 vertices."; data_ = Sample(size * verticesNumber_, 2); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Sample polygonData(polygons[i].getData()); if (polygonData.getSize() != verticesNumber_) throw InvalidArgumentException(HERE) << "Error: expected polygons with " << verticesNumber_ << " but polygon " << i << " has " << polygonData.getSize() << " vertices."; for (UnsignedInteger j = 0; j < verticesNumber_; ++j) { data_[index] = polygonData[j]; ++index; } // j palette_[i] = polygons[i].getColor(); } // i } // size > 0 } /* Contructor from 2 data sets */ PolygonArray::PolygonArray(const Sample & coordinates, const UnsignedInteger verticesNumber, const Description & palette, const String & legend) : DrawableImplementation(Sample(0, 2), legend) , verticesNumber_(0) , palette_(palette) , paletteFileName_("") { // First, set the coordinates and the verticesNumber setCoordinatesAndVerticesNumber(coordinates, verticesNumber); // Second, set the palette as the check is done wrt the previous data setPalette(palette); } /* String converter */ String PolygonArray::__repr__() const { OSS oss; oss << "class=" << PolygonArray::GetClassName() << " name=" << getName() << " derived from " << DrawableImplementation::__repr__() << " vertices number=" << verticesNumber_ << " palette=" << palette_; return oss; } /* Draw method */ String PolygonArray::draw() const { OSS oss; // Store the data in a temporary file dataFileName_ = Path::BuildTemporaryFileName("RData.txt.XXXXXX"); std::ofstream dataFile(dataFileName_.c_str()); const UnsignedInteger polygonNumber = palette_.getSize(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < polygonNumber; ++i) { for (UnsignedInteger j = 0; j < verticesNumber_; ++j) { dataFile << std::setprecision(16) << data_[index][0] << " " << data_[index][1] << "\n"; ++index; } // Insert NaNs in order to tell R to go to the next polygon dataFile << "\"nan\" \"nan\"\n"; } dataFile.close(); oss << "dataOT <- data.matrix(read.table(\"" << dataFileName_ << "\", stringsAsFactors = F))" << "\n"; // Store the palette in a temporary file paletteFileName_ = Path::BuildTemporaryFileName("RPalette.txt.XXXXXX"); std::ofstream paletteFile(paletteFileName_.c_str(), std::ios::out); for (UnsignedInteger i = 0; i < palette_.getSize(); ++i) paletteFile << "\"" << palette_[i] << "\"\n"; paletteFile.close(); oss << "paletteOT <- scan(\"" << paletteFileName_ << "\", what=\"\")\n"; // The specific R command for drawing oss << "polygon(dataOT[,1], dataOT[,2]" << ", border=paletteOT" << ", lty=\"" << lineStyle_ << "\"" << ", col=paletteOT" << ", lwd=" << lineWidth_; if (pointStyle_ != "none") { const String code((OSS() << getPointCode(pointStyle_))); oss << ", pch=" << (pointStyle_ == "dot" ? "\".\"" : code); } oss << ")"; return oss; } /* Clean method */ void PolygonArray::clean() const { Os::Remove(paletteFileName_); DrawableImplementation::clean(); } /* Clone method */ PolygonArray * PolygonArray::clone() const { return new PolygonArray(*this); } /* Check validity of data */ void PolygonArray::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Palette of the edge/face of the polygons */ void PolygonArray::setPalette(const Description & palette) { if (data_.getSize() != verticesNumber_ * palette.getSize()) throw InvalidArgumentException(HERE) << "Error: expected a palette with " << data_.getSize() / verticesNumber_ << " colors, got " << palette.getSize(); palette_ = palette; } Description PolygonArray::getPalette() const { return palette_; } /* Coordinates and vertices number of the vertices of the polygons */ void PolygonArray::setCoordinatesAndVerticesNumber(const Sample & coordinates, const UnsignedInteger verticesNumber) { if (verticesNumber < 2) throw InvalidArgumentException(HERE) << "Error: cannot have polygons with less than 2 vertices."; if (coordinates.getSize() % verticesNumber != 0) throw InvalidArgumentException(HERE) << "Error: the coordinates size=" << coordinates.getSize() << " is not compatible with the vertices number=" << verticesNumber; setData(coordinates); verticesNumber_ = verticesNumber; } /* Coordinates accessor */ Sample PolygonArray::getCoordinates() const { return getData(); } /* Vertices number accessor */ UnsignedInteger PolygonArray::getVerticesNumber() const { return verticesNumber_; } /* Method save() stores the object through the StorageManager */ void PolygonArray::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "verticesNumber_", verticesNumber_ ); adv.saveAttribute( "palette_", palette_ ); } /* Method load() reloads the object from the StorageManager */ void PolygonArray::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "verticesNumber_", verticesNumber_ ); adv.loadAttribute( "palette_", palette_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Staircase.cxx000066400000000000000000000077631307543307100213520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Staircase class for staircase plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Staircase.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Staircase); static const Factory Factory_Staircase; /* Default constructor */ Staircase::Staircase() : DrawableImplementation() , pattern_() { // Nothing to do } /* Constructor with parameters */ Staircase::Staircase(const Sample & data, const String & legend) : DrawableImplementation(data, legend) , pattern_(ResourceMap::Get("Drawable-DefaultPattern")) { // Check data validity setData(data); } /* Constructor with parameters */ Staircase::Staircase(const Sample & data, const String & color, const String & lineStyle, const UnsignedInteger lineWidth, const String & pattern, const String & legend) : DrawableImplementation(data, legend) { setColor(color); setLineStyle(lineStyle); setPattern(pattern); setLineWidth(lineWidth); // Check data validity setData(data); } /* Constructor with old parameters */ Staircase::Staircase(const Sample & data, const String & color, const String & lineStyle, const String & pattern, const String & legend) : DrawableImplementation(data, legend) { setColor(color); setLineStyle(lineStyle); setPattern(pattern); setLineWidth(1); // Check data validity setData(data); } /* String converter */ String Staircase::__repr__() const { OSS oss; oss << "class=" << Staircase::GetClassName() << " name=" << getName() << " pattern=" << pattern_ << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Draw method */ String Staircase::draw() const { dataFileName_ = ""; OSS oss; // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; // The specific R command for drawing oss << "lines(dataOT[, 1], dataOT[, 2]" << ", lty=\"" << lineStyle_ << "\", col=\"" << color_ << "\", lwd=" << lineWidth_ << ", type=\"" << pattern_ << "\")"; return oss; } /* Clone method */ Staircase * Staircase::clone() const { return new Staircase(*this); } /* Accessor for pattern */ String Staircase::getPattern() const { return pattern_; } /* Accessor for pattern */ void Staircase::setPattern(const String style) { if(!IsValidPattern(style)) throw InvalidArgumentException(HERE) << "Given staircase pattern = " << style << " is incorrect"; pattern_ = style; } /* Check validity of data */ void Staircase::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Method save() stores the object through the StorageManager */ void Staircase::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "pattern_", pattern_ ); } /* Method load() reloads the object from the StorageManager */ void Staircase::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "pattern_", pattern_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/Text.cxx000066400000000000000000000175141307543307100203530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Text class for plot labels * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Text.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Text); static const Factory Factory_Text; /* Accepted text position */ std::map Text::Position; Bool Text::IsTextFirstInitialization = true; /* Default constructor */ Text::Text(const Sample & data, const Description & textAnnotations, const String & textPosition, const String & legend) : DrawableImplementation(data, legend) { // Check data validity setData(data); setTextAnnotations(textAnnotations); if(!IsValidTextPosition(textPosition)) { throw InvalidArgumentException(HERE) << "The given text position = " << textPosition << " is invalid"; } textPositions_ = Description(data_.getSize(), textPosition); } /* Constructor from complex numbers */ Text::Text(const ComplexCollection & data, const Description & textAnnotations, const String & textPosition, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { // Convert the complex numbers into a Sample const UnsignedInteger size = data.getSize(); Sample sample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { sample[i][0] = data[i].real(); sample[i][1] = data[i].imag(); } // Check data validity setData(sample); setTextAnnotations(textAnnotations); if(!IsValidTextPosition(textPosition)) { throw InvalidArgumentException(HERE) << "The given text position = " << textPosition << " is invalid"; } textPositions_ = Description(data_.getSize(), textPosition); } /* Contructor from 2 data sets */ Text::Text(const Sample & dataX, const Sample & dataY, const Description & textAnnotations, const String & textPosition, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getSize(); if (dataY.getSize() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a Text based on two numerical samples with different size."; if ((dataX.getDimension() != 1) || (dataY.getDimension() != 1)) throw InvalidDimensionException(HERE) << "Error: cannot build a Text based on two numerical samples of dimension greater than 1."; Sample dataFull(dataX); dataFull.stack(dataY); // Check data validity setData(dataFull); setTextAnnotations(textAnnotations); if(!IsValidTextPosition(textPosition)) { throw InvalidArgumentException(HERE) << "The given text position = " << textPosition << " is invalid"; } textPositions_ = Description(data_.getSize(), textPosition); } Text::Text(const Point & dataX, const Point & dataY, const Description & textAnnotations, const String & textPosition, const String & legend) : DrawableImplementation(Sample(0, 2), legend) { const UnsignedInteger size = dataX.getDimension(); if (dataY.getDimension() != size) throw InvalidDimensionException(HERE) << "Error: cannot build a Text based on two numerical points with different dimension."; Sample dataFull(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { dataFull[i][0] = dataX[i]; dataFull[i][1] = dataY[i]; } // Check data validity setData(dataFull); setTextAnnotations(textAnnotations); if(!IsValidTextPosition(textPosition)) { throw InvalidArgumentException(HERE) << "The given text position = " << textPosition << " is invalid"; } textPositions_ = Description(data_.getSize(), textPosition); } /* String converter */ String Text::__repr__() const { OSS oss; oss << "class=" << Text::GetClassName() << " name=" << getName() << " derived from " << DrawableImplementation::__repr__(); return oss; } /* Accessor for textAnnotations */ Description Text::getTextAnnotations() const { return textAnnotations_; } void Text::setTextAnnotations(const Description & textAnnotations) { if (textAnnotations.getSize() != data_.getSize()) { throw InvalidDimensionException(HERE) << "Expected array of size " << data_.getSize() << " got " << textAnnotations.getSize(); } textAnnotations_ = textAnnotations; } /* Accessors to text position */ Description Text::getTextPositions() const { return textPositions_; } void Text::setTextPositions(const Description & textPositions) { if (textPositions.getSize() != data_.getSize()) { throw InvalidDimensionException(HERE) << "Expected array of size " << data_.getSize() << " got " << textPositions.getSize(); } for (UnsignedInteger i = 0; i < textPositions.getSize(); ++i) { if(!IsValidTextPosition(textPositions[i])) { throw InvalidArgumentException(HERE) << "The given text position = " << textPositions[i] << " is invalid"; } } textPositions_ = textPositions; } /* Draw method */ String Text::draw() const { dataFileName_ = ""; OSS oss; if (textAnnotations_.getSize() == 0) return oss; // Stores the data in a temporary file oss << DrawableImplementation::draw() << "\n"; oss << "labels <- rep(\"\", " << textAnnotations_.getSize() << ")\n"; oss << "position <- rep(3, " << textAnnotations_.getSize() << ")\n"; // We assume that only few labels are printed, otherwise graph is ugly for (UnsignedInteger i = 0; i < textAnnotations_.getSize(); ++i) { if (textAnnotations_[i] != "") { oss << "labels[" << (i + 1) << "] <- \"" << textAnnotations_[i] << "\"\n"; const std::map::const_iterator it(Position.find(textPositions_[i])); oss << "position[" << (i + 1) << "] <- \"" << it->second << "\"\n"; } } oss << "indices <- which(labels != \"\")\n"; oss << "text(dataOT[indices,1], dataOT[indices,2], labels[indices], cex = 0.75, xpd = TRUE, pos = position[indices]" << ", col=\"" << color_ << "\"" << ", offset = 0.25)\n"; return oss; } /* Clone method */ Text * Text::clone() const { return new Text(*this); } /* Check validity of data */ void Text::checkData(const Sample & data) const { if (data.getDimension() != 2) { throw InvalidDimensionException(HERE) << "Expected sample of dimension 2: got " << data.getDimension(); } } /* Method save() stores the object through the StorageManager */ void Text::save(Advocate & adv) const { DrawableImplementation::save(adv); adv.saveAttribute( "textAnnotations_", textAnnotations_ ); adv.saveAttribute( "textPositions_", textPositions_ ); } Bool Text::IsValidTextPosition(String textPosition) { if(IsTextFirstInitialization) { InitializePositionMap(); IsTextFirstInitialization = false; } const std::map::const_iterator it(Position.find(textPosition)); return (it != Position.end()); } void Text::InitializePositionMap() { Position["bottom"] = 1; Position["left"] = 2; Position["top"] = 3; Position["right"] = 4; } /* Method load() reloads the object from the StorageManager */ void Text::load(Advocate & adv) { DrawableImplementation::load(adv); adv.loadAttribute( "textAnnotations_", textAnnotations_ ); adv.loadAttribute( "textPositions_", textPositions_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Graph/openturns/000077500000000000000000000000001307543307100207305ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Graph/openturns/BarPlot.hxx000066400000000000000000000052101307543307100230220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BarPlot class for barplots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BARPLOT_HXX #define OPENTURNS_BARPLOT_HXX #include "openturns/OTprivate.hxx" #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BarPlot * * The class describing a curve plot * Instance of Drawable */ class OT_API BarPlot : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ BarPlot(const Sample & data, const Scalar origin, const String & legend = ""); /** Constructor with parameters */ BarPlot(const Sample & data, const Scalar origin, const String & color, const String & fillStyle, const String & lineStyle, const UnsignedInteger lineWidth, const String & legend = ""); /** Constructor with old parameters */ BarPlot(const Sample & data, const Scalar origin, const String & color, const String & fillStyle, const String & lineStyle, const String & legend = ""); /** String converter */ String __repr__() const; /** Accessor for origin */ Scalar getOrigin() const; void setOrigin(const Scalar origin); /** Accessor for boundingbox */ BoundingBox getBoundingBox() const; /** Draw method */ String draw() const; /** Clone method */ virtual BarPlot * clone() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: BarPlot() {}; friend class Factory; /** Origin of the BarPlot */ Scalar origin_; }; /* class BarPlot */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BARPLOT_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Cloud.hxx000066400000000000000000000050231307543307100225270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cloud class for cloud plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLOUD_HXX #define OPENTURNS_CLOUD_HXX #include "openturns/OTprivate.hxx" #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Cloud * * The class describing a cloud plot * Instance of Drawable */ class OT_API Cloud : public DrawableImplementation { CLASSNAME; public: typedef Collection ComplexCollection; /** Default constructor */ explicit Cloud(const Sample & data, const String & legend = ""); /** Constructor from complex numbers */ explicit Cloud(const ComplexCollection & data, const String & legend = ""); /** Contructor from 2 data sets */ Cloud(const Sample & dataX, const Sample & dataY, const String & legend = ""); /** Contructor from 2 data sets */ Cloud(const Point & dataX, const Point & dataY, const String & legend = ""); /** Constructor with parameters */ Cloud(const Sample & data, const String & color, const String & pointStyle, const String & legend = ""); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual Cloud * clone() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check for data validity */ virtual void checkData(const Sample & data) const; private: Cloud() {}; friend class Factory; }; /* class Cloud */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLOUD_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Contour.hxx000066400000000000000000000075531307543307100231240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Contour class for piechart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONTOUR_HXX #define OPENTURNS_CONTOUR_HXX #include "openturns/DrawableImplementation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Contour * * The class describing a contour chart * Instance of Drawable */ class OT_API Contour : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ Contour(const UnsignedInteger dimX, const UnsignedInteger dimY, const Sample & data, const String & legend = ""); /** Constructor with parameters */ Contour(const Sample & x, const Sample & y, const Sample & data, const Point & levels, const Description & labels, const Bool drawLabels = true, const String & legend = ""); /** Constructor with parameters Contour(const Sample & xy, const Sample & data, const Point & levels, const Description & labels, const Bool drawLabels = true, const String & legend = ""); */ /** String converter */ String __repr__() const; /** Accessor for first coordinate */ Sample getX() const; void setX(const Sample & x); /** Accessor for second coordinate */ Sample getY() const; void setY(const Sample & y); /** Accessor for levels */ Point getLevels() const; void setLevels(const Point & levels); /** Accessor for labels */ Description getLabels() const; void setLabels(const Description & labels); /** Accessor for drawLabels */ Bool getDrawLabels() const; void setDrawLabels(const Bool & drawLabels); /** Accessor for boundingbox */ BoundingBox getBoundingBox() const; /** Draw method */ String draw() const; /** Clone method */ virtual Contour * clone() const; /** Build default levels using quantiles associated with regularly spaced probability levels */ void buildDefaultLevels(const UnsignedInteger number = ResourceMap::GetAsUnsignedInteger( "Contour-DefaultLevelsNumber" )); /** Build default labels by taking the level values */ void buildDefaultLabels(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); /** Clean all the temporary data created by draw() method */ virtual void clean() const; protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: Contour() {}; friend class Factory; /** Sample of first coordinate */ Sample x_; /** Sample of second coordinate */ Sample y_; /** Values of the level sets */ Point levels_; /** Labels of the level sets. If none is given, it defaults to the level values. */ Description labels_; /** Flag for drawing the labels */ Bool drawLabels_; /** Temporary file name for the exchange with R */ mutable String xFileName_; /** Temporary file name for the exchange with R */ mutable String yFileName_; }; /* class Contour */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONTOUR_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Curve.hxx000066400000000000000000000045211307543307100225470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Curve class for curve plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CURVE_HXX #define OPENTURNS_CURVE_HXX #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Curve * * The class describing a curve plot * Instance of Drawable */ class OT_API Curve : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ explicit Curve(const String & legend = ""); /** Default constructor */ explicit Curve(const Sample & data, const String & legend = ""); /** Contructor from 2 data sets */ Curve(const Sample & dataX, const Sample & dataY, const String & legend = ""); /** Contructor from 2 data sets */ Curve(const Point & dataX, const Point & dataY, const String & legend = ""); /** Constructor with parameters */ Curve(const Sample & data, const String & color, const String & lineStyle, const UnsignedInteger lineWidth = 1, const String & legend = ""); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual Curve * clone() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: }; /* class Curve */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CURVE_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Drawable.hxx000066400000000000000000000145241307543307100232100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Drawable implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DRAWABLE_HXX #define OPENTURNS_DRAWABLE_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/DrawableImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Drawable * * Drawable is an interface to implement graphics */ class OT_API Drawable : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ Drawable(); /** Default constructor */ Drawable(const DrawableImplementation & implementation); /** String converter */ String __repr__() const; /* Here is the interface */ /** Accessor for bounding box of the drawable */ Point getBoundingBox() const; /** Legend accessor */ virtual String getLegend() const; virtual void setLegend(const String & legend); /** Accessor for legend line style */ String getLineStyle() const; void setLineStyle(const String & lineStyle); /** Accessor for legend point style */ String getPointStyle() const; void setPointStyle(const String & pointStyle); /** Accessor for legend fill style */ String getFillStyle() const; void setFillStyle(const String & fillStyle); /** Line width accessor */ UnsignedInteger getLineWidth() const; void setLineWidth(const UnsignedInteger lineWidth); /** Accessor for color */ String getColor() const; String getColorCode() const; void setColor(const String & color); String getEdgeColor() const; /** Accessor for pattern */ String getPattern() const; void setPattern(const String style); /** Accessor for center */ Point getCenter() const; void setCenter(const Point & center); /** Accessor for radius */ Scalar getRadius() const; void setRadius(const Scalar radius); /** Accessor for labels */ Description getLabels() const; void setLabels(const Description & labels); /** Accessor for color palette */ Description getPalette() const; void setPalette(const Description & palette); /** Accessor for origin */ Scalar getOrigin() const; void setOrigin(const Scalar origin); /** Accessor for first coordinate */ Sample getX() const; void setX(const Sample & x); /** Accessor for second coordinate */ Sample getY() const; void setY(const Sample & y); /** Accessor for levels */ Point getLevels() const; void setLevels(const Point & levels); /** Accessor for drawLabels */ Bool getDrawLabels() const; void setDrawLabels(const Bool & drawLabels); /** Accessor for textAnnotations */ Description getTextAnnotations() const; void setTextAnnotations(const Description & textAnnotations); /** Accessor for textPositions */ Description getTextPositions() const; void setTextPositions(const Description & textPositions); /** Accessor for data */ Sample getData() const; /** Generate R commands for plotting the graphic */ String draw() const; /** Get R point code from key */ UnsignedInteger getPointCode(const String key) const; /** Clean all the temporary data created by draw() method */ void clean() const; /** Give the colors name */ static Description GetValidColors(); /** Give the line style names */ static Description GetValidLineStyles(); /** Give the fill style names */ static Description GetValidFillStyles(); /** Give the point style names */ static Description GetValidPointStyles(); /** Convert a color name into a valid hexadecimal code */ static String ConvertFromName(const String & name); /** Convert an hexadecimal code into an RGB triplet */ static Indices ConvertToRGB(const String & key); /** Convert an hexadecimal code into an RGBA quadruplet */ static Indices ConvertToRGBA(const String & key); /** Convert an RGB triplet to a valid hexadecimal code */ static String ConvertFromRGB(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue); /** Convert an RGBA quadruplet to a valid hexadecimal code */ static String ConvertFromRGBA(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue, const UnsignedInteger alpha); /** Convert an RGB triplet to a valid hexadecimal code */ static String ConvertFromRGB(const Scalar red, const Scalar green, const Scalar blue); /** Convert an RGBA quadruplet to a valid hexadecimal code */ static String ConvertFromRGBA(const Scalar red, const Scalar green, const Scalar blue, const Scalar alpha); /** Convert an HSV triplet into an RGB triplet */ static Point ConvertFromHSVIntoRGB(const Scalar hue, const Scalar saturation, const Scalar value); /** Convert an HSV triplet to a valid hexadecimal code */ static String ConvertFromHSV(const Scalar hue, const Scalar saturation, const Scalar value); /** Convert an HSVA quadruplet to a valid hexadecimal code */ static String ConvertFromHSVA(const Scalar hue, const Scalar saturation, const Scalar value, const Scalar alpha); /** Build default palette */ static Description BuildDefaultPalette(const UnsignedInteger size); }; /* class Drawable */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DRAWABLE_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/DrawableImplementation.hxx000066400000000000000000000233011307543307100261070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all drawables * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DRAWABLEIMPLEMENTATION_HXX #define OPENTURNS_DRAWABLEIMPLEMENTATION_HXX #include #include "openturns/Description.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DrawableImplementation * * The class describes the a drawable graphic * Instances of this class can actually be plotted */ class OT_API DrawableImplementation : public PersistentObject { CLASSNAME; friend class GraphImplementation; public: typedef Point BoundingBox; /** Default Constructor with legend label */ explicit DrawableImplementation(const Sample & data, const String & legend = ""); /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Comparison operator */ Bool operator == (const DrawableImplementation & other) const; /** Code for point style accessor */ virtual UnsignedInteger getPointCode(const String & key) const; /** Legend accessor */ virtual String getLegend() const; virtual void setLegend(const String & legend); /** Data accessor */ virtual Sample getData() const; /** Line style accessor */ virtual String getLineStyle() const; virtual void setLineStyle(const String & lineStyle); /** Color accessor */ virtual String getColor() const; virtual String getColorCode() const; virtual void setColor(const String & color); virtual String getEdgeColor() const; /** Point style accessor */ virtual String getPointStyle() const; virtual void setPointStyle(const String & pointStyle); /** Filling style (for surfaces) accessor */ virtual String getFillStyle() const; virtual void setFillStyle(const String & fillStyle); /** Line width accessor */ virtual UnsignedInteger getLineWidth() const; virtual void setLineWidth(const UnsignedInteger lineWidth); /** Accessor for pattern */ virtual String getPattern() const; virtual void setPattern(const String style); /** Accessor for center */ virtual Point getCenter() const; virtual void setCenter(const Point & center); /** Accessor for radius */ virtual Scalar getRadius() const; virtual void setRadius(const Scalar radius); /** Accessor for labels */ virtual Description getLabels() const; virtual void setLabels(const Description & labels); /** Accessor for color palette */ virtual Description getPalette() const; virtual void setPalette(const Description & palette); /** Accessor for origin */ virtual Scalar getOrigin() const; virtual void setOrigin(const Scalar origin); /** Accessor for first coordinate */ virtual Sample getX() const; virtual void setX(const Sample & x); /** Accessor for second coordinate */ virtual Sample getY() const; virtual void setY(const Sample & y); /** Accessor for levels */ virtual Point getLevels() const; virtual void setLevels(const Point & levels); /** Accessor for drawLabels */ virtual Bool getDrawLabels() const; virtual void setDrawLabels(const Bool & drawLabels); /** Accessor for textAnnotations */ virtual Description getTextAnnotations() const; virtual void setTextAnnotations(const Description & textAnnotations); /** Accessor for textPositions */ virtual Description getTextPositions() const; virtual void setTextPositions(const Description & textPositions); /** Bounding box accessor */ virtual BoundingBox getBoundingBox() const; /** R command generating method, for plotting through R */ virtual String draw() const; /** Clean all the temporary data created by draw() method */ virtual void clean() const; /** Clone method */ virtual DrawableImplementation * clone() const; /** Give the colors name */ static Description GetValidColors(); /** Give the line style names */ static Description GetValidLineStyles(); /** Give the fill style names */ static Description GetValidFillStyles(); /** Give the point style names */ static Description GetValidPointStyles(); /** Convert a color name to a valid hexadecimal code */ static String ConvertFromName(const String & name); /** Convert an hexadecimal code into an RGB triplet */ static Indices ConvertToRGB(const String & key); /** Convert an hexadecimal code into an RGBA quadruplet */ static Indices ConvertToRGBA(const String & key); /** Convert an RGB triplet to a valid hexadecimal code */ static String ConvertFromRGB(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue); /** Convert an RGBA quadruplet to a valid hexadecimal code */ static String ConvertFromRGBA(const UnsignedInteger red, const UnsignedInteger green, const UnsignedInteger blue, const UnsignedInteger alpha); /** Convert an RGB triplet to a valid hexadecimal code */ static String ConvertFromRGB(const Scalar red, const Scalar green, const Scalar blue); /** Convert an RGBA quadruplet to a valid hexadecimal code */ static String ConvertFromRGBA(const Scalar red, const Scalar green, const Scalar blue, const Scalar alpha); /** Convert an HSV triplet into an RGB triplet */ static Point ConvertFromHSVIntoRGB(const Scalar hue, const Scalar saturation, const Scalar value); /** Convert an HSV triplet to a valid hexadecimal code */ static String ConvertFromHSV(const Scalar hue, const Scalar saturation, const Scalar value); /** Convert an HSVA quadruplet to a valid hexadecimal code */ static String ConvertFromHSVA(const Scalar hue, const Scalar saturation, const Scalar value, const Scalar alpha); /** Build default palette */ static Description BuildDefaultPalette(const UnsignedInteger size); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: DrawableImplementation() : PersistentObject(), legend_(""), data_(), color_(ResourceMap::Get("Drawable-DefaultColor")), fillStyle_(ResourceMap::Get("Drawable-DefaultFillStyle")), lineStyle_(ResourceMap::Get("Drawable-DefaultLineStyle")), pointStyle_(ResourceMap::Get("Drawable-DefaultPointStyle")), lineWidth_(ResourceMap::GetAsUnsignedInteger("Drawable-DefaultLineWidth")), dataFileName_("") {}; friend class Factory; static Bool IsFirstInitialization; /** Check validity of color */ static Bool ScanColorCode(const String & key, UnsignedInteger & code); static Bool IsValidColorCode(const String & key); static Bool IsValidColorName(const String & key); static Bool IsValidColor(const String & key); /** Check validity of line style */ static Bool IsValidLineStyle(const String & key); /** Check validity of point style */ static Bool IsValidPointStyle(const String & key); /** Check validity of fill style */ static Bool IsValidFillStyle(const String & key); /** Check validity of pattern parameter */ static Bool IsValidPattern(const String & pattern); /** A map matching keys with R codes for point symbols */ static std::map SymbolCodes; /** A map matching keys with HTML definition for R colors */ static std::map ColorCodes; /** Valid line styles */ static Description ValidLineStyles; /** Valid fill styles */ static Description ValidFillStyles; /** Bounding box size */ static const UnsignedInteger BoundingBoxSize; /** Data accessor */ virtual void setData(const Sample & data); virtual void setData(const Point & data); /** Check data */ virtual void checkData(const Sample & data) const; virtual void checkData(const Point & data) const; /** The legend of the drawable, to be displayed in the legend of the graph */ String legend_; /** The data to be plotted */ Sample data_; /** Color of the curve */ String color_; /** Fill style */ String fillStyle_; /** Line style of the curve */ String lineStyle_; /** Line style of the curve */ String pointStyle_; /** Line width of the curve */ UnsignedInteger lineWidth_; /** Initialize Valid parameter list */ static void InitializeValidParameterList(); /** Temporary file name for the exchange with R */ mutable String dataFileName_; }; /* class DrawableImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DRAWABLEIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Graph.hxx000066400000000000000000000134311307543307100225240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Graph implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GRAPH_HXX #define OPENTURNS_GRAPH_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/GraphImplementation.hxx" #include "openturns/DrawableImplementation.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Graph * * Graph implements graphic devices for plotting through R, * and manages drawables to be plotted on the same window */ class OT_API Graph : public TypedInterfaceObject { CLASSNAME; public: typedef Collection GraphCollection; typedef GraphImplementation::BoundingBox BoundingBox; typedef GraphImplementation::DrawableCollection DrawableCollection; typedef GraphImplementation::Format Format; typedef GraphImplementation::LogScale LogScale; /** Default constructor */ explicit Graph(const String & title = ""); /** Constructor from implementation */ Graph(const GraphImplementation & implementation); /** Constructor with parameters */ Graph(const String & title, const String & xTitle, const String & yTitle, const Bool showAxes, const String & legendPosition = "", const Scalar legendFontSize = ResourceMap::GetAsScalar("Graph-DefaultLegendFontSize"), const LogScale logScale = GraphImplementation::NONE); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Adds a drawable instance to the collection of drawables contained in Graph */ void add(const Drawable & aDrawable); /** Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void add(const DrawableCollection & drawableCollection); /** Adds all the drawables in the GraphImplementation to the collection of drawables contained in GraphImplementation */ void add(const Graph & graph); /** Erase a drawable instance from the collection of drawables contained in GraphImplementation */ void erase(const UnsignedInteger i); /** Drawables accessor */ DrawableCollection getDrawables() const; void setDrawables(const DrawableCollection & drawableCollection); /** Individual drawable accessor */ Drawable getDrawable(const UnsignedInteger index) const; void setDrawable(const Drawable & drawable, const UnsignedInteger index); /** Global color accessor */ Description getColors() const; void setColors(const Description & colors); void setDefaultColors(); /** Global legend accessor */ Description getLegends() const; void setLegends(const Description & legends); /** Hide or show x and y axes */ void setAxes(const Bool showAxes); /** Accessor for showAxes_ */ Bool getAxes() const; /** Set log scale for x, y both or none axes */ void setLogScale(const LogScale logScale); /** Accessor for logScale_ */ LogScale getLogScale() const; /** Hide or show grid */ void setGrid(const Bool showGrid); /** Accessor for showGrid_ */ Bool getGrid() const; /** Grid color accessors */ void setGridColor(const String & color); String getGridColor() const; /** Accesor for xTitle */ String getXTitle() const; /** Accessor for xTitle */ void setXTitle(const String & title); /** Accessor for yTitle */ String getYTitle() const; /** Accessor for yTitle */ void setYTitle(const String & title); /** Accesor for title */ String getTitle() const; /** Accesor for title */ void setTitle(const String & title); /** The method that generates the graphic files */ void draw(const String & file, const Scalar width = ResourceMap::GetAsUnsignedInteger("Graph-DefaultWidth"), const Scalar height = ResourceMap::GetAsUnsignedInteger("Graph-DefaultHeight"), SignedInteger format = GraphImplementation::ALL); /** Get the R command corresponding to the graph */ String getRCommand() const; /** Clean temporary files */ void clean(); /** Get the bounding box of the whole plot */ BoundingBox getBoundingBox() const; /** Set the bounding box of the whole plot */ void setBoundingBox(const BoundingBox & boundingBox); void setBoundingBox(const Interval & boundingBox); /** Automatic bounding box accessor */ Bool getAutomaticBoundingBox() const; void setAutomaticBoundingBox(const Bool automaticBoundingBox); /** Get the legend position */ String getLegendPosition() const; /** Set the legend position */ void setLegendPosition(const String & position); /** Get the legend font size */ Scalar getLegendFontSize() const; /** Set the legend font size */ void setLegendFontSize(const Scalar legendFontSize); /** Check for legend position validity */ static Bool IsValidLegendPosition(const String & position); /** Gives all the valid legend positions */ static Description GetValidLegendPositions(); }; /* class Graph */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GRAPH_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/GraphImplementation.hxx000066400000000000000000000170161307543307100254350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief GraphImplementation implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GRAPHIMPLEMENTATION_HXX #define OPENTURNS_GRAPHIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Drawable.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GraphImplementation * * GraphImplementation implements graphic devices for plotting through R, * and manages drawables to be plotted on the same window */ class OT_API GraphImplementation : public PersistentObject { CLASSNAME; public: typedef Point BoundingBox; typedef Collection DrawableCollection; typedef PersistentCollection DrawablePersistentCollection; enum Format { PNG = 1, EPS = 2, FIG = 4, PDF = 8, ALL = 255 }; enum LogScale { NONE = 0, LOGX, LOGY, LOGXY }; /** Default constructor */ explicit GraphImplementation(const String & title = ""); /** Constructor with parameters */ GraphImplementation(const String & title, const String & xTitle, const String & yTitle, const Bool showAxes, const String & legendPosition = "", const Scalar legendFontSize = ResourceMap::GetAsScalar("Graph-DefaultLegendFontSize"), const LogScale logScale = NONE); /** Virtual constructor */ virtual GraphImplementation * clone() const; /** String converter */ String __repr__() const; /** Adds a drawable instance to the collection of drawables contained in GraphImplementation */ void add(const Drawable & aDrawable); /** Adds a collection of drawable instances to the collection of drawables contained in GraphImplementation */ void add(const DrawableCollection & drawableCollection); /** Adds all the drawables in the GraphImplementation to the collection of drawables contained in GraphImplementation */ void add(const GraphImplementation & graphImplementation); /** Erase a drawable instance from the collection of drawables contained in GraphImplementation */ void erase(const UnsignedInteger i); /** Drawables accessor */ DrawableCollection getDrawables() const; void setDrawables(const DrawableCollection & drawableCollection); /** Individual drawable accessor */ Drawable getDrawable(const UnsignedInteger index) const; void setDrawable(const Drawable & drawable, const UnsignedInteger index); /** Global color accessor */ Description getColors() const; void setColors(const Description & colors); void setDefaultColors(); /** Global legend accessor */ Description getLegends() const; void setLegends(const Description & legends); /** Hide or show x and y axes */ void setAxes(const Bool showAxes); /** Accessor for showAxes_ */ Bool getAxes() const; /** Set log scale for x, y both or none axes */ void setLogScale(const LogScale logScale); /** Accessor for logScale_ */ LogScale getLogScale() const; /** Hide or show grid */ void setGrid(const Bool showGrid); /** Accessor for showGrid_ */ Bool getGrid() const; /** Grid color accessor */ void setGridColor(const String & color); String getGridColor() const; /** Accesor for xTitle */ String getXTitle() const; /** Accessor for xTitle */ void setXTitle(const String & title); /** Accessor for yTitle */ String getYTitle() const; /** Accessor for yTitle */ void setYTitle(const String & title); /** Accesor for title */ String getTitle() const; /** Accesor for title */ void setTitle(const String & title); /** The method that generates the graphic files */ void draw(const String & file, const Scalar width = ResourceMap::GetAsUnsignedInteger("Graph-DefaultWidth"), const Scalar height = ResourceMap::GetAsUnsignedInteger("Graph-DefaultHeight"), SignedInteger format = ALL); /** Get the R command corresponding to the graph */ String getRCommand() const; /** Clean temporary files */ void clean(); /** Get the bounding box of the whole plot */ BoundingBox getBoundingBox() const; /** Set the bounding box of the whole plot */ void setBoundingBox(const BoundingBox & boundingBox); /** Set the bounding box of the whole plot */ void setBoundingBox(const Interval & boundingBox); /** Automatic bounding box accessor */ Bool getAutomaticBoundingBox() const; void setAutomaticBoundingBox(const Bool automaticBoundingBox); /** Get the legend position */ String getLegendPosition() const; /** Set the legend position */ void setLegendPosition(const String & position); /** Get the legend font size */ Scalar getLegendFontSize() const; /** Set the legend font size */ void setLegendFontSize(const Scalar legendFontSize); /** Check for legend position validity */ static Bool IsValidLegendPosition(const String & position); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Gives all the valid legend positions */ static Description GetValidLegendPositions(); private: static Description ValidLegendPositions; static Bool IsFirstInitialization; /** Initialize valid legend positions **/ static void InitializeValidLegendPositions(); /** Initialize format enum/extension map */ static std::map GetExtensionMap(); /** Compute the best bounding box to enclose all the drawables */ void computeBoundingBox() const; /** Make R legend command */ String makeRLegendCommand() const; /** Make R header command */ String makeRHeaderCommand() const; /** Make R core command */ String makeRCoreCommand() const; /** GraphImplementationic main title */ String title_; /** Legend position */ String legendPosition_; /** Legend font size */ Scalar legendFontSize_; /** x axis title */ String xTitle_; /** y axis title */ String yTitle_; /** if TRUE, displays the axes on the graphic plot. if FALSE, hides the axes */ Bool showAxes_; /** Set the log scale for one, both or non of the axes */ LogScale logScale_; /** if TRUE, displays a grid on the graphic plot. if FALSE, hides the grid */ Bool showGrid_; /** Grid color */ String gridColor_; /** Is the bounding box automatically computed. */ Bool automaticBoundingBox_; /** Current bounding box */ /* The format is: * bb[0] = xmin * bb[1] = xmax * bb[2] = ymin * bb[3] = ymax */ mutable BoundingBox boundingBox_; /** The drawables to be plotted */ DrawablePersistentCollection drawablesCollection_; }; /* class GraphImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GRAPHIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/OTGraph.hxx000066400000000000000000000027061307543307100227720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Graph * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTGRAPH_HXX #define OPENTURNS_OTGRAPH_HXX #include "openturns/BarPlot.hxx" #include "openturns/Cloud.hxx" #include "openturns/Contour.hxx" #include "openturns/Curve.hxx" #include "openturns/Drawable.hxx" #include "openturns/DrawableImplementation.hxx" #include "openturns/Graph.hxx" #include "openturns/GraphImplementation.hxx" #include "openturns/Pairs.hxx" #include "openturns/Pie.hxx" #include "openturns/Polygon.hxx" #include "openturns/PolygonArray.hxx" #include "openturns/Rfunctions.hxx" #include "openturns/Staircase.hxx" #include "openturns/Text.hxx" #endif /* OPENTURNS_OTGRAPH_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Pairs.hxx000066400000000000000000000050371307543307100225440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Pairs class for piechart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PAIRS_HXX #define OPENTURNS_PAIRS_HXX #include "openturns/OTprivate.hxx" #include "openturns/Drawable.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Pairs * * The class Pairs * Instance of Drawable */ class OT_API Pairs : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ explicit Pairs(const Sample & data, const String & title = ""); Pairs(const Sample & data, const String & title, const Description & labels, const String & color, const String & PointStyle); /** String converter */ String __repr__() const; /** Accessor for first coordinate */ Sample getData() const; /** Accessor for labels */ Description getLabels() const; void setLabels(const Description & labels); /** Accessor for title */ String getTitle() const; void setTitle(const String & title); /** Draw method */ String draw() const; /** Clone method */ virtual Pairs * clone() const; /** Build default labels */ void buildDefaultLabels(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); /** Clean all the temporary data created by draw() method */ virtual void clean() const; protected: /** Check for data validity */ virtual void checkData(const Sample & data) const; private: Pairs() {}; friend class Factory; /** Labels of the level sets. If none is given, it defaults to the level values. */ Description labels_; /** Title of the main */ String title_; }; /* class Pairs */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PAIRS_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Pie.hxx000066400000000000000000000057231307543307100222050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Pie class for piechart plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PIE_HXX #define OPENTURNS_PIE_HXX #include "openturns/DrawableImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Pie * * The class describing a pie chart * Instance of Drawable */ class OT_API Pie : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ explicit Pie(const Point & data); /** Constructor with parameters */ Pie(const Point & data, const Description & labels); /** Constructor with parameters */ Pie(const Point & data, const Description & labels, const Point & center, const Scalar & radius, const Description & palette); /** String converter */ String __repr__() const; /** Accessor for center */ Point getCenter() const; void setCenter(const Point & center); /** Accessor for radius */ Scalar getRadius() const; void setRadius(const Scalar radius); /** Accessor for labels */ Description getLabels() const; void setLabels(const Description & labels); /** Accessor for color palette */ Description getPalette() const; void setPalette(const Description & palette); /** Accessor for boundingbox */ BoundingBox getBoundingBox() const; /** Draw method */ String draw() const; /** Clone method */ virtual Pie * clone() const; /** Build default palette */ void buildDefaultPalette(); /** Build default labels */ void buildDefaultLabels(); /** Check for color palette validity */ static Bool IsValidColorPalette(const Description & palette); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check for data validity */ virtual void checkData(const Point & data) const; private: Pie() {}; friend class Factory; /** Collection of Strings representing the color palettes */ Description palette_; /** Radius of the Pie */ Scalar radius_; /** Centre of the Pie */ Point center_; /** Labels of the pie sectors */ Description labels_; }; /* class Pie */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PIE_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Polygon.hxx000066400000000000000000000050031307543307100231060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Polygon class for polygon plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POLYGON_HXX #define OPENTURNS_POLYGON_HXX #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Polygon * * The class describing a polygon plot * Instance of Drawable */ class OT_API Polygon : public DrawableImplementation { CLASSNAME; public: /** Default constructor */ explicit Polygon(const String & legend = ""); /** Default constructor */ explicit Polygon(const Sample & data, const String & legend = ""); /** Contructor from 2 data sets */ Polygon(const Sample & dataX, const Sample & dataY, const String & legend = ""); /** Contructor from 2 data sets */ Polygon(const Point & dataX, const Point & dataY, const String & legend = ""); /** Constructor with parameters */ Polygon(const Sample & data, const String & color, const String & edgeColor, const String & legend = ""); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual Polygon * clone() const; /** Color of the edge */ void setEdgeColor(const String & edgeColor); String getEdgeColor() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: /** Color of the edge of the polygon */ String edgeColor_; }; /* class Polygon */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POLYGON_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/PolygonArray.hxx000066400000000000000000000063451307543307100241170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PolygonArray class for array of polygons plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POLYGONARRAY_HXX #define OPENTURNS_POLYGONARRAY_HXX #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Polygon.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PolygonArray * * The class describing a polygon array plot * Instance of Drawable */ class OT_API PolygonArray : public DrawableImplementation { CLASSNAME; public: typedef Collection< Polygon > PolygonCollection; /** Default constructor */ explicit PolygonArray(const String & legend = ""); /** Constructor based on a collection of polygons */ explicit PolygonArray(const PolygonCollection & polygons, const String & legend = ""); /** Construction based on a set of vertices */ PolygonArray(const Sample & coordinates, const UnsignedInteger verticesNumber, const Description & palette, const String & legend = ""); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual PolygonArray * clone() const; /** Palette of the edge/face of the polygons */ void setPalette(const Description & palette); Description getPalette() const; /** Coordinates and vertices number of the vertices of the polygons */ void setCoordinatesAndVerticesNumber(const Sample & coordinates, const UnsignedInteger verticesNumber); /** Coordinates accessor */ Sample getCoordinates() const; /** Vertices number accessor */ UnsignedInteger getVerticesNumber() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); /** Remove all the temporary files */ void clean() const; protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: /** Number of vertices per polygon */ UnsignedInteger verticesNumber_; /** List of palette for strip of polygons */ Description palette_; /** Name of the file to store the palette of the polygons */ mutable String paletteFileName_; /** Name of the file to store the coordinates of the polygon */ mutable String coordinatesFileName_; }; /* class Polygon */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POLYGON_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Rfunctions.hxx000066400000000000000000000253211307543307100236160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Graph implements graphic devices for plotting through R * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RFUNCTIONS_HXX #define OPENTURNS_RFUNCTIONS_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS static const String R_LEGEND = "legend <-function(x, y = NULL, legend, fill=NULL, col = par(\"col\"), lty, lwd, pch, angle = 45, density = NULL, bty = \"o\", bg = par(\"bg\"), pt.bg = NA, cex = 2, pt.cex = cex, pt.lwd = lwd, xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1, adj = c(0, 0.5), text.width = NULL, text.col = par(\"col\"), merge = do.lines && has.pch, trace = FALSE, plot = TRUE, ncol = 1, horiz = FALSE, title = NULL, inset = 0) \n { \n if(missing(legend) && !missing(y) && (is.character(y) || is.expression(y))) \n { \n legend <- y \n y <- NULL \n } \n mfill <- !missing(fill) || !missing(density) \n \n if(length(title) > 1) stop(\"invalid title\") \n n.leg <- if(is.call(legend)) 1 else length(legend) \n if(n.leg == 0) stop(\"legend is of length 0\") \n auto <- \n if (is.character(x)) \n match.arg(x, c(\"bottomright\", \"bottom\", \"bottomleft\", \"left\", \"topleft\", \"top\", \"topright\", \"right\", \"center\")) \n else NA \n if (is.na(auto)) \n { \n xy <- xy.coords(x, y); x <- xy$x; y <- xy$y \n nx <- length(x) \n if (nx < 1 || nx > 2) stop(\"invalid coordinate lengths\") \n } \n else nx <- 0 \n \n xlog <- par(\"xlog\") \n ylog <- par(\"ylog\") \n \n rect2 <- function(left, top, dx, dy, density = NULL, angle, ...) \n { \n r <- left + dx; if(xlog) { left <- 10^left; r <- 10^r } \n b <- top - dy; if(ylog) { top <- 10^top; b <- 10^b } \n rect(left, top, r, b, angle = angle, density = density, ...) \n } \n \n segments2 <- function(x1, y1, dx, dy, ...) \n { \n x2 <- x1 + dx; if(xlog) { x1 <- 10^x1; x2 <- 10^x2 } \n y2 <- y1 + dy; if(ylog) { y1 <- 10^y1; y2 <- 10^y2 } \n segments(x1, y1, x2, y2, ...) \n } \n \n points2 <- function(x, y, ...) \n { \n if(xlog) x <- 10^x \n if(ylog) y <- 10^y \n points(x, y, ...) \n } \n \n text2 <- function(x, y, ...) \n { \n if(xlog) x <- 10^x \n if(ylog) y <- 10^y \n text(x, y, ...) \n } \n if(trace) \n \n catn <- function(...) \n { \n do.call(\"cat\", c(lapply(list(...),formatC), list(\"\"))) \n } \n \n cin <- par(\"cin\") \n Cex <- cex * par(\"cex\") \n \n if(is.null(text.width)) \n text.width <- max(strwidth(legend, units=\"user\", cex=cex)) \n else if(!is.numeric(text.width) || text.width < 0) \n stop(\"text.width must be numeric, >= 0\") \n \n xc <- Cex * xinch(cin[1], warn.log=FALSE) \n yc <- Cex * yinch(cin[2], warn.log=FALSE) \n \n xchar <- xc \n xextra <- 0 \n yextra <- yc * (y.intersp - 1) \n ymax <- max(yc, strheight(legend, units=\"user\", cex=cex)) \n ychar <- yextra + ymax \n if(trace) catn(\" xchar=\", xchar, \"; (yextra,ychar)=\", c(yextra,ychar)) \n \n if(mfill) \n { \n xbox <- xc * 0.8 \n ybox <- yc * 0.5 \n dx.fill <- xbox \n } \n do.lines <- (!missing(lty) && (is.character(lty) || any(lty > 0))) || !missing(lwd) \n if(is.na(do.lines)) do.lines <- FALSE \n \n n.legpercol <- \n if(horiz) \n { \n if(ncol != 1) warning(\"horizontal specification overrides: Number of columns := \", n.leg) \n ncol <- n.leg \n 1 \n } else ceiling(n.leg / ncol) \n \n if(has.pch <- !missing(pch) && length(pch) > 0) \n { \n if(is.character(pch) && !is.na(pch[1]) && nchar(pch[1], type=\"c\") > 1) \n { \n if(length(pch) > 1) warning(\"not using pch[2..] since pch[1] has multiple chars\") \n np <- nchar(pch[1], type=\"c\") \n pch <- substr(rep.int(pch[1], np), 1:np, 1:np) \n } \n if(!merge) dx.pch <- x.intersp/2 * xchar \n } \n x.off <- if(merge) -0.7 else 0 \n \n if (is.na(auto)) \n { \n if (xlog) x <- log10(x) \n if (ylog) y <- log10(y) \n } \n if(nx == 2) \n { \n x <- sort(x) \n y <- sort(y) \n left <- x[1] \n top <- y[2] \n w <- diff(x) \n h <- diff(y) \n w0 <- w/ncol \n \n x <- mean(x) \n y <- mean(y) \n if(missing(xjust)) xjust <- 0.5 \n if(missing(yjust)) yjust <- 0.5 \n } \n else \n { \n h <- (n.legpercol + !is.null(title)) * ychar + yc \n w0 <- text.width + (x.intersp + 1) * xchar \n if(mfill) w0 <- w0 + dx.fill \n if(has.pch && !merge) w0 <- w0 + dx.pch \n if(do.lines) w0 <- w0 + (2+x.off) * xchar \n w <- ncol*w0 + .5* xchar \n if (!is.null(title) && (tw <- strwidth(title, units=\"user\", cex=cex) + 0.5*xchar) > w) \n { \n xextra <- (tw - w)/2 \n w <- tw \n } \n \n if (is.na(auto)) \n { \n left <- x - xjust * w \n top <- y + (1 - yjust) * h \n } \n else \n { \n usr <- par(\"usr\") \n inset <- rep(inset, length.out = 2) \n insetx <- inset[1]*(usr[2] - usr[1]) \n left <- switch(auto, \"bottomright\"=, \"topright\"=, \"right\" = usr[2] - w - insetx, \"bottomleft\"=, \"left\"=, \"topleft\"= usr[1] + insetx, \"bottom\"=, \"top\"=, \"center\"= (usr[1] + usr[2] - w)/2) \n insety <- inset[2]*(usr[4] - usr[3]) \n top <- switch(auto, \"bottomright\"=, \"bottom\"=, \"bottomleft\"= usr[3] + h + insety, \"topleft\"=, \"top\"=, \"topright\" = usr[4] - insety, \"left\"=, \"right\"=, \"center\" = (usr[3] + usr[4] + h)/2) \n } \n } \n \n if (plot && bty != \"n\") \n { \n if(trace) catn(\" rect2(\",left,\",\",top,\", w=\",w,\", h=\",h,\", ...)\",sep=\"\") \n rect2(left, top, dx = w, dy = h, col = bg, density = NULL) \n } \n \n xt <- left + xchar + xextra + (w0 * rep.int(0:(ncol-1), rep.int(n.legpercol,ncol)))[1:n.leg] \n yt <- top - 0.5 * yextra - ymax - (rep.int(1:n.legpercol,ncol)[1:n.leg] - 1 + !is.null(title)) * ychar \n \n if(plot && (has.pch || do.lines || mfill)) col <- rep(col, length.out = n.leg) \n \n if (mfill) \n { \n if(plot) \n { \n fill <- rep(fill, length.out = n.leg) \n for (boxcount in 1:length(xt)) \n { \n if (!is.na(fill[boxcount])) \n { \n dens <- NA \n if(fill[boxcount] == \"solid\") dens <- NA \n if(fill[boxcount] == \"shaded\") dens <- density \n rect2(.9*xbox + xt[boxcount], yt[boxcount] + 1.2*ybox/2, dx = xbox, dy = 1.2*ybox/2, col = col[boxcount],density=dens,angle=angle,border=col[boxcount]) \n } \n } \n } \n xt <- xt + dx.fill \n } \n seg.len <- 2 \n if(missing(lwd)) lwd <- par(\"lwd\") \n if (do.lines) \n { \n if(missing(lty)) lty <- 1 \n lty <- rep(lty, length.out = n.leg) \n lwd <- rep(lwd, length.out = n.leg) \n ok.l <- !is.na(lty) & (is.character(lty) | lty > 0) \n if(trace) catn(\" segments2(\",xt[ok.l] + x.off*xchar, \",\", yt[ok.l], \", dx=\", seg.len*xchar, \", dy=0, ...)\") \n if(plot) segments2(xt[ok.l] + x.off*xchar, yt[ok.l], dx= seg.len*xchar, dy=0, lty = lty[ok.l], lwd = lwd[ok.l], col = col[ok.l]) \n xt <- xt + (seg.len+x.off) * xchar \n } \n if (has.pch) \n { \n pch <- rep(pch, length.out = n.leg) \n pt.bg <- rep(pt.bg, length.out = n.leg) \n pt.cex<- rep(pt.cex, length.out = n.leg) \n pt.lwd<- rep(pt.lwd, length.out = n.leg) \n ok <- !is.na(pch) & (is.character(pch) | pch >= 0) \n x1 <- (if(merge) xt-(seg.len/2)*xchar else xt)[ok] \n y1 <- yt[ok] \n if(trace) catn(\" points2(\", x1,\",\", y1,\", pch=\", pch[ok],\", ...)\") \n if(plot) points2(x1, y1, pch = pch[ok], col = col[ok], cex = pt.cex[ok], bg = pt.bg[ok], lwd = pt.lwd[ok]) \n if (!merge) xt <- xt + dx.pch \n } \n \n xt <- xt + x.intersp * xchar \n if(plot) \n { \n if (!is.null(title)) text2(left + w/2, top - ymax, labels = title, adj = c(0.5, 0), cex = cex, col = text.col) \n text2(xt, yt, labels = legend, adj = adj, cex = cex, col = text.col) \n } \n invisible(list(rect = list(w = w, h = h, left = left, top = top), text = list(x = xt, y = yt))) \n }"; static const String R_PIE = "pie <- function (x,center=c(0,0), labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE, init.angle = if (clockwise) 90 else 0, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) \n { \n if (!is.numeric(x) || any(is.na(x) | x < 0)) stop(\"'x' values must be positive.\") \n if (is.null(labels)) labels <- as.character(1:length(x)) \n x <- c(0, cumsum(x)/sum(x)) \n dx <- diff(x) \n nx <- length(dx) \n \n pin <- par(\"pin\") \n usr <- par(\"usr\") \n \n rhoy <- (usr[4]-usr[3])/(usr[2]-usr[1])*pin[1]/pin[2] \n rhox <- 1 \n if(rhoy>1) \n { \n rhox <- 1/rhoy \n rhoy <- 1 \n } \n \n if (is.null(col)) \n col <- if (is.null(density)) c(\"white\", \"lightblue\", \"mistyrose\", \"lightcyan\", \"lavender\", \"cornsilk\") \n else par(\"fg\") \n col <- rep(col, length.out = nx) \n border <- rep(border, length.out = nx) \n lty <- rep(lty, length.out = nx) \n angle <- rep(angle, length.out = nx) \n density <- rep(density, length.out = nx) \n twopi <- if (clockwise) -2 * pi else 2 * pi\n t2xy <- function(t) \n { \n t2p <- twopi * t + init.angle * pi/180 \n list(x = radius * cos(t2p), y = radius * sin(t2p)) \n } \n \n for (i in 1:nx) \n { \n n <- max(2, floor(edges * dx[i])) \n P <- t2xy(seq(x[i], x[i + 1], length = n)) \n P$y <- P$y*rhoy \n P$x <- P$x*rhox \n polygon(c(P$x, 0)+center[1], c(P$y, 0)+center[2], density = density[i], angle = angle[i],border = border[i], col = col[i], lty = lty[i]) \n P <- t2xy(mean(x[i + 0:1])) \n P$y <- P$y*rhoy \n P$x <- P$x*rhox \n if (!is.na(lab <- labels[i]) && lab != \"\") \n { \n lines(c(1,1.05)*P$x+center[1], c(1,1.05)*P$y+center[2]) \n text(1.1 * P$x + center[1], 1.1 * P$y + center[2], lab, cex=2, xpd = TRUE, adj = ifelse(P$x <0, 1, 0), ...) \n } \n } \n invisible(NULL) \n }"; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RFUNCTIONS_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Staircase.hxx000066400000000000000000000050301307543307100233750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Staircase class for handling staircase plots * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STAIRCASE_HXX #define OPENTURNS_STAIRCASE_HXX #include "openturns/DrawableImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Staircase * * The class describing a staircase plot * Instance of Drawable */ class OT_API Staircase : public DrawableImplementation { CLASSNAME; public: /** Default onstructor */ Staircase(); /** Constructor with parameters */ explicit Staircase(const Sample & data, const String & legend = ""); /** Constructor with parameters */ Staircase(const Sample & data, const String & color, const String & lineStyle, const UnsignedInteger lineWidth, const String & pattern, const String & legend = ""); /** Constructor with old parameters */ Staircase(const Sample & data, const String & color, const String & lineStyle, const String & pattern, const String & legend = ""); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual Staircase * clone() const; /** Accessor for pattern */ String getPattern() const; void setPattern(const String style); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check fo data validity */ virtual void checkData(const Sample & data) const; private: /** Pattern for staircase plotting */ String pattern_; // should be either "S" or "s" }; /* class Staircase */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STAIRCASE_HXX */ openturns-1.9/lib/src/Base/Graph/openturns/Text.hxx000066400000000000000000000064541307543307100224160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Text class to add text on graphs * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TEXT_HXX #define OPENTURNS_TEXT_HXX #include "openturns/OTprivate.hxx" #include "openturns/DrawableImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/Description.hxx" #include BEGIN_NAMESPACE_OPENTURNS /** * @class Text * * This class adds text on a graph * Instance of Drawable */ class OT_API Text : public DrawableImplementation { CLASSNAME; public: typedef Collection ComplexCollection; /** Default constructor */ Text(const Sample & data, const Description & texts, const String & textPosition = "top", const String & legend = ""); /** Constructor from complex numbers */ Text(const ComplexCollection & data, const Description & texts, const String & textPosition = "top", const String & legend = ""); /** Contructor from 2 data sets */ Text(const Sample & dataX, const Sample & dataY, const Description & texts, const String & textPosition = "top", const String & legend = ""); /** Contructor from 2 data sets */ Text(const Point & dataX, const Point & dataY, const Description & texts, const String & textPosition = "top", const String & legend = ""); static Bool IsValidTextPosition(String textPosition); /** String converter */ String __repr__() const; /** Draw method */ String draw() const; /** Clone method */ virtual Text * clone() const; /** Accessors to text */ Description getTextAnnotations() const; void setTextAnnotations(const Description & textAnnotations); /** Accessors to text position */ Description getTextPositions() const; void setTextPositions(const Description & textPositions); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() stores the object through the StorageManager */ void load(Advocate & adv); protected: /** Check for data validity */ virtual void checkData(const Sample & data) const; /** Labels */ Description textAnnotations_; /** Text position */ Description textPositions_; private: Text() {}; friend class Factory; /** A map matching text position with R codes */ static std::map Position; /** Initialize positon map */ static void InitializePositionMap(); static Bool IsTextFirstInitialization; }; /* class Text */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TEXT_HXX */ openturns-1.9/lib/src/Base/MetaModel/000077500000000000000000000000001307543307100175015ustar00rootroot00000000000000openturns-1.9/lib/src/Base/MetaModel/CMakeLists.txt000066400000000000000000000010331307543307100222360ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (LinearTaylor.cxx) ot_add_source_file (QuadraticTaylor.cxx) ot_add_source_file (LinearLeastSquares.cxx) ot_add_source_file (QuadraticLeastSquares.cxx) ot_install_header_file (OTBaseMetaModel.hxx) ot_install_header_file (LinearTaylor.hxx) ot_install_header_file (QuadraticTaylor.hxx) ot_install_header_file (LinearLeastSquares.hxx) ot_install_header_file (QuadraticLeastSquares.hxx) openturns-1.9/lib/src/Base/MetaModel/LinearLeastSquares.cxx000066400000000000000000000156751307543307100240120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief First order polynomial response surface by least square * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearLeastSquares.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearLeastSquares); /* Constructor with parameters */ LinearLeastSquares::LinearLeastSquares(const Sample & dataIn, const Function & inputFunction) : PersistentObject(), dataIn_(dataIn), dataOut_(0, inputFunction.getOutputDimension()), inputFunction_(inputFunction), constant_(inputFunction.getOutputDimension()), linear_(inputFunction.getInputDimension(), inputFunction.getOutputDimension()) { if (!inputFunction.getEvaluation()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Error: the given function must have an actual implementation"; if (inputFunction.getInputDimension() != dataIn.getDimension()) throw InvalidArgumentException(HERE) << "Error: the input data dimension and the input dimension of the function must be the same, here input dimension=" << dataIn.getDimension() << " and input dimension of the function=" << inputFunction.getInputDimension(); } /* Constructor with parameters */ LinearLeastSquares::LinearLeastSquares(const Sample & dataIn, const Sample & dataOut) : PersistentObject(), dataIn_(dataIn), dataOut_(0, dataOut.getDimension()), inputFunction_(), constant_(dataOut.getDimension()), linear_(dataIn.getDimension(), dataOut.getDimension()) { setDataOut(dataOut); } /* Virtual constructor */ LinearLeastSquares * LinearLeastSquares::clone() const { return new LinearLeastSquares(*this); } /* String converter */ String LinearLeastSquares::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " dataIn=" << dataIn_ << " dataOut=" << dataOut_ << " function=" << inputFunction_ << " responseSurface=" << responseSurface_ << " constant=" << constant_ << " linear=" << linear_; return oss; } /* Response surface computation */ void LinearLeastSquares::run() { if (dataOut_.getSize() == 0) { /* Compute the given function over the given sample */ dataOut_ = inputFunction_(dataIn_); } const UnsignedInteger inputDimension = dataIn_.getDimension(); const UnsignedInteger outputDimension = dataOut_.getDimension(); const UnsignedInteger dataInSize = dataIn_.getSize(); const UnsignedInteger coefficientsDimension = 1 + inputDimension; /* Matrix of the least-square problem */ Matrix componentMatrix(dataInSize, coefficientsDimension); /* Matrix for the several right-hand sides */ Matrix rightHandSides(dataInSize, outputDimension); /* For each sample of the input data... */ for(UnsignedInteger sampleIndex = 0; sampleIndex < dataInSize; ++sampleIndex) { /* build the componentMatrix */ /* get the current sample x */ const Point currentSample(dataIn_[sampleIndex]); UnsignedInteger rowIndex = 0; /* First the constant term */ componentMatrix(sampleIndex, rowIndex) = 1.0; ++rowIndex; /* Then the linear term x' */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { componentMatrix(sampleIndex, rowIndex) = currentSample[componentIndex]; ++rowIndex; } // linear term /* build the right-hand side */ for(UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++outputIndex) { rightHandSides(sampleIndex, outputIndex) = dataOut_[sampleIndex][outputIndex]; } } // each sample // Now, solve simultaneously the least-squares solutions for all the outputs const Matrix coefficients(componentMatrix.solveLinearSystem(rightHandSides)); // Fill-in the elements of the meta-model for(UnsignedInteger outputComponent = 0; outputComponent < outputDimension; ++outputComponent) { /* First, the constant term */ UnsignedInteger coefficientsIndex = 0; constant_[outputComponent] = coefficients(coefficientsIndex, outputComponent); ++coefficientsIndex; /* Second, the linear term */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { linear_(componentIndex, outputComponent) = coefficients(coefficientsIndex, outputComponent); ++coefficientsIndex; } // linear term } // output components const Point center(inputDimension, 0.0); /* Build the several implementations and set them into the response surface */ responseSurface_.setEvaluation(new LinearEvaluation(center, constant_, linear_)); responseSurface_.setGradient(new ConstantGradient(linear_)); responseSurface_.setHessian(new ConstantHessian(SymmetricTensor(center.getDimension(), constant_.getDimension()))); } /* DataIn accessor */ Sample LinearLeastSquares::getDataIn() const { return dataIn_; } /* DataOut accessor */ Sample LinearLeastSquares::getDataOut() const { // If the response surface has been defined with an input function and the output data have not already been computed, compute them if (inputFunction_.getEvaluation()->isActualImplementation() && (dataOut_.getSize() == 0)) dataOut_ = inputFunction_(dataIn_); return dataOut_; } void LinearLeastSquares::setDataOut(const Sample & dataOut) { if (inputFunction_.getEvaluation()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Error: cannot set the output data in a response surface defined with a function, here function=" << inputFunction_; if (dataOut.getSize() != dataIn_.getSize()) throw InvalidArgumentException(HERE) << "Error: the output data must have the same size than the input data, here output size=" << dataOut.getSize() << " and input size=" << dataIn_.getSize(); dataOut_ = dataOut; } /* Constant accessor */ Point LinearLeastSquares::getConstant() const { return constant_; } /* Linear accessor */ Matrix LinearLeastSquares::getLinear() const { return linear_; } /* Function accessor */ Function LinearLeastSquares::getInputFunction() const { return inputFunction_; } /* Response surface accessor */ Function LinearLeastSquares::getResponseSurface() const { return responseSurface_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/MetaModel/LinearTaylor.cxx000066400000000000000000000056531307543307100226430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief First order polynomial response surface by Taylor expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearTaylor.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/ConstantHessian.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearTaylor); LinearTaylor::LinearTaylor() : PersistentObject() { // Nothing to do } /* Constructor with parameters */ LinearTaylor::LinearTaylor(const Point & center, const Function & inputFunction) : PersistentObject(), center_(center), inputFunction_(inputFunction) { // Nothing to do } /* Virtual constructor */ LinearTaylor * LinearTaylor::clone() const { return new LinearTaylor(*this); } /* String converter */ String LinearTaylor::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " center=" << center_ << " function=" << inputFunction_ << " responseSurface=" << responseSurface_ << " constant=" << constant_ << " linear=" << linear_; return oss; } /* Response surface computation */ void LinearTaylor::run() { /* Compute the three first terms of the Taylor expansion */ constant_ = inputFunction_(center_); linear_ = inputFunction_.gradient(center_); /* Build the several implementations and set it into the response surface */ responseSurface_.setEvaluation(new LinearEvaluation(center_, constant_, linear_)); responseSurface_.setGradient(new ConstantGradient(linear_)); responseSurface_.setHessian(new ConstantHessian(SymmetricTensor(center_.getDimension(), constant_.getDimension()))); responseSurface_.setDescription(inputFunction_.getDescription()); } /* Center accessor */ Point LinearTaylor::getCenter() const { return center_; } /* Constant accessor */ Point LinearTaylor::getConstant() const { return constant_; } /* Linear accessor */ Matrix LinearTaylor::getLinear() const { return linear_; } /* Function accessor */ Function LinearTaylor::getInputFunction() const { return inputFunction_; } /* Response surface accessor */ Function LinearTaylor::getResponseSurface() const { return responseSurface_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/MetaModel/QuadraticLeastSquares.cxx000066400000000000000000000205431307543307100245030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Second order polynomial response surface by least square * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuadraticLeastSquares.hxx" #include "openturns/QuadraticFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuadraticLeastSquares); /* Constructor with parameters */ QuadraticLeastSquares::QuadraticLeastSquares(const Sample & dataIn, const Function & inputFunction) : PersistentObject(), dataIn_(dataIn), dataOut_(Sample(0, inputFunction.getOutputDimension())), inputFunction_(inputFunction), constant_(Point(inputFunction_.getOutputDimension())), linear_(Matrix(inputFunction_.getInputDimension(), inputFunction_.getOutputDimension())), quadratic_(SymmetricTensor(inputFunction_.getInputDimension(), inputFunction_.getOutputDimension())) { if (!inputFunction_.getEvaluation()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Error: the given function must have an actual implementation"; if (inputFunction.getInputDimension() != dataIn.getDimension()) throw InvalidArgumentException(HERE) << "Error: the input data dimension and the input dimension of the function must be the same, here input dimension=" << dataIn.getDimension() << " and input dimension of the function=" << inputFunction.getInputDimension(); } /* Constructor with parameters */ QuadraticLeastSquares::QuadraticLeastSquares(const Sample & dataIn, const Sample & dataOut) : PersistentObject(), dataIn_(dataIn), dataOut_(Sample(0, dataOut.getDimension())), inputFunction_(Function()), constant_(Point(dataOut.getDimension())), linear_(Matrix(dataIn.getDimension(), dataOut.getDimension())), quadratic_(SymmetricTensor(dataIn.getDimension(), dataOut.getDimension())) { setDataOut(dataOut); } /* Virtual constructor */ QuadraticLeastSquares * QuadraticLeastSquares::clone() const { return new QuadraticLeastSquares(*this); } /* String converter */ String QuadraticLeastSquares::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName () << " dataIn=" << dataIn_ << " dataOut=" << dataOut_ << " function=" << inputFunction_ << " responseSurface=" << responseSurface_ << " constant=" << constant_ << " linear=" << linear_ << " quadratic=" << quadratic_; return oss; } /* Response surface computation */ void QuadraticLeastSquares::run() { if (dataOut_.getSize() == 0) { /* Compute the given function over the given sample */ dataOut_ = inputFunction_(dataIn_); } const UnsignedInteger inputDimension = dataIn_.getDimension(); const UnsignedInteger outputDimension = dataOut_.getDimension(); const UnsignedInteger dataInSize = dataIn_.getSize(); const UnsignedInteger coefficientsDimension = 1 + inputDimension + (inputDimension * (inputDimension + 1)) / 2; /* Matrix of the least-square problem */ Matrix componentMatrix(dataInSize, coefficientsDimension); /* Matrix for the several right-hand sides */ Matrix rightHandSides(dataInSize, outputDimension); /* For each sample of the input data... */ for(UnsignedInteger sampleIndex = 0; sampleIndex < dataInSize; ++sampleIndex) { /* build the componentMatrix */ /* get the current sample x */ const Point currentSample(dataIn_[sampleIndex]); UnsignedInteger rowIndex = 0; /* First the constant term */ componentMatrix(sampleIndex, rowIndex) = 1.0; ++rowIndex; /* Then the linear term x' */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { componentMatrix(sampleIndex, rowIndex) = currentSample[componentIndex]; ++rowIndex; } // linear term /* Finally the quadratic term x.x' */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { /* First, the diagonal term */ componentMatrix(sampleIndex, rowIndex) = 0.5 * currentSample[componentIndex] * currentSample[componentIndex]; ++rowIndex; /* Then, the off-diagonal terms */ for(UnsignedInteger componentIndexTranspose = componentIndex + 1; componentIndexTranspose < inputDimension; ++componentIndexTranspose) { componentMatrix(sampleIndex, rowIndex) = currentSample[componentIndex] * currentSample[componentIndexTranspose]; ++rowIndex; } // off-diagonal terms } // quadratic term /* build the right-hand side */ for(UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++outputIndex) { rightHandSides(sampleIndex, outputIndex) = dataOut_[sampleIndex][outputIndex]; } } // each sample // Now, solve simultaneously the least-squares solutions for all the outputs const Matrix coefficients(componentMatrix.solveLinearSystem(rightHandSides)); // Fill-in the elements of the meta-model for(UnsignedInteger outputComponent = 0; outputComponent < outputDimension; ++outputComponent) { /* First, the constant term */ UnsignedInteger coefficientsIndex = 0; constant_[outputComponent] = coefficients(coefficientsIndex, outputComponent); ++coefficientsIndex; /* Second, the linear term */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { linear_(componentIndex, outputComponent) = coefficients(coefficientsIndex, outputComponent); ++coefficientsIndex; } // linear term /* Third, the quadratic term */ for(UnsignedInteger componentIndex = 0; componentIndex < inputDimension; ++componentIndex) { quadratic_(componentIndex, componentIndex, outputComponent) = coefficients(coefficientsIndex, outputComponent); ++coefficientsIndex; for(UnsignedInteger componentIndexTranspose = componentIndex + 1; componentIndexTranspose < inputDimension; ++componentIndexTranspose) { quadratic_(componentIndex, componentIndexTranspose, outputComponent) = coefficients(coefficientsIndex, outputComponent); // We only store the upper part ++coefficientsIndex; } // Off-diagonal terms } // quadratic term } // output components const Point center(inputDimension, 0.0); responseSurface_ = QuadraticFunction(center, constant_, linear_, quadratic_); } /* DataIn accessor */ Sample QuadraticLeastSquares::getDataIn() const { return dataIn_; } /* DataOut accessor */ Sample QuadraticLeastSquares::getDataOut() { // If the response surface has been defined with an input function and the output data have not already been computed, compute them if (inputFunction_.getEvaluation()->isActualImplementation() && (dataOut_.getSize() == 0)) dataOut_ = inputFunction_(dataIn_); return dataOut_; } void QuadraticLeastSquares::setDataOut(const Sample & dataOut) { if (inputFunction_.getEvaluation()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Error: cannot set the output data in a response surface defined with a function, here function=" << inputFunction_; if (dataOut.getSize() != dataIn_.getSize()) throw InvalidArgumentException(HERE) << "Error: the output data must have the same size than the input data, here output size=" << dataOut.getSize() << " and input size=" << dataIn_.getSize(); dataOut_ = dataOut; } /* Constant accessor */ Point QuadraticLeastSquares::getConstant() const { return constant_; } /* Linear accessor */ Matrix QuadraticLeastSquares::getLinear() const { return linear_; } /* Quadratic accessor */ SymmetricTensor QuadraticLeastSquares::getQuadratic() const { return quadratic_; } /* Function accessor */ Function QuadraticLeastSquares::getInputFunction() const { return inputFunction_; } /* Response surface accessor */ Function QuadraticLeastSquares::getResponseSurface() const { return responseSurface_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/MetaModel/QuadraticTaylor.cxx000066400000000000000000000056241307543307100233440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Second order polynomial response surface by Taylor expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuadraticTaylor.hxx" #include "openturns/QuadraticFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuadraticTaylor); QuadraticTaylor::QuadraticTaylor() : PersistentObject() { // Nothing to do } /* Constructor with parameters */ QuadraticTaylor::QuadraticTaylor(const Point & center, const Function & inputFunction) : PersistentObject(), center_(center), inputFunction_(inputFunction) { // Nothing to do } /* Virtual constructor */ QuadraticTaylor * QuadraticTaylor::clone() const { return new QuadraticTaylor(*this); } /* String converter */ String QuadraticTaylor::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " center=" << center_ << " function=" << inputFunction_ << " responseSurface=" << responseSurface_ << " constant=" << constant_ << " linear=" << linear_ << " quadratic=" << quadratic_; return oss; } /* Response surface computation */ void QuadraticTaylor::run() { /* Compute the three first terms of the Taylor expansion */ constant_ = inputFunction_(center_); linear_ = inputFunction_.gradient(center_); quadratic_ = inputFunction_.hessian(center_); /* Build the several implementations and set it into the response surface */ responseSurface_ = QuadraticFunction(center_, constant_, linear_, quadratic_); responseSurface_.setDescription(inputFunction_.getDescription()); } /* Center accessor */ Point QuadraticTaylor::getCenter() const { return center_; } /* Constant accessor */ Point QuadraticTaylor::getConstant() const { return constant_; } /* Linear accessor */ Matrix QuadraticTaylor::getLinear() const { return linear_; } /* Quadratic accessor */ SymmetricTensor QuadraticTaylor::getQuadratic() const { return quadratic_; } /* Function accessor */ Function QuadraticTaylor::getInputFunction() const { return inputFunction_; } /* Response surface accessor */ Function QuadraticTaylor::getResponseSurface() const { return responseSurface_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/MetaModel/openturns/000077500000000000000000000000001307543307100215365ustar00rootroot00000000000000openturns-1.9/lib/src/Base/MetaModel/openturns/LinearLeastSquares.hxx000066400000000000000000000046451307543307100260470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief First order polynomial response surface by least square * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARLEASTSQUARES_HXX #define OPENTURNS_LINEARLEASTSQUARES_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearLeastSquares * * The class describes the concept of quadratic response surface */ class OT_API LinearLeastSquares : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ LinearLeastSquares(const Sample & dataIn, const Function & inputFunction); /** Constructor with parameters */ LinearLeastSquares(const Sample & dataIn, const Sample & dataOut); /** Virtual constructor */ virtual LinearLeastSquares * clone() const; /** String converter */ String __repr__() const; /** Response surface computation */ void run(); /** Constant accessor */ Point getConstant() const; /** Linear accessor */ Matrix getLinear() const; /** Input function accessor */ Function getInputFunction() const; /** Response surface accessor */ Function getResponseSurface() const; /** Data in accessor */ Sample getDataIn() const; /** Data out accessor */ void setDataOut(const Sample & dataOut); Sample getDataOut() const; protected: private: Sample dataIn_; mutable Sample dataOut_; Function inputFunction_; Function responseSurface_; Point constant_; Matrix linear_; }; /* class LinearLeastSquares */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRATICLEASTSQUARES_HXX */ openturns-1.9/lib/src/Base/MetaModel/openturns/LinearTaylor.hxx000066400000000000000000000042431307543307100246770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief First order polynomial response surface by Taylor expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARTAYLOR_HXX #define OPENTURNS_LINEARTAYLOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearTaylor * * The class describes the concept of linear taylor response surface */ class OT_API LinearTaylor : public PersistentObject { CLASSNAME; public: /** Default constructor */ LinearTaylor(); /** Constructor with parameters */ LinearTaylor(const Point & center, const Function & inputFunction); /** Virtual constructor */ virtual LinearTaylor * clone() const; /** String converter */ String __repr__() const; /** Response surface computation */ void run(); /** Center accessor */ Point getCenter() const; /** Constant accessor */ Point getConstant() const; /** Linear accessor */ Matrix getLinear() const; /** Input function accessor */ Function getInputFunction() const; /** Response surface accessor */ Function getResponseSurface() const; protected: private: Point center_; Function inputFunction_; Function responseSurface_; Point constant_; Matrix linear_; }; /* class LinearTaylor */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARTAYLOR_HXX */ openturns-1.9/lib/src/Base/MetaModel/openturns/OTBaseMetaModel.hxx000066400000000000000000000022131307543307100251720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Base/MetaModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTBASEMETAMODEL_HXX #define OPENTURNS_OTBASEMETAMODEL_HXX #include "openturns/LinearLeastSquares.hxx" #include "openturns/QuadraticLeastSquares.hxx" #include "openturns/LinearTaylor.hxx" #include "openturns/QuadraticTaylor.hxx" #endif /* OPENTURNS_OTBASEMETAMODEL_HXX */ openturns-1.9/lib/src/Base/MetaModel/openturns/QuadraticLeastSquares.hxx000066400000000000000000000050271307543307100265450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Second order polynomial response surface by least square * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUADRATICLEASTSQUARES_HXX #define OPENTURNS_QUADRATICLEASTSQUARES_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuadraticLeastSquares * * The class describes the concept of quadratic response surface */ class OT_API QuadraticLeastSquares : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ QuadraticLeastSquares(const Sample & dataIn, const Function & inputFunction); /** Constructor with parameters */ QuadraticLeastSquares(const Sample & dataIn, const Sample & dataOut); /** Virtual constructor */ virtual QuadraticLeastSquares * clone() const; /** String converter */ String __repr__() const; /** Response surface computation */ void run(); /** Constant accessor */ Point getConstant() const; /** Linear accessor */ Matrix getLinear() const; /** Quadratic accessor */ SymmetricTensor getQuadratic() const; /** Input function accessor */ Function getInputFunction() const; /** Response surface accessor */ Function getResponseSurface() const; /** DataIn accessor */ Sample getDataIn() const; /** DataOut accessor */ void setDataOut(const Sample & dataOut); Sample getDataOut(); protected: private: Sample dataIn_; Sample dataOut_; Function inputFunction_; Function responseSurface_; Point constant_; Matrix linear_; SymmetricTensor quadratic_; }; /* class QuadraticLeastSquares */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRATICLEASTSQUARES_HXX */ openturns-1.9/lib/src/Base/MetaModel/openturns/QuadraticTaylor.hxx000066400000000000000000000045201307543307100254000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Second order polynomial response surface by Taylor expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUADRATICTAYLOR_HXX #define OPENTURNS_QUADRATICTAYLOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuadraticTaylor * * The class describes the concept of quadratic taylor response surface */ class OT_API QuadraticTaylor : public PersistentObject { CLASSNAME; public: /** Default constructor */ QuadraticTaylor(); /** Constructor with parameters */ QuadraticTaylor(const Point & center, const Function & inputFunction); /** Virtual constructor */ virtual QuadraticTaylor * clone() const; /** String converter */ String __repr__() const; /** Response surface computation */ void run(); /** Center accessor */ Point getCenter() const; /** Constant accessor */ Point getConstant() const; /** Linear accessor */ Matrix getLinear() const; /** Quadratic accessor */ SymmetricTensor getQuadratic() const; /** Input function accessor */ Function getInputFunction() const; /** Response surface accessor */ Function getResponseSurface() const; protected: private: Point center_; Function inputFunction_; Function responseSurface_; Point constant_; Matrix linear_; SymmetricTensor quadratic_; }; /* class QuadraticTaylor */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRATICTAYLOR_HXX */ openturns-1.9/lib/src/Base/Optim/000077500000000000000000000000001307543307100167225ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Optim/AbdoRackwitz.cxx000066400000000000000000000251351307543307100220400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief AbdoRackwitz is an actual implementation for * OptimizationAlgorithmImplementation using the AbdoRackwitz algorithm. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/AbdoRackwitz.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AbdoRackwitz); static const Factory Factory_AbdoRackwitz; /* Default constructor */ AbdoRackwitz::AbdoRackwitz() : OptimizationAlgorithmImplementation() , tau_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultTau")) , omega_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultOmega")) , smooth_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultSmooth")) { initialize(); } AbdoRackwitz::AbdoRackwitz (const OptimizationProblem & problem, const Scalar tau, const Scalar omega, const Scalar smooth) : OptimizationAlgorithmImplementation(problem) , tau_(tau) , omega_(omega) , smooth_(smooth) { initialize(); checkProblem(problem); } AbdoRackwitz::AbdoRackwitz(const OptimizationProblem & problem) : OptimizationAlgorithmImplementation(problem) , tau_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultTau")) , omega_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultOmega")) , smooth_(ResourceMap::GetAsScalar("AbdoRackwitz-DefaultSmooth")) { initialize(); checkProblem(problem); } /* Virtual constructor */ AbdoRackwitz * AbdoRackwitz::clone() const { return new AbdoRackwitz(*this); } void AbdoRackwitz::initialize() { currentSigma_ = 0.0; currentLevelValue_ = 0.0; currentLambda_ = 0.0; } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void AbdoRackwitz::checkProblem(const OptimizationProblem & problem) const { if (!problem.hasLevelFunction()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " can only solve nearest-point optimization problems"; if (problem.hasMultipleObjective()) throw InvalidArgumentException(HERE) << "Error: " << this->getClassName() << " does not support multi-objective optimization "; if (problem.hasBounds()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " cannot solve bound-constrained optimization problems"; } /* Line search for globalization of the algorithm */ Scalar AbdoRackwitz::computeLineSearch() { /* Logal copy of the level function and the level value */ const Function levelFunction(getProblem().getLevelFunction()); const Scalar levelValue = getProblem().getLevelValue(); /* Actualize sigma */ currentSigma_ = std::max(currentSigma_ + 1.0, smooth_ * currentPoint_.norm() / currentGradient_.norm()); /* Compute penalized scalar objective function at current point */ const Scalar currentTheta = 0.5 * currentPoint_.normSquare() + currentSigma_ * std::abs(currentLevelValue_ - levelValue); /* Min bound for step */ const Scalar minStep = getMaximumAbsoluteError() / currentDirection_.norm(); /* Minimum decrease for the penalized objective function */ const Scalar levelIncrement = omega_ * dot(currentPoint_ + (currentSigma_ * ((currentLevelValue_ > levelValue) ? 1.0 : -1.0)) * currentGradient_, currentDirection_); /* Initialization of the line search */ /* We start with step=1 */ Scalar step = 1.0; Point currentStepPoint; Scalar currentStepLevelValue = -1.0; Scalar currentStepTheta = -1.0; do { currentStepPoint = currentPoint_ + step * currentDirection_; currentStepLevelValue = levelFunction(currentStepPoint)[0]; currentStepTheta = 0.5 * currentStepPoint.normSquare() + currentSigma_ * std::abs(currentStepLevelValue - levelValue); if (getVerbose()) LOGINFO(OSS() << "line search step=" << step << " currentStepPoint=" << currentStepPoint << " currentStepLevelValue=" << currentStepLevelValue << " currentStepTheta=" << currentStepTheta); step *= tau_; } while ((step >= minStep) && ( currentStepTheta > currentTheta + step * levelIncrement)); currentPoint_ = currentStepPoint; currentLevelValue_ = currentStepLevelValue; /* We went one step beyond */ return step / tau_; } /* Performs the actual computation by using the AbdoRackwitz algorithm */ void AbdoRackwitz::run() { initialize(); /* Get a local copy of the level function */ const Function levelFunction(getProblem().getLevelFunction()); /* Get a local copy of the level value */ const Scalar levelValue = getProblem().getLevelValue(); /* Current point -> u */ currentPoint_ = getStartingPoint(); Bool convergence = false; UnsignedInteger iterationNumber = 0; Scalar absoluteError = -1.0; Scalar constraintError = -1.0; Scalar relativeError = -1.0; Scalar residualError = -1.0; /* Compute the level function at the current point -> G */ currentLevelValue_ = levelFunction(currentPoint_)[0]; // reset result result_ = OptimizationResult(); result_.setProblem(getProblem()); result_.store(currentPoint_, Point(1, currentLevelValue_), absoluteError, relativeError, residualError, constraintError); while ( (!convergence) && (iterationNumber <= getMaximumIterationNumber()) ) { /* Go to next iteration */ ++iterationNumber; /* Compute the level function gradient at the current point -> Grad(G) */ currentGradient_ = levelFunction.gradient(currentPoint_) * Point(1, 1.0); if (getVerbose()) LOGINFO(OSS() << "current point=" << currentPoint_ << " current level value=" << currentLevelValue_ << " current gradient=" << currentGradient_); /* Compute the current Lagrange multiplier */ const Scalar normGradientSquared = currentGradient_.normSquare(); /* In case of a null gradient, throw an internal exception */ if (normGradientSquared == 0) { throw InternalException(HERE) << "Error in Abdo Rackwitz algorithm: the gradient of the level function is zero at point u=" << currentPoint_; } /* Lambda = (G - ) / ||Grad(G)||^2 */ currentLambda_ = (currentLevelValue_ - levelValue - dot(currentGradient_, currentPoint_)) / normGradientSquared; /* Compute the current direction Du = -Lambda Grad(G) - u */ /* Be careful! currentGradient_ is an n by 1 matrix, we must multiply it by a 1 by 1 * vector in order to get an n dimensional equivalente vector */ currentDirection_ = -currentLambda_ * currentGradient_ - currentPoint_; /* Perform a line search in the given direction */ const Scalar alpha = computeLineSearch(); /* Check if convergence has been achieved */ absoluteError = std::abs(alpha) * currentDirection_.norm(); constraintError = std::abs(currentLevelValue_ - levelValue); const Scalar pointNorm = currentPoint_.norm(); if (pointNorm > 0.0) { relativeError = absoluteError / pointNorm; } else { relativeError = -1.0; } residualError = (currentPoint_ + currentLambda_ * currentGradient_).norm(); convergence = ((absoluteError < getMaximumAbsoluteError()) && (relativeError < getMaximumRelativeError())) || ((residualError < getMaximumResidualError()) && (constraintError < getMaximumConstraintError())); // update result result_.setIterationNumber(iterationNumber); result_.store(currentPoint_, Point(1, currentLevelValue_), absoluteError, relativeError, residualError, constraintError); result_.setLagrangeMultipliers(Point(1, currentLambda_)); LOGINFO(getResult().__repr__()); // callbacks if (progressCallback_.first) { progressCallback_.first((100.0 * iterationNumber) / getMaximumIterationNumber(), progressCallback_.second); } if (stopCallback_.first) { Bool stop = stopCallback_.first(stopCallback_.second); if (stop) { convergence = true; LOGWARN(OSS() << "AbdoRackwitz was stopped by user"); } } } /* Check if we converged */ if (!convergence) { LOGWARN(OSS() << "Warning! The AbdoRackwitz algorithm failed to converge after " << getMaximumIterationNumber() << " iterations"); } } // run() /* Tau accessor */ Scalar AbdoRackwitz::getTau() const { return tau_; } void AbdoRackwitz::setTau(const Scalar tau) { tau_ = tau; } /* Omega accessor */ Scalar AbdoRackwitz::getOmega() const { return omega_; } void AbdoRackwitz::setOmega(const Scalar omega) { omega_ = omega; } /* Smooth accessor */ Scalar AbdoRackwitz::getSmooth() const { return smooth_; } void AbdoRackwitz::setSmooth(const Scalar smooth) { smooth_ = smooth; } /* String converter */ String AbdoRackwitz::__repr__() const { OSS oss; oss << "class=" << AbdoRackwitz::GetClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " tau=" << tau_ << " omega=" << omega_ << " smooth=" << smooth_; return oss; } /* Method save() stores the object through the StorageManager */ void AbdoRackwitz::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("tau_", tau_); adv.saveAttribute("omega_", omega_); adv.saveAttribute("smooth_", smooth_); adv.saveAttribute("currentSigma_", currentSigma_); adv.saveAttribute("currentPoint_", currentPoint_); adv.saveAttribute("currentDirection_", currentDirection_); adv.saveAttribute("currentLevelValue_", currentLevelValue_); adv.saveAttribute("currentGradient_", currentGradient_); adv.saveAttribute("currentLambda_", currentLambda_); } /* Method load() reloads the object from the StorageManager */ void AbdoRackwitz::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("tau_", tau_); adv.loadAttribute("omega_", omega_); adv.loadAttribute("smooth_", smooth_); adv.loadAttribute("currentSigma_", currentSigma_); adv.loadAttribute("currentPoint_", currentPoint_); adv.loadAttribute("currentDirection_", currentDirection_); adv.loadAttribute("currentLevelValue_", currentLevelValue_); adv.loadAttribute("currentLambda_", currentLambda_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/CMakeLists.txt000066400000000000000000000025531307543307100214670ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (AbdoRackwitz.cxx) ot_add_source_file (algocobyla.c) ot_add_source_file (Cobyla.cxx) ot_add_source_file (MultiStart.cxx) ot_add_source_file (NearestPointChecker.cxx) ot_add_source_file (NearestPointCheckerResult.cxx) ot_add_source_file (NLopt.cxx) ot_add_source_file (OptimizationProblem.cxx) ot_add_source_file (OptimizationProblemImplementation.cxx) ot_add_source_file (OptimizationAlgorithm.cxx) ot_add_source_file (OptimizationAlgorithmImplementation.cxx) ot_add_source_file (OptimizationResult.cxx) ot_add_source_file (SQP.cxx) ot_add_source_file (algotnc.c) ot_add_source_file (TNC.cxx) ot_install_header_file (OTOptim.hxx) ot_install_header_file (AbdoRackwitz.hxx) ot_install_header_file (Cobyla.hxx) ot_install_header_file (MultiStart.hxx) ot_install_header_file (NearestPointChecker.hxx) ot_install_header_file (NearestPointCheckerResult.hxx) ot_install_header_file (NLopt.hxx) ot_install_header_file (OptimizationProblem.hxx) ot_install_header_file (OptimizationProblemImplementation.hxx) ot_install_header_file (OptimizationAlgorithm.hxx) ot_install_header_file (OptimizationAlgorithmImplementation.hxx) ot_install_header_file (OptimizationResult.hxx) ot_install_header_file (SQP.hxx) ot_install_header_file (TNC.hxx) openturns-1.9/lib/src/Base/Optim/Cobyla.cxx000066400000000000000000000235511307543307100206650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cobyla is an actual implementation for OptimizationAlgorithmImplementation using the cobyla library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Cobyla.hxx" #include "algocobyla.h" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Cobyla); static const Factory Factory_Cobyla; /* Default constructor */ Cobyla::Cobyla() : OptimizationAlgorithmImplementation() , rhoBeg_(ResourceMap::GetAsScalar("Cobyla-DefaultRhoBeg")) { // Nothing to do } Cobyla::Cobyla(const OptimizationProblem & problem) : OptimizationAlgorithmImplementation(problem) , rhoBeg_(ResourceMap::GetAsScalar("Cobyla-DefaultRhoBeg")) { checkProblem(problem); } Cobyla::Cobyla(const OptimizationProblem & problem, const Scalar rhoBeg) : OptimizationAlgorithmImplementation(problem) , rhoBeg_(rhoBeg) { checkProblem(problem); } /* Virtual constructor */ Cobyla * Cobyla::clone() const { return new Cobyla(*this); } /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void Cobyla::checkProblem(const OptimizationProblem & problem) const { if (problem.hasMultipleObjective()) throw InvalidArgumentException(HERE) << "Error: " << this->getClassName() << " does not support multi-objective optimization"; } /* Performs the actual computation by calling the Cobyla algorithm */ void Cobyla::run() { const UnsignedInteger dimension = getProblem().getDimension(); int n(dimension); int m(getProblem().getInequalityConstraint().getOutputDimension() + 2 * getProblem().getEqualityConstraint().getOutputDimension()); Point x(getStartingPoint()); if (x.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Invalid starting point dimension (" << x.getDimension() << "), expected " << dimension; if (getProblem().hasBounds()) { Interval bounds(getProblem().getBounds()); for (UnsignedInteger i = 0; i < dimension; ++i) { if (bounds.getFiniteLowerBound()[i]) ++m; if (bounds.getFiniteUpperBound()[i]) ++m; } } Scalar rhoEnd = getMaximumAbsoluteError(); int maxFun(getMaximumIterationNumber()); cobyla_message message((getVerbose() ? COBYLA_MSG_INFO : COBYLA_MSG_NONE)); // initialize history evaluationInputHistory_ = Sample(0, dimension); evaluationOutputHistory_ = Sample(0, 2); /* * cobyla : minimize a function subject to constraints * * n : number of variables (>=0) * m : number of constraints (>=0) * x : on input, initial estimate ; on output, the solution * rhobeg : a reasonable initial change to the variables * rhoend : the required accuracy for the variables * message : see the cobyla_message enum * maxfun : on input, the maximum number of function evaluations * on output, the number of function evaluations done * calcfc : the function to minimize (see cobyla_function) * state : used by function (see cobyla_function) * * The cobyla function returns a code defined in the cobyla_rc enum. * * extern int cobyla(int n, int m, double *x, double rhobeg, double rhoend, * int message, int *maxfun, cobyla_function *calcfc, void *state); */ int returnCode(ot_cobyla(n, m, &x[0], rhoBeg_, rhoEnd, message, &maxFun, Cobyla::ComputeObjectiveAndConstraint, (void*) this)); result_ = OptimizationResult(); result_.setProblem(getProblem()); // Update the result UnsignedInteger size = evaluationInputHistory_.getSize(); Scalar absoluteError = -1.0; Scalar relativeError = -1.0; Scalar residualError = -1.0; Scalar constraintError = -1.0; for (UnsignedInteger i = 0; i < size; ++ i) { const Point inP(evaluationInputHistory_[i]); const Point outP(evaluationOutputHistory_[i]); if (i > 0) { const Point inPM(evaluationInputHistory_[i - 1]); const Point outPM(evaluationOutputHistory_[i - 1]); absoluteError = (inP - inPM).normInf(); relativeError = absoluteError / inP.normInf(); residualError = std::abs(outP[0] - outPM[0]); constraintError = outP[1]; } result_.store(inP, Point(1, outP[0]), absoluteError, relativeError, residualError, constraintError); } result_.setOptimalPoint(x); const UnsignedInteger index = evaluationInputHistory_.find(x); Scalar bestValue = evaluationOutputHistory_[index][0]; result_.setOptimalValue(Point(1, bestValue)); result_.setIterationNumber(maxFun); result_.setLagrangeMultipliers(computeLagrangeMultipliers(x)); // check the convergence criteria const Bool convergence = ((absoluteError < getMaximumAbsoluteError()) && (relativeError < getMaximumRelativeError())) || ((residualError < getMaximumResidualError()) && (constraintError < getMaximumConstraintError())); if (returnCode != 0) { LOGWARN(OSS() << "Warning! The Cobyla algorithm failed to converge. The error message is " << cobyla_rc_string[returnCode - COBYLA_MINRC]); } else if ( ! convergence ) { LOGWARN(OSS() << "Warning! The Cobyla algorithm could not enforce the convergence criteria"); } } /* RhoBeg accessor */ Scalar Cobyla::getRhoBeg() const { return rhoBeg_; } void Cobyla::setRhoBeg(const Scalar rhoBeg) { rhoBeg_ = rhoBeg; } /* String converter */ String Cobyla::__repr__() const { OSS oss; oss << "class=" << Cobyla::GetClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " rhoBeg=" << rhoBeg_; return oss; } /* Method save() stores the object through the StorageManager */ void Cobyla::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("rhoBeg_", rhoBeg_); } /* Method load() reloads the object from the StorageManager */ void Cobyla::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("rhoBeg_", rhoBeg_); } /* * Wrapper of the Function operator() compatible with * cobyla signature */ int Cobyla::ComputeObjectiveAndConstraint(int n, int m, double *x, double *f, double *con, void *state) { Cobyla *algorithm = static_cast(state); /* Convert the input vector in OpenTURNS format */ Point inPoint(n); memcpy(&inPoint[0], &x[0], n * sizeof(Scalar)); const OptimizationProblem problem(algorithm->getProblem()); Point outPoint(2); Scalar result = problem.getObjective().operator()(inPoint)[0]; // cobyla freezes when dealing with MaxScalar if (std::abs(result) == SpecFunc::MaxScalar) result /= 1.0e3; outPoint[0] = result; const Scalar sign = problem.isMinimization() ? 1.0 : -1.0; *f = sign * result; UnsignedInteger shift = 0; UnsignedInteger nbIneqConst = problem.getInequalityConstraint().getOutputDimension(); UnsignedInteger nbEqConst = problem.getEqualityConstraint().getOutputDimension(); Point constraintValue(nbIneqConst + 2 * nbEqConst); /* Compute the inequality constraints at inPoint */ if (problem.hasInequalityConstraint()) { const Point constraintInequalityValue(problem.getInequalityConstraint().operator()(inPoint)); for(UnsignedInteger index = 0; index < nbIneqConst; ++index) constraintValue[index + shift] = constraintInequalityValue[index]; shift += nbIneqConst; } /* Compute the equality constraints at inPoint */ if (problem.hasEqualityConstraint()) { const Point constraintEqualityValue = problem.getEqualityConstraint().operator()(inPoint); for(UnsignedInteger index = 0; index < nbEqConst; ++index) constraintValue[index + shift] = constraintEqualityValue[index] + algorithm->getMaximumConstraintError(); shift += nbEqConst; for(UnsignedInteger index = 0; index < nbEqConst; ++index) constraintValue[index + shift] = -constraintEqualityValue[index] + algorithm->getMaximumConstraintError(); } /* Compute the bound constraints at inPoint */ if (problem.hasBounds()) { const Interval bounds(problem.getBounds()); for (UnsignedInteger index = 0; index < bounds.getDimension(); ++index) { if (bounds.getFiniteLowerBound()[index]) constraintValue.add(inPoint[index] - bounds.getLowerBound()[index]); if (bounds.getFiniteUpperBound()[index]) constraintValue.add(bounds.getUpperBound()[index] - inPoint[index]); } } /* Convert the constraint vector in double format */ memcpy(&con[0], &constraintValue[0], constraintValue.getDimension() * sizeof(Scalar)); // only take violated constraints into account to compute error for (UnsignedInteger j = 0; j < constraintValue.getDimension(); ++ j) { if (constraintValue[j] > 0.0) constraintValue[j] = 0.0; } outPoint[1] = constraintValue.normInf(); // track input/outputs algorithm->evaluationInputHistory_.add(inPoint); algorithm->evaluationOutputHistory_.add(outPoint); int returnValue = 0; if (algorithm->stopCallback_.first) { Bool stop = algorithm->stopCallback_.first(algorithm->stopCallback_.second); if (stop) { // This value is passed to algocobyla. Any non-zero value should work but 1 // is the most standard value. returnValue = 1; LOGWARN(OSS() << "Cobyla was stopped by user"); } } return returnValue; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/MultiStart.cxx000066400000000000000000000117501307543307100215620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MultiStart optimization algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MultiStart.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Cobyla.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Box.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MultiStart); static const Factory Factory_MultiStart; /* Constructor with parameters */ MultiStart::MultiStart() : OptimizationAlgorithmImplementation() , solver_(new Cobyla) { // Nothing to do here } /* Constructor with parameters */ MultiStart::MultiStart(const OptimizationAlgorithm & solver, const Sample & startingPoints) : OptimizationAlgorithmImplementation(solver.getProblem()) , solver_(solver) , startingPoints_(startingPoints) { } void MultiStart::setProblem(const OptimizationProblem & problem) { OptimizationAlgorithmImplementation::setProblem(problem); solver_.setProblem(problem); } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void MultiStart::checkProblem(const OptimizationProblem & problem) const { // Nothing to do } void MultiStart::run() { if (startingPoints_.getDimension() != getProblem().getDimension()) throw InvalidArgumentException(HERE) << "The starting points dimension must match the problem dimension"; // run the solver with each starting point OptimizationAlgorithm solver(solver_); resultCollection_.clear(); Scalar bestValue = getProblem().isMinimization() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; const UnsignedInteger size = startingPoints_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { solver.setStartingPoint(startingPoints_[i]); try { solver.run(); } catch (Exception &) { continue; } OptimizationResult result(solver.getResult()); resultCollection_.add(result); Scalar currentValue = result.getOptimalValue()[0]; if ((getProblem().isMinimization() && (currentValue < bestValue)) || (!getProblem().isMinimization() && (currentValue > bestValue))) { bestValue = currentValue; setResult(result); LOGINFO(OSS() << "Best initial point so far=" << result.getOptimalPoint() << " value=" << result.getOptimalValue()); } } LOGINFO(OSS() << resultCollection_.getSize() << " out of " << size << " local searches succeeded"); if (resultCollection_.getSize() == 0) { throw InternalException(HERE) << "None of the local searches succeeded."; } } /* Virtual constructor */ MultiStart * MultiStart::clone() const { return new MultiStart(*this); } /* String converter */ String MultiStart::__repr__() const { OSS oss; oss << "class=" << getClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " solver=" << solver_ << " startingPoints=" << startingPoints_; return oss; } void MultiStart::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm MultiStart::getOptimizationAlgorithm() const { return solver_; } void MultiStart::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "MultiStart::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } OptimizationAlgorithm MultiStart::getOptimizationSolver() const { Log::Warn(OSS() << "MultiStart::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void MultiStart::setStartingPoints(const Sample & startingPoints) { startingPoints_ = startingPoints; } Sample MultiStart::getStartingPoints() const { return startingPoints_; } MultiStart::OptimizationResultCollection MultiStart::getResultCollection() const { return resultCollection_; } /* Method save() stores the object through the StorageManager */ void MultiStart::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("solver_", solver_); adv.saveAttribute("startingPoints_", startingPoints_); } /* Method load() reloads the object from the StorageManager */ void MultiStart::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("solver_", solver_); adv.loadAttribute("startingPoints_", startingPoints_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/NLopt.cxx000066400000000000000000000422431307543307100205070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief NLopt solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NLopt.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #ifdef OPENTURNS_HAVE_NLOPT # include #endif BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NLopt); static const Factory Factory_NLopt; /* Map to associate algorithm names and codes */ std::map NLopt::AlgorithmNames_; /* Static method to initialize the algorithm names/codes pairing in nlopt */ void NLopt::InitializeAlgorithmNames() { #ifdef OPENTURNS_HAVE_NLOPT if (!AlgorithmNames_.empty()) return; AlgorithmNames_["GN_DIRECT"] = nlopt::GN_DIRECT; AlgorithmNames_["GN_DIRECT_L"] = nlopt::GN_DIRECT_L; AlgorithmNames_["GN_DIRECT_L_RAND"] = nlopt::GN_DIRECT_L_RAND; AlgorithmNames_["GN_DIRECT_NOSCAL"] = nlopt::GN_DIRECT_NOSCAL; AlgorithmNames_["GN_DIRECT_L_NOSCAL"] = nlopt::GN_DIRECT_L_NOSCAL; AlgorithmNames_["GN_DIRECT_L_RAND_NOSCAL"] = nlopt::GN_DIRECT_L_RAND_NOSCAL; AlgorithmNames_["GN_ORIG_DIRECT"] = nlopt::GN_ORIG_DIRECT; AlgorithmNames_["GN_ORIG_DIRECT_L"] = nlopt::GN_ORIG_DIRECT_L; AlgorithmNames_["GD_STOGO"] = nlopt::GD_STOGO; AlgorithmNames_["GD_STOGO_RAND"] = nlopt::GD_STOGO_RAND; AlgorithmNames_["LD_LBFGS_NOCEDAL"] = nlopt::LD_LBFGS_NOCEDAL; AlgorithmNames_["LD_LBFGS"] = nlopt::LD_LBFGS; AlgorithmNames_["LN_PRAXIS"] = nlopt::LN_PRAXIS; AlgorithmNames_["LD_VAR1"] = nlopt::LD_VAR1; AlgorithmNames_["LD_VAR2"] = nlopt::LD_VAR2; AlgorithmNames_["LD_TNEWTON"] = nlopt::LD_TNEWTON; AlgorithmNames_["LD_TNEWTON_RESTART"] = nlopt::LD_TNEWTON_RESTART; AlgorithmNames_["LD_TNEWTON_PRECOND"] = nlopt::LD_TNEWTON_PRECOND; AlgorithmNames_["LD_TNEWTON_PRECOND_RESTART"] = nlopt::LD_TNEWTON_PRECOND_RESTART; AlgorithmNames_["GN_CRS2_LM"] = nlopt::GN_CRS2_LM; AlgorithmNames_["GN_MLSL"] = nlopt::GN_MLSL; AlgorithmNames_["GD_MLSL"] = nlopt::GD_MLSL; AlgorithmNames_["GN_MLSL_LDS"] = nlopt::GN_MLSL_LDS; AlgorithmNames_["GD_MLSL_LDS"] = nlopt::GD_MLSL_LDS; AlgorithmNames_["LD_MMA"] = nlopt::LD_MMA; AlgorithmNames_["LN_COBYLA"] = nlopt::LN_COBYLA; AlgorithmNames_["LN_NEWUOA"] = nlopt::LN_NEWUOA; AlgorithmNames_["LN_NEWUOA_BOUND"] = nlopt::LN_NEWUOA_BOUND; AlgorithmNames_["LN_NELDERMEAD"] = nlopt::LN_NELDERMEAD; AlgorithmNames_["LN_SBPLX"] = nlopt::LN_SBPLX; AlgorithmNames_["LN_AUGLAG"] = nlopt::LN_AUGLAG; AlgorithmNames_["LD_AUGLAG"] = nlopt::LD_AUGLAG; AlgorithmNames_["LN_AUGLAG_EQ"] = nlopt::LN_AUGLAG_EQ; AlgorithmNames_["LD_AUGLAG_EQ"] = nlopt::LD_AUGLAG_EQ; AlgorithmNames_["LN_BOBYQA"] = nlopt::LN_BOBYQA; AlgorithmNames_["GN_ISRES"] = nlopt::GN_ISRES; AlgorithmNames_["AUGLAG"] = nlopt::AUGLAG; AlgorithmNames_["AUGLAG_EQ"] = nlopt::AUGLAG_EQ; AlgorithmNames_["G_MLSL"] = nlopt::G_MLSL; AlgorithmNames_["G_MLSL_LDS"] = nlopt::G_MLSL_LDS; AlgorithmNames_["LD_SLSQP"] = nlopt::LD_SLSQP; AlgorithmNames_["LD_CCSAQ"] = nlopt::LD_CCSAQ; AlgorithmNames_["GN_ESCH"] = nlopt::GN_ESCH; #else throw NotYetImplementedException(HERE) << "No NLopt support"; #endif } /* Static methods to access algorithm names and codes */ Description NLopt::GetAlgorithmNames() { InitializeAlgorithmNames(); Description names; std::map::const_iterator it; for (it = AlgorithmNames_.begin(); it != AlgorithmNames_.end(); ++it) names.add(it->first); return names; } /* Static methods to access algorithm names and codes */ UnsignedInteger NLopt::GetAlgorithmCode(const String & name) { InitializeAlgorithmNames(); const std::map::const_iterator it(AlgorithmNames_.find(name)); if (it == AlgorithmNames_.end()) throw InvalidArgumentException(HERE) << "Error: the given NLopt algorithm name=" << name << " is unknown."; return it->second; } void NLopt::SetSeed(const UnsignedInteger seed) { #ifdef OPENTURNS_HAVE_NLOPT nlopt::srand(seed); #else throw NotYetImplementedException(HERE) << "No NLopt support"; #endif } /* Default constructor */ NLopt::NLopt(const String & algoName) : OptimizationAlgorithmImplementation() , algoName_(algoName) , p_opt_(0) { GetAlgorithmCode(algoName); } NLopt::NLopt(const OptimizationProblem & problem, const String & algoName) : OptimizationAlgorithmImplementation(problem) , algoName_(algoName) , p_opt_(0) { checkProblem(problem); } /* Virtual constructor */ NLopt * NLopt::clone() const { return new NLopt(*this); } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void NLopt::checkProblem(const OptimizationProblem & problem) const { #ifdef OPENTURNS_HAVE_NLOPT if (problem.hasMultipleObjective()) throw InvalidArgumentException(HERE) << "Error: " << getAlgorithmName() << " does not support multi-objective optimization"; const UnsignedInteger dimension = problem.getDimension(); const nlopt::algorithm algo = static_cast(GetAlgorithmCode(getAlgorithmName())); nlopt::opt opt(algo, dimension); if (problem.hasInequalityConstraint()) { try { opt.add_inequality_constraint(NLopt::ComputeInequalityConstraint, 0); } catch (std::invalid_argument) { throw InvalidArgumentException(HERE) << "Error: " << getAlgorithmName() << " does not support inequality constraints"; } } if (problem.hasEqualityConstraint()) { try { opt.add_equality_constraint(NLopt::ComputeEqualityConstraint, 0); } catch (std::invalid_argument) { throw InvalidArgumentException(HERE) << "Error: " << getAlgorithmName() << " does not support equality constraints"; } } #else throw NotYetImplementedException(HERE) << "No NLopt support"; #endif } // Struct to store class ptr and marginal index as well struct MarginalData { MarginalData(NLopt * p_algo, const UnsignedInteger marginalIndex) : p_algo_(p_algo), marginalIndex_(marginalIndex) {} NLopt * p_algo_; int marginalIndex_; }; /* Performs the actual computation by calling the NLopt library */ void NLopt::run() { #ifdef OPENTURNS_HAVE_NLOPT const UnsignedInteger dimension = getProblem().getDimension(); Point startingPoint(getStartingPoint()); if (startingPoint.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Invalid starting point dimension (" << startingPoint.getDimension() << "), expected " << dimension; const nlopt::algorithm algo = static_cast(GetAlgorithmCode(algoName_)); // initialize history evaluationInputHistory_ = Sample(0, dimension); evaluationOutputHistory_ = Sample(0, 1); nlopt::opt opt(algo, dimension); if (getProblem().isMinimization()) { opt.set_min_objective(NLopt::ComputeObjective, this); } else { opt.set_max_objective(NLopt::ComputeObjective, this); } opt.set_xtol_abs(getMaximumAbsoluteError()); opt.set_xtol_rel(getMaximumRelativeError()); opt.set_ftol_abs(getMaximumResidualError()); opt.set_maxeval(getMaximumEvaluationNumber()); if (getProblem().hasBounds()) { Interval bounds(getProblem().getBounds()); Interval::BoolCollection finiteLowerBound(bounds.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(bounds.getFiniteUpperBound()); Point lowerBound(bounds.getLowerBound()); Point upperBound(bounds.getUpperBound()); std::vector lb(dimension, 0.0); std::vector ub(dimension, 0.0); std::copy(lowerBound.begin(), lowerBound.end(), lb.begin()); std::copy(upperBound.begin(), upperBound.end(), ub.begin()); for (UnsignedInteger i = 0; i < dimension; ++ i) { if (!finiteLowerBound[i]) lb[i] = -SpecFunc::MaxScalar; if (!finiteUpperBound[i]) ub[i] = SpecFunc::MaxScalar; } opt.set_lower_bounds(lb); opt.set_upper_bounds(ub); } Collection > inequalityData; if (getProblem().hasInequalityConstraint()) { const UnsignedInteger inequalityDimension = getProblem().getInequalityConstraint().getOutputDimension(); inequalityData.resize(inequalityDimension); for (UnsignedInteger i = 0; i < inequalityDimension; ++ i) { inequalityData[i] = Pointer(new MarginalData(this, i)); opt.add_inequality_constraint(NLopt::ComputeInequalityConstraint, inequalityData[i].get(), getMaximumConstraintError()); } } Collection > equalityData; if (getProblem().hasEqualityConstraint()) { const UnsignedInteger equalityDimension = getProblem().getEqualityConstraint().getOutputDimension(); equalityData.resize(equalityDimension); for (UnsignedInteger i = 0; i < equalityDimension; ++ i) { equalityData[i] = Pointer(new MarginalData(this, i)); opt.add_equality_constraint(NLopt::ComputeEqualityConstraint, equalityData[i].get(), getMaximumConstraintError()); } } if (initialStep_.getDimension() > 0) { if (initialStep_.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Invalid dx point dimension, expected " << dimension; std::vector dx(dimension, 0.0); std::copy(initialStep_.begin(), initialStep_.end(), dx.begin()); opt.set_default_initial_step(dx); } if (!p_localSolver_.isNull()) { const nlopt::algorithm local_algo = static_cast(GetAlgorithmCode(p_localSolver_->getAlgorithmName())); nlopt::opt local_opt(local_algo, dimension); local_opt.set_xtol_abs(p_localSolver_->getMaximumAbsoluteError()); local_opt.set_xtol_rel(p_localSolver_->getMaximumRelativeError()); local_opt.set_ftol_abs(p_localSolver_->getMaximumResidualError()); local_opt.set_maxeval(p_localSolver_->getMaximumEvaluationNumber()); if (p_localSolver_->getInitialStep().getDimension() > 0) { Point localInitialStep(p_localSolver_->getInitialStep()); if (localInitialStep.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Invalid local dx point dimension, expected " << dimension; std::vector local_dx(dimension, 0.0); std::copy(localInitialStep.begin(), localInitialStep.end(), local_dx.begin()); local_opt.set_default_initial_step(local_dx); } opt.set_local_optimizer(local_opt); } std::vector x(dimension, 0.0); std::copy(startingPoint.begin(), startingPoint.end(), x.begin()); double optimalValue = 0.0; try { // The C++ interface of NLopt does not return a code for failures cases. // It is either positive (termination criterion) or an exception is thrown. p_opt_ = &opt; opt.optimize(x, optimalValue); } catch (nlopt::roundoff_limited) { // Here we catch the roundoff_limited exception as the result // of the optimization may be useful even if not at the requested precision LOGWARN(OSS() << "NLopt raised a roundoff-limited exception"); } catch (nlopt::forced_stop) { LOGWARN(OSS() << "NLopt was stopped by user"); } catch (std::exception & exc) { throw InternalException(HERE) << "NLopt raised an exception: " << exc.what(); } p_opt_ = 0; Point optimizer(dimension); std::copy(x.begin(), x.end(), optimizer.begin()); OptimizationResult result; result.setProblem(getProblem()); UnsignedInteger size = evaluationInputHistory_.getSize(); Scalar absoluteError = -1.0; Scalar relativeError = -1.0; Scalar residualError = -1.0; Scalar constraintError = -1.0; for (UnsignedInteger i = 0; i < size; ++ i) { const Point inP(evaluationInputHistory_[i]); const Point outP(evaluationOutputHistory_[i]); if (i > 0) { const Point inPM(evaluationInputHistory_[i - 1]); const Point outPM(evaluationOutputHistory_[i - 1]); absoluteError = (inP - inPM).normInf(); relativeError = absoluteError / inP.normInf(); residualError = std::abs(outP[0] - outPM[0]); } result.store(inP, outP, absoluteError, relativeError, residualError, constraintError); } result.setOptimalPoint(optimizer); result.setOptimalValue(Point(1, optimalValue)); result.setLagrangeMultipliers(computeLagrangeMultipliers(optimizer)); setResult(result); #else throw NotYetImplementedException(HERE) << "No NLopt support"; #endif } /* String converter */ String NLopt::__repr__() const { OSS oss; oss << "class=" << getClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " algorithm=" << algoName_; return oss; } /* String converter */ String NLopt::__str__(const String & offset) const { OSS oss(false); oss << "class=" << getClassName() << " algorithm=" << algoName_; return oss; } /* Method save() stores the object through the StorageManager */ void NLopt::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("algoName_", algoName_); adv.saveAttribute("initialStep_", initialStep_); if (!p_localSolver_.isNull()) adv.saveAttribute("localSolver_", *p_localSolver_); } /* Method load() reloads the object from the StorageManager */ void NLopt::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("algoName_", algoName_); adv.loadAttribute("initialStep_", initialStep_); if (adv.hasAttribute("localSolver_")) { NLopt localSolver; adv.loadAttribute("localSolver_", localSolver); p_localSolver_ = localSolver.clone(); } } void NLopt::setAlgorithmName(const String algoName) { algoName_ = algoName; checkProblem(getProblem()); } String NLopt::getAlgorithmName() const { return algoName_; } /* Initial derivative-free local-optimization algorithms step accessor */ void NLopt::setInitialStep(const Point & initialStep) { initialStep_ = initialStep; } Point NLopt::getInitialStep() const { return initialStep_; } /* Local optimizer */ void NLopt::setLocalSolver(const NLopt & localSolver) { p_localSolver_ = localSolver.clone(); } NLopt NLopt::getLocalSolver() const { return *p_localSolver_; } double NLopt::ComputeObjective(const std::vector & x, std::vector & grad, void * f_data) { NLopt *algorithm = static_cast(f_data); const UnsignedInteger dimension = algorithm->getProblem().getDimension(); Point inP(dimension); std::copy(x.begin(), x.end(), inP.begin()); // evaluation Point outP(algorithm->getProblem().getObjective()(inP)); // track input/outputs algorithm->evaluationInputHistory_.add(inP); algorithm->evaluationOutputHistory_.add(outP); // gradient if (!grad.empty()) { Matrix gradient(algorithm->getProblem().getObjective().gradient(inP)); for (UnsignedInteger i = 0; i < dimension; ++ i) { grad[i] = gradient(i, 0); } } #ifdef OPENTURNS_HAVE_NLOPT // callbacks if (algorithm->stopCallback_.first) { Bool stop = algorithm->stopCallback_.first(algorithm->stopCallback_.second); nlopt::opt *p_opt = static_cast(algorithm->p_opt_); if (p_opt) { if (stop) p_opt->force_stop(); } else throw InternalException(HERE) << "Null p_opt"; } #endif return outP[0]; } double NLopt::ComputeInequalityConstraint(const std::vector< double >& x, std::vector< double >& grad, void* f_data) { MarginalData * mData = static_cast(f_data); NLopt *algorithm = mData->p_algo_; const UnsignedInteger marginalIndex = mData->marginalIndex_; const UnsignedInteger dimension = algorithm->getProblem().getDimension(); Point inP(dimension); std::copy(x.begin(), x.end(), inP.begin()); // evaluation Point outP(algorithm->getProblem().getInequalityConstraint()(inP)); // gradient if (!grad.empty()) { Matrix gradient(algorithm->getProblem().getInequalityConstraint().gradient(inP)); for (UnsignedInteger i = 0; i < dimension; ++ i) { // nlopt solves h(x)<=0 grad[i] = -gradient(i, marginalIndex); } } // nlopt solves h(x)<=0 return -outP[marginalIndex]; } double NLopt::ComputeEqualityConstraint(const std::vector< double >& x, std::vector< double >& grad, void* f_data) { MarginalData * mData = static_cast(f_data); NLopt *algorithm = mData->p_algo_; const UnsignedInteger marginalIndex = mData->marginalIndex_; const UnsignedInteger dimension = algorithm->getProblem().getDimension(); Point inP(dimension); std::copy(x.begin(), x.end(), inP.begin()); // evaluation Point outP(algorithm->getProblem().getEqualityConstraint()(inP)); // gradient if (!grad.empty()) { Matrix gradient(algorithm->getProblem().getEqualityConstraint().gradient(inP)); for (UnsignedInteger i = 0; i < dimension; ++ i) { grad[i] = gradient(i, marginalIndex); } } return outP[marginalIndex]; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/NearestPointChecker.cxx000066400000000000000000000132671307543307100233570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief NearestPointChecker checks wether the nearest point found is really the nearestpoint * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NearestPointChecker.hxx" #include "openturns/Point.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NearestPointChecker); /* * @brief Standard constructor: the problem is defined by a scalar valued function (in fact, a 1-D vector valued fnction) * and a level value */ /* Constructor with parameters */ NearestPointChecker::NearestPointChecker(const Function & levelFunction, const ComparisonOperator & comparisonOperator, const Scalar threshold, const Sample & sample): PersistentObject(), levelFunction_(levelFunction), comparisonOperator_(comparisonOperator), threshold_(threshold), sample_(sample) { // Nothing to do } /* Virtual constructor */ NearestPointChecker * NearestPointChecker::clone() const { return new NearestPointChecker(*this); } /* LevelFunction accessor */ Function NearestPointChecker::getLevelFunction() const { return levelFunction_; } /* LevelFunction accessor */ void NearestPointChecker::setLevelFunction(const Function & levelFunction) { levelFunction_ = levelFunction; } /* Result accessor */ NearestPointCheckerResult NearestPointChecker::getResult() const { return result_; } /* Result accessor */ void NearestPointChecker::setResult(const NearestPointCheckerResult & result) { result_ = result; } /* Comparison operator accessor */ void NearestPointChecker::setComparisonOperator(const ComparisonOperator & comparisonOperator) { comparisonOperator_ = comparisonOperator; } /* Comparison operator accessor */ ComparisonOperator NearestPointChecker::getComparisonOperator() const { return comparisonOperator_; } /* threshold accessor */ void NearestPointChecker::setThreshold(const Scalar threshold) { threshold_ = threshold; } /* threshold accessor */ Scalar NearestPointChecker::getThreshold() const { return threshold_; } /* sample accessor */ void NearestPointChecker::setSample(const Sample & sample) { sample_ = sample; } /* sample accessor */ const Sample & NearestPointChecker::getSample() const { return sample_; } /* Performs the actual test */ void NearestPointChecker::run() { /* Total number of points to be sampled */ UnsignedInteger pointNumber = sample_.getSize(); /* Compute the level function on the sample */ Sample levelValuesSample(getLevelFunction()(sample_)); Sample notVerifyingPoints(0, Point(sample_.getDimension())); Sample notVerifyingValues(0, Point(levelValuesSample.getDimension())); /* If there is something to classify */ if (pointNumber > 0) { /* Sort the points according to the comparison operator and the threshold */ UnsignedInteger toBeClassified = 0; UnsignedInteger notClassified = pointNumber - 1; /* While some points remain to be classified */ while (toBeClassified < notClassified) { if (getComparisonOperator().compare(levelValuesSample[toBeClassified][0], getThreshold())) // the point verifies the constraint { /* Leave it in place and go to the next point */ toBeClassified++; } else // the point violates the constraint { /* Exchange the point with the last point not already classified */ Point point(sample_[toBeClassified]); Point value(levelValuesSample[toBeClassified]); sample_[toBeClassified] = sample_[notClassified]; sample_[notClassified] = point; levelValuesSample[toBeClassified] = levelValuesSample[notClassified]; levelValuesSample[notClassified] = value; notClassified--; } } /* At the end, we still have to check the point at the position toBeClassified but without updating notClassified, which should be already equals to 0 and then could try to become < 0 */ if (getComparisonOperator().compare(levelValuesSample[toBeClassified][0], getThreshold())) toBeClassified++; /* we split the sample_ in 2 Sample : one with the left side (points verifying the constraint) and the other with the right side (points not verifying the constraint) */ if (toBeClassified < pointNumber) { notVerifyingPoints = sample_.split(toBeClassified); /* we split the levelValuesSample in 2 Samples : one with the left side (points verifying the constraint) and the other with the right side (points not verifying the constraint) */ notVerifyingValues = levelValuesSample.split(toBeClassified); } } /* we affect the 4 samples to result_ */ setResult(NearestPointCheckerResult(sample_, levelValuesSample, notVerifyingPoints, notVerifyingValues)); } /* String converter */ String NearestPointChecker::__repr__() const { OSS oss; oss << "class=" << NearestPointChecker::GetClassName() << " LevelFunction=" << levelFunction_ << " result=" << result_ << " operator=" << comparisonOperator_ << " threshold=" << threshold_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/NearestPointCheckerResult.cxx000066400000000000000000000074371307543307100245600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Result stores the result of a NearestPointChecker * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NearestPointChecker.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NearestPointCheckerResult); /* Default constructor */ NearestPointCheckerResult::NearestPointCheckerResult(): PersistentObject(), verifyingConstraintPoints_(Sample(0, 0)), verifyingConstraintValues_(Sample(0, 0)), violatingConstraintPoints_(Sample(0, 0)), violatingConstraintValues_(Sample(0, 0)) { // Nothing to do } /* Standard constructor */ NearestPointCheckerResult::NearestPointCheckerResult(const Sample & verifyingConstraintPoints, const Sample & verifyingConstraintValues, const Sample & violatingConstraintPoints, const Sample & violatingConstraintValues): PersistentObject(), verifyingConstraintPoints_(verifyingConstraintPoints), verifyingConstraintValues_(verifyingConstraintValues), violatingConstraintPoints_(violatingConstraintPoints), violatingConstraintValues_(violatingConstraintValues) { // Nothing to do } /* Virtual constructor */ NearestPointCheckerResult * NearestPointCheckerResult::clone() const { return new NearestPointCheckerResult(*this); } /* verifyingConstraintPoints accessor */ Sample NearestPointCheckerResult::getVerifyingConstraintPoints() const { return verifyingConstraintPoints_; } /* verifyingConstraintValues accessor */ Sample NearestPointCheckerResult::getVerifyingConstraintValues() const { return verifyingConstraintValues_; } /* violatingConstraintPoints accessor */ Sample NearestPointCheckerResult::getViolatingConstraintPoints() const { return violatingConstraintPoints_; } /* violatingConstraintValues accessor */ Sample NearestPointCheckerResult::getViolatingConstraintValues() const { return violatingConstraintValues_; } /* verifyingConstraintPoints accessor */ void NearestPointCheckerResult::setVerifyingConstraintPoints(const Sample & verifyingConstraintPoints) { verifyingConstraintPoints_ = verifyingConstraintPoints; } /* verifyingConstraintValues accessor */ void NearestPointCheckerResult::setVerifyingConstraintValues(const Sample & verifyingConstraintValues) { verifyingConstraintValues_ = verifyingConstraintValues; } /* violatingConstraintPoints accessor */ void NearestPointCheckerResult::setViolatingConstraintPoints(const Sample & violatingConstraintPoints) { violatingConstraintPoints_ = violatingConstraintPoints; } /* violatingConstraintValues accessor */ void NearestPointCheckerResult::setViolatingConstraintValues(const Sample & violatingConstraintValues) { violatingConstraintValues_ = violatingConstraintValues; } /* String converter */ String NearestPointCheckerResult::__repr__() const { OSS oss; oss << "class=" << NearestPointCheckerResult::GetClassName() << " violatingConstraintPoints=" << violatingConstraintPoints_ << " violatingConstraintValues=" << violatingConstraintValues_ << " verifyingConstraintPoints=" << verifyingConstraintPoints_ << " verifyingConstraintValues=" << verifyingConstraintValues_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/OptimizationAlgorithm.cxx000066400000000000000000000134211307543307100240040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationAlgorithm provides capabilities to solve optimization problems * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Cobyla.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimizationAlgorithm); /* Default constructor */ OptimizationAlgorithm::OptimizationAlgorithm() : TypedInterfaceObject(new OptimizationAlgorithmImplementation()) { // Nothing to do } /* Constructor from an implementation */ OptimizationAlgorithm::OptimizationAlgorithm(const OptimizationAlgorithmImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from a Pointer to an implementation */ OptimizationAlgorithm::OptimizationAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* * @brief Standard constructor: the problem is defined by an OptimizationProblem */ OptimizationAlgorithm::OptimizationAlgorithm(const OptimizationProblem & problem): TypedInterfaceObject(new Cobyla(problem)) { // Nothing to do } /* Starting point accessor */ Point OptimizationAlgorithm::getStartingPoint() const { return getImplementation()->getStartingPoint(); } void OptimizationAlgorithm::setStartingPoint(const Point & startingPoint) { copyOnWrite(); getImplementation()->setStartingPoint(startingPoint); } /* Problem accessor */ OptimizationProblem OptimizationAlgorithm::getProblem() const { return getImplementation()->getProblem(); } void OptimizationAlgorithm::setProblem(const OptimizationProblem & problem) { copyOnWrite(); getImplementation()->setProblem(problem); } /* Result accessor */ OptimizationAlgorithm::Result OptimizationAlgorithm::getResult() const { return getImplementation()->getResult(); } /* Result accessor */ void OptimizationAlgorithm::setResult(const Result & result) { copyOnWrite(); getImplementation()->setResult(result); } /* Maximum iterations number accessor */ UnsignedInteger OptimizationAlgorithm::getMaximumIterationNumber() const { return getImplementation()->getMaximumIterationNumber(); } /* Maximum iterations number accessor */ void OptimizationAlgorithm::setMaximumIterationNumber(const UnsignedInteger maximumIterationNumber) { copyOnWrite(); getImplementation()->setMaximumIterationNumber(maximumIterationNumber); } /* Maximum absolute error accessor */ Scalar OptimizationAlgorithm::getMaximumAbsoluteError() const { return getImplementation()->getMaximumAbsoluteError(); } /* Maximum absolute error accessor */ void OptimizationAlgorithm::setMaximumAbsoluteError(const Scalar maximumAbsoluteError) { copyOnWrite(); getImplementation()->setMaximumAbsoluteError(maximumAbsoluteError); } /* Maximum relative error accessor */ Scalar OptimizationAlgorithm::getMaximumRelativeError() const { return getImplementation()->getMaximumRelativeError(); } /* Maximum relative error accessor */ void OptimizationAlgorithm::setMaximumRelativeError(const Scalar maximumRelativeError) { copyOnWrite(); getImplementation()->setMaximumRelativeError(maximumRelativeError); } /* Maximum residual error accessor */ Scalar OptimizationAlgorithm::getMaximumResidualError() const { return getImplementation()->getMaximumResidualError(); } /* Maximum residual error accessor */ void OptimizationAlgorithm::setMaximumResidualError(const Scalar maximumResidualError) { copyOnWrite(); getImplementation()->setMaximumResidualError(maximumResidualError); } /* Maximum constraint error accessor */ Scalar OptimizationAlgorithm::getMaximumConstraintError() const { return getImplementation()->getMaximumConstraintError(); } /* Maximum constraint error accessor */ void OptimizationAlgorithm::setMaximumConstraintError(const Scalar maximumConstraintError) { copyOnWrite(); getImplementation()->setMaximumConstraintError(maximumConstraintError); } /* Verbose accessor */ Bool OptimizationAlgorithm::getVerbose() const { return getImplementation()->getVerbose(); } /* Verbose accessor */ void OptimizationAlgorithm::setVerbose(const Bool verbose) { copyOnWrite(); getImplementation()->setVerbose(verbose); } /* String converter */ String OptimizationAlgorithm::__repr__() const { OSS oss(true); oss << "class=" << OptimizationAlgorithm::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String OptimizationAlgorithm::__str__(const String & offset) const { return __repr__(); } /* Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void OptimizationAlgorithm::run() { getImplementation()->run(); } void OptimizationAlgorithm::setProgressCallback(ProgressCallback callBack, void * data) { getImplementation()->setProgressCallback(callBack, data); } void OptimizationAlgorithm::setStopCallback(StopCallback callBack, void * data) { getImplementation()->setStopCallback(callBack, data); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/OptimizationAlgorithmImplementation.cxx000066400000000000000000000321321307543307100267120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationAlgorithmImplementation implements an algorithm for solving an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OptimizationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimizationAlgorithmImplementation); /* Default constructor */ OptimizationAlgorithmImplementation::OptimizationAlgorithmImplementation() : PersistentObject() , progressCallback_(std::make_pair(0, 0)) , stopCallback_(std::make_pair(0, 0)) , startingPoint_(Point(0)) , maximumIterationNumber_(ResourceMap::GetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumIteration")) , maximumEvaluationNumber_(ResourceMap::GetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumEvaluationNumber")) , maximumAbsoluteError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumAbsoluteError")) , maximumRelativeError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumRelativeError")) , maximumResidualError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumResidualError")) , maximumConstraintError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumConstraintError")) , verbose_(false) { // Nothing to do } /* * @brief Standard constructor: the optimization problem is managed by the optimization solver, and the actual solver is in charge to check if it is able to solve it. */ OptimizationAlgorithmImplementation::OptimizationAlgorithmImplementation(const OptimizationProblem & problem) : PersistentObject() , progressCallback_(std::make_pair(0, 0)) , stopCallback_(std::make_pair(0, 0)) , problem_(problem) , maximumIterationNumber_(ResourceMap::GetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumIteration")) , maximumEvaluationNumber_(ResourceMap::GetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumEvaluationNumber")) , maximumAbsoluteError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumAbsoluteError")) , maximumRelativeError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumRelativeError")) , maximumResidualError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumResidualError")) , maximumConstraintError_(ResourceMap::GetAsScalar("OptimizationAlgorithm-DefaultMaximumConstraintError")) , verbose_(false) { // Nothing to do } /* Starting point accessor */ Point OptimizationAlgorithmImplementation::getStartingPoint() const { return startingPoint_; } /* Starting point accessor */ void OptimizationAlgorithmImplementation::setStartingPoint(const Point & startingPoint) { startingPoint_ = startingPoint; } /* Result accessor */ OptimizationResult OptimizationAlgorithmImplementation::getResult() const { return result_; } /* Result accessor */ void OptimizationAlgorithmImplementation::setResult(const OptimizationResult & result) { result_ = result; } /* Maximum iterations number accessor */ UnsignedInteger OptimizationAlgorithmImplementation::getMaximumIterationNumber() const { return maximumIterationNumber_; } /* Maximum iterations number accessor */ void OptimizationAlgorithmImplementation::setMaximumIterationNumber(const UnsignedInteger maximumIterationNumber) { maximumIterationNumber_ = maximumIterationNumber; } void OptimizationAlgorithmImplementation::setMaximumEvaluationNumber(const UnsignedInteger maximumEvaluationNumber) { maximumEvaluationNumber_ = maximumEvaluationNumber; } UnsignedInteger OptimizationAlgorithmImplementation::getMaximumEvaluationNumber() const { return maximumEvaluationNumber_; } /* Maximum absolute error accessor */ Scalar OptimizationAlgorithmImplementation::getMaximumAbsoluteError() const { return maximumAbsoluteError_; } /* Maximum absolute error accessor */ void OptimizationAlgorithmImplementation::setMaximumAbsoluteError(const Scalar maximumAbsoluteError) { maximumAbsoluteError_ = maximumAbsoluteError; } /* Maximum relative error accessor */ Scalar OptimizationAlgorithmImplementation::getMaximumRelativeError() const { return maximumRelativeError_; } /* Maximum relative error accessor */ void OptimizationAlgorithmImplementation::setMaximumRelativeError(const Scalar maximumRelativeError) { maximumRelativeError_ = maximumRelativeError; } /* Maximum residual error accessor */ Scalar OptimizationAlgorithmImplementation::getMaximumResidualError() const { return maximumResidualError_; } /* Maximum residual error accessor */ void OptimizationAlgorithmImplementation::setMaximumResidualError(const Scalar maximumResidualError) { maximumResidualError_ = maximumResidualError; } /* Maximum constraint error accessor */ Scalar OptimizationAlgorithmImplementation::getMaximumConstraintError() const { return maximumConstraintError_; } /* Maximum constraint error accessor */ void OptimizationAlgorithmImplementation::setMaximumConstraintError(const Scalar maximumConstraintError) { maximumConstraintError_ = maximumConstraintError; } /* String converter */ String OptimizationAlgorithmImplementation::__repr__() const { OSS oss; oss << "class=" << OptimizationAlgorithmImplementation::GetClassName() << " problem=" << problem_ << " startingPoint=" << startingPoint_ << " maximumIterationNumber=" << maximumIterationNumber_ << " maximumEvaluationNumber=" << maximumEvaluationNumber_ << " maximumAbsoluteError=" << maximumAbsoluteError_ << " maximumRelativeError=" << maximumRelativeError_ << " maximumResidualError=" << maximumResidualError_ << " maximumConstraintError=" << maximumConstraintError_ << " verbose=" << (verbose_ ? "true" : "false"); return oss; } /* Problem accessor */ OptimizationProblem OptimizationAlgorithmImplementation::getProblem() const { return problem_; } void OptimizationAlgorithmImplementation::setProblem(const OptimizationProblem & problem) { checkProblem(problem); problem_ = problem; } /* Performs the actual checks. Must be overloaded by the actual optimisation algorithm */ void OptimizationAlgorithmImplementation::checkProblem(const OptimizationProblem & problem) const { throw NotYetImplementedException(HERE) << "In OptimizationAlgorithmImplementation::checkProblem()"; } /* Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void OptimizationAlgorithmImplementation::run() { throw NotYetImplementedException(HERE) << "In OptimizationAlgorithmImplementation::run()"; } /* Computes the Lagrange multipliers associated with the constraints as a post-processing of the optimal point. Actual algorithms should overload this method. */ /* L(x, l_eq, l_lower_bound, l_upper_bound, l_ineq) = J(x) + l_eq * C_eq(x) + l_lower_bound * (x-lb)^+ + l_upper_bound * (ub-x)^+ + l_ineq * C_ineq^+(x) d/dx(L = d/dx(J) + l_eq * d/dx(C_eq) + l_lower_bound * d/dx(x-lb)^+ + l_upper_bound * d/dx(ub - x)^+ + l_ineq * d/dx(C_ineq^+) The Lagrange multipliers are stored as [l_eq, l_lower_bounds, l_upper_bounds, l_ineq], where: * l_eq is of dimension 0 if no equality constraint, else of dimension the number of scalar equality constraints * l_lower_bounds and l_upper_bounds are of dimension 0 if no bound constraint, else of dimension dim(x) for both of them * l_ineq is of dimension 0 if no inequality constraint, else of dimension the number of scalar inequality constraints so if there is no constraint of any kind, the Lagrange multipliers are of dimension 0. */ Point OptimizationAlgorithmImplementation::computeLagrangeMultipliers(const Point & x) const { const UnsignedInteger equalityDimension = problem_.getEqualityConstraint().getOutputDimension(); const UnsignedInteger inequalityDimension = problem_.getInequalityConstraint().getOutputDimension(); const UnsignedInteger boundDimension = problem_.getBounds().getDimension(); // If no constraint if (equalityDimension + inequalityDimension + boundDimension == 0) return Point(0); // Here we have to compute the Lagrange multipliers as the solution of a linear problem with rhs=[d/dx(C_eq) | d/dx(x-lb)^+ | d/dx(ub - x)^+ | d/dx(C_ineq^+)] and lhs=-d/dx(J) const UnsignedInteger inputDimension = x.getDimension(); // Get the lhs as a Point const Point lhs(Point(*problem_.getObjective().gradient(x).getImplementation()) * (-1.0)); // In order to ease the construction of the rhs matrix, we use its internal storage representation as a Point in column-major storage. Point rhs(0); // First, the equality constraints. Each scalar equality constraint gives a column in the rhs if (equalityDimension > 0) rhs.add(*problem_.getEqualityConstraint().gradient(x).getImplementation()); // Second, the bounds if (boundDimension > 0) { // First the lower bounds const Point lowerBounds(problem_.getBounds().getLowerBound()); for (UnsignedInteger i = 0; i < boundDimension; ++i) { Point boundGradient(inputDimension); // Check if the current lower bound is active up to the tolerance if (std::abs(x[i] - lowerBounds[i]) <= getMaximumConstraintError()) boundGradient[i] = 1.0; rhs.add(boundGradient); } // Lower bounds // Second the upper bounds const Point upperBounds(problem_.getBounds().getUpperBound()); for (UnsignedInteger i = 0; i < boundDimension; ++i) { Point boundGradient(inputDimension); // Check if the current lower bound is active up to the tolerance if (std::abs(upperBounds[i] - x[i]) <= getMaximumConstraintError()) boundGradient[i] = -1.0; rhs.add(boundGradient); } // Upper bounds } // boundDimension > 0 // Third, the inequality constraints if (inequalityDimension > 0) { Point inequality(problem_.getInequalityConstraint()(x)); Matrix gradientInequality(problem_.getInequalityConstraint().gradient(x)); for (UnsignedInteger i = 0; i < inequalityDimension; ++i) { // Check if the current inequality constraint is active up to the tolerance if (std::abs(inequality[i]) <= getMaximumConstraintError()) rhs.add(*gradientInequality.getColumn(i).getImplementation()); else rhs.add(Point(inputDimension)); } } // Inequality constraints return Matrix(inputDimension, rhs.getDimension() / inputDimension, rhs).solveLinearSystem(lhs, false); } /* Virtual constructor */ OptimizationAlgorithmImplementation * OptimizationAlgorithmImplementation::clone() const { return new OptimizationAlgorithmImplementation(*this); } /* Verbose accessor */ Bool OptimizationAlgorithmImplementation::getVerbose() const { return verbose_; } /* Verbose accessor */ void OptimizationAlgorithmImplementation::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Method save() stores the object through the StorageManager */ void OptimizationAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "startingPoint_", startingPoint_); adv.saveAttribute( "problem_", problem_); adv.saveAttribute( "maximumIterationNumber_", maximumIterationNumber_); adv.saveAttribute( "maximumEvaluationNumber_", maximumEvaluationNumber_); adv.saveAttribute( "maximumAbsoluteError_", maximumAbsoluteError_); adv.saveAttribute( "maximumRelativeError_", maximumRelativeError_); adv.saveAttribute( "maximumResidualError_", maximumResidualError_); adv.saveAttribute( "maximumConstraintError_", maximumConstraintError_); adv.saveAttribute( "verbose_", verbose_); } /* Method load() reloads the object from the StorageManager */ void OptimizationAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "startingPoint_", startingPoint_); adv.loadAttribute( "problem_", problem_); adv.loadAttribute( "maximumIterationNumber_", maximumIterationNumber_); adv.loadAttribute( "maximumEvaluationNumber_", maximumEvaluationNumber_); adv.loadAttribute( "maximumAbsoluteError_", maximumAbsoluteError_); adv.loadAttribute( "maximumRelativeError_", maximumRelativeError_); adv.loadAttribute( "maximumResidualError_", maximumResidualError_); adv.loadAttribute( "maximumConstraintError_", maximumConstraintError_); adv.loadAttribute( "verbose_", verbose_); } void OptimizationAlgorithmImplementation::setProgressCallback(ProgressCallback callBack, void * data) { progressCallback_ = std::pair(callBack, data); } void OptimizationAlgorithmImplementation::setStopCallback(StopCallback callBack, void * data) { stopCallback_ = std::pair(callBack, data); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/OptimizationProblem.cxx000066400000000000000000000127721307543307100234660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationProblem implements an algorithm for finding the * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OptimizationProblem.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimizationProblem); /* Default constructor */ OptimizationProblem::OptimizationProblem() : TypedInterfaceObject(new OptimizationProblemImplementation()) { // Nothing to do } /* Constructor from an implementation */ OptimizationProblem::OptimizationProblem(const OptimizationProblemImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from a Pointer to an implementation */ OptimizationProblem::OptimizationProblem(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with constraints, bounds */ OptimizationProblem::OptimizationProblem(const Function & objective) : TypedInterfaceObject(new OptimizationProblemImplementation(objective)) { // Nothing to do } /* Constructor with constraints, bounds */ OptimizationProblem::OptimizationProblem(const Function & objective, const Function & equalityConstraint, const Function & inequalityConstraint, const Interval & bounds): TypedInterfaceObject(new OptimizationProblemImplementation(objective, equalityConstraint, inequalityConstraint, bounds)) { // Nothing to do } /* Constructor for nearest point problem */ OptimizationProblem::OptimizationProblem(const Function & levelFunction, Scalar levelValue) : TypedInterfaceObject(new OptimizationProblemImplementation(levelFunction, levelValue)) { // Nothing to do } /* Objective accessor */ Function OptimizationProblem::getObjective() const { return getImplementation()->getObjective(); } void OptimizationProblem::setObjective(const Function & objective) { copyOnWrite(); getImplementation()->setObjective(objective); } Bool OptimizationProblem::hasMultipleObjective() const { return getImplementation()->hasMultipleObjective(); } /* Equality constraint accessor */ Function OptimizationProblem::getEqualityConstraint() const { return getImplementation()->getEqualityConstraint(); } void OptimizationProblem::setEqualityConstraint(const Function & equalityConstraint) { copyOnWrite(); getImplementation()->setEqualityConstraint(equalityConstraint); } Bool OptimizationProblem::hasEqualityConstraint() const { return getImplementation()->hasEqualityConstraint(); } /* Inequality constraint accessor */ Function OptimizationProblem::getInequalityConstraint() const { return getImplementation()->getInequalityConstraint(); } void OptimizationProblem::setInequalityConstraint(const Function & inequalityConstraint) { copyOnWrite(); getImplementation()->setInequalityConstraint(inequalityConstraint); } Bool OptimizationProblem::hasInequalityConstraint() const { return getImplementation()->hasInequalityConstraint(); } /* Bounds accessor */ Interval OptimizationProblem::getBounds() const { return getImplementation()->getBounds(); } void OptimizationProblem::setBounds(const Interval & bounds) { copyOnWrite(); getImplementation()->setBounds(bounds); } Bool OptimizationProblem::hasBounds() const { return getImplementation()->hasBounds(); } /* Level function accessor */ Function OptimizationProblem::getLevelFunction() const { return getImplementation()->getLevelFunction(); } void OptimizationProblem::setLevelFunction(const Function & levelFunction) { copyOnWrite(); getImplementation()->setLevelFunction(levelFunction); } Bool OptimizationProblem::hasLevelFunction() const { return getImplementation()->hasLevelFunction(); } /* Level value accessor */ Scalar OptimizationProblem::getLevelValue() const { return getImplementation()->getLevelValue(); } void OptimizationProblem::setLevelValue(Scalar levelValue) { getImplementation()->setLevelValue(levelValue); } /* Dimension accessor */ UnsignedInteger OptimizationProblem::getDimension() const { return getImplementation()->getDimension(); } /* Minimization accessor */ void OptimizationProblem::setMinimization(Bool minimization) { copyOnWrite(); getImplementation()->setMinimization(minimization); } Bool OptimizationProblem::isMinimization() const { return getImplementation()->isMinimization(); } /* String converter */ String OptimizationProblem::__repr__() const { OSS oss(true); oss << "class=" << OptimizationProblem::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String OptimizationProblem::__str__(const String & offset) const { return __repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/OptimizationProblemImplementation.cxx000066400000000000000000000233211307543307100263640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationProblemImplementation allows to describe an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OptimizationProblemImplementation.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/QuadraticFunction.hxx" #include "openturns/LinearFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimizationProblemImplementation); static const Factory Factory_OptimizationProblemImplementation; /* Default constructor */ OptimizationProblemImplementation::OptimizationProblemImplementation() : PersistentObject() , objective_() , equalityConstraint_() , inequalityConstraint_() , bounds_() , minimization_(true) , dimension_(0) { // Nothing to do } OptimizationProblemImplementation::OptimizationProblemImplementation(const Function & objective) : PersistentObject() , objective_(objective) , minimization_(true) , dimension_(objective.getInputDimension()) { // nothing to do } /* * @brief General multi-objective equality, inequality and bound constraints */ OptimizationProblemImplementation::OptimizationProblemImplementation(const Function & objective, const Function & equalityConstraint, const Function & inequalityConstraint, const Interval & bounds) : PersistentObject() , objective_(objective) , minimization_(true) , dimension_(objective.getInputDimension()) { setEqualityConstraint(equalityConstraint); setInequalityConstraint(inequalityConstraint); setBounds(bounds); } /* Constructor for nearest point problem */ OptimizationProblemImplementation::OptimizationProblemImplementation(const Function & levelFunction, Scalar levelValue) : PersistentObject() , objective_() , equalityConstraint_() , inequalityConstraint_() , bounds_() , levelValue_(levelValue) , minimization_(true) , dimension_(0) { setLevelFunction(levelFunction); } /* Virtual constructor */ OptimizationProblemImplementation * OptimizationProblemImplementation::clone() const { return new OptimizationProblemImplementation(*this); } /* Objective accessor */ Function OptimizationProblemImplementation::getObjective() const { return objective_; } void OptimizationProblemImplementation::setObjective(const Function & objective) { if (objective.getInputDimension() != objective_.getInputDimension()) { // clear constraints, bounds LOGWARN(OSS() << "Clearing constraints and bounds"); equalityConstraint_ = Function(); inequalityConstraint_ = Function(); bounds_ = Interval(0); } clearLevelFunction(); objective_ = objective; // Update dimension_ member accordingly dimension_ = objective.getInputDimension(); } Bool OptimizationProblemImplementation::hasMultipleObjective() const { return objective_.getOutputDimension() > 1; } /* Equality constraint accessor */ Function OptimizationProblemImplementation::getEqualityConstraint() const { return equalityConstraint_; } void OptimizationProblemImplementation::setEqualityConstraint(const Function & equalityConstraint) { if ((equalityConstraint.getInputDimension() > 0) && (equalityConstraint.getInputDimension() != dimension_)) throw InvalidArgumentException(HERE) << "Error: the given equality constraints have an input dimension=" << equalityConstraint.getInputDimension() << " different from the input dimension=" << dimension_ << " of the objective."; clearLevelFunction(); equalityConstraint_ = equalityConstraint; } Bool OptimizationProblemImplementation::hasEqualityConstraint() const { return equalityConstraint_.getEvaluation()->isActualImplementation(); } /* Inequality constraint accessor */ Function OptimizationProblemImplementation::getInequalityConstraint() const { return inequalityConstraint_; } void OptimizationProblemImplementation::setInequalityConstraint(const Function & inequalityConstraint) { if ((inequalityConstraint.getInputDimension() > 0) && (inequalityConstraint.getInputDimension() != dimension_)) throw InvalidArgumentException(HERE) << "Error: the given inequality constraints have an input dimension=" << inequalityConstraint.getInputDimension() << " different from the input dimension=" << dimension_ << " of the objective."; clearLevelFunction(); inequalityConstraint_ = inequalityConstraint; } Bool OptimizationProblemImplementation::hasInequalityConstraint() const { return inequalityConstraint_.getEvaluation()->isActualImplementation(); } /* Bounds accessor */ Interval OptimizationProblemImplementation::getBounds() const { return bounds_; } void OptimizationProblemImplementation::setBounds(const Interval & bounds) { if ((bounds.getDimension() > 0) && (bounds.getDimension() != dimension_)) throw InvalidArgumentException(HERE) << "Error: the given bounds are of dimension=" << bounds.getDimension() << " different from the input dimension=" << dimension_ << " of the objective."; bounds_ = bounds; } Bool OptimizationProblemImplementation::hasBounds() const { return bounds_.getDimension() > 0; } /* Level function accessor */ Function OptimizationProblemImplementation::getLevelFunction() const { return levelFunction_; } void OptimizationProblemImplementation::setLevelFunction(const Function & levelFunction) { if (levelFunction.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: level function has an output dimension=" << levelFunction.getOutputDimension() << " but only dimension 1 is supported."; levelFunction_ = levelFunction; dimension_ = levelFunction_.getInputDimension(); // Update objective function const Point center(dimension_); const Point constant(1); const Matrix linear(dimension_, 1); const IdentityMatrix identity(dimension_); const SymmetricTensor quadratic(dimension_, 1, *(identity.getImplementation().get())); objective_ = QuadraticFunction(center, constant, linear, quadratic); setNearestPointConstraints(); } Bool OptimizationProblemImplementation::hasLevelFunction() const { return levelFunction_.getEvaluation()->isActualImplementation(); } /* Level value accessor */ Scalar OptimizationProblemImplementation::getLevelValue() const { return levelValue_; } void OptimizationProblemImplementation::setLevelValue(Scalar levelValue) { levelValue_ = levelValue; // Update constraints if (hasLevelFunction()) setNearestPointConstraints(); } void OptimizationProblemImplementation::setNearestPointConstraints() { const Point center(dimension_); const Matrix linear(dimension_, 1); LinearFunction constantFunction(center, Point(1, levelValue_), linear.transpose()); Function equalityConstraint(levelFunction_); equalityConstraint_ = equalityConstraint.operator - (constantFunction); inequalityConstraint_ = Function(); } void OptimizationProblemImplementation::clearLevelFunction() { LOGWARN(OSS() << "Clearing level function"); levelFunction_ = Function(); levelValue_ = 0.0; } /* Dimension accessor */ UnsignedInteger OptimizationProblemImplementation::getDimension() const { return dimension_; } /* Minimization accessor */ void OptimizationProblemImplementation::setMinimization(Bool minimization) { minimization_ = minimization; } Bool OptimizationProblemImplementation::isMinimization() const { return minimization_; } /* String converter */ String OptimizationProblemImplementation::__repr__() const { OSS oss; oss << "class=" << OptimizationProblemImplementation::GetClassName(); if (hasLevelFunction()) { oss << " level function=" << levelFunction_.__repr__() << " level value=" << levelValue_; } else { oss << " objective=" << objective_ << " equality constraint=" << (hasEqualityConstraint() ? equalityConstraint_.__repr__() : "none") << " inequality constraint=" << (hasInequalityConstraint() ? inequalityConstraint_.__repr__() : "none"); } oss << " bounds=" << (hasBounds() ? bounds_.__repr__() : "none") << " minimization=" << minimization_ << " dimension=" << dimension_; return oss; } /* Method save() stores the object through the StorageManager */ void OptimizationProblemImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "objective_", objective_ ); adv.saveAttribute( "equalityConstraint_", equalityConstraint_ ); adv.saveAttribute( "inequalityConstraint_", inequalityConstraint_ ); adv.saveAttribute( "bounds_", bounds_ ); adv.saveAttribute( "minimization_", minimization_ ); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void OptimizationProblemImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "objective_", objective_ ); adv.loadAttribute( "equalityConstraint_", equalityConstraint_ ); adv.loadAttribute( "inequalityConstraint_", inequalityConstraint_ ); adv.loadAttribute( "bounds_", bounds_ ); adv.loadAttribute( "minimization_", minimization_ ); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/OptimizationResult.cxx000066400000000000000000000273111307543307100233370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationResult stores the result of a OptimizationAlgorithmImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OptimizationResult.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Curve.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimizationResult); static const Factory Factory_OptimizationResult; /* Default constructor */ OptimizationResult::OptimizationResult() : PersistentObject() , optimalPoint_(0) , optimalValue_(0) , iterationNumber_(0) , absoluteError_(-1.0) , relativeError_(-1.0) , residualError_(-1.0) , constraintError_(-1.0) , lagrangeMultipliers_(0) , absoluteErrorHistory_() , relativeErrorHistory_() , residualErrorHistory_() , constraintErrorHistory_() , inputHistory_() , outputHistory_() , problem_() { // Nothing to do } /* Standard constructor */ OptimizationResult::OptimizationResult(const Point & optimalPoint, const Point & optimalValue, const UnsignedInteger iterationNumber, const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const Scalar constraintError, const OptimizationProblem & problem) : PersistentObject() , optimalPoint_(optimalPoint) , optimalValue_(optimalValue) , iterationNumber_(iterationNumber) , absoluteError_(absoluteError) , relativeError_(relativeError) , residualError_(residualError) , constraintError_(constraintError) , lagrangeMultipliers_(0) , absoluteErrorHistory_() , relativeErrorHistory_() , residualErrorHistory_() , constraintErrorHistory_() , inputHistory_() , outputHistory_() , problem_(problem) { // Nothing to do } /* Virtual constructor */ OptimizationResult * OptimizationResult::clone() const { return new OptimizationResult(*this); } /* OptimalPoint accessors */ Point OptimizationResult::getOptimalPoint() const { return optimalPoint_; } void OptimizationResult::setOptimalPoint(const Point & optimalPoint) { optimalPoint_ = optimalPoint; } /* Optimal value accessors */ Point OptimizationResult::getOptimalValue() const { return optimalValue_; } void OptimizationResult::setOptimalValue(const Point & optimalValue) { optimalValue_ = optimalValue; } /* Iteration number accessor */ UnsignedInteger OptimizationResult::getIterationNumber() const { return iterationNumber_; } void OptimizationResult::setIterationNumber(const UnsignedInteger iterationNumber) { iterationNumber_ = iterationNumber; } /* Absolute error accessor */ Scalar OptimizationResult::getAbsoluteError() const { return absoluteError_; } Sample OptimizationResult::getAbsoluteErrorHistory() const { return absoluteErrorHistory_.getSample(); } /* Absolute error accessor */ void OptimizationResult::setAbsoluteError(const Scalar absoluteError) { absoluteError_ = absoluteError; } /* Relative error accessor */ Scalar OptimizationResult::getRelativeError() const { return relativeError_; } Sample OptimizationResult::getRelativeErrorHistory() const { return relativeErrorHistory_.getSample(); } /* Relative error accessor */ void OptimizationResult::setRelativeError(const Scalar relativeError) { relativeError_ = relativeError; } /* Residual error accessor */ Scalar OptimizationResult::getResidualError() const { return residualError_; } Sample OptimizationResult::getResidualErrorHistory() const { return residualErrorHistory_.getSample(); } /* Residual error accessor */ void OptimizationResult::setResidualError(const Scalar residualError) { residualError_ = residualError; } /* Constraint error accessor */ Scalar OptimizationResult::getConstraintError() const { return constraintError_; } Sample OptimizationResult::getConstraintErrorHistory() const { return constraintErrorHistory_.getSample(); } /* Constraint error accessor */ void OptimizationResult::setConstraintError(const Scalar constraintError) { constraintError_ = constraintError; } Sample OptimizationResult::getInputSample() const { return inputHistory_.getSample(); } Sample OptimizationResult::getOutputSample() const { return outputHistory_.getSample(); } void OptimizationResult::setProblem(const OptimizationProblem & problem) { problem_ = problem; } OptimizationProblem OptimizationResult::getProblem() const { return problem_; } /* Lagrange multipliers accessor */ void OptimizationResult::setLagrangeMultipliers(const Point & lagrangeMultipliers) { lagrangeMultipliers_ = lagrangeMultipliers; } Point OptimizationResult::getLagrangeMultipliers() const { return lagrangeMultipliers_; } /* String converter */ String OptimizationResult::__repr__() const { OSS oss; oss << "class=" << OptimizationResult::GetClassName() << " optimal point=" << optimalPoint_ << " optimal value=" << optimalValue_ << " iterationNumber=" << iterationNumber_ << " absoluteError=" << getAbsoluteError() << " relativeError=" << getRelativeError() << " residualError=" << getResidualError() << " constraintError=" << getConstraintError() << " lagrangeMultipliers=" << lagrangeMultipliers_ << " problem=" << problem_; return oss; } /* Method save() stores the object through the StorageManager */ void OptimizationResult::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "optimalPoint_", optimalPoint_ ); adv.saveAttribute( "optimalValue_", optimalValue_ ); adv.saveAttribute( "iterationNumber_", iterationNumber_ ); adv.saveAttribute( "absoluteError_", absoluteError_ ); adv.saveAttribute( "relativeError_", relativeError_ ); adv.saveAttribute( "residualError_", residualError_ ); adv.saveAttribute( "constraintError_", constraintError_ ); adv.saveAttribute( "lagrangeMultipliers_", lagrangeMultipliers_ ); adv.saveAttribute( "absoluteErrorHistory_", absoluteErrorHistory_ ); adv.saveAttribute( "relativeErrorHistory_", relativeErrorHistory_ ); adv.saveAttribute( "residualErrorHistory_", residualErrorHistory_ ); adv.saveAttribute( "constraintErrorHistory_", constraintErrorHistory_ ); adv.saveAttribute( "inputHistory_", inputHistory_ ); adv.saveAttribute( "outputHistory_", outputHistory_ ); adv.saveAttribute( "problem_", problem_ ); } /* Method load() reloads the object from the StorageManager */ void OptimizationResult::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "optimalPoint_", optimalPoint_ ); adv.loadAttribute( "optimalValue_", optimalValue_ ); adv.loadAttribute( "iterationNumber_", iterationNumber_ ); adv.loadAttribute( "absoluteError_", absoluteError_ ); adv.loadAttribute( "relativeError_", relativeError_ ); adv.loadAttribute( "residualError_", residualError_ ); adv.loadAttribute( "constraintError_", constraintError_ ); adv.loadAttribute( "lagrangeMultipliers_", lagrangeMultipliers_ ); adv.loadAttribute( "absoluteErrorHistory_", absoluteErrorHistory_ ); adv.loadAttribute( "relativeErrorHistory_", relativeErrorHistory_ ); adv.loadAttribute( "residualErrorHistory_", residualErrorHistory_ ); adv.loadAttribute( "constraintErrorHistory_", constraintErrorHistory_ ); adv.loadAttribute( "inputHistory_", inputHistory_ ); adv.loadAttribute( "outputHistory_", outputHistory_ ); adv.loadAttribute( "problem_", problem_ ); } /* Incremental history storage */ void OptimizationResult::store(const Point & x, const Point & y, const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const Scalar constraintError) { // assume the last point stored is the optimum optimalPoint_ = x; optimalValue_ = y; // update values absoluteError_ = absoluteError; relativeError_ = relativeError; residualError_ = residualError; constraintError_ = constraintError; // append values absoluteErrorHistory_.store(Point(1, absoluteError)); relativeErrorHistory_.store(Point(1, relativeError)); residualErrorHistory_.store(Point(1, residualError)); constraintErrorHistory_.store(Point(1, constraintError)); inputHistory_.store(x); outputHistory_.store(y); } Graph OptimizationResult::drawErrorHistory() const { Graph result("Error history", "Iteration number", "Error value", true, "topright", 1.0, GraphImplementation::LOGY); result.setGrid(true); result.setGridColor("black"); // create a sample with the iteration number to be plotted as x data const UnsignedInteger size = getAbsoluteErrorHistory().getSize(); { Sample data(getAbsoluteErrorHistory()); for (UnsignedInteger i = 0; i < size; ++i) if (data[i][0] <= 0.0) data[i][0] = SpecFunc::ScalarEpsilon; Curve absoluteErrorCurve( data, "absolute error" ); absoluteErrorCurve.setLegend("absolute error"); absoluteErrorCurve.setColor("red"); result.add( absoluteErrorCurve ); } // Relative error { Sample data(getRelativeErrorHistory()); for (UnsignedInteger i = 0; i < size; ++i) if (data[i][0] <= 0.0) data[i][0] = SpecFunc::ScalarEpsilon; Curve relativeErrorCurve( data, "relative error" ); relativeErrorCurve.setLegend("relative error"); relativeErrorCurve.setColor("blue"); result.add( relativeErrorCurve ); } // Residual error { Sample data(getResidualErrorHistory()); for (UnsignedInteger i = 0; i < size; ++i) if (data[i][0] <= 0.0) data[i][0] = SpecFunc::ScalarEpsilon; Curve residualErrorCurve( data, "residual error" ); residualErrorCurve.setLegend("residual error"); residualErrorCurve.setColor("green"); result.add( residualErrorCurve ); } // Constraint error { Sample data(getConstraintErrorHistory()); for (UnsignedInteger i = 0; i < size; ++i) if (data[i][0] <= 0.0) data[i][0] = SpecFunc::ScalarEpsilon; Curve constraintErrorCurve( data, "constraint error" ); constraintErrorCurve.setLegend("constraint error"); constraintErrorCurve.setColor("magenta"); result.add( constraintErrorCurve ); } return result; } /* Draw optimal value graph */ Graph OptimizationResult::drawOptimalValueHistory() const { Graph result("Optimal value history", "Iteration number", "Optimal value", true, "topright", 1.0); result.setGrid(true); result.setGridColor("black"); Sample data(getOutputSample()); const UnsignedInteger size = data.getSize(); const Bool minimization = problem_.isMinimization(); for (UnsignedInteger i = 1; i < size; ++ i) { const UnsignedInteger j = 0; if (!((minimization && (data[i][j] < data[i - 1][j])) || (!minimization && (data[i][j] > data[i - 1][j])))) { data[i][j] = data[i - 1][j]; } } Curve optimalValueCurve(data, "optimal value"); optimalValueCurve.setLegend("optimal value"); optimalValueCurve.setColor("red"); result.add(optimalValueCurve); return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/SQP.cxx000066400000000000000000000264411307543307100201200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SQP is an actual implementation for * OptimizationAlgorithmImplementation using the SQP algorithm. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/SQP.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OptimizationProblem.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SQP); static const Factory Factory_SQP; /* Default constructor */ SQP::SQP() : OptimizationAlgorithmImplementation() , tau_(ResourceMap::GetAsScalar("SQP-DefaultTau")) , omega_(ResourceMap::GetAsScalar("SQP-DefaultOmega")) , smooth_(ResourceMap::GetAsScalar("SQP-DefaultSmooth")) { initialize(); } SQP::SQP(const OptimizationProblem & problem) : OptimizationAlgorithmImplementation(problem) , tau_(ResourceMap::GetAsScalar("SQP-DefaultTau")) , omega_(ResourceMap::GetAsScalar("SQP-DefaultOmega")) , smooth_(ResourceMap::GetAsScalar("SQP-DefaultSmooth")) { initialize(); checkProblem(problem); } SQP::SQP (const OptimizationProblem & problem, const Scalar tau, const Scalar omega, const Scalar smooth) : OptimizationAlgorithmImplementation(problem) , tau_(tau) , omega_(omega) , smooth_(smooth) { initialize(); checkProblem(problem); } /* Virtual constructor */ SQP * SQP::clone() const { return new SQP(*this); } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void SQP::checkProblem(const OptimizationProblem & problem) const { if (!problem.hasLevelFunction()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " can only solve nearest-point optimization problems"; if (problem.hasMultipleObjective()) throw InvalidArgumentException(HERE) << "Error: " << this->getClassName() << " does not support multi-objective optimization"; if (problem.hasBounds()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " cannot solve bound-constrained optimization problems"; } void SQP::initialize() { currentSigma_ = 0.0; currentLevelValue_ = 0.0; currentLambda_ = 0.0; } /* Line search for globalization of the algorithm */ Scalar SQP::computeLineSearch() { /* Local copy of the level function and the level value */ const Function levelFunction(getProblem().getLevelFunction()); const Scalar levelValue = getProblem().getLevelValue(); /* Actualize sigma */ currentSigma_ = std::max(currentSigma_ + 1.0, smooth_ * currentPoint_.norm() / currentGradient_.norm()); /* Compute penalized scalar objective function at current point */ Scalar currentTheta = 0.5 * currentPoint_.normSquare() + currentSigma_ * std::abs(currentLevelValue_ - levelValue); /* Min bound for step */ const Scalar minStep = getMaximumAbsoluteError() / currentDirection_.norm(); /* Minimum decrease for the penalized objective function */ const Scalar levelIncrement = omega_ * dot(currentPoint_ + (currentSigma_ * ((currentLevelValue_ > levelValue) ? 1.0 : -1.0)) * currentGradient_, currentDirection_); /* Initialization of the line search */ /* We start with step=1 */ Scalar step = 1.0; Point currentStepPoint(currentPoint_.getDimension()); Scalar currentStepLevelValue = -1.0; Scalar currentStepTheta = -1.0; do { currentStepPoint = currentPoint_ + step * currentDirection_; currentStepLevelValue = levelFunction(currentStepPoint)[0]; currentStepTheta = 0.5 * currentStepPoint.normSquare() + currentSigma_ * std::abs(currentStepLevelValue - levelValue); if (getVerbose()) LOGINFO(OSS() << "line search step=" << step << " currentStepPoint=" << currentStepPoint << " currentStepLevelValue=" << currentStepLevelValue << " currentStepTheta=" << currentStepTheta); step *= tau_; } while ((step >= minStep) && ( currentStepTheta > currentTheta + step * levelIncrement)); currentPoint_ = currentStepPoint; currentLevelValue_ = currentStepLevelValue; /* We went one step beyond */ return step / tau_; } /* Performs the actual computation by using the SQP algorithm */ void SQP::run() { initialize(); //system and direction initialization : /* Current point -> u */ currentPoint_ = getStartingPoint(); const UnsignedInteger dimension = currentPoint_.getDimension(); currentSystemMatrix_ = SymmetricMatrix(dimension + 1); currentSecondMember_ = Point(dimension + 1); currentDirection_ = Point(dimension); /* Get a local copy of the level function */ const Function levelFunction(getProblem().getLevelFunction()); /* Get a local copy of the level value */ const Scalar levelValue = getProblem().getLevelValue(); //Initialize the hessian currentHessian_ = levelFunction.hessian(currentPoint_).getSheet(0); Bool convergence = false; UnsignedInteger iterationNumber = 0; Scalar absoluteError = -1.0; Scalar constraintError = -1.0; Scalar relativeError = -1.0; Scalar residualError = -1.0; /* Compute the level function at the current point -> G */ currentLevelValue_ = levelFunction(currentPoint_)[0]; // reset result result_ = OptimizationResult(); result_.setProblem(getProblem()); result_.store(currentPoint_, Point(1, currentLevelValue_), absoluteError, relativeError, residualError, constraintError); while ( (!convergence) && (iterationNumber <= getMaximumIterationNumber()) ) { /* Go to next iteration */ ++iterationNumber; /* Compute the level function gradient at the current point -> Grad(G) */ currentGradient_ = levelFunction.gradient(currentPoint_) * Point(1, 1.0); /* Compute the current Lagrange multiplier */ const Scalar normGradientSquared = currentGradient_.normSquare(); /* In case of a null gradient, throw an internal exception */ if (normGradientSquared == 0) { throw InternalException(HERE) << "Error in Abdo SQP algorithm: the gradient of the level function is zero at point u=" << currentPoint_; } //compute System matrix for evaluation of the direction for ( UnsignedInteger i = 0; i < dimension; ++i ) { for ( UnsignedInteger j = 0; j < i + 1; ++j ) { currentSystemMatrix_( i, j ) = currentLambda_ * currentHessian_( i, j ); } currentSystemMatrix_( i, i) += 2; currentSystemMatrix_( i, dimension ) = currentGradient_[i]; } //compute System second member for ( UnsignedInteger i = 0; i < dimension; ++i ) { currentSecondMember_[i] = -currentPoint_[i]; } currentSecondMember_[dimension] = -currentLevelValue_ + levelValue; //solve the linear system const Point solution(currentSystemMatrix_.solveLinearSystem(currentSecondMember_)); std::copy(solution.begin(), solution.end() - 1, currentDirection_.begin()); currentLambda_ = solution[dimension]; /* Perform a line search in the given direction */ const Scalar alpha = computeLineSearch(); /* Check if convergence has been achieved */ absoluteError = std::abs(alpha) * currentDirection_.norm(); constraintError = std::abs(currentLevelValue_ - levelValue); const Scalar pointNorm = currentPoint_.norm(); if (pointNorm > 0.0) { relativeError = absoluteError / pointNorm; } else { relativeError = -1.0; } residualError = (currentPoint_ + currentLambda_ * currentGradient_).norm(); convergence = ((absoluteError < getMaximumAbsoluteError()) && (relativeError < getMaximumRelativeError())) || ((residualError < getMaximumResidualError()) && (constraintError < getMaximumConstraintError())); // update result result_.setIterationNumber(iterationNumber); result_.store(currentPoint_, Point(1, currentLevelValue_), absoluteError, relativeError, residualError, constraintError); result_.setLagrangeMultipliers(Point(1, currentLambda_)); LOGINFO(getResult().__repr__()); // callbacks if (progressCallback_.first) { progressCallback_.first((100.0 * iterationNumber) / getMaximumIterationNumber(), progressCallback_.second); } if (stopCallback_.first) { Bool stop = stopCallback_.first(stopCallback_.second); if (stop) { convergence = true; LOGWARN(OSS() << "SQP was stopped by user"); } } } /* Check if we converged */ if (!convergence) { LOGWARN(OSS() << "Warning! The SQP algorithm failed to converge after " << getMaximumIterationNumber() << " iterations"); } } // run() /* Tau accessor */ Scalar SQP::getTau() const { return tau_; } void SQP::setTau(const Scalar tau) { tau_ = tau; } /* Omega accessor */ Scalar SQP::getOmega() const { return omega_; } void SQP::setOmega(const Scalar omega) { omega_ = omega; } /* Smooth accessor */ Scalar SQP::getSmooth() const { return smooth_; } void SQP::setSmooth(const Scalar smooth) { smooth_ = smooth; } /* String converter */ String SQP::__repr__() const { OSS oss; oss << "class=" << SQP::GetClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " tau=" << tau_ << " omega=" << omega_ << " smooth=" << smooth_; return oss; } /* Method save() stores the object through the StorageManager */ void SQP::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("tau_", tau_); adv.saveAttribute("omega_", omega_); adv.saveAttribute("smooth_", smooth_); adv.saveAttribute("currentSigma_", currentSigma_); adv.saveAttribute("currentPoint_", currentPoint_); adv.saveAttribute("currentDirection_", currentDirection_); adv.saveAttribute("currentLevelValue_", currentLevelValue_); adv.saveAttribute("currentGradient_", currentGradient_); adv.saveAttribute("currentHessian_", currentHessian_); adv.saveAttribute("currentSystemMatrix_", currentSystemMatrix_); adv.saveAttribute("currentSecondMember_", currentSecondMember_); adv.saveAttribute("currentLambda_", currentLambda_); } /* Method load() reloads the object from the StorageManager */ void SQP::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("tau_", tau_); adv.loadAttribute("omega_", omega_); adv.loadAttribute("smooth_", smooth_); adv.loadAttribute("currentSigma_", currentSigma_); adv.loadAttribute("currentPoint_", currentPoint_); adv.loadAttribute("currentDirection_", currentDirection_); adv.loadAttribute("currentLevelValue_", currentLevelValue_); adv.loadAttribute("currentGradient_", currentGradient_); adv.loadAttribute("currentHessian_", currentHessian_); adv.loadAttribute("currentSystemMatrix_", currentSystemMatrix_); adv.loadAttribute("currentSecondMember_", currentSecondMember_); adv.loadAttribute("currentLambda_", currentLambda_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/TNC.cxx000066400000000000000000000347751307543307100201120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TNC is an actual implementation for OptimizationAlgorithmImplementation using the TNC library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // For HUGE_VAL #include "openturns/TNC.hxx" #include "algotnc.h" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TNC); static const Factory Factory_TNC; /* Default constructor */ TNC::TNC() : OptimizationAlgorithmImplementation() , maxCGit_(ResourceMap::GetAsUnsignedInteger("TNC-DefaultMaxCGit")) , eta_(ResourceMap::GetAsScalar("TNC-DefaultEta")) , stepmx_(ResourceMap::GetAsScalar("TNC-DefaultStepmx")) , accuracy_(ResourceMap::GetAsScalar("TNC-DefaultAccuracy")) , fmin_(ResourceMap::GetAsScalar("TNC-DefaultFmin")) , rescale_(ResourceMap::GetAsScalar("TNC-DefaultRescale")) , p_nfeval_(0) { // Nothing to do } /* Constructor with parameters */ TNC::TNC(const OptimizationProblem & problem) : OptimizationAlgorithmImplementation(problem) , maxCGit_(ResourceMap::GetAsUnsignedInteger("TNC-DefaultMaxCGit")) , eta_(ResourceMap::GetAsScalar("TNC-DefaultEta")) , stepmx_(ResourceMap::GetAsScalar("TNC-DefaultStepmx")) , accuracy_(ResourceMap::GetAsScalar("TNC-DefaultAccuracy")) , fmin_(ResourceMap::GetAsScalar("TNC-DefaultFmin")) , rescale_(ResourceMap::GetAsScalar("TNC-DefaultRescale")) , p_nfeval_(0) { checkProblem(problem); } /* Constructor with parameters */ TNC::TNC (const OptimizationProblem & problem, const Point & scale, const Point & offset, const UnsignedInteger maxCGit, const Scalar eta, const Scalar stepmx, const Scalar accuracy, const Scalar fmin, const Scalar rescale) : OptimizationAlgorithmImplementation(problem) , scale_(scale) , offset_(offset) , maxCGit_(maxCGit) , eta_(eta) , stepmx_(stepmx) , accuracy_(accuracy) , fmin_(fmin) , rescale_(rescale) , p_nfeval_(0) { checkProblem(problem); } /* Virtual constructor */ TNC * TNC::clone() const { return new TNC(*this); } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void TNC::checkProblem(const OptimizationProblem & problem) const { if (problem.hasMultipleObjective()) throw InvalidArgumentException(HERE) << "Error: " << this->getClassName() << " does not support multi-objective optimization"; if (problem.hasInequalityConstraint() || problem.hasEqualityConstraint()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " does not support constraints"; } /* Performs the actual computation by calling the TNC algorithm */ void TNC::run() { const UnsignedInteger dimension = getProblem().getDimension(); Interval boundConstraints(getProblem().getBounds()); if (!getProblem().hasBounds()) { boundConstraints = Interval(Point(dimension, 0.0), Point(dimension, 1.0), Interval::BoolCollection(dimension, false), Interval::BoolCollection(dimension, false)); } Point x(getStartingPoint()); if (x.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Invalid starting point dimension (" << x.getDimension() << "), expected " << dimension; Point low(boundConstraints.getLowerBound()); Point up(boundConstraints.getUpperBound()); Interval::BoolCollection finiteLow(boundConstraints.getFiniteLowerBound()); Interval::BoolCollection finiteUp(boundConstraints.getFiniteUpperBound()); /* Set the infinite bounds to HUGE_VAL (defined in cmath) with the correct signs */ for (UnsignedInteger i = 0; i < dimension; ++i) { if (!finiteLow[i]) low[i] = -HUGE_VAL; if (!finiteUp[i]) up[i] = HUGE_VAL; } tnc_message message((getVerbose() ? TNC_MSG_ALL : TNC_MSG_NONE)); Point scale(getScale()); Point offset(getOffset()); double *refScale(scale.getDimension() == 0 ? NULL : &scale[0]); double *refOffset(offset.getDimension() == 0 ? NULL : &offset[0]); int nfeval = 0; p_nfeval_ = &nfeval; // clear history evaluationInputHistory_ = Sample(0.0, dimension); evaluationOutputHistory_ = Sample(0.0, 2); Scalar f = -1.0; /* * tnc : minimize a function with variables subject to bounds, using * gradient information. * * n : number of variables (must be >= 0) * x : on input, initial estimate ; on output, the solution * f : on output, the function value at the solution * g : on output, the gradient value at the solution * g should be an allocated vector of size n or NULL, * in which case the gradient value is not returned. * function : the function to minimize (see tnc_function) * state : used by function (see tnc_function) * low, up : the bounds * set low[i] to -HUGE_VAL to remove the lower bound * set up[i] to HUGE_VAL to remove the upper bound * if low == NULL, the lower bounds are removed. * if up == NULL, the upper bounds are removed. * scale : scaling factors to apply to each variable * if NULL, the factors are up-low for interval bounded variables * and 1+|x] for the others. * offset : constant to substract to each variable * if NULL, the constant are (up+low)/2 for interval bounded * variables and x for the others. * messages : see the tnc_message enum * maxCGit : max. number of hessian*vector evaluation per main iteration * if maxCGit == 0, the direction chosen is -gradient * if maxCGit < 0, maxCGit is set to max(1,min(50,n/2)) * maxnfeval : max. number of function evaluation * eta : severity of the line search. if < 0 or > 1, set to 0.25 * stepmx : maximum step for the line search. may be increased during call * if too small, will be set to 10.0 * accuracy : relative precision for finite difference calculations * if <= machine_precision, set to sqrt(machine_precision) * fmin : minimum function value estimate * ftol : precision goal for the value of f in the stoping criterion * if ftol < 0.0, ftol is set to accuracy * xtol : precision goal for the value of x in the stopping criterion * (after applying x scaling factors) * if xtol < 0.0, xtol is set to sqrt(machine_precision) * pgtol : precision goal for the value of the projected gradient in the * stopping criterion (after applying x scaling factors) * if pgtol < 0.0, pgtol is set to 1e-2 * sqrt(accuracy) * setting it to 0.0 is not recommended * rescale : f scaling factor (in log10) used to trigger f value rescaling * if 0, rescale at each iteration * if a big value, never rescale * if < 0, rescale is set to 1.3 * nfeval : on output, the number of function evaluations. * ignored if nfeval==NULL. * * The tnc function returns a code defined in the tnc_rc enum. * On output, x, f and g may be very slightly out of sync because of scaling. * */ int returnCode(tnc(int(dimension), &x[0], &f, NULL, TNC::ComputeObjectiveAndGradient, (void*) this, &low[0], &up[0], refScale, refOffset, message, getMaxCGit(), getMaximumIterationNumber(), getEta(), getStepmx(), getAccuracy(), getFmin(), getMaximumResidualError(), getMaximumAbsoluteError(), getMaximumConstraintError(), getRescale(), &nfeval)); p_nfeval_ = 0; result_ = OptimizationResult(); result_.setProblem(getProblem()); // Update the result const UnsignedInteger size = evaluationInputHistory_.getSize(); Scalar absoluteError = -1.0; Scalar relativeError = -1.0; Scalar residualError = -1.0; Scalar constraintError = -1.0; for (UnsignedInteger i = 0; i < size; ++ i) { const Point inP(evaluationInputHistory_[i]); const Point outP(evaluationOutputHistory_[i]); if (i > 0) { const Point inPM(evaluationInputHistory_[i - 1]); const Point outPM(evaluationOutputHistory_[i - 1]); absoluteError = (inP - inPM).normInf(); relativeError = absoluteError / inP.normInf(); residualError = std::abs(outP[0] - outPM[0]); } constraintError = 0.0; for (UnsignedInteger j = 0; j < dimension; ++ j) { if (finiteLow[j] && (inP[j] < low[j])) { constraintError += low[j] - inP[j]; } if (finiteUp[j] && (up[j] < inP[j])) { constraintError += inP[j] - up[j]; } } // for j result_.store(inP, Point(1, outP[0]), absoluteError, relativeError, residualError, constraintError); } // for i /* Store the result */ result_.setOptimalPoint(x); const Scalar sign = getProblem().isMinimization() ? 1.0 : -1.0; result_.setOptimalValue(Point(1, sign * f)); result_.setLagrangeMultipliers(computeLagrangeMultipliers(x)); // check the convergence criteria const Bool convergence = ((absoluteError < getMaximumAbsoluteError()) && (relativeError < getMaximumRelativeError())) || ((residualError < getMaximumResidualError()) && (constraintError < getMaximumConstraintError())); if ((returnCode != TNC_LOCALMINIMUM) && (returnCode != TNC_FCONVERGED) && (returnCode != TNC_XCONVERGED)) { LOGWARN(OSS() << "Warning! TNC algorithm failed to converge. The error message is " << tnc_rc_string[returnCode - TNC_MINRC]); } else if ( ! convergence ) { LOGWARN(OSS() << "Warning! The TNC algorithm could not enforce the convergence criteria"); } } /* Scale accessor */ Point TNC::getScale() const { return scale_; } void TNC::setScale(const Point & scale) { scale_ = scale; } /* Offset accessor */ Point TNC::getOffset() const { return offset_; } void TNC::setOffset(const Point & offset) { offset_ = offset; } /* MaxCGit accessor */ UnsignedInteger TNC::getMaxCGit() const { return maxCGit_; } void TNC::setMaxCGit(const UnsignedInteger maxCGit) { maxCGit_ = maxCGit; } /* Eta accessor */ Scalar TNC::getEta() const { return eta_; } void TNC::setEta(const Scalar eta) { eta_ = eta; } /* Stepmx accessor */ Scalar TNC::getStepmx() const { return stepmx_; } void TNC::setStepmx(const Scalar stepmx) { stepmx_ = stepmx; } /* Accuracy accessor */ Scalar TNC::getAccuracy() const { return accuracy_; } void TNC::setAccuracy(const Scalar accuracy) { accuracy_ = accuracy; } /* Fmin accessor */ Scalar TNC::getFmin() const { return fmin_; } void TNC::setFmin(const Scalar fmin) { fmin_ = fmin; } /* Rescale accessor */ Scalar TNC::getRescale() const { return rescale_; } void TNC::setRescale(const Scalar rescale) { rescale_ = rescale; } /* String converter */ String TNC::__repr__() const { OSS oss; oss << "class=" << TNC::GetClassName() << " " << OptimizationAlgorithmImplementation::__repr__() << " scale=" << scale_ << " offset=" << offset_ << " maxCGit=" << maxCGit_ << " eta=" << eta_ << " stepmx=" << stepmx_ << " accuracy=" << accuracy_ << " fmin=" << fmin_ << " rescale=" << rescale_; return oss; } /* Method save() stores the object through the StorageManager */ void TNC::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("scale_", scale_); adv.saveAttribute("offset_", offset_); adv.saveAttribute("maxCGit_", maxCGit_); adv.saveAttribute("eta_", eta_); adv.saveAttribute("stepmx_", stepmx_); adv.saveAttribute("accuracy_", accuracy_); adv.saveAttribute("fmin_", fmin_); adv.saveAttribute("rescale_", rescale_); } /* Method load() reloads the object from the StorageManager */ void TNC::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("scale_", scale_); adv.loadAttribute("offset_", offset_); adv.loadAttribute("maxCGit_", maxCGit_); adv.loadAttribute("eta_", eta_); adv.loadAttribute("stepmx_", stepmx_); adv.loadAttribute("accuracy_", accuracy_); adv.loadAttribute("fmin_", fmin_); adv.loadAttribute("rescale_", rescale_); } /* * Wrapper of the Function operator() compatible with * TNC signature */ int TNC::ComputeObjectiveAndGradient(double *x, double *f, double *g, void *state) { TNC *algorithm = static_cast(state); /* Convert the input vector in OpenTURNS format */ const UnsignedInteger dimension = algorithm->getStartingPoint().getDimension(); Point inPoint(dimension); memcpy(&inPoint[0], &x[0], dimension * sizeof(Scalar)); const OptimizationProblem problem(algorithm->getProblem()); /* Used for history purpose. We store the value of the objective function in the first component and the norm of its gradient in the second component. */ Point outPoint(2); /* Compute the objective function at inPoint */ const Scalar result = problem.getObjective().operator()(inPoint)[0]; outPoint[0] = result; const Scalar sign = problem.isMinimization() ? 1.0 : -1.0; *f = sign * result; Point objectiveGradient; try { // Here we take the sign into account and convert the result into a Point in one shot objectiveGradient = problem.getObjective().gradient(inPoint) * Point(1, sign); } catch(...) { return 1; } /* Convert the gradient into the output format */ memcpy(&g[0], &objectiveGradient[0], dimension * sizeof(Scalar)); outPoint[1] = objectiveGradient.norm(); // track input/outputs algorithm->evaluationInputHistory_.add(inPoint); algorithm->evaluationOutputHistory_.add(outPoint); // callbacks if (algorithm->stopCallback_.first) { Bool stop = algorithm->stopCallback_.first(algorithm->stopCallback_.second); int *p_nfeval = static_cast(algorithm->p_nfeval_); if (p_nfeval) { if (stop) *p_nfeval = algorithm->getMaximumIterationNumber(); } else throw InternalException(HERE) << "Null p_nfeval"; } return 0; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Optim/algocobyla.c000066400000000000000000001256511307543307100212140ustar00rootroot00000000000000/* cobyla : contrained optimization by linear approximation */ /* * Copyright (c) 1992, Michael J. D. Powell (M.J.D.Powell@damtp.cam.ac.uk) * Copyright (c) 2004, Jean-Sebastien Roy (js@jeannot.org) * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * This software is a C version of COBYLA2, a contrained optimization by linear * approximation package developed by Michael J. D. Powell in Fortran. * * The original source code can be found at : * http://plato.la.asu.edu/topics/problems/nlores.html */ static char const rcsid[] = "@(#) $Jeannot: cobyla.c,v 1.11 2004/04/18 09:51:36 js Exp $"; #include #include #include #include "algocobyla.h" #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define abs(x) ((x) >= 0 ? (x) : -(x)) /* * Return code strings */ char *cobyla_rc_string[6] = { "N<0 or M<0", "Memory allocation failed", "Normal return from cobyla", "Maximum number of function evaluations reached", "Rounding errors are becoming damaging", "User requested end of minimization" }; static int cobylb(int *n, int *m, int *mpp, double *x, double *rhobeg, double *rhoend, int *iprint, int *maxfun, double *con, double *sim, double *simi, double *datmat, double *a, double *vsig, double *veta, double *sigbar, double *dx, double *w, int *iact, cobyla_function *calcfc, void *state); static int trstlp(int *n, int *m, double *a, double *b, double *rho, double *dx, int *ifull, int *iact, double *z__, double *zdota, double *vmultc, double *sdirn, double *dxnew, double *vmultd); /* ------------------------------------------------------------------------ */ int ot_cobyla(int n, int m, double *x, double rhobeg, double rhoend, int iprint, int *maxfun, cobyla_function *calcfc, void *state) { int icon, isim, isigb, idatm, iveta, isimi, ivsig, iwork, ia, idx, mpp, rc; int *iact; double *w; /* * This subroutine minimizes an objective function F(X) subject to M * inequality constraints on X, where X is a vector of variables that has * N components. The algorithm employs linear approximations to the * objective and constraint functions, the approximations being formed by * linear interpolation at N+1 points in the space of the variables. * We regard these interpolation points as vertices of a simplex. The * parameter RHO controls the size of the simplex and it is reduced * automatically from RHOBEG to RHOEND. For each RHO the subroutine tries * to achieve a good vector of variables for the current size, and then * RHO is reduced until the value RHOEND is reached. Therefore RHOBEG and * RHOEND should be set to reasonable initial changes to and the required * accuracy in the variables respectively, but this accuracy should be * viewed as a subject for experimentation because it is not guaranteed. * The subroutine has an advantage over many of its competitors, however, * which is that it treats each constraint individually when calculating * a change to the variables, instead of lumping the constraints together * into a single penalty function. The name of the subroutine is derived * from the phrase Constrained Optimization BY Linear Approximations. * * The user must set the values of N, M, RHOBEG and RHOEND, and must * provide an initial vector of variables in X. Further, the value of * IPRINT should be set to 0, 1, 2 or 3, which controls the amount of * printing during the calculation. Specifically, there is no output if * IPRINT=0 and there is output only at the end of the calculation if * IPRINT=1. Otherwise each new value of RHO and SIGMA is printed. * Further, the vector of variables and some function information are * given either when RHO is reduced or when each new value of F(X) is * computed in the cases IPRINT=2 or IPRINT=3 respectively. Here SIGMA * is a penalty parameter, it being assumed that a change to X is an * improvement if it reduces the merit function * F(X)+SIGMA*MAX(0.0,-C1(X),-C2(X),...,-CM(X)), * where C1,C2,...,CM denote the constraint functions that should become * nonnegative eventually, at least to the precision of RHOEND. In the * printed output the displayed term that is multiplied by SIGMA is * called MAXCV, which stands for 'MAXimum Constraint Violation'. The * argument MAXFUN is an int variable that must be set by the user to a * limit on the number of calls of CALCFC, the purpose of this routine being * given below. The value of MAXFUN will be altered to the number of calls * of CALCFC that are made. The arguments W and IACT provide real and * int arrays that are used as working space. Their lengths must be at * least N*(3*N+2*M+11)+4*M+6 and M+1 respectively. * * In order to define the objective and constraint functions, we require * a subroutine that has the name and arguments * SUBROUTINE CALCFC (N,M,X,F,CON) * DIMENSION X(*),CON(*) . * The values of N and M are fixed and have been defined already, while * X is now the current vector of variables. The subroutine should return * the objective and constraint functions at X in F and CON(1),CON(2), * ...,CON(M). Note that we are trying to adjust X so that F(X) is as * small as possible subject to the constraint functions being nonnegative. * * Partition the working space array W to provide the storage that is needed * for the main calculation. */ if (n == 0) { if (iprint>=1) fprintf(stderr, "cobyla: N==0.\n"); *maxfun = 0; return 0; } if (n < 0 || m < 0) { if (iprint>=1) fprintf(stderr, "cobyla: N<0 or M<0.\n"); *maxfun = 0; return -2; } /* workspace allocation */ w = malloc((n*(3*n+2*m+11)+4*m+6)*sizeof(*w)); if (w == NULL) { if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n"); *maxfun = 0; return -1; } iact = malloc((m+1)*sizeof(*iact)); if (iact == NULL) { if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n"); free(w); *maxfun = 0; return -1; } /* Parameter adjustments */ --iact; --w; --x; /* Function Body */ mpp = m + 2; icon = 1; isim = icon + mpp; isimi = isim + n * n + n; idatm = isimi + n * n; ia = idatm + n * mpp + mpp; ivsig = ia + m * n + n; iveta = ivsig + n; isigb = iveta + n; idx = isigb + n; iwork = idx + n; rc = cobylb(&n, &m, &mpp, &x[1], &rhobeg, &rhoend, &iprint, maxfun, &w[icon], &w[isim], &w[isimi], &w[idatm], &w[ia], &w[ivsig], &w[iveta], &w[isigb], &w[idx], &w[iwork], &iact[1], calcfc, state); /* Parameter adjustments (reverse) */ ++iact; ++w; free(w); free(iact); return rc; } /* cobyla */ /* ------------------------------------------------------------------------- */ int cobylb(int *n, int *m, int *mpp, double *x, double *rhobeg, double *rhoend, int *iprint, int * maxfun, double *con, double *sim, double *simi, double *datmat, double *a, double *vsig, double *veta, double *sigbar, double *dx, double *w, int *iact, cobyla_function *calcfc, void *state) { /* System generated locals */ int sim_dim1, sim_offset, simi_dim1, simi_offset, datmat_dim1, datmat_offset, a_dim1, a_offset, i__1, i__2, i__3; double d__1, d__2; /* Local variables */ double alpha, delta, denom, tempa, barmu; double beta, cmin = 0.0, cmax = 0.0; double cvmaxm, dxsign, prerem = 0.0; double edgmax, pareta, prerec = 0.0, phimin, parsig = 0.0; double gamma; double phi, rho, sum = 0.0; double ratio, vmold, parmu, error, vmnew; double resmax, cvmaxp; double resnew, trured; double temp, wsig, f; double weta; int i__, j, k, l; int idxnew; int iflag = 0; int iptemp; int isdirn, nfvals, izdota; int ivmc; int ivmd; int mp, np, iz, ibrnch; int nbest, ifull, iptem, jdrop; int rc = 0; /* Set the initial values of some parameters. The last column of SIM holds */ /* the optimal vertex of the current simplex, and the preceding N columns */ /* hold the displacements from the optimal vertex to the other vertices. */ /* Further, SIMI holds the inverse of the matrix that is contained in the */ /* first N columns of SIM. */ /* Parameter adjustments */ a_dim1 = *n; a_offset = 1 + a_dim1 * 1; a -= a_offset; simi_dim1 = *n; simi_offset = 1 + simi_dim1 * 1; simi -= simi_offset; sim_dim1 = *n; sim_offset = 1 + sim_dim1 * 1; sim -= sim_offset; datmat_dim1 = *mpp; datmat_offset = 1 + datmat_dim1 * 1; datmat -= datmat_offset; --x; --con; --vsig; --veta; --sigbar; --dx; --w; --iact; /* Function Body */ iptem = min(*n,4); iptemp = iptem + 1; np = *n + 1; mp = *m + 1; alpha = .25; beta = 2.1; gamma = .5; delta = 1.1; rho = *rhobeg; parmu = 0.; if (*iprint >= 2) { fprintf(stderr, "cobyla: the initial value of RHO is %12.6E and PARMU is set to zero.\n", rho); } nfvals = 0; temp = 1. / rho; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sim[i__ + np * sim_dim1] = x[i__]; i__2 = *n; for (j = 1; j <= i__2; ++j) { sim[i__ + j * sim_dim1] = 0.; simi[i__ + j * simi_dim1] = 0.; } sim[i__ + i__ * sim_dim1] = rho; simi[i__ + i__ * simi_dim1] = temp; } jdrop = np; ibrnch = 0; /* Make the next call of the user-supplied subroutine CALCFC. These */ /* instructions are also used for calling CALCFC during the iterations of */ /* the algorithm. */ L40: if (nfvals >= *maxfun && nfvals > 0) { if (*iprint >= 1) { fprintf(stderr, "cobyla: maximum number of function evaluations reach.\n"); } rc = 1; goto L600; } ++nfvals; if (calcfc(*n, *m, &x[1], &f, &con[1], state)) { if (*iprint >= 1) { fprintf(stderr, "cobyla: user requested end of minimization.\n"); } rc = 3; goto L600; } resmax = 0.; if (*m > 0) { i__1 = *m; for (k = 1; k <= i__1; ++k) { d__1 = resmax, d__2 = -con[k]; resmax = max(d__1,d__2); } } if (nfvals == *iprint - 1 || *iprint == 3) { fprintf(stderr, "cobyla: NFVALS = %4d, F =%13.6E, MAXCV =%13.6E\n", nfvals, f, resmax); i__1 = iptem; fprintf(stderr, "cobyla: X ="); for (i__ = 1; i__ <= i__1; ++i__) { if (i__>1) fprintf(stderr, " "); fprintf(stderr, "%13.6E", x[i__]); } if (iptem < *n) { i__1 = *n; for (i__ = iptemp; i__ <= i__1; ++i__) { if (!((i__-1) % 4)) fprintf(stderr, "\ncobyla: "); fprintf(stderr, "%15.6E", x[i__]); } } fprintf(stderr, "\n"); } con[mp] = f; con[*mpp] = resmax; if (ibrnch == 1) { goto L440; } /* Set the recently calculated function values in a column of DATMAT. This */ /* array has a column for each vertex of the current simplex, the entries of */ /* each column being the values of the constraint functions (if any) */ /* followed by the objective function and the greatest constraint violation */ /* at the vertex. */ i__1 = *mpp; for (k = 1; k <= i__1; ++k) { datmat[k + jdrop * datmat_dim1] = con[k]; } if (nfvals > np) { goto L130; } /* Exchange the new vertex of the initial simplex with the optimal vertex if */ /* necessary. Then, if the initial simplex is not complete, pick its next */ /* vertex and calculate the function values there. */ if (jdrop <= *n) { if (datmat[mp + np * datmat_dim1] <= f) { x[jdrop] = sim[jdrop + np * sim_dim1]; } else { sim[jdrop + np * sim_dim1] = x[jdrop]; i__1 = *mpp; for (k = 1; k <= i__1; ++k) { datmat[k + jdrop * datmat_dim1] = datmat[k + np * datmat_dim1] ; datmat[k + np * datmat_dim1] = con[k]; } i__1 = jdrop; for (k = 1; k <= i__1; ++k) { sim[jdrop + k * sim_dim1] = -rho; temp = 0.f; i__2 = jdrop; for (i__ = k; i__ <= i__2; ++i__) { temp -= simi[i__ + k * simi_dim1]; } simi[jdrop + k * simi_dim1] = temp; } } } if (nfvals <= *n) { jdrop = nfvals; x[jdrop] += rho; goto L40; } L130: ibrnch = 1; /* Identify the optimal vertex of the current simplex. */ L140: phimin = datmat[mp + np * datmat_dim1] + parmu * datmat[*mpp + np * datmat_dim1]; nbest = np; i__1 = *n; for (j = 1; j <= i__1; ++j) { temp = datmat[mp + j * datmat_dim1] + parmu * datmat[*mpp + j * datmat_dim1]; if (temp < phimin) { nbest = j; phimin = temp; } else if (temp == phimin && parmu == 0.) { if (datmat[*mpp + j * datmat_dim1] < datmat[*mpp + nbest * datmat_dim1]) { nbest = j; } } } /* Switch the best vertex into pole position if it is not there already, */ /* and also update SIM, SIMI and DATMAT. */ if (nbest <= *n) { i__1 = *mpp; for (i__ = 1; i__ <= i__1; ++i__) { temp = datmat[i__ + np * datmat_dim1]; datmat[i__ + np * datmat_dim1] = datmat[i__ + nbest * datmat_dim1] ; datmat[i__ + nbest * datmat_dim1] = temp; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = sim[i__ + nbest * sim_dim1]; sim[i__ + nbest * sim_dim1] = 0.; sim[i__ + np * sim_dim1] += temp; tempa = 0.; i__2 = *n; for (k = 1; k <= i__2; ++k) { sim[i__ + k * sim_dim1] -= temp; tempa -= simi[k + i__ * simi_dim1]; } simi[nbest + i__ * simi_dim1] = tempa; } } /* Make an error return if SIGI is a poor approximation to the inverse of */ /* the leading N by N submatrix of SIG. */ error = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i__2 = *n; for (j = 1; j <= i__2; ++j) { temp = 0.; if (i__ == j) { temp += -1.; } i__3 = *n; for (k = 1; k <= i__3; ++k) { temp += simi[i__ + k * simi_dim1] * sim[k + j * sim_dim1]; } d__1 = error, d__2 = abs(temp); error = max(d__1,d__2); } } if (error > .1) { if (*iprint >= 1) { fprintf(stderr, "cobyla: rounding errors are becoming damaging.\n"); } rc = 2; goto L600; } /* Calculate the coefficients of the linear approximations to the objective */ /* and constraint functions, placing minus the objective function gradient */ /* after the constraint gradients in the array A. The vector W is used for */ /* working space. */ i__2 = mp; for (k = 1; k <= i__2; ++k) { con[k] = -datmat[k + np * datmat_dim1]; i__1 = *n; for (j = 1; j <= i__1; ++j) { w[j] = datmat[k + j * datmat_dim1] + con[k]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = 0.; i__3 = *n; for (j = 1; j <= i__3; ++j) { temp += w[j] * simi[j + i__ * simi_dim1]; } if (k == mp) { temp = -temp; } a[i__ + k * a_dim1] = temp; } } /* Calculate the values of sigma and eta, and set IFLAG=0 if the current */ /* simplex is not acceptable. */ iflag = 1; parsig = alpha * rho; pareta = beta * rho; i__1 = *n; for (j = 1; j <= i__1; ++j) { wsig = 0.; weta = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { d__1 = simi[j + i__ * simi_dim1]; wsig += d__1 * d__1; d__1 = sim[i__ + j * sim_dim1]; weta += d__1 * d__1; } vsig[j] = 1. / sqrt(wsig); veta[j] = sqrt(weta); if (vsig[j] < parsig || veta[j] > pareta) { iflag = 0; } } /* If a new vertex is needed to improve acceptability, then decide which */ /* vertex to drop from the simplex. */ if (ibrnch == 1 || iflag == 1) { goto L370; } jdrop = 0; temp = pareta; i__1 = *n; for (j = 1; j <= i__1; ++j) { if (veta[j] > temp) { jdrop = j; temp = veta[j]; } } if (jdrop == 0) { i__1 = *n; for (j = 1; j <= i__1; ++j) { if (vsig[j] < temp) { jdrop = j; temp = vsig[j]; } } } /* Calculate the step to the new vertex and its sign. */ temp = gamma * rho * vsig[jdrop]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dx[i__] = temp * simi[jdrop + i__ * simi_dim1]; } cvmaxp = 0.; cvmaxm = 0.; i__1 = mp; for (k = 1; k <= i__1; ++k) { sum = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { sum += a[i__ + k * a_dim1] * dx[i__]; } if (k < mp) { temp = datmat[k + np * datmat_dim1]; d__1 = cvmaxp, d__2 = -sum - temp; cvmaxp = max(d__1,d__2); d__1 = cvmaxm, d__2 = sum - temp; cvmaxm = max(d__1,d__2); } } dxsign = 1.; if (parmu * (cvmaxp - cvmaxm) > sum + sum) { dxsign = -1.; } /* Update the elements of SIM and SIMI, and set the next X. */ temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dx[i__] = dxsign * dx[i__]; sim[i__ + jdrop * sim_dim1] = dx[i__]; temp += simi[jdrop + i__ * simi_dim1] * dx[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { simi[jdrop + i__ * simi_dim1] /= temp; } i__1 = *n; for (j = 1; j <= i__1; ++j) { if (j != jdrop) { temp = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { temp += simi[j + i__ * simi_dim1] * dx[i__]; } i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { simi[j + i__ * simi_dim1] -= temp * simi[jdrop + i__ * simi_dim1]; } } x[j] = sim[j + np * sim_dim1] + dx[j]; } goto L40; /* Calculate DX=x(*)-x(0). Branch if the length of DX is less than 0.5*RHO. */ L370: iz = 1; izdota = iz + *n * *n; ivmc = izdota + *n; isdirn = ivmc + mp; idxnew = isdirn + *n; ivmd = idxnew + *n; trstlp(n, m, &a[a_offset], &con[1], &rho, &dx[1], &ifull, &iact[1], &w[ iz], &w[izdota], &w[ivmc], &w[isdirn], &w[idxnew], &w[ivmd]); if (ifull == 0) { temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { d__1 = dx[i__]; temp += d__1 * d__1; } if (temp < rho * .25 * rho) { ibrnch = 1; goto L550; } } /* Predict the change to F and the new maximum constraint violation if the */ /* variables are altered from x(0) to x(0)+DX. */ resnew = 0.; con[mp] = 0.; i__1 = mp; for (k = 1; k <= i__1; ++k) { sum = con[k]; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { sum -= a[i__ + k * a_dim1] * dx[i__]; } if (k < mp) { resnew = max(resnew,sum); } } /* Increase PARMU if necessary and branch back if this change alters the */ /* optimal vertex. Otherwise PREREM and PREREC will be set to the predicted */ /* reductions in the merit function and the maximum constraint violation */ /* respectively. */ barmu = 0.; prerec = datmat[*mpp + np * datmat_dim1] - resnew; if (prerec > 0.) { barmu = sum / prerec; } if (parmu < barmu * 1.5) { parmu = barmu * 2.; if (*iprint >= 2) { fprintf(stderr, "cobyla: increase in PARMU to %12.6E\n", parmu); } phi = datmat[mp + np * datmat_dim1] + parmu * datmat[*mpp + np * datmat_dim1]; i__1 = *n; for (j = 1; j <= i__1; ++j) { temp = datmat[mp + j * datmat_dim1] + parmu * datmat[*mpp + j * datmat_dim1]; if (temp < phi) { goto L140; } if (temp == phi && parmu == 0.f) { if (datmat[*mpp + j * datmat_dim1] < datmat[*mpp + np * datmat_dim1]) { goto L140; } } } } prerem = parmu * prerec - sum; /* Calculate the constraint and objective functions at x(*). Then find the */ /* actual reduction in the merit function. */ i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = sim[i__ + np * sim_dim1] + dx[i__]; } ibrnch = 1; goto L40; L440: vmold = datmat[mp + np * datmat_dim1] + parmu * datmat[*mpp + np * datmat_dim1]; vmnew = f + parmu * resmax; trured = vmold - vmnew; if (parmu == 0. && f == datmat[mp + np * datmat_dim1]) { prerem = prerec; trured = datmat[*mpp + np * datmat_dim1] - resmax; } /* Begin the operations that decide whether x(*) should replace one of the */ /* vertices of the current simplex, the change being mandatory if TRURED is */ /* positive. Firstly, JDROP is set to the index of the vertex that is to be */ /* replaced. */ ratio = 0.; if (trured <= 0.f) { ratio = 1.f; } jdrop = 0; i__1 = *n; for (j = 1; j <= i__1; ++j) { temp = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { temp += simi[j + i__ * simi_dim1] * dx[i__]; } temp = abs(temp); if (temp > ratio) { jdrop = j; ratio = temp; } sigbar[j] = temp * vsig[j]; } /* Calculate the value of ell. */ edgmax = delta * rho; l = 0; i__1 = *n; for (j = 1; j <= i__1; ++j) { if (sigbar[j] >= parsig || sigbar[j] >= vsig[j]) { temp = veta[j]; if (trured > 0.) { temp = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { d__1 = dx[i__] - sim[i__ + j * sim_dim1]; temp += d__1 * d__1; } temp = sqrt(temp); } if (temp > edgmax) { l = j; edgmax = temp; } } } if (l > 0) { jdrop = l; } if (jdrop == 0) { goto L550; } /* Revise the simplex by updating the elements of SIM, SIMI and DATMAT. */ temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sim[i__ + jdrop * sim_dim1] = dx[i__]; temp += simi[jdrop + i__ * simi_dim1] * dx[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { simi[jdrop + i__ * simi_dim1] /= temp; } i__1 = *n; for (j = 1; j <= i__1; ++j) { if (j != jdrop) { temp = 0.; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { temp += simi[j + i__ * simi_dim1] * dx[i__]; } i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { simi[j + i__ * simi_dim1] -= temp * simi[jdrop + i__ * simi_dim1]; } } } i__1 = *mpp; for (k = 1; k <= i__1; ++k) { datmat[k + jdrop * datmat_dim1] = con[k]; } /* Branch back for further iterations with the current RHO. */ if (trured > 0. && trured >= prerem * .1) { goto L140; } L550: if (iflag == 0) { ibrnch = 0; goto L140; } /* Otherwise reduce RHO if it is not at its least value and reset PARMU. */ if (rho > *rhoend) { rho *= .5; if (rho <= *rhoend * 1.5) { rho = *rhoend; } if (parmu > 0.) { denom = 0.; i__1 = mp; for (k = 1; k <= i__1; ++k) { cmin = datmat[k + np * datmat_dim1]; cmax = cmin; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { d__1 = cmin, d__2 = datmat[k + i__ * datmat_dim1]; cmin = min(d__1,d__2); d__1 = cmax, d__2 = datmat[k + i__ * datmat_dim1]; cmax = max(d__1,d__2); } if (k <= *m && cmin < cmax * .5) { temp = max(cmax,0.) - cmin; if (denom <= 0.) { denom = temp; } else { denom = min(denom,temp); } } } if (denom == 0.) { parmu = 0.; } else if (cmax - cmin < parmu * denom) { parmu = (cmax - cmin) / denom; } } if (*iprint >= 2) { fprintf(stderr, "cobyla: reduction in RHO to %12.6E and PARMU =%13.6E\n", rho, parmu); } if (*iprint == 2) { fprintf(stderr, "cobyla: NFVALS = %4d, F =%13.6E, MAXCV =%13.6E\n", nfvals, datmat[mp + np * datmat_dim1], datmat[*mpp + np * datmat_dim1]); fprintf(stderr, "cobyla: X ="); i__1 = iptem; for (i__ = 1; i__ <= i__1; ++i__) { if (i__>1) fprintf(stderr, " "); fprintf(stderr, "%13.6E", sim[i__ + np * sim_dim1]); } if (iptem < *n) { i__1 = *n; for (i__ = iptemp; i__ <= i__1; ++i__) { if (!((i__-1) % 4)) fprintf(stderr, "\ncobyla: "); fprintf(stderr, "%15.6E", x[i__]); } } fprintf(stderr, "\n"); } goto L140; } /* Return the best calculated values of the variables. */ if (*iprint >= 1) { fprintf(stderr, "cobyla: normal return.\n"); } if (ifull == 1) { goto L620; } L600: i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = sim[i__ + np * sim_dim1]; } f = datmat[mp + np * datmat_dim1]; resmax = datmat[*mpp + np * datmat_dim1]; L620: if (*iprint >= 1) { fprintf(stderr, "cobyla: NFVALS = %4d, F =%13.6E, MAXCV =%13.6E\n", nfvals, f, resmax); i__1 = iptem; fprintf(stderr, "cobyla: X ="); for (i__ = 1; i__ <= i__1; ++i__) { if (i__>1) fprintf(stderr, " "); fprintf(stderr, "%13.6E", x[i__]); } if (iptem < *n) { i__1 = *n; for (i__ = iptemp; i__ <= i__1; ++i__) { if (!((i__-1) % 4)) fprintf(stderr, "\ncobyla: "); fprintf(stderr, "%15.6E", x[i__]); } } fprintf(stderr, "\n"); } *maxfun = nfvals; return rc; } /* cobylb */ /* ------------------------------------------------------------------------- */ int trstlp(int *n, int *m, double *a, double *b, double *rho, double *dx, int *ifull, int *iact, double *z__, double *zdota, double *vmultc, double *sdirn, double *dxnew, double *vmultd) { /* System generated locals */ int a_dim1, a_offset, z_dim1, z_offset, i__1, i__2; double d__1, d__2; /* Local variables */ double alpha, tempa; double beta; double optnew, stpful, sum, tot, acca, accb; double ratio, vsave, zdotv, zdotw, dd; double sd; double sp, ss, resold = 0.0, zdvabs, zdwabs, sumabs, resmax, optold; double spabs; double temp, step; int icount; int iout, i__, j, k; int isave; int kk; int kl, kp, kw; int nact, icon = 0, mcon; int nactx = 0; /* This subroutine calculates an N-component vector DX by applying the */ /* following two stages. In the first stage, DX is set to the shortest */ /* vector that minimizes the greatest violation of the constraints */ /* A(1,K)*DX(1)+A(2,K)*DX(2)+...+A(N,K)*DX(N) .GE. B(K), K=2,3,...,M, */ /* subject to the Euclidean length of DX being at most RHO. If its length is */ /* strictly less than RHO, then we use the resultant freedom in DX to */ /* minimize the objective function */ /* -A(1,M+1)*DX(1)-A(2,M+1)*DX(2)-...-A(N,M+1)*DX(N) */ /* subject to no increase in any greatest constraint violation. This */ /* notation allows the gradient of the objective function to be regarded as */ /* the gradient of a constraint. Therefore the two stages are distinguished */ /* by MCON .EQ. M and MCON .GT. M respectively. It is possible that a */ /* degeneracy may prevent DX from attaining the target length RHO. Then the */ /* value IFULL=0 would be set, but usually IFULL=1 on return. */ /* In general NACT is the number of constraints in the active set and */ /* IACT(1),...,IACT(NACT) are their indices, while the remainder of IACT */ /* contains a permutation of the remaining constraint indices. Further, Z is */ /* an orthogonal matrix whose first NACT columns can be regarded as the */ /* result of Gram-Schmidt applied to the active constraint gradients. For */ /* J=1,2,...,NACT, the number ZDOTA(J) is the scalar product of the J-th */ /* column of Z with the gradient of the J-th active constraint. DX is the */ /* current vector of variables and here the residuals of the active */ /* constraints should be zero. Further, the active constraints have */ /* nonnegative Lagrange multipliers that are held at the beginning of */ /* VMULTC. The remainder of this vector holds the residuals of the inactive */ /* constraints at DX, the ordering of the components of VMULTC being in */ /* agreement with the permutation of the indices of the constraints that is */ /* in IACT. All these residuals are nonnegative, which is achieved by the */ /* shift RESMAX that makes the least residual zero. */ /* Initialize Z and some other variables. The value of RESMAX will be */ /* appropriate to DX=0, while ICON will be the index of a most violated */ /* constraint if RESMAX is positive. Usually during the first stage the */ /* vector SDIRN gives a search direction that reduces all the active */ /* constraint violations by one simultaneously. */ /* Parameter adjustments */ z_dim1 = *n; z_offset = 1 + z_dim1 * 1; z__ -= z_offset; a_dim1 = *n; a_offset = 1 + a_dim1 * 1; a -= a_offset; --b; --dx; --iact; --zdota; --vmultc; --sdirn; --dxnew; --vmultd; /* Function Body */ *ifull = 1; mcon = *m; nact = 0; resmax = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i__2 = *n; for (j = 1; j <= i__2; ++j) { z__[i__ + j * z_dim1] = 0.; } z__[i__ + i__ * z_dim1] = 1.; dx[i__] = 0.; } if (*m >= 1) { i__1 = *m; for (k = 1; k <= i__1; ++k) { if (b[k] > resmax) { resmax = b[k]; icon = k; } } i__1 = *m; for (k = 1; k <= i__1; ++k) { iact[k] = k; vmultc[k] = resmax - b[k]; } } if (resmax == 0.) { goto L480; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sdirn[i__] = 0.; } /* End the current stage of the calculation if 3 consecutive iterations */ /* have either failed to reduce the best calculated value of the objective */ /* function or to increase the number of active constraints since the best */ /* value was calculated. This strategy prevents cycling, but there is a */ /* remote possibility that it will cause premature termination. */ L60: optold = 0.; icount = 0; L70: if (mcon == *m) { optnew = resmax; } else { optnew = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { optnew -= dx[i__] * a[i__ + mcon * a_dim1]; } } if (icount == 0 || optnew < optold) { optold = optnew; nactx = nact; icount = 3; } else if (nact > nactx) { nactx = nact; icount = 3; } else { --icount; if (icount == 0) { goto L490; } } /* If ICON exceeds NACT, then we add the constraint with index IACT(ICON) to */ /* the active set. Apply Givens rotations so that the last N-NACT-1 columns */ /* of Z are orthogonal to the gradient of the new constraint, a scalar */ /* product being set to zero if its nonzero value could be due to computer */ /* rounding errors. The array DXNEW is used for working space. */ if (icon <= nact) { goto L260; } kk = iact[icon]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dxnew[i__] = a[i__ + kk * a_dim1]; } tot = 0.; k = *n; L100: if (k > nact) { sp = 0.; spabs = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = z__[i__ + k * z_dim1] * dxnew[i__]; sp += temp; spabs += abs(temp); } acca = spabs + abs(sp) * .1; accb = spabs + abs(sp) * .2; if (spabs >= acca || acca >= accb) { sp = 0.; } if (tot == 0.) { tot = sp; } else { kp = k + 1; temp = sqrt(sp * sp + tot * tot); alpha = sp / temp; beta = tot / temp; tot = temp; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = alpha * z__[i__ + k * z_dim1] + beta * z__[i__ + kp * z_dim1]; z__[i__ + kp * z_dim1] = alpha * z__[i__ + kp * z_dim1] - beta * z__[i__ + k * z_dim1]; z__[i__ + k * z_dim1] = temp; } } --k; goto L100; } /* Add the new constraint if this can be done without a deletion from the */ /* active set. */ if (tot != 0.) { ++nact; zdota[nact] = tot; vmultc[icon] = vmultc[nact]; vmultc[nact] = 0.; goto L210; } /* The next instruction is reached if a deletion has to be made from the */ /* active set in order to make room for the new active constraint, because */ /* the new constraint gradient is a linear combination of the gradients of */ /* the old active constraints. Set the elements of VMULTD to the multipliers */ /* of the linear combination. Further, set IOUT to the index of the */ /* constraint to be deleted, but branch if no suitable index can be found. */ ratio = -1.; k = nact; L130: zdotv = 0.; zdvabs = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = z__[i__ + k * z_dim1] * dxnew[i__]; zdotv += temp; zdvabs += abs(temp); } acca = zdvabs + abs(zdotv) * .1; accb = zdvabs + abs(zdotv) * .2; if (zdvabs < acca && acca < accb) { temp = zdotv / zdota[k]; if (temp > 0. && iact[k] <= *m) { tempa = vmultc[k] / temp; if (ratio < 0. || tempa < ratio) { ratio = tempa; iout = k; } } if (k >= 2) { kw = iact[k]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dxnew[i__] -= temp * a[i__ + kw * a_dim1]; } } vmultd[k] = temp; } else { vmultd[k] = 0.; } --k; if (k > 0) { goto L130; } if (ratio < 0.) { goto L490; } /* Revise the Lagrange multipliers and reorder the active constraints so */ /* that the one to be replaced is at the end of the list. Also calculate the */ /* new value of ZDOTA(NACT) and branch if it is not acceptable. */ i__1 = nact; for (k = 1; k <= i__1; ++k) { d__1 = 0., d__2 = vmultc[k] - ratio * vmultd[k]; vmultc[k] = max(d__1,d__2); } if (icon < nact) { isave = iact[icon]; vsave = vmultc[icon]; k = icon; L170: kp = k + 1; kw = iact[kp]; sp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sp += z__[i__ + k * z_dim1] * a[i__ + kw * a_dim1]; } d__1 = zdota[kp]; temp = sqrt(sp * sp + d__1 * d__1); alpha = zdota[kp] / temp; beta = sp / temp; zdota[kp] = alpha * zdota[k]; zdota[k] = temp; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = alpha * z__[i__ + kp * z_dim1] + beta * z__[i__ + k * z_dim1]; z__[i__ + kp * z_dim1] = alpha * z__[i__ + k * z_dim1] - beta * z__[i__ + kp * z_dim1]; z__[i__ + k * z_dim1] = temp; } iact[k] = kw; vmultc[k] = vmultc[kp]; k = kp; if (k < nact) { goto L170; } iact[k] = isave; vmultc[k] = vsave; } temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp += z__[i__ + nact * z_dim1] * a[i__ + kk * a_dim1]; } if (temp == 0.) { goto L490; } zdota[nact] = temp; vmultc[icon] = 0.; vmultc[nact] = ratio; /* Update IACT and ensure that the objective function continues to be */ /* treated as the last active constraint when MCON>M. */ L210: iact[icon] = iact[nact]; iact[nact] = kk; if (mcon > *m && kk != mcon) { k = nact - 1; sp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sp += z__[i__ + k * z_dim1] * a[i__ + kk * a_dim1]; } d__1 = zdota[nact]; temp = sqrt(sp * sp + d__1 * d__1); alpha = zdota[nact] / temp; beta = sp / temp; zdota[nact] = alpha * zdota[k]; zdota[k] = temp; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = alpha * z__[i__ + nact * z_dim1] + beta * z__[i__ + k * z_dim1]; z__[i__ + nact * z_dim1] = alpha * z__[i__ + k * z_dim1] - beta * z__[i__ + nact * z_dim1]; z__[i__ + k * z_dim1] = temp; } iact[nact] = iact[k]; iact[k] = kk; temp = vmultc[k]; vmultc[k] = vmultc[nact]; vmultc[nact] = temp; } /* If stage one is in progress, then set SDIRN to the direction of the next */ /* change to the current vector of variables. */ if (mcon > *m) { goto L320; } kk = iact[nact]; temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp += sdirn[i__] * a[i__ + kk * a_dim1]; } temp += -1.; temp /= zdota[nact]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sdirn[i__] -= temp * z__[i__ + nact * z_dim1]; } goto L340; /* Delete the constraint that has the index IACT(ICON) from the active set. */ L260: if (icon < nact) { isave = iact[icon]; vsave = vmultc[icon]; k = icon; L270: kp = k + 1; kk = iact[kp]; sp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sp += z__[i__ + k * z_dim1] * a[i__ + kk * a_dim1]; } d__1 = zdota[kp]; temp = sqrt(sp * sp + d__1 * d__1); alpha = zdota[kp] / temp; beta = sp / temp; zdota[kp] = alpha * zdota[k]; zdota[k] = temp; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = alpha * z__[i__ + kp * z_dim1] + beta * z__[i__ + k * z_dim1]; z__[i__ + kp * z_dim1] = alpha * z__[i__ + k * z_dim1] - beta * z__[i__ + kp * z_dim1]; z__[i__ + k * z_dim1] = temp; } iact[k] = kk; vmultc[k] = vmultc[kp]; k = kp; if (k < nact) { goto L270; } iact[k] = isave; vmultc[k] = vsave; } --nact; /* If stage one is in progress, then set SDIRN to the direction of the next */ /* change to the current vector of variables. */ if (mcon > *m) { goto L320; } temp = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp += sdirn[i__] * z__[i__ + (nact + 1) * z_dim1]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sdirn[i__] -= temp * z__[i__ + (nact + 1) * z_dim1]; } goto L340; /* Pick the next search direction of stage two. */ L320: temp = 1. / zdota[nact]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sdirn[i__] = temp * z__[i__ + nact * z_dim1]; } /* Calculate the step to the boundary of the trust region or take the step */ /* that reduces RESMAX to zero. The two statements below that include the */ /* factor 1.0E-6 prevent some harmless underflows that occurred in a test */ /* calculation. Further, we skip the step if it could be zero within a */ /* reasonable tolerance for computer rounding errors. */ L340: dd = *rho * *rho; sd = 0.; ss = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if ((d__1 = dx[i__], abs(d__1)) >= *rho * 1e-6f) { d__2 = dx[i__]; dd -= d__2 * d__2; } sd += dx[i__] * sdirn[i__]; d__1 = sdirn[i__]; ss += d__1 * d__1; } if (dd <= 0.) { goto L490; } temp = sqrt(ss * dd); if (abs(sd) >= temp * 1e-6f) { temp = sqrt(ss * dd + sd * sd); } stpful = dd / (temp + sd); step = stpful; if (mcon == *m) { acca = step + resmax * .1; accb = step + resmax * .2; if (step >= acca || acca >= accb) { goto L480; } step = min(step,resmax); } /* Set DXNEW to the new variables if STEP is the steplength, and reduce */ /* RESMAX to the corresponding maximum residual if stage one is being done. */ /* Because DXNEW will be changed during the calculation of some Lagrange */ /* multipliers, it will be restored to the following value later. */ i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dxnew[i__] = dx[i__] + step * sdirn[i__]; } if (mcon == *m) { resold = resmax; resmax = 0.; i__1 = nact; for (k = 1; k <= i__1; ++k) { kk = iact[k]; temp = b[kk]; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { temp -= a[i__ + kk * a_dim1] * dxnew[i__]; } resmax = max(resmax,temp); } } /* Set VMULTD to the VMULTC vector that would occur if DX became DXNEW. A */ /* device is included to force VMULTD(K)=0.0 if deviations from this value */ /* can be attributed to computer rounding errors. First calculate the new */ /* Lagrange multipliers. */ k = nact; L390: zdotw = 0.; zdwabs = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { temp = z__[i__ + k * z_dim1] * dxnew[i__]; zdotw += temp; zdwabs += abs(temp); } acca = zdwabs + abs(zdotw) * .1; accb = zdwabs + abs(zdotw) * .2; if (zdwabs >= acca || acca >= accb) { zdotw = 0.; } vmultd[k] = zdotw / zdota[k]; if (k >= 2) { kk = iact[k]; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dxnew[i__] -= vmultd[k] * a[i__ + kk * a_dim1]; } --k; goto L390; } if (mcon > *m) { d__1 = 0., d__2 = vmultd[nact]; vmultd[nact] = max(d__1,d__2); } /* Complete VMULTC by finding the new constraint residuals. */ i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dxnew[i__] = dx[i__] + step * sdirn[i__]; } if (mcon > nact) { kl = nact + 1; i__1 = mcon; for (k = kl; k <= i__1; ++k) { kk = iact[k]; sum = resmax - b[kk]; sumabs = resmax + (d__1 = b[kk], abs(d__1)); i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { temp = a[i__ + kk * a_dim1] * dxnew[i__]; sum += temp; sumabs += abs(temp); } acca = sumabs + abs(sum) * .1f; accb = sumabs + abs(sum) * .2f; if (sumabs >= acca || acca >= accb) { sum = 0.f; } vmultd[k] = sum; } } /* Calculate the fraction of the step from DX to DXNEW that will be taken. */ ratio = 1.; icon = 0; i__1 = mcon; for (k = 1; k <= i__1; ++k) { if (vmultd[k] < 0.) { temp = vmultc[k] / (vmultc[k] - vmultd[k]); if (temp < ratio) { ratio = temp; icon = k; } } } /* Update DX, VMULTC and RESMAX. */ temp = 1. - ratio; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { dx[i__] = temp * dx[i__] + ratio * dxnew[i__]; } i__1 = mcon; for (k = 1; k <= i__1; ++k) { d__1 = 0., d__2 = temp * vmultc[k] + ratio * vmultd[k]; vmultc[k] = max(d__1,d__2); } if (mcon == *m) { resmax = resold + ratio * (resmax - resold); } /* If the full step is not acceptable then begin another iteration. */ /* Otherwise switch to stage two or end the calculation. */ if (icon > 0) { goto L70; } if (step == stpful) { goto L500; } L480: mcon = *m + 1; icon = mcon; iact[mcon] = mcon; vmultc[mcon] = 0.; goto L60; /* We employ any freedom that may be available to reduce the objective */ /* function before returning a DX whose length is less than RHO. */ L490: if (mcon == *m) { goto L480; } *ifull = 0; L500: return 0; } /* trstlp */ openturns-1.9/lib/src/Base/Optim/algocobyla.h000066400000000000000000000103771307543307100212170ustar00rootroot00000000000000/* cobyla : contrained optimization by linear approximation */ /* * Copyright (c) 1992, Michael J. D. Powell (M.J.D.Powell@damtp.cam.ac.uk) * Copyright (c) 2004, Jean-Sebastien Roy (js@jeannot.org) * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * This software is a C version of COBYLA2, a contrained optimization by linear * approximation package developed by Michael J. D. Powell in Fortran. * * The original source code can be found at : * http://plato.la.asu.edu/topics/problems/nlores.html */ /* $Jeannot: cobyla.h,v 1.10 2004/04/18 09:51:37 js Exp $ */ #ifndef _COBYLA_ #define _COBYLA_ #include "openturns/OTdebug.h" BEGIN_C_DECLS /* * Verbosity level */ typedef enum { COBYLA_MSG_NONE = 0, /* No messages */ COBYLA_MSG_EXIT = 1, /* Exit reasons */ COBYLA_MSG_ITER = 2, /* Rho and Sigma changes */ COBYLA_MSG_INFO = 3, /* Informational messages */ } cobyla_message; /* * Possible return values for cobyla */ typedef enum { COBYLA_MINRC = -2, /* Constant to add to get the rc_string */ COBYLA_EINVAL = -2, /* N<0 or M<0 */ COBYLA_ENOMEM = -1, /* Memory allocation failed */ COBYLA_NORMAL = 0, /* Normal return from cobyla */ COBYLA_MAXFUN = 1, /* Maximum number of function evaluations reach */ COBYLA_ROUNDING = 2, /* Rounding errors are becoming damaging */ COBYLA_USERABORT = 3 /* User requested end of minimization */ } cobyla_rc; /* * Return code strings * use cobyla_rc_string[rc - COBYLA_MINRC] to get the message associated with * return code rc. */ extern char *cobyla_rc_string[6]; /* * A function as required by cobyla * state is a void pointer provided to the function at each call * * n : the number of variables * m : the number of constraints * x : on input, then vector of variables (should not be modified) * f : on output, the value of the function * con : on output, the value of the constraints (vector of size m) * state : on input, the value of the state variable as provided to cobyla * * COBYLA will try to make all the values of the constraints positive. * So if you want to input a constraint j such as x[i] <= MAX, set: * con[j] = MAX - x[i] * The function must returns 0 if no error occurs or 1 to immediately end the * minimization. * */ typedef int cobyla_function(int n, int m, double *x, double *f, double *con, void *state); /* * cobyla : minimize a function subject to constraints * * n : number of variables (>=0) * m : number of constraints (>=0) * x : on input, initial estimate ; on output, the solution * rhobeg : a reasonable initial change to the variables * rhoend : the required accuracy for the variables * message : see the cobyla_message enum * maxfun : on input, the maximum number of function evaluations * on output, the number of function evaluations done * calcfc : the function to minimize (see cobyla_function) * state : used by function (see cobyla_function) * * The cobyla function returns a code defined in the cobyla_rc enum. * */ extern int ot_cobyla(int n, int m, double *x, double rhobeg, double rhoend, int message, int *maxfun, cobyla_function *calcfc, void *state); END_C_DECLS #endif /* _COBYLA_ */ openturns-1.9/lib/src/Base/Optim/algotnc.c000066400000000000000000001566111307543307100205270ustar00rootroot00000000000000/* tnc : truncated newton bound constrained minimization using gradient information, in C */ /* * Copyright (c) 2002-2005, Jean-Sebastien Roy (js@jeannot.org) * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * This software is a C implementation of TNBC, a truncated newton minimization * package originally developed by Stephen G. Nash in Fortran. * * The original source code can be found at : * http://iris.gmu.edu/~snash/nash/software/software.html * * Copyright for the original TNBC fortran routines: * * TRUNCATED-NEWTON METHOD: SUBROUTINES * WRITTEN BY: STEPHEN G. NASH * SCHOOL OF INFORMATION TECHNOLOGY & ENGINEERING * GEORGE MASON UNIVERSITY * FAIRFAX, VA 22030 */ /* * Conversion into C by Elisabeth Nguyen & Jean-Sebastien Roy * Modifications by Jean-Sebastien Roy, 2001-2002 */ static char const rcsid[] = "@(#) $Jeannot: tnc.c,v 1.205 2005/01/28 18:27:31 js Exp $"; static char const copyright[] = "(c) 2002-2003, Jean-Sebastien Roy (js@jeannot.org)"; #include #include #include #include "algotnc.h" typedef enum { TNC_FALSE = 0, TNC_TRUE } logical; /* * Return code strings */ char *tnc_rc_string[11] = { "Memory allocation failed", "Invalid parameters (n<0)", "Infeasible (low bound > up bound)", "Local minima reach (|pg| ~= 0)", "Converged (|f_n-f_(n-1)| ~= 0)", "Converged (|x_n-x_(n-1)| ~= 0)", "Maximum number of function evaluations reached", "Linear search failed", "All lower bounds are equal to the upper bounds", "Unable to progress", "User requested end of minimization" }; /* * getptc return codes */ typedef enum { GETPTC_OK = 0, /* Suitable point found */ GETPTC_EVAL = 1, /* Function evaluation required */ GETPTC_EINVAL = 2, /* Bad input values */ GETPTC_FAIL = 3 /* No suitable point found */ } getptc_rc; /* * linearSearch return codes */ typedef enum { LS_OK = 0, /* Suitable point found */ LS_MAXFUN = 1, /* Max. number of function evaluations reach */ LS_FAIL = 2, /* No suitable point found */ LS_USERABORT = 3, /* User requested end of minimization */ LS_ENOMEM = 4 /* Memory allocation failed */ } ls_rc; /* * Prototypes */ static tnc_rc tnc_minimize(int n, double x[], double *f, double g[], tnc_function *function, void *state, double xscale[], double xoffset[], double *fscale, double low[], double up[], tnc_message messages, int maxCGit, int maxnfeval, int *nfeval, double eta, double stepmx, double accuracy, double fmin, double ftol, double xtol, double pgtol, double rescale); static getptc_rc getptcInit(double *reltol, double *abstol, double tnytol, double eta, double rmu, double xbnd, double *u, double *fu, double *gu, double *xmin, double *fmin, double *gmin, double *xw, double *fw, double *gw, double *a, double *b, double *oldf, double *b1, double *scxbnd, double *e, double *step, double *factor, logical *braktd, double *gtest1, double *gtest2, double *tol); static getptc_rc getptcIter(double big, double rtsmll, double *reltol, double *abstol, double tnytol, double fpresn, double xbnd, double *u, double *fu, double *gu, double *xmin, double *fmin, double *gmin, double *xw, double *fw, double *gw, double *a, double *b, double *oldf, double *b1, double *scxbnd, double *e, double *step, double *factor, logical *braktd, double *gtest1, double *gtest2, double *tol); static void printCurrentIteration(int n, double f, double g[], int niter, int nfeval, int pivot[]); static double initialStep(double fnew, double fmin, double gtp, double smax); static ls_rc linearSearch(int n, tnc_function *function, void *state, double low[], double up[], double xscale[], double xoffset[], double fscale, int pivot[], double eta, double ftol, double xbnd, double p[], double x[], double *f, double *alpha, double gfull[], int maxnfeval, int *nfeval); static int tnc_direction(double *zsol, double *diagb, double *x, double *g, int n, int maxCGit, int maxnfeval, int *nfeval, logical upd1, double yksk, double yrsr, double *sk, double *yk, double *sr, double *yr, logical lreset, tnc_function *function, void *state, double xscale[], double xoffset[], double fscale, int *pivot, double accuracy, double gnorm, double xnorm, double *low, double *up); static double stepMax(double step, int n, double x[], double p[], int pivot[], double low[], double up[], double xscale[], double xoffset[]); /* Active set of constraints */ static void setConstraints(int n, double x[], int pivot[], double xscale[], double xoffset[], double low[], double up[]); static logical addConstraint(int n, double x[], double p[], int pivot[], double low[], double up[], double xscale[], double xoffset[]); static logical removeConstraint(double gtpnew, double gnorm, double pgtolfs, double f, double fLastConstraint, double g[], int pivot[], int n); static void project(int n, double x[], int pivot[]); static int hessianTimesVector(double v[], double gv[], int n, double x[], double g[], tnc_function *function, void *state, double xscale[], double xoffset[], double fscale, double accuracy, double xnorm, double low[], double up[]); static int msolve(double g[], double *y, int n, double sk[], double yk[], double diagb[], double sr[], double yr[], logical upd1, double yksk, double yrsr, logical lreset); static void diagonalScaling(int n, double e[], double v[], double gv[], double r[]); static void ssbfgs(int n, double gamma, double sj[], double *hjv, double hjyj[], double yjsj, double yjhyj, double vsj, double vhyj, double hjp1v[]); static int initPreconditioner(double diagb[], double emat[], int n, logical lreset, double yksk, double yrsr, double sk[], double yk[], double sr[], double yr[], logical upd1); /* Scaling */ static void coercex(int n, double x[], double low[], double up[]); static void unscalex(int n, double x[], double xscale[], double xoffset[]); static void scaleg(int n, double g[], double xscale[], double fscale); static void scalex(int n, double x[], double xscale[], double xoffset[]); static void projectConstants(int n, double x[], double xscale[]); /* Machine precision */ static double mchpr1(void); /* Special blas for incx=incy=1 */ static double ddot1(int n, double dx[], double dy[]); static void dxpy1(int n, double dx[], double dy[]); static void daxpy1(int n, double da, double dx[], double dy[]); static void dcopy1(int n, double dx[], double dy[]); static double dnrm21(int n, double dx[]); /* additionnal blas-like functions */ static void dneg1(int n, double v[]); /* * This routine solves the optimization problem * * minimize f(x) * x * subject to low <= x <= up * * where x is a vector of n real variables. The method used is * a truncated-newton algorithm (see "newton-type minimization via * the lanczos algorithm" by s.g. nash (technical report 378, math. * the lanczos method" by s.g. nash (siam j. numer. anal. 21 (1984), * pp. 770-778). this algorithm finds a local minimum of f(x). It does * not assume that the function f is convex (and so cannot guarantee a * global solution), but does assume that the function is bounded below. * it can solve problems having any number of variables, but it is * especially useful when the number of variables (n) is large. * */ extern int tnc(int n, double x[], double *f, double g[], tnc_function *function, void *state, double low[], double up[], double scale[], double offset[], int messages, int maxCGit, int maxnfeval, double eta, double stepmx, double accuracy, double fmin, double ftol, double xtol, double pgtol, double rescale, int *nfeval) { int rc, frc, i, nc, nfeval_local, free_low = TNC_FALSE, free_up = TNC_FALSE, free_g = TNC_FALSE; double *xscale = NULL, fscale, epsmch, rteps, *xoffset = NULL; if(nfeval==NULL) { /* Ignore nfeval */ nfeval = &nfeval_local; } *nfeval = 0; /* Version info */ if (messages & TNC_MSG_VERS) { fprintf(stderr, "tnc: Version %s, %s\n",TNC_VERSION,copyright); fprintf(stderr, "tnc: RCS ID: %s\n",rcsid); } /* Check for errors in the input parameters */ if (n == 0) { rc = TNC_CONSTANT; goto cleanup; } if (n < 0) { rc = TNC_EINVAL; goto cleanup; } /* Check bounds arrays */ if (low == NULL) { low = malloc(n*sizeof(*low)); if (low == NULL) { rc = TNC_ENOMEM; goto cleanup; } free_low = TNC_TRUE; for (i = 0 ; i < n ; i++) low[i] = -HUGE_VAL; } if (up == NULL) { up = malloc(n*sizeof(*up)); if (up == NULL) { rc = TNC_ENOMEM; goto cleanup; } free_up = TNC_TRUE; for (i = 0 ; i < n ; i++) up[i] = HUGE_VAL; } /* Coherency check */ for (i = 0 ; i < n ; i++) { if (low[i] > up [i]) { rc = TNC_INFEASIBLE; goto cleanup; } } /* Coerce x into bounds */ coercex(n, x, low, up); if (maxnfeval < 1) { rc = TNC_MAXFUN; goto cleanup; } /* Allocate g if necessary */ if(g == NULL) { g = malloc(n*sizeof(*g)); if (g == NULL) { rc = TNC_ENOMEM; goto cleanup; } free_g = TNC_TRUE; } /* Initial function evaluation */ frc = function(x, f, g, state); (*nfeval) ++; if (frc) { rc = TNC_USERABORT; goto cleanup; } /* Constant problem ? */ for (nc = 0, i = 0 ; i < n ; i++) if ((low[i] == up[i]) || (scale != NULL && scale[i] == 0.0)) nc ++; if (nc == n) { rc = TNC_CONSTANT; goto cleanup; } /* Scaling parameters */ xscale = malloc(sizeof(*xscale)*n); if (xscale == NULL) { rc = TNC_ENOMEM; goto cleanup; } xoffset = malloc(sizeof(*xoffset)*n); if (xoffset == NULL) { rc = TNC_ENOMEM; goto cleanup; } fscale = 1.0; for (i = 0 ; i < n ; i++) { if (scale != NULL) { xscale[i] = fabs(scale[i]); if (xscale[i] == 0.0) xoffset[i] = low[i] = up[i] = x[i]; } else if (low[i] != -HUGE_VAL && up[i] != HUGE_VAL) { xscale[i] = up[i] - low[i]; xoffset[i] = (up[i]+low[i])*0.5; } else { xscale[i] = 1.0+fabs(x[i]); xoffset[i] = x[i]; } if (offset != NULL) xoffset[i] = offset[i]; } /* Default values for parameters */ epsmch = mchpr1(); rteps = sqrt(epsmch); if (stepmx < rteps * 10.0) stepmx = 1.0e1; if (eta < 0.0 || eta >= 1.0) eta = 0.25; if (rescale < 0) rescale = 1.3; if (maxCGit < 0) /* maxCGit == 0 is valid */ { maxCGit = n / 2; if (maxCGit < 1) maxCGit = 1; else if (maxCGit > 50) maxCGit = 50; } if (maxCGit > n) maxCGit = n; if (accuracy <= epsmch) accuracy = rteps; if (ftol < 0.0) ftol = accuracy; if (pgtol < 0.0) pgtol = 1e-2 * sqrt(accuracy); if (xtol < 0.0) xtol = rteps; /* Optimisation */ rc = tnc_minimize(n, x, f, g, function, state, xscale, xoffset, &fscale, low, up, messages, maxCGit, maxnfeval, nfeval, eta, stepmx, accuracy, fmin, ftol, xtol, pgtol, rescale); cleanup: if (messages & TNC_MSG_EXIT) fprintf(stderr, "tnc: %s\n", tnc_rc_string[rc - TNC_MINRC]); if (xscale) free(xscale); if (free_low) free(low); if (free_up) free(up); if (free_g) free(g); if (xoffset) free(xoffset); return rc; } /* Coerce x into bounds */ static void coercex(int n, double x[], double low[], double up[]) { int i; for (i = 0 ; i < n ; i++) { if (x[i]up[i]) x[i] = up[i]; } } /* Unscale x */ static void unscalex(int n, double x[], double xscale[], double xoffset[]) { int i; for (i = 0 ; i < n ; i++) x[i] = x[i]*xscale[i]+xoffset[i]; } /* Scale x */ static void scalex(int n, double x[], double xscale[], double xoffset[]) { int i; for (i = 0 ; i < n ; i++) if (xscale[i]>0.0) x[i] = (x[i]-xoffset[i])/xscale[i]; } /* Scale g */ static void scaleg(int n, double g[], double xscale[], double fscale) { int i; for (i = 0 ; i < n ; i++) g[i] *= xscale[i]*fscale; } /* Caculate the pivot vector */ static void setConstraints(int n, double x[], int pivot[], double xscale[], double xoffset[], double low[], double up[]) { int i; double epsmch; epsmch = mchpr1(); for (i = 0; i < n; i++) { /* tolerances should be better ajusted */ if (xscale[i] == 0.0) { pivot[i] = 2; } else { if (low[i] != - HUGE_VAL && (x[i]*xscale[i]+xoffset[i] - low[i] <= epsmch * 10.0 * (fabs(low[i]) + 1.0))) pivot[i] = -1; else { if (up[i] != HUGE_VAL && (x[i]*xscale[i]+xoffset[i] - up[i] >= epsmch * 10.0 * (fabs(up[i]) + 1.0))) pivot[i] = 1; else pivot[i] = 0; } } } } /* * This routine is a bounds-constrained truncated-newton method. * the truncated-newton method is preconditioned by a limited-memory * quasi-newton method (this preconditioning strategy is developed * in this routine) with a further diagonal scaling * (see routine diagonalscaling). */ static tnc_rc tnc_minimize(int n, double x[], double *f, double gfull[], tnc_function *function, void *state, double xscale[], double xoffset[], double *fscale, double low[], double up[], tnc_message messages, int maxCGit, int maxnfeval, int *nfeval, double eta, double stepmx, double accuracy, double fmin, double ftol, double xtol, double pgtol, double rescale) { double fLastReset, difnew, epsmch, epsred, oldgtp, difold, oldf, xnorm, newscale, gnorm, ustpmax, fLastConstraint, spe, yrsr, yksk, *temp = NULL, *sk = NULL, *yk = NULL, *diagb = NULL, *sr = NULL, *yr = NULL, *oldg = NULL, *pk = NULL, *g = NULL; double alpha = 0.0; /* Default unused value */ int i, icycle, niter = 0, oldnfeval, *pivot = NULL, frc; logical lreset, newcon, upd1, remcon; tnc_rc rc = TNC_ENOMEM; /* Default error */ /* Allocate temporary vectors */ oldg = malloc(sizeof(*oldg)*n); if (oldg == NULL) goto cleanup; g = malloc(sizeof(*g)*n); if (g == NULL) goto cleanup; temp = malloc(sizeof(*temp)*n); if (temp == NULL) goto cleanup; diagb = malloc(sizeof(*diagb)*n); if (diagb == NULL) goto cleanup; pk = malloc(sizeof(*pk)*n); if (pk == NULL) goto cleanup; sk = malloc(sizeof(*sk)*n); if (sk == NULL) goto cleanup; yk = malloc(sizeof(*yk)*n); if (yk == NULL) goto cleanup; sr = malloc(sizeof(*sr)*n); if (sr == NULL) goto cleanup; yr = malloc(sizeof(*yr)*n); if (yr == NULL) goto cleanup; pivot = malloc(sizeof(*pivot)*n); if (pivot == NULL) goto cleanup; /* Initialize variables */ epsmch = mchpr1(); difnew = 0.0; epsred = 0.05; upd1 = TNC_TRUE; icycle = n - 1; newcon = TNC_TRUE; /* Uneeded initialisations */ lreset = TNC_FALSE; yrsr = 0.0; yksk = 0.0; /* Initial scaling */ scalex(n, x, xscale, xoffset); (*f) *= *fscale; /* initial pivot calculation */ setConstraints(n, x, pivot, xscale, xoffset, low, up); dcopy1(n, gfull, g); scaleg(n, g, xscale, *fscale); /* Test the lagrange multipliers to see if they are non-negative. */ for (i = 0; i < n; i++) if (-pivot[i] * g[i] < 0.0) pivot[i] = 0; project(n, g, pivot); /* Set initial values to other parameters */ gnorm = dnrm21(n, g); fLastConstraint = *f; /* Value at last constraint */ fLastReset = *f; /* Value at last reset */ if (messages & TNC_MSG_ITER) fprintf(stderr, " NIT NF F GTG\n"); if (messages & TNC_MSG_ITER) printCurrentIteration(n, *f / *fscale, gfull, niter, *nfeval, pivot); /* Set the diagonal of the approximate hessian to unity. */ for (i = 0; i < n; i++) diagb[i] = 1.0; /* Start of main iterative loop */ while(TNC_TRUE) { /* Local minimum test */ if (dnrm21(n, g) <= pgtol * (*fscale)) { /* |PG| == 0.0 => local minimum */ dcopy1(n, gfull, g); project(n, g, pivot); if (messages & TNC_MSG_INFO) fprintf(stderr, "tnc: |pg| = %g -> local minimum\n", dnrm21(n, g) / (*fscale)); rc = TNC_LOCALMINIMUM; break; } /* Terminate if more than maxnfeval evaluations have been made */ if (*nfeval >= maxnfeval) { rc = TNC_MAXFUN; break; } /* Rescale function if necessary */ newscale = dnrm21(n, g); if ((newscale > epsmch) && (fabs(log10(newscale)) > rescale)) { newscale = 1.0/newscale; *f *= newscale; *fscale *= newscale; gnorm *= newscale; fLastConstraint *= newscale; fLastReset *= newscale; difnew *= newscale; for (i = 0; i < n; i++) g[i] *= newscale; for (i = 0; i < n; i++) diagb[i] = 1.0; upd1 = TNC_TRUE; icycle = n - 1; newcon = TNC_TRUE; if (messages & TNC_MSG_INFO) fprintf(stderr, "tnc: fscale = %g\n", *fscale); } dcopy1(n, x, temp); project(n, temp, pivot); xnorm = dnrm21(n, temp); oldnfeval = *nfeval; /* Compute the new search direction */ frc = tnc_direction(pk, diagb, x, g, n, maxCGit, maxnfeval, nfeval, upd1, yksk, yrsr, sk, yk, sr, yr, lreset, function, state, xscale, xoffset, *fscale, pivot, accuracy, gnorm, xnorm, low, up); if (frc == -1) { rc = TNC_ENOMEM; break; } if (frc) { rc = TNC_USERABORT; break; } if (!newcon) { if (!lreset) { /* Compute the accumulated step and its corresponding gradient difference. */ dxpy1(n, sk, sr); dxpy1(n, yk, yr); icycle++; } else { /* Initialize the sum of all the changes */ dcopy1(n, sk, sr); dcopy1(n, yk, yr); fLastReset = *f; icycle = 1; } } dcopy1(n, g, oldg); oldf = *f; oldgtp = ddot1(n, pk, g); /* Maximum unconstrained step length */ ustpmax = stepmx / (dnrm21(n, pk) + epsmch); /* Maximum constrained step length */ spe = stepMax(ustpmax, n, x, pk, pivot, low, up, xscale, xoffset); if (spe > 0.0) { ls_rc lsrc; /* Set the initial step length */ alpha = initialStep(*f, fmin / (*fscale), oldgtp, spe); /* Perform the linear search */ lsrc = linearSearch(n, function, state, low, up, xscale, xoffset, *fscale, pivot, eta, ftol, spe, pk, x, f, &alpha, gfull, maxnfeval, nfeval); if (lsrc == LS_ENOMEM) { rc = TNC_ENOMEM; break; } if (lsrc == LS_USERABORT) { rc = TNC_USERABORT; break; } if (lsrc == LS_FAIL) { rc = TNC_LSFAIL; break; } /* If we went up to the maximum unconstrained step, increase it */ if (alpha >= 0.9 * ustpmax) { stepmx *= 1e2; if (messages & TNC_MSG_INFO) fprintf(stderr, "tnc: stepmx = %g\n", stepmx); } /* If we went up to the maximum constrained step, a new constraint was encountered */ if (alpha - spe >= -epsmch * 10.0) { newcon = TNC_TRUE; } else { /* Break if the linear search has failed to find a lower point */ if (lsrc != LS_OK) { if (lsrc == LS_MAXFUN) rc = TNC_MAXFUN; else rc = TNC_LSFAIL; break; } newcon = TNC_FALSE; } } else { /* Maximum constrained step == 0.0 => new constraint */ newcon = TNC_TRUE; } if (newcon) { if(!addConstraint(n, x, pk, pivot, low, up, xscale, xoffset)) { if(*nfeval == oldnfeval) { rc = TNC_NOPROGRESS; break; } } fLastConstraint = *f; } niter++; /* Set up parameters used in convergence and resetting tests */ difold = difnew; difnew = oldf - *f; /* If this is the first iteration of a new cycle, compute the percentage reduction factor for the resetting test */ if (icycle == 1) { if (difnew > difold * 2.0) epsred += epsred; if (difnew < difold * 0.5) epsred *= 0.5; } dcopy1(n, gfull, g); scaleg(n, g, xscale, *fscale); dcopy1(n, g, temp); project(n, temp, pivot); gnorm = dnrm21(n, temp); /* Reset pivot */ remcon = removeConstraint(oldgtp, gnorm, pgtol * (*fscale), *f, fLastConstraint, g, pivot, n); /* If a constraint is removed */ if (remcon) { /* Recalculate gnorm and reset fLastConstraint */ dcopy1(n, g, temp); project(n, temp, pivot); gnorm = dnrm21(n, temp); fLastConstraint = *f; } if (!remcon && !newcon) { /* No constraint removed & no new constraint : tests for convergence */ if (fabs(difnew) <= ftol * (*fscale)) { if (messages & TNC_MSG_INFO) fprintf(stderr, "tnc: |fn-fn-1] = %g -> convergence\n", fabs(difnew) / (*fscale)); rc = TNC_FCONVERGED; break; } if (alpha * dnrm21(n, pk) <= xtol) { if (messages & TNC_MSG_INFO) fprintf(stderr, "tnc: |xn-xn-1] = %g -> convergence\n", alpha * dnrm21(n, pk)); rc = TNC_XCONVERGED; break; } } project(n, g, pivot); if (messages & TNC_MSG_ITER) printCurrentIteration(n, *f / *fscale, gfull, niter, *nfeval, pivot); /* Compute the change in the iterates and the corresponding change in the gradients */ if (!newcon) { for (i = 0; i < n; i++) { yk[i] = g[i] - oldg[i]; sk[i] = alpha * pk[i]; } /* Set up parameters used in updating the preconditioning strategy */ yksk = ddot1(n, yk, sk); if (icycle == (n - 1) || difnew < epsred * (fLastReset - *f)) lreset = TNC_TRUE; else { yrsr = ddot1(n, yr, sr); if (yrsr <= 0.0) lreset = TNC_TRUE; else lreset = TNC_FALSE; } upd1 = TNC_FALSE; } } if (messages & TNC_MSG_ITER) printCurrentIteration(n, *f / *fscale, gfull, niter, *nfeval, pivot); /* Unscaling */ unscalex(n, x, xscale, xoffset); coercex(n, x, low, up); (*f) /= *fscale; cleanup: if (oldg) free(oldg); if (g) free(g); if (temp) free(temp); if (diagb) free(diagb); if (pk) free(pk); if (sk) free(sk); if (yk) free(yk); if (sr) free(sr); if (yr) free(yr); if (pivot) free(pivot); return rc; } /* Print the results of the current iteration */ static void printCurrentIteration(int n, double f, double g[], int niter, int nfeval, int pivot[]) { int i; double gtg; gtg = 0.0; for (i = 0; i < n; i++) if (pivot[i] == 0) gtg += g[i] * g[i]; fprintf(stderr, " %4d %4d %22.15E %15.8E\n", niter, nfeval, f, gtg); } /* * Set x[i] = 0.0 if direction i is currently constrained */ static void project(int n, double x[], int pivot[]) { int i; for (i = 0; i < n; i++) if (pivot[i] != 0) x[i] = 0.0; } /* * Set x[i] = 0.0 if direction i is constant */ static void projectConstants(int n, double x[], double xscale[]) { int i; for (i = 0; i < n; i++) if (xscale[i] == 0.0) x[i] = 0.0; } /* * Compute the maximum allowable step length */ static double stepMax(double step, int n, double x[], double dir[], int pivot[], double low[], double up[], double xscale[], double xoffset[]) { int i; double t; /* Constrained maximum step */ for (i = 0; i < n; i++) { if ((pivot[i] == 0) && (dir[i] != 0.0)) { if (dir[i] < 0.0) { t = (low[i]-xoffset[i])/xscale[i] - x[i]; if (t > step * dir[i]) step = t / dir[i]; } else { t = (up[i]-xoffset[i])/xscale[i] - x[i]; if (t < step * dir[i]) step = t / dir[i]; } } } return step; } /* * Update the constraint vector pivot if a new constraint is encountered */ static logical addConstraint(int n, double x[], double p[], int pivot[], double low[], double up[], double xscale[], double xoffset[]) { int i, newcon = TNC_FALSE; double tol, epsmch; epsmch = mchpr1(); for (i = 0; i < n; i++) { if ((pivot[i] == 0) && (p[i] != 0.0)) { if (p[i] < 0.0 && low[i] != - HUGE_VAL) { tol = epsmch * 10.0 * (fabs(low[i]) + 1.0); if (x[i]*xscale[i]+xoffset[i] - low[i] <= tol) { pivot[i] = -1; x[i] = (low[i]-xoffset[i])/xscale[i]; newcon = TNC_TRUE; } } else if (up[i] != HUGE_VAL) { tol = epsmch * 10.0 * (fabs(up[i]) + 1.0); if (up[i] - (x[i]*xscale[i]+xoffset[i]) <= tol) { pivot[i] = 1; x[i] = (up[i]-xoffset[i])/xscale[i]; newcon = TNC_TRUE; } } } } return newcon; } /* * Check if a constraint is no more active */ static logical removeConstraint(double gtpnew, double gnorm, double pgtolfs, double f, double fLastConstraint, double g[], int pivot[], int n) { double cmax, t; int imax, i; if (((fLastConstraint - f) <= (gtpnew * -0.5)) && (gnorm > pgtolfs)) return TNC_FALSE; imax = -1; cmax = 0.0; for (i = 0; i < n; i++) { if (pivot[i] == 2) continue; t = -pivot[i] * g[i]; if (t < cmax) { cmax = t; imax = i; } } if (imax != -1) { pivot[imax] = 0; return TNC_TRUE; } else return TNC_FALSE; /* * For details, see gill, murray, and wright (1981, p. 308) and * fletcher (1981, p. 116). The multiplier tests (here, testing * the sign of the components of the gradient) may still need to * modified to incorporate tolerances for zero. */ } /* * This routine performs a preconditioned conjugate-gradient * iteration in order to solve the newton equations for a search * direction for a truncated-newton algorithm. * When the value of the quadratic model is sufficiently reduced, * the iteration is terminated. */ static int tnc_direction(double *zsol, double *diagb, double *x, double g[], int n, int maxCGit, int maxnfeval, int *nfeval, logical upd1, double yksk, double yrsr, double *sk, double *yk, double *sr, double *yr, logical lreset, tnc_function *function, void *state, double xscale[], double xoffset[], double fscale, int *pivot, double accuracy, double gnorm, double xnorm, double low[], double up[]) { double alpha, beta, qold, qnew, rhsnrm, tol, vgv, rz, rzold, qtest, pr, gtp; int i, k, frc; /* Temporary vectors */ double *r = NULL, *zk = NULL, *v = NULL, *emat = NULL, *gv = NULL; /* No CG it. => dir = -grad */ if (maxCGit == 0) { dcopy1(n, g, zsol); dneg1(n, zsol); project(n, zsol, pivot); return 0; } /* General initialization */ rhsnrm = gnorm; tol = 1e-12; qold = 0.0; rzold = 0.0; /* Uneeded */ frc = -1; /* ENOMEM here */ r = malloc(sizeof(*r)*n); /* Residual */ if (r == NULL) goto cleanup; v = malloc(sizeof(*v)*n); if (v == NULL) goto cleanup; zk = malloc(sizeof(*zk)*n); if (zk == NULL) goto cleanup; emat = malloc(sizeof(*emat)*n); /* Diagonal preconditoning matrix */ if (emat == NULL) goto cleanup; gv = malloc(sizeof(*gv)*n); /* hessian times v */ if (gv == NULL) goto cleanup; /* Initialization for preconditioned conjugate-gradient algorithm */ frc = initPreconditioner(diagb, emat, n, lreset, yksk, yrsr, sk, yk, sr, yr, upd1); if (frc) goto cleanup; for (i = 0; i < n; i++) { r[i] = -g[i]; v[i] = 0.0; zsol[i] = 0.0; /* Computed search direction */ } /* Main iteration */ for (k = 0; k < maxCGit; k++) { /* CG iteration to solve system of equations */ project(n, r, pivot); frc = msolve(r, zk, n, sk, yk, diagb, sr, yr, upd1, yksk, yrsr, lreset); if (frc) goto cleanup; project(n, zk, pivot); rz = ddot1(n, r, zk); if ((rz / rhsnrm < tol) || ((*nfeval) >= (maxnfeval-1))) { /* Truncate algorithm in case of an emergency or too many function evaluations */ if (k == 0) { dcopy1(n, g, zsol); dneg1(n, zsol); project(n, zsol, pivot); } break; } if (k == 0) beta = 0.0; else beta = rz / rzold; for (i = 0; i < n; i++) v[i] = zk[i] + beta * v[i]; project(n, v, pivot); frc = hessianTimesVector(v, gv, n, x, g, function, state, xscale, xoffset, fscale, accuracy, xnorm, low, up); ++(*nfeval); if (frc) goto cleanup; project(n, gv, pivot); vgv = ddot1(n, v, gv); if (vgv / rhsnrm < tol) { /* Truncate algorithm in case of an emergency */ if (k == 0) { frc = msolve(g, zsol, n, sk, yk, diagb, sr, yr, upd1, yksk, yrsr, lreset); if (frc) goto cleanup; dneg1(n, zsol); project(n, zsol, pivot); } break; } diagonalScaling(n, emat, v, gv, r); /* Compute linear step length */ alpha = rz / vgv; /* Compute current solution and related vectors */ daxpy1(n, alpha, v, zsol); daxpy1(n, -alpha, gv, r); /* Test for convergence */ gtp = ddot1(n, zsol, g); pr = ddot1(n, r, zsol); qnew = (gtp + pr) * 0.5; qtest = (k + 1) * (1.0 - qold / qnew); if (qtest <= 0.5) break; /* Perform cautionary test */ if (gtp > 0.0) { /* Truncate algorithm in case of an emergency */ daxpy1(n, -alpha, v, zsol); break; } qold = qnew; rzold = rz; } /* Terminate algorithm */ /* Store (or restore) diagonal preconditioning */ dcopy1(n, emat, diagb); cleanup: if (r) free(r); if (v) free(v); if (zk) free(zk); if (emat) free(emat); if (gv) free(gv); return frc; } /* * Update the preconditioning matrix based on a diagonal version * of the bfgs quasi-newton update. */ static void diagonalScaling(int n, double e[], double v[], double gv[], double r[]) { int i; double vr, vgv; vr = 1.0/ddot1(n, v, r); vgv = 1.0/ddot1(n, v, gv); for (i = 0; i < n; i++) { e[i] += - r[i]*r[i]*vr + gv[i]*gv[i]*vgv; if (e[i] <= 1e-6) e[i] = 1.0; } } /* * Returns the length of the initial step to be taken along the * vector p in the next linear search. */ static double initialStep(double fnew, double fmin, double gtp, double smax) { double d, alpha; d = fabs(fnew - fmin); alpha = 1.0; if (d * 2.0 <= -(gtp) && d >= mchpr1()) alpha = d * -2.0 / gtp; if (alpha >= smax) alpha = smax; return alpha; } /* * Hessian vector product through finite differences */ static int hessianTimesVector(double v[], double gv[], int n, double x[], double g[], tnc_function *function, void *state, double xscale[], double xoffset[], double fscale, double accuracy, double xnorm, double low[], double up[]) { double dinv, f, delta, *xv; int i, frc; xv = malloc(sizeof(*xv)*n); if (xv == NULL) return -1; delta = accuracy * (xnorm + 1.0); for (i = 0; i < n; i++) xv[i] = x[i] + delta * v[i]; unscalex(n, xv, xscale, xoffset); coercex(n, xv, low, up); frc = function(xv, &f, gv, state); free(xv); if (frc) return 1; scaleg(n, gv, xscale, fscale); dinv = 1.0 / delta; for (i = 0; i < n; i++) gv[i] = (gv[i] - g[i]) * dinv; projectConstants(n, gv, xscale); return 0; } /* * This routine acts as a preconditioning step for the * linear conjugate-gradient routine. It is also the * method of computing the search direction from the * gradient for the non-linear conjugate-gradient code. * It represents a two-step self-scaled bfgs formula. */ static int msolve(double g[], double y[], int n, double sk[], double yk[], double diagb[], double sr[], double yr[], logical upd1, double yksk, double yrsr, logical lreset) { double ghyk, ghyr, yksr, ykhyk, ykhyr, yrhyr, rdiagb, gsr, gsk; int i, frc; double *hg = NULL, *hyk = NULL, *hyr = NULL; if (upd1) { for (i = 0; i < n; i++) y[i] = g[i] / diagb[i]; return 0; } frc = -1; gsk = ddot1(n, g, sk); hg = malloc(sizeof(*hg)*n); if (hg == NULL) goto cleanup; hyr = malloc(sizeof(*hyr)*n); if (hyr == NULL) goto cleanup; hyk = malloc(sizeof(*hyk)*n); if (hyk == NULL) goto cleanup; frc = 0; /* Compute gh and hy where h is the inverse of the diagonals */ if (lreset) { for (i = 0; i < n; i++) { rdiagb = 1.0 / diagb[i]; hg[i] = g[i] * rdiagb; hyk[i] = yk[i] * rdiagb; } ykhyk = ddot1(n, yk, hyk); ghyk = ddot1(n, g, hyk); ssbfgs(n, 1.0, sk, hg, hyk, yksk, ykhyk, gsk, ghyk, y); } else { for (i = 0; i < n; i++) { rdiagb = 1.0 / diagb[i]; hg[i] = g[i] * rdiagb; hyk[i] = yk[i] * rdiagb; hyr[i] = yr[i] * rdiagb; } gsr = ddot1(n, g, sr); ghyr = ddot1(n, g, hyr); yrhyr = ddot1(n, yr, hyr); ssbfgs(n, 1.0, sr, hg, hyr, yrsr, yrhyr, gsr, ghyr, hg); yksr = ddot1(n, yk, sr); ykhyr = ddot1(n, yk, hyr); ssbfgs(n, 1.0, sr, hyk, hyr, yrsr, yrhyr, yksr, ykhyr, hyk); ykhyk = ddot1(n, hyk, yk); ghyk = ddot1(n, hyk, g); ssbfgs(n, 1.0, sk, hg, hyk, yksk, ykhyk, gsk, ghyk, y); } cleanup: if (hg) free(hg); if (hyk) free(hyk); if (hyr) free(hyr); return frc; } /* * Self-scaled BFGS */ static void ssbfgs(int n, double gamma, double sj[], double hjv[], double hjyj[], double yjsj, double yjhyj, double vsj, double vhyj, double hjp1v[]) { double beta, delta; int i; if (yjsj == 0.0) { delta = 0.0; beta = 0.0; } else { delta = (gamma * yjhyj / yjsj + 1.0) * vsj / yjsj - gamma * vhyj / yjsj; beta = -gamma * vsj / yjsj; } for (i = 0; i < n; i++) hjp1v[i] = gamma * hjv[i] + delta * sj[i] + beta * hjyj[i]; } /* * Initialize the preconditioner */ static int initPreconditioner(double diagb[], double emat[], int n, logical lreset, double yksk, double yrsr, double sk[], double yk[], double sr[], double yr[], logical upd1) { double srds, yrsk, td, sds; int i; double *bsk; if (upd1) { dcopy1(n, diagb, emat); return 0; } bsk = malloc(sizeof(*bsk)*n); if (bsk == NULL) return -1; if (lreset) { for (i = 0; i < n; i++) bsk[i] = diagb[i] * sk[i]; sds = ddot1(n, sk, bsk); if (yksk == 0.0) yksk = 1.0; if (sds == 0.0) sds = 1.0; for (i = 0; i < n; i++) { td = diagb[i]; emat[i] = td - td * td * sk[i] * sk[i] / sds + yk[i] * yk[i] / yksk; } } else { for (i = 0; i < n; i++) bsk[i] = diagb[i] * sr[i]; sds = ddot1(n, sr, bsk); srds = ddot1(n, sk, bsk); yrsk = ddot1(n, yr, sk); if (yrsr == 0.0) yrsr = 1.0; if (sds == 0.0) sds = 1.0; for (i = 0; i < n; i++) { td = diagb[i]; bsk[i] = td * sk[i] - bsk[i] * srds / sds + yr[i] * yrsk / yrsr; emat[i] = td - td * td * sr[i] * sr[i] / sds + yr[i] * yr[i] / yrsr; } sds = ddot1(n, sk, bsk); if (yksk == 0.0) yksk = 1.0; if (sds == 0.0) sds = 1.0; for (i = 0; i < n; i++) emat[i] = emat[i] - bsk[i] * bsk[i] / sds + yk[i] * yk[i] / yksk; } free(bsk); return 0; } /* * Line search algorithm of gill and murray */ static ls_rc linearSearch(int n, tnc_function *function, void *state, double low[], double up[], double xscale[], double xoffset[], double fscale, int pivot[], double eta, double ftol, double xbnd, double p[], double x[], double *f, double *alpha, double gfull[], int maxnfeval, int *nfeval) { double b1, big, tol, rmu, fpresn, fu, gu, fw, gw, gtest1, gtest2, oldf, fmin, gmin, rtsmll, step, a, b, e, u, ualpha, factor, scxbnd, xw, epsmch, reltol, abstol, tnytol, pe, xnorm, rteps; double *temp = NULL, *tempgfull = NULL, *newgfull = NULL; int maxlsit = 64, i, itcnt, frc; ls_rc rc; getptc_rc itest; logical braktd; rc = LS_ENOMEM; temp = malloc(sizeof(*temp)*n); if (temp == NULL) goto cleanup; tempgfull = malloc(sizeof(*tempgfull)*n); if (tempgfull == NULL) goto cleanup; newgfull = malloc(sizeof(*newgfull)*n); if (newgfull == NULL) goto cleanup; dcopy1(n, gfull, temp); scaleg(n, temp, xscale, fscale); gu = ddot1(n, temp, p); dcopy1(n, x, temp); project(n, temp, pivot); xnorm = dnrm21(n, temp); /* Compute the absolute and relative tolerances for the linear search */ epsmch = mchpr1(); rteps = sqrt(epsmch); pe = dnrm21(n, p) + epsmch; reltol = rteps * (xnorm + 1.0) / pe; abstol = -epsmch * (1.0 + fabs(*f)) / (gu - epsmch); /* Compute the smallest allowable spacing between points in the linear search */ tnytol = epsmch * (xnorm + 1.0) / pe; rtsmll = epsmch; big = 1.0 / (epsmch * epsmch); itcnt = 0; /* Set the estimated relative precision in f(x). */ fpresn = ftol; u = *alpha; fu = *f; fmin = *f; rmu = 1e-4; /* Setup */ itest = getptcInit(&reltol, &abstol, tnytol, eta, rmu, xbnd, &u, &fu, &gu, alpha, &fmin, &gmin, &xw, &fw, &gw, &a, &b, &oldf, &b1, &scxbnd, &e, &step, &factor, &braktd, >est1, >est2, &tol); /* If itest == GETPTC_EVAL, the algorithm requires the function value to be calculated */ while(itest == GETPTC_EVAL) { /* Test for too many iterations or too many function evals */ if ((++itcnt > maxlsit) || ((*nfeval) >= maxnfeval)) break; ualpha = *alpha + u; for (i = 0; i < n; i++) temp[i] = x[i] + ualpha * p[i]; /* Function evaluation */ unscalex(n, temp, xscale, xoffset); coercex(n, temp, low, up); frc = function(temp, &fu, tempgfull, state); ++(*nfeval); if (frc) { rc = LS_USERABORT; goto cleanup; } fu *= fscale; dcopy1(n, tempgfull, temp); scaleg(n, temp, xscale, fscale); gu = ddot1(n, temp, p); itest = getptcIter(big, rtsmll, &reltol, &abstol, tnytol, fpresn, xbnd, &u, &fu, &gu, alpha, &fmin, &gmin, &xw, &fw, &gw, &a, &b, &oldf, &b1, &scxbnd, &e, &step, &factor, &braktd, >est1, >est2, &tol); /* New best point ? */ if (*alpha == ualpha) dcopy1(n, tempgfull, newgfull); } if (itest == GETPTC_OK) { /* A successful search has been made */ *f = fmin; daxpy1(n, *alpha, p, x); dcopy1(n, newgfull, gfull); rc = LS_OK; } /* Too many iterations ? */ else if (itcnt > maxlsit) rc = LS_FAIL; /* If itest=GETPTC_FAIL or GETPTC_EINVAL a lower point could not be found */ else if (itest != GETPTC_EVAL) rc = LS_FAIL; /* Too many function evaluations */ else rc = LS_MAXFUN; cleanup: if (temp) free(temp); if (tempgfull) free(tempgfull); if (newgfull) free(newgfull); return rc; } /* * getptc, an algorithm for finding a steplength, called repeatedly by * routines which require a step length to be computed using cubic * interpolation. The parameters contain information about the interval * in which a lower point is to be found and from this getptc computes a * point at which the function can be evaluated by the calling program. */ static getptc_rc getptcInit(double *reltol, double *abstol, double tnytol, double eta, double rmu, double xbnd, double *u, double *fu, double *gu, double *xmin, double *fmin, double *gmin, double *xw, double *fw, double *gw, double *a, double *b, double *oldf, double *b1, double *scxbnd, double *e, double *step, double *factor, logical *braktd, double *gtest1, double *gtest2, double *tol) { /* Check input parameters */ if (*u <= 0.0 || xbnd <= tnytol || *gu > 0.0) return GETPTC_EINVAL; if (xbnd < *abstol) *abstol = xbnd; *tol = *abstol; /* a and b define the interval of uncertainty, x and xw are points */ /* with lowest and second lowest function values so far obtained. */ /* initialize a,smin,xw at origin and corresponding values of */ /* function and projection of the gradient along direction of search */ /* at values for latest estimate at minimum. */ *a = 0.0; *xw = 0.0; *xmin = 0.0; *oldf = *fu; *fmin = *fu; *fw = *fu; *gw = *gu; *gmin = *gu; *step = *u; *factor = 5.0; /* The minimum has not yet been bracketed. */ *braktd = TNC_FALSE; /* Set up xbnd as a bound on the step to be taken. (xbnd is not computed */ /* explicitly but scxbnd is its scaled value.) Set the upper bound */ /* on the interval of uncertainty initially to xbnd + tol(xbnd). */ *scxbnd = xbnd; *b = *scxbnd + *reltol * fabs(*scxbnd) + *abstol; *e = *b + *b; *b1 = *b; /* Compute the constants required for the two convergence criteria. */ *gtest1 = -rmu * *gu; *gtest2 = -eta * *gu; /* If the step is too large, replace by the scaled bound (so as to */ /* compute the new point on the boundary). */ if (*step >= *scxbnd) { *step = *scxbnd; /* Move sxbd to the left so that sbnd + tol(xbnd) = xbnd. */ *scxbnd -= (*reltol * fabs(xbnd) + *abstol) / (1.0 + *reltol); } *u = *step; if (fabs(*step) < *tol && *step < 0.0) *u = -(*tol); if (fabs(*step) < *tol && *step >= 0.0) *u = *tol; return GETPTC_EVAL; } static getptc_rc getptcIter(double big, double rtsmll, double *reltol, double *abstol, double tnytol, double fpresn, double xbnd, double *u, double *fu, double *gu, double *xmin, double *fmin, double *gmin, double *xw, double *fw, double *gw, double *a, double *b, double *oldf, double *b1, double *scxbnd, double *e, double *step, double *factor, logical *braktd, double *gtest1, double *gtest2, double *tol) { double abgw, absr, p, q, r, s, scale, denom, a1, d1, d2, sumsq, abgmin, chordm, chordu, xmidpt, twotol; logical convrg; /* Update a,b,xw, and xmin */ if (*fu <= *fmin) { /* If function value not increased, new point becomes next */ /* origin and other points are scaled accordingly. */ chordu = *oldf - (*xmin + *u) * *gtest1; if (*fu > chordu) { /* The new function value does not satisfy the sufficient decrease */ /* criterion. prepare to move the upper bound to this point and */ /* force the interpolation scheme to either bisect the interval of */ /* uncertainty or take the linear interpolation step which estimates */ /* the root of f(alpha)=chord(alpha). */ chordm = *oldf - *xmin * *gtest1; *gu = -(*gmin); denom = chordm - *fmin; if (fabs(denom) < 1e-15) { denom = 1e-15; if (chordm - *fmin < 0.0) denom = -denom; } if (*xmin != 0.0) *gu = *gmin * (chordu - *fu) / denom; *fu = 0.5 * *u * (*gmin + *gu) + *fmin; if (*fu < *fmin) *fu = *fmin; } else { *fw = *fmin; *fmin = *fu; *gw = *gmin; *gmin = *gu; *xmin += *u; *a -= *u; *b -= *u; *xw = -(*u); *scxbnd -= *u; if (*gu <= 0.0) { *a = 0.0; } else { *b = 0.0; *braktd = TNC_TRUE; } *tol = fabs(*xmin) * *reltol + *abstol; goto ConvergenceCheck; } } /* If function value increased, origin remains unchanged */ /* but new point may now qualify as w. */ if (*u < 0.0) *a = *u; else { *b = *u; *braktd = TNC_TRUE; } *xw = *u; *fw = *fu; *gw = *gu; ConvergenceCheck: twotol = *tol + *tol; xmidpt = 0.5 * (*a + *b); /* Check termination criteria */ convrg = (fabs(xmidpt) <= twotol - 0.5 * (*b - *a)) || (fabs(*gmin) <= *gtest2 && *fmin < *oldf && ((fabs(*xmin - xbnd) > *tol) || (! (*braktd)))); if (convrg) { if (*xmin != 0.0) return GETPTC_OK; /* * If the function has not been reduced, check to see that the relative * change in f(x) is consistent with the estimate of the delta- * unimodality constant, tol. If the change in f(x) is larger than * expected, reduce the value of tol. */ if (fabs(*oldf - *fw) <= fpresn) return GETPTC_FAIL; *tol = 0.1 * *tol; if (*tol < tnytol) return GETPTC_FAIL; *reltol = 0.1 * *reltol; *abstol = 0.1 * *abstol; twotol = 0.1 * twotol; } /* Continue with the computation of a trial step length */ r = 0.0; q = 0.0; s = 0.0; if (fabs(*e) > *tol) { /* Fit cubic through xmin and xw */ r = 3.0 * (*fmin - *fw) / *xw + *gmin + *gw; absr = fabs(r); q = absr; if (*gw != 0.0 && *gmin != 0.0) { /* Compute the square root of (r*r - gmin*gw) in a way which avoids underflow and overflow. */ abgw = fabs(*gw); abgmin = fabs(*gmin); s = sqrt(abgmin) * sqrt(abgw); if (*gw / abgw * *gmin > 0.0) { if (r >= s || r <= -s) { /* Compute the square root of r*r - s*s */ q = sqrt(fabs(r + s)) * sqrt(fabs(r - s)); } else { r = 0.0; q = 0.0; goto MinimumFound; } } else { /* Compute the square root of r*r + s*s. */ sumsq = 1.0; p = 0.0; if (absr >= s) { /* There is a possibility of underflow. */ if (absr > rtsmll) p = absr * rtsmll; if (s >= p) { double value = s / absr; sumsq = 1.0 + value * value; } scale = absr; } else { /* There is a possibility of overflow. */ if (s > rtsmll) p = s * rtsmll; if (absr >= p) { double value = absr / s; sumsq = 1.0 + value * value; } scale = s; } sumsq = sqrt(sumsq); q = big; if (scale < big / sumsq) q = scale * sumsq; } } /* Compute the minimum of fitted cubic */ if (*xw < 0.0) q = -q; s = *xw * (*gmin - r - q); q = *gw - *gmin + q + q; if (q > 0.0) s = -s; if (q <= 0.0) q = -q; r = *e; if (*b1 != *step || *braktd) *e = *step; } MinimumFound: /* Construct an artificial bound on the estimated steplength */ a1 = *a; *b1 = *b; *step = xmidpt; if ( (! *braktd) || ((*a == 0.0 && *xw < 0.0) || (*b == 0.0 && *xw > 0.0)) ) { if (*braktd) { /* If the minimum is not bracketed by 0 and xw the step must lie within (a1,b1). */ d1 = *xw; d2 = *a; if (*a == 0.0) d2 = *b; /* This line might be : */ /* if (*a == 0.0) d2 = *e */ *u = -d1 / d2; *step = 5.0 * d2 * (0.1 + 1.0 / *u) / 11.0; if (*u < 1.0) *step = 0.5 * d2 * sqrt(*u); } else { *step = -(*factor) * *xw; if (*step > *scxbnd) *step = *scxbnd; if (*step != *scxbnd) *factor = 5.0 * *factor; } /* If the minimum is bracketed by 0 and xw the step must lie within (a,b) */ if (*step <= 0.0) a1 = *step; if (*step > 0.0) *b1 = *step; } /* * Reject the step obtained by interpolation if it lies outside the * required interval or it is greater than half the step obtained * during the last-but-one iteration. */ if (fabs(s) <= fabs(0.5 * q * r) || s <= q * a1 || s >= q * *b1) *e = *b - *a; else { /* A cubic interpolation step */ *step = s / q; /* The function must not be evaluated too close to a or b. */ if (*step - *a < twotol || *b - *step < twotol) { if (xmidpt <= 0.0) *step = -(*tol); else *step = *tol; } } /* If the step is too large, replace by the scaled bound (so as to */ /* compute the new point on the boundary). */ if (*step >= *scxbnd) { *step = *scxbnd; /* Move sxbd to the left so that sbnd + tol(xbnd) = xbnd. */ *scxbnd -= (*reltol * fabs(xbnd) + *abstol) / (1.0 + *reltol); } *u = *step; if (fabs(*step) < *tol && *step < 0.0) *u = -(*tol); if (fabs(*step) < *tol && *step >= 0.0) *u = *tol; return GETPTC_EVAL; } /* * Return epsmch, where epsmch is the smallest possible * power of 2 such that 1.0 + epsmch > 1.0 */ static double mchpr1(void) { static double epsmch = 0.0; #ifdef WIN32 const double epsmch_linux = 2.220446e-16; #endif if (epsmch == 0.0) { double eps = 1.0; while((1.0 + (eps*0.5)) > 1.0) eps *= 0.5; epsmch = eps; } #ifdef WIN32 // On linux with SSE extension enabled kernel epsmch = 2.220446e-16 (double computed on 64 bit register), // on mingw32 by default epsmch = 1.084202e-19 (double computed on 80bit register) which results to strange TNC algorithm behavior. if(epsmch < epsmch_linux) epsmch = epsmch_linux; #endif return epsmch; } /* Blas like routines */ /* dy+=dx */ static void dxpy1(int n, double dx[], double dy[]) { int i; for (i = 0; i < n; i++) dy[i] += dx[i]; } /* dy+=da*dx */ static void daxpy1(int n, double da, double dx[], double dy[]) { int i; for (i = 0; i < n; i++) dy[i] += da*dx[i]; } /* Copy dx -> dy */ /* Could use memcpy */ static void dcopy1(int n, double dx[], double dy[]) { int i; for (i = 0; i < n; i++) dy[i] = dx[i]; } /* Negate */ static void dneg1(int n, double v[]) { int i; for (i = 0; i < n; i++) v[i] = -v[i]; } /* Dot product */ static double ddot1(int n, double dx[], double dy[]) { int i; double dtemp = 0.0; for (i = 0; i < n; i++) dtemp += dy[i]*dx[i]; return dtemp; } /* Euclidian norm */ static double dnrm21(int n, double dx[]) { int i; double dssq = 1.0, dscale = 0.0; for (i = 0; i < n; i++) { if (dx[i] != 0.0) { double dabsxi = fabs(dx[i]); if (dscale up bound) */ TNC_LOCALMINIMUM = 0, /* Local minima reach (|pg| ~= 0) */ TNC_FCONVERGED = 1, /* Converged (|f_n-f_(n-1)| ~= 0) */ TNC_XCONVERGED = 2, /* Converged (|x_n-x_(n-1)| ~= 0) */ TNC_MAXFUN = 3, /* Max. number of function evaluations reach */ TNC_LSFAIL = 4, /* Linear search failed */ TNC_CONSTANT = 5, /* All lower bounds are equal to the upper bounds */ TNC_NOPROGRESS = 6, /* Unable to progress */ TNC_USERABORT = 7 /* User requested end of minization */ } tnc_rc; /* * Return code strings * use tnc_rc_string[rc - TNC_MINRC] to get the message associated with * return code rc. */ extern char *tnc_rc_string[11]; /* * A function as required by tnc * state is a void pointer provided to the function at each call * * x : on input, then vector of variables (should not be modified) * f : on output, the value of the function * g : on output, the value of the gradient * state : on input, the value of the state variable as provided to tnc * * must returns 0 if no error occurs or 1 to immediately end the minimization. * */ typedef int tnc_function(double x[], double *f, double g[], void *state); /* * tnc : minimize a function with variables subject to bounds, using * gradient information. * * n : number of variables (must be >= 0) * x : on input, initial estimate ; on output, the solution * f : on output, the function value at the solution * g : on output, the gradient value at the solution * g should be an allocated vector of size n or NULL, * in which case the gradient value is not returned. * function : the function to minimize (see tnc_function) * state : used by function (see tnc_function) * low, up : the bounds * set low[i] to -HUGE_VAL to remove the lower bound * set up[i] to HUGE_VAL to remove the upper bound * if low == NULL, the lower bounds are removed. * if up == NULL, the upper bounds are removed. * scale : scaling factors to apply to each variable * if NULL, the factors are up-low for interval bounded variables * and 1+|x] for the others. * offset : constant to substract to each variable * if NULL, the constant are (up+low)/2 for interval bounded * variables and x for the others. * messages : see the tnc_message enum * maxCGit : max. number of hessian*vector evaluation per main iteration * if maxCGit == 0, the direction chosen is -gradient * if maxCGit < 0, maxCGit is set to max(1,min(50,n/2)) * maxnfeval : max. number of function evaluation * eta : severity of the line search. if < 0 or > 1, set to 0.25 * stepmx : maximum step for the line search. may be increased during call * if too small, will be set to 10.0 * accuracy : relative precision for finite difference calculations * if <= machine_precision, set to sqrt(machine_precision) * fmin : minimum function value estimate * ftol : precision goal for the value of f in the stoping criterion * if ftol < 0.0, ftol is set to accuracy * xtol : precision goal for the value of x in the stopping criterion * (after applying x scaling factors) * if xtol < 0.0, xtol is set to sqrt(machine_precision) * pgtol : precision goal for the value of the projected gradient in the * stopping criterion (after applying x scaling factors) * if pgtol < 0.0, pgtol is set to 1e-2 * sqrt(accuracy) * setting it to 0.0 is not recommended * rescale : f scaling factor (in log10) used to trigger f value rescaling * if 0, rescale at each iteration * if a big value, never rescale * if < 0, rescale is set to 1.3 * nfeval : on output, the number of function evaluations. * ignored if nfeval==NULL. * * The tnc function returns a code defined in the tnc_rc enum. * On output, x, f and g may be very slightly out of sync because of scaling. * */ extern int tnc(int n, double x[], double *f, double g[], tnc_function *function, void *state, double low[], double up[], double scale[], double offset[], int messages, int maxCGit, int maxnfeval, double eta, double stepmx, double accuracy, double fmin, double ftol, double xtol, double pgtol, double rescale, int *nfeval); END_C_DECLS #endif /* _TNC_ */ openturns-1.9/lib/src/Base/Optim/openturns/000077500000000000000000000000001307543307100207575ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Optim/openturns/AbdoRackwitz.hxx000066400000000000000000000067001307543307100240770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief AbdoRackwitz is an actual implementation for * OptimizationAlgorithm using the AbdoRackwitz algorithm. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ABDORACKWITZ_HXX #define OPENTURNS_ABDORACKWITZ_HXX #include "openturns/OTprivate.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/OptimizationProblem.hxx" #include "openturns/Point.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AbdoRackwitz * AbdoRackwitz is an actual implementation for * OptimizationAlgorithm */ class OT_API AbdoRackwitz : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ AbdoRackwitz(); /** Constructor with parameters */ explicit AbdoRackwitz(const OptimizationProblem & problem); /** Constructor with parameters */ AbdoRackwitz(const OptimizationProblem & problem, const Scalar tau, const Scalar omega, const Scalar smooth); /** Virtual constructor */ virtual AbdoRackwitz * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** Tau accessor */ Scalar getTau() const; void setTau(const Scalar tau); /** Omega accessor */ Scalar getOmega() const; void setOmega(const Scalar tau); /** Smooth accessor */ Scalar getSmooth() const; void setSmooth(const Scalar tau); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void checkProblem(const OptimizationProblem & problem) const; private: /** Perform a line search in the given direction */ Scalar computeLineSearch(); /** Initialize internal state */ void initialize(); /** Multiplicative decrease of linear step */ Scalar tau_; /** Armijo factor */ Scalar omega_; /** Growing factor in penalization term */ Scalar smooth_; /** Abdo Rackwitz current penalization factor */ Scalar currentSigma_; /** Abdo Rackwitz current point */ Point currentPoint_; /** Abdo Rackwitz current direction */ Point currentDirection_; /** Abdo Rackwitz current level value */ Scalar currentLevelValue_; /** Abdo Rackwitz current gradient as a column vector */ Point currentGradient_; /** Abdo Rackwitz current Lagrange multiplier */ Scalar currentLambda_; }; /* class AbdoRackwitz */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ABDORACKWITZ_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/Cobyla.hxx000066400000000000000000000052451307543307100227270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cobyla is an actual implementation for OptimizationAlgorithmImplementation using the cobyla library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COBYLA_HXX #define OPENTURNS_COBYLA_HXX #include "openturns/OTprivate.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class cobyla * cobyla is an actual implementation for OptimizationAlgorithmImplementation using the cobyla library */ class OT_API Cobyla : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ Cobyla(); /** Constructor with parameters */ explicit Cobyla(const OptimizationProblem & problem); /** Constructor with parameters */ Cobyla(const OptimizationProblem & problem, const Scalar rhoBeg); /** Virtual constructor */ virtual Cobyla * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** RhoBeg accessor */ Scalar getRhoBeg() const; void setRhoBeg(const Scalar rhoBeg); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void checkProblem(const OptimizationProblem & problem) const; private: /** * Evaluate general objective function and constraint values. */ static int ComputeObjectiveAndConstraint(int n, int m, double *x, double *f, double *con, void *state); Scalar rhoBeg_; /// temporary, used to track input/outputs Sample evaluationInputHistory_; Sample evaluationOutputHistory_; }; /* class Cobyla */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COBYLA_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/MultiStart.hxx000066400000000000000000000055071307543307100236270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MultiStart optimization algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MULTISTART_HXX #define OPENTURNS_MULTISTART_HXX #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Experiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MultiStart */ class OT_API MultiStart : public OptimizationAlgorithmImplementation { CLASSNAME; public: typedef OT::Collection OptimizationResultCollection; typedef OT::PersistentCollection OptimizationResultPersistentCollection; /** Constructor with parameters */ MultiStart(const OptimizationAlgorithm & solver, const Sample & startingPoints); /** Virtual constructor */ virtual MultiStart * clone() const; /** String converter */ String __repr__() const; /** Performs the actual computation. */ void run(); /** Problem accessor */ virtual void setProblem(const OptimizationProblem & problem); /** Solver accessor */ void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationAlgorithm() const; // @deprecated void setOptimizationSolver(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationSolver() const; void setStartingPoints(const Sample & sample); Sample getStartingPoints() const; OptimizationResultCollection getResultCollection() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Default constructor */ MultiStart(); friend class Factory; /** Check whether this problem can be solved by this solver. */ void checkProblem(const OptimizationProblem & problem) const; private: OptimizationAlgorithm solver_; Sample startingPoints_; OptimizationResultPersistentCollection resultCollection_; } ; /* class MultiStart */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MULTISTART_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/NLopt.hxx000066400000000000000000000074351307543307100225550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief NLopt solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NLOPT_HXX #define OPENTURNS_NLOPT_HXX #include #include "openturns/OTprivate.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NLopt * NLopt solver */ class OT_API NLopt : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ explicit NLopt(const String & algoName = "LD_SLSQP"); /** Constructor with parameters */ explicit NLopt(const OptimizationProblem & problem, const String & algoName = "LD_SLSQP"); /** Virtual constructor */ virtual NLopt * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** NLopt algorithm names accessor */ static Description GetAlgorithmNames(); void setAlgorithmName(const String algoName); String getAlgorithmName() const; /** Initial derivative-free local-optimization algorithms step accessor */ void setInitialStep(const Point & initialStep); Point getInitialStep() const; /** Local optimizer */ void setLocalSolver(const NLopt & localSolver); NLopt getLocalSolver() const; /** Initialize the random generator seed */ static void SetSeed(const UnsignedInteger seed); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ virtual void checkProblem(const OptimizationProblem & problem) const; String algoName_; /** Initial derivative-free local-optimization algorithms step */ Point initialStep_; /** Auxiliary solver */ Pointer p_localSolver_; /** Map of NLopt algorithms names */ static std::map AlgorithmNames_; /** Method to initialize alrogithm names map */ static void InitializeAlgorithmNames(); private: /** NLopt algorithm code */ static UnsignedInteger GetAlgorithmCode(const String & name); /** Compute the objective function of the optimization problem */ static double ComputeObjective(const std::vector & x, std::vector & grad, void * f_data); /** Compute the inequality constraint of the optimization problem */ static double ComputeInequalityConstraint(const std::vector & x, std::vector & grad, void * f_data); /** Compute the equality constraint of the optimization problem */ static double ComputeEqualityConstraint(const std::vector & x, std::vector & grad, void * f_data); /// temporary, used to track input/outputs Sample evaluationInputHistory_; Sample evaluationOutputHistory_; // internal solver void * p_opt_; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NLOPT_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/NearestPointChecker.hxx000066400000000000000000000056271307543307100254220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief NearestPointChecker checks wether the nearest point found is really the nearestpoint * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NEARESTPOINTCHECKER_HXX #define OPENTURNS_NEARESTPOINTCHECKER_HXX #include "openturns/OTprivate.hxx" #include "openturns/Pointer.hxx" #include "openturns/Function.hxx" #include "openturns/Sample.hxx" #include "openturns/ComparisonOperator.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/NearestPointCheckerResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NearestPointChecker * checks wether the nearest point found is really the nearestpoint * */ class OT_API NearestPointChecker : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ NearestPointChecker(const Function & levelFunction, const ComparisonOperator & comparisonOperator, const Scalar threshold, const Sample & sample); /** Virtual constructor */ virtual NearestPointChecker * clone() const; /** levelFunction accessor */ void setLevelFunction(const Function & levelFunction); /** levelFunction accessor */ Function getLevelFunction() const; /** Result accessor */ void setResult(const NearestPointCheckerResult & result ); /** Result accessor */ NearestPointCheckerResult getResult() const; /** Comparison operator accessor */ void setComparisonOperator(const ComparisonOperator & comparisonOperator ); /** Comparison operator accessor */ ComparisonOperator getComparisonOperator() const; /** threshold accessor */ void setThreshold(const Scalar threshold); /** threshold accessor */ Scalar getThreshold() const; /** sample accessor */ void setSample(const Sample & sample); /** sample accessor */ const Sample & getSample() const; /** Performs the actual test */ void run(); /** String converter */ String __repr__() const; private: Function levelFunction_; NearestPointCheckerResult result_; ComparisonOperator comparisonOperator_; Scalar threshold_; Sample sample_; } ; /* class NearestPointChecker */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NEARESTPOINTCHECKER_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/NearestPointCheckerResult.hxx000066400000000000000000000056121307543307100266130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief NearestPointCheckerResult stores the test result * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NEARESTPOINTCHECKERRESULT_HXX #define OPENTURNS_NEARESTPOINTCHECKERRESULT_HXX #include "openturns/OTprivate.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NearestPointCheckerResult * NearestPointCheckerResult stores the test result */ class OT_API NearestPointCheckerResult: public PersistentObject { CLASSNAME; public: /** Default constructor */ NearestPointCheckerResult(); /** Standard constructor */ NearestPointCheckerResult(const Sample & verifyingConstraintPoints, const Sample & verifyingConstraintValues, const Sample & violatingConstraintPoints, const Sample & violatingConstraintValues); /** Virtual constructor */ virtual NearestPointCheckerResult * clone() const; /** Assigment operator */ /** verifyingConstraintPoints accessor */ Sample getVerifyingConstraintPoints() const; /** verifyingConstraintValues accessor */ Sample getVerifyingConstraintValues() const; /** violatingConstraintPoints accessor */ Sample getViolatingConstraintPoints() const; /** violatingConstraintValues accessor */ Sample getViolatingConstraintValues() const; /** verifyingConstraintPoints accessor */ void setVerifyingConstraintPoints(const Sample & verifyingConstraintPoints); /** verifyingConstraintValues accessor */ void setVerifyingConstraintValues(const Sample & verifyingConstraintValues); /** violatingConstraintPoints accessor */ void setViolatingConstraintPoints(const Sample & violatingConstraintPoints); /** violatingConstraintValuess accessor */ void setViolatingConstraintValues(const Sample & violatingConstraintValues); /** String converter */ String __repr__() const; private: Sample verifyingConstraintPoints_; Sample verifyingConstraintValues_; Sample violatingConstraintPoints_; Sample violatingConstraintValues_; }; // class NearestPointCheckerResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NEARESTPOINTCHECKER_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OTOptim.hxx000066400000000000000000000027431307543307100230510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Optim * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTOPTIM_HXX #define OPENTURNS_OTOPTIM_HXX #include "openturns/AbdoRackwitz.hxx" #include "openturns/Cobyla.hxx" #include "openturns/MultiStart.hxx" #include "openturns/NearestPointCheckerResult.hxx" #include "openturns/NearestPointChecker.hxx" #include "openturns/NLopt.hxx" #include "openturns/OptimizationProblem.hxx" #include "openturns/OptimizationProblemImplementation.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/OptimizationResult.hxx" #include "openturns/SQP.hxx" #include "openturns/TNC.hxx" #endif /* OPENTURNS_OTOPTIM_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OptimizationAlgorithm.hxx000066400000000000000000000074051307543307100260530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationAlgorithm provides capabilities to solve optimization problems * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMIZATIONALGORITHM_HXX #define OPENTURNS_OPTIMIZATIONALGORITHM_HXX #include "openturns/OTprivate.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Function.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OptimizationAlgorithm * This class provides capabilities to solve optimization problems */ class OT_API OptimizationAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; typedef OptimizationResult Result; /** Default constructor */ OptimizationAlgorithm(); /** Constructor from an implementation */ OptimizationAlgorithm(const OptimizationAlgorithmImplementation & implementation); /** Constructor from a Pointer to an implementation */ OptimizationAlgorithm(const Implementation & p_implementation); /** Constructor with parameters */ explicit OptimizationAlgorithm(const OptimizationProblem & problem); /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** Starting point accessor */ Point getStartingPoint() const; void setStartingPoint(const Point & startingPoint); /** Problem accessor */ OptimizationProblem getProblem() const; void setProblem(const OptimizationProblem & problem); /** Result accessor */ Result getResult() const; void setResult(const Result & result); /** Maximum iterations number accessor */ UnsignedInteger getMaximumIterationNumber() const; void setMaximumIterationNumber(const UnsignedInteger maximumIterationNumber); /** Maximum absolute error accessor */ Scalar getMaximumAbsoluteError() const; void setMaximumAbsoluteError(const Scalar maximumAbsoluteError); /** Maximum relative error accessor */ Scalar getMaximumRelativeError() const; void setMaximumRelativeError(const Scalar maximumRelativeError); /** Maximum residual error accessor */ Scalar getMaximumResidualError() const; void setMaximumResidualError(const Scalar maximumResidualError); /** Maximum constraint error accessor */ Scalar getMaximumConstraintError() const; void setMaximumConstraintError(const Scalar maximumConstraintError); /* Verbose accessor */ Bool getVerbose() const; void setVerbose(const Bool verbose); /** Progress callback */ typedef void (*ProgressCallback)(Scalar, void * data); void setProgressCallback(ProgressCallback callBack, void * data = 0); /** Stop callback */ typedef Bool (*StopCallback)(void * data); void setStopCallback(StopCallback callBack, void * data = 0); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class OptimizationAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OPTIMIZATIONALGORITHM_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OptimizationAlgorithmImplementation.hxx000066400000000000000000000125751307543307100307650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationAlgorithmImplementation implements an algorithm for solving an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMIZATIONALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_OPTIMIZATIONALGORITHMIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/OptimizationProblem.hxx" #include "openturns/OptimizationResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OptimizationAlgorithmImplementation * OptimizationAlgorithmImplementation implements an algorithm for solving an optimization problem */ class OT_API OptimizationAlgorithmImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ OptimizationAlgorithmImplementation(); /** Constructor with parameters */ explicit OptimizationAlgorithmImplementation(const OptimizationProblem & problem); /** Virtual constructor */ virtual OptimizationAlgorithmImplementation * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ virtual void run(); /** Computes the Lagrange multipliers associated with the constraints as a post-processing of the result. Actual algorithms should overload this method. */ Point computeLagrangeMultipliers(const Point & x) const; /** Starting point accessor */ Point getStartingPoint() const; /** Starting point accessor */ void setStartingPoint(const Point & startingPoint); /** Problem accessor */ OptimizationProblem getProblem() const; virtual void setProblem(const OptimizationProblem & problem); /** Result accessor */ OptimizationResult getResult() const; /** Result accessor */ void setResult(const OptimizationResult & result); /** Maximum iterations number accessor */ void setMaximumIterationNumber(const UnsignedInteger maximumIterationNumber); UnsignedInteger getMaximumIterationNumber() const; /** Maximum evaluations number accessor */ void setMaximumEvaluationNumber(const UnsignedInteger maximumEvaluationNumber); UnsignedInteger getMaximumEvaluationNumber() const; /** Maximum absolute error accessor */ Scalar getMaximumAbsoluteError() const; /** Maximum absolute error accessor */ void setMaximumAbsoluteError(const Scalar maximumAbsoluteError); /** Maximum relative error accessor */ Scalar getMaximumRelativeError() const; /** Maximum relative error accessor */ void setMaximumRelativeError(const Scalar maximumRelativeError); /** Maximum residual error accessor */ Scalar getMaximumResidualError() const; /** Maximum residual error accessor */ void setMaximumResidualError(const Scalar maximumResidualError); /** Maximum constraint error accessor */ Scalar getMaximumConstraintError() const; /** Maximum constraint error accessor */ void setMaximumConstraintError(const Scalar maximumConstraintError); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Verbose accessor */ Bool getVerbose() const; void setVerbose(const Bool verbose); /** Progress callback */ typedef void (*ProgressCallback)(Scalar, void * data); virtual void setProgressCallback(ProgressCallback callBack, void * data = 0); /** Stop callback */ typedef Bool (*StopCallback)(void * data); virtual void setStopCallback(StopCallback callBack, void * data = 0); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ virtual void checkProblem(const OptimizationProblem & problem) const; /** The result of the algorithm */ OptimizationResult result_; // callbacks std::pair< ProgressCallback, void *> progressCallback_; std::pair< StopCallback, void *> stopCallback_; private: Point startingPoint_; OptimizationProblem problem_; /** Number of outermost iterations (in case of nested iterations) */ UnsignedInteger maximumIterationNumber_; /** Maximum function calls */ UnsignedInteger maximumEvaluationNumber_; Scalar maximumAbsoluteError_; /**< Value of ||x_n - x_{n-1}|| */ Scalar maximumRelativeError_; /**< Value of ||x_n - x_{n-1}|| / ||x_n|| */ Scalar maximumResidualError_; /**< Value of ||objectiveFunction(x_n) - objectiveFunction(x_{n-1})|| */ Scalar maximumConstraintError_; /**< Value of ||constraints(x_n)|| for the active constraints */ Bool verbose_; } ; /* class OptimizationAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OPTIMIZATIONALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OptimizationProblem.hxx000066400000000000000000000073111307543307100255210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationProblem allows to describe an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMIZATIONPROBLEM_HXX #define OPENTURNS_OPTIMIZATIONPROBLEM_HXX #include "openturns/OTprivate.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Function.hxx" #include "openturns/OptimizationProblemImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OptimizationProblem * OptimizationProblem allows to define an optimization problem, including: * + multiple objective functions * + multiple equality, inequality and bounds constraints * + continuous or discrete (lattice) search spaces */ class OT_API OptimizationProblem : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ OptimizationProblem(); /** Constructor from an implementation */ OptimizationProblem(const OptimizationProblemImplementation & implementation); /** Constructor from a Pointer to an implementation */ OptimizationProblem(const Implementation & p_implementation); /** Constructor with parameters */ explicit OptimizationProblem(const Function & objective); /** Constructor with parameters */ OptimizationProblem(const Function & objective, const Function & equalityConstraint, const Function & inequalityConstraint, const Interval & bounds); /** Constructor with parameters */ OptimizationProblem(const Function & levelFunction, Scalar levelValue); /** Objective functions accessor */ Function getObjective() const; void setObjective(const Function & objective); Bool hasMultipleObjective() const; /** Equality constraint function accessor */ Function getEqualityConstraint() const; void setEqualityConstraint(const Function & equalityConstraint); Bool hasEqualityConstraint() const; /** Inequality constraint function accessor */ Function getInequalityConstraint() const; void setInequalityConstraint(const Function & inequalityConstraint); Bool hasInequalityConstraint() const; /** Bounds accessor */ Interval getBounds() const; void setBounds(const Interval & bounds); Bool hasBounds() const; /** Level function accessor */ Function getLevelFunction() const; void setLevelFunction(const Function & levelFunction); Bool hasLevelFunction() const; /** Level value accessor */ Scalar getLevelValue() const; void setLevelValue(Scalar levelValue); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Minimization accessor */ void setMinimization(Bool minimization); Bool isMinimization() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class OptimizationProblem */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OPTIMIZATIONPROBLEM_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OptimizationProblemImplementation.hxx000066400000000000000000000102361307543307100304270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationProblemImplementation allows to describe an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMIZATIONPROBLEMIMPLEMENTATION_HXX #define OPENTURNS_OPTIMIZATIONPROBLEMIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Function.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OptimizationProblemImplementation * OptimizationProblemImplementation allows to describe an optimization problem */ class OT_API OptimizationProblemImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ OptimizationProblemImplementation(); /** Constructor with parameters */ explicit OptimizationProblemImplementation(const Function & objective); /** Constructor with parameters */ OptimizationProblemImplementation(const Function & objective, const Function & equalityConstraint, const Function & inequalityConstraint, const Interval & bounds); /** Constructor with parameters */ OptimizationProblemImplementation(const Function & levelFunction, Scalar levelValue); /** Virtual constructor */ virtual OptimizationProblemImplementation * clone() const; /** Objective functions accessor */ Function getObjective() const; void setObjective(const Function & objective); Bool hasMultipleObjective() const; /** Equality constraint function accessor */ Function getEqualityConstraint() const; void setEqualityConstraint(const Function & equalityConstraint); Bool hasEqualityConstraint() const; /** Inequality constraint function accessor */ Function getInequalityConstraint() const; void setInequalityConstraint(const Function & inequalityConstraint); Bool hasInequalityConstraint() const; /** Bounds accessor */ Interval getBounds() const; void setBounds(const Interval & bounds); Bool hasBounds() const; /** Level function accessor */ Function getLevelFunction() const; void setLevelFunction(const Function & levelFunction); Bool hasLevelFunction() const; /** Level value accessor */ Scalar getLevelValue() const; void setLevelValue(Scalar levelValue); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Minimization accessor */ void setMinimization(Bool minimization); Bool isMinimization() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: void clearLevelFunction(); void setNearestPointConstraints(); // The objective function Function objective_; // The equality constraint function Function equalityConstraint_; // The inequality constraint function Function inequalityConstraint_; // The bounds Interval bounds_; // The level function, for nearest point problems Function levelFunction_; // The level value, for nearest point problems Scalar levelValue_; // Minimization problem Bool minimization_; // The dimension of the search space UnsignedInteger dimension_; } ; /* class OptimizationProblemImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OPTIMIZATIONPROBLEMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/OptimizationResult.hxx000066400000000000000000000125451307543307100254040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OptimizationResult implements the result of an algorithm for solving an optimization problem * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMIZATIONRESULT_HXX #define OPENTURNS_OPTIMIZATIONRESULT_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Function.hxx" #include "openturns/Compact.hxx" #include "openturns/OptimizationProblem.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OptimizationResult * OptimizationResult stores the optimization result */ class OT_API OptimizationResult : public PersistentObject { CLASSNAME; // Make the OptimizationAlgorithmImplementation class friend in order to allow them to use protected methods friend class OptimizationAlgorithmImplementation; public: /** Default constructor */ OptimizationResult(); /** Standard constructor */ OptimizationResult(const Point & optimalPoint, const Point & optimalValue, const UnsignedInteger iterationNumber, const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const Scalar constraintError, const OptimizationProblem & problem); /** Virtual constructor */ virtual OptimizationResult * clone() const; /** OptimalPoint accessors */ void setOptimalPoint(const Point & optimalPoint); Point getOptimalPoint() const; /** Optimal value accessor */ void setOptimalValue(const Point & optimalValue); Point getOptimalValue() const; /** Iteration number accessor */ void setIterationNumber(const UnsignedInteger iterationNumber); UnsignedInteger getIterationNumber() const; /** Absolute error accessor */ Scalar getAbsoluteError() const; Sample getAbsoluteErrorHistory() const; /** Relative error accessor */ Scalar getRelativeError() const; Sample getRelativeErrorHistory() const; /** Residual error accessor */ Scalar getResidualError() const; Sample getResidualErrorHistory() const; /** Constraint error accessor */ Scalar getConstraintError() const; Sample getConstraintErrorHistory() const; /** Input / output sample accessor */ Sample getInputSample() const; Sample getOutputSample() const; /** Problem accessor */ void setProblem(const OptimizationProblem & problem); OptimizationProblem getProblem() const; /** Lagrange multipliers accessor */ void setLagrangeMultipliers(const Point & lagrangeMultipliers); Point getLagrangeMultipliers() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Incremental history storage */ void store(const Point & inP, const Point & outP, const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const Scalar constraintError); /** Draw error history graph */ Graph drawErrorHistory() const; /** Draw optimal value graph */ Graph drawOptimalValueHistory() const; protected: /** Absolute error accessor */ void setAbsoluteError(const Scalar absoluteError); void setAbsoluteErrorHistory(const Sample & absoluteError); /** Relative error accessor */ void setRelativeError(const Scalar relativeError); void setRelativeErrorHistory(const Sample & relativeError); /** Residual error accessor */ void setResidualError(const Scalar residualError); void setResidualErrorHistory(const Sample & residualError); /** Constraint error accessor */ void setConstraintError(const Scalar constraintError); void setConstraintErrorHistory(const Sample & constraintError); private: Point optimalPoint_; Point optimalValue_; UnsignedInteger iterationNumber_; /**< Number of outermost iterations (in case of nested iterations) */ Scalar absoluteError_; /**< Value of ||x_n - x_{n-1}|| */ Scalar relativeError_; /**< Value of ||x_n - x_{n-1}|| / ||x_n|| */ Scalar residualError_; /**< Value of ||objectiveFunction(x_n) - objectiveFunction(x_{n-1})|| */ Scalar constraintError_; /**< Value of ||constraints(x_n)|| for the active constraints */ Point lagrangeMultipliers_; Compact absoluteErrorHistory_; Compact relativeErrorHistory_; Compact residualErrorHistory_; Compact constraintErrorHistory_; Compact inputHistory_; Compact outputHistory_; OptimizationProblem problem_; }; // class OptimizationResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_OPTIMIZATIONRESULT_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/SQP.hxx000066400000000000000000000066761307543307100221720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SQP is an actual implementation for * OptimizationAlgorithm using the SQP algorithm. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SQP_HXX #define OPENTURNS_SQP_HXX #include "openturns/OTprivate.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SQP * SQP is an actual implementation for * OptimizationAlgorithm */ class OT_API SQP : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ SQP(); /** Constructor with parameters */ explicit SQP(const OptimizationProblem & problem); /** Constructor with parameters */ SQP(const OptimizationProblem & problem, const Scalar tau, const Scalar omega, const Scalar smooth); /** Virtual constructor */ virtual SQP * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** Tau accessor */ Scalar getTau() const; void setTau(const Scalar tau); /** Omega accessor */ Scalar getOmega() const; void setOmega(const Scalar tau); /** Smooth accessor */ Scalar getSmooth() const; void setSmooth(const Scalar tau); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void checkProblem(const OptimizationProblem & problem) const; private: /** Perform a line search in the given direction */ Scalar computeLineSearch(); /** Initialize internal state */ void initialize(); /** Multiplicative decrease of linear step */ Scalar tau_; /** Armijo factor */ Scalar omega_; /** Growing factor in penalization term */ Scalar smooth_; /** SQP current penalization factor */ Scalar currentSigma_; /** SQP current point */ Point currentPoint_; /** SQP current direction */ Point currentDirection_; /** SQP current level value */ Scalar currentLevelValue_; /** SQP current gradient as a column vector */ Point currentGradient_; /** SQP current hessian as a symmetric tensor */ SymmetricMatrix currentHessian_; /** SQP current system matrix as a symmetric matrix */ SymmetricMatrix currentSystemMatrix_; /** SQP current system second member as a column vector */ Point currentSecondMember_; /** SQP current Lagrange multiplier */ Scalar currentLambda_; }; /* class SQP */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SQP_HXX */ openturns-1.9/lib/src/Base/Optim/openturns/TNC.hxx000066400000000000000000000071301307543307100221350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TNC is an actual implementation for OptimizationAlgorithmImplementation using the TNC library * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TNC_HXX #define OPENTURNS_TNC_HXX #include "openturns/OTprivate.hxx" #include "openturns/OptimizationAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TNC * TNC is an actual implementation for * OptimizationAlgorithmImplementation using the TNC library */ class OT_API TNC : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ TNC(); /** Constructor with parameters */ explicit TNC(const OptimizationProblem & problem); /** Constructor with parameters */ TNC(const OptimizationProblem & problem, const Point & scale, const Point & offset, const UnsignedInteger maxCGit, const Scalar eta, const Scalar stepmx, const Scalar accuracy, const Scalar fmin, const Scalar rescale); /** Virtual constructor */ virtual TNC * clone() const; /** Performs the actual computation. Must be overloaded by the actual optimisation algorithm */ void run(); /** Scale accessor */ Point getScale() const; void setScale(const Point & scale); /** Offset accessor */ Point getOffset() const; void setOffset(const Point & offset); /** MaxCGit accessor */ UnsignedInteger getMaxCGit() const; void setMaxCGit(const UnsignedInteger maxCGit); /** Eta accessor */ Scalar getEta() const; void setEta(const Scalar eta); /** Stepmx accessor */ Scalar getStepmx() const; void setStepmx(const Scalar stepmx); /** Accuracy accessor */ Scalar getAccuracy() const; void setAccuracy(const Scalar accuracy); /** Fmin accessor */ Scalar getFmin() const; void setFmin(const Scalar fmin); /** Rescale accessor */ Scalar getRescale() const; void setRescale(const Scalar rescale); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void checkProblem(const OptimizationProblem & problem) const; private: /** Function that computes the objective function and its gradient */ static int ComputeObjectiveAndGradient(double *x, double *f, double *g, void *state); /** Specific parameters */ Point scale_; Point offset_; UnsignedInteger maxCGit_; Scalar eta_; Scalar stepmx_; Scalar accuracy_; Scalar fmin_; Scalar rescale_; /// temporary, used to track input/outputs Sample evaluationInputHistory_; Sample evaluationOutputHistory_; void * p_nfeval_; }; /* class TNC */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TNC_HXX */ openturns-1.9/lib/src/Base/Solver/000077500000000000000000000000001307543307100171045ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Solver/Bisection.cxx000066400000000000000000000105231307543307100215500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Bisection.hxx" #include #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Bisection * * This class is an interface for the 1D nonlinear Bisections */ CLASSNAMEINIT(Bisection); static const Factory Factory_Bisection; /* Parameter constructor */ Bisection::Bisection(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation) : SolverImplementation(absoluteError, relativeError, residualError, maximumFunctionEvaluation) { // Nothing to do } /* Virtual constructor */ Bisection * Bisection::clone() const { return new Bisection(*this); } /* String converter */ String Bisection::__repr__() const { OSS oss; oss << "class=" << Bisection::GetClassName() << " derived from " << SolverImplementation::__repr__(); return oss; } /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with the bisection method */ Scalar Bisection::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const { if ((function.getInputDimension() != 1) || (function.getOutputDimension() != 1)) throw InvalidDimensionException(HERE) << "Error: the bisection method requires a scalar function, here input dimension=" << function.getInputDimension() << " and output dimension=" << function.getOutputDimension(); /* We transform the equation function(x) = value into function(x) - value = 0 */ UnsignedInteger usedFunctionEvaluation = 0; const UnsignedInteger maximumFunctionEvaluation = getMaximumFunctionEvaluation(); /* We transform function(x) = value into function(x) - value = 0 */ Scalar a = infPoint; Scalar fA = infValue - value; if (std::abs(fA) <= getResidualError()) return a; Scalar b = supPoint; Scalar fB = supValue - value; if (std::abs(fB) <= getResidualError()) return b; if (!(fA * fB <= 0.0)) throw InternalException(HERE) << "Error: bisection method requires that the function takes different signs at the endpoints of the given starting interval, here infPoint=" << infPoint << ", supPoint=" << supPoint << ", value=" << value << ", f(infPoint) - value=" << fA << " and f(supPoint) - value=" << fB; Scalar c = a; Scalar fC = fA; // Main loop for (;;) { // Current error on the root const Scalar error = 2.0 * getRelativeError() * std::abs(c) + 0.5 * getAbsoluteError(); // Mid-point step const Scalar delta = 0.5 * (b - a); // If the current approximation of the root is good enough, return it if ((std::abs(delta) <= error) || (std::abs(fC) <= getResidualError())) break; // c is now the mid-point c = a + delta; // If all the evaluation budget has been spent, return the approximation if (usedFunctionEvaluation == maximumFunctionEvaluation) break; // New evaluation fC = function(Point(1, c))[0] - value; ++usedFunctionEvaluation; // If the function takes a value at middle on the same side of value that at left if (fC * fA > 0.0) { a = c; fA = fC; } else { b = c; fB = fC; } } // end Bisection loop usedFunctionEvaluation_ = usedFunctionEvaluation; return c; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/Brent.cxx000066400000000000000000000133641307543307100207110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * the Brent mixed bisection/linear/inverse quadratic interpolation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Brent.hxx" #include #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Brent * * This class is an interface for the 1D nonlinear Brents */ CLASSNAMEINIT(Brent); static const Factory Factory_Brent; /* Parameter constructor */ Brent::Brent(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation) : SolverImplementation(absoluteError, relativeError, residualError, maximumFunctionEvaluation) { // Nothing to do } /* Virtual constructor */ Brent * Brent::clone() const { return new Brent(*this); } /* String converter */ String Brent::__repr__() const { OSS oss; oss << "class=" << Brent::GetClassName() << " derived from " << SolverImplementation::__repr__(); return oss; } /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with the Brent method */ Scalar Brent::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const { if ((function.getInputDimension() != 1) || (function.getOutputDimension() != 1)) throw InvalidDimensionException(HERE) << "Error: Brent's method requires a scalar function, here input dimension=" << function.getInputDimension() << " and output dimension=" << function.getOutputDimension(); /* We transform the equation function(x) = value into function(x) - value = 0 */ UnsignedInteger usedFunctionEvaluation = 0; const UnsignedInteger maximumFunctionEvaluation = getMaximumFunctionEvaluation(); volatile Scalar a = infPoint; Scalar fA = infValue - value; if (std::abs(fA) <= getResidualError()) return a; volatile Scalar b = supPoint; Scalar fB = supValue - value; if (std::abs(fB) <= getResidualError()) return b; if (!(fA * fB <= 0.0)) throw InternalException(HERE) << "Error: Brent method requires that the function takes different signs at the endpoints of the given starting interval, here infPoint=" << infPoint << ", supPoint=" << supPoint << ", value=" << value << ", f(infPoint) - value=" << fA << " and f(supPoint) - value=" << fB; volatile Scalar c = a; Scalar fC = fA; // Main loop for (;;) { // Interval length const Scalar oldDelta = b - a; // B will be the best approximation if (std::abs(fC) < std::abs(fB)) { a = b; b = c; c = a; fA = fB; fB = fC; fC = fA; } // Current error on the root const Scalar error = 2.0 * getRelativeError() * std::abs(b) + 0.5 * getAbsoluteError(); // Bisection step Scalar newDelta = 0.5 * (c - b); // If the current approximation of the root is good enough, return it if ((std::abs(newDelta) <= error) || (std::abs(fB) <= getResidualError())) break; // Try an interpolation if the last improvement was large enough if ((std::abs(oldDelta) >= error) && (std::abs(fA) > std::abs(fB))) { // The new increment for the root will be p / q with p > 0 Scalar p = -1.0; Scalar q = -1.0; const Scalar cb = c - b; // We can just perform a linear inverse interpolation here if (a == c) { const Scalar slopeBA = fB / fA; p = cb * slopeBA; q = 1.0 - slopeBA; } // Here we can perform an inverse quadratic interpolation else { const Scalar slopeAC = fA / fC; const Scalar slopeBC = fB / fC; const Scalar slopeBA = fB / fA; p = slopeBA * (cb * slopeAC * (slopeAC - slopeBC) - (b - a) * (slopeBC - 1.0)); q = (slopeAC - 1.0) * (slopeBC - 1.0) * (slopeBA - 1.0); } // Ensure p > 0 if (p > 0) q = -q; else p = -p; // Check that the increment obtained from the interpolation is not too large and will lead to an approximation well within [b, c] if ((p < (0.75 * cb * q - 0.5 * std::abs(error * q))) && (p < 0.5 * std::abs(oldDelta * q))) newDelta = p / q; } // end interpolation // The increment must be at least with a magnitude equals to error if (std::abs(newDelta) < error) { if (newDelta > 0) newDelta = error; else newDelta = -error; } a = b; fA = fB; b += newDelta; // If all the evaluation budget has been spent, return the approximation if (usedFunctionEvaluation == maximumFunctionEvaluation) break; // New evaluation fB = function(Point(1, b))[0] - value; ++usedFunctionEvaluation; // Enforce that the root is within [b, c] if (fB * fC > 0.0) { c = a; fC = fA; } } // end Brent loop usedFunctionEvaluation_ = usedFunctionEvaluation; return b; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/CMakeLists.txt000066400000000000000000000014401307543307100216430ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Solver.cxx) ot_add_source_file (SolverImplementation.cxx) ot_add_source_file (Bisection.cxx) ot_add_source_file (Secant.cxx) ot_add_source_file (Brent.cxx) ot_add_source_file (ODESolver.cxx) ot_add_source_file (ODESolverImplementation.cxx) ot_add_source_file (RungeKutta.cxx) ot_install_header_file (Brent.hxx) ot_install_header_file (Bisection.hxx) ot_install_header_file (Secant.hxx) ot_install_header_file (SolverImplementation.hxx) ot_install_header_file (Solver.hxx) ot_install_header_file (ODESolver.hxx) ot_install_header_file (ODESolverImplementation.hxx) ot_install_header_file (RungeKutta.hxx) ot_install_header_file (OTSolver.hxx) openturns-1.9/lib/src/Base/Solver/ODESolver.cxx000066400000000000000000000046741307543307100214450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ODE solver interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ODESolver.hxx" #include "openturns/ODESolverImplementation.hxx" #include "openturns/RungeKutta.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ODESolver); /* Default constructor */ ODESolver::ODESolver() : TypedInterfaceObject() { // Nothing to do } /* Default constructor */ ODESolver::ODESolver(const FieldFunction & transitionFunction) : TypedInterfaceObject(RungeKutta(transitionFunction).clone()) { // Nothing to do } /* Constructor from implementation */ ODESolver::ODESolver(const Implementation & p_implementation) : TypedInterfaceObject( p_implementation ) { // Nothing to do } /* Constructor from implementation */ ODESolver::ODESolver(const ODESolverImplementation & implementation) : TypedInterfaceObject( implementation.clone() ) { // Nothing to do } /* String converter */ String ODESolver::__repr__() const { return getImplementation()->__repr__(); } String ODESolver::__str__(const String & offset) const { return getImplementation()->__str__( offset ); } /* Perform cross-validation */ Sample ODESolver::solve(const Point & initialState, const Point & timeGrid) const { return getImplementation()->solve(initialState, timeGrid); } /* Transition function accessor */ void ODESolver::setTransitionFunction(const FieldFunction & transitionFunction) { copyOnWrite(); getImplementation()->setTransitionFunction(transitionFunction); } FieldFunction ODESolver::getTransitionFunction() const { return getImplementation()->getTransitionFunction(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/ODESolverImplementation.cxx000066400000000000000000000054041307543307100243430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ODE solver base class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ODESolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ODESolverImplementation); static const Factory Factory_ODESolverImplementation; /* Default constructor */ ODESolverImplementation::ODESolverImplementation() : PersistentObject() , transitionFunction_() { // Nothing to do } /* Parameter constructor */ ODESolverImplementation::ODESolverImplementation(const FieldFunction & transitionFunction) : PersistentObject() , transitionFunction_(transitionFunction) { // Nothing to do } /* Virtual constructor */ ODESolverImplementation * ODESolverImplementation::clone() const { return new ODESolverImplementation(*this); } /* Solve the ODE */ Sample ODESolverImplementation::solve(const Point & initialState, const Point & timeGrid) const { throw NotYetImplementedException(HERE) << "In ODESolverImplementation::solve(const Point & initialState, const Point & timeGrid) const"; } /* String converter */ String ODESolverImplementation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << ", transition function=" << transitionFunction_; return oss; } /* Transition function accessor */ void ODESolverImplementation::setTransitionFunction(const FieldFunction & transitionFunction) { transitionFunction_ = transitionFunction; } FieldFunction ODESolverImplementation::getTransitionFunction() const { return transitionFunction_; } /* Method save() stores the object through the StorageManager */ void ODESolverImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "transitionFunction_", transitionFunction_ ); } /* Method load() reloads the object from the StorageManager */ void ODESolverImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "transitionFunction_", transitionFunction_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/RungeKutta.cxx000066400000000000000000000064241307543307100217270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the fourth order fixed-step Runge-Kutta ODE integrator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/RungeKutta.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RungeKutta); static const Factory Factory_RungeKutta; /* Default constructor */ RungeKutta::RungeKutta() : ODESolverImplementation() { // Nothing to do } /* Default constructor */ RungeKutta::RungeKutta(const FieldFunction & transitionFunction) : ODESolverImplementation(transitionFunction) { // Nothing to do } /* Virtual constructor */ RungeKutta * RungeKutta::clone() const { return new RungeKutta( *this ); } /* String converter */ String RungeKutta::__repr__() const { return OSS() << "class=" << GetClassName(); } /* Perform cross-validation */ Sample RungeKutta::solve(const Point & initialState, const Point & timeGrid) const { if (initialState.getDimension() != transitionFunction_.getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the initial state has a dimension=" << initialState.getDimension() << ", expected dimension=" << transitionFunction_.getInputDimension(); // Quick return if the time grid is empty const UnsignedInteger steps = timeGrid.getSize(); Sample result(steps, transitionFunction_.getOutputDimension()); if (steps == 0) return result; Scalar t = timeGrid[0]; Point state(initialState); result[0] = state; for (UnsignedInteger i = 1; i < steps; ++i) { const Scalar newT = timeGrid[i]; const Scalar timeStep = newT - t; const Point phi(computeStep(t, state, timeStep)); state += timeStep * phi; result[i] = state; t = newT; } return result; } /* Perform one step of the RungeKutta method */ Point RungeKutta::computeStep(const Scalar t, const Point & state, const Scalar h) const { const Point k1(transitionFunction_(t, state)); const Point k2(transitionFunction_(t + 0.5 * h, state + k1 * (0.5 * h))); const Point k3(transitionFunction_(t + 0.5 * h, state + k2 * (0.5 * h))); const Point k4(transitionFunction_(t + h, state + k3 * h)); return (k1 + k2 * 2.0 + k3 * 2.0 + k4) * (1.0 / 6.0); } /* Method save() stores the object through the StorageManager */ void RungeKutta::save(Advocate & adv) const { ODESolverImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void RungeKutta::load(Advocate & adv) { ODESolverImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/Secant.cxx000066400000000000000000000124301307543307100210450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * a mixed bisection/secant scheme * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Secant.hxx" #include "openturns/Log.hxx" #include #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Secant * * This class is an interface for the 1D nonlinear Secants */ CLASSNAMEINIT(Secant); static const Factory Factory_Secant; /* Parameter constructor */ Secant::Secant(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation) : SolverImplementation(absoluteError, relativeError, residualError, maximumFunctionEvaluation) { // Nothing to do } /* Virtual constructor */ Secant * Secant::clone() const { return new Secant(*this); } /* String converter */ String Secant::__repr__() const { OSS oss; oss << "class=" << Secant::GetClassName() << " derived from " << SolverImplementation::__repr__(); return oss; } /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with a mixed secant/bisection method. The code is translated from the function FUNCTION TRICPZ (TA,TB,F1,F2,ER) as found in: C ALGORITHM 626 COLLECTED ALGORITHMS FROM ACM. C ALGORITHM APPEARED IN ACM-TRANS. MATH. SOFTWARE, VOL.10, NO. 4, DEC., 1984, C DEC., 1984, P. 473. see http://www.netlib.org/toms/626 */ Scalar Secant::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const { if ((function.getInputDimension() != 1) || (function.getOutputDimension() != 1)) throw InvalidDimensionException(HERE) << "Error: the secant method requires a scalar function, here input dimension=" << function.getInputDimension() << " and output dimension=" << function.getOutputDimension(); /* We transform the equation function(x) = value into function(x) - value = 0 */ UnsignedInteger usedFunctionEvaluation = 0; const UnsignedInteger maximumFunctionEvaluation = getMaximumFunctionEvaluation(); Scalar a = infPoint; Scalar fA = infValue - value; if (std::abs(fA) <= getResidualError()) return a; Scalar b = supPoint; Scalar fB = supValue - value; if (std::abs(fB) <= getResidualError()) return b; if (!(fA * fB <= 0.0)) throw InternalException(HERE) << "Error: Secant method requires that the function takes different signs at the endpoints of the given starting interval, here infPoint=" << infPoint << ", supPoint=" << supPoint << ", value=" << value << ", f(infPoint) - value=" << fA << " and f(supPoint) - value=" << fB; // p will store the previous approximation Scalar c = a; Scalar fC = fA; // c will store the current approximation Scalar s = b; Scalar fS = fB; // Main loop for (;;) { const Scalar h = 0.5 * (b + c); const Scalar error = 0.5 * getRelativeError() * std::abs(c) + 0.5 * getAbsoluteError(); const Scalar delta = std::abs(h - b); if (delta < error) { b = h; break; } // Swap b and c such that fB <= fC Scalar y = -1.0; Scalar fY = -1.0; Scalar g = -1.0; Scalar fG = -1.0; if (std::abs(fB) < std::abs(fC)) { y = s; fY = fS; g = c; fG = fC; s = b; fS = fB; } else { y = b; fY = fB; g = b; fG = fB; s = c; fS = fC; } // If we can do a linear interpolation (secant step) if (std::abs(fY - fS) > getResidualError()) { Scalar e = (s * fY - y * fS) / (fY - fS); // Step adjustment to avoid spurious fixed point if (std::abs(e - s) < error) e = s + ((g - s) > 0.0 ? (error) : (-error)); // If the secant step is not within the current bracketing interval if ((e - h) * (s - e) < 0.0) b = h; else b = e; } // Else we do a bisection else { b = h; } // If all the evaluation budget has been spent, return the approximation if (usedFunctionEvaluation == maximumFunctionEvaluation) break; // New evaluation fB = function(Point(1, b))[0] - value; ++usedFunctionEvaluation; if (fG * fB < 0.0) { c = g; fC = fG; } else { c = s; fC = fS; } } // end Secant loop usedFunctionEvaluation_ = usedFunctionEvaluation; return b; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/Solver.cxx000066400000000000000000000103541307543307100211050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface class for a nonlinear scalar solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Solver.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Solver); /* Parameter constructor */ Solver::Solver(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Parameter constructor */ Solver::Solver(const SolverImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Default constructor */ Solver::Solver(): TypedInterfaceObject(new SolverImplementation()) { // Nothing to do } /* Second parameter constructor */ Solver::Solver(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation): TypedInterfaceObject(new SolverImplementation(absoluteError, relativeError, residualError, maximumFunctionEvaluation)) { // Nothing to do } /* Comparison operator */ Bool Solver::operator ==(const Solver & other) const { return (*getImplementation()) == (*other.getImplementation()); } /* String converter */ String Solver::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] */ Scalar Solver::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint) const { return getImplementation()->solve(function, value, infPoint, supPoint); } /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) */ Scalar Solver::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const { return getImplementation()->solve(function, value, infPoint, supPoint, infValue, supValue); } /* Absolute error accessor */ void Solver::setAbsoluteError(const Scalar absoluteError) { copyOnWrite(); getImplementation()->setAbsoluteError(absoluteError); } Scalar Solver::getAbsoluteError() const { return getImplementation()->getAbsoluteError(); } /* Relative error accessor */ void Solver::setRelativeError(const Scalar relativeError) { copyOnWrite(); getImplementation()->setRelativeError(relativeError); } Scalar Solver::getRelativeError() const { return getImplementation()->getRelativeError(); } /* Residual error accessor */ void Solver::setResidualError(const Scalar residualError) { copyOnWrite(); getImplementation()->setResidualError(residualError); } Scalar Solver::getResidualError() const { return getImplementation()->getResidualError(); } /* Maximum function evaluation accessor */ void Solver::setMaximumFunctionEvaluation(const UnsignedInteger maximumFunctionEvaluation) { copyOnWrite(); getImplementation()->setMaximumFunctionEvaluation(maximumFunctionEvaluation); } UnsignedInteger Solver::getMaximumFunctionEvaluation() const { return getImplementation()->getMaximumFunctionEvaluation(); } UnsignedInteger Solver::getUsedFunctionEvaluation() const { return getImplementation()->getUsedFunctionEvaluation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/SolverImplementation.cxx000066400000000000000000000145261307543307100240200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SolverImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/Point.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SolverImplementation); static const Factory Factory_SolverImplementation; /** Second parameter constructor */ SolverImplementation::SolverImplementation(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation) : PersistentObject() , maximumFunctionEvaluation_(maximumFunctionEvaluation) , usedFunctionEvaluation_(0) , absoluteError_(absoluteError) , relativeError_(relativeError) , residualError_(residualError) { // Nothing to do } /** Virtual constructor */ SolverImplementation * SolverImplementation::clone() const { return new SolverImplementation(*this); } /** Comparison operator */ Bool SolverImplementation::operator ==(const SolverImplementation & other) const { if (this == &other) return true; return (absoluteError_ == other.absoluteError_) && (relativeError_ == other.relativeError_) && (residualError_ == other.residualError_) && (maximumFunctionEvaluation_ == other.maximumFunctionEvaluation_) && (usedFunctionEvaluation_ == other.usedFunctionEvaluation_); } /** String converter */ String SolverImplementation::__repr__() const { OSS oss; oss << "class=" << SolverImplementation::GetClassName() << " absoluteError=" << absoluteError_ << " relativeError=" << relativeError_ << " residualError=" << residualError_ << " maximumFunctionEvaluation=" << maximumFunctionEvaluation_ << " usedFunctionEvaluation=" << usedFunctionEvaluation_; return oss; } /* Method save() stores the object through the StorageManager */ void SolverImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("absoluteError_", absoluteError_); adv.saveAttribute("relativeError_", relativeError_); adv.saveAttribute("residualError_", residualError_); adv.saveAttribute("maximumFunctionEvaluation_", maximumFunctionEvaluation_); } /* Method load() reloads the object from the StorageManager */ void SolverImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("absoluteError_", absoluteError_); adv.loadAttribute("relativeError_", relativeError_); adv.loadAttribute("residualError_", residualError_); adv.loadAttribute("maximumFunctionEvaluation_", maximumFunctionEvaluation_); } /** Absolute error accessor */ void SolverImplementation::setAbsoluteError(const Scalar absoluteError) { absoluteError_ = absoluteError; } Scalar SolverImplementation::getAbsoluteError() const { return absoluteError_; } /** Relative error accessor */ void SolverImplementation::setRelativeError(const Scalar relativeError) { relativeError_ = relativeError; } Scalar SolverImplementation::getRelativeError() const { return relativeError_; } /** Residual error accessor */ void SolverImplementation::setResidualError(const Scalar residualError) { residualError_ = residualError; } Scalar SolverImplementation::getResidualError() const { return residualError_; } /** Maximum function evaluation accessor */ void SolverImplementation::setMaximumFunctionEvaluation(const UnsignedInteger maximumFunctionEvaluation) { maximumFunctionEvaluation_ = maximumFunctionEvaluation; } UnsignedInteger SolverImplementation::getMaximumFunctionEvaluation() const { return maximumFunctionEvaluation_; } UnsignedInteger SolverImplementation::getUsedFunctionEvaluation() const { return usedFunctionEvaluation_; } /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] */ Scalar SolverImplementation::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint) const { if ((function.getInputDimension() != 1) || (function.getOutputDimension() != 1)) throw InvalidDimensionException(HERE) << "Error: solver implementation requires a scalar function, here input dimension=" << function.getInputDimension() << " and output dimension=" << function.getOutputDimension(); if (maximumFunctionEvaluation_ < 2) throw InternalException(HERE) << "Error: solver needs to evaluate the function at least two times, here maximumFunctionEvaluation=" << maximumFunctionEvaluation_; /* We take into account the fact that we use 2 function calls when using the other solve method */ maximumFunctionEvaluation_ -= 2; Scalar root = solve(function, value, infPoint, supPoint, function(Point(1, infPoint))[0], function(Point(1, supPoint))[0]); maximumFunctionEvaluation_ += 2; usedFunctionEvaluation_ += 2; return root; } /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) */ Scalar SolverImplementation::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const { throw NotYetImplementedException(HERE) << "In SolverImplementation::solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const"; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Solver/openturns/000077500000000000000000000000001307543307100211415ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Solver/openturns/Bisection.hxx000066400000000000000000000045341307543307100236170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BISECTION_HXX #define OPENTURNS_BISECTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/SolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Bisection * * This class is an interface for the 1D nonlinear solverImplementations */ class OT_API Bisection : public SolverImplementation { CLASSNAME; public: /** Parameter constructor */ explicit Bisection(const Scalar absoluteError = ResourceMap::GetAsScalar("Solver-DefaultAbsoluteError"), const Scalar relativeError = ResourceMap::GetAsScalar("Solver-DefaultRelativeError"), const Scalar residualError = ResourceMap::GetAsScalar("Solver-DefaultResidualError"), const UnsignedInteger maximumFunctionEvaluation = ResourceMap::GetAsUnsignedInteger("Solver-DefaultMaximumFunctionEvaluation")); /** Virtual constructor */ virtual Bisection * clone() const; /** String converter */ String __repr__() const; /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with the bisection method */ using SolverImplementation::solve; Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const; private: }; /* Class Bisection */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BISECTION_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/Brent.hxx000066400000000000000000000044771307543307100227600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BRENT_HXX #define OPENTURNS_BRENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/SolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Brent * * This class is an interface for the 1D nonlinear solverImplementations */ class OT_API Brent : public SolverImplementation { CLASSNAME; public: /* Parameter constructor */ explicit Brent(const Scalar absoluteError = ResourceMap::GetAsScalar("Solver-DefaultAbsoluteError"), const Scalar relativeError = ResourceMap::GetAsScalar("Solver-DefaultRelativeError"), const Scalar residualError = ResourceMap::GetAsScalar("Solver-DefaultResidualError"), const UnsignedInteger maximumFunctionEvaluation = ResourceMap::GetAsUnsignedInteger("Solver-DefaultMaximumFunctionEvaluation")); /* Copy constructor */ /* Virtual constructor */ virtual Brent * clone() const; /* String converter */ String __repr__() const; /* Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with the Brent method */ using SolverImplementation::solve; Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const; private: }; /* Class Brent */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BRENT_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/ODESolver.hxx000066400000000000000000000041031307543307100234720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ODE solver interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ODESOLVER_HXX #define OPENTURNS_ODESOLVER_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/ODESolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class ODESolverImplementation; /** * @class ODESolver * * ODE solver interface */ class OT_API ODESolver : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; /** Default constructor */ ODESolver(); /** Parameter constructor */ explicit ODESolver(const FieldFunction & transitionFunction); /** Constructor from implementation */ ODESolver(const Implementation & p_implementation); /** Constructor from implementation */ ODESolver(const ODESolverImplementation & implementation); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Perform cross-validation */ Sample solve(const Point & initialState, const Point & timeGrid) const; /** Transition function accessor */ void setTransitionFunction(const FieldFunction & transitionFunction); FieldFunction getTransitionFunction() const; }; /* class ODESolver */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ODESOLVER_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/ODESolverImplementation.hxx000066400000000000000000000042321307543307100264030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ODE solver base class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ODESOLVERIMPLEMENTATION_HXX #define OPENTURNS_ODESOLVERIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FieldFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ODESolverImplementation * * ODE solver base class */ class OT_API ODESolverImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ ODESolverImplementation(); /** Parameter constructor */ explicit ODESolverImplementation(const FieldFunction & transitionFunction); /** Virtual constructor */ virtual ODESolverImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** Solve the ODE */ virtual Sample solve(const Point & initialState, const Point & timeGrid) const; /** Transition function accessor */ void setTransitionFunction(const FieldFunction & transitionFunction); FieldFunction getTransitionFunction() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Transition function */ FieldFunction transitionFunction_; }; /* class ODESolverImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ODESOLVERIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/OTSolver.hxx000066400000000000000000000023541307543307100234130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSOLVER_HXX #define OPENTURNS_OTSOLVER_HXX #include "openturns/Bisection.hxx" #include "openturns/Brent.hxx" #include "openturns/Secant.hxx" #include "openturns/Solver.hxx" #include "openturns/SolverImplementation.hxx" #include "openturns/ODESolver.hxx" #include "openturns/ODESolverImplementation.hxx" #include "openturns/RungeKutta.hxx" #endif /* OPENTURNS_OTSOLVER_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/RungeKutta.hxx000066400000000000000000000040221307543307100237610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the fourth order fixed-step Runge-Kutta ODE integrator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RUNGEKUTTA_HXX #define OPENTURNS_RUNGEKUTTA_HXX #include "openturns/ODESolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RungeKutta * * Fourth order fixed-step Runge-Kutta ODE integrator */ class OT_API RungeKutta : public ODESolverImplementation { CLASSNAME; public: /** Default constructor */ RungeKutta(); /** Parameter constructor */ explicit RungeKutta(const FieldFunction & transitionFunction); /** Virtual constructor */ virtual RungeKutta * clone() const; /** String converter */ virtual String __repr__() const; /** Perform cross-validation */ Sample solve(const Point & initialState, const Point & timeGrid) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Perform one step of the RungeKutta method */ Point computeStep(const Scalar t, const Point & state, const Scalar h) const; }; /* class RungeKutta */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RUNGEKUTTA_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/Secant.hxx000066400000000000000000000044701307543307100231140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class of the scalar nonlinear solver based on * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SECANT_HXX #define OPENTURNS_SECANT_HXX #include "openturns/OTprivate.hxx" #include "openturns/SolverImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Secant * * This class is an interface for the 1D nonlinear solverImplementations */ class OT_API Secant : public SolverImplementation { CLASSNAME; public: /** Parameter constructor */ explicit Secant(const Scalar absoluteError = ResourceMap::GetAsScalar("Solver-DefaultAbsoluteError"), const Scalar relativeError = ResourceMap::GetAsScalar("Solver-DefaultRelativeError"), const Scalar residualError = ResourceMap::GetAsScalar("Solver-DefaultResidualError"), const UnsignedInteger maximumFunctionEvaluation = ResourceMap::GetAsUnsignedInteger("Solver-DefaultMaximumFunctionEvaluation")); /** Virtual constructor */ virtual Secant * clone() const; /** String converter */ String __repr__() const; /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) with the Secant method */ using SolverImplementation::solve; Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const; private: }; /* Class Secant */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SECANT_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/Solver.hxx000066400000000000000000000064601307543307100231520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface class for a nonlinear scalar solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOLVER_HXX #define OPENTURNS_SOLVER_HXX #include "openturns/OTprivate.hxx" #include "openturns/SolverImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Solver * * This class is an interface for the 1D nonlinear solvers */ class OT_API Solver : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Solver(); /** Parameter constructor */ Solver(const Implementation & p_implementation); /** Parameter from an implementation */ Solver(const SolverImplementation & implementation); /** Second parameter constructor */ Solver(const Scalar absoluteError, const Scalar relativeError, const Scalar residualError, const UnsignedInteger maximumFunctionEvaluation); /** Comparison operator */ Bool operator ==(const Solver & other) const; /** String converter */ virtual String __repr__() const; /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] */ virtual Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint) const; /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) */ virtual Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const; /** Absolute error accessor */ void setAbsoluteError(const Scalar absoluteError); Scalar getAbsoluteError() const; /** Relative error accessor */ void setRelativeError(const Scalar relativeError); Scalar getRelativeError() const; /** Residual error accessor */ void setResidualError(const Scalar residualError); Scalar getResidualError() const; /** Maximum function evaluation accessor */ void setMaximumFunctionEvaluation(const UnsignedInteger maximumFunctionEvaluation); UnsignedInteger getMaximumFunctionEvaluation() const; /** Used function evaluation */ UnsignedInteger getUsedFunctionEvaluation() const; }; /* Class Solver */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOLVER_HXX */ openturns-1.9/lib/src/Base/Solver/openturns/SolverImplementation.hxx000066400000000000000000000076311307543307100260610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation class for a nonlinear scalar solver * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOLVERIMPLEMENTATION_HXX #define OPENTURNS_SOLVERIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/Function.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SolverImplementation * * This class is an interface for the 1D nonlinear solverImplementations */ class OT_API SolverImplementation : public PersistentObject { CLASSNAME; public: /** Parameter constructor */ explicit SolverImplementation(const Scalar absoluteError = ResourceMap::GetAsScalar("Solver-DefaultAbsoluteError"), const Scalar relativeError = ResourceMap::GetAsScalar("Solver-DefaultRelativeError"), const Scalar residualError = ResourceMap::GetAsScalar("Solver-DefaultResidualError"), const UnsignedInteger maximumFunctionEvaluation = ResourceMap::GetAsUnsignedInteger("Solver-DefaultMaximumFunctionEvaluation")); /** Virtual constructor */ virtual SolverImplementation * clone() const; /** Comparison operator */ Bool operator ==(const SolverImplementation & other) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] */ virtual Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint) const; /** Solve attempt to find one root to the equation function(x) = value in [infPoint, supPoint] given function(infPoint) and function(supPoint) */ virtual Scalar solve(const Function & function, const Scalar value, const Scalar infPoint, const Scalar supPoint, const Scalar infValue, const Scalar supValue) const; /** Absolute error accessor */ void setAbsoluteError(const Scalar absoluteError); Scalar getAbsoluteError() const; /** Relative error accessor */ void setRelativeError(const Scalar relativeError); Scalar getRelativeError() const; /** Residual error accessor */ void setResidualError(const Scalar residualError); Scalar getResidualError() const; /** Maximum function evaluation accessor */ void setMaximumFunctionEvaluation(const UnsignedInteger maximumFunctionEvaluation); UnsignedInteger getMaximumFunctionEvaluation() const; /** Used function evaluation */ UnsignedInteger getUsedFunctionEvaluation() const; protected: /** Used function evaluation statistics */ mutable UnsignedInteger maximumFunctionEvaluation_; mutable UnsignedInteger usedFunctionEvaluation_; private: Scalar absoluteError_; Scalar relativeError_; Scalar residualError_; }; /* Class SolverImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOLVERIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/000077500000000000000000000000001307543307100165455ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Stat/AbsoluteExponential.cxx000066400000000000000000000115071307543307100232620ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AbsoluteExponential.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AbsoluteExponential); static const Factory Factory_AbsoluteExponential; /* Constructor based on spatial dimension */ AbsoluteExponential::AbsoluteExponential(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(Point(spatialDimension, ResourceMap::GetAsScalar("AbsoluteExponential-DefaultTheta")), Point(1, 1.0)) { // Nothing to do } /** Parameters constructor */ AbsoluteExponential::AbsoluteExponential(const Point & scale) : StationaryCovarianceModel(scale, Point(1, 1.0)) { // Nothing to do } /** Parameters constructor */ AbsoluteExponential::AbsoluteExponential(const Point & scale, const Point & amplitude) : StationaryCovarianceModel(scale, amplitude) { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "In AbsoluteExponential::AbsoluteExponential, only unidimensional models should be defined." << " Here, (got dimension=" << getDimension() << ")"; } /* Virtual constructor */ AbsoluteExponential * AbsoluteExponential::clone() const { return new AbsoluteExponential(*this); } /* Computation of the covariance function */ Scalar AbsoluteExponential::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar tauOverThetaNorm = tauOverTheta.norm1(); return tauOverThetaNorm <= SpecFunc::ScalarEpsilon ? 1.0 + nuggetFactor_ : exp(-tauOverThetaNorm); } /* Gradient */ Matrix AbsoluteExponential::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const Point tau(s - t); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar norm1 = tauOverTheta.norm1(); // For zero norm // Norm1 is null if all elements are zero // In that case gradient is not defined if (norm1 == 0.0) { Matrix gradient(spatialDimension_, 1); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) gradient(i, 0) = -amplitude_[0] * amplitude_[0] / scale_[i]; return gradient; } // General case const Scalar value = std::exp(-norm1); // Gradient take as factor sign(tau_i) /theta_i Point factor(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) { factor[i] = amplitude_[0] * amplitude_[0] / scale_[i]; if (tau[i] > 0) factor[i] *= -1.0; } return Matrix(spatialDimension_, 1, factor * value) ; } /* String converter */ String AbsoluteExponential::__repr__() const { OSS oss; oss << "class=" << AbsoluteExponential::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_; return oss; } /* String converter */ String AbsoluteExponential::__str__(const String & offset) const { OSS oss; oss << AbsoluteExponential::GetClassName() << "(scale=" << scale_.__str__() << ", amplitude=" << amplitude_.__str__() << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void AbsoluteExponential::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); } /* Method load() reloads the object from the StorageManager */ void AbsoluteExponential::load(Advocate & adv) { StationaryCovarianceModel::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CMakeLists.txt000066400000000000000000000171501307543307100213110ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Compact.cxx) ot_add_source_file (CorrelationAnalysis.cxx) ot_add_source_file (CorrelationMatrix.cxx) ot_add_source_file (CovarianceMatrix.cxx) ot_add_source_file (FaureSequence.cxx) ot_add_source_file (Full.cxx) ot_add_source_file (HaltonSequence.cxx) ot_add_source_file (HaselgroveSequence.cxx) ot_add_source_file (HistoryStrategy.cxx) ot_add_source_file (HistoryStrategyImplementation.cxx) ot_add_source_file (HMatrixFactory.cxx) ot_add_source_file (HMatrix.cxx) ot_add_source_file (HMatrixImplementation.cxx) ot_add_source_file (Last.cxx) ot_add_source_file (LinearModel.cxx) ot_add_source_file (LinearModelFactory.cxx) ot_add_source_file (LowDiscrepancySequence.cxx) ot_add_source_file (LowDiscrepancySequenceImplementation.cxx) ot_add_source_file (Null.cxx) ot_add_source_file (Sample.cxx) ot_add_source_file (SampleImplementation.cxx) ot_add_source_file (ProcessSample.cxx) ot_add_source_file (RandomGenerator.cxx) ot_add_source_file (RandomGeneratorState.cxx) ot_add_source_file (ReverseHaltonSequence.cxx) ot_add_source_file (SecondOrderModel.cxx) ot_add_source_file (SecondOrderModelImplementation.cxx) ot_add_source_file (SobolSequence.cxx) ot_add_source_file (TestResult.cxx) ot_add_source_file (Field.cxx) ot_add_source_file (FieldImplementation.cxx) ot_add_source_file (TimeSeries.cxx) ot_add_source_file (dsfmt.cxx) ot_add_source_file (ExponentialCauchy.cxx) ot_add_source_file (FilteringWindowsImplementation.cxx) ot_add_source_file (FilteringWindows.cxx) ot_add_source_file (Hamming.cxx) ot_add_source_file (Hanning.cxx) ot_add_source_file (CovarianceModelImplementation.cxx) ot_add_source_file (SpectralModelImplementation.cxx) ot_add_source_file (SpectralModel.cxx) ot_add_source_file (CovarianceModel.cxx) ot_add_source_file (StationaryCovarianceModel.cxx) ot_add_source_file (SpectralModelFactoryImplementation.cxx) ot_add_source_file (SpectralModelFactory.cxx) ot_add_source_file (UserDefinedSpectralModel.cxx) ot_add_source_file (WelchFactory.cxx) ot_add_source_file (ExponentialModel.cxx) ot_add_source_file (ExponentiallyDampedCosineModel.cxx) ot_add_source_file (SphericalModel.cxx) ot_add_source_file (CauchyModel.cxx) ot_add_source_file (SquaredExponential.cxx) ot_add_source_file (GeneralizedExponential.cxx) ot_add_source_file (AbsoluteExponential.cxx) ot_add_source_file (MaternModel.cxx) ot_add_source_file (DiracCovarianceModel.cxx) ot_add_source_file (HMatrixParameters.cxx) ot_add_source_file (ProductCovarianceModel.cxx) ot_add_source_file (RankMCovarianceModel.cxx) ot_add_source_file (TensorizedCovarianceModel.cxx) ot_add_source_file (CovarianceModelFactoryImplementation.cxx) ot_add_source_file (CovarianceModelFactory.cxx) ot_add_source_file (UserDefinedCovarianceModel.cxx) ot_add_source_file (NonStationaryCovarianceModelFactory.cxx) ot_add_source_file (UserDefinedStationaryCovarianceModel.cxx) ot_add_source_file (StationaryCovarianceModelFactory.cxx) ot_add_source_file (kendall.c) ot_install_header_file (HistoryStrategyImplementation.hxx) ot_install_header_file (SobolSequence.hxx) ot_install_header_file (CovarianceMatrix.hxx) ot_install_header_file (LinearModelFactory.hxx) ot_install_header_file (TestResult.hxx) ot_install_header_file (FaureSequence.hxx) ot_install_header_file (HaltonSequence.hxx) ot_install_header_file (HaselgroveSequence.hxx) ot_install_header_file (ReverseHaltonSequence.hxx) ot_install_header_file (CorrelationMatrix.hxx) ot_install_header_file (HMatrixFactory.hxx) ot_install_header_file (HMatrix.hxx) ot_install_header_file (HMatrixImplementation.hxx) ot_install_header_file (Last.hxx) ot_install_header_file (RandomGenerator.hxx) ot_install_header_file (RandomGeneratorState.hxx) ot_install_header_file (csv_parser_state.hxx) ot_install_header_file (LinearModel.hxx) ot_install_header_file (HistoryStrategy.hxx) ot_install_header_file (CorrelationAnalysis.hxx) ot_install_header_file (LowDiscrepancySequence.hxx) ot_install_header_file (Full.hxx) ot_install_header_file (SampleImplementation.hxx) ot_install_header_file (Sample.hxx) ot_install_header_file (ProcessSample.hxx) ot_install_header_file (OTStat.hxx) ot_install_header_file (Compact.hxx) ot_install_header_file (LowDiscrepancySequenceImplementation.hxx) ot_install_header_file (Null.hxx) ot_install_header_file (Field.hxx) ot_install_header_file (FieldImplementation.hxx) ot_install_header_file (TimeSeries.hxx) ot_install_header_file (SecondOrderModelImplementation.hxx) ot_install_header_file (SecondOrderModel.hxx) ot_install_header_file (ExponentialCauchy.hxx) ot_install_header_file (FilteringWindowsImplementation.hxx) ot_install_header_file (FilteringWindows.hxx) ot_install_header_file (Hamming.hxx) ot_install_header_file (Hanning.hxx) ot_install_header_file (CovarianceModelImplementation.hxx) ot_install_header_file (SpectralModelImplementation.hxx) ot_install_header_file (SpectralModel.hxx) ot_install_header_file (CovarianceModel.hxx) ot_install_header_file (StationaryCovarianceModel.hxx) ot_install_header_file (SpectralModelFactoryImplementation.hxx) ot_install_header_file (SpectralModelFactory.hxx) ot_install_header_file (UserDefinedSpectralModel.hxx) ot_install_header_file (WelchFactory.hxx) ot_install_header_file (ExponentialModel.hxx) ot_install_header_file (ExponentiallyDampedCosineModel.hxx) ot_install_header_file (SphericalModel.hxx) ot_install_header_file (CauchyModel.hxx) ot_install_header_file (CovarianceModelFactoryImplementation.hxx) ot_install_header_file (CovarianceModelFactory.hxx) ot_install_header_file (UserDefinedCovarianceModel.hxx) ot_install_header_file (NonStationaryCovarianceModelFactory.hxx) ot_install_header_file (UserDefinedStationaryCovarianceModel.hxx) ot_install_header_file (StationaryCovarianceModelFactory.hxx) ot_install_header_file (SquaredExponential.hxx) ot_install_header_file (GeneralizedExponential.hxx) ot_install_header_file (AbsoluteExponential.hxx) ot_install_header_file (MaternModel.hxx) ot_install_header_file (DiracCovarianceModel.hxx) ot_install_header_file (HMatrixParameters.hxx) ot_install_header_file (ProductCovarianceModel.hxx) ot_install_header_file (RankMCovarianceModel.hxx) ot_install_header_file (TensorizedCovarianceModel.hxx) # Build on the fly source files if (BISON_FOUND AND FLEX_FOUND) ot_add_build_dir_to_include_dirs (${CMAKE_CURRENT_BINARY_DIR}) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/csv_parser.cc ${CMAKE_CURRENT_BINARY_DIR}/csv_parser.hh MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/csv_parser.yy COMMAND ${BISON_EXECUTABLE} ARGS -o ${CMAKE_CURRENT_BINARY_DIR}/csv_parser.cc ${CMAKE_CURRENT_SOURCE_DIR}/csv_parser.yy COMMENT "CSV parser generation" ) ot_add_built_source_file (${CMAKE_CURRENT_BINARY_DIR}/csv_parser.cc) add_custom_target (generate_csv_parser DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/csv_parser.cc) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.cc ${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.h MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/csv_lexer.ll COMMAND ${FLEX_EXECUTABLE} ARGS -o ${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.cc --header-file=${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.h ${CMAKE_CURRENT_SOURCE_DIR}/csv_lexer.ll COMMENT "CSV lexer generation" ) ot_add_built_source_file (${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.cc) add_custom_target (generate_csv_lexer DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/csv_lexer.cc) endif () openturns-1.9/lib/src/Base/Stat/CauchyModel.cxx000066400000000000000000000065751307543307100215030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CauchyModel.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CauchyModel */ CLASSNAMEINIT(CauchyModel); static const Factory Factory_CauchyModel; /* Constructor with parameters */ CauchyModel::CauchyModel() : SpectralModelImplementation() { // Nothing to do } CauchyModel::CauchyModel(const Point & scale, const Point & amplitude) : SpectralModelImplementation(scale, amplitude) { // Nothing to do } CauchyModel::CauchyModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation) : SpectralModelImplementation(scale, amplitude, spatialCorrelation) { // Nothing to do } CauchyModel::CauchyModel(const Point & scale, const CovarianceMatrix & spatialCovariance) : SpectralModelImplementation(scale, spatialCovariance) { // Nothing to do } /* Virtual constructor */ CauchyModel * CauchyModel::clone() const { return new CauchyModel(*this); } /* Computation of the spectral density function */ Complex CauchyModel::computeStandardRepresentative(const Scalar frequency) const { Complex value = 1.0; for (UnsignedInteger k = 0; k < spatialDimension_; ++k) { const Scalar scaledFrequency = 2.0 * M_PI * scale_[k] * std::abs(frequency); const Scalar scaledFrequencySquared = scaledFrequency * scaledFrequency; value *= (2.0 * scale_[k]) / (1.0 + scaledFrequencySquared); } return value; } /* String converter */ String CauchyModel::__repr__() const { OSS oss(true); oss << "class=" << CauchyModel::GetClassName(); oss << " amplitude=" << amplitude_ << " scale=" << scale_ << " spatial correlation=" << spatialCorrelation_ << " isDiagonal=" << isDiagonal_; return oss; } /* String converter */ String CauchyModel::__str__(const String & offset) const { OSS oss(false); oss << "class=" << CauchyModel::GetClassName(); oss << " amplitude=" << amplitude_ << " scale=" << scale_; if (!isDiagonal_) oss << " spatial correlation=\n" << spatialCorrelation_.__str__(offset); else oss << " no spatial correlation"; return oss; } /* Method save() stores the object through the StorageManager */ void CauchyModel::save(Advocate & adv) const { SpectralModelImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void CauchyModel::load(Advocate & adv) { SpectralModelImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Compact.cxx000066400000000000000000000075321307543307100206660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Compact history storage * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Compact.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Compact */ CLASSNAMEINIT(Compact); static const Factory Factory_Compact; /* Constructor with parameters */ Compact::Compact() : HistoryStrategyImplementation() , halfMaximumSize_(ResourceMap::GetAsUnsignedInteger( "Compact-DefaultHalfMaximumSize" )) , index_(0) , step_(1) , throwingCounter_(0) { // Nothing to do } /* Constructor with parameters */ Compact::Compact(const UnsignedInteger halfMaximumSize) : HistoryStrategyImplementation() , halfMaximumSize_(halfMaximumSize) , index_(0) , step_(1) , throwingCounter_(0) { // Nothing to do } /* Virtual constructor */ Compact * Compact::clone() const { return new Compact(*this); } /* Store the point according to the strategy */ void Compact::store(const Point & point) { if (!isInitialized_) { sample_ = Sample(2 * halfMaximumSize_, point.getDimension()); index_ = 0; step_ = 1; throwingCounter_ = 0; isInitialized_ = true; } // If we don't throw this point if (throwingCounter_ == 0) { sample_[index_] = point; ++index_; // Reinitialize the counter throwingCounter_ = step_; } // Check if one needs compression if (index_ == 2 * halfMaximumSize_) { for (UnsignedInteger i = 0; i < halfMaximumSize_; ++i) sample_[i] = sample_[2 * i + 1]; step_ *= 2; throwingCounter_ = step_; index_ = halfMaximumSize_; } --throwingCounter_; } /* Sample accessor */ Sample Compact::getSample() const { // If nothing has been stored if (!isInitialized_) return sample_; Sample outSample(index_, sample_.getDimension()); for (UnsignedInteger i = 0; i < index_; ++i) outSample[i] = sample_[i]; return outSample; } /* HalfMaximumSize accessor */ UnsignedInteger Compact::getHalfMaximumSize() const { return halfMaximumSize_; } /* Index accessor */ UnsignedInteger Compact::getIndex() const { return index_; } /* String converter */ String Compact::__repr__() const { OSS oss; oss << "class=" << Compact::GetClassName(); oss << " sample_=" << sample_; oss << " halfMaximumSize_=" << halfMaximumSize_; oss << " index_=" << index_; oss << " step_=" << step_; oss << " throwingCounter_=" << throwingCounter_; return oss; } /* Method save() stores the object through the StorageManager */ void Compact::save(Advocate & adv) const { HistoryStrategyImplementation::save(adv); adv.saveAttribute("halfMaximumSize_", halfMaximumSize_); adv.saveAttribute("index_", index_); adv.saveAttribute("step_", step_); adv.saveAttribute("throwingCounter_", throwingCounter_); } /* Method load() reloads the object from the StorageManager */ void Compact::load(Advocate & adv) { HistoryStrategyImplementation::load(adv); adv.loadAttribute("halfMaximumSize_", halfMaximumSize_); adv.loadAttribute("index_", index_); adv.loadAttribute("step_", step_); adv.loadAttribute("throwingCounter_", throwingCounter_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CorrelationAnalysis.cxx000066400000000000000000000163721307543307100232670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief CorrelationAnalysis implements the sensitivity analysis methods based on correlation coefficients * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CorrelationAnalysis.hxx" #include "openturns/Exception.hxx" #include "openturns/LinearModelFactory.hxx" #include "openturns/LinearModel.hxx" #include "openturns/LinearLeastSquares.hxx" BEGIN_NAMESPACE_OPENTURNS /* Default constructor */ CorrelationAnalysis::CorrelationAnalysis() {} /* Compute the Pearson correlation coefficient between the component number index of the input sample and the 1D outputSample */ Scalar CorrelationAnalysis::PearsonCorrelation(const Sample & inputSample, const Sample & outputSample, const UnsignedInteger index) { if (index >= inputSample.getDimension()) throw InvalidArgumentException(HERE) << "Error: given index out of bound"; if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; const UnsignedInteger size = inputSample.getSize(); Sample pairedSample(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { pairedSample[i][0] = inputSample[i][index]; pairedSample[i][1] = outputSample[i][0]; } return pairedSample.computePearsonCorrelation()(0, 1); } /* Compute the Spearman correlation coefficient between the component number index of the input sample and the 1D outputSample */ Scalar CorrelationAnalysis::SpearmanCorrelation(const Sample & inputSample, const Sample & outputSample, const UnsignedInteger index) { if (index >= inputSample.getDimension()) throw InvalidArgumentException(HERE) << "Error: given index out of bound"; if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; return PearsonCorrelation(inputSample.getMarginal(index).rank(), outputSample.rank()); } /* Compute the Standard Regression Coefficients (SRC) between the input sample and the output sample */ Point CorrelationAnalysis::SRC(const Sample & inputSample, const Sample & outputSample) { if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; const UnsignedInteger dimension = inputSample.getDimension(); // Var(X+a) = Var(X); However for numerical stability, data are centered LinearLeastSquares regressionAlgorithm(inputSample - inputSample.computeMean(), outputSample); regressionAlgorithm.run(); // Linear coefficients const Point linear(regressionAlgorithm.getLinear() * Point(1, 1.0)); // Compute the output variance from the regression coefficients Scalar varOutput = 0.0; Point src(inputSample.computeVariance()); for (UnsignedInteger i = 0; i < dimension; ++i) { src[i] *= linear[i] * linear[i]; varOutput += src[i]; } src /= varOutput; return src; } /* Compute the Partial Correlation Coefficients (PCC) between the input sample and the output sample */ Point CorrelationAnalysis::PCC(const Sample & inputSample, const Sample & outputSample) { if (inputSample.getDimension() < 2) throw InvalidDimensionException(HERE) << "Error: input sample must have dimension > 1"; if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; const UnsignedInteger dimension = inputSample.getDimension(); const UnsignedInteger size = inputSample.getSize(); Point pcc(dimension); // For each component i, perform an analysis on the truncated input sample where Xi has been removed Sample truncatedInput(size, dimension - 1); Sample remainingInput(size, 1); for (UnsignedInteger index = 0; index < dimension; ++index) { // Build the truncated sample for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < index; ++j) truncatedInput[i][j] = inputSample[i][j]; for (UnsignedInteger j = index + 1; j < dimension; ++j) truncatedInput[i][j - 1] = inputSample[i][j]; remainingInput[i][0] = inputSample[i][index]; } // Build the linear models const LinearModel outputVersusTruncatedInput(LinearModelFactory().build(truncatedInput, outputSample)); const LinearModel remainingVersusTruncatedInput(LinearModelFactory().build(truncatedInput, remainingInput)); // Compute the correlation between the residuals const Sample residualOutput(outputVersusTruncatedInput.getResidual(truncatedInput, outputSample)); const Sample residualRemaining(remainingVersusTruncatedInput.getResidual(truncatedInput, remainingInput)); pcc[index] = PearsonCorrelation(residualOutput, residualRemaining); } return pcc; } /* Compute the Standard Rank Regression Coefficients (SRRC) between the input sample and the output sample */ Point CorrelationAnalysis::SRRC(const Sample & inputSample, const Sample & outputSample) { if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; return SRC(inputSample.rank(), outputSample.rank()); } /* Compute the Partial Rank Correlation Coefficients (PRCC) between the input sample and the output sample */ Point CorrelationAnalysis::PRCC(const Sample & inputSample, const Sample & outputSample) { // Perform the basic checks of the inputs, to avoid costly ranking if finally PCC will fail if (inputSample.getDimension() < 2) throw InvalidDimensionException(HERE) << "Error: input sample must have dimension > 1"; if (outputSample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: output sample must be 1D"; if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output samples must have the same size"; return PCC(inputSample.rank(), outputSample.rank()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CorrelationMatrix.cxx000066400000000000000000000050071307543307100227410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class CorrelationMatrix implements correlation matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CorrelationMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CorrelationMatrix); /* Default constructor */ CorrelationMatrix::CorrelationMatrix() : CovarianceMatrix(0) { // Nothing to do } /* Constructor with implementation */ CorrelationMatrix::CorrelationMatrix(const Implementation & i) : CovarianceMatrix(i) { // Nothing to do } /* Constructor with implementation */ CorrelationMatrix::CorrelationMatrix(const MatrixImplementation & i) : CovarianceMatrix(i) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ CorrelationMatrix::CorrelationMatrix(const UnsignedInteger dim) : CovarianceMatrix(dim) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ CorrelationMatrix::CorrelationMatrix(const UnsignedInteger dim, const Collection &elementsValues) : CovarianceMatrix(dim, elementsValues) { // Nothing to do } /* String converter */ String CorrelationMatrix::__repr__() const { checkSymmetry(); return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } /* CorrelationMatrix transpose */ CorrelationMatrix CorrelationMatrix::transpose () const { return *this; } /* CorrelationMatrix multiplication (must have consistent dimensions) */ CorrelationMatrix CorrelationMatrix::operator * (const IdentityMatrix & m) const { return *this; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CovarianceMatrix.cxx000066400000000000000000000071171307543307100225360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class CovarianceMatrix implements blank free samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CovarianceMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CovarianceMatrix); /* Default constructor */ CovarianceMatrix::CovarianceMatrix() : SymmetricMatrix(0) { // Nothing to do } /* Constructor with implementation */ CovarianceMatrix::CovarianceMatrix(const Implementation & i) : SymmetricMatrix(i) { // Nothing to do } /* Constructor with implementation */ CovarianceMatrix::CovarianceMatrix(const MatrixImplementation & i) : SymmetricMatrix(i) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ CovarianceMatrix::CovarianceMatrix(const UnsignedInteger dim) : SymmetricMatrix(dim) { // Initialize the correlation matrix to the identity matrix for(UnsignedInteger i = 0; i < dim; ++i) operator()(i, i) = 1.0; } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ CovarianceMatrix::CovarianceMatrix(const UnsignedInteger dim, const Collection &elementsValues) : SymmetricMatrix(dim, elementsValues) { // Nothing to do } /* String converter */ String CovarianceMatrix::__repr__() const { checkSymmetry(); return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } /* CovarianceMatrix transpose */ CovarianceMatrix CovarianceMatrix::transpose () const { return *this; } /* CovarianceMatrix addition (must have the same dimensions) */ CovarianceMatrix CovarianceMatrix::operator + (const CovarianceMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* CovarianceMatrix multiplication (must have consistent dimensions) */ CovarianceMatrix CovarianceMatrix::operator * (const IdentityMatrix & m) const { return *this; } /* Check if the matrix is SPD */ Bool CovarianceMatrix::isPositiveDefinite(const Bool keepIntact) { return getImplementation()->isPositiveDefinite(keepIntact); } /* Build the Cholesky factorization of the matrix */ TriangularMatrix CovarianceMatrix::computeCholesky(const Bool keepIntact) { return Implementation(getImplementation()->computeCholesky(keepIntact).clone()); } /* Resolution of a linear system */ Point CovarianceMatrix::solveLinearSystem(const Point & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemCov(b, keepIntact); } Matrix CovarianceMatrix::solveLinearSystem(const Matrix & b, const Bool keepIntact) { return Implementation(getImplementation()->solveLinearSystemCov(*b.getImplementation(), keepIntact).clone()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CovarianceModel.cxx000066400000000000000000000232131307543307100223250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CovarianceModel.hxx" #include "openturns/ExponentialModel.hxx" #include "openturns/HMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceModel */ CLASSNAMEINIT(CovarianceModel); // static const Factory Factory_CovarianceModel; /* Constructor without parameter */ CovarianceModel::CovarianceModel() : TypedInterfaceObject(new ExponentialModel()) { // Nothing to do } /* Parameters constructor */ CovarianceModel::CovarianceModel(const CovarianceModelImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ CovarianceModel::CovarianceModel(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ CovarianceModel::CovarianceModel(CovarianceModelImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Dimension accessor */ UnsignedInteger CovarianceModel::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } UnsignedInteger CovarianceModel::getDimension() const { return getImplementation()->getDimension(); } /* Computation of the covariance function */ CovarianceMatrix CovarianceModel::operator() (const Scalar s, const Scalar t) const { return getImplementation()->operator() (s, t); } CovarianceMatrix CovarianceModel::operator() (const Point & s, const Point & t) const { return getImplementation()->operator() (s, t); } Scalar CovarianceModel::computeStandardRepresentative(const Point & s, const Point & t) const { return getImplementation()->computeStandardRepresentative(s, t); } Scalar CovarianceModel::computeStandardRepresentative(const Scalar & s, const Scalar & t) const { return getImplementation()->computeStandardRepresentative(s, t); } Scalar CovarianceModel::computeStandardRepresentative(const Point & tau) const { return getImplementation()->computeStandardRepresentative(tau); } Scalar CovarianceModel::computeStandardRepresentative(const Scalar & tau) const { return getImplementation()->computeStandardRepresentative(tau); } Scalar CovarianceModel::computeAsScalar (const Point & s, const Point & t) const { return getImplementation()->computeAsScalar(s, t); } CovarianceMatrix CovarianceModel::operator() (const Scalar tau) const { return getImplementation()->operator() (tau); } CovarianceMatrix CovarianceModel::operator() (const Point & tau) const { return getImplementation()->operator() (tau); } Scalar CovarianceModel::computeAsScalar (const Point & tau) const { return getImplementation()->computeAsScalar(tau); } /* Gradient */ Matrix CovarianceModel::partialGradient(const Point & s, const Point & t) const { return getImplementation()->partialGradient(s, t); } /* Gradient wrt parameters */ Matrix CovarianceModel::parameterGradient(const Point & s, const Point & t) const { return getImplementation()->parameterGradient(s, t); } /* Discretize the covariance function on a given TimeGrid/Mesh */ CovarianceMatrix CovarianceModel::discretize(const RegularGrid & timeGrid) const { return getImplementation()->discretize(timeGrid); } CovarianceMatrix CovarianceModel::discretize(const Mesh & mesh) const { return getImplementation()->discretize(mesh); } CovarianceMatrix CovarianceModel::discretize(const Sample & vertices) const { return getImplementation()->discretize(vertices); } Sample CovarianceModel::discretizeRow(const Sample & vertices, const UnsignedInteger p) const { return getImplementation()->discretizeRow(vertices, p); } /** Discretize and factorize the covariance function on a given TimeGrid/Mesh */ TriangularMatrix CovarianceModel::discretizeAndFactorize(const RegularGrid & timeGrid) const { return getImplementation()->discretizeAndFactorize(timeGrid); } TriangularMatrix CovarianceModel::discretizeAndFactorize(const Mesh & mesh) const { return getImplementation()->discretizeAndFactorize(mesh); } TriangularMatrix CovarianceModel::discretizeAndFactorize(const Sample & vertices) const { return getImplementation()->discretizeAndFactorize(vertices); } /** Discretize the covariance function on a given TimeGrid/Mesh using HMatrix */ HMatrix CovarianceModel::discretizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeHMatrix(timeGrid, nuggetFactor, parameters); } HMatrix CovarianceModel::discretizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeHMatrix(mesh, nuggetFactor, parameters); } HMatrix CovarianceModel::discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeHMatrix(vertices, nuggetFactor, parameters); } /** Discretize and factorize the covariance function on a given TimeGrid/Mesh using HMatrix */ HMatrix CovarianceModel::discretizeAndFactorizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeAndFactorizeHMatrix(timeGrid, nuggetFactor, parameters); } HMatrix CovarianceModel::discretizeAndFactorizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeAndFactorizeHMatrix(mesh, nuggetFactor, parameters); } HMatrix CovarianceModel::discretizeAndFactorizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return getImplementation()->discretizeAndFactorizeHMatrix(vertices, nuggetFactor, parameters); } /* Amplitude accessor */ Point CovarianceModel::getAmplitude() const { return getImplementation()->getAmplitude(); } void CovarianceModel::setAmplitude(const Point & amplitude) { copyOnWrite(); getImplementation()->setAmplitude(amplitude); } /* Scale accessor */ Point CovarianceModel::getScale() const { return getImplementation()->getScale(); } void CovarianceModel::setScale(const Point & scale) { copyOnWrite(); getImplementation()->setScale(scale); } /* Spatial correlation accessor */ CorrelationMatrix CovarianceModel::getSpatialCorrelation() const { return getImplementation()->getSpatialCorrelation(); } void CovarianceModel::setSpatialCorrelation(const CorrelationMatrix & spatialCorrelation) { copyOnWrite(); getImplementation()->setSpatialCorrelation(spatialCorrelation); } /* Nugget factor accessor */ Scalar CovarianceModel::getNuggetFactor() const { return getImplementation()->getNuggetFactor(); } void CovarianceModel::setNuggetFactor(const Scalar nuggetFactor) { copyOnWrite(); getImplementation()->setNuggetFactor(nuggetFactor); } /* Parameters accessor */ void CovarianceModel::setParameter(const Point& parameter) { copyOnWrite(); getImplementation()->setParameter(parameter); } Point CovarianceModel::getParameter() const { return getImplementation()->getParameter(); } Description CovarianceModel::getParameterDescription() const { return getImplementation()->getParameterDescription(); } /* Indices of the active parameters */ void CovarianceModel::setActiveParameter(const Indices & active) { copyOnWrite(); getImplementation()->setActiveParameter(active); } Indices CovarianceModel::getActiveParameter() const { return getImplementation()->getActiveParameter(); } /* Is it a stationary covariance model ? */ Bool CovarianceModel::isStationary() const { return getImplementation()->isStationary(); } /* Is it a diagonal covariance model ? */ Bool CovarianceModel::isDiagonal() const { return getImplementation()->isDiagonal(); } /* Drawing method */ Graph CovarianceModel::draw(const UnsignedInteger rowIndex, const UnsignedInteger columnIndex, const Scalar tMin, const Scalar tMax, const UnsignedInteger pointNumber, const Bool asStationary, const Bool correlationFlag) const { return getImplementation()->draw(rowIndex, columnIndex, tMin, tMax, pointNumber, asStationary, correlationFlag); } /* String converter */ String CovarianceModel::__repr__() const { return getImplementation()->__repr__(); } /* String converter */ String CovarianceModel::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Marginal accessor */ CovarianceModel CovarianceModel::getMarginal(const UnsignedInteger index) const { return getImplementation()->getMarginal(index); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CovarianceModelFactory.cxx000066400000000000000000000052341307543307100236600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CovarianceModelFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CovarianceModelFactory); /* Default constructor */ CovarianceModelFactory::CovarianceModelFactory() : TypedInterfaceObject(new CovarianceModelFactoryImplementation()) { // Nothing to do } /* Parameters constructor */ CovarianceModelFactory::CovarianceModelFactory(const CovarianceModelFactoryImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ CovarianceModelFactory::CovarianceModelFactory(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ CovarianceModelFactory::CovarianceModelFactory(CovarianceModelFactoryImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Virtual constructor */ CovarianceModelFactory * CovarianceModelFactory::clone() const { return new CovarianceModelFactory(*this); } /* String converter */ String CovarianceModelFactory::__repr__() const { OSS oss(true); oss << "class=" << CovarianceModelFactory::GetClassName() << " implementation = " << getImplementation()->__repr__(); return oss; } /* String converter */ String CovarianceModelFactory::__str__(const String & offset) const { return getImplementation()->__str__(offset); } CovarianceModel CovarianceModelFactory::build(const ProcessSample & sample) const { return getImplementation()->build(sample); } CovarianceModel CovarianceModelFactory::build(const Field & timeSeries) const { return getImplementation()->build(timeSeries); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CovarianceModelFactoryImplementation.cxx000066400000000000000000000054331307543307100265670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/CovarianceModelFactoryImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CovarianceModelFactoryImplementation); static const Factory Factory_CovarianceModelFactoryImplementation; /* Default constructor */ CovarianceModelFactoryImplementation::CovarianceModelFactoryImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ CovarianceModelFactoryImplementation * CovarianceModelFactoryImplementation::clone() const { return new CovarianceModelFactoryImplementation(*this); } /* String converter */ String CovarianceModelFactoryImplementation::__repr__() const { OSS oss(true); oss << "class=" << CovarianceModelFactoryImplementation::GetClassName(); return oss; } /* String converter */ String CovarianceModelFactoryImplementation::__str__(const String & offset) const { return this->getClassName(); } /* Here is the interface that all derived class must implement */ CovarianceModelImplementation::Implementation CovarianceModelFactoryImplementation::build(const ProcessSample & sample) const { throw NotYetImplementedException(HERE) << "In CovarianceModelFactoryImplementation::build(const ProcessSample & sample) const"; } CovarianceModelImplementation::Implementation CovarianceModelFactoryImplementation::build(const Field & timeSeries) const { throw NotYetImplementedException(HERE) << "In CovarianceModelFactoryImplementation::build(const Field & timeSeries) const"; } /* Method save() stores the object through the StorageManager */ void CovarianceModelFactoryImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void CovarianceModelFactoryImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/CovarianceModelImplementation.cxx000066400000000000000000000747211307543307100252450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CovarianceModelImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MatrixImplementation.hxx" #include "openturns/HMatrix.hxx" #include "openturns/HMatrixFactory.hxx" #include "openturns/Contour.hxx" #include "openturns/Curve.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceModelImplementation */ CLASSNAMEINIT(CovarianceModelImplementation); static const Factory Factory_CovarianceModelImplementation; /* Dimension-based constructor */ CovarianceModelImplementation::CovarianceModelImplementation(const UnsignedInteger spatialDimension) : PersistentObject() , scale_(spatialDimension, 1.0) , spatialDimension_(spatialDimension) , amplitude_(1, 1.0) , dimension_(1) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) , nuggetFactor_(ResourceMap::GetAsScalar("CovarianceModel-DefaultNuggetFactor")) , activeParameter_(spatialDimension_ + dimension_) { activeParameter_.fill(); updateSpatialCovariance(); } /* Standard constructor with scale and amplitude scale parameter parameter */ CovarianceModelImplementation::CovarianceModelImplementation(const Point & scale, const Point & amplitude) : PersistentObject() , scale_(0) , spatialDimension_(scale.getDimension()) , amplitude_(0) , dimension_(amplitude.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) , nuggetFactor_(ResourceMap::GetAsScalar("CovarianceModel-DefaultNuggetFactor")) , activeParameter_(spatialDimension_ + (dimension_ * (dimension_ + 1)) / 2) { setAmplitude(amplitude); setScale(scale); activeParameter_.fill(); updateSpatialCovariance(); } /* Standard constructor with scale, amplitude and spatial correlation parameter parameter */ CovarianceModelImplementation::CovarianceModelImplementation(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation) : PersistentObject() , scale_(0) , spatialDimension_(scale.getDimension()) , amplitude_(0) , dimension_(amplitude.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) , nuggetFactor_(ResourceMap::GetAsScalar("CovarianceModel-DefaultNuggetFactor")) , activeParameter_(spatialDimension_ + (dimension_ * (dimension_ + 1)) / 2) { setAmplitude(amplitude); setScale(scale); activeParameter_.fill(); if (spatialCorrelation.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "In CovarianceModelImplementation::CovarianceModelImplementation, the given spatial correlation has a dimension different from the scales and amplitudes."; setSpatialCorrelation(spatialCorrelation); } /* Standard constructor with scale and spatial covariance parameter parameter */ CovarianceModelImplementation::CovarianceModelImplementation(const Point & scale, const CovarianceMatrix & spatialCovariance) : PersistentObject() , scale_(0) , spatialDimension_(scale.getDimension()) , amplitude_(0) , dimension_(spatialCovariance.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) , nuggetFactor_(ResourceMap::GetAsScalar("CovarianceModel-DefaultNuggetFactor")) , activeParameter_(spatialDimension_ + (dimension_ * (dimension_ + 1)) / 2) { // spatialCovariance spatialCovariance_ = spatialCovariance; Point amplitude(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) amplitude[i] = sqrt(spatialCovariance(i, i)); // Check that the amplitudes are valid setAmplitude(amplitude); // Convert the spatial covariance into a spatial correlation if (!spatialCovariance.isDiagonal()) { spatialCorrelation_ = CorrelationMatrix(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) for (UnsignedInteger j = 0; j < i; ++j) spatialCorrelation_(i, j) = spatialCovariance(i, j) / (amplitude[i] * amplitude[j]); } // !isDiagonal setScale(scale); activeParameter_.fill(); } /* Virtual constructor */ CovarianceModelImplementation * CovarianceModelImplementation::clone() const { return new CovarianceModelImplementation(*this); } /* Dimension accessors */ UnsignedInteger CovarianceModelImplementation::getDimension() const { return dimension_; } UnsignedInteger CovarianceModelImplementation::getSpatialDimension() const { return spatialDimension_; } CovarianceMatrix CovarianceModelImplementation::operator() (const Scalar s, const Scalar t) const { return operator() (Point(1, s), Point(1, t)); } CovarianceMatrix CovarianceModelImplementation::operator() (const Point & s, const Point & t) const { const Scalar rho = computeStandardRepresentative(s, t); return CovarianceMatrix((spatialCovariance_ * rho).getImplementation()); } // compute standard representative computes the term \rho(s, t) Scalar CovarianceModelImplementation::computeStandardRepresentative(const Point & s, const Point & t) const { throw NotYetImplementedException(HERE) << "In CovarianceModelImplementation::computeStandardRepresentative(const Point & s, const Point & t) const"; } Scalar CovarianceModelImplementation::computeStandardRepresentative(const Scalar & s, const Scalar & t) const { return computeStandardRepresentative(Point(1, s), Point(1, t)); } Scalar CovarianceModelImplementation::computeStandardRepresentative(const Point & tau) const { return computeStandardRepresentative(Point(dimension_), tau); } Scalar CovarianceModelImplementation::computeStandardRepresentative(const Scalar & tau) const { return computeStandardRepresentative(Point(1, tau)); } Scalar CovarianceModelImplementation::computeAsScalar (const Point & s, const Point & t) const { if (dimension_ != 1) throw NotDefinedException(HERE) << "Error: the covariance model is of dimension=" << dimension_ << ", expected dimension=1."; return (*this)(s, t)(0, 0); } Scalar CovarianceModelImplementation::computeAsScalar(const Scalar s, const Scalar t) const { throw NotYetImplementedException(HERE) << "In CovarianceModelImplementation::computeAsScalar(const Scalar s, const Scalar t) const"; } /* Computation of the covariance function */ CovarianceMatrix CovarianceModelImplementation::operator() (const Scalar tau) const { return operator() (Point(1, tau)); } CovarianceMatrix CovarianceModelImplementation::operator() (const Point & tau) const { return operator() (Point(tau.getDimension()), tau); } Scalar CovarianceModelImplementation::computeAsScalar (const Point & tau) const { if (dimension_ != 1) throw NotDefinedException(HERE) << "Error: the covariance model is of dimension=" << dimension_ << ", expected dimension=1."; return (*this)(tau)(0, 0); } Scalar CovarianceModelImplementation::computeAsScalar(const Scalar tau) const { throw NotYetImplementedException(HERE) << "In CovarianceModelImplementation::computeAsScalar(const Scalar tau) const"; } /* Gradient */ Matrix CovarianceModelImplementation::partialGradient (const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; Matrix gradient(spatialDimension_, dimension_ * dimension_); CovarianceMatrix covarianceST(operator()(s, t)); // Convert result into MatrixImplementation to symmetrize & get the collection MatrixImplementation covarianceSTImplementation(*covarianceST.getImplementation()); covarianceSTImplementation.symmetrize(); const Point centralValue(covarianceSTImplementation); const Scalar epsilon = std::sqrt(SpecFunc::ScalarEpsilon); // Loop over the shifted points for (UnsignedInteger i = 0; i < spatialDimension_; ++i) { Point currentPoint(s); currentPoint[i] += epsilon; CovarianceMatrix localCovariance(operator()(currentPoint, t)); MatrixImplementation localCovarianceImplementation(*localCovariance.getImplementation()); localCovarianceImplementation.symmetrize(); const Point currentValue(localCovarianceImplementation); for (UnsignedInteger j = 0; j < centralValue.getDimension(); ++j) gradient(i, j) = (currentValue[j] - centralValue[j]) / epsilon; } return gradient; } /* Gradient */ Matrix CovarianceModelImplementation::parameterGradient(const Point & s, const Point & t) const { const Point parameter(getParameter()); const UnsignedInteger size = parameter.getSize(); const Scalar epsilon = std::sqrt(SpecFunc::ScalarEpsilon); Matrix gradient(size, (dimension_ * (dimension_ + 1)) / 2); CovarianceMatrix covRef = operator()(s, t); Pointer p_implementation(clone()); for (UnsignedInteger k = 0; k < size; ++ k) { Point parameterP(parameter); parameterP[k] += epsilon; p_implementation->setParameter(parameterP); CovarianceMatrix covP = p_implementation->operator()(s, t); UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < dimension_; ++ j) { for (UnsignedInteger i = 0; i <= j; ++ i) { gradient(k, index) = (covP(i, j) - covRef(i, j)) / epsilon; ++ index; } } } return gradient; } /* Discretize the covariance function on a given TimeGrid/Mesh */ CovarianceMatrix CovarianceModelImplementation::discretize(const RegularGrid & timeGrid) const { return discretize(timeGrid.getVertices()); } struct CovarianceModelDiscretizePolicy { const Sample & input_; CovarianceMatrix & output_; const CovarianceModelImplementation & model_; const UnsignedInteger dimension_; CovarianceModelDiscretizePolicy(const Sample & input, CovarianceMatrix & output, const CovarianceModelImplementation & model) : input_(input) , output_(output) , model_(model) , dimension_(model.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const UnsignedInteger jLocal = static_cast< UnsignedInteger >(sqrt(2.0 * i + 0.25) - 0.5); const UnsignedInteger jBase = jLocal * dimension_; const UnsignedInteger iLocal = i - (jLocal * (jLocal + 1)) / 2; const UnsignedInteger iBase = iLocal * dimension_; const CovarianceMatrix localCovariance(model_(input_[iLocal], input_[jLocal])); for (UnsignedInteger ii = 0; ii < dimension_; ++ii) for (UnsignedInteger jj = 0; jj < dimension_; ++jj) output_(iBase + ii, jBase + jj) = localCovariance(ii, jj); } } }; /* end struct CovarianceModelDiscretizePolicy */ CovarianceMatrix CovarianceModelImplementation::discretize(const Sample & vertices) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has a dimension=" << vertices.getDimension() << " different from the input dimension=" << spatialDimension_; const UnsignedInteger size = vertices.getSize(); const UnsignedInteger fullSize = size * dimension_; CovarianceMatrix covarianceMatrix(fullSize); const CovarianceModelDiscretizePolicy policy( vertices, covarianceMatrix, *this ); // The loop is over the lower block-triangular part TBB::ParallelFor( 0, size * (size + 1) / 2, policy ); return covarianceMatrix; } CovarianceMatrix CovarianceModelImplementation::discretize(const Mesh & mesh) const { return discretize(mesh.getVertices()); } /* Discretize and factorize the covariance function on a given TimeGrid/Mesh */ TriangularMatrix CovarianceModelImplementation::discretizeAndFactorize(const RegularGrid & timeGrid) const { return discretizeAndFactorize(timeGrid.getVertices()); } TriangularMatrix CovarianceModelImplementation::discretizeAndFactorize(const Mesh & mesh) const { return discretizeAndFactorize(mesh.getVertices()); } TriangularMatrix CovarianceModelImplementation::discretizeAndFactorize(const Sample & vertices) const { // We suppose that covariance matrix is symmetric positive definite // We do not catch InternalException // Incremeant nugget factor to make matrix positive definite CovarianceMatrix covariance = discretize(vertices); TriangularMatrix choleskyFactor = covariance.computeCholesky(); return choleskyFactor; } struct CovarianceModelScalarDiscretizeRowPolicy { const Sample & input_; const Point p_; Sample & output_; const CovarianceModelImplementation & model_; CovarianceModelScalarDiscretizeRowPolicy(const Sample & input, const UnsignedInteger p, Sample & output, const CovarianceModelImplementation & model) : input_(input) , p_(input[p]) , output_(output) , model_(model) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i][0] = model_.computeAsScalar(p_, input_[i]); } }; /* end struct CovarianceModelScalarDiscretizeRowPolicy */ struct CovarianceModelDiscretizeRowPolicy { const Sample & input_; const Point p_; Sample & output_; const CovarianceModelImplementation & model_; const UnsignedInteger dimension_; CovarianceModelDiscretizeRowPolicy(const Sample & input, const UnsignedInteger p, Sample & output, const CovarianceModelImplementation & model) : input_(input) , p_(input[p]) , output_(output) , model_(model) , dimension_(model.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const MatrixImplementation localCovariance(*(model_(p_, input_[i]).getImplementation())); const UnsignedInteger base = i * dimension_; for (UnsignedInteger ii = 0; ii < dimension_; ++ii) for (UnsignedInteger jj = 0; jj < dimension_; ++jj) output_[base + ii][jj] = localCovariance(ii, jj); } } }; /* end struct CovarianceModelDiscretizeRowPolicy */ Sample CovarianceModelImplementation::discretizeRow(const Sample & vertices, const UnsignedInteger p) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has a dimension=" << vertices.getDimension() << " different from the input dimension=" << spatialDimension_; const UnsignedInteger size = vertices.getSize(); Sample result(size * dimension_, dimension_); if (dimension_ == 1) { const CovarianceModelScalarDiscretizeRowPolicy policy( vertices, p, result, *this ); TBB::ParallelFor( 0, size, policy ); } else { const CovarianceModelDiscretizeRowPolicy policy( vertices, p, result, *this ); TBB::ParallelFor( 0, size, policy ); } return result; } /* Discretize the covariance function on a given TimeGrid/Mesh using HMatrix */ HMatrix CovarianceModelImplementation::discretizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return discretizeHMatrix(timeGrid.getVertices(), nuggetFactor, parameters); } HMatrix CovarianceModelImplementation::discretizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return discretizeHMatrix(mesh.getVertices(), nuggetFactor, parameters); } HMatrix CovarianceModelImplementation::discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { #ifdef OPENTURNS_HAVE_HMAT HMatrixFactory hmatrixFactory; HMatrix covarianceHMatrix = hmatrixFactory.build(vertices, dimension_, true, parameters); if (dimension_ == 1) { CovarianceAssemblyFunction simple(*this, vertices, nuggetFactor); covarianceHMatrix.assemble(simple, 'L'); } else { CovarianceBlockAssemblyFunction block(*this, vertices, nuggetFactor); covarianceHMatrix.assemble(block, 'L'); } return covarianceHMatrix; #else throw NotYetImplementedException(HERE) << "In CovarianceModelImplementation::discretizeHMatrix, OpenTURNS had been compiled without HMat support"; #endif } /* Discretize and factorize the covariance function on a given TimeGrid/Mesh using HMatrix */ HMatrix CovarianceModelImplementation::discretizeAndFactorizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return discretizeAndFactorizeHMatrix(timeGrid.getVertices(), nuggetFactor, parameters); } HMatrix CovarianceModelImplementation::discretizeAndFactorizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { return discretizeAndFactorizeHMatrix(mesh.getVertices(), nuggetFactor, parameters); } HMatrix CovarianceModelImplementation::discretizeAndFactorizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { // We suppose that covariance matrix is symmetric positive definite // We do not catch InternalException // Incremeant nugget factor to make matrix positive definite // Maybe parameters need to be adapted. HMatrix covarianceFactor = discretizeHMatrix(vertices, nuggetFactor, parameters); covarianceFactor.factorize("LLt"); return covarianceFactor; } /* Amplitude accessor */ Point CovarianceModelImplementation::getAmplitude() const { return amplitude_; } void CovarianceModelImplementation::setAmplitude(const Point & amplitude) { if (amplitude.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "In CovarianceModelImplementation::setAmplitude: the given amplitude has a dimension=" << amplitude.getDimension() << " different from the dimension=" << dimension_; for (UnsignedInteger index = 0; index < dimension_; ++index) if (amplitude[index] <= 0) throw InvalidArgumentException(HERE) << "In CovarianceModelImplementation::setAmplitude, the component " << index << " of amplitude is non positive" ; amplitude_ = amplitude; updateSpatialCovariance(); } /* Scale accessor */ Point CovarianceModelImplementation::getScale() const { return scale_; } void CovarianceModelImplementation::setScale(const Point & scale) { if (scale.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In CovarianceModelImplementation::setScale: the given scale has a dimension=" << scale.getDimension() << " different from the input dimension=" << spatialDimension_; for (UnsignedInteger index = 0; index < spatialDimension_; ++index) if (scale[index] <= 0) throw InvalidArgumentException(HERE) << "In CovarianceModelImplementation::setScale: the component " << index << " of scale is non positive" ; scale_ = scale; } /* Spatial correlation accessor */ CorrelationMatrix CovarianceModelImplementation::getSpatialCorrelation() const { if (!isDiagonal_) return spatialCorrelation_; return CorrelationMatrix(dimension_); } void CovarianceModelImplementation::setSpatialCorrelation(const CorrelationMatrix & spatialCorrelation) { spatialCorrelation_ = spatialCorrelation; isDiagonal_ = spatialCorrelation_.isDiagonal(); updateSpatialCovariance(); } void CovarianceModelImplementation::updateSpatialCovariance() { spatialCovariance_ = CovarianceMatrix(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { spatialCovariance_(j, j) = amplitude_[j] * amplitude_[j]; if (!isDiagonal_) { for (UnsignedInteger i = j + 1; i < dimension_; ++i) spatialCovariance_(i, j) = spatialCorrelation_(i , j) * amplitude_[i] * amplitude_[j]; } } } /* Nugget factor accessor */ Scalar CovarianceModelImplementation::getNuggetFactor() const { return nuggetFactor_; } void CovarianceModelImplementation::setNuggetFactor(const Scalar nuggetFactor) { if (!(nuggetFactor >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the nugget factor=" << nuggetFactor << " is negative"; nuggetFactor_ = nuggetFactor; } void CovarianceModelImplementation::setFullParameter(const Point & parameter) { // Here we manage only the generic parameters // First the scale parameter UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < spatialDimension_; ++ i) { scale_[i] = parameter[index]; ++ index; } // Second the amplitude parameter for (UnsignedInteger i = 0; i < dimension_; ++ i) { amplitude_[i] = parameter[index]; ++ index; } // Third the spatial correation parameter, only the lower triangle for (UnsignedInteger i = 0; i < dimension_; ++ i) for (UnsignedInteger j = 0; j < i; ++ j) { spatialCorrelation_(i, j) = parameter[index]; ++ index; } isDiagonal_ = spatialCorrelation_.isDiagonal(); updateSpatialCovariance(); } Point CovarianceModelImplementation::getFullParameter() const { // Here we manage only the generic parameters // First the scale parameter Point parameter(getScale()); // Second the amplitude parameter parameter.add(getAmplitude()); // Third the spatial correation parameter, only the lower triangle for (UnsignedInteger i = 0; i < dimension_; ++ i) for (UnsignedInteger j = 0; j < i; ++ j) parameter.add(spatialCorrelation_(i, j)); return parameter; } Description CovarianceModelImplementation::getFullParameterDescription() const { // Here we manage only the generic parameters // First the scale parameter Description description(0); // First the scale parameter for (UnsignedInteger j = 0; j < spatialDimension_; ++j) description.add(OSS() << "scale_" << j); // Second the amplitude parameter for (UnsignedInteger j = 0; j < dimension_; ++j) description.add(OSS() << "amplitude_" << j); // Third the spatial correlation parameter, only the lower triangle for (UnsignedInteger i = 0; i < dimension_; ++i) for (UnsignedInteger j = 0; j < i; ++j) description.add(OSS() << "R_" << i << "_" << j); return description; } /* Indices of the active parameters */ void CovarianceModelImplementation::setActiveParameter(const Indices & active) { if (!active.isIncreasing()) throw InvalidArgumentException(HERE) << "Error: the active parameter indices must be given in increasing order, here active=" << active; activeParameter_ = active; } Indices CovarianceModelImplementation::getActiveParameter() const { return activeParameter_; } void CovarianceModelImplementation::setParameter(const Point & parameter) { const UnsignedInteger activeSize = activeParameter_.getSize(); if (activeSize == 0) return; // Brute-force approach: everything is updated Point fullParameter(getFullParameter()); for (UnsignedInteger i = 0; i < activeSize; ++i) fullParameter[activeParameter_[i]] = parameter[i]; setFullParameter(fullParameter); } Point CovarianceModelImplementation::getParameter() const { // For now we use a brute-force approach: build all the parameters then extract the relevant ones Point result(0); const UnsignedInteger activeSize = activeParameter_.getSize(); // Quick return if no parameter if (activeSize == 0) return result; const Point parameter(getFullParameter()); if (activeSize == parameter.getSize()) return parameter; // Then filter only the active parameters for (UnsignedInteger i = 0; i < activeSize; ++ i) result.add(parameter[activeParameter_[i]]); return result; } Description CovarianceModelImplementation::getParameterDescription() const { // For now we use a brute-force approach: build all the parameters then extract the relevant ones Description result(0); const UnsignedInteger activeSize = activeParameter_.getSize(); // Quick return if no parameter if (activeSize == 0) return result; const Description description(getFullParameterDescription()); if (activeSize == description.getSize()) return description; // Then filter only the active parameters for (UnsignedInteger i = 0; i < activeSize; ++i) result.add(description[activeParameter_[i]]); return result; } /* Is it a stationary model ? */ Bool CovarianceModelImplementation::isStationary() const { return false; } /* Is it a diagonal model ? */ Bool CovarianceModelImplementation::isDiagonal() const { return isDiagonal_; } /* Marginal accessor */ CovarianceModelImplementation::Implementation CovarianceModelImplementation::getMarginal(const UnsignedInteger index) const { if (index >= dimension_) throw InvalidArgumentException(HERE) << "Error: index=" << index << " must be less than output dimension=" << dimension_; if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In CovarianceModelImplementation::getMarginal(const UnsignedInteger index) const"; return clone(); } /* Drawing method */ Graph CovarianceModelImplementation::draw(const UnsignedInteger rowIndex, const UnsignedInteger columnIndex, const Scalar tMin, const Scalar tMax, const UnsignedInteger pointNumber, const Bool asStationary, const Bool correlationFlag) const { if (spatialDimension_ != 1) throw NotDefinedException(HERE) << "Error: can draw covariance models only if spatial dimension=1, here spatial dimension=" << spatialDimension_; if (rowIndex >= dimension_) throw InvalidArgumentException(HERE) << "Error: the given row index must be less than " << dimension_ << ", here rowIndex=" << rowIndex; if (columnIndex >= dimension_) throw InvalidArgumentException(HERE) << "Error: the given column index must be less than " << dimension_ << ", here columnIndex=" << columnIndex; if (pointNumber < 2) throw InvalidArgumentException(HERE) << "Error: cannot draw the model with pointNumber<2, here pointNumber=" << pointNumber; // Check if the model is stationary and if we want to draw it this way if (asStationary && isStationary()) { // Here we compute the normalization for the correlation instead of using // the amplitude attribute for models for which it is not given Scalar ratio = 1.0; if (correlationFlag) { ratio = (*this)(0.0)(rowIndex, columnIndex); // If ratio == 0, the covariance is zero everywhere if (ratio == 0.0) ratio = 1.0; } Sample data(pointNumber, 2); for (UnsignedInteger i = 0; i < pointNumber; ++i) { const Scalar tau = (i * tMin + (pointNumber - i - 1.0) * tMax) / (pointNumber - 1.0); const Scalar value((*this)(tau)(rowIndex, columnIndex) / ratio); data[i][0] = tau; data[i][1] = value; } Graph graph(getName(), "tau", (correlationFlag ? "correlation" : "covariance"), true, "topright"); Curve curve(data); curve.setLineWidth(2); curve.setColor("red"); graph.add(curve); return graph; } // Here we draw a non-stationary model const Sample gridT = RegularGrid(tMin, (tMax - tMin) / (pointNumber - 1.0), pointNumber).getVertices(); CovarianceMatrix matrix(discretize(gridT)); const UnsignedInteger dimension = matrix.getDimension(); // Normalize the data if needed if (correlationFlag) { Point sigma(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) sigma[i] = std::sqrt(matrix(i, i)); for (UnsignedInteger j = 0; j < dimension; ++j) { for (UnsignedInteger i = 0; i < j; ++i) { const Scalar scaling = sigma[i] * sigma[j]; if (scaling == 0.0) matrix(i, j) = 0.0; else matrix(i, j) /= scaling; } // i matrix(j, j) = 1.0; } // j } // correlationFlag matrix.checkSymmetry(); Sample data(pointNumber * pointNumber, 1); data.getImplementation()->setData(*matrix.getImplementation()); Graph graph(getName() + (correlationFlag ? String(" correlation") : String (" covariance")), "s", "t", true, "bottomright"); graph.setGrid(true); Contour contour(pointNumber, pointNumber, data); Contour isoValues(Contour(gridT, gridT, data, Point(0), Description(0), true, "")); isoValues.buildDefaultLevels(); isoValues.buildDefaultLabels(); const Point levels(isoValues.getLevels()); const Description labels(isoValues.getLabels()); for (UnsignedInteger i = 0; i < levels.getDimension(); ++i) { Contour current(isoValues); current.setLevels(Point(1, levels[i])); current.setLabels(Description(1, labels[i])); current.setDrawLabels(false); current.setLegend(labels[i]); current.setColor(Contour::ConvertFromHSV((360.0 * i / levels.getDimension()), 1.0, 1.0)); graph.add(current); } return graph; } /* String converter */ String CovarianceModelImplementation::__repr__() const { OSS oss(true); oss << "class= " << CovarianceModelImplementation::GetClassName(); return oss; } /* String converter */ String CovarianceModelImplementation::__str__(const String & offset) const { OSS oss(false); oss << offset << "class= " << CovarianceModelImplementation::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void CovarianceModelImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("scale_", scale_); adv.saveAttribute("spatialDimension_", spatialDimension_); adv.saveAttribute("amplitude_", amplitude_); adv.saveAttribute("dimension_", dimension_); adv.saveAttribute("spatialCorrelation_", spatialCorrelation_); adv.saveAttribute("isDiagonal_", isDiagonal_); adv.saveAttribute("nuggetFactor_", nuggetFactor_); adv.saveAttribute("activeParameter_", activeParameter_); } /* Method load() reloads the object from the StorageManager */ void CovarianceModelImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("scale_", scale_); adv.loadAttribute("spatialDimension_", spatialDimension_); adv.loadAttribute("amplitude_", amplitude_); adv.loadAttribute("dimension_", dimension_); adv.loadAttribute("spatialCorrelation_", spatialCorrelation_); adv.loadAttribute("isDiagonal_", isDiagonal_); adv.loadAttribute("nuggetFactor_", nuggetFactor_); adv.loadAttribute("activeParameter_", activeParameter_); updateSpatialCovariance(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/DiracCovarianceModel.cxx000066400000000000000000000353711307543307100233000ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DiracCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/HMatrix.hxx" #include "openturns/HMatrixFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DiracCovarianceModel); static const Factory Factory_DiracCovarianceModel; class DiracAssemblyFunction : public HMatrixTensorRealAssemblyFunction { private: const CovarianceMatrix covarianceMatrix_; public: DiracAssemblyFunction(const DiracCovarianceModel & covarianceModel) : HMatrixTensorRealAssemblyFunction(covarianceModel.getDimension()) , covarianceMatrix_(covarianceModel(Point(covarianceModel.getSpatialDimension()))) { // Nothing to do } void compute(UnsignedInteger i, UnsignedInteger j, Matrix* localValues) const { if (i == j) { memcpy( &localValues->getImplementation()->operator[](0), &covarianceMatrix_.getImplementation()->operator[](0), dimension_ * dimension_ * sizeof(Scalar) ); } } }; /* Default constructor */ DiracCovarianceModel::DiracCovarianceModel(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(spatialDimension) , covarianceFactor_() { // Remove the scale from the active parameter activeParameter_ = Indices(dimension_); activeParameter_.fill(); } /* Parameters constructor */ DiracCovarianceModel::DiracCovarianceModel(const UnsignedInteger spatialDimension, const Point & amplitude) : StationaryCovarianceModel(spatialDimension) , covarianceFactor_() { dimension_ = amplitude.getDimension(); setAmplitude(amplitude); // Remove the scale from the active parameter activeParameter_ = Indices(dimension_); activeParameter_.fill(); } /** Parameters constructor */ DiracCovarianceModel::DiracCovarianceModel(const UnsignedInteger spatialDimension, const Point & amplitude, const CorrelationMatrix & correlation) : StationaryCovarianceModel(Point(spatialDimension, 1.0), Point(amplitude.getDimension(), 1.0)) , covarianceFactor_() { dimension_ = amplitude.getDimension(); // Set spatial correlation setSpatialCorrelation(correlation); // set amplitude & compute covariance setAmplitude(amplitude); // Remove the scale from the active parameter activeParameter_ = Indices(dimension_); activeParameter_.fill(); } /** Parameters constructor */ DiracCovarianceModel::DiracCovarianceModel(const UnsignedInteger spatialDimension, const CovarianceMatrix & covariance) : StationaryCovarianceModel(spatialDimension) { dimension_ = covariance.getDimension(); amplitude_ = Point(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) amplitude_[i] = sqrt(covariance(i, i)); if (!covariance.isDiagonal()) { CorrelationMatrix correlation(dimension_); for(UnsignedInteger j = 0; j < dimension_; ++j) for(UnsignedInteger i = j; i < dimension_; ++i) spatialCorrelation_(i, j) = covariance(i, j) / (amplitude_[i] * amplitude_[j]); } // Copy covariance spatialCovariance_ = covariance; // Remove the scale from the active parameter activeParameter_ = Indices(dimension_); activeParameter_.fill(); } void DiracCovarianceModel::computeCovariance() { // Method that helps to compute spatialCovariance_ attribut (for tau=0) // after setAmplitude, setSpatialCorrelation spatialCovariance_ = CovarianceMatrix(dimension_); for(UnsignedInteger j = 0; j < dimension_; ++j) spatialCovariance_(j, j) = amplitude_[j] * amplitude_[j] * (1.0 + nuggetFactor_); if (!spatialCorrelation_.isDiagonal()) { for(UnsignedInteger j = 0; j < dimension_; ++j) for(UnsignedInteger i = j + 1; i < dimension_; ++i) spatialCovariance_(i, j) = spatialCorrelation_(i, j) * amplitude_[i] * amplitude_[j]; } // Compute once the Cholesky factor covarianceFactor_ = spatialCovariance_.computeCholesky(); } /* Virtual constructor */ DiracCovarianceModel * DiracCovarianceModel::clone() const { return new DiracCovarianceModel(*this); } /* Computation of the covariance density function */ CovarianceMatrix DiracCovarianceModel::operator() (const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::operator(), the point tau has dimension=" << tau.getDimension() << ", expected dimension=" << spatialDimension_; // If tau.norm1 is zero we compute the covariance matrix // Otherwise the returned value is 0 if (tau.norm() == 0) return spatialCovariance_; else return CovarianceMatrix(SquareMatrix(dimension_).getImplementation()); } // The following structure helps to compute the full covariance matrix struct DiracCovarianceModelDiscretizePolicy { const Sample & input_; CovarianceMatrix & output_; const DiracCovarianceModel & model_; const UnsignedInteger dimension_; DiracCovarianceModelDiscretizePolicy(const Sample & input, CovarianceMatrix & output, const DiracCovarianceModel & model) : input_(input) , output_(output) , model_(model) , dimension_(model.getDimension()) {} inline void operator()(const TBB::BlockedRange & r) const { for (UnsignedInteger index = r.begin(); index != r.end(); ++index) { const UnsignedInteger indexBlock = index * dimension_; for (UnsignedInteger j = 0; j < dimension_; ++j) for (UnsignedInteger i = 0; i < dimension_; ++i) output_(indexBlock + i, indexBlock + j) = model_.spatialCovariance_(i, j); } } }; /* end struct DiracCovarianceModelDiscretizePolicy */ CovarianceMatrix DiracCovarianceModel::discretize(const Sample & vertices) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretize, the given sample has a dimension=" << vertices.getDimension() << " different from the input spatial dimension=" << spatialDimension_; if (vertices.getSize() == 0) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretize, the given sample has a size 0"; const UnsignedInteger size = vertices.getSize(); const UnsignedInteger fullSize = size * dimension_; CovarianceMatrix covarianceMatrix(fullSize); const DiracCovarianceModelDiscretizePolicy policy( vertices, covarianceMatrix, *this ); // The loop is over the lower block-triangular part TBB::ParallelFor( 0, size, policy ); return covarianceMatrix; } // The following structure helps to compute the full covariance matrix struct DiracCovarianceModelDiscretizeAndFactorizePolicy { const Sample & input_; TriangularMatrix & output_; const DiracCovarianceModel & model_; const UnsignedInteger dimension_; DiracCovarianceModelDiscretizeAndFactorizePolicy(const Sample & input, TriangularMatrix & output, const DiracCovarianceModel & model) : input_(input) , output_(output) , model_(model) , dimension_(model.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger index = r.begin(); index != r.end(); ++index) { const UnsignedInteger indexBlock = index * dimension_; for (UnsignedInteger j = 0; j < dimension_; ++j) for (UnsignedInteger i = j; i < dimension_; ++i) output_(indexBlock + i, indexBlock + j) = model_.covarianceFactor_(i, j); } } }; /* end struct DiracCovarianceModelDiscretizeAndFactorizePolicy */ TriangularMatrix DiracCovarianceModel::discretizeAndFactorize(const Sample & vertices) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretize, the given sample has a dimension=" << vertices.getDimension() << " different from the input spatial dimension=" << spatialDimension_; if (vertices.getSize() == 0) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretize, the given sample has a size 0"; const UnsignedInteger size = vertices.getSize(); const UnsignedInteger fullSize = size * dimension_; TriangularMatrix covarianceFactor(fullSize); const DiracCovarianceModelDiscretizeAndFactorizePolicy policy( vertices, covarianceFactor, *this ); // The loop is over the lower block-triangular part TBB::ParallelFor( 0, size, policy ); return covarianceFactor; } Sample DiracCovarianceModel::discretizeRow(const Sample & vertices, const UnsignedInteger p) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretizeRow, the given sample has a dimension=" << vertices.getDimension() << " different from the input dimension=" << spatialDimension_; if (vertices.getSize() == 0) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretizeRow, the given sample has a size 0"; if (p >= vertices.getSize()) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::discretizeRow, the index p should be lower or equal to " << vertices.getSize() - 1 << ", here, p=" << p; const UnsignedInteger size = vertices.getSize(); Sample result(size * dimension_, dimension_); for(UnsignedInteger j = 0; j < dimension_; ++j) for(UnsignedInteger i = j; i < dimension_; ++i) result[p * dimension_ + i][j] = spatialCovariance_(i, j); return result; } // discretize with use of HMatrix HMatrix DiracCovarianceModel::discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const { #ifdef OPENTURNS_HAVE_HMAT HMatrixFactory hmatrixFactory; HMatrix covarianceHMatrix(hmatrixFactory.build(vertices, dimension_, true, parameters)); // Update covariance matrix // Take into account nuggetFactor CovarianceMatrix oldCovariance(spatialCovariance_); for(UnsignedInteger j = 0; j < dimension_; ++j) spatialCovariance_(j, j) = amplitude_[j] * amplitude_[j] * (1.0 + nuggetFactor); // Compute the covariance DiracAssemblyFunction dirac(*this); covarianceHMatrix.assemble(dirac, 'L'); // Restore old covariance spatialCovariance_ = CovarianceMatrix(oldCovariance); return covarianceHMatrix; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } /* Gradient */ Matrix DiracCovarianceModel::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; // Gradient should be checked Matrix gradient(spatialDimension_, dimension_ * dimension_); return gradient; } /* Parameters accessor */ void DiracCovarianceModel::setFullParameter(const Point & parameters) { if (parameters.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::setParameter, parameters should be of size " << dimension_ << ", here, parameters dimension = " << parameters.getDimension(); setAmplitude(parameters); } Point DiracCovarianceModel::getFullParameter() const { return getAmplitude(); } Description DiracCovarianceModel::getFullParameterDescription() const { Description description(0); for (UnsignedInteger j = 0; j < dimension_; ++j) description.add(OSS() << "amplitude_" << j); return description; } void DiracCovarianceModel::setScale(const Point & scale) { // Scale factor has no effect // No check of size or dimension scale_ = scale; LOGWARN(OSS() << "Scale parameter is not used."); } /** Amplitude accessor */ void DiracCovarianceModel::setAmplitude(const Point & amplitude) { if (amplitude.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::setAmplitude, amplitude vector should be of size " << dimension_ << ", here, amplitude dimension = " << amplitude.getDimension(); // Check positivity of amplitude for (UnsignedInteger i = 0; i < dimension_; ++i) { if (amplitude[i] <= 0) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::setAmplitude, amplitude should be stricly positive but the #" << i << " component equals " << amplitude[i]; } amplitude_ = amplitude; computeCovariance(); } void DiracCovarianceModel::setSpatialCorrelation(const CorrelationMatrix & correlation) { if (correlation.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "In DiracCovarianceModel::setSpatialCorrelation, correlation matrix should be of dimension " << dimension_ << ", here, matrix's dimension = " << correlation.getDimension(); spatialCorrelation_ = correlation; computeCovariance(); } /* Is it a stationary model ? */ Bool DiracCovarianceModel::isStationary() const { return true; } /* String converter */ String DiracCovarianceModel::__repr__() const { OSS oss; oss << "class=" << DiracCovarianceModel::GetClassName() << ", amplitude=" << amplitude_ << ", spatialCorrelation=" << spatialCorrelation_; return oss; } /* String converter */ String DiracCovarianceModel::__str__(const String & offset) const { OSS oss; oss << DiracCovarianceModel::GetClassName(); oss << "(t)=" << spatialCovariance_.__str__() << " * t==" << Point(spatialDimension_, 0.0).__str__(); return oss; } /* Method save() stores the object through the StorageManager */ void DiracCovarianceModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute("covarianceFactor_", covarianceFactor_); } /* Method load() reloads the object from the StorageManager */ void DiracCovarianceModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); adv.loadAttribute("covarianceFactor_", covarianceFactor_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ExponentialCauchy.cxx000066400000000000000000000055431307543307100227230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ExponentialCauchy.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/AbsoluteExponential.hxx" #include "openturns/CauchyModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExponentialCauchy */ CLASSNAMEINIT(ExponentialCauchy); static const Factory Factory_ExponentialCauchy; /* Constructor with parameters */ ExponentialCauchy::ExponentialCauchy() : SecondOrderModelImplementation(AbsoluteExponential(), CauchyModel()) { // Nothing to do } ExponentialCauchy::ExponentialCauchy(const Point & scale, const Point & amplitude) : SecondOrderModelImplementation(AbsoluteExponential(scale, amplitude), CauchyModel(scale, amplitude)) { // Nothing to do } /* Virtual constructor */ ExponentialCauchy * ExponentialCauchy::clone() const { return new ExponentialCauchy(*this); } /* String converter */ String ExponentialCauchy::__repr__() const { OSS oss(true); oss << "class=" << ExponentialCauchy::GetClassName() << " derived from " << SecondOrderModelImplementation::__repr__(); return oss; } /* String converter */ String ExponentialCauchy::__str__(const String & offset) const { OSS oss(false); oss << offset << "class=" << ExponentialCauchy::GetClassName(); oss << " amplitude=" << getAmplitude() << " scale=" << getScale(); return oss; } /* Amplitude accessor */ Point ExponentialCauchy::getAmplitude() const { return static_cast(covarianceModel_.getImplementation().get())->getAmplitude(); } /* Scale accessor */ Point ExponentialCauchy::getScale() const { return static_cast(covarianceModel_.getImplementation().get())->getScale(); } /* Method save() stores the object through the StorageManager */ void ExponentialCauchy::save(Advocate & adv) const { SecondOrderModelImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void ExponentialCauchy::load(Advocate & adv) { SecondOrderModelImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ExponentialModel.cxx000066400000000000000000000210631307543307100225420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ExponentialModel.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExponentialModel */ CLASSNAMEINIT(ExponentialModel); static const Factory Factory_ExponentialModel; /* Constructor from spatial dimension */ ExponentialModel::ExponentialModel(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(spatialDimension) { // Nothing to do } /** Standard constructor with scale and amplitude parameters parameters */ ExponentialModel::ExponentialModel(const Point & scale, const Point & amplitude) : StationaryCovarianceModel(scale, amplitude) { // Nothing to do } /** Standard constructor with scale, amplitude and spatial correlation parameters parameters */ ExponentialModel::ExponentialModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation) : StationaryCovarianceModel(scale, amplitude, spatialCorrelation) { // Nothing to do } /** Standard constructor with scale and spatial covariance parameters parameters */ ExponentialModel::ExponentialModel(const Point & scale, const CovarianceMatrix & spatialCovariance) : StationaryCovarianceModel(scale, spatialCovariance) { // Nothing to do } /* Virtual constructor */ ExponentialModel * ExponentialModel::clone() const { return new ExponentialModel(*this); } /* Computation of the covariance function, stationary interface * C_{i,j}(tau) = amplitude_i * R_{i,j} * amplitude_j * exp(-|tau / scale|) * C_{i,i}(tau) = amplitude_i^2 * exp(-|tau / scale|) */ Scalar ExponentialModel::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In ExponentialModel::computeStandardRepresentative: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); // Absolute value of tau / scale Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar tauOverThetaNorm = tauOverTheta.norm(); // Return value return (tauOverThetaNorm == 0.0 ? 1.0 + nuggetFactor_ : exp(- tauOverThetaNorm )); } /** Gradient */ Matrix ExponentialModel::partialGradient(const Point & s, const Point & t) const { /* Computation of the gradient * dC_{i,j}(tau)/dtau_k = C_{i,j} * (-\frac{1}{2 * scale_i} -\frac{1}{2 * scale_j}) * factor, with factor = tau_k / absTau Note that if spatial dimesnion is 1, factor = sgn(tau_k) */ if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "ExponentialModel::partialGradient, the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "ExponentialModel::partialGradient, the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const Point tau(s - t); const Scalar absTau = tau.norm(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar absTauOverTheta = tauOverTheta.norm(); // TODO check if (absTau == 0) throw InvalidArgumentException(HERE) << "ExponentialModel::partialGradient, the points t and s are equal. Covariance model has no derivate for that case."; // Covariance matrix write S * rho(tau), so gradient writes Sigma * grad(rho) where * is a 'dot', // i.e. dC/dk= Sigma_{i,j} * drho/dk CovarianceMatrix covariance(operator()(tau)); // symmetrize if not diagonal if (!isDiagonal_) covariance.getImplementation()->symmetrize(); Point covariancePoint(*covariance.getImplementation()); // Compute the gradient part (gradient of rho) Point factor(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) { if ((spatialDimension_ == 1.0) && (tau[i] < 0)) factor[i] = 1.0 / scale_[i] ; else if ((spatialDimension_ == 1.0) && (tau[i] > 0)) factor[i] = -1.0 / scale_[i]; // General case else factor[i] = -1.0 * tau[i] / (absTauOverTheta * scale_[i] * scale_[i]); } // Finally assemble the final matrix Matrix gradient(spatialDimension_, covariancePoint.getDimension()); for (UnsignedInteger j = 0; j < covariancePoint.getDimension(); ++ j) for (UnsignedInteger i = 0; i < spatialDimension_; ++i) gradient(i, j) = covariancePoint[j] * factor[i]; return gradient; } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix ExponentialModel::discretize(const RegularGrid & timeGrid) const { const UnsignedInteger size = timeGrid.getN(); const UnsignedInteger fullSize = size * dimension_; const Scalar timeStep = timeGrid.getStep(); CovarianceMatrix cov(fullSize); // The stationary property of this model allows to optimize the discretization // over a regular time grid: the large covariance matrix is block-diagonal // Fill the matrix by block-diagonal // The main diagonal has a specific treatment as only its lower triangular part // has to be copied const CovarianceMatrix covTau0( operator()( 0.0 ) ); // Loop over the main diagonal block for (UnsignedInteger block = 0; block < size; ++block) { const UnsignedInteger base = block * dimension_; // Copy of the lower triangle only for (UnsignedInteger i = 0; i < dimension_; ++i) { // The diagonal part cov( base + i, base + i ) = covTau0(i, i); // The lower off-diagonal part if needed if (!isDiagonal_) for (UnsignedInteger j = 0; j < i; ++j) cov( base + i, base + j ) = covTau0(i, j); } // Lower triangle } // block // Loop over the remaining diagonal blocks for (UnsignedInteger diag = 1; diag < size; ++diag) { const CovarianceMatrix covTau( operator()( diag * timeStep ) ); // Loop over the main block diagonal for (UnsignedInteger block = 0; block < size - diag; ++block) { const UnsignedInteger base = block * dimension_; const UnsignedInteger baseDiag = (block + diag) * dimension_; // Copy of the full block for (UnsignedInteger i = 0; i < dimension_; ++i) { // The diagonal part cov(base + i, baseDiag + i) = covTau(i, i); // The off-diagonal part if needed if (!isDiagonal_) { for (UnsignedInteger j = 0; j < i; ++j) cov(base + i, baseDiag + j) = covTau(i, j); for (UnsignedInteger j = i + 1; j < dimension_; ++j) cov(base + i, baseDiag + j) = covTau(i, j); } // Off-diagonal } // Full block } // block } // Off-diagonal blocks return cov; } /* String converter */ String ExponentialModel::__repr__() const { OSS oss(true); oss << "class=" << ExponentialModel::GetClassName(); oss << " scale=" << getScale() << " amplitude=" << getAmplitude() << " spatial correlation=" << getSpatialCorrelation() << " isDiagonal=" << isDiagonal(); return oss; } /* String converter */ String ExponentialModel::__str__(const String & offset) const { OSS oss(false); oss << ExponentialModel::GetClassName(); oss << "(scale=" << getScale() << ", amplitude=" << getAmplitude(); if (!isDiagonal_) oss << ", spatial correlation=\n" << getSpatialCorrelation().__str__(offset); else oss << ", no spatial correlation"; oss << ")"; return oss; } void ExponentialModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); } /* Method load() reloads the object from the StorageManager */ void ExponentialModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ExponentiallyDampedCosineModel.cxx000066400000000000000000000143021307543307100253610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ExponentiallyDampedCosineModel.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExponentiallyDampedCosineModel */ CLASSNAMEINIT(ExponentiallyDampedCosineModel); static const Factory Factory_ExponentiallyDampedCosineModel; /* Constructor from spatial dimension */ ExponentiallyDampedCosineModel::ExponentiallyDampedCosineModel(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(spatialDimension) , frequency_(1.0) { } /** Standard constructor with amplitude and scale parameters */ ExponentiallyDampedCosineModel::ExponentiallyDampedCosineModel(const Point & scale, const Point & amplitude, const Scalar frequency) : StationaryCovarianceModel(scale, amplitude) , frequency_(0.0) { if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Error: the output dimension must be 1, here dimension=" << dimension_; setFrequency(frequency); } /* Virtual constructor */ ExponentiallyDampedCosineModel * ExponentiallyDampedCosineModel::clone() const { return new ExponentiallyDampedCosineModel(*this); } /* Computation of the covariance function, stationary interface * C_{0,0}(tau) = amplitude_ * exp(-|tau / scale_|) * cos(2 * pi * frequency_ * |tau / scale|) */ CovarianceMatrix ExponentiallyDampedCosineModel::operator() (const Point & tau) const { CovarianceMatrix covarianceMatrix(dimension_); covarianceMatrix(0, 0) = computeAsScalar(tau); return covarianceMatrix; } Scalar ExponentiallyDampedCosineModel::computeAsScalar(const Point & tau) const { return amplitude_[0] * computeStandardRepresentative(tau); } Scalar ExponentiallyDampedCosineModel::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In ExponentiallyDampedCosineModel::computeStandardRepresentative: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar absTau = tauOverTheta.norm(); if (absTau <= SpecFunc::ScalarEpsilon) return 1.0 + nuggetFactor_; return exp(-absTau) * cos(2.0 * M_PI * absTau); } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix ExponentiallyDampedCosineModel::discretize(const RegularGrid & timeGrid) const { const UnsignedInteger size = timeGrid.getN(); const UnsignedInteger fullSize = size * dimension_; const Scalar timeStep = timeGrid.getStep(); CovarianceMatrix cov(fullSize); // The stationary property of this model allows to optimize the discretization // over a regular time grid: the large covariance matrix is block-diagonal // Fill the matrix by block-diagonal // The main diagonal has a specific treatment as only its lower triangular part // has to be copied for (UnsignedInteger diag = 0; diag < size; ++diag) { const Scalar covTau = computeAsScalar(Point(1, diag * timeStep)); for (UnsignedInteger i = 0; i < size - diag; ++i) cov(i, i + diag) = covTau; } return cov; } /* Is it a stationary model ? */ Bool ExponentiallyDampedCosineModel::isStationary() const { return true; } /* String converter */ String ExponentiallyDampedCosineModel::__repr__() const { OSS oss(true); oss << "class=" << ExponentiallyDampedCosineModel::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_ << " frequency=" << frequency_; return oss; } /* String converter */ String ExponentiallyDampedCosineModel::__str__(const String & offset) const { OSS oss(false); oss << "class=" << ExponentiallyDampedCosineModel::GetClassName() << "(scale=" << scale_ << ", amplitude=" << amplitude_ << ", frequency=" << frequency_ << ")"; return oss; } /* Frequency accessor */ void ExponentiallyDampedCosineModel::setFrequency(const Scalar frequency) { if (!(frequency > 0.0)) throw InvalidArgumentException(HERE) << "Error: the frequency must be positive."; frequency_ = frequency; } Scalar ExponentiallyDampedCosineModel::getFrequency() const { return frequency_; } void ExponentiallyDampedCosineModel::setFullParameter(const Point & parameter) { CovarianceModelImplementation::setFullParameter(parameter); setFrequency(parameter[parameter.getSize() - 1]); } Point ExponentiallyDampedCosineModel::getFullParameter() const { // Get the generic parameter Point parameter(CovarianceModelImplementation::getFullParameter()); // Add the specific one parameter.add(frequency_); return parameter; } Description ExponentiallyDampedCosineModel::getFullParameterDescription() const { // Description of the generic parameter Description description(CovarianceModelImplementation::getFullParameterDescription()); // Description of the specific parameter description.add("frequency"); return description; } /* Method save() stores the object through the StorageManager */ void ExponentiallyDampedCosineModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute( "frequency_", frequency_); } /* Method load() reloads the object from the StorageManager */ void ExponentiallyDampedCosineModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); adv.loadAttribute( "frequency_", frequency_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/FaureSequence.cxx000066400000000000000000000151131307543307100220250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Faure' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/FaureSequence.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FaureSequence); /* Constructor with parameters */ FaureSequence::FaureSequence(const UnsignedInteger dimension) : LowDiscrepancySequenceImplementation(dimension) { initialize(dimension); } /* Virtual constructor */ FaureSequence * FaureSequence::clone() const { return new FaureSequence(*this); } /* Initialize the sequence */ void FaureSequence::initialize(const UnsignedInteger dimension) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Dimension must be > 0."; dimension_ = dimension; modulus_ = ComputeNextPrimeNumber(dimension); modulusInverse_ = 1.0 / modulus_; // Initialize the seed at a value large enough to avoid some of the correlation problems seed_ = ResourceMap::GetAsUnsignedInteger("FaureSequence-InitialSeed"); // Number of digits of seed_ in base modulus_ logSeed_ = 1; // Seed bound seedBound_ = modulus_; while (seedBound_ < seed_) { ++logSeed_; seedBound_ *= modulus_; } // Binomial coefficients modulo the modulus associated withthe current value of the seed computeInitialBinomialCoefficients(); } /* Generate a pseudo-random vector of independant numbers uniformly distributed over [0, 1[ */ Point FaureSequence::generate() const { Point realization(dimension_); // First, compute the decomposition of seed_ in base modulus_ Unsigned64BitsIntegerCollection aI(logSeed_); UnsignedInteger n = seed_; for (UnsignedInteger i = 0; i < logSeed_; ++i) { aI[i] = n % modulus_; n /= modulus_; } // Stores the first component of the point Scalar xI = 0.0; Scalar factor = modulusInverse_; for (UnsignedInteger i = 0; i < logSeed_; ++i) { xI += aI[i] * factor; factor *= modulusInverse_; } realization[0] = xI; // Loop over the dimensions for (UnsignedInteger i = 1; i < dimension_; ++i) { // Compute the new digits as a matrix/vector multiply using uint64_t Unsigned64BitsIntegerCollection aINew(logSeed_); for (UnsignedInteger j = 0; j < logSeed_; ++j) { Unsigned64BitsInteger aINewJ = 0; // We perform the reduction modulo modulus_ in order to avoid integer overflow as much as possible for (UnsignedInteger k = j; k < logSeed_; ++k) aINewJ = (aINewJ + coefficients_[j + (k * (k + 1)) / 2] * aI[k]) % modulus_; aINew[j] = aINewJ; } // Compute the current component Scalar xJ = 0.0; factor = modulusInverse_; for (UnsignedInteger j = 0; j < logSeed_; ++j) { xJ += aINew[j] * factor; factor *= modulusInverse_; } realization[i] = xJ; aI = aINew; } // Loop over the dimension ++seed_; // Check if the seed has cross its upper bound if (seed_ == seedBound_) { seedBound_ *= modulus_; ++logSeed_; updateBinomialCoefficients(); } return realization; } /* String converter */ String FaureSequence::__repr__() const { OSS oss; oss << "class=" << FaureSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__repr__() << " modulus=" << modulus_ << " seed=" << seed_; return oss; } /* Compute the initial binomial coefficients table associated with the modulus */ void FaureSequence::computeInitialBinomialCoefficients() { // The coefficients C(n, k) = n! / (k! (n-k)!) mod modulus for 0<= n < logSeed, 0<= k <= n, are // stored column-wise in a flat array: // C(n, k) = n! / (k! (n - k)!) is at position (k, n) with flat index n + k(k + 1) / 2 coefficients_ = Unsigned64BitsIntegerCollection((logSeed_ * (logSeed_ + 1)) / 2, 1); // Main part of the array UnsignedInteger currentIndex = 4; UnsignedInteger previousIndex1 = 2; UnsignedInteger previousIndex2 = 1; for(UnsignedInteger n = 2; n < logSeed_; ++n) { for (UnsignedInteger k = 1; k < n; ++k) { // coeff(k, n) = coeff(k, n-1) + coeff(k-1, n-1) coefficients_[currentIndex] = (coefficients_[previousIndex1] + coefficients_[previousIndex2]) % modulus_; ++currentIndex; ++previousIndex1; ++previousIndex2; } // loop over the columns // Skip the 1's on the diagonal currentIndex += 2; ++previousIndex1; ++previousIndex2; } // loop over the rows } /* Update the binomial coefficients table by adding one column to the triangular array */ void FaureSequence::updateBinomialCoefficients() const { // Here, we assume that the coefficient table has already been initialized and stores the values associated with logSeed-1 UnsignedInteger previousIndex2 = coefficients_.getSize() - logSeed_ + 1; UnsignedInteger previousIndex1 = previousIndex2 + 1; coefficients_.add(1); for (UnsignedInteger k = 2; k < logSeed_; ++k) { coefficients_.add((coefficients_[previousIndex1] + coefficients_[previousIndex2]) % modulus_); ++previousIndex1; ++previousIndex2; } coefficients_.add(1); } void FaureSequence::save(Advocate & adv) const { LowDiscrepancySequenceImplementation::save(adv); adv.saveAttribute( "coefficients_", coefficients_); adv.saveAttribute( "modulus_", modulus_); adv.saveAttribute( "modulusInverse_", modulusInverse_); adv.saveAttribute( "seed_", seed_); adv.saveAttribute( "seedBound_", seedBound_); adv.saveAttribute( "logSeed_", logSeed_); } /* Method load() reloads the object from the StorageManager */ void FaureSequence::load(Advocate & adv) { LowDiscrepancySequenceImplementation::load(adv); initialize(dimension_); adv.loadAttribute( "coefficients_", coefficients_); adv.loadAttribute( "modulus_", modulus_); adv.loadAttribute( "modulusInverse_", modulusInverse_); adv.loadAttribute( "seed_", seed_); adv.loadAttribute( "seedBound_", seedBound_); adv.loadAttribute( "logSeed_", logSeed_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Field.cxx000066400000000000000000000166611307543307100203260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Field implements samples indexed by a position * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Field); /* Default constructor */ Field::Field() : TypedInterfaceObject(FieldImplementation().clone()) { // Nothing to do } /* Constructor from implementation */ Field::Field(const FieldImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ Field::Field(const Implementation & implementation) : TypedInterfaceObject(implementation) { // Nothing to do } /* Constructor from a TimeGrid and a dimension */ Field::Field(const Mesh & mesh, const UnsignedInteger dim) : TypedInterfaceObject(new FieldImplementation(mesh, dim)) { // Nothing to do } /* Constructor from a TimeGrid and a sample */ Field::Field(const Mesh & mesh, const Sample & sample) : TypedInterfaceObject(new FieldImplementation(mesh, sample)) { // Nothing to do } /* Comparison operator */ Bool Field::operator ==(const Field & other) const { return *getImplementation() == *(other.getImplementation()); } /* Individual value accessor */ NSI_point Field::operator[](const UnsignedInteger index) { copyOnWrite(); return getImplementation()->operator[](index); } NSI_const_point Field::operator[](const UnsignedInteger index) const { return getImplementation()->operator[](index); } Scalar & Field::operator () (const UnsignedInteger i, const UnsignedInteger j) { #ifdef DEBUG_BOUNDCHECKING // No copyOnWrite() as the at() method already do it return this->at(i, j); #else copyOnWrite(); return (*getImplementation())[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } const Scalar & Field::operator () (const UnsignedInteger i, const UnsignedInteger j) const { #ifdef DEBUG_BOUNDCHECKING return this->at(i, j); #else return (*getImplementation())[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } NSI_point Field::at (const UnsignedInteger index) { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; copyOnWrite(); return (*getImplementation())[index]; } NSI_const_point Field::at (const UnsignedInteger index) const { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; return (*getImplementation())[index]; } Scalar & Field::at (const UnsignedInteger i, const UnsignedInteger j) { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") is not less than size (" << getSize() << ")"; if (j > getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") is greater than dimension (" << getDimension() << ")"; copyOnWrite(); return (*getImplementation())[i][j]; } const Scalar & Field::at (const UnsignedInteger i, const UnsignedInteger j) const { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") is not less than size (" << getSize() << ")"; if (j > getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") is greater than dimension (" << getDimension() << ")"; return (*getImplementation())[i][j]; } /* Values accessor */ Point Field::getValueAtIndex(const UnsignedInteger index) const { return getImplementation()->getValueAtIndex(index); } void Field::setValueAtIndex(const UnsignedInteger index, const Point & val) { copyOnWrite(); getImplementation()->setValueAtIndex(index, val); } Point Field::getValueAtNearestPosition(const Point & position) const { return getImplementation()->getValueAtNearestPosition(position); } void Field::setValueAtNearestPosition(const Point & position, const Point & val) { copyOnWrite(); getImplementation()->setValueAtNearestPosition(position, val); } Mesh Field::getMesh() const { return getImplementation()->getMesh(); } RegularGrid Field::getTimeGrid() const { return getImplementation()->getTimeGrid(); } /* String converter */ String Field::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " description=" << getDescription() << " implementation=" << getImplementation()->__repr__(); } String Field::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Description accessor */ void Field::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } /* Description accessor */ Description Field::getDescription() const { return getImplementation()->getDescription(); } /* Size accessor */ UnsignedInteger Field::getSize() const { return getImplementation()->getSize(); } /* Dimension accessor */ UnsignedInteger Field::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } UnsignedInteger Field::getDimension() const { return getImplementation()->getDimension(); } /* Return the values stored in the field as a sample */ Sample Field::getSample() const { return getImplementation()->getSample(); } Sample Field::getValues() const { return getImplementation()->getValues(); } void Field::setValues(const Sample & values) { getImplementation()->setValues(values); } /* Get the i-th marginal field */ Field Field::getMarginal(const UnsignedInteger index) const { return getImplementation()->getMarginal(index); } /* Get the marginal field corresponding to indices dimensions */ Field Field::getMarginal(const Indices & indices) const { return getImplementation()->getMarginal(indices); } /* Return the field as a defomed mesh, ie its values are added to the components of the vertices if the dimensions match */ Mesh Field::asDeformedMesh() const { return getImplementation()->asDeformedMesh(); } /* Compute the spatial mean of the field */ Point Field::getSpatialMean() const { return getImplementation()->getSpatialMean(); } /* Compute the temporal mean of the field */ Point Field::getTemporalMean() const { return getImplementation()->getTemporalMean(); } /* Draw a marginal of the field */ Graph Field::drawMarginal(const UnsignedInteger index, const Bool interpolate) const { return getImplementation()->drawMarginal(index, interpolate); } Graph Field::draw() const { return getImplementation()->draw(); } /* VTK export */ void Field::exportToVTKFile(const String & fileName) const { return getImplementation()->exportToVTKFile(fileName); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/FieldImplementation.cxx000066400000000000000000000561601307543307100232320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class FieldImplementation implements values indexed by * the vertices of a Mesh * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/OTconfig.hxx" #include "openturns/FieldImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Path.hxx" #include "openturns/Cloud.hxx" #include "openturns/Curve.hxx" #include "openturns/PolygonArray.hxx" #include "openturns/Os.hxx" #include "openturns/PlatformInfo.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Sample; CLASSNAMEINIT(FieldImplementation); static const Factory Factory_FieldImplementation; /* Default constructor is private */ FieldImplementation::FieldImplementation() : PersistentObject() , mesh_() , values_(mesh_.getVerticesNumber(), 0) , description_(mesh_.getDescription()) , spatialMean_(0) , isAlreadyComputedSpatialMean_(false) { // Nothing to do } /* Standard constructor */ FieldImplementation::FieldImplementation(const Mesh & mesh, const UnsignedInteger dim) : PersistentObject() , mesh_(mesh) , values_(mesh.getVerticesNumber(), dim) , description_(0) , spatialMean_(dim) , isAlreadyComputedSpatialMean_(false) { // Build the default description Description description(mesh_.getVertices().getDescription()); description.add(values_.getDescription()); setDescription(description); } /* Constructor from a Mesh and a sample */ FieldImplementation::FieldImplementation(const Mesh & mesh, const Sample & values) : PersistentObject() , mesh_(mesh) , values_(values) , description_() , spatialMean_(values.getDimension()) , isAlreadyComputedSpatialMean_(false) { if (mesh.getVerticesNumber() != values.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot build a Field with a number of values=" << values.getSize() << " different from the number of vertices=" << mesh.getVerticesNumber(); Description description(mesh_.getVertices().getDescription()); description.add(values_.getDescription()); setDescription(description); } /* Virtual constructor */ FieldImplementation * FieldImplementation::clone() const { return new FieldImplementation(*this); } /* Size accessor */ UnsignedInteger FieldImplementation::getSize() const { return values_.getSize(); } /* Dimension accessor */ UnsignedInteger FieldImplementation::getSpatialDimension() const { return mesh_.getDimension(); } UnsignedInteger FieldImplementation::getDimension() const { return values_.getDimension(); } /* Mesh accessor */ Mesh FieldImplementation::getMesh() const { return mesh_; } RegularGrid FieldImplementation::getTimeGrid() const { return mesh_; } /* Individual value accessor */ NSI_point FieldImplementation::operator[](const UnsignedInteger index) { isAlreadyComputedSpatialMean_ = false; return values_[index]; } NSI_const_point FieldImplementation::operator[](const UnsignedInteger index) const { return values_[index]; } Scalar & FieldImplementation::operator () (const UnsignedInteger i, const UnsignedInteger j) { isAlreadyComputedSpatialMean_ = false; #ifdef DEBUG_BOUNDCHECKING // No copyOnWrite() as the at() method already do it return at(i, j); #else return (*this)[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } const Scalar & FieldImplementation::operator () (const UnsignedInteger i, const UnsignedInteger j) const { #ifdef DEBUG_BOUNDCHECKING return at(i, j); #else return (*this)[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } NSI_point FieldImplementation::at (const UnsignedInteger index) { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; isAlreadyComputedSpatialMean_ = false; return (*this)[index]; } NSI_const_point FieldImplementation::at (const UnsignedInteger index) const { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; return (*this)[index]; } Scalar & FieldImplementation::at (const UnsignedInteger i, const UnsignedInteger j) { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") is not less than size (" << getSize() << ")"; if (j >= getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") is not less than dimension (" << getDimension() << ")"; isAlreadyComputedSpatialMean_ = false; return (*this)[i][j]; } const Scalar & FieldImplementation::at (const UnsignedInteger i, const UnsignedInteger j) const { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") is not less than size (" << getSize() << ")"; if (j >= getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") is not less than dimension (" << getDimension() << ")"; return (*this)[i][j]; } /* Data accessors */ Point FieldImplementation::getValueAtIndex(const UnsignedInteger index) const { return values_[index]; } void FieldImplementation::setValueAtIndex(const UnsignedInteger index, const Point & val) { isAlreadyComputedSpatialMean_ = false; values_[index] = val; } Point FieldImplementation::getValueAtNearestPosition(const Point & position) const { return values_[mesh_.getNearestVertexIndex(position)]; } void FieldImplementation::setValueAtNearestPosition(const Point & position, const Point & val) { isAlreadyComputedSpatialMean_ = false; values_[mesh_.getNearestVertexIndex(position)] = val; } Point FieldImplementation::getValueAtNearestTime(const Scalar timestamp) const { return getValueAtNearestPosition(Point(1, timestamp)); } void FieldImplementation::setValueAtNearestTime(const Scalar timestamp, const Point & val) { isAlreadyComputedSpatialMean_ = false; setValueAtNearestPosition(Point(1, timestamp), val); } /* Get the i-th marginal field */ FieldImplementation FieldImplementation::getMarginal(const UnsignedInteger index) const { return FieldImplementation(mesh_, values_.getMarginal(index)); } /* Get the marginal field corresponding to indices dimensions */ FieldImplementation FieldImplementation::getMarginal(const Indices & indices) const { return FieldImplementation(mesh_, values_.getMarginal(indices)); } /* Description Accessor */ void FieldImplementation::setDescription(const Description & description) { if (description.getSize() != (getSpatialDimension() + getDimension())) throw InvalidArgumentException(HERE) << "Error: the given description does not match the field input+output dimension."; description_ = description; } /* Description Accessor */ Description FieldImplementation::getDescription() const { return description_; } /* Comparison function */ Bool FieldImplementation::operator ==(const FieldImplementation & other) const { if (this == &other) return true; return (mesh_ == other.mesh_) && (values_ == other.values_); } /* String converter */ String FieldImplementation::__repr__() const { OSS oss(true); oss << "class=" << FieldImplementation::GetClassName() << " name=" << getName() << " mesh=" << mesh_ << " values=" << values_; return oss; } String FieldImplementation::__str__(const String & offset) const { Sample data(mesh_.getVertices()); data.stack(values_); return data.__str__(offset); } /* TBB functor to speed-up spatial mean computation */ struct FieldSpatialMeanFunctor { const FieldImplementation & field_; Scalar volumeAccumulator_; Point accumulator_; FieldSpatialMeanFunctor(const FieldImplementation & field) : field_(field), volumeAccumulator_(0.0), accumulator_(field.getDimension(), 0.0) {} FieldSpatialMeanFunctor(const FieldSpatialMeanFunctor & other, TBB::Split) : field_(other.field_), volumeAccumulator_(0.0), accumulator_(other.field_.getDimension(), 0.0) {} void operator() (const TBB::BlockedRange & r) { const UnsignedInteger meshDimension = field_.getSpatialDimension(); const UnsignedInteger dimension = field_.getDimension(); for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const Scalar volume = field_.mesh_.computeSimplexVolume(i); const Indices simplex(field_.mesh_.getSimplex(i)); Point meanValue(dimension, 0.0); for (UnsignedInteger j = 0; j <= meshDimension; ++j) meanValue += field_.values_[simplex[j]]; volumeAccumulator_ += volume; accumulator_ += (volume / dimension) * meanValue; } } void join(const FieldSpatialMeanFunctor & other) { volumeAccumulator_ += other.volumeAccumulator_; accumulator_ += other.accumulator_; } }; /* end struct FieldSpatialMeanFunctor */ /* Compute the spatial mean of the field */ void FieldImplementation::computeSpatialMean() const { FieldSpatialMeanFunctor functor( *this ); TBB::ParallelReduce( 0, mesh_.getSimplicesNumber(), functor ); if (functor.volumeAccumulator_ == 0.0) throw InternalException(HERE) << "Error: cannot compute the spatial mean of a field supported by a mesh of zero volume."; spatialMean_ = functor.accumulator_ / functor.volumeAccumulator_; isAlreadyComputedSpatialMean_ = true; } /* Compute the spatial mean of the field */ Point FieldImplementation::getSpatialMean() const { if (!isAlreadyComputedSpatialMean_) computeSpatialMean(); return spatialMean_; } /* Compute the spatial mean of the field */ Point FieldImplementation::getTemporalMean() const { if (!mesh_.isRegular() || (mesh_.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the temporal mean is defined only when the mesh is regular and of dimension 1."; return values_.computeMean(); } /* Return the values stored in the field as a sample */ Sample FieldImplementation::getSample() const { return values_; } Sample FieldImplementation::getValues() const { return values_; } void FieldImplementation::setValues(const Sample & values) { if (values.getSize() != mesh_.getVerticesNumber()) throw InvalidArgumentException(HERE) << "Error: expected a sample of size=" << mesh_.getVerticesNumber() << ", got size=" << values.getSize(); values_ = values; } /* Return the field as a sample, ie its values and positions */ Sample FieldImplementation::asSample() const { Sample data(mesh_.getVertices()); data.stack(values_); return data; } /* Return the field as a defomed mesh, ie its values are added to the components of the vertices if the dimensions match */ Mesh FieldImplementation::asDeformedMesh() const { if (getDimension() != getSpatialDimension()) throw InternalException(HERE) << "Error: cannot deform the mesh if the dimension of the values=" << values_.getDimension() << " does not match the mesh dimension=" << getSpatialDimension(); Sample data(mesh_.getVertices()); data += values_; return Mesh(data, mesh_.getSimplices()); } /* Draw a marginal of the Field */ Graph FieldImplementation::draw() const { // Specific drawing method for bidimensional fields indexed by a scalar if ((getSpatialDimension() == 1) && (getDimension() == 2)) { const String title(OSS() << getName()); Graph graph(title, description_[0], description_[1], true, ""); const Curve curveSerie(getValues()); graph.add(curveSerie); return graph; } // Specific drawing method for bidimensional fields indexed by a 2d-point if ((getSpatialDimension() == 2) && (getDimension() == 2)) { const String title(OSS() << getName()); Graph graph(title, description_[0], description_[1], true, ""); // Get the bounding box of the mesh to set the head size of the arrow // It must be independent from the values as we want the same size for // all the arrows const Sample vertices(mesh_.getVertices()); const Point xMin(vertices.getMin()); const Point xMax(vertices.getMax()); const Scalar delta = std::min(xMax[0] - xMin[0], xMax[1] - xMin[1]) * ResourceMap::GetAsScalar("Field-ArrowRatio"); const Scalar rho = ResourceMap::GetAsScalar("Field-ArrowScaling"); const UnsignedInteger size = values_.getSize(); Sample normValues(size, 1); for (UnsignedInteger i = 0; i < size; ++i) normValues[i][0] = Point(values_[i]).norm(); Scalar normMin = normValues.getMin()[0]; Scalar normMax = normValues.getMax()[0]; if (normMax == normMin) normMax = normMin + 1.0; const UnsignedInteger levelsNumber = ResourceMap::GetAsUnsignedInteger("Field-LevelNumber"); Description palette(levelsNumber); for (UnsignedInteger i = 0; i < levelsNumber; ++i) palette[i] = Curve::ConvertFromHSV((270.0 * (levelsNumber - i - 1)) / levelsNumber, 1.0, 1.0); for (UnsignedInteger i = 0; i < values_.getSize(); ++i) { const Point x(vertices[i]); Point v(values_[i]); Scalar arrowLength = v.norm(); const UnsignedInteger paletteIndex = static_cast((levelsNumber - 0.5) * (arrowLength - normMin) / (normMax - normMin)); const String color = palette[paletteIndex]; v *= rho; arrowLength *= rho; // Draw the arrow head only if the arrow is large enough if (arrowLength > delta) { Sample data(6, 2); const Point u(v / arrowLength); data[0] = x; data[1] = x + v - u * delta; data[2][0] = data[1][0] + u[1] * (-0.5 * delta); data[2][1] = data[1][1] + u[0] * ( 0.5 * delta); data[3] = x + v; data[4][0] = data[1][0] + u[1] * ( 0.5 * delta); data[4][1] = data[1][1] + u[0] * (-0.5 * delta); data[5] = data[1]; Curve curve(data); curve.setColor(color); graph.add(curve); } // arrowLength > delta else { Sample data(2, 2); data[0] = x; data[1] = x + v; Curve curve(data); curve.setColor(color); graph.add(curve); } // arrowLength <= delta } // for i return graph; } return drawMarginal(0, false); } Graph FieldImplementation::drawMarginal(const UnsignedInteger index, const Bool interpolate) const { if (index >= getDimension() ) throw InvalidArgumentException(HERE) << "Error : indice should be between [0, " << getDimension() - 1 << "]"; const UnsignedInteger meshDimension = getSpatialDimension(); if (meshDimension > 2) throw NotYetImplementedException(HERE) << "In FieldImplementation::drawMarginal(const UnsignedInteger index, const Bool interpolate) const: cannot draw a Field of mesh dimension greater than 2. Try the export to VTK for higher dimension."; const Sample marginalValues(values_.getMarginal(index)); const String title(OSS() << getName() << " - " << index << " marginal" ); Graph graph(title, description_[0], "Values", true, "topright"); if (meshDimension == 1) { // Discretization of the x axis if (interpolate) { const Curve curveSerie(mesh_.getVertices(), marginalValues); graph.add(curveSerie); } else { Cloud cloudSerie(mesh_.getVertices(), marginalValues); cloudSerie.setPointStyle("bullet"); graph.add(cloudSerie); } } else if (meshDimension == 2) { graph.setYTitle(description_[1]); const UnsignedInteger levelsNumber = ResourceMap::GetAsUnsignedInteger("Field-LevelNumber"); if (interpolate) { // Compute the iso-values Point levels(levelsNumber); Description palette(levelsNumber); for (UnsignedInteger i = 0; i < levelsNumber; ++i) { const Scalar q = (i + 1.0) / (levelsNumber + 1.0); levels[i] = marginalValues.computeQuantile(q)[0]; palette[i] = Curve::ConvertFromHSV((270.0 * (levelsNumber - i - 1)) / levelsNumber, 1.0, 1.0); } // Loop over the simplices to draw the segments (if any) associated with the different levels const UnsignedInteger simplicesNumber = mesh_.getSimplicesNumber(); for (UnsignedInteger i = 0; i < simplicesNumber; ++i) { const Indices currentSimplex(mesh_.getSimplex(i)); UnsignedInteger i0 = currentSimplex[0]; UnsignedInteger i1 = currentSimplex[1]; UnsignedInteger i2 = currentSimplex[2]; Scalar v0 = marginalValues[i0][0]; Scalar v1 = marginalValues[i1][0]; Scalar v2 = marginalValues[i2][0]; // Sort the vertices such that v0 <= v1 <= v2 if (v0 > v1) { std::swap(v0, v1); std::swap(i0, i1); } if (v1 > v2) { std::swap(v1, v2); std::swap(i1, i2); } if (v0 > v1) { std::swap(v0, v1); std::swap(i0, i1); } // If the current simplex is constant, nothing to draw if (v0 == v2) continue; // For the current simplex, check all levels for (UnsignedInteger j = 0; j < levelsNumber; ++j) { const Scalar level = levels[j]; if ((level >= v0) && (level <= v2)) { const Point x0(mesh_.getVertex(i0)); const Point x1(mesh_.getVertex(i1)); const Point x2(mesh_.getVertex(i2)); Sample data(2, 2); // The first point is on the [x0, x2] segment as v0 <= level <= v2 and v0 < v2 data[0] = x0 + ((level - v0) / (v2 - v0)) * (x2 - x0); // if level <= v1, the second point is on the [x0, x1] segment if (level <= v1) { if (v1 == v0) data[1] = x1; else data[1] = x0 + ((level - v0) / (v1 - v0)) * (x1 - x0); } // if level >= v1, the second point is on the [x1, x2] segment else { if (v2 == v1) data[1] = x1; else data[1] = x2 + ((level - v2) / (v1 - v2)) * (x1 - x2); } graph.add(Curve(data, palette[j], "solid")); } // (level >= v0) && (level <= v2) } // j } // i // Simple colorbar const Scalar minValue = marginalValues.getMin()[0]; const Scalar maxValue = marginalValues.getMax()[0]; const Point xMin(mesh_.getVertices().getMin()); for (SignedInteger i = levelsNumber - 1; i >= 0; --i) { Cloud point(Sample(1, xMin)); point.setPointStyle("none"); point.setColor(palette[i]); if ((i == static_cast(levelsNumber) - 1) || (i == 0)) point.setLegend(String(OSS() << 0.001 * round(1000.0 * (minValue + i * (maxValue - minValue) / (levelsNumber - 1))))); else point.setLegend(" "); graph.add(point); } } // interpolate else { const UnsignedInteger size = marginalValues.getSize(); Description palette(size); for (UnsignedInteger i = 0; i < size; ++i) palette[i] = Curve::ConvertFromHSV((270.0 * (size - i - 1)) / size, 1.0, 1.0); const Scalar minValue = marginalValues.getMin()[0]; const Scalar maxValue = marginalValues.getMax()[0]; const UnsignedInteger simplicesNumber = mesh_.getSimplicesNumber(); if (simplicesNumber > 0) { Sample data(0, 2); Description colors(0); for (UnsignedInteger i = 0; i < simplicesNumber; ++i) { const Indices simplex(mesh_.getSimplex(i)); data.add(mesh_.getVertex(simplex[0])); data.add(mesh_.getVertex(simplex[1])); data.add(mesh_.getVertex(simplex[2])); const Scalar meanValue = (marginalValues[simplex[0]][0] + marginalValues[simplex[1]][0] + marginalValues[simplex[2]][0]) / 3.0; const String color(palette[static_cast(round((size - 1) * (meanValue - minValue) / (maxValue - minValue)))]); colors.add(color); } graph.add(PolygonArray(data, 3, colors)); graph.setGrid(false); } // Simplices else { for (UnsignedInteger i = 0; i < size; ++i) { Cloud point(Sample(1, mesh_.getVertex(i))); const String color(palette[static_cast(round((size - 1) * (marginalValues[i][0] - minValue) / (maxValue - minValue)))]); point.setColor(color); point.setPointStyle("bullet"); graph.add(point); } } // No simplex // Simple colorbar const Point xMin(mesh_.getVertices().getMin()); for (SignedInteger i = levelsNumber - 1; i >= 0; --i) { Cloud point(Sample(1, xMin)); point.setPointStyle("none"); point.setColor(palette[(i * (size - 1)) / (levelsNumber - 1)]); if ((i == static_cast(levelsNumber) - 1) || (i == 0)) point.setLegend(String(OSS() << 0.001 * round(1000.0 * (minValue + i * (maxValue - minValue) / (levelsNumber - 1))))); else point.setLegend(" "); graph.add(point); } } // !interpolate } // meshDimension == 2 return graph; } /* Method save() stores the object through the StorageManager */ void FieldImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "mesh_", mesh_); adv.saveAttribute( "values_", values_); adv.saveAttribute( "description_", description_); adv.saveAttribute( "spatialMean_", spatialMean_); adv.saveAttribute( "isAlreadyComputedSpatialMean_", isAlreadyComputedSpatialMean_); } /* Method load() reloads the object from the StorageManager */ void FieldImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "mesh_", mesh_); adv.loadAttribute( "values_", values_); adv.loadAttribute( "description_", description_); adv.loadAttribute( "spatialMean_", spatialMean_); adv.loadAttribute( "isAlreadyComputedSpatialMean_", isAlreadyComputedSpatialMean_); } /* Export to VTK file */ void FieldImplementation::exportToVTKFile(const String & fileName) const { std::ofstream file(fileName.c_str(), std::ios::out); if (!file) throw FileNotFoundException(HERE) << "Error: can't open file " << fileName; const String content(mesh_.streamToVTKFormat()); const UnsignedInteger oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(16); file << content << "\nPOINT_DATA " << getSize() << "\n"; for (UnsignedInteger i = 0; i < getDimension(); ++i) { String fieldName(getDescription()[getSpatialDimension() + i]); replace(fieldName.begin(), fieldName.end(), ' ', '~'); if (fieldName.size() == 0) fieldName = String(OSS() << "v_" << i); file << "SCALARS " << fieldName << " float\nLOOKUP_TABLE default\n"; for (UnsignedInteger j = 0; j < getSize(); ++j) file << values_[j][i] << "\n"; } PlatformInfo::SetNumericalPrecision(oldPrecision); file.close(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/FilteringWindows.cxx000066400000000000000000000046461307543307100226010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FilteringWindows.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Hamming.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FilteringWindows); /* Constructor with parameters */ FilteringWindows::FilteringWindows() : TypedInterfaceObject(new Hamming()) { // Nothing to do } /* Parameters constructor */ FilteringWindows::FilteringWindows(const FilteringWindowsImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ FilteringWindows::FilteringWindows(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ FilteringWindows::FilteringWindows(FilteringWindowsImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* functor - evaluation of filter using () */ Scalar FilteringWindows::operator()(const Scalar t) const { return getImplementation()->operator()(t); } /* String converter */ String FilteringWindows::__repr__() const { OSS oss(true); oss << "class=" << FilteringWindows::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String FilteringWindows::__str__(const String & offset) const { OSS oss(false); oss << "class=" << FilteringWindows::GetClassName() << " implementation=" << getImplementation()->__str__(offset); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/FilteringWindowsImplementation.cxx000066400000000000000000000045471307543307100255070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FilteringWindowsImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FilteringWindowsImplementation */ CLASSNAMEINIT(FilteringWindowsImplementation); static const Factory Factory_FilteringWindowsImplementation; /* Constructor without parameters */ FilteringWindowsImplementation::FilteringWindowsImplementation() : PersistentObject() { // Nothing to do } /* Virtual constructor */ FilteringWindowsImplementation * FilteringWindowsImplementation::clone() const { return new FilteringWindowsImplementation(*this); } Scalar FilteringWindowsImplementation::operator()(const Scalar t) const { throw NotYetImplementedException(HERE) << "In FilteringWindowsImplementation::operator()(const Scalar t) const"; } /* String converter */ String FilteringWindowsImplementation::__repr__() const { OSS oss(true); oss << "class= " << FilteringWindowsImplementation::GetClassName(); return oss; } /* String converter */ String FilteringWindowsImplementation::__str__(const String & offset) const { OSS oss(false); oss << "class= " << FilteringWindowsImplementation::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void FilteringWindowsImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void FilteringWindowsImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Full.cxx000066400000000000000000000034071307543307100201770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Full.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Full */ CLASSNAMEINIT(Full); static const Factory Factory_Full; /* Constructor with parameters */ Full::Full() : HistoryStrategyImplementation() { // Nothing to do } /* Virtual constructor */ Full * Full::clone() const { return new Full(*this); } /* Store the point according to the strategy */ void Full::store(const Point & point) { if (!isInitialized_) { sample_ = Sample(0, point.getDimension()); isInitialized_ = true; } sample_.add(point); } /* Store the sample according to the strategy */ void Full::store(const Sample & sample) { if (!isInitialized_) { sample_ = sample; isInitialized_ = true; } else sample_.add(sample); } /* String converter */ String Full::__repr__() const { OSS oss; oss << "class=" << Full::GetClassName(); oss << " sample_= " << sample_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/GeneralizedExponential.cxx000066400000000000000000000145461307543307100237430ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeneralizedExponential.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralizedExponential); static const Factory Factory_GeneralizedExponential; /* Default constructor */ GeneralizedExponential::GeneralizedExponential(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(Point(spatialDimension, ResourceMap::GetAsScalar("GeneralizedExponential-DefaultTheta")), Point(1, 1.0)) , p_(1.0) { // Nothing to do } /** Parameters constructor */ GeneralizedExponential::GeneralizedExponential(const Point & scale, const Scalar p) : StationaryCovarianceModel(scale, Point(1, 1.0)) , p_(0.0) // To pass the test !(p_ == p) { setP(p); } /** Parameters constructor */ GeneralizedExponential::GeneralizedExponential(const Point & scale, const Point & amplitude, const Scalar p) : StationaryCovarianceModel(scale, amplitude) , p_(0.0) // To pass the test !(p_ == p) { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "In GeneralizedExponential::GeneralizedExponential, only unidimensional models should be defined." << " Here, (got dimension=" << getDimension() << ")"; setP(p); } /* Virtual constructor */ GeneralizedExponential * GeneralizedExponential::clone() const { return new GeneralizedExponential(*this); } /* Computation of the covariance density function */ Scalar GeneralizedExponential::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar tauOverThetaNorm = tauOverTheta.norm(); return tauOverThetaNorm <= SpecFunc::ScalarEpsilon ? 1.0 + nuggetFactor_ : exp(-pow(tauOverThetaNorm, p_)); } /* Gradient wrt s */ Matrix GeneralizedExponential::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const Point tau(s - t); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar norm2 = tauOverTheta.normSquare(); // For zero norm if (norm2 == 0.0) { // Negative infinite gradient for p < 1 if (p_ < 1.0) return Matrix(spatialDimension_, 1, Point(spatialDimension_, -SpecFunc::MaxScalar)); // Non-zero gradient for p == 1 if (p_ == 1.0) { Matrix gradient(spatialDimension_, 1); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) gradient(i, 0) = - amplitude_[0] * amplitude_[0] / scale_[i]; return gradient; } // Zero gradient for p > 1 return Matrix(spatialDimension_, 1); } // General case const Scalar exponent = -std::pow(sqrt(norm2), p_); const Scalar value = p_ * exponent * std::exp(exponent) / norm2; // Needs tau/theta ==> reuse same NP for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] /= scale_[i]; return Matrix(spatialDimension_, 1, tauOverTheta * value) * amplitude_[0] * amplitude_[0]; } void GeneralizedExponential::setFullParameter(const Point & parameter) { CovarianceModelImplementation::setFullParameter(parameter); setP(parameter[parameter.getSize() - 1]); } Point GeneralizedExponential::getFullParameter() const { // Get the generic parameter Point parameter(CovarianceModelImplementation::getFullParameter()); // Add the specific one parameter.add(p_); return parameter; } Description GeneralizedExponential::getFullParameterDescription() const { // Description of the generic parameter Description description(CovarianceModelImplementation::getFullParameterDescription()); // Description of the specific parameter description.add("p"); return description; } /* String converter */ String GeneralizedExponential::__repr__() const { OSS oss; oss << "class=" << GeneralizedExponential::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_ << " p=" << p_; return oss; } /* String converter */ String GeneralizedExponential::__str__(const String & offset) const { OSS oss; oss << GeneralizedExponential::GetClassName() << "(scale=" << scale_.__str__() << ", amplitude=" << amplitude_.__str__() << ", p=" << p_ << ")"; return oss; } /* P accessor */ Scalar GeneralizedExponential::getP() const { return p_; } void GeneralizedExponential::setP(const Scalar p) { if (!(p > 0.0)) throw InvalidArgumentException(HERE) << "Error: p must be positive."; if (!(p <= 2.0)) throw InvalidArgumentException(HERE) << "Error: p must be less or equal to 2."; p_ = p; } /* Method save() stores the object through the StorageManager */ void GeneralizedExponential::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute("p_", p_); } /* Method load() reloads the object from the StorageManager */ void GeneralizedExponential::load(Advocate & adv) { StationaryCovarianceModel::load(adv); adv.loadAttribute("p_", p_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HMatrix.cxx000066400000000000000000000110601307543307100206430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HMatrix.hxx" #include "openturns/HMatrixImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HMatrix); /* Default constructor */ HMatrix::HMatrix() : TypedInterfaceObject(new HMatrixImplementation()) { // Nothing to do } /* Constructor with implementation */ HMatrix::HMatrix(const Implementation & i) : TypedInterfaceObject(i) { // Nothing to do } /* Constructor with implementation */ HMatrix::HMatrix(const HMatrixImplementation & i) : TypedInterfaceObject(i.clone()) { // Nothing to do } void HMatrix::assemble(const HMatrixRealAssemblyFunction& f, char symmetry) { copyOnWrite(); getImplementation()->assemble(f, symmetry); } void HMatrix::assemble(const HMatrixTensorRealAssemblyFunction& f, char symmetry) { copyOnWrite(); getImplementation()->assemble(f, symmetry); } void HMatrix::factorize(const String& method) { copyOnWrite(); getImplementation()->factorize(method); } /** Compute x <- alpha * this */ void HMatrix::scale(Scalar alpha) { copyOnWrite(); getImplementation()->scale(alpha); } /** Compute y <- alpha op(this) * x + beta * y */ void HMatrix::gemv(char trans, Scalar alpha, const Point& x, Scalar beta, Point& y) const { getImplementation()->gemv(trans, alpha, x, beta, y); } /** Compute this <- alpha op(A) * p(B) + beta * this */ void HMatrix::gemm(char transA, char transB, Scalar alpha, const HMatrix& a, const HMatrix& b, Scalar beta) { copyOnWrite(); getImplementation()->gemm(transA, transB, alpha, *a.getImplementation(), *b.getImplementation(), beta); } /** Transpose matrix */ void HMatrix::transpose() { copyOnWrite(); getImplementation()->transpose(); } /** Get the Frobenius norm */ Scalar HMatrix::norm() const { return getImplementation()->norm(); } /** Get the diagonal */ Point HMatrix::getDiagonal() const { return getImplementation()->getDiagonal(); } /** Solve system op(A)*X = b */ Point HMatrix::solve(const Point& b, Bool trans) const { return getImplementation()->solve(b, trans); } /** Solve system op(A)*X = m */ Matrix HMatrix::solve(const Matrix& m, Bool trans) const { return getImplementation()->solve(m, trans); } /** Solve system op(L)*X = b */ Point HMatrix::solveLower(const Point& b, Bool trans) const { return getImplementation()->solveLower(b, trans); } /** Solve system op(L)*X = m */ Matrix HMatrix::solveLower(const Matrix& m, Bool trans) const { return getImplementation()->solveLower(m, trans); } /** Get number of HMatrix elements in compressed and uncompressed forms */ std::pair HMatrix::compressionRatio() const { return getImplementation()->compressionRatio(); } /** Get number of HMatrix elements in full blocks and low rank blocks */ std::pair HMatrix::fullrkRatio() const { return getImplementation()->fullrkRatio(); } /* Dump HMatrix onto file */ void HMatrix::dump(const String & name) const { return getImplementation()->dump(name); } /* String converter */ String HMatrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } String HMatrix::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Get the dimensions of the matrix : number of rows */ UnsignedInteger HMatrix::getNbRows() const { return getImplementation()->getNbRows(); } /* Get the dimensions of the matrix : number of columns */ UnsignedInteger HMatrix::getNbColumns() const { return getImplementation()->getNbColumns(); } /* Comparison operator */ Bool HMatrix::operator == (const HMatrix & rhs) const { const HMatrix &lhs(*this); return (*(lhs.getImplementation()) == *(rhs.getImplementation()) ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HMatrixFactory.cxx000066400000000000000000000120671307543307100222030ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixFactory.cxx * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . */ #include "openturns/HMatrixFactory.hxx" #include "openturns/HMatrix.hxx" #include "openturns/HMatrixImplementation.hxx" #include "openturns/Sample.hxx" #include "openturns/Log.hxx" #ifdef OPENTURNS_HAVE_HMAT #include #ifdef HMAT_HAVE_STARPU # include #else # include #endif #endif /* OPENTURNS_HAVE_HMAT */ BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HMatrixFactory); /* Default constructor */ HMatrixFactory::HMatrixFactory() : PersistentObject() { // Nothing to do } HMatrixFactory * HMatrixFactory::clone() const { return new HMatrixFactory( *this ); } /** Tell whether HMat support is available */ Bool HMatrixFactory::IsAvailable() { #ifdef OPENTURNS_HAVE_HMAT return true; #else return false; #endif } HMatrix HMatrixFactory::build(const Sample & sample, UnsignedInteger outputDimension, Bool symmetric, const HMatrixParameters & parameters) { #ifndef OPENTURNS_HAVE_HMAT throw NotYetImplementedException(HERE) << "OpenTURNS has been built without HMat support"; #else hmat_interface_t *hmatInterface = (hmat_interface_t*) calloc(1, sizeof(hmat_interface_t)); hmat_settings_t settings; #ifdef HMAT_HAVE_STARPU if (!ResourceMap::GetAsBool("HMatrix-ForceSequential")) hmat_init_starpu_interface(hmatInterface, HMAT_DOUBLE_PRECISION); else #endif hmat_init_default_interface(hmatInterface, HMAT_DOUBLE_PRECISION); hmat_get_parameters(&settings); settings.compressionMethod = parameters.getCompressionMethodAsUnsignedInteger(); settings.assemblyEpsilon = parameters.getAssemblyEpsilon(); settings.recompressionEpsilon = parameters.getRecompressionEpsilon(); settings.maxLeafSize = ResourceMap::GetAsUnsignedInteger("HMatrix-MaxLeafSize"); settings.maxParallelLeaves = ResourceMap::GetAsUnsignedInteger("HMatrix-MaxParallelLeaves"); settings.validationErrorThreshold = ResourceMap::GetAsScalar("HMatrix-ValidationError"); settings.validateCompression = settings.validationErrorThreshold > 0; settings.validationReRun = ResourceMap::GetAsUnsignedInteger("HMatrix-ValidationRerun"); settings.validationDump = ResourceMap::GetAsUnsignedInteger("HMatrix-ValidationDump"); hmat_set_parameters(&settings); if (0 != hmatInterface->init()) { throw NotYetImplementedException(HERE) << "Unable to initialize HMat library"; } const UnsignedInteger size = sample.getSize(); const UnsignedInteger spatialDimension = sample.getDimension(); double* points = new double[spatialDimension * outputDimension * size]; for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < outputDimension; ++j) memcpy(points + i * spatialDimension * outputDimension + j * spatialDimension, &sample[i][0], spatialDimension * sizeof(double)); } hmat_clustering_algorithm_t* algo; const String clusteringAlgorithm = parameters.getClusteringAlgorithm(); if (clusteringAlgorithm == "median") algo = hmat_create_clustering_median(); else if (clusteringAlgorithm == "geometric") algo = hmat_create_clustering_geometric(); else if (clusteringAlgorithm == "hybrid") algo = hmat_create_clustering_hybrid(); else throw InvalidArgumentException(HERE) << "Unknown clustering method: " << clusteringAlgorithm << ", valid choices are: median, geometric or hybrid"; hmat_cluster_tree_t* ct = hmat_create_cluster_tree(points, spatialDimension, outputDimension * size, algo); hmat_delete_clustering(algo); delete[] points; Scalar eta = parameters.getAdmissibilityFactor(); hmat_admissibility_t* admissibility = hmat_create_admissibility_standard(eta); hmat_matrix_t* ptrHMat = hmatInterface->create_empty_hmatrix_admissibility(ct, ct, symmetric, admissibility); hmat_delete_admissibility(admissibility); return HMatrix(new HMatrixImplementation(hmatInterface, ct, outputDimension * size, ptrHMat)); #endif /* OPENTURNS_HAVE_HMAT */ } String HMatrixFactory::__repr__() const { return OSS() << "class=" << getClassName(); } /* Method save() stores the object through the StorageManager */ void HMatrixFactory::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void HMatrixFactory::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HMatrixImplementation.cxx000066400000000000000000000432341307543307100235610ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixImplementation.cxx * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . */ #include #include #include #include "openturns/HMatrixImplementation.hxx" #include "openturns/Log.hxx" #ifdef OPENTURNS_HAVE_HMAT # include #endif BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HMatrixImplementation); #ifdef OPENTURNS_HAVE_HMAT static void trampoline_simple(void* user_context, int row, int col, void* result) { HMatrixRealAssemblyFunction* assembly_function = static_cast(user_context); Scalar *ptrValue = static_cast(result); *ptrValue = assembly_function->operator()(row, col); } /** Auxiliary data structure to represente a couple of degrees of freedom. This data structure will be sorted by compare_couple_indices so that all couples which have the same (point_1,point_2) are stored together. */ typedef struct { int point_1; int point_2; UnsignedInteger dim_1; UnsignedInteger dim_2; } couple_data_t; static bool compare_couple_indices (const couple_data_t& couple1, const couple_data_t& couple2) { if (couple1.point_1 == couple2.point_1) return couple1.point_2 < couple2.point_2; return couple1.point_1 < couple2.point_1; } class ParallelBlockData { public: std::vector list_couples_; const UnsignedInteger outputDimension_; const UnsignedInteger rowOffset_; const UnsignedInteger rowCount_; const UnsignedInteger colOffset_; const UnsignedInteger colCount_; int* row_hmat2client_; int* row_client2hmat_; int* col_hmat2client_; int* col_client2hmat_; HMatrixTensorRealAssemblyFunction* f_; ParallelBlockData(UnsignedInteger outputDimension, UnsignedInteger rowOffset, UnsignedInteger rowCount, UnsignedInteger colOffset, UnsignedInteger colCount) : list_couples_(rowCount * colCount) , outputDimension_(outputDimension) , rowOffset_(rowOffset) , rowCount_(rowCount) , colOffset_(colOffset) , colCount_(colCount) {} }; static void free_parallel_block_data(void* data) { ParallelBlockData* blockData = static_cast(data); delete blockData; } static void trampoline_hmat_prepare_block(int row_start, int row_count, int col_start, int col_count, int *row_hmat2client, int *row_client2hmat, int *col_hmat2client, int *col_client2hmat, void *context, hmat_block_info_t * block_info) { HMatrixTensorRealAssemblyFunction* assembly_function = static_cast(context); const UnsignedInteger outputDimension = assembly_function->getDimension(); ParallelBlockData * blockData = new ParallelBlockData(outputDimension, row_start, row_count, col_start, col_count); blockData->f_ = assembly_function; blockData->row_hmat2client_ = row_hmat2client; blockData->row_client2hmat_ = row_client2hmat; blockData->col_hmat2client_ = col_hmat2client; blockData->col_client2hmat_ = col_client2hmat; std::vector & list_couples = blockData->list_couples_; block_info->user_data = blockData; block_info->release_user_data = free_parallel_block_data; std::vector::iterator couple_it = list_couples.begin(); for (int j = 0; j < col_count; ++j) { const int c_dof_e = col_hmat2client[j + col_start]; const int c_point_e = c_dof_e / outputDimension; const UnsignedInteger c_dim_e = c_dof_e % outputDimension; for (int i = 0; i < row_count; ++i, ++couple_it) { const int r_dof_e = row_hmat2client[i + row_start]; couple_it->point_1 = r_dof_e / outputDimension; couple_it->point_2 = c_point_e; couple_it->dim_1 = r_dof_e % outputDimension; couple_it->dim_2 = c_dim_e; } } // Sort couples std::sort(list_couples.begin(), list_couples.end(), compare_couple_indices); } static void trampoline_compute(void* v_data, int row_start, int row_count, int col_start, int col_count, void* block) { ParallelBlockData * blockData = static_cast(v_data); UnsignedInteger rowBlockBegin = blockData->rowOffset_; UnsignedInteger colBlockBegin = blockData->colOffset_; std::vector & list_couples = blockData->list_couples_; const UnsignedInteger outputDimension = blockData->outputDimension_; int lastPoint1 = -1, lastPoint2 = -1; const int firstRowIndex(rowBlockBegin + row_start); const int firstColumnIndex(colBlockBegin + col_start); CovarianceMatrix localMat(outputDimension); Scalar * result = static_cast(block); for (std::vector::const_iterator cit = list_couples.begin(); cit != list_couples.end(); ++cit) { const int r_point_e = cit->point_1; const int c_point_e = cit->point_2; const UnsignedInteger r_dim_e = cit->dim_1; const UnsignedInteger c_dim_e = cit->dim_2; const int r_dof_i = blockData->row_client2hmat_[outputDimension * r_point_e + r_dim_e]; if (r_dof_i < firstRowIndex || r_dof_i >= firstRowIndex + (int) row_count) continue; const int c_dof_i = blockData->col_client2hmat_[outputDimension * c_point_e + c_dim_e]; if (c_dof_i < firstColumnIndex || c_dof_i >= firstColumnIndex + (int) col_count) continue; if (lastPoint1 != r_point_e || lastPoint2 != c_point_e) { memset( &localMat.getImplementation()->operator[](0), 0, outputDimension * outputDimension * sizeof(Scalar) ); blockData->f_->compute( r_point_e, c_point_e, &localMat ); lastPoint1 = r_point_e; lastPoint2 = c_point_e; } const int pos = (c_dof_i - firstColumnIndex) * row_count + (r_dof_i - firstRowIndex); result[pos] = localMat(r_dim_e, c_dim_e); } } #endif /* OPENTURNS_HAVE_HMAT */ HMatrixClusterTree::~HMatrixClusterTree() { #ifdef OPENTURNS_HAVE_HMAT hmat_delete_cluster_tree(static_cast(hmatClusterTree_)); #endif } HMatrixImplementation::HMatrixImplementation() : hmatInterface_(NULL) , hmatClusterTree_(NULL) , hmat_(NULL) { // Nothing to do } HMatrixImplementation::HMatrixImplementation(void* ptr_hmat_interface, void* ptr_hmat_cluster_tree, int cluster_size, void* ptr_hmatrix) : hmatInterface_(ptr_hmat_interface) , hmatClusterTree_(new HMatrixClusterTree(ptr_hmat_cluster_tree, cluster_size)) , hmat_(ptr_hmatrix) { // Nothing to do } HMatrixImplementation::HMatrixImplementation(const HMatrixImplementation& other) : PersistentObject(other) , hmatInterface_(other.hmatInterface_) , hmatClusterTree_(NULL) , hmat_(NULL) { #ifdef OPENTURNS_HAVE_HMAT hmat_cluster_tree_t* ptr_other_ct = static_cast(other.hmatClusterTree_.get()->get()); hmatClusterTree_ = new HMatrixClusterTree(hmat_copy_cluster_tree(ptr_other_ct), other.hmatClusterTree_.get()->getSize()); hmat_cluster_tree_t* ptr_ct = static_cast(hmatClusterTree_.get()->get()); hmat_interface_t* ptr_interface = static_cast(hmatInterface_); hmat_matrix_t* hmat_copy = ptr_interface->copy(static_cast(other.hmat_)); ptr_interface->set_cluster_trees(hmat_copy, ptr_ct, ptr_ct); hmat_ = hmat_copy; #endif } /* Virtual constructor */ HMatrixImplementation * HMatrixImplementation::clone() const { return new HMatrixImplementation(*this); } HMatrixImplementation::~HMatrixImplementation() { #ifdef OPENTURNS_HAVE_HMAT if (hmatInterface_ != NULL && hmat_ != NULL) static_cast(hmatInterface_)->destroy(static_cast(hmat_)); #endif } void HMatrixImplementation::assemble(const HMatrixRealAssemblyFunction& f, char symmetry) { #ifdef OPENTURNS_HAVE_HMAT int sym = 0; switch(symmetry) { case 'N': case 'n': break; case 'L': case 'l': sym = 1; break; default: throw InvalidArgumentException(HERE) << "Error: invalid symmetry flag '" << symmetry << "', must be either 'N' or 'L'"; } static_cast(hmatInterface_)->assemble_simple_interaction(static_cast(hmat_), const_cast(&f), &trampoline_simple, sym); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } UnsignedInteger HMatrixImplementation::getNbRows() const { #ifdef OPENTURNS_HAVE_HMAT if (hmatClusterTree_.isNull()) return 0; return hmatClusterTree_.get()->getSize(); #else return 0; #endif } UnsignedInteger HMatrixImplementation::getNbColumns() const { #ifdef OPENTURNS_HAVE_HMAT if (hmatClusterTree_.isNull()) return 0; return hmatClusterTree_.get()->getSize(); #else return 0; #endif } void HMatrixImplementation::assemble(const HMatrixTensorRealAssemblyFunction& f, char symmetry) { #ifdef OPENTURNS_HAVE_HMAT int sym = 0; switch(symmetry) { case 'N': case 'n': break; case 'L': case 'l': sym = 1; break; default: throw InvalidArgumentException(HERE) << "Error: invalid symmetry flag '" << symmetry << "', must be either 'N' or 'L'"; } static_cast(hmatInterface_)->assemble( static_cast(hmat_), const_cast(&f), &trampoline_hmat_prepare_block, &trampoline_compute, sym); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::factorize(const String& method) { #ifdef OPENTURNS_HAVE_HMAT hmat_settings_t settings; hmat_get_parameters(&settings); hmat_factorization_t fact_method = hmat_factorization_lu; if (method == "LDLt") fact_method = hmat_factorization_ldlt; else if (method == "LLt") fact_method = hmat_factorization_llt; else if (method != "LU") LOGWARN( OSS() << "Unknown factorization method: " << method << ". Valid values are: LU, LDLt, or LLt."); try { hmat_factorization_context_t context; hmat_factorization_context_init(&context); context.factorization = fact_method; context.progress = NULL; static_cast(hmatInterface_)->factorize_generic(static_cast(hmat_), &context); } catch (std::exception& ex) { // hmat::LapackException is not yet exported throw InternalException(HERE) << ex.what(); } #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::scale(Scalar alpha) { #ifdef OPENTURNS_HAVE_HMAT static_cast(hmatInterface_)->scale(&alpha, static_cast(hmat_)); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::gemv(char trans, Scalar alpha, const Point& x, Scalar beta, Point& y) const { #ifdef OPENTURNS_HAVE_HMAT // gemv() below reorders x indices, thus x is not constant. Point xcopy(x); static_cast(hmatInterface_)->gemv(trans, &alpha, static_cast(hmat_), &xcopy[0], &beta, &y[0], 1); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::gemm(char transA, char transB, Scalar alpha, const HMatrixImplementation& a, const HMatrixImplementation& b, Scalar beta) { #ifdef OPENTURNS_HAVE_HMAT static_cast(hmatInterface_)->gemm(transA, transB, &alpha, static_cast(a.hmat_), static_cast(b.hmat_), &beta, static_cast(hmat_)); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::transpose() { #ifdef OPENTURNS_HAVE_HMAT static_cast(hmatInterface_)->transpose(static_cast(hmat_)); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Scalar HMatrixImplementation::norm() const { #ifdef OPENTURNS_HAVE_HMAT return static_cast(hmatInterface_)->norm(static_cast(hmat_)); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Point HMatrixImplementation::getDiagonal() const { #ifdef OPENTURNS_HAVE_HMAT Point diag(hmatClusterTree_.get()->getSize()); static_cast(hmatInterface_)->extract_diagonal(static_cast(hmat_), &diag[0], diag.getDimension()); return diag; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Point HMatrixImplementation::solve(const Point& b, Bool trans) const { if (trans) throw NotYetImplementedException(HERE) << "transposed not yet supported in HMatrixImplementation::solve"; #ifdef OPENTURNS_HAVE_HMAT Point result(b); static_cast(hmatInterface_)->solve_systems(static_cast(hmat_), &result[0], 1); return result; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Matrix HMatrixImplementation::solve(const Matrix& m, Bool trans) const { if (trans) throw NotYetImplementedException(HERE) << "transposed not yet supported in HMatrixImplementation::solve"; #ifdef OPENTURNS_HAVE_HMAT Matrix result(m); static_cast(hmatInterface_)->solve_systems(static_cast(hmat_), &result(0, 0), result.getNbColumns()); return result; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Point HMatrixImplementation::solveLower(const Point& b, Bool trans) const { #ifdef OPENTURNS_HAVE_HMAT int t = trans; Point result(b); static_cast(hmatInterface_)->solve_lower_triangular(static_cast(hmat_), t, &result[0], 1); return result; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Matrix HMatrixImplementation::solveLower(const Matrix& m, Bool trans) const { #ifdef OPENTURNS_HAVE_HMAT int t = trans; Matrix result(m); static_cast(hmatInterface_)->solve_lower_triangular(static_cast(hmat_), t, &result(0, 0), result.getNbColumns()); return result; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } std::pair HMatrixImplementation::compressionRatio() const { #ifdef OPENTURNS_HAVE_HMAT hmat_info_t mat_info; static_cast(hmatInterface_)->get_info(static_cast(hmat_), &mat_info); return std::pair(mat_info.compressed_size, mat_info.uncompressed_size); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } std::pair HMatrixImplementation::fullrkRatio() const { #ifdef OPENTURNS_HAVE_HMAT hmat_info_t mat_info; static_cast(hmatInterface_)->get_info(static_cast(hmat_), &mat_info); return std::pair(mat_info.full_size, mat_info.rk_size); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } void HMatrixImplementation::dump(const String & name) const { #ifdef OPENTURNS_HAVE_HMAT static_cast(hmatInterface_)->dump_info(static_cast(hmat_), const_cast(name.c_str())); #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } Bool HMatrixImplementation::setKey(const String & name, const String & value) { #ifdef OPENTURNS_HAVE_HMAT hmat_settings_t settings; hmat_get_parameters(&settings); if (name == "compression") { if (value == "SVD") settings.compressionMethod = hmat_compress_svd; else if (value == "ACAfull") settings.compressionMethod = hmat_compress_aca_full; else if (value == "ACApartial") settings.compressionMethod = hmat_compress_aca_partial; else if (value == "ACA+") settings.compressionMethod = hmat_compress_aca_plus; else LOGWARN( OSS() << "Unknown compression method: " << value << ". Valid values are: SVD, ACAfull, ACApartial or ACA+"); } else if (name == "assembly-epsilon") { std::istringstream iss( value ); iss >> settings.assemblyEpsilon; } else if (name == "recompression-epsilon") { std::istringstream iss( value ); iss >> settings.recompressionEpsilon; } else if (name == "max-parallel-leaves") { std::istringstream iss( value ); iss >> settings.maxParallelLeaves; } else LOGWARN( OSS() << "Unknown parameter: " << name); hmat_set_parameters(&settings); return true; #else throw NotYetImplementedException(HERE) << "OpenTURNS had been compiled without HMat support"; #endif } /* String converter */ String HMatrixImplementation::__repr__() const { OSS oss(true); oss << "class= " << HMatrixImplementation::GetClassName(); return oss; } /* String converter */ String HMatrixImplementation::__str__(const String & offset) const { OSS oss(false); oss << offset << "class= " << HMatrixImplementation::GetClassName(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HMatrixParameters.cxx000066400000000000000000000127701307543307100227000ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixParameters.cxx * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/HMatrixParameters.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HMatrixParameters); static const Factory Factory_HMatrixParameters; HMatrixParameters::HMatrixParameters() : PersistentObject() , assemblyEpsilon_(ResourceMap::GetAsScalar("HMatrix-AssemblyEpsilon")) , recompressionEpsilon_(ResourceMap::GetAsScalar("HMatrix-RecompressionEpsilon")) , admissibilityFactor_(ResourceMap::GetAsScalar("HMatrix-AdmissibilityFactor")) , clusteringAlgorithm_(ResourceMap::Get("HMatrix-ClusteringAlgorithm")) { // Convert numerical value into a string const UnsignedInteger resourceCompressionMethod = ResourceMap::GetAsUnsignedInteger("HMatrix-CompressionMethod"); switch(resourceCompressionMethod) { case 0: compressionMethod_ = "SVD"; break; case 1: compressionMethod_ = "ACA full"; break; case 2: compressionMethod_ = "ACA partial"; break; case 3: compressionMethod_ = "ACA+"; break; default: throw InvalidArgumentException(HERE) << "Unknown compression method: " << resourceCompressionMethod << ", valid choices are: 0 (SVD), 1 (ACA full), 2 (ACA partial) or 3 (ACA+)"; break; } } /* Virtual constructor */ HMatrixParameters * HMatrixParameters::clone() const { return new HMatrixParameters(*this); } /** accessor for assembly epsilon */ void HMatrixParameters::setAssemblyEpsilon(const Scalar assemblyEpsilon) { assemblyEpsilon_ = assemblyEpsilon; } Scalar HMatrixParameters::getAssemblyEpsilon() const { return assemblyEpsilon_; } /** accessor for recompression epsilon */ void HMatrixParameters::setRecompressionEpsilon(const Scalar recompressionEpsilon) { recompressionEpsilon_ = recompressionEpsilon; } Scalar HMatrixParameters::getRecompressionEpsilon() const { return recompressionEpsilon_; } /** accessor for admissibility factor */ void HMatrixParameters::setAdmissibilityFactor(const Scalar admissibilityFactor) { admissibilityFactor_ = admissibilityFactor; } Scalar HMatrixParameters::getAdmissibilityFactor() const { return admissibilityFactor_; } /** accessor for clustering algorithm */ void HMatrixParameters::setClusteringAlgorithm(const String & clusteringAlgorithm) { clusteringAlgorithm_ = clusteringAlgorithm; } String HMatrixParameters::getClusteringAlgorithm() const { return clusteringAlgorithm_; } /** accessor for compression method */ void HMatrixParameters::setCompressionMethod(const String & compressionMethod) { compressionMethod_ = compressionMethod; } String HMatrixParameters::getCompressionMethod() const { return compressionMethod_; } UnsignedInteger HMatrixParameters::getCompressionMethodAsUnsignedInteger() const { if (compressionMethod_ == "SVD") return 0; else if (compressionMethod_ == "ACA full") return 1; else if (compressionMethod_ == "ACA partial") return 2; else if (compressionMethod_ == "ACA+") return 3; else throw InvalidArgumentException(HERE) << "Unknown compression method: " << compressionMethod_ << ", valid choices are: SVD, ACA full, ACA partial or ACA+"; } /* String converter */ String HMatrixParameters::__repr__() const { OSS oss(true); oss << "class= " << HMatrixParameters::GetClassName() << ", assembly epsilon= " << assemblyEpsilon_ << ", recompression epsilon=" << recompressionEpsilon_ << ", admissibility factor=" << admissibilityFactor_ << ", clustering algorithm=" << clusteringAlgorithm_ << ", compression method=" << compressionMethod_; return oss; } String HMatrixParameters::__str__(const String & offset) const { OSS oss(false); oss << offset << "class= " << HMatrixParameters::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void HMatrixParameters::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("assemblyEpsilon_", assemblyEpsilon_); adv.saveAttribute("recompressionEpsilon_", recompressionEpsilon_); adv.saveAttribute("admissibilityFactor_", admissibilityFactor_); adv.saveAttribute("clusteringAlgorithm_", clusteringAlgorithm_); adv.saveAttribute("compressionMethod_", compressionMethod_); } /* Method load() reloads the object from the StorageManager */ void HMatrixParameters::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("assemblyEpsilon_", assemblyEpsilon_); adv.loadAttribute("recompressionEpsilon_", recompressionEpsilon_); adv.loadAttribute("admissibilityFactor_", admissibilityFactor_); adv.loadAttribute("clusteringAlgorithm_", clusteringAlgorithm_); adv.loadAttribute("compressionMethod_", compressionMethod_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HaltonSequence.cxx000066400000000000000000000065311307543307100222140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Halton' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/HaltonSequence.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HaltonSequence); /* Constructor with parameters */ HaltonSequence::HaltonSequence(const UnsignedInteger dimension) : LowDiscrepancySequenceImplementation(dimension) { initialize(dimension); } /* Virtual constructor */ HaltonSequence * HaltonSequence::clone() const { return new HaltonSequence(*this); } /* Initialize the sequence */ void HaltonSequence::initialize(const UnsignedInteger dimension) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Dimension must be > 0."; dimension_ = dimension; base_ = ComputeFirstPrimeNumbers(dimension); seed_ = ResourceMap::GetAsUnsignedInteger( "HaltonSequence-InitialSeed" ); } /* Generate a pseudo-random vector of independant numbers uniformly distributed over [0, 1[ */ Point HaltonSequence::generate() const { Point realization(dimension_); // Loop over the components for (UnsignedInteger i = 0; i < dimension_; ++i) { Scalar xI = 0.0; const Unsigned64BitsInteger radix = base_[i]; const Scalar inverseRadix = 1.0 / radix; Scalar inverseRadixN = inverseRadix; Unsigned64BitsInteger currentSeed = seed_; while (currentSeed > 0) { xI += (currentSeed % radix) * inverseRadixN; currentSeed /= radix; inverseRadixN *= inverseRadix; } realization[i] = xI; } ++seed_; return realization; } /* String converter */ String HaltonSequence::__repr__() const { OSS oss(true); oss << "class=" << HaltonSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__repr__() << " base=" << base_ << " seed=" << seed_; return oss; } /* String converter */ String HaltonSequence::__str__(const String & offset) const { OSS oss(false); oss << "class=" << HaltonSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__str__(offset) << " base=" << base_ << " seed=" << seed_; return oss; } void HaltonSequence::save(Advocate & adv) const { LowDiscrepancySequenceImplementation::save(adv); adv.saveAttribute( "base_", base_); adv.saveAttribute( "seed_", seed_); } /* Method load() reloads the object from the StorageManager */ void HaltonSequence::load(Advocate & adv) { LowDiscrepancySequenceImplementation::load(adv); initialize(dimension_); adv.loadAttribute( "base_", base_); adv.loadAttribute( "seed_", seed_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Hamming.cxx000066400000000000000000000047151307543307100206600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Hamming.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Hamming */ CLASSNAMEINIT(Hamming); static const Factory Factory_Hamming; /* Constructor with parameters */ Hamming::Hamming() : FilteringWindowsImplementation() { // Nothing to do } /* Virtual constructor */ Hamming * Hamming::clone() const { return new Hamming(*this); } /* String converter */ String Hamming::__repr__() const { OSS oss(true); oss << "class=" << Hamming::GetClassName(); return oss; } /* String converter */ String Hamming::__str__(const String & offset) const { OSS oss(false); oss << offset << "class=" << Hamming::GetClassName(); return oss; } /* Evaluation of Hamming filter */ Scalar Hamming::operator()(const Scalar t) const { if ((t < 0.0) || (t > 1.0)) return 0.0; // Classical hamming is hamming(t) = 25/46 - 21/46 * cos(2 * \pi * t) // It allows to cancel the largest side-lob of the filter // Here, it is normalized such that int_0^1 (alpha*hamming(t))^2 dt = 1 // It leads to alpha = sqrt(4232/1691) = 1.581980134910090405941101 // 25/46 = 0.5434782608695652173913043 // 21/46 = 0.4565217391304347826086957 return 1.581980134910090405941101 * (0.5434782608695652173913043 - 0.4565217391304347826086957 * cos(2.0 * M_PI * t)); } /* Method save() stores the object through the StorageManager */ void Hamming::save(Advocate & adv) const { FilteringWindowsImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Hamming::load(Advocate & adv) { FilteringWindowsImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Hanning.cxx000066400000000000000000000041221307543307100206520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Hanning.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Hanning */ CLASSNAMEINIT(Hanning); static const Factory Factory_Hanning; /* Constructor with parameters */ Hanning::Hanning() : FilteringWindowsImplementation() { // Nothing to do } /* Virtual constructor */ Hanning * Hanning::clone() const { return new Hanning(*this); } /* String converter */ String Hanning::__repr__() const { OSS oss(true); oss << "class=" << Hanning::GetClassName(); return oss; } /* String converter */ String Hanning::__str__(const String & offset) const { OSS oss(false); oss << "class=" << Hanning::GetClassName(); return oss; } /* Evaluation of Hanning filter */ Scalar Hanning::operator()(const Scalar t) const { if ((t <= 0.0) || (t >= 1.0)) return 0.0; const Scalar sinTheta = sin(M_PI * t); // 1.632993161855452065464856 = sqrt(8/3) return 1.632993161855452065464856 * sinTheta * sinTheta; } /* Method save() stores the object through the StorageManager */ void Hanning::save(Advocate & adv) const { FilteringWindowsImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void Hanning::load(Advocate & adv) { FilteringWindowsImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HaselgroveSequence.cxx000066400000000000000000000061511307543307100230640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Haselgrove' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/HaselgroveSequence.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HaselgroveSequence); /* Constructor with parameters */ HaselgroveSequence::HaselgroveSequence(const UnsignedInteger dimension) : LowDiscrepancySequenceImplementation(dimension) { initialize(dimension); } /* Constructor with parameters */ HaselgroveSequence::HaselgroveSequence(const Point & base) : LowDiscrepancySequenceImplementation(base.getDimension()) { dimension_ = base.getDimension(); base_ = base; seed_ = ResourceMap::GetAsUnsignedInteger( "HaselgroveSequence-InitialSeed" ); } /* Virtual constructor */ HaselgroveSequence * HaselgroveSequence::clone() const { return new HaselgroveSequence(*this); } /* Initialize the sequence */ void HaselgroveSequence::initialize(const UnsignedInteger dimension) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Dimension must be > 0."; dimension_ = dimension; const Unsigned64BitsIntegerCollection directions(ComputeFirstPrimeNumbers(dimension)); base_ = Point(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) base_[i] = sqrt(1.0 * directions[i]); seed_ = ResourceMap::GetAsUnsignedInteger( "HaselgroveSequence-InitialSeed" ); } /* Generate a pseudo-random vector of independant numbers uniformly distributed over [0, 1[ */ Point HaselgroveSequence::generate() const { Point realization(dimension_); // Loop over the components Scalar scratch = 0.0; for (UnsignedInteger i = 0; i < dimension_; ++i) realization[i] = modf(seed_ * base_[i], &scratch); ++seed_; return realization; } /* String converter */ String HaselgroveSequence::__repr__() const { OSS oss(true); oss << "class=" << HaselgroveSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__repr__() << " base=" << base_ << " seed=" << seed_; return oss; } /* String converter */ String HaselgroveSequence::__str__(const String & offset) const { OSS oss(false); oss << "class=" << HaselgroveSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__str__(offset) << " base=" << base_ << " seed=" << seed_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HistoryStrategy.cxx000066400000000000000000000044631307543307100224640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HistoryStrategy.hxx" #include "openturns/Null.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistoryStrategy */ CLASSNAMEINIT(HistoryStrategy); /* Defaultonstructor */ HistoryStrategy::HistoryStrategy() : TypedInterfaceObject(Null().clone()) { // Nothing to do } /* Constructor with parameters */ HistoryStrategy::HistoryStrategy(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ HistoryStrategy::HistoryStrategy(const HistoryStrategyImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Store the point according to the strategy */ void HistoryStrategy::store(const Point & point) { copyOnWrite(); getImplementation()->store(point); } void HistoryStrategy::store(const Sample & sample) { copyOnWrite(); getImplementation()->store(sample); } /* Clear the history storage */ void HistoryStrategy::clear() { copyOnWrite(); getImplementation()->clear(); } /* History sample accessor */ Sample HistoryStrategy::getSample() const { return getImplementation()->getSample(); } /* String converter */ String HistoryStrategy::__repr__() const { OSS oss; oss << "class=" << HistoryStrategy::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/HistoryStrategyImplementation.cxx000066400000000000000000000055401307543307100253670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistoryStrategyImplementation */ CLASSNAMEINIT(HistoryStrategyImplementation); static const Factory Factory_HistoryStrategyImplementation; /* Constructor with parameters */ HistoryStrategyImplementation::HistoryStrategyImplementation() : PersistentObject(), sample_(), isInitialized_(false) { // Nothing to do } /* Virtual constructor */ HistoryStrategyImplementation * HistoryStrategyImplementation::clone() const { return new HistoryStrategyImplementation(*this); } /* Store the point according to the strategy */ void HistoryStrategyImplementation::store(const Point & point) { throw NotYetImplementedException(HERE) << "In HistoryStrategyImplementation::store(const Point & point)"; } /* Store the sample according to the strategy */ void HistoryStrategyImplementation::store(const Sample & sample) { for (UnsignedInteger i = 0; i < sample.getSize(); ++i) store(sample[i]); } /* Clear the history storage */ void HistoryStrategyImplementation::clear() { isInitialized_ = false; sample_ = Sample(); } /* History sample accessor */ Sample HistoryStrategyImplementation::getSample() const { return sample_; } /* String converter */ String HistoryStrategyImplementation::__repr__() const { OSS oss; oss << "class=" << HistoryStrategyImplementation::GetClassName(); return oss; } /** Method save() stores the object through the StorageManager */ void HistoryStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("sample_", sample_); adv.saveAttribute("isInitialized_", isInitialized_); } /** Method load() reloads the object from the StorageManager */ void HistoryStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("sample_", sample_); adv.loadAttribute("isInitialized_", isInitialized_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Last.cxx000066400000000000000000000072631307543307100202040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Last.hxx" #include "openturns/SampleImplementation.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Last */ CLASSNAMEINIT(Last); static const Factory Factory_Last; /*Constructor with parameters */ Last::Last() : HistoryStrategyImplementation(), maximumSize_(ResourceMap::GetAsUnsignedInteger( "Last-DefaultMaximumSize" )), index_(0), hasWrapped_(false) { // Nothing to do } /*Constructor with parameters */ Last::Last(const UnsignedInteger maximumSize) : HistoryStrategyImplementation(), maximumSize_(maximumSize), index_(0), hasWrapped_(false) { // Nothing to do } /*Virtual constructor */ Last * Last::clone() const { return new Last(*this); } /*Store the point according to the strategy */ void Last::store(const Point & point) { if (!isInitialized_) { sample_ = Sample(maximumSize_, point.getDimension()); index_ = 0; hasWrapped_ = false; isInitialized_ = true; } sample_[index_] = point; ++index_; if (index_ == maximumSize_) { index_ = 0; hasWrapped_ = true; } } /*Sample accessor */ Sample Last::getSample() const { // If nothing has been stored if (!isInitialized_) return sample_; // If we don't have exhausted the maximum size, return just the stored data if (!hasWrapped_) { Sample outSample(index_, sample_.getDimension()); for (UnsignedInteger i = 0; i < index_; ++i) outSample[i] = sample_[i]; return outSample; } // Perform a permutation of the elements: Sample outSample(maximumSize_, sample_.getDimension()); for (UnsignedInteger i = 0; i < maximumSize_; ++i) { UnsignedInteger circularIndex = (index_ + i) % maximumSize_; outSample[i] = sample_[circularIndex]; } return outSample; } /*MaximumSize accessor */ UnsignedInteger Last::getMaximumSize() const { return maximumSize_; } /*Index accessor */ UnsignedInteger Last::getIndex() const { return index_; } /*Wrapped flag accessor */ Bool Last::getHasWrapped() const { return hasWrapped_; } /*String converter */ String Last::__repr__() const { OSS oss; oss << "class=" << Last::GetClassName(); oss << " sample_= " << sample_; oss << " index_= " << index_; oss << " hasWrapped_= " << hasWrapped_; return oss; } /* Method save() stores the object through the StorageManager */ void Last::save(Advocate & adv) const { HistoryStrategyImplementation::save(adv); adv.saveAttribute("maximumSize_", maximumSize_); adv.saveAttribute("index_", index_); adv.saveAttribute("hasWrapped_", hasWrapped_); } /* Method load() reloads the object from the StorageManager */ void Last::load(Advocate & adv) { HistoryStrategyImplementation::load(adv); adv.loadAttribute("maximumSize_", maximumSize_); adv.loadAttribute("index_", index_); adv.loadAttribute("hasWrapped_", hasWrapped_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/LinearModel.cxx000066400000000000000000000121701307543307100214650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LinearModel implements the linear model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/LinearModel.hxx" #include "openturns/Path.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LinearModel); static const Factory Factory_LinearModel; /* Default constructor */ LinearModel::LinearModel() { // Nothing to do } /* Standard constructor */ LinearModel::LinearModel(const Point & vectorR, const Interval & intervals, const ScalarCollection & pValuesOfR) : PersistentObject(), regression_(vectorR), confidenceIntervals_(intervals), pValues_(pValuesOfR) { // Nothing to do } /* Constructor from Point */ LinearModel::LinearModel(const Point & vectorR) : PersistentObject() , regression_(vectorR) , confidenceIntervals_(vectorR, vectorR) , pValues_(vectorR.getDimension(), 0.0) { // Nothing to do } /* Virtual constructor */ LinearModel * LinearModel::clone() const { return new LinearModel(*this); } /* String converter */ String LinearModel::__repr__() const { return OSS(true) << "class=" << LinearModel::GetClassName() << " name=" << getName() << " regression=" << regression_ << " confidence intervals=" << confidenceIntervals_ << " p-Values=" << pValues_; } /* String converter */ String LinearModel::__str__(const String & offset) const { return OSS(false) << "LinearModel name=" << getName() << " regression=" << regression_ << " confidence intervals=" << confidenceIntervals_ << " p-Values=" << pValues_; } /* get vector, get intervals, get p-Values*/ Point LinearModel::getRegression() const { return regression_; } Interval LinearModel::getConfidenceIntervals() const { return confidenceIntervals_; } LinearModel::ScalarCollection LinearModel::getPValues() const { return pValues_; } /* getPredicted : build an sample of predicted values */ Sample LinearModel::getPredicted(const Sample & predictor) const { if (predictor.getDimension() + 1 != regression_.getDimension()) throw InvalidArgumentException(HERE) << "Error: predictors must have a dimension compatible with the linear model dimension"; UnsignedInteger size = predictor.getSize(); Sample predicted(size, 1); UnsignedInteger dimension = predictor.getDimension(); Point linear(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) linear[i] = regression_[i + 1]; for (UnsignedInteger i = 0; i < size; ++i) predicted[i][0] = dot(linear, predictor[i]) + regression_[0]; return predicted; } /* getResidual */ Sample LinearModel::getResidual(const Sample & predictor, const Sample & measured) const { if (predictor.getDimension() + 1 != regression_.getDimension()) throw InvalidArgumentException(HERE) << "Error: predictors must have a dimension compatible with the linear model dimension"; UnsignedInteger size = predictor.getSize(); if (measured.getSize() != size) throw InvalidArgumentException(HERE) << "Error: measured must have the same size as predictor"; Sample residual(size, 1); UnsignedInteger dimension = predictor.getDimension(); Point linear(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) linear[i] = regression_[i + 1]; for (UnsignedInteger i = 0; i < size; ++i) residual[i][0] = measured[i][0] - dot(linear, predictor[i]) - regression_[0]; return residual; } /* Method save() stores the object through the StorageManager */ void LinearModel::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "regression_", regression_); adv.saveAttribute( "confidenceIntervals_", confidenceIntervals_); adv.saveAttribute( "pValues_", pValues_); } /* Method load() reloads the object from the StorageManager */ void LinearModel::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "regression_", regression_); adv.loadAttribute( "confidenceIntervals_", confidenceIntervals_); adv.loadAttribute( "pValues_", pValues_); } /* Comparison operator */ Bool operator ==(const LinearModel & lhs, const LinearModel & rhs) { return ( lhs.getRegression() == rhs.getRegression() && lhs.getConfidenceIntervals() == rhs.getConfidenceIntervals() && lhs.getPValues() == rhs.getPValues() ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/LinearModelFactory.cxx000066400000000000000000000107661307543307100230260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for linear model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/LinearModelFactory.hxx" #include "openturns/LinearModel.hxx" #include "openturns/Path.hxx" #include "openturns/Exception.hxx" #include "openturns/OTconfig.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS /* Constructor */ LinearModelFactory::LinearModelFactory() { // Nothing to do } /* LinearModel creation */ LinearModel LinearModelFactory::build(const Sample & samplePred, const Sample & sampleLab, const Scalar levelValue) const { if (samplePred.getSize() != sampleLab.getSize()) throw InvalidArgumentException(HERE) << "Error: predictors sample must have the same size than the laboratory sample"; String predictorFileName(samplePred.storeToTemporaryFile()); String laboratoryFileName(sampleLab.storeToTemporaryFile()); String resultFileName(Path::BuildTemporaryFileName("RResult.txt.XXXXXX")); String commandFileName(Path::BuildTemporaryFileName("RCmd.R.XXXXXX")); std::ofstream cmdFile(commandFileName.c_str(), std::ios::out); // Fill-in the command file cmdFile << "library(rot)" << std::endl; cmdFile << "options(digits=17)" << std::endl; cmdFile << "options(warn=-1)" << std::endl; cmdFile << "options(stringsAsFactors = F)" << std::endl; cmdFile << "samplePred <- data.matrix(read.table(\"" << predictorFileName << "\"))" << std::endl; cmdFile << "sampleLab <- data.matrix(read.table(\"" << laboratoryFileName << "\"))" << std::endl; cmdFile << "res <- computeLinearModel(samplePred, sampleLab, " << levelValue << ")" << std::endl; cmdFile << "f <- file(\"" << resultFileName << "\",\"wt\")" << std::endl; cmdFile << "cat(res$parameterEstimate, res$confidenceIntervalLow, res$confidenceIntervalHigh, res$pValues, sep=\"\\n\", file=f)" << std::endl; cmdFile << "close(f)" << std::endl; cmdFile.close(); const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << RExecutable << " --no-save --silent < \"" << commandFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In LinearModelFactory::build(const Sample & samplePred, const Sample & sampleLab, const Scalar levelValue) const: needs R. Please install it and set the absolute path of the R executable in ResourceMap."; int returnCode(Os::ExecuteCommand(systemCommand)); if (returnCode != 0) throw InternalException(HERE) << "Error: unable to execute the system command " << String(systemCommand) << " returned code is " << returnCode; // Parse result file std::ifstream resultFile(resultFileName.c_str(), std::ios::in); UnsignedInteger dimension = samplePred.getDimension() + 1; Point regression(dimension); // Read the regression parameters for (UnsignedInteger i = 0; i < dimension; i++) { resultFile >> regression[i]; } // Read the lower bounds of the intervals Point lowerBounds(dimension); for (UnsignedInteger i = 0; i < dimension; i++) { resultFile >> lowerBounds[i]; } // Read the upper bounds of the intervals Point upperBounds(dimension); for (UnsignedInteger i = 0; i < dimension; i++) { resultFile >> upperBounds[i]; } Interval confidenceIntervals(lowerBounds, upperBounds); // Read the p-values of the coefficients ScalarPersistentCollection pValues(dimension); for (UnsignedInteger i = 0; i < dimension; i++) { resultFile >> pValues[i]; } resultFile.close(); Os::Remove(predictorFileName); Os::Remove(laboratoryFileName); Os::Remove(resultFileName); Os::Remove(commandFileName); return LinearModel(regression, confidenceIntervals, pValues); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/LowDiscrepancySequence.cxx000066400000000000000000000060321307543307100237110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface for low discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LowDiscrepancySequence.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LowDiscrepancySequence); /* Default constructor */ LowDiscrepancySequence::LowDiscrepancySequence() : TypedInterfaceObject(LowDiscrepancySequenceImplementation().clone()) { // Nothing to do } /* Constructor with parameters*/ LowDiscrepancySequence::LowDiscrepancySequence(const UnsignedInteger dimension) : TypedInterfaceObject(LowDiscrepancySequenceImplementation(dimension).clone()) { // Nothing to do } /* Constructor with parameters */ LowDiscrepancySequence::LowDiscrepancySequence(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ LowDiscrepancySequence::LowDiscrepancySequence(const LowDiscrepancySequenceImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Initialize the sequence */ void LowDiscrepancySequence::initialize(const UnsignedInteger dimension) { getImplementation()->initialize(dimension); } /* Dimension accessor*/ UnsignedInteger LowDiscrepancySequence::getDimension() const { return getImplementation()->getDimension(); } /* Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1) */ Point LowDiscrepancySequence::generate() const { return getImplementation()->generate(); } /* Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1) */ Sample LowDiscrepancySequence::generate(const UnsignedInteger size) const { return getImplementation()->generate(size); } /* Compute the star discrepancy of a sample uniformly distributed over [0, 1) */ Scalar LowDiscrepancySequence::computeStarDiscrepancy(const Sample & sample) const { return getImplementation()->ComputeStarDiscrepancy(sample); } /* String converter */ String LowDiscrepancySequence::__repr__() const { OSS oss; oss << "class=" << LowDiscrepancySequence::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/LowDiscrepancySequenceImplementation.cxx000066400000000000000000000405461307543307100266270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for low discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LowDiscrepancySequenceImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LowDiscrepancySequenceImplementation */ CLASSNAMEINIT(LowDiscrepancySequenceImplementation); static const Factory Factory_LowDiscrepancySequenceImplementation; /* Constructor with parameters */ LowDiscrepancySequenceImplementation::LowDiscrepancySequenceImplementation(const UnsignedInteger dimension) : PersistentObject(), dimension_(dimension) { // Nothing to do } /* Virtual constructor */ LowDiscrepancySequenceImplementation * LowDiscrepancySequenceImplementation::clone() const { return new LowDiscrepancySequenceImplementation(*this); } /* initialize the sequence */ void LowDiscrepancySequenceImplementation::initialize(const UnsignedInteger dimension) { throw NotYetImplementedException(HERE) << "In LowDiscrepancySequenceImplementation::initialize(const UnsignedInteger dimension)"; } /* Dimension accessor*/ UnsignedInteger LowDiscrepancySequenceImplementation::getDimension() const { return dimension_; } /* Generate a low discrepancy vector of numbers uniformly distributed over [0, 1) */ Point LowDiscrepancySequenceImplementation::generate() const { throw NotYetImplementedException(HERE) << "In LowDiscrepancySequenceImplementation::generate()"; } /* Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1) */ Sample LowDiscrepancySequenceImplementation::generate(const UnsignedInteger size) const { Sample sequenceSample(size, dimension_); for(UnsignedInteger i = 0; i < size ; ++i) sequenceSample[i] = generate(); return sequenceSample; } /* Compute the star discrepancy of a sample uniformly distributed over [0, 1) */ Scalar LowDiscrepancySequenceImplementation::ComputeStarDiscrepancy(const Sample & sample) { // computationnaly heavy function : O(N²), let N the size of the sample const UnsignedInteger size = sample.getSize(); // discrepancy is the maximum of the local discrepancy const Point lowerPoint(sample.getDimension()); Scalar discrepancy = 0.0; for(UnsignedInteger i = 0; i < size; ++i) { const Scalar local = ComputeLocalDiscrepancy(sample, Interval(lowerPoint, sample[i])); if(local > discrepancy) discrepancy = local; } return discrepancy; } /* String converter */ String LowDiscrepancySequenceImplementation::__repr__() const { OSS oss; oss << "class=" << LowDiscrepancySequenceImplementation::GetClassName() << " dimension=" << dimension_; return oss; } /** Method save() stores the object through the StorageManager */ void LowDiscrepancySequenceImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("dimension_", dimension_); } /** Method load() reloads the object from the StorageManager */ void LowDiscrepancySequenceImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("dimension_", dimension_); } /* Compute the local discrepancy of a sample, given a multidimensionnal interval */ Scalar LowDiscrepancySequenceImplementation::ComputeLocalDiscrepancy(const Sample & sample, const Interval & interval) { if (sample.getDimension() != interval.getDimension()) throw InvalidArgumentException(HERE) << "Error: the sample must have the same dimension as the given interval."; // calculate number of inner points const UnsignedInteger size = sample.getSize(); UnsignedInteger inPoints = 0; for(UnsignedInteger j = 0; j < size; ++j) if (interval.numericallyContains(sample[j])) ++inPoints; // The local discrepancy is the absolute difference between the fraction of points // that fall into the given interval and its volume return std::abs(static_cast(inPoints) / size - interval.getNumericalVolume()); } /* Get the needed prime numbers */ LowDiscrepancySequenceImplementation::Unsigned64BitsIntegerCollection LowDiscrepancySequenceImplementation::GetPrimeNumbers(const Indices & indices) { static const UnsignedInteger MaxPrime(1600); static const Unsigned64BitsInteger Table[MaxPrime] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259, 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499 }; const UnsignedInteger size = indices.getSize(); Unsigned64BitsIntegerCollection result(size); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger index = indices[i]; if (index > MaxPrime) throw InvalidArgumentException(HERE) << "Error: cannot ask for a prime number greater than the " << MaxPrime << "th prime number."; result[i] = Table[index]; } return result; } /* Compute the n first prime numbers */ LowDiscrepancySequenceImplementation::Unsigned64BitsIntegerCollection LowDiscrepancySequenceImplementation::ComputeFirstPrimeNumbers(const UnsignedInteger n) { Indices indices(n); indices.fill(); return GetPrimeNumbers(indices); } /* Compute the least prime number greater or equal to n */ Unsigned64BitsInteger LowDiscrepancySequenceImplementation::ComputeNextPrimeNumber(const UnsignedInteger n) { UnsignedInteger i = 0; Unsigned64BitsIntegerCollection primes(GetPrimeNumbers(Indices(1, i))); while (primes[0] < n) { primes = GetPrimeNumbers(Indices(1, i)); ++i; } return primes[0]; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/MaternModel.cxx000066400000000000000000000167531307543307100215140ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MaternModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MaternModel); static const Factory Factory_MaternModel; /* Default constructor */ MaternModel::MaternModel(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(Point(spatialDimension, ResourceMap::GetAsScalar("MaternModel-DefaultTheta")), Point(1, 1.0)) , nu_(ResourceMap::GetAsScalar("MaternModel-DefaultNu")) , sqrt2nuOverTheta_(Point(spatialDimension, sqrt(2.0 * nu_) / ResourceMap::GetAsScalar("MaternModel-DefaultTheta") )) { // Compute the normalization factor logNormalizationFactor_ = (1.0 - nu_) * std::log(2.0) - SpecFunc::LogGamma(nu_); } /** Parameters constructor */ MaternModel::MaternModel(const Point & scale, const Scalar nu) : StationaryCovarianceModel(scale, Point(1, 1.0)) , nu_(0.0) , sqrt2nuOverTheta_(Point(scale.getDimension(), 0.0)) { setNu(nu); } /** Parameters constructor */ MaternModel::MaternModel(const Point & scale, const Point & amplitude, const Scalar nu) : StationaryCovarianceModel(scale, amplitude) , nu_(0.0) , sqrt2nuOverTheta_(Point(scale.getDimension(), 0.0)) { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "In MaternModel::MaternModel, only unidimensional models should be defined." << " Here, (got dimension=" << getDimension() << ")"; setNu(nu); } /* Virtual constructor */ MaternModel * MaternModel::clone() const { return new MaternModel(*this); } /* Computation of the covariance function */ Scalar MaternModel::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point scaledTau(spatialDimension_); for(UnsignedInteger i = 0; i < spatialDimension_; ++i) scaledTau[i] = tau[i] * sqrt2nuOverTheta_[i]; const Scalar scaledPoint = scaledTau.norm(); if (scaledPoint <= SpecFunc::ScalarEpsilon) return 1.0 + nuggetFactor_; else return exp(logNormalizationFactor_ + nu_ * std::log(scaledPoint) + SpecFunc::LogBesselK(nu_, scaledPoint)); } /* Gradient */ Matrix MaternModel::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const Point tau(s - t); Point scaledTau(spatialDimension_); for(UnsignedInteger i = 0; i < spatialDimension_; ++i) scaledTau[i] = tau[i] * sqrt2nuOverTheta_[i]; const Scalar scaledTauNorm = scaledTau.norm(); const Scalar norm2 = scaledTauNorm * scaledTauNorm; // For zero norm if (norm2 == 0.0) { // Infinite gradient for nu < 1/2 if (nu_ < 0.5) return Matrix(spatialDimension_, 1, Point(spatialDimension_, -SpecFunc::MaxScalar)); // Non-zero gradient for nu = 1/2 if (nu_ == 0.5) { Matrix gradient(spatialDimension_, 1); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) gradient(i, 0) = -amplitude_[0] * amplitude_[0] / scale_[i]; return gradient; } // Zero gradient for p > 1 return Matrix(spatialDimension_, 1); } // General case const Scalar value = std::exp(logNormalizationFactor_ + nu_ * std::log(scaledTauNorm)) * (nu_ * SpecFunc::BesselK(nu_, scaledTauNorm) + SpecFunc::BesselKDerivative(nu_, scaledTauNorm) * scaledTauNorm) / norm2; Point tauDotsquareSqrt2nuOverTheta(spatialDimension_); for(UnsignedInteger i = 0; i < spatialDimension_; ++i) tauDotsquareSqrt2nuOverTheta[i] = tau[i] * sqrt2nuOverTheta_[i] * sqrt2nuOverTheta_[i]; return Matrix(spatialDimension_, 1, tauDotsquareSqrt2nuOverTheta * value) * amplitude_[0] * amplitude_[0]; } void MaternModel::setScale(const Point & scale) { // First set scale StationaryCovarianceModel::setScale(scale); // Update scaling factor for(UnsignedInteger i = 0; i < spatialDimension_; ++i) sqrt2nuOverTheta_[i] = sqrt(2.0 * nu_) / scale_[i]; } void MaternModel::setFullParameter(const Point & parameter) { CovarianceModelImplementation::setFullParameter(parameter); setNu(parameter[parameter.getSize() - 1]); } Point MaternModel::getFullParameter() const { // Get the generic parameter Point parameter(CovarianceModelImplementation::getFullParameter()); // Add the specific one parameter.add(nu_); return parameter; } Description MaternModel::getFullParameterDescription() const { // Description of the generic parameter Description description(CovarianceModelImplementation::getFullParameterDescription()); // Description of the specific parameter description.add("nu"); return description; } /* String converter */ String MaternModel::__repr__() const { OSS oss; oss << "class=" << MaternModel::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_ << " nu=" << nu_; return oss; } /* String converter */ String MaternModel::__str__(const String & offset) const { OSS oss; oss << MaternModel::GetClassName() << "(scale=" << scale_.__str__() << ", amplitude=" << amplitude_.__str__() << ", nu=" << nu_ << ")"; return oss; } /* Nu accessor */ Scalar MaternModel::getNu() const { return nu_; } void MaternModel::setNu(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: nu must be positive."; if (!(nu == nu_)) { nu_ = nu; // Compute the normalization factor logNormalizationFactor_ = (1.0 - nu_) * std::log(2.0) - SpecFunc::LogGamma(nu_); // Compute usefull scaling factor for(UnsignedInteger i = 0; i < spatialDimension_; ++i) sqrt2nuOverTheta_[i] = sqrt(2.0 * nu_) / scale_[i]; } } /* Method save() stores the object through the StorageManager */ void MaternModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute("nu_", nu_); adv.saveAttribute("logNormalizationFactor_", logNormalizationFactor_); adv.saveAttribute("sqrt2nuOverTheta_", sqrt2nuOverTheta_); } /* Method load() reloads the object from the StorageManager */ void MaternModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); adv.loadAttribute("nu_", nu_); adv.loadAttribute("logNormalizationFactor_", logNormalizationFactor_); adv.loadAttribute("sqrt2nuOverTheta_", sqrt2nuOverTheta_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/NonStationaryCovarianceModelFactory.cxx000066400000000000000000000144511307543307100264120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NonStationaryCovarianceModelFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NonStationaryCovarianceModelFactory); static const Factory Factory_NonStationaryCovarianceModelFactory; typedef Collection CovarianceMatrixCollection; /* Default constructor */ NonStationaryCovarianceModelFactory::NonStationaryCovarianceModelFactory() : CovarianceModelFactoryImplementation() { // Nothing to do } /* Virtual constructor */ NonStationaryCovarianceModelFactory * NonStationaryCovarianceModelFactory::clone() const { return new NonStationaryCovarianceModelFactory(*this); } /* String converter */ String NonStationaryCovarianceModelFactory::__repr__() const { OSS oss(true); oss << "class=" << NonStationaryCovarianceModelFactory::GetClassName(); return oss; } /* String converter */ String NonStationaryCovarianceModelFactory::__str__(const String & offset) const { return __repr__(); } CovarianceModelImplementation::Implementation NonStationaryCovarianceModelFactory::build(const ProcessSample & sample) const { return buildAsUserDefinedCovarianceModel(sample, false).clone(); } CovarianceModelImplementation::Implementation NonStationaryCovarianceModelFactory::build(const ProcessSample & sample, const Bool isCentered) const { return buildAsUserDefinedCovarianceModel(sample, isCentered).clone(); } struct ComputeCovariancePolicy { const ProcessSample & input_; const Bool isCentered_; CovarianceMatrixCollection & output_; Field mean_; UnsignedInteger dimension_; UnsignedInteger size_; Scalar alpha_; ComputeCovariancePolicy(const ProcessSample & input, const Bool isCentered, CovarianceMatrixCollection & output) : input_(input) , isCentered_(isCentered) , output_(output) , mean_() , dimension_(input.getDimension()) , size_(input.getSize()) , alpha_(1.0 / (size_ - 1.0)) { if (!isCentered) mean_ = input.computeMean(); } inline void operator()( const TBB::BlockedRange & r ) const { if (isCentered_) evaluateCentered(r); else evaluateNonCentered(r); } inline void evaluateCentered( const TBB::BlockedRange & r ) const { for (UnsignedInteger index = r.begin(); index != r.end(); ++index) { const UnsignedInteger i = static_cast< UnsignedInteger >(sqrt(2 * index + 0.25) - 0.5); const UnsignedInteger j = index - (i * (i + 1)) / 2; CovarianceMatrix & matrix(output_[index]); for (UnsignedInteger k = 0; k < dimension_; ++k) { for (UnsignedInteger l = 0; l <= k; ++l) { Scalar coef = 0.0; for (UnsignedInteger sampleIndex = 0; sampleIndex < size_; ++sampleIndex) { coef += input_[sampleIndex][i][k] * input_[sampleIndex][j][l]; } // sampleIndex matrix(k, l) = coef * alpha_; } // l } // k } // index } inline void evaluateNonCentered( const TBB::BlockedRange & r ) const { for (UnsignedInteger index = r.begin(); index != r.end(); ++index) { const UnsignedInteger i = static_cast< UnsignedInteger >(sqrt(2 * index + 0.25) - 0.5); const UnsignedInteger j = index - (i * (i + 1)) / 2; const Point muI(mean_.getValueAtIndex(i)); const Point muJ(mean_.getValueAtIndex(j)); CovarianceMatrix & matrix(output_[index]); for (UnsignedInteger k = 0; k < dimension_; ++k) { const Scalar muIK = muI[k]; for (UnsignedInteger l = 0; l <= k; ++l) { const Scalar muJL = muJ[l]; Scalar coef = 0.0; for (UnsignedInteger sampleIndex = 0; sampleIndex < size_; ++sampleIndex) { coef += (input_[sampleIndex][i][k] - muIK) * (input_[sampleIndex][j][l] - muJL); } // sampleIndex matrix(k, l) = coef * alpha_; } // l } // k } // index } }; /* end struct ComputeCovariancePolicy */ UserDefinedCovarianceModel NonStationaryCovarianceModelFactory::buildAsUserDefinedCovarianceModel(const ProcessSample & sample, const Bool isCentered) const { const Mesh & mesh(sample.getMesh()); const UnsignedInteger N = mesh.getVerticesNumber(); // Create a collection of null CovarianceMatrix const UnsignedInteger size = (N * (N + 1)) / 2; const UnsignedInteger dimension = sample.getDimension(); CovarianceMatrixCollection collection(size); for (UnsignedInteger i = 0; i < size; ++i) collection[i] = CovarianceMatrix(SquareMatrix(dimension).getImplementation()); // Special case for a sample of size 1 if (size == 0) return UserDefinedCovarianceModel(mesh, collection); const ComputeCovariancePolicy policy( sample, isCentered, collection ); TBB::ParallelFor( 0, size, policy ); return UserDefinedCovarianceModel(mesh, collection); } /* Method save() stores the object through the StorageManager */ void NonStationaryCovarianceModelFactory::save(Advocate & adv) const { CovarianceModelFactoryImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void NonStationaryCovarianceModelFactory::load(Advocate & adv) { CovarianceModelFactoryImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Null.cxx000066400000000000000000000033561307543307100202120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Null.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Null */ CLASSNAMEINIT(Null); static const Factory Factory_Null; /* Constructor with parameters */ Null::Null() : HistoryStrategyImplementation() { // Nothing to do } /* Virtual constructor */ Null * Null::clone() const { return new Null(*this); } /* Store the point according to the strategy */ void Null::store(const Point & point) { if (!isInitialized_) { sample_ = Sample(0, point.getDimension()); isInitialized_ = true; } } /* Store the sample according to the strategy */ void Null::store(const Sample & sample) { if (!isInitialized_) { sample_ = Sample(0, sample.getDimension()); isInitialized_ = true; } } /* String converter */ String Null::__repr__() const { OSS oss; oss << "class=" << Null::GetClassName(); oss << " sample_= " << sample_; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ProcessSample.cxx000066400000000000000000000222551307543307100220570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ProcessSample Class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProcessSample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Drawable.hxx" #include "openturns/Description.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Field; CLASSNAMEINIT(ProcessSample); static const Factory Factory_ProcessSample; ProcessSample::ProcessSample() : PersistentObject() , mesh_() , data_(0) { // Nothing to do } /* Default constructor */ ProcessSample::ProcessSample(const UnsignedInteger size, const Field & field) : PersistentObject() , mesh_(field.getMesh()) , data_(SampleCollection(size, field.getValues())) { // Nothing to do } ProcessSample::ProcessSample(const Mesh & mesh, const UnsignedInteger size, const UnsignedInteger dimension) : PersistentObject() , mesh_(mesh) , data_(SampleCollection(size, Sample(mesh.getVerticesNumber(), dimension))) { // Nothing to do } /* Virtual constructor */ ProcessSample * ProcessSample::clone() const { return new ProcessSample(*this); } /* String converter */ String ProcessSample::__repr__() const { OSS oss(true); oss << "class=" << ProcessSample::GetClassName() << " mesh=" << mesh_ << " values=" << data_; return oss; } String ProcessSample::__str__(const String & offset) const { OSS oss(false); oss << offset << "["; String separator(""); for (UnsignedInteger i = 0; i < data_.getSize(); ++i, separator = "\n") oss << separator << offset << "field " << i << ":\n" << getField(i).__str__(offset); oss << "]"; return oss; } /* Partial copy constructor */ void ProcessSample::add(const Field & field) { if (getSize() == 0) { data_.add(field.getValues()); mesh_ = field.getMesh(); } else if ((data_[0].getDimension() == field.getDimension()) && (mesh_ == field.getMesh())) data_.add(field.getValues()); else throw InvalidArgumentException(HERE) << "Error: could not add the field. Either its dimenson or its mesh are incompatible."; } void ProcessSample::add(const Sample & values) { if (values.getSize() != mesh_.getVerticesNumber()) throw InvalidArgumentException(HERE) << "Error: could not add the values. Their size=" << values.getSize() << " does not match the number of vertices=" << mesh_.getVerticesNumber() << " of the mesh."; if ((getSize() > 0) && (data_[0].getDimension() != values.getDimension())) throw InvalidArgumentException(HERE) << "Error: could not add the values. Their dimension=" << values.getDimension() << " does not match the process sample dimension=" << data_[0].getDimension(); data_.add(values); } /* Operators accessors */ Field ProcessSample::getField(const UnsignedInteger index) const { if (index >= data_.getSize()) throw InvalidArgumentException(HERE) << " Error - index should be between 0 and " << data_.getSize() - 1; return Field(mesh_, data_[index]); } void ProcessSample::setField(const Field & field, const UnsignedInteger index) { if (index >= data_.getSize()) throw InvalidArgumentException(HERE) << " Error - index should be between 0 and " << data_.getSize() - 1; if (field.getDimension() != data_[0].getDimension()) throw InvalidArgumentException(HERE) << "Error: expected a field of dimension=" << data_[0].getDimension() << ", got a field of dimension=" << field.getDimension(); data_[index] = field.getValues(); } Sample & ProcessSample::operator[] (const UnsignedInteger index) { if (index >= data_.getSize()) throw InvalidArgumentException(HERE) << " Error - index should be between 0 and " << data_.getSize() - 1; return data_[index]; } const Sample & ProcessSample::operator[] (const UnsignedInteger index) const { if (index >= data_.getSize()) throw InvalidArgumentException(HERE) << " Error - index should be between 0 and " << data_.getSize() - 1; return data_[index]; } /* Time grid accessors */ RegularGrid ProcessSample::getTimeGrid() const { return RegularGrid(mesh_); } /* Mesh accessors */ Mesh ProcessSample::getMesh() const { return mesh_; } /* Dimension accessors */ UnsignedInteger ProcessSample::getDimension() const { if (data_.getSize() == 0) return 0; return data_[0].getDimension(); } /* Dimension accessors */ UnsignedInteger ProcessSample::getSize() const { return data_.getSize(); } Field ProcessSample::computeMean() const { const UnsignedInteger size = getSize(); if (size == 0) return Field(); if (size == 1) return Field(mesh_, data_[0]); Sample meanValues(data_[0]); for (UnsignedInteger i = 1; i < size; ++i) meanValues += data_[i]; meanValues *= Point(getDimension(), 1.0 / size); return Field(mesh_, meanValues); } /* Compute the sample of spatial means of each field */ Sample ProcessSample::computeTemporalMean() const { if (!mesh_.isRegular() || (mesh_.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the temporal mean is defined only when the mesh is regular and of dimension 1."; return computeSpatialMean(); } /* Compute the sample of spatial means of each field */ Sample ProcessSample::computeSpatialMean() const { const UnsignedInteger size = getSize(); const UnsignedInteger dimension = getDimension(); Sample result(size, dimension); for (UnsignedInteger i = 0; i < size; ++i) result[i] = data_[i].computeMean(); return result; } /* * Method computeQuantilePerComponent() gives the quantile per component of the sample */ Field ProcessSample::computeQuantilePerComponent(const Scalar prob) const { const UnsignedInteger size = getSize(); if (size == 0) return Field(); if (size == 1) return Field(mesh_, data_[0]); // This initialization set the correct time grid into result const UnsignedInteger dimension = data_[0].getDimension(); const UnsignedInteger length = data_[0].getSize(); Sample result(length, dimension); // Loop over the location indices for (UnsignedInteger i = 0; i < length; ++i) { Sample dataI(size, dimension); for (UnsignedInteger j = 0; j < size; ++j) dataI[j] = data_[j][i]; result[i] = dataI.computeQuantilePerComponent(prob); } return Field(mesh_, result); } /* Get the i-th marginal process sample */ ProcessSample ProcessSample::getMarginal(const UnsignedInteger index) const { const UnsignedInteger size = data_.getSize(); ProcessSample result(mesh_, size, 1); for (UnsignedInteger i = 0; i < size; ++i) result[i] = data_[i].getMarginal(index); return result; } /* Get the marginal field corresponding to indices dimensions */ ProcessSample ProcessSample::getMarginal(const Indices & indices) const { const UnsignedInteger size = data_.getSize(); ProcessSample result(mesh_, size, indices.getSize()); for (UnsignedInteger i = 0; i < size; ++i) result[i] = data_[i].getMarginal(indices); return result; } /* Draw a marginal of the ProcessSample, ie the collection of all the Field marginals */ Graph ProcessSample::drawMarginal(const UnsignedInteger index) const { if (mesh_.getDimension() != 1) throw NotDefinedException(HERE) << "Error: cannot draw a marginal sample if the mesh is of dimension greater than one. Here dimension=" << mesh_.getDimension(); if (index > getDimension() - 1 ) throw InvalidArgumentException(HERE) << "Error : indice should be in {0,...," << getDimension() - 1 << "}"; // Discretization of the x axis const String title(OSS() << getName() << " - " << index << " marginal" ); Graph graph(title, "Time", "Values", true, "topright"); const UnsignedInteger size = data_.getSize(); const Description colors(Drawable::BuildDefaultPalette(size)); for (UnsignedInteger i = 0; i < size; ++i) { Drawable drawable(Field(mesh_, data_[i]).drawMarginal(index).getDrawable(0)); drawable.setColor(colors[i]); graph.add(drawable); } return graph; } /* Method save() stores the object through the StorageManager */ void ProcessSample::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "mesh_", mesh_); adv.saveAttribute( "data_", data_ ); } /* Method load() reloads the object from the StorageManager */ void ProcessSample::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "mesh_", mesh_); adv.loadAttribute( "data_", data_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ProductCovarianceModel.cxx000066400000000000000000000245531307543307100236760ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProductCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/AbsoluteExponential.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< CovarianceModel >); static const Factory > Factory_PersistentCollection_CovarianceModel; CLASSNAMEINIT(ProductCovarianceModel); static const Factory Factory_ProductCovarianceModel; /* Default constructor */ ProductCovarianceModel::ProductCovarianceModel(const UnsignedInteger spatialDimension) : CovarianceModelImplementation(spatialDimension) , collection_(spatialDimension, AbsoluteExponential(1)) { // Update the default values for the amplitude setAmplitude(Point(spatialDimension, collection_[0].getAmplitude()[0])); activeParameter_ = Indices(getScale().getSize() + getAmplitude().getSize()); activeParameter_.fill(); } /* Parameters constructor */ ProductCovarianceModel::ProductCovarianceModel(const CovarianceModelCollection & collection) : CovarianceModelImplementation() { setCollection(collection); activeParameter_ = Indices(getScale().getSize() + getAmplitude().getSize()); activeParameter_.fill(); } /* Collection accessor */ void ProductCovarianceModel::setCollection(const CovarianceModelCollection & collection) { // Check if the given models have a spatial dimension=1 const UnsignedInteger size = collection.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the collection must have a positive size, here size=0"; // Scale & amplitude Point scale(0); Point amplitude(1, 1.0); spatialDimension_ = 0; // Get dimension: should be the same for all elements dimension_ = 1; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger localDimension = collection[i].getDimension(); if (dimension_ != localDimension) throw InvalidArgumentException(HERE) << "In ProductCovarianceModel::setCollection, incompatible dimension of the element #" << i << " dimension of element = " << localDimension << ", dimension of the model = " << dimension_; // Add element to the collection // Get its scale, which is seen as a concatenation of collection scale const UnsignedInteger localSpatialDimension = collection[i].getSpatialDimension(); spatialDimension_ += localSpatialDimension; scale.add(collection[i].getScale()); // Get amplitude as amplitude product const Scalar localAmplitude = collection[i].getAmplitude()[0]; amplitude[0] *= localAmplitude; } // Set collection collection_ = collection; // Set amplitude & scale scale_ = scale; setAmplitude(amplitude); // Fix all submodels as correlation models for (UnsignedInteger i = 0; i < size; ++i) collection_[i].setAmplitude(Point(1, 1.0)); } const ProductCovarianceModel::CovarianceModelCollection & ProductCovarianceModel::getCollection() const { return collection_; } /* Virtual constructor */ ProductCovarianceModel * ProductCovarianceModel::clone() const { return new ProductCovarianceModel(*this); } /* Computation of the covariance density function */ Scalar ProductCovarianceModel::computeStandardRepresentative(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; Scalar rho = 1.0; UnsignedInteger start = 0; for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) { const UnsignedInteger localSpatialDimension = collection_[i].getSpatialDimension(); const UnsignedInteger stop = start + localSpatialDimension; Point localS(localSpatialDimension); std::copy(s.begin() + start, s.begin() + stop, localS.begin()); Point localT(localSpatialDimension); std::copy(t.begin() + start, t.begin() + stop, localT.begin()); rho *= collection_[i].computeStandardRepresentative(localS, localT); start = stop; } return rho; } /* Gradient */ Matrix ProductCovarianceModel::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const UnsignedInteger size = collection_.getSize(); Point localCovariances(size); Scalar leftValue = 1.0; Scalar rightValue = 1.0; UnsignedInteger start = 0; Matrix gradient(spatialDimension_, 1); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger localSpatialDimension = collection_[i].getSpatialDimension(); const UnsignedInteger stop = start + localSpatialDimension; Point localS(localSpatialDimension); std::copy(s.begin() + start, s.begin() + stop, localS.begin()); Point localT(localSpatialDimension); std::copy(t.begin() + start, t.begin() + stop, localT.begin()); Matrix localGradient(collection_[i].partialGradient(localS, localT)); for (UnsignedInteger j = 0; j < localSpatialDimension; ++j) localGradient(j, 0) *= leftValue; std::copy(localGradient.getImplementation()->begin(), localGradient.getImplementation()->end(), gradient.getImplementation()->begin() + start); localCovariances[i] = collection_[i](localS, localT)(0, 0); leftValue *= localCovariances[i]; start = stop; } // Decrement start = getSpatialDimension(); // Second step for (UnsignedInteger i = size; i > 0; --i) { const UnsignedInteger localSpatialDimension = collection_[i - 1].getSpatialDimension(); start -= localSpatialDimension; for (UnsignedInteger j = 0; j < localSpatialDimension; ++j) gradient(start + j, 0) *= rightValue; rightValue *= localCovariances[i - 1]; } return gradient * amplitude_[0] * amplitude_[0]; } /* Parameters accessor */ void ProductCovarianceModel::setFullParameter(const Point & parameter) { const UnsignedInteger parameterDimension = getParameter().getDimension(); if (parameter.getDimension() != parameterDimension) throw InvalidArgumentException(HERE) << "Error: parameters dimension should be 1 (got " << parameter.getDimension() << ")"; // Convention is the following : // Scale parameters then amplitude parameter // As it is a 1 d model, scale size = parameterDimension - 1 Point scale(parameterDimension - 1); for (UnsignedInteger i = 0; i < parameterDimension - 1; ++i) { scale[i] = parameter[i]; } setScale(scale); // last value of corresponds to amplitude setAmplitude(Point(1, parameter[parameterDimension - 1])); } Point ProductCovarianceModel::getFullParameter() const { // Convention scale + amplitude // local amplitudes is 1 // amplitude vector is of size 1 Point result(0); result.add(scale_); result.add(amplitude_); return result; } Description ProductCovarianceModel::getFullParameterDescription() const { const UnsignedInteger size = spatialDimension_ + 1; Description description(size); for (UnsignedInteger i = 0; i < size - 1; ++i) description[i] = OSS() << "scale_" << i; // Last element is amplitude description[size - 1] = "amplitude"; return description; } void ProductCovarianceModel::setScale(const Point & scale) { if (scale.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: scale dimension should be " << spatialDimension_ << ". Here we got " << scale.getDimension(); // Set the scale UnsignedInteger start = 0; for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) { const UnsignedInteger atomScaleDimension = collection_[i].getScale().getDimension(); const UnsignedInteger stop = start + atomScaleDimension; Point atomScale(atomScaleDimension); std::copy(scale.begin() + start, scale.begin() + stop, atomScale.begin()); start = stop; collection_[i].setScale(atomScale); } // Copy scale (for get accessor) scale_ = scale; } /* Is it a stationary model ? */ Bool ProductCovarianceModel::isStationary() const { for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) if (!collection_[i].isStationary()) return false; return true; } /* String converter */ String ProductCovarianceModel::__repr__() const { OSS oss; oss << "class=" << ProductCovarianceModel::GetClassName() << " input dimension=" << spatialDimension_ << " models=" << collection_; return oss; } /* String converter */ String ProductCovarianceModel::__str__(const String & offset) const { return __repr__(); } /* Marginal accessor */ ProductCovarianceModel::Implementation ProductCovarianceModel::getMarginal(const UnsignedInteger index) const { if (index >= dimension_) throw InvalidArgumentException(HERE) << "Error: index=" << index << " must be less than output dimension=" << dimension_; return collection_[index].getImplementation(); } /* Method save() stores the object through the StorageManager */ void ProductCovarianceModel::save(Advocate & adv) const { CovarianceModelImplementation::save(adv); adv.saveAttribute("collection_", collection_); } /* Method load() reloads the object from the StorageManager */ void ProductCovarianceModel::load(Advocate & adv) { CovarianceModelImplementation::load(adv); adv.loadAttribute("collection_", collection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/RandomGenerator.cxx000066400000000000000000000100261307543307100223570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomGenerator implements methods to control the random generator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "dsfmt.h" #include "openturns/RandomGenerator.hxx" #include "openturns/RandomGeneratorState.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS class MersenneTwister : public tutils::dsfmt19937 { public: explicit MersenneTwister(UnsignedInteger seed) : tutils::dsfmt19937(seed) {} }; Bool RandomGenerator::IsInitialized = false; MersenneTwister RandomGenerator::Generator(ResourceMap::GetAsUnsignedInteger( "RandomGenerator-InitialSeed" )); /* Sub-classes methods */ /* DefaultConstructor */ RandomGenerator::RandomGenerator() { // Nothing to do } /* Seed accessor */ void RandomGenerator::SetSeed(const UnsignedInteger seed) { Generator.init((uint32_t)(seed)); IsInitialized = true; } /* State accessor */ void RandomGenerator::SetState(const RandomGeneratorState & state) { UnsignedInteger size = state.buffer_.getSize(); UnsignedInteger stateSize = Generator.get_state_length_32(); /* The unusual case, the given seed is too small. It is completed with 0 */ Indices stateArray(state.buffer_); for (UnsignedInteger i = size; i < stateSize; i++) stateArray.add(0); // Set the state array Generator.set_state(&stateArray[0]); // Set the index Generator.set_index(state.index_); IsInitialized = true; return; } /* Seed accessor */ RandomGeneratorState RandomGenerator::GetState() { UnsignedInteger size = (UnsignedInteger)(Generator.get_state_length_32()); // Create the state and get the index at the same time RandomGeneratorState state(Indices(size, 0), (UnsignedInteger)(Generator.get_index())); // Get the state array Generator.get_state(&state.buffer_[0]); return state; } /* Generate a pseudo-random number uniformly distributed over ]0, 1[ */ Scalar RandomGenerator::Generate() { if (!IsInitialized) { SetSeed(ResourceMap::GetAsUnsignedInteger( "RandomGenerator-InitialSeed" )); IsInitialized = true; } return Generator.gen(); } /* Generate a pseudo-random integer uniformly distributed over [[0,...,n-1]] */ UnsignedInteger RandomGenerator::IntegerGenerate(const UnsignedInteger n) { if (!IsInitialized) { SetSeed(ResourceMap::GetAsUnsignedInteger( "RandomGenerator-InitialSeed" )); IsInitialized = true; } return Generator.igen((uint32_t)(n)); } /* Generate a pseudo-random vector of numbers uniformly distributed over ]0, 1[ */ Point RandomGenerator::Generate(const UnsignedInteger size) { Point result(size); if (!IsInitialized) { SetSeed(ResourceMap::GetAsUnsignedInteger( "RandomGenerator-InitialSeed" )); IsInitialized = true; } for (UnsignedInteger i = 0; i < size; i++) { result[i] = Generator.gen(); } return result; } /* Generate a pseudo-random vector of numbers uniformly distributed over ]0, 1[ */ RandomGenerator::UnsignedIntegerCollection RandomGenerator::IntegerGenerate(const UnsignedInteger size, const UnsignedInteger n) { UnsignedIntegerCollection result(size); if (!IsInitialized) { SetSeed(ResourceMap::GetAsUnsignedInteger( "RandomGenerator-InitialSeed" )); IsInitialized = true; } for (UnsignedInteger i = 0; i < size; i++) { result[i] = Generator.igen((uint32_t)(n)); } return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/RandomGeneratorState.cxx000066400000000000000000000055651307543307100233740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomGeneratorState implements methods to manage the random generator state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomGeneratorState.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Indices.hxx" #include "openturns/OSS.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RandomGeneratorState); static const Factory Factory_RandomGeneratorState; /* Default constructor */ RandomGeneratorState::RandomGeneratorState() : buffer_(0), index_(0) { // Nothing to do } /* Standard constructor */ RandomGeneratorState::RandomGeneratorState(const Indices buffer, const UnsignedInteger index) : buffer_(buffer), index_(index) { // Nothing to do } /* Virtual constructor */ RandomGeneratorState * RandomGeneratorState::clone() const { return new RandomGeneratorState(*this); } /* String converter */ String RandomGeneratorState::__repr__() const { return OSS(true) << "RandomGeneratorState(" << "buffer=" << buffer_ << ", " << "index=" << index_ << ")"; } String RandomGeneratorState::__str__(const String & offset) const { return OSS(false) << "RandomGeneratorState(" << "buffer=" << buffer_ << ", " << "index=" << index_ << ")"; } /* Buffer Accessor */ Indices RandomGeneratorState::getBuffer() const { return buffer_; } /* Index Accessor */ UnsignedInteger RandomGeneratorState::getIndex() const { return index_; } /* Comparison operator */ Bool RandomGeneratorState::operator ==(const RandomGeneratorState & other) const { Bool result = true; if (this != &other) result = (buffer_ == other.buffer_) && (index_ == other.index_); return result; } /* Method save() stores the object through the StorageManager */ void RandomGeneratorState::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "buffer_", buffer_); adv.saveAttribute( "index_", index_); } /* Method load() reloads the object from the StorageManager */ void RandomGeneratorState::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "buffer_", buffer_); adv.loadAttribute( "index_", index_); } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Base/Stat/RankMCovarianceModel.cxx000066400000000000000000000212071307543307100232570ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RankMCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/ConstantBasisFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RankMCovarianceModel); static const Factory Factory_RankMCovarianceModel; /* Default constructor */ RankMCovarianceModel::RankMCovarianceModel(const UnsignedInteger spatialDimension) : CovarianceModelImplementation(spatialDimension) , variance_(1, 1.0) , covariance_(0) , basis_() , functions_(0) { // Use a constant basis for the default constructor setBasis(ConstantBasisFactory(1).build()); } /* Parameters constructor */ RankMCovarianceModel::RankMCovarianceModel(const Point & variance, const Basis & basis) : CovarianceModelImplementation() , variance_(variance) , covariance_(0) , basis_() , functions_(0) { if (variance.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: expected a vector of marginal variances of positive dimension, got dimension=0."; setBasis(basis); } /* Parameters constructor */ RankMCovarianceModel::RankMCovarianceModel(const CovarianceMatrix & covariance, const Basis & basis) : CovarianceModelImplementation() , variance_(0) , covariance_(0) , basis_() , functions_(0) { if (covariance.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: expected a covariance of positive dimension, got dimension=0."; // Check if the covariance is diagonal if (covariance.isDiagonal()) { variance_ = Point(covariance.getDimension()); for (UnsignedInteger i = 0; i < variance_.getDimension(); ++i) variance_[i] = covariance(i, i); } else covariance_ = covariance; setBasis(basis); } /* Virtual constructor */ RankMCovarianceModel * RankMCovarianceModel::clone() const { return new RankMCovarianceModel(*this); } /* Computation of the covariance function * Suppose that X(\omega,t)=\sum_{i=1}^M\xi_i(\omega)\phi_i(t) * with E[\xi_i]=0. Then: * C(s,t)=E[X(\omega,s)X(\omega,t)^t] * =\sum_{i=1}^M\sum_{j=1}^M\phi_i(s)\phi_j(t)^tE[\xi_i\xi_j] * and when the components of (\xi_1,\dots,\xi_M) are decorrelated with unit variance, it reduces to: * C(s,t)=\sum_{i=1}^M\alpha_i^2\phi_i(s)\phi_i(t)^t */ CovarianceMatrix RankMCovarianceModel::operator() (const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; MatrixImplementation result(dimension_, dimension_); const UnsignedInteger size = functions_.getSize(); // If the variance are uncorrelated if (covariance_.getDimension() == 0) for (UnsignedInteger i = 0; i < size; ++i) { const MatrixImplementation phiS(dimension_, 1, functions_[i](s)); const MatrixImplementation phiT(1, dimension_, functions_[i](t) * variance_[i]); result += phiS.genProd(phiT); } else { for (UnsignedInteger i = 0; i < size; ++i) { const MatrixImplementation phiS(dimension_, 1, functions_[i](s)); for (UnsignedInteger j = 0; j < size; ++j) { const MatrixImplementation phiT(1, dimension_, functions_[j](t)); result += phiS.genProd(phiT) * covariance_(i, j); } // j } // i } // covariance dimension > 0 return result; } /* Gradient */ Matrix RankMCovarianceModel::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; throw NotYetImplementedException(HERE); } CovarianceMatrix RankMCovarianceModel::discretize(const Sample & vertices) const { if (vertices.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has a dimension=" << vertices.getDimension() << " different from the input dimension=" << spatialDimension_; const UnsignedInteger size = vertices.getSize(); const UnsignedInteger fullSize = size * dimension_; // Precompute the discretizations of the functions over the vertices const UnsignedInteger basisSize = functions_.getSize(); MatrixImplementation basisDiscretization(fullSize, basisSize); MatrixImplementation::iterator start = basisDiscretization.begin(); // If the covariance is diagonal if (covariance_.getDimension() == 0) { for (UnsignedInteger i = 0; i < basisSize; ++i) { const Point data(functions_[i](vertices).getImplementation()->getData() * std::sqrt(variance_[i])); std::copy(data.begin(), data.end(), start); start += fullSize; } // C = M.M^t return basisDiscretization.computeGram(false); } // Here covariance_ is left untouched by computeCholesky(), but the method in not const for (UnsignedInteger i = 0; i < basisSize; ++i) { const Point data(functions_[i](vertices).getImplementation()->getData()); std::copy(data.begin(), data.end(), start); start += fullSize; } return (covariance_.getImplementation()->symProd(basisDiscretization, 'R')).genProd(basisDiscretization, false, true); } /* Is it a stationary model ? */ Bool RankMCovarianceModel::isStationary() const { return false; } /* Covariance accessor */ CovarianceMatrix RankMCovarianceModel::getCovariance() const { return covariance_; } Point RankMCovarianceModel::getVariance() const { return variance_; } /* Basis accessor */ Basis RankMCovarianceModel::getBasis() const { return basis_; } Basis::FunctionCollection RankMCovarianceModel::getFunctions() const { return functions_; } /* Basis accessor */ void RankMCovarianceModel::setBasis(const Basis & basis) { const UnsignedInteger size = std::max(variance_.getSize(), covariance_.getDimension()); if (size == 0) throw InvalidArgumentException(HERE) << "Error: there must be at least one coefficient"; functions_ = Basis::FunctionCollection(size); for (UnsignedInteger i = 0; i < size; ++i) functions_[i] = basis.build(i); scale_ = Point(functions_[0].getInputDimension(), 1.0); amplitude_ = Point(functions_[0].getOutputDimension(), 1.0); basis_ = basis; } /* String converter */ String RankMCovarianceModel::__repr__() const { OSS oss; oss << "class=" << RankMCovarianceModel::GetClassName() << ", variance=" << variance_ << ", covariance=" << covariance_ << ", basis=" << basis_ << ", functions=" << functions_; return oss; } /* String converter */ String RankMCovarianceModel::__str__(const String & offset) const { OSS oss(false); oss << offset << "class=" << RankMCovarianceModel::GetClassName(); if (covariance_.getDimension() > 0) oss << ", covariance=" << covariance_; else oss << ", variance=" << variance_; oss << ", basis=" << basis_ << ", functions=" << functions_; return oss; } /* Method save() stores the object through the StorageManager */ void RankMCovarianceModel::save(Advocate & adv) const { CovarianceModelImplementation::save(adv); adv.saveAttribute("variance_", variance_); adv.saveAttribute("covariance_", covariance_); adv.saveAttribute("basis_", basis_); adv.saveAttribute("functions_", functions_); } /* Method load() reloads the object from the StorageManager */ void RankMCovarianceModel::load(Advocate & adv) { CovarianceModelImplementation::load(adv); adv.loadAttribute("variance_", variance_); adv.loadAttribute("covariance_", covariance_); adv.loadAttribute("basis_", basis_); adv.loadAttribute("functions_", functions_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/ReverseHaltonSequence.cxx000066400000000000000000000066241307543307100235530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the ReverseHalton' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ReverseHaltonSequence.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ReverseHaltonSequence); /* Constructor with parameters */ ReverseHaltonSequence::ReverseHaltonSequence(const UnsignedInteger dimension) : LowDiscrepancySequenceImplementation(dimension) { initialize(dimension); } /* Virtual constructor */ ReverseHaltonSequence * ReverseHaltonSequence::clone() const { return new ReverseHaltonSequence(*this); } /* Initialize the sequence */ void ReverseHaltonSequence::initialize(const UnsignedInteger dimension) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Dimension must be > 0."; dimension_ = dimension; base_ = ComputeFirstPrimeNumbers(dimension); seed_ = ResourceMap::GetAsUnsignedInteger( "ReverseHaltonSequence-InitialSeed" ); } /* Generate a pseudo-random vector of independant numbers uniformly distributed over [0, 1[ See Bart Vandewoestyne, Ronald Cools, "Good permutations for deterministic scrambled Halton sequences in terms of L2-discrepancy", Journal of Computational and Applied Mathematics, 189, 341-361 (2006) */ Point ReverseHaltonSequence::generate() const { Point realization(dimension_); // Loop over the components for (UnsignedInteger i = 0; i < dimension_; ++i) { Scalar xI = 0.0; const Unsigned64BitsInteger radix = base_[i]; const Scalar inverseRadix = 1.0 / radix; Scalar inverseRadixN = inverseRadix; Unsigned64BitsInteger currentSeed = seed_; while (currentSeed > 0) { const UnsignedInteger digit = currentSeed % radix; if (digit != 0) xI += (radix - digit) * inverseRadixN; currentSeed /= radix; inverseRadixN *= inverseRadix; } realization[i] = xI; } ++seed_; return realization; } /* String converter */ String ReverseHaltonSequence::__repr__() const { OSS oss; oss << "class=" << ReverseHaltonSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__repr__() << " base=" << base_ << " seed=" << seed_; return oss; } void ReverseHaltonSequence::save(Advocate & adv) const { LowDiscrepancySequenceImplementation::save(adv); adv.saveAttribute( "base_", base_); adv.saveAttribute( "seed_", seed_); } /* Method load() reloads the object from the StorageManager */ void ReverseHaltonSequence::load(Advocate & adv) { LowDiscrepancySequenceImplementation::load(adv); initialize(dimension_); adv.loadAttribute( "base_", base_); adv.loadAttribute( "seed_", seed_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/Sample.cxx000066400000000000000000000476451307543307100205320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Sample implements blank free samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Sample.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Sample); /* Factory of Sample from CSV file */ Sample Sample::ImportFromCSVFile(const FileName & fileName, const String & csvSeparator) { Sample sample(SampleImplementation::BuildFromCSVFile(fileName, csvSeparator)); return sample; } /* Factory of Sample from Text file */ Sample Sample::ImportFromTextFile(const FileName & fileName, const String & separator) { Sample sample(SampleImplementation::BuildFromTextFile(fileName, separator)); return sample; } /* Save to CSV file */ void Sample::exportToCSVFile(const FileName & filename, const String & csvSeparator) const { getImplementation()->exportToCSVFile(filename, csvSeparator); } /* Store a sample in a temporary text file, one realization by line. Returns the file name. */ String Sample::storeToTemporaryFile() const { return getImplementation()->storeToTemporaryFile(); } /* Export a sample as a matrix, one row by realization, in a format suitable to exchange with R. */ String Sample::streamToRFormat() const { return getImplementation()->streamToRFormat(); } /* Default constructor */ Sample::Sample() : TypedInterfaceObject(new SampleImplementation(0, 1)) { // Nothing to do } /* Constructor with size and dimension */ Sample::Sample(const UnsignedInteger size, const UnsignedInteger dim) : TypedInterfaceObject(new SampleImplementation(size, dim)) { // Nothing to do } /* Constructor from implementation */ Sample::Sample(const SampleImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ Sample::Sample(const Implementation & implementation) : TypedInterfaceObject(implementation) { // Nothing to do } /* Constructor from a Point (all elements are equal to the Point) */ Sample::Sample(const UnsignedInteger size, const Point & point) : TypedInterfaceObject(new SampleImplementation(size, point)) { // Nothing to do } /* Partial copy constructor */ Sample::Sample(const Sample other, const UnsignedInteger first, const UnsignedInteger last) : TypedInterfaceObject(new SampleImplementation(*other.getImplementation(), other.getImplementation()->begin() + first, other.getImplementation()->begin() + last)) { // Nothing to do } /* Constructor from a collection of Point */ Sample::Sample(const Collection & coll) : TypedInterfaceObject(new SampleImplementation(coll)) { // Nothing to do } /* Constructor from a collection of Indices */ Sample::Sample(const Collection & coll) : TypedInterfaceObject(new SampleImplementation(coll)) { // Nothing to do } /* Comparison operator */ Bool Sample::operator ==(const Sample & other) const { return *getImplementation() == *(other.getImplementation()); } /* Comparison operator */ Bool Sample::operator !=(const Sample & other) const { return !operator==(other); } NSI_point Sample::operator [] (const UnsignedInteger index) { #ifdef DEBUG_BOUNDCHECKING copyOnWrite(); return this->at(index); #else copyOnWrite(); return (*getImplementation())[index]; #endif /* DEBUG_BOUNDCHECKING */ } NSI_const_point Sample::operator [] (const UnsignedInteger index) const { #ifdef DEBUG_BOUNDCHECKING return this->at(index); #else return (*getImplementation())[index]; #endif /* DEBUG_BOUNDCHECKING */ } Scalar & Sample::operator () (const UnsignedInteger i, const UnsignedInteger j) { #ifdef DEBUG_BOUNDCHECKING // No copyOnWrite() as the at() method already do it return this->at(i, j); #else copyOnWrite(); return (*getImplementation())[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } const Scalar & Sample::operator () (const UnsignedInteger i, const UnsignedInteger j) const { #ifdef DEBUG_BOUNDCHECKING return this->at(i, j); #else return (*getImplementation())[i][j]; #endif /* DEBUG_BOUNDCHECKING */ } NSI_point Sample::at (const UnsignedInteger index) { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; copyOnWrite(); return (*getImplementation())[index]; } NSI_const_point Sample::at (const UnsignedInteger index) const { if (index >= getSize()) throw OutOfBoundException(HERE) << "Index (" << index << ") is not less than size (" << getSize() << ")"; return (*getImplementation())[index]; } Scalar & Sample::at (const UnsignedInteger i, const UnsignedInteger j) { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than size (" << getSize() << ")"; if (j >= getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than dimension (" << getDimension() << ")"; copyOnWrite(); return (*getImplementation())[i][j]; } const Scalar & Sample::at (const UnsignedInteger i, const UnsignedInteger j) const { if (i >= getSize()) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than size (" << getSize() << ")"; if (j >= getDimension()) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than dimension (" << getDimension() << ")"; return (*getImplementation())[i][j]; } const Scalar * Sample::__baseaddress__ () const { return getImplementation()->__baseaddress__(); } UnsignedInteger Sample::__elementsize__ () const { return getImplementation()->__elementsize__(); } /* Whether the list contains the value val */ Bool Sample::contains(const Point & val) const { return getImplementation()->contains(val); } /* String converter */ String Sample::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); } String Sample::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Description accessor */ void Sample::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } /* Description accessor */ Description Sample::getDescription() const { return getImplementation()->getDescription(); } /* Dimension accessor */ UnsignedInteger Sample::getDimension() const { return getImplementation()->getDimension(); } /* Size accessor */ UnsignedInteger Sample::getSize() const { return getImplementation()->getSize(); } /* Maximum accessor */ Point Sample::getMax() const { return getImplementation()->getMax(); } /* Minimum accessor */ Point Sample::getMin() const { return getImplementation()->getMin(); } /* Method add() appends an element to the collection */ void Sample::add(const Point & point) { if ( (getSize() > 0) && (getDimension() != point.getDimension()) ) throw InvalidArgumentException(HERE) << "Point has invalid dimension (dim=" << point.getDimension() << ") for sample (dim=" << getDimension() << ")"; copyOnWrite(); getImplementation()->add(point); } /* Method add() appends another sample to the collection */ void Sample::add(const Sample & sample) { if ( (getSize() > 0) && (getDimension() != sample.getDimension()) ) throw InvalidArgumentException(HERE) << "Sample has invalid dimension (dim=" << sample.getDimension() << ") for sample (dim=" << getDimension() << ")"; copyOnWrite(); getImplementation()->add(*sample.getImplementation()); } /* Stack another sample to the current sample */ void Sample::stack(const Sample & sample) { copyOnWrite(); getImplementation()->stack(*sample.getImplementation()); } void Sample::erase(const UnsignedInteger first, const UnsignedInteger last) { copyOnWrite(); getImplementation()->erase(first, last); } void Sample::erase(const UnsignedInteger index) { copyOnWrite(); getImplementation()->erase(index, index + 1); } void Sample::erase(SampleImplementation::iterator first, SampleImplementation::iterator last) { copyOnWrite(); getImplementation()->erase(first, last); } void Sample::clear() { copyOnWrite(); getImplementation()->clear(); } /* * Method split() trunk the sample before the index passed as argument * and returns the remainder as new sample. This method tries its best not for doubling * memory usage. */ Sample Sample::split(const UnsignedInteger index) { copyOnWrite(); // We first save the size of the original sample UnsignedInteger theSize = getSize(); // We first check that the index is in the sample's range if (index > theSize) throw OutOfBoundException(HERE) << "Index over size. Index=" << index << " size=" << theSize; // Quick check for easy cases if (index == theSize) return Sample(0, getDimension()); if (index >= theSize / 2) // Strategy 1. { // We take two iterators : // * one on the first element of the returned sample (at the i-th element) // * one at the end of the returned sample SampleImplementation::iterator first = getImplementation()->begin() + index; SampleImplementation::iterator last = getImplementation()->end(); // We create a new sample by copy-constructing it from the two iterators Sample newSample(new SampleImplementation(*getImplementation(), first, last)); // We clear the copied elements of the original sample (*this) erase(first, last); // We return the new sample return newSample; } else // Strategy 2. { // We take two iterators : // * one at the beginning of the original sample // * one before the beginning of the returned sample SampleImplementation::iterator first = getImplementation()->begin(); SampleImplementation::iterator last = getImplementation()->begin() + index; // We create a new sample by copy-constructing it from the two iterators Sample newSample(new SampleImplementation(*getImplementation(), first, last)); // We clear the copied elements of the original sample (*this) erase(first, last); // We swap the two samples this->swap(newSample); // We return the new sample return newSample; } } /* * Method computeMean() gives the mean of the sample, based on the formula * mean = sum of the elements in the sample / size of the sample */ Point Sample::computeMean() const { return getImplementation()->computeMean(); } /* * Method computeCovariance() gives the covariance of the sample */ CovarianceMatrix Sample::computeCovariance() const { return getImplementation()->computeCovariance(); } /* * Method computeStandardDeviation() gives the standard deviation of the sample */ TriangularMatrix Sample::computeStandardDeviation() const { return getImplementation()->computeStandardDeviation(); } /* * Method computeStandardDeviationPerComponent() gives the standard deviation of each component of the sample */ Point Sample::computeStandardDeviationPerComponent() const { return getImplementation()->computeStandardDeviationPerComponent(); } /* * Method computePearsonCorrelation() gives the Pearson correlation matrix of the sample */ CorrelationMatrix Sample::computeLinearCorrelation() const { return getImplementation()->computeLinearCorrelation(); } CorrelationMatrix Sample::computePearsonCorrelation() const { return getImplementation()->computePearsonCorrelation(); } /* * Method computeSpearmanCorrelation() gives the Spearman correlation matrix of the sample */ CorrelationMatrix Sample::computeSpearmanCorrelation() const { return getImplementation()->computeSpearmanCorrelation(); } /* * Method computeKendallTau() gives the Kendall tau matrix of the sample */ CorrelationMatrix Sample::computeKendallTau() const { return getImplementation()->computeKendallTau(); } /* * Method computeRange gives the range of the sample (by component) */ Point Sample::computeRange() const { return getImplementation()->computeRange(); } /* * Method computeMedian() gives the median of the sample (by component) */ Point Sample::computeMedian() const { return getImplementation()->computeMedian(); } /* * Method computeVariance() gives the variance of the sample (by component) */ Point Sample::computeVariance() const { return getImplementation()->computeVariance(); } /* * Method computeSkewness() gives the skewness of the sample (by component) */ Point Sample::computeSkewness() const { return getImplementation()->computeSkewness(); } /* * Method computeKurtosis() gives the kurtosis of the sample (by component) */ Point Sample::computeKurtosis() const { return getImplementation()->computeKurtosis(); } /* * Gives the centered moment of order k of the sample (by component) */ Point Sample::computeCenteredMoment(const UnsignedInteger k) const { return getImplementation()->computeCenteredMoment(k); } /* * Gives the raw moment of order k of the sample (by component) */ Point Sample::computeRawMoment(const UnsignedInteger k) const { return getImplementation()->computeRawMoment(k); } /* * Method computeQuantilePerComponent() gives the quantile per component of the sample */ Point Sample::computeQuantilePerComponent(const Scalar prob) const { return getImplementation()->computeQuantilePerComponent(prob); } /* * Method computeQuantile() gives the N-dimension quantile of the sample */ Point Sample::computeQuantile(const Scalar prob) const { return getImplementation()->computeQuantile(prob); } /* * Get the empirical CDF of the sample */ Scalar Sample::computeEmpiricalCDF(const Point & point, const Bool tail) const { return getImplementation()->computeEmpiricalCDF(point, tail); } /* * Get the position of a point in the sample. * Returns size if the point does not belong to the sample. */ UnsignedInteger Sample::find(const Point & point) const { return std::find(getImplementation()->begin(), getImplementation()->end(), point) - getImplementation()->begin(); } /* * Translate realizations in-place */ Sample & Sample::operator += (const Scalar translation) { copyOnWrite(); if (translation != 0.0) getImplementation()->operator +=(Point(getDimension(), translation)); return *this; } Sample & Sample::operator += (const Point & translation) { copyOnWrite(); getImplementation()->operator +=(translation); return *this; } Sample & Sample::operator += (const Sample & translation) { copyOnWrite(); getImplementation()->operator +=(*translation.getImplementation()); return *this; } Sample & Sample::operator -= (const Scalar translation) { copyOnWrite(); if (translation != 0.0) getImplementation()->operator -=(Point(getDimension(), translation)); return *this; } Sample & Sample::operator -= (const Point & translation) { copyOnWrite(); getImplementation()->operator -=(translation); return *this; } Sample & Sample::operator -= (const Sample & translation) { copyOnWrite(); getImplementation()->operator -=(*translation.getImplementation()); return *this; } Sample Sample::operator + (const Scalar translation) const { const Sample sample(getImplementation()->operator + (translation)); return sample; } Sample Sample::operator + (const Point & translation) const { const Sample sample(getImplementation()->operator + (translation)); return sample; } Sample Sample::operator + (const Sample & translation) const { const Sample sample(getImplementation()->operator + (*translation.getImplementation())); return sample; } Sample Sample::operator - (const Scalar translation) const { const Sample sample(getImplementation()->operator - (translation)); return sample; } Sample Sample::operator - (const Point & translation) const { const Sample sample(getImplementation()->operator - (translation)); return sample; } Sample Sample::operator - (const Sample & translation) const { const Sample sample(getImplementation()->operator - (*translation.getImplementation())); return sample; } /* * Scale realizations componentwise in-place */ Sample & Sample::operator *= (const Scalar scaling) { copyOnWrite(); getImplementation()->operator *=(scaling); return *this; } Sample & Sample::operator *= (const Point & scaling) { copyOnWrite(); getImplementation()->operator *=(scaling); return *this; } Sample & Sample::operator *= (const SquareMatrix & scaling) { copyOnWrite(); getImplementation()->operator *=(scaling); return *this; } Sample & Sample::operator /= (const Scalar scaling) { copyOnWrite(); getImplementation()->operator /=(scaling); return *this; } Sample & Sample::operator /= (const Point & scaling) { copyOnWrite(); getImplementation()->operator /=(scaling); return *this; } Sample & Sample::operator /= (const SquareMatrix & scaling) { copyOnWrite(); getImplementation()->operator /=(scaling); return *this; } Sample Sample::operator * (const Scalar scaling) const { const Sample sample(getImplementation()->operator * (scaling)); return sample; } Sample Sample::operator * (const Point & scaling) const { const Sample sample(getImplementation()->operator * (scaling)); return sample; } Sample Sample::operator * (const SquareMatrix & scaling) const { const Sample sample(getImplementation()->operator * (scaling)); return sample; } Sample Sample::operator / (const Scalar scaling) const { const Sample sample(getImplementation()->operator / (scaling)); return sample; } Sample Sample::operator / (const Point & scaling) const { const Sample sample(getImplementation()->operator / (scaling)); return sample; } Sample Sample::operator / (const SquareMatrix & scaling) const { const Sample sample(getImplementation()->operator / (scaling)); return sample; } /* Ranked sample */ Sample Sample::rank() const { return getImplementation()->rank(); } /* Ranked component */ Sample Sample::rank(const UnsignedInteger index) const { return getImplementation()->rank(index); } /* Sorted sample */ Sample Sample::sort() const { return getImplementation()->sort(); } /* Sorted component */ Sample Sample::sort(const UnsignedInteger index) const { return getImplementation()->sort(index); } /* Sorted component */ Sample Sample::sortAccordingToAComponent(const UnsignedInteger index) const { return getImplementation()->sortAccordingToAComponent(index); } /* Sort and remove duplicated points */ Sample Sample::sortUnique() const { return getImplementation()->sortUnique(); } /* Get the i-th marginal sample */ Sample Sample::getMarginal(const UnsignedInteger index) const { return getImplementation()->getMarginal(index); } /* Get the marginal sample corresponding to indices dimensions */ Sample Sample::getMarginal(const Indices & indices) const { return getImplementation()->getMarginal(indices); } /* Returns a pointer to the underlying implementation object */ Sample::ImplementationAsPersistentObject Sample::getImplementationAsPersistentObject() const { return getImplementation(); } /* Sets the pointer to the underlying implementation object */ void Sample::setImplementationAsPersistentObject(const ImplementationAsPersistentObject & obj) { getImplementation().assign(obj); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SampleImplementation.cxx000066400000000000000000002053521307543307100234270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class SampleImplementation implements blank free samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include // std::numeric_limits #include #include #include #include #include #include #include // std::fopen, std::errno #include // std::strerror #include "openturns/OTconfig.hxx" #include "openturns/SampleImplementation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" #include "openturns/Path.hxx" #include "openturns/TBB.hxx" #include "kendall.h" #include "openturns/IdentityMatrix.hxx" #if defined(OPENTURNS_HAVE_BISON) && defined(OPENTURNS_HAVE_FLEX) #include "openturns/csv_parser_state.hxx" #include "csv_parser.hh" #include "csv_lexer.h" int csvparse (OT::CSVParserState & theState, yyscan_t yyscanner, FILE * theFile, OT::SampleImplementation &impl, OT::UnsignedInteger & theDimension, const char * separator); #endif BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Point; NSI_point::NSI_point(SampleImplementation * p_nsi, const UnsignedInteger index) : p_nsi_(p_nsi), index_(index), dimension_(p_nsi->dimension_) {} NSI_point & NSI_point::operator = (const NSI_point & rhs) { if ( (this != &rhs) && (getDimension() == rhs.getDimension()) ) std::copy( rhs.begin(), rhs.end(), begin() ); return *this; } // NSI_point & NSI_point::operator = (const NSI_const_point & rhs) // { // if ( getDimension() == rhs.getDimension() ) // std::copy( rhs.begin(), rhs.end(), begin() ); // return *this; // } // NSI_point & NSI_point::operator = (const Point & rhs) // { // if ( getDimension() == rhs.getDimension() ) // std::copy( rhs.begin(), rhs.end(), begin() ); // return *this; // } Scalar & NSI_point::operator [] (UnsignedInteger i) { return p_nsi_->data_[index_ * dimension_ + i]; } const Scalar & NSI_point::operator [] (const UnsignedInteger i) const { return p_nsi_->data_[index_ * dimension_ + i]; } Scalar & NSI_point::at (UnsignedInteger i) { return p_nsi_->data_.at(index_ * dimension_ + i); } const Scalar & NSI_point::at (const UnsignedInteger i) const { return p_nsi_->data_.at(index_ * dimension_ + i); } NSI_point & NSI_point::operator += (const NSI_point & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be added (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); for (UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] += other[i]; return *this; } NSI_point & NSI_point::operator -= (const NSI_point & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be substracted (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); for (UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] -= other[i]; return *this; } NSI_point & NSI_point::operator += (const Point & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be added (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); for (UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] += other[i]; return *this; } NSI_point & NSI_point::operator -= (const Point & other) { if (getDimension() != other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be substracted (LHS dimension = " << getDimension() << "; RHS dimension = " << other.getDimension(); for (UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] -= other[i]; return *this; } NSI_point & NSI_point::operator *= (const Scalar val) { for(UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] *= val; return *this; } NSI_point & NSI_point::operator /= (const Scalar val) { for(UnsignedInteger i = 0; i < getDimension(); ++i) (*this)[i] /= val; return *this; } bool operator == (const NSI_point & lhs, const NSI_point & rhs) { return (lhs.getDimension() == rhs.getDimension()) && std::equal(lhs.begin(), lhs.end(), rhs.begin()); } bool operator != (const NSI_point & lhs, const NSI_point & rhs) { return ! (lhs == rhs); } bool operator < (const NSI_point & lhs, const NSI_point & rhs) { return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), std::less()); } bool operator > (const NSI_point & lhs, const NSI_point & rhs) { return !( lhs <= rhs ); } bool operator <= (const NSI_point & lhs, const NSI_point & rhs) { return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), std::less_equal()); } bool operator >= (const NSI_point & lhs, const NSI_point & rhs) { return !( lhs < rhs ); } std::ostream & operator <<(std::ostream & os, const NSI_point & point) { return os << Point( point ); } OStream & operator << (OStream & OS, const NSI_point & point) { OS.getStream() << Point( point ).__repr__(); return OS; } NSI_const_point::NSI_const_point(const SampleImplementation * p_nsi, const UnsignedInteger index) : p_nsi_(p_nsi), index_(index), dimension_(p_nsi->dimension_) {} NSI_const_point::NSI_const_point(const NSI_point & point) : p_nsi_(point.p_nsi_), index_(point.index_), dimension_(point.dimension_) {} bool operator == (const NSI_const_point & lhs, const NSI_const_point & rhs) { return (lhs.getDimension() == rhs.getDimension()) && std::equal(lhs.begin(), lhs.end(), rhs.begin()); } const Scalar & NSI_const_point::operator [] (const UnsignedInteger i) const { return p_nsi_->data_[index_ * dimension_ + i]; } const Scalar & NSI_const_point::at (const UnsignedInteger i) const { return p_nsi_->data_.at(index_ * dimension_ + i); } bool operator != (const NSI_const_point & lhs, const NSI_const_point & rhs) { return ! (lhs == rhs); } bool operator < (const NSI_const_point & lhs, const NSI_const_point & rhs) { return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), std::less()); } bool operator > (const NSI_const_point & lhs, const NSI_const_point & rhs) { return !( lhs <= rhs ); } bool operator <= (const NSI_const_point & lhs, const NSI_const_point & rhs) { return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), std::less_equal()); } bool operator >= (const NSI_const_point & lhs, const NSI_const_point & rhs) { return !( lhs < rhs ); } std::ostream & operator <<(std::ostream & os, const NSI_const_point & point) { return os << Point( point ); } OStream & operator << (OStream & OS, const NSI_const_point & point) { OS.getStream() << Point( point ).__repr__(); return OS; } static const Factory Factory_SampleImplementation; CLASSNAMEINIT(SampleImplementation); /* Factory of SampleImplementation from CSV file */ SampleImplementation SampleImplementation::BuildFromCSVFile(const FileName & fileName, const String & csvSeparator) { if (csvSeparator == " ") throw InvalidArgumentException(HERE) << "Error: the space separator is not compatible for CSV file."; SampleImplementation impl(0, 0); #if defined(OPENTURNS_HAVE_BISON) && defined(OPENTURNS_HAVE_FLEX) FILE * theFile = std::fopen(fileName.c_str(), "r"); if (!theFile) { // theFile can not be found. Errno is set throw FileNotFoundException(HERE) << "Can NOT open file '" << fileName << "'. Reason: " << std::strerror(errno); } impl.setName(fileName); yyscan_t scanner = 0; CSVParserState state; state.theFileName = fileName; csvlex_init(&scanner); csvparse(state, scanner, theFile, impl, impl.dimension_, csvSeparator.c_str()); csvlex_destroy(scanner); std::fclose(theFile); // Check the description if (impl.p_description_.isNull() || (impl.p_description_->getSize() != impl.getDimension())) { const UnsignedInteger dimension = impl.getDimension(); Description defaultDescription(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) defaultDescription[i] = String(OSS() << "data_" << i); impl.setDescription(defaultDescription); } if (impl.getDimension() == 0) LOGWARN(OSS() << "Warning: No data from the file has been stored."); #else impl = SampleImplementation::BuildFromTextFile(fileName, csvSeparator); #endif return impl; } /* Factory of SampleImplementation from TXT file */ SampleImplementation SampleImplementation::BuildFromTextFile(const FileName & fileName, const String & separator) { SampleImplementation impl(0, 0); std::ifstream theFile(fileName.c_str()); if (!theFile.is_open()) { // theFile can not be found. Errno is set throw FileNotFoundException(HERE) << "Can NOT open file '" << fileName << "'. Reason: " << std::strerror(errno); } String line; Bool isDescription = false; Description description; Scalar f = -1.0; UnsignedInteger numLine = 1; // While there are lines to read while (std::getline(theFile, line)) { if (line.size() != 0) { Point dataRow(0); // Change the separator if it is not a space if (separator != " ") { std::replace(line.begin(), line.end(), separator.c_str()[0], ' '); } // Store every fields of the current line in a vector std::stringstream strstr(line); std::vector words; std::copy(std::istream_iterator(strstr), std::istream_iterator(), back_inserter(words)); // Check and store the fields in a Point for(UnsignedInteger i = 0; i < words.size(); i++) { std::istringstream iss(words[i]); if ( iss >> ( f ) && iss.eof() ) { if (numLine == 1 && isDescription) { LOGWARN(OSS() << "Warning: the given description is not valid. A default description will be used. "); isDescription = false; break; } else { iss >> f; dataRow.add(f); } if (i == 0) ++numLine; } else { if (numLine == 1) { String word(words[i]); // trim double quote delimiters if ((word.size() >= 2) && (word[0] == '\"') && (word[word.size() - 1] == '\"')) { word = word.substr(1, word.size() - 2); } description.add(word); if (!isDescription && i == 0) isDescription = true; if (i == words.size() - 1) ++numLine; } else { if (i != 0) --numLine; break; } } } // Check and store the data in a SampleImplementation if (dataRow.getDimension() != 0 && dataRow.getDimension() == words.size()) { if ((numLine == 2 && !isDescription) || (numLine == 3 && isDescription)) { impl = SampleImplementation(0, words.size()); } if (impl.getDimension() == dataRow.getDimension()) { impl.add(dataRow); } else { LOGWARN(OSS() << "Warning: the given line ( " << line << " ) is not compatible with the previous row. It will be ignored."); } } else if (dataRow.getDimension() != 0 && dataRow.getDimension() != words.size()) { LOGWARN(OSS() << "Warning: the given line ( " << line << " ) is not valid. It will be ignored."); } } } theFile.close(); // Check the description if (isDescription && description.getSize() == impl.getDimension()) { impl.setDescription(description); } if (impl.p_description_.isNull() || (impl.p_description_->getSize() != impl.getDimension())) { const UnsignedInteger dimension = impl.getDimension(); Description defaultDescription(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) defaultDescription[i] = String(OSS() << "data_" << i); impl.setDescription(defaultDescription); } if (impl.getDimension() == 0) LOGWARN(OSS() << "Warning: No data from the file has been stored."); impl.setName(fileName); return impl; } /* Store a sample in a temporary text file, one realization by line. Returns the file name. */ String SampleImplementation::storeToTemporaryFile() const { const String dataFileName(Path::BuildTemporaryFileName("RData.txt.XXXXXX")); std::ofstream dataFile(dataFileName.c_str()); // Fill-in the data file for (UnsignedInteger i = 0; i < size_; ++i) { String separator = ""; for (UnsignedInteger j = 0; j < dimension_; ++j, separator = " ") { const Scalar value = operator[](i)[j]; const Bool isNaN = value != value; dataFile << separator << std::setprecision(16) << (isNaN ? "\"" : "") << value << (isNaN ? "\"" : ""); } dataFile << std::endl; } dataFile.close(); return dataFileName; } /* Export a sample as a matrix, one row by realization, in a format suitable to exchange with R */ String SampleImplementation::streamToRFormat() const { OSS oss; oss.setPrecision(16); oss << "matrix(c("; String separator(""); for (UnsignedInteger j = 0; j < dimension_; ++j) for (UnsignedInteger i = 0; i < size_; ++i, separator = ",") { const Scalar value = operator[](i)[j]; const Bool isNaN = value != value; oss << separator << (isNaN ? "\"" : "") << value << (isNaN ? "\"" : ""); } oss << "), nrow=" << size_ << ", ncol=" << dimension_ << ")"; return oss; } /* Default constructor is private */ SampleImplementation::SampleImplementation() : PersistentObject() , size_(0) , dimension_(0) , data_(size_ * dimension_, 0.0) , p_description_(NULL) { // Nothing to do } /* Standard constructor */ SampleImplementation::SampleImplementation(const UnsignedInteger size, const UnsignedInteger dim) : PersistentObject() , size_(size) , dimension_(dim) , data_(size_ * dimension_, 0.0) , p_description_(NULL) { // Nothing to do } /* Constructor from a Point */ SampleImplementation::SampleImplementation(const UnsignedInteger size, const Point & point) : PersistentObject() , size_(size) , dimension_(point.getDimension()) , data_(size_ * dimension_, 0.0) , p_description_(NULL) { for (UnsignedInteger i = 0; i < size_; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) data_[i * dimension_ + j] = point[j]; } /* Constructor from a collection of Point */ SampleImplementation::SampleImplementation(const Collection & coll) : PersistentObject() , size_(coll.getSize()) , dimension_((coll.getSize() > 0) ? coll[0].getDimension() : 0) , data_(size_ * dimension_, 0.0) , p_description_(NULL) { for (UnsignedInteger i = 0; i < size_; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) data_[i * dimension_ + j] = coll[i][j]; } /* Constructor from a collection of Indices */ SampleImplementation::SampleImplementation(const Collection & coll) : PersistentObject() , size_(coll.getSize()) , dimension_((coll.getSize() > 0) ? coll[0].getSize() : 0) , data_(size_ * dimension_, 0.0) , p_description_(NULL) { for (UnsignedInteger i = 0; i < size_; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) data_[i * dimension_ + j] = coll[i][j]; } /* Partial copy constructor */ SampleImplementation::SampleImplementation(const SampleImplementation & other, const_iterator first, const_iterator last) : PersistentObject() , size_(last - first) , dimension_(other.getDimension()) , data_(size_ * dimension_, 0.0) , p_description_(other.p_description_) { std::copy( first, last, begin() ); } /* Virtual constructor */ SampleImplementation * SampleImplementation::clone() const { return new SampleImplementation(*this); } void SampleImplementation::swap_points(const UnsignedInteger a, const UnsignedInteger b) { std::swap_ranges( &data_[ a * dimension_ ], &data_[ (a + 1) * dimension_ ], &data_[ b * dimension_ ] ); } void SampleImplementation::swap_range_points(const UnsignedInteger fa, const UnsignedInteger ta, const UnsignedInteger fb) { for (UnsignedInteger i = 0; i < ta - fa; ++i) swap_points( fa + i, fb + i ); } /* Description Accessor */ void SampleImplementation::setDescription(const Description & description) { if (description.getSize() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given description does not match the sample dimension."; p_description_ = Pointer(new Description(description)); } /* Description Accessor */ Description SampleImplementation::getDescription() const { if (p_description_.isNull()) return Description::BuildDefault(dimension_, "v"); return *p_description_; } /* Comparison function */ Bool operator ==(const SampleImplementation & lhs, const SampleImplementation & rhs) { if (&lhs == &rhs) return true; return (lhs.size_ == rhs.size_) && (lhs.dimension_ == rhs.dimension_) && std::equal( lhs.begin(), lhs.end(), rhs.begin() ); } void SampleImplementation::erase(iterator first, iterator last) { PersistentCollection::iterator f = data_.begin() + (first - begin()) * dimension_; PersistentCollection::iterator l = data_.begin() + (last - begin()) * dimension_; data_.erase( f, l ); size_ -= last - first; } void SampleImplementation::erase(const UnsignedInteger first, const UnsignedInteger last) { PersistentCollection::iterator f = data_.begin() + first * dimension_; PersistentCollection::iterator l = data_.begin() + last * dimension_; data_.erase( f, l ); size_ -= last - first; } void SampleImplementation::clear() { data_.clear(); size_ = 0; } /* Raw internal format accessor */ Point SampleImplementation::getData() const { return data_; } void SampleImplementation::setData(const Collection & data) { if (data.getSize() != dimension_ * size_) throw InvalidArgumentException(HERE) << "Error: the given raw data are not compatible with the dimension and size of the sample."; data_ = data; } /* Whether the list contains the value val */ Bool SampleImplementation::contains(const Point & val) const { for (UnsignedInteger i = 0; i < size_; ++i) if ( (*this)[i] == val ) return true; return false; } /* String converter */ String SampleImplementation::__repr__() const { OSS oss(true); oss << "class=" << SampleImplementation::GetClassName() << " name=" << getName() << " size=" << size_ << " dimension=" << dimension_; const UnsignedInteger printEllipsisThreshold = ResourceMap::GetAsUnsignedInteger("Sample-PrintEllipsisThreshold"); const UnsignedInteger printEllipsisSize = ResourceMap::GetAsUnsignedInteger("Sample-PrintEllipsisSize"); const Bool ellipsis = (data_.getSize() > printEllipsisThreshold); const Bool printDescription = !p_description_.isNull() && (p_description_->getSize() == dimension_) && !p_description_->isBlank(); if (printDescription) { const char * sep = ""; oss << " description=["; for (UnsignedInteger j = 0; j < dimension_; ++ j, sep = ",") { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if (j == printEllipsisSize) { oss << sep << "..."; } if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } oss << sep << (*p_description_)[j]; } oss << "]"; } oss << " data=["; const char * sep = ""; for (UnsignedInteger i = 0; i < size_; ++ i, sep = ",") { if (ellipsis && (size_ > 2 * printEllipsisSize)) { if (i == printEllipsisSize) { oss << sep << "..."; } if ((i >= printEllipsisSize) && (i < size_ - printEllipsisSize)) { continue; } } oss << sep << "["; const char * sep2 = ""; for (UnsignedInteger j = 0; j < dimension_; ++ j, sep2 = ",") { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if (j == printEllipsisSize) { oss << sep2 << "..."; } if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } oss << sep2 << data_[i * dimension_ + j]; } oss << "]"; } oss << "]"; return oss; } String SampleImplementation::__str__(const String & offset) const { // First, print the description if it is not empty. // If you use the getDescription() method you get a default value // for the description that is not stored in the sample, producing a spurious output const Bool printDescription = !p_description_.isNull() && (p_description_->getSize() == dimension_) && !p_description_->isBlank(); const UnsignedInteger printEllipsisThreshold = ResourceMap::GetAsUnsignedInteger("Sample-PrintEllipsisThreshold"); const UnsignedInteger printEllipsisSize = ResourceMap::GetAsUnsignedInteger("Sample-PrintEllipsisSize"); const Bool ellipsis = (data_.getSize() > printEllipsisThreshold); size_t twidth = 0; // column title max width size_t lwidth = 0; // LHS number max width size_t rwidth = 0; // RHS number max width size_t iwidth = 0; // index max width if (printDescription) { for( UnsignedInteger j = 0; j < dimension_; ++j ) { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } twidth = std::max( twidth, (*p_description_)[j].size() ); } } for( UnsignedInteger i = 0; i < size_; ++i ) { if (ellipsis && (size_ > 2 * printEllipsisSize)) { if ((i >= printEllipsisSize) && (i < size_ - printEllipsisSize)) { continue; } } for (UnsignedInteger j = 0; j < dimension_; ++ j) { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } String st = OSS() << data_[i * dimension_ + j]; size_t dotpos = st.find( '.' ); lwidth = std::max( lwidth, (dotpos != String::npos) ? dotpos : st.size() ); rwidth = std::max( rwidth, (dotpos != String::npos) ? st.size() - dotpos : 0 ); } } if (twidth > lwidth + rwidth) rwidth = twidth - lwidth; else twidth = lwidth + rwidth; { // Computing the size of the last index (max width of the indexes) String sti = OSS() << size_ - 1; iwidth = sti.size(); } OSS oss(false); // Print the column title if (printDescription) { oss << offset << String( iwidth , ' ' ) << " [ "; const char * sep = ""; for( UnsignedInteger j = 0; j < dimension_; ++j, sep = " " ) { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if (j == printEllipsisSize) { oss << sep << "..."; } if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } oss << sep << (*p_description_)[j] << String( twidth - (*p_description_)[j].size(), ' ' ); } oss << " ]\n"; } const char * newline = ""; for( UnsignedInteger i = 0; i < size_; ++i, newline = "\n" ) { if (ellipsis && (size_ > 2 * printEllipsisSize)) { if (i == printEllipsisSize) { oss << "\n..."; } if ((i >= printEllipsisSize) && (i < size_ - printEllipsisSize)) { continue; } } String sti = OSS() << i; oss << newline << offset << String( iwidth - sti.size(), ' ' ) << sti << " : [ "; const char * sep = ""; for( UnsignedInteger j = 0; j < dimension_; ++j, sep = " " ) { if (ellipsis && (dimension_ > 2 * printEllipsisSize)) { if (j == printEllipsisSize) { oss << sep << "..."; } if ((j >= printEllipsisSize) && (j < dimension_ - printEllipsisSize)) { continue; } } String st = OSS() << data_[i * dimension_ + j]; size_t dotpos = st.find( '.' ); oss << sep << String( lwidth - ((dotpos != String::npos) ? dotpos : st.size()), ' ' ) << st << String( rwidth - ((dotpos != String::npos) ? st.size() - dotpos : 0), ' ' ); } oss << " ]"; } return oss; } /* Appends an element to the collection */ SampleImplementation & SampleImplementation::add(const Point & point) { if (point.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Point has invalid dimension (" << point.getDimension() << ") expected : " << getDimension(); const UnsignedInteger oldSize = size_; ++ size_; data_.resize(size_ * dimension_); std::copy(point.begin(), point.begin() + dimension_, data_.begin() + oldSize * dimension_); return *this; } /* Appends another sample to the collection */ SampleImplementation & SampleImplementation::add(const SampleImplementation & sample) { if (sample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Sample has invalid dimension (" << sample.getDimension() << ") expected : " << getDimension(); //const UnsignedInteger oldSize = size_; size_ += sample.getSize(); data_.resize(size_ * dimension_); // memmove( &data_[oldSize * dimension_], &(sample.data_[0]), sample.getSize() * dimension_ * sizeof(Scalar) ); std::copy_backward(sample.begin(), sample.end(), end()); return *this; } /* Stack the given sample to the current one */ SampleImplementation & SampleImplementation::stack(const SampleImplementation & sample) { if (sample.getSize() != size_) throw InvalidArgumentException(HERE) << "Error: the given sample has size=" << sample.getSize() << ", expected size=" << size_; const UnsignedInteger otherDimension = sample.getDimension(); SampleImplementation result(size_, dimension_ + otherDimension); // First, the values for (UnsignedInteger i = 0; i < size_; ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) result[i][j] = (*this)[i][j]; for (UnsignedInteger j = 0; j < otherDimension; ++j) result[i][dimension_ + j] = sample[i][j]; } // Second, the description if (!p_description_.isNull() || !sample.p_description_.isNull()) { Description description(getDescription()); const Description otherDescription(sample.getDescription()); for (UnsignedInteger i = 0; i < otherDimension; ++i) description.add(otherDescription[i]); result.setDescription(description); } *this = result; return *this; } template struct ReductionFunctor { const SampleImplementation & nsi_; const OP & op_; typename OP::value_type accumulator_; ReductionFunctor(const SampleImplementation & nsi, const OP & op = OP()) : nsi_(nsi), op_(op), accumulator_(OP::GetInvariant(nsi_)) {} ReductionFunctor(const ReductionFunctor & other, TBB::Split) : nsi_(other.nsi_), op_(other.op_), accumulator_(OP::GetInvariant(nsi_)) {} void operator() (const TBB::BlockedRange & r) { NSI_const_iterator it = nsi_.begin() + r.begin(); for (UnsignedInteger i = r.begin(); i != r.end(); ++i, ++it) op_.inplace_op( accumulator_, *it ); } void join(const ReductionFunctor & other) { op_.inplace_op( accumulator_, other.accumulator_ ); } }; /* end struct ReductionFunctor */ template class ParallelFunctor { SampleImplementation & nsi_; const OP & op_; public: ParallelFunctor(SampleImplementation & nsi, const OP & op) : nsi_(nsi), op_(op) {} void operator() (const TBB::BlockedRange & r) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) op_.inplace_op( nsi_[i] ); } }; /* end class ParallelFunctor */ /* * Gives the mean of the sample, based on the formula * mean = sum of the elements in the sample / size of the sample */ Point SampleImplementation::computeMean() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the mean of an empty sample."; Point accumulated(dimension_); const_data_iterator it(data_begin()); const const_data_iterator guard(data_end()); while (it != guard) { for (UnsignedInteger i = 0; i < dimension_; ++i, ++it) { accumulated[i] += *it; } } for (UnsignedInteger i = 0; i < dimension_; ++i) { accumulated[i] *= (1.0 / size_); } return accumulated; } /* * Gives the covariance matrix of the sample, normalization by 1 / (size - 1) if size > 1 */ CovarianceMatrix SampleImplementation::computeCovariance() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the covariance of an empty sample."; // Special case for a sample of size 1 if (size_ == 1) return CovarianceMatrix(dimension_, Point(dimension_ * dimension_)); const Point mean(computeMean()); const UnsignedInteger squaredDim(dimension_ * dimension_); Point accumulated(squaredDim); const_data_iterator it(data_begin()); const const_data_iterator guard(data_end()); while (it != guard) { UnsignedInteger baseIndex = 0; for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar deltaI = *(it + i) - mean[i]; for (UnsignedInteger j = i; j < dimension_; ++j) { const Scalar deltaJ = *(it + j) - mean[j]; accumulated[baseIndex + j] += deltaI * deltaJ; } baseIndex += dimension_; } it += dimension_; } for (UnsignedInteger i = 0; i < squaredDim; ++i) { accumulated[i] /= (size_ - 1); } CovarianceMatrix result(dimension_, accumulated); return result; } /* * Gives the standard deviation of the sample, i.e. the square-root of the covariance matrix. */ TriangularMatrix SampleImplementation::computeStandardDeviation() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the standard deviation of an empty sample."; return computeCovariance().computeCholesky(); } /* * Gives the variance of the sample (by component) */ Point SampleImplementation::computeVariance() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the variance per component of an empty sample."; // Special case for a sample of size 1 if (size_ == 1) return Point(dimension_, 0.0); const Point mean( computeMean() ); Point accumulated(dimension_); const_data_iterator it(data_begin()); const const_data_iterator guard(data_end()); while (it != guard) { for (UnsignedInteger i = 0; i < dimension_; ++i, ++it) { const Scalar val = *it - mean[i]; accumulated[i] += val * val; } } for (UnsignedInteger i = 0; i < dimension_; ++i) { accumulated[i] /= (size_ - 1); } return accumulated; } /* * Gives the standard deviation of each component of the sample */ Point SampleImplementation::computeStandardDeviationPerComponent() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the standard deviation per component of an empty sample."; Point sd(computeVariance()); for (UnsignedInteger i = 0; i < dimension_; ++i) sd[i] = sqrt(sd[i]); return sd; } /* * Gives the Pearson correlation matrix of the sample */ CorrelationMatrix SampleImplementation::computePearsonCorrelation() const { return computeLinearCorrelation(); } CorrelationMatrix SampleImplementation::computeLinearCorrelation() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the Pearson correlation of an empty sample."; CorrelationMatrix correlation(dimension_); if (dimension_ == 1) return correlation; const CovarianceMatrix covariance(computeCovariance()); Point sd(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { sd[i] = sqrt( covariance(i, i) ); if (sd[i] != 0.0) for (UnsignedInteger j = 0; j < i; ++j) if (sd[j] != 0.0) correlation(i, j) = covariance(i, j) / (sd[i] * sd[j]); } return correlation; } struct Pair { Scalar value_; UnsignedInteger index_; Pair() : value_(0.0), index_() {} Pair(Scalar value, UnsignedInteger index) : value_(value), index_(index) {} Bool operator < (const Pair & other) const { return value_ < other.value_; } }; struct Comparison { // Main sorting key UnsignedInteger first_; // Secondary sorting key UnsignedInteger second_; // Pointer to the data const SampleImplementation & nsi_; // Sorting permutation Indices permutation_; // True if sample has ties mutable Bool hasTies_; Comparison(UnsignedInteger first, const SampleImplementation & nsi) : first_(first), second_(first), nsi_(nsi), permutation_(nsi_.getSize()), hasTies_(false) { permutation_.fill(); } Comparison(UnsignedInteger first, UnsignedInteger second, const SampleImplementation & nsi) : first_(first), second_(second), nsi_(nsi), permutation_(nsi_.getSize()), hasTies_(false) { permutation_.fill(); } Bool operator() (const UnsignedInteger i, const UnsignedInteger j) const { const Scalar xI = nsi_[ permutation_[i] ][ first_ ]; const Scalar xJ = nsi_[ permutation_[j] ][ first_ ]; const Scalar yI = nsi_[ permutation_[i] ][ second_ ]; const Scalar yJ = nsi_[ permutation_[j] ][ second_ ]; hasTies_ |= (xI == xJ); return ( (xI < xJ) || ((xI == xJ) && (yI < yJ)) ); } }; // struct Comparison /* Ranked sample */ SampleImplementation SampleImplementation::rank() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot rank an empty sample."; SampleImplementation rankedSample(size_, dimension_); // Sort and rank all the marginal samples for (UnsignedInteger i = 0; i < dimension_; ++i) { Collection sortedMarginalSamples(size_); for (UnsignedInteger j = 0; j < size_; ++j) { sortedMarginalSamples[j].value_ = (*this)[j][i]; sortedMarginalSamples[j].index_ = j; } // sort TBB::ParallelSort(sortedMarginalSamples.begin(), sortedMarginalSamples.end()); // rank Scalar lastValue = sortedMarginalSamples[0].value_; UnsignedInteger lastIndex = 0; Scalar currentValue = 0.0; for (UnsignedInteger j = 1; j < size_; ++j) { currentValue = sortedMarginalSamples[j].value_; if (currentValue > lastValue) { const Scalar rankValue = 0.5 * (lastIndex + j - 1); for (UnsignedInteger k = lastIndex; k < j; ++k) rankedSample[ sortedMarginalSamples[k].index_ ][i] = rankValue; lastIndex = j; lastValue = currentValue; } } // If we end with a constant range if (currentValue == lastValue) { const Scalar rankValue = 0.5 * (lastIndex + size_ - 1); for (UnsignedInteger k = lastIndex; k < size_; ++k) rankedSample[ sortedMarginalSamples[k].index_ ][i] = rankValue; } } if (!p_description_.isNull()) rankedSample.setDescription(getDescription()); return rankedSample; } /* Ranked component */ SampleImplementation SampleImplementation::rank(const UnsignedInteger index) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot rank an empty sample."; if (index >= dimension_) throw OutOfBoundException(HERE) << "The requested index is too large, index=" << index << ", dimension=" << dimension_; return getMarginal(index).rank(); } struct NSI_Sortable { const SampleImplementation * p_nsi_; UnsignedInteger index_; NSI_Sortable(const SampleImplementation * nsi, UnsignedInteger index) : p_nsi_(nsi), index_(index) {} NSI_Sortable() : p_nsi_(NULL), index_(0) {} Bool operator < (const NSI_Sortable & other) const { return p_nsi_->operator[](index_) < other.p_nsi_->operator[](other.index_); } operator NSI_const_point() const { return NSI_const_point(p_nsi_, index_); } inline UnsignedInteger getDimension() const { return p_nsi_->getDimension(); } inline NSI_const_point::const_iterator begin() { return &NSI_const_point(p_nsi_, index_).operator[](0); } inline NSI_const_point::const_iterator end() { return &NSI_const_point(p_nsi_, index_).operator[](getDimension()); } }; /* Sorted sample, component by component */ SampleImplementation SampleImplementation::sort() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot sort an empty sample."; SampleImplementation sortedSample(size_, dimension_); // Special case for 1D sample if (dimension_ == 1) { Point sortedData(data_); TBB::ParallelSort(sortedData.begin(), sortedData.end()); sortedSample.setData(sortedData); return sortedSample; } // The nD samples Collection sortables(size_); for (UnsignedInteger i = 0; i < size_; ++i) sortables[i] = NSI_Sortable(this, i); TBB::ParallelSort(sortables.begin(), sortables.end()); for (UnsignedInteger i = 0; i < size_; ++i) sortedSample[i] = sortables[i]; if (!p_description_.isNull()) sortedSample.setDescription(getDescription()); return sortedSample; } /* Sorted sample, one component */ SampleImplementation SampleImplementation::sort(const UnsignedInteger index) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot sort an empty sample."; if (index >= getDimension()) throw OutOfBoundException(HERE) << "The requested index is too large, index=" << index << ", dimension=" << getDimension(); return getMarginal(index).sort(); } struct Sortable { Point values_; UnsignedInteger index_; Sortable() : values_(1, 0.0), index_(0) {} Sortable(const Point & values, const UnsignedInteger index) : values_(values), index_(index) {} Bool operator < (const Sortable & other) const { return values_[index_] < other.values_[other.index_]; } }; /* Sorted according a component */ SampleImplementation SampleImplementation::sortAccordingToAComponent(const UnsignedInteger index) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot sort an empty sample."; Collection sortables(size_); for (UnsignedInteger i = 0; i < size_; ++i) sortables[i] = Sortable((*this)[i], index); TBB::ParallelSort(sortables.begin(), sortables.end()); SampleImplementation sortedSample(size_, dimension_); for (UnsignedInteger i = 0; i < size_; ++i) sortedSample[i] = Point(sortables[i].values_); if (!p_description_.isNull()) sortedSample.setDescription(getDescription()); return sortedSample; } /* Sort and remove duplicated points */ SampleImplementation SampleImplementation::sortUnique() const { SampleImplementation sampleSorted(sort()); SampleImplementation sampleUnique(size_, dimension_); sampleUnique[0] = sampleSorted[0]; UnsignedInteger last = 0; for (UnsignedInteger i = 1; i < size_; ++i) { if (sampleSorted[i] != sampleUnique[last]) { ++last; sampleUnique[last] = sampleSorted[i]; } } if (last + 1 < size_) sampleUnique.erase(last + 1, size_); return sampleUnique; } /* * Gives the Spearman correlation matrix of the sample */ CorrelationMatrix SampleImplementation::computeSpearmanCorrelation() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the Spearman correlation of an empty sample."; return rank().computePearsonCorrelation(); } /* * Gives the Kendall tau matrix of the sample, including ties correction */ struct ComputeKendallPolicy { const SampleImplementation & input_; Point & output_; const Indices & indicesX_; const Indices & indicesY_; const Bool smallCase_; ComputeKendallPolicy( const SampleImplementation & input, Point & output, const Indices & indicesX, const Indices & indicesY, const Bool smallCase) : input_(input) , output_(output) , indicesX_(indicesX) , indicesY_(indicesY) , smallCase_(smallCase) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const UnsignedInteger size = input_.getSize(); const UnsignedInteger indX = indicesX_[i]; const UnsignedInteger indY = indicesY_[i]; Point x(size); Point y(size); for (UnsignedInteger k = 0; k < size; ++k) { x[k] = input_[k][indX]; y[k] = input_[k][indY]; } if (smallCase_) output_[i] = kendallSmallN(&x[0], &y[0], size); else output_[i] = kendallNlogN(&x[0], &y[0], size); } } }; /* end struct ComputeKendallPolicy */ CorrelationMatrix SampleImplementation::computeKendallTau() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the Kendall tau of an empty sample."; // Use external efficient C implementation of the O(Nlog(N)) or O(N^2) Kendall tau computation depending on the sample size const Bool smallCase = size_ < ResourceMap::GetAsUnsignedInteger("Sample-SmallKendallTau"); const UnsignedInteger caseNumber = (dimension_ * (dimension_ - 1)) / 2; Indices indX(caseNumber); Indices indY(caseNumber); // The resulting matrix CorrelationMatrix tau(dimension_); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < dimension_ - 1; ++i) { for (UnsignedInteger j = i + 1; j < dimension_; ++j) { LOGINFO(OSS() << "in SampleImplementation::computeKendallTau(), computing tau[" << i << ", " << j << "]"); indX[index] = i; indY[index] = j; ++index; } // end for j } // end for i // Now the computation Point result(caseNumber); const ComputeKendallPolicy policy( *this, result, indX, indY, smallCase ); TBB::ParallelFor( 0, caseNumber, policy ); index = 0; for (UnsignedInteger i = 0; i < dimension_ - 1; ++i) { for (UnsignedInteger j = i + 1; j < dimension_; ++j) { tau(i, j) = result[index]; ++index; } // end for j } // end for i return tau; } /* * Gives the range of the sample (by component) */ Point SampleImplementation::computeRange() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the range per component of an empty sample."; return getMax() - getMin(); } /* * Gives the median of the sample (by component) */ Point SampleImplementation::computeMedian() const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the median per component of an empty sample."; return computeQuantilePerComponent(0.5); } struct SkewnessPerComponentPolicy { typedef Point value_type; const value_type & mean_; const UnsignedInteger dimension_; SkewnessPerComponentPolicy( const value_type & mean) : mean_(mean), dimension_(mean_.getDimension()) {} static inline value_type GetInvariant(const SampleImplementation & nsi) { return value_type(2 * nsi.getDimension(), 0.0); } inline value_type & inplace_op( value_type & var, NSI_const_point point ) const { for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar val = point[i] - mean_[i]; const Scalar val2 = val * val; var[i] += val2; var[i + dimension_] += val2 * val; } return var; } static inline value_type & inplace_op( value_type & var, const value_type & point ) { return var += point; } }; /* end struct SkewnessPerComponentPolicy */ /* * Gives the skewness of the sample (by component) */ Point SampleImplementation::computeSkewness() const { if (size_ < 2) throw InternalException(HERE) << "Error: cannot compute the skewness per component of a sample of size less than 2."; if (size_ == 2) return Point(dimension_, 0.0); const Point mean(computeMean()); const SkewnessPerComponentPolicy policy ( mean ); ReductionFunctor functor( *this, policy ); TBB::ParallelReduce( 0, size_, functor ); Point skewness(dimension_); const Scalar factor = size_ * sqrt(size_ - 1.0) / (size_ - 2); for (UnsignedInteger i = 0; i < dimension_; ++i) { if (functor.accumulator_[i] == 0.0) throw NotDefinedException(HERE) << "Error: the sample has component " << i << " constant. The skewness is not defined."; skewness[i] = factor * functor.accumulator_[i + dimension_] / pow(functor.accumulator_[i], 1.5); } return skewness; } struct KurtosisPerComponentPolicy { typedef Point value_type; const value_type & mean_; const UnsignedInteger dimension_; KurtosisPerComponentPolicy( const value_type & mean) : mean_(mean), dimension_(mean_.getDimension()) {} static inline value_type GetInvariant(const SampleImplementation & nsi) { return value_type(2 * nsi.getDimension(), 0.0); } inline value_type & inplace_op( value_type & var, NSI_const_point point ) const { for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar val = point[i] - mean_[i]; const Scalar val2 = val * val; var[i] += val2; var[i + dimension_] += val2 * val2; } return var; } static inline value_type & inplace_op( value_type & var, const value_type & point ) { return var += point; } }; /* end struct KurtosisPerComponentPolicy */ /* * Gives the kurtosis of the sample (by component) */ Point SampleImplementation::computeKurtosis() const { if (size_ < 3) throw InternalException(HERE) << "Error: cannot compute the kurtosis per component of a sample of size less than 3."; if (size_ == 3) return Point(dimension_, 0.0); const Point mean(computeMean()); const KurtosisPerComponentPolicy policy ( mean ); ReductionFunctor functor( *this, policy ); TBB::ParallelReduce( 0, size_, functor ); Point kurtosis(dimension_); const Scalar factor1 = (size_ + 1.0) * size_ * (size_ - 1.0) / ((size_ - 2.0) * (size_ - 3.0)); const Scalar factor2 = -3.0 * (3.0 * size_ - 5.0) / ((size_ - 2.0) * (size_ - 3.0)); for (UnsignedInteger i = 0; i < dimension_; ++i) { if (functor.accumulator_[i] == 0.0) throw NotDefinedException(HERE) << "Error: the sample has component " << i << " constant. The kurtosis is not defined."; kurtosis[i] = factor1 * functor.accumulator_[i + dimension_] / (functor.accumulator_[i] * functor.accumulator_[i]) + factor2; } return kurtosis; } struct CenteredMomentPerComponentPolicy { typedef Point value_type; const value_type & mean_; const UnsignedInteger k_; const UnsignedInteger dimension_; CenteredMomentPerComponentPolicy( const value_type & mean, const UnsignedInteger k) : mean_(mean), k_(k), dimension_(mean_.getDimension()) {} static inline value_type GetInvariant(const SampleImplementation & nsi) { return value_type(nsi.getDimension(), 0.0); } inline value_type & inplace_op( value_type & var, NSI_const_point point ) const { for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar val = point[i] - mean_[i]; var[i] += pow(val, static_cast(k_)); } return var; } static inline value_type & inplace_op( value_type & var, const value_type & point ) { return var += point; } }; /* end struct CenteredMomentPerComponentPolicy */ /* * Gives the centered moment of order k of the sample (by component) */ Point SampleImplementation::computeCenteredMoment(const UnsignedInteger k) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the centered moments per component of an empty sample."; // Special case: order 0, return (1,...,1) if (k == 0) return Point(dimension_, 1.0); // Special case: order 1, return (0,...,0) if (k == 1) return Point(dimension_, 0.0); // Special case: order 2, return biased variance estimator if (k == 2) return computeVariance() * (size_ - 1.0) / size_; // General case const Point mean(computeMean()); const CenteredMomentPerComponentPolicy policy ( mean, k ); ReductionFunctor functor( *this, policy ); TBB::ParallelReduce( 0, size_, functor ); return functor.accumulator_ / size_; } /* * Gives the raw moment of order k of the sample (by component) */ Point SampleImplementation::computeRawMoment(const UnsignedInteger k) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the centered moments per component of an empty sample."; if (size_ == 0) throw InvalidArgumentException(HERE) << "Cannot compute centered moments on an empty sample"; // Special case: order 0, return (size,...,size) if (k == 0) return Point(dimension_, 1.0); const Point zero(dimension_); const CenteredMomentPerComponentPolicy policy ( zero, k ); ReductionFunctor functor( *this, policy ); TBB::ParallelReduce( 0, size_, functor ); return functor.accumulator_ / size_; } /* * Gives the quantile per component of the sample */ Point SampleImplementation::computeQuantilePerComponent(const Scalar prob) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the quantile per component of an empty sample."; if (!(prob >= 0.0) || !(prob <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; // Special case for extremum cases const Scalar scalarIndex = prob * size_ - 0.5; if (scalarIndex >= size_ - 1) return getMax(); // Special case for prob <= 0.0 if (scalarIndex <= 0.0) return getMin(); const UnsignedInteger index = static_cast( floor( scalarIndex) ); const Scalar beta = scalarIndex - index; const Scalar alpha = 1.0 - beta; Point quantile(dimension_); Point component(size_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < size_; ++i) component[i] = operator[](i)[j]; TBB::ParallelSort(component.begin(), component.end()); // Interpolation between the two adjacent empirical quantiles quantile[j] = alpha * component[index] + beta * component[index + 1]; } // end for return quantile; } /* * Gives the N-dimension quantile of the sample */ Point SampleImplementation::computeQuantile(const Scalar prob) const { if (size_ == 0) throw InternalException(HERE) << "Error: cannot compute the quantile of an empty sample."; if (getDimension() == 1) return computeQuantilePerComponent(prob); throw NotYetImplementedException(HERE) << "In SampleImplementation::computeQuantile(const Scalar prob) const"; } struct CDFPolicy { typedef Scalar value_type; const Point & point_; const Bool tail_; const UnsignedInteger dimension_; CDFPolicy( const SampleImplementation & nsi, const Point & point, const Bool tail ) : point_(point), tail_(tail), dimension_(nsi.getDimension()) {} static inline value_type GetInvariant(const SampleImplementation &) { return value_type(0); } inline value_type & inplace_op( value_type & a, const value_type & other ) const { return a += other; } template inline value_type & inplace_op( value_type & a, const T & pt ) const { UnsignedInteger j = 0; while ( (j < dimension_) && (tail_ ^ (pt[j] <= point_[j])) ) ++j; if (j == dimension_) ++a; return a; } }; /* end struct CDFPolicy */ /* * Get the empirical CDF of the sample */ Scalar SampleImplementation::computeEmpiricalCDF(const Point & point, const Bool tail) const { if (size_ == 0) throw InvalidArgumentException(HERE) << "Cannot compute the empirical CDF of an empty sample."; if (getDimension() != point.getDimension()) throw InvalidArgumentException(HERE) << "Point has incorrect dimension. Got " << point.getDimension() << ". Expected " << getDimension(); const CDFPolicy policy( *this, point, tail ); ReductionFunctor functor( *this, policy ); TBB::ParallelReduce( 0, size_, functor ); return static_cast < Scalar > (functor.accumulator_) / size_; } struct MaxPerComponentPolicy { typedef Point value_type; static inline value_type GetInvariant(const SampleImplementation & nsi) { return value_type(nsi.getDimension(), - std::numeric_limits::max()); } template static inline value_type & inplace_op( value_type & a, const T & b) { const UnsignedInteger dim = a.getDimension(); for (UnsignedInteger j = 0; j < dim; ++j) a[j] = std::max( a[j], b[j] ); return a; } }; /* end struct MaxPerComponentPolicy */ struct MinPerComponentPolicy { typedef Point value_type; static inline value_type GetInvariant(const SampleImplementation & nsi) { return value_type(nsi.getDimension(), std::numeric_limits::max()); } template static inline value_type & inplace_op( value_type & a, const T & b) { const UnsignedInteger dim = a.getDimension(); for (UnsignedInteger j = 0; j < dim; ++j) a[j] = std::min( a[j], b[j] ); return a; } }; /* end struct MinPerComponentPolicy */ /* Maximum accessor */ Point SampleImplementation::getMax() const { if (size_ == 0) throw InternalException(HERE) << "Impossible to get the maximum of an empty Sample"; ReductionFunctor functor( *this, MaxPerComponentPolicy() ); functor.accumulator_ = operator[](0); TBB::ParallelReduce( 1, size_, functor ); return functor.accumulator_; } /* Minimum accessor */ Point SampleImplementation::getMin() const { if (size_ == 0) throw InternalException(HERE) << "Impossible to get the minimum of an empty Sample"; ReductionFunctor functor( *this, MinPerComponentPolicy() ); functor.accumulator_ = operator[](0); TBB::ParallelReduce( 1, size_, functor ); return functor.accumulator_; } struct TranslationPolicy { const Point & translation_; const UnsignedInteger dimension_; TranslationPolicy( const Point & translation) : translation_(translation), dimension_(translation_.getDimension()) {} inline void inplace_op( NSI_point point ) const { for (UnsignedInteger j = 0; j < dimension_; ++j) point[j] += translation_[j]; } }; /* end struct TranslationPolicy */ /* * Translate realizations in-place */ void SampleImplementation::translate(const Point & translation) { if (dimension_ != translation.getDimension()) throw InvalidArgumentException(HERE) << "Translation point has incorrect dimension. Got " << translation.getDimension() << ". Expected " << dimension_; if (size_ == 0) return; const TranslationPolicy policy( translation ); ParallelFunctor functor( *this, policy ); TBB::ParallelFor( 0, size_, functor ); } SampleImplementation & SampleImplementation::operator += (const Scalar translation) { translate(Point(dimension_, translation)); return *this; } SampleImplementation & SampleImplementation::operator += (const Point & translation) { translate(translation); return *this; } struct PositiveTranslationSamplePolicy { const SampleImplementation & translation_; SampleImplementation & output_; PositiveTranslationSamplePolicy( const SampleImplementation & translation, SampleImplementation & output) : translation_(translation), output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i] += translation_[i]; } }; /* end struct TranslationSamplePolicy */ struct NegativeTranslationSamplePolicy { const SampleImplementation & translation_; SampleImplementation & output_; NegativeTranslationSamplePolicy( const SampleImplementation & translation, SampleImplementation & output) : translation_(translation), output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i] -= translation_[i]; } }; /* end struct TranslationSamplePolicy */ SampleImplementation & SampleImplementation::operator += (const SampleImplementation & translation) { if (translation.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the dimension of the given translation=" << translation.getDimension() << " does not match the dimension of the sample=" << dimension_; if (translation.getSize() != size_) throw InvalidArgumentException(HERE) << "Error: the size of the given translation=" << translation.getSize() << " does not match the size of the sample=" << size_; const PositiveTranslationSamplePolicy policy( translation, *this ); TBB::ParallelFor( 0, size_, policy ); return *this; } SampleImplementation & SampleImplementation::operator -= (const Scalar translation) { return operator +=(-translation); } SampleImplementation & SampleImplementation::operator -= (const Point & translation) { return operator +=(translation * (-1.0)); } SampleImplementation & SampleImplementation::operator -= (const SampleImplementation & translation) { if (translation.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the dimension of the given translation=" << translation.getDimension() << " does not match the dimension of the sample=" << dimension_; if (translation.getSize() != size_) throw InvalidArgumentException(HERE) << "Error: the size of the given translation=" << translation.getSize() << " does not match the size of the sample=" << size_; const NegativeTranslationSamplePolicy policy( translation, *this ); TBB::ParallelFor( 0, size_, policy ); return *this; } SampleImplementation SampleImplementation::operator + (const Scalar translation) const { return operator+(Point(dimension_, translation)); } SampleImplementation SampleImplementation::operator + (const Point & translation) const { SampleImplementation sample(*this); sample += translation; sample.setName(""); return sample; } SampleImplementation SampleImplementation::operator + (const SampleImplementation & translation) const { SampleImplementation sample(*this); sample += translation; sample.setName(""); return sample; } SampleImplementation SampleImplementation::operator - (const Scalar translation) const { return operator-(Point(dimension_, translation)); } SampleImplementation SampleImplementation::operator - (const Point & translation) const { SampleImplementation sample(*this); sample -= translation; sample.setName(""); return sample; } SampleImplementation SampleImplementation::operator - (const SampleImplementation & translation) const { SampleImplementation sample(*this); sample -= translation; sample.setName(""); return sample; } struct ScalingPolicy { const Point & scale_; const UnsignedInteger dimension_; ScalingPolicy( const Point & scale) : scale_(scale), dimension_(scale_.getDimension()) {} inline void inplace_op( NSI_point point ) const { for (UnsignedInteger j = 0; j < dimension_; ++j) point[j] *= scale_[j]; } }; /* end struct ScalingPolicy */ struct MatrixMultiplyPolicy { const SquareMatrix & scale_; const UnsignedInteger dimension_; MatrixMultiplyPolicy( const SquareMatrix & scale) : scale_(scale), dimension_(scale_.getDimension()) {} inline void inplace_op( NSI_point point ) const { point = scale_ * point; } }; /* end struct MatrixMultiplyPolicy */ /* * Scale realizations componentwise in-place */ void SampleImplementation::scale(const SquareMatrix & scaling) { if (dimension_ != scaling.getDimension()) throw InvalidArgumentException(HERE) << "Scaling point has incorrect dimension. Got " << scaling.getDimension() << ". Expected " << dimension_; if (size_ == 0) return; const MatrixMultiplyPolicy policy( scaling ); ParallelFunctor functor( *this, policy ); TBB::ParallelFor( 0, size_, functor ); } void SampleImplementation::scale(const Point & scaling) { if (dimension_ != scaling.getDimension()) throw InvalidArgumentException(HERE) << "Scaling point has incorrect dimension. Got " << scaling.getDimension() << ". Expected " << dimension_; if (size_ == 0) return; const ScalingPolicy policy( scaling ); ParallelFunctor functor( *this, policy ); TBB::ParallelFor( 0, size_, functor ); } SampleImplementation & SampleImplementation::operator *= (const Scalar scaling) { scale(Point(dimension_, scaling)); return *this; } SampleImplementation & SampleImplementation::operator *= (const Point & scaling) { scale(scaling); return *this; } SampleImplementation & SampleImplementation::operator *= (const SquareMatrix & scaling) { scale(scaling); return *this; } SampleImplementation & SampleImplementation::operator /= (const Scalar scaling) { return operator/=(Point(dimension_, scaling)); } SampleImplementation & SampleImplementation::operator /= (const Point & scaling) { Point inverseScaling(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++ i) { if (scaling[i] == 0.0) throw InvalidArgumentException(HERE) << "Error: the scaling must have nonzero components, here scaling=" << scaling; inverseScaling[i] = 1.0 / scaling[i]; } scale(inverseScaling); return *this; } SampleImplementation & SampleImplementation::operator /= (const SquareMatrix & scaling) { SquareMatrix tmp(scaling); SquareMatrix inverseScaling(tmp.solveLinearSystem(IdentityMatrix(getDimension())).getImplementation()); scale(inverseScaling); return *this; } SampleImplementation SampleImplementation::operator * (const Scalar scaling) const { return operator*(Point(dimension_, scaling)); } SampleImplementation SampleImplementation::operator * (const Point & scaling) const { SampleImplementation nsi(*this); nsi *= scaling; nsi.setName(""); return nsi; } SampleImplementation SampleImplementation::operator * (const SquareMatrix & scaling) const { SampleImplementation nsi(*this); nsi *= scaling; nsi.setName(""); return nsi; } SampleImplementation SampleImplementation::operator / (const Scalar scaling) const { return operator/(Point(dimension_, scaling)); } SampleImplementation SampleImplementation::operator / (const Point & scaling) const { SampleImplementation nsi(*this); nsi /= scaling; nsi.setName(""); return nsi; } SampleImplementation SampleImplementation::operator / (const SquareMatrix & scaling) const { SampleImplementation nsi(*this); nsi /= scaling; nsi.setName(""); return nsi; } /* Get the i-th marginal sample */ SampleImplementation SampleImplementation::getMarginal(const UnsignedInteger index) const { if (index >= dimension_) throw InvalidArgumentException(HERE) << "The index of a marginal sample must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension_ == 1) return *this; // General case SampleImplementation marginalSample(size_, 1); // If the sample has a description, extract the marginal description if (!p_description_.isNull()) marginalSample.setDescription(Description(1, getDescription()[index])); for (UnsignedInteger i = 0; i < size_; ++i) marginalSample[i][0] = operator[](i)[index]; return marginalSample; } /* Get the marginal sample corresponding to indices dimensions */ SampleImplementation SampleImplementation::getMarginal(const Indices & indices) const { if (!indices.check(dimension_)) throw InvalidArgumentException(HERE) << "The indices of a marginal sample must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension_ == 1) return *this; // General case const UnsignedInteger outputDimension = indices.getSize(); SampleImplementation marginalSample(size_, outputDimension); // If the sample has a description, extract the marginal description if (!p_description_.isNull()) { const Description description(getDescription()); Description marginalDescription(outputDimension); for (UnsignedInteger i = 0; i < outputDimension; ++ i) marginalDescription[i] = description[indices[i]]; marginalSample.setDescription(marginalDescription); } for (UnsignedInteger i = 0; i < size_; ++i) { for (UnsignedInteger j = 0; j < outputDimension; ++j) { // We access directly to the component of the Point for performance reason marginalSample[i][j] = operator[](i)[indices[j]]; } } return marginalSample; } /* Save to CSV file */ void SampleImplementation::exportToCSVFile(const FileName & filename, const String & csvSeparator) const { std::ofstream csvFile(filename.c_str()); if (csvFile.fail()) throw FileOpenException(HERE) << "Could not open file " << filename; csvFile.imbue(std::locale("C")); csvFile.precision(16); // Export the description if (!p_description_.isNull()) { const Description description(getDescription()); String separator; for (UnsignedInteger i = 0; i < dimension_; ++i, separator = csvSeparator) { String label(description[i]); Bool isBlank = true; for (UnsignedInteger j = 0; isBlank && j < label.size(); ++j) isBlank = (label[j] == ' ') || (label[j] == '\t'); if (isBlank) csvFile << separator << "\"NoDescription\""; else csvFile << separator << "\"" << description[i] << "\""; } csvFile << std::endl; } // Write the data for(UnsignedInteger i = 0; i < size_; ++i) { String separator; for(UnsignedInteger j = 0; j < dimension_; ++j, separator = csvSeparator) { csvFile << separator << std::scientific << operator[](i)[j]; } csvFile << std::endl; } // Close the file csvFile.close(); } /* Method save() stores the object through the StorageManager */ void SampleImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "size_", size_); adv.saveAttribute( "dimension_", dimension_); adv.saveAttribute( "data_", data_); if (!p_description_.isNull()) adv.saveAttribute( "description_", *p_description_ ); } /* Method load() reloads the object from the StorageManager */ void SampleImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "size_", size_); adv.loadAttribute( "dimension_", dimension_); adv.loadAttribute( "data_", data_); Description description; adv.loadAttribute( "description_", description ); if (description.getSize() != 0) setDescription(description); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SecondOrderModel.cxx000066400000000000000000000106761307543307100224730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SecondOrderModel.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SecondOrderModel); /* Constructor with parameters */ SecondOrderModel::SecondOrderModel() : TypedInterfaceObject(new SecondOrderModelImplementation()) { // Nothing to do } SecondOrderModel::SecondOrderModel(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel) : TypedInterfaceObject(new SecondOrderModelImplementation(covarianceModel, spectralModel)) { // Nothing to do } /* Parameters constructor */ SecondOrderModel::SecondOrderModel(const SecondOrderModelImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ SecondOrderModel::SecondOrderModel(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ SecondOrderModel::SecondOrderModel(SecondOrderModelImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* SpectralModel and CovarianceModel accessor */ SpectralModel SecondOrderModel::getSpectralModel() const { return getImplementation()->getSpectralModel(); } CovarianceModel SecondOrderModel::getCovarianceModel() const { return getImplementation()->getCovarianceModel(); } void SecondOrderModel::setModels(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel) { copyOnWrite(); getImplementation()->setModels(covarianceModel, spectralModel); } /* Dimension accessor */ UnsignedInteger SecondOrderModel::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } UnsignedInteger SecondOrderModel::getDimension() const { return getImplementation()->getDimension(); } /* Computation of the covariance matrix */ CovarianceMatrix SecondOrderModel::computeCovariance(const Scalar s, const Scalar t) const { return getImplementation()->computeCovariance(s, t); } /* Computation of the covariance matrix */ CovarianceMatrix SecondOrderModel::computeCovariance(const Point & s, const Point & t) const { return getImplementation()->computeCovariance(s, t); } /* Computation of the covariance matrix */ CovarianceMatrix SecondOrderModel::computeCovariance(const Scalar tau) const { return getImplementation()->computeCovariance(tau); } /* Computation of the covariance matrix */ CovarianceMatrix SecondOrderModel::computeCovariance(const Point & tau) const { return getImplementation()->computeCovariance(tau); } /* Computation of the spectral density function */ HermitianMatrix SecondOrderModel::computeSpectralDensity(const Scalar frequency) const { return getImplementation()->computeSpectralDensity(frequency); } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix SecondOrderModel::discretize(const RegularGrid & timeGrid) const { return getImplementation()->discretize(timeGrid); } /* String converter */ String SecondOrderModel::__repr__() const { OSS oss(true); oss << "class=" << SecondOrderModel::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String SecondOrderModel::__str__(const String & offset) const { OSS oss(false); oss << offset << "class=" << SecondOrderModel::GetClassName() << " implementation=" << getImplementation()->__str__(offset); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SecondOrderModelImplementation.cxx000066400000000000000000000132001307543307100253630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SecondOrderModelImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SecondOrderModelImplementation */ CLASSNAMEINIT(SecondOrderModelImplementation); static const Factory Factory_SecondOrderModelImplementation; /* Constructor without parameters */ SecondOrderModelImplementation::SecondOrderModelImplementation() : PersistentObject() , covarianceModel_() , spectralModel_() { // Nothing to do } SecondOrderModelImplementation::SecondOrderModelImplementation(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel) : PersistentObject(), covarianceModel_(), spectralModel_() { setModels(covarianceModel, spectralModel); } /* Virtual constructor */ SecondOrderModelImplementation * SecondOrderModelImplementation::clone() const { return new SecondOrderModelImplementation(*this); } /* Dimension accessor */ UnsignedInteger SecondOrderModelImplementation::getSpatialDimension() const { return covarianceModel_.getSpatialDimension(); } UnsignedInteger SecondOrderModelImplementation::getDimension() const { return covarianceModel_.getDimension(); } /* Computation of the covariance function */ CovarianceMatrix SecondOrderModelImplementation::computeCovariance(const Scalar s, const Scalar t) const { return covarianceModel_(s, t); } /* Computation of the covariance function */ CovarianceMatrix SecondOrderModelImplementation::computeCovariance(const Point & s, const Point & t) const { return covarianceModel_(s, t); } CovarianceMatrix SecondOrderModelImplementation::computeCovariance(const Scalar tau) const { return covarianceModel_(tau); } CovarianceMatrix SecondOrderModelImplementation::computeCovariance(const Point & tau) const { return covarianceModel_(tau); } /* Computation of the spectral density function */ HermitianMatrix SecondOrderModelImplementation::computeSpectralDensity(const Scalar frequency) const { return spectralModel_(frequency); } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix SecondOrderModelImplementation::discretize(const RegularGrid & timeGrid) const { return covarianceModel_.discretize(timeGrid) ; } /* String converter */ String SecondOrderModelImplementation::__repr__() const { OSS oss; oss << "class= " << SecondOrderModelImplementation::GetClassName(); oss << " covariance model=" << covarianceModel_.__repr__() << " spectral model=" << spectralModel_.__repr__(); return oss; } /* SpectralModel and Covariance model accessor */ SpectralModel SecondOrderModelImplementation::getSpectralModel() const { return spectralModel_; } CovarianceModel SecondOrderModelImplementation::getCovarianceModel() const { return covarianceModel_; } void SecondOrderModelImplementation::setModels(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel) { if (!covarianceModel.isStationary()) throw InvalidArgumentException(HERE) << "Error: the covariance model is not stationary."; if (covarianceModel.getDimension() != spectralModel.getDimension()) throw InvalidDimensionException(HERE) << "Error: the spectral model and the covariance model have different dimensions" << " spectral dimension = " << spectralModel.getDimension() << " covariance dimension = " << covarianceModel.getDimension(); if (covarianceModel.getSpatialDimension() != spectralModel.getSpatialDimension()) throw InvalidDimensionException(HERE) << "Error: the spectral model and the covariance model have different spatial dimensions" << " spectral spatial dimension = " << spectralModel.getSpatialDimension() << " covariance spatial dimension = " << covarianceModel.getSpatialDimension(); covarianceModel_ = covarianceModel; spectralModel_ = spectralModel; } /* String converter */ String SecondOrderModelImplementation::__str__(const String & offset) const { OSS oss(false); oss << offset << "class= " << SecondOrderModelImplementation::GetClassName(); oss << covarianceModel_.__str__(offset) << spectralModel_.__str__(offset); return oss; } /* Method save() stores the object through the StorageManager */ void SecondOrderModelImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "spectralModel_", spectralModel_ ); adv.saveAttribute( "covarianceModel_", covarianceModel_); } /* Method load() reloads the object from the StorageManager */ void SecondOrderModelImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "spectralModel_", spectralModel_ ); adv.loadAttribute( "covarianceModel_", covarianceModel_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SobolSequence.cxx000066400000000000000000000203631307543307100220440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Sobol' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SobolSequence.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SobolSequence); static const Factory Factory_SobolSequence; const UnsignedInteger SobolSequence::MaximumNumberOfDimension = 40; const UnsignedInteger SobolSequence::MaximumBase2Logarithm = 62; const Scalar SobolSequence::Epsilon = 1.0 / power2(MaximumBase2Logarithm); const UnsignedInteger SobolSequence::MaximumInitialDegree = 8; const UnsignedInteger SobolSequence::InitialBase[MaximumNumberOfDimension * MaximumInitialDegree] = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 7, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 1, 3, 1, 1, 0, 0, 0, 0, 1, 1, 3, 7, 0, 0, 0, 0, 1, 3, 3, 9, 9, 0, 0, 0, 1, 3, 7, 13, 3, 0, 0, 0, 1, 1, 5, 11, 27, 0, 0, 0, 1, 3, 5, 1, 15, 0, 0, 0, 1, 1, 7, 3, 29, 0, 0, 0, 1, 3, 7, 7, 21, 0, 0, 0, 1, 1, 1, 9, 23, 37, 0, 0, 1, 3, 3, 5, 19, 33, 0, 0, 1, 1, 3, 13, 11, 7, 0, 0, 1, 1, 7, 13, 25, 5, 0, 0, 1, 3, 5, 11, 7, 11, 0, 0, 1, 1, 1, 3, 13, 39, 0, 0, 1, 3, 1, 15, 17, 63, 13, 0, 1, 1, 5, 5, 1, 27, 33, 0, 1, 3, 3, 3, 25, 17, 115, 0, 1, 1, 3, 15, 29, 15, 41, 0, 1, 3, 1, 7, 3, 23, 79, 0, 1, 3, 7, 9, 31, 29, 17, 0, 1, 1, 5, 13, 11, 3, 29, 0, 1, 3, 1, 9, 5, 21, 119, 0, 1, 1, 3, 1, 23, 13, 75, 0, 1, 3, 3, 11, 27, 31, 73, 0, 1, 1, 7, 7, 19, 25, 105, 0, 1, 3, 5, 5, 21, 9, 7, 0, 1, 1, 1, 15, 5, 49, 59, 0, 1, 1, 1, 1, 1, 33, 65, 0, 1, 3, 5, 15, 17, 19, 21, 0, 1, 1, 7, 11, 13, 29, 3, 0, 1, 3, 7, 5, 7, 11, 113, 0, 1, 1, 5, 3, 15, 19, 61, 0, 1, 3, 1, 1, 9, 27, 89, 7, 1, 1, 3, 7, 31, 15, 45, 23, 1, 3, 3, 9, 9, 25, 107, 39 } ; const Unsigned64BitsInteger SobolSequence::PrimitivePolynomial[MaximumNumberOfDimension] = { 1, 3, 7, 11, 13, 19, 25, 37, 59, 47, 61, 55, 41, 67, 97, 91, 109, 103, 115, 131, 193, 137, 145, 143, 241, 157, 185, 167, 229, 171, 213, 191, 253, 203, 211, 239, 247, 285, 369, 299 } ; /* Constructor with parameters */ SobolSequence::SobolSequence(const UnsignedInteger dimension) : LowDiscrepancySequenceImplementation(dimension) { initialize(dimension); } /* Virtual constructor */ SobolSequence * SobolSequence::clone() const { return new SobolSequence(*this); } /* Initialize the sequence */ void SobolSequence::initialize(const UnsignedInteger dimension) { if((dimension == 0) || (dimension > MaximumNumberOfDimension)) throw InvalidDimensionException(HERE) << "Dimension must be in range [0-" << MaximumNumberOfDimension << "], here dimension=" << dimension << "."; dimension_ = dimension; // copy initial direction numbers base_ = Unsigned64BitsIntegerCollection(dimension_ * MaximumBase2Logarithm, 0); for ( UnsignedInteger i = 0; i < dimension_; ++ i ) for ( UnsignedInteger j = 0; j < MaximumInitialDegree; ++ j ) base_[i * MaximumBase2Logarithm + j] = InitialBase[i * MaximumInitialDegree + j]; // initialize row 0 (first dimension) for ( UnsignedInteger j = 0; j < MaximumBase2Logarithm; ++ j ) base_[j] = 1; // initialize remaining direction numbers, for each dimension <-> rows of base_[][] for ( UnsignedInteger i = 1; i < dimension_; ++ i ) { // number of bits of PrimitivePolynomial[i] UnsignedInteger polynomialCoefficientDegree = 0; Unsigned64BitsInteger polynomialCoefficient = PrimitivePolynomial[i]; // get number of bits of the PrimitivePolynomial[i] coefficient (could have used log2) while(polynomialCoefficient > 1) { polynomialCoefficient /= 2; ++ polynomialCoefficientDegree; } // generate remaining direction numbers for ( UnsignedInteger j = polynomialCoefficientDegree; j < MaximumBase2Logarithm; ++ j ) { base_[i * MaximumBase2Logarithm + j] = base_[i * MaximumBase2Logarithm + j - polynomialCoefficientDegree]; for ( UnsignedInteger k = 1; k <= polynomialCoefficientDegree; ++ k ) { if((PrimitivePolynomial[i] & power2(polynomialCoefficientDegree - k)) > 0) { base_[i * MaximumBase2Logarithm + j] ^= base_[i * MaximumBase2Logarithm + j - k] * power2(k); } } // k } // j } // i // multiply columns of directionNumber[][] by appropriate power of 2 for ( UnsignedInteger j = 0; j < MaximumBase2Logarithm - 1; ++ j ) for ( UnsignedInteger i = 0; i < dimension_; ++ i ) base_[i * MaximumBase2Logarithm + j] *= power2(MaximumBase2Logarithm - j - 1); // initialize integer coefficients of the sequence : first column of directionNumber[][] coefficients_ = Unsigned64BitsIntegerCollection(dimension_); for ( UnsignedInteger i = 0; i < dimension_; ++ i ) coefficients_[i] = base_[i * MaximumBase2Logarithm]; // set the seed seed_ = ResourceMap::GetAsUnsignedInteger( "SobolSequence-InitialSeed" ); } /* Generate a pseudo-random vector of independant numbers uniformly distributed over [0, 1[ */ Point SobolSequence::generate() const { // initialize a point with values 2^-MaximumBase2Logarithm Point sequencePoint(dimension_, Epsilon); // compute the position of the lowest 0 bit in the binary representation of seed_ const UnsignedInteger positionOfLowest0BitOfSeed = computePositionOfLowest0Bit(seed_); // for each dimension for(UnsignedInteger i = 0; i < dimension_; ++ i ) { // compute sequence from integer coefficients sequencePoint[i] *= coefficients_[i]; // update integer coefficients for next generation coefficients_[i] ^= base_[i * MaximumBase2Logarithm + positionOfLowest0BitOfSeed - 1]; } // increment seed for next generation ++seed_; return sequencePoint; } /* String converter */ String SobolSequence::__repr__() const { OSS oss; oss << "class=" << SobolSequence::GetClassName() << " derived from " << LowDiscrepancySequenceImplementation::__repr__() << " coefficients=" << coefficients_ << " seed=" << seed_; return oss; } /* return 2^n */ Unsigned64BitsInteger SobolSequence::power2(const UnsignedInteger n) { return (Unsigned64BitsInteger)1 << n; } /* returns the position of the lowest '0' in the binary representation of an integer */ UnsignedInteger SobolSequence::computePositionOfLowest0Bit(const Unsigned64BitsInteger number) { UnsignedInteger base2Logarithm = 0; while((number & power2(base2Logarithm)) && (base2Logarithm <= MaximumBase2Logarithm)) { ++ base2Logarithm; } return base2Logarithm + 1;// 1 <=> first bit } void SobolSequence::save(Advocate & adv) const { LowDiscrepancySequenceImplementation::save(adv); adv.saveAttribute( "seed_", seed_); adv.saveAttribute( "coefficients_", coefficients_); } /* Method load() reloads the object from the StorageManager */ void SobolSequence::load(Advocate & adv) { LowDiscrepancySequenceImplementation::load(adv); initialize(dimension_); adv.loadAttribute( "seed_", seed_); adv.loadAttribute( "coefficients_", coefficients_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SpectralModel.cxx000066400000000000000000000074151307543307100220360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface class for the concept of spectral model for * stationary processes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpectralModel.hxx" #include "openturns/CauchyModel.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SpectralModel); // static const Factory Factory_SpectralModel; /* Constructor with parameters */ SpectralModel::SpectralModel() : TypedInterfaceObject(new CauchyModel()) { // Nothing to do } /* Parameters constructor */ SpectralModel::SpectralModel(const SpectralModelImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ SpectralModel::SpectralModel(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ SpectralModel::SpectralModel(SpectralModelImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Dimension accessor */ UnsignedInteger SpectralModel::getDimension() const { return getImplementation()->getDimension(); } /* Dimension accessor */ UnsignedInteger SpectralModel::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } HermitianMatrix SpectralModel::operator() (const Scalar frequency) const { return getImplementation()->operator()(frequency); } Complex SpectralModel::computeStandardRepresentative(const Scalar frequency) const { return getImplementation()->computeStandardRepresentative(frequency); } /* Drawing method */ Graph SpectralModel::draw(const UnsignedInteger rowIndex, const UnsignedInteger columnIndex, const Scalar minimumFrequency, const Scalar maximumFrequency, const UnsignedInteger frequencyNumber, const Bool module) const { return getImplementation()->draw(rowIndex, columnIndex, minimumFrequency, maximumFrequency, frequencyNumber, module); } /** Amplitude accessor */ Point SpectralModel::getAmplitude() const { return getImplementation()->getAmplitude(); } void SpectralModel::setAmplitude(const Point & amplitude) { copyOnWrite(); return getImplementation()->setAmplitude(amplitude); } /** Scale accessor */ Point SpectralModel::getScale() const { return getImplementation()->getScale(); } void SpectralModel::setScale(const Point & scale) { copyOnWrite(); return getImplementation()->setScale(scale); } /** Spatial correlation accessor */ CorrelationMatrix SpectralModel::getSpatialCorrelation() const { return getImplementation()->getSpatialCorrelation(); } /* String converter */ String SpectralModel::__repr__() const { return getImplementation()->__repr__(); } /* String converter */ String SpectralModel::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SpectralModelFactory.cxx000066400000000000000000000056011307543307100233610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpectralModelFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SpectralModelFactory); /* Default constructor */ SpectralModelFactory::SpectralModelFactory() : TypedInterfaceObject(new SpectralModelFactoryImplementation()) { // Nothing to do } /* Parameters constructor */ SpectralModelFactory::SpectralModelFactory(const SpectralModelFactoryImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ SpectralModelFactory::SpectralModelFactory(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ SpectralModelFactory::SpectralModelFactory(SpectralModelFactoryImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Virtual constructor */ SpectralModelFactory * SpectralModelFactory::clone() const { return new SpectralModelFactory(*this); } /* FFT algorithm accessor */ FFT SpectralModelFactory::getFFTAlgorithm() const { return getImplementation()->getFFTAlgorithm(); } /* FFT algorithm accessor */ void SpectralModelFactory::setFFTAlgorithm(FFT & fft) { copyOnWrite(); getImplementation()->setFFTAlgorithm(fft); } /* String converter */ String SpectralModelFactory::__repr__() const { OSS oss(true); oss << "class=" << SpectralModelFactory::GetClassName() << " implementation = " << getImplementation()->__repr__(); return oss; } /* String converter */ String SpectralModelFactory::__str__(const String & offset) const { return getImplementation()->__str__(offset); } SpectralModel SpectralModelFactory::build(const ProcessSample & sample) const { return getImplementation()->build(sample); } SpectralModel SpectralModelFactory::build(const Field & timeSeries) const { return getImplementation()->build(timeSeries); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SpectralModelFactoryImplementation.cxx000066400000000000000000000062271307543307100262740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpectralModelFactoryImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SpectralModelFactoryImplementation); static const Factory Factory_SpectralModelFactoryImplementation; /* Default constructor */ SpectralModelFactoryImplementation::SpectralModelFactoryImplementation() : PersistentObject() , fftAlgorithm_() { // Nothing to do } /* Virtual constructor */ SpectralModelFactoryImplementation * SpectralModelFactoryImplementation::clone() const { return new SpectralModelFactoryImplementation(*this); } /* FFT algorithm accessor */ FFT SpectralModelFactoryImplementation::getFFTAlgorithm() const { return fftAlgorithm_; } /* FFT algorithm accessor */ void SpectralModelFactoryImplementation::setFFTAlgorithm(const FFT & fft) { fftAlgorithm_ = fft; } /* String converter */ String SpectralModelFactoryImplementation::__repr__() const { OSS oss(true); oss << "class=" << SpectralModelFactoryImplementation::GetClassName(); return oss; } /* String converter */ String SpectralModelFactoryImplementation::__str__(const String & offset) const { return OSS(false) << offset << this->getClassName(); } /* Here is the interface that all derived class must implement */ SpectralModelFactoryImplementation::Implementation SpectralModelFactoryImplementation::build(const ProcessSample & sample) const { throw NotYetImplementedException(HERE) << "In SpectralModelFactoryImplementation::build(const ProcessSample & sample) const"; } SpectralModelFactoryImplementation::Implementation SpectralModelFactoryImplementation::build(const Field & timeSeries) const { throw NotYetImplementedException(HERE) << "In SpectralModelFactoryImplementation::build(const Field & timeSeries) const"; } /* Method save() stores the object through the StorageManager */ void SpectralModelFactoryImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "fftAlgorithm_", fftAlgorithm_); } /* Method load() reloads the object from the StorageManager */ void SpectralModelFactoryImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "fftAlgorithm_", fftAlgorithm_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SpectralModelImplementation.cxx000066400000000000000000000227061307543307100247440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class SpectralModelImplementation defines the concept of * spectral model for stationary processes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpectralModelImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/Curve.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SpectralModelImplementation); static const Factory Factory_SpectralModelImplementation; /* Constructor with parameters */ SpectralModelImplementation::SpectralModelImplementation() : PersistentObject() , dimension_(1) , scale_(Point(1, 1.0)) , amplitude_(Point(1, 1.0)) , spatialDimension_(1) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) { updateSpatialCovariance(); } SpectralModelImplementation::SpectralModelImplementation(const Point & scale, const Point & amplitude) : PersistentObject() , dimension_(amplitude.getDimension()) , scale_(0) , amplitude_(0) , spatialDimension_(scale.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(true) { setAmplitude(amplitude); setScale(scale); updateSpatialCovariance(); } SpectralModelImplementation::SpectralModelImplementation(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation) : PersistentObject() , dimension_(amplitude.getDimension()) , scale_(0) , amplitude_(0) , spatialDimension_(scale.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(false) { if (spatialCorrelation.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given spatial correlation has a dimension different from the scales and amplitudes."; isDiagonal_ = spatialCorrelation.isDiagonal(); if (!isDiagonal_) spatialCorrelation_ = spatialCorrelation; setAmplitude(amplitude); setScale(scale); updateSpatialCovariance(); } SpectralModelImplementation::SpectralModelImplementation(const Point & scale, const CovarianceMatrix & spatialCovariance) : PersistentObject() , dimension_(spatialCovariance.getDimension()) , scale_(0) , amplitude_(0) , spatialDimension_(scale.getDimension()) , spatialCorrelation_(0) , spatialCovariance_(0) , isDiagonal_(false) { // Check scale values setScale(scale); spatialCovariance_ = HermitianMatrix(dimension_); amplitude_ = Point(dimension_); // As spatialCovariance is a covariance matrix, we convert it into an HermitianMatrix for (UnsignedInteger i = 0; i < dimension_; ++i) { amplitude_[i] = sqrt(spatialCovariance(i, i)); spatialCovariance_(i, i) = spatialCovariance(i, i); } // Convert the spatial covariance into a spatial correlation isDiagonal_ = spatialCovariance.isDiagonal(); if (!isDiagonal_) { spatialCorrelation_ = CorrelationMatrix(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { spatialCorrelation_(i, j) = spatialCovariance(i, j) / (amplitude_[i] * amplitude_[j]); spatialCovariance_(i, j) = spatialCovariance(i, j); } } } } /* Virtual constructor */ SpectralModelImplementation * SpectralModelImplementation::clone() const { return new SpectralModelImplementation(*this); } /* Dimension accessor */ UnsignedInteger SpectralModelImplementation::getDimension() const { return dimension_; } /* Dimension accessor */ void SpectralModelImplementation::setDimension(const UnsignedInteger dimension) { dimension_ = dimension; } /* Dimension accessor */ UnsignedInteger SpectralModelImplementation::getSpatialDimension() const { return spatialDimension_; } /* Computation of the spectral density function */ HermitianMatrix SpectralModelImplementation::operator() (const Scalar frequency) const { // Spectral density is given as the Fourier transform of the stationary covariance function // With the formal expression of stationary covariance, ie C(x,y) = S * rho( |x- y|/|scale|), // the dsp writes as S * \hat{rho}(f) Complex rho = computeStandardRepresentative(frequency); return spatialCovariance_ * rho; } /** Standard representative */ Complex SpectralModelImplementation::computeStandardRepresentative(const Scalar frequency) const { throw NotYetImplementedException(HERE) << "In SpectralModelImplementation::computeStandardRepresentative(const Scalar frequency) const"; } /* Amplitude accessor */ Point SpectralModelImplementation::getAmplitude() const { return amplitude_; } void SpectralModelImplementation::setAmplitude(const Point & amplitude) { for (UnsignedInteger index = 0; index < dimension_; ++index) if (amplitude[index] <= 0) throw InvalidArgumentException(HERE) << "Error - The component " << index << " of amplitude is non positive" ; amplitude_ = amplitude; updateSpatialCovariance(); } /* Scale accessor */ Point SpectralModelImplementation::getScale() const { return scale_; } void SpectralModelImplementation::setScale(const Point & scale) { for (UnsignedInteger index = 0; index < spatialDimension_; ++index) if (scale[index] <= 0) throw InvalidArgumentException(HERE) << "Error - The component " << index << " of scale is non positive" ; scale_ = scale; } /* Spatial correlation accessor */ CorrelationMatrix SpectralModelImplementation::getSpatialCorrelation() const { if (!isDiagonal_) return spatialCorrelation_; return CorrelationMatrix(dimension_); } void SpectralModelImplementation::updateSpatialCovariance() { spatialCovariance_ = HermitianMatrix(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { spatialCovariance_(j, j) = amplitude_[j] * amplitude_[j]; if (!isDiagonal_) { for (UnsignedInteger i = j + 1; i < dimension_; ++i) spatialCovariance_(i, j) = spatialCorrelation_(i , j) * amplitude_[i] * amplitude_[j]; } } } /* String converter */ String SpectralModelImplementation::__repr__() const { OSS oss(true); oss << "class=" << SpectralModelImplementation::GetClassName(); return oss; } /* String converter */ String SpectralModelImplementation::__str__(const String & offset) const { OSS oss(false); oss << offset << "class=" << SpectralModelImplementation::GetClassName(); return oss; } /* Drawing method */ Graph SpectralModelImplementation::draw(const UnsignedInteger rowIndex, const UnsignedInteger columnIndex, const Scalar minimumFrequency, const Scalar maximumFrequency, const UnsignedInteger frequencyNumber, const Bool module) const { if (rowIndex >= dimension_) throw InvalidArgumentException(HERE) << "Error: the given row index must be less than " << dimension_ << ", here rowIndex=" << rowIndex; if (columnIndex >= dimension_) throw InvalidArgumentException(HERE) << "Error: the given column index must be less than " << dimension_ << ", here columnIndex=" << columnIndex; Sample data(frequencyNumber, 2); for (UnsignedInteger i = 0; i < frequencyNumber; ++i) { const Scalar f = (i * minimumFrequency + (frequencyNumber - i - 1.0) * maximumFrequency) / (frequencyNumber - 1.0); const Complex value((*this)(f)(rowIndex, columnIndex)); data[i][0] = f; if (module) data[i][1] = std::abs(value); else data[i][1] = std::arg(value); } Graph graph(getName(), "f", String("spectral density") + (module ? String("module") : String("phase")), true, "topright"); Curve curve(data); curve.setLineWidth(2); if (module) curve.setColor("red"); else curve.setColor("blue"); graph.add(curve); return graph; } /* Method save() stores the object through the StorageManager */ void SpectralModelImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "dimension_", dimension_); adv.saveAttribute( "scale_", scale_); adv.saveAttribute( "amplitude_", amplitude_); adv.saveAttribute( "spatialDimension_", spatialDimension_); adv.saveAttribute( "spatialCorrelation_", spatialCorrelation_); adv.saveAttribute( "spatialCovariance_", spatialCovariance_); adv.saveAttribute( "isDiagonal_", isDiagonal_); } /* Method load() reloads the object from the StorageManager */ void SpectralModelImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "dimension_", dimension_); adv.loadAttribute( "scale_", scale_); adv.loadAttribute( "amplitude_", amplitude_); adv.loadAttribute( "spatialDimension_", spatialDimension_); adv.loadAttribute( "spatialCorrelation_", spatialCorrelation_); adv.loadAttribute( "spatialCovariance_", spatialCovariance_); adv.loadAttribute( "isDiagonal_", isDiagonal_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SphericalModel.cxx000066400000000000000000000132111307543307100221620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SphericalModel.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SphericalModel */ CLASSNAMEINIT(SphericalModel); static const Factory Factory_SphericalModel; /* Constructor from spatial dimension */ SphericalModel::SphericalModel(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(spatialDimension) , radius_(1.0) { if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Error: the output dimension must be 1, here dimension=" << dimension_; } /* Constructor with parameters */ SphericalModel::SphericalModel(const Point & scale, const Point & amplitude, const Scalar radius) : StationaryCovarianceModel(scale, amplitude) , radius_(-1.0) { if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Error: the output dimension must be 1, here dimension=" << dimension_; setRadius(radius); } /* Virtual constructor */ SphericalModel * SphericalModel::clone() const { return new SphericalModel(*this); } CovarianceMatrix SphericalModel::operator() (const Point & tau) const { CovarianceMatrix covarianceMatrix(dimension_); covarianceMatrix(0, 0) = computeAsScalar(tau); return covarianceMatrix; } Scalar SphericalModel::computeAsScalar(const Point & tau) const { return amplitude_[0] * computeStandardRepresentative(tau); } /* Computation of the representative function: * rho(tau) = amplitude_ * (1 - 0.5|tau/scale| (3 - (|tau/scale| / radius)^2)) for 0<=|tau/scale|<=radius, 0 otherwise */ Scalar SphericalModel::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "In SphericalModel::computeStandardRepresentative: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar normTauOverScaleA = tauOverTheta.norm() / radius_; if (normTauOverScaleA <= SpecFunc::ScalarEpsilon) return 1.0 + nuggetFactor_; if (normTauOverScaleA >= 1.0) return 0.0; return 1.0 - 0.5 * normTauOverScaleA * (3.0 - normTauOverScaleA * normTauOverScaleA); } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix SphericalModel::discretize(const RegularGrid & timeGrid) const { const UnsignedInteger size = timeGrid.getN(); const UnsignedInteger fullSize = size; const Scalar timeStep = timeGrid.getStep(); CovarianceMatrix cov(fullSize); for (UnsignedInteger diag = 0; diag < size; ++diag) { const Scalar covTau = computeAsScalar(Point(1, diag * timeStep)); for (UnsignedInteger i = 0; i < size - diag; ++i) cov(i, i + diag) = covTau; } return cov; } /* Is it a stationary model ? */ Bool SphericalModel::isStationary() const { return true; } void SphericalModel::setFullParameter(const Point & parameter) { CovarianceModelImplementation::setFullParameter(parameter); setRadius(parameter[parameter.getSize() - 1]); } Point SphericalModel::getFullParameter() const { // Get the generic parameter Point parameter(CovarianceModelImplementation::getFullParameter()); // Add the specific one parameter.add(radius_); return parameter; } Description SphericalModel::getFullParameterDescription() const { // Description of the generic parameter Description description(CovarianceModelImplementation::getFullParameterDescription()); // Description of the specific parameter description.add("radius"); return description; } /* String converter */ String SphericalModel::__repr__() const { OSS oss(true); oss << "class=" << SphericalModel::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_ << " radius=" << radius_; return oss; } /* String converter */ String SphericalModel::__str__(const String & offset) const { OSS oss; oss << SphericalModel::GetClassName() << "(scale=" << scale_.__str__() << ", amplitude=" << amplitude_.__str__() << ", radius=" << radius_ << ")"; return oss; } /* Radius accessor */ Scalar SphericalModel::getRadius() const { return radius_; } void SphericalModel::setRadius(const Scalar radius) { if (!(radius > 0.0)) throw InvalidArgumentException(HERE) << "Error: the radius must be positive."; radius_ = radius; } /* Method save() stores the object through the StorageManager */ void SphericalModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute("radius_", radius_); } /* Method load() reloads the object from the StorageManager */ void SphericalModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); adv.loadAttribute("radius_", radius_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/SquaredExponential.cxx000066400000000000000000000107711307543307100231120ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SquaredExponential.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SquaredExponential); static const Factory Factory_SquaredExponential; /* Default constructor */ SquaredExponential::SquaredExponential(const UnsignedInteger spatialDimension) : StationaryCovarianceModel(Point(spatialDimension, ResourceMap::GetAsScalar("SquaredExponential-DefaultTheta")), Point(1, 1.0)) { // Nothing to do } /** Parameters constructor */ SquaredExponential::SquaredExponential(const Point & scale) : StationaryCovarianceModel(scale, Point(1, 1.0)) { // Nothing to do } /** Parameters constructor */ SquaredExponential::SquaredExponential(const Point & scale, const Point & amplitude) : StationaryCovarianceModel(scale, amplitude) { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "In SquaredExponential::SquaredExponential, only unidimensional models should be defined." << " Here, (got dimension=" << getDimension() << ")"; } /* Virtual constructor */ SquaredExponential * SquaredExponential::clone() const { return new SquaredExponential(*this); } /* Computation of the covariance function */ Scalar SquaredExponential::computeStandardRepresentative(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar tauOverTheta2 = tauOverTheta.normSquare(); return tauOverTheta2 <= SpecFunc::ScalarEpsilon ? 1.0 + nuggetFactor_ : exp(-0.5 * tauOverTheta2); } /* Gradient */ Matrix SquaredExponential::partialGradient(const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; const Point tau = s - t; Point tauOverTheta(spatialDimension_); for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] = tau[i] / scale_[i]; const Scalar norm2 = tauOverTheta.normSquare(); // For zero norm if (norm2 == 0.0) return Matrix(spatialDimension_, 1); // General case const Scalar value = -std::exp(-0.5 * norm2); // Compute tau/theta^2 for (UnsignedInteger i = 0; i < spatialDimension_; ++i) tauOverTheta[i] /= scale_[i]; return Matrix(spatialDimension_, 1, tauOverTheta * value) * amplitude_[0] * amplitude_[0]; } /* String converter */ String SquaredExponential::__repr__() const { OSS oss; oss << "class=" << SquaredExponential::GetClassName() << " scale=" << scale_ << " amplitude=" << amplitude_; return oss; } /* String converter */ String SquaredExponential::__str__(const String & offset) const { OSS oss; oss << SquaredExponential::GetClassName() << "(scale=" << scale_.__str__() << ", amplitude=" << amplitude_.__str__() << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void SquaredExponential::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); } /* Method load() reloads the object from the StorageManager */ void SquaredExponential::load(Advocate & adv) { StationaryCovarianceModel::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/StationaryCovarianceModel.cxx000066400000000000000000000131421307543307100244030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StationaryCovarianceModel */ CLASSNAMEINIT(StationaryCovarianceModel); static const Factory Factory_StationaryCovarianceModel; /* Constructor with parameters */ StationaryCovarianceModel::StationaryCovarianceModel(const UnsignedInteger spatialDimension) : CovarianceModelImplementation(spatialDimension) { // Nothing to do } /** Standard constructor with scale and amplitude parameters parameters */ StationaryCovarianceModel::StationaryCovarianceModel(const Point & scale, const Point & amplitude) : CovarianceModelImplementation(scale, amplitude) { // Nothing to do } /** Standard constructor with scale, amplitude and spatial correlation parameters parameters */ StationaryCovarianceModel::StationaryCovarianceModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation) : CovarianceModelImplementation(scale, amplitude, spatialCorrelation) { // Nothing to do } /** Standard constructor with scale and spatial covariance parameters parameters */ StationaryCovarianceModel::StationaryCovarianceModel(const Point & scale, const CovarianceMatrix & spatialCovariance) : CovarianceModelImplementation(scale, spatialCovariance) { // Nothing to do } /* Virtual constructor */ StationaryCovarianceModel * StationaryCovarianceModel::clone() const { return new StationaryCovarianceModel(*this); } /* Computation of the covariance function */ CovarianceMatrix StationaryCovarianceModel::operator() (const Point & s, const Point & t) const { return (*this)(t - s); } CovarianceMatrix StationaryCovarianceModel::operator() (const Point & tau) const { const Scalar rho = computeStandardRepresentative(tau); return CovarianceMatrix((spatialCovariance_ * rho).getImplementation()); } Scalar StationaryCovarianceModel::computeAsScalar(const Point & s, const Point & t) const { return computeAsScalar(t - s); } Scalar StationaryCovarianceModel::computeAsScalar(const Point & tau) const { return (*this)(tau)(0, 0); } Scalar StationaryCovarianceModel::computeStandardRepresentative(const Point & s, const Point & t) const { return computeStandardRepresentative(t - s); } Scalar StationaryCovarianceModel::computeStandardRepresentative(const Point & tau) const { throw NotYetImplementedException(HERE) << "In StationaryCovarianceModel::computeStandardRepresentative (const Point & tau) const"; } /* Discretize the covariance function on a given TimeGrid */ CovarianceMatrix StationaryCovarianceModel::discretize(const RegularGrid & timeGrid) const { const UnsignedInteger size = timeGrid.getN(); const Scalar timeStep = timeGrid.getStep(); const UnsignedInteger fullSize = size * dimension_; CovarianceMatrix covarianceMatrix(fullSize); // Fill-in the matrix by blocks for (UnsignedInteger rowIndex = 0; rowIndex < size; ++rowIndex) { // Only the lower part has to be filled-in const UnsignedInteger rowBase = rowIndex * dimension_; for (UnsignedInteger columnIndex = 0; columnIndex <= rowIndex; ++columnIndex) { const UnsignedInteger columnBase = columnIndex * dimension_; const CovarianceMatrix localCovarianceMatrix(operator()( rowIndex * timeStep, columnIndex * timeStep) ); // We fill the covariance matrix using the previous local one // The full local covariance matrix has to be copied as it is // not copied on a symmetric position for (UnsignedInteger columnIndexLocal = 0; columnIndexLocal < dimension_; ++columnIndexLocal) for (UnsignedInteger rowIndexLocal = 0; rowIndexLocal < dimension_; ++rowIndexLocal) covarianceMatrix(rowBase + rowIndexLocal, columnBase + columnIndexLocal) = localCovarianceMatrix(rowIndexLocal, columnIndexLocal) ; } // column index of the block } // row index of the block return covarianceMatrix; } /* Is the underlying a stationary covariance model ? */ Bool StationaryCovarianceModel::isStationary() const { return true; } /* String converter */ String StationaryCovarianceModel::__repr__() const { OSS oss(true); oss << "class= " << StationaryCovarianceModel::GetClassName(); return oss; } /* String converter */ String StationaryCovarianceModel::__str__(const String & offset) const { OSS oss(false); oss << "class= " << StationaryCovarianceModel::GetClassName(); return oss; } /* Method save() stores the object through the StorageManager */ void StationaryCovarianceModel::save(Advocate & adv) const { CovarianceModelImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void StationaryCovarianceModel::load(Advocate & adv) { CovarianceModelImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/StationaryCovarianceModelFactory.cxx000066400000000000000000000202321307543307100257310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StationaryCovarianceModelFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Collection.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StationaryCovarianceModelFactory); static const Factory Factory_StationaryCovarianceModelFactory; static const Factory > Factory_PersistentCollection_Complex; typedef Collection CovarianceMatrixCollection; /* Default constructor */ StationaryCovarianceModelFactory::StationaryCovarianceModelFactory(const WelchFactory & factory) : CovarianceModelFactoryImplementation() { setSpectralModelFactory(factory); } /* Virtual constructor */ StationaryCovarianceModelFactory * StationaryCovarianceModelFactory::clone() const { return new StationaryCovarianceModelFactory(*this); } /* String converter */ String StationaryCovarianceModelFactory::__repr__() const { OSS oss; oss << "class=" << StationaryCovarianceModelFactory::GetClassName(); return oss; } /* SpectralModelFactory accessors */ WelchFactory StationaryCovarianceModelFactory::getSpectralModelFactory() const { return spectralFactory_; } void StationaryCovarianceModelFactory::setSpectralModelFactory(const WelchFactory & factory) { spectralFactory_ = factory; } /* String converter */ String StationaryCovarianceModelFactory::__str__(const String & offset) const { return __repr__(); } /* Build a covariance model based on a user defined spectral model */ UserDefinedStationaryCovarianceModel StationaryCovarianceModelFactory::buildAsUserDefinedStationaryCovarianceModel(const UserDefinedSpectralModel & mySpectralModel) const { return buildAsUserDefinedStationaryCovarianceModel(mySpectralModel, mySpectralModel.getFrequencyGrid()); } /* Build a covariance model based on a spectral model and a frequency grid */ UserDefinedStationaryCovarianceModel StationaryCovarianceModelFactory::buildAsUserDefinedStationaryCovarianceModel(const SpectralModel & mySpectralModel, const RegularGrid & frequencyGrid) const { // We get the dimension of the model const UnsignedInteger dimension = mySpectralModel.getDimension(); // From the spectral model, we want to evaluate the autocovariance function const UnsignedInteger N = frequencyGrid.getN(); const Scalar df = frequencyGrid.getStep(); const Scalar maximalFrequency = frequencyGrid.getValue(N - 1) + 0.5 * df; // We use the integrale of the spectral density through the frequencies, i.e. // \int_{\Omega_c} S(f) exp(i2\pi f h) df ==> the algorithm works on frequencies // The used algorithm imposes both positive and negative ones // Some transformations are needed const UnsignedInteger size = 2 * N; // Care!!! Check the expression of dt - The time grid should corresponds to the frequency grid const Scalar dt = 0.5 / maximalFrequency; // As we need Fourier transformations, we need to have a structure which enables to stock elements // For d = dimension, we need dimension * 0.5 * (dimension + 1) transformations const UnsignedInteger numberOfFFT = dimension * (dimension + 1) / 2; ComplexMatrix matrix(size, numberOfFFT); for (UnsignedInteger k = 0; k < size; ++k) { UnsignedInteger columnIndex = 0; // Computation is done for the current frequency value // The frequency is computed thanks to the formula (2k +1 -size) *0.5 * df with k=0,.,..,size-1 const Scalar currentFrequency = (2.0 * k + 1 - size) * 0.5 * df; const HermitianMatrix spectralDensity(mySpectralModel(currentFrequency)); for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { const Scalar theta = (size - 1.0) * k * M_PI / size; const Complex alpha(cos(theta), -sin(theta)); const Complex spectralValue(spectralDensity(i, j)); const Complex phi_k(spectralValue * alpha); matrix(k, columnIndex) = phi_k; columnIndex += 1; } } } // At this level, we get elements to launch the fft // We first compute a temporal factor delta(m) = df * N * exp(-\pi * i * (2m + 1 - N) * (N-1) / 2N) // The formula of this last one may be found in the UseCaseGuide Collection delta(size); for (UnsignedInteger m = 0; m < size; ++m) { const Scalar theta = (size - 1.0) / size * 0.5 * M_PI * (2.0 * m + 1.0 - size); const Complex alpha(cos(theta), -1.0 * sin(theta)); delta[m] = df * size * alpha; } // We use the same FFT as the spectral factory FFT fftAlgorithm(spectralFactory_.getFFTAlgorithm()); for (UnsignedInteger columnIndex = 0; columnIndex < numberOfFFT; ++columnIndex) { // FFT applications const Collection marginal(fftAlgorithm.inverseTransform(*matrix.getImplementation(), columnIndex * size, size)); // We save result in the same matrix for (UnsignedInteger rowIndex = 0; rowIndex < size; ++rowIndex) { matrix(rowIndex, columnIndex) = marginal[rowIndex] * delta[rowIndex]; } } // We rewrite the elements in the adequate structure RegularGrid timeGrid(0.5 * dt, dt, N); CovarianceMatrixCollection collection(N); for (UnsignedInteger currentIndex = 0; currentIndex < N; ++currentIndex) { const UnsignedInteger index = currentIndex + N; CovarianceMatrix covariance(dimension); UnsignedInteger columnIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { covariance(i, j) = std::real(matrix(index, columnIndex)); ++columnIndex; } } collection[currentIndex] = covariance; } return UserDefinedStationaryCovarianceModel(timeGrid, collection); } /* Build a covariance model based on a process sample */ CovarianceModelImplementation::Implementation StationaryCovarianceModelFactory::build(const ProcessSample & sample) const { return buildAsUserDefinedStationaryCovarianceModel(sample).clone(); } /* Build a user defined covariance model based on a process sample */ UserDefinedStationaryCovarianceModel StationaryCovarianceModelFactory::buildAsUserDefinedStationaryCovarianceModel(const ProcessSample & sample) const { return buildAsUserDefinedStationaryCovarianceModel(spectralFactory_.buildAsUserDefinedSpectralModel(sample)); } /* Build a covariance model based on a field */ CovarianceModelImplementation::Implementation StationaryCovarianceModelFactory::build(const Field & timeSeries) const { return buildAsUserDefinedStationaryCovarianceModel(timeSeries).clone(); } /* Build a user defined covariance model based on a field */ UserDefinedStationaryCovarianceModel StationaryCovarianceModelFactory::buildAsUserDefinedStationaryCovarianceModel(const Field & timeSeries) const { return buildAsUserDefinedStationaryCovarianceModel(spectralFactory_.buildAsUserDefinedSpectralModel(timeSeries)); } /* Method save() stores the object through the StorageManager */ void StationaryCovarianceModelFactory::save(Advocate & adv) const { CovarianceModelFactoryImplementation::save(adv); adv.saveAttribute( "spectralFactory_", spectralFactory_); } /* Method load() reloads the object from the StorageManager */ void StationaryCovarianceModelFactory::load(Advocate & adv) { CovarianceModelFactoryImplementation::load(adv); adv.loadAttribute( "spectralFactory_", spectralFactory_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/TensorizedCovarianceModel.cxx000066400000000000000000000277711307543307100244110ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TensorizedCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/AbsoluteExponential.hxx" #include "openturns/ExponentialModel.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TensorizedCovarianceModel); static const Factory Factory_TensorizedCovarianceModel; /* Default constructor */ TensorizedCovarianceModel::TensorizedCovarianceModel(const UnsignedInteger dimension) : CovarianceModelImplementation(1) , collection_(dimension, AbsoluteExponential(1)) { setAmplitude(Point(dimension, 1)); activeParameter_ = Indices(getScale().getSize() + getAmplitude().getSize()); activeParameter_.fill(); } /* Parameters constructor */ TensorizedCovarianceModel::TensorizedCovarianceModel(const CovarianceModelCollection & collection) : CovarianceModelImplementation() { setCollection(collection); activeParameter_ = Indices(getScale().getSize() + getAmplitude().getSize()); activeParameter_.fill(); } /** Parameters constructor */ TensorizedCovarianceModel::TensorizedCovarianceModel(const CovarianceModelCollection & collection, const Point & scale) : CovarianceModelImplementation() { setCollection(collection); setScale(scale); activeParameter_ = Indices(getScale().getSize() + getAmplitude().getSize()); activeParameter_.fill(); } /* Collection accessor */ void TensorizedCovarianceModel::setCollection(const CovarianceModelCollection & collection) { // Check if the given models have the same spatial dimension const UnsignedInteger size = collection.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "TensorizedCovarianceModel::setCollection: the collection must have a positive size, here size=0"; Point amplitude(0); spatialDimension_ = collection[0].getSpatialDimension(); // Get dimension: should be the same for all elements dimension_ = 0; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger localSpatialDimension = collection[i].getSpatialDimension(); if (spatialDimension_ != localSpatialDimension) throw InvalidArgumentException(HERE) << "In TensorizedCovarianceModel::setCollection, incompatible spatial dimension of the element #" << i << " spatial dimension of element = " << localSpatialDimension << ", spatial dimension of the model = " << spatialDimension_; const UnsignedInteger localDimension = collection[i].getDimension(); dimension_ += localDimension; const Point localAmplitude(collection[i].getAmplitude()); amplitude.add(localAmplitude); } // Set collection collection_ = collection; // Set amplitude amplitude_ = amplitude; } const TensorizedCovarianceModel::CovarianceModelCollection & TensorizedCovarianceModel::getCollection() const { return collection_; } /* Virtual constructor */ TensorizedCovarianceModel * TensorizedCovarianceModel::clone() const { return new TensorizedCovarianceModel(*this); } /* Computation of the covariance density function */ CovarianceMatrix TensorizedCovarianceModel::operator() (const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; CovarianceMatrix covariance(getDimension()); // Fill by block ==> block index UnsignedInteger blockIndex = 0; const UnsignedInteger size = collection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // Compute the ith block const CovarianceMatrix localCovariance = collection_[i](s, t); const UnsignedInteger localDimension = collection_[i].getDimension(); // Fill lower part of the covariance matrix for (UnsignedInteger localColumn = 0; localColumn < localDimension; ++localColumn) for (UnsignedInteger localRow = localColumn; localRow < localDimension; ++localRow) covariance(blockIndex + localRow, blockIndex + localColumn) = localCovariance(localRow, localColumn); // update blockIndex blockIndex += localDimension; } return covariance; } /* Gradient */ Matrix TensorizedCovarianceModel::partialGradient(const Point & s, const Point & t) const { // Gradient definition results from definition of model // We should pay attention to the scaling factor scale_ Matrix gradient(spatialDimension_, dimension_ * dimension_); UnsignedInteger dimension = 0; const UnsignedInteger size = collection_.getSize(); for(UnsignedInteger k = 0; k < size; ++k) { const CovarianceModel localCovariance = collection_[k]; const UnsignedInteger localDimension = localCovariance.getDimension(); const Matrix gradient_k = localCovariance.partialGradient(s, t); // Gradient gradient_k is of size spatialDimension x localDimension^2 for (UnsignedInteger localIndex = 0; localIndex < localDimension * localDimension; ++localIndex) { // Each row of the matrix gradient_k is a matrix localDimension x localDimension // presented as a collection of scalar of size localDimension^2 // Objective is to get the corresponding localRowIndex & localColumnIndex const UnsignedInteger localRowIndex = localIndex % localDimension; const UnsignedInteger localColumnIndex = localIndex / localDimension; // We seek the corresponding rowIndex & localIndex, if the each row of the // matrix 'gradient' was a matrix of size dimension_ * dimension, const UnsignedInteger rowIndex = dimension + localRowIndex; const UnsignedInteger columnIndex = dimension + localColumnIndex; // With rowIndex & columnIndex, we get the index in collection // because data are presented as vector (or row matrix) const UnsignedInteger index = dimension_ * columnIndex + rowIndex; // Fill gradient matrix // Same index are used for all it rows for (UnsignedInteger spatialIndex = 0; spatialIndex < spatialDimension_; ++spatialIndex) gradient(spatialIndex, index) = gradient_k(spatialIndex, localIndex); } // update dimension dimension += localDimension; } // Return gradient return gradient; } /* Parameters accessor */ void TensorizedCovarianceModel::setFullParameter(const Point & parameter) { const UnsignedInteger parameterDimension = getParameter().getDimension(); if (parameter.getDimension() != parameterDimension) throw InvalidArgumentException(HERE) << "Error: parameter dimension should be " << getParameter().getDimension() << " (got " << parameter.getDimension() << ")"; Point scale(spatialDimension_); Point amplitude(dimension_); for (UnsignedInteger i = 0; i < scale_.getDimension(); ++i) scale[i] = parameter[i]; for (UnsignedInteger i = 0; i < amplitude_.getDimension(); ++i) amplitude[i] = parameter[i + spatialDimension_]; // set parameters setScale(scale); setAmplitude(amplitude); } Point TensorizedCovarianceModel::getFullParameter() const { // Same convention : scale then amplitude parameters Point result(0); result.add(scale_); result.add(amplitude_); return result; } Description TensorizedCovarianceModel::getFullParameterDescription() const { Description description(0); for (UnsignedInteger j = 0; j < scale_.getDimension(); ++ j) description.add(OSS() << "scale_" << j); for (UnsignedInteger j = 0; j < amplitude_.getDimension(); ++ j) description.add(OSS() << "amplitude_" << j); return description; } void TensorizedCovarianceModel::setScale(const Point & scale) { if (scale.getDimension() != getSpatialDimension()) throw InvalidArgumentException(HERE) << "In TensorizedCovarianceModel::setScale, incompatible dimension of the scale vector. Expected scale of size = " << spatialDimension_ << ", vector size = " << scale.getDimension(); Point scale0(collection_[0].getScale()); collection_[0].setScale(scale); for (UnsignedInteger i = 1; i < collection_.getSize(); ++i) { Point newScale(collection_[i].getScale()); for (UnsignedInteger j = 0; j < spatialDimension_; ++j) newScale[j] *= scale[j] / scale0[j]; collection_[i].setScale(newScale); } // Copy of scale but not used scale_ = scale; } /** Amplitude accessor */ void TensorizedCovarianceModel::setAmplitude(const Point & amplitude) { if (amplitude.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "In TensorizedCovarianceModel::setAmplitude, incompatible dimension of the amplitude vector. Expected amplitude of size = " << dimension_ << ", vector size = " << amplitude.getDimension(); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) { const UnsignedInteger localDimension = collection_[i].getDimension(); Point localAmplitude(collection_[i].getAmplitude()); for (UnsignedInteger j = 0; j < localDimension; ++j) { localAmplitude[j] = amplitude[index]; index += 1; } collection_[i].setAmplitude(localAmplitude); } // Copy of amplitude but not used amplitude_ = amplitude; } /* Is it a stationary model ? */ Bool TensorizedCovarianceModel::isStationary() const { for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) if (!collection_[i].isStationary()) return false; return true; } /** Is it a diagonal covariance model ? */ Bool TensorizedCovarianceModel::isDiagonal() const { for (UnsignedInteger i = 0; i < collection_.getSize(); ++i) { if (!collection_[i].isDiagonal()) return false; } return true; } /* String converter */ String TensorizedCovarianceModel::__repr__() const { OSS oss; oss << "class=" << TensorizedCovarianceModel::GetClassName() << " input dimension=" << spatialDimension_ << ", dimension = " << dimension_ << ", models=" << collection_; return oss; } /* String converter */ String TensorizedCovarianceModel::__str__(const String & offset) const { return __repr__(); } /* Marginal accessor */ TensorizedCovarianceModel::Implementation TensorizedCovarianceModel::getMarginal(const UnsignedInteger index) const { if (index >= dimension_) throw InvalidArgumentException(HERE) << "Error: index=" << index << " must be less than output dimension=" << dimension_; UnsignedInteger size = collection_.getSize(); UnsignedInteger start = 0; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger localDimension = collection_[i].getDimension(); const UnsignedInteger stop = start + localDimension; if (index < stop) return collection_[i].getMarginal(index - start).getImplementation(); start = stop; } throw InternalException(HERE) << "In TensorizedCovarianceModel::getMarginal: could not return the marginal"; } /* Method save() stores the object through the StorageManager */ void TensorizedCovarianceModel::save(Advocate & adv) const { CovarianceModelImplementation::save(adv); adv.saveAttribute("collection_", collection_); } /* Method load() reloads the object from the StorageManager */ void TensorizedCovarianceModel::load(Advocate & adv) { CovarianceModelImplementation::load(adv); adv.loadAttribute("collection_", collection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/TestResult.cxx000066400000000000000000000073101307543307100214100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TestResult implements the result of a statistical test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TestResult.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TestResult); static const Factory Factory_TestResult; /* Default constructor */ TestResult::TestResult(): PersistentObject(), testType_(""), binaryQualityMeasure_(false), pValueThreshold_(0.0), pValue_(0.0), description_(0) { // Nothing to do } /* Parameters constructor */ TestResult::TestResult(const String & type, const Bool binMeasure, const Scalar pVal, const Scalar pThreshold): PersistentObject(), testType_(type), binaryQualityMeasure_(binMeasure), pValueThreshold_(pThreshold), pValue_(pVal), description_(0) { // Nothing to do } /* Virtual constructor */ TestResult * TestResult::clone() const { return new TestResult(*this); } /* Description Accessor */ void TestResult::setDescription(const Description & description) { description_ = description; } Description TestResult::getDescription() const { return description_; } /* String converter */ String TestResult::__repr__() const { return OSS() << "class=" << TestResult::GetClassName() << " name=" << getName() << " type=" << testType_ << " binaryQualityMeasure=" << binaryQualityMeasure_ << " p-value threshold=" << pValueThreshold_ << " p-value=" << pValue_ << " description=" << description_; } /* Elements accessors */ Bool TestResult::getBinaryQualityMeasure() const { return binaryQualityMeasure_; } Scalar TestResult::getPValue() const { return pValue_; } Scalar TestResult::getThreshold() const { return pValueThreshold_; } String TestResult::getTestType() const { return testType_; } /* Comparison operator */ Bool TestResult::operator == (const TestResult & other) const { if (this == &other) return true; return (binaryQualityMeasure_ == other.binaryQualityMeasure_) && (pValue_ == other.pValue_) && (pValueThreshold_ == other.pValueThreshold_) && (testType_ == other.testType_); } /** Method save() stores the object through the StorageManager */ void TestResult::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("testType_", testType_); adv.saveAttribute("binaryQualityMeasure_", binaryQualityMeasure_); adv.saveAttribute("pValueThreshold_", pValueThreshold_); adv.saveAttribute("pValue_", pValue_); adv.saveAttribute("description_", description_); } /** Method load() reloads the object from the StorageManager */ void TestResult::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("testType_", testType_); adv.loadAttribute("binaryQualityMeasure_", binaryQualityMeasure_); adv.loadAttribute("pValueThreshold_", pValueThreshold_); adv.loadAttribute("pValue_", pValue_); adv.loadAttribute("description_", description_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/TimeSeries.cxx000066400000000000000000000140441307543307100213450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class TimeSeries implements values indexed by time * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // std::numeric_limits #include #include #include #include #include #include #include #include // std::fopen, std::errno #include // std::strerror #include "openturns/OTconfig.hxx" #include "openturns/TimeSeries.hxx" #include "openturns/StorageManager.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Path.hxx" #include "openturns/Curve.hxx" #include "openturns/Os.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TimeSeries); /* Default constructor */ TimeSeries::TimeSeries() : FieldImplementation(RegularGrid(0.0, 1.0, 0), 1) , start_(0.0) , timeStep_(1.0) , n_(0) { description_[0] = "t"; } /* Standard constructor */ TimeSeries::TimeSeries(const UnsignedInteger n, const UnsignedInteger dim) : FieldImplementation(RegularGrid(0.0, 1.0, n), dim) , start_(0.0) , timeStep_(1.0) , n_(n) { description_[0] = "t"; } /* Constructor from a TimeGrid and a dimension */ TimeSeries::TimeSeries(const RegularGrid & tg, const UnsignedInteger dim) : FieldImplementation(tg, dim) , start_( tg.getStart() ) , timeStep_( tg.getStep() ) , n_( tg.getN() ) { description_[0] = "t"; } /* Constructor from a TimeGrid and a sample */ TimeSeries::TimeSeries(const RegularGrid & tg, const Sample & sample) : FieldImplementation(tg, sample) , start_( tg.getStart() ) , timeStep_( tg.getStep() ) , n_( tg.getN() ) { if (n_ != sample.getSize()) throw InvalidArgumentException(HERE) << "Can't create a TimeSeries with a TimeGrid with " << tg.getN() << " steps and a sample of size " << sample.getSize(); description_[0] = "t"; } /* Constructor from a Field */ TimeSeries::TimeSeries(const Field & field) : FieldImplementation(*field.getImplementation()) , start_( 0 ) , timeStep_( 0 ) , n_( 0 ) { const RegularGrid timeGrid(field.getMesh()); start_ = timeGrid.getStart(); timeStep_ = timeGrid.getStep(); n_ = timeGrid.getN(); description_[0] = "t"; } /* Virtual constructor */ TimeSeries * TimeSeries::clone() const { return new TimeSeries(*this); } /* Comparison function */ Bool TimeSeries::operator ==(const TimeSeries & other) const { if (this == &other) return true; return (mesh_ == other.mesh_) && (values_ == other.values_); } /* String converter */ String TimeSeries::__repr__() const { OSS oss(true); oss << "class=" << TimeSeries::GetClassName() << " name=" << getName() << " derived from=" << FieldImplementation::__repr__() << " start=" << start_ << " timeStep=" << timeStep_ << " n=" << n_; return oss; } String TimeSeries::__str__(const String & offset) const { return FieldImplementation::__str__(offset); } /* Appends an element to the collection */ TimeSeries & TimeSeries::add(const Point & point) { return add(Sample(1, point)); } /* Appends a sample to the collection */ TimeSeries & TimeSeries::add(const Sample & sample) { if ((n_ > 0) && (sample.getDimension() != getDimension())) throw InvalidArgumentException(HERE) << "Error: expected a sample of dimension=" << getDimension() << ", got dimension=" << sample.getDimension(); if (sample.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: expected a sample of dimension greater than 0"; const UnsignedInteger size = sample.getSize(); if (size == 0) return *this; // Update the vertices Sample vertices(mesh_.getVertices()); for (UnsignedInteger i = 0; i < size; ++i) vertices.add(Point(1, start_ + timeStep_ * (n_ + i))); // Update the values values_.add(sample); // Update the simplices // If there is currently no point in the TimeSeries the new points create (size-1) elements UnsignedInteger iStart = 0; if (n_ == 0) iStart = 1; Collection simplices(mesh_.getSimplices()); for (UnsignedInteger i = iStart; i < size; ++i) { Indices element(2); element[1] = n_ + i; // Cannot underflow because either n_>0 or i>0 element[0] = (n_ + i) - 1; simplices.add(element); } mesh_ = Mesh(vertices, simplices); n_ += size; return *this; } /* Append another time series to the collection. The time grids must match (one follows the other) */ TimeSeries & TimeSeries::add(const TimeSeries & continuer) { Sample vertices(mesh_.getVertices()); if ((timeStep_ != continuer.timeStep_) || (start_ + n_ * timeStep_ != continuer.start_)) LOGWARN(OSS() << "The continuer does not have a compatible time grid. Using the values only."); return add(continuer.getSample()); } /* Method save() stores the object through the StorageManager */ void TimeSeries::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "start_", start_); adv.saveAttribute( "timeStep_", timeStep_); adv.saveAttribute( "n_", n_); } /* Method load() reloads the object from the StorageManager */ void TimeSeries::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "start_", start_); adv.loadAttribute( "timeStep_", timeStep_); adv.loadAttribute( "n_", n_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/UserDefinedCovarianceModel.cxx000066400000000000000000000241001307543307100244370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class builds a spectral model using a frequency grid and a spectral function * given as a collection of Covariance Matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UserDefinedCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< CovarianceMatrix >); static const Factory > Factory_PersistentCollection_CovarianceMatrix; CLASSNAMEINIT(UserDefinedCovarianceModel); static const Factory Factory_UserDefinedCovarianceModel; /* Constructor with parameters */ UserDefinedCovarianceModel::UserDefinedCovarianceModel() : CovarianceModelImplementation() , covarianceCollection_(0) , p_mesh_(RegularGrid().clone()) { dimension_ = 0; } // For a non stationary model, we need N x N covariance functions with N the number of vertices in the mesh UserDefinedCovarianceModel::UserDefinedCovarianceModel(const Mesh & mesh, const CovarianceMatrixCollection & covarianceFunction) : CovarianceModelImplementation() , covarianceCollection_(0) , p_mesh_(0) { const UnsignedInteger N = mesh.getVerticesNumber(); const UnsignedInteger size = (N * (N + 1)) / 2; if (size == 0) throw InvalidArgumentException(HERE) << "Error: the mesh is empty."; if (size != covarianceFunction.getSize()) throw InvalidArgumentException(HERE) << "Error: for a non stationary covariance model, sizes are incoherent:" << " mesh size=" << N << " and covariance function size=" << covarianceFunction.getSize() << " instead of " << size; p_mesh_ = mesh.clone(); spatialDimension_ = mesh.getDimension(); covarianceCollection_ = CovarianceMatrixCollection(size); // put the first element covarianceCollection_[0] = covarianceFunction[0]; dimension_ = covarianceCollection_[0].getDimension(); // put the next elements if dimension is ok for (UnsignedInteger k = 1; k < size; ++k) { if (covarianceFunction[k].getDimension() != dimension_) throw InvalidArgumentException(HERE) << " Error with dimension; all the covariance matrices must have the same dimension"; covarianceCollection_[k] = covarianceFunction[k]; } } /* Virtual constructor */ UserDefinedCovarianceModel * UserDefinedCovarianceModel::clone() const { return new UserDefinedCovarianceModel(*this); } /* Computation of the covariance density function */ CovarianceMatrix UserDefinedCovarianceModel::operator() (const Point & s, const Point & t) const { if (s.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point s has dimension=" << s.getDimension() << ", expected dimension=" << spatialDimension_; if (t.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: the point t has dimension=" << t.getDimension() << ", expected dimension=" << spatialDimension_; // If the grid size is one, return the covariance function // else find in the grid the nearest instant values const UnsignedInteger N = p_mesh_->getVerticesNumber(); if (N == 1) return covarianceCollection_[0]; // Use the evaluation based on indices return operator()(p_mesh_->getNearestVertexIndex(s), p_mesh_->getNearestVertexIndex(t)); } CovarianceMatrix UserDefinedCovarianceModel::operator() (const UnsignedInteger i, const UnsignedInteger j) const { UnsignedInteger sIndex = i; UnsignedInteger tIndex = j; // The covariance matrices correspond to sIndex >= tIndex. // As C(s, t) = C(t, s), we swap sIndex and tIndex if sIndex < tIndex if (sIndex < tIndex) std::swap(sIndex, tIndex); // The covariances are stored the following way: // sIndex=0, tIndex=0 -> index=0 // sIndex=1, tIndex=0 -> index=1 // sIndex=1, tIndex=1 -> index=2 // sIndex=2, tIndex=0 -> index=3 // sIndex=2, tIndex=1 -> index=4 // sIndex=2, tIndex=2 -> index=5 // ie index = tIndex + sIndex * (sIndex + 1) / 2 const SignedInteger index = tIndex + (sIndex * (sIndex + 1)) / 2; return covarianceCollection_[index]; } CovarianceMatrix UserDefinedCovarianceModel::discretize(const Mesh & mesh) const { const UnsignedInteger verticesNumber = mesh.getVerticesNumber(); CovarianceMatrix covariance(verticesNumber * dimension_); // It is better to check vertices as the simplices don't play a role in the discretization if (p_mesh_->getVertices() == mesh.getVertices()) { // Here we know that the given mesh is exactly the one defining the covariance model for (UnsignedInteger i = 0; i < covarianceCollection_.getSize(); ++i) { const UnsignedInteger jBase = static_cast< UnsignedInteger >(sqrt(2 * i + 0.25) - 0.5); const UnsignedInteger kBase = i - (jBase * (jBase + 1)) / 2; for (UnsignedInteger k = 0; k < dimension_; ++k) for (UnsignedInteger j = 0; j < dimension_; ++j) covariance(jBase + j, kBase + k) = covarianceCollection_[i](j, k); } return covariance; } // Here we have to project the given mesh on the underlying mesh // We try to call the getNearestVertexIndex() method a minimum number // of time as it is the most costly part of the discretization Indices nearestIndex(verticesNumber); for (UnsignedInteger i = 0; i < verticesNumber; ++i) { nearestIndex[i] = p_mesh_->getNearestVertexIndex(mesh.getVertex(i)); LOGINFO(OSS() << "The vertex " << i << " over " << verticesNumber - 1 << " in the given mesh corresponds to the vertex " << nearestIndex[i] << " in the underlying mesh (" << mesh.getVertex(i).__str__() << "->" << p_mesh_->getVertex(nearestIndex[i]).__str__() << ")"); } // Now, we use a set of loops similar to the default algorithm // Fill-in the matrix by blocks for (UnsignedInteger rowIndex = 0; rowIndex < verticesNumber; ++rowIndex) { const UnsignedInteger rowBase = rowIndex * dimension_; // Only the lower part has to be filled-in for (UnsignedInteger columnIndex = 0; columnIndex <= rowIndex; ++columnIndex) { const UnsignedInteger columnBase = columnIndex * dimension_; const CovarianceMatrix localCovarianceMatrix(operator()(nearestIndex[rowIndex], nearestIndex[columnIndex])); // We fill the covariance matrix using the previous local one // The full local covariance matrix has to be copied as it is // not copied on a symmetric position for (UnsignedInteger rowIndexLocal = 0; rowIndexLocal < dimension_; ++rowIndexLocal) { for (UnsignedInteger columnIndexLocal = 0; columnIndexLocal < dimension_; ++columnIndexLocal) { covariance(rowBase + rowIndexLocal, columnBase + columnIndexLocal) = localCovarianceMatrix(rowIndexLocal, columnIndexLocal) ; } // column index within the block } // row index within the block } // column index of the block } // row index of the block return covariance; } Sample UserDefinedCovarianceModel::discretizeRow(const Sample & vertices, const UnsignedInteger p) const { if (dimension_ != 1) throw InternalException(HERE) << "Error: the discretizeRow() method is not defined if the output dimension is not 1. Here, dimension=" << dimension_; const UnsignedInteger size = vertices.getSize(); Sample result(size, 1); if (vertices == p_mesh_->getVertices()) { UnsignedInteger index = (p * (p + 1)) / 2; for (UnsignedInteger i = 0; i < p; ++i) { result[i][0] = covarianceCollection_[index](0, 0); ++index; } UnsignedInteger shift = p; for (UnsignedInteger i = p; i < size; ++i) { result[i][0] = covarianceCollection_[index](0, 0); ++shift; index += shift; } return result; } Indices nearestIndex(size); for (UnsignedInteger i = 0; i < size; ++i) { nearestIndex[i] = p_mesh_->getNearestVertexIndex(vertices[i]); LOGINFO(OSS() << "The vertex " << i << " over " << size - 1 << " in the given sample corresponds to the vertex " << nearestIndex[i] << " in the underlying mesh (" << Point(vertices[i]).__str__() << "->" << p_mesh_->getVertex(nearestIndex[i]).__str__() << ")"); } for (UnsignedInteger i = 0; i < size; ++i) result[i][0] = operator()(nearestIndex[p], nearestIndex[i])(0, 0); return result; } /* Mesh accessor */ Mesh UserDefinedCovarianceModel::getMesh() const { return *p_mesh_; } /* Time grid accessor */ RegularGrid UserDefinedCovarianceModel::getTimeGrid() const { return RegularGrid(*p_mesh_); } /* String converter */ String UserDefinedCovarianceModel::__repr__() const { OSS oss(true); oss << "class=" << UserDefinedCovarianceModel::GetClassName() << " mesh=" << p_mesh_->__repr__() << " covarianceCollection=" << covarianceCollection_; return oss; } /* String converter */ String UserDefinedCovarianceModel::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void UserDefinedCovarianceModel::save(Advocate & adv) const { CovarianceModelImplementation::save(adv); adv.saveAttribute( "mesh_", *p_mesh_); adv.saveAttribute( "covarianceCollection_", covarianceCollection_); } /* Method load() reloads the object from the StorageManager */ void UserDefinedCovarianceModel::load(Advocate & adv) { TypedInterfaceObject mesh; CovarianceModelImplementation::load(adv); adv.loadAttribute( "mesh_", mesh); p_mesh_ = mesh.getImplementation(); adv.loadAttribute( "covarianceCollection_", covarianceCollection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/UserDefinedSpectralModel.cxx000066400000000000000000000113761307543307100241550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UserDefinedSpectralModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< HermitianMatrix >); static const Factory > Factory_PersistentCollection_HermitianMatrix; CLASSNAMEINIT(UserDefinedSpectralModel); static const Factory Factory_UserDefinedSpectralModel; /* Constructor with parameters */ UserDefinedSpectralModel::UserDefinedSpectralModel() : SpectralModelImplementation() , DSPCollection_(0) { dimension_ = 0; } UserDefinedSpectralModel::UserDefinedSpectralModel(const RegularGrid & frequencyGrid, const HermitianMatrixCollection & spectralFunction) : SpectralModelImplementation(), DSPCollection_(0) { const UnsignedInteger N = frequencyGrid.getN(); if (N != spectralFunction.getSize()) throw InvalidArgumentException(HERE) << "Error: Frequency grid and spectral functions have different sizes"; if (frequencyGrid.getStart() < 0.0) throw InvalidArgumentException(HERE) << "Error: The frequency grid must contains only nonnegative values"; setFrequencyGrid(frequencyGrid); DSPCollection_ = HermitianMatrixCollection(N); // put the first element DSPCollection_[0] = spectralFunction[0]; DSPCollection_[0].checkHermitian(); setDimension(DSPCollection_[0].getDimension()); // put the next elements if dimension is ok for (UnsignedInteger k = 1; k < N; ++k) { if (spectralFunction[k].getDimension() != dimension_) throw InvalidArgumentException(HERE) << " Error with dimension; the spectral matrices should be of same dimension"; DSPCollection_[k] = spectralFunction[k]; DSPCollection_[k].checkHermitian(); } } /* Virtual constructor */ UserDefinedSpectralModel * UserDefinedSpectralModel::clone() const { return new UserDefinedSpectralModel(*this); } /* Computation of the spectral density function */ HermitianMatrix UserDefinedSpectralModel::operator() (const Scalar frequency) const { Bool nonNegative = frequency >= 0.0; // If the grid size is one , return the spectral function // else find in the grid the nearest frequency value if (getFrequencyGrid().getN() == 1) return DSPCollection_[0]; const Scalar frequencyStep = getFrequencyGrid().getStep(); const UnsignedInteger nFrequency = getFrequencyGrid().getN(); const UnsignedInteger index = std::min( nFrequency - 1, static_cast( std::max( 0.0, nearbyint( ( std::abs(frequency) - frequencyGrid_.getStart() ) / frequencyStep) ) ) ); // Use the relation S(-f) = conjugate(S(f)) return (nonNegative ? DSPCollection_[index] : DSPCollection_[index].conjugate()); } /* Frequency grid accessors */ RegularGrid UserDefinedSpectralModel::getFrequencyGrid() const { return frequencyGrid_; } void UserDefinedSpectralModel::setFrequencyGrid(const RegularGrid & frequencyGrid) { frequencyGrid_ = frequencyGrid; } /* String converter */ String UserDefinedSpectralModel::__repr__() const { OSS oss(true); oss << "class=" << UserDefinedSpectralModel::GetClassName() << " DSPCollection=" << DSPCollection_ << " frequencyGrid=" << getFrequencyGrid(); return oss; } /* String converter */ String UserDefinedSpectralModel::__str__(const String & offset) const { OSS oss(false); oss << "frequency=" << frequencyGrid_.__str__(offset) << " dimension=" << dimension_ << " DSPCollection=" << DSPCollection_.__str__(offset); return oss; } /* Method save() stores the object through the StorageManager */ void UserDefinedSpectralModel::save(Advocate & adv) const { SpectralModelImplementation::save(adv); adv.saveAttribute( "DSPCollection_", DSPCollection_); } /* Method load() reloads the object from the StorageManager */ void UserDefinedSpectralModel::load(Advocate & adv) { SpectralModelImplementation::load(adv); adv.loadAttribute( "DSPCollection_", DSPCollection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/UserDefinedStationaryCovarianceModel.cxx000066400000000000000000000121351307543307100265220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class build a stationary covariance model using a time grid and a collection of covariance matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UserDefinedStationaryCovarianceModel.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS // TEMPLATE_CLASSNAMEINIT(PersistentCollection< CovarianceMatrix >); // static const Factory > Factory_PersistentCollection_CovarianceMatrix; CLASSNAMEINIT(UserDefinedStationaryCovarianceModel); static const Factory Factory_UserDefinedStationaryCovarianceModel; /* Constructor with parameters */ UserDefinedStationaryCovarianceModel::UserDefinedStationaryCovarianceModel() : StationaryCovarianceModel() , covarianceCollection_(0) , p_mesh_(Mesh().clone()) { spatialDimension_ = 1; dimension_ = 0; } // Classical constructor // For a stationary model, we need N covariance matrices with N the number of time stamps in the time grid UserDefinedStationaryCovarianceModel::UserDefinedStationaryCovarianceModel(const Mesh & mesh, const CovarianceMatrixCollection & covarianceFunction) : StationaryCovarianceModel() , covarianceCollection_(0) { const UnsignedInteger size = mesh.getVerticesNumber(); if (size != covarianceFunction.getSize()) throw InvalidArgumentException(HERE) << "Error: for a non stationary covariance model, sizes are incoherents" << " mesh size = " << size << "covariance function size = " << covarianceFunction.getSize(); p_mesh_ = mesh.clone(); spatialDimension_ = mesh.getDimension(); covarianceCollection_ = CovarianceMatrixCollection(size); // put the first element covarianceCollection_[0] = covarianceFunction[0]; dimension_ = covarianceCollection_[0].getDimension(); // put the next elements if dimension is ok for (UnsignedInteger k = 1; k < size; ++k) { if (covarianceFunction[k].getDimension() != dimension_) throw InvalidArgumentException(HERE) << " Error with dimension; the covariance matrices should be of same dimension"; covarianceCollection_[k] = covarianceFunction[k]; } } /* Virtual constructor */ UserDefinedStationaryCovarianceModel * UserDefinedStationaryCovarianceModel::clone() const { return new UserDefinedStationaryCovarianceModel(*this); } /* Computation of the covariance function */ CovarianceMatrix UserDefinedStationaryCovarianceModel::operator()(const Point & tau) const { if (tau.getDimension() != spatialDimension_) throw InvalidArgumentException(HERE) << "Error: expected a shift of dimension=" << spatialDimension_ << ", got dimension=" << tau.getDimension(); // If the grid size is one, return the covariance function // else find in the grid the nearest instant values with nonnegative first component if (p_mesh_->getVerticesNumber() == 1) return covarianceCollection_[0]; if (tau[0] < 0.0) return covarianceCollection_[p_mesh_->getNearestVertexIndex(tau * (-1.0))]; return covarianceCollection_[p_mesh_->getNearestVertexIndex(tau)]; } /* Time grid/mesh accessor */ Mesh UserDefinedStationaryCovarianceModel::getMesh() const { return *p_mesh_; } /* Mesh accessor */ RegularGrid UserDefinedStationaryCovarianceModel::getTimeGrid() const { return RegularGrid(*p_mesh_); } /* String converter */ String UserDefinedStationaryCovarianceModel::__repr__() const { OSS oss(true); oss << "class=" << UserDefinedStationaryCovarianceModel::GetClassName() << " mesh=" << p_mesh_->__repr__() << " covarianceCollection=" << covarianceCollection_; return oss; } /* String converter */ String UserDefinedStationaryCovarianceModel::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void UserDefinedStationaryCovarianceModel::save(Advocate & adv) const { StationaryCovarianceModel::save(adv); adv.saveAttribute( "mesh_", *p_mesh_); adv.saveAttribute( "covarianceCollection_", covarianceCollection_); } /* Method load() reloads the object from the StorageManager */ void UserDefinedStationaryCovarianceModel::load(Advocate & adv) { StationaryCovarianceModel::load(adv); TypedInterfaceObject mesh; adv.loadAttribute( "mesh_", mesh); p_mesh_ = mesh.getImplementation(); adv.loadAttribute( "covarianceCollection_", covarianceCollection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/WelchFactory.cxx000066400000000000000000000207331307543307100216700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/WelchFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Hamming.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WelchFactory); static const Factory Factory_WelchFactory; typedef Collection ComplexCollection; typedef Collection HermitianMatrixCollection; /* Default constructor */ WelchFactory::WelchFactory() : SpectralModelFactoryImplementation() , window_(Hamming()) , blockNumber_(1) , overlap_(0.0) { // Nothing to do } WelchFactory::WelchFactory(const FilteringWindows & window, const UnsignedInteger blockNumber, const Scalar overlap) : SpectralModelFactoryImplementation() , window_(window) , blockNumber_(0) , overlap_(0.0) { setBlockNumber(blockNumber); setOverlap(overlap); } /* Virtual constructor */ WelchFactory * WelchFactory::clone() const { return new WelchFactory(*this); } /* FilteringWindows accessor */ FilteringWindows WelchFactory::getFilteringWindows() const { return window_; } void WelchFactory::setFilteringWindows(const FilteringWindows & window) { window_ = window; } /* String converter */ String WelchFactory::__repr__() const { OSS oss(true); oss << "class=" << WelchFactory::GetClassName() << " window = " << window_ << " blockNumber = " << blockNumber_ << " overlap = " << overlap_; return oss; } /* String converter */ String WelchFactory::__str__(const String & offset) const { return __repr__(); } /* Number of blockNumber accessor */ UnsignedInteger WelchFactory::getBlockNumber() const { return blockNumber_; } void WelchFactory::setBlockNumber(const UnsignedInteger blockNumber) { if (blockNumber < 1) throw InvalidArgumentException(HERE) << "Error: the number of blocks should be at least 1"; blockNumber_ = blockNumber; } /* Overlap accessor */ Scalar WelchFactory::getOverlap() const { return overlap_; } void WelchFactory::setOverlap(const Scalar overlap) { if ((overlap < 0.0) || (overlap > 0.5)) throw InvalidArgumentException(HERE) << "Error: the overlap must be in [0, 0.5], here overlap=" << overlap; overlap_ = overlap; } WelchFactory::Implementation WelchFactory::build(const ProcessSample & sample) const { return buildAsUserDefinedSpectralModel(sample).clone(); } WelchFactory::Implementation WelchFactory::build(const Field & timeSeries) const { return buildAsUserDefinedSpectralModel(timeSeries).clone(); } UserDefinedSpectralModel WelchFactory::buildAsUserDefinedSpectralModel(const ProcessSample & sample) const { const UnsignedInteger dimension = sample.getDimension(); const UnsignedInteger sampleSize = sample.getSize(); const RegularGrid timeGrid(sample.getTimeGrid()); const UnsignedInteger N = timeGrid.getN(); const Scalar timeStep = timeGrid.getStep(); const Scalar T = timeGrid.getEnd() - timeGrid.getStart(); // Preprocessing: the scaling factor, including the tappering window ComplexCollection alpha(N); const Scalar factor = timeStep / sqrt(sampleSize * T); for (UnsignedInteger m = 0; m < N; ++m) { // The window argument is normalized on [0, 1] const Scalar xiM = static_cast(m) / N; // Phase shift const Scalar theta = M_PI * (N - 1) * xiM; alpha[m] = factor * window_(xiM) * Complex(cos(theta), sin(theta)); } // The DSP estimate will be done over a regular frequency grid containing only // nonnegative frequency values. It is then extended as a stepwise function of // the frequency on positive and negative values using the hermitian symmetry // If N is even, kMax = N / 2, else kMax = (N + 1) / 2. UnsignedInteger kMax = N / 2; const Scalar frequencyStep = 1.0 / T; Scalar frequencyMin = 0.5 * frequencyStep; // Adjust kMax and frequencyMin if N is odd if (N % 2 == 1) { ++kMax; frequencyMin = 0.0; } const RegularGrid frequencyGrid(frequencyMin, frequencyStep, kMax); HermitianMatrixCollection DSPCollection(kMax, HermitianMatrix(dimension)); // Loop over the time series for (UnsignedInteger l = 0 ; l < sampleSize; ++l) { // The current time series values are stored into a ComplexMatrix in order to // have a two-indices access and an internal linear storage. The data are stored column-wise, i.e the column elements are contiguous in memory ComplexMatrix zHat(kMax, dimension); // Loop over the dimension // For each component, compute the FFT of the time series component for (UnsignedInteger p = 0; p < dimension; ++p) { // Loop over the time stamps ComplexCollection zP(N); for (UnsignedInteger m = 0; m < N; ++m) zP[m] = alpha[m] * sample[l][m][p]; // The first component of the value of a time series at a given index is the time value // Perform the FFT direct transform of the tapered data const ComplexCollection zPHat(fftAlgorithm_.transform(zP)); // Stores the result. Only the values associated with nonnegative frequency values are stored. for (UnsignedInteger k = 0; k < kMax; ++k) zHat(k, p) = zPHat[N - kMax + k]; } // Now, we can estimate the spectral density over the reduced frequency grid for (UnsignedInteger k = 0; k < kMax; ++k) { // Perform the row-wise kronecker product for (UnsignedInteger p = 0; p < dimension; ++p) for (UnsignedInteger q = 0; q <= p; ++q) DSPCollection[k](p, q) += zHat(k, p) * std::conj(zHat(k, q)); } } // Loop over the time series return UserDefinedSpectralModel(frequencyGrid, DSPCollection); } UserDefinedSpectralModel WelchFactory::buildAsUserDefinedSpectralModel(const Field & timeSeries) const { // We split the time series into overlaping blockNumbers that are used as a ProcessSample const UnsignedInteger size = timeSeries.getSize(); const UnsignedInteger dimension = timeSeries.getDimension(); // First, compute the block size const UnsignedInteger blockSize = static_cast(size / (1.0 + (blockNumber_ - 1.0) * (1.0 - overlap_))); // Then, compute the associated hop size, even if it is not exactly associated with the overlap value // No hop size if only one block const UnsignedInteger hopSize = blockNumber_ == 1 ? 0 : (size - blockSize) / (blockNumber_ - 1); const RegularGrid timeGrid(timeSeries.getTimeGrid()); // Initialize the equivalent process sample with the correct time grid ProcessSample sample(blockNumber_, Field(RegularGrid(timeGrid.getStart(), timeGrid.getStep(), blockSize), dimension)); for (UnsignedInteger blockIndex = 0; blockIndex < blockNumber_; ++blockIndex) { for (UnsignedInteger timeIndex = 0; timeIndex < blockSize; ++timeIndex) { for (UnsignedInteger i = 0; i < dimension; ++i) sample[blockIndex][timeIndex][i] = timeSeries.getValues()[blockIndex * hopSize + timeIndex][i]; } // Loop on the time index } // Loop on the blocks return buildAsUserDefinedSpectralModel(sample); } /* Method save() stores the object through the StorageManager */ void WelchFactory::save(Advocate & adv) const { SpectralModelFactoryImplementation::save(adv); adv.saveAttribute( "window_", window_); adv.saveAttribute( "blockNumber_", blockNumber_); adv.saveAttribute( "overlap_", overlap_); } /* Method load() reloads the object from the StorageManager */ void WelchFactory::load(Advocate & adv) { SpectralModelFactoryImplementation::load(adv); adv.loadAttribute( "window_", window_); adv.loadAttribute( "blockNumber_", blockNumber_); adv.loadAttribute( "overlap_", overlap_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Stat/csv_lexer.ll000066400000000000000000000035351307543307100210760ustar00rootroot00000000000000/* -*- C++ -*- */ /* * @brief The lexer definition in order to read CSV files * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ %{ #include #include #include #include "csv_parser.hh" #define YY_DECL int csvlex(YYSTYPE *yylval_param, yyscan_t yyscanner, FILE * theFile, const char * theSeparator) #define YY_USER_INIT {yyin = theFile;} %} %option bison-bridge %option yylineno %option reentrant %option prefix="csv" %option noyywrap %option nounput digit [0-9] sign [+-] integer {digit}+ exponent [eE]{sign}?{integer} real {sign}?({integer}("."({integer})?)?|"."{integer}){exponent}? string [[:alnum:]!#\$%&'()\*\+\-\./\:\<=\>\?@\[\\\]\^_`\{\|\}~]* space [ \t] %% {real} { std::istringstream iss(yytext); iss.imbue(std::locale("C")); iss >> yylval_param->real; return(REAL); } {string} { yylval_param->st = yytext; return(STRING); } "\n" { return(CRLF); } "\r\n" { return(CRLF); } "\"" { return(DOUBLEQUOTE); } {space} { return(SPACE); } . { yylval_param->st = yytext; if (strspn(yytext,theSeparator)) return(COMMA); else return(CHARACTER); } openturns-1.9/lib/src/Base/Stat/csv_parser.yy000066400000000000000000000126601307543307100213040ustar00rootroot00000000000000/* -*- C++ -*- */ /* * @brief The parser definition in order to read CSV files * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ /* This parser is based on RFC 4180 from www.ietf.org */ %pure-parser %parse-param {OT::CSVParserState & theState} %parse-param {yyscan_t yyscanner} %parse-param {FILE * theFile} %parse-param {OT::SampleImplementation &impl} %parse-param {OT::UnsignedInteger & theDimension} %parse-param {const char * theSeparator} %lex-param {yyscan_t yyscanner} %lex-param {FILE * theFile} %lex-param {const char * theSeparator} %defines %name-prefix "csv" %union { double real; const char * st; } %token REAL %token STRING %token COMMA %token CRLF %token SPACE %token DOUBLEQUOTE %token CHARACTER %left COMMA %left CRLF %type escapedData %type data %type CRLF %type DOUBLEQUOTE %type error %code requires { #include #include "openturns/csv_parser_state.hxx" #include "openturns/SampleImplementation.hxx" typedef void* yyscan_t; } %code { #include "openturns/Log.hxx" int yylex (YYSTYPE *lvalp, yyscan_t yyscanner, FILE * theFile, const char * theSeparator); int yyerror (OT::CSVParserState & theState, yyscan_t yyscanner, FILE * theFile, OT::SampleImplementation &impl, OT::UnsignedInteger & theDimension, const char * theSeparator, const char *s); int csvget_lineno (yyscan_t yyscanner); std::string ToString(double val) { std::ostringstream oss; oss << val; return oss.str(); } void clearPoint(OT::CSVParserState & theState, yyscan_t yyscanner) { theState.point = OT::Point(); } void printPoint(OT::CSVParserState & theState, yyscan_t yyscanner, OT::SampleImplementation &impl, OT::UnsignedInteger & theDimension) { LOGDEBUG(OT::OSS() << "file " << theState.theFileName << " line " << csvget_lineno(yyscanner) << ": point=" << theState.point.__repr__()); if (theDimension == 0) { theDimension = theState.point.getDimension(); impl.add(theState.point); } else if (theDimension == theState.point.getDimension()) impl.add(theState.point); } void clearHeader(OT::CSVParserState & theState, yyscan_t yyscanner) { theState.Header = OT::Description(); } void printHeader(OT::CSVParserState & theState, yyscan_t yyscanner, OT::SampleImplementation &impl, OT::UnsignedInteger & theDimension) { LOGDEBUG(OT::OSS() << "file " << theState.theFileName << " line " << csvget_lineno(yyscanner) << ": Header=" << theState.Header.__repr__()); if (theDimension == 0) { theDimension = theState.Header.getSize(); impl.setDescription(theState.Header); } } } %start CSVFile %% CSVFile: endOfFile | recordSet endOfFile ; recordSet: Record | recordSet CRLF Record ; Record: { clearHeader(theState,yyscanner); clearPoint(theState,yyscanner); theState.errors = false; } record { if (!theState.errors) { printHeader(theState,yyscanner,impl,theDimension); printPoint(theState,yyscanner,impl,theDimension); } } ; record: spacedField | record COMMA spacedField | record error ; spacedField: field | spaces field | field spaces | spaces field spaces ; spaces: SPACE | spaces SPACE ; field: { theState.St = ""; } escapedField { theState.Header.add(theState.St); } | { theState.St = ""; } nonEscapedField { if (theState.Type==OT::CSVParserState::RealField) theState.point.add(theState.Val); else theState.Header.add(theState.St); } ; escapedField: { theState.Type = OT::CSVParserState::StringField; } DOUBLEQUOTE escapedDataList DOUBLEQUOTE ; escapedDataList: escapedData | escapedDataList escapedData ; escapedData: data | SPACE { theState.St += ' '; } | COMMA { theState.St += $1; } | CRLF { theState.St += '\n'; } | DOUBLEQUOTE DOUBLEQUOTE { theState.St += '"'; } ; nonEscapedField: { theState.Type = OT::CSVParserState::NotSet; } data | { theState.Type = OT::CSVParserState::NotSet; } error data ; data: REAL { if (theState.Type==OT::CSVParserState::NotSet) { theState.Val = $1; theState.Type = OT::CSVParserState::RealField; } else { theState.St += ToString($1); } } | STRING { theState.St += $1; theState.Type = OT::CSVParserState::StringField; } ; endOfFile: /* Empty */ | CRLF ; %% int yyerror(OT::CSVParserState & theState, yyscan_t yyscanner, FILE * theFile, OT::SampleImplementation &impl, OT::UnsignedInteger & theDimension, const char * theSeparator, const char *s) { LOGINFO(OT::OSS() << "file " << theState.theFileName << " line " << csvget_lineno(yyscanner) << " is ignored: " << s); theState.errors = true; return 0; } openturns-1.9/lib/src/Base/Stat/dsfmt.cxx000066400000000000000000000155151307543307100204150ustar00rootroot00000000000000/* * dsfmt.cc * * C++ program for double precision SIMD oriented Fast Mersenne Twister (dSFMT) * pseudorandom number generator based on IEEE 754 format. * * * Original C version coded by * Mutsuo Saito and Makoto Matsumoto (Hiroshima University). * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html * * dSFMT-src-1.2 * Copyright (C) 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima University. * All rights reserved. * * * This C++ version coded by Takashi Takekawa (RIKEN). * Copyright (C) 2007 Takashi Takekawa. All rights reserved. * * Distributed under the BSD License, see LICENSE.txt */ #include "dsfmt.h" namespace tutils { namespace detail { namespace { uint64_t const L(0x000FFFFFFFFFFFFFULL); uint64_t const H(0x3FF0000000000000ULL); uint64v2_t const LL(L, L); uint64v2_t const HH(H, H); uint64v2_t const INI(0x8B8B8B8B8B8B8B8BULL, 0x8B8B8B8B8B8B8B8BULL); inline uint32_t mix1(uint32_t x) { return 1812433253 * (x ^ (x >> 30)); } inline uint32_t mix2(uint32_t x) { return 1664525 * (x ^ (x >> 27)); } inline uint32_t mix3(uint32_t x) { return 1566083941 * (x ^ (x >> 27)); } template inline void twist(uint64v2_t& l, uint64v2_t& r, uint64v2_t const& a, uint64v2_t const& b) { int const s(8 * dsfmt::A); r = swap64(l) ^ (r >> dsfmt::C) ^ (r << dsfmt::D); r ^= a ^ uint64v2_t((a[1] << s) | (a[0] >> (64 - s)), a[0] << s); r ^= (b >> dsfmt::B) & dsfmt::MSK; r &= LL; l ^= r; r |= HH; } inline int idx(int i) { #ifdef __BIG_ENDIAN__ return i ^ 1; #else return i; #endif } } template void dsfmt::init(uint32_t seed) { int const N32(4 * (N + 1)); uint32_t* u32_(reinterpret_cast(u_)); u32_[idx(0)] = seed; for (int i(1); i < N32; ++i) { u32_[idx(i)] = mix1(u32_[idx(i - 1)]) + i; } init(); } template void dsfmt::init(uint32_t const* seed, int size) { int const N32(4 * (N + 1)); int const MIG(N32 >= 623 ? 11 : (N32 >= 68 ? 7 : (N32 >= 39 ? 5 : 3))); int const MID((N32 - MIG) / 2); int const PRE(N32 - 1); int const LAG(MID + MIG); uint32_t* u32_(reinterpret_cast(u_)); for (int i(0); i <= N; ++i) { u_[i] = INI; } int i(0); for (; i < 1; ++i) { int const iMOD(i % N32); int const iMID((i + MID) % N32); int const iPRE((i + PRE) % N32); int const iLAG((i + LAG) % N32); uint32_t r(mix2(u32_[idx(iMOD)] ^ u32_[idx(iMID)] ^ u32_[idx(iPRE)])); u32_[idx(iMID)] += r; r += size + iMOD; u32_[idx(iLAG)] += r; u32_[idx(iMOD)] = r; } for (; i <= size; ++i) { int const iMOD(i % N32); int const iMID((i + MID) % N32); int const iPRE((i + PRE) % N32); int const iLAG((i + LAG) % N32); uint32_t r(mix2(u32_[idx(iMOD)] ^ u32_[idx(iMID)] ^ u32_[idx(iPRE)])); u32_[idx(iMID)] += r; r += seed[i - 1] + iMOD; u32_[idx(iLAG)] += r; u32_[idx(iMOD)] = r; } for (; i < N32; ++i) { int const iMOD(i % N32); int const iMID((i + MID) % N32); int const iPRE((i + PRE) % N32); int const iLAG((i + LAG) % N32); uint32_t r(mix2(u32_[idx(iMOD)] ^ u32_[idx(iMID)] ^ u32_[idx(iPRE)])); u32_[idx(iMID)] += r; r += iMOD; u32_[idx(iLAG)] += r; u32_[idx(iMOD)] = r; } for (int j(0); j < N32; ++i, ++j) { int const iMOD(i % N32); int const iMID((i + MID) % N32); int const iPRE((i + PRE) % N32); int const iLAG((i + LAG) % N32); uint32_t r(mix3(u32_[idx(iMOD)] + u32_[idx(iMID)] + u32_[idx(iPRE)])); u32_[idx(iMID)] ^= r; r -= iMOD; u32_[idx(iLAG)] ^= r; u32_[idx(iMOD)] = r; } init(); } template void dsfmt::init() { uint64v2_t const FIX(uint64v2_t(0, H >> (64 - 8 * A)) ^ ((((HH >> B) & swap64(MSK)) ^ (HH >> C)) | HH)); for (int i(0); i <= N; ++i) { u_[i] &= LL; u_[i] |= HH; } uint64v2_t const work2((u_[N] ^ FIX) & PCV); simd_empty(); uint64_t work(work2[0] ^ work2[1]); for (int i(32); i > 0; i >>= 1) { work ^= work >> i; } if ((work & 1) != 1) { u_[N][0] ^= 1; } gen_rand_all(); } template void dsfmt::gen_rand_all() { uint64v2_t l(u_[N]); uint64v2_t r(u_[N - 1]); for (int i(0); i < S; ++i) { twist(l, r, u_[i], u_[i - S + N]); u_[i] = r; } for (int i(S); i < N; ++i) { twist(l, r, u_[i], u_[i - S ]); u_[i] = r; } u_[N] = l; i_ = 0; } #define TLIB_DSFMT_PARAM(m, s, a, b, c, d, m1, m0, p1, p0) \ template <> int const dsfmt::S(s); \ template <> int const dsfmt::A(a); \ template <> int const dsfmt::B(b); \ template <> int const dsfmt::C(c); \ template <> int const dsfmt::D(d); \ template <> uint64v2_t const dsfmt::MSK(m1, m0); \ template <> uint64v2_t const dsfmt::PCV(p1, p0) TLIB_DSFMT_PARAM(607, 3, 1, 7, 24, 33, 0xFDFFFFB7FFFFFFFFULL, 0xFFCFEEF7FDFFFFFFULL, 0x0005196200000000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(1279, 7, 1, 4, 8, 33, 0xF7FFBCBFF5FFFFFFULL, 0xFBAFFBDE7BFFEF7FULL, 0x000D303EE3092A2BULL, 0x0007F1DE08000001ULL); TLIB_DSFMT_PARAM(2281, 7, 1, 3, 8, 31, 0xF77FDFDFF7FFFFFFULL, 0xFE9FE9FFE7BFFDFDULL, 0x0000E00000000000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(4423, 37, 1, 5, 16, 31, 0xDABFDB9FFFFFB77FULL, 0xFBFF7FFFFFFFFFFFULL, 0x000DE72AD8BBB330ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(11213, 65, 3, 7, 16, 37, 0xFBF7FF7FFBEF3DF7ULL, 0xFFDBFDBFDFBB7FFEULL, 0x00032A9A00000000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(19937, 155, 1, 7, 16, 29, 0xFFFF6FEBFFFFFFEEULL, 0x57FBFFFDFFFF575FULL, 0x000EC8F3D0B00000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(44497, 183, 3, 7, 16, 9, 0xFFFFFFFFD7EFF6FFULL, 0xFEFFFCFDEFFEF7FFULL, 0x0001930400000000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(86243, 682, 3, 4, 16, 43, 0xF3EFFFFFFFD6FBBEULL, 0xFFFFFDFAFF3FFEFFULL, 0x000C0671C63A820DULL, 0x000B8F71B0000001ULL); TLIB_DSFMT_PARAM(132049, 574, 5, 4, 8, 15, 0xFFFFEFFFFBD35FFEULL, 0xDFFFFFFEDF53FFFFULL, 0x000395E065400000ULL, 0x0000000000000001ULL); TLIB_DSFMT_PARAM(216091, 1068, 3, 1, 16, 15, 0xDFBBF7FB9FFDFFABULL, 0xFFFFFFFFFFEBFFBEULL, 0x000CADF580000000ULL, 0x0000000000000001ULL); #undef TLIB_DSFMT_PARAM template class dsfmt<607>; template class dsfmt<1279>; template class dsfmt<2281>; template class dsfmt<4423>; template class dsfmt<11213>; template class dsfmt<19937>; template class dsfmt<44497>; template class dsfmt<86243>; template class dsfmt<132049>; template class dsfmt<216091>; } } openturns-1.9/lib/src/Base/Stat/dsfmt.h000066400000000000000000000103451307543307100200360ustar00rootroot00000000000000/* * tutils/dsfmt.h * * C++ header file for * double precision SIMD oriented Fast Mersenne Twister (dSFMT) * pseudorandom number generator based on IEEE 754 format. * * * Original C version coded by * Mutsuo Saito and Makoto Matsumoto (Hiroshima University). * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html * * dSFMT-src-1.2 * Copyright (C) 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima University. * All rights reserved. * * * This C++ version coded by Takashi Takekawa (RIKEN). * Copyright (C) 2007 Takashi Takekawa. All rights reserved. * * Distributed under the BSD License, see LICENSE.txt. */ #ifndef TUTILS_DSFMT_H #define TUTILS_DSFMT_H #include #include #include "simd.h" #include "openturns/OTprivate.hxx" #include "openturns/OTconfig.hxx" namespace tutils { namespace detail { template class dsfmt { public: static int const N = MEXP / 104; static int const S; static int const A; static int const B; static int const C; static int const D; static uint64v2_t const MSK; static uint64v2_t const PCV; explicit dsfmt(uint32_t seed = 0) { init(seed); } dsfmt(uint32_t const* seed, uint32_t size) { init(seed, size); } void init(uint32_t seed); void init(uint32_t const* seed, int size); double gen_close1_open2() { if (i_ == 2 * N) { gen_rand_all(); } return reinterpret_cast(u_)[i_++]; } double gen() { return gen_close1_open2() - 1.0; } /* Added by Regis LEBRUN, OpenTURNS project */ uint32_t igen(const uint32_t n) { if (i_ == 2 * N) { gen_rand_all(); } uint64_t val = reinterpret_cast(u_)[i_++]; return val % n; } uint32_t get_state_length_32(void) { return 4 * (N + 1); } void get_state(OT::UnsignedInteger * state) { // We don't know the size of an OT::UnsignedInteger, it can be 32 or 64 bits. We decide to // store only 32 bits values, even if it can handle 64 bits. for (OT::UnsignedInteger i = 0; i <= (uint32_t)(N); i++) { uint32_t words[4]; memcpy(&words[0], &u_[i], 16); #ifdef __BIG_ENDIAN__ state[4 * i ] = words[1]; state[4 * i + 1] = words[0]; state[4 * i + 2] = words[3]; state[4 * i + 3] = words[2]; #else state[4 * i ] = words[0]; state[4 * i + 1] = words[1]; state[4 * i + 2] = words[2]; state[4 * i + 3] = words[3]; #endif } } void set_state(OT::UnsignedInteger * state) { // We don't know the size of an OT::UnsignedInteger, it can be 32 or 64 bits. We decide to // store only 32 bits values, even if it can handle 64 bits. for (OT::UnsignedInteger i = 0; i <= (uint32_t)(N); i++) { uint32_t words[4]; #ifdef __BIG_ENDIAN__ words[1] = (uint32_t)(state[4 * i ]); words[0] = (uint32_t)(state[4 * i + 1]); words[3] = (uint32_t)(state[4 * i + 2]); words[2] = (uint32_t)(state[4 * i + 3]); #else words[0] = (uint32_t)(state[4 * i ]); words[1] = (uint32_t)(state[4 * i + 1]); words[2] = (uint32_t)(state[4 * i + 2]); words[3] = (uint32_t)(state[4 * i + 3]); #endif memcpy(&u_[i], &words[0], 16); } } uint32_t get_index(void) { return (uint32_t)(i_); } void set_index(uint32_t const index) { i_ = (int)(index); } private: uint64v2_t u_[N + 1]; int i_; void init(); void gen_rand_all(); }; } typedef detail::dsfmt<607> dsfmt607; typedef detail::dsfmt<1279> dsfmt1279; typedef detail::dsfmt<2281> dsfmt2281; typedef detail::dsfmt<4423> dsfmt4423; typedef detail::dsfmt<11213> dsfmt11213; typedef detail::dsfmt<19937> dsfmt19937; typedef detail::dsfmt<44497> dsfmt44497; typedef detail::dsfmt<86243> dsfmt86243; typedef detail::dsfmt<132049> dsfmt132049; typedef detail::dsfmt<216091> dsfmt216091; } #endif openturns-1.9/lib/src/Base/Stat/kendall.c000066400000000000000000000206651307543307100203340ustar00rootroot00000000000000/* This file contains code to calculate Kendall's Tau in O(N log N) time in * a manner similar to the following reference: * * A Computer Method for Calculating Kendall's Tau with Ungrouped Data * William R. Knight Journal of the American Statistical Association, Vol. 61, * No. 314, Part 1 (Jun., 1966), pp. 436-439 * * Copyright (C) 2010 David Simcha * * License: * Boost Software License - Version 1.0 - August 17th, 2003 * * Permission is hereby granted, free of charge, to any person or organization * obtaining a copy of the software and accompanying documentation covered by * this license (the "Software") to use, reproduce, display, distribute, * execute, and transmit the Software, and to prepare derivative works of the * Software, and to permit third-parties to whom the Software is furnished to * do so, all subject to the following: * * The copyright notices in the Software and this entire statement, including * the above license grant, this restriction and the following disclaimer, * must be included in all copies of the Software, in whole or in part, and * all derivative works of the Software, unless such copies or derivative * works are solely in the form of machine-executable object code generated by * a source language processor. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ #include #include #include #include #include /* Comparator function for qsortDoubles.*/ static int qsortDoubleComp(const void* lhs, const void* rhs) { double lhsNum, rhsNum; lhsNum = *((double*) lhs); rhsNum = *((double*) rhs); if(lhsNum < rhsNum) { return -1; } else if(lhsNum > rhsNum) { return 1; } else { return 0; } } /* Wrapper for C's qsort functionality to simplify use in this library.*/ static void qsortDoubles(double* arr, size_t len) { qsort(arr, len, sizeof(double), &qsortDoubleComp); } typedef struct { double first; double second; } PairOfDoubles; /* Comparator function for zipSort().*/ static int zipSortComp(const void* lhs, const void* rhs) { PairOfDoubles l, r; l = *((PairOfDoubles*) lhs); r = *((PairOfDoubles*) rhs); if(l.first < r.first) { return -1; } else if(l.first > r.first) { return 1; } else { return 0; } } /* Uses C's qsort functionality to sort two arrays in lockstep, ordered by * the first array. */ static void zipSort(double* arr1, double* arr2, size_t len) { size_t i; PairOfDoubles* pairs = (PairOfDoubles*) malloc(len * sizeof(PairOfDoubles)); for(i = 0; i < len; i++) { pairs[i].first = arr1[i]; pairs[i].second = arr2[i]; } qsort(pairs, len, sizeof(PairOfDoubles), &zipSortComp); // Copy the results back. for(i = 0; i < len; i++) { arr1[i] = pairs[i].first; arr2[i] = pairs[i].second; } free(pairs); } /* Sorts in place, returns the bubble sort distance between the input array * and the sorted array. */ static uint64_t insertionSort(double* arr, size_t len) { size_t maxJ, i; uint64_t swapCount = 0; if(len < 2) { return 0; } maxJ = len - 1; for(i = len - 2; i < len; --i) { size_t j = i; double val = arr[i]; for(; j < maxJ && arr[j + 1] < val; ++j) { arr[j] = arr[j + 1]; } arr[j] = val; swapCount += (j - i); } return swapCount; } static uint64_t merge(double* from, double* to, size_t middle, size_t len) { size_t bufIndex, leftLen, rightLen; uint64_t swaps; double* left; double* right; bufIndex = 0; swaps = 0; left = from; right = from + middle; rightLen = len - middle; leftLen = middle; while(leftLen && rightLen) { if(right[0] < left[0]) { to[bufIndex] = right[0]; swaps += leftLen; rightLen--; right++; } else { to[bufIndex] = left[0]; leftLen--; left++; } bufIndex++; } if(leftLen) { memcpy(to + bufIndex, left, leftLen * sizeof(double)); } else if(rightLen) { memcpy(to + bufIndex, right, rightLen * sizeof(double)); } return swaps; } /* Sorts in place, returns the bubble sort distance between the input array * and the sorted array. */ static uint64_t mergeSort(double* x, double* buf, size_t len) { uint64_t swaps; size_t half; if(len < 10) { return insertionSort(x, len); } swaps = 0; if(len < 2) { return 0; } half = len / 2; swaps += mergeSort(x, buf, half); swaps += mergeSort(x + half, buf + half, len - half); swaps += merge(x, buf, half, len); memcpy(x, buf, len * sizeof(double)); return swaps; } static uint64_t getMs(double* data, size_t len) { /* Assumes data is sorted.*/ uint64_t Ms = 0, tieCount = 0; size_t i; for(i = 1; i < len; i++) { if(data[i] == data[i-1]) { tieCount++; } else if(tieCount) { Ms += (tieCount * (tieCount + 1)) / 2; tieCount++; tieCount = 0; } } if(tieCount) { Ms += (tieCount * (tieCount + 1)) / 2; tieCount++; } return Ms; } /* This function calculates the Kendall Tau B on a pair of C-style "arrays". * Note that it will completely overwrite arr1 and sort arr2, so these need * to be duplicated before passing them in. */ double kendallNlogN(double* arr1, double* arr2, size_t len) { uint64_t m1 = 0, m2 = 0, tieCount, swapCount, nPair; int64_t s; size_t i; double denominator1, denominator2; zipSort(arr1, arr2, len); nPair = (uint64_t) len * ((uint64_t) len - 1) / 2; s = nPair; tieCount = 0; for(i = 1; i < len; i++) { if(arr1[i - 1] == arr1[i]) { tieCount++; } else if(tieCount > 0) { qsortDoubles(arr2 + i - tieCount - 1, tieCount + 1); m1 += tieCount * (tieCount + 1) / 2; s += getMs(arr2 + i - tieCount - 1, tieCount + 1); tieCount++; tieCount = 0; } } if(tieCount > 0) { qsortDoubles(arr2 + i - tieCount - 1, tieCount + 1); m1 += tieCount * (tieCount + 1) / 2; s += getMs(arr2 + i - tieCount - 1, tieCount + 1); tieCount++; } // Using arr1 as the buffer because we're done with it. swapCount = mergeSort(arr2, arr1, len); m2 = getMs(arr2, len); s -= (m1 + m2) + 2 * swapCount; if (s == 0) return 0.0; denominator1 = nPair - m1; if (denominator1 <= 0.0) { fprintf(stderr, "Warning, denominator1=%f, do not take into account ties for first component\n", denominator1); denominator1 = nPair; } denominator2 = nPair - m2; if (denominator2 <= 0.0) { fprintf(stderr, "Warning, denominator2=%f, do not take into account ties for second component\n", denominator2); denominator2 = nPair; } return s / sqrt(denominator1) / sqrt(denominator2); } /* This function uses a simple O(N^2) implementation. It probably has a smaller * constant and therefore is useful in the small N case, and is also useful * for testing the relatively complex O(N log N) implementation. */ double kendallSmallN(double* arr1, double* arr2, size_t len) { /* Not using 64-bit ints here because this function is meant only for small N and for testing. */ int m1 = 0, m2 = 0, s = 0, nPair; size_t i, j; double denominator1, denominator2; for(i = 0; i < len; i++) { for(j = i + 1; j < len; j++) { if(arr2[i] > arr2[j]) { if (arr1[i] > arr1[j]) { s++; } else if(arr1[i] < arr1[j]) { s--; } else { m1++; } } else if(arr2[i] < arr2[j]) { if (arr1[i] > arr1[j]) { s--; } else if(arr1[i] < arr1[j]) { s++; } else { m1++; } } else { m2++; if(arr1[i] == arr1[j]) { m1++; } } } } if (s == 0) return 0.0; nPair = len * (len - 1) / 2; denominator1 = nPair - m1; if (denominator1 <= 0.0) { fprintf(stderr, "Warning, denominator1=%f, do not take into account ties for first component\n", denominator1); denominator1 = nPair; } denominator2 = nPair - m2; if (denominator2 <= 0.0) { fprintf(stderr, "Warning, denominator2=%f, do not take into account ties for second component\n", denominator2); denominator2 = nPair; } return s / sqrt(denominator1) / sqrt(denominator2); } openturns-1.9/lib/src/Base/Stat/kendall.h000066400000000000000000000046321307543307100203350ustar00rootroot00000000000000/* This file contains code to calculate Kendall's Tau in O(N log N) time in * a manner similar to the following reference: * * A Computer Method for Calculating Kendall's Tau with Ungrouped Data * William R. Knight Journal of the American Statistical Association, Vol. 61, * No. 314, Part 1 (Jun., 1966), pp. 436-439 * * Copyright (C) 2010 David Simcha * * License: * Boost Software License - Version 1.0 - August 17th, 2003 * * Permission is hereby granted, free of charge, to any person or organization * obtaining a copy of the software and accompanying documentation covered by * this license (the "Software") to use, reproduce, display, distribute, * execute, and transmit the Software, and to prepare derivative works of the * Software, and to permit third-parties to whom the Software is furnished to * do so, all subject to the following: * * The copyright notices in the Software and this entire statement, including * the above license grant, this restriction and the following disclaimer, * must be included in all copies of the Software, in whole or in part, and * all derivative works of the Software, unless such copies or derivative * works are solely in the form of machine-executable object code generated by * a source language processor. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ #ifndef _KENDALL_ #define _KENDALL_ #include "openturns/OTdebug.h" BEGIN_C_DECLS /* This function calculates the Kendall Tau B on a pair of C-style "arrays". * Note that it will completely overwrite arr1 and sort arr2, so these need * to be duplicated before passing them in. */ double kendallNlogN(double* arr1, double* arr2, size_t len); /* This function uses a simple O(N^2) implementation. It probably has a smaller * constant and therefore is useful in the small N case, and is also useful * for testing the relatively complex O(N log N) implementation. */ double kendallSmallN(double* arr1, double* arr2, size_t len); END_C_DECLS #endif /* _COBYLA_ */ openturns-1.9/lib/src/Base/Stat/openturns/000077500000000000000000000000001307543307100206025ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Stat/openturns/AbsoluteExponential.hxx000066400000000000000000000042431307543307100253230ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ABSOLUTEEXPONENTIAL_HXX #define OPENTURNS_ABSOLUTEEXPONENTIAL_HXX #include "openturns/StationaryCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AbsoluteExponential */ class OT_API AbsoluteExponential : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor based on spatial dimension*/ explicit AbsoluteExponential(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ AbsoluteExponential(const Point & scale); /** Parameters constructor */ AbsoluteExponential(const Point & scale, const Point & amplitude); /** Virtual copy constructor */ AbsoluteExponential * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: } ; /* class AbsoluteExponential */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/CauchyModel.hxx000066400000000000000000000051101307543307100235250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CAUCHYMODEL_HXX #define OPENTURNS_CAUCHYMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SpectralModel.hxx" #include "openturns/Point.hxx" #include "openturns/CorrelationMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS class TimeGrid; /** * @class CauchyModel */ class OT_API CauchyModel : public SpectralModelImplementation { CLASSNAME; public: /** Default constructor without parameters */ CauchyModel(); /** Standard constructor with scale and amplitude parameters parameters */ CauchyModel(const Point & scale, const Point & amplitude); /** Standard constructor with scale, amplitude and spatial correlation parameters parameters */ CauchyModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation); /** Standard constructor with scale and spatial covariance parameters parameters */ CauchyModel(const Point & scale, const CovarianceMatrix & spatialCovariance); /** Virtual copy constructor */ virtual CauchyModel * clone() const; /** Computation of the spectral density function */ using SpectralModelImplementation::computeStandardRepresentative; Complex computeStandardRepresentative(const Scalar frequency) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); } ; /* class CauchyModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CAUCHYMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Compact.hxx000066400000000000000000000043561307543307100227310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Compact history storage * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPACT_HXX #define OPENTURNS_COMPACT_HXX #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Compact */ class OT_API Compact : public HistoryStrategyImplementation { CLASSNAME; public: /** Constructor with parameters */ Compact(); /** Constructor with parameters */ explicit Compact(const UnsignedInteger halfMaximumSize); /** Virtual constructor */ virtual Compact * clone() const; /** Store the point according to the strategy */ using HistoryStrategyImplementation::store; void store(const Point & point); /** Sample accessor */ Sample getSample() const; /** HalfMaximumSize accessor */ UnsignedInteger getHalfMaximumSize() const; /** Index accessor */ UnsignedInteger getIndex() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Maximum number of points to be hitorized UnsignedInteger halfMaximumSize_; // Index where the next point will be stored UnsignedInteger index_; // Storage step UnsignedInteger step_; // Throwing counter UnsignedInteger throwingCounter_; } ; /* class Compact */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPACT_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CorrelationAnalysis.hxx000066400000000000000000000055021307543307100253220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief CorrelationAnalysis implements computation of correlation coefficients * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CORRELATIONANALYSIS_HXX #define OPENTURNS_CORRELATIONANALYSIS_HXX #include "openturns/OTprivate.hxx" #include "openturns/Sample.hxx" #include "openturns/Point.hxx" #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CorrelationAnalysis * */ class OT_API CorrelationAnalysis { public: /** Compute the Pearson correlation coefficient between the component number index of the input sample and the 1D outputSample */ static Scalar PearsonCorrelation(const Sample & inputSample, const Sample & outputSample, const UnsignedInteger index = 0); /** Compute the Spearman correlation coefficient between the component number index of the input sample and the 1D outputSample */ static Scalar SpearmanCorrelation(const Sample & inputSample, const Sample & outputSample, const UnsignedInteger index = 0); /** Compute the Standard Regression Coefficients (SRC) between the input sample and the output sample */ static Point SRC(const Sample & inputSample, const Sample & outputSample); /** Compute the Partial Correlation Coefficients (PCC) between the input sample and the output sample */ static Point PCC(const Sample & inputSample, const Sample & outputSample); /** Compute the Standard Rank Regression Coefficients (SRRC) between the input sample and the output sample */ static Point SRRC(const Sample & inputSample, const Sample & outputSample); /** Compute the Partial Rank Correlation Coefficients (PRCC) between the input sample and the output sample */ static Point PRCC(const Sample & inputSample, const Sample & outputSample); private: /** Default constructor */ CorrelationAnalysis(); }; /* class CorrelationAnalysis */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CORRELATIONANALYSIS_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CorrelationMatrix.hxx000066400000000000000000000041551307543307100250060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class CorrelationMatrix implements correlation matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CORRELATIONMATRIX_HXX #define OPENTURNS_CORRELATIONMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/CovarianceMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CorrelationMatrix */ class OT_API CorrelationMatrix : public CovarianceMatrix { CLASSNAME; public: typedef Collection ScalarCollection; /** Default constructor */ CorrelationMatrix(); /** Constructor with implementation */ CorrelationMatrix(const Implementation & i); /** Constructor with implementation */ CorrelationMatrix(const MatrixImplementation & i); /** Constructor with size */ explicit CorrelationMatrix(const UnsignedInteger dim); /** Constructor from external collection */ CorrelationMatrix(const UnsignedInteger dim, const ScalarCollection & elementsValues); /** String converter */ virtual String __repr__() const; /** CorrelationMatrix transpose */ CorrelationMatrix transpose () const; /** CorrelationMatrix multiplication (must have consistent dimensions) */ using CovarianceMatrix::operator *; CorrelationMatrix operator * (const IdentityMatrix & m) const; protected: private: }; /* class CorrelationMatrix */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMATRIX_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CovarianceMatrix.hxx000066400000000000000000000054111307543307100245730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class CovarianceMatrix implements covariance matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COVARIANCEMATRIX_HXX #define OPENTURNS_COVARIANCEMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/TriangularMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceMatrix */ class OT_API CovarianceMatrix : public SymmetricMatrix { CLASSNAME; public: typedef Collection ScalarCollection; /** Default constructor */ CovarianceMatrix(); /** Constructor with implementation */ CovarianceMatrix(const Implementation & i); /** Constructor with implementation */ CovarianceMatrix(const MatrixImplementation & i); /** Constructor with size */ explicit CovarianceMatrix(const UnsignedInteger dim); /** Constructor from external collection */ CovarianceMatrix(const UnsignedInteger dim, const ScalarCollection & elementsValues); /** String converter */ virtual String __repr__() const; /** CovarianceMatrix transpose */ CovarianceMatrix transpose () const; /** CovarianceMatrix addition (must have the same dimensions) */ using SymmetricMatrix::operator +; CovarianceMatrix operator + (const CovarianceMatrix & m) const; /** CovarianceMatrix multiplication (must have consistent dimensions) */ using SymmetricMatrix::operator *; CovarianceMatrix operator * (const IdentityMatrix & m) const; /** Check if the matrix is SPD */ virtual Bool isPositiveDefinite(const Bool keepIntact = true); /** Build the Cholesky factorization of the matrix */ virtual TriangularMatrix computeCholesky(const Bool keepIntact = true); /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); protected: private: }; /* class CovarianceMatrix */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMATRIX_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CovarianceModel.hxx000066400000000000000000000154071307543307100243750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class enables to build a covariance model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COVARIANCEMODEL_HXX #define OPENTURNS_COVARIANCEMODEL_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/CovarianceModelImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceModel */ class OT_API CovarianceModel : public TypedInterfaceObject { CLASSNAME; public: typedef CovarianceModelImplementation::Implementation Implementation; /** Default constructor without parameter */ CovarianceModel(); /** Copy constructors */ CovarianceModel(const CovarianceModelImplementation & implementation); /** Constructor from implementation */ CovarianceModel(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ CovarianceModel(CovarianceModelImplementation * p_implementation); #endif /** Dimension accessor */ virtual UnsignedInteger getSpatialDimension() const; virtual UnsignedInteger getDimension() const; /** Compute the covariance function */ virtual CovarianceMatrix operator() (const Scalar s, const Scalar t) const; virtual CovarianceMatrix operator() (const Point & s, const Point & t) const; // compute standard representative computes the term \rho(s, t) virtual Scalar computeStandardRepresentative(const Point & s, const Point & t) const; virtual Scalar computeStandardRepresentative(const Scalar & s, const Scalar & t) const; virtual Scalar computeStandardRepresentative(const Point & tau) const; virtual Scalar computeStandardRepresentative(const Scalar & tau) const; virtual Scalar computeAsScalar (const Point & s, const Point & t) const; virtual CovarianceMatrix operator() (const Scalar tau) const; virtual CovarianceMatrix operator() (const Point & tau) const; virtual Scalar computeAsScalar (const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** Gradient wrt parameters */ virtual Matrix parameterGradient (const Point & s, const Point & t) const; /** Discretize the covariance function on a given TimeGrid/Mesh */ virtual CovarianceMatrix discretize(const RegularGrid & timeGrid) const; virtual CovarianceMatrix discretize(const Mesh & mesh) const; virtual CovarianceMatrix discretize(const Sample & vertices) const; virtual Sample discretizeRow(const Sample & vertices, const UnsignedInteger p) const; /** Discretize and factorize the covariance function on a given TimeGrid/Mesh */ virtual TriangularMatrix discretizeAndFactorize(const RegularGrid & timeGrid) const; virtual TriangularMatrix discretizeAndFactorize(const Mesh & mesh) const; virtual TriangularMatrix discretizeAndFactorize(const Sample & vertices) const; /** Discretize the covariance function on a given TimeGrid/Mesh using HMatrix */ virtual HMatrix discretizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; /** Discretize and factorize the covariance function on a given TimeGrid/Mesh using HMatrix */ virtual HMatrix discretizeAndFactorizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeAndFactorizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeAndFactorizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; /** Amplitude accessors */ Point getAmplitude() const; void setAmplitude(const Point & amplitude); /** Scale accessors */ Point getScale() const; void setScale(const Point & scale); /** Spatial correlation accessors */ CorrelationMatrix getSpatialCorrelation() const; void setSpatialCorrelation(const CorrelationMatrix & correlation); /** Nugget factor accessor */ void setNuggetFactor(const Scalar nuggetFactor); Scalar getNuggetFactor() const; /** Parameters accessor */ void setParameter(const Point & parameter); Point getParameter() const; Description getParameterDescription() const; /** Indices of the active parameters */ void setActiveParameter(const Indices & active); Indices getActiveParameter() const; /** Is it a stationary model ? */ virtual Bool isStationary() const; /** Is it a diagonal model ? */ virtual Bool isDiagonal() const; /** Drawing method */ virtual Graph draw(const UnsignedInteger rowIndex = 0, const UnsignedInteger columnIndex = 0, const Scalar tMin = ResourceMap::GetAsScalar("CovarianceModel-DefaultTMin"), const Scalar tMax = ResourceMap::GetAsScalar("CovarianceModel-DefaultTMax"), const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("CovarianceModel-DefaultPointNumber"), const Bool asStationary = true, const Bool correlationFlag = false) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Marginal accessor */ CovarianceModel getMarginal(const UnsignedInteger index) const; } ; /* class CovarianceModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CovarianceModelFactory.hxx000066400000000000000000000046451307543307100257270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COVARIANCEMODELFACTORY_HXX #define OPENTURNS_COVARIANCEMODELFACTORY_HXX #include "openturns/CovarianceModelFactoryImplementation.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceModelFactory */ class OT_API CovarianceModelFactory : public TypedInterfaceObject { CLASSNAME; public: typedef CovarianceModelFactoryImplementation::Implementation Implementation; /** Default constructor */ CovarianceModelFactory(); /** Copy constructors */ CovarianceModelFactory(const CovarianceModelFactoryImplementation & implementation); /** Constructor from implementation */ CovarianceModelFactory(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ CovarianceModelFactory(CovarianceModelFactoryImplementation * p_implementation); #endif /** Virtual constructor */ virtual CovarianceModelFactory * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Build a a spectral model based on a sample */ virtual CovarianceModel build(const ProcessSample & sample) const; /** Build a a spectral model based on a Field */ virtual CovarianceModel build(const Field & timeSerie) const; }; /* class CovarianceModelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMODELFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CovarianceModelFactoryImplementation.hxx000066400000000000000000000046411307543307100306310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COVARIANCEMODELFACTORYIMPLEMENTATION_HXX #define OPENTURNS_COVARIANCEMODELFACTORYIMPLEMENTATION_HXX #include "openturns/CovarianceModel.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/Field.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CovarianceModelFactoryImplementation */ class OT_API CovarianceModelFactoryImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ CovarianceModelFactoryImplementation(); /** Virtual constructor */ virtual CovarianceModelFactoryImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Build a spectral model based on a sample */ virtual CovarianceModelImplementation::Implementation build(const ProcessSample & sample) const; /** Build a spectral model based on a Field */ virtual CovarianceModelImplementation::Implementation build(const Field & timeSerie) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: }; /* class CovarianceModelFactoryImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALMODELFACTORYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/CovarianceModelImplementation.hxx000066400000000000000000000216031307543307100272760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class enables to build a covariance model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COVARIANCEMODELIMPLEMENTATION_HXX #define OPENTURNS_COVARIANCEMODELIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/Pointer.hxx" #include "openturns/RegularGrid.hxx" #include "openturns/Mesh.hxx" #include "openturns/HMatrixParameters.hxx" BEGIN_NAMESPACE_OPENTURNS class HMatrix; /** * @class CovarianceModelImplementation */ class OT_API CovarianceModelImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Dimension-based constructor */ explicit CovarianceModelImplementation(const UnsignedInteger spatialDimension = 1); /** Standard constructor with scale and amplitude parameter parameter */ CovarianceModelImplementation(const Point & scale, const Point & amplitude); /** Standard constructor with scale, amplitude and spatial correlation parameter parameter */ CovarianceModelImplementation(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation); /** Standard constructor with scale and spatial covariance parameter parameter */ CovarianceModelImplementation(const Point & scale, const CovarianceMatrix & spatialCovariance); /** Virtual copy constructor */ virtual CovarianceModelImplementation * clone() const; /** Dimensions accessors */ /** Dimension of the argument */ virtual UnsignedInteger getSpatialDimension() const; /** Dimension of the values */ virtual UnsignedInteger getDimension() const; /** Compute the covariance function */ virtual CovarianceMatrix operator() (const Scalar s, const Scalar t) const; virtual CovarianceMatrix operator() (const Point & s, const Point & t) const; // compute standard representative computes the term \rho(s, t) virtual Scalar computeStandardRepresentative(const Point & s, const Point & t) const; virtual Scalar computeStandardRepresentative(const Scalar & s, const Scalar & t) const; virtual Scalar computeStandardRepresentative(const Point & tau) const; virtual Scalar computeStandardRepresentative(const Scalar & tau) const; // Special case for 1D model virtual Scalar computeAsScalar (const Scalar s, const Scalar t) const; virtual Scalar computeAsScalar (const Point & s, const Point & t) const; virtual CovarianceMatrix operator() (const Scalar tau) const; virtual CovarianceMatrix operator() (const Point & tau) const; // Special case for 1D model virtual Scalar computeAsScalar (const Scalar tau) const; virtual Scalar computeAsScalar (const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** Gradient wrt parameters */ virtual Matrix parameterGradient (const Point & s, const Point & t) const; /** Discretize the covariance function on a given TimeGrid/Mesh */ virtual CovarianceMatrix discretize(const RegularGrid & timeGrid) const; virtual CovarianceMatrix discretize(const Mesh & mesh) const; virtual CovarianceMatrix discretize(const Sample & vertices) const; virtual Sample discretizeRow(const Sample & vertices, const UnsignedInteger p) const; /** Discretize and factorize the covariance function on a given TimeGrid/Mesh */ virtual TriangularMatrix discretizeAndFactorize(const RegularGrid & timeGrid) const; virtual TriangularMatrix discretizeAndFactorize(const Mesh & mesh) const; virtual TriangularMatrix discretizeAndFactorize(const Sample & vertices) const; /** Discretize the covariance function on a given TimeGrid/Mesh using HMatrix */ virtual HMatrix discretizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; /** Discretize and factorize the covariance function on a given TimeGrid/Mesh using HMatrix */ virtual HMatrix discretizeAndFactorizeHMatrix(const RegularGrid & timeGrid, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeAndFactorizeHMatrix(const Mesh & mesh, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; virtual HMatrix discretizeAndFactorizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; /** Is it a stationary covariance model ? */ virtual Bool isStationary() const; /** Is it a diagonal covariance model ? */ virtual Bool isDiagonal() const; /** Amplitude accessors */ virtual Point getAmplitude() const; virtual void setAmplitude(const Point & amplitude); /** Scale accessors */ virtual Point getScale() const; virtual void setScale(const Point & scale); /** Spatial correlation accessors */ virtual CorrelationMatrix getSpatialCorrelation() const; virtual void setSpatialCorrelation(const CorrelationMatrix & correlation); /** Nugget factor accessor */ virtual void setNuggetFactor(const Scalar nuggetFactor); virtual Scalar getNuggetFactor() const; /** Parameters accessor */ virtual void setParameter(const Point & parameter); virtual Point getParameter() const; virtual Description getParameterDescription() const; /** Indices of the active parameters */ virtual void setActiveParameter(const Indices & active); virtual Indices getActiveParameter() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Marginal accessor */ virtual Implementation getMarginal(const UnsignedInteger index) const; /** Drawing method */ virtual Graph draw(const UnsignedInteger rowIndex = 0, const UnsignedInteger columnIndex = 0, const Scalar tMin = ResourceMap::GetAsScalar("CovarianceModel-DefaultTMin"), const Scalar tMax = ResourceMap::GetAsScalar("CovarianceModel-DefaultTMax"), const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("CovarianceModel-DefaultPointNumber"), const Bool asStationary = true, const Bool correlationFlag = false) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; // set the covariance structure void updateSpatialCovariance(); /** Container for scale values */ Point scale_; /** Input dimension */ UnsignedInteger spatialDimension_; /** Amplitude values */ Point amplitude_; /** Output dimension */ UnsignedInteger dimension_; /** Correlation matrix of the spatial dependence structure */ CorrelationMatrix spatialCorrelation_; /** Covariance matrix of the spatial dependence structure */ mutable CovarianceMatrix spatialCovariance_; /** Flag to tell if the model is diagonal */ Bool isDiagonal_; /** Nugget factor */ Scalar nuggetFactor_; /** Active parameters */ Indices activeParameter_; } ; /* class CovarianceModelImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMODELIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/DiracCovarianceModel.hxx000066400000000000000000000073101307543307100253320ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRACCOVARIANCEMODEL_HXX #define OPENTURNS_DIRACCOVARIANCEMODEL_HXX #include "openturns/StationaryCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DiracCovarianceModel */ class OT_API DiracCovarianceModel : public StationaryCovarianceModel { CLASSNAME; public: /** Default constructor */ explicit DiracCovarianceModel(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ DiracCovarianceModel(const UnsignedInteger spatialDimension, const Point & amplitude); /** Parameters constructor */ DiracCovarianceModel(const UnsignedInteger spatialDimension, const Point & amplitude, const CorrelationMatrix & correlation); /** Parameters constructor */ DiracCovarianceModel(const UnsignedInteger spatialDimension, const CovarianceMatrix & covariance); /** Virtual copy constructor */ DiracCovarianceModel * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::operator(); CovarianceMatrix operator() (const Point & tau) const; /** Discretize the covariance function */ using StationaryCovarianceModel::discretize; CovarianceMatrix discretize(const Sample & vertices) const; Sample discretizeRow(const Sample & vertices, const UnsignedInteger p) const; using StationaryCovarianceModel::discretizeAndFactorize; TriangularMatrix discretizeAndFactorize(const Sample & vertices) const; // discretize with use of HMatrix using StationaryCovarianceModel::discretizeHMatrix; HMatrix discretizeHMatrix(const Sample & vertices, const Scalar nuggetFactor, const HMatrixParameters & parameters) const; /** Gradient */ Matrix partialGradient(const Point & s, const Point & t) const; /** Scale/amplitude set accessors */ void setScale(const Point & scale); void setAmplitude(const Point & amplitude); void setSpatialCorrelation(const CorrelationMatrix & correlation); /** Is it a stationary covariance model ? */ Bool isStationary() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; friend struct DiracCovarianceModelDiscretizePolicy; friend struct DiracCovarianceModelDiscretizeAndFactorizePolicy; mutable TriangularMatrix covarianceFactor_; void computeCovariance(); } ; /* class DiracCovarianceModel */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/ExponentialCauchy.hxx000066400000000000000000000042451307543307100247630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIALCAUCHYMODEL_HXX #define OPENTURNS_EXPONENTIALCAUCHYMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SecondOrderModelImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class ExponentialCauchy */ class OT_API ExponentialCauchy : public SecondOrderModelImplementation { CLASSNAME; public: /** Default constructor without parameters */ ExponentialCauchy(); /** Standard constructor with scale and amplitude parameters parameters */ ExponentialCauchy(const Point & scale, const Point & amplitude); /** Virtual copy constructor */ virtual ExponentialCauchy * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Amplitude accessor */ Point getAmplitude() const; /** Scale accessor */ Point getScale() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : } ; /* class SecondOrderModelImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIALCAUCHYMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/ExponentialModel.hxx000066400000000000000000000060521307543307100246050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIALMODEL_HXX #define OPENTURNS_EXPONENTIALMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/Point.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class ExponentialModel */ class OT_API ExponentialModel : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor with spatial dimension */ explicit ExponentialModel(const UnsignedInteger spatialDimension = 1); /** Standard constructor with scale and amplitude parameters parameters */ ExponentialModel(const Point & scale, const Point & amplitude); /** Standard constructor with scale, amplitude and spatial correlation parameters */ ExponentialModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation); /** Standard constructor with scale and spatial covariance parameters */ ExponentialModel(const Point & scale, const CovarianceMatrix & spatialCovariance); /** Virtual copy constructor */ virtual ExponentialModel * clone() const; /** Computation of the covariance function, stationary interface */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; /** Gradient */ using StationaryCovarianceModel::partialGradient; Matrix partialGradient(const Point & s, const Point & t) const; /** Discretize the covariance function on a given TimeGrid */ using StationaryCovarianceModel::discretize; CovarianceMatrix discretize(const RegularGrid & regularGrid) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : } ; /* class ExponentialModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIALMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/ExponentiallyDampedCosineModel.hxx000066400000000000000000000063701307543307100274310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIALLYDAMPEDCOSINEMODEL_HXX #define OPENTURNS_EXPONENTIALLYDAMPEDCOSINEMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/Point.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class ExponentiallyDampedCosineModel */ class OT_API ExponentiallyDampedCosineModel : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor with spatial dimension */ explicit ExponentiallyDampedCosineModel(const UnsignedInteger spatialDimension = 1); /** Standard constructor with scale and amplitude parameters */ ExponentiallyDampedCosineModel(const Point & scale, const Point & amplitude, const Scalar frequency); /** Virtual copy constructor */ virtual ExponentiallyDampedCosineModel * clone() const; /** Computation of the covariance function, stationary interface */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; using StationaryCovarianceModel::operator(); CovarianceMatrix operator() (const Point & tau) const; Scalar computeAsScalar(const Point & tau) const; /** Discretize the covariance function on a given TimeGrid */ using StationaryCovarianceModel::discretize; CovarianceMatrix discretize(const RegularGrid & regularGrid) const; /** Is it a stationary model ? */ Bool isStationary() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Frequency accessor */ void setFrequency(const Scalar frequency); Scalar getFrequency() const; protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; public: /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : /** Frequency */ Scalar frequency_; } ; /* class ExponentiallyDampedCosineModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIALLYDAMPEDCOSINEMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/FaureSequence.hxx000066400000000000000000000053231307543307100240710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Faure sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FAURESEQUENCE_HXX #define OPENTURNS_FAURESEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FaureSequence */ class OT_API FaureSequence : public LowDiscrepancySequenceImplementation { CLASSNAME; public: /** Constructor with parameters */ explicit FaureSequence(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual FaureSequence * clone() const; /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1[ */ using LowDiscrepancySequenceImplementation::generate; Point generate() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the initial binomial coefficients table associated with the modulus */ void computeInitialBinomialCoefficients(); /** Update the binomial table by adding one column to the triangular array */ void updateBinomialCoefficients() const; /** Binomial for the generation of the sequence */ mutable Unsigned64BitsIntegerPersistentCollection coefficients_; /** Modulus of the sequence, i.e. least prime number greater or equal to the dimension */ Unsigned64BitsInteger modulus_; /** Inverse of the modulus */ Scalar modulusInverse_; /** Current seed into the sequence */ mutable Unsigned64BitsInteger seed_; /** Next value of the seed that needs a coefficient update */ mutable Unsigned64BitsInteger seedBound_; /** Number of digits of the seed in base the modulus */ mutable UnsignedInteger logSeed_; }; /* class FaureSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FAURESEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Field.hxx000066400000000000000000000104471307543307100223640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Field implements samples indexed by time * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIELD_HXX #define OPENTURNS_FIELD_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/FieldImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Field */ class OT_API Field : public TypedInterfaceObject { CLASSNAME; public: /** * Default constructor */ Field(); /** Constructor from a Mesh and a dimension */ Field(const Mesh & mesh, const UnsignedInteger dim); /** Constructor from a Mesh and a sample */ Field(const Mesh & mesh, const Sample & values); /** Constructor from implementation */ Field(const FieldImplementation & implementation); #ifndef SWIG /** Constructor from implementation */ Field(const Implementation & implementation); /** Individual value accessor */ NSI_point operator[](const UnsignedInteger index); NSI_const_point operator[](const UnsignedInteger index) const; NSI_point at(const UnsignedInteger index); NSI_const_point at(const UnsignedInteger index) const; Scalar & operator() (const UnsignedInteger i, const UnsignedInteger j); const Scalar & operator() (const UnsignedInteger i, const UnsignedInteger j) const; Scalar & at(const UnsignedInteger i, const UnsignedInteger j); const Scalar & at(const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Accessor to values */ Point getValueAtIndex(const UnsignedInteger index) const; void setValueAtIndex(const UnsignedInteger index, const Point & val); Point getValueAtNearestPosition(const Point & position) const; void setValueAtNearestPosition(const Point & position, const Point & val); /** Get the i-th marginal sample */ Field getMarginal(const UnsignedInteger index) const; /** Get the marginal sample corresponding to indices dimensions */ Field getMarginal(const Indices & indices) const; /** Description accessor */ void setDescription(const Description & description); Description getDescription() const; /** Mesh accessor */ Mesh getMesh() const; RegularGrid getTimeGrid() const; /** Comparison operator */ Bool operator ==(const Field & other) const; /** * String converter * This method shows human readable information on the * internal state of an Field. It is used when streaming * the Field or for user information. */ String __repr__() const; String __str__(const String & offset = "") const; /** Size accessor */ UnsignedInteger getSize() const; /** Dimension accessor */ UnsignedInteger getSpatialDimension() const; UnsignedInteger getDimension() const; /** Return the values stored in the field as a sample */ Sample getSample() const; Sample getValues() const; void setValues(const Sample & values); /** Return the field as a defomed mesh, ie its values are added to the components of the vertices if the dimensions match */ Mesh asDeformedMesh() const; /** Compute the spatial mean of the field */ Point getSpatialMean() const; /** Compute the temporal mean of the field */ Point getTemporalMean() const; /** Draw a marginal of the field */ Graph drawMarginal(const UnsignedInteger index = 0, const Bool interpolate = true) const; Graph draw() const; /** VTK export */ void exportToVTKFile(const String & fileName) const; }; /* class Field */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIELD_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/FieldImplementation.hxx000066400000000000000000000130551307543307100252700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class FieldImplementation implements values indexed by * the vertices of a Mesh * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTCULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIELDIMPLEMENTATION_HXX #define OPENTURNS_FIELDIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/Mesh.hxx" #include "openturns/RegularGrid.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FieldImplementation */ class OT_API FieldImplementation : public PersistentObject { CLASSNAME; public: /** * Default constructor */ FieldImplementation(); /** Standard constructor */ FieldImplementation(const Mesh & mesh, const UnsignedInteger dim); /** Constructor from a Mesh and a sample */ FieldImplementation(const Mesh & mesh, const Sample & values); /** Accessor to values */ Point getValueAtIndex(const UnsignedInteger index) const; void setValueAtIndex(const UnsignedInteger index, const Point & val); Point getValueAtNearestPosition(const Point & position) const; void setValueAtNearestPosition(const Point & position, const Point & val); /** Accessor to values */ Point getValueAtNearestTime(const Scalar timestamp) const; void setValueAtNearestTime(const Scalar timestamp, const Point & val); /** Virtual constructor */ virtual FieldImplementation * clone() const; /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** Mesh accessor */ Mesh getMesh() const; RegularGrid getTimeGrid() const; /** Comparison operator */ Bool operator ==(const FieldImplementation & other) const; /** * String converter * This method shows human readable information on the * internal state of an FieldImplementation. It is used when streaming * the FieldImplementation or for user information. */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Size accessor */ UnsignedInteger getSize() const; /** Dimension accessor */ UnsignedInteger getSpatialDimension() const; UnsignedInteger getDimension() const; /** Return the values stored in the field as a sample */ Sample getSample() const; Sample getValues() const; void setValues(const Sample & values); /** Get the i-th marginal sample */ FieldImplementation getMarginal(const UnsignedInteger index) const; /** Get the marginal sample corresponding to indices dimensions */ FieldImplementation getMarginal(const Indices & indices) const; #ifndef SWIG /** Individual value accessor */ NSI_point operator[](const UnsignedInteger index); NSI_const_point operator[](const UnsignedInteger index) const; NSI_point at(const UnsignedInteger index); NSI_const_point at(const UnsignedInteger index) const; Scalar & operator() (const UnsignedInteger i, const UnsignedInteger j); const Scalar & operator() (const UnsignedInteger i, const UnsignedInteger j) const; Scalar & at(const UnsignedInteger i, const UnsignedInteger j); const Scalar & at(const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Return the field as a sample, ie its values and positions */ Sample asSample() const; /** Return the field as a defomed mesh, ie its values are added to the components of the vertices if the dimensions match */ Mesh asDeformedMesh() const; /** Compute the spatial mean of the field */ Point getSpatialMean() const; /** Compute the temporal mean of the field, ie its spatial mean when the mesh is regular and of dimension 1 */ Point getTemporalMean() const; /** Draw a marginal of the timeSerie */ Graph drawMarginal(const UnsignedInteger index = 0, const Bool interpolate = true) const; Graph draw() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** VTK export */ void exportToVTKFile(const String & fileName) const; protected: /** Compute the spatial mean of the field */ void computeSpatialMean() const; /** The mesh associated to the field */ Mesh mesh_; /** The values associated to the field */ Sample values_; /** The description of all components */ Description description_; /** The spatial mean */ mutable Point spatialMean_; /** Flag to tell if the spatial mean has already been computed */ mutable Bool isAlreadyComputedSpatialMean_; private: friend struct FieldSpatialMeanFunctor; }; /* class FieldImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIELDIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/FilteringWindows.hxx000066400000000000000000000037701307543307100246400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a second order model * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FILTERINGWINDOWS_HXX #define OPENTURNS_FILTERINGWINDOWS_HXX #include "openturns/FilteringWindowsImplementation.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FilteringWindowsImplementation */ class OT_API FilteringWindows : public TypedInterfaceObject { CLASSNAME; public: /** Default onstructor */ FilteringWindows(); /** Copy constructors */ FilteringWindows(const FilteringWindowsImplementation & implementation); /** Constructor from implementation */ FilteringWindows(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ FilteringWindows(FilteringWindowsImplementation * p_implementation); #endif /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** functor - evaluation of filter using () */ Scalar operator()(const Scalar t) const; } ; /* class FilteringWindows */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FILTERINGWINDOWS_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/FilteringWindowsImplementation.hxx000066400000000000000000000037341307543307100275460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a second order model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FILTERINGWINDOWSIMPLEMENTATION_HXX #define OPENTURNS_FILTERINGWINDOWSIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FilteringWindowsImplementation */ class OT_API FilteringWindowsImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor without parameters */ FilteringWindowsImplementation(); /** Virtual copy constructor */ virtual FilteringWindowsImplementation * clone() const; virtual Scalar operator()(const Scalar t) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); } ; /* class FilteringWindowsImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FILTERINWINDOWSIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Full.hxx000066400000000000000000000031251307543307100222360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism of * simulation algorithms. It delegates to its children the effective * history strategy. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FULL_HXX #define OPENTURNS_FULL_HXX #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Full */ class OT_API Full : public HistoryStrategyImplementation { CLASSNAME; public: /** Constructor with parameters */ Full(); /** Virtual constructor */ virtual Full * clone() const; /** Store the point according to the strategy */ void store(const Point & point); void store(const Sample & sample); /** String converter */ String __repr__() const; protected: } ; /* class Full */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FULL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/GeneralizedExponential.hxx000066400000000000000000000050401307543307100257720ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALIZEDEXPONENTIAL_HXX #define OPENTURNS_GENERALIZEDEXPONENTIAL_HXX #include "openturns/StationaryCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralizedExponential */ class OT_API GeneralizedExponential : public StationaryCovarianceModel { CLASSNAME; public: /** Default constructor */ explicit GeneralizedExponential(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ GeneralizedExponential(const Point & scale, const Scalar p); GeneralizedExponential(const Point & scale, const Point & amplitude, const Scalar p); /** Virtual copy constructor */ GeneralizedExponential * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** P accessor */ Scalar getP() const; void setP(const Scalar p); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; private: /** Exponent of the model */ Scalar p_; } ; /* class GeneralizedExponential */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/HMatrix.hxx000066400000000000000000000063541307543307100227170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HMATRIX_HXX #define OPENTURNS_HMATRIX_HXX #include "openturns/HMatrixImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HMatrix * * HMatrix implements hierarchical matrices */ class OT_API HMatrix : public TypedInterfaceObject { CLASSNAME; /** Default constructor */ HMatrix(); /** Constructor with implementation */ HMatrix(const Implementation & i); /** Constructor with implementation */ HMatrix(const HMatrixImplementation & i); /** Get the dimensions of the matrix */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; void assemble(const HMatrixRealAssemblyFunction& f, char symmetry); void assemble(const HMatrixTensorRealAssemblyFunction& f, char symmetry); void factorize(const String& method); /** Compute this <- alpha * this */ void scale(Scalar alpha); /** Compute y <- alpha op(this) * x + beta * y */ void gemv(char trans, Scalar alpha, const Point& x, Scalar beta, Point& y) const; /** Compute this <- alpha op(A) * p(B) + beta * this */ void gemm(char transA, char transB, Scalar alpha, const HMatrix& a, const HMatrix& b, Scalar beta); /** Transpose matrix */ void transpose(); /** Get the Frobenius norm */ Scalar norm() const; /** Get the diagonal */ Point getDiagonal() const; /** Solve system op(A)*X = b */ Point solve(const Point& b, Bool trans = false) const; /** Solve system op(A)*X = m */ Matrix solve(const Matrix& m, Bool trans = false) const; /** Solve system op(L)*X = b */ Point solveLower(const Point& b, Bool trans = false) const; /** Solve system op(L)*X = m */ Matrix solveLower(const Matrix& m, Bool trans = false) const; /** Get number of HMatrix elements in compressed and uncompressed forms */ std::pair compressionRatio() const; /** Get number of HMatrix elements in full blocks and low rank blocks */ std::pair fullrkRatio() const; /** Dump HMatrix onto file */ void dump(const String & name) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Comparison operators */ Bool operator == (const HMatrix & rhs) const; }; /* class HMatrix */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HMATRIX_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HMatrixFactory.hxx000066400000000000000000000037721307543307100242500ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixFactory.hxx * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HMATRIXFACTORY_HXX #define OPENTURNS_HMATRIXFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/HMatrixParameters.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS // Forward declarations class HMatrix; class Sample; /** * @class HMatrixFactory * */ class OT_API HMatrixFactory : public PersistentObject { CLASSNAME; public: /** Default constructor */ HMatrixFactory(); /** Virtual constructor */ virtual HMatrixFactory * clone() const; /** Method to create an HMatrix object */ HMatrix build(const Sample & sample, UnsignedInteger outputDimension, Bool symmetric, const HMatrixParameters & parameters = HMatrixParameters()); /** Tell whether HMat support is available */ static Bool IsAvailable(); /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); }; /* end class HMatrixFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HMATRIXFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HMatrixImplementation.hxx000066400000000000000000000213601307543307100256170ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixImplementation.hxx * @brief This file supplies support for HMat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HMATRIXIMPLEMENTATION_HXX #define OPENTURNS_HMATRIXIMPLEMENTATION_HXX #include "openturns/OTconfig.hxx" #include "openturns/OTprivate.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/CovarianceModel.hxx" #ifdef OPENTURNS_HAVE_HMAT # include #endif BEGIN_NAMESPACE_OPENTURNS // Forward declaration class HMatrixFactory; // In order to create an H-matrix, one has first to generate an interface with // HMatrixFactory::build, then compute its coefficients, and after that, it is // possible to factorize it, solve linear systems, etc. As H-matrices are // designed to solve very large systems, most operations are performed inplace, // which is an unusual pattern in OpenTURNS. // There are two ways to compute matrix coefficients: // 1. The simplest solution is to provide a method which computes (i,j) coefficient. // This is what HMatrixRealAssemblyFunction is designed for, and such an object // is then passed to HMatrixImplementation::simpleAssemble. But most of the time, // this involves heavy computations which could be reused when computing values // for different coefficients. // 2. HMat provides a 2nd interface to compute tiled blocks. But it is cumbersome, // so we defined a more intuitive interface which should be suited for our needs. // When dimension is greater than 1, HMatrixFactory::build duplicates input vertices // to have local d x d matrices, and HMatrixTensorRealAssemblyFunction is an interface // to compute all coefficients of this local matrix, which had already been allocated. // It will be automatically copied at the right place in HMatrixImplementation. class OT_API HMatrixRealAssemblyFunction { public: virtual ~HMatrixRealAssemblyFunction() {} // Compute matrix coefficient for degrees of freedom i and j virtual Scalar operator() (UnsignedInteger i, UnsignedInteger j) const = 0; }; class OT_API HMatrixTensorRealAssemblyFunction { public: virtual ~HMatrixTensorRealAssemblyFunction() {} HMatrixTensorRealAssemblyFunction(const UnsignedInteger outputDimension) : dimension_(outputDimension) {} UnsignedInteger getDimension() const { return dimension_; } // Compute local matrix for input vertices i and j virtual void compute(UnsignedInteger i, UnsignedInteger j, Matrix* localValues) const = 0; protected: UnsignedInteger dimension_; }; class OT_API HMatrixClusterTree { public: HMatrixClusterTree(void* ptr_cluster_tree, int size) : hmatClusterTree_(ptr_cluster_tree), size_(size) {} void* get() { return hmatClusterTree_; } int getSize() { return size_; } ~HMatrixClusterTree(); private: void* hmatClusterTree_; int size_; }; // HMatrixImplementation is not persistent class OT_API HMatrixImplementation : public PersistentObject { friend class HMatrixFactory; CLASSNAME; private: // Only visible from HMatrixFactory::build HMatrixImplementation(void* ptr_hmat_interface, void* ptr_cluster_tree, int cluster_size, void* ptr_hmatrix); public: /** Default constructor */ HMatrixImplementation(); /** Copy constructor */ HMatrixImplementation(const HMatrixImplementation& other); /** Virtual copy constructor */ virtual HMatrixImplementation * clone() const; // Destructor virtual ~HMatrixImplementation(); /** Get the dimensions of the matrix */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; void assemble(const HMatrixRealAssemblyFunction& f, char symmetry); void assemble(const HMatrixTensorRealAssemblyFunction& f, char symmetry); void factorize(const String& method); /** Compute this <- alpha * this */ void scale(Scalar alpha); /** Compute y <- alpha op(this) * x + beta * y */ void gemv(char trans, Scalar alpha, const Point& x, Scalar beta, Point& y) const; /** Compute this <- alpha op(A) * p(B) + beta * this */ void gemm(char transA, char transB, Scalar alpha, const HMatrixImplementation& a, const HMatrixImplementation& b, Scalar beta); /** Transpose matrix */ void transpose(); /** Get the Frobenius norm */ Scalar norm() const; /** Get the diagonal */ Point getDiagonal() const; /** Solve system op(A)*X = b */ Point solve(const Point& b, Bool trans) const; /** Solve system op(A)*X = m */ Matrix solve(const Matrix& m, Bool trans) const; /** Solve system op(L)*X = b */ Point solveLower(const Point& b, Bool trans) const; /** Solve system op(L)*X = m */ Matrix solveLower(const Matrix& m, Bool trans) const; /** Get number of HMatrix elements in compressed and uncompressed forms */ std::pair compressionRatio() const; /** Get number of HMatrix elements in full blocks and low rank blocks */ std::pair fullrkRatio() const; /** Dump HMatrix onto file */ void dump(const String & name) const; /** Change HMatrix settings */ Bool setKey(const String & name, const String & value); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; private: // DO NOT USE void * hmatInterface_; Pointer hmatClusterTree_; void * hmat_; }; // First implementation, by using HMatrixRealAssemblyFunction // This is going to be very slow, because each local // covariance matrix of size 3x3 is computed, but a single // coefficient is stored. class CovarianceAssemblyFunction : public HMatrixRealAssemblyFunction { private: const CovarianceModel covarianceModel_; const Sample vertices_; const UnsignedInteger covarianceDimension_; const double epsilon_; public: CovarianceAssemblyFunction(const CovarianceModel & covarianceModel, const Sample & vertices, double epsilon) : HMatrixRealAssemblyFunction() , covarianceModel_(covarianceModel) , vertices_(vertices) , covarianceDimension_(covarianceModel.getDimension()) , epsilon_(epsilon) {} Scalar operator()(UnsignedInteger i, UnsignedInteger j) const { const UnsignedInteger rowIndex = i / covarianceDimension_; const UnsignedInteger columnIndex = j / covarianceDimension_; const CovarianceMatrix localCovarianceMatrix(covarianceModel_( vertices_[rowIndex], vertices_[columnIndex] )); const UnsignedInteger rowIndexLocal = i % covarianceDimension_; const UnsignedInteger columnIndexLocal = j % covarianceDimension_; return localCovarianceMatrix(rowIndexLocal, columnIndexLocal) + (i != j ? 0.0 : epsilon_); } }; // Second implementation, by using HMatrixTensorRealAssemblyFunction // Each local covariance matrix is built only once, and its components // are dispatched into the global covariance matrix class CovarianceBlockAssemblyFunction : public HMatrixTensorRealAssemblyFunction { private: const CovarianceModel covarianceModel_; const Sample vertices_; const double epsilon_; CovarianceMatrix epsilonId_; public: CovarianceBlockAssemblyFunction(const CovarianceModel & covarianceModel, const Sample & vertices, double epsilon) : HMatrixTensorRealAssemblyFunction(covarianceModel.getDimension()) , covarianceModel_(covarianceModel) , vertices_(vertices) , epsilon_(epsilon) { Matrix eps = epsilon_ * IdentityMatrix(covarianceModel.getDimension()); Pointer impl = eps.getImplementation(); epsilonId_ = CovarianceMatrix(covarianceModel.getDimension(), *impl.get()); } void compute(UnsignedInteger i, UnsignedInteger j, Matrix* localValues) const { CovarianceMatrix localResult(covarianceModel_( vertices_[i], vertices_[j] )); if (i == j && epsilon_ != 0.0) localResult = localResult + epsilonId_; memcpy( &localValues->getImplementation()->operator[](0), &localResult.getImplementation()->operator[](0), dimension_ * dimension_ * sizeof(Scalar) ); } }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HMATRIXIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HMatrixParameters.hxx000066400000000000000000000052141307543307100247350ustar00rootroot00000000000000// -*- C++ -*- /** * @file HMatrixParameters.hxx * @brief This file supplies support for HMat. It stores parameters used by * HMat applications * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HMATRIXPARAMETERS_HXX #define OPENTURNS_HMATRIXPARAMETERS_HXX #include "openturns/PersistentObject.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS // HMatrixParameters class OT_API HMatrixParameters : public PersistentObject { CLASSNAME; public: /** Default constructor */ HMatrixParameters(); /** Virtual copy constructor */ virtual HMatrixParameters * clone() const; /** accessor for assembly epsilon */ void setAssemblyEpsilon(const Scalar assemblyEpsilon); Scalar getAssemblyEpsilon() const; /** accessor for recompression epsilon */ void setRecompressionEpsilon(const Scalar recompressionEpsilon); Scalar getRecompressionEpsilon() const; /** accessor for admissibility factor */ void setAdmissibilityFactor(const Scalar admissibilityFactor); Scalar getAdmissibilityFactor() const; /** accessor for clustering algorithm */ void setClusteringAlgorithm(const String & clusteringAlgorithm); String getClusteringAlgorithm() const; /** accessor for compression method */ void setCompressionMethod(const String & compressionMethod); String getCompressionMethod() const; UnsignedInteger getCompressionMethodAsUnsignedInteger() const; /* String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: Scalar assemblyEpsilon_; Scalar recompressionEpsilon_; Scalar admissibilityFactor_; String clusteringAlgorithm_; String compressionMethod_; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HMATRIXPARAMETERS_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HaltonSequence.hxx000066400000000000000000000041701307543307100242530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Halton sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HALTONSEQUENCE_HXX #define OPENTURNS_HALTONSEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HaltonSequence */ class OT_API HaltonSequence : public LowDiscrepancySequenceImplementation { CLASSNAME; public: /** Constructor with parameters */ explicit HaltonSequence(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual HaltonSequence * clone() const; /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1[ */ using LowDiscrepancySequenceImplementation::generate; Point generate() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Base for the generation of the sequence */ Unsigned64BitsIntegerPersistentCollection base_; /** Current seed into the sequence */ mutable Unsigned64BitsInteger seed_; }; /* class HaltonSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HALTONSEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Hamming.hxx000066400000000000000000000035011307543307100227120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HAMMINGFILTER_HXX #define OPENTURNS_HAMMINGFILTER_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FilteringWindowsImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Hamming */ class OT_API Hamming : public FilteringWindowsImplementation { CLASSNAME; public: /** Default constructor without parameters */ Hamming(); /** Virtual copy constructor */ virtual Hamming * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Evaluation method */ Scalar operator()(const Scalar t) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); } ; /* class Hamming */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HAMMINGFILTER_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Hanning.hxx000066400000000000000000000035011307543307100227140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HANNINGFILTER_HXX #define OPENTURNS_HANNINGFILTER_HXX #include "openturns/PersistentObject.hxx" #include "openturns/FilteringWindowsImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Hanning */ class OT_API Hanning : public FilteringWindowsImplementation { CLASSNAME; public: /** Default constructor without parameters */ Hanning(); /** Virtual copy constructor */ virtual Hanning * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Evaluation method */ Scalar operator()(const Scalar t) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); } ; /* class Hanning */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HANNINGFILTER_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HaselgroveSequence.hxx000066400000000000000000000040111307543307100251170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Haselgrove sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HASELGROVESEQUENCE_HXX #define OPENTURNS_HASELGROVESEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HaselgroveSequence */ class OT_API HaselgroveSequence : public LowDiscrepancySequenceImplementation { CLASSNAME; public: /** Constructor with parameters */ explicit HaselgroveSequence(const UnsignedInteger dimension = 1); /** Constructor with parameters */ explicit HaselgroveSequence(const Point & base); /** Virtual constructor */ virtual HaselgroveSequence * clone() const; /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1[ */ using LowDiscrepancySequenceImplementation::generate; Point generate() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** Base for the generation of the sequence */ Point base_; /** Current seed into the sequence */ mutable Unsigned64BitsInteger seed_; }; /* class HaselgroveSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HASELGROVESEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HistoryStrategy.hxx000066400000000000000000000036651307543307100245310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HISTORYSTRATEGY_HXX #define OPENTURNS_HISTORYSTRATEGY_HXX #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistoryStrategy */ class OT_API HistoryStrategy : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ HistoryStrategy(); /** Constructor with parameters */ HistoryStrategy(const HistoryStrategyImplementation & implementation); /** Constructor with parameters */ HistoryStrategy(Implementation & p_implementation); /** Store the point according to the strategy */ void store(const Point & point); void store(const Sample & sample); /** Clear the history storage */ void clear(); /** History sample accessor */ Sample getSample() const; /** String converter */ String __repr__() const; } ; /* class HistoryStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HISTORYSTRATEGY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/HistoryStrategyImplementation.hxx000066400000000000000000000043511307543307100274300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism of * simulation algorithms. It delegates to its children the effective * history strategy. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HISTORYSTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_HISTORYSTRATEGYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistoryStrategyImplementation */ class OT_API HistoryStrategyImplementation : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ HistoryStrategyImplementation(); /** Virtual constructor */ virtual HistoryStrategyImplementation * clone() const; /** Store the point according to the strategy */ virtual void store(const Point & point); virtual void store(const Sample & sample); /** Clear the history storage */ void clear(); /** History sample accessor */ virtual Sample getSample() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Data container */ Sample sample_; /** Initialization flag */ Bool isInitialized_; } ; /* class HistoryStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HISTORYSTRATEGYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Last.hxx000066400000000000000000000045661307543307100222510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism of * simulation algorithms. It delegates to its children the effective * history strategy. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LAST_HXX #define OPENTURNS_LAST_HXX #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Last */ class OT_API Last : public HistoryStrategyImplementation { CLASSNAME; public: /** Constructor with parameters */ Last(); /** Constructor with parameters */ explicit Last(const UnsignedInteger maximumSize); /** Virtual constructor */ virtual Last * clone() const; /** Store the point according to the strategy */ using HistoryStrategyImplementation::store; void store(const Point & point); /** Sample accessor */ Sample getSample() const; /** MaximumSize accessor */ UnsignedInteger getMaximumSize() const; /** Index accessor */ UnsignedInteger getIndex() const; /** Wrapped flag accessor */ Bool getHasWrapped() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Maximum number of points to be hitorized UnsignedInteger maximumSize_; // Index where the next point will be stored UnsignedInteger index_; // Flag that tells if the storage has already exceeded maximumSize_ Bool hasWrapped_; } ; /* class Last */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LAST_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/LinearModel.hxx000066400000000000000000000057431307543307100235370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LinearModel implements the linear model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARMODEL_HXX #define OPENTURNS_LINEARMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Description.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Interval.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/TestResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearModel * * LinearModel implements the notion of linear model */ class OT_API LinearModel : public PersistentObject { CLASSNAME; public: typedef Collection ScalarCollection; typedef PersistentCollection ScalarPersistentCollection; /** Default constructor is private */ LinearModel(); /** Standard constructor */ LinearModel(const Point & vectorR, const Interval & intervals, const ScalarCollection & pValuesOfR); /** Constructor from Point */ LinearModel(const Point & vectorR); /** Virtual constructor */ virtual LinearModel * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** get vector, get intervals*/ Point getRegression() const; Interval getConfidenceIntervals() const; ScalarCollection getPValues() const; /** getPredicted : build an sample of predicted values */ Sample getPredicted(const Sample & predictor) const; /** getResidual */ Sample getResidual(const Sample & predictor, const Sample & measured) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The estimated vector */ Point regression_; /** The confidence intervals */ Interval confidenceIntervals_; /** The p-Values */ ScalarPersistentCollection pValues_; private: friend class Factory; }; /* class LinearModel */ /** Comparison operator */ OT_API Bool operator ==(const LinearModel & lhs, const LinearModel & rhs); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/LinearModelFactory.hxx000066400000000000000000000031451307543307100250610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for linear model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARMODELFACTORY_HXX #define OPENTURNS_LINEARMODELFACTORY_HXX #include "openturns/LinearModel.hxx" #include "openturns/Sample.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearModelFactory * * Factory for linear model */ class OT_API LinearModelFactory { public: typedef PersistentCollection ScalarPersistentCollection; /** Default constructor */ LinearModelFactory(); /** LinearModel creation */ LinearModel build(const Sample & samplePred, const Sample & sampleLab, const Scalar levelValue = ResourceMap::GetAsScalar( "LinearModelFactory-DefaultLevelValue" )) const; }; /* class LinearModelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARMODELFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/LowDiscrepancySequence.hxx000066400000000000000000000046541307543307100257630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface for low discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOWDISCREPANCYSEQUENCE_HXX #define OPENTURNS_LOWDISCREPANCYSEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LowDiscrepancySequence */ class OT_API LowDiscrepancySequence : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ LowDiscrepancySequence(); /** Constructor with parameters*/ explicit LowDiscrepancySequence(const UnsignedInteger dimension); /** Constructor with parameters */ LowDiscrepancySequence(const LowDiscrepancySequenceImplementation & implementation); /** Constructor with parameters */ LowDiscrepancySequence(Implementation & p_implementation); /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1) */ Point generate() const; /** Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1) */ Sample generate(const UnsignedInteger size) const; /** Compute the star discrepancy of a sample uniformly distributed over [0, 1) */ Scalar computeStarDiscrepancy(const Sample & sample) const; /** String converter */ String __repr__() const; }; /* class LowDiscrepancySequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOWDISCREPANCYSEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/LowDiscrepancySequenceImplementation.hxx000066400000000000000000000070461307543307100306670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for low discrepancy sequences * simulation algorithms. It delegates to its children the effective * history strategy. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOWDISCREPANCYSEQUENCEIMPLEMENTATION_HXX #define OPENTURNS_LOWDISCREPANCYSEQUENCEIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Interval.hxx" #include "openturns/Indices.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LowDiscrepancySequenceImplementation */ class OT_API LowDiscrepancySequenceImplementation : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ explicit LowDiscrepancySequenceImplementation(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual LowDiscrepancySequenceImplementation * clone() const; /** initialize the sequence */ virtual void initialize(const UnsignedInteger dimension); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1) */ virtual Point generate() const; /** Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1) */ virtual Sample generate(const UnsignedInteger size) const; /** Compute the star discrepancy of a sample uniformly distributed over [0, 1) */ static Scalar ComputeStarDiscrepancy(const Sample & sample); /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute the local discrepancy of a sample, given a multidimensionnal interval */ static Scalar ComputeLocalDiscrepancy(const Sample & sample, const Interval & interval); protected: typedef Collection Unsigned64BitsIntegerCollection; typedef PersistentCollection Unsigned64BitsIntegerPersistentCollection; /** Get the needed prime numbers */ static Unsigned64BitsIntegerCollection GetPrimeNumbers(const Indices & indices); /** Compute the n first prime numbers */ static Unsigned64BitsIntegerCollection ComputeFirstPrimeNumbers(const UnsignedInteger n); /** Compute the least prime number greater or equal to n */ static Unsigned64BitsInteger ComputeNextPrimeNumber(const UnsignedInteger n); /** Dimension parameter */ UnsignedInteger dimension_; } ; /* class LowDiscrepancySequenceImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOWDISCREPANCYSEQUENCEIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/MaternModel.hxx000066400000000000000000000052571307543307100235530ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MATERNMODEL_HXX #define OPENTURNS_MATERNMODEL_HXX #include "openturns/StationaryCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MaternModel */ class OT_API MaternModel : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor based on spatial dimension*/ explicit MaternModel(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ MaternModel(const Point & scale, const Scalar nu); MaternModel(const Point & scale, const Point & amplitude, const Scalar nu); /** Virtual copy constructor */ MaternModel * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; // Reimplement the setScale method using StationaryCovarianceModel::setScale; void setScale(const Point & scale); /** Nu accessor */ Scalar getNu() const; void setNu(const Scalar nu); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; private: void initialize(); // The shape parameter Scalar nu_; // The normalization factor Scalar logNormalizationFactor_; // Scaling factor Point sqrt2nuOverTheta_; } ; /* class MaternModel */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/NonStationaryCovarianceModelFactory.hxx000066400000000000000000000045211307543307100304510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NONSTATIONARYCOVARIANCEMODELFACTORY_HXX #define OPENTURNS_NONSTATIONARYCOVARIANCEMODELFACTORY_HXX #include "openturns/CovarianceModelFactoryImplementation.hxx" #include "openturns/UserDefinedCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NonStationaryCovarianceModelFactory */ class OT_API NonStationaryCovarianceModelFactory : public CovarianceModelFactoryImplementation { CLASSNAME; public: /** Default constructor */ NonStationaryCovarianceModelFactory(); /** Virtual constructor */ virtual NonStationaryCovarianceModelFactory * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Build a a spectral model based on a sample */ using CovarianceModelFactoryImplementation::build; CovarianceModelImplementation::Implementation build(const ProcessSample & sample) const; CovarianceModelImplementation::Implementation build(const ProcessSample & sample, const Bool isCentered) const; UserDefinedCovarianceModel buildAsUserDefinedCovarianceModel(const ProcessSample & sample, const Bool isCentered = false) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); }; /* class NonStationaryCovarianceModelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NONSTATIONARYCOVARIANCEMODELFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Null.hxx000066400000000000000000000031251307543307100222460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is a top-level class for the history mechanism of * simulation algorithms. It delegates to its children the effective * history strategy. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NULL_HXX #define OPENTURNS_NULL_HXX #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Null */ class OT_API Null : public HistoryStrategyImplementation { CLASSNAME; public: /** Constructor with parameters */ Null(); /** Virtual constructor */ virtual Null * clone() const; /** Store the point according to the strategy */ void store(const Point & point); void store(const Sample & sample); /** String converter */ String __repr__() const; protected: } ; /* class Null */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NULL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/OTStat.hxx000066400000000000000000000074341307543307100225210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Stat * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSTAT_HXX #define OPENTURNS_OTSTAT_HXX #include "openturns/Compact.hxx" #include "openturns/CorrelationAnalysis.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/csv_parser_state.hxx" #include "openturns/Full.hxx" #include "openturns/ReverseHaltonSequence.hxx" #include "openturns/FaureSequence.hxx" #include "openturns/HaltonSequence.hxx" #include "openturns/HaselgroveSequence.hxx" #include "openturns/HistoryStrategy.hxx" #include "openturns/HistoryStrategyImplementation.hxx" #include "openturns/Last.hxx" #include "openturns/LinearModelFactory.hxx" #include "openturns/LinearModel.hxx" #include "openturns/LowDiscrepancySequence.hxx" #include "openturns/LowDiscrepancySequenceImplementation.hxx" #include "openturns/Null.hxx" #include "openturns/Sample.hxx" #include "openturns/SampleImplementation.hxx" #include "openturns/FieldImplementation.hxx" #include "openturns/Field.hxx" #include "openturns/Field.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SecondOrderModelImplementation.hxx" #include "openturns/SecondOrderModel.hxx" #include "openturns/ExponentialCauchy.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/TestResult.hxx" #include "openturns/TimeSeries.hxx" #include "openturns/FilteringWindowsImplementation.hxx" #include "openturns/FilteringWindows.hxx" #include "openturns/Hamming.hxx" #include "openturns/Hanning.hxx" #include "openturns/SpectralModel.hxx" #include "openturns/CovarianceModelImplementation.hxx" #include "openturns/SpectralModelImplementation.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/SpectralModelFactoryImplementation.hxx" #include "openturns/SpectralModelFactory.hxx" #include "openturns/UserDefinedSpectralModel.hxx" #include "openturns/WelchFactory.hxx" #include "openturns/ExponentialModel.hxx" #include "openturns/ExponentiallyDampedCosineModel.hxx" #include "openturns/CauchyModel.hxx" #include "openturns/CovarianceModelFactoryImplementation.hxx" #include "openturns/CovarianceModelFactory.hxx" #include "openturns/UserDefinedCovarianceModel.hxx" #include "openturns/NonStationaryCovarianceModelFactory.hxx" #include "openturns/UserDefinedStationaryCovarianceModel.hxx" #include "openturns/StationaryCovarianceModelFactory.hxx" #include "openturns/SquaredExponential.hxx" #include "openturns/GeneralizedExponential.hxx" #include "openturns/AbsoluteExponential.hxx" #include "openturns/SphericalModel.hxx" #include "openturns/MaternModel.hxx" #include "openturns/DiracCovarianceModel.hxx" #include "openturns/HMatrixParameters.hxx" #include "openturns/ProductCovarianceModel.hxx" #include "openturns/RankMCovarianceModel.hxx" #include "openturns/TensorizedCovarianceModel.hxx" #include "openturns/HMatrixImplementation.hxx" #include "openturns/HMatrix.hxx" #include "openturns/HMatrixFactory.hxx" #endif /* OPENTURNS_OTSTAT_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/ProcessSample.hxx000066400000000000000000000071721307543307100241220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ProcessSample class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PROCESSSAMPLE_HXX #define OPENTURNS_PROCESSSAMPLE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" //#include "TimeGrid.hxx" #include "openturns/Field.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProcessSample * * An interface for time series */ class OT_API ProcessSample : public PersistentObject { CLASSNAME; public: /** Some typedefs to ease reading */ typedef Collection SampleCollection; typedef PersistentCollection SamplePersistentCollection; /** Default constructor */ ProcessSample(); /** Constructors */ ProcessSample(const UnsignedInteger size, const Field & field); ProcessSample(const Mesh & mesh, const UnsignedInteger size, const UnsignedInteger dimension); /** Partial copy constructor */ void add(const Field & field); void add(const Sample & sample); #ifndef SWIG /** Operators accessors */ void setField (const Field & field, const UnsignedInteger i); Field getField (const UnsignedInteger i) const; Sample & operator[] (const UnsignedInteger i); const Sample & operator[] (const UnsignedInteger i) const; #endif /** Virtual constructor */ virtual ProcessSample * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Time grid accessors */ RegularGrid getTimeGrid() const; /** Mesh accessors */ Mesh getMesh() const; /** Size accessor */ UnsignedInteger getSize() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Mean accessor */ Field computeMean() const; /** Temporal mean accessor */ Sample computeTemporalMean() const; /** Spatial mean accessor */ Sample computeSpatialMean() const; /** Method computeQuantilePerComponent() gives the quantile per component of the sample */ Field computeQuantilePerComponent(const Scalar prob) const; /** Get the i-th marginal sample */ ProcessSample getMarginal(const UnsignedInteger index) const; /** Get the marginal sample corresponding to indices dimensions */ ProcessSample getMarginal(const Indices & indices) const; /** Draw a marginal of the timeSerie */ Graph drawMarginal(const UnsignedInteger index = 0) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Mesh on which the ProcessSample focuses */ Mesh mesh_; /** Sample collection of all the fields */ SamplePersistentCollection data_; }; /* class ProcessSample */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PROCESSSAMPLE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/ProductCovarianceModel.hxx000066400000000000000000000060751307543307100257370ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTCOVARIANCEMODEL_HXX #define OPENTURNS_PRODUCTCOVARIANCEMODEL_HXX #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductCovarianceModel */ class OT_API ProductCovarianceModel : public CovarianceModelImplementation { CLASSNAME; public: typedef PersistentCollection CovarianceModelPersistentCollection; typedef Collection CovarianceModelCollection; /** Default constructor */ explicit ProductCovarianceModel(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ explicit ProductCovarianceModel(const CovarianceModelCollection & collection); /** Virtual copy constructor */ ProductCovarianceModel * clone() const; /** Computation of the covariance function */ using CovarianceModelImplementation::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & s, const Point & t) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** Collection accessor */ const CovarianceModelCollection & getCollection() const; /** Marginal accessor */ virtual Implementation getMarginal(const UnsignedInteger index) const; /** Scale accessor */ void setScale(const Point & scale); /** Is it a stationary covariance model ? */ virtual Bool isStationary() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: void setCollection(const CovarianceModelCollection & collection); /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; private: /** The collection of marginal models */ CovarianceModelPersistentCollection collection_; } ; /* class ProductCovarianceModel */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/RandomGenerator.hxx000066400000000000000000000045251307543307100244300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomGenerator implements methods to control the random generator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMGENERATOR_HXX #define OPENTURNS_RANDOMGENERATOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/Collection.hxx" #include "openturns/Point.hxx" #include "openturns/RandomGeneratorState.hxx" BEGIN_NAMESPACE_OPENTURNS class MersenneTwister; /** * @class RandomGenerator * * RandomGenerator implements methods to control the random generator */ class OT_API RandomGenerator { public: typedef Collection UnsignedIntegerCollection; /** Seed accessor */ static void SetSeed(const UnsignedInteger seed); /** State accessor */ static void SetState(const RandomGeneratorState & state); static RandomGeneratorState GetState(); /** Generate a pseudo-random number uniformly distributed over [0, 1[ */ static Scalar Generate(); /** Generate a pseudo-random integer uniformly distributed over [[0,...,n-1]] */ static UnsignedInteger IntegerGenerate(const UnsignedInteger n); /** Generate a pseudo-random vector of numbers uniformly distributed over [0, 1[ */ static Point Generate(const UnsignedInteger size); /** Generate a pseudo-random vector of integers uniformly distributed over [[0,...,n-1]] */ static UnsignedIntegerCollection IntegerGenerate(const UnsignedInteger size, const UnsignedInteger n); private: /** Default constructor */ RandomGenerator(); static Bool IsInitialized; static MersenneTwister Generator; }; /* class RandomGenerator */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMGENERATOR_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/RandomGeneratorState.hxx000066400000000000000000000041711307543307100254260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomGeneratorState implements methods to manage the random generator state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMGENERATORSTATE_HXX #define OPENTURNS_RANDOMGENERATORSTATE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** A couple (internal state array, picking index) */ class OT_API RandomGeneratorState : public PersistentObject { CLASSNAME; friend class RandomGenerator; public: /** Default constructor */ RandomGeneratorState(); /** Standard constructor */ RandomGeneratorState(const Indices buffer, const UnsignedInteger index); /** Virtual constructor */ RandomGeneratorState * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Buffer Acccessor */ Indices getBuffer() const; /** Index Acccessor */ UnsignedInteger getIndex() const; /** Comparison operator */ Bool operator ==(const RandomGeneratorState & other) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: Indices buffer_; UnsignedInteger index_; }; /* end class RandomGeneratorState */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMGENERATORSTATE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/RankMCovarianceModel.hxx000066400000000000000000000063021307543307100253200ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANKMCOVARIANCEMODEL_HXX #define OPENTURNS_RANKMCOVARIANCEMODEL_HXX #include "openturns/CovarianceModelImplementation.hxx" #include "openturns/Basis.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RankMCovarianceModel */ class OT_API RankMCovarianceModel : public CovarianceModelImplementation { CLASSNAME; public: /** Default constructor */ explicit RankMCovarianceModel(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ RankMCovarianceModel(const Point & variance, const Basis & basis); /** Parameters constructor */ RankMCovarianceModel(const CovarianceMatrix & covariance, const Basis & basis); /** Virtual copy constructor */ RankMCovarianceModel * clone() const; /** Computation of the covariance function */ using CovarianceModelImplementation::operator(); CovarianceMatrix operator() (const Point & s, const Point & t) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; Point getVariance() const; /** Basis accessor */ Basis getBasis() const; Basis::FunctionCollection getFunctions() const; /** Is it a stationary covariance model ? */ virtual Bool isStationary() const; /** Specific discretization method */ using CovarianceModelImplementation::discretize; CovarianceMatrix discretize(const Sample & vertices) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: void setBasis(const Basis & basis); private: /** The variance of the rank m decomposition, of dimension>0 only if the covariance is diagonal */ Point variance_; /** The covariance matrix of the decomposition, of dimension>0 only if not diagonal */ CovarianceMatrix covariance_; /** The basis of the rank m decomposition */ Basis basis_; /** The functions involved into the rank m decomposition */ Basis::FunctionPersistentCollection functions_; } ; /* class RankMCovarianceModel */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/ReverseHaltonSequence.hxx000066400000000000000000000042021307543307100256030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the ReverseHalton sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_REVERSEHALTONSEQUENCE_HXX #define OPENTURNS_REVERSEHALTONSEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ReverseHaltonSequence */ class OT_API ReverseHaltonSequence : public LowDiscrepancySequenceImplementation { CLASSNAME; public: /** Constructor with parameters */ explicit ReverseHaltonSequence(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual ReverseHaltonSequence * clone() const; /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1[ */ using LowDiscrepancySequenceImplementation::generate; Point generate() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Base for the generation of the sequence */ Unsigned64BitsIntegerPersistentCollection base_; /** Current seed into the sequence */ mutable Unsigned64BitsInteger seed_; }; /* class ReverseHaltonSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_REVERSEHALTONSEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/Sample.hxx000066400000000000000000000252241307543307100225610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class Sample implements blank free samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLE_HXX #define OPENTURNS_SAMPLE_HXX #include // for std::ostream #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Point.hxx" #include "openturns/Description.hxx" #include "openturns/Pointer.hxx" #include "openturns/SampleImplementation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Sample */ class OT_API Sample : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ public: /** Factory of Sample from CSV file */ static Sample ImportFromCSVFile(const FileName & fileName, const String & csvSeparator = ResourceMap::Get( "csv-file-separator" )); /** Factory of Sample from Text file */ static Sample ImportFromTextFile(const FileName & fileName, const String & separator = " "); /** Export Sample into CSV file */ void exportToCSVFile(const FileName & fileName, const String & csvSeparator = ResourceMap::Get( "csv-file-separator" )) const; /** Export a sample as a matrix, one row by realization, in a format suitable to exchange with R. */ String streamToRFormat() const; public: /** * Default constructor * Build a Sample of 1 dimension and with size equal to 0 */ Sample(); /** Constructor with size and dimension */ Sample(const UnsignedInteger size, const UnsignedInteger dim); /** Constructor from a Point (all elements are equal to the Point) */ Sample(const UnsignedInteger size, const Point & point); /** Partial copy constructor */ Sample(const Sample other, const UnsignedInteger first, const UnsignedInteger last); #ifndef SWIG /** Constructor from a collection of Point */ Sample(const Collection & coll); /** Constructor from a collection of Indices */ Sample(const Collection & coll); #endif /** Constructor from implementation */ Sample(const SampleImplementation & implementation); private: /** Constructor from implementation */ Sample(const Implementation & implementation); public: /** Comparison operator */ Bool operator ==(const Sample & other) const; using TypedInterfaceObject::operator ==; /** Comparison operator */ Bool operator !=(const Sample & other) const; #ifndef SWIG NSI_point operator [] (const UnsignedInteger index); NSI_const_point operator [] (const UnsignedInteger index) const; NSI_point at (const UnsignedInteger index); NSI_const_point at (const UnsignedInteger index) const; Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j); const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j) const; Scalar & at (const UnsignedInteger i, const UnsignedInteger j); const Scalar & at (const UnsignedInteger i, const UnsignedInteger j) const; void erase(SampleImplementation::iterator first, SampleImplementation::iterator last); #endif // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; /** Whether the list contains the value val */ Bool contains(const Point & val) const; void erase(const UnsignedInteger first, const UnsignedInteger last); void erase(const UnsignedInteger index); /** erase the whole sample */ void clear(); /** * String converter * This method shows human readable information on the * internal state of an Sample. It is used when streaming * the Sample or for user information. */ String __repr__() const; String __str__(const String & offset = "") const; /** Description accessor */ void setDescription(const Description & description); Description getDescription() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Size accessor */ UnsignedInteger getSize() const; /** Maximum accessor */ Point getMax() const; /** Minimum accessor */ Point getMin() const; /** Method add() appends an element to the collection */ void add(const Point & point); /** Method add() appends another sample to the collection */ void add(const Sample & sample); /** Stack the given sample to the current one */ void stack(const Sample & sample); /** * Method split() trunk the sample before the index passed as argument * and returns the remainder as new sample. This method tries its best not for doubling * memory usage. */ Sample split(const UnsignedInteger index); /** * Method computeMean() gives the mean of the sample, based on the formula * mean = sum of the elements in the sample / size of the sample */ Point computeMean() const; /** * Method computeCovariance() gives the covariance of the sample */ CovarianceMatrix computeCovariance() const; /** * Method computeStandardDeviation() gives the standard deviation of the sample */ TriangularMatrix computeStandardDeviation() const; /** * Method computeVariance() gives the variance of the sample (by component) */ Point computeVariance() const; /** * Method computeStandardDeviationPerComponent() gives the standard deviation of each component of the sample */ Point computeStandardDeviationPerComponent() const; /** * Method computePearsonCorrelation() gives the Pearson correlation matrix of the sample */ CorrelationMatrix computeLinearCorrelation() const; CorrelationMatrix computePearsonCorrelation() const; /** * Method computeSpearmanCorrelation() gives the Spearman correlation matrix of the sample */ CorrelationMatrix computeSpearmanCorrelation() const; /** * Gives the Kendall correlation matrix of the sample */ CorrelationMatrix computeKendallTau() const; /** * Method computeRange gives the range of the sample (by component) */ Point computeRange() const; /** * Method computeMedian() gives the median of the sample (by component) */ Point computeMedian() const; /** * Method computeSkewness() gives the skewness of the sample (by component) */ Point computeSkewness() const; /** * Method computeKurtosis() gives the kurtosis of the sample (by component) */ Point computeKurtosis() const; /** * Gives the centered moment of order k of the sample (by component) */ Point computeCenteredMoment(const UnsignedInteger k) const; /** * Gives the raw moment of order k of the sample (by component) */ Point computeRawMoment(const UnsignedInteger k) const; /** * Method computeQuantilePerComponent() gives the quantile per component of the sample */ Point computeQuantilePerComponent(const Scalar prob) const; /** * Method computeQuantile() gives the N-dimension quantile of the sample */ Point computeQuantile(const Scalar prob) const; /** * Get the empirical CDF of the sample */ Scalar computeEmpiricalCDF(const Point & point, const Bool tail = false) const; /** * Get the position of a point in the sample. * Returns size if the point does not belong to the sample. */ UnsignedInteger find(const Point & point) const; /** * Translate realizations in-place */ Sample & operator += (const Scalar translation); Sample & operator += (const Point & translation); Sample & operator += (const Sample & translation); Sample & operator -= (const Scalar translation); Sample & operator -= (const Point & translation); Sample & operator -= (const Sample & translation); /** Translate/scale realizations */ Sample operator + (const Scalar translation) const; Sample operator + (const Point & translation) const; Sample operator + (const Sample & translation) const; Sample operator - (const Scalar translation) const; Sample operator - (const Point & translation) const; Sample operator - (const Sample & translation) const; Sample operator * (const Scalar scaling) const; Sample operator * (const Point & scaling) const; Sample operator * (const SquareMatrix & scaling) const; Sample operator / (const Scalar scaling) const; Sample operator / (const Point & scaling) const; Sample operator / (const SquareMatrix & scaling) const; /** * Scale realizations componentwise in-place */ Sample & operator *= (const Scalar scaling); Sample & operator *= (const Point & scaling); Sample & operator *= (const SquareMatrix & scaling); Sample & operator /= (const Scalar scaling); Sample & operator /= (const Point & scaling); Sample & operator /= (const SquareMatrix & scaling); /** Ranked sample */ Sample rank() const; /** Ranked component */ Sample rank(const UnsignedInteger index) const; /** Sorted sample */ Sample sort() const; /** Sorted component */ Sample sort(const UnsignedInteger index) const; /** Sorted according a component */ Sample sortAccordingToAComponent(const UnsignedInteger index) const; /* Sorted and duplicated points removed */ Sample sortUnique() const; /** Store a sample in a temporary text file, one realization by line. Returns the file name. */ virtual String storeToTemporaryFile() const; /** Get the i-th marginal sample */ Sample getMarginal(const UnsignedInteger index) const; /** Get the marginal sample corresponding to indices dimensions */ Sample getMarginal(const Indices & indices) const; /** Returns a pointer to the underlying implementation object */ virtual ImplementationAsPersistentObject getImplementationAsPersistentObject() const; /** Sets the pointer to the underlying implementation object */ virtual void setImplementationAsPersistentObject(const ImplementationAsPersistentObject & obj); }; /* class Sample */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SampleImplementation.hxx000066400000000000000000000544531307543307100254750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class SampleImplementation implements blank free samples * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLEIMPLEMENTATION_HXX #define OPENTURNS_SAMPLEIMPLEMENTATION_HXX #include // for uint64_t #include "openturns/Point.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Collection.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS #ifndef SWIG class SampleImplementation; class NSI_const_point; /****************************************/ class OT_API NSI_point { SampleImplementation * p_nsi_; UnsignedInteger index_; UnsignedInteger dimension_; friend class NSI_const_point; friend OT_API std::ostream & operator << (std::ostream & os, const NSI_point & point); public: typedef Scalar * iterator; typedef const Scalar * const_iterator; public: NSI_point(SampleImplementation * p_nsi, const UnsignedInteger index); NSI_point & operator = (const NSI_point & rhs); template inline NSI_point & operator = (POINT rhs) { if ( getDimension() == rhs.getDimension() ) std::copy( rhs.begin(), rhs.end(), begin() ); return *this; } // NSI_point & operator = (const NSI_const_point & rhs); // NSI_point & operator = (const Point & rhs); Scalar & operator [] (const UnsignedInteger i); const Scalar & operator [] (const UnsignedInteger i) const; Scalar & at (const UnsignedInteger i); const Scalar & at (const UnsignedInteger i) const; inline Collection getCollection() const { if (dimension_ == 0) return Collection(0); return Collection( begin(), end() ); } inline operator Point () const { return getCollection(); } inline UnsignedInteger getDimension() const { return dimension_; } inline iterator begin() { return &operator[](0); } inline iterator end() { return &operator[](0) + dimension_; } inline const_iterator begin() const { return &operator[](0); } inline const_iterator end() const { return &operator[](0) + dimension_; } NSI_point & operator += (const NSI_point & other); NSI_point & operator -= (const NSI_point & other); NSI_point & operator += (const Point & other); NSI_point & operator -= (const Point & other); NSI_point & operator *= (const Scalar val); NSI_point & operator /= (const Scalar val); }; OT_API bool operator == (const NSI_point & lhs, const NSI_point & rhs); OT_API bool operator != (const NSI_point & lhs, const NSI_point & rhs); OT_API bool operator < (const NSI_point & lhs, const NSI_point & rhs); OT_API bool operator > (const NSI_point & lhs, const NSI_point & rhs); OT_API bool operator <= (const NSI_point & lhs, const NSI_point & rhs); OT_API bool operator >= (const NSI_point & lhs, const NSI_point & rhs); OT_API std::ostream & operator <<(std::ostream & os, const NSI_point & point); OT_API OStream & operator << (OStream & OS, const NSI_point & point); class OT_API NSI_const_point { const SampleImplementation * p_nsi_; UnsignedInteger index_; UnsignedInteger dimension_; friend OT_API std::ostream & operator << (std::ostream & os, const NSI_const_point & point); public: typedef Scalar * iterator; typedef const Scalar * const_iterator; public: NSI_const_point(const SampleImplementation * p_nsi, UnsignedInteger index); NSI_const_point(const NSI_point & point); const Scalar & operator [] (const UnsignedInteger i) const; const Scalar & at (const UnsignedInteger i) const; inline Collection getCollection() const { if (dimension_ == 0) return Collection(0); return Collection( begin(), end() ); } inline operator Point () const { return getCollection(); } inline UnsignedInteger getDimension() const { return dimension_; } inline const_iterator begin() const { return &operator[](0); } inline const_iterator end() const { return &operator[](0) + dimension_; } }; OT_API bool operator == (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API bool operator != (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API bool operator < (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API bool operator > (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API bool operator <= (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API bool operator >= (const NSI_const_point & lhs, const NSI_const_point & rhs); OT_API std::ostream & operator <<(std::ostream & os, const NSI_const_point & point); OT_API OStream & operator << (OStream & OS, const NSI_const_point & point); inline Point operator * (const NSI_point & point, const Scalar val) { Point res(point.getDimension(), 0.); for(UnsignedInteger i = 0; i < point.getDimension(); ++i) res[i] = point[i] * val; return res; } inline Point operator * (const Scalar val, const NSI_point & point) { return point * val; } inline Point operator * (const NSI_const_point & point, const Scalar val) { Point res(point.getDimension(), 0.); for(UnsignedInteger i = 0; i < point.getDimension(); ++i) res[i] = point[i] * val; return res; } inline Point operator * (const Scalar val, const NSI_const_point & point) { return point * val; } /****************************************/ class OT_API NSI_iterator { SampleImplementation * p_nsi_; UnsignedInteger current_; public: typedef size_t difference_type; typedef std::random_access_iterator_tag iterator_category; typedef NSI_point value_type; typedef NSI_point * pointer; typedef NSI_point reference; friend class NSI_const_iterator; friend bool operator == (const NSI_iterator & lhs, const NSI_iterator & rhs); friend bool operator < (const NSI_iterator & lhs, const NSI_iterator & rhs); friend bool operator > (const NSI_iterator & lhs, const NSI_iterator & rhs); friend difference_type operator - (const NSI_iterator & lhs, const NSI_iterator & rhs); public: NSI_iterator() : p_nsi_(0), current_(0) {} NSI_iterator(SampleImplementation & nsi, const UnsignedInteger index) : p_nsi_(&nsi), current_(index) {} inline NSI_iterator & operator ++ () { ++current_; return *this; } inline NSI_iterator & operator -- () { --current_; return *this; } inline NSI_iterator operator ++ (int) { NSI_iterator old(*this); ++current_; return old; } inline NSI_iterator operator -- (int) { NSI_iterator old(*this); --current_; return old; } inline NSI_iterator & operator += (difference_type n) { current_ += n; return *this; } inline NSI_iterator & operator -= (difference_type n) { current_ -= n; return *this; } inline NSI_iterator operator + (difference_type n) const { NSI_iterator old(*this); old.current_ += n; return old; } inline NSI_iterator operator - (difference_type n) const { NSI_iterator old(*this); old.current_ -= n; return old; } inline NSI_point operator * () const { return NSI_point(p_nsi_, current_); } }; inline bool operator == (const NSI_iterator & lhs, const NSI_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ == rhs.current_); } inline bool operator != (const NSI_iterator & lhs, const NSI_iterator & rhs) { return ! (lhs == rhs); } inline bool operator < (const NSI_iterator & lhs, const NSI_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ < rhs.current_); } inline bool operator > (const NSI_iterator & lhs, const NSI_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ > rhs.current_); } inline NSI_iterator::difference_type operator - (const NSI_iterator & lhs, const NSI_iterator & rhs) { return (lhs.current_ - rhs.current_); } class OT_API NSI_const_iterator { const SampleImplementation * p_nsi_; UnsignedInteger current_; public: typedef size_t difference_type; typedef std::random_access_iterator_tag iterator_category; typedef NSI_const_point value_type; typedef NSI_const_point * pointer; typedef NSI_const_point reference; friend bool operator == (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs); friend bool operator < (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs); friend bool operator > (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs); friend difference_type operator - (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs); public: NSI_const_iterator() : p_nsi_(0), current_(0) {} NSI_const_iterator(const SampleImplementation & nsi, const UnsignedInteger index) : p_nsi_(&nsi), current_(index) {} NSI_const_iterator(const NSI_iterator & iter) : p_nsi_(iter.p_nsi_), current_(iter.current_) {} inline NSI_const_iterator & operator ++ () { ++current_; return *this; } inline NSI_const_iterator & operator -- () { --current_; return *this; } inline NSI_const_iterator operator ++ (int) { NSI_const_iterator old(*this); ++current_; return old; } inline NSI_const_iterator operator -- (int) { NSI_const_iterator old(*this); --current_; return old; } inline NSI_const_iterator & operator += (difference_type n) { current_ += n; return *this; } inline NSI_const_iterator & operator -= (difference_type n) { current_ -= n; return *this; } inline NSI_const_iterator operator + (difference_type n) const { NSI_const_iterator old(*this); old.current_ += n; return old; } inline NSI_const_iterator operator - (difference_type n) const { NSI_const_iterator old(*this); old.current_ -= n; return old; } inline NSI_const_point operator * () const { return NSI_const_point(p_nsi_, current_); } }; inline bool operator == (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ == rhs.current_); } inline bool operator != (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs) { return ! (lhs == rhs); } inline bool operator < (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ < rhs.current_); } inline bool operator > (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs) { return (lhs.p_nsi_ == rhs.p_nsi_) && (lhs.current_ > rhs.current_); } inline NSI_const_iterator::difference_type operator - (const NSI_const_iterator & lhs, const NSI_const_iterator & rhs) { return (lhs.current_ - rhs.current_); } #endif /****************************************/ /** * @class SampleImplementation */ class OT_API SampleImplementation : public PersistentObject { CLASSNAME; friend class NSI_point; friend class NSI_const_point; friend class NSI_iterator; friend class NSI_const_iterator; friend class Factory; friend class BuildMethodMap; friend class ExportMethodMap; #ifndef SWIG friend OT_API Bool operator ==(const SampleImplementation & lhs, const SampleImplementation & rhs); #endif public: /* Some typedefs for easy reading */ typedef NSI_iterator iterator; typedef NSI_const_iterator const_iterator; typedef Scalar * data_iterator; typedef const Scalar * const_data_iterator; typedef Collection UnsignedIntegerCollection; enum ExternalFileFormat { CSV }; public: /** Factory of SampleImplementation from CSV file */ static SampleImplementation BuildFromCSVFile(const FileName & fileName, const String & csvSeparator = ResourceMap::Get( "csv-file-separator" )); /** Factory of SampleImplementation from Text file */ static SampleImplementation BuildFromTextFile(const FileName & fileName, const String & separator = " "); /** Store a sample in a temporary text file, one realization by line. Returns the file name. */ String storeToTemporaryFile() const; /** Export a sample as a matrix, one row by realization, in a format suitable to exchange with R */ String streamToRFormat() const; protected: /** * Default constructor is protected */ SampleImplementation(); public: /** Standard constructor */ SampleImplementation(const UnsignedInteger size, const UnsignedInteger dim); /** Constructor from a Point */ SampleImplementation(const UnsignedInteger size, const Point & point); #ifndef SWIG /** Constructor from a collection of Point */ SampleImplementation(const Collection & coll); /** Constructor from a collection of Indices */ SampleImplementation(const Collection & coll); /** Partial copy constructor */ SampleImplementation(const SampleImplementation & other, const_iterator first, const_iterator last); inline iterator begin() { return iterator(*this, 0); } inline iterator end() { return iterator(*this, size_); } inline const_iterator begin() const { return const_iterator(*this, 0); } inline const_iterator end() const { return const_iterator(*this, size_); } inline data_iterator data_begin() { return &data_[0]; } inline data_iterator data_end() { return &data_[0] + size_ * dimension_; } inline const_data_iterator data_begin() const { return &data_[0]; } inline const_data_iterator data_end() const { return &data_[0] + size_ * dimension_; } void erase(const UnsignedInteger first, const UnsignedInteger last); void erase(iterator first, iterator last); void clear(); /** Raw internal format accessor */ Point getData() const; void setData(const Collection & data); inline NSI_point operator [] (const UnsignedInteger index) { return NSI_point(this, index); } inline NSI_const_point operator [] (const UnsignedInteger index) const { return NSI_const_point(this, index); } void swap_points(const UnsignedInteger a, const UnsignedInteger b); void swap_range_points(const UnsignedInteger fa, const UnsignedInteger ta, const UnsignedInteger fb); #endif // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const { return &data_[0]; } UnsignedInteger __elementsize__ () const { return sizeof( Scalar ); } /** Virtual constructor */ virtual SampleImplementation * clone() const; /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** * String converter * This method shows human readable information on the * internal state of an SampleImplementation. It is used when streaming * the SampleImplementation or for user information. */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; inline Bool __eq__(const SampleImplementation & rhs) const { return (*this == rhs); } /** Whether the list contains the value val */ Bool contains(const Point & val) const; /** Size accessor */ inline UnsignedInteger getSize() const { return size_; } /** Dimension accessor */ inline UnsignedInteger getDimension() const { return dimension_; } /** Appends an element to the collection */ SampleImplementation & add(const Point & point); /** Appends another sample to the collection */ SampleImplementation & add(const SampleImplementation & sample); /** Stack a sample to the current one */ SampleImplementation & stack(const SampleImplementation & sample); /** * Gives the mean of the sample, based on the formula * mean = sum of the elements in the sample / size of the sample */ virtual Point computeMean() const; /** * Gives the covariance matrix of the sample, normalization by 1 / (size - 1) if size > 1 */ virtual CovarianceMatrix computeCovariance() const; /** * Gives the standard deviation of the sample, i.e. the square-root of the covariance matrix. */ TriangularMatrix computeStandardDeviation() const; /** * Gives the standard deviation of each component of the sample */ virtual Point computeStandardDeviationPerComponent() const; /** * Gives the Pearson correlation matrix of the sample */ virtual CorrelationMatrix computeLinearCorrelation() const; virtual CorrelationMatrix computePearsonCorrelation() const; /** * Gives the Spearman correlation matrix of the sample */ virtual CorrelationMatrix computeSpearmanCorrelation() const; /** * Gives the Kendall correlation matrix of the sample */ virtual CorrelationMatrix computeKendallTau() const; /** * Gives the range of the sample (by component) */ Point computeRange() const; /** * Gives the median of the sample (by component) */ Point computeMedian() const; /** * Gives the variance of the sample (by component) */ virtual Point computeVariance() const; /** * Gives the skewness of the sample (by component) */ virtual Point computeSkewness() const; /** * Gives the kurtosis of the sample (by component) */ virtual Point computeKurtosis() const; /** * Gives the centered moment of order k of the sample (by component) */ Point computeCenteredMoment(const UnsignedInteger k) const; /** * Gives the raw moment of order k of the sample (by component) */ Point computeRawMoment(const UnsignedInteger k) const; /** * Gives the quantile per component of the sample */ virtual Point computeQuantilePerComponent(const Scalar prob) const; /** * Gives the N-dimension quantile of the sample */ Point computeQuantile(const Scalar prob) const; /** * Get the empirical CDF of the sample */ Scalar computeEmpiricalCDF(const Point & point, const Bool tail = false) const; /** Maximum accessor */ virtual Point getMax() const; /** Minimum accessor */ virtual Point getMin() const; /** Ranked sample */ SampleImplementation rank() const; /** Ranked component */ SampleImplementation rank(const UnsignedInteger index) const; /** Sorted sample */ SampleImplementation sort() const; /** Sorted component */ SampleImplementation sort(const UnsignedInteger index) const; /** Sorted component */ SampleImplementation sortAccordingToAComponent(const UnsignedInteger index) const; /* Sorted and duplicated points removed */ SampleImplementation sortUnique() const; /** Get the i-th marginal sample */ SampleImplementation getMarginal(const UnsignedInteger index) const; /** Get the marginal sample corresponding to indices dimensions */ SampleImplementation getMarginal(const Indices & indices) const; /** * Translate realizations in-place */ SampleImplementation & operator += (const Scalar translation); SampleImplementation & operator += (const Point & translation); SampleImplementation & operator += (const SampleImplementation & translation); SampleImplementation & operator -= (const Scalar translation); SampleImplementation & operator -= (const Point & translation); SampleImplementation & operator -= (const SampleImplementation & translation); /** Translate realizations */ SampleImplementation operator + (const Scalar translation) const; SampleImplementation operator + (const Point & translation) const; SampleImplementation operator + (const SampleImplementation & translation) const; SampleImplementation operator - (const Scalar translation) const; SampleImplementation operator - (const Point & translation) const; SampleImplementation operator - (const SampleImplementation & translation) const; SampleImplementation operator * (const Scalar scaling) const; SampleImplementation operator * (const Point & scaling) const; SampleImplementation operator * (const SquareMatrix & scaling) const; SampleImplementation operator / (const Scalar scaling) const; SampleImplementation operator / (const Point & scaling) const; SampleImplementation operator / (const SquareMatrix & scaling) const; /** * Scale realizations componentwise in-place */ SampleImplementation & operator *= (const Scalar scaling); SampleImplementation & operator *= (const Point & scaling); SampleImplementation & operator *= (const SquareMatrix & scaling); SampleImplementation & operator /= (const Scalar scaling); SampleImplementation & operator /= (const Point & scaling); SampleImplementation & operator /= (const SquareMatrix & scaling); /** Save to CSV file */ void exportToCSVFile(const FileName & filename, const String & csvSeparator = ResourceMap::Get( "csv-file-separator" )) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: void translate(const Point & translation); void scale(const Point & scaling); void scale(const SquareMatrix & scaling); /** The size of the sample */ UnsignedInteger size_; /** The dimension of the sample */ UnsignedInteger dimension_; /** The collection of unwrapped points */ PersistentCollection data_; /** The description of all components */ Pointer p_description_; }; /* class SampleImplementation */ /* Comparison function */ OT_API Bool operator ==(const SampleImplementation & lhs, const SampleImplementation & rhs); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLEIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SecondOrderModel.hxx000066400000000000000000000062131307543307100245250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a second order model * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SECONDORDERMODEL_HXX #define OPENTURNS_SECONDORDERMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SecondOrderModelImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/SpectralModelImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class SecondOrderModelImplementation */ class OT_API SecondOrderModel : public TypedInterfaceObject { CLASSNAME; public: /** Default onstructor */ SecondOrderModel(); /** Copy constructors */ SecondOrderModel(const SecondOrderModelImplementation & implementation); /** Constructor from implementation */ SecondOrderModel(const Implementation & p_implementation); SecondOrderModel(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel); #ifndef SWIG /** Constructor from implementation pointer */ SecondOrderModel(SecondOrderModelImplementation * p_implementation); #endif /** Dimension accessor */ UnsignedInteger getSpatialDimension() const; UnsignedInteger getDimension() const; /** SpectralModel and CovarianceModel accessor */ SpectralModel getSpectralModel() const; CovarianceModel getCovarianceModel() const; void setModels(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel); /** Computation of the covariance matrix */ virtual CovarianceMatrix computeCovariance(const Scalar s, const Scalar t) const; virtual CovarianceMatrix computeCovariance(const Scalar tau) const; virtual CovarianceMatrix computeCovariance(const Point & s, const Point & t) const; virtual CovarianceMatrix computeCovariance(const Point & tau) const; /** Computation of the spectral density function */ virtual HermitianMatrix computeSpectralDensity(const Scalar frequency) const; /** Discretize the covariance function on a given TimeGrid */ virtual CovarianceMatrix discretize(const RegularGrid & timeGrid) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; } ; /* class SecondOrderModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SECONDORDERMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SecondOrderModelImplementation.hxx000066400000000000000000000067411307543307100274410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a second order model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SECONDORDERMODELIMPLEMENTATION_HXX #define OPENTURNS_SECONDORDERMODELIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/Pointer.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/CovarianceModelImplementation.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/SpectralModel.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class SecondOrderModelImplementation */ class OT_API SecondOrderModelImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor without parameters */ SecondOrderModelImplementation(); /** Constructor with covariance model and spectral model */ SecondOrderModelImplementation(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel); /** Virtual copy constructor */ virtual SecondOrderModelImplementation * clone() const; /** Dimension accessor */ virtual UnsignedInteger getSpatialDimension() const; virtual UnsignedInteger getDimension() const; /** Computation of the covariance matrix */ virtual CovarianceMatrix computeCovariance(const Scalar s, const Scalar t) const; virtual CovarianceMatrix computeCovariance(const Scalar tau) const; virtual CovarianceMatrix computeCovariance(const Point & s, const Point & t) const; virtual CovarianceMatrix computeCovariance(const Point & tau) const; /** SpectralModel and Covariance model accessor */ SpectralModel getSpectralModel() const; CovarianceModel getCovarianceModel() const; void setModels(const CovarianceModel & covarianceModel, const SpectralModel & spectralModel); /** Discretize the covariance function on a given TimeGrid */ virtual CovarianceMatrix discretize(const RegularGrid & timeGrid) const; /** Computation of the spectral density function */ virtual HermitianMatrix computeSpectralDensity(const Scalar frequency) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The covariance model part - must be stationary */ CovarianceModel covarianceModel_; /** The spectral model part */ SpectralModel spectralModel_; } ; /* class SecondOrderModelImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SECONDORDERMODELIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SobolSequence.hxx000066400000000000000000000062611307543307100241070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Sobol sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOBOLSEQUENCE_HXX #define OPENTURNS_SOBOLSEQUENCE_HXX #include "openturns/LowDiscrepancySequenceImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SobolSequence */ class OT_API SobolSequence : public LowDiscrepancySequenceImplementation { CLASSNAME; public: // this implementation supports dimensions up to 40 static const UnsignedInteger MaximumNumberOfDimension; // this implementation has a cycle of 2^62 = ~5e18, thanks to the use of 64 bits integers (Unsigned64BitsInteger) static const UnsignedInteger MaximumBase2Logarithm; // this value is 2^-MaximumBase2Logarithm, precomputed to speed up generation static const Scalar Epsilon; // maximum number of columns in InitialBase array = 8 static const UnsignedInteger MaximumInitialDegree; // numbers used to generate the coefficients of directionNumber_[][] each row corresponds to a component (dimension) static const UnsignedInteger InitialBase[]; // a primitive polynomial used to generate the sequence static const Unsigned64BitsInteger PrimitivePolynomial[]; public: /** Constructor with parameters */ explicit SobolSequence(const UnsignedInteger dimension = 1); /** Virtual constructor */ virtual SobolSequence * clone() const; /** Initialize the sequence */ void initialize(const UnsignedInteger dimension); /** Generate a quasi-random vector of numbers uniformly distributed over [0, 1[ */ using LowDiscrepancySequenceImplementation::generate; Point generate() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The numbers used to generate the sequence */ Unsigned64BitsIntegerPersistentCollection base_; mutable Unsigned64BitsIntegerPersistentCollection coefficients_; /** Current seed */ mutable Unsigned64BitsInteger seed_; private: /** return 2^n */ static Unsigned64BitsInteger inline power2(const UnsignedInteger n); /** Returns the position of the lowest '0' in the binary representation of an unsigned integer */ static UnsignedInteger computePositionOfLowest0Bit(const Unsigned64BitsInteger number); }; /* class SobolSequence */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOBOLSEQUENCE_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SpectralModel.hxx000066400000000000000000000061541307543307100240770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a spectral model using its spectral density function * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECTRALMODEL_HXX #define OPENTURNS_SPECTRALMODEL_HXX #include "openturns/SpectralModelImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SpectralModel */ class OT_API SpectralModel : public TypedInterfaceObject { CLASSNAME; public: typedef SpectralModelImplementation::Implementation Implementation; /** Default constructor */ SpectralModel(); /** Copy constructors */ SpectralModel(const SpectralModelImplementation & implementation); /** Constructor from implementation */ SpectralModel(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ SpectralModel(SpectralModelImplementation * p_implementation); #endif /** Dimension accessor */ UnsignedInteger getDimension() const; UnsignedInteger getSpatialDimension() const; /** Computation of the spectral density function */ virtual HermitianMatrix operator() (const Scalar frequency) const; /** Standard representative */ virtual Complex computeStandardRepresentative(const Scalar frequency) const; /** Drawing method */ virtual Graph draw(const UnsignedInteger rowIndex = 0, const UnsignedInteger columnIndex = 0, const Scalar minimumFrequency = ResourceMap::GetAsScalar("SpectralModel-DefaultMinimumFrequency"), const Scalar maximumFrequency = ResourceMap::GetAsScalar("SpectralModel-DefaultMaximumFrequency"), const UnsignedInteger frequencyNumber = ResourceMap::GetAsUnsignedInteger("SpectralModel-DefaultFrequencyNumber"), const Bool module = true) const; /** Amplitude accessor */ Point getAmplitude() const; void setAmplitude(const Point & amplitude); /** Scale accessor */ Point getScale() const; void setScale(const Point & scale); /** Spatial correlation accessor */ CorrelationMatrix getSpatialCorrelation() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class SpectralModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SpectralModelFactory.hxx000066400000000000000000000050101307543307100254150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECTRALMODELFACTORY_HXX #define OPENTURNS_SPECTRALMODELFACTORY_HXX #include "openturns/SpectralModelFactoryImplementation.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SpectralModelFactory */ class OT_API SpectralModelFactory : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SpectralModelFactory(); /** Copy constructors */ SpectralModelFactory(const SpectralModelFactoryImplementation & implementation); /** Constructor from implementation */ SpectralModelFactory(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ SpectralModelFactory(SpectralModelFactoryImplementation * p_implementation); #endif /** Virtual constructor */ virtual SpectralModelFactory * clone() const; /** FFT algorithm accessor */ FFT getFFTAlgorithm() const; /** FFT algorithm accessor */ void setFFTAlgorithm(FFT & fft); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Build a a spectral model based on a sample */ virtual SpectralModel build(const ProcessSample & sample) const; /** Build a a spectral model based on a Field */ virtual SpectralModel build(const Field & timeSerie) const; protected: }; /* class SpectralModelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALMODELFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SpectralModelFactoryImplementation.hxx000066400000000000000000000050371307543307100303340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECTRALMODELFACTORYIMPLEMENTATION_HXX #define OPENTURNS_SPECTRALMODELFACTORYIMPLEMENTATION_HXX #include "openturns/SpectralModel.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/Field.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/FFT.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SpectralModelFactoryImplementation */ class OT_API SpectralModelFactoryImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SpectralModelFactoryImplementation(); /** Virtual constructor */ virtual SpectralModelFactoryImplementation * clone() const; /** FFT algorithm accessor */ FFT getFFTAlgorithm() const; /** FFT algorithm accessor */ void setFFTAlgorithm(const FFT & fft); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Build a a spectral model based on a sample */ virtual Implementation build(const ProcessSample & sample) const; /** Build a a spectral model based on a Field */ virtual Implementation build(const Field & timeSerie) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** FFT algorithm */ FFT fftAlgorithm_; }; /* class SpectralModelFactoryImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALMODELFACTORYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SpectralModelImplementation.hxx000066400000000000000000000110051307543307100267740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build a spectral model using its spectral density function * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECTRALMODELIMPLEMENTATION_HXX #define OPENTURNS_SPECTRALMODELIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SpectralModelImplementation */ class OT_API SpectralModelImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SpectralModelImplementation(); /** Standard constructor with scale and amplitude parameters parameters */ SpectralModelImplementation(const Point & scale, const Point & amplitude); /** Standard constructor with scale, amplitude and spatial correlation parameters parameters */ SpectralModelImplementation(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation); /** Standard constructor with scale and spatial covariance parameters parameters */ SpectralModelImplementation(const Point & scale, const CovarianceMatrix & spatialCovariance); /** Virtual copy constructor */ virtual SpectralModelImplementation * clone() const; /** Dimension accessor */ UnsignedInteger getDimension() const; UnsignedInteger getSpatialDimension() const; /** Computation of the spectral density function */ virtual HermitianMatrix operator() (const Scalar frequency) const; /** Standard representative */ virtual Complex computeStandardRepresentative(const Scalar frequency) const; /** Amplitude accessor */ virtual Point getAmplitude() const; virtual void setAmplitude(const Point & amplitude); /** Scale accessor */ virtual Point getScale() const; virtual void setScale(const Point & scale); /** Spatial correlation accessor */ virtual CorrelationMatrix getSpatialCorrelation() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** Drawing method */ virtual Graph draw(const UnsignedInteger rowIndex = 0, const UnsignedInteger columnIndex = 0, const Scalar minimumFrequency = ResourceMap::GetAsScalar("SpectralModel-DefaultMinimumFrequency"), const Scalar maximumFrequency = ResourceMap::GetAsScalar("SpectralModel-DefaultMaximumFrequency"), const UnsignedInteger frequencyNumber = ResourceMap::GetAsUnsignedInteger("SpectralModel-DefaultFrequencyNumber"), const Bool module = true) const; protected: // set the covariance structure void updateSpatialCovariance(); void setDimension(const UnsignedInteger dimension); /** dimension parameter */ UnsignedInteger dimension_; /** Container for scale values */ Point scale_; /** Container for amplitude values */ Point amplitude_; /** Spatial dimension parameter */ UnsignedInteger spatialDimension_; /** Correlation matrix of the spatial dependence structure */ CorrelationMatrix spatialCorrelation_; /** Covariance matrix of the spatial dependence structure */ HermitianMatrix spatialCovariance_; /** Flag to tell if the model is diagonal */ Bool isDiagonal_; } ; /* class SpectralModelImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALMODELIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SphericalModel.hxx000066400000000000000000000060511307543307100242300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class is enables to build an exponential covariance * model, a second order model's implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPHERICALMODEL_HXX #define OPENTURNS_SPHERICALMODEL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/Point.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS class RegularGrid; /** * @class SphericalModel */ class OT_API SphericalModel : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor with spatial dimension */ explicit SphericalModel(const UnsignedInteger spatialDimension = 1); /** Standard constructor with amplitude and range parameters parameters */ SphericalModel(const Point & scale, const Point & amplitude, const Scalar radius = 1); /** Virtual copy constructor */ virtual SphericalModel * clone() const; /** Computation of the covariance function, stationary interface */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; using StationaryCovarianceModel::operator(); CovarianceMatrix operator() (const Point & tau) const; Scalar computeAsScalar(const Point & tau) const; /** Discretize the covariance function on a given TimeGrid */ using StationaryCovarianceModel::discretize; CovarianceMatrix discretize(const RegularGrid & regularGrid) const; /** Is it a stationary model ? */ Bool isStationary() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Radius accessor */ Scalar getRadius() const; void setRadius(const Scalar radius); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; private : Scalar radius_; } ; /* class SphericalModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPHERICALMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/SquaredExponential.hxx000066400000000000000000000042331307543307100251500ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SQUAREDEXPONENTIAL_HXX #define OPENTURNS_SQUAREDEXPONENTIAL_HXX #include "openturns/StationaryCovarianceModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SquaredExponential */ class OT_API SquaredExponential : public StationaryCovarianceModel { CLASSNAME; public: /** Constructor based on spatial dimension */ explicit SquaredExponential(const UnsignedInteger spatialDimension = 1); /** Parameters constructor */ SquaredExponential(const Point & scale); /** Parameters constructor */ SquaredExponential(const Point & scale, const Point & amplitude); /** Virtual copy constructor */ SquaredExponential * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::computeStandardRepresentative; Scalar computeStandardRepresentative(const Point & tau) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: } ; /* class SquaredExponential */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/StationaryCovarianceModel.hxx000066400000000000000000000070231307543307100264460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class enables to build a covariance model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STATIONARYCOVARIANCEMODEL_HXX #define OPENTURNS_STATIONARYCOVARIANCEMODEL_HXX #include "openturns/CovarianceModel.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StationaryCovarianceModel */ class OT_API StationaryCovarianceModel : public CovarianceModelImplementation { CLASSNAME; public: /** Constructor with spatial dimension */ explicit StationaryCovarianceModel(const UnsignedInteger spatialDimension = 1); /** Standard constructor with scale and amplitude parameters parameters */ StationaryCovarianceModel(const Point & scale, const Point & amplitude); /** Standard constructor with scale, amplitude and spatial correlation parameters parameters */ StationaryCovarianceModel(const Point & scale, const Point & amplitude, const CorrelationMatrix & spatialCorrelation); /** Standard constructor with scale and spatial covariance parameters parameters */ StationaryCovarianceModel(const Point & scale, const CovarianceMatrix & spatialCovariance); /** Virtual copy constructor */ virtual StationaryCovarianceModel * clone() const; /** Computation of the covariance matrix */ using CovarianceModelImplementation::operator(); virtual CovarianceMatrix operator() (const Point & s, const Point & t) const; virtual CovarianceMatrix operator() (const Point & tau) const; using CovarianceModelImplementation::computeAsScalar; virtual Scalar computeAsScalar (const Point & s, const Point & t) const; virtual Scalar computeAsScalar (const Point & tau) const; /** Computation of the covariance matrix */ using CovarianceModelImplementation::computeStandardRepresentative; virtual Scalar computeStandardRepresentative(const Point & s, const Point & t) const; virtual Scalar computeStandardRepresentative(const Point & tau) const; /** Discretize the covariance function on a given TimeGrid */ using CovarianceModelImplementation::discretize; CovarianceMatrix discretize(const RegularGrid & timeGrid) const; /** Is the underlying a stationary covariance model ? */ Bool isStationary() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); } ; /* class StationaryCovarianceModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STATIONARYCOVARIANCEMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/StationaryCovarianceModelFactory.hxx000066400000000000000000000064651307543307100300070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STATIONARYCOVARIANCEMODELFACTORY_HXX #define OPENTURNS_STATIONARYCOVARIANCEMODELFACTORY_HXX #include "openturns/CovarianceModelFactoryImplementation.hxx" #include "openturns/UserDefinedStationaryCovarianceModel.hxx" #include "openturns/WelchFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StationaryCovarianceModelFactory */ class OT_API StationaryCovarianceModelFactory : public CovarianceModelFactoryImplementation { CLASSNAME; public: /** Default constructor */ StationaryCovarianceModelFactory(const WelchFactory & factory = WelchFactory()); /** Virtual constructor */ virtual StationaryCovarianceModelFactory * clone() const; /** SpectralModelFactory accessors */ WelchFactory getSpectralModelFactory() const; void setSpectralModelFactory(const WelchFactory & factory); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Build a covariance model based on a process sample */ CovarianceModelImplementation::Implementation build(const ProcessSample & sample) const; /** Build a user defined covariance model based on a process sample */ UserDefinedStationaryCovarianceModel buildAsUserDefinedStationaryCovarianceModel(const ProcessSample & sample) const; /** Build a user defined covariance model based on a spectral model and a frequency grid */ UserDefinedStationaryCovarianceModel buildAsUserDefinedStationaryCovarianceModel(const SpectralModel & mySpectralModel, const RegularGrid & frequencyGrid) const; /** Build a user defined covariance model based on a user defined spectral model */ UserDefinedStationaryCovarianceModel buildAsUserDefinedStationaryCovarianceModel(const UserDefinedSpectralModel & mySpectralModel) const; /** Build a covariance model based on a Field */ CovarianceModelImplementation::Implementation build(const Field & timeSerie) const; /** Build a user defined covariance model based on a Field */ UserDefinedStationaryCovarianceModel buildAsUserDefinedStationaryCovarianceModel(const Field & timeSerie) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Spectral model factory */ WelchFactory spectralFactory_; }; /* class StationaryCovarianceModelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STATIONARYCOVARIANCEMODELFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/TensorizedCovarianceModel.hxx000066400000000000000000000065441307543307100264460ustar00rootroot00000000000000// -*- C++ -*- /** * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSORIZEDCOVARIANCEMODEL_HXX #define OPENTURNS_TENSORIZEDCOVARIANCEMODEL_HXX #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TensorizedCovarianceModel */ class OT_API TensorizedCovarianceModel : public CovarianceModelImplementation { CLASSNAME; public: typedef PersistentCollection CovarianceModelPersistentCollection; typedef Collection CovarianceModelCollection; /** Default constructor */ explicit TensorizedCovarianceModel(const UnsignedInteger dimension = 1); /** Parameters constructor */ explicit TensorizedCovarianceModel(const CovarianceModelCollection & collection); /** Parameters constructor */ TensorizedCovarianceModel(const CovarianceModelCollection & collection, const Point & scale); /** Virtual copy constructor */ TensorizedCovarianceModel * clone() const; /** Computation of the covariance function */ using CovarianceModelImplementation::operator(); CovarianceMatrix operator() (const Point & s, const Point & t) const; /** Gradient */ virtual Matrix partialGradient(const Point & s, const Point & t) const; /** Collection accessor */ const CovarianceModelCollection & getCollection() const; /** Marginal accessor */ virtual Implementation getMarginal(const UnsignedInteger index) const; /** Scale accessor */ void setScale(const Point & scale); /** Amplitude accessor */ void setAmplitude(const Point & amplitude); /** Is it a stationary covariance model ? */ virtual Bool isStationary() const; /** Is it a diagonal covariance model ? */ virtual Bool isDiagonal() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Parameter accessor */ virtual void setFullParameter(const Point & parameter); virtual Point getFullParameter() const; virtual Description getFullParameterDescription() const; void setCollection(const CovarianceModelCollection & collection); private: /** The collection of marginal models */ CovarianceModelPersistentCollection collection_; } ; /* class TensorizedCovarianceModel */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Base/Stat/openturns/TestResult.hxx000066400000000000000000000045211307543307100234530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TestResult implements the result of a statistical test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TESTRESULT_HXX #define OPENTURNS_TESTRESULT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Description.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TestResult * * TestResult implements the result of a statistical test */ class OT_API TestResult : public PersistentObject { CLASSNAME; public: /** Default constructor */ TestResult(); /** Parameters constructor */ TestResult(const String & type, const Bool binMeasure, const Scalar pVal, const Scalar pThreshold); /** Virtual constructor */ virtual TestResult * clone() const; /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** String converter */ String __repr__() const; /** Elements accessors */ Bool getBinaryQualityMeasure() const; Scalar getPValue() const; Scalar getThreshold() const; String getTestType() const; /** Comparison operator */ Bool operator ==(const TestResult & other) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: String testType_; Bool binaryQualityMeasure_ ; Scalar pValueThreshold_ ; Scalar pValue_ ; Description description_; } ; /* class TestResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TESTRESULT_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/TimeSeries.hxx000066400000000000000000000065011307543307100234060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class TimeSeries implements values indexed by time * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTCULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TIMESERIES_HXX #define OPENTURNS_TIMESERIES_HXX #include // for uint64_t #include // for nearbyint #include "openturns/Point.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/Sample.hxx" #include "openturns/Graph.hxx" #include "openturns/RegularGrid.hxx" #include "openturns/FieldImplementation.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TimeSeries */ class OT_API TimeSeries : public FieldImplementation { CLASSNAME; public: /** * Default constructor */ TimeSeries(); /** Standard constructor */ TimeSeries(const UnsignedInteger n, const UnsignedInteger dim); /** Constructor from a TimeGrid and a dimension */ TimeSeries(const RegularGrid & tg, const UnsignedInteger dim); /** Constructor from a TimeGrid and a sample */ TimeSeries(const RegularGrid & tg, const Sample & sample); /** Constructor from a Field */ TimeSeries(const Field & field); #ifndef SWIG /** Constructor from a collection of Point */ TimeSeries(const Collection & coll); #endif /** Virtual constructor */ TimeSeries * clone() const; /** * String converter * This method shows human readable information on the * internal state of an TimeSeries. It is used when streaming * the TimeSeries or for user information. */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; Bool operator ==(const TimeSeries & other) const; /** Append an element to the collection */ TimeSeries & add(const Point & point); /** Append a sample to the collection */ TimeSeries & add(const Sample & sample); /** Append another time series to the collection. The time grids must match (one follows the other) */ TimeSeries & add(const TimeSeries & continuer); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The start time of the time series */ Scalar start_; /** The interval of the underlying regular time grid */ Scalar timeStep_; /** The number of timestamps of the underlying regular time grid */ UnsignedInteger n_; }; /* class TimeSeries */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TIMESERIES_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/UserDefinedCovarianceModel.hxx000066400000000000000000000063171307543307100265130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class builds a spectral model using a frequency grid and a spectral function * given as a collection of Covariance Matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USERDEFINEDCOVARIANCEMODEL_HXX #define OPENTURNS_USERDEFINEDCOVARIANCEMODEL_HXX #include "openturns/CovarianceModel.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/RegularGrid.hxx" #include "openturns/Mesh.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UserDefinedCovarianceModel */ class OT_API UserDefinedCovarianceModel : public CovarianceModelImplementation { CLASSNAME; public: typedef PersistentCollection CovarianceMatrixPersistentCollection; typedef Collection CovarianceMatrixCollection; /** Default onstructor */ UserDefinedCovarianceModel(); /** Standard onstructor */ UserDefinedCovarianceModel(const Mesh & mesh, const CovarianceMatrixCollection & spectralFunction); /** Virtual copy constructor */ virtual UserDefinedCovarianceModel * clone() const; /** Computation of the covariance function */ using CovarianceModelImplementation::operator(); CovarianceMatrix operator() (const Point & s, const Point & t) const; private: CovarianceMatrix operator() (const UnsignedInteger i, const UnsignedInteger j) const; public: /** Discretize the covariance function on a given TimeGrid/Mesh */ using CovarianceModelImplementation::discretize; virtual CovarianceMatrix discretize(const Mesh & mesh) const; virtual Sample discretizeRow(const Sample & vertices, const UnsignedInteger p) const; /** Mesh accessor */ Mesh getMesh() const; /** TimeGrid accessor */ RegularGrid getTimeGrid() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Collection of covariance functions */ CovarianceMatrixPersistentCollection covarianceCollection_; /** Mesh of evaluation */ Pointer p_mesh_; } ; /* class UserDefinedCovarianceModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USERDEFINEDSPECTRALMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/UserDefinedSpectralModel.hxx000066400000000000000000000053511307543307100262130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class build a spectral model using a frequency grid and a spectral function * given as a collection of Hermitian Matrix * This is the interface class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USERDEFINEDSPECTRALMODEL_HXX #define OPENTURNS_USERDEFINEDSPECTRALMODEL_HXX #include "openturns/SpectralModel.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/RegularGrid.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UserDefinedSpectralModel */ class OT_API UserDefinedSpectralModel : public SpectralModelImplementation { CLASSNAME; public: typedef PersistentCollection HermitianMatrixPersistentCollection; typedef Collection HermitianMatrixCollection; /** Default onstructor */ UserDefinedSpectralModel(); /** Standard onstructor */ UserDefinedSpectralModel(const RegularGrid & frequencyGrid, const HermitianMatrixCollection & spectralFunction); /** Virtual copy constructor */ virtual UserDefinedSpectralModel * clone() const; /** Computation of the spectral density function */ HermitianMatrix operator()(const Scalar frequency) const; /** Frequency grid accessors */ RegularGrid getFrequencyGrid() const; void setFrequencyGrid(const RegularGrid & frequencyGrid); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** collection of spectral functions */ HermitianMatrixPersistentCollection DSPCollection_; /** Frequency grid over which the model is discretized */ RegularGrid frequencyGrid_; } ; /* class UserDefinedSpectralModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USERDEFINEDSPECTRALMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/UserDefinedStationaryCovarianceModel.hxx000066400000000000000000000054151307543307100305670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class build a stationary covariance model using a time grid and a collection of covariance matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USERDEFINEDSTATIONARYCOVARIANCEMODEL_HXX #define OPENTURNS_USERDEFINEDSTATIONARYCOVARIANCEMODEL_HXX #include "openturns/StationaryCovarianceModel.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/RegularGrid.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UserDefinedStationaryCovarianceModel */ class OT_API UserDefinedStationaryCovarianceModel : public StationaryCovarianceModel { CLASSNAME; public: typedef PersistentCollection CovarianceMatrixPersistentCollection; typedef Collection CovarianceMatrixCollection; /** Default onstructor */ UserDefinedStationaryCovarianceModel(); /** Standard onstructor */ UserDefinedStationaryCovarianceModel(const Mesh & mesh, const CovarianceMatrixCollection & covarianceCollection); /** Virtual copy constructor */ virtual UserDefinedStationaryCovarianceModel * clone() const; /** Computation of the covariance function */ using StationaryCovarianceModel::operator(); CovarianceMatrix operator() (const Point & tau) const; /** Time grid/mesh accessor */ Mesh getMesh() const; RegularGrid getTimeGrid() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Collection of covariance functions */ CovarianceMatrixPersistentCollection covarianceCollection_; /** Mesh of evaluation */ Pointer p_mesh_; } ; /* class UserDefinedStationaryCovarianceModel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USERDEFINEDSTATIONARYCOVARIANCEMODEL_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/WelchFactory.hxx000066400000000000000000000060001307543307100237210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all spectral model factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WELCHFACTORY_HXX #define OPENTURNS_WELCHFACTORY_HXX #include "openturns/SpectralModelFactoryImplementation.hxx" #include "openturns/UserDefinedSpectralModel.hxx" #include "openturns/FilteringWindows.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WelchFactory */ class OT_API WelchFactory : public SpectralModelFactoryImplementation { CLASSNAME; public: /** Default constructor */ WelchFactory(); /** Standard constructor using a filtering windows and a frequency limit*/ WelchFactory(const FilteringWindows & window, const UnsignedInteger blockNumber, const Scalar overlap = 0.5); /** Virtual constructor */ virtual WelchFactory * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** FilteringWindows accessor */ FilteringWindows getFilteringWindows() const; void setFilteringWindows(const FilteringWindows & window); /** Number of block accessor */ UnsignedInteger getBlockNumber() const; void setBlockNumber(const UnsignedInteger blockNumber); /** Overlap accessor */ Scalar getOverlap() const; void setOverlap(const Scalar overlap); /** Build a spectral model based on a sample */ Implementation build(const ProcessSample & sample) const; /** Build a spectral model based on a Field */ Implementation build(const Field & timeSerie) const; /** Build a spectral model based on a sample */ UserDefinedSpectralModel buildAsUserDefinedSpectralModel(const ProcessSample & sample) const; /** Build a spectral model based on a sample */ UserDefinedSpectralModel buildAsUserDefinedSpectralModel(const Field & timeSeries) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** FilteringWindows */ FilteringWindows window_; /** Size of a block */ UnsignedInteger blockNumber_; /** Overlap percentage for Welch method */ Scalar overlap_; }; /* class WelchFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WELCHFACTORY_HXX */ openturns-1.9/lib/src/Base/Stat/openturns/csv_parser_state.hxx000066400000000000000000000031341307543307100247030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The definition of the internal state of the CSV parser * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CSV_PARSER_STATE_HXX #define OPENTURNS_CSV_PARSER_STATE_HXX #include #include "openturns/Point.hxx" #include "openturns/Description.hxx" BEGIN_NAMESPACE_OPENTURNS struct OT_API CSVParserState { enum FieldType { NotSet, RealField, StringField }; FieldType Type; std::string St; double Val; bool errors; Point point; Description Header; FileName theFileName; CSVParserState() : Type(NotSet), St(), Val(0.), errors(false), point(), Header(), theFileName() {} }; /* end struct CSVParserState */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CSV_PARSER_STATE_HXX */ openturns-1.9/lib/src/Base/Stat/simd.h000066400000000000000000000111501307543307100176500ustar00rootroot00000000000000#ifndef TUTILS_SIMD_H #define TUTILS_SIMD_H #include /* Quick and dirty patch because SSE2, as implemented in this file, doesn't work on x86_64 architecture */ #undef __SSE2__ #ifdef __SSE2__ #include #endif #include namespace tutils { class uint64v2_t; static inline uint64v2_t operator&(uint64v2_t const& x, uint64v2_t const& y); static inline uint64v2_t operator|(uint64v2_t const& x, uint64v2_t const& y); static inline uint64v2_t operator^(uint64v2_t const& x, uint64v2_t const& y); static inline uint64v2_t operator>>(uint64v2_t const& x, int s); static inline uint64v2_t operator<<(uint64v2_t const& x, int s); static inline uint64v2_t swap64(uint64v2_t const& x); template static inline uint64v2_t rshift128(uint64v2_t const& x); template static inline uint64v2_t lshift_byte(uint64v2_t const& x); inline void simd_empty() { #ifdef __SSE2__ _mm_empty(); #endif } class uint64v2_t { public: uint64v2_t() {} uint64v2_t(uint64_t u1, uint64_t u0) { set(u1, u0); } void set(uint64_t u1, uint64_t u0) { (*this)[0] = u0; (*this)[1] = u1; } uint64_t const& operator[](std::size_t i) const { #ifdef __SSE2__ return reinterpret_cast(&vec_)[i]; #else return u64_[i]; #endif } uint64_t& operator[](std::size_t i) { #ifdef __SSE2__ return reinterpret_cast(&vec_)[i]; #else return u64_[i]; #endif } uint64v2_t& operator&=(uint64v2_t const& y) { #ifdef __SSE2__ vec_ = _mm_and_si128(vec_, y.vec_); #else u64_[0] &= y.u64_[0]; u64_[1] &= y.u64_[1]; #endif return *this; } uint64v2_t& operator|=(uint64v2_t const& y) { #ifdef __SSE2__ vec_ = _mm_or_si128(vec_, y.vec_); #else u64_[0] |= y.u64_[0]; u64_[1] |= y.u64_[1]; #endif return *this; } uint64v2_t& operator^=(uint64v2_t const& y) { #ifdef __SSE2__ vec_ = _mm_xor_si128(vec_, y.vec_); #else u64_[0] ^= y.u64_[0]; u64_[1] ^= y.u64_[1]; #endif return *this; } uint64v2_t& operator>>=(int s) { #ifdef __SSE2__ vec_ = _mm_srli_epi64(vec_, s); #else u64_[0] >>= s; u64_[1] >>= s; #endif return *this; } uint64v2_t& operator<<=(int s) { #ifdef __SSE2__ vec_ = _mm_slli_epi64(vec_, s); #else u64_[0] <<= s; u64_[1] <<= s; #endif return *this; } friend uint64v2_t operator&(uint64v2_t const& x, uint64v2_t const& y); friend uint64v2_t operator|(uint64v2_t const& x, uint64v2_t const& y); friend uint64v2_t operator^(uint64v2_t const& x, uint64v2_t const& y); friend uint64v2_t operator>>(uint64v2_t const& x, int s); friend uint64v2_t operator<<(uint64v2_t const& x, int s); friend uint64v2_t swap64(uint64v2_t const& x); template friend uint64v2_t rshift128(uint64v2_t const& x); template friend uint64v2_t lshift_byte(uint64v2_t const& x); private: #ifdef __SSE2__ __m128i vec_; uint64v2_t(__m128i const& y) : vec_(y) { } #else uint64_t u64_[2]; #endif }; uint64v2_t operator&(uint64v2_t const& x, uint64v2_t const& y) { #ifdef __SSE2__ return _mm_and_si128(x.vec_, y.vec_); #else return uint64v2_t(x[1] & y[1], x[0] & y[0]); #endif } uint64v2_t operator|(uint64v2_t const& x, uint64v2_t const& y) { #ifdef __SSE2__ return _mm_or_si128(x.vec_, y.vec_); #else return uint64v2_t(x[1] | y[1], x[0] | y[0]); #endif } uint64v2_t operator^(uint64v2_t const& x, uint64v2_t const& y) { #ifdef __SSE2__ return _mm_xor_si128(x.vec_, y.vec_); #else return uint64v2_t(x[1] ^ y[1], x[0] ^ y[0]); #endif } uint64v2_t operator>>(uint64v2_t const& x, int s) { #ifdef __SSE2__ return _mm_srli_epi64(x.vec_, s); #else return uint64v2_t(x[1] >> s, x[0] >> s); #endif } uint64v2_t operator<<(uint64v2_t const& x, int s) { #ifdef __SSE2__ return _mm_slli_epi64(x.vec_, s); #else return uint64v2_t(x[1] << s, x[0] << s); #endif } uint64v2_t swap64(uint64v2_t const& x) { #ifdef __SSE2__ return _mm_shuffle_epi32(x.vec_, 0x4e); #else return uint64v2_t(x[0], x[1]); #endif } template uint64v2_t rshift128(uint64v2_t const& x) { #ifdef __SSE2__ return _mm_srli_si128(x.vec_, S); #else int const s(8 * S); return uint64v2_t(x[1] >> s, (x[1] << (64 - s)) | (x[0] >> s)); #endif } template uint64v2_t lshift_byte(uint64v2_t const& x) { #ifdef __SSE2__ return _mm_slli_si128(x.vec_, S); #else int const s(8 * S); return uint64v2_t((x[1] << s) | (x[0] >> (64 - s)), x[0] << s); #endif } } #endif openturns-1.9/lib/src/Base/Type/000077500000000000000000000000001307543307100165535ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Type/BipartiteGraph.cxx000066400000000000000000000053541307543307100222130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BipartiteGraph defines a graph with two sets of nodes (red and black) * and links from one set to the other only. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/BipartiteGraph.hxx" #include "openturns/Cloud.hxx" #include "openturns/Curve.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BipartiteGraph); static const Factory Factory_BipartiteGraph; /* Accessor to the red nodes */ Indices BipartiteGraph::getRedNodes() const { return Indices(getSize()); } /* Accessor to the black nodes */ Indices BipartiteGraph::getBlackNodes() const { Indices blackNodes(0); for (UnsignedInteger i = 0; i < getSize(); ++i) blackNodes.add((*this)[i]); std::sort(blackNodes.begin(), blackNodes.end()); Indices::iterator it = std::unique(blackNodes.begin(), blackNodes.end()); blackNodes.resize(std::distance(blackNodes.begin(), it)); return blackNodes; } /* Draw the bipartite graph */ Graph BipartiteGraph::draw() const { Graph graph("Bipartite graph", "", "", true, "topright"); for (UnsignedInteger i = 0; i < getSize(); ++i) { Point redPoint(2); redPoint[0] = i; redPoint[1] = 2.0; for (UnsignedInteger j = 0; j < (*this)[i].getSize(); ++j) { Point blackPoint(2); blackPoint[0] = (*this)[i][j]; blackPoint[1] = 1.0; // First, the link Sample data(2, 2); data[0] = redPoint; data[1] = blackPoint; Curve curve(data); curve.setColor("blue"); graph.add(curve); Cloud cloud(Sample(1, blackPoint)); cloud.setColor("black"); cloud.setPointStyle("fcircle"); graph.add(cloud); } Cloud cloud(Sample(1, redPoint)); cloud.setColor("red"); cloud.setPointStyle("fcircle"); graph.add(cloud); } Point bb(graph.getBoundingBox()); bb[0] -= 0.5; bb[1] += 0.5; bb[2] -= 0.5; bb[3] += 0.5; graph.setBoundingBox(bb); return graph; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/CMakeLists.txt000066400000000000000000000040771307543307100213230ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (BipartiteGraph.cxx) ot_add_source_file (Description.cxx) ot_add_source_file (Point.cxx) ot_add_source_file (PointWithDescription.cxx) ot_add_source_file (MatrixImplementation.cxx) ot_add_source_file (Matrix.cxx) ot_add_source_file (Tensor.cxx) ot_add_source_file (SymmetricTensor.cxx) ot_add_source_file (IdentityMatrix.cxx) ot_add_source_file (SquareMatrix.cxx) ot_add_source_file (TriangularMatrix.cxx) ot_add_source_file (SymmetricMatrix.cxx) ot_add_source_file (TensorImplementation.cxx) ot_add_source_file (ComplexTensorImplementation.cxx) ot_add_source_file (ComplexTensor.cxx) ot_add_source_file (Indices.cxx) ot_add_source_file (ComplexMatrixImplementation.cxx) ot_add_source_file (ComplexMatrix.cxx) ot_add_source_file (HermitianMatrix.cxx) ot_add_source_file (SquareComplexMatrix.cxx) ot_add_source_file (TriangularComplexMatrix.cxx) ot_install_header_file (BipartiteGraph.hxx) ot_install_header_file (PointWithDescription.hxx) ot_install_header_file (OTType.hxx) ot_install_header_file (PersistentCollection.hxx) ot_install_header_file (Point.hxx) ot_install_header_file (Collection.hxx) ot_install_header_file (TensorImplementation.hxx) ot_install_header_file (ComplexTensorImplementation.hxx) ot_install_header_file (ComplexTensor.hxx) ot_install_header_file (SymmetricMatrix.hxx) ot_install_header_file (SymmetricTensor.hxx) ot_install_header_file (Indices.hxx) ot_install_header_file (Cache.hxx) ot_install_header_file (IdentityMatrix.hxx) ot_install_header_file (Tensor.hxx) ot_install_header_file (MatrixImplementation.hxx) ot_install_header_file (Description.hxx) ot_install_header_file (Matrix.hxx) ot_install_header_file (SquareMatrix.hxx) ot_install_header_file (ComplexMatrixImplementation.hxx) ot_install_header_file (ComplexMatrix.hxx) ot_install_header_file (HermitianMatrix.hxx) ot_install_header_file (SquareComplexMatrix.hxx) ot_install_header_file (TriangularMatrix.hxx) ot_install_header_file (TriangularComplexMatrix.hxx) openturns-1.9/lib/src/Base/Type/ComplexMatrix.cxx000066400000000000000000000261331307543307100221000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexMatrix implements the classical mathematical matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComplexMatrix.hxx" #include "openturns/ComplexMatrixImplementation.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/TriangularComplexMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComplexMatrix); /* Default constructor */ ComplexMatrix::ComplexMatrix() : TypedInterfaceObject(new ComplexMatrixImplementation()) { // Nothing to do } /* Constructor with size (rowDim and colDim) */ /* The matrix is made up of a collection of rowDim*colDim elements */ /* The matrix is viewed as a set of column vectors read one after another */ ComplexMatrix::ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim) : TypedInterfaceObject(new ComplexMatrixImplementation(rowDim, colDim)) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ ComplexMatrix::ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ComplexCollection & elementsValues) : TypedInterfaceObject(new ComplexMatrixImplementation(rowDim, colDim, elementsValues)) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ ComplexMatrix::ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ScalarCollection & elementsValues) : TypedInterfaceObject(new ComplexMatrixImplementation(rowDim, colDim, elementsValues)) { // Nothing to do } /* Constructor with implementation */ ComplexMatrix::ComplexMatrix(const Implementation & i) : TypedInterfaceObject(i) { // Nothing to do } /* Constructor with implementation */ ComplexMatrix::ComplexMatrix(const ComplexMatrixImplementation & i) : TypedInterfaceObject(i.clone()) { // Nothing to do } /* Constructor from hermitian matrix */ ComplexMatrix::ComplexMatrix(const HermitianMatrix & hermitian) : TypedInterfaceObject(hermitian.getImplementation()) { getImplementation()->hermitianize(); } /* Resolution of a linear system */ ComplexMatrix::ComplexCollection ComplexMatrix::solveLinearSystem(const ComplexCollection & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemRect(b, keepIntact); } ComplexMatrix ComplexMatrix::solveLinearSystem(const ComplexMatrix & b, const Bool keepIntact) { return Implementation(getImplementation()->solveLinearSystemRect(*(b.getImplementation()), keepIntact).clone()); } /* Set small elements to zero */ ComplexMatrix ComplexMatrix::clean(const Scalar threshold) const { return Implementation(getImplementation()->clean(threshold).clone()); } /* String converter */ String ComplexMatrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } String ComplexMatrix::__str__(const String & offset) const { OSS oss(false); const UnsignedInteger rows = getNbRows(); const UnsignedInteger cols = getNbColumns(); if ( (rows >= ResourceMap::GetAsUnsignedInteger("Matrix-size-visible-in-str-from")) || (cols >= ResourceMap::GetAsUnsignedInteger("Matrix-size-visible-in-str-from")) ) oss << rows << "x" << cols << "\n"; size_t lwidth = 0; size_t rwidth = 0; for( UnsignedInteger i = 0; i < rows; ++i ) for( UnsignedInteger j = 0; j < cols; ++j ) { String st = OSS() << (*this)(i, j); size_t dotpos = st.find( '.' ); lwidth = std::max( lwidth, (dotpos != String::npos) ? dotpos : st.size() ); rwidth = std::max( rwidth, (dotpos != String::npos) ? st.size() - dotpos : 0 ); } const char * bracket = "["; const char * newline = ""; for( UnsignedInteger i = 0; i < rows; ++i, newline = "\n", bracket = " " ) { oss << newline << offset << bracket << "[ "; const char * sep = ""; for( UnsignedInteger j = 0; j < cols; ++j, sep = " " ) { String st = OSS() << (*this)(i, j); size_t dotpos = st.find( '.' ); oss << sep << String( lwidth - ((dotpos != String::npos) ? dotpos : st.size()), ' ' ) << st << String( rwidth - ((dotpos != String::npos) ? st.size() - dotpos : 0), ' ' ); } oss << " ]"; } oss << "]"; return oss; } /* Get the dimensions of the matrix : number of rows */ UnsignedInteger ComplexMatrix::getNbRows() const { return getImplementation()->getNbRows(); } /* Get the dimensions of the matrix : number of columns */ UnsignedInteger ComplexMatrix::getNbColumns() const { return getImplementation()->getNbColumns(); } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Complex & ComplexMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { copyOnWrite(); return (*getImplementation())(i, j); } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Complex & ComplexMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (*getImplementation())(i, j); } /* ComplexMatrix transpose */ ComplexMatrix ComplexMatrix::transpose () const { return Implementation(getImplementation()->transpose().clone()); } /* ComplexMatrix conjugate */ ComplexMatrix ComplexMatrix::conjugate () const { return Implementation(getImplementation()->conjugate().clone()); } /* ComplexMatrix conjugate and transpose */ ComplexMatrix ComplexMatrix::conjugateTranspose () const { return Implementation(getImplementation()->conjugateTranspose().clone()); } /* Get the real part of the matrix */ Matrix ComplexMatrix::real() const { return Matrix::Implementation(getImplementation()->realRect().clone()); } /* Get the imaginary part of the matrix */ Matrix ComplexMatrix::imag() const { return Matrix::Implementation(getImplementation()->imagRect().clone()); } /* ComplexMatrix additions (must have the same dimensions) */ ComplexMatrix ComplexMatrix::operator+ (const ComplexMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* ComplexMatrix additions */ ComplexMatrix ComplexMatrix::operator+ (const Matrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* ComplexMatrix substractions (must have the same dimensions) */ ComplexMatrix ComplexMatrix::operator- (const ComplexMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* ComplexMatrix substractions */ ComplexMatrix ComplexMatrix::operator- (const Matrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* ComplexMatrix multiplications (must have consistent dimensions) */ ComplexMatrix ComplexMatrix::operator* (const ComplexMatrix & m) const { return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } /* ComplexMatrix multiplications (must have consistent dimensions) */ ComplexMatrix ComplexMatrix::operator* (const HermitianMatrix & m) const { return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'R') ).conjugateTranspose().clone()); } /* ComplexMatrix multiplications */ ComplexMatrix ComplexMatrix::operator* (const TriangularComplexMatrix & m) const { char uplo('L'); if (!m.isLowerTriangular()) uplo = 'R'; return Implementation(m.getImplementation()->triangularProd(*(getImplementation()), 'R', uplo).clone()); } /* ComplexMatrix multiplication - Matrix on right */ ComplexMatrix ComplexMatrix::operator* (const Matrix & m) const { return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } /* ComplexMatrix multiplication - SymmetricMatrix on right */ ComplexMatrix ComplexMatrix::operator* (const SymmetricMatrix & m) const { m.checkSymmetry(); return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } /* ComplexMatrix multiplication - SymmetricMatrix on right */ ComplexMatrix ComplexMatrix::operator* (const IdentityMatrix & m) const { return (*this); } /* Multiplication with a ScalarCollection */ ComplexMatrix::ComplexCollection ComplexMatrix::operator* (const ScalarCollection & collection) const { return getImplementation()->genVectProd(collection) ; } /* Multiplication with a Point */ ComplexMatrix::ComplexCollection ComplexMatrix::operator* (const Point & point) const { return getImplementation()->genVectProd(point) ; } /* Multiplication with a ComplexCollection */ ComplexMatrix::ComplexCollection ComplexMatrix::operator* (const ComplexCollection & collection) const { return getImplementation()->genVectProd(collection) ; } /* Multiplication with a Complex */ ComplexMatrix ComplexMatrix::operator* (const Complex s) const { return Implementation((*getImplementation() * s ).clone()); } /* Division by a Complex*/ ComplexMatrix ComplexMatrix::operator/ (const Complex s) const { return Implementation((*getImplementation() / s ).clone()); } /* Empty returns true if there is no element in the matrix */ Bool ComplexMatrix::isEmpty() const { return getImplementation()->isEmpty() ; } /* Comparison operator */ Bool ComplexMatrix::operator == (const ComplexMatrix & rhs) const { const ComplexMatrix &lhs(*this); return (*(lhs.getImplementation()) == *(rhs.getImplementation()) ); } const Complex* ComplexMatrix::__baseaddress__() const { return getImplementation()->__baseaddress__(); } UnsignedInteger ComplexMatrix::__elementsize__() const { return getImplementation()->__elementsize__(); } UnsignedInteger ComplexMatrix::__stride__(UnsignedInteger dim) const { return getImplementation()->__stride__(dim); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/ComplexMatrixImplementation.cxx000066400000000000000000001054061307543307100250070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexMatrixImplementation implements the classical mathematicalComplexMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ComplexMatrixImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Lapack.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComplexMatrixImplementation); static const Factory Factory_ComplexMatrixImplementation; /* Default constructor */ ComplexMatrixImplementation::ComplexMatrixImplementation() : PersistentCollection() , nbRows_(0) , nbColumns_(0) { // Nothing to do } /* Constructor with size (rowDim and colDim) */ /* The ComplexMatrixImplementation is made up of a collection of rowDim*colDim elements */ /* The ComplexMatrixImplementation is viewed as a set of column vectors read one after another */ ComplexMatrixImplementation::ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim) : PersistentCollection(rowDim * colDim, Complex(0.0, 0.0)) , nbRows_(rowDim) , nbColumns_(colDim) { // Nothing to do } /* Constructor from external collection */ ComplexMatrixImplementation::ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const Collection & elementsValues) : PersistentCollection(rowDim * colDim, Complex(0.0, 0.0)) , nbRows_(rowDim) , nbColumns_(colDim) { const UnsignedInteger matrixSize = std::min(rowDim * colDim, elementsValues.getSize()); for(UnsignedInteger i = 0; i < matrixSize; ++i) operator[](i) = elementsValues[i]; } /* Constructor from external collection */ ComplexMatrixImplementation::ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const Collection & elementsValues) : PersistentCollection(rowDim * colDim, Complex(0.0, 0.0)) , nbRows_(rowDim) , nbColumns_(colDim) { const UnsignedInteger matrixSize = std::min(rowDim * colDim, elementsValues.getSize()); // Implicit cast from Scalar into Complex for(UnsignedInteger i = 0; i < matrixSize; ++i) operator[](i) = elementsValues[i]; } ComplexMatrixImplementation::ComplexMatrixImplementation(const MatrixImplementation & matrix) : PersistentCollection(matrix.getNbRows() * matrix.getNbColumns(), 0.0) , nbRows_(matrix.getNbRows()) , nbColumns_(matrix.getNbColumns()) { // Copy from matrix const UnsignedInteger matrixSize = nbRows_ * nbColumns_; for(UnsignedInteger i = 0; i < matrixSize; ++i) operator[](i) = matrix[i]; } /* Virtual constructor */ ComplexMatrixImplementation * ComplexMatrixImplementation::clone() const { return new ComplexMatrixImplementation(*this); } /* Resolution of a linear system : rectangular matrix * MX = b, M is an mxn matrix, b is an mxq matrix and * X is an nxq matrix */ ComplexMatrixImplementation ComplexMatrixImplementation::solveLinearSystemRect (const ComplexMatrixImplementation & b, const Bool keepIntact) { if (nbRows_ != b.nbRows_) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbRows_ == 0) || (nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; int m(nbRows_); int n(nbColumns_); // B is an extended copy of b, it must be large enought to store the solution, see LAPACK documentation int p(std::max(m, n)); int q(b.nbColumns_); ComplexMatrixImplementation B(p, q); for(UnsignedInteger j = 0; j < static_cast(q); ++j) for (UnsignedInteger i = 0; i < static_cast(m); ++i) B(i, j) = b(i, j); int nrhs(q); int lwork(-1); ComplexCollection work(1); Point rwork(2 * n); int info; std::vector jpiv(n); double rcond(ResourceMap::GetAsScalar("Matrix-DefaultSmallPivot")); int rank; ComplexMatrixImplementation Q; if (keepIntact) Q = ComplexMatrixImplementation(*this); ComplexMatrixImplementation & A = keepIntact ? Q : *this; // (int *m, int *n, int *nrhs, std::complex *A, int *lda, std::complex *B, int *ldb, int *jpvt, double *rcond, int *rank, std::complex *work, int *lwork, double *rwork, int *info) zgelsy_(&m, &n, &nrhs, &A[0], &m, &B[0], &p, &jpiv[0], &rcond, &rank, &work[0], &lwork, &rwork[0], &info); lwork = static_cast(std::real(work[0])); work = ComplexCollection(lwork); zgelsy_(&m, &n, &nrhs, &A[0], &m, &B[0], &p, &jpiv[0], &rcond, &rank, &work[0], &lwork, &rwork[0], &info); ComplexMatrixImplementation result(n, q); for(UnsignedInteger j = 0; j < static_cast(q); ++j) for (UnsignedInteger i = 0; i < static_cast(n); ++i) result(i, j) = B(i, j); return result; } /* Resolution of a linear system : rectangular matrix * Mx = b, M is an mxn matrix, b is an m-dimensional * vector and x is an n-dimensional vector */ ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::solveLinearSystemRect (const ComplexCollection & b, const Bool keepIntact) { const UnsignedInteger m = b.getSize(); if (nbRows_ != m) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << m << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; // Solve the matrix linear system // A ComplexMatrixImplementation is also a collection of Complex, so it is automatically converted into a ComplexCollection return solveLinearSystemRect(ComplexMatrixImplementation(m, 1, b), keepIntact); } /* Set small elements to zero */ ComplexMatrixImplementation ComplexMatrixImplementation::clean(const Scalar threshold) const { // Nothing to do for nonpositive threshold if (threshold <= 0.0) return *this; ComplexMatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) { const Complex value((*this)[convertPosition(i, j)]); Scalar realPart = std::real(value); Scalar imagPart = std::imag(value); if (std::abs(realPart) < 0.5 * threshold) realPart = 0.0; else realPart = threshold * round(realPart / threshold); if (std::abs(imagPart) < 0.5 * threshold) imagPart = 0.0; else imagPart = threshold * round(imagPart / threshold); result(i, j) = Complex(realPart, imagPart); } return result; } /* Set small elements to zero */ ComplexMatrixImplementation ComplexMatrixImplementation::cleanHerm(const Scalar threshold) const { hermitianize(); return clean(threshold); } /* String converter */ String ComplexMatrixImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " rows=" << nbRows_ << " columns=" << nbColumns_ << " values=" << PersistentCollection::__repr__(); } String ComplexMatrixImplementation::__str__(const String & offset) const { OSS oss(false); // Special case for empty matrix if (nbRows_ == 0 || nbColumns_ == 0) return oss; // Special case for matrix with 1 row if (nbRows_ == 1) { oss << offset << "("; for (UnsignedInteger j = 0; j < nbColumns_; ++j) oss << (j > 0 ? " " : "") << operator()(0, j); oss << ")" << Os::GetEndOfLine(); return oss; } // Array for the widths of the different components Collection widthColumns(nbColumns_, 0); // First loop across the values to determine the optimal width for printing for (UnsignedInteger i = 0; i < nbRows_; ++i) { for (UnsignedInteger j = 0; j < nbColumns_; ++j) widthColumns[j] = std::max(widthColumns[j], static_cast(String(OSS() << operator()(i, j)).length())); } // Second loop for (UnsignedInteger i = 0; i < nbRows_; ++i) { oss << (i == 0 ? "/" : (i == nbRows_ - 1 ? "\\" : "|")); for (UnsignedInteger j = 0; j < nbColumns_; ++j) oss << (j > 0 ? " " : "") << std::setw(widthColumns[j]) << operator()(i, j); if (i == 0) oss << "\\" << Os::GetEndOfLine(); else if (i == nbRows_ - 1) oss << "/"; else oss << "|" << Os::GetEndOfLine(); } return oss; } /* Operator () gives access to the elements of theComplexMatrixImplementation (to modify these elements) */ /* The element of theComplexMatrixImplementation is designated by its row number i and its column number j */ /* the first element of theComplexMatrixImplementation is m(0,0) */ Complex & ComplexMatrixImplementation::operator () (const UnsignedInteger i, const UnsignedInteger j) { if (i >= nbRows_) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than row dim (" << nbRows_ << ")"; if (j >= nbColumns_) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than column dim (" << nbColumns_ << ")"; return operator[](convertPosition(i, j)); } /* Operator () gives access to the elements of theComplexMatrixImplementation (read only) */ /* The element of theComplexMatrixImplementation is designated by its row number i and its column number j */ const Complex & ComplexMatrixImplementation::operator () (const UnsignedInteger i, const UnsignedInteger j) const { if (i >= nbRows_) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than row dim (" << nbRows_ << ")"; if (j >= nbColumns_) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than column dim (" << nbColumns_ << ")"; return operator[](convertPosition(i, j)); } /* Get the dimensions of the ComplexMatrixImplementation : number of rows */ UnsignedInteger ComplexMatrixImplementation::getNbRows() const { return nbRows_; } /* Get the dimensions of the ComplexMatrixImplementation : number of columns */ UnsignedInteger ComplexMatrixImplementation::getNbColumns() const { return nbColumns_; } /* Get the dimensions of the ComplexMatrixImplementation : dimension (square matrix : nbRows_) */ UnsignedInteger ComplexMatrixImplementation::getDimension() const { return nbRows_; } /* ComplexMatrixImplementation transpose */ ComplexMatrixImplementation ComplexMatrixImplementation::transpose () const { ComplexMatrixImplementation trans(nbColumns_, nbRows_); // The source matrix is accessed columnwise in the natural order for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) trans(j, i) = operator()(i, j); return trans; } /* ComplexMatrixImplementation transpose * for hermitian matrices. It reduces to copy the upper triangle into * the lower triangle, which means to conjugate the lower triangle */ ComplexMatrixImplementation ComplexMatrixImplementation::transposeHerm () const { ComplexMatrixImplementation result(nbColumns_, nbRows_); // The lower triangle of the source matrix is accessed columnwise in the natural order for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = j; i < nbRows_; ++i) result(i, j) = std::conj(operator()(i, j)); return result; } /* ComplexMatrixImplementation conjugate */ ComplexMatrixImplementation ComplexMatrixImplementation::conjugate () const { ComplexMatrixImplementation result(nbRows_, nbColumns_); // The source matrix is accessed columnwise in the natural order for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) result(i, j) = std::conj(operator()(i, j)); return result; } /* ComplexMatrixImplementation conjugate triangular */ ComplexMatrixImplementation ComplexMatrixImplementation::conjugateHerm () const { return transposeHerm(); } /* ComplexMatrixImplementation conjugateTranspose */ ComplexMatrixImplementation ComplexMatrixImplementation::conjugateTranspose () const { ComplexMatrixImplementation result(nbColumns_, nbRows_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) result(j, i) = std::conj(operator()(i, j)); return result; } /* Hermitianize ComplexMatrixImplementation in case it is an hermitian matrix (stored as a triangular matrix) */ void ComplexMatrixImplementation::hermitianize() const { ComplexMatrixImplementation *refThis(const_cast(this)); // The lower triangle of the source matrix is accessed columnwise in the natural order for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = j + 1; i < nbRows_; ++i) { const Complex value(operator[](convertPosition(i, j))); if (std::abs(value.imag()) == 0.0) refThis->operator[](convertPosition(j, i)) = value.real(); else refThis->operator[](convertPosition(j, i)) = std::conj(value); } } /* Get the real part of the matrix */ MatrixImplementation ComplexMatrixImplementation::realRect() const { MatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) result(i, j) = (*this)(i, j).real(); return result; } MatrixImplementation ComplexMatrixImplementation::realSym() const { MatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = j; i < nbRows_; ++i) result(i, j) = (*this)(i, j).real(); return result; } /* Get the imaginary part of the matrix */ MatrixImplementation ComplexMatrixImplementation::imagRect() const { MatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) result(i, j) = (*this)(i, j).imag(); return result; } MatrixImplementation ComplexMatrixImplementation::imagSym() const { MatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = j; i < nbRows_; ++i) result(i, j) = (*this)(i, j).imag(); return result; } /* Empty returns true if there is no element in theComplexMatrixImplementation */ Bool ComplexMatrixImplementation::isEmpty() const { return ((nbRows_ == 0) || (nbColumns_ == 0) || (PersistentCollection::isEmpty())); } /* Returns true if triangular lower or upper */ Bool ComplexMatrixImplementation::isTriangular(Bool lower) const { if ( nbRows_ == nbColumns_ ) { for ( UnsignedInteger j = 1; j < nbColumns_; ++ j ) for ( UnsignedInteger i = 0; i < j; ++ i ) if ( std::abs( (*this)[lower ? convertPosition(i, j) : convertPosition(j, i)] ) > 0.0 ) return false; return true; } else return false; } /* ComplexMatrixImplementation addition (must have the same dimensions) */ ComplexMatrixImplementation ComplexMatrixImplementation::operator + (const ComplexMatrixImplementation & matrix) const { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot add matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation ComplexMatrixImplementation result(matrix); int size(nbRows_ * nbColumns_); Complex alpha(1.0, 0.0); int one = 1; // Lapack routine zaxpy_(&size, &alpha, const_cast*>(&((*this)[0])), &one, &result[0], &one); return result; } /* ComplexMatrixImplementation addition (must have the same dimensions) */ ComplexMatrixImplementation ComplexMatrixImplementation::operator + (const MatrixImplementation & matrix) const { if ((nbRows_ != matrix.getNbRows() ) || (nbColumns_ != matrix.getNbColumns() )) throw InvalidDimensionException(HERE) << "Cannot add matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation ComplexMatrixImplementation result(matrix); int size(nbRows_ * nbColumns_); Complex alpha(1.0, 0.0); int one = 1; // Lapack routine zaxpy_(&size, &alpha, const_cast*>(&((*this)[0])), &one, &result[0], &one); return result; } /* ComplexMatrixImplementation substraction (must have the same dimensions) */ ComplexMatrixImplementation ComplexMatrixImplementation::operator - (const ComplexMatrixImplementation & matrix) const { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot substract matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation ComplexMatrixImplementation result(*this); int size(nbRows_ * nbColumns_); Complex alpha(-1.0, 0.0); int one = 1; zaxpy_(&size, &alpha, const_cast*>(&(matrix)[0]), &one, &result[0], &one); return result; } /* ComplexMatrixImplementation substraction (must have the same dimensions) */ ComplexMatrixImplementation ComplexMatrixImplementation::operator - (const MatrixImplementation & matrix) const { return operator - (ComplexMatrixImplementation(matrix)); } /* Multiplication with a Complex */ ComplexMatrixImplementation ComplexMatrixImplementation::operator * (const Complex s) const { // Check if s is null if (std::abs(s) == 0.0 ) return ComplexMatrixImplementation(nbRows_, nbColumns_); if ((nbRows_ == 0) || (nbColumns_ == 0)) return *this; ComplexMatrixImplementation scalprod(*this); // Complex alpha(s); int one(1); int n_(nbRows_ * nbColumns_); // Lapack routine zscal_(&n_, &alpha, &scalprod[0], &one); return scalprod; } /* Division by a Scalar*/ ComplexMatrixImplementation ComplexMatrixImplementation::operator / (const Complex s) const { if (std::abs(s) == 0) throw InvalidArgumentException(HERE) ; return operator * (1.0 / s); } /* ComplexMatrixImplementation multiplications (must have consistent dimensions) */ ComplexMatrixImplementation ComplexMatrixImplementation::genProd(const ComplexMatrixImplementation & matrix) const { if (nbColumns_ != matrix.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in complex matrix/ complex matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_; ComplexMatrixImplementation mult(nbRows_, matrix.nbColumns_); if ((nbRows_ == 0) || (nbColumns_ == 0) || (matrix.nbColumns_ == 0)) return mult; char transa('N'); char transb('N'); int m(nbRows_); int k(nbColumns_); int n(matrix.nbColumns_); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int ltransa(1); int ltransb(1); //Lapack routine zgemm_(&transa, &transb, &m, &n, &k, &alpha, const_cast*>(&((*this)[0])), &m, const_cast*>(&(matrix[0])), &k, &beta, &mult[0], &m, <ransa, <ransb); return mult; } ComplexMatrixImplementation ComplexMatrixImplementation::symProd (const ComplexMatrixImplementation & matrix, const char hermSide) const { if (nbColumns_ != matrix.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_; ComplexMatrixImplementation mult(nbRows_, matrix.nbColumns_); if ((nbRows_ == 0) || (nbColumns_ == 0) || (matrix.nbColumns_ == 0)) return mult; char side(hermSide); char uplo('L'); int m(nbRows_); int k(nbColumns_); int n(matrix.nbColumns_); Complex alpha(1.0); Complex beta(0.0); int lside(1); int luplo(1); // Lapack routine zsymm_(&side, &uplo, &m, &n, &alpha, const_cast*>(&((*this)[0])), &m, const_cast*>(&(matrix[0])), &k, &beta, &mult[0], &m, &lside, &luplo); return mult; } ComplexMatrixImplementation ComplexMatrixImplementation::hermProd(const ComplexMatrixImplementation & matrix, const char hermSide) const { if (nbColumns_ != matrix.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_; ComplexMatrixImplementation mult(nbRows_, matrix.nbColumns_); if ((nbRows_ == 0) || (nbColumns_ == 0) || (matrix.nbColumns_ == 0)) return mult; char side(hermSide); char uplo('L'); int m(nbRows_); int k(nbColumns_); int n(matrix.nbColumns_); Complex alpha(1.0); Complex beta(0.0); int lside(1); int luplo(1); // Lapack routine if (hermSide == 'L') zhemm_(&side, &uplo, &m, &n, &alpha, const_cast*>(&((*this)[0])), &m, const_cast*>(&(matrix[0])), &k, &beta, &mult[0], &m, &lside, &luplo); else zhemm_(&side, &uplo, &m, &n, &alpha, const_cast*>(&(matrix[0])), &k, const_cast*>(&((*this)[0])), &m, &beta, &mult[0], &m, &lside, &luplo); return mult; } ComplexMatrixImplementation ComplexMatrixImplementation::triangularProd(const ComplexMatrixImplementation & matrix, const char triangularSide, const char upperLower) const { if (nbColumns_ != matrix.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_; ComplexMatrixImplementation mult(matrix); if ((nbRows_ == 0) || (nbColumns_ == 0) || (matrix.nbColumns_ == 0)) return mult; char side(triangularSide); int lside(1); char uplo(upperLower); int luplo(1); char trans('N'); int ltrans(1); char diag('N'); int ldiag(1); int m(nbRows_); int n(matrix.nbColumns_); Complex alpha(1.0); // Lapack routine ztrmm_(&side, &uplo, &trans, &diag, &m, &n, &alpha , const_cast*>(&((*this)[0])), &m, const_cast*>(&(mult[0])), &m, &lside , &luplo, <rans, &ldiag); return mult; } /* Integer power, general matrix */ ComplexMatrixImplementation ComplexMatrixImplementation::genPower(const UnsignedInteger n) const { Bool first = true; UnsignedInteger exponent = n; ComplexMatrixImplementation y; ComplexMatrixImplementation z(*this); while (exponent > 0) { // t is the right bit of exponent const UnsignedInteger t = exponent % 2; // remove last bit from exponent exponent /= 2; // if right bit is 1 if (t != 0) { // if it is the rightmost bit equals to 1 if (first) { first = false; y = z; } else y = y.genProd(z); // if no more bit to consider if (exponent == 0) return y; } // Square the contribution z = z.genProd(z); } return y; } /* Integer power, symmetric matrix */ ComplexMatrixImplementation ComplexMatrixImplementation::symPower(const UnsignedInteger n) const { Bool first = true; UnsignedInteger exponent = n; ComplexMatrixImplementation y; ComplexMatrixImplementation z(*this); while (exponent > 0) { // t is the right bit of exponent const UnsignedInteger t = exponent % 2; // remove last bit from exponent exponent /= 2; // if right bit is 1 if (t != 0) { // if it is the rightmost bit equals to 1 if (first) { first = false; y = z; } else y = y.symProd(z, 'L'); // if no more bit to consider if (exponent == 0) return y; } // Square the contribution z = z.symProd(z, 'L'); } return y; } /* Integer power, hermitian matrix */ ComplexMatrixImplementation ComplexMatrixImplementation::hermPower(const UnsignedInteger n) const { Bool first = true; UnsignedInteger exponent = n; ComplexMatrixImplementation y; ComplexMatrixImplementation z(*this); while (exponent > 0) { // t is the right bit of exponent const UnsignedInteger t = exponent % 2; // remove last bit from exponent exponent /= 2; // if right bit is 1 if (t != 0) { // if it is the rightmost bit equals to 1 if (first) { first = false; y = z; } else y = y.hermProd(z, 'L'); // if no more bit to consider if (exponent == 0) return y; } // Square the contribution z = z.hermProd(z, 'L'); } return y; } /* Multiplications with a ComplexCollection */ ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::genVectProd(const ComplexCollection & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); if ((nbRows_ == 0) || (nbColumns_ == 0)) return prod; char trans('N'); int m_(nbRows_); int n_(nbColumns_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int ltrans(1); zgemv_(&trans, &m_, &n_, &alpha, const_cast*>(&((*this)[0])), &m_, const_cast*>(&(pt[0])), &one, &beta, &prod[0], &one, <rans); return prod; } /* Multiplications with a ScalarCollection */ ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::genVectProd(const ScalarCollection & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); if ((nbRows_ == 0) || (nbColumns_ == 0)) return prod; ComplexCollection copyPoint(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) copyPoint[i] = pt[i]; char trans('N'); int m_(nbRows_); int n_(nbColumns_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int ltrans(1); zgemv_(&trans, &m_, &n_, &alpha, const_cast*>(&((*this)[0])), &m_, const_cast*>(&(copyPoint[0])), &one, &beta, &prod[0], &one, <rans); return prod; } /* Multiplications with a Point */ ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::genVectProd(const Point & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); if ((nbRows_ == 0) || (nbColumns_ == 0)) return prod; ComplexCollection copyPoint(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) copyPoint[i] = pt[i]; char trans('N'); int m_(nbRows_); int n_(nbColumns_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int ltrans(1); zgemv_(&trans, &m_, &n_, &alpha, const_cast*>(&((*this)[0])), &m_, const_cast*>(&(copyPoint[0])), &one, &beta, &prod[0], &one, <rans); return prod; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::hermVectProd(const ComplexCollection & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); // In this case, nbRows_ == nbColumns_ if (nbRows_ == 0) return prod; char uplo('L'); int n(nbRows_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int luplo(1); zhemv_(&uplo, &n, &alpha, const_cast*>(&((*this)[0])), &n, const_cast*>(&(pt[0])), &one, &beta, &prod[0], &one, &luplo); return prod; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::hermVectProd(const ScalarCollection & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); // In this case, nbRows_ == nbColumns_ if (nbRows_ == 0) return prod; ComplexCollection copyPoint(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) copyPoint[i] = pt[i]; char uplo('L'); int n(nbRows_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int luplo(1); zhemv_(&uplo, &n, &alpha, const_cast*>(&((*this)[0])), &n, const_cast*>(&(copyPoint[0])), &one, &beta, &prod[0], &one, &luplo); return prod; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::hermVectProd(const Point & pt) const { if (nbColumns_ != pt.getSize() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; ComplexCollection prod(nbRows_); // In this case, nbRows_ == nbColumns_ if (nbRows_ == 0) return prod; ComplexCollection copyPoint(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) copyPoint[i] = pt[i]; char uplo('L'); int n(nbRows_); int one(1); Complex alpha(1.0, 0.0); Complex beta(0.0, 0.0); int luplo(1); zhemv_(&uplo, &n, &alpha, const_cast*>(&((*this)[0])), &n, const_cast*>(&(copyPoint[0])), &one, &beta, &prod[0], &one, &luplo); return prod; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::triangularVectProd(const ComplexCollection & pt, const char side) const { // Product matrix vector using Blas // side tells if the triangular matrix is "Lower" or "Upper" char uplo(side); int luplo(1); // trans tells if the matrix is transposed or not char trans('N'); int ltrans(1); // diag tells if M is unit diagonal or not char diag('N'); int ldiag(1); // the dimension of the matrix int n(nbRows_); // leading dimension of M int lda(nbRows_); int one(1); ComplexCollection x(pt); ztrmv_(&uplo, &trans, &diag, &n, const_cast*>(&((*this)[0])), &lda, const_cast*>(&(x[0])), &one, &luplo, <rans, &ldiag); return x; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::triangularVectProd(const ScalarCollection & pt, const char side) const { char uplo(side); int luplo(1); // trans tells if the matrix is transposed or not char trans('N'); int ltrans(1); // diag tells if M is unit diagonal or not char diag('N'); int ldiag(1); // the dimension of the matrix int n(nbRows_); // leading dimension of M int lda(nbRows_); int one(1); ComplexCollection x(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) x[i] = pt[i]; ztrmv_(&uplo, &trans, &diag, &n, const_cast*>(&((*this)[0])), &lda, const_cast*>(&(x[0])), &one, &luplo, <rans, &ldiag); return x; } ComplexMatrixImplementation::ComplexCollection ComplexMatrixImplementation::triangularVectProd(const Point & pt, const char side) const { char uplo(side); int luplo(1); // trans tells if the matrix is transposed or not char trans('N'); int ltrans(1); // diag tells if M is unit diagonal or not char diag('N'); int ldiag(1); // the dimension of the matrix int n(nbRows_); // leading dimension of M int lda(nbRows_); int one(1); ComplexCollection x(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) x[i] = pt[i]; ztrmv_(&uplo, &trans, &diag, &n, const_cast*>(&((*this)[0])), &lda, const_cast*>(&(x[0])), &one, &luplo, <rans, &ldiag); return x; } Bool ComplexMatrixImplementation::isHermitian() const { if ( nbRows_ == nbColumns_ ) { for ( UnsignedInteger i = 1; i < nbRows_; ++ i ) for ( UnsignedInteger j = 0; j < i; ++ j ) if ( operator[](convertPosition(i, j)) != std::conj(operator[](convertPosition(j, i))) ) return false; return true; } else return false; } /* Check if the matrix is HPD */ Bool ComplexMatrixImplementation::isHermitianPositiveDefinite(const Bool keepIntact) { // Exception for null dimension if (getDimension() == 0) throw InvalidDimensionException(HERE) << "Cannot check the hermitian definite positiveness of an empty matrix"; int info; int n(nbRows_); char uplo('L'); int luplo(1); if (keepIntact) { ComplexMatrixImplementation A(*this); zpotrf_(&uplo, &n, &A[0], &n, &info, &luplo); if (info != 0) throw InternalException(HERE) << "Lapack ZPOTRF: error code=" << info; } else { zpotrf_(&uplo, &n, &(*this)[0], &n, &info, &luplo); if (info != 0) throw InternalException(HERE) << "Lapack ZPOTRF: error code=" << info; } return (info == 0) ; } /* Build the Cholesky factorization of the hermitian matrix */ ComplexMatrixImplementation ComplexMatrixImplementation::computeCholesky(const Bool keepIntact) { // Exception for null dimension if (getDimension() == 0) throw InvalidDimensionException(HERE) << "Cannot compute the Cholesky decomposition of an empty matrix"; int info; int n(nbRows_); char uplo('L'); int luplo(1); ComplexMatrixImplementation Q; if (keepIntact) Q = ComplexMatrixImplementation(*this); ComplexMatrixImplementation & A = keepIntact ? Q : *this; zpotrf_(&uplo, &n, &A[0], &n, &info, &luplo); if (info != 0) throw InternalException(HERE) << "Lapack ZPOTRF: error code=" << info; for (UnsignedInteger j = 0; j < (UnsignedInteger)(n); ++j) for (UnsignedInteger i = 0; i < (UnsignedInteger)(j); ++i) A(i, j) = 0.0;//Complex(0.0, 0.0); // Check return code from Lapack if(info != 0) throw InvalidArgumentException(HERE) << " Error - Matrix is not positive definite" ; return A; } /* Comparison operator */ Bool ComplexMatrixImplementation::operator == (const ComplexMatrixImplementation & rhs) const { const ComplexMatrixImplementation &lhs(*this); Bool equality = true; if (&lhs != &rhs) // Not the same object { const Collection & refLhs(static_cast >(lhs)); const Collection & refRhs(static_cast >(rhs)); equality = ( lhs.nbRows_ == rhs.nbRows_ && lhs.nbColumns_ == rhs.nbColumns_ && refLhs == refRhs); } return equality; } /* Method save() stores the object through the StorageManager */ void ComplexMatrixImplementation::save(Advocate & adv) const { PersistentCollection::save(adv); adv.saveAttribute( "nbRows_", nbRows_); adv.saveAttribute( "nbColumns_", nbColumns_); } /* Method load() reloads the object from the StorageManager */ void ComplexMatrixImplementation::load(Advocate & adv) { PersistentCollection::load(adv); adv.loadAttribute( "nbRows_", nbRows_); adv.loadAttribute( "nbColumns_", nbColumns_); } const Complex* ComplexMatrixImplementation::__baseaddress__() const { return &(*this)[0]; } UnsignedInteger ComplexMatrixImplementation::__elementsize__() const { return sizeof(Complex); } UnsignedInteger ComplexMatrixImplementation::__stride__(UnsignedInteger dim) const { UnsignedInteger stride = __elementsize__(); if (dim > 0) stride *= nbRows_; return stride; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/ComplexTensor.cxx000066400000000000000000000155151307543307100221100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexTensor implements the classical mathematical tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComplexTensor.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComplexTensor); /* Default constructor */ ComplexTensor::ComplexTensor() : TypedInterfaceObject(new ComplexTensorImplementation()) { // Nothing to do } /* Constructor with size (rowDim, colDim and sheetDim) */ /* The tensor is made up of a collection of rowDim*colDim*sheetDim elements */ /* The tensor is viewed as a set of column vectors read one after another, one sheet after another */ ComplexTensor::ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim) : TypedInterfaceObject(new ComplexTensorImplementation(rowDim, colDim, sheetDim)) { // Nothing to do } /* Constructor from external collection */ ComplexTensor::ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues) : TypedInterfaceObject(new ComplexTensorImplementation(rowDim, colDim, sheetDim, elementsValues)) { // Nothing to do } /* Constructor with implementation */ ComplexTensor::ComplexTensor(const Implementation & i) : TypedInterfaceObject(i) { // Nothing to do } /* Set small elements to zero */ ComplexTensor ComplexTensor::clean(const Scalar & threshold) const { return Pointer(getImplementation()->clean(threshold).clone()); } /* String converter */ String ComplexTensor::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String ComplexTensor::__str__(const String & offset) const { OSS oss(false); const UnsignedInteger rows = getNbRows(); const UnsignedInteger cols = getNbColumns(); const UnsignedInteger sheets = getNbSheets(); if ( (rows >= ResourceMap::GetAsUnsignedInteger("ComplexTensor-size-visible-in-str-from")) || (cols >= ResourceMap::GetAsUnsignedInteger("ComplexTensor-size-visible-in-str-from")) || (sheets >= ResourceMap::GetAsUnsignedInteger("ComplexTensor-size-visible-in-str-from")) ) oss << rows << "x" << cols << "x" << sheets << "\n"; size_t lwidth = 0; size_t rwidth = 0; for( UnsignedInteger k = 0; k < sheets; ++k ) for( UnsignedInteger i = 0; i < rows; ++i ) for( UnsignedInteger j = 0; j < cols; ++j ) { String st = OSS() << (*this)(i, j, k); size_t dotpos = st.find( '.' ); lwidth = std::max( lwidth, (dotpos != String::npos) ? dotpos : st.size() ); rwidth = std::max( rwidth, (dotpos != String::npos) ? st.size() - dotpos : 0 ); } const char * nl = ""; for( UnsignedInteger k = 0; k < sheets; ++k, nl = "\n" ) { oss << nl << "sheet #" << k << "\n"; const char * bracket = "["; const char * newline = ""; for( UnsignedInteger i = 0; i < rows; ++i, newline = "\n", bracket = " " ) { oss << newline << offset << bracket << "[ "; const char * sep = ""; for( UnsignedInteger j = 0; j < cols; ++j, sep = " " ) { String st = OSS() << (*this)(i, j, k); size_t dotpos = st.find( '.' ); oss << sep << String( lwidth - ((dotpos != String::npos) ? dotpos : st.size()), ' ' ) << (*this)(i, j, k) << String( rwidth - ((dotpos != String::npos) ? st.size() - dotpos : 0), ' ' ); } oss << " ]"; } oss << "]"; } return oss; } /* Operator () gives access to the elements of the tensor (to modify these elements) */ /* The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Complex & ComplexTensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) { copyOnWrite(); return (*getImplementation())(i, j, k); } /* Operator () gives access to the elements of the tensor (read only) */ /* The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Complex & ComplexTensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { return (*getImplementation())(i, j, k); } /* getSheet returns the sheet specified by its sheet number k */ ComplexMatrix ComplexTensor::getSheet(const UnsignedInteger k) const { return getImplementation()->getSheet(k); } /* setSheet sets matrix m as the sheet specified by its sheet number k */ void ComplexTensor::setSheet(const UnsignedInteger k, const ComplexMatrix & m) { copyOnWrite(); getImplementation()->setSheet(k, m); } /* Get the dimensions of the tensor : number of rows */ UnsignedInteger ComplexTensor::getNbRows() const { return getImplementation()->getNbRows(); } /* Get the dimensions of the ComplexTensor : number of columns */ UnsignedInteger ComplexTensor::getNbColumns() const { return getImplementation()->getNbColumns(); } /* Get the dimensions of the ComplexTensor : number of sheets */ UnsignedInteger ComplexTensor::getNbSheets() const { return getImplementation()->getNbSheets(); } /* Empty returns true if there is no element in the ComplexTensor */ Bool ComplexTensor::isEmpty() const { return getImplementation()->isEmpty(); } /* Comparison operator */ Bool ComplexTensor::operator == (const ComplexTensor & rhs) const { const ComplexTensor &lhs(*this); return (*(lhs.getImplementation()) == *(rhs.getImplementation()) ); } const Complex* ComplexTensor::__baseaddress__() const { return getImplementation()->__baseaddress__(); } UnsignedInteger ComplexTensor::__elementsize__() const { return getImplementation()->__elementsize__(); } UnsignedInteger ComplexTensor::__stride__(UnsignedInteger dim) const { return getImplementation()->__stride__(dim); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/ComplexTensorImplementation.cxx000066400000000000000000000236671307543307100250250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexTensorImplementation implements the Tensor classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ComplexTensorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComplexTensorImplementation); static const Factory Factory_ComplexTensorImplementation; /* Default constructor */ ComplexTensorImplementation::ComplexTensorImplementation() : PersistentCollection() , nbRows_(0) , nbColumns_(0) , nbSheets_(0) { // Nothing to do } /* Constructor with size (rowDim, colDim and sheetDim) */ /* The ComplexTensorImplementation is made up of a collection of rowDim*colDim*sheetDim elements */ /* The ComplexTensorImplementation is viewed as a set of column vectors read one after another, one sheet after another */ ComplexTensorImplementation::ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim) : PersistentCollection(rowDim * colDim * sheetDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) , nbSheets_(sheetDim) { // Nothing to do } /* Constructor from external collection */ ComplexTensorImplementation::ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues) : PersistentCollection(rowDim * colDim * sheetDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) , nbSheets_(sheetDim) { const UnsignedInteger tensorSize = std::min(rowDim * colDim * sheetDim, elementsValues.getSize()); std::copy(elementsValues.begin(), elementsValues.begin() + tensorSize, begin()); // memcpy(&(*this)[0], &elementsValues[0], tensorSize * sizeof(Complex)); } /* Virtual constructor */ ComplexTensorImplementation * ComplexTensorImplementation::clone() const { return new ComplexTensorImplementation(*this); } /* Set small elements to zero */ ComplexTensorImplementation ComplexTensorImplementation::clean(const Scalar threshold) const { // Nothing to do for nonpositive threshold if (threshold <= 0.0) return *this; ComplexTensorImplementation result(nbRows_, nbColumns_, nbSheets_); for (UnsignedInteger k = 0; k < nbSheets_; ++k) result.setSheet(k, getSheet(k).clean(threshold)); return result; } /* String converter */ String ComplexTensorImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " rows=" << getNbRows() << " columns=" << getNbColumns() << " sheets=" << getNbSheets() << " values=" << PersistentCollection::__repr__(); } String ComplexTensorImplementation::__str__(const String & offset) const { OSS oss(false); for (UnsignedInteger k = 0; k < getNbSheets(); ++k) { oss << (k == 0 ? "" : Os::GetEndOfLine()) << offset << "sheet " << k << ":" << Os::GetEndOfLine(); oss << offset << getSheet(k).__str__(offset) << Os::GetEndOfLine(); } return oss; } /* Get the dimensions of the ComplexTensorImplementation : number of rows */ UnsignedInteger ComplexTensorImplementation::getNbRows() const { return nbRows_; } /* Get the dimensions of the ComplexTensorImplementation : number of columns */ UnsignedInteger ComplexTensorImplementation::getNbColumns() const { return nbColumns_; } /* Get the dimensions of the ComplexTensorImplementation : number of sheets */ UnsignedInteger ComplexTensorImplementation::getNbSheets() const { return nbSheets_; } /* Operator () gives access to the elements of the ComplexTensorImplementation (to modify these elements) */ /* The element of the ComplexTensorImplementation is designated by its row number i, its column number j and its sheet number k */ /* the first element of the ComplexTensorImplementation is t(0,0,0) */ Complex & ComplexTensorImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) { if ((i >= nbRows_) || (j >= nbColumns_) || (k >= nbSheets_)) throw InvalidDimensionException(HERE); return (*this)[this->convertPosition(i, j, k)]; } /* Operator () gives access to the elements of the ComplexTensorImplementation (read only) */ /* The element of the ComplexTensorImplementation is designated by its row number i, its column number j and its sheet number k */ const Complex & ComplexTensorImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { if ((i >= nbRows_) || (j >= nbColumns_) || (k >= nbSheets_)) throw InvalidDimensionException(HERE); return (*this)[this->convertPosition(i, j, k)]; } /* getSheet returns the sheet specified by its sheet number k */ ComplexMatrix ComplexTensorImplementation::getSheet(const UnsignedInteger k) const { if (k >= nbSheets_) throw InvalidDimensionException(HERE); ComplexMatrixImplementation sheet(nbRows_, nbColumns_); const UnsignedInteger shift = convertPosition(0, 0, k); std::copy(begin() + shift, begin() + shift + nbRows_ * nbColumns_, sheet.begin()); // memcpy( &sheet[0], &(*this)[this->convertPosition(0, 0, k)], nbRows_ * nbColumns_ * sizeof(Complex) ); return sheet; } /* setSheet sets matrix m as the sheet specified by its sheet number k */ void ComplexTensorImplementation::setSheet(const UnsignedInteger k, const ComplexMatrix & m) { if (k >= nbSheets_) throw InvalidDimensionException(HERE); if (m.getNbRows() != nbRows_) throw InvalidDimensionException(HERE); if (m.getNbColumns() != nbColumns_) throw InvalidDimensionException(HERE); std::copy(m.getImplementation()->begin(), m.getImplementation()->end(), begin() + convertPosition(0, 0, k)); // memcpy( &(*this)[this->convertPosition(0, 0, k)], &m.getImplementation()->operator[](0), nbRows_ * nbColumns_ * sizeof(Complex) ); } /* getSheetSym returns the hermitian sheet specified by its sheet number k */ HermitianMatrix ComplexTensorImplementation::getSheetSym(const UnsignedInteger k) const { Pointer sheet(getSheet(k).getImplementation()); // sheet->hermitianize(); return sheet; } /* setSheetSym sets hermitian matrix m as the sheet specified by its sheet number k */ void ComplexTensorImplementation::setSheetSym(const UnsignedInteger k, const HermitianMatrix & m) { Pointer sheet(m.getImplementation()); // sheet->hermitianize(); setSheet(k, m); } /* Empty returns true if there is no element in the ComplexTensorImplementation */ Bool ComplexTensorImplementation::isEmpty() const { return ((nbRows_ == 0) || (nbColumns_ == 0) || (nbSheets_ == 0) || (PersistentCollection::isEmpty())) ; } /* Check for symmetry */ Bool ComplexTensorImplementation::isSymmetric() const { if (nbColumns_ != nbRows_) return false; for (UnsignedInteger k = 0; k < nbSheets_; ++k) for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) if((*this)[this->convertPosition(i, j, k)] != (*this)[this->convertPosition(j, i, k)]) return false; return true; } /* Symmetrize ComplexMatrixImplementation in case it is a hermitian matrix (stored as a triangular matrix) */ void ComplexTensorImplementation::hermitianize() const { ComplexTensorImplementation & refThis = * const_cast(this); for (UnsignedInteger k = 0; k < nbSheets_; ++k) for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) refThis[this->convertPosition(i, j, k)] = std::conj( (*this)[this->convertPosition(j, i, k)] ); } /* Comparison operator */ Bool ComplexTensorImplementation::operator == (const ComplexTensorImplementation & rhs) const { const ComplexTensorImplementation &lhs(*this); Bool equality = true; if (&lhs != &rhs) // Not the same object { const PersistentCollection & refLhs = static_cast >(lhs); const PersistentCollection & refRhs = static_cast >(rhs); equality = ( lhs.nbRows_ == rhs.nbRows_ && lhs.nbColumns_ == rhs.nbColumns_ && lhs.nbSheets_ == rhs.nbSheets_ && refLhs == refRhs); } return equality; } /* Method save() stores the object through the StorageManager */ void ComplexTensorImplementation::save(Advocate & adv) const { PersistentCollection::save(adv); adv.saveAttribute("nbRows_", nbRows_); adv.saveAttribute("nbColumns_", nbColumns_); adv.saveAttribute("nbSheets_", nbSheets_); } /* Method load() reloads the object from the StorageManager */ void ComplexTensorImplementation::load(Advocate & adv) { PersistentCollection::load(adv); adv.loadAttribute("nbRows_", nbRows_); adv.loadAttribute("nbColumns_", nbColumns_); adv.loadAttribute("nbSheets_", nbSheets_); } const Complex* ComplexTensorImplementation::__baseaddress__() const { return &(*this)[0]; } UnsignedInteger ComplexTensorImplementation::__elementsize__() const { return sizeof(Complex); } UnsignedInteger ComplexTensorImplementation::__stride__(UnsignedInteger dim) const { UnsignedInteger stride = __elementsize__(); if (dim > 0) stride *= nbRows_; if (dim > 1) stride *= nbColumns_; if (dim > 2) stride *= nbSheets_; return stride; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/Description.cxx000066400000000000000000000047331307543307100215710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Description is a collection of string for human usage * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Description.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Description); static const Factory > Factory_PersistentCollection_String; static const Factory Factory_Description; /* Default constructor */ Description::Description() : InternalType() { // Nothing to do } /* Constructor with size */ Description::Description(const UnsignedInteger size) : InternalType(size) { // Nothing to do } /* Constructor with size and default value */ Description::Description(const UnsignedInteger size, const String & value) : InternalType(size, value) { // Nothing to do } /* Constructor with size and default value */ Description::Description(const Collection & coll) : InternalType(coll) { // Nothing to do } /* Check if the content is blank */ Bool Description::isBlank() const { for (UnsignedInteger i = 0; i < getSize(); ++i) { const UnsignedInteger length = (*this)[i].size(); for (UnsignedInteger j = 0; j < length; ++j) { const char c = (*this)[i][j]; if (c != ' ' && c != '\t') return false; } } return true; } /* Destructor */ Description::~Description() { // Nothing to do } void Description::sort() { std::sort(begin(), end()); } Description Description::BuildDefault(const UnsignedInteger dimension, const String & prefix) { Description description(dimension); for (UnsignedInteger k = 0; k < dimension; ++k) description[k] = String(OSS() << prefix << k); return description; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/HermitianMatrix.cxx000066400000000000000000000211331307543307100224040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief HermitianMatrix implements the classical mathematical hermitian matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HermitianMatrix.hxx" #include "openturns/TriangularComplexMatrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HermitianMatrix); /* Default constructor */ HermitianMatrix::HermitianMatrix() : SquareComplexMatrix(0) , hasBeenHermitianized_(false) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ HermitianMatrix::HermitianMatrix(const UnsignedInteger dimension) : SquareComplexMatrix(dimension, dimension) , hasBeenHermitianized_(false) { // Nothing to do } /* Constructor with implementation */ HermitianMatrix::HermitianMatrix(const Implementation & i) : SquareComplexMatrix(i) , hasBeenHermitianized_(false) { // Nothing to do } /* Copy constructor, added to solve glitches with inheritance */ HermitianMatrix::HermitianMatrix(const HermitianMatrix & h) : SquareComplexMatrix(static_cast(h)) , hasBeenHermitianized_(false) { // Nothing to do } /* String converter */ String HermitianMatrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } String HermitianMatrix::__str__(const String & offset) const { checkHermitian(); return SquareComplexMatrix::clean(0.0).__str__(offset); } /* Get the dimension of the matrix */ UnsignedInteger HermitianMatrix::getDimension() const { return getImplementation()->getDimension(); } /* HermitianMatrix transpose */ HermitianMatrix HermitianMatrix::transpose () const { // Quick return for empty or scalar HermitianMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->transposeHerm().clone()); } /* HermitianMatrix conjugate */ HermitianMatrix HermitianMatrix::conjugate () const { // Quick return for empty or scalar HermitianMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->conjugateHerm().clone()); } /* HermitianMatrix conjugate */ HermitianMatrix HermitianMatrix::conjugateTranspose () const { return (*this); } //* Get the real part of the matrix */ SymmetricMatrix HermitianMatrix::real() const { return SymmetricMatrix::Implementation(getImplementation()->realSym().clone()); } /* Get the imaginary part of the matrix */ SquareMatrix HermitianMatrix::imag() const { return SquareMatrix::Implementation(getImplementation()->imagRect().clone()); } /* Check if the internal representation is really symmetric */ void HermitianMatrix::checkHermitian() const { if (!hasBeenHermitianized_) { getImplementation()->hermitianize(); hasBeenHermitianized_ = true; } } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Complex & HermitianMatrix::operator () (const UnsignedInteger i, const UnsignedInteger j) { if (i < j) throw InvalidArgumentException(HERE) << "Error: only the lower triangle of an Hermitian matrix can be filled directly."; copyOnWrite(); hasBeenHermitianized_ = false; return (*getImplementation())(i, j); } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Complex HermitianMatrix::operator () (const UnsignedInteger i, const UnsignedInteger j) const { return (i >= j) ? (*getImplementation())(i, j) : std::conj((*getImplementation())(j, i)) ; } /* HermitianMatrix additions */ HermitianMatrix HermitianMatrix::operator + (const HermitianMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* complexMatrix additions */ SquareComplexMatrix HermitianMatrix::operator + (const SquareComplexMatrix & m) const { checkHermitian(); return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* ComplexMatrix substractions */ HermitianMatrix HermitianMatrix::operator - (const HermitianMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* HermitianMatrix substractions */ SquareComplexMatrix HermitianMatrix::operator - (const SquareComplexMatrix & m) const { checkHermitian(); return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* ComplexMatrix multiplications */ ComplexMatrix HermitianMatrix::operator * (const ComplexMatrix & m) const { return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'L') ).clone()); } /* ComplexMatrix multiplications */ SquareComplexMatrix HermitianMatrix::operator * (const SquareComplexMatrix & m) const { return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'L') ).clone()); } /* HermitianMatrix multiplications */ SquareComplexMatrix HermitianMatrix::operator * (const HermitianMatrix & m) const { m.checkHermitian(); return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'L') ).clone()); } /* TriangularComplexMatrix multiplications */ SquareComplexMatrix HermitianMatrix::operator * (const TriangularComplexMatrix & m) const { char uplo('L'); if (!m.isLowerTriangular()) uplo = 'R'; return Implementation((m.getImplementation()->triangularProd(*(this->getImplementation()), 'R', uplo ) ).clone()); } /* Matrix multiplications */ ComplexMatrix HermitianMatrix::operator * (const Matrix & m) const { return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'L') ).clone()); } /* Real SquareMatrix multiplications */ SquareComplexMatrix HermitianMatrix::operator * (const SquareMatrix & m) const { return Implementation(getImplementation()->hermProd(*(m.getImplementation()), 'L').clone()); } /* RealSymmetricMatrix multiplications */ SquareComplexMatrix HermitianMatrix::operator * (const SymmetricMatrix & m) const { m.checkSymmetry(); return Implementation((getImplementation()->hermProd(*(m.getImplementation()), 'L') ).clone()); } /* IdentityMatrix multiplications */ HermitianMatrix HermitianMatrix::operator * (const IdentityMatrix & m) const { return (*this); } /* Multiplication with a ComplexCollection (must have consistent dimensions) */ HermitianMatrix::ComplexCollection HermitianMatrix::operator * (const ComplexCollection & pt) const { return getImplementation()->hermVectProd(pt) ; } /* Multiplication with a ScalarCollection (must have consistent dimensions) */ HermitianMatrix::ComplexCollection HermitianMatrix::operator * (const ScalarCollection & pt) const { return getImplementation()->hermVectProd(pt) ; } /* Multiplication with a Point (must have consistent dimensions) */ HermitianMatrix::ComplexCollection HermitianMatrix::operator * (const Point & pt) const { return getImplementation()->hermVectProd(pt) ; } /* Multiplication with a Complex */ HermitianMatrix HermitianMatrix::operator * (const Complex s) const { return Implementation((*getImplementation() * s ).clone()); } /* Division by a Complex*/ HermitianMatrix HermitianMatrix::operator / (const Complex s) const { return Implementation((*getImplementation() / s ).clone()); } /* HermitianMatrix integer power */ HermitianMatrix HermitianMatrix::power(const UnsignedInteger n) const { return Implementation(getImplementation()->hermPower(n).clone()); } /* Build the Cholesky factorization of the hermitian matrix */ TriangularComplexMatrix HermitianMatrix::computeCholesky(const Bool keepIntact) { return TriangularComplexMatrix(Implementation(getImplementation()->computeCholesky(keepIntact).clone()), true); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/IdentityMatrix.cxx000066400000000000000000000103501307543307100222540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class IdentityMatrix implements identity matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IdentityMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IdentityMatrix); /* Default constructor */ IdentityMatrix::IdentityMatrix() : CorrelationMatrix(0) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ IdentityMatrix::IdentityMatrix(const UnsignedInteger dim) : CorrelationMatrix(dim) { // Nothing to do } /* Constructor with implementation */ IdentityMatrix::IdentityMatrix(const Implementation & i) : CorrelationMatrix(i) { // Nothing to do } /* String converter */ String IdentityMatrix::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } /* Operator () : should do nothing, in order to prevent any modification on the matrix */ Scalar & IdentityMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { copyOnWrite(); return (*getImplementation())(i, j); } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Scalar & IdentityMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (*getImplementation())(i, j); } /* IdentityMatrix transpose */ IdentityMatrix IdentityMatrix::transpose () const { return *this; } /* Multiplications */ Matrix IdentityMatrix::operator * (const Matrix & m) const { return m; } SquareMatrix IdentityMatrix::operator * (const SquareMatrix & m) const { return m; } SymmetricMatrix IdentityMatrix::operator * (const SymmetricMatrix & m) const { return m; } CovarianceMatrix IdentityMatrix::operator * (const CovarianceMatrix & m) const { return m; } CorrelationMatrix IdentityMatrix::operator * (const CorrelationMatrix & m) const { return m; } /* Resolution of a linear system */ Point IdentityMatrix::solveLinearSystem(const Point & b, const Bool keepIntact) { return b; } Matrix IdentityMatrix::solveLinearSystem(const Matrix & b, const Bool keepIntact) { return b; } /* Compute determinant */ Scalar IdentityMatrix::computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact) { sign = 1.0; return 0.0; } Scalar IdentityMatrix::computeDeterminant(const Bool keepIntact) { return 1.0; } /* Compute eigenvalues */ Point IdentityMatrix::computeEigenValues(const Bool keepIntact) { return Point(getNbRows(), 1.0); } Point IdentityMatrix::computeEV(SquareMatrix & v, const Bool keepIntact) { v = *this; return Point(getNbRows(), 1.0); } /* Compute singular values */ Point IdentityMatrix::computeSingularValues(const Bool keepIntact) { return Point(getNbRows(), 1.0); } /* Compute singular values */ Point IdentityMatrix::computeSVD(Matrix & u, Matrix & vT, const Bool fullSVD, const Bool keepIntact) { u = *this; vT = *this; return Point(getNbRows(), 1.0); } /* Check if the matrix is SPD */ Bool IdentityMatrix::isPositiveDefinite(const Bool keepIntact) { return true; } /* Build the Cholesky factorization of the matrix */ TriangularMatrix IdentityMatrix::computeCholesky(const Bool keepIntact) { return getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/Indices.cxx000066400000000000000000000043131307543307100206560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Set of indices defined as a Collection of UnsignedInteger class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Indices.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Indices); static const Factory Factory_Indices; /* Check that no value is repeated and no value exceeds the given bound */ Bool Indices::check(const UnsignedInteger bound) const { if (getSize() == 0) return true; // Check if the values are all different Indices copy(*this); std::sort(copy.begin(), copy.end()); iterator iter = std::unique(copy.begin(), copy.end()); if (iter < copy.end()) return false; // Check if the values are in the given bound if (*max_element(begin(), end()) >= bound) return false; return true; } /* Check if the indices are increasing */ Bool Indices::isIncreasing() const { const UnsignedInteger size = getSize(); if (size <= 1) return true; for (UnsignedInteger i = 1; i < size; ++i) if (operator[](i) < operator[](i - 1)) return false; return true; } /* Fill the indices with a linear progression, starting from start value by step stepsize */ void Indices::fill(const UnsignedInteger initialValue, const UnsignedInteger stepSize) { const UnsignedInteger size = getSize(); UnsignedInteger value = initialValue; for (UnsignedInteger i = 0; i < size; ++i) { operator[](i) = value; value += stepSize; } } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/Matrix.cxx000066400000000000000000000201041307543307100205400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Matrix implements the classical mathematical matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Matrix.hxx" #include "openturns/MatrixImplementation.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Matrix); /* Default constructor */ Matrix::Matrix() : TypedInterfaceObject(new MatrixImplementation()) { // Nothing to do } /* Constructor with size (rowDim and colDim) */ /* The matrix is made up of a collection of rowDim*colDim elements */ /* The matrix is viewed as a set of column vectors read one after another */ Matrix::Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim) : TypedInterfaceObject(new MatrixImplementation(rowDim, colDim)) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ Matrix::Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const Collection & elementsValues) : TypedInterfaceObject(new MatrixImplementation(rowDim, colDim, elementsValues)) { // Nothing to do } /* Constructor with implementation */ Matrix::Matrix(const Implementation & i) : TypedInterfaceObject(i) { // Nothing to do } /* Constructor with implementation */ Matrix::Matrix(const MatrixImplementation & i) : TypedInterfaceObject(i.clone()) { // Nothing to do } Matrix::Matrix(const SymmetricMatrix & symmetric) : TypedInterfaceObject(symmetric.getImplementation()) { getImplementation()->symmetrize(); } /* String converter */ String Matrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } String Matrix::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Set small elements to zero */ Matrix Matrix::clean(const Scalar threshold) const { return Implementation(getImplementation()->clean(threshold).clone()); } /* Get the dimensions of the matrix : number of rows */ UnsignedInteger Matrix::getNbRows() const { return getImplementation()->getNbRows(); } /* Get the dimensions of the matrix : number of columns */ UnsignedInteger Matrix::getNbColumns() const { return getImplementation()->getNbColumns(); } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Scalar & Matrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { copyOnWrite(); return (*getImplementation())(i, j); } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Scalar & Matrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (*getImplementation())(i, j); } /* Matrix transpose */ Matrix Matrix::transpose () const { return Implementation(getImplementation()->transpose().clone()); } /* Row extraction */ const Matrix Matrix::getRow(const UnsignedInteger rowIndex) const { return Implementation(getImplementation()->getRow(rowIndex).clone()); } /* Column extration */ const Matrix Matrix::getColumn(const UnsignedInteger columnIndex) const { return Implementation(getImplementation()->getColumn(columnIndex).clone()); } /* Matrix additions (must have the same dimensions) */ Matrix Matrix::operator+ (const Matrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation())).clone()); } Matrix Matrix::operator+ (const SymmetricMatrix & m) const { m.getImplementation()->symmetrize(); return Implementation((*getImplementation() + * (m.getImplementation())).clone()); } /* Matrix substractions (must have the same dimensions) */ Matrix Matrix::operator- (const Matrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation())).clone()); } Matrix Matrix::operator- (const SymmetricMatrix & m) const { m.getImplementation()->symmetrize(); return Implementation((*getImplementation() - * (m.getImplementation())).clone()); } /* Matrix multiplications (must have consistent dimensions) */ Matrix Matrix::operator* (const Matrix & m) const { return Implementation(getImplementation()->genProd(*(m.getImplementation())).clone()); } Matrix Matrix::operator* (const SymmetricMatrix & m) const { return Implementation(m.getImplementation()->symProd(*getImplementation(), 'R').clone()); } Matrix Matrix::operator* (const IdentityMatrix & m) const { return *this; } /* Multiplication with a Point (must have consistent dimensions) */ Point Matrix::operator* (const Point & pt) const { return getImplementation()->genVectProd(pt) ; } /* Multiplication with a Scalar */ Matrix Matrix::operator* (const Scalar s) const { return Implementation((*getImplementation() * s).clone()); } /* Division by a Scalar*/ Matrix Matrix::operator/ (const Scalar s) const { return Implementation((*getImplementation() / s).clone()); } /* Resolution of a linear system */ Point Matrix::solveLinearSystem(const Point & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemRect(b, keepIntact); } Matrix Matrix::solveLinearSystem(const Matrix & b, const Bool keepIntact) { return Implementation(getImplementation()->solveLinearSystemRect(*(b.getImplementation()), keepIntact).clone()); } /* Compute singular values */ Point Matrix::computeSingularValues(const Bool keepIntact) { return getImplementation()->computeSingularValues(keepIntact); } /* Compute singular values */ Point Matrix::computeSVD(Matrix & u, Matrix & vT, const Bool fullSVD, const Bool keepIntact) { return getImplementation()->computeSVD(*(u.getImplementation()), *(vT.getImplementation()), fullSVD, keepIntact); } /* Build the QR factorization of the matrix */ Matrix Matrix::computeQR(Matrix & R, const Bool fullQR, const Bool keepIntact) { return getImplementation()->computeQR(*(R.getImplementation()), fullQR, keepIntact); } /* Empty returns true if there is no element in the matrix */ Bool Matrix::isEmpty() const { return getImplementation()->isEmpty() ; } /* Compute the associated Gram matrix */ CovarianceMatrix Matrix::computeGram(const Bool transposed) const { return getImplementation()->computeGram(transposed) ; } /* Comparison operator */ Bool Matrix::operator == (const Matrix & rhs) const { const Matrix &lhs(*this); return (*(lhs.getImplementation()) == *(rhs.getImplementation()) ); } const Scalar* Matrix::__baseaddress__() const { return getImplementation()->__baseaddress__(); } UnsignedInteger Matrix::__elementsize__() const { return getImplementation()->__elementsize__(); } UnsignedInteger Matrix::__stride__(UnsignedInteger dim) const { return getImplementation()->__stride__(dim); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/MatrixImplementation.cxx000066400000000000000000001520131307543307100234530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MatrixImplementation implements the classical mathematical MatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/MatrixImplementation.hxx" #include "openturns/ComplexMatrixImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Lapack.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Os.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MatrixImplementation); static const Factory Factory_MatrixImplementation; // All the pivots with a magnitude less than this threshold are considered as zero /* Default constructor */ MatrixImplementation::MatrixImplementation() : PersistentCollection() , nbRows_(0) , nbColumns_(0) { // Nothing to do } /* Constructor with size (rowDim and colDim) */ /* The MatrixImplementation is made up of a collection of rowDim*colDim elements */ /* The MatrixImplementation is viewed as a set of column vectors read one after another */ MatrixImplementation::MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim) : PersistentCollection(rowDim * colDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) { // Nothing to do } /* Constructor from external collection */ MatrixImplementation::MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const Collection & elementsValues) : PersistentCollection(rowDim * colDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) { const UnsignedInteger matrixSize = std::min(rowDim * colDim, elementsValues.getSize()); std::copy(elementsValues.begin(), elementsValues.begin() + matrixSize, begin()); } /* Virtual constructor */ MatrixImplementation * MatrixImplementation::clone() const { return new MatrixImplementation(*this); } /* String converter */ String MatrixImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " rows=" << nbRows_ << " columns=" << nbColumns_ << " values=" << PersistentCollection::__repr__(); } String MatrixImplementation::__str__(const String & offset) const { OSS oss(false); if (nbRows_ == 0 || nbColumns_ == 0) return "[]"; if ( (nbRows_ >= ResourceMap::GetAsUnsignedInteger("Matrix-size-visible-in-str-from")) || (nbColumns_ >= ResourceMap::GetAsUnsignedInteger("Matrix-size-visible-in-str-from")) ) oss << nbRows_ << "x" << nbColumns_ << "\n"; size_t lwidth(0); size_t rwidth(0); for ( UnsignedInteger i = 0; i < nbRows_; ++i ) for ( UnsignedInteger j = 0; j < nbColumns_; ++j ) { String st(OSS() << (*this)(i, j)); size_t dotpos(st.find( '.' )); lwidth = std::max( lwidth, (dotpos != String::npos) ? dotpos : st.size() ); rwidth = std::max( rwidth, (dotpos != String::npos) ? st.size() - dotpos : 0 ); } const char * bracket("["); const char * newline(""); for ( UnsignedInteger i = 0; i < nbRows_; ++i, newline = "\n", bracket = " " ) { oss << newline << offset << bracket << "[ "; const char * sep(""); for ( UnsignedInteger j = 0; j < nbColumns_; ++j, sep = " " ) { String st(OSS() << (*this)(i, j)); size_t dotpos(st.find( '.' )); oss << sep << String( lwidth - ((dotpos != String::npos) ? dotpos : st.size()), ' ' ) << st << String( rwidth - ((dotpos != String::npos) ? st.size() - dotpos : 0), ' ' ); } oss << " ]"; } oss << "]"; return oss; } /* Operator () gives access to the elements of the MatrixImplementation (to modify these elements) */ /* The element of the MatrixImplementation is designated by its row number i and its column number j */ /* the first element of the MatrixImplementation is m(0,0) */ Scalar & MatrixImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j) { if (i >= nbRows_) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than row dim (" << nbRows_ << ")"; if (j >= nbColumns_) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than column dim (" << nbColumns_ << ")"; return operator[](convertPosition(i, j)); } /* Operator () gives access to the elements of the MatrixImplementation (read only) */ /* The element of the MatrixImplementation is designated by its row number i and its column number j */ const Scalar & MatrixImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j) const { if (i >= nbRows_) throw OutOfBoundException(HERE) << "i (" << i << ") must be less than row dim (" << nbRows_ << ")"; if (j >= nbColumns_) throw OutOfBoundException(HERE) << "j (" << j << ") must be less than column dim (" << nbColumns_ << ")"; return operator[](convertPosition(i, j)); } /* Get the dimensions of the MatrixImplementation : number of rows */ UnsignedInteger MatrixImplementation::getNbRows() const { return nbRows_; } /* Get the dimensions of the MatrixImplementation : number of columns */ UnsignedInteger MatrixImplementation::getNbColumns() const { return nbColumns_; } /* Get the dimensions of the MatrixImplementation : dimension (square matrix : nbRows_) */ UnsignedInteger MatrixImplementation::getDimension() const { return nbRows_; } /* MatrixImplementation transpose */ MatrixImplementation MatrixImplementation::transpose () const { MatrixImplementation trans(nbColumns_, nbRows_); // The source matrix is accessed columnwise in the natural order for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) trans(j, i) = operator()(i, j); return trans; } /* Row extraction */ const MatrixImplementation MatrixImplementation::getRow(const UnsignedInteger rowIndex) const { if (rowIndex >= nbRows_) throw InvalidArgumentException(HERE) << "Error: the row index=" << rowIndex << " must be less than the row number=" << nbRows_; MatrixImplementation row(1, nbColumns_); for (UnsignedInteger i = 0; i < nbColumns_; ++i) row(0, i) = (*this)(rowIndex, i); return row; } const MatrixImplementation MatrixImplementation::getRowSym(const UnsignedInteger rowIndex) const { if (rowIndex >= nbRows_) throw InvalidArgumentException(HERE) << "Error: the row index=" << rowIndex << " must be less than the row number=" << nbRows_; MatrixImplementation row(1, nbColumns_); for (UnsignedInteger i = 0; i < rowIndex; ++i) row(0, i) = (*this)(rowIndex, i); for (UnsignedInteger i = rowIndex; i < nbColumns_; ++i) row(0, i) = (*this)(i, rowIndex); return row; } /* Column extration */ const MatrixImplementation MatrixImplementation::getColumn(const UnsignedInteger columnIndex) const { if (columnIndex >= nbColumns_) throw InvalidArgumentException(HERE) << "Error: the column index=" << columnIndex << " must be less than the column number=" << nbColumns_; MatrixImplementation column(nbRows_, 1); for (UnsignedInteger i = 0; i < nbRows_; ++i) column(i, 0) = (*this)(i, columnIndex); return column; } const MatrixImplementation MatrixImplementation::getColumnSym(const UnsignedInteger columnIndex) const { if (columnIndex >= nbColumns_) throw InvalidArgumentException(HERE) << "Error: the column index=" << columnIndex << " must be less than the column number=" << nbColumns_; MatrixImplementation column(nbRows_, 1); for (UnsignedInteger i = 0; i < columnIndex; ++i) column(i, 0) = (*this)(columnIndex, i); for (UnsignedInteger i = columnIndex; i < nbRows_; ++i) column(i, 0) = (*this)(i, columnIndex); return column; } /* MatrixImplementation addition (must have the same dimensions) */ MatrixImplementation MatrixImplementation::operator+ (const MatrixImplementation & matrix) const { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot add matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation MatrixImplementation result(matrix); int size(nbRows_ * nbColumns_); double alpha(1.0); int one(1); daxpy_(&size, &alpha, const_cast(&((*this)[0])), &one, &result[0], &one); return result; } /* In-place MatrixImplementation addition (must have the same dimensions) */ MatrixImplementation & MatrixImplementation::operator+= (const MatrixImplementation & matrix) { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot add matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation MatrixImplementation result(matrix); int size(nbRows_ * nbColumns_); double alpha(1.0); int one(1); daxpy_(&size, &alpha, const_cast(&(matrix[0])), &one, &(*this)[0], &one); return *this; } /* MatrixImplementation substraction (must have the same dimensions) */ MatrixImplementation MatrixImplementation::operator- (const MatrixImplementation & matrix) const { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot substract matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation MatrixImplementation result(*this); int size(nbRows_ * nbColumns_); double alpha(-1.0); int one(1); daxpy_(&size, &alpha, const_cast(&(matrix[0])), &one, &result[0], &one); return result; } /* In-place MatrixImplementation substraction (must have the same dimensions) */ MatrixImplementation & MatrixImplementation::operator-= (const MatrixImplementation & matrix) { if ((nbRows_ != matrix.nbRows_ ) || (nbColumns_ != matrix.nbColumns_ )) throw InvalidDimensionException(HERE) << "Cannot substract matrices with incompatible dimensions"; // Must copy as add will be overwritten by the operation MatrixImplementation result(*this); int size(nbRows_ * nbColumns_); double alpha(-1.0); int one(1); daxpy_(&size, &alpha, const_cast(&(matrix[0])), &one, &(*this)[0], &one); return *this; } /* MatrixImplementation multiplications (must have consistent dimensions) */ MatrixImplementation MatrixImplementation::genProd (const MatrixImplementation & matrix, const Bool transposeLeft, const Bool transposeRight) const { // Multiply an mxk matrix op(A) by a kxn matrix op(B), // where op(A) == A if transposeLeft == false, op(A) == A^t else // and op(B) == B if transposeRight == false, op(B) == B^t else int m(transposeLeft ? nbColumns_ : nbRows_); int k(transposeLeft ? nbRows_ : nbColumns_); int l(transposeRight ? matrix.nbColumns_ : matrix.nbRows_); int n(transposeRight ? matrix.nbRows_ : matrix.nbColumns_); if (k != l) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_ << ", left is transposed=" << (transposeLeft ? "true" : "false") << ", right is transposed=" << (transposeRight ? "true" : "false"); MatrixImplementation mult(m, n); if ((m == 0) || (n == 0) || (k == 0)) return mult; char transa(transposeLeft ? 'T' : 'N'); char transb(transposeRight ? 'T' : 'N'); double alpha(1.0); double beta(0.0); int ltransa(1); int ltransb(1); int lda(nbRows_); int ldb(matrix.nbRows_); dgemm_(&transa, &transb, &m, &n, &k, &alpha, const_cast(&((*this)[0])), &lda, const_cast(&(matrix[0])), &ldb, &beta, &mult[0], &m, <ransa, <ransb); return mult; } MatrixImplementation MatrixImplementation::symProd (const MatrixImplementation & matrix, const char symSide) const { const MatrixImplementation & left = (symSide == 'L') ? *this : matrix; const MatrixImplementation & right = (symSide == 'L') ? matrix : *this; if (left.nbColumns_ != right.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product" << " left=" << left.nbRows_ << "x" << left.nbColumns_ << " right=" << right.nbRows_ << "x" << right.nbColumns_; MatrixImplementation mult(left.nbRows_, right.nbColumns_); if ((left.nbRows_ == 0) || (left.nbColumns_ == 0) || (right.nbRows_ == 0) || (right.nbColumns_ == 0)) return mult; char side = symSide; char uplo = 'L'; int m = left.nbRows_; int n = right.nbColumns_; int lda = nbRows_; int ldb = matrix.nbRows_; double alpha = 1.0; double beta = 0.0; int lside = 1; int luplo = 1; dsymm_(&side, &uplo, &m, &n, &alpha, const_cast(&((*this)[0])), &lda, const_cast(&(matrix[0])), &ldb, &beta, &mult[0], &m, &lside, &luplo); return mult; } /* Multiplications with a Point (must have consistent dimensions) */ Point MatrixImplementation::genVectProd (const Point & pt, const Bool transposed) const { int k = transposed ? nbRows_ : nbColumns_; if (k != (int)pt.getDimension()) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product: columns=" << k << " / vector dimension=" << pt.getDimension() << "."; int l = transposed ? nbColumns_ : nbRows_; Point prod(l); if ((nbRows_ == 0) || (nbColumns_ == 0)) return prod; char trans = transposed ? 'T' : 'N'; int one = 1; double alpha = 1.0; double beta = 0.0; int ltrans = 1; int m = nbRows_; int n = nbColumns_; dgemv_(&trans, &m, &n, &alpha, const_cast(&((*this)[0])), &m, const_cast(&(pt[0])), &one, &beta, &prod[0], &one, <rans); return prod; } Point MatrixImplementation::symVectProd (const Point & pt) const { if (nbColumns_ != pt.getDimension() ) throw InvalidDimensionException(HERE) << "Invalid dimension in matrix/vector product"; Point prod(nbRows_); // In this case, nbRows_ == nbColumns_ if (nbRows_ == 0) return prod; char uplo('L'); int n(nbRows_); int one(1); double alpha(1.0); double beta(0.0); int luplo(1); dsymv_(&uplo, &n, &alpha, const_cast(&((*this)[0])), &n, const_cast(&(pt[0])), &one, &beta, &prod[0], &one, &luplo); return prod; } /* Gram matrix. If transpose == true, compute M^T.M, else M.M^T. */ MatrixImplementation MatrixImplementation::computeGram (const Bool transposed) const { if ((nbRows_ == 0) || (nbColumns_ == 0)) return MatrixImplementation(0, 0); MatrixImplementation scalprod(*this); char uplo = 'L'; char trans = transposed ? 'T' : 'N'; int n = transposed ? nbColumns_ : nbRows_; int k = transposed ? nbRows_ : nbColumns_; double alpha = 1.0; int lda = transposed ? k : n; double beta = 0.0; MatrixImplementation C(n, n); int ldc = n; int one = 1; dsyrk_(&uplo, &trans, &n, &k, &alpha, const_cast(&((*this)[0])), &lda, &beta, &C[0], &ldc, &one, &one); return C; } /* Multiplication by a Scalar */ MatrixImplementation MatrixImplementation::operator* (const Scalar s) const { if (s == 0.0) return MatrixImplementation(nbRows_, nbColumns_); if ((nbRows_ == 0) || (nbColumns_ == 0)) return *this; MatrixImplementation scalprod(*this); double alpha(s); int one(1); int n_(nbRows_ * nbColumns_); dscal_(&n_, &alpha, &scalprod[0], &one); return scalprod; } /* In-place Multiplication by a Scalar */ MatrixImplementation & MatrixImplementation::operator*= (const Scalar s) { if ((nbRows_ == 0) || (nbColumns_ == 0)) return *this; double alpha(s); int one(1); int n_(nbRows_ * nbColumns_); dscal_(&n_, &alpha, &(*this)[0], &one); return *this; } /* Division by a Scalar*/ MatrixImplementation MatrixImplementation::operator/ (const Scalar s) const { if (s == 0.0) throw InvalidArgumentException(HERE); if ((nbRows_ == 0) || (nbColumns_ == 0)) return *this; MatrixImplementation scalprod(*this); double alpha(1.0 / s); int one(1); int n_(nbRows_ * nbColumns_); dscal_(&n_, &alpha, &scalprod[0], &one); return scalprod; } /* In-place division by a Scalar */ MatrixImplementation & MatrixImplementation::operator/= (const Scalar s) { if (s == 0.0) throw InvalidArgumentException(HERE); if ((nbRows_ == 0) || (nbColumns_ == 0)) return *this; double alpha(1.0 / s); int one(1); int n_(nbRows_ * nbColumns_); dscal_(&n_, &alpha, &(*this)[0], &one); return *this; } MatrixImplementation MatrixImplementation::triangularProd(const MatrixImplementation & matrix, const char triangularSide, const char upperLower) const { if (nbColumns_ != matrix.nbRows_) throw InvalidDimensionException(HERE) << "Invalid dimensions in matrix/matrix product left=" << nbRows_ << "x" << nbColumns_ << " right=" << matrix.nbRows_ << "x" << matrix.nbColumns_; MatrixImplementation mult(matrix); if ((nbRows_ == 0) || (nbColumns_ == 0) || (matrix.nbColumns_ == 0)) return mult; char side(triangularSide); int lside = 1; char uplo(upperLower); int luplo = 1; char trans('N'); int ltrans = 1; char diag('N'); int ldiag = 1; int m(nbRows_); int n(matrix.nbColumns_); Scalar alpha = 1.0; // Lapack routine dtrmm_(&side, &uplo, &trans, &diag, &m, &n, &alpha , const_cast(&((*this)[0])), &m, const_cast(&(mult[0])), &m, &lside, &luplo, <rans, &ldiag); return mult; } /* Integer power, general matrix */ MatrixImplementation MatrixImplementation::genPower(const UnsignedInteger n) const { Bool first = true; UnsignedInteger exponent = n; MatrixImplementation y; MatrixImplementation z(*this); while (exponent > 0) { // t is the right bit of exponent const UnsignedInteger t = exponent % 2; // remove last bit from exponent exponent /= 2; // if right bit is 1 if (t != 0) { // if it is the rightmost bit equals to 1 if (first) { first = false; y = z; } else y = y.genProd(z); // if no more bit to consider if (exponent == 0) return y; } // Square the contribution z = z.genProd(z); } return y; } /* Integer power, symmetric matrix */ MatrixImplementation MatrixImplementation::symPower(const UnsignedInteger n) const { Bool first = true; UnsignedInteger exponent = n; MatrixImplementation y; MatrixImplementation z(*this); while (exponent > 0) { // t is the right bit of exponent const UnsignedInteger t = exponent % 2; // remove last bit from exponent exponent /= 2; // if right bit is 1 if (t != 0) { // if it is the rightmost bit equals to 1 if (first) { first = false; y = z; } else y = y.symProd(z, 'L'); // if no more bit to consider if (exponent == 0) return y; } // Square the contribution z = z.symProd(z, 'L'); } return y; } /* Empty returns true if there is no element in the MatrixImplementation */ Bool MatrixImplementation::isEmpty() const { return ((nbRows_ == 0) || (nbColumns_ == 0) || (PersistentCollection::isEmpty())); } /* Returns true if triangular lower or upper */ Bool MatrixImplementation::isTriangular(Bool lower) const { if ( nbRows_ == nbColumns_ ) { for ( UnsignedInteger j = 1; j < nbColumns_; ++ j ) for ( UnsignedInteger i = 0; i < j; ++ i ) if ( std::abs( (*this)[lower ? convertPosition(i, j) : convertPosition(j, i)] ) > 0. ) return false; return true; } else return false; } /* Comparison operator */ Bool MatrixImplementation::operator == (const MatrixImplementation & rhs) const { const MatrixImplementation &lhs(*this); Bool equality = true; if (&lhs != &rhs) // Not the same object { const Collection & refLhs(static_cast >(lhs)); const Collection & refRhs(static_cast >(rhs)); equality = ( lhs.nbRows_ == rhs.nbRows_ && lhs.nbColumns_ == rhs.nbColumns_ && refLhs == refRhs); } return equality; } Bool MatrixImplementation::isSymmetric() const { const Scalar epsilon = ResourceMap::GetAsScalar("Matrix-SymmetryThreshold"); if ( nbRows_ == nbColumns_ ) { for ( UnsignedInteger i = 1; i < nbRows_; ++ i ) for ( UnsignedInteger j = 0; j < i; ++ j ) if ( std::abs(this->operator[](convertPosition(i, j)) - operator[](convertPosition(j, i))) > epsilon) return false; return true; } else return false; } /* Copy the lower triangle into the upper one, used by symmetric matrices */ void MatrixImplementation::symmetrize() const { MatrixImplementation *refThis(const_cast(this)); // Loop over the upper triangle for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) refThis->operator[](convertPosition(i, j)) = operator[](convertPosition(j, i)); } /* Fill the relevant triangle with zero */ void MatrixImplementation::triangularize(const Bool isLowerTriangular) const { MatrixImplementation *refThis(const_cast(this)); if (isLowerTriangular) { for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) refThis->operator[](convertPosition(i, j)) = 0.0; } else { for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = j + 1; i < nbRows_; ++i) refThis->operator[](convertPosition(i, j)) = 0.0; } } /* Check if the matrix values belong to (-1;1) */ Bool MatrixImplementation::hasUnitRange() const { bool unitRange = true; for (UnsignedInteger i = 0; i < nbRows_; ++i) for (UnsignedInteger j = 0; j < nbColumns_; ++j) { if (std::abs(this->operator[](convertPosition(i, j))) > 1.0) { unitRange = false; break; } } return unitRange; } /* Set small elements to zero */ MatrixImplementation MatrixImplementation::clean(const Scalar threshold) const { // Nothing to do for nonpositive threshold if (threshold <= 0.0) return *this; MatrixImplementation result(nbRows_, nbColumns_); for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < nbRows_; ++i) { const Scalar value = (*this)(i, j); // Things are done this way to prevent spurious -0.0 if (std::abs(value) < 0.5 * threshold) result(i, j) = 0.0; else result(i, j) = threshold * round(value / threshold); } return result; } /* Set small elements to zero */ MatrixImplementation MatrixImplementation::cleanSym(const Scalar threshold) const { symmetrize(); return clean(threshold); } /* Resolution of a linear system : rectangular matrix * MX = b, M is an mxn matrix, b is an mxq matrix and * X is an nxq matrix */ MatrixImplementation MatrixImplementation::solveLinearSystemRect (const MatrixImplementation & b, const Bool keepIntact) { if (nbRows_ != b.nbRows_) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbRows_ == 0) || (nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; int m(nbRows_); int n(nbColumns_); // B is an extended copy of b, it must be large enough to store the solution, see LAPACK documentation int p(std::max(m, n)); int q(b.nbColumns_); MatrixImplementation B(p, q); for(UnsignedInteger j = 0; j < static_cast(q); ++j) for (UnsignedInteger i = 0; i < static_cast(m); ++i) B(i, j) = b(i, j); int nrhs(q); int lwork(-1); double lwork_d = -1.; int info = -1; std::vector jpiv(n); double rcond(ResourceMap::GetAsScalar("Matrix-DefaultSmallPivot")); int rank = -1; MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dgelsy_(&m, &n, &nrhs, &A[0], &m, &B[0], &p, &jpiv[0], &rcond, &rank, &lwork_d, &lwork, &info); lwork = static_cast(lwork_d); Point work(lwork); dgelsy_(&m, &n, &nrhs, &A[0], &m, &B[0], &p, &jpiv[0], &rcond, &rank, &work[0], &lwork, &info); MatrixImplementation result(n, q); for(UnsignedInteger j = 0; j < static_cast(q); ++j) for (UnsignedInteger i = 0; i < static_cast(n); ++i) result(i, j) = B(i, j); return result; } /* Resolution of a linear system : rectangular matrix * Mx = b, M is an mxn matrix, b is an m-dimensional * vector and x is an n-dimensional vector */ Point MatrixImplementation::solveLinearSystemRect (const Point & b, const Bool keepIntact) { const UnsignedInteger m = b.getDimension(); if (nbRows_ != m) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << m << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; // Solve the matrix linear system // A MatrixImplementation is also a collection of Scalar, so it is automatically converted into a Point return solveLinearSystemRect(MatrixImplementation(m, 1, b), keepIntact); } /* Resolution of a linear system : square matrix */ MatrixImplementation MatrixImplementation::solveLinearSystemTri (const MatrixImplementation & b, const Bool keepIntact, const Bool lower, const Bool transposed) { if (nbRows_ != b.nbRows_ ) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbRows_ == 0) || (nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; // We must copy the right-hand side because it will be overwritten by the operation MatrixImplementation B(b); // side tells if we solve M.X = alpha.B or X.M = alpha.B char side = 'L'; int lside = 1; // M must be triangular. uplo tells if it is upper or lower triangular char uplo = lower ? 'L' : 'U'; int luplo = 1; // transa tells if M is transposed or not char transa = transposed ? 'T' : 'N'; int ltransa = 1; // diag tells if M is unit diagonal or not char diag = 'N'; int ldiag = 1; // the row dimension of M int m = B.nbRows_; // the column dimension of M int n = B.nbColumns_; // we solve the case alpha=1 double alpha = 1.0; // leading dimension of M int lda = nbRows_; // leading dimension of B int ldb = b.nbRows_; if (keepIntact) { MatrixImplementation A(*this); dtrsm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, const_cast(&(A[0])), &lda, const_cast(&(B[0])), &ldb, &lside, &luplo, <ransa, &ldiag); } else dtrsm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, const_cast(&((*this)[0])), &lda, const_cast(&(B[0])), &ldb, &lside, &luplo, <ransa, &ldiag); return B; } /* Resolution of a linear system : square matrix */ Point MatrixImplementation::solveLinearSystemTri (const Point & b, const Bool keepIntact, const Bool lower, const Bool transposed) { const UnsignedInteger m = b.getDimension(); if (nbRows_ != m) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << m << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; // A MatrixImplementation is also a collection of Scalar, so it is automatically converted into a Point return solveLinearSystemTri(MatrixImplementation(m, 1, b), keepIntact, lower, transposed); } /* Resolution of a linear system : square matrix */ MatrixImplementation MatrixImplementation::solveLinearSystemSquare (const MatrixImplementation & b, const Bool keepIntact) { if (nbColumns_ != b.nbRows_ ) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbRows_ == 0) || (nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; // We must copy the right-hand side because it will be overwritten by the operation MatrixImplementation B(b); int m(nbRows_); int nrhs(B.nbColumns_); int info; std::vector ipiv(m); if (keepIntact) { MatrixImplementation A(*this); dgesv_(&m, &nrhs, &A[0], &m, &ipiv[0], &B[0], &m, &info); } else dgesv_(&m, &nrhs, &(*this)[0], &m, &ipiv[0], &B[0], &m, &info); if (info != 0) throw NotDefinedException(HERE) << "Error: the matrix is singular."; return B; } /* Resolution of a linear system : square matrix */ Point MatrixImplementation::solveLinearSystemSquare (const Point & b, const Bool keepIntact) { const UnsignedInteger m = b.getDimension(); if (nbRows_ != m) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << m << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; // A MatrixImplementation is also a collection of Scalar, so it is automatically converted into a Point return solveLinearSystemRect(MatrixImplementation(m, 1, b), keepIntact); } /* Resolution of a linear system : symmetric matrix */ MatrixImplementation MatrixImplementation::solveLinearSystemSym (const MatrixImplementation & b, const Bool keepIntact) { if (nbColumns_ != b.nbRows_ ) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; char uplo('L'); // We must copy the right-hand side as it will be overwritten by the operation MatrixImplementation B(b); int n(nbRows_); int nrhs(B.nbColumns_); int lwork(-1); double lwork_d = -1.; int info = -1; std::vector ipiv(n); int luplo(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dsysv_(&uplo, &n, &nrhs, &A[0], &n, &ipiv[0], &B[0], &n, &lwork_d, &lwork, &info, &luplo); lwork = static_cast(lwork_d); Point work(lwork); dsysv_(&uplo, &n, &nrhs, &A[0], &n, &ipiv[0], &B[0], &n, &work[0], &lwork, &info, &luplo); if (info != 0) throw NotDefinedException(HERE) << "Error: the matrix is singular."; return B; } /* Resolution of a linear system : symmetric matrix */ Point MatrixImplementation::solveLinearSystemSym (const Point & b, const Bool keepIntact) { const UnsignedInteger dimension = b.getDimension(); if (nbRows_ != dimension) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << dimension << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; MatrixImplementation B(dimension, 1, b); // A MatrixImplementation is also a collection of Scalar, so it is automatically converted into a Point return solveLinearSystemSym(B, keepIntact); } /* Resolution of a linear system : covariance matrix */ MatrixImplementation MatrixImplementation::solveLinearSystemCov (const MatrixImplementation & b, const Bool keepIntact) { if (nbRows_ != b.nbRows_ ) throw InvalidDimensionException(HERE) << "The right-hand side has row dimension=" << b.nbRows_ << ", expected " << nbRows_; if ((nbColumns_ == 0) || (b.nbColumns_ == 0)) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix or empty right-hand side"; char uplo('L'); // We must copy the right-hand side as it will be overwritten by the operation MatrixImplementation B(b); int n(nbRows_); int nrhs(B.nbColumns_); int info; int luplo(1); if (keepIntact) { MatrixImplementation A(*this); dposv_(&uplo, &n, &nrhs, &A[0], &n, &B[0], &n, &info, &luplo); } else { dposv_(&uplo, &n, &nrhs, &(*this)[0], &n, &B[0], &n, &info, &luplo); } if (info != 0) throw NotDefinedException(HERE) << "Error: the matrix is singular."; return B; } /* Resolution of a linear system : symmetric matrix */ Point MatrixImplementation::solveLinearSystemCov (const Point & b, const Bool keepIntact) { const UnsignedInteger dimension = b.getDimension(); if (nbRows_ != dimension) throw InvalidDimensionException(HERE) << "The right-hand side dimension is " << dimension << ", expected " << nbRows_; if (nbRows_ == 0) throw InvalidDimensionException(HERE) << "Cannot solve a linear system with empty matrix"; MatrixImplementation B(dimension, 1, b); // A MatrixImplementation is also a collection of Scalar, so it is automatically converted into a Point return solveLinearSystemCov(B, keepIntact); } /* Compute determinant */ Scalar MatrixImplementation::computeLogAbsoluteDeterminant (Scalar & sign, const Bool keepIntact) { int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the determinant of an empty matrix"; Scalar logAbsoluteDeterminant = 0.0; sign = 1.0; if (n <= 2) { Scalar value = 0.0; if (n == 1) value = (*this)(0, 0); else value = (*this)(0, 0) * (*this)(1, 1) - (*this)(0, 1) * (*this)(1, 0); if (value == 0.0) { sign = 0.0; logAbsoluteDeterminant = SpecFunc::LogMinScalar; } else { sign = (value > 0.0 ? 1.0 : -1.0); logAbsoluteDeterminant = log(std::abs(value)); } } // n <= 2 else { std::vector ipiv (n); int info = -1; MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; // LU Factorization with LAPACK dgetrf_(&n, &n, &A[0], &n, &ipiv[0], &info); if (info > 0) return SpecFunc::LogMinScalar; // Determinant computation for (UnsignedInteger i = 0; i < ipiv.size(); ++i) { const Scalar pivot = A[i * (ipiv.size() + 1)]; if (std::abs(pivot) == 0.0) { logAbsoluteDeterminant = SpecFunc::LogMinScalar; sign = 0.0; } if (logAbsoluteDeterminant > SpecFunc::LogMinScalar) logAbsoluteDeterminant += log(std::abs(pivot)); if (pivot < 0.0) sign = -sign; if (ipiv[i] != int(i + 1)) sign = -sign; } } // n > 2 return logAbsoluteDeterminant; } /* Compute determinant */ Scalar MatrixImplementation::computeDeterminant (const Bool keepIntact) { if (nbRows_ == 1) return (*this)(0, 0); if (nbRows_ == 2) return (*this)(0, 0) * (*this)(1, 1) - (*this)(0, 1) * (*this)(1, 0); Scalar sign = 0.0; const Scalar logAbsoluteDeterminant = computeLogAbsoluteDeterminant(sign, keepIntact); if (logAbsoluteDeterminant == SpecFunc::LogMinScalar) return 0.0; return sign * exp(logAbsoluteDeterminant); } /* Compute determinant for a symmetric matrix */ Scalar MatrixImplementation::computeLogAbsoluteDeterminantSym (Scalar & sign, const Bool keepIntact) { symmetrize(); return computeLogAbsoluteDeterminant(sign, keepIntact); /* The implementation based on dsytrf does not uses the 2x2 diagonal blocks correctly int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE); std::vector ipiv (n); char uplo('L'); int info; Scalar determinant = 1.0; int lwork(-1); double lwork_d; int luplo(1); // LU Factorization with LAPACK if (keepIntact) { MatrixImplementation A(*this); dsytrf_(&uplo, &n, &A[0], &n, &ipiv[0],&lwork_d, &lwork, &info, &luplo); lwork = static_cast(lwork_d); Point work(lwork); dsytrf_(&uplo, &n, &A[0], &n, &ipiv[0],&work[0], &lwork, &info, &luplo); // Determinant computation for (UnsignedInteger i = 0; i < static_cast(n); ++i) { determinant *= A[i * (ipiv.size() + 1)]; if (ipiv[i] != int(i + 1)) determinant = -determinant; } } else { dsytrf_(&uplo, &n, &(*this)[0], &n, &ipiv[0],&lwork_d, &lwork, &info, &luplo); lwork = static_cast(lwork_d); Point work(lwork); dsytrf_(&uplo, &n, &(*this)[0], &n, &ipiv[0],&work[0], &lwork, &info, &luplo); // Determinant computation for (UnsignedInteger i = 0; i < static_cast(n); ++i) { determinant *= (*this)[i * (ipiv.size() + 1)]; if (ipiv[i] != int(i + 1)) determinant = -determinant; } } return determinant; */ } /* Compute determinant for a symmetric matrix */ Scalar MatrixImplementation::computeDeterminantSym (const Bool keepIntact) { if (nbRows_ == 1) return (*this)(0, 0); if (nbRows_ == 2) return (*this)(0, 0) * (*this)(1, 1) - (*this)(1, 0) * (*this)(1, 0); Scalar sign = 0.0; const Scalar logAbsoluteDeterminant = computeLogAbsoluteDeterminant(sign, keepIntact); if (logAbsoluteDeterminant == SpecFunc::LogMinScalar) return 0.0; return sign * exp(logAbsoluteDeterminant); } /* Compute trace */ Scalar MatrixImplementation::computeTrace() const { Scalar trace = 0.0; for (UnsignedInteger i = 0; i < nbRows_; ++i) trace += (*this)(i, i); return trace; } /* Compute the eigenvalues of a square matrix */ MatrixImplementation::ComplexCollection MatrixImplementation::computeEigenValuesSquare (const Bool keepIntact) { int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the eigenvalues of an empty matrix"; char jobvl('N'); char jobvr('N'); Point wr(n, 0.0); Point wi(n, 0.0); double vl = 0.; double vr = 0.; int ldvl(1); int ldvr(1); int lwork(-1); double lwork_d = -1.; int info = -1; int ljobvl(1); int ljobvr(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dgeev_(&jobvl, &jobvr, &n, &A[0], &n, &wr[0], &wi[0], &vl, &ldvl, &vr, &ldvr, &lwork_d, &lwork, &info, &ljobvl, &ljobvr); lwork = static_cast(lwork_d); Point work(lwork); dgeev_(&jobvl, &jobvr, &n, &A[0], &n, &wr[0], &wi[0], &vl, &ldvl, &vr, &ldvr, &work[0], &lwork, &info, &ljobvl, &ljobvr); if (info != 0) throw InternalException(HERE) << "Error: the QR algorithm failed to converge."; ComplexCollection eigenValues(n); for (UnsignedInteger i = 0; i < static_cast(n); ++i) eigenValues[i] = Complex(wr[i], wi[i]); return eigenValues; } MatrixImplementation::ComplexCollection MatrixImplementation::computeEVSquare (ComplexMatrixImplementation & v, const Bool keepIntact) { int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the eigenvalues of an empty matrix"; char jobvl('N'); char jobvr('V'); Point wr(n, 0.0); Point wi(n, 0.0); double vl; MatrixImplementation vr(n, n); int ldvl(1); int ldvr(n); int lwork(-1); double lwork_d; int info; int ljobvl(1); int ljobvr(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dgeev_(&jobvl, &jobvr, &n, &A[0], &n, &wr[0], &wi[0], &vl, &ldvl, &vr[0], &ldvr, &lwork_d, &lwork, &info, &ljobvl, &ljobvr); lwork = static_cast(lwork_d); Point work(lwork); dgeev_(&jobvl, &jobvr, &n, &A[0], &n, &wr[0], &wi[0], &vl, &ldvl, &vr[0], &ldvr, &work[0], &lwork, &info, &ljobvl, &ljobvr); // Cast the eigenvalues into OpenTURNS data structures ComplexCollection eigenValues(n); for (UnsignedInteger i = 0; i < static_cast(n); ++i) { eigenValues[i] = Complex(wr[i], wi[i]); } if (info != 0) throw InternalException(HERE) << "Error: the QR algorithm failed to converge."; // Cast the eigenvectors into OpenTURNS data structures v = ComplexMatrixImplementation(n, n); UnsignedInteger j = 0; while (j < static_cast(n)) { // Real eigenvalue if (wi[j] == 0.0) { for (UnsignedInteger i = 0; i < static_cast(n); ++i) v(i, j) = vr(i, j); ++j; } // Complex conjugate pair of eigenvalues else { for (UnsignedInteger i = 0; i < static_cast(n); ++i) { v(i, j) = Complex(vr(i, j), vr(i, j + 1)); v(i, j + 1) = Complex(vr(i, j), -vr(i, j + 1)); } j += 2; } } // Conversion of eigenvectors return eigenValues; } /* Compute the eigenvalues of a symmetric matrix */ Point MatrixImplementation::computeEigenValuesSym (const Bool keepIntact) { int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the eigenvalues of an empty matrix"; char jobz('N'); char uplo('L'); Point w(n, 0.0); int lwork(-1); double lwork_d; int info; int ljobz(1); int luplo(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dsyev_(&jobz, &uplo, &n, &A[0], &n, &w[0], &lwork_d, &lwork, &info, &ljobz, &luplo); lwork = static_cast(lwork_d); Point work(lwork); dsyev_(&jobz, &uplo, &n, &A[0], &n, &w[0], &work[0], &lwork, &info, &ljobz, &luplo); if (info != 0) throw InternalException(HERE) << "Error: the QR algorithm failed to converge."; return w; } Point MatrixImplementation::computeEVSym (MatrixImplementation & v, const Bool keepIntact) { int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the eigenvalues of an empty matrix"; char jobz('V'); char uplo('L'); Point w(n, 0.0); int lwork(-1); double lwork_d; int info; int ljobz(1); int luplo(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; dsyev_(&jobz, &uplo, &n, &A[0], &n, &w[0], &lwork_d, &lwork, &info, &ljobz, &luplo); lwork = static_cast(lwork_d); Point work(lwork); dsyev_(&jobz, &uplo, &n, &A[0], &n, &w[0], &work[0], &lwork, &info, &ljobz, &luplo); v = A; if (info != 0) throw InternalException(HERE) << "Error: the QR algorithm failed to converge."; return w; } /* Compute the singular values of a matrix */ Point MatrixImplementation::computeSingularValues(const Bool keepIntact) { int m(nbRows_); int n(nbColumns_); if ((m == 0) || (n == 0)) throw InvalidDimensionException(HERE) << "Cannot compute the singular values of an empty matrix"; char jobz('N'); Point S(std::min(m, n), 0.0); Point work(1, 0.0); MatrixImplementation u(1, 1); int ldu(1); int ldvt(1); MatrixImplementation vT(1, 1); int lwork(-1); std::vector iwork(8 * std::min(m, n)); int info(0); int ljobz(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; // First call to compute the optimal work size dgesdd_(&jobz, &m, &n, &A[0], &m, &S[0], &u[0], &ldu, &vT[0], &ldvt, &work[0], &lwork, &iwork[0], &info, &ljobz); lwork = static_cast(work[0]); work = Point(lwork, 0.0); // Second call to compute the SVD dgesdd_(&jobz, &m, &n, &A[0], &m, &S[0], &u[0], &ldu, &vT[0], &ldvt, &work[0], &lwork, &iwork[0], &info, &ljobz); if (info != 0) throw InternalException(HERE) << "Error: the updating process failed."; return S; } /* Compute the singular values and singular decomposition of a matrix */ Point MatrixImplementation::computeSVD(MatrixImplementation & u, MatrixImplementation & vT, const Bool fullSVD, const Bool keepIntact) { int m(nbRows_); int n(nbColumns_); if ((m == 0) || (n == 0)) throw InvalidDimensionException(HERE) << "Cannot compute the singular values decomposition of an empty matrix"; char jobz( fullSVD ? 'A' : 'S'); int ldu(m); u = MatrixImplementation(m, ( fullSVD ? m : std::min(m, n))); int ldvt = (fullSVD ? n : std::min(m, n)); vT = MatrixImplementation(( fullSVD ? n : std::min(m, n)), n); Point S(std::min(m, n), 0.0); Point work(1, 0.0); int lwork(-1); std::vector iwork(8 * std::min(m, n)); int info(0); int ljobz(1); MatrixImplementation Q; if (keepIntact) Q = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? Q : *this; // First call to compute the optimal work size dgesdd_(&jobz, &m, &n, &A[0], &m, &S[0], &u[0], &ldu, &vT[0], &ldvt, &work[0], &lwork, &iwork[0], &info, &ljobz); lwork = static_cast(work[0]); work = Point(lwork, 0.0); // Second call to compute the SVD dgesdd_(&jobz, &m, &n, &A[0], &m, &S[0], &u[0], &ldu, &vT[0], &ldvt, &work[0], &lwork, &iwork[0], &info, &ljobz); if (info != 0) throw InternalException(HERE) << "Error: LAPACK trouble in computing SVD decomposition, return code is " << info; return S; } /* Check if the matrix is SPD */ Bool MatrixImplementation::isPositiveDefinite(const Bool keepIntact) { int info; int n(nbRows_); if (n == 0) throw InvalidDimensionException(HERE) << "Cannot check the definite positiveness of an empty matrix"; char uplo('L'); int luplo(1); if (keepIntact) { MatrixImplementation A(*this); dpotrf_(&uplo, &n, &A[0], &n, &info, &luplo); } else dpotrf_(&uplo, &n, &(*this)[0], &n, &info, &luplo); return (info == 0) ; } MatrixImplementation::ScalarCollection MatrixImplementation::triangularVectProd(const ScalarCollection & pt, const char side) const { char uplo(side); int luplo(1); // trans tells if the matrix is transposed or not char trans('N'); int ltrans(1); // diag tells if M is unit diagonal or not char diag('N'); int ldiag(1); // the dimension of the matrix int n(nbRows_); // leading dimension of M int lda(nbRows_); int one(1); ScalarCollection x(nbRows_); for (UnsignedInteger i = 0; i < pt.getSize(); ++i) x[i] = pt[i]; dtrmv_(&uplo, &trans, &diag, &n, const_cast(&((*this)[0])), &lda, const_cast(&(x[0])), &one, &luplo, <rans, &ldiag); return x; } MatrixImplementation::ScalarCollection MatrixImplementation::triangularVectProd(const Point & pt, const char side) const { return triangularVectProd(pt.getCollection(), side); } /* Build the Cholesky factorization of the matrix */ MatrixImplementation MatrixImplementation::computeCholesky(const Bool keepIntact) { int n = nbRows_; if (n == 0) throw InvalidDimensionException(HERE) << "Cannot compute the Cholesky decomposition of an empty matrix"; int info = 0; char uplo = 'L'; int luplo = 1; MatrixImplementation L; if (keepIntact) L = MatrixImplementation(*this); MatrixImplementation & A = keepIntact ? L : *this; dpotrf_(&uplo, &n, &A[0], &n, &info, &luplo); if (info != 0) throw InternalException(HERE) << "Error: the matrix is not definite positive."; for (UnsignedInteger j = 0; j < (UnsignedInteger)(n); ++ j) for (UnsignedInteger i = 0; i < j; ++ i) A(i, j) = 0.0; A.setName(""); return A; } /* Update in-place the Cholesky factor L of an SPD matrix M given a rank-one update vv^T, ie L becomes Lnew such that LnewLnew^t = Mnew with Mnew = M + vv^t */ void MatrixImplementation::CholeskyUpdate(MatrixImplementation & cholesky, const Point & vector) { UnsignedInteger dimension = cholesky.nbRows_; if (dimension != cholesky.nbColumns_) throw InvalidDimensionException(HERE) << "Cannot update a non-square Cholesky factor"; if (dimension != vector.getDimension()) throw InvalidDimensionException(HERE) << "Incompatible Cholesky factor dimension and vector dimension"; // Working copy of vector Point work(vector); int size = dimension; int one = 1; UnsignedInteger shift = 0; // Parameters of the Givens rotation double cosI = 0.; double sinI = 0.; for (UnsignedInteger i = 0; i < dimension - 1; ++i) { // Generate Givens rotation drotg_(&cholesky[shift], &work[i], &cosI, &sinI); // Flip rotation if negative diagonal entry if (cholesky[shift] < 0.0) { cholesky[shift] = -cholesky[shift]; cosI = -cosI; sinI = -sinI; } --size; // Perform the rotation drot_(&size, &cholesky[shift + 1], &one, &work[i + 1], &one, &cosI, &sinI); shift += dimension + 1; } // Last rotation // Generate Givens rotation drotg_(&cholesky[shift], &work[dimension - 1], &cosI, &sinI); // Flip rotation if negative diagonal entry if (cholesky[shift] < 0.0) cholesky[shift] = -cholesky[shift]; } /* Downdate in-place the Cholesky factor L of an SPD matrix M given a rank-one downdate vv^T, ie L becomes Lnew such that LnewLnew^t = Mnew with Mnew = M - vv^t */ void MatrixImplementation::CholeskyDowndate(MatrixImplementation & cholesky, const Point & vector) { UnsignedInteger dimension = cholesky.nbRows_; if (dimension != cholesky.nbColumns_) throw InvalidDimensionException(HERE) << "Cannot update a non-square Cholesky factor"; if (dimension != vector.getDimension()) throw InvalidDimensionException(HERE) << "Incompatible Cholesky factor dimension and vector dimension"; // Working copy of vector Point work(cholesky.solveLinearSystemTri(vector)); // Parameters of the Givens rotation Scalar qs = sqrt(1.0 - work.normSquare()); Point cosI(dimension); Point sinI(dimension); for (SignedInteger i = dimension - 1; i >= 0; --i) { // Generate Givens rotation drotg_(&qs, &work[i], &cosI[i], &sinI[i]); // Flip rotation if negative diagonal entry if (qs < 0.0) { qs = -qs; cosI[i] = -cosI[i]; sinI[i] = -sinI[i]; } } work = Point(dimension, 0.0); int size(0); int one(1); UnsignedInteger shift = (dimension - 1) * (dimension + 1); for (SignedInteger i = dimension - 1; i >= 0; --i) { ++size; // Perform the rotation drot_(&size, &work[i], &one, &cholesky[shift], &one, &cosI[i], &sinI[i]); if (cholesky[shift] < 0.0) { qs = -1.0; dscal_(&size, &qs, &cholesky[shift], &one); } shift -= dimension + 1; } } /* Build the QR factorization of the mxn matrix A Case m >= n: [R] A = [Q1 Q2][0] with Q1 a mxn matrix, Q2 a (m-n)xm matrix, R a nxn upper triangular matrix. [R] If fullQR == true, the matrices [Q1 Q2] and [0] are returned Else it is the matrices [Q1] and [R] that are returned. Case m < n: A = [Q][R1 R2] with Q a mxm matrix, R1 a mxm upper triangular matrix, R2 a mx(m-n) matrix. If fullQR == true or false, the matrices [Q] and [R1 R2] are returned */ MatrixImplementation MatrixImplementation::computeQR(MatrixImplementation & R, const Bool fullQR, const Bool keepIntact) { int m = nbRows_; int n = nbColumns_; int lda = nbRows_; if ((m == 0) || (n == 0)) throw InvalidDimensionException(HERE) << "Cannot compute the QR decomposition of an empty matrix"; int k = std::min(m, n); Point tau(k); int lwork = -1; int info = -1; double lwork_d = -1.; MatrixImplementation A; if (keepIntact) A = MatrixImplementation(*this); MatrixImplementation & Q = keepIntact ? A : *this; // First call to dgeqrf to get the optimal size for the working space dgeqrf_(&m, &n, &Q[0], &lda, &tau[0], &lwork_d, &lwork, &info); if (info != 0) throw InternalException(HERE) << "Lapack DGEQRF: error code=" << info; // Here is the optimal size of the working space lwork = static_cast(lwork_d); Point work(lwork); // Second call to compute the decomposition dgeqrf_(&m, &n, &Q[0], &lda, &tau[0], &work[0], &lwork, &info); if (info != 0) throw InternalException(HERE) << "Lapack DGEQRF: error code=" << info; // Rebuild R int p(fullQR ? m : k); R = MatrixImplementation(p, n); for ( UnsignedInteger i = 0; i < static_cast(k) ; ++ i ) for ( UnsignedInteger j = i; j < static_cast(n); ++ j ) R(i, j) = Q(i, j); // Rebuild Q // It is done using the product of the reflectors computed by dgeqrf // First call to dorgqr to get the optimal size for the working space lwork = -1; dorgqr_(&m, &p, &k, &Q[0], &lda, &tau[0], &lwork_d, &lwork, &info); if (info != 0) throw InternalException(HERE) << "Lapack DORGQR: error code=" << info; // Here is the optimal size of the working space lwork = static_cast(lwork_d); work = Point(lwork); // Second call to compute the product of reflectors if (fullQR && (m > n)) { // Here we must copy Q into a larger matrix to get the desired mxm Q factor before the call to dorgqr Q.resize(m * m); Q.nbRows_ = m; Q.nbColumns_ = m; } dorgqr_(&m, &p, &k, &Q[0], &lda, &tau[0], &work[0], &lwork, &info); if (m < n) { // Here we must copy Q into a smaller matrix to get the desired mxm Q factor after the call to dorgqr Q.resize(m * m); Q.nbRows_ = m; Q.nbColumns_ = m; } if (info != 0) throw InternalException(HERE) << "Lapack DORGQR: error code=" << info; Q.setName(""); return Q; } /* Method save() stores the object through the StorageManager */ void MatrixImplementation::save(Advocate & adv) const { PersistentCollection::save(adv); adv.saveAttribute( "nbRows_", nbRows_); adv.saveAttribute( "nbColumns_", nbColumns_); } /* Method load() reloads the object from the StorageManager */ void MatrixImplementation::load(Advocate & adv) { PersistentCollection::load(adv); adv.loadAttribute( "nbRows_", nbRows_); adv.loadAttribute( "nbColumns_", nbColumns_); } const Scalar* MatrixImplementation::__baseaddress__() const { return &(*this)[0]; } UnsignedInteger MatrixImplementation::__elementsize__() const { return sizeof(Scalar); } UnsignedInteger MatrixImplementation::__stride__(UnsignedInteger dim) const { UnsignedInteger stride = __elementsize__(); if (dim > 0) stride *= nbRows_; return stride; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/Point.cxx000066400000000000000000000222751307543307100204000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Point implements the classical mathematical point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Point.hxx" #include "openturns/Exception.hxx" #include "openturns/StorageManager.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Lapack.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Point); static const Factory > Factory_PersistentCollection_Scalar; static const Factory Factory_Point; /* Default constructor */ Point::Point() : PersistentCollection() //, // p_description_() { // Nothing to do } /* Constructor with size */ Point::Point(const UnsignedInteger size, const Scalar value) : PersistentCollection(size, value) { // Nothing to do } /* Constructor from a collection */ Point::Point(const Collection & coll) : PersistentCollection(coll) { // Nothing to do } /* Virtual constructor */ Point * Point::clone() const { return new Point(*this); } void Point::setDescription(const Description & description) { // Nothing to do } Description Point::getDescription() const { return Description( getDimension() ); } /* Set small elements to zero */ Point Point::clean(const Scalar threshold) const { // Nothing to do for nonpositive threshold if (threshold <= 0.0) return *this; const UnsignedInteger size = getSize(); Point result(size, 0.0); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar value = (*this)[i]; // Things are done this way to prevent spurious -0.0 if (std::abs(value) < 0.5 * threshold) result[i] = 0.0; else result[i] = threshold * round(value / threshold); } return result; } /* String converter */ String Point::__repr__() const { return OSS(true) << "class=" << Point::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " values=" << PersistentCollection::__repr__(); } String Point::__str__(const String & offset) const { return PersistentCollection::__str__(offset); } /* Erase the elements between first and last */ Point::iterator Point::erase(const iterator first, const iterator last) { return PersistentCollection::erase(first, last); } /* Erase the element pointed by position */ Point::iterator Point::erase(iterator position) { return PersistentCollection::erase(position); } /* Erase the element pointed by position */ Point::iterator Point::erase(UnsignedInteger position) { return PersistentCollection::erase(begin() + position); } /* Addition operator */ Point operator + (const Point & lhs, const Point & rhs) { int n = lhs.getDimension(); if (n != (int)rhs.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be added (LHS dimension = " << n << "; RHS dimension = " << rhs.getDimension(); // We create a Point of the same dimension as both points for holding the result Point result(lhs); double alpha = 1.0; int one = 1; daxpy_(&n, &alpha, const_cast(&rhs[0]), &one, &result[0], &one); return result; } /* In-place addition operator */ Point & Point::operator +=(const Point & other) { int n = getDimension(); if (n != (int)other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be added (LHS dimension = " << n << "; RHS dimension = " << other.getDimension(); double alpha = 1.0; int one = 1; daxpy_(&n, &alpha, const_cast(&other[0]), &one, &(*this)[0], &one); return *this; } /* Substraction operator */ Point operator - (const Point & lhs, const Point & rhs) { int n = lhs.getDimension(); if (n != (int)rhs.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be substracted (LHS dimension = " << n << "; RHS dimension = " << rhs.getDimension(); // We create a Point of the same dimension as both points for holding the result Point result(lhs); double alpha = -1.0; int one = 1; daxpy_(&n, &alpha, const_cast(&rhs[0]), &one, &result[0], &one); return result; } /* In-place substraction operator */ Point & Point::operator -=(const Point & other) { int n = getDimension(); if (n != (int)other.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be substracted (LHS dimension = " << n << "; RHS dimension = " << other.getDimension(); double alpha = -1.0; int one = 1; daxpy_(&n, &alpha, const_cast(&other[0]), &one, &(*this)[0], &one); return *this; } /* Product operator */ Point operator *(const Point & point, const Scalar scalar) { int n = point.getDimension(); double alpha = scalar; Point result(point); int one = 1; dscal_(&n, &alpha, &result[0], &one); return result; } Point operator *(const Scalar scalar, const Point & point) { int n = point.getDimension(); double alpha = scalar; Point result(point); int one = 1; dscal_(&n, &alpha, &result[0], &one); return result; } /* In-place product operator */ Point & Point::operator *=(const Scalar scalar) { int n = getDimension(); double alpha = scalar; int one = 1; dscal_(&n, &alpha, &(*this)[0], &one); return *this; } /* Division operator */ Point operator /(const Point & point, const Scalar scalar) { if (scalar == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot divide by 0."; int n = point.getDimension(); double alpha = 1.0 / scalar; Point result(point); int one = 1; dscal_(&n, &alpha, &result[0], &one); return result; } /* In-place division operator */ Point & Point::operator /=(const Scalar scalar) { if (scalar == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot divide by 0."; int n = getDimension(); double alpha = 1.0 / scalar; int one = 1; dscal_(&n, &alpha, &(*this)[0], &one); return *this; } /* Dot product operator */ Scalar dot(const Point & lhs, const Point & rhs) { int n = lhs.getDimension(); if (n != (int)rhs.getDimension()) throw InvalidArgumentException(HERE) << "Points of different dimensions cannot be added (LHS dimension = " << n << "; RHS dimension = " << rhs.getDimension(); int one = 1; return ddot_(&n, const_cast(&lhs[0]), &one, const_cast(&rhs[0]), &one); } /* Comparison operator */ Bool operator ==(const Point & lhs, const Point & rhs) { return static_cast >(lhs) == static_cast >(rhs); } /* Ordering operator */ Bool operator <(const Point & lhs, const Point & rhs) { return static_cast >(lhs) < static_cast >(rhs); } /* Norm */ Scalar Point::norm() const { int n(getDimension()); int one(1); return dnrm2_(&n, const_cast(&(*this)[0]), &one); } /* l1-norm */ Scalar Point::norm1() const { int n(getDimension()); int one(1); return dasum_(&n, const_cast(&(*this)[0]), &one); } /* linf-norm */ Scalar Point::normInf() const { const UnsignedInteger dimension = getDimension(); if (dimension == 0) return 0.0; const Scalar minValue = *std::min_element(begin(), end()); const Scalar maxValue = *std::max_element(begin(), end()); return std::max(maxValue, -minValue); } /* Norm^2 */ Scalar Point::normSquare() const { return dot(*this, *this); } /* Normalize */ Point Point::normalize() const { const Scalar theNorm = norm(); if (theNorm == 0.0) throw InternalException(HERE) << "Error: cannot normalize a null vector"; return (*this) / theNorm; } /* Square normalize */ Point Point::normalizeSquare() const { const Scalar theNormSquare = normSquare(); if (theNormSquare == 0.0) throw InternalException(HERE) << "Error: cannot square normalize a null vector"; Point result(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++i) result[i] = pow((*this)[i], 2) / theNormSquare; return result; } /* Method save() stores the object through the StorageManager */ void Point::save(Advocate & adv) const { PersistentCollection::save(adv); } /* Method load() reloads the object from the StorageManager */ void Point::load(Advocate & adv) { PersistentCollection::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/PointWithDescription.cxx000066400000000000000000000103061307543307100234300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PointWithDescription extends the classical mathematical point with a description of the coordinates * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PointWithDescription.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PointWithDescription); TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory Factory_PointWithDescription; static const Factory > Factory_PersistentCollection_PointWithDescription; /* Default constructor */ PointWithDescription::PointWithDescription() : Point() , description_() { // Nothing to do } /* Constructor with size */ PointWithDescription::PointWithDescription(const UnsignedInteger size, const Scalar value) : Point(size, value) , description_(size) { // Nothing to do } /* Constructor from a collection */ PointWithDescription::PointWithDescription(const Collection & coll) : Point(coll) , description_(coll.getSize()) { // Nothing to do } /* Constructor from a base class */ PointWithDescription::PointWithDescription(const Pointer & p_base) : Point(*p_base) , description_(p_base->getSize()) { // Nothing to do } /* Virtual constructor */ PointWithDescription * PointWithDescription::clone() const { return new PointWithDescription(*this); } /* Destructor */ PointWithDescription::~PointWithDescription() throw() { // Nothing to do } /* String converter */ String PointWithDescription::__repr__() const { return OSS() << "class=" << PointWithDescription::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " description=" << getDescription() << " values=" << PersistentCollection::__repr__(); } class KeyValuePair : public Object { String key_; Scalar value_; public: KeyValuePair(const String & key = "", Scalar value = 0.): key_(key), value_(value) {} String __repr__() const { return OSS() << key_ << " : " << value_; } String __str__(const String & offset) const { return OSS() << key_ << " : " << value_; } }; String PointWithDescription::__str__(const String & offset) const { const UnsignedInteger size = getSize(); const Description desc = getDescription(); std::vector assoc(size); for (UnsignedInteger i = 0; i < size; ++i) assoc[i] = KeyValuePair(i < desc.getSize() ? desc[i] : "", (*this)[i]); OSS oss(false); oss << "["; std::copy(assoc.begin(), assoc.end(), OSS_iterator(oss, ", ")); oss << "]"; return oss; } /* Description Accessor */ void PointWithDescription::setDescription(const Description & description) { if (description.getSize() != getDimension()) throw InvalidArgumentException(HERE) << "Description has incorrect dimension (" << description.getSize() << "). Expected " << getDimension(); description_ = description; } /* Description Accessor */ Description PointWithDescription::getDescription() const { return description_; } /* Method save() stores the object through the StorageManager */ void PointWithDescription::save(Advocate & adv) const { Point::save(adv); adv.saveAttribute( "description_", description_ ); } /* Method load() reloads the object from the StorageManager */ void PointWithDescription::load(Advocate & adv) { Point::load(adv); adv.loadAttribute( "description_", description_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/SquareComplexMatrix.cxx000066400000000000000000000137111307543307100232570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SquareComplexMatrix implements the classical mathematical square matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SquareComplexMatrix.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/IdentityMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SquareComplexMatrix); /* Default constructor */ SquareComplexMatrix::SquareComplexMatrix() : ComplexMatrix(0, 0) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ SquareComplexMatrix::SquareComplexMatrix(const UnsignedInteger dimension) : ComplexMatrix(dimension, dimension) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ SquareComplexMatrix::SquareComplexMatrix(const UnsignedInteger dimension, const ComplexCollection & elementsValues) : ComplexMatrix(dimension, dimension, elementsValues) { // Nothing to do } /* Constructor with implementation */ SquareComplexMatrix::SquareComplexMatrix(const Implementation & i) : ComplexMatrix(i) { // Nothing to do } /* Constructor from hermitian matrix */ SquareComplexMatrix::SquareComplexMatrix(const HermitianMatrix & hermitian) : ComplexMatrix(hermitian) { // Nothing to do } /* String converter */ String SquareComplexMatrix::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } /* Get the dimension of the matrix */ UnsignedInteger SquareComplexMatrix::getDimension() const { return getImplementation()->getDimension(); } /* SquareComplexMatrix transpose */ SquareComplexMatrix SquareComplexMatrix::transpose () const { // Quick return for empty or scalar SquareComplexMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->transpose().clone()); } SquareComplexMatrix SquareComplexMatrix::conjugate () const { // Quick return for empty or scalar SquareComplexMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->conjugate().clone()); } SquareComplexMatrix SquareComplexMatrix::conjugateTranspose () const { // Quick return for empty or scalar SquareComplexMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->conjugateTranspose().clone()); } /* Matrix additions (must have the same dimensions) */ SquareComplexMatrix SquareComplexMatrix::operator+ (const SquareComplexMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } SquareComplexMatrix SquareComplexMatrix::operator+ (const HermitianMatrix & m) const { m.getImplementation()->hermitianize(); return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* Matrix substractions (must have the same dimensions) */ SquareComplexMatrix SquareComplexMatrix::operator- (const SquareComplexMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } SquareComplexMatrix SquareComplexMatrix::operator- (const HermitianMatrix & m) const { m.getImplementation()->hermitianize(); return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* Matrix multiplications (must have consistent dimensions) */ SquareComplexMatrix SquareComplexMatrix::operator* (const SquareComplexMatrix & m) const { return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } ComplexMatrix SquareComplexMatrix::operator* (const ComplexMatrix & m) const { return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } SquareComplexMatrix SquareComplexMatrix::operator* (const HermitianMatrix & m) const { return Implementation(getImplementation()->hermProd(*(m.getImplementation()), 'R').conjugateTranspose().clone()); } SquareComplexMatrix SquareComplexMatrix::operator* (const IdentityMatrix & m) const { return *this; } /* Multiplication with a Point (must have consistent dimensions) */ SquareComplexMatrix::ComplexCollection SquareComplexMatrix::operator * (const Point & pt) const { return getImplementation()->genVectProd(pt) ; } /* Multiplication with a Point (must have consistent dimensions) */ SquareComplexMatrix::ComplexCollection SquareComplexMatrix::operator * (const ComplexCollection & pt) const { return getImplementation()->genVectProd(pt) ; } SquareComplexMatrix::ComplexCollection SquareComplexMatrix::operator * (const ScalarCollection & pt) const { return getImplementation()->genVectProd(pt) ; } /* Multiplication with a Complex */ SquareComplexMatrix SquareComplexMatrix::operator * (const Complex s) const { return Implementation((*getImplementation() * s ).clone()); } /* Division by a Complex*/ SquareComplexMatrix SquareComplexMatrix::operator / (const Complex s) const { return Implementation((*getImplementation() / s ).clone()); } /* SquareComplexMatrix integer power */ SquareComplexMatrix SquareComplexMatrix::power(const UnsignedInteger n) const { return Implementation(getImplementation()->genPower(n).clone()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/SquareMatrix.cxx000066400000000000000000000153331307543307100217310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SquareMatrix implements the classical mathematical square matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SquareMatrix.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SquareMatrix); /* Default constructor */ SquareMatrix::SquareMatrix() : Matrix(0, 0) { // Nothing to do } /* Constructor with implementation */ SquareMatrix::SquareMatrix(const Implementation & i) : Matrix(i) { if (getNbRows() != getNbColumns()) throw InvalidDimensionException(HERE) << "The matrix provided is not square : rows=" << getNbRows() << " columns=" << getNbColumns(); } /* Constructor with implementation */ SquareMatrix::SquareMatrix(const MatrixImplementation & i) : Matrix(i) { if (getNbRows() != getNbColumns()) throw InvalidDimensionException(HERE) << "The matrix provided is not square : rows=" << getNbRows() << " columns=" << getNbColumns(); } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ SquareMatrix::SquareMatrix(const UnsignedInteger dim) : Matrix(dim, dim) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ SquareMatrix::SquareMatrix(const UnsignedInteger dim, const ScalarCollection & elementsValues) : Matrix(dim, dim, elementsValues) { // Nothing to do } SquareMatrix::SquareMatrix(const SymmetricMatrix & symmetric) : Matrix(symmetric) { // Nothing to do } /* String converter */ String SquareMatrix::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } /* Get the dimension of the matrix */ UnsignedInteger SquareMatrix::getDimension() const { return getImplementation()->getDimension(); } /* SquareMatrix transpose */ SquareMatrix SquareMatrix::transpose () const { // Quick return for empty or scalar SquareMatrix if (getDimension() <= 1) return (*this); return Implementation(getImplementation()->transpose().clone()); } /* Matrix additions (must have the same dimensions) */ SquareMatrix SquareMatrix::operator + (const SquareMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } SquareMatrix SquareMatrix::operator + (const SymmetricMatrix & m) const { m.getImplementation()->symmetrize(); return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* Matrix substractions (must have the same dimensions) */ SquareMatrix SquareMatrix::operator - (const SquareMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } SquareMatrix SquareMatrix::operator - (const SymmetricMatrix & m) const { m.getImplementation()->symmetrize(); return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* Matrix multiplications (must have consistent dimensions) */ SquareMatrix SquareMatrix::operator * (const SquareMatrix & m) const { return Implementation((getImplementation()->genProd(*(m.getImplementation())) ).clone()); } SquareMatrix SquareMatrix::operator * (const SymmetricMatrix & m) const { return Implementation(m.getImplementation()->symProd(*getImplementation(), 'R').clone()); } SquareMatrix SquareMatrix::operator * (const IdentityMatrix & m) const { return *this; } /* Multiplication with a Point (must have consistent dimensions) */ Point SquareMatrix::operator * (const Point & pt) const { return getImplementation()->genVectProd(pt) ; } /* Multiplication with a Scalar */ SquareMatrix SquareMatrix::operator * (const Scalar s) const { return Implementation((*getImplementation() * s ).clone()); } /* Division by a Scalar*/ SquareMatrix SquareMatrix::operator / (const Scalar s) const { return Implementation((*getImplementation() / s ).clone()); } /* SquareMatrix integer power */ SquareMatrix SquareMatrix::power(const UnsignedInteger n) const { return Implementation(getImplementation()->genPower(n).clone()); } /* Resolution of a linear system */ Point SquareMatrix::solveLinearSystem(const Point & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemSquare(b, keepIntact); } Matrix SquareMatrix::solveLinearSystem(const Matrix & b, const Bool keepIntact) { return Implementation(getImplementation()->solveLinearSystemSquare(*b.getImplementation(), keepIntact).clone()); } /* Compute determinant */ Scalar SquareMatrix::computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact) { return getImplementation()->computeLogAbsoluteDeterminant(sign, keepIntact); } Scalar SquareMatrix::computeDeterminant(const Bool keepIntact) { return getImplementation()->computeDeterminant(keepIntact); } /* Compute trace */ Scalar SquareMatrix::computeTrace() const { return getImplementation()->computeTrace(); } /* Compute eigenvalues */ SquareMatrix::ComplexCollection SquareMatrix::computeEigenValues(const Bool keepIntact) { return getImplementation()->computeEigenValuesSquare(keepIntact); } SquareMatrix::ComplexCollection SquareMatrix::computeEV(SquareComplexMatrix & v, const Bool keepIntact) { return getImplementation()->computeEVSquare(*(v.getImplementation()), keepIntact); } /* Check if the matrix is diagonal */ Bool SquareMatrix::isDiagonal() const { // The loops must be done in this order in order to use the quick accessor // of the underlying implementation. for (UnsignedInteger j = 0; j < getDimension(); ++j) { for (UnsignedInteger i = 0; i < j; ++i) if ((*getImplementation())(i, j) != 0.0) return false; for (UnsignedInteger i = j + 1; i < getDimension(); ++i) if ((*getImplementation())(i, j) != 0.0) return false; } return true; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/SymmetricMatrix.cxx000066400000000000000000000214741307543307100224500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SymmetricMatrix implements the classical mathematical symmetric matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymmetricMatrix); /* Default constructor */ SymmetricMatrix::SymmetricMatrix() : SquareMatrix(0) , hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor with implementation */ SymmetricMatrix::SymmetricMatrix(const Implementation & i) : SquareMatrix(i) , hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor with implementation */ SymmetricMatrix::SymmetricMatrix(const MatrixImplementation & i) : SquareMatrix(i) , hasBeenSymmetrized_(false) { // Nothing to do } /* Copy constructor, added to solve glitches with inheritance */ SymmetricMatrix::SymmetricMatrix(const SymmetricMatrix & s) : SquareMatrix(static_cast(s)) , hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ SymmetricMatrix::SymmetricMatrix(const UnsignedInteger dim) : SquareMatrix(dim) , hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor from external collection */ /* If the dimensions of the matrix and of the collection */ /* do not match, either the collection is truncated */ /* or the rest of the matrix is filled with zeros */ SymmetricMatrix::SymmetricMatrix(const UnsignedInteger dim, const Collection & elementsValues) : SquareMatrix(dim, elementsValues) , hasBeenSymmetrized_(false) { // Nothing to do } /* Check if the internal representation is actually symmetric */ void SymmetricMatrix::checkSymmetry() const { if (!hasBeenSymmetrized_) { getImplementation()->symmetrize(); hasBeenSymmetrized_ = true; } } /* Test if the matrix is diagonal */ Bool SymmetricMatrix::isDiagonal() const { // The loops must be done in this order in order to use the quick accessor // of the underlying implementation without symmetrization of the matrix. // We know that the storage is made column-wise, using the upper triangle for (UnsignedInteger j = 0; j < getDimension(); ++j) for (UnsignedInteger i = j + 1; i < getDimension(); ++i) if ((*getImplementation())(i, j) != 0.0) return false; return true; } /* Row extraction */ const Matrix SymmetricMatrix::getRow(const UnsignedInteger rowIndex) const { return Implementation(getImplementation()->getRowSym(rowIndex).clone()); } /* Column extration */ const Matrix SymmetricMatrix::getColumn(const UnsignedInteger columnIndex) const { return Implementation(getImplementation()->getColumnSym(columnIndex).clone()); } /* String converter */ String SymmetricMatrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } String SymmetricMatrix::__str__(const String & offset) const { checkSymmetry(); return SquareMatrix::clean(0.0).__str__(); } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Scalar & SymmetricMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { copyOnWrite(); hasBeenSymmetrized_ = false; return (i > j) ? (*getImplementation())(i, j) : (*getImplementation())(j, i) ; } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Scalar & SymmetricMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (i > j) ? (*getImplementation())(i, j) : (*getImplementation())(j, i) ; } /* SymmetricMatrix transpose */ SymmetricMatrix SymmetricMatrix::transpose () const { return *this; } /* SymmetricMatrix additions (must have the same dimensions) */ Matrix SymmetricMatrix::operator + (const Matrix & m) const { checkSymmetry(); return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } SquareMatrix SymmetricMatrix::operator + (const SquareMatrix & m) const { checkSymmetry(); return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } SymmetricMatrix SymmetricMatrix::operator + (const SymmetricMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* SymmetricMatrix substractions (must have the same dimensions) */ Matrix SymmetricMatrix::operator - (const Matrix & m) const { checkSymmetry(); return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } SquareMatrix SymmetricMatrix::operator - (const SquareMatrix & m) const { checkSymmetry(); return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } SymmetricMatrix SymmetricMatrix::operator - (const SymmetricMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* SymmetricMatrix multiplications (must have consistent dimensions) */ Matrix SymmetricMatrix::operator * (const Matrix & m) const { return Implementation((getImplementation()->symProd(*(m.getImplementation()), 'L') ).clone()); } SquareMatrix SymmetricMatrix::operator * (const SquareMatrix & m) const { return Implementation((getImplementation()->symProd(*(m.getImplementation()), 'L') ).clone()); } SquareMatrix SymmetricMatrix::operator * (const SymmetricMatrix & m) const { // Must check symmetry of the right-hand factor as it is seen as a square matrix m.checkSymmetry(); return Implementation((getImplementation()->symProd(*(m.getImplementation()), 'L') ).clone()); } SymmetricMatrix SymmetricMatrix::operator * (const IdentityMatrix & m) const { return *this; } /* Multiplication with a Point (must have consistent dimensions) */ Point SymmetricMatrix::operator * (const Point & pt) const { return getImplementation()->symVectProd(pt) ; } /* Multiplication with a Scalar */ SymmetricMatrix SymmetricMatrix::operator * (const Scalar & s) const { return Implementation((*getImplementation() * s ).clone()); } /* Division by a Scalar*/ SymmetricMatrix SymmetricMatrix::operator / (const Scalar & s) const { return Implementation((*getImplementation() / s ).clone()); } /* SquareMatrix integer power */ SymmetricMatrix SymmetricMatrix::power(const UnsignedInteger n) const { return Implementation((getImplementation()->symPower(n)).clone()); } /* Resolution of a linear system */ Point SymmetricMatrix::solveLinearSystem(const Point & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemSym(b, keepIntact); } Matrix SymmetricMatrix::solveLinearSystem(const Matrix & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemSym(*b.getImplementation(), keepIntact); } /* Compute determinant */ Scalar SymmetricMatrix::computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact) { return getImplementation()->computeLogAbsoluteDeterminantSym(sign, keepIntact); } Scalar SymmetricMatrix::computeDeterminant(const Bool keepIntact) { return getImplementation()->computeDeterminantSym(keepIntact); } /* Compute eigenvalues */ Point SymmetricMatrix::computeEigenValues(const Bool keepIntact) { return getImplementation()->computeEigenValuesSym(keepIntact); } Point SymmetricMatrix::computeEV(SquareMatrix & v, const Bool keepIntact) { return getImplementation()->computeEVSym(*(v.getImplementation()), keepIntact); } /* Comparison operator */ Bool SymmetricMatrix::operator == (const Matrix & rhs) const { // Compare the references if (this == &rhs) return true; // Compare the dimensions const UnsignedInteger dimension = getDimension(); if (!(dimension == rhs.getNbRows() && dimension == rhs.getNbColumns())) return false; // Compare the content for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j <= i; ++j) if ((*this)(i, j) != rhs(i, j)) return false; return true; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/SymmetricTensor.cxx000066400000000000000000000077161307543307100224610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SymmetricTensor implements the classical mathematical symmetric tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SymmetricTensor.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SymmetricTensor); /* Default constructor */ SymmetricTensor::SymmetricTensor() : Tensor(), hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor with size (squareDim and sheetDim) */ /* The SymmetricTensor is made up of a collection of squareDim*squareDim*sheetDim elements */ /* The SymmetricTensor is viewed as a set of column vectors read one after another, one sheet after another */ SymmetricTensor::SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim) : Tensor(squareDim, squareDim, sheetDim), hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor from external collection */ SymmetricTensor::SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim, const Collection & elementsValues) : Tensor(squareDim, squareDim, sheetDim, elementsValues), hasBeenSymmetrized_(false) { // Nothing to do } /* Constructor with implementation */ SymmetricTensor::SymmetricTensor(const Implementation & i) : Tensor(i), hasBeenSymmetrized_(false) { // Nothing to do } /* String converter */ String SymmetricTensor::__repr__() const { return Tensor::__repr__(); } /* String converter */ String SymmetricTensor::__str__(const String & offset) const { checkSymmetry(); return Tensor::__str__( offset ); } /* Check if the internal representation is really symmetric */ void SymmetricTensor::checkSymmetry() const { if (!hasBeenSymmetrized_) { getImplementation()->symmetrize(); hasBeenSymmetrized_ = true; } } /* Operator () gives access to the elements of the symmetric tensor (to modify these elements and their symmetric element) */ /* The element of the symmetric tensor is designated by its row number i, its column number j and its sheet number k*/ Scalar & SymmetricTensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) { copyOnWrite(); hasBeenSymmetrized_ = false; return ( (i > j) ? (*getImplementation())(i, j, k) : (*getImplementation())(j, i, k) ); } /* Operator () gives access to the elements of the tensor (read only) */ /* The element of the tensor is designated by its row number i and its column number j */ const Scalar & SymmetricTensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { return ( (i > j) ? (*getImplementation())(i, j, k) : (*getImplementation())(j, i, k) ); } /* getSheet returns the sheet specified by its sheet number k */ SymmetricMatrix SymmetricTensor::getSheet(const UnsignedInteger k) const { return getImplementation()->getSheetSym(k); } /* setSheet sets matrix m as the sheet specified by its sheet number k */ void SymmetricTensor::setSheet(const UnsignedInteger k, const SymmetricMatrix & m) { hasBeenSymmetrized_ = false; getImplementation()->setSheetSym(k, m); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/Tensor.cxx000066400000000000000000000150651307543307100205600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Tensor implements the classical mathematical tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Tensor.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Tensor); /* Default constructor */ Tensor::Tensor() : TypedInterfaceObject(new TensorImplementation()) { // Nothing to do } /* Constructor with size (rowDim, colDim and sheetDim) */ /* The tensor is made up of a collection of rowDim*colDim*sheetDim elements */ /* The tensor is viewed as a set of column vectors read one after another, one sheet after another */ Tensor::Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim) : TypedInterfaceObject(new TensorImplementation(rowDim, colDim, sheetDim)) { // Nothing to do } /* Constructor from external collection */ Tensor::Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues) : TypedInterfaceObject(new TensorImplementation(rowDim, colDim, sheetDim, elementsValues)) { // Nothing to do } /* Constructor with implementation */ Tensor::Tensor(const Implementation & i) : TypedInterfaceObject(i) { // Nothing to do } /* Set small elements to zero */ Tensor Tensor::clean(const Scalar & threshold) const { return Pointer(getImplementation()->clean(threshold).clone()); } /* String converter */ String Tensor::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String Tensor::__str__(const String & offset) const { OSS oss(false); const UnsignedInteger rows = getNbRows(); const UnsignedInteger cols = getNbColumns(); const UnsignedInteger sheets = getNbSheets(); if ( (rows >= ResourceMap::GetAsUnsignedInteger("Tensor-size-visible-in-str-from")) || (cols >= ResourceMap::GetAsUnsignedInteger("Tensor-size-visible-in-str-from")) || (sheets >= ResourceMap::GetAsUnsignedInteger("Tensor-size-visible-in-str-from")) ) oss << rows << "x" << cols << "x" << sheets << "\n"; size_t lwidth = 0; size_t rwidth = 0; for( UnsignedInteger k = 0; k < sheets; ++k ) for( UnsignedInteger i = 0; i < rows; ++i ) for( UnsignedInteger j = 0; j < cols; ++j ) { String st = OSS() << (*this)(i, j, k); size_t dotpos = st.find( '.' ); lwidth = std::max( lwidth, (dotpos != String::npos) ? dotpos : st.size() ); rwidth = std::max( rwidth, (dotpos != String::npos) ? st.size() - dotpos : 0 ); } const char * nl = ""; for( UnsignedInteger k = 0; k < sheets; ++k, nl = "\n" ) { oss << nl << "sheet #" << k << "\n"; const char * bracket = "["; const char * newline = ""; for( UnsignedInteger i = 0; i < rows; ++i, newline = "\n", bracket = " " ) { oss << newline << offset << bracket << "[ "; const char * sep = ""; for( UnsignedInteger j = 0; j < cols; ++j, sep = " " ) { String st = OSS() << (*this)(i, j, k); size_t dotpos = st.find( '.' ); oss << sep << String( lwidth - ((dotpos != String::npos) ? dotpos : st.size()), ' ' ) << (*this)(i, j, k) << String( rwidth - ((dotpos != String::npos) ? st.size() - dotpos : 0), ' ' ); } oss << " ]"; } oss << "]"; } return oss; } /* Operator () gives access to the elements of the tensor (to modify these elements) */ /* The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Scalar & Tensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) { copyOnWrite(); return (*getImplementation())(i, j, k); } /* Operator () gives access to the elements of the tensor (read only) */ /* The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Scalar & Tensor::operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { return (*getImplementation())(i, j, k); } /* getSheet returns the sheet specified by its sheet number k */ Matrix Tensor::getSheet(const UnsignedInteger k) const { return getImplementation()->getSheet(k); } /* setSheet sets matrix m as the sheet specified by its sheet number k */ void Tensor::setSheet(const UnsignedInteger k, const Matrix & m) { copyOnWrite(); getImplementation()->setSheet(k, m); } /* Get the dimensions of the tensor : number of rows */ UnsignedInteger Tensor::getNbRows() const { return getImplementation()->getNbRows(); } /* Get the dimensions of the Tensor : number of columns */ UnsignedInteger Tensor::getNbColumns() const { return getImplementation()->getNbColumns(); } /* Get the dimensions of the Tensor : number of sheets */ UnsignedInteger Tensor::getNbSheets() const { return getImplementation()->getNbSheets(); } /* Empty returns true if there is no element in the Tensor */ Bool Tensor::isEmpty() const { return getImplementation()->isEmpty(); } /* Comparison operator */ Bool Tensor::operator == (const Tensor & rhs) const { const Tensor &lhs(*this); return (*(lhs.getImplementation()) == *(rhs.getImplementation()) ); } const Scalar* Tensor::__baseaddress__() const { return getImplementation()->__baseaddress__(); } UnsignedInteger Tensor::__elementsize__() const { return getImplementation()->__elementsize__(); } UnsignedInteger Tensor::__stride__(UnsignedInteger dim) const { return getImplementation()->__stride__(dim); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/TensorImplementation.cxx000066400000000000000000000223231307543307100234610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TensorImplementation implements the Tensor classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TensorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TensorImplementation); static const Factory Factory_TensorImplementation; /* Default constructor */ TensorImplementation::TensorImplementation() : PersistentCollection() , nbRows_(0) , nbColumns_(0) , nbSheets_(0) { // Nothing to do } /* Constructor with size (rowDim, colDim and sheetDim) */ /* The TensorImplementation is made up of a collection of rowDim*colDim*sheetDim elements */ /* The TensorImplementation is viewed as a set of column vectors read one after another, one sheet after another */ TensorImplementation::TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim) : PersistentCollection(rowDim * colDim * sheetDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) , nbSheets_(sheetDim) { // Nothing to do } /* Constructor from external collection */ TensorImplementation::TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues) : PersistentCollection(rowDim * colDim * sheetDim, 0.0) , nbRows_(rowDim) , nbColumns_(colDim) , nbSheets_(sheetDim) { const UnsignedInteger tensorSize = std::min(rowDim * colDim * sheetDim, elementsValues.getSize()); std::copy(elementsValues.begin(), elementsValues.begin() + tensorSize, begin()); } /* Virtual constructor */ TensorImplementation * TensorImplementation::clone() const { return new TensorImplementation(*this); } /* Set small elements to zero */ TensorImplementation TensorImplementation::clean(const Scalar threshold) const { // Nothing to do for nonpositive threshold if (threshold <= 0.0) return *this; TensorImplementation result(nbRows_, nbColumns_, nbSheets_); for (UnsignedInteger k = 0; k < nbSheets_; ++k) result.setSheet(k, getSheet(k).clean(threshold)); return result; } /* String converter */ String TensorImplementation::__repr__() const { return OSS(true) << "class=" << getClassName() << " name=" << getName() << " rows=" << getNbRows() << " columns=" << getNbColumns() << " sheets=" << getNbSheets() << " values=" << PersistentCollection::__repr__(); } String TensorImplementation::__str__(const String & offset) const { OSS oss(false); for (UnsignedInteger k = 0; k < getNbSheets(); ++k) { oss << (k == 0 ? "" : Os::GetEndOfLine()) << offset << "sheet " << k << ":" << Os::GetEndOfLine(); oss << offset << getSheet(k).__str__(offset) << Os::GetEndOfLine(); } return oss; } /* Get the dimensions of the TensorImplementation : number of rows */ UnsignedInteger TensorImplementation::getNbRows() const { return nbRows_; } /* Get the dimensions of the TensorImplementation : number of columns */ UnsignedInteger TensorImplementation::getNbColumns() const { return nbColumns_; } /* Get the dimensions of the TensorImplementation : number of sheets */ UnsignedInteger TensorImplementation::getNbSheets() const { return nbSheets_; } /* Operator () gives access to the elements of the TensorImplementation (to modify these elements) */ /* The element of the TensorImplementation is designated by its row number i, its column number j and its sheet number k */ /* the first element of the TensorImplementation is t(0,0,0) */ Scalar & TensorImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) { if ((i >= nbRows_) || (j >= nbColumns_) || (k >= nbSheets_)) throw InvalidDimensionException(HERE); return (*this)[this->convertPosition(i, j, k)]; } /* Operator () gives access to the elements of the TensorImplementation (read only) */ /* The element of the TensorImplementation is designated by its row number i, its column number j and its sheet number k */ const Scalar & TensorImplementation::operator() (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { if ((i >= nbRows_) || (j >= nbColumns_) || (k >= nbSheets_)) throw InvalidDimensionException(HERE); return (*this)[this->convertPosition(i, j, k)]; } /* getSheet returns the sheet specified by its sheet number k */ Matrix TensorImplementation::getSheet(const UnsignedInteger k) const { if (k >= nbSheets_) throw InvalidDimensionException(HERE); MatrixImplementation sheet(nbRows_, nbColumns_); const UnsignedInteger shift = convertPosition(0, 0, k); std::copy(begin() + shift, begin() + shift + nbRows_ * nbColumns_, sheet.begin()); return sheet; } /* setSheet sets matrix m as the sheet specified by its sheet number k */ void TensorImplementation::setSheet(const UnsignedInteger k, const Matrix & m) { if (k >= nbSheets_) throw InvalidDimensionException(HERE); if (m.getNbRows() != nbRows_) throw InvalidDimensionException(HERE); if (m.getNbColumns() != nbColumns_) throw InvalidDimensionException(HERE); std::copy(m.getImplementation()->begin(), m.getImplementation()->end(), begin() + convertPosition(0, 0, k)); } /* getSheetSym returns the symmetric sheet specified by its sheet number k */ SymmetricMatrix TensorImplementation::getSheetSym(const UnsignedInteger k) const { Pointer sheet(getSheet(k).getImplementation()); sheet->symmetrize(); return sheet; } /* setSheetSym sets symmetric matrix m as the sheet specified by its sheet number k */ void TensorImplementation::setSheetSym(const UnsignedInteger k, const SymmetricMatrix & m) { Pointer sheet(m.getImplementation()); sheet->symmetrize(); setSheet(k, m); } /* Empty returns true if there is no element in the TensorImplementation */ Bool TensorImplementation::isEmpty() const { return ((nbRows_ == 0) || (nbColumns_ == 0) || (nbSheets_ == 0) || (PersistentCollection::isEmpty())) ; } /* Check for symmetry */ Bool TensorImplementation::isSymmetric() const { if (nbColumns_ != nbRows_) return false; for (UnsignedInteger k = 0; k < nbSheets_; ++k) for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) if((*this)[this->convertPosition(i, j, k)] != (*this)[this->convertPosition(j, i, k)]) return false; return true; } /* Symmetrize MatrixImplementation in case it is a symmetric matrix (stored as a triangular matrix) */ void TensorImplementation::symmetrize() const { TensorImplementation & refThis = * const_cast(this); for (UnsignedInteger k = 0; k < nbSheets_; ++k) for (UnsignedInteger j = 0; j < nbColumns_; ++j) for (UnsignedInteger i = 0; i < j; ++i) refThis[this->convertPosition(i, j, k)] = (*this)[this->convertPosition(j, i, k)]; } /* Comparison operator */ Bool TensorImplementation::operator == (const TensorImplementation & rhs) const { const TensorImplementation &lhs(*this); Bool equality = true; if (&lhs != &rhs) // Not the same object { const PersistentCollection & refLhs = static_cast >(lhs); const PersistentCollection & refRhs = static_cast >(rhs); equality = ( lhs.nbRows_ == rhs.nbRows_ && lhs.nbColumns_ == rhs.nbColumns_ && lhs.nbSheets_ == rhs.nbSheets_ && refLhs == refRhs); } return equality; } /* Method save() stores the object through the StorageManager */ void TensorImplementation::save(Advocate & adv) const { PersistentCollection::save(adv); adv.saveAttribute("nbRows_", nbRows_); adv.saveAttribute("nbColumns_", nbColumns_); adv.saveAttribute("nbSheets_", nbSheets_); } /* Method load() reloads the object from the StorageManager */ void TensorImplementation::load(Advocate & adv) { PersistentCollection::load(adv); adv.loadAttribute("nbRows_", nbRows_); adv.loadAttribute("nbColumns_", nbColumns_); adv.loadAttribute("nbSheets_", nbSheets_); } const Scalar* TensorImplementation::__baseaddress__() const { return &(*this)[0]; } UnsignedInteger TensorImplementation::__elementsize__() const { return sizeof(Scalar); } UnsignedInteger TensorImplementation::__stride__(UnsignedInteger dim) const { UnsignedInteger stride = __elementsize__(); if (dim > 0) stride *= nbRows_; if (dim > 1) stride *= nbColumns_; return stride; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/TriangularComplexMatrix.cxx000066400000000000000000000217471307543307100241370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TriangularComplexMatrix implements the classical mathematical triangluar matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TriangularComplexMatrix.hxx" #include "openturns/Exception.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/HermitianMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TriangularComplexMatrix); /* Default constructor */ TriangularComplexMatrix::TriangularComplexMatrix() : SquareComplexMatrix(0) , isLowerTriangular_(true) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ TriangularComplexMatrix::TriangularComplexMatrix(const UnsignedInteger dimension, Bool isLower) : SquareComplexMatrix(dimension) , isLowerTriangular_(isLower) { // Nothing to do } /* Constructor with implementation */ TriangularComplexMatrix::TriangularComplexMatrix(const Implementation & i, Bool isLower) : SquareComplexMatrix(i) , isLowerTriangular_(isLower) { // Nothing to do } /* String converter */ String TriangularComplexMatrix::__repr__() const { return OSS(true) << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } String TriangularComplexMatrix::__str__(const String & offset) const { return SquareComplexMatrix::__str__(offset); } /* Get the dimension of the matrix */ UnsignedInteger TriangularComplexMatrix::getDimension() const { return getImplementation()->getDimension(); } /* TriangularComplexMatrix transpose */ TriangularComplexMatrix TriangularComplexMatrix::transpose () const { // Quick return for empty or scalar TriangularComplexMatrix if (getDimension() <= 1) return (*this); return TriangularComplexMatrix(Implementation(getImplementation()->transpose().clone()), !isLowerTriangular_); } /* TriangularComplexMatrix conjugate */ TriangularComplexMatrix TriangularComplexMatrix::conjugate () const { // Quick return for empty or scalar TriangularComplexMatrix if (getDimension() <= 1) return (*this); return TriangularComplexMatrix(Implementation(getImplementation()->conjugate().clone()), isLowerTriangular_); } /* TriangularComplexMatrix conjugate */ TriangularComplexMatrix TriangularComplexMatrix::conjugateTranspose () const { // Quick return for empty or scalar TriangularComplexMatrix if (getDimension() <= 1) return (*this); return TriangularComplexMatrix(Implementation(getImplementation()->conjugateTranspose().clone()), !isLowerTriangular_); } /* Check if the matrix is lower or upper */ Bool TriangularComplexMatrix::isLowerTriangular() const { return isLowerTriangular_; } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Complex & TriangularComplexMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { if (isLowerTriangular() && (i < j)) throw InvalidArgumentException(HERE) << "Error; The triangular matrix is lower. " << "The indices are not valid" ; if (!isLowerTriangular() && (i > j)) throw InvalidArgumentException(HERE) << "Error; The triangular matrix is upper. " << "The indices are not valid" ; return (*getImplementation())(i, j) ; } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Complex & TriangularComplexMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (*getImplementation())(i, j) ; } /* TriangularComplexMatrix additions */ SquareComplexMatrix TriangularComplexMatrix::operator+ (const TriangularComplexMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* ComplexMatrix additions */ SquareComplexMatrix TriangularComplexMatrix::operator+ (const SquareComplexMatrix & m) const { return Implementation((*getImplementation() + * (m.getImplementation()) ).clone()); } /* ComplexMatrix substractions */ SquareComplexMatrix TriangularComplexMatrix::operator- (const SquareComplexMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* TriangularComplexMatrix substractions */ SquareComplexMatrix TriangularComplexMatrix::operator- (const TriangularComplexMatrix & m) const { return Implementation((*getImplementation() - * (m.getImplementation()) ).clone()); } /* ComplexMatrix multiplications */ SquareComplexMatrix TriangularComplexMatrix::operator * (const SquareComplexMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* ComplexMatrix multiplications */ ComplexMatrix TriangularComplexMatrix::operator * (const ComplexMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* HermitianMatrix multiplications */ SquareComplexMatrix TriangularComplexMatrix::operator * (const HermitianMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* TriangularComplexMatrix multiplications */ SquareComplexMatrix TriangularComplexMatrix::operator * (const TriangularComplexMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* Real SquareMatrix multiplications */ SquareComplexMatrix TriangularComplexMatrix::operator * (const SquareMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* Matrix multiplications */ ComplexMatrix TriangularComplexMatrix::operator * (const Matrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* SymmetricMatrix multiplications */ SquareComplexMatrix TriangularComplexMatrix::operator * (const SymmetricMatrix & m) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return Implementation((getImplementation()->triangularProd(*(m.getImplementation()), 'L', uplo ) ).clone()); } /* IdentityMatrix multiplications */ TriangularComplexMatrix TriangularComplexMatrix::operator * (const IdentityMatrix & m) const { return (*this); } /* Multiplication with a ComplexCollection (must have consistent dimensions) */ TriangularComplexMatrix::ComplexCollection TriangularComplexMatrix::operator * (const ComplexCollection & pt) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return getImplementation()->triangularVectProd(pt, uplo) ; } /* Multiplication with a ScalarCollection (must have consistent dimensions) */ TriangularComplexMatrix::ComplexCollection TriangularComplexMatrix::operator * (const ScalarCollection & pt) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return getImplementation()->triangularVectProd(pt, uplo) ; } /* Multiplication with a Point (must have consistent dimensions) */ TriangularComplexMatrix::ComplexCollection TriangularComplexMatrix::operator * (const Point & pt) const { char uplo('L'); if (!isLowerTriangular()) uplo = 'R'; return getImplementation()->triangularVectProd(pt, uplo) ; } /* Multiplication with a Complex */ TriangularComplexMatrix TriangularComplexMatrix::operator* (const Complex s) const { return TriangularComplexMatrix(Implementation((*getImplementation() * s ).clone()), isLowerTriangular_); } /* Division by a Complex*/ TriangularComplexMatrix TriangularComplexMatrix::operator / (const Complex s) const { return TriangularComplexMatrix(Implementation((*getImplementation() / s ).clone()), isLowerTriangular_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/TriangularMatrix.cxx000066400000000000000000000176631307543307100226110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TriangularMatrix implements the classical mathematical triangluar matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TriangularMatrix.hxx" #include "openturns/Exception.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/HermitianMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TriangularMatrix); /* Default constructor */ TriangularMatrix::TriangularMatrix() : SquareMatrix(0) , isLowerTriangular_(true) , hasBeenTriangularized_(false) { // Nothing to do } /* Constructor with size (dim, which is the same for nbRows_ and nbColumns_ )*/ TriangularMatrix::TriangularMatrix(const UnsignedInteger dimension, Bool isLower) : SquareMatrix(dimension) , isLowerTriangular_(isLower) , hasBeenTriangularized_(false) { // Nothing to do } /* Constructor with implementation */ TriangularMatrix::TriangularMatrix(const Implementation & i, Bool isLower) : SquareMatrix(i) , isLowerTriangular_(isLower) , hasBeenTriangularized_(false) { // Nothing to do } /* Constructor with matrix implementation */ TriangularMatrix::TriangularMatrix(const MatrixImplementation & i, Bool isLower) : SquareMatrix(i) , isLowerTriangular_(isLower) , hasBeenTriangularized_(false) { // Nothing to do } /* Check if the internal representation is actually symmetric */ void TriangularMatrix::checkTriangularity() const { if (!hasBeenTriangularized_) { getImplementation()->triangularize(isLowerTriangular_); hasBeenTriangularized_ = true; } } /* Test if the matrix is diagonal */ Bool TriangularMatrix::isDiagonal() const { if (isLowerTriangular_) { for (UnsignedInteger j = 0; j < getDimension(); ++j) for (UnsignedInteger i = j + 1; i < getDimension(); ++i) if ((*getImplementation())(i, j) != 0.0) return false; } else { for (UnsignedInteger j = 0; j < getDimension(); ++j) for (UnsignedInteger i = 0; i < j; ++i) if ((*getImplementation())(i, j) != 0.0) return false; } return true; } /* String converter */ String TriangularMatrix::__repr__() const { return OSS() << "class=" << getClassName() << " dimension=" << this->getDimension() << " implementation=" << getImplementation()->__repr__(); } String TriangularMatrix::__str__(const String & offset) const { checkTriangularity(); return SquareMatrix::__str__(); } /* Get the dimension of the matrix */ UnsignedInteger TriangularMatrix::getDimension() const { return getImplementation()->getDimension(); } /* TriangularMatrix transpose */ TriangularMatrix TriangularMatrix::transpose () const { // Quick return for empty or scalar TriangularMatrix if (getDimension() <= 1) return (*this); return TriangularMatrix(getImplementation()->transpose(), !isLowerTriangular_); } /* Check if the matrix is lower or upper */ Bool TriangularMatrix::isLowerTriangular() const { return isLowerTriangular_; } /* Operator () gives access to the elements of the matrix (to modify these elements) */ /* The element of the matrix is designated by its row number i and its column number j */ /* the first element of the matrix is m(0,0) */ Scalar & TriangularMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) { if (isLowerTriangular() && (i < j)) throw InvalidArgumentException(HERE) << "Error; The triangular matrix is lower. " << "The indices are not valid" ; if (!isLowerTriangular() && (i > j)) throw InvalidArgumentException(HERE) << "Error; The triangular matrix is upper. " << "The indices are not valid" ; return (*getImplementation())(i, j) ; } /* Operator () gives access to the elements of the matrix (read only) */ /* The element of the matrix is designated by its row number i and its column number j */ const Scalar & TriangularMatrix::operator() (const UnsignedInteger i, const UnsignedInteger j) const { return (*getImplementation())(i, j) ; } /* TriangularMatrix additions */ SquareMatrix TriangularMatrix::operator+ (const TriangularMatrix & m) const { return *getImplementation() + *m.getImplementation(); } /* Matrix additions */ SquareMatrix TriangularMatrix::operator+ (const SquareMatrix & m) const { return *getImplementation() + *m.getImplementation(); } /* Matrix substractions */ SquareMatrix TriangularMatrix::operator- (const SquareMatrix & m) const { return *getImplementation() - *m.getImplementation(); } /* TriangularMatrix substractions */ SquareMatrix TriangularMatrix::operator- (const TriangularMatrix & m) const { return *getImplementation() - *m.getImplementation(); } /* Matrix multiplications */ SquareMatrix TriangularMatrix::operator * (const SquareMatrix & m) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularProd(*m.getImplementation(), 'L', uplo ); } /* Matrix multiplications */ Matrix TriangularMatrix::operator * (const Matrix & m) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularProd(*m.getImplementation(), 'L', uplo ); } /* TriangularMatrix multiplications */ SquareMatrix TriangularMatrix::operator * (const TriangularMatrix & m) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularProd(*m.getImplementation(), 'L', uplo ); } /* SymmetricMatrix multiplications */ SquareMatrix TriangularMatrix::operator * (const SymmetricMatrix & m) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularProd(*m.getImplementation(), 'L', uplo ); } /* IdentityMatrix multiplications */ TriangularMatrix TriangularMatrix::operator * (const IdentityMatrix & m) const { return (*this); } /* Multiplication with a ScalarCollection (must have consistent dimensions) */ TriangularMatrix::ScalarCollection TriangularMatrix::operator * (const ScalarCollection & pt) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularVectProd(pt, uplo) ; } /* Multiplication with a Point (must have consistent dimensions) */ TriangularMatrix::ScalarCollection TriangularMatrix::operator * (const Point & pt) const { char uplo(isLowerTriangular() ? 'L' : 'U'); return getImplementation()->triangularVectProd(pt, uplo) ; } /* Multiplication with a Numerical */ TriangularMatrix TriangularMatrix::operator* (const Scalar s) const { return TriangularMatrix(*getImplementation() * s, isLowerTriangular_); } /* Division by a Numerical*/ TriangularMatrix TriangularMatrix::operator / (const Scalar s) const { return TriangularMatrix(*getImplementation() / s, isLowerTriangular_); } /* Resolution of a linear system */ Point TriangularMatrix::solveLinearSystem (const Point & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemTri(b, keepIntact, isLowerTriangular_); } Matrix TriangularMatrix::solveLinearSystem (const Matrix & b, const Bool keepIntact) { return getImplementation()->solveLinearSystemTri(*b.getImplementation(), keepIntact, isLowerTriangular_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Base/Type/openturns/000077500000000000000000000000001307543307100206105ustar00rootroot00000000000000openturns-1.9/lib/src/Base/Type/openturns/BipartiteGraph.hxx000066400000000000000000000044761307543307100242610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief BipartiteGraph defines a graph with two sets of nodes (red and black) * and links from one set to the other only. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BIPARTITEGRAPH_HXX #define OPENTURNS_BIPARTITEGRAPH_HXX #include "openturns/OTprivate.hxx" #include "openturns/Graph.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BipartiteGraph * * A class that represents bipartite graphs */ class OT_API BipartiteGraph : public PersistentCollection { CLASSNAME; public: typedef PersistentCollection InternalType; typedef Collection IndicesCollection; /** Default constructor */ BipartiteGraph() : InternalType(1, Indices(1)) { // Nothing to do } /** Constructor that pre-allocate size elements */ BipartiteGraph(const UnsignedInteger size) : InternalType(size) { // Nothing to do } /** Constructor from a base object */ BipartiteGraph(const IndicesCollection & coll) : InternalType(coll) { // Nothing to do } /** Accessor to the red nodes */ Indices getRedNodes() const; /** Accessor to the black nodes */ Indices getBlackNodes() const; /** Draw the bipartite graph */ Graph draw() const; /** Destructor */ ~BipartiteGraph() throw() {} #ifdef SWIG /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** @copydoc Object::__str__() const */ virtual String __str__(const String & offset = "") const; #endif }; /* class BipartiteGraph */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BIPARTITEGRAPH_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Cache.hxx000066400000000000000000000277751307543307100223660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Cache holds the already computed points to speed up calculations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CACHE_HXX #define OPENTURNS_CACHE_HXX #include #include #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Collection.hxx" #include "openturns/Point.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/OStream.hxx" BEGIN_NAMESPACE_OPENTURNS template inline static std::ostream & operator << ( std::ostream & os, const std::pair< K_, std::pair< V_, U_ > > & val) { os << val.first << "->" << val.second.first << "/" << val.second.second; return os; } template inline static OStream & operator << ( OStream & OS, const std::pair< K_, std::pair< V_, U_ > > & val) { OS << val.first << "->" << val.second.first << "/" << val.second.second; return OS; } /** * @class Cache * * Cache holds the already computed points to speed up calculations * Like any cache system, this objet saves time by keeping some costly data * and provides access to them through a key. * Here the key is the input Point of a Function and the * value is the output Point that was computed. * When used with ComputedFunctionImplementation objects the Cache * may greatly speed up the computations of Analytical algorithms (like FORM * or SORM). Its advantage is more doubtful with other FunctionImplementations * or Simulation algorithms. * * The Cache may be set with a maximum size to avoid too much memory consumption especially * when running Simulation algorithms (Monte-Carlo or LHS). This maximum size is * an upper bound for the number of data kept by the Cache. When this upper bound is * reached, the next data insertion into the Cache flushes the least recently used * data before the insertion. */ template class Cache : public PersistentObject { public: static OT::String GetClassName() { return OT::String("Cache<") + OT::String(K_::GetClassName()) + OT::String(", ") + OT::String(V_::GetClassName()) + OT::String(">"); } virtual OT::String getClassName() const { return Cache::GetClassName(); } public: typedef K_ KeyType; typedef std::pair< V_ , UnsignedInteger > ValueType; typedef std::pair< KeyType, ValueType > PairType; #ifndef SWIG struct ConvertMapToCollections { typedef typename std::map< KeyType, ValueType >::iterator::value_type value_type; typedef typename std::map< KeyType, ValueType >::iterator::difference_type difference_type; typedef typename std::map< KeyType, ValueType >::iterator::pointer pointer; typedef typename std::map< KeyType, ValueType >::iterator::reference reference; typedef std::output_iterator_tag iterator_category; PersistentCollection< KeyType > & keyColl_; PersistentCollection< KeyType > & valueColl_; PersistentCollection< UnsignedInteger > & ageColl_; UnsignedInteger i_; ConvertMapToCollections(PersistentCollection< KeyType > & keyColl, PersistentCollection< KeyType > & valueColl, PersistentCollection< UnsignedInteger > & ageColl) : keyColl_(keyColl), valueColl_(valueColl), ageColl_(ageColl), i_(0) {} ConvertMapToCollections & operator = (const typename std::map< KeyType, ValueType >::value_type & val) { keyColl_ [i_] = val.first; valueColl_[i_] = val.second.first; ageColl_ [i_] = val.second.second; ++i_; return *this; } ConvertMapToCollections & operator = (const ConvertMapToCollections & other) { keyColl_ = other.keyColl_; valueColl_ = other.valueColl_; ageColl_ = other.ageColl_; i_ = other.i_; return *this; } ConvertMapToCollections & operator * () { return *this; } ConvertMapToCollections & operator ++ () { return *this; } ConvertMapToCollections & operator ++ (int) { return *this; } }; // #else // typedef ConvertMapToCollections; #endif protected: /** True if cache is enabled */ mutable Bool enabled_; /** Upper bound for the cache size */ const UnsignedInteger maxSize_; /** Number of hits */ mutable UnsignedInteger hits_; /** The map of elements */ mutable std::map< KeyType, ValueType > points_; public: /** Default constructor */ inline Cache() : PersistentObject(), enabled_(true), maxSize_(ResourceMap::GetAsUnsignedInteger("cache-max-size")), hits_(0), points_() { // Nothing to do } /** Constructor with upper bound size */ inline Cache(const UnsignedInteger maxSize) : PersistentObject(), enabled_(true), maxSize_(maxSize), hits_(0), points_() { // Nothing to do } #ifdef SWIG Cache(const Cache & other ) : PersistentObject(other), enabled_(other.enabled_), maxSize_(other.maxSize_), hits_(other.hits_), points_(other.hits_) { //Nothing to do } #endif /** Virtual constructor */ inline virtual Cache * clone() const { return new Cache(*this); } /** String converter */ inline virtual String __repr__() const { OSS oss; oss << "class=" << Cache::GetClassName() << " enabled=" << this->enabled_ << " name=" << getName() << " maxSize=" << this->maxSize_ << " size=" << getSize() << " hits=" << getHits() << " points={" ; copy( this->points_.begin(), this->points_.end(), OSS_iterator( oss, ", " ) ); oss << "}" ; return oss; } #ifndef SWIG /** Assignment operator */ inline Cache & operator = (const Cache & other) { if (this != &other) { PersistentObject::operator=(other); const_cast(this->maxSize_) = other.maxSize_; this->points_ = other.points_; this->enabled_ = other.enabled_; this->hits_ = other.hits_; } return *this; } #endif /** Merge the contents of two caches */ inline Cache & merge (const Cache & other) { if (isEnabled()) { for_each( other.points_.begin(), other.points_.end(), addFunctor( this ) ); } return *this; } /** Returns the number of successful hits in the cache */ inline UnsignedInteger getHits() const { return this->hits_; } /** Query the cache for the key presence */ inline Bool hasKey(const K_ & key) const { if (! isEnabled() ) return false; Bool found = ( this->points_.find( key ) != this->points_.end() ); return found; } /** Retrieve the value from the cache with the key */ inline const V_ find(const K_ & key) const { if (isEnabled()) { typename std::map< KeyType, ValueType >::iterator it = this->points_.find( key ); Bool found = ( it != this->points_.end() ); if (found) { ++(*it).second.second; // increment age ++hits_; LOGINFO(OSS() << "Cache hit !"); return V_( (*it).second.first ); } else return V_(); } else return V_(); } /** Add a pair (key,value) to the cache. This may wipe out some older pair if maxSize is reached */ inline void add(const K_ & key, const V_ & value) { if (isEnabled()) insert( key, ValueType( value, 0 ) ); } /** Method save() stores the object through the StorageManager */ inline void save(Advocate & adv) const { const UnsignedInteger size = this->points_.size(); PersistentCollection< KeyType > keyColl(size); PersistentCollection< KeyType > valueColl(size); PersistentCollection< UnsignedInteger > ageColl(size); std::copy(this->points_.begin(), this->points_.end(), ConvertMapToCollections(keyColl, valueColl, ageColl)); PersistentObject::save(adv); adv.saveAttribute( "size", size ); adv.saveAttribute( "keyColl", keyColl ); adv.saveAttribute( "valueColl", valueColl ); adv.saveAttribute( "ageColl", ageColl ); } /** Method load() reloads the object from the StorageManager */ inline void load(Advocate & adv) { PersistentObject::load(adv); UnsignedInteger size = 0; adv.loadAttribute( "size", size ); PersistentCollection< KeyType > keyColl(size); PersistentCollection< KeyType > valueColl(size); PersistentCollection< UnsignedInteger > ageColl(size); adv.loadAttribute( "keyColl", keyColl ); adv.loadAttribute( "valueColl", valueColl ); adv.loadAttribute( "ageColl", ageColl ); clear(); for( UnsignedInteger i = 0; i < size; ++i) this->points_[ keyColl[i] ] = ValueType( valueColl[i], ageColl[i] ); } /** Accessors */ /** @brief return the size */ inline UnsignedInteger getSize() const { return points_.size(); } /** @brief return the maximum size */ inline UnsignedInteger getMaxSize() const { return this->maxSize_; } /** @brief return the keys */ inline PersistentCollection getKeys() const { PersistentCollection keyColl; if ( isEnabled() ) { for( typename std::map< KeyType, ValueType >::iterator it = points_.begin(); it != points_.end(); ++ it ) { keyColl.add( it->first ); } } return keyColl; } /** @brief return the values */ inline PersistentCollection getValues() const { PersistentCollection valuesColl; if ( isEnabled() ) { for( typename std::map< KeyType, ValueType >::iterator it = points_.begin(); it != points_.end(); ++ it ) { valuesColl.add( it->second.first ); } } return valuesColl; } /** Enable or disable the cache */ inline void enable() const { this->enabled_ = true; } inline void disable() const { this->enabled_ = false; } inline Bool isEnabled() const { return this->enabled_; } /** Empty the cache */ inline void clear() { points_.clear(); hits_ = 0; } private: /* Used in sort algorithm to find the Least Recently Used item. * This structure implements the BinaryPredicate concept of the STL. */ struct OrderAccordingToAges { inline bool operator() (const PairType & a, const PairType & b) { return a.second.second < b.second.second ; } }; /* Used to insert elements into the cache */ struct addFunctor : public std::unary_function< Cache, void > { Cache * p_cache_; inline addFunctor( Cache * p_cache ) : p_cache_(p_cache) {} inline void operator() ( const typename std::map< typename Cache::KeyType, typename Cache::ValueType >::value_type & val ) { p_cache_->insert( val.first, val.second ); } }; /* Insert a (key,value) pair in the cache */ inline void insert( const KeyType & key, const ValueType & value ) { if (this->points_.size() == maxSize_) { typename std::map< KeyType, ValueType >::iterator it = min_element( this->points_.begin(), this->points_.end(), OrderAccordingToAges() ); if (it != this->points_.end() ) this->points_.erase( it ); } this->points_[key] = value; } }; /* class Cache */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CACHE_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Collection.hxx000066400000000000000000000225311307543307100234370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Collection defines top-most collection strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COLLECTION_HXX #define OPENTURNS_COLLECTION_HXX #include #include // for std::copy #include "openturns/OTprivate.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/OSS.hxx" #include "openturns/OStream.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Collection * * Collection defines top-most collection strategies */ /* Forward declaration */ template class Collection; /** Comparison operator (friend) */ template inline Bool operator == (const Collection & lhs, const Collection & rhs) { return lhs.coll__ == rhs.coll__; } /** Comparison operator (friend) */ template inline Bool operator != (const Collection & lhs, const Collection & rhs) { return !(lhs == rhs); } /** Ordering operator (friend) */ template inline Bool operator < (const Collection & lhs, const Collection & rhs) { return lhs.coll__ < rhs.coll__; } /** Stream operator */ template inline std::ostream & operator << (std::ostream & os, const Collection & collection) { return os << collection.__repr__(); } template inline OStream & operator << (OStream & OS, const Collection & collection) { return OS << collection.__str__(); } template class Collection { public: typedef T ElementType; typedef T ValueType; typedef typename std::vector InternalType; typedef typename InternalType::iterator iterator; typedef typename InternalType::const_iterator const_iterator; typedef typename InternalType::reverse_iterator reverse_iterator; typedef typename InternalType::const_reverse_iterator const_reverse_iterator; protected: /* The actual collection is a STL vector */ InternalType coll__; public: /** Default constructor */ Collection() : coll__() { // Nothing to do } /** Constructor that pre-allocate size elements */ Collection(const UnsignedInteger size) : coll__(size) { // Nothing to do } /** Constructor that pre-allocate size elements with value */ Collection(const UnsignedInteger size, const T & value) : coll__(size, value) { // Nothing to do } /* Virtual destructor to allow dynamic polymorphism*/ virtual ~Collection() { // Nothing to do } /** Constructor from a range of elements */ template Collection(const InputIterator first, const InputIterator last) : coll__(first, last) { // Nothing to do } #ifndef SWIG /** Erase the elements between first and last */ inline virtual iterator erase(const iterator first, const iterator last) { if ( (first < begin()) || (first > end()) || (last < begin()) || (last > end()) ) throw OutOfBoundException(HERE) << "Can NOT erase value outside of collection"; return coll__.erase(first, last); } /** Erase the elements pointed by position */ inline virtual iterator erase(iterator position) { if ( (position < begin()) || (position > end()) ) throw OutOfBoundException(HERE) << "Can NOT erase value outside of collection"; return coll__.erase(position); } #endif /** Clear all elements of the collection */ inline virtual void clear() { coll__.clear(); } /** Assign elements to the collection */ template inline void assign(const InputIterator first, const InputIterator last) { coll__.assign(first, last); } #ifndef SWIG /** Operator[]() gives access to the elements of the collection */ inline virtual T & operator [] (const UnsignedInteger i) { return coll__[i]; } /** Operator[]() gives access to the elements of the const collection */ inline virtual const T & operator [] (const UnsignedInteger i) const { return coll__[i]; } #endif /* Method __len__() is for Python */ inline UnsignedInteger __len__() const { return coll__.size(); } /* Method __eq__() is for Python */ inline Bool __eq__(const Collection & rhs) const { return (*this == rhs); } /* Whether the list contains the value val */ inline Bool contains(T val) const { for (UnsignedInteger i = 0; i < coll__.size(); ++i) if ( coll__[i] == val ) return true; return false; } /* Method __getitem__() is for Python */ inline T __getitem__(SignedInteger i) const { if (i < 0) { i += coll__.size(); } return coll__.at(i); } /* Method __setitem__() is for Python */ inline virtual void __setitem__(SignedInteger i, const T & val) { if (i < 0) { i += coll__.size(); } coll__.at(i) = val; } /* Method __delitem__() is for Python */ inline virtual void __delitem__(const UnsignedInteger i) { if (i < coll__.size()) coll__.erase( coll__.begin() + i ); else throw OutOfBoundException(HERE) << "Index i is out of range. Got " << i << " (size=" << coll__.size() << ")"; } /** At() gives access to the elements of the collection but throws an exception if bounds are overcome */ inline virtual T & at(const UnsignedInteger i) { return coll__.at(i); } /** At() gives access to the elements of the const collection but throws an exception if bounds are overcome */ inline virtual const T & at(const UnsignedInteger i) const { return coll__.at(i); } /** Method add() appends an element to the collection */ inline virtual void add(const T & elt) { coll__.push_back(elt); } /** Method add() appends a collection to the collection */ inline virtual void add(const Collection< T > & coll) { coll__.insert(coll__.end(), coll.begin(), coll.end()); } /** Method getSize() returns the number of elements of the collection */ inline UnsignedInteger getSize() const { return static_cast(coll__.size()); } /** Method resize() changes the size of the Collection. If the new size is smaller than the older one, the last elements are thrown away, else the new elements are setted to the default value of the element type */ inline virtual void resize(const UnsignedInteger newSize) { coll__.resize(newSize); } /** Method empty() returns true if there is no element in the collection */ inline Bool isEmpty() const { return coll__.empty(); } #ifndef SWIG /** Method begin() points to the first element of the collection */ inline iterator begin() { return coll__.begin(); } inline const_iterator begin() const { return coll__.begin(); } /** Method end() points beyond the last element of the collection */ inline iterator end() { return coll__.end(); } inline const_iterator end() const { return coll__.end(); } /** Method rbegin() points to the last element of the collection */ inline reverse_iterator rbegin() { return coll__.rbegin(); } inline const_reverse_iterator rbegin() const { return coll__.rbegin(); } /** Method rend() points before the first element of the collection */ inline reverse_iterator rend() { return coll__.rend(); } inline const_reverse_iterator rend() const { return coll__.rend(); } #endif protected: inline String toString(Bool full) const { OSS oss(full); String separator; oss << "["; std::copy( begin(), end(), OSS_iterator(oss, ",") ); oss << "]"; return oss; } public: /** String converter */ inline String __repr__() const { return toString(true); } inline String __str__(const String & offset = "") const { OSS oss; oss << toString(false); if (getSize() >= ResourceMap::GetAsUnsignedInteger("Collection-size-visible-in-str-from")) oss << "#" << getSize(); return oss; } #ifndef SWIG /* Friend operator */ template friend inline Bool operator == (const Collection & lhs, const Collection & rhs); /* Friend operator */ template friend inline Bool operator != (const Collection & lhs, const Collection & rhs); /* Friend operator */ template friend inline Bool operator < (const Collection & lhs, const Collection & rhs); #endif }; /* class Collection */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COLLECTION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/ComplexMatrix.hxx000066400000000000000000000176021307543307100241430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexMatrix implements the classical mathematical matrix with complex values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPLEXMATRIX_HXX #define OPENTURNS_COMPLEXMATRIX_HXX #include "openturns/ComplexMatrixImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS class HermitianMatrix; class TriangularComplexMatrix; /** * @class ComplexMatrix * * ComplexMatrix implements the classical mathematical matrix with complex values */ class OT_API ComplexMatrix : public TypedInterfaceObject { CLASSNAME; #ifndef SWIG /** Declaration of friend operators */ friend ComplexMatrix operator * (const Complex s, const ComplexMatrix & m); #endif public: typedef Collection ComplexCollection; typedef Collection ScalarCollection; typedef TypedInterfaceObject::Implementation Implementation ; /** Default constructor */ ComplexMatrix(); /** Constructor with implementation */ ComplexMatrix(const Implementation & i); /** Constructor with implementation */ ComplexMatrix(const ComplexMatrixImplementation & i); /** Constructor with size (rowDim and colDim) */ ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim); /** Constructor from range of external collection */ template ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ComplexCollection & elementsValues); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ScalarCollection & elementsValues); /** Constructor from hermitian matrix */ ComplexMatrix(const HermitianMatrix & hermitian); /** Set small elements to zero */ virtual ComplexMatrix clean(const Scalar threshold) const; /** Resolution of a linear system */ ComplexMatrix solveLinearSystem(const ComplexMatrix & b, const Bool keepIntact = true); ComplexCollection solveLinearSystem(const ComplexCollection & b, const Bool keepIntact = true); /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j); /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Complex & operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Get the dimensions of the matrix */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** ComplexMatrix transpose */ ComplexMatrix transpose () const; /** ComplexMatrix conjugate */ ComplexMatrix conjugate () const; /** ComplexMatrix conjugate and transpose */ ComplexMatrix conjugateTranspose () const; /** Get the real part of the matrix */ Matrix real() const; /** Get the imaginary part of the matrix */ Matrix imag() const; /** ComplexMatrix additions (must have the same dimensions) */ ComplexMatrix operator + (const ComplexMatrix & m) const; /** ComplexMatrix additions with Matrix */ ComplexMatrix operator + (const Matrix & m) const; /** ComplexMatrix substractions (must have the same dimensions) */ ComplexMatrix operator - (const ComplexMatrix & m) const; /** ComplexMatrix substractions with Matrix */ ComplexMatrix operator - (const Matrix & m) const; /** ComplexMatrix multiplications (must have consistent dimensions) */ ComplexMatrix operator * (const ComplexMatrix & m) const; /** ComplexMatrix multiplications with Hermitian Matrix */ ComplexMatrix operator * (const HermitianMatrix & m) const; /** ComplexMatrix multiplications with Triangular Matrix */ ComplexMatrix operator * (const TriangularComplexMatrix & m) const; /** ComplexMatrix multiplication with Matrix argument */ virtual ComplexMatrix operator * (const Matrix & m) const; /** ComplexMatrix multiplication with SymmetricMatrix argument */ ComplexMatrix operator * (const SymmetricMatrix & m) const; /** ComplexMatrix multiplication with IdentityMatrix argument */ ComplexMatrix operator * (const IdentityMatrix & m) const; /** Multiplication with a Point */ virtual ComplexCollection operator* (const Point & point) const; /** Multiplication with a ScalarCollection */ virtual ComplexCollection operator* (const ScalarCollection & collection) const; /** Multiplication with a ComplexCollection (must have consistent dimensions) */ virtual ComplexCollection operator* (const ComplexCollection & collection) const; /** Multiplication with a Complex */ ComplexMatrix operator * (const Complex s) const; /** Division by a Complex*/ ComplexMatrix operator / (const Complex s) const; /** Comparison operators */ Bool operator == (const ComplexMatrix & rhs) const; /** Empty returns true if there is no element in the matrix */ Bool isEmpty() const; // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Complex * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; }; /* class ComplexMatrix */ /** Declaration of friend operators */ inline ComplexMatrix operator * (const Complex s, const ComplexMatrix & m) { return m.operator * (s); } /** Constructor from range of external collection */ template ComplexMatrix::ComplexMatrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last) : TypedInterfaceObject(new ComplexMatrixImplementation(rowDim, colDim, first, last)) { // Nothing to do } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPLEXMATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/ComplexMatrixImplementation.hxx000066400000000000000000000251321307543307100270460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexMatrixImplementation implements the Matrix class with complex values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPLEXMATRIXIMPLEMENTATION_HXX #define OPENTURNS_COMPLEXMATRIXIMPLEMENTATION_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/Collection.hxx" #include "openturns/Point.hxx" #include "openturns/MatrixImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComplexMatrixImplementation * * ComplexMatrixImplementation implements the classical mathematical ComplexMatrixImplementation */ class OT_API ComplexMatrixImplementation : public PersistentCollection { CLASSNAME; #ifndef SWIG /** Declaration of friend operators */ friend ComplexMatrixImplementation operator * (const Complex s, const ComplexMatrixImplementation & matrix) { return matrix.operator * (s); } #endif public: typedef Collection ComplexCollection; typedef Collection ScalarCollection; /** Default constructor */ ComplexMatrixImplementation(); /** Constructor with size (rowDim and colDim) */ ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim); /** Constructor from range of external collection */ template ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ComplexCollection & elementsValues); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ScalarCollection & elementsValues); /** Constructor from MatrixImplementation */ ComplexMatrixImplementation(const MatrixImplementation & matrix); /** Virtual constructor */ virtual ComplexMatrixImplementation * clone() const; /** Resolution of a linear system in case of a rectangular matrix */ ComplexCollection solveLinearSystemRect(const ComplexCollection & b, const Bool keepIntact = true); ComplexMatrixImplementation solveLinearSystemRect(const ComplexMatrixImplementation & b, const Bool keepIntact = true); /** Set small elements to zero */ virtual ComplexMatrixImplementation clean(const Scalar threshold) const; virtual ComplexMatrixImplementation cleanHerm(const Scalar threshold) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () gives access to the elements of the ComplexMatrixImplementation (to modify these elements) */ /** The element of the ComplexMatrixImplementation is designated by its row number i and its column number j */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j); /** Operator () gives access to the elements of the ComplexMatrixImplementation (read only) */ /** The element of the ComplexMatrixImplementation is designated by its row number i and its column number j */ const Complex & operator () (const UnsignedInteger i, const UnsignedInteger j) const; /** Get the dimensions of the ComplexMatrixImplementation */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Dimension (for square matrices only */ UnsignedInteger getDimension() const; /** ComplexMatrixImplementation transpose */ ComplexMatrixImplementation transpose () const; ComplexMatrixImplementation transposeHerm () const; /** ComplexMatrixImplementation conjugate */ ComplexMatrixImplementation conjugate () const; ComplexMatrixImplementation conjugateHerm () const; /** ComplexMatrixImplementation conjugateTranspose */ ComplexMatrixImplementation conjugateTranspose () const; /** "Hermitianize" ComplexMatrixImplementation in case it is an hermitian matrix (stored as a triangular matrix) */ void hermitianize() const; /** Get the real part of the matrix */ MatrixImplementation realRect() const; MatrixImplementation realSym() const; /** Get the imaginary part of the matrix */ MatrixImplementation imagRect() const; MatrixImplementation imagSym() const; /** Operator overload */ /** ComplexMatrixImplementation addition (must have the same dimensions) */ ComplexMatrixImplementation operator + (const ComplexMatrixImplementation & matrix) const; /** ComplexMatrixImplementation addition with MatrixImplementation */ ComplexMatrixImplementation operator + (const MatrixImplementation & matrix) const; /** ComplexMatrixImplementation substraction (must have the same dimensions) */ ComplexMatrixImplementation operator - (const ComplexMatrixImplementation & matrix) const; /** ComplexMatrixImplementation substraction with MatrixImplementation */ ComplexMatrixImplementation operator - (const MatrixImplementation & matrix) const; /** Multiplication with a Complex */ ComplexMatrixImplementation operator * (const Complex s) const; /** Division by a Complex*/ ComplexMatrixImplementation operator / (const Complex s) const; /** ComplexMatrixImplementation multiplications (must have consistent dimensions) */ ComplexMatrixImplementation genProd(const ComplexMatrixImplementation & matrix) const; ComplexMatrixImplementation symProd(const ComplexMatrixImplementation & m, const char symSide) const; ComplexMatrixImplementation hermProd(const ComplexMatrixImplementation & m, const char hermSide) const; /** Triangular matrix product : side argument L/R for the position of the triangular matrix, up/lo to tell if it */ ComplexMatrixImplementation triangularProd(const ComplexMatrixImplementation & m, const char side = 'L', const char uplo = 'L') const; /** ComplexMatrixImplementation integer power */ ComplexMatrixImplementation genPower(const UnsignedInteger n) const; ComplexMatrixImplementation symPower(const UnsignedInteger n) const; ComplexMatrixImplementation hermPower(const UnsignedInteger n) const; /** Multiplications with a ComplexCollection (must have consistent dimensions) */ ComplexCollection genVectProd (const ComplexCollection & pt) const; ComplexCollection genVectProd (const ScalarCollection & pt) const; ComplexCollection genVectProd (const Point & pt) const; /** Using some optimization (for Hermitian matrix) */ ComplexCollection hermVectProd (const ComplexCollection & pt) const; ComplexCollection hermVectProd (const ScalarCollection & pt) const; ComplexCollection hermVectProd (const Point & pt) const; /** Using triangular matrix */ ComplexCollection triangularVectProd(const ComplexCollection & pt, const char side = 'L') const; ComplexCollection triangularVectProd(const ScalarCollection & pt, const char side = 'L') const; ComplexCollection triangularVectProd(const Point & pt, const char side = 'L') const; /** Check if the matrix is self-adjoint */ virtual Bool isHermitian() const; /** Check if the matrix is HPD */ virtual Bool isHermitianPositiveDefinite(const Bool keepIntact = true); /** Build the Cholesky factorization of the matrix */ virtual ComplexMatrixImplementation computeCholesky(const Bool keepIntact = true); /** Comparison operators */ Bool operator == (const ComplexMatrixImplementation & rhs) const; inline Bool operator != (const ComplexMatrixImplementation & rhs) const { return !((*this) == rhs); } /** Empty returns true if there is no element in the ComplexMatrixImplementation */ Bool isEmpty() const; /** Returns true if triangular lower or upper */ Bool isTriangular(Bool lower = true) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Complex * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: /** ComplexMatrixImplementation Dimensions */ UnsignedInteger nbRows_; UnsignedInteger nbColumns_; /** Position conversion function : the indices i & j are used to compute the actual position of the element in the collection */ inline UnsignedInteger convertPosition (const UnsignedInteger i, const UnsignedInteger j) const; }; /* class ComplexMatrixImplementation */ inline UnsignedInteger ComplexMatrixImplementation::convertPosition (const UnsignedInteger i, const UnsignedInteger j) const { return i + nbRows_ * j ; } /** Constructor from range of external collection */ template ComplexMatrixImplementation::ComplexMatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last) : PersistentCollection(rowDim * colDim, 0.0), nbRows_(rowDim), nbColumns_(colDim) { this->assign(first, last); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPLEXMATRIXIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/ComplexTensor.hxx000066400000000000000000000116021307543307100241430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexTensor implements the classical mathematical tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPLEXTENSOR_HXX #define OPENTURNS_COMPLEXTENSOR_HXX #include "openturns/ComplexTensorImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS class ComplexTensorImplementation; /** * @class ComplexTensor * * ComplexTensor implements the classical mathematical ComplexTensor */ class OT_API ComplexTensor : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; typedef Collection ComplexCollection; /** Default constructor */ ComplexTensor(); /** Constructor with size (rowDim, colDim, sheetDim) */ ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim); /** Constructor from range of external collection */ template ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last); /** Constructor from external collection */ ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const ComplexCollection & elementsValues); /** Constructor with implementation */ ComplexTensor(const Implementation & i); /** Set small elements to zero */ ComplexTensor clean(const Scalar & threshold) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; #ifndef SWIG /** Operator () gives access to the elements of the tensor (to modify these elements) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k); /** Operator () gives access to the elements of the tensor (read only) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Complex & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; #endif /** getSheet returns the sheet specified by its sheet number k */ ComplexMatrix getSheet(const UnsignedInteger k) const; /** setSheet sets matrix m as the sheet specified by its sheet number k */ void setSheet(const UnsignedInteger k, const ComplexMatrix & m); /** Get the dimensions of the tensor */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Number of sheets */ UnsignedInteger getNbSheets() const; /** Comparison operators */ Bool operator == (const ComplexTensor & rhs) const; /** Empty returns true if there is no element in the tensor */ Bool isEmpty() const; // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Complex * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: }; /* class ComplexTensor */ /** Constructor with size (rowDim, colDim, sheetDim) */ template ComplexTensor::ComplexTensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last) : TypedInterfaceObject(new ComplexTensorImplementation(rowDim, colDim, sheetDim, first, last)) { // nothing to do } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPLEXTENSOR_HXX */ openturns-1.9/lib/src/Base/Type/openturns/ComplexTensorImplementation.hxx000066400000000000000000000147101307543307100270540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ComplexTensorImplementation implements the Tensor classes * * Copyright (C) 2014 Airbus-EDF-Phimeca-IMACS * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPLEXTENSORIMPLEMENTATION_HXX #define OPENTURNS_COMPLEXTENSORIMPLEMENTATION_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/ComplexMatrix.hxx" #include "openturns/HermitianMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComplexTensorImplementation * * ComplexTensorImplementation implements the Tensor classes */ class OT_API ComplexTensorImplementation : public PersistentCollection { CLASSNAME; public: /** Default constructor */ ComplexTensorImplementation(); /** Constructor with size (rowDim, colDim, sheetDim) */ ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim); /** Constructor from range of external collection */ template ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last); /** Constructor from external collection */ /** If the dimensions don't correspond with the size of the collection, */ /** the collection is either truncated or completed with zeros*/ ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues); /** Virtual constructor */ virtual ComplexTensorImplementation * clone() const; /** Set small elements to zero */ ComplexTensorImplementation clean(const Scalar threshold) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () gives access to the elements of the tensor (to modify these elements) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k); /** Operator () gives access to the elements of the tensor (read only) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Complex & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; /** getSheet returns the sheet specified by its sheet number k */ ComplexMatrix getSheet(const UnsignedInteger k) const; /** setSheet sets matrix m as the sheet specified by its sheet number k */ void setSheet(const UnsignedInteger k, const ComplexMatrix & m); /** getSheetSym returns the hermitian sheet specified by its sheet number k */ HermitianMatrix getSheetSym(const UnsignedInteger k) const; /** setSheetSym sets hermitian matrix m as the sheet specified by its sheet number k */ void setSheetSym(const UnsignedInteger k, const HermitianMatrix & m); /** Get the dimensions of the tensor */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Number of sheets */ UnsignedInteger getNbSheets() const; /** Check for symmetry */ Bool isSymmetric() const; /** Symmetrize ComplexTensorImplementation in case it is a hermitian tensor (stored as a set of triangular matrix sheets) */ void hermitianize() const; /** Comparison operators */ Bool operator == (const ComplexTensorImplementation & rhs) const; /** Empty returns true if there is no element in the tensor */ Bool isEmpty() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Complex * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: /** ComplexTensorImplementation Dimensions */ UnsignedInteger nbRows_; UnsignedInteger nbColumns_; UnsignedInteger nbSheets_; /** Position conversion function : the indices i & j are used to compute the actual position of the element in the collection */ inline UnsignedInteger convertPosition (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; }; /* class ComplexTensorImplementation */ /** Constructor from range of external collection */ template ComplexTensorImplementation::ComplexTensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last) : PersistentCollection(rowDim * colDim * sheetDim), nbRows_(rowDim), nbColumns_(colDim), nbSheets_(sheetDim) { this->assign(first, last); } /** Inline functions */ inline UnsignedInteger ComplexTensorImplementation::convertPosition (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { return i + nbRows_ * (j + nbColumns_ * k) ; } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPLEXTENSORIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Description.hxx000066400000000000000000000042111307543307100236220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Description is a collection of string for human usage * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DESCRIPTION_HXX #define OPENTURNS_DESCRIPTION_HXX #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @typedef Description * * Description is a collection of string for human usage */ class OT_API Description : public PersistentCollection { CLASSNAME; public: typedef PersistentCollection InternalType; /** Default constructor */ Description(); /** Constructor with size */ explicit Description(const UnsignedInteger size); /** Constructor with size and default value */ Description(const UnsignedInteger size, const String & value); /** Constructor from a collection */ Description(const Collection & coll); /** Check if the content is blank */ Bool isBlank() const; /** Destructor */ virtual ~Description(); #ifdef SWIG /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** @copydoc Object::__str__() const */ virtual String __str__(const String & offset = "") const; #endif void sort(); /** Build a default description */ static Description BuildDefault(const UnsignedInteger dimension, const String & prefix = "Component"); }; /* class Description */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DESCRIPTION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/HermitianMatrix.hxx000066400000000000000000000141531307543307100244520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief HermitianMatrix implements the classical mathematical hermitian matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HERMITIANMATRIX_HXX #define OPENTURNS_HERMITIANMATRIX_HXX #include "openturns/SquareComplexMatrix.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS class SymmetricMatrix; class IdentityMatrix; class SquareMatrix; class Matrix; class TriangularComplexMatrix; /** * @class HermitianMatrix * * HermitianMatrix implements the classical mathematical hermitian matrix */ class OT_API HermitianMatrix : public SquareComplexMatrix { CLASSNAME; #ifndef SWIG friend HermitianMatrix operator * (const Complex s, const HermitianMatrix & m); #endif public: typedef Collection ComplexCollection; typedef Collection ScalarCollection; typedef TypedInterfaceObject::Implementation Implementation ; /** Default constructor */ HermitianMatrix(); /** Constructor with size (dim, which is the same for nbRows_ and nbColumns_) */ explicit HermitianMatrix(const UnsignedInteger dimension); /** Constructor with implementation */ HermitianMatrix(const Implementation & i); /** Copy constructor, added to solve glitches with inheritance */ HermitianMatrix(const HermitianMatrix & h); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Get the dimension of the matrix */ UnsignedInteger getDimension() const; /** HermitianMatrix transpose */ HermitianMatrix transpose () const; /** HermitianMatrix conjugate */ HermitianMatrix conjugate () const; /** HermitianMatrix conjugate and transpose */ HermitianMatrix conjugateTranspose () const; /** Get the real part of the matrix */ SymmetricMatrix real() const; /** Get the imaginary part of the matrix */ SquareMatrix imag() const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j) ; /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Complex operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Check if the internal representation is really hermitian */ void checkHermitian() const; /** HermitianMatrix additions */ HermitianMatrix operator + (const HermitianMatrix & m) const; /** ComplexMatrix additions */ SquareComplexMatrix operator + (const SquareComplexMatrix & m) const; /** HermitianMatrix substractions */ HermitianMatrix operator - (const HermitianMatrix & m) const; /** ComplexMatrix substractions */ SquareComplexMatrix operator - (const SquareComplexMatrix & m) const; #ifdef _MSC_VER // VS2010 does not like 'using' being called after overloads using SquareComplexMatrix::operator *; #endif /** Multiplication with a Complex */ HermitianMatrix operator * (const Complex s) const; /** ComplexMatrix multiplications (must have consistent dimensions) */ ComplexMatrix operator * (const ComplexMatrix & m) const; /** ComplexMatrix multiplications (must have consistent dimensions) */ SquareComplexMatrix operator * (const SquareComplexMatrix & m) const; /** HermitianMatrix multiplications */ SquareComplexMatrix operator * (const HermitianMatrix & m) const; /** TriangularComplexMatrix multiplications */ SquareComplexMatrix operator * (const TriangularComplexMatrix & m) const; /** Real SquareMatrix multiplications */ SquareComplexMatrix operator * (const SquareMatrix & m) const; /** Real Matrix multiplications (must have consistent dimensions) */ ComplexMatrix operator * (const Matrix & m) const; /** Real SymmetricMatrix multiplications */ SquareComplexMatrix operator * (const SymmetricMatrix & m) const; /** Real IdentityMatrix multiplications */ HermitianMatrix operator * (const IdentityMatrix & m) const; /** Multiplication with a NumericaComplexCollection (must have consistent dimensions) */ ComplexCollection operator * (const ComplexCollection & p) const; /** Multiplication with a NumericaScalarCollection (must have consistent dimensions) */ ComplexCollection operator * (const ScalarCollection & p) const; /** Multiplication with a Point (must have consistent dimensions) */ ComplexCollection operator * (const Point & p) const; #ifndef _MSC_VER using SquareComplexMatrix::operator *; #endif /** HermitianMatrix integer power */ HermitianMatrix power(const UnsignedInteger n) const; /** Division by a Complex*/ HermitianMatrix operator / (const Complex s) const; /** Compute the Cholesky factor */ TriangularComplexMatrix computeCholesky(const Bool keepIntact = true); private: /** Check if one needs to symmetrized the internal representation of the tensor */ mutable Bool hasBeenHermitianized_; } ; /* class HermitianMatrix */ inline HermitianMatrix operator * (const Complex s, const HermitianMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HERMITIANMATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/IdentityMatrix.hxx000066400000000000000000000074231307543307100243250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class IdentityMatrix implements identity matrices * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IDENTITYMATRIX_HXX #define OPENTURNS_IDENTITYMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/CorrelationMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IdentityMatrix */ class OT_API IdentityMatrix : public CorrelationMatrix { CLASSNAME; public: /** Default constructor */ IdentityMatrix(); /** Constructor with size */ explicit IdentityMatrix(const UnsignedInteger dim); /** String converter */ virtual String __repr__() const; /** IdentityMatrix transpose */ IdentityMatrix transpose () const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Multiplications */ #ifdef _MSC_VER // VS2010 does not like 'using' being called after overloads using CorrelationMatrix::operator *; #endif Matrix operator * (const Matrix & m) const; SquareMatrix operator * (const SquareMatrix & m) const; SymmetricMatrix operator * (const SymmetricMatrix & m) const; CovarianceMatrix operator * (const CovarianceMatrix & m) const; CorrelationMatrix operator * (const CorrelationMatrix & m) const; #ifndef _MSC_VER using CorrelationMatrix::operator *; #endif /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); /** Compute determinant */ Scalar computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact = true); Scalar computeDeterminant(const Bool keepIntact = true); /** Compute eigenvalues */ Point computeEigenValues(const Bool keepIntact = true); Point computeEV(SquareMatrix & v, const Bool keepIntact = true); /** Check if the matrix is SPD */ virtual Bool isPositiveDefinite(const Bool keepIntact = true); /** Build the Cholesky factorization of the matrix */ TriangularMatrix computeCholesky(const Bool keepIntact = true); /** Compute singular values */ Point computeSingularValues(const Bool keepIntact = true); Point computeSVD(Matrix & u, Matrix & vT, const Bool fullSVD = false, const Bool keepIntact = true); protected: /** Constructor with implementation */ IdentityMatrix(const Implementation & i); private: /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j); }; /* class IdentityMatrix */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COVARIANCEMATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Indices.hxx000066400000000000000000000051471307543307100227260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Set of indices defined as a Collection of UnsignedInteger class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INDICES_HXX #define OPENTURNS_INDICES_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Indices * * A class that holds a collection of indices */ class OT_API Indices : public PersistentCollection { CLASSNAME; public: typedef PersistentCollection InternalType; /** Default constructor */ Indices() : InternalType() { // Nothing to do } /** Constructor that pre-allocate size elements */ explicit Indices(const UnsignedInteger size) : InternalType(size) { // Nothing to do } /** Constructor that pre-allocate size elements with value */ Indices(const UnsignedInteger size, const UnsignedInteger value) : InternalType(size, value) { // Nothing to do } /** Constructor from a range of elements */ template Indices(const InputIterator first, const InputIterator last) : InternalType(first, last) { // Nothing to do } /** Destructor */ ~Indices() throw() {} /** Check that no value is repeated and no value exceed the given bound */ Bool check(const UnsignedInteger bound) const; /** Check if the indices are increasing */ Bool isIncreasing() const; /** Fill the indices with a linear progression, starting from start value by step stepsize */ void fill(const UnsignedInteger initialValue = 0, const UnsignedInteger stepSize = 1); #ifdef SWIG /** @copydoc Object::__repr__() const */ virtual String __repr__() const; /** @copydoc Object::__str__() const */ virtual String __str__(const String & offset = "") const; #endif }; /* class Indices */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INDICES_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Lapack.hxx000066400000000000000000000273761307543307100225530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file includes all of the Lapack functions used in the platform * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LAPACK_HXX #define OPENTURNS_LAPACK_HXX #include "openturns/OTconfig.hxx" BEGIN_C_DECLS /** Function daxpy is to be used to compute the sum or the difference of two matrices y := alpha*x + y */ void daxpy_(int *n, double *alpha, double *x, int *incx, double *y, int *incy); /** Function dscal is to be used to compute the product of a matrix by a numerical scalar x := alpha*x */ void dscal_(int *n, double *alpha, double *x, int *incx); /** Function ddot is to be used to compute the dot product of two vectors dot := y'*x */ double ddot_(int *n, double *x, int *incx, double *y, int *incy); /** Function dnrm2 is to be used to compute the Euclidean norm of a vector dnrm2 := sqrt(x'*x) */ double dnrm2_(int *n, double *x, int *incx); /** Function dasum is to be used to compute the 1-norm of a vector dasum := |x_1|+...+|x_n| */ double dasum_(int *n, double *x, int *incx); /** Function drot is to be used to generate a Givens rotation [ c s] [a] [r] [-s c] * [b] = [0] */ void drotg_(double *a, double *b, double *c, double *s); /** Function drot is to be used to apply a Givens rotation defined by (c, s) to a sequence of 2D points (x_i, y_i), i=0..n-1. The transformation is done in-place. */ void drot_(int *n, double *x, int *incx, double *y, int *incy, double *c, double *s); /** Function dgemv is to be used to compute the product of a matrix with a vector (numerical point) y := alpha*A(trans)*x + beta*y */ void dgemv_(char *trans, int *m, int *n, double *alpha, double *a, int *lda, double *x, int *incx, double *beta, double *y, int *incy, int *ltrans); /** Function dsymv is to be used to compute the product of a matrix with a vector (numerical point); optimization for symmetric matrices y := alpha*A(trans)*x + beta*y */ void dsymv_(char *uplo, int *n, double *alpha, double *a, int *lda, double *x, int *incx, double *beta, double *y, int *incy, int *luplo); /** Function dspmv is to be used to compute the product of a matrix with a vector (numerical point); optimization for positive definite matrices y := alpha*A*x + beta*y */ void dspmv_(char *uplo, int *n, double *alpha, double *a, double *x, int *incx, double *beta, double *y, int *incy, int *luplo); /** Function dgemm is to be used to compute the product of two matrices c := alpha*a(trans)*b(trans) + beta*c */ void dgemm_(char *transa, char *transb, int *m, int *n, int *k, double *alpha, double *a, int *lda, double *b, int *ldb, double *beta, double *c, int *ldc, int *ltransa, int *ltransb); /** Function dsymm is to be used to compute the product of two matrices; optimization for symmetric matrices c := alpha*a*b + beta*c if side is l or alpha*b*a + beta*c if side is r */ void dsymm_(char *side, char *uplo, int *m, int *n, double *alpha, double *a, int *lda, double *b, int *ldb, double *beta, double *c, int *ldc, int *lside, int *luplo); /** Function dgeev is used to compute the eigenvalues of a square matrix */ void dgeev_(char *jobvl, char *jobvr, int *n, double *a, int *lda, double *wr, double *wi, double *vl, int *ldvl, double *vr, int *ldvr, double *work, int *lwork, int *info, int *ljobvl, int *ljobvr); /** Function dsyev is used to compute the eigenvalues of a symmetric matrix */ void dsyev_(char *jobz, char *uplo, int *n, double *a, int *lda, double *w, double *work, int *lwork, int *info, int *ljobz, int *luplo); /** Function dgelsy is used to solve the linear system corresponding to a matrix */ void dgelsy_(int *m, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, int *jpvt, double *rcond, int *rank, double *work, int *lwork, int *info); /** Function dgesv is used to solve the linear system corresponding to a square matrix */ void dgesv_(int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, int *info); /** Function dsysv is used to solve the linear system corresponding to a symmetric matrix */ void dsysv_(char *uplo, int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, double *work, int *lwork, int *info, int *luplo); /** Function dpotrf is used to check if a matrix is positive definite */ void dpotrf_(char *uplo, int *n, double *a, int *lda, int *info, int *luplo); /** Function dgetrf is used to make the LU factorisation of a matrix */ void dgetrf_(int *m, int *n, double *a, int *lda, int *ipiv, int *info); /** Function dsytrf is used to make the LU factorisation of a symmetric matrix */ void dsytrf_(char *uplo, int *n, double *a, int *lda, int *ipiv, double *work, int *lwork, int *info, int *luplo); /** Function dgetrf is used to make the QR factorisation of a matrix */ void dgeqrf_(int *m, int *n, double *a, int *lda, double *tau, double *work, int *lwork, int *info); /** Function dorgqr is used to generate a real matrix Q with orthogonal columns */ void dorgqr_(int *m, int *n, int *k, double *a, int *lda, double *tau, double *work, int *lwork, int *info); /** Function dger is used to make the Kronecker product of two vectors */ void dger_(int *m, int *n, double *alpha, double *x, int *incx, double *y, int *incy, double *a, int *lda); /** Function dstev computes the eigenvalues and eigenvectors of a symmetric tridiagonal matrix */ void dstev_(char *jobz, int *n, double *d, double *e, double *z, int *ldz, double *work, int *info, int *ljobz); /** Function dsyr performs a rank one update on a square matrix A -> A + alpha * x . x' */ void dsyr_(char *uplo, int *n, double *alpha, double *x, int *incx, double *a, int *lda, int *luplo); /** Function dsyr performs a rank one update on a square matrix A -> A + alpha * x . x' */ void dsyrk_(char *uplo, char *trans, int *n, int *k, double *alpha, double *a, int *lda, double *beta, double *C, int *ldc, int *luplo, int *ltrans); /** Function dtrsm solves a triangular linear system A.X = alpha B, where A can be transposed or not */ void dtrsm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *A, int *lda, double *B, int *ldb, int *lside, int *luplo, int *ltransa, int *ldiag); /** Function dgesdd computes singular values by using a divide and conquer strategy. The number of singular values is the min of the column dimension and the row dimension. */ void dgesdd_(char *jobz, int *m, int *n, double *A, int *lda, double *S, double *U, int *ldu, double *VT, int *ldvt, double *work, int *lwork, int *iwork, int *info, int *ljobz); /** Function dtrmv is to be used to compute the product of a triangular (upper or lower) matrix with a vector (numerical point) */ void dtrmv_(char *uplo, char *trans, char *diag, int *n, double *A, int *lda, double *X, int *incx, int *luplo, int *ltrans, int *ldiag); /** Function dtrmm is to be used to compute the product of a triangular (upper or lower) matrix with another matrix */ void dtrmm_(char *side, char *uplo, char *trans, char *diag, int *m, int *n, double *alpha , double *A, int *lda, double *B, int *ldb, int *lside, int *luplo, int *ltrans, int *ldiag); /** BLAS routines for complex values */ /** Function zaxpy is to be used to compute the sum or the difference of two complex matrices y := alpha*x + y */ void zaxpy_(int *n, std::complex *alpha, std::complex *x, int *incx, std::complex *y, int *incy); /** Function zscal is to be used to compute the product of a complex matrix by a numerical complex x := alpha*x */ void zscal_(int *n, std::complex *alpha, std::complex *x, int *incx); /** Function zgemm is to be used to compute the product of two complex matrices c := alpha*a(trans)*b(trans) + beta*c */ void zgemm_(char *transa, char *transb, int *m, int *n, int *k, std::complex *alpha, std::complex *a, int *lda, std::complex *b, int *ldb, std::complex *beta, std::complex *c, int *ldc, int *ltransa, int *ltransb); /** Function zsymm is to be used to compute the product of two complex matrices * optimization for symmetric matrices c := alpha*a*b + beta*c if side is l or alpha*b*a + beta*c if side is r */ void zsymm_(char *side, char *uplo, int *m, int *n, std::complex *alpha, std::complex *a, int *lda, std::complex *b, int *ldb, std::complex *beta, std::complex *c, int *ldc, int *lside, int *luplo); /** Function zhemm is to be used to compute the product of two complex matrices * optimization for hermitian matrices c := alpha*a*b + beta*c if side is l or alpha*b*a + beta*c if side is r */ void zhemm_(char *side, char *uplo, int *m, int *n, std::complex *alpha, std::complex *a, int *lda, std::complex *b, int *ldb, std::complex *beta, std::complex *c, int *ldc, int *lside, int *luplo); /** Function zpotrf is used to computes the Cholesky factorization of a complex hermitian positive definite matrix */ void zpotrf_(char *uplo, int *n, std::complex *a, int *lda, int *info, int *luplo); /** Function zgemv is to be used to compute the product of a complex matrix with a complex vector y := alpha*A(trans)*x + beta*y */ void zgemv_(char *trans, int *m, int *n, std::complex *alpha, std::complex *a, int *lda, std::complex *x, int *incx, std::complex *beta, std::complex *y, int *incy, int *ltrans); /** Function zhemv is to be used to compute the product of a complex matrix with a vector ; optimization for hermitian matrices y := alpha*A(trans)*x + beta*y */ void zhemv_(char *uplo, int *n, std::complex *alpha, std::complex *a, int *lda, std::complex *x, int *incx, std::complex *beta, std::complex *y, int *incy, int *luplo); /** Function zcopy is to be used to copy a vector x to a vector y */ void zcopy_(int *n, std::complex *x, int *incx, std::complex *y, int *incy); /** Function ztrmv is to be used to compute the product of a triangular (upper or lower) matrix with a vector */ void ztrmv_(char *uplo, char *trans, char *diag, int *n, std::complex *A, int *lda, std::complex *X, int *incx, int *luplo, int *ltrans, int *ldiag); /** Function ztrmm is to be used to compute the product of a triangular (upper or lower) matrix with another matrix */ void ztrmm_(char *side, char *uplo, char *trans, char *diag, int *m, int *n, std::complex *alpha , std::complex *A, int *lda, std::complex *B, int *ldb, int *lside , int *luplo, int *ltrans, int *ldiag); /** Function ztrmm is to be used to compute the product of a triangular (upper or lower) matrix with another matrix */ void zgelsy_(int *m, int *n, int *nrhs, std::complex *A, int *lda, std::complex *B, int *ldb, int *jpvt, double *rcond, int *rank, std::complex *work, int *lwork, double *rwork, int *info); /** Function dposv is to be used to solve a linear system with a symmetric definite positive matrix */ void dposv_(char *uplo, int *n, int *nrhs, double *A, int *lda, double *B, int *ldb, int *info, int *luplo); END_C_DECLS #endif /* OPENTURNS_LAPACK_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Matrix.hxx000066400000000000000000000145621307543307100226150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Matrix implements the classical mathematical matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MATRIX_HXX #define OPENTURNS_MATRIX_HXX #include "openturns/MatrixImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS class CovarianceMatrix; class IdentityMatrix; class SquareMatrix; class SymmetricMatrix; /** * @class Matrix * * Matrix implements the classical mathematical matrix */ class OT_API Matrix : public TypedInterfaceObject { CLASSNAME; #ifndef SWIG /** Declaration of friend operators */ friend Matrix operator * (const Scalar s, const Matrix & m); #endif public: typedef Collection ScalarCollection; typedef Collection ComplexCollection; /** Default constructor */ Matrix(); /** Constructor with implementation */ Matrix(const Implementation & i); /** Constructor with implementation */ Matrix(const MatrixImplementation & i); /** Constructor with size (rowDim and colDim) */ Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim); /** Constructor from range of external collection */ template Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ScalarCollection & elementsValues); /** Constructor from symmetric matrix */ Matrix(const SymmetricMatrix & symmetric); /** Set small elements to zero */ virtual Matrix clean(const Scalar threshold) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j); /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** Get the dimensions of the matrix */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Matrix transpose */ Matrix transpose () const; /** Row extraction */ const Matrix getRow(const UnsignedInteger rowIndex) const; /** Column extration */ const Matrix getColumn(const UnsignedInteger columnIndex) const; /** Matrix additions (must have the same dimensions) */ Matrix operator + (const Matrix & m) const; Matrix operator + (const SymmetricMatrix & m) const; /** Matrix substractions (must have the same dimensions) */ Matrix operator - (const Matrix & m) const; Matrix operator - (const SymmetricMatrix & m) const; /** Matrix multiplications (must have consistent dimensions) */ Matrix operator * (const Matrix & m) const; Matrix operator * (const SymmetricMatrix & m) const; Matrix operator * (const IdentityMatrix & m) const; /** Multiplication with a Point (must have consistent dimensions) */ Point operator * (const Point & pt) const; /** Multiplication with a Scalar */ Matrix operator * (const Scalar s) const; /** Division by a Scalar*/ Matrix operator / (const Scalar s) const; /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); /** Compute singular values */ Point computeSingularValues(const Bool keepIntact = true); Point computeSVD(Matrix & u, Matrix & vT, const Bool fullSVD = false, const Bool keepIntact = true); /** Build the QR factorization of the matrix */ virtual Matrix computeQR(Matrix & R, const Bool fullQR = false, const Bool keepIntact = true); /** Compute the associated Gram matrix */ virtual CovarianceMatrix computeGram(const Bool transpose = true) const; /** Comparison operators */ Bool operator == (const Matrix & rhs) const; /** Empty returns true if there is no element in the matrix */ Bool isEmpty() const; // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; }; /* class Matrix */ /** Declaration of friend operators */ inline Matrix operator * (const Scalar s, const Matrix & m) { return m.operator * (s); } /** Constructor from range of external collection */ template Matrix::Matrix(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last) : TypedInterfaceObject(new MatrixImplementation(rowDim, colDim, first, last)) { // Nothing to do } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/MatrixImplementation.hxx000066400000000000000000000316761307543307100255300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MatrixImplementation implements the classical mathematical Matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MATRIXIMPLEMENTATION_HXX #define OPENTURNS_MATRIXIMPLEMENTATION_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/Description.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MatrixImplementation * * MatrixImplementation implements the classical mathematical MatrixImplementation */ // Forward declaration of ComplexMatrixImplementation class ComplexMatrixImplementation; class OT_API MatrixImplementation : public PersistentCollection { CLASSNAME; #ifndef SWIG /** Declaration of friend operators */ friend MatrixImplementation operator * (const Scalar s, const MatrixImplementation & matrix) { return matrix.operator * (s); } #endif public: typedef Collection ScalarCollection; typedef Collection ComplexCollection; /** Default constructor */ MatrixImplementation(); /** Constructor with size (rowDim and colDim) */ MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim); /** Constructor from range of external collection */ template MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const ScalarCollection & elementsValues); /** Virtual constructor */ virtual MatrixImplementation * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () gives access to the elements of the MatrixImplementation (to modify these elements) */ /** The element of the MatrixImplementation is designated by its row number i and its column number j */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j); /** Operator () gives access to the elements of the MatrixImplementation (read only) */ /** The element of the MatrixImplementation is designated by its row number i and its column number j */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j) const; /** Get the dimensions of the MatrixImplementation */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Dimension (for square matrices only */ UnsignedInteger getDimension() const; /** MatrixImplementation transpose */ MatrixImplementation transpose () const; /** Row extraction */ const MatrixImplementation getRow(const UnsignedInteger rowIndex) const; const MatrixImplementation getRowSym(const UnsignedInteger rowIndex) const; /** Column extration */ const MatrixImplementation getColumn(const UnsignedInteger columnIndex) const; const MatrixImplementation getColumnSym(const UnsignedInteger columnIndex) const; /** MatrixImplementation addition (must have the same dimensions) */ MatrixImplementation operator + (const MatrixImplementation & matrix) const; /** In-place MatrixImplementation addition (must have the same dimensions) */ MatrixImplementation & operator += (const MatrixImplementation & matrix); /** MatrixImplementation substraction (must have the same dimensions) */ MatrixImplementation operator - (const MatrixImplementation & matrix) const; /** In-place MatrixImplementation substraction (must have the same dimensions) */ MatrixImplementation & operator -= (const MatrixImplementation & matrix); /** MatrixImplementation multiplications (must have consistent dimensions) */ MatrixImplementation genProd (const MatrixImplementation & matrix, const Bool transposeLeft = false, const Bool transposeRight = false) const; MatrixImplementation symProd (const MatrixImplementation & m, const char symSide) const; /** MatrixImplementation integer power */ MatrixImplementation genPower(const UnsignedInteger n) const; MatrixImplementation symPower(const UnsignedInteger n) const; /** Multiplications with a Point (must have consistent dimensions) */ Point genVectProd (const Point & pt, const Bool transpose = false) const; Point symVectProd (const Point & pt) const; /** Using triangular matrix */ ScalarCollection triangularVectProd (const ScalarCollection & pt, const char side = 'L') const; ScalarCollection triangularVectProd (const Point & pt, const char side = 'L') const; /** Multiplication with a Scalar */ MatrixImplementation operator * (const Scalar s) const; /** In-place Multiplication with a Scalar */ MatrixImplementation & operator *= (const Scalar s); /** Division by a Scalar*/ MatrixImplementation operator / (const Scalar s) const; /** In-place Division by a Scalar*/ MatrixImplementation & operator /= (const Scalar s); /** Symmetrize MatrixImplementation in case it is a symmetric matrix (stored as a triangular matrix) */ void symmetrize() const; /** Triangularize MatrixImplementation in case it is a triangular matrix (stored as a square matrix) */ void triangularize(const Bool isLowerTriangular) const; /** Resolution of a linear system in case of a rectangular matrix */ Point solveLinearSystemRect(const Point & b, const Bool keepIntact = true); MatrixImplementation solveLinearSystemRect(const MatrixImplementation & b, const Bool keepIntact = true); /** Resolution of a linear system in case of a square matrix */ Point solveLinearSystemSquare(const Point & b, const Bool keepIntact = true); MatrixImplementation solveLinearSystemSquare(const MatrixImplementation & b, const Bool keepIntact = true); /** Resolution of a linear system in case of a triangular matrix */ Point solveLinearSystemTri(const Point & b, const Bool keepIntact = true, const Bool lower = true, const Bool transpose = false); MatrixImplementation solveLinearSystemTri(const MatrixImplementation & b, const Bool keepIntact = true, const Bool lower = true, const Bool transpose = false); /** Resolution of a linear system in case of a symmetric matrix */ Point solveLinearSystemSym(const Point & b, const Bool keepIntact = true); MatrixImplementation solveLinearSystemSym(const MatrixImplementation & b, const Bool keepIntact = true); /** Resolution of a linear system in case of a covariance matrix */ Point solveLinearSystemCov(const Point & b, const Bool keepIntact = true); MatrixImplementation solveLinearSystemCov(const MatrixImplementation & b, const Bool keepIntact = true); /** Triangular matrix product : side argument L/R for the position of the triangular matrix, up/lo to tell if it */ MatrixImplementation triangularProd(const MatrixImplementation & m, const char side = 'L', const char uplo = 'L') const; /** Compute determinant */ Scalar computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact = true); Scalar computeDeterminant(const Bool keepIntact = true); Scalar computeLogAbsoluteDeterminantSym(Scalar & sign, const Bool keepIntact = true); Scalar computeDeterminantSym(const Bool keepIntact = true); /** Compute trace */ Scalar computeTrace() const; /** Compute eigenvalues */ ComplexCollection computeEigenValuesSquare(const Bool keepIntact = true); ComplexCollection computeEVSquare(ComplexMatrixImplementation & v, const Bool keepIntact = true); Point computeEigenValuesSym(const Bool keepIntact = true); Point computeEVSym(MatrixImplementation & v, const Bool keepIntact = true); /** Compute singular values */ Point computeSingularValues(const Bool keepIntact = true); /** Build the singular value decomposition */ Point computeSVD(MatrixImplementation & u, MatrixImplementation & vT, const Bool fullSVD = false, const Bool keepIntact = true); /** Check if the matrix is symmetric */ virtual Bool isSymmetric() const; /** Check if the matrix is SPD */ virtual Bool isPositiveDefinite(const Bool keepIntact = true); /** Check if the matrix values belong to (-1;1) */ virtual Bool hasUnitRange() const; /** Set small elements to zero */ virtual MatrixImplementation clean(const Scalar threshold) const; virtual MatrixImplementation cleanSym(const Scalar threshold) const; /** Build the Cholesky factorization of the matrix */ virtual MatrixImplementation computeCholesky(const Bool keepIntact = true); /** Update in-place the Cholesky factor L of an SPD matrix M given a rank-one update vv^T, ie L becomes Lnew such that LnewLnew^t = Mnew with Mnew = M + vv^t */ static void CholeskyUpdate(MatrixImplementation & cholesky, const Point & vector); /** Downdate in-place the Cholesky factor L of an SPD matrix M given a rank-one downdate vv^T, ie L becomes Lnew such that LnewLnew^t = Mnew with Mnew = M - vv^t */ static void CholeskyDowndate(MatrixImplementation & cholesky, const Point & vector); /** Build the QR factorization of the matrix */ virtual MatrixImplementation computeQR(MatrixImplementation & R, const Bool fullQR = false, const Bool keepIntact = true); /** Compute the Gram matrix associated to the matrix */ virtual MatrixImplementation computeGram(const Bool transpose = true) const; /** Comparison operators */ Bool operator == (const MatrixImplementation & rhs) const; inline Bool operator != (const MatrixImplementation & rhs) const { return !((*this) == rhs); } /** Empty returns true if there is no element in the MatrixImplementation */ Bool isEmpty() const; /** Returns true if triangular lower or upper */ Bool isTriangular(Bool lower = true) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: /** MatrixImplementation Dimensions */ UnsignedInteger nbRows_; UnsignedInteger nbColumns_; /** Position conversion function : the indices i & j are used to compute the actual position of the element in the collection */ inline UnsignedInteger convertPosition (const UnsignedInteger i, const UnsignedInteger j) const; }; /* class MatrixImplementation */ inline UnsignedInteger MatrixImplementation::convertPosition (const UnsignedInteger i, const UnsignedInteger j) const { return i + nbRows_ * j ; } /** Constructor from range of external collection */ template MatrixImplementation::MatrixImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const InputIterator first, const InputIterator last) : PersistentCollection(rowDim * colDim, 0.0), nbRows_(rowDim), nbColumns_(colDim) { this->assign(first, last); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MATRIXIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/OTType.hxx000066400000000000000000000040331307543307100225250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Type * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTYPE_HXX #define OPENTURNS_OTTYPE_HXX #include "openturns/BipartiteGraph.hxx" #include "openturns/Cache.hxx" #include "openturns/Collection.hxx" #include "openturns/Description.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Indices.hxx" #include "openturns/Matrix.hxx" #include "openturns/MatrixImplementation.hxx" #include "openturns/Mesh.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SymmetricMatrix.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Tensor.hxx" #include "openturns/TensorImplementation.hxx" #include "openturns/ComplexTensorImplementation.hxx" #include "openturns/ComplexTensor.hxx" #include "openturns/DomainImplementation.hxx" #include "openturns/Domain.hxx" #include "openturns/Interval.hxx" #include "openturns/ComplexMatrixImplementation.hxx" #include "openturns/ComplexMatrix.hxx" #include "openturns/HermitianMatrix.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/TriangularComplexMatrix.hxx" #endif /* OPENTURNS_OTTYPE_HXX */ openturns-1.9/lib/src/Base/Type/openturns/PersistentCollection.hxx000066400000000000000000000160631307543307100255230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PersistentCollection defines top-most collection strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PERSISTENTCOLLECTION_HXX #define OPENTURNS_PERSISTENTCOLLECTION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Collection.hxx" #define TEMPLATE_CLASSNAMEINIT(T) template<> OT::String PersistentCollectionGetClassName() { return OT::String(#T); } BEGIN_NAMESPACE_OPENTURNS /** * @class PersistentCollection * * PersistentCollection defines top-most collection strategies */ /* Forward declaration */ template class PersistentCollection; /** Stream operator */ template inline OStream & operator << (OStream & OS, const PersistentCollection & collection) { return OS << collection.__repr__(); } template inline std::ostream & operator << (std::ostream & os, const PersistentCollection & collection) { return os << collection.__str__(); } /* Generic function for PersistentCollection of PersistentObject instances */ template String PersistentCollectionGetClassName() { return String("PersistentCollection<") + T::GetClassName() + String(">"); } /* Specializations for non-OT types */ template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } #ifndef OPENTURNS_UNSIGNEDLONG_SAME_AS_UINT64 template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } template<> inline String PersistentCollectionGetClassName() { return String("PersistentCollection"); } #endif template class PersistentCollection : public PersistentObject, public Collection { public: /** Class name accessor */ static String GetClassName() { return PersistentCollectionGetClassName(); } virtual String getClassName() const { return PersistentCollection::GetClassName(); } public: typedef Collection InternalType; typedef typename InternalType::ElementType ElementType; typedef typename InternalType::ValueType ValueType; typedef typename InternalType::iterator iterator; typedef typename InternalType::const_iterator const_iterator; typedef typename InternalType::reverse_iterator reverse_iterator; typedef typename InternalType::const_reverse_iterator const_reverse_iterator; /** Default constructor */ PersistentCollection() : PersistentObject(), Collection() { // Nothing to do } /** Constructor from a collection */ PersistentCollection(const Collection & collection) : PersistentObject(), Collection(collection) { // Nothing to do } /** Constructor that pre-allocate size elements */ PersistentCollection(const UnsignedInteger size) : PersistentObject(), Collection(size) { // Nothing to do } /** Constructor that pre-allocate size elements with value */ PersistentCollection(const UnsignedInteger size, const T & value) : PersistentObject(), Collection(size, value) { // Nothing to do } /** Constructor from a range of elements */ template PersistentCollection(InputIterator first, InputIterator last) : PersistentObject(), Collection(first, last) { // Nothing to do } /** Virtual constructor */ virtual PersistentCollection * clone() const { return new PersistentCollection(*this); } /** String converter */ inline String __repr__() const { return Collection::__repr__(); } inline String __str__(const String & offset = "") const { return Collection::__str__(offset); } /** Method save() stores the object through the StorageManager */ inline void save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "size", this->getSize() ); // We cannot write // std::copy( Collection::coll__.begin(), // Collection::coll__.end(), // AdvocateIterator< T >( adv ) ); // because AdvocateIterator is not copy-assignable. AdvocateIterator adv_it(adv); for (const_iterator cit = Collection::coll__.begin(); cit != Collection::coll__.end(); ++cit, ++adv_it) { *adv_it = *cit; } } /** Method load() reloads the object from the StorageManager */ inline void load(Advocate & adv) { PersistentObject::load(adv); UnsignedInteger size = 0; adv.loadAttribute( "size", size ); Collection::coll__.resize(size); std::generate( Collection::coll__.begin(), Collection::coll__.end(), AdvocateIterator< T >( adv ) ); } }; /* class PersistentCollection */ /** Comparison operator */ template inline Bool operator == (const PersistentCollection & lhs, const PersistentCollection & rhs) { return static_cast& >(lhs) == static_cast& >(rhs); } /** Comparison operator */ template inline Bool operator != (const PersistentCollection & lhs, const PersistentCollection & rhs) { return !(lhs == rhs); } /** Ordering operator */ template inline Bool operator < (const PersistentCollection & lhs, const PersistentCollection & rhs) { return static_cast& >(lhs) < static_cast& >(rhs); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PERSISTENTCOLLECTION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Point.hxx000066400000000000000000000111121307543307100224260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Point implements the classical mathematical point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POINT_HXX #define OPENTURNS_POINT_HXX #include #include "openturns/PersistentCollection.hxx" #include "openturns/Description.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Point * * Point implements the classical mathematical point */ class OT_API Point : public PersistentCollection { CLASSNAME; public: typedef PersistentCollection InternalType; typedef Collection ScalarCollection; typedef Point ImplementationType; /** Default constructor */ Point(); /** Constructor with size */ explicit Point(const UnsignedInteger size, const Scalar value = 0.0); /** Constructor from a collection */ Point(const Collection & coll); /** Virtual constructor */ virtual Point * clone() const; /** Description Accessor */ virtual void setDescription(const Description & description); virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Set small elements to zero */ Point clean(const Scalar threshold) const; /** Dimension accessor */ inline UnsignedInteger getDimension() const { return PersistentCollection::getSize(); } inline UnsignedInteger getSize() const { return PersistentCollection::getSize(); } /** Collection accessor */ inline const ScalarCollection & getCollection() const { return *this; } #ifndef SWIG /** Erase the elements between first and last */ iterator erase(const iterator first, const iterator last); /** Erase the element pointed by position */ iterator erase(iterator position); /** Erase the element pointed by position */ iterator erase(UnsignedInteger position); /** In-place addition operator */ Point & operator +=(const Point & other); /** In-place substraction operator */ Point & operator -=(const Point & other); #endif /** In-place product operator */ Point & operator *=(const Scalar scalar); /** In-place division operator */ Point & operator /=(const Scalar scalar); /** Norm */ Scalar norm() const; /** l1-norm */ Scalar norm1() const; /** linf-norm */ Scalar normInf() const; /** Norm^2 */ Scalar normSquare() const; /** Normalize the vector */ Point normalize() const; /** Square normalize the vector */ Point normalizeSquare() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: // /** The description of all components */ // Description:: p_description_; }; /* class Point */ #ifndef SWIG /** Comparison operator */ OT_API Bool operator == (const Point & lhs, const Point & rhs); /** Ordering operator */ OT_API Bool operator < (const Point & lhs, const Point & rhs); /** Product operator */ OT_API Point operator * (const Scalar scalar, const Point & point); /** Product operator */ OT_API Point operator * (const Point & point, const Scalar scalar); /** Division operator */ OT_API Point operator / (const Point & point, const Scalar scalar); /** Addition operator */ OT_API Point operator + (const Point & lhs, const Point & rhs); /** Substraction operator */ OT_API Point operator - (const Point & lhs, const Point & rhs); #endif /** Dot product operator */ OT_API Scalar dot(const Point & lhs, const Point & rhs); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POINT_HXX */ openturns-1.9/lib/src/Base/Type/openturns/PointWithDescription.hxx000066400000000000000000000047401307543307100254770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PointWithDescription extends the classical mathematical point with a description of the coordinates * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POINTWITHDESCRIPTION_HXX #define OPENTURNS_POINTWITHDESCRIPTION_HXX #include "openturns/Point.hxx" #include "openturns/Description.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PointWithDescription * * PointWithDescription extends the classical mathematical point with a description of the coordinates */ class OT_API PointWithDescription : public Point { CLASSNAME; public: /** Default constructor */ PointWithDescription(); /** Constructor with size */ explicit PointWithDescription(const UnsignedInteger size, const Scalar value = 0.0); /** Constructor from a collection */ PointWithDescription(const Collection & coll); /** Constructor from a base class */ PointWithDescription(const Pointer & p_base); /** Virtual constructor */ virtual PointWithDescription * clone() const; /** Destructor */ virtual ~PointWithDescription() throw(); /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The description of all components */ Description description_; }; /* class PointWithDescription */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POINTWITHDESCRIPTION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/SquareComplexMatrix.hxx000066400000000000000000000104321307543307100253160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SquareComplexMatrix implements the classical mathematical square matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SQUARECOMPLEXMATRIX_HXX #define OPENTURNS_SQUARECOMPLEXMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/ComplexMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS class IdentityMatrix; class HermitianMatrix; class TriangularComplexMatrix; /** * @class SquareComplexMatrix * * SquareComplexMatrix implements the classical mathematical square matrix */ class OT_API SquareComplexMatrix : public ComplexMatrix { CLASSNAME; #ifndef SWIG friend SquareComplexMatrix operator * (const Complex s, const SquareComplexMatrix & m); #endif public: /** Default constructor */ SquareComplexMatrix(); /** Constructor with size (dimension, which is the same for nbRows_ and nbColumns_) */ explicit SquareComplexMatrix(const UnsignedInteger dim); /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ SquareComplexMatrix(const UnsignedInteger dimension, const ComplexCollection & elementsValues); /** Constructor with implementation */ SquareComplexMatrix(const Implementation & i); /** Constructor from hermitian matrix */ SquareComplexMatrix(const HermitianMatrix & hermitian); /** String converter */ String __repr__() const; /** Get the dimension of the matrix */ UnsignedInteger getDimension() const; /** SquareComplexMatrix transpose */ SquareComplexMatrix transpose () const; /** SquareComplexMatrix transpose */ SquareComplexMatrix conjugate () const; /** SquareComplexMatrix transpose */ SquareComplexMatrix conjugateTranspose () const; /** SquareComplexMatrix additions (must have the same dimensions) */ SquareComplexMatrix operator + (const SquareComplexMatrix & m) const; SquareComplexMatrix operator + (const HermitianMatrix & m) const; /** SquareComplexMatrix substractions (must have the same dimensions) */ SquareComplexMatrix operator - (const SquareComplexMatrix & m) const; SquareComplexMatrix operator - (const HermitianMatrix & m) const; /** SquareComplexMatrix multiplications (must have consistent dimensions) */ ComplexMatrix operator * (const ComplexMatrix & m) const; SquareComplexMatrix operator * (const SquareComplexMatrix & m) const; SquareComplexMatrix operator * (const HermitianMatrix & m) const; SquareComplexMatrix operator * (const IdentityMatrix & m) const; /** SquareComplexMatrix integer power */ SquareComplexMatrix power(const UnsignedInteger n) const; /** Multiplication with a Point (must have consistent dimensions) */ ComplexCollection operator * (const ComplexCollection & p) const; /** Multiplication with a Point (must have consistent dimensions) */ ComplexCollection operator * (const ScalarCollection & p) const; /** Multiplication with a Point (must have consistent dimensions) */ ComplexCollection operator * (const Point & p) const; /** Multiplication with a Complex */ SquareComplexMatrix operator * (const Complex s) const; /** Division by a Complex*/ SquareComplexMatrix operator / (const Complex s) const; } ; /* class SquareComplexMatrix */ inline SquareComplexMatrix operator * (const Complex s, const SquareComplexMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SQUARECOMPLEXMATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/SquareMatrix.hxx000066400000000000000000000115511307543307100237710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SquareMatrix implements the classical mathematical square matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SQUAREMATRIX_HXX #define OPENTURNS_SQUAREMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS class IdentityMatrix; class SymmetricMatrix; class SquareComplexMatrix; /** * @class SquareMatrix * * SquareMatrix implements the classical mathematical square matrix */ class OT_API SquareMatrix : public Matrix { CLASSNAME; #ifndef SWIG friend SquareMatrix operator * (const Scalar s, const SquareMatrix & m); #endif public: /** Default constructor */ SquareMatrix(); /** Constructor with implementation */ SquareMatrix(const Implementation & i); /** Constructor with implementation */ SquareMatrix(const MatrixImplementation & i); /** Constructor with size (dim, which is the same for nbRows_ and nbColumns_) */ explicit SquareMatrix(const UnsignedInteger dim); #if 0 /** Constructor from range of external collection */ template SquareMatrix(const UnsignedInteger dim, InputIterator first, InputIterator last); #endif /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ SquareMatrix(const UnsignedInteger dim, const ScalarCollection & elementsValues); /** Constructor from symmetric matrix */ SquareMatrix(const SymmetricMatrix & symmetric); /** String converter */ String __repr__() const; /** Get the dimension of the matrix */ UnsignedInteger getDimension() const; /** SquareMatrix transpose */ SquareMatrix transpose () const; /** SquareMatrix additions (must have the same dimensions) */ SquareMatrix operator + (const SquareMatrix & m) const; SquareMatrix operator + (const SymmetricMatrix & m) const; /** SquareMatrix substractions (must have the same dimensions) */ SquareMatrix operator - (const SquareMatrix & m) const; SquareMatrix operator - (const SymmetricMatrix & m) const; /** SquareMatrix multiplications (must have consistent dimensions) */ #ifdef _MSC_VER // VS2010 does not like 'using' being called after overloads using Matrix::operator *; #endif SquareMatrix operator * (const SquareMatrix & m) const; SquareMatrix operator * (const SymmetricMatrix & m) const; SquareMatrix operator * (const IdentityMatrix & m) const; /** SquareMatrix integer power */ SquareMatrix power(const UnsignedInteger n) const; /** Multiplication with a Point (must have consistent dimensions) */ Point operator * (const Point & p) const; /** Multiplication with a Scalar */ SquareMatrix operator * (const Scalar s) const; // We import the definitions from the upper class (for Matrix multiplication) #ifndef _MSC_VER // VS2010 does not like 'using' being called after overloads using Matrix::operator *; #endif /** Division by a Scalar*/ SquareMatrix operator / (const Scalar s) const; /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); /** Compute determinant */ Scalar computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact = true); Scalar computeDeterminant(const Bool keepIntact = true); /** Compute trace */ Scalar computeTrace() const; /** Compute eigenvalues */ ComplexCollection computeEigenValues(const Bool keepIntact = true); ComplexCollection computeEV(SquareComplexMatrix & v, const Bool keepIntact = true); /** Check if it is diagonal */ Bool isDiagonal() const; protected: private: }; /* class SquareMatrix */ inline SquareMatrix operator * (const Scalar s, const SquareMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/SymmetricMatrix.hxx000066400000000000000000000133021307543307100245010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SymmetricMatrix implements the classical mathematical symmetric matrix * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SYMMETRICMATRIX_HXX #define OPENTURNS_SYMMETRICMATRIX_HXX #include "openturns/OTprivate.hxx" #include "openturns/SquareMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS class IdentityMatrix; /** * @class SymmetricMatrix * * SymmetricMatrix implements the classical mathematical square matrix */ class OT_API SymmetricMatrix : public SquareMatrix { CLASSNAME; #ifndef SWIG friend SymmetricMatrix operator * (const Scalar & s, const SymmetricMatrix & m); #endif public: /** Default constructor */ SymmetricMatrix(); /** Constructor with implementation */ SymmetricMatrix(const Implementation & i); /** Constructor with implementation */ SymmetricMatrix(const MatrixImplementation & i); /** Copy constructor, added to solve glitches with inheritance */ SymmetricMatrix(const SymmetricMatrix & s); /** Constructor with size (dim, which is the same for nbRows_ and nbColumns_) */ explicit SymmetricMatrix(const UnsignedInteger dim); #if 0 /** Constructor from range of external collection */ template SymmetricMatrix(const UnsignedInteger dim, InputIterator first, InputIterator last); #endif /** Constructor from external collection */ /** If the dimensions of the matrix and of the collection */ /** do not correspond, either the collection is truncated */ /** or the rest of the matrix is filled with zeros */ SymmetricMatrix(const UnsignedInteger dim, const ScalarCollection & elementsValues); /** Check if the internal representation is actually symmetric */ void checkSymmetry() const; /** Test if the matrix is diagonal */ Bool isDiagonal() const; /** Row extraction */ const Matrix getRow(const UnsignedInteger rowIndex) const; /** Column extration */ const Matrix getColumn(const UnsignedInteger columnIndex) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j); /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** SymmetricMatrix transpose */ SymmetricMatrix transpose () const; /** SymmetricMatrix addition (must have the same dimensions) */ Matrix operator + (const Matrix & m) const; SquareMatrix operator + (const SquareMatrix & m) const; SymmetricMatrix operator + (const SymmetricMatrix & m) const; /** SymmetricMatrix substraction (must have the same dimensions) */ Matrix operator - (const Matrix & m) const; SquareMatrix operator - (const SquareMatrix & m) const; SymmetricMatrix operator - (const SymmetricMatrix & m) const; /** SymmetricMatrix multiplications (must have consistent dimensions) */ Matrix operator * (const Matrix & m) const; SquareMatrix operator * (const SquareMatrix & m) const; SquareMatrix operator * (const SymmetricMatrix & m) const; SymmetricMatrix operator * (const IdentityMatrix & m) const; /** SymmetricMatrix integer power */ SymmetricMatrix power(const UnsignedInteger n) const; /** Multiplication with a Point (must have consistent dimensions) */ Point operator * (const Point & p) const; /** Multiplication with a Scalar */ SymmetricMatrix operator * (const Scalar & s) const; /** Division by a Scalar*/ SymmetricMatrix operator / (const Scalar & s) const; /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); /** Compute determinant */ Scalar computeLogAbsoluteDeterminant(Scalar & sign, const Bool keepIntact = true); Scalar computeDeterminant(const Bool keepIntact = true); /** Compute eigenvalues */ Point computeEigenValues(const Bool keepIntact = true); Point computeEV(SquareMatrix & v, const Bool keepIntact = true); /** Comparison operators */ Bool operator == (const Matrix & rhs) const; protected: private: /** Check if one needs to symmetrized the internal representation of the matrix */ mutable Bool hasBeenSymmetrized_; }; /* class SymmetricMatrix */ inline SymmetricMatrix operator * (const Scalar & s, const SymmetricMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/SymmetricTensor.hxx000066400000000000000000000076321307543307100245200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SymmetricTensor implements the classical mathematical symmetric tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SYMMETRICTENSOR_HXX #define OPENTURNS_SYMMETRICTENSOR_HXX #include "openturns/Tensor.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SymmetricTensor * * SymmetricTensor implements the classical mathematical symmetric tensor */ class OT_API SymmetricTensor : public Tensor { CLASSNAME; public: typedef Collection ScalarCollection; /** Default constructor */ SymmetricTensor(); /** Constructor with size (squareDim, sheetDim) */ SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim); /** Constructor from a range of external collection */ template SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last); /** Constructor from external collection */ SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim, const ScalarCollection & elementsValues); /** Constructor with implementation */ SymmetricTensor(const Implementation & i); /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Check if the internal representation is really symmetric */ void checkSymmetry() const; #ifndef SWIG /** Operator () gives access to the elements of the symmetric tensor (to modify these elements and their symmetric element) */ /** The element of the symmetric tensor is designated by its row number i, its column number j and its sheet number k*/ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k); /** Operator () gives access to the elements of the tensor (read only) */ /** The element of the tensor is designated by its row number i and its column number j */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; #endif /** getSheet returns the sheet specified by its sheet number k */ SymmetricMatrix getSheet(const UnsignedInteger k) const; /** setSheet sets matrix m as the sheet specified by its sheet number k */ void setSheet(const UnsignedInteger k, const SymmetricMatrix & m); protected: private: /** Check if one needs to symmetrized the internal representation of the tensor */ mutable Bool hasBeenSymmetrized_; } ; /* class SymmetricTensor */ /** Constructor from a range of external collection */ template SymmetricTensor::SymmetricTensor(const UnsignedInteger squareDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last) : Tensor(squareDim, squareDim, sheetDim, first, last) { // Nothing to do } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SYMMETRICTENSOR_HXX */ openturns-1.9/lib/src/Base/Type/openturns/Tensor.hxx000066400000000000000000000110241307543307100226110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Tensor implements the classical mathematical tensor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSOR_HXX #define OPENTURNS_TENSOR_HXX #include "openturns/TensorImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS class TensorImplementation; /** * @class Tensor * * Tensor implements the classical mathematical Tensor */ class OT_API Tensor : public TypedInterfaceObject { CLASSNAME; public: typedef TypedInterfaceObject::Implementation Implementation; typedef Collection ScalarCollection; /** Default constructor */ Tensor(); /** Constructor with size (rowDim, colDim, sheetDim) */ Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim); /** Constructor from range of external collection */ template Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last); /** Constructor from external collection */ Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const ScalarCollection & elementsValues); /** Constructor with implementation */ Tensor(const Implementation & i); /** Set small elements to zero */ Tensor clean(const Scalar & threshold) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; #ifndef SWIG /** Operator () gives access to the elements of the tensor (to modify these elements) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k); /** Operator () gives access to the elements of the tensor (read only) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; #endif /** getSheet returns the sheet specified by its sheet number k */ Matrix getSheet(const UnsignedInteger k) const; /** setSheet sets matrix m as the sheet specified by its sheet number k */ void setSheet(const UnsignedInteger k, const Matrix & m); /** Get the dimensions of the tensor */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Number of sheets */ UnsignedInteger getNbSheets() const; /** Comparison operators */ Bool operator == (const Tensor & rhs) const; /** Empty returns true if there is no element in the tensor */ Bool isEmpty() const; // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: }; /* class Tensor */ /** Constructor with size (rowDim, colDim, sheetDim) */ template Tensor::Tensor(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last) : TypedInterfaceObject(new TensorImplementation(rowDim, colDim, sheetDim, first, last)) { // nothing to do } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/TensorImplementation.hxx000066400000000000000000000142711307543307100255260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TensorImplementation implements the Tensor classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSORIMPLEMENTATION_HXX #define OPENTURNS_TENSORIMPLEMENTATION_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TensorImplementation * * TensorImplementation implements the Tensor classes */ class OT_API TensorImplementation : public PersistentCollection { CLASSNAME; public: /** Default constructor */ TensorImplementation(); /** Constructor with size (rowDim, colDim, sheetDim) */ TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim); /** Constructor from range of external collection */ template TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last); /** Constructor from external collection */ /** If the dimensions don't correspond with the size of the collection, */ /** the collection is either truncated or completed with zeros*/ TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, const Collection & elementsValues); /** Virtual constructor */ virtual TensorImplementation * clone() const; /** Set small elements to zero */ TensorImplementation clean(const Scalar threshold) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () gives access to the elements of the tensor (to modify these elements) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k); /** Operator () gives access to the elements of the tensor (read only) */ /** The element of the tensor is designated by its row number i, its column number j and its sheet number k */ const Scalar & operator () (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; /** getSheet returns the sheet specified by its sheet number k */ Matrix getSheet(const UnsignedInteger k) const; /** setSheet sets matrix m as the sheet specified by its sheet number k */ void setSheet(const UnsignedInteger k, const Matrix & m); /** getSheetSym returns the symmetric sheet specified by its sheet number k */ SymmetricMatrix getSheetSym(const UnsignedInteger k) const; /** setSheetSym sets symmetric matrix m as the sheet specified by its sheet number k */ void setSheetSym(const UnsignedInteger k, const SymmetricMatrix & m); /** Get the dimensions of the tensor */ /** Number of rows */ UnsignedInteger getNbRows() const; /** Number of columns */ UnsignedInteger getNbColumns() const; /** Number of sheets */ UnsignedInteger getNbSheets() const; /** Check for symmetry */ Bool isSymmetric() const; /** Symmetrize TensorImplementation in case it is a symmetric tensor (stored as a set of triangular matrix sheets) */ void symmetrize() const; /** Comparison operators */ Bool operator == (const TensorImplementation & rhs) const; /** Empty returns true if there is no element in the tensor */ Bool isEmpty() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); // These functions are only intended to be used by SWIG, DO NOT use them for your own purpose ! // INTENTIONALY NOT DOCUMENTED const Scalar * __baseaddress__ () const; UnsignedInteger __elementsize__ () const; UnsignedInteger __stride__ (UnsignedInteger dim) const; protected: /** TensorImplementation Dimensions */ UnsignedInteger nbRows_; UnsignedInteger nbColumns_; UnsignedInteger nbSheets_; /** Position conversion function : the indices i & j are used to compute the actual position of the element in the collection */ inline UnsignedInteger convertPosition (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const; }; /* class TensorImplementation */ /** Constructor from range of external collection */ template TensorImplementation::TensorImplementation(const UnsignedInteger rowDim, const UnsignedInteger colDim, const UnsignedInteger sheetDim, InputIterator first, InputIterator last) : PersistentCollection(rowDim * colDim * sheetDim), nbRows_(rowDim), nbColumns_(colDim), nbSheets_(sheetDim) { this->assign(first, last); } /** Inline functions */ inline UnsignedInteger TensorImplementation::convertPosition (const UnsignedInteger i, const UnsignedInteger j, const UnsignedInteger k) const { return i + nbRows_ * (j + nbColumns_ * k) ; } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TENSORIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Base/Type/openturns/TriangularComplexMatrix.hxx000066400000000000000000000130531307543307100261700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TriangularComplexMatrix implements the classical mathematical triangular matrix with complex values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRIANGULARCOMPLEXMATRIX_HXX #define OPENTURNS_TRIANGULARCOMPLEXMATRIX_HXX #include "openturns/SquareComplexMatrix.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS class SymmetricMatrix; class IdentityMatrix; class SquareMatrix; class Matrix; class HermitianMatrix; /** * @class TriangularComplexMatrix * * TriangularComplexMatrix implements the classical mathematical triangular matrix with complex values * Default implementation is triangular lower */ class OT_API TriangularComplexMatrix : public SquareComplexMatrix { CLASSNAME; #ifndef SWIG friend TriangularComplexMatrix operator * (const Complex s, const TriangularComplexMatrix & m); #endif public: /** Default constructor */ TriangularComplexMatrix(); /** Constructor with size (dim, which is the same for nbRows_ and nbColumns_) */ explicit TriangularComplexMatrix(const UnsignedInteger dimension, Bool isLower = true); /** Constructor with implementation */ TriangularComplexMatrix(const Implementation & i, const Bool isLower = true); /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Get the dimension of the matrix */ UnsignedInteger getDimension() const; /** TriangularComplexMatrix transpose */ TriangularComplexMatrix transpose () const; /** TriangularComplexMatrix conjugate */ TriangularComplexMatrix conjugate () const; /** TriangularComplexMatrix conjugate and transpose */ TriangularComplexMatrix conjugateTranspose () const; /** Check if the matrix is lower or upper */ Bool isLowerTriangular() const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Complex & operator () (const UnsignedInteger i, const UnsignedInteger j) ; /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Complex & operator () (const UnsignedInteger i, const UnsignedInteger j) const; #endif /** TriangularComplexMatrix additions : result is a complex matrix */ SquareComplexMatrix operator + (const TriangularComplexMatrix & m) const; /** Addition operator with ComplexMatrix */ SquareComplexMatrix operator + (const SquareComplexMatrix & m) const; /** Substraction operator with TriangularComplexMatrix */ SquareComplexMatrix operator - (const TriangularComplexMatrix & m) const; /** Substraction operator with ComplexMatrix */ SquareComplexMatrix operator - (const SquareComplexMatrix & m) const; /** Multiplication with a Complex */ TriangularComplexMatrix operator * (const Complex s) const; /** ComplexMatrix multiplications */ ComplexMatrix operator * (const ComplexMatrix & m) const; /** SquareComplexMatrix multiplications */ SquareComplexMatrix operator * (const SquareComplexMatrix & m) const; /** TriangularComplexMatrix multiplications */ SquareComplexMatrix operator * (const TriangularComplexMatrix & m) const; /** HermitianMatrix multiplications */ SquareComplexMatrix operator * (const HermitianMatrix & m) const; /** Real SquareMatrix multiplications */ SquareComplexMatrix operator * (const SquareMatrix & m) const; /** Real Matrix multiplications (must have consistent dimensions) */ ComplexMatrix operator * (const Matrix & m) const; /** Real SymmetricMatrix multiplications */ SquareComplexMatrix operator * (const SymmetricMatrix & m) const; /** IdentityMatrix multiplications */ TriangularComplexMatrix operator * (const IdentityMatrix & m) const; /** Multiplication with a NumericaComplexCollection (must have consistent dimensions) */ ComplexCollection operator * (const ComplexCollection & p) const; /** Multiplication with a NumericaScalarCollection (must have consistent dimensions) */ ComplexCollection operator * (const ScalarCollection & p) const; /** Multiplication with a Point (must have consistent dimensions) */ ComplexCollection operator * (const Point & p) const; /** Division by a Complex*/ TriangularComplexMatrix operator / (const Complex s) const; private: /** Boolean information : is the matrix triangular lower or upper? */ mutable Bool isLowerTriangular_; }; /* class TriangularComplexMatrix */ inline TriangularComplexMatrix operator * (const Complex s, const TriangularComplexMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRIANGULARCOMPLEXMATRIX_HXX */ openturns-1.9/lib/src/Base/Type/openturns/TriangularMatrix.hxx000066400000000000000000000123121307543307100246350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TriangularMatrix implements the classical mathematical triangular matrix with values * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRIANGULARMATRIX_HXX #define OPENTURNS_TRIANGULARMATRIX_HXX #include "openturns/SquareMatrix.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS class SymmetricMatrix; class IdentityMatrix; class SquareMatrix; class Matrix; class HermitianMatrix; /** * @class TriangularMatrix * * TriangularMatrix implements the classical mathematical triangular matrix with scalar values * Default implementation is triangular lower */ class OT_API TriangularMatrix : public SquareMatrix { CLASSNAME; #ifndef SWIG friend TriangularMatrix operator * (const Scalar s, const TriangularMatrix & m); #endif public: /** Default constructor */ TriangularMatrix(); /** Constructor with size (dim, which is the same for nbRows_ and nbColumns_) */ explicit TriangularMatrix(const UnsignedInteger dimension, Bool isLower = true); /** Constructor with implementation */ TriangularMatrix(const Implementation & i, const Bool isLower = true); /** Constructor with matrix implementation */ TriangularMatrix(const MatrixImplementation & i, const Bool isLower = true); /** Check if the internal representation is actually symmetric */ void checkTriangularity() const; /** Test if the matrix is diagonal */ Bool isDiagonal() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Get the dimension of the matrix */ UnsignedInteger getDimension() const; /** TriangularMatrix transpose */ TriangularMatrix transpose () const; /** Check if the matrix is lower or upper */ Bool isLowerTriangular() const; #ifndef SWIG /** Operator () gives access to the elements of the matrix (to modify these elements) */ /** The element of the matrix is designated by its row number i and its column number j */ Scalar & operator ()(const UnsignedInteger i, const UnsignedInteger j) ; /** Operator () gives access to the elements of the matrix (read only) */ /** The element of the matrix is designated by its row number i and its column number j */ const Scalar & operator ()(const UnsignedInteger i, const UnsignedInteger j) const; #endif /** TriangularMatrix additions : result is a square matrix */ SquareMatrix operator + (const TriangularMatrix & m) const; /** Addition operator */ SquareMatrix operator + (const SquareMatrix & m) const; /** Substraction operator with TriangularMatrix */ SquareMatrix operator - (const TriangularMatrix & m) const; /** Substraction operator */ SquareMatrix operator - (const SquareMatrix & m) const; /** Multiplication with a scalar */ TriangularMatrix operator * (const Scalar s) const ; /** Matrix multiplications */ Matrix operator * (const Matrix & m) const; /** SquareMatrix multiplications */ SquareMatrix operator * (const SquareMatrix & m) const; /** TriangularMatrix multiplications */ SquareMatrix operator * (const TriangularMatrix & m) const; /** Real SymmetricMatrix multiplications */ SquareMatrix operator * (const SymmetricMatrix & m) const; /** IdentityMatrix multiplications */ TriangularMatrix operator * (const IdentityMatrix & m) const; /** Multiplication with a ScalarCollection (must have consistent dimensions) */ ScalarCollection operator * (const ScalarCollection & p) const; /** Multiplication with a Point (must have consistent dimensions) */ ScalarCollection operator * (const Point & p) const; /** Division by a Scalar */ TriangularMatrix operator / (const Scalar s) const; /** Resolution of a linear system */ Point solveLinearSystem(const Point & b, const Bool keepIntact = true); Matrix solveLinearSystem(const Matrix & b, const Bool keepIntact = true); private: /** Boolean information : is the matrix triangular lower or upper? */ mutable Bool isLowerTriangular_; /** Check if one needs to symmetrized the internal representation of the matrix */ mutable Bool hasBeenTriangularized_; }; /* class TriangularMatrix */ inline TriangularMatrix operator * (const Scalar s, const TriangularMatrix & m) { return m.operator * (s); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRIANGULARMATRIX_HXX */ openturns-1.9/lib/src/Base/openturns/000077500000000000000000000000001307543307100176675ustar00rootroot00000000000000openturns-1.9/lib/src/Base/openturns/OTBase.hxx000066400000000000000000000025221307543307100215360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Base * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTBASE_HXX #define OPENTURNS_OTBASE_HXX #include "openturns/OTCommon.hxx" #include "openturns/OTBaseMetaModel.hxx" #include "openturns/OTDiff.hxx" #include "openturns/OTExperiments.hxx" #include "openturns/OTFunc.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTOptim.hxx" #include "openturns/OTSolver.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTType.hxx" #include "openturns/OTAlgo.hxx" #endif /* OPENTURNS_OTBASE_HXX */ openturns-1.9/lib/src/CMakeLists.txt000066400000000000000000000062451307543307100175270ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_install_header_file (OT.hxx) ot_add_source_file (openturns_library_ok.c) foreach (include_dir ${OPENTURNS_INCLUDE_DIRS}) set (EXTRA_CPPFLAGS "${EXTRA_CPPFLAGS} -I${include_dir}") endforeach () configure_file (${CMAKE_CURRENT_SOURCE_DIR}/openturns-config-build.in ${CMAKE_CURRENT_BINARY_DIR}/openturns-config-build @ONLY ) set (prefix "${CMAKE_INSTALL_PREFIX}") set (exec_prefix "${CMAKE_INSTALL_PREFIX}") set (libdir "${INSTALL_PATH}/lib${LIB_SUFFIX}") set (PACKAGE "${CPACK_PACKAGE_NAME}") install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/openturns-config-build DESTINATION ${INSTALL_PATH}/bin RENAME openturns-config ) # Recurse in subdirectories add_subdirectory (Base) add_subdirectory (Uncertainty) # Build main library foreach (built_source ${BUILT_SOURCEFILES}) set_source_files_properties (${built_source} PROPERTIES GENERATED TRUE) endforeach (built_source) include_directories (${INTERNAL_INCLUDE_DIRS}) link_directories (${CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES}) add_library (OT ${SOURCEFILES} ${BUILT_SOURCEFILES}) set_target_properties (OT PROPERTIES POSITION_INDEPENDENT_CODE ON) if (BUILD_SHARED_LIBS) set_target_properties(OT PROPERTIES COMPILE_DEFINITIONS "OT_DLL_EXPORTS") endif () # soversion if (NOT DEFINED LIB_VERSION) set (LIB_VERSION 0.0.0) endif () if (NOT DEFINED LIB_SOVERSION) set (LIB_SOVERSION 0) endif () set_target_properties (OT PROPERTIES SOVERSION ${LIB_SOVERSION}) set_target_properties (OT PROPERTIES VERSION ${LIB_VERSION}) if (BISON_FOUND AND FLEX_FOUND) add_dependencies (OT generate_csv_lexer) add_dependencies (OT generate_csv_parser) endif () target_link_libraries (OT ${OPENTURNS_LIBRARIES}) target_link_libraries (OT ${OPENTURNS_PRIVATE_LIBRARIES}) # Build an empty executable to check link dependencies and completeness add_executable (linktest main.cxx) target_link_libraries (linktest OT) set_target_properties (linktest PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_BINARY_DIR}/lib/src") # Add targets to the build-tree export set export(TARGETS OT FILE "${PROJECT_BINARY_DIR}/OpenTURNS-Targets.cmake") # Install the export set for use with the install-tree install(EXPORT OpenTURNS-Targets DESTINATION "${OPENTURNS_CONFIG_CMAKE_PATH}" COMPONENT Development) # Install rules for library and executable install (TARGETS OT EXPORT OpenTURNS-Targets RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIBRARY_PATH} ARCHIVE DESTINATION ${LIBRARY_PATH} ) if (UNIX AND BUILD_SHARED_LIBS) set (OT_GDB_PY ${CMAKE_SHARED_LIBRARY_PREFIX}OT${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIB_VERSION}-gdb.py) execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/libOT-gdb.py ${CMAKE_CURRENT_BINARY_DIR}/${OT_GDB_PY}) install (FILES libOT-gdb.py DESTINATION ${OPENTURNS_DATA_PATH}/gdb/auto-load/${LIBRARY_PATH} RENAME ${OT_GDB_PY}) endif () if (USE_COTIRE) set (COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS "c;cc") cotire (OT) endif () openturns-1.9/lib/src/Uncertainty/000077500000000000000000000000001307543307100172655ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/000077500000000000000000000000001307543307100212135ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/000077500000000000000000000000001307543307100232745ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/Analytical.cxx000066400000000000000000000134251307543307100261060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Analytical implements an algorithm to find the design point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Analytical.hxx" #include "openturns/Distribution.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Analytical); static const Factory Factory_Analytical; /* * @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point */ Analytical::Analytical(const OptimizationAlgorithm & nearestPointAlgorithm, const Event & event, const Point & physicalStartingPoint) : PersistentObject(), nearestPointAlgorithm_(nearestPointAlgorithm), event_(event), physicalStartingPoint_(physicalStartingPoint) { const UnsignedInteger dimension = event.getImplementation()->getFunction().getInputDimension(); if (physicalStartingPoint.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Starting point dimension (" << physicalStartingPoint.getDimension() << ") does not match event dimension (" << dimension << ")."; result_ = AnalyticalResult(event_.getImplementation()->getAntecedent()->getDistribution().getIsoProbabilisticTransformation().operator()(physicalStartingPoint_), event, true); /* set the level function of the algorithm */ nearestPointAlgorithm_.setProblem(OptimizationProblem(event.getImplementation()->getFunction(), event.getThreshold())); } /* Virtual constructor */ Analytical * Analytical::clone() const { return new Analytical(*this); } /* Physical starting point accessor */ Point Analytical::getPhysicalStartingPoint() const { return physicalStartingPoint_; } /* Physical starting point accessor */ void Analytical::setPhysicalStartingPoint(const Point & physicalStartingPoint) { physicalStartingPoint_ = physicalStartingPoint; } /* Event accessor */ Event Analytical::getEvent() const { return event_; } /* Event accessor */ void Analytical::setEvent(const Event & event) { event_ = event; nearestPointAlgorithm_.setProblem(OptimizationProblem(event_.getImplementation()->getFunction(), event_.getThreshold())); } /* OptimizationAlgorithm accessor */ OptimizationAlgorithm Analytical::getNearestPointAlgorithm() const { return nearestPointAlgorithm_; } /* OptimizationAlgorithm accessor */ void Analytical::setNearestPointAlgorithm(const OptimizationAlgorithm & nearestPointAlgorithm) { nearestPointAlgorithm_ = nearestPointAlgorithm_; } /* String converter */ String Analytical::__repr__() const { OSS oss; oss << "class=" << Analytical::GetClassName() << " nearestPointAlgorithm=" << nearestPointAlgorithm_.__repr__() << " event=" << event_ << " physicalstartingPoint=" << physicalStartingPoint_; return oss; } /* Performs the actual computation. */ void Analytical::run() { /* Build a standard event from the event */ StandardEvent standardEvent(event_); /* set the level function of the algorithm */ nearestPointAlgorithm_.setProblem(OptimizationProblem(standardEvent.getImplementation()->getFunction(), standardEvent.getThreshold())); /* set the starting point of the algorithm in the standard space */ nearestPointAlgorithm_.setStartingPoint(event_.getImplementation()->getAntecedent()->getDistribution().getIsoProbabilisticTransformation().operator()(physicalStartingPoint_)); /* solve the nearest point problem */ nearestPointAlgorithm_.run(); /* store the optimization result into the analytical result */ result_.setOptimizationResult(nearestPointAlgorithm_.getResult()); /* set standard space design point in Result */ Point standardSpaceDesignPoint(nearestPointAlgorithm_.getResult().getOptimalPoint()); standardSpaceDesignPoint.setName("Standard Space Design Point"); result_.setStandardSpaceDesignPoint(standardSpaceDesignPoint); /* set isStandardPointOriginInFailureSpace in Result */ Point origin(standardSpaceDesignPoint.getDimension(), 0.0); Point value(standardEvent.getImplementation()->getFunction().operator()(origin)); result_.setIsStandardPointOriginInFailureSpace(event_.getOperator().compare(value[0], event_.getThreshold())); } /* Analytical::run() */ /* Result accessor */ AnalyticalResult Analytical::getAnalyticalResult() const { return result_; } /* Method save() stores the object through the StorageManager */ void Analytical::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("nearestPointAlgorithm_", nearestPointAlgorithm_); adv.saveAttribute("event_", event_); adv.saveAttribute("physicalStartingPoint_", physicalStartingPoint_); adv.saveAttribute("result_", result_); } /* Method load() reloads the object from the StorageManager */ void Analytical::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("nearestPointAlgorithm_", nearestPointAlgorithm_); adv.loadAttribute("event_", event_); adv.loadAttribute("physicalStartingPoint_", physicalStartingPoint_); adv.loadAttribute("result_", result_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/AnalyticalResult.cxx000066400000000000000000000636631307543307100273160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Result computes the results of an analytical Algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Analytical.hxx" #include "openturns/Distribution.hxx" #include "openturns/Sample.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/BarPlot.hxx" #include "openturns/Description.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/ConstantRandomVector.hxx" #include "openturns/RandomVector.hxx" #include "openturns/Less.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/GaussLegendre.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Distribution::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; typedef PersistentCollection PersistentSensitivity; CLASSNAMEINIT(AnalyticalResult); static const Factory Factory_AnalyticalResult; /* * @brief Standard constructor */ AnalyticalResult::AnalyticalResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace): PersistentObject(), standardSpaceDesignPoint_(standardSpaceDesignPoint.getDimension()), physicalSpaceDesignPoint_(standardSpaceDesignPoint.getDimension()), limitStateVariable_(limitStateVariable), isStandardPointOriginInFailureSpace_(isStandardPointOriginInFailureSpace), hasoferReliabilityIndex_(0.0), importanceFactors_(standardSpaceDesignPoint.getDimension()), classicalImportanceFactors_(standardSpaceDesignPoint.getDimension()), hasoferReliabilityIndexSensitivity_(0), isAlreadyComputedImportanceFactors_(false), isAlreadyComputedClassicalImportanceFactors_(false), isAlreadyComputedPhysicalImportanceFactors_(false), isAlreadyComputedHasoferReliabilityIndexSensitivity_(false) { /* we use the attribute accessor in order to compute automatically all the other attributes */ setStandardSpaceDesignPoint(standardSpaceDesignPoint); } /* Default constructor, needed by SWIG */ AnalyticalResult::AnalyticalResult(): PersistentObject(), standardSpaceDesignPoint_(0), physicalSpaceDesignPoint_(0), // Fake event based on a fake 1D composite random vector, which requires a fake 1D Function limitStateVariable_(RandomVector(CompositeRandomVector(Function(Description(0), Description(1), Description(1)), ConstantRandomVector(Point(0)))), Less(), 0.0), isStandardPointOriginInFailureSpace_(false), hasoferReliabilityIndex_(0.0), importanceFactors_(0), classicalImportanceFactors_(0), hasoferReliabilityIndexSensitivity_(0), isAlreadyComputedImportanceFactors_(false), isAlreadyComputedClassicalImportanceFactors_(false), isAlreadyComputedPhysicalImportanceFactors_(false), isAlreadyComputedHasoferReliabilityIndexSensitivity_(false) { // Nothing to do } /* Virtual constructor */ AnalyticalResult * AnalyticalResult::clone() const { return new AnalyticalResult(*this); } /* StandardSpaceDesignPoint accessor */ Point AnalyticalResult::getStandardSpaceDesignPoint() const { return standardSpaceDesignPoint_; } /* StandardSpaceDesignPoint accessor */ void AnalyticalResult::setStandardSpaceDesignPoint(const Point & standardSpaceDesignPoint) { standardSpaceDesignPoint_ = standardSpaceDesignPoint; computePhysicalSpaceDesignPoint(); computeHasoferReliabilityIndex(); } /* PhysicalSpaceDesignPoint evaluation */ void AnalyticalResult::computePhysicalSpaceDesignPoint() const { /* Compute the physical design point */ physicalSpaceDesignPoint_ = limitStateVariable_.getImplementation()->getAntecedent()->getDistribution().getInverseIsoProbabilisticTransformation().operator()(standardSpaceDesignPoint_); /* we give to the physical space design point the description of the input random vector */ //physicalSpaceDesignPoint_.setDescription(limitStateVariable_.getImplementation()->getAntecedent()->getDescription()); /* we give to the physical space design point the name Physical Design Point */ physicalSpaceDesignPoint_.setName("Physical Space Design Point"); } /* PhysicalSpaceDesignPoint accessor */ void AnalyticalResult::setPhysicalSpaceDesignPoint(const Point & physicalSpaceDesignPoint) { physicalSpaceDesignPoint_ = physicalSpaceDesignPoint; } /* PhysicalSpaceDesignPoint accessor */ Point AnalyticalResult::getPhysicalSpaceDesignPoint() const { return physicalSpaceDesignPoint_; } /* LimitStateVariable accessor */ Event AnalyticalResult::getLimitStateVariable() const { return limitStateVariable_; } /* IsStandardPointOriginInFailureSpace accessor */ Bool AnalyticalResult::getIsStandardPointOriginInFailureSpace() const { return isStandardPointOriginInFailureSpace_; } /* IsStandardPointOriginInFailureSpace accessor */ void AnalyticalResult::setIsStandardPointOriginInFailureSpace(const Bool isStandardPointOriginInFailureSpace) { isStandardPointOriginInFailureSpace_ = isStandardPointOriginInFailureSpace; } /* ImportanceFactors evaluation */ void AnalyticalResult::computeImportanceFactors() const { const UnsignedInteger dimension = standardSpaceDesignPoint_.getDimension(); importanceFactors_ = Point(dimension, -1.0); /* First, check that the importance factors are well-defined */ if (standardSpaceDesignPoint_.norm() > 0.0) { /* get the input distribution */ const Distribution inputDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); /* get the input standard distribution */ const Distribution standardDistribution(inputDistribution.getStandardDistribution()); /* get the marginal 1D from in the standard space where all marginals are identical */ const Distribution standardMarginalDistribution(standardDistribution.getMarginal(0)); /* evaluate the corresponding vector in the importance factors space */ /* if Generalised Nataf Transformation : Z = E1^(-1)o F_{Xi}(Xi*) */ /* if Rosenblatt Transformation : Z = Phi^(-1)o F_{Xi}(Xi*) */ // for each marginals */ for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { const Scalar y = inputDistribution.getMarginal(marginalIndex).computeCDF(Point(1, physicalSpaceDesignPoint_[marginalIndex])); importanceFactors_[marginalIndex] = standardMarginalDistribution.computeQuantile(y)[0]; } importanceFactors_ = importanceFactors_.normalizeSquare(); } /* we give a name to the importance factors vector */ importanceFactors_.setName("Importance Factors"); /* we give to the importance factors vector the description of the input random vector */ importanceFactors_.setDescription(limitStateVariable_.getImplementation()->getAntecedent()->getDescription()); isAlreadyComputedImportanceFactors_ = true; } /* Classical ImportanceFactors evaluation */ void AnalyticalResult::computeClassicalImportanceFactors() const { const UnsignedInteger dimension = standardSpaceDesignPoint_.getDimension(); classicalImportanceFactors_ = Point(dimension, -1.0); /* First, check that the importance factors are well-defined */ const Scalar beta2 = standardSpaceDesignPoint_.normSquare(); if (beta2 > 0.0) classicalImportanceFactors_ = standardSpaceDesignPoint_.normalizeSquare(); /* we give a name to the importance factors vector */ classicalImportanceFactors_.setName("Classical Importance Factors"); /* we give to the importance factors vector the description of the input random vector */ classicalImportanceFactors_.setDescription(limitStateVariable_.getImplementation()->getAntecedent()->getDescription()); isAlreadyComputedClassicalImportanceFactors_ = true; } void AnalyticalResult::computePhysicalImportanceFactors() const { const Event myEvent(getLimitStateVariable()); const StandardEvent mystandardEvent(myEvent); const Scalar sign = myEvent.getOperator().compare(0., 1.) ? 1.0 : -1.0; const Point currentStandardGradient(mystandardEvent.getImplementation()->getFunction().gradient(getStandardSpaceDesignPoint()) * Point(1, 1.0)); const Point alpha(sign / currentStandardGradient.norm() * currentStandardGradient); const Distribution physicalDistribution(myEvent.getImplementation()->getAntecedent()->getDistribution()); const InverseIsoProbabilisticTransformation inverseIsoProbabilisticTransformation(physicalDistribution.getInverseIsoProbabilisticTransformation()); const Matrix isoGradient(inverseIsoProbabilisticTransformation.gradient(standardSpaceDesignPoint_)); physicalImportanceFactors_ = (isoGradient * alpha).normalizeSquare(); const Point currentPhysicalGradient(limitStateVariable_.getImplementation()->getFunction().gradient(getPhysicalSpaceDesignPoint()) * Point(1, 1.0)); physicalImportanceFactors_ = currentPhysicalGradient.normalizeSquare(); physicalImportanceFactors_.setName("Physical importance factors"); physicalImportanceFactors_.setDescription(myEvent.getImplementation()->getAntecedent()->getDescription()); isAlreadyComputedPhysicalImportanceFactors_ = true; } /* Mean point conditioned to the standard event realization accessor */ void AnalyticalResult::computeMeanPointInStandardEventDomain() const { // We use the implementation here in order to have access to the computeRadialDistributionCDF() method Distribution::Implementation p_standardDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution().getStandardDistribution().getImplementation()); // Perform the integration along the ray going from the origin to the infinity Scalar scaling = hasoferReliabilityIndex_ * p_standardDistribution->computeRadialDistributionCDF(hasoferReliabilityIndex_, true); Scalar a = hasoferReliabilityIndex_; // Quadrature rule const UnsignedInteger integrationNodesNumber = ResourceMap::GetAsUnsignedInteger("AnalyticalResult-MeanPointIntegrationNodesNumber"); const GaussLegendre integrator(Indices(1, integrationNodesNumber)); const Point nodes(integrator.getNodes().getImplementation()->getData() * 2.0 - Point(integrationNodesNumber, 1.0)); const Point weights(integrator.getWeights() * 2.0); Scalar sum = 0.0; const Scalar quantileEpsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); do { // Integrate over a unit length segment [a, a+1] for (UnsignedInteger k = 0; k < integrationNodesNumber; ++k) sum += weights[k] * p_standardDistribution->computeRadialDistributionCDF(a + 0.5 * (1.0 + nodes[k]), true); sum *= 0.5; scaling += sum; a += 1.0; } while (sum > quantileEpsilon * scaling); meanPointInStandardEventDomain_ = standardSpaceDesignPoint_ * (scaling / hasoferReliabilityIndex_); isAlreadyComputedMeanPointInStandardEventDomain_ = true; } /* Mean point conditioned to the event realization accessor */ Point AnalyticalResult::getMeanPointInStandardEventDomain() const { if (!isAlreadyComputedMeanPointInStandardEventDomain_) computeMeanPointInStandardEventDomain(); return meanPointInStandardEventDomain_; } void AnalyticalResult::setMeanPointInStandardEventDomain(const Point & meanPointInStandardEventDomain) { meanPointInStandardEventDomain_ = meanPointInStandardEventDomain; } /* ImportanceFactors accessor */ PointWithDescription AnalyticalResult::getImportanceFactors(const ImportanceFactorType type) const { switch(type) { case ELLIPTICAL: if (!isAlreadyComputedImportanceFactors_) computeImportanceFactors(); return importanceFactors_; case CLASSICAL: if (!isAlreadyComputedClassicalImportanceFactors_) computeClassicalImportanceFactors(); return classicalImportanceFactors_; case PHYSICAL: if (!isAlreadyComputedPhysicalImportanceFactors_) computePhysicalImportanceFactors(); return physicalImportanceFactors_; default: throw InvalidArgumentException(HERE) << "Invalid importance factor type (" << type << ")"; } } /* ImportanceFactors graph */ Graph AnalyticalResult::drawImportanceFactors(const ImportanceFactorType type) const { // To ensure that the importance factors are up to date getImportanceFactors(type); /* we build the graph with a title */ OSS oss; oss << "Importance Factors from Design Point - " << limitStateVariable_.getName(); return SobolIndicesAlgorithmImplementation::DrawImportanceFactors(importanceFactors_, String(oss)); } /* HasoferReliabilityIndex evaluation */ void AnalyticalResult::computeHasoferReliabilityIndex() const { /* evaluate the HasoferReliabilityIndex */ if (standardSpaceDesignPoint_.getDimension() > 0) hasoferReliabilityIndex_ = standardSpaceDesignPoint_.norm(); } /* HasoferReliabilityIndex accessor */ Scalar AnalyticalResult::getHasoferReliabilityIndex() const { return hasoferReliabilityIndex_; } /* HasoferReliabilityIndex accessor */ void AnalyticalResult::setHasoferReliabilityIndex(const Scalar & hasoferReliabilityIndex) { hasoferReliabilityIndex_ = hasoferReliabilityIndex; } /* HasoferReliabilityIndex evaluation */ void AnalyticalResult::computeHasoferReliabilityIndexSensitivity() const { /* get Set1 : parameters of the physical distribution */ const Distribution physicalDistribution(limitStateVariable_.getImplementation()->getAntecedent()->getDistribution()); const PointWithDescriptionCollection set1(physicalDistribution.getParametersCollection()); /* get Set2 : parameters of the physical model */ const Function physicalModel(limitStateVariable_.getImplementation()->getFunction()); PointWithDescription set2(physicalModel.getParameter()); set2.setDescription(physicalModel.getParameterDescription()); const Bool isSet2Empty = set2.getDimension() == 0; /* get SetIso : parameters included in the isoprobabilistic transformation which is a subset of Set1 */ const InverseIsoProbabilisticTransformation inverseIsoProbabilisticTransformation(physicalDistribution.getInverseIsoProbabilisticTransformation()); PointWithDescription setIso(inverseIsoProbabilisticTransformation.getParameter()); setIso.setDescription(inverseIsoProbabilisticTransformation.getParameterDescription()); /* scaling factor between sensitivity and gradients (ref doc : factor = -lambda/beta) */ /* gradient of the standard limite state function */ const Matrix physicalGradientMatrix(physicalModel.gradient(physicalSpaceDesignPoint_)); const Matrix isoGradient(inverseIsoProbabilisticTransformation.gradient(standardSpaceDesignPoint_)); const Point standardFunctionGradient(isoGradient * (physicalGradientMatrix * Point(1, 1.0))); const Scalar gradientNorm = standardFunctionGradient.norm(); Scalar gradientToSensitivity = 0.0; if (gradientNorm > 0.0) gradientToSensitivity = -(limitStateVariable_.getOperator().compare(1.0, 0.0) ? 1.0 : -1.0) / gradientNorm; /* evaluate the gradients of the physical model with respect to Set2 (ref doc : K2) */ Point physicalGradient; if (!isSet2Empty) physicalGradient = physicalModel.parameterGradient(physicalSpaceDesignPoint_) * Point(1, 1.0); /* evaluate the gradients of the isoprobabilistic transformation with respect to SetIso (ref doc : KS) */ Point isoProbabilisticGradient; if (setIso.getDimension() > 0) isoProbabilisticGradient = inverseIsoProbabilisticTransformation.parameterGradient(standardSpaceDesignPoint_) * (physicalGradientMatrix * Point(1, 1.0)); /* associate to each element of Set1 the gradient value */ /* hasoferReliabilityIndexSensitivity is the collection Set1 + one other collection wich is Set2 */ const UnsignedInteger set1Size = set1.getSize(); const UnsignedInteger size = set1Size + (isSet2Empty ? 0 : 1); hasoferReliabilityIndexSensitivity_ = Sensitivity(size); for (UnsignedInteger sensitivityIndex = 0; sensitivityIndex < set1Size; ++sensitivityIndex) { const PointWithDescription currentParameters(set1[sensitivityIndex]); const UnsignedInteger currentDimension = currentParameters.getDimension(); PointWithDescription currentSensitivity(currentDimension); const Description currentDescription(currentParameters.getDescription()); // the currentSensitivity gets the description and the name from set1 currentSensitivity.setDescription(currentDescription); const String currentName(currentParameters.getName()); currentSensitivity.setName(currentName); const Description isoDescription(setIso.getDescription()); for (UnsignedInteger currentIndex = 0; currentIndex < currentDimension; ++currentIndex) { const UnsignedInteger position = computePosition(currentName, currentDescription[currentIndex], isoDescription); /* if currentParameters[currentIndex] is into setIso, then we get the sensitivity value in the corresponding isoProbabilisticGradient */ if (position < setIso.getDimension()) currentSensitivity[currentIndex] = gradientToSensitivity * isoProbabilisticGradient[position]; /* else the sensitivity value is null */ } // currentIndex hasoferReliabilityIndexSensitivity_[sensitivityIndex] = currentSensitivity; } // sensitivityIndex /* if set2 is not empty : convert the matrix isoProbabilisticGradient, which has n rows and 1 column, into a Point */ if (size > set1Size) { hasoferReliabilityIndexSensitivity_[set1Size] = gradientToSensitivity * physicalGradient; hasoferReliabilityIndexSensitivity_[set1Size].setName(physicalGradient.getName()); } isAlreadyComputedHasoferReliabilityIndexSensitivity_ = true; } // end computeHasoferReliabilityIndexSensitivity() /* Returns the position of the given (value, name) into the Point or the dimension of the Point if failed */ UnsignedInteger AnalyticalResult::computePosition(const String & marginalName, const String & marginalParameterName, const Description & parameterSetNames) const { const UnsignedInteger dimension = parameterSetNames.getSize(); const String fullName(OSS() << marginalName << "_" << marginalParameterName); for (UnsignedInteger index = 0; index < dimension; ++index) if ( parameterSetNames[index] == fullName ) return index; return dimension; } /* HasoferReliabilityIndexSensitivity Graph */ AnalyticalResult::GraphCollection AnalyticalResult::drawHasoferReliabilityIndexSensitivity(Scalar width) const { GraphCollection hasoferReliabilityIndexSensitivityGraphCollection(0); // To ensure that the hasoferReliabilityIndexSensitivity_ are up to date if (! isAlreadyComputedHasoferReliabilityIndexSensitivity_) computeHasoferReliabilityIndexSensitivity(); const UnsignedInteger dimension = standardSpaceDesignPoint_.getDimension(); const UnsignedInteger size = hasoferReliabilityIndexSensitivity_.getSize(); // The first graph shows the sensitivities with respect to the marginal parameters if there exist // in the cas where the distribution or some marginals are defined by user, it may not have parameters : we create a empty sensitivity graph Sensitivity marginalSensitivity(dimension); for(UnsignedInteger i = 0; i < dimension; ++i) marginalSensitivity[i] = hasoferReliabilityIndexSensitivity_[i]; Graph hasoferReliabilityIndexSensitivityGraphMarginal(drawSensitivity(marginalSensitivity, width)); OSS oss1; oss1 << "Hasofer Reliability Index Sensitivities - Marginal parameters - " << limitStateVariable_.getName(); hasoferReliabilityIndexSensitivityGraphMarginal.setTitle(oss1); hasoferReliabilityIndexSensitivityGraphCollection.add(hasoferReliabilityIndexSensitivityGraphMarginal); // The second graph shows the sensitivities with respect to the other parameters if there exist if (size > dimension) { Sensitivity otherSensitivity(size - dimension); for(UnsignedInteger i = dimension; i < size; ++i) otherSensitivity[i - dimension] = hasoferReliabilityIndexSensitivity_[i]; Graph hasoferReliabilityIndexSensitivityGraphOther(drawSensitivity(otherSensitivity, width)); OSS oss2; oss2 << "Hasofer Reliability Index Sensitivities - Other parameters - " << limitStateVariable_.getName(); hasoferReliabilityIndexSensitivityGraphOther.setTitle(oss2); hasoferReliabilityIndexSensitivityGraphCollection.add(hasoferReliabilityIndexSensitivityGraphOther); } return hasoferReliabilityIndexSensitivityGraphCollection; } /* Sensitivity Graph */ Graph AnalyticalResult::drawSensitivity(const Sensitivity & sensitivity, const Scalar width) const { // shift position of the barplots Scalar shift = 0.0; // Create an empty graph Graph sensitivityGraph("Sensitivity", "parameters", "sensitivities", true, "topright"); BarPlot sensitivityBarPlot(Sample(0, 2), shift, ""); // Create the barplots const UnsignedInteger sensitivitySize = sensitivity.getSize(); const Description colors(BarPlot::BuildDefaultPalette(sensitivitySize)); for (UnsignedInteger collectionIndex = 0; collectionIndex < sensitivitySize; ++collectionIndex) { Sample data(sensitivity[collectionIndex].getDimension(), 2); const UnsignedInteger dataSize = data.getSize(); for (UnsignedInteger sensitivityIndex = 0; sensitivityIndex < dataSize; ++sensitivityIndex) { data[sensitivityIndex][0] = width; data[sensitivityIndex][1] = sensitivity[collectionIndex][sensitivityIndex]; } // Add the barplot to the graph OSS oss; oss << sensitivity[collectionIndex].getName() << " " << sensitivity[collectionIndex].getDescription(); sensitivityGraph.add(BarPlot(data, shift, colors[collectionIndex], "solid", "solid", oss)); shift += width * (1 + dataSize); } return sensitivityGraph; } //drawSensitivity /* HasoferReliabilityIndexSensitivity accessor */ AnalyticalResult::Sensitivity AnalyticalResult::getHasoferReliabilityIndexSensitivity() const { if (! isAlreadyComputedHasoferReliabilityIndexSensitivity_) computeHasoferReliabilityIndexSensitivity(); return hasoferReliabilityIndexSensitivity_; } /* Optimization result accessors */ OptimizationResult AnalyticalResult::getOptimizationResult() const { return optimizationResult_; } void AnalyticalResult::setOptimizationResult(const OptimizationResult & optimizationResult) { optimizationResult_ = optimizationResult; } /* String converter */ String AnalyticalResult::__repr__() const { OSS oss; oss << "class=" << AnalyticalResult::GetClassName() << " standardSpaceDesignPoint=" << standardSpaceDesignPoint_ << " physicalSpaceDesignPoint=" << physicalSpaceDesignPoint_ << " limitStateVariable=" << limitStateVariable_ << " isStandardPointOriginInFailureSpace=" << isStandardPointOriginInFailureSpace_ << " hasoferReliabilityIndex=" << hasoferReliabilityIndex_ << " importanceFactors=" << importanceFactors_ << " classicalImportanceFactors=" << classicalImportanceFactors_ << " hasoferReliabilityIndexSensitivity=" << hasoferReliabilityIndexSensitivity_ ;//FIXME:<< " optimizationResult=" << optimizationResult_; return oss; } /* Method save() stores the object through the StorageManager */ void AnalyticalResult::save(Advocate & adv) const { PersistentSensitivity sensitivity(hasoferReliabilityIndexSensitivity_ ); PersistentObject::save(adv); adv.saveAttribute( "standardSpaceDesignPoint_", standardSpaceDesignPoint_ ); adv.saveAttribute( "physicalSpaceDesignPoint_", physicalSpaceDesignPoint_ ); adv.saveAttribute( "limitStateVariable_", limitStateVariable_ ); adv.saveAttribute( "isStandardPointOriginInFailureSpace_", isStandardPointOriginInFailureSpace_ ); adv.saveAttribute( "hasoferReliabilityIndex_", hasoferReliabilityIndex_ ); adv.saveAttribute( "importanceFactors_", importanceFactors_ ); adv.saveAttribute( "classicalImportanceFactors_", classicalImportanceFactors_ ); adv.saveAttribute( "physicalImportanceFactors_", physicalImportanceFactors_ ); adv.saveAttribute( "hasoferReliabilityIndexSensitivity_", sensitivity ); adv.saveAttribute( "isAlreadyComputedImportanceFactors_", isAlreadyComputedImportanceFactors_ ); adv.saveAttribute( "isAlreadyComputedClassicalImportanceFactors_", isAlreadyComputedClassicalImportanceFactors_ ); adv.saveAttribute( "isAlreadyComputedPhysicalImportanceFactors_", isAlreadyComputedPhysicalImportanceFactors_ ); adv.saveAttribute( "isAlreadyComputedHasoferReliabilityIndexSensitivity_", isAlreadyComputedHasoferReliabilityIndexSensitivity_ ); adv.saveAttribute( "optimizationResult_", optimizationResult_ ); } /* Method load() reloads the object from the StorageManager */ void AnalyticalResult::load(Advocate & adv) { PersistentSensitivity sensitivity; PersistentObject::load(adv); adv.loadAttribute( "standardSpaceDesignPoint_", standardSpaceDesignPoint_ ); adv.loadAttribute( "physicalSpaceDesignPoint_", physicalSpaceDesignPoint_ ); adv.loadAttribute( "limitStateVariable_", limitStateVariable_ ); adv.loadAttribute( "isStandardPointOriginInFailureSpace_", isStandardPointOriginInFailureSpace_ ); adv.loadAttribute( "hasoferReliabilityIndex_", hasoferReliabilityIndex_ ); adv.loadAttribute( "importanceFactors_", importanceFactors_ ); adv.loadAttribute( "classicalImportanceFactors_", classicalImportanceFactors_ ); adv.loadAttribute( "hasoferReliabilityIndexSensitivity_", sensitivity ); adv.loadAttribute( "isAlreadyComputedImportanceFactors_", isAlreadyComputedImportanceFactors_ ); adv.loadAttribute( "isAlreadyComputedClassicalImportanceFactors_", isAlreadyComputedClassicalImportanceFactors_ ); adv.loadAttribute( "isAlreadyComputedHasoferReliabilityIndexSensitivity_", isAlreadyComputedHasoferReliabilityIndexSensitivity_ ); adv.loadAttribute( "optimizationResult_", optimizationResult_ ); hasoferReliabilityIndexSensitivity_ = sensitivity; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/CMakeLists.txt000066400000000000000000000013121307543307100260310ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (StrongMaximumTest.cxx) ot_add_source_file (Analytical.cxx) ot_add_source_file (AnalyticalResult.cxx) ot_add_source_file (FORM.cxx) ot_add_source_file (FORMResult.cxx) ot_add_source_file (SORM.cxx) ot_add_source_file (SORMResult.cxx) ot_install_header_file (Analytical.hxx) ot_install_header_file (OTAnalytical.hxx) ot_install_header_file (SORMResult.hxx) ot_install_header_file (StrongMaximumTest.hxx) ot_install_header_file (SORM.hxx) ot_install_header_file (FORMResult.hxx) ot_install_header_file (AnalyticalResult.hxx) ot_install_header_file (FORM.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/FORM.cxx000066400000000000000000000054531307543307100245720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief FORM implements the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FORM.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FORM); static const Factory
Factory_FORM; /* Default constructor for the save/load mechanism */ FORM::FORM() : Analytical(), formResult_() { // Nothing to do } /* * @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point */ FORM::FORM(const OptimizationAlgorithm & nearestPointAlgorithm, const Event & event, const Point & physicalStartingPoint): Analytical(nearestPointAlgorithm, event, physicalStartingPoint) { // Nothing to do } /* Virtual constructor */ FORM * FORM::clone() const { return new FORM(*this); } /* Result accessor */ FORMResult FORM::getResult() const { return formResult_; } /* Result accessor */ void FORM::setResult(const FORMResult & formResult) { formResult_ = formResult; } /* String converter */ String FORM::__repr__() const { OSS oss; oss << "class=" << FORM::GetClassName() << " " << Analytical::__repr__() << " result=" << formResult_; return oss; } /* Function that computes the design point by re-using the Analytical::run() and creates a FORMResult */ void FORM::run() { Analytical::run(); formResult_ = FORMResult(Analytical::getAnalyticalResult().getStandardSpaceDesignPoint(), Analytical::getAnalyticalResult().getLimitStateVariable(), Analytical::getAnalyticalResult().getIsStandardPointOriginInFailureSpace()); formResult_.setOptimizationResult(Analytical::getAnalyticalResult().getOptimizationResult()); } /* Method save() stores the object through the StorageManager */ void FORM::save(Advocate & adv) const { Analytical::save(adv); adv.saveAttribute("formResult_", formResult_); } /* Method load() reloads the object from the StorageManager */ void FORM::load(Advocate & adv) { Analytical::load(adv); adv.loadAttribute("formResult_", formResult_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/FORMResult.cxx000066400000000000000000000246171307543307100257740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Result implements the results obtained from the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FORM.hxx" #include "openturns/Distribution.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FORMResult); static const Factory Factory_FORMResult; typedef PersistentCollection PersistentSensitivity; /* * @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point */ FORMResult::FORMResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace): AnalyticalResult(standardSpaceDesignPoint, limitStateVariable, isStandardPointOriginInFailureSpace), eventProbability_(0.), generalisedReliabilityIndex_(0.), eventProbabilitySensitivity_(Sensitivity(0)), isAlreadyComputedEventProbabilitySensitivity_(false) { computeEventProbability(); computeGeneralisedReliabilityIndex(); } /* Default constructor */ FORMResult::FORMResult(): AnalyticalResult(), eventProbability_(0.), generalisedReliabilityIndex_(0.), eventProbabilitySensitivity_(Sensitivity(0)), isAlreadyComputedEventProbabilitySensitivity_(false) { // Nothing to do } /* Virtual constructor */ FORMResult * FORMResult::clone() const { return new FORMResult(*this); } /* The function that actually evaluates the event probability with FORM approximation */ void FORMResult::computeEventProbability() const { /* evaluate the event probability */ /* Be careful! computeCDF method takes an Point as an input argument */ /* in the standard space all marginals of the standard distribution are identical */ eventProbability_ = getLimitStateVariable().getImplementation()->getAntecedent()->getDistribution().getStandardDistribution().getMarginal(0).computeCDF(Point(1, -getHasoferReliabilityIndex())); if (getIsStandardPointOriginInFailureSpace()) { // isStandardPointOriginInFailureSpace is true: unusual case eventProbability_ = 1.0 - eventProbability_; } } /* EventProbability accessor */ Scalar FORMResult::getEventProbability() const { return eventProbability_; } /* EventProbability accessor */ void FORMResult::setEventProbability(const Scalar & eventProbability) { eventProbability_ = eventProbability; } /* The function that actually evaluates the generalised reliability index with FORM approximation */ void FORMResult::computeGeneralisedReliabilityIndex() const { /* GeneralisedReliabilityIndex is defined by : - Inverse standard marginal CDF (eventProbability). It will thus be negative if the eventProbability is > 0.5. */ generalisedReliabilityIndex_ = -getLimitStateVariable().getImplementation()->getAntecedent()->getDistribution().getStandardDistribution().getMarginal(0).computeQuantile(eventProbability_)[0]; } /* GeneralisedReliabilityIndex accessor */ Scalar FORMResult::getGeneralisedReliabilityIndex() const { return generalisedReliabilityIndex_; } /* GeneralisedReliabilityIndex accessor */ void FORMResult::setGeneralisedReliabilityIndex(const Scalar & generalisedReliabilityIndex) { generalisedReliabilityIndex_ = generalisedReliabilityIndex; } /* The function that actually evaluates the event probability sensitivity with FORM approximation */ void FORMResult::computeEventProbabilitySensitivity() const { Point correctedReliabilityIndex(1, (getIsStandardPointOriginInFailureSpace() ? getHasoferReliabilityIndex() : -getHasoferReliabilityIndex())); Distribution antecedent(getLimitStateVariable().getImplementation()->getAntecedent()->getDistribution()); UnsignedInteger dimension = antecedent.getDimension(); /* Be carefull! computeCDF method takes an Point as an input argument */ /* in the standard space all marginals of the standard distribution are identical */ /* evaluate one marginal at the reliability index : the marginal is symmetric with respect to zero */ const Distribution standardMarginalDistribution(antecedent.getStandardDistribution().getMarginal(0)); Scalar correctedReliabilityIndexDensity = standardMarginalDistribution.computePDF(correctedReliabilityIndex); if (! getIsStandardPointOriginInFailureSpace()) { // isStandardPointOriginInFailureSpace is false : usual case correctedReliabilityIndexDensity *= -1.0; } /* We initialize eventProbabilitySensitivity_ this way in order to inherit from the name and description of hasoferReliabilityIndexSensitivity */ eventProbabilitySensitivity_ = getHasoferReliabilityIndexSensitivity(); /* sensitivity with respect to the parameters influencing beta (beta is not sensitive to the parameters relative to the copula type) */ UnsignedInteger size = eventProbabilitySensitivity_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) eventProbabilitySensitivity_[i] *= correctedReliabilityIndexDensity; /* sensitivity with respect to the parameters of the density generator of the standard distribution */ PointWithDescriptionCollection standardMarginalParametersCollection(standardMarginalDistribution.getParametersCollection()); UnsignedInteger parametersDimension = standardMarginalParametersCollection[0].getDimension(); /* there 2 parameters generic to 1D elliptical distributions : mean and standard deviation */ UnsignedInteger genericParametersNumber = 2; if (antecedent.getImplementation()->hasEllipticalCopula() && parametersDimension > genericParametersNumber) { const Point standardParametersGradient(standardMarginalDistribution.computeCDFGradient(correctedReliabilityIndex)); /* shift is the number of parameters of the correlation matrix (upper triangle) for elliptical copula*/ const UnsignedInteger shift = dimension * (dimension - 1) / 2; for (UnsignedInteger index = genericParametersNumber; index < standardParametersGradient.getDimension(); ++index) eventProbabilitySensitivity_[dimension][index + shift - genericParametersNumber] = standardParametersGradient[index]; } isAlreadyComputedEventProbabilitySensitivity_ = true; }// end computeEventProbabilitySensitivity() /* EventProbabilitySensitivity accessor */ FORMResult::Sensitivity FORMResult::getEventProbabilitySensitivity() const { if (! isAlreadyComputedEventProbabilitySensitivity_) computeEventProbabilitySensitivity(); return eventProbabilitySensitivity_; } /* HasoferReliabilityIndexSensitivity Graph */ AnalyticalResult::GraphCollection FORMResult::drawEventProbabilitySensitivity(Scalar width) const { GraphCollection eventProbabilitySensitivityGraphCollection(0); // To ensure that the eventProbabilitySensitivity_ are up to date if (! isAlreadyComputedEventProbabilitySensitivity_) computeEventProbabilitySensitivity(); UnsignedInteger dimension = getStandardSpaceDesignPoint().getDimension(); UnsignedInteger size = eventProbabilitySensitivity_.getSize(); // The first graph shows the sensitivities with respect to the marginal parameters Sensitivity marginalSensitivity(dimension); for(UnsignedInteger i = 0; i < dimension; ++i) marginalSensitivity[i] = eventProbabilitySensitivity_[i]; Graph eventProbabilitySensitivityGraphMarginal(drawSensitivity(marginalSensitivity, width)); OSS oss1; oss1 << "FORM - Event Probability Sensitivities - Marginal parameters - " << getLimitStateVariable().getName() ; eventProbabilitySensitivityGraphMarginal.setTitle(oss1); eventProbabilitySensitivityGraphCollection.add(eventProbabilitySensitivityGraphMarginal); // The second graph shows the sensitivities with respect to the other parameters if (size > dimension) { Sensitivity otherSensitivity(size - dimension); for(UnsignedInteger i = dimension; i < size; ++i) otherSensitivity[i - dimension] = eventProbabilitySensitivity_[i]; Graph eventProbabilitySensitivityGraphOther(drawSensitivity(otherSensitivity, width)); OSS oss2; oss2 << "FORM - Event Probability Sensitivities - Other parameters - " << getLimitStateVariable().getName() ; eventProbabilitySensitivityGraphOther.setTitle(oss2); eventProbabilitySensitivityGraphCollection.add(eventProbabilitySensitivityGraphOther); } return eventProbabilitySensitivityGraphCollection; } /* String converter */ String FORMResult::__repr__() const { OSS oss; oss << "class=" << FORMResult::GetClassName() << " " << AnalyticalResult::__repr__() << " eventProbability=" << eventProbability_ << " generalisedReliabilityIndex=" << generalisedReliabilityIndex_ << " eventProbabilitySensitivity=" << eventProbabilitySensitivity_; return oss; } /* Method save() stores the object through the StorageManager */ void FORMResult::save(Advocate & adv) const { PersistentSensitivity sensitivity(eventProbabilitySensitivity_); AnalyticalResult::save(adv); adv.saveAttribute( "eventProbability_", eventProbability_ ); adv.saveAttribute( "generalisedReliabilityIndex_", generalisedReliabilityIndex_ ); adv.saveAttribute( "eventProbabilitySensitivity_", sensitivity ); adv.saveAttribute( "isAlreadyComputedEventProbabilitySensitivity_", isAlreadyComputedEventProbabilitySensitivity_ ); } /* Method load() reloads the object from the StorageManager */ void FORMResult::load(Advocate & adv) { PersistentSensitivity sensitivity; AnalyticalResult::load(adv); adv.loadAttribute( "eventProbability_", eventProbability_ ); adv.loadAttribute( "generalisedReliabilityIndex_", generalisedReliabilityIndex_ ); adv.loadAttribute( "eventProbabilitySensitivity_", sensitivity ); adv.loadAttribute( "isAlreadyComputedEventProbabilitySensitivity_", isAlreadyComputedEventProbabilitySensitivity_ ); eventProbabilitySensitivity_ = sensitivity; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/SORM.cxx000066400000000000000000000054771307543307100246150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SORM implements the Second Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SORM.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SORM); static const Factory Factory_SORM; /* Default constructor for the save/load mechanism */ SORM::SORM() : Analytical(), sormResult_() { // Nothing to do } /* * @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point */ SORM::SORM(const OptimizationAlgorithm & nearestPointAlgorithm, const Event & event, const Point & physicalStartingPoint): Analytical(nearestPointAlgorithm, event, physicalStartingPoint), sormResult_() { // Nothing to do } /* Virtual constructor */ SORM * SORM::clone() const { return new SORM(*this); } /* Result accessor */ SORMResult SORM::getResult() const { return sormResult_; } /* Result accessor */ void SORM::setResult(const SORMResult & sormResult) { sormResult_ = sormResult; } /* String converter */ String SORM::__repr__() const { OSS oss; oss << "class=" << SORM::GetClassName() << " " << Analytical::__repr__() << " result=" << sormResult_; return oss; } /* Function that computes the design point by re-using the Analytical::run() and creates a SORMResult */ void SORM::run() { Analytical::run(); sormResult_ = SORMResult(Analytical::getAnalyticalResult().getStandardSpaceDesignPoint(), Analytical::getAnalyticalResult().getLimitStateVariable(), Analytical::getAnalyticalResult().getIsStandardPointOriginInFailureSpace()); sormResult_.setOptimizationResult(Analytical::getAnalyticalResult().getOptimizationResult()); } /* Method save() stores the object through the StorageManager */ void SORM::save(Advocate & adv) const { Analytical::save(adv); adv.saveAttribute("sormResult_", sormResult_); } /* Method load() reloads the object from the StorageManager */ void SORM::load(Advocate & adv) { Analytical::load(adv); adv.loadAttribute("sormResult_", sormResult_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/SORMResult.cxx000066400000000000000000000501261307543307100260030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SORMResult implements the results obtained from the Second Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SORM.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/Function.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Matrix.hxx" #include "openturns/Log.hxx" #include "openturns/Normal.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SORMResult); static const Factory Factory_SORMResult; /* * @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point */ SORMResult::SORMResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace): AnalyticalResult(standardSpaceDesignPoint, limitStateVariable, isStandardPointOriginInFailureSpace), hessianLimitStateFunction_(), gradientLimitStateFunction_(), sortedCurvatures_(), isAlreadyComputedSortedCurvatures_(false), eventProbabilityBreitung_(-1.0), eventProbabilityHohenBichler_(-1.0), eventProbabilityTvedt_(-1.0), generalisedReliabilityIndexBreitung_(SpecFunc::MaxScalar), generalisedReliabilityIndexHohenBichler_(SpecFunc::MaxScalar), generalisedReliabilityIndexTvedt_(SpecFunc::MaxScalar), standardDistribution_(limitStateVariable.getImplementation()->getAntecedent().getImplementation()->getDistribution().getStandardDistribution()), standardMarginal_(standardDistribution_.getMarginal(0)) { /* get the physical Limite State Function */ const Function limitStateFunction(StandardEvent(limitStateVariable).getImplementation()->getFunction()); /* compute its gradient */ const Matrix gradient(limitStateFunction.gradient(getStandardSpaceDesignPoint())); /* Get the first column */ gradientLimitStateFunction_ = gradient * Point(1, 1.0); /* compute its hessian */ const SymmetricTensor hessian(limitStateFunction.hessian(getStandardSpaceDesignPoint())); /* Get the first sheet */ hessianLimitStateFunction_ = SquareMatrix(hessian.getNbRows()); for (UnsignedInteger i = 0; i < hessian.getNbRows(); ++i) for (UnsignedInteger j = 0; j < hessian.getNbColumns(); ++j) hessianLimitStateFunction_(i, j) = hessian(i, j, 0); } // end SORMResult::Result /* Default constructor */ SORMResult::SORMResult(): AnalyticalResult(), hessianLimitStateFunction_(), gradientLimitStateFunction_(), sortedCurvatures_(), isAlreadyComputedSortedCurvatures_(false), eventProbabilityBreitung_(-1.0), eventProbabilityHohenBichler_(-1.0), eventProbabilityTvedt_(-1.0), generalisedReliabilityIndexBreitung_(SpecFunc::MaxScalar), generalisedReliabilityIndexHohenBichler_(SpecFunc::MaxScalar), generalisedReliabilityIndexTvedt_(SpecFunc::MaxScalar), standardDistribution_(Normal(1)), standardMarginal_(Normal(1)) { // Nothing to do } /* Virtual constructor */ SORMResult * SORMResult::clone() const { return new SORMResult(*this); } /* The function that actually evaluates the curvatures of the standard limite state function at the standard design point */ void SORMResult::computeSortedCurvatures() const { /* see Mefisto v3.2 documentation */ /* we compute the main curvatures */ const UnsignedInteger dimension = getStandardSpaceDesignPoint().getDimension(); // If the dimension is zero, throw an exception if (dimension == 0) throw NotDefinedException(HERE) << "Error: the curvatures cannot be computed when the dimension is zero."; const Scalar inverseGradientNorm = 1.0 / gradientLimitStateFunction_.norm(); const Point unitGradientLimitStateFunction(inverseGradientNorm * gradientLimitStateFunction_); SquareMatrix kroneckerUnitGradientLimitStateFunction(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j < dimension; ++j) kroneckerUnitGradientLimitStateFunction(i, j) = unitGradientLimitStateFunction[i] * unitGradientLimitStateFunction[j]; /* W = (uGrad.uGrad^t -Id) * Hess(g) */ const SquareMatrix id = IdentityMatrix(dimension); const SquareMatrix::ComplexCollection eigenValues(((kroneckerUnitGradientLimitStateFunction - id) * hessianLimitStateFunction_).computeEigenValues()); Point realEigenValues(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) realEigenValues[i] = eigenValues[i].real(); /* The curvatures are proportional to the eigenvalues of W If the normal of the boundary of the failure domain points to the origin at the design point, then we change the sign of the curvatures. It insure that a convexe failure domain will have positive curvatures */ sortedCurvatures_ = ((dot(gradientLimitStateFunction_, getStandardSpaceDesignPoint()) > 0.0 ? 1.0 : -1.0) * inverseGradientNorm) * realEigenValues; /* we sort the curvatures with increasing order */ std::sort(sortedCurvatures_.begin(), sortedCurvatures_.end()); isAlreadyComputedSortedCurvatures_ = true; } // end SORMResult::computeCurvatures /* SortedCurvatures accessor */ Point SORMResult::getSortedCurvatures() const { if (!isAlreadyComputedSortedCurvatures_) computeSortedCurvatures(); return sortedCurvatures_; } /* The function that actually evaluates the event probability with SORM Breitung approximation We use flag values to avoid the explicit management of flags to tell if the probability has already been computed or if it cannot be computed. A value of -1.0 means that the value has not yet been computed and a value of -2.0 means that the value cannot be computed */ Scalar SORMResult::getEventProbabilityBreitung() const { /* Quick return if the probability has already been computed */ if ((eventProbabilityBreitung_ != -1.0) && (eventProbabilityBreitung_ != -2.0)) return eventProbabilityBreitung_; /* Make sure the curvatures have been computed*/ getSortedCurvatures(); const Scalar beta = getHasoferReliabilityIndex(); const Point minusBeta(1, -beta); const Scalar standardCDFBeta = standardMarginal_.computeCDF(minusBeta); /* test if all curvatures verifie 1 + beta * curvature > 0 */ /* curvatures are sorted with increasing order and stocked in the attribute SortedCurvatures */ if (1.0 + beta * sortedCurvatures_[0] < 0) { eventProbabilityBreitung_ = -2.0; throw NotDefinedException(HERE) << "Error: impossible to compute Breitung SORM probability, one of the curvatures is < -1/beta. beta=" << beta << ", curvature=" << sortedCurvatures_[0]; } /* PBreitung = E(-beta)/Prod(sqrt(1+beta*curvature[i])) */ eventProbabilityBreitung_ = standardCDFBeta; for (UnsignedInteger index = 0 ; index < sortedCurvatures_.getDimension(); ++index) eventProbabilityBreitung_ /= sqrt(1.0 + beta * sortedCurvatures_[index]); /* if the Standard Point Origin is in the failure space, take the complementry probability */ if (getIsStandardPointOriginInFailureSpace()) eventProbabilityBreitung_ = 1.0 - eventProbabilityBreitung_; if ((eventProbabilityBreitung_ < 0.0) || (eventProbabilityBreitung_ > 1.0)) { const Scalar badValue = eventProbabilityBreitung_; eventProbabilityBreitung_ = -2.0; throw NotDefinedException(HERE) << "Error: the probability computed using Breitung SORM approximation gives a value outside of [0, 1]:" << badValue; } return eventProbabilityBreitung_; } // end SORMResult::getEventProbabilityBreitung /* The function that actually evaluates the event probability with SORM HohenBichler approximation */ Scalar SORMResult::getEventProbabilityHohenBichler() const { /* Quick return if the probability has already been computed */ if ((eventProbabilityHohenBichler_ != -1.0) && (eventProbabilityHohenBichler_ != -2.0)) return eventProbabilityHohenBichler_; /* this formula is valid only for standard distribution with independent components */ if (!standardDistribution_.hasIndependentCopula()) { eventProbabilityHohenBichler_ = -2.0; throw NotDefinedException(HERE) << "Error: impossible to compute HohenBichler SORM probability for standard distributions with non independent components."; } /* Make sure the curvatures have been computed*/ getSortedCurvatures(); const Point minusBeta(1, -getHasoferReliabilityIndex()); const Scalar standardPDFBeta = standardMarginal_.computePDF(minusBeta); const Scalar standardCDFBeta = standardMarginal_.computeCDF(minusBeta); const Scalar rho = standardPDFBeta / standardCDFBeta; /* test if all curvatures verifie 1 + rho * curvature > 0 */ /* curvatures are sorted with increasing order and stocked in the attribute SortedCurvatures */ if (1.0 + rho * sortedCurvatures_[0] < 0) { eventProbabilityBreitung_ = -2.0; throw NotDefinedException(HERE) << "Error: impossible to compute HohenBichler SORM probability, one of the curvatures is < -1/rho. rho=" << rho << ", curvature=" << sortedCurvatures_[0]; } /* P_hohenbichler = Phi(-beta)/Prod(sqrt(1+rho*curvature[i])) */ eventProbabilityHohenBichler_ = standardCDFBeta; for (UnsignedInteger index = 0 ; index < sortedCurvatures_.getDimension(); ++index) eventProbabilityHohenBichler_ /= sqrt(1.0 + rho * sortedCurvatures_[index]); /* if the Standard Point Origin is in the failure space, take the complementry probability */ if (getIsStandardPointOriginInFailureSpace()) eventProbabilityHohenBichler_ = 1.0 - eventProbabilityHohenBichler_; if ((eventProbabilityHohenBichler_ < 0.0) || (eventProbabilityHohenBichler_ > 1.0)) { const Scalar badValue = eventProbabilityHohenBichler_; eventProbabilityHohenBichler_ = -2.0; throw NotDefinedException(HERE) << "Error: the probability computed using HohenBichler SORM approximation gives a value outside of [0, 1]:" << badValue; } return eventProbabilityHohenBichler_; } // SORMResult::getEventProbabilityHohenBichler /* The function that actually evaluates the event probability with SORM Tvedtapproximation */ Scalar SORMResult::getEventProbabilityTvedt() const { /* Quick return if the probability has already been computed */ if ((eventProbabilityTvedt_ != -1.0) && (eventProbabilityTvedt_ != -2.0)) return eventProbabilityTvedt_; /* this formula is valid only for standard distribution with independent components */ if (!standardDistribution_.hasIndependentCopula()) { eventProbabilityTvedt_ = -2.0; throw NotDefinedException(HERE) << "Error: impossible to compute Tvedt SORM probability for standard distributions with non independent components."; } /* Make sure the curvatures have been computed*/ getSortedCurvatures(); const Scalar beta = getHasoferReliabilityIndex(); const Point minusBeta(1, -beta); /* test if all curvatures verifie 1 + (beta+1) * curvature > 0 */ /* curvatures are sorted with increasing order and stocked in the attribute SortedCurvatures */ if (1.0 + (1 + beta) * sortedCurvatures_[0] < 0) { eventProbabilityTvedt_ = -2.0; throw NotDefinedException(HERE) << "Error: impossible to compute Tvedt SORM probability, one of the curvatures is < -1/(1+beta). beta=" << beta << ", curvature=" << sortedCurvatures_[0]; } const Scalar standardPDFBeta = standardMarginal_.computePDF(minusBeta); const Scalar standardCDFBeta = standardMarginal_.computeCDF(minusBeta); /* compute the first term A1 */ Scalar prod1 = 1.0; const UnsignedInteger dimension = sortedCurvatures_.getDimension(); for (UnsignedInteger index = 0 ; index < dimension; ++index) prod1 /= sqrt(1.0 + beta * sortedCurvatures_[index]); const Scalar termA1 = standardCDFBeta * prod1; /* compute the second term A2 */ const Scalar rho = beta * standardCDFBeta - standardPDFBeta; Scalar prod2 = 1.0; for (UnsignedInteger index = 0; index < dimension; ++index) prod2 /= sqrt(1.0 + (1.0 + beta) * sortedCurvatures_[index]); const Scalar termA2 = rho * (prod1 - prod2); /* compute the second term A3 */ Complex complexProd3(1.0, 0.0); Complex iPlusBeta(beta, 1.0); for (UnsignedInteger index = 0; index < dimension; ++index) complexProd3 /= sqrt(1.0 + iPlusBeta * sortedCurvatures_[index]); const Scalar termA3 = (beta + 1.0) * rho * (prod1 - complexProd3.real()); /* compute tvedt probability */ eventProbabilityTvedt_ = termA1 + termA2 + termA3; /* if the Standard Point Origin is in the failure space, take the complementry probability */ if (getIsStandardPointOriginInFailureSpace()) eventProbabilityTvedt_ = 1.0 - eventProbabilityTvedt_; if ((eventProbabilityTvedt_ < 0.0) || (eventProbabilityTvedt_ > 1.0)) { const Scalar badValue = eventProbabilityTvedt_; eventProbabilityTvedt_ = -2.0; throw NotDefinedException(HERE) << "Error: the probability computed using Tvedt SORM approximation gives a value outside of [0, 1]:" << badValue; } return eventProbabilityTvedt_; } // end SORMResult::getEventProbabilityTvedt /* GeneralisedReliabilityIndexBreitung accessor */ Scalar SORMResult::getGeneralisedReliabilityIndexBreitung() const { /* evaluate the GeneralisedReliabilityIndex */ /* GeneralisedReliabilityIndex is defined by : - Inverse standard marginal CDF (eventProbability) in usual case or : + Inverse standard marginal CDF (eventProbability) in other case */ // StandardPointOriginInFailureSpace is FALSE : usual case Scalar sign = 1.0; if (!getIsStandardPointOriginInFailureSpace()) sign = -1.0; /* Generalised reliability index with SORM Breitung approximation */ /* Make sure that Breitung's approximation has been computed */ getEventProbabilityBreitung(); generalisedReliabilityIndexBreitung_ = sign * standardMarginal_.computeQuantile(eventProbabilityBreitung_)[0]; return generalisedReliabilityIndexBreitung_; } // end SORMResult::getGeneralisedReliabilityIndexBreitung /* GeneralisedReliabilityIndex accessor */ Scalar SORMResult::getGeneralisedReliabilityIndexHohenBichler() const { /* evaluate the GeneralisedReliabilityIndex */ /* GeneralisedReliabilityIndex is defined by : - Inverse standard marginal CDF (eventProbability) in usual case or : + Inverse standard marginal CDF (eventProbability) in other case */ // StandardPointOriginInFailureSpace is FALSE : usual case Scalar sign = 1.0; if (!getIsStandardPointOriginInFailureSpace()) sign = -1.0; /* Generalised reliability index with SORM HohenBichler approximation */ /* Make sure that HohenBichler's approximation has been computed */ getEventProbabilityHohenBichler(); generalisedReliabilityIndexHohenBichler_ = sign * standardMarginal_.computeQuantile(eventProbabilityHohenBichler_)[0]; return generalisedReliabilityIndexHohenBichler_; } /* GeneralisedReliabilityIndex accessor */ Scalar SORMResult::getGeneralisedReliabilityIndexTvedt() const { /* evaluate the GeneralisedReliabilityIndex */ /* GeneralisedReliabilityIndex is defined by : - Inverse standard marginal CDF (eventProbability) in usual case or : + Inverse standard marginal CDF (eventProbability) in other case */ // StandardPointOriginInFailureSpace is FALSE : usual case Scalar sign = 1.0; if (!getIsStandardPointOriginInFailureSpace()) sign = -1.0; /* Generalised reliability index with SORM Tvedt approximation */ /* Make sure that Tvedt's approximation has been computed */ getEventProbabilityTvedt(); generalisedReliabilityIndexTvedt_ = sign * standardMarginal_.computeQuantile(eventProbabilityTvedt_)[0]; return generalisedReliabilityIndexTvedt_; } /* String converter */ String SORMResult::__repr__() const { OSS oss; oss << "class=" << SORMResult::GetClassName() << " " << AnalyticalResult::__repr__() << " sortedCurvatures=" << sortedCurvatures_ << " eventProbabilityBreitung=" << eventProbabilityBreitung_ << " eventProbabilityHohenBichler=" << eventProbabilityHohenBichler_ << " eventProbabilityTvedt=" << eventProbabilityTvedt_ << " generalisedReliabilityIndexBreitung=" << generalisedReliabilityIndexBreitung_ << " generalisedReliabilityIndexHohenBichler=" << generalisedReliabilityIndexHohenBichler_ << " generalisedReliabilityIndexTvedt=" << generalisedReliabilityIndexTvedt_ << " gradientLimitStateFunction_=" << gradientLimitStateFunction_ << " hessianLimitStateFunction_=" << hessianLimitStateFunction_; return oss; } /* String converter */ String SORMResult::__str__(const String & offset) const { OSS oss; try { oss << "Probability estimate (Breitung)=" << getEventProbabilityBreitung() << "\n"; oss << "Generalised reliability (Breitung)=" << getGeneralisedReliabilityIndexBreitung() << "\n"; } catch (...) { oss << "Probability estimate and generalised reliability index (Breitung) not defined." << "\n"; } try { oss << "Probability estimate (HohenBichler)=" << getEventProbabilityHohenBichler() << "\n"; oss << "Generalised reliability (HohenBichler)=" << getGeneralisedReliabilityIndexHohenBichler() << "\n"; } catch (...) { oss << "Probability estimate and generalised reliability index (HohenBichler) not defined." << "\n"; } try { oss << "Probability estimate (Tvedt)=" << getEventProbabilityTvedt() << "\n"; oss << "Generalised reliability (Tvedt)" << getGeneralisedReliabilityIndexTvedt() << "\n"; } catch (...) { oss << "Probability estimate and generalised reliability index (Tvedt) not defined." << "\n"; } return oss; } /* Method save() stores the object through the StorageManager */ void SORMResult::save(Advocate & adv) const { AnalyticalResult::save(adv); adv.saveAttribute( "hessianLimitStateFunction_", hessianLimitStateFunction_ ); adv.saveAttribute( "gradientLimitStateFunction_", gradientLimitStateFunction_ ); adv.saveAttribute( "sortedCurvatures_", sortedCurvatures_ ); adv.saveAttribute( "isAlreadyComputedSortedCurvatures_", isAlreadyComputedSortedCurvatures_ ); adv.saveAttribute( "eventProbabilityBreitung_", eventProbabilityBreitung_ ); adv.saveAttribute( "eventProbabilityHohenBichler_", eventProbabilityHohenBichler_ ); adv.saveAttribute( "eventProbabilityTvedt_", eventProbabilityTvedt_ ); adv.saveAttribute( "generalisedReliabilityIndexBreitung_", generalisedReliabilityIndexBreitung_ ); adv.saveAttribute( "generalisedReliabilityIndexHohenBichler_", generalisedReliabilityIndexHohenBichler_ ); adv.saveAttribute( "generalisedReliabilityIndexTvedt_", generalisedReliabilityIndexTvedt_ ); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "standardMarginal_", standardMarginal_ ); } /* Method load() reloads the object from the StorageManager */ void SORMResult::load(Advocate & adv) { AnalyticalResult::load(adv); adv.loadAttribute( "hessianLimitStateFunction_", hessianLimitStateFunction_ ); adv.loadAttribute( "gradientLimitStateFunction_", gradientLimitStateFunction_ ); adv.loadAttribute( "sortedCurvatures_", sortedCurvatures_ ); adv.loadAttribute( "isAlreadyComputedSortedCurvatures_", isAlreadyComputedSortedCurvatures_ ); adv.loadAttribute( "eventProbabilityBreitung_", eventProbabilityBreitung_ ); adv.loadAttribute( "eventProbabilityHohenBichler_", eventProbabilityHohenBichler_ ); adv.loadAttribute( "eventProbabilityTvedt_", eventProbabilityTvedt_ ); adv.loadAttribute( "generalisedReliabilityIndexBreitung_", generalisedReliabilityIndexBreitung_ ); adv.loadAttribute( "generalisedReliabilityIndexHohenBichler_", generalisedReliabilityIndexHohenBichler_ ); adv.loadAttribute( "generalisedReliabilityIndexTvedt_", generalisedReliabilityIndexTvedt_ ); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "standardMarginal_", standardMarginal_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/StrongMaximumTest.cxx000066400000000000000000000615231307543307100275010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StrongMaxTest implements an algorithm to check if a given design point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/StrongMaximumTest.hxx" #include "openturns/Normal.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/NearestPointChecker.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StrongMaximumTest); static const Factory Factory_StrongMaximumTest; typedef DistributionImplementation::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; /* For save/load mechanism*/ StrongMaximumTest::StrongMaximumTest() : PersistentObject(), event_(), standardSpaceDesignPoint_(0), nearDesignPointVerifyingEventPoints_(0, 0), nearDesignPointVerifyingEventValues_(0, 0), farDesignPointVerifyingEventPoints_(0, 0), farDesignPointVerifyingEventValues_(0, 0), nearDesignPointViolatingEventPoints_(0, 0), nearDesignPointViolatingEventValues_(0, 0), farDesignPointViolatingEventPoints_(0, 0), farDesignPointViolatingEventValues_(0, 0) { // Nothing to do } /* * @class StrongMaximumTest * StrongMaximumTest allows to validate a design point */ /* Standard constructor */ StrongMaximumTest::StrongMaximumTest(const StandardEvent & event, const Point & standardSpaceDesignPoint, const Scalar importanceLevel, const Scalar accuracyLevel, const Scalar confidenceLevel) : PersistentObject(), event_(event), standardSpaceDesignPoint_(standardSpaceDesignPoint), nearDesignPointVerifyingEventPoints_(0, standardSpaceDesignPoint.getDimension()), nearDesignPointVerifyingEventValues_(0, 1), farDesignPointVerifyingEventPoints_(0, standardSpaceDesignPoint.getDimension()), farDesignPointVerifyingEventValues_(0, 1), nearDesignPointViolatingEventPoints_(0, standardSpaceDesignPoint.getDimension()), nearDesignPointViolatingEventValues_(0, 1), farDesignPointViolatingEventPoints_(0, standardSpaceDesignPoint.getDimension()), farDesignPointViolatingEventValues_(0, 1) { setImportanceLevel(importanceLevel); setAccuracyLevel(accuracyLevel); setConfidenceLevel(confidenceLevel); initializeParametersGivenConfidenceLevel(); } /* Standard constructor */ StrongMaximumTest::StrongMaximumTest(const StandardEvent & event, const Point & standardSpaceDesignPoint, const Scalar importanceLevel, const Scalar accuracyLevel, const UnsignedInteger pointNumber) : PersistentObject(), event_(event), standardSpaceDesignPoint_(standardSpaceDesignPoint), nearDesignPointVerifyingEventPoints_(0, standardSpaceDesignPoint.getDimension()), nearDesignPointVerifyingEventValues_(0, 1), farDesignPointVerifyingEventPoints_(0, standardSpaceDesignPoint.getDimension()), farDesignPointVerifyingEventValues_(0, 1), nearDesignPointViolatingEventPoints_(0, standardSpaceDesignPoint.getDimension()), nearDesignPointViolatingEventValues_(0, 1), farDesignPointViolatingEventPoints_(0, standardSpaceDesignPoint.getDimension()), farDesignPointViolatingEventValues_(0, 1) { if (standardSpaceDesignPoint.norm() < ResourceMap::GetAsScalar( "StrongMaximumTest-Epsilon" )) throw InvalidArgumentException(HERE) << "Error: the given standard space design point is too close to the origin for the strong maximum test to work, norm=" << standardSpaceDesignPoint.norm(); setImportanceLevel(importanceLevel); setAccuracyLevel(accuracyLevel); setPointNumber(pointNumber); initializeParametersGivenPointNumber(); } /* Virtual constructor */ StrongMaximumTest * StrongMaximumTest::clone() const { return new StrongMaximumTest(*this); } /* standardSpaceDesignPoint accessor */ void StrongMaximumTest::setStandardSpaceDesignPoint(const Point & standardSpaceDesignPoint) { if(standardSpaceDesignPoint.norm() <= 0.0) throw InvalidRangeException(HERE) << "DesignPoint with norm <= 0.0"; standardSpaceDesignPoint_ = standardSpaceDesignPoint; } /* standardSpaceDesignPoint accessor */ Point StrongMaximumTest::getStandardSpaceDesignPoint() const { return standardSpaceDesignPoint_; } /* deltaEpsilon accessor */ Scalar StrongMaximumTest::getDeltaEpsilon() const { return deltaEpsilon_; } /* Event accessor */ StandardEvent StrongMaximumTest::getEvent() const { return event_; } /* ImportanceLevel accessor */ Scalar StrongMaximumTest::getImportanceLevel() const { return importanceLevel_; } /* ImportanceLevel accessor */ void StrongMaximumTest::setImportanceLevel(const Scalar importanceLevel) { if((importanceLevel >= 1.0) || (importanceLevel <= 0.0)) throw InvalidRangeException(HERE) << "importanceLevel is not within 0.0 and 1.0"; importanceLevel_ = importanceLevel ; } /* AccuracyLevel accessor */ Scalar StrongMaximumTest::getAccuracyLevel() const { return accuracyLevel_; } /* AccuracyLevel accessor */ void StrongMaximumTest::setAccuracyLevel(const Scalar accuracyLevel) { if (!(accuracyLevel > 1.0)) throw InvalidRangeException(HERE) << "accuracyLevel is not > 1.0"; accuracyLevel_ = accuracyLevel ; } /* ConfidenceLevel accessor */ Scalar StrongMaximumTest::getConfidenceLevel() const { return confidenceLevel_; } /* ConfidenceLevel accessor */ void StrongMaximumTest::setConfidenceLevel(const Scalar confidenceLevel) { if((confidenceLevel > 1.0) || (confidenceLevel < 0.0)) throw InvalidRangeException(HERE) << "confidenceLevel is not within 0.0 and 1.0"; confidenceLevel_ = confidenceLevel ; } /* DesignPointVicinity accessor */ Scalar StrongMaximumTest::getDesignPointVicinity() const { return designPointVicinity_; } /* StrongMaxTestDesignPointVicinity accessor */ void StrongMaximumTest::setDesignPointVicinity(const Scalar designPointVicinity) { if((designPointVicinity >= 1.0) || (designPointVicinity <= 0.0)) throw InvalidRangeException(HERE) << "designPointVicinity is not within 0.0 and 1.0"; designPointVicinity_ = designPointVicinity; } /* StrongMaxTestPointNumber accessor */ UnsignedInteger StrongMaximumTest::getPointNumber() const { return pointNumber_; } /* StrongMaxTestPointNumber accessor */ void StrongMaximumTest::setPointNumber(const UnsignedInteger pointNumber) { if(pointNumber == 0) throw InvalidRangeException(HERE) << "pointNumber is equal to 0"; pointNumber_ = pointNumber ; } /* NearDesignPointVerifyingEventPoints accessor */ Sample StrongMaximumTest::getNearDesignPointVerifyingEventPoints() const { return nearDesignPointVerifyingEventPoints_; } /* NearDesignPointVerifyingEventValues accessor */ Sample StrongMaximumTest::getNearDesignPointVerifyingEventValues() const { return nearDesignPointVerifyingEventValues_; } /* FarDesignPointVerifyingEventPoints accessor */ Sample StrongMaximumTest::getFarDesignPointVerifyingEventPoints() const { return farDesignPointVerifyingEventPoints_; } /* FarDesignPointVerifyingEventValues accessor */ Sample StrongMaximumTest::getFarDesignPointVerifyingEventValues() const { return farDesignPointVerifyingEventValues_; } /* NearDesignPointViolatingEventPoints accessor */ Sample StrongMaximumTest::getNearDesignPointViolatingEventPoints() const { return nearDesignPointViolatingEventPoints_; } /* NearDesignPointViolatingEventValues accessor */ Sample StrongMaximumTest::getNearDesignPointViolatingEventValues() const { return nearDesignPointViolatingEventValues_; } /* FarDesignPointViolatingEventPoints accessor */ Sample StrongMaximumTest::getFarDesignPointViolatingEventPoints() const { return farDesignPointViolatingEventPoints_; } /* FarDesignPointViolatingEventValues accessor */ Sample StrongMaximumTest::getFarDesignPointViolatingEventValues() const { return farDesignPointViolatingEventValues_; } /* String converter */ String StrongMaximumTest::__repr__() const { OSS oss; oss << "class=" << StrongMaximumTest::GetClassName() << " event=" << event_ << " standardSpaceDesignPoint=" << standardSpaceDesignPoint_ << " importanceLevel=" << importanceLevel_ << " accuracyLevel=" << accuracyLevel_ << " confidenceLevel=" << confidenceLevel_ << " designPointVicinity=" << designPointVicinity_ << " pointNumber=" << pointNumber_ << " deltaEpsilon=" << deltaEpsilon_ << " nearDesignPointVerifyingEventPoints=" << nearDesignPointVerifyingEventPoints_ << " nearDesignPointVerifyingEventValues=" << nearDesignPointVerifyingEventValues_ << " farDesignPointVerifyingEventPoints=" << farDesignPointVerifyingEventPoints_ << " farDesignPointVerifyingEventValues=" << farDesignPointVerifyingEventValues_ << " nearDesignPointViolatingEventPoints=" << nearDesignPointViolatingEventPoints_ << " nearDesignPointViolatingEventValues=" << nearDesignPointViolatingEventValues_ << " farDesignPointViolatingEventPoints=" << farDesignPointViolatingEventPoints_ << " farDesignPointViolatingEventValues=" << farDesignPointViolatingEventValues_; return oss; } /* Method save() stores the object through the StorageManager */ void StrongMaximumTest::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "event_", event_ ); adv.saveAttribute( "standardSpaceDesignPoint_", standardSpaceDesignPoint_ ); adv.saveAttribute( "importanceLevel_", importanceLevel_ ); adv.saveAttribute( "accuracyLevel_", accuracyLevel_ ); adv.saveAttribute( "confidenceLevel_", confidenceLevel_ ); adv.saveAttribute( "designPointVicinity_", designPointVicinity_ ); adv.saveAttribute( "pointNumber_", pointNumber_ ); adv.saveAttribute( "deltaEpsilon_", deltaEpsilon_ ); adv.saveAttribute( "nearDesignPointVerifyingEventPoints_", nearDesignPointVerifyingEventPoints_ ); adv.saveAttribute( "nearDesignPointVerifyingEventValues_", nearDesignPointVerifyingEventValues_ ); adv.saveAttribute( "farDesignPointVerifyingEventPoints_", farDesignPointVerifyingEventPoints_ ); adv.saveAttribute( "farDesignPointVerifyingEventValues_", farDesignPointVerifyingEventValues_ ); adv.saveAttribute( "nearDesignPointViolatingEventPoints_", nearDesignPointViolatingEventPoints_ ); adv.saveAttribute( "nearDesignPointViolatingEventValues_", nearDesignPointViolatingEventValues_ ); adv.saveAttribute( "farDesignPointViolatingEventPoints_", farDesignPointViolatingEventPoints_ ); adv.saveAttribute( "farDesignPointViolatingEventValues_", farDesignPointViolatingEventValues_ ); } /* Method load() reloads the object from the StorageManager */ void StrongMaximumTest::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "event_", event_ ); adv.loadAttribute( "standardSpaceDesignPoint_", standardSpaceDesignPoint_ ); adv.loadAttribute( "importanceLevel_", importanceLevel_ ); adv.loadAttribute( "accuracyLevel_", accuracyLevel_ ); adv.loadAttribute( "confidenceLevel_", confidenceLevel_ ); adv.loadAttribute( "designPointVicinity_", designPointVicinity_ ); adv.loadAttribute( "pointNumber_", pointNumber_ ); adv.loadAttribute( "deltaEpsilon_", deltaEpsilon_ ); adv.loadAttribute( "nearDesignPointVerifyingEventPoints_", nearDesignPointVerifyingEventPoints_ ); adv.loadAttribute( "nearDesignPointVerifyingEventValues_", nearDesignPointVerifyingEventValues_ ); adv.loadAttribute( "farDesignPointVerifyingEventPoints_", farDesignPointVerifyingEventPoints_ ); adv.loadAttribute( "farDesignPointVerifyingEventValues_", farDesignPointVerifyingEventValues_ ); adv.loadAttribute( "nearDesignPointViolatingEventPoints_", nearDesignPointViolatingEventPoints_ ); adv.loadAttribute( "nearDesignPointViolatingEventValues_", nearDesignPointViolatingEventValues_ ); adv.loadAttribute( "farDesignPointViolatingEventPoints_", farDesignPointViolatingEventPoints_ ); adv.loadAttribute( "farDesignPointViolatingEventValues_", farDesignPointViolatingEventValues_ ); } /* Initialize Strong Max Test Parameters : method 1 */ void StrongMaximumTest::initializeParametersGivenConfidenceLevel() { /* evaluate the intermediate parameter delta_epsilon (see documentation) */ deltaEpsilon_ = computeDeltaEpsilon(); /* evaluate the HyperSphereSurfaceRatio (see documentation) */ Scalar p = computeHyperSphereSurfaceRatio(); // put eps1 and eps2 instead of 1.0 and 0.0 if((p >= 1.0) || (p <= 0.0)) throw InvalidRangeException(HERE) << "hyperSphereSurfaceRatio is not strictly within 0.0 and 1.0"; /* evaluate and affect the pointNumber_ */ setPointNumber(static_cast(round(log1p(-confidenceLevel_) / log1p(-p)))); /* evaluate and affect the designPointVicinity_ */ setDesignPointVicinity(1.0 / (1.0 + accuracyLevel_ * deltaEpsilon_)); } /* Initialize Strong Max Test Parameters : method 2 */ void StrongMaximumTest::initializeParametersGivenPointNumber() { /* evaluate the intermediate parameter delta_epsilon (see documentation) */ deltaEpsilon_ = computeDeltaEpsilon(); /* evaluate the HyperSphereSurfaceRatio (see documentation) */ Scalar p = computeHyperSphereSurfaceRatio(); // put eps1 and eps2 instead of 1.0 and 0.0 if((p >= 1.0) || (p <= 0.0)) throw InvalidRangeException(HERE) << "hyperSphereSurfaceRatio is not strictly within 0.0 and 1.0"; /* evaluate and affect the confidenceLevel */ setConfidenceLevel(1.0 - pow(1.0 - p, static_cast(pointNumber_))); /* evaluate and affect the designPointVicinity_ */ setDesignPointVicinity(1.0 / (1.0 + accuracyLevel_ * deltaEpsilon_)); } /* the function that evaluates the HyperSphereSurfaceRatio (see documentation) */ Scalar StrongMaximumTest::computeHyperSphereSurfaceRatio() { const UnsignedInteger dimension = standardSpaceDesignPoint_.getDimension(); const Scalar a = acos((1.0 + deltaEpsilon_) / ( 1.0 + accuracyLevel_ * deltaEpsilon_) ); const Scalar sinA = sin(a); const Scalar squareSinA = sinA * sinA; Scalar sum = 0.0; /* even dimension */ if (dimension % 2 == 0) { const UnsignedInteger indexMax = dimension / 2 - 1; Scalar u = sinA; for (UnsignedInteger index = 0; index < indexMax; ++index) { sum += u; u *= (1.0 - 1.0 / (2.0 * index + 3.0)) * squareSinA; } /* M_1_PI = 1/PI cf cmath */ return M_1_PI * (a - cos(a) * sum); } else /* odd dimension */ { const UnsignedInteger indexMax = (dimension - 1) / 2; Scalar u = 1.0; for (UnsignedInteger index = 0; index < indexMax; ++index) { sum += u; u *= (1.0 - 1.0 / (2.0 * index + 2.0)) * squareSinA; } return 0.5 * (1.0 - cos(a) * sum); } } /* the function that evaluates the intermediate parameter delta_epsilon (see documentation) */ Scalar StrongMaximumTest::computeDeltaEpsilon() { /* evaluate the reliability index */ const Scalar betaSquare = standardSpaceDesignPoint_.normSquare(); /* get the input distribution in the standard space */ const DistributionImplementation::Implementation p_inputStandardDistribution(event_.getImplementation()->getAntecedent()->getDistribution().getImplementation()); /* evaluate the generator at beta square */ const Scalar pdfMin = importanceLevel_ * p_inputStandardDistribution->computeDensityGenerator(betaSquare); /* research the interval [deltaMin deltaMax] including the solution */ Scalar deltaMax = 1.0; while ( p_inputStandardDistribution->computeDensityGenerator(betaSquare * pow(1.0 + deltaMax, 2)) > pdfMin ) ++deltaMax; Scalar deltaMin = deltaMax - 1.0; /* we proceed to the dichotomie on [deltaMin deltaMax] */ Scalar deltaMiddle = 0.0; const Scalar deltaEpsilon = ResourceMap::GetAsScalar( "StrongMaximumTest-DefaultDeltaPrecision" ); while ( (deltaMax - deltaMin) > deltaEpsilon ) { /* we evaluate the middle of [deltaMin deltaMax] */ deltaMiddle = 0.5 * (deltaMax + deltaMin); if( p_inputStandardDistribution->computeDensityGenerator(betaSquare * pow(1.0 + deltaMiddle, 2)) > pdfMin ) { deltaMin = deltaMiddle; } else { deltaMax = deltaMiddle; } } return 0.5 * (deltaMax + deltaMin); } /* the function that evaluate if a point is in the vicinity of the design point */ Bool StrongMaximumTest::isInTheVicinityOfTheDesignPoint(const Point & numericalPoint) { return (dot(numericalPoint, standardSpaceDesignPoint_) > numericalPoint.norm() * standardSpaceDesignPoint_.norm() * designPointVicinity_); } /* The function that runs the Strong Max Test */ void StrongMaximumTest::run() { /* prepare test parameters */ /* radius of the inner sphere */ const Scalar beta = standardSpaceDesignPoint_.norm(); /* radius of the sphere to be sampled */ const Scalar radius = beta * (1.0 + accuracyLevel_ * deltaEpsilon_); /* sample of the sphere */ const Sample sample(sampleSphere(radius, standardSpaceDesignPoint_.getDimension(), pointNumber_)); /* create a nearestPointChecker, in charge of the evaluation of the level function over the sample and to classify the points according to the operator and the threshold */ NearestPointChecker nearestPointChecker(event_.getImplementation()->getFunction(), event_.getOperator(), event_.getThreshold(), sample); /* access to the inverse isoprobabilistic transformation */ InverseIsoProbabilisticTransformation inverseIsoProbabilisticTransformation(event_.getImplementation()->getAntecedent()->getDistribution().getInverseIsoProbabilisticTransformation()); /* run test */ try { nearestPointChecker.run(); } catch(InvalidArgumentException & ex) { throw InvalidArgumentException(HERE) << ex; } catch(InternalException & ex) { throw InternalException(HERE) << ex; } /* get nearestPointChecker result */ NearestPointCheckerResult nearestPointCheckerResult(nearestPointChecker.getResult()); /* split the two samples according to the vicinity of the design point * everything is done in place, using the attributs of the class in order * to limit the memory usage */ nearDesignPointVerifyingEventPoints_ = nearestPointCheckerResult.getVerifyingConstraintPoints(); nearDesignPointVerifyingEventValues_ = nearestPointCheckerResult.getVerifyingConstraintValues(); UnsignedInteger sampleSize = nearDesignPointVerifyingEventPoints_.getSize(); /* If there is something to classify */ if (sampleSize > 0) { UnsignedInteger leftCounter = 0; UnsignedInteger rightCounter = sampleSize - 1; /* we sort among the nearDesignPointVerifyingEventPoints_ (ie which realise the event) the ones which are in the vicinity of the design point */ while (leftCounter < rightCounter) { if (isInTheVicinityOfTheDesignPoint(nearDesignPointVerifyingEventPoints_[leftCounter])) { /* we leave at the beginning of the sample all the points (and the corresponding values) in the vicinity of the design point */ ++leftCounter; } else { /* we put at the end of the sample all the points (and the corresponding values) not in the vicinity of the design point */ const Point point(nearDesignPointVerifyingEventPoints_[leftCounter]); const Point value(nearDesignPointVerifyingEventValues_[leftCounter]); nearDesignPointVerifyingEventPoints_[leftCounter] = nearDesignPointVerifyingEventPoints_[rightCounter]; nearDesignPointVerifyingEventValues_[leftCounter] = nearDesignPointVerifyingEventValues_[rightCounter]; nearDesignPointVerifyingEventPoints_[rightCounter] = point; nearDesignPointVerifyingEventValues_[rightCounter] = value; --rightCounter; } } /* At the end, we still have to check the point at the position leftCounter but without updating rightCounter, which might be already equals to 0 and then might try to become < 0 */ if (isInTheVicinityOfTheDesignPoint(nearDesignPointVerifyingEventPoints_[leftCounter])) ++leftCounter; /* substitute physical points to standard points */ nearDesignPointVerifyingEventPoints_ = inverseIsoProbabilisticTransformation(nearDesignPointVerifyingEventPoints_); /* we build the final two Samples (points, values) for each group */ /* we split the sortedVerifyingConstraintPoints and the sortedVerifyingConstraintValues in 2 Samples each : one with the left side (points in the vicinity of the design point) and the other with the right side (points not in the vicinity of the design point) */ if (leftCounter < sampleSize) { farDesignPointVerifyingEventPoints_ = nearDesignPointVerifyingEventPoints_.split(leftCounter); farDesignPointVerifyingEventValues_ = nearDesignPointVerifyingEventValues_.split(leftCounter); } } /* we do the same thing for points which violate the constraints (ie which don't realise the event) */ farDesignPointViolatingEventPoints_ = nearestPointCheckerResult.getViolatingConstraintPoints(); farDesignPointViolatingEventValues_ = nearestPointCheckerResult.getViolatingConstraintValues(); sampleSize = farDesignPointViolatingEventPoints_.getSize(); /* If there is something to classify */ if (sampleSize > 0) { UnsignedInteger leftCounter = 0; UnsignedInteger rightCounter = sampleSize - 1; /* we sort among the nearDesignPointViolatingEventPoints_ (ie which realise the event) the ones which are in the vicinity of the design point */ while (leftCounter < rightCounter) { if (isInTheVicinityOfTheDesignPoint(farDesignPointViolatingEventPoints_[leftCounter])) { /* we put at the end of the sample all the points (and the corresponding values) not in the vicinity of the design point */ Point point(farDesignPointViolatingEventPoints_[leftCounter]); Point value(farDesignPointViolatingEventValues_[leftCounter]); farDesignPointViolatingEventPoints_[leftCounter] = farDesignPointViolatingEventPoints_[rightCounter]; farDesignPointViolatingEventValues_[leftCounter] = farDesignPointViolatingEventValues_[rightCounter]; farDesignPointViolatingEventPoints_[rightCounter] = point; farDesignPointViolatingEventValues_[rightCounter] = value; --rightCounter; } else { /* we leave at the beginning of the sample all the points (and the corresponding values) in the vicinity of the design point */ ++leftCounter; } } /* At the end, we still have to check the point at the position leftCounter but without updating rightCounter, which should be already equals to 0 and then could try to become < 0 */ if (!isInTheVicinityOfTheDesignPoint(farDesignPointViolatingEventPoints_[leftCounter])) ++leftCounter; /* substitute physical points to standard points */ farDesignPointViolatingEventPoints_ = inverseIsoProbabilisticTransformation(farDesignPointViolatingEventPoints_); /* we build the final two Samples (points, values) for each group */ /* we split the sortedViolatingConstraintPoints and the sortedViolatingConstraintValues in 2 Samples each : one with the left side (points in the vicinity of the design point) and the other with the right side (points not in the vicinity of the design point) */ if (leftCounter < sampleSize) { nearDesignPointViolatingEventPoints_ = farDesignPointViolatingEventPoints_.split(leftCounter); nearDesignPointViolatingEventValues_ = farDesignPointViolatingEventValues_.split(leftCounter); } } } /* the function that samples the sphere (radius) with N points */ Sample StrongMaximumTest::sampleSphere(const Scalar radius, const UnsignedInteger dimension, const UnsignedInteger pointNumber) const { // First, generate a sample of a standard normal distribution of the proper size and dimension const Normal standardNormal(dimension); Sample sample(standardNormal.getSample(pointNumber)); // Then, normalize the points to have length radius for (UnsignedInteger i = 0; i < pointNumber; ++i) { Scalar norm = static_cast(sample[i]).norm(); // If the point is the origin, we reject it while (norm == 0.0) { sample[i] = standardNormal.getRealization(); norm = Point(sample[i]).norm(); } sample[i] *= (radius / norm); } // The normalize sample follow the uniform distribution over the hypersphere return sample; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/000077500000000000000000000000001307543307100253315ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/Analytical.hxx000066400000000000000000000062121307543307100301440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Analytical implements an algorithm to find the design point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ANALYTICAL_HXX #define OPENTURNS_ANALYTICAL_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Collection.hxx" #include "openturns/Event.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/Graph.hxx" #include "openturns/Description.hxx" #include "openturns/AnalyticalResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Analytical * Analytical implements an algorithm to find the design point * and computes the results of an analytical result */ class OT_API Analytical : public PersistentObject { CLASSNAME; public: typedef Collection Sensitivity; /** Constructor with parameters */ Analytical(const OptimizationAlgorithm & solver, const Event & compositeEvent, const Point & physicalStartingPoint); /** Virtual constructor */ virtual Analytical * clone() const; /** Physical starting point accessor */ Point getPhysicalStartingPoint() const; /** Physical starting point accessor */ void setPhysicalStartingPoint(const Point & physicalStartingPoint); /** Event accessor */ Event getEvent() const; /** Event accessor */ void setEvent(const Event & event); /** OptimizationAlgorithm accessor */ OptimizationAlgorithm getNearestPointAlgorithm() const; /** OptimizationAlgorithm accessor */ void setNearestPointAlgorithm(const OptimizationAlgorithm & solver); /** Result accessor */ virtual AnalyticalResult getAnalyticalResult() const; /** String converter */ String __repr__() const; /** Performs the actual computation. */ virtual void run(); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** For save/load mechanism*/ Analytical() {}; friend class Factory; private: OptimizationAlgorithm nearestPointAlgorithm_; Event event_; Point physicalStartingPoint_; AnalyticalResult result_; } ; /* class Analytical */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ANALYTICAL_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/AnalyticalResult.hxx000066400000000000000000000144411307543307100313460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief AnalyticalResult implements an algorithm to find the design point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ANALYTICALRESULT_HXX #define OPENTURNS_ANALYTICALRESULT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Collection.hxx" #include "openturns/Event.hxx" #include "openturns/Graph.hxx" #include "openturns/Description.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/OptimizationResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AnalyticalResult * AnalyticalResult stores the Analytical result */ class OT_API AnalyticalResult : public PersistentObject { CLASSNAME; public: typedef Collection GraphCollection; typedef Collection PointCollection; typedef Collection PointWithDescriptionCollection; typedef PointWithDescriptionCollection Sensitivity; typedef enum {ELLIPTICAL = 0, CLASSICAL, PHYSICAL} ImportanceFactorType; /** Standard constructor */ AnalyticalResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace); /* Default constructor (required by SWIG :-<) */ AnalyticalResult(); /** Virtual constructor */ virtual AnalyticalResult * clone() const; /** StandardSpaceDesignPoint accessor */ Point getStandardSpaceDesignPoint() const; /** PhysicalSpaceDesignPoint accessor */ void setStandardSpaceDesignPoint(const Point & standardSpaceDesignPoint); /** PhysicalSpaceDesignPoint accessor */ Point getPhysicalSpaceDesignPoint() const; /** LimitStateVariable accessor */ Event getLimitStateVariable() const; /** IsStandardPointOriginInFailureSpace accessor */ Bool getIsStandardPointOriginInFailureSpace() const; /** IsStandardPointOriginInFailureSpace accessor */ void setIsStandardPointOriginInFailureSpace(const Bool isStandardPointOriginInFailureSpace); /** Mean point conditioned to the standard event realization accessor */ Point getMeanPointInStandardEventDomain() const; void setMeanPointInStandardEventDomain(const Point & meanPointInStandardEventDomain); /** ImportanceFactors accessor */ PointWithDescription getImportanceFactors(const ImportanceFactorType type = ELLIPTICAL) const; /** ImportanceFactors graph */ Graph drawImportanceFactors(const ImportanceFactorType type = ELLIPTICAL) const; /** HasoferReliabilityIndex accessor */ Scalar getHasoferReliabilityIndex() const; /** HasoferReliabilityIndexSensitivity accessor */ Sensitivity getHasoferReliabilityIndexSensitivity() const; /** Optimization result accessors */ OptimizationResult getOptimizationResult() const; void setOptimizationResult(const OptimizationResult & optimizationResult); /** HasoferReliabilityIndexSensitivitygraph */ GraphCollection drawHasoferReliabilityIndexSensitivity(Scalar width = ResourceMap::GetAsScalar( "AnalyticalResult-DefaultWidth" )) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Sensitivitygraph */ Graph drawSensitivity(const Sensitivity & sensitivity, const Scalar width) const; private: /** PhysicalSpaceDesignPoint evaluation */ void computePhysicalSpaceDesignPoint() const; /** HasoferReliabilityIndex evaluation */ void computeHasoferReliabilityIndex() const; /** ImportanceFactors evaluation */ void computeImportanceFactors() const; /** ImportanceFactors evaluation */ void computeClassicalImportanceFactors() const; /** Physical importance factors evaluation */ void computePhysicalImportanceFactors() const; /** HasoferReliabilityIndexSensitivity evaluation */ void computeHasoferReliabilityIndexSensitivity() const; /** MeanPointInStandardEventDomain evaluation */ void computeMeanPointInStandardEventDomain() const; /** PhysicalSpaceDesignPoint accessor */ void setPhysicalSpaceDesignPoint(const Point & physicalSpaceDesignPoint); /** HasoferReliabilityIndex accessor */ void setHasoferReliabilityIndex(const Scalar & hasoferReliabilityIndex); /** Returns the position of the given (value, name) into the Point or the dimension of the Point if failed */ UnsignedInteger computePosition(const String & marginalName, const String & marginalParameterName, const Description & parameterSetNames) const; Point standardSpaceDesignPoint_; mutable Point physicalSpaceDesignPoint_; Event limitStateVariable_; Bool isStandardPointOriginInFailureSpace_; mutable Scalar hasoferReliabilityIndex_; mutable PointWithDescription importanceFactors_; mutable PointWithDescription classicalImportanceFactors_; mutable PointWithDescription physicalImportanceFactors_; mutable Sensitivity hasoferReliabilityIndexSensitivity_; mutable Point meanPointInStandardEventDomain_; mutable Bool isAlreadyComputedImportanceFactors_; mutable Bool isAlreadyComputedClassicalImportanceFactors_; mutable Bool isAlreadyComputedPhysicalImportanceFactors_; mutable Bool isAlreadyComputedHasoferReliabilityIndexSensitivity_; mutable Bool isAlreadyComputedMeanPointInStandardEventDomain_; OptimizationResult optimizationResult_; }; // class AnalyticalResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ANALYTICALRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/FORM.hxx000066400000000000000000000041031307543307100266230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief FORM implements the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FORM_HXX #define OPENTURNS_FORM_HXX #include "openturns/Analytical.hxx" #include "openturns/FORMResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FORM * FORM implements the First Order Reliability Method * and compute the results of such kind of analyses */ class OT_API FORM : public Analytical { CLASSNAME; public: /** Default constructor */ FORM(); /** Constructor with parameters */ FORM(const OptimizationAlgorithm & nearestPointAlgorithm, const Event & event, const Point & physicalStartingPoint); /** Virtual constructor */ virtual FORM * clone() const; /** Result accessor */ FORMResult getResult() const; /** Result accessor */ void setResult(const FORMResult & formResult); /** String converter */ String __repr__() const; /** Function that computes the design point by re-using the Analytical::run() and creates a FORM::Result */ void run(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: FORMResult formResult_; } ; /* class FORM */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FORM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/FORMResult.hxx000066400000000000000000000062771307543307100300400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief FORMResult implements the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FORMRESULT_HXX #define OPENTURNS_FORMRESULT_HXX #include "openturns/AnalyticalResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FORMResult * FORMResult stores the FORM result */ class OT_API FORMResult: public AnalyticalResult { CLASSNAME; public: /** Standard constructor */ FORMResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace); /* Default constructor */ FORMResult(); /** Virtual constructor */ virtual FORMResult * clone() const; /** EventProbability accessor */ Scalar getEventProbability() const; /** GeneralisedReliabilityIndex accessor */ Scalar getGeneralisedReliabilityIndex() const; /** EventProbabilitySensitivity accessor */ Sensitivity getEventProbabilitySensitivity() const; /** HasoferReliabilityIndexSensitivitygraph */ GraphCollection drawEventProbabilitySensitivity(Scalar width = ResourceMap::GetAsScalar("AnalyticalResult-DefaultWidth")) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** The function that actually evaluates the event probability with FORM approximation */ void computeEventProbability() const; /** The function that actually evaluates the generalised reliability index with FORM approximation */ void computeGeneralisedReliabilityIndex() const; /** The function that actually evaluates the event probability sensitivity with FORM approximation */ void computeEventProbabilitySensitivity() const; /** EventProbability accessor */ void setEventProbability(const Scalar & eventProbability); /** GeneralisedReliabilityIndex accessor */ void setGeneralisedReliabilityIndex(const Scalar & generalisedReliabilityIndex); /** EventProbabilitySensitivity accessor */ void setEventProbabilitySensitivity(const Sensitivity & eventProbabilitySensitivity); mutable Scalar eventProbability_; mutable Scalar generalisedReliabilityIndex_; mutable Sensitivity eventProbabilitySensitivity_; mutable Bool isAlreadyComputedEventProbabilitySensitivity_; }; // class FORMResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FORMRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/OTAnalytical.hxx000066400000000000000000000023211307543307100304040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Analytical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTANALYTICAL_HXX #define OPENTURNS_OTANALYTICAL_HXX #include "openturns/Analytical.hxx" #include "openturns/AnalyticalResult.hxx" #include "openturns/StrongMaximumTest.hxx" #include "openturns/FORM.hxx" #include "openturns/FORMResult.hxx" #include "openturns/SORM.hxx" #include "openturns/SORMResult.hxx" #endif /* OPENTURNS_OTANALYTICAL_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/SORM.hxx000066400000000000000000000042561307543307100266510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SORM implements the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SORM_HXX #define OPENTURNS_SORM_HXX #include "openturns/Analytical.hxx" #include "openturns/Event.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Distribution.hxx" #include "openturns/SORMResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SORM * SORM implements the Second Order Reliability Method * and compute the results of such kind of analyses */ class OT_API SORM : public Analytical { CLASSNAME; public: /** Default constructor */ SORM(); /** Constructor with parameters */ SORM(const OptimizationAlgorithm & nearestPointAlgorithm, const Event & event, const Point & physicalStartingPoint); /** Virtual constructor */ virtual SORM * clone() const; /** Result accessor */ SORMResult getResult() const; /** Result accessor */ void setResult(const SORMResult & sormResult); /** String converter */ String __repr__() const; /** Function that computes the design point by re-using the Analytical::run() and creates a SORM::Result */ void run(); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: SORMResult sormResult_; } ; /* class SORM */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SORM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/SORMResult.hxx000066400000000000000000000070361307543307100300470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SORMResult implements the First Order Reliability Method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SORMResult_HXX #define OPENTURNS_SORMResult_HXX #include "openturns/AnalyticalResult.hxx" #include "openturns/Event.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SORMResult * SORMResult stores the SORM result */ class OT_API SORMResult: public AnalyticalResult { CLASSNAME; public: /** Standard constructor */ SORMResult(const Point & standardSpaceDesignPoint, const Event & limitStateVariable, const Bool isStandardPointOriginInFailureSpace); /* Default constructor (required by SWIG :-<) */ SORMResult(); /** Virtual constructor */ virtual SORMResult * clone() const; /** EventProbabilityBreitung accessor */ Scalar getEventProbabilityBreitung() const; /** EventProbabilityHohenBichler accessor */ Scalar getEventProbabilityHohenBichler() const; /** EventProbabilityTvedt accessor */ Scalar getEventProbabilityTvedt() const; /** GeneralisedReliabilityIndexBreitung accessor */ Scalar getGeneralisedReliabilityIndexBreitung() const; /** GeneralisedReliabilityIndexHohenBichler accessor */ Scalar getGeneralisedReliabilityIndexHohenBichler() const; /** GeneralisedReliabilityIndexTvedt accessor */ Scalar getGeneralisedReliabilityIndexTvedt() const; /** SortedCurvatures accessor */ Point getSortedCurvatures() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** the function that evaluates the curvatures of the standard limite state fucntion at the standard design point */ void computeSortedCurvatures() const; /** type of gradients and hessian attributes are due to the constraint : limitStateVariable is scalar only in Open Turns v std */ /** It should be a SymmetricMatrix but there is a bug in linear algebra with these matrices */ SquareMatrix hessianLimitStateFunction_; Point gradientLimitStateFunction_; mutable Point sortedCurvatures_; mutable Bool isAlreadyComputedSortedCurvatures_; mutable Scalar eventProbabilityBreitung_; mutable Scalar eventProbabilityHohenBichler_; mutable Scalar eventProbabilityTvedt_; mutable Scalar generalisedReliabilityIndexBreitung_; mutable Scalar generalisedReliabilityIndexHohenBichler_; mutable Scalar generalisedReliabilityIndexTvedt_; Distribution standardDistribution_; Distribution standardMarginal_; }; // class Result END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SORMResult_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Analytical/openturns/StrongMaximumTest.hxx000066400000000000000000000136701307543307100315430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StrongMaxTest implements an algorithm to check if a given design point * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STRONGMAXTEST_HXX #define OPENTURNS_STRONGMAXTEST_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StrongMaximumTest * StrongMaximumTest allows to validate a design point */ class OT_API StrongMaximumTest : public PersistentObject { CLASSNAME; public: /** Default constructor */ StrongMaximumTest(); /** Standard constructor */ StrongMaximumTest(const StandardEvent & event, const Point & standardSpaceDesignPoint, const Scalar importanceLevel, const Scalar accuracyLevel, const Scalar confidenceLevel); /** Standard constructor */ StrongMaximumTest(const StandardEvent & event, const Point & standardSpaceDesignPoint, const Scalar importanceLevel, const Scalar accuracyLevel, const UnsignedInteger pointNumber); /** Virtual constructor */ virtual StrongMaximumTest * clone() const; /** standardSpaceDesignPoint accessor */ Point getStandardSpaceDesignPoint() const; /** Event accessor */ StandardEvent getEvent() const; /** ImportanceLevel accessor */ Scalar getImportanceLevel() const; /** AccuracyLevel accessor */ Scalar getAccuracyLevel() const; /** ConfidenceLevel accessor */ Scalar getConfidenceLevel() const; /** DesignPointVicinity accessor */ Scalar getDesignPointVicinity() const; /** PointNumber accessor */ UnsignedInteger getPointNumber() const; /** DeltaEpsilon accessor */ Scalar getDeltaEpsilon() const; /** The function that runs the Strong Max Test */ void run(); /** NearDesignPointVerifyingEventPoints accessor */ Sample getNearDesignPointVerifyingEventPoints() const; /** FarDesignPointVerifyingEventPoints accessor */ Sample getFarDesignPointVerifyingEventPoints() const; /** NearDesignPointViolatingEventPoints accessor */ Sample getNearDesignPointViolatingEventPoints() const; /** FarDesignPointViolatingEventPoints accessor */ Sample getFarDesignPointViolatingEventPoints() const; /** NearDesignPointVerifyingEventValues accessor */ Sample getNearDesignPointVerifyingEventValues() const; /** FarDesignPointVerifyingEventValues accessor */ Sample getFarDesignPointVerifyingEventValues() const; /** NearDesignPointViolatingEventValues accessor */ Sample getNearDesignPointViolatingEventValues() const; /** FarDesignPointViolatingEventValues accessor */ Sample getFarDesignPointViolatingEventValues() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** AccuracyLevel accessor */ void setAccuracyLevel(const Scalar accuracyLevel); /** ConfidenceLevel accessor */ void setConfidenceLevel( const Scalar confidenceLevel); /** PointNumber accessor */ void setPointNumber(const UnsignedInteger pointNumber); /** ImportanceLevel accessor */ void setImportanceLevel(const Scalar importanceLevel); /** standardSpaceDesignPoint accessor */ void setStandardSpaceDesignPoint(const Point & standardSpaceDesignPoint ); /** DesignPointVicinity accessor */ void setDesignPointVicinity(const Scalar designPointVicinity); /** Event accessor */ void setEvent(const StandardEvent & event); /** Initialize Strong Max Test Parameters : method 1 */ void initializeParametersGivenConfidenceLevel(); /** Initialize Strong Max Test Parameters : method 2 */ void initializeParametersGivenPointNumber(); /** the function that samples the sphere (radius) with N points */ Sample sampleSphere(const Scalar radius, const UnsignedInteger dimension, const UnsignedInteger pointNumber) const; /** the function that evaluates the HyperSphereSurfaceRatio (see documentation) */ Scalar computeHyperSphereSurfaceRatio(); /** the function that evaluates delta_epsilon (see documentation) */ Scalar computeDeltaEpsilon(); /** the function that evaluates if a point is in the vicinity of the design point */ Bool isInTheVicinityOfTheDesignPoint(const Point & numericalPoint); StandardEvent event_; Point standardSpaceDesignPoint_; Scalar importanceLevel_; Scalar accuracyLevel_; Scalar confidenceLevel_; Scalar designPointVicinity_; // cosinus of the cone around the standard design point UnsignedInteger pointNumber_; Scalar deltaEpsilon_; Sample nearDesignPointVerifyingEventPoints_; Sample nearDesignPointVerifyingEventValues_; Sample farDesignPointVerifyingEventPoints_; Sample farDesignPointVerifyingEventValues_; Sample nearDesignPointViolatingEventPoints_; Sample nearDesignPointViolatingEventValues_; Sample farDesignPointViolatingEventPoints_; Sample farDesignPointViolatingEventValues_; }; // class StrongMaximumTest END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STRONGMAXTEST_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/CMakeLists.txt000066400000000000000000000011341307543307100237520ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (TaylorExpansionMoments.cxx) ot_install_header_file (TaylorExpansionMoments.hxx) ot_install_header_file (OTAlgorithm.hxx) # Recurse in subdirectories add_subdirectory (Analytical) add_subdirectory (Classification) add_subdirectory (MetaModel) add_subdirectory (Optimization) add_subdirectory (OrthogonalBasis) add_subdirectory (Sensitivity) add_subdirectory (Simulation) add_subdirectory (Transformation) add_subdirectory (WeightedExperiments) openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/000077500000000000000000000000001307543307100241465ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/CMakeLists.txt000066400000000000000000000004221307543307100267040ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (MixtureClassifier.cxx) ot_install_header_file (OTClassification.hxx) ot_install_header_file (MixtureClassifier.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/MixtureClassifier.cxx000066400000000000000000000120421307543307100303330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Associate to a given point its class index * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MixtureClassifier.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MixtureClassifier); static const Factory Factory_MixtureClassifier; /* Default constructor */ MixtureClassifier::MixtureClassifier() : ClassifierImplementation() { // Nothing to do } /* Default constructor */ MixtureClassifier::MixtureClassifier(const Mixture & mixture) : ClassifierImplementation() , mixture_(mixture) { // Nothing to do } /* Virtual constructor */ MixtureClassifier * MixtureClassifier::clone() const { return new MixtureClassifier( *this ); } /* String converter */ String MixtureClassifier::__repr__() const { return OSS() << "class=" << GetClassName() << " mixture=" << mixture_; } /* Associate a set of points to a class */ UnsignedInteger MixtureClassifier::classify(const Point& inP) const { if (inP.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the point to classify has dimension=" << inP.getDimension() << " but the classifier expects dimension=" << mixture_.getDimension(); const UnsignedInteger size = mixture_.getDistributionCollection().getSize(); UnsignedInteger bestClass = 0; Distribution atom(mixture_.getDistributionCollection()[0]); Scalar bestGrade = log(atom.getWeight()) + atom.computeLogPDF(inP); for (UnsignedInteger classIndex = 1; classIndex < size; ++classIndex) { atom = mixture_.getDistributionCollection()[classIndex]; const Scalar gradeValue = log(atom.getWeight()) + atom.computeLogPDF(inP); if (gradeValue > bestGrade) { bestClass = classIndex; bestGrade = gradeValue; } } return bestClass; } Indices MixtureClassifier::classifySequential(const Sample & inS) const { const UnsignedInteger mixtureSize = mixture_.getDistributionCollection().getSize(); const UnsignedInteger size = inS.getSize(); Point logWeights(mixtureSize); Sample atomsLogPDF(mixtureSize, size); // The expansive part: the computation of the log-PDF, here we benefit // from possible parallelism in computeLogPDF() for each atom for (UnsignedInteger classIndex = 0; classIndex < mixtureSize; ++classIndex) { const Distribution atom(mixture_.getDistributionCollection()[classIndex]); atomsLogPDF[classIndex] = atom.computeLogPDF(inS).getImplementation()->getData(); logWeights[classIndex] = std::log(atom.getWeight()); } // Now grade the points // The outer loop is on the classes and the inner loop on the point to // benefit from data locality Point bestGrades(size, -SpecFunc::MaxScalar); Indices bestClasses(size); for (UnsignedInteger classIndex = 0; classIndex < mixtureSize; ++classIndex) { for (UnsignedInteger i = 0; i < size; ++i) { const Scalar grade = logWeights[classIndex] + atomsLogPDF[classIndex][i]; if (grade > bestGrades[i]) { bestGrades[i] = grade; bestClasses[i] = classIndex; } // grade > bestGrades[i] } // for i } // for classIndex return bestClasses; } Scalar MixtureClassifier::grade(const Point& inP, const UnsignedInteger outC) const { const UnsignedInteger size = mixture_.getDistributionCollection().getSize(); if (outC >= size) throw InvalidDimensionException(HERE) << "Class number (=" << outC << ") must be lower than size (=" << size << ")."; return log(mixture_.getDistributionCollection()[outC].getWeight()) + mixture_.getDistributionCollection()[outC].computeLogPDF( inP ); } /* Mixture accessors */ Mixture MixtureClassifier::getMixture() const { return mixture_; } void MixtureClassifier::setMixture(const Mixture & mixture) { mixture_ = mixture; } /* Dimension accessor */ UnsignedInteger MixtureClassifier::getDimension() const { return mixture_.getDimension(); } /* Method save() stores the object through the StorageManager */ void MixtureClassifier::save(Advocate & adv) const { ClassifierImplementation::save(adv); adv.saveAttribute( "mixture_", mixture_ ); } /* Method load() reloads the object from the StorageManager */ void MixtureClassifier::load(Advocate & adv) { ClassifierImplementation::load(adv); adv.loadAttribute( "mixture_", mixture_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/openturns/000077500000000000000000000000001307543307100262035ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/openturns/MixtureClassifier.hxx000066400000000000000000000045741307543307100324100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief K-Fold cross validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MIXTURECLASSIFIER_HXX #define OPENTURNS_MIXTURECLASSIFIER_HXX #include "openturns/Mixture.hxx" #include "openturns/ClassifierImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MixtureClassifier * * Associate to a given point its class index */ class OT_API MixtureClassifier : public ClassifierImplementation { CLASSNAME; public: /** Parameters constructor */ MixtureClassifier(); /** Default constructor */ MixtureClassifier(const Mixture & mixture); /** Virtual constructor */ virtual MixtureClassifier * clone() const; /** String converter */ virtual String __repr__() const; /** Associate a point to a class */ using ClassifierImplementation::classify; virtual UnsignedInteger classify(const Point & inP) const; private: Indices classifySequential(const Sample & inS) const; public: /** Grade a point as if it were associated to a class */ virtual Scalar grade(const Point & inP, const UnsignedInteger outC) const; /** Mixture accessors */ Mixture getMixture() const; void setMixture(const Mixture & mixture); /** Dimension accessor */ UnsignedInteger getDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The mixture that defines the MixtureClassifier */ Mixture mixture_; }; /* class MixtureClassifier */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MIXTURECLASSIFIER_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Classification/openturns/OTClassification.hxx000066400000000000000000000020171307543307100321320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Classification * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTCLASSIFICATION_HXX #define OPENTURNS_OTCLASSIFICATION_HXX #include "openturns/MixtureClassifier.hxx" #endif /* OPENTURNS_OTCLASSIFICATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/000077500000000000000000000000001307543307100230625ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/CMakeLists.txt000066400000000000000000000011071307543307100256210ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (MetaModelResult.cxx) ot_add_source_file (MetaModelAlgorithm.cxx) ot_add_source_file (MetaModelValidation.cxx) ot_install_header_file (MetaModelResult.hxx) ot_install_header_file (MetaModelAlgorithm.hxx) ot_install_header_file (MetaModelValidation.hxx) ot_install_header_file (OTMetaModel.hxx) # Recurse in subdirectories add_subdirectory (FunctionalChaos) add_subdirectory (Kriging) add_subdirectory (TensorApproximation) openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/000077500000000000000000000000001307543307100261425ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/AdaptiveStrategy.cxx000066400000000000000000000061671307543307100321600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for adaptive strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AdaptiveStrategy.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/FixedStrategy.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AdaptiveStrategy); /* Constructor from an orthogonal basis */ AdaptiveStrategy::AdaptiveStrategy() : TypedInterfaceObject(new AdaptiveStrategyImplementation) { // Nothing to do } /* Constructor from an orthogonal basis */ AdaptiveStrategy::AdaptiveStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension) : TypedInterfaceObject(new FixedStrategy(basis, maximumDimension)) { // Nothing to do } /* Constructor from implementation */ AdaptiveStrategy::AdaptiveStrategy(const AdaptiveStrategyImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Basis accessor */ OrthogonalBasis AdaptiveStrategy::getBasis() const { return getImplementation()->getBasis(); } /* Maximum dimension accessor */ void AdaptiveStrategy::setMaximumDimension(const UnsignedInteger maximumDimension) { copyOnWrite(); getImplementation()->setMaximumDimension(maximumDimension); } UnsignedInteger AdaptiveStrategy::getMaximumDimension() const { return getImplementation()->getMaximumDimension(); } /* Compute initial basis for the approximation */ void AdaptiveStrategy::computeInitialBasis() { getImplementation()->computeInitialBasis(); } /* Update the basis for the next iteration of approximation */ void AdaptiveStrategy::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError) { getImplementation()->updateBasis(alpha_k, residual, relativeError); } /* Psi accessor */ AdaptiveStrategy::FunctionCollection AdaptiveStrategy::getPsi() const { return getImplementation()->getPsi(); } /* String converter */ String AdaptiveStrategy::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String AdaptiveStrategy::__str__(const String & offset) const { return __repr__(); } END_NAMESPACE_OPENTURNS AdaptiveStrategyImplementation.cxx000066400000000000000000000073361307543307100350060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos// -*- C++ -*- /** * @brief This is a abstract class for adaptive strategy implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AdaptiveStrategyImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AdaptiveStrategyImplementation); static const Factory Factory_AdaptiveStrategyImplementation; /* Default constructor */ AdaptiveStrategyImplementation::AdaptiveStrategyImplementation() : PersistentObject(), basis_(), maximumDimension_(0), I_p_(0), addedPsi_k_ranks_(0), conservedPsi_k_ranks_(0), removedPsi_k_ranks_(0), Psi_k_p_(0) { // Nothing to do } /* Constructor from an orthogonal basis */ AdaptiveStrategyImplementation::AdaptiveStrategyImplementation(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension) : PersistentObject(), basis_(basis), maximumDimension_(maximumDimension), I_p_(0), addedPsi_k_ranks_(0), conservedPsi_k_ranks_(0), removedPsi_k_ranks_(0), Psi_k_p_(0) { // Nothing to do } /* Virtual constructor */ AdaptiveStrategyImplementation * AdaptiveStrategyImplementation::clone() const { return new AdaptiveStrategyImplementation(*this); } /* String converter */ String AdaptiveStrategyImplementation::__repr__() const { return OSS() << "class=" << GetClassName() << " maximumDimension=" << maximumDimension_; } /* Basis accessor */ OrthogonalBasis AdaptiveStrategyImplementation::getBasis() const { return basis_; } /* Maximum dimension accessor */ void AdaptiveStrategyImplementation::setMaximumDimension(const UnsignedInteger maximumDimension) { maximumDimension_ = maximumDimension; } UnsignedInteger AdaptiveStrategyImplementation::getMaximumDimension() const { return maximumDimension_; } /* Compute initial basis for the approximation */ void AdaptiveStrategyImplementation::computeInitialBasis() { throw NotYetImplementedException(HERE) << "In AdaptiveStrategyImplementation::computeInitialBasis()"; } /* Update the basis for the next iteration of approximation */ void AdaptiveStrategyImplementation::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError) { throw NotYetImplementedException(HERE) << "In AdaptiveStrategyImplementation::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError)"; } /* Psi accessor */ AdaptiveStrategyImplementation::FunctionCollection AdaptiveStrategyImplementation::getPsi() const { return Psi_k_p_; } /* Method save() stores the object through the StorageManager */ void AdaptiveStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "basis_", basis_ ); } /* Method load() reloads the object from the StorageManager */ void AdaptiveStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "basis_", basis_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/CMakeLists.txt000066400000000000000000000023471307543307100307100ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (AdaptiveStrategy.cxx) ot_add_source_file (AdaptiveStrategyImplementation.cxx) ot_add_source_file (FixedStrategy.cxx) ot_add_source_file (FunctionalChaosAlgorithm.cxx) ot_add_source_file (FunctionalChaosResult.cxx) ot_add_source_file (ProjectionStrategy.cxx) ot_add_source_file (ProjectionStrategyImplementation.cxx) ot_add_source_file (LeastSquaresStrategy.cxx) ot_add_source_file (IntegrationStrategy.cxx) ot_add_source_file (SequentialStrategy.cxx) ot_add_source_file (CleaningStrategy.cxx) ot_install_header_file (SequentialStrategy.hxx) ot_install_header_file (IntegrationStrategy.hxx) ot_install_header_file (FixedStrategy.hxx) ot_install_header_file (ProjectionStrategyImplementation.hxx) ot_install_header_file (LeastSquaresStrategy.hxx) ot_install_header_file (FunctionalChaosAlgorithm.hxx) ot_install_header_file (OTFunctionalChaos.hxx) ot_install_header_file (AdaptiveStrategyImplementation.hxx) ot_install_header_file (ProjectionStrategy.hxx) ot_install_header_file (CleaningStrategy.hxx) ot_install_header_file (FunctionalChaosResult.hxx) ot_install_header_file (AdaptiveStrategy.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/CleaningStrategy.cxx000066400000000000000000000256721307543307100321450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation returning the set of polynomials in sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CleaningStrategy.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CleaningStrategy); typedef Collection ScalarCollection; static const Factory Factory_CleaningStrategy; /* Default constructor */ CleaningStrategy::CleaningStrategy() : AdaptiveStrategyImplementation() , currentVectorIndex_(0) , maximumSize_(0) , significanceFactor_(0.0) , verbose_(false) { // Nothing to do } /* Constructor from an orthogonal basis */ CleaningStrategy::CleaningStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const Bool verbose) : AdaptiveStrategyImplementation(basis, maximumDimension) , currentVectorIndex_(0) , maximumSize_(ResourceMap::GetAsUnsignedInteger( "CleaningStrategy-DefaultMaximumSize" )) , significanceFactor_(ResourceMap::GetAsScalar( "CleaningStrategy-DefaultSignificanceFactor" )) , verbose_(verbose) { // Nothing to do } /* Constructor from an orthogonal basis */ CleaningStrategy::CleaningStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const UnsignedInteger maximumSize, const Scalar significanceFactor, const Bool verbose) : AdaptiveStrategyImplementation(basis, maximumDimension) , currentVectorIndex_(0) , maximumSize_(maximumSize) , significanceFactor_(significanceFactor) , verbose_(verbose) { // Nothing to do } /* Compute initial basis for the approximation */ void CleaningStrategy::computeInitialBasis() { // Start with the first set of vectors const UnsignedInteger size = std::min(maximumSize_, maximumDimension_); Psi_k_p_ = FunctionCollection(size); I_p_ = Indices(size); I_p_.fill(); for (UnsignedInteger i = 0; i < size; ++i) Psi_k_p_[i] = basis_.build(i); addedPsi_k_ranks_ = Indices(I_p_.getSize()); addedPsi_k_ranks_.fill(); removedPsi_k_ranks_ = Indices(0); conservedPsi_k_ranks_ = Indices(0); currentVectorIndex_ = size; } /* Update the basis for the next iteration of approximation */ void CleaningStrategy::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError) { // The dimension will be adapted, so it is not const UnsignedInteger dimension = alpha_k.getSize(); ScalarCollection coefficients(alpha_k.getCollection()); if (verbose_) { LOGINFO(OSS() << "initial state:"); LOGINFO(OSS() << " vector index=" << currentVectorIndex_); LOGINFO(OSS() << " coeffs size=" << coefficients.getSize()); LOGINFO(OSS() << " coeffs =" << coefficients); LOGINFO(OSS() << " I_p size=" << I_p_.getSize()); LOGINFO(OSS() << " I_p =" << I_p_); } removedPsi_k_ranks_ = Indices(0); conservedPsi_k_ranks_ = Indices(I_p_.getSize()); conservedPsi_k_ranks_.fill(); ScalarCollection removedCoefficients(0); // We do the cleaning based on a variance criterion, so we must exclude the first coefficient from the cleaning as it is only related to the mean. As a result, there is nothing to do if we have just one coefficient. if (dimension > 1) { // We keep at most maximumSize_ elements, the ones that have the largest magnitude and have a magnitude larger or equal to maximumMagnitude * significanceFactor // First, find the extrem magnitudes. Scalar largest = std::abs(coefficients[1]); Scalar smallest = largest; Scalar secondSmallest = smallest; UnsignedInteger rankSmallest = 1; for (UnsignedInteger i = 2; i < dimension; ++i) { const Scalar tmp = std::abs(coefficients[i]); if (tmp > largest) largest = tmp; if (tmp < smallest) { secondSmallest = smallest; smallest = tmp; rankSmallest = i; } } // Search for the extrems // Second, if the coefficient list is too large (it can be by only one term), remove the smallest term to free a place for the next vector. UnsignedInteger shift = 0; if ((dimension > maximumSize_) && (currentVectorIndex_ < maximumDimension_)) { // Add the smallest element to the removed list removedPsi_k_ranks_.add(rankSmallest); if (verbose_) removedCoefficients.add(coefficients[rankSmallest]); // Compact Psi_k_p_ and I_p_ Psi_k_p_.erase(Psi_k_p_.begin() + rankSmallest); I_p_.erase(I_p_.begin() + rankSmallest); coefficients.erase(coefficients.begin() + rankSmallest); if (verbose_) { LOGINFO(OSS() << "intermediate state:"); LOGINFO(OSS() << " coeffs size=" << coefficients.getSize()); LOGINFO(OSS() << " coeffs =" << coefficients); LOGINFO(OSS() << " rem coeffs =" << removedCoefficients); LOGINFO(OSS() << " I_p size=" << I_p_.getSize()); LOGINFO(OSS() << " I_p =" << I_p_); } // The smallest remaining element is now the second smallest one smallest = secondSmallest; dimension = maximumSize_; shift = 1; } // Too much elements // Now, Psi_k_p_ contains at most maximumSize_ elements, associated with the coefficients the largest in magnitude // Third, remove all the elements with a magnitude less than largest * significanceFactor_ // Quick rejection test: nothing to do if smallest >= largest * significanceFactor_ if (smallest < largest * significanceFactor_) { UnsignedInteger currentIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { if (std::abs(coefficients[i]) >= largest * significanceFactor_) { Psi_k_p_[currentIndex] = Psi_k_p_[i]; I_p_[currentIndex] = I_p_[i]; if (verbose_) coefficients[currentIndex] = coefficients[i]; ++currentIndex; } // Keep the current vector else { // Remove the vector // As the removedPsi_k_ranks_ stores the indices of the removed vectors in the *previous* partial basis Psi_k_p_, // we must keep track to any shift in the indices // If there is no shift, use directly the current counter if (shift == 0) removedPsi_k_ranks_.add(i); // else we must take the shift into account else { // If we are stricly before the index of the smallest coefficient, no shift if (i < rankSmallest) removedPsi_k_ranks_.add(i); // Else take the shift into account else removedPsi_k_ranks_.add(i + shift); } if (verbose_) removedCoefficients.add(coefficients[i]); } // Remove the vector } // Loop over the coefficients Psi_k_p_.resize(currentIndex); I_p_.resize(currentIndex); if (verbose_) coefficients.resize(currentIndex); } // Cleaning step // At this step, I_p_ stores all the indices that are common between the previous partial basis and the one being built // Remove the ranks of the deleted vectors from the list of conserved vectors // First, sort the ranks of the deleted vectors in ascending order std::sort(removedPsi_k_ranks_.begin(), removedPsi_k_ranks_.end()); // Second, remove them from end to start to avoid shift in the conservedPsi_k_ranks_ values for (UnsignedInteger i = removedPsi_k_ranks_.getSize(); i > 0; --i) conservedPsi_k_ranks_.erase(conservedPsi_k_ranks_.begin() + removedPsi_k_ranks_[i - 1]); } // If dimension > 1 // If we have not generated all the vectors, go to the next one if (currentVectorIndex_ < maximumDimension_) { const Function newVector(basis_.build(currentVectorIndex_)); Psi_k_p_.add(newVector); I_p_.add(currentVectorIndex_); addedPsi_k_ranks_ = Indices(1, I_p_.getSize() - 1); ++currentVectorIndex_; } // Another vector has been added else { addedPsi_k_ranks_ = Indices(0); } // No more vector to add if (verbose_) { LOGINFO(OSS() << "final state:"); LOGINFO(OSS() << " vector index=" << currentVectorIndex_ << " / " << maximumDimension_ << " (" << 0.1 * int((1000.0 * currentVectorIndex_) / maximumDimension_) << "%)"); LOGINFO(OSS() << " coeffs size=" << coefficients.getSize()); LOGINFO(OSS() << " coeffs =" << coefficients); LOGINFO(OSS() << " rem coeffs =" << removedCoefficients); LOGINFO(OSS() << " I_p size=" << I_p_.getSize()); LOGINFO(OSS() << " I_p =" << I_p_); } } /* Virtual constructor */ CleaningStrategy * CleaningStrategy::clone() const { return new CleaningStrategy(*this); } /* String converter */ String CleaningStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " maximum size=" << maximumSize_ << " significance factor=" << significanceFactor_ << " derived from " << AdaptiveStrategyImplementation::__repr__(); } /* Current vector index accessor */ UnsignedInteger CleaningStrategy::getCurrentVectorIndex() const { return currentVectorIndex_; } /* Maximum size accessor */ UnsignedInteger CleaningStrategy::getMaximumSize() const { return maximumSize_; } void CleaningStrategy::setMaximumSize(const UnsignedInteger maximumSize) { maximumSize_ = maximumSize; } /* Significance factor */ Scalar CleaningStrategy::getSignificanceFactor() const { return significanceFactor_; } void CleaningStrategy::setSignificanceFactor(const Scalar significanceFactor) { significanceFactor_ = significanceFactor; } /* Verbosity accessor */ Bool CleaningStrategy::getVerbose() const { return verbose_; } void CleaningStrategy::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Method save() stores the object through the StorageManager */ void CleaningStrategy::save(Advocate & adv) const { AdaptiveStrategyImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void CleaningStrategy::load(Advocate & adv) { AdaptiveStrategyImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/FixedStrategy.cxx000066400000000000000000000061301307543307100314500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation directly returning the full set of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FixedStrategy.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FixedStrategy); static const Factory Factory_FixedStrategy; /* Default constructor */ FixedStrategy::FixedStrategy() : AdaptiveStrategyImplementation() { // Nothing to do } /* Constructor from an orthogonal basis */ FixedStrategy::FixedStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension) : AdaptiveStrategyImplementation(basis, maximumDimension) { // Nothing to do } /* Compute initial basis for the approximation */ void FixedStrategy::computeInitialBasis() { if (Psi_k_p_.getSize() == 0) { Psi_k_p_ = FunctionCollection(maximumDimension_); for (UnsignedInteger i = 0; i < maximumDimension_; ++i) { LOGINFO(OSS() << "Build function " << i << " over " << maximumDimension_ - 1); Psi_k_p_[i] = basis_.build(i); } } I_p_ = Indices(maximumDimension_); I_p_.fill(); addedPsi_k_ranks_ = Indices(maximumDimension_); addedPsi_k_ranks_.fill(); removedPsi_k_ranks_ = Indices(0); conservedPsi_k_ranks_ = Indices(0); } /* Update the basis for the next iteration of approximation */ void FixedStrategy::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError) { // No change to the basis in the fixed strategy addedPsi_k_ranks_ = Indices(0); removedPsi_k_ranks_ = Indices(0); conservedPsi_k_ranks_ = Indices(I_p_.getSize()); conservedPsi_k_ranks_.fill(); } /* Virtual constructor */ FixedStrategy * FixedStrategy::clone() const { return new FixedStrategy(*this); } /* String converter */ String FixedStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " derived from " << AdaptiveStrategyImplementation::__repr__(); } /* Method save() stores the object through the StorageManager */ void FixedStrategy::save(Advocate & adv) const { AdaptiveStrategyImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void FixedStrategy::load(Advocate & adv) { AdaptiveStrategyImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/FunctionalChaosAlgorithm.cxx000066400000000000000000000512641307543307100336250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building chaos expansions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/FunctionalChaosAlgorithm.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Point.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/DatabaseFunction.hxx" #include "openturns/FixedStrategy.hxx" #include "openturns/CleaningStrategy.hxx" #include "openturns/FixedExperiment.hxx" #include "openturns/LeastSquaresStrategy.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/HyperbolicAnisotropicEnumerateFunction.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/OrthogonalProductPolynomialFactory.hxx" #include "openturns/KernelSmoothing.hxx" #include "openturns/NormalCopulaFactory.hxx" #include "openturns/UserDefined.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/StandardDistributionPolynomialFactory.hxx" #include "openturns/LeastSquaresMetaModelSelectionFactory.hxx" #include "openturns/LARS.hxx" #include "openturns/KFold.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" #include "openturns/FittingTest.hxx" #include "openturns/DistributionTransformation.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection FunctionCollection; CLASSNAMEINIT(FunctionalChaosAlgorithm); static const Factory Factory_FunctionalChaosAlgorithm; /* Default constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm() : MetaModelAlgorithm() , adaptiveStrategy_(FixedStrategy(OrthogonalProductPolynomialFactory(), 0)) , projectionStrategy_(LeastSquaresStrategy()) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Nothing to do } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Function & model, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy) : MetaModelAlgorithm( distribution, model ) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(projectionStrategy) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Nothing to do } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy) : MetaModelAlgorithm(distribution, DatabaseFunction(inputSample, outputSample, false)) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(projectionStrategy) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; // Overwrite the content of the projection strategy with the given data projectionStrategy_.getImplementation()->inputSample_ = inputSample; projectionStrategy_.getImplementation()->measure_ = UserDefined(inputSample); projectionStrategy_.getImplementation()->weights_ = Point(inputSample.getSize(), 1.0 / inputSample.getSize()); projectionStrategy_.getImplementation()->weightedExperiment_ = FixedExperiment(inputSample); projectionStrategy_.getImplementation()->outputSample_ = outputSample; } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Sample & inputSample, const Point & weights, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy) : MetaModelAlgorithm(distribution, DatabaseFunction(inputSample, outputSample, false)) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(projectionStrategy) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; // Overwrite the content of the projection strategy with the given data projectionStrategy_.getImplementation()->inputSample_ = inputSample; projectionStrategy_.getImplementation()->measure_ = UserDefined(inputSample); projectionStrategy_.getImplementation()->weights_ = weights; projectionStrategy_.getImplementation()->weightedExperiment_ = FixedExperiment(inputSample, weights); projectionStrategy_.getImplementation()->outputSample_ = outputSample; } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Function & model, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy) : MetaModelAlgorithm( distribution, model ) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(LeastSquaresStrategy()) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Nothing to do } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy) : MetaModelAlgorithm(distribution, DatabaseFunction(inputSample, outputSample, false)) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(LeastSquaresStrategy(inputSample, outputSample)) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample) : MetaModelAlgorithm(Distribution(), DatabaseFunction(inputSample, outputSample, false)) , adaptiveStrategy_() , projectionStrategy_() , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; // Recover the distribution, taking into account that we look for performance // so we avoid to rebuild expensive distributions as much as possible const UnsignedInteger inputDimension = inputSample.getDimension(); Collection< Distribution > marginals(inputDimension); Collection< OrthogonalUniVariatePolynomialFamily > polynomials(inputDimension); // The strategy is to test first a Uniform distribution, then a Normal distribution, then a kernel smoothing for the marginals KernelSmoothing ks; Collection< DistributionFactory > factories(DistributionFactory::GetContinuousUniVariateFactories()); LOGINFO("In FunctionalChaosAlgorithm, identify marginal distributions"); const Description inputDescription(inputSample.getDescription()); for (UnsignedInteger i = 0; i < inputDimension; ++i) { TestResult bestResult; // Here we remove the duplicate entries in the marginal sample using the automatic compaction of the support in the UserDefined class const Sample marginalSample(UserDefined(inputSample.getMarginal(i)).getSupport()); const Distribution candidate(FittingTest::BestModelKolmogorov(marginalSample, factories, bestResult)); // This threshold is somewhat arbitrary. It is here to avoid expensive kernel smoothing. if (bestResult.getPValue() > ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-PValueThreshold")) marginals[i] = candidate; else marginals[i] = ks.build(marginalSample.getMarginal(i)); marginals[i].setDescription(Description(1, inputDescription[i])); LOGINFO(OSS() << "In FunctionalChaosAlgorithm constructor, selected distribution for marginal " << i << "=" << marginals[i]); polynomials[i] = StandardDistributionPolynomialFactory(marginals[i]); } // For the dependence structure, we test first the independent copula, then the normal copula, but not a non-parametric copula as the penalty on the meta-model evaluation speed is most of the time prohibitive setDistribution(ComposedDistribution(marginals, NormalCopulaFactory().build(inputSample))); const HyperbolicAnisotropicEnumerateFunction enumerate(inputDimension, ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-QNorm" )); OrthogonalProductPolynomialFactory basis(polynomials, enumerate); const UnsignedInteger maximumTotalDegree = ResourceMap::GetAsUnsignedInteger( "FunctionalChaosAlgorithm-MaximumTotalDegree" ); // For small sample size, use sparse regression LOGINFO("In FunctionalChaosAlgorithm, select adaptive strategy"); if (inputSample.getSize() < ResourceMap::GetAsUnsignedInteger( "FunctionalChaosAlgorithm-SmallSampleSize" )) { projectionStrategy_ = LeastSquaresStrategy(inputSample, outputSample, LeastSquaresMetaModelSelectionFactory(LARS(), KFold())); LOGINFO(OSS() << "In FunctionalChaosAlgorithm, selected a sparse chaos expansion based on LARS and KFold for a total degree of " << maximumTotalDegree); } // Small sample else if (inputSample.getSize() < ResourceMap::GetAsUnsignedInteger( "FunctionalChaosAlgorithm-LargeSampleSize" )) { projectionStrategy_ = LeastSquaresStrategy(inputSample, outputSample, LeastSquaresMetaModelSelectionFactory(LARS(), CorrectedLeaveOneOut())); LOGINFO(OSS() << "In FunctionalChaosAlgorithm, selected a sparse chaos expansion based on LARS and CorrectedLeaveOneOut for a total degree of " << maximumTotalDegree); } // Medium sample else { projectionStrategy_ = LeastSquaresStrategy(inputSample, outputSample); LOGINFO(OSS() << "In FunctionalChaosAlgorithm, selected a chaos expansion based on FixedStrategy for a total degree of " << maximumTotalDegree); } // Large sample const UnsignedInteger totalSize = enumerate.getStrataCumulatedCardinal(maximumTotalDegree); adaptiveStrategy_ = FixedStrategy(basis, totalSize); } /* Constructor */ FunctionalChaosAlgorithm::FunctionalChaosAlgorithm(const Sample & inputSample, const Point & weights, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy) : MetaModelAlgorithm(distribution, DatabaseFunction(inputSample, outputSample, false)) , adaptiveStrategy_(adaptiveStrategy) , projectionStrategy_(LeastSquaresStrategy(inputSample, weights, outputSample)) , maximumResidual_(ResourceMap::GetAsScalar( "FunctionalChaosAlgorithm-DefaultMaximumResidual" )) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; } /* Virtual constructor */ FunctionalChaosAlgorithm * FunctionalChaosAlgorithm::clone() const { return new FunctionalChaosAlgorithm(*this); } /* String converter */ String FunctionalChaosAlgorithm::__repr__() const { return OSS() << "class=" << getClassName(); } /* Maximum residual accessors */ void FunctionalChaosAlgorithm::setMaximumResidual(Scalar residual) { maximumResidual_ = residual; } Scalar FunctionalChaosAlgorithm::getMaximumResidual() const { return maximumResidual_; } /* Projection strategy accessor */ void FunctionalChaosAlgorithm::setProjectionStrategy(const ProjectionStrategy & projectionStrategy) { projectionStrategy_ = projectionStrategy; } ProjectionStrategy FunctionalChaosAlgorithm::getProjectionStrategy() const { return projectionStrategy_; } AdaptiveStrategy FunctionalChaosAlgorithm::getAdaptiveStrategy() const { return adaptiveStrategy_; } /* Computes the functional chaos */ void FunctionalChaosAlgorithm::run() { const UnsignedInteger outputDimension = model_.getOutputDimension(); // Get the measure upon which the orthogonal basis is built const OrthogonalBasis basis(adaptiveStrategy_.getImplementation()->basis_); const Distribution measure(basis.getMeasure()); // Correct the measure of the projection strategy if no input sample const Bool databaseProjection = projectionStrategy_.getImplementation()->inputSample_.getSize() > 0; if (!databaseProjection) projectionStrategy_.setMeasure(measure); // First, compute all the parts that are independent of the marginal output // Create the isoprobabilistic transformation // We have two distributions here: // + The distribution of the input, called distribution_ // + The distribution defining the inner product in basis, called measure // The projection is done on the basis, ie wrt measure_, so we have to // introduce an isoprobabilistic transformation that maps distribution_ onto // measure // const DistributionTransformation transformation(distribution_, measure); transformation_ = transformation; inverseTransformation_ = transformation.inverse(); // Build the composed model g = f o T^{-1}, which is a function of Z so it can be decomposed upon an orthonormal basis based on Z distribution LOGINFO("Transform the input sample in the measure space if needed"); const Bool noTransformation = (measure == distribution_); if (noTransformation) composedModel_ = model_; else composedModel_ = ComposedFunction(model_, inverseTransformation_); // If the input and output databases have already been given to the projection strategy, transport them to the measure space const Sample initialInputSample(projectionStrategy_.getImplementation()->inputSample_); if (databaseProjection && !noTransformation) projectionStrategy_.getImplementation()->inputSample_ = transformation_(initialInputSample); // Second, compute the results for each marginal output and merge // these marginal results. // As all the components have been projected using the same basis, // the representation is a linear combination of selected multivariate // polynomials with vector coefficients // We build the coefficients of the combination. As some indices may be // missing, we have to take care of the different sparsity patterns Point residuals(outputDimension); Point relativeErrors(outputDimension); std::map coefficientsMap; for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++outputIndex) { LOGINFO(OSS() << "Work on output marginal " << outputIndex << " over " << outputDimension - 1); Indices marginalIndices; Point marginalAlpha_k; Scalar marginalResidual = -1.0; Scalar marginalRelativeError = -1.0; // Compute the indices, the coefficients, the residual and the relative error of the current marginal output runMarginal(outputIndex, marginalIndices, marginalAlpha_k, marginalResidual, marginalRelativeError); residuals[outputIndex] = marginalResidual; relativeErrors[outputIndex] = marginalRelativeError; for (UnsignedInteger j = 0; j < marginalIndices.getSize(); ++j) { // Deal only with non-zero coefficients const Scalar marginalAlpha_kj = marginalAlpha_k[j]; // To avoid -0.0 if (std::abs(marginalAlpha_kj) != 0.0) { // Current index in the decomposition of the current marginal output const UnsignedInteger index = marginalIndices[j]; // If the current index is not in the map, create it if (coefficientsMap.find(index) == coefficientsMap.end()) coefficientsMap[index] = Point(outputDimension, 0.0); // Add the current scalar coefficient to the corresponding component of the vectorial coefficient coefficientsMap[index][outputIndex] = marginalAlpha_kj; } } // Loop over the marginal indices } // Loop over the output dimension // At this point, the map contains all the associations (index, vector coefficient). It remains to present these data into the proper form and to build the associated partial basis std::map::iterator iter; // Full set of indices Indices I_k(0); // Full set of vectorial coefficients Sample alpha_k(0, outputDimension); // Full set of partial basis functions. FunctionCollection Psi_k(0); for (iter = coefficientsMap.begin(); iter != coefficientsMap.end(); ++iter) { const UnsignedInteger i = iter->first; const Point currentCoefficient(iter->second); I_k.add(i); alpha_k.add(currentCoefficient); // We could reuse the function Psi_k.add(basis.build(i)); } // Build the result result_ = FunctionalChaosResult(model_, distribution_, transformation_, inverseTransformation_, composedModel_, basis, I_k, alpha_k, Psi_k, residuals, relativeErrors); // Restore the initial input sample // If it was not empty, it was given by the user if (initialInputSample.getSize() > 0) projectionStrategy_.getImplementation()->inputSample_ = initialInputSample; // else it has been produced in the measure space, convert it into the physical space else projectionStrategy_.getImplementation()->inputSample_ = inverseTransformation_(projectionStrategy_.getImplementation()->inputSample_); } /* Marginal computation */ void FunctionalChaosAlgorithm::runMarginal(const UnsignedInteger marginalIndex, Indices & indices, Point & coefficients, Scalar & residual, Scalar & relativeError) { // Initialize the projection basis Phi_k_p_ and I_p_ LOGINFO("Compute the initial basis"); adaptiveStrategy_.computeInitialBasis(); do { LOGINFO("Compute the coefficients"); projectionStrategy_.computeCoefficients(composedModel_, *adaptiveStrategy_.getImplementation()->basis_.getImplementation(), adaptiveStrategy_.getImplementation()->I_p_, adaptiveStrategy_.getImplementation()->addedPsi_k_ranks_, adaptiveStrategy_.getImplementation()->conservedPsi_k_ranks_, adaptiveStrategy_.getImplementation()->removedPsi_k_ranks_, marginalIndex); // The basis is adapted under the following conditions: // + the current residual is small enough // + the adaptive strategy has no more vector to propose if (projectionStrategy_.getImplementation()->residual_p_ < maximumResidual_) { LOGINFO("Stop on small residual"); indices = adaptiveStrategy_.getImplementation()->I_p_; coefficients = projectionStrategy_.getImplementation()->alpha_k_p_; residual = projectionStrategy_.getImplementation()->residual_p_; relativeError = projectionStrategy_.getImplementation()->relativeError_p_; return; } LOGINFO("Adapt the basis"); adaptiveStrategy_.updateBasis(projectionStrategy_.getImplementation()->alpha_k_p_, projectionStrategy_.getImplementation()->residual_p_, projectionStrategy_.getImplementation()->relativeError_p_); } // Check if there is still something to do while ((adaptiveStrategy_.getImplementation()->addedPsi_k_ranks_.getSize() > 0) || (adaptiveStrategy_.getImplementation()->removedPsi_k_ranks_.getSize() > 0)); LOGINFO("No more basis adaptation"); indices = adaptiveStrategy_.getImplementation()->I_p_; coefficients = projectionStrategy_.getImplementation()->alpha_k_p_; residual = projectionStrategy_.getImplementation()->residual_p_; relativeError = projectionStrategy_.getImplementation()->relativeError_p_; } /* Get the functional chaos result */ FunctionalChaosResult FunctionalChaosAlgorithm::getResult() const { return result_; } Sample FunctionalChaosAlgorithm::getInputSample() const { return projectionStrategy_.getInputSample(); } Sample FunctionalChaosAlgorithm::getOutputSample() const { return projectionStrategy_.getOutputSample(); } /* Method save() stores the object through the StorageManager */ void FunctionalChaosAlgorithm::save(Advocate & adv) const { MetaModelAlgorithm::save(adv); adv.saveAttribute( "maximumResidual_", maximumResidual_ ); adv.saveAttribute( "result_", result_ ); } /* Method load() reloads the object from the StorageManager */ void FunctionalChaosAlgorithm::load(Advocate & adv) { MetaModelAlgorithm::load(adv); adv.loadAttribute( "maximumResidual_", maximumResidual_ ); adv.loadAttribute( "result_", result_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/FunctionalChaosResult.cxx000066400000000000000000000140631307543307100331510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The result of a chaos expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FunctionalChaosResult.hxx" #include "openturns/Os.hxx" #include "openturns/OSS.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/DualLinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionalChaosResult); static const Factory Factory_FunctionalChaosResult; /* Default constructor */ FunctionalChaosResult::FunctionalChaosResult() : MetaModelResult() , distribution_() , transformation_() , inverseTransformation_() , composedModel_() , orthogonalBasis_() , I_(0) , alpha_k_(0, 0) , Psi_k_(0) { // Nothing to do } /* Default constructor */ FunctionalChaosResult::FunctionalChaosResult(const Function & model, const Distribution & distribution, const Function & transformation, const Function & inverseTransformation, const Function & composedModel, const OrthogonalBasis & orthogonalBasis, const Indices & I, const Sample & alpha_k, const FunctionCollection & Psi_k, const Point & residuals, const Point & relativeErrors) : MetaModelResult(model, Function(), residuals, relativeErrors) , distribution_(distribution) , transformation_(transformation) , inverseTransformation_(inverseTransformation) , composedModel_(composedModel) , orthogonalBasis_(orthogonalBasis) , I_(I) , alpha_k_(alpha_k) , Psi_k_(Psi_k) , composedMetaModel_() { // The composed meta model will be a dual linear combination composedMetaModel_ = DualLinearCombinationFunction(Psi_k, alpha_k); if (transformation.getEvaluation()->getClassName() == "IdentityEvaluation") metaModel_ = composedMetaModel_; else metaModel_ = ComposedFunction(composedMetaModel_, transformation); } /* Virtual constructor */ FunctionalChaosResult * FunctionalChaosResult::clone() const { return new FunctionalChaosResult(*this); } /* String converter */ String FunctionalChaosResult::__repr__() const { return OSS(true) << "class=" << getClassName() << " derived from " << MetaModelResult::__repr__() << " distribution=" << distribution_ << " transformation=" << transformation_ << " inverseTransformation=" << inverseTransformation_ << " composedModel=" << composedModel_ << " orthogonalBasis=" << orthogonalBasis_ << " indices=" << I_ << " coefficients=" << alpha_k_ << " reduced basis=" << Psi_k_ << " residuals=" << residuals_ << " relativeErrors=" << relativeErrors_ << " composedMetaModel=" << composedMetaModel_ << " metaModel=" << metaModel_; } String FunctionalChaosResult::__str__(const String & offset) const { OSS oss(false); oss << offset << "meta model=" << metaModel_ << Os::GetEndOfLine(); oss << offset << "orthogonal basis=" << orthogonalBasis_; return oss; } /* Distribution accessor */ Distribution FunctionalChaosResult::getDistribution() const { return distribution_; } /* IsoProbabilisticTransformation accessor */ Function FunctionalChaosResult::getTransformation() const { return transformation_; } /* InverseIsoProbabilisticTransformation accessor */ Function FunctionalChaosResult::getInverseTransformation() const { return inverseTransformation_; } /* Composed model accessor */ Function FunctionalChaosResult::getComposedModel() const { return composedModel_; } /* Orthogonal basis accessor */ OrthogonalBasis FunctionalChaosResult::getOrthogonalBasis() const { return orthogonalBasis_; } /* Indices accessor */ Indices FunctionalChaosResult::getIndices() const { return I_; } /* Coefficients accessor */ Sample FunctionalChaosResult::getCoefficients() const { return alpha_k_; } /* Reduced basis accessor */ FunctionalChaosResult::FunctionCollection FunctionalChaosResult::getReducedBasis() const { return Psi_k_; } /* Composed meta model accessor */ Function FunctionalChaosResult::getComposedMetaModel() const { return composedMetaModel_; } /* Method save() stores the object through the StorageManager */ void FunctionalChaosResult::save(Advocate & adv) const { MetaModelResult::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "transformation_", transformation_ ); adv.saveAttribute( "inverseTransformation_", inverseTransformation_ ); adv.saveAttribute( "composedModel_", composedModel_ ); adv.saveAttribute( "orthogonalBasis_", orthogonalBasis_ ); adv.saveAttribute( "I_", I_ ); adv.saveAttribute( "alpha_k_", alpha_k_ ); adv.saveAttribute( "Psi_k_", Psi_k_ ); adv.saveAttribute( "composedMetaModel_", composedMetaModel_ ); } /* Method load() reloads the object from the StorageManager */ void FunctionalChaosResult::load(Advocate & adv) { MetaModelResult::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "transformation_", transformation_ ); adv.loadAttribute( "inverseTransformation_", inverseTransformation_ ); adv.loadAttribute( "composedModel_", composedModel_ ); adv.loadAttribute( "orthogonalBasis_", orthogonalBasis_ ); adv.loadAttribute( "I_", I_ ); adv.loadAttribute( "alpha_k_", alpha_k_ ); adv.loadAttribute( "Psi_k_", Psi_k_ ); adv.loadAttribute( "composedMetaModel_", composedMetaModel_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/IntegrationStrategy.cxx000066400000000000000000000160751307543307100327050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation of projection strategy as a leastSquares * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/IntegrationStrategy.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IntegrationStrategy); static const Factory Factory_IntegrationStrategy; /* Default constructor */ IntegrationStrategy::IntegrationStrategy() : ProjectionStrategyImplementation() { // Nothing to do } /* Parameter constructor */ IntegrationStrategy::IntegrationStrategy(const Distribution & measure) : ProjectionStrategyImplementation(measure) { // Nothing to do } /* Parameter constructor */ IntegrationStrategy::IntegrationStrategy(const WeightedExperiment & weightedExperiment) : ProjectionStrategyImplementation(weightedExperiment) { // Nothing to do } /* Parameter constructor */ IntegrationStrategy::IntegrationStrategy(const Distribution & measure, const WeightedExperiment & weightedExperiment) : ProjectionStrategyImplementation(measure, weightedExperiment) { // Nothing to do } /* Parameter constructor */ IntegrationStrategy::IntegrationStrategy(const Sample & inputSample, const Point & weights, const Sample & outputSample) : ProjectionStrategyImplementation(inputSample, weights, outputSample) { // Nothing to do } /* Parameter constructor */ IntegrationStrategy::IntegrationStrategy(const Sample & inputSample, const Sample & outputSample) : ProjectionStrategyImplementation(inputSample, Point(inputSample.getSize(), 1.0 / inputSample.getSize()), outputSample) { // Nothing to do } /* Virtual constructor */ IntegrationStrategy * IntegrationStrategy::clone() const { return new IntegrationStrategy(*this); } /* String converter */ String IntegrationStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " experiment=" << weightedExperiment_; } struct IntegrationStrategyCoefficientsPolicy { const Point & weightedOutput_; const Matrix & designMatrix_; const Indices & addedRanks_; Point & alpha_; IntegrationStrategyCoefficientsPolicy(const Point & weightedOutput, const Matrix & designMatrix, const Indices & addedRanks, Point & alpha) : weightedOutput_(weightedOutput) , designMatrix_(designMatrix) , addedRanks_(addedRanks) , alpha_(alpha) { // Nothing to do } inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger j = r.begin(); j != r.end(); ++j) { const UnsignedInteger indexAdded = addedRanks_[j]; Scalar result = 0.0; MatrixImplementation::const_iterator columnMatrix(designMatrix_.getImplementation()->begin() + indexAdded * designMatrix_.getNbRows()); for (Point::const_iterator outputSample = weightedOutput_.begin(); outputSample != weightedOutput_.end(); ++outputSample, ++columnMatrix) { result += (*outputSample) * (*columnMatrix); } // i alpha_[j] = result; } // j } // operator() }; /* end struct IntegrationStrategyCoefficientsPolicy */ /* Compute the components alpha_k_p_ by projecting the model on the partial L2 basis For the moment, there is no specific strategy for improving the approximation of the L2 integral by a finite sum: the same input sample is used for all the calls to this method */ void IntegrationStrategy::computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex) { // Check if the marginal index is not compatible with the function output dimension if (marginalIndex >= function.getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the marginal index is too large with respect to the function output dimension."; // If the input sample has not yet been generated // we have to generate it and to evaluate the model // upon this sample if (inputSample_.getSize() == 0) { LOGINFO("Generate output data"); inputSample_ = weightedExperiment_.generateWithWeights(weights_); outputSample_ = function(inputSample_); } // check if the proxy is initialized and if the given basis is the one in the proxy if (proxy_.getInputSample().getSize() == 0 || !(proxy_.getBasis() == basis)) { LOGINFO(OSS() << "Initialize the proxy, reason=" << (proxy_.getInputSample().getSize() == 0 ? "empty input sample" : "new basis")); proxy_ = DesignProxy(inputSample_, basis); } // First, copy the coefficients that are common with the previous partial basis Point alpha(0); const UnsignedInteger conservedSize = conservedRanks.getSize(); for (UnsignedInteger i = 0; i < conservedSize; ++i) alpha.add(alpha_k_p_[conservedRanks[i]]); // We have to compute the coefficients associated to the added indices const UnsignedInteger addedSize = addedRanks.getSize(); const UnsignedInteger sampleSize = inputSample_.getSize(); // Second, compute the coefficients of the new basis entries const Matrix designMatrix(proxy_.computeDesign(indices)); Point addedAlpha(addedSize, 0.0); Point weightedOutput(sampleSize); for (UnsignedInteger i = 0; i < sampleSize; ++i) weightedOutput[i] = weights_[i] * outputSample_[i][marginalIndex]; IntegrationStrategyCoefficientsPolicy policy(weightedOutput, designMatrix, addedRanks, addedAlpha); TBB::ParallelFor( 0, addedSize, policy ); alpha.add(addedAlpha); alpha_k_p_ = alpha; // The residual is the mean squared error between the model and the meta model residual_p_ = 0.0; const Point values(designMatrix * alpha_k_p_); for (UnsignedInteger i = 0; i < sampleSize; ++i) { const Scalar delta = outputSample_[i][marginalIndex] - values[i]; residual_p_ += delta * delta; } residual_p_ = sqrt(residual_p_) / sampleSize; relativeError_p_ = 0.0; } /* Method save() stores the object through the StorageManager */ void IntegrationStrategy::save(Advocate & adv) const { ProjectionStrategyImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void IntegrationStrategy::load(Advocate & adv) { ProjectionStrategyImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/LeastSquaresStrategy.cxx000066400000000000000000000145761307543307100330420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation of projection strategy as a leastSquares * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LeastSquaresStrategy.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/ApproximationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LeastSquaresStrategy); static const Factory Factory_LeastSquaresStrategy; /* Default constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation() , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Parameter constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const Distribution & measure, const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation(measure) , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Parameter constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const WeightedExperiment & weightedExperiment, const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation(weightedExperiment) , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Parameter constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const Distribution & measure, const WeightedExperiment & weightedExperiment, const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation(measure, weightedExperiment) , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Parameter constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const Sample & inputSample, const Point & weights, const Sample & outputSample, const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation(inputSample, weights, outputSample) , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Parameter constructor */ LeastSquaresStrategy::LeastSquaresStrategy(const Sample & inputSample, const Sample & outputSample, const ApproximationAlgorithmImplementationFactory & factory) : ProjectionStrategyImplementation(inputSample, Point(inputSample.getSize(), 1.0 / inputSample.getSize()), outputSample) , p_approximationAlgorithmImplementationFactory_( factory.clone() ) { // Nothing to do } /* Virtual constructor */ LeastSquaresStrategy * LeastSquaresStrategy::clone() const { return new LeastSquaresStrategy(*this); } /* String converter */ String LeastSquaresStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " experiment=" << weightedExperiment_; } /* Compute the components alpha_k_p_ by projecting the model on the partial L2 basis For the moment, there is no specific strategy for improving the approximation of the L2 integral by a finite sum: the same input sample is used for all the calls to this method */ void LeastSquaresStrategy::computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex) { // Check if the marginal index is not compatible with the function output dimension if (marginalIndex >= function.getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: the marginal index is too large with respect to the function output dimension."; // If the input sample has not yet been generated // we have to generate it and to evaluate the model // upon this sample if (inputSample_.getSize() == 0) { LOGINFO("Generate the weighted DOE"); inputSample_ = weightedExperiment_.generateWithWeights(weights_); LOGINFO("Evaluate the model on the DOE"); outputSample_ = function(inputSample_); } // check if the proxy is initialized and if the given basis is the one in the proxy if (proxy_.getInputSample().getSize() == 0 || !(proxy_.getBasis() == basis)) { LOGINFO(OSS() << "Initialize the proxy, reason=" << (proxy_.getInputSample().getSize() == 0 ? "empty input sample" : "new basis")); proxy_ = DesignProxy(inputSample_, basis); } // Run the Approximation Algorithm LOGINFO("Generate the approximation algorithm"); ApproximationAlgorithm approximationAlgorithm(p_approximationAlgorithmImplementationFactory_->build(inputSample_, outputSample_.getMarginal(marginalIndex), weights_, basis, indices)); LOGINFO("Run the approximation algorithm"); approximationAlgorithm.run(proxy_); LOGINFO("Exploit the approximation"); alpha_k_p_ = approximationAlgorithm.getCoefficients(); residual_p_ = approximationAlgorithm.getResidual(); relativeError_p_ = approximationAlgorithm.getRelativeError(); } /* Method save() stores the object through the StorageManager */ void LeastSquaresStrategy::save(Advocate & adv) const { ProjectionStrategyImplementation::save(adv); adv.saveAttribute( "p_approximationAlgorithmImplementationFactory_" , *p_approximationAlgorithmImplementationFactory_ ); } /* Method load() reloads the object from the StorageManager */ void LeastSquaresStrategy::load(Advocate & adv) { ProjectionStrategyImplementation::load(adv); ApproximationAlgorithmImplementationFactory approximationAlgorithmImplementationFactory; adv.loadAttribute( "p_approximationAlgorithmImplementationFactory_" , approximationAlgorithmImplementationFactory ); p_approximationAlgorithmImplementationFactory_ = approximationAlgorithmImplementationFactory.clone(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/ProjectionStrategy.cxx000066400000000000000000000073621307543307100325350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for projection strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProjectionStrategy.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProjectionStrategy); /* Default constructor */ ProjectionStrategy::ProjectionStrategy() : TypedInterfaceObject(new ProjectionStrategyImplementation) { // Nothing to do } /* Parameter constructor */ ProjectionStrategy::ProjectionStrategy(const Distribution & measure) : TypedInterfaceObject(new ProjectionStrategyImplementation(measure)) { // Nothing to do } /* Constructor from implementation */ ProjectionStrategy::ProjectionStrategy(const ProjectionStrategyImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Measure accessor */ void ProjectionStrategy::setMeasure(const Distribution & measure) { copyOnWrite(); getImplementation()->setMeasure(measure); } Distribution ProjectionStrategy::getMeasure() const { return getImplementation()->getMeasure(); } /* Experiment accessors */ void ProjectionStrategy::setExperiment(const WeightedExperiment & weightedExperiment) { copyOnWrite(); getImplementation()->setExperiment(weightedExperiment); } WeightedExperiment ProjectionStrategy::getExperiment() const { return getImplementation()->getExperiment(); } /* Sample accessors */ Sample ProjectionStrategy::getInputSample() const { return getImplementation()->getInputSample(); } Sample ProjectionStrategy::getOutputSample() const { return getImplementation()->getOutputSample(); } /* Weights accessor */ Point ProjectionStrategy::getWeights() const { return getImplementation()->getWeights(); } /* Residual accessor */ Scalar ProjectionStrategy::getResidual() const { return getImplementation()->getResidual(); } /* Relative error accessor */ Scalar ProjectionStrategy::getRelativeError() const { return getImplementation()->getRelativeError(); } /* Relative error accessor */ Point ProjectionStrategy::getCoefficients() const { return getImplementation()->getCoefficients(); } /* Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ void ProjectionStrategy::computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex) { getImplementation()->computeCoefficients(function, basis, indices, addedRanks, conservedRanks, removedRanks, marginalIndex); } /* String converter */ String ProjectionStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String ProjectionStrategy::__str__(const String & offset) const { return __repr__(); } END_NAMESPACE_OPENTURNS ProjectionStrategyImplementation.cxx000066400000000000000000000164661307543307100353710ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos// -*- C++ -*- /** * @brief This is a abstract class for projection strategy implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ProjectionStrategyImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MonteCarloExperiment.hxx" #include "openturns/FixedExperiment.hxx" #include "openturns/UserDefined.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProjectionStrategyImplementation); static const Factory Factory_ProjectionStrategyImplementation; /* Default constructor */ ProjectionStrategyImplementation::ProjectionStrategyImplementation() : PersistentObject() , alpha_k_p_(0) , residual_p_(0.0) , relativeError_p_(0.0) , measure_() , inputSample_(0, 0) , weights_(0) , outputSample_(0, 0) { // The ProjectionStrategyImplementation imposes its distribution to the weighted experiment weightedExperiment_.setDistribution(measure_); } /* Parameter constructor */ ProjectionStrategyImplementation::ProjectionStrategyImplementation(const Distribution & measure) : PersistentObject() , alpha_k_p_(0) , residual_p_(0.0) , relativeError_p_(0.0) , measure_(measure) , inputSample_(0, 0) , weights_(0) , outputSample_(0, 0) { // The ProjectionStrategyImplementation imposes the distribution of the weighted experiment weightedExperiment_.setDistribution(measure_); } /* Parameter constructor */ ProjectionStrategyImplementation::ProjectionStrategyImplementation(const WeightedExperiment & weightedExperiment) : PersistentObject() , alpha_k_p_(0) , residual_p_(0.0) , relativeError_p_(0.0) , measure_(weightedExperiment.getDistribution()) , weightedExperiment_(weightedExperiment) , inputSample_(0, 0) , weights_(0) , outputSample_(0, 0) { // Nothing to do } /* Parameter constructor */ ProjectionStrategyImplementation::ProjectionStrategyImplementation(const Sample & inputSample, const Point & weights, const Sample & outputSample) : PersistentObject() , alpha_k_p_(0) , residual_p_(0.0) , measure_(UserDefined(inputSample)) , weightedExperiment_(FixedExperiment(inputSample, weights)) , inputSample_(0, 0) , weights_(0) , outputSample_(0, 0) { if (inputSample.getSize() != weights.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot build a ProjectionStrategyImplementation with an input sample and weights of different size. Here, input sample size=" << inputSample.getSize() << ", weights size=" << weights.getSize(); if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot build a ProjectionStrategyImplementation with samples of different size. Here, input sample size=" << inputSample.getSize() << ", output sample size=" << outputSample.getSize(); if (inputSample.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a ProjectionStrategyImplementation with an input sample of dimension 0."; if (outputSample.getDimension() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a ProjectionStrategyImplementation with an output sample of dimension 0."; weights_ = weights; inputSample_ = inputSample; outputSample_ = outputSample; } /* Parameter constructor */ ProjectionStrategyImplementation::ProjectionStrategyImplementation(const Distribution & measure, const WeightedExperiment & weightedExperiment) : PersistentObject() , alpha_k_p_(0) , residual_p_(0.0) , relativeError_p_(0.0) , measure_(measure) , weightedExperiment_(weightedExperiment) , inputSample_(0, 0) , weights_(0) , outputSample_(0, 0) { // The ProjectionStrategyImplementation imposes the distribution of the weighted experiment weightedExperiment_.setDistribution(measure_); } /* Virtual constructor */ ProjectionStrategyImplementation * ProjectionStrategyImplementation::clone() const { return new ProjectionStrategyImplementation(*this); } /* String converter */ String ProjectionStrategyImplementation::__repr__() const { return OSS() << "class=" << GetClassName() << " measure=" << measure_; } /* Measure accessor */ void ProjectionStrategyImplementation::setMeasure(const Distribution & measure) { if (!(measure == measure_)) { measure_ = measure; // Set the measure as the distribution of the weighted experiment weightedExperiment_.setDistribution(measure); inputSample_ = Sample(0, 0); } } Distribution ProjectionStrategyImplementation::getMeasure() const { return measure_; } /* Experiment accessors */ void ProjectionStrategyImplementation::setExperiment(const WeightedExperiment & weightedExperiment) { if (!(weightedExperiment == weightedExperiment_)) { weightedExperiment_ = weightedExperiment; weightedExperiment_.setDistribution(getMeasure()); inputSample_ = Sample(0, 0); } } WeightedExperiment ProjectionStrategyImplementation::getExperiment() const { return weightedExperiment_; } /* Sample accessors */ Sample ProjectionStrategyImplementation::getInputSample() const { return inputSample_; } Sample ProjectionStrategyImplementation::getOutputSample() const { return outputSample_; } /* Weights accessor */ Point ProjectionStrategyImplementation::getWeights() const { return weights_; } /* Residual accessor */ Scalar ProjectionStrategyImplementation::getResidual() const { return residual_p_; } /* Relative error accessor */ Scalar ProjectionStrategyImplementation::getRelativeError() const { return relativeError_p_; } /* Relative error accessor */ Point ProjectionStrategyImplementation::getCoefficients() const { return alpha_k_p_; } /* Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ void ProjectionStrategyImplementation::computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex) { throw NotYetImplementedException(HERE) << "In ProjectionStrategyImplementation::computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex)"; } /* Method save() stores the object through the StorageManager */ void ProjectionStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void ProjectionStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/SequentialStrategy.cxx000066400000000000000000000103621307543307100325250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation returning the set of polynomials in sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SequentialStrategy.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SequentialStrategy); static const Factory Factory_SequentialStrategy; /* Default constructor */ SequentialStrategy::SequentialStrategy() : AdaptiveStrategyImplementation(), currentVectorIndex_(0) { // Nothing to do } /* Constructor from an orthogonal basis */ SequentialStrategy::SequentialStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const Bool verbose) : AdaptiveStrategyImplementation(basis, maximumDimension), currentVectorIndex_(0), verbose_(verbose) { // Nothing to do } /* Compute initial basis for the approximation */ void SequentialStrategy::computeInitialBasis() { // Start with the first vector currentVectorIndex_ = 0; Psi_k_p_ = FunctionCollection(1, basis_.build(currentVectorIndex_)); I_p_ = Indices(1, currentVectorIndex_); addedPsi_k_ranks_ = Indices(1, currentVectorIndex_); removedPsi_k_ranks_ = Indices(0); conservedPsi_k_ranks_ = Indices(0); ++currentVectorIndex_; } /* Update the basis for the next iteration of approximation */ void SequentialStrategy::updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError) { if (verbose_) { LOGINFO(OSS() << "initial state:"); LOGINFO(OSS() << " vector index=" << currentVectorIndex_); LOGINFO(OSS() << " coeffs size=" << alpha_k.getSize()); LOGINFO(OSS() << " coeffs =" << alpha_k); LOGINFO(OSS() << " I_p size=" << I_p_.getSize()); LOGINFO(OSS() << " I_p =" << I_p_); } // If we have not generated all the vectors, go to the next one // All the previous vectors are kept conservedPsi_k_ranks_ = Indices(I_p_.getSize()); conservedPsi_k_ranks_.fill(); if (currentVectorIndex_ < maximumDimension_) { const Function newVector(basis_.build(currentVectorIndex_)); Psi_k_p_.add(newVector); I_p_.add(currentVectorIndex_); addedPsi_k_ranks_ = Indices(1, currentVectorIndex_); ++currentVectorIndex_; } else { addedPsi_k_ranks_ = Indices(0); } // No vector is removed removedPsi_k_ranks_ = Indices(0); if (verbose_) { LOGINFO(OSS() << "final state:"); LOGINFO(OSS() << " vector index=" << currentVectorIndex_); LOGINFO(OSS() << " coeffs size=" << alpha_k.getSize()); LOGINFO(OSS() << " coeffs =" << alpha_k); LOGINFO(OSS() << " I_p size=" << I_p_.getSize()); LOGINFO(OSS() << " I_p =" << I_p_); } } /* Virtual constructor */ SequentialStrategy * SequentialStrategy::clone() const { return new SequentialStrategy(*this); } /* String converter */ String SequentialStrategy::__repr__() const { return OSS() << "class=" << getClassName() << " derived from " << AdaptiveStrategyImplementation::__repr__(); } /* Method save() stores the object through the StorageManager */ void SequentialStrategy::save(Advocate & adv) const { AdaptiveStrategyImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void SequentialStrategy::load(Advocate & adv) { AdaptiveStrategyImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns/000077500000000000000000000000001307543307100301775ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns/AdaptiveStrategy.hxx000066400000000000000000000047151307543307100342170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for adaptive strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ADAPTIVESTRATEGY_HXX #define OPENTURNS_ADAPTIVESTRATEGY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/AdaptiveStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AdaptiveStrategy * * This is the interface class for adaptive strategies */ class OT_API AdaptiveStrategy : public TypedInterfaceObject { CLASSNAME; public: typedef Collection FunctionCollection; /** Constructor from an orthogonal basis */ AdaptiveStrategy(); /** Constructor from an orthogonal basis */ AdaptiveStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension); /** Constructor from implementation */ AdaptiveStrategy(const AdaptiveStrategyImplementation & implementation); /** Maximum dimension accessor */ void setMaximumDimension(const UnsignedInteger maximumDimension); UnsignedInteger getMaximumDimension() const; /** Compute initial basis for the approximation */ void computeInitialBasis(); /** Update the basis for the next iteration of approximation */ void updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError); /** Basis accessor */ OrthogonalBasis getBasis() const; /** Psi accessor */ FunctionCollection getPsi() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; protected: private: } ; /* class AdaptiveStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ADAPTIVESTRATEGY_HXX */ AdaptiveStrategyImplementation.hxx000066400000000000000000000102101307543307100370310ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief This is a abstract class for adaptive strategy implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ADAPTIVESTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_ADAPTIVESTRATEGYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/OrthogonalBasis.hxx" #include "openturns/Point.hxx" #include "openturns/Indices.hxx" #include "openturns/Collection.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AdaptiveStrategyImplementation * * This is a abstract class for adaptive strategy implementations */ class OT_API AdaptiveStrategyImplementation : public PersistentObject { CLASSNAME; // Make the FunctionalChaosAlgorithm class a friend of the AdaptiveStrategyImplementation class // as this last class is in charge of managing data that are part of the FunctionalChaosAlgorithm // state friend class FunctionalChaosAlgorithm; // Make the ProjectionStrategyImplementation class a friend of the AdaptiveStrategyImplementation class // as this last class is in charge of data needed by the ProjectionStrategyImplementation to update the state of the FunctionalChaosAlgorithm class friend class ProjectionStrategyImplementation; public: typedef Collection FunctionCollection; /** Default constructor */ AdaptiveStrategyImplementation(); /** Constructor from an orthogonal basis */ AdaptiveStrategyImplementation(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension); /** Virtual constructor */ virtual AdaptiveStrategyImplementation * clone() const; /** Maximum dimension accessor */ void setMaximumDimension(const UnsignedInteger maximumDimension); UnsignedInteger getMaximumDimension() const; /** Compute initial basis for the approximation */ virtual void computeInitialBasis(); /** Update the basis for the next iteration of approximation */ virtual void updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError); /** String converter */ virtual String __repr__() const; /** Basis accessor */ OrthogonalBasis getBasis() const; /** Psi accessor */ FunctionCollection getPsi() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** The orthogonal basis */ OrthogonalBasis basis_; /** Maximum dimension of the basis to be generated */ UnsignedInteger maximumDimension_; /** The collection of indices of the vectors in the partial basis with respect to the orthogonal basis */ Indices I_p_; /** The ranks of the added vectors in the current partial basis */ Indices addedPsi_k_ranks_; /** The ranks of the vectors common between the previous partial basis and the current partial basis, as found in the previous partial basis */ Indices conservedPsi_k_ranks_; /** The ranks of the removed vectors in the previous partial basis */ Indices removedPsi_k_ranks_; /** The collection of vectors upon which we project the (composed) model */ FunctionCollection Psi_k_p_; private: } ; /* class AdaptiveStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ADAPTIVESTRATEGYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns/CleaningStrategy.hxx000066400000000000000000000063671307543307100342070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation returning the set of polynomials in sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLEANINGSTRATEGY_HXX #define OPENTURNS_CLEANINGSTRATEGY_HXX #include "openturns/AdaptiveStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CleaningStrategy * * An implementation returning the set of polynomials in sequence */ class OT_API CleaningStrategy : public AdaptiveStrategyImplementation { CLASSNAME; public: /** Constructor from an orthogonal basis */ CleaningStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const Bool verbose = false); /** Constructor from an orthogonal basis */ CleaningStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const UnsignedInteger maximumSize, const Scalar significanceFactor, const Bool verbose = false); /** Virtual constructor */ virtual CleaningStrategy * clone() const; /** Compute initial basis for the approximation */ void computeInitialBasis(); /** Update the basis for the next iteration of approximation */ void updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError); /** String converter */ virtual String __repr__() const; /** Current vector index accessor */ UnsignedInteger getCurrentVectorIndex() const; /** Maximum size accessor */ UnsignedInteger getMaximumSize() const; void setMaximumSize(const UnsignedInteger maximumSize); /** Significance factor */ Scalar getSignificanceFactor() const; void setSignificanceFactor(const Scalar significanceFactor); /** Verbose accessor */ Bool getVerbose() const; void setVerbose(const Bool verbose); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ CleaningStrategy(); private: // Index of the next vector to be generated UnsignedInteger currentVectorIndex_; // Maximum size of the curent basis UnsignedInteger maximumSize_; // Relative significance factor of a vector Scalar significanceFactor_; // Verbose Bool verbose_; } ; /* class CleaningStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLEANINGSTRATEGY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns/FixedStrategy.hxx000066400000000000000000000042561307543307100335210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation directly returning the full set of polynomials * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIXEDSTRATEGY_HXX #define OPENTURNS_FIXEDSTRATEGY_HXX #include "openturns/AdaptiveStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FixedStrategy * * An implementation directly returning the full set of polynomials */ class OT_API FixedStrategy : public AdaptiveStrategyImplementation { CLASSNAME; public: /** Constructor from an orthogonal basis */ FixedStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension); /** Virtual constructor */ virtual FixedStrategy * clone() const; /** Compute initial basis for the approximation */ void computeInitialBasis(); /** Update the basis for the next iteration of approximation */ void updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError); /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ FixedStrategy(); private: } ; /* class FixedStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIXEDSTRATEGY_HXX */ FunctionalChaosAlgorithm.hxx000066400000000000000000000124311307543307100356010ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief The class building chaos expansions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALCHAOSALGORITHM_HXX #define OPENTURNS_FUNCTIONALCHAOSALGORITHM_HXX #include "openturns/MetaModelResult.hxx" #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/Indices.hxx" #include "openturns/Point.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/AdaptiveStrategy.hxx" #include "openturns/ProjectionStrategy.hxx" #include "openturns/FunctionalChaosResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalChaosAlgorithm * * The class building chaos expansions */ class OT_API FunctionalChaosAlgorithm : public MetaModelAlgorithm { CLASSNAME; public: /** Constructor */ FunctionalChaosAlgorithm(const Function & model, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy); /** Constructor */ FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy); /** Constructor */ FunctionalChaosAlgorithm(const Sample & inputSample, const Point & weights, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy, const ProjectionStrategy & projectionStrategy); /** Constructor */ FunctionalChaosAlgorithm(const Function & model, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy); /** Constructor */ FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy); /** Constructor */ FunctionalChaosAlgorithm(const Sample & inputSample, const Sample & outputSample); /** Constructor */ FunctionalChaosAlgorithm(const Sample & inputSample, const Point & weights, const Sample & outputSample, const Distribution & distribution, const AdaptiveStrategy & adaptiveStrategy); /** Virtual constructor */ virtual FunctionalChaosAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Maximum residual accessors */ void setMaximumResidual(Scalar residual); Scalar getMaximumResidual() const; /** Projection strategy accessor */ void setProjectionStrategy(const ProjectionStrategy & projectionStrategy); ProjectionStrategy getProjectionStrategy() const; AdaptiveStrategy getAdaptiveStrategy() const; /** Computes the functional chaos */ void run(); /** Get the functional chaos result */ FunctionalChaosResult getResult() const; /** Sample accessors */ Sample getInputSample() const; Sample getOutputSample() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ FunctionalChaosAlgorithm(); private: /** Marginal computation */ void runMarginal(const UnsignedInteger marginalIndex, Indices & indices, Point & coefficients, Scalar & residual, Scalar & relativeError); /** The isoprobabilistic transformation maps the distribution into the orthogonal measure */ Function transformation_; /** The inverse isoprobabilistic transformation */ Function inverseTransformation_; /** The composed model */ Function composedModel_; /** The adaptive strategy */ AdaptiveStrategy adaptiveStrategy_; /** The projection strategy */ ProjectionStrategy projectionStrategy_; /** Maximum residual */ Scalar maximumResidual_; /** Result of the projection */ FunctionalChaosResult result_; } ; /* class FunctionalChaosAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALCHAOSALGORITHM_HXX */ FunctionalChaosResult.hxx000066400000000000000000000104051307543307100351300ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief The result of a chaos expansion * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALCHAOSRESULT_HXX #define OPENTURNS_FUNCTIONALCHAOSRESULT_HXX #include "openturns/MetaModelResult.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Indices.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/OrthogonalBasis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalChaosResult * * The result of a chaos expansion */ class OT_API FunctionalChaosResult : public MetaModelResult { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; // friend class Factory; /** Default constructor */ FunctionalChaosResult(); /** Parameter constructor */ FunctionalChaosResult(const Function & model, const Distribution & distribution, const Function & transformation, const Function & inverseTransformation, const Function & composedModel, const OrthogonalBasis & orthogonalBasis, const Indices & I, const Sample & alpha_k, const FunctionCollection & Psi_k, const Point & residuals, const Point & relativeErrors); /** Virtual constructor */ virtual FunctionalChaosResult * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Distribution accessor */ virtual Distribution getDistribution() const; /** IsoProbabilisticTransformation accessor */ virtual Function getTransformation() const; /** InverseIsoProbabilisticTransformation accessor */ virtual Function getInverseTransformation() const; /** Composed model accessor */ virtual Function getComposedModel() const; /** Orthogonal basis accessor */ virtual OrthogonalBasis getOrthogonalBasis() const; /** Indices accessor */ virtual Indices getIndices() const; /** Coefficients accessor */ virtual Sample getCoefficients() const; /** Reduced basis accessor */ virtual FunctionCollection getReducedBasis() const; /** Composed meta model accessor */ virtual Function getComposedMetaModel() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** The input vector distribution */ Distribution distribution_; /** The isoprobabilistic transformation maps the distribution into the orthogonal measure */ Function transformation_; /** The inverse isoprobabilistic transformation */ Function inverseTransformation_; /** The composed model */ Function composedModel_; /** The orthogonal basis */ OrthogonalBasis orthogonalBasis_; /** The collection of indices */ Indices I_; /** The collection of Alpha_k coefficients */ Sample alpha_k_; /** The collection of vectors upon which we project the (composed) model */ FunctionPersistentCollection Psi_k_; /** Composed meta model */ Function composedMetaModel_; } ; /* class FunctionalChaosResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALCHAOSRESULT_HXX */ IntegrationStrategy.hxx000066400000000000000000000056111307543307100346620ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief An implementation of projection strategy as a leastSquares * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INTEGRATIONSTRATEGY_HXX #define OPENTURNS_INTEGRATIONSTRATEGY_HXX #include "openturns/ProjectionStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IntegrationStrategy * * An implementation of projection strategy as a leastSquares */ class OT_API IntegrationStrategy : public ProjectionStrategyImplementation { CLASSNAME; public: // friend class Factory; /** Default constructor */ IntegrationStrategy(); /** Parameter constructor */ IntegrationStrategy(const Distribution & measure); /** Parameter constructor */ IntegrationStrategy(const WeightedExperiment & weightedExperiment); /** Parameter constructor */ IntegrationStrategy(const Distribution & measure, const WeightedExperiment & weightedExperiment); /** Parameter constructor */ IntegrationStrategy(const Sample & inputSample, const Point & weights, const Sample & outputSample); /** Parameter constructor */ IntegrationStrategy(const Sample & inputSample, const Sample & outputSample); /** Virtual constructor */ virtual IntegrationStrategy * clone() const; /** String converter */ String __repr__() const; /** Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ void computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex = 0); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: } ; /* class IntegrationStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INTEGRATIONSTRATEGY_HXX */ LeastSquaresStrategy.hxx000066400000000000000000000100341307543307100350060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief An implementation of projection strategy as a leastSquares * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEASTSQUARESSTRATEGY_HXX #define OPENTURNS_LEASTSQUARESSTRATEGY_HXX #include "openturns/ProjectionStrategyImplementation.hxx" #include "openturns/PenalizedLeastSquaresAlgorithmFactory.hxx" #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LeastSquaresStrategy * * An implementation of projection strategy as a leastSquares */ class OT_API LeastSquaresStrategy : public ProjectionStrategyImplementation { CLASSNAME; public: typedef Pointer ApproximationAlgorithmImplementationFactoryImplementation; // friend class Factory; /** Default constructor */ LeastSquaresStrategy(const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); /** Parameter constructor */ LeastSquaresStrategy(const Distribution & measure, const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); /** Parameter constructor */ LeastSquaresStrategy(const WeightedExperiment & weightedExperiment, const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); /** Parameter constructor */ LeastSquaresStrategy(const Distribution & measure, const WeightedExperiment & weightedExperiment, const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); /** Parameter constructor */ LeastSquaresStrategy(const Sample & inputSample, const Point & weights, const Sample & outputSample, const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); LeastSquaresStrategy(const Sample & inputSample, const Sample & outputSample, const ApproximationAlgorithmImplementationFactory & factory = PenalizedLeastSquaresAlgorithmFactory(true)); /** Virtual constructor */ virtual LeastSquaresStrategy * clone() const; /** String converter */ String __repr__() const; /** Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ void computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex = 0); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Factory to build an ApproximationAlgorithmImplementation */ ApproximationAlgorithmImplementationFactoryImplementation p_approximationAlgorithmImplementationFactory_; } ; /* class LeastSquaresStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEASTSQUARESSTRATEGY_HXX */ OTFunctionalChaos.hxx000066400000000000000000000027511307543307100342010ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir FunctionalChaos * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTFUNCTIONALCHAOS_HXX #define OPENTURNS_OTFUNCTIONALCHAOS_HXX #include "openturns/AdaptiveStrategy.hxx" #include "openturns/AdaptiveStrategyImplementation.hxx" #include "openturns/CleaningStrategy.hxx" #include "openturns/FixedStrategy.hxx" #include "openturns/FunctionalChaosAlgorithm.hxx" #include "openturns/FunctionalChaosResult.hxx" #include "openturns/LeastSquaresStrategy.hxx" #include "openturns/IntegrationStrategy.hxx" #include "openturns/ProjectionStrategy.hxx" #include "openturns/ProjectionStrategyImplementation.hxx" #include "openturns/SequentialStrategy.hxx" #endif /* OPENTURNS_OTFUNCTIONALCHAOS_HXX */ ProjectionStrategy.hxx000066400000000000000000000057341307543307100345210ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief This is the interface class for projection strategies * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PROJECTIONSTRATEGY_HXX #define OPENTURNS_PROJECTIONSTRATEGY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/ProjectionStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProjectionStrategy * * This is the interface class for projection strategies */ class OT_API ProjectionStrategy : public TypedInterfaceObject { CLASSNAME; public: typedef Collection FunctionCollection; /** Default constructor */ ProjectionStrategy(); /** Parameter constructor */ ProjectionStrategy(const Distribution & measure); /** Constructor from implementation */ ProjectionStrategy(const ProjectionStrategyImplementation & implementation); /** Measure accessor */ void setMeasure(const Distribution & measure); Distribution getMeasure() const; /** Sample accessors */ virtual Sample getInputSample() const; virtual Sample getOutputSample() const; /** Weights accessor */ virtual Point getWeights() const; /** Residual accessor */ virtual Scalar getResidual() const; /** Relative error accessor */ virtual Scalar getRelativeError() const; /** Relative error accessor */ virtual Point getCoefficients() const; /** Experiment accessors */ virtual void setExperiment(const WeightedExperiment & weightedExperiment); virtual WeightedExperiment getExperiment() const; /** Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ void computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex = 0); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; protected: private: } ; /* class ProjectionStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PROJECTIONSTRATEGY_HXX */ ProjectionStrategyImplementation.hxx000066400000000000000000000117001307543307100374150ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief This is a abstract class for projection strategy implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PROJECTIONSTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_PROJECTIONSTRATEGYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/Collection.hxx" #include "openturns/Function.hxx" #include "openturns/Indices.hxx" #include "openturns/WeightedExperiment.hxx" #include "openturns/Pointer.hxx" #include "openturns/Sample.hxx" #include "openturns/Basis.hxx" #include "openturns/DesignProxy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProjectionStrategyImplementation * * This is a abstract class for projection strategy implementations */ class OT_API ProjectionStrategyImplementation : public PersistentObject { CLASSNAME; // Make the FunctionalChaosAlgorithm class a friend of the ProjectionStrategyImplementation class // as this last class is in charge of managing data that are part of the FunctionalChaosAlgorithm // state friend class FunctionalChaosAlgorithm; public: typedef Collection FunctionCollection; // friend class Factory; /** Default constructor */ ProjectionStrategyImplementation(); /** Parameter constructor */ ProjectionStrategyImplementation(const Distribution & measure); /** Parameter constructor */ ProjectionStrategyImplementation(const WeightedExperiment & weightedExperiment); /** Parameter constructor */ ProjectionStrategyImplementation(const Distribution & measure, const WeightedExperiment & weightedExperiment); /** Parameter constructor */ ProjectionStrategyImplementation(const Sample & inputSample, const Point & weights, const Sample & outputSample); /** Virtual constructor */ virtual ProjectionStrategyImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** Measure accessor */ virtual void setMeasure(const Distribution & measure); Distribution getMeasure() const; /** Sample accessors */ virtual Sample getInputSample() const; virtual Sample getOutputSample() const; /** Weights accessor */ virtual Point getWeights() const; /** Residual accessor */ virtual Scalar getResidual() const; /** Relative error accessor */ virtual Scalar getRelativeError() const; /** Relative error accessor */ virtual Point getCoefficients() const; /** Experiment accessors */ virtual void setExperiment(const WeightedExperiment & weightedExperiment); virtual WeightedExperiment getExperiment() const; /** Compute the components alpha_k_p_ by projecting the model on the partial L2 basis */ virtual void computeCoefficients(const Function & function, const Basis & basis, const Indices & indices, const Indices & addedRanks, const Indices & conservedRanks, const Indices & removedRanks, const UnsignedInteger marginalIndex = 0); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The collection of Alpha_k coefficients */ Point alpha_k_p_; /** Residual */ Scalar residual_p_; /** Relative error */ Scalar relativeError_p_; /** The measureing function for projection */ Distribution measure_; // An experiment that will be used to discretize the L2 integral WeightedExperiment weightedExperiment_; // The input sample which will be used for the projection Sample inputSample_; // The weights associated with the sample Point weights_; // The sample value of the model Sample outputSample_; // Proxy to speed up evaluations of the basis over the input sample DesignProxy proxy_; private: } ; /* class ProjectionStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PROJECTIONSTRATEGYIMPLEMENTATION_HXX */ SequentialStrategy.hxx000066400000000000000000000046061307543307100345140ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/FunctionalChaos/openturns// -*- C++ -*- /** * @brief An implementation returning the set of polynomials in sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SEQUENTIALSTRATEGY_HXX #define OPENTURNS_SEQUENTIALSTRATEGY_HXX #include "openturns/AdaptiveStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SequentialStrategy * * An implementation returning the set of polynomials in sequence */ class OT_API SequentialStrategy : public AdaptiveStrategyImplementation { CLASSNAME; public: /** Constructor from an orthogonal basis */ SequentialStrategy(const OrthogonalBasis & basis, const UnsignedInteger maximumDimension, const Bool verbose = false); /** Virtual constructor */ virtual SequentialStrategy * clone() const; /** Compute initial basis for the approximation */ void computeInitialBasis(); /** Update the basis for the next iteration of approximation */ void updateBasis(const Point & alpha_k, const Scalar residual, const Scalar relativeError); /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ SequentialStrategy(); private: // Index of the next vector to be generated UnsignedInteger currentVectorIndex_; // Verbose Bool verbose_; } ; /* class SequentialStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SEQUENTIALSTRATEGY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/000077500000000000000000000000001307543307100244545ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/CMakeLists.txt000066400000000000000000000013441307543307100272160ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (KrigingEvaluation.cxx) ot_add_source_file (KrigingGradient.cxx) ot_add_source_file (KrigingAlgorithm.cxx) ot_add_source_file (KrigingResult.cxx) ot_add_source_file (GeneralLinearModelResult.cxx) ot_add_source_file (GeneralLinearModelAlgorithm.cxx) ot_install_header_file (KrigingEvaluation.hxx) ot_install_header_file (KrigingGradient.hxx) ot_install_header_file (KrigingAlgorithm.hxx) ot_install_header_file (KrigingResult.hxx) ot_install_header_file (GeneralLinearModelResult.hxx) ot_install_header_file (GeneralLinearModelAlgorithm.hxx) ot_install_header_file (OTKriging.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/GeneralLinearModelAlgorithm.cxx000066400000000000000000001372321307543307100325500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class builds generalized linear models * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeneralLinearModelAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/HMatrixFactory.hxx" #include "openturns/ProductCovarianceModel.hxx" #include "openturns/TensorizedCovarianceModel.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/NonCenteredFiniteDifferenceGradient.hxx" #include "openturns/TNC.hxx" #include "openturns/NLopt.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/IdentityFunction.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/DualLinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralLinearModelAlgorithm); static const Factory Factory_GeneralLinearModelAlgorithm; /* Default constructor */ GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm() : MetaModelAlgorithm() , inputSample_(0, 1) // 1 is to be consistent with the default covariance model , normalizedInputSample_(0, 1) // same , inputTransformation_() , normalize_(false) , outputSample_(0, 1) // same , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(false) , method_(0) , hasRun_(false) , optimizeParameters_(true) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // Set the default covariance to adapt the active parameters of the covariance model setCovarianceModel(CovarianceModel()); initializeDefaultOptimizationAlgorithm(); } /* Parameters constructor */ GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Bool normalize, const Bool keepCholeskyFactor) : MetaModelAlgorithm() , inputSample_(0, 0) , normalizedInputSample_(0, 0) , inputTransformation_() , normalize_(normalize) , outputSample_(0, 0) , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(keepCholeskyFactor) , method_(0) , hasRun_(false) , optimizeParameters_(ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-OptimizeParameters")) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // set data & covariance model setData(inputSample, outputSample); // If no basis then we suppose output sample centered checkYCentered(outputSample); setCovarianceModel(covarianceModel); // Build a normalization function if needed if (normalize_) { const UnsignedInteger dimension = inputSample_.getDimension(); const Point mean(inputSample_.computeMean()); const Point stdev(inputSample_.computeStandardDeviationPerComponent()); SquareMatrix linear(dimension); for (UnsignedInteger j = 0; j < dimension; ++ j) { linear(j, j) = 1.0; if (std::abs(stdev[j]) > SpecFunc::MinScalar) linear(j, j) /= stdev[j]; } const Point zero(dimension); setInputTransformation(LinearFunction(mean, zero, linear)); } initializeMethod(); initializeDefaultOptimizationAlgorithm(); } GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool normalize, const Bool keepCholeskyFactor) : MetaModelAlgorithm() , inputSample_() , normalizedInputSample_(0, inputSample.getDimension()) , inputTransformation_() , normalize_(normalize) , outputSample_() , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(keepCholeskyFactor) , method_(0) , hasRun_(false) , optimizeParameters_(ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-OptimizeParameters")) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // set data & covariance model setData(inputSample, outputSample); setCovarianceModel(covarianceModel); if (basis.getSize() > 0) { if (basis[0].getOutputDimension() > 1) LOGWARN(OSS() << "Expected a basis of scalar functions, but first function has dimension " << basis[0].getOutputDimension() << ". Only the first output component will be taken into account."); if (outputSample.getDimension() > 1) LOGWARN(OSS() << "The basis of functions will be applied to all output marginals" ); // Set basis basisCollection_ = BasisCollection(outputSample.getDimension(), basis); } else { // If no basis then we suppose output sample centered checkYCentered(outputSample); } // Build a normalization function if needed if (normalize_) { const UnsignedInteger dimension = inputSample_.getDimension(); const Point mean(inputSample_.computeMean()); const Point stdev(inputSample_.computeStandardDeviationPerComponent()); SquareMatrix linear(dimension); for (UnsignedInteger j = 0; j < dimension; ++ j) { linear(j, j) = 1.0; if (std::abs(stdev[j]) > SpecFunc::ScalarEpsilon) linear(j, j) /= stdev[j]; } const Point zero(dimension); setInputTransformation(LinearFunction(mean, zero, linear)); } initializeMethod(); initializeDefaultOptimizationAlgorithm(); } /* Parameters constructor */ GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm(const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool keepCholeskyFactor) : MetaModelAlgorithm() , inputSample_() , normalizedInputSample_(0, inputSample.getDimension()) , inputTransformation_() , normalize_(true) , outputSample_() , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(keepCholeskyFactor) , method_(0) , hasRun_(false) , optimizeParameters_(ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-OptimizeParameters")) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // set data & covariance model setData(inputSample, outputSample); setCovarianceModel(covarianceModel); // basis setter if (basis.getSize() > 0) { if (basis[0].getOutputDimension() > 1) LOGWARN(OSS() << "Expected a basis of scalar functions, but first function has dimension" << basis[0].getOutputDimension() << ". Only the first output component will be taken into account."); if (outputSample.getDimension() > 1) LOGWARN(OSS() << "The basis of functions will be applied to all output marginals" ); // Set basis basisCollection_ = BasisCollection(outputSample.getDimension(), basis); } else { // If no basis then we suppose output sample centered checkYCentered(outputSample); } // Set the isoprobabilistic transformation setInputTransformation(inputTransformation); initializeMethod(); initializeDefaultOptimizationAlgorithm(); } /* Parameters constructor */ GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool normalize, const Bool keepCholeskyFactor) : MetaModelAlgorithm() , inputSample_(inputSample) , normalizedInputSample_(0, inputSample.getDimension()) , inputTransformation_() , normalize_(normalize) , outputSample_(outputSample) , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(keepCholeskyFactor) , method_(0) , hasRun_(false) , optimizeParameters_(ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-OptimizeParameters")) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // set data & covariance model setData(inputSample, outputSample); setCovarianceModel(covarianceModel); // Set basis collection if (basisCollection.getSize() > 0) setBasisCollection(basisCollection); // Build a normalization function if needed if (normalize_) { const UnsignedInteger dimension = inputSample_.getDimension(); const Point mean(inputSample_.computeMean()); const Point stdev(inputSample_.computeStandardDeviationPerComponent()); SquareMatrix linear(dimension); for (UnsignedInteger j = 0; j < dimension; ++ j) { linear(j, j) = 1.0; if (std::abs(stdev[j]) > SpecFunc::MinScalar) linear(j, j) /= stdev[j]; } const Point zero(dimension); setInputTransformation(LinearFunction(mean, zero, linear)); } initializeMethod(); initializeDefaultOptimizationAlgorithm(); } /* Parameters constructor */ GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm(const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool keepCholeskyFactor) : MetaModelAlgorithm() , inputSample_() , normalizedInputSample_(0, inputSample.getDimension()) , inputTransformation_() , normalize_(true) , outputSample_() , covarianceModel_() , reducedCovarianceModel_() , solver_() , optimizationBounds_() , beta_(0) , rho_(0) , F_(0, 0) , result_() , basisCollection_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() , keepCholeskyFactor_(keepCholeskyFactor) , method_(0) , hasRun_(false) , optimizeParameters_(ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-OptimizeParameters")) , analyticalAmplitude_(false) , lastReducedLogLikelihood_(SpecFunc::LogMinScalar) { // set data & covariance model setData(inputSample, outputSample); setCovarianceModel(covarianceModel); // Set basis collection if (basisCollection.getSize() > 0) setBasisCollection(basisCollection); // Set the isoprobabilistic transformation setInputTransformation(inputTransformation); initializeMethod(); initializeDefaultOptimizationAlgorithm(); } /* set sample method */ void GeneralLinearModelAlgorithm::setData(const Sample & inputSample, const Sample & outputSample) { // Check the sample sizes if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm, input sample size=" << inputSample.getSize() << " does not match output sample size=" << outputSample.getSize(); // Set samples inputSample_ = inputSample; outputSample_ = outputSample; } /* Covariance model accessors */ void GeneralLinearModelAlgorithm::setCovarianceModel(const CovarianceModel & covarianceModel) { // Here we can store any modified version of the given covariance model wrt its parameters as it is mainly a parametric template const UnsignedInteger inputDimension = inputSample_.getDimension(); const UnsignedInteger dimension = outputSample_.getDimension(); // Check dimensions of the covariance model // There are 4 cases: // 1) Both the spatial dimension and the dimension of the model match the dimensions of the problem, in which case the model is used as-is // 2) The spatial dimension of the model is 1 and different from the spatial dimension of the problem, and the dimension of both the model and the problem are 1. The actual model is a product of the given model. // 3) The spatial dimension of the model and the problem match, but the dimension of the model is 1, different from the dimension of the problem. The actual model is a tensorization of the given model. // 4) The spatial dimension of the model is 1 and different from the spatial dimension of the problem, and the dimension of the model is 1 and different from the dimension of the problem. The actual model is a tensorization of products of the given model. // The other situations are invalid. const Bool sameDimension = dimension == covarianceModel.getDimension(); const Bool unitModelDimension = covarianceModel.getDimension() == 1; const Bool sameSpatialDimension = inputDimension == covarianceModel.getSpatialDimension(); const Bool unitModelSpatialDimension = covarianceModel.getSpatialDimension() == 1; // Case 1 if (sameSpatialDimension && sameDimension) covarianceModel_ = covarianceModel; // Case 2 else if (unitModelSpatialDimension && sameDimension && unitModelDimension) covarianceModel_ = ProductCovarianceModel(ProductCovarianceModel::CovarianceModelCollection(inputDimension, covarianceModel)); // Case 3 else if (sameSpatialDimension && unitModelDimension) covarianceModel_ = TensorizedCovarianceModel(TensorizedCovarianceModel::CovarianceModelCollection(dimension, covarianceModel)); // Case 4 else if (unitModelSpatialDimension && unitModelDimension) covarianceModel_ = TensorizedCovarianceModel(TensorizedCovarianceModel::CovarianceModelCollection(dimension, ProductCovarianceModel(ProductCovarianceModel::CovarianceModelCollection(inputDimension, covarianceModel)))); else throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm, invalid dimension=" << covarianceModel.getDimension() << " or spatial dimension=" << covarianceModel.getSpatialDimension() << " for the given covariance model. A model of both spatial dimension=" << inputDimension << " and dimension=" << dimension << " is expected, or a model of spatial dimension=" << inputDimension << " and unit dimension, or a model of unit spatial dimension and dimension=" << dimension << ", or a model of unit spatial dimension and unit dimension."; // All the computation will be done on the reduced covariance model. We keep the initial covariance model (ie the one we just built) in order to reinitialize the reduced covariance model if some flags are changed after the creation of the algorithm. reducedCovarianceModel_ = covarianceModel_; // Now, adapt the model parameters. // First, check if the parameters have to be optimized. If not, remove all the active parameters. analyticalAmplitude_ = false; if (!optimizeParameters_) reducedCovarianceModel_.setActiveParameter(Indices()); // Second, check if the amplitude parameter is unique and active else if (ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate")) { // The model has to be of dimension 1 if (reducedCovarianceModel_.getDimension() == 1) { const Description activeParametersDescription(reducedCovarianceModel_.getParameterDescription()); // And one of the active parameters must be called amplitude_0 for (UnsignedInteger i = 0; i < activeParametersDescription.getSize(); ++i) if (activeParametersDescription[i] == "amplitude_0") { analyticalAmplitude_ = true; Indices newActiveParameters(reducedCovarianceModel_.getActiveParameter()); newActiveParameters.erase(newActiveParameters.begin() + i); reducedCovarianceModel_.setActiveParameter(newActiveParameters); // Here we have to change the current value of the amplitude as it has // to be equal to 1 during the potential optimization step in order for // the analytical formula to be correct. // Now, the amplitude has disapear form the active parameters so it must // be updated using the amplitude accessor. reducedCovarianceModel_.setAmplitude(Point(1, 1.0)); break; } } // reducedCovarianceModel_.getDimension() == 1 } // optimizeParameters_ LOGINFO(OSS() << "final active parameters=" << reducedCovarianceModel_.getActiveParameter()); // Define the bounds of the optimization problem const UnsignedInteger optimizationDimension = reducedCovarianceModel_.getParameter().getSize(); if (optimizationDimension > 0) { const Point lowerBound(optimizationDimension, ResourceMap::GetAsScalar( "GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound")); const Point upperBound(optimizationDimension, ResourceMap::GetAsScalar( "GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound")); optimizationBounds_ = Interval(lowerBound, upperBound); } else optimizationBounds_ = Interval(); } CovarianceModel GeneralLinearModelAlgorithm::getCovarianceModel() const { return covarianceModel_; } CovarianceModel GeneralLinearModelAlgorithm::getReducedCovarianceModel() const { return reducedCovarianceModel_; } /* Set basis collection method */ void GeneralLinearModelAlgorithm::setBasisCollection(const BasisCollection & basis) { // If basis given, then its size should be the same as the output dimension (each marginal of multibasis is a basis that will be used for trend of the corresponding marginal. if (basis.getSize() != outputSample_.getDimension()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm, output sample dimension=" << outputSample_.getDimension() << " does not match multi-basis dimension=" << basis.getSize(); // Get the output dimension of the basis // The first marginal may be an empty basis Bool continuationCondition = true; UnsignedInteger index = 0; UnsignedInteger outputDimension = 0; while(continuationCondition) { try { outputDimension = basis[index][0].getOutputDimension(); continuationCondition = false; } catch (InvalidArgumentException) { ++index; continuationCondition = continuationCondition && index < basis.getSize(); } } if (outputDimension == 0) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm, basisCollection argument contains basis with empty collection of functions"; if (outputDimension > 1) LOGWARN(OSS() << "Expected a basis of scalar functions, but some function has dimension" << outputDimension << ". Only the first output component will be taken into account."); // Everything is ok, we set the basis basisCollection_ = basis; } void GeneralLinearModelAlgorithm::checkYCentered(const Sample & Y) { const Scalar meanEpsilon = ResourceMap::GetAsScalar("GeneralLinearModelAlgorithm-MeanEpsilon"); const Point meanY(Y.computeMean()); for (UnsignedInteger k = 0; k < meanY.getDimension(); ++k) { if (std::abs(meanY[k]) > meanEpsilon) LOGWARN(OSS() << "In GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm, basis is empty and output sample is not centered, mean=" << meanY); } } void GeneralLinearModelAlgorithm::initializeDefaultOptimizationAlgorithm() { const String solverName(ResourceMap::Get("GeneralLinearModelAlgorithm-DefaultOptimizationAlgorithm")); if (solverName == "TNC") solver_ = TNC(); else if (solverName == "NELDER-MEAD") solver_ = NLopt("LN_NELDERMEAD"); else if (solverName == "LBFGS") solver_ = NLopt("LD_LBFGS"); else throw InvalidArgumentException(HERE) << "Unknown optimization solver:" << solverName; } /* Virtual constructor */ GeneralLinearModelAlgorithm * GeneralLinearModelAlgorithm::clone() const { return new GeneralLinearModelAlgorithm(*this); } /* Normalize the input sample */ void GeneralLinearModelAlgorithm::normalizeInputSample() { // Nothing to do if the sample has alredy been normalized if (normalizedInputSample_.getSize() != 0) return; // If we don't want to normalize the data if (!normalize_) { LOGINFO("No need to normalize the data"); normalizedInputSample_ = inputSample_; return; } LOGINFO("Data are normalized"); normalizedInputSample_ = inputTransformation_(inputSample_); } /* Compute the design matrix */ void GeneralLinearModelAlgorithm::computeF() { // Nothing to do if the design matrix has already been computed if (F_.getNbRows() != 0) return; // No early exit based on the sample/basis size as F_ must be initialized with the correct dimensions // With a multivariate basis of size similar to output dimension, each ith-basis should be applied to elements // of corresponding marginal const UnsignedInteger outputDimension = outputSample_.getDimension(); const UnsignedInteger sampleSize = normalizedInputSample_.getSize(); const UnsignedInteger basisCollectionSize = basisCollection_.getSize(); UnsignedInteger totalSize = 0; for (UnsignedInteger i = 0; i < basisCollectionSize; ++ i ) totalSize += basisCollection_[i].getSize(); // if totalSize > 0, then basisCollection_.getSize() should be equal to outputDimension // This is checked in GeneralLinearModelAlgorithm::GeneralLinearModelAlgorithm F_ = Matrix(sampleSize * outputDimension, totalSize); if (totalSize == 0) return; // Compute F UnsignedInteger index = 0; for (UnsignedInteger outputMarginal = 0; outputMarginal < outputDimension; ++ outputMarginal ) { const Basis localBasis = basisCollection_[outputMarginal]; const UnsignedInteger localBasisSize = localBasis.getSize(); for (UnsignedInteger j = 0; j < localBasisSize; ++j, ++index ) { // Here we use potential parallelism in the evaluation of the basis functions const Sample basisSample = localBasis[j](normalizedInputSample_); for (UnsignedInteger i = 0; i < sampleSize; ++i) F_(outputMarginal + i * outputDimension, index) = basisSample[i][0]; } } } /* Perform regression 1) Compute the design matrix 2) Call the parameters optimization a) Compute the log-likelihood with the initial parameters. It is mandatory even if no parameter has to be optimized as this computation has many side effects such as: * computing the trend coefficients beta * computing the discretized covariance matrix Cholesky factor b) If the amplitude can be computed analytically from the other parameters: * set its value to 1 * remove it from the list of parameters c) If some parameters remain, perform the optimization d) Deduce the associated value of the amplitude by the analytical formula if possible 3) Build the result: a) Extract the different parts of the trend b) Update the covariance model if needed */ void GeneralLinearModelAlgorithm::run() { // Do not run again if already computed if (hasRun_) return; LOGINFO("Normalize the data"); normalizeInputSample(); LOGINFO("Compute the design matrix"); computeF(); const UnsignedInteger outputDimension = outputSample_.getDimension(); // optimization of likelihood function if provided LOGINFO("Optimize the parameter of the covariance model if needed"); // Here we call the optimizeReducedLogLikelihood() method even if the covariance // model has no active parameter, because: // + it can be due to the fact that the amplitude is obtained through an // analytical formula and this situation is taken into account in // maximizeReducedLogLikelihood() // + even if there is actually no parameter to optimize, // maximizeReducedLogLikelihood() is the entry point to // computeReducedLogLikelyhood() which has side effects on covariance // discretization and factorization, and it computes beta_ Scalar optimalLogLikelihood = maximizeReducedLogLikelihood(); LOGINFO("Store the estimates"); // Here we do the work twice: // 1) To get a collection of Point for the result class // 2) To get same results as Sample for the trend NMF Collection trendCoefficients(basisCollection_.getSize()); Sample trendCoefficientsSample(beta_.getSize(), reducedCovarianceModel_.getDimension()); UnsignedInteger cumulatedSize = 0; for (UnsignedInteger outputIndex = 0; outputIndex < basisCollection_.getSize(); ++ outputIndex) { const UnsignedInteger localBasisSize = basisCollection_[outputIndex].getSize(); Point beta_i(localBasisSize); for(UnsignedInteger basisElement = 0; basisElement < localBasisSize; ++ basisElement) { beta_i[basisElement] = beta_[cumulatedSize]; trendCoefficientsSample[cumulatedSize][outputIndex] = beta_[cumulatedSize]; ++cumulatedSize; } trendCoefficients[outputIndex] = beta_i; } LOGINFO("Build the output meta-model"); // The meta model is of type DualLinearCombination function // We should write the coefficients into a Sample and build the basis into a collection Collection allFunctionsCollection; for (UnsignedInteger k = 0; k < basisCollection_.getSize(); ++k) for (UnsignedInteger l = 0; l < basisCollection_[k].getSize(); ++l) allFunctionsCollection.add(basisCollection_[k].build(l)); Function metaModel; if (basisCollection_.getSize() > 0) { // Care ! collection should be non empty metaModel = DualLinearCombinationFunction(allFunctionsCollection, trendCoefficientsSample); } else { // If no basis ==> zero function #ifdef OPENTURNS_HAVE_MUPARSER metaModel = SymbolicFunction(Description::BuildDefault(covarianceModel_.getSpatialDimension(), "x"), Description(covarianceModel_.getDimension(), "0.0")); #else metaModel = Function(Sample(1, reducedCovarianceModel_.getSpatialDimension()), Sample(1, reducedCovarianceModel_.getDimension())); #endif } // Add transformation if needed if (normalize_) metaModel = ComposedFunction(metaModel, inputTransformation_); // compute residual, relative error const Point outputVariance(outputSample_.computeVariance()); const Sample mY(metaModel(inputSample_)); const Point squaredResiduals((outputSample_ - mY).computeRawMoment(2)); Point residuals(outputDimension); Point relativeErrors(outputDimension); const UnsignedInteger size = inputSample_.getSize(); for ( UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++ outputIndex ) { residuals[outputIndex] = sqrt(squaredResiduals[outputIndex] / size); relativeErrors[outputIndex] = squaredResiduals[outputIndex] / outputVariance[outputIndex]; } // The scaling is done there because it has to be done as soon as some optimization has been done, either numerically or through an analytical formula if (keepCholeskyFactor_) { if (analyticalAmplitude_) { const Scalar sigma = reducedCovarianceModel_.getAmplitude()[0]; // Case of LAPACK backend if (method_ == 0) covarianceCholeskyFactor_ = covarianceCholeskyFactor_ * sigma; else covarianceCholeskyFactorHMatrix_.scale(sigma); } result_ = GeneralLinearModelResult(inputSample_, outputSample_, metaModel, residuals, relativeErrors, basisCollection_, trendCoefficients, reducedCovarianceModel_, optimalLogLikelihood, covarianceCholeskyFactor_, covarianceCholeskyFactorHMatrix_); } else result_ = GeneralLinearModelResult(inputSample_, outputSample_, metaModel, residuals, relativeErrors, basisCollection_, trendCoefficients, reducedCovarianceModel_, optimalLogLikelihood); // If normalize, set input transformation if (normalize_) result_.setTransformation(inputTransformation_); hasRun_ = true; } // Maximize the log-likelihood of the Normal process model wrt the observations // If the covariance model has no active parameter, no numerical optimization // is done. There are two cases: // + no parameter has to be optimized, in which case a single call to // computeReducedLogLikelihood() is made in order to compute beta_ and to // factor the covariance matrix // + the amplitude is the only covariance parameter to be estimated and it is // done thanks to an analytical formula // The method returns the optimal log-likelihood (which is equal to the optimal // reduced log-likelihood), the corresponding parameters being directly stored // into the covariance model Scalar GeneralLinearModelAlgorithm::maximizeReducedLogLikelihood() { // initial guess Point initialParameters(reducedCovarianceModel_.getParameter()); Indices initialActiveParameters(reducedCovarianceModel_.getActiveParameter()); // We use the functional form of the log-likelihood computation to benefit from the cache mechanism Function reducedLogLikelihoodFunction(getObjectiveFunction()); const Bool noNumericalOptimization = initialParameters.getSize() == 0; // Early exit if the parameters are known if (noNumericalOptimization) { // We only need to compute the log-likelihood function at the initial parameters in order to get the Cholesky factor and the trend coefficients const Scalar initialReducedLogLikelihood = reducedLogLikelihoodFunction(initialParameters)[0]; LOGINFO("No covariance parameter to optimize"); LOGINFO(OSS() << "initial parameters=" << initialParameters << ", log-likelihood=" << initialReducedLogLikelihood); return initialReducedLogLikelihood; } // At this point we have an optimization problem to solve // Define the optimization problem OptimizationProblem problem; problem.setObjective(reducedLogLikelihoodFunction); problem.setMinimization(false); problem.setBounds(optimizationBounds_); solver_.setStartingPoint(initialParameters); solver_.setProblem(problem); LOGINFO(OSS(false) << "Solve problem=" << problem << " using solver=" << solver_); solver_.run(); const Scalar optimalLogLikelihood = solver_.getResult().getOptimalValue()[0]; const Point optimalParameters = solver_.getResult().getOptimalPoint(); // Check if the optimal value corresponds to the last computed value, in order to // see if the by-products (Cholesky factor etc) are correct if (lastReducedLogLikelihood_ != optimalLogLikelihood) { LOGINFO(OSS(false) << "Need to evaluate the objective function one more time because the last computed reduced log-likelihood value=" << lastReducedLogLikelihood_ << " is different from the optimal one=" << optimalLogLikelihood); (void) computeReducedLogLikelihood(optimalParameters); } // Final call to reducedLogLikelihoodFunction() in order to update the amplitude // No additional cost since the cache mechanism is activated LOGDEBUG(OSS() << "Optimized parameters=" << optimalParameters << ", log-likelihood=" << optimalLogLikelihood); return optimalLogLikelihood; } Point GeneralLinearModelAlgorithm::computeReducedLogLikelihood(const Point & parameters) const { // Check that the parameters have a size compatible with the covariance model if (parameters.getSize() != reducedCovarianceModel_.getParameter().getSize()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::computeReducedLogLikelihood, could not compute likelihood," << " covariance model requires an argument of size " << reducedCovarianceModel_.getParameter().getSize() << " but here we got " << parameters.getSize(); LOGINFO(OSS(false) << "Compute reduced log-likelihood for parameters=" << parameters); Scalar logDeterminant = 0.0; // If the amplitude is deduced from the other parameters, work with // the correlation function if (analyticalAmplitude_) reducedCovarianceModel_.setAmplitude(Point(1, 1.0)); reducedCovarianceModel_.setParameter(parameters); // First, compute the log-determinant of the Cholesky factor of the covariance // matrix. As a by-product, also compute rho. if (method_ == 0) logDeterminant = computeLapackLogDeterminantCholesky(); else logDeterminant = computeHMatLogDeterminantCholesky(); // Compute the amplitude using an analytical formula if needed // and update the reduced log-likelihood. if (analyticalAmplitude_) { LOGINFO("Analytical amplitude"); // J(\sigma)=-\log(\sqrt{\sigma^{2N}\det{R}})-(Y-M)^tR^{-1}(Y-M)/(2\sigma^2) // =-N\log(\sigma)-\log(\det{R})/2-(Y-M)^tR^{-1}(Y-M)/(2\sigma^2) // dJ/d\sigma=-N/\sigma+(Y-M)^tR^{-1}(Y-M)/\sigma^3=0 // \sigma=\sqrt{(Y-M)^tR^{-1}(Y-M)/N} const UnsignedInteger size = inputSample_.getSize(); const Scalar sigma = std::sqrt(rho_.normSquare() / (ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-UnbiasedVariance") ? size - beta_.getSize() : size)); LOGDEBUG(OSS(false) << "sigma=" << sigma); reducedCovarianceModel_.setAmplitude(Point(1, sigma)); logDeterminant += 2.0 * size * std::log(sigma); rho_ /= sigma; LOGDEBUG(OSS(false) << "rho_=" << rho_); } // analyticalAmplitude LOGDEBUG(OSS(false) << "log-determinant=" << logDeterminant << ", rho=" << rho_); const Scalar epsilon = rho_.normSquare(); LOGDEBUG(OSS(false) << "epsilon=||rho||^2=" << epsilon); if (epsilon <= 0) lastReducedLogLikelihood_ = SpecFunc::LogMinScalar; // For the general multidimensional case, we have to compute the general log-likelihood (ie including marginal variances) else lastReducedLogLikelihood_ = -0.5 * (logDeterminant + epsilon); LOGINFO(OSS(false) << "Reduced log-likelihood=" << lastReducedLogLikelihood_); return Point(1, lastReducedLogLikelihood_); } Scalar GeneralLinearModelAlgorithm::computeLapackLogDeterminantCholesky() const { // Using the hypothesis that parameters = scale & model writes : C(s,t) = diag(sigma) * R(s,t) * diag(sigma) with R a correlation function LOGINFO(OSS(false) << "Compute the LAPACK log-determinant of the Cholesky factor for covariance=" << reducedCovarianceModel_); LOGINFO("Discretize the covariance model"); CovarianceMatrix C(reducedCovarianceModel_.discretize(normalizedInputSample_)); if (noise_.getDimension() > 0) { LOGINFO("Add noise to the covariance matrix"); for (UnsignedInteger i = 0; i < C.getDimension(); ++ i) C(i, i) += noise_[i]; } LOGDEBUG(OSS(false) << "C=\n" << C); LOGINFO("Compute the Cholesky factor of the covariance matrix"); Bool continuationCondition = true; const Scalar startingScaling = ResourceMap::GetAsScalar("GeneralLinearModelAlgorithm-StartingScaling"); const Scalar maximalScaling = ResourceMap::GetAsScalar("GeneralLinearModelAlgorithm-MaximalScaling"); Scalar cumulatedScaling = 0.0; Scalar scaling = startingScaling; while (continuationCondition && (cumulatedScaling < maximalScaling)) { try { covarianceCholeskyFactor_ = C.computeCholesky(); continuationCondition = false; } // If it has not yet been computed, compute it and store it catch (InternalException &) { cumulatedScaling += scaling ; // Unroll the regularization to optimize the computation for (UnsignedInteger i = 0; i < C.getDimension(); ++i) C(i, i) += scaling; scaling *= 2.0; } } if (scaling >= maximalScaling) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::computeLapackLogDeterminantCholesky, could not compute the Cholesky factor." << " Scaling up to " << cumulatedScaling << " was not enough"; if (cumulatedScaling > 0.0) LOGWARN(OSS() << "Warning! Scaling up to " << cumulatedScaling << " was needed in order to get an admissible covariance. "); LOGDEBUG(OSS(false) << "L=\n" << covarianceCholeskyFactor_); // y corresponds to output data const Point y(outputSample_.getImplementation()->getData()); LOGDEBUG(OSS(false) << "y=" << y); // rho = L^{-1}y LOGINFO("Solve L.rho = y"); rho_ = covarianceCholeskyFactor_.solveLinearSystem(y); LOGDEBUG(OSS(false) << "rho_=L^{-1}y=" << rho_); // If trend to estimate if (basisCollection_.getSize() > 0) { // Phi = L^{-1}F LOGINFO("Solve L.Phi = F"); LOGDEBUG(OSS(false) << "F_=\n" << F_); Matrix Phi(covarianceCholeskyFactor_.solveLinearSystem(F_)); LOGDEBUG(OSS(false) << "Phi=\n" << Phi); LOGINFO("Solve min_beta||Phi.beta - rho||^2"); beta_ = Phi.solveLinearSystem(rho_); LOGDEBUG(OSS(false) << "beta_=" << beta_); LOGINFO("Update rho"); rho_ -= Phi * beta_; LOGDEBUG(OSS(false) << "rho_=L^{-1}y-L^{-1}F.beta=" << rho_); } LOGINFO("Compute log(|det(L)|)=log(sqrt(|det(C)|))"); Scalar logDetL = 0.0; for (UnsignedInteger i = 0; i < covarianceCholeskyFactor_.getDimension(); ++i ) { const Scalar lii = covarianceCholeskyFactor_(i, i); if (lii <= 0.0) return -SpecFunc::LogMaxScalar; logDetL += log(lii); } LOGDEBUG(OSS(false) << "logDetL=" << logDetL); return 2.0 * logDetL; } Scalar GeneralLinearModelAlgorithm::computeHMatLogDeterminantCholesky() const { // Using the hypothesis that parameters = scale & model writes : C(s,t) = \sigma^2 * R(s,t) with R a correlation function LOGINFO(OSS(false) << "Compute the HMAT log-determinant of the Cholesky factor for covariance=" << reducedCovarianceModel_); Bool continuationCondition = true; const Scalar startingScaling = ResourceMap::GetAsScalar("GeneralLinearModelAlgorithm-StartingScaling"); const Scalar maximalScaling = ResourceMap::GetAsScalar("GeneralLinearModelAlgorithm-MaximalScaling"); Scalar cumulatedScaling = 0.0; Scalar scaling = startingScaling; const UnsignedInteger covarianceDimension = reducedCovarianceModel_.getDimension(); HMatrixFactory hmatrixFactory; HMatrixParameters hmatrixParameters; while (continuationCondition && (cumulatedScaling < maximalScaling)) { try { covarianceCholeskyFactorHMatrix_ = hmatrixFactory.build(normalizedInputSample_, covarianceDimension, true, hmatrixParameters); if (covarianceDimension == 1) { CovarianceAssemblyFunction simple(reducedCovarianceModel_, normalizedInputSample_, cumulatedScaling); covarianceCholeskyFactorHMatrix_.assemble(simple, 'L'); } else { CovarianceBlockAssemblyFunction block(reducedCovarianceModel_, normalizedInputSample_, cumulatedScaling); covarianceCholeskyFactorHMatrix_.assemble(block, 'L'); } // Factorize covarianceCholeskyFactorHMatrix_.factorize("LLt"); continuationCondition = false; } // If it has not yet been computed, compute it and store it catch (InternalException &) { cumulatedScaling += scaling ; scaling *= 2.0; Scalar assemblyEpsilon = hmatrixParameters.getAssemblyEpsilon() / 10.0; hmatrixParameters.setAssemblyEpsilon(assemblyEpsilon); Scalar recompressionEpsilon = hmatrixParameters.getRecompressionEpsilon() / 10.0; hmatrixParameters.setRecompressionEpsilon(recompressionEpsilon); LOGDEBUG(OSS() << "Currently, scaling up to " << cumulatedScaling << " to get an admissible covariance. Maybe compression & recompression factors are not adapted."); LOGDEBUG(OSS() << "Currently, assembly espilon = " << assemblyEpsilon ); LOGDEBUG(OSS() << "Currently, recompression epsilon " << recompressionEpsilon); } } if (scaling >= maximalScaling) throw InvalidArgumentException(HERE) << "In GeneralLinearModelAlgorithm::computeHMatLogLikelihood, could not compute the Cholesky factor" << " Scaling up to " << cumulatedScaling << " was not enough"; if (cumulatedScaling > 0.0) LOGWARN(OSS() << "Warning! Scaling up to " << cumulatedScaling << " was needed in order to get an admissible covariance. "); // y corresponds to output data // The PersistentCollection is returned as Point with the right memory map Point y(outputSample_.getImplementation()->getData()); // rho = L^{-1}y LOGINFO("Solve L.rho = y"); rho_ = covarianceCholeskyFactorHMatrix_.solveLower(y); // If trend to estimate if (basisCollection_.getSize() > 0) { // Phi = L^{-1}F LOGDEBUG("Solve L.Phi = F"); Matrix Phi(covarianceCholeskyFactorHMatrix_.solveLower(F_)); LOGINFO("Solve min_beta||Phi.beta - rho||^2"); beta_ = Phi.solveLinearSystem(rho_); rho_ -= Phi * beta_; } LOGINFO("Compute log(sqrt(|det(C)|)) = log(|det(L)|)"); Scalar logDetL = 0.0; Point diagonal(covarianceCholeskyFactorHMatrix_.getDiagonal()); for (UnsignedInteger i = 0; i < rho_.getSize(); ++i ) { const Scalar lii = diagonal[i]; if (lii <= 0.0) return SpecFunc::MaxScalar; logDetL += log(lii); } return 2.0 * logDetL; } /* Optimization solver accessor */ OptimizationAlgorithm GeneralLinearModelAlgorithm::getOptimizationAlgorithm() const { return solver_; } void GeneralLinearModelAlgorithm::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; hasRun_ = false; } OptimizationAlgorithm GeneralLinearModelAlgorithm::getOptimizationSolver() const { Log::Warn(OSS() << "GeneralLinearModelAlgorithm::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void GeneralLinearModelAlgorithm::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "GeneralLinearModelAlgorithm::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } void GeneralLinearModelAlgorithm::setInputTransformation(const Function & inputTransformation) { if (inputTransformation.getInputDimension() != inputSample_.getDimension()) throw InvalidDimensionException(HERE) << "In GeneralLinearModelAlgorithm::setInputTransformation, input dimension of the transformation=" << inputTransformation.getInputDimension() << " should match input sample dimension=" << inputSample_.getDimension(); if (inputTransformation.getOutputDimension() != inputSample_.getDimension()) throw InvalidDimensionException(HERE) << "In GeneralLinearModelAlgorithm::setInputTransformation, output dimension of the transformation=" << inputTransformation.getOutputDimension() << " should match output sample dimension=" << inputSample_.getDimension(); inputTransformation_ = inputTransformation; // Set normalize to true normalize_ = true; } Function GeneralLinearModelAlgorithm::getInputTransformation() const { // If normlize is false, we return identity function if (!normalize_) return IdentityFunction(inputSample_.getDimension()); return inputTransformation_; } /* Optimize parameters flag accessor */ Bool GeneralLinearModelAlgorithm::getOptimizeParameters() const { return optimizeParameters_; } void GeneralLinearModelAlgorithm::setOptimizeParameters(const Bool optimizeParameters) { if (optimizeParameters != optimizeParameters_) { optimizeParameters_ = optimizeParameters; // Here we have to call setCovarianceModel() as it computes reducedCovarianceModel from covarianceModel_ in a way influenced by optimizeParameters_ flag. setCovarianceModel(covarianceModel_); } } /* Accessor to optimization bounds */ void GeneralLinearModelAlgorithm::setOptimizationBounds(const Interval & optimizationBounds) { if (!(optimizationBounds.getDimension() == reducedCovarianceModel_.getParameter().getSize())) throw InvalidArgumentException(HERE) << "Error: expected bounds of dimension=" << reducedCovarianceModel_.getParameter().getSize() << ", got dimension=" << optimizationBounds.getDimension(); optimizationBounds_ = optimizationBounds; } Interval GeneralLinearModelAlgorithm::getOptimizationBounds() const { return optimizationBounds_; } /* Observation noise accessor */ void GeneralLinearModelAlgorithm::setNoise(const Point & noise) { const UnsignedInteger size = inputSample_.getSize(); if (noise.getSize() != size) throw InvalidArgumentException(HERE) << "Noise size=" << noise.getSize() << " does not match sample size=" << size; for (UnsignedInteger i = 0; i < size; ++ i) if (!(noise[i] >= 0.0)) throw InvalidArgumentException(HERE) << "Noise must be positive"; noise_ = noise; } Point GeneralLinearModelAlgorithm::getNoise() const { return noise_; } Point GeneralLinearModelAlgorithm::getRho() const { return rho_; } /* String converter */ String GeneralLinearModelAlgorithm::__repr__() const { OSS oss; oss << "class=" << getClassName() << ", inputSample=" << inputSample_ << ", outputSample=" << outputSample_ << ", basis=" << basisCollection_ << ", covarianceModel=" << covarianceModel_ << ", reducedCovarianceModel=" << reducedCovarianceModel_ << ", solver=" << solver_ << ", optimizeParameters=" << optimizeParameters_ << ", noise=" << noise_; return oss; } Sample GeneralLinearModelAlgorithm::getInputSample() const { return inputSample_; } Sample GeneralLinearModelAlgorithm::getOutputSample() const { return outputSample_; } GeneralLinearModelResult GeneralLinearModelAlgorithm::getResult() { if (!hasRun_) run(); return result_; } Function GeneralLinearModelAlgorithm::getObjectiveFunction() { LOGINFO("Normalizing the data (if needed)..."); normalizeInputSample(); LOGINFO("Compute the design matrix"); computeF(); Function logLikelihood(ReducedLogLikelihoodEvaluation(*this)); // Here we change the finite difference gradient for a non centered one in order to reduce the computational cost logLikelihood.setGradient(NonCenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "NonCenteredFiniteDifferenceGradient-DefaultEpsilon" ), logLikelihood.getEvaluation()).clone()); logLikelihood.enableCache(); return logLikelihood; } void GeneralLinearModelAlgorithm::initializeMethod() { if (ResourceMap::Get("GeneralLinearModelAlgorithm-LinearAlgebra") == "HMAT") method_ = 1; } /* Method accessor (lapack/hmat) - Protected but friend with GeneralLinearModelAlgorithm class */ void GeneralLinearModelAlgorithm::setMethod(const UnsignedInteger method) { method_ = method; } /* Method save() stores the object through the StorageManager */ void GeneralLinearModelAlgorithm::save(Advocate & adv) const { MetaModelAlgorithm::save(adv); adv.saveAttribute( "inputSample_", inputSample_ ); adv.saveAttribute( "inputTransformation_", inputTransformation_ ); adv.saveAttribute( "normalize_", normalize_ ); adv.saveAttribute( "outputSample_", outputSample_ ); adv.saveAttribute( "covarianceModel_", covarianceModel_ ); adv.saveAttribute( "reducedCovarianceModel_", reducedCovarianceModel_ ); adv.saveAttribute( "solver_", solver_ ); adv.saveAttribute( "optimizationBounds_", optimizationBounds_ ); adv.saveAttribute( "basisCollection_", basisCollection_ ); adv.saveAttribute( "result_", result_ ); adv.saveAttribute( "method", method_ ); adv.saveAttribute( "keepCholeskyFactor_", keepCholeskyFactor_ ); adv.saveAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_ ); adv.saveAttribute( "optimizeParameters_", optimizeParameters_ ); adv.saveAttribute( "noise_", noise_ ); } /* Method load() reloads the object from the StorageManager */ void GeneralLinearModelAlgorithm::load(Advocate & adv) { MetaModelAlgorithm::load(adv); adv.loadAttribute( "inputSample_", inputSample_ ); adv.loadAttribute( "inputTransformation_", inputTransformation_ ); adv.loadAttribute( "normalize_", normalize_ ); adv.loadAttribute( "outputSample_", outputSample_ ); adv.loadAttribute( "covarianceModel_", covarianceModel_ ); adv.loadAttribute( "reducedCovarianceModel_", reducedCovarianceModel_ ); adv.loadAttribute( "solver_", solver_ ); adv.loadAttribute( "optimizationBounds_", optimizationBounds_ ); adv.loadAttribute( "basisCollection_", basisCollection_ ); adv.loadAttribute( "result_", result_ ); adv.loadAttribute( "method", method_ ); adv.loadAttribute( "keepCholeskyFactor_", keepCholeskyFactor_ ); adv.loadAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_ ); adv.loadAttribute( "optimizeParameters_", optimizeParameters_ ); adv.loadAttribute( "noise_", noise_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/GeneralLinearModelResult.cxx000066400000000000000000000230461307543307100320750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The result of a linear model estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeneralLinearModelResult.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Mesh.hxx" #include "openturns/GaussianProcess.hxx" #include "openturns/WhiteNoise.hxx" #include "openturns/Normal.hxx" #include "openturns/DatabaseFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralLinearModelResult); static const Factory Factory_GeneralLinearModelResult; /* Default constructor */ GeneralLinearModelResult::GeneralLinearModelResult() : MetaModelResult() { // Nothing to do } /* Constructor with parameters & Cholesky factor */ GeneralLinearModelResult::GeneralLinearModelResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Scalar optimalLogLikelihood) : MetaModelResult(DatabaseFunction(inputSample, outputSample), metaModel, residuals, relativeErrors) , inputData_(inputSample) , inputTransformedData_(inputSample) , inputTransformation_() , hasTransformation_(false) , basis_(basis) , beta_(trendCoefficients) , covarianceModel_(covarianceModel) , optimalLogLikelihood_(optimalLogLikelihood) , hasCholeskyFactor_(false) , covarianceCholeskyFactor_() , covarianceHMatrix_() { const UnsignedInteger size = inputSample.getSize(); if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelResult::GeneralLinearModelResult, input & output sample have different size. input sample size = " << size << ", output sample size = " << outputSample.getSize(); } /* Constructor with parameters & Cholesky factor */ GeneralLinearModelResult::GeneralLinearModelResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Scalar optimalLogLikelihood, const TriangularMatrix & covarianceCholeskyFactor, const HMatrix & covarianceHMatrix) : MetaModelResult(DatabaseFunction(inputSample, outputSample), metaModel, residuals, relativeErrors) , inputData_(inputSample) , inputTransformedData_(inputSample) , inputTransformation_() , hasTransformation_(false) , basis_(basis) , beta_(trendCoefficients) , covarianceModel_(covarianceModel) , optimalLogLikelihood_(optimalLogLikelihood) , hasCholeskyFactor_(true) , covarianceCholeskyFactor_(covarianceCholeskyFactor) , covarianceHMatrix_(covarianceHMatrix) { const UnsignedInteger size = inputSample.getSize(); if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelResult::GeneralLinearModelResult, input & output sample have different size. input sample size = " << size << ", output sample size = " << outputSample.getSize(); const UnsignedInteger outputDimension = outputSample.getDimension(); if (covarianceCholeskyFactor_.getDimension() != 0 && covarianceCholeskyFactor_.getDimension() != size * outputDimension) throw InvalidArgumentException(HERE) << "In GeneralLinearModelResult::GeneralLinearModelResult, Cholesky factor has unexpected dimensions. Its dimension should be " << size * outputDimension << ". Here dimension = " << covarianceCholeskyFactor_.getDimension(); if (covarianceHMatrix_.getNbRows() != 0) { if (covarianceHMatrix_.getNbRows() != covarianceHMatrix_.getNbColumns()) throw InvalidArgumentException(HERE) << "In GeneralLinearModelResult::GeneralLinearModelResult, HMAT Cholesky factor is not square. Its dimension is " << covarianceHMatrix_.getNbRows() << "x" << covarianceHMatrix_.getNbColumns(); if (covarianceHMatrix_.getNbRows() != size * outputDimension) throw InvalidArgumentException(HERE) << "In GeneralLinearModelResult::GeneralLinearModelResult, HMAT Cholesky factor has unexpected dimensions. Its dimension should be " << size * outputDimension << ". Here dimension = " << covarianceHMatrix_.getNbRows(); } } /* Virtual constructor */ GeneralLinearModelResult * GeneralLinearModelResult::clone() const { return new GeneralLinearModelResult(*this); } /* String converter */ String GeneralLinearModelResult::__repr__() const { return OSS(true) << "class=" << getClassName() << ", covariance models=" << covarianceModel_ << ", basis=" << basis_ << ", trend coefficients=" << beta_; } String GeneralLinearModelResult::__str__(const String & offset) const { OSS oss(false); oss << getClassName() << "(" << "covariance models=" << covarianceModel_.__str__(offset) << ", basis=" << basis_.__str__(offset) << ", trend coefficients=" << beta_.__str__(offset) << ")"; return oss; } /* Basis accessor */ GeneralLinearModelResult::BasisCollection GeneralLinearModelResult::getBasisCollection() const { return basis_; } /* Trend coefficients accessor */ GeneralLinearModelResult::PointCollection GeneralLinearModelResult::getTrendCoefficients() const { return beta_; } /* Covariance models accessor */ CovarianceModel GeneralLinearModelResult::getCovarianceModel() const { return covarianceModel_; } Function GeneralLinearModelResult::getTransformation() const { return inputTransformation_; } void GeneralLinearModelResult::setTransformation(const Function & transformation) { if (transformation.getInputDimension() != inputData_.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingResult::setTransformation, incompatible function dimension. Function should have input dimension = " << inputData_.getDimension() << ". Here, function's input dimension = " << transformation.getInputDimension(); inputTransformation_ = transformation; // Map inputData using the transformation inputTransformedData_ = transformation(inputData_); hasTransformation_ = true; } /* Optimal log-likelihood accessor */ Scalar GeneralLinearModelResult::getOptimalLogLikelihood() const { return optimalLogLikelihood_; } /* process accessor */ Process GeneralLinearModelResult::getNoise() const { // Define noise process if (covarianceModel_.getClassName() == "DiracCovarianceModel") { // Here it is assumed that the covariance model parameters are the // marginal amplitude. const Point sigma(covarianceModel_.getParameter()); const CorrelationMatrix R(covarianceModel_.getSpatialCorrelation()); const Normal dist(Point(sigma.getSize(), 0.0), sigma, R); WhiteNoise noise(dist); return noise; } // Other covariance models const GaussianProcess noise(covarianceModel_, Mesh(inputTransformedData_)); return noise; } /* Method that returns the covariance factor - lapack */ TriangularMatrix GeneralLinearModelResult::getCholeskyFactor() const { return covarianceCholeskyFactor_; } /* Method that returns the covariance factor - hmat */ HMatrix GeneralLinearModelResult::getHMatCholeskyFactor() const { return covarianceHMatrix_; } // Return input sample transformed Sample GeneralLinearModelResult::getInputTransformedSample() const { return inputTransformedData_; } /* Method save() stores the object through the StorageManager */ void GeneralLinearModelResult::save(Advocate & adv) const { MetaModelResult::save(adv); adv.saveAttribute( "inputData_", inputData_ ); adv.saveAttribute( "inputTransformedData_", inputTransformedData_ ); adv.saveAttribute( "inputTransformation_", inputTransformation_ ); adv.saveAttribute( "hasTransformation_", hasTransformation_ ); adv.saveAttribute( "basis_", basis_ ); adv.saveAttribute( "beta_", beta_ ); adv.saveAttribute( "covarianceModel_", covarianceModel_ ); adv.saveAttribute( "optimalLogLikelihood_", optimalLogLikelihood_ ); adv.saveAttribute( "hasCholeskyFactor_", hasCholeskyFactor_); adv.saveAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_); } /* Method load() reloads the object from the StorageManager */ void GeneralLinearModelResult::load(Advocate & adv) { MetaModelResult::load(adv); adv.loadAttribute( "inputData_", inputData_ ); adv.loadAttribute( "inputTransformedData_", inputTransformedData_ ); adv.loadAttribute( "inputTransformation_", inputTransformation_ ); adv.loadAttribute( "hasTransformation_", hasTransformation_ ); adv.loadAttribute( "basis_", basis_ ); adv.loadAttribute( "beta_", beta_ ); adv.loadAttribute( "covarianceModel_", covarianceModel_ ); adv.loadAttribute( "optimalLogLikelihood_", optimalLogLikelihood_ ); adv.loadAttribute( "hasCholeskyFactor_", hasCholeskyFactor_); adv.loadAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/KrigingAlgorithm.cxx000066400000000000000000000307441307543307100304510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KrigingAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/KrigingEvaluation.hxx" #include "openturns/KrigingGradient.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/GeneralLinearModelResult.hxx" #include "openturns/ComposedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrigingAlgorithm); static const Factory Factory_KrigingAlgorithm; /* Default constructor */ KrigingAlgorithm::KrigingAlgorithm() : MetaModelAlgorithm() , inputSample_(0, 0) , outputSample_(0, 0) , normalize_(false) , covarianceModel_() , glmAlgo_() , gamma_(0) , rho_(0) , result_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() { // Force the GLM algo to use the exact same linear algebra as the Kriging algorithm if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") glmAlgo_.setMethod(1); else glmAlgo_.setMethod(0); } /* Constructor */ KrigingAlgorithm::KrigingAlgorithm(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool normalize) : MetaModelAlgorithm() , inputSample_(inputSample) , outputSample_(outputSample) , normalize_(normalize) , covarianceModel_() , glmAlgo_() , gamma_(0) , rho_(0) , result_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() { // Here we must force the GLMAlgo to keep the Cholesky factor as it is mandatory // for the interpolation part glmAlgo_ = GeneralLinearModelAlgorithm(inputSample, outputSample, covarianceModel, basis, normalize, true); // Force the GLM algo to use the exact same linear algebra as the Kriging algorithm if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") glmAlgo_.setMethod(1); else glmAlgo_.setMethod(0); } /* Constructor */ KrigingAlgorithm::KrigingAlgorithm(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool normalize) : MetaModelAlgorithm() , inputSample_(inputSample) , outputSample_(outputSample) , normalize_(normalize) , covarianceModel_(covarianceModel) , glmAlgo_() , gamma_(0) , rho_(0) , result_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() { // Here we must force the GLMAlgo to keep the Cholesky factor as it is mandatory // for the interpolation part glmAlgo_ = GeneralLinearModelAlgorithm(inputSample, outputSample, covarianceModel, basisCollection, normalize, true); // Force the GLM algo to use the exact same linear algebra as the Kriging algorithm if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") glmAlgo_.setMethod(1); else glmAlgo_.setMethod(0); } /* Constructor */ KrigingAlgorithm::KrigingAlgorithm(const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis) : MetaModelAlgorithm() , inputSample_(inputSample) , outputSample_(outputSample) , normalize_(true) , covarianceModel_(covarianceModel) , gamma_(0) , rho_(0) , result_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() { // Here we must force the GLMAlgo to keep the Cholesky factor as it is mandatory // for the interpolation part glmAlgo_ = GeneralLinearModelAlgorithm(inputSample, inputTransformation, outputSample, covarianceModel, basis, true); // Force the GLM algo to use the exact same linear algebra as the Kriging algorithm if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") glmAlgo_.setMethod(1); else glmAlgo_.setMethod(0); } /* Constructor */ KrigingAlgorithm::KrigingAlgorithm(const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection) : MetaModelAlgorithm() , inputSample_(inputSample) , outputSample_(outputSample) , normalize_(true) , covarianceModel_(covarianceModel) , glmAlgo_() , gamma_(0) , rho_(0) , result_() , covarianceCholeskyFactor_() , covarianceCholeskyFactorHMatrix_() { // Here we must force the GLMAlgo to keep the Cholesky factor as it is mandatory // for the interpolation part glmAlgo_ = GeneralLinearModelAlgorithm(inputSample, inputTransformation, outputSample, covarianceModel, basisCollection, true); // Force the GLM algo to use the exact same linear algebra as the Kriging algorithm if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") glmAlgo_.setMethod(1); else glmAlgo_.setMethod(0); } /* Virtual constructor */ KrigingAlgorithm * KrigingAlgorithm::clone() const { return new KrigingAlgorithm(*this); } void KrigingAlgorithm::computeGamma() { // Get cholesky factor & rho from glm LOGINFO("Solve L^t.gamma = rho"); if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") { gamma_ = covarianceCholeskyFactorHMatrix_.solveLower(rho_, true); } else { // Arguments are keepIntact=true, matrix_lower=true & solving_transposed=true gamma_ = covarianceCholeskyFactor_.getImplementation()->solveLinearSystemTri(rho_, true, true, true); } } /* Perform regression */ void KrigingAlgorithm::run() { LOGINFO("Launch GeneralLinearModelAlgorithm for the optimization"); glmAlgo_.run(); LOGINFO("End of GeneralLinearModelAlgorithm run"); // Covariance coefficients are computed once, ever if optimiser is fixed rho_ = glmAlgo_.getRho(); /* Method that returns the covariance factor - hmat */ const GeneralLinearModelResult glmResult(glmAlgo_.getResult()); if (ResourceMap::Get("KrigingAlgorithm-LinearAlgebra") == "HMAT") covarianceCholeskyFactorHMatrix_ = glmResult.getHMatCholeskyFactor(); else covarianceCholeskyFactor_ = glmResult.getCholeskyFactor(); LOGINFO("Compute the interpolation part"); computeGamma(); LOGINFO("Store the estimates"); LOGINFO("Build the output meta-model"); Function metaModel; // We use directly the collection of points const BasisCollection basis(glmResult.getBasisCollection()); const Sample normalizedInputSample(glmResult.getInputTransformedSample()); const CovarianceModel conditionalCovarianceModel(glmResult.getCovarianceModel()); const Collection trendCoefficients(glmResult.getTrendCoefficients()); const UnsignedInteger outputDimension = outputSample_.getDimension(); Sample covarianceCoefficients(inputSample_.getSize(), outputDimension); covarianceCoefficients.getImplementation()->setData(gamma_); // Meta model definition metaModel.setEvaluation(new KrigingEvaluation(basis, normalizedInputSample, conditionalCovarianceModel, trendCoefficients, covarianceCoefficients)); metaModel.setGradient(new KrigingGradient(basis, normalizedInputSample, conditionalCovarianceModel, trendCoefficients, covarianceCoefficients)); metaModel.setHessian(new CenteredFiniteDifferenceHessian(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), metaModel.getEvaluation())); // First build the meta-model on the transformed data // Then add the transformation if needed if (normalize_) metaModel = ComposedFunction(metaModel, glmResult.getTransformation()); // compute residual, relative error const Point outputVariance(outputSample_.computeVariance()); const Sample mY(metaModel(inputSample_)); const Point squaredResiduals((outputSample_ - mY).computeRawMoment(2)); const UnsignedInteger size = inputSample_.getSize(); Point residuals(outputDimension); Point relativeErrors(outputDimension); for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++ outputIndex) { residuals[outputIndex] = sqrt(squaredResiduals[outputIndex] / size); relativeErrors[outputIndex] = squaredResiduals[outputIndex] / outputVariance[outputIndex]; } result_ = KrigingResult(inputSample_, outputSample_, metaModel, residuals, relativeErrors, basis, trendCoefficients, conditionalCovarianceModel, covarianceCoefficients, covarianceCholeskyFactor_, covarianceCholeskyFactorHMatrix_); // If normalize, set input transformation if (normalize_) { const Function inputTransformation(glmResult.getTransformation()); result_.setTransformation(inputTransformation); } } /* String converter */ String KrigingAlgorithm::__repr__() const { return OSS() << "class=" << getClassName(); } Sample KrigingAlgorithm::getInputSample() const { return inputSample_; } Sample KrigingAlgorithm::getOutputSample() const { return outputSample_; } KrigingResult KrigingAlgorithm::getResult() { return result_; } /* Optimization solver accessor */ OptimizationAlgorithm KrigingAlgorithm::getOptimizationAlgorithm() const { return glmAlgo_.getOptimizationAlgorithm(); } void KrigingAlgorithm::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { glmAlgo_.setOptimizationAlgorithm(solver); } OptimizationAlgorithm KrigingAlgorithm::getOptimizationSolver() const { Log::Warn(OSS() << "KrigingAlgorithm::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void KrigingAlgorithm::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "KrigingAlgorithm::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } /* Accessor to optimization bounds */ void KrigingAlgorithm::setOptimizationBounds(const Interval & optimizationBounds) { glmAlgo_.setOptimizationBounds(optimizationBounds); } Interval KrigingAlgorithm::getOptimizationBounds() const { return glmAlgo_.getOptimizationBounds(); } /* Log-Likelihood function accessor */ Function KrigingAlgorithm::getReducedLogLikelihoodFunction() { return glmAlgo_.getObjectiveFunction(); } /* Optimize parameters flag accessor */ Bool KrigingAlgorithm::getOptimizeParameters() const { return glmAlgo_.getOptimizeParameters(); } void KrigingAlgorithm::setOptimizeParameters(const Bool optimizeParameters) { glmAlgo_.setOptimizeParameters(optimizeParameters); } /* Observation noise accessor */ void KrigingAlgorithm::setNoise(const Point & noise) { glmAlgo_.setNoise(noise); } Point KrigingAlgorithm::getNoise() const { return glmAlgo_.getNoise(); } /* Method save() stores the object through the StorageManager */ void KrigingAlgorithm::save(Advocate & adv) const { MetaModelAlgorithm::save(adv); adv.saveAttribute( "inputSample_", inputSample_ ); adv.saveAttribute( "normalize_", normalize_ ); adv.saveAttribute( "outputSample_", outputSample_ ); adv.saveAttribute( "covarianceModel_", covarianceModel_ ); adv.saveAttribute( "result_", result_ ); adv.saveAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_ ); } /* Method load() reloads the object from the StorageManager */ void KrigingAlgorithm::load(Advocate & adv) { MetaModelAlgorithm::load(adv); adv.loadAttribute( "inputSample_", inputSample_ ); adv.loadAttribute( "normalize_", normalize_ ); adv.loadAttribute( "outputSample_", outputSample_ ); adv.loadAttribute( "covarianceModel_", covarianceModel_ ); adv.loadAttribute( "result_", result_ ); adv.loadAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/KrigingEvaluation.cxx000066400000000000000000000231441307543307100306260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KrigingEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrigingEvaluation); static const Factory Factory_KrigingEvaluation; static const Factory > Factory_PersistentCollection_Basis; /* Constructor with parameters */ KrigingEvaluation::KrigingEvaluation() : EvaluationImplementation() { // Nothing to do } /* Constructor with parameters */ KrigingEvaluation::KrigingEvaluation (const BasisCollection & basis, const Sample & inputSample, const CovarianceModel & covarianceModel, const PointCollection & beta, const Sample & gamma) : EvaluationImplementation() , basis_(basis) , inputSample_(inputSample) , covarianceModel_(covarianceModel) , beta_(beta) , gamma_(gamma) { if (basis.getSize() > 0) { if (basis.getSize() != covarianceModel.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingEvaluation::KrigingEvaluation, output sample dimension (" << covarianceModel.getDimension() << ") does not match multi-basis dimension (" << basis_.getSize() << ")"; // Total basis size = sum of all sizes UnsignedInteger basisCollectionTotalSize = 0; for (UnsignedInteger i = 0; i < basis.getSize(); ++i) basisCollectionTotalSize += basis[i].getSize(); } if (covarianceModel.getSpatialDimension() != inputSample.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingEvaluation::KrigingEvaluation, error: the spatial dimension=" << covarianceModel.getSpatialDimension() << " of the covariance model should match the dimension=" << inputSample.getDimension() << " of the input sample"; if (gamma.getSize() != inputSample.getSize()) throw InvalidArgumentException(HERE) << "In KrigingEvaluation::KrigingEvaluation, error: the number of covariance coefficients=" << gamma.getSize() << " is different from the output sample dimension=" << covarianceModel.getDimension(); setInputDescription(Description::BuildDefault(getInputDimension(), "x")); setOutputDescription(Description::BuildDefault(getOutputDimension(), "y")); setParameter(Point(getInputDimension())); setParameterDescription(Description(getInputDimension())); } /* Virtual constructor */ KrigingEvaluation * KrigingEvaluation::clone() const { return new KrigingEvaluation(*this); } /* Comparison operator */ Bool KrigingEvaluation::operator==(const KrigingEvaluation & other) const { return true; } /* String converter */ String KrigingEvaluation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " correlationModel=" << covarianceModel_ << " beta=" << beta_ << " gamma=" << gamma_; return oss; } /* String converter */ String KrigingEvaluation::__str__(const String & offset) const { return OSS(false) << offset << GetClassName(); } /* Test for actual implementation */ Bool KrigingEvaluation::isActualImplementation() const { return true; } // Helper for the parallel version of the point-based evaluation operator struct KrigingEvaluationPointFunctor { const Point & input_; const KrigingEvaluation & evaluation_; Point accumulator_; KrigingEvaluationPointFunctor(const Point & input, const KrigingEvaluation & evaluation) : input_(input) , evaluation_(evaluation) , accumulator_(evaluation.getOutputDimension()) {} KrigingEvaluationPointFunctor(const KrigingEvaluationPointFunctor & other, TBB::Split) : input_(other.input_) , evaluation_(other.evaluation_) , accumulator_(other.evaluation_.getOutputDimension()) {} inline void operator()( const TBB::BlockedRange & r ) { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { accumulator_ = accumulator_ + evaluation_.covarianceModel_(input_, evaluation_.inputSample_[i]) * evaluation_.gamma_[i]; } } // operator() inline void join(const KrigingEvaluationPointFunctor & other) { accumulator_ += other.accumulator_; } }; // struct KrigingEvaluationPointFunctor /* Operator () */ Point KrigingEvaluation::operator()(const Point & inP) const { const UnsignedInteger trainingSize = inputSample_.getSize(); // Evaluate the kernel part in parallel KrigingEvaluationPointFunctor functor( inP, *this ); TBB::ParallelReduce( 0, trainingSize, functor ); Point value(functor.accumulator_); // Evaluate the basis part sequentially // Number of basis is 0 or outputDimension for (UnsignedInteger i = 0; i < basis_.getSize(); ++i) { // Get local basis -> basis_[i] const Basis localBasis(basis_[i]); const Point betaBasis(beta_[i]); const UnsignedInteger basisSize = localBasis.getSize(); for (UnsignedInteger j = 0; j < basisSize; ++j) value[i] += localBasis[j](inP)[0] * betaBasis[j]; } ++callsNumber_; return value; } // Helper for the parallel version of the sample-based evaluation operator struct KrigingEvaluationSampleFunctor { const Sample & input_; Sample & output_; const KrigingEvaluation & evaluation_; UnsignedInteger trainingSize_; KrigingEvaluationSampleFunctor(const Sample & input, Sample & output, const KrigingEvaluation & evaluation) : input_(input) , output_(output) , evaluation_(evaluation) , trainingSize_(evaluation.inputSample_.getSize()) {} inline void operator()( const TBB::BlockedRange & r ) const { const UnsignedInteger start = r.begin(); const UnsignedInteger dimension = evaluation_.getOutputDimension(); const UnsignedInteger size = r.end() - start; Matrix R(dimension , trainingSize_ * dimension); for (UnsignedInteger i = 0; i != size; ++i) { for (UnsignedInteger j = 0; j < trainingSize_; ++j) { const CovarianceMatrix localCovariance(evaluation_.covarianceModel_(input_[start + i], evaluation_.inputSample_[j])); for (UnsignedInteger columnIndex = 0; columnIndex < dimension; ++ columnIndex) for (UnsignedInteger rowIndex = 0; rowIndex < dimension; ++ rowIndex) R(rowIndex, columnIndex + j * dimension) = localCovariance(rowIndex, columnIndex); } output_[start + i] = R * evaluation_.gamma_.getImplementation()->getData(); } } // operator() }; // struct KrigingEvaluationSampleFunctor Sample KrigingEvaluation::operator()(const Sample & inS) const { // Evaluation on the sample using parallel functors const UnsignedInteger size = inS.getSize(); const UnsignedInteger dimension = getOutputDimension(); Sample result(size, dimension); const KrigingEvaluationSampleFunctor functor( inS, result, *this ); TBB::ParallelFor( 0, size , functor ); // Evaluate the basis part sequentially // Number of basis is 0 or outputDimension Sample trend(size, 0); for (UnsignedInteger i = 0; i < basis_.getSize(); ++i) { // Get local basis -> basis_[i] const Basis localBasis(basis_[i]); const Point betaBasis(beta_[i]); const UnsignedInteger basisSize = localBasis.getSize(); // For the i-th Basis (marginal), take into account the trend Sample fi(size, 1); for (UnsignedInteger j = 0; j < basisSize; ++j) { Sample fj(localBasis[j](inS)); // scale ==> use of parallelism fj *= betaBasis[j]; // Adding fj to fi fi += fj; } // add it to the trend sample trend.stack(fi); } // Adding trend to result, using parallelism // Add should be done only if there is a trend if (trend.getDimension() > 0) result += trend; // update call numbers & return result callsNumber_ += size; return result; } /* Accessor for input point dimension */ UnsignedInteger KrigingEvaluation::getInputDimension() const { return inputSample_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger KrigingEvaluation::getOutputDimension() const { return covarianceModel_.getDimension(); } /* Method save() stores the object through the StorageManager */ void KrigingEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("basis_", basis_); adv.saveAttribute("inputSample_", inputSample_); adv.saveAttribute("covarianceModel_", covarianceModel_); adv.saveAttribute("beta_", beta_); adv.saveAttribute("gamma_", gamma_); } /* Method load() reloads the object from the StorageManager */ void KrigingEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("basis_", basis_); adv.loadAttribute("inputSample_", inputSample_); adv.loadAttribute("covarianceModel_", covarianceModel_); adv.loadAttribute("beta_", beta_); adv.loadAttribute("gamma_", gamma_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/KrigingGradient.cxx000066400000000000000000000156171307543307100302620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KrigingGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrigingGradient); static const Factory Factory_KrigingGradient; /* Constructor with parameters */ KrigingGradient::KrigingGradient() : GradientImplementation() , basis_() , inputSample_() , covarianceModel_() , beta_() , gamma_() { // Nothing to do here } /* Constructor with parameters */ KrigingGradient::KrigingGradient(const BasisCollection & basis, const Sample & inputSample, const CovarianceModel & covarianceModel, const PointCollection & beta, const Sample & gamma) : GradientImplementation() , basis_(basis) , inputSample_(inputSample) , covarianceModel_(covarianceModel) , beta_(beta) , gamma_(gamma) { if (basis.getSize() > 0) { if (basis.getSize() != covarianceModel.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingGradient::KrigingGradient, output sample dimension (" << covarianceModel.getDimension() << ") does not match multi-basis dimension (" << basis_.getSize() << ")"; // Total basis size = sum of all sizes UnsignedInteger basisCollectionTotalSize = 0; for (UnsignedInteger i = 0; i < basis.getSize(); ++i) basisCollectionTotalSize += basis[i].getSize(); } if (covarianceModel.getSpatialDimension() != inputSample.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingGradient::KrigingGradient, error: the spatial dimension=" << covarianceModel.getSpatialDimension() << " of the covariance model should match the dimension=" << inputSample.getDimension() << " of the input sample"; if (gamma.getSize() != inputSample.getSize()) throw InvalidArgumentException(HERE) << "In KrigingGradient::KrigingGradient, error: the number of covariance coefficients=" << gamma.getSize() << " is different from the output sample dimension=" << covarianceModel.getDimension(); setParameter(Point(getInputDimension())); } /* Virtual constructor */ KrigingGradient * KrigingGradient::clone() const { return new KrigingGradient(*this); } /* Comparison operator */ Bool KrigingGradient::operator==(const KrigingGradient & other) const { return true; } /* String converter */ String KrigingGradient::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " correlationModel=" << covarianceModel_ << " beta=" << beta_ << " gamma=" << gamma_; return oss; } /* String converter */ String KrigingGradient::__str__(const String & offset) const { return OSS(false) << offset << GetClassName(); } /* Test for actual implementation */ Bool KrigingGradient::isActualImplementation() const { return true; } Matrix KrigingGradient::gradient(const Point & inP) const { const UnsignedInteger p = inP.getSize(); if (p != getInputDimension()) throw InvalidArgumentException(HERE) << "In KrigingGradient::gradient, input point should have the same dimension as the KrigingGradient input dimension. Here, inP dimension = " << inP.getSize() << " and KrigingGradient dimension = " << getInputDimension(); const UnsignedInteger dimension = getOutputDimension(); // output result Matrix result(p, dimension); // First part : compute the gradient of R * gamma // As there is a linear combination, we compute the gradient // by using the same sum, i.e \sum_{i=1}^{trainingSize} \nabla{C}(inP, inS[i]) * \gamma_i // Training size const UnsignedInteger trainingSize = inputSample_.getSize(); for (UnsignedInteger i = 0; i < trainingSize; ++ i) { // Partial gradient is a matrix of size p x (dimension * dimension) const Matrix gradient_i( covarianceModel_.partialGradient(inP, inputSample_[i]) ); for (UnsignedInteger j = 0; j < getInputDimension(); ++ j) { // Get the row of size dimension x dimension const Matrix gradient_i_j(dimension, dimension, *gradient_i.getRow(j).getImplementation()); const Point localValue(gradient_i_j * gamma_[i]); for (UnsignedInteger k = 0; k < dimension; ++k) result(j, k) += localValue[k]; } } // trend part const UnsignedInteger basisSize = basis_.getSize(); // Evaluate the basis part sequentially // Number of basis is 0 or outputDimension for (UnsignedInteger i = 0; i < basisSize; ++i) { // Get local basis -> basis_[i] const Basis localBasis(basis_[i]); const Point betaBasis(beta_[i]); const UnsignedInteger localBasisSize = localBasis.getSize(); // For the i-th Basis (marginal), take into account the trend // We write explicitely the linear combination instead of using a LinearCombinationGradient for (UnsignedInteger j = 0; j < localBasisSize; ++j) { const Matrix gradient_bj(localBasis[j].gradient(inP) * betaBasis[j]); for (UnsignedInteger k = 0; k < p; ++k) result(k, i) += gradient_bj(k, 0); } } // update calls number callsNumber_ += p; return result; } /* Accessor for input point dimension */ UnsignedInteger KrigingGradient::getInputDimension() const { return inputSample_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger KrigingGradient::getOutputDimension() const { return covarianceModel_.getDimension(); } /* Method save() stores the object through the StorageManager */ void KrigingGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute("basis_", basis_); adv.saveAttribute("inputSample_", inputSample_); adv.saveAttribute("covarianceModel_", covarianceModel_); adv.saveAttribute("beta_", beta_); adv.saveAttribute("gamma_", gamma_); } /* Method load() reloads the object from the StorageManager */ void KrigingGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute("basis_", basis_); adv.loadAttribute("inputSample_", inputSample_); adv.loadAttribute("covarianceModel_", covarianceModel_); adv.loadAttribute("beta_", beta_); adv.loadAttribute("gamma_", gamma_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/KrigingResult.cxx000066400000000000000000000516361307543307100300040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The result of a kriging estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KrigingResult.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/DatabaseFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrigingResult); static const Factory Factory_KrigingResult; /* Default constructor */ KrigingResult::KrigingResult() : MetaModelResult() { // Nothing to do } /* Constructor with parameters & Cholesky factor */ KrigingResult::KrigingResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Sample & covarianceCoefficients) : MetaModelResult(DatabaseFunction(inputSample, outputSample), metaModel, residuals, relativeErrors) , inputSample_(inputSample) , inputTransformedSample_(inputSample) , inputTransformation_() , hasTransformation_(false) , basis_(basis) , trendCoefficients_(trendCoefficients) , covarianceModel_(covarianceModel) , covarianceCoefficients_(covarianceCoefficients) , hasCholeskyFactor_(false) , covarianceCholeskyFactor_() , covarianceHMatrix_() , F_() , phiT_() , Gt_() { const UnsignedInteger size = inputSample.getSize(); if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "In KrigingResult::KrigingResult, input & output sample have different size. input sample size = " << size << ", output sample size = " << outputSample.getSize(); } /* Constructor with parameters & Cholesky factor */ KrigingResult::KrigingResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Sample & covarianceCoefficients, const TriangularMatrix & covarianceCholeskyFactor, const HMatrix & covarianceHMatrix) : MetaModelResult(DatabaseFunction(inputSample, outputSample), metaModel, residuals, relativeErrors) , inputSample_(inputSample) , inputTransformedSample_(inputSample) , inputTransformation_() , hasTransformation_(false) , basis_(basis) , trendCoefficients_(trendCoefficients) , covarianceModel_(covarianceModel) , covarianceCoefficients_(covarianceCoefficients) , hasCholeskyFactor_(true) , covarianceCholeskyFactor_(covarianceCholeskyFactor) , covarianceHMatrix_(covarianceHMatrix) , F_() , phiT_() , Gt_() { const UnsignedInteger outputDimension = outputSample.getDimension(); const UnsignedInteger size = inputSample.getSize(); if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "In KrigingResult::KrigingResult, input & output sample have different size. input sample size = " << size << ", output sample size = " << outputSample.getSize(); if (covarianceCholeskyFactor_.getDimension() != 0 && covarianceCholeskyFactor_.getDimension() != size * outputDimension) throw InvalidArgumentException(HERE) << "In KrigingResult::KrigingResult, Cholesky factor has unexpected dimensions. Its dimension should be " << size * outputDimension << ". Here dimension = " << covarianceCholeskyFactor_.getDimension(); if (covarianceHMatrix_.getNbRows() != 0) { if (covarianceHMatrix_.getNbRows() != covarianceHMatrix_.getNbColumns()) throw InvalidArgumentException(HERE) << "In KrigingResult::KrigingResult, HMAT Cholesky factor is not square. Its dimension is " << covarianceHMatrix_.getNbRows() << "x" << covarianceHMatrix_.getNbColumns(); if (covarianceHMatrix_.getNbRows() != size * outputDimension) throw InvalidArgumentException(HERE) << "In KrigingResult::KrigingResult, HMAT Cholesky factor has unexpected dimensions. Its dimension should be " << size * outputDimension << ". Here dimension = " << covarianceHMatrix_.getNbRows(); } } /* Virtual constructor */ KrigingResult * KrigingResult::clone() const { return new KrigingResult(*this); } /* String converter */ String KrigingResult::__repr__() const { return OSS(true) << "class=" << getClassName() << ", basis=" << basis_ << ", trend coefficients=" << trendCoefficients_ << ", covariance models=" << covarianceModel_ << ", covariance coefficients=" << covarianceCoefficients_; } String KrigingResult::__str__(const String & offset) const { OSS oss(false); oss << getClassName() << "("; oss << "covariance models=" << covarianceModel_; oss << ", covariance coefficients=" << covarianceCoefficients_; oss << ", basis=" << basis_; oss << ", trend coefficients=" << trendCoefficients_ << ")"; return oss; } /* Design accessors */ Sample KrigingResult::getInputSample() const { return inputSample_; } Sample KrigingResult::getOutputSample() const { return outputSample_; } /* Basis accessor */ KrigingResult::BasisCollection KrigingResult::getBasisCollection() const { return basis_; } /* Trend coefficients accessor */ KrigingResult::PointCollection KrigingResult::getTrendCoefficients() const { return trendCoefficients_; } /* Covariance models accessor */ CovarianceModel KrigingResult::getCovarianceModel() const { return covarianceModel_; } /* Covariance coefficients accessor */ Sample KrigingResult::getCovarianceCoefficients() const { return covarianceCoefficients_; } Function KrigingResult::getTransformation() const { return inputTransformation_; } void KrigingResult::setTransformation(const Function & transformation) { if (transformation.getInputDimension() != inputSample_.getDimension()) throw InvalidArgumentException(HERE) << "In KrigingResult::setTransformation, incompatible function dimension. Function should have input dimension = " << inputSample_.getDimension() << ". Here, function's input dimension = " << transformation.getInputDimension(); inputTransformation_ = transformation; // Map inputData using the transformation inputTransformedSample_ = transformation(inputSample_); hasTransformation_ = true; } /* Compute mean of new points conditionnaly to observations */ Point KrigingResult::getConditionalMean(const Sample & xi) const { // For a process of dimension p & xi's size=s, // returned matrix should have dimensions (p * s) x (p * s) const UnsignedInteger spatialDimension = xi.getDimension(); if (spatialDimension != covarianceModel_.getSpatialDimension()) throw InvalidArgumentException(HERE) << " In KrigingResult::getMean, input data should have the same dimension as covariance model's spatial dimension. Here, (input dimension = " << spatialDimension << ", covariance model spatial's dimension = " << covarianceModel_.getSpatialDimension() << ")"; const UnsignedInteger sampleSize = xi.getSize(); if (sampleSize == 0) throw InvalidArgumentException(HERE) << " In KrigingResult::getConditionalMean, expected a non empty sample"; // Use of metamodel to return result // Need to think if it is required to reimplement a specific method // in order to avoid data copy // sample is of size xi.getSize() * covarianceModel.getDimension() Sample output = metaModel_.operator()(xi); // Result is a Point ==> data are transformed form Sample to // Point by using a copy Point mean(output.getImplementation()->getData()); return mean; } /* Compute mean of new points conditionnaly to observations */ Point KrigingResult::getConditionalMean(const Point & xi) const { // Use of meta model evaluation // For Point, no problematic of copy const Point output = metaModel_.operator()(xi); return output; } struct KrigingResultCrossCovarianceFunctor { const Sample & conditionnedPoints_; const Sample & input_; Matrix & output_; const CovarianceModel & model_; const UnsignedInteger dimension_; KrigingResultCrossCovarianceFunctor(const Sample & conditionnedPoints, const Sample & input, Matrix & output, const CovarianceModel & model) : conditionnedPoints_(conditionnedPoints) , input_(input) , output_(output) , model_(model) , dimension_(model.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { // Fill by column // jLocal ==> which column to fill // jBase : use of block size to determine first element of matrix // iLocal : for a fixed jLocal row, which iLocal-th element to fill // iBase : same as jBase but for rows const UnsignedInteger jLocal = i / conditionnedPoints_.getSize(); const UnsignedInteger jBase = jLocal * dimension_; const UnsignedInteger iLocal = i - jLocal * conditionnedPoints_.getSize(); const UnsignedInteger iBase = iLocal * dimension_; // Local covariance matrix const CovarianceMatrix localCovariance(model_(conditionnedPoints_[iLocal], input_[jLocal])); for (UnsignedInteger ii = 0; ii < dimension_; ++ii) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { output_(iBase + ii, jBase + jj) = localCovariance(ii, jj); } } } } }; /* end struct KrigingResultCrossCovarianceFunctor */ /* Compute cross matrix method ==> not necessary square matrix */ Matrix KrigingResult::getCrossMatrix(const Sample & x) const { // Use of TBB structures // The idea is that we work by blocks // the (i,j) block corresponds to the interaction x[i], inputData[j] // Each block is of size d x d // So we have trainingSize * sampleSize blocks // We fill the matrix by columns const UnsignedInteger trainingSize = inputSample_.getSize(); const UnsignedInteger trainingFullSize = trainingSize * covarianceModel_.getDimension(); const UnsignedInteger sampleSize = x.getSize(); const UnsignedInteger sampleFullSize = sampleSize * covarianceModel_.getDimension(); Matrix result(trainingFullSize, sampleFullSize); const KrigingResultCrossCovarianceFunctor policy( inputTransformedSample_, x, result, covarianceModel_); // The loop is over the lower block-triangular part TBB::ParallelFor( 0, trainingSize * sampleSize, policy ); return result; } /* Compute cross matrix method ==> not necessary square matrix */ void KrigingResult::computeF() const { // Nothing to do if the design matrix has already been computed if (F_.getNbRows() != 0) return; const UnsignedInteger outputDimension = covarianceModel_.getDimension(); const UnsignedInteger sampleSize = inputSample_.getSize(); const UnsignedInteger basisCollectionSize = basis_.getSize(); UnsignedInteger totalSize = 0; for (UnsignedInteger i = 0; i < basisCollectionSize; ++ i ) totalSize += basis_[i].getSize(); // basis_ is of size 0 or outputDimension if (totalSize == 0) return; UnsignedInteger index = 0; // Compute F F_ = Matrix(sampleSize * outputDimension, totalSize); for (UnsignedInteger outputMarginal = 0; outputMarginal < basisCollectionSize; ++ outputMarginal ) { const Basis localBasis(basis_[outputMarginal]); const UnsignedInteger localBasisSize = localBasis.getSize(); for (UnsignedInteger j = 0; j < localBasisSize; ++j, ++index ) { // Here we use potential parallelism in the evaluation of the basis functions const Sample basisSample(localBasis[j](inputTransformedSample_)); for (UnsignedInteger i = 0; i < sampleSize; ++i) F_(outputMarginal + i * outputDimension, index) = basisSample[i][0]; } } } /* Compute covariance matrix conditionnaly to observations*/ CovarianceMatrix KrigingResult::getConditionalCovariance(const Sample & xi) const { // For a process of dimension p & xi's size=s, // returned matrix should have dimensions (p * s) x (p * s) if (!hasCholeskyFactor_) throw InvalidArgumentException(HERE) << "In KrigingResult::getConditionalCovariance, Cholesky factor was not provided. This last one is mandatory to compute the covariance"; const UnsignedInteger spatialDimension = xi.getDimension(); if (spatialDimension != covarianceModel_.getSpatialDimension()) throw InvalidArgumentException(HERE) << " In KrigingResult::getConditionalCovariance, input data should have the same dimension as covariance model's spatial dimension. Here, (input dimension = " << spatialDimension << ", covariance model spatial's dimension = " << covarianceModel_.getSpatialDimension() << ")"; const UnsignedInteger outputDimension = covarianceModel_.getDimension(); const UnsignedInteger sampleSize = xi.getSize(); if (sampleSize == 0) throw InvalidArgumentException(HERE) << " In KrigingResult::getConditionalCovariance, expected a non empty sample"; // 0) Take into account transformation Sample sample; // Transform data if necessary if (hasTransformation_) sample = inputTransformation_(xi); else sample = xi; // 1) compute \sigma_{x,x} LOGINFO("Compute interactions Sigma_xx"); CovarianceMatrix sigmaXX(covarianceModel_.discretize(sample)); // 2) compute \sigma_{y,x} // compute r(x), the crossCovariance between the conditionned data & xi LOGINFO("Compute cross-interactions sigmaYX"); const Matrix crossCovariance = getCrossMatrix(sample); // 3) Compute r^t R^{-1} r'(x) // As we get the Cholesky factor L, we can solve triangular linear system // We define B = L^{-1} * r(x) Matrix B; if (0 != covarianceCholeskyFactor_.getNbRows()) { LOGINFO("Solve L.B = SigmaYX"); B = covarianceCholeskyFactor_.solveLinearSystem(crossCovariance); } else { LOGINFO("Solve L.B = SigmaYX (h-mat version)"); B = covarianceHMatrix_.solveLower(crossCovariance); } // Use of gram to compute B^{t} * B // Default gram computes B*B^t // With transpose argument=true, it performs B^t*B // With full argument=false, lower triangular matrix B^t*B is not symmetrized LOGINFO("Compute B^tB"); CovarianceMatrix BtB(B.computeGram(true)); // Interest is to compute sigma_xx -= BtB // However it is not trivial that A - B is a covariance matrix if A & B are covariance matrices // Symmeric : ok but not necessary definite. Here by definition it is! // So should we define operator - & operator -= with covariances? LOGINFO("Compute Sigma_xx-BtB"); CovarianceMatrix result(*sigmaXX.getImplementation() - *BtB.getImplementation() ); // Case of simple Kriging if(basis_.getSize() == 0) return result; // Case of universal Kriging: compute the covariance due to the regression part // Additionnal information have to be computed // 1) compute F LOGINFO("Compute the regression matrix F"); computeF(); // 2) Interest is (F^t R^{-1} F)^{-1} // F^{t} R^{-1} F = F^{t} L^{-t} L^{-1} F // Solve first L phi = F Matrix Q; if (Gt_.getNbRows() == 0) { LOGINFO("Solve linear system L * phi= F"); Matrix phi; if (0 != covarianceCholeskyFactor_.getNbRows()) phi = covarianceCholeskyFactor_.solveLinearSystem(F_); else phi = covarianceHMatrix_.solveLower(F_); // Compute QR decomposition of Phi_ LOGINFO("Compute the QR decomposition of phi"); Matrix G; Q = phi.computeQR(G); Gt_ = G.transpose(); phiT_ = phi.transpose(); } // 3) Compute u(x) = F^t *R^{-1} * r(x) - f(x) // = F^{t} * L^{-1}^t * L{-1} * r(x) - f(x) // = phiT_ * B - f(x) LOGINFO("Compute psi = phi^t * B"); Matrix psi(phiT_ * B); // compute f(x) & define u = psi - f(x) LOGINFO("Compute f(x)"); // Note that fx = F^{T} for x in inputSample_ Matrix fx(F_.getNbColumns(), sampleSize * covarianceModel_.getDimension()); // Fill fx => equivalent to F for the x data with transposition UnsignedInteger index = 0; for (UnsignedInteger basisMarginal = 0; basisMarginal < basis_.getSize(); ++ basisMarginal ) { const Basis localBasis(basis_[basisMarginal]); const UnsignedInteger localBasisSize = localBasis.getSize(); for (UnsignedInteger j = 0; j < localBasisSize; ++ j ) { // Here we use potential parallelism in the evaluation of the basis functions const Sample basisSample(localBasis[j](sample)); for (UnsignedInteger i = 0; i < sampleSize; ++ i) fx(j + index, basisMarginal + i * outputDimension) = basisSample[i][0]; } index = index + localBasisSize; } LOGINFO("Compute ux = psi - fx"); Matrix ux(psi - fx); // interest now is to solve G rho = ux LOGINFO("Solve linear system G * rho = ux"); Matrix rho = Gt_.solveLinearSystem(ux); LOGINFO("Compute Sigma_xx-BtB + rho^{t}*rho"); result = result + rho.computeGram(true); return result; } /* Compute covariance matrix conditionnaly to observations*/ CovarianceMatrix KrigingResult::getConditionalCovariance(const Point & xi) const { const Sample sample(1, xi); return getConditionalCovariance(sample); } /* Compute joint normal distribution conditionnaly to observations*/ Normal KrigingResult::operator()(const Sample & xi) const { // The Normal distribution is defined by its mean & covariance LOGINFO("In KrigingResult::operator() : evaluationg the mean"); const Point mean = getConditionalMean(xi); LOGINFO("In KrigingResult::operator() : evaluationg the covariance"); const CovarianceMatrix covarianceMatrix = getConditionalCovariance(xi); // Check the covariance matrix. Indeed, if point is very similar to one of the learning points, covariance is null // Even if this check is done in Normal::Normal, we perform debugging LOGINFO("In KrigingResult::operator() : evaluationg the Normal distribution"); if (!const_cast(&covarianceMatrix)->isPositiveDefinite()) throw InvalidArgumentException(HERE) << "In KrigingResult::operator(), the covariance matrix is not positive definite. The given points could be very close to the learning set. Could not build the Normal distribution"; // Finally return the distribution return Normal(mean, covarianceMatrix); } /* Compute joint normal distribution conditionnaly to observations*/ Normal KrigingResult::operator()(const Point & xi) const { Sample sample(1, xi); return operator()(sample); } /* Method save() stores the object through the StorageManager */ void KrigingResult::save(Advocate & adv) const { MetaModelResult::save(adv); adv.saveAttribute( "inputSample_", inputSample_ ); adv.saveAttribute( "inputTransformedSample_", inputTransformedSample_ ); adv.saveAttribute( "inputTransformation_", inputTransformation_ ); adv.saveAttribute( "hasTransformation_", hasTransformation_ ); adv.saveAttribute( "basis_", basis_ ); adv.saveAttribute( "trendCoefficients_", trendCoefficients_ ); adv.saveAttribute( "covarianceModel_", covarianceModel_ ); adv.saveAttribute( "covarianceCoefficients_", covarianceCoefficients_ ); adv.saveAttribute( "hasCholeskyFactor_", hasCholeskyFactor_); adv.saveAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_); adv.saveAttribute( "F_", F_); adv.saveAttribute( "phiT_", phiT_); adv.saveAttribute( "Gt_", Gt_); } /* Method load() reloads the object from the StorageManager */ void KrigingResult::load(Advocate & adv) { MetaModelResult::load(adv); adv.loadAttribute( "inputSample_", inputSample_ ); adv.loadAttribute( "inputTransformedSample_", inputTransformedSample_ ); adv.loadAttribute( "inputTransformation_", inputTransformation_ ); adv.loadAttribute( "hasTransformation_", hasTransformation_ ); adv.loadAttribute( "basis_", basis_ ); adv.loadAttribute( "trendCoefficients_", trendCoefficients_ ); adv.loadAttribute( "covarianceModel_", covarianceModel_ ); adv.loadAttribute( "covarianceCoefficients_", covarianceCoefficients_ ); adv.loadAttribute( "hasCholeskyFactor_", hasCholeskyFactor_); adv.loadAttribute( "covarianceCholeskyFactor_", covarianceCholeskyFactor_); adv.loadAttribute( "F_", F_); adv.loadAttribute( "phiT_", phiT_); adv.loadAttribute( "Gt_", Gt_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/000077500000000000000000000000001307543307100265115ustar00rootroot00000000000000GeneralLinearModelAlgorithm.hxx000066400000000000000000000246321307543307100345320ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns// -*- C++ -*- /** * @brief The class builds generalized linear models * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALLINEARMODELALGORITHM_HXX #define OPENTURNS_GENERALLINEARMODELALGORITHM_HXX #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/Basis.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/KrigingResult.hxx" #include "openturns/HMatrix.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/GeneralLinearModelResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralLinearModelAlgorithm * * The class building generalized linear model */ class OT_API GeneralLinearModelAlgorithm : public MetaModelAlgorithm { CLASSNAME; public: typedef GeneralLinearModelResult::BasisCollection BasisCollection; typedef GeneralLinearModelResult::BasisPersistentCollection BasisPersistentCollection; /** Default constructor */ GeneralLinearModelAlgorithm(); /** Parameters constructor */ GeneralLinearModelAlgorithm (const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Bool normalize = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-NormalizeData"), const Bool keepCholeskyFactor = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-KeepCovariance")); GeneralLinearModelAlgorithm (const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool normalize = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-NormalizeData"), const Bool keepCholeskyFactor = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-KeepCovariance")); /** Parameters constructor */ GeneralLinearModelAlgorithm (const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool keepCholeskyFactor = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-KeepCovariance")); /** Parameters constructor */ GeneralLinearModelAlgorithm (const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool normalize = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-NormalizeData"), const Bool keepCholeskyFactor = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-KeepCovariance")); /** Parameters constructor */ GeneralLinearModelAlgorithm (const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool keepCholeskyFactor = ResourceMap::GetAsBool("GeneralLinearModelAlgorithm-KeepCovariance")); /** Virtual constructor */ GeneralLinearModelAlgorithm * clone() const; /** String converter */ String __repr__() const; /** Perform regression */ void run(); /** input transformation accessor */ void setInputTransformation(const Function & inputTransformation); Function getInputTransformation() const; /** Sample accessors */ Sample getInputSample() const; Sample getOutputSample() const; /** result accessor */ GeneralLinearModelResult getResult(); /** Objective function (reduced log-Likelihood) accessor */ Function getObjectiveFunction(); /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); /** Optimization flag accessor */ Bool getOptimizeParameters() const; void setOptimizeParameters(const Bool optimizeParameters); /** Accessor to optimization bounds */ void setOptimizationBounds(const Interval & optimizationBounds); Interval getOptimizationBounds() const; /** Observation noise accessor */ void setNoise(const Point & noise); Point getNoise() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: // Maximize the reduced log-likelihood Scalar maximizeReducedLogLikelihood(); // Compute the output log-likelihood function Point computeReducedLogLikelihood(const Point & parameters) const; Scalar computeLapackLogDeterminantCholesky() const; Scalar computeHMatLogDeterminantCholesky() const; // Compute the design matrix on the normalized input sample void computeF(); // Normalize the input sample void normalizeInputSample(); /** Method accessor (lapack/hmat) */ void initializeMethod(); void setMethod(const UnsignedInteger method); // Initialize default optimization solver void initializeDefaultOptimizationAlgorithm(); friend class Factory; friend class KrigingAlgorithm; Point getRho() const; private: // Helper class to compute the reduced log-likelihood function of the model class ReducedLogLikelihoodEvaluation: public EvaluationImplementation { public: // Constructor from a GLM algorithm ReducedLogLikelihoodEvaluation(GeneralLinearModelAlgorithm & algorithm) : EvaluationImplementation() , algorithm_(algorithm) { // Nothing to do } ReducedLogLikelihoodEvaluation * clone() const { return new ReducedLogLikelihoodEvaluation(*this); } // It is a simple call to the computeReducedLogLikelihood() of the algo Point operator() (const Point & point) const { const Point value(algorithm_.computeReducedLogLikelihood(point)); return value; } UnsignedInteger getInputDimension() const { return algorithm_.getReducedCovarianceModel().getParameter().getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return algorithm_.getReducedCovarianceModel().getParameterDescription(); } Description getOutputDescription() const { return Description(1, "ReducedLogLikelihood"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } String __repr__() const { OSS oss; // Don't print algorithm_ here as it will result in an infinite loop! oss << "ReducedLogLikelihoodEvaluation"; return oss; } String __str__(const String & offset) const { // Don't print algorithm_ here as it will result in an infinite loop! return __repr__(); } private: GeneralLinearModelAlgorithm & algorithm_; }; // ReducedLogLikelihoodEvaluation /** set sample method */ void setData(const Sample & inputSample, const Sample & outputSample); /** Covariance model accessor */ void setCovarianceModel(const CovarianceModel & covarianceModel); CovarianceModel getCovarianceModel() const; CovarianceModel getReducedCovarianceModel() const; /** Set basis collection method */ void setBasisCollection(const BasisCollection & basisCollection); /** check that sample is centered to precison eps */ void checkYCentered(const Sample & Y); // The input data Sample inputSample_; // Standardized version of the input data Sample normalizedInputSample_; // Standardization function Function inputTransformation_; mutable Bool normalize_; // The associated output data Sample outputSample_; // The covariance model parametric familly CovarianceModel covarianceModel_; mutable CovarianceModel reducedCovarianceModel_; // The optimization algorithm used for the meta-parameters estimation mutable OptimizationAlgorithm solver_; // Bounds used for parameter optimization Interval optimizationBounds_; // The coefficients of the current output conditional expectation part mutable Point beta_; // Temporarly used to compute gamma mutable Point rho_; // The current output Gram matrix mutable Matrix F_; /** Result */ GeneralLinearModelResult result_; /** BasisCollection */ BasisPersistentCollection basisCollection_; /** Cholesky factor ==> TriangularMatrix */ mutable TriangularMatrix covarianceCholeskyFactor_; /** Cholesky factor when using hmat-oss */ mutable HMatrix covarianceCholeskyFactorHMatrix_; /** Boolean argument for keep covariance */ Bool keepCholeskyFactor_; /** Method : 0 (lapack), 1 (hmat) */ UnsignedInteger method_; /** Bool to tell if optimization has run */ mutable Bool hasRun_; /** Flag to tell if the parameters of the covariance model have to be optimized */ Bool optimizeParameters_; /** Observation noise */ Point noise_; /** Flag to tell if the amplitude parameters are estimated using an analytical derivation */ Bool analyticalAmplitude_; /** Cache of the last computed reduced log-likelihood */ mutable Scalar lastReducedLogLikelihood_; }; // class GeneralLinearModelAlgorithm END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/GeneralLinearModelResult.hxx000066400000000000000000000124131307543307100341330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The result of a linear model estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALLINEARMODELRESULT_HXX #define OPENTURNS_GENERALLINEARMODELRESULT_HXX #include "openturns/MetaModelResult.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Basis.hxx" #include "openturns/Function.hxx" #include "openturns/Process.hxx" #include "openturns/HMatrix.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralLinearModelResult * * The result of a generalized linear model evaluation */ class OT_API GeneralLinearModelResult : public MetaModelResult { CLASSNAME; public: // friend class Factory; typedef Collection PointCollection; typedef PersistentCollection PointPersistentCollection; typedef Collection BasisCollection; typedef PersistentCollection BasisPersistentCollection; /** Default constructor */ GeneralLinearModelResult(); /** Parameter constructor without any cholesky factor*/ GeneralLinearModelResult(const Sample & inputData, const Sample & outputData, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Scalar optimalLogLikelihood); /** Parameter constructor with Cholesky factor (Lapack)*/ GeneralLinearModelResult(const Sample & inputData, const Sample & outputData, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Scalar optimalLogLikelihood, const TriangularMatrix & covarianceCholeskyFactor, const HMatrix & covarianceHMatrix); /** Virtual constructor */ GeneralLinearModelResult * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Trend basis accessor */ BasisCollection getBasisCollection() const; /** Trend coefficients accessor */ PointCollection getTrendCoefficients() const; /** Conditional covariance models accessor */ CovarianceModel getCovarianceModel() const; /** Transformation accessor */ Function getTransformation() const; void setTransformation(const Function & transformation); /** process accessor */ Process getNoise() const; /** Optimal likelihood accessor */ Scalar getOptimalLogLikelihood() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: // KrigingAlgorithm::run could ask for the Cholesky factor friend class KrigingAlgorithm; /** Method that returns the covariance factor - lapack */ TriangularMatrix getCholeskyFactor() const; /** Method that returns the covariance factor - hmat */ HMatrix getHMatCholeskyFactor() const; // Return input sample transformed Sample getInputTransformedSample() const; private: /** inputData should be keeped*/ Sample inputData_; /** input transformed data: store data*/ Sample inputTransformedData_; /** inputTransformation ==> iso-probabilistic transformation */ Function inputTransformation_; /** Boolean transformation */ Bool hasTransformation_; /** The trend basis */ BasisPersistentCollection basis_; /** The trend coefficients */ PointPersistentCollection beta_; /** The covariance model */ CovarianceModel covarianceModel_; /** The optimal log-likelihood value */ Scalar optimalLogLikelihood_; /** Boolean for cholesky. */ Bool hasCholeskyFactor_; /** Cholesky factor */ mutable TriangularMatrix covarianceCholeskyFactor_; /** Cholesky factor when using hmat-oss/hmat */ mutable HMatrix covarianceHMatrix_; } ; /* class GeneralLinearModelResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KRIGINGRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/KrigingAlgorithm.hxx000066400000000000000000000116451307543307100325120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRIGINGALGORITHM_HXX #define OPENTURNS_KRIGINGALGORITHM_HXX #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/Basis.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/KrigingResult.hxx" #include "openturns/HMatrix.hxx" #include "openturns/GeneralLinearModelAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrigingAlgorithm * * The class building kriging process, relying on generalized linear model class (GeneralLinearModelAlgorithm) * for the evaluation of the coefficients of the parameters. */ class OT_API KrigingAlgorithm : public MetaModelAlgorithm { CLASSNAME; public: typedef KrigingResult::BasisCollection BasisCollection; typedef KrigingResult::BasisPersistentCollection BasisPersistentCollection; /** Default constructor */ KrigingAlgorithm(); /** Constructor */ KrigingAlgorithm (const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Bool normalize = true); /** Constructor */ KrigingAlgorithm (const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis); /** Constructor */ KrigingAlgorithm (const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection, const Bool normalize = true); /** Constructor */ KrigingAlgorithm (const Sample & inputSample, const Function & inputTransformation, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basisCollection); /** Virtual constructor */ KrigingAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Perform regression */ void run(); /** Sample accessors */ Sample getInputSample() const; Sample getOutputSample() const; /** result accessor */ KrigingResult getResult(); /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); /** Accessor to optimization bounds */ void setOptimizationBounds(const Interval & optimizationBounds); Interval getOptimizationBounds() const; /** Log-Likelihood function accessor */ Function getReducedLogLikelihoodFunction(); /** Optimization flag accessor */ Bool getOptimizeParameters() const; void setOptimizeParameters(const Bool optimizeParameters); /** Observation noise accessor */ void setNoise(const Point & noise); Point getNoise() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The method helps to compute the gamma point */ void computeGamma(); friend class Factory; private: // The input data Sample inputSample_; // The associated output data Sample outputSample_; Bool normalize_; // The covariance model parametric family CovarianceModel covarianceModel_; // Underlying algo used for the evaluation of parameters GeneralLinearModelAlgorithm glmAlgo_; // The coefficients of the current output deterministic trend mutable Point gamma_; // Temporarly used to compute gamma mutable Point rho_; /** Result */ KrigingResult result_; /** Cholesky factor ==> TriangularMatrix */ mutable TriangularMatrix covarianceCholeskyFactor_; /** Cholesky factor when using hmat-oss */ mutable HMatrix covarianceCholeskyFactorHMatrix_; }; // class KrigingAlgorithm END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/KrigingEvaluation.hxx000066400000000000000000000063071307543307100326720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRIGINGEVALUATION_HXX #define OPENTURNS_KRIGINGEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/TBB.hxx" #include "openturns/Collection.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrigingEvaluation * * This class permits prediction on a gaussian process */ class OT_API KrigingEvaluation : public EvaluationImplementation { CLASSNAME public: typedef Collection PointCollection; typedef PersistentCollection PointPersistentCollection; typedef Collection BasisCollection; typedef PersistentCollection BasisPersistentCollection; /** Default constructor */ KrigingEvaluation(); /** Constructor with parameters */ KrigingEvaluation(const BasisCollection & basis, const Sample & inputSample, const CovarianceModel & correlationModel, const PointCollection & beta, const Sample & gamma); /** Virtual constructor */ virtual KrigingEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const KrigingEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /** Operator () */ virtual Point operator()(const Point & inP) const; virtual Sample operator()(const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: // BasisCollection ==> Persistent for save attribut BasisPersistentCollection basis_; /// Training (input) sample Sample inputSample_; /// Correlation model CovarianceModel covarianceModel_; /// Regression weights PointPersistentCollection beta_; Sample gamma_; private: friend struct KrigingEvaluationPointFunctor; friend struct KrigingEvaluationSampleFunctor; }; /* class KrigingEvaluation */ END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/KrigingGradient.hxx000066400000000000000000000057231307543307100323210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class building gaussian process regression * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRIGINGGRADIENT_HXX #define OPENTURNS_KRIGINGGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrigingGradient * * This class permits prediction on a gaussian process */ class OT_API KrigingGradient : public GradientImplementation { CLASSNAME public: typedef Collection PointCollection; typedef PersistentCollection PointPersistentCollection; typedef Collection BasisCollection; typedef PersistentCollection BasisPersistentCollection; /** Default constructor */ KrigingGradient(); /** Constructor with parameters */ KrigingGradient(const BasisCollection & basis, const Sample & inputSample, const CovarianceModel & correlationModel, const PointCollection & beta, const Sample & gamma); /** Virtual constructor */ virtual KrigingGradient * clone() const; /** Comparison operator */ Bool operator ==(const KrigingGradient & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /** Operator () */ // using GradientImplementation::gradient; Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: // BasisCollection ==> Persistent for save attribut BasisPersistentCollection basis_; /// Training (input) sample Sample inputSample_; /// Correlation model CovarianceModel covarianceModel_; /// Regression weights PointPersistentCollection beta_; Sample gamma_; }; END_NAMESPACE_OPENTURNS #endif openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/KrigingResult.hxx000066400000000000000000000141671307543307100320440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The result of a kriging estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRIGINGRESULT_HXX #define OPENTURNS_KRIGINGRESULT_HXX #include "openturns/MetaModelResult.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Sample.hxx" #include "openturns/Collection.hxx" #include "openturns/Basis.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" #include "openturns/Normal.hxx" #include "openturns/HMatrix.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrigingResult * * The result of a chaos expansion */ class OT_API KrigingResult : public MetaModelResult { CLASSNAME; public: // friend class Factory; typedef Collection PointCollection; typedef PersistentCollection PointPersistentCollection; typedef Collection BasisCollection; typedef PersistentCollection BasisPersistentCollection; /** Default constructor */ KrigingResult(); /** Parameter constructor without any cholesky factor*/ KrigingResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Sample & covarianceCoefficients); /** Parameter constructor with Cholesky factor (Lapack)*/ KrigingResult(const Sample & inputSample, const Sample & outputSample, const Function & metaModel, const Point & residuals, const Point & relativeErrors, const BasisCollection & basis, const PointCollection & trendCoefficients, const CovarianceModel & covarianceModel, const Sample & covarianceCoefficients, const TriangularMatrix & covarianceCholeskyFactor, const HMatrix & covarianceHMatrix); /** Virtual constructor */ virtual KrigingResult * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Design accessors */ virtual Sample getInputSample() const; virtual Sample getOutputSample() const; /** Trend basis accessor */ virtual BasisCollection getBasisCollection() const; /** Trend coefficients accessor */ virtual PointCollection getTrendCoefficients() const; /** Conditional covariance models accessor */ virtual CovarianceModel getCovarianceModel() const; /** Process coefficients accessor */ virtual Sample getCovarianceCoefficients() const; /** Transformation accessor */ virtual Function getTransformation() const; virtual void setTransformation(const Function & transformation); /** Compute mean of new points conditionnaly to observations */ virtual Point getConditionalMean(const Sample & xi) const; /** Compute mean of new points conditionnaly to observations */ virtual Point getConditionalMean(const Point & xi) const; /** Compute covariance matrix conditionnaly to observations*/ virtual CovarianceMatrix getConditionalCovariance(const Sample & xi) const ; /** Compute covariance matrix conditionnaly to observations*/ virtual CovarianceMatrix getConditionalCovariance(const Point & xi) const; /** Compute joint normal distribution conditionnaly to observations*/ virtual Normal operator()(const Sample & xi) const; /** Compute joint normal distribution conditionnaly to observations*/ virtual Normal operator()(const Point & xi) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Compute cross matrix method ==> not necessary square matrix */ Matrix getCrossMatrix(const Sample & x) const; void computeF() const; private: // Structure for evaluation of crossCovariance friend struct KrigingResultCrossCovarianceFunctor; /** inputData should be keeped*/ Sample inputSample_; /** input transformed data: store data*/ Sample inputTransformedSample_; Sample outputSample_; /** inputTransformation ==> iso-probabilistic transformation */ Function inputTransformation_; /** Boolean transformation */ Bool hasTransformation_; /** The trend basis */ BasisPersistentCollection basis_; /** The trend coefficients */ PointPersistentCollection trendCoefficients_; /** The covariance model */ CovarianceModel covarianceModel_; /** The covariance coefficients */ Sample covarianceCoefficients_; /** Boolean for cholesky. The factor is not mandatory (see KrigingAlgorithm) */ Bool hasCholeskyFactor_; /** Cholesky factor */ mutable TriangularMatrix covarianceCholeskyFactor_; /** Cholesky factor when using hmat-oss */ mutable HMatrix covarianceHMatrix_; /** Matrix F : the regression matrix */ mutable Matrix F_; /** Matrix phi = L^{-1}F ==> phiT is the transposed matrix */ mutable Matrix phiT_; /** Matrix F^{t}R^{-1}F writes phi_ = L^{-1}F ==> QR decomposition */ // G_ is the triangular matrix ==> Gt the transposed mutable Matrix Gt_; } ; /* class KrigingResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KRIGINGRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/Kriging/openturns/OTKriging.hxx000066400000000000000000000023241307543307100311000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Kriging * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTKRIGING_HXX #define OPENTURNS_OTKRIGING_HXX #include "openturns/KrigingEvaluation.hxx" #include "openturns/KrigingGradient.hxx" #include "openturns/KrigingAlgorithm.hxx" #include "openturns/KrigingResult.hxx" #include "openturns/GeneralLinearModelResult.hxx" #include "openturns/GeneralLinearModelAlgorithm.hxx" #endif /* OPENTURNS_OTKRIGING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/MetaModelAlgorithm.cxx000066400000000000000000000055741307543307100273370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for metamodel algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MetaModelAlgorithm); static const Factory Factory_MetaModelAlgorithm; /* Default constructor */ MetaModelAlgorithm::MetaModelAlgorithm() : PersistentObject() { // Nothing to do } /* Constructor with parameters */ MetaModelAlgorithm::MetaModelAlgorithm(const Distribution & distribution, const Function & model) : PersistentObject() , distribution_(distribution) , model_(model) { // Nothing to do } /* Virtual constructor */ MetaModelAlgorithm * MetaModelAlgorithm::clone() const { return new MetaModelAlgorithm(*this); } /* String converter */ String MetaModelAlgorithm::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName(); return oss; } /* Distribution accessor */ void MetaModelAlgorithm::setDistribution(const Distribution & distribution) { distribution_ = distribution; } Distribution MetaModelAlgorithm::getDistribution() const { return distribution_; } /* Response surface computation */ void MetaModelAlgorithm::run() { throw NotYetImplementedException(HERE) << "In MetaModelAlgorithm::run()"; } Sample MetaModelAlgorithm::getInputSample() const { throw NotYetImplementedException(HERE) << "In MetaModelAlgorithm::getInputSample() const"; } Sample MetaModelAlgorithm::getOutputSample() const { throw NotYetImplementedException(HERE) << "In MetaModelAlgorithm::getOutputSample() const"; } /* Method save() stores the object through the StorageManager */ void MetaModelAlgorithm::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "model_", model_ ); } /* Method load() reloads the object from the StorageManager */ void MetaModelAlgorithm::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "model_", model_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/MetaModelResult.cxx000066400000000000000000000066141307543307100266630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Result of a Meta-model algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MetaModelResult.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MetaModelResult); static const Factory Factory_MetaModelResult; /* Default constructor */ MetaModelResult::MetaModelResult() : PersistentObject() , residuals_(0) , relativeErrors_(0) { // Nothing to do } /* Standard constructor */ MetaModelResult::MetaModelResult(const Function & model, const Function & metaModel, const Point & residuals, const Point & relativeErrors) : PersistentObject() , model_(model) , metaModel_(metaModel) , residuals_(residuals) , relativeErrors_(relativeErrors) { // Nothing to do } /* Virtual constructor */ MetaModelResult * MetaModelResult::clone() const { return new MetaModelResult(*this); } /* Model accessor */ void MetaModelResult::setModel(const Function & model) { model_ = model; } Function MetaModelResult::getModel() const { return model_; } /* MetaModel accessor */ void MetaModelResult::setMetaModel(const Function & metaModel) { metaModel_ = metaModel; } Function MetaModelResult::getMetaModel() const { return metaModel_; } /* Marginal residuals accessor */ void MetaModelResult::setResiduals(const Point & residuals) { residuals_ = residuals; } Point MetaModelResult::getResiduals() const { return residuals_; } /* Relative error accessor */ void MetaModelResult::setRelativeErrors(const Point & relativeErrors) { relativeErrors_ = relativeErrors; } Point MetaModelResult::getRelativeErrors() const { return relativeErrors_; } /* String converter */ String MetaModelResult::__repr__() const { OSS oss; oss << "model=" << model_ << " metaModel=" << metaModel_ << " residuals=" << residuals_ << " relativeErrors=" << relativeErrors_; return oss; } /* Method save() stores the object through the StorageManager */ void MetaModelResult::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "model_", model_ ); adv.saveAttribute( "metaModel_", metaModel_ ); adv.saveAttribute( "residuals_", residuals_ ); adv.saveAttribute( "relativeErrors_", relativeErrors_ ); } /* Method load() reloads the object from the StorageManager */ void MetaModelResult::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "model_", model_ ); adv.loadAttribute( "metaModel_", metaModel_ ); adv.loadAttribute( "residuals_", residuals_ ); adv.loadAttribute( "relativeErrors_", relativeErrors_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/MetaModelValidation.cxx000066400000000000000000000132301307543307100274670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for metamodel validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MetaModelValidation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/KernelSmoothing.hxx" #include "openturns/HistogramFactory.hxx" #include "openturns/Curve.hxx" #include "openturns/Cloud.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MetaModelValidation); static const Factory Factory_MetaModelValidation; /* Default constructor */ MetaModelValidation::MetaModelValidation() : PersistentObject() , inputSample_() , outputSample_() , metaModel_() , isInitialized_(false) , residual_() , q2_() { // Nothing to do } /* Constructor with parameters */ MetaModelValidation::MetaModelValidation(const Sample & inputSample, const Sample & outputSample, const Function & metaModel) : PersistentObject() , inputSample_(inputSample) , outputSample_(outputSample) , metaModel_(metaModel) , isInitialized_(false) , residual_() , q2_() { if (inputSample_.getSize() != outputSample_.getSize()) throw InvalidArgumentException(HERE) << "Input & output samples have different size." << " Input size = " << inputSample_.getSize() << ", output size = " << outputSample_.getSize(); if (outputSample_.getDimension() != 1) throw InvalidArgumentException(HERE) << "Output sample should be of dimension 1"; if (inputSample_.getDimension() != metaModel_.getInputDimension()) throw InvalidArgumentException(HERE) << "Input sample have different size from metamodel." << " Input sample dimension = " << inputSample_.getDimension() << ", metamodel input dimension = " << metaModel_.getInputDimension(); if (metaModel_.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Metamodel output dimension should be 1. Here, dim = " << metaModel_.getOutputDimension(); } /* Virtual constructor */ MetaModelValidation * MetaModelValidation::clone() const { return new MetaModelValidation(*this); } /* String converter */ String MetaModelValidation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " input validation sample = " << inputSample_ << " output validation sample = " << outputSample_ << " metaModel = " << metaModel_; return oss; } void MetaModelValidation::initialize() const { // Initialize // We compute first the residual sample // This last one is stored and retured by getResidualSample method // From this, it dervies also the Q2 factor residual_ = outputSample_ - metaModel_(inputSample_); q2_ = 1.0 - residual_.computeVariance()[0] / outputSample_.computeVariance()[0]; isInitialized_ = true; } Sample MetaModelValidation::getInputSample() const { return inputSample_; } Sample MetaModelValidation::getOutputSample() const { return outputSample_; } Scalar MetaModelValidation::computePredictivityFactor() const { if (!isInitialized_) initialize(); return q2_; } /* Get residual sample */ Sample MetaModelValidation::getResidualSample() const { if (!isInitialized_) initialize(); return residual_; } /* Get residual distribution */ Distribution MetaModelValidation::getResidualDistribution(const Bool smooth) const { if (!isInitialized_) initialize(); if (!smooth) { return HistogramFactory().build(residual_); } return KernelSmoothing().build(residual_); } /* Draw model vs metamodel validation graph */ Graph MetaModelValidation::drawValidation() const { // Build the first drawable const Sample yhat = metaModel_(inputSample_); Curve curve(outputSample_, outputSample_); curve.setColor("blue"); curve.setLegend("Model"); Cloud cloud(outputSample_, yhat); // set color cloud.setColor("red"); cloud.setLegend("MetaModel"); Graph graph("Metamodel validation", "model", "metamodel", true, "bottomright"); // Add drawables graph.add(curve); graph.add(cloud); return graph; } /* Method save() stores the object through the StorageManager */ void MetaModelValidation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "inputSample_", inputSample_ ); adv.saveAttribute( "outputSample_", outputSample_ ); adv.saveAttribute( "metaModel_", metaModel_ ); adv.saveAttribute( "isInitialized_", isInitialized_ ); adv.saveAttribute( "residual_", residual_ ); adv.saveAttribute( "q2_", q2_ ); } /* Method load() reloads the object from the StorageManager */ void MetaModelValidation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "inputSample_", inputSample_ ); adv.loadAttribute( "outputSample_", outputSample_ ); adv.loadAttribute( "metaModel_", metaModel_ ); adv.loadAttribute( "isInitialized_", isInitialized_ ); adv.loadAttribute( "residual_", residual_ ); adv.loadAttribute( "q2_", q2_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/000077500000000000000000000000001307543307100271075ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/CMakeLists.txt000066400000000000000000000011511307543307100316450ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (CanonicalTensorEvaluation.cxx) ot_add_source_file (CanonicalTensorGradient.cxx) ot_add_source_file (TensorApproximationResult.cxx) ot_add_source_file (TensorApproximationAlgorithm.cxx) ot_install_header_file (OTTensorApproximation.hxx) ot_install_header_file (CanonicalTensorEvaluation.hxx) ot_install_header_file (CanonicalTensorGradient.hxx) ot_install_header_file (TensorApproximationResult.hxx) ot_install_header_file (TensorApproximationAlgorithm.hxx) CanonicalTensorEvaluation.cxx000066400000000000000000000144011307543307100346660ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation// -*- C++ -*- /** * @brief Canonical tensor representation and evaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CanonicalTensorEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/UniVariateFunctionEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CanonicalTensorEvaluation); static const Factory Factory_CanonicalTensorEvaluation; CanonicalTensorEvaluation::CanonicalTensorEvaluation() : EvaluationImplementation() { // Nothing to do } CanonicalTensorEvaluation::CanonicalTensorEvaluation(const FunctionFamilyCollection & functionFamilies, const Indices & nk, const UnsignedInteger rank) : EvaluationImplementation() , degrees_(nk) , coefficients_(nk.getSize()) , basis_(nk.getSize()) { const UnsignedInteger dimension = functionFamilies.getSize(); if (dimension != nk.getSize()) throw InvalidArgumentException(HERE) << "The number of function factories (" << dimension << ") is different from number of basis sizes (" << nk.getSize() << ")"; if (rank == 0) throw InvalidArgumentException(HERE) << "Rank cannot be null"; for (UnsignedInteger j = 0; j < dimension; ++ j) { coefficients_[j] = Sample(rank, nk[j]); basis_[j] = Basis(nk[j]); for (UnsignedInteger k = 0; k < nk[j]; ++ k) { basis_[j][k] = Function(UniVariateFunctionEvaluation(functionFamilies[j].build(k))); } } } /* Virtual constructor */ CanonicalTensorEvaluation * CanonicalTensorEvaluation::clone() const { return new CanonicalTensorEvaluation(*this); } Indices CanonicalTensorEvaluation::getDegrees() const { return degrees_; } /* Coefficients accessor along i-th component */ void CanonicalTensorEvaluation::setCoefficients(const UnsignedInteger i, const UnsignedInteger j, const Point & coefficients) { coefficients_[j][i] = coefficients; } Point CanonicalTensorEvaluation::getCoefficients(const UnsignedInteger i, const UnsignedInteger j) const { return coefficients_[j][i]; } /* Basis accessor along i-th component */ Basis CanonicalTensorEvaluation::getBasis(const UnsignedInteger i) const { return basis_[i]; } void CanonicalTensorEvaluation::setRank(const UnsignedInteger rank) { if (rank == 0) throw InvalidArgumentException(HERE) << "Rank cannot be null"; const UnsignedInteger oldRank = getRank(); // initialize added tensor coefficients for (UnsignedInteger j = 0; j < getInputDimension(); ++ j) { if (rank > oldRank) { // add coefficients coefficients_[j].add(Sample(rank - oldRank, degrees_[j])); } else if (rank < oldRank) { // remove coefficients coefficients_[j] = Sample(coefficients_[j], 0, rank); } } } UnsignedInteger CanonicalTensorEvaluation::getRank() const { return coefficients_[0].getSize(); } CanonicalTensorEvaluation CanonicalTensorEvaluation::getMarginalRank(const UnsignedInteger i) const { CanonicalTensorEvaluation rankOne(*this); rankOne.setRank(1); for (UnsignedInteger j = 0; j < getInputDimension(); ++ j) { rankOne.setCoefficients(0, j, getCoefficients(i, j)); } return rankOne; } /* String converter */ String CanonicalTensorEvaluation::__repr__() const { return OSS() << "class=" << getClassName() << " degrees=" << degrees_ << " coefficients=" << coefficients_ << " basis=" << basis_; } String CanonicalTensorEvaluation::__str__(const String & offset) const { return __repr__(); } /* Evaluation operator */ Point CanonicalTensorEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << inputDimension << ", got dimension=" << inP.getDimension(); const UnsignedInteger m = getRank(); Point prodI(m, 1.0); for (UnsignedInteger j = 0; j < inputDimension; ++ j) { const Point xj(1, inP[j]); const Basis basisI(getBasis(j)); const UnsignedInteger basisSize = degrees_[j]; // compute phi_(j,k)(xj) Point phiX(basisSize); for (UnsignedInteger k = 0; k < basisSize; ++ k) { phiX[k] = basisI[k](xj)[0]; } for (UnsignedInteger i = 0; i < m; ++ i) { const Point coeffI(getCoefficients(i, j)); Scalar sumI = 0.0; for (UnsignedInteger k = 0; k < basisSize; ++ k) { if (coeffI[k] != 0.0) { sumI += coeffI[k] * phiX[k]; } } prodI[i] *= sumI; } } Scalar sumR = 0.0; for (UnsignedInteger i = 0; i < m; ++ i) { sumR += prodI[i]; } const Point outP(1, sumR); if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(outP); } ++ callsNumber_; return outP; } /* Dimension accessor */ UnsignedInteger CanonicalTensorEvaluation::getInputDimension() const { return coefficients_.getSize(); } UnsignedInteger CanonicalTensorEvaluation::getOutputDimension() const { return 1; } /* Method save() stores the object through the StorageManager */ void CanonicalTensorEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute("degrees_", degrees_); adv.saveAttribute("coefficients_", coefficients_); adv.saveAttribute("basis_", basis_); } /* Method load() reloads the object from the StorageManager */ void CanonicalTensorEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute("degrees_", degrees_); adv.loadAttribute("coefficients_", coefficients_); adv.loadAttribute("basis_", basis_); } END_NAMESPACE_OPENTURNS CanonicalTensorGradient.cxx000066400000000000000000000112071307543307100343150ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation// -*- C++ -*- /** * @brief Canonical tensor gradient * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CanonicalTensorGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CanonicalTensorGradient); static const Factory Factory_CanonicalTensorGradient; /* Default constructor */ CanonicalTensorGradient::CanonicalTensorGradient() : GradientImplementation() , evaluation_() { // Nothing to do } // CanonicalTensorGradient /* Default constructor */ CanonicalTensorGradient::CanonicalTensorGradient(const CanonicalTensorEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } // CanonicalTensorGradient /* Virtual constructor */ CanonicalTensorGradient * CanonicalTensorGradient::clone() const { return new CanonicalTensorGradient(*this); } /* Comparison operator */ Bool CanonicalTensorGradient::operator ==(const CanonicalTensorGradient & other) const { return (evaluation_ == other.evaluation_); } /* String converter */ String CanonicalTensorGradient::__repr__() const { OSS oss(true); oss << "class=" << CanonicalTensorGradient::GetClassName() << " name=" << getName() << " evaluation=" << evaluation_; return oss; } /* String converter */ String CanonicalTensorGradient::__str__(const String & offset) const { return __repr__(); } /* Gradient */ Matrix CanonicalTensorGradient::gradient(const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: trying to evaluate a Function with an argument of invalid dimension"; const UnsignedInteger outputDimension = getOutputDimension(); ++ callsNumber_; const UnsignedInteger m = evaluation_.getRank(); Point prodI(m, 1.0); Sample sumRI(m, inputDimension); Sample sumdRI(m, inputDimension); for (UnsignedInteger j = 0; j < inputDimension; ++ j) { const Point xj(1, inP[j]); const Basis basisI(evaluation_.getBasis(j)); const UnsignedInteger basisSize = evaluation_.getDegrees()[j]; // compute phi_(i,j)(xj), phi_(i,j)'(xj) Point phiXj(basisSize); Point dphiXj(basisSize); for (UnsignedInteger k = 0; k < basisSize; ++ k) { phiXj[k] = basisI[k](xj)[0]; dphiXj[k] = basisI[k].gradient(xj)(0, 0); } for (UnsignedInteger i = 0; i < m; ++ i) { const Point coeffI(evaluation_.getCoefficients(i, j)); Scalar sumI = 0.0; Scalar sumdI = 0.0; for (UnsignedInteger k = 0; k < basisSize; ++ k) { if (coeffI[k] != 0.0) { sumI += coeffI[k] * phiXj[k]; sumdI += coeffI[k] * dphiXj[k]; } } sumRI[i][j] = sumI; sumdRI[i][j] = sumdI; prodI[i] *= sumI; } } Matrix out(inputDimension, outputDimension); for (UnsignedInteger j = 0; j < inputDimension; ++ j) { Scalar dj = 0.0; for (UnsignedInteger i = 0; i < m; ++ i) { dj += prodI[i] * (sumdRI[i][j] / sumRI[i][j]); } out(j, 0) = dj; } return out; } /* Accessor for input point dimension */ UnsignedInteger CanonicalTensorGradient::getInputDimension() const { return evaluation_.getInputDimension(); } /* Accessor for output point dimension */ UnsignedInteger CanonicalTensorGradient::getOutputDimension() const { return evaluation_.getOutputDimension(); } /* Method save() stores the object through the StorageManager */ void CanonicalTensorGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute("evaluation_", evaluation_); } /* Method load() reloads the object from the StorageManager */ void CanonicalTensorGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute("evaluation_", evaluation_); *this = CanonicalTensorGradient(evaluation_); } END_NAMESPACE_OPENTURNS TensorApproximationAlgorithm.cxx000066400000000000000000000475421307543307100354640ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation// -*- C++ -*- /** * @brief Tensor approximation algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TensorApproximationAlgorithm.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Point.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/NormalCopulaFactory.hxx" #include "openturns/ConstantBasisFactory.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/OrthogonalProductFunctionFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/DatabaseEvaluation.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/SparseMethod.hxx" #include "openturns/DistributionTransformation.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection DistributionCollection; typedef Collection FunctionCollection; typedef Collection FunctionFamilyCollection; CLASSNAMEINIT(TensorApproximationAlgorithm); static const Factory Factory_TensorApproximationAlgorithm; /* Default constructor */ TensorApproximationAlgorithm::TensorApproximationAlgorithm() : MetaModelAlgorithm() , maxRank_(1) , maximumAlternatingLeastSquaresIteration_(ResourceMap::GetAsUnsignedInteger("TensorApproximationAlgorithm-DefaultMaximumAlternatingLeastSquaresIteration")) , maximumRadiusError_(ResourceMap::GetAsScalar("TensorApproximationAlgorithm-DefaultMaximumRadiusError")) , maximumResidualError_(ResourceMap::GetAsScalar("TensorApproximationAlgorithm-DefaultMaximumResidualError")) { // Nothing to do } /* Constructor */ TensorApproximationAlgorithm::TensorApproximationAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const OrthogonalProductFunctionFactory & basisFactory, const Indices & degrees, const UnsignedInteger maxRank) : MetaModelAlgorithm(distribution, Function(FunctionImplementation(DatabaseEvaluation(inputSample, outputSample, false).clone()))) , inputSample_(inputSample) , outputSample_(outputSample) , maxRank_(maxRank) , basisFactory_(basisFactory) , maximumAlternatingLeastSquaresIteration_(ResourceMap::GetAsUnsignedInteger("TensorApproximationAlgorithm-DefaultMaximumAlternatingLeastSquaresIteration")) , maximumRadiusError_(ResourceMap::GetAsScalar("TensorApproximationAlgorithm-DefaultMaximumRadiusError")) , maximumResidualError_(ResourceMap::GetAsScalar("TensorApproximationAlgorithm-DefaultMaximumResidualError")) { // Check sample size if (inputSample.getSize() != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; FunctionFamilyCollection functionFamilies(basisFactory.getFunctionFamilyCollection()); if (degrees.getSize() != functionFamilies.getSize()) throw InvalidArgumentException(HERE) << "degrees size (" << degrees.getSize() << ") must match orthogonal basis factories (" << functionFamilies.getSize() << ")"; tensor_ = Collection(outputSample.getDimension(), CanonicalTensorEvaluation(functionFamilies, degrees)); } /* Virtual constructor */ TensorApproximationAlgorithm * TensorApproximationAlgorithm::clone() const { return new TensorApproximationAlgorithm(*this); } /* String converter */ String TensorApproximationAlgorithm::__repr__() const { return OSS() << "class=" << getClassName(); } /* Computes the functional chaos */ void TensorApproximationAlgorithm::run() { const UnsignedInteger outputDimension = outputSample_.getDimension(); // First, compute all the parts that are independent of the marginal output // Create the isoprobabilistic transformation // We have two distributions here: // + The distribution of the input, called distribution_ // + The distribution defining the inner product in basis, called measure // The projection is done on the basis, ie wrt measure_, so we have to // introduce an isoprobabilistic transformation that maps distribution_ onto // measure // // Get the measure upon which the orthogonal basis is built // const OrthogonalBasis basis(adaptiveStrategy_.getImplementation()->basis_); const Distribution measure(basisFactory_.getMeasure()); const DistributionTransformation transformation(distribution_, measure); transformation_ = transformation; inverseTransformation_ = transformation.inverse(); // Build the composed model g = f o T^{-1}, which is a function of Z so it can be decomposed upon an orthonormal basis based on Z distribution const Bool noTransformation = (measure == distribution_); LOGINFO("Transform the input sample in the measure space if needed"); if (noTransformation) composedModel_ = model_; else composedModel_ = ComposedFunction(model_, inverseTransformation_); transformedInputSample_ = transformation_(inputSample_); FunctionCollection marginals(0); Point residuals(outputDimension); Point relativeErrors(outputDimension); for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++ outputIndex) { runMarginal(outputIndex, residuals[outputIndex], relativeErrors[outputIndex]); } // Build the result result_ = TensorApproximationResult(distribution_, transformation_, inverseTransformation_, composedModel_, tensor_, residuals, relativeErrors); } /* Marginal computation */ void TensorApproximationAlgorithm::runMarginal(const UnsignedInteger marginalIndex, Scalar & marginalResidual, Scalar & marginalRelativeError) { // proxies are reused accross marginals because the basis is the same const UnsignedInteger dimension = transformedInputSample_.getDimension(); if (proxy_.getSize() == 0) { proxy_ = Collection(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { proxy_[i] = DesignProxy(transformedInputSample_.getMarginal(i), tensor_[marginalIndex].getBasis(i)); } } const String method(ResourceMap::Get("TensorApproximationAlgorithm-Method")); if (method == "GreedyRankOne") { greedyRankOne(transformedInputSample_, outputSample_.getMarginal(marginalIndex), tensor_[marginalIndex], marginalResidual, marginalRelativeError); } else if (method == "RankM") { rankM(transformedInputSample_, outputSample_.getMarginal(marginalIndex), tensor_[marginalIndex], marginalResidual, marginalRelativeError); } else throw InvalidArgumentException(HERE) << "Invalid method: " << method; } void TensorApproximationAlgorithm::greedyRankOne (const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, Scalar & marginalResidual, Scalar & marginalRelativeError) { Sample yRes(y); const UnsignedInteger dimension = x.getDimension(); for (UnsignedInteger i = 0; i < maxRank_; ++ i) { tensor.setRank(i + 1); // initialize tensor coefficients on last rank for (UnsignedInteger j = 0; j < dimension; ++ j) { Point coefficients(tensor.getCoefficients(i, j)); coefficients[0] = 1.0;// vj(xj) = 1.0 tensor.setCoefficients(i, j, coefficients); } rankOne(x, yRes, tensor, i, marginalResidual, marginalRelativeError); // build basis FunctionCollection prodColl(i + 1); for (UnsignedInteger i2 = 0; i2 <= i; ++ i2) { prodColl[i2] = Function(tensor.getMarginalRank(i2).clone()); } const Basis basis(prodColl); DesignProxy proxy(x, basis); Indices full(prodColl.getSize()); full.fill(); // update radius const String methodName(ResourceMap::Get("TensorApproximationAlgorithm-DecompositionMethod")); LeastSquaresMethod internalMethod(LeastSquaresMethod::Build(methodName, proxy, full)); SparseMethod method(internalMethod); Point yFlat(y.getImplementation()->getData()); Point rk(method.solve(yFlat)); for (UnsignedInteger i2 = 0; i2 <= i; ++ i2) { // report radius on first component tensor.setCoefficients(i2, 0, rk[i2] * tensor.getCoefficients(i2, 0)); } // compute residual Function tensorFunction(tensor.clone()); yRes = y - tensorFunction(x); if (rk[i] == 0.0) { // the last basis term leads to a null coeff: no need to learn more ranks tensor.setRank(i); break; } } // for i } void TensorApproximationAlgorithm::rankOne(const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, const UnsignedInteger i, Scalar & marginalResidual, Scalar & marginalRelativeError) { Bool convergence = false; const UnsignedInteger dimension = x.getDimension(); const UnsignedInteger size = x.getSize(); if (size != y.getSize()) throw InvalidArgumentException(HERE) << " x != y"; Point yFlat(y.getImplementation()->getData()); Scalar currentResidual = SpecFunc::MaxScalar; Sample V(dimension, Point(size, 1.0)); UnsignedInteger iteration = 0; while (!convergence && (iteration < maximumAlternatingLeastSquaresIteration_)) { const Scalar oldRadius = tensor.getCoefficients(i, 0).norm(); for (UnsignedInteger j = 0; j < dimension; ++ j) { Log::Info(OSS() << " j=" << j << "/" << dimension); const UnsignedInteger basisSize = tensor.getCoefficients(i, j).getSize(); Indices full(basisSize); full.fill(); Point w(size, 1.0);// w_l for (UnsignedInteger p = 0; p < size; ++ p) { for (UnsignedInteger j2 = 0; j2 < dimension; ++ j2) { if (j2 != j) w[p] *= V[j2][p]; } } if (proxy_[j].hasRowFilter()) { // compute non-filtered weights for reuse in proxy Indices rowFilter(proxy_[j].getRowFilter()); const UnsignedInteger actualSize = proxy_[j].getInputSample().getSize(); Point w_big(actualSize); for (UnsignedInteger p = 0; p < size; ++ p) { w_big[rowFilter[p]] = w[p]; } w = w_big; } proxy_[j].setWeight(w); // solve a least-squares problem along component j const String methodName(ResourceMap::Get("TensorApproximationAlgorithm-DecompositionMethod")); LeastSquaresMethod method(LeastSquaresMethod::Build(methodName, proxy_[j], full)); tensor.setCoefficients(i, j, method.solve(yFlat)); proxy_[j].setWeight(Point(0)); // update current contribution V[j] = Matrix(proxy_[j].computeDesign(full)) * tensor.getCoefficients(i, j); } // j loop // update alpha Point f(size, 1.0); for (UnsignedInteger j = 0; j < dimension; ++ j) { for (UnsignedInteger p = 0; p < size; ++ p) { f[p] *= V[j][p]; } } Scalar currentRadius = dot(f, yFlat) / f.normSquare(); for (UnsignedInteger j = 0; j < dimension; ++ j) { Point coefficients(tensor.getCoefficients(i, j)); coefficients = tensor.getCoefficients(i, j); const Scalar norm = coefficients.norm(); currentRadius *= norm; coefficients /= norm; tensor.setCoefficients(i, j, coefficients); } Log::Info(OSS() << "alpha=" << currentRadius); const Scalar radiusError = std::abs(oldRadius - currentRadius); // report radius on first component tensor.setCoefficients(i, 0, currentRadius * tensor.getCoefficients(i, 0)); // compute residual marginalResidual = 0.0; for (UnsignedInteger p = 0; p < size; ++ p) { Scalar prod = currentRadius; for (UnsignedInteger j = 0; j < dimension; ++ j) { prod *= V[j][p]; } const Scalar slack = y[p][0] - prod; marginalResidual += slack * slack / size; } marginalRelativeError = marginalResidual / y.computeVariance()[0]; const Scalar residualError = std::abs(currentResidual - marginalResidual); currentResidual = marginalResidual; convergence = (residualError < maximumResidualError_) && (radiusError < maximumRadiusError_); Log::Info(OSS() << "iteration=" << iteration << " residualError=" << residualError << " radiusError=" << radiusError); ++ iteration; } } void TensorApproximationAlgorithm::rankM (const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, Scalar & marginalResidual, Scalar & marginalRelativeError) { Bool convergence = false; const UnsignedInteger dimension = x.getDimension(); const UnsignedInteger size = x.getSize(); UnsignedInteger m = maxRank_; tensor.setRank(m); // initialize tensor coefficients up to rank m for (UnsignedInteger i = 0; i < m; ++ i) for (UnsignedInteger j = 0; j < dimension; ++ j) { Point coefficients(tensor.getCoefficients(i, j)); coefficients[0] = 1.0;// vj(xj) = 1.0 tensor.setCoefficients(i, j, coefficients); } UnsignedInteger iteration = 0; Scalar currentResidual = SpecFunc::MaxScalar; while (!convergence && (iteration < maximumAlternatingLeastSquaresIteration_)) { for (UnsignedInteger j = 0; j < dimension; ++ j) { rankMComponent(x, y, tensor, j); } // normalize coefficients for (UnsignedInteger i = 0; i < m; ++ i) { Scalar radius_i = 1.0; for (UnsignedInteger j = 0; j < dimension; ++ j) { Point coefficients(tensor.getCoefficients(i, j)); const Scalar norm = coefficients.norm(); radius_i *= norm; coefficients /= norm; tensor.setCoefficients(i, j, coefficients); } } // build basis of rank one tensors FunctionCollection prodColl(m); for (UnsignedInteger i = 0; i < m; ++ i) { prodColl[i] = Function(tensor.getMarginalRank(i).clone()); } const Basis basis(prodColl); DesignProxy proxy(x, basis); Indices full(prodColl.getSize()); full.fill(); // update radius const String methodName(ResourceMap::Get("TensorApproximationAlgorithm-DecompositionMethod")); LeastSquaresMethod internalMethod(LeastSquaresMethod::Build(methodName, proxy, full)); SparseMethod method(internalMethod); Point yFlat(y.getImplementation()->getData()); Point rk(method.solve(yFlat)); // report radius on first component for (UnsignedInteger i = 0; i < m; ++ i) { Point coefficients0(tensor.getCoefficients(i, 0)); coefficients0 *= rk[i]; tensor.setCoefficients(i, 0, coefficients0); } // compute residual marginalResidual = 0.0; for (UnsignedInteger p = 0; p < size; ++ p) { const Scalar slack = y[p][0] - tensor(x[p])[0]; marginalResidual += slack * slack / size; } marginalRelativeError = marginalResidual / y.computeVariance()[0]; const Scalar residualError = std::abs(currentResidual - marginalResidual); currentResidual = marginalResidual; convergence = (residualError < maximumResidualError_);// && (radiusError < maximumRadiusError_); Log::Info(OSS() << "iteration=" << iteration << " residualError=" << residualError);// << " radiusError=" << radiusError); ++ iteration; } } void TensorApproximationAlgorithm::rankMComponent (const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, const UnsignedInteger j) { const UnsignedInteger dimension = x.getDimension(); const UnsignedInteger size = x.getSize(); const UnsignedInteger nj = tensor.getDegrees()[j]; const UnsignedInteger m = tensor.getRank(); Collection V(m, Sample(dimension, Point(size, 1.0))); // compute contributions for (UnsignedInteger i = 0; i < m; ++ i) { for (UnsignedInteger j2 = 0; j2 < dimension; ++ j2) { const UnsignedInteger basisSize = tensor.getDegrees()[j2]; Indices full(basisSize); full.fill(); V[i][j2] = Matrix(proxy_[j2].computeDesign(full)) * tensor.getCoefficients(i, j2); } } // compute weight Point w(size, 0.0);// w_p for (UnsignedInteger p = 0; p < size; ++ p) { for (UnsignedInteger i = 0; i < m; ++ i) { Scalar wi = 1.0; for (UnsignedInteger j2 = 0; j2 < dimension; ++ j2) { if (j2 != j) wi *= V[i][j2][p]; } w[p] += wi; } } Basis basis; const Basis basisj(tensor.getBasis(j)); for (UnsignedInteger i = 0; i < m; ++ i) { for (UnsignedInteger k = 0; k < nj; ++ k) { basis.add(basisj[k]); } } DesignProxy proxy(transformedInputSample_.getMarginal(j), basis); proxy.setWeight(w); Indices full(nj * m); full.fill(); Point yFlat(y.getImplementation()->getData()); const String methodName(ResourceMap::Get("TensorApproximationAlgorithm-DecompositionMethod")); LeastSquaresMethod method(LeastSquaresMethod::Build(methodName, proxy, full)); Point beta_ij(method.solve(yFlat)); for (UnsignedInteger i = 0; i < m; ++ i) { Point beta_j(nj); std::copy(beta_ij.begin() + i * nj, beta_ij.begin() + (i + 1) * nj, beta_j.begin()); tensor.setCoefficients(i, j, beta_j); } } /* Get the result */ TensorApproximationResult TensorApproximationAlgorithm::getResult() const { return result_; } Sample TensorApproximationAlgorithm::getInputSample() const { return inputSample_; } Sample TensorApproximationAlgorithm::getOutputSample() const { return outputSample_; } /* Max ALS iteration accessor */ void TensorApproximationAlgorithm::setMaximumAlternatingLeastSquaresIteration(const UnsignedInteger maximumAlternatingLeastSquaresIteration) { maximumAlternatingLeastSquaresIteration_ = maximumAlternatingLeastSquaresIteration; } UnsignedInteger TensorApproximationAlgorithm::getMaximumAlternatingLeastSquaresIteration() const { return maximumAlternatingLeastSquaresIteration_; } /* Radius error accessor */ void TensorApproximationAlgorithm::setMaximumRadiusError(const Scalar maximumRadiusError) { maximumRadiusError_ = maximumRadiusError; } Scalar TensorApproximationAlgorithm::getMaximumRadiusError() const { return maximumRadiusError_; } /* Residual error accessor */ void TensorApproximationAlgorithm::setMaximumResidualError(const Scalar maximumResidualError) { maximumResidualError_ = maximumResidualError; } Scalar TensorApproximationAlgorithm::getMaximumResidualError() const { return maximumResidualError_; } /* Method save() stores the object through the StorageManager */ void TensorApproximationAlgorithm::save(Advocate & adv) const { MetaModelAlgorithm::save(adv); adv.saveAttribute("inputSample_", inputSample_); adv.saveAttribute("outputSample_", outputSample_); adv.saveAttribute("maxRank_", maxRank_); adv.saveAttribute("maximumAlternatingLeastSquaresIteration_", maximumAlternatingLeastSquaresIteration_); adv.saveAttribute("maximumRadiusError_", maximumRadiusError_); adv.saveAttribute("maximumResidualError_", maximumResidualError_); adv.saveAttribute("result_", result_); } /* Method load() reloads the object from the StorageManager */ void TensorApproximationAlgorithm::load(Advocate & adv) { MetaModelAlgorithm::load(adv); adv.loadAttribute("inputSample_", inputSample_); adv.loadAttribute("outputSample_", outputSample_); adv.loadAttribute("maxRank_", maxRank_); adv.loadAttribute("maximumAlternatingLeastSquaresIteration_", maximumAlternatingLeastSquaresIteration_); adv.loadAttribute("maximumRadiusError_", maximumRadiusError_); adv.loadAttribute("maximumResidualError_", maximumResidualError_); adv.saveAttribute("result_", result_); } END_NAMESPACE_OPENTURNS TensorApproximationResult.cxx000066400000000000000000000131121307543307100347760ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation// -*- C++ -*- /** * @brief The result of a tensor approximation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TensorApproximationResult.hxx" #include "openturns/Os.hxx" #include "openturns/OSS.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/CenteredFiniteDifferenceHessian.hxx" #include "openturns/CanonicalTensorGradient.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TensorApproximationResult); static const Factory Factory_TensorApproximationResult; static const Factory > Factory_PersistentCollection_CanonicalTensorEvaluation; /* Default constructor */ TensorApproximationResult::TensorApproximationResult() : MetaModelResult() , distribution_() , transformation_() , inverseTransformation_() , composedModel_() { // Nothing to do } /* Default constructor */ TensorApproximationResult::TensorApproximationResult( const Distribution & distribution, const Function & transformation, const Function & inverseTransformation, const Function & composedModel, const Collection & tensorCollection, const Point & residuals, const Point & relativeErrors) : MetaModelResult(Function(), Function(), residuals, relativeErrors) , distribution_(distribution) , transformation_(transformation) , inverseTransformation_(inverseTransformation) , composedModel_(composedModel) , tensorCollection_(tensorCollection) , composedMetaModel_() { FunctionCollection marginals; const UnsignedInteger outputDimension = tensorCollection_.getSize();// for now for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++ outputIndex) { Function tensorFunction; tensorFunction.setEvaluation(tensorCollection_[outputIndex].clone()); tensorFunction.setGradient(CanonicalTensorGradient(tensorCollection_[outputIndex])); marginals.add(tensorFunction); } composedMetaModel_ = Function(marginals); metaModel_ = Function(composedMetaModel_, transformation); } /* Virtual constructor */ TensorApproximationResult * TensorApproximationResult::clone() const { return new TensorApproximationResult(*this); } /* String converter */ String TensorApproximationResult::__repr__() const { return OSS(true) << "class=" << getClassName() << " derived from " << MetaModelResult::__repr__() << " distribution=" << distribution_ << " transformation=" << transformation_ << " inverseTransformation=" << inverseTransformation_ << " composedModel=" << composedModel_ << " relativeErrors=" << relativeErrors_ << " composedMetaModel=" << composedMetaModel_ << " metaModel=" << metaModel_; } String TensorApproximationResult::__str__(const String & offset) const { OSS oss(false); oss << offset << "meta model=" << metaModel_ << Os::GetEndOfLine(); // oss << offset << "orthogonal basis=" << orthogonalBasis_; return oss; } /* Distribution accessor */ Distribution TensorApproximationResult::getDistribution() const { return distribution_; } /* IsoProbabilisticTransformation accessor */ Function TensorApproximationResult::getTransformation() const { return transformation_; } /* InverseIsoProbabilisticTransformation accessor */ Function TensorApproximationResult::getInverseTransformation() const { return inverseTransformation_; } /* Composed model accessor */ Function TensorApproximationResult::getComposedModel() const { return composedModel_; } /* Composed meta model accessor */ Function TensorApproximationResult::getComposedMetaModel() const { return composedMetaModel_; } CanonicalTensorEvaluation TensorApproximationResult::getTensor(const UnsignedInteger marginalIndex) const { return tensorCollection_[marginalIndex]; } /* Method save() stores the object through the StorageManager */ void TensorApproximationResult::save(Advocate & adv) const { MetaModelResult::save(adv); adv.saveAttribute("distribution_", distribution_); adv.saveAttribute("transformation_", transformation_); adv.saveAttribute("inverseTransformation_", inverseTransformation_); adv.saveAttribute("composedModel_", composedModel_); adv.saveAttribute("tensorCollection_", tensorCollection_); adv.saveAttribute("composedMetaModel_", composedMetaModel_); } /* Method load() reloads the object from the StorageManager */ void TensorApproximationResult::load(Advocate & adv) { MetaModelResult::load(adv); adv.loadAttribute("distribution_", distribution_); adv.loadAttribute("transformation_", transformation_); adv.loadAttribute("inverseTransformation_", inverseTransformation_); adv.loadAttribute("composedModel_", composedModel_); adv.loadAttribute("tensorCollection_", tensorCollection_); adv.loadAttribute("composedMetaModel_", composedMetaModel_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns/000077500000000000000000000000001307543307100311445ustar00rootroot00000000000000CanonicalTensorEvaluation.hxx000066400000000000000000000057651307543307100367450ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns// -*- C++ -*- /** * @brief Canonical tensor representation and evaluation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CANONICALTENSOREVALUATION_HXX #define OPENTURNS_CANONICALTENSOREVALUATION_HXX #include "openturns/OrthogonalUniVariateFunctionFamily.hxx" #include "openturns/Basis.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API CanonicalTensorEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection FunctionFamilyCollection; typedef PersistentCollection FunctionFamilyPersistentCollection; CanonicalTensorEvaluation(); CanonicalTensorEvaluation(const FunctionFamilyCollection & functionFamilies, const Indices & degrees, const UnsignedInteger rank = 1); /** Virtual constructor */ virtual CanonicalTensorEvaluation * clone() const; /** Evaluation operator */ virtual Point operator() (const Point & point) const; /** Dimension accessor */ virtual UnsignedInteger getInputDimension() const; virtual UnsignedInteger getOutputDimension() const; Indices getDegrees() const; /** Coefficients accessor for rank m along i-th component */ void setCoefficients(const UnsignedInteger i, const UnsignedInteger j, const Point & coefficients); Point getCoefficients(const UnsignedInteger i, const UnsignedInteger j) const; /** Basis accessor along i-th component */ Basis getBasis(const UnsignedInteger i) const; void setRank(const UnsignedInteger rank); UnsignedInteger getRank() const; CanonicalTensorEvaluation getMarginalRank(const UnsignedInteger i) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: // subbasis sizes Indices degrees_; // subbasis coefficients PersistentCollection coefficients_; PersistentCollection basis_; }; END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CANONICALTENSOREVALUATION_HXX */ CanonicalTensorGradient.hxx000066400000000000000000000045361307543307100363660ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns// -*- C++ -*- /** * @brief Canonical tensor gradient * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CANONICALTENSORGRADIENT_HXX #define OPENTURNS_CANONICALTENSORGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/CanonicalTensorEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CanonicalTensorGradient * * The class that implement the gradient of a canonical tensor. */ class OT_API CanonicalTensorGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ CanonicalTensorGradient(); /** Default constructor */ explicit CanonicalTensorGradient(const CanonicalTensorEvaluation & evaluation); /** Virtual constructor */ virtual CanonicalTensorGradient * clone() const; /** Comparison operator */ Bool operator ==(const CanonicalTensorGradient & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Operator () */ using GradientImplementation::gradient; Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: CanonicalTensorEvaluation evaluation_; }; /* class CanonicalTensorGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CANONICALTENSORGRADIENT_HXX */ OTTensorApproximation.hxx000066400000000000000000000023051307543307100361060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir TensorApproximation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTENSORAPPROXIMATION_HXX #define OPENTURNS_OTTENSORAPPROXIMATION_HXX #include "openturns/CanonicalTensorEvaluation.hxx" #include "openturns/CanonicalTensorGradient.hxx" #include "openturns/TensorApproximationResult.hxx" #include "openturns/TensorApproximationAlgorithm.hxx" #endif /* OPENTURNS_OTTENSORAPPROXIMATION_HXX */ TensorApproximationAlgorithm.hxx000066400000000000000000000122241307543307100375130ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns// -*- C++ -*- /** * @brief Tensor approximation algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSORAPPROXIMATIONALGORITHM_HXX #define OPENTURNS_TENSORAPPROXIMATIONALGORITHM_HXX #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/CanonicalTensorEvaluation.hxx" #include "openturns/TensorApproximationResult.hxx" #include "openturns/OrthogonalProductFunctionFactory.hxx" #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TensorApproximationAlgorithm * * Tensor approximation algorithm */ class OT_API TensorApproximationAlgorithm : public MetaModelAlgorithm { CLASSNAME; public: /** Constructor */ TensorApproximationAlgorithm(const Sample & inputSample, const Sample & outputSample, const Distribution & distribution, const OrthogonalProductFunctionFactory & functionFactory, const Indices & nk, const UnsignedInteger maxRank = 1); /** Virtual constructor */ virtual TensorApproximationAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Computes the functional chaos */ void run(); /** Result accessor */ TensorApproximationResult getResult() const; /** Sample accessors */ Sample getInputSample() const; Sample getOutputSample() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** Max ALS iteration accessor */ void setMaximumAlternatingLeastSquaresIteration(const UnsignedInteger maximumAlternatingLeastSquaresIteration); UnsignedInteger getMaximumAlternatingLeastSquaresIteration() const; /** Radius error accessor */ void setMaximumRadiusError(const Scalar maximumRadiusError); Scalar getMaximumRadiusError() const; /** Residual error accessor */ void setMaximumResidualError(const Scalar maximumResidualError); Scalar getMaximumResidualError() const; protected: friend class Factory; /** Default constructor */ TensorApproximationAlgorithm(); private: /** Marginal computation */ void runMarginal(const UnsignedInteger marginalIndex, Scalar & marginalResidual, Scalar & marginalRelativeError); /** Greedy rank-1 algorithm */ void greedyRankOne(const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, Scalar & marginalResidual, Scalar & marginalRelativeError); /** Alternating least-squares algorithm to estimate a rank-1 tensor */ void rankOne(const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, const UnsignedInteger k, Scalar & marginalResidual, Scalar & marginalRelativeError); /** Rank-M algorithm */ void rankM (const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, Scalar & marginalResidual, Scalar & marginalRelativeError); void rankMComponent (const Sample & x, const Sample & y, CanonicalTensorEvaluation & tensor, const UnsignedInteger j); /** The isoprobabilistic transformation maps the distribution into the orthogonal measure */ Function transformation_; /** The inverse isoprobabilistic transformation */ Function inverseTransformation_; /** The composed model */ Function composedModel_; // samples Sample inputSample_; Sample outputSample_; UnsignedInteger maxRank_; Sample transformedInputSample_; // tensorized basis OrthogonalProductFunctionFactory basisFactory_; // tensor format Collection tensor_; // maximum rank-1 iterations UnsignedInteger maximumAlternatingLeastSquaresIteration_; // error on the radius for rank-1 Scalar maximumRadiusError_; // error on the residual for rank-1 Scalar maximumResidualError_; mutable Collection proxy_; /** Result of the projection */ TensorApproximationResult result_; } ; /* class TensorApproximationAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TENSORAPPROXIMATIONALGORITHM_HXX */ TensorApproximationResult.hxx000066400000000000000000000073161307543307100370510ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/TensorApproximation/openturns// -*- C++ -*- /** * @brief The result of a tensor approximation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TENSORAPPROXIMATIONRESULT_HXX #define OPENTURNS_TENSORAPPROXIMATIONRESULT_HXX #include "openturns/MetaModelResult.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Indices.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/OrthogonalBasis.hxx" #include "openturns/CanonicalTensorEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TensorApproximationResult * * The result of a tensor approximation */ class OT_API TensorApproximationResult : public MetaModelResult { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; /** Default constructor */ TensorApproximationResult(); /** Parameter constructor */ TensorApproximationResult(const Distribution & distribution, const Function & transformation, const Function & inverseTransformation, const Function & composedModel, const Collection & tensorCollection, const Point & residuals, const Point & relativeErrors); /** Virtual constructor */ virtual TensorApproximationResult * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Distribution accessor */ virtual Distribution getDistribution() const; /** IsoProbabilisticTransformation accessor */ virtual Function getTransformation() const; /** InverseIsoProbabilisticTransformation accessor */ virtual Function getInverseTransformation() const; /** Composed model accessor */ virtual Function getComposedModel() const; /** Composed meta model accessor */ virtual Function getComposedMetaModel() const; CanonicalTensorEvaluation getTensor(const UnsignedInteger marginalIndex = 0) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** The input vector distribution */ Distribution distribution_; /** The isoprobabilistic transformation maps the distribution into the orthogonal measure */ Function transformation_; /** The inverse isoprobabilistic transformation */ Function inverseTransformation_; /** The composed model */ Function composedModel_; PersistentCollection tensorCollection_; /** Composed meta model */ Function composedMetaModel_; } ; /* class TensorApproximationResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TENSORAPPROXIMATIONRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/openturns/000077500000000000000000000000001307543307100251175ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/openturns/MetaModelAlgorithm.hxx000066400000000000000000000044571307543307100314000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for metamodel algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_METAMODELALGORITHM_HXX #define OPENTURNS_METAMODELALGORITHM_HXX #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/MetaModelResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MetaModelAlgorithm * */ class OT_API MetaModelAlgorithm : public PersistentObject { CLASSNAME; public: /** Default constructor */ MetaModelAlgorithm(); /** Constructor with parameters */ MetaModelAlgorithm(const Distribution & distribution, const Function & model); /** Virtual constructor */ virtual MetaModelAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Response surface computation */ virtual void run(); /** Sample accessors */ virtual Sample getInputSample() const; virtual Sample getOutputSample() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The input vector distribution */ Distribution distribution_; /** The model */ Function model_; private: }; /* class MetaModelAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_METAMODELALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/openturns/MetaModelResult.hxx000066400000000000000000000051431307543307100307210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Result of a Meta-model algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_METAMODELRESULT_HXX #define OPENTURNS_METAMODELRESULT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Function.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MetaModelResult * Implementation of SimulationResult */ class OT_API MetaModelResult : public PersistentObject { CLASSNAME; public: /** Default constructor */ MetaModelResult(); /** Standard constructor */ MetaModelResult(const Function & model, const Function & metaModel, const Point & residuals, const Point & relativeErrors); /** Virtual constructor */ virtual MetaModelResult * clone() const; /** Model accessor */ virtual void setModel(const Function & model); virtual Function getModel() const; /** MetaModel accessor */ virtual void setMetaModel(const Function & metaModel); virtual Function getMetaModel() const; /** Marginal residuals accessor */ virtual void setResiduals(const Point & residuals); virtual Point getResiduals() const; /** Marginal relative errors accessor */ virtual void setRelativeErrors(const Point & relativeErrors); virtual Point getRelativeErrors() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: // The initial model Function model_; // The corresponding meta-model Function metaModel_; // The marginal residuals Point residuals_; // The marginal relative errors Point relativeErrors_; }; // class MetaModelResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_METAMODELRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/openturns/MetaModelValidation.hxx000066400000000000000000000053241307543307100315360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for metamodel validation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_METAMODELVALIDATION_HXX #define OPENTURNS_METAMODELVALIDATION_HXX #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MetaModelValidation * */ class OT_API MetaModelValidation : public PersistentObject { CLASSNAME; public: /** Default constructor */ MetaModelValidation(); /** Constructor with parameters */ MetaModelValidation(const Sample & inputSample, const Sample & outputSample, const Function & metaModel); /** Virtual constructor */ virtual MetaModelValidation * clone() const; /** String converter */ virtual String __repr__() const; /** Sample accessors */ virtual Sample getInputSample() const; virtual Sample getOutputSample() const; /** Compute predictivity factor */ Scalar computePredictivityFactor() const; /** Get residual sample */ Sample getResidualSample() const; /** Get residual distribution */ Distribution getResidualDistribution(const Bool smooth = true) const; /** Draw model vs metamodel validation graph */ Graph drawValidation() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: void initialize() const; /** The input sample */ Sample inputSample_; /** The output sample */ Sample outputSample_; /** The meta model */ Function metaModel_; /** Boolean argument */ mutable Bool isInitialized_; /** Residual sample */ mutable Sample residual_; /** Q2 arguments */ mutable Scalar q2_; private: }; /* class MetaModelValidation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_METAMODELVALIDATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/MetaModel/openturns/OTMetaModel.hxx000066400000000000000000000023201307543307100277570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir MetaModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTMETAMODEL_HXX #define OPENTURNS_OTMETAMODEL_HXX #include "openturns/OTFunctionalChaos.hxx" #include "openturns/OTKriging.hxx" #include "openturns/OTTensorApproximation.hxx" #include "openturns/MetaModelAlgorithm.hxx" #include "openturns/MetaModelResult.hxx" #include "openturns/MetaModelValidation.hxx" #endif /* OPENTURNS_OTMETAMODEL_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/000077500000000000000000000000001307543307100237015ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/CMakeLists.txt000066400000000000000000000004611307543307100264420ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (EfficientGlobalOptimization.cxx) ot_install_header_file (EfficientGlobalOptimization.hxx) ot_install_header_file (OTUncertaintyOptimization.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/EfficientGlobalOptimization.cxx000066400000000000000000000473471307543307100320700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief EfficientGlobalOptimization or EGO algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EfficientGlobalOptimization.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Cobyla.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/KrigingAlgorithm.hxx" #include "openturns/MultiStart.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/Uniform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EfficientGlobalOptimization); static const Factory Factory_EfficientGlobalOptimization; /* Constructor with parameters */ EfficientGlobalOptimization::EfficientGlobalOptimization() : OptimizationAlgorithmImplementation() , solver_(new Cobyla) , useDefaultSolver_(true) , multiStartExperimentSize_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartExperimentSize")) , multiStartNumber_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartNumber")) , parameterEstimationPeriod_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultParameterEstimationPeriod")) , improvementFactor_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultImprovementFactor")) , correlationLengthFactor_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultCorrelationLengthFactor")) , aeiTradeoff_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultAEITradeoff")) { } /* Constructor with parameters */ EfficientGlobalOptimization::EfficientGlobalOptimization(const OptimizationProblem & problem, const KrigingResult & krigingResult) : OptimizationAlgorithmImplementation(problem) , krigingResult_(krigingResult) , solver_(new Cobyla) , useDefaultSolver_(true) , multiStartExperimentSize_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartExperimentSize")) , multiStartNumber_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartNumber")) , parameterEstimationPeriod_(ResourceMap::GetAsUnsignedInteger("EfficientGlobalOptimization-DefaultParameterEstimationPeriod")) , improvementFactor_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultImprovementFactor")) , correlationLengthFactor_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultCorrelationLengthFactor")) , aeiTradeoff_(ResourceMap::GetAsScalar("EfficientGlobalOptimization-DefaultAEITradeoff")) { checkProblem(problem); } class ExpectedImprovementEvaluation : public EvaluationImplementation { public: ExpectedImprovementEvaluation (const Scalar optimalValue, const KrigingResult & metaModelResult, const Function & noiseModel) : EvaluationImplementation() , optimalValue_(optimalValue) , metaModelResult_(metaModelResult) , noiseModel_(noiseModel) { } virtual ExpectedImprovementEvaluation * clone() const { return new ExpectedImprovementEvaluation(*this); } Point operator()(const Point & x) const { const Scalar mx = metaModelResult_.getMetaModel()(x)[0]; const Scalar fmMk = optimalValue_ - mx; const Scalar sk2 = metaModelResult_.getConditionalCovariance(x)(0, 0); const Scalar sk = sqrt(sk2); if (!SpecFunc::IsNormal(sk)) return Point(1, -SpecFunc::MaxScalar); const Scalar ratio = fmMk / sk; Scalar ei = fmMk * normal_.computeCDF(ratio) + sk * normal_.computePDF(ratio); if (noiseModel_.getOutputDimension() == 1) // if provided { const Scalar noiseVariance = noiseModel_(x)[0]; if (!(noiseVariance >= 0.0)) throw InvalidArgumentException(HERE) << "Noise model must be positive"; ei *= (1.0 - sqrt(noiseVariance) / sqrt(noiseVariance + sk2)); } return Point(1, ei); } Sample operator()(const Sample & theta) const { const UnsignedInteger size = theta.getSize(); Sample outS(size, 1); for (UnsignedInteger i = 0; i < size; ++ i) outS[i] = operator()(theta[i]); return outS; } UnsignedInteger getInputDimension() const { return metaModelResult_.getMetaModel().getInputDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return metaModelResult_.getMetaModel().getInputDescription(); } Description getOutputDescription() const { return metaModelResult_.getMetaModel().getOutputDescription(); } protected: Normal normal_; Scalar optimalValue_; KrigingResult metaModelResult_; Function noiseModel_; }; void EfficientGlobalOptimization::run() { const OptimizationProblem problem(getProblem()); const UnsignedInteger dimension = problem.getDimension(); const Function model(problem.getObjective()); Sample inputSample(krigingResult_.getInputSample()); Sample outputSample(model(inputSample)); UnsignedInteger size = inputSample.getSize(); Point noise(size); const Bool hasNoise = model.getOutputDimension() == 2; if (hasNoise) { // use noise model to optimize AEI else fallback to objective 2nd marginal if (noiseModel_.getOutputDimension() != 1) noiseModel_ = model.getMarginal(1); Sample noiseSample(outputSample.getMarginal(1)); outputSample = outputSample.getMarginal(0); for (UnsignedInteger i = 0; i < size; ++ i) { noise[i] = noiseSample[i][0]; if (!(noise[i] >= 0.0)) throw InvalidArgumentException(HERE) << "Noise model must be positive"; } } UnsignedInteger iterationNumber = 0; Bool convergence = false; // select the best feasible point Point optimizer; Scalar optimalValue = problem.isMinimization() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; Point optimizerPrev; // previous optimizer Scalar optimalValuePrev = optimalValue;// previous optimal value for (UnsignedInteger index = 0; index < size; ++ index) { if (!problem.hasBounds() || (problem.hasBounds() && problem.getBounds().contains(inputSample[index]))) if ((problem.isMinimization() && (outputSample[index][0] < optimalValue)) || (!problem.isMinimization() && (outputSample[index][0] > optimalValue))) { optimizerPrev = optimizer; optimalValuePrev = optimalValue; optimizer = inputSample[index]; optimalValue = outputSample[index][0]; } } LOGINFO(OSS() << "Optimum so far x=" << optimizer << " f(x)=" << optimalValue); // we need the second best to compute convergence criteria if (optimizerPrev.getDimension() == 0) { // then the optimum was the first for (UnsignedInteger index = 1; index < size; ++ index) { if (!problem.hasBounds() || (problem.hasBounds() && problem.getBounds().contains(inputSample[index]))) if ((problem.isMinimization() && (outputSample[index][0] < optimalValuePrev)) || (!problem.isMinimization() && (outputSample[index][0] > optimalValuePrev))) { optimizerPrev = inputSample[index]; optimalValuePrev = outputSample[index][0]; } } } // compute minimum distance Point minimumDistance(dimension, SpecFunc::MaxScalar); if (!hasNoise) { for (UnsignedInteger i1 = 0; i1 < size; ++ i1) { for (UnsignedInteger i2 = 0; i2 < i1; ++ i2) { for (UnsignedInteger j = 0; j < dimension; ++ j) { Scalar distance = std::abs(inputSample[i1][j] - inputSample[i2][j]); if (distance < minimumDistance[j]) { minimumDistance[j] = distance; } } } } } OptimizationResult result; result.setProblem(getProblem()); while ((!convergence) && (iterationNumber < getMaximumIterationNumber())) { // use the provided kriging result at first iteration KrigingResult metaModelResult(krigingResult_); if (iterationNumber > 0) { KrigingAlgorithm algo(inputSample, outputSample, krigingResult_.getCovarianceModel(), krigingResult_.getBasisCollection()); LOGINFO(OSS() << "Rebuilding kriging ..."); algo.setOptimizeParameters((parameterEstimationPeriod_ > 0) && ((iterationNumber % parameterEstimationPeriod_) == 0)); if (hasNoise) algo.setNoise(noise); algo.run(); LOGINFO(OSS() << "Rebuilding kriging - done"); metaModelResult = algo.getResult(); } Scalar optimalValueSubstitute = optimalValue; if (hasNoise) { // compute mk(x_min) with x_min = argmin_xi ui // with ui = mk(xi) + c * sk(xi) Scalar optimalU = problem.isMinimization() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; for (UnsignedInteger i = 0; i < size; ++ i) { const Point x(inputSample[i]); const Scalar mx = krigingResult_.getMetaModel()(x)[0]; const Scalar sk2 = krigingResult_.getConditionalCovariance(x)(0, 0); const Scalar u = mx + aeiTradeoff_ * sqrt(sk2); if ((problem.isMinimization() && (u < optimalU)) || (!problem.isMinimization() && (u > optimalU))) { optimalValueSubstitute = mx; optimalU = u; } } } Function improvementObjective(new ExpectedImprovementEvaluation(optimalValueSubstitute, metaModelResult, noiseModel_)); if (useDefaultSolver_ && problem.hasBounds()) { // Sample uniformly into the bounds const Interval bounds(problem.getBounds()); const Point lowerBound(bounds.getLowerBound()); const Point upperBound(bounds.getUpperBound()); const Interval::BoolCollection finiteLowerBound(bounds.getFiniteLowerBound()); const Interval::BoolCollection finiteUpperBound(bounds.getFiniteUpperBound()); ComposedDistribution::DistributionCollection coll; for (UnsignedInteger i = 0; i < dimension; ++ i) { if (!finiteLowerBound[i] || !finiteUpperBound[i]) throw InvalidArgumentException(HERE) << "Bounds must be finite"; coll.add(Uniform(lowerBound[i], upperBound[i])); } const ComposedDistribution distribution(coll); Sample improvementExperiment(distribution.getSample(multiStartExperimentSize_)); // retain best P/N points as starting points improvementExperiment.stack(improvementObjective(improvementExperiment)); Indices inputs(dimension); inputs.fill(); const Sample sortedImprovement(improvementExperiment.sortAccordingToAComponent(dimension).getMarginal(inputs)); // handle multiStartExperimentSize_ < multiStartNumber_ const UnsignedInteger pointNumber = std::min(multiStartNumber_, multiStartExperimentSize_); const Sample startingPoints(sortedImprovement, multiStartExperimentSize_ - pointNumber, multiStartExperimentSize_); setOptimizationAlgorithm(MultiStart(solver_, startingPoints)); } // build problem OptimizationProblem maximizeImprovement; maximizeImprovement.setObjective(improvementObjective); maximizeImprovement.setMinimization(false); if (problem.hasBounds()) maximizeImprovement.setBounds(problem.getBounds()); solver_.setProblem(maximizeImprovement); solver_.setStartingPoint(optimizer); solver_.run(); const OptimizationResult improvementResult(solver_.getResult()); // store improvement Point improvementValue(improvementResult.getOptimalValue()); expectedImprovement_.add(improvementValue); const Point newPoint(improvementResult.getOptimalPoint()); const Point newOutput(model(newPoint)); const Point newValue(Point(1, newOutput[0]));// noise can be provided on the 2nd marginal LOGINFO(OSS() << "New point x=" << newPoint << " f(x)=" << newValue << "iteration=" << iterationNumber + 1); if ((problem.isMinimization() && (newValue[0] < optimalValue)) || (!problem.isMinimization() && (newValue[0] > optimalValue))) { optimizerPrev = optimizer; optimalValuePrev = optimalValue; optimizer = newPoint; optimalValue = newValue[0]; LOGINFO(OSS() << "Optimum so far x=" << optimizer << " f(x)=" << optimalValue); } // algorithm is global so compute convergence criteria on the last 2 optimum instead of last 2 points const Scalar absoluteError = (optimizer - optimizerPrev).normInf(); const Scalar relativeError = absoluteError / optimizer.normInf(); const Scalar residualError = std::abs(optimalValue - optimalValuePrev); const Scalar constraintError = -1.0; result.store(newPoint, newValue, absoluteError, relativeError, residualError, constraintError); // general convergence criteria convergence = ((absoluteError < getMaximumAbsoluteError()) && (relativeError < getMaximumRelativeError())) || ((residualError < getMaximumResidualError()) && (constraintError < getMaximumConstraintError())); // minimum distance stopping criterion if (!hasNoise) { // update minimum distance according to the new point for (UnsignedInteger i = 0; i < size; ++ i) { for (UnsignedInteger j = 0; j < dimension; ++ j) { Scalar distance = std::abs(inputSample[i][j] - newPoint[j]); if (distance < minimumDistance[j]) { minimumDistance[j] = distance; } } } const Point scale(metaModelResult.getCovarianceModel().getScale()); for (UnsignedInteger j = 0; j < dimension; ++ j) { const Bool minDistStop = scale[j] < minimumDistance[j] / correlationLengthFactor_; if (minDistStop) LOGINFO(OSS() << "Stopped algorithm over the minimum distance criterion"); convergence = convergence || minDistStop; } } // improvement stopping criterion const Bool improvementStop = (improvementValue[0] < improvementFactor_ * std::abs(optimalValue)); if (improvementStop) LOGINFO(OSS() << "Stopped algorithm over the improvement criterion"); convergence = convergence || improvementStop; // add new point to design inputSample.add(newPoint); outputSample.add(newValue); ++ size; if (hasNoise) { if (!(newOutput[1] >= 0.0)) throw InvalidArgumentException(HERE) << "Noise model must be positive"; noise.add(newOutput[1]); } ++ iterationNumber; } result.setOptimalPoint(optimizer); result.setOptimalValue(Point(1, optimalValue)); result.setIterationNumber(iterationNumber); setResult(result); } /* Virtual constructor */ EfficientGlobalOptimization * EfficientGlobalOptimization::clone() const { return new EfficientGlobalOptimization(*this); } /* String converter */ String EfficientGlobalOptimization::__repr__() const { return OSS(); } /* Check whether this problem can be solved by this solver. Must be overloaded by the actual optimisation algorithm */ void EfficientGlobalOptimization::checkProblem(const OptimizationProblem & problem) const { if (problem.getObjective().getOutputDimension() > 2) // 2nd marginal can be used as noise throw InvalidArgumentException(HERE) << "Error: " << this->getClassName() << " does not support multi-objective optimization"; if (problem.hasInequalityConstraint() || problem.hasEqualityConstraint()) throw InvalidArgumentException(HERE) << "Error : " << this->getClassName() << " does not support constraints"; } void EfficientGlobalOptimization::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; useDefaultSolver_ = false; } OptimizationAlgorithm EfficientGlobalOptimization::getOptimizationAlgorithm() const { return solver_; } /* Size of the design to draw starting points */ UnsignedInteger EfficientGlobalOptimization::getMultiStartExperimentSize() const { return multiStartExperimentSize_; } void EfficientGlobalOptimization::setMultiStartExperimentSize(const UnsignedInteger multiStartExperimentSize) { multiStartExperimentSize_ = multiStartExperimentSize; } /* Number of starting points for the criterion optim */ UnsignedInteger EfficientGlobalOptimization::getMultiStartNumber() const { return multiStartNumber_; } void EfficientGlobalOptimization::setMultiStartNumber(const UnsignedInteger multiStartNumber) { multiStartNumber_ = multiStartNumber; } /* Parameter estimation period accessor */ UnsignedInteger EfficientGlobalOptimization::getParameterEstimationPeriod() const { return parameterEstimationPeriod_; } void EfficientGlobalOptimization::setParameterEstimationPeriod(const UnsignedInteger parameterEstimationPeriod) { parameterEstimationPeriod_ = parameterEstimationPeriod; } /* Expected improvement function */ Sample EfficientGlobalOptimization::getExpectedImprovement() const { return expectedImprovement_; } /* improvement criterion factor accessor */ void EfficientGlobalOptimization::setImprovementFactor(const Scalar improvementFactor) { improvementFactor_ = improvementFactor; } Scalar EfficientGlobalOptimization::getImprovementFactor() const { return improvementFactor_; } /* correlation length stopping criterion factor accessor */ void EfficientGlobalOptimization::setCorrelationLengthFactor(const Scalar correlationLengthFactor) { correlationLengthFactor_ = correlationLengthFactor; } Scalar EfficientGlobalOptimization::getCorrelationLengthFactor() const { return correlationLengthFactor_; } /* AEI tradeoff constant accessor */ void EfficientGlobalOptimization::setAIETradeoff(const Scalar aeiTradeoff) { aeiTradeoff_ = aeiTradeoff; } Scalar EfficientGlobalOptimization::getAIETradeoff() const { return aeiTradeoff_; } void EfficientGlobalOptimization::setNoiseModel(const Function & noiseModel) { const UnsignedInteger dimension = getProblem().getDimension(); if (noiseModel.getInputDimension() != dimension) throw InvalidArgumentException(HERE) << "Noise model must be of dimension " << dimension; if (noiseModel.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Noise model must be 1-d"; noiseModel_ = noiseModel; } Function EfficientGlobalOptimization::getNoiseModel() const { return noiseModel_; } /* Method save() stores the object through the StorageManager */ void EfficientGlobalOptimization::save(Advocate & adv) const { OptimizationAlgorithmImplementation::save(adv); adv.saveAttribute("krigingResult_", krigingResult_); adv.saveAttribute("solver_", solver_); adv.saveAttribute("multiStartExperimentSize_", multiStartExperimentSize_); adv.saveAttribute("multiStartNumber_", multiStartNumber_); adv.saveAttribute("parameterEstimationPeriod_", parameterEstimationPeriod_); adv.saveAttribute("improvementFactor_", improvementFactor_); adv.saveAttribute("correlationLengthFactor_", correlationLengthFactor_); adv.saveAttribute("aeiTradeoff_", aeiTradeoff_); adv.saveAttribute("noiseModel_", noiseModel_); } /* Method load() reloads the object from the StorageManager */ void EfficientGlobalOptimization::load(Advocate & adv) { OptimizationAlgorithmImplementation::load(adv); adv.loadAttribute("krigingResult_", krigingResult_); adv.loadAttribute("solver_", solver_); adv.loadAttribute("multiStartExperimentSize_", multiStartExperimentSize_); adv.loadAttribute("multiStartNumber_", multiStartNumber_); adv.loadAttribute("parameterEstimationPeriod_", parameterEstimationPeriod_); adv.loadAttribute("improvementFactor_", improvementFactor_); adv.loadAttribute("correlationLengthFactor_", correlationLengthFactor_); adv.loadAttribute("aeiTradeoff_", aeiTradeoff_); adv.loadAttribute("noiseModel_", noiseModel_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/openturns/000077500000000000000000000000001307543307100257365ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/openturns/EfficientGlobalOptimization.hxx000066400000000000000000000105101307543307100341100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief EfficientGlobalOptimization or EGO algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EFFICIENTGLOBALOPTIMIZATION_HXX #define OPENTURNS_EFFICIENTGLOBALOPTIMIZATION_HXX #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/KrigingResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EfficientGlobalOptimization */ class OT_API EfficientGlobalOptimization : public OptimizationAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ EfficientGlobalOptimization(); /** Constructor with parameters */ EfficientGlobalOptimization(const OptimizationProblem & problem, const KrigingResult & krigingResult); /** Virtual constructor */ virtual EfficientGlobalOptimization * clone() const; /** String converter */ String __repr__() const; /** Performs the actual computation. */ void run(); void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationAlgorithm() const; /** Size of the design to draw starting points */ UnsignedInteger getMultiStartExperimentSize() const; void setMultiStartExperimentSize(const UnsignedInteger multiStartExperimentSize); /** Number of starting points for the criterion optim */ UnsignedInteger getMultiStartNumber() const; void setMultiStartNumber(const UnsignedInteger multiStartNumberSize); /** Parameter estimation period accessor */ UnsignedInteger getParameterEstimationPeriod() const; void setParameterEstimationPeriod(const UnsignedInteger parameterEstimationPeriod); /** improvement stopping criterion factor accessor */ void setImprovementFactor(const Scalar improvementFactor); Scalar getImprovementFactor() const; /** correlation length stopping criterion factor accessor */ void setCorrelationLengthFactor(const Scalar b); Scalar getCorrelationLengthFactor() const; /** AEI tradeoff constant accessor */ void setAIETradeoff(const Scalar c); Scalar getAIETradeoff() const; /** Improvement noise function accessor */ void setNoiseModel(const Function & noiseModel); Function getNoiseModel() const; /** Expected improvement function */ Sample getExpectedImprovement() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Check whether this problem can be solved by this solver. */ void checkProblem(const OptimizationProblem & problem) const; private: KrigingResult krigingResult_; OptimizationAlgorithm solver_; // whether the solver was set mutable Bool useDefaultSolver_; // Size of the design to draw starting points UnsignedInteger multiStartExperimentSize_; // number of starting points for criterion optim UnsignedInteger multiStartNumber_; // relearn kriging parameters every X iterations UnsignedInteger parameterEstimationPeriod_; // improvement stopping criterion factor Scalar improvementFactor_; // correlation length stopping criterion factor Scalar correlationLengthFactor_; // AEI tradeoff constant u(x)=mk(x)+c*sk(x) Scalar aeiTradeoff_; // optional noise model for improvement optimization only // for the metamodel noise the 2nd marginal of the objective is used Function noiseModel_; mutable Sample expectedImprovement_; } ; /* class EfficientGlobalOptimization */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EFFICIENTGLOBALOPTIMIZATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Optimization/openturns/OTUncertaintyOptimization.hxx000066400000000000000000000020621307543307100336460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Optimization * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTUNCERTAINTYOPTIMIZATION_HXX #define OPENTURNS_OTUNCERTAINTYOPTIMIZATION_HXX #include "openturns/EfficientGlobalOptimization.hxx" #endif /* OPENTURNS_OTUNCERTAINTYOPTIMIZATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/000077500000000000000000000000001307543307100243115ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/AdaptiveStieltjesAlgorithm.cxx000066400000000000000000000216371307543307100323410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement the modified adaptive Stieltjes algorithm to compute * the coefficients of the 3 terms recurrence relation of an * orthonormal polynomial family * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AdaptiveStieltjesAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Exception.hxx" #include "openturns/Uniform.hxx" #include "openturns/Histogram.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/OrthogonalUniVariatePolynomial.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AdaptiveStieltjesAlgorithm); static const Factory Factory_AdaptiveStieltjesAlgorithm; /* Default constructor */ AdaptiveStieltjesAlgorithm::AdaptiveStieltjesAlgorithm() : OrthonormalizationAlgorithmImplementation(Uniform(-1.0, 1.0)) , monicRecurrenceCoefficients_(1, Coefficients(3)) , monicSquaredNorms_(1) , isElliptical_(true) { // Here we initialize the monic coefficients cache monicRecurrenceCoefficients_[0][0] = 1.0; monicRecurrenceCoefficients_[0][2] = 0.0; monicSquaredNorms_[0] = 1.0; } /* Parameter constructor */ AdaptiveStieltjesAlgorithm::AdaptiveStieltjesAlgorithm(const Distribution & measure) : OrthonormalizationAlgorithmImplementation(measure) , monicRecurrenceCoefficients_(1, Coefficients(3)) , monicSquaredNorms_(1) , isElliptical_(measure.isElliptical()) { // Here we initialize the monic coefficients cache const Scalar mu = measure.getMean()[0]; monicRecurrenceCoefficients_[0][0] = 1.0; // To avoid -0.0 in print, we test for the mean of the distribution. if (std::abs(mu) > ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")) monicRecurrenceCoefficients_[0][1] = -mu; // The value of \beta_0 is 1 as the weight distribution is a probability distribution monicRecurrenceCoefficients_[0][2] = 0.0; monicSquaredNorms_[0] = 1.0; } /* Virtual constructor */ AdaptiveStieltjesAlgorithm * AdaptiveStieltjesAlgorithm::clone() const { return new AdaptiveStieltjesAlgorithm(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x), P-1(x)=0, P0(x)=1 We have: a0n = 1/sqrt(\beta_{n+1}) a1n = -\alpha_n/sqrt(\beta_{n+1}) a2n = -\sqrt{\beta_n/\beta_{n+1}} where \alpha_n and \beta_n are the recurrence coefficients of the monic orthogonal coefficients Qn+1(x) = (x - \alpha_n) * Qn(x) - beta_n * Qn-1(x), Q-1(x)=0, Q0(x)=1 Rn = for n >= 0 \alpha_n = / Rn \beta_n = Rn / Rn-1 for n >= 1, \beta_0 = 0 Remark: here we considere probability measures D, so R0=1, \alpha_0=E[D]=\mu, Q1(x)=x-\mu, \beta_1=R1=Var[D] Due to the convention of coefficients for orthonormal polynomials, the coefficients of the monic polynomials are stored as [1, -\alpha_n, -\beta_n] */ AdaptiveStieltjesAlgorithm::Coefficients AdaptiveStieltjesAlgorithm::getRecurrenceCoefficients(const UnsignedInteger n) const { // The cache size is at least 1 const UnsignedInteger cacheSize = monicRecurrenceCoefficients_.getSize(); // Get the coefficients from the cache if possible if (n < cacheSize - 1) { const Scalar inverseSqrtBetaNp1 = 1.0 / sqrt(-monicRecurrenceCoefficients_[n + 1][2]); Coefficients coefficients(3); coefficients[0] = inverseSqrtBetaNp1; if (std::abs(monicRecurrenceCoefficients_[n][1]) > 0.0) coefficients[1] = monicRecurrenceCoefficients_[n][1] * inverseSqrtBetaNp1; coefficients[2] = -sqrt(-monicRecurrenceCoefficients_[n][2]) * inverseSqrtBetaNp1; return coefficients; } // This loop is to go to the first coefficients not in the cache. Here we cannot use cacheSize as // the size of the cache is increased by each call to getRecurrenceCoefficients() while (n >= monicRecurrenceCoefficients_.getSize()) getRecurrenceCoefficients(n - 1); // Here we know that n == cacheSize - 1. In order to compute the recurrence coefficients of the orthonormal polynomial pN // we need \alpha_{n-1}, \beta_{n-1} and \beta_n. The first two values are in the cache, we need \beta_n. We compute both // \alpha_n and \beta_n by numerical integration. Coefficients monicCoefficients(3); monicCoefficients[0] = 1.0; // Build the monic orthogonal polynomial of degree cacheSize const OrthogonalUniVariatePolynomial qN(monicRecurrenceCoefficients_); const DotProductWrapper dotProductWrapper(qN, measure_); if (isElliptical_) { // In the case of elliptical distributions, the coefficient \alpha is // always equal to the mean of the distribution monicCoefficients[1] = monicRecurrenceCoefficients_[n][1]; // For n == 1 beta_1 is the variance if (n == 0) { monicSquaredNorms_.add(measure_.getCovariance()(0, 0)); monicCoefficients[2] = -monicSquaredNorms_[1]; } else { const Function dotProductKernel(bindMethod(dotProductWrapper, &DotProductWrapper::kernelSym, 1, 1)); monicSquaredNorms_.add(computeDotProduct(dotProductKernel, n)[0]); monicCoefficients[2] = -monicSquaredNorms_[n + 1] / monicSquaredNorms_[n]; } // n != 1 } // isElliptical_ else { // \beta_n = Rn / Rn-1 with Rn-1 = \beta_{n-1}Rn-2 = \beta_{n-1}\beta_{n-2}Rn-3 = ... = \prod_{k=0}^{n-1}\beta_k // Compute Rn and const Function dotProductKernel(bindMethod(dotProductWrapper, &DotProductWrapper::kernelGen, 1, 2)); const Point dotProduct(computeDotProduct(dotProductKernel, n)); monicSquaredNorms_.add(dotProduct[0]); monicCoefficients[1] = -dotProduct[1] / monicSquaredNorms_[n + 1]; monicCoefficients[2] = -monicSquaredNorms_[n + 1] / monicSquaredNorms_[n]; } // !isElliptical_ monicRecurrenceCoefficients_.add(monicCoefficients); // Now n == cacheSize - 2 return getRecurrenceCoefficients(n); } /* Compute dot products taking into account the singularities of the weights */ Point AdaptiveStieltjesAlgorithm::computeDotProduct(const Function & kernel, const UnsignedInteger n) const { if (measure_.isContinuous()) { const GaussKronrod algo(ResourceMap::GetAsUnsignedInteger("AdaptiveStieltjesAlgorithm-MaximumSubIntervalsBetweenRoots") * (n + 1), ResourceMap::GetAsScalar("AdaptiveStieltjesAlgorithm-MaximumError"), GaussKronrodRule(GaussKronrodRule::G7K15)); Point bounds(1, measure_.getRange().getLowerBound()[0]); bounds.add(measure_.getSingularities()); bounds.add(measure_.getRange().getUpperBound()[0]); Scalar a = bounds[0]; Scalar b = bounds[1]; Point dotProduct(algo.integrate(kernel, Interval(a, b))); for (UnsignedInteger i = 2; i < bounds.getSize(); ++i) { a = b; b = bounds[i]; const Point value(algo.integrate(kernel, Interval(a, b))); dotProduct += value; } return dotProduct; } if (measure_.isDiscrete()) { const Sample nodes(measure_.getSupport()); return kernel(nodes).computeMean() * nodes.getSize(); } throw NotYetImplementedException(HERE) << "In AdaptiveStieltjesAlgorithm::computeDotProduct"; } /* String converter */ String AdaptiveStieltjesAlgorithm::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_ << " monicRecurrenceCoefficients=" << monicRecurrenceCoefficients_ << " monicSquaredNorms=" << monicSquaredNorms_ << " isElliptical=" << isElliptical_; } /* Method save() stores the object through the StorageManager */ void AdaptiveStieltjesAlgorithm::save(Advocate & adv) const { OrthonormalizationAlgorithmImplementation::save(adv); adv.saveAttribute( "monicRecurrenceCoefficients_", monicRecurrenceCoefficients_ ); adv.saveAttribute( "monicSquaredNorms_", monicSquaredNorms_ ); adv.saveAttribute( "isElliptical_", isElliptical_ ); } /* Method load() reloads the object from the StorageManager */ void AdaptiveStieltjesAlgorithm::load(Advocate & adv) { OrthonormalizationAlgorithmImplementation::load(adv); adv.loadAttribute( "monicRecurrenceCoefficients_", monicRecurrenceCoefficients_ ); adv.loadAttribute( "monicSquaredNorms_", monicSquaredNorms_ ); adv.loadAttribute( "isElliptical_", isElliptical_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/CMakeLists.txt000066400000000000000000000062621307543307100270570ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (OrthogonalUniVariatePolynomial.cxx) ot_add_source_file (CharlierFactory.cxx) ot_add_source_file (ChebychevFactory.cxx) ot_add_source_file (HermiteFactory.cxx) ot_add_source_file (HistogramPolynomialFactory.cxx) ot_add_source_file (JacobiFactory.cxx) ot_add_source_file (KrawtchoukFactory.cxx) ot_add_source_file (LaguerreFactory.cxx) ot_add_source_file (LegendreFactory.cxx) ot_add_source_file (MeixnerFactory.cxx) ot_add_source_file (OrthogonalFunctionFactory.cxx) ot_add_source_file (OrthogonalProductPolynomialFactory.cxx) ot_add_source_file (OrthogonalUniVariatePolynomialFactory.cxx) ot_add_source_file (OrthogonalUniVariatePolynomialFamily.cxx) ot_add_source_file (OrthonormalizationAlgorithm.cxx) ot_add_source_file (OrthonormalizationAlgorithmImplementation.cxx) ot_add_source_file (AdaptiveStieltjesAlgorithm.cxx) ot_add_source_file (ChebychevAlgorithm.cxx) ot_add_source_file (GramSchmidtAlgorithm.cxx) ot_add_source_file (StandardDistributionPolynomialFactory.cxx) ot_add_source_file (OrthogonalBasis.cxx) ot_add_source_file (OrthogonalUniVariateFunctionFamily.cxx) ot_add_source_file (OrthogonalUniVariateFunctionFactory.cxx) ot_add_source_file (OrthogonalUniVariatePolynomialFunctionFactory.cxx) ot_add_source_file (FourierSeriesFactory.cxx) ot_add_source_file (HaarWaveletFactory.cxx) ot_add_source_file (OrthogonalProductFunctionFactory.cxx) ot_add_source_file (SoizeGhanemFactory.cxx) ot_add_source_file (SoizeGhanemFactorEvaluation.cxx) ot_install_header_file (OTOrthogonalBasis.hxx) ot_install_header_file (OrthogonalFunctionFactory.hxx) ot_install_header_file (OrthogonalUniVariatePolynomialFactory.hxx) ot_install_header_file (OrthogonalProductPolynomialFactory.hxx) ot_install_header_file (StandardDistributionPolynomialFactory.hxx) ot_install_header_file (OrthogonalBasis.hxx) ot_install_header_file (GramSchmidtAlgorithm.hxx) ot_install_header_file (OrthogonalUniVariatePolynomial.hxx) ot_install_header_file (OrthonormalizationAlgorithm.hxx) ot_install_header_file (OrthogonalUniVariatePolynomialFamily.hxx) ot_install_header_file (AdaptiveStieltjesAlgorithm.hxx) ot_install_header_file (ChebychevAlgorithm.hxx) ot_install_header_file (OrthonormalizationAlgorithmImplementation.hxx) ot_install_header_file (CharlierFactory.hxx) ot_install_header_file (ChebychevFactory.hxx) ot_install_header_file (HermiteFactory.hxx) ot_install_header_file (HistogramPolynomialFactory.hxx) ot_install_header_file (JacobiFactory.hxx) ot_install_header_file (KrawtchoukFactory.hxx) ot_install_header_file (LaguerreFactory.hxx) ot_install_header_file (LegendreFactory.hxx) ot_install_header_file (MeixnerFactory.hxx) ot_install_header_file (OrthogonalUniVariateFunctionFamily.hxx) ot_install_header_file (OrthogonalUniVariateFunctionFactory.hxx) ot_install_header_file (OrthogonalUniVariatePolynomialFunctionFactory.hxx) ot_install_header_file (FourierSeriesFactory.hxx) ot_install_header_file (HaarWaveletFactory.hxx) ot_install_header_file (OrthogonalProductFunctionFactory.hxx) ot_install_header_file (SoizeGhanemFactory.hxx) ot_install_header_file (SoizeGhanemFactorEvaluation.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/CharlierFactory.cxx000066400000000000000000000065201307543307100301210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Charlier polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CharlierFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Poisson.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CharlierFactory); static const Factory Factory_CharlierFactory; /* Default constructor, associated with the default Poisson distribution which is equal to the Exponential distribution */ CharlierFactory::CharlierFactory() : OrthogonalUniVariatePolynomialFactory(Poisson()), lambda_(1.0) { initializeCache(); } /* Parameter constructor: lambda is the order of the generalized Charlier polynomial, associated with the Poisson(lambda) distribution */ CharlierFactory::CharlierFactory(const Scalar lambda) : OrthogonalUniVariatePolynomialFactory( Poisson(lambda) ), lambda_(lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Error: must have lambda>0 to build Charlier polynomials."; initializeCache(); } /* Virtual constructor */ CharlierFactory * CharlierFactory::clone() const { return new CharlierFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ CharlierFactory::Coefficients CharlierFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar factor = sqrt(lambda_); recurrenceCoefficients[0] = -1.0 / factor; recurrenceCoefficients[1] = factor; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar factor = 1.0 / sqrt((n + 1.0) * lambda_); recurrenceCoefficients[0] = -factor; recurrenceCoefficients[1] = (n + lambda_) * factor; recurrenceCoefficients[2] = -sqrt(1.0 - 1.0 / (n + 1.0)); return recurrenceCoefficients; } /* LAMBDA accessor */ Scalar CharlierFactory::getLambda() const { return lambda_; } /* String converter */ String CharlierFactory::__repr__() const { return OSS() << "class=" << getClassName() << " lambda=" << lambda_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void CharlierFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "lambda_", lambda_ ); } /* Method load() reloads the object from the StorageManager */ void CharlierFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "lambda_", lambda_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/ChebychevAlgorithm.cxx000066400000000000000000000322431307543307100306100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OrthogonalUniVariatePolynomialStandardDistribution polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ChebychevAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/Exception.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/LegendreFactory.hxx" #include "openturns/LaguerreFactory.hxx" #include "openturns/HermiteFactory.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ChebychevAlgorithm); static const Factory Factory_ChebychevAlgorithm; /* Default constructor */ ChebychevAlgorithm::ChebychevAlgorithm() : OrthonormalizationAlgorithmImplementation(Uniform()) , referenceFamily_() , useCanonicalBasis_(true) , standardMoments_(0) , modifiedMoments_(0) , mixedMoments_() , monicRecurrenceCoefficients_(0) , referenceMonicRecurrenceCoefficients_(0) { // The moment cache must be initialized before the coefficient cache standardMoments_.add(1.0); modifiedMoments_.add(1.0); mixedMoments_[0] = 1.0; } /* Parameter constructor */ ChebychevAlgorithm::ChebychevAlgorithm(const Distribution & measure) : OrthonormalizationAlgorithmImplementation(measure) , referenceFamily_(HermiteFactory()) , useCanonicalBasis_(true) , standardMoments_(0) , modifiedMoments_(0) , mixedMoments_() , monicRecurrenceCoefficients_(0) , referenceMonicRecurrenceCoefficients_(0) { Log::Warn(OSS() << "ChebychevAlgorithm is deprecated"); // Selection of the best reference factory according to the range of the measure // There are 4 possibilities: // Range = [a, b] -> standardized measure has range [-1, 1], Legendre factory // Range = [a, +inf[ -> standardized measure has range [0, +inf[, Laguerre factory // Range = ]-inf, b] -> standardized measure has range ]-inf, 0], no good factory, default to the Hermite factory // Range = ]-inf, +inf[ -> standardized measure has range ]-inf, +inf[, Hermite factory const Bool finiteLowerBound = measure.getRange().getFiniteLowerBound()[0] == 1; const Bool finiteUpperBound = measure.getRange().getFiniteUpperBound()[0] == 1; // Left-bounded measures if (finiteLowerBound) { // If the range is bounded if (finiteUpperBound) referenceFamily_ = LegendreFactory(); // Else if it is right-unbounded else referenceFamily_ = LaguerreFactory(); } // Left-unbounded measures else { // If the range is right-bounded if (finiteUpperBound) LOGWARN(OSS() << "Warning: there is no good reference factory for a measure with left infinite range. Using the Hermite factory, but expect numerical instability."); } // End selection of the reference factory // The moment cache must be initialized before the coefficient cache standardMoments_.add(1.0); modifiedMoments_.add(1.0); mixedMoments_[0] = 1.0; } /* Parameter constructor with specific reference family */ ChebychevAlgorithm::ChebychevAlgorithm(const Distribution & measure, const OrthogonalUniVariatePolynomialFamily & family) : OrthonormalizationAlgorithmImplementation(measure) , referenceFamily_(family) , useCanonicalBasis_(false) , standardMoments_(0) , modifiedMoments_(0) , mixedMoments_() , monicRecurrenceCoefficients_(0) , referenceMonicRecurrenceCoefficients_(0) { Log::Warn(OSS() << "ChebychevAlgorithm is deprecated"); // The moment cache must be initialized before the coefficient cache standardMoments_.add(1.0); modifiedMoments_.add(1.0); mixedMoments_[0] = 1.0; } /* Virtual constructor */ ChebychevAlgorithm * ChebychevAlgorithm::clone() const { return new ChebychevAlgorithm(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ ChebychevAlgorithm::Coefficients ChebychevAlgorithm::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar alpha0 = getMonicRecurrenceCoefficients(0)[0]; const Scalar beta1 = getMonicRecurrenceCoefficients(1)[1]; const Scalar factor = 1.0 / sqrt(beta1); recurrenceCoefficients[0] = factor; recurrenceCoefficients[1] = -alpha0 * factor; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } // Compute the coefficients of the orthonormal polynomials involved in the relation const Coefficients alphaBetaN(getMonicRecurrenceCoefficients(n)); const Scalar alphaN = alphaBetaN[0]; const Scalar betaN = alphaBetaN[1]; const Scalar betaNP1 = getMonicRecurrenceCoefficients(n + 1)[1]; const Scalar factor = 1.0 / sqrt(betaNP1); recurrenceCoefficients[0] = factor; recurrenceCoefficients[1] = -alphaN * factor; recurrenceCoefficients[2] = -sqrt(betaN) * factor; return recurrenceCoefficients; } /* Return the order-th raw moment of the underlying measure */ Scalar ChebychevAlgorithm::getStandardMoment(const UnsignedInteger order) const { // We know that the raw moments will be accessed in a particular pattern: the moments not already // computed will always be accessed in a successive increasing order const UnsignedInteger maxOrder = standardMoments_.getSize(); if (order > maxOrder) throw InvalidArgumentException(HERE) << "Error: cannot access to the raw moments in arbitrary order."; if (order == maxOrder) standardMoments_.add(measure_.getStandardMoment(order)[0]); return standardMoments_[order]; } /* Return the order-th modified moment, i.e. the weighted integral of the order-th reference polynomial with respect to the underlying measure */ Scalar ChebychevAlgorithm::getModifiedMoment(const UnsignedInteger order) const { // We know that the modified moments will be accessed in a particular pattern: the moments not already // computed will always be accessed in a successive increasing order const UnsignedInteger maxOrder = modifiedMoments_.getSize(); if (order > maxOrder) throw InvalidArgumentException(HERE) << "Error: cannot access to the modified moments in arbitrary order."; if (order == maxOrder) { // Quick return for trivial case if (order == 0) { modifiedMoments_.add(1.0); return 1.0; } // We compute the modified moment using the raw moments // If we use the canonical basis, the modified moment is exactly the raw moment if (useCanonicalBasis_) { modifiedMoments_.add(getStandardMoment(order)); return modifiedMoments_[order]; } // Else, build the modified moments as a combination of the standard moments // Coefficients of the order-th reference polynomial const Coefficients referenceCoefficients(referenceFamily_.build(order).getCoefficients()); // Should deal with cancellation here... Scalar modifiedMoment = referenceCoefficients[0] * getStandardMoment(0); // Use of Kahan Summation Formula for a stable evaluation of the modified moments Scalar c = 0.0; for (UnsignedInteger i = 1; i <= order; ++i) { const Scalar y = referenceCoefficients[i] * getStandardMoment(i) - c; const Scalar t = modifiedMoment + y; c = (t - modifiedMoment) - y; modifiedMoment = t; } modifiedMoment += c; // Don't forget the fact that the reference polynomials are supposed to be monic, which is not the case of the polynomial associated with referenceCoefficients modifiedMoments_.add(modifiedMoment / referenceCoefficients[order]); } return modifiedMoments_[order]; } /** Methods for the modified Chebichev algorithm */ /** Mixed moments E[Pj * Qk] where Pj is the j-th monic orthogonal polynomial for the given measure and Qk the k-th monic orthogonal polynomial of the reference factory */ Scalar ChebychevAlgorithm::getMixedMoment(const int j, const UnsignedInteger k) const { // Initialization values if (j == -1) return 0.0; if (j == 0) return getModifiedMoment(k); // Orthogonality if (j > static_cast(k)) return 0.0; // General case const UnsignedInteger key = k + (j + k) * (j + k + 1) / 2; if (mixedMoments_.find(key) != mixedMoments_.end()) return mixedMoments_[key]; const Coefficients alphaBeta(getMonicRecurrenceCoefficients(j - 1)); const Coefficients aB(getReferenceMonicRecurrenceCoefficients(k)); const Scalar sigmaJK = getMixedMoment(j - 1, k + 1) - (alphaBeta[0] - aB[0]) * getMixedMoment(j - 1, k) - alphaBeta[1] * getMixedMoment(j - 2, k) + aB[1] * getMixedMoment(j - 1, k - 1); // Check for extrem numerical instability: E[Pn * Qn] <= 0 for j=k=n instead of E[Pn * Qn] = E[Pn^2] > 0 if ((j == static_cast(k)) && (sigmaJK <= 0.0)) throw InternalException(HERE) << "Error: numerical instability in the computation of the mixed moment (" << j << ", " << k << "), value=" << sigmaJK << ". Try to change the reference univariate polynomial family, the current one is " << referenceFamily_; mixedMoments_[key] = sigmaJK; return sigmaJK; } /** Recurrence coefficients (alphak, betak) of the monic orthogonal polynomials Pk+1(x) = (x - alphak) * Pk(x) - betak * Pk-1(x) */ ChebychevAlgorithm::Coefficients ChebychevAlgorithm::getMonicRecurrenceCoefficients(const UnsignedInteger k) const { const UnsignedInteger size = monicRecurrenceCoefficients_.getSize(); if (k < size) return monicRecurrenceCoefficients_[k]; if (k > size) throw InvalidArgumentException(HERE) << "Error: cannot access to the monic recurrence coefficients in arbitrary order."; Coefficients alphaBeta(2, 0.0); // Initialization value if (k == 0) { const Scalar a0 = getReferenceMonicRecurrenceCoefficients(0)[0]; const Scalar m0 = getModifiedMoment(0); const Scalar m1 = getModifiedMoment(1); alphaBeta[0] = a0 + m1 / m0; } else { // General case const Scalar sigmaKK = getMixedMoment(k, k); const Scalar sigmaKM1KM1 = getMixedMoment(k - 1, k - 1); const Scalar sigmaKM1K = getMixedMoment(k - 1, k); const Scalar sigmaKKP1 = getMixedMoment(k, k + 1); const Scalar aK = getReferenceMonicRecurrenceCoefficients(k)[0]; alphaBeta[0] = aK + sigmaKKP1 / sigmaKK - sigmaKM1K / sigmaKM1KM1; alphaBeta[1] = sigmaKK / sigmaKM1KM1; } monicRecurrenceCoefficients_.add(alphaBeta); return alphaBeta; } /** Recurrence coefficients (ak, bk) of the monic reference polynomials Qk+1(x) = (x - ak) * Qk(x) - bk * Qk-1(x) */ ChebychevAlgorithm::Coefficients ChebychevAlgorithm::getReferenceMonicRecurrenceCoefficients(const UnsignedInteger k) const { const UnsignedInteger size = referenceMonicRecurrenceCoefficients_.getSize(); if (k < size) return referenceMonicRecurrenceCoefficients_[k]; if (k > size) throw InvalidArgumentException(HERE) << "Error: cannot access to the reference monic recurrence coefficients in arbitrary order."; Coefficients aB(2, 0.0); if (!useCanonicalBasis_) { // Get the recurrence coefficients from the reference family and convert them to the associated monic family, else they are null const Coefficients normalizedCoefficients(referenceFamily_.getRecurrenceCoefficients(k)); const Scalar aK = normalizedCoefficients[0]; const Scalar bK = normalizedCoefficients[1]; const Scalar cK = normalizedCoefficients[2]; aB[0] = -bK / aK; aB[1] = pow(cK / aK, 2); } referenceMonicRecurrenceCoefficients_.add(aB); return aB; } /* Reference univariate orthogonal polynomial family accessor */ void ChebychevAlgorithm::setReferenceFamily(const OrthogonalUniVariatePolynomialFamily & family) { (*this) = ChebychevAlgorithm(measure_, family); } OrthogonalUniVariatePolynomialFamily ChebychevAlgorithm::getReferenceFamily() const { return referenceFamily_; } /* String converter */ String ChebychevAlgorithm::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_ << " reference family=" << referenceFamily_; } /* Method save() stores the object through the StorageManager */ void ChebychevAlgorithm::save(Advocate & adv) const { OrthonormalizationAlgorithmImplementation::save(adv); adv.saveAttribute( "referenceFamily_", referenceFamily_ ); adv.saveAttribute( "useCanonicalBasis_", useCanonicalBasis_ ); } /* Method load() reloads the object from the StorageManager */ void ChebychevAlgorithm::load(Advocate & adv) { OrthonormalizationAlgorithmImplementation::load(adv); adv.loadAttribute( "referenceFamily_", referenceFamily_ ); // Initialize the object using the appropriate constructor *this = ChebychevAlgorithm(measure_, referenceFamily_); adv.loadAttribute( "useCanonicalBasis_", useCanonicalBasis_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/ChebychevFactory.cxx000066400000000000000000000054511307543307100302720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Chebychev polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ChebychevFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Arcsine.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ChebychevFactory); static const Factory Factory_ChebychevFactory; /* Default constructor */ ChebychevFactory::ChebychevFactory() : OrthogonalUniVariatePolynomialFactory(Arcsine(-1.0, 1.0)) { initializeCache(); } /* Virtual constructor */ ChebychevFactory * ChebychevFactory::clone() const { return new ChebychevFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ ChebychevFactory::Coefficients ChebychevFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { recurrenceCoefficients[0] = M_SQRT2; return recurrenceCoefficients; } recurrenceCoefficients[0] = 2.0; if (n == 1) { recurrenceCoefficients[2] = -M_SQRT2; return recurrenceCoefficients; } recurrenceCoefficients[2] = -1.0; return recurrenceCoefficients; } /* Roots of the polynomial of degree n */ Point ChebychevFactory::getRoots(const UnsignedInteger n) const { Point roots(n); for (UnsignedInteger i = 0; i < n; ++i) roots[i] = std::cos((i + 0.5) * M_PI / n); return roots; } /* Nodes and weights of the polynomial of degree n as the eigenvalues of the associated Jacobi matrix and the square of the first component of the associated normalized eigenvectors */ Point ChebychevFactory::getNodesAndWeights(const UnsignedInteger n, Point & weights) const { if (n == 0) throw InvalidArgumentException(HERE) << "Error: cannot compute the roots and weights of a constant polynomial."; weights = Point(n, 1.0 / n); return getRoots(n); } /* String converter */ String ChebychevFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/FourierSeriesFactory.cxx000066400000000000000000000042551307543307100311610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Fourier function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FourierSeriesFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/FourierSeries.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FourierSeriesFactory); static const Factory Factory_FourierSeriesFactory; /* Default constructor */ FourierSeriesFactory::FourierSeriesFactory() : OrthogonalUniVariateFunctionFactory(Uniform(-M_PI, M_PI)) { initializeCache(); } /* Virtual constructor */ FourierSeriesFactory * FourierSeriesFactory::clone() const { return new FourierSeriesFactory(*this); } /* String converter */ String FourierSeriesFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* The method to get the function of any order */ UniVariateFunction FourierSeriesFactory::build(const UnsignedInteger order) const { const Bool isCosine = (order % 2) == 0; const UnsignedInteger k = (order + 1) / 2; return new FourierSeries(isCosine, k); } /* Method save() stores the object through the StorageManager */ void FourierSeriesFactory::save(Advocate & adv) const { OrthogonalUniVariateFunctionFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void FourierSeriesFactory::load(Advocate & adv) { OrthogonalUniVariateFunctionFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/GramSchmidtAlgorithm.cxx000066400000000000000000000177621307543307100311230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OrthogonalUniVariatePolynomialStandardDistribution polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GramSchmidtAlgorithm.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Log.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GramSchmidtAlgorithm); static const Factory Factory_GramSchmidtAlgorithm; /* Default constructor */ GramSchmidtAlgorithm::GramSchmidtAlgorithm() : OrthonormalizationAlgorithmImplementation() , standardMoments_(1, 1.0) , coefficientsCache_(1, Coefficients(1, 1.0)) , referenceFamily_() , useCanonicalBasis_(true) { // Nothing to do } /* Parameter constructor */ GramSchmidtAlgorithm::GramSchmidtAlgorithm(const Distribution & measure) : OrthonormalizationAlgorithmImplementation(measure) , standardMoments_(1, 1.0) , coefficientsCache_(1, Coefficients(1, 1.0)) , referenceFamily_() , useCanonicalBasis_(true) { Log::Warn(OSS() << "GramSchmidtAlgorithm is deprecated"); } /* Parameter constructor */ GramSchmidtAlgorithm::GramSchmidtAlgorithm(const Distribution & measure, const OrthogonalUniVariatePolynomialFamily & referenceFamily) : OrthonormalizationAlgorithmImplementation(measure) , standardMoments_(1, 1.0) , coefficientsCache_(1, Coefficients(1, 1.0)) , referenceFamily_(referenceFamily) , useCanonicalBasis_(false) { Log::Warn(OSS() << "GramSchmidtAlgorithm is deprecated"); } /* Virtual constructor */ GramSchmidtAlgorithm * GramSchmidtAlgorithm::clone() const { return new GramSchmidtAlgorithm(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ GramSchmidtAlgorithm::Coefficients GramSchmidtAlgorithm::getRecurrenceCoefficients(const UnsignedInteger n) const { // An orthonormal polynomial of degree n writes P(x) = k_n * x^n + l_n * x^{n-1} + ... // Degree n+1 const Coefficients coefficientsNp1(buildPolynomial(n + 1).getCoefficients()); const Scalar kNp1 = coefficientsNp1[n + 1]; const Scalar lNp1 = coefficientsNp1[n]; // Degree n const Coefficients coefficientsN(buildPolynomial(n).getCoefficients()); const Scalar kN = coefficientsN[n]; Scalar lN = 0.0; Scalar kNm1 = 0.0; if (n > 0) { // Degree n-1, not used for n = 0 lN = coefficientsN[n - 1]; const Coefficients coefficientsNm1(buildPolynomial(n - 1).getCoefficients()); kNm1 = coefficientsNm1[n - 1]; } Coefficients result(3); if ((kN == 0.0) || (kNp1 == 0.0)) throw InternalException(HERE) << "Error: one of the coefficients n or n+1 is zero."; result[0] = kNp1 / kN; result[1] = (lNp1 - lN * kNp1 / kN) / kN; result[2] = -result[0] * kNm1 / kN; return result; } /* Return the order-th raw moment of the underlying measure */ Scalar GramSchmidtAlgorithm::getStandardMoment(const UnsignedInteger order) const { // We know that the raw moments will be accessed in a particular pattern: the moments not already // computed will always be accessed in a successive increasing order const UnsignedInteger maxOrder = standardMoments_.getSize(); if (order > maxOrder) throw InvalidArgumentException(HERE) << "Error: cannot access to the raw moments in arbitrary order."; if (order == maxOrder) standardMoments_.add(measure_.getStandardMoment(order)[0]); return standardMoments_[order]; } /* Build the kth orthonormal polynomial */ UniVariatePolynomial GramSchmidtAlgorithm::buildPolynomial(const UnsignedInteger k) const { // If the needed polynomial is already in the cache if (k < coefficientsCache_.getSize()) return coefficientsCache_[k]; if (k > coefficientsCache_.getSize()) throw InvalidArgumentException(HERE) << "Error: cannot call buildPolynomial in arbitrary order."; UniVariatePolynomial v; if (useCanonicalBasis_) { // Build v = x^k Coefficients coefficients(k + 1, 0.0); coefficients[k] = 1.0; v = UniVariatePolynomial(coefficients); } else { v = referenceFamily_.build(k); } // Modified Gram-Schmidt algorithm UniVariatePolynomial q; for (UnsignedInteger i = 0; i < k; ++i) { const UniVariatePolynomial qi(buildPolynomial(i)); v = v - qi * dotProduct(qi, v); const Scalar norm2V = dotProduct(v, v); if (!(norm2V > 0.0)) throw InternalException(HERE) << "Error: the norm of the residual is zero."; q = v * (1.0 / sqrt(norm2V)); } coefficientsCache_.add(q.getCoefficients()); return q; } /* Compute the dot product between two general polynomials according to the measure */ Scalar GramSchmidtAlgorithm::dotProduct(const UniVariatePolynomial & p1, const UniVariatePolynomial & p2) const { const UniVariatePolynomial q(p1 * p2); const Coefficients ai(q.getCoefficients()); const UnsignedInteger dimension = ai.getDimension(); #define MOMENT #ifdef MOMENT Scalar value = 0.0; // Use the Kahan compensated summation to reduce roundoff errors Scalar e = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar temp = value; const Scalar y = ai[i] * getStandardMoment(i) + e; value = temp + y; e = (temp - value) + y; } value += e; return value; #else measure_.getImplementation()->setIntegrationNodesNumber(std::max(measure_.getImplementation()->getIntegrationNodesNumber(), std::min(ai.getSize(), 50))); Point weights; Point nodes(measure_.getImplementation()->getGaussNodesAndWeights(weights)); const Scalar lowerBound = measure_.getRange().getLowerBound()[0]; const Scalar upperBound = measure_.getRange().getUpperBound()[0]; const Scalar halfLength = 0.5 * (upperBound - lowerBound); Scalar newValue = 0.0; Scalar e = 0.0; for (UnsignedInteger i = 0; i < nodes.getSize(); ++i) { const Scalar temp = newValue; const Scalar xi = lowerBound + halfLength * (1.0 + nodes[i]); const Scalar y = weights[i] * p1(xi) * p2(xi) * measure_.computePDF(xi); newValue = temp + y; e = (temp - newValue) + y; } newValue += e; newValue *= halfLength; return newValue; #endif } /* Reference univariate orthogonal polynomial family accessor */ void GramSchmidtAlgorithm::setReferenceFamily(const OrthogonalUniVariatePolynomialFamily & family) { (*this) = GramSchmidtAlgorithm(measure_, family); } OrthogonalUniVariatePolynomialFamily GramSchmidtAlgorithm::getReferenceFamily() const { return referenceFamily_; } /* String converter */ String GramSchmidtAlgorithm::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void GramSchmidtAlgorithm::save(Advocate & adv) const { OrthonormalizationAlgorithmImplementation::save(adv); adv.saveAttribute( "referenceFamily_", referenceFamily_ ); adv.saveAttribute( "useCanonicalBasis_", useCanonicalBasis_ ); } /* Method load() reloads the object from the StorageManager */ void GramSchmidtAlgorithm::load(Advocate & adv) { OrthonormalizationAlgorithmImplementation::load(adv); adv.loadAttribute( "referenceFamily_", referenceFamily_ ); // Initialize the object using the appropriate constructor *this = GramSchmidtAlgorithm(measure_, referenceFamily_); adv.loadAttribute( "useCanonicalBasis_", useCanonicalBasis_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/HaarWaveletFactory.cxx000066400000000000000000000043531307543307100305750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Haar wavelet function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HaarWaveletFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/HaarWavelet.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HaarWaveletFactory); static const Factory Factory_HaarWaveletFactory; /* Default constructor */ HaarWaveletFactory::HaarWaveletFactory() : OrthogonalUniVariateFunctionFactory(Uniform(0.0, 1.0)) { initializeCache(); } /* Virtual constructor */ HaarWaveletFactory * HaarWaveletFactory::clone() const { return new HaarWaveletFactory(*this); } /* String converter */ String HaarWaveletFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* The method to get the function of any order */ UniVariateFunction HaarWaveletFactory::build(const UnsignedInteger order) const { if (order == 0) return HaarWavelet(0, 0, true); const UnsignedInteger j = SpecFunc::Log2(order); const UnsignedInteger k = order - (1 << j); return HaarWavelet(j, k, false); } /* Method save() stores the object through the StorageManager */ void HaarWaveletFactory::save(Advocate & adv) const { OrthogonalUniVariateFunctionFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void HaarWaveletFactory::load(Advocate & adv) { OrthogonalUniVariateFunctionFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/HermiteFactory.cxx000066400000000000000000000047361307543307100277740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Hermite polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HermiteFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HermiteFactory); static const Factory Factory_HermiteFactory; /* Default constructor */ HermiteFactory::HermiteFactory() : OrthogonalUniVariatePolynomialFactory(Normal()) { initializeCache(); } /* Virtual constructor */ HermiteFactory * HermiteFactory::clone() const { return new HermiteFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ HermiteFactory::Coefficients HermiteFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { recurrenceCoefficients[0] = 1.0; recurrenceCoefficients[1] = 0.0; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } recurrenceCoefficients[0] = 1.0 / sqrt(n + 1.0); recurrenceCoefficients[1] = 0.0; recurrenceCoefficients[2] = -sqrt(1.0 - 1.0 / (n + 1)); return recurrenceCoefficients; } /* String converter */ String HermiteFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void HermiteFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void HermiteFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/HistogramPolynomialFactory.cxx000066400000000000000000000172471307543307100324010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Histogram polynomial factory, specialization of the adaptive * Stieltjes algorithm with highly accurate and efficient dot product * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HistogramPolynomialFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Histogram.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HistogramPolynomialFactory); static const Factory Factory_HistogramPolynomialFactory; /* Default constructor, associated with the default Histogram distribution */ HistogramPolynomialFactory::HistogramPolynomialFactory() : OrthogonalUniVariatePolynomialFactory(Histogram()) , p_histogram_(dynamic_cast(&(*measure_.getImplementation()))) , legendre_() , monicRecurrenceCoefficients_(1, Coefficients(3)) , monicSquaredNorms_(1) { // Here we initialize the monic coefficients cache monicRecurrenceCoefficients_[0][0] = 1.0; monicRecurrenceCoefficients_[0][1] = -measure_.getMean()[0]; monicRecurrenceCoefficients_[0][2] = 0.0; monicSquaredNorms_[0] = 1.0; initializeCache(); } /* Parameter constructor */ HistogramPolynomialFactory::HistogramPolynomialFactory(const Scalar first, const Point & width, const Point & height) : OrthogonalUniVariatePolynomialFactory(Histogram(first, width, height)) , p_histogram_(dynamic_cast(&(*measure_.getImplementation()))) , legendre_() , monicRecurrenceCoefficients_(1, Coefficients(3)) , monicSquaredNorms_(1) { // Here we initialize the monic coefficients cache monicRecurrenceCoefficients_[0][0] = 1.0; monicRecurrenceCoefficients_[0][1] = -measure_.getMean()[0]; monicRecurrenceCoefficients_[0][2] = 0.0; monicSquaredNorms_[0] = 1.0; initializeCache(); } /* Virtual constructor */ HistogramPolynomialFactory * HistogramPolynomialFactory::clone() const { return new HistogramPolynomialFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x), P-1(x)=0, P0(x)=1 We have: a0n = 1/sqrt(\beta_{n+1}) a1n = -\alpha_n/sqrt(\beta_{n+1}) a2n = -\sqrt{\beta_n/\beta_{n+1}} where \alpha_n and \beta_n are the recurrence coefficients of the monic orthogonal coefficients Qn+1(x) = (x - \alpha_n) * Qn(x) - beta_n * Qn-1(x), Q-1(x)=0, Q0(x)=1 Rn = for n >= 0 \alpha_n = / Rn \beta_n = Rn / Rn-1 for n >= 1, \beta_0 = 0 Remark: here we considere probability measures D, so R0=1, \alpha_0=E[D]=\mu, Q1(x)=x-\mu, \beta_1=R1=Var[D] Due to the convention of coefficients for orthonormal polynomials, the coefficients of the monic polynomials are stored as [1, -\alpha_n, -\beta_n] */ HistogramPolynomialFactory::Coefficients HistogramPolynomialFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { // The cache size is at least 1 const UnsignedInteger cacheSize = monicRecurrenceCoefficients_.getSize(); // Get the coefficients from the cache if possible if (n < cacheSize - 1) { const Scalar inverseSqrtBetaNp1 = 1.0 / sqrt(-monicRecurrenceCoefficients_[n + 1][2]); Coefficients coefficients(3); coefficients[0] = inverseSqrtBetaNp1; if (std::abs(monicRecurrenceCoefficients_[n][1]) > 0.0) coefficients[1] = monicRecurrenceCoefficients_[n][1] * inverseSqrtBetaNp1; coefficients[2] = -sqrt(-monicRecurrenceCoefficients_[n][2]) * inverseSqrtBetaNp1; return coefficients; } // This loop is to go to the first coefficients not in the cache. Here we cannot use cacheSize as // the size of the cache is increased by each call to getRecurrenceCoefficients() while (n >= monicRecurrenceCoefficients_.getSize()) getRecurrenceCoefficients(n - 1); // Here we know that n == cacheSize - 1. In order to compute the recurrence coefficients of the orthonormal polynomial pN // we need \alpha_{n-1}, \beta_{n-1} and \beta_n. The first two values are in the cache, we need \beta_n. We compute both // \alpha_n and \beta_n by numerical integration. Coefficients monicCoefficients(3); monicCoefficients[0] = 1.0; // Compute the dot products of the monic orthogonal polynomial of degree cacheSize // \beta_n = Rn / Rn-1 with Rn-1 = \beta_{n-1}Rn-2 = \beta_{n-1}\beta_{n-2}Rn-3 = ... = \prod_{k=0}^{n-1}\beta_k // Compute Rn and const Point dotProduct(computeDotProduct(OrthogonalUniVariatePolynomial(monicRecurrenceCoefficients_))); monicSquaredNorms_.add(dotProduct[0]); monicCoefficients[1] = -dotProduct[1] / monicSquaredNorms_[n + 1]; monicCoefficients[2] = -monicSquaredNorms_[n + 1] / monicSquaredNorms_[n]; monicRecurrenceCoefficients_.add(monicCoefficients); // Now n == cacheSize - 2 return getRecurrenceCoefficients(n); } /* Compute dot products taking into account the singularities of the weights */ Point HistogramPolynomialFactory::computeDotProduct(const OrthogonalUniVariatePolynomial & qN) const { // Here we have integrals of qN(x)^2 and x*qN(x)^2, so a polynomial of maximal degree 2N+1, we need a N+1 Legendre quadrature rule const UnsignedInteger n = qN.getDegree(); Point weights; const Point nodes(legendre_.getNodesAndWeights(n + 1, weights)); const Scalar first = p_histogram_->getFirst(); const Point width(p_histogram_->getWidth()); const Point height(p_histogram_->getHeight()); Scalar a = first; Point dotProduct(2); for (UnsignedInteger i = 0; i < width.getSize(); ++i) { const Scalar ab = width[i]; const Scalar b = a + ab; const Scalar c = a + b; Point value(2); // Here we integrate qN^2 and xqN^2 over [a,b] for (UnsignedInteger j = 0; j <= n; ++j) { const Scalar x = 0.5 * (c + nodes[j] * ab); const Scalar qNX = qN(x); const Scalar qNX2 = qNX * qNX; value[0] += weights[j] * qNX2; value[1] += weights[j] * x * qNX2; } dotProduct += (height[i] * ab) * value; a = b; } return dotProduct; } /* First accessor */ Scalar HistogramPolynomialFactory::getFirst() const { return p_histogram_->getFirst(); } /* Width accessor */ Point HistogramPolynomialFactory::getWidth() const { return p_histogram_->getWidth(); } /* Height accessor */ Point HistogramPolynomialFactory::getHeight() const { return p_histogram_->getHeight(); } /* String converter */ String HistogramPolynomialFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_ << " legendre=" << legendre_; } /* Method save() stores the object through the StorageManager */ void HistogramPolynomialFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "legendre_", legendre_ ); } /* Method load() reloads the object from the StorageManager */ void HistogramPolynomialFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "legendre_", legendre_ ); p_histogram_ = dynamic_cast(&(*measure_.getImplementation())); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/JacobiFactory.cxx000066400000000000000000000122371307543307100275610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Jacobi polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/JacobiFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Beta.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(JacobiFactory); static const Factory Factory_JacobiFactory; /* Default constructor: (1, 1) order Jacobi polynomial associated with the default Beta() = Beta(2, 4, -1, 1) distribution which is equal to the Epanechnikov distribution */ JacobiFactory::JacobiFactory() : OrthogonalUniVariatePolynomialFactory(Beta()) , alpha_(1.0) , beta_(1.0) { initializeCache(); } /* Parameter constructor: (alpha, beta) is the order of the Jacobi polynomial, associated with the Beta(beta + 1, alpha + beta + 2, -1, 1) distribution in the ANALYSIS parameter set or to the Beta(alpha, beta, -1, 1) distribution in the PROBABILITY parameter set */ JacobiFactory::JacobiFactory(const Scalar alpha, const Scalar beta, const ParameterSet parameterization) : OrthogonalUniVariatePolynomialFactory((parameterization == ANALYSIS ? Beta(beta + 1.0, alpha + beta + 2.0, -1.0, 1.0) : Beta(alpha, beta, -1.0, 1.0))) , alpha_(0.0) , beta_(0.0) { if (parameterization == ANALYSIS) { alpha_ = alpha; beta_ = beta; } else { alpha_ = beta - alpha - 1.0; beta_ = alpha - 1.0; } initializeCache(); } /* Virtual constructor */ JacobiFactory * JacobiFactory::clone() const { return new JacobiFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ JacobiFactory::Coefficients JacobiFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar factor = 0.5 * sqrt((alpha_ + beta_ + 3.0) / ((alpha_ + 1.0) * (beta_ + 1.0))); recurrenceCoefficients[0] = (alpha_ + beta_ + 2.0) * factor; // To avoid spurious -0.0 if (alpha_ != beta_) recurrenceCoefficients[1] = (alpha_ - beta_) * factor; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar nAlphaP1 = n + alpha_ + 1; const Scalar nBetaP1 = n + beta_ + 1; const Scalar twoNAlphaBetaP2 = nAlphaP1 + nBetaP1; const Scalar factor1 = (twoNAlphaBetaP2 + 1) / ((n + 1) * nAlphaP1 * nBetaP1 * (nAlphaP1 + beta_)); const Scalar factor2 = 0.5 * sqrt((twoNAlphaBetaP2 - 1) * factor1); recurrenceCoefficients[0] = factor2 * twoNAlphaBetaP2; // To avoid spurious -0.0 if (alpha_ != beta_) recurrenceCoefficients[1] = factor2 * (alpha_ - beta_) * (alpha_ + beta_) / (twoNAlphaBetaP2 - 2); if (n == 1) { const Scalar epsilon = alpha_ + beta_ + 1.0; // The case where |epsilon| << 1 leads to an indeterminate form 0/0 // when n==1, which is the only case where such a problem can occur. // We use a series expansion, the threshold 1.0e-8 insures that the // resulting error is less than machine precision // Here we know that alpha>-1, beta>-1 so alpha+beta+1=0 imposes beta<0 if (std::abs(epsilon) < 1.0e-8) { recurrenceCoefficients[2] = (1.5 * epsilon / (-1.0 + beta_) + beta_ * (3.0 - 3.125 * epsilon)) * sqrt(2.0 * (1.0 + beta_) / (beta_ * (-1.0 + beta_) * (2.0 + beta_))); return recurrenceCoefficients; } } recurrenceCoefficients[2] = -twoNAlphaBetaP2 / (twoNAlphaBetaP2 - 2) * sqrt((nAlphaP1 - 1) * (nBetaP1 - 1) * (nAlphaP1 + beta_ - 1) * n * factor1 / (twoNAlphaBetaP2 - 3)); return recurrenceCoefficients; } /* Alpha accessor */ Scalar JacobiFactory::getAlpha() const { return alpha_; } /* Beta accessor */ Scalar JacobiFactory::getBeta() const { return beta_; } /* String converter */ String JacobiFactory::__repr__() const { return OSS() << "class=" << getClassName() << " alpha=" << alpha_ << " beta=" << beta_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void JacobiFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); } /* Method load() reloads the object from the StorageManager */ void JacobiFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/KrawtchoukFactory.cxx000066400000000000000000000077431307543307100305220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Krawtchouk polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KrawtchoukFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Binomial.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrawtchoukFactory); static const Factory Factory_KrawtchoukFactory; /* Default constructor: (1, 0.5) order Krawtchouk polynomial associated with the default Binomial() = Binomial(1, 0.5) distribution which is equal to the Bernoulli(0.5) distribution */ KrawtchoukFactory::KrawtchoukFactory() : OrthogonalUniVariatePolynomialFactory(Binomial()), n_(1), p_(0.5) { initializeCache(); } /* Parameter constructor: (n, p) is the order of the Krawtchouk polynomial, associated with the Binomial(n, p) distribution */ KrawtchoukFactory::KrawtchoukFactory(const UnsignedInteger n, const Scalar p) : OrthogonalUniVariatePolynomialFactory(Binomial(n, p)), n_(n), p_(p) { if ((n == 0) || (p <= 0.0) || (p >= 1.0)) throw InvalidArgumentException(HERE) << "Error: must have N>0 and p in ]0, 1[ to build Krawtchouk polynomials."; initializeCache(); } /* Virtual constructor */ KrawtchoukFactory * KrawtchoukFactory::clone() const { return new KrawtchoukFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ KrawtchoukFactory::Coefficients KrawtchoukFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { if (n > n_) throw InvalidArgumentException(HERE) << "Error: cannot build a Krawtchouk polynomial of index greater than its first parameter n. Here, n=" << n << " and you try to build the " << n << "th polynomial."; Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar factor1 = sqrt(n_ * p_); const Scalar factor2 = 1.0 / sqrt(1.0 - p_); recurrenceCoefficients[0] = factor2 / factor1; recurrenceCoefficients[1] = -factor2 * factor1; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar factor = 1.0 / sqrt((n + 1) * (n_ - n) * p_ * (1.0 - p_)); recurrenceCoefficients[0] = factor; recurrenceCoefficients[1] = -(p_ * (n_ - n) + n * (1.0 - p_)) * factor; recurrenceCoefficients[2] = -sqrt((1.0 - 1.0 / (n + 1.0)) * (1.0 + 1.0 / (n_ - n))); return recurrenceCoefficients; } /* N accessor */ UnsignedInteger KrawtchoukFactory::getN() const { return n_; } /* P accessor */ Scalar KrawtchoukFactory::getP() const { return p_; } /* String converter */ String KrawtchoukFactory::__repr__() const { return OSS() << "class=" << getClassName() << " N=" << n_ << " p=" << p_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void KrawtchoukFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "n_", n_ ); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void KrawtchoukFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "n_", n_ ); adv.loadAttribute( "p_", p_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/LaguerreFactory.cxx000066400000000000000000000064331307543307100301410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Laguerre polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LaguerreFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Gamma.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LaguerreFactory); static const Factory Factory_LaguerreFactory; /* Default constructor, associated with the default Gamma distribution which is equal to the Exponential distribution */ LaguerreFactory::LaguerreFactory() : OrthogonalUniVariatePolynomialFactory(Gamma()), k_(0.0) { initializeCache(); } /* Parameter constructor: k is the order of the generalized Laguerre polynomial, associated with the Gamma(k+1, 1, 0) distribution */ LaguerreFactory::LaguerreFactory(const Scalar k, const ParameterSet parameterization) : OrthogonalUniVariatePolynomialFactory( (parameterization == ANALYSIS ? Gamma(k + 1.0, 1.0, 0.0) : Gamma(k, 1.0, 0.0) ) ), k_(k) { initializeCache(); } /* Virtual constructor */ LaguerreFactory * LaguerreFactory::clone() const { return new LaguerreFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ LaguerreFactory::Coefficients LaguerreFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar factor = sqrt(k_ + 1.0); recurrenceCoefficients[0] = 1.0 / factor; recurrenceCoefficients[1] = -factor; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar factor = 1.0 / sqrt((n + 1.0) * (n + 1.0 + k_)); recurrenceCoefficients[0] = factor; recurrenceCoefficients[1] = -(2.0 * n + 1.0 + k_) * factor; recurrenceCoefficients[2] = -sqrt((n + k_) * n) * factor; return recurrenceCoefficients; } /* K accessor */ Scalar LaguerreFactory::getK() const { return k_; } /* String converter */ String LaguerreFactory::__repr__() const { return OSS() << "class=" << getClassName() << " k=" << k_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void LaguerreFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "k_", k_ ); } /* Method load() reloads the object from the StorageManager */ void LaguerreFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "k_", k_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/LegendreFactory.cxx000066400000000000000000000050771307543307100301230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Legendre polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LegendreFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LegendreFactory); static const Factory Factory_LegendreFactory; /* Default constructor */ LegendreFactory::LegendreFactory() : OrthogonalUniVariatePolynomialFactory(Uniform()) { initializeCache(); } /* Virtual constructor */ LegendreFactory * LegendreFactory::clone() const { return new LegendreFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ LegendreFactory::Coefficients LegendreFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { recurrenceCoefficients[0] = sqrt(3.0); recurrenceCoefficients[1] = 0.0; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar factor = sqrt(2.0 * n + 3.0) / (n + 1.0); recurrenceCoefficients[0] = sqrt(2.0 * n + 1.0) * factor; recurrenceCoefficients[1] = 0.0; recurrenceCoefficients[2] = -factor * n / sqrt(2.0 * n - 1.0); return recurrenceCoefficients; } /* String converter */ String LegendreFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void LegendreFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void LegendreFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/MeixnerFactory.cxx000066400000000000000000000072421307543307100300010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meixner polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MeixnerFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/NegativeBinomial.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MeixnerFactory); static const Factory Factory_MeixnerFactory; /* Default constructor, associated with the default Negative Binomial distribution of parameter 1, 1/2. */ MeixnerFactory::MeixnerFactory() : OrthogonalUniVariatePolynomialFactory(NegativeBinomial()), r_(1.0), p_(0.5) { initializeCache(); } /* Parameter constructor: lambda is the order of the generalized Meixner polynomial, associated with the NegativeBinomial(r, p) distribution */ MeixnerFactory::MeixnerFactory(const Scalar r, const Scalar p) : OrthogonalUniVariatePolynomialFactory( NegativeBinomial(r, p) ), r_(r), p_(p) { if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "Error: must have r>0 to build Meixner polynomials."; if ((p <= 0.0) || (p >= 1.0)) throw InvalidArgumentException(HERE) << "Error: p must be in [0, 1] to build Meixner polynomials."; initializeCache(); } /* Virtual constructor */ MeixnerFactory * MeixnerFactory::clone() const { return new MeixnerFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ MeixnerFactory::Coefficients MeixnerFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { Coefficients recurrenceCoefficients(3, 0.0); if (n == 0) { const Scalar factor = sqrt(r_ * p_); recurrenceCoefficients[0] = (p_ - 1.0) / factor; recurrenceCoefficients[1] = factor; // Conventional value of 0.0 for recurrenceCoefficients[2] return recurrenceCoefficients; } const Scalar denominator = sqrt(p_ * (n + 1) * (n + r_)); recurrenceCoefficients[0] = (p_ - 1.0) / denominator; recurrenceCoefficients[1] = (p_ * (n + r_) + n) / denominator; recurrenceCoefficients[2] = -sqrt(p_ * n * (n + r_ - 1.0)) / denominator; return recurrenceCoefficients; } /* R accessor */ Scalar MeixnerFactory::getR() const { return r_; } /* P accessor */ Scalar MeixnerFactory::getP() const { return p_; } /* String converter */ String MeixnerFactory::__repr__() const { return OSS() << "class=" << getClassName() << " r=" << r_ << " p=" << p_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void MeixnerFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "r_", r_ ); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void MeixnerFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "r_", r_ ); adv.loadAttribute( "p_", p_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalBasis.cxx000066400000000000000000000042061307543307100301350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalBasis.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalBasis); /* Default constructor */ OrthogonalBasis::OrthogonalBasis() : TypedInterfaceObject(new OrthogonalFunctionFactory()) { // Nothing to do } /* Constructor from implementation */ OrthogonalBasis::OrthogonalBasis(const OrthogonalFunctionFactory & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Build the Function of the given index */ Function OrthogonalBasis::build(const UnsignedInteger index) const { return getImplementation()->build(index); } /* Return the measure upon which the basis is orthogonal */ Distribution OrthogonalBasis::getMeasure() const { return getImplementation()->getMeasure(); } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction OrthogonalBasis::getEnumerateFunction() const { return getImplementation()->getEnumerateFunction(); } /* String converter */ String OrthogonalBasis::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalFunctionFactory.cxx000066400000000000000000000061421307543307100322120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalFunctionFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalFunctionFactory); static const Factory Factory_OrthogonalFunctionFactory; /* Default constructor */ OrthogonalFunctionFactory::OrthogonalFunctionFactory() : FunctionalBasisImplementation() , measure_() { // Nothing to do } /* Parameter constructor */ OrthogonalFunctionFactory::OrthogonalFunctionFactory(const Distribution & measure) : FunctionalBasisImplementation() , measure_(measure) { // Nothing to do } /* Virtual constructor */ OrthogonalFunctionFactory * OrthogonalFunctionFactory::clone() const { return new OrthogonalFunctionFactory(*this); } /* Build the Function of the given index */ Function OrthogonalFunctionFactory::build(const UnsignedInteger index) const { throw NotYetImplementedException(HERE) << "In OrthogonalFunctionFactory::build(const UnsignedInteger index) const"; } /* Return the measure upon which the basis is orthogonal */ Distribution OrthogonalFunctionFactory::getMeasure() const { return measure_; } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction OrthogonalFunctionFactory::getEnumerateFunction() const { throw NotYetImplementedException(HERE) << "In OrthogonalFunctionFactory::getEnumerateFunction() const"; } Bool OrthogonalFunctionFactory::isOrthogonal() const { return true; } /* String converter */ String OrthogonalFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void OrthogonalFunctionFactory::save(Advocate & adv) const { FunctionalBasisImplementation::save(adv); adv.saveAttribute( "measure_", measure_ ); adv.saveAttribute( "enumerateFunction_", enumerateFunction_ ); } /* Method load() reloads the object from the StorageManager */ void OrthogonalFunctionFactory::load(Advocate & adv) { FunctionalBasisImplementation::load(adv); adv.loadAttribute( "measure_", measure_ ); adv.loadAttribute( "enumerateFunction_", enumerateFunction_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalProductFunctionFactory.cxx000066400000000000000000000130501307543307100335470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the orthogonal function basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalProductFunctionFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Indices.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/ProductUniVariateFunctionEvaluation.hxx" #include "openturns/ProductUniVariateFunctionGradient.hxx" #include "openturns/ProductUniVariateFunctionHessian.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_OrthogonalUniVariateFunctionFamily; CLASSNAMEINIT(OrthogonalProductFunctionFactory); static const Factory Factory_OrthogonalProductFunctionFactory; typedef Collection PointCollection; typedef ProductUniVariateFunctionEvaluation::UniVariateFunctionCollection UniVariateFunctionCollection; /* Default constructor */ OrthogonalProductFunctionFactory::OrthogonalProductFunctionFactory() : OrthogonalFunctionFactory() , tensorizedFunctionFactory_() { // Nothing to do } /* Constructor */ OrthogonalProductFunctionFactory::OrthogonalProductFunctionFactory(const FunctionFamilyCollection & coll) : OrthogonalFunctionFactory() { buildTensorizedFunctionFactory(coll, EnumerateFunction(coll.getSize()) ); buildMeasure(coll); } /* Constructor */ OrthogonalProductFunctionFactory::OrthogonalProductFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi) : OrthogonalFunctionFactory() { if (coll.getSize() != phi.getDimension()) throw InvalidArgumentException(HERE) << "Error: the enumerate function must have a dimension equal to the collection size"; buildTensorizedFunctionFactory(coll, phi); buildMeasure(coll); } /* Virtual constructor */ OrthogonalProductFunctionFactory * OrthogonalProductFunctionFactory::clone() const { return new OrthogonalProductFunctionFactory(*this); } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction OrthogonalProductFunctionFactory::getEnumerateFunction() const { return tensorizedFunctionFactory_.getEnumerateFunction(); } /* Return the collection of univariate orthogonal polynomial families */ OrthogonalProductFunctionFactory::FunctionFamilyCollection OrthogonalProductFunctionFactory::getFunctionFamilyCollection() const { TensorizedUniVariateFunctionFactory::FunctionFamilyCollection functionColl(tensorizedFunctionFactory_.getFunctionFamilyCollection()); FunctionFamilyCollection coll; for (UnsignedInteger i = 0; i < functionColl.getSize(); ++ i) { coll.add(dynamic_cast(functionColl[i].getImplementation().get())->clone()); } return coll; } /* Build the Function of the given index */ Function OrthogonalProductFunctionFactory::build(const UnsignedInteger index) const { return tensorizedFunctionFactory_.build(index); } /* String converter */ String OrthogonalProductFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName() << " factory=" << tensorizedFunctionFactory_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void OrthogonalProductFunctionFactory::save(Advocate & adv) const { OrthogonalFunctionFactory::save(adv); adv.saveAttribute("tensorizedFunctionFactory_", tensorizedFunctionFactory_); } /* Method load() reloads the object from the StorageManager */ void OrthogonalProductFunctionFactory::load(Advocate & adv) { OrthogonalFunctionFactory::load(adv); adv.loadAttribute("tensorizedFunctionFactory_", tensorizedFunctionFactory_); } /* Build product function factory */ void OrthogonalProductFunctionFactory::buildTensorizedFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi) { TensorizedUniVariateFunctionFactory::FunctionFamilyCollection functionColl; const UnsignedInteger size = coll.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { functionColl.add(UniVariateFunctionFamily(*coll[i].getImplementation())); } tensorizedFunctionFactory_.setFunctionFamilyCollection(functionColl); tensorizedFunctionFactory_.setEnumerateFunction(phi); } /* Build the measure based on the one found in the family collection */ void OrthogonalProductFunctionFactory::buildMeasure(const FunctionFamilyCollection & coll) { const UnsignedInteger size = coll.getSize(); Collection distributions(size); for (UnsignedInteger i = 0; i < size; ++i) { distributions[i] = coll[i].getMeasure(); } measure_ = ComposedDistribution(distributions); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalProductPolynomialFactory.cxx000066400000000000000000000157371307543307100341230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the orthogonal polynomial basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalProductPolynomialFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Indices.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/ProductPolynomialEvaluation.hxx" #include "openturns/ProductPolynomialGradient.hxx" #include "openturns/ProductPolynomialHessian.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_OrthogonalUniVariatePolynomialFamily; CLASSNAMEINIT(OrthogonalProductPolynomialFactory); static const Factory Factory_OrthogonalProductPolynomialFactory; typedef Collection PointCollection; typedef ProductPolynomialEvaluation::PolynomialCollection PolynomialCollection; /* Default constructor */ OrthogonalProductPolynomialFactory::OrthogonalProductPolynomialFactory() : OrthogonalFunctionFactory() , coll_() , phi_() { // Nothing to do } /* Constructor */ OrthogonalProductPolynomialFactory::OrthogonalProductPolynomialFactory(const PolynomialFamilyCollection & coll) : OrthogonalFunctionFactory() , coll_(coll) , phi_(coll.getSize()) { buildMeasure(); } /* Constructor */ OrthogonalProductPolynomialFactory::OrthogonalProductPolynomialFactory(const PolynomialFamilyCollection & coll, const EnumerateFunction & phi) : OrthogonalFunctionFactory(), coll_(coll), phi_(phi) { if (coll.getSize() != phi.getDimension()) throw InvalidArgumentException(HERE) << "Error: the enumerate function must have a dimension equal to the collection size"; buildMeasure(); } /* Virtual constructor */ OrthogonalProductPolynomialFactory * OrthogonalProductPolynomialFactory::clone() const { return new OrthogonalProductPolynomialFactory(*this); } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction OrthogonalProductPolynomialFactory::getEnumerateFunction() const { return phi_; } /* Return the collection of univariate orthogonal polynomial families */ OrthogonalProductPolynomialFactory::PolynomialFamilyCollection OrthogonalProductPolynomialFactory::getPolynomialFamilyCollection() const { return coll_; } /* Build the Function of the given index */ Function OrthogonalProductPolynomialFactory::build(const UnsignedInteger index) const { // Compute the multi-indices using the EnumerateFunction Indices indices(phi_(index)); const UnsignedInteger size = indices.getSize(); // Then build the collection of polynomials using the collection of factories PolynomialCollection polynomials(size); for (UnsignedInteger i = 0; i < size; ++i) { polynomials[i] = coll_[i].build(indices[i]); } return FunctionImplementation(ProductPolynomialEvaluation(polynomials).clone(), ProductPolynomialGradient(polynomials).clone(), ProductPolynomialHessian(polynomials).clone()); } /* String converter */ String OrthogonalProductPolynomialFactory::__repr__() const { return OSS() << "class=" << getClassName() << " univariate polynomial collection=" << coll_ << " measure=" << measure_; } /* Method save() stores the object through the StorageManager */ void OrthogonalProductPolynomialFactory::save(Advocate & adv) const { OrthogonalFunctionFactory::save(adv); adv.saveAttribute( "coll_", coll_ ); adv.saveAttribute( "phi_", phi_ ); } /* Method load() reloads the object from the StorageManager */ void OrthogonalProductPolynomialFactory::load(Advocate & adv) { OrthogonalFunctionFactory::load(adv); adv.loadAttribute( "coll_", coll_ ); adv.loadAttribute( "phi_", phi_ ); } /* Build the measure based on the one found in the family collection */ void OrthogonalProductPolynomialFactory::buildMeasure() { const UnsignedInteger size = coll_.getSize(); Collection distributions(size); for (UnsignedInteger i = 0; i < size; ++i) { distributions[i] = coll_[i].getMeasure(); } measure_ = ComposedDistribution(distributions); } /* Nodes and weights of the multivariate polynomial associated with the marginal degrees indices[0], ...,indices[dimension] as the tensor product of the marginal orthogonal univariate polynomials, to build multivariate quadrature rules */ Sample OrthogonalProductPolynomialFactory::getNodesAndWeights(const Indices & degrees, Point & weights) const { const UnsignedInteger degreesSize = degrees.getSize(); if (degreesSize != coll_.getSize()) throw InvalidArgumentException(HERE) << "Error: the degrees size must match the size of the orthogonal univariate polynomials factories size."; Bool isConstant = true; for (UnsignedInteger i = 0; i < degreesSize; ++i) isConstant = isConstant && (degrees[i] == 0); if (isConstant) throw InvalidArgumentException(HERE) << "Error: cannot compute the roots and weights of a constant polynomial."; // First, get the nodes and weights of the marginal factories PointCollection marginalNodes; PointCollection marginalWeights; UnsignedInteger totalSize = 1; for (UnsignedInteger i = 0; i < degreesSize; ++i) { const UnsignedInteger d = degrees[i]; totalSize *= d; Point w; marginalNodes.add(coll_[i].getNodesAndWeights(d, w)); marginalWeights.add(w); } // Perform the tensor product Sample nodes(totalSize, degreesSize); weights = Point(totalSize, 1.0); Indices indices(degreesSize, 0); for (UnsignedInteger i = 0; i < totalSize; ++i) { // Build the current node for (UnsignedInteger j = 0; j < degreesSize; ++j) { nodes[i][j] = marginalNodes[j][indices[j]]; weights[i] *= marginalWeights[j][indices[j]]; } /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger j = 0; j < degreesSize - 1; ++j) indices[j + 1] += (indices[j] == degrees[j]); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger j = 0; j < degreesSize - 1; ++j) indices[j] = indices[j] % degrees[j]; } return nodes; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalUniVariateFunctionFactory.cxx000066400000000000000000000050651307543307100342050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This an abstract class for 1D function factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariateFunctionFactory); static const Factory Factory_OrthogonalUniVariateFunctionFactory; /* Default constructor */ OrthogonalUniVariateFunctionFactory::OrthogonalUniVariateFunctionFactory() : UniVariateFunctionFactory() , measure_() { // Nothing to do. The derived class will have to call initializeCaches(). } /* Constructor */ OrthogonalUniVariateFunctionFactory::OrthogonalUniVariateFunctionFactory(const Distribution & measure) : UniVariateFunctionFactory() , measure_(measure) { // Nothing to do. The derived class will have to call initializeCaches(). } /* Virtual constructor */ OrthogonalUniVariateFunctionFactory * OrthogonalUniVariateFunctionFactory::clone() const { return new OrthogonalUniVariateFunctionFactory(*this); } /* String converter */ String OrthogonalUniVariateFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* Measure accessor */ Distribution OrthogonalUniVariateFunctionFactory::getMeasure() const { return measure_; } /* Method save() stores the object through the StorageManager */ void OrthogonalUniVariateFunctionFactory::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("measure_", measure_); } /* Method load() reloads the object from the StorageManager */ void OrthogonalUniVariateFunctionFactory::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("measure_", measure_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalUniVariateFunctionFamily.cxx000066400000000000000000000052301307543307100340110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for orthogonal function factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariateFunctionFamily.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/FourierSeriesFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariateFunctionFamily); /* Default constructor */ OrthogonalUniVariateFunctionFamily::OrthogonalUniVariateFunctionFamily() : TypedInterfaceObject(new FourierSeriesFactory) { // Nothing to do } /* Constructor from implementation */ OrthogonalUniVariateFunctionFamily::OrthogonalUniVariateFunctionFamily(const OrthogonalUniVariateFunctionFactory & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ OrthogonalUniVariateFunctionFamily::OrthogonalUniVariateFunctionFamily(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation */ OrthogonalUniVariateFunctionFamily::OrthogonalUniVariateFunctionFamily(OrthogonalUniVariateFunctionFactory * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* The method to get the function of any order */ UniVariateFunction OrthogonalUniVariateFunctionFamily::build(const UnsignedInteger order) const { return getImplementation()->build(order); } /* Measure accessor */ Distribution OrthogonalUniVariateFunctionFamily::getMeasure() const { return getImplementation()->getMeasure(); } /* String converter */ String OrthogonalUniVariateFunctionFamily::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalUniVariatePolynomial.cxx000066400000000000000000000155501307543307100332130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is a 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariatePolynomial.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Exception.hxx" #include "openturns/Lapack.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariatePolynomial); static const Factory Factory_OrthogonalUniVariatePolynomial; /* Default constructor */ OrthogonalUniVariatePolynomial::OrthogonalUniVariatePolynomial() : UniVariatePolynomialImplementation(), recurrenceCoefficients_(0) { coefficients_ = Coefficients(1, 1.0); } /* Constructor from recurrence coefficients */ OrthogonalUniVariatePolynomial::OrthogonalUniVariatePolynomial(const CoefficientsCollection & recurrenceCoefficients) : UniVariatePolynomialImplementation(), recurrenceCoefficients_(recurrenceCoefficients) { // Build the coefficients using the recurrence coefficients coefficients_ = Coefficients(buildCoefficients(recurrenceCoefficients.getSize())); } /* Constructor from recurrence coefficients and coefficients */ OrthogonalUniVariatePolynomial::OrthogonalUniVariatePolynomial(const CoefficientsCollection & recurrenceCoefficients, const Coefficients & coefficients) : UniVariatePolynomialImplementation(), recurrenceCoefficients_(recurrenceCoefficients) { // Set the value of the coefficients, stored in the upper class coefficients_ = coefficients; } /* Build the coefficients of the polynomial based on the recurrence coefficients */ OrthogonalUniVariatePolynomial::Coefficients OrthogonalUniVariatePolynomial::buildCoefficients(const UnsignedInteger n) { // Constant polynomial equals to 1 if (n == 0) return Coefficients(1, 1.0); // Other cases Coefficients coefficientsN(n + 1); Coefficients coefficientsNMinus1(buildCoefficients(n - 1)); // Leading term const Coefficients aN(recurrenceCoefficients_[n - 1]); coefficientsN[n] = aN[0] * coefficientsNMinus1[n - 1]; // Constant term, case n = 1 coefficientsN[0] = aN[1] * coefficientsNMinus1[0]; if (n == 1) return coefficientsN; // Constant term, case n >= 2 Coefficients coefficientsNMinus2(buildCoefficients(n - 2)); coefficientsN[0] += aN[2] * coefficientsNMinus2[0]; // Leading term coefficientsN[n] = aN[0] * coefficientsNMinus1[n - 1]; // Second leading term coefficientsN[n - 1] = aN[0] * coefficientsNMinus1[n - 2] + aN[1] * coefficientsNMinus1[n - 1]; // Constant term coefficientsN[0] = aN[1] * coefficientsNMinus1[0] + aN[2] * coefficientsNMinus2[0]; // Remaining terms for (UnsignedInteger i = 1; i < n - 1; ++i) coefficientsN[i] = aN[0] * coefficientsNMinus1[i - 1] + aN[1] * coefficientsNMinus1[i] + aN[2] * coefficientsNMinus2[i]; return coefficientsN; } /* Virtual constructor */ OrthogonalUniVariatePolynomial * OrthogonalUniVariatePolynomial::clone() const { return new OrthogonalUniVariatePolynomial(*this); } /* OrthogonalUniVariatePolynomial are evaluated as functors */ Scalar OrthogonalUniVariatePolynomial::operator() (const Scalar x) const { const UnsignedInteger size = recurrenceCoefficients_.getSize(); Scalar uN = 1.0; // Special case: degree == 0, constant unitary polynomial if (size == 0) return uN; Coefficients aN(recurrenceCoefficients_[size - 1]); Scalar uNMinus1 = aN[0] * x + aN[1]; // Special case: degree == 1, affine polynomial if (size == 1) return uNMinus1; Scalar uNMinus2 = 0.0; // General case, use Clenshaw's algorithm for a stable evaluation of the polynomial // The summation must be done in reverse order to get the best stability // The three terms recurrence relation is: // Pn+1(x) = (a0[n] * x + a1[n]) * Pn(x) + a2[n] * Pn-1(x) // with P-1 = 0, P0 = 1 for (UnsignedInteger n = size - 1; n > 0; --n) { const Coefficients aNMinus1(recurrenceCoefficients_[n - 1]); uNMinus2 = (aNMinus1[0] * x + aNMinus1[1]) * uNMinus1 + aN[2] * uN; uN = uNMinus1; uNMinus1 = uNMinus2; aN = aNMinus1; } return uNMinus2; } OrthogonalUniVariatePolynomial::CoefficientsCollection OrthogonalUniVariatePolynomial::getRecurrenceCoefficients() const { return recurrenceCoefficients_; } /* Roots of the polynomial of degree n as the eigenvalues of the associated Jacobi matrix */ /* Jn = [alpha_0 sqrt(beta_1) 0 ... sqrt(beta_1) alpha_1 sqrt(beta_2) 0 ... 0 sqrt(beta_2) alpha_2 sqrt(beta_3) 0 ... | 0 ... 0 sqrt(beta_{n-1}) alpha_{n-1}] */ OrthogonalUniVariatePolynomial::ComplexCollection OrthogonalUniVariatePolynomial::getRoots() const { const UnsignedInteger n = getDegree(); if (n == 0) throw InvalidArgumentException(HERE) << "Error: cannot compute the roots of a constant polynomial."; // gauss integration rule char jobz('N'); int ljobz(1); Point d(n); Point e(n - 1); Coefficients recurrenceCoefficientsI(recurrenceCoefficients_[0]); Scalar alphaPrec = recurrenceCoefficientsI[0]; d[0] = -recurrenceCoefficientsI[1] / alphaPrec; for (UnsignedInteger i = 1; i < n; ++i) { recurrenceCoefficientsI = recurrenceCoefficients_[i]; d[i] = -recurrenceCoefficientsI[1] / recurrenceCoefficientsI[0]; e[i - 1] = sqrt(-recurrenceCoefficientsI[2] / (recurrenceCoefficientsI[0] * alphaPrec)); alphaPrec = recurrenceCoefficientsI[0]; } int ldz(n); SquareMatrix z(n); Point work(2 * n - 2); int info; dstev_(&jobz, &ldz, &d[0], &e[0], &z(0, 0), &ldz, &work[0], &info, &ljobz); if (info != 0) throw InternalException(HERE) << "Lapack DSTEV: error code=" << info; ComplexCollection result(n); for (UnsignedInteger i = 0; i < n; ++i) result[i] = Complex(d[i], 0.0); return result; } /* Method save() stores the object through the StorageManager */ void OrthogonalUniVariatePolynomial::save(Advocate & adv) const { UniVariatePolynomialImplementation::save(adv); adv.saveAttribute( "recurrenceCoefficients_", recurrenceCoefficients_ ); } /* Method load() reloads the object from the StorageManager */ void OrthogonalUniVariatePolynomial::load(Advocate & adv) { UniVariatePolynomialImplementation::load(adv); adv.loadAttribute( "recurrenceCoefficients_", recurrenceCoefficients_ ); } END_NAMESPACE_OPENTURNS OrthogonalUniVariatePolynomialFactory.cxx000066400000000000000000000204571307543307100344660ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis// -*- C++ -*- /** * @brief This an abstract class for 1D polynomial factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Normal.hxx" #include "openturns/Exception.hxx" #include "openturns/Lapack.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariatePolynomialFactory); static const Factory Factory_OrthogonalUniVariatePolynomialFactory; /* Default constructor */ OrthogonalUniVariatePolynomialFactory::OrthogonalUniVariatePolynomialFactory() : PersistentObject() , measure_() , coefficientsCache_(0) , recurrenceCoefficientsCache_(0) , polynomialsCache_(0) { // Nothing to do. The derived class will have to call initializeCaches(). } /* Constructor */ OrthogonalUniVariatePolynomialFactory::OrthogonalUniVariatePolynomialFactory(const Distribution & measure) : PersistentObject() , measure_(measure) , coefficientsCache_(0) , recurrenceCoefficientsCache_(0) , polynomialsCache_(0) { // Nothing to do. The derived class will have to call initializeCaches(). } /* Virtual constructor */ OrthogonalUniVariatePolynomialFactory * OrthogonalUniVariatePolynomialFactory::clone() const { return new OrthogonalUniVariatePolynomialFactory(*this); } /* String converter */ String OrthogonalUniVariatePolynomialFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* The method to get the polynomial of any degree */ OrthogonalUniVariatePolynomial OrthogonalUniVariatePolynomialFactory::build(const UnsignedInteger degree) const { const UnsignedInteger cacheSize = polynomialsCache_.getSize(); if (degree < cacheSize) return polynomialsCache_[degree]; for (UnsignedInteger i = cacheSize; i <= degree; ++i) { CoefficientsCollection rec(buildRecurrenceCoefficientsCollection(i)); polynomialsCache_.add(OrthogonalUniVariatePolynomial(rec, buildCoefficients(i))); }; return polynomialsCache_[degree]; } /* Build the coefficients of the polynomial based on the recurrence coefficients */ OrthogonalUniVariatePolynomialFactory::Coefficients OrthogonalUniVariatePolynomialFactory::buildCoefficients(const UnsignedInteger n) const { const UnsignedInteger size = coefficientsCache_.getSize(); // If we have already computed the coefficients if (n < size) return coefficientsCache_[n]; // Else we have to compute all the coefficients from the last computed coefficients to the needed ones. The cache will be filled in the correct order thanks to the recursive call // Here, n >= 1 as the case n = 0 is already in the cache // Other cases Coefficients coefficientsN(n + 1); Coefficients coefficientsNMinus1(buildCoefficients(n - 1)); // Leading term const Coefficients aN(getRecurrenceCoefficients(n - 1)); coefficientsN[n] = aN[0] * coefficientsNMinus1[n - 1]; // Case n == 1 is special as there is no call to the coefficients of degree n-2 // Constant term, case n = 1 coefficientsN[0] = aN[1] * coefficientsNMinus1[0]; if (n == 1) { coefficientsCache_.add(coefficientsN); return coefficientsN; } // Constant term, case n >= 2 Coefficients coefficientsNMinus2(buildCoefficients(n - 2)); coefficientsN[0] += aN[2] * coefficientsNMinus2[0]; // Leading term coefficientsN[n] = aN[0] * coefficientsNMinus1[n - 1]; // Second leading term coefficientsN[n - 1] = aN[0] * coefficientsNMinus1[n - 2] + aN[1] * coefficientsNMinus1[n - 1]; // Constant term coefficientsN[0] = aN[1] * coefficientsNMinus1[0] + aN[2] * coefficientsNMinus2[0]; // Remaining terms for (UnsignedInteger i = 1; i < n - 1; ++i) coefficientsN[i] = aN[0] * coefficientsNMinus1[i - 1] + aN[1] * coefficientsNMinus1[i] + aN[2] * coefficientsNMinus2[i]; coefficientsCache_.add(coefficientsN); return coefficientsN; } /* Build the 3 terms recurrence coefficients up to the needed degree */ OrthogonalUniVariatePolynomialFactory::CoefficientsCollection OrthogonalUniVariatePolynomialFactory::buildRecurrenceCoefficientsCollection(const UnsignedInteger degree) const { CoefficientsCollection recurrenceCoefficients(degree); for (UnsignedInteger i = 0; i < degree; ++i) recurrenceCoefficients[i] = getRecurrenceCoefficients(i); return recurrenceCoefficients; } /* Measure accessor */ Distribution OrthogonalUniVariatePolynomialFactory::getMeasure() const { return measure_; } /* Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ OrthogonalUniVariatePolynomialFactory::Coefficients OrthogonalUniVariatePolynomialFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { throw NotYetImplementedException(HERE) << "In OrthogonalUniVariatePolynomialFactory::getRecurrenceCoefficients(const UnsignedInteger n) const"; } /* Cache initialization */ void OrthogonalUniVariatePolynomialFactory::initializeCache() { coefficientsCache_.add(Coefficients(1, 1.0)); recurrenceCoefficientsCache_.add(getRecurrenceCoefficients(0)); } /* Roots of the polynomial of degree n */ Point OrthogonalUniVariatePolynomialFactory::getRoots(const UnsignedInteger n) const { // As a specialized UniVariatePolynomial, the roots are complex const OrthogonalUniVariatePolynomial::ComplexCollection complexRoots(build(n).getRoots()); // But in fact we know that they are real Point roots(n); for (UnsignedInteger i = 0; i < n; ++i) roots[i] = complexRoots[i].real(); return roots; } /* Nodes and weights of the polynomial of degree n as the eigenvalues of the associated Jacobi matrix and the square of the first component of the associated normalized eigenvectors */ Point OrthogonalUniVariatePolynomialFactory::getNodesAndWeights(const UnsignedInteger n, Point & weights) const { if (n == 0) throw InvalidArgumentException(HERE) << "Error: cannot compute the roots and weights of a constant polynomial."; // gauss integration rule char jobz('V'); int ljobz(1); Point d(n); Point e(n - 1); Coefficients recurrenceCoefficientsI(getRecurrenceCoefficients(0)); Scalar alphaPrec = recurrenceCoefficientsI[0]; d[0] = -recurrenceCoefficientsI[1] / alphaPrec; for (UnsignedInteger i = 1; i < n; ++i) { recurrenceCoefficientsI = getRecurrenceCoefficients(i); d[i] = -recurrenceCoefficientsI[1] / recurrenceCoefficientsI[0]; e[i - 1] = sqrt(-recurrenceCoefficientsI[2] / (recurrenceCoefficientsI[0] * alphaPrec)); alphaPrec = recurrenceCoefficientsI[0]; } int ldz(n); SquareMatrix z(n); Point work(2 * n - 2); int info; dstev_(&jobz, &ldz, &d[0], &e[0], &z(0, 0), &ldz, &work[0], &info, &ljobz); if (info != 0) throw InternalException(HERE) << "Lapack DSTEV: error code=" << info; weights = Point(n); for (UnsignedInteger i = 0; i < n; ++i) weights[i] = z(0, i) * z(0, i); return d; } /* Method save() stores the object through the StorageManager */ void OrthogonalUniVariatePolynomialFactory::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "measure_", measure_ ); adv.saveAttribute( "coefficientsCache_", coefficientsCache_ ); adv.saveAttribute( "recurrenceCoefficientsCache_", recurrenceCoefficientsCache_ ); } /* Method load() reloads the object from the StorageManager */ void OrthogonalUniVariatePolynomialFactory::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "measure_", measure_ ); adv.loadAttribute( "coefficientsCache_", coefficientsCache_ ); adv.loadAttribute( "recurrenceCoefficientsCache_", recurrenceCoefficientsCache_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthogonalUniVariatePolynomialFamily.cxx000066400000000000000000000060261307543307100343530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for orthogonal polynomial factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/HermiteFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariatePolynomialFamily); /* Default constructor */ OrthogonalUniVariatePolynomialFamily::OrthogonalUniVariatePolynomialFamily() : TypedInterfaceObject(new HermiteFactory) { // Nothing to do } /* Constructor from implementation */ OrthogonalUniVariatePolynomialFamily::OrthogonalUniVariatePolynomialFamily(const OrthogonalUniVariatePolynomialFactory & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* The method to get the polynomial of any degree */ OrthogonalUniVariatePolynomial OrthogonalUniVariatePolynomialFamily::build(const UnsignedInteger degree) const { return getImplementation()->build(degree); } /* Measure accessor */ Distribution OrthogonalUniVariatePolynomialFamily::getMeasure() const { return getImplementation()->getMeasure(); } /* Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ OrthogonalUniVariatePolynomialFamily::Coefficients OrthogonalUniVariatePolynomialFamily::getRecurrenceCoefficients(const UnsignedInteger n) const { return getImplementation()->getRecurrenceCoefficients(n); } /* String converter */ String OrthogonalUniVariatePolynomialFamily::__repr__() const { return OSS() << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* Roots of the polynomial of degree n */ Point OrthogonalUniVariatePolynomialFamily::getRoots(const UnsignedInteger n) const { return getImplementation()->getRoots(n); } /* Nodes and weights of the polynomial of degree n as the eigenvalues of the associated Jacobi matrix and the square of the first component of the associated normalized eigenvectors */ Point OrthogonalUniVariatePolynomialFamily::getNodesAndWeights(const UnsignedInteger n, Point & weights) const { return getImplementation()->getNodesAndWeights(n, weights); } END_NAMESPACE_OPENTURNS OrthogonalUniVariatePolynomialFunctionFactory.cxx000066400000000000000000000055201307543307100361660ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis// -*- C++ -*- /** * @brief Polynomial function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthogonalUniVariatePolynomialFunctionFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/HermiteFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrthogonalUniVariatePolynomialFunctionFactory); static const Factory Factory_OrthogonalUniVariatePolynomialFunctionFactory; /* Default constructor */ OrthogonalUniVariatePolynomialFunctionFactory::OrthogonalUniVariatePolynomialFunctionFactory() : OrthogonalUniVariateFunctionFactory(Normal()) , polynomialFactory_(HermiteFactory()) { initializeCache(); } /* Parameters constructor */ OrthogonalUniVariatePolynomialFunctionFactory::OrthogonalUniVariatePolynomialFunctionFactory(const OrthogonalUniVariatePolynomialFamily & polynomialFactory) : OrthogonalUniVariateFunctionFactory(polynomialFactory.getMeasure()) , polynomialFactory_(polynomialFactory) { initializeCache(); } /* Virtual constructor */ OrthogonalUniVariatePolynomialFunctionFactory * OrthogonalUniVariatePolynomialFunctionFactory::clone() const { return new OrthogonalUniVariatePolynomialFunctionFactory(*this); } /* String converter */ String OrthogonalUniVariatePolynomialFunctionFactory::__repr__() const { return OSS() << "class=" << getClassName() << " measure=" << measure_; } /* The method to get the function of any order */ UniVariateFunction OrthogonalUniVariatePolynomialFunctionFactory::build(const UnsignedInteger order) const { UniVariatePolynomial polynomial(polynomialFactory_.build(order)); return polynomial.getImplementation()->clone(); } /* Method save() stores the object through the StorageManager */ void OrthogonalUniVariatePolynomialFunctionFactory::save(Advocate & adv) const { OrthogonalUniVariateFunctionFactory::save(adv); } /* Method load() reloads the object from the StorageManager */ void OrthogonalUniVariatePolynomialFunctionFactory::load(Advocate & adv) { OrthogonalUniVariateFunctionFactory::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/OrthonormalizationAlgorithm.cxx000066400000000000000000000056171307543307100326170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthonormalizationAlgorithm.hxx" #include "openturns/AdaptiveStieltjesAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthonormalizationAlgorithm */ CLASSNAMEINIT(OrthonormalizationAlgorithm); /* Constructor with parameters */ OrthonormalizationAlgorithm::OrthonormalizationAlgorithm(const OrthonormalizationAlgorithmImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor with parameters */ OrthonormalizationAlgorithm::OrthonormalizationAlgorithm(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ OrthonormalizationAlgorithm::OrthonormalizationAlgorithm(const Distribution & measure) : TypedInterfaceObject(new AdaptiveStieltjesAlgorithm(measure)) { // Nothing to do } /* Constructor with parameters */ OrthonormalizationAlgorithm::OrthonormalizationAlgorithm() : TypedInterfaceObject(new OrthonormalizationAlgorithmImplementation()) { // Nothing to do } /* Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ OrthonormalizationAlgorithm::Coefficients OrthonormalizationAlgorithm::getRecurrenceCoefficients(const UnsignedInteger n) const { return getImplementation()->getRecurrenceCoefficients(n); } /* Measure accessor */ Distribution OrthonormalizationAlgorithm::getMeasure() const { return getImplementation()->getMeasure(); } void OrthonormalizationAlgorithm::setMeasure(const Distribution & measure) { copyOnWrite(); getImplementation()->setMeasure(measure); } /* String converter */ String OrthonormalizationAlgorithm::__repr__() const { return OSS(true) << "class=" << getClassName() << " implementation=" << getImplementation()->__repr__(); } /* String converter */ String OrthonormalizationAlgorithm::__str__(const String & offset) const { return __repr__(); } END_NAMESPACE_OPENTURNS OrthonormalizationAlgorithmImplementation.cxx000066400000000000000000000060631307543307100354420ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthonormalizationAlgorithmImplementation */ CLASSNAMEINIT(OrthonormalizationAlgorithmImplementation); static const Factory Factory_OrthonormalizationAlgorithmImplementation; /* Default constructor */ OrthonormalizationAlgorithmImplementation::OrthonormalizationAlgorithmImplementation() : PersistentObject(), measure_(Uniform()) { // Nothing to do } /* Parameters constructor */ OrthonormalizationAlgorithmImplementation::OrthonormalizationAlgorithmImplementation(const Distribution & measure) : PersistentObject(), measure_(measure) { // Nothing to do } /* Virtual constructor */ OrthonormalizationAlgorithmImplementation * OrthonormalizationAlgorithmImplementation::clone() const { return new OrthonormalizationAlgorithmImplementation(*this); } /* Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ OrthonormalizationAlgorithmImplementation::Coefficients OrthonormalizationAlgorithmImplementation::getRecurrenceCoefficients(const UnsignedInteger n) const { throw NotYetImplementedException(HERE) << "In OrthonormalizationAlgorithmImplementation::getRecurrenceCoefficients(const UnsignedInteger n) const"; } /* Measure accessor */ void OrthonormalizationAlgorithmImplementation::setMeasure(const Distribution & measure) { measure_ = measure; } Distribution OrthonormalizationAlgorithmImplementation::getMeasure() const { return measure_; } /* String converter */ String OrthonormalizationAlgorithmImplementation::__repr__() const { OSS oss; oss << "class=" << OrthonormalizationAlgorithmImplementation::GetClassName() << " measure=" << measure_; return oss; } /* Method save() stores the object through the StorageManager */ void OrthonormalizationAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void OrthonormalizationAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/SoizeGhanemFactorEvaluation.cxx000066400000000000000000000164141307543307100324430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the evaluation part of the Soize-Ghanem basis coupling factor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SoizeGhanemFactorEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SoizeGhanemFactorEvaluation); static const Factory Factory_SoizeGhanemFactorEvaluation; /* Default constructor */ SoizeGhanemFactorEvaluation::SoizeGhanemFactorEvaluation() : EvaluationImplementation() , measure_() , useCopula_() , copula_() , marginals_() { // Nothing to do } /* Constructor */ SoizeGhanemFactorEvaluation::SoizeGhanemFactorEvaluation(const Distribution & measure, const Collection & marginals, const Bool useCopula) : EvaluationImplementation() , measure_(measure) , useCopula_(useCopula) , copula_() , marginals_(marginals) { // Extract the copula if needed if (useCopula_) copula_ = measure.getCopula(); } /* Virtual constructor */ SoizeGhanemFactorEvaluation * SoizeGhanemFactorEvaluation::clone() const { return new SoizeGhanemFactorEvaluation(*this); } /* Comparison operator */ Bool SoizeGhanemFactorEvaluation::operator ==(const SoizeGhanemFactorEvaluation & other) const { if (this == &other) return true; return (measure_ == other.measure_) && (useCopula_ == other.useCopula_); } /* Operator () * The correction factor K(x) is given by: * K(x)=\sqrt{\frac{\prod_{k=1}^d p_k(x_k)}{p(x_1,\dots,x_d)}} * where p_k is the PDF of the kth marginal distribution and p * its join PDF. Introducing the copula PDF c, one gets: * K(x)=\frac{1}{\sqrt{c(F_1(x_1),\dots,F_d(x_d))}} * beause p(x_1,\dots,x_d)=c(F_1(x_1),\dots,F_d(x_d))\prod_{k=1}^d p_k(x_k) * where F_k is the CDF of the kth marginal distribution. * See: Christian Soize, R. Ghanem. * "Physical systems with random uncertainties: Chaos representations with * arbitrary probability measure". SIAM Journal on Scientific Computing, * Society for Industrial and Applied Mathematics, 2004, 26 (2), pp.395-410. */ Point SoizeGhanemFactorEvaluation::operator() (const Point & inP) const { const UnsignedInteger inputDimension = getInputDimension(); if (inP.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given point has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inP.getDimension(); Point result(1); if (useCopula_) { Point u(inputDimension); for (UnsignedInteger i = 0; i < inputDimension; ++i) u[i] = marginals_[i].computeCDF(inP[i]); result[0] = 1.0 / std::sqrt(std::max(SpecFunc::MinScalar, copula_.computePDF(u))); } else { Scalar logFactor = 0.0; for (UnsignedInteger i = 0; i < inputDimension; ++i) logFactor += marginals_[i].computeLogPDF(inP[i]); // \sqrt{\frac{\prod_{k=1}^d p_k(x_k)}{p(x_1,\dots,x_d)}} result[0] = std::exp(0.5 * (logFactor - measure_.computeLogPDF(inP))); } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } Sample SoizeGhanemFactorEvaluation::operator() (const Sample & inS) const { const UnsignedInteger inputDimension = getInputDimension(); if (inS.getDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << inputDimension << ", got " << inS.getDimension(); const UnsignedInteger size = inS.getSize(); if (size == 0) return Sample(0, 1); Sample result(size, 1); if (useCopula_) { Sample u(size, 0); for (UnsignedInteger i = 0; i < inputDimension; ++i) u.stack(marginals_[i].computeCDF(inS.getMarginal(i))); const Sample pdf(copula_.computePDF(u)); for (UnsignedInteger i = 0; i < size; ++i) result[i][0] = 1.0 / std::sqrt(std::max(SpecFunc::MinScalar, pdf[i][0])); } else { Sample logFactor(size, 1); for (UnsignedInteger i = 0; i < inputDimension; ++i) logFactor += marginals_[i].computeLogPDF(inS.getMarginal(i)); // \sqrt{\frac{\prod_{k=1}^d p_k(x_k)}{p(x_1,\dots,x_d)}} const Sample logResult(logFactor - measure_.computeLogPDF(inS)); for (UnsignedInteger i = 0; i < size; ++i) result[i][0] = std::exp(0.5 * logResult[i][0]); } callsNumber_ += size; if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(result); } return result; } /* Accessor for input point dimension */ UnsignedInteger SoizeGhanemFactorEvaluation::getInputDimension() const { return measure_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger SoizeGhanemFactorEvaluation::getOutputDimension() const { return 1; } /* Accessor for input point description */ Description SoizeGhanemFactorEvaluation::getInputDescription() const { return measure_.getDescription(); } /* Accessor for output point description */ Description SoizeGhanemFactorEvaluation::getOutputDescription() const { return Description(1, "k"); } /* String converter */ String SoizeGhanemFactorEvaluation::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " measure=" << measure_ << " marginals=" << marginals_ << " useCopula=" << useCopula_; if (useCopula_) oss << " copula=" << copula_; return oss; } String SoizeGhanemFactorEvaluation::__str__(const String & offset) const { OSS oss(true); const Description input(getInputDescription()); oss << input << "->1/sqrt(" << (useCopula_ ? copula_.__str__() : measure_.__str__()) << ".computePDF("; String separator(", "); for (UnsignedInteger i = 0; i < input.getSize(); ++i) { if (i == input.getSize() - 1) separator = ")"; if (useCopula_) oss << marginals_[i].__str__() << ".computeCDF(" << input[i] << ")" << separator; else oss << input[i] << separator; } return oss; } /* Method save() stores the object through the StorageManager */ void SoizeGhanemFactorEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "measure_", measure_ ); adv.saveAttribute( "marginals_", marginals_ ); adv.saveAttribute( "useCopula_", useCopula_ ); adv.saveAttribute( "copula_", copula_ ); } /* Method load() reloads the object from the StorageManager */ void SoizeGhanemFactorEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "measure_", measure_ ); adv.loadAttribute( "marginals_", marginals_ ); adv.loadAttribute( "useCopula_", useCopula_ ); adv.loadAttribute( "copula_", copula_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/SoizeGhanemFactory.cxx000066400000000000000000000132411307543307100305770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the natural basis associated to a multivariate distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SoizeGhanemFactory.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/OrthogonalProductPolynomialFactory.hxx" #include "openturns/StandardDistributionPolynomialFactory.hxx" #include "openturns/AdaptiveStieltjesAlgorithm.hxx" #include "openturns/Function.hxx" #include "openturns/SoizeGhanemFactorEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SoizeGhanemFactory); static const Factory Factory_SoizeGhanemFactory; /* Default constructor */ SoizeGhanemFactory::SoizeGhanemFactory() : OrthogonalFunctionFactory() , productPolynomial_() , phi_(1) , hasIndependentCopula_(measure_.hasIndependentCopula()) { buildProductPolynomialAndAdaptation(false); } /* Constructor */ SoizeGhanemFactory::SoizeGhanemFactory(const Distribution & measure, const Bool useCopula) : OrthogonalFunctionFactory(measure) , productPolynomial_() , phi_(measure.getDimension()) , hasIndependentCopula_(measure.hasIndependentCopula()) { buildProductPolynomialAndAdaptation(useCopula); } /* Constructor */ SoizeGhanemFactory::SoizeGhanemFactory(const Distribution & measure, const EnumerateFunction & phi, const Bool useCopula) : OrthogonalFunctionFactory(measure) , productPolynomial_() , phi_(phi) , hasIndependentCopula_(measure.hasIndependentCopula()) { if (measure.getDimension() != phi.getDimension()) throw InvalidArgumentException(HERE) << "Error: the enumerate function must have a dimension equal to the dimension of the measure"; buildProductPolynomialAndAdaptation(useCopula); } /* Virtual constructor */ SoizeGhanemFactory * SoizeGhanemFactory::clone() const { return new SoizeGhanemFactory(*this); } /* Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction SoizeGhanemFactory::getEnumerateFunction() const { return phi_; } /* Build the Function of the given index orthonormal * with respect to the following inner product: * = \int_R^n f_i(x) f_j(x) c(F_1(x_1),\dots,F_n(x_n))\prod_{k=1}^n p_k(x_k)dx * See: Christian Soize, R. Ghanem. * "Physical systems with random uncertainties: Chaos representations with * arbitrary probability measure". SIAM Journal on Scientific Computing, * Society for Industrial and Applied Mathematics, 2004, 26 (2), pp.395-410. */ Function SoizeGhanemFactory::build(const UnsignedInteger index) const { const Function productPolynomial(productPolynomial_.build(index)); // If the distribution has an independent copula the SoizeGhanem basis // is exactly the product polynomial factory if (hasIndependentCopula_) return productPolynomial; return productPolynomial * adaptationFactor_; } /* Build the multivariate polynomial factory associated with the marginal distributions */ void SoizeGhanemFactory::buildProductPolynomialAndAdaptation(const Bool useCopula) { const UnsignedInteger dimension = measure_.getDimension(); Collection marginals(dimension); OrthogonalProductPolynomialFactory::PolynomialFamilyCollection coll(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { marginals[i] = measure_.getMarginal(i); coll[i] = StandardDistributionPolynomialFactory(AdaptiveStieltjesAlgorithm(marginals[i])); } productPolynomial_ = OrthogonalProductPolynomialFactory(coll, phi_); // Build the adaptation factor only if needed if (!hasIndependentCopula_) adaptationFactor_ = Function(SoizeGhanemFactorEvaluation(measure_, marginals, useCopula)); } /* String converter */ String SoizeGhanemFactory::__repr__() const { OSS oss(true); oss << "class=" << getClassName() << " productPolynomial=" << productPolynomial_ << " phi=" << phi_ << " measure=" << measure_ << " hasIndependentCopula=" << hasIndependentCopula_; if (!hasIndependentCopula_) oss << " adaptationFactor=" << adaptationFactor_; return oss; } /* Method save() stores the object through the StorageManager */ void SoizeGhanemFactory::save(Advocate & adv) const { OrthogonalFunctionFactory::save(adv); adv.saveAttribute( "productPolynomial_", productPolynomial_ ); adv.saveAttribute( "phi_", phi_ ); adv.saveAttribute( "hasIndependentCopula_", hasIndependentCopula_ ); adv.saveAttribute( "adaptationFactor_", adaptationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void SoizeGhanemFactory::load(Advocate & adv) { OrthogonalFunctionFactory::load(adv); adv.loadAttribute( "productPolynomial_", productPolynomial_ ); adv.loadAttribute( "phi_", phi_ ); adv.loadAttribute( "hasIndependentCopula_", hasIndependentCopula_ ); adv.loadAttribute( "adaptationFactor_", adaptationFactor_ ); } END_NAMESPACE_OPENTURNS StandardDistributionPolynomialFactory.cxx000066400000000000000000000204341307543307100345150ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis// -*- C++ -*- /** * @brief OrthogonalUniVariatePolynomialStandardDistribution polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StandardDistributionPolynomialFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/AdaptiveStieltjesAlgorithm.hxx" #include "openturns/CharlierFactory.hxx" #include "openturns/ChebychevFactory.hxx" #include "openturns/HermiteFactory.hxx" #include "openturns/JacobiFactory.hxx" #include "openturns/KrawtchoukFactory.hxx" #include "openturns/LaguerreFactory.hxx" #include "openturns/LegendreFactory.hxx" #include "openturns/HistogramPolynomialFactory.hxx" #include "openturns/MeixnerFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StandardDistributionPolynomialFactory); static const Factory Factory_StandardDistributionPolynomialFactory; /* Default constructor */ StandardDistributionPolynomialFactory::StandardDistributionPolynomialFactory() : OrthogonalUniVariatePolynomialFactory(Uniform()) , orthonormalizationAlgorithm_(AdaptiveStieltjesAlgorithm(Uniform())) , specificFamily_() , hasSpecificFamily_(false) { // Initialize the coefficient cache initializeCache(); } /* Parameter constructor */ StandardDistributionPolynomialFactory::StandardDistributionPolynomialFactory(const Distribution & measure) : OrthogonalUniVariatePolynomialFactory(measure.getStandardRepresentative()) , orthonormalizationAlgorithm_(AdaptiveStieltjesAlgorithm(measure.getStandardRepresentative())) , specificFamily_() , hasSpecificFamily_(false) { checkSpecificFamily(); initializeCache(); } /* Parameter constructor */ StandardDistributionPolynomialFactory::StandardDistributionPolynomialFactory(const OrthonormalizationAlgorithm & orthonormalizationAlgorithm) : OrthogonalUniVariatePolynomialFactory(orthonormalizationAlgorithm.getMeasure()) , orthonormalizationAlgorithm_(orthonormalizationAlgorithm) , specificFamily_() , hasSpecificFamily_(false) { checkSpecificFamily(); initializeCache(); } /* Virtual constructor */ StandardDistributionPolynomialFactory * StandardDistributionPolynomialFactory::clone() const { return new StandardDistributionPolynomialFactory(*this); } /* Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ StandardDistributionPolynomialFactory::Coefficients StandardDistributionPolynomialFactory::getRecurrenceCoefficients(const UnsignedInteger n) const { if (hasSpecificFamily_) return specificFamily_.getRecurrenceCoefficients(n); else return orthonormalizationAlgorithm_.getRecurrenceCoefficients(n); } /* Check the existence of a specific family more efficient for the given measure */ void StandardDistributionPolynomialFactory::checkSpecificFamily() { // Check for special cases. Need a more elegant conception and implementation. hasSpecificFamily_ = false; OrthogonalUniVariatePolynomialFamily referenceFamily; const String measureType(measure_.getImplementation()->getClassName()); Bool hasClassMatch = false; // Legendre factory if (measureType == "Uniform") { referenceFamily = LegendreFactory(); hasClassMatch = true; } // Hermite factory if (measureType == "Normal") { referenceFamily = HermiteFactory(); hasClassMatch = true; } // HistogramPolynomial factory if (measureType == "Histogram") { const Point parameter(measure_.getParameter()); const UnsignedInteger size = (parameter.getSize() - 1) / 2; const Scalar first = parameter[0]; Point width(size); Point height(size); for (UnsignedInteger i = 0; i < size; ++i) { width[i] = parameter[2 * i + 1]; height[i] = parameter[2 * i + 2]; } referenceFamily = HistogramPolynomialFactory(first, width, height); hasClassMatch = true; } // Chebychev factory if (measureType == "Arcsine") { referenceFamily = ChebychevFactory(); hasClassMatch = true; } // Jacobi (or Chebychev as a special case) factory if (measureType == "Beta") { const Point parameter(measure_.getParameter()); const Scalar alpha = parameter[1] - parameter[0] - 1.0; const Scalar beta = parameter[0] - 1.0; // Here we set directly the specific family as the reference distribution // of the family has a different type (Arcsine) than the given distribution if (alpha == -0.5 && beta == -0.5 && parameter[2] == -1.0 && parameter[3] == 1.0) { specificFamily_ = ChebychevFactory(); hasSpecificFamily_ = true; // To avoid distribution comparison at the end of the method hasClassMatch = false; } // Here we set directly the specific family as the reference distribution // of the family has a different type (Uniform) than the given distribution else if (alpha == 0.0 && beta == 0.0 && parameter[2] == -1.0 && parameter[3] == 1.0) { specificFamily_ = LegendreFactory(); hasSpecificFamily_ = true; // To avoid distribution comparison at the end of the method hasClassMatch = false; } else { referenceFamily = JacobiFactory(alpha, beta); hasClassMatch = true; } } // Laguerre factory if (measureType == "Gamma") { const Point parameter(measure_.getParameter()); referenceFamily = LaguerreFactory(parameter[0] - 1.0); hasClassMatch = true; } if (measureType == "Exponential") { const Point parameter(measure_.getParameter()); if (parameter[0] == 1.0) { specificFamily_ = LaguerreFactory(0.0); hasSpecificFamily_ = true; // To avoid distribution comparison at the end of the method hasClassMatch = false; } } // Charlier factory if (measureType == "Poisson") { const Point parameter(measure_.getParameter()); referenceFamily = CharlierFactory(parameter[0]); hasClassMatch = true; } // Krawtchouk factory if (measureType == "Binomial") { const Point parameter(measure_.getParameter()); referenceFamily = KrawtchoukFactory(static_cast(parameter[0]), parameter[1]); hasClassMatch = true; } // Meixner factory if (measureType == "NegativeBinomial") { const Point parameter(measure_.getParameter()); referenceFamily = MeixnerFactory(parameter[0], parameter[1]); hasClassMatch = true; } if (hasClassMatch && (referenceFamily.getMeasure() == measure_)) { specificFamily_ = referenceFamily; hasSpecificFamily_ = true; } } /* String converter */ String StandardDistributionPolynomialFactory::__repr__() const { OSS oss; oss << "class=" << getClassName() << " hasSpecificFamily=" << std::boolalpha << hasSpecificFamily_; if (hasSpecificFamily_) oss << " specificFamily=" << specificFamily_; else oss << " orthonormalization algorithm=" << orthonormalizationAlgorithm_; return oss; } /* Method save() stores the object through the StorageManager */ void StandardDistributionPolynomialFactory::save(Advocate & adv) const { OrthogonalUniVariatePolynomialFactory::save(adv); adv.saveAttribute( "orthonormalizationAlgorithm_", orthonormalizationAlgorithm_ ); adv.saveAttribute( "specificFamily_", specificFamily_ ); adv.saveAttribute( "hasSpecificFamily_", hasSpecificFamily_ ); } /* Method load() reloads the object from the StorageManager */ void StandardDistributionPolynomialFactory::load(Advocate & adv) { OrthogonalUniVariatePolynomialFactory::load(adv); adv.loadAttribute( "orthonormalizationAlgorithm_", orthonormalizationAlgorithm_ ); adv.loadAttribute( "specificFamily_", specificFamily_ ); adv.loadAttribute( "hasSpecificFamily_", hasSpecificFamily_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/000077500000000000000000000000001307543307100263465ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/AdaptiveStieltjesAlgorithm.hxx000066400000000000000000000102011307543307100343640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement the modified adaptive Stieltjes algorithm to compute * the coefficients of the 3 terms recurrence relation of an * orthonormal polynomial family * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ADAPTIVESTIELTJESALGORITHM_HXX #define OPENTURNS_ADAPTIVESTIELTJESALGORITHM_HXX #include #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AdaptiveStieltjesAlgorithm * * OrthogonalUniVariatePolynomialStandardDistribution polynomial factory */ class OT_API AdaptiveStieltjesAlgorithm : public OrthonormalizationAlgorithmImplementation { CLASSNAME; public: typedef Collection CoefficientsCollection; typedef PersistentCollection CoefficientsPersistentCollection; /** Default constructor */ AdaptiveStieltjesAlgorithm(); /** Parameter constructor */ AdaptiveStieltjesAlgorithm(const Distribution & measure); /** Virtual constructor */ virtual AdaptiveStieltjesAlgorithm * clone() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute dot products taking into account the singularities of the weights */ Point computeDotProduct(const Function & kernel, const UnsignedInteger n) const; // Structure used to compute the two dot-products needed for the computation of three-terms relation coefficients struct DotProductWrapper { DotProductWrapper(const OrthogonalUniVariatePolynomial & qN, const Distribution & weight): qN_(qN), weight_(weight) { // Nothing to do }; // This method allows to compute Point kernelSym(const Point & point) const { const Scalar pdf = weight_.computePDF(point); const Scalar x = point[0]; const Scalar qNX = qN_(x); Point result(1); result[0] = qNX * qNX * pdf; return result; }; // This method allows to compute and Point kernelGen(const Point & point) const { const Scalar pdf = weight_.computePDF(point); const Scalar x = point[0]; const Scalar qNX = qN_(x); const Scalar xQNX = x * qNX; Point result(2); result[0] = qNX * qNX * pdf; result[1] = xQNX * qNX * pdf; return result; }; const OrthogonalUniVariatePolynomial & qN_; const Distribution & weight_; }; // struct DotProductWrapper /** Cache to store the recurrence coefficients */ mutable CoefficientsPersistentCollection monicRecurrenceCoefficients_; /** Cache to store the squared norm of the monic orthogonal polynomials */ mutable Point monicSquaredNorms_; /** Flag to tell if the underlying distribution is symmetric */ Bool isElliptical_; } ; /* class AdaptiveStieltjesAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ADAPTIVESTIELTJESALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/CharlierFactory.hxx000066400000000000000000000043101307543307100321560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Charlier polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHARLIERFACTORY_HXX #define OPENTURNS_CHARLIERFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CharlierFactory * * Charlier polynomial factory */ class OT_API CharlierFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor, associated with the default Poisson distribution of parameter 1. */ CharlierFactory(); /** Parameter constructor: lambda is the order of the generalized Charlier polynomial, associated with the Poisson(lambda) distribution */ CharlierFactory(const Scalar lambda); /** Virtual constructor */ virtual CharlierFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** K accessor */ Scalar getLambda() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Parameter of the Charlier polynomial */ Scalar lambda_; } ; /* class CharlierFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHARLIERFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/ChebychevAlgorithm.hxx000066400000000000000000000111761307543307100326540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement the modified Chebychev algorithm to compute the coefficients of * the 3 terms recurrence relation of an orthonormal polynomial family * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHEBYCHEVALGORITHM_HXX #define OPENTURNS_CHEBYCHEVALGORITHM_HXX #include #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ChebychevAlgorithm * * OrthogonalUniVariatePolynomialStandardDistribution polynomial factory */ class OT_API ChebychevAlgorithm : public OrthonormalizationAlgorithmImplementation { CLASSNAME; public: typedef Collection ScalarCollection; typedef Collection CoefficientsCollection; typedef std::map ScalarCache; /** Default constructor */ ChebychevAlgorithm(); /** Parameter constructor */ ChebychevAlgorithm(const Distribution & measure); /** Parameter constructor with specific reference family */ ChebychevAlgorithm(const Distribution & measure, const OrthogonalUniVariatePolynomialFamily & family); /** Virtual constructor */ virtual ChebychevAlgorithm * clone() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** Reference univariate orthogonal polynomial family accessor */ void setReferenceFamily(const OrthogonalUniVariatePolynomialFamily & family); OrthogonalUniVariatePolynomialFamily getReferenceFamily() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Return the order-th raw moment of the underlying measure */ Scalar getStandardMoment(const UnsignedInteger order) const; /** Return the order-th modified moment, i.e. the weighted integral of the order-th reference polynomial with respect to the underlying measure */ Scalar getModifiedMoment(const UnsignedInteger order) const; /** Methods for the modified Chebichev algorithm */ /** Mixed moments E[Pj * Qk] where Pj is the j-th monic orthogonal polynomial for the given measure and Qk the k-th monic orthogonal polynomial of the reference factory */ Scalar getMixedMoment(const int j, const UnsignedInteger k) const; /** Recurrence coefficients (alphak, betak) of the monic orthogonal polynomials Pk+1(x) = (x - alphak) * Pk(x) - betak * Pk-1(x) */ Coefficients getMonicRecurrenceCoefficients(const UnsignedInteger k) const; /** Recurrence coefficients (ak, bk) of the monic reference polynomials Qk+1(x) = (x - ak) * Qk(x) - bk * Qk-1(x) */ Coefficients getReferenceMonicRecurrenceCoefficients(const UnsignedInteger k) const; /** Reference orthogonal polynomial factory for the modified moments */ OrthogonalUniVariatePolynomialFamily referenceFamily_; /** Flag to tell if we use the canonical basis */ Bool useCanonicalBasis_; /** Cache to store the raw moments */ mutable ScalarCollection standardMoments_; /** Cache to store the modified moments */ mutable ScalarCollection modifiedMoments_; /** Cache to store the mixed moments */ mutable ScalarCache mixedMoments_; /** Cache to store the monic recurrence coefficients */ mutable CoefficientsCollection monicRecurrenceCoefficients_; /** Cache to store the monic recurrence coefficients */ mutable CoefficientsCollection referenceMonicRecurrenceCoefficients_; } ; /* class ChebychevAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHEBYCHEVALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/ChebychevFactory.hxx000066400000000000000000000040031307543307100323240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Chebychev polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHEBYCHEVFACTORY_HXX #define OPENTURNS_CHEBYCHEVFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ChebychevFactory * * Chebychev polynomial factory */ class OT_API ChebychevFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor */ ChebychevFactory(); /** Virtual constructor */ virtual ChebychevFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** Roots of the polynomial of degree n as the eigenvalues of the associated matrix */ Point getRoots(const UnsignedInteger n) const; /** Nodes and weights of the polynomial of degree n as the eigenvalues of the associated matrix, to build quadrature rules */ Point getNodesAndWeights(const UnsignedInteger n, Point & weights) const; /** String converter */ String __repr__() const; private: } ; /* class ChebychevFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHEBYCHEVFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/FourierSeriesFactory.hxx000066400000000000000000000034611307543307100332210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Fourier function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FOURIERSERIESFACTORY_HXX #define OPENTURNS_FOURIERSERIESFACTORY_HXX #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FourierSeriesFactory * * Fourier function factory */ class OT_API FourierSeriesFactory : public OrthogonalUniVariateFunctionFactory { CLASSNAME; public: /** Default constructor */ FourierSeriesFactory(); /** Virtual constructor */ virtual FourierSeriesFactory * clone() const; /** String converter */ String __repr__() const; /** The method to get the function of any order. */ virtual UniVariateFunction build(const UnsignedInteger order) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: } ; /* class FourierSeriesFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FOURIERSERIESFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/GramSchmidtAlgorithm.hxx000066400000000000000000000071471307543307100331610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implement the modified Gram Schmidt algorithm to compute the coefficients of * tthe 3 terms recurrence relation of an orthonormal polynomial family * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GRAMSCHMIDTALGORITHM_HXX #define OPENTURNS_GRAMSCHMIDTALGORITHM_HXX #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GramSchmidtAlgorithm * * OrthogonalUniVariatePolynomialStandardDistribution polynomial factory */ class OT_API GramSchmidtAlgorithm : public OrthonormalizationAlgorithmImplementation { CLASSNAME; public: typedef Collection ScalarCollection; typedef Collection CoefficientsCollection; /** Default constructor */ GramSchmidtAlgorithm(); /** Parameter constructor */ GramSchmidtAlgorithm(const Distribution & measure); /** Parameter constructor */ GramSchmidtAlgorithm(const Distribution & measure, const OrthogonalUniVariatePolynomialFamily & referenceFamily); /** Virtual constructor */ virtual GramSchmidtAlgorithm * clone() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** Reference univariate orthogonal polynomial family accessor */ void setReferenceFamily(const OrthogonalUniVariatePolynomialFamily & family); OrthogonalUniVariatePolynomialFamily getReferenceFamily() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Return the order-th raw moment of the underlying measure */ Scalar getStandardMoment(const UnsignedInteger order) const; /** Build the coefficients of the kth orthonormal polynomial */ UniVariatePolynomial buildPolynomial(const UnsignedInteger k) const; /** Compute the dot product between two general polynomials according to the measure */ Scalar dotProduct(const UniVariatePolynomial & p1, const UniVariatePolynomial & p2) const; /** Cache to store the raw moments */ mutable ScalarCollection standardMoments_; /** Cache to store the coefficients of the orthonormal polynomials */ mutable CoefficientsCollection coefficientsCache_; /** Starting family of polynomials */ OrthogonalUniVariatePolynomialFamily referenceFamily_; /** Flag to tell if we use the canonical basis */ Bool useCanonicalBasis_; } ; /* class GramSchmidtAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GRAMSCHMIDTALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/HaarWaveletFactory.hxx000066400000000000000000000034531307543307100326370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Haar wavelet function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HAARWAVELETFACTORY_HXX #define OPENTURNS_HAARWAVELETFACTORY_HXX #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HaarWaveletFactory * * Haar wavelet function factory */ class OT_API HaarWaveletFactory : public OrthogonalUniVariateFunctionFactory { CLASSNAME; public: /** Default constructor */ HaarWaveletFactory(); /** Virtual constructor */ virtual HaarWaveletFactory * clone() const; /** String converter */ String __repr__() const; /** The method to get the function of any order. */ virtual UniVariateFunction build(const UnsignedInteger order) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: } ; /* class HaarWaveletFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HAARWAVELETFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/HermiteFactory.hxx000066400000000000000000000035251307543307100320310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Hermite polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HERMITEFACTORY_HXX #define OPENTURNS_HERMITEFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HermiteFactory * * Hermite polynomial factory */ class OT_API HermiteFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor */ HermiteFactory(); /** Virtual constructor */ virtual HermiteFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: } ; /* class HermiteFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HERMITEFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/HistogramPolynomialFactory.hxx000066400000000000000000000056651307543307100344440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief HistogramPolynomial polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HISTOGRAMPOLYNOMIALFACTORY_HXX #define OPENTURNS_HISTOGRAMPOLYNOMIALFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" #include "openturns/LegendreFactory.hxx" #include "openturns/Histogram.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistogramPolynomialFactory * * Histogram polynomial factory */ class OT_API HistogramPolynomialFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor, associated with the default Histogram distribution */ HistogramPolynomialFactory(); /** Parameter constructor */ HistogramPolynomialFactory(const Scalar first, const Point & width, const Point & height); /** Virtual constructor */ virtual HistogramPolynomialFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** First accessor */ Scalar getFirst() const; /** Width accessor */ Point getWidth() const; /** Height accessor */ Point getHeight() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute dot products taking into account the singularities of the weights */ Point computeDotProduct(const OrthogonalUniVariatePolynomial & qN) const; /** Underlying histogram */ const Histogram * p_histogram_; /** Factory used to compute the dot-products */ LegendreFactory legendre_; /** Cache to store the recurrence coefficients */ mutable CoefficientsPersistentCollection monicRecurrenceCoefficients_; /** Cache to store the squared norm of the monic orthogonal polynomials */ mutable Point monicSquaredNorms_; } ; /* class HistogramPolynomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HISTOGRAMPOLYNOMIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/JacobiFactory.hxx000066400000000000000000000051371307543307100316240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Jacobi polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_JACOBIFACTORY_HXX #define OPENTURNS_JACOBIFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class JacobiFactory * * Jacobi polynomial factory */ class OT_API JacobiFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor: (1, 1) order Jacobi polynomial associated with the default Beta() = Beta(2, 4, -1, 1) distribution which is equal to the Epanechnikov distribution */ JacobiFactory(); /** Parameter constructor: (alpha, beta) is the order of the Jacobi polynomial, associated with the Beta(beta + 1, alpha + beta + 2, -1, 1) distribution in the ANALYSIS parameter set or to the Beta(alpha, beta, -1, 1) distribution in the PROBABILITY parameter set */ JacobiFactory(const Scalar alpha, const Scalar beta, const ParameterSet parameterization = ANALYSIS); /** Virtual constructor */ virtual JacobiFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** Alpha accessor */ Scalar getAlpha() const; /** Beta accessor */ Scalar getBeta() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /* First parameter of the Jacobi polynomial */ Scalar alpha_; /* Second parameter of the Jacobi polynomial */ Scalar beta_; } ; /* class JacobiFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_JACOBIFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/KrawtchoukFactory.hxx000066400000000000000000000047261307543307100325620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Krawtchouk polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRAWTCHOUKFACTORY_HXX #define OPENTURNS_KRAWTCHOUKFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrawtchoukFactory * * Krawtchouk polynomial factory */ class OT_API KrawtchoukFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor: (1, 0.5) order Krawtchouk polynomial associated with the default Binomial() = Binomial(1, 0.5) distribution which is equal to the Bernoulli(0.5) distribution */ KrawtchoukFactory(); /** Parameter constructor: (n, p) is the order of the Krawtchouk polynomial, associated with the Binomial(n, p) distribution */ KrawtchoukFactory(const UnsignedInteger n, const Scalar p); /** Virtual constructor */ virtual KrawtchoukFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** N accessor */ UnsignedInteger getN() const; /** P accessor */ Scalar getP() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /* First parameter of the Krawtchouk polynomial */ UnsignedInteger n_; /* Second parameter of the Krawtchouk polynomial */ Scalar p_; } ; /* class KrawtchoukFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KRAWTCHOUKFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/LaguerreFactory.hxx000066400000000000000000000045611307543307100322030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Laguerre polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LAGUERREFACTORY_HXX #define OPENTURNS_LAGUERREFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LaguerreFactory * * Laguerre polynomial factory */ class OT_API LaguerreFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor, associated with the default Gamma distribution which is equal to the Exponential distribution */ LaguerreFactory(); /** Parameter constructor: k is the order of the generalized Laguerre polynomial, associated with the Gamma(k+1, 1, 0) distribution in the ANALYSIS parameter set, or with the Gamma(k, 1, 0) with the PROBABILITY parameter set */ LaguerreFactory(const Scalar k, const ParameterSet parameterization = ANALYSIS); /** Virtual constructor */ virtual LaguerreFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** K accessor */ Scalar getK() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Parameter of the Laguerre polynomial */ Scalar k_; } ; /* class LaguerreFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LAGUERREFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/LegendreFactory.hxx000066400000000000000000000035371307543307100321640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Legendre polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LEGENDREFACTORY_HXX #define OPENTURNS_LEGENDREFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LegendreFactory * * Legendre polynomial factory */ class OT_API LegendreFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor */ LegendreFactory(); /** Virtual constructor */ virtual LegendreFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: } ; /* class LegendreFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LEGENDREFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/MeixnerFactory.hxx000066400000000000000000000044351307543307100320440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Meixner polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MEIXNERFACTORY_HXX #define OPENTURNS_MEIXNERFACTORY_HXX #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MeixnerFactory * * Meixner polynomial factory */ class OT_API MeixnerFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor, associated with the default Negative Binomial distribution of parameter 1, 1/2. */ MeixnerFactory(); /** Parameter constructor: lambda is the order of the generalized Meixner polynomial, associated with the NegativeBinomial(r, p) distribution */ MeixnerFactory(const Scalar r, const Scalar p); /** Virtual constructor */ virtual MeixnerFactory * clone() const; /** Calculate the coefficients of recurrence a0n, a1n, a2n such that Pn+1(x) = (a0n * x + a1n) * Pn(x) + a2n * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** R accessor */ Scalar getR() const; /** P accessor */ Scalar getP() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Parameters of the Meixner polynomial */ Scalar r_; Scalar p_; } ; /* class MeixnerFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MEIXNERFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/OTOrthogonalBasis.hxx000066400000000000000000000046521307543307100324470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir OrthogonalBasis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTORTHOGONALBASIS_HXX #define OPENTURNS_OTORTHOGONALBASIS_HXX #include "openturns/AdaptiveStieltjesAlgorithm.hxx" #include "openturns/ChebychevAlgorithm.hxx" #include "openturns/GramSchmidtAlgorithm.hxx" #include "openturns/OrthogonalUniVariatePolynomial.hxx" #include "openturns/CharlierFactory.hxx" #include "openturns/ChebychevFactory.hxx" #include "openturns/HermiteFactory.hxx" #include "openturns/HistogramPolynomialFactory.hxx" #include "openturns/JacobiFactory.hxx" #include "openturns/KrawtchoukFactory.hxx" #include "openturns/LaguerreFactory.hxx" #include "openturns/LegendreFactory.hxx" #include "openturns/MeixnerFactory.hxx" #include "openturns/OrthogonalBasis.hxx" #include "openturns/OrthogonalFunctionFactory.hxx" #include "openturns/OrthogonalProductPolynomialFactory.hxx" #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/OrthonormalizationAlgorithm.hxx" #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/StandardDistributionPolynomialFactory.hxx" #include "openturns/OrthogonalUniVariateFunctionFamily.hxx" #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" #include "openturns/OrthogonalUniVariatePolynomialFunctionFactory.hxx" #include "openturns/FourierSeriesFactory.hxx" #include "openturns/HaarWaveletFactory.hxx" #include "openturns/OrthogonalProductFunctionFactory.hxx" #include "openturns/SoizeGhanemFactory.hxx" #include "openturns/SoizeGhanemFactorEvaluation.hxx" #endif /* OPENTURNS_OTORTHOGONALBASIS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/OrthogonalBasis.hxx000066400000000000000000000036611307543307100322030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the interface class for orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALBASIS_HXX #define OPENTURNS_ORTHOGONALBASIS_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/OrthogonalFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalBasis * * This is the interface class for orthogonal basis */ class OT_API OrthogonalBasis : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ OrthogonalBasis(); /** Constructor from implementation */ OrthogonalBasis(const OrthogonalFunctionFactory & implementation); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Return the measure upon which the basis is orthogonal */ Distribution getMeasure() const; /** Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction getEnumerateFunction() const; /** String converter */ virtual String __repr__() const; protected: private: } ; /* class OrthogonalBasis */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALBASIS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/OrthogonalFunctionFactory.hxx000066400000000000000000000050671307543307100342610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is an abstract class for orthogonal basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALFUNCTIONFACTORY_HXX #define OPENTURNS_ORTHOGONALFUNCTIONFACTORY_HXX #include "openturns/FunctionalBasisImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/Distribution.hxx" #include "openturns/EnumerateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalFunctionFactory * * This is an abstract class for orthogonal basis */ class OT_API OrthogonalFunctionFactory : public FunctionalBasisImplementation { CLASSNAME; public: /** Default constructor */ OrthogonalFunctionFactory(); /** Parameter constructor */ OrthogonalFunctionFactory(const Distribution & measure); /** Build the Function of the given index */ virtual Function build(const UnsignedInteger index) const; /** Return the measure upon which the basis is orthogonal */ virtual Distribution getMeasure() const; /** Return the enumerate function that translate unidimensional indices into multidimensional indices */ virtual EnumerateFunction getEnumerateFunction() const; /** Virtual constructor */ virtual OrthogonalFunctionFactory * clone() const; virtual Bool isOrthogonal() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The measure that defines the scalar product */ Distribution measure_; /** The enumerate function for product orthogonal functions */ EnumerateFunction enumerateFunction_; private: } ; /* class OrthogonalFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALFUNCTIONFACTORY_HXX */ OrthogonalProductFunctionFactory.hxx000066400000000000000000000065401307543307100355400ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is the orthogonal function basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALPRODUCTFUNCTIONFACTORY_HXX #define OPENTURNS_ORTHOGONALPRODUCTFUNCTIONFACTORY_HXX #include "openturns/OrthogonalFunctionFactory.hxx" #include "openturns/Function.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/OrthogonalUniVariateFunctionFamily.hxx" #include "openturns/TensorizedUniVariateFunctionFactory.hxx" #include "openturns/EnumerateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalProductFunctionFactory * * This is the orthogonal function basis */ class OT_API OrthogonalProductFunctionFactory : public OrthogonalFunctionFactory { CLASSNAME; public: typedef Collection FunctionFamilyCollection; typedef PersistentCollection FunctionFamilyPersistentCollection; friend class Factory; /** Default constructor */ OrthogonalProductFunctionFactory(); /** Constructor */ OrthogonalProductFunctionFactory(const FunctionFamilyCollection & coll); /** Constructor */ OrthogonalProductFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Return the enumerate function that translate unidimensional indices nto multidimensional indices */ EnumerateFunction getEnumerateFunction() const; /** Return the collection of univariate orthogonal polynomial families */ FunctionFamilyCollection getFunctionFamilyCollection() const; /** Virtual constructor */ virtual OrthogonalProductFunctionFactory * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Build tensorized function factory */ void buildTensorizedFunctionFactory(const FunctionFamilyCollection & coll, const EnumerateFunction & phi); /** Build the measure based on the one found in the family collection */ void buildMeasure(const FunctionFamilyCollection & coll); /** The product function factory */ TensorizedUniVariateFunctionFactory tensorizedFunctionFactory_; } ; /* class OrthogonalProductFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALPRODUCTFUNCTIONFACTORY_HXX */ OrthogonalProductPolynomialFactory.hxx000066400000000000000000000071131307543307100360730ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is the orthogonal polynomial basis * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALPRODUCTPOLYNOMIALFACTORY_HXX #define OPENTURNS_ORTHOGONALPRODUCTPOLYNOMIALFACTORY_HXX #include "openturns/OrthogonalFunctionFactory.hxx" #include "openturns/Distribution.hxx" #include "openturns/Indices.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalProductPolynomialFactory * * This is the orthogonal polynomial basis */ class OT_API OrthogonalProductPolynomialFactory : public OrthogonalFunctionFactory { CLASSNAME; public: typedef Collection PolynomialFamilyCollection; typedef PersistentCollection PolynomialFamilyPersistentCollection; friend class Factory; /** Default constructor */ OrthogonalProductPolynomialFactory(); /** Constructor */ OrthogonalProductPolynomialFactory(const PolynomialFamilyCollection & coll); /** Constructor */ OrthogonalProductPolynomialFactory(const PolynomialFamilyCollection & coll, const EnumerateFunction & phi); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction getEnumerateFunction() const; /** Return the collection of univariate orthogonal polynomial families */ PolynomialFamilyCollection getPolynomialFamilyCollection() const; /** Virtual constructor */ virtual OrthogonalProductPolynomialFactory * clone() const; /** Nodes and weights of the multivariate polynomial associated with the marginal degrees indices[0], ...,indices[dimension] as the tensor product of the marginal orthogonal univariate polynomials, to build multivariate quadrature rules */ Sample getNodesAndWeights(const Indices & degrees, Point & weights) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Build the measure based on the one found in the family collection */ void buildMeasure(); /** The 1D polynomial family collection */ PolynomialFamilyPersistentCollection coll_; /** The Phi function */ EnumerateFunction phi_; } ; /* class OrthogonalProductPolynomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALPRODUCTPOLYNOMIALFACTORY_HXX */ OrthogonalUniVariateFunctionFactory.hxx000066400000000000000000000043061307543307100361650ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This an abstract class for 1D function factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFACTORY #define OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFACTORY #include "openturns/UniVariateFunctionFactory.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariateFunctionFactory * * This an abstract class for 1D function factories */ class OT_API OrthogonalUniVariateFunctionFactory : public UniVariateFunctionFactory { CLASSNAME; public: enum ParameterSet { ANALYSIS, PROBABILITY }; /** Constructor */ explicit OrthogonalUniVariateFunctionFactory(const Distribution & measure); /** Virtual constructor */ virtual OrthogonalUniVariateFunctionFactory * clone() const; /** String converter */ virtual String __repr__() const; /** Measure accessor */ Distribution getMeasure() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ OrthogonalUniVariateFunctionFactory(); /** The distribution of the particular Orthonormal polynomial */ Distribution measure_; } ; /* class OrthogonalUniVariateFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFACTORY */ OrthogonalUniVariateFunctionFamily.hxx000066400000000000000000000043431307543307100360000ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is the interface class for orthogonal function factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFAMILY_HXX #define OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFAMILY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariateFunctionFamily * * This is the interface class for orthogonal function factories */ class OT_API OrthogonalUniVariateFunctionFamily : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ OrthogonalUniVariateFunctionFamily(); /** Constructor from implementation */ OrthogonalUniVariateFunctionFamily(const OrthogonalUniVariateFunctionFactory & implementation); #ifndef SWIG /** Constructor from implementation */ OrthogonalUniVariateFunctionFamily(const Implementation & p_implementation); /** Constructor from implementation */ OrthogonalUniVariateFunctionFamily(OrthogonalUniVariateFunctionFactory * p_implementation); #endif /** String converter */ virtual String __repr__() const; /** The method to get the function of any order. */ UniVariateFunction build(const UnsignedInteger order) const; /** Measure accessor */ Distribution getMeasure() const; protected: private: } ; /* class OrthogonalUniVariateFunctionFamily */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEFUNCTIONFAMILY_HXX */ OrthogonalUniVariatePolynomial.hxx000066400000000000000000000067011307543307100351740ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is an orthogonal 1D polynomial * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIAL_HXX #define OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIAL_HXX #include "openturns/UniVariatePolynomialImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariatePolynomial * * This is an orthogonal 1D polynomial. The polynomial P0 is constant equal to 1.0, and by convention we note P-1(x) the null polynomial. For n>=1 we have: Pn+1(x) = (an * x + bn) * Pn(x) + cn * Pn-1(x) */ class OT_API OrthogonalUniVariatePolynomial : public UniVariatePolynomialImplementation { CLASSNAME; public: typedef Collection CoefficientsCollection; typedef PersistentCollection CoefficientsPersistentCollection; /** Default constructor */ OrthogonalUniVariatePolynomial(); /** Constructor from coefficients */ OrthogonalUniVariatePolynomial(const CoefficientsCollection & recurrenceCoefficients); /** Virtual constructor */ virtual OrthogonalUniVariatePolynomial * clone() const; /** OrthogonalUniVariatePolynomial are evaluated as functors */ Scalar operator() (const Scalar x) const; /** Recurrence coefficients accessor */ CoefficientsCollection getRecurrenceCoefficients() const; /** Roots of the polynomial of degree n as the eigenvalues of the associated Jacobi matrix */ ComplexCollection getRoots() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class OrthogonalUniVariatePolynomialFactory; /** Constructor from recurrence coefficients and coefficients. It is protected to prevent the end user to give incoherent coefficients. */ OrthogonalUniVariatePolynomial(const CoefficientsCollection & recurrenceCoefficients, const Coefficients & coefficients); private: /** Build the coefficients of the polynomial based on the recurrence coefficients */ Coefficients buildCoefficients(const UnsignedInteger n); /** The recurrence coefficients (an, bn, cn) that defines the orthogonal polynomial for n >= 0. The polynomial P0 is constant equal to 1.0, and by convention we note P-1(x) the null polynomial. For n>=1 we have: Pn+1(x) = (an * x + bn) * Pn(x) + cn * Pn-1(x). The recurrence coefficients are stored starting with (a1, b1, c1). */ CoefficientsPersistentCollection recurrenceCoefficients_; } ; /* class OrthogonalUniVariatePolynomial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIAL_HXX */ OrthogonalUniVariatePolynomialFactory.hxx000066400000000000000000000101621307543307100365200ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This an abstract class for 1D polynomial factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFACTORY_HXX #define OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFACTORY_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/OrthogonalUniVariatePolynomial.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariatePolynomialFactory * * This an abstract class for 1D polynomial factories */ class OT_API OrthogonalUniVariatePolynomialFactory : public PersistentObject { CLASSNAME; public: typedef OrthogonalUniVariatePolynomial::Coefficients Coefficients; typedef Collection CoefficientsCollection; typedef PersistentCollection CoefficientsPersistentCollection; typedef Collection OrthogonalUniVariatePolynomialCollection; enum ParameterSet { ANALYSIS, PROBABILITY }; /** Constructor */ explicit OrthogonalUniVariatePolynomialFactory(const Distribution & measure); /** Virtual constructor */ virtual OrthogonalUniVariatePolynomialFactory * clone() const; /** String converter */ virtual String __repr__() const; /** The method to get the polynomial of any degree. */ OrthogonalUniVariatePolynomial build(const UnsignedInteger degree) const; /** Build the 3 terms recurrence coefficients up to the needed degree */ CoefficientsCollection buildRecurrenceCoefficientsCollection(const UnsignedInteger degree) const; /** Build the coefficients of the polynomial of the needed degree */ Coefficients buildCoefficients(const UnsignedInteger degree) const; /** Roots of the polynomial of degree n as the eigenvalues of the associated matrix */ Point getRoots(const UnsignedInteger n) const; /** Nodes and weights of the polynomial of degree n as the eigenvalues of the associated matrix, to build quadrature rules */ Point getNodesAndWeights(const UnsignedInteger n, Point & weights) const; /** Measure accessor */ Distribution getMeasure() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ virtual Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; protected: friend class Factory; /** Default constructor */ OrthogonalUniVariatePolynomialFactory(); /** Cache initialization */ virtual void initializeCache(); /** The distribution of the particular Orthonormal polynomial */ Distribution measure_; /** A cache to save already computed coefficients */ mutable CoefficientsPersistentCollection coefficientsCache_; /** A cache to save already computed recurrence coefficients */ mutable CoefficientsPersistentCollection recurrenceCoefficientsCache_; /** A cache to save already computed polynomials */ mutable OrthogonalUniVariatePolynomialCollection polynomialsCache_; } ; /* class OrthogonalUniVariatePolynomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFACTORY_HXX */ OrthogonalUniVariatePolynomialFamily.hxx000066400000000000000000000052201307543307100363310ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is the interface class for orthogonal polynomial factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFAMILY_HXX #define OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFAMILY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariatePolynomialFamily * * This is the interface class for orthogonal polynomial factories */ class OT_API OrthogonalUniVariatePolynomialFamily : public TypedInterfaceObject { CLASSNAME; public: typedef OrthogonalUniVariatePolynomialFactory::Coefficients Coefficients; /** Default constructor */ OrthogonalUniVariatePolynomialFamily(); /** Constructor from implementation */ OrthogonalUniVariatePolynomialFamily(const OrthogonalUniVariatePolynomialFactory & implementation); /** String converter */ virtual String __repr__() const; /** The method to get the polynomial of any degree. */ OrthogonalUniVariatePolynomial build(const UnsignedInteger degree) const; /** Roots of the polynomial of degree n as the eigenvalues of the associated matrix */ Point getRoots(const UnsignedInteger n) const; /** Nodes and weights of the polynomial of degree n as the eigenvalues of the associated matrix, to build quadrature rules */ Point getNodesAndWeights(const UnsignedInteger n, Point & weights) const; /** Measure accessor */ Distribution getMeasure() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; protected: private: } ; /* class OrthogonalUniVariatePolynomialFamily */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFAMILY_HXX */ OrthogonalUniVariatePolynomialFunctionFactory.hxx000066400000000000000000000044111307543307100402260ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief Polynomial function factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFUNCTIONFACTORY_HXX #define OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFUNCTIONFACTORY_HXX #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalUniVariatePolynomialFunctionFactory * * Polynomial function factory */ class OT_API OrthogonalUniVariatePolynomialFunctionFactory : public OrthogonalUniVariateFunctionFactory { CLASSNAME; public: /** Default constructor */ OrthogonalUniVariatePolynomialFunctionFactory(); /** Parameters constructor */ OrthogonalUniVariatePolynomialFunctionFactory(const OrthogonalUniVariatePolynomialFamily & polynomialFactory); /** Virtual constructor */ virtual OrthogonalUniVariatePolynomialFunctionFactory * clone() const; /** String converter */ String __repr__() const; /** The method to get the function of any order. */ virtual UniVariateFunction build(const UnsignedInteger order) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: OrthogonalUniVariatePolynomialFamily polynomialFactory_; } ; /* class OrthogonalUniVariatePolynomialFunctionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALUNIVARIATEPOLYNOMIALFUNCTIONFACTORY_HXX */ OrthonormalizationAlgorithm.hxx000066400000000000000000000045601307543307100345760ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHONORMALIZATIONALGORITHM_HXX #define OPENTURNS_ORTHONORMALIZATIONALGORITHM_HXX #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthonormalizationAlgorithm */ class OT_API OrthonormalizationAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; typedef OrthonormalizationAlgorithmImplementation::Coefficients Coefficients; /** Constructor with parameters */ OrthonormalizationAlgorithm(const OrthonormalizationAlgorithmImplementation & implementation); /** Constructor with parameters */ OrthonormalizationAlgorithm(Implementation & p_implementation); /** Constructor with parameters */ explicit OrthonormalizationAlgorithm(const Distribution & measure); /** Default Constructor */ OrthonormalizationAlgorithm(); /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** Measure accessor */ Distribution getMeasure() const; void setMeasure(const Distribution & measure); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; } ; /* class OrthonormalizationAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHONORMALIZATIONALGORITHM_HXX */ OrthonormalizationAlgorithmImplementation.hxx000066400000000000000000000047601307543307100375060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief Top level class for the orthonormalization algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHONORMALIZATIONALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_ORTHONORMALIZATIONALGORITHMIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Distribution.hxx" #include "openturns/OrthogonalUniVariatePolynomial.hxx" // for the definition of Coefficients BEGIN_NAMESPACE_OPENTURNS /** * @class OrthonormalizationAlgorithmImplementation */ class OT_API OrthonormalizationAlgorithmImplementation : public PersistentObject { CLASSNAME; public: typedef OrthogonalUniVariatePolynomial::Coefficients Coefficients; /** Default constructor with Brent solver */ OrthonormalizationAlgorithmImplementation(); /** Constructor with parameters */ explicit OrthonormalizationAlgorithmImplementation(const Distribution & measure); /** Virtual constructor */ virtual OrthonormalizationAlgorithmImplementation * clone() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ virtual Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** String converter */ virtual String __repr__() const; /** Measure accessor */ Distribution getMeasure() const; void setMeasure(const Distribution & measure); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: Distribution measure_; private: } ; /* class OrthonormalizationAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHONORMALIZATIONALGORITHMIMPLEMENTATION_HXX */ SoizeGhanemFactorEvaluation.hxx000066400000000000000000000065171307543307100344310ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief This is the evaluation part of the Soize-Ghanem basis coupling factor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOIZEGHANEMFACTOREVALUATION_HXX #define OPENTURNS_SOIZEGHANEMFACTOREVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SoizeGhanemFactorEvaluation * * This is the orthogonal polynomial basis */ /* Multiplicative factor of the multivariate basis */ /* Evaluation part */ class OT_API SoizeGhanemFactorEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; friend class Factory; /** Default constructor */ SoizeGhanemFactorEvaluation(); /** Default constructor */ SoizeGhanemFactorEvaluation(const Distribution & measure, const Collection & marginals, const Bool useCopula); /** Virtual constructor */ SoizeGhanemFactorEvaluation * clone() const; /** Comparison operator */ Bool operator ==(const SoizeGhanemFactorEvaluation & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset) const; /** Operator () */ using EvaluationImplementation::operator(); Point operator() (const Point & inP) const; Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Accessor for input point description */ Description getInputDescription() const; /** Accessor for output point description */ Description getOutputDescription() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** The underlying measure */ Distribution measure_; /** Flag to tell if the evaluation is based on the copula PDF or on the joint PDF */ Bool useCopula_; /** The copula of the measure */ Distribution copula_; /** The 1D marginal distributions of the measure */ DistributionPersistentCollection marginals_; } ; /* class SoizeGhanemFactorEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOIZEGHANEMFACTOREVALUATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns/SoizeGhanemFactory.hxx000066400000000000000000000060431307543307100326430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This is the natural orthogonal basis associated to a multidimensional * distribution. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOIZEGHANEMFACTORY_HXX #define OPENTURNS_SOIZEGHANEMFACTORY_HXX #include "openturns/OrthogonalFunctionFactory.hxx" #include "openturns/Distribution.hxx" #include "openturns/Indices.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/OrthogonalProductPolynomialFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SoizeGhanemFactory * * This is the orthogonal polynomial basis */ class OT_API SoizeGhanemFactory : public OrthogonalFunctionFactory { CLASSNAME; public: friend class Factory; /** Default constructor */ SoizeGhanemFactory(); /** Constructor */ explicit SoizeGhanemFactory(const Distribution & measure, const Bool useCopula = true); /** Constructor */ SoizeGhanemFactory(const Distribution & measure, const EnumerateFunction & phi, const Bool useCopula = true); /** Build the Function of the given index */ Function build(const UnsignedInteger index) const; /** Return the enumerate function that translate unidimensional indices into multidimensional indices */ EnumerateFunction getEnumerateFunction() const; /** Virtual constructor */ virtual SoizeGhanemFactory * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /* Build the multivariate polynomial factory associated with the marginal distributions */ void buildProductPolynomialAndAdaptation(const Bool useCopula); /** The underlying product polynomial factory */ OrthogonalProductPolynomialFactory productPolynomial_; /** The Phi function */ EnumerateFunction phi_; /** Has independent copula? */ Bool hasIndependentCopula_; /** Adaptation factor */ Function adaptationFactor_; } ; /* class SoizeGhanemFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOIZEGHANEMFACTORY_HXX */ StandardDistributionPolynomialFactory.hxx000066400000000000000000000057311307543307100365620ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/OrthogonalBasis/openturns// -*- C++ -*- /** * @brief OrthogonalUniVariatePolynomialStandardDistribution polynomial factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STANDARDDISTRIBUTIONPOLYNOMIALFACTORY_HXX #define OPENTURNS_STANDARDDISTRIBUTIONPOLYNOMIALFACTORY_HXX #include #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" #include "openturns/OrthonormalizationAlgorithm.hxx" #include "openturns/Collection.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StandardDistributionPolynomialFactory * * OrthogonalUniVariatePolynomialStandardDistribution polynomial factory */ class OT_API StandardDistributionPolynomialFactory : public OrthogonalUniVariatePolynomialFactory { CLASSNAME; public: /** Default constructor */ StandardDistributionPolynomialFactory(); /** Parameter constructor */ StandardDistributionPolynomialFactory(const Distribution & distribution); /** Parameter constructor with specific orthonormalization algorithm */ StandardDistributionPolynomialFactory(const OrthonormalizationAlgorithm & orthonormalizationAlgorithm); /** Virtual constructor */ virtual StandardDistributionPolynomialFactory * clone() const; /** Calculate the coefficients of recurrence a0, a1, a2 such that Pn+1(x) = (a0 * x + a1) * Pn(x) + a2 * Pn-1(x) */ Coefficients getRecurrenceCoefficients(const UnsignedInteger n) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Check the existence of a specific family more efficient for the given measure */ void checkSpecificFamily(); /** Algorithm used to perform the orthonormalization */ OrthonormalizationAlgorithm orthonormalizationAlgorithm_; /** Specific factory if a special case is recognized */ OrthogonalUniVariatePolynomialFamily specificFamily_; /** Flag to tell if a specific family is available */ Bool hasSpecificFamily_; } ; /* class StandardDistributionPolynomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STANDARDDISTRIBUTIONPOLYNOMIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/000077500000000000000000000000001307543307100235455ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/ANCOVA.cxx000066400000000000000000000120301307543307100252340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ANCOVA implements the sensivity analysis method for correlated data * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ANCOVA.hxx" BEGIN_NAMESPACE_OPENTURNS /* Constructor */ ANCOVA::ANCOVA(const FunctionalChaosResult & functionalChaosResult, const Sample & correlatedInput) : functionalChaosResult_(functionalChaosResult), correlatedInput_(correlatedInput), alreadyComputedIndices_(false) { if (correlatedInput_.getSize() == 0) throw InvalidArgumentException(HERE) << "Input sample is empty"; const UnsignedInteger nbInput = functionalChaosResult_.getMetaModel().getInputDimension(); if (correlatedInput_.getDimension() != nbInput) throw InvalidDimensionException(HERE) << "The dimension of the input sample must be equal to the number of inputs of the model"; } /* Compute the ANCOVA indices */ void ANCOVA::run() const { const UnsignedInteger inputDimension = correlatedInput_.getDimension(); const UnsignedInteger inputSize = correlatedInput_.getSize(); const UnsignedInteger nbMarginals = functionalChaosResult_.getMetaModel().getOutputDimension(); const Indices coefficientIndices = functionalChaosResult_.getIndices(); const EnumerateFunction enumerateFunction = functionalChaosResult_.getOrthogonalBasis().getEnumerateFunction(); const FunctionCollection B = functionalChaosResult_.getReducedBasis(); const Function T = functionalChaosResult_.getTransformation(); const Sample allCoefficients = functionalChaosResult_.getCoefficients(); const UnsignedInteger coefSize = allCoefficients.getSize(); uncorrelatedIndices_ = Sample(nbMarginals, inputDimension); indices_ = Sample(nbMarginals, inputDimension); for (UnsignedInteger input_i = 0; input_i < inputDimension; ++input_i) { Indices coefList(coefSize); UnsignedInteger counter = 0; // Search univariate polynomials for (UnsignedInteger m = 0; m < coefSize - 1; ++m) { const Indices nullIndices(inputDimension); Indices multiIndices(enumerateFunction(coefficientIndices[m + 1])); multiIndices[input_i] = 0; if (multiIndices == nullIndices) { coefList[counter] = m + 1; ++counter; } } for (UnsignedInteger marginal_k = 0; marginal_k < nbMarginals; ++marginal_k) { const Sample coefficients = allCoefficients.getMarginal(marginal_k); // Output sample obtained with correlated inputs const Sample Y(functionalChaosResult_.getMetaModel().getMarginal(marginal_k)(correlatedInput_)); // Compute parts of variance Sample inputOutput(inputSize, 2); for (UnsignedInteger j = 0; j < inputSize; ++j) { Scalar temp = 0.; for (UnsignedInteger k = 0; k < counter + 1; ++k) temp += coefficients[coefList[k]][0] * B[coefList[k]](T(correlatedInput_[j]))[0]; inputOutput[j][0] = temp; inputOutput[j][1] = Y[j][0]; } const CovarianceMatrix inputOutputCovariance(inputOutput.computeCovariance()); // Compute total part of variance of the marginal_k output due to input_i indices_[marginal_k][input_i] = inputOutputCovariance(0, 1) / inputOutputCovariance(1, 1); // "uncorrelated" part uncorrelatedIndices_[marginal_k][input_i] = inputOutputCovariance(0, 0) / inputOutputCovariance(1, 1); } } alreadyComputedIndices_ = true; } /* Accessor to ANCOVA indices measuring uncorrelated effects */ Point ANCOVA::getUncorrelatedIndices(const UnsignedInteger marginalIndex) const { if (!alreadyComputedIndices_) run(); UnsignedInteger outputDimension = functionalChaosResult_.getMetaModel().getOutputDimension(); if (marginalIndex >= outputDimension) throw InvalidArgumentException(HERE) << "The marginal index must be in the range [0, dim-1]. Here dim=" << outputDimension; return uncorrelatedIndices_[marginalIndex]; } /* Compute ANCOVA indices: total parts of variance of the output due to each input */ Point ANCOVA::getIndices(const UnsignedInteger marginalIndex) const { if (!alreadyComputedIndices_) run(); UnsignedInteger outputDimension = functionalChaosResult_.getMetaModel().getOutputDimension(); if (marginalIndex >= outputDimension) throw InvalidArgumentException(HERE) << "The marginal index must be in the range [0, dim-1]. Here dim=" << outputDimension; return indices_[marginalIndex]; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/CMakeLists.txt000066400000000000000000000033031307543307100263040ustar00rootroot00000000000000# -*- cmake -*- # # CMakeLists.txt # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (ANCOVA.cxx) ot_add_source_file (FAST.cxx) ot_add_source_file (JansenSensitivityAlgorithm.cxx) ot_add_source_file (MartinezSensitivityAlgorithm.cxx) ot_add_source_file (MauntzKucherenkoSensitivityAlgorithm.cxx) ot_add_source_file (SaltelliSensitivityAlgorithm.cxx) ot_add_source_file (SobolIndicesAlgorithm.cxx) ot_add_source_file (SobolIndicesAlgorithmImplementation.cxx) ot_install_header_file (OTSensitivity.hxx) ot_install_header_file (ANCOVA.hxx) ot_install_header_file (FAST.hxx) ot_install_header_file (JansenSensitivityAlgorithm.hxx) ot_install_header_file (MartinezSensitivityAlgorithm.hxx) ot_install_header_file (MauntzKucherenkoSensitivityAlgorithm.hxx) ot_install_header_file (SaltelliSensitivityAlgorithm.hxx) ot_install_header_file (SobolIndicesAlgorithm.hxx) ot_install_header_file (SobolIndicesAlgorithmImplementation.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/FAST.cxx000066400000000000000000000171521307543307100250340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief FAST implements the sensivity analysis method based on fourier decomposition * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/FAST.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/FFT.hxx" BEGIN_NAMESPACE_OPENTURNS /* Constructor with model */ FAST::FAST(const Function & model, const Distribution & inputsDistribution, const UnsignedInteger samplingSize, const UnsignedInteger resamplingSize, const UnsignedInteger interferenceFactor) : model_(model) , inputsDistribution_(inputsDistribution) , samplingSize_(samplingSize) , blockSize_(1) , resamplingSize_(resamplingSize) , interferenceFactor_(interferenceFactor) , alreadyComputedIndices_(false) { if (inputsDistribution_.getDimension() != model_.getInputDimension()) throw InvalidArgumentException(HERE) << "Error: The distribution's dimension " << inputsDistribution_.getDimension() << " must be equal to the model's number of inputs " << model_.getInputDimension() << "."; if (resamplingSize_ < 1) throw InvalidArgumentException(HERE) << "Error: The number of resamplings must be greater or equal than 0, here Nr=" << resamplingSize_ << "."; if (interferenceFactor_ < 1) throw InvalidArgumentException(HERE) << "Error: The interference factor is necessarily greater than 0, here M=" << interferenceFactor_ << "."; if (samplingSize_ - 1 < 4 * interferenceFactor_ * interferenceFactor_ ) throw InvalidArgumentException(HERE) << "Error: It is necessary that 4*M^2 <= N-1 to compute a valid set of frequencies."; if (!inputsDistribution.hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: Cannot use FAST method with distributions having a non-independent copula."; } /* Compute all the FAST indices */ void FAST::run() const { // Model dimensions const UnsignedInteger nbIn = model_.getInputDimension(); const UnsignedInteger nbOut = model_.getOutputDimension(); // Allocate indices firstOrderIndice_ = Sample(nbOut, nbIn); totalOrderIndice_ = Sample(nbOut, nbIn); // this avoids to store huge input samples while allowing for multi-threading const UnsignedInteger maximumOuterSampling = static_cast(ceil(1.0 * samplingSize_ / blockSize_)); const UnsignedInteger modulo = samplingSize_ % blockSize_; const UnsignedInteger lastBlockSize = modulo == 0 ? blockSize_ : modulo; // S-space discretization Point s(samplingSize_); for (UnsignedInteger i = 1; i < samplingSize_; ++ i) s[i] = 2. * M_PI * i / samplingSize_; // Set of frequencies definition Indices w_i_0(nbIn); UnsignedInteger omega = (samplingSize_ - 1) / (2 * interferenceFactor_); // omega_{-i} = omega / (2 * interferenceFactor_):; UnsignedInteger max_w_l = (samplingSize_ - 1) / (4 * interferenceFactor_ * interferenceFactor_); w_i_0[0] = omega; if ( max_w_l >= nbIn - 1 ) { const Scalar step = (max_w_l - 1.) / (nbIn - 2.); for (UnsignedInteger inp = 0; inp < nbIn - 1; ++ inp) w_i_0[inp + 1] = inp * step + 1; w_i_0[nbIn - 1] = max_w_l; } else { for (UnsignedInteger inp = 0; inp < nbIn - 1; ++ inp) w_i_0[inp + 1] = inp % max_w_l + 1; } // Initializations Sample D_i(nbOut, nbIn); Sample D_l(nbOut, nbIn); // For each input, compute first order and total order indices for each model's output for (UnsignedInteger inp = 0; inp < nbIn; ++ inp) { Point D(nbOut, 0.); // Frequencies assignment Indices w_i(w_i_0); w_i[inp] = omega; for (UnsignedInteger i = 0; i < inp; ++ i) w_i[i] = w_i_0[i + 1]; // Loop of resampling for (UnsignedInteger t = 0; t < resamplingSize_; ++ t) { // Random phase-shift Point phi_i(nbIn); for (UnsignedInteger i = 0; i < nbIn; ++ i) phi_i[i] = 2. * M_PI * RandomGenerator::Generate(); Point xi_s(nbIn); Sample output(0, nbOut); // for each block ... for (UnsignedInteger outerSampling = 0; outerSampling < maximumOuterSampling; ++ outerSampling) { // the last block can be smaller const UnsignedInteger effectiveBlockSize = outerSampling < (maximumOuterSampling - 1) ? blockSize_ : lastBlockSize; Sample inputBlock(effectiveBlockSize, nbIn); for (UnsignedInteger blockIndex = 0; blockIndex < effectiveBlockSize; ++ blockIndex) { // Search-curve x_i(s)=g_i(w_i,s) definition for (UnsignedInteger i = 0; i < nbIn; ++ i) { const Scalar ui_s = 0.5 + std::asin(std::sin(w_i[i] * s[outerSampling * blockSize_ + blockIndex] + phi_i[i])) / M_PI; inputBlock[blockIndex][i] = inputsDistribution_.getMarginal(i).computeQuantile(ui_s)[0]; } } output.add(model_(inputBlock)); } // For each model's output for (UnsignedInteger out = 0; out < nbOut; ++ out) { // Fourier transformation Point y(output.getMarginal(out).getImplementation()->getData()); ComplexCollection coefficients(fftAlgorithm_.transform(y)); // Total variance for (UnsignedInteger j = 0; j < (samplingSize_ - 1) / 2; ++ j) D[out] += std::norm(coefficients[j + 1]); // Partial variance of all factors except the factor of interest for (UnsignedInteger j = 0; j < omega / 2; ++ j) D_l[out][inp] += std::norm(coefficients[j + 1]); // Partial variance of the factor of interest for (UnsignedInteger j = 0; j < interferenceFactor_; ++ j) D_i[out][inp] += std::norm(coefficients[(j + 1) * omega]); } } // When all resamplings are realised: save the indices for ( UnsignedInteger out = 0; out < nbOut; ++ out ) { firstOrderIndice_[out][inp] = D_i[out][inp] / D[out]; totalOrderIndice_[out][inp] = 1. - D_l[out][inp] / D[out]; } } alreadyComputedIndices_ = true; } /* First order indices accessor */ Point FAST::getFirstOrderIndices(const UnsignedInteger marginalIndex) const { if (!alreadyComputedIndices_) run(); if (marginalIndex >= firstOrderIndice_.getSize()) throw InvalidArgumentException(HERE) << "Output dimension is " << firstOrderIndice_.getSize(); return firstOrderIndice_[marginalIndex]; } /* Total order indices accessor */ Point FAST::getTotalOrderIndices(const UnsignedInteger marginalIndex) const { if (!alreadyComputedIndices_) run(); if (marginalIndex >= totalOrderIndice_.getSize()) throw InvalidArgumentException(HERE) << "Output dimension is " << totalOrderIndice_.getSize(); return totalOrderIndice_[marginalIndex]; } /* FFT algorithm accessor */ FFT FAST::getFFTAlgorithm() const { return fftAlgorithm_; } void FAST::setFFTAlgorithm(const FFT & fft) { fftAlgorithm_ = fft; } /* Block size accessor */ void FAST::setBlockSize(const UnsignedInteger blockSize) { blockSize_ = blockSize; } UnsignedInteger FAST::getBlockSize() const { return blockSize_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/JansenSensitivityAlgorithm.cxx000066400000000000000000000100351307543307100316300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for Jansen sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/JansenSensitivityAlgorithm.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(JansenSensitivityAlgorithm); static const Factory Factory_JansenSensitivityAlgorithm; /* Default constructor */ JansenSensitivityAlgorithm::JansenSensitivityAlgorithm() : SobolIndicesAlgorithmImplementation() { // Nothing to do } /** Constructor with parameters */ JansenSensitivityAlgorithm::JansenSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size) : SobolIndicesAlgorithmImplementation(inputDesign, outputDesign, size) { // Nothing to do } /** Constructor with distribution / model parameters */ JansenSensitivityAlgorithm::JansenSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(distribution, size, model, computeSecondOrder) { // Nothing to do } /** Constructor with experiment / model parameters */ JansenSensitivityAlgorithm::JansenSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(experiment, model, computeSecondOrder) { // Nothing to do } /* Virtual constructor */ JansenSensitivityAlgorithm * JansenSensitivityAlgorithm::clone() const { return new JansenSensitivityAlgorithm(*this); } /** Internal method that compute Vi/VTi using a huge sample */ Sample JansenSensitivityAlgorithm::computeIndices(const Sample & sample, Sample & VTi) const { const UnsignedInteger inputDimension = inputDesign_.getDimension(); const UnsignedInteger outputDimension = outputDesign_.getDimension(); const UnsignedInteger size = size_; Sample varianceI(outputDimension, inputDimension); VTi = Sample(outputDimension, inputDimension); // Use reference samples // Reference sample yA const Sample yA(sample, 0, size); // Reference sample yB const Sample yB(sample, size, 2 * size); // main loop for (UnsignedInteger p = 0; p < inputDimension; ++p) { // Compute yE - yB / yE - yA // Copy elements of yE Sample yEMinusyB(sample, (2 + p) * size, (3 + p) * size); // Copy in yEMinusyA Sample yEMinusyA(yEMinusyB); // Remove yB from yEMinusyB yEMinusyB -= yB; // Remove yA from yEMinusyA yEMinusyA -= yA; // Sum of squared elements const Point squaredSumyBMinusyE(computeSumDotSamples(yEMinusyB, yEMinusyB)); // Sum of squared elements const Point squaredSumyAMinusyE(computeSumDotSamples(yEMinusyA, yEMinusyA)); for (UnsignedInteger q = 0; q < outputDimension; ++q) { varianceI[q][p] = -squaredSumyBMinusyE[q] / (2.0 * size - 1.0) + referenceVariance_[q]; // Vti = Var - V_{-i} VTi[q][p] = squaredSumyAMinusyE[q] / (2.0 * size - 1.0); } } return varianceI; } /* String converter */ String JansenSensitivityAlgorithm::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " " << SobolIndicesAlgorithmImplementation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/MartinezSensitivityAlgorithm.cxx000066400000000000000000000216221307543307100322070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for Martinez sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MartinezSensitivityAlgorithm.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MartinezSensitivityAlgorithm); static const Factory Factory_MartinezSensitivityAlgorithm; /* Default constructor */ MartinezSensitivityAlgorithm::MartinezSensitivityAlgorithm() : SobolIndicesAlgorithmImplementation() , useAsymptoticInterval_(ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { // Nothing to do } /** Constructor with parameters */ MartinezSensitivityAlgorithm::MartinezSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size) : SobolIndicesAlgorithmImplementation(inputDesign, outputDesign, size) , useAsymptoticInterval_(ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { // Nothing to do } /** Constructor with distribution / model parameters */ MartinezSensitivityAlgorithm::MartinezSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(distribution, size, model, computeSecondOrder) , useAsymptoticInterval_(ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { // Nothing to do } /** Constructor with experiment / model parameters */ MartinezSensitivityAlgorithm::MartinezSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(experiment, model, computeSecondOrder) , useAsymptoticInterval_(ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { // Nothing to do } /* Virtual constructor */ MartinezSensitivityAlgorithm * MartinezSensitivityAlgorithm::clone() const { return new MartinezSensitivityAlgorithm(*this); } Sample MartinezSensitivityAlgorithm::computeIndices(const Sample & sample, Sample & VTi) const { const UnsignedInteger inputDimension = inputDesign_.getDimension(); const UnsignedInteger outputDimension = outputDesign_.getDimension(); const UnsignedInteger size = size_; Sample varianceI(outputDimension, inputDimension); VTi = Sample(outputDimension, inputDimension); // Use reference samples // Reference sample yA Sample yA(sample, 0, size); const Point muA(yA.computeMean()); const Point sigmaA(yA.computeStandardDeviationPerComponent()); // center sample yA yA -= muA; // Reference sample yB Sample yB(sample, size, 2 * size); const Point muB(yB.computeMean()); const Point sigmaB(yB.computeStandardDeviationPerComponent()); // center-reduce sample yB yB -= muB; yB /= sigmaB; for (UnsignedInteger p = 0; p < inputDimension; ++p) { Sample yE(sample, (2 + p) * size, (3 + p) * size); const Point muE(yE.computeMean()); const Point sigmaE(yE.computeStandardDeviationPerComponent()); // center-reduce sample yB yE -= muE; yE /= sigmaE; // Compute yE * yB const Point yEDotyB(computeSumDotSamples(yE, yB)); // Compute yE * yA const Point yEDotyA(computeSumDotSamples(yE, yA)); for (UnsignedInteger q = 0; q < outputDimension; ++q) { // Compute rho(yB, yE) with rho : Pearson correlation // Si = rho(yB, yE) thus Vi = Si * V varianceI[q][p] = yEDotyB[q] / (size - 1.0) * sigmaA[q] * sigmaA[q]; // STi = 1 - rho(yA, yE), Vti = V -VTi thus VTi = rho(yA, yE) * var(yA) VTi[q][p] = referenceVariance_[q] - yEDotyA[q] / (size - 1.0) * sigmaA[q]; } } return varianceI; } /* String converter */ String MartinezSensitivityAlgorithm::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " " << SobolIndicesAlgorithmImplementation::__repr__(); return oss; } // Compute the fisher transform void MartinezSensitivityAlgorithm::computeAsymptoticInterval() const { // Do nothing if already computed if (0 != firstOrderIndiceInterval_.getDimension()) return; // Compute Fisher transform // Build interval using sample variance // Mean reference is the Sensitivity values const Point aggregatedFirstOrder(getAggregatedFirstOrderIndices()); const Point aggregatedTotalOrder(getAggregatedTotalOrderIndices()); const Scalar t = DistFunc::qNormal(1.0 - 0.5 * confidenceLevel_); const UnsignedInteger size = size_; if (size <= 3) throw InvalidArgumentException(HERE) << "Could not compute asymptotic confidence interval for sensitivity indices with size=" << size << ", sample's size should be at least 4"; const UnsignedInteger inputDimension = inputDesign_.getDimension(); // First order interval Point firstOrderLowerBound(inputDimension, 0.0); Point firstOrderUpperBound(inputDimension, 0.0); // Total order interval Point totalOrderLowerBound(inputDimension, 0.0); Point totalOrderUpperBound(inputDimension, 0.0); // Numerical scalar that will be used Scalar z, rho; for (UnsignedInteger p = 0; p < inputDimension; ++p) { // Correlation indices evaluation // first order // We get Si which is a correlation coefficient // Even if multidimensional, linear combination is still gaussian rho = aggregatedFirstOrder[p]; // Fisher transform z = 0.5 * std::log((1.0 + rho) / (1.0 - rho)); // zmin/zmax Scalar zmin = std::tanh(z - t / std::sqrt(size - 3.0)); Scalar zmax = std::tanh(z + t / std::sqrt(size - 3.0)); // TODO if interval is outside [0,1], how to procede? firstOrderLowerBound[p] = zmin; firstOrderUpperBound[p] = zmax; // total order // We compute STi which is a correlation coefficient // Even if multidimensional, linear combination is still gaussian rho = 1.0 - aggregatedTotalOrder[p]; // Fisher transform z = 0.5 * std::log((1.0 + rho) / (1.0 - rho)); // zmin/zmax zmin = std::tanh(z - t / std::sqrt(size - 3.0)); zmax = std::tanh(z + t / std::sqrt(size - 3.0)); totalOrderLowerBound[p] = 1.0 - zmax; totalOrderUpperBound[p] = 1.0 - zmin; } // Compute confidence interval firstOrderIndiceInterval_ = Interval(firstOrderLowerBound, firstOrderUpperBound); totalOrderIndiceInterval_ = Interval(totalOrderLowerBound, totalOrderUpperBound); } /** Interval for the first order indices accessor */ Interval MartinezSensitivityAlgorithm::getFirstOrderIndicesInterval() const { if (useAsymptoticInterval_ != ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { useAsymptoticInterval_ = ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval"); firstOrderIndiceInterval_ = Interval(); totalOrderIndiceInterval_ = Interval(); } if (useAsymptoticInterval_) { computeAsymptoticInterval(); } else { // Interval evaluation using Bootstrap computeIndicesInterval(); } return firstOrderIndiceInterval_; } /** Interval for the total order indices accessor */ Interval MartinezSensitivityAlgorithm::getTotalOrderIndicesInterval() const { if (useAsymptoticInterval_ != ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval")) { useAsymptoticInterval_ = ResourceMap::GetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval"); firstOrderIndiceInterval_ = Interval(); totalOrderIndiceInterval_ = Interval(); } if (useAsymptoticInterval_) { computeAsymptoticInterval(); } else { // Interval evaluation using Bootstrap computeIndicesInterval(); } return totalOrderIndiceInterval_; } /* Method save() stores the object through the StorageManager */ void MartinezSensitivityAlgorithm::save(Advocate & adv) const { SobolIndicesAlgorithmImplementation::save(adv); adv.saveAttribute("useAsymptoticInterval_", useAsymptoticInterval_); } /* Method load() reloads the object from the StorageManager */ void MartinezSensitivityAlgorithm::load(Advocate & adv) { SobolIndicesAlgorithmImplementation::load(adv); adv.loadAttribute("useAsymptoticInterval_", useAsymptoticInterval_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/MauntzKucherenkoSensitivityAlgorithm.cxx000066400000000000000000000111451307543307100337120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for Mauntz-Kucherenko sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MauntzKucherenkoSensitivityAlgorithm.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MauntzKucherenkoSensitivityAlgorithm); static const Factory Factory_MauntzKucherenkoSensitivityAlgorithm; /* Default constructor */ MauntzKucherenkoSensitivityAlgorithm::MauntzKucherenkoSensitivityAlgorithm() : SobolIndicesAlgorithmImplementation() { // Nothing to do } /** Constructor with parameters */ MauntzKucherenkoSensitivityAlgorithm::MauntzKucherenkoSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size) : SobolIndicesAlgorithmImplementation(inputDesign, outputDesign, size) { // Nothing to do } /** Constructor with distribution / model parameters */ MauntzKucherenkoSensitivityAlgorithm::MauntzKucherenkoSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(distribution, size, model, computeSecondOrder) { // Nothing to do } /** Constructor with experiment / model parameters */ MauntzKucherenkoSensitivityAlgorithm::MauntzKucherenkoSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(experiment, model, computeSecondOrder) { // Nothing to do } /* Virtual constructor */ MauntzKucherenkoSensitivityAlgorithm * MauntzKucherenkoSensitivityAlgorithm::clone() const { return new MauntzKucherenkoSensitivityAlgorithm(*this); } /** Internal method that compute Vi/VTi using a huge sample */ Sample MauntzKucherenkoSensitivityAlgorithm::computeIndices(const Sample & sample, Sample & VTi) const { const UnsignedInteger inputDimension = inputDesign_.getDimension(); const UnsignedInteger outputDimension = outputDesign_.getDimension(); const UnsignedInteger size = size_; Sample varianceI(outputDimension, inputDimension); VTi = Sample(outputDimension, inputDimension); // Use reference samples // Compute muA = mean(yA) const Sample yA(sample, 0, size); const Point muA(yA.computeMean()); // Compute crossMean const Point yADotyB(computeSumDotSamples(sample, size_, 0, size_)); // main loop for (UnsignedInteger p = 0; p < inputDimension; ++p) { // yE correspond to the block that start at index (p + 2) * size_ // For first order indices, compute yE * yB const Point yEDotyB(computeSumDotSamples(sample, size_, size_, (2 + p) * size_)); // Compute yE * yA const Point yEDotyA(computeSumDotSamples(sample, size_, 0, (2 + p) * size_)); for (UnsignedInteger k = 0; k < size; ++k) { for (UnsignedInteger q = 0; q < outputDimension; ++q) { varianceI[q][p] = (yEDotyB[q] - yADotyB[q]) / (size - 1.0); // Vti = Var - V_{-i} // \sum_{k} yA[k] * yA[k] - yA[k]*yE[k] // yA[k] * yA[k] = sigma_a^2 + muA^2 VTi[q][p] = referenceVariance_[q] + (size * muA[q] * muA[q] - yEDotyA[q]) / (size - 1.0); } } } return varianceI; } /* String converter */ String MauntzKucherenkoSensitivityAlgorithm::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " " << SobolIndicesAlgorithmImplementation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void MauntzKucherenkoSensitivityAlgorithm::save(Advocate & adv) const { SobolIndicesAlgorithmImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void MauntzKucherenkoSensitivityAlgorithm::load(Advocate & adv) { SobolIndicesAlgorithmImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/SaltelliSensitivityAlgorithm.cxx000066400000000000000000000104461307543307100321710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for Saltelli sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SaltelliSensitivityAlgorithm.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SaltelliSensitivityAlgorithm); static const Factory Factory_SaltelliSensitivityAlgorithm; /* Default constructor */ SaltelliSensitivityAlgorithm::SaltelliSensitivityAlgorithm() : SobolIndicesAlgorithmImplementation() { // Nothing to do } /** Constructor with parameters */ SaltelliSensitivityAlgorithm::SaltelliSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size) : SobolIndicesAlgorithmImplementation(inputDesign, outputDesign, size) { // Nothing to do } /** Constructor with distribution / model parameters */ SaltelliSensitivityAlgorithm::SaltelliSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(distribution, size, model, computeSecondOrder) { // Nothing to do } /** Constructor with experiment / model parameters */ SaltelliSensitivityAlgorithm::SaltelliSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder) : SobolIndicesAlgorithmImplementation(experiment, model, computeSecondOrder) { // Nothing to do } /** Internal method that compute Vi/VTi using a huge sample */ Sample SaltelliSensitivityAlgorithm::computeIndices(const Sample & sample, Sample & VTi) const { const UnsignedInteger inputDimension = inputDesign_.getDimension(); const UnsignedInteger outputDimension = outputDesign_.getDimension(); const UnsignedInteger size = size_; Sample varianceI(outputDimension, inputDimension); VTi = Sample(outputDimension, inputDimension); // Compute muA = mean(yA) const Sample yA(sample, 0, size); const Point muA(yA.computeMean()); // Compute cross mean term const Point crossSquareMean(computeSumDotSamples(sample, size_, 0, size_) / size_); for (UnsignedInteger p = 0; p < inputDimension; ++p) { // yE correspond to the block that start at index (p + 2) * size_ // For first order indices, compute yE * yB const Point yEDotyB(computeSumDotSamples(sample, size_, size_, (2 + p) * size_)); // For total order indices, compute yE * yA const Point yEDotyA(computeSumDotSamples(sample, size_, 0, (2 + p) * size_)); for (UnsignedInteger q = 0; q < outputDimension; ++q) { varianceI[q][p] += yEDotyB[q] / (size - 1.0) - crossSquareMean[q]; // Vti = Var - V_{-i} VTi[q][p] += muA[q] * muA[q] + referenceVariance_[q] - yEDotyA[q] / (size - 1.0); } } return varianceI; } /* Virtual constructor */ SaltelliSensitivityAlgorithm * SaltelliSensitivityAlgorithm::clone() const { return new SaltelliSensitivityAlgorithm(*this); } /* String converter */ String SaltelliSensitivityAlgorithm::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " " << SobolIndicesAlgorithmImplementation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void SaltelliSensitivityAlgorithm::save(Advocate & adv) const { SobolIndicesAlgorithmImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void SaltelliSensitivityAlgorithm::load(Advocate & adv) { SobolIndicesAlgorithmImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/SobolIndicesAlgorithm.cxx000066400000000000000000000126611307543307100305230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SobolIndicesAlgorithm provides capabilities for sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SobolIndicesAlgorithm.hxx" #include "openturns/MartinezSensitivityAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SobolIndicesAlgorithm); /* Default constructor */ SobolIndicesAlgorithm::SobolIndicesAlgorithm() : TypedInterfaceObject(new SobolIndicesAlgorithmImplementation()) { // Nothing to do } /* Constructor from an implementation */ SobolIndicesAlgorithm::SobolIndicesAlgorithm(const SobolIndicesAlgorithmImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from a Pointer to an implementation */ SobolIndicesAlgorithm::SobolIndicesAlgorithm(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* * @brief Standard constructor */ SobolIndicesAlgorithm::SobolIndicesAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size): TypedInterfaceObject(new MartinezSensitivityAlgorithm(inputDesign, outputDesign, size)) { // Nothing to do } /** Constructor with parameters */ SobolIndicesAlgorithm::SobolIndicesAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder): TypedInterfaceObject(new MartinezSensitivityAlgorithm(distribution, size, model, computeSecondOrder)) { // Nothing to do } /** Constructor with experiment / model parameters */ SobolIndicesAlgorithm::SobolIndicesAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder): TypedInterfaceObject(new MartinezSensitivityAlgorithm(experiment, model, computeSecondOrder)) { // Nothing to do } /* First order indices accessor */ Point SobolIndicesAlgorithm::getFirstOrderIndices(const UnsignedInteger marginalIndex) const { return getImplementation()->getFirstOrderIndices(marginalIndex); } /* Interval for the first order indices accessor */ Interval SobolIndicesAlgorithm::getFirstOrderIndicesInterval() const { return getImplementation()->getFirstOrderIndicesInterval(); } /* Second order indices accessor */ SymmetricMatrix SobolIndicesAlgorithm::getSecondOrderIndices(const UnsignedInteger marginalIndex) const { return getImplementation()->getSecondOrderIndices(marginalIndex); } /* Total order indices accessor */ Point SobolIndicesAlgorithm::getTotalOrderIndices(const UnsignedInteger marginalIndex) const { return getImplementation()->getTotalOrderIndices(marginalIndex); } /* Interval for the total order indices accessor */ Interval SobolIndicesAlgorithm::getTotalOrderIndicesInterval() const { return getImplementation()->getTotalOrderIndicesInterval(); } /* Aggregated first order indices accessor for multivariate samples */ Point SobolIndicesAlgorithm::getAggregatedFirstOrderIndices() const { return getImplementation()->getAggregatedFirstOrderIndices(); } /* Aggregated total order indices accessor for multivariate samples */ Point SobolIndicesAlgorithm::getAggregatedTotalOrderIndices() const { return getImplementation()->getAggregatedTotalOrderIndices(); } /** Method that draw (plot) the sensitivity graph */ Graph SobolIndicesAlgorithm::draw() const { return getImplementation()->draw(); } /** Method that draw the sensitivity graph of a fixed marginal */ Graph SobolIndicesAlgorithm::draw(UnsignedInteger marginalIndex) const { return getImplementation()->draw(marginalIndex); } // Getter for bootstrap size UnsignedInteger SobolIndicesAlgorithm::getBootstrapSize() const { return getImplementation()->getBootstrapSize(); } // Setter for bootstrap size void SobolIndicesAlgorithm::setBootstrapSize(const UnsignedInteger bootstrapSize) { copyOnWrite(); getImplementation()->setBootstrapSize(bootstrapSize); } // Getter for bootstrap confidence level Scalar SobolIndicesAlgorithm::getBootstrapConfidenceLevel() const { return getImplementation()->getBootstrapConfidenceLevel(); } // Setter for bootstrap confidence level void SobolIndicesAlgorithm::setBootstrapConfidenceLevel(const Scalar confidenceLevel) { copyOnWrite(); getImplementation()->setBootstrapConfidenceLevel(confidenceLevel); } /* String converter */ String SobolIndicesAlgorithm::__repr__() const { return getImplementation()->__repr__(); } /* String converter */ String SobolIndicesAlgorithm::__str__(const String & offset) const { return getImplementation()->__str__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/SobolIndicesAlgorithmImplementation.cxx000066400000000000000000001026021307543307100334240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for sensitivity algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/TBB.hxx" #include "openturns/Cloud.hxx" #include "openturns/Curve.hxx" #include "openturns/Pie.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SobolIndicesAlgorithmImplementation); static const Factory Factory_SobolIndicesAlgorithmImplementation; /* Default constructor */ SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation() : PersistentObject() , inputDesign_() , outputDesign_() , size_(0) , bootstrapSize_(ResourceMap::GetAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBootstrapSize")) , confidenceLevel_(ResourceMap::GetAsScalar("SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel")) , referenceVariance_() , varianceI_() , varianceTI_() , mergedFirstOrderIndices_() , mergedTotalOrderIndices_() , secondOrderIndices_() , firstOrderIndiceInterval_() , totalOrderIndiceInterval_() { // Nothing to do } /** Constructor with parameters */ SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size) : PersistentObject() , inputDesign_(inputDesign) , outputDesign_(outputDesign) , size_(size) , bootstrapSize_(ResourceMap::GetAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBootstrapSize")) , confidenceLevel_(ResourceMap::GetAsScalar("SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel")) , referenceVariance_() , varianceI_() , varianceTI_() , mergedFirstOrderIndices_() , mergedTotalOrderIndices_() , secondOrderIndices_() , firstOrderIndiceInterval_() , totalOrderIndiceInterval_() { if (outputDesign.getSize() == 0) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation, output design is empty" ; // center Y Point muY(outputDesign_.computeMean()); outputDesign_ -= muY; // Check if desing result is coherant if (inputDesign.getSize() != outputDesign.getSize()) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation, input and output designs have different size. Input design size=" << inputDesign.getSize() << ", wheras output design size=" << outputDesign.getSize(); // Reference sample and its variance Sample outReference(size, outputDesign.getDimension()); for (UnsignedInteger k = 0; k < size; ++k) outReference[k] = outputDesign[k]; referenceVariance_ = outReference.computeVariance(); } /* Virtual constructor */ SobolIndicesAlgorithmImplementation * SobolIndicesAlgorithmImplementation::clone() const { return new SobolIndicesAlgorithmImplementation(*this); } /** Constructor with distribution / model parameters */ SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder) : PersistentObject() , inputDesign_() , outputDesign_() , size_(size) , bootstrapSize_(ResourceMap::GetAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBootstrapSize")) , confidenceLevel_(ResourceMap::GetAsScalar("SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel")) , referenceVariance_() , varianceI_() , varianceTI_() , mergedFirstOrderIndices_() , mergedTotalOrderIndices_() , secondOrderIndices_() , firstOrderIndiceInterval_() , totalOrderIndiceInterval_() { const UnsignedInteger inputDimension = model.getInputDimension(); if (inputDimension != distribution.getDimension()) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation, incompatible dimension between model and distribution. distribution dimension=" << distribution.getDimension() << ", model input dimension = " << inputDimension; inputDesign_ = Generate(distribution, size, computeSecondOrder); outputDesign_ = model(inputDesign_); // center Y Point muY(outputDesign_.computeMean()); outputDesign_ -= muY; size_ = size; // Reference sample and its variance Sample outReference(size, outputDesign_.getDimension()); for (UnsignedInteger k = 0; k < size_; ++k) outReference[k] = outputDesign_[k]; referenceVariance_ = outReference.computeVariance(); } /** Constructor with distribution / model parameters */ SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder) : PersistentObject() , inputDesign_() , outputDesign_() , size_() , bootstrapSize_(ResourceMap::GetAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBootstrapSize")) , confidenceLevel_(ResourceMap::GetAsScalar("SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel")) , referenceVariance_() , varianceI_() , varianceTI_() , mergedFirstOrderIndices_() , mergedTotalOrderIndices_() , secondOrderIndices_() , firstOrderIndiceInterval_() , totalOrderIndiceInterval_() { const UnsignedInteger inputDimension = model.getInputDimension(); if (inputDimension != experiment.getDistribution().getDimension()) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::SobolIndicesAlgorithmImplementation, incompatible dimension between model and distribution. Experiment dimension=" << experiment.getDistribution().getDimension() << ", model input dimension = " << inputDimension; inputDesign_ = Generate(experiment, computeSecondOrder); outputDesign_ = model(inputDesign_); // center Y Point muY(outputDesign_.computeMean()); outputDesign_ -= muY; size_ = experiment.getSize(); // Reference sample and its variance Sample outReference(size_, outputDesign_.getDimension()); for (UnsignedInteger k = 0; k < size_; ++k) outReference[k] = outputDesign_[k]; referenceVariance_ = outReference.computeVariance(); } Sample SobolIndicesAlgorithmImplementation::Generate(const Distribution & distribution, const UnsignedInteger size, const Bool computeSecondOrder) { if (!distribution.hasIndependentCopula()) throw InvalidDimensionException(HERE) << "In SensistivityAlgorithmImplementation::Generate, distribution should have independent copula"; const Sample inputSample1(distribution.getSample(size)); const Sample inputSample2(distribution.getSample(size)); UnsignedInteger dimension = inputSample1.getDimension(); Sample design(inputSample1); design.add(inputSample2); // Compute designs of type Saltelli/Martinez for 1st order for (UnsignedInteger p = 0; p < dimension; ++p) { Sample x(inputSample1); for (UnsignedInteger k = 0; k < size; ++k) x[k][p] = inputSample2[k][p]; design.add(x); } if (computeSecondOrder) { for (UnsignedInteger p = 0; p < dimension; ++p) { Sample x(inputSample2); for (UnsignedInteger k = 0; k < size; ++k) x[k][p] = inputSample1[k][p]; design.add(x); } } // Return collection return design; } Sample SobolIndicesAlgorithmImplementation::Generate(const WeightedExperiment & experiment, const Bool computeSecondOrder) { if (!experiment.getDistribution().hasIndependentCopula()) throw InvalidDimensionException(HERE) << "In SensistivityAlgorithmImplementation::Generate, weighted's distribution should have independent copula"; const UnsignedInteger size = experiment.getSize(); // WeightedExperiment::generate is not const, so we should copy experiment WeightedExperiment weightedExperiment(experiment); const Sample inputSample1(weightedExperiment.generate()); const Sample inputSample2(weightedExperiment.generate()); UnsignedInteger dimension = inputSample1.getDimension(); Sample design(inputSample1); design.add(inputSample2); // Compute designs of type Saltelli/Martinez for 1st order for (UnsignedInteger p = 0; p < dimension; ++p) { Sample x(inputSample1); for (UnsignedInteger k = 0; k < size; ++k) x[k][p] = inputSample2[k][p]; design.add(x); } if (computeSecondOrder) { for (UnsignedInteger p = 0; p < dimension; ++p) { Sample x(inputSample2); for (UnsignedInteger k = 0; k < size; ++k) x[k][p] = inputSample1[k][p]; design.add(x); } } // Return collection return design; } /* First order indices accessor */ Point SobolIndicesAlgorithmImplementation::getFirstOrderIndices(const UnsignedInteger marginalIndex) const { if (0 == varianceI_.getSize()) { // Invoke internal method to compute first/ total order indices indices // This method is defined in specific children classes varianceI_ = computeIndices(outputDesign_, varianceTI_); } const UnsignedInteger outputDimension = outputDesign_.getDimension(); if (marginalIndex >= outputDimension) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::getTotalOrderIndices, marginalIndex should be in [0," << outputDimension - 1; // return value const Point firstOrderSensitivity(varianceI_[marginalIndex] / referenceVariance_[marginalIndex]); for (UnsignedInteger p = 0; p < inputDesign_.getDimension(); ++p) { if ((firstOrderSensitivity[p] > 1.0) || firstOrderSensitivity[p] < 0.0) LOGWARN(OSS() << "The estimated first order Sobol index (" << p << ") is not in the range [0, 1]. You may increase the sampling size. HERE we have: S_" << p << "=" << firstOrderSensitivity << ", ST_" << p << "=" << varianceTI_[marginalIndex][p] / referenceVariance_[marginalIndex]); // Another case : Si > STi if (varianceI_[marginalIndex][p] > varianceTI_[marginalIndex][p]) LOGWARN(OSS() << "The estimated first order Sobol index (" << p << ") is greater than its total order index . You may increase the sampling size. HERE we have: S_" << p << "=" << firstOrderSensitivity << ", ST_" << p << "=" << varianceTI_[marginalIndex][p] / referenceVariance_[marginalIndex]); } return firstOrderSensitivity; } struct BootstrapPolicy { const SobolIndicesAlgorithmImplementation & sai_; const Indices & indices_; const UnsignedInteger size_; Sample & bsFO_; Sample & bsTO_; BootstrapPolicy( const SobolIndicesAlgorithmImplementation & sai, const Indices & indices, const UnsignedInteger size, Sample & bsFO, Sample & bsTO) : sai_(sai) , indices_(indices) , size_(size) , bsFO_(bsFO) , bsTO_(bsTO) {} inline void operator()( const TBB::BlockedRange & r ) const { Indices slice(size_); Sample VTi; Point mergedTotal; for (UnsignedInteger k = r.begin(); k != r.end(); ++k) { // Extract indices memcpy(&slice[0], &indices_[k * size_], size_ * sizeof(UnsignedInteger)); // Generate huge random sample using Bootstrap algorithm const Sample randomCollection(sai_.getBootstrapDesign(slice)); // Pseudo-Reference variance Sample outReference(size_, sai_.outputDesign_.getDimension()); for (UnsignedInteger i = 0; i < size_; ++i) outReference[i] = randomCollection[i]; const Point variance(outReference.computeVariance()); // Compute indices using this collection const Sample Vi(sai_.computeIndices(randomCollection, VTi)); // Compute aggregated indices bsFO_[k] = sai_.computeAggregatedIndices(Vi, VTi, variance, mergedTotal); // Add to sample bsTO_[k] = mergedTotal; } } }; /* end struct BootstrapPolicy */ /** void method that computes confidence interval */ void SobolIndicesAlgorithmImplementation::computeIndicesInterval() const { if (0 != totalOrderIndiceInterval_.getDimension()) return; // Build interval using sample variance // Mean reference is the Sensitivity values const Point aggregatedFirstOrder(getAggregatedFirstOrderIndices()); const Point aggregatedTotalOrder(getAggregatedTotalOrderIndices()); // Compute confidence interval firstOrderIndiceInterval_ = Interval(aggregatedFirstOrder, aggregatedFirstOrder); totalOrderIndiceInterval_ = Interval(aggregatedTotalOrder, aggregatedTotalOrder); if (bootstrapSize_ > 0) { // Temporary samples that stores the first/total indices const UnsignedInteger inputDimension = inputDesign_.getDimension(); Sample bsFO(0, inputDimension); Sample bsTO(0, inputDimension); const UnsignedInteger size = size_; // To have the exact same results with TBB, we have to precompute // RandomGenerator::IntegerGenerate calls and store results in a // variable. This would require lots of memory when bootstrapSize_ is // large, thus let user specify block size. const UnsignedInteger blockSize = std::min(bootstrapSize_, ResourceMap::GetAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBlockSize")); const UnsignedInteger maximumOuterSampling = bootstrapSize_ / blockSize; const UnsignedInteger modulo = bootstrapSize_ % blockSize; const UnsignedInteger lastBlockSize = modulo == 0 ? blockSize : modulo; for(UnsignedInteger outerSampling = 0; outerSampling < maximumOuterSampling; ++outerSampling) { // the last block can be smaller const UnsignedInteger effectiveBlockSize = (outerSampling + 1) < maximumOuterSampling ? blockSize : lastBlockSize; Sample bsFOpartial(effectiveBlockSize, inputDimension); Sample bsTOpartial(effectiveBlockSize, inputDimension); const RandomGenerator::UnsignedIntegerCollection randomIndices(RandomGenerator::IntegerGenerate(size * effectiveBlockSize, size)); const Indices indices(randomIndices.begin(), randomIndices.end()); const BootstrapPolicy policy( *this, indices, size, bsFOpartial, bsTOpartial ); TBB::ParallelFor( 0, effectiveBlockSize, policy ); bsFO.add(bsFOpartial); bsTO.add(bsTOpartial); } // Confidence interval elements // Sample of indices const Scalar lowerQuantileLevel = 0.5 * (1.0 - confidenceLevel_); const Scalar upperQuantileLevel = 0.5 * (1.0 + confidenceLevel_); // Compute empirical quantiles // 1) First order indices const Point lowerQuantileFO(bsFO.computeQuantilePerComponent(lowerQuantileLevel)); const Point upperQuantileFO(bsFO.computeQuantilePerComponent(upperQuantileLevel)); LOGINFO(OSS() << "First Order from Bootstrap sample: lowerQuantile=" << lowerQuantileFO << ", upperQuantile=" << upperQuantileFO ); // 2) Total order indices const Point lowerQuantileTO(bsTO.computeQuantilePerComponent(lowerQuantileLevel)); const Point upperQuantileTO(bsTO.computeQuantilePerComponent(upperQuantileLevel)); LOGINFO(OSS() << "Total Order from Bootstrap sample: lowerQuantile=" << lowerQuantileTO << ", upperQuantile=" << upperQuantileTO ); // First order interval const Point firstOrderLowerBound(aggregatedFirstOrder * 2.0 - upperQuantileFO); const Point firstOrderUpperBound(aggregatedFirstOrder * 2.0 - lowerQuantileFO); // Total order interval const Point totalOrderLowerBound(aggregatedTotalOrder * 2.0 - upperQuantileTO); const Point totalOrderUpperBound(aggregatedTotalOrder * 2.0 - lowerQuantileTO); // Compute confidence interval firstOrderIndiceInterval_ = Interval(firstOrderLowerBound, firstOrderUpperBound); totalOrderIndiceInterval_ = Interval(totalOrderLowerBound, totalOrderUpperBound); LOGINFO(OSS() << "First order interval Bootstrap with Basic method=" ); LOGINFO(OSS() << "Total Order from Bootstrap sample: lowerQuantile=" << lowerQuantileTO << ", upperQuantile=" << upperQuantileTO ); } } /* Interval for the first order indices accessor */ Interval SobolIndicesAlgorithmImplementation::getFirstOrderIndicesInterval() const { // Interval evaluation using Bootstrap computeIndicesInterval(); return firstOrderIndiceInterval_; } /* Second order indices accessor */ SymmetricMatrix SobolIndicesAlgorithmImplementation::getSecondOrderIndices(const UnsignedInteger marginalIndex) const { const UnsignedInteger outputDimension = outputDesign_.getDimension(); if (0 == secondOrderIndices_.getNbSheets()) { const UnsignedInteger inputDimension = inputDesign_.getDimension(); // Check if is possible if (outputDesign_.getSize() < 2 * (inputDesign_.getDimension() + 1) * size_ ) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::getSecondOrderIndices, second order indices designs not computed"; // Compute second order indices secondOrderIndices_ = SymmetricTensor(inputDimension, outputDimension); // Compute cross square mean between samples yA and yB, which are located respectively at index 0 and size_ Point crossSquareMean(computeSumDotSamples(outputDesign_, size_, 0, size_) / size_); // Main loop for (UnsignedInteger k1 = 0; k1 < inputDimension; ++k1) { for (UnsignedInteger k2 = 0; k2 < k1; ++k2) { // Compute yEDotyC //const Point yEDotyC(computeSumDotSamples(yE, yC)); const Point yEDotyC(computeSumDotSamples(outputDesign_, size_, (2 + k1) * size_, (2 + k2 + inputDimension) * size_)); for (UnsignedInteger q = 0; q < outputDimension; ++q) { // Sij = (Vij - crossMean)/var - and S_{i}, S_{j} const Point firstOrderIndices(getFirstOrderIndices(q)); secondOrderIndices_(k1, k2, q) = (yEDotyC[q] / (size_ - 1.0) - crossSquareMean[q]) / referenceVariance_[q] - firstOrderIndices[k1] - firstOrderIndices[k2] ; if ((secondOrderIndices_(k1, k2, q) < 0.0) || (secondOrderIndices_(k1, k2, q) > 1.0)) LOGWARN(OSS() << "The estimated second order Sobol index (" << k1 << ", " << k2 << ") is not in the range [0, 1]. You may increase the sampling size."); } } } } if (marginalIndex >= outputDimension) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::getSecondOrderIndices, marginalIndex should be in [0," << outputDimension - 1 << "]"; return secondOrderIndices_.getSheet(marginalIndex); } /* Total order indices accessor */ Point SobolIndicesAlgorithmImplementation::getTotalOrderIndices(const UnsignedInteger marginalIndex) const { if (0 == varianceI_.getSize()) { // Invoke internal method to compute first/ total order indices indices // This method is defined in specific children classes varianceI_ = computeIndices(outputDesign_, varianceTI_); } const UnsignedInteger outputDimension = outputDesign_.getDimension(); const UnsignedInteger inputDimension = inputDesign_.getDimension(); if (marginalIndex >= outputDimension) throw InvalidArgumentException(HERE) << "In SobolIndicesAlgorithmImplementation::getTotalOrderIndices, marginalIndex should be in [0," << outputDimension - 1; for (UnsignedInteger p = 0; p < inputDimension; ++p) { // Another case : Si > STi if (varianceI_[marginalIndex][p] > varianceTI_[marginalIndex][p]) LOGWARN(OSS() << "The estimated total order Sobol index (" << p << ") is lesser than first order index . You may increase the sampling size. HERE we have: S_" << p << "=" << varianceI_[marginalIndex][p] / referenceVariance_[marginalIndex] << ", ST_" << p << "=" << varianceTI_[marginalIndex][p] / referenceVariance_[marginalIndex]); } // return value return varianceTI_[marginalIndex] / referenceVariance_[marginalIndex] ; } /* Interval for the total order indices accessor */ Interval SobolIndicesAlgorithmImplementation::getTotalOrderIndicesInterval() const { // Interval evaluation using Bootstrap computeIndicesInterval(); return totalOrderIndiceInterval_; } /* Aggregated first order indices accessor for multivariate samples */ Point SobolIndicesAlgorithmImplementation::getAggregatedFirstOrderIndices() const { if (0 == varianceI_.getSize()) { // Invoke internal method to compute first/ total order indices indices varianceI_ = computeIndices(outputDesign_, varianceTI_); } if (0 == mergedFirstOrderIndices_.getDimension()) { // Compute aggregate indices mergedFirstOrderIndices_ = computeAggregatedIndices(varianceI_, varianceTI_, referenceVariance_, mergedTotalOrderIndices_); } // Indices computed return mergedFirstOrderIndices_; } /* Aggregated total order indices accessor for multivariate samples */ Point SobolIndicesAlgorithmImplementation::getAggregatedTotalOrderIndices() const { if (0 == varianceI_.getSize()) { // Invoke internal method to compute first/ total order indices indices varianceI_ = computeIndices(outputDesign_, varianceTI_); } if (0 == mergedFirstOrderIndices_.getDimension()) { // Compute aggregate indices mergedFirstOrderIndices_ = computeAggregatedIndices(varianceI_, varianceTI_, referenceVariance_, mergedTotalOrderIndices_); } // Indices computed return mergedTotalOrderIndices_; } // Getter for bootstrap size UnsignedInteger SobolIndicesAlgorithmImplementation::getBootstrapSize() const { return bootstrapSize_; } // Setter for bootstrap size void SobolIndicesAlgorithmImplementation::setBootstrapSize(const UnsignedInteger bootstrapSize) { if (bootstrapSize <= 0.0) throw InvalidArgumentException(HERE) << "Bootstrap sampling size should be positive. Here, bootstrapSize=" << bootstrapSize; bootstrapSize_ = bootstrapSize; firstOrderIndiceInterval_ = Interval(); totalOrderIndiceInterval_ = Interval(); } // Getter for bootstrap confidence level Scalar SobolIndicesAlgorithmImplementation::getBootstrapConfidenceLevel() const { return confidenceLevel_; } // Setter for bootstrap confidence level void SobolIndicesAlgorithmImplementation::setBootstrapConfidenceLevel(const Scalar confidenceLevel) { if ((confidenceLevel < 0.0) || (confidenceLevel >= 1.0)) throw InvalidArgumentException(HERE) << "Confidence level value should be in ]0,1[. Here, confidence level=" << confidenceLevel; confidenceLevel_ = confidenceLevel; firstOrderIndiceInterval_ = Interval(); totalOrderIndiceInterval_ = Interval(); } /* String converter */ String SobolIndicesAlgorithmImplementation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName(); return oss; } // Multiplication and sum of two Samples // TODO Write method in Sample ? Point SobolIndicesAlgorithmImplementation::computeSumDotSamples(const Sample & x, const Sample & y) const { // Internal method // Suppose that samples have the same size, same dimension const UnsignedInteger dimension = x.getDimension(); const UnsignedInteger size = x.getSize(); const Scalar * xptr(&x[0][0]); const Scalar * yptr(&y[0][0]); Point value(dimension, 0.0); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j, ++xptr, ++yptr) value[j] += (*xptr) * (*yptr); return value; } // Multiplication and sum of two Samples, contained in the sampe sample Point SobolIndicesAlgorithmImplementation::computeSumDotSamples(const Sample & sample, const UnsignedInteger size, const UnsignedInteger indexX, const UnsignedInteger indexY) const { // Internal method // Suppose that samples have the same size, same dimension const UnsignedInteger dimension = sample.getDimension(); const Scalar * xptr(&sample[indexX][0]); const Scalar * yptr(&sample[indexY][0]); Point value(dimension, 0.0); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j, ++xptr, ++yptr) value[j] += (*xptr) * (*yptr); return value; } /* String converter */ String SobolIndicesAlgorithmImplementation::__str__(const String & offset) const { return __repr__(); } /** Internal method that compute Vi/VTi using a collection of samples */ Sample SobolIndicesAlgorithmImplementation::computeIndices(const Sample & design, Sample & VTi) const { // Method is defined in Jansan/Saltelli/Martinez/Mauntz classes throw new NotYetImplementedException(HERE); } /** Method that draw (plot) the sensitivity graph */ Graph SobolIndicesAlgorithmImplementation::draw() const { Graph graph(OSS() << " Aggregated sensitivity indices - " << getClassName(), "inputs", "Sensitivity indices ", true, ""); // Define cloud for first order and total order indices const Point aggregatedFO(getAggregatedFirstOrderIndices()); const Point aggregatedTO(getAggregatedTotalOrderIndices()); Sample data(aggregatedFO.getDimension(), 2); for (UnsignedInteger k = 0; k < aggregatedFO.getDimension(); ++k) { data[k][0] = k + 1; data[k][1] = aggregatedFO[k]; } // Define cloud for FO Cloud firstOrderIndicesGraph(data, "red", "circle", "Aggregated FO"); graph.add(firstOrderIndicesGraph); // Total order for (UnsignedInteger k = 0; k < aggregatedFO.getDimension(); ++k) { data[k][0] = (k + 1) + 0.1; data[k][1] = aggregatedTO[k]; } // Define cloud for TO Cloud totalOrderIndicesGraph(data, "blue", "square", "Aggregated TO"); graph.add(totalOrderIndicesGraph); // Set bounding box Point boundingBox(4, -0.1); boundingBox[1] = aggregatedFO.getDimension() + 1; boundingBox[3] = 1.1 ; if (bootstrapSize_ > 0 && confidenceLevel_ > 0.0) { // Add plot of intervals const Interval foInterval(getFirstOrderIndicesInterval()); const Interval toInterval(getTotalOrderIndicesInterval()); // transform data data = Sample(2, 2); for (UnsignedInteger k = 0; k < aggregatedFO.getDimension(); ++k) { // Relative to FirstOrder data[0][0] = (k + 1); data[0][1] = foInterval.getLowerBound()[k]; data[1][0] = (k + 1); data[1][1] = foInterval.getUpperBound()[k]; graph.add(Curve(data, "red", "solid", 2, "")); // Relative to TotalOrder data[0][0] = (k + 1) + 0.1; data[0][1] = toInterval.getLowerBound()[k]; data[1][0] = (k + 1) + 0.1; data[1][1] = toInterval.getUpperBound()[k]; graph.add(Curve(data, "blue", "solid", 2, "")); } } graph.setBoundingBox(boundingBox); graph.setLegendPosition("topright"); return graph; } /** Method that draw the sensitivity graph of a fixed marginal */ Graph SobolIndicesAlgorithmImplementation::draw(UnsignedInteger marginalIndex) const { Graph graph(OSS() << " Sensitivity indices - " << getClassName(), "inputs", "Sensitivity indices ", true, ""); // Define cloud for first order and total order indices const Point foIndices(getFirstOrderIndices(marginalIndex)); const Point toIndices(getTotalOrderIndices(marginalIndex)); Sample data(foIndices.getDimension(), 2); for (UnsignedInteger k = 0; k < foIndices.getDimension(); ++k) { data[k][0] = k + 1; data[k][1] = foIndices[k]; } // Define cloud for FO Cloud firstOrderIndicesGraph(data, "red", "circle", "Aggregated FO"); graph.add(firstOrderIndicesGraph); // Total order for (UnsignedInteger k = 0; k < foIndices.getDimension(); ++k) { data[k][0] = (k + 1) + 0.1; data[k][1] = toIndices[k]; } // Define cloud for TO Cloud totalOrderIndicesGraph(data, "blue", "square", "Aggregated TO"); graph.add(totalOrderIndicesGraph); // Set bounding box Point boundingBox(4, -0.1); boundingBox[1] = foIndices.getDimension() + 1; boundingBox[3] = 1.1 ; graph.setBoundingBox(boundingBox); graph.setLegendPosition("topright"); return graph; } /** Internal method that returns a bootstrap NSC */ Sample SobolIndicesAlgorithmImplementation::getBootstrapDesign(const Indices & indices) const { // Bootstrap with huge sample that contains several samples const UnsignedInteger inputDimension = inputDesign_.getDimension(); const UnsignedInteger outputDimension = outputDesign_.getDimension(); Sample bootstrapDesign(0, outputDimension); for (UnsignedInteger p = 0; p < 2 + inputDimension; ++p) { Sample y(size_, outputDimension); Scalar* yPermData = &y[0][0]; const Scalar* yData = &outputDesign_[p * size_][0]; for (UnsignedInteger k = 0; k < size_; ++k, yPermData += outputDimension) memcpy(yPermData, &yData[indices[k] * outputDimension], outputDimension * sizeof(Scalar)); // add samples to the collection bootstrapDesign.add(y); } return bootstrapDesign; } /** Function that computes merged indices using Vi/VTi + variance */ Point SobolIndicesAlgorithmImplementation::computeAggregatedIndices(const Sample & Vi, const Sample & VTi, const Point & variance, Point & mergedTotal) const { // Generic implementation const UnsignedInteger inputDimension = Vi.getDimension(); const UnsignedInteger outputDimension = Vi.getSize(); if (inputDimension == 1) { mergedTotal = Point(VTi[0]); return Point(Vi[0]); } // Compute sum of Var(Y^k) Scalar sumVariance = variance.norm1(); // Compute merged indices mergedTotal = VTi.computeMean() * (outputDimension / sumVariance); return Point(Vi.computeMean() * (outputDimension / sumVariance)); } /* ImportanceFactors graph */ Graph SobolIndicesAlgorithmImplementation::DrawImportanceFactors(const PointWithDescription & importanceFactors, const String & title) { return DrawImportanceFactors(importanceFactors, importanceFactors.getDescription(), title); } /* ImportanceFactors graph */ Graph SobolIndicesAlgorithmImplementation::DrawImportanceFactors(const Point & values, const Description & names, const String & title) { /* build data for the pie */ const UnsignedInteger dimension = values.getDimension(); if (dimension == 0) throw InvalidArgumentException(HERE) << "Error: cannot draw an importance factors pie based on empty data."; if ((names.getSize() != 0) && (names.getSize() != dimension)) throw InvalidArgumentException(HERE) << "Error: the names size must match the value dimension."; Scalar l1Norm = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) l1Norm += std::abs(values[i]); if (l1Norm == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot draw an importance factors pie based on null data."; Point data(dimension); /* Normalization */ for (UnsignedInteger i = 0; i < dimension; ++i) data[i] = values[i] / l1Norm; /* we build the pie */ Pie importanceFactorsPie(data); /* build labels and colors for the pie */ Description palette(dimension); Description labels(dimension); Description description(names); // If no description has been given for the input distribution components, give standard ones if (description.getSize() != dimension) { description = Description(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) description[i] = String(OSS() << "Component " << i); } for (UnsignedInteger i = 0; i < dimension; ++i) { OSS oss(false); oss << description[i] << " : " << std::fixed; oss.setPrecision(1); oss << 100.0 * data[i] << "%"; labels[i] = oss; } /* we complete the pie */ importanceFactorsPie.setLabels(labels); importanceFactorsPie.buildDefaultPalette(); /* we build the graph with a title */ Graph importanceFactorsGraph(title); /* we embed the pie into the graph */ importanceFactorsGraph.add(importanceFactorsPie); return importanceFactorsGraph; } /* Method save() stores the object through the StorageManager */ void SobolIndicesAlgorithmImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "inputDesign_", inputDesign_ ); adv.saveAttribute( "outputDesign_", outputDesign_ ); adv.saveAttribute( "size_", size_ ); adv.saveAttribute( "bootstrapSize_", bootstrapSize_ ); adv.saveAttribute( "confidenceLevel_", confidenceLevel_ ); adv.saveAttribute( "referenceVariance_", referenceVariance_); adv.saveAttribute( "varianceI_", varianceI_); adv.saveAttribute( "varianceTI_", varianceTI_); adv.saveAttribute( "mergedFirstOrderIndices_", mergedFirstOrderIndices_); adv.saveAttribute( "mergedTotalOrderIndices_", mergedTotalOrderIndices_); adv.saveAttribute( "secondOrderIndices_", secondOrderIndices_); adv.saveAttribute( "firstOrderIndiceInterval_", firstOrderIndiceInterval_); adv.saveAttribute( "totalOrderIndiceInterval_", totalOrderIndiceInterval_); } /* Method load() reloads the object from the StorageManager */ void SobolIndicesAlgorithmImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "inputDesign_", inputDesign_ ); adv.loadAttribute( "outputDesign_", outputDesign_ ); adv.loadAttribute( "size_", size_ ); adv.loadAttribute( "bootstrapSize_", bootstrapSize_ ); adv.loadAttribute( "confidenceLevel_", confidenceLevel_ ); adv.loadAttribute( "referenceVariance_", referenceVariance_); adv.loadAttribute( "varianceI_", varianceI_); adv.loadAttribute( "varianceTI_", varianceTI_); adv.loadAttribute( "mergedFirstOrderIndices_", mergedFirstOrderIndices_); adv.loadAttribute( "mergedTotalOrderIndices_", mergedTotalOrderIndices_); adv.loadAttribute( "secondOrderIndices_", secondOrderIndices_); adv.loadAttribute( "firstOrderIndiceInterval_", firstOrderIndiceInterval_); adv.loadAttribute( "totalOrderIndiceInterval_", totalOrderIndiceInterval_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/000077500000000000000000000000001307543307100256025ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/ANCOVA.hxx000066400000000000000000000042501307543307100273030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ANCOVA implements the sensivity analysis method for correlated data * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ANCOVA_HXX #define OPENTURNS_ANCOVA_HXX #include "openturns/OTprivate.hxx" #include "openturns/FunctionalChaosResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ANCOVA * */ class OT_API ANCOVA { public: /** Some typedefs to ease reading */ typedef Collection FunctionCollection; /** Constructor with model */ ANCOVA(const FunctionalChaosResult & functionalChaosResult, const Sample & correlatedInput); /** Accessor to ANCOVA indices measuring uncorrelated effects */ Point getUncorrelatedIndices(const UnsignedInteger marginalIndex = 0) const; /** Accessor to ANCOVA indices: total parts of variance of the output due to each input */ Point getIndices(const UnsignedInteger marginalIndex = 0) const; private: /** Compute the indices */ void run() const; /** Functional chaos result */ FunctionalChaosResult functionalChaosResult_; /** correlated Input */ Sample correlatedInput_; /** Flag to check if the indices are already computed*/ mutable Bool alreadyComputedIndices_; /** ANCOVA indices measuring uncorrelated effects */ mutable Sample uncorrelatedIndices_; /** ANCOVA indices: total parts of variance of the output due to each input */ mutable Sample indices_; }; /* class ANCOVA */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ANCOVA_HXX */openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/FAST.hxx000066400000000000000000000052741307543307100271000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief FAST implements the sensivity analysis method based on fourier decomposition * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FAST_HXX #define OPENTURNS_FAST_HXX #include "openturns/OTprivate.hxx" #include "openturns/Distribution.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/FFT.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FAST * */ class OT_API FAST { public: typedef Collection ComplexCollection; /** Constructor with model */ FAST(const Function & model, const Distribution & inputsDistribution, const UnsignedInteger samplingSize, const UnsignedInteger resamplingSize = ResourceMap::GetAsUnsignedInteger("FAST-DefaultResamplingSize"), const UnsignedInteger interferenceFactor = ResourceMap::GetAsUnsignedInteger("FAST-DefaultInterferenceFactor")); /** First order indices accessor */ Point getFirstOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Total order indices accessor */ Point getTotalOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** FFT algorithm accessor */ FFT getFFTAlgorithm() const; void setFFTAlgorithm(const FFT & fft); /** Block size accessor */ void setBlockSize(const UnsignedInteger blockSize); UnsignedInteger getBlockSize() const; private: /** Compute all the FAST indices */ void run() const; /** The model */ Function model_; /** Inputs distribution */ Distribution inputsDistribution_; /** Parameters of FAST method */ UnsignedInteger samplingSize_; UnsignedInteger blockSize_; UnsignedInteger resamplingSize_; UnsignedInteger interferenceFactor_; /** First order indices */ mutable Sample firstOrderIndice_; /** Total order indices */ mutable Sample totalOrderIndice_; /** Store if indices are already computed */ mutable Bool alreadyComputedIndices_; /** FFT algorithm */ FFT fftAlgorithm_; }; /* class FAST */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FAST_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/JansenSensitivityAlgorithm.hxx000066400000000000000000000046671307543307100337100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for sensitivity algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_JANSENSENSITIVITYALGORITHM_HXX #define OPENTURNS_JANSENSENSITIVITYALGORITHM_HXX #include "openturns/Point.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class JansenSensitivityAlgorithm * */ class OT_API JansenSensitivityAlgorithm : public SobolIndicesAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ JansenSensitivityAlgorithm(); /** Constructor with parameters */ JansenSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with distribution / model parameters */ JansenSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ JansenSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** Virtual constructor */ virtual JansenSensitivityAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; protected: /** Internal method that compute Vi/VTi using a huge sample */ Sample computeIndices(const Sample & sample, Sample & VTi) const; }; /* class JansenSensitivityAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_JANSENSENSITIVITYALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/MartinezSensitivityAlgorithm.hxx000066400000000000000000000060241307543307100342500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for sensitivity algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MARTINEZSENSITIVITYALGORITHM_HXX #define OPENTURNS_MARTINEZSENSITIVITYALGORITHM_HXX #include "openturns/Point.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MartinezSensitivityAlgorithm * */ class OT_API MartinezSensitivityAlgorithm : public SobolIndicesAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ MartinezSensitivityAlgorithm(); /** Constructor with parameters */ MartinezSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with distribution / model parameters */ MartinezSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ MartinezSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** Virtual constructor */ virtual MartinezSensitivityAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Interval for the first order indices accessor */ virtual Interval getFirstOrderIndicesInterval() const; /** Interval for the total order indices accessor */ virtual Interval getTotalOrderIndicesInterval() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Internal method that compute Vi/VTi using a huge sample */ Sample computeIndices(const Sample & sample, Sample & VTi) const; // Compute the fisher transform void computeAsymptoticInterval() const; private: mutable Bool useAsymptoticInterval_; }; /* class MartinezSensitivityAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MARTINEZSENSITIVITYALGORITHM_HXX */ MauntzKucherenkoSensitivityAlgorithm.hxx000066400000000000000000000054451307543307100357030ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns// -*- C++ -*- /** * @brief Implementation for sensitivity algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MAUNTZKUCHERENKOSENSITIVITYALGORITHM_HXX #define OPENTURNS_MAUNTZKUCHERENKOSENSITIVITYALGORITHM_HXX #include "openturns/SobolIndicesAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MauntzKucherenkoSensitivityAlgorithm * */ class OT_API MauntzKucherenkoSensitivityAlgorithm : public SobolIndicesAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ MauntzKucherenkoSensitivityAlgorithm(); /** Constructor with parameters */ MauntzKucherenkoSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with distribution / model parameters */ MauntzKucherenkoSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ MauntzKucherenkoSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** Virtual constructor */ virtual MauntzKucherenkoSensitivityAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Internal method that compute Vi/VTi using a huge sample */ Sample computeIndices(const Sample & sample, Sample & VTi) const; }; /* class MauntzKucherenkoSensitivityAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MAUNTZKUCHERENKOSENSITIVITYALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/OTSensitivity.hxx000066400000000000000000000025401307543307100311310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Sensitivity * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSENSITIVITY_HXX #define OPENTURNS_OTSENSITIVITY_HXX #include "openturns/ANCOVA.hxx" #include "openturns/FAST.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/SobolIndicesAlgorithm.hxx" #include "openturns/SaltelliSensitivityAlgorithm.hxx" #include "openturns/MauntzKucherenkoSensitivityAlgorithm.hxx" #include "openturns/MartinezSensitivityAlgorithm.hxx" #include "openturns/JansenSensitivityAlgorithm.hxx" #endif /* OPENTURNS_OTSENSITIVITY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/SaltelliSensitivityAlgorithm.hxx000066400000000000000000000052631307543307100342340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation for sensitivity algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SALTELLISENSITIVITYALGORITHM_HXX #define OPENTURNS_SALTELLISENSITIVITYALGORITHM_HXX #include "openturns/Point.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SaltelliSensitivityAlgorithm * */ class OT_API SaltelliSensitivityAlgorithm : public SobolIndicesAlgorithmImplementation { CLASSNAME; public: /** Default constructor */ SaltelliSensitivityAlgorithm(); /** Constructor with parameters */ SaltelliSensitivityAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with distribution / model parameters */ SaltelliSensitivityAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ SaltelliSensitivityAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** Virtual constructor */ virtual SaltelliSensitivityAlgorithm * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Internal method that compute Vi/VTi using a huge sample */ Sample computeIndices(const Sample & sample, Sample & VTi) const; }; /* class SaltelliSensitivityAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SALTELLISENSITIVITYALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns/SobolIndicesAlgorithm.hxx000066400000000000000000000100061307543307100325540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SobolIndicesAlgorithm provides capabilities for sensitivity algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOBOLINDICESALGORITHM_HXX #define OPENTURNS_SOBOLINDICESALGORITHM_HXX #include "openturns/OTprivate.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/Interval.hxx" #include "openturns/SymmetricMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SobolIndicesAlgorithm * This class provides capabilities for sensitivity algorithm */ class OT_API SobolIndicesAlgorithm : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SobolIndicesAlgorithm(); /** Constructor from an implementation */ SobolIndicesAlgorithm(const SobolIndicesAlgorithmImplementation & implementation); /** Constructor from a Pointer to an implementation */ SobolIndicesAlgorithm(const Implementation & p_implementation); /** Constructor with parameters */ SobolIndicesAlgorithm(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with parameters */ SobolIndicesAlgorithm(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ SobolIndicesAlgorithm(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** First order indices accessor */ Point getFirstOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Interval for the first order indices accessor */ Interval getFirstOrderIndicesInterval() const; /** Second order indices accessor */ SymmetricMatrix getSecondOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Total order indices accessor */ Point getTotalOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Interval for the total order indices accessor */ Interval getTotalOrderIndicesInterval() const; /** Aggregated first order indices accessor for multivariate samples */ Point getAggregatedFirstOrderIndices() const; /** Aggregated total order indices accessor for multivariate samples */ Point getAggregatedTotalOrderIndices() const; // Setters for bootstrap size UnsignedInteger getBootstrapSize() const; void setBootstrapSize(const UnsignedInteger bootstrapSize); // Setters for bootstrap confidence level Scalar getBootstrapConfidenceLevel() const; void setBootstrapConfidenceLevel(const Scalar confidenceLevel); /** Method that draw (plot) the sensitivity graph */ virtual Graph draw() const; /** Method that draw the sensitivity graph of a fixed marginal */ virtual Graph draw(UnsignedInteger marginalIndex) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; } ; /* class SobolIndicesAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOBOLINDICESALGORITHM_HXX */ SobolIndicesAlgorithmImplementation.hxx000066400000000000000000000160561307543307100354160ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Sensitivity/openturns// -*- C++ -*- /** * @brief Implementation for sobol indices algorithms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SOBOLINDICESALGORITHMIMPLEMENTATION_HXX #define OPENTURNS_SOBOLINDICESALGORITHMIMPLEMENTATION_HXX #include "openturns/Distribution.hxx" #include "openturns/Indices.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/WeightedExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SobolIndicesAlgorithmImplementation * */ class OT_API SobolIndicesAlgorithmImplementation : public PersistentObject { CLASSNAME; friend struct BootstrapPolicy; public: /** Default constructor */ SobolIndicesAlgorithmImplementation(); /** Constructor with parameters */ SobolIndicesAlgorithmImplementation(const Sample & inputDesign, const Sample & outputDesign, const UnsignedInteger size); /** Constructor with distribution / model parameters */ SobolIndicesAlgorithmImplementation(const Distribution & distribution, const UnsignedInteger size, const Function & model, const Bool computeSecondOrder = true); /** Constructor with experiment / model parameters */ SobolIndicesAlgorithmImplementation(const WeightedExperiment & experiment, const Function & model, const Bool computeSecondOrder = true); /** Virtual constructor */ virtual SobolIndicesAlgorithmImplementation * clone() const; /** First order indices accessor */ virtual Point getFirstOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Interval for the first order indices accessor */ virtual Interval getFirstOrderIndicesInterval() const; /** Second order indices accessor */ virtual SymmetricMatrix getSecondOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Total order indices accessor */ virtual Point getTotalOrderIndices(const UnsignedInteger marginalIndex = 0) const; /** Interval for the total order indices accessor */ virtual Interval getTotalOrderIndicesInterval() const; /** Aggregated first order indices accessor for multivariate samples */ Point getAggregatedFirstOrderIndices() const; /** Aggregated total order indices accessor for multivariate samples */ Point getAggregatedTotalOrderIndices() const; // Setters for bootstrap size UnsignedInteger getBootstrapSize() const; void setBootstrapSize(const UnsignedInteger bootstrapSize); // Setters for bootstrap confidence level Scalar getBootstrapConfidenceLevel() const; void setBootstrapConfidenceLevel(const Scalar confidenceLevel); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); static Sample Generate(const Distribution & distribution, const UnsignedInteger size, const Bool computeSecondOrder = true); static Sample Generate(const WeightedExperiment & experiment, const Bool computeSecondOrder = true); static Graph DrawImportanceFactors(const PointWithDescription & importanceFactors, const String & title); static Graph DrawImportanceFactors(const Point & values, const Description & names, const String & title); /** Method that draw (plot) the sensitivity graph */ virtual Graph draw() const; /** Method that draw the sensitivity graph of a fixed marginal */ virtual Graph draw(UnsignedInteger marginalIndex) const; protected: /** Internal method that compute Vi/VTi using a collection of samples */ virtual Sample computeIndices(const Sample & design, Sample & VTi) const; /** Internal method that returns a boostrap NS collection of size inputDimension + 2 */ Sample getBootstrapDesign(const Indices & indices) const; /** Function that computes merged indices using Vi/VTi + variance */ Point computeAggregatedIndices(const Sample & Vi, const Sample & VTi, const Point & variance, Point & mergedTotal) const; /** void method that computes confidence interval */ void computeIndicesInterval() const; /** Multiplication and sum of two Samples */ Point computeSumDotSamples(const Sample & x, const Sample & y) const; /** Multiplication and sum of two (sub)samples that are in the same Samples */ Point computeSumDotSamples(const Sample & sample, const UnsignedInteger size, const UnsignedInteger indexX, const UnsignedInteger indexY) const; /** Designs : input & output designs */ Sample inputDesign_; /** Designs : input & output designs */ Sample outputDesign_; /** Simulation size */ UnsignedInteger size_; /** Number of Bootstrap sampling size */ UnsignedInteger bootstrapSize_; /** Confidence level for Bootstrap */ Scalar confidenceLevel_; /** Variance of the reference output sample */ Point referenceVariance_; /** Variance conditionnaly to the i-th variable => Si = Vi/Var*/ mutable Sample varianceI_; /** Variance totale of the i-th variable => STi = VTi/Var */ mutable Sample varianceTI_; /** Aggregated first order indices */ mutable Point mergedFirstOrderIndices_; /** Aggregated total order indices */ mutable Point mergedTotalOrderIndices_; /** Second order indices */ mutable SymmetricTensor secondOrderIndices_; /** Confidence interval for first order indices (merged indices) */ mutable Interval firstOrderIndiceInterval_; /** Confidence interval for total order indices (merged indices) */ mutable Interval totalOrderIndiceInterval_; }; /* class SobolIndicesAlgorithmImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SOBOLINDICESALGORITHMIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/000077500000000000000000000000001307543307100233375ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/AdaptiveDirectionalSampling.cxx000066400000000000000000000235761307543307100315060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ADS simulation algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AdaptiveDirectionalSampling.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/QuadrantSampling.hxx" #include "openturns/DirectionalSampling.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AdaptiveDirectionalSampling); /* Default constructor */ AdaptiveDirectionalSampling::AdaptiveDirectionalSampling() : Simulation() , partialStratification_(false) , maximumStratificationDimension_(ResourceMap::GetAsScalar("AdaptiveDirectionalSampling-DefaultMaximumStratificationDimension")) { // Nothing to do } /* Constructor with parameters */ AdaptiveDirectionalSampling::AdaptiveDirectionalSampling(const Event & event, const RootStrategy & rootStrategy, const SamplingStrategy & samplingStrategy) : Simulation(event) , standardEvent_(StandardEvent(event)) , rootStrategy_(rootStrategy) , samplingStrategy_(samplingStrategy) , gamma_(ResourceMap::GetAsUnsignedInteger("AdaptiveDirectionalSampling-DefaultNumberOfSteps"), ResourceMap::GetAsScalar("AdaptiveDirectionalSampling-DefaultGamma")) , partialStratification_(false) , maximumStratificationDimension_(ResourceMap::GetAsUnsignedInteger("AdaptiveDirectionalSampling-DefaultMaximumStratificationDimension")) { samplingStrategy_.setDimension(getEvent().getImplementation()->getAntecedent()->getDimension()); } /* Virtual constructor */ AdaptiveDirectionalSampling * AdaptiveDirectionalSampling::clone() const { return new AdaptiveDirectionalSampling(*this); } void AdaptiveDirectionalSampling::run() { // First, reset the convergence history convergenceStrategy_.clear(); // input dimension const UnsignedInteger dimension = standardEvent_.getImplementation()->getFunction().getInputDimension(); // current stratification dimension UnsignedInteger d = dimension; // stratified dimensions Indices strataIndices(d); strataIndices.fill(); // current number of subdivisions: 2^d UnsignedInteger m = (1 << d); // number of steps const UnsignedInteger L = gamma_.getDimension(); // initial uniform allocation Point w(m, 1.0 / m); // maximum directions budget const UnsignedInteger n0 = getMaximumOuterSampling(); const UnsignedInteger blockSize = 1; // effective number of directions UnsignedInteger n = 0; // for each step for (UnsignedInteger l = 0; l < L; ++ l) { const Point w0(m, 1.0 / m); Scalar probabilityEstimate = 0.0; Scalar w0SigmaSum = 0.0; Point sigma(m, 0.0); Sample T0(d, m); Sample T1(d, m); // for each subdivision for (UnsignedInteger i = 0; i < m; ++ i) { // budget for this subdivision const UnsignedInteger ni = static_cast(gamma_[l] * n0 * w[i]); // (28) n += ni; QuadrantSampling quadrantSampling (samplingStrategy_, i); quadrantSampling.setQuadrantOrientation(quadrantOrientation_); quadrantSampling.setStrataIndices(strataIndices); DirectionalSampling directionalSampling (getEvent(), rootStrategy_, quadrantSampling); directionalSampling.setMaximumOuterSampling (ni); directionalSampling.setBlockSize (blockSize); directionalSampling.run(); const SimulationResult result(directionalSampling.getResult()); const Scalar pf = result.getProbabilityEstimate(); if (pf > 0.0) { probabilityEstimate += w0[i] * pf; sigma[i] = result.getStandardDeviation(); w0SigmaSum += w0[i] * sigma[i]; for (UnsignedInteger k = 0; k < d; ++ k) { if ((1 << k) & i) T0[k][i] = pf; else T1[k][i] = pf; } } // if pf > 0 Log::Debug(OSS() << "AdaptiveDirectionalSampling::run n=" << n << " i=" << i << " ni=" << ni << " pf=" << pf << " sigma=" << sigma[i]); } // for i const Scalar varianceEstimate = w0SigmaSum * w0SigmaSum / (gamma_[l] * n); // (33) // update result setResult(SimulationResult(getEvent(), probabilityEstimate, varianceEstimate, n, blockSize)); // update weights for (UnsignedInteger i = 0; i < m; ++ i) { w[i] = (w0SigmaSum > 0.0) ? w0[i] * sigma[i] / w0SigmaSum : 0.0; // (29) } if ((l == 0) && partialStratification_) { T_ = Point(dimension); for (UnsignedInteger k = 0; k < dimension; ++ k) { for (UnsignedInteger i = 0; i < m; ++ i) if ((1 << k) & i) T_[k] += std::abs(T0[k][i] - T1[k][i]); Log::Debug(OSS() << "AdaptiveDirectionalSampling::run T[" << k << "]=" << T_[k]); } // sort variables according to T statistic Indices order(dimension); order.fill(); for (SignedInteger i = dimension - 1; i >= 0; -- i) for (SignedInteger j = 0; j < i; ++ j) if (T_[order[j]] < T_[order[j + 1]]) { const UnsignedInteger swap = order[j]; order[j] = order[j + 1]; order[j + 1] = swap; } for (UnsignedInteger k = 0; k < dimension; ++ k) Log::Debug(OSS() << "AdaptiveDirectionalSampling::run #" << k << " T[" << order[k] << "]=" << T_[order[k]]); // retrieve the p' variables contributing the most strataIndices = Indices(); for (UnsignedInteger k = 0; k < dimension; ++ k) { if (k < maximumStratificationDimension_) strataIndices.add(order[k]); } // new stratification dimension d' < d const UnsignedInteger d2 = strataIndices.getSize(); const UnsignedInteger m2 = 1 << d2; // compute new weights using existing simulations Point w2(m2, 0.0); for (UnsignedInteger i2 = 0; i2 < m2; ++ i2) { for (UnsignedInteger i = 0; i < m; ++ i) { UnsignedInteger sum = 0; for (UnsignedInteger k = 0; k < d2; ++ k) { const UnsignedInteger bit = 1 << strataIndices[k]; if (bit & i) sum += 1 << k; } if (sum == i2) { w2[i2] += w[i]; } } } // update some parameters m = m2; w = w2; d = d2; } // if partialStratification_ } // for L } /* Root strategy accessor */ void AdaptiveDirectionalSampling::setRootStrategy(const RootStrategy & rootStrategy) { rootStrategy_ = rootStrategy; } RootStrategy AdaptiveDirectionalSampling::getRootStrategy() const { return rootStrategy_; } /* Sampling strategy */ void AdaptiveDirectionalSampling::setSamplingStrategy(const SamplingStrategy & samplingStrategy) { const UnsignedInteger dimension = getEvent().getImplementation()->getAntecedent()->getDistribution().getDimension(); if (samplingStrategy.getDimension() != dimension) throw InvalidDimensionException(HERE) << "Error: the sampling strategy dimension (" << samplingStrategy.getDimension() << ") is not compatible with the antecedent dimension (" << dimension << ")"; samplingStrategy_ = samplingStrategy; } SamplingStrategy AdaptiveDirectionalSampling::getSamplingStrategy() const { return samplingStrategy_; } void AdaptiveDirectionalSampling::setGamma(const Point& gamma) { const UnsignedInteger dimension = gamma.getDimension(); if (dimension > 2) throw InvalidDimensionException(HERE) << "gamma dimension is " << dimension; Scalar sum = 0.0; for (UnsignedInteger i = 0; i < dimension; ++ i) { if (!(gamma[i] > 0.0)) throw InvalidArgumentException(HERE) << "gamma values should be positive"; sum += gamma[i]; } if (std::abs(sum - 1.0) > 1e-6) throw InvalidArgumentException(HERE) << "gamma components do not sum to 1"; gamma_ = gamma; } Point AdaptiveDirectionalSampling::getGamma() const { return gamma_; } void AdaptiveDirectionalSampling::setQuadrantOrientation(const OT::Point& quadrantOrientation) { const UnsignedInteger dimension = getEvent().getImplementation()->getAntecedent()->getDimension(); if ((quadrantOrientation.getDimension() > 0) && (quadrantOrientation.getDimension() != dimension)) throw InvalidDimensionException(HERE) << "Error: the quadrant orientation dimension (" << quadrantOrientation.getDimension() << ") is not compatible with the antecedent dimension (" << dimension << ")"; quadrantOrientation_ = quadrantOrientation; } OT::Point AdaptiveDirectionalSampling::getQuadrantOrientation() const { return quadrantOrientation_; } Sample AdaptiveDirectionalSampling::computeBlockSample() { return Sample(); } /* String converter */ String AdaptiveDirectionalSampling::__repr__() const { OSS oss; oss << "class=" << AdaptiveDirectionalSampling::GetClassName(); return oss; } void AdaptiveDirectionalSampling::setPartialStratification(Bool partialStratification) { partialStratification_ = partialStratification; } OT::Bool AdaptiveDirectionalSampling::getPartialStratification() const { return partialStratification_; } void AdaptiveDirectionalSampling::setMaximumStratificationDimension(OT::UnsignedInteger maximumStratificationDimension) { maximumStratificationDimension_ = maximumStratificationDimension; } OT::UnsignedInteger AdaptiveDirectionalSampling::getMaximumStratificationDimension() const { return maximumStratificationDimension_; } OT::Point AdaptiveDirectionalSampling::getTStatistic() const { return T_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/CMakeLists.txt000066400000000000000000000055051307543307100261040ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (SimulationResultImplementation.cxx) ot_add_source_file (SimulationResult.cxx) ot_add_source_file (SimulationSensitivityAnalysis.cxx) ot_add_source_file (PostAnalyticalSimulation.cxx) ot_add_source_file (Simulation.cxx) ot_add_source_file (DirectionalSampling.cxx) ot_add_source_file (RootStrategy.cxx) ot_add_source_file (RootStrategyImplementation.cxx) ot_add_source_file (RiskyAndFast.cxx) ot_add_source_file (MediumSafe.cxx) ot_add_source_file (SafeAndSlow.cxx) ot_add_source_file (SamplingStrategy.cxx) ot_add_source_file (SamplingStrategyImplementation.cxx) ot_add_source_file (RandomDirection.cxx) ot_add_source_file (OrthogonalDirection.cxx) ot_add_source_file (ImportanceSampling.cxx) ot_add_source_file (LHS.cxx) ot_add_source_file (MonteCarlo.cxx) ot_add_source_file (PostAnalyticalControlledImportanceSampling.cxx) ot_add_source_file (PostAnalyticalImportanceSampling.cxx) ot_add_source_file (QuasiMonteCarloResult.cxx) ot_add_source_file (QuasiMonteCarlo.cxx) ot_add_source_file (RandomizedQuasiMonteCarlo.cxx) ot_add_source_file (RandomizedLHS.cxx) ot_add_source_file (Wilks.cxx) ot_add_source_file (SubsetSamplingResult.cxx) ot_add_source_file (SubsetSampling.cxx) ot_add_source_file (QuadrantSampling.cxx) ot_add_source_file (AdaptiveDirectionalSampling.cxx) ot_install_header_file (Wilks.hxx) ot_install_header_file (RootStrategyImplementation.hxx) ot_install_header_file (SamplingStrategy.hxx) ot_install_header_file (PostAnalyticalControlledImportanceSampling.hxx) ot_install_header_file (QuasiMonteCarloResult.hxx) ot_install_header_file (SimulationResult.hxx) ot_install_header_file (RiskyAndFast.hxx) ot_install_header_file (RandomDirection.hxx) ot_install_header_file (OrthogonalDirection.hxx) ot_install_header_file (PostAnalyticalImportanceSampling.hxx) ot_install_header_file (ImportanceSampling.hxx) ot_install_header_file (SimulationResultImplementation.hxx) ot_install_header_file (SimulationSensitivityAnalysis.hxx) ot_install_header_file (DirectionalSampling.hxx) ot_install_header_file (RootStrategy.hxx) ot_install_header_file (SafeAndSlow.hxx) ot_install_header_file (SamplingStrategyImplementation.hxx) ot_install_header_file (OTSimulation.hxx) ot_install_header_file (QuasiMonteCarlo.hxx) ot_install_header_file (RandomizedQuasiMonteCarlo.hxx) ot_install_header_file (PostAnalyticalSimulation.hxx) ot_install_header_file (MediumSafe.hxx) ot_install_header_file (Simulation.hxx) ot_install_header_file (MonteCarlo.hxx) ot_install_header_file (LHS.hxx) ot_install_header_file (RandomizedLHS.hxx) ot_install_header_file (SubsetSamplingResult.hxx) ot_install_header_file (SubsetSampling.hxx) ot_install_header_file (QuadrantSampling.hxx) ot_install_header_file (AdaptiveDirectionalSampling.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/DirectionalSampling.cxx000066400000000000000000000250051307543307100300150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief DirectionalSampling is an implementation of the directional * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DirectionalSampling.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/Matrix.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/GaussLegendre.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class DirectionalSampling */ CLASSNAMEINIT(DirectionalSampling); static const Factory Factory_DirectionalSampling; /* Constructor with parameters */ DirectionalSampling::DirectionalSampling() : Simulation() , standardFunction_(standardEvent_.getImplementation()->getFunction()) , inputDistribution_(standardEvent_.getImplementation()->getAntecedent()->getDistribution().getImplementation()) { // Nothing to do } /* Constructor with parameters */ DirectionalSampling::DirectionalSampling(const Event & event) : Simulation(event) , standardEvent_(StandardEvent(event)) , standardFunction_(standardEvent_.getImplementation()->getFunction()) , inputDistribution_(standardEvent_.getImplementation()->getAntecedent()->getDistribution().getImplementation()) , rootStrategy_() , samplingStrategy_(inputDistribution_->getDimension()) { // Nothing to do } /* Constructor with parameters */ DirectionalSampling::DirectionalSampling(const Event & event, const RootStrategy & rootStrategy, const SamplingStrategy & samplingStrategy) : Simulation(event) , standardEvent_(StandardEvent(event)) , standardFunction_(standardEvent_.getImplementation()->getFunction()) , inputDistribution_(standardEvent_.getImplementation()->getAntecedent()->getDistribution().getImplementation()) , rootStrategy_(rootStrategy) { setSamplingStrategy(samplingStrategy); } /* Virtual constructor */ DirectionalSampling * DirectionalSampling::clone() const { return new DirectionalSampling(*this); } /* Compute the contribution of a direction to the probability given the roots x_0,...,x_{n-1} of the performance function along the direction. If the origin is in the failure space: dP = 1.0 - \sum_{k=0}^{n-1}F^c(x_k) If the origin is not in the failure space: dP = \sum_{k=0}^{n-1}F^c(x_k) */ Scalar DirectionalSampling::computeContribution(const ScalarCollection & roots) { Scalar sign = 1.0; Scalar estimate = 0.0; const UnsignedInteger size = roots.getSize(); for (UnsignedInteger indexRoot = 0; indexRoot < size; ++indexRoot) { Scalar currentRoot = roots[indexRoot]; estimate += sign * inputDistribution_->computeRadialDistributionCDF(currentRoot, true); sign = -sign; } // Is the origin in the failure space? // Here, we know that the getOriginValue() method will not throw an exception, as we already called the solve() method // of the root strategy, which in turn initialized the computation of the origin value. if (standardEvent_.getOperator().operator()(rootStrategy_.getOriginValue(), standardEvent_.getThreshold())) estimate = 1.0 - estimate; return estimate; } /* Compute the mean point of a direction given the roots x_0,...,x_{n-1} of the performance function along the direction. If the origin is in the failure space we add a root at 0, and if the resulting number of roots is odd we add a root at +\infty. The integrals \int_{x_k}^{x_{k+1}} xp(x)dx = -[xF^c(x)]_{x_k}^{x_{k+1}} + \int_{x_k}^{x_{k+1}} F^c(x)dx are computed using a Gauss-Legendre quadrature rule. */ Scalar DirectionalSampling::computeMeanContribution(const ScalarCollection & roots) { ScalarCollection xK(0); // Is the origin in the failure space? // Here, we know that the getOriginValue() method will not throw an exception, as we already called the solve() method // of the root strategy, which in turn initialized the computation of the origin value. if (standardEvent_.getOperator().operator()(rootStrategy_.getOriginValue(), standardEvent_.getThreshold())) xK.add(0.0); const UnsignedInteger size = roots.getSize(); for (UnsignedInteger indexRoot = 0; indexRoot < size; ++indexRoot) xK.add(roots[indexRoot]); // If the number of points is odd, add a point at infinity if (xK.getSize() % 2 == 1) xK.add(rootStrategy_.getMaximumDistance()); // Here we know that the number of points is even. We can integrate the contributions. const UnsignedInteger segmentNumber = xK.getSize() / 2; // Quadrature rule const UnsignedInteger integrationNodesNumber = ResourceMap::GetAsUnsignedInteger("DirectionalSampling-MeanContributionIntegrationNodesNumber"); const GaussLegendre integrator(Indices(1, integrationNodesNumber)); const Point nodes(integrator.getNodes().getImplementation()->getData() * 2.0 - Point(integrationNodesNumber, 1.0)); const Point weights(integrator.getWeights() * 2.0); Scalar value = 0.0; for (UnsignedInteger segmentIndex = 0; segmentIndex < segmentNumber; ++segmentIndex) { const Scalar a = xK[2 * segmentIndex]; const Scalar b = xK[2 * segmentIndex + 1]; const Scalar halfLength = 0.5 * (b - a); // Accumulate the bracket part value += a * inputDistribution_->computeRadialDistributionCDF(a, true) - b * inputDistribution_->computeRadialDistributionCDF(b, true); // Compute the integral part Scalar sum = 0.0; for (UnsignedInteger k = 0; k < integrationNodesNumber; ++k) sum += weights[k] * inputDistribution_->computeRadialDistributionCDF(a + (1.0 + nodes[k]) * halfLength, true); sum *= halfLength; // Accumulate the integral part value += sum; } return value; } /* Compute the contribution of a set of directions direction to the probability */ Scalar DirectionalSampling::computeTotalContribution(const Sample & directionSample) { const UnsignedInteger sampleSize = directionSample.getSize(); const UnsignedInteger dimension = directionSample.getDimension(); Scalar totalContribution = 0.0; // meanPointInEventDomain = Point(dimension); UnsignedInteger contributionNumber = 0; Matrix linear(dimension, 1); // For each direction for (UnsignedInteger indexDirection = 0; indexDirection < sampleSize; ++indexDirection) { const Point direction(directionSample[indexDirection]); // First compute the roots along this direction // 1. Build the scalar function along the direction // 1.1 Build the linear function along the direction for (UnsignedInteger indexComponent = 0; indexComponent < dimension; ++indexComponent) linear(indexComponent, 0) = direction[indexComponent]; const LinearFunction ray(Point(1, 0.0), Point(dimension, 0.0), linear); // 1.2 Build the function along the ray const ComposedFunction functionAlongRay(standardFunction_, ray); // 2. Solve the function along the ray const ScalarCollection roots(rootStrategy_.solve(functionAlongRay, standardEvent_.getThreshold())); // Second, compute the contribution of this direction const Scalar contribution = computeContribution(roots); // If there is a contribution in this direction if (contribution > 0.0) { // Accumulate the contribution totalContribution += contribution; // Third, compute the mean point along this direction // meanPointInEventDomain = meanPointInEventDomain + computeMeanContribution(roots) * direction; ++contributionNumber; } // if contribution } // meanPointInEventDomain = meanPointInEventDomain * (1.0 / contributionNumber); return totalContribution / sampleSize; } /* Compute the block sample and the points that realized the event */ Sample DirectionalSampling::computeBlockSample() { const UnsignedInteger size = getBlockSize(); Sample blockSample(size, 1); // For each entry of the block sample // realizedEventSample = Sample(blockSize_, event_.getImplementation()->getAntecedent()->getDistribution().getDimension()); for (UnsignedInteger index = 0; index < size; ++index) { const Sample directionSample(samplingStrategy_.generate()); // Compute the contribution of the sub-sample computed according to the sampling strategy const Scalar contribution = computeTotalContribution(directionSample); blockSample[index][0] = contribution; } return blockSample; } /* Root strategy accessor */ void DirectionalSampling::setRootStrategy(const RootStrategy & rootStrategy) { rootStrategy_ = rootStrategy; } RootStrategy DirectionalSampling::getRootStrategy() const { return rootStrategy_; } /* Sampling strategy */ void DirectionalSampling::setSamplingStrategy(const SamplingStrategy & samplingStrategy) { samplingStrategy_ = samplingStrategy; // To force the sampling strategy to have the correct dimension samplingStrategy_.setDimension(inputDistribution_->getDimension()); } SamplingStrategy DirectionalSampling::getSamplingStrategy() const { return samplingStrategy_; } /* String converter */ String DirectionalSampling::__repr__() const { OSS oss; oss << "class=" << DirectionalSampling::GetClassName() << " rootStrategy=" << rootStrategy_.__repr__() << " samplingStrategy=" << samplingStrategy_.__repr__() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void DirectionalSampling::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("rootStrategy_", rootStrategy_); adv.saveAttribute("samplingStrategy_", samplingStrategy_); } /* Method load() reloads the object from the StorageManager */ void DirectionalSampling::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("rootStrategy_", rootStrategy_); adv.loadAttribute("samplingStrategy_", samplingStrategy_); standardEvent_ = StandardEvent(event_); standardFunction_ = standardEvent_.getImplementation()->getFunction(); inputDistribution_ = standardEvent_.getImplementation()->getAntecedent()->getDistribution().getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/ImportanceSampling.cxx000066400000000000000000000074031307543307100276630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ImportanceSampling is an implementation of the importance sampling Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ImportanceSampling.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ImportanceSampling); static const Factory Factory_ImportanceSampling; /* Constructor with parameters */ ImportanceSampling::ImportanceSampling() : Simulation() { } /* Constructor with parameters */ ImportanceSampling::ImportanceSampling(const Event & event, const Distribution & importanceDistribution) : Simulation(event) , importanceDistribution_(importanceDistribution) { // Check if the importance distribution dimension is compatible with the event if (importanceDistribution.getDimension() != event.getImplementation()->getAntecedent()->getDimension()) throw InvalidArgumentException(HERE) << "The importance distribution must have the same dimension as the event"; } /* Virtual constructor */ ImportanceSampling * ImportanceSampling::clone() const { return new ImportanceSampling(*this); } /* Compute the block sample */ Sample ImportanceSampling::computeBlockSample() { const UnsignedInteger blockSize = getBlockSize(); // First, compute a sample of the importance distribution const Sample inputSample(importanceDistribution_.getSample(blockSize)); // Then, evaluate the function on this sample Sample blockSample(getEvent().getImplementation()->getFunction()(inputSample)); // Then, modify in place this sample to take into account the change in the input distribution // realizedEventSample = Sample(blockSize_, inputSample.getDimension()); for (UnsignedInteger i = 0; i < blockSize; i++) { const Bool isRealized = getEvent().getOperator()(blockSample[i][0], getEvent().getThreshold()); if (isRealized) { // If the event occured, the value is p_initial(x[i]) / p_importance(x[i]) // Having access to p_initial is a long trip... const Scalar weight = getEvent().getImplementation()->getAntecedent()->getDistribution().computePDF(inputSample[i]) / importanceDistribution_.computePDF(inputSample[i]); blockSample[i][0] = weight; } else blockSample[i][0] = 0.0; } return blockSample; } /* Importance distribution accessor */ Distribution ImportanceSampling::getImportanceDistribution() const { return importanceDistribution_; } /* String converter */ String ImportanceSampling::__repr__() const { OSS oss; oss << "class=" << ImportanceSampling::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void ImportanceSampling::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("importanceDistribution_", importanceDistribution_); } /* Method load() reloads the object from the StorageManager */ void ImportanceSampling::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("importanceDistribution_", importanceDistribution_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/LHS.cxx000066400000000000000000000105261307543307100245150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LHS is an implementation of the hit or miss Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LHS.hxx" #include "openturns/LHSExperiment.hxx" #include "openturns/Point.hxx" #include "openturns/RandomVector.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class LHS */ CLASSNAMEINIT(LHS); static const Factory Factory_LHS; /* Default constructor */ LHS::LHS() : Simulation() , dimension_(0) , blockIndex_(0) { // Nothing to do } /* Constructor with parameters */ LHS::LHS(const Event & event) : Simulation(event) , dimension_(event.getImplementation()->getAntecedent()->getDimension()) , blockIndex_(0) { // Check if the distribution associated to the antecedent of the antecedent of the event has independent components if(!event.getImplementation()->getAntecedent()->getDistribution().hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error the LHS simulation method requires independent components for the event second antecedent"; // Get the marginals for (UnsignedInteger index = 0; index < dimension_; index++) marginals_.add(event.getImplementation()->getAntecedent()->getDistribution().getMarginal(index)); } /* Virtual constructor */ LHS * LHS::clone() const { return new LHS(*this); } /* Compute the block sample */ Sample LHS::computeBlockSample() { // Size of a block const UnsignedInteger blockSize = getBlockSize(); // Compute the total sample size const UnsignedInteger totalSize = blockSize * getMaximumOuterSampling(); // Compute the total sample base position UnsignedInteger basePosition = blockIndex_ * blockSize; // First, compute the input sub-sample based on the shuffling Sample inputSample(blockSize, Point(dimension_)); for(UnsignedInteger index = 0; index < blockSize; ++index) { const Point u(RandomGenerator::Generate(dimension_)); for(UnsignedInteger component = 0; component < dimension_; ++component) { Scalar xi = (shuffle_(component, basePosition) + u[component]) / totalSize; inputSample[index][component] = marginals_[component].computeQuantile(xi)[0]; } // Update the base position ++basePosition; } // Then, evaluate the function on this sample Sample blockSample(getEvent().getImplementation()->getFunction()(inputSample)); for (UnsignedInteger i = 0; i < blockSize; ++i) blockSample[i][0] = getEvent().getOperator()(blockSample[i][0], event_.getThreshold()); // Update the block index ++blockIndex_; return blockSample; } /* Performs the actual computation. */ void LHS::run() { shuffle_ = LHSExperiment::ComputeShuffle(dimension_, getBlockSize() * getMaximumOuterSampling()); Simulation::run(); } /* String converter */ String LHS::__repr__() const { OSS oss; oss << "class=" << LHS::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void LHS::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("dimension_", dimension_); adv.saveAttribute("blockIndex_", blockIndex_); adv.saveAttribute("shuffle_", shuffle_); adv.saveAttribute("marginals_", marginals_); } /* Method load() reloads the object from the StorageManager */ void LHS::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("dimension_", dimension_); adv.loadAttribute("blockIndex_", blockIndex_); adv.loadAttribute("shuffle_", shuffle_); adv.loadAttribute("marginals_", marginals_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/MediumSafe.cxx000066400000000000000000000066511307543307100261120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MediumSafe.hxx" #include "openturns/Point.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MediumSafe */ CLASSNAMEINIT(MediumSafe); static const Factory Factory_MediumSafe; /* Constructor with parameters */ MediumSafe::MediumSafe(): RootStrategyImplementation() { // Nothing to do } /* Constructor with parameters */ MediumSafe::MediumSafe(const Solver & solver): RootStrategyImplementation(solver) { // Nothing to do } /* Constructor with parameters */ MediumSafe::MediumSafe(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize): RootStrategyImplementation(solver, maximumDistance, stepSize) { // Nothing to do } /* Virtual constructor */ MediumSafe * MediumSafe::clone() const { return new MediumSafe(*this); } /* Solve gives all the roots found applying the root strategy */ MediumSafe::ScalarCollection MediumSafe::solve(const Function & function, const Scalar value) { ScalarCollection result(0); Scalar infPoint = 0.0; Scalar infValue = 0.0; // Get the value of the function at the origin try { infValue = getOriginValue(); } // If it has not yet been computed, compute it and store it catch (NotDefinedException &) { infValue = function(Point(1, infPoint))[0]; setOriginValue(infValue); } // If the origin is in the failure domain, this strategy does not try to find another root if (infValue == value) { result.add(infPoint); LOGDEBUG(OSS() << "MediumSafe::solve: roots=" << result); return result; } const Scalar maximumDistance = getMaximumDistance(); Scalar stepSize = getStepSize(); Solver solver(getSolver()); while(infPoint < maximumDistance) { const Scalar supPoint = std::min(infPoint + stepSize, maximumDistance); const Scalar supValue = function(Point(1, supPoint))[0]; // With this strategy, we stop after the first zero found if ((infValue - value) * (supValue - value) < 0.0) { result.add(solver.solve(function, value, infPoint, supPoint, infValue, supValue)); LOGDEBUG(OSS() << "MediumSafe::solve: roots=" << result); return result; } infPoint = supPoint; infValue = supValue; } LOGDEBUG(OSS() << "MediumSafe::solve: roots=" << result); return result; } /* String converter */ String MediumSafe::__repr__() const { OSS oss; oss << "class=" << MediumSafe::GetClassName() << " derived from " << RootStrategyImplementation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/MonteCarlo.cxx000066400000000000000000000032761307543307100261360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MonteCarlo is an implementation of the hit or miss Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MonteCarlo.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class MonteCarlo */ CLASSNAMEINIT(MonteCarlo); static const Factory Factory_MonteCarlo; /* Constructor with parameters */ MonteCarlo::MonteCarlo(const Event & event): Simulation(event) { // Nothing to do } /* Virtual constructor */ MonteCarlo * MonteCarlo::clone() const { return new MonteCarlo(*this); } /* Compute the block sample */ Sample MonteCarlo::computeBlockSample() { return event_.getSample(blockSize_); } /* String converter */ String MonteCarlo::__repr__() const { OSS oss; oss << "class=" << MonteCarlo::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/OrthogonalDirection.cxx000066400000000000000000000130721307543307100300430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OrthogonalDirection.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalDirection */ CLASSNAMEINIT(OrthogonalDirection); static const Factory Factory_OrthogonalDirection; /* Default constructor */ OrthogonalDirection::OrthogonalDirection() : SamplingStrategyImplementation(0) , size_(1) { // Nothing to do } /* Constructor with parameters */ OrthogonalDirection::OrthogonalDirection(const UnsignedInteger dimension, const UnsignedInteger size) : SamplingStrategyImplementation(dimension) , size_(size) { // Nothing to do } /* Virtual constructor */ OrthogonalDirection * OrthogonalDirection::clone() const { return new OrthogonalDirection(*this); } /* Generate the next permutation of indices in-place in the size_ first elements */ void OrthogonalDirection::nextCombination(Indices & indices) const { UnsignedInteger i = size_ - 1; while (indices[i] == dimension_ - size_ + i) --i; ++indices[i]; for (UnsignedInteger j = i + 1; j < size_; ++j) indices[j] = indices[i] + j - i; } /* Generate a random realization of an orientation matrix in SO(dimension) uniformly distributed relatively to the Haar mesure of SO(dimension). The algorithm generate an element of SO(n) with the desired properties from an element of SO(n-1) by the application of a Householder reflexion associated to a uniform random vector on the hypersphere Sn. The starting transformation on SO(1) = {-1, 1} is taken equal to the identity Id or its opposite according to the parity of dimension in order to generate elements of SO(dimension) and not of O(dimension) \ SO(dimension). For an explanation of why it works, please refer to: Francesco Mezzadri, "How to Generate Random Matrices from the Classical Compact Groups", notices of the AMS, Volume 54, Number 5., May 2007, available online at: https://www.ams.org/journals/notices/200705/fea-mezzadri-web.pdf */ Matrix OrthogonalDirection::getUniformOrientationRealization() const { Matrix Q(dimension_, dimension_); // Initialization according to the parity of dimension Q(0, 0) = (dimension_ % 2 == 0 ? -1.0 : 1.0); Matrix column(dimension_, 1); for (UnsignedInteger indexDimension = 1; indexDimension < dimension_; indexDimension++) { Q(indexDimension, indexDimension) = 1.0; Point v(getUniformUnitVectorRealization(indexDimension + 1)); for (UnsignedInteger index = 0; index <= indexDimension; ++index) column(index, 0) = v[index]; Q = Q - ((2.0 * column) * (column.transpose() * Q)); } return Q; } /* Add the 2^size linear combinations of columns of Q indicated in the * size first elements of indices by affecting all the choices of sign * to the coefficients of the linear combination */ void OrthogonalDirection::computePartialSample(const Indices & indices, const Matrix & Q, Sample & result) const { // Normalization factor of the linear combination const Scalar factor = 1.0 / sqrt(1.0 * size_); // We have 2^size linear combinations to generate const UnsignedInteger indexLinearCombinationMax = 1 << size_; // For each combination for (UnsignedInteger indexLinearCombination = 0; indexLinearCombination < indexLinearCombinationMax; ++indexLinearCombination) { Point direction(dimension_); // The combination index is used as a mask to select the coefficients equal to 1.0 or to -1.0 UnsignedInteger mask = indexLinearCombination; for (UnsignedInteger index = 0; index < size_; ++index) { // Which column of Q corresponds to the index position of indices? const UnsignedInteger column = indices[index]; // Sign affected to this column const Scalar sign = 1.0 - 2.0 * (mask % 2); // Summation for (UnsignedInteger row = 0; row < dimension_; ++row) direction[row] += sign * Q(row, column); // Next bit of the mask mask /= 2; } // Normalize the linear combination result.add(factor * direction); } } /* Generate a set of directions */ Sample OrthogonalDirection::generate() const { Sample result(0, dimension_); Matrix Q(getUniformOrientationRealization()); Indices indices(size_); // Start with the first lexicographic combination indices.fill(); computePartialSample(indices, Q, result); while(indices[0] != dimension_ - size_) { nextCombination(indices); computePartialSample(indices, Q, result); } LOGDEBUG(OSS() << "OrthogonalDirection::generate: directions=\n" << result); return result; } /* String converter */ String OrthogonalDirection::__repr__() const { OSS oss; oss << "class=" << OrthogonalDirection::GetClassName() << " derived from " << SamplingStrategyImplementation::__repr__() << " size=" << size_; return oss; } END_NAMESPACE_OPENTURNS PostAnalyticalControlledImportanceSampling.cxx000066400000000000000000000104451307543307100345020ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation// -*- C++ -*- /** * @brief PostAnalyticalControlledImportanceSampling is an implementation of the controlled importance sampling Monte Carlo simulation method in standard space * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PostAnalyticalControlledImportanceSampling.hxx" #include "openturns/Point.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class PostAnalyticalControlledImportanceSampling */ CLASSNAMEINIT(PostAnalyticalControlledImportanceSampling); static const Factory Factory_PostAnalyticalControlledImportanceSampling; /* Constructor with parameters */ PostAnalyticalControlledImportanceSampling::PostAnalyticalControlledImportanceSampling() : PostAnalyticalSimulation() { // Nothing to do } /* Constructor with parameters */ PostAnalyticalControlledImportanceSampling::PostAnalyticalControlledImportanceSampling(const AnalyticalResult & analyticalResult) : PostAnalyticalSimulation(analyticalResult) { // Nothing to do } /* Virtual constructor */ PostAnalyticalControlledImportanceSampling * PostAnalyticalControlledImportanceSampling::clone() const { return new PostAnalyticalControlledImportanceSampling(*this); } /* Compute the block sample */ Sample PostAnalyticalControlledImportanceSampling::computeBlockSample() { const UnsignedInteger blockSize = getBlockSize(); const Point standardSpaceDesignPoint(analyticalResult_.getStandardSpaceDesignPoint()); const Bool originFailure = analyticalResult_.getIsStandardPointOriginInFailureSpace(); // Get the threshold and the reliability index const Scalar threshold = event_.getThreshold(); const Scalar reliabilityIndex = analyticalResult_.getHasoferReliabilityIndex(); const Scalar betaSquare = reliabilityIndex * reliabilityIndex; // Initialize the probability with the control probability Scalar probability = controlProbability_; // First, compute a sample of the importance distribution. It is simply // the standard distribution translated to the design point Sample inputSample(standardDistribution_.getSample(blockSize)); inputSample += standardSpaceDesignPoint; // Then, evaluate the function on this sample Sample blockSample(getEvent().getImplementation()->getFunction()(inputSample)); // Then, modify in place this sample to take into account the change in the input distribution for (UnsignedInteger i = 0; i < blockSize; ++i) { const Point realization(inputSample[i]); Bool failureControl = dot(realization, standardSpaceDesignPoint) > betaSquare; // If the origin is not in the failure domain, the control is made using the linear event dot(u,u*) > beta^2, // else it is made using the linear event dot(u,u*) < beta^2. failureControl = (failureControl && !originFailure) || (!failureControl && originFailure); const Bool failureEvent = event_.getOperator()(blockSample[i][0], threshold); blockSample[i][0] = probability; const Scalar factor = (!failureControl && failureEvent) - (failureControl && !failureEvent); if (factor != 0.0) blockSample[i][0] = blockSample[i][0] + factor * standardDistribution_.computePDF(realization) / standardDistribution_.computePDF(realization - standardSpaceDesignPoint); } return blockSample; } /* String converter */ String PostAnalyticalControlledImportanceSampling::__repr__() const { OSS oss; oss << "class=" << PostAnalyticalControlledImportanceSampling::GetClassName() << " derived from " << PostAnalyticalSimulation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/PostAnalyticalImportanceSampling.cxx000066400000000000000000000070101307543307100325250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PostAnalyticalImportanceSampling is an implementation of the importance sampling Monte Carlo simulation method in standard space * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PostAnalyticalImportanceSampling.hxx" #include "openturns/Point.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class PostAnalyticalImportanceSampling */ CLASSNAMEINIT(PostAnalyticalImportanceSampling); static const Factory Factory_PostAnalyticalImportanceSampling; /* Constructor with parameters */ PostAnalyticalImportanceSampling::PostAnalyticalImportanceSampling() : PostAnalyticalSimulation() { // Nothing to do } /* Constructor with parameters */ PostAnalyticalImportanceSampling::PostAnalyticalImportanceSampling(const AnalyticalResult & analyticalResult): PostAnalyticalSimulation(analyticalResult) { // Nothing to do } /* Virtual constructor */ PostAnalyticalImportanceSampling * PostAnalyticalImportanceSampling::clone() const { return new PostAnalyticalImportanceSampling(*this); } /* Compute the block sample */ Sample PostAnalyticalImportanceSampling::computeBlockSample() { const UnsignedInteger blockSize = getBlockSize(); const Point standardSpaceDesignPoint(analyticalResult_.getStandardSpaceDesignPoint()); // Get the threshold and the reliability index const Scalar threshold = event_.getThreshold(); // First, compute a sample of the importance distribution. It is simply // the standard distribution translated to the design point Sample inputSample(standardDistribution_.getSample(blockSize)); inputSample += standardSpaceDesignPoint; // Then, evaluate the function on this sample Sample blockSample(getEvent().getImplementation()->getFunction()(inputSample)); // realizedEventSample = Sample(blockSize_, inputSample.getDimension()); // Then, modify in place this sample to take into account the change in the input distribution for (UnsignedInteger i = 0; i < blockSize; ++i) { const Bool isRealized = getEvent().getOperator()(blockSample[i][0], threshold); // If the event has occured if (isRealized) { // If the event occured, the value is p_initial(x[i]) / p_importance(x[i]) const Scalar weight = standardDistribution_.computePDF(inputSample[i]) / standardDistribution_.computePDF(inputSample[i] - standardSpaceDesignPoint); blockSample[i][0] = weight; } else blockSample[i][0] = 0.0; } return blockSample; } /* String converter */ String PostAnalyticalImportanceSampling::__repr__() const { OSS oss; oss << "class=" << PostAnalyticalImportanceSampling::GetClassName() << " derived from " << PostAnalyticalSimulation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/PostAnalyticalSimulation.cxx000066400000000000000000000062151307543307100310630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PostAnalyticalSimulation is a generic view of postAnalyticalSimulation methods for computing * probabilities and related quantities by sampling and estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PostAnalyticalSimulation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class PostAnalyticalSimulation */ CLASSNAMEINIT(PostAnalyticalSimulation); static const Factory Factory_PostAnalyticalSimulation; /* Constructor with parameters */ PostAnalyticalSimulation::PostAnalyticalSimulation() : Simulation() , controlProbability_(0.) { } /* Constructor with parameters */ PostAnalyticalSimulation::PostAnalyticalSimulation(const AnalyticalResult & analyticalResult) : Simulation(analyticalResult.getLimitStateVariable()) , analyticalResult_(analyticalResult) , standardEvent_(StandardEvent(getEvent())) , standardDistribution_(standardEvent_.getImplementation()->getAntecedent()->getDistribution()) { // Compute the probability associated to the analytical result controlProbability_ = standardDistribution_.getMarginal(0).computeCDF(-analyticalResult.getHasoferReliabilityIndex()); } /* Analytical result accessor */ AnalyticalResult PostAnalyticalSimulation::getAnalyticalResult() const { return analyticalResult_; } /* Control probability accessor */ Scalar PostAnalyticalSimulation::getControlProbability() const { return controlProbability_; } /* String converter */ String PostAnalyticalSimulation::__repr__() const { OSS oss; oss << "class=" << PostAnalyticalSimulation::GetClassName() << " analyticalResult=" << analyticalResult_ << " controlProbability_=" << controlProbability_; return oss; } /* Method save() stores the object through the StorageManager */ void PostAnalyticalSimulation::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("analyticalResult_", analyticalResult_); } /* Method load() reloads the object from the StorageManager */ void PostAnalyticalSimulation::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("analyticalResult_", analyticalResult_); standardEvent_ = StandardEvent(getEvent()); standardDistribution_ = standardEvent_.getImplementation()->getAntecedent()->getDistribution(); controlProbability_ = standardDistribution_.getMarginal(0).computeCDF(-analyticalResult_.getHasoferReliabilityIndex()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/QuadrantSampling.cxx000066400000000000000000000131731307543307100273420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Sampling in standard space quadrants * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuadrantSampling.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuadrantSampling */ CLASSNAMEINIT(QuadrantSampling); /* Constructor with parameters */ QuadrantSampling::QuadrantSampling (const SamplingStrategy & samplingStrategy, const UnsignedInteger quadrantIndex, const Point & quadrantOrientation) : SamplingStrategyImplementation(samplingStrategy.getDimension()) , samplingStrategy_(samplingStrategy) , strataIndices_(samplingStrategy.getDimension()) { strataIndices_.fill(); setQuadrantIndex(quadrantIndex); setQuadrantOrientation(quadrantOrientation); } /* Virtual constructor */ QuadrantSampling * QuadrantSampling::clone() const { return new QuadrantSampling(*this); } /* Generate a set of directions */ Sample QuadrantSampling::generate() const { Sample result(samplingStrategy_.generate()); const UnsignedInteger size = result.getSize(); const UnsignedInteger strataDimension = strataIndices_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { for (UnsignedInteger j = 0; j < strataDimension; ++ j) { result[i][strataIndices_[j]] = std::abs(result[i][strataIndices_[j]]); if ((1 << j) & quadrantIndex_) { result[i][strataIndices_[j]] *= -1.0; } } } if (quadrantOrientation_.getDimension() > 1) { for (UnsignedInteger i = 0; i < size; ++ i) { Point inP(strataDimension); for (UnsignedInteger j = 0; j < strataDimension; ++ j) { inP[j] = result[i][strataIndices_[j]]; } const Point rotP(R_ * inP); for (UnsignedInteger j = 0; j < strataDimension; ++ j) { result[i][strataIndices_[j]] = rotP[j]; } } } return result; } void QuadrantSampling::setQuadrantIndex(const UnsignedInteger quadrantIndex) { const UnsignedInteger m = (1 << getStrataIndices().getSize()); if (quadrantIndex >= m) throw InvalidArgumentException(HERE) << "Quadrant index (" << quadrantIndex << " ) should be < " << m; quadrantIndex_ = quadrantIndex; } UnsignedInteger QuadrantSampling::getQuadrantIndex() const { return quadrantIndex_; } void QuadrantSampling::setQuadrantOrientation(const Point & quadrantOrientation) { if ((quadrantOrientation.getDimension() > 0) && (quadrantOrientation.getDimension() != getDimension())) throw InvalidDimensionException(HERE) << "Quadrant orientation dimension (" << quadrantOrientation.getDimension() << " ) should be " << getDimension(); quadrantOrientation_ = quadrantOrientation; updateRotation(); } Point QuadrantSampling::getQuadrantOrientation() const { return quadrantOrientation_; } void QuadrantSampling::setStrataIndices(const Indices & strataIndices) { const UnsignedInteger m = (1 << strataIndices.getSize()); if (quadrantIndex_ >= m) throw InvalidArgumentException(HERE) << "Quadrant index (" << quadrantIndex_ << " ) should be < " << m; if (strataIndices.getSize() > samplingStrategy_.getDimension()) throw InvalidDimensionException(HERE) << "Strata indices (" << strataIndices.getSize() << ") should be < " << samplingStrategy_.getDimension(); strataIndices_ = strataIndices; updateRotation(); } Indices QuadrantSampling::getStrataIndices() const { return strataIndices_; } /* String converter */ String QuadrantSampling::__repr__() const { OSS oss; oss << "class=" << QuadrantSampling::GetClassName() << " derived from " << SamplingStrategyImplementation::__repr__(); return oss; } void QuadrantSampling::updateRotation() { if (quadrantOrientation_.getDimension() > 0) { const UnsignedInteger p = getStrataIndices().getSize(); Point u(p); for (UnsignedInteger j = 0; j < p; ++ j) { u[j] = quadrantOrientation_[strataIndices_[j]]; } // Gram-Schmidt algorithm Sample f(p, p); // f0 = u* / ||u*|| f[0] = u / u.norm(); for (UnsignedInteger k = 1; k < p; ++ k) { // fk = ek f[k][k] = 1.0; // fk -= SUM fi for (UnsignedInteger i = 0; i < k; ++ i) { f[k] -= dot(f[k], f[i]) * f[i]; } // fk = fk / ||fk|| f[k] /= Point(f[k]).norm(); } // H is the transformation E -> F, columns = fk SquareMatrix H(p, f.getImplementation()->getData()); // P is the transformation G -> F SquareMatrix P(p); for (UnsignedInteger j = 0; j < p; ++ j) { P(0, j) = 1.0 / sqrt(1.0 * p); } for (UnsignedInteger k = 1; k < p; ++ k) { P(k, k) = (p - k) / sqrt(1.0 * (p - k) * (p - k + 1)); for (UnsignedInteger i = 0; i < p; ++ i) { if ((i < 1) || (i > k)) P(k, i) -= 1.0 / sqrt(1.0 * (p - k) * (p - k + 1)); } } // R is the tranformation E -> G R_ = P * H; } } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/QuasiMonteCarlo.cxx000066400000000000000000000104631307543307100271350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monte Carlo simulation using low-discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuasiMonteCarlo.hxx" #include "openturns/QuasiMonteCarloResult.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class QuasiMonteCarlo */ CLASSNAMEINIT(QuasiMonteCarlo); static const Factory Factory_QuasiMonteCarlo; /* Constructor with parameters */ QuasiMonteCarlo::QuasiMonteCarlo() : Simulation(), dimension_(0), lowDiscrepancySequence_() { // Nothing to do } /* Constructor with parameters */ QuasiMonteCarlo::QuasiMonteCarlo(const Event & event, const LowDiscrepancySequence & lowDiscrepancySequence) : Simulation(event), dimension_(event.getImplementation()->getAntecedent()->getDimension()), lowDiscrepancySequence_(lowDiscrepancySequence) { if (!event.getImplementation()->getAntecedent()->getDistribution().hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: cannot use the QuasiMonteCarlo algorithm with an input distribution whose components are not independent."; // retrieve the marginal laws for (UnsignedInteger index = 0; index < dimension_; ++index) marginals_.add(event.getImplementation()->getAntecedent()->getDistribution().getMarginal(index)); // initialize the low-discrepancy sequence lowDiscrepancySequence_.initialize(dimension_); // Initialize the result such that the TCL will not be used to compute confidence intervals result_ = QuasiMonteCarloResult(); } /* Virtual constructor */ QuasiMonteCarlo * QuasiMonteCarlo::clone() const { return new QuasiMonteCarlo(*this); } /* Compute the block sample */ Sample QuasiMonteCarlo::computeBlockSample() { // Size of a block const UnsignedInteger blockSize = getBlockSize(); // allocate the input sample Sample inputSample(lowDiscrepancySequence_.generate(blockSize)); // for each point of the sample for(UnsignedInteger index = 0; index < blockSize; ++index) { // for each component for(UnsignedInteger component = 0; component < dimension_; ++component) // use marginal laws to compute quantile from the low-discrepancy value to build the input sample inputSample[index][component] = marginals_[component].computeQuantile(inputSample[index][component])[0]; } // For index // Then, evaluate the function on this sample Sample blockSample(event_.getImplementation()->getFunction()(inputSample)); for (UnsignedInteger i = 0; i < blockSize_; ++i) { const Bool isRealized = getEvent().getOperator()(blockSample[i][0], event_.getThreshold()); if (isRealized) blockSample[i][0] = 1.0; else blockSample[i][0] = 0.0; } return blockSample; } /* String converter */ String QuasiMonteCarlo::__repr__() const { OSS oss; oss << "class=" << QuasiMonteCarlo::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void QuasiMonteCarlo::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("dimension_", dimension_); adv.saveAttribute("lowDiscrepancySequence_", lowDiscrepancySequence_); adv.saveAttribute("marginals_", marginals_); } /* Method load() reloads the object from the StorageManager */ void QuasiMonteCarlo::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("dimension_", dimension_); adv.loadAttribute("lowDiscrepancySequence_", lowDiscrepancySequence_); adv.loadAttribute("marginals_", marginals_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/QuasiMonteCarloResult.cxx000066400000000000000000000057131307543307100303360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/QuasiMonteCarloResult.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(QuasiMonteCarloResult); static const Factory Factory_QuasiMonteCarloResult; /* Default constructor */ QuasiMonteCarloResult::QuasiMonteCarloResult() : SimulationResultImplementation() { // Nothing to do } /* Standard constructor */ QuasiMonteCarloResult::QuasiMonteCarloResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize) : SimulationResultImplementation(event, probabilityEstimate, varianceEstimate, outerSampling, blockSize) { // Nothing to do } /* Virtual constructor */ QuasiMonteCarloResult * QuasiMonteCarloResult::clone() const { return new QuasiMonteCarloResult(*this); } /* Coefficient of variation estimate accessor */ Scalar QuasiMonteCarloResult::getCoefficientOfVariation() const { return -1.0; } /* Standard deviation estimate accessor */ Scalar QuasiMonteCarloResult::getStandardDeviation() const { return -1.0; } /* Confidence length */ Scalar QuasiMonteCarloResult::getConfidenceLength(const Scalar level) const { throw NotYetImplementedException(HERE) << "In QuasiMonteCarloResult::getConfidenceLength(const Scalar level) const: cannot compute confidence interval for QMC sampling"; } /* String converter */ String QuasiMonteCarloResult::__repr__() const { OSS oss; oss.setPrecision(6); oss << std::scientific << "probabilityEstimate=" << probabilityEstimate_ << " varianceEstimate=" << varianceEstimate_ << " outerSampling=" << outerSampling_ << " blockSize=" << blockSize_; return oss; } /* Method save() stores the object through the StorageManager */ void QuasiMonteCarloResult::save(Advocate & adv) const { SimulationResultImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void QuasiMonteCarloResult::load(Advocate & adv) { SimulationResultImplementation::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RandomDirection.cxx000066400000000000000000000037541307543307100271550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomDirection.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomDirection */ CLASSNAMEINIT(RandomDirection); static const Factory Factory_RandomDirection; /* Default constructor */ RandomDirection::RandomDirection() : SamplingStrategyImplementation(0) { // Nothing to do } /* Constructor with parameters */ RandomDirection::RandomDirection(const UnsignedInteger dimension) : SamplingStrategyImplementation(dimension) { // Nothing to do } /* Virtual constructor */ RandomDirection * RandomDirection::clone() const { return new RandomDirection(*this); } /* Generate a set of directions */ Sample RandomDirection::generate() const { Sample result(2, dimension_); result[0] = getUniformUnitVectorRealization(); result[1] = -1.0 * result[0]; LOGDEBUG(OSS() << "RandomDirection::generate: directions=\n" << result); return result; } /* String converter */ String RandomDirection::__repr__() const { OSS oss; oss << "class=" << RandomDirection::GetClassName() << " derived from " << SamplingStrategyImplementation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RandomizedLHS.cxx000066400000000000000000000071361307543307100265350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomizedLHS is an implementation of the hit or miss Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomizedLHS.hxx" #include "openturns/Point.hxx" #include "openturns/RandomVector.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/LHSExperiment.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class RandomizedLHS */ CLASSNAMEINIT(RandomizedLHS); static const Factory Factory_RandomizedLHS; /* Default constructor */ RandomizedLHS::RandomizedLHS(): Simulation(), dimension_(0) { // Nothing to do } /* Constructor with parameters */ RandomizedLHS::RandomizedLHS(const Event & event): Simulation(event), dimension_(event.getImplementation()->getAntecedent()->getDimension()) { // Get the marginals for (UnsignedInteger index = 0; index < dimension_; ++index) marginals_.add(event.getImplementation()->getAntecedent()->getDistribution().getMarginal(index)); } /* Virtual constructor */ RandomizedLHS * RandomizedLHS::clone() const { return new RandomizedLHS(*this); } /* Compute the block sample */ Sample RandomizedLHS::computeBlockSample() { // Size of a block const UnsignedInteger blockSize = getBlockSize(); // Compute a shuffle of given dimension and blocksize const Matrix shuffle(LHSExperiment::ComputeShuffle(dimension_, blockSize)); // First, compute the input sub-sample based on the shuffling Sample inputSample(blockSize, Point(dimension_)); for(UnsignedInteger index = 0; index < blockSize; ++index) { const Point u(RandomGenerator::Generate(dimension_)); for(UnsignedInteger component = 0; component < dimension_; ++component) { Scalar xi = (shuffle(component, index) + u[component]) / blockSize; inputSample[index][component] = marginals_[component].computeQuantile(xi)[0]; } } // Then, evaluate the function on this sample Sample blockSample(getEvent().getImplementation()->getFunction()(inputSample)); for (UnsignedInteger i = 0; i < blockSize; ++i) blockSample[i][0] = getEvent().getOperator()(blockSample[i][0], event_.getThreshold()); return blockSample; } /* String converter */ String RandomizedLHS::__repr__() const { OSS oss; oss << "class=" << RandomizedLHS::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void RandomizedLHS::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("dimension_", dimension_); adv.saveAttribute("marginals_", marginals_); } /* Method load() reloads the object from the StorageManager */ void RandomizedLHS::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("dimension_", dimension_); adv.loadAttribute("marginals_", marginals_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RandomizedQuasiMonteCarlo.cxx000066400000000000000000000110631307543307100311470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monte Carlo simulation using low-discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/RandomizedQuasiMonteCarlo.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/RandomGenerator.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class RandomizedQuasiMonteCarlo */ CLASSNAMEINIT(RandomizedQuasiMonteCarlo); static const Factory Factory_RandomizedQuasiMonteCarlo; /* Constructor with parameters */ RandomizedQuasiMonteCarlo::RandomizedQuasiMonteCarlo() : Simulation(), dimension_(0), lowDiscrepancySequence_() { // Nothing to do } /* Constructor with parameters */ RandomizedQuasiMonteCarlo::RandomizedQuasiMonteCarlo(const Event & event, const LowDiscrepancySequence & lowDiscrepancySequence) : Simulation(event), dimension_(event.getImplementation()->getAntecedent()->getDimension()), lowDiscrepancySequence_(lowDiscrepancySequence) { if (!event.getImplementation()->getAntecedent()->getDistribution().hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: cannot use the RandomizedQuasiMonteCarlo algorithm with an input distribution whose components are not independent."; // retrieve the marginal laws for (UnsignedInteger index = 0; index < dimension_; ++index) marginals_.add(event.getImplementation()->getAntecedent()->getDistribution().getMarginal(index)); // initialize the low-discrepancy sequence lowDiscrepancySequence_.initialize(dimension_); } /* Virtual constructor */ RandomizedQuasiMonteCarlo * RandomizedQuasiMonteCarlo::clone() const { return new RandomizedQuasiMonteCarlo(*this); } /* Compute the block sample */ Sample RandomizedQuasiMonteCarlo::computeBlockSample() { // Size of a block const UnsignedInteger blockSize = getBlockSize(); // allocate the input sample Sample inputSample(lowDiscrepancySequence_.generate(blockSize)); // for each point of the sample for(UnsignedInteger index = 0; index < blockSize; ++index) { // for each component for(UnsignedInteger component = 0; component < dimension_; ++component) { // use marginal laws to compute quantile from the low-discrepancy value to build the input sample // with a cyclic scrambling of the low discrepancy point as in R. Cranley and T.N.L. Patterson, "Randomization of number theoretic methods for multiple integration.", SIAM Journal of Numerical Analysis, 13:904-914, 1976. Scalar tmp = -1.0; inputSample[index][component] = marginals_[component].computeQuantile(modf(inputSample[index][component] + RandomGenerator::Generate(), &tmp))[0]; } // For component } // For index // Then, evaluate the function on this sample Sample blockSample(event_.getImplementation()->getFunction()(inputSample)); for (UnsignedInteger i = 0; i < blockSize_; ++i) blockSample[i][0] = getEvent().getOperator()(blockSample[i][0], event_.getThreshold()); return blockSample; } /* String converter */ String RandomizedQuasiMonteCarlo::__repr__() const { OSS oss; oss << "class=" << RandomizedQuasiMonteCarlo::GetClassName() << " derived from " << Simulation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void RandomizedQuasiMonteCarlo::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("dimension_", dimension_); adv.saveAttribute("lowDiscrepancySequence_", lowDiscrepancySequence_); adv.saveAttribute("marginals_", marginals_); } /* Method load() reloads the object from the StorageManager */ void RandomizedQuasiMonteCarlo::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("dimension_", dimension_); adv.loadAttribute("lowDiscrepancySequence_", lowDiscrepancySequence_); adv.loadAttribute("marginals_", marginals_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RiskyAndFast.cxx000066400000000000000000000061241307543307100264300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RiskyAndFast.hxx" #include "openturns/Point.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RiskyAndFast */ CLASSNAMEINIT(RiskyAndFast); static const Factory Factory_RiskyAndFast; /* Constructor with parameters */ RiskyAndFast::RiskyAndFast(): RootStrategyImplementation() { // Nothing to do } /* Constructor with parameters */ RiskyAndFast::RiskyAndFast(const Solver & solver): RootStrategyImplementation(solver) { // Nothing to do } /* Constructor with parameters */ RiskyAndFast::RiskyAndFast(const Solver & solver, const Scalar maximumDistance): RootStrategyImplementation(solver, maximumDistance, 0.0) { // Nothing to do } /* Virtual constructor */ RiskyAndFast * RiskyAndFast::clone() const { return new RiskyAndFast(*this); } /* Solve gives all the roots found applying the root strategy */ RiskyAndFast::ScalarCollection RiskyAndFast::solve(const Function & function, const Scalar value) { ScalarCollection result(0); const Scalar infPoint = 0.0; Scalar infValue = 0.0; // Get the value of the function at the origin try { infValue = getOriginValue(); } // If it has not yet been computed, compute it and store it catch (NotDefinedException &) { infValue = function(Point(1, infPoint))[0]; setOriginValue(infValue); } const Scalar supPoint = getMaximumDistance(); const Scalar supValue = function(Point(1, supPoint))[0]; Solver solver(getSolver()); // If the origin is in the failure domain we don't look for additional roots if (infValue == value) { result.add(infPoint); LOGDEBUG(OSS() << "RiskyAndFast::solve: roots=" << result); return result; } // If there is a sign change on [0, maximumDistance] if ((infValue - value) * (supValue - value) < 0.0) result.add(solver.solve(function, value, infPoint, supPoint, infValue, supValue)); LOGDEBUG(OSS() << "RiskyAndFast::solve: roots=" << result); return result; } /* String converter */ String RiskyAndFast::__repr__() const { OSS oss; oss << "class=" << RiskyAndFast::GetClassName() << " derived from " << RootStrategyImplementation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RootStrategy.cxx000066400000000000000000000057341307543307100265420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RootStrategy.hxx" #include "openturns/SafeAndSlow.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RootStrategy */ CLASSNAMEINIT(RootStrategy); /* Constructor with parameters */ RootStrategy::RootStrategy(const RootStrategyImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor with parameters */ RootStrategy::RootStrategy(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ RootStrategy::RootStrategy() : TypedInterfaceObject(new SafeAndSlow()) { // Nothing to do } /* Solve gives all the roots found applying the root strategy */ RootStrategy::ScalarCollection RootStrategy::solve(const Function & function, const Scalar value) { return getImplementation()->solve(function, value); } /* Solver accessor */ void RootStrategy::setSolver(const Solver & solver) { copyOnWrite(); getImplementation()->setSolver(solver); } Solver RootStrategy::getSolver() const { return getImplementation()->getSolver(); } /* Maximum distance accessor */ void RootStrategy::setMaximumDistance(const Scalar maximumDistance) { copyOnWrite(); getImplementation()->setMaximumDistance(maximumDistance); } Scalar RootStrategy::getMaximumDistance() const { return getImplementation()->getMaximumDistance(); } /* Step size accessor */ void RootStrategy::setStepSize(const Scalar stepSize) { copyOnWrite(); getImplementation()->setStepSize(stepSize); } Scalar RootStrategy::getStepSize() const { return getImplementation()->getStepSize(); } /* Value of the performance function at the origin accessor */ void RootStrategy::setOriginValue(const Scalar originValue) { copyOnWrite(); getImplementation()->setOriginValue(originValue); } Scalar RootStrategy::getOriginValue() const { return getImplementation()->getOriginValue(); } /* String converter */ String RootStrategy::__repr__() const { OSS oss; oss << "class=" << RootStrategy::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/RootStrategyImplementation.cxx000066400000000000000000000116521307543307100314440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PersistentObjectFactory.hxx" #include "openturns/RootStrategyImplementation.hxx" #include "openturns/Brent.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RootStrategyImplementation */ CLASSNAMEINIT(RootStrategyImplementation); static const Factory Factory_RootStrategyImplementation; /* Default constructor */ RootStrategyImplementation::RootStrategyImplementation() : PersistentObject() , solver_(new Brent()) , maximumDistance_(ResourceMap::GetAsScalar("RootStrategy-DefaultMaximumDistance")) , stepSize_(ResourceMap::GetAsScalar("RootStrategy-DefaultStepSize")) , isAlreadyComputedOriginValue_(false) , originValue_(0.0) { // Nothing to do } /* Parameters constructor */ RootStrategyImplementation::RootStrategyImplementation(const Solver & solver) : PersistentObject() , solver_(solver) , maximumDistance_(ResourceMap::GetAsScalar("RootStrategy-DefaultMaximumDistance")) , stepSize_(ResourceMap::GetAsScalar("RootStrategy-DefaultStepSize")) , isAlreadyComputedOriginValue_(false) , originValue_(0.0) { // Nothing to do } /* Parameters constructor */ RootStrategyImplementation::RootStrategyImplementation(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize) : PersistentObject() , solver_(solver) , maximumDistance_(maximumDistance) , stepSize_(stepSize) , isAlreadyComputedOriginValue_(false) , originValue_(0.0) { // Nothing to do } /* Virtual constructor */ RootStrategyImplementation * RootStrategyImplementation::clone() const { return new RootStrategyImplementation(*this); } /* Solve gives all the roots found applying the root strategy */ RootStrategyImplementation::ScalarCollection RootStrategyImplementation::solve(const Function & function, const Scalar value) { throw NotYetImplementedException(HERE) << "In RootStrategyImplementation::solve(const Function & function, const Scalar value)"; } /* Solver accessor */ void RootStrategyImplementation::setSolver(const Solver & solver) { solver_ = solver; } Solver RootStrategyImplementation::getSolver() const { return solver_; } /* Maximum distance accessor */ void RootStrategyImplementation::setMaximumDistance(const Scalar maximumDistance) { maximumDistance_ = maximumDistance; } Scalar RootStrategyImplementation::getMaximumDistance() const { return maximumDistance_; } /* Step size accessor */ void RootStrategyImplementation::setStepSize(const Scalar stepSize) { stepSize_ = stepSize; } Scalar RootStrategyImplementation::getStepSize() const { return stepSize_; } /* Value of the performance function at the origin accessor */ void RootStrategyImplementation::setOriginValue(const Scalar originValue) { originValue_ = originValue; isAlreadyComputedOriginValue_ = true; } /* We have to store the value of the performance function at the origin for two reasons: + to save computations, as this value will be reused for each direction + to check if the origin is in the failure space or not, wich change the meaning of the roots */ Scalar RootStrategyImplementation::getOriginValue() const { if (!isAlreadyComputedOriginValue_) throw NotDefinedException(HERE); return originValue_; } /* String converter */ String RootStrategyImplementation::__repr__() const { OSS oss; oss << "class=" << RootStrategyImplementation::GetClassName() << " solver=" << solver_ << " maximumDistance=" << maximumDistance_ << " stepSize=" << stepSize_; return oss; } /* Method save() stores the object through the StorageManager */ void RootStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("solver_", solver_); adv.saveAttribute("maximumDistance_", maximumDistance_); adv.saveAttribute("stepSize_", stepSize_); } /* Method load() reloads the object from the StorageManager */ void RootStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("solver_", solver_); adv.loadAttribute("maximumDistance_", maximumDistance_); adv.loadAttribute("stepSize_", stepSize_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SafeAndSlow.cxx000066400000000000000000000062711307543307100262370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SafeAndSlow.hxx" #include "openturns/Point.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SafeAndSlow */ CLASSNAMEINIT(SafeAndSlow); static const Factory Factory_SafeAndSlow; /* Constructor with parameters */ SafeAndSlow::SafeAndSlow(): RootStrategyImplementation() { // Nothing to do } /* Constructor with parameters */ SafeAndSlow::SafeAndSlow(const Solver & solver): RootStrategyImplementation(solver) { // Nothing to do } /* Constructor with parameters */ SafeAndSlow::SafeAndSlow(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize): RootStrategyImplementation(solver, maximumDistance, stepSize) { // Nothing to do } /* Virtual constructor */ SafeAndSlow * SafeAndSlow::clone() const { return new SafeAndSlow(*this); } /* Solve gives all the roots found applying the root strategy */ SafeAndSlow::ScalarCollection SafeAndSlow::solve(const Function & function, const Scalar value) { ScalarCollection result(0); Scalar infPoint = 0.0; Scalar infValue = 0.0; // Get the value of the function at the origin try { infValue = getOriginValue(); } // If it has not yet been computed, compute it and store it catch (NotDefinedException &) { infValue = function(Point(1, infPoint))[0]; setOriginValue(infValue); } // If the origin is in the failure domain add it to the roots if (infValue == value) result.add(infPoint); const Scalar maximumDistance = getMaximumDistance(); const Scalar stepSize = getStepSize(); Solver solver(getSolver()); while(infPoint < maximumDistance) { const Scalar supPoint = std::min(infPoint + stepSize, maximumDistance); const Scalar supValue = function(Point(1, supPoint))[0]; if ((infValue - value) * (supValue - value) < 0.0) { result.add(solver.solve(function, value, infPoint, supPoint, infValue, supValue)); } infPoint = supPoint; infValue = supValue; } LOGDEBUG(OSS() << "SafeAndSlow::solve: roots=" << result); return result; } /* String converter */ String SafeAndSlow::__repr__() const { OSS oss; oss << "class=" << SafeAndSlow::GetClassName() << " derived from " << RootStrategyImplementation::__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SamplingStrategy.cxx000066400000000000000000000046051307543307100273650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SamplingStrategy.hxx" #include "openturns/RandomDirection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SamplingStrategy */ CLASSNAMEINIT(SamplingStrategy); /* Defaultonstructor */ SamplingStrategy::SamplingStrategy() : TypedInterfaceObject(RandomDirection().clone()) { // Nothing to do } /* Constructor with parameters */ SamplingStrategy::SamplingStrategy(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ SamplingStrategy::SamplingStrategy(const SamplingStrategyImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor with parameters */ SamplingStrategy::SamplingStrategy(const UnsignedInteger dimension) : TypedInterfaceObject(new RandomDirection(dimension)) { // Nothing to do } /* Generate a set of directions */ Sample SamplingStrategy::generate() const { return getImplementation()->generate(); } /* Dimension accessor */ void SamplingStrategy::setDimension(const UnsignedInteger dimension) { copyOnWrite(); getImplementation()->setDimension(dimension); } UnsignedInteger SamplingStrategy::getDimension() const { return getImplementation()->getDimension(); } /* String converter */ String SamplingStrategy::__repr__() const { OSS oss; oss << "class=" << SamplingStrategy::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SamplingStrategyImplementation.cxx000066400000000000000000000062341307543307100322730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SamplingStrategyImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SamplingStrategyImplementation */ CLASSNAMEINIT(SamplingStrategyImplementation); static const Factory Factory_SamplingStrategyImplementation; /* Constructor with parameters */ SamplingStrategyImplementation::SamplingStrategyImplementation(const UnsignedInteger dimension) : PersistentObject() , dimension_(dimension) { // Nothing to do } /* Virtual constructor */ SamplingStrategyImplementation * SamplingStrategyImplementation::clone() const { return new SamplingStrategyImplementation(*this); } /* Generate a set of directions */ Sample SamplingStrategyImplementation::generate() const { throw NotYetImplementedException(HERE) << "In SamplingStrategyImplementation::generate() const"; } /* Generate a uniform random unit vector */ Point SamplingStrategyImplementation::getUniformUnitVectorRealization(const UnsignedInteger dimension) const { Point direction(dimension); Scalar norm = 0.0; do { for (UnsignedInteger i = 0; i < dimension; ++i) direction[i] = DistFunc::rNormal(); norm = direction.norm(); } while (norm == 0.0); return (1.0 / norm) * direction; } /* Generate a uniform random unit vector */ Point SamplingStrategyImplementation::getUniformUnitVectorRealization() const { return getUniformUnitVectorRealization(dimension_); } /* Dimension accessor */ void SamplingStrategyImplementation::setDimension(const UnsignedInteger dimension) { dimension_ = dimension; } UnsignedInteger SamplingStrategyImplementation::getDimension() const { return dimension_; } /* String converter */ String SamplingStrategyImplementation::__repr__() const { OSS oss; oss << "class=" << SamplingStrategyImplementation::GetClassName() << " dimension=" << dimension_; return oss; } /* Method save() stores the object through the StorageManager */ void SamplingStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("dimension_", dimension_); } /* Method load() reloads the object from the StorageManager */ void SamplingStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("dimension_", dimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/Simulation.cxx000066400000000000000000000325361307543307100262200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Simulation is a generic view of simulation methods for computing * probabilities and related quantities by sampling and estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Simulation.hxx" #include "openturns/Log.hxx" #include "openturns/Curve.hxx" #include "openturns/Point.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Simulation */ CLASSNAMEINIT(Simulation); static const Factory Factory_Simulation; /** For save/load mechanism */ Simulation::Simulation(const Bool verbose, const HistoryStrategy & convergenceStrategy) : PersistentObject() , convergenceStrategy_(convergenceStrategy) , blockSize_(ResourceMap::GetAsUnsignedInteger( "Simulation-DefaultBlockSize" )) , event_() , result_() , progressCallback_(std::make_pair(0, 0)) , stopCallback_(std::make_pair(0, 0)) , maximumOuterSampling_(ResourceMap::GetAsUnsignedInteger( "Simulation-DefaultMaximumOuterSampling" )) , maximumCoefficientOfVariation_(ResourceMap::GetAsScalar( "Simulation-DefaultMaximumCoefficientOfVariation" )) , maximumStandardDeviation_(ResourceMap::GetAsScalar( "Simulation-DefaultMaximumStandardDeviation" )) , verbose_(verbose) { // Nothing to do } /* Constructor with parameters */ Simulation::Simulation(const Event & event, const Bool verbose, const HistoryStrategy & convergenceStrategy) : PersistentObject() , convergenceStrategy_(convergenceStrategy) , blockSize_(ResourceMap::GetAsUnsignedInteger( "Simulation-DefaultBlockSize" )) , event_(event) , result_() , progressCallback_(std::make_pair(0, 0)) , stopCallback_(std::make_pair(0, 0)) , maximumOuterSampling_(ResourceMap::GetAsUnsignedInteger( "Simulation-DefaultMaximumOuterSampling" )) , maximumCoefficientOfVariation_(ResourceMap::GetAsScalar( "Simulation-DefaultMaximumCoefficientOfVariation" )) , maximumStandardDeviation_(ResourceMap::GetAsScalar( "Simulation-DefaultMaximumStandardDeviation" )) , verbose_(verbose) { // Nothing to do } /* Virtual constructor */ Simulation * Simulation::clone() const { return new Simulation(*this); } /* Event accessor */ Event Simulation::getEvent() const { return event_; } /* Result accessor */ void Simulation::setResult(const SimulationResult & result) { result_ = result; } /* Result accessor */ SimulationResult Simulation::getResult() const { return result_; } /* Maximum sample size accessor */ void Simulation::setMaximumOuterSampling(const UnsignedInteger maximumOuterSampling) { maximumOuterSampling_ = maximumOuterSampling; } /* Maximum sample size accessor */ UnsignedInteger Simulation::getMaximumOuterSampling() const { return maximumOuterSampling_; } /* Maximum coefficient of variation accessor */ void Simulation::setMaximumCoefficientOfVariation(const Scalar maximumCoefficientOfVariation) { // Check if the given coefficient of variation is >= 0 // if (!(maximumCoefficientOfVariation >= 0.0)) throw InvalidArgumentException(HERE) << "The maximum coefficient of variation must be >= 0.0"; maximumCoefficientOfVariation_ = maximumCoefficientOfVariation; } /* Maximum coefficient of variation accessor */ Scalar Simulation::getMaximumCoefficientOfVariation() const { return maximumCoefficientOfVariation_; } /* Maximum standard deviation accessor */ void Simulation::setMaximumStandardDeviation(const Scalar maximumStandardDeviation) { maximumStandardDeviation_ = maximumStandardDeviation; } Scalar Simulation::getMaximumStandardDeviation() const { return maximumStandardDeviation_; } /* Block size accessor */ void Simulation::setBlockSize(const UnsignedInteger blockSize) { // Check if the given block size is >= 1 if (blockSize < 1) throw InvalidArgumentException(HERE) << "The block size must be >= 1"; blockSize_ = blockSize; } /* Block size accessor */ UnsignedInteger Simulation::getBlockSize() const { return blockSize_; } /* Verbosity accessor */ void Simulation::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Verbosity accessor */ Bool Simulation::getVerbose() const { return verbose_; } /* String converter */ String Simulation::__repr__() const { OSS oss; oss << "class=" << Simulation::GetClassName() << " event=" << event_ << " maximumOuterSampling=" << maximumOuterSampling_ << " maximumCoefficientOfVariation=" << maximumCoefficientOfVariation_ << " maximumStandardDeviation=" << maximumStandardDeviation_ << " blockSize=" << blockSize_; return oss; } /* Performs the actual computation. */ void Simulation::run() { /* We want to compute the probability of occurence of the given event * We estimate this probability by computing the empirical mean of a * sample of size at most outerSampling * blockSize, this sample being * built by blocks of size blockSize. It allows to use efficiently the * distribution of the computation as well as it allows to deal with * a sample size > 2^32 by a combination of blockSize and outerSampling */ // First, reset the convergence history convergenceStrategy_.clear(); UnsignedInteger outerSampling = 0; Scalar coefficientOfVariation = -1.0; Scalar standardDeviation = -1.0; Scalar probabilityEstimate = 0.0; Scalar varianceEstimate = 0.0; const UnsignedInteger blockSize = getBlockSize(); // Initialize the result. We use the accessors in order to preserve the exact nature of the result (SimulationResult or QuasiMonteCarloResult) // First, the invariant part // For the event, we have to access to the implementation as the interface does not provide the setEvent() method ON PURPOSE! result_.getImplementation()->setEvent(event_); result_.setBlockSize(blockSize_); // Second, the variant part result_.setProbabilityEstimate(probabilityEstimate); result_.setVarianceEstimate(varianceEstimate); result_.setOuterSampling(outerSampling); Bool stop = false; // We loop if there remains some outer sampling and the coefficient of variation is greater than the limit or has not been computed yet. while ((outerSampling < getMaximumOuterSampling()) && ((coefficientOfVariation == -1.0) || (coefficientOfVariation > getMaximumCoefficientOfVariation())) && ((standardDeviation == -1.0) || (standardDeviation > getMaximumStandardDeviation())) && !stop) { // Perform a block of simulation const Sample blockSample(computeBlockSample()); LOGDEBUG(OSS() << "Simulation::run: blockSample=\n" << blockSample); ++outerSampling; // Then, actualize the estimates const Scalar meanBlock = blockSample.computeMean()[0]; const Scalar varianceBlock = blockSample.computeCovariance()(0, 0); // Let Skp be the empirical variance of a sample of size k*p // Let Mkp be the empirical mean of a sample of size k*p // Let Sp be the empirical variance of a sample of size p // Let Mp be the empirical mean of a sample of size p // Then, the empirical variance of the concatenated sample of size (k+1)*p is // S(k+1)p = (Sp + k * Skp) / (k + 1) + k * (Mkp - Mp)^2 / (k + 1)^2 // and the empirical mean of the concatenated sample of size (k+1)*p is // M(k+1)p = (Mp + k * Mkp) / (k + 1) // To avoid integer overflow and double loss of precision, the formulas have to be written the way they are const Scalar size = outerSampling; varianceEstimate = (varianceBlock + (size - 1.0) * varianceEstimate) / size + (1.0 - 1.0 / size) * (probabilityEstimate - meanBlock) * (probabilityEstimate - meanBlock) / size; probabilityEstimate = (meanBlock + (size - 1.0) * probabilityEstimate) / size; const Scalar reducedVarianceEstimate = varianceEstimate / (size * blockSize); // Update result result_.setProbabilityEstimate(probabilityEstimate); result_.setVarianceEstimate(reducedVarianceEstimate); result_.setOuterSampling(outerSampling); // Display the result at each outer sample if (verbose_) LOGINFO(result_.__repr__()); // Get the coefficient of variation back // We use the result to compute these quantities in order to // delegate the treatment of the degenerate cases (i.e. the // variance estimate is 0) coefficientOfVariation = result_.getCoefficientOfVariation(); standardDeviation = result_.getStandardDeviation(); // Update the history Point convergencePoint(2); convergencePoint[0] = probabilityEstimate; // Get the variance estimate from the result in order to deal with simulation // methods that do not provide variance estimate (conventional value: -1.0) // It is checked using the value of the standard deviation if (standardDeviation >= 0.0) convergencePoint[1] = reducedVarianceEstimate; else convergencePoint[1] = -1.0; convergenceStrategy_.store(convergencePoint); // callbacks if (progressCallback_.first) { progressCallback_.first((100.0 * outerSampling) / getMaximumOuterSampling(), progressCallback_.second); } if (stopCallback_.first) { stop = stopCallback_.first(stopCallback_.second); } } } /* Compute the block sample and the points that realized the event */ Sample Simulation::computeBlockSample() { throw NotYetImplementedException(HERE) << "In Simulation::computeBlockSample()"; } /* Convergence strategy accessor */ void Simulation::setConvergenceStrategy(const HistoryStrategy & convergenceStrategy) { convergenceStrategy_ = convergenceStrategy; } HistoryStrategy Simulation::getConvergenceStrategy() const { return convergenceStrategy_; } /* Draw the probability convergence at the given level */ Graph Simulation::drawProbabilityConvergence(const Scalar level) const { const Sample convergenceSample(convergenceStrategy_.getSample()); const UnsignedInteger size = convergenceSample.getSize(); Sample dataEstimate(size, 2); Sample dataLowerBound(0, 2); Sample dataUpperBound(0, 2); for (UnsignedInteger i = 0; i < size; i++) { const Scalar probabilityEstimate = convergenceSample[i][0]; const Scalar varianceEstimate = convergenceSample[i][1]; dataEstimate[i][0] = i + 1; dataEstimate[i][1] = probabilityEstimate; // The bounds are drawn only if there is a useable variance estimate if (varianceEstimate >= 0.0) { const Scalar confidenceLength = SimulationResult(event_, probabilityEstimate, varianceEstimate, i + 1, blockSize_).getConfidenceLength(level); Point pt(2); pt[0] = i + 1; pt[1] = probabilityEstimate - 0.5 * confidenceLength; dataLowerBound.add(pt); pt[1] = probabilityEstimate + 0.5 * confidenceLength; dataUpperBound.add(pt); } } const Curve estimateCurve(dataEstimate, "red", "solid", 2, "probability estimate"); OSS oss; oss << getClassName() << " convergence graph at level " << level; Graph convergenceGraph(oss, "outer iteration", "estimate", true, "topright"); convergenceGraph.add(estimateCurve); const Curve lowerBoundCurve(dataLowerBound, "green", "solid", 1, "bounds"); const Curve upperBoundCurve(dataUpperBound, "green", "solid", 1, ""); convergenceGraph.add(lowerBoundCurve); convergenceGraph.add(upperBoundCurve); return convergenceGraph; } /* Method save() stores the object through the StorageManager */ void Simulation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("convergenceStrategy_", convergenceStrategy_); adv.saveAttribute("event_", event_); adv.saveAttribute("result_", result_); adv.saveAttribute("blockSize_", blockSize_); adv.saveAttribute("maximumOuterSampling_", maximumOuterSampling_); adv.saveAttribute("maximumCoefficientOfVariation_", maximumCoefficientOfVariation_); adv.saveAttribute("maximumStandardDeviation_", maximumStandardDeviation_); adv.saveAttribute("verbose_", verbose_); } /* Method load() reloads the object from the StorageManager */ void Simulation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("convergenceStrategy_", convergenceStrategy_); adv.loadAttribute("event_", event_); adv.loadAttribute("result_", result_); adv.loadAttribute("blockSize_", blockSize_); adv.loadAttribute("maximumOuterSampling_", maximumOuterSampling_); adv.loadAttribute("maximumCoefficientOfVariation_", maximumCoefficientOfVariation_); adv.loadAttribute("maximumStandardDeviation_", maximumStandardDeviation_); adv.loadAttribute("verbose_", verbose_); } void Simulation::setProgressCallback(ProgressCallback callBack, void * data) { progressCallback_ = std::pair(callBack, data); } void Simulation::setStopCallback(StopCallback callBack, void * data) { stopCallback_ = std::pair(callBack, data); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SimulationResult.cxx000066400000000000000000000107641307543307100274160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SimulationResult stores the simulation result * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SimulationResult.hxx" #include "openturns/DistFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SimulationResult); /* Default constructor */ SimulationResult::SimulationResult() : TypedInterfaceObject(SimulationResultImplementation().clone()) { // Nothing to do } /* Standard constructor */ SimulationResult::SimulationResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize) : TypedInterfaceObject(new SimulationResultImplementation(event, probabilityEstimate, varianceEstimate, outerSampling, blockSize)) { // Nothing to do } /* Constructor with parameters */ SimulationResult::SimulationResult(Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor with parameters */ SimulationResult::SimulationResult(const SimulationResultImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Event accessor */ Event SimulationResult::getEvent() const { return getImplementation()->getEvent(); } /* Probability estimate accessor */ Scalar SimulationResult::getProbabilityEstimate() const { return getImplementation()->getProbabilityEstimate(); } void SimulationResult::setProbabilityEstimate(const Scalar probabilityEstimate) { copyOnWrite(); getImplementation()->setProbabilityEstimate(probabilityEstimate); } /* Variance estimate accessor */ Scalar SimulationResult::getVarianceEstimate() const { return getImplementation()->getVarianceEstimate(); } void SimulationResult::setVarianceEstimate(const Scalar varianceEstimate) { copyOnWrite(); getImplementation()->setVarianceEstimate(varianceEstimate); } /* Coefficient of variation estimate accessor */ Scalar SimulationResult::getCoefficientOfVariation() const { return getImplementation()->getCoefficientOfVariation(); } /* Standard deviation estimate accessor */ Scalar SimulationResult::getStandardDeviation() const { return getImplementation()->getStandardDeviation(); } /* Mean point conditioned to the event realization accessor */ Point SimulationResult::getMeanPointInEventDomain() const { return getImplementation()->getMeanPointInEventDomain(); } /* Outer sampling accessor */ UnsignedInteger SimulationResult::getOuterSampling() const { return getImplementation()->getOuterSampling(); } void SimulationResult::setOuterSampling(const UnsignedInteger outerSampling) { copyOnWrite(); getImplementation()->setOuterSampling(outerSampling); } /* String converter */ String SimulationResult::__repr__() const { return getImplementation()->__repr__(); } /* Confidence length */ Scalar SimulationResult::getConfidenceLength(const Scalar level) const { return getImplementation()->getConfidenceLength(level); } /* Block size accessor */ UnsignedInteger SimulationResult::getBlockSize() const { return getImplementation()->getBlockSize(); } void SimulationResult::setBlockSize(const UnsignedInteger blockSize) { copyOnWrite(); getImplementation()->setBlockSize(blockSize); } /* Importance factors accessor */ PointWithDescription SimulationResult::getImportanceFactors() const { return getImplementation()->getImportanceFactors(); } /* Draw the importance factors */ Graph SimulationResult::drawImportanceFactors() const { return getImplementation()->drawImportanceFactors(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SimulationResultImplementation.cxx000066400000000000000000000165441307543307100323260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SimulationResultImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SimulationSensitivityAnalysis.hxx" #include "openturns/Log.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SimulationResultImplementation); static const Factory Factory_SimulationResultImplementation; /* Default constructor */ SimulationResultImplementation::SimulationResultImplementation() : PersistentObject() , event_() , probabilityEstimate_(0.0) , varianceEstimate_(0.0) , outerSampling_(0) , blockSize_(0) { // Nothing to do } /* Standard constructor */ SimulationResultImplementation::SimulationResultImplementation(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize) : PersistentObject() , event_(event) , probabilityEstimate_(probabilityEstimate) , varianceEstimate_(varianceEstimate) , outerSampling_(outerSampling) , blockSize_(blockSize) { // Check if the probability estimate is within the range [0, 1] if ((probabilityEstimate < 0) || (probabilityEstimate > 1)) LOGINFO("The probability estimate should be in the range [0, 1]"); // Check if the variance estimate is >= 0.0 if (!(varianceEstimate >= 0.0)) throw InvalidArgumentException(HERE) << "The variance estimate must be >= 0"; } /* Virtual constructor */ SimulationResultImplementation * SimulationResultImplementation::clone() const { return new SimulationResultImplementation(*this); } /* Event accessor */ Event SimulationResultImplementation::getEvent() const { return event_; } void SimulationResultImplementation::setEvent(const Event & event) { event_ = event; } /* Probability estimate accessor */ Scalar SimulationResultImplementation::getProbabilityEstimate() const { return probabilityEstimate_; } void SimulationResultImplementation::setProbabilityEstimate(const Scalar probabilityEstimate) { probabilityEstimate_ = probabilityEstimate; } /* Variance estimate accessor */ Scalar SimulationResultImplementation::getVarianceEstimate() const { return varianceEstimate_; } void SimulationResultImplementation::setVarianceEstimate(const Scalar varianceEstimate) { varianceEstimate_ = varianceEstimate; } /* Coefficient of variation estimate accessor */ Scalar SimulationResultImplementation::getCoefficientOfVariation() const { // The usual case: the variance estimate is > 0.0 and the probability estimate is in ]0,1] if ((varianceEstimate_ > 0.0) && (probabilityEstimate_ > 0.0) && (probabilityEstimate_ <= 1.0)) return sqrt(varianceEstimate_) / probabilityEstimate_; // In all the other cases, return -1.0, waiting for a better strategy // when covarianceEstimate_ == 0.0 and probabilityEstimate_ > 0.0 return -1.0; } /* Standard deviation estimate accessor */ Scalar SimulationResultImplementation::getStandardDeviation() const { // The usual case: the variance estimate is > 0.0 if (varianceEstimate_ > 0.0) return sqrt(varianceEstimate_); // In all the other cases, return -1.0, waiting for a better strategy // when covarianceEstimate_ == 0.0 and probabilityEstimate_ > 0.0 return -1.0; } /* Outer sampling accessor */ UnsignedInteger SimulationResultImplementation::getOuterSampling() const { return outerSampling_; } void SimulationResultImplementation::setOuterSampling(const UnsignedInteger outerSampling) { outerSampling_ = outerSampling; } /* Block size accessor */ UnsignedInteger SimulationResultImplementation::getBlockSize() const { return blockSize_; } void SimulationResultImplementation::setBlockSize(const UnsignedInteger blockSize) { blockSize_ = blockSize; } /* String converter */ String SimulationResultImplementation::__repr__() const { const Scalar defaultConfidenceLevel = ResourceMap::GetAsScalar("SimulationResult-DefaultConfidenceLevel"); OSS oss; oss.setPrecision(6); oss << std::scientific << "probabilityEstimate=" << probabilityEstimate_ << " varianceEstimate=" << varianceEstimate_; oss.setPrecision(2) << " standard deviation=" << getStandardDeviation() << " coefficient of variation=" << getCoefficientOfVariation() << std::fixed << " confidenceLength(" << defaultConfidenceLevel << ")=" << std::scientific << getConfidenceLength(defaultConfidenceLevel) << std::fixed << " outerSampling=" << outerSampling_ << " blockSize=" << blockSize_; return oss; } /* Confidence length */ Scalar SimulationResultImplementation::getConfidenceLength(const Scalar level) const { // Check if the given level is in ]0, 1[ if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Confidence level must be in ]0, 1["; // The probability estimate is asymptotically normal const Scalar xq = DistFunc::qNormal(0.5 + 0.5 * level); return 2.0 * xq * sqrt(varianceEstimate_); } /* Mean point conditioned to the event realization accessor */ Point SimulationResultImplementation::getMeanPointInEventDomain() const { return SimulationSensitivityAnalysis(event_).computeMeanPointInEventDomain(); } /* Get the importance factors based on the mean point in the event domain. The mean point is transformed into the standard space, then the importance factors are obtained as the normalized squared cosine directors. */ PointWithDescription SimulationResultImplementation::getImportanceFactors() const { return SimulationSensitivityAnalysis(event_).computeImportanceFactors(); } /* ImportanceFactors graph */ Graph SimulationResultImplementation::drawImportanceFactors() const { return SimulationSensitivityAnalysis(event_).drawImportanceFactors(); } /* Method save() stores the object through the StorageManager */ void SimulationResultImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("event_", event_); adv.saveAttribute("probabilityEstimate_", probabilityEstimate_); adv.saveAttribute("varianceEstimate_", varianceEstimate_); adv.saveAttribute("outerSampling_", outerSampling_); adv.saveAttribute("blockSize_", blockSize_); } /* Method load() reloads the object from the StorageManager */ void SimulationResultImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("event_", event_); adv.loadAttribute("probabilityEstimate_", probabilityEstimate_); adv.loadAttribute("varianceEstimate_", varianceEstimate_); adv.loadAttribute("outerSampling_", outerSampling_); adv.loadAttribute("blockSize_", blockSize_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SimulationSensitivityAnalysis.cxx000066400000000000000000000446061307543307100322000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SimulationSensitivityAnalysis.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" #include "openturns/Curve.hxx" #include "openturns/Collection.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SimulationSensitivityAnalysis); static const Factory Factory_SimulationSensitivityAnalysis; /* Default constructor */ SimulationSensitivityAnalysis::SimulationSensitivityAnalysis() : PersistentObject(), inputSample_(), outputSample_(), transformation_(), comparisonOperator_(), threshold_(0.0) { // Nothing to do } /* Standard constructor */ SimulationSensitivityAnalysis::SimulationSensitivityAnalysis(const Sample & inputSample, const Sample & outputSample, const IsoProbabilisticTransformation & transformation, const ComparisonOperator & comparisonOperator, const Scalar threshold) : PersistentObject(), inputSample_(inputSample), outputSample_(outputSample), transformation_(transformation), comparisonOperator_(comparisonOperator), threshold_(threshold) { const UnsignedInteger inputSize = inputSample.getSize(); const UnsignedInteger inputDimension = inputSample.getDimension(); // Check if the given sample have compatible size if (inputSize != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample has a size=" << inputSize << " which is not equal to the output sample size=" << outputSample.getSize(); // Check if the samples are not empty if (inputSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot perform analysis based on empty samples."; // Check if the iso-probabilistic transformation is compatible with the input sample if (inputDimension != transformation.getInputDimension()) throw InvalidArgumentException(HERE) << "Error: the given iso-probabilistic transformation has a dimension=" << transformation.getInputDimension() << " that is different from the input sample dimension=" << inputDimension; // Check if the output sample is uni dimensional if (outputSample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given output sample must have a dimension=1, here dimension=" << outputSample.getDimension(); } /* Standard constructor */ SimulationSensitivityAnalysis::SimulationSensitivityAnalysis(const SimulationResult & result) : PersistentObject(), inputSample_(), outputSample_(), transformation_(), comparisonOperator_(), threshold_() { *this = SimulationSensitivityAnalysis(result.getEvent()); } /* Standard constructor */ SimulationSensitivityAnalysis::SimulationSensitivityAnalysis(const Event & event) : PersistentObject(), inputSample_(), outputSample_(), transformation_(), comparisonOperator_(), threshold_() { // Inspect the event to see if it is a composite random vector based event if (!event.isComposite()) throw InvalidArgumentException(HERE) << "Error: cannot perform a sensitivity analysis based on the given event. Check if it is based on a composite random vector."; // Get the input/output sample from the model Function model(event.getFunction()); if (!model.isHistoryEnabled()) throw InvalidArgumentException(HERE) << "Error: cannot perform analysis if the history of the underlying model is disabled."; inputSample_ = model.getHistoryInput().getSample(); // Check if the samples are not empty if (inputSample_.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot perform analysis based on empty samples."; // We are sure that the output sample has the same size as the input sample outputSample_ = model.getHistoryOutput().getSample(); // Get the transformation from the input distribution transformation_ = event.getImplementation()->getAntecedent()->getDistribution().getIsoProbabilisticTransformation(); inputSample_.setDescription(event.getImplementation()->getAntecedent()->getDistribution().getDescription()); // Get the comparison operator comparisonOperator_ = event.getOperator(); // Get the threshold threshold_ = event.getThreshold(); } /* Virtual constructor */ SimulationSensitivityAnalysis * SimulationSensitivityAnalysis::clone() const { return new SimulationSensitivityAnalysis(*this); } /* Mean point in event domain computation */ Point SimulationSensitivityAnalysis::computeMeanPointInEventDomain(const Scalar threshold) const { const UnsignedInteger inputSize = inputSample_.getSize(); Sample filteredSample(0, inputSample_.getDimension()); // Filter the input points with respect to the considered event for (UnsignedInteger i = 0; i < inputSize; ++i) if (comparisonOperator_(outputSample_[i][0], threshold)) filteredSample.add(inputSample_[i]); if (filteredSample.getSize() == 0) throw NotDefinedException(HERE) << "Error: cannont compute the mean point if no point is in the event domain."; return filteredSample.computeMean(); } Point SimulationSensitivityAnalysis::computeMeanPointInEventDomain() const { return computeMeanPointInEventDomain(threshold_); } /* Importance factors computation */ PointWithDescription SimulationSensitivityAnalysis::computeImportanceFactors(const Scalar threshold) const { PointWithDescription result(transformation_(computeMeanPointInEventDomain(threshold)).normalizeSquare()); result.setDescription(inputSample_.getDescription()); return result; } PointWithDescription SimulationSensitivityAnalysis::computeImportanceFactors() const { return computeImportanceFactors(threshold_); } /* Importance factors drawing */ Graph SimulationSensitivityAnalysis::drawImportanceFactors() const { OSS oss; oss << "Importance Factors from Simulation - " << outputSample_.getDescription()[0]; return SobolIndicesAlgorithmImplementation::DrawImportanceFactors(computeImportanceFactors(), String(oss)); } Graph SimulationSensitivityAnalysis::drawImportanceFactorsRange(const Bool probabilityScale, const Scalar lower, const Scalar upper) const { // Here we choose if we have to go forward or backward through the data // True if < or <= const Bool goForward = comparisonOperator_(0.0, 1.0); // True if > or >= const Bool goBackward = comparisonOperator_(1.0, 0.0); // If both are false, the comparison operator checks for equality, for which the method is not implemented if ( (!goForward) && (!goBackward) ) throw InternalException(HERE) << "Error: the drawImportanceFactorsRange is not implemented for an equality comparison operator."; // Load the preconized sample margin to avoid too noisy estimate of importance factors const UnsignedInteger sampleMargin = ResourceMap::GetAsUnsignedInteger("SimulationSensitivityAnalysis-DefaultSampleMargin"); const UnsignedInteger size = inputSample_.getSize(); if (sampleMargin >= size / 2) throw InternalException(HERE) << "Error: the default sample margin must be in less than half of the sample size, here sample margin=" << sampleMargin << " and sample size=" << size << ". Check the SimulationSensitivityAnalysis-DefaultSampleMargin key value in ResourceMap."; // iStart is the first index of the data to consider SignedInteger iStart = 0; // iStop is the first index outside of the data SignedInteger iStop = size; // iStartDrawing is the first index of the data to draw SignedInteger iStartDrawing = sampleMargin; // iStopDrawing is the first index the is not drawn SignedInteger iStopDrawing = size - iStartDrawing; SignedInteger step = 1; if (goBackward) { iStart = size - 1; iStop = -1; iStartDrawing = size - sampleMargin - 1; iStopDrawing = int(sampleMargin) - 1; step = -1; } // Here, we must take the ties into account in order to get an algorithm that is // both correct AND efficient. // The best way I found is to aggregate the input and output samples in order to sort all the data wrt the output value // Note on the memory management: // + We decided to store the data into two separate samples, one for the input (dimension d), one for the output (dimension 1) // + We want to produce a set of curve showing the evolution of each importance factor with respect either to a threshold value (for all the comparison operators) or to a probability (only for the weak or strict ordering operators) // + The algorithm must duplicate the data at least because of the iso-probabilistic transformation // + In fact, each curve embeds its data, so the input sample is duplicated and the output data is copied d times // + In the case of ties in the output sample, the data stored in the curves are shorter than the initial data const UnsignedInteger inputDimension = inputSample_.getDimension(); Sample mergedSample(size, inputDimension + 1); // Use the loop to compute the number of points that compares favorably // to the internal threshold UnsignedInteger good = 0; for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < inputDimension; ++j) mergedSample[i][j] = inputSample_[i][j]; mergedSample[i][inputDimension] = outputSample_[i][0]; good += comparisonOperator_(outputSample_[i][0], threshold_); } if ((good < sampleMargin) || (good >= size - sampleMargin)) LOGWARN(OSS() << "Warning: the default threshold does not correspond to well-estimated importance factors according to the default sample margin. The number of points defining the event is " << good << " and should be in [" << sampleMargin << ", " << size - sampleMargin - 1 << "] according to the SimulationSensitivityAnalysis-DefaulSampleMargin key value in ResourceMap."); // Sort the merged sample according to its last component mergedSample = mergedSample.sortAccordingToAComponent(inputDimension); // Prepare the data for the curves Collection dataCollection(inputDimension, Sample(0, 2)); // Now, we can go through the data and accumulate the importance factors. If we just call the computeImportanceFactors() method directly, the cost is O(size^2), which is too expensive for typical situations. // Aggregate the points in the event Point accumulator(inputDimension); // Here, we cannot use a simple loop as we have to deal with ties SignedInteger i = iStart; UnsignedInteger accumulated = 0; Bool mustDraw = false; while (i != iStopDrawing) { SignedInteger iThreshold = i; Scalar currentThreshold = mergedSample[iThreshold][inputDimension]; // First, search for a valid threshold, ie one that needs to accumulate more points than the ones already accumulated while (!comparisonOperator_(mergedSample[i][inputDimension], currentThreshold)) { // Accumulate the current threshold candidate, as it will be accepted as soon as a valid threshold will be found const Point current(mergedSample[iThreshold]); for (UnsignedInteger j = 0; j < inputDimension; ++j) accumulator[j] += current[j]; ++accumulated; iThreshold += step; // Exit if no other meaningful threshold is available if (iThreshold == iStopDrawing) break; currentThreshold = mergedSample[iThreshold][inputDimension]; } // Here, either we have iThreshold == iStopDrawing, in which case there is no other point to add to the graph (for example, the largest values are all equal and we compare using <), or we found a valid new value for the threshold and the associated index iThreshold if (iThreshold == iStopDrawing) break; // The accumulator hes accumulated all the points that didn't compare with the previous threshold value, which means that there are no remaining points if the comparison operator is strict, or there can be additional points to accumulate if the operator is not strict. We have to accumulate all the points associated with a value equals to this threshold // i is the index associated with the last point having a value equal to the threshold. It is iThreshold if the comparison is strict. i = iThreshold; if (comparisonOperator_(currentThreshold, currentThreshold)) { SignedInteger iTies = iThreshold; while (comparisonOperator_(mergedSample[iTies][inputDimension], currentThreshold)) { // Accumulate the current threshold const Point current(mergedSample[iTies]); for (UnsignedInteger j = 0; j < inputDimension; ++j) accumulator[j] += current[j]; ++accumulated; iTies += step; // Exit if no other point is available. We have to take into account points of index possibly larger than iStopDrawing because the current threshold could have been reached before index iStopDrawing but could stay the current value for indices after iStopDrawing if (iTies == iStop) break; } // Accumulate points associated with a value equal to the threshold // i is the index associated with the last point having a value equal to the threshold. It is iTies - 1 if the comparison is not strict. i = iTies; } // We must draw the point if the first index associated with the threshold value is equal or after (greater if step = 1, less if step = -1) iStartDrawing. mustDraw |= (iThreshold == iStartDrawing); if (mustDraw) { // Now, augmente the data in the collection // Initialize with values associated with probabilityScale == false Scalar xValue = currentThreshold; // Change the values if probabilityScale == true if (probabilityScale) xValue = Scalar(accumulated) / size; // Check if the point is in the exploration range if ((xValue >= lower) && (xValue <= upper)) { Point importanceFactors; // Check if the importance factors are well-defined for the current threshold try { importanceFactors = transformation_(accumulator / accumulated).normalizeSquare(); const Point ref(computeImportanceFactors(currentThreshold)); for (UnsignedInteger j = 0; j < inputDimension; ++j) { Point point(2); point[0] = xValue; point[1] = 100.0 * importanceFactors[j]; dataCollection[j].add(point); } } catch (...) { String msg("Warning! The importance factors associated with the"); if (probabilityScale) msg += " probability level "; else msg += " threshold "; msg = String(OSS() << msg << xValue << " are not defined"); LOGWARN(msg); } } // Within range } // mustDraw } // while (i != iStopDrawing) // Initialize with values associated with probabilityScale == false String xLabel("threshold"); Scalar internalX = threshold_; // Change the values if probabilityScale == true if (probabilityScale) { xLabel = "probability"; internalX = static_cast(good) / size; } Graph graph("Importance factors range", xLabel, "Importance (%)", true, "topright"); const Description colors(Drawable::BuildDefaultPalette(inputDimension)); for (UnsignedInteger j = 0; j < inputDimension; ++j) { Curve curve(dataCollection[j]); curve.setColor(colors[j]); curve.setLegend(inputSample_.getDescription()[j]); graph.add(curve); } // Highlight the default threshold importance factors if stable enough if ((internalX >= lower) && (internalX <= upper) && (good >= sampleMargin) && (good < size - sampleMargin)) { Sample data(2, 2); data[0][0] = internalX; data[0][1] = 0.0; data[1][0] = internalX; data[1][1] = 100.0; Curve curve(data); curve.setLineStyle("dashed"); curve.setLineWidth(2); curve.setColor("red"); curve.setLegend("current thres."); graph.add(curve); } return graph; } /* Input sample accessors */ Sample SimulationSensitivityAnalysis::getInputSample() const { return inputSample_; } /* Output sample accessors */ Sample SimulationSensitivityAnalysis::getOutputSample() const { return outputSample_; } /* Threshold accessors */ Scalar SimulationSensitivityAnalysis::getThreshold() const { return threshold_; } void SimulationSensitivityAnalysis::setThreshold(const Scalar threshold) { threshold_ = threshold; } /* Comparison operator accessors */ ComparisonOperator SimulationSensitivityAnalysis::getComparisonOperator() const { return comparisonOperator_; } void SimulationSensitivityAnalysis::setComparisonOperator(const ComparisonOperator & comparisonOperator) { comparisonOperator_ = comparisonOperator; } /* Iso-probabilistic transformation accessor */ SimulationSensitivityAnalysis::IsoProbabilisticTransformation SimulationSensitivityAnalysis::getTransformation() const { return transformation_; } /* String converter */ String SimulationSensitivityAnalysis::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " inputSample=" << inputSample_ << " outputSample=" << outputSample_ << " transformation=" << transformation_ << " operator=" << comparisonOperator_ << " threshold=" << threshold_; return oss; } /* Method save() stores the object through the StorageManager */ void SimulationSensitivityAnalysis::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("inputSample_", inputSample_); adv.saveAttribute("outputSample_", outputSample_); adv.saveAttribute("transformation_", transformation_); adv.saveAttribute("comparisonOperator_", comparisonOperator_); adv.saveAttribute("threshold_", threshold_); } /* Method load() reloads the object from the StorageManager */ void SimulationSensitivityAnalysis::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("inputSample_", inputSample_); adv.loadAttribute("outputSample_", outputSample_); adv.loadAttribute("transformation_", transformation_); adv.loadAttribute("comparisonOperator_", comparisonOperator_); adv.loadAttribute("threshold_", threshold_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SubsetSampling.cxx000066400000000000000000000453501307543307100270320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Subset simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SubsetSampling.hxx" #include "openturns/SubsetSamplingResult.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/Chi.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/Normal.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/Uniform.hxx" #include "openturns/RandomGenerator.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SubsetSampling) static const Factory Factory_SubsetSampling; /* Default constructor */ SubsetSampling::SubsetSampling() : Simulation() , proposalRange_(0.0) , conditionalProbability_(0.0) , iSubset_(false) , betaMin_(0.0) , keepEventSample_(false) , numberOfSteps_(0) , seedNumber_(0) { } /* Constructor with parameters */ SubsetSampling::SubsetSampling(const Event & event, const Scalar proposalRange, const Scalar conditionalProbability) : Simulation(event) , proposalRange_(proposalRange) , conditionalProbability_(conditionalProbability) , iSubset_(false) , betaMin_(ResourceMap::GetAsScalar("SubsetSampling-DefaultBetaMin")) , keepEventSample_(false) , numberOfSteps_(0) , seedNumber_(0) { setMaximumOuterSampling(ResourceMap::GetAsUnsignedInteger("SubsetSampling-DefaultMaximumOuterSampling"));// overide simulation default outersampling UnsignedInteger outputDimension = event.getFunction().getOutputDimension(); if (outputDimension > 1) throw InvalidArgumentException(HERE) << "Output dimension for SubsetSampling cannot be greater than 1, here output dimension=" << outputDimension; } /* Virtual constructor */ SubsetSampling * SubsetSampling::clone() const { return new SubsetSampling(*this); } /* Performs the actual computation. */ void SubsetSampling::run() { // First, initialize some parameters convergenceStrategy_.clear(); numberOfSteps_ = 0; thresholdPerStep_.clear(); gammaPerStep_.clear(); coefficientOfVariationPerStep_.clear(); probabilityEstimatePerStep_.clear(); eventInputSample_.clear(); eventOutputSample_.clear(); dimension_ = getEvent().getAntecedent()->getDimension(); const UnsignedInteger maximumOuterSampling = getMaximumOuterSampling(); const UnsignedInteger blockSize = getBlockSize(); const UnsignedInteger N = maximumOuterSampling * blockSize; if (getMaximumCoefficientOfVariation() != ResourceMap::GetAsScalar("Simulation-DefaultMaximumCoefficientOfVariation")) Log::Warn(OSS() << "The maximum coefficient of variation was set. It won't be used as termination criteria."); seedNumber_ = static_cast(conditionalProbability_ * N); if (seedNumber_ < 1) throw InvalidArgumentException(HERE) << "The number of samples per step (" << N << ") should be >= " << ceil(1.0 / conditionalProbability_); // perform isoprobabilistic transformation (the study is done in the standard space): standardEvent_ = StandardEvent(getEvent()); Scalar currentCoVsquare = 0.0; Scalar varianceEstimate = 0.0; Scalar coefficientOfVariationSquare = 0.0; // allocate input/output samples currentPointSample_ = Sample(N, dimension_); currentLevelSample_ = Sample(N, getEvent().getFunction().getOutputDimension()); // Step 1: sampling for (UnsignedInteger i = 0; i < maximumOuterSampling; ++ i) { Sample inputSample; if (!iSubset_) { // crude MC inputSample = standardEvent_.getAntecedent()->getDistribution().getSample(blockSize); } else { // conditional sampling TruncatedDistribution truncatedChiSquare(Chi(dimension_), betaMin_, TruncatedDistribution::LOWER); Normal normal(dimension_); inputSample = Sample(0, dimension_); for (UnsignedInteger j = 0; j < blockSize; ++ j) { Point direction(normal.getRealization()); Scalar norm = direction.norm(); Scalar radius = truncatedChiSquare.getRealization()[0]; if (norm != 0.0) { radius *= 1.0 / norm; } inputSample.add(direction * radius); } } Sample blockSample(standardEvent_.getFunction()(inputSample)); for (UnsignedInteger j = 0 ; j < blockSize; ++ j) { currentPointSample_[i * blockSize + j] = inputSample[j]; currentLevelSample_[i * blockSize + j] = blockSample[j]; } } ++ numberOfSteps_; // computation of the first intermediate threshold with the sample create with a normal distribution */ Scalar currentThreshold = computeThreshold(); // as long as the conditional failure domain do not overlap the global one Bool stop = !getEvent().getOperator()(getEvent().getThreshold(), currentThreshold) || (currentThreshold == getEvent().getThreshold()); if (stop) { currentThreshold = getEvent().getThreshold(); } thresholdPerStep_.add(currentThreshold); // compute monte carlo probability estimate Scalar probabilityEstimate = computeProbability(1.0, currentThreshold); if (iSubset_) { Scalar correction = ChiSquare(standardEvent_.getImplementation()->getAntecedent()->getDistribution().getDimension()).computeComplementaryCDF(betaMin_ * betaMin_); probabilityEstimate *= correction; } // if there is no subset step ... if (stop) { if (probabilityEstimate > 0.0) { // ... compute coefficient of variation coefficientOfVariationSquare = (1.0 - probabilityEstimate) / (probabilityEstimate * currentLevelSample_.getSize() * 1.0); // ... compute variance estimate varianceEstimate = coefficientOfVariationSquare * probabilityEstimate * probabilityEstimate; } } gammaPerStep_.add(0.0); probabilityEstimatePerStep_.add(probabilityEstimate); coefficientOfVariationPerStep_.add(coefficientOfVariationSquare); // as long as the conditional failure domain do not overlap the global one while (!stop) { // prepare new seeds initializeSeed(currentThreshold); // create new points using MCMC generatePoints(currentThreshold); // compute new threshold currentThreshold = computeThreshold(); // update stopping criteria stop = !getEvent().getOperator()(getEvent().getThreshold(), currentThreshold) || (currentThreshold == getEvent().getThreshold()); // make sure the last failure domain does not overlap the real failure domain if (stop) { currentThreshold = getEvent().getThreshold(); } thresholdPerStep_.add(currentThreshold); // compute probability estimate on the current sample and group seeds at the beginning of the work sample Scalar currentProbabilityEstimate = computeProbability(probabilityEstimate, currentThreshold); // update coefficient of variation Scalar gamma = computeVarianceGamma(currentProbabilityEstimate, currentThreshold); currentCoVsquare = (1.0 - currentProbabilityEstimate) / (currentProbabilityEstimate * currentLevelSample_.getSize() * 1.0); coefficientOfVariationSquare += (1.0 + gamma) * currentCoVsquare; // update probability estimate probabilityEstimate *= currentProbabilityEstimate; gammaPerStep_.add(gamma); probabilityEstimatePerStep_.add(probabilityEstimate); coefficientOfVariationPerStep_.add(sqrt(coefficientOfVariationSquare)); // stop if the number of subset steps is too high, else results are not numerically defined anymore if (std::abs(pow(probabilityEstimate, 2.)) < SpecFunc::MinScalar) throw NotDefinedException(HERE) << "Probability estimate too low: " << probabilityEstimate; // compute variance estimate varianceEstimate = coefficientOfVariationSquare * pow(probabilityEstimate, 2.); ++ numberOfSteps_; } setResult(SubsetSamplingResult(getEvent(), probabilityEstimate, varianceEstimate, numberOfSteps_ * getMaximumOuterSampling(), getBlockSize(), sqrt(coefficientOfVariationSquare))); // keep the event sample if requested if (keepEventSample_) { eventInputSample_ = Sample(0, dimension_); eventOutputSample_ = Sample (0, getEvent().getFunction().getOutputDimension()); for (UnsignedInteger i = 0; i < currentPointSample_.getSize(); ++ i) { if (getEvent().getOperator()(currentLevelSample_[i][0], getEvent().getThreshold())) { eventInputSample_.add(standardEvent_.getAntecedent()->getDistribution().getInverseIsoProbabilisticTransformation()(currentPointSample_[i])); eventOutputSample_.add(currentLevelSample_[i]); } } } // free work samples currentLevelSample_.clear(); currentPointSample_.clear(); } /* Compute the block sample */ Sample SubsetSampling::computeBlockSample() { return Sample(); } /* Compute the new threshold corresponding to the conditional failure probability */ Scalar SubsetSampling::computeThreshold() { // compute the quantile according to the event operator Scalar ratio = getEvent().getOperator()(1.0, 2.0) ? conditionalProbability_ : 1.0 - conditionalProbability_; Scalar currentThreshold = currentLevelSample_.computeQuantile(ratio)[0]; return currentThreshold; } Scalar SubsetSampling::computeProbability(Scalar probabilityEstimateFactor, Scalar threshold) { const UnsignedInteger maximumOuterSampling = getMaximumOuterSampling(); const UnsignedInteger blockSize = getBlockSize(); Scalar probabilityEstimate = 0.0; Scalar varianceEstimate = 0.0; for (UnsignedInteger i = 0; i < maximumOuterSampling; ++ i) { const Scalar size = i + 1.0; Scalar meanBlock = 0.0; Scalar varianceBlock = 0.0; for (UnsignedInteger j = 0 ; j < blockSize; ++ j) { if (getEvent().getOperator()(currentLevelSample_[i * blockSize + j][0], threshold)) { // update local mean and variance meanBlock += 1.0 / blockSize; varianceBlock += 1.0 * 1.0 / blockSize; } } varianceBlock -= pow(meanBlock, 2.0); // update global mean and variance varianceEstimate = (varianceBlock + (size - 1.0) * varianceEstimate) / size + (1.0 - 1.0 / size) * (probabilityEstimate - meanBlock) * (probabilityEstimate - meanBlock) / size; probabilityEstimate = (meanBlock + (size - 1.0) * probabilityEstimate) / size; // store convergence at each block Point convergencePoint(2); convergencePoint[0] = probabilityEstimate * probabilityEstimateFactor; convergencePoint[1] = varianceEstimate * probabilityEstimateFactor * probabilityEstimateFactor / size; convergenceStrategy_.store(convergencePoint); } // cannot determine next subset domain if no variance const Scalar epsilon = ResourceMap::GetAsScalar("SpecFunc-Precision"); if (std::abs(varianceEstimate) < epsilon) throw NotDefinedException(HERE) << "Null output variance"; return probabilityEstimate; } /* Sort new seeds */ void SubsetSampling::initializeSeed(Scalar threshold) { UnsignedInteger seedIndex = 0; const UnsignedInteger maximumOuterSampling = getMaximumOuterSampling(); const UnsignedInteger blockSize = getBlockSize(); for (UnsignedInteger i = 0; i < maximumOuterSampling; ++ i) { for (UnsignedInteger j = 0 ; j < blockSize; ++ j) { if (getEvent().getOperator()(currentLevelSample_[i * blockSize + j][0], threshold)) { // initialize seeds : they're grouped at the beginning of the sample currentPointSample_[ seedIndex ] = currentPointSample_[i * blockSize + j]; currentLevelSample_[ seedIndex ] = currentLevelSample_[i * blockSize + j]; ++ seedIndex; } } } } /* Compute the correlation on markov chains at the current state of the algorithm */ Scalar SubsetSampling::computeVarianceGamma(Scalar currentFailureProbability, Scalar threshold) { const UnsignedInteger N = currentPointSample_.getSize(); const UnsignedInteger Nc = seedNumber_; Matrix IndicatorMatrice(Nc, N / Nc); Point correlationSequence(N / Nc - 1); Scalar currentFailureProbability2 = pow(currentFailureProbability, 2.); for (UnsignedInteger i = 0; i < N / Nc; ++ i) { for (UnsignedInteger j = 0; j < Nc; ++ j) { IndicatorMatrice(j, i) = getEvent().getOperator()(currentLevelSample_[ i * Nc + j ][0], threshold); } } for (UnsignedInteger k = 0; k < N / Nc - 1; ++ k) { for (UnsignedInteger j = 0; j < Nc; ++ j) { for (UnsignedInteger l = 0; l < N / Nc - k - 1; ++ l) { correlationSequence[k] += 1.0 * IndicatorMatrice(j, l) * IndicatorMatrice(j, l + (k + 1)); } } correlationSequence[k] /= 1.0 * N - 1.0 * (k + 1) * Nc; correlationSequence[k] -= currentFailureProbability2; } const Scalar R0 = currentFailureProbability * (1.0 - currentFailureProbability); const Point rho = ((1.0 / R0) * correlationSequence); Scalar gamma = 0.0; for (UnsignedInteger k = 0; k < N / Nc - 1; ++ k) { gamma += 2.0 * (1.0 - (k + 1) * 1.0 * Nc / N) * rho[k]; } return gamma; } /* Iterate one step of the algorithm */ void SubsetSampling::generatePoints(Scalar threshold) { const UnsignedInteger maximumOuterSampling = getMaximumOuterSampling(); const UnsignedInteger blockSize = getBlockSize(); const Distribution randomWalk(ComposedDistribution(ComposedDistribution::DistributionCollection(dimension_, Uniform(-0.5 * proposalRange_, 0.5 * proposalRange_)))); const UnsignedInteger Nc = seedNumber_; for (UnsignedInteger i = 0; i < maximumOuterSampling; ++ i) { Sample inputSample(blockSize, dimension_); for (UnsignedInteger j = 0; j < blockSize; ++ j) { // assign the new point to the seed, seed points being regrouped at the beginning of the sample if (i * blockSize + j >= Nc) { currentPointSample_[i * blockSize + j] = currentPointSample_[ i * blockSize + j - Nc ]; currentLevelSample_[i * blockSize + j] = currentLevelSample_[ i * blockSize + j - Nc ]; } // generate a new point Point oldPoint(currentPointSample_[i * blockSize + j]); Point newPoint(oldPoint + randomWalk.getRealization()); // 1. accept / reject new components Point uniform(RandomGenerator::Generate(dimension_)); for (UnsignedInteger k = 0; k < dimension_; ++ k) { // compute ratio Scalar ratio = exp(0.5 * (oldPoint[k] * oldPoint[k] - newPoint[k] * newPoint[k])); // accept new point with probability ratio if (ratio < uniform[k]) { newPoint[k] = oldPoint[k]; } } inputSample[j] = newPoint; } Sample blockSample(standardEvent_.getFunction()(inputSample)); for (UnsignedInteger j = 0; j < getBlockSize(); ++ j) { // 2. accept the new point if in the failure domain if (getEvent().getOperator()(blockSample[j][0], threshold)) { currentPointSample_[i * blockSize + j] = inputSample[j]; currentLevelSample_[i * blockSize + j] = blockSample[j]; } } } } /* Markov parameter accessor */ void SubsetSampling::setProposalRange(Scalar proposalRange) { proposalRange_ = proposalRange; } Scalar SubsetSampling::getProposalRange() const { return proposalRange_; } /* Ratio accessor */ void SubsetSampling::setConditionalProbability(Scalar conditionalProbability) { if ((conditionalProbability <= 0.0) || (conditionalProbability >= 1.0)) throw InvalidArgumentException(HERE) << "Probability should be in (0, 1)"; conditionalProbability_ = conditionalProbability; } Scalar SubsetSampling::getConditionalProbability() const { return conditionalProbability_; } UnsignedInteger SubsetSampling::getNumberOfSteps() { return numberOfSteps_; } Point SubsetSampling::getGammaPerStep() const { return gammaPerStep_; } Point SubsetSampling::getCoefficientOfVariationPerStep() const { return coefficientOfVariationPerStep_; } Point SubsetSampling::getProbabilityEstimatePerStep() const { return probabilityEstimatePerStep_; } Point SubsetSampling::getThresholdPerStep() const { return thresholdPerStep_; } void SubsetSampling::setKeepEventSample(bool keepEventSample) { keepEventSample_ = keepEventSample; } Sample SubsetSampling::getEventInputSample() const { return eventInputSample_; } Sample SubsetSampling::getEventOutputSample() const { return eventOutputSample_; } void SubsetSampling::setISubset(Bool iSubset) { iSubset_ = iSubset; } void SubsetSampling::setBetaMin(Scalar betaMin) { if (!(betaMin > 0.0)) throw InvalidArgumentException(HERE) << "Beta min should be positive"; betaMin_ = betaMin; } /* String converter */ String SubsetSampling::__repr__() const { OSS oss; oss << "class=" << getClassName() << " derived from " << Simulation::__repr__() << " proposalRange=" << proposalRange_ << " conditionalProbability=" << conditionalProbability_ << " keepEventSample_=" << keepEventSample_; return oss; } /* Method save() stores the object through the StorageManager */ void SubsetSampling::save(Advocate & adv) const { Simulation::save(adv); adv.saveAttribute("proposalRange_", proposalRange_); adv.saveAttribute("conditionalProbability_", conditionalProbability_); adv.saveAttribute("iSubset_", iSubset_); adv.saveAttribute("betaMin_", betaMin_); adv.saveAttribute("keepEventSample_", keepEventSample_); adv.saveAttribute("numberOfSteps_", numberOfSteps_); adv.saveAttribute("thresholdPerStep_", thresholdPerStep_); adv.saveAttribute("gammaPerStep_", gammaPerStep_); adv.saveAttribute("coefficientOfVariationPerStep_", coefficientOfVariationPerStep_); adv.saveAttribute("probabilityEstimatePerStep_", probabilityEstimatePerStep_); } /* Method load() reloads the object from the StorageManager */ void SubsetSampling::load(Advocate & adv) { Simulation::load(adv); adv.loadAttribute("proposalRange_", proposalRange_); adv.loadAttribute("conditionalProbability_", conditionalProbability_); adv.loadAttribute("keepEventSample_", keepEventSample_); adv.loadAttribute("iSubset_", iSubset_); adv.loadAttribute("betaMin_", betaMin_); adv.loadAttribute("numberOfSteps_", numberOfSteps_); adv.loadAttribute("thresholdPerStep_", thresholdPerStep_); adv.loadAttribute("gammaPerStep_", gammaPerStep_); adv.loadAttribute("coefficientOfVariationPerStep_", coefficientOfVariationPerStep_); adv.loadAttribute("probabilityEstimatePerStep_", probabilityEstimatePerStep_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/SubsetSamplingResult.cxx000066400000000000000000000050211307543307100302200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Subset sampling result * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SubsetSamplingResult.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SubsetSamplingResult); static const Factory Factory_SubsetSamplingResult; /* Default constructor */ SubsetSamplingResult::SubsetSamplingResult() : SimulationResultImplementation() { } /* Constructor with parameters */ SubsetSamplingResult::SubsetSamplingResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize, const Scalar coefficientOfVariation) : SimulationResultImplementation(event, probabilityEstimate, varianceEstimate, outerSampling, blockSize), coefficientOfVariation_(coefficientOfVariation) { } /* Virtual constructor */ SubsetSamplingResult * SubsetSamplingResult::clone() const { return new SubsetSamplingResult(*this); } /* Coefficient of variation estimate accessor */ Scalar SubsetSamplingResult::getCoefficientOfVariation() const { return coefficientOfVariation_; } /* String converter */ String SubsetSamplingResult::__repr__() const { OSS oss; oss << SimulationResultImplementation::__repr__(); return oss; } /* Method save() stores the object through the StorageManager */ void SubsetSamplingResult::save(Advocate & adv) const { SimulationResultImplementation::save(adv); adv.saveAttribute("coefficientOfVariation_", coefficientOfVariation_); } /* Method load() reloads the object from the StorageManager */ void SubsetSamplingResult::load(Advocate & adv) { SimulationResultImplementation::load(adv); adv.loadAttribute("coefficientOfVariation_", coefficientOfVariation_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/Wilks.cxx000066400000000000000000000105201307543307100251520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Wilks is a generic view of Wilks methods for computing * probabilities and related quantities by sampling and estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Wilks.hxx" #include "openturns/Exception.hxx" #include "openturns/Sample.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Wilks */ /* Constructor */ Wilks::Wilks(const RandomVector & vector) : Object() , vector_() { // Check if the given vector is 1D as no theory has been made so far (2011) to define a quantile in higher dimension if (vector.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given vector must be 1D."; vector_ = vector; } /* Sample size computation */ UnsignedInteger Wilks::ComputeSampleSize(const Scalar quantileLevel, const Scalar confidenceLevel, const UnsignedInteger marginIndex) { if ((quantileLevel <= 0.0) || (quantileLevel >= 1.0)) throw InvalidArgumentException(HERE) << "Error: quantile level must be in ]0, 1[, here quantile level=" << quantileLevel; if ((confidenceLevel <= 0.0) || (confidenceLevel >= 1.0)) throw InvalidArgumentException(HERE) << "Error: confidence level must be in ]0, 1[, here confidence level=" << confidenceLevel; // Initial guess based on asymptotic normality of the empirical quantile Scalar x = DistFunc::qNormal(confidenceLevel); Scalar x2 = x * x; UnsignedInteger n = (UnsignedInteger)(ceil((quantileLevel * x2 + 2.0 * marginIndex + sqrt(quantileLevel * x2 * (quantileLevel * x2 + 4.0 * marginIndex))) / (2.0 * (1.0 - quantileLevel)))); // Initialize cQuantileLevel to cQuantileLevel[i] = Binomial(n, n - marginIndex + i) * quantileLevel ^ (n - marginIndex + i) * (1 - quantileLevel) ^ (marginIndex - i) // For i = marginIndex, cQuantileLevel[i] = quantileLevel ^ n Point cQuantileLevel(marginIndex + 1, pow(quantileLevel, static_cast(n))); // Descending recursion n! / (m - i)! / (n - m + i)! = n! / (m - (i - 1))! / (n - m + (i - 1))! * (m - (i - 1)) / (n - m + i) // -> Binomial(n, n - m + i - 1) = Binomial(n, n - m + i) * (n - m + i) / (m - i) for (UnsignedInteger i = marginIndex; i > 0; --i) cQuantileLevel[i - 1] = cQuantileLevel[i] * (1.0 - quantileLevel) / quantileLevel * (n - marginIndex + i) / (marginIndex - i + 1.0); Scalar cumulQuantileLevel = -1.0; do { cumulQuantileLevel = 0.0; ++n; // Update the terms in the sum // Binomial(n + 1, n + 1 - m + j) * quantileLevel ^ (n + 1 - m + j) * (1 - quantileLevel) ^ (m - j)= Binomial(n, n - m + j) * quantileLevel ^ (n - m + j) * (1 - quantileLevel) ^ (m - j) * quantileLevel * (n + 1) / (n + 1 - m + j) for (UnsignedInteger j = 0; j <= marginIndex; ++j) { cQuantileLevel[j] *= (n * quantileLevel) / (n - marginIndex + j); cumulQuantileLevel += cQuantileLevel[j]; } } while (cumulQuantileLevel > 1.0 - confidenceLevel); return n; } /* Estimate an upper bound of the quantile of the random vector for the given quantile level and confidence level, using the marginIndex upper statistics */ Point Wilks::computeQuantileBound(const Scalar quantileLevel, const Scalar confidenceLevel, const UnsignedInteger marginIndex) const { // Compute the needed sample size const UnsignedInteger size = ComputeSampleSize(quantileLevel, confidenceLevel, marginIndex); // Generate a sorted sample of the needed size const Sample sample(vector_.getSample(size).sort(0)); // The upper bound is the marginIndex upper statistics return sample[size - 1 - marginIndex]; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/000077500000000000000000000000001307543307100253745ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/AdaptiveDirectionalSampling.hxx000066400000000000000000000066161307543307100335440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ADS simulation algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ADAPTATIVEDIRECTIONALSAMPLING_HXX #define OPENTURNS_ADAPTATIVEDIRECTIONALSAMPLING_HXX #include "openturns/Simulation.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Point.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/RootStrategy.hxx" #include "openturns/SamplingStrategy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AdaptiveDirectionalSampling * * AdaptiveDirectionalSampling */ class OT_API AdaptiveDirectionalSampling : public Simulation { CLASSNAME; public: /** Default constructor */ AdaptiveDirectionalSampling(); /** Constructor with parameters */ AdaptiveDirectionalSampling(const Event & event, const RootStrategy & rootStrategy = RootStrategy(), const SamplingStrategy & samplingStrategy = SamplingStrategy()); /** Virtual constructor */ virtual AdaptiveDirectionalSampling * clone() const; /** String converter */ String __repr__() const; /** Root strategy accessor */ void setRootStrategy(const RootStrategy & rootStrategy); RootStrategy getRootStrategy() const; /** Sampling strategy */ void setSamplingStrategy(const SamplingStrategy & samplingStrategy); SamplingStrategy getSamplingStrategy() const; /** Gamma accessor */ void setGamma(const Point & gamma); Point getGamma() const; /** Quadrant orientation_ accessor */ void setQuadrantOrientation(const Point & quadrantOrientation); Point getQuadrantOrientation() const; /** Use partial stratification */ void setPartialStratification(Bool partialStratification); Bool getPartialStratification() const; /** Set maximum stratification dimension */ void setMaximumStratificationDimension(UnsignedInteger maximumStratificationDimension); UnsignedInteger getMaximumStratificationDimension() const; /** T statistic accessor */ Point getTStatistic() const; /** Performs the actual computation. */ virtual void run(); private: /** Compute the block sample and the points that realized the event */ virtual Sample computeBlockSample(); StandardEvent standardEvent_; RootStrategy rootStrategy_; SamplingStrategy samplingStrategy_; // Repartition of points in learning/simulation steps Point gamma_; // Quadrant orientation Point quadrantOrientation_; // Use partial stratification Bool partialStratification_; // Maximum number of stratified vars UnsignedInteger maximumStratificationDimension_; // T statistic Point T_; }; /* class AdaptiveDirectionalSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ADAPTATIVEDIRECTIONALSAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/DirectionalSampling.hxx000066400000000000000000000065311307543307100320620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief DirectionalSampling is an implementation of the directional sampling Montex Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRECTIONALSAMPLING_HXX #define OPENTURNS_DIRECTIONALSAMPLING_HXX #include "openturns/Simulation.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/RootStrategy.hxx" #include "openturns/SamplingStrategy.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DirectionalSampling */ class OT_API DirectionalSampling : public Simulation { CLASSNAME; public: typedef Collection ScalarCollection; typedef Distribution::Implementation Implementation; /** for save/load mecanism */ DirectionalSampling(); /** Constructor with parameters */ explicit DirectionalSampling(const Event & event); /** Constructor with parameters */ DirectionalSampling(const Event & event, const RootStrategy & rootStrategy, const SamplingStrategy & samplingStrategy); /** Virtual constructor */ virtual DirectionalSampling * clone() const; /** Root strategy accessor */ void setRootStrategy(const RootStrategy & rootStrategy); RootStrategy getRootStrategy() const; /** Sampling strategy */ void setSamplingStrategy(const SamplingStrategy & samplingStrategy); SamplingStrategy getSamplingStrategy() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute the block sample and the points that realized the event */ Sample computeBlockSample(); /** Compute the contribution of a direction to the probability given the roots of the performance function along the direction */ Scalar computeContribution(const ScalarCollection & roots); /** Compute the mean point of a direction given the roots of the performance function along the direction */ Scalar computeMeanContribution(const ScalarCollection & roots); /** Compute the contribution of a set of direction to the probability given the contributions of each direction in the set */ Scalar computeTotalContribution(const Sample & directionSample); StandardEvent standardEvent_; Function standardFunction_; Implementation inputDistribution_; RootStrategy rootStrategy_; SamplingStrategy samplingStrategy_; } ; /* class DirectionalSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DIRECTIONALSAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/ImportanceSampling.hxx000066400000000000000000000041121307543307100317170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ImportanceSampling is an implementation of the importance sampling Montex Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IMPORTANCESAMPLING_HXX #define OPENTURNS_IMPORTANCESAMPLING_HXX #include "openturns/Simulation.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ImportanceSampling */ class OT_API ImportanceSampling : public Simulation { CLASSNAME; public: /** for save/load mecanism */ ImportanceSampling(); /** Constructor with parameters */ ImportanceSampling(const Event & event, const Distribution & importanceDistribution); /** Virtual constructor */ virtual ImportanceSampling * clone() const; /** Importance distribution accessor */ Distribution getImportanceDistribution() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute the block sample */ Sample computeBlockSample(); /** Instrumental importance distribution */ Distribution importanceDistribution_; } ; /* class ImportanceSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_IMPORTANCESAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/LHS.hxx000066400000000000000000000043001307543307100265500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LHS is an implementation of the hit or miss Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LHS_HXX #define OPENTURNS_LHS_HXX #include "openturns/Simulation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Distribution.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LHS */ class OT_API LHS: public Simulation { CLASSNAME; public: typedef Collection Marginals; typedef PersistentCollection PersistentMarginals; /** Default constructor */ LHS(); /** Constructor with parameters */ LHS(const Event & event); /** Virtual constructor */ virtual LHS * clone() const; /** Performs the actual computation. */ void run(); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Compute the block sample */ Sample computeBlockSample(); /** Second antecedent dimension */ UnsignedInteger dimension_; /** Active block index */ UnsignedInteger blockIndex_; /** Cells shuffle */ Matrix shuffle_; /** Marginal distributions */ PersistentMarginals marginals_; private: } ; /* class LHS */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LHS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/MediumSafe.hxx000066400000000000000000000034071307543307100301500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MEDIUMSAFE_HXX #define OPENTURNS_MEDIUMSAFE_HXX #include "openturns/RootStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MediumSafe */ class OT_API MediumSafe : public RootStrategyImplementation { CLASSNAME; public: /** Default constructor */ MediumSafe(); /** Constructor with parameters */ explicit MediumSafe(const Solver & solver); /** Constructor with parameters */ MediumSafe(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize); /** Virtual constructor */ virtual MediumSafe * clone() const; /** Solve gives all the roots found applying the root strategy */ ScalarCollection solve(const Function & function, const Scalar value); /** String converter */ String __repr__() const; } ; /* class MediumSafe */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MEDIUMSAFE_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/MonteCarlo.hxx000066400000000000000000000030501307543307100301660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MonteCarlo is an implementation of the hit or miss Monte Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MONTECARLO_HXX #define OPENTURNS_MONTECARLO_HXX #include "openturns/Simulation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MonteCarlo */ class OT_API MonteCarlo : public Simulation { CLASSNAME; public: /** Constructor with parameters */ MonteCarlo(const Event & event); /** for save/load mecanism */ MonteCarlo() {}; /** Virtual constructor */ virtual MonteCarlo * clone() const; /** String converter */ String __repr__() const; private: /** Compute the block sample and the points that realized the event */ Sample computeBlockSample(); } ; /* class MonteCarlo */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MONTECARLO_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/OTSimulation.hxx000066400000000000000000000043421307543307100305170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Simulation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSIMULATION_HXX #define OPENTURNS_OTSIMULATION_HXX #include "openturns/DirectionalSampling.hxx" #include "openturns/RootStrategy.hxx" #include "openturns/RootStrategyImplementation.hxx" #include "openturns/RiskyAndFast.hxx" #include "openturns/MediumSafe.hxx" #include "openturns/SafeAndSlow.hxx" #include "openturns/SamplingStrategy.hxx" #include "openturns/SamplingStrategyImplementation.hxx" #include "openturns/RandomDirection.hxx" #include "openturns/OrthogonalDirection.hxx" #include "openturns/ImportanceSampling.hxx" #include "openturns/LHS.hxx" #include "openturns/RandomizedLHS.hxx" #include "openturns/MonteCarlo.hxx" #include "openturns/PostAnalyticalControlledImportanceSampling.hxx" #include "openturns/PostAnalyticalImportanceSampling.hxx" #include "openturns/PostAnalyticalSimulation.hxx" #include "openturns/QuasiMonteCarlo.hxx" #include "openturns/RandomizedQuasiMonteCarlo.hxx" #include "openturns/QuasiMonteCarloResult.hxx" #include "openturns/Simulation.hxx" #include "openturns/SimulationResult.hxx" #include "openturns/SimulationResultImplementation.hxx" #include "openturns/SimulationSensitivityAnalysis.hxx" #include "openturns/Wilks.hxx" #include "openturns/SubsetSamplingResult.hxx" #include "openturns/SubsetSampling.hxx" #include "openturns/QuadrantSampling.hxx" #include "openturns/AdaptiveDirectionalSampling.hxx" #endif /* OPENTURNS_OTSIMULATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/OrthogonalDirection.hxx000066400000000000000000000046271307543307100321130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORTHOGONALDIRECTION_HXX #define OPENTURNS_ORTHOGONALDIRECTION_HXX #include "openturns/SamplingStrategyImplementation.hxx" #include "openturns/Indices.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrthogonalDirection */ class OT_API OrthogonalDirection : public SamplingStrategyImplementation { CLASSNAME; public: /** Default constructor */ OrthogonalDirection(); /** Constructor with parameters */ OrthogonalDirection(const UnsignedInteger dimension, const UnsignedInteger size); /** Virtual constructor */ virtual OrthogonalDirection * clone() const; /** Generate a set of directions */ Sample generate() const; /** String converter */ String __repr__() const; /** Generate a random realization of an orientation matrix in SO(dimension) uniformly distributed relatively to the Haar mesure of SO(dimension) */ Matrix getUniformOrientationRealization() const; private: /** Generate the next permutation of indices in-place in the size_ first elements */ void nextCombination(Indices & indices) const; /** Add the 2^size linear combinations of columns of Q indicated in the * size first elements of indices by affecting all the choices of sign * to the coefficients of the linear combination */ void computePartialSample(const Indices & indices, const Matrix & Q, Sample & result) const; /** Size of the direction subset */ UnsignedInteger size_; } ; /* class OrthogonalDirection */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORTHOGONALDIRECTION_HXX */ PostAnalyticalControlledImportanceSampling.hxx000066400000000000000000000035661307543307100365520ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns// -*- C++ -*- /** * @brief PostAnalyticalControlledImportanceSampling is an implementation of the importance sampling Montex Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POSTANALYTICALCONTROLLEDIMPORTANCESAMPLING_HXX #define OPENTURNS_POSTANALYTICALCONTROLLEDIMPORTANCESAMPLING_HXX #include "openturns/PostAnalyticalSimulation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PostAnalyticalControlledImportanceSampling */ class OT_API PostAnalyticalControlledImportanceSampling : public PostAnalyticalSimulation { CLASSNAME; public: /** for save/load mecanism */ PostAnalyticalControlledImportanceSampling(); /** Constructor with parameters */ explicit PostAnalyticalControlledImportanceSampling(const AnalyticalResult & AnalyticalResult); /** Virtual constructor */ virtual PostAnalyticalControlledImportanceSampling * clone() const; /** String converter */ String __repr__() const; /** Compute the block sample */ Sample computeBlockSample(); } ; /* class PostAnalyticalControlledImportanceSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POSTANALYTICALCONTROLLEDIMPORTANCESAMPLING_HXX */ PostAnalyticalImportanceSampling.hxx000066400000000000000000000034341307543307100345160ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns// -*- C++ -*- /** * @brief PostAnalyticalImportanceSampling is an implementation of the importance sampling Montex Carlo simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POSTANALYTICALIMPORTANCESAMPLING_HXX #define OPENTURNS_POSTANALYTICALIMPORTANCESAMPLING_HXX #include "openturns/PostAnalyticalSimulation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PostAnalyticalImportanceSampling */ class OT_API PostAnalyticalImportanceSampling : public PostAnalyticalSimulation { CLASSNAME; public: /** for save/load mecanism */ PostAnalyticalImportanceSampling(); /** Constructor with parameters */ explicit PostAnalyticalImportanceSampling(const AnalyticalResult & AnalyticalResult); /** Virtual constructor */ virtual PostAnalyticalImportanceSampling * clone() const; /** String converter */ String __repr__() const; private: /** Compute the block sample */ Sample computeBlockSample(); } ; /* class PostAnalyticalImportanceSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POSTANALYTICALIMPORTANCESAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/PostAnalyticalSimulation.hxx000066400000000000000000000046341307543307100331300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PostAnalyticalSimulation is a generic view of postAnalyticalSimulation methods for computing * probabilities and related quantities by sampling and estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POSTANALYTICALSIMULATION_HXX #define OPENTURNS_POSTANALYTICALSIMULATION_HXX #include "openturns/Simulation.hxx" #include "openturns/AnalyticalResult.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PostAnalyticalSimulation */ class OT_API PostAnalyticalSimulation : public Simulation { CLASSNAME; public: /** for save/load mecanism */ PostAnalyticalSimulation(); /** Constructor with parameters */ explicit PostAnalyticalSimulation(const AnalyticalResult & analyticalResult); /** Event accessor */ AnalyticalResult getAnalyticalResult() const; /** Control probability accessor */ Scalar getControlProbability() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** FORM result upon which one compute a correction */ AnalyticalResult analyticalResult_; /** Standard event associated to analytical result */ StandardEvent standardEvent_; /** Standard distribution associated to the standard event */ Distribution standardDistribution_; /** Probability associated to the control */ Scalar controlProbability_; } ; /* class PostAnalyticalSimulation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POSTANALYTICALSIMULATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/QuadrantSampling.hxx000066400000000000000000000047151307543307100314060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Sampling in standard space quadrants * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUADRANTSAMPLING_HXX #define OPENTURNS_QUADRANTSAMPLING_HXX #include "openturns/SamplingStrategy.hxx" #include "openturns/RandomDirection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomDirection */ class OT_API QuadrantSampling : public SamplingStrategyImplementation { CLASSNAME; public: /** Default constructor */ explicit QuadrantSampling(const SamplingStrategy & samplingStrategy = RandomDirection(), const UnsignedInteger quadrantIndex = 0, const Point & quadrantOrientation = Point()); /** Virtual constructor */ virtual QuadrantSampling * clone() const; /** Generate a set of directions */ virtual Sample generate() const; /** Quadrant index accessor */ void setQuadrantIndex(const UnsignedInteger quadrantIndex); UnsignedInteger getQuadrantIndex() const; /** Quadrant orientation accessor */ void setQuadrantOrientation(const Point & quadrantOrientation); Point getQuadrantOrientation() const; /** Strata indices accessor */ void setStrataIndices(const Indices & strataIndices); Indices getStrataIndices() const; /** String converter */ String __repr__() const; protected: /** Update rotation parameters */ void updateRotation(); // underlying generator SamplingStrategy samplingStrategy_; // quadrant index in [0; 2^d[ UnsignedInteger quadrantIndex_; // first quadrant bisector Point quadrantOrientation_; // rotation matrix SquareMatrix R_; // stratification indices Indices strataIndices_; } ; /* class QuadrantSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUADRANTSAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/QuasiMonteCarlo.hxx000066400000000000000000000045131307543307100311760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monte Carlo simulation using low-discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUASIMONTECARLO_HXX #define OPENTURNS_QUASIMONTECARLO_HXX #include "openturns/Simulation.hxx" #include "openturns/LowDiscrepancySequence.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuasiMonteCarlo */ class OT_API QuasiMonteCarlo : public Simulation { CLASSNAME; public: typedef PersistentCollection PersistentMarginals; typedef Collection Marginals; /** Default constructor */ QuasiMonteCarlo(); /** Constructor with parameters */ QuasiMonteCarlo(const Event & event, const LowDiscrepancySequence & lowDiscrepancySequence = SobolSequence()); /** Virtual constructor */ virtual QuasiMonteCarlo * clone() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the block sample */ Sample computeBlockSample(); protected: /** Antecedent dimension */ UnsignedInteger dimension_; /** Sequence used to generate the low discrepancy points */ LowDiscrepancySequence lowDiscrepancySequence_; /** Marginal distributions */ PersistentMarginals marginals_; } ; /* class QuasiMonteCarlo */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUASIMONTECARLO_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/QuasiMonteCarloResult.hxx000066400000000000000000000045411307543307100323760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_QUASIMONTECARLORESULT_HXX #define OPENTURNS_QUASIMONTECARLORESULT_HXX #include "openturns/SimulationResultImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class QuasiMonteCarloResult * Implementation of SimulationResult */ class OT_API QuasiMonteCarloResult : public SimulationResultImplementation { CLASSNAME; public: /** Default constructor */ QuasiMonteCarloResult(); /** Standard constructor */ QuasiMonteCarloResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize); /** Virtual constructor */ virtual QuasiMonteCarloResult * clone() const; /** Coefficient of variation estimate accessor */ virtual Scalar getCoefficientOfVariation() const; /** Standard deviation estimate accessor */ virtual Scalar getStandardDeviation() const; /** Confidence length */ virtual Scalar getConfidenceLength(const Scalar level = ResourceMap::GetAsScalar("SimulationResult-DefaultConfidenceLevel")) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: }; // class QuasiMonteCarloResult END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_QUASIMONTECARLORESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RandomDirection.hxx000066400000000000000000000030141307543307100312040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMDIRECTION_HXX #define OPENTURNS_RANDOMDIRECTION_HXX #include "openturns/SamplingStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomDirection */ class OT_API RandomDirection : public SamplingStrategyImplementation { CLASSNAME; public: /** Default constructor */ RandomDirection(); /** Constructor with parameters */ explicit RandomDirection(const UnsignedInteger dimension); /** Virtual constructor */ virtual RandomDirection * clone() const; /** Generate a set of directions */ Sample generate() const; /** String converter */ String __repr__() const; } ; /* class RandomDirection */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMDIRECTION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RandomizedLHS.hxx000066400000000000000000000042701307543307100305730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomizedLHS is an implementation of the randomized Latin Hypercube Sampling method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMIZEDLHS_HXX #define OPENTURNS_RANDOMIZEDLHS_HXX #include "openturns/Simulation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Distribution.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomizedLHS */ class OT_API RandomizedLHS: public Simulation { CLASSNAME; public: typedef Collection Marginals; typedef PersistentCollection PersistentMarginals; /** Default constructor */ RandomizedLHS(); /** Constructor with parameters */ explicit RandomizedLHS(const Event & event); /** Virtual constructor */ virtual RandomizedLHS * clone() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Compute the block sample */ Sample computeBlockSample(); /** Second antecedent dimension */ UnsignedInteger dimension_; /** Cells shuffle */ Matrix shuffle_; /** Marginal distributions */ PersistentMarginals marginals_; private: } ; /* class RANDOMIZEDLHS */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMIZEDLHS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RandomizedQuasiMonteCarlo.hxx000066400000000000000000000047021307543307100332130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Monte Carlo simulation using low-discrepancy sequences * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMIZEDQUASIMONTECARLO_HXX #define OPENTURNS_RANDOMIZEDQUASIMONTECARLO_HXX #include "openturns/Simulation.hxx" #include "openturns/LowDiscrepancySequence.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomizedQuasiMonteCarlo */ class OT_API RandomizedQuasiMonteCarlo : public Simulation { CLASSNAME; public: typedef PersistentCollection PersistentMarginals; typedef Collection Marginals; /** Default constructor */ RandomizedQuasiMonteCarlo(); /** Constructor with parameters */ explicit RandomizedQuasiMonteCarlo(const Event & event, const LowDiscrepancySequence & lowDiscrepancySequence = SobolSequence()); /** Virtual constructor */ virtual RandomizedQuasiMonteCarlo * clone() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the block sample */ Sample computeBlockSample(); protected: /** Antecedent dimension */ UnsignedInteger dimension_; /** Sequence used to generate the low discrepancy points */ LowDiscrepancySequence lowDiscrepancySequence_; /** Marginal distributions */ PersistentMarginals marginals_; } ; /* class RandomizedQuasiMonteCarlo */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMIZEDQUASIMONTECARLO_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RiskyAndFast.hxx000066400000000000000000000033711307543307100304730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RISKYANDFAST_HXX #define OPENTURNS_RISKYANDFAST_HXX #include "openturns/RootStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RiskyAndFast */ class OT_API RiskyAndFast : public RootStrategyImplementation { CLASSNAME; public: /** Default constructor */ RiskyAndFast(); /** Constructor with parameters */ explicit RiskyAndFast(const Solver & solver); /** Constructor with parameters */ RiskyAndFast(const Solver & solver, const Scalar maximumDistance); /** Virtual constructor */ virtual RiskyAndFast * clone() const; /** Solve gives all the roots found applying the root strategy */ ScalarCollection solve(const Function & function, const Scalar value); /** String converter */ String __repr__() const; } ; /* class RiskyAndFast */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RISKYANDFAST_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RootStrategy.hxx000066400000000000000000000045231307543307100305770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ROOTSTRATEGY_HXX #define OPENTURNS_ROOTSTRATEGY_HXX #include "openturns/RootStrategyImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RootStrategy */ class OT_API RootStrategy : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; typedef Collection ScalarCollection; /** Constructor with parameters */ RootStrategy(const RootStrategyImplementation & implementation); /** Constructor with parameters */ RootStrategy(Implementation & p_implementation); /** Default Constructor: choose the SafeAndSlow strategy with its default solver */ RootStrategy(); /** Solve gives all the roots found applying the root strategy */ ScalarCollection solve(const Function & function, const Scalar value); /** Solver accessor */ void setSolver(const Solver & solver); Solver getSolver() const; /** Maximum distance accessor */ void setMaximumDistance(const Scalar maximumDistance); Scalar getMaximumDistance() const; /** Step size accessor */ void setStepSize(const Scalar stepSize); Scalar getStepSize() const; /** Value of the performance function at the origin accessor */ void setOriginValue(const Scalar originValue); Scalar getOriginValue() const; /** String converter */ String __repr__() const; } ; /* class RootStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ROOTSTRATEGY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/RootStrategyImplementation.hxx000066400000000000000000000062521307543307100335060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ROOTSTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_ROOTSTRATEGYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Solver.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RootStrategyImplementation */ class OT_API RootStrategyImplementation : public PersistentObject { CLASSNAME; public: typedef Collection ScalarCollection; /** Default constructor with Brent solver */ RootStrategyImplementation(); /** Constructor with parameters */ explicit RootStrategyImplementation(const Solver & solver); /** Constructor with parameters */ RootStrategyImplementation(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize); /** Virtual constructor */ virtual RootStrategyImplementation * clone() const; /** Solve gives all the roots found applying the root strategy */ virtual ScalarCollection solve(const Function & function, const Scalar value); /** Solver accessor */ void setSolver(const Solver & solver); Solver getSolver() const; /** Maximum distance accessor */ void setMaximumDistance(const Scalar maximumDistance); Scalar getMaximumDistance() const; /** Step size accessor */ void setStepSize(const Scalar stepSize); Scalar getStepSize() const; /** Value of the performance function at the origin accessor */ void setOriginValue(const Scalar originValue); Scalar getOriginValue() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Univariate root solver for the localization of zeros along a ray */ Solver solver_; /** Distance beyond which the density is negligible */ Scalar maximumDistance_; /** Size of the intervals in which we look for zeros */ Scalar stepSize_; /** Flag to avoid repeated evaluations of the model at the origin */ mutable Bool isAlreadyComputedOriginValue_; /** Value of the model at the origin */ Scalar originValue_; } ; /* class RootStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ROOTSTRATEGYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SafeAndSlow.hxx000066400000000000000000000034351307543307100303000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Find the roots in a given direction according to the Proban * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAFEANDSLOW_HXX #define OPENTURNS_SAFEANDSLOW_HXX #include "openturns/RootStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SafeAndSlow */ class OT_API SafeAndSlow : public RootStrategyImplementation { CLASSNAME; public: /** Default constructor */ SafeAndSlow(); /** Constructor with parameters */ explicit SafeAndSlow(const Solver & solver); /** Constructor with parameters */ SafeAndSlow(const Solver & solver, const Scalar maximumDistance, const Scalar stepSize); /** Virtual constructor */ virtual SafeAndSlow * clone() const; /** Solve gives all the roots found applying the root strategy */ ScalarCollection solve(const Function & function, const Scalar value); /** String converter */ String __repr__() const; private: } ; /* class SafeAndSlow */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAFEANDSLOW_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SamplingStrategy.hxx000066400000000000000000000036051307543307100314260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLINGSTRATEGY_HXX #define OPENTURNS_SAMPLINGSTRATEGY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/SamplingStrategyImplementation.hxx" #include "openturns/TypedInterfaceObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SamplingStrategy */ class OT_API SamplingStrategy : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ SamplingStrategy(); /** Constructor with parameters */ SamplingStrategy(const SamplingStrategyImplementation & implementation); /** Constructor with parameters */ SamplingStrategy(Implementation & p_implementation); /** Constructor with parameters */ explicit SamplingStrategy(const UnsignedInteger dimension); /** Generate a set of directions */ Sample generate() const; /** Dimension accessor */ void setDimension(const UnsignedInteger dimension); UnsignedInteger getDimension() const; /** String converter */ String __repr__() const; } ; /* class SamplingStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLINGSTRATEGY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SamplingStrategyImplementation.hxx000066400000000000000000000043751307543307100343410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLINGSTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_SAMPLINGSTRATEGYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SamplingStrategyImplementation */ class OT_API SamplingStrategyImplementation : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ explicit SamplingStrategyImplementation(const UnsignedInteger dimension = 0); /** Virtual constructor */ virtual SamplingStrategyImplementation * clone() const; /** Generate a set of directions */ virtual Sample generate() const; /** Generate a uniform random unit vector */ Point getUniformUnitVectorRealization(const UnsignedInteger dimension) const; /** Generate a uniform random unit vector */ Point getUniformUnitVectorRealization() const; /** Dimension accessor */ void setDimension(const UnsignedInteger dimension); UnsignedInteger getDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: UnsignedInteger dimension_; } ; /* class SamplingStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLINGSTRATEGYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/Simulation.hxx000066400000000000000000000112461307543307100302550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Simulation is a generic view of simulation methods for computing * probabilities and related quantities by sampling and estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SIMULATION_HXX #define OPENTURNS_SIMULATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/HistoryStrategy.hxx" #include "openturns/Compact.hxx" #include "openturns/Last.hxx" #include "openturns/Graph.hxx" #include "openturns/SimulationResult.hxx" #include "openturns/Event.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Simulation */ class OT_API Simulation : public PersistentObject { CLASSNAME; public: /** Constructor with parameters */ explicit Simulation(const Event & event, const Bool verbose = true, const HistoryStrategy & convergenceStrategy = Compact()); /** Virtual constructor */ virtual Simulation * clone() const; /** Event accessor */ Event getEvent() const; /** Result accessor */ SimulationResult getResult() const; /** Maximum sample size accessor */ void setMaximumOuterSampling(const UnsignedInteger maximumOuterSampling); UnsignedInteger getMaximumOuterSampling() const; /** Maximum coefficient of variation accessor */ void setMaximumCoefficientOfVariation(const Scalar maximumCoefficientOfVariation); Scalar getMaximumCoefficientOfVariation() const; /** Maximum standard deviation accessor */ void setMaximumStandardDeviation(const Scalar maximumStandardDeviation); Scalar getMaximumStandardDeviation() const; /** Block size accessor */ void setBlockSize(const UnsignedInteger blockSize); UnsignedInteger getBlockSize() const; /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Convergence strategy accessor */ void setConvergenceStrategy(const HistoryStrategy & convergenceStrategy); HistoryStrategy getConvergenceStrategy() const; /** String converter */ String __repr__() const; /** Performs the actual computation. */ virtual void run(); /** Draw the probability convergence at the given level */ Graph drawProbabilityConvergence(const Scalar level = ResourceMap::GetAsScalar("SimulationResult-DefaultConfidenceLevel")) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Progress callback */ typedef void (*ProgressCallback)(Scalar, void * data); void setProgressCallback(ProgressCallback callBack, void * data = 0); /** Stop callback */ typedef Bool (*StopCallback)(void * data); void setStopCallback(StopCallback callBack, void * data = 0); protected: /** Result accessor */ void setResult(const SimulationResult & result); /** Compute the block sample and the points that realized the event */ virtual Sample computeBlockSample(); /** For save/load mechanism*/ Simulation(const Bool verbose = true, const HistoryStrategy & convergenceStrategy = Compact()); friend class Factory; /** History strategy for the probability and variance estimate */ HistoryStrategy convergenceStrategy_; // Size of the atomic blocks of computation UnsignedInteger blockSize_; // The event we are computing the probability of Event event_; // Result of the simulation SimulationResult result_; // callbacks std::pair< ProgressCallback, void *> progressCallback_; std::pair< StopCallback, void *> stopCallback_; private: // Maximum number of outer iteration allowed UnsignedInteger maximumOuterSampling_; // Maximum coefficient of variation allowed for convergence Scalar maximumCoefficientOfVariation_; // Maximum standard deviation allowed for convergence Scalar maximumStandardDeviation_; // Do we have to echo all the intermediate results? Bool verbose_; } ; /* class Simulation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SIMULATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SimulationResult.hxx000066400000000000000000000064451307543307100314610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SimulationResult stores the simulation result * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SIMULATIONRESULT_HXX #define OPENTURNS_SIMULATIONRESULT_HXX #include "openturns/SimulationResultImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SimulationResult * SimulationResult stores the simulation result */ class OT_API SimulationResult : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ SimulationResult(); /** Standard constructor */ SimulationResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize); /** Constructor with parameters */ SimulationResult(const SimulationResultImplementation & implementation); /** Constructor with parameters */ SimulationResult(Implementation & p_implementation); /** Event accessor */ Event getEvent() const; /** Probability estimate accessor */ Scalar getProbabilityEstimate() const; void setProbabilityEstimate(const Scalar probabilityEstimate); /** Variance estimate accessor */ Scalar getVarianceEstimate() const; void setVarianceEstimate(const Scalar varianceEstimate); /** Coefficient of variation estimate accessor */ Scalar getCoefficientOfVariation() const; /** Standard deviation estimate accessor */ Scalar getStandardDeviation() const; /** Mean point conditioned to the event realization accessor */ Point getMeanPointInEventDomain() const; /** Importance factors accessor */ PointWithDescription getImportanceFactors() const; /** Draw the importance factors */ Graph drawImportanceFactors() const; /** Sample size accessor */ UnsignedInteger getOuterSampling() const; void setOuterSampling(const UnsignedInteger outerSampling); /** Block size accessor */ UnsignedInteger getBlockSize() const; void setBlockSize(const UnsignedInteger blockSize); /** Confidence length */ Scalar getConfidenceLength(const Scalar level = ResourceMap::GetAsScalar("SimulationResult-DefaultConfidenceLevel")) const; /** String converter */ String __repr__() const; private: }; // class Result END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SIMULATIONRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SimulationResultImplementation.hxx000066400000000000000000000072711307543307100343650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SIMULATIONRESULTIMPLEMENTATION_HXX #define OPENTURNS_SIMULATIONRESULTIMPLEMENTATION_HXX #include #include "openturns/PersistentObject.hxx" #include "openturns/Event.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SimulationResultImplementation * Implementation of SimulationResult */ class OT_API SimulationResultImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ SimulationResultImplementation(); /** Standard constructor */ SimulationResultImplementation(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize); /** Virtual constructor */ virtual SimulationResultImplementation * clone() const; /** Event accessor */ Event getEvent() const; void setEvent(const Event & event); /** Probability estimate accessor */ Scalar getProbabilityEstimate() const; void setProbabilityEstimate(const Scalar probabilityEstimate); /** Variance estimate accessor */ Scalar getVarianceEstimate() const; void setVarianceEstimate(const Scalar varianceEstimate); /** Coefficient of variation estimate accessor */ virtual Scalar getCoefficientOfVariation() const; /** Standard deviation estimate accessor */ virtual Scalar getStandardDeviation() const; /** Mean point conditioned to the event realization accessor */ Point getMeanPointInEventDomain() const; /** Importance factors accessor */ PointWithDescription getImportanceFactors() const; /** Draw the importance factors */ Graph drawImportanceFactors() const; /** Sample size accessor */ UnsignedInteger getOuterSampling() const; void setOuterSampling(const UnsignedInteger outerSampling); /** Block size accessor */ UnsignedInteger getBlockSize() const; void setBlockSize(const UnsignedInteger blockSize); /** Confidence length */ virtual Scalar getConfidenceLength(const Scalar level = ResourceMap::GetAsScalar("SimulationResult-DefaultConfidenceLevel")) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /* The event we are interested in */ Event event_; Scalar probabilityEstimate_; Scalar varianceEstimate_; UnsignedInteger outerSampling_; UnsignedInteger blockSize_; }; // class SimulationResultImplementation END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SIMULATIONRESULTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SimulationSensitivityAnalysis.hxx000066400000000000000000000104331307543307100342310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of SimulationResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SIMULATIONSENSITIVITYANALYSIS_HXX #define OPENTURNS_SIMULATIONSENSITIVITYANALYSIS_HXX #include #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/ComparisonOperator.hxx" #include "openturns/Function.hxx" #include "openturns/Graph.hxx" #include "openturns/Event.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/SimulationResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SimulationSensitivityAnalysis * Implementation of Simulation sensitivity analysis, it means computation of standardized importance factors */ class OT_API SimulationSensitivityAnalysis : public PersistentObject { CLASSNAME; public: typedef Function IsoProbabilisticTransformation; /** Default constructor */ SimulationSensitivityAnalysis(); /** Standard constructor */ SimulationSensitivityAnalysis(const Sample & inputSample, const Sample & outputSample, const IsoProbabilisticTransformation & transformation, const ComparisonOperator & comparisonOperator, const Scalar threshold); /** Standard constructor */ explicit SimulationSensitivityAnalysis(const Event & event); /** Standard constructor */ explicit SimulationSensitivityAnalysis(const SimulationResult & result); /** Virtual constructor */ virtual SimulationSensitivityAnalysis * clone() const; /** Mean point in event domain computation */ Point computeMeanPointInEventDomain() const; Point computeMeanPointInEventDomain(const Scalar threshold) const; /** Importance factors computation */ PointWithDescription computeImportanceFactors() const; PointWithDescription computeImportanceFactors(const Scalar threshold) const; public: /** Importance factors drawing */ Graph drawImportanceFactors() const; Graph drawImportanceFactorsRange(const Bool probabilityScale = true, const Scalar lower = -SpecFunc::MaxScalar, const Scalar upper = SpecFunc::MaxScalar) const; /** Input sample accessors */ Sample getInputSample() const; /** Output sample accessors */ Sample getOutputSample() const; /** Threshold accessors */ Scalar getThreshold() const; void setThreshold(const Scalar threshold); /** Iso-probabilistic transformation accessor */ IsoProbabilisticTransformation getTransformation() const; /** Comparison operator accessors */ ComparisonOperator getComparisonOperator() const; void setComparisonOperator(const ComparisonOperator & comparisonOperator); /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /* Input sample of the model */ Sample inputSample_; /* Associated output sample */ Sample outputSample_; /* Iso probabilistic transformation associated with the input sample distribution */ IsoProbabilisticTransformation transformation_; /* Comparison operator defining the event we are interested in */ ComparisonOperator comparisonOperator_; /* Main threshold of interest */ Scalar threshold_; }; // class SimulationSensitivityAnalysis END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SIMULATIONSENSITIVITYANALYSIS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SubsetSampling.hxx000066400000000000000000000105471307543307100310740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Subset simulation method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SUBSETSAMPLING_HXX #define OPENTURNS_SUBSETSAMPLING_HXX #include "openturns/Simulation.hxx" #include "openturns/StandardEvent.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API SubsetSampling : public Simulation { CLASSNAME public: /** Default Constructor */ SubsetSampling(); /** Constructor with parameters */ SubsetSampling(const Event & event, const Scalar proposalRange = ResourceMap::GetAsScalar("SubsetSampling-DefaultProposalRange"), const Scalar conditionalProbability = ResourceMap::GetAsScalar("SubsetSampling-DefaultConditionalProbability")); /** Virtual constructor */ virtual SubsetSampling * clone() const; /** The range of the uniform proposal pdf */ void setProposalRange(Scalar proposalRange); Scalar getProposalRange() const; /** Ratio parameter */ void setConditionalProbability(Scalar conditionalProbability); Scalar getConditionalProbability() const; /** Accessor to the achieved number of steps */ UnsignedInteger getNumberOfSteps(); /** Stepwise result accessors */ Point getThresholdPerStep() const; Point getGammaPerStep() const; Point getCoefficientOfVariationPerStep() const; Point getProbabilityEstimatePerStep() const; /** Keep event sample */ void setKeepEventSample(bool keepEventSample); /** Event input/output sample accessor */ Sample getEventInputSample() const; Sample getEventOutputSample() const; /** i-subset */ void setISubset(Bool iSubset); void setBetaMin(Scalar betaMin); /** Performs the actual computation. */ void run(); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Compute the block sample */ Sample computeBlockSample(); /** Compute the new threshold corresponding to the target failure probability */ Scalar computeThreshold(); /** compute probability estimate on the current sample */ Scalar computeProbability(Scalar probabilityEstimate, Scalar threshold); /** Sort new seeds */ void initializeSeed(Scalar threshold); /** Compute the correlation on markov chains at the current state of the algorithm */ Scalar computeVarianceGamma(Scalar currentFailureProbability, Scalar threshold); /** Generate new points in the conditional failure domain */ void generatePoints(Scalar threshold); // some parameters Scalar proposalRange_;// width of the proposal pdf Scalar conditionalProbability_;// target probability at each subset Bool iSubset_;// conditional pre-sampling Scalar betaMin_;// pre-sampling hypersphere exclusion radius Bool keepEventSample_;// do we keep the event sample ? // some results UnsignedInteger numberOfSteps_;// number of subset steps Point thresholdPerStep_;// intermediate thresholds Point gammaPerStep_;// intermediate gammas Point coefficientOfVariationPerStep_;// intermediate COVS Point probabilityEstimatePerStep_;// intermediate PFs Sample eventInputSample_;// event input sample Sample eventOutputSample_;// event output sample // attributes used for conveniency, not to be saved/loaded StandardEvent standardEvent_;// the algorithm happens in U UnsignedInteger dimension_;// input dimension Sample currentPointSample_;// X Sample currentLevelSample_;//f(X) UnsignedInteger seedNumber_;// number of seed points } ; /* class SubsetSampling */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SUBSETSAMPLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/SubsetSamplingResult.hxx000066400000000000000000000041711307543307100322670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Subset sampling result * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SUBSETSAMPLINGRESULT_HXX #define OPENTURNS_SUBSETSAMPLINGRESULT_HXX #include "openturns/SimulationResultImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API SubsetSamplingResult : public SimulationResultImplementation { CLASSNAME; public: /** Constructor with parameters */ SubsetSamplingResult(); /** Constructor with parameters */ SubsetSamplingResult(const Event & event, const Scalar probabilityEstimate, const Scalar varianceEstimate, const UnsignedInteger outerSampling, const UnsignedInteger blockSize, const Scalar coefficientOfVariation = 0.0); /** Virtual constructor */ virtual SubsetSamplingResult * clone() const; /** Coefficient of variation estimate accessor */ virtual Scalar getCoefficientOfVariation() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: Scalar coefficientOfVariation_; private: } ; /* class SubsetSamplingResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SUBSETSAMPLINGRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Simulation/openturns/Wilks.hxx000066400000000000000000000036401307543307100272210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Wilks is a static class that gives access to the computation of the sample size for guaranteed upper bound of quantile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WILKS_HXX #define OPENTURNS_WILKS_HXX #include "openturns/Point.hxx" #include "openturns/RandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Wilks */ class OT_API Wilks : public Object { public: /* Default constuctor */ explicit Wilks(const RandomVector & vector); /** Maximum sample size accessor */ static UnsignedInteger ComputeSampleSize(const Scalar quantileLevel, const Scalar confidenceLevel, const UnsignedInteger marginIndex = 0); /* Estimate an upper bound of the quantile of the random vector for the given quantile level and confidence level, using the marginIndex upper statistics */ Point computeQuantileBound(const Scalar quantileLevel, const Scalar confidenceLevel, const UnsignedInteger marginIndex = 0) const; private: /* Random vector for which one want to compute a quantile */ RandomVector vector_; } ; /* class Wilks */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WILKS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/TaylorExpansionMoments.cxx000066400000000000000000000343231307543307100264460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TaylorExpansionMoments implements Taylor expansion for moments estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/TaylorExpansionMoments.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/Function.hxx" #include "openturns/Pointer.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SobolIndicesAlgorithmImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Pointer Implementation; CLASSNAMEINIT(TaylorExpansionMoments); static const Factory Factory_TaylorExpansionMoments; /* * @class TaylorExpansionMoments * TaylorExpansionMoments estimates the mean and covariance of a random vector Y=G(X) by computing the Taylor approximation of G */ /* Constructor with parameters */ TaylorExpansionMoments::TaylorExpansionMoments(const RandomVector & limitStateVariable) : PersistentObject(), limitStateVariable_(limitStateVariable), meanInputVector_(0), valueAtMean_(0), gradientAtMean_(0, 0), hessianAtMean_(0, 0), isAlreadyComputedValue_(false), isAlreadyComputedGradient_(false), isAlreadyComputedHessian_(false), isAlreadyComputedMeanFirstOrder_(false), isAlreadyComputedMeanSecondOrder_(false), isAlreadyComputedCovariance_(false), isAlreadyComputedImportanceFactors_(false), inputCovariance_(0), meanFirstOrder_(0), meanSecondOrder_(0), covariance_(0), importanceFactors_(0) { /* Check if the given random vector is a composite random vector, which is mandatory */ if (!limitStateVariable.isComposite()) throw InvalidArgumentException(HERE) << "Quadratic cumul algorithm requires a composite random vector as an input"; /** Check if the given composite random vector is based on a function with a gradient implementation */ if (!limitStateVariable.getImplementation()->getFunction().getGradient()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Quadratic cumul algorithm requires a composite random vector based on a function with an actual gradient implementation"; /** Check if the given composite random vector is based on a function with a gradient implementation */ if (!limitStateVariable.getImplementation()->getFunction().getHessian()->isActualImplementation()) throw InvalidArgumentException(HERE) << "Quadratic cumul algorithm requires a composite random vector based on a function with an actual hessian implementation"; } /* Virtual constructor */ TaylorExpansionMoments * TaylorExpansionMoments::clone() const { return new TaylorExpansionMoments(*this); } /* String converter */ String TaylorExpansionMoments::__repr__() const { return OSS() << "limitStateVariable=" << limitStateVariable_ << " meanInputVector=" << meanInputVector_ << " hessianAtMean=" << hessianAtMean_ << " gradientAtMean=" << gradientAtMean_ << " valueAtMean=" << valueAtMean_ << " meanFirstOrder=" << meanFirstOrder_ << " meanSecondOrder=" << meanSecondOrder_ << " covariance=" << covariance_ << " inputCovariance=" << inputCovariance_ << " importanceFactors=" << importanceFactors_; } /* limitStateVariable accessor */ RandomVector TaylorExpansionMoments::getLimitStateVariable() const { return limitStateVariable_; } /* meanFirstOrder accessor */ Point TaylorExpansionMoments::getMeanFirstOrder() const { if(!isAlreadyComputedMeanFirstOrder_) computeMeanFirstOrder(); return meanFirstOrder_; } /* meanSecondOrder accessor */ Point TaylorExpansionMoments::getMeanSecondOrder() const { if(!isAlreadyComputedMeanSecondOrder_) computeMeanSecondOrder(); return meanSecondOrder_; } /* covariance accessor */ CovarianceMatrix TaylorExpansionMoments::getCovariance() const { if(!isAlreadyComputedCovariance_) computeCovariance(); return covariance_; } /* importance factors accessor */ PointWithDescription TaylorExpansionMoments::getImportanceFactors() const { if(!isAlreadyComputedImportanceFactors_) computeImportanceFactors(); return importanceFactors_; } /* Value at mean accessor */ Point TaylorExpansionMoments::getValueAtMean() const { return valueAtMean_; } /* Gradient at mean accessor */ Matrix TaylorExpansionMoments::getGradientAtMean() const { return gradientAtMean_; } /* Hessian at mean accessor */ SymmetricTensor TaylorExpansionMoments::getHessianAtMean() const { return hessianAtMean_; } /* ImportanceFactors graph */ Graph TaylorExpansionMoments::drawImportanceFactors() const { // To ensure that the importance factors are up to date getImportanceFactors(); OSS oss; oss << "Importance Factors from Taylor expansions - " << limitStateVariable_.getDescription()[0]; return SobolIndicesAlgorithmImplementation::DrawImportanceFactors(importanceFactors_, String(oss)); } /* the function that computes the first order evaluation of the mean vector and the matrix covariance */ void TaylorExpansionMoments::computeMeanFirstOrder() const { if (!isAlreadyComputedValue_) { meanInputVector_ = limitStateVariable_.getImplementation()->getAntecedent()->getMean(); valueAtMean_ = limitStateVariable_.getImplementation()->getFunction().operator()(meanInputVector_); isAlreadyComputedValue_ = true; } /* we compute here the meanFirstOrder_ */ meanFirstOrder_ = valueAtMean_; isAlreadyComputedMeanFirstOrder_ = true; } // TaylorExpansionMoments::computeMeanFirstOrder() /* the function that computes the first order evaluation of the mean vector and the matrix covariance */ void TaylorExpansionMoments::computeCovariance() const { inputCovariance_ = limitStateVariable_.getImplementation()->getAntecedent()->getCovariance(); if (!isAlreadyComputedGradient_) { meanInputVector_ = limitStateVariable_.getImplementation()->getAntecedent()->getMean(); gradientAtMean_ = limitStateVariable_.getImplementation()->getFunction().gradient(meanInputVector_); isAlreadyComputedGradient_ = true; } /* we compute here the covariance_ hessianAtMean_ is symmetrical The following straightforward implementation does'nt work because OT has no way to discover that the resulting matrice is square and symmetric only by checking the type of the arguments setCovariance(getGradientAtMean().transpose() * getInputCovariance() * getGradientAtMean()); We use an intermediate rectangular matrix, then we make an element-wise copy of this matrix into the output covariance matrix */ /* a matrix, in fact a square symmetric matrix but we don't know it from its C++ definition */ /* outputCovariance is a pxp matrix */ const UnsignedInteger inputDimension = gradientAtMean_.getNbRows(); const UnsignedInteger outputDimension = gradientAtMean_.getNbColumns(); covariance_ = CovarianceMatrix(outputDimension); /* we unroll the matrix multiplications transpose(gradient).covariance.gradient */ for (UnsignedInteger i = 0; i < outputDimension; ++i) for (UnsignedInteger j = 0; j < outputDimension; ++j) { covariance_(i, j) = 0.0; for (UnsignedInteger k = 0; k < inputDimension; ++k) for (UnsignedInteger l = 0; l < inputDimension; ++l) covariance_(i, j) += gradientAtMean_(l, i) * inputCovariance_(l, k) * gradientAtMean_(k, j); } /* We check that outputCovariance is really symmetric positive definite */ if (!covariance_.isPositiveDefinite()) LOGWARN(OSS() << "Warning! The covariance matrix computed by quadratic cumul is not positive definite outputCovariance=" << covariance_); isAlreadyComputedCovariance_ = true; } // TaylorExpansionMoments::computeCovariance() /* the function that computes the importance factors only in the scalar case */ void TaylorExpansionMoments::computeImportanceFactors() const { /* importance factors are evaluated only if the outputRandomVector is scalar */ /* this case is tested with the dimension of limitStateVariable_ : it must be equal to 1 in the right case */ if (limitStateVariable_.getDimension() != 1) throw InvalidDimensionException(HERE) << "The importance factors are computed only if the output random vector is scalar"; computeCovariance(); /* we compute here the importance factors */ /* in this scalar case, gradientAtMean is a Point */ const UnsignedInteger dimension = gradientAtMean_.getNbRows(); /* in this scalar case, importance factors is a Point, defined as importanceFactors = gradient .* inputCovariance * gradient / outputCovariance, where .* means an element-wise multiplication between vectors */ importanceFactors_ = PointWithDescription(dimension, 0.0); // This line looks strange, but it is here to ensure that the covariance has actually been computed getCovariance(); for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < dimension; ++j) importanceFactors_[i] += inputCovariance_(i, j) * gradientAtMean_(j, 0); importanceFactors_[i] *= gradientAtMean_(i, 0) / covariance_(0, 0); } importanceFactors_.setDescription(limitStateVariable_.getImplementation()->getAntecedent()->getDescription()); isAlreadyComputedImportanceFactors_ = true; } // TaylorExpansionMoments::computeImportanceFactors() /* the function that computes the second order evaluation of the mean vector */ void TaylorExpansionMoments::computeMeanSecondOrder() const { inputCovariance_ = limitStateVariable_.getImplementation()->getAntecedent()->getCovariance(); if (!isAlreadyComputedValue_) { meanInputVector_ = limitStateVariable_.getImplementation()->getAntecedent()->getMean(); valueAtMean_ = limitStateVariable_.getImplementation()->getFunction().operator()(meanInputVector_); isAlreadyComputedValue_ = true; } if (!isAlreadyComputedHessian_) { meanInputVector_ = limitStateVariable_.getImplementation()->getAntecedent()->getMean(); hessianAtMean_ = limitStateVariable_.getImplementation()->getFunction().hessian(meanInputVector_); isAlreadyComputedHessian_ = true; } /* we compute here the meanSecondOrder_ */ /* tensoriel writting : setCovariance(getGradientAtMean() + 0.5*getHessianAtMean().dotdot(getInputCovariance())); */ /* developped formula */ const UnsignedInteger rowDimension = hessianAtMean_.getNbRows(); /* i */ const UnsignedInteger sheetDimension = hessianAtMean_.getNbSheets(); /* k */ meanSecondOrder_ = valueAtMean_; /* loop on k */ for (UnsignedInteger k = 0; k < sheetDimension; ++k) { Scalar kSecondOrderContribution = 0.0; /* loop on i */ for (UnsignedInteger i = 0; i < rowDimension; ++i) { kSecondOrderContribution += 0.5 * inputCovariance_(i, i) * hessianAtMean_(i, i, k); /* loop on j */ for (UnsignedInteger j = 0; j < i; ++j) kSecondOrderContribution += inputCovariance_(i, j) * hessianAtMean_(i, j, k); }/* end loop on i */ meanSecondOrder_[k] += kSecondOrderContribution; } /* end loop on k */ isAlreadyComputedMeanSecondOrder_ = true; } // TaylorExpansionMoments::computeMeanSecondOrder() /* Method save() stores the object through the StorageManager */ void TaylorExpansionMoments::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "limitStateVariable_", limitStateVariable_ ); adv.saveAttribute( "meanInputVector_", meanInputVector_ ); adv.saveAttribute( "valueAtMean_", valueAtMean_ ); adv.saveAttribute( "gradientAtMean_", gradientAtMean_ ); adv.saveAttribute( "hessianAtMean_", hessianAtMean_ ); adv.saveAttribute( "isAlreadyComputedValue_", isAlreadyComputedValue_ ); adv.saveAttribute( "isAlreadyComputedGradient_", isAlreadyComputedGradient_ ); adv.saveAttribute( "isAlreadyComputedHessian_", isAlreadyComputedHessian_ ); adv.saveAttribute( "isAlreadyComputedMeanFirstOrder_", isAlreadyComputedMeanFirstOrder_ ); adv.saveAttribute( "isAlreadyComputedMeanSecondOrder_", isAlreadyComputedMeanSecondOrder_ ); adv.saveAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); adv.saveAttribute( "isAlreadyComputedImportanceFactors_", isAlreadyComputedImportanceFactors_ ); adv.saveAttribute( "inputCovariance_", inputCovariance_ ); adv.saveAttribute( "meanFirstOrder_", meanFirstOrder_ ); adv.saveAttribute( "meanSecondOrder_", meanSecondOrder_ ); adv.saveAttribute( "covariance_", covariance_ ); adv.saveAttribute( "importanceFactors_", importanceFactors_ ); } /* Method load() reloads the object from the StorageManager */ void TaylorExpansionMoments::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "limitStateVariable_", limitStateVariable_ ); adv.loadAttribute( "meanInputVector_", meanInputVector_ ); adv.loadAttribute( "valueAtMean_", valueAtMean_ ); adv.loadAttribute( "gradientAtMean_", gradientAtMean_ ); adv.loadAttribute( "hessianAtMean_", hessianAtMean_ ); adv.loadAttribute( "isAlreadyComputedValue_", isAlreadyComputedValue_ ); adv.loadAttribute( "isAlreadyComputedGradient_", isAlreadyComputedGradient_ ); adv.loadAttribute( "isAlreadyComputedHessian_", isAlreadyComputedHessian_ ); adv.loadAttribute( "isAlreadyComputedMeanFirstOrder_", isAlreadyComputedMeanFirstOrder_ ); adv.loadAttribute( "isAlreadyComputedMeanSecondOrder_", isAlreadyComputedMeanSecondOrder_ ); adv.loadAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); adv.loadAttribute( "isAlreadyComputedImportanceFactors_", isAlreadyComputedImportanceFactors_ ); adv.loadAttribute( "inputCovariance_", inputCovariance_ ); adv.loadAttribute( "meanFirstOrder_", meanFirstOrder_ ); adv.loadAttribute( "meanSecondOrder_", meanSecondOrder_ ); adv.loadAttribute( "covariance_", covariance_ ); adv.loadAttribute( "importanceFactors_", importanceFactors_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/000077500000000000000000000000001307543307100242215ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/CMakeLists.txt000066400000000000000000000010631307543307100267610ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (DistributionTransformation.cxx) ot_install_header_file (OTTransformation.hxx) ot_install_header_file (DistributionTransformation.hxx) # Recurse in subdirectories add_subdirectory (MarginalTransformation) add_subdirectory (NatafEllipticalCopula) add_subdirectory (NatafEllipticalDistribution) add_subdirectory (NatafIndependentCopula) add_subdirectory (Rosenblatt) add_subdirectory (ProcessTransformation)openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/DistributionTransformation.cxx000066400000000000000000000144021307543307100323540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Isoprobabilistic transformation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DistributionTransformation.hxx" #include "openturns/RosenblattEvaluation.hxx" #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/MarginalTransformationHessian.hxx" #include "openturns/IdentityFunction.hxx" #include "openturns/ComposedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection DistributionCollection; CLASSNAMEINIT(DistributionTransformation); /* Default constructor */ DistributionTransformation::DistributionTransformation () : Function() { // Nothing to do } /* Parameter constructor */ DistributionTransformation::DistributionTransformation (const Distribution & distribution, const Distribution & measure) : Function(Build(distribution, measure)) , left_(distribution) , right_(measure) { // Nothing to do } /* Parameter constructor */ Function DistributionTransformation::Build (const Distribution & distribution, const Distribution & measure) { Function transformation; LOGINFO("Build the iso-probabilistic transformation"); const Bool noTransformation = (measure == distribution); const UnsignedInteger dimension = distribution.getDimension(); if (noTransformation) { // The first case is when distribution == measure, in which case there is // no isoprobabilistic transformation to introduce. LOGINFO(OSS(false) << "Same distribution for input vector=" << distribution << " and basis=" << measure); transformation = IdentityFunction(dimension); } else { // The second case is when both distributions share the same copula // in which case the transformation is made of maginal transformations if (distribution.getCopula() == measure.getCopula()) { // We use empty collections to avoid the construction of default distributions LOGINFO("Same copula for input vector and basis"); DistributionCollection marginalX(0); DistributionCollection marginalZ(0); for (UnsignedInteger i = 0; i < dimension; ++i) { marginalX.add(distribution.getMarginal(i)); marginalZ.add(measure.getMarginal(i)); } // The distributions have an independent copula, they can be converted one into another by marginal transformation. T is such that T(X) = Z const MarginalTransformationEvaluation evaluationT(MarginalTransformationEvaluation(marginalX, marginalZ)); const MarginalTransformationGradient gradientT(evaluationT); const MarginalTransformationHessian hessianT(evaluationT); transformation = Function(evaluationT.clone(), gradientT.clone(), hessianT.clone()); } // The third case is when both distributions share the same standard // distribution in which case the transformation is made of // isoprobabilistic transformations else { if (distribution.getStandardDistribution() == measure.getStandardDistribution()) { LOGINFO("Same standard space for input vector and basis"); // The distributions share the same standard space, it is thus possible to transform one into the other by composition between their isoprobabilistic transformations. T = T^{-1}_Z o T_X and T^{-1} = T^{-1}_X o T_Z const Function TX(distribution.getIsoProbabilisticTransformation()); const Function TinvZ(measure.getInverseIsoProbabilisticTransformation()); transformation = ComposedFunction(TinvZ, TX); } // The fourth and last case is when the standard spaces are different // We use the Rosenblatt transformation for each distribution with non-normal // standard space else { LOGINFO("Different standard space for input vector and basis"); Function TX; Function invTX; if (distribution.getStandardDistribution().hasIndependentCopula()) { LOGINFO("Normal standard space for input vector"); TX = distribution.getIsoProbabilisticTransformation(); } else { LOGINFO("Non-normal standard space for input vector"); TX = Function(FunctionImplementation(RosenblattEvaluation(distribution.getImplementation()).clone())); } Function TZ; Function invTZ; if (measure.getStandardDistribution().hasIndependentCopula()) { LOGINFO("Normal standard space for basis"); invTZ = measure.getInverseIsoProbabilisticTransformation(); } else { LOGINFO("Non-normal standard space for basis"); invTZ = Function(FunctionImplementation(InverseRosenblattEvaluation(measure.getImplementation()).clone())); } transformation = ComposedFunction(invTZ, TX); } } // Non-independent input copula } return transformation; } /* Parameter constructor */ DistributionTransformation DistributionTransformation::inverse() const { return DistributionTransformation(right_, left_); } /* Comparison operator */ Bool DistributionTransformation::operator ==(const DistributionTransformation & other) const { return true; } /* String converter */ String DistributionTransformation::__repr__() const { OSS oss; oss << "class=" << DistributionTransformation::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } String DistributionTransformation::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/000077500000000000000000000000001307543307100307025ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/CMakeLists.txt000066400000000000000000000010361307543307100334420ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (MarginalTransformationEvaluation.cxx) ot_add_source_file (MarginalTransformationGradient.cxx) ot_add_source_file (MarginalTransformationHessian.cxx) ot_install_header_file (MarginalTransformationGradient.hxx) ot_install_header_file (MarginalTransformationEvaluation.hxx) ot_install_header_file (MarginalTransformationHessian.hxx) ot_install_header_file (OTMarginalTransformation.hxx) MarginalTransformationEvaluation.cxx000066400000000000000000000535611307543307100400720ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/Log.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MarginalTransformationEvaluation); static const Factory Factory_MarginalTransformationEvaluation; /* Default constructor */ MarginalTransformationEvaluation::MarginalTransformationEvaluation(): EvaluationImplementation(), inputDistributionCollection_(), outputDistributionCollection_(), direction_() { // Nothing to do } /* Parameter constructor */ MarginalTransformationEvaluation::MarginalTransformationEvaluation(const DistributionCollection & inputDistributionCollection, const DistributionCollection & outputDistributionCollection, const Bool simplify): EvaluationImplementation(), inputDistributionCollection_(inputDistributionCollection), outputDistributionCollection_(outputDistributionCollection), direction_(FROMTO), simplifications_(inputDistributionCollection.getSize(), 0), expressions_(inputDistributionCollection.getSize()) { const UnsignedInteger size = inputDistributionCollection.getSize(); // Check that the collections of input and output distributions have the same size if (outputDistributionCollection_.getSize() != size) throw InvalidArgumentException(HERE) << "Error: a MarginalTransformationEvaluation cannot be built using collections of input and output distributions of different size"; // First, check that the distributions are all 1D for (UnsignedInteger i = 0; i < size; ++i) { if (inputDistributionCollection_[i].getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: a MarginalTransformationEvaluation cannot be built using distributions with dimension > 1."; if (outputDistributionCollection_[i].getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: a MarginalTransformationEvaluation cannot be built using distributions with dimension > 1."; } // Second, build the description of the transformation Description description(Description::BuildDefault(size, "x")); description.add(Description::BuildDefault(size, "y")); setDescription(description); if (simplify) { // Third, look for possible simplifications for (UnsignedInteger i = 0; i < size; ++i) { const Distribution inputDistribution(inputDistributionCollection[i]); const Distribution outputDistribution(outputDistributionCollection[i]); const String xName(getInputDescription()[i]); const String yName(getOutputDescription()[i]); const String inputClass(inputDistribution.getImplementation()->getClassName()); const String outputClass(outputDistribution.getImplementation()->getClassName()); const Point inputParameters(inputDistribution.getParametersCollection()[0]); const Point outputParameters(outputDistribution.getParametersCollection()[0]); // The first obvious simplification: the distributions share the same standard representative. if (inputClass == outputClass) { const Distribution inputStandardDistribution(inputDistribution.getStandardRepresentative()); const Point inputStandardRepresentativeParameters(inputStandardDistribution.getParametersCollection()[0]); const Distribution outputStandardDistribution(outputDistribution.getStandardRepresentative()); const Point outputStandardRepresentativeParameters(outputStandardDistribution.getParametersCollection()[0]); const Scalar difference = (inputStandardRepresentativeParameters - outputStandardRepresentativeParameters).norm(); const Bool sameParameters = difference < ResourceMap::GetAsScalar("MarginalTransformationEvaluation-ParametersEpsilon"); if (sameParameters) { // The transformation is the composition of two affine transformations: (input distribution->standard representative of input distribution) and (standard representative of output distribution->output distribution) // The two affine transformations are obtained using quantiles in order to deal with distributions with no moments const Scalar q25Input = inputDistribution.computeQuantile(0.25)[0]; const Scalar q75Input = inputDistribution.computeQuantile(0.75)[0]; const Scalar q25Output = outputDistribution.computeQuantile(0.25)[0]; const Scalar q75Output = outputDistribution.computeQuantile(0.75)[0]; const Scalar a = 0.5 * (q75Output + q25Output); // Here, b > 0 by construction const Scalar b = (q75Output - q25Output) / (q75Input - q25Input); const Scalar c = -0.5 * (q75Input + q25Input); OSS oss; oss.setPrecision(20); // First case, b = 1: we don't need to center the input variable if (b == 1.0) { const Scalar alpha = a + c; if (alpha != 0.0) oss << alpha << "+"; oss << xName; } // b == 1 else { if (a != 0.0) oss << a << "+"; oss << b << "*"; if (c != 0.0) { oss << "(" << xName; if (c > 0.0) oss << "+"; if (c < 0.0) oss << "-"; oss << std::abs(c) << ")"; } // |c| != 0 else oss << xName; } // b != 1 const String formula(oss); expressions_[i] = SymbolicFunction(xName, formula); simplifications_[i] = 1; } // sameParameters } // inputClass == outputClass if (((inputClass == "ChiSquare") || (inputClass == "Exponential") || (inputClass == "Gamma")) && ((outputClass == "ChiSquare") || (outputClass == "Exponential") || (outputClass == "Gamma"))) { Scalar k1 = -1.0; Scalar lambda1 = -1.0; Scalar gamma1 = -1.0; if (inputClass == "ChiSquare") { k1 = 0.5 * inputParameters[0]; lambda1 = 0.5 * inputParameters[0]; gamma1 = 0.0; } else if (inputClass == "Exponential") { k1 = 1.0; lambda1 = inputParameters[0]; gamma1 = inputParameters[1]; } else { k1 = inputParameters[0]; lambda1 = inputParameters[1]; gamma1 = inputParameters[2]; } Scalar k2 = -1.0; Scalar lambda2 = -1.0; Scalar gamma2 = -1.0; if (outputClass == "ChiSquare") { k2 = 0.5 * outputParameters[0]; lambda2 = 0.5 * outputParameters[0]; gamma2 = 0.0; } else if (outputClass == "Exponential") { k2 = 1.0; lambda2 = outputParameters[0]; gamma2 = outputParameters[1]; } else { k2 = outputParameters[0]; lambda2 = outputParameters[1]; gamma2 = outputParameters[2]; } // There is a simplification only if k1 == k2 if (k1 == k2) { OSS oss; oss.setPrecision(20); oss << "max(0.0, " << gamma2 + log(lambda2) << " + " << lambda1 << " * "; if (gamma1 == 0.0) oss << xName << ")"; else { oss << "(" << xName; if (gamma1 > 0.0) oss << " - " << gamma1 << "))"; else oss << " + " << -gamma1 << "))"; } const String formula(oss); expressions_[i] = SymbolicFunction(xName, formula); simplifications_[i] = 1; } // k1 == k2 } // ChiSquare || Exponential || Gamma vs ChiSquare || Exponential || Gamma // Normal -> LogNormal simplification if ((inputClass == "Normal") && (outputClass == "LogNormal")) { const Scalar mu1 = inputParameters[0]; const Scalar sigma1 = inputParameters[1]; const Scalar muLog2 = outputParameters[0]; const Scalar sigmaLog2 = outputParameters[1]; const Scalar gamma2 = outputParameters[2]; OSS oss; oss.setPrecision(20); if (gamma2 != 0.0) oss << gamma2 << " + "; oss << "exp("; if (muLog2 != 0.0) oss << muLog2 << " + "; if (sigmaLog2 != 1.0) oss << sigmaLog2 << " * "; if (mu1 != 0.0) oss << "(" << xName << " - " << mu1 << ")"; else oss << xName; if (sigma1 != 1.0) oss << " / " << sigma1; oss << ")"; const String formula(oss); expressions_[i] = SymbolicFunction(xName, formula); simplifications_[i] = 1; } // Normal -> LogNormal simplification // LogNormal -> Normal simplification if ((inputClass == "LogNormal") && (outputClass == "Normal")) { const Scalar muLog1 = inputParameters[0]; const Scalar sigmaLog1 = inputParameters[1]; const Scalar gamma1 = inputParameters[2]; const Scalar mu2 = outputParameters[0]; const Scalar sigma2 = outputParameters[1]; OSS oss; oss.setPrecision(20); if (mu2 != 0.0) oss << mu2 << " + "; if (sigma2 != 1.0) oss << sigma2 << " * "; if (muLog1 != 0.0) oss << "("; oss << "log(max(" << SpecFunc::MinScalar << ", " << xName; if (gamma1 != 0.0) oss << " - " << gamma1; oss << "))"; if (muLog1 != 0.0) oss << " - " << muLog1 << ")"; if (sigmaLog1 != 1.0) oss << " / " << sigmaLog1; const String formula(oss); expressions_[i] = SymbolicFunction(xName, formula); simplifications_[i] = 1; } // LogNormal -> Normal simplification } // Loop over the components } // Simplifications } /* Parameter constructor */ MarginalTransformationEvaluation::MarginalTransformationEvaluation(const DistributionCollection & distributionCollection, const UnsignedInteger direction): EvaluationImplementation(), inputDistributionCollection_(0), outputDistributionCollection_(0), direction_(direction), simplifications_(distributionCollection.getSize(), 0), expressions_(distributionCollection.getSize()) { switch (direction) { case FROM: // From the given marginals to the uniform ones inputDistributionCollection_ = distributionCollection; outputDistributionCollection_ = DistributionCollection(distributionCollection.getSize(), Uniform(0.0, 1.0)); break; case TO: // From uniform marginals to the given ones inputDistributionCollection_ = DistributionCollection(distributionCollection.getSize(), Uniform(0.0, 1.0)); outputDistributionCollection_ = distributionCollection; break; default: throw InvalidArgumentException(HERE) << "Error: wrong value given for direction"; } *this = MarginalTransformationEvaluation(inputDistributionCollection_, outputDistributionCollection_); // We must overwrite the value of direction_ by the given one, as the call of the general constructor has set the value to FROMTO direction_ = direction; // Get all the parameters // The notion of parameters is used only for transformation from or to a standard space, so we have to extract the parameters of either the input distributions or the output distribution depending on the direction const UnsignedInteger size = distributionCollection.getSize(); Point parameter(0); Description parameterDescription(0); for (UnsignedInteger i = 0; i < size; ++i) { parameter.add(distributionCollection[i].getParameter()); parameterDescription.add(distributionCollection[i].getParameterDescription()); } // get all the parameters setParameter(parameter); setParameterDescription(parameterDescription); } /* Virtual constructor */ MarginalTransformationEvaluation * MarginalTransformationEvaluation::clone() const { return new MarginalTransformationEvaluation(*this); } /* Evaluation */ Point MarginalTransformationEvaluation::operator () (const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); Point result(dimension); // The marginal transformation apply G^{-1} o F to each component of the input, where F is the ith input CDF and G the ith output CDf const Scalar tailThreshold = ResourceMap::GetAsScalar( "MarginalTransformationEvaluation-DefaultTailThreshold" ); for (UnsignedInteger i = 0; i < dimension; ++i) { if (simplifications_[i]) result[i] = expressions_[i](Point(1, inP[i]))[0]; else { Scalar inputCDF = inputDistributionCollection_[i].computeCDF(inP[i]); // For accuracy reason, check if we are in the upper tail of the distribution const Bool upperTail = inputCDF > tailThreshold; if (upperTail) inputCDF = inputDistributionCollection_[i].computeComplementaryCDF(inP[i]); // The upper tail CDF is defined by CDF(x, upper) = P(X>x) // The upper tail quantile is defined by Quantile(CDF(x, upper), upper) = x const Scalar q = outputDistributionCollection_[i].computeQuantile(inputCDF, upperTail)[0]; result[i] = q; } } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. * * F is the CDF of the ith marginal input distribution * Q is the quantile function of the ith output distribution * * F : RxRs -> [0,1] * (x, pf) -> F(x, pf) * * Q : [0,1]xRt -> R * (y, pq) -> G(y, pq) * * Let p = [pg, pf] be the parameter vector of H, with: * * H : RmxRt+s -> Rn * (x, p) -> Q(F(x, pq), pf) * * We have: * * (dH/dp)(x, p) = [(dQ/dy)(F(x, pf), pq) . (dF/dpf)(x, pf), 0] + [0, (dQ/dpq)(F(x, pf), pq)] * * The computation of (dQ/dy) leads to: * * (dQ/dy)(y, pq) = 1 / (pdf(Q(y, pq))) * * where pdf is the PDF of the distribution associated with the quantile function Q. * * The computation of (dQ/dpq) leads to: * * (dQ/dpq)(y, pq) = -(dcdf/dpq)(Q(y, pq), pq) / pdf(Q(y, pq), pq) * * where dcdf/dpq is the gradient according to its parameters of the CDF of the distribution * associated with the quantile function Q. * * the needed gradient is [(dH/dp)(x,p)]^t * */ Matrix MarginalTransformationEvaluation::parameterGradient(const Point & inP) const { const Point parameters(getParameter()); const UnsignedInteger parametersDimension = parameters.getDimension(); const UnsignedInteger inputDimension = getInputDimension(); Matrix result(parametersDimension, inputDimension); UnsignedInteger rowIndex = 0; switch (direction_) { case FROM: /* * Here, we suppose that pq is empty, so dQ/dpq = 0 * For each row, store (dF/dpf)(x, pf) / pdf(Q(F(x, pf))) */ for (UnsignedInteger j = 0; j < inputDimension; ++j) { const Point x(1, inP[j]); const Distribution inputMarginal(inputDistributionCollection_[j]); const Distribution outputMarginal(outputDistributionCollection_[j]); const Scalar denominator = outputMarginal.computePDF(outputMarginal.computeQuantile(inputMarginal.computeCDF(x))); if (denominator > 0.0) { try { const Point normalizedCDFGradient(inputMarginal.computeCDFGradient(x) * (1.0 / denominator)); const UnsignedInteger marginalParametersDimension = normalizedCDFGradient.getDimension(); for (UnsignedInteger i = 0; i < marginalParametersDimension; ++i) { result(rowIndex, j) = normalizedCDFGradient[i]; ++rowIndex; } } catch (NotYetImplementedException &) { LOGWARN(OSS() << "Cannot compute the gradient according to the parameters of the " << j << "th marginal distribution"); } } } // FROM return result; case TO: /* * Here, we suppose that pf is empty, so dF/dpf = 0 * For each row, store -(dcdf/dpq)(Q(F(x), pq), pq) / pdf(Q(F(x), pq), pq) */ for (UnsignedInteger j = 0; j < inputDimension; ++j) { const Point x(1, inP[j]); const Distribution inputMarginal(inputDistributionCollection_[j]); const Distribution outputMarginal(outputDistributionCollection_[j]); const Point q(outputMarginal.computeQuantile(inputMarginal.computeCDF(x))); const Scalar denominator = outputMarginal.computePDF(q); if (denominator > 0.0) { try { const Point normalizedCDFGradient(outputMarginal.computeCDFGradient(q) * (-1.0 / denominator)); const UnsignedInteger marginalParametersDimension = normalizedCDFGradient.getDimension(); for (UnsignedInteger i = 0; i < marginalParametersDimension; ++i) { result(rowIndex, j) = normalizedCDFGradient[i]; ++rowIndex; } } catch (NotYetImplementedException &) { LOGWARN(OSS() << "Cannot compute the gradient according to the parameters of the " << j << "th marginal distribution"); } } } // TO return result; default: // Should never go there throw NotYetImplementedException(HERE) << "In MarginalTransformationEvaluation::parameterGradient(const Point & inP) const"; } } /* Accessor for input point dimension */ UnsignedInteger MarginalTransformationEvaluation::getInputDimension() const { return inputDistributionCollection_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger MarginalTransformationEvaluation::getOutputDimension() const { return inputDistributionCollection_.getSize(); } /* Direction accessor */ void MarginalTransformationEvaluation::setDirection(const TranformationDirection direction) { direction_ = direction; } UnsignedInteger MarginalTransformationEvaluation::getDirection() const { return direction_; } /* Input distribution collection accessor */ void MarginalTransformationEvaluation::setInputDistributionCollection(const DistributionCollection & inputDistributionCollection) { inputDistributionCollection_ = inputDistributionCollection; } MarginalTransformationEvaluation::DistributionCollection MarginalTransformationEvaluation::getInputDistributionCollection() const { return inputDistributionCollection_; } /* Output distribution collection accessor */ void MarginalTransformationEvaluation::setOutputDistributionCollection(const DistributionCollection & outputDistributionCollection) { outputDistributionCollection_ = outputDistributionCollection; } MarginalTransformationEvaluation::DistributionCollection MarginalTransformationEvaluation::getOutputDistributionCollection() const { return outputDistributionCollection_; } /* Simplifications accessor */ Collection MarginalTransformationEvaluation::getSimplifications() const { return simplifications_; } /* expressions accessor */ Collection MarginalTransformationEvaluation::getExpressions() const { return expressions_; } /* String converter */ String MarginalTransformationEvaluation::__repr__() const { OSS oss(true); oss << "class=" << MarginalTransformationEvaluation::GetClassName() << " description=" << getDescription() << " input marginals=" << inputDistributionCollection_ << " output marginals=" << outputDistributionCollection_ << " simplifications=" << simplifications_ << " expressions=" << expressions_.__repr__(); return oss; } String MarginalTransformationEvaluation::__str__(const String & offset) const { OSS oss(false); const String name(getName()); if (hasVisibleName()) oss << offset << "Marginal transformation " << getName() << " :\n"; const Description inputDescription(getInputDescription()); const Description outputDescription(getOutputDescription()); UnsignedInteger length = 0; for (UnsignedInteger i = 0; i < inputDistributionCollection_.getSize(); ++i) { const UnsignedInteger l = outputDescription[i].length(); if (l > length) length = l; } for (UnsignedInteger i = 0; i < inputDistributionCollection_.getSize(); ++i) { oss << offset; if (inputDistributionCollection_.getSize() > 1) oss << "| " << std::setw(length) << outputDescription[i] << " = "; if (simplifications_[i]) oss << expressions_[i].getEvaluation()->__str__() << "\n"; else oss << inputDistributionCollection_[i] << " -> " << outputDescription[i] << " : " << outputDistributionCollection_[i] << "\n"; } return oss; } /* Method save() stores the object through the StorageManager */ void MarginalTransformationEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "inputDistributionCollection_", inputDistributionCollection_ ); adv.saveAttribute( "outputDistributionCollection_", outputDistributionCollection_ ); adv.saveAttribute( "direction_", direction_ ); } /* Method load() reloads the object from the StorageManager */ void MarginalTransformationEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "inputDistributionCollection_", inputDistributionCollection_ ); adv.loadAttribute( "outputDistributionCollection_", outputDistributionCollection_ ); UnsignedInteger direction = FROMTO; adv.loadAttribute( "direction_", direction ); *this = MarginalTransformationEvaluation(inputDistributionCollection_, outputDistributionCollection_); setDirection(static_cast(direction)); } END_NAMESPACE_OPENTURNS MarginalTransformationGradient.cxx000066400000000000000000000110441307543307100375060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation// -*- C++ -*- /** * @brief Class for the Nataf transformationGradient evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MarginalTransformationGradient); static const Factory Factory_MarginalTransformationGradient; /* ParameterDefault constructor */ MarginalTransformationGradient::MarginalTransformationGradient() : GradientImplementation() , evaluation_() { // Nothing to do } /* Parameter constructor */ MarginalTransformationGradient::MarginalTransformationGradient(const MarginalTransformationEvaluation & evaluation) : GradientImplementation() , evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ MarginalTransformationGradient * MarginalTransformationGradient::clone() const { return new MarginalTransformationGradient(*this); } /* Gradient */ Matrix MarginalTransformationGradient::gradient(const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); Matrix result(dimension, dimension); // (G^{-1} o F)' = F' . G^{-1}' o F = F' / (G' o G^{-1} o F) for (UnsignedInteger i = 0; i < dimension; ++i) { if (evaluation_.getSimplifications()[i] && evaluation_.getExpressions()[i].getGradient()->getClassName() == "SymbolicGradient") result(i, i) = evaluation_.getExpressions()[i].gradient(Point(1, inP[i]))(0, 0); else { const Scalar inputPDF = evaluation_.inputDistributionCollection_[i].computePDF(inP[i]); // Quick rejection step: if the input PDF is zero, the result will be zero, so continue only if the value is > 0 if (inputPDF > 0.0) { Scalar inputCDF = evaluation_.inputDistributionCollection_[i].computeCDF(inP[i]); // For accuracy reason, check if we are in the upper tail of the distribution const Bool upperTail = inputCDF > 0.5; if (upperTail) inputCDF = evaluation_.inputDistributionCollection_[i].computeComplementaryCDF(inP[i]); // The upper tail CDF is defined by CDF(x, upper) = P(X>x) // The upper tail quantile is defined by Quantile(CDF(x, upper), upper) = x const Point outputQuantile(evaluation_.outputDistributionCollection_[i].computeQuantile(inputCDF, upperTail)); const Scalar outputPDF = evaluation_.outputDistributionCollection_[i].computePDF(outputQuantile); // The output PDF should never be zero here, be it can occure due to some strange rounding error if (outputPDF > 0.0) result(i, i) = inputPDF / outputPDF; } // PDF > 0 } // No simplification } return result; } /* Accessor for input point dimension */ UnsignedInteger MarginalTransformationGradient::getInputDimension() const { return evaluation_.inputDistributionCollection_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger MarginalTransformationGradient::getOutputDimension() const { return evaluation_.outputDistributionCollection_.getSize(); } /* String converter */ String MarginalTransformationGradient::__repr__() const { OSS oss(true); oss << "class=" << MarginalTransformationGradient::GetClassName() << " evaluation=" << evaluation_; return oss; } String MarginalTransformationGradient::__str__(const String & offset) const { return OSS(false) << offset << "Gradient of " << evaluation_.getName(); } /* Method save() stores the object through the StorageManager */ void MarginalTransformationGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void MarginalTransformationGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS MarginalTransformationHessian.cxx000066400000000000000000000113771307543307100373540ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation// -*- C++ -*- /** * @brief Class for the Nataf transformationHessian evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MarginalTransformationHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MarginalTransformationHessian); static const Factory Factory_MarginalTransformationHessian; /* Default constructor */ MarginalTransformationHessian::MarginalTransformationHessian(): HessianImplementation(), evaluation_() { // Nothing to do } /* Parameter constructor */ MarginalTransformationHessian::MarginalTransformationHessian(const MarginalTransformationEvaluation & evaluation): HessianImplementation(), evaluation_(evaluation) { // Nothing to do } /* Virtual constructor */ MarginalTransformationHessian * MarginalTransformationHessian::clone() const { return new MarginalTransformationHessian(*this); } /* Hessian */ SymmetricTensor MarginalTransformationHessian::hessian(const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); SymmetricTensor result(dimension, dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { if (evaluation_.getSimplifications()[i] && evaluation_.getExpressions()[i].getHessian()->getClassName() == "SymbolicHessian") result(i, i, i) = evaluation_.getExpressions()[i].hessian(Point(1, inP[i]))(0, 0, 0); else { // (`@`(-(`@`((D@@2)(G), 1/G))/(`@`(D(G), 1/G))^3, F))*D(F)^2+(`@`(1/(`@`(D(G), 1/G)), F))*(D@@2)(F) const Scalar inputPDF = evaluation_.inputDistributionCollection_[i].computePDF(inP[i]); // Quick rejection step: if the input PDF is zero, the result will be zero, so continue only if the value is > 0 if (inputPDF > 0.0) { Scalar inputCDF = evaluation_.inputDistributionCollection_[i].computeCDF(inP[i]); // For accuracy reason, check if we are in the upper tail of the distribution const Bool upperTail = inputCDF > 0.5; if (upperTail) inputCDF = evaluation_.inputDistributionCollection_[i].computeComplementaryCDF(inP[i]); // The upper tail CDF is defined by CDF(x, upper) = P(X>x) // The upper tail quantile is defined by Quantile(CDF(x, upper), upper) = x const Point outputQuantile(evaluation_.outputDistributionCollection_[i].computeQuantile(inputCDF, upperTail)); const Scalar outputPDF = evaluation_.outputDistributionCollection_[i].computePDF(outputQuantile); if (outputPDF > 0.0) { const Scalar inputDDF = evaluation_.inputDistributionCollection_[i].computeDDF(inP[i]); const Scalar outputDDF = evaluation_.outputDistributionCollection_[i].computeDDF(outputQuantile[0]); result(i, i, i) = (inputDDF - outputDDF * pow(inputPDF / outputPDF, 2)) / outputPDF; } // output PDF > 0 } // input PDF > 0 } // No simplification } return result; } /* Accessor for input point dimension */ UnsignedInteger MarginalTransformationHessian::getInputDimension() const { return evaluation_.inputDistributionCollection_.getSize(); } /* Accessor for output point dimension */ UnsignedInteger MarginalTransformationHessian::getOutputDimension() const { return evaluation_.outputDistributionCollection_.getSize(); } /* String converter */ String MarginalTransformationHessian::__repr__() const { OSS oss; oss << "class=" << MarginalTransformationHessian::GetClassName() << " evaluation=" << evaluation_; return oss; } String MarginalTransformationHessian::__str__(const String & offset) const { return OSS() << offset << "Hessian of " << evaluation_.getName(); } /* Method save() stores the object through the StorageManager */ void MarginalTransformationHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "evaluation_", evaluation_ ); } /* Method load() reloads the object from the StorageManager */ void MarginalTransformationHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "evaluation_", evaluation_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/openturns/000077500000000000000000000000001307543307100327375ustar00rootroot00000000000000MarginalTransformationEvaluation.hxx000066400000000000000000000113611307543307100421240ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformationEvaluation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MARGINALTRANSFORMATIONEVALUATION_HXX #define OPENTURNS_MARGINALTRANSFORMATIONEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Function.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MarginalTransformationEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API MarginalTransformationEvaluation : public EvaluationImplementation { CLASSNAME; public: typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; enum TranformationDirection { FROM, TO, FROMTO }; /** Default constructor */ MarginalTransformationEvaluation(); /** Parameter constructor */ explicit MarginalTransformationEvaluation(const DistributionCollection & distributionCollection, const UnsignedInteger direction = FROM); /** Parameter constructor */ MarginalTransformationEvaluation(const DistributionCollection & inputDistributionCollection, const DistributionCollection & outputDistributionCollection, const Bool simplify = (0 != ResourceMap::GetAsUnsignedInteger("MarginalTransformationEvaluation-Simplify"))); /** Virtual constructor */ virtual MarginalTransformationEvaluation * clone() const; /** Evaluation */ using EvaluationImplementation::operator(); Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ UnsignedInteger getOutputDimension() const; /** Direction accessor */ void setDirection(const TranformationDirection direction); UnsignedInteger getDirection() const; /** Input distribution collection accessor */ void setInputDistributionCollection(const DistributionCollection & inputDistributionCollection); DistributionCollection getInputDistributionCollection() const; /** Output distribution collection accessor */ void setOutputDistributionCollection(const DistributionCollection & outputDistributionCollection); DistributionCollection getOutputDistributionCollection() const; /** Simplifications accessor */ Collection getSimplifications() const; /** Expressions accessor */ Collection getExpressions() const; /** String converter */ String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Make the gradient and the hessian friend classes of the evaluation in order to share the input and output distribution collections friend class MarginalTransformationGradient; friend class MarginalTransformationHessian; // marginal distributions of the input DistributionPersistentCollection inputDistributionCollection_; // Marginal distributions of the output DistributionPersistentCollection outputDistributionCollection_; // Direction of the transformation UnsignedInteger direction_; // Flag to tell if simpler expressions are available Collection simplifications_; // Collection of simpler expressions Collection expressions_; }; /* MarginalTransformationEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MARGINALTRANSFORMATIONEVALUATION_HXX */ MarginalTransformationGradient.hxx000066400000000000000000000052271307543307100415560ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformationGradient evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MARGINALTRANSFORMATIONGRADIENT_HXX #define OPENTURNS_MARGINALTRANSFORMATIONGRADIENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MarginalTransformationGradient * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API MarginalTransformationGradient : public GradientImplementation { CLASSNAME; public: typedef GradientImplementation GradientImplementation; // Required by SWIG typedef Collection DistributionCollection; /** Default constructor */ MarginalTransformationGradient(); /** Parameter constructor */ MarginalTransformationGradient(const MarginalTransformationEvaluation & evaluation); /** Virtual constructor */ virtual MarginalTransformationGradient * clone() const; /** Gradient */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // The evaluation class associated with the gradient MarginalTransformationEvaluation evaluation_; }; /* MarginalTransformationGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MARGINALTRANSFORMATIONGRADIENT_HXX */ MarginalTransformationHessian.hxx000066400000000000000000000052331307543307100414100ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformationHessian evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MARGINALTRANSFORMATIONHESSIAN_HXX #define OPENTURNS_MARGINALTRANSFORMATIONHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/Point.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Collection.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MarginalTransformationHessian * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API MarginalTransformationHessian : public HessianImplementation { CLASSNAME; public: typedef Collection DistributionCollection; /** Default constructor */ MarginalTransformationHessian(); /** Parameter constructor */ MarginalTransformationHessian(const MarginalTransformationEvaluation & evaluation); /** Virtual constructor */ virtual MarginalTransformationHessian * clone() const; /** Hessian */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // The evaluation class associated with the hessian MarginalTransformationEvaluation evaluation_; }; /* MarginalTransformationHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MARGINALTRANSFORMATIONHESSIAN_HXX */ OTMarginalTransformation.hxx000066400000000000000000000022551307543307100403410ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/MarginalTransformation/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir MarginalTransformation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTMARGINALTRANSFORMATION_HXX #define OPENTURNS_OTMARGINALTRANSFORMATION_HXX #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/MarginalTransformationHessian.hxx" #endif /* OPENTURNS_OTMARGINALTRANSFORMATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/000077500000000000000000000000001307543307100304215ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/CMakeLists.txt000066400000000000000000000016311307543307100331620ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (NatafEllipticalCopulaEvaluation.cxx) ot_add_source_file (NatafEllipticalCopulaGradient.cxx) ot_add_source_file (NatafEllipticalCopulaHessian.cxx) ot_add_source_file (InverseNatafEllipticalCopulaEvaluation.cxx) ot_add_source_file (InverseNatafEllipticalCopulaGradient.cxx) ot_add_source_file (InverseNatafEllipticalCopulaHessian.cxx) ot_install_header_file (InverseNatafEllipticalCopulaGradient.hxx) ot_install_header_file (NatafEllipticalCopulaEvaluation.hxx) ot_install_header_file (InverseNatafEllipticalCopulaEvaluation.hxx) ot_install_header_file (NatafEllipticalCopulaGradient.hxx) ot_install_header_file (NatafEllipticalCopulaHessian.hxx) ot_install_header_file (InverseNatafEllipticalCopulaHessian.hxx) ot_install_header_file (OTNatafEllipticalCopula.hxx) InverseNatafEllipticalCopulaEvaluation.cxx000066400000000000000000000115651307543307100406620ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseNatafEllipticalCopulaEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalCopulaEvaluation * * This class offers an interface for the InverseNataf function for elliptical copula */ CLASSNAMEINIT(InverseNatafEllipticalCopulaEvaluation); static const Factory Factory_InverseNatafEllipticalCopulaEvaluation; /* Default constructor */ InverseNatafEllipticalCopulaEvaluation::InverseNatafEllipticalCopulaEvaluation() : EvaluationImplementation() , standardDistribution_() , cholesky_() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalCopulaEvaluation::InverseNatafEllipticalCopulaEvaluation(const Distribution & standardDistribution, const TriangularMatrix & cholesky) : EvaluationImplementation() , standardDistribution_(standardDistribution) , cholesky_(cholesky) { Description description(Description::BuildDefault(cholesky_.getDimension(), "x")); description.add(Description::BuildDefault(cholesky_.getDimension(), "y")); setDescription(description); } /* Virtual constructor */ InverseNatafEllipticalCopulaEvaluation * InverseNatafEllipticalCopulaEvaluation::clone() const { return new InverseNatafEllipticalCopulaEvaluation(*this); } /* String converter */ String InverseNatafEllipticalCopulaEvaluation::__repr__() const { OSS oss; oss << "class=" << InverseNatafEllipticalCopulaEvaluation::GetClassName() << " description=" << getDescription() << " standardDistribution=" << standardDistribution_ << " cholesky=" << cholesky_; return oss; } String InverseNatafEllipticalCopulaEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << InverseNatafEllipticalCopulaEvaluation::GetClassName() << "(" << standardDistribution_ << "->Copula(cholesky=" << cholesky_ << ", E=" << standardDistribution_.getMarginal(0) << "))"; return oss; } /* * Evaluation * This function transforms a standard elliptical distribution into an elliptical copula of the same kind with a correlation matrix R: * Z(u) = L.u, where L is the Cholesky factor of R: L.L^t = R, L is lower triangular * Si(u) = F(Zi), where F is the CDF of the standard elliptical distribution */ Point InverseNatafEllipticalCopulaEvaluation::operator () (const Point & inP) const { const UnsignedInteger dimension = getInputDimension(); // First, correlate the components Point result(cholesky_ * inP); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); // Second, apply the commmon marginal distribution for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = standardMarginal.computeCDF(Point(1, result[i])); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. Currently, the dependence parameter are not taken into account. */ Matrix InverseNatafEllipticalCopulaEvaluation::parameterGradient(const Point & inP) const { return Matrix(0, getInputDimension()); } /* Accessor for input point dimension */ UnsignedInteger InverseNatafEllipticalCopulaEvaluation::getInputDimension() const { return cholesky_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseNatafEllipticalCopulaEvaluation::getOutputDimension() const { return cholesky_.getDimension(); } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalCopulaEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "cholesky_", cholesky_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalCopulaEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "cholesky_", cholesky_ ); } END_NAMESPACE_OPENTURNS InverseNatafEllipticalCopulaGradient.cxx000066400000000000000000000102611307543307100403000ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseNatafEllipticalCopulaGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalCopulaGradient * * This class offers an interface for the InverseNataf function for elliptical copula */ CLASSNAMEINIT(InverseNatafEllipticalCopulaGradient); static const Factory Factory_InverseNatafEllipticalCopulaGradient; /* Default constructor */ InverseNatafEllipticalCopulaGradient::InverseNatafEllipticalCopulaGradient() : GradientImplementation() , standardDistribution_() , cholesky_() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalCopulaGradient::InverseNatafEllipticalCopulaGradient(const Distribution & standardDistribution, const TriangularMatrix & cholesky) : GradientImplementation() , standardDistribution_(standardDistribution) , cholesky_(cholesky) { // Nothing to do } /* Virtual constructor */ InverseNatafEllipticalCopulaGradient * InverseNatafEllipticalCopulaGradient::clone() const { return new InverseNatafEllipticalCopulaGradient(*this); } /* String converter */ String InverseNatafEllipticalCopulaGradient::__repr__() const { OSS oss; oss << "class=" << InverseNatafEllipticalCopulaGradient::GetClassName() << " standardDistribution=" << standardDistribution_ << " cholesky=" << cholesky_; return oss; } /* * Evaluation * The elliptical copula has a correlation matrix R. The inverse Nataf transform S reads: * Z(u) = L.u, where L is the Cholesky factor of R: L.L^t = R, L is lower triangular * Si(u) = F(Zi), where F is the CDF of the standard elliptical distribution * Its Jacobian J is: * Jij = dSi/duj = (dF/du)ij * = (F'(Zi)dZ/du)ij * = F'(Zi)Lij * thus, (DS)ij = Jji = LjiF'(Zj) */ Matrix InverseNatafEllipticalCopulaGradient::gradient(const Point & inP) const { UnsignedInteger dimension = getInputDimension(); // First, correlate the components Point point(cholesky_ * inP); Matrix result(dimension, dimension); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); // Second, apply the commmon marginal distribution for (UnsignedInteger j = 0; j < dimension; ++j) { Scalar marginalPDF = standardMarginal.computePDF(Point(1, point[j])); for (UnsignedInteger i = 0; i <= j; ++i) { result(i, j) = marginalPDF * cholesky_(j, i); } } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseNatafEllipticalCopulaGradient::getInputDimension() const { return cholesky_.getNbColumns(); } /* Accessor for output point dimension */ UnsignedInteger InverseNatafEllipticalCopulaGradient::getOutputDimension() const { return cholesky_.getNbRows(); } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalCopulaGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "cholesky_", cholesky_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalCopulaGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "cholesky_", cholesky_ ); } END_NAMESPACE_OPENTURNS InverseNatafEllipticalCopulaHessian.cxx000066400000000000000000000110271307543307100401360ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseNatafEllipticalCopulaHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalCopulaHessian * * This class offers an interface for the InverseNataf function for elliptical copula */ CLASSNAMEINIT(InverseNatafEllipticalCopulaHessian); static const Factory Factory_InverseNatafEllipticalCopulaHessian; /* Default constructor */ InverseNatafEllipticalCopulaHessian::InverseNatafEllipticalCopulaHessian() : HessianImplementation() , standardDistribution_() , cholesky_() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalCopulaHessian::InverseNatafEllipticalCopulaHessian(const Distribution & standardDistribution, const TriangularMatrix & cholesky) : HessianImplementation() , standardDistribution_(standardDistribution) , cholesky_(cholesky) { // Nothing to do } /* Virtual constructor */ InverseNatafEllipticalCopulaHessian * InverseNatafEllipticalCopulaHessian::clone() const { return new InverseNatafEllipticalCopulaHessian(*this); } /* String converter */ String InverseNatafEllipticalCopulaHessian::__repr__() const { OSS oss; oss << "class=" << InverseNatafEllipticalCopulaHessian::GetClassName() << " standardDistribution=" << standardDistribution_ << " cholesky=" << cholesky_; return oss; } /* * Evaluation * The elliptical copula has a correlation matrix R. The inverse Nataf transform S reads: * Z(u) = L.u, where L is the Cholesky factor of R: L.L^t = R, L is lower triangular * Si(u) = F(Zi), where F is the CDF of the standard elliptical distribution * Its Jacobian J is: * Jij = dSi/duj = (dF/du)ij * = (F'(Zi)dZ/du)ij * = F'(Zi)Lij * thus, (DS)ij = Jji = LjiF'(Zj) * One step further, we have: * Hijk = d2Si/dxjdxk = (d2F/dudu')ijk * = (d(F'(Zi)dZ/du)/du')ijk * = (F''(Zi)(dZ/du)(dZ/du'))ijk * = (F''(Zi)LijLik * Thus, (D2T)ijk = Hkji = LkjLkiF''(Zk) */ SymmetricTensor InverseNatafEllipticalCopulaHessian::hessian(const Point & inP) const { UnsignedInteger dimension = getInputDimension(); // First, correlate the components Point point(cholesky_ * inP); SymmetricTensor result(dimension, dimension); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); // Then, apply standard marginal transformation for (UnsignedInteger k = 0; k < dimension; ++k) { Scalar ddf = standardMarginal.computeDDF(Point(1, point[k]))[0]; for (UnsignedInteger i = 0; i <= k; ++i) { Scalar factor = ddf * cholesky_(k, i); for (UnsignedInteger j = 0; j <= k; ++j) { result(i, j, k) = cholesky_(k, j) * factor; } // j } // i } // k return result; } /* Accessor for input point dimension */ UnsignedInteger InverseNatafEllipticalCopulaHessian::getInputDimension() const { return cholesky_.getNbColumns(); } /* Accessor for output point dimension */ UnsignedInteger InverseNatafEllipticalCopulaHessian::getOutputDimension() const { return cholesky_.getNbRows(); } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalCopulaHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "cholesky_", cholesky_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalCopulaHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "cholesky_", cholesky_ ); } END_NAMESPACE_OPENTURNS NatafEllipticalCopulaEvaluation.cxx000066400000000000000000000114651307543307100373250ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula // -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/NatafEllipticalCopulaEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalCopulaEvaluation * * This class offers an interface for the Nataf function for elliptical copula */ CLASSNAMEINIT(NatafEllipticalCopulaEvaluation); static const Factory Factory_NatafEllipticalCopulaEvaluation; /* Default constructor */ NatafEllipticalCopulaEvaluation::NatafEllipticalCopulaEvaluation() : EvaluationImplementation() , standardDistribution_() , cholesky_() { // Nothing to do } /* Parameter constructor */ NatafEllipticalCopulaEvaluation::NatafEllipticalCopulaEvaluation(const Distribution & standardDistribution, const TriangularMatrix & cholesky) : EvaluationImplementation() , standardDistribution_(standardDistribution) , cholesky_(cholesky) { Description description(Description::BuildDefault(cholesky_.getDimension(), "x")); description.add(Description::BuildDefault(cholesky_.getDimension(), "y")); setDescription(description); } /* Virtual constructor */ NatafEllipticalCopulaEvaluation * NatafEllipticalCopulaEvaluation::clone() const { return new NatafEllipticalCopulaEvaluation(*this); } /* String converter */ String NatafEllipticalCopulaEvaluation::__repr__() const { OSS oss; oss << "class=" << NatafEllipticalCopulaEvaluation::GetClassName() << " description=" << getDescription() << " standardDistribution=" << standardDistribution_ << " cholesky=" << cholesky_; return oss; } String NatafEllipticalCopulaEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << NatafEllipticalCopulaEvaluation::GetClassName() << "(Copula(cholesky=" << cholesky_ << ", E=" << standardDistribution_.getMarginal(0) << ")->" << standardDistribution_ << ")"; return oss; } /* * Evaluation * This function transforms an elliptical copula with correlation matrix R into the associated standard elliptical distribution: * Yi(x) = Q(xi), where Q = F^{-1} and F is the CDF of the standard elliptical distribution * T(x) = G.Y(x), where G = L^{-1} and L is the Cholesky factor of R: L.L^t = R, L is lower triangular */ Point NatafEllipticalCopulaEvaluation::operator () (const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); Point result(dimension); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); // First, filter the commmon marginal distribution for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = standardMarginal.computeQuantile(inP[i])[0]; // Second, decorrelate the components result = cholesky_.solveLinearSystem(result); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. Currently, the dependence parameters are not taken into account. */ Matrix NatafEllipticalCopulaEvaluation::parameterGradient(const Point & inP) const { return Matrix(0, getInputDimension()); } /* Accessor for input point dimension */ UnsignedInteger NatafEllipticalCopulaEvaluation::getInputDimension() const { return cholesky_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger NatafEllipticalCopulaEvaluation::getOutputDimension() const { return cholesky_.getDimension(); } /* Method save() stores the object through the StorageManager */ void NatafEllipticalCopulaEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "cholesky_", cholesky_ ); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalCopulaEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "cholesky_", cholesky_ ); } END_NAMESPACE_OPENTURNS NatafEllipticalCopulaGradient.cxx000066400000000000000000000101551307543307100367460ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NatafEllipticalCopulaGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalCopulaGradient * * This class offers an interface for the Nataf function for elliptical copula */ CLASSNAMEINIT(NatafEllipticalCopulaGradient); static const Factory Factory_NatafEllipticalCopulaGradient; /* Default constructor */ NatafEllipticalCopulaGradient::NatafEllipticalCopulaGradient() : GradientImplementation() , standardDistribution_() , inverseCholesky_() { // Nothing to do } /* Parameter constructor */ NatafEllipticalCopulaGradient::NatafEllipticalCopulaGradient(const Distribution & standardDistribution, const TriangularMatrix & inverseCholesky) : GradientImplementation() , standardDistribution_(standardDistribution) , inverseCholesky_(inverseCholesky) { // Nothing to do } /* Virtual constructor */ NatafEllipticalCopulaGradient * NatafEllipticalCopulaGradient::clone() const { return new NatafEllipticalCopulaGradient(*this); } /* String converter */ String NatafEllipticalCopulaGradient::__repr__() const { OSS oss; oss << "class=" << NatafEllipticalCopulaGradient::GetClassName() << " standardDistribution=" << standardDistribution_ << " inverseCholesky=" << inverseCholesky_; return oss; } /* * Evaluation * The elliptical copula has a correlation matrix R. The Nataf transform T reads: * Yi(x) = Q(xi), where Q = F^{-1} and F is the CDF of the standard elliptical distribution * T(x) = G.Y(x), where G = L^{-1} and L is the Cholesky factor of R: L.L^t = R, L is lower triangular * Its Jacobian J is: * Jij = dTi/dxj = (G.dY/dx)ij * = (G.diag(Q'(xk)))ij * = (G:,1Q'(x1)|...|G:,nQ'(xn))ij * = GijQ'(xj) * thus, (DT)ij = Jji = GjiQ'(xi) */ Matrix NatafEllipticalCopulaGradient::gradient(const Point & inP) const { UnsignedInteger dimension = getInputDimension(); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); Matrix result(dimension, dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { Scalar quantileDerivative = 1.0 / standardMarginal.computePDF(standardMarginal.computeQuantile(inP[i])); for (UnsignedInteger j = i; j < dimension; ++j) result(i, j) = inverseCholesky_(j, i) * quantileDerivative; } return result; } /* Accessor for input point dimension */ UnsignedInteger NatafEllipticalCopulaGradient::getInputDimension() const { return inverseCholesky_.getNbColumns(); } /* Accessor for output point dimension */ UnsignedInteger NatafEllipticalCopulaGradient::getOutputDimension() const { return inverseCholesky_.getNbRows(); } /* Method save() stores the object through the StorageManager */ void NatafEllipticalCopulaGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "inverseCholesky_", inverseCholesky_ ); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalCopulaGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "inverseCholesky_", inverseCholesky_ ); } END_NAMESPACE_OPENTURNS NatafEllipticalCopulaHessian.cxx000066400000000000000000000111221307543307100365760ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NatafEllipticalCopulaHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalCopulaHessian * * This class offers an interface for the Nataf function for elliptical copula */ CLASSNAMEINIT(NatafEllipticalCopulaHessian); static const Factory Factory_NatafEllipticalCopulaHessian; /* Default constructor */ NatafEllipticalCopulaHessian::NatafEllipticalCopulaHessian() : HessianImplementation() , standardDistribution_() , inverseCholesky_() { // Nothing to do } /* Parameter constructor */ NatafEllipticalCopulaHessian::NatafEllipticalCopulaHessian(const Distribution & standardDistribution, const TriangularMatrix & inverseCholesky) : HessianImplementation() , standardDistribution_(standardDistribution) , inverseCholesky_(inverseCholesky) { // Nothing to do } /* Virtual constructor */ NatafEllipticalCopulaHessian * NatafEllipticalCopulaHessian::clone() const { return new NatafEllipticalCopulaHessian(*this); } /* String converter */ String NatafEllipticalCopulaHessian::__repr__() const { OSS oss; oss << "class=" << NatafEllipticalCopulaHessian::GetClassName() << " standardDistribution=" << standardDistribution_ << " inverseCholesky=" << inverseCholesky_; return oss; } /* * Evaluation * The elliptical copula has a correlation matrix R. The Nataf transform T reads: * Yi(x) = Q(xi), where Q = F^{-1} and F is the CDF of the standard elliptical distribution * T(x) = G.Y(x), where G = L^{-1} and L is the Cholesky factor of R: L.L^t = R, L is lower triangular * Its Jacobian J is: * Jij = dTi/dxj = (G.dY/dx)ij * = (G.diag(Q'(xk), k=1...n))ij * = (G:,1Q'(x1)|...|G:,nQ'(xn))ij * = GijQ'(xj) * thus, (DT)ij = Jji = GjiQ'(xi) * One step further, we have: * Hijk = d2Ti/dxjdxk = (G.d2Y/dxdx')ijk * = (G.diag(Q''(xl), l=1..n))ijk * = GijQ''(xj) if k = j * = 0 else * Thus, (D2T)ijk = Hkji = GjiQ''(xi) if k = j, else 0: each sheet of D2T is a diagonal matrix diag(GjiQ''(xi), i=1..n) */ SymmetricTensor NatafEllipticalCopulaHessian::hessian(const Point & inP) const { UnsignedInteger dimension = getInputDimension(); const Distribution standardMarginal(standardDistribution_.getMarginal(0)); SymmetricTensor result(dimension, dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { Point q(standardMarginal.computeQuantile(inP[i])); Scalar factor = 1.0 / standardMarginal.computePDF(q); Scalar quantileSecondDerivative = -standardMarginal.computeDDF(q)[0] * factor * factor * factor; // inverseCholesky_ is lower triangular for (UnsignedInteger j = i; j < dimension; ++j) result(i, i, j) = inverseCholesky_(j, i) * quantileSecondDerivative; } // i return result; } /* Accessor for input point dimension */ UnsignedInteger NatafEllipticalCopulaHessian::getInputDimension() const { return inverseCholesky_.getNbColumns(); } /* Accessor for output point dimension */ UnsignedInteger NatafEllipticalCopulaHessian::getOutputDimension() const { return inverseCholesky_.getNbRows(); } /* Method save() stores the object through the StorageManager */ void NatafEllipticalCopulaHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "standardDistribution_", standardDistribution_ ); adv.saveAttribute( "inverseCholesky_", inverseCholesky_ ); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalCopulaHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "standardDistribution_", standardDistribution_ ); adv.loadAttribute( "inverseCholesky_", inverseCholesky_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns/000077500000000000000000000000001307543307100324565ustar00rootroot00000000000000InverseNatafEllipticalCopulaEvaluation.hxx000066400000000000000000000054441307543307100427230ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALCOPULAEVALUATION_HXX #define OPENTURNS_INVERSENATAFELLIPTICALCOPULAEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalCopulaEvaluation * * This class offers an interface for the InverseNataf function for elliptical distributions */ class OT_API InverseNatafEllipticalCopulaEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalCopulaEvaluation(); /** Parameter constructor */ InverseNatafEllipticalCopulaEvaluation(const Distribution & standardDistribution, const TriangularMatrix & cholesky); /** Virtual constructor */ virtual InverseNatafEllipticalCopulaEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; TriangularMatrix cholesky_; }; /* InverseNatafEllipticalCopulaEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALCOPULAEVALUATION_HXX */ InverseNatafEllipticalCopulaGradient.hxx000066400000000000000000000051331307543307100423440ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALCOPULAGRADIENT_HXX #define OPENTURNS_INVERSENATAFELLIPTICALCOPULAGRADIENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalCopulaGradient * * This class offers an interface for the InverseNataf function for elliptical distributions */ class OT_API InverseNatafEllipticalCopulaGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalCopulaGradient(); /** Parameter constructor */ InverseNatafEllipticalCopulaGradient(const Distribution & standardDistribution, const TriangularMatrix & cholesky); /** Virtual constructor */ virtual InverseNatafEllipticalCopulaGradient * clone() const; /** Gradient */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; TriangularMatrix cholesky_; }; /* InverseNatafEllipticalCopulaGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALCOPULAGRADIENT_HXX */ InverseNatafEllipticalCopulaHessian.hxx000066400000000000000000000050661307543307100422060ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALCOPULAHESSIAN_HXX #define OPENTURNS_INVERSENATAFELLIPTICALCOPULAHESSIAN_HXX #include "openturns/OTprivate.hxx" #include "openturns/HessianImplementation.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalCopulaHessian * * This class offers an interface for the InverseNataf function for elliptical distributions */ class OT_API InverseNatafEllipticalCopulaHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalCopulaHessian(); /** Parameter constructor */ InverseNatafEllipticalCopulaHessian(const Distribution & standardDistribution, const TriangularMatrix & cholesky); /** Virtual constructor */ virtual InverseNatafEllipticalCopulaHessian * clone() const; /** Hessian */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; TriangularMatrix cholesky_; }; /* InverseNatafEllipticalCopulaHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALCOPULAHESSIAN_HXX */ NatafEllipticalCopulaEvaluation.hxx000066400000000000000000000053371307543307100413700ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALCOPULAEVALUATION_HXX #define OPENTURNS_NATAFELLIPTICALCOPULAEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalCopulaEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API NatafEllipticalCopulaEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ NatafEllipticalCopulaEvaluation(); /** Parameter constructor */ NatafEllipticalCopulaEvaluation(const Distribution & standardDistribution, const TriangularMatrix & inverseCholesky); /** Virtual constructor */ virtual NatafEllipticalCopulaEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; mutable TriangularMatrix cholesky_; }; /* NatafEllipticalCopulaEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALCOPULAEVALUATION_HXX */ NatafEllipticalCopulaGradient.hxx000066400000000000000000000050251307543307100410100ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALCOPULAGRADIENT_HXX #define OPENTURNS_NATAFELLIPTICALCOPULAGRADIENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalCopulaGradient * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API NatafEllipticalCopulaGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ NatafEllipticalCopulaGradient(); /** Parameter constructor */ NatafEllipticalCopulaGradient(const Distribution & standardDistribution, const TriangularMatrix & inverseCholesky); /** Virtual constructor */ virtual NatafEllipticalCopulaGradient * clone() const; /** Gradient */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; TriangularMatrix inverseCholesky_; }; /* NatafEllipticalCopulaGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALCOPULAGRADIENT_HXX */ NatafEllipticalCopulaHessian.hxx000066400000000000000000000050231307543307100406430ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALCOPULAHESSIAN_HXX #define OPENTURNS_NATAFELLIPTICALCOPULAHESSIAN_HXX #include "openturns/OTprivate.hxx" #include "openturns/HessianImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalCopulaHessian * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API NatafEllipticalCopulaHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ NatafEllipticalCopulaHessian(); /** Parameter constructor */ NatafEllipticalCopulaHessian(const Distribution & standardDistribution, const TriangularMatrix & inverseCholesky); /** Virtual constructor */ virtual NatafEllipticalCopulaHessian * clone() const; /** Hessian */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution standardDistribution_; TriangularMatrix inverseCholesky_; }; /* NatafEllipticalCopulaHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALCOPULAHESSIAN_HXX */ OTNatafEllipticalCopula.hxx000066400000000000000000000025411307543307100375750ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalCopula/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir NatafEllipticalCopula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTNATAFELLIPTICALCOPULA_HXX #define OPENTURNS_OTNATAFELLIPTICALCOPULA_HXX #include "openturns/InverseNatafEllipticalCopulaEvaluation.hxx" #include "openturns/InverseNatafEllipticalCopulaGradient.hxx" #include "openturns/InverseNatafEllipticalCopulaHessian.hxx" #include "openturns/NatafEllipticalCopulaEvaluation.hxx" #include "openturns/NatafEllipticalCopulaGradient.hxx" #include "openturns/NatafEllipticalCopulaHessian.hxx" #endif /* OPENTURNS_OTNATAFELLIPTICALCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/000077500000000000000000000000001307543307100316555ustar00rootroot00000000000000CMakeLists.txt000066400000000000000000000017471307543307100343470ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (NatafEllipticalDistributionEvaluation.cxx) ot_add_source_file (NatafEllipticalDistributionGradient.cxx) ot_add_source_file (NatafEllipticalDistributionHessian.cxx) ot_add_source_file (InverseNatafEllipticalDistributionEvaluation.cxx) ot_add_source_file (InverseNatafEllipticalDistributionGradient.cxx) ot_add_source_file (InverseNatafEllipticalDistributionHessian.cxx) ot_install_header_file (InverseNatafEllipticalDistributionHessian.hxx) ot_install_header_file (OTNatafEllipticalDistribution.hxx) ot_install_header_file (InverseNatafEllipticalDistributionGradient.hxx) ot_install_header_file (InverseNatafEllipticalDistributionEvaluation.hxx) ot_install_header_file (NatafEllipticalDistributionHessian.hxx) ot_install_header_file (NatafEllipticalDistributionEvaluation.hxx) ot_install_header_file (NatafEllipticalDistributionGradient.hxx) InverseNatafEllipticalDistributionEvaluation.cxx000066400000000000000000000074071307543307100433520ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/InverseNatafEllipticalDistributionEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalDistributionEvaluation * * This class offers an interface for the InverseNataf function for elliptical distributions */ CLASSNAMEINIT(InverseNatafEllipticalDistributionEvaluation); static const Factory Factory_InverseNatafEllipticalDistributionEvaluation; /* Default constructor */ InverseNatafEllipticalDistributionEvaluation::InverseNatafEllipticalDistributionEvaluation() : LinearEvaluation() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalDistributionEvaluation::InverseNatafEllipticalDistributionEvaluation(const Point & mean, const TriangularMatrix & cholesky) : LinearEvaluation( Point(mean.getDimension(), 0.0), mean, cholesky.transpose() ) { // Nothing to do } /* Virtual constructor */ InverseNatafEllipticalDistributionEvaluation * InverseNatafEllipticalDistributionEvaluation::clone() const { return new InverseNatafEllipticalDistributionEvaluation(*this); } /* String converter */ String InverseNatafEllipticalDistributionEvaluation::__repr__() const { OSS oss; oss << "class=" << InverseNatafEllipticalDistributionEvaluation::GetClassName() << " mean=" << getCenter() << " cholesky=" << getLinear().transpose(); return oss; } /* Gradient according to the marginal parameters. * For the InverseNataf transformation based on elliptical * distributions, the marginal parameters \theta are the mean * vector \mu and the marginal standard deviations \sigma, * which are the diagonal terms of the Cholesky factor L * of the covariance matrix: \theta = (\mu, \sigma) * The expression of the inverse transformation is: * * T^(-1)_i(U) = mu_i + \sum_{j=1}^i L_{ij}U_j * * thus we have: * * dT^(-1)_i/dmu_j = 1 for j=i, * = 0 otherwise * dT^(-1)_i/dsigma_j = U_i for j=i, * = 0 otherwise * * The (i,j)th element of the gradient is dT^(-1)_j/dtheta_i. * */ Matrix InverseNatafEllipticalDistributionEvaluation::parameterGradient(const Point & inP) const { UnsignedInteger inputDimension = getInputDimension(); Matrix result(2 * inputDimension, inputDimension); // dT_j/dmu_i for (UnsignedInteger i = 0; i < inputDimension; ++i) result(i, i) = 1.0; // dTj/dsigma_j for (UnsignedInteger i = 0; i < inputDimension; ++i) result(inputDimension + i, i) = inP[i]; return result; } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalDistributionEvaluation::save(Advocate & adv) const { LinearEvaluation::save(adv); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalDistributionEvaluation::load(Advocate & adv) { LinearEvaluation::load(adv); } END_NAMESPACE_OPENTURNS InverseNatafEllipticalDistributionGradient.cxx000066400000000000000000000050111307543307100427650ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the InverseNataf transformation gradient for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/InverseNatafEllipticalDistributionGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalDistributionGradient * * This class offers an interface for the InverseNataf function for elliptical distributions */ CLASSNAMEINIT(InverseNatafEllipticalDistributionGradient); static const Factory Factory_InverseNatafEllipticalDistributionGradient; /* Default constructor */ InverseNatafEllipticalDistributionGradient::InverseNatafEllipticalDistributionGradient(): ConstantGradient() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalDistributionGradient::InverseNatafEllipticalDistributionGradient(const SquareMatrix & cholesky): ConstantGradient(cholesky.transpose()) { // Nothing to do } /* Virtual constructor */ InverseNatafEllipticalDistributionGradient * InverseNatafEllipticalDistributionGradient::clone() const { return new InverseNatafEllipticalDistributionGradient(*this); } /* String converter */ String InverseNatafEllipticalDistributionGradient::__repr__() const { return OSS() << "class=" << InverseNatafEllipticalDistributionGradient::GetClassName() << " cholesky=" << getConstant().transpose(); } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalDistributionGradient::save(Advocate & adv) const { ConstantGradient::save(adv); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalDistributionGradient::load(Advocate & adv) { ConstantGradient::load(adv); } END_NAMESPACE_OPENTURNS InverseNatafEllipticalDistributionHessian.cxx000066400000000000000000000047721307543307100426370ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the InverseNataf transformation hessian for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/InverseNatafEllipticalDistributionHessian.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafEllipticalDistributionHessian * * This class offers an interface for the InverseNataf function for elliptical distributions */ CLASSNAMEINIT(InverseNatafEllipticalDistributionHessian); static const Factory Factory_InverseNatafEllipticalDistributionHessian; /* Default constructor */ InverseNatafEllipticalDistributionHessian::InverseNatafEllipticalDistributionHessian(): ConstantHessian() { // Nothing to do } /* Parameter constructor */ InverseNatafEllipticalDistributionHessian::InverseNatafEllipticalDistributionHessian(const UnsignedInteger dimension): ConstantHessian(SymmetricTensor(dimension, dimension)) { // Nothing to do } /* Virtual constructor */ InverseNatafEllipticalDistributionHessian * InverseNatafEllipticalDistributionHessian::clone() const { return new InverseNatafEllipticalDistributionHessian(*this); } /* String converter */ String InverseNatafEllipticalDistributionHessian::__repr__() const { return OSS() << "class=" << InverseNatafEllipticalDistributionHessian::GetClassName(); } /* Method save() stores the object through the StorageManager */ void InverseNatafEllipticalDistributionHessian::save(Advocate & adv) const { ConstantHessian::save(adv); } /* Method load() reloads the object from the StorageManager */ void InverseNatafEllipticalDistributionHessian::load(Advocate & adv) { ConstantHessian::load(adv); } END_NAMESPACE_OPENTURNS NatafEllipticalDistributionEvaluation.cxx000066400000000000000000000076131307543307100420150ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/NatafEllipticalDistributionEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalDistributionEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ CLASSNAMEINIT(NatafEllipticalDistributionEvaluation); static const Factory Factory_NatafEllipticalDistributionEvaluation; /* Default constructor */ NatafEllipticalDistributionEvaluation::NatafEllipticalDistributionEvaluation(): LinearEvaluation() { // Nothing to do } /* Parameter constructor */ NatafEllipticalDistributionEvaluation::NatafEllipticalDistributionEvaluation(const Point & mean, const TriangularMatrix & inverseCholesky) : LinearEvaluation( mean, Point(mean.getDimension(), 0.0), inverseCholesky.transpose() ) { // Nothing to do } /* Virtual constructor */ NatafEllipticalDistributionEvaluation * NatafEllipticalDistributionEvaluation::clone() const { return new NatafEllipticalDistributionEvaluation(*this); } /* String converter */ String NatafEllipticalDistributionEvaluation::__repr__() const { OSS oss; oss << "class=" << NatafEllipticalDistributionEvaluation::GetClassName() << " mean=" << getCenter() << " inverseCholesky=" << getLinear().transpose(); return oss; } /* Gradient according to the marginal parameters. * For the Nataf transformation based on elliptical distributions, * the marginal parameters \theta are the mean vector \mu and the * marginal standard deviations \sigma, which are the reciprocal * of the diagonal terms of the inverse Cholesky factor \Gamma of * the covariance matrix: \theta = (\mu, \sigma) * The expression of the transformation is: * * T_i(X) = \sum_{j=1}^i \Gamma_{ij}(X_j - mu_j) * * thus we have: * * dT_i/dmu_j = -Gamma_{ij} for j>=i, * = 0 otherwise * dT_i/dsigma_j = -Gamma_{ii}^2(X_i - mu_i) for j=i, * = 0 otherwise * * The (i,j)th element of the gradient is dT_j/dtheta_i. * */ Matrix NatafEllipticalDistributionEvaluation::parameterGradient(const Point & inP) const { Point center(getCenter()); // \mu Matrix linear(getLinear()); // \Gamma^t, transposed inverse Cholesky UnsignedInteger inputDimension = getInputDimension(); Matrix result(2 * inputDimension, inputDimension); // dT_j/dmu_i for (UnsignedInteger i = 0; i < inputDimension; ++i) for (UnsignedInteger j = i; j < inputDimension; ++j) result(i, j) = -linear(i, j); // dTj/dsigma_j for (UnsignedInteger i = 0; i < inputDimension; ++i) result(inputDimension + i, i) = -linear(i, i) * linear(i, i) * (inP[i] - center[i]); return result; } /* Method save() stores the object through the StorageManager */ void NatafEllipticalDistributionEvaluation::save(Advocate & adv) const { LinearEvaluation::save(adv); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalDistributionEvaluation::load(Advocate & adv) { LinearEvaluation::load(adv); } END_NAMESPACE_OPENTURNS NatafEllipticalDistributionGradient.cxx000066400000000000000000000046461307543307100414460ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the Nataf transformation gradient for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/NatafEllipticalDistributionGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalDistributionGradient * * This class offers an interface for the Nataf function for elliptical distributions */ CLASSNAMEINIT(NatafEllipticalDistributionGradient); static const Factory Factory_NatafEllipticalDistributionGradient; /* Default constructor */ NatafEllipticalDistributionGradient::NatafEllipticalDistributionGradient() : ConstantGradient() { // Nothing to do } /* Parameter constructor */ NatafEllipticalDistributionGradient::NatafEllipticalDistributionGradient(const TriangularMatrix & inverseCholesky) : ConstantGradient(inverseCholesky.transpose()) { // Nothing to do } /* Virtual constructor */ NatafEllipticalDistributionGradient * NatafEllipticalDistributionGradient::clone() const { return new NatafEllipticalDistributionGradient(*this); } /* String converter */ String NatafEllipticalDistributionGradient::__repr__() const { return OSS() << "class=" << NatafEllipticalDistributionGradient::GetClassName() << " inverseCholesky=" << getConstant().transpose(); } /* Method save() stores the object through the StorageManager */ void NatafEllipticalDistributionGradient::save(Advocate & adv) const { ConstantGradient::save(adv); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalDistributionGradient::load(Advocate & adv) { ConstantGradient::load(adv); } END_NAMESPACE_OPENTURNS NatafEllipticalDistributionHessian.cxx000066400000000000000000000045741307543307100413030ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution// -*- C++ -*- /** * @brief Class for the Nataf transformation hessian for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTprivate.hxx" #include "openturns/NatafEllipticalDistributionHessian.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafEllipticalDistributionHessian * * This class offers an interface for the Nataf function for elliptical distributions */ CLASSNAMEINIT(NatafEllipticalDistributionHessian); static const Factory Factory_NatafEllipticalDistributionHessian; /* Default constructor */ NatafEllipticalDistributionHessian::NatafEllipticalDistributionHessian(): ConstantHessian() { // Nothing to do } /* Parameter constructor */ NatafEllipticalDistributionHessian::NatafEllipticalDistributionHessian(const UnsignedInteger dimension): ConstantHessian(SymmetricTensor(dimension, dimension)) { // Nothing to do } /* Virtual constructor */ NatafEllipticalDistributionHessian * NatafEllipticalDistributionHessian::clone() const { return new NatafEllipticalDistributionHessian(*this); } /* String converter */ String NatafEllipticalDistributionHessian::__repr__() const { return OSS() << "class=" << NatafEllipticalDistributionHessian::GetClassName(); } /* Method save() stores the object through the StorageManager */ void NatafEllipticalDistributionHessian::save(Advocate & adv) const { ConstantHessian::save(adv); } /* Method load() reloads the object from the StorageManager */ void NatafEllipticalDistributionHessian::load(Advocate & adv) { ConstantHessian::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns/000077500000000000000000000000001307543307100337125ustar00rootroot00000000000000InverseNatafEllipticalDistributionEvaluation.hxx000066400000000000000000000045101307543307100454040ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX #define OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalDistributionEvaluation * * This class offers an interface for the InverseNataf function for elliptical distributions */ class OT_API InverseNatafEllipticalDistributionEvaluation : public LinearEvaluation { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalDistributionEvaluation(); /** Parameter constructor */ InverseNatafEllipticalDistributionEvaluation(const Point & mean, const TriangularMatrix & cholesky); /** Virtual constructor */ virtual InverseNatafEllipticalDistributionEvaluation * clone() const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* InverseNatafEllipticalDistributionEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX */ InverseNatafEllipticalDistributionGradient.hxx000066400000000000000000000042671307543307100450430ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation gradient for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX #define OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalDistributionGradient * * This class offers an interface for the InverseNataf gradient for elliptical distributions */ class OT_API InverseNatafEllipticalDistributionGradient : public ConstantGradient { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalDistributionGradient(); /** Parameter constructor */ explicit InverseNatafEllipticalDistributionGradient(const SquareMatrix & inverseCholesky); /** Virtual constructor */ virtual InverseNatafEllipticalDistributionGradient * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* InverseNatafEllipticalDistributionGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX */ InverseNatafEllipticalDistributionHessian.hxx000066400000000000000000000041271307543307100446730ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation hessian for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX #define OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX #include "openturns/OTprivate.hxx" #include "openturns/ConstantHessian.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafEllipticalDistributionHessian * * This class offers an interface for the InverseNataf gradient for elliptical distributions */ class OT_API InverseNatafEllipticalDistributionHessian : public ConstantHessian { CLASSNAME; public: /** Default constructor */ InverseNatafEllipticalDistributionHessian(); /** Parameter constructor */ explicit InverseNatafEllipticalDistributionHessian(const UnsignedInteger dimension); /** Virtual constructor */ virtual InverseNatafEllipticalDistributionHessian * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* InverseNatafEllipticalDistributionHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX */ NatafEllipticalDistributionEvaluation.hxx000066400000000000000000000044321307543307100440530ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX #define OPENTURNS_NATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/LinearEvaluation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalDistributionEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API NatafEllipticalDistributionEvaluation : public LinearEvaluation { CLASSNAME; public: /** Default constructor */ NatafEllipticalDistributionEvaluation(); /** Parameter constructor */ NatafEllipticalDistributionEvaluation(const Point & mean, const TriangularMatrix & inverseCholesky); /** Virtual constructor */ virtual NatafEllipticalDistributionEvaluation * clone() const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* NatafEllipticalDistributionEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALDISTRIBUTIONEVALUATION_HXX */ NatafEllipticalDistributionGradient.hxx000066400000000000000000000041511307543307100434770ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation gradient for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX #define OPENTURNS_NATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/ConstantGradient.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalDistributionGradient * * This class offers an interface for the Nataf gradient for elliptical distributions */ class OT_API NatafEllipticalDistributionGradient : public ConstantGradient { CLASSNAME; public: /** Default constructor */ NatafEllipticalDistributionGradient(); /** Parameter constructor */ NatafEllipticalDistributionGradient(const TriangularMatrix & inverseCholesky); /** Virtual constructor */ virtual NatafEllipticalDistributionGradient * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* NatafEllipticalDistributionGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALDISTRIBUTIONGRADIENT_HXX */ NatafEllipticalDistributionHessian.hxx000066400000000000000000000040121307543307100433300ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation hessian for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX #define OPENTURNS_NATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX #include "openturns/OTprivate.hxx" #include "openturns/ConstantHessian.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafEllipticalDistributionHessian * * This class offers an interface for the Nataf gradient for elliptical distributions */ class OT_API NatafEllipticalDistributionHessian : public ConstantHessian { CLASSNAME; public: /** Default constructor */ NatafEllipticalDistributionHessian(); /** Parameter constructor */ explicit NatafEllipticalDistributionHessian(const UnsignedInteger dimension); /** Virtual constructor */ virtual NatafEllipticalDistributionHessian * clone() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: }; /* NatafEllipticalDistributionHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFELLIPTICALDISTRIBUTIONHESSIAN_HXX */ OTNatafEllipticalDistribution.hxx000066400000000000000000000026351307543307100422710ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafEllipticalDistribution/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir NatafEllipticalDistribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTNATAFELLIPTICALDISTRIBUTION_HXX #define OPENTURNS_OTNATAFELLIPTICALDISTRIBUTION_HXX #include "openturns/InverseNatafEllipticalDistributionEvaluation.hxx" #include "openturns/InverseNatafEllipticalDistributionGradient.hxx" #include "openturns/InverseNatafEllipticalDistributionHessian.hxx" #include "openturns/NatafEllipticalDistributionEvaluation.hxx" #include "openturns/NatafEllipticalDistributionGradient.hxx" #include "openturns/NatafEllipticalDistributionHessian.hxx" #endif /* OPENTURNS_OTNATAFELLIPTICALDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/000077500000000000000000000000001307543307100305745ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/CMakeLists.txt000066400000000000000000000016461307543307100333430ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (NatafIndependentCopulaEvaluation.cxx) ot_add_source_file (NatafIndependentCopulaGradient.cxx) ot_add_source_file (NatafIndependentCopulaHessian.cxx) ot_add_source_file (InverseNatafIndependentCopulaEvaluation.cxx) ot_add_source_file (InverseNatafIndependentCopulaGradient.cxx) ot_add_source_file (InverseNatafIndependentCopulaHessian.cxx) ot_install_header_file (NatafIndependentCopulaGradient.hxx) ot_install_header_file (InverseNatafIndependentCopulaEvaluation.hxx) ot_install_header_file (InverseNatafIndependentCopulaHessian.hxx) ot_install_header_file (OTNatafIndependentCopula.hxx) ot_install_header_file (NatafIndependentCopulaHessian.hxx) ot_install_header_file (NatafIndependentCopulaEvaluation.hxx) ot_install_header_file (InverseNatafIndependentCopulaGradient.hxx) InverseNatafIndependentCopulaEvaluation.cxx000066400000000000000000000064641307543307100412120ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseNatafIndependentCopulaEvaluation.hxx" #include "openturns/DistFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafIndependentCopulaEvaluation * * This class offers an interface for the InverseNataf function for independent copula */ CLASSNAMEINIT(InverseNatafIndependentCopulaEvaluation); /* Parameter constructor */ InverseNatafIndependentCopulaEvaluation::InverseNatafIndependentCopulaEvaluation(const UnsignedInteger dimension) : EvaluationImplementation() , dimension_(dimension) { Description description(Description::BuildDefault(dimension_, "X")); description.add(Description::BuildDefault(dimension_, "Y")); setDescription(description); } /* Virtual constructor */ InverseNatafIndependentCopulaEvaluation * InverseNatafIndependentCopulaEvaluation::clone() const { return new InverseNatafIndependentCopulaEvaluation(*this); } /* String converter */ String InverseNatafIndependentCopulaEvaluation::__repr__() const { OSS oss; oss << "class=" << InverseNatafIndependentCopulaEvaluation::GetClassName() << " description=" << getDescription() << " dimension=" << dimension_; return oss; } String InverseNatafIndependentCopulaEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << InverseNatafIndependentCopulaEvaluation::GetClassName() << "(Normal(" << dimension_ << ")->IndependentCopula(" << dimension_ << "))"; return oss; } /* * Evaluation * The inverse Nataf transform S reads: * Si(u) = Phi(ui), where Phi is the CDF of the standard normal distribution */ Point InverseNatafIndependentCopulaEvaluation::operator () (const Point & inP) const { Point result(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = DistFunc::pNormal(inP[i]); ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. Currently, the dependence parameter are not taken into account. */ Matrix InverseNatafIndependentCopulaEvaluation::parameterGradient(const Point & inP) const { return Matrix(0, dimension_); } /* Accessor for input point dimension */ UnsignedInteger InverseNatafIndependentCopulaEvaluation::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger InverseNatafIndependentCopulaEvaluation::getOutputDimension() const { return dimension_; } END_NAMESPACE_OPENTURNS InverseNatafIndependentCopulaGradient.cxx000066400000000000000000000066111307543307100406320ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseNatafIndependentCopulaGradient.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafIndependentCopulaGradient * * This class offers an interface for the InverseNataf function for independent copula */ CLASSNAMEINIT(InverseNatafIndependentCopulaGradient); static const Factory Factory_InverseNatafIndependentCopulaGradient; /* Default constructor */ InverseNatafIndependentCopulaGradient::InverseNatafIndependentCopulaGradient() : GradientImplementation() , dimension_() { // Nothing to do } /* Parameter constructor */ InverseNatafIndependentCopulaGradient::InverseNatafIndependentCopulaGradient(const UnsignedInteger dimension) : GradientImplementation() , dimension_(dimension) { // Nothing to do } /* Virtual constructor */ InverseNatafIndependentCopulaGradient * InverseNatafIndependentCopulaGradient::clone() const { return new InverseNatafIndependentCopulaGradient(*this); } /* String converter */ String InverseNatafIndependentCopulaGradient::__repr__() const { OSS oss; oss << "class=" << InverseNatafIndependentCopulaGradient::GetClassName() << " dimension=" << dimension_; return oss; } /* * Evaluation * The inverse Nataf transform S reads: * Si(u) = Phi(ui), where Phi is the CDF of the standard normal distribution * Jij = dSi/duj = Phi'(ui) if i = j * = 0 else */ Matrix InverseNatafIndependentCopulaGradient::gradient(const Point & inP) const { Matrix result(dimension_, dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar x = inP[i]; // 0.3989422804014326779399462 = 1/sqrt(2*Pi) result(i, i) = 0.3989422804014326779399462 * exp(-0.5 * x * x); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseNatafIndependentCopulaGradient::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger InverseNatafIndependentCopulaGradient::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void InverseNatafIndependentCopulaGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNatafIndependentCopulaGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS InverseNatafIndependentCopulaHessian.cxx000066400000000000000000000066321307543307100404720ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseNatafIndependentCopulaHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class InverseNatafIndependentCopulaHessian * * This class offers an interface for the InverseNataf function for independent copula */ CLASSNAMEINIT(InverseNatafIndependentCopulaHessian); static const Factory Factory_InverseNatafIndependentCopulaHessian; /* Default constructor */ InverseNatafIndependentCopulaHessian::InverseNatafIndependentCopulaHessian() : HessianImplementation() , dimension_() { // Nothing to do } /* Parameter constructor */ InverseNatafIndependentCopulaHessian::InverseNatafIndependentCopulaHessian(const UnsignedInteger dimension) : HessianImplementation() , dimension_(dimension) { // Nothing to do } /* Virtual constructor */ InverseNatafIndependentCopulaHessian * InverseNatafIndependentCopulaHessian::clone() const { return new InverseNatafIndependentCopulaHessian(*this); } /* String converter */ String InverseNatafIndependentCopulaHessian::__repr__() const { OSS oss; oss << "class=" << InverseNatafIndependentCopulaHessian::GetClassName() << " dimension=" << dimension_; return oss; } /* * Evaluation * The inverse Nataf transform S reads: * Si(u) = Phi(ui), where Phi is the CDF of the standard normal distribution * Hijk = d2Si/dujduk = Phi''(ui) if i = j = k * = 0 else */ SymmetricTensor InverseNatafIndependentCopulaHessian::hessian(const Point & inP) const { SymmetricTensor result(dimension_, dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar x = inP[i]; // 0.3989422804014326779399462 = 1/sqrt(2*Pi) result(i, i, i) = -0.3989422804014326779399462 * x * exp(-0.5 * x * x); } return result; } /* Accessor for input point dimension */ UnsignedInteger InverseNatafIndependentCopulaHessian::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger InverseNatafIndependentCopulaHessian::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void InverseNatafIndependentCopulaHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNatafIndependentCopulaHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS NatafIndependentCopulaEvaluation.cxx000066400000000000000000000102251307543307100376440ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NatafIndependentCopulaEvaluation.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafIndependentCopulaEvaluation * * This class offers an interface for the Nataf function for independent copula */ CLASSNAMEINIT(NatafIndependentCopulaEvaluation); static const Factory Factory_NatafIndependentCopulaEvaluation; /* Default constructor */ NatafIndependentCopulaEvaluation::NatafIndependentCopulaEvaluation() : EvaluationImplementation() , dimension_() { // Nothing to do } /* Parameter constructor */ NatafIndependentCopulaEvaluation::NatafIndependentCopulaEvaluation(const UnsignedInteger dimension) : EvaluationImplementation() , dimension_(dimension) { Description description(Description::BuildDefault(dimension_, "X")); description.add(Description::BuildDefault(dimension_, "Y")); setDescription(description); } /* Virtual constructor */ NatafIndependentCopulaEvaluation * NatafIndependentCopulaEvaluation::clone() const { return new NatafIndependentCopulaEvaluation(*this); } /* String converter */ String NatafIndependentCopulaEvaluation::__repr__() const { OSS oss; oss << "class=" << NatafIndependentCopulaEvaluation::GetClassName() << " description=" << getDescription() << " dimension=" << dimension_; return oss; } String NatafIndependentCopulaEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << NatafIndependentCopulaEvaluation::GetClassName() << "(IndependentCopula(" << dimension_ << ")->Normal(" << dimension_ << "))"; return oss; } /* * Evaluation * The Nataf transform T reads: * Ti(xi) = Q(xi), where Q = Phi^{-1} and Phi is the CDF of the standard normal distribution */ Point NatafIndependentCopulaEvaluation::operator () (const Point & inP) const { Point result(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar x = inP[i]; if ((x < 0.0) || (x > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot evaluate the NatafIndependentCopulaEvaluation if all the components are not in [0, 1], here in=" << inP; result[i] = DistFunc::qNormal(x); } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. Currently, the dependence parameters are not taken into account. */ Matrix NatafIndependentCopulaEvaluation::parameterGradient(const Point & inP) const { return Matrix(0, dimension_); } /* Accessor for input point dimension */ UnsignedInteger NatafIndependentCopulaEvaluation::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger NatafIndependentCopulaEvaluation::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void NatafIndependentCopulaEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void NatafIndependentCopulaEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS NatafIndependentCopulaGradient.cxx000066400000000000000000000070711307543307100372770ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NatafIndependentCopulaGradient.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafIndependentCopulaGradient * * This class offers an interface for the Nataf function for independent copula */ CLASSNAMEINIT(NatafIndependentCopulaGradient); static const Factory Factory_NatafIndependentCopulaGradient; /* Default constructor */ NatafIndependentCopulaGradient::NatafIndependentCopulaGradient() : GradientImplementation() , dimension_() { // Nothing to do } /* Parameter constructor */ NatafIndependentCopulaGradient::NatafIndependentCopulaGradient(const UnsignedInteger dimension) : GradientImplementation() , dimension_(dimension) { // Nothing to do } /* Virtual constructor */ NatafIndependentCopulaGradient * NatafIndependentCopulaGradient::clone() const { return new NatafIndependentCopulaGradient(*this); } /* String converter */ String NatafIndependentCopulaGradient::__repr__() const { OSS oss; oss << "class=" << NatafIndependentCopulaGradient::GetClassName() << " dimension=" << dimension_; return oss; } /* * Evaluation * The Nataf transform T reads: * Ti(xi) = Q(xi), where Q = Phi^{-1} and Phi is the CDF of the standard normal distribution * We have: * Jij = dTi/dxj = Q'(xi) if i = j * = 0 else */ Matrix NatafIndependentCopulaGradient::gradient(const Point & inP) const { Matrix result(dimension_, dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar x = inP[i]; if ((x < 0.0) || (x > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot evaluate the NatafIndependentCopulaGradient if all the components are not in [0, 1], here in=" << inP; // q = Normal(0,1).computeQuantile(x) const Scalar q = DistFunc::qNormal(x); // 2.506628274631000502415765 = sqrt(2*Pi) result(i, i) = 2.506628274631000502415765 * exp(0.5 * q * q); } return result; } /* Accessor for input point dimension */ UnsignedInteger NatafIndependentCopulaGradient::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger NatafIndependentCopulaGradient::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void NatafIndependentCopulaGradient::save(Advocate & adv) const { GradientImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void NatafIndependentCopulaGradient::load(Advocate & adv) { GradientImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS NatafIndependentCopulaHessian.cxx000066400000000000000000000073411307543307100371340ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NatafIndependentCopulaHessian.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class NatafIndependentCopulaHessian * * This class offers an interface for the Nataf function for independent copula */ CLASSNAMEINIT(NatafIndependentCopulaHessian); static const Factory Factory_NatafIndependentCopulaHessian; /* Default constructor */ NatafIndependentCopulaHessian::NatafIndependentCopulaHessian() : HessianImplementation() , dimension_() { // Nothing to do } /* Parameter constructor */ NatafIndependentCopulaHessian::NatafIndependentCopulaHessian(const UnsignedInteger dimension) : HessianImplementation() , dimension_(dimension) { // Nothing to do } /* Virtual constructor */ NatafIndependentCopulaHessian * NatafIndependentCopulaHessian::clone() const { return new NatafIndependentCopulaHessian(*this); } /* String converter */ String NatafIndependentCopulaHessian::__repr__() const { OSS oss; oss << "class=" << NatafIndependentCopulaHessian::GetClassName() << " dimension=" << dimension_; return oss; } /* * Evaluation * The Nataf transform T reads: * Ti(xi) = Q(xi), where Q = Phi^{-1} and Phi is the CDF of the standard normal distribution * We have: * Hijk = d2Ti/dxjdxk = Q''(xi) if i = j = k * = 0 else */ SymmetricTensor NatafIndependentCopulaHessian::hessian(const Point & inP) const { SymmetricTensor result(dimension_, dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { Scalar x = inP[i]; if ((x < 0.0) || (x > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot evaluate the NatafIndependentCopulaHessian if all the components are not in [0, 1], here in=" << inP; // q = Normal(0,1).computeQuantile(x) const Scalar q = DistFunc::qNormal(x); // factor = 1/Normal(0,1).computePDF(q) // 6.283185307179586476925286 = 2Pi // quantileSecondDerivative = -Normal(0,1).computeDDF(q) / (Normal(0,1).computePDF(q))^3 = q / (Normal(0,1).computePDF(q))^2 result(i, i, i) = 6.283185307179586476925286 * q * exp(q * q); } return result; } /* Accessor for input point dimension */ UnsignedInteger NatafIndependentCopulaHessian::getInputDimension() const { return dimension_; } /* Accessor for output point dimension */ UnsignedInteger NatafIndependentCopulaHessian::getOutputDimension() const { return dimension_; } /* Method save() stores the object through the StorageManager */ void NatafIndependentCopulaHessian::save(Advocate & adv) const { HessianImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_ ); } /* Method load() reloads the object from the StorageManager */ void NatafIndependentCopulaHessian::load(Advocate & adv) { HessianImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns/000077500000000000000000000000001307543307100326315ustar00rootroot00000000000000InverseNatafIndependentCopulaEvaluation.hxx000066400000000000000000000043621307543307100432470ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFINDEPENDENTCOPULAEVALUATION_HXX #define OPENTURNS_INVERSENATAFINDEPENDENTCOPULAEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafIndependentCopulaEvaluation * * This class offers an interface for the InverseNataf function for independent distributions */ class OT_API InverseNatafIndependentCopulaEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Parameter constructor */ explicit InverseNatafIndependentCopulaEvaluation(const UnsignedInteger dimension); /** Virtual constructor */ virtual InverseNatafIndependentCopulaEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; protected: private: UnsignedInteger dimension_; }; /* InverseNatafIndependentCopulaEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFINDEPENDENTCOPULAEVALUATION_HXX */ InverseNatafIndependentCopulaGradient.hxx000066400000000000000000000046061307543307100426760ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFINDEPENDENTCOPULAGRADIENT_HXX #define OPENTURNS_INVERSENATAFINDEPENDENTCOPULAGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafIndependentCopulaGradient * * This class offers an interface for the InverseNataf function for independent distributions */ class OT_API InverseNatafIndependentCopulaGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ InverseNatafIndependentCopulaGradient(); /** Parameter constructor */ explicit InverseNatafIndependentCopulaGradient(const UnsignedInteger dimension); /** Virtual constructor */ virtual InverseNatafIndependentCopulaGradient * clone() const; /** Gradient */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: UnsignedInteger dimension_; }; /* InverseNatafIndependentCopulaGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFINDEPENDENTCOPULAGRADIENT_HXX */ InverseNatafIndependentCopulaHessian.hxx000066400000000000000000000045421307543307100425320ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the InverseNataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENATAFINDEPENDENTCOPULAHESSIAN_HXX #define OPENTURNS_INVERSENATAFINDEPENDENTCOPULAHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNatafIndependentCopulaHessian * * This class offers an interface for the InverseNataf function for independent distributions */ class OT_API InverseNatafIndependentCopulaHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ InverseNatafIndependentCopulaHessian(); /** Parameter constructor */ explicit InverseNatafIndependentCopulaHessian(const UnsignedInteger dimension); /** Virtual constructor */ virtual InverseNatafIndependentCopulaHessian * clone() const; /** Hessian */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: UnsignedInteger dimension_; }; /* InverseNatafIndependentCopulaHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENATAFINDEPENDENTCOPULAHESSIAN_HXX */ NatafIndependentCopulaEvaluation.hxx000066400000000000000000000047401307543307100417130ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFINDEPENDENTCOPULAEVALUATION_HXX #define OPENTURNS_NATAFINDEPENDENTCOPULAEVALUATION_HXX #include "openturns/EvaluationImplementation.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafIndependentCopulaEvaluation * * This class offers an interface for the Nataf function for independent distributions */ class OT_API NatafIndependentCopulaEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ NatafIndependentCopulaEvaluation(); /** Parameter constructor */ explicit NatafIndependentCopulaEvaluation(const UnsignedInteger dimension); /** Virtual constructor */ virtual NatafIndependentCopulaEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: UnsignedInteger dimension_; }; /* NatafIndependentCopulaEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFINDEPENDENTCOPULAEVALUATION_HXX */ NatafIndependentCopulaGradient.hxx000066400000000000000000000044711307543307100413420ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFINDEPENDENTCOPULAGRADIENT_HXX #define OPENTURNS_NATAFINDEPENDENTCOPULAGRADIENT_HXX #include "openturns/GradientImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafIndependentCopulaGradient * * This class offers an interface for the Nataf function for independent distributions */ class OT_API NatafIndependentCopulaGradient : public GradientImplementation { CLASSNAME; public: /** Default constructor */ NatafIndependentCopulaGradient(); /** Parameter constructor */ explicit NatafIndependentCopulaGradient(const UnsignedInteger dimension); /** Virtual constructor */ virtual NatafIndependentCopulaGradient * clone() const; /** Gradient */ Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: UnsignedInteger dimension_; }; /* NatafIndependentCopulaGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFINDEPENDENTCOPULAGRADIENT_HXX */ NatafIndependentCopulaHessian.hxx000066400000000000000000000044761307543307100412040ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for independent * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NATAFINDEPENDENTCOPULAHESSIAN_HXX #define OPENTURNS_NATAFINDEPENDENTCOPULAHESSIAN_HXX #include "openturns/HessianImplementation.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/Point.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NatafIndependentCopulaHessian * * This class offers an interface for the Nataf function for independent distributions */ class OT_API NatafIndependentCopulaHessian : public HessianImplementation { CLASSNAME; public: /** Default constructor */ NatafIndependentCopulaHessian(); /** Parameter constructor */ explicit NatafIndependentCopulaHessian(const UnsignedInteger dimension); /** Virtual constructor */ virtual NatafIndependentCopulaHessian * clone() const; /** Hessian */ SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: UnsignedInteger dimension_; }; /* NatafIndependentCopulaHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NATAFINDEPENDENTCOPULAHESSIAN_HXX */ OTNatafIndependentCopula.hxx000066400000000000000000000025531307543307100401260ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/NatafIndependentCopula/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir NatafIndependentCopula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTNATAFINDEPENDENTCOPULA_HXX #define OPENTURNS_OTNATAFINDEPENDENTCOPULA_HXX #include "openturns/InverseNatafIndependentCopulaEvaluation.hxx" #include "openturns/InverseNatafIndependentCopulaGradient.hxx" #include "openturns/InverseNatafIndependentCopulaHessian.hxx" #include "openturns/NatafIndependentCopulaEvaluation.hxx" #include "openturns/NatafIndependentCopulaGradient.hxx" #include "openturns/NatafIndependentCopulaHessian.hxx" #endif /* OPENTURNS_OTNATAFINDEPENDENTCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/000077500000000000000000000000001307543307100305665ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/BoxCoxFactory.cxx000066400000000000000000000370111307543307100340460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BoxCoxFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Field.hxx" #include "openturns/BoxCoxEvaluation.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Log.hxx" #include "openturns/BoxCoxTransform.hxx" #include "openturns/InverseBoxCoxTransform.hxx" #include "openturns/Curve.hxx" #include "openturns/Cloud.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Cobyla.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/GeneralLinearModelAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxFactory */ CLASSNAMEINIT(BoxCoxFactory); static const Factory Factory_BoxCoxFactory; class BoxCoxSampleOptimization { private: /** only used to pass data to be used in computeLogLikeliHood */ mutable Sample sample_; /** only used to pass data to be used in computeLogLikeliHood */ mutable Scalar sumLog_; /** Optimization solver */ mutable OptimizationAlgorithm solver_; public: BoxCoxSampleOptimization(const Sample & sample, const Scalar sumLog) : sample_(sample) , sumLog_(sumLog) , solver_(new Cobyla()) { // Nothing to do } BoxCoxSampleOptimization(const Sample & sample, const OptimizationAlgorithm & solver) : sample_(sample) , sumLog_(0.0) , solver_(solver) { computeSumLog(); } /** Likelihood function */ Point computeLogLikelihood(const Point & lambda) const { const UnsignedInteger size = sample_.getSize(); // Define BoxCox trannsformation for sample BoxCoxEvaluation myBoxFunction(Point(1, lambda[0])); // compute the mean of the transformed sample using the Box-Cox function const Sample outSample(myBoxFunction(sample_)); const Scalar ratio = 1.0 - 1.0 / size; const Scalar sigma2 = outSample.computeVariance()[0]; Scalar result = -0.5 * size * log(sigma2 * ratio); // result is translated result += (lambda[0] - 1.0) * sumLog_; return Point(1, result); } void computeSumLog() const { // Compute the sum of the log-data const UnsignedInteger size = sample_.getSize(); sumLog_ = 0.0; for (UnsignedInteger k = 0; k < size; ++k) sumLog_ += std::log(sample_[k][0]); } /** Likelihood function accessor */ Function getLogLikelihoodFunction() const { return bindMethod ( *this, &BoxCoxSampleOptimization::computeLogLikelihood, 1, 1); } Point optimizeLogLikelihood() const { // Define optimization problem OptimizationProblem problem; problem.setObjective(getLogLikelihoodFunction()); problem.setMinimization(false); solver_.setProblem(problem); solver_.setStartingPoint(Point(1, 1.0)); // run Optimization problem solver_.run(); // Return optimization point const Point optpoint(solver_.getResult().getOptimalPoint()); return optpoint; } Scalar getSumLog() const { return sumLog_; } }; class BoxCoxGLMOptimization { typedef BoxCoxFactory::BasisCollection BasisCollection; private: /** only used to pass data to be used in computeLogLikeliHood */ mutable Sample inputSample_; mutable Sample shiftedOutputSample_; mutable CovarianceModel covarianceModel_; mutable BasisCollection basis_; /** Optimization solver */ mutable OptimizationAlgorithm solver_; public: BoxCoxGLMOptimization(const Sample & inputSample, const Sample & shiftedOutputSample, const CovarianceModel & covarianceModel, const BasisCollection & basis, const OptimizationAlgorithm & solver) : inputSample_(inputSample) , shiftedOutputSample_(shiftedOutputSample) , covarianceModel_(covarianceModel) , basis_(basis) , solver_(solver) { // Nothing to do } /** Likelihood function */ Point computeLogLikelihood(const Point & lambda) const { // Define BoxCox trannsformation for output sample BoxCoxEvaluation myBoxFunction(lambda); // compute the mean of the transformed sample using the Box-Cox function const Sample transformedOutputSample(myBoxFunction(shiftedOutputSample_)); // Use of GLM to estimate the best generalized linear model GeneralLinearModelAlgorithm algo(inputSample_, transformedOutputSample, covarianceModel_, basis_); algo.run(); // Return the optimal log-likelihood const Scalar result = algo.getResult().getOptimalLogLikelihood(); return Point(1, result); } /** Likelihood function accessor */ Function getLogLikelihoodFunction() const { return bindMethod ( *this, &BoxCoxGLMOptimization::computeLogLikelihood, 1, 1); } Point optimizeLogLikelihood() const { // Define optimization problem OptimizationProblem problem; Function objectiveFunction(getLogLikelihoodFunction()); objectiveFunction.enableCache(); objectiveFunction.enableHistory(); problem.setObjective(objectiveFunction); problem.setMinimization(false); solver_.setProblem(problem); solver_.setStartingPoint(Point(1, 1.0)); // run Optimization problem solver_.run(); // Return optimization point const Point optpoint(solver_.getResult().getOptimalPoint()); return optpoint; } }; /* Constructor with parameters */ BoxCoxFactory::BoxCoxFactory() : PersistentObject() , solver_(new Cobyla()) { const Scalar rhoBeg = ResourceMap::GetAsScalar("BoxCoxFactory-DefaultRhoBeg"); dynamic_cast(solver_.getImplementation().get())->setRhoBeg(rhoBeg); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("BoxCoxFactory-DefaultRhoEnd")); solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("BoxCoxFactory-DefaultMaxFun")); } /* Virtual constructor */ BoxCoxFactory * BoxCoxFactory::clone() const { return new BoxCoxFactory(*this); } OptimizationAlgorithm BoxCoxFactory::getOptimizationAlgorithm() const { return solver_; } void BoxCoxFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm BoxCoxFactory::getOptimizationSolver() const { Log::Warn(OSS() << "BoxCoxFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void BoxCoxFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "BoxCoxFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } /* Build the factory from data */ BoxCoxTransform BoxCoxFactory::build(const Field & timeSeries) const { return build(timeSeries.getSample()); } BoxCoxTransform BoxCoxFactory::build(const Field & timeSeries, const Point & shift) const { return build(timeSeries.getSample(), shift); } BoxCoxTransform BoxCoxFactory::build(const Field & timeSeries, const Point & shift, Graph & graph) const { return build(timeSeries.getSample(), shift, graph); } BoxCoxTransform BoxCoxFactory::build(const Sample & sample) const { return build(sample, Point(sample.getDimension())); } BoxCoxTransform BoxCoxFactory::build(const Sample & sample, const Point & shift) const { Graph tmp; return build(sample, shift, tmp); } BoxCoxTransform BoxCoxFactory::build(const Sample & sample, const Point & shift, Graph & graph) const { // Check the input size const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Box-Cox factory from an empty time series"; // Check the input dimensions const UnsignedInteger dimension = sample.getDimension(); if (shift.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the shift has a dimension=" << shift.getDimension() << " different from the sample dimension=" << dimension; // Shape parameters of the transformation Point lambda(dimension); // Sum of the log-data Point sumLog(dimension); // Keep the shifted marginal samples Collection< Sample > marginalSamples(dimension); for (UnsignedInteger d = 0; d < dimension; ++d) { // Extract the marginal sample and pply the shift marginalSamples[d] = sample.getMarginal(d); marginalSamples[d] += Point(1, shift[d]); BoxCoxSampleOptimization boxCoxOptimization(marginalSamples[d], solver_); const Point optpoint = boxCoxOptimization.optimizeLogLikelihood(); // get the sum of the log-data sumLog[d] = boxCoxOptimization.getSumLog(); // Store the result lambda[d] = optpoint[0]; } // Graphical inspection graph = Graph("Box-Cox likelihood", "lambda", "log-likelihood", true, "topright"); const Scalar lambdaMax = *std::max_element(lambda.begin(), lambda.end()); const Scalar lambdaMin = *std::min_element(lambda.begin(), lambda.end()); const Scalar xMin = std::min(0.0, 0.002 * round(1000.0 * lambdaMin)); const Scalar xMax = std::max(0.0, 0.002 * round(1000.0 * lambdaMax)); const UnsignedInteger npts = ResourceMap::GetAsUnsignedInteger("BoxCoxFactory-DefaultPointNumber"); Sample lambdaValues(npts, 1); for (UnsignedInteger i = 0; i < npts; ++i) lambdaValues[i][0] = xMin + i * (xMax - xMin) / (npts - 1.0); for (UnsignedInteger d = 0; d < dimension; ++d) { Sample logLikelihoodValues(npts, 1); BoxCoxSampleOptimization boxCoxOptimization(marginalSamples[d], sumLog[d]); for (UnsignedInteger i = 0; i < npts; ++i) logLikelihoodValues[i][0] = boxCoxOptimization.computeLogLikelihood(lambdaValues[i])[0]; Curve curve(lambdaValues, logLikelihoodValues); curve.setColor(Curve::ConvertFromHSV((360.0 * d) / dimension, 1.0, 1.0)); graph.add(curve); Point optimum(2); optimum[0] = lambda[d]; optimum[1] = boxCoxOptimization.computeLogLikelihood(optimum)[0]; Cloud cloud(Sample(1, optimum)); cloud.setColor(curve.getColor()); cloud.setPointStyle("circle"); cloud.setLegend(String(OSS() << "lambda=" << lambda[d])); graph.add(cloud); Point bb(graph.getBoundingBox()); bb[3] += 0.1 * (bb[3] - bb[2]); graph.setBoundingBox(bb); } // return result ==> Box Cox transform return BoxCoxTransform(lambda, shift); } void BoxCoxFactory::checkGLMData(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basis) { // Check the input size const UnsignedInteger size = inputSample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Box-Cox factory from empty data"; if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: input and output sample have different size. Could not perform GLM & Box Cox algorithms"; // Check the dimensions const UnsignedInteger dimension = outputSample.getDimension(); const UnsignedInteger spatialDimension = inputSample.getDimension(); if (covarianceModel.getSpatialDimension() != spatialDimension) throw InvalidArgumentException(HERE) << "Error: the covariance model has a spatial dimension=" << covarianceModel.getSpatialDimension() << " different from the input sample dimension=" << spatialDimension; if (covarianceModel.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the covariance model should be of dimension " << dimension << ". Here, covariance model dimension=" << covarianceModel.getDimension(); if ((basis.getSize() != 0) && (basis.getSize() != dimension)) throw InvalidArgumentException(HERE) << "Error: the basis should be of size 0 or " << dimension << ". Here, basis size=" << basis.getSize(); } /** Build the factory from data by estimating the best generalized linear model */ BoxCoxTransform BoxCoxFactory::build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Point & shift, GeneralLinearModelResult & result) { BasisCollection basisColl(outputSample.getDimension(), basis); return build(inputSample, outputSample, covarianceModel, basisColl, shift, result); } BoxCoxTransform BoxCoxFactory::build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Point & shift, GeneralLinearModelResult & result) { BasisCollection basis; return build(inputSample, outputSample, covarianceModel, basis, shift, result); } BoxCoxTransform BoxCoxFactory::build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basis, const Point & shift, GeneralLinearModelResult & result) { checkGLMData(inputSample, outputSample, covarianceModel, basis); // Check the dimensions const UnsignedInteger dimension = outputSample.getDimension(); if (shift.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the shift has a dimension=" << shift.getDimension() << " different from the output sample dimension=" << dimension; // Keep the shifted marginal samples Sample shiftedSample(outputSample); shiftedSample += shift; // optimization process BoxCoxGLMOptimization boxCoxOptimization(inputSample, shiftedSample, covarianceModel, basis, solver_); const Point lambda = boxCoxOptimization.optimizeLogLikelihood(); // Define BoxCox trannsformation for output sample BoxCoxEvaluation myBoxFunction(lambda, shift); // compute the transformed output sample using the Box-Cox function const Sample transformedOutputSample = myBoxFunction(outputSample); // Build the GeneralLinearModelResult // Use of GLM to estimate the best generalized linear model GeneralLinearModelAlgorithm algo(inputSample, transformedOutputSample, covarianceModel, basis); algo.run(); // Get result result = algo.getResult(); return BoxCoxTransform(lambda, shift); } /* String converter */ String BoxCoxFactory::__repr__() const { OSS oss; oss << "class=" << BoxCoxFactory::GetClassName(); return oss; } /* String converter */ String BoxCoxFactory::__str__(const String & offset) const { OSS oss; oss << "class=" << BoxCoxFactory::GetClassName(); return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/CMakeLists.txt000066400000000000000000000005411307543307100333260ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (BoxCoxFactory.cxx) ot_add_source_file (TrendFactory.cxx) ot_install_header_file (BoxCoxFactory.hxx) ot_install_header_file (TrendFactory.hxx) ot_install_header_file (OTProcessTransformation.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/TrendFactory.cxx000066400000000000000000000104341307543307100337200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TrendFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LeastSquaresMetaModelSelection.hxx" #include "openturns/Point.hxx" #include "openturns/DualLinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TrendFactory */ CLASSNAMEINIT(TrendFactory); // static const Factory Factory_TrendFactory; /* Constructor with parameters */ TrendFactory::TrendFactory(const BasisSequenceFactory & basisSequenceFactory, const FittingAlgorithm & fittingAlgorithm) : PersistentObject(), basisSequenceFactory_(basisSequenceFactory), fittingAlgorithm_(fittingAlgorithm) { // Nothing to do } /* Virtual constructor */ TrendFactory * TrendFactory::clone() const { return new TrendFactory(*this); } /* BasisSequenceFactory get accessor */ BasisSequenceFactory TrendFactory::getBasisSequenceFactory() const { return basisSequenceFactory_; } /* BasisSequenceFactory set accessor */ void TrendFactory::setBasisSequenceFactory(const BasisSequenceFactory & basisSequenceFactory) { basisSequenceFactory_ = basisSequenceFactory; } /* FittingAlgorithm get accessor */ FittingAlgorithm TrendFactory::getFittingAlgorithm() const { return fittingAlgorithm_; } /* FittingAlgorithm set accessor */ void TrendFactory::setFittingAlgorithm(const FittingAlgorithm & fittingAlgorithm) { fittingAlgorithm_ = fittingAlgorithm; } /* Build the factory from data */ TrendTransform TrendFactory::build(const Field & field, const Basis & basis) const { // size of the collection const UnsignedInteger N = basis.getSize(); // Dimension and size of the time series const UnsignedInteger dimension = field.getDimension(); Sample inputSample(field.getMesh().getVertices()); // We need a sample to get coefficients result Sample coefficients(N, dimension); Collection coll(N); Indices indices(N); indices.fill(); for (UnsignedInteger k = 0; k < N ; ++k) coll[k] = basis[k]; for (UnsignedInteger d = 0; d < dimension; ++d) { // We look for best coefficients by marginal const Sample outputSample(field.getValues().getMarginal(d)); LeastSquaresMetaModelSelection selectionAlgo(inputSample, outputSample, coll, indices, basisSequenceFactory_, fittingAlgorithm_); selectionAlgo.run(); Point localCoefficients(selectionAlgo.getCoefficients()); for (UnsignedInteger k = 0; k < N ; ++k) coefficients[k][d] = localCoefficients[k]; } const DualLinearCombinationFunction trendFunction(coll, coefficients); return TrendTransform(trendFunction); } /* String converter */ String TrendFactory::__repr__() const { OSS oss(true); oss << "class=" << TrendFactory::GetClassName() << " fittingAlgorithm = " << fittingAlgorithm_ << " basisSequenceFactory = " << basisSequenceFactory_; return oss; } /* String converter */ String TrendFactory::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void TrendFactory::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("fittingAlgorithm_", fittingAlgorithm_); adv.saveAttribute("basisSequenceFactory_", basisSequenceFactory_); } /* Method load() reloads the object from the StorageManager */ void TrendFactory::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("fittingAlgorithm_", fittingAlgorithm_); adv.loadAttribute("basisSequenceFactory_", basisSequenceFactory_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/openturns/000077500000000000000000000000001307543307100326235ustar00rootroot00000000000000BoxCoxFactory.hxx000066400000000000000000000101651307543307100360320ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/openturns// -*- C++ -*- /** * @brief This class is enables to estimate parameters of the BoxCox model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BOXCOXFACTORY_HXX #define OPENTURNS_BOXCOXFACTORY_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Field.hxx" #include "openturns/BoxCoxTransform.hxx" #include "openturns/Graph.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/Basis.hxx" #include "openturns/GeneralLinearModelResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BoxCoxFactory */ class OT_API BoxCoxFactory : public PersistentObject { CLASSNAME; public: typedef GeneralLinearModelResult::BasisCollection BasisCollection; /** Default constructor without parameters */ BoxCoxFactory(); /** Virtual copy constructor */ BoxCoxFactory * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Build the factory from data by estimating the best \lambda which maximizes the log-likelihood function */ BoxCoxTransform build(const Field & timeSeries) const; BoxCoxTransform build(const Field & timeSeries, const Point & shift) const; BoxCoxTransform build(const Field & timeSeries, const Point & shift, Graph & graph) const; BoxCoxTransform build(const Sample & sample) const; BoxCoxTransform build(const Sample & sample, const Point & shift) const; BoxCoxTransform build(const Sample & sample, const Point & shift, Graph & graph) const; /** Build the factory from data by estimating the best generalized linear model */ BoxCoxTransform build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Basis & basis, const Point & shift, GeneralLinearModelResult & result); BoxCoxTransform build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basis, const Point & shift, GeneralLinearModelResult & result); BoxCoxTransform build(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const Point & shift, GeneralLinearModelResult & result); /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Optimization solver */ OptimizationAlgorithm solver_; void checkGLMData(const Sample & inputSample, const Sample & outputSample, const CovarianceModel & covarianceModel, const BasisCollection & basis); } ; /* class BoxCoxFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOXCOXFACTORY_HXX */ OTProcessTransformation.hxx000066400000000000000000000021161307543307100401050ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/openturns// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir ProcessTransformation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTPROCESSTRANSFORMATION_HXX #define OPENTURNS_OTPROCESSTRANSFORMATION_HXX #include "openturns/BoxCoxFactory.hxx" #include "openturns/TrendFactory.hxx" #endif /* OPENTURNS_OTPROCESSTRANSFORMATION_HXX */ TrendFactory.hxx000066400000000000000000000054161307543307100357070ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/ProcessTransformation/openturns// -*- C++ -*- /** * @brief This class is enables to estimate trend * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRENDFACTORY_HXX #define OPENTURNS_TRENDFACTORY_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/Field.hxx" #include "openturns/TrendTransform.hxx" #include "openturns/FittingAlgorithm.hxx" #include "openturns/BasisSequenceFactory.hxx" #include "openturns/CorrectedLeaveOneOut.hxx" #include "openturns/LARS.hxx" #include "openturns/Collection.hxx" #include "openturns/Basis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TrendFactory */ class OT_API TrendFactory : public PersistentObject { CLASSNAME; public: /** Standard constructor */ explicit TrendFactory(const BasisSequenceFactory & basisSequenceFactory = LARS(), const FittingAlgorithm & fittingAlgorithm = CorrectedLeaveOneOut()); /** BasisSequenceFactory accessors */ BasisSequenceFactory getBasisSequenceFactory() const; void setBasisSequenceFactory(const BasisSequenceFactory & basisSequenceFactory); /** FittingAlgorithm accessors */ FittingAlgorithm getFittingAlgorithm() const; void setFittingAlgorithm(const FittingAlgorithm & fittingAlgorithm); /** Virtual copy constructor */ virtual TrendFactory * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Build the factory from data */ TrendTransform build(const Field & field, const Basis & basis) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** BasisSequenceFactory argument - Default is LAR */ BasisSequenceFactory basisSequenceFactory_; /** FittingAlgorithm used in evaluation */ FittingAlgorithm fittingAlgorithm_; } ; /* class TrendFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRENDFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/000077500000000000000000000000001307543307100263365ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/CMakeLists.txt000066400000000000000000000006021307543307100310740ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (RosenblattEvaluation.cxx) ot_add_source_file (InverseRosenblattEvaluation.cxx) ot_install_header_file (OTRosenblatt.hxx) ot_install_header_file (InverseRosenblattEvaluation.hxx) ot_install_header_file (RosenblattEvaluation.hxx) InverseRosenblattEvaluation.cxx000066400000000000000000000104721307543307100345100ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseRosenblattEvaluation); static const Factory Factory_InverseRosenblattEvaluation; /* Default constructor */ InverseRosenblattEvaluation::InverseRosenblattEvaluation() : EvaluationImplementation() , distribution_() { // Nothing to do } /* Parameter constructor */ InverseRosenblattEvaluation::InverseRosenblattEvaluation(const Distribution & distribution) : EvaluationImplementation() , distribution_(distribution) { Description description(Description::BuildDefault(distribution.getDimension(), "X")); description.add(distribution.getDescription()); setDescription(description); } /* Virtual constructor */ InverseRosenblattEvaluation * InverseRosenblattEvaluation::clone() const { return new InverseRosenblattEvaluation(*this); } /* Evaluation */ Point InverseRosenblattEvaluation::operator () (const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension << ", got dimension=" << inP.getDimension(); Point result(dimension); Point y(0); // Apply conditional Quantile o Phi over the components for (UnsignedInteger i = 0; i < dimension; ++i) { result[i] = distribution_.computeConditionalQuantile(DistFunc::pNormal(inP[i]), y); y.add(result[i]); } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* * Gradient according to the marginal parameters. * F(Q(y, p), p) = Id * F:RxRp->R * Q:RxRp->R * dF/dp = dF/dx(Q(y, p), p) . dQ/dp(y, p) + dF/dp(Q(y, p), p) * = f(Q(y, p), p) . dQ/dp(y, p) + dF/dp(Q(y, p), p) * = 0 * => dQ/dp(y, p) = - dF/dp(Q(y, p), p) / f(Q(y, p), p) */ Matrix InverseRosenblattEvaluation::parameterGradient(const Point & inP) const { throw NotYetImplementedException(HERE) << "In InverseRosenblattEvaluation::parameterGradient(const Point & inP) const"; } /* Accessor for input point dimension */ UnsignedInteger InverseRosenblattEvaluation::getInputDimension() const { return distribution_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger InverseRosenblattEvaluation::getOutputDimension() const { return distribution_.getDimension(); } /* String converter */ String InverseRosenblattEvaluation::__repr__() const { OSS oss; oss << "class=" << InverseRosenblattEvaluation::GetClassName() << " description=" << getDescription() << " distribution=" << distribution_; return oss; } String InverseRosenblattEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << InverseRosenblattEvaluation::GetClassName() << "(Normal(" << distribution_.getDimension() << ")->" << distribution_ << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void InverseRosenblattEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); } /* Method load() reloads the object from the StorageManager */ void InverseRosenblattEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/RosenblattEvaluation.cxx000066400000000000000000000077261307543307100332430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for the Nataf transformation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RosenblattEvaluation.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RosenblattEvaluation); static const Factory Factory_RosenblattEvaluation; /* Default constructor */ RosenblattEvaluation::RosenblattEvaluation() : EvaluationImplementation() , distribution_() { // Nothing to do } /* Parameter constructor */ RosenblattEvaluation::RosenblattEvaluation(const Distribution & distribution) : EvaluationImplementation() , distribution_(distribution) { Description description(distribution.getDescription()); description.add(Description::BuildDefault(distribution.getDimension(), "Y")); setDescription(description); } /* Virtual constructor */ RosenblattEvaluation * RosenblattEvaluation::clone() const { return new RosenblattEvaluation(*this); } /* Evaluation */ Point RosenblattEvaluation::operator () (const Point & inP) const { const UnsignedInteger dimension = getOutputDimension(); if (inP.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension << ", got dimension=" << inP.getDimension(); Point result(dimension); Point y(0); // Apply Phi^{-1} o conditional CDF over the components for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar conditionalCDF = distribution_.computeConditionalCDF(inP[i], y); result[i] = DistFunc::qNormal(conditionalCDF); y.add(inP[i]); } ++callsNumber_; if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(result); } return result; } /* Gradient according to the marginal parameters. */ Matrix RosenblattEvaluation::parameterGradient(const Point & inP) const { throw NotYetImplementedException(HERE) << "In RosenblattEvaluation::parameterGradient(const Point & inP) const"; } /* Accessor for input point dimension */ UnsignedInteger RosenblattEvaluation::getInputDimension() const { return distribution_.getDimension(); } /* Accessor for output point dimension */ UnsignedInteger RosenblattEvaluation::getOutputDimension() const { return distribution_.getDimension(); } /* String converter */ String RosenblattEvaluation::__repr__() const { OSS oss; oss << "class=" << RosenblattEvaluation::GetClassName() << " description=" << getDescription() << " distribution=" << distribution_; return oss; } String RosenblattEvaluation::__str__(const String & offset) const { OSS oss(false); oss << offset << RosenblattEvaluation::GetClassName() << "(" << distribution_ << "->Normal(" << distribution_.getDimension() << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void RosenblattEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); } /* Method load() reloads the object from the StorageManager */ void RosenblattEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/openturns/000077500000000000000000000000001307543307100303735ustar00rootroot00000000000000InverseRosenblattEvaluation.hxx000066400000000000000000000050461307543307100365530ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformationEvaluation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSEROSENBLATTEVALUATION_HXX #define OPENTURNS_INVERSEROSENBLATTEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseRosenblattEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API InverseRosenblattEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ InverseRosenblattEvaluation(); /** Parameter constructor */ explicit InverseRosenblattEvaluation(const Distribution & distribution); /** Virtual constructor */ virtual InverseRosenblattEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution distribution_; }; /* InverseRosenblattEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEROSENBLATTEVALUATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/openturns/OTRosenblatt.hxx000066400000000000000000000020671307543307100335110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Rosenblatt * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTROSENBLATT_HXX #define OPENTURNS_OTROSENBLATT_HXX #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/RosenblattEvaluation.hxx" #endif /* OPENTURNS_OTROSENBLATT_HXX */ RosenblattEvaluation.hxx000066400000000000000000000047461307543307100352250ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/Rosenblatt/openturns// -*- C++ -*- /** * @brief Class for the Nataf transformationEvaluation evaluation for elliptical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ROSENBLATTEVALUATION_HXX #define OPENTURNS_ROSENBLATTEVALUATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Point.hxx" #include "openturns/Distribution.hxx" #include "openturns/StorageManager.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RosenblattEvaluation * * This class offers an interface for the Nataf function for elliptical distributions */ class OT_API RosenblattEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Default constructor */ RosenblattEvaluation(); /** Parameter constructor */ explicit RosenblattEvaluation(const Distribution & distribution); /** Virtual constructor */ virtual RosenblattEvaluation * clone() const; /** Evaluation */ Point operator () (const Point & inP) const; /** Gradient according to the marginal parameters */ virtual Matrix parameterGradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: Distribution distribution_; }; /* RosenblattEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ROSENBLATTEVALUATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/openturns/000077500000000000000000000000001307543307100262565ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/openturns/DistributionTransformation.hxx000066400000000000000000000035501307543307100344200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Isoprobabilistic transformation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONTRANSFORMATION_HXX #define OPENTURNS_DISTRIBUTIONTRANSFORMATION_HXX #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionTransformation * */ class OT_API DistributionTransformation : public Function { CLASSNAME; public: /* Default constructor */ DistributionTransformation(); /** Parameter constructor */ DistributionTransformation (const Distribution & left, const Distribution & right); /** Comparison operator */ Bool operator ==(const DistributionTransformation & other) const; DistributionTransformation inverse() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; private: static Function Build(const Distribution & left, const Distribution & right); Distribution left_; Distribution right_; }; /* class DistributionTransformation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONTRANSFORMATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/Transformation/openturns/OTTransformation.hxx000066400000000000000000000024731307543307100322660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Transformation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTTRANSFORMATION_HXX #define OPENTURNS_OTTRANSFORMATION_HXX #include "openturns/DistributionTransformation.hxx" #include "openturns/OTMarginalTransformation.hxx" #include "openturns/OTNatafEllipticalCopula.hxx" #include "openturns/OTNatafEllipticalDistribution.hxx" #include "openturns/OTNatafIndependentCopula.hxx" #include "openturns/OTRosenblatt.hxx" #include "openturns/OTProcessTransformation.hxx" #endif /* OPENTURNS_OTTRANSFORMATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/000077500000000000000000000000001307543307100251775ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/BootstrapExperiment.cxx000066400000000000000000000037541307543307100317520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an bootstrapExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BootstrapExperiment.hxx" #include "openturns/UserDefined.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BootstrapExperiment); static const Factory Factory_BootstrapExperiment; /* Default constructor */ BootstrapExperiment::BootstrapExperiment(): WeightedExperimentImplementation() { // Nothing to do } /* Constructor with parameters */ BootstrapExperiment::BootstrapExperiment(const Sample & sample): WeightedExperimentImplementation(UserDefined(sample), sample.getSize()) { // Nothing to do } /* Virtual constructor */ BootstrapExperiment * BootstrapExperiment::clone() const { return new BootstrapExperiment(*this); } /* String converter */ String BootstrapExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " size=" << size_; return oss; } /* Sample generation */ Sample BootstrapExperiment::generateWithWeights(Point & weights) const { weights = Point(size_, 1.0 / size_); return distribution_.getSample(size_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/CMakeLists.txt000066400000000000000000000056631307543307100277510ustar00rootroot00000000000000# -*- cmake -*- # # CMakeLists.txt # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (WeightedExperimentImplementation.cxx) ot_add_source_file (WeightedExperiment.cxx) ot_add_source_file (FixedExperiment.cxx) ot_add_source_file (GaussProductExperiment.cxx) ot_add_source_file (BootstrapExperiment.cxx) ot_add_source_file (MonteCarloExperiment.cxx) ot_add_source_file (ImportanceSamplingExperiment.cxx) ot_add_source_file (LHSResult.cxx) ot_add_source_file (SimulatedAnnealingLHS.cxx) ot_add_source_file (MonteCarloLHS.cxx) ot_add_source_file (OptimalLHSExperiment.cxx) ot_add_source_file (SpaceFillingPhiP.cxx) ot_add_source_file (SpaceFillingMinDist.cxx) ot_add_source_file (SpaceFillingC2.cxx) ot_add_source_file (SpaceFillingImplementation.cxx) ot_add_source_file (SpaceFilling.cxx) ot_add_source_file (LinearProfile.cxx) ot_add_source_file (GeometricProfile.cxx) ot_add_source_file (TemperatureProfileImplementation.cxx) ot_add_source_file (TemperatureProfile.cxx) ot_add_source_file (LHSExperiment.cxx) ot_add_source_file (LowDiscrepancyExperiment.cxx) ot_install_header_file (OTWeightedExperiments.hxx) ot_install_header_file (WeightedExperimentImplementation.hxx) ot_install_header_file (WeightedExperiment.hxx) ot_install_header_file (FixedExperiment.hxx) ot_install_header_file (GaussProductExperiment.hxx) ot_install_header_file (BootstrapExperiment.hxx) ot_install_header_file (MonteCarloExperiment.hxx) ot_install_header_file (ImportanceSamplingExperiment.hxx) ot_install_header_file (LHSResult.hxx) ot_install_header_file (SimulatedAnnealingLHS.hxx) ot_install_header_file (MonteCarloLHS.hxx) ot_install_header_file (OptimalLHSExperiment.hxx) ot_install_header_file (SpaceFillingPhiP.hxx) ot_install_header_file (SpaceFillingMinDist.hxx) ot_install_header_file (SpaceFillingC2.hxx) ot_install_header_file (SpaceFillingImplementation.hxx) ot_install_header_file (SpaceFilling.hxx) ot_install_header_file (LinearProfile.hxx) ot_install_header_file (GeometricProfile.hxx) ot_install_header_file (TemperatureProfileImplementation.hxx) ot_install_header_file (TemperatureProfile.hxx) ot_install_header_file (LHSExperiment.hxx) ot_install_header_file (LowDiscrepancyExperiment.hxx) openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/FixedExperiment.cxx000066400000000000000000000055731307543307100310350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an fixedExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FixedExperiment.hxx" #include "openturns/UserDefined.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FixedExperiment); static const Factory Factory_FixedExperiment; /* Default constructor */ FixedExperiment::FixedExperiment() : WeightedExperimentImplementation() , sample_(0, 0) { // Nothing to do } /* Constructor with parameters */ FixedExperiment::FixedExperiment(const Sample & sample) : WeightedExperimentImplementation(UserDefined(sample), sample.getSize()) , sample_(sample) , weights_(sample.getSize(), 1.0 / sample.getSize()) { } /* Constructor with parameters */ FixedExperiment::FixedExperiment(const Sample & sample, const Point & weights) : WeightedExperimentImplementation(UserDefined(sample, weights), sample.getSize()) , sample_(sample) , weights_(weights) { } /* Virtual constructor */ FixedExperiment * FixedExperiment::clone() const { return new FixedExperiment(*this); } /* String converter */ String FixedExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " sample=" << sample_ << " weights=" << weights_; return oss; } /* Distribution accessor */ void FixedExperiment::setDistribution(const Distribution & distribution) { // The distribution of a FixedExperiment cannot be changed } /* Sample generation */ Sample FixedExperiment::generateWithWeights(Point & weights) const { weights = weights_; return sample_; } /* Method save() stores the object through the StorageManager */ void FixedExperiment::save(Advocate & adv) const { WeightedExperimentImplementation::save(adv); adv.saveAttribute("sample_", sample_); adv.saveAttribute("weights_", weights_); } /* Method load() reloads the object from the StorageManager */ void FixedExperiment::load(Advocate & adv) { WeightedExperimentImplementation::load(adv); adv.loadAttribute("sample_", sample_); adv.loadAttribute("weights_", weights_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/GaussProductExperiment.cxx000066400000000000000000000166071307543307100324210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GaussProductExperiment.hxx" #include "openturns/StandardDistributionPolynomialFactory.hxx" #include "openturns/AdaptiveStieltjesAlgorithm.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GaussProductExperiment); static const Factory Factory_GaussProductExperiment; typedef Collection< Point > PointCollection; /* Default constructor */ GaussProductExperiment::GaussProductExperiment(): WeightedExperimentImplementation(), collection_(0), marginalDegrees_(0), nodes_(0, 0) { // Nothing to do } /* Constructor with parameters */ GaussProductExperiment::GaussProductExperiment(const Indices & marginalDegrees): WeightedExperimentImplementation(), collection_(0), marginalDegrees_(0), nodes_(0, 0) { // Here we have to set a distribution of dimension compatible with the marginal degrees setDistributionAndMarginalDegrees(ComposedDistribution(ComposedDistribution::DistributionCollection(marginalDegrees.getSize())), marginalDegrees); } /* Constructor with parameters */ GaussProductExperiment::GaussProductExperiment(const Distribution & distribution): WeightedExperimentImplementation(), collection_(0), marginalDegrees_(0), nodes_(0, 0) { setDistributionAndMarginalDegrees(distribution, Indices(distribution.getDimension(), ResourceMap::GetAsUnsignedInteger( "GaussProductExperiment-DefaultMarginalDegree" ))); } /* Constructor with parameters */ GaussProductExperiment::GaussProductExperiment(const Distribution & distribution, const Indices & marginalDegrees): WeightedExperimentImplementation(), collection_(0), marginalDegrees_(0), nodes_(0, 0) { setDistributionAndMarginalDegrees(distribution, marginalDegrees); } /* Virtual constructor */ GaussProductExperiment * GaussProductExperiment::clone() const { return new GaussProductExperiment(*this); } /* String converter */ String GaussProductExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " marginal degrees=" << marginalDegrees_; return oss; } /* Distribution accessor */ void GaussProductExperiment::setDistribution(const Distribution & distribution) { if (!distribution.hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: the GaussProductExperiment can only be used with distributions having an independent copula."; const UnsignedInteger dimension = distribution.getDimension(); if (dimension != marginalDegrees_.getSize()) throw InvalidArgumentException(HERE) << "Error: the given distribution has a dimension=" << dimension << "different from the number of marginal degrees=" << marginalDegrees_.getSize() << "."; collection_ = OrthogonalUniVariatePolynomialFamilyCollection(0); for (UnsignedInteger i = 0; i < dimension; ++i) collection_.add(StandardDistributionPolynomialFactory(AdaptiveStieltjesAlgorithm(distribution.getMarginal(i)))); WeightedExperimentImplementation::setDistribution(distribution); isAlreadyComputedNodesAndWeights_ = false; } /* Sample generation */ Sample GaussProductExperiment::generateWithWeights(Point & weights) const { if (!isAlreadyComputedNodesAndWeights_) computeNodesAndWeights(); weights = weights_; return nodes_; } /** Marginal degrees accessor */ void GaussProductExperiment::setMarginalDegrees(const Indices & marginalDegrees) { const UnsignedInteger dimension = distribution_.getDimension(); if (marginalDegrees.getSize() != dimension) throw InvalidArgumentException(HERE) << "Error: the marginal degrees number must match the distribution dimension. Here, the degrees are " << marginalDegrees << " and the dimension is " << dimension; if (marginalDegrees != marginalDegrees_) { marginalDegrees_ = marginalDegrees; isAlreadyComputedNodesAndWeights_ = false; } } /** Marginal degrees accessor */ void GaussProductExperiment::setDistributionAndMarginalDegrees(const Distribution & distribution, const Indices & marginalDegrees) { // Set the marginal degrees here then the distribution with checks marginalDegrees_ = marginalDegrees; setDistribution(distribution); const UnsignedInteger dimension = distribution_.getDimension(); size_ = 1; for (UnsignedInteger i = 0; i < dimension; ++ i) { const UnsignedInteger dI = marginalDegrees_[i]; size_ *= dI; } } Indices GaussProductExperiment::getMarginalDegrees() const { return marginalDegrees_; } /* Compute the tensor product nodes and weights */ void GaussProductExperiment::computeNodesAndWeights() const { const UnsignedInteger dimension = distribution_.getDimension(); // Build the integration nodes and weights // First, get the marginal nodes and weights PointCollection marginalNodes(dimension); PointCollection marginalWeights(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const UnsignedInteger dI = marginalDegrees_[i]; marginalNodes[i] = collection_[i].getNodesAndWeights(dI, marginalWeights[i]); } // Second, multiplex everything nodes_ = Sample(size_, dimension); nodes_.setDescription(distribution_.getDescription()); weights_ = Point(size_, 1.0); Indices indices(dimension, 0); for (UnsignedInteger linearIndex = 0; linearIndex < size_; ++linearIndex) { for (UnsignedInteger j = 0; j < dimension; ++j) { const UnsignedInteger indiceJ = indices[j]; nodes_[linearIndex][j] = marginalNodes[j][indiceJ]; weights_[linearIndex] *= marginalWeights[j][indiceJ]; } /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j + 1] += (indices[j] == marginalDegrees_[j]); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j] = indices[j] % marginalDegrees_[j]; } // Loop over the n-D nodes isAlreadyComputedNodesAndWeights_ = true; } /* Method save() stores the object through the StorageManager */ void GaussProductExperiment::save(Advocate & adv) const { WeightedExperimentImplementation::save(adv); adv.saveAttribute("collection_", collection_); adv.saveAttribute("marginalDegrees_", marginalDegrees_); } /* Method load() reloads the object from the StorageManager */ void GaussProductExperiment::load(Advocate & adv) { WeightedExperimentImplementation::load(adv); adv.loadAttribute("collection_", collection_); adv.loadAttribute("marginalDegrees_", marginalDegrees_); setDistributionAndMarginalDegrees(distribution_, marginalDegrees_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/GeometricProfile.cxx000066400000000000000000000044301307543307100311630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief GeometricProfile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeometricProfile.hxx" #include "openturns/PersistentObjectFactory.hxx" #include namespace OT { CLASSNAMEINIT(GeometricProfile); static const Factory Factory_GeometricProfile; /* Default constructor */ GeometricProfile::GeometricProfile(const Scalar T0, const Scalar c, const UnsignedInteger iMax) : TemperatureProfileImplementation(T0, iMax) , c_(c) { if (!(c <= 0.0 || c < 1.0)) throw InvalidArgumentException(HERE) << "Argument c must be between 0 and 1 exclusive"; logc_ = std::log(c); } /* Virtual constructor method */ GeometricProfile * GeometricProfile::clone() const { return new GeometricProfile(*this); } /** Compute temperature T(i) */ Scalar GeometricProfile::operator()(UnsignedInteger i) const { return T0_ * std::exp(i * logc_); } /* String converter */ String GeometricProfile::__repr__() const { OSS oss; oss << "class=" << GeometricProfile::GetClassName() << " name=" << getName() << " T0=" << T0_ << " c=" << c_ << " iMax=" << iMax_; return oss; } /* Method save() stores the object through the StorageManager */ void GeometricProfile::save(Advocate & adv) const { TemperatureProfileImplementation::save( adv ); adv.saveAttribute("c_", c_); } /* Method load() reloads the object from the StorageManager */ void GeometricProfile::load(Advocate & adv) { TemperatureProfileImplementation::load( adv ); adv.loadAttribute("c_", c_); logc_ = std::log(c_); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/ImportanceSamplingExperiment.cxx000066400000000000000000000075631307543307100335730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ImportanceSamplingExperiment.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ImportanceSamplingExperiment); static const Factory Factory_ImportanceSamplingExperiment; /* Default constructor */ ImportanceSamplingExperiment::ImportanceSamplingExperiment(): WeightedExperimentImplementation() { // Take the default distribution as the importance distribution importanceDistribution_ = distribution_; } /* Constructor with parameters */ ImportanceSamplingExperiment::ImportanceSamplingExperiment(const Distribution & importanceDistribution, const UnsignedInteger size): WeightedExperimentImplementation(size), importanceDistribution_(importanceDistribution) { // Take the default distribution as the importance distribution } /* Constructor with parameters */ ImportanceSamplingExperiment::ImportanceSamplingExperiment(const Distribution & distribution, const Distribution & importanceDistribution, const UnsignedInteger size): WeightedExperimentImplementation(distribution, size), importanceDistribution_(importanceDistribution) { // Check if the distributions have compatible dimensions if (distribution.getDimension() != importanceDistribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the distribution and the importance distribution must have the same dimension."; } /* Virtual constructor */ ImportanceSamplingExperiment * ImportanceSamplingExperiment::clone() const { return new ImportanceSamplingExperiment(*this); } /* Importance distribution accessor */ Distribution ImportanceSamplingExperiment::getImportanceDistribution() const { return importanceDistribution_; } /* String converter */ String ImportanceSamplingExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " importance distribution=" << importanceDistribution_ << " size=" << size_; return oss; } /* Sample generation with weights */ Sample ImportanceSamplingExperiment::generateWithWeights(Point & weights) const { Sample result(size_, distribution_.getDimension()); result.setDescription(distribution_.getDescription()); weights = Point(size_); for (UnsignedInteger i = 0; i < size_; ++i) { result[i] = importanceDistribution_.getRealization(); weights[i] = distribution_.computePDF(result[i]) / importanceDistribution_.computePDF(result[i]); } return result; } /* Method save() stores the object through the StorageManager */ void ImportanceSamplingExperiment::save(Advocate & adv) const { WeightedExperimentImplementation::save(adv); adv.saveAttribute("importanceDistribution_", importanceDistribution_); } /* Method load() reloads the object from the StorageManager */ void ImportanceSamplingExperiment::load(Advocate & adv) { WeightedExperimentImplementation::load(adv); adv.loadAttribute("importanceDistribution_", importanceDistribution_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/LHSExperiment.cxx000066400000000000000000000156661307543307100304300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an LHSExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LHSExperiment.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Collection.hxx" #include "openturns/Point.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection DistributionCollection; CLASSNAMEINIT(LHSExperiment); static const Factory Factory_LHSExperiment; /* Default constructor */ LHSExperiment::LHSExperiment() : WeightedExperimentImplementation() , marginals_(1, distribution_) , shuffle_(0, 0) , isAlreadyComputedShuffle_(false) , alwaysShuffle_(false) , randomShift_(true) { // Nothing to do } /* Constructor with parameters */ LHSExperiment::LHSExperiment(const UnsignedInteger size, const Bool alwaysShuffle, const Bool randomShift) : WeightedExperimentImplementation(size) , marginals_(1, distribution_) , shuffle_(0, 0) , isAlreadyComputedShuffle_(false) , alwaysShuffle_(alwaysShuffle) , randomShift_(randomShift) { // Nothing to do } /* Constructor with parameters */ LHSExperiment::LHSExperiment(const Distribution & distribution, const UnsignedInteger size, const Bool alwaysShuffle, const Bool randomShift) : WeightedExperimentImplementation(distribution, size) , marginals_(0) , shuffle_(0, 0) , isAlreadyComputedShuffle_(false) , alwaysShuffle_(alwaysShuffle) , randomShift_(randomShift) { // Check if the distribution has an independent copula setDistribution(distribution); } /* Virtual constructor */ LHSExperiment * LHSExperiment::clone() const { return new LHSExperiment(*this); } /* String converter */ String LHSExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " size=" << size_ << " alwaysShuffle=" << alwaysShuffle_ << " random shift=" << randomShift_; return oss; } String LHSExperiment::__str__(const String & offset) const { OSS oss; oss << GetClassName() << "(distribution=" << distribution_ << ", size" << size_ << ", always shuffle=" << (alwaysShuffle_ ? "true" : "false") << ", random shift=" << (randomShift_ ? "true" : "false"); return oss; } /* Sample generation */ Sample LHSExperiment::generateWithWeights(Point & weights) const { const UnsignedInteger dimension = distribution_.getDimension(); // To insure that the shuffle has been initialized (void) getShuffle(); Sample sample(size_, dimension); sample.setDescription(distribution_.getDescription()); Point u(dimension, 0.5); for(UnsignedInteger index = 0; index < size_; ++index) { if (randomShift_) u = RandomGenerator::Generate(dimension); for(UnsignedInteger component = 0; component < dimension; ++component) { const Scalar xi = (shuffle_(component, index) + u[component]) / size_; sample[index][component] = marginals_[component].computeQuantile(xi)[0]; } } weights = Point(size_, 1.0 / size_); return sample; } /* Shuffle the cells. */ Matrix LHSExperiment::ComputeShuffle(const UnsignedInteger dimension, const UnsignedInteger totalSize) { // Preallocate the shuffle Matrix result(dimension, totalSize); // Initialize the cells shuffle to the identity for (UnsignedInteger j = 0; j < totalSize; ++j) for (UnsignedInteger i = 0; i < dimension; ++i) result(i, j) = j; // Perform the shuffle. We use the same algorithm than the one used in the STL or in GSL for (UnsignedInteger index = 0; index < totalSize - 1; ++index) { // For each component of the current realization, compute its new position const RandomGenerator::UnsignedIntegerCollection u(RandomGenerator::IntegerGenerate(dimension, totalSize - index)); // Then swap the corresponding components for (UnsignedInteger component = 0; component < dimension; ++component) { const UnsignedInteger newPosition = index + u[component]; const Scalar newValue = result(component, newPosition); result(component, newPosition) = result(component, index); result(component, index) = newValue; } } return result; } /* Shuffle accessor */ Matrix LHSExperiment::getShuffle() const { if (alwaysShuffle_ || !isAlreadyComputedShuffle_) { shuffle_ = ComputeShuffle(distribution_.getDimension(), size_); isAlreadyComputedShuffle_ = true; } return shuffle_; } /* Distribution accessor */ void LHSExperiment::setDistribution(const Distribution & distribution) { if (!distribution.hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: cannot use the LHS experiment with a non-independent copula."; const UnsignedInteger dimension = distribution.getDimension(); marginals_ = DistributionCollection(dimension); // Get the marginal distributions for (UnsignedInteger i = 0; i < dimension; ++ i) marginals_[i] = distribution.getMarginal(i); if (dimension != getDistribution().getDimension()) isAlreadyComputedShuffle_ = false; WeightedExperimentImplementation::setDistribution(distribution); } /* AlwaysShuffle accessor */ Bool LHSExperiment::getAlwaysShuffle() const { return alwaysShuffle_; } void LHSExperiment::setAlwaysShuffle(const Bool alwaysShuffle) { alwaysShuffle_ = alwaysShuffle; } /* Random shift accessor */ Bool LHSExperiment::getRandomShift() const { return randomShift_; } void LHSExperiment::setRandomShift(const Bool randomShift) { randomShift_ = randomShift; } /* Method save() stores the object through the StorageManager */ void LHSExperiment::save(Advocate & adv) const { WeightedExperimentImplementation::save(adv); adv.saveAttribute("alwaysShuffle_", alwaysShuffle_); adv.saveAttribute("randomShift_", randomShift_); } /* Method load() reloads the object from the StorageManager */ void LHSExperiment::load(Advocate & adv) { WeightedExperimentImplementation::load(adv); adv.loadAttribute("alwaysShuffle_", alwaysShuffle_); adv.loadAttribute("randomShift_", randomShift_); setDistribution(distribution_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/LHSResult.cxx000066400000000000000000000236261307543307100275610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LHSResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LHSResult.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Curve.hxx" #include "openturns/Cloud.hxx" #include "openturns/SpecFunc.hxx" #include namespace OT { static const Factory Factory_LHSResult; CLASSNAMEINIT(LHSResult); /* Default constructor */ LHSResult::LHSResult() : PersistentObject() , optimalIndex_(0) , criteria_(Sample(0, 4)) { optimalCriterion_ = spaceFilling_.isMinimizationProblem() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; } /* Default constructor */ LHSResult::LHSResult(const SpaceFilling & spaceFilling, UnsignedInteger restart) : PersistentObject() , spaceFilling_(spaceFilling) , restart_(restart) , optimalIndex_(0) , criteria_(Sample(0, 4)) { optimalCriterion_ = spaceFilling_.isMinimizationProblem() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; } LHSResult * LHSResult::clone() const { return new LHSResult(*this); } void LHSResult::add(const Sample & optimalDesign, Scalar criterion, Scalar C2, Scalar PhiP, Scalar MinDist, const Sample & algoHistory) { if (spaceFilling_.isMinimizationProblem() && (criterion < optimalCriterion_)) { // This result is better than current one, store it optimalIndex_ = criteria_.getSize(); optimalCriterion_ = criterion; } if (!spaceFilling_.isMinimizationProblem() && (criterion > optimalCriterion_)) { // This result is better than current one, store it optimalIndex_ = criteria_.getSize(); optimalCriterion_ = criterion; } Point criteria(4); criteria[0] = criterion; criteria[1] = C2; criteria[2] = PhiP; criteria[3] = MinDist; criteria_.add(criteria); collDesigns_.add(optimalDesign); collAlgoHistory_.add(algoHistory); } /** Accessors */ UnsignedInteger LHSResult::getNumberOfRestarts() const { return restart_; } /** Attributes for getting elements of result */ Sample LHSResult::getOptimalDesign() const { return collDesigns_[optimalIndex_]; } Sample LHSResult::getOptimalDesign(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return collDesigns_[restart]; } Scalar LHSResult::getOptimalValue() const { return criteria_[optimalIndex_][0]; } Scalar LHSResult::getOptimalValue(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return criteria_[restart][0]; } Sample LHSResult::getAlgoHistory() const { return collAlgoHistory_[optimalIndex_]; } Sample LHSResult::getAlgoHistory(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return collAlgoHistory_[restart]; } Scalar LHSResult::getC2() const { return criteria_[optimalIndex_][1]; } Scalar LHSResult::getC2(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return criteria_[restart][1]; } Scalar LHSResult::getPhiP() const { return criteria_[optimalIndex_][2]; } Scalar LHSResult::getPhiP(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return criteria_[restart][2]; } Scalar LHSResult::getMinDist() const { return criteria_[optimalIndex_][3]; } Scalar LHSResult::getMinDist(UnsignedInteger restart) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; return criteria_[restart][3]; } UnsignedInteger LHSResult::findDescription(const char *text) const { Description description(collAlgoHistory_[0].getDescription()); for (UnsignedInteger i = 0; i < description.getSize(); ++i) { if (description[i].find(text) != std::string::npos) { return i + 1; } } return 0; } Graph LHSResult::drawCurveData(const Sample & data, const String & title) const { Curve curve(data); curve.setColor("red"); curve.setLegend(title); curve.setLineStyle("solid"); curve.setLineWidth(2); Graph graph(title, "Iterations", data.getDescription()[0], true, ""); graph.add(curve); return graph; } Graph LHSResult::drawHistoryCriterion(const String & title) const { String drawTitle(title); if (drawTitle.empty()) { const UnsignedInteger idx(findDescription("criterion")); if (idx == 0) throw InvalidArgumentException(HERE) << "Could not draw criterion history, data not found"; drawTitle = collAlgoHistory_[0].getDescription()[idx - 1] + " history of optimal design"; } return drawHistoryCriterion(optimalIndex_, drawTitle); } Graph LHSResult::drawHistoryCriterion(UnsignedInteger restart, const String & title) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; const UnsignedInteger idx(findDescription("criterion")); if (idx == 0) throw InvalidArgumentException(HERE) << "Could not draw criterion history, data not found"; if (collAlgoHistory_[restart].getSize() == 0) throw InvalidArgumentException(HERE) << "Could not draw criterion history, data are empty"; const Sample data(collAlgoHistory_[restart].getMarginal(idx - 1)); String drawTitle(title); if (drawTitle.empty()) drawTitle = String(OSS() << data.getDescription()[0] << " history of restart number=" << restart); return drawCurveData(data, drawTitle); } Graph LHSResult::drawHistoryTemperature(const String & title) const { String drawTitle(title); if (drawTitle.empty()) drawTitle = "Temperature history of optimal design"; return drawHistoryTemperature(optimalIndex_, drawTitle); } Graph LHSResult::drawHistoryTemperature(UnsignedInteger restart, const String & title) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; const UnsignedInteger idx(findDescription("Temperature")); if (idx == 0) throw InvalidArgumentException(HERE) << "Could not draw temperature history, data not found"; if (collAlgoHistory_[restart].getSize() == 0) throw InvalidArgumentException(HERE) << "Could not draw temperature history, data are empty"; const Sample data(collAlgoHistory_[restart].getMarginal(idx - 1)); String drawTitle(title); if (drawTitle.empty()) drawTitle = String(OSS() << "Temperature history of restart number=" << restart); return drawCurveData(data, drawTitle); } Graph LHSResult::drawHistoryProbability(const String & title) const { String drawTitle(title); if (drawTitle.empty()) drawTitle = "Probability history of optimal design"; return drawHistoryProbability(optimalIndex_, drawTitle); } Graph LHSResult::drawHistoryProbability(UnsignedInteger restart, const String & title) const { if (restart > restart_) throw InvalidArgumentException(HERE) << "The restart number must be in [0," << restart_ << "]"; const UnsignedInteger idx(findDescription("Probability")); if (idx == 0) throw InvalidArgumentException(HERE) << "Could not draw probability history, data not found"; if (collAlgoHistory_[restart].getSize() == 0) throw InvalidArgumentException(HERE) << "Could not draw probability history, data are empty"; const UnsignedInteger size(collAlgoHistory_[restart].getSize()); Sample data(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { data[i][0] = i; data[i][1] = collAlgoHistory_[restart][i][idx - 1]; } Description description(2); description[0] = "Iterations"; description[1] = "Probability"; data.setDescription(description); String drawTitle(title); if (drawTitle.empty()) drawTitle = String(OSS() << "Probability history of restart number=" << restart); Cloud cloud(data); cloud.setColor("red"); cloud.setLegend(drawTitle); cloud.setLineStyle("solid"); cloud.setLineWidth(2); Graph graph(drawTitle, description[0], description[1], true, ""); graph.add(cloud); return graph; } /* String converter */ String LHSResult::__repr__() const { OSS oss; oss << "class=" << LHSResult::GetClassName() << " spaceFilling=" << spaceFilling_ << " restart=" << restart_ << " criteria_=" << criteria_ << " collDesigns_=" << collDesigns_ << " collAlgoHistory_=" << collAlgoHistory_; return oss; } /* Method save() stores the object through the StorageManager */ void LHSResult::save(Advocate & adv) const { PersistentObject::save( adv ); adv.saveAttribute("spaceFilling_", spaceFilling_); adv.saveAttribute("restart_", restart_); adv.saveAttribute("criteria_", criteria_); adv.saveAttribute("collDesigns_", collDesigns_); adv.saveAttribute("collAlgoHistory_", collAlgoHistory_); } /* Method load() reloads the object from the StorageManager */ void LHSResult::load(Advocate & adv) { PersistentObject::load( adv ); adv.loadAttribute("spaceFilling_", spaceFilling_); adv.loadAttribute("restart_", restart_); adv.loadAttribute("criteria_", criteria_); adv.loadAttribute("collDesigns_", collDesigns_); adv.loadAttribute("collAlgoHistory_", collAlgoHistory_); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/LinearProfile.cxx000066400000000000000000000042431307543307100304610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LinearProfile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LinearProfile.hxx" #include "openturns/PersistentObjectFactory.hxx" namespace OT { CLASSNAMEINIT(LinearProfile); static const Factory Factory_LinearProfile; /* Default constructor */ LinearProfile::LinearProfile(const Scalar T0, const UnsignedInteger iMax) : TemperatureProfileImplementation(T0, iMax) { if (iMax_ == 0) iMaxInv_ = 1.0; else iMaxInv_ = 1.0 / static_cast(iMax_); } /* Virtual constructor method */ LinearProfile * LinearProfile::clone() const { return new LinearProfile(*this); } /** Compute temperature T(i) */ Scalar LinearProfile::operator()(UnsignedInteger i) const { if (i >= iMax_) return 0.0; return T0_ * (1.0 - i * iMaxInv_); } /* String converter */ String LinearProfile::__repr__() const { OSS oss; oss << "class=" << LinearProfile::GetClassName() << " name=" << getName() << " T0=" << T0_ << " iMax=" << iMax_; return oss; } /* Method save() stores the object through the StorageManager */ void LinearProfile::save(Advocate & adv) const { TemperatureProfileImplementation::save( adv ); } /* Method load() reloads the object from the StorageManager */ void LinearProfile::load(Advocate & adv) { TemperatureProfileImplementation::load( adv ); if (iMax_ == 0) iMaxInv_ = 1.0; else iMaxInv_ = 1.0 / static_cast(iMax_); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/LowDiscrepancyExperiment.cxx000066400000000000000000000122211307543307100327100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LowDiscrepancyExperiment.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/Exception.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LowDiscrepancyExperiment); static const Factory Factory_LowDiscrepancyExperiment; /* Default constructor */ LowDiscrepancyExperiment::LowDiscrepancyExperiment() : WeightedExperimentImplementation() , marginals_(1, distribution_) , sequence_(SobolSequence()) , restart_(true) { // Nothing to do } /* Constructor with parameters */ LowDiscrepancyExperiment::LowDiscrepancyExperiment(const UnsignedInteger size, const Bool restart) : WeightedExperimentImplementation(size) , marginals_(1, distribution_) , sequence_(SobolSequence()) , restart_(restart) { // Nothing to do } /* Constructor with parameters */ LowDiscrepancyExperiment::LowDiscrepancyExperiment(const LowDiscrepancySequence & sequence, const Distribution & distribution, const UnsignedInteger size, const Bool restart) : WeightedExperimentImplementation(size) , marginals_(0) , sequence_(sequence) , restart_(restart) { // Warning! The distribution must not be given to the upper class directly // because the correct initialization of the sequence depends on a test on // its dimension setDistribution(distribution); } /* Constructor with parameters */ LowDiscrepancyExperiment::LowDiscrepancyExperiment(const LowDiscrepancySequence & sequence, const UnsignedInteger size, const Bool restart) : WeightedExperimentImplementation(size) , marginals_(0) , sequence_(sequence) , restart_(restart) { // Warning! The distribution must not be given to the upper class directly // because the correct initialization of the sequence depends on a test on // its dimension setDistribution(ComposedDistribution(DistributionCollection(sequence.getDimension()))); } /* Virtual constructor */ LowDiscrepancyExperiment * LowDiscrepancyExperiment::clone() const { return new LowDiscrepancyExperiment(*this); } /* String converter */ String LowDiscrepancyExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " sequence=" << sequence_ << " distribution=" << distribution_ << " size=" << size_ << " restart=" << restart_; return oss; } String LowDiscrepancyExperiment::__str__(const String & offset) const { OSS oss; oss << GetClassName() << "(sequence=" << sequence_ << ", distribution=" << distribution_ << ", size" << size_ << ", restart=" << (restart_ ? "true" : "false"); return oss; } /* Distribution accessor */ void LowDiscrepancyExperiment::setDistribution(const Distribution & distribution) { if (!distribution.hasIndependentCopula()) throw InvalidArgumentException(HERE) << "Error: the LowDiscrepancyExperiment can only be used with distributions having an independent copula."; const UnsignedInteger dimension = distribution.getDimension(); marginals_ = DistributionCollection(dimension); // Get the marginal distributions for (UnsignedInteger i = 0; i < dimension; ++ i) marginals_[i] = distribution.getMarginal(i); // restart the low-discrepancy sequence if asked for or mandatory (dimension changed) if (restart_ || (dimension != getDistribution().getDimension())) sequence_.initialize(dimension); WeightedExperimentImplementation::setDistribution(distribution); } /* Sequence accessor */ LowDiscrepancySequence LowDiscrepancyExperiment::getSequence() const { return sequence_; } /* Restart accessor */ Bool LowDiscrepancyExperiment::getRestart() const { return restart_; } void LowDiscrepancyExperiment::setRestart(const Bool restart) { restart_ = restart; } /* Sample generation */ Sample LowDiscrepancyExperiment::generateWithWeights(Point & weights) const { // In-place transformation to reduce memory consumption Sample sample(sequence_.generate(size_)); sample.setDescription(distribution_.getDescription()); const UnsignedInteger dimension = marginals_.getSize(); for (UnsignedInteger i = 0; i < size_; ++ i) for (UnsignedInteger j = 0; j < dimension; ++ j) sample[i][j] = marginals_[j].computeQuantile(sample[i][j])[0]; weights = Point(size_, 1.0 / size_); return sample; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/MonteCarloExperiment.cxx000066400000000000000000000042311307543307100320270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MonteCarloExperiment.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MonteCarloExperiment); static const Factory Factory_MonteCarloExperiment; /* Default constructor */ MonteCarloExperiment::MonteCarloExperiment(): WeightedExperimentImplementation() { // Nothing to do } /* Constructor with parameters */ MonteCarloExperiment::MonteCarloExperiment(const UnsignedInteger size): WeightedExperimentImplementation(size) { // Nothing to do } /* Constructor with parameters */ MonteCarloExperiment::MonteCarloExperiment(const Distribution & distribution, const UnsignedInteger size): WeightedExperimentImplementation(distribution, size) { // Nothing to do } /* Virtual constructor */ MonteCarloExperiment * MonteCarloExperiment::clone() const { return new MonteCarloExperiment(*this); } /* String converter */ String MonteCarloExperiment::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " size=" << size_; return oss; } /* Sample generation */ Sample MonteCarloExperiment::generateWithWeights(Point & weights) const { weights = Point(size_, 1.0 / size_); return distribution_.getSample(size_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/MonteCarloLHS.cxx000066400000000000000000000066301307543307100303420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MonteCarloLHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MonteCarloLHS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/SpaceFillingC2.hxx" #include "openturns/SpaceFillingPhiP.hxx" #include "openturns/SpaceFillingMinDist.hxx" namespace OT { CLASSNAMEINIT(MonteCarloLHS); static const Factory Factory_MonteCarloLHS; /* Default constructor */ MonteCarloLHS::MonteCarloLHS(const LHSExperiment & lhs, const UnsignedInteger N, const SpaceFilling & spaceFilling) : OptimalLHSExperiment(lhs, spaceFilling), N_(N) { // Nothing to do } /* Virtual constructor method */ MonteCarloLHS * MonteCarloLHS::clone() const { return new MonteCarloLHS(*this); } /* Generate a Sample. */ Sample MonteCarloLHS::generateWithWeights(Point & weights) const { LHSResult result(spaceFilling_); Sample history(N_, 1); Description historyDescription(1); historyDescription[0] = spaceFilling_.getImplementation()->getName() + " criterion"; history.setDescription(historyDescription); // initialing algo Sample optimalDesign; Scalar optimalValue = spaceFilling_.isMinimizationProblem() ? SpecFunc::MaxScalar : -SpecFunc::MaxScalar; for (UnsignedInteger i = 0; i < N_; ++i) { const Sample design(lhs_.generate()); const Scalar value = spaceFilling_.evaluate(rankTransform(design)); history[i][0] = value; if (spaceFilling_.isMinimizationProblem() && (value < optimalValue)) { optimalDesign = design; optimalValue = value; } if (!spaceFilling_.isMinimizationProblem() && (value > optimalValue)) { optimalDesign = design; optimalValue = value; } } Sample optimalDesignU(rankTransform(optimalDesign)); result.add(optimalDesign, optimalValue, SpaceFillingC2().evaluate(optimalDesignU), SpaceFillingPhiP().evaluate(optimalDesignU), SpaceFillingMinDist().evaluate(optimalDesignU), history); result_ = result; weights = Point(size_, 1.0 / size_); return result.getOptimalDesign(); } /* String converter */ String MonteCarloLHS::__repr__() const { OSS oss; oss << "class=" << MonteCarloLHS::GetClassName() << " name=" << getName() << " lhs=" << lhs_ << " spaceFilling=" << spaceFilling_ << " simulation size=" << N_; return oss; } /* Method save() stores the object through the StorageManager */ void MonteCarloLHS::save(Advocate & adv) const { OptimalLHSExperiment::save( adv ); adv.saveAttribute( "N_", N_ ); } /* Method load() reloads the object from the StorageManager */ void MonteCarloLHS::load(Advocate & adv) { OptimalLHSExperiment::load( adv ); adv.loadAttribute( "N_", N_ ); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/OptimalLHSExperiment.cxx000066400000000000000000000106441307543307100317450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract class for algorithms generating optimized LHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OptimalLHSExperiment.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LHSExperiment.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OptimalLHSExperiment); static const Factory Factory_OptimalLHSExperiment; /* Default constructor */ OptimalLHSExperiment::OptimalLHSExperiment(const LHSExperiment & lhs) : WeightedExperimentImplementation(lhs.getDistribution(), lhs.getSize()) , spaceFilling_() { setLHS(lhs); } /* Default constructor */ OptimalLHSExperiment::OptimalLHSExperiment(const LHSExperiment & lhs, const SpaceFilling & spaceFilling) : WeightedExperimentImplementation(lhs.getDistribution(), lhs.getSize()) , spaceFilling_(spaceFilling) { setLHS(lhs); } void OptimalLHSExperiment::setLHS(const LHSExperiment & lhs) { lhs_ = lhs; setSize(lhs.getSize()); setDistribution(lhs.getDistribution()); // marginal extraction can be costly const Distribution distribution(getDistribution()); const UnsignedInteger dimension = distribution.getDimension(); marginals_.resize(dimension); for (UnsignedInteger j = 0; j < dimension; ++ j) marginals_[j] = distribution.getMarginal(j); } /* Virtual constructor method */ OptimalLHSExperiment * OptimalLHSExperiment::clone() const { return new OptimalLHSExperiment(*this); } /** Attributes for dimension, size, randomDesign */ LHSExperiment OptimalLHSExperiment::getLHS() const { return lhs_; } /** Attributes for SpaceFilling */ SpaceFilling OptimalLHSExperiment::getSpaceFilling() const { return spaceFilling_; } LHSResult OptimalLHSExperiment::getResult() const { return result_; } /* String converter */ String OptimalLHSExperiment::__repr__() const { OSS oss; oss << "class=" << OptimalLHSExperiment::GetClassName() << " name=" << getName() << " lhs=" << lhs_ << " spaceFilling=" << spaceFilling_; return oss; } /* Method save() stores the object through the StorageManager */ void OptimalLHSExperiment::save(Advocate & adv) const { WeightedExperimentImplementation::save( adv ); adv.saveAttribute("lhs_", lhs_); adv.saveAttribute("spaceFilling_", spaceFilling_); } /* Method load() reloads the object from the StorageManager */ void OptimalLHSExperiment::load(Advocate & adv) { WeightedExperimentImplementation::load( adv ); adv.loadAttribute("lhs_", lhs_); setLHS(lhs_); adv.loadAttribute("spaceFilling_", spaceFilling_); } /* Rank transformation */ Sample OptimalLHSExperiment::rankTransform(const Sample design) const { const Distribution distribution(getLHS().getDistribution()); const UnsignedInteger size = design.getSize(); const UnsignedInteger dimension = distribution.getDimension(); Sample result(size, dimension); result.setDescription(design.getDescription()); for (UnsignedInteger i = 0; i < size; ++ i) { for (UnsignedInteger j = 0; j < dimension; ++ j) { result[i][j] = distribution.getMarginal(j).computeCDF(Point(1, design[i][j])); } } return result; } Sample OptimalLHSExperiment::inverseRankTransform(const Sample design) const { const Distribution distribution(getLHS().getDistribution()); const UnsignedInteger size = design.getSize(); const UnsignedInteger dimension = distribution.getDimension(); Sample result(size, dimension); result.setDescription(design.getDescription()); for (UnsignedInteger i = 0; i < size; ++ i) { for (UnsignedInteger j = 0; j < dimension; ++ j) { result[i][j] = distribution.getMarginal(j).computeQuantile(design[i][j])[0]; } } return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SimulatedAnnealingLHS.cxx000066400000000000000000000164621307543307100320470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SimulatedAnnealingLHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SimulatedAnnealingLHS.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Log.hxx" #include "openturns/SpaceFillingC2.hxx" #include "openturns/SpaceFillingPhiP.hxx" #include "openturns/SpaceFillingMinDist.hxx" #include "openturns/KPermutationsDistribution.hxx" namespace OT { CLASSNAMEINIT(SimulatedAnnealingLHS); static const Factory Factory_SimulatedAnnealingLHS; /** Geometric temperature profil */ SimulatedAnnealingLHS::SimulatedAnnealingLHS(const LHSExperiment & lhs, const TemperatureProfile & profile, const SpaceFilling & spaceFilling) : OptimalLHSExperiment(lhs, spaceFilling) , profile_(profile) , initialDesign_() { if (spaceFilling.getImplementation()->getClassName() == "SpaceFillingMinDist") { LOGWARN("MinDist criterion replaced by PhiP in SimulatedAnnealingLHS"); spaceFilling_ = SpaceFillingPhiP(); } } /** SimulatedAnnealingLHS constructor with LHS*/ SimulatedAnnealingLHS::SimulatedAnnealingLHS (const Sample & initialDesign, const Distribution & distribution, const TemperatureProfile & profile, const SpaceFilling & spaceFilling) : OptimalLHSExperiment() , profile_(profile) , initialDesign_(initialDesign) { if (spaceFilling.getImplementation()->getClassName() == "SpaceFillingMinDist") { LOGWARN("MinDist criterion replaced by PhiP in SimulatedAnnealingLHS"); spaceFilling_ = SpaceFillingPhiP(); } else spaceFilling_ = spaceFilling; if (initialDesign_.getSize() == 0) throw InvalidArgumentException(HERE) << "Initial design must not be empty"; if (initialDesign_.getDimension() != distribution.getDimension()) throw InvalidArgumentException(HERE) << "Initial design dimension " << initialDesign_.getDimension() << " does not match distribution dimension " << distribution.getDimension(); // dummy lhs, only distribution is needed lhs_ = LHSExperiment(distribution, 1); } /* Virtual constructor method */ SimulatedAnnealingLHS * SimulatedAnnealingLHS::clone() const { return new SimulatedAnnealingLHS(*this); } /* Generate design method */ Sample SimulatedAnnealingLHS::generateWithWeights(Point & weights) const { weights = Point(size_, 1.0 / size_); return generateWithRestart(0); } Sample SimulatedAnnealingLHS::generateWithRestart(UnsignedInteger nRestart) const { // LHSResult returns resuls for all restarts LHSResult result(spaceFilling_, nRestart); for(UnsignedInteger index = 0; index < nRestart + 1; ++index) { // history has dimension 3 :crit, proba & temperature // Total size depends on convergency Sample history(0, 3); Description historyDescription(3); historyDescription[0] = spaceFilling_.getImplementation()->getName() + " criterion"; historyDescription[1] = "Probability"; historyDescription[2] = "Temperature"; history.setDescription(historyDescription); LOGDEBUG("Starting simulated annealing process"); // Starting sample, in the [0,1]^d space Sample optimalDesign(rankTransform(initialDesign_.getSize() > 0 ? initialDesign_ : lhs_.generate())); // Starting implementation UnsignedInteger iteration(0); Scalar T(profile_.getT0()); Scalar optimalValue(spaceFilling_.evaluate(optimalDesign)); const UnsignedInteger iMax(profile_.getIMax()); while(iteration < iMax && T > 0) { LOGDEBUG(OSS() << "Current iteration =" << iteration << ", current temperature =" << T); // Generate rows & column indexes const UnsignedInteger columnIndex = RandomGenerator::IntegerGenerate(optimalDesign.getDimension()); const UnsignedInteger row1 = RandomGenerator::IntegerGenerate(optimalDesign.getSize()); const UnsignedInteger row2 = RandomGenerator::IntegerGenerate(optimalDesign.getSize()); if (row1 == row2) continue; // WARNING: bernoulliTrial is computed here and not in the else clause below to avoid // numerical discrepancies between x86 and x86_64. When optimalValue and // newCriterion are almost equal, architectures may go to different // branches. In order to have the same random generator state, // RandomGenerator::Generate() is called here. const Scalar bernoulliTrial = RandomGenerator::Generate(); const Scalar newCriterion = spaceFilling_.perturbLHS(optimalDesign, optimalValue, row1, row2, columnIndex); const Scalar criteriaDifference = std::min(std::exp((optimalValue - newCriterion) / T), 1.0); // Decision with respect to criteriaDifference if (optimalValue >= newCriterion) { std::swap(optimalDesign[row1][columnIndex], optimalDesign[row2][columnIndex]); optimalValue = newCriterion; } else { if (bernoulliTrial < criteriaDifference) { std::swap(optimalDesign[row1][columnIndex], optimalDesign[row2][columnIndex]); optimalValue = newCriterion; } } LOGDEBUG(OSS() << "Current optimal value =" << optimalValue); Point historyElement(3); historyElement[0] = optimalValue; historyElement[1] = criteriaDifference; historyElement[2] = T; history.add(historyElement); // Update iteration, temperature ++ iteration; T = profile_(iteration); } LOGDEBUG("End of simulated annealing process"); // Transform again optimalDesign Sample optimalDesignX(inverseRankTransform(optimalDesign)); // Add elements to result result.add(optimalDesignX, optimalValue, SpaceFillingC2().evaluate(optimalDesign), SpaceFillingPhiP().evaluate(optimalDesign), SpaceFillingMinDist().evaluate(optimalDesign), history); } result_ = result; return result.getOptimalDesign(); } /* String converter */ String SimulatedAnnealingLHS::__repr__() const { OSS oss; oss << "class=" << SimulatedAnnealingLHS::GetClassName() << " name=" << getName() << " bounds=" << lhs_.getDistribution().getRange() << " spaceFilling=" << spaceFilling_ << " profile=" << profile_; return oss; } /* Method save() stores the object through the StorageManager */ void SimulatedAnnealingLHS::save(Advocate & adv) const { OptimalLHSExperiment::save( adv ); adv.saveAttribute( "profile_", profile_ ); adv.saveAttribute( "initialDesign_", initialDesign_ ); } /* Method load() reloads the object from the StorageManager */ void SimulatedAnnealingLHS::load(Advocate & adv) { OptimalLHSExperiment::load( adv ); adv.loadAttribute( "profile_", profile_ ); adv.loadAttribute( "initialDesign_", initialDesign_ ); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SpaceFilling.cxx000066400000000000000000000052231307543307100302650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Base class for space filling criteria * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpaceFilling.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpaceFillingImplementation.hxx" #include "openturns/SpaceFillingPhiP.hxx" namespace OT { CLASSNAMEINIT(SpaceFilling); /* Default constructor */ SpaceFilling::SpaceFilling() : TypedInterfaceObject(new SpaceFillingPhiP()) { // Nothing to do } /* Constructor from implementation */ SpaceFilling::SpaceFilling(const SpaceFillingImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ SpaceFilling::SpaceFilling(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ SpaceFilling::SpaceFilling(SpaceFillingImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /** Evaluate criterion on a sample */ Scalar SpaceFilling::evaluate(const Sample & sample) const { return getImplementation()->evaluate(sample); } /** Compute criterion when performing an elementary perturbation */ Scalar SpaceFilling::perturbLHS(Sample& oldDesign, OT::Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const { return getImplementation()->perturbLHS(oldDesign, oldCriterion, row1, row2, column); } /** Accessor */ Bool SpaceFilling::isMinimizationProblem() const { return getImplementation()->isMinimizationProblem(); } /* String converter */ String SpaceFilling::__repr__() const { OSS oss; oss << "class=" << SpaceFilling::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SpaceFillingC2.cxx000066400000000000000000000146601307543307100304570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Space filling criterion based on centered L2-discrepancy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpaceFillingC2.hxx" #include "openturns/PersistentObjectFactory.hxx" namespace OT { CLASSNAMEINIT(SpaceFillingC2); static const Factory Factory_SpaceFillingC2; /* Default constructor */ SpaceFillingC2::SpaceFillingC2() : SpaceFillingImplementation(true) { setName("C2"); } /* Virtual constructor method */ SpaceFillingC2 * SpaceFillingC2::clone() const { return new SpaceFillingC2(*this); } /* String converter */ String SpaceFillingC2::__repr__() const { OSS oss; oss << "class=" << SpaceFillingC2::GetClassName() << " minimization=" << isMinimizationProblem(); return oss; } /** Evaluate criterion on a sample */ Scalar SpaceFillingC2::evaluate(const Sample & sample) const { const Sample normalizedSample(normalize(sample)); const UnsignedInteger size(sample.getSize()); const UnsignedInteger dimension(sample.getDimension()); const Scalar* addr_sample = &normalizedSample[0][0]; Scalar sum1 = 0.0; Scalar sum2 = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar* ptI(addr_sample + dimension * i); Scalar prod = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar delta(ptI[d] - 0.5); prod *= (1.0 + 0.5 * std::abs(delta) - 0.5 * delta * delta); } sum1 += prod; } for (UnsignedInteger i = 0; i < size; ++i) { const Scalar* ptI(addr_sample + dimension * i); for (UnsignedInteger j = 0; j < size; ++j) { const Scalar* ptJ(addr_sample + dimension * j); Scalar prod = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar deltaI(ptI[d] - 0.5); const Scalar deltaJ(ptJ[d] - 0.5); prod *= (1.0 + 0.5 * std::abs(deltaI) + 0.5 * std::abs(deltaJ) - 0.5 * std::abs(deltaI - deltaJ)); } sum2 += prod; } } return std::sqrt(std::exp(dimension * std::log(13.0 / 12.0)) - (2.0 / size) * sum1 + (1.0 / size / size) * sum2); } /** Compute criterion when performing an elementary perturbation */ Scalar SpaceFillingC2::perturbLHS(Sample& oldDesign, OT::Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const { const UnsignedInteger size(oldDesign.getSize()); const UnsignedInteger dimension(oldDesign.getDimension()); const Scalar* addr_sample(&oldDesign[0][0]); Scalar* pt1(&oldDesign[0][0] + dimension * row1); Scalar* pt2(&oldDesign[0][0] + dimension * row2); // Part to remove Scalar oldSum = 0.0; for(UnsignedInteger j = 0; j < size; ++j) { if (j == row1 || j == row2) continue; const Scalar* ptJ(addr_sample + dimension * j); Scalar prodRow1 = 1.0; Scalar prodRow2 = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar deltaRow1(pt1[d] - 0.5); const Scalar deltaRow2(pt2[d] - 0.5); const Scalar deltaJ(ptJ[d] - 0.5); prodRow1 *= (1.0 + 0.5 * std::abs(deltaRow1) + 0.5 * std::abs(deltaJ) - 0.5 * std::abs(deltaRow1 - deltaJ)); prodRow2 *= (1.0 + 0.5 * std::abs(deltaRow2) + 0.5 * std::abs(deltaJ) - 0.5 * std::abs(deltaRow2 - deltaJ)); } oldSum += prodRow1 + prodRow2; } // Scale oldSum oldSum *= 2.0 / size / size; // Take into account diagonal elements Scalar prod1Row1 = 1.0; Scalar prod2Row1 = 1.0; Scalar prod1Row2 = 1.0; Scalar prod2Row2 = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { // c_{row1, row1} const Scalar deltaI(pt1[d] - 0.5); prod1Row1 *= (1.0 + std::abs(deltaI)); prod2Row1 *= (1.0 + 0.5 * std::abs(deltaI) - 0.5 * deltaI * deltaI); // for c_{row2, row2} const Scalar deltaJ(pt2[d] - 0.5); prod1Row2 *= (1.0 + std::abs(deltaJ)); prod2Row2 *= (1.0 + 0.5 * std::abs(deltaJ) - 0.5 * deltaJ * deltaJ); } // Add c_{row1, row1} oldSum += prod1Row1 / size / size - 2.0 * prod2Row1 / size; // Add c_{row2, row2} oldSum += prod1Row2 / size / size - 2.0 * prod2Row2 / size; // Swap coordinates std::swap(pt1[column], pt2[column]); Scalar newSum = 0.0; for(UnsignedInteger j = 0; j < size; ++j) { if (j == row1 || j == row2) continue; const Scalar* ptJ(addr_sample + dimension * j); Scalar prodRow1 = 1.0; Scalar prodRow2 = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar deltaRow1(pt1[d] - 0.5); const Scalar deltaRow2(pt2[d] - 0.5); const Scalar deltaJ(ptJ[d] - 0.5); prodRow1 *= (1.0 + 0.5 * std::abs(deltaRow1) + 0.5 * std::abs(deltaJ) - 0.5 * std::abs(deltaRow1 - deltaJ)); prodRow2 *= (1.0 + 0.5 * std::abs(deltaRow2) + 0.5 * std::abs(deltaJ) - 0.5 * std::abs(deltaRow2 - deltaJ)); } newSum += prodRow1 + prodRow2; } // Scale newSum newSum *= 2.0 / size / size; // Take into account diagonal elements prod1Row1 = 1.0; prod2Row1 = 1.0; prod1Row2 = 1.0; prod2Row2 = 1.0; for (UnsignedInteger d = 0; d < dimension; ++d) { // c_{row1, row1} const Scalar deltaI(pt1[d] - 0.5); prod1Row1 *= (1.0 + std::abs(deltaI)); prod2Row1 *= (1.0 + 0.5 * std::abs(deltaI) - 0.5 * deltaI * deltaI); // for c_{row2, row2} const Scalar deltaJ(pt2[d] - 0.5); prod1Row2 *= (1.0 + std::abs(deltaJ)); prod2Row2 *= (1.0 + 0.5 * std::abs(deltaJ) - 0.5 * deltaJ * deltaJ); } // Add c_{row1, row1} newSum += prod1Row1 / size / size - 2.0 * prod2Row1 / size; // Add c_{row2, row2} newSum += prod1Row2 / size / size - 2.0 * prod2Row2 / size; // Swap coordinates to restore original sample std::swap(pt1[column], pt2[column]); // Final result Scalar result = oldCriterion * oldCriterion + newSum - oldSum; if (result <= 0.0) return 0.0; return std::sqrt(result); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SpaceFillingImplementation.cxx000066400000000000000000000067251307543307100332030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all space filling criteria implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpaceFillingImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Log.hxx" namespace OT { CLASSNAMEINIT(SpaceFillingImplementation); static const Factory Factory_SpaceFillingImplementation; /* Default constructor */ SpaceFillingImplementation::SpaceFillingImplementation(OT::Bool minimization) : PersistentObject() , minimization_(minimization) { // Nothing to do } /* Virtual constructor method */ SpaceFillingImplementation * SpaceFillingImplementation::clone() const { return new SpaceFillingImplementation(*this); } /** Evaluate criterion on a sample */ Scalar SpaceFillingImplementation::evaluate(const Sample & sample) const { throw NotYetImplementedException(HERE); } /** Compute criterion when performing an elementary perturbation */ Scalar SpaceFillingImplementation::perturbLHS(Sample& oldDesign, Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const { // Default method uses O(N*N) computations // Swap coordinates std::swap(oldDesign[row1][column], oldDesign[row2][column]); const Scalar criterion = evaluate(oldDesign); // Swap coordinates to restore original sample std::swap(oldDesign[row1][column], oldDesign[row2][column]); // Return criterion return criterion; } /** Rescale argument if it does not belong to the unit cube */ Sample SpaceFillingImplementation::normalize(const Sample & sample) const { const UnsignedInteger dimension(sample.getDimension()); const Point minPoint(sample.getMin()); const Point maxPoint(sample.getMax()); Bool toNormalize(false); for (UnsignedInteger d = 0; d < dimension; ++d) { if (minPoint[d] < 0.0 || maxPoint[d] > 1.0) { toNormalize = true; break; } } if (!toNormalize) return sample; LOGWARN(OSS() << "Sample must be normalized"); const Point delta(maxPoint - minPoint); Sample result(sample - minPoint); return result / delta; } /* String converter */ String SpaceFillingImplementation::__repr__() const { OSS oss; oss << "class=" << SpaceFillingImplementation::GetClassName() << " minimization=" << minimization_; return oss; } /* Method save() stores the object through the StorageManager */ void SpaceFillingImplementation::save(Advocate & adv) const { PersistentObject::save( adv ); adv.saveAttribute( "minimization_", minimization_ ); } /* Method load() reloads the object from the StorageManager */ void SpaceFillingImplementation::load(Advocate & adv) { PersistentObject::load( adv ); adv.loadAttribute( "minimization_", minimization_ ); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SpaceFillingMinDist.cxx000066400000000000000000000045621307543307100315620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SpaceFillingMinDist * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpaceFillingMinDist.hxx" #include "openturns/PersistentObjectFactory.hxx" #include #include namespace OT { CLASSNAMEINIT(SpaceFillingMinDist); static const Factory Factory_SpaceFillingMinDist; /* Default constructor */ SpaceFillingMinDist::SpaceFillingMinDist() : SpaceFillingImplementation(false) { setName("MinDist"); } /* Virtual constructor method */ SpaceFillingMinDist * SpaceFillingMinDist::clone() const { return new SpaceFillingMinDist(*this); } String SpaceFillingMinDist::__repr__() const { OSS oss; oss << "class=" << SpaceFillingMinDist::GetClassName() << " minimization=" << isMinimizationProblem(); return oss; } /** Evaluate criterion on a sample */ Scalar SpaceFillingMinDist::evaluate(const Sample & sample) const { const UnsignedInteger size(sample.getSize()); const UnsignedInteger dimension(sample.getDimension()); const Sample normalizedSample(normalize(sample)); const Scalar* addr_sample = &normalizedSample[0][0]; Scalar minDist = std::numeric_limits::max(); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar* ptI = addr_sample + dimension * i; for (UnsignedInteger j = 0; j < i; ++j) { const Scalar* ptJ = addr_sample + dimension * j; Scalar squaredNorm = 0.0; for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar delta(ptI[d] - ptJ[d]); squaredNorm += delta * delta; } minDist = std::min(minDist, squaredNorm); } } return std::sqrt(minDist); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/SpaceFillingPhiP.cxx000066400000000000000000000114061307543307100310460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SpaceFillingPhiP * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpaceFillingPhiP.hxx" #include "openturns/PersistentObjectFactory.hxx" #include namespace OT { CLASSNAMEINIT(SpaceFillingPhiP); static const Factory Factory_SpaceFillingPhiP; /* Default constructor */ SpaceFillingPhiP::SpaceFillingPhiP(UnsignedInteger p) : SpaceFillingImplementation(true), p_(p) { if (p == 0) throw InvalidArgumentException(HERE) << "Error: p must be positive"; setName("PhiP"); } /* Virtual constructor method */ SpaceFillingPhiP * SpaceFillingPhiP::clone() const { return new SpaceFillingPhiP(*this); } /** Evaluate criterion on a sample */ Scalar SpaceFillingPhiP::evaluate(const Sample & sample) const { const UnsignedInteger size(sample.getSize()); const UnsignedInteger dimension(sample.getDimension()); Scalar sum = 0.0; const Scalar* addr_sample = &sample[0][0]; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar* ptI(addr_sample + i * dimension); for (UnsignedInteger j = 0; j < i; ++j) { Scalar squaredNorm = 0.0; const Scalar* ptJ(addr_sample + j * dimension); for (UnsignedInteger d = 0; d < dimension; ++d) { const Scalar delta(ptI[d] - ptJ[d]); squaredNorm += delta * delta; } if (squaredNorm == 0.0) return std::numeric_limits::max(); sum += std::exp(-0.5 * p_ * std::log(squaredNorm)); } } return std::exp(std::log(sum) / p_); } /** Compute criterion when performing an elementary perturbation */ Scalar SpaceFillingPhiP::perturbLHS(Sample& oldDesign, OT::Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const { if (row1 == row2) return oldCriterion; if (p_ > 5) return SpaceFillingImplementation::perturbLHS(oldDesign, oldCriterion, row1, row2, column); const UnsignedInteger size(oldDesign.getSize()); const UnsignedInteger dimension(oldDesign.getDimension()); const Scalar* addr_sample = &oldDesign[0][0]; Scalar result = (oldCriterion <= 0.0 ? 0.0 : std::exp(p_ * std::log(oldCriterion))); Scalar oldSum = 0.0; Scalar* pt1(&oldDesign[0][0] + dimension * row1); Scalar* pt2(&oldDesign[0][0] + dimension * row2); for(UnsignedInteger i = 0; i < size; ++i) { if (i == row1 || i == row2) continue; const Scalar* ptI(addr_sample + dimension * i); Scalar d1 = 0.0; Scalar d2 = 0.0; for(UnsignedInteger d = 0; d < dimension; ++d) { const Scalar delta1(pt1[d] - ptI[d]); d1 += delta1 * delta1; const Scalar delta2(pt2[d] - ptI[d]); d2 += delta2 * delta2; } oldSum += std::exp(-0.5 * p_ * std::log(d1)) + std::exp(-0.5 * p_ * std::log(d2)); } // Swap coordinates std::swap(pt1[column], pt2[column]); Scalar newSum = 0.0; for(UnsignedInteger i = 0; i < size; ++i) { if (i == row1 || i == row2) continue; const Scalar* ptI(addr_sample + dimension * i); Scalar d1 = 0.0; Scalar d2 = 0.0; for(UnsignedInteger d = 0; d < dimension; ++d) { const Scalar delta1(pt1[d] - ptI[d]); d1 += delta1 * delta1; const Scalar delta2(pt2[d] - ptI[d]); d2 += delta2 * delta2; } newSum += std::exp(-0.5 * p_ * std::log(d1)) + std::exp(-0.5 * p_ * std::log(d2)); } // Swap coordinates to restore original sample std::swap(pt1[column], pt2[column]); result += newSum - oldSum; if (result <= 0.0) return 0.0; return std::exp(std::log(result) / p_); } /* String converter */ String SpaceFillingPhiP::__repr__() const { OSS oss; oss << "class=" << SpaceFillingPhiP::GetClassName() << " p=" << p_; return oss; } /* Method save() stores the object through the StorageManager */ void SpaceFillingPhiP::save(Advocate & adv) const { SpaceFillingImplementation::save( adv ); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void SpaceFillingPhiP::load(Advocate & adv) { SpaceFillingImplementation::load( adv ); adv.loadAttribute( "p_", p_ ); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/TemperatureProfile.cxx000066400000000000000000000050001307543307100315340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface class for temperature profiles * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TemperatureProfile.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TemperatureProfileImplementation.hxx" #include "openturns/GeometricProfile.hxx" namespace OT { CLASSNAMEINIT(TemperatureProfile); /* Default constructor */ TemperatureProfile::TemperatureProfile() : TypedInterfaceObject(new GeometricProfile()) { // Nothing to do } /* Constructor from implementation */ TemperatureProfile::TemperatureProfile(const TemperatureProfileImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ TemperatureProfile::TemperatureProfile(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ TemperatureProfile::TemperatureProfile(TemperatureProfileImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /** Compute temperature */ Scalar TemperatureProfile::operator()(UnsignedInteger i) const { return getImplementation()->operator()(i); } /** get T0 */ Scalar TemperatureProfile::getT0() const { return getImplementation()->getT0(); } /** get iMax */ UnsignedInteger TemperatureProfile::getIMax() const { return getImplementation()->getIMax(); } /* String converter */ String TemperatureProfile::__repr__() const { OSS oss; oss << "class=" << TemperatureProfile::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/TemperatureProfileImplementation.cxx000066400000000000000000000052651307543307100344570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TemperatureProfileImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TemperatureProfileImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" namespace OT { CLASSNAMEINIT(TemperatureProfileImplementation); static const Factory Factory_TemperatureProfileImplementation; /* Default constructor */ TemperatureProfileImplementation::TemperatureProfileImplementation() : PersistentObject() , T0_() , iMax_() { // Nothing to do } /** Constructor with temperature T0 & iMax*/ TemperatureProfileImplementation::TemperatureProfileImplementation(const Scalar T0, const UnsignedInteger iMax) : PersistentObject() , T0_(T0) , iMax_(iMax) { // Nothing to do } /* Virtual constructor method */ TemperatureProfileImplementation * TemperatureProfileImplementation::clone() const { return new TemperatureProfileImplementation(*this); } /** Compute temperature T(i) */ Scalar TemperatureProfileImplementation::operator()(UnsignedInteger i) const { throw NotYetImplementedException(HERE); } /** get T0 */ Scalar TemperatureProfileImplementation::getT0() const { return T0_; } /** get iMax */ UnsignedInteger TemperatureProfileImplementation::getIMax() const { return iMax_; } /* String converter */ String TemperatureProfileImplementation::__repr__() const { OSS oss; oss << "class=" << TemperatureProfileImplementation::GetClassName() << " name=" << getName(); return oss; } /* Method save() stores the object through the StorageManager */ void TemperatureProfileImplementation::save(Advocate & adv) const { PersistentObject::save( adv ); adv.saveAttribute("T0_", T0_); adv.saveAttribute("iMax_", iMax_); } /* Method load() reloads the object from the StorageManager */ void TemperatureProfileImplementation::load(Advocate & adv) { PersistentObject::load( adv ); adv.loadAttribute("T0_", T0_); adv.loadAttribute("iMax_", iMax_); } } /* namespace OT */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/WeightedExperiment.cxx000066400000000000000000000051521307543307100315270ustar00rootroot00000000000000// -*- C++ -*- /* * @brief WeightedExperiment interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/WeightedExperiment.hxx" #include "openturns/MonteCarloExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WeightedExperiment); /* Default constructor */ WeightedExperiment::WeightedExperiment() : TypedInterfaceObject(new MonteCarloExperiment()) { // Nothing to do } /* Constructor from an implementation */ WeightedExperiment::WeightedExperiment(const WeightedExperimentImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from a Pointer to an implementation */ WeightedExperiment::WeightedExperiment(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* String converter */ String WeightedExperiment::__repr__() const { return getImplementation()->__repr__(); } /* Distribution accessor */ void WeightedExperiment::setDistribution(const Distribution & distribution) { copyOnWrite(); getImplementation()->setDistribution(distribution); } Distribution WeightedExperiment::getDistribution() const { return getImplementation()->getDistribution(); } /* Size accessor */ void WeightedExperiment::setSize(const UnsignedInteger size) { copyOnWrite(); getImplementation()->setSize(size); } UnsignedInteger WeightedExperiment::getSize() const { return getImplementation()->getSize(); } /* Here is the interface that all derived class must implement */ /* Sample generation */ Sample WeightedExperiment::generate() const { return getImplementation()->generate(); } /* Sample generation with weights*/ Sample WeightedExperiment::generateWithWeights(Point & weights) const { return getImplementation()->generateWithWeights(weights); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/WeightedExperimentImplementation.cxx000066400000000000000000000063261307543307100344410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an weightedExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OTprivate.hxx" #include "openturns/WeightedExperimentImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WeightedExperimentImplementation); /* Default constructor */ WeightedExperimentImplementation::WeightedExperimentImplementation() : ExperimentImplementation() , distribution_() , size_(ResourceMap::GetAsUnsignedInteger("WeightedExperiment-DefaultSize")) { // Nothing to do } /* Constructor with parameters */ WeightedExperimentImplementation::WeightedExperimentImplementation(const UnsignedInteger size) : ExperimentImplementation() , distribution_() , size_(0) { // Check if the size is valid setSize(size); } /* Constructor with parameters */ WeightedExperimentImplementation::WeightedExperimentImplementation(const Distribution & distribution, const UnsignedInteger size) : ExperimentImplementation() , distribution_(distribution) , size_(0) { // Check if the size is valid setSize(size); } /* Virtual constructor */ WeightedExperimentImplementation * WeightedExperimentImplementation::clone() const { return new WeightedExperimentImplementation(*this); } /* String converter */ String WeightedExperimentImplementation::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " name=" << getName () << " distribution=" << distribution_ << " size=" << size_; return oss; } /* Distribution accessor */ void WeightedExperimentImplementation::setDistribution(const Distribution & distribution) { distribution_ = distribution; } Distribution WeightedExperimentImplementation::getDistribution() const { return distribution_; } /* Size accessor */ void WeightedExperimentImplementation::setSize(const UnsignedInteger size) { if (size == 0) throw InvalidArgumentException(HERE) << "Error: the size must be > 0."; size_ = size; } UnsignedInteger WeightedExperimentImplementation::getSize() const { return size_; } /* Sample generation */ Sample WeightedExperimentImplementation::generate() const { Point weights; return generateWithWeights(weights); } /* Sample generation with weights */ Sample WeightedExperimentImplementation::generateWithWeights(Point & weights) const { throw NotYetImplementedException(HERE) << "In WeightedExperimentImplementation::generateWithWeights()"; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/000077500000000000000000000000001307543307100272345ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/BootstrapExperiment.hxx000066400000000000000000000034331307543307100340060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an bootstrapExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BOOTSTRAPEXPERIMENT_HXX #define OPENTURNS_BOOTSTRAPEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BootstrapExperiment * * The class describes the probabilistic concept of bootstrapExperiment plan */ class OT_API BootstrapExperiment : public WeightedExperimentImplementation { CLASSNAME; public: /** Default constructor */ BootstrapExperiment(); /** Parameters constructor */ explicit BootstrapExperiment(const Sample & sample); /** Virtual constructor */ virtual BootstrapExperiment * clone() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ Sample generateWithWeights(Point & weights) const; protected: private: }; /* class BootstrapExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BOOTSTRAPEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/FixedExperiment.hxx000066400000000000000000000043621307543307100330720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an fixedExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FIXEDEXPERIMENT_HXX #define OPENTURNS_FIXEDEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FixedExperiment * * The class describes the probabilistic concept of fixedExperiment plan */ class OT_API FixedExperiment : public WeightedExperimentImplementation { CLASSNAME; public: /** Default constructor */ FixedExperiment(); /** Parameters constructor */ explicit FixedExperiment(const Sample & sample); /** Parameters constructor */ FixedExperiment(const Sample & sample, const Point & weights); /** Virtual constructor */ virtual FixedExperiment * clone() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** Sample generation */ Sample generateWithWeights(Point & weights) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // The fixed sample that will be returned at each call Sample sample_; Point weights_; }; /* class FixedExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FIXEDEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/GaussProductExperiment.hxx000066400000000000000000000066771307543307100344710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAUSSPRODUCTEXPERIMENT_HXX #define OPENTURNS_GAUSSPRODUCTEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" #include "openturns/Collection.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussProductExperiment * * The class describes the probabilistic concept of monteCarloExperiment plan */ class OT_API GaussProductExperiment : public WeightedExperimentImplementation { CLASSNAME; public: typedef Collection OrthogonalUniVariatePolynomialFamilyCollection; typedef PersistentCollection OrthogonalUniVariatePolynomialFamilyPersistentCollection; /** Default constructor */ GaussProductExperiment(); /** Parameters constructor */ explicit GaussProductExperiment(const Indices & marginalDegrees); /** Parameters constructor */ explicit GaussProductExperiment(const Distribution & distribution); /** Parameters constructor */ GaussProductExperiment(const Distribution & distribution, const Indices & marginalDegrees); /** Virtual constructor */ virtual GaussProductExperiment * clone() const; /** String converter */ virtual String __repr__() const; /** Sample generation */ Sample generateWithWeights(Point & weights) const; /** Marginal degrees accessor */ void setMarginalDegrees(const Indices & marginalDegrees); Indices getMarginalDegrees() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // Compute the tensor product nodes and weights void computeNodesAndWeights() const; // Distribution and marginal degrees accessor void setDistributionAndMarginalDegrees(const Distribution & distribution, const Indices & marginalDegrees); // Marginal orthogonal univariate polynomial family collection OrthogonalUniVariatePolynomialFamilyPersistentCollection collection_; // Marginal degrees Indices marginalDegrees_; // Integration nodes; weights mutable Sample nodes_; mutable Point weights_; // Flag to manage the computation of nodes and weights mutable Bool isAlreadyComputedNodesAndWeights_; }; /* class GaussProductExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAUSSPRODUCTEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/GeometricProfile.hxx000066400000000000000000000035421307543307100332300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief GeometricProfile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMALGEOMETRICPROFILE_HXX #define OPENTURNS_OPTIMALGEOMETRICPROFILE_HXX #include "openturns/TemperatureProfileImplementation.hxx" namespace OT { /** * @class GeometricProfile * * GeometricProfile is a geometric temperature profile for SimulatedAnnealing */ class OT_API GeometricProfile : public TemperatureProfileImplementation { CLASSNAME; public: /** Default constructor */ GeometricProfile(const Scalar T0 = 10, const Scalar c = 0.95, const UnsignedInteger iMax = 2000); /** Virtual constructor method */ GeometricProfile * clone() const; /** Compute temperature T(i) */ Scalar operator()(UnsignedInteger i) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: Scalar c_; mutable Scalar logc_; }; /* class GeometricProfile */ } /* namespace OT */ #endif /* OT_OPTIMALGEOMETRICPROFILE_HXX */ ImportanceSamplingExperiment.hxx000066400000000000000000000051251307543307100355460ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns// -*- C++ -*- /** * @brief Abstract top-level view of an importanceSamplingExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_IMPORTANCESAMPLINGEXPERIMENT_HXX #define OPENTURNS_IMPORTANCESAMPLINGEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ImportanceSamplingExperiment * * The class describes the probabilistic concept of importanceSamplingExperiment plan */ class OT_API ImportanceSamplingExperiment : public WeightedExperimentImplementation { CLASSNAME; public: /** Default constructor */ ImportanceSamplingExperiment(); /** Parameters constructor */ ImportanceSamplingExperiment(const Distribution & importanceDistribution, const UnsignedInteger size); /** Parameters constructor */ ImportanceSamplingExperiment(const Distribution & distribution, const Distribution & importanceDistribution, const UnsignedInteger size); /** Virtual constructor */ virtual ImportanceSamplingExperiment * clone() const; /** Importance distribution accessor */ Distribution getImportanceDistribution() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ Sample generateWithWeights(Point & weights) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // The importance distribution according to which the sample is built Distribution importanceDistribution_; }; /* class ImportanceSamplingExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_IMPORTANCESAMPLINGEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/LHSExperiment.hxx000066400000000000000000000064201307543307100324560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an LHSExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LHSEXPERIMENT_HXX #define OPENTURNS_LHSEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" #include "openturns/Matrix.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LHSExperiment * * The class describes the probabilistic concept of LHSExperiment plan */ class OT_API LHSExperiment : public WeightedExperimentImplementation { CLASSNAME; public: typedef Collection DistributionCollection; /** Default constructor */ LHSExperiment(); /** Parameters constructor */ explicit LHSExperiment(const UnsignedInteger size, const Bool alwaysShuffle = false, const Bool randomShift = true); /** Parameters constructor */ LHSExperiment(const Distribution & distribution, const UnsignedInteger size, const Bool alwaysShuffle = false, const Bool randomShift = true); /** Virtual constructor */ virtual LHSExperiment * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Sample generation */ Sample generateWithWeights(Point & weights) const; /** Shuffle the cells. */ static Matrix ComputeShuffle(const UnsignedInteger dimension, const UnsignedInteger totalSize); /** Shuffle accessor */ virtual Matrix getShuffle() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** AlwaysShuffle accessor */ Bool getAlwaysShuffle() const; void setAlwaysShuffle(const Bool alwaysShuffle); /** Random shift accessor */ Bool getRandomShift() const; void setRandomShift(const Bool randomShift); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: // Marginal distributions mutable DistributionCollection marginals_; // Cells shuffle mutable Matrix shuffle_; // Flag to avoid redundant computation of the shuffle mutable Bool isAlreadyComputedShuffle_; // Initialization flag Bool alwaysShuffle_; // Random shift flag Bool randomShift_; }; /* class LHSExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LHSEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/LHSResult.hxx000066400000000000000000000101471307543307100316150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LHSResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LHSRESULT_HXX #define OPENTURNS_LHSRESULT_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/SpaceFilling.hxx" #include "openturns/LHSResult.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Sample.hxx" #include "openturns/Interval.hxx" #include "openturns/Graph.hxx" namespace OT { /** * @class LHSResult * * LHSResult is the interface class for temperature profile computation for SimulatedAnnealing */ class OT_API LHSResult : public PersistentObject { CLASSNAME; public: typedef PersistentCollection SamplePersistentCollection; /** Default constructor */ LHSResult(); /** Default constructor */ explicit LHSResult(const SpaceFilling & spaceFilling, UnsignedInteger restart = 0); /** Virtual constructor */ virtual LHSResult * clone() const; /** Accessors */ UnsignedInteger getNumberOfRestarts() const; /** Attributes for getting elements of result */ Sample getOptimalDesign() const; Sample getOptimalDesign(UnsignedInteger restart) const; Scalar getOptimalValue() const; Scalar getOptimalValue(UnsignedInteger restart) const; Sample getAlgoHistory() const; Sample getAlgoHistory(UnsignedInteger restart) const; Scalar getC2() const; Scalar getC2(UnsignedInteger restart) const; Scalar getPhiP() const; Scalar getPhiP(UnsignedInteger restart) const; Scalar getMinDist() const; Scalar getMinDist(UnsignedInteger restart) const; /** Graphical methods - Draw criterion history */ Graph drawHistoryCriterion(const String & title = "") const; Graph drawHistoryCriterion(UnsignedInteger restart, const String & title = "") const; Graph drawHistoryProbability(const String & title = "") const; Graph drawHistoryProbability(UnsignedInteger restart, const String & title = "") const; Graph drawHistoryTemperature(const String & title = "") const; Graph drawHistoryTemperature(UnsignedInteger restart, const String & title = "") const; /** Add an optimal design with its history */ void add(const Sample & optimalDesign, Scalar criterion, Scalar C2, Scalar PhiP, Scalar MinDist, const Sample & algoHistory); /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Method that draw data */ Graph drawCurveData(const Sample & data, const String & title) const; /** Method to extract field index from data */ UnsignedInteger findDescription(const char *text) const; private: /** Space filling criterion */ SpaceFilling spaceFilling_; /** Number of restarts */ UnsignedInteger restart_; /** Best criterion value */ mutable Scalar optimalCriterion_; /** Index of the best designs in all restarts */ mutable UnsignedInteger optimalIndex_; /** Collection of best designs (size 1+restart_)*/ SamplePersistentCollection collDesigns_; /** Collection of algo histories (size 1+restart_, dimension depending on algorithm)*/ SamplePersistentCollection collAlgoHistory_; /** Collection of all result criteria (size 1+restart_, dimension 4)*/ Sample criteria_; }; /* class LHSResult */ } /* namespace OT */ #endif /* OT_LHSRESULT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/LinearProfile.hxx000066400000000000000000000035111307543307100325200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LinearProfile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMALLINEARPROFILE_HXX #define OPENTURNS_OPTIMALLINEARPROFILE_HXX #include "openturns/TemperatureProfileImplementation.hxx" namespace OT { /** * @class LinearProfile * * LinearProfile is a linear temperature profile for SimulatedAnnealing */ class OT_API LinearProfile : public TemperatureProfileImplementation { CLASSNAME; public: /** Default constructor */ LinearProfile(const Scalar T0 = 10.0, const UnsignedInteger iMax = 2000); /** Virtual constructor method */ LinearProfile * clone() const; /** Compute temperature T(i) */ Scalar operator()(UnsignedInteger i) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: mutable Scalar iMaxInv_; friend class Factory; }; /* class LinearProfile */ } /* namespace OT */ #endif /* OT_OPTIMALLINEARPROFILE_HXX */ LowDiscrepancyExperiment.hxx000066400000000000000000000057671307543307100347140ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOWDISCREPANCYEXPERIMENT_HXX #define OPENTURNS_LOWDISCREPANCYEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" #include "openturns/LowDiscrepancySequence.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LowDiscrepancyExperiment * * The class describes the probabilistic concept of monteCarloExperiment plan */ class OT_API LowDiscrepancyExperiment : public WeightedExperimentImplementation { CLASSNAME; public: typedef Collection DistributionCollection; /** Default constructor */ LowDiscrepancyExperiment(); /** Parameters constructor */ explicit LowDiscrepancyExperiment(const UnsignedInteger size, const Bool restart = true); /** Parameters constructor */ LowDiscrepancyExperiment(const LowDiscrepancySequence & sequence, const UnsignedInteger size, const Bool restart = true); /** Parameters constructor */ LowDiscrepancyExperiment(const LowDiscrepancySequence & sequence, const Distribution & distribution, const UnsignedInteger size, const Bool restart = true); /** Virtual constructor */ virtual LowDiscrepancyExperiment * clone() const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; /** Distribution accessor */ virtual void setDistribution(const Distribution & distribution); /** Sequence accessor */ LowDiscrepancySequence getSequence() const; /** Restart accessor */ Bool getRestart() const; void setRestart(const Bool restart); /* Here is the interface that all derived class must implement */ /** Sample generation */ Sample generateWithWeights(Point & weights) const; protected: private: // Marginal distributions DistributionCollection marginals_; // Low discrepancy sequence LowDiscrepancySequence sequence_; // Initialization flag Bool restart_; }; /* class LowDiscrepancyExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOWDISCREPANCYEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/MonteCarloExperiment.hxx000066400000000000000000000036721307543307100341010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level view of an monteCarloExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MONTECARLOEXPERIMENT_HXX #define OPENTURNS_MONTECARLOEXPERIMENT_HXX #include "openturns/WeightedExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MonteCarloExperiment * * The class describes the probabilistic concept of monteCarloExperiment plan */ class OT_API MonteCarloExperiment : public WeightedExperimentImplementation { CLASSNAME; public: /** Default constructor */ MonteCarloExperiment(); /** Parameters constructor */ explicit MonteCarloExperiment(const UnsignedInteger size); /** Parameters constructor */ MonteCarloExperiment(const Distribution & distribution, const UnsignedInteger size); /** Virtual constructor */ virtual MonteCarloExperiment * clone() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ Sample generateWithWeights(Point & weights) const; protected: private: }; /* class MonteCarloExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MONTECARLOEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/MonteCarloLHS.hxx000066400000000000000000000041201307543307100323740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MonteCarloLHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MONTECARLOLHS_HXX #define OPENTURNS_MONTECARLOLHS_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/SpaceFilling.hxx" #include "openturns/OptimalLHSExperiment.hxx" #include "openturns/LHSExperiment.hxx" #include "openturns/SpaceFillingMinDist.hxx" namespace OT { /** * @class MonteCarloLHS * * MonteCarloLHS is the algorithm used for LHS optimisation (Random Brute Force) */ class OT_API MonteCarloLHS : public OptimalLHSExperiment { CLASSNAME; public: /** Default constructor */ MonteCarloLHS(const LHSExperiment & lhs, const UnsignedInteger N, const SpaceFilling & spaceFilling = SpaceFillingMinDist()); /** Virtual constructor method */ MonteCarloLHS * clone() const; /** Compute next design method **/ Sample generateWithWeights(Point & weights) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: UnsignedInteger N_; MonteCarloLHS() {}; friend class Factory; }; /* class MonteCarloLHS */ } /* namespace OT */ #endif /* OT_MONTECARLOLHS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/OTWeightedExperiments.hxx000066400000000000000000000035041307543307100342160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir WeightedExperiments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTWEIGHTEDEXPERIMENTS_HXX #define OPENTURNS_OTWEIGHTEDEXPERIMENTS_HXX #include "openturns/BootstrapExperiment.hxx" #include "openturns/FixedExperiment.hxx" #include "openturns/GaussProductExperiment.hxx" #include "openturns/ImportanceSamplingExperiment.hxx" #include "openturns/TemperatureProfile.hxx" #include "openturns/GeometricProfile.hxx" #include "openturns/LinearProfile.hxx" #include "openturns/SpaceFillingC2.hxx" #include "openturns/SpaceFillingMinDist.hxx" #include "openturns/SpaceFillingPhiP.hxx" #include "openturns/OptimalLHSExperiment.hxx" #include "openturns/SimulatedAnnealingLHS.hxx" #include "openturns/MonteCarloLHS.hxx" #include "openturns/LHSResult.hxx" #include "openturns/LHSExperiment.hxx" #include "openturns/LowDiscrepancyExperiment.hxx" #include "openturns/MonteCarloExperiment.hxx" #include "openturns/WeightedExperiment.hxx" #include "openturns/WeightedExperimentImplementation.hxx" #endif /* OPENTURNS_OTWEIGHTEDEXPERIMENTS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/OptimalLHSExperiment.hxx000066400000000000000000000053411307543307100340050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract class for algorithms generating optimized LHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMALLHSEXPERIMENT_HXX #define OPENTURNS_OPTIMALLHSEXPERIMENT_HXX #include #include #include #include #include "openturns/SpaceFilling.hxx" #include "openturns/LHSResult.hxx" namespace OT { /** * @class OptimalLHSExperiment * * OptimalLHSExperiment is some optimallhs type to illustrate how to add some classes in OpenTURNS */ class OT_API OptimalLHSExperiment : public WeightedExperimentImplementation { CLASSNAME; public: /** Default constructor */ explicit OptimalLHSExperiment(const LHSExperiment & lhs); /** Default constructor */ OptimalLHSExperiment(const LHSExperiment & lhs, const SpaceFilling & spaceFilling); /** Virtual constructor method */ OptimalLHSExperiment * clone() const; /** Attributes for LHSExperiment */ LHSExperiment getLHS() const; /** Attributes for SpaceFilling */ SpaceFilling getSpaceFilling() const; /** Result accessor */ virtual LHSResult getResult() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: void setLHS(const LHSExperiment & lhs); LHSExperiment lhs_; SpaceFilling spaceFilling_; // marginal extraction can be costly mutable ComposedDistribution::DistributionCollection marginals_; /** Rank transformation */ Sample rankTransform(const Sample design) const; Sample inverseRankTransform(const Sample design) const; OptimalLHSExperiment() {}; friend class Factory; mutable LHSResult result_; }; /* class OptimalLHSExperiment */ } /* namespace OT */ #endif /* OT_OPTIMALLHSEXPERIMENT_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/SimulatedAnnealingLHS.hxx000066400000000000000000000052531307543307100341050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SimulatedAnnealingLHS * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SIMULATEDANNEALINGLHS_HXX #define OPENTURNS_SIMULATEDANNEALINGLHS_HXX #include "openturns/TemperatureProfile.hxx" #include "openturns/GeometricProfile.hxx" #include "openturns/SpaceFilling.hxx" #include "openturns/SpaceFillingMinDist.hxx" #include "openturns/OptimalLHSExperiment.hxx" namespace OT { /** * @class SimulatedAnnealingLHS * * SimulatedAnnealingLHS is the algorithm used for LHS optimisation */ class OT_API SimulatedAnnealingLHS : public OptimalLHSExperiment { CLASSNAME; public: typedef Collection LHSResultCollection; /** SimulatedAnnealingLHS */ explicit SimulatedAnnealingLHS (const LHSExperiment & lhs, const TemperatureProfile & profile = GeometricProfile(), const SpaceFilling & spaceFilling = SpaceFillingMinDist()); /** SimulatedAnnealingLHS constructor with LHS*/ SimulatedAnnealingLHS(const Sample & initialDesign, const Distribution & distribution, const TemperatureProfile & profile, const SpaceFilling & spaceFilling); /** Virtual constructor method */ SimulatedAnnealingLHS * clone() const; /** Compute design method **/ virtual Sample generateWithWeights(Point & weights) const; Sample generateWithRestart(UnsignedInteger nRestart) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: SimulatedAnnealingLHS() {}; friend class Factory; private: TemperatureProfile profile_; Sample initialDesign_; }; /* class SimulatedAnnealingLHS */ } /* namespace OT */ #endif /* OT_SIMULATEDANNEALINGLHS_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/SpaceFilling.hxx000066400000000000000000000045231307543307100323310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Base class for space filling criteria * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPACEFILLING_HXX #define OPENTURNS_SPACEFILLING_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/SpaceFillingImplementation.hxx" namespace OT { /** * @class SpaceFilling * * SpaceFilling is some optimallhs type to illustrate how to add some classes in Open TURNS */ class OT_API SpaceFilling : public TypedInterfaceObject { CLASSNAME; /* Allow OptimalLHS derived classes to call perturb method */ friend class OptimalLHS; friend class SimulatedAnnealingLHS; public: typedef Pointer Implementation; /** Default constructor */ SpaceFilling(); /** Copy constructor */ SpaceFilling(const SpaceFillingImplementation & implementation); /** Constructor from implementation */ SpaceFilling(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ SpaceFilling(SpaceFillingImplementation * p_implementation); #endif /** Evaluate criterion on a sample */ Scalar evaluate(const Sample & sample) const; /** Accessor */ Bool isMinimizationProblem() const; /** String converter */ String __repr__() const; /** Compute criterion when performing an elementary perturbation */ Scalar perturbLHS(Sample& oldDesign, Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const; }; /* class SpaceFilling */ } /* namespace OT */ #endif /* OT_SPACEFILLING_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/SpaceFillingC2.hxx000066400000000000000000000033641307543307100325200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Space filling criterion based on centered L2-discrepancy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPACEFILLINGC2_HXX #define OPENTURNS_SPACEFILLINGC2_HXX #include "openturns/SpaceFillingImplementation.hxx" namespace OT { /** * @class SpaceFillingC2 * * This class computes centered L2-discrepancy of samples. */ class OT_API SpaceFillingC2 : public SpaceFillingImplementation { CLASSNAME; public: /** Default constructor */ SpaceFillingC2(); /** Virtual constructor method */ SpaceFillingC2 * clone() const; /** Evaluate criterion on a sample */ Scalar evaluate(const Sample& sample) const; /** String converter */ String __repr__() const; /** Compute criterion when performing an elementary perturbation */ Scalar perturbLHS(Sample& oldDesign, Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const; private: }; /* class SpaceFillingC2 */ } /* namespace OT */ #endif /* OT_SPACEFILLINGC2_HXX */ SpaceFillingImplementation.hxx000066400000000000000000000051271307543307100351610ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns// -*- C++ -*- /** * @brief Abstract top-level class for all space filling criteria implementations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPACEFILLINGIMPLEMENTATION_HXX #define OPENTURNS_SPACEFILLINGIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" #include "openturns/Sample.hxx" namespace OT { /** * @class SpaceFillingImplementation * * The class that implements space filling criteria. * This class serves an interface for derived classes. */ class OT_API SpaceFillingImplementation : public PersistentObject { CLASSNAME; /* Allow OptimalLHS derived classes to call perturb method */ friend class SpaceFilling; public: /** Default constructor */ explicit SpaceFillingImplementation(Bool minimization = true); /** Virtual constructor method */ SpaceFillingImplementation * clone() const; /** Evaluate criterion on a sample */ virtual Scalar evaluate(const Sample& sample) const; /** Accessor */ Bool isMinimizationProblem() const { return minimization_; } /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Compute criterion when performing an elementary perturbation */ virtual Scalar perturbLHS(Sample& oldDesign, Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const; protected: /** Normalize argument before computing criterion */ Sample normalize(const Sample & sample) const; private: /* True if this criterion is to be minimized, false otherwise */ Bool minimization_; }; /* class SpaceFillingImplementation */ } /* namespace OT */ #endif /* OT_SPACEFILLINGIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/SpaceFillingMinDist.hxx000066400000000000000000000030711307543307100336160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SpaceFillingMinDist * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPACEFILLINGMINDIST_HXX #define OPENTURNS_SPACEFILLINGMINDIST_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SpaceFillingImplementation.hxx" namespace OT { /** * @class SpaceFillingMinDist * * This class computes minimal distance between sample points. */ class OT_API SpaceFillingMinDist : public SpaceFillingImplementation { CLASSNAME; public: /** Default constructor */ SpaceFillingMinDist(); /** Virtual constructor method */ SpaceFillingMinDist * clone() const; /** String converter */ String __repr__() const; /** Evaluate criterion on a sample */ Scalar evaluate(const Sample& sample) const; }; /* class SpaceFillingMinDist */ } /* namespace OT */ #endif /* OT_SPACEFILLINGMINDIST_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/SpaceFillingPhiP.hxx000066400000000000000000000040031307543307100331030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief SpaceFillingPhiP * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPACEFILLINGPHIP_HXX #define OPENTURNS_SPACEFILLINGPHIP_HXX #include "openturns/PersistentObject.hxx" #include "openturns/SpaceFillingImplementation.hxx" namespace OT { /** * @class SpaceFillingPhiP * * This class computes centered L2-discrepancy of samples. */ class OT_API SpaceFillingPhiP : public SpaceFillingImplementation { CLASSNAME; public: /** Default constructor */ explicit SpaceFillingPhiP(UnsignedInteger p = 50); /** Virtual constructor method */ SpaceFillingPhiP * clone() const; /** Evaluate criterion on a sample */ Scalar evaluate(const Sample& sample) const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Compute criterion when performing an elementary perturbation */ Scalar perturbLHS(Sample& oldDesign, Scalar oldCriterion, UnsignedInteger row1, UnsignedInteger row2, UnsignedInteger column) const; private: UnsignedInteger p_; }; /* class SpaceFillingPhiP */ } /* namespace OT */ #endif /* OT_SPACEFILLINGPHIP_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/TemperatureProfile.hxx000066400000000000000000000041471307543307100336110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Interface class for temperature profiles * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMALTEMPERATUREPROFILE_HXX #define OPENTURNS_OPTIMALTEMPERATUREPROFILE_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/TemperatureProfileImplementation.hxx" namespace OT { /** * @class TemperatureProfile * * TemperatureProfile is the interface class for temperature profile computation for SimulatedAnnealing */ class OT_API TemperatureProfile : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ TemperatureProfile(); /** Copy constructor */ TemperatureProfile(const TemperatureProfileImplementation & implementation); /** Constructor from implementation */ TemperatureProfile(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ TemperatureProfile(TemperatureProfileImplementation * p_implementation); #endif /** Compute temperature */ Scalar operator()(UnsignedInteger i) const; /** get T0 */ Scalar getT0() const; /** get iMax */ UnsignedInteger getIMax() const; /** String converter */ String __repr__() const; private: }; /* class TemperatureProfile */ } /* namespace OT */ #endif /* OT_OPTIMALTEMPERATUREPROFILE_HXX */ TemperatureProfileImplementation.hxx000066400000000000000000000043611307543307100364360ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns// -*- C++ -*- /** * @brief TemperatureProfileImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OPTIMALTEMPERATUREPROFILEIMPLEMENTATION_HXX #define OPENTURNS_OPTIMALTEMPERATUREPROFILEIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/StorageManager.hxx" namespace OT { /** * @class TemperatureProfileImplementation * * TemperatureProfileImplementation is a generic temperature profile for SimulatedAnnealing */ class OT_API TemperatureProfileImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ TemperatureProfileImplementation(); /** Constructor with temperature T0 & iMax*/ TemperatureProfileImplementation(const Scalar T0, const UnsignedInteger iMax); /** Virtual constructor method */ TemperatureProfileImplementation * clone() const; /** Compute temperature T(i) */ virtual Scalar operator()(UnsignedInteger i) const; /** get T0 */ virtual Scalar getT0() const; /** get iMax */ virtual UnsignedInteger getIMax() const; /** String converter */ virtual String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: Scalar T0_; UnsignedInteger iMax_; }; /* class TemperatureProfileImplementation */ } /* namespace OT */ #endif /* OT_OPTIMALTEMPERATUREPROFILEIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns/WeightedExperiment.hxx000066400000000000000000000044131307543307100335700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief WeightedExperiment interface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WEIGHTEDEXPERIMENT_HXX #define OPENTURNS_WEIGHTEDEXPERIMENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/WeightedExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WeightedExperiment * WeightedExperiment interface */ class OT_API WeightedExperiment : public TypedInterfaceObject { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ WeightedExperiment(); /** Constructor from an implementation */ WeightedExperiment(const WeightedExperimentImplementation & implementation); /** Constructor from a Pointer to an implementation */ WeightedExperiment(const Implementation & p_implementation); /** String converter */ virtual String __repr__() const; /** Distribution accessor */ virtual void setDistribution(const Distribution & distribution); virtual Distribution getDistribution() const; /** Size accessor */ virtual void setSize(const UnsignedInteger size); virtual UnsignedInteger getSize() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ virtual Sample generate() const; /** Sample generation with weights*/ virtual Sample generateWithWeights(Point & weights) const; } ; /* class WeightedExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WEIGHTEDEXPERIMENT_HXX */ WeightedExperimentImplementation.hxx000066400000000000000000000052551307543307100364240ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/WeightedExperiments/openturns// -*- C++ -*- /** * @brief Abstract top-level view of an weightedExperiment plane * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WEIGHTEDEXPERIMENTIMPLEMENTATION_HXX #define OPENTURNS_WEIGHTEDEXPERIMENTIMPLEMENTATION_HXX #include "openturns/ExperimentImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Point.hxx" #include "openturns/Indices.hxx" //#include "OrthogonalBasis.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WeightedExperimentImplementation * * The class describes the probabilistic concept of weightedExperiment plan */ class OT_API WeightedExperimentImplementation : public ExperimentImplementation { CLASSNAME; public: /** Default constructor */ WeightedExperimentImplementation(); /** Parameters constructor */ explicit WeightedExperimentImplementation(const UnsignedInteger size); /** Parameters constructor */ WeightedExperimentImplementation(const Distribution & distribution, const UnsignedInteger size); /** Virtual constructor */ virtual WeightedExperimentImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** Distribution accessor */ virtual void setDistribution(const Distribution & distribution); virtual Distribution getDistribution() const; /** Size accessor */ virtual void setSize(const UnsignedInteger size); virtual UnsignedInteger getSize() const; /* Here is the interface that all derived class must implement */ /** Sample generation */ virtual Sample generate() const; /** Sample generation with weights*/ virtual Sample generateWithWeights(Point & weights) const; protected: /** Distribution that defines the weights of the experiment */ Distribution distribution_; /** The size of the sample to be generated */ UnsignedInteger size_; }; /* class WeightedExperimentImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WEIGHTEDEXPERIMENTIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/openturns/000077500000000000000000000000001307543307100232505ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Algorithm/openturns/OTAlgorithm.hxx000066400000000000000000000025721307543307100262000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTALGORITHM_HXX #define OPENTURNS_OTALGORITHM_HXX #include "openturns/TaylorExpansionMoments.hxx" #include "openturns/OTAnalytical.hxx" #include "openturns/OTClassification.hxx" #include "openturns/OTWeightedExperiments.hxx" #include "openturns/OTMetaModel.hxx" #include "openturns/OTOrthogonalBasis.hxx" #include "openturns/OTSensitivity.hxx" #include "openturns/OTSimulation.hxx" #include "openturns/OTTransformation.hxx" #include "openturns/OTUncertaintyOptimization.hxx" #endif /* OPENTURNS_OTALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Algorithm/openturns/TaylorExpansionMoments.hxx000066400000000000000000000100101307543307100304730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief TaylorExpansionMoments implements Taylor expansion for moments estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TAYLOREXPANSIONMOMENTS_HXX #define OPENTURNS_TAYLOREXPANSIONMOMENTS_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/RandomVector.hxx" #include "openturns/SymmetricTensor.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/Matrix.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TaylorExpansionMoments * TaylorExpansionMoments estimates the mean and covariance of a random vector Y=G(X) by computing the Taylor approximation of G */ class OT_API TaylorExpansionMoments : public PersistentObject { CLASSNAME; public: /** Default constructor */ TaylorExpansionMoments() {}; /** Constructor with parameters */ explicit TaylorExpansionMoments(const RandomVector & limitStateVariable); /** Virtual constructor */ virtual TaylorExpansionMoments * clone() const; /** String converter */ String __repr__() const; /** limitStateVariable accessor */ RandomVector getLimitStateVariable() const; /** meanFirstOrder accessor */ Point getMeanFirstOrder() const; /** meanSecondOrder accessor */ Point getMeanSecondOrder() const; /** covariance accessor */ CovarianceMatrix getCovariance() const; /** Value at mean accessor */ Point getValueAtMean() const; /** Gradient at mean accessor */ Matrix getGradientAtMean() const; /** Hessian at mean accessor */ SymmetricTensor getHessianAtMean() const; /** importance factors accessor */ PointWithDescription getImportanceFactors() const; /** ImportanceFactors graph */ Graph drawImportanceFactors() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; private: /** the function that computes the first order evaluation of the mean vector */ void computeMeanFirstOrder() const; /** the function that computes the second order evaluation of the mean vector */ void computeMeanSecondOrder() const; /** the function that computes the matrix covariance */ void computeCovariance() const; /** the function that computes the importance factors only in the scalar case */ void computeImportanceFactors () const; RandomVector limitStateVariable_; mutable Point meanInputVector_; mutable Point valueAtMean_; mutable Matrix gradientAtMean_; mutable SymmetricTensor hessianAtMean_; mutable Bool isAlreadyComputedValue_; mutable Bool isAlreadyComputedGradient_; mutable Bool isAlreadyComputedHessian_; mutable Bool isAlreadyComputedMeanFirstOrder_; mutable Bool isAlreadyComputedMeanSecondOrder_; mutable Bool isAlreadyComputedCovariance_; mutable Bool isAlreadyComputedImportanceFactors_; mutable CovarianceMatrix inputCovariance_; mutable Point meanFirstOrder_; mutable Point meanSecondOrder_; mutable CovarianceMatrix covariance_; mutable PointWithDescription importanceFactors_; } ; /* class TaylorExpansionMoments */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TAYLOREXPANSIONMOMENTS_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/000077500000000000000000000000001307543307100210205ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Bayesian/CMakeLists.txt000066400000000000000000000015041307543307100235600ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (CalibrationStrategyImplementation.cxx) ot_add_source_file (CalibrationStrategy.cxx) ot_add_source_file (SamplerImplementation.cxx) ot_add_source_file (Sampler.cxx) ot_add_source_file (MCMC.cxx) ot_add_source_file (RandomWalkMetropolisHastings.cxx) ot_add_source_file (PosteriorRandomVector.cxx) ot_install_header_file (OTBayesian.hxx) ot_install_header_file (CalibrationStrategyImplementation.hxx) ot_install_header_file (CalibrationStrategy.hxx) ot_install_header_file (SamplerImplementation.hxx) ot_install_header_file (Sampler.hxx) ot_install_header_file (MCMC.hxx) ot_install_header_file (RandomWalkMetropolisHastings.hxx) ot_install_header_file (PosteriorRandomVector.hxx) openturns-1.9/lib/src/Uncertainty/Bayesian/CalibrationStrategy.cxx000066400000000000000000000070031307543307100255160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all CalibrationStrategy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CalibrationStrategy.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CalibrationStrategy); /* Default constructor */ CalibrationStrategy::CalibrationStrategy() : TypedInterfaceObject(new CalibrationStrategyImplementation) { // Nothing to do } /* Constructor with parameters */ CalibrationStrategy::CalibrationStrategy(const Interval & range) : TypedInterfaceObject(new CalibrationStrategyImplementation(range)) { // Nothing to do } /* Constructor with parameters */ CalibrationStrategy::CalibrationStrategy(const Interval & range, const Scalar expansionFactor, const Scalar shrinkFactor) : TypedInterfaceObject(new CalibrationStrategyImplementation(range, expansionFactor, shrinkFactor)) { // Nothing to do } /* Constructor with parameters */ CalibrationStrategy::CalibrationStrategy(const Interval & range, const Scalar expansionFactor, const Scalar shrinkFactor, const UnsignedInteger calibrationStep) : TypedInterfaceObject(new CalibrationStrategyImplementation(range, expansionFactor, shrinkFactor, calibrationStep)) { // Nothing to do } /* Constructor from implementation */ CalibrationStrategy::CalibrationStrategy(const CalibrationStrategyImplementation & op) : TypedInterfaceObject(op.clone()) { // Nothing to do } void CalibrationStrategy::setRange(const Interval & range) { copyOnWrite(); getImplementation()->setRange(range); } Interval CalibrationStrategy::getRange() const { return getImplementation()->getRange(); } void CalibrationStrategy::setExpansionFactor(const Scalar expansionFactor) { copyOnWrite(); getImplementation()->setExpansionFactor(expansionFactor); } Scalar CalibrationStrategy::getExpansionFactor() const { return getImplementation()->getExpansionFactor(); } void CalibrationStrategy::setShrinkFactor(const Scalar shrinkFactor) { copyOnWrite(); getImplementation()->setShrinkFactor(shrinkFactor); } Scalar CalibrationStrategy::getShrinkFactor() const { return getImplementation()->getShrinkFactor(); } void CalibrationStrategy::setCalibrationStep(const UnsignedInteger calibrationStep) { copyOnWrite(); getImplementation()->setCalibrationStep(calibrationStep); } UnsignedInteger CalibrationStrategy::getCalibrationStep() const { return getImplementation()->getCalibrationStep(); } /* Return true if comparison succeeds */ Scalar CalibrationStrategy::computeUpdateFactor(const Scalar rho) const { return getImplementation()->computeUpdateFactor(rho); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/CalibrationStrategyImplementation.cxx000066400000000000000000000106171307543307100304310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Default CalibrationStrategyImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CalibrationStrategyImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CalibrationStrategyImplementation); static const Factory Factory_CalibrationStrategyImplementation; /* Default constructor */ CalibrationStrategyImplementation::CalibrationStrategyImplementation(const Interval & range, const Scalar expansionFactor, const Scalar shrinkFactor, const UnsignedInteger calibrationStep) : PersistentObject() { setRange(range); setExpansionFactor(expansionFactor); setShrinkFactor(shrinkFactor); setCalibrationStep(calibrationStep); } /* String converter */ String CalibrationStrategyImplementation::__repr__() const { return OSS() << "class=" << CalibrationStrategyImplementation::GetClassName() << " name=" << getName(); } void CalibrationStrategyImplementation::setRange(const Interval& range) { if ( range.getDimension() != 1 ) throw InvalidDimensionException(HERE) << "Range should be 1-d. Got " << range.getDimension(); range_ = range; } Interval CalibrationStrategyImplementation::getRange() const { return range_; } void CalibrationStrategyImplementation::setExpansionFactor(Scalar expansionFactor) { if (!( expansionFactor > 1.0)) throw InvalidArgumentException(HERE) << "Expansion factor should be > 1. Got " << expansionFactor; expansionFactor_ = expansionFactor; } Scalar CalibrationStrategyImplementation::getExpansionFactor() const { return expansionFactor_; } void CalibrationStrategyImplementation::setShrinkFactor(Scalar shrinkFactor) { if ( (shrinkFactor <= 0.0) || (shrinkFactor >= 1.0) ) throw InvalidArgumentException(HERE) << "Shrink factor should be in (0, 1). Got " << shrinkFactor; shrinkFactor_ = shrinkFactor; } Scalar CalibrationStrategyImplementation::getShrinkFactor() const { return shrinkFactor_; } CalibrationStrategyImplementation* CalibrationStrategyImplementation::clone() const { return new CalibrationStrategyImplementation(*this); } /* Here is the interface that all derived class must implement */ Scalar CalibrationStrategyImplementation::computeUpdateFactor(const Scalar rho) const { Scalar factor = 1.0; // if the acceptance rate it too low, make smaller steps if ( rho < range_.getLowerBound()[0] ) factor = shrinkFactor_; // if the acceptance rate is too high, make larger steps else if ( rho > range_.getUpperBound()[0] ) factor = expansionFactor_; return factor; } void CalibrationStrategyImplementation::setCalibrationStep(const UnsignedInteger calibrationStep) { if (calibrationStep == 0) throw InvalidArgumentException(HERE) << "The calibration period must be positive."; calibrationStep_ = calibrationStep; } UnsignedInteger CalibrationStrategyImplementation::getCalibrationStep() const { return calibrationStep_; } /* Method save() stores the object through the StorageManager */ void CalibrationStrategyImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("range_", range_); adv.saveAttribute("expansionFactor_", expansionFactor_); adv.saveAttribute("shrinkFactor_", shrinkFactor_); adv.saveAttribute("calibrationStep_", calibrationStep_); } /* Method load() reloads the object from the StorageManager */ void CalibrationStrategyImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("range_", range_); adv.loadAttribute("expansionFactor_", expansionFactor_); adv.loadAttribute("shrinkFactor_", shrinkFactor_); adv.loadAttribute("calibrationStep_", calibrationStep_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/MCMC.cxx000066400000000000000000000211511307543307100222630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MCMC updates the chain * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MCMC.hxx" #include "openturns/ConditionalDistribution.hxx" #include "openturns/Normal.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Full.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/ParametricFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MCMC); static const Factory Factory_MCMC; /* Default constructor */ MCMC::MCMC() : SamplerImplementation() , burnIn_(0) , thinning_(0) { // Nothing to do } /* Parameters constructor */ MCMC::MCMC( const Distribution & prior, const Distribution & conditional, const Sample & observations, const Point & initialState) : SamplerImplementation() , initialState_(initialState) , currentState_(initialState) , history_(Full()) , conditional_(conditional) // when not provided, set the model to the identity , model_() , burnIn_(ResourceMap::GetAsUnsignedInteger("MCMC-DefaultBurnIn")) , thinning_(ResourceMap::GetAsUnsignedInteger("MCMC-DefaultThinning")) { const SymbolicFunction fullFunction(Description::BuildDefault(initialState.getDimension(), "x"), Description::BuildDefault(initialState.getDimension(), "x")); model_ = ParametricFunction(fullFunction, Indices(0), Point(0)); setPrior(prior); if (model_.getInputDimension() != prior.getDimension()) throw InvalidDimensionException(HERE) << "The model input dimension (" << model_.getInputDimension() << ") does not match the dimension of the prior (" << prior.getDimension() << ")."; setParameters(Sample(observations.getSize(), 0)); setObservations(observations); if (conditional.getParameterDimension() != model_.getOutputDimension()) throw InvalidDimensionException(HERE) << "The parameter dimension" << conditional.getParameterDimension() << " does not match the output dimension of the model (" << model_.getOutputDimension() << ")."; if (initialState.getDimension() != prior.getDimension()) throw InvalidDimensionException(HERE) << "The initialState state dimension (" << initialState.getDimension() << ") does not match the prior dimension (" << prior.getDimension() << ")."; } /* Parameters constructor */ MCMC::MCMC( const Distribution & prior, const Distribution & conditional, const Function & model, const Sample & parameters, const Sample & observations, const Point & initialState) : SamplerImplementation() , initialState_(initialState) , currentState_(initialState) , history_(Full()) , conditional_(conditional) , model_(model) , burnIn_(ResourceMap::GetAsUnsignedInteger("MCMC-DefaultBurnIn")) , thinning_(ResourceMap::GetAsUnsignedInteger("MCMC-DefaultThinning")) { setPrior(prior); if (model.getInputDimension() != prior.getDimension()) throw InvalidDimensionException(HERE) << "The model input dimension (" << model.getInputDimension() << ") does not match the dimension of the prior (" << prior.getDimension() << ")."; setParameters(parameters); setObservations(observations); if (model_.getInputDimension() != prior.getDimension()) throw InvalidDimensionException(HERE) << "The model input dimension (" << model_.getInputDimension() << ") does not match the dimension of the prior (" << prior.getDimension() << ")."; if (initialState.getDimension() != prior.getDimension()) throw InvalidDimensionException(HERE) << "The initialState state dimension (" << initialState.getDimension() << ") does not match the prior dimension (" << prior.getDimension() << ")."; } /* String converter */ String MCMC::__repr__() const { return OSS() << "class=" << MCMC::GetClassName() << " prior=" << prior_ << " conditional=" << conditional_ << " model=" << model_ << " parameters=" << parameters_ << " observations=" << observations_ << " burnIn=" << burnIn_ << " thinning=" << thinning_; } MCMC* MCMC::clone() const { return new MCMC(*this); } UnsignedInteger MCMC::getDimension() const { return prior_.getDimension(); } /* Compute the likelihood w.r.t. observartions */ Scalar MCMC::computeLogLikelihood(const Point & xi) const { Scalar value = prior_.computeLogPDF(xi); if (value == SpecFunc::LogMinScalar) return SpecFunc::LogMinScalar; const UnsignedInteger size = observations_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { // retrieve model data if available const Point zi(model_(xi, parameters_[i])); Distribution pI(conditional_); pI.setParameter(zi); Scalar logPdf = pI.computeLogPDF(observations_[i]); if (logPdf == SpecFunc::LogMinScalar) return SpecFunc::LogMinScalar; value += logPdf; } return value; } void MCMC::setPrior(const Distribution& prior) { // if (!prior.isContinuous()) throw InvalidArgumentException(HERE) << "The prior should be continuous."; prior_ = prior; } Distribution MCMC::getPrior() const { return prior_; } Distribution MCMC::getConditional() const { return conditional_; } Function MCMC::getModel() const { return model_; } void MCMC::setObservations(const Sample& observations) { if (!(observations.getSize() > 0)) throw InvalidArgumentException(HERE) << "No observation provided."; observations_ = observations; } Sample MCMC::getObservations() const { return observations_; } void MCMC::setParameters(const Sample& parameters) { if (!(parameters.getSize() > 0)) throw InvalidArgumentException(HERE) << "No parameter provided."; parameters_ = parameters; } Sample MCMC::getParameters() const { return parameters_; } void MCMC::setBurnIn(UnsignedInteger burnIn) { burnIn_ = burnIn; } UnsignedInteger MCMC::getBurnIn() const { return burnIn_; } void MCMC::setThinning(UnsignedInteger thinning) { if (thinning == 0) throw InvalidArgumentException(HERE) << "The thinning parameter should be positive."; thinning_ = thinning; } UnsignedInteger MCMC::getThinning() const { return thinning_; } void MCMC::setHistory(const HistoryStrategy & history) { history_ = history; } HistoryStrategy MCMC::getHistory() const { return history_; } void MCMC::setNonRejectedComponents(const Indices & nonRejectedComponents) { const UnsignedInteger dimension = initialState_.getDimension(); if (!nonRejectedComponents.check(dimension)) throw InvalidDimensionException(HERE) << "The non-rejected components must have values within the chain dimension (" << initialState_.getDimension() << ")."; nonRejectedComponents_ = nonRejectedComponents; } Indices MCMC::getNonRejectedComponents() const { return nonRejectedComponents_; } /* Method save() stores the object through the StorageManager */ void MCMC::save(Advocate & adv) const { SamplerImplementation::save(adv); adv.saveAttribute("initialState_", initialState_); adv.saveAttribute("currentState_", currentState_); adv.saveAttribute("prior_", prior_); adv.saveAttribute("conditional_", conditional_); adv.saveAttribute("model_", model_); adv.saveAttribute("parameters_", parameters_); adv.saveAttribute("observations_", observations_); adv.saveAttribute("burnIn_", burnIn_); adv.saveAttribute("thinning_", thinning_); adv.saveAttribute("nonRejectedComponents_", nonRejectedComponents_); } /* Method load() reloads the object from the StorageManager */ void MCMC::load(Advocate & adv) { SamplerImplementation::load(adv); adv.loadAttribute("initialState_", initialState_); adv.loadAttribute("currentState_", currentState_); adv.loadAttribute("prior_", prior_); adv.loadAttribute("conditional_", conditional_); adv.loadAttribute("model_", model_); adv.loadAttribute("parameters_", parameters_); adv.loadAttribute("observations_", observations_); adv.loadAttribute("burnIn_", burnIn_); adv.loadAttribute("thinning_", thinning_); adv.loadAttribute("nonRejectedComponents_", nonRejectedComponents_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/PosteriorRandomVector.cxx000066400000000000000000000046341307543307100260650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for random vectors based on samplers * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/PosteriorRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PosteriorRandomVector); static const Factory Factory_PosteriorRandomVector; /* Default constructor */ PosteriorRandomVector::PosteriorRandomVector(const Sampler & sampler) : RandomVectorImplementation() , sampler_(sampler) { // Nothing to do } /* Virtual constructor */ PosteriorRandomVector * PosteriorRandomVector::clone() const { return new PosteriorRandomVector(*this); } /* String converter */ String PosteriorRandomVector::__repr__() const { OSS oss; oss << "class=" << PosteriorRandomVector::GetClassName() << " sampler=" << sampler_; return oss; } /* Sampler accessor */ Sampler PosteriorRandomVector::getSampler() const { return sampler_; } UnsignedInteger PosteriorRandomVector::getDimension() const { return sampler_.getDimension(); } Point PosteriorRandomVector::getRealization() const { return sampler_.getRealization(); } Sample PosteriorRandomVector::getSample(const UnsignedInteger size) const { return sampler_.getSample(size); } /* Method save() stores the object through the StorageManager */ void PosteriorRandomVector::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "sampler_", sampler_ ); } /* Method load() reloads the object from the StorageManager */ void PosteriorRandomVector::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "sampler_", sampler_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/RandomWalkMetropolisHastings.cxx000066400000000000000000000231301307543307100273610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomWalkMetropolisHastings updates the chain * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomWalkMetropolisHastings.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ConditionalDistribution.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_CalibrationStrategy; CLASSNAMEINIT(RandomWalkMetropolisHastings); static const Factory Factory_RandomWalkMetropolisHastings; /* Default constructor */ RandomWalkMetropolisHastings::RandomWalkMetropolisHastings() : MCMC() , calibrationStrategy_(0) , samplesNumber_(0) , acceptedNumber_(0) , currentLogLikelihood_(0.) { // Nthing to do } /* Parameters constructor */ RandomWalkMetropolisHastings::RandomWalkMetropolisHastings( const Distribution & prior, const Distribution & conditional, const Sample & observations, const Point & initialState, const DistributionCollection & proposal) : MCMC(prior, conditional, observations, initialState) , calibrationStrategy_(proposal.getSize()) , samplesNumber_(0) , acceptedNumber_(initialState.getDimension()) , currentLogLikelihood_(0.) { setProposal(proposal); } /* Parameters constructor */ RandomWalkMetropolisHastings::RandomWalkMetropolisHastings( const Distribution & prior, const Distribution & conditional, const Function & model, const Sample & parameters, const Sample & observations, const Point & initialState, const DistributionCollection & proposal) : MCMC(prior, conditional, model, parameters, observations, initialState) , calibrationStrategy_(proposal.getSize()) , samplesNumber_(0) , acceptedNumber_(initialState.getDimension()) , currentLogLikelihood_(0.) { setProposal(proposal); } /* String converter */ String RandomWalkMetropolisHastings::__repr__() const { return OSS() << "class=" << RandomWalkMetropolisHastings::GetClassName() << " name=" << getName() << " derived from " << MCMC::__repr__() << " proposal=" << proposal_ << " calibrationStrategy=" << calibrationStrategy_; } RandomWalkMetropolisHastings* RandomWalkMetropolisHastings::clone() const { return new RandomWalkMetropolisHastings(*this); } /* Here is the interface that all derived class must implement */ Point RandomWalkMetropolisHastings::getRealization() const { const UnsignedInteger dimension = initialState_.getDimension(); // update factor Point delta(dimension, 1.0); // number of samples accepted until calibration step Indices accepted(dimension); // perform burning if necessary const UnsignedInteger size = getThinning() + ((samplesNumber_ < getBurnIn()) ? getBurnIn() : 0); // check the first likelihood if (samplesNumber_ == 0) { currentLogLikelihood_ = computeLogLikelihood(currentState_); if (currentLogLikelihood_ <= SpecFunc::LogMinScalar) throw InvalidArgumentException(HERE) << "The likelihood of the initial state should be positive"; } // for each new sample for (UnsignedInteger i = 0; i < size; ++ i) { // accumulates the updates over each components Point newState(currentState_); history_.store(currentState_); Scalar logLikelihoodCandidate = currentLogLikelihood_; // update each chain component for (UnsignedInteger j = 0; j < dimension; ++ j) { // new candidate for the j-th component Point nextState(newState); Bool nonRejectedComponent = nonRejectedComponents_.contains(j); if (!nonRejectedComponent) { // regular MCMC nextState[j] += delta[j] * proposal_[j].getRealization()[0]; } else { // non-rejected component nextState[j] = getPrior().getMarginal(j).getRealization()[0]; } const Scalar nextLogLikelihood = computeLogLikelihood(nextState); // alpha = likehood(newstate)/likehood(oldstate) const Scalar alphaLog = nextLogLikelihood - currentLogLikelihood_; // acceptance test const Scalar uLog = log(RandomGenerator::Generate()); if (nonRejectedComponent || (uLog < alphaLog)) { // the likelihood can be 0 wrt the observations because of a non-rejected component (always ok wrt prior) if (nextLogLikelihood == SpecFunc::LogMinScalar) throw InternalException(HERE) << "Cannot update the (non-accepted) component #" << j << " with null likelihood wrt observations"; logLikelihoodCandidate = nextLogLikelihood; ++ acceptedNumber_[j]; ++ accepted[j]; newState[j] = nextState[j]; } } // reuse the likelihood of the last accepted update currentLogLikelihood_ = logLikelihoodCandidate; // update state currentState_ = newState; // recalibrate for each component if necessary if (samplesNumber_ < getBurnIn()) { for (UnsignedInteger j = 0; j < dimension; ++ j) { const UnsignedInteger calibrationStep = calibrationStrategy_[j].getCalibrationStep(); if ((samplesNumber_ % calibrationStep) == (calibrationStep - 1)) { // compute the current acceptation rate Scalar rho = 1.0 * accepted[j] / (1.0 * calibrationStep); // compute factor Scalar factor = calibrationStrategy_[j].computeUpdateFactor(rho); // update delta delta[j] *= factor; // reset the counter accepted[j] = 0; if (getVerbose()) { LOGINFO( OSS() << "rho=" << rho << " factor=" << factor << " delta=" << delta.getCollection() << " accept=" << getAcceptanceRate().getCollection() ); } } // calibrationStep } // j } // burn-in ++ samplesNumber_; } // for i // Save the last state history_.store(currentState_); return currentState_; } Point RandomWalkMetropolisHastings::getAcceptanceRate() const { const UnsignedInteger dimension = initialState_.getDimension(); Point acceptanceRate(dimension); for (UnsignedInteger j = 0; j < dimension; ++ j) { acceptanceRate[j] = static_cast(acceptedNumber_[j]) / samplesNumber_; } return acceptanceRate; } void RandomWalkMetropolisHastings::setCalibrationStrategy(const CalibrationStrategy& calibrationStrategy) { for (UnsignedInteger i = 0; i < calibrationStrategy_.getSize(); ++ i) { calibrationStrategy_[i] = calibrationStrategy; } } RandomWalkMetropolisHastings::CalibrationStrategyCollection RandomWalkMetropolisHastings::getCalibrationStrategyPerComponent() const { return calibrationStrategy_; } void RandomWalkMetropolisHastings::setCalibrationStrategyPerComponent(const CalibrationStrategyCollection& calibrationStrategy) { const UnsignedInteger dimension = proposal_.getSize(); if(dimension != calibrationStrategy.getSize()) throw InvalidDimensionException(HERE) << "The proposal dimension (" << dimension << ") does not match the size of calibration strategy (" << calibrationStrategy.getSize() << ")."; calibrationStrategy_ = calibrationStrategy; } void RandomWalkMetropolisHastings::setProposal(const RandomWalkMetropolisHastings::DistributionCollection& proposal) { const UnsignedInteger dimension = getPrior().getDimension(); if (proposal.getSize() != dimension) throw InvalidDimensionException(HERE) << "The proposal dimension (" << proposal.getSize() << ") does not match the prior dimension (" << dimension << ")."; for (UnsignedInteger i = 0; i < dimension; ++ i) { Bool symmetric = proposal[i].isElliptical(); symmetric = symmetric && (std::abs(proposal[i].getMean()[0]) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")); if (!symmetric) throw InvalidArgumentException(HERE) << "The proposal density is not symmetric."; } proposal_ = proposal; } RandomWalkMetropolisHastings::DistributionCollection RandomWalkMetropolisHastings::getProposal() const { return proposal_; } /* Method save() stores the object through the StorageManager */ void RandomWalkMetropolisHastings::save(Advocate & adv) const { MCMC::save(adv); adv.saveAttribute("proposal_", proposal_); adv.saveAttribute("calibrationStrategy_", calibrationStrategy_); adv.saveAttribute("samplesNumber_", samplesNumber_); adv.saveAttribute("acceptedNumber_", acceptedNumber_); adv.saveAttribute("currentLogLikelihood_", currentLogLikelihood_); } /* Method load() reloads the object from the StorageManager */ void RandomWalkMetropolisHastings::load(Advocate & adv) { MCMC::load(adv); adv.loadAttribute("proposal_", proposal_); adv.loadAttribute("calibrationStrategy_", calibrationStrategy_); adv.loadAttribute("samplesNumber_", samplesNumber_); adv.loadAttribute("acceptedNumber_", acceptedNumber_); adv.loadAttribute("currentLogLikelihood_", currentLogLikelihood_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/Sampler.cxx000066400000000000000000000035721307543307100231560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Sampler * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Sampler.hxx" #include "openturns/RandomWalkMetropolisHastings.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Sampler); /* Default constructor */ Sampler::Sampler() : TypedInterfaceObject(new RandomWalkMetropolisHastings) { // Nothing to do } /* Constructor from implementation */ Sampler::Sampler(const SamplerImplementation & op) : TypedInterfaceObject(op.clone()) { // Nothing to do } UnsignedInteger Sampler::getDimension() const { return getImplementation()->getDimension(); } /* Return true if comparison succeeds */ Point Sampler::getRealization() const { return getImplementation()->getRealization(); } /* Returns several realizations */ Sample Sampler::getSample(const UnsignedInteger size) const { return getImplementation()->getSample(size); } void Sampler::setVerbose(const Bool verbose) { copyOnWrite(); getImplementation()->setVerbose(verbose); } Bool Sampler::getVerbose() const { return getImplementation()->getVerbose(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/SamplerImplementation.cxx000066400000000000000000000051751307543307100260650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all SamplerImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SamplerImplementation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SamplerImplementation); static const Factory Factory_SamplerImplementation; /* Default constructor */ SamplerImplementation::SamplerImplementation() : PersistentObject() , verbose_(false) { } /* String converter */ String SamplerImplementation::__repr__() const { return OSS() << "class=" << SamplerImplementation::GetClassName() << " name=" << getName(); } SamplerImplementation* SamplerImplementation::clone() const { return new SamplerImplementation(*this); } void SamplerImplementation::setVerbose(const Bool verbose) { verbose_ = verbose; } Bool SamplerImplementation::getVerbose() const { return verbose_; } /* Here is the interface that all derived class must implement */ UnsignedInteger SamplerImplementation::getDimension() const { throw NotYetImplementedException(HERE) << "In SamplerImplementation::getDimension() const"; } Point SamplerImplementation::getRealization() const { throw NotYetImplementedException(HERE) << "In SamplerImplementation::getRealization() const"; } Sample SamplerImplementation::getSample(const UnsignedInteger size) const { Sample sample(size, getDimension()); for (UnsignedInteger i = 0; i < size; ++ i) sample[i] = getRealization(); return sample; } /* Method save() stores the object through the StorageManager */ void SamplerImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("verbose_", verbose_); } /* Method load() reloads the object from the StorageManager */ void SamplerImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("verbose_", verbose_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/000077500000000000000000000000001307543307100230555ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/CalibrationStrategy.hxx000066400000000000000000000054461307543307100275710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all CalibrationStrategy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CALIBRATIONSTRATEGY_HXX #define OPENTURNS_CALIBRATIONSTRATEGY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/CalibrationStrategyImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CalibrationStrategy * * @brief The class describes the concept of a calibration strategy. * * * The implementation defines how the * @see CalibrationStrategyImplementation */ class OT_API CalibrationStrategy : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ CalibrationStrategy(); /** Constructor with parameters*/ CalibrationStrategy(const Interval & range); /** Constructor with parameters*/ CalibrationStrategy(const Interval & range, const Scalar expansionFactor, const Scalar shrinkFactor); /** Constructor with parameters*/ CalibrationStrategy(const Interval & range, const Scalar expansionFactor, const Scalar shrinkFactor, const UnsignedInteger calibrationStep); /** Constructor from implementation */ CalibrationStrategy(const CalibrationStrategyImplementation & op); /** Range accessor */ void setRange(const Interval & range); Interval getRange() const; /** Expansion factor accessor */ void setExpansionFactor(const Scalar expansionFactor); Scalar getExpansionFactor() const; /** Shrink factor accessor */ void setShrinkFactor(const Scalar shrinkFactor); Scalar getShrinkFactor() const; /** Calibration period */ void setCalibrationStep(const UnsignedInteger calibrationStep); UnsignedInteger getCalibrationStep() const; /** * Compute the new update factor * @param rhoEstimate The old rho estimate * @return The new rho estimate */ Scalar computeUpdateFactor(const Scalar rho) const; }; /* class CalibrationStrategy */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CALIBRATIONSTRATEGY_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/CalibrationStrategyImplementation.hxx000066400000000000000000000067341307543307100325000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Default CalibrationStrategyImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CALIBRATIONSTRATEGYIMPLEMENTATION_HXX #define OPENTURNS_CALIBRATIONSTRATEGYIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Interval.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CalibrationStrategyImplementation * * @brief The class implements the concept of comparison operator defined in CalibrationStrategy. * * This class is abstract so it can not be instanciated. It must be derived. * @see CalibrationStrategy */ class OT_API CalibrationStrategyImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor with parameters */ CalibrationStrategyImplementation(const Interval & range = Interval(ResourceMap::GetAsScalar("CalibrationStrategy-DefaultLowerBound"), ResourceMap::GetAsScalar("CalibrationStrategy-DefaultUpperBound")), const Scalar expansionFactor = ResourceMap::GetAsScalar("CalibrationStrategy-DefaultExpansionFactor"), const Scalar shrinkFactor = ResourceMap::GetAsScalar("CalibrationStrategy-DefaultShrinkFactor"), const UnsignedInteger calibrationStep = ResourceMap::GetAsUnsignedInteger("CalibrationStrategy-DefaultCalibrationStep")); /** String converter */ virtual String __repr__() const; /** Range accessor */ void setRange(const Interval & range); Interval getRange() const; /** Expansion factor accessor */ void setExpansionFactor(Scalar expansionFactor); Scalar getExpansionFactor() const; /** Shrink factor accessor */ void setShrinkFactor(Scalar shrinkFactor); Scalar getShrinkFactor() const; /** Calibration period */ void setCalibrationStep(const UnsignedInteger calibrationStep); UnsignedInteger getCalibrationStep() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual CalibrationStrategyImplementation * clone() const; /** @copydoc CalibrationStrategy::computeUpdateFactor() const */ virtual Scalar computeUpdateFactor(const Scalar rho) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: Interval range_; Scalar shrinkFactor_; Scalar expansionFactor_; /// period between recalibrations UnsignedInteger calibrationStep_; }; /* class CalibrationStrategyImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CALIBRATIONSTRATEGYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/MCMC.hxx000066400000000000000000000077261307543307100243410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief MCMC updates the chain * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MCMC_HXX #define OPENTURNS_MCMC_HXX #include "openturns/OTprivate.hxx" #include "openturns/SamplerImplementation.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MCMC * * @brief The class implements the concept of comparison operator defined in Sampler. * * This class is abstract so it can not be instanciated. It must be derived. * @see Sampler */ class OT_API MCMC : public SamplerImplementation { CLASSNAME; public: typedef Collection PointCollection; typedef PersistentCollection PointPersistentCollection; typedef Collection PointWithDescriptionCollection; /** Default constructor */ MCMC(); /** Constructor with parameters*/ MCMC(const Distribution & prior, const Distribution & conditional, const Sample & observations, const Point & initialState); /** Constructor with parameters*/ MCMC(const Distribution & prior, const Distribution & conditional, const Function & model, const Sample & parameters, const Sample & observations, const Point & initialState); /** String converter */ virtual String __repr__() const; /** Compute the likelihood w.r.t. observartions */ Scalar computeLogLikelihood(const Point & currentState) const; /** Prior accessor */ void setPrior(const Distribution & prior); Distribution getPrior() const; /** Conditional accessor */ Distribution getConditional() const; /** Model accessor */ Function getModel() const; /** Obervations accessor */ void setObservations(const Sample & observations); Sample getObservations() const; /** Parameters accessor */ void setParameters(const Sample & parameters); Sample getParameters() const; /// Burning accessor void setBurnIn(UnsignedInteger burnIn); UnsignedInteger getBurnIn() const; /// Thinning accessor void setThinning(UnsignedInteger thinning); UnsignedInteger getThinning() const; /** History accessor */ void setHistory(const HistoryStrategy & strategy); HistoryStrategy getHistory() const; /** non-rejected components accessor */ void setNonRejectedComponents(const Indices & nonRejectedComponents); Indices getNonRejectedComponents() const; /** Virtual constructor */ virtual MCMC * clone() const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: Point initialState_; mutable Point currentState_; mutable HistoryStrategy history_; Indices nonRejectedComponents_; // components that are always accepted private: Distribution prior_; Distribution conditional_; mutable Function model_; Sample parameters_; Sample observations_; UnsignedInteger burnIn_; // number of first samples discarded to reach stationary regime UnsignedInteger thinning_; // number of samples skipped at each generation }; /* class MCMC */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MCMC_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/OTBayesian.hxx000066400000000000000000000024071307543307100256070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Bayesian * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTBAYESIAN_HXX #define OPENTURNS_OTBAYESIAN_HXX #include "openturns/CalibrationStrategy.hxx" #include "openturns/CalibrationStrategyImplementation.hxx" #include "openturns/Sampler.hxx" #include "openturns/SamplerImplementation.hxx" #include "openturns/MCMC.hxx" #include "openturns/RandomWalkMetropolisHastings.hxx" #include "openturns/PosteriorRandomVector.hxx" #endif /* OPENTURNS_OTBAYESIAN_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/PosteriorRandomVector.hxx000066400000000000000000000046121307543307100301230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for random vectors based on samplers * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POSTERIORRANDOMVECTOR_HXX #define OPENTURNS_POSTERIORRANDOMVECTOR_HXX #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Sampler.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PosteriorRandomVector * * An implementation class for functionalChaos random vectors */ class OT_API PosteriorRandomVector : public RandomVectorImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ PosteriorRandomVector(const Sampler & sampler); /** Virtual constructor */ virtual PosteriorRandomVector * clone() const; /** String converter */ String __repr__() const; /** Sampler accessor */ Sampler getSampler() const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Realization accessor */ virtual Point getRealization() const; /** Numerical sample accessor */ virtual Sample getSample(const UnsignedInteger size) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ PosteriorRandomVector() : RandomVectorImplementation() {}; private: /** The underlying sampler */ Sampler sampler_; }; /* class PosteriorRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POSTERIORRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/RandomWalkMetropolisHastings.hxx000066400000000000000000000100251307543307100314220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief RandomWalkMetropolisHastings updates the chain * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMWALKMETROPOLISHASTINGS_HXX #define OPENTURNS_RANDOMWALKMETROPOLISHASTINGS_HXX #include "openturns/OTprivate.hxx" #include "openturns/MCMC.hxx" #include "openturns/CalibrationStrategy.hxx" #include "openturns/Interval.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomWalkMetropolisHastings * * @brief The class implements the concept of comparison operator defined in Sampler. * * @see Sampler */ class OT_API RandomWalkMetropolisHastings : public MCMC { CLASSNAME; public: typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; typedef Collection CalibrationStrategyCollection; typedef PersistentCollection CalibrationStrategyPersistentCollection; /** Default constructor */ RandomWalkMetropolisHastings(); /** Constructor with parameters*/ RandomWalkMetropolisHastings(const Distribution & prior, const Distribution & conditional, const Sample & observations, const Point & initialState, const DistributionCollection & proposal); /** Constructor with parameters*/ RandomWalkMetropolisHastings(const Distribution & prior, const Distribution & conditional, const Function & model, const Sample & parameters, const Sample & observations, const Point & initialState, const DistributionCollection & proposal); /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual RandomWalkMetropolisHastings * clone() const; /** @copydoc Sampler::getRealization() const */ virtual Point getRealization() const; /** Calibration strategy accessor */ void setCalibrationStrategy(const CalibrationStrategy & calibrationStrategy); void setCalibrationStrategyPerComponent(const CalibrationStrategyCollection & calibrationStrategy); CalibrationStrategyCollection getCalibrationStrategyPerComponent() const; /** Proposal accessor */ void setProposal(const DistributionCollection & proposal); DistributionCollection getProposal() const; /** Acceptance rate accessor*/ Point getAcceptanceRate() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /// proposal densities of the markov chain DistributionPersistentCollection proposal_; /// how to calibrate the each chain component CalibrationStrategyPersistentCollection calibrationStrategy_; /// number of samples mutable UnsignedInteger samplesNumber_; /// number of samples accepted mutable Indices acceptedNumber_; mutable Scalar currentLogLikelihood_; }; /* class RandomWalkMetropolisHastings */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMWALKMETROPOLISHASTINGS_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/Sampler.hxx000066400000000000000000000036531307543307100252200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Sampler * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLER_HXX #define OPENTURNS_SAMPLER_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/SamplerImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/CalibrationStrategy.hxx" #include "openturns/ConditionalDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Sampler * * @brief The class describes the concept of a calibration strategy. * * * The implementation defines how the * @see SamplerImplementation */ class OT_API Sampler : public TypedInterfaceObject { CLASSNAME; public: /** Default constructor */ Sampler(); /** Constructor from implementation */ Sampler(const SamplerImplementation & op); /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Returns a realization */ Point getRealization() const; /** Returns a realization */ Sample getSample(const UnsignedInteger size) const; }; /* class Sampler */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLER_HXX */ openturns-1.9/lib/src/Uncertainty/Bayesian/openturns/SamplerImplementation.hxx000066400000000000000000000046071307543307100301260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all SamplerImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SAMPLERIMPLEMENTATION_HXX #define OPENTURNS_SAMPLERIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SamplerImplementation * * @brief The class implements the concept of comparison operator defined in Sampler. * * This class is abstract so it can not be instanciated. It must be derived. * @see Sampler */ class OT_API SamplerImplementation : public PersistentObject { CLASSNAME; public: /** Default constructor */ SamplerImplementation(); /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** String converter */ virtual String __repr__() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual SamplerImplementation * clone() const; /** @copydoc Sampler::getDimension() const */ virtual UnsignedInteger getDimension() const; /** @copydoc Sampler::getRealization() const */ virtual Point getRealization() const; /** @copydoc Sampler::getSample() const */ virtual Sample getSample(const UnsignedInteger size) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: Bool verbose_; }; /* class SamplerImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SAMPLERIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/CMakeLists.txt000066400000000000000000000005721307543307100220310ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_install_header_file (OTUncertainty.hxx) # Recurse in subdirectories add_subdirectory (Bayesian) add_subdirectory (Model) add_subdirectory (Distribution) add_subdirectory (Algorithm) add_subdirectory (StatTests) add_subdirectory (Process) openturns-1.9/lib/src/Uncertainty/Distribution/000077500000000000000000000000001307543307100217445ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Distribution/AliMikhailHaqCopula.cxx000066400000000000000000000316421307543307100263000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The AliMikhailHaqCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/AliMikhailHaqCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AliMikhailHaqCopula); static const Factory Factory_AliMikhailHaqCopula; /* Default constructor */ AliMikhailHaqCopula::AliMikhailHaqCopula() : ArchimedeanCopula() , theta_(0.5) { setName( "AliMikhailHaqCopula" ); setDimension( 2 ); computeRange(); } /* Parameters constructor */ AliMikhailHaqCopula::AliMikhailHaqCopula(const Scalar theta) : ArchimedeanCopula() , theta_(0.0) { setName( "AliMikhailHaqCopula" ); // We set the dimension of the AliMikhailHaqCopula distribution setDimension( 2 ); // Check the given theta setTheta(theta); computeRange(); } /* Comparison operator */ Bool AliMikhailHaqCopula::operator ==(const AliMikhailHaqCopula & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool AliMikhailHaqCopula::equals(const DistributionImplementation & other) const { const AliMikhailHaqCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String AliMikhailHaqCopula::__repr__() const { OSS oss(true); oss << "class=" << AliMikhailHaqCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } String AliMikhailHaqCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(theta = " << theta_ << ")"; return oss; } /* Virtual constructor */ AliMikhailHaqCopula * AliMikhailHaqCopula::clone() const { return new AliMikhailHaqCopula(*this); } /* Get one realization of the distribution */ Point AliMikhailHaqCopula::getRealization() const { Point realization(2); // We use the general algorithm based on conditional CDF inversion const Scalar u = RandomGenerator::Generate(); realization[0] = u; const Scalar v = RandomGenerator::Generate(); const Scalar theta2 = theta_ * theta_; const Scalar a = 1.0 - u; const Scalar b = -theta_ * (2.0 * a * v + 1.0) + 2.0 * theta2 * a * a * v + 1.0; const Scalar delta = 4.0 * v * (a - 1.0); const Scalar c = theta2 * (a * delta + 1.0) - theta_ * (delta + 2.0) + 1.0; realization[1] = 2.0 * v * std::pow(a * theta_ - 1.0, 2) / (b + std::sqrt(c)); return realization; } /* Get the DDF of the distribution */ Point AliMikhailHaqCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null DDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return Point(2, 0.0); } Point result(2); const Scalar t1 = theta_ * theta_; const Scalar t2 = t1 * v; const Scalar t3 = theta_ * v; const Scalar t5 = theta_ * u; const Scalar t6 = t5 * v; const Scalar t7 = -1 + theta_ - t3 - t5 + t6; const Scalar t8 = t7 * t7; const Scalar t12 = t1 * u; const Scalar t16 = t8 * t8; result[0] = -(theta_ - t1 + t2 + t3) / t8 / t7 + 3 * (1 + t3 + t5 - t2 - t12 + t12 * v + t6 + t1 - 2 * theta_) / t16 * (-theta_ + t3); result[1] = -(theta_ - t1 + t12 + t5) / t8 / t7 + 3 * (1 + t3 + t5 - t12 - t1 * v + t12 * v + t6 + t1 - 2 * theta_) / t16 * (-theta_ + t5); return result; } /* Get the PDF of the distribution */ Scalar AliMikhailHaqCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return 0.0; } const Scalar prod = theta_ * (1.0 - u) * (1.0 - v); return (1.0 + theta_ * ((1.0 + u) * (1.0 + v) - 3.0 + prod)) / std::pow(1.0 - prod, 3); } /* Get the CDF of the distribution */ Scalar AliMikhailHaqCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) return 0.0; // If we are outside of the support, in the upper part if ((u >= 1.0) && (v >= 1.0)) return 1.0; // If we are outside of the support for u, in the upper part if (u >= 1.0) return v; // If we are outside of the support for v, in the upper part if (v >= 1.0) return u; // If we are in the support return u * v / (1.0 - theta_ * (1.0 - u) * (1.0 - v)); } /* Compute the covariance of the distribution */ void AliMikhailHaqCopula::computeCovariance() const { covariance_ = CovarianceMatrix(2); covariance_(0, 0) = 1.0 / 12.0; covariance_(0, 1) = (std::abs(theta_) < 0.005633787383 ? (1.0 / 3.0 + (1.0 / 12.0 + (3.0 / 100.0 + (1.0 / 75.0 + (1.0 / 147.0 + (3.0 / 784.0 + theta_ / 432.0) / theta_) / theta_) / theta_) / theta_) / theta_) / (12.0 * theta_) : ((((1.0 + theta_) * SpecFunc::DiLog(theta_) - 2.0 * (1.0 - theta_) * log1p(-theta_)) / theta_) - 3.0) / theta_ - 0.25); covariance_(1, 1) = 1.0 / 12.0; isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix AliMikhailHaqCopula::getKendallTau() const { CorrelationMatrix tau(2); tau(0, 1) = (std::abs(theta_) < 0.005149755205 ? (2.0 / 9.0 + (1.0 / 18.0 + (1.0 / 45.0 + (1.0 / 90.0 + (2.0 / 315.0 + (1.0 / 252.0 + theta_ / 378.0) * theta_) * theta_) * theta_) * theta_) * theta_) * theta_ : 1.0 - 2.0 / (3.0 * theta_) + log1p(-theta_) * (-2.0 / 3.0 + 4.0 / (3.0 * theta_) - 2.0 / (3.0 * theta_ * theta_))); return tau; } /* Get the PDFGradient of the distribution */ Point AliMikhailHaqCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In AliMikhailHaqCopula::computePDFGradient(const Point & point) const"; } /* Get the CDFGradient of the distribution */ Point AliMikhailHaqCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In AliMikhailHaqCopula::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution */ Point AliMikhailHaqCopula::computeQuantile(const Scalar prob, const Bool tail) const { return Point(2, (prob * theta_ + std::sqrt(prob * (1.0 - theta_ + prob * theta_))) / (1.0 + prob * theta_)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar AliMikhailHaqCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; const Scalar u = y[0]; const Scalar v = x; // If we are in the support return v * (1.0 - theta_ * (1.0 - v)) / std::pow(1.0 - theta_ * (1.0 - u) * (1.0 - v), 2); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar AliMikhailHaqCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // Initialize the conditional quantile with the quantile of the i-th marginal distribution // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; // Optimized code given by Maple 13 const Scalar u = y[0]; const Scalar qTheta = q * theta_; const Scalar theta2 = theta_ * theta_; const Scalar qTheta2 = q * theta2; const Scalar u2 = u * u; const Scalar qTheta2U2 = qTheta2 * u2; const Scalar qThetaU = qTheta * u; const Scalar tmp1 = 2.0 * qThetaU; const Scalar tmp2 = 4.0 * qTheta2 * u; const Scalar tmp3 = std::sqrt(1.0 + theta2 + 4.0 * qThetaU - tmp2 + 4.0 * qTheta2U2 - 2.0 * theta_); return -0.5 * (theta_ + 2.0 * qTheta - 2.0 * qTheta2 - 2.0 * qTheta2U2 - tmp1 - 1.0 + tmp2 + tmp3) / (theta_ * (-1.0 + qTheta - tmp1 + qTheta * u2)); } /* Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar AliMikhailHaqCopula::computeArchimedeanGenerator(const Scalar t) const { return log1p(-theta_ * (1.0 - t)) / t; } /* Compute the inverse of the archimedean generator */ Scalar AliMikhailHaqCopula::computeInverseArchimedeanGenerator(const Scalar t) const { const Scalar y = t * (theta_ - 1.0) / theta_; return (y - SpecFunc::LambertW(-t * std::exp(y) / theta_)) / t; } /* Compute the derivative of the density generator */ Scalar AliMikhailHaqCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const { const Scalar u = 1.0 - theta_ * (1.0 - t); return (theta_ / u - std::log(u) / t) / t; } /* Compute the seconde derivative of the density generator */ Scalar AliMikhailHaqCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const { const Scalar u = 1.0 - theta_ * (1.0 - t); return (-theta_ * theta_ / (u * u) - 2.0 * theta_ / (t * u) + 2.0 * std::log(u) / (t * t)) / t; } /* Parameters value accessor */ Point AliMikhailHaqCopula::getParameter() const { return Point(1, theta_); } void AliMikhailHaqCopula::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = AliMikhailHaqCopula(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description AliMikhailHaqCopula::getParameterDescription() const { return Description(1, "theta"); } /* Tell if the distribution has independent copula */ Bool AliMikhailHaqCopula::hasIndependentCopula() const { return (theta_ == 0.0); } /* Theta accessor */ void AliMikhailHaqCopula::setTheta(const Scalar theta) { if ((theta <= -1.0) || (theta >= 1.0)) throw InvalidArgumentException(HERE) << "Theta MUST be in (-1, 1), here theta=" << theta; theta_ = theta; } /* Theta accessor */ Scalar AliMikhailHaqCopula::getTheta() const { return theta_; } /* Method save() stores the object through the StorageManager */ void AliMikhailHaqCopula::save(Advocate & adv) const { ArchimedeanCopula::save(adv); adv.saveAttribute( "theta_", theta_ ); } /* Method load() reloads the object from the StorageManager */ void AliMikhailHaqCopula::load(Advocate & adv) { ArchimedeanCopula::load(adv); adv.loadAttribute( "theta_", theta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/AliMikhailHaqCopulaFactory.cxx000066400000000000000000000116701307543307100276270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for AliMikhailHaqCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/AliMikhailHaqCopulaFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(AliMikhailHaqCopulaFactory); static const Factory Factory_AliMikhailHaqCopulaFactory; /* Default constructor */ AliMikhailHaqCopulaFactory::AliMikhailHaqCopulaFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ AliMikhailHaqCopulaFactory * AliMikhailHaqCopulaFactory::clone() const { return new AliMikhailHaqCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ AliMikhailHaqCopulaFactory::Implementation AliMikhailHaqCopulaFactory::build(const Sample & sample) const { return buildAsAliMikhailHaqCopula(sample).clone(); } AliMikhailHaqCopulaFactory::Implementation AliMikhailHaqCopulaFactory::build(const Point & parameters) const { return buildAsAliMikhailHaqCopula(parameters).clone(); } AliMikhailHaqCopulaFactory::Implementation AliMikhailHaqCopulaFactory::build() const { return buildAsAliMikhailHaqCopula().clone(); } AliMikhailHaqCopula AliMikhailHaqCopulaFactory::buildAsAliMikhailHaqCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a AliMikhailHaqCopula distribution from an empty sample"; if (sample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a AliMikhailHaqCopula distribution from a sample of dimension not equal to 2"; Scalar tau = sample.computeKendallTau().operator()(0, 1); if ((tau < (5.0 - 8.0 * std::log(2.0)) / 3.0) || (tau > 1.0 / 3.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a AliMikhailHaqCopula distribution from a sample with Kendall tau not in [(5-8ln(2))/3 ~ -0.182, 1/3~0.333]. Here tau=" << tau; // Search the value of the AliMikhailHaq copula parameter by numerically inverting the relation: // between Kendall's tau and AliMikhailHaq copula's parameter Scalar theta = 0.0; Scalar step = 0.5; Scalar tauTheta = KendallTauFromParameter(theta); // Find a lower bound while (tauTheta > tau) { theta -= step; tauTheta = KendallTauFromParameter(theta); step *= 0.5; } // Here, tauTheta <= tau, hence theta is a lower bound of the parameter Scalar minTheta = theta; // Now, look for an upper bound // If we started from a value of theta such that tauTheta > tau, theta + 2 * step is an upper bound Scalar maxTheta = theta + 2.0 * step; // but if step = 0.5, it is because tauTheta was < tau for the initial choice of theta if (step < 0.5) { while (tauTheta <= tau) { theta += step; tauTheta = KendallTauFromParameter(theta); step *= 2.0; } // Here, we know that [theta - 0.5 * step, theta] is a bracketing interval minTheta = theta - 0.5 * step; maxTheta = theta; } // Bisection const Scalar thetaEpsilon = ResourceMap::GetAsScalar( "AliMikhailHaqCopulaFactory-ThetaEpsilon" ); while (maxTheta - minTheta > thetaEpsilon) { theta = 0.5 * (maxTheta + minTheta); tauTheta = KendallTauFromParameter(theta); if (tauTheta <= tau) minTheta = theta; else maxTheta = theta; } AliMikhailHaqCopula result(theta); result.setDescription(sample.getDescription()); return result; } AliMikhailHaqCopula AliMikhailHaqCopulaFactory::buildAsAliMikhailHaqCopula(const Point & parameters) const { try { AliMikhailHaqCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a AliMikhailHaqCopula from the given parameters"; } } AliMikhailHaqCopula AliMikhailHaqCopulaFactory::buildAsAliMikhailHaqCopula() const { return AliMikhailHaqCopula(); } // Compute Kendall's tau from AliMikhailHaq copula's parameter. It is an increasing function Scalar AliMikhailHaqCopulaFactory::KendallTauFromParameter(const Scalar theta) const { return AliMikhailHaqCopula(theta).getKendallTau()(0, 1); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Arcsine.cxx000066400000000000000000000250731307543307100240630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Arcsine distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Arcsine.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Arcsine); static const Factory Factory_Arcsine; /* Default constructor */ Arcsine::Arcsine() : ContinuousDistribution() , a_(-1.0) , b_(1.0) { setName("Arcsine"); setDimension(1); computeRange(); } /* Parameters constructor */ Arcsine::Arcsine(const Scalar a, const Scalar b) : ContinuousDistribution() , a_(a) , b_(b) { if (!(a < b)) throw InvalidArgumentException(HERE) << "in Arcsine : a must be smaller than b"; setName("Arcsine"); setDimension(1); computeRange(); } /* Comparison operator */ Bool Arcsine::operator ==(const Arcsine & other) const { if (this == &other) return true; return (a_ == other.a_) && (b_ == other.b_); } Bool Arcsine::equals(const DistributionImplementation & other) const { const Arcsine* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Arcsine::__repr__() const { OSS oss(true); oss << "class=" << Arcsine::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " a=" << a_ << " b=" << b_; return oss; } String Arcsine::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(a = " << a_ << ", b = " << b_ << ")"; return oss; } /* Virtual constructor */ Arcsine * Arcsine::clone() const { return new Arcsine(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Arcsine::computeRange() { setRange(Interval(a_, b_)); } /* Get one realization of the distribution */ Point Arcsine::getRealization() const { return Point(1, computeScalarQuantile(RandomGenerator::Generate())); } /* Get the DDF of the distribution */ Point Arcsine::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Scalar ddf = 0.0; if ((a_ < x) && (x <= b_)) { ddf = (x - 0.5 * (a_ + b_)) / (M_PI * (x - a_) * (b_ - x) * std::sqrt((x - a_) * (b_ - x))); } return Point(1, ddf); } /* Get the PDF of the distribution */ Scalar Arcsine::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x >= b_)) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Arcsine::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x >= b_)) return SpecFunc::LogMinScalar; return -std::log(M_PI) - 0.5 * (std::log(b_ - x) + std::log(x - a_)); } /* Get the CDF of the distribution */ Scalar Arcsine::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; const Scalar value = std::asin((x - 0.5 * (a_ + b_)) / (0.5 * (b_ - a_))) / M_PI; return 0.5 + value; } Scalar Arcsine::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 1.0; if (x > b_) return 0.0; const Scalar value = std::asin((x - 0.5 * (a_ + b_)) / (0.5 * (b_ - a_))) / M_PI; return 0.5 - value; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Arcsine::computeCharacteristicFunction(const Scalar x) const { // return std::exp(Complex(0.0, a_)) * SpecFunc::HyperGeom_1_1(0.5, 1.0, (b_ - a_) * x); return std::exp(Complex(0.0, a_ + 0.5 * (b_ - a_) * x)) * j0(0.5 * (b_ - a_) * x); } /* Get the PDFGradient of the distribution */ Point Arcsine::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(2); Point pdfGradient2(2); const Scalar x = point[0]; if ((a_ < x) && (x <= b_)) { pdfGradient[0] = -0.5 * (b_ - a_) * std::sqrt((b_ - x) * (x - a_)) / (M_PI * (x - b_) * (x - b_) * (x - a_) * (x - a_)); pdfGradient[1] = (0.5 * (a_ + b_) - x) * std::sqrt((b_ - x) * (x - a_)) / (M_PI * (x - a_) * (x - a_) * (b_ - x) * (b_ - x)); pdfGradient2[0] = -0.5 * pdfGradient[0] + 0.5 * pdfGradient[1]; pdfGradient2[1] = 0.5 * pdfGradient[0] + 0.5 * pdfGradient[1]; } return pdfGradient2; } /* Get the CDFGradient of the distribution */ Point Arcsine::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(2); Point cdfGradient2(2); const Scalar x = point[0]; if ((a_ < x) && (x <= b_)) { cdfGradient[0] = (0.5 * (a_ + b_) - x) / (M_PI * 0.5 * (b_ - a_) * std::sqrt((b_ - x) * (x - a_))); cdfGradient[1] = -1.0 / (M_PI * std::sqrt((b_ - x) * (x - a_))); cdfGradient2[0] = -0.5 * cdfGradient[0] + 0.5 * cdfGradient[1]; cdfGradient2[1] = 0.5 * cdfGradient[0] + 0.5 * cdfGradient[1]; } return cdfGradient2; } /* Get the quantile of the distribution */ Scalar Arcsine::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar proba = tail ? 1.0 - prob : prob; const Scalar quantile = 0.5 * (b_ - a_) * std::sin(M_PI * (proba - 0.5)) + 0.5 * (a_ + b_); return quantile; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Arcsine::getRoughness() const { throw NotDefinedException(HERE) << "roughness of Arcsine distribution is not L2-integrable"; } /* Compute the mean of the distribution */ void Arcsine::computeMean() const { mean_ = Point(1, 0.5 * (a_ + b_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Arcsine::getStandardDeviation() const /*throw(NotDefinedException)*/ { return Point(1, 0.5 * (b_ - a_) * M_SQRT1_2); } /* Get the skewness of the distribution */ Point Arcsine::getSkewness() const /*throw(NotDefinedException)*/ { return Point(1, 0.0); } /* Get the kurtosis of the distribution */ Point Arcsine::getKurtosis() const /*throw(NotDefinedException)*/ { Scalar standardDeviation4 = getStandardDeviation()[0]; standardDeviation4 *= standardDeviation4; standardDeviation4 *= standardDeviation4; Scalar a4 = 0.5 * (b_ - a_) * 0.5 * (b_ - a_); a4 *= a4; return Point(1, (3.0 / 8.0) * a4 / standardDeviation4); } /* Get the moments of the standardized distribution */ Point Arcsine::getStandardMoment(const UnsignedInteger n) const { if (n % 2 == 1) return Point(1, 0.0); return Point(1, std::exp(SpecFunc::LogGamma(0.5 * n + 0.5) - SpecFunc::LogGamma(0.5 * n + 1)) / std::sqrt(M_PI)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Arcsine::Implementation Arcsine::getStandardRepresentative() const { return Arcsine(-1.0, 1.0).clone(); } /* Compute the covariance of the distribution */ void Arcsine::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar eta = getStandardDeviation()[0]; covariance_(0, 0) = eta * eta; isAlreadyComputedCovariance_ = true; } Point Arcsine::getParameter() const { Point point(2); point[0] = a_; point[1] = b_; return point; } void Arcsine::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Arcsine(parameter[0], parameter[1]); setWeight(w); } Description Arcsine::getParameterDescription() const { Description description(2); description[0] = "a"; description[1] = "b"; return description; } /* Check if the distribution is elliptical */ Bool Arcsine::isElliptical() const { return true; } /* A accessor */ void Arcsine::setA(const Scalar a) { if (a >= b_) throw InvalidArgumentException(HERE) << "in Arcsine : a must be smaller than b"; if (a != a_) { a_ = a; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Arcsine::getA() const { return a_; } /* B accessor */ void Arcsine::setB(const Scalar b) { if (a_ >= b) throw InvalidArgumentException(HERE) << "in Arcsine : a must be smaller than b"; if (b != b_) { b_ = b; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Arcsine::getB() const { return b_; } void Arcsine::setAB(const Scalar a, const Scalar b) { if (a >= b) throw InvalidArgumentException(HERE) << "in Arcsine : a must be smaller than b"; a_ = a; b_ = b; computeRange(); } /* Method save() stores the object through the StorageManager */ void Arcsine::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "b_", b_ ); } /* Method load() reloads the object from the StorageManager */ void Arcsine::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "b_", b_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ArcsineFactory.cxx000066400000000000000000000061551307543307100254130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Arcsine distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ArcsineFactory.hxx" #include "openturns/ArcsineMuSigma.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ArcsineFactory); static const Factory Factory_ArcsineFactory; /* Default constructor */ ArcsineFactory::ArcsineFactory() : DistributionFactoryImplementation() { // Initialize any other class members here // At last, allocate memory space if needed, but go to destructor to free it } /* Virtual constructor */ ArcsineFactory * ArcsineFactory::clone() const { return new ArcsineFactory(*this); } /* Here is the interface that all derived class must implement */ ArcsineFactory::Implementation ArcsineFactory::build(const Sample & sample) const { return buildAsArcsine(sample).clone(); } ArcsineFactory::Implementation ArcsineFactory::build(const Point & parameters) const { return buildAsArcsine(parameters).clone(); } ArcsineFactory::Implementation ArcsineFactory::build() const { return buildAsArcsine().clone(); } DistributionFactoryResult ArcsineFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } Arcsine ArcsineFactory::buildAsArcsine(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Arcsine distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Arcsine distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar mean = sample.computeMean()[0]; Scalar standardDeviation = sample.computeStandardDeviationPerComponent()[0]; Point parameters(2); parameters[0] = mean; parameters[1] = standardDeviation; Arcsine result(buildAsArcsine(ArcsineMuSigma()(parameters))); result.setDescription(sample.getDescription()); return result; } Arcsine ArcsineFactory::buildAsArcsine(const Point & parameters) const { try { Arcsine distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Arcsine distribution from the given parameters"; } } Arcsine ArcsineFactory::buildAsArcsine() const { return Arcsine(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ArcsineMuSigma.cxx000066400000000000000000000110731307543307100253410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Arcsine distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ArcsineFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/ArcsineMuSigma.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ArcsineMuSigma); /* Default constructor */ ArcsineMuSigma::ArcsineMuSigma() : DistributionParametersImplementation() , mu_(1.0) , sigma_(1.0) { // Nothing to do } ArcsineMuSigma::ArcsineMuSigma(const Scalar mu, const Scalar sigma) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; } /* Virtual constructor */ ArcsineMuSigma * ArcsineMuSigma::clone() const { return new ArcsineMuSigma(*this); } /* Comparison operator */ Bool ArcsineMuSigma::operator ==(const ArcsineMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution ArcsineMuSigma::getDistribution() const { Point newParameters(2); newParameters[0] = mu_; newParameters[1] = sigma_; Point nativeParameters(operator()(newParameters)); return ArcsineFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix ArcsineMuSigma::gradient() const { const Scalar dadmu = 1.0; const Scalar dadsigma = -sqrt(2.0); const Scalar dbdmu = 1.0; const Scalar dbdsigma = sqrt(2.0); SquareMatrix nativeParametersGradient(IdentityMatrix(2)); nativeParametersGradient(0, 0) = dadmu; nativeParametersGradient(1, 0) = dadsigma; nativeParametersGradient(0, 1) = dbdmu; nativeParametersGradient(1, 1) = dbdsigma; return nativeParametersGradient; } /* Conversion operator */ Point ArcsineMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; const Scalar a = mu - sigma * sqrt(2.0); const Scalar b = mu + sigma * sqrt(2.0); Point nativeParameters(inP); nativeParameters[0] = a; nativeParameters[1] = b; return nativeParameters; } Point ArcsineMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar a = inP[0]; const Scalar b = inP[1]; if (a >= b) throw InvalidArgumentException(HERE) << "a must be smaller than b"; const Scalar mu = (a + b) / 2.0; const Scalar sigma = 0.5 * (b - a) * M_SQRT1_2; Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void ArcsineMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; } Point ArcsineMuSigma::getValues() const { Point point(2); point[0] = mu_; point[1] = sigma_; return point; } Description ArcsineMuSigma::getDescription() const { Description description(2); description[0] = "mu"; description[1] = "sigma"; return description; } /* String converter */ String ArcsineMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_; return oss; } String ArcsineMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ")"; return oss; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/BayesDistribution.cxx000066400000000000000000000307471307543307100261460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The BayesDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/BayesDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/ConditionalDistribution.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BayesDistribution); static const Factory Factory_BayesDistribution; /* Default constructor */ BayesDistribution::BayesDistribution() : ContinuousDistribution() , conditionedDistribution_() , conditioningDistribution_() , linkFunction_() { const Description inVars(Description::BuildDefault(1, "y")); Description formulas(2); formulas[0] = inVars[0]; formulas[1] = String(OSS() << inVars[0] << " + 1"); setConditionedAndConditioningDistributionsAndLinkFunction(Uniform(), Uniform(), SymbolicFunction(inVars, formulas)); setName("BayesDistribution"); isParallel_ = false; } /* Parameters constructor */ BayesDistribution::BayesDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction) : ContinuousDistribution() , conditionedDistribution_(conditionedDistribution) , conditioningDistribution_(conditioningDistribution) , linkFunction_(linkFunction) { setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution, linkFunction); setName("BayesDistribution"); isParallel_ = false; } BayesDistribution::BayesDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution) : ContinuousDistribution() , conditionedDistribution_(conditionedDistribution) , conditioningDistribution_(conditioningDistribution) , linkFunction_(SymbolicFunction(Description::BuildDefault(conditioningDistribution.getDimension(), "x"), Description::BuildDefault(conditioningDistribution.getDimension(), "x"))) { setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution, linkFunction_); setName("BayesDistribution"); isParallel_ = false; } /* Comparison operator */ Bool BayesDistribution::operator ==(const BayesDistribution & other) const { if (this == &other) return true; return (conditionedDistribution_ == other.conditionedDistribution_) && (conditioningDistribution_ == other.conditioningDistribution_) && (linkFunction_ == other.linkFunction_); } Bool BayesDistribution::equals(const DistributionImplementation & other) const { const BayesDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* Compute the numerical range of the distribution given the parameters values */ void BayesDistribution::computeRange() { // First, the conditioning distribution const Point lowerBoundConditioning(conditioningDistribution_.getRange().getLowerBound()); const Interval::BoolCollection finiteLowerBoundConditioning(conditioningDistribution_.getRange().getFiniteLowerBound()); const Point upperBoundConditioning(conditioningDistribution_.getRange().getUpperBound()); const Interval::BoolCollection finiteUpperBoundConditioning(conditioningDistribution_.getRange().getFiniteUpperBound()); // Then, the conditioned distribution const ConditionalDistribution deconditioned(conditionedDistribution_, conditioningDistribution_, linkFunction_); Point lowerBound(deconditioned.getRange().getLowerBound()); Interval::BoolCollection finiteLowerBound(deconditioned.getRange().getFiniteLowerBound()); Point upperBound(deconditioned.getRange().getUpperBound()); Interval::BoolCollection finiteUpperBound(deconditioned.getRange().getFiniteUpperBound()); // Merge everything lowerBound.add(lowerBoundConditioning); finiteLowerBound.add(finiteLowerBoundConditioning); upperBound.add(upperBoundConditioning); finiteUpperBound.add(finiteUpperBoundConditioning); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* String converter */ String BayesDistribution::__repr__() const { OSS oss(true); oss << "class=" << BayesDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " conditioned distribution=" << conditionedDistribution_ << " conditioning distribution=" << conditioningDistribution_ << " link function=" << linkFunction_; return oss; } String BayesDistribution::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(X, Y with X|Theta~" << conditionedDistribution_.getImplementation()->getClassName() << "(Theta), Theta=f(Y), f=" << linkFunction_.getEvaluation()->__str__() << ", Y~" << conditioningDistribution_.__str__() << ")"; return oss; } /* Virtual constructor */ BayesDistribution * BayesDistribution::clone() const { return new BayesDistribution(*this); } /* Get one realization of the distribution */ Point BayesDistribution::getRealization() const { const Point y(conditioningDistribution_.getRealization()); Distribution deconditioned(conditionedDistribution_); deconditioned.setParameter(linkFunction_(y)); Point x(deconditioned.getRealization()); x.add(y); return x; } /* Get the PDF of the distribution */ Scalar BayesDistribution::computePDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const UnsignedInteger conditionedDimension = conditionedDistribution_.getDimension(); const UnsignedInteger conditioningDimension = conditioningDistribution_.getDimension(); Point y(conditioningDimension); std::copy(point.begin() + conditionedDimension, point.end(), y.begin()); const Scalar conditioningPDF = conditioningDistribution_.computePDF(y); if (conditioningPDF == 0.0) return 0.0; Distribution deconditioned(conditionedDistribution_); const Point parameters(linkFunction_(y)); deconditioned.setParameter(parameters); Point x(conditionedDimension); std::copy(point.begin(), point.begin() + conditionedDimension, x.begin()); const Scalar deconditionedPDF = deconditioned.computePDF(x); return deconditionedPDF * conditioningPDF; } /* Bayes distribution accessor */ void BayesDistribution::setConditionedDistribution(const Distribution & conditionedDistribution) { if (conditionedDistribution != conditionedDistribution_) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution_, linkFunction_); } Distribution BayesDistribution::getConditionedDistribution() const { return conditionedDistribution_; } /* Conditioning distribution accessor */ void BayesDistribution::setConditioningDistribution(const Distribution & conditioningDistribution) { if (conditioningDistribution != conditioningDistribution_) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution_, conditioningDistribution, linkFunction_); } Distribution BayesDistribution::getConditioningDistribution() const { return conditioningDistribution_; } /* Link function accessor */ void BayesDistribution::setLinkFunction(const Function & linkFunction) { if (!(linkFunction == linkFunction_)) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution_, conditioningDistribution_, linkFunction); } Function BayesDistribution::getLinkFunction() const { return linkFunction_; } /* Method to set simultaneously the conditioning distribution, the conditioned distribution and the link function */ void BayesDistribution::setConditionedAndConditioningDistributionsAndLinkFunction(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction) { const UnsignedInteger conditioningDimension = conditioningDistribution.getDimension(); const UnsignedInteger conditionedParametersDimension = conditionedDistribution.getParameterDimension(); // We must check that the conditioning distribution has the same dimension as the input dimension of the link function and that the conditioning distribution has the same dimension as the input dimension of the link function if (conditionedParametersDimension != linkFunction.getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a link function with output dimension equal to the number of parameters of the conditioned distribution."; if (conditioningDimension != linkFunction.getInputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a link function with input dimension equal to the conditioning distribution dimension."; conditionedDistribution_ = conditionedDistribution; conditioningDistribution_ = conditioningDistribution; linkFunction_ = linkFunction; setDimension(conditioningDimension + conditionedDistribution.getDimension()); computeRange(); } /* Get the i-th marginal distribution */ BayesDistribution::Implementation BayesDistribution::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (getDimension() == 1) return clone(); // General case // If the index is in the conditioned part const UnsignedInteger conditionedDimension = conditionedDistribution_.getDimension(); if (i < conditionedDimension) return ConditionalDistribution(conditionedDistribution_, conditioningDistribution_, linkFunction_).getMarginal(i); return conditioningDistribution_.getImplementation()->getMarginal(i - conditionedDimension); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ BayesDistribution::Implementation BayesDistribution::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case // If the indices are in the conditioned part const UnsignedInteger conditionedDimension = conditionedDistribution_.getDimension(); if (indices.check(conditionedDimension)) return ConditionalDistribution(conditionedDistribution_, conditioningDistribution_, linkFunction_).getMarginal(indices); // If the indices are in the conditioning part Indices conditioningIndices(0); const UnsignedInteger size = indices.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (i >= conditionedDimension) conditioningIndices.add(i - conditionedDimension); if (conditioningIndices.getSize() == size) return conditioningDistribution_.getImplementation()->getMarginal(conditioningIndices); throw NotYetImplementedException(HERE) << "In BayesDistribution::getMarginal(const Indices & indices) const"; } // getMarginal(Indices) /* Method save() stores the object through the StorageManager */ void BayesDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "conditionedDistribution_", conditionedDistribution_ ); adv.saveAttribute( "conditioningDistribution_", conditioningDistribution_ ); adv.saveAttribute( "linkFunction_", linkFunction_ ); } /* Method load() reloads the object from the StorageManager */ void BayesDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "conditionedDistribution_", conditionedDistribution_ ); adv.loadAttribute( "conditioningDistribution_", conditioningDistribution_ ); adv.loadAttribute( "linkFunction_", linkFunction_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Bernoulli.cxx000066400000000000000000000210751307543307100244300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Bernoulli distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Bernoulli.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Bernoulli); static const Factory Factory_Bernoulli; /* Default constructor */ Bernoulli::Bernoulli() : DiscreteDistribution(), p_(0.5) { setName( "Bernoulli" ); // We set the dimension of the Bernoulli distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ Bernoulli::Bernoulli(const Scalar p) : DiscreteDistribution(), p_(-1.0) { setName( "Bernoulli" ); // This call sets also the range setP(p); // We set the dimension of the Bernoulli distribution setDimension( 1 ); } /* Comparison operator */ Bool Bernoulli::operator ==(const Bernoulli & other) const { if (this == &other) return true; return p_ == other.p_; } Bool Bernoulli::equals(const DistributionImplementation & other) const { const Bernoulli* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Bernoulli::__repr__() const { OSS oss; oss << "class=" << Bernoulli::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " p=" << p_; return oss; } String Bernoulli::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(p = " << p_ << ")"; return oss; } /* Virtual constructor */ Bernoulli * Bernoulli::clone() const { return new Bernoulli(*this); } /* Get one realization of the distribution */ Point Bernoulli::getRealization() const { return Point(1, (RandomGenerator::Generate() < p_ ? 1.0 : 0.0)); } /* Get the PDF of the distribution */ Scalar Bernoulli::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (std::abs(k) < supportEpsilon_) return 1.0 - p_; if (std::abs(k - 1.0) < supportEpsilon_) return p_; return 0.0; } /* Get the CDF of the distribution */ Scalar Bernoulli::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; // k < 0.0 if (k < -supportEpsilon_) return 0.0; // k >= 1.0 if (k > 1.0 - supportEpsilon_) return 1.0; // k > 0.0 && k < 1.0 return 1.0 - p_; } /* Get the PDF gradient of the distribution */ Point Bernoulli::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; Point pdfGradient(1, 0.0); if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return pdfGradient; throw NotYetImplementedException(HERE) << "In Bernoulli::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point Bernoulli::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return Point(1, 0.0); throw NotYetImplementedException(HERE) << "In Bernoulli::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution */ Scalar Bernoulli::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (prob < 1.0 - p_) return (tail ? 1.0 : 0.0); return (tail ? 0.0 : 1.0); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Bernoulli::computeCharacteristicFunction(const Scalar x) const { const Complex value(1.0 - p_ + p_ * std::exp(Complex(0.0, x))); return value; } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Bernoulli::computeGeneratingFunction(const Complex & z) const { const Complex value(1.0 - p_ + p_ * z); return value; } /* Compute the mean of the distribution */ void Bernoulli::computeMean() const { mean_ = Point(1, p_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Bernoulli::getStandardDeviation() const { return Point(1, std::sqrt(p_ * (1.0 - p_))); } /* Get the skewness of the distribution */ Point Bernoulli::getSkewness() const { if ((p_ == 0.0) || (p_ == 1.0)) throw NotDefinedException(HERE) << "Error: the skewness is not defined for the Bernoulli distribution when p is zero or one."; return Point(1, (1.0 - 2.0 * p_) / std::sqrt(p_ * (1.0 - p_))); } /* Get the kurtosis of the distribution */ Point Bernoulli::getKurtosis() const { if ((p_ == 0.0) || (p_ == 1.0)) throw NotDefinedException(HERE) << "Error: the kurtosis is not defined for the Bernoulli distribution when p is zero or one."; return Point(1, 3.0 + (6.0 * p_ * (1.0 - p_) + 1.0) / (p_ * (1.0 - p_))); } /* Get the moments of the standardized distribution */ Point Bernoulli::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 0.0); return Point(1, p_); } /* Compute the covariance of the distribution */ void Bernoulli::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = p_ * (1.0 - p_); isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Bernoulli::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 0.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (std::min(floor(interval.getUpperBound()[0]), 1.0)); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value and description accessor */ Point Bernoulli::getParameter() const { return Point(1, p_); } void Bernoulli::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Bernoulli(parameter[0]); setWeight(w); } Description Bernoulli::getParameterDescription() const { return Description(1, "p"); } /* Check if the distribution is elliptical */ Bool Bernoulli::isElliptical() const { return p_ == 0.5; } /* P accessor */ void Bernoulli::setP(const Scalar p) { if ((p < 0.0) || (p > 1.0)) throw InvalidArgumentException(HERE) << "P must be in [0, 1], here p=" << p; if (p != p_) { p_ = p; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* P accessor */ Scalar Bernoulli::getP() const { return p_; } /* Compute the numerical range of the distribution given the parameters values */ void Bernoulli::computeRange() { // Degenerate cases if (p_ == 0.0) setRange(Interval(0.0, 0.0)); if (p_ == 1.0) setRange(Interval(1.0, 1.0)); // Usual case setRange(Interval(0.0, 1.0)); } /* Method save() stores the object through the StorageManager */ void Bernoulli::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void Bernoulli::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "p_", p_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BernoulliFactory.cxx000066400000000000000000000071771307543307100257670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Bernoulli distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BernoulliFactory.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Binomial.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BernoulliFactory); static const Factory Factory_BernoulliFactory; /* Default constructor */ BernoulliFactory::BernoulliFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ BernoulliFactory * BernoulliFactory::clone() const { return new BernoulliFactory(*this); } /* Here is the interface that all derived class must implement */ BernoulliFactory::Implementation BernoulliFactory::build(const Sample & sample) const { return buildAsBernoulli(sample).clone(); } BernoulliFactory::Implementation BernoulliFactory::build(const Point & parameters) const { return buildAsBernoulli(parameters).clone(); } BernoulliFactory::Implementation BernoulliFactory::build() const { return buildAsBernoulli().clone(); } Bernoulli BernoulliFactory::buildAsBernoulli(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Bernoulli distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Bernoulli distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar sum = 0.0; const Scalar supportEpsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = sample[i][0]; const int iX(static_cast(round(x))); if ((std::abs(x - iX) > supportEpsilon) || ((iX != 0) && (iX != 1))) throw InvalidArgumentException(HERE) << "Error: can build a Bernoulli distribution only from a sample made of 0 and 1."; sum += x; } Bernoulli result(sum / size); result.setDescription(sample.getDescription()); return result; } Bernoulli BernoulliFactory::buildAsBernoulli(const Point & parameters) const { try { Bernoulli distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Bernoulli distribution from the given parameters"; } } Bernoulli BernoulliFactory::buildAsBernoulli() const { return Bernoulli(); } DistributionFactoryResult BernoulliFactory::buildEstimator(const Sample & sample) const { Bernoulli distribution(buildAsBernoulli(sample)); const UnsignedInteger size = sample.getSize(); Distribution parametersDistribution(Binomial(size, distribution.getP()) * (1.0 / size)); DistributionFactoryResult result(distribution, parametersDistribution); return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BernsteinCopulaFactory.cxx000066400000000000000000000133521307543307100271210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements a non parametric density estimator for copulas * based on the Bernstein copula approximation of the empirical copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BernsteinCopulaFactory.hxx" #include "openturns/Beta.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/Mixture.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BernsteinCopulaFactory * * The class describes the probabilistic concept of BernsteinCopulaFactory. */ CLASSNAMEINIT(BernsteinCopulaFactory); static const Factory Factory_BernsteinCopulaFactory; /* Default constructor */ BernsteinCopulaFactory::BernsteinCopulaFactory() : DistributionFactoryImplementation() , isParallel_(ResourceMap::GetAsBool("BernsteinCopulaFactory-Parallel")) { setName("BernsteinCopulaFactory"); } /* Virtual constructor */ BernsteinCopulaFactory * BernsteinCopulaFactory::clone() const { return new BernsteinCopulaFactory(*this); } /* Compute the number of bins according to the inverse power rule */ UnsignedInteger BernsteinCopulaFactory::computeBinNumber(const Sample & sample) { return static_cast(1.0 + pow(sample.getSize(), 2.0 / (4.0 + sample.getDimension()))); } struct BernsteinCopulaFactoryPolicy { const Sample input_; Mixture::DistributionCollection & output_; UnsignedInteger binNumber_; UnsignedInteger dimension_; BernsteinCopulaFactoryPolicy(const Sample & input, const UnsignedInteger binNumber, Mixture::DistributionCollection & output) : input_(input) , output_(output) , binNumber_(binNumber) , dimension_(input.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const Point nu(input_[i] * binNumber_); Mixture::DistributionCollection atomsKernel(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) atomsKernel[j] = Beta(std::floor(nu[j]) + 1.0, binNumber_ + 1.0, 0.0, 1.0); output_[i] = ComposedDistribution(atomsKernel); } } }; /* end struct BernsteinCopulaFactoryPolicy */ /* Build a Bernstein copula based on the given sample. The bin number is computed according to the inverse power rule */ Distribution BernsteinCopulaFactory::build(const Sample & sample) { return build(sample, computeBinNumber(sample)); } /* Build a Bernstein copula based on the given sample */ Distribution BernsteinCopulaFactory::buildParallel(const Sample & empiricalCopulaSample, const UnsignedInteger binNumber) { const UnsignedInteger size = empiricalCopulaSample.getSize(); Mixture::DistributionCollection atomsMixture(size); BernsteinCopulaFactoryPolicy policy(empiricalCopulaSample, binNumber, atomsMixture); TBB::ParallelFor( 0, size, policy ); Mixture result(atomsMixture); // Here we know that the mixture is a copula even if none of its atoms is. result.isCopula_ = true; return result; } Distribution BernsteinCopulaFactory::buildSequential(const Sample & empiricalCopulaSample, const UnsignedInteger binNumber) { const UnsignedInteger size = empiricalCopulaSample.getSize(); const UnsignedInteger dimension = empiricalCopulaSample.getDimension(); LOGINFO("BernsteinCopulaFactory - Create the resulting Bernstein copula"); Mixture::DistributionCollection atomsMixture(size); for (UnsignedInteger i = 0; i < size; ++i) { const Point nu(empiricalCopulaSample[i] * binNumber); Mixture::DistributionCollection atomsKernel(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) atomsKernel[j] = Beta(std::floor(nu[j]) + 1.0, binNumber + 1.0, 0.0, 1.0); atomsMixture[i] = ComposedDistribution(atomsKernel); } Mixture result(atomsMixture); // Here we know that the mixture is a copula even if none of its atoms is. result.isCopula_ = true; return result; } Distribution BernsteinCopulaFactory::build(const Sample & sample, const UnsignedInteger binNumber) { if (binNumber == 0) throw InvalidDimensionException(HERE) << "Error: the bin number must be positive for the BernsteinCopulaFactory"; const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidDimensionException(HERE) << "Error: cannot build a copula using the Bernstein copula factory based on an empty sample"; const UnsignedInteger dimension = sample.getDimension(); LOGINFO("BernsteinCopulaFactory - Create the empirical copula sample"); const Sample empiricalCopulaSample(sample.rank() * Point(dimension, (1.0 - SpecFunc::ScalarEpsilon) / size)); if (isParallel_) return buildParallel(empiricalCopulaSample, binNumber); return buildSequential(empiricalCopulaSample, binNumber); } /** Parallelization flag accessor */ void BernsteinCopulaFactory::setParallel(const Bool flag) { isParallel_ = flag; } Bool BernsteinCopulaFactory::isParallel() const { return isParallel_; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Beta.cxx000066400000000000000000000316111307543307100233450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Beta distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Beta.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Beta); static const Factory Factory_Beta; /* Default constructor */ Beta::Beta() : ContinuousDistribution() , r_(2.0) , t_(4.0) , a_(-1.0) , b_(1.0) , normalizationFactor_(std::log(0.75)) { setName("Beta"); setDimension(1); computeRange(); } /* Parameters constructor */ Beta::Beta(const Scalar r, const Scalar t, const Scalar a, const Scalar b) : ContinuousDistribution() , r_(0.0) , t_(0.0) , a_(a) , b_(b) , normalizationFactor_(0.0) { setName("Beta"); setA(a); setB(b); setRT(r, t); setDimension(1); computeRange(); } /* Comparison operator */ Bool Beta::operator ==(const Beta & other) const { if (this == &other) return true; return (r_ == other.r_) && (t_ == other.t_) && (a_ == other.a_) && (b_ == other.b_); } Bool Beta::equals(const DistributionImplementation & other) const { const Beta* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Beta::__repr__() const { OSS oss(true); oss << "class=" << Beta::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " r=" << r_ << " t=" << t_ << " a=" << a_ << " b=" << b_; return oss; } String Beta::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(r = " << r_ << ", t = " << t_ << ", a = " << a_ << ", b = " << b_ << ")"; return oss; } /* Virtual constructor */ Beta * Beta::clone() const { return new Beta(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Beta::computeRange() { setRange(Interval(a_, b_)); } /* Update the derivative attributes */ void Beta::update() { isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; normalizationFactor_ = (1.0 - t_) * std::log(b_ - a_) - SpecFunc::LnBeta(r_, t_ - r_); } /* Get one realization of the distribution */ Point Beta::getRealization() const { return Point(1, a_ + (b_ - a_) * DistFunc::rBeta(r_, t_ - r_)); } /* Get the DDF of the distribution */ Point Beta::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return Point(1, 0.0); return Point(1, ((r_ - 1.0) / (x - a_) - (t_ - r_ - 1.0) / (b_ - x)) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar Beta::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x == b_) && (t_ - r_ == 1.0)) return 1.0; if ((x <= a_) || (x >= b_)) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Beta::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x == b_) && (t_ - r_ == 1.0)) return 0.0; if ((x <= a_) || (x >= b_)) return SpecFunc::LogMinScalar; return normalizationFactor_ + (r_ - 1.0) * std::log(x - a_) + (t_ - r_ - 1.0) * std::log(b_ - x); } /* Get the CDF of the distribution */ Scalar Beta::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; return DistFunc::pBeta(r_, t_ - r_, (x - a_) / (b_ - a_)); } /* Get the PDFGradient of the distribution */ Point Beta::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(4, 0.0); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return pdfGradient; const Scalar pdf = computePDF(point); const Scalar psiTR = SpecFunc::Psi(t_ - r_); const Scalar iBA = 1.0 / (b_ - a_); const Scalar BX = b_ - x; const Scalar iBX = 1.0 / BX; const Scalar XA = x - a_; const Scalar iXA = 1.0 / XA; pdfGradient[0] = pdf * (std::log(XA * iBX) + psiTR - SpecFunc::Psi(r_)); pdfGradient[1] = pdf * (std::log(BX * iBA) - psiTR + SpecFunc::Psi(t_)); pdfGradient[2] = pdf * ((t_ - 1.0) * iBA - (r_ - 1.0) * iXA); pdfGradient[3] = pdf * ((t_ - 1.0) * XA * iBA * iBX - r_ * iBX); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Beta::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(4, 0.0); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return cdfGradient; const Scalar cdf = computeCDF(point); const Scalar iBA = 1.0 / (b_ - a_); const Scalar cdfShift = DistFunc::pBeta(r_ + 1.0, t_ - r_ - 1.0, (x - a_) * iBA); const Scalar cdfDiff = cdfShift - cdf; const Scalar factor = r_ * iBA; static const Scalar eps(std::pow(cdfEpsilon_, 1.0 / 3.0)); static const Scalar i2Eps(0.5 / eps); cdfGradient[0] = i2Eps * (DistFunc::pBeta(r_ + eps, t_ - r_ - eps, (x - a_) / (b_ - a_)) - DistFunc::pBeta(r_ - eps, t_ - r_ + eps, (x - a_) / (b_ - a_))); cdfGradient[1] = i2Eps * (DistFunc::pBeta(r_, t_ - r_ + eps, (x - a_) / (b_ - a_)) - DistFunc::pBeta(r_, t_ - r_ - eps, (x - a_) / (b_ - a_))); cdfGradient[3] = factor * cdfDiff; cdfGradient[2] = cdfGradient[3] * (b_ - x) / (x - a_); return cdfGradient; } /* Get the quantile of the distribution */ Scalar Beta::computeScalarQuantile(const Scalar prob, const Bool tail) const { return a_ + (b_ - a_) * DistFunc::qBeta(r_, t_ - r_, prob, tail); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Beta::computeCharacteristicFunction(const Scalar x) const { if (x == 0.0) return 1.0; const Scalar r1 = std::abs(x * r_ / t_); // We have numerical stability issues for large values of r1 if (r1 <= 1.0) return std::exp(Complex(0.0, a_)) * SpecFunc::HyperGeom_1_1(r_, t_, Complex(0.0, (b_ - a_) * x)); return DistributionImplementation::computeCharacteristicFunction(x); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Beta::getRoughness() const { const Scalar den = SpecFunc::Beta(r_, t_ - r_); return SpecFunc::Beta(2.0 * r_ - 1.0, 2.0 * (t_ - r_) - 1.0) / (den * den * (b_ - a_)); } /* Compute the mean of the distribution */ void Beta::computeMean() const { mean_ = Point(1, a_ + (b_ - a_) * r_ / t_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Beta::getStandardDeviation() const { return Point(1, (b_ - a_) / t_ * std::sqrt(r_ * (t_ - r_) / (t_ + 1.0))); } /* Get the skewness of the distribution */ Point Beta::getSkewness() const { return Point(1, 2.0 * (t_ - 2.0 * r_) / (t_ + 2.0) * std::sqrt((t_ + 1.0) / (r_ * (t_ - r_)))); } /* Get the kurtosis of the distribution */ Point Beta::getKurtosis() const { return Point(1, 3.0 * (1.0 + t_) * (2.0 * t_ * t_ + r_ * (t_ - 6.0) * (t_ - r_)) / (r_ * (t_ - r_) * (3.0 + t_) * (2.0 + t_))); } /* Compute the covariance of the distribution */ void Beta::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar eta = (b_ - a_) / t_; covariance_(0, 0) = eta * eta * r_ * (t_ - r_) / (t_ + 1.0); isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Beta::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); // Here we have to convert n to a signed type else -n will produce an overflow const Scalar value = (n % 2 == 0 ? 1.0 : -1.0) * SpecFunc::HyperGeom_2_1(r_, -static_cast(n), t_, 2.0); return Point(1, value); } /* Get the standard representative in the parametric family, associated with the standard moments */ Beta::Implementation Beta::getStandardRepresentative() const { return Beta(r_, t_, -1.0, 1.0).clone(); } /* Parameters value accessor */ Point Beta::getParameter() const { Point point(4); point[0] = r_; point[1] = t_; point[2] = a_; point[3] = b_; return point; } void Beta::setParameter(const Point & parameter) { if (parameter.getSize() != 4) throw InvalidArgumentException(HERE) << "Error: expected 4 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Beta(parameter[0], parameter[1], parameter[2], parameter[3]); setWeight(w); } /* Parameters value and description accessor */ Description Beta::getParameterDescription() const { Description description(4); description[0] = "r"; description[1] = "t"; description[2] = "a"; description[3] = "b"; return description; } /* Check if the distribution is elliptical */ Bool Beta::isElliptical() const { return t_ == 2.0 * r_; } /* R accessor */ void Beta::setR(const Scalar r) { if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "R MUST be positive"; if (t_ <= r) throw InvalidArgumentException(HERE) << "T MUST be greater than r, here t=" << t_ << " and r=" << r; if (r != r_) { r_ = r; update(); } } Scalar Beta::getR() const { return r_; } /* T accessor */ void Beta::setT(const Scalar t) { if (t <= r_) throw InvalidArgumentException(HERE) << "T MUST be greater than r, here t=" << t << " and r=" << r_; if (t != t_) { t_ = t; update(); } } Scalar Beta::getT() const { return t_; } /* RT accessor */ void Beta::setRT(const Scalar r, const Scalar t) { if (!SpecFunc::IsNormal(r)) throw InvalidArgumentException(HERE) << "The first shape parameter must be a real value, here r=" << r; if (!SpecFunc::IsNormal(t)) throw InvalidArgumentException(HERE) << "The second shape parameter must be a real value, here t=" << t; if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "R MUST be positive"; if (!(t > 0.0)) throw InvalidArgumentException(HERE) << "T MUST be positive"; if (t <= r) throw InvalidArgumentException(HERE) << "T MUST be greater than r, here t=" << t << " and r=" << r; if ((r != r_) || (t != t_)) { r_ = r; t_ = t; update(); } } /* A accessor */ void Beta::setA(const Scalar a) { if (!SpecFunc::IsNormal(a)) throw InvalidArgumentException(HERE) << "The lower bound must be a real value, here a=" << a; if (b_ <= a) throw InvalidArgumentException(HERE) << "The lower bound must be less than the upper bound, here a=" << a << " and b=" << b_; if (a != a_) { a_ = a; computeRange(); update(); } } Scalar Beta::getA() const { return a_; } /* B accessor */ void Beta::setB(const Scalar b) { if (!SpecFunc::IsNormal(b)) throw InvalidArgumentException(HERE) << "The upper bound must be a real value, here b=" << b; if (b <= a_) throw InvalidArgumentException(HERE) << "The upper bound must be greater than the lower bound, here a=" << a_ << " and b=" << b; if (b != b_) { b_ = b; computeRange(); update(); } } Scalar Beta::getB() const { return b_; } /* Method save() stores the object through the StorageManager */ void Beta::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "r_", r_ ); adv.saveAttribute( "t_", t_ ); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "b_", b_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Beta::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "r_", r_ ); adv.loadAttribute( "t_", t_ ); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "b_", b_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BetaFactory.cxx000066400000000000000000000066071307543307100247040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Beta distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BetaFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BetaFactory); static const Factory Factory_BetaFactory; /* Default constructor */ BetaFactory::BetaFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ BetaFactory * BetaFactory::clone() const { return new BetaFactory(*this); } /* Here is the interface that all derived class must implement */ BetaFactory::Implementation BetaFactory::build(const Sample & sample) const { return buildAsBeta(sample).clone(); } BetaFactory::Implementation BetaFactory::build(const Point & parameters) const { return buildAsBeta(parameters).clone(); } BetaFactory::Implementation BetaFactory::build() const { return buildAsBeta().clone(); } Beta BetaFactory::buildAsBeta(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Beta distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Beta distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar a = xMin - std::abs(xMin) / (2.0 + size); const Scalar xMax = sample.getMax()[0]; const Scalar b = xMax + std::abs(xMax) / (2.0 + size); if (!SpecFunc::IsNormal(a) || !SpecFunc::IsNormal(b)) throw InvalidArgumentException(HERE) << "Error: cannot build a Beta distribution if data contains NaN or Inf"; if (xMin == xMax) { const Scalar delta = std::max(std::abs(xMin), 100.0) * SpecFunc::ScalarEpsilon; Beta result(1.0, 2.0, xMin - delta, xMax + delta); result.setDescription(sample.getDescription()); return result; } const Scalar mean = sample.computeMean()[0]; const Scalar sigma = sample.computeStandardDeviationPerComponent()[0]; const Scalar t = (b - mean) * (mean - a) / (sigma * sigma) - 1.0; const Scalar r = t * (mean - a) / (b - a); Beta result(r, t, a, b); result.setDescription(sample.getDescription()); return result; } Beta BetaFactory::buildAsBeta(const Point & parameters) const { try { Beta distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Beta distribution from the given parameters"; } } Beta BetaFactory::buildAsBeta() const { return Beta(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BetaMuSigma.cxx000066400000000000000000000137541307543307100246400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Beta distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/BetaFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/BetaMuSigma.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BetaMuSigma); /* Default constructor */ BetaMuSigma::BetaMuSigma() : DistributionParametersImplementation() , mu_(0.5) , sigma_(1 / (2 * sqrt(5.0))) , a_(0.) , b_(1.) { // Nothing to do } BetaMuSigma::BetaMuSigma(const Scalar mu, const Scalar sigma, const Scalar a, const Scalar b) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) , a_(a) , b_(b) { // Nothing to do } /* Virtual constructor */ BetaMuSigma * BetaMuSigma::clone() const { return new BetaMuSigma(*this); } /* Comparison operator */ Bool BetaMuSigma::operator ==(const BetaMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution BetaMuSigma::getDistribution() const { Point newParameters(4); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = a_; newParameters[3] = b_; Point nativeParameters(operator()(newParameters)); return BetaFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix BetaMuSigma::gradient() const { Point newParameters(4); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = a_; newParameters[3] = b_; const Scalar t = operator()(newParameters)[1]; const Scalar mu = mu_; const Scalar sigma = sigma_; const Scalar a = a_; const Scalar b = b_; const Scalar dtdmu = (a + b - 2.0 * mu) / (sigma * sigma); const Scalar dtdsigma = 2.0 * (mu - a) * (mu - b) / (sigma * sigma * sigma); const Scalar dtda = (mu - b) / (sigma * sigma); const Scalar dtdb = (mu - a) / (sigma * sigma); const Scalar drdmu = (t + dtdmu * (mu - a)) / (b - a); const Scalar drdsigma = dtdsigma * (mu - a) / (b - a); const Scalar drda = (a * a - 2.0 * a * b - sigma * sigma - mu * (mu - 2.0 * b)) * (mu - b) / ((b - a) * (b - a) * sigma * sigma); const Scalar drdb = (sigma * sigma + (mu - a) * (mu - a)) * (mu - a) / ((b - a) * (b - a) * sigma * sigma); SquareMatrix nativeParametersGradient(IdentityMatrix(4)); nativeParametersGradient(0, 0) = drdmu; nativeParametersGradient(1, 0) = drdsigma; nativeParametersGradient(2, 0) = drda; nativeParametersGradient(3, 0) = drdb; nativeParametersGradient(0, 1) = dtdmu; nativeParametersGradient(1, 1) = dtdsigma; nativeParametersGradient(2, 1) = dtda; nativeParametersGradient(3, 1) = dtdb; return nativeParametersGradient; } /* Conversion operator */ Point BetaMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 4) throw InvalidArgumentException(HERE) << "the given point must have dimension=4, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; const Scalar a = inP[2]; const Scalar b = inP[3]; const Scalar t = (b - mu) * (mu - a) / (sigma * sigma) - 1.0; const Scalar r = t * (mu - a) / (b - a); Point nativeParameters(inP); nativeParameters[0] = r; nativeParameters[1] = t; return nativeParameters; } Point BetaMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 4) throw InvalidArgumentException(HERE) << "the given point must have dimension=4, here dimension=" << inP.getDimension(); const Scalar r = inP[0]; const Scalar t = inP[1]; const Scalar a = inP[2]; const Scalar b = inP[3]; if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "R MUST be positive"; if (!(t > 0.0)) throw InvalidArgumentException(HERE) << "T MUST be positive"; if (t <= r) throw InvalidArgumentException(HERE) << "T MUST be greater than r, here t=" << t << " and r=" << r; const Scalar mu = a + (b - a) * r / t; const Scalar sigma = (b - a) / t * std::sqrt(r * (t - r) / (t + 1.0)); Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void BetaMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 4) throw InvalidArgumentException(HERE) << "the given point must have dimension=4, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; a_ = inP[2]; b_ = inP[3]; } Point BetaMuSigma::getValues() const { Point point(4); point[0] = mu_; point[1] = sigma_; point[2] = a_; point[3] = b_; return point; } Description BetaMuSigma::getDescription() const { Description description(4); description[0] = "mu"; description[1] = "sigma"; description[2] = "a"; description[3] = "b"; return description; } /* Check if the distribution is elliptical */ Bool BetaMuSigma::isElliptical() const { return b_ == 2.0 * mu_ - a_; } /* String converter */ String BetaMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_ << " a=" << a_ << " b=" << b_; return oss; } String BetaMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ", a = " << a_ << ", b = " << b_ << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Binomial.cxx000066400000000000000000000274371307543307100242370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Binomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Binomial.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Binomial); static const Factory Factory_Binomial; /* Default constructor */ Binomial::Binomial() : DiscreteDistribution(), n_(1), p_(0.5) { setName( "Binomial" ); // We set the dimension of the Binomial distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ Binomial::Binomial(const UnsignedInteger n, const Scalar p) : DiscreteDistribution(), n_(n), p_(-1.0) { setName( "Binomial" ); // This call sets also the range setP(p); // We set the dimension of the Binomial distribution setDimension( 1 ); } /* Comparison operator */ Bool Binomial::operator ==(const Binomial & other) const { if (this == &other) return true; return (n_ == other.n_) && (p_ == other.p_); } Bool Binomial::equals(const DistributionImplementation & other) const { const Binomial* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Binomial::__repr__() const { OSS oss; oss << "class=" << Binomial::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " n=" << n_ << " p=" << p_; return oss; } String Binomial::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(n = " << n_ << ", p = " << p_ << ")"; return oss; } /* Virtual constructor */ Binomial * Binomial::clone() const { return new Binomial(*this); } /* Get one realization of the distribution */ Point Binomial::getRealization() const { return Point(1, DistFunc::rBinomial(n_, p_)); } /* Get the PDF of the distribution */ Scalar Binomial::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_) || (k > n_ + supportEpsilon_)) return 0.0; return std::exp(SpecFunc::LnGamma(n_ + 1.0) - SpecFunc::LnGamma(n_ - k + 1.0) - SpecFunc::LnGamma(k + 1.0) + k * std::log(p_) + (n_ - k) * log1p(-p_)); } /* Get the CDF of the distribution */ Scalar Binomial::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 0.0; if (k > n_ - supportEpsilon_) return 1.0; // Complementary relation for incomplete regularized Beta function: I(a, b, x) = 1 - I(b, a, 1-x) return DistFunc::pBeta(n_ - floor(k), floor(k) + 1, 1.0 - p_); } Scalar Binomial::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 1.0; if (k > n_ + supportEpsilon_) return 0.0; // Complementary relation for incomplete regularized Beta function: I(a, b, x) = 1 - I(b, a, 1-x) Scalar value = DistFunc::pBeta(floor(k) + 1, n_ - floor(k), p_); return value; } /* Get the PDF gradient of the distribution */ Point Binomial::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; Point pdfGradient(1, 0.0); if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return pdfGradient; throw NotYetImplementedException(HERE) << "In Binomial::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point Binomial::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return Point(1, 0.0); throw NotYetImplementedException(HERE) << "In Binomial::computeCDFGradient(const Point & point) const"; } /* Compute the mean of the distribution */ void Binomial::computeMean() const { mean_ = Point(1, n_ * p_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Binomial::getStandardDeviation() const { return Point(1, std::sqrt(n_ * p_ * (1.0 - p_))); } /* Get the skewness of the distribution */ Point Binomial::getSkewness() const { if ((p_ == 0.0) || (p_ == 1.0)) throw NotDefinedException(HERE) << "Error: the skewness is not defined for the Binomial distribution when p is zero or one."; return Point(1, (1.0 - 2.0 * p_) / std::sqrt(n_ * p_ * (1.0 - p_))); } /* Get the kurtosis of the distribution */ Point Binomial::getKurtosis() const { if ((p_ == 0.0) || (p_ == 1.0)) throw NotDefinedException(HERE) << "Error: the kurtosis is not defined for the Binomial distribution when p is zero or one."; return Point(1, 3.0 - 6.0 / n_ + 1.0 / (n_ * p_ * (1.0 - p_))); } /* Compute the covariance of the distribution */ void Binomial::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = n_ * p_ * (1.0 - p_); isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Binomial::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 0.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (std::min(floor(interval.getUpperBound()[0]), Scalar(n_))); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value accessor */ Point Binomial::getParameter() const { Point point(2); point[0] = n_; point[1] = p_; return point; } void Binomial::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Binomial(static_cast(parameter[0]), parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Binomial::getParameterDescription() const { Description description(2); description[0] = "n"; description[1] = "p"; return description; } /* Check if the distribution is elliptical */ Bool Binomial::isElliptical() const { return p_ == 0.5; } /* P accessor */ void Binomial::setP(const Scalar p) { if ((p < 0.0) || (p > 1.0)) throw InvalidArgumentException(HERE) << "P must be in [0, 1], here p=" << p; if (p != p_) { p_ = p; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* P accessor */ Scalar Binomial::getP() const { return p_; } /* N accessor */ void Binomial::setN(const UnsignedInteger n) { if (n != n_) { n_ = n; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* N accessor */ UnsignedInteger Binomial::getN() const { return n_; } /* Compute the numerical range of the distribution given the parameters values */ void Binomial::computeRange() { // Degenerate cases if (p_ == 0.0) setRange(Interval(0.0, 0.0)); if (p_ == 1.0) setRange(Interval(n_, n_)); // Usual case setRange(Interval(0.0, n_)); } /* Get the quantile of the distribution */ Scalar Binomial::computeScalarQuantile(const Scalar prob, const Bool tail) const { LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, prob=" << prob << ", tail=" << (tail ? "true" : "false")); if (prob <= 0.0) return (tail ? n_ : 0.0); if (prob >= 1.0) return (tail ? 0.0 : n_); // Initialization by the Cornish-Fisher expansion Scalar qNorm = DistFunc::qNormal(prob, tail); Scalar gamma1 = getSkewness()[0]; Scalar gamma2 = getKurtosis()[0] - 3.0; Scalar quantile = round(getMean()[0] + getStandardDeviation()[0] * (qNorm + (qNorm * qNorm - 1.0) * gamma1 / 6.0 + qNorm * (qNorm * qNorm - 3.0) * gamma2 / 24.0 - qNorm * (2.0 * qNorm * qNorm - 5.0) * gamma1 * gamma1 / 36.0)); if (quantile < 0.0) quantile = 0.0; if (quantile > n_) quantile = n_; // CDF of the guess Scalar cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, Cornish-Fisher estimate=" << quantile << ", cdf=" << cdf); Scalar oldCDF = cdf; const Scalar step = tail ? -1.0 : 1.0; // Do we have to while (cdf >= prob) { quantile -= step; oldCDF = cdf; cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, backward search, quantile=" << quantile << ", cdf=" << cdf); } // If if (cdf < oldCDF) { quantile += step; LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, final quantile=" << quantile); return quantile; } while (cdf < prob) { quantile += step; cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, forward search, quantile=" << quantile << ", cdf=" << cdf); } LOGDEBUG(OSS() << "in Binomial::computeScalarQuantile, final quantile=" << quantile); return quantile; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Binomial::computeCharacteristicFunction(const Scalar x) const { const Complex value(1.0 - p_ + p_ * std::exp(Complex(0.0, x))); return std::pow(value, n_); } Complex Binomial::computeLogCharacteristicFunction(const Scalar x) const { const Complex value(1.0 - p_ + p_ * std::exp(Complex(0.0, x))); return Scalar(n_) * std::log(value); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Binomial::computeGeneratingFunction(const Complex & z) const { const Complex value(1.0 - p_ + p_ * z); return std::pow(value, n_); } Complex Binomial::computeLogGeneratingFunction(const Complex & z) const { const Complex value(1.0 - p_ + p_ * z); return Complex(n_) * std::log(value); } /* Method save() stores the object through the StorageManager */ void Binomial::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "n_", n_ ); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void Binomial::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "n_", n_ ); adv.loadAttribute( "p_", p_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BinomialFactory.cxx000066400000000000000000000135041307543307100255550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Binomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BinomialFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BinomialFactory); static const Factory Factory_BinomialFactory; /* Default constructor */ BinomialFactory::BinomialFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ BinomialFactory * BinomialFactory::clone() const { return new BinomialFactory(*this); } /* Here is the interface that all derived class must implement */ BinomialFactory::Implementation BinomialFactory::build(const Sample & sample) const { return buildAsBinomial(sample).clone(); } BinomialFactory::Implementation BinomialFactory::build(const Point & parameters) const { return buildAsBinomial(parameters).clone(); } BinomialFactory::Implementation BinomialFactory::build() const { return buildAsBinomial().clone(); } Binomial BinomialFactory::buildAsBinomial(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Binomial distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Binomial distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar mean = 0.0; Scalar var = 0.0; Scalar sum = 0.0; UnsignedInteger upperBound = 0; const Scalar supportEpsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = sample[i][0]; const int iX(static_cast(round(x))); // The sample must be made of nonnegative integral values if (!(std::abs(x - iX) <= supportEpsilon) || (iX < 0)) throw InvalidArgumentException(HERE) << "Error: can build a Binomial distribution only from a sample made of nonnegative integers, here x=" << x; // Update the upper bound if (iX > static_cast(upperBound)) upperBound = iX; var = i * var / (i + 1.0) + (1.0 - 1.0 / (i + 1.0)) * (mean - x) * (mean - x) / (i + 1.0); mean = (x + i * mean) / (i + 1.0); sum += x; } // Quick exit if sum == 0 if (sum == 0) return Binomial(1, 0.0); // Loop to maximize the likelihood // First guess for the parameter n, based on moment estimate // mean = np // var = np(1-p) // p = 1.0 - var / mean UnsignedInteger n = upperBound; Scalar p = mean / n; if (mean > var) n = std::max(upperBound, (UnsignedInteger)round(mean * mean / (mean - var))); // Loop over n to get the maximum likelihood // First, compute the likelihood resulting from the first estimate Scalar logLikelihood = ComputeLogLikelihood(n, p, sample); Scalar maxLogLikelihood = logLikelihood; UnsignedInteger maxN = n; // Check if we have to try the backward direction int step(1); if (n > upperBound) { n -= step; p = mean / n; logLikelihood = ComputeLogLikelihood(n, p, sample); // If the first step increased the logLikelihood we go backward if (logLikelihood > maxLogLikelihood) { // Backward step = -1; maxN = n; maxLogLikelihood = logLikelihood; } // Forward, restore n else n += step; } // Loop over n Bool loop = true; while (loop) { n += step; p = mean / n; logLikelihood = ComputeLogLikelihood(n, p, sample); // Loop while the logLikelihood is increasing loop = (logLikelihood > maxLogLikelihood); if (loop) { maxN = n; maxLogLikelihood = logLikelihood; } // Check that we don't go too far when in the backward direction if (step < 0) loop = loop && (n > upperBound); } Binomial result(maxN, mean / maxN); result.setDescription(sample.getDescription()); return result; } Scalar BinomialFactory::ComputeLogLikelihood(const UnsignedInteger n, const Scalar p, const Sample & sample) { std::map logLikelihoodCache; const UnsignedInteger size = sample.getSize(); const Scalar logNFactorial = SpecFunc::LnGamma(n + 1.0); const Scalar logP = std::log(p); const Scalar logQ = log1p(-p); Scalar logLikelihood = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger k = static_cast(round(sample[i][0])); if (logLikelihoodCache.find(k) == logLikelihoodCache.end()) logLikelihoodCache[k] = logNFactorial - SpecFunc::LnGamma(n - k + 1.0) - SpecFunc::LnGamma(k + 1.0) + k * logP + (n - k) * logQ; logLikelihood += logLikelihoodCache[k]; } return logLikelihood; } Binomial BinomialFactory::buildAsBinomial(const Point & parameters) const { try { Binomial distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Binomial distribution from the given parameters"; } } Binomial BinomialFactory::buildAsBinomial() const { return Binomial(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Burr.cxx000066400000000000000000000216401307543307100234050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Burr distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published bydistributiolib * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Burr.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Burr); static const Factory Factory_Burr; /* Default constructor */ Burr::Burr() : ContinuousDistribution() , c_(1.0) , k_(1.0) { setName( "Burr" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Burr::Burr(const Scalar c, const Scalar k) : ContinuousDistribution() , c_(c) , k_(0.) { setName( "Burr" ); // We set the dimension of the Burr distribution setDimension( 1 ); setC(c); // calls computeRange setK(k); } /* Comparison operator */ Bool Burr::operator ==(const Burr & other) const { if (this == &other) return true; return (c_ == other.c_) && (k_ == other.k_); } Bool Burr::equals(const DistributionImplementation & other) const { const Burr* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Burr::__repr__() const { OSS oss; oss << "class=" << Burr::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " c=" << c_ << " k=" << k_; return oss; } String Burr::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(c = " << c_ << ", k = " << k_ << ")"; return oss; } /* Virtual constructor */ Burr * Burr::clone() const { return new Burr(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Burr::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Burr::getRealization() const { return Point(1, computeScalarQuantile(RandomGenerator::Generate())); } /* Get the DDF of the distribution */ Point Burr::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return Point(1, 0.0); const Scalar xC = std::pow(x, c_); return Point(1, -(xC * (c_ * k_ + 1.0) + 1.0 - c_) * computePDF(x) / (x * (1.0 + xC))); } /* Get the PDF of the distribution */ Scalar Burr::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Burr::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; const Scalar logX = std::log(x); return std::log(c_ * k_) + (c_ - 1.0) * logX - (k_ + 1.0) * log1p(std::exp(c_ * logX)); } /* Get the CDF of the distribution */ Scalar Burr::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return -expm1(-k_ * log1p(std::exp(c_ * std::log(x)))); } /* Get the PDFGradient of the distribution */ Point Burr::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point pdfGradient(2, 0.0); if (x <= 0.0) return pdfGradient; const Scalar pdf = computePDF(point); const Scalar logX = std::log(x); pdfGradient[0] = ((1.0 - (1.0 + k_) / (1.0 + std::exp(-c_ * logX))) * logX + 1.0 / c_) * pdf; pdfGradient[1] = (1.0 / k_ - log1p(std::pow(x, c_))) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Burr::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point cdfGradient(2, 0.0); if (x <= 0.0) return cdfGradient; const Scalar cdfC = computeComplementaryCDF(point); const Scalar xC = std::pow(x, c_); cdfGradient[0] = k_ * xC * std::log(x) * cdfC / (1.0 + xC); cdfGradient[1] = log1p(xC) * cdfC; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Burr::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return std::exp(std::log(expm1(-std::log(prob) / k_)) / c_); return std::exp(std::log(expm1(-log1p(-prob) / k_)) / c_); } /* Compute the mean of the distribution */ void Burr::computeMean() const { mean_ = getStandardMoment(1); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Burr::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point Burr::getSkewness() const { const Scalar mu = getMean()[0]; const Scalar sigma = getStandardDeviation()[0]; return Point(1, (getStandardMoment(3)[0] - 3.0 * mu * sigma * sigma - mu * mu * mu) / (sigma * sigma * sigma)); } /* Get the kurtosis of the distribution */ Point Burr::getKurtosis() const { const Scalar mu = getMean()[0]; const Scalar sigma = getStandardDeviation()[0]; return Point(1, (getStandardMoment(4)[0] - 4.0 * mu * getStandardMoment(3)[0] + 6.0 * sigma * sigma * mu * mu + 3.0 * mu * mu * mu * mu) / (sigma * sigma * sigma * sigma)); } /* Compute the covariance of the distribution */ void Burr::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = getStandardMoment(2)[0] - std::pow(getMean()[0], 2); isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Burr::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(SpecFunc::LogGamma(k_ - n / c_) + SpecFunc::LogGamma(n / c_ + 1.0) - SpecFunc::LogGamma(k_))); } /* Parameters value accessor */ Point Burr::getParameter() const { Point point(2); point[0] = c_; point[1] = k_; return point; } void Burr::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Burr(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Burr::getParameterDescription() const { Description description(2); description[0] = "c"; description[1] = "k"; return description; } /* C accessor */ void Burr::setC(const Scalar c) { if (!(c > 0.0)) throw InvalidArgumentException(HERE) << "C MUST be positive"; if (c_ != c) { c_ = c; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* C accessor */ Scalar Burr::getC() const { return c_; } /* K accessor */ void Burr::setK(const Scalar k) { if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (k_ != k) { k_ = k; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* K accessor */ Scalar Burr::getK() const { return k_; } /* Method save() stores the object through the StorageManager */ void Burr::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "c_", c_ ); adv.saveAttribute( "k_", k_ ); } /* Method load() reloads the object from the StorageManager */ void Burr::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "c_", c_ ); adv.loadAttribute( "k_", k_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/BurrFactory.cxx000066400000000000000000000124131307543307100247330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Burr distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/BurrFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(BurrFactory); static const Factory Factory_BurrFactory; /* Default constructor */ BurrFactory::BurrFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ BurrFactory * BurrFactory::clone() const { return new BurrFactory(*this); } struct BurrFactoryParameterConstraint { /** Constructor from a sample and a derivative factor estimate */ BurrFactoryParameterConstraint(const Sample & sample): sample_(sample) { // Nothing to do }; Point computeConstraint(const Point & parameter) const { const Scalar c = parameter[0]; if (!(c > 0.0)) throw InvalidArgumentException(HERE) << "Error: the c parameter must be positive."; const UnsignedInteger size = sample_.getSize(); /* \sum_{i=1}^N \log(1 + x_i^c) */ Scalar sumLogXC = 0.0; /* \sum_{i=1}^N \frac{\log(x_i)}{1+x_i^c} */ Scalar sumRatio = 0.0; /* \sum_{i=1}^N \frac{x_i^c\log(x_i)}{1+x_i^c} */ Scalar sumScaledRatio = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = sample_[i][0]; const Scalar xC = std::pow(x , c); const Scalar logX = std::log(x); const Scalar ratio = logX / (1.0 + xC); sumRatio += ratio; sumScaledRatio += xC * ratio; sumLogXC += log1p(xC); } /* MLE second parameter */ const Scalar k = size / sumLogXC; if (!SpecFunc::IsNormal(k)) throw InvalidArgumentException(HERE) << "Error: cannot estimate the k parameter"; /* MLE equation first parameter */ const Scalar relation = 1.0 + (c / size) * (sumRatio - k * sumScaledRatio); return Point(1, relation); } const Sample & sample_; }; /* Here is the interface that all derived class must implement */ BurrFactory::Implementation BurrFactory::build(const Sample & sample) const { return buildAsBurr(sample).clone(); } BurrFactory::Implementation BurrFactory::build(const Point & parameters) const { return buildAsBurr(parameters).clone(); } BurrFactory::Implementation BurrFactory::build() const { return buildAsBurr().clone(); } Burr BurrFactory::buildAsBurr(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Burr distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Burr distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); if (!(sample.getMin()[0] > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a Burr distribution based on a sample with nonpositive values."; BurrFactoryParameterConstraint constraint(sample); const Function f(bindMethod(constraint, &BurrFactoryParameterConstraint::computeConstraint, 1, 1)); // Find a bracketing interval Scalar a = 1.0; Scalar b = 2.0; Scalar fA = f(Point(1, a))[0]; Scalar fB = f(Point(1, b))[0]; // While f has the same sign at the two bounds, update the interval while ((fA * fB > 0.0)) { a = 0.5 * a; fA = f(Point(1, a))[0]; if (fA * fB <= 0.0) break; b = 2.0 * b; fB = f(Point(1, b))[0]; } // Solve the constraint equation Brent solver(ResourceMap::GetAsScalar( "BurrFactory-AbsolutePrecision" ), ResourceMap::GetAsScalar( "BurrFactory-RelativePrecision" ), ResourceMap::GetAsScalar( "BurrFactory-ResidualPrecision" ), ResourceMap::GetAsUnsignedInteger( "BurrFactory-MaximumIteration" )); // C estimate const Scalar c = solver.solve(f, 0.0, a, b, fA, fB); // Corresponding k estimate Scalar sumLogXC = 0.0; for (UnsignedInteger i = 0; i < size; ++i) sumLogXC += log1p(std::pow(sample[i][0], c)); const Scalar k = size / sumLogXC; Burr result(c, k); result.setDescription(sample.getDescription()); return result; } Burr BurrFactory::buildAsBurr(const Point & parameters) const { try { Burr distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Burr distribution from the given parameters"; } } Burr BurrFactory::buildAsBurr() const { return Burr(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/CMakeLists.txt000066400000000000000000000275311307543307100245140ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (AliMikhailHaqCopula.cxx) ot_add_source_file (AliMikhailHaqCopulaFactory.cxx) ot_add_source_file (Arcsine.cxx) ot_add_source_file (ArcsineFactory.cxx) ot_add_source_file (ArcsineMuSigma.cxx) ot_add_source_file (Bernoulli.cxx) ot_add_source_file (BernoulliFactory.cxx) ot_add_source_file (BernsteinCopulaFactory.cxx) ot_add_source_file (Beta.cxx) ot_add_source_file (BetaFactory.cxx) ot_add_source_file (BetaMuSigma.cxx) ot_add_source_file (Binomial.cxx) ot_add_source_file (BinomialFactory.cxx) ot_add_source_file (Burr.cxx) ot_add_source_file (BurrFactory.cxx) ot_add_source_file (Chi.cxx) ot_add_source_file (ChiFactory.cxx) ot_add_source_file (ChiSquare.cxx) ot_add_source_file (ChiSquareFactory.cxx) ot_add_source_file (ClaytonCopula.cxx) ot_add_source_file (ClaytonCopulaFactory.cxx) ot_add_source_file (ComposedCopula.cxx) ot_add_source_file (ComposedDistribution.cxx) ot_add_source_file (CompositeDistribution.cxx) ot_add_source_file (ConditionalDistribution.cxx) ot_add_source_file (CumulativeDistributionNetwork.cxx) ot_add_source_file (BayesDistribution.cxx) ot_add_source_file (Dirac.cxx) ot_add_source_file (DiracFactory.cxx) ot_add_source_file (Dirichlet.cxx) ot_add_source_file (DirichletFactory.cxx) ot_add_source_file (DistFunc.cxx) ot_add_source_file (Epanechnikov.cxx) ot_add_source_file (Exponential.cxx) ot_add_source_file (ExponentialFactory.cxx) ot_add_source_file (FarlieGumbelMorgensternCopula.cxx) ot_add_source_file (FarlieGumbelMorgensternCopulaFactory.cxx) ot_add_source_file (FisherSnedecor.cxx) ot_add_source_file (FisherSnedecorFactory.cxx) ot_add_source_file (FrankCopula.cxx) ot_add_source_file (FrankCopulaFactory.cxx) ot_add_source_file (Frechet.cxx) ot_add_source_file (Gamma.cxx) ot_add_source_file (GammaFactory.cxx) ot_add_source_file (GammaMuSigma.cxx) ot_add_source_file (GeneralizedExtremeValue.cxx) ot_add_source_file (GeneralizedPareto.cxx) ot_add_source_file (GeneralizedParetoFactory.cxx) ot_add_source_file (Geometric.cxx) ot_add_source_file (GeometricFactory.cxx) ot_add_source_file (GumbelCopula.cxx) ot_add_source_file (GumbelCopulaFactory.cxx) ot_add_source_file (Gumbel.cxx) ot_add_source_file (GumbelFactory.cxx) ot_add_source_file (GumbelAB.cxx) ot_add_source_file (GumbelMuSigma.cxx) ot_add_source_file (Histogram.cxx) ot_add_source_file (HistogramFactory.cxx) ot_add_source_file (IndependentCopula.cxx) ot_add_source_file (InverseChiSquare.cxx) ot_add_source_file (InverseGamma.cxx) ot_add_source_file (InverseNormal.cxx) ot_add_source_file (InverseNormalFactory.cxx) ot_add_source_file (InverseWishart.cxx) ot_add_source_file (KFactorFunctions.cxx) ot_add_source_file (KPermutationsDistribution.cxx) ot_add_source_file (KernelMixture.cxx) ot_add_source_file (KernelSmoothing.cxx) ot_add_source_file (KolmogorovSmirnovDist.c) ot_add_source_file (Laplace.cxx) ot_add_source_file (LaplaceFactory.cxx) ot_add_source_file (Logistic.cxx) ot_add_source_file (LogisticFactory.cxx) ot_add_source_file (LogNormal.cxx) ot_add_source_file (LogNormalFactory.cxx) ot_add_source_file (LogNormalMuSigma.cxx) ot_add_source_file (LogNormalMuSigmaOverMu.cxx) ot_add_source_file (LogUniform.cxx) ot_add_source_file (LogUniformFactory.cxx) ot_add_source_file (MarginalDistribution.cxx) ot_add_source_file (MaximumDistribution.cxx) ot_add_source_file (MaximumEntropyOrderStatisticsDistribution.cxx) ot_add_source_file (MaximumEntropyOrderStatisticsCopula.cxx) ot_add_source_file (MaximumLikelihoodFactory.cxx) ot_add_source_file (MeixnerDistribution.cxx) ot_add_source_file (MeixnerDistributionFactory.cxx) ot_add_source_file (MethodOfMomentsFactory.cxx) ot_add_source_file (MinCopula.cxx) ot_add_source_file (Mixture.cxx) ot_add_source_file (Multinomial.cxx) ot_add_source_file (MultinomialFactory.cxx) ot_add_source_file (NegativeBinomial.cxx) ot_add_source_file (NegativeBinomialFactory.cxx) ot_add_source_file (NonCentralChiSquare.cxx) ot_add_source_file (NonCentralStudent.cxx) ot_add_source_file (Normal2DCDF.cxx) ot_add_source_file (Normal3DCDF.cxx) ot_add_source_file (NormalCopula.cxx) ot_add_source_file (NormalCopulaFactory.cxx) ot_add_source_file (Normal.cxx) ot_add_source_file (NormalFactory.cxx) ot_add_source_file (NormalGamma.cxx) ot_add_source_file (OrderStatisticsMarginalChecker.cxx) ot_add_source_file (OrdinalSumCopula.cxx) ot_add_source_file (ParametrizedDistribution.cxx) ot_add_source_file (Poisson.cxx) ot_add_source_file (PoissonFactory.cxx) ot_add_source_file (PosteriorDistribution.cxx) ot_add_source_file (ProductDistribution.cxx) ot_add_source_file (RandomMixture.cxx) ot_add_source_file (RatioDistribution.cxx) ot_add_source_file (Rayleigh.cxx) ot_add_source_file (RayleighFactory.cxx) ot_add_source_file (Rice.cxx) ot_add_source_file (RiceFactory.cxx) ot_add_source_file (Skellam.cxx) ot_add_source_file (SkellamFactory.cxx) ot_add_source_file (Student.cxx) ot_add_source_file (StudentFunctions.cxx) ot_add_source_file (StudentFactory.cxx) ot_add_source_file (TracyWidomGOE.cxx) ot_add_source_file (TracyWidomGSE.cxx) ot_add_source_file (TracyWidomGUE.cxx) ot_add_source_file (Trapezoidal.cxx) ot_add_source_file (TrapezoidalFactory.cxx) ot_add_source_file (Triangular.cxx) ot_add_source_file (TriangularFactory.cxx) ot_add_source_file (TruncatedDistribution.cxx) ot_add_source_file (TruncatedNormal.cxx) ot_add_source_file (TruncatedNormalFactory.cxx) ot_add_source_file (Uniform.cxx) ot_add_source_file (UniformFactory.cxx) ot_add_source_file (UserDefined.cxx) ot_add_source_file (UserDefinedFactory.cxx) ot_add_source_file (VonMises.cxx) ot_add_source_file (Weibull.cxx) ot_add_source_file (WeibullFactory.cxx) ot_add_source_file (WeibullMuSigma.cxx) ot_add_source_file (Wishart.cxx) ot_add_source_file (ZipfMandelbrot.cxx) ot_install_header_file (AliMikhailHaqCopula.hxx) ot_install_header_file (AliMikhailHaqCopulaFactory.hxx) ot_install_header_file (Arcsine.hxx) ot_install_header_file (ArcsineFactory.hxx) ot_install_header_file (ArcsineMuSigma.hxx) ot_install_header_file (Bernoulli.hxx) ot_install_header_file (BernoulliFactory.hxx) ot_install_header_file (BernsteinCopulaFactory.hxx) ot_install_header_file (Beta.hxx) ot_install_header_file (BetaFactory.hxx) ot_install_header_file (BetaMuSigma.hxx) ot_install_header_file (Binomial.hxx) ot_install_header_file (BinomialFactory.hxx) ot_install_header_file (Burr.hxx) ot_install_header_file (BurrFactory.hxx) ot_install_header_file (Chi.hxx) ot_install_header_file (ChiFactory.hxx) ot_install_header_file (ChiSquare.hxx) ot_install_header_file (ChiSquareFactory.hxx) ot_install_header_file (ClaytonCopula.hxx) ot_install_header_file (ClaytonCopulaFactory.hxx) ot_install_header_file (ComposedCopula.hxx) ot_install_header_file (ComposedDistribution.hxx) ot_install_header_file (CompositeDistribution.hxx) ot_install_header_file (ConditionalDistribution.hxx) ot_install_header_file (CumulativeDistributionNetwork.hxx) ot_install_header_file (BayesDistribution.hxx) ot_install_header_file (DiracFactory.hxx) ot_install_header_file (Dirac.hxx) ot_install_header_file (DirichletFactory.hxx) ot_install_header_file (Dirichlet.hxx) ot_install_header_file (DistFunc.hxx) ot_install_header_file (Epanechnikov.hxx) ot_install_header_file (ExponentialFactory.hxx) ot_install_header_file (Exponential.hxx) ot_install_header_file (FarlieGumbelMorgensternCopula.hxx) ot_install_header_file (FarlieGumbelMorgensternCopulaFactory.hxx) ot_install_header_file (FisherSnedecor.hxx) ot_install_header_file (FisherSnedecorFactory.hxx) ot_install_header_file (FrankCopula.hxx) ot_install_header_file (FrankCopulaFactory.hxx) ot_install_header_file (Frechet.hxx) ot_install_header_file (GammaFactory.hxx) ot_install_header_file (Gamma.hxx) ot_install_header_file (GammaMuSigma.hxx) ot_install_header_file (GeneralizedExtremeValue.hxx) ot_install_header_file (GeneralizedParetoFactory.hxx) ot_install_header_file (GeneralizedPareto.hxx) ot_install_header_file (GeometricFactory.hxx) ot_install_header_file (Geometric.hxx) ot_install_header_file (GumbelCopulaFactory.hxx) ot_install_header_file (GumbelCopula.hxx) ot_install_header_file (GumbelFactory.hxx) ot_install_header_file (Gumbel.hxx) ot_install_header_file (GumbelAB.hxx) ot_install_header_file (GumbelMuSigma.hxx) ot_install_header_file (HistogramFactory.hxx) ot_install_header_file (Histogram.hxx) ot_install_header_file (IndependentCopula.hxx) ot_install_header_file (InverseChiSquare.hxx) ot_install_header_file (InverseGamma.hxx) ot_install_header_file (InverseNormal.hxx) ot_install_header_file (InverseNormalFactory.hxx) ot_install_header_file (InverseWishart.hxx) ot_install_header_file (KFactorFunctions.hxx) ot_install_header_file (KPermutationsDistribution.hxx) ot_install_header_file (KernelMixture.hxx) ot_install_header_file (KernelSmoothing.hxx) ot_install_header_file (LaplaceFactory.hxx) ot_install_header_file (Laplace.hxx) ot_install_header_file (LogisticFactory.hxx) ot_install_header_file (Logistic.hxx) ot_install_header_file (LogNormalFactory.hxx) ot_install_header_file (LogNormal.hxx) ot_install_header_file (LogNormalMuSigma.hxx) ot_install_header_file (LogNormalMuSigmaOverMu.hxx) ot_install_header_file (LogUniform.hxx) ot_install_header_file (LogUniformFactory.hxx) ot_install_header_file (MarginalDistribution.hxx) ot_install_header_file (MaximumDistribution.hxx) ot_install_header_file (MaximumEntropyOrderStatisticsDistribution.hxx) ot_install_header_file (MaximumEntropyOrderStatisticsCopula.hxx) ot_install_header_file (MaximumLikelihoodFactory.hxx) ot_install_header_file (MeixnerDistribution.hxx) ot_install_header_file (MeixnerDistributionFactory.hxx) ot_install_header_file (MethodOfMomentsFactory.hxx) ot_install_header_file (MinCopula.hxx) ot_install_header_file (Mixture.hxx) ot_install_header_file (MultinomialFactory.hxx) ot_install_header_file (Multinomial.hxx) ot_install_header_file (NegativeBinomial.hxx) ot_install_header_file (NegativeBinomialFactory.hxx) ot_install_header_file (NonCentralChiSquare.hxx) ot_install_header_file (NonCentralStudent.hxx) ot_install_header_file (Normal2DCDF.hxx) ot_install_header_file (Normal3DCDF.hxx) ot_install_header_file (NormalCopulaFactory.hxx) ot_install_header_file (NormalCopula.hxx) ot_install_header_file (NormalFactory.hxx) ot_install_header_file (Normal.hxx) ot_install_header_file (NormalGamma.hxx) ot_install_header_file (OrderStatisticsMarginalChecker.hxx) ot_install_header_file (OrdinalSumCopula.hxx) ot_install_header_file (OTDistribution.hxx) ot_install_header_file (ParametrizedDistribution.hxx) ot_install_header_file (PoissonFactory.hxx) ot_install_header_file (Poisson.hxx) ot_install_header_file (PosteriorDistribution.hxx) ot_install_header_file (ProductDistribution.hxx) ot_install_header_file (RandomMixture.hxx) ot_install_header_file (RatioDistribution.hxx) ot_install_header_file (RayleighFactory.hxx) ot_install_header_file (Rayleigh.hxx) ot_install_header_file (Rice.hxx) ot_install_header_file (RiceFactory.hxx) ot_install_header_file (SkellamFactory.hxx) ot_install_header_file (Skellam.hxx) ot_install_header_file (StudentFactory.hxx) ot_install_header_file (Student.hxx) ot_install_header_file (StudentFunctions.hxx) ot_install_header_file (TracyWidomGOE.hxx) ot_install_header_file (TracyWidomGSE.hxx) ot_install_header_file (TracyWidomGUE.hxx) ot_install_header_file (TrapezoidalFactory.hxx) ot_install_header_file (Trapezoidal.hxx) ot_install_header_file (TriangularFactory.hxx) ot_install_header_file (Triangular.hxx) ot_install_header_file (TruncatedDistribution.hxx) ot_install_header_file (TruncatedNormalFactory.hxx) ot_install_header_file (TruncatedNormal.hxx) ot_install_header_file (UniformFactory.hxx) ot_install_header_file (Uniform.hxx) ot_install_header_file (UserDefinedFactory.hxx) ot_install_header_file (UserDefined.hxx) ot_install_header_file (VonMises.hxx) ot_install_header_file (WeibullFactory.hxx) ot_install_header_file (Weibull.hxx) ot_install_header_file (WeibullMuSigma.hxx) ot_install_header_file (Wishart.hxx) ot_install_header_file (ZipfMandelbrot.hxx) openturns-1.9/lib/src/Uncertainty/Distribution/Chi.cxx000066400000000000000000000232021307543307100231720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Chi distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Chi.hxx" #include "openturns/Gamma.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Chi); static const Factory Factory_Chi; /* Default constructor */ Chi::Chi() : ContinuousDistribution() , nu_(0.0) , normalizationFactor_(0.0) { setName("Chi"); // This call also call update and computeRange() setNu(1.0); setDimension(1); } /* Parameters constructor */ Chi::Chi(const Scalar nu) : ContinuousDistribution() , nu_(0.0) , normalizationFactor_(0.0) { setName("Chi"); // This call also call update() and computeRange() setNu(nu); setDimension(1); } /* Comparison operator */ Bool Chi::operator ==(const Chi & other) const { if (this == &other) return true; return nu_ == other.nu_; } Bool Chi::equals(const DistributionImplementation & other) const { const Chi* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Chi::__repr__() const { OSS oss; oss << "class=" << Chi::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_; return oss; } String Chi::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(nu = " << nu_ << ")"; return oss; } /* Nu accessor */ void Chi::setNu(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be positive"; if (nu_ != nu) { nu_ = nu; computeRange(); update(); } } Scalar Chi::getNu() const { return nu_; } /* Virtual constructor */ Chi * Chi::clone() const { return new Chi(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Chi::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /** Update the derivative attributes */ void Chi::update() { normalizationFactor_ = (1.0 - 0.5 * nu_) * M_LN2 - SpecFunc::LnGamma(0.5 * nu_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point Chi::getRealization() const { return Point(1, std::sqrt(2.0 * DistFunc::rGamma(0.5 * nu_))); } /* Get the DDF of the distribution */ Point Chi::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return Point(1, 0.0); return Point(1, (( nu_ - 1.0) / x - x) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar Chi::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Chi::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; return normalizationFactor_ + (nu_ - 1) * std::log(x) - 0.5 * x * x; } /* Get the CDF of the distribution */ Scalar Chi::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all nu_ if (x <= 0.0) return 0.0; return DistFunc::pGamma(0.5 * nu_, 0.5 * x * x); } Scalar Chi::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all nu_ if (x <= 0.0) return 1.0; return DistFunc::pGamma(0.5 * nu_, 0.5 * x * x, true); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) Its value here is phi(u) = M(0.5 * \nu, 0.5, -0.5 * u ^ 2) + \sqrt(2) * \Gamma((\nu + 1) * 0.5) * M(1.5 * \nu, 1.5, -0.5 * u^2)/ \Gamma(\nu * 0.5) * \imath where M(a, b, c) is the hypergeometric function given by M(p1, q1, x)= sum_{n = 0}^{\infty} [prod_{k = 0} ^ {n - 1} (p1 + k) / (q1 + k)] * x^n / n! */ Complex Chi::computeCharacteristicFunction(const Scalar x) const { const Scalar t = -0.5 * x * x; const Scalar real = SpecFunc::HyperGeom_1_1(0.5 * nu_, 0.5, t ); const Scalar imag = M_SQRT2 * x * std::exp(SpecFunc::LnGamma((nu_ + 1.0) * 0.5) - SpecFunc::LnGamma(0.5 * nu_)) * SpecFunc::HyperGeom_1_1((nu_ + 1.0) * 0.5, 1.5, t); const Complex result(real, imag); return result; } /* Get the PDFGradient of the distribution */ Point Chi::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(1, 0.0); const Scalar x = point[0]; if (x <= 0.0) return pdfGradient; Scalar pdf = computePDF(point); /* pdfGradient[0] = 0.5 * (2. * std::log(x / sqrt(2)) - SpecFunc::Psi(0.5 * nu_)) * pdf;*/ pdfGradient[0] = 0.5 * (2. * std::log(x / M_SQRT2) - SpecFunc::Psi(0.5 * nu_)) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Chi::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(1, 0.0); const Scalar x = point[0]; if (x <= 0.0) return cdfGradient; Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); cdfGradient[0] = (DistFunc::pGamma(0.5 * (nu_ + eps), 0.5 * x * x) - DistFunc::pGamma(0.5 * (nu_ - eps), 0.5 * x * x)) / (2.0 * eps); return cdfGradient; } /* Get the quantile of the distribution */ Scalar Chi::computeScalarQuantile(const Scalar prob, const Bool tail) const { return M_SQRT2 * std::sqrt(DistFunc::qGamma(0.5 * nu_, prob, tail)); } void Chi::computeMean() const { mean_ = Point(1, M_SQRT2 * std::exp( SpecFunc::LnGamma(0.5 * (nu_ + 1.0)) - SpecFunc::LnGamma(0.5 * nu_))); isAlreadyComputedMean_ = true; } void Chi::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = nu_ - 2.0 * std::exp(2.0 * (SpecFunc::LnGamma(0.5 * (nu_ + 1.0)) - SpecFunc::LnGamma(0.5 * nu_))); isAlreadyComputedCovariance_ = true; } /* Get the standard deviation of the distribution */ Point Chi::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0)) ); } /* Get the skewness of the distribution */ Point Chi::getSkewness() const { const Scalar mu = getMean()[0]; const Scalar sigma = getStandardDeviation()[0]; return Point(1, mu * (1 - 2.0 * sigma * sigma) / std::pow(sigma, 3.0)); } /* Get the kurtosis of the distribution */ Point Chi::getKurtosis() const { const Scalar mu = getMean()[0]; const Scalar sigma = getStandardDeviation()[0]; const Scalar gamma1 = getSkewness()[0]; return Point(1, 3.0 + 2.0 * (1.0 - sigma * (mu * gamma1 + sigma)) / std::pow(sigma, 2.0)); } /* Get the moments of the standardized distribution */ Point Chi::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(0.5 * n * M_LN2 + SpecFunc::LnGamma(0.5 * (n + nu_)) - SpecFunc::LnGamma(0.5 * nu_))); } /* Parameters value accessor */ Point Chi::getParameter() const { return Point(1, nu_); } void Chi::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Chi(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description Chi::getParameterDescription() const { return Description(1, "nu"); } /* Method save() stores the object through the StorageManager */ void Chi::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Chi::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); update(); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ChiFactory.cxx000066400000000000000000000055201307543307100245250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Chi distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ChiFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ChiFactory); static const Factory Factory_ChiFactory; /* Default constructor */ ChiFactory::ChiFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ ChiFactory * ChiFactory::clone() const { return new ChiFactory(*this); } /* Here is the interface that all derived class must implement */ ChiFactory::Implementation ChiFactory::build(const Sample & sample) const { return buildAsChi(sample).clone(); } ChiFactory::Implementation ChiFactory::build(const Point & parameters) const { return buildAsChi(parameters).clone(); } ChiFactory::Implementation ChiFactory::build() const { return buildAsChi().clone(); } Chi ChiFactory::buildAsChi(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Chi distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Chi distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar sumSquares = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar xI = sample[i][0]; sumSquares += xI * xI; } try { Chi result(sumSquares / size); result.setDescription(sample.getDescription()); return result; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot estimate parameters of a Chi distribution from the given sample"; } } Chi ChiFactory::buildAsChi(const Point & parameters) const { try { Chi distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Chi distribution from the given parameters"; } } Chi ChiFactory::buildAsChi() const { return Chi(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ChiSquare.cxx000066400000000000000000000214371307543307100243630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ChiSquare distribution, ie the Gamma(nu/2,1/2) distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ChiSquare.hxx" #include "openturns/Gamma.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ChiSquare); static const Factory Factory_ChiSquare; /* Default constructor */ ChiSquare::ChiSquare() : ContinuousDistribution() , nu_(0.0) , normalizationFactor_(0.0) { setName("ChiSquare"); // This call also call update() and computeRange() setNu(1.0); setDimension(1); computeRange(); } /* Parameters constructor */ ChiSquare::ChiSquare(const Scalar nu) : ContinuousDistribution() , nu_(0.0) , normalizationFactor_(0.0) { setName("ChiSquare"); // This call set also call computeRange() and update(). setNu(nu); setDimension(1); } /* Comparison operator */ Bool ChiSquare::operator ==(const ChiSquare & other) const { if (this == &other) return true; return nu_ == other.nu_; } Bool ChiSquare::equals(const DistributionImplementation & other) const { const ChiSquare* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ChiSquare::__repr__() const { OSS oss(true); oss << "class=" << ChiSquare::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_; return oss; } String ChiSquare::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(nu = " << nu_ << ")"; return oss; } /* Nu accessor */ void ChiSquare::setNu(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be positive"; if (nu != nu_) { nu_ = nu; computeRange(); update(); } } Scalar ChiSquare::getNu() const { return nu_; } /* Virtual constructor */ ChiSquare * ChiSquare::clone() const { return new ChiSquare(*this); } /* Compute the numerical range of the distribution given the parameters values */ void ChiSquare::computeRange() { setRange(Gamma(0.5, 0.5 * nu_, 0.0).getRange()); } /** Update the derivative attributes */ void ChiSquare::update() { normalizationFactor_ = -0.5 * nu_ * M_LN2 - SpecFunc::LnGamma(0.5 * nu_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point ChiSquare::getRealization() const { return Point(1, 2.0 * DistFunc::rGamma(0.5 * nu_)); } /* Get the DDF of the distribution */ Point ChiSquare::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return Point(1, 0.0); return Point(1, ((0.5 * nu_ - 1.0) / x - 0.5) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar ChiSquare::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar ChiSquare::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; return normalizationFactor_ + (0.5 * nu_ - 1) * std::log(x) - 0.5 * x; } /* Get the CDF of the distribution */ Scalar ChiSquare::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all nu_ if (x <= 0.0) return 0.0; return DistFunc::pGamma(0.5 * nu_, 0.5 * x); } Scalar ChiSquare::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all nu_ if (x <= 0.0) return 1.0; return DistFunc::pGamma(0.5 * nu_, 0.5 * x, true); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex ChiSquare::computeCharacteristicFunction(const Scalar x) const { return std::pow(Complex(1.0, -2.0 * x), -0.5 * nu_); } Complex ChiSquare::computeLogCharacteristicFunction(const Scalar x) const { return -0.5 * nu_ * std::log(Complex(1.0, -2.0 * x)); } /* Get the PDFGradient of the distribution */ Point ChiSquare::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(1, 0.0); const Scalar x = point[0]; if (x <= 0.0) return pdfGradient; Scalar pdf = computePDF(point); pdfGradient[0] = 0.5 * (std::log(0.5 * x) - SpecFunc::Psi(0.5 * nu_)) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point ChiSquare::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(1, 0.0); const Scalar x = point[0]; if (x <= 0.0) return cdfGradient; Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); cdfGradient[0] = (DistFunc::pGamma(0.5 * (nu_ + eps), 0.5 * x) - DistFunc::pGamma(0.5 * (nu_ - eps), 0.5 * x)) / (2.0 * eps); return cdfGradient; } /* Get the quantile of the distribution */ Scalar ChiSquare::computeScalarQuantile(const Scalar prob, const Bool tail) const { return 2.0 * DistFunc::qGamma(0.5 * nu_, prob, tail); } /* Compute the mean of the distribution */ void ChiSquare::computeMean() const { mean_ = Point(1, nu_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point ChiSquare::getStandardDeviation() const { return Point(1, std::sqrt(2.0 * nu_)); } /* Get the skewness of the distribution */ Point ChiSquare::getSkewness() const { return Point(1, std::sqrt(8.0 / nu_)); } /* Get the kurtosis of the distribution */ Point ChiSquare::getKurtosis() const { return Point(1, 3.0 + 12.0 / nu_); } /* Compute the covariance of the distribution */ void ChiSquare::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 2.0 * nu_; isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point ChiSquare::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(n * M_LN2 + SpecFunc::LnGamma(n + 0.5 * nu_) - SpecFunc::LnGamma(0.5 * nu_))); } /* Parameters value accessor */ Point ChiSquare::getParameter() const { return Point(1, nu_); } void ChiSquare::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = ChiSquare(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description ChiSquare::getParameterDescription() const { return Description(1, "nu"); } /* Method save() stores the object through the StorageManager */ void ChiSquare::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void ChiSquare::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ChiSquareFactory.cxx000066400000000000000000000055341307543307100257130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for ChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ChiSquareFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ChiSquareFactory); static const Factory Factory_ChiSquareFactory; /* Default constructor */ ChiSquareFactory::ChiSquareFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ ChiSquareFactory * ChiSquareFactory::clone() const { return new ChiSquareFactory(*this); } /* Here is the interface that all derived class must implement */ ChiSquareFactory::Implementation ChiSquareFactory::build(const Sample & sample) const { return buildAsChiSquare(sample).clone(); } ChiSquareFactory::Implementation ChiSquareFactory::build(const Point & parameters) const { return buildAsChiSquare(parameters).clone(); } ChiSquareFactory::Implementation ChiSquareFactory::build() const { return buildAsChiSquare().clone(); } DistributionFactoryResult ChiSquareFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } ChiSquare ChiSquareFactory::buildAsChiSquare(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a ChiSquare distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a ChiSquare distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar mean = sample.computeMean()[0]; ChiSquare result(mean); result.setDescription(sample.getDescription()); return result; } ChiSquare ChiSquareFactory::buildAsChiSquare(const Point & parameters) const { try { ChiSquare distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a ChiSquare distribution from the given parameters"; } } ChiSquare ChiSquareFactory::buildAsChiSquare() const { return ChiSquare(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ClaytonCopula.cxx000066400000000000000000000505531307543307100252550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ClaytonCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ClaytonCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ClaytonCopula); static const Factory Factory_ClaytonCopula; /* Default constructor */ ClaytonCopula::ClaytonCopula() : ArchimedeanCopula() , theta_(2.0) { setName( "ClaytonCopula" ); setDimension( 2 ); computeRange(); } /* Parameters constructor */ ClaytonCopula::ClaytonCopula(const Scalar theta) : ArchimedeanCopula() , theta_(0) { setName( "ClaytonCopula" ); // We set the dimension of the ClaytonCopula distribution setDimension( 2 ); setTheta(theta); computeRange(); } /* Comparison operator */ Bool ClaytonCopula::operator ==(const ClaytonCopula & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool ClaytonCopula::equals(const DistributionImplementation & other) const { const ClaytonCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ClaytonCopula::__repr__() const { OSS oss(true); oss << "class=" << ClaytonCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } String ClaytonCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(theta = " << theta_ << ")"; return oss; } /* Virtual constructor */ ClaytonCopula * ClaytonCopula::clone() const { return new ClaytonCopula(*this); } /* Get one realization of the distribution */ Point ClaytonCopula::getRealization() const { Point realization(2); const Scalar u1 = RandomGenerator::Generate(); // We use the general algorithm based on conditional CDF inversion // W case if (theta_ == -1.0) { realization[0] = u1; realization[1] = 1.0 - u1; return realization; } // The inverse conditional CDF U2|U1 const Scalar u2 = RandomGenerator::Generate(); // Independent case if (theta_ == 0.0) { realization[0] = u1; realization[1] = u2; return realization; } // For a strict Clayton copula (theta>0), two possible algorithms: // + based on Laplace transform // + based on conditional quantile // Benchmarks show that the second one is more efficient (10^6 rng) // Conditional quantile: speed= 3739718.74788 rng/s, t= 0.267399787903 s // Laplace transform: speed= 2719399.57105 rng/s, t= 0.367728233337 s #ifdef CLAYTON_USE_LAPLACE if (theta_ > 0.0) { const Scalar x = -std::log(u1); const Scalar y = -std::log(u2); const Scalar z = DistFunc::rGamma(1.0 / theta_); realization[0] = std::exp(-theta_ * log1p(x / z)); realization[1] = std::exp(-theta_ * log1p(y / z)); return realization; } #endif realization[0] = u1; if (theta_ < 1.0e-8) { const Scalar logU1 = std::log(u1); const Scalar logU2 = std::log(u2); realization[1] = u2 * (1.0 - logU2 * theta_ * (1.0 + logU1 - 0.5 * theta_ * ((1.0 + logU2) * logU1 * logU1 + (2.0 + logU2) * (1.0 + logU1)))); } if (theta_ < 1.0e8) realization[1] = u1 * std::pow(std::pow(u2, -theta_ / (1.0 + theta_)) - 1.0 + std::pow(u1, theta_), -1.0 / theta_); else realization[1] = u1 * (1.0 - (log1p(-u2) + std::log(u2)) / theta_); return realization; } /* Get the DDF of the distribution */ Point ClaytonCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar u = point[0]; Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return Point(2, 0.0); // We can impose u <= v as the copula is symmetric in (u, v) Bool exchanged = false; if (u > v) { std::swap(u, v); exchanged = true; } // W case (Frechet lower bound) if (theta_ == -1.0) { if (u == 1.0 - v) return Point(2, -SpecFunc::MaxScalar); return Point(2, 0.0); } Point ddf(2); // Independent case if (theta_ == 0.0) return ddf; // Nearly independent cases. The formula defining the copula suffers from // cancellation for |theta|<<1 so we use a truncated series of order 2 if (std::abs(theta_) < 1.0e-8) { const Scalar logU = std::log(u); const Scalar logV = std::log(v); if ((theta_ < 0.0) && (theta_ * ((logU + logV) - 0.5 * theta_ * (logU * logU + logV * logV)) >= 1.0)) return ddf; const Scalar ddfU = 0.5 * theta_ * (2.0 * (logV + 1.0) + theta_ * (2.0 + 2.0 * logU + 8.0 * logV + 3.0 * logV * logV + 6.0 * logU * logV + 2.0 * logU * logV * logV)) / u; const Scalar ddfV = 0.5 * theta_ * (2.0 * (logU + 1.0) + theta_ * (2.0 + 2.0 * logV + 8.0 * logU + 3.0 * logU * logU + 6.0 * logV * logU + 2.0 * logV * logU * logU)) / v; if (exchanged) { ddf[0] = ddfV; ddf[1] = ddfU; } else { ddf[0] = ddfU; ddf[1] = ddfV; } return ddf; } // General case, we factor out u^(-theta) in order to prevent under/owerflow // for theta>>1 // dc(u,v)/du = (u^(-theta)+v^(-theta)-1)^(-1/theta)*u^(-theta)*v^(-theta)*(theta+1)*(u^(-theta)*theta-theta*v^(-theta)-v^(-theta)+theta+1)/(u^2*v*(u^(-theta)+v^(-theta)-1)^3 // = u*(1+(u/v)^theta-u^theta)^(-1/theta)*u^(-theta)*v^(-theta)*(theta+1)*theta*u^(-theta)*(1-(1+1/theta)*((u/v)^theta-u^theta))/(u^2*v*u^(-3*theta)*(1+(u/v)^theta-u^theta)^3 // = theta*(theta+1)*(1+K)^(-1/theta-3)*u^(theta-1)*v^(-theta-1)*(1-(1+1/theta)*K) // // dc(u,v)/dv=-(u^(-theta)+v^(-theta)-1)^(-1/theta)*u^(-theta)*v^(-theta)*(theta+1)*(u^(-theta)*theta-theta*v^(-theta)-u^(-theta)-theta-1)/(v^2*u*(u^(-theta)+v^(-theta)-1)^3 // = -(u^(-theta)+v^(-theta)-1)^(-1/theta)*u^(-theta)*v^(-theta)*(theta+1)*(u^(-theta)*theta-theta*v^(-theta)-u^(-theta)-theta-1)/(v^2*u*(u^(-theta)+v^(-theta)-1)^3 // = -u*(1+(u/v)^theta-u^theta)^(-1/theta)*u^(-theta)*v^(-theta)*(theta+1)*theta*u^(-theta)*(1-(u/v)^theta-1/theta-(1+1/theta)*u^theta)/(v^2*u*u^(-3*theta)*(1+(u/v)^theta-u^theta)^3 // = -(1+K)^(-1/theta)*u^theta*v^(-theta-2)*(theta+1)*theta*(1-(u/v)^theta-1/theta-(1+1/theta)*u^theta)/(1+K)^3 // For moderate theta, this form is cancellation-free Scalar factor = -1.0; const Scalar logU = std::log(u); const Scalar logV = std::log(v); const Scalar logUOverV = std::log(u / v); if (theta_ < 100.0) factor = std::exp(theta_ * logU) * expm1(-theta_ * logV); // Here we have to insure that theta is multiplied by a negative value to prevent overflow (but get possible underflow...) else factor = expm1(theta_ * logUOverV) - expm1(theta_ * logU); if (factor <= -1.0) return ddf; const Scalar ddfU = theta_ * (1.0 + theta_) * (1.0 - (1.0 + 1.0 / theta_) * factor) * std::exp(-(3.0 + 1.0 / theta_) * log1p(factor) + (theta_ - 1.0) * logUOverV - 2.0 * logV); const Scalar t = -std::exp(theta_ * logUOverV) + 1.0 / theta_ - (1.0 + 1.0 / theta_) * std::exp(theta_ * logU); const Scalar ddfV = -theta_ * (1.0 + theta_) * (1.0 + t) * std::exp(-(3.0 + 1.0 / theta_) * log1p(factor) + theta_ * logUOverV - 2.0 * logV); if (exchanged) { ddf[0] = ddfV; ddf[1] = ddfU; } else { ddf[0] = ddfU; ddf[1] = ddfV; } return ddf; } /* Get the PDF of the distribution */ Scalar ClaytonCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar u = point[0]; Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return 0.0; // We can impose u <= v as the copula is symmetric in (u, v) if (u > v) std::swap(u, v); // W case (Frechet lower bound) if (theta_ == -1.0) { if (u == 1.0 - v) return SpecFunc::MaxScalar; return 0.0; } // Independent case if (theta_ == 0.0) return 1.0; // Nearly independent cases. The formula defining the copula suffers from // cancellation for |theta|<<1 so we use a truncated series of order 2 if (std::abs(theta_) < 1.0e-8) { const Scalar logU = std::log(u); const Scalar logV = std::log(v); if ((theta_ < 0.0) && (theta_ * ((logU + logV) - 0.5 * theta_ * (logU * logU + logV * logV)) >= 1.0)) return 0.0; return 1.0 + theta_ * (1.0 + logU + logV + logU * logV + theta_ * (logU + logV + 0.5 * (logU * logU + logV * logV + logU * logV * (8.0 + 3.0 * (logU + logV) + logU * logV)))); } // General case, we factor out u^(-theta) in order to prevent underflow/overflow // for theta>>1 // c(u,v)=(theta+1)(u^(-theta)+v^(-theta)-1)^(-(1+2theta)/theta)(uv)^(-theta-1) // = (theta+1)exp(theta*log(u)-log(v)-(1/theta+2)log1p(expm1(theta*log(u/v))-expm1(theta*log(u)))) // For moderate theta, this form is cancellation-free Scalar factor = -1.0; const Scalar logU = std::log(u); const Scalar logV = std::log(v); const Scalar logUOverV = std::log(u / v); if (theta_ < 100.0) factor = std::exp(theta_ * logU) * expm1(-theta_ * logV); // Here we have to insure that theta is multiplied by a negative value to prevent overflow (but get possible underflow...) else factor = expm1(theta_ * logUOverV) - expm1(theta_ * logU); if (factor <= -1.0) return 0.0; return (1.0 + theta_) * std::exp(theta_ * logUOverV - logV - (1.0 / theta_ + 2.0) * log1p(factor)); } /* Get the CDF of the distribution */ Scalar ClaytonCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar u = point[0]; Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) return 0.0; // We can impose u <= v as the copula is symmetric in (u, v) if (u > v) std::swap(u, v); // If we are outside of the support, in the upper part if (u >= 1.0) return 1.0; // If we are outside of the support for u, in the upper part if (v >= 1.0) return u; // If we are in the support // W case (Frechet lower bound) if (theta_ == -1.0) return std::max(u + v - 1.0, 0.0); // Independent case if (theta_ == 0.0) return u * v; // Nearly independent cases. The formula defining the copula suffers from // cancellation for |theta|<<1 so we use a truncated series if (std::abs(theta_) < 1.0e-8) { const Scalar logU = std::log(u); const Scalar logV = std::log(v); if ((theta_ < 0.0) && (theta_ * ((logU + logV) - 0.5 * theta_ * (logU * logU + logV * logV)) >= 1.0)) return 0.0; return u * v * (1.0 + theta_ * logU * logV * (1.0 + 0.5 * theta_ * (logU * logV + logU + logV))); } // General case, we factor out u^(-theta) in order to prevent under/owerflow // for theta>>1 // C(u,v)=u(1+(u/v)^theta-u^theta)^(-1/theta) // For moderate theta, this form is cancellation-free Scalar factor = -1.0; if (theta_ < 100.0) factor = std::exp(theta_ * std::log(u)) * expm1(-theta_ * std::log(v)); // Here we have to insure that theta is multiplied by a negative value to prevent overflow (but get possible underflow...) else factor = expm1(theta_ * std::log(u / v)) - expm1(theta_ * std::log(u)); if (factor <= -1.0) return 0.0; return u * std::exp(-(log1p(factor)) / theta_); } /* Compute the covariance of the distribution */ void ClaytonCopula::computeCovariance() const { CopulaImplementation::computeCovariance(); } /* Get the Kendall concordance of the distribution */ CorrelationMatrix ClaytonCopula::getKendallTau() const { CorrelationMatrix tau(2); tau(0, 1) = theta_ / (theta_ + 2.0); return tau; } /* Get the PDFGradient of the distribution */ Point ClaytonCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return Point(1, 0.0); const Scalar t1 = std::pow(u, -theta_); const Scalar t2 = std::pow(v, -theta_); const Scalar t3 = t1 + t2 - 1.0; if (t3 <= 0.0) return Point(1, 0.0); const Scalar t5 = std::pow(t3, -1.0 / theta_); const Scalar t7 = std::log(v); const Scalar t8 = theta_ * theta_; const Scalar t9 = t7 * t8; const Scalar t10 = std::log(u); const Scalar t11 = t10 * t8; const Scalar t16 = std::log(t3); const Scalar t17 = t16 * t1; const Scalar t19 = t16 * t2; const Scalar t21 = t8 * t1; const Scalar t24 = t8 * t2; const Scalar t27 = t8 * theta_; const Scalar t28 = t7 * t27; const Scalar t32 = t9 + t11 + theta_ * t2 * t7 + theta_ * t1 * t10 + t17 * theta_ + t19 * theta_ + 2 * t21 * t10 + 2 * t24 * t7 - t28 * t1 + t28 * t2 - t9 * t1; const Scalar t33 = t10 * t27; const Scalar t38 = -t33 * t2 - t11 * t2 - t16 - t8 + t17 + t19 - t16 * theta_ + t28 + t33 + t21 + t24 + t33 * t1; const Scalar t43 = t3 * t3; const Scalar t51 = t5 * t2 * t1 * (t32 + t38) / (t8 * t43 * t3 * v * u); return Point(1, t51); } /* Get the CDFGradient of the distribution */ Point ClaytonCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) return Point(1, 0.0); // If we are outside of the support, in the upper part if ((u >= 1.0) && (v >= 1.0)) return Point(1, 0.0); // If we are outside of the support for u, in the upper part if (u >= 1.0) return Point(1, 0.0); // If we are outside of the support for v, in the upper part if (v >= 1.0) return Point(1, 0.0); // If we are in the support const Scalar powUMinusTheta = std::pow(u, -theta_); const Scalar powVMinusTheta = std::pow(v, -theta_); const Scalar sum1 = powUMinusTheta + powVMinusTheta - 1.0; if (sum1 <= 0.0) return Point(1, 0.0); const Scalar factor1 = std::pow(sum1, -1.0 / theta_); return Point(1, factor1 * (std::log(sum1) * (powUMinusTheta + powVMinusTheta - 1) + theta_ * (powUMinusTheta * std::log(u) + powVMinusTheta * std::log(v))) / (theta_ * theta_ * sum1)); } /* Get the quantile of the distribution */ Point ClaytonCopula::computeQuantile(const Scalar prob, const Bool tail) const { if ((prob < 0.0) || (prob > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; // Special case for boarding values if (prob == 0.0) return getRange().getLowerBound(); if (prob == 1.0) return getRange().getUpperBound(); // Independent case if (theta_ == 0.0) return Point(2, std::sqrt(prob)); // General case return Point(2, std::exp((M_LN2 - log1p(std::pow(prob, -theta_))) / theta_)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ClaytonCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; const Scalar u = y[0]; const Scalar v = x; // If we are in the support const Scalar factor = std::pow(u, -theta_) + std::pow(v, -theta_) - 1.0; if (factor <= 0.0) return 0.0; return std::pow(factor, -1.0 - 1.0 / theta_) * std::pow(u, -1.0 - theta_); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar ClaytonCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case for no conditioning or independent copula if ((q == 0.0) || (q == 1.0)) return q; // Initialize the conditional quantile with the quantile of the i-th marginal distribution // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; const Scalar z = y[0]; return z * std::pow(std::pow(q, -theta_ / (1.0 + theta_)) - 1.0 + std::pow(z, theta_), -1.0 / theta_); } /* Tell if the distribution has independent copula */ Bool ClaytonCopula::hasIndependentCopula() const { return (theta_ == 0.0); } /* Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar ClaytonCopula::computeArchimedeanGenerator(const Scalar t) const { if (theta_ == 0.0) return 0.0; return (std::pow(t, -theta_) - 1.0) / theta_; } /* Compute the inverse of the archimedean generator */ Scalar ClaytonCopula::computeInverseArchimedeanGenerator(const Scalar t) const { if (theta_ == 0.0) return 0.0; return std::pow(1.0 + t * theta_, -1.0 / theta_); } /* Compute the derivative of the density generator */ Scalar ClaytonCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const { if (theta_ == 0.0) return 0.0; if (theta_ == 1.0) return 1.0; return -std::pow(t, -theta_ - 1.0); } /* Compute the seconde derivative of the density generator */ Scalar ClaytonCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const { if (theta_ == 0.0) return 0.0; if (theta_ == 1.0) return 0.0; return (theta_ + 1) * std::pow(t, -theta_ - 2.0); } /* Parameters value accessor */ Point ClaytonCopula::getParameter() const { return Point(1, theta_); } void ClaytonCopula::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 parameter, got " << parameter.getSize(); const Scalar w = getWeight(); *this = ClaytonCopula(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description ClaytonCopula::getParameterDescription() const { return Description(1, "theta"); } /* Theta accessor */ void ClaytonCopula::setTheta(const Scalar theta) { if (theta < -1.0) throw InvalidArgumentException(HERE) << "Theta MUST be greater or equal to -1"; theta_ = theta; } /* Theta accessor */ Scalar ClaytonCopula::getTheta() const { return theta_; } /* Method save() stores the object through the StorageManager */ void ClaytonCopula::save(Advocate & adv) const { ArchimedeanCopula::save(adv); adv.saveAttribute( "theta_", theta_ ); } /* Method load() reloads the object from the StorageManager */ void ClaytonCopula::load(Advocate & adv) { ArchimedeanCopula::load(adv); adv.loadAttribute( "theta_", theta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ClaytonCopulaFactory.cxx000066400000000000000000000057371307543307100266110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for ClaytonCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ClaytonCopulaFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ClaytonCopulaFactory); static const Factory Factory_ClaytonCopulaFactory; /* Default constructor */ ClaytonCopulaFactory::ClaytonCopulaFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ ClaytonCopulaFactory * ClaytonCopulaFactory::clone() const { return new ClaytonCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ ClaytonCopulaFactory::Implementation ClaytonCopulaFactory::build(const Sample & sample) const { return buildAsClaytonCopula(sample).clone(); } ClaytonCopulaFactory::Implementation ClaytonCopulaFactory::build(const Point & parameters) const { return buildAsClaytonCopula(parameters).clone(); } ClaytonCopulaFactory::Implementation ClaytonCopulaFactory::build() const { return buildAsClaytonCopula().clone(); } ClaytonCopula ClaytonCopulaFactory::buildAsClaytonCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a ClaytonCopula distribution from an empty sample"; if (sample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a ClaytonCopula distribution from a sample of dimension not equal to 2"; Scalar tau = sample.computeKendallTau().operator()(0, 1); if (tau == 1) throw InvalidArgumentException(HERE) << "Error: cannot build a ClaytonCopula distribution from a sample with Kendall tau equal to 1"; ClaytonCopula result(2.0 * tau / (1.0 - tau)); result.setDescription(sample.getDescription()); return result; } ClaytonCopula ClaytonCopulaFactory::buildAsClaytonCopula(const Point & parameters) const { try { ClaytonCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a ClaytonCopula from the given parameters"; } } ClaytonCopula ClaytonCopulaFactory::buildAsClaytonCopula() const { return ClaytonCopula(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ComposedCopula.cxx000066400000000000000000000730301307543307100254100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComposedCopulas * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ComposedCopula.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/Exception.hxx" #include "openturns/RosenblattEvaluation.hxx" #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/Log.hxx" #include "openturns/Normal.hxx" #include "openturns/NormalCopula.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/AggregatedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Copula; CLASSNAMEINIT(ComposedCopula); static const Factory Factory_ComposedCopula; /* Default constructor */ ComposedCopula::ComposedCopula() : CopulaImplementation() , copulaCollection_(0) , isIndependent_(false) { setName("ComposedCopula"); setDimension(1); CopulaCollection coll(1); coll[0] = IndependentCopula(1); setCopulaCollection( coll ); } /* Default constructor */ ComposedCopula::ComposedCopula(const CopulaCollection & coll) : CopulaImplementation() , copulaCollection_() , isIndependent_(false) { setName("ComposedCopula"); // We assign the copula collection through the accessor in order to compute the composed copula dimension setCopulaCollection(coll); } /* Comparison operator */ Bool ComposedCopula::operator ==(const ComposedCopula & other) const { if (this == &other) return true; return copulaCollection_ == other.copulaCollection_; } Bool ComposedCopula::equals(const DistributionImplementation & other) const { const ComposedCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ComposedCopula::__repr__() const { OSS oss(true); oss << "class=" << ComposedCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); for (UnsignedInteger i = 0; i < copulaCollection_.getSize(); ++i) oss << " copula[" << i << "]=" << copulaCollection_[i]; return oss; } String ComposedCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "("; String separator(""); for (UnsignedInteger i = 0; i < copulaCollection_.getSize(); ++i) { oss << separator << copulaCollection_[i]; separator = ", "; } oss << ")"; return oss; } /* Copula collection accessor */ void ComposedCopula::setCopulaCollection(const CopulaCollection & coll) { // Check if the collection is not empty const UnsignedInteger size = coll.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Collection of distributions is empty"; copulaCollection_ = coll; Description description(0); UnsignedInteger dimension = 0; // Compute the dimension, build the description and check the independence isIndependent_ = true; bool parallel = true; for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger copulaDimension = coll[i].getDimension(); dimension += copulaDimension; const Description copulaDescription(coll[i].getDescription()); for (UnsignedInteger j = 0; j < copulaDimension; ++j) description.add(copulaDescription[j]); isIndependent_ = isIndependent_ && copulaCollection_[i].hasIndependentCopula(); parallel = parallel && coll[i].getImplementation()->isParallel(); } setParallel(parallel); isAlreadyComputedCovariance_ = false; // One MUST set the dimension BEFORE the description, else an error occurs setDimension(dimension); setDescription(description); computeRange(); } /* Distribution collection accessor */ const ComposedCopula::CopulaCollection & ComposedCopula::getCopulaCollection() const { return copulaCollection_; } /* Virtual constructor */ ComposedCopula * ComposedCopula::clone() const { return new ComposedCopula(*this); } /* Get one realization of the ComposedCopula */ Point ComposedCopula::getRealization() const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = copulaCollection_.getSize(); Point result(dimension); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Point realization(copulaCollection_[i].getRealization()); const UnsignedInteger copulaDimension = copulaCollection_[i].getDimension(); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { result[index] = realization[j]; ++index; } } return result; } /* Get the DDF of the ComposedCopula */ Point ComposedCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point DDF(getDimension()); const UnsignedInteger size = copulaCollection_.getSize(); Point copulaPDF(size); PointCollection copulaDDF(size); Scalar productPDF = 1.0; UnsignedInteger index = 0; // First, compute the several elements for (UnsignedInteger i = 0; i < size; ++i) { // If one component is outside of the support, the PDF is null if ((point[i] <= 0.0) || (point[i] >= 1.0)) return Point(dimension); const Copula copula(copulaCollection_[i]); const UnsignedInteger copulaDimension = copula.getDimension(); Point component(copulaDimension); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { component[j] = point[index]; ++index; } copulaPDF[i] = copula.computePDF(component); productPDF *= copulaPDF[i]; copulaDDF[i] = copula.computeDDF(component); } // Then, compute the DDF index = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Point currentDDF(copulaDDF[i] * (productPDF / copulaPDF[i])); const UnsignedInteger currentDimension = currentDDF.getDimension(); for (UnsignedInteger j = 0; j < currentDimension; ++j) { DDF[index] = currentDDF[j]; ++index; } } return DDF; } /* Get the PDF of the ComposedCopula */ Scalar ComposedCopula::computePDF(const Point & point) const { /* PDF = PDF_copula1x...xPDF_copula_n */ const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).computePDF(point); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const UnsignedInteger size = copulaCollection_.getSize(); Scalar productPDF = 1.0; UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) { // If one component is outside of the support, the PDF is null if ((point[i] <= 0.0) || (point[i] >= 1.0)) return 0.0; const UnsignedInteger copulaDimension = copulaCollection_[i].getDimension(); Point component(copulaDimension); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { component[j] = point[index]; ++index; } productPDF *= copulaCollection_[i].computePDF(component); } return productPDF; } /* Get the CDF of the ComposedCopula */ Scalar ComposedCopula::computeCDF(const Point & point) const { /* CDF = CDF_copula1x...xCDF_copula_n */ const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).computeCDF(point); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const UnsignedInteger size = copulaCollection_.getSize(); Scalar productCDF = 1.0; UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) { // If one component is at the left of the support of its marginal distribution, the CDF is null if (point[i] <= 0.0) return 0.0; // If the component is inside of the support, update the CDF value const UnsignedInteger copulaDimension = copulaCollection_[i].getDimension(); Point component(copulaDimension); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { component[j] = point[index]; ++index; } const Scalar cdf = copulaCollection_[i].computeCDF(component); productCDF *= cdf; } return productCDF; } /* Compute the probability content of an interval */ Scalar ComposedCopula::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).computeProbability(interval); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); // Reduce the given interval to the support of the distribution, which is the nD unit cube const Interval intersect(interval.intersect(Interval(dimension))); // If the intersection is empty if (intersect.isNumericallyEmpty()) return 0.0; const Point lowerIntersect(intersect.getLowerBound()); const Point upperIntersect(intersect.getUpperBound()); const UnsignedInteger size = copulaCollection_.getSize(); Scalar value = 1.0; for (UnsignedInteger i = 0; i < size; ++i) { const Copula copula(copulaCollection_[i]); const UnsignedInteger copulaDimension = copula.getDimension(); Point lower(copulaDimension); Point upper(copulaDimension); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { lower[j] = lowerIntersect[j]; upper[j] = upperIntersect[j]; } value *= copula.computeProbability(Interval(lower, upper)); } return value; } /* Get the survival function of the distribution */ Scalar ComposedCopula::computeSurvivalFunction(const Point & point) const { /* Survival = Survival_copula1x...xSurvival_copula_n */ const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).computeSurvivalFunction(point); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const UnsignedInteger size = copulaCollection_.getSize(); Scalar productSurvival = 1.0; UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) { // If one component is at the left of the support of its marginal distribution, the Survival is null if (point[i] >= 1.0) return 0.0; // If the component is inside of the support, update the Survival value const UnsignedInteger copulaDimension = copulaCollection_[i].getDimension(); Point component(copulaDimension); for (UnsignedInteger j = 0; j < copulaDimension; ++j) { component[j] = point[index]; ++index; } const Scalar survival = copulaCollection_[i].computeSurvivalFunction(component); productSurvival *= survival; } return productSurvival; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix ComposedCopula::getKendallTau() const { const UnsignedInteger dimension = getDimension(); CorrelationMatrix tau(dimension); if (isIndependent_) return tau; const UnsignedInteger size = copulaCollection_.getSize(); UnsignedInteger globalIndex = 0; for (UnsignedInteger n = 0; n < size; ++n) { const CorrelationMatrix localTau(copulaCollection_[n].getKendallTau()); const UnsignedInteger localSize = localTau.getDimension(); for (UnsignedInteger i = 0; i < localSize; ++i) for (UnsignedInteger j = 0; j < i; ++j) tau(globalIndex + i, globalIndex + j) = localTau(i, j); globalIndex += localSize; } return tau; } /* Get the shape matrix of the distribution, ie the correlation matrix of its copula if it is elliptical */ CorrelationMatrix ComposedCopula::getShapeMatrix() const { if (!hasEllipticalCopula()) throw NotDefinedException(HERE) << "Error: the shape matrix is defined only for elliptical copulas."; const UnsignedInteger size = copulaCollection_.getSize(); if (size == 1) return copulaCollection_[0].getShapeMatrix(); const UnsignedInteger dimension = getDimension(); CorrelationMatrix shapeMatrix(dimension); UnsignedInteger shift = 0; for (UnsignedInteger i = 0; i < size; ++i) { const CorrelationMatrix localShapeMatrix(copulaCollection_[i].getShapeMatrix()); const UnsignedInteger localDimension = localShapeMatrix.getDimension(); for (UnsignedInteger j = 0; j < localDimension; ++j) for (UnsignedInteger k = 0; k <= j; ++k) shapeMatrix(shift + j, shift + k) = localShapeMatrix(j, k); shift += localDimension; } // i return shapeMatrix; } /* Get the PDF gradient of the distribution */ Point ComposedCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In ComposedCopula::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point ComposedCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In ComposedCopula::computeCDFGradient(const Point & point) const"; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ComposedCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return (x < 0.0 ? 0.0 : x > 1.0 ? 0.0 : 1); // General case UnsignedInteger copulaIndex = 0; UnsignedInteger partialDimension = copulaCollection_[copulaIndex].getDimension(); while (partialDimension < conditioningDimension) { ++copulaIndex; partialDimension += copulaCollection_[copulaIndex].getDimension(); } // Extract the relevant part of the conditioning const UnsignedInteger conditioningSize = partialDimension - conditioningDimension; Point conditioningVector(conditioningSize); for (UnsignedInteger i = 0; i < conditioningSize; ++i) conditioningVector[i] = y[conditioningDimension - conditioningSize + i]; return copulaCollection_[copulaIndex].computeConditionalPDF(x, conditioningVector); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ComposedCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return std::min(1.0, std::max(0.0, x)); // General case UnsignedInteger copulaIndex = 0; UnsignedInteger partialDimension = copulaCollection_[copulaIndex].getDimension(); while (partialDimension < conditioningDimension) { ++copulaIndex; partialDimension += copulaCollection_[copulaIndex].getDimension(); } // Extract the relevant part of the conditioning const UnsignedInteger conditioningSize = partialDimension - conditioningDimension; Point conditioningVector(conditioningSize); for (UnsignedInteger i = 0; i < conditioningSize; ++i) conditioningVector[i] = y[conditioningDimension - conditioningSize + i]; return copulaCollection_[copulaIndex].computeConditionalCDF(x, conditioningVector); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar ComposedCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension == 0) return q; if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if (conditioningDimension == 0) return q; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // General case UnsignedInteger copulaIndex = 0; UnsignedInteger partialDimension = copulaCollection_[copulaIndex].getDimension(); while (partialDimension < conditioningDimension) { ++copulaIndex; partialDimension += copulaCollection_[copulaIndex].getDimension(); } // Extract the relevant part of the conditioning const UnsignedInteger conditioningSize = partialDimension - conditioningDimension; Point conditioningVector(conditioningSize); for (UnsignedInteger i = 0; i < conditioningSize; ++i) { conditioningVector[i] = y[conditioningDimension - conditioningSize + i]; } return copulaCollection_[copulaIndex].computeConditionalQuantile(q, conditioningVector); } /* Get the distribution of the marginal distribution corresponding to indices dimensions Some additional restriction occur for this copula: the indices must be of the form: [i_1^1,...,i_k1^1,i_1^2,...,i_k2^2,...,i_1^n,...,i_kn^n] where: i_1^1,...,i_k1^1 is a subset of {0,...,dim_1-1}, i_1^2,...,i_k2^2 is a subset of {0,...,dim_2-1}+dim_1, i_1^n,...,i_kn^n is a subset of {0,...,dim_n-1}+dim_1+...+dim_(n-1), dim_1 = dimension(copula_1) etc. */ ComposedCopula::Implementation ComposedCopula::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal distribution must be in the range [0, dim-1] and must be different"; CopulaCollection marginalCopulas; const UnsignedInteger indicesSize = indices.getSize(); const UnsignedInteger size = copulaCollection_.getSize(); // For each copula, see if there is something to extract UnsignedInteger currentPosition = 0; UnsignedInteger currentIndex = indices[currentPosition]; // Lower bound of indices related to the current copula UnsignedInteger lowerIndex = 0; // Upper bound of indices related to the current copula plus 1 UnsignedInteger upperIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Copula copula(copulaCollection_[i]); // Update index range for the current copula lowerIndex = upperIndex; upperIndex += copula.getDimension(); Indices copulaIndices(0); // Find the indices related to the current copula while ((currentPosition < indicesSize) && (currentIndex >= lowerIndex) && (currentIndex < upperIndex)) { copulaIndices.add(currentIndex - lowerIndex); // Go to next index ++currentPosition; if (currentPosition == indicesSize) break; currentIndex = indices[currentPosition]; } // If there is something to extract if (copulaIndices.getSize() > 0) marginalCopulas.add(copulaCollection_[i].getMarginal(copulaIndices)); // All the indices have been taken into account if (currentPosition == indicesSize) break; // Check if a bad case occurs: one index related to copula i is found after indices related to copula j, with j > i if (currentIndex < lowerIndex) throw InvalidArgumentException(HERE) << "Error: one index related to the ith copula has been found after indices related to the jth copula, with j > i"; } return new ComposedCopula(marginalCopulas); } /* Parameters value and description accessor */ ComposedCopula::PointWithDescriptionCollection ComposedCopula::getParametersCollection() const { PointWithDescriptionCollection parameters(1); // No marginal parameter // Put the dependence parameters PointWithDescription point(0); Description description(0); const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // All distributions, including copulas, must output a collection of Point of size at least 1, // even if the Point are empty const PointWithDescription copulaParameters(copulaCollection_[i].getParametersCollection()[0]); const Description parametersDescription(copulaParameters.getDescription()); const String copulaName(copulaCollection_[i].getName()); const UnsignedInteger parameterDimension = copulaParameters.getDimension(); for (UnsignedInteger j = 0; j < parameterDimension; ++j) { point.add(copulaParameters[j]); description.add(OSS() << "copula_" << i << "_" << parametersDescription[j]); } } point.setDescription(description); point.setName(getName()); parameters[0] = point; return parameters; } // getParametersCollection void ComposedCopula::setParametersCollection(const PointCollection & parametersCollection) { // Check if the given parameters are ok if (parametersCollection.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: the given collection has a size=" << parametersCollection.getSize() << " but should be of size=1"; // Dependence parameters const Point parameters(parametersCollection[0]); const UnsignedInteger parametersDimension = parameters.getDimension(); // Index within the given parametersCollection UnsignedInteger globalIndex = 0; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // All distributions, including copulas, must output a collection of Point of size at least 1, // even if the Point are empty const UnsignedInteger atomParametersDimension = copulaCollection_[i].getParametersCollection()[0].getDimension(); // ith copula parameters Point point(atomParametersDimension); for (UnsignedInteger j = 0; j < atomParametersDimension; ++j) { if (globalIndex >= parametersDimension) throw InvalidArgumentException(HERE) << "Error: there are too few dependence parameters"; point[j] = parameters[globalIndex]; ++globalIndex; } // atom parameters copulaCollection_[i].setParametersCollection(PointCollection(1, point)); } // atoms if (globalIndex != parametersDimension) throw InvalidArgumentException(HERE) << "Error: there are too many dependence parameters, expected " << globalIndex << " parameters and got " << parametersDimension; } /* Tell if the distribution has elliptical copula */ Bool ComposedCopula::hasEllipticalCopula() const { // The copula is elliptical either because it is based on a unique elliptical copula or it is composed of normal copulas const UnsignedInteger size = copulaCollection_.getSize(); // If there is only one copula in the collection, check if it has an elliptical copula if (size == 1) return copulaCollection_[0].hasEllipticalCopula(); // Else, check if all the copulas are normal copulas. We cannot check it in the most general case (eg a SklarCopula built upon a normal distribution). const String normalCopulaName(NormalCopula::GetClassName()); for (UnsignedInteger i = 0; i < size; ++i) if (copulaCollection_[i].getImplementation()->getClassName() != normalCopulaName) return false; return true; } /* Tell if the distribution has independent copula */ Bool ComposedCopula::hasIndependentCopula() const { return isIndependent_; } /* Get the isoprobabilist transformation */ ComposedCopula::IsoProbabilisticTransformation ComposedCopula::getIsoProbabilisticTransformation() const { // First special case: the copula is independent const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).getIsoProbabilisticTransformation(); const UnsignedInteger size = copulaCollection_.getSize(); // Second special case: only one copula in the collection if (size == 1) return copulaCollection_[0].getIsoProbabilisticTransformation(); // General case: return the transformation as an aggregated function of pre/post processed isoprobabilistic transformations built using the elementary copulas. These transformations are the isoprobabilistic transformations of the elementary copulas if they lead to the standard Normal space, else a Rosenblatt transformation is substituted const Description allVariables(Description::BuildDefault(dimension, "x")); UnsignedInteger shift = 0; Collection< Function > atomTransformations(size); for (UnsignedInteger i = 0; i < size; ++i) { // First, build the mapping between the full components and the components of the current copula const UnsignedInteger atomDimension = copulaCollection_[i].getDimension(); Description atomVariables(atomDimension); for (UnsignedInteger j = 0; j < atomDimension; ++j) atomVariables[j] = allVariables[shift + j]; const SymbolicFunction projection(allVariables, atomVariables); // Second, check if the isoprobabilistic transformation associated with the current copula maps to a Normal standard distribution if (copulaCollection_[i].getStandardDistribution().hasIndependentCopula()) atomTransformations[i] = ComposedFunction(copulaCollection_[i].getIsoProbabilisticTransformation(), projection); else atomTransformations[i] = ComposedFunction(RosenblattEvaluation(copulaCollection_[i]), projection); } return AggregatedFunction(atomTransformations); } /* Get the inverse isoprobabilist transformation */ ComposedCopula::InverseIsoProbabilisticTransformation ComposedCopula::getInverseIsoProbabilisticTransformation() const { // First special case: the copula is independent const UnsignedInteger dimension = getDimension(); if (isIndependent_) return IndependentCopula(dimension).getInverseIsoProbabilisticTransformation(); const UnsignedInteger size = copulaCollection_.getSize(); // Special case: only one copula in the collection if (size == 1) return copulaCollection_[0].getInverseIsoProbabilisticTransformation(); // General case: return the transformation as an aggregated function of pre/post processed isoprobabilistic transformations built using the elementary copulas. These transformations are the isoprobabilistic transformations of the elementary copulas if they lead to the standard Normal space, else a Rosenblatt transformation is substituted const Description allVariables(Description::BuildDefault(dimension, "x")); UnsignedInteger shift = 0; Collection< Function > atomTransformations(size); for (UnsignedInteger i = 0; i < size; ++i) { // First, build the mapping between the full components and the components of the current copula const UnsignedInteger atomDimension = copulaCollection_[i].getDimension(); Description atomVariables(atomDimension); for (UnsignedInteger j = 0; j < atomDimension; ++j) atomVariables[j] = allVariables[shift + j]; const SymbolicFunction projection(allVariables, atomVariables); // Second, check if the isoprobabilistic transformation associated with the current copula maps to a Normal standard distribution if (copulaCollection_[i].getStandardDistribution().hasIndependentCopula()) atomTransformations[i] = ComposedFunction(copulaCollection_[i].getInverseIsoProbabilisticTransformation(), projection); else atomTransformations[i] = ComposedFunction(InverseRosenblattEvaluation(copulaCollection_[i]), projection); } return AggregatedFunction(atomTransformations); } /* Compute the covariance of the distribution */ void ComposedCopula::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); UnsignedInteger shift = 0; for (UnsignedInteger i = 0; i < copulaCollection_.getSize(); ++i) { const CovarianceMatrix localCovariance(copulaCollection_[i].getCovariance()); const UnsignedInteger localDimension = localCovariance.getDimension(); for (UnsignedInteger j = 0; j < localDimension; ++j) for (UnsignedInteger k = 0; k <= j; ++k) covariance_(shift + j, shift + k) = localCovariance(j, k); shift += localDimension; } // i isAlreadyComputedCovariance_ = true; } /* Method save() stores the object through the StorageManager */ void ComposedCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "copulaCollection_", copulaCollection_ ); adv.saveAttribute( "isIndependent_", isIndependent_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedCopula::load(Advocate & adv) { CopulaImplementation::load(adv); adv.loadAttribute( "copulaCollection_", copulaCollection_ ); adv.loadAttribute( "isIndependent_", isIndependent_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ComposedDistribution.cxx000066400000000000000000001463121307543307100266500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all ComposedDistributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ComposedDistribution.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/MarginalTransformationHessian.hxx" #include "openturns/NatafEllipticalDistributionEvaluation.hxx" #include "openturns/NatafEllipticalDistributionGradient.hxx" #include "openturns/NatafEllipticalDistributionHessian.hxx" #include "openturns/InverseNatafEllipticalDistributionEvaluation.hxx" #include "openturns/InverseNatafEllipticalDistributionGradient.hxx" #include "openturns/InverseNatafEllipticalDistributionHessian.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/Indices.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/Normal.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/NormalCopula.hxx" #include "openturns/Log.hxx" #include "openturns/TBB.hxx" #include "openturns/ComposedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ComposedDistribution); static const Factory Factory_ComposedDistribution; /* Default constructor */ ComposedDistribution::ComposedDistribution() : DistributionImplementation() , distributionCollection_() , copula_(IndependentCopula(1)) { setName("ComposedDistribution"); setDimension(1); DistributionCollection coll(1); coll[0] = Uniform(); // This call set also the range. setDistributionCollection( coll ); } /* Default constructor */ ComposedDistribution::ComposedDistribution(const DistributionCollection & coll) : DistributionImplementation() , distributionCollection_() , copula_(IndependentCopula(coll.getSize())) { setName("ComposedDistribution"); setDimension(coll.getSize()); // We can NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the dimension 1). We do this by calling // the setDistributionCollection() method that do it for us. // This call set also the range. setDistributionCollection( coll ); } /* Default constructor */ ComposedDistribution::ComposedDistribution(const DistributionCollection & coll, const Distribution & copula) : DistributionImplementation() , distributionCollection_() , copula_(copula) { setName("ComposedDistribution"); if (!copula.isCopula()) throw InvalidArgumentException(HERE) << "Error: the given distribution=" << copula << " is not a copula."; setDimension(copula.getDimension()); // We can NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the dimension 1). We do this by calling // the setDistributionCollection() method that do it for us. // This call set also the range. setDistributionCollection( coll ); } /* Comparison operator */ Bool ComposedDistribution::operator ==(const ComposedDistribution & other) const { if (this == &other) return true; // The copula... if (!(hasIndependentCopula() && other.hasIndependentCopula())) return false; if (!(copula_ == *other.getCopula())) return false; // Then the marginals for (UnsignedInteger i = 0; i < dimension_; ++i) { const Distribution left(distributionCollection_[i]); const Distribution right(other.distributionCollection_[i]); if (!(left == right)) return false; } return true; } Bool ComposedDistribution::equals(const DistributionImplementation & other) const { // First, test the dimension if (!(dimension_ == other.getDimension())) return false; // Second, check with cast const ComposedDistribution* p_other = dynamic_cast(&other); if (p_other != 0) return (*this == *p_other); // Third, check by properties // We coud go there eg. when comparing a ComposedDistribution([Normal()]*2) with a Normal(2) // The copula... if (!(hasIndependentCopula() && other.hasIndependentCopula())) return false; if (!(copula_ == *other.getCopula())) return false; // Then the marginals for (UnsignedInteger i = 0; i < dimension_; ++i) { const Distribution left(distributionCollection_[i]); const Distribution right(*other.getMarginal(i)); if (!(left == right)) return false; } return true; } /* String converter */ String ComposedDistribution::__repr__() const { OSS oss; oss << "class=" << ComposedDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " copula=" << copula_; for (UnsignedInteger i = 0; i < getDimension(); ++i) oss << " marginal[" << i << "]=" << distributionCollection_[i]; return oss; } String ComposedDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "("; String separator(""); for (UnsignedInteger i = 0; i < distributionCollection_.getSize(); ++i) { oss << separator << distributionCollection_[i].__str__(); separator = ", "; } if (getDimension() > 1) oss << ", " << copula_.__str__(); oss << ")"; return oss; } /* Distribution collection accessor */ void ComposedDistribution::setDistributionCollection(const DistributionCollection & coll) { // Check if the collection is not empty const UnsignedInteger size = coll.getSize(); if ((getDimension() != 0) && (size != getDimension())) throw InvalidArgumentException(HERE) << "The distribution collection must have a size equal to the distribution dimension"; Description description(size); Point lowerBound(size); Point upperBound(size); Interval::BoolCollection finiteLowerBound(size); Interval::BoolCollection finiteUpperBound(size); if (size == 0) throw InvalidArgumentException(HERE) << "Collection of distributions is empty"; // First, check that all the marginal distributions are of dimension 1 Bool parallel = copula_.getImplementation()->isParallel(); for (UnsignedInteger i = 0; i < size; ++i) { if (coll[i].getDimension() != 1) throw InvalidArgumentException(HERE) << "The marginal distribution " << i << " is of dimension " << coll[i].getDimension() << ", which is different from 1."; parallel = parallel && coll[i].getImplementation()->isParallel(); const Interval marginalRange(coll[i].getRange()); lowerBound[i] = marginalRange.getLowerBound()[0]; upperBound[i] = marginalRange.getUpperBound()[0]; finiteLowerBound[i] = marginalRange.getFiniteLowerBound()[0]; finiteUpperBound[i] = marginalRange.getFiniteUpperBound()[0]; // The description of the ComposedDistribution is built first by using the marginal description // then by using the marginal name if the description is empty, which should never occur const String marginalDescription(coll[i].getDescription()[0]); if (marginalDescription.size() > 0) description[i] = marginalDescription; else { LOGINFO(OSS() << "Warning: using the name of the marginal " << i << " instead of its description for building the description of the ComposedDistribution, because the marginal description is empty."); const String marginalName(coll[i].getName()); description[i] = marginalName; } } setParallel(parallel); // Everything is ok, store the collection distributionCollection_ = coll; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; setDescription(description); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Distribution collection accessor */ const ComposedDistribution::DistributionCollection & ComposedDistribution::getDistributionCollection() const { return distributionCollection_; } /* Copula accessor */ void ComposedDistribution::setCopula(const Distribution & copula) { // We check if the copula has a dimension compatible with the one of the object, // especially if the object has already been created and has a collection of distribution if (getDimension() != 0) { if (getDimension() != copula.getDimension()) throw InvalidArgumentException(HERE) << "Copula has a dimension different from the ComposedDistribution's"; } else setDimension(copula.getDimension()); copula_ = copula; isAlreadyComputedCovariance_ = false; // We ensure that the copula has the same description than the ComposedDistribution copula_.setDescription(getDescription()); } /* Copula accessor */ ComposedDistribution::Implementation ComposedDistribution::getCopula() const { return copula_.getImplementation(); } /* Virtual constructor */ ComposedDistribution * ComposedDistribution::clone() const { return new ComposedDistribution(*this); } /* Get one realization of the ComposedDistribution */ Point ComposedDistribution::getRealization() const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return distributionCollection_[0].getRealization(); // Special case for independent copula Point result(dimension); if (hasIndependentCopula()) { for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = distributionCollection_[i].getRealization()[0]; return result; } // General case const Point realization(copula_.getRealization()); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = distributionCollection_[i].computeQuantile(realization[i])[0]; return result; } struct ComposedDistributionComputeSamplePolicy { const Sample input_; Sample & output_; const Collection distributionCollection_; UnsignedInteger dimension_; ComposedDistributionComputeSamplePolicy(const Sample & input, Sample & output, const Collection & distributionCollection) : input_(input) , output_(output) , distributionCollection_(distributionCollection) , dimension_(distributionCollection.getSize()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) output_[i][j] = distributionCollection_[j].computeQuantile(input_[i][j])[0]; } }; /* end struct ComposedDistributionComputeSamplePolicy */ /* Get a sample of the distribution */ Sample ComposedDistribution::getSampleParallel(const UnsignedInteger size) const { const UnsignedInteger dimension = getDimension(); // For 1D or independent components, we can only rely on possible parallel // implementation of getSample() methods of the marginal distributions if (dimension == 1) return distributionCollection_[0].getSample(size); // Special case for independent copula if (hasIndependentCopula()) { Point data(size * dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Point marginalSample(distributionCollection_[i].getSample(size).getImplementation()->getData()); UnsignedInteger shift = i; for (UnsignedInteger j = 0; j < size; ++j) { data[shift] = marginalSample[j]; shift += dimension; } } SampleImplementation result(size, dimension); result.setData(data); result.setName(getName()); result.setDescription(getDescription()); return result; } // For dependent components, we can use some parallelism on top // of possible parallelism of the getSample() method of the copula const Sample copulaSample(copula_.getSample(size)); Sample result(size, dimension); const ComposedDistributionComputeSamplePolicy policy( copulaSample, result, distributionCollection_ ); TBB::ParallelFor( 0, size, policy ); result.setName(getName()); result.setDescription(getDescription()); return result; } Sample ComposedDistribution::getSample(const UnsignedInteger size) const { if (isParallel_) return getSampleParallel(size); return DistributionImplementation::getSample(size); } /* Get the DDF of the ComposedDistribution */ Point ComposedDistribution::computeDDF(const Point & point) const { /* PDF = PDF_copula(CDF_dist1(p1), ..., CDF_distn(pn))xPDF_dist1(p1)x...xPDF_distn(pn) */ const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point uPoint(dimension); Point pdfMarginal(dimension); Point ddfMarginal(dimension); Scalar productPDF = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Point component(Point(1, point[i])); uPoint[i] = distributionCollection_[i].computeCDF(component); pdfMarginal[i] = distributionCollection_[i].computePDF(component); ddfMarginal[i] = distributionCollection_[i].computeDDF(component)[0]; productPDF *= pdfMarginal[i]; } // Initialization with the values of an independent copula Scalar pdfCopula = 1.0; Point ddfCopula(dimension, 0.0); // If the distribution does not have an independent copula if (!hasIndependentCopula()) { pdfCopula = copula_.computePDF(uPoint); ddfCopula = copula_.computeDDF(uPoint); } // Compute the ddf Point ddf(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) if (pdfMarginal[i] > 0.0) ddf[i] = productPDF * (ddfCopula[i] * pdfMarginal[i] + pdfCopula * ddfMarginal[i] / pdfMarginal[i]); return ddf; } /* Get the PDF of the ComposedDistribution */ Scalar ComposedDistribution::computePDF(const Point & point) const { /* PDF = PDF_copula(CDF_dist1(p1), ..., CDF_distn(pn))xPDF_dist1(p1)x...xPDF_distn(pn) */ const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Special case for dimension 1, to boost performances if (dimension == 1) return distributionCollection_[0].computePDF(point); Scalar productPDF = 1.0; // Special case for the independent case, to boost performances if (hasIndependentCopula()) { for (UnsignedInteger i = 0; i < dimension; ++i) productPDF *= distributionCollection_[i].computePDF(point[i]); return productPDF; } // General case Point uPoint(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Point component(Point(1, point[i])); uPoint[i] = distributionCollection_[i].computeCDF(component); productPDF *= distributionCollection_[i].computePDF(component); } return copula_.computePDF(uPoint) * productPDF; } /* Get the CDF of the ComposedDistribution */ Scalar ComposedDistribution::computeCDF(const Point & point) const { /* CDF = CDF_copula(CDF_dist1(p1), ..., CDF_distn(pn)) */ const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (dimension == 1) return distributionCollection_[0].computeCDF(point); // Special case for the independent case, to boost performances if (hasIndependentCopula()) { Scalar productCDF = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) productCDF *= distributionCollection_[i].computeCDF(point[i]); return productCDF; } // General case Point uPoint(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) uPoint[i] = distributionCollection_[i].computeCDF(point[i]); return copula_.computeCDF(uPoint); } Scalar ComposedDistribution::computeSurvivalFunction(const Point & point) const { /* Survival = \hat{F}(x_1, \dots, x_d) * = \hat{C}(\hat{F}_1(x_1), \dots, \hat{F}_d(x_d)) * = \bar{C}(1-\hat{F}_1(x_1), \dots, 1-\hat{F}_d(x_d)) * = \bar{C}(F_1(x_1), \dots, F_d(x_d)) * * With \bar{C} the survival function of the copula, not to be mistaken with the survival copula \hat{C} */ const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (dimension == 1) return distributionCollection_[0].computeSurvivalFunction(point); // Special case for the independent case, to boost performances if (hasIndependentCopula()) { Scalar productSurvival = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) productSurvival *= distributionCollection_[i].computeSurvivalFunction(point[i]); return productSurvival; } // General case Point uPoint(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) uPoint[i] = distributionCollection_[i].computeCDF(point[i]); return copula_.computeSurvivalFunction(uPoint); } /* Compute the probability content of an interval */ Scalar ComposedDistribution::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); // If the interval is empty if (interval.isNumericallyEmpty()) return 0.0; const Point lower(interval.getLowerBound()); const Point upper(interval.getUpperBound()); const Interval::BoolCollection finiteLower(interval.getFiniteLowerBound()); const Interval::BoolCollection finiteUpper(interval.getFiniteUpperBound()); Point lowerCopula(dimension); Point upperCopula(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { if (finiteLower[i]) lowerCopula[i] = distributionCollection_[i].computeCDF(lower[i]); else lowerCopula[i] = 0.0; if (finiteUpper[i]) upperCopula[i] = distributionCollection_[i].computeCDF(upper[i]); else upperCopula[i] = 1.0; } return copula_.computeProbability(Interval(lowerCopula, upperCopula)); } /* Get the PDF gradient of the distribution */ Point ComposedDistribution::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point gradient; // First, put the gradient according to marginal parameters // The marginal parameters are supposed to be independent from one marginal distribution // to the others for (UnsignedInteger i = 0; i < dimension; ++i) { const Point marginalGradient(distributionCollection_[i].computePDFGradient(Point(1, point[i]))); const UnsignedInteger marginalParameterDimension = marginalGradient.getDimension(); for (UnsignedInteger j = 0; j < marginalParameterDimension; ++j) gradient.add(marginalGradient[j]); } const Point copulaGradient(copula_.computePDFGradient(point)); const UnsignedInteger copulaParameterDimension = copulaGradient.getDimension(); // Then, put the gradient according to the copula parameters for (UnsignedInteger j = 0; j < copulaParameterDimension; ++j) gradient.add(copulaGradient[j]); return gradient; } /* Get the CDF gradient of the distribution */ Point ComposedDistribution::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point gradient; // First, put the gradient according to marginal parameters // The marginal parameters are supposed to be independent from one marginal distribution // to the others for (UnsignedInteger i = 0; i < dimension; ++i) { const Point marginalGradient(distributionCollection_[i].computeCDFGradient(Point(1, point[i]))); const UnsignedInteger marginalParameterDimension = marginalGradient.getDimension(); for (UnsignedInteger j = 0; j < marginalParameterDimension; ++j) gradient.add(marginalGradient[j]); } const Point copulaGradient(copula_.computeCDFGradient(point)); const UnsignedInteger copulaParameterDimension = copulaGradient.getDimension(); // Then, put the gradient according to the copula parameters for (UnsignedInteger j = 0; j < copulaParameterDimension; ++j) gradient.add(copulaGradient[j]); return gradient; } /* Get the quantile of the ComposedDistribution */ Point ComposedDistribution::computeQuantile(const Scalar prob, const Bool tail) const { if (!(prob < 0.0 || prob <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; const UnsignedInteger dimension = getDimension(); if (dimension == 1) return distributionCollection_[0].computeQuantile(prob, tail); Point quantile(copula_.computeQuantile(prob)); for (UnsignedInteger i = 0; i < getDimension(); ++i) quantile[i] = distributionCollection_[i].computeQuantile(quantile[i])[0]; return quantile; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ComposedDistribution::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return Distribution(getMarginal(conditioningDimension)).computePDF(x); // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = distributionCollection_[i].computeCDF(y[i]); return distributionCollection_[conditioningDimension].computePDF(x) * copula_.computeConditionalPDF(distributionCollection_[conditioningDimension].computeCDF(x), u); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ComposedDistribution::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return distributionCollection_[conditioningDimension].computeCDF(x); // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = distributionCollection_[i].computeCDF(y[i]); return copula_.computeConditionalCDF(distributionCollection_[conditioningDimension].computeCDF(x), u); } /* Compute the numerical range of the distribution given the parameters values */ void ComposedDistribution::computeRange() { const UnsignedInteger dimension = getDimension(); Point lowerBound(dimension); Point upperBound(dimension); Interval::BoolCollection finiteLowerBound(dimension); Interval::BoolCollection finiteUpperBound(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Interval atomRange(distributionCollection_[i].getRange()); lowerBound[i] = atomRange.getLowerBound()[0]; upperBound[i] = atomRange.getUpperBound()[0]; finiteLowerBound[i] = atomRange.getFiniteLowerBound()[0]; finiteUpperBound[i] = atomRange.getFiniteUpperBound()[0]; } setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Compute the mean of the distribution. It is cheap if the marginal means are cheap */ void ComposedDistribution::computeMean() const { const UnsignedInteger dimension = getDimension(); mean_ = Point(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) mean_[i] = distributionCollection_[i].getMean()[0]; isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point ComposedDistribution::getStandardDeviation() const { const UnsignedInteger dimension = getDimension(); Point standardDeviation(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) standardDeviation[i] = distributionCollection_[i].getStandardDeviation()[0]; return standardDeviation; } /* Compute the covariance of the distribution */ void ComposedDistribution::computeCovariance() const { const UnsignedInteger dimension = getDimension(); // We need this to initialize the covariance matrix in two cases: // + this is the first call to this routine (which could be checked by testing the dimension of the distribution and the dimension of the matrix // + the copula has changed from a non-independent one to the independent copula covariance_ = CovarianceMatrix(dimension); // First the diagonal terms, which are the marginal covariances // Compute the marginal standard deviation for(UnsignedInteger component = 0; component < dimension; ++component) covariance_(component, component) = distributionCollection_[component].getCovariance()(0, 0); // Off-diagonal terms if the copula is not the independent copula if (!hasIndependentCopula()) { // Special case: elliptical distribution. The covariance is the shape matrix of the associated copula, scaled by the marginal standard deviations if (isElliptical()) { const CovarianceMatrix shape(copula_.getShapeMatrix()); const Point sigma(getStandardDeviation()); for (UnsignedInteger rowIndex = 0; rowIndex < dimension; ++rowIndex) for (UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension; ++columnIndex) covariance_(rowIndex, columnIndex) = shape(rowIndex, columnIndex) * sigma[rowIndex] * sigma[columnIndex]; return; } if (ResourceMap::GetAsBool("ComposedDistribution-UseGenericCovarianceAlgorithm")) { LOGINFO("ComposedDistribution: using the generic covariance algorithm"); DistributionImplementation::computeCovariance(); return; } LOGINFO("ComposedDistribution: using the specific covariance algorithm"); // Here we use the following expression of the covariance \Sigma_{i,j}: // \Sigma_{i,j}=\int_{\R^2}(x_i-\mu_i)(x_j-\mu_j)p_{i,j}(x_i,x_j)dx_idx_j // =\int_{\R^2}(x_i-\mu_i)(x_j-\mu_j)p_i(x_i)p_j(x_j}c_{i,j}(F_i(x_i),F_j(x_j))dx_idx_j // Let u_i=F_i(x_i) and u_j=F_j(u_j) so du_idu_j=p_i(x_i)p_j(x_j)dx_idx_j // \Sigma_{i,j}=\int_{[0,1]^2}(F_i^{-1}(u_i)-\mu_i)(F_j^{-1}(u_j)-\mu_j)c_{i,j}(u_i,u_j)du_idu_j // To ensure that the mean is up to date mean_ = getMean(); // Compute the weights and nodes of the 1D gauss quadrature over [-1, 1] // Generate only the square-root of integrationNodesNumber_ 1D nodes in // order to have a total workload of integrationNodesNumber_ const UnsignedInteger oldIntegrationNodesNumber = integrationNodesNumber_; integrationNodesNumber_ = static_cast(std::ceil(std::sqrt(1.0 * integrationNodesNumber_))); Point gaussWeights; Point gaussNodes(getGaussNodesAndWeights(gaussWeights)); integrationNodesNumber_ = oldIntegrationNodesNumber; // Convert the nodes and weights for the interval [0, 1] for (UnsignedInteger i = 0; i < gaussWeights.getSize(); ++i) { gaussNodes[i] = 0.5 * (gaussNodes[i] + 1.0); gaussWeights[i] *= 0.5; } // Compute the marginal quantiles at the nodes Sample marginalQuantiles(gaussWeights.getSize(), dimension); Sample marginalPDF(gaussWeights.getSize(), dimension); for(UnsignedInteger component = 0; component < dimension; ++component) { const Distribution marginalDistribution(getMarginal(component)); for(UnsignedInteger nodeIndex = 0; nodeIndex < gaussWeights.getSize(); ++nodeIndex) { const Scalar node = gaussNodes[nodeIndex]; const Point q(marginalDistribution.computeQuantile(node)); marginalQuantiles[nodeIndex][component] = q[0]; marginalPDF[nodeIndex][component] = marginalDistribution.computePDF(q); } } // Performs the integration for each covariance in the strictly lower triangle of the covariance matrix // We simply use a product gauss quadrature // We first loop over the coeeficients because the most expensive task is to get the 2D marginal copulas Indices indices(2); // Prepare the 2D integration nodes and weights in order to use potential parallelism in 2D marginal pdf computation Sample nodes2D(gaussWeights.getSize() * gaussWeights.getSize(), 2); Point weights2D(gaussWeights.getSize() * gaussWeights.getSize()); UnsignedInteger index = 0; for (UnsignedInteger rowNodeIndex = 0; rowNodeIndex < gaussWeights.getSize(); ++rowNodeIndex) { const Scalar nodeI = gaussNodes[rowNodeIndex]; const Scalar weightI = gaussWeights[rowNodeIndex]; for (UnsignedInteger columnNodeIndex = 0; columnNodeIndex < gaussWeights.getSize(); ++columnNodeIndex) { const Scalar nodeJ = gaussNodes[columnNodeIndex]; const Scalar weightJ = gaussWeights[columnNodeIndex]; nodes2D[index][0] = nodeI; nodes2D[index][1] = nodeJ; weights2D[index] = weightI * weightJ; ++index; } // loop over J integration nodes } // loop over I integration nodes // Now perform the integration for each component of the covariance matrix for (UnsignedInteger rowIndex = 0; rowIndex < dimension; ++rowIndex) { indices[0] = rowIndex; const Scalar muI = mean_[rowIndex]; // We must fill the upper triangle of the covariance matrix in order to access the 2D marginal distributions // of the copula in the correct order for the ComposedCopula for (UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension; ++columnIndex) { indices[1] = columnIndex; const Scalar muJ = mean_[columnIndex]; const Distribution marginalCopula(copula_.getMarginal(indices)); if (!marginalCopula.hasIndependentCopula()) { LOGINFO(OSS() << "Compute covariance(" << rowIndex << ", " << columnIndex << ")"); const Point pdf2D(marginalCopula.computePDF(nodes2D).getImplementation()->getData()); Scalar covarianceIJ = 0.0; // Then we loop over the integration points index = 0; for (UnsignedInteger rowNodeIndex = 0; rowNodeIndex < gaussWeights.getSize(); ++rowNodeIndex) { for (UnsignedInteger columnNodeIndex = 0; columnNodeIndex < gaussWeights.getSize(); ++columnNodeIndex) { covarianceIJ += weights2D[index] * (marginalQuantiles[rowNodeIndex][rowIndex] - muI) * (marginalQuantiles[columnNodeIndex][columnIndex] - muJ) * pdf2D[index]; ++index; } // loop over J integration nodes } // loop over I integration nodes LOGINFO(OSS() << "Covariance(" << rowIndex << ", " << columnIndex << ")=" << covarianceIJ); covariance_(rowIndex, columnIndex) = covarianceIJ; } } // loop over column indices } // loop over row indices } // if !hasIndependentCopula isAlreadyComputedCovariance_ = true; } // computeCovariance /* Get the skewness of the distribution */ Point ComposedDistribution::getSkewness() const { const UnsignedInteger dimension = getDimension(); Point skewness(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) skewness[i] = distributionCollection_[i].getSkewness()[0]; return skewness; } /* Get the kurtosis of the distribution */ Point ComposedDistribution::getKurtosis() const { const UnsignedInteger dimension = getDimension(); Point kurtosis(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) kurtosis[i] = distributionCollection_[i].getKurtosis()[0]; return kurtosis; } /* Get the i-th marginal distribution */ ComposedDistribution::Implementation ComposedDistribution::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; Distribution marginal(distributionCollection_[i]); marginal.setDescription(Description(1, getDescription()[i])); return marginal.getImplementation()->clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ ComposedDistribution::Implementation ComposedDistribution::getMarginal(const Indices & indices) const { // This call will check that indices are correct const Copula marginalCopula(copula_.getMarginal(indices)); DistributionCollection marginalDistributions(0); const UnsignedInteger size = indices.getSize(); const Description description(getDescription()); Description marginalDescription(size); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger j = indices[i]; marginalDistributions.add(distributionCollection_[j]); marginalDescription[i] = description[j]; } ComposedDistribution marginal(marginalDistributions, marginalCopula); marginal.setDescription(marginalDescription); return marginal.clone(); } /* Get the isoprobabilistic transformation */ ComposedDistribution::IsoProbabilisticTransformation ComposedDistribution::getIsoProbabilisticTransformation() const { const UnsignedInteger dimension = getDimension(); // Set the parameters values and descriptions PointWithDescriptionCollection parametersCollection(getParametersCollection()); // First, compute the dimension of the marginal parameters space const UnsignedInteger size = parametersCollection.getSize(); Point parameters(0); Description description(0); for (UnsignedInteger i = 0; i < size; ++i) { const PointWithDescription marginalParameters(parametersCollection[i]); const Description marginalDescription(marginalParameters.getDescription()); const UnsignedInteger marginalDimension = marginalParameters.getDimension(); const String marginalName(marginalParameters.getName()); for (UnsignedInteger j = 0; j < marginalDimension; ++j) { parameters.add(marginalParameters[j]); description.add(OSS() << marginalName << "_" << marginalDescription[j]); } } // Special case for the independent copula case: marginal transformations only to go to the spherical distribution if (hasIndependentCopula()) { // Get the evaluation implementations MarginalTransformationEvaluation evaluation(distributionCollection_, DistributionCollection(dimension, Normal())); // We have to correct the direction because the output collection corresponds to the standard space, so there is no parameter to take into account for these distributions evaluation.setDirection(MarginalTransformationEvaluation::FROM); IsoProbabilisticTransformation marginalTransformation(evaluation.clone(), new MarginalTransformationGradient(evaluation), new MarginalTransformationHessian(evaluation)); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); return marginalTransformation; } // Special case for the elliptical distribution case: linear transformation if (isElliptical()) { const TriangularMatrix inverseCholesky(getInverseCholesky()); const Point mean(getMean()); IsoProbabilisticTransformation transform; transform.setEvaluation(new NatafEllipticalDistributionEvaluation(mean, inverseCholesky)); transform.setGradient(new NatafEllipticalDistributionGradient(inverseCholesky)); transform.setHessian(new NatafEllipticalDistributionHessian(dimension)); transform.setParameter(parameters); transform.setParameterDescription(description); return transform; } // Special case for the elliptical copula case: generalized Nataf transformation (marginal transformations plus linear transformation) if (hasEllipticalCopula()) { // Standard distribution const Distribution standardDistribution(getStandardDistribution()); // Get the evaluation implementations const Distribution standardMarginal(standardDistribution.getMarginal(0)); MarginalTransformationEvaluation evaluation(distributionCollection_, DistributionCollection(dimension, standardMarginal)); // We have to correct the direction because the output collection corresponds to the standard space, so there is no parameter to take into account for these distributions evaluation.setDirection(MarginalTransformationEvaluation::FROM); IsoProbabilisticTransformation marginalTransformation(evaluation.clone(), MarginalTransformationGradient(evaluation).clone(), MarginalTransformationHessian(evaluation).clone()); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); // Suppress the correlation between the components. const TriangularMatrix inverseCholesky(copula_.getShapeMatrix().computeCholesky().solveLinearSystem(IdentityMatrix(dimension)).getImplementation()); LinearFunction linear(Point(dimension, 0.0), Point(dimension, 0.0), inverseCholesky); return ComposedFunction(linear, marginalTransformation); } // General case: go to uniform marginal distributions using marginal transformations, then use the isoprobabilistic ransformation of the copula // Get the IsoProbabilisticTransformation from the copula const IsoProbabilisticTransformation copulaIsoprobabilisticTransformation(copula_.getIsoProbabilisticTransformation()); // Get the right function implementations const MarginalTransformationEvaluation evaluation(distributionCollection_, MarginalTransformationEvaluation::FROM); IsoProbabilisticTransformation marginalTransformation(evaluation.clone(), new MarginalTransformationGradient(evaluation), new MarginalTransformationHessian(evaluation)); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); return ComposedFunction(copulaIsoprobabilisticTransformation, marginalTransformation); } /* Get the inverse isoprobabilist transformation */ ComposedDistribution::InverseIsoProbabilisticTransformation ComposedDistribution::getInverseIsoProbabilisticTransformation() const { const UnsignedInteger dimension = getDimension(); // Set the parameters values and descriptions PointWithDescriptionCollection parametersCollection(getParametersCollection()); // First, compute the dimension of the marginal parameters space const UnsignedInteger size = parametersCollection.getSize(); Point parameters(0); Description description(0); for (UnsignedInteger i = 0; i < size; ++i) { const PointWithDescription marginalParameters(parametersCollection[i]); const Description marginalDescription(marginalParameters.getDescription()); const UnsignedInteger marginalDimension = marginalParameters.getDimension(); const String marginalName(marginalParameters.getName()); for (UnsignedInteger j = 0; j < marginalDimension; ++j) { parameters.add(marginalParameters[j]); description.add(OSS() << marginalName << "_" << marginalDescription[j]); } } // Special case for the independent copula case: marginal transformations only to go back from the spherical distribution if (hasIndependentCopula()) { // Get the evaluation implementations MarginalTransformationEvaluation evaluation(DistributionCollection(dimension, Normal()), distributionCollection_); // We have to correct the direction because the input collection corresponds to the standard space, so there is no parameter to take into account for these distributions evaluation.setDirection(MarginalTransformationEvaluation::TO); IsoProbabilisticTransformation marginalTransformation(evaluation.clone(), new MarginalTransformationGradient(evaluation), new MarginalTransformationHessian(evaluation)); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); return marginalTransformation; } // Special case for the elliptical distribution case: linear transformation if (isElliptical()) { const TriangularMatrix cholesky(getCholesky()); const Point mean(getMean()); InverseIsoProbabilisticTransformation inverseTransform; inverseTransform.setEvaluation(new InverseNatafEllipticalDistributionEvaluation(mean, cholesky)); inverseTransform.setGradient(new InverseNatafEllipticalDistributionGradient(cholesky)); inverseTransform.setHessian(new InverseNatafEllipticalDistributionHessian(dimension)); inverseTransform.setParameter(parameters); inverseTransform.setParameterDescription(description); return inverseTransform; } // Special case for the elliptical copula case: generalized Nataf transformation (marginal transformations plus linear transformation) if (hasEllipticalCopula()) { // Standard distribution const Distribution standardDistribution(getStandardDistribution()); // Get the evaluation implementations const Distribution standardMarginal(standardDistribution.getMarginal(0)); MarginalTransformationEvaluation evaluation(DistributionCollection(dimension, standardMarginal), distributionCollection_); // We have to correct the direction because the output collection corresponds to the standard space, so there is no parameter to take into account for these distributions evaluation.setDirection(MarginalTransformationEvaluation::TO); InverseIsoProbabilisticTransformation marginalTransformation(evaluation.clone(), new MarginalTransformationGradient(evaluation), new MarginalTransformationHessian(evaluation)); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); // Suppress the correlation between the components. const TriangularMatrix cholesky(copula_.getShapeMatrix().computeCholesky()); // const SquareMatrix cholesky(ComposedDistribution(DistributionCollection(dimension, standardMarginal), getCopula()).getCholesky()); LinearFunction linear(Point(dimension, 0.0), Point(dimension, 0.0), cholesky); return ComposedFunction(marginalTransformation, linear); } // General case: go to the copula using its inverse isoprobabilistic transformation, then add the correct marginal distributions using marginal transformations // Get the InverseIsoProbabilisticTransformation from the copula const InverseIsoProbabilisticTransformation copulaInverseIsoprobabilisticTransformation(copula_.getInverseIsoProbabilisticTransformation()); // Build the marginal transformation const MarginalTransformationEvaluation evaluation(distributionCollection_, MarginalTransformationEvaluation::TO); InverseIsoProbabilisticTransformation marginalTransformation(evaluation.clone(), new MarginalTransformationGradient(evaluation), new MarginalTransformationHessian(evaluation)); marginalTransformation.setParameter(parameters); marginalTransformation.setParameterDescription(description); return ComposedFunction(marginalTransformation, copulaInverseIsoprobabilisticTransformation); } /* Get the standard distribution */ ComposedDistribution::Implementation ComposedDistribution::getStandardDistribution() const { return copula_.getStandardDistribution().getImplementation(); } /* Parameters value and description accessor */ ComposedDistribution::PointWithDescriptionCollection ComposedDistribution::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension + (dimension > 1 ? 1 : 0)); const Description description(getDescription()); // First put the marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { // Each marginal distribution must output a collection of parameters of size 1, even if it contains an empty Point const PointWithDescriptionCollection marginalParameters(distributionCollection_[marginalIndex].getParametersCollection()); PointWithDescription point(marginalParameters[0]); Description marginalParametersDescription(point.getDescription()); // Here we must add a unique prefix to the marginal parameters description in order to deambiguate the parameters of different marginals sharing the same description for (UnsignedInteger i = 0; i < point.getDimension(); ++i) marginalParametersDescription[i] = (OSS() << marginalParametersDescription[i] << "_marginal_" << marginalIndex); point.setDescription(marginalParametersDescription); point.setName(description[marginalIndex]); parameters[marginalIndex] = point; } // marginalIndex if (dimension > 1) { // Second put the dependence parameters PointWithDescription point(copula_.getParametersCollection()[0]); Description copulaParametersDescription(point.getDescription()); // Here we must add a unique prefix to the copula parameters description in order to deambiguate the parameters of marginals sharing the same description for (UnsignedInteger i = 0; i < point.getDimension(); ++i) copulaParametersDescription[i] = (OSS() << copulaParametersDescription[i] << "_copula"); point.setDescription(copulaParametersDescription); point.setName(copula_.getName()); parameters[dimension] = point; } // dimension > 1 return parameters; } // getParametersCollection void ComposedDistribution::setParametersCollection(const PointCollection& parametersCollection) { const UnsignedInteger dimension = getDimension(); const UnsignedInteger parametersSize = dimension + (dimension > 1 ? 1 : 0); if (parametersCollection.getSize() < parametersSize) throw InvalidArgumentException(HERE) << "The collection is too small(" << parametersCollection.getSize() << "). Expected (" << parametersSize << ")"; // set marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) distributionCollection_[marginalIndex].setParameter(parametersCollection[marginalIndex]); // set copula parameters if (dimension > 1) copula_.setParameter(parametersCollection[dimension]); } Point ComposedDistribution::getParameter() const { const UnsignedInteger dimension = getDimension(); Point point; for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++ marginalIndex) { point.add(distributionCollection_[marginalIndex].getParameter()); } if (dimension > 1) { point.add(copula_.getParameter()); } return point; } void ComposedDistribution::setParameter(const Point & parameter) { const UnsignedInteger dimension = getDimension(); UnsignedInteger globalIndex = 0; for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++ marginalIndex) { const UnsignedInteger parametersSize = distributionCollection_[marginalIndex].getParameterDimension(); if (globalIndex + parametersSize > parameter.getSize()) throw InvalidArgumentException(HERE) << "Not enough values (" << parameter.getSize() << "), needed " << globalIndex + parametersSize << " for marginal " << marginalIndex; Point newParameters(parametersSize); std::copy(parameter.begin() + globalIndex, parameter.begin() + globalIndex + parametersSize, newParameters.begin()); distributionCollection_[marginalIndex].setParameter(newParameters); globalIndex += parametersSize; } if (dimension > 1) { const UnsignedInteger parametersSize = copula_.getParameterDimension(); if (globalIndex + parametersSize > parameter.getSize()) throw InvalidArgumentException(HERE) << "Not enough values (" << parameter.getSize() << "), needed " << globalIndex + parametersSize << " for copula"; Point newParameters(parametersSize); std::copy(parameter.begin() + globalIndex, parameter.begin() + globalIndex + parametersSize, newParameters.begin()); copula_.setParameter(newParameters); } } Description ComposedDistribution::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); Description description; for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++ marginalIndex) { Description marginalParametersDescription(distributionCollection_[marginalIndex].getParameterDescription()); for (UnsignedInteger i = 0; i < marginalParametersDescription.getSize(); ++ i) description.add(OSS() << marginalParametersDescription[i] << "_marginal_" << marginalIndex); } if (dimension > 1) { Description copulaParametersDescription(copula_.getParameterDescription()); for (UnsignedInteger i = 0; i < copulaParametersDescription.getSize(); ++ i) description.add(OSS() << copulaParametersDescription[i] << "_copula"); } return description; } /* Tell if the distribution has independent copula */ Bool ComposedDistribution::hasIndependentCopula() const { return copula_.hasIndependentCopula(); } /* Tell if the distribution has elliptical copula */ Bool ComposedDistribution::hasEllipticalCopula() const { return copula_.hasEllipticalCopula(); } /* Check if the distribution is elliptical */ Bool ComposedDistribution::isElliptical() const { const Bool ellipticalCopula = copula_.hasEllipticalCopula(); if (!ellipticalCopula) return false; const String copulaKind(copula_.getImplementation()->getClassName()); // Easy case: Normal or independent copula with Normal marginals const Bool hasNormalCopula = (copulaKind == NormalCopula::GetClassName()) || hasIndependentCopula(); Bool hasNormalMarginals = true; for (UnsignedInteger i = 0; i < getDimension(); ++i) { const String currentMarginalKind(distributionCollection_[i].getImplementation()->getClassName()); hasNormalMarginals = hasNormalMarginals && (currentMarginalKind == Normal::GetClassName()); } // For now, we are not smart enough to detect a fully general elliptical copula. The general // way to do it is to compare the density generator of the marginals and the copula. return hasNormalCopula && hasNormalMarginals; } /* Check if the distribution is continuous */ Bool ComposedDistribution::isContinuous() const { const UnsignedInteger dimension = getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) if (!distributionCollection_[i].isContinuous()) return false; return true; } /* Check if the distribution is discrete */ Bool ComposedDistribution::isDiscrete() const { const UnsignedInteger dimension = getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) if (!distributionCollection_[i].isDiscrete()) return false; return true; } /* Tell if the distribution is integer valued */ Bool ComposedDistribution::isIntegral() const { const UnsignedInteger dimension = getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) if (!distributionCollection_[i].isIntegral()) return false; return true; } /* Method save() stores the object through the StorageManager */ void ComposedDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distributionCollection_", distributionCollection_ ); adv.saveAttribute( "copula_", copula_ ); } /* Method load() reloads the object from the StorageManager */ void ComposedDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "distributionCollection_", distributionCollection_ ); adv.loadAttribute( "copula_", copula_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/CompositeDistribution.cxx000066400000000000000000000466651307543307100270530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The CompositeDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/CompositeDistribution.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Uniform.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Brent.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CompositeDistribution); static const Factory Factory_CompositeDistribution; /* Default constructor */ CompositeDistribution::CompositeDistribution() : DistributionImplementation() , function_(SymbolicFunction("x", "x")) , antecedent_(Uniform(0.0, 1.0)) , bounds_(0) , values_(0) , probabilities_(0) , increasing_(0) , solver_(Brent(ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"))) { setParallel(false); setName("CompositeDistribution"); setDimension(1); // Update the derivative attributes. It also recompute the range update(); } /* Parameters constructor */ CompositeDistribution::CompositeDistribution(const Function & function, const Distribution & antecedent) : DistributionImplementation() , function_(function) , antecedent_(antecedent) , bounds_(0) , values_(0) , probabilities_(0) , increasing_(0) , solver_(Brent(ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"))) { setParallel(false); setName("CompositeDistribution"); // This method check everything and call the update() method. setFunctionAndAntecedent(function, antecedent); } /* Parameters constructor */ CompositeDistribution::CompositeDistribution(const Function & function, const Distribution & antecedent, const Point & bounds, const Point & values) : DistributionImplementation() , function_(function) , antecedent_(antecedent) , bounds_(bounds) , values_(values) , probabilities_(0) , increasing_(0) , solver_(Brent(ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"), ResourceMap::GetAsScalar("CompositeDistribution-SolverEpsilon"))) { setParallel(false); setName("CompositeDistribution"); if (function.getInputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the function must have an input dimension equal to 1, here input dimension=" << function.getInputDimension(); if (function.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the function must have an output dimension equal to 1, here input dimension=" << function.getOutputDimension(); if (antecedent.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the antecedent must have dimension 1. Here dimension=" << antecedent.getDimension(); const UnsignedInteger size = bounds.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: there must be at least two bounds."; if (size != values.getSize()) throw InvalidArgumentException(HERE) << "Error: the size of the bounds=" << bounds.getSize() << " is not equal to the size of the values=" << values.getSize(); probabilities_ = Point(size, 0.0); // Compute the probabilities for (UnsignedInteger i = 0; i < size; ++i) probabilities_[i] = antecedent.computeCDF(bounds[i]); increasing_ = Indices(size - 1); // Compute the variations for (UnsignedInteger i = 0; i < size - 1; ++i) increasing_[i] = values_[i + 1] > values[i]; // Compute the range Scalar xMin = values[0]; Scalar xMax = xMin; for (UnsignedInteger i = 1; i < size; ++i) { xMin = std::min(xMin, values[i]); xMax = std::max(xMax, values[i]); } // Range based on interval arithmetic setRange(Interval(xMin, xMax)); } /* Set the function and antecedent with check */ void CompositeDistribution::setFunctionAndAntecedent(const Function & function, const Distribution & antecedent) { if (function.getInputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the function must have an input dimension equal to 1, here input dimension=" << function.getInputDimension(); if (function.getOutputDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the function must have an output dimension equal to 1, here input dimension=" << function.getOutputDimension(); if (antecedent.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the antecedent must have dimension 1. Here dimension=" << antecedent.getDimension(); function_ = function; antecedent_ = antecedent; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; update(); } /* Compute all the derivative attributes */ void CompositeDistribution::update() { // First, compute the roots of the gradient const Scalar xMin = antecedent_.getRange().getLowerBound()[0] + ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); const Scalar xMax = antecedent_.getRange().getUpperBound()[0] - ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); bounds_ = Point(1, xMin); try { values_ = function_(Point(1, xMin)); } catch (...) { throw NotDefinedException(HERE) << "Error: cannot evaluate the function at x=" << xMin; } if (!SpecFunc::IsNormal(values_[0])) throw NotDefinedException(HERE) << "Error: cannot evaluate the function at x=" << xMin; probabilities_ = Point(1, antecedent_.computeCDF(xMin)); increasing_ = Indices(0); Scalar fMin = values_[0]; Scalar fMax = values_[0]; const UnsignedInteger n = ResourceMap::GetAsUnsignedInteger("CompositeDistribution-StepNumber"); const DerivativeWrapper derivativeWrapper(function_); const Function derivative(bindMethod(derivativeWrapper, &DerivativeWrapper::computeDerivative, 1, 1)); Scalar a = xMin; Scalar fpA = -1.0; try { fpA = derivative(Point(1, a))[0]; } catch (...) { throw NotDefinedException(HERE) << "Error: cannot evaluate the derivative at x=" << a; } if (!SpecFunc::IsNormal(fpA)) throw NotDefinedException(HERE) << "Error: cannot evaluate the derivative at x=" << a; Scalar b = a; Scalar fpB = fpA; for (UnsignedInteger i = 0; i < n; ++i) { a = b; fpA = fpB; b = ((i + 1) * xMax + (n - i) * xMin) / (n + 1); try { fpB = derivative(Point(1, b))[0]; } catch (...) { throw NotDefinedException(HERE) << "Error: cannot evaluate the derivative at x=" << b; } if (!SpecFunc::IsNormal(fpB)) throw NotDefinedException(HERE) << "Error: cannot evaluate the derivative at x=" << b; try { const Scalar root = solver_.solve(derivative, 0.0, a, b, fpA, fpB); bounds_.add(root); Scalar value = -1.0; try { value = function_(Point(1, root))[0]; } catch (...) { throw NotDefinedException(HERE) << "Error: cannot evaluate the function at x=" << root; } if (!SpecFunc::IsNormal(root)) throw NotDefinedException(HERE) << "Error: cannot evaluate the derivative at x=" << root; increasing_.add(value > values_[values_.getSize() - 1]); values_.add(value); probabilities_.add(antecedent_.computeCDF(root)); fMin = std::min(value, fMin); fMax = std::max(value, fMax); } catch(...) { // Nothing to do } } bounds_.add(xMax); Scalar value = -1.0; try { value = function_(Point(1, xMax))[0]; } catch (...) { throw NotDefinedException(HERE) << "Error: cannot evaluate the function at x=" << xMax; } if (!SpecFunc::IsNormal(value)) throw NotDefinedException(HERE) << "Error: cannot evaluate the function at x=" << xMax; increasing_.add(value > values_[values_.getSize() - 1]); values_.add(value); probabilities_.add(Point(1, antecedent_.computeCDF(xMax))); fMin = std::min(value, fMin); fMax = std::max(value, fMax); setRange(Interval(fMin, fMax)); } /* Function accessors */ void CompositeDistribution::setFunction(const Function & function) { if (!(function == function_)) setFunctionAndAntecedent(function, antecedent_); } Function CompositeDistribution::getFunction() const { return function_; } /* Antecedent accessors */ void CompositeDistribution::setAntecedent(const Distribution & antecedent) { if (antecedent != antecedent_) setFunctionAndAntecedent(function_, antecedent); } Distribution CompositeDistribution::getAntecedent() const { return antecedent_; } /* Solver accessors */ void CompositeDistribution::setSolver(const Solver & solver) { if (!(solver == solver_)) { solver_ = solver; update(); } } Solver CompositeDistribution::getSolver() const { return solver_; } /* Comparison operator */ Bool CompositeDistribution::operator ==(const CompositeDistribution & other) const { if (this == &other) return true; return (antecedent_ == other.antecedent_) && (function_ == other.function_); } Bool CompositeDistribution::equals(const DistributionImplementation & other) const { const CompositeDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String CompositeDistribution::__repr__() const { OSS oss; oss << "class=" << CompositeDistribution::GetClassName() << " name=" << getName() << " function=" << function_ << " antecedent=" << antecedent_ << " bounds=" << bounds_ << " values=" << values_ << " probabilities=" << probabilities_ << " increasing=" << increasing_; return oss; } String CompositeDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "=f(" << antecedent_.__str__() << ") with f=" << function_.getEvaluation()->__str__(); return oss; } /* Virtual constructor */ CompositeDistribution * CompositeDistribution::clone() const { return new CompositeDistribution(*this); } /* Get one realization of the distribution */ Point CompositeDistribution::getRealization() const { return function_(antecedent_.getRealization()); } /* Get the PDF of the distribution */ Scalar CompositeDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar pdf = 0.0; const Scalar x = point[0]; Scalar a = bounds_[0]; Scalar fA = values_[0]; Scalar b = a; Scalar fB = fA; const UnsignedInteger size = bounds_.getSize(); for (UnsignedInteger i = 1; i < size; ++i) { a = b; fA = fB; b = bounds_[i]; fB = values_[i]; const Bool mustSolve = (increasing_[i - 1] && (fA <= x) && (x < fB)) || (!increasing_[i - 1] && (fB <= x) && (x < fA)); if (mustSolve) { const Point fInvX(1, solver_.solve(function_, x, a, b, fA, fB)); const Scalar numerator = antecedent_.computePDF(fInvX); if (numerator > 0.0) { const Matrix gradient(function_.gradient(fInvX)); if (!(gradient.getNbRows() == 1 && gradient.getNbColumns() == 1)) throw InternalException(HERE) << "Error: the given function has no actual gradient. Consider using finite differences."; const Scalar denominator = std::abs(function_.gradient(fInvX)(0, 0)); if (SpecFunc::IsNormal(denominator)) pdf += numerator / denominator; LOGDEBUG(OSS() << "i=" << i << ", a=" << a << ", fA=" << fA << ", x=" << x << ", b=" << b << ", fB=" << fB << ", fInvX=" << fInvX << ", numerator=" << numerator << ", denominator=" << denominator << ", pdf=" << pdf); } } } // i LOGDEBUG(OSS() << "pdf=" << pdf); return pdf; } /* Get the CDF of the distribution */ Scalar CompositeDistribution::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar cdf = 0.0; const Scalar x = point[0]; Scalar a = bounds_[0]; Scalar fA = values_[0]; Scalar b = a; Scalar fB = fA; for (UnsignedInteger i = 1; i < bounds_.getSize(); ++i) { a = b; fA = fB; b = bounds_[i]; fB = values_[i]; // The contribution of the current segment [a, b] to the probability P(X <= x) where X = f(antecedent) is // the probability of X\in f([a,b])\cap X <= x // If f is increasing, f([a, b]) = [f(a), f(b)] and the contribution is: // 0 if x <= f(a) // Fantecedent(b) - Fantecedent(a) if x >= f(b) // Fantecedent(t) - Fantecedent(a) if f(a) < x < f(b) where f(t) = x if (increasing_[i - 1]) { LOGDEBUG(OSS() << "increasing"); if (x >= fB) { cdf += probabilities_[i] - probabilities_[i - 1]; LOGDEBUG(OSS() << "x >= fB, i=" << i << ", a=" << a << ", fA=" << fA << ", x=" << x << ", b=" << b << ", fB=" << fB << ", cdf=" << cdf); } else if (x > fA) { const Point fInvX(1, solver_.solve(function_, x, a, b, fA, fB)); cdf += antecedent_.computeCDF(fInvX) - probabilities_[i - 1]; LOGDEBUG(OSS() << "x < fA, i=" << i << ", a=" << a << ", fA=" << fA << ", x=" << x << ", b=" << b << ", fB=" << fB << ", fInvX=" << fInvX << ", cdf=" << cdf); } LOGDEBUG(OSS() << "x <= fA, no contribution"); } // increasing // If f is decreasing, f([a, b]) = [f(b), f(a)] and the contribution is: // 0 if x <= f(b) // Fantecedent(b) - Fantecedent(a) if x >= f(a) // Fantecedent(b) - Fantecedent(t) if f(b) < x < f(a) where f(t) = x else { LOGDEBUG(OSS() << "decreasing"); if (x >= fA) { cdf += probabilities_[i] - probabilities_[i - 1]; LOGDEBUG(OSS() << "x >= fA, i=" << i << ", a=" << a << ", fA=" << fA << ", x=" << x << ", b=" << b << ", fB=" << fB << ", cdf=" << cdf); } else if (x > fB) { const Point fInvX(1, solver_.solve(function_, x, a, b, fA, fB)); cdf += probabilities_[i] - antecedent_.computeCDF(fInvX); LOGDEBUG(OSS() << "x > fB, i=" << i << ", a=" << a << ", fA=" << fA << ", x=" << x << ", b=" << b << ", fB=" << fB << ", fInvX=" << fInvX << ", cdf=" << cdf); } LOGDEBUG(OSS() << "x <= fB, no contribution"); } // decreasing } // i LOGDEBUG(OSS() << "cdf=" << cdf); return cdf; } /** Get the product minimum volume interval containing a given probability of the distribution */ Interval CompositeDistribution::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return DistributionImplementation::computeUnivariateMinimumVolumeIntervalByOptimization(prob, marginalProb); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet CompositeDistribution::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); // As we are in 1D and as the function defining the composite distribution can have complex variations, // we use an improved sampling method to compute the quantile of the -logPDF(X) distribution const UnsignedInteger size = SpecFunc::NextPowerOfTwo(ResourceMap::GetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize")); const Point q(SobolSequence(1).generate(size).getImplementation()->getData()); const Sample sampleAntecedent(antecedent_.computeQuantile(q)); const Sample minusLogPDFSample(computeLogPDF(function_(sampleAntecedent)) * Point(1, -1.0)); const Scalar minusLogPDFThreshold = minusLogPDFSample.computeQuantile(prob)[0]; threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Parameters value and description accessor */ CompositeDistribution::PointWithDescriptionCollection CompositeDistribution::getParametersCollection() const { return antecedent_.getParametersCollection(); } void CompositeDistribution::setParametersCollection(const PointCollection & parametersCollection) { antecedent_.setParametersCollection(parametersCollection); setFunctionAndAntecedent(function_, antecedent_); } /* Parameters value accessor */ Point CompositeDistribution::getParameter() const { return antecedent_.getParameter(); } void CompositeDistribution::setParameter(const Point & parameter) { antecedent_.setParameter(parameter); setFunctionAndAntecedent(function_, antecedent_); } /* Parameters description accessor */ Description CompositeDistribution::getParameterDescription() const { return antecedent_.getParameterDescription(); } /* Tell if the distribution is continuous */ Bool CompositeDistribution::isContinuous() const { return antecedent_.isContinuous(); } /* Tell if the distribution is integer valued */ Bool CompositeDistribution::isDiscrete() const { return antecedent_.isDiscrete(); } /* Compute the shifted moments of the distribution */ Point CompositeDistribution::computeShiftedMomentContinuous(const UnsignedInteger n, const Point & shift) const { if (shift.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the shift dimension must match the distribution dimension."; if (n == 0) return Point(1, 1.0); Point moment(1); // For each component GaussKronrod algo; const CompositeDistributionShiftedMomentWrapper kernel(n, shift[0], this); const Function integrand(bindMethod(kernel, &CompositeDistributionShiftedMomentWrapper::computeShiftedMomentKernel, 1, 1)); const Scalar a = antecedent_.getRange().getLowerBound()[0]; const Scalar b = antecedent_.getRange().getUpperBound()[0]; moment[0] = algo.integrate(integrand, Interval(a, b))[0]; return moment; } /* Method save() stores the object through the StorageManager */ void CompositeDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "function_", function_ ); adv.saveAttribute( "antecedent_", antecedent_ ); adv.saveAttribute( "bounds_", bounds_ ); adv.saveAttribute( "values_", values_ ); adv.saveAttribute( "probabilities_", probabilities_ ); adv.saveAttribute( "increasing_", increasing_ ); adv.saveAttribute( "solver_", solver_ ); } /* Method load() reloads the object from the StorageManager */ void CompositeDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "function_", function_ ); adv.loadAttribute( "antecedent_", antecedent_ ); adv.loadAttribute( "bounds_", bounds_ ); adv.loadAttribute( "values_", values_ ); adv.loadAttribute( "probabilities_", probabilities_ ); adv.loadAttribute( "solver_", solver_ ); update(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ConditionalDistribution.cxx000066400000000000000000000677011307543307100273460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ConditionalDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ConditionalDistribution.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/Dirac.hxx" #include "openturns/Uniform.hxx" #include "openturns/Box.hxx" #include "openturns/GaussProductExperiment.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConditionalDistribution); static const Factory Factory_ConditionalDistribution; /* Default constructor */ ConditionalDistribution::ConditionalDistribution() : Mixture() , conditionedDistribution_() , conditioningDistribution_() , linkFunction_() , discreteMarginalsIndices_(0) , diracMarginalsIndices_(0) , continuousMarginalsIndices_(0) , continuousLowerBounds_(0) , continuousUpperBounds_(0) , continuousNodes_() , continuousWeights_(0) , discreteNodes_() , diracValues_(0) { setName("ConditionalDistribution"); const Description inVars(Description::BuildDefault(1, "y")); const Description outVars(Description::BuildDefault(2, "theta")); Description formulas(2); formulas[0] = inVars[0]; formulas[1] = String(OSS() << inVars[0] << " + 1"); SymbolicFunction linkFunction(inVars, formulas); Description description(inVars); description.add(outVars); linkFunction.setDescription(description); setConditionedAndConditioningDistributionsAndLinkFunction(Uniform(), Uniform(), linkFunction); isParallel_ = false; } /* Parameters constructor */ ConditionalDistribution::ConditionalDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution) : Mixture() , conditionedDistribution_() , conditioningDistribution_() , linkFunction_() , discreteMarginalsIndices_(0) , diracMarginalsIndices_(0) , continuousMarginalsIndices_(0) , continuousLowerBounds_(0) , continuousUpperBounds_(0) , continuousNodes_() , continuousWeights_(0) , discreteNodes_() , diracValues_(0) { setName("ConditionalDistribution"); // The dimension and range are computed using the upper class through this call SymbolicFunction linkFunction(Description::BuildDefault(conditioningDistribution.getDimension(), "y"), Description::BuildDefault(conditioningDistribution.getDimension(), "y")); setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution, linkFunction); } /* Parameters constructor */ ConditionalDistribution::ConditionalDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction) : Mixture() , conditionedDistribution_() , conditioningDistribution_() , linkFunction_() , discreteMarginalsIndices_(0) , diracMarginalsIndices_(0) , continuousMarginalsIndices_(0) , continuousLowerBounds_(0) , continuousUpperBounds_(0) , continuousNodes_() , continuousWeights_(0) , discreteNodes_() , diracValues_(0) { setName("ConditionalDistribution"); // The dimension and range are computed using the upper class through this call setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution, linkFunction); } /* Comparison operator */ Bool ConditionalDistribution::operator ==(const ConditionalDistribution & other) const { if (this == &other) return true; return (conditionedDistribution_ == other.conditionedDistribution_) && (conditioningDistribution_ == other.conditioningDistribution_) && (linkFunction_ == other.linkFunction_); } Bool ConditionalDistribution::equals(const DistributionImplementation & other) const { const ConditionalDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ConditionalDistribution::__repr__() const { OSS oss(true); oss << "class=" << ConditionalDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " conditioned distribution=" << conditionedDistribution_ << " conditioning distribution=" << conditioningDistribution_ << " link function=" << linkFunction_; return oss; } String ConditionalDistribution::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(X with X|Theta~" << conditionedDistribution_.getImplementation()->getClassName() << "(Theta), Theta=f(Y), f=" << linkFunction_.getEvaluation()->__str__() << ", Y~" << conditioningDistribution_.__str__() << ")"; return oss; } /* Virtual constructor */ ConditionalDistribution * ConditionalDistribution::clone() const { return new ConditionalDistribution(*this); } /* Get one realization of the distribution */ Point ConditionalDistribution::getRealization() const { Distribution deconditioned(conditionedDistribution_); deconditioned.setParameter(linkFunction_(conditioningDistribution_.getRealization())); return deconditioned.getRealization(); } ConditionalDistribution::PointWithDescriptionCollection ConditionalDistribution::getParametersCollection() const { return conditioningDistribution_.getParametersCollection(); } /* Parameters value accessor */ Point ConditionalDistribution::getParameter() const { return conditioningDistribution_.getParameter(); } void ConditionalDistribution::setParameter(const Point & parameter) { Distribution conditioningDistribution(conditioningDistribution_); conditioningDistribution.setParameter(parameter); const Scalar w = getWeight(); Distribution conditionedDistribution(conditionedDistribution_); *this = ConditionalDistribution(conditionedDistribution, conditioningDistribution); setWeight(w); } Description ConditionalDistribution::getParameterDescription() const { return conditioningDistribution_.getParameterDescription(); } /* Conditioned distribution accessor */ void ConditionalDistribution::setConditionedDistribution(const Distribution & conditionedDistribution) { if (conditionedDistribution != conditionedDistribution_) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution, conditioningDistribution_, linkFunction_); } Distribution ConditionalDistribution::getConditionedDistribution() const { return conditionedDistribution_; } /* Conditioning distribution accessor */ void ConditionalDistribution::setConditioningDistribution(const Distribution & conditioningDistribution) { if (conditioningDistribution != conditioningDistribution_) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution_, conditioningDistribution, linkFunction_); } Distribution ConditionalDistribution::getConditioningDistribution() const { return conditioningDistribution_; } /* Link function accessor */ void ConditionalDistribution::setLinkFunction(const Function & linkFunction) { if (!(linkFunction == linkFunction_)) setConditionedAndConditioningDistributionsAndLinkFunction(conditionedDistribution_, conditioningDistribution_, linkFunction); } Function ConditionalDistribution::getLinkFunction() const { return linkFunction_; } void ConditionalDistribution::setConditionedAndConditioningDistributionsAndLinkFunction(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction) { const UnsignedInteger conditioningDimension = conditioningDistribution.getDimension(); const UnsignedInteger conditionedParametersDimension = conditionedDistribution.getParameterDimension(); // We must check that the conditioning distribution has the same dimension as the input dimension of the link function and that the conditioning distribution has the same dimension as the input dimension of the link function if (conditionedParametersDimension != linkFunction.getOutputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a link function with output dimension equal to the number of parameters of the conditioned distribution."; if (conditioningDimension != linkFunction.getInputDimension()) throw InvalidArgumentException(HERE) << "Error: expected a link function with input dimension equal to the conditioning distribution dimension."; conditionedDistribution_ = conditionedDistribution; conditioningDistribution_ = conditioningDistribution; linkFunction_ = linkFunction; setDimension(conditioningDimension + conditionedDistribution.getDimension()); // Start the discretisation into a Mixture const Interval bounds(conditioningDistribution.getRange()); // Here, implements some knowledge based selection of the integration method // For now, only basic Legendre // Gather the indices of the discrete marginals // Analyse the marginal distributions Collection< Sample > discreteSupports(0, Sample(0, 1)); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { const Distribution marginal(conditioningDistribution.getMarginal(i)); // Continuous marginal: get the associated range if (marginal.isContinuous()) { continuousMarginalsIndices_.add(i); continuousLowerBounds_.add(marginal.getRange().getLowerBound()[0]); continuousUpperBounds_.add(marginal.getRange().getUpperBound()[0]); } // Continuous marginal // Discrete marginal else { const Sample support(marginal.getSupport()); // Special case for Dirac distributions. It can be either a Dirac distribution or a UserDefined distribution, so we check the support directly. if (support.getSize() == 1) { diracMarginalsIndices_.add(i); diracValues_.add(support[0][0]); } // Dirac marginal // Truly random discrete distribution else { discreteMarginalsIndices_.add(i); discreteSupports.add(support); } // Random discrete marginal } // Discrete marginal } // Loop over the marginal distributions // Integration measure for the continuous parameters const UnsignedInteger continuousDimension = continuousMarginalsIndices_.getSize(); UnsignedInteger continuousAtomsNumber = 0; if (continuousDimension > 0) { const ComposedDistribution measure(Collection< Distribution >(continuousDimension, Uniform())); const UnsignedInteger maximumNumber = static_cast< UnsignedInteger > (round(std::pow(ResourceMap::GetAsUnsignedInteger( "ConditionalDistribution-MaximumIntegrationNodesNumber" ), 1.0 / continuousDimension))); const UnsignedInteger candidateNumber = ResourceMap::GetAsUnsignedInteger( "ConditionalDistribution-MarginalIntegrationNodesNumber" ); if (candidateNumber > maximumNumber) LOGWARN(OSS() << "Warning! The requested number of marginal integration nodes=" << candidateNumber << " would lead to an excessive number of integration nodes=" << std::pow(maximumNumber, 1.0 * continuousDimension) << ". It has been reduced to " << maximumNumber << ". You should increase the ResourceMap key \"ConditionalDistribution-MaximumIntegrationNodesNumber\""); GaussProductExperiment experiment(measure, Indices(continuousDimension, std::min(maximumNumber, candidateNumber))); continuousNodes_ = experiment.generateWithWeights(continuousWeights_); // Also adapt the integration nodes number in the upper class setIntegrationNodesNumber(std::min(maximumNumber, candidateNumber)); // Normalization factor for the weights // Not needed as the Mixture will be automatically normalized // const Scalar normalizationFactor(Interval(continuousLowerBounds, continuousUpperBounds).getNumericalVolume()); continuousAtomsNumber = continuousNodes_.getSize(); } // continuousDimension > 0 // Integration measure for the discrete parameters const UnsignedInteger discreteDimension = discreteMarginalsIndices_.getSize(); UnsignedInteger discreteAtomsNumber = 0; if (discreteDimension > 0) { Point levels(discreteDimension); for (UnsignedInteger i = 0; i < discreteDimension; ++i) levels[i] = discreteSupports[i].getSize() - 2; const Sample fractions(Box(levels).generate()); discreteAtomsNumber = fractions.getSize(); discreteNodes_ = Sample(discreteAtomsNumber, discreteDimension); for (UnsignedInteger i = 0; i < discreteAtomsNumber; ++i) { Point discreteNode(discreteDimension); for (UnsignedInteger j = 0; j < discreteDimension; ++j) { const Scalar rho = fractions[i][j]; const UnsignedInteger length = discreteSupports[j].getSize(); const UnsignedInteger index = static_cast(round(rho * (length - 1))); discreteNode[j] = discreteSupports[j][index][0]; } discreteNodes_[i] = discreteNode; } // Loop over the discrete atoms } // discreteDimension > 0 // Integration measure for the Dirac parameters const UnsignedInteger diracDimension = diracMarginalsIndices_.getSize(); // Build the equivalent mixture // Zeroth case: all Dirac if (diracDimension == conditioningDimension) { Collection< Distribution > atoms(1, conditionedDistribution); atoms[0].setParameter(diracValues_); setDistributionCollection(atoms); return; } // First case: only Dirac and stochastic discrete marginals with at least one stochastic discrete marginal if (continuousDimension == 0) { const UnsignedInteger totalSize = discreteAtomsNumber; Collection< Distribution > atoms(totalSize); Point y(conditioningDimension); UnsignedInteger atomIndex = 0; // First, the Dirac components. for (UnsignedInteger i = 0; i < diracDimension; ++i) y[diracMarginalsIndices_[i]] = diracValues_[i]; // Second, the discrete components // For each combination of the discrete components for (UnsignedInteger i = 0; i < discreteAtomsNumber; ++i) { Point currentY(y); // Get the discrete values const Point discreteNode(discreteNodes_[i]); for (UnsignedInteger j = 0; j < discreteDimension; ++j) currentY[discreteMarginalsIndices_[j]] = discreteNode[j]; const Scalar w = conditioningDistribution.computePDF(currentY); Distribution dist(conditionedDistribution); dist.setWeight(w); dist.setParameter(linkFunction_(currentY)); atoms[atomIndex] = dist; ++atomIndex; } // Discrete measure // Now, update the underlying Mixture setDistributionCollection(atoms); return; } // No continuous marginal // Second case: only Dirac and continuous marginals with at least one continuous marginal if (discreteDimension == 0) { const UnsignedInteger totalSize = continuousAtomsNumber; Collection< Distribution > atoms(totalSize); Point y(conditioningDimension); UnsignedInteger atomIndex = 0; // First, the Dirac components for (UnsignedInteger i = 0; i < diracDimension; ++i) y[diracMarginalsIndices_[i]] = diracValues_[i]; // Continuous part using Gauss integration for (UnsignedInteger i = 0; i < continuousAtomsNumber; ++i) { Point currentY(y); // Complete the filling of theta using the Gauss integration node const Point continuousNode(continuousNodes_[i]); for (UnsignedInteger j = 0; j < continuousDimension; ++j) currentY[continuousMarginalsIndices_[j]] = continuousLowerBounds_[j] + 0.5 * (1.0 + continuousNode[j]) * (continuousUpperBounds_[j] - continuousLowerBounds_[j]); const Scalar w = conditioningDistribution.computePDF(currentY) * continuousWeights_[i]; Distribution dist(conditionedDistribution); dist.setWeight(w); dist.setParameter(linkFunction_(currentY)); atoms[atomIndex] = dist; LOGDEBUG(OSS() << "i=" << i << ", w=" << w << ", Y=" << currentY << ", dist=" << dist.__str__()); ++atomIndex; } // Continuous measure // Now, update the underlying Mixture setDistributionCollection(atoms); return; } // No discrete marginal // Third case: Dirac, stochastic discrete and continuous marginal distributions with at least one stochastic discrete marginal and one continuous marginal const UnsignedInteger totalSize = continuousAtomsNumber * discreteAtomsNumber; Collection< Distribution > atoms(totalSize); Point y(conditioningDimension); UnsignedInteger atomIndex = 0; // First, the Dirac components for (UnsignedInteger i = 0; i < diracDimension; ++i) y[diracMarginalsIndices_[i]] = diracValues_[i]; // Second, the discrete components // For each combination of the discrete components for (UnsignedInteger i = 0; i < discreteAtomsNumber; ++i) { Point currentY(y); // Get the discrete values const Point discreteNode(discreteNodes_[i]); for (UnsignedInteger j = 0; j < discreteDimension; ++j) currentY[discreteMarginalsIndices_[j]] = discreteNode[j]; // Now, complete by the discretization of the continuous part using Gauss integration for (UnsignedInteger j = 0; j < continuousAtomsNumber; ++j) { // Complete the filling of theta using the Gauss integration node const Point continuousNode(continuousNodes_[j]); for (UnsignedInteger k = 0; k < continuousDimension; ++k) currentY[continuousMarginalsIndices_[k]] = continuousLowerBounds_[k] + 0.5 * (1.0 + continuousNode[k]) * (continuousUpperBounds_[k] - continuousLowerBounds_[k]); const Scalar w = conditioningDistribution.computePDF(currentY) * continuousWeights_[j]; Distribution dist(conditionedDistribution); dist.setWeight(w); dist.setParameter(linkFunction_(currentY)); atoms[atomIndex] = dist; ++atomIndex; } // Continuous atoms } // Overall discretization // Now, update the underlying Mixture setDistributionCollection(atoms); } /* Compute the expectation of f(\theta)1_{\theta\leq \theta^*} with respect to the prior distribution of \theta */ Point ConditionalDistribution::computeExpectation(const Function & f, const Point & thetaStar) const { const Scalar epsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); const UnsignedInteger conditioningDimension = conditioningDistribution_.getDimension(); if (f.getInputDimension() != conditioningDimension) throw InvalidArgumentException(HERE) << "Error: the given function must have an input dimension=" << f.getInputDimension() << " equal to the conditioning dimension=" << conditioningDimension; if (thetaStar.getDimension() != conditioningDimension) throw InvalidArgumentException(HERE) << "Error: the given upper bound must have a dimension=" << thetaStar.getDimension() << " equal to the conditioning dimension=" << conditioningDimension; const UnsignedInteger outputDimension = f.getOutputDimension(); Point result(outputDimension); // Here, we reuse the analysis made in the underlying conditional distribution const UnsignedInteger continuousDimension = continuousMarginalsIndices_.getSize(); const UnsignedInteger continuousAtomsNumber = continuousNodes_.getSize(); const UnsignedInteger discreteDimension = discreteMarginalsIndices_.getSize(); const UnsignedInteger discreteAtomsNumber = discreteNodes_.getSize(); const UnsignedInteger diracDimension = diracMarginalsIndices_.getSize(); // Compute the expectation by numerical integration // Zeroth case: all Dirac if (diracDimension == conditioningDimension) { for (UnsignedInteger i = 0; i < diracDimension; ++i) if (diracValues_[i] > thetaStar[i] + epsilon) return result; result = f(diracValues_); return result; } // First case: no continuous marginal if (continuousDimension == 0) { Point theta(conditioningDimension); // First, the Dirac components. It can be either a Dirac distribution or a userDefined distribution, so we check the support directly for (UnsignedInteger i = 0; i < diracDimension; ++i) { const Scalar value = diracValues_[i]; // If the hyper rectangle does not intersect the manifold that supports the total mass, then value = 0 if (value > thetaStar[i] + epsilon) return result; theta[diracMarginalsIndices_[i]] = value; } // Second, the discrete components // For each combination of the discrete components for (UnsignedInteger i = 0; i < discreteAtomsNumber; ++i) { Point currentTheta(theta); // Get the discrete values const Point discreteNode(discreteNodes_[i]); Bool rejectNode = false; for (UnsignedInteger j = 0; j < discreteDimension; ++j) { const Scalar value = discreteNode[j]; currentTheta[discreteMarginalsIndices_[j]] = value; rejectNode = (value > thetaStar[i] + epsilon); if (rejectNode) break; } // Skip the current integration point if the current sub-manifold is outside of the integration region if (rejectNode) continue; const Scalar w = conditioningDistribution_.computePDF(currentTheta); result += w * f(currentTheta); } // Discrete measure return result; } // No continuous marginal // Second case: no discrete marginal if (discreteDimension == 0) { // The current value of theta in the discretization Point theta(conditioningDimension); // The sub point associated with the continuous components Point subPoint(continuousDimension); for (UnsignedInteger i = 0; i < continuousDimension; ++i) subPoint[i] = std::min(continuousUpperBounds_[i], thetaStar[continuousMarginalsIndices_[i]]); // First, the Dirac components for (UnsignedInteger i = 0; i < diracDimension; ++i) { const Scalar value = diracValues_[i]; // If the hyper rectangle does not intersect the manifold that supports the total mass, then cdf = 0 if (value > thetaStar[i] + epsilon) return result; theta[diracMarginalsIndices_[i]] = value; } // Continuous part using Gauss integration for (UnsignedInteger i = 0; i < continuousAtomsNumber; ++i) { Point currentTheta(theta); // Complete the filling of theta using the Gauss integration node const Point continuousNode(continuousNodes_[i]); for (UnsignedInteger j = 0; j < continuousDimension; ++j) currentTheta[continuousMarginalsIndices_[j]] = continuousLowerBounds_[j] + 0.5 * (1.0 + continuousNode[j]) * (subPoint[j] - continuousLowerBounds_[j]); // Current contribution to the CDF const Scalar w = conditioningDistribution_.computePDF(currentTheta) * continuousWeights_[i]; const Point fTheta(f(currentTheta)); result += w * f(currentTheta); } // Continuous measure result *= Interval(continuousLowerBounds_, subPoint).getNumericalVolume(); return result; } // No discrete marginal // Third case: continuous and discrete marginals Point theta(conditioningDimension); // The sub point associated with the continuous components Point subPoint(continuousDimension); for (UnsignedInteger i = 0; i < continuousDimension; ++i) subPoint[i] = std::min(continuousUpperBounds_[i], thetaStar[continuousMarginalsIndices_[i]]); // First, the Dirac components for (UnsignedInteger i = 0; i < diracDimension; ++i) { const Scalar value = diracValues_[i]; // If the hyper rectangle does not intersect the manifold that supports the total mass, then cdf = 0 if (value > thetaStar[i] + epsilon) return result; theta[diracMarginalsIndices_[i]] = value; } // Second, the discrete components // For each combination of the discrete components for (UnsignedInteger i = 0; i < discreteAtomsNumber; ++i) { Point currentTheta(theta); // Get the discrete values const Point discreteNode(discreteNodes_[i]); Bool rejectNode; for (UnsignedInteger j = 0; j < discreteDimension; ++j) { const Scalar value = discreteNode[j]; currentTheta[discreteMarginalsIndices_[j]] = value; rejectNode = (value > thetaStar[i] + epsilon); if (rejectNode) break; } // Skip the current integration point if the current sub-manifold is outside of the integration region if (rejectNode) continue; // Now, complete by the discretization of the continuous part using Gauss integration for (UnsignedInteger j = 0; j < continuousAtomsNumber; ++j) { // Complete the filling of theta using the Gauss integration node const Point continuousNode(continuousNodes_[j]); for (UnsignedInteger k = 0; k < continuousDimension; ++k) currentTheta[continuousMarginalsIndices_[k]] = continuousLowerBounds_[k] + 0.5 * (1.0 + continuousNode[k]) * (subPoint[k] - continuousLowerBounds_[k]); const Scalar w = conditioningDistribution_.computePDF(currentTheta) * continuousWeights_[j]; const Point fTheta(f(currentTheta)); result += w * f(currentTheta); } // Continuous atoms } // Overall discretization result *= Interval(continuousLowerBounds_, subPoint).getNumericalVolume(); return result; } /* Get the i-th marginal distribution */ ConditionalDistribution::Implementation ConditionalDistribution::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; if (dimension == 1) return clone(); // Waiting for a better implementation return Mixture::getMarginal(i); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ ConditionalDistribution::Implementation ConditionalDistribution::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); // Waiting for a better implementation return Mixture::getMarginal(indices); } // getMarginal(Indices) /* Method save() stores the object through the StorageManager */ void ConditionalDistribution::save(Advocate & adv) const { Mixture::save(adv); adv.saveAttribute( "conditionedDistribution_", conditionedDistribution_ ); adv.saveAttribute( "conditioningDistribution_", conditioningDistribution_ ); adv.saveAttribute( "discreteMarginalsIndices_", discreteMarginalsIndices_ ); adv.saveAttribute( "diracMarginalsIndices_", diracMarginalsIndices_ ); adv.saveAttribute( "continuousMarginalsIndices_", continuousMarginalsIndices_ ); adv.saveAttribute( "continuousLowerBounds_", continuousLowerBounds_ ); adv.saveAttribute( "continuousUpperBounds_", continuousUpperBounds_ ); adv.saveAttribute( "continuousNodes_", continuousNodes_ ); adv.saveAttribute( "continuousWeights_", continuousWeights_ ); adv.saveAttribute( "discreteNodes_", discreteNodes_ ); adv.saveAttribute( "diracValues_", diracValues_ ); } /* Method load() reloads the object from the StorageManager */ void ConditionalDistribution::load(Advocate & adv) { Mixture::load(adv); adv.loadAttribute( "conditionedDistribution_", conditionedDistribution_ ); adv.loadAttribute( "conditioningDistribution_", conditioningDistribution_ ); adv.loadAttribute( "discreteMarginalsIndices_", discreteMarginalsIndices_ ); adv.loadAttribute( "diracMarginalsIndices_", diracMarginalsIndices_ ); adv.loadAttribute( "continuousMarginalsIndices_", continuousMarginalsIndices_ ); adv.loadAttribute( "continuousLowerBounds_", continuousLowerBounds_ ); adv.loadAttribute( "continuousUpperBounds_", continuousUpperBounds_ ); adv.loadAttribute( "continuousNodes_", continuousNodes_ ); adv.loadAttribute( "continuousWeights_", continuousWeights_ ); adv.loadAttribute( "discreteNodes_", discreteNodes_ ); adv.loadAttribute( "diracValues_", diracValues_ ); // The range is computed using the upper class } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/CumulativeDistributionNetwork.cxx000066400000000000000000000343051307543307100305650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the multivariate distribution based on a * bipartite graph and a collection of distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CumulativeDistributionNetwork.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CumulativeDistributionNetwork); static const Factory Factory_CumulativeDistributionNetwork; /* Default constructor */ CumulativeDistributionNetwork::CumulativeDistributionNetwork() : DistributionImplementation() , distributionCollection_(1) , graph_() { setName("CumulativeDistributionNetwork"); // Set an empty range setDistributionCollection(DistributionCollection(1)); } /* Parameters constructor */ CumulativeDistributionNetwork::CumulativeDistributionNetwork(const DistributionCollection & coll, const BipartiteGraph & graph) : DistributionImplementation() , distributionCollection_() , graph_(graph) { setName("CumulativeDistributionNetwork"); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling setDistributionCollection( coll ); } /* Comparison operator */ Bool CumulativeDistributionNetwork::operator ==(const CumulativeDistributionNetwork & other) const { if (this == &other) return true; return (distributionCollection_ == other.distributionCollection_) && (graph_ == other.graph_); } Bool CumulativeDistributionNetwork::equals(const DistributionImplementation & other) const { const CumulativeDistributionNetwork* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String CumulativeDistributionNetwork::__repr__() const { OSS oss(true); oss << "class=" << CumulativeDistributionNetwork::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " distributionCollection=" << distributionCollection_ << " graph=" << graph_; return oss; } String CumulativeDistributionNetwork::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(["; String separator(""); for (UnsignedInteger i = 0; i < distributionCollection_.getSize(); ++i) { oss << separator << distributionCollection_[i] << ")"; separator = ", "; } oss << "]" << graph_.__str__() << ")"; return oss; } /* Compute the numerical range of the distribution given the parameters values */ void CumulativeDistributionNetwork::computeRange() { const UnsignedInteger size = distributionCollection_.getSize(); if (size == 0) return; const UnsignedInteger dim = getDimension(); const Point infiniteLowerBounds(dim, -SpecFunc::MaxScalar); const Point infiniteUpperBounds(dim, SpecFunc::MaxScalar); const Interval::BoolCollection infiniteLowerBoundsFlags(dim, false); const Interval::BoolCollection infiniteUpperBoundsFlags(dim, false); Interval range(infiniteLowerBounds, infiniteUpperBounds, infiniteLowerBoundsFlags, infiniteUpperBoundsFlags); for (UnsignedInteger i = 0; i < size; ++i) { Point lowerBounds(infiniteLowerBounds); Point upperBounds(infiniteUpperBounds); Interval::BoolCollection lowerBoundsFlags(infiniteLowerBoundsFlags); Interval::BoolCollection upperBoundsFlags(infiniteUpperBoundsFlags); Interval cdfRange(distributionCollection_[i].getRange()); const Indices indices(graph_[i]); for (UnsignedInteger j = 0; j < indices.getSize(); ++j) { const UnsignedInteger index = indices[j]; lowerBounds[index] = cdfRange.getLowerBound()[j]; upperBounds[index] = cdfRange.getUpperBound()[j]; lowerBoundsFlags[index] = cdfRange.getFiniteLowerBound()[j]; upperBoundsFlags[index] = cdfRange.getFiniteUpperBound()[j]; range = range.intersect(Interval(lowerBounds, upperBounds, lowerBoundsFlags, upperBoundsFlags)); } } // Red nodes setRange(range); } /* Distribution collection accessor */ void CumulativeDistributionNetwork::setDistributionCollection(const DistributionCollection & coll) { const UnsignedInteger size = coll.getSize(); // Check the number of distributions if (size != graph_.getRedNodes().getSize()) throw InvalidArgumentException(HERE) << "Error: the given collection of distributions has a size=" << size << " different from the number of red nodes=" << graph_.getRedNodes().getSize(); // Check the dimension of the distributions Bool parallel = true; for (UnsignedInteger i = 0; i < size; ++ i) { if (coll[i].getDimension() != graph_[i].getSize()) throw InvalidArgumentException(HERE) << "Error: the distribution " << i << " has a dimension=" << size << " which is different from the number of links=" << graph_[i].getSize() << " starting from red node " << i; parallel = parallel && coll[i].getImplementation()->isParallel(); } setParallel(parallel); distributionCollection_ = coll; LOGINFO(OSS() << "graph=" << graph_ << ", dim=" << graph_.getBlackNodes().getSize()); setDimension(graph_.getBlackNodes().getSize()); computeRange(); } /* Distribution collection accessor */ const CumulativeDistributionNetwork::DistributionCollection & CumulativeDistributionNetwork::getDistributionCollection() const { return distributionCollection_; } /* Graph accessor */ void CumulativeDistributionNetwork::setGraph(const BipartiteGraph & graph) { const UnsignedInteger size = distributionCollection_.getSize(); // Check the number of distributions if (size != graph.getRedNodes().getSize()) throw InvalidArgumentException(HERE) << "Error: the given graph has a number of red nodes=" << graph_.getRedNodes().getSize() << " different from the collection of distributions size=" << size; // Check the dimension of the distributions for (UnsignedInteger i = 0; i < size; ++i) if (distributionCollection_[i].getDimension() != graph_[i].getSize()) throw InvalidArgumentException(HERE) << "Error: the number of links=" << graph[i].getSize() << " starting from red node " << i << " is different from distribution " << i << " dimension=" << size; graph_ = graph; } /* Graph accessor */ const BipartiteGraph & CumulativeDistributionNetwork::getGraph() const { return graph_; } /* Virtual constructor */ CumulativeDistributionNetwork * CumulativeDistributionNetwork::clone() const { return new CumulativeDistributionNetwork(*this); } /* Get one realization of the CumulativeDistributionNetwork */ Point CumulativeDistributionNetwork::getRealization() const { return DistributionImplementation::getRealizationByInversion(); } /* Get many realizations of the CumulativeDistributionNetwork */ Sample CumulativeDistributionNetwork::getSample(const UnsignedInteger size) const { return DistributionImplementation::getSampleByInversion(size); } /* Extract the components of a full dimension point to feed the index distribution */ Point CumulativeDistributionNetwork::reducePoint(const Point & point, const UnsignedInteger index) const { const Indices indices(graph_[index]); const UnsignedInteger size = indices.getSize(); Point reducedPoint(size); for (UnsignedInteger i = 0; i < size; ++i) reducedPoint[i] = point[indices[i]]; return reducedPoint; } /* Get the PDF of the CumulativeDistributionNetwork */ Scalar CumulativeDistributionNetwork::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return DistributionImplementation::computePDF(point); } /* Get the CDF of the CumulativeDistributionNetwork */ Scalar CumulativeDistributionNetwork::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar cdf = distributionCollection_[0].computeCDF(reducePoint(point, 0)); const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 1; i < size; ++i) cdf *= distributionCollection_[i].computeCDF(reducePoint(point, i)); return cdf; } /* Get the i-th marginal distribution */ CumulativeDistributionNetwork::Implementation CumulativeDistributionNetwork::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case DistributionCollection contributors(0); BipartiteGraph marginalGraph(0); for (UnsignedInteger j = 0; j < distributionCollection_.getSize(); ++j) { // Check if the current contributor contains k UnsignedInteger localIndex = dimension; Indices currentIndices(graph_[j]); for (UnsignedInteger k = 0; k < currentIndices.getSize(); ++k) if (i == currentIndices[k]) { localIndex = k; break; } // If the marginal index is in the current indices if (localIndex < dimension) { contributors.add(distributionCollection_[j].getMarginal(localIndex)); marginalGraph.add(Indices(1, 0)); } } // Loop over the CDFs if (contributors.getSize() == 1) return contributors[0].getImplementation()->clone(); return CumulativeDistributionNetwork(contributors, marginalGraph).clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ CumulativeDistributionNetwork::Implementation CumulativeDistributionNetwork::getMarginal(const Indices & indices) const { LOGINFO(OSS() << "in getMarginal(" << indices << "), contributors=" << distributionCollection_ << ", graph=" << graph_); if (indices.getSize() == 1) return getMarginal(indices[0]); const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; return DistributionImplementation::getMarginal(indices); /* // General case DistributionCollection contributors(0); BipartiteGraph marginalGraph(0); for (UnsignedInteger j = 0; j < distributionCollection_.getSize(); ++j) { // Check if the current contributor contains k Indices localIndices(0); Indices currentIndices(graph_[j]); LOGINFO(OSS() << "j=" << j << ", currentIndices=" << currentIndices); for (UnsignedInteger k = 0; k < indices.getSize(); ++k) { const UnsignedInteger i = indices[k]; for (UnsignedInteger n = 0; n < currentIndices.getSize(); ++n) if (i == currentIndices[n]) { localIndices.add(n); break; } LOGINFO(OSS() << "k=" << k << ", localIndices=" << localIndices); } // Loop over the marginal indices LOGINFO(OSS() << "j=" << j << ", currentIndices=" << currentIndices << ", localIndices=" << localIndices); // If the marginal index is in the current indices if (localIndices.getSize() > 0) { contributors.add(distributionCollection_[j].getMarginal(localIndices)); Indices graphPart(localIndices.getSize()); graphPart.fill(); marginalGraph.add(graphPart); } } // Loop over the CDFs if (contributors.getSize() == 1) return contributors[0].getImplementation()->clone(); LOGINFO(OSS() << "in getMarginal(" << indices << "), marginal contributors=" << contributors << ", marginalGraph=" << marginalGraph); return CumulativeDistributionNetwork(contributors, marginalGraph).clone(); */ } /* Check if the distribution is continuous */ Bool CumulativeDistributionNetwork::isContinuous() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isContinuous()) return false; return true; } /* Check if the distribution is discrete */ Bool CumulativeDistributionNetwork::isDiscrete() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isDiscrete()) return false; return true; } /* Check if the distribution is integral */ Bool CumulativeDistributionNetwork::isIntegral() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isIntegral()) return false; return true; } /* Tell if the distribution has independent copula */ Bool CumulativeDistributionNetwork::hasIndependentCopula() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].hasIndependentCopula()) return false; return true; } /* Method save() stores the object through the StorageManager */ void CumulativeDistributionNetwork::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distributionCollection_", distributionCollection_ ); adv.saveAttribute( "graph_", graph_ ); } /* Method load() reloads the object from the StorageManager */ void CumulativeDistributionNetwork::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "distributionCollection_", distributionCollection_ ); adv.loadAttribute( "graph_", graph_ ); // To compute the range computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Dirac.cxx000066400000000000000000000256751307543307100235310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Dirac distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Dirac.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Dirac); static const Factory Factory_Dirac; /* Default constructor */ Dirac::Dirac() : DiscreteDistribution() , point_(1, 0.0) { setName( "Dirac" ); // We set the dimension of the Dirac distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ Dirac::Dirac(const Scalar p) : DiscreteDistribution() , point_(1, p) { setName( "Dirac" ); // We set the dimension of the Dirac distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ Dirac::Dirac(const Point & point) : DiscreteDistribution() , point_(point) { setName( "Dirac" ); // We set the dimension of the Dirac distribution setDimension( point.getDimension() ); computeRange(); } /* Comparison operator */ Bool Dirac::operator ==(const Dirac & other) const { if (this == &other) return true; return point_ == other.point_; } Bool Dirac::equals(const DistributionImplementation & other) const { const Dirac* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Dirac::__repr__() const { OSS oss; oss << "class=" << Dirac::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " point=" << point_; return oss; } String Dirac::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(point = " << point_.__str__() << ")"; return oss; } /* Virtual constructor */ Dirac * Dirac::clone() const { return new Dirac(*this); } /* Get one realization of the distribution */ Point Dirac::getRealization() const { return point_; } /* Get a sample of the distribution */ Sample Dirac::getSample(const UnsignedInteger size) const { return Sample(size, point_); } /* Get the PDF of the distribution */ Scalar Dirac::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if ((point - point_).norm() <= supportEpsilon_) return 1.0; return 0.0; } /* Get the CDF of the distribution */ Scalar Dirac::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // If at least one component is too small for (UnsignedInteger i = 0; i < dimension; ++i) if (point_[i] > point[i]) return 0.0; return 1.0; } /* Compute the multivariate quantile of the distribution */ Point Dirac::computeQuantile(const Scalar prob, const Bool tail) const { return point_; } /* Get the PDF gradient of the distribution */ Point Dirac::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Dirac::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point Dirac::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Dirac::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution */ Scalar Dirac::computeScalarQuantile(const Scalar prob, const Bool tail) const { return point_[0]; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Dirac::computeCharacteristicFunction(const Scalar u) const { return std::exp(computeLogCharacteristicFunction(u)); } Complex Dirac::computeLogCharacteristicFunction(const Scalar u) const { if (getDimension() != 1) throw NotYetImplementedException(HERE) << "In Dirac::computeLogCharacteristicFunction(const Scalar u) const: the computeCharacteristicFunction() method is implemented for 1D distributions only."; const Complex value(0.0, u * point_[0]); return value; } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Dirac::computeGeneratingFunction(const Complex & z) const { return std::exp(computeLogGeneratingFunction(z)); } Complex Dirac::computeLogGeneratingFunction(const Complex & z) const { if (getDimension() != 1) throw NotYetImplementedException(HERE) << "In Dirac::computeLogGeneratingFunction(const Complex & z) const: the computeGeneratingFunction() method is implemented for 1D distributions only."; return point_[0] * std::log(z); } /* Compute the mean of the distribution */ void Dirac::computeMean() const { mean_ = point_; isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Dirac::getStandardDeviation() const { return Point(getDimension(), 0.0); } /* Get the skewness of the distribution */ Point Dirac::getSkewness() const { return Point(getDimension(), 0.0); } /* Get the kurtosis of the distribution */ Point Dirac::getKurtosis() const { return Point(getDimension(), 0.0); } /* Get the moments of the standardized distribution */ Point Dirac::getStandardMoment(const UnsignedInteger n) const { const UnsignedInteger dimension = getDimension(); Point result(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = std::pow(point_[i], static_cast(n)); return result; } /* Compute the covariance of the distribution */ void Dirac::computeCovariance() const { covariance_ = CovarianceMatrix(getDimension()); isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Dirac::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; if (interval.contains(point_)) return Sample(1, point_); return Sample(0, getDimension()); } /* Parameters value and description accessor */ Dirac::PointWithDescriptionCollection Dirac::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { PointWithDescription point(1); Description description(point.getDimension()); point[0] = point_[i]; description[0] = String(OSS() << "point_" << i); point.setDescription(description); point.setName(getDescription()[i]); parameters[i] = point; } return parameters; } void Dirac::setParametersCollection(const PointCollection & parametersCollection) { const Scalar w = getWeight(); const UnsignedInteger dimension = parametersCollection.getSize(); Point point(dimension); // The ith component of the point is supposed to be the first component of the point // at position i in the parameters collection for (UnsignedInteger i = 0; i < dimension; ++i) point[i] = parametersCollection[i][0]; *this = Dirac(point); setWeight(w); } Point Dirac::getParameter() const { return point_; } void Dirac::setParameter(const Point & parameter) { const Scalar w = getWeight(); *this = Dirac(parameter); setWeight(w); } Description Dirac::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); Description description(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { description[i] = (OSS() << "point_" << i); } return description; } /* Point accessor */ void Dirac::setPoint(const Point & point) { point_ = point; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } /* Point accessor */ Point Dirac::getPoint() const { return point_; } /* Compute the numerical range of the distribution given the parameters values */ void Dirac::computeRange() { setRange(Interval(point_, point_)); } /* Get the i-th marginal distribution */ Dirac::Implementation Dirac::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; if (dimension == 1) return clone(); return new Dirac(point_[i]); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Dirac::Implementation Dirac::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); const UnsignedInteger outputDimension = indices.getSize(); Point pointMarginal(outputDimension); for (UnsignedInteger i = 0; i < outputDimension; ++i) pointMarginal[i] = point_[indices[i]]; return new Dirac(pointMarginal); } // getMarginal(Indices) /* Check if the distribution is elliptical */ Bool Dirac::isElliptical() const { return true; } /* Tell if the distribution has an elliptical copula */ Bool Dirac::hasEllipticalCopula() const { return true; } /* Tell if the distribution has independent copula */ Bool Dirac::hasIndependentCopula() const { return true; } /* Method save() stores the object through the StorageManager */ void Dirac::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "point_", point_ ); } /* Method load() reloads the object from the StorageManager */ void Dirac::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "point_", point_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/DiracFactory.cxx000066400000000000000000000055361307543307100250530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Dirac distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DiracFactory.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DiracFactory); static const Factory Factory_DiracFactory; /* Default constructor */ DiracFactory::DiracFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ DiracFactory * DiracFactory::clone() const { return new DiracFactory(*this); } /* Here is the interface that all derived class must implement */ DiracFactory::Implementation DiracFactory::build(const Sample & sample) const { return buildAsDirac(sample).clone(); } DiracFactory::Implementation DiracFactory::build(const Point & parameters) const { return buildAsDirac(parameters).clone(); } DiracFactory::Implementation DiracFactory::build() const { return buildAsDirac().clone(); } Dirac DiracFactory::buildAsDirac(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Dirac distribution from an empty sample"; Point point(sample[0]); // Check that all the points are equal up to the discrete distribution support precision const Scalar supportEpsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); for (UnsignedInteger i = 1; i < size; ++i) if ((point - sample[i]).norm() > supportEpsilon) throw InvalidArgumentException(HERE) << "Error: cannot build a Dirac distribution from a sample containing different points"; Dirac result(point); result.setDescription(sample.getDescription()); return result; } Dirac DiracFactory::buildAsDirac(const Point & parameters) const { try { Dirac distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Dirac distribution from the given parameters"; } } Dirac DiracFactory::buildAsDirac() const { return Dirac(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Dirichlet.cxx000066400000000000000000000526471307543307100244150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Dirichlet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Indices.hxx" #include "openturns/Dirichlet.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/JacobiFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Dirichlet); static const Factory Factory_Dirichlet; /* Default constructor */ Dirichlet::Dirichlet() : ContinuousDistribution() , theta_(0) , sumTheta_(0.0) , normalizationFactor_(0.0) , isInitializedCDF_(false) , integrationNodes_(0) , integrationWeights_(0) { setName("Dirichlet"); setTheta(Point(2, 1.0)); isParallel_ = false; } /* Parameters constructor */ Dirichlet::Dirichlet(const Point & theta) : ContinuousDistribution() , theta_(0) , sumTheta_(0.0) , normalizationFactor_(0.0) , isInitializedCDF_(false) , integrationNodes_(0) , integrationWeights_(0) { setName("Dirichlet"); setTheta(theta); isParallel_ = false; } /* Comparison operator */ Bool Dirichlet::operator ==(const Dirichlet & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool Dirichlet::equals(const DistributionImplementation & other) const { const Dirichlet* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Dirichlet::__repr__() const { OSS oss(true); oss << "class=" << Dirichlet::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } String Dirichlet::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(theta = " << theta_.__str__() << ")"; return oss; } /* Virtual constructor */ Dirichlet * Dirichlet::clone() const { return new Dirichlet(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Dirichlet::computeRange() { setRange(Interval(Point(theta_.getSize() - 1, 0.0), Point(theta_.getSize() - 1, 1.0))); } /* Get one realization of the distribution. We use the representation: * X_k = Y_k / (Y_1 + ... + Y_{d+1}) where the Y_i are independent and * Y_i has a Gamma(theta_i) distribution */ Point Dirichlet::getRealization() const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return Point(1, DistFunc::rBeta(theta_[0], theta_[1])); Point realization(dimension); Scalar sum = DistFunc::rGamma(theta_[dimension]); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar yI = DistFunc::rGamma(theta_[i]); sum += yI; realization[i] = yI; } return realization * (1.0 / sum); } /* Get the PDF of the distribution */ Scalar Dirichlet::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar logPDF = computeLogPDF(point); if (logPDF == SpecFunc::LogMinScalar) return 0.0; return std::exp(logPDF); } Scalar Dirichlet::computeLogPDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar sum = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar xI = point[i]; if (xI <= 0.0) return SpecFunc::LogMinScalar; sum += xI; } if (sum >= 1.0) return SpecFunc::LogMinScalar; Scalar logPDF = normalizationFactor_ + (theta_[dimension] - 1.0) * log1p(-sum); for (UnsignedInteger i = 0; i < dimension; ++i) logPDF += (theta_[i] - 1.0) * std::log(point[i]); return logPDF; } /* Initialize the integration routine */ void Dirichlet::initializeIntegration() const { const UnsignedInteger dimension = getDimension(); // Initialization at the first call static const UnsignedInteger N(ResourceMap::GetAsUnsignedInteger("Dirichlet-DefaultIntegrationSize")); // Do we have to initialize the CDF data? if (!isInitializedCDF_) { integrationNodes_ = PointCollection(0); integrationWeights_ = PointCollection(0); for (UnsignedInteger i = 0; i < dimension; ++i) { Point marginalWeights; Point marginalNodes(JacobiFactory(0, theta_[i] - 1.0).getNodesAndWeights(N, marginalWeights)); integrationNodes_.add(marginalNodes); integrationWeights_.add(marginalWeights); } isInitializedCDF_ = true; } // !isInitialized } /* Get the CDF of the distribution */ Scalar Dirichlet::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (dimension == 1) { if (point[0] <= 0.0) return 0.0; if (point[0] >= 1.0) return 1.0; return DistFunc::pBeta(theta_[0], theta_[1], point[0]); } // First, the trivial cases Bool oneNegative = false; Bool allPositive = true; Bool allGreaterThanOne = true; Scalar sum = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar xI = point[i]; oneNegative = oneNegative || (xI <= 0.0); allPositive = allPositive && (xI > 0.0); allGreaterThanOne = allGreaterThanOne && (xI >= 1.0); sum += xI; } if (oneNegative) return 0.0; if (allGreaterThanOne) return 1.0; // The "inside simplex" case: use Gauss integration for now if (allPositive && (sum <= 1.0)) { Indices indices(dimension, 0); Scalar value = 0.0; Scalar logFactor = normalizationFactor_; for (UnsignedInteger i = 0; i < dimension; ++i) logFactor += theta_[i] * std::log(point[i]) - std::log(theta_[i]); // Initialize the integration data initializeIntegration(); UnsignedInteger size = 1; for (UnsignedInteger i = 0; i < dimension; ++i) size *= integrationNodes_[i].getSize(); // Loop over the integration nodes for (UnsignedInteger flatIndex = 0; flatIndex < size; ++flatIndex) { // The current point has components obtained by tensorization of scaled Jacobi polynomials zeros Scalar w = 1.0; Scalar sumX = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const UnsignedInteger indexI = indices[i]; const Scalar lI = 0.5 * point[i]; sumX += (integrationNodes_[i][indexI] + 1.0) * lI; w *= integrationWeights_[i][indexI]; } const Scalar dCDF = w * std::exp(logFactor + (theta_[dimension] - 1.0) * log1p(-sumX)); value += dCDF; // Update the indices ++indices[0]; // Propagate the remainders for (UnsignedInteger i = 0; i < dimension - 1; ++i) indices[i + 1] += (indices[i] == integrationNodes_[i].getSize()); // Correction of the indices. The last index cannot overflow. for (UnsignedInteger i = 0; i < dimension - 1; ++i) indices[i] = indices[i] % integrationNodes_[i].getSize(); } // flatIndex return value; } // in the simplex Point sortedPoint(point); std::sort(sortedPoint.begin(), sortedPoint.end()); Scalar value = 0.0; // Can go there only if dimension > 1 Scalar sortedSum = sortedPoint[0] + sortedPoint[1]; if (sortedSum >= 1.0) { value = 1.0 - dimension; for (UnsignedInteger i = 0; i < dimension; ++i) value += DistFunc::pBeta(theta_[i], sumTheta_ - theta_[i], point[i]); return value; } // Can go there only if dimension > 2 sortedSum += sortedPoint[2]; if (sortedSum >= 1.0) { value = 0.5 * (dimension - 1); for (UnsignedInteger i = 0; i < dimension; ++i) value -= DistFunc::pBeta(theta_[i], sumTheta_ - theta_[i], point[i]); value *= dimension - 2; Indices marginal2D(2); Point marginalPoint(2); for (UnsignedInteger i = 0; i < dimension; ++i) { marginal2D[0] = i; marginalPoint[0] = point[i]; for (UnsignedInteger j = 0; j < i; ++j) { marginal2D[1] = j; marginalPoint[1] = point[j]; value += Distribution(getMarginal(marginal2D)).computeCDF(marginalPoint); } } return value; } // Use crude Monte Carlo for now, with a fixed sampling size static const UnsignedInteger samplingSize(ResourceMap::GetAsUnsignedInteger("DefaultSamplingSize")); RandomGeneratorState initialState(RandomGenerator::GetState()); RandomGenerator::SetSeed(samplingSize); static const Sample sample(getSample(samplingSize)); UnsignedInteger successNumber = 0; for (UnsignedInteger i = 0; i < samplingSize; ++i) { const Point x(sample[i]); Bool success = true; for (UnsignedInteger j = 0; j < dimension; ++j) if (x[j] > point[j]) { success = false; break; } successNumber += success; } RandomGenerator::SetState(initialState); return Scalar(successNumber) / samplingSize; } /* Get the quantile of the distribution */ Scalar Dirichlet::computeScalarQuantile(const Scalar prob, const Bool tail) const { return DistFunc::qBeta(theta_[0], theta_[1], prob, tail); } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Dirichlet::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; Scalar sum = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) sum += theta_[i]; const Scalar r = theta_[conditioningDimension]; const Scalar s = sumTheta_ - sum - r; const Scalar z = x / (1.0 - sum); return std::exp(- SpecFunc::LnBeta(r, s) + (r - 1.0) * std::log(z) + (s - 1.0) * log1p(-z)) / (1.0 - sum); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Dirichlet::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; Scalar sum = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) sum += theta_[i]; const Scalar r = theta_[conditioningDimension]; const Scalar s = sumTheta_ - sum - r; return DistFunc::pBeta(r, s, x / (1.0 - sum)); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar Dirichlet::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; Scalar sum = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) sum += theta_[i]; const Scalar r = theta_[conditioningDimension]; const Scalar s = sumTheta_ - sum - r; return (1.0 - sum) * DistFunc::qBeta(r, s, q); } /* Compute the mean of the distribution */ void Dirichlet::computeMean() const { const UnsignedInteger dimension = getDimension(); mean_ = Point(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) mean_[i] = theta_[i] / sumTheta_; isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Dirichlet::getStandardDeviation() const { const UnsignedInteger dimension = getDimension(); Point sigma(dimension); Scalar factor = 1.0 / (sumTheta_ * std::sqrt(1.0 + sumTheta_)); for (UnsignedInteger i = 0; i < dimension; ++i) sigma[i] = theta_[i] * (sumTheta_ - theta_[i]) * factor; return sigma; } /* Get the skewness of the distribution */ Point Dirichlet::getSkewness() const { const UnsignedInteger dimension = getDimension(); Point skewness(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar thetaI = theta_[i]; skewness[i] = 2.0 * (sumTheta_ - 2.0 * thetaI) / (sumTheta_ + 2.0) * std::sqrt(sumTheta_ + 1.0) / (thetaI * (sumTheta_ - thetaI)); } return skewness; } /* Get the kurtosis of the distribution */ Point Dirichlet::getKurtosis() const { const UnsignedInteger dimension = getDimension(); Point kurtosis(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar thetaI = theta_[i]; kurtosis[i] = 3.0 * (sumTheta_ + 1.0) * (2.0 * sumTheta_ * sumTheta_ + thetaI * (sumTheta_ - 6.0) * (sumTheta_ - thetaI)) / (thetaI * (sumTheta_ - thetaI) * (3.0 + sumTheta_) * (2.0 + sumTheta_)); } return kurtosis; } /* Compute the covariance of the distribution */ void Dirichlet::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); Scalar factor = 1.0 / (sumTheta_ * sumTheta_ * (1.0 + sumTheta_)); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar thetaI = theta_[i]; covariance_(i, i) = factor * (thetaI * (sumTheta_ - thetaI)); for (UnsignedInteger j = 0; j < i; ++j) covariance_(i, j) = -factor * thetaI * theta_[j]; } isAlreadyComputedCovariance_ = true; } /* Theta accessor */ void Dirichlet::setTheta(const Point & theta) { const UnsignedInteger size = theta.getSize(); if (size <= 1) throw InvalidArgumentException(HERE) << "Error: the parameter theta must be of size at least 2."; for (UnsignedInteger i = 0; i < size; ++i) if (!(theta[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: all the components of theta must be positive"; theta_ = theta; sumTheta_ = 0.0; normalizationFactor_ = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar thetaI = theta[i]; if (!(thetaI > 0.0)) throw InvalidArgumentException(HERE) << "Error: the vector theta must have positive components, here theta(" << i << ")=" << thetaI; normalizationFactor_ -= SpecFunc::LnGamma(thetaI); sumTheta_ += thetaI; } normalizationFactor_ += SpecFunc::LnGamma(sumTheta_); setDimension(size - 1); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } Point Dirichlet::getTheta() const { return theta_; } /* Get the i-th marginal distribution */ Dirichlet::Implementation Dirichlet::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; if (dimension == 1) return clone(); Point thetaMarginal(2); thetaMarginal[0] = theta_[i]; thetaMarginal[1] = sumTheta_ - theta_[i]; return new Dirichlet(thetaMarginal); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Dirichlet::Implementation Dirichlet::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); const UnsignedInteger outputDimension = indices.getSize(); Point thetaMarginal(outputDimension + 1); Scalar sumMarginal = 0.0; for (UnsignedInteger i = 0; i < outputDimension; ++i) { const Scalar thetaI = theta_[indices[i]]; sumMarginal += thetaI; thetaMarginal[i] = thetaI; } thetaMarginal[outputDimension] = sumTheta_ - sumMarginal; Dirichlet marginal(thetaMarginal); // Initialize the CDF computation if the data are available if (isInitializedCDF_) { PointCollection marginalIntegrationNodes_(0); PointCollection marginalIntegrationWeights_(0); for (UnsignedInteger i = 0; i < outputDimension; ++i) { marginalIntegrationNodes_.add(integrationNodes_[indices[i]]); marginalIntegrationWeights_.add(integrationWeights_[indices[i]]); } marginal.integrationNodes_ = marginalIntegrationNodes_; marginal.integrationWeights_ = marginalIntegrationWeights_; marginal.isInitializedCDF_ = true; } return marginal.clone(); } // getMarginal(Indices) /* Tell if the distribution has independent marginals */ Bool Dirichlet::hasIndependentCopula() const { return getDimension() == 1; } /* Tell if the distribution has an elliptical copula */ Bool Dirichlet::hasEllipticalCopula() const { return hasIndependentCopula(); } /* Get the Spearman correlation of the distribution */ CorrelationMatrix Dirichlet::getSpearmanCorrelation() const { return DistributionImplementation::getSpearmanCorrelation(); #ifdef NEW_IMPLEMENTATION const UnsignedInteger dimension = getDimension(); CorrelationMatrix rho(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const UnsignedInteger nI = integrationNodes_[i].getSize(); for (UnsignedInteger j = 0; j < i; ++j) { const UnsignedInteger nJ = integrationNodes_[j].getSize(); // Perform the numerical integration of the (i,j) correlation Scalar rhoIJ = 0.0; for (UnsignedLong indexU = 0; indexU < nI; ++indexU) { const Scalar u = 0.5 * (integrationNodes_[j][indexU] + 1.0); for (UnsignedLong indexV = 0; indexV < nJ; ++indexV) { Scalar v = 0.5 * (integrationNodes_[j][indexU] + 1.0) * (1.0 - u); } // indexV } // indexU } // j } // i return rho; #endif } /* Get the Kendall concordance of the distribution */ CorrelationMatrix Dirichlet::getKendallTau() const { return DistributionImplementation::getKendallTau(); #ifdef NEW_IMPLEMENTATION CorrelationMatrix tau(2); tau(0, 1) = 1.0 + 4.0 * (SpecFunc::Debye(theta_, 1) - 1.0) / theta_; return tau; #endif } DistributionImplementation::PointWithDescriptionCollection Dirichlet::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension); const Description description(getDescription()); for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { PointWithDescription point(2); Description marginalDescription(point.getDimension()); point[0] = theta_[marginalIndex]; point[1] = sumTheta_ - theta_[marginalIndex]; marginalDescription[0] = "theta"; marginalDescription[1] = "sum theta"; point.setDescription(marginalDescription); point.setName(description[marginalIndex]); parameters[marginalIndex] = point; } // marginalIndex return parameters; } void Dirichlet::setParametersCollection(const PointCollection & parametersCollection) { const UnsignedInteger size = parametersCollection.getSize(); const UnsignedInteger dimension = size; Point theta(dimension + 1); if ( size == 0 ) throw InvalidArgumentException(HERE) << "The collection is empty."; if ( parametersCollection[0].getSize() < 2 ) throw InvalidArgumentException(HERE) << "The collection is too small."; Scalar lastTheta = parametersCollection[0][0] + parametersCollection[0][1];// sum of all thetas for (UnsignedInteger i = 0; i < dimension; ++i) { theta[i] = parametersCollection[i][0]; lastTheta -= theta[i]; // substract each theta except the last one } theta[dimension] = lastTheta; setTheta(theta); } Point Dirichlet::getParameter() const { return theta_; } void Dirichlet::setParameter(const Point & parameter) { const Scalar w = getWeight(); *this = Dirichlet(parameter); setWeight(w); } Description Dirichlet::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); Description description(dimension + 1); for (UnsignedInteger i = 0; i <= dimension; ++ i) { description[i] = (OSS() << "theta_" << i); } return description; } /* Method save() stores the object through the StorageManager */ void Dirichlet::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "theta_", theta_ ); adv.saveAttribute( "sumTheta_", sumTheta_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Dirichlet::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "theta_", theta_ ); adv.loadAttribute( "sumTheta_", sumTheta_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/DirichletFactory.cxx000066400000000000000000000155041307543307100257340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Dirichlet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DirichletFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DirichletFactory); static const Factory Factory_DirichletFactory; /* Default constructor */ DirichletFactory::DirichletFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ DirichletFactory * DirichletFactory::clone() const { return new DirichletFactory(*this); } /* Here is the interface that all derived class must implement */ DirichletFactory::Implementation DirichletFactory::build(const Sample & sample) const { return buildAsDirichlet(sample).clone(); } DirichletFactory::Implementation DirichletFactory::build(const Point & parameters) const { return buildAsDirichlet(parameters).clone(); } DirichletFactory::Implementation DirichletFactory::build() const { return buildAsDirichlet().clone(); } Dirichlet DirichletFactory::buildAsDirichlet(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Dirichlet distribution from a sample of size < 2"; const UnsignedInteger dimension = sample.getDimension(); // Check that the points lie in the simplex x_1+...+x_d < 1, x_k > 0 // and precompute the sufficient statistics Point meanLog(dimension + 1); Point sumX(dimension, 0.0); Point sumX2(dimension, 0.0); for (UnsignedInteger i = 0; i < size; ++i) { Scalar sum = 0.0; for (UnsignedInteger j = 0; j < dimension; ++j) { const Scalar xIJ = sample[i][j]; if (!(xIJ > 0.0)) throw InvalidArgumentException(HERE) << "Error: the sample contains points not in the unit simplex: x=" << sample[i]; sum += xIJ; meanLog[j] += std::log(xIJ); sumX[j] += xIJ; sumX2[j] += xIJ * xIJ; } if (!(sum < 1.0)) throw InvalidArgumentException(HERE) << "Error: the sample contains points not in the unit simplex: x=" << sample[i]; meanLog[dimension] += log1p(-sum); } // Normalize the sum of the logarithms meanLog = meanLog * (1.0 / size); // Find the maximum likelihood estimate using a fixed-point strategy // First, compute a reasonable initial guess using moments Point theta(dimension + 1, 0.0); Scalar sumTheta = 0.0; // Estimate the sum of parameters for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar sumXI = sumX[i]; const Scalar sumX2I = sumX2[i]; const Scalar numerator = sumXI - sumX2I; const Scalar denominator = sumX2I - sumXI * sumXI / size; if (denominator == 0.0) throw InvalidArgumentException(HERE) << "Error: the component " << i << " of the sample is constant (equal to " << sumXI / size << "). Impossible to estimate a Dirichlet distribution."; sumTheta += numerator / denominator; } sumTheta /= dimension; // Estimate the parameters from the mean of the sample Scalar lastTheta = sumTheta; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar thetaI = (sumX[i] / size) * sumTheta; // If the estimate is positive, use it, if not, use a default value of ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" ) theta[i] = (thetaI > 0.0 ? thetaI : ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" )); lastTheta -= theta[i]; } // If the estimate is positive, use it, if not, use a default value of ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" ) theta[dimension] = (lastTheta > 0.0 ? lastTheta : ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" )); Bool convergence = false; UnsignedInteger iteration = 0; while (!convergence && (iteration < ResourceMap::GetAsUnsignedInteger( "DirichletFactory-MaximumIteration" ))) { // Newton iteration ++iteration; sumTheta = 0.0; for (UnsignedInteger i = 0; i <= dimension; ++i) sumTheta += theta[i]; const Scalar diGammaSumTheta = SpecFunc::DiGamma(sumTheta); const Scalar triGammaSumTheta = SpecFunc::TriGamma(sumTheta); Point g(dimension + 1); Point q(dimension + 1); Scalar numerator = 0.0; Scalar denominator = 0.0; for (UnsignedInteger i = 0; i <= dimension; ++i) { g[i] = meanLog[i] - SpecFunc::DiGamma(theta[i]) + diGammaSumTheta; q[i] = -SpecFunc::TriGamma(theta[i]); numerator += g[i] / q[i]; denominator += 1.0 / q[i]; } const Scalar b = numerator / (1.0 / triGammaSumTheta + denominator); Point delta(dimension + 1); for (UnsignedInteger i = 0; i <= dimension; ++i) delta[i] = (g[i] - b) / q[i]; // Newton update theta = theta - delta; convergence = (delta.norm() < dimension * ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" )); } // Fixed point algorithm, works but is slow. Should never go there, as the Newton iteration should converge iteration = 0; while (!convergence && (iteration < ResourceMap::GetAsUnsignedInteger( "DirichletFactory-MaximumIteration" ))) { ++ iteration; sumTheta = 0.0; for (UnsignedInteger i = 0; i <= dimension; ++i) sumTheta += theta[i]; const Scalar psiSumTheta = SpecFunc::DiGamma(sumTheta); Scalar delta = 0.0; for (UnsignedInteger i = 0; i <= dimension; ++i) { const Scalar thetaI = SpecFunc::DiGammaInv(psiSumTheta + meanLog[i]); delta += std::abs(theta[i] - thetaI); theta[i] = thetaI; } convergence = (delta < dimension * ResourceMap::GetAsScalar( "DirichletFactory-ParametersEpsilon" )); } Dirichlet result(theta); result.setDescription(sample.getDescription()); return result; } Dirichlet DirichletFactory::buildAsDirichlet(const Point & parameters) const { try { Dirichlet distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Dirichlet distribution from the given parameters"; } } Dirichlet DirichletFactory::buildAsDirichlet() const { return Dirichlet(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/DistFunc.cxx000066400000000000000000002161421307543307100242150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OpenTURNS wrapper to a library of special functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Log.hxx" #include "openturns/KFactorFunctions.hxx" #include "openturns/Normal2DCDF.hxx" #include "openturns/Normal3DCDF.hxx" #include "openturns/Exception.hxx" // The following implementation of the Kolmogorov CDF and tail CDF is used in a LGPL context with written permission of the author. #include "KolmogorovSmirnovDist.h" // The following implementation of the Poisson quantile is used in a LGPL context with written permission of the author. #include "poissinv_cpu.h" #include "openturns/StudentFunctions.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS const UnsignedInteger DistFunc::NumberOfBandNormalZigurrat = 129; const Scalar DistFunc::NormalZigguratTail = 3.44508288805539135654449538289; const Scalar DistFunc::NormalZigguratAbscissa[DistFunc::NumberOfBandNormalZigurrat + 1] = { 0.0 , 0.271599048510693754998163050702, 0.361898145612134821317157669025, 0.425392047157312675983415424660, 0.476131717888617028166988513439, 0.519219013293501476350033678035, 0.557137093511580298809061311694, 0.591298984443313319787098187809, 0.622592649542783642315521009315, 0.651616031063230052452116746597, 0.678792877347767760686380971868, 0.704435546364376654764501920124, 0.728781608504968321114578996184, 0.752016422469955992826848889422, 0.774287710877425340184686032696, 0.795715332287609618751456615712, 0.816398043479172731605919440849, 0.836418306930649053279379059005, 0.855845789056994122927551923075, 0.874739957924955634206040955649, 0.893152046999867275098199151897, 0.911126563328297873672484801050, 0.928702462334730770821130245805, 0.945914074632515687029155431559, 0.962791845646485921191452370469, 0.979362932051085821966553188665, 0.995651687354039595085786832964, 1.01168006070531516232965392900 , 1.02746792709172237058780318928 , 1.04303336277130264040166296783 , 1.05839287662899292124745211169 , 1.07356160576994269038108408924 , 1.08855348188453823734559909469 , 1.10338137356245140332933074704 , 1.11805720869053844255517390583 , 1.13259208026135637042889232625 , 1.14699633828758735801507046149 , 1.16127967002039429336339539399 , 1.17545117027533417287473048372 , 1.18951940335453972086012397336 , 1.20349245780083403835096451764 , 1.21737799501490321160206827336 , 1.23118329260039645151126944958 , 1.24491528316597898248595200283 , 1.25858058920182308169327058845 , 1.27218555455602081689118701416 , 1.28573627296019479845973032796 , 1.29923861399021398514811910954 , 1.31269824679504233415845967597 , 1.32612066188248490208347357933 , 1.33951119121344617033356972221 , 1.35287502682506865937549704692 , 1.36621723817679783092212387778 , 1.37954278839122803847614338568 , 1.39285654954287803582443862287 , 1.40616331713229672637906532114 , 1.41946782386968059570797384556 , 1.43277475288114273351645465423 , 1.44608875044162355949759042785 , 1.45941443833094318522780953546 , 1.47275642590347769759399918804 , 1.48611932195724762500809972081 , 1.49950774648472030334842211111 , 1.51292634238526126953827654531 , 1.52637978721786115033208986070 , 1.53987280507247501439918234146 , 1.55341017863902384055596007811 , 1.56699676155482666996780634172 , 1.58063749111398211301308134969 , 1.59433740142604557618725800299 , 1.60810163711632290631602733261 , 1.62193546766631570500142829940 , 1.63584430250042915164619942820 , 1.64983370693414137939082821110 , 1.66390941910962125167951454089 , 1.67807736805749698528091063361 , 1.69234369303839820145325283038 , 1.70671476433535309787605152682 , 1.72119720568852405198043944381 , 1.73579791858759592141174442291 , 1.75052410866497944355179477982 , 1.76538331446556845629758885967 , 1.78038343890695608962355720514 , 1.79553278378881937566665179110 , 1.81084008776290159625982126988 , 1.82631456823722069305589567937 , 1.84196596776173086857556181334 , 1.85780460553003206309142077930 , 1.87384143473579289060235282188 , 1.89008810664697886815311451817 , 1.90655704241032628459974673316 , 1.92326151377851307313333422169 , 1.94021573417040550238786161927 , 1.95743496173982213662503222153 , 1.97493561645224006631535036596 , 1.99273541356693511100128687843 , 2.01085351641383291996867861457 , 2.02931071196545767371544926885 , 2.04812961346843841880165860053 , 2.06733489536060750602383910558 , 2.08695356691825680949271767439 , 2.10701529263367409420415792810 , 2.12755276932450072216751946158 , 2.14860217257314763105233505342 , 2.17020368849378343938267967922 , 2.19240215131716394363476960255 , 2.21524781328299046507842208032 , 2.23879728143015418864904200351 , 2.26311466694490835351573544076 , 2.28827300805157643267084011891 , 2.31435604894699812266939486476 , 2.34146048795978434043531292659 , 2.36969885260647551209738645471 , 2.39920322494817055544917817450 , 2.43013013978464913728162829644 , 2.46266713119979698270547205291 , 2.49704164517949055368308433652 , 2.53353343078795745430738206406 , 2.57249218737695205289488067611 , 2.61436340874381837128188016042 , 2.65972749227020134812347957976 , 2.70936127691136762243924804229 , 2.76433956507998809402134093896 , 2.82621272644033894046564603318 , 2.89734153514829733018851271394 , 2.98159419140365968437694926385 , 3.08601280427975485670709771297 , 3.22573136821851522103605577983 , 3.44508288805539135654449538289 , 3.71537970891694553086615539964 }; const Scalar DistFunc::NormalZigguratRatio[DistFunc::NumberOfBandNormalZigurrat] = { 0.0 , 0.750484775353838553484969850043, 0.850740271310955168539797476445, 0.893433541969631939167066002439, 0.917015181837094471851335493153, 0.931941203234046233441298028733, 0.942225689827803086945282581056, 0.949736532992396229158449917333, 0.955459380775071654971678008833, 0.959962976643589437257667346996, 0.963598275031758611303047864447, 0.966593473467949497522283939333, 0.969103315737874152720557392852, 0.971236417555650662146408519772, 0.973071247290683962507094254337, 0.974665898140297597377304564176, 0.976064293086860561017929573224, 0.977300253883645249170475123945, 0.978400244899316179173188425569, 0.979385269129977846895884043302, 0.980272206900904494815390564396, 0.981074779362329241400634997295, 0.981804253938740083291033345358, 0.982469968882383589521668758583, 0.983079728809119850562796554795, 0.983640106766412054356146072398, 0.984156677615944084392929857459, 0.984634200280007552311796735515, 0.985076761458307086707253212313, 0.985487889991653471429663256532, 0.985870648634019490358385815715, 0.986227708271493343086583402375, 0.986561408382272362985077361984, 0.986873806622761920341336293274, 0.987166719753625799389459567589, 0.987441757619090675912393772106, 0.987700351516051174211224554768, 0.987943778003453440265050048019, 0.988173178983434816520165815368, 0.988389578716739479383699175238, 0.988593898303624926534040096469, 0.988786968058724293246032191279, 0.988969538127397455898436508912, 0.989142287626960404173170844597, 0.989305832545044324977737622638, 0.989460732586336934407985727862, 0.989607497125912170683173044980, 0.989746590400581327272272451975, 0.989878436047901646747803160708, 0.990003421084648827869197604239, 0.990121899401909443020286447879, 0.990234194841858232813880454444, 0.990340603911263982506239462637, 0.990441398178427316016322972125, 0.990536826393283914925721684389, 0.990627116364558512218324337623, 0.990712476622928023181406791844, 0.990793097894984079572175093174, 0.990869154409244076145976128873, 0.990940805052437824691268287474, 0.991008194391705548082954937064, 0.991071453576109215637707296064, 0.991130701128922528307152229819, 0.991186043640474608746669498017, 0.991237576369836074033189634373, 0.991285383762317554082871105898, 0.991329539888568903748275039752, 0.991370108809995454035219189473, 0.991407144874221943150024047055, 0.991440692943413945013043999353, 0.991470788557391074579718311726, 0.991497458032617503483410551001, 0.991520718497315401540555107636, 0.991540577862097828628588285611, 0.991557034724640724341601679445, 0.991570078205989141038468359572, 0.991579687715098995526722137843, 0.991585832637127947522049524329, 0.991588471939779518821684067585, 0.991587553690640507148992013935, 0.991583014476894319513703858007, 0.991574778716995497249215923087, 0.991562757851797002828992213523, 0.991546849400162799407295751574, 0.991526935861188886574791544186, 0.991502883441690831444489168144, 0.991474540583463335923580694623, 0.991441736259812196096950028863, 0.991404278004792265983740672627, 0.991361949631191261607889802980, 0.991314508584238996353362687132, 0.991261682866858262508333044405, 0.991203167458441781253777050367, 0.991138620131902842410876661610, 0.991067656552139074390092217899, 0.990989844511792319927328343055, 0.990904697125582941945109300521, 0.990811664760263111407350456154, 0.990710125420284608160345942834, 0.990599373235399951429113359060, 0.990478604599807611123088277090, 0.990346901385037190355276297326, 0.990203210479193398963460161789, 0.990046318677290513694722835952, 0.989874821637971854574784332163, 0.989687085197041986702889368351, 0.989481196737866229216740827939, 0.989254903487686985183950871399, 0.989005533422740516025904697311, 0.988729892746066823168948592841, 0.988424131369219266125861236354, 0.988083564029399232263953634600, 0.987702428858508882825722518646, 0.987273556123533683467427764224, 0.986787905274353495741507623455, 0.986233904410023291038018271182, 0.985596485459788251551070665927, 0.984855636576794042676975880029, 0.983984161793717454104724720040, 0.982944085941803527491004884902, 0.981680632603656288469381808499, 0.980111601026471711171610577703, 0.978107394117398550145114447318, 0.975450319596402797690182574081, 0.971742413337712360174408714492, 0.966163908091604482763906551568, 0.956686237014236193571274296719, 0.936329102386070277297433094023, 0.927249206800360320095099544455 }; /**************************************************************************************************************************/ /* Normalized Beta distribution, i.e. with a PDF equals to x ^ (p1 - 1) . (1 - x) ^ (p2 - 1) / Beta(p1, p2) . (0 < x < 1) */ /**************************************************************************************************************************/ /* CDF */ Scalar DistFunc::pBeta(const Scalar p1, const Scalar p2, const Scalar x, const Bool tail) { return SpecFunc::RegularizedIncompleteBeta(p1, p2, x, tail); } /* CDF Inverse */ Scalar DistFunc::qBeta(const Scalar p1, const Scalar p2, const Scalar p, const Bool tail) { return SpecFunc::RegularizedIncompleteBetaInverse(p1, p2, p, tail); } /* Random number generation We use the algorithm of Cheng (1978), Johnk, Atkinson and Whittaker (1979) 1 & 2 described in: Luc Devroye, "Non-Uniform RandomVariate Generation", Springer-Verlag, 1986, available online at: http://cg.scs.carleton.ca/~luc/nonuniformrandomvariates.zip and with the important errata at: http://cg.scs.carleton.ca/~luc/errors.pdf */ Scalar DistFunc::rBeta(const Scalar p1, const Scalar p2) { // Strategy: // If (a = 1 and b = 1), Beta(1,1) = Uniform(0,1) // If (a = 1 or b = 1), analytic cases // If (a + b <= 1), Johnk // If (a + b > 1): // If (a < 1 and b < 1), Atkinson and Whittaker 1 // If (a < 1 and b > 1) or (a > 1 and b < 1), Atkinson and Whittaker 2 // If (a > 1 and b > 1) Cheng. if ((p1 == 1.0) && (p2 == 1.0)) return RandomGenerator::Generate(); // Special case for p1 = 1 or p2 = 1 if (p1 == 1.0) return 1.0 - std::pow(RandomGenerator::Generate(), 1.0 / p2); if (p2 == 1.0) return std::pow(RandomGenerator::Generate(), 1.0 / p1); // Now, the more general cases const Scalar minp = std::min(p1, p2); const Scalar maxp = std::max(p1, p2); const Scalar sum = p1 + p2; if (sum <= 1.0) // Johnk { // Use of logarithms to avoid underflow if minp << 1 (here 1e-3, quite arbitrary). It is the // only case where this kind of trick is useful. It should not be much slower than the usual // version using std::pow() if (minp < 1e-3) { for (;;) { const Scalar u = RandomGenerator::Generate(); const Scalar v = RandomGenerator::Generate(); const Scalar logx = std::log(u) / p1; const Scalar logy = std::log(v) / p2; const Scalar logsum = (logx > logy) ? logx + log1p(std::exp(logy - logx)) : logy + log1p(std::exp(logx - logy)); // Acceptation step if (logsum <= 0.0) return std::exp(logy - logsum); } } // Usual form of the algorithm for (;;) { const Scalar u = RandomGenerator::Generate(); const Scalar v = RandomGenerator::Generate(); const Scalar x = std::pow(u, 1.0 / p1); const Scalar y = std::pow(v, 1.0 / p2); // Acceptation step if (x + y <= 1.0) return x / (x + y); } } // End Johnk // Now, sum > 1 for all the remaining cases if (minp > 1.0) // Cheng { const Scalar lambda = std::sqrt((sum - 2.0) / (2.0 * p1 * p2 - sum)); const Scalar c = minp + 1.0 / lambda; for (;;) { const Scalar u1 = RandomGenerator::Generate(); const Scalar u2 = RandomGenerator::Generate(); const Scalar v = lambda * std::log(u1 / (1.0 - u1)); const Scalar w = minp * std::exp(v); const Scalar z = u1 * u1 * u2; // 1.386294361119890618834464 = log(4) const Scalar r = c * v - 1.386294361119890618834464; const Scalar s = minp + r - w; // Quick acceptance steps // 2.609437912434100374600759 = 1 + log(5) if (s + 2.609437912434100374600759 >= 5.0 * z) return (p1 == minp) ? w / (maxp + w) : maxp / (maxp + w); const Scalar t = std::log(z); if (s > t) return (p1 == minp) ? w / (maxp + w) : maxp / (maxp + w); // Acceptance step if (r + sum * std::log(sum / (maxp + w)) >= t) return (p1 == minp) ? w / (maxp + w) : maxp / (maxp + w); } } // End Cheng if (maxp < 1.0) // Atkinson and Whittaker 1 { const Scalar t = 1.0 / (1.0 + std::sqrt(maxp * (1.0 - maxp) / (minp * (1.0 - minp)))); const Scalar tc = 1.0 - t; const Scalar p = maxp * t / (maxp * t + minp * tc); for (;;) { const Scalar u = RandomGenerator::Generate(); const Scalar e = -std::log(RandomGenerator::Generate()); if (u <= p) { const Scalar x = t * std::pow(u / p, 1.0 / minp); // Acceptation test if (e >= (1.0 - maxp) * std::log((1.0 - x) / tc)) return ((p1 == minp) ? x : 1.0 - x); } else { const Scalar x = 1.0 - tc * std::exp(log1p((p - u) / (1.0 - p)) / maxp); // Acceptation test if (e >= (1.0 - minp) * std::log(x / t)) return ((p1 == minp) ? x : 1.0 - x); } } } // End Atkinson and Whittaker 1 // Remaining case, Atkinson and Whittaker 2 const Scalar t = (minp > 1) ? (1.0 - minp) / (maxp + 1.0 - minp) : 0.5; const Scalar tc = 1.0 - t; const Scalar p = maxp * t / (maxp * t + minp * std::pow(tc, maxp)); for (;;) { const Scalar u = RandomGenerator::Generate(); const Scalar e = -std::log(RandomGenerator::Generate()); if (u <= p) { const Scalar x = t * std::pow(u / p, 1.0 / minp); if (e >= (1.0 - maxp) * log1p(-x)) return ((p1 == minp) ? x : 1.0 - x); } else { const Scalar x = 1.0 - tc * std::exp(log1p((p - u) / (1.0 - p)) / maxp); if (e >= (1.0 - minp) * std::log(x / t)) return ((p1 == minp) ? x : 1.0 - x); } } // End Atkinson and Whittaker 2 } // End of rBeta Point DistFunc::rBeta(const Scalar p1, const Scalar p2, const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rBeta(p1, p2); return result; } /*******************************************************************************************************/ /* Binomial distribution, i.e. with a PDF equals to C(n, p) p^k (1 - p)^(n - k) */ /*******************************************************************************************************/ /* Random number generation We use the rejection algorithm described in: Wolfgang Hormann, "The Generation of Binomial Random Variates", Journal of Statistical Computation and Simulation 46, pp. 101-110, 1993 http://epub.wu.ac.at/1242/ */ Scalar DistFunc::fcBinomial(const UnsignedInteger k) { switch (k) { case 0: return 0.08106146679532726; break; case 1: return 0.04134069595540929; break; case 2: return 0.02767792568499834; break; case 3: return 0.02079067210376509; break; case 4: return 0.01664469118982119; break; case 5: return 0.01387612882307075; break; case 6: return 0.01189670994589177; break; case 7: return 0.01041126526197209; break; case 8: return 0.009255462182712733; break; case 9: return 0.008330563433362871; break; default: const Scalar kp1Sq = (k + 1) * (k + 1); return (1.0 / 12.0 - (1.0 / 360.0 - 1.0 / 1260. / kp1Sq) / kp1Sq) / (k + 1); break; } // switch } UnsignedInteger DistFunc::rBinomial(const UnsignedInteger n, const Scalar p) { // Quick return for degenerate cases if (p == 0.0) return 0; if (p == 1.0) return n; // Use symmetry const Scalar q = std::min(p, 1.0 - p); const Bool complementary = p > 0.5; if (q == 1.0) return (complementary ? 0 : n); if (q == 0.0) return (complementary ? n : 0); // Small case, use inversion if (n * q <= 15) { const Scalar r = q / (1.0 - q); Scalar t = std::pow(1.0 - q, static_cast(n)); Scalar s = t; const Scalar u = RandomGenerator::Generate(); for (UnsignedInteger k = 0; k <= n; ++k) { if (s >= u) return (complementary ? n - k : k); t *= r * (n - k) / (k + 1.0); s += t; } // Should never go there, except in case of round-off errors return 0; } // Large case, use the algorithm described in the reference. // Setup const Scalar m = floor((n + 1) * q); const Scalar r = q / (1.0 - q); const Scalar nr = (n + 1) * r; const Scalar npq = n * q * (1.0 - q); const Scalar npqSqrt = std::sqrt(npq); const Scalar b = 1.15 + 2.53 * npqSqrt; const Scalar a = -0.0873 + 0.0248 * b + 0.01 * q; const Scalar c = n * q + 0.5; const Scalar alpha = (2.83 + 5.1 / b) * npqSqrt; const Scalar vr = 0.92 - 4.2 / b; const Scalar urvr = 0.86 * vr; Scalar u = 0.0; Scalar k = 0.0; // Main loop for (;;) { Scalar v = RandomGenerator::Generate(); if (v <= urvr) { u = v / vr - 0.43; k = floor((2 * a / (0.5 - std::abs(u)) + b) * u + c); return (complementary ? static_cast(n - k) : static_cast(k)); } // v <= urvr if (v >= vr) { u = RandomGenerator::Generate() - 0.5; } // v >= vr else { u = v / vr - 0.93; u = (u < 0.0 ? -0.5 : 0.5) - u; v = RandomGenerator::Generate() * vr; } // v < vr const Scalar us = 0.5 - std::abs(u); k = floor((2.0 * a / us + b) * u + c); if ((k < 0.0) || (k > n)) continue; v = v * alpha / (a / (us * us) + b); const Scalar km = std::abs(k - m); // Recursive evaluation of f(k) if (km <= 15) { Scalar f = 1.0; if (m < k) { Scalar i = m; do { ++i; f *= (nr / i - r); } while (i < k); } // m < k else if (m > k) { Scalar i = k; do { ++i; v *= (nr / i - r); } while (i < m); } // m > k if (v <= f) return (complementary ? static_cast(n - k) : static_cast(k)); continue; } // km <= 15 // Squeeze-acceptance or rejection v = std::log(v); const Scalar rho = km / npq * (((km / 3.0 + 0.625) * km + 1.0 / 6.0) / npq + 0.5); const Scalar t = -km * km / (2.0 * npq); if (v < t - rho) return (complementary ? static_cast(n - k) : static_cast(k)); if (v > t + rho) continue; const Scalar nm = n - m + 1; const Scalar h = (m + 0.5) * std::log((m + 1) / (r * nm)) + fcBinomial(static_cast(m)) + fcBinomial(static_cast(n - m)); // Final acceptance-rejection const Scalar nk = n - k + 1; if (v <= h + (n + 1) * std::log(nm / nk) + (k + 0.5) * std::log(nk * r / (k + 1)) - fcBinomial(static_cast(k)) - fcBinomial(static_cast(n - k))) return (complementary ? static_cast(n - k) : static_cast(k)); } // for(;;) } // rBinomial Indices DistFunc::rBinomial(const UnsignedInteger n, const Scalar p, const UnsignedInteger size) { Indices result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rBinomial(n, p); return result; } /*******************************************************************************************************/ /* Normalized Gamma distribution, i.e. with a PDF equals to x ^ (k - 1) . exp(-x) / gamma(k) . (x > 0) */ /*******************************************************************************************************/ /* CDF */ Scalar DistFunc::pGamma(const Scalar k, const Scalar x, const Bool tail) { return SpecFunc::RegularizedIncompleteGamma(k, x, tail); } /* CDF Inverse */ Scalar DistFunc::qGamma(const Scalar k, const Scalar p, const Bool tail) { if (!tail && (p >= 1.0 - SpecFunc::ScalarEpsilon)) return SpecFunc::RegularizedIncompleteGammaInverse(k, 1.0 - SpecFunc::ScalarEpsilon, tail); return SpecFunc::RegularizedIncompleteGammaInverse(k, p, tail); } /* Random number generation We use the algorithm described in: Variables": ACM Transactions on Mathematical Software, Vol. 26, No. 3, September 2000, Pages 363-372 with a small optimization on the beta that appears in the squeezing function (1 + beta * x^4)*exp(-x^2/2). We also add the special treatment of the case k < 1 */ Scalar DistFunc::rGamma(const Scalar k) { // Special case k < 1.0 Scalar correction = 1.0; Scalar alpha = k; if (alpha < 1.0) { correction = std::pow(RandomGenerator::Generate(), 1.0 / alpha); ++alpha; } const Scalar d = alpha - 0.3333333333333333333333333; const Scalar c = 1.0 / std::sqrt(9.0 * d); Scalar x = -1.0; Scalar v = -1.0; for (;;) { do { x = rNormal(); v = 1.0 + c * x; } while (v <= 0.0); v = v * v * v; const Scalar u = RandomGenerator::Generate(); const Scalar x2 = x * x; // Quick acceptation test // 0.03431688782875261396035499 is the numerical solution of the squeezing // problem described in if (u < 1.0 - 0.03431688782875261396035499 * x2 * x2) return correction * d * v; // Acceptation test if (std::log(u) < 0.5 * x2 + d * (1.0 - v + std::log(v))) return correction * d * v; } } // End of rGamma Point DistFunc::rGamma(const Scalar k, const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rGamma(k); return result; } /****************************/ /* Kolmogorov distribution. */ /****************************/ /* CDF The algorithms and the selection strategy is described in: Simard, R. and L'Ecuyer, P. "Computing the Two-Sided Kolmogorov-Smirnov Distribution", Journal of Statistical Software, 2010. The implementation is from the first author, initially published under the GPL v3 license but used here with written permission of the author. */ Scalar DistFunc::pKolmogorov(const UnsignedInteger n, const Scalar x, const Bool tail) { if (tail) return KSfbar(n, x); else return KScdf(n, x); } /***************************************************************************************************************/ /* Normalized NonCentralChiSquare distribution, i.e. with a PDF equals to (eq. 31.15 p.516 of the reference): */ /* exp(-delta^2 / 2) * (nu / (nu + x^2)) ^ ((nu + 1) / 2) / (sqrt(nu * Pi) * Gamma(nu / 2)) * SUM */ /* where SUM = sum_0^inf Gamma((nu + k + 1) / 2) * omega^k / Gamma(k + 1) */ /* and omega = x * delta * sqrt(2 / (nu + x^2)) */ /* In order to derive simple update formulas for the terms in the sum, we separate the odd indices from the */ /* even ones: */ /* SUM = SUM_ODD + SUM_EVEN, where: */ /* SUM_ODD = sum_0^inf Gamma(nu / 2 + k + 1) * omega * z^k / Gamma(2 * k + 2) */ /* SUM_EVEN = sum_O^inf Gamma((nu + 1) / 2 + k) * z^k / Gamma(2 * k + 1) */ /* and z = omega^2 */ /* The summation is done starting at the kM chosen as for the pNonCentralStudent method. See */ /* Denise Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral */ /* chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", */ /* Computational Statistics & Data Analysis, 43 (2003) pp 249-267 */ /* Reference: */ /* Norman L. Johnson, Samuel Kotz, N. Balakrishnan, "Continuous univariate distributions volume 2", second */ /* edition, 1995, Wiley Inter-Science */ /***************************************************************************************************************/ /* PDF */ Scalar DistFunc::dNonCentralChiSquare(const Scalar nu, const Scalar lambda, const Scalar x, const Scalar precision, const UnsignedInteger maximumIteration) { if (!(nu >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu must be >= 0."; if (!(lambda >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the non-centrality parameter lambda must be >= 0."; if (x <= 0.0) return 0.0; const Scalar halfNu = 0.5 * nu; // Early exit for lambda == 0, central ChiSquare PDF if (std::abs(lambda) < precision) return std::exp((halfNu - 1.0) * std::log(x) - 0.5 * x - SpecFunc::LnGamma(halfNu) - halfNu * M_LN2); // Case lambda <> 0 const Scalar halfLambda = 0.5 * lambda; // Starting index in the sum: integral part of halfDelta2 and insure that it is at least 1 const UnsignedInteger k = std::max(1UL, static_cast(floor(halfLambda))); // Loop forward and backward starting from k // Initialization Scalar pForward = std::exp(-halfLambda - 0.5 * x + (halfNu + k - 1.0) * std::log(x) - SpecFunc::LogGamma(k + 1.0) - SpecFunc::LogGamma(halfNu + k) - (2.0 * k + halfNu) * M_LN2 + k * std::log(lambda)); Scalar pBackward = pForward; Scalar value = pForward; Scalar error = SpecFunc::MaxScalar; UnsignedInteger kForward = k; UnsignedInteger kBackward = k; #define FORWARD_ITERATION \ pForward *= halfLambda * x / (2.0 * (halfNu + kForward) * (kForward + 1)); \ value += pForward; #define BACKWARD_ITERATION \ pBackward *= 2.0 * (halfNu + kBackward - 1) * kBackward / (halfLambda * x); \ value += pBackward; // Here, i is an UnsignedInteger as it is only a loop counter UnsignedInteger i = 1; const UnsignedInteger imax = std::min(k, maximumIteration); // while((error > precision * (std::abs(value) + precision)) && (i <= imax)) while((error > 0.0) && (i <= imax)) { FORWARD_ITERATION; BACKWARD_ITERATION; error = pForward + pBackward; ++kForward; --kBackward; ++i; } // Do we have to perform further forward iterations? // while ((error > precision * (std::abs(value) + precision)) && (i <= MaximumIteration)) while ((error > 0.0) && (i <= maximumIteration)) { FORWARD_ITERATION; error = pForward; ++kForward; ++i; } #undef FORWARD_ITERATION #undef BACKWARD_ITERATION if (error > precision * (std::abs(value) + precision)) LOGWARN(OSS() << "Warning: in DistFunc::dNonCentralChiSquare(nu, lambda, x), no convergence after " << i << " iterations. Error is " << error * value << " value is " << value << " for nu=" << nu << ", lambda=" << lambda << " and x=" << x); // Clip to [0,+inf[ in order to get rid of small rounding error return (value <= 0.0 ? 0.0 : value); } /* CDF We use the algorithm described in: Denise Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43 (2003) pp 249-267 */ Scalar DistFunc::pNonCentralChiSquare(const Scalar nu, const Scalar lambda, const Scalar x, const Bool tail, const Scalar precision, const UnsignedInteger maximumIteration) { if (!(nu >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu must be >= 0."; if (!(lambda >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the non-centrality parameter lambda must be >= 0."; if (x <= 0.0) return (tail ? 1.0 : 0.0); const Scalar halfNu = 0.5 * nu; const Scalar halfX = 0.5 * x; // Early exit for lambda == 0, central ChiSquare PDF if (std::abs(lambda) < precision) return pGamma(halfNu, halfX, tail); // Case lambda <> 0 const Scalar halfLambda = 0.5 * lambda; // Starting index in the sum: integral part of halfDelta2 and insure that it is at least 1 const UnsignedInteger k = std::max(1UL, static_cast(floor(halfLambda))); // Loop forward and backward starting from k // Initialization const Scalar logHalfX = std::log(halfX); Scalar xForward = std::exp((halfNu + k - 1) * logHalfX - halfX - SpecFunc::LogGamma(halfNu + k)); Scalar expForward = std::exp(-halfLambda + k * std::log(halfLambda) - SpecFunc::LogGamma(k + 1.0)); Scalar gammaForward = pGamma(halfNu + k, halfX); Scalar pForward = expForward * gammaForward; Scalar xBackward = xForward; Scalar expBackward = expForward; Scalar gammaBackward = gammaForward; Scalar pBackward = expBackward * gammaBackward; Scalar value = pForward; Scalar error = SpecFunc::MaxScalar; UnsignedInteger kForward = k; UnsignedInteger kBackward = k; #define FORWARD_ITERATION \ xForward *= halfX / (halfNu + kForward); \ expForward *= halfLambda / (kForward + 1); \ gammaForward -= xForward; \ pForward = expForward * gammaForward; \ value += pForward; #define BACKWARD_ITERATION \ expBackward *= kBackward / halfLambda; \ gammaBackward += xBackward; \ xBackward *= (halfNu + kBackward - 1) / halfX; \ pBackward = expBackward * gammaBackward; \ value += pBackward; // Here, i is an UnsignedInteger as it is only a loop counter UnsignedInteger i = 1; const UnsignedInteger imax = std::min(k, maximumIteration); // while((error > precision * (std::abs(value) + precision)) && (i <= imax)) while((error > 0.0) && (i <= imax)) { FORWARD_ITERATION; BACKWARD_ITERATION; error = pForward + pBackward; ++kForward; --kBackward; ++i; } // Do we have to perform further forward iterations? // while ((error > precision * (std::abs(value) + precision)) && (i <= MaximumIteration)) while ((error > 0.0) && (i <= maximumIteration)) { FORWARD_ITERATION; error = pForward; ++kForward; ++i; } #undef FORWARD_ITERATION #undef BACKWARD_ITERATION if (error > precision * (std::abs(value) + precision)) LOGWARN(OSS() << "Warning: in DistFunc::dNonCentralChiSquare(nu, lambda, x), no convergence after " << i << " iterations. Error is " << error * value << " value is " << value << " for nu=" << nu << ", lambda=" << lambda << " and x=" << x); // Clip to [0,1] in order to get rid of small rounding error value = (value < 0.0 ? 0.0 : (value > 1.0 ? 1.0 : value)); // Check if we are asked for the tail CDF if (tail) value = 1.0 - value; return value; } /* Random number generation We use a transformation method based on Gamma and Normal transformation: If N is Normal(delta, 1) distributed and G is Gamma(nu / 2) distributed, sqrt(2 * nu) * N / sqrt(G) is distributed according to NonCentralChiSquare(nu, delta) */ Scalar DistFunc::rNonCentralChiSquare(const Scalar nu, const Scalar lambda) { if (!(nu >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu must be >= 0."; if (!(lambda >= 0.0)) throw InvalidArgumentException(HERE) << "Error: the non-centrality parameter lambda must be >= 0."; // If the non-central parameter is zero return a usual chi-square realization if (lambda == 0.0) return 2.0 * rGamma(0.5 * nu); // Use the decomposition of a zero degree of freedom non-central chisquare and a nu degrees of freedom central chisquare const Scalar n = rPoisson(0.5 * lambda); return 2.0 * rGamma(0.5 * nu + n); } Point DistFunc::rNonCentralChiSquare(const Scalar nu, const Scalar lambda, const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rNonCentralChiSquare(nu, lambda); return result; } /************************************************************************************************************/ /* Normalized NonCentralStudent distribution, i.e. with a PDF equals to (eq. 31.15 p.516 of the reference): */ /* exp(-delta^2 / 2) * (nu / (nu + x^2)) ^ ((nu + 1) / 2) / (sqrt(nu * Pi) * Gamma(nu / 2)) * SUM */ /* where SUM = sum_0^inf Gamma((nu + k + 1) / 2) * omega^k / Gamma(k + 1) */ /* and omega = x * delta * sqrt(2 / (nu + x^2)) */ /* Reference: */ /* Norman L. Johnson, Samuel Kotz, N. Balakrishnan, "Continuous univariate distributions volume 2", second */ /* edition, 1995, Wiley Inter-Science */ /************************************************************************************************************/ /* PDF We use the relation between the PDF and the CDF in order to reduce the computation of the PDF to two computations of the CDF */ Scalar DistFunc::dNonCentralStudent(const Scalar nu, const Scalar delta, const Scalar x) { return StudentFunctions::NonCentralStudentPDF(nu, delta, x); } /************************************************************************************************************/ /* Normalized NonCentralStudent distribution, i.e. with a PDF equals to (eq. 31.15 p.516 of the reference): */ /* exp(-delta^2 / 2) * (nu / (nu + x^2)) ^ ((nu + 1) / 2) / (sqrt(nu * Pi) * Gamma(nu / 2)) * SUM */ /* where SUM = sum_0^inf Gamma((nu + k + 1) / 2) * omega^k / Gamma(k + 1) */ /* and omega = x * delta * sqrt(2 / (nu + x^2)) */ /* In order to derive simple update formulas for the terms in the sum, we separate the odd indices from the */ /* even ones: */ /* SUM = SUM_ODD + SUM_EVEN, where: */ /* SUM_ODD = sum_0^inf Gamma(nu / 2 + k + 1) * omega * z^k / Gamma(2 * k + 2) */ /* SUM_EVEN = sum_O^inf Gamma((nu + 1) / 2 + k) * z^k / Gamma(2 * k + 1) */ /* and z = omega^2 */ /* The summation is done starting at the kM chosen as for the pNonCentralStudent method. */ /* Reference: */ /* Norman L. Johnson, Samuel Kotz, N. Balakrishnan, "Continuous univariate distributions volume 2", second */ /* edition, 1995, Wiley Inter-Science */ /************************************************************************************************************/ /* PDF */ Scalar DistFunc::dNonCentralStudentAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Scalar precision, const UnsignedInteger maximumIteration) { return StudentFunctions::NonCentralStudentPDFAlt0(nu, delta, x, precision, maximumIteration); } /* CDF We use the algorithm described in: Viktor Witkovsky, "A Note on Computing Extreme Tail Probabilities of the Noncentral T Distribution with Large Noncentrality Parameter" Computational Statistics & Data Analysis, 43 (2003) pp 249-267 */ Scalar DistFunc::pNonCentralStudent(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail) { return StudentFunctions::NonCentralStudentCDF(nu, delta, x, tail); } /* Random number generation We use a transformation method based on Gamma and Normal transformation: If N is Normal(delta, 1) distributed and G is Gamma(nu / 2) distributed, sqrt(2 * nu) * N / sqrt(G) is distributed according to NonCentralStudent(nu, delta) */ Scalar DistFunc::rNonCentralStudent(const Scalar nu, const Scalar delta) { return StudentFunctions::NonCentralStudentRealization(nu, delta); } Point DistFunc::rNonCentralStudent(const Scalar nu, const Scalar delta, const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = StudentFunctions::NonCentralStudentRealization(nu, delta); return result; } /**************************************************************************************/ /* Normalized Normal distribution, i.e. with a PDF equals to exp(-x^2/2) / sqrt(2.Pi) */ /**************************************************************************************/ /* CDF */ Scalar DistFunc::pNormal(const Scalar x, const Bool tail) { if (tail) return 0.5 * SpecFunc::ErfC(x * M_SQRT1_2); return 0.5 * SpecFunc::ErfC(-x * M_SQRT1_2); } Scalar DistFunc::pNormal2D(const Scalar x1, const Scalar x2, const Scalar rho, const Bool tail) { return Normal2DCDF(x1, x2, rho, tail); } Scalar DistFunc::pNormal3D(const Scalar x1, const Scalar x2, const Scalar x3, const Scalar rho12, const Scalar rho13, const Scalar rho23, const Bool tail) { return Normal3DCDF(x1, x2, x3, rho12, rho13, rho23, tail); } /* CDF inverse It implements the algorithm of Peter John Acklam, see http://home.online.no/~pjacklam/notes/invnorm/index.html */ Scalar DistFunc::qNormal(const Scalar p, const Bool tail) { if (p == 0.0) return (tail ? 3.75193793471444863030e+01 : -3.75193793471444863030e+01); if (p == 1.0) return (tail ? -8.125890664701906 : 8.125890664701906); static const Scalar a[6] = { -3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02, 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00 }; static const Scalar b[5] = { -5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02, 6.680131188771972e+01, -1.328068155288572e+01 }; static const Scalar c[6] = { -7.784894002430293e-03, -3.223964580411365e-01, -2.400758277161838e+00, -2.549732539343734e+00, 4.374664141464968e+00, 2.938163982698783e+00 }; static const Scalar d[4] = { 7.784695709041462e-03, 3.224671290700398e-01, 2.445134137142996e+00, 3.754408661907416e+00 }; Scalar x = -1.0; // Left tail if (p < 0.02425) { /* Rational approximation for tail region. */ const Scalar q = std::sqrt(-2.0 * std::log(p)); x = (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1.0); } // Central region else if (p <= 0.97575) { /* Rational approximation for central region. */ const Scalar q = p - 0.5; const Scalar r = q * q; x = q * (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1.0); } // Right tail else { /* Rational approximation for tail region. */ const Scalar q = std::sqrt(-2.0 * log1p(-p)); x = -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1.0); } /* The relative error of the approximation has absolute value less than 1.15e-9. One iteration of Newton's rational method (second order) gives full machine precision... */ // 2.50662827463100050241576528481 = sqrt(2.pi) const Scalar e = pNormal(x) - p; const Scalar u = e * 2.50662827463100050241576528481 * std::exp(0.5 * x * x); x -= u / (1.0 + 0.5 * x * u); return (tail ? -x : x); } /* Random number generation We use the improved ziggurat method, see: Doornik, J.A. (2005), "An Improved Ziggurat Method to Generate Normal Random Samples", mimeo, Nuffield College, University of Oxford, and www.doornik.com/research. */ Scalar DistFunc::rNormal() { for (;;) { const Scalar u = 2.0 * RandomGenerator::Generate() - 1.0; const UnsignedInteger index = RandomGenerator::IntegerGenerate(DistFunc::NumberOfBandNormalZigurrat); /* Are we in a rectangular band of the ziggurat? */ if (std::abs(u) < DistFunc::NormalZigguratRatio[index]) return u * NormalZigguratAbscissa[index + 1]; /* No, we are either on a wedge or in the upper tail of the Normal distribution */ /* Are we in the bottom band? Sample from the tail of the Normal distribution */ if (index == DistFunc::NumberOfBandNormalZigurrat - 1) { Scalar x = -1.0; Scalar y = -1.0; /* Marsaglia method */ do { x = std::log(RandomGenerator::Generate()) / DistFunc::NormalZigguratTail; y = std::log(RandomGenerator::Generate()); } while (-(y + y) < x * x); return (u > 0.0) ? x - DistFunc::NormalZigguratTail : DistFunc::NormalZigguratTail - x; } /* Are we in the wedges? Basic rejection method */ const Scalar xI = NormalZigguratAbscissa[index]; const Scalar xIp1 = NormalZigguratAbscissa[index + 1]; const Scalar x = u * xIp1; const Scalar pdfX = std::exp(-0.5 * x * x); const Scalar pdfI = std::exp(-0.5 * xI * xI); const Scalar pdfIp1 = std::exp(-0.5 * xIp1 * xIp1); if (RandomGenerator::Generate() * (pdfI - pdfIp1) < pdfX - pdfIp1) return x; } } Point DistFunc::rNormal(const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rNormal(); return result; } /**********************************************************************************/ /* Poisson distribution, i.e. with a PDF equals to exp(-lambda) . lambda ^ k / k! */ /**********************************************************************************/ /* Quantile function We use the algorithm described in: Mikes Giles, "Fast evaluation of the inverse Poisson cumulative distribution function", https://people.maths.ox.ac.uk/gilesm/poissinv/paper.pdf It is the Author's implementation, used in OpenTURNS with his written permission, see COPYING.poissinv */ Scalar DistFunc::qPoisson(const Scalar lambda, const Scalar p, const Bool tail) { Scalar r = tail ? 1.0 - p : p; if (r <= SpecFunc::MinScalar) r = SpecFunc::MinScalar; if (r >= 1.0 - SpecFunc::ScalarEpsilon) r = 1.0 - SpecFunc::ScalarEpsilon; // We use the scalar version return poissinv_scalar(r, lambda); } /* Random number generation For the small values of lambda, we use the method of inversion by sequential search described in: Luc Devroye, "Non-Uniform RandomVariate Generation", Springer-Verlag, 1986, available online at: http://cg.scs.carleton.ca/~luc/nonuniformrandomvariates.zip and with the important errata at: http://cg.scs.carleton.ca/~luc/errors.pdf For the large values of lambda, we use the ratio of uniform method described in: E. Stadlober, "The ratio of uniforms approach for generating discrete random variates". Journal of Computational and Applied Mathematics, vol. 31, no. 1, 1990, pp. 181-189. */ UnsignedInteger DistFunc::rPoisson(const Scalar lambda) { Scalar mu = floor(lambda); // Small case. The bound 6 is quite arbitrary, but must be < 80 to avoid overflow. if (mu < 6) { UnsignedInteger x = 0; Scalar sum = std::exp(-lambda); Scalar prod = sum; const Scalar u = RandomGenerator::Generate(); for (;;) { if (u <= sum) return x; ++x; prod *= lambda / x; sum += prod; } } // Small case // Large case const Scalar hatCenter = lambda + 0.5; const Scalar mode = floor(lambda); const Scalar logLambda = std::log(lambda); const Scalar pdfMode = mode * logLambda - SpecFunc::LnGamma(mode + 1.0); // 2.943035529371538572764190 = 8 / e // 0.898916162058898740826254 = 3 - 2 sqr(3 / e) const Scalar hatWidth = std::sqrt(2.943035529371538572764190 * (lambda + 0.5)) + 0.898916162058898740826254; const Scalar safetyBound = hatCenter + 6.0 * hatWidth; for (;;) { const Scalar u = RandomGenerator::Generate(); const Scalar x = hatCenter + hatWidth * (RandomGenerator::Generate() - 0.5) / u; if (x < 0 || x >= safetyBound) continue; const UnsignedInteger k = static_cast< UnsignedInteger >(floor(x)); const Scalar logPdf = k * logLambda - SpecFunc::LnGamma(k + 1.0) - pdfMode; // Quick acceptance if (logPdf >= u * (4.0 - u) - 3.0) return k; // Quick rejection if (u * (u - logPdf) > 1.0) continue; // Acceptance if (2.0 * std::log(u) <= logPdf) return k; } } Indices DistFunc::rPoisson(const Scalar lambda, const UnsignedInteger size) { Indices result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = rPoisson(lambda); return result; } /********************************************************************************************************************************/ /* Normalized Student distribution, i.e. with a PDF equals to (1 + x^2 / nu)^(-(1 + nu) / 2) / (sqrt(nu) . Beta(1 / 2, nu / 2)) */ /********************************************************************************************************************************/ /* CDF */ Scalar DistFunc::pStudent(const Scalar nu, const Scalar x, const Bool tail) { return StudentFunctions::StudentCDF(nu, x, tail); } /* CDF inverse */ Scalar DistFunc::qStudent(const Scalar nu, const Scalar p, const Bool tail) { if (!tail && (p > 1.0 - SpecFunc::ScalarEpsilon)) return StudentFunctions::StudentQuantile(nu, 1.0 - SpecFunc::ScalarEpsilon, tail); return StudentFunctions::StudentQuantile(nu, p, tail); } /* Random number generation We use a transformation method based on Gamma and Normal transformation: If N is Normal(0, 1) distributed and G is Gamma(nu / 2) distributed, sqrt(2 * nu) * N / sqrt(G) is distributed according to Student(nu) */ Scalar DistFunc::rStudent(const Scalar nu) { return StudentFunctions::StudentRealization(nu); } Point DistFunc::rStudent(const Scalar nu, const UnsignedInteger size) { Point result(size); for (UnsignedInteger i = 0; i < size; ++i) result[i] = StudentFunctions::StudentRealization(nu); return result; } /* Compute the expectation of the min of n independent standard normal random variables. Usefull for the modified moment estimator of the LogNormal distribution. */ Scalar DistFunc::eZ1(const UnsignedInteger n) { if (!(n > 0)) throw InvalidArgumentException(HERE) << "Error: n must be strictly positive."; static Scalar nodes[128] = {9.8079096926749782026033390e-02, 2.9424096921218469797991561e-01, 4.9041387858718514746809250e-01, 6.8660518909321215660380258e-01, 8.8282227375329345793892660e-01, 1.0790725181825577535496122e+00, 1.2753633242167377696353796e+00, 1.4717021135638638145739759e+00, 1.6680963314844359561817086e+00, 1.8645534505054447383309383e+00, 2.0610809741737079558017920e+00, 2.2576864408541048712667240e+00, 2.4543774275784199432866622e+00, 2.6511615539506562785567740e+00, 2.8480464861148453552909053e+00, 3.0450399407915649134290777e+00, 3.2421496893895821993047513e+00, 3.4393835621992660247489466e+00, 3.6367494526746595077587933e+00, 3.8342553218113771844054655e+00, 4.0319092026277868364264334e+00, 4.2297192047572594302912378e+00, 4.4276935191596217359545187e+00, 4.6258404229603273857896694e+00, 4.8241682844262754351411023e+00, 5.0226855680876531919920886e+00, 5.2214008400156647181628365e+00, 5.4203227732665307412164732e+00, 5.6194601535027128016005275e+00, 5.8188218848029276413744931e+00, 6.0184169956731807988206196e+00, 6.2182546452717651529731537e+00, 6.4183441298619452136612962e+00, 6.6186948895068861733967826e+00, 6.8193165150222935201989526e+00, 7.0202187552032102976570365e+00, 7.2214115243424814429173638e+00, 7.4229049100595452662318140e+00, 7.6247091814594590441665212e+00, 7.8268347976434177117924059e+00, 8.0292924165934915265672000e+00, 8.2320929044559011583234267e+00, 8.4352473452488789318099250e+00, 8.6387670510230462242060088e+00, 8.8426635725042840919313109e+00, 9.0469487102513035219338200e+00, 9.2516345263625515942763530e+00, 9.4567333567697407325779683e+00, 9.6622578241581829095747019e+00, 9.8682208515572746537567071e+00, 1.0074635676647940494041886e+01, 1.0281515866837634049248891e+01, 1.0488875335157653191251042e+01, 1.0696728357042088900345860e+01, 1.0905089588052741961530773e+01, 1.1113974082619858662822321e+01, 1.1323397313874613884362823e+01, 1.1533375194655972686401645e+01, 1.1743924099781963641404176e+01, 1.1955060889683582572281695e+01, 1.2166802935508609351446676e+01, 1.2379168145812671465813240e+01, 1.2592174994966049877127273e+01, 1.2805842553417136659329113e+01, 1.3020190519967281793289524e+01, 1.3235239256227193956928362e+01, 1.3451009823442300506862860e+01, 1.3667524021893770835767368e+01, 1.3884804433103548556990800e+01, 1.4102874465096049669738234e+01, 1.4321758400996546516308293e+01, 1.4541481451277113257067713e+01, 1.4762069809995873134112522e+01, 1.4983550715414763026069010e+01, 1.5205952515425821882539839e+01, 1.5429304738266944762150950e+01, 1.5653638169066098815394345e+01, 1.5878984932819323859862773e+01, 1.6105378584483803337592983e+01, 1.6332854206954513949199624e+01, 1.6561448517793378857450989e+01, 1.6791199985695774874822891e+01, 1.7022148957813457866272315e+01, 1.7254337799208822083094216e+01, 1.7487811045896949980107817e+01, 1.7722615573144060013318108e+01, 1.7958800780939722006343882e+01, 1.8196418798852933084511311e+01, 1.8435524712827875258644471e+01, 1.8676176816885087724358203e+01, 1.8918436893181770856317469e+01, 1.9162370524468337507669120e+01, 1.9408047443678915527648282e+01, 1.9655541926238779717773660e+01, 1.9904933231696581852007900e+01, 2.0156306102538408960103184e+01, 2.0409751329571602386146602e+01, 2.0665366395153397356064835e+01, 2.0923256207880053036728538e+01, 2.1183533945274238266112570e+01, 2.1446322024681900006387514e+01, 2.1711753227242152331884139e+01, 2.1979972005732402979093282e+01, 2.2251136014735937033989485e+01, 2.2525417911510261410205347e+01, 2.2803007488961426903566920e+01, 2.3084114219397521301316111e+01, 2.3368970310885331538480179e+01, 2.3657834409456066774035863e+01, 2.3950996123628848479052048e+01, 2.4248781608052614781871560e+01, 2.4551560528643458715087857e+01, 2.4859754855145844760826474e+01, 2.5173850108958237208064469e+01, 2.5494409967825708622699690e+01, 2.5822095551225733525384449e+01, 2.6157691379788251433263128e+01, 2.6502141097849996836684948e+01, 2.6856597908134813373229728e+01, 2.7222497961270095541841192e+01, 2.7601671075507827784986288e+01, 2.7996515289006133611177657e+01, 2.8410287565216026379953973e+01, 2.8847623300317097284912261e+01, 2.9315556495648897392258304e+01, 2.9825809458081402413142885e+01, 3.0401117779657764294819147e+01, 3.1100951037096511748801284e+01 }; static Scalar weights[128] = {7.7880553112849072198766294e-02, 7.4943512919414536910806816e-02, 6.9397141749149403969696237e-02, 6.1836746879648318333389484e-02, 5.3020239572973708333178304e-02, 4.3743820721247411296800373e-02, 3.4726352391828770445416924e-02, 2.6524913163345550162895103e-02, 1.9493216056892157244261750e-02, 1.3782486012401120501189296e-02, 9.3748300171492664629503913e-03, 6.1343092263553692729419654e-03, 3.8610584455446167914723509e-03, 2.3375177719222513086212317e-03, 1.3610623554229154160050607e-03, 7.6214868374154758836225128e-04, 4.1039424914329114912560963e-04, 2.1248156236438935169486303e-04, 1.0576827089812413493907134e-04, 5.0612366034536501431668631e-05, 2.3279572286335517177399318e-05, 1.0291000375452160655354603e-05, 4.3716822258132265765633340e-06, 1.7843872447157496838756722e-06, 6.9970863752445993319645415e-07, 2.6355296294457982485801659e-07, 9.5339500076719088603559665e-08, 3.3117736286643680141438096e-08, 1.1044763292458927772742952e-08, 3.5357534962409985484084265e-09, 1.0863147662329805097318140e-09, 3.2025234569583239758235623e-10, 9.0573898119730292539244887e-11, 2.4569445682930553563482259e-11, 6.3910595568724711910845065e-12, 1.5938054964152907343039923e-12, 3.8095919232928330906238773e-13, 8.7255716548816521833151253e-14, 1.9145600624729613090422991e-14, 4.0233405909344399451473717e-15, 8.0951675009613752719948473e-16, 1.5590499798725125935141981e-16, 2.8731516823222887474066625e-17, 5.0650721565888260826310931e-18, 8.5388712150794321468581963e-19, 1.3761221211258663377847429e-19, 2.1193549695588593255142755e-20, 3.1180535562838082396978111e-21, 4.3806011311093044092563723e-22, 5.8746940037473806331850174e-23, 7.5173209054033447555417709e-24, 9.1745690698535897008652337e-25, 1.0674922835552105657158543e-25, 1.1836003268604515384321003e-26, 1.2499832905811924753397716e-27, 1.2567593992729679307393964e-28, 1.2023503699854981391237349e-29, 1.0939938866854915092942988e-30, 9.4616999410627741962246371e-32, 7.7741057498528684818055696e-33, 6.0646535975418060617176232e-34, 4.4892461173993180351676461e-35, 3.1512300703857921867014789e-36, 2.0962490291314412221073794e-37, 1.3205879942102419576039463e-38, 7.8731309724410339834852054e-40, 4.4387936139837483446171576e-41, 2.3647681386310266830599492e-42, 1.1895249269031468696051071e-43, 5.6449598528648601040867566e-45, 2.5250874009530786161544321e-46, 1.0637272217126616433515017e-47, 4.2161469063242967027862854e-49, 1.5707547975689386981401980e-50, 5.4949672861369168167697578e-52, 1.8031127826300551915850409e-53, 5.5436741208780826872988904e-55, 1.5950823588115267095636623e-56, 4.2899178785744838761108310e-58, 1.0770598014915502881777703e-59, 2.5210019210640023596252402e-61, 5.4933568192556171804844677e-63, 1.1127348357056033046953705e-64, 2.0919910037640666023889327e-66, 3.6444488891998227750903798e-68, 5.8729939242428208168494011e-70, 8.7388392883152991177346810e-72, 1.1983435235137524938450365e-73, 1.5113381294896973696530902e-75, 1.7492932046071090072619502e-77, 1.8539433227865165645693191e-79, 1.7947949751038629650034721e-81, 1.5830825023894390544815014e-83, 1.2687510116986886750192806e-85, 9.2123101777701364185032765e-88, 6.0412782427518176337230762e-90, 3.5662449072374121768733826e-92, 1.8882726818582926654010717e-94, 8.9335232334505241260528038e-97, 3.7608844095106074694647086e-99, 1.4025800177880556273945875e-101, 4.6114419052210857911207097e-104, 1.3296527917278135803395156e-106, 3.3431060612647631418663216e-109, 7.2838408325905858803792272e-112, 1.3658255130442080104321089e-114, 2.1876645330156469909347131e-117, 2.9682322505121909735883514e-120, 3.3800825692122852526903147e-123, 3.1972924782982543066350585e-126, 2.4832856265123329861700072e-129, 1.5630453427246388490165028e-132, 7.8550152086622435117816579e-136, 3.0983962164454199109222893e-139, 9.4051577447557691199185888e-143, 2.1469376259019048933868626e-146, 3.5864591066294724118391333e-150, 4.2436752264252758983575152e-154, 3.4184301509636211134786682e-158, 1.7847924896743181968557422e-162, 5.6754752717640951349146435e-167, 1.0136208941909344983031939e-171, 9.1144573618340727008462260e-177, 3.5359397081504360617642767e-182, 4.6913583190766486697804951e-188, 1.4509334500270392274530570e-194, 5.0208177568884358829526795e-202, 2.9540145871800834681710394e-211 }; Scalar value = 0.0; // Least square approximation of eZ1 const Scalar z0 = -1.5270815222604243733 - 0.25091814704012410653 * std::log(static_cast(n)); for (UnsignedInteger i = 0; i < 128; ++i) value += weights[i] * ((z0 + nodes[i]) * std::exp(-z0 * nodes[i]) * std::pow(pNormal(z0 + nodes[i], true), static_cast(n - 1)) + (z0 - nodes[i]) * std::exp(z0 * nodes[i]) * std::pow(pNormal(z0 - nodes[i], true), static_cast(n - 1))); return n * exp(-0.5 * z0 * z0) * value; } /* Dickey Fuller asymptotic table The use of such table allow to make a linear approximation */ Scalar DistFunc::pDickeyFullerTrend(const Scalar x, const Bool tail) { // Quantiles and values available const Scalar q001 = -3.96; const Scalar q005 = -3.41; const Scalar q010 = -3.13; const Scalar p001 = 0.01; const Scalar p005 = 0.05; const Scalar p010 = 0.10; if (x < q001) { LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.01 quantile level "); return p001; } if (x <= q005) { // Linear approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (p005 - p001) / (q005 - q001); const Scalar b = p001 - a * q001; return (a * x + b); } if (x <= q010) { // Linear approach using the same approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (p010 - p005) / (q010 - q005); const Scalar b = p005 - a * q005; return (a * x + b); } // Arbitrary we seek values until level 0.15 LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.10 quantile levels "); return p010; } Scalar DistFunc::pDickeyFullerConstant(const Scalar x, const Bool tail) { // Quantiles and values available const Scalar q001 = -3.43; const Scalar q005 = -2.86; const Scalar q010 = -2.57; const Scalar p001 = 0.01; const Scalar p005 = 0.05; const Scalar p010 = 0.10; if (x < q001) { LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.01 quantile level "); return p001; } if (x <= q005) { // Linear approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (p005 - p001) / (q005 - q001); const Scalar b = p001 - a * q001; return (a * x + b); } if (x <= q010) { // Linear approach using the same approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (p010 - p005) / (q010 - q005); const Scalar b = p005 - a * q005; return (a * x + b); } LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.10 quantile levels "); return p010; } Scalar DistFunc::pDickeyFullerNoConstant(const Scalar x, const Bool tail) { // Quantiles and values available const Scalar q001 = -2.57; const Scalar q005 = -1.94; const Scalar q010 = -1.62; const Scalar p001 = 0.01; const Scalar p005 = 0.05; const Scalar p010 = 0.10; if (x < q001) { LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.01 quantile level "); return p001; } if (x <= q005) { // Linear approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (p005 - p001) / (q005 - q001); const Scalar b = p001 - a * q001; return (a * x + b); } if (x <= q010) { // Linear approach using the same approach // quantileFunction(q) = a * q + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (p010 - p005) / (q010 - q005); const Scalar b = p005 - a * q005; return (a * x + b); } LOGWARN(OSS() << "Warning! Result p-value is missing. The return result is the 0.10 quantile levels "); return p010; } // We currently use the asymptotic distribution // We get the values for levels 0.01, 0.05 and 0.10 // If level is lower than 0.01 we return the 0.01 quantile value and we inform user // by giving a warning message // if the quantile level is between 0.01 and 0.05, we use a linear interpolation // The same result is done if the level seeked is between 0.05 and 0.10 // Finally if the leval is upper than 0.10 we return the 0.10-quantile value with a warning message Scalar DistFunc::qDickeyFullerTrend(const Scalar p, const Bool tail) { // Asymptotic distribution // quantile values for levels 0.01, 0.05 and 0.10 const Scalar x001 = -4.96; const Scalar x005 = -3.41; const Scalar x010 = -3.13; if (p < 0.01) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.01 "); return x001; } if (p <= 0.05) { // Linear approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (x005 - x001) / (0.05 - 0.01); const Scalar b = x001 - a * 0.01; return (a * p + b); } if (p <= 0.10) { // Linear approach using the same approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (x010 - x005) / (0.10 - 0.05); const Scalar b = x005 - a * 0.05; return (a * p + b); } // Arbitrary we seek values until level 0.15 if (p <= 0.15) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.10 "); return x010; } throw NotYetImplementedException(HERE) << "In DistFunc::pDickeyFullerNoConstant(const Scalar x, const Bool tail): cannot give quantile value for the level " << p << ". Value is missing in table"; } Scalar DistFunc::qDickeyFullerConstant(const Scalar p, const Bool tail) { // Asymptotic distribution // quantile values for levels 0.01, 0.05 and 0.10 const Scalar x001 = -3.43; const Scalar x005 = -2.86; const Scalar x010 = -2.57; if (p < 0.01) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.01 "); return x001; } if (p <= 0.05) { // Linear approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (x005 - x001) / (0.05 - 0.01); const Scalar b = x001 - a * 0.01; return (a * p + b); } if (p <= 0.10) { // Linear approach using the same approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (x010 - x005) / (0.10 - 0.05); const Scalar b = x005 - a * 0.05; return (a * p + b); } // Arbitrary we seek values until level 0.15 if (p <= 0.15) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.10 "); return x010; } throw NotYetImplementedException(HERE) << "In DistFunc::qDickeyFullerConstant(const Scalar p, const Bool tail): cannot give quantile value for the level " << p << ". Value is missing in table"; } Scalar DistFunc::qDickeyFullerNoConstant(const Scalar p, const Bool tail) { // Asymptotic distribution // quantile values for levels 0.01, 0.05 and 0.10 const Scalar x001 = -2.57; const Scalar x005 = -1.94; const Scalar x010 = -1.62; if (p < 0.01) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.01 "); return x001; } if (p <= 0.05) { // Linear approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.01 and 0.05 const Scalar a = (x005 - x001) / (0.05 - 0.01); const Scalar b = x001 - a * 0.01; return (a * p + b); } if (p <= 0.10) { // Linear approach using the same approach // quantileFunction(p) = a * p + b // We use information available : quantile values for levels 0.05 and 0.10 const Scalar a = (x010 - x005) / (0.10 - 0.05); const Scalar b = x005 - a * 0.05; return (a * p + b); } // Arbitrary we seek values until level 0.15 if (p <= 0.15) { LOGWARN(OSS() << "Warning! Result quantile value is missing. The return result is for level 0.10 "); return x010; } throw NotYetImplementedException(HERE) << "In DistFunc::qDickeyFullerNoConstant(const Scalar p, const Bool tail): cannot give quantile value for the level " << p << ". Value is missing in table"; } Point DistFunc::rUniformTriangle(const Point & a, const Point & b, const Point & c) { const UnsignedInteger dimension = a.getDimension(); if (b.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the second point has a dimension=" << b.getDimension() << ", expected dimension=" << dimension; if (c.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the third point has a dimension=" << c.getDimension() << ", expected dimension=" << dimension; const Scalar u = RandomGenerator::Generate(); const Scalar v = RandomGenerator::Generate(); const Scalar sqrtU = std::sqrt(u); Scalar x = 1.0 - sqrtU; Scalar y = v * sqrtU; Scalar z = 1.0 - x - y; if (z < 0.0) { x = sqrtU; y = 1.0 - sqrtU; z = -z; } Point result(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = x * a[i] + y * b[i] + z * c[i]; return result; } Sample DistFunc::rUniformTriangle(const Point & a, const Point & b, const Point & c, const UnsignedInteger size) { // Here we reproduce the algorithm in order to avoid costly data copy and tests const UnsignedInteger dimension = a.getDimension(); if (b.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the second point has a dimension=" << b.getDimension() << ", expected dimension=" << dimension; if (c.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the third point has a dimension=" << c.getDimension() << ", expected dimension=" << dimension; Sample result(size, dimension); for (UnsignedInteger n = 0; n < size; ++n) { const Scalar u = RandomGenerator::Generate(); const Scalar v = RandomGenerator::Generate(); const Scalar sqrtU = std::sqrt(u); Scalar x = 1.0 - sqrtU; Scalar y = v * sqrtU; Scalar z = 1.0 - x - y; if (z < 0.0) { x = sqrtU; y = 1.0 - sqrtU; z = -z; } for (UnsignedInteger i = 0; i < dimension; ++i) result[n][i] = x * a[i] + y * b[i] + z * c[i]; } // n return result; } /* K factor for exact two-sided tolerance intervals of normal pooled populations * see Janiga, I. Miklos, R. "Statistical Tolerance Intervals for a Normal Distribution", Measurement Science Review, 2001. * Here we use \alpha instead of 1-\alpha wrt the reference */ Scalar DistFunc::kFactorPooled(const UnsignedInteger n, const UnsignedInteger m, const Scalar p, const Scalar alpha) { if (!(n >= 2)) throw InvalidArgumentException(HERE) << "Error: the population size n must be at least 2"; if (m == 0) throw InvalidArgumentException(HERE) << "Error: the number m of pooled populations must be positive"; return KFactorFunctions::KFactor(n, m * (n - 1), p, 1.0 - alpha); } /* K factor for exact two-sided tolerance intervals of normal populations * see Janiga, I. Miklos, R. "Statistical Tolerance Intervals for a Normal Distribution", Measurement Science Review, 2001. * Here we use \alpha instead of 1-\alpha wrt the reference */ Scalar DistFunc::kFactor(const UnsignedInteger n, const Scalar p, const Scalar alpha) { if (!(n >= 2)) throw InvalidArgumentException(HERE) << "Error: the population size n must be at least 2"; return KFactorFunctions::KFactor(n, n - 1, p, 1.0 - alpha); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Epanechnikov.cxx000066400000000000000000000141311307543307100251020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Epanechnikov distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Epanechnikov.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Epanechnikov); static const Factory Factory_Epanechnikov; /* Default constructor */ Epanechnikov::Epanechnikov() : ContinuousDistribution() { setName("Epanechnikov"); setDimension(1); setRange(Interval(-1.0, 1.0)); } /* Comparison operator */ Bool Epanechnikov::operator ==(const Epanechnikov & other) const { return true; } Bool Epanechnikov::equals(const DistributionImplementation & other) const { const Epanechnikov* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Epanechnikov::__repr__() const { OSS oss(true); oss << "class=" << Epanechnikov::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } String Epanechnikov::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "()"; return oss; } /* Virtual constructor */ Epanechnikov * Epanechnikov::clone() const { return new Epanechnikov(*this); } /* Get the DDF of the distribution */ Point Epanechnikov::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= -1.0) || (x > 1.0)) return Point(1, 0.0); return Point(1, -1.5 * x); } /* Get the PDF of the distribution */ Scalar Epanechnikov::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= -1.0) || (x > 1.0)) return 0.0; return 0.75 * (1.0 + x) * (1.0 - x); } /* Get the CDF of the distribution */ Scalar Epanechnikov::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= -1.0) return 0.0; if (x >= 1.0) return 1.0; return 0.5 + x * (0.75 - 0.25 * x * x); } Scalar Epanechnikov::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= -1.0) return 1.0; if (x > 1.0) return 0.0; return 0.5 - x * (0.75 - 0.25 * x * x); } /** Get the PDFGradient of the distribution */ Point Epanechnikov::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /** Get the CDFGradient of the distribution */ Point Epanechnikov::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /* Get the quantile of the distribution */ Scalar Epanechnikov::computeScalarQuantile(const Scalar prob, const Bool tail) const { // 2.094395102393195492308429 = 2 * Pi / 3 if (tail) return 2.0 * std::cos(0.3333333333333333333333333 * std::acos(2.0 * prob - 1.0) - 2.094395102393195492308429); return 2.0 * std::cos(0.3333333333333333333333333 * std::acos(1.0 - 2.0 * prob) - 2.094395102393195492308429); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Epanechnikov::getRoughness() const { return 0.6; } /* Compute the mean of the distribution */ void Epanechnikov::computeMean() const { mean_ = Point(1, 0.0); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Epanechnikov::getStandardDeviation() const { // 0.4472135954999579392818348 = 1 / sqrt(5) return Point(1, 0.4472135954999579392818348); } /* Get the skewness of the distribution */ Point Epanechnikov::getSkewness() const { return Point(1, 0.0); } /* Get the kurtosis of the distribution */ Point Epanechnikov::getKurtosis() const { // 2.142857142857142857142857 = 15 / 7 return Point(1, 2.142857142857142857142857); } /* Get the moments of the standardized distribution */ Point Epanechnikov::getStandardMoment(const UnsignedInteger n) const { if (n % 2 == 1) return Point(1, 0.0); return Point(1, 3.0 / (3.0 + n * (4.0 + n))); } /* Compute the covariance of the distribution */ void Epanechnikov::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 0.2; isAlreadyComputedCovariance_ = 0; } /* Check if the distribution is elliptical */ Bool Epanechnikov::isElliptical() const { return true; } /* Method save() stores the object through the StorageManager */ void Epanechnikov::save(Advocate & adv) const { ContinuousDistribution::save(adv); } /* Method load() reloads the object from the StorageManager */ void Epanechnikov::load(Advocate & adv) { ContinuousDistribution::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Exponential.cxx000066400000000000000000000226241307543307100247640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Exponential distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Exponential.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Exponential); static const Factory Factory_Exponential; /* Default constructor */ Exponential::Exponential() : ContinuousDistribution() , lambda_(1.0) , gamma_(0.0) { setName( "Exponential" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Exponential::Exponential(const Scalar lambda, const Scalar gamma) : ContinuousDistribution() , lambda_(0.0) , gamma_(gamma) { setName( "Exponential" ); // We set the dimension of the Exponential distribution setDimension( 1 ); // This call check lambda and set also the range. setLambda(lambda); } /* Comparison operator */ Bool Exponential::operator ==(const Exponential & other) const { if (this == &other) return true; return (lambda_ == other.lambda_) && (gamma_ == other.gamma_); } Bool Exponential::equals(const DistributionImplementation & other) const { const Exponential* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Exponential::__repr__() const { OSS oss(true); oss << "class=" << Exponential::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lambda=" << lambda_ << " gamma=" << gamma_; return oss; } String Exponential::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(lambda = " << lambda_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ Exponential * Exponential::clone() const { return new Exponential(*this); } /* Get one realization of the distribution */ Point Exponential::getRealization() const { return Point(1, gamma_ - std::log(RandomGenerator::Generate()) / lambda_); } /* Get the DDF of the distribution */ Point Exponential::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] < gamma_) return Point(1, 0.0); return Point(1, -lambda_ * computePDF(point)); } /* Get the PDF of the distribution */ Scalar Exponential::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x < 0.0) return 0.0; return lambda_ * std::exp(-lambda_ * x); } Scalar Exponential::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x < 0.0) return SpecFunc::LogMinScalar; return std::log(lambda_) - lambda_ * x; } /* Get the CDF of the distribution */ Scalar Exponential::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return -expm1(-lambda_ * x); } /* Get the complementary CDF of the distribution */ Scalar Exponential::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x < 0.0) return 1.0; return std::exp(-lambda_ * x); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Exponential::computeCharacteristicFunction(const Scalar x) const { return std::exp(Complex(0.0, x * gamma_)) / Complex(1.0, -x / lambda_); } Complex Exponential::computeLogCharacteristicFunction(const Scalar x) const { return Complex(0.0, x * gamma_) - std::log(Complex(1.0, - x / lambda_)); } /* Get the PDFGradient of the distribution */ Point Exponential::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point pdfGradient(2, 0.0); if (x < 0.0) return pdfGradient; const Scalar expX = std::exp(-lambda_ * x); pdfGradient[0] = (1.0 - lambda_ * x) * expX; pdfGradient[1] = lambda_ * lambda_ * expX; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Exponential::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point cdfGradient(2, 0.0); if (x < 0.0) return cdfGradient; const Scalar expX = std::exp(-lambda_ * x); cdfGradient[0] = x * expX; cdfGradient[1] = -lambda_ * expX; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Exponential::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return gamma_ - std::log(prob) / lambda_; return gamma_ - log1p(-prob) / lambda_; } /* Compute the mean of the distribution */ void Exponential::computeMean() const { mean_ = Point(1, gamma_ + 1.0 / lambda_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Exponential::getStandardDeviation() const { return Point(1, 1.0 / lambda_); } /* Get the skewness of the distribution */ Point Exponential::getSkewness() const { return Point(1, 2.0); } /* Get the kurtosis of the distribution */ Point Exponential::getKurtosis() const { return Point(1, 9.0); } /* Compute the covariance of the distribution */ void Exponential::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 1.0 / (lambda_ * lambda_); isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Exponential::getStandardMoment(const UnsignedInteger n) const { return Point(1, SpecFunc::Gamma(n + 1)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Exponential::Implementation Exponential::getStandardRepresentative() const { return Exponential(1.0).clone(); } /* Parameters value accessor */ Point Exponential::getParameter() const { Point point(2); point[0] = lambda_; point[1] = gamma_; return point; } void Exponential::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Exponential(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Exponential::getParameterDescription() const { Description description(2); description[0] = "lambda"; description[1] = "gamma"; return description; } /* Lambda accessor */ void Exponential::setLambda(const Scalar lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if (lambda != lambda_) { lambda_ = lambda; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda accessor */ Scalar Exponential::getLambda() const { return lambda_; } /* Gamma accessor */ void Exponential::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depend on gamma computeRange(); } } /* Gamma accessor */ Scalar Exponential::getGamma() const { return gamma_; } /* Compute the numerical range of the distribution given the parameters values */ void Exponential::computeRange() { setRange(Interval(Point(1, gamma_), Point(1, computeScalarQuantile(cdfEpsilon_, true)), Interval::BoolCollection(1, true), Interval::BoolCollection(1, false))); } /* Method save() stores the object through the StorageManager */ void Exponential::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "gamma_", gamma_ ); } /* Method load() reloads the object from the StorageManager */ void Exponential::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "gamma_", gamma_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ExponentialFactory.cxx000066400000000000000000000066571307543307100263240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Exponential distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ExponentialFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ExponentialFactory); static const Factory Factory_ExponentialFactory; /* Default constructor */ ExponentialFactory::ExponentialFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ ExponentialFactory * ExponentialFactory::clone() const { return new ExponentialFactory(*this); } /* Here is the interface that all derived class must implement */ ExponentialFactory::Implementation ExponentialFactory::build(const Sample & sample) const { return buildAsExponential(sample).clone(); } ExponentialFactory::Implementation ExponentialFactory::build(const Point & parameters) const { return buildAsExponential(parameters).clone(); } ExponentialFactory::Implementation ExponentialFactory::build() const { return buildAsExponential().clone(); } Exponential ExponentialFactory::buildAsExponential(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Exponential distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build an Exponential distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; if (!SpecFunc::IsNormal(xMin) || !SpecFunc::IsNormal(xMin)) throw InvalidArgumentException(HERE) << "Error: cannot build an Exponential distribution if data contains NaN or Inf"; const Scalar gamma = xMin - std::abs(xMin) / (2.0 + size); const Scalar mean = sample.computeMean()[0]; // If sample with constant null data, build an approximation of Dirac(0) by hand if (mean == gamma) { Exponential result(SpecFunc::MaxScalar / SpecFunc::LogMaxScalar, 0.0); result.setDescription(sample.getDescription()); return result; } const Scalar lambda = 1.0 / (mean - gamma); Exponential result(lambda, gamma); result.setDescription(sample.getDescription()); return result; } Exponential ExponentialFactory::buildAsExponential(const Point & parameters) const { try { Exponential distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Exponential distribution from the given parameters"; } } Exponential ExponentialFactory::buildAsExponential() const { return Exponential(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FarlieGumbelMorgensternCopula.cxx000066400000000000000000000270001307543307100304150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The FarlieGumbelMorgensternCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/FarlieGumbelMorgensternCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FarlieGumbelMorgensternCopula); static const Factory Factory_FarlieGumbelMorgensternCopula; /* Default constructor */ FarlieGumbelMorgensternCopula::FarlieGumbelMorgensternCopula() : CopulaImplementation() , theta_(0.5) { setName( "FarlieGumbelMorgensternCopula" ); setDimension( 2 ); computeRange(); } /* Parameters constructor */ FarlieGumbelMorgensternCopula::FarlieGumbelMorgensternCopula(const Scalar theta) : CopulaImplementation() , theta_(0.0) { setName( "FarlieGumbelMorgensternCopula" ); // Check the value of theta setTheta(theta); // We set the dimension of the FarlieGumbelMorgensternCopula distribution setDimension( 2 ); computeRange(); } /* Comparison operator */ Bool FarlieGumbelMorgensternCopula::operator ==(const FarlieGumbelMorgensternCopula & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool FarlieGumbelMorgensternCopula::equals(const DistributionImplementation & other) const { const FarlieGumbelMorgensternCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String FarlieGumbelMorgensternCopula::__repr__() const { OSS oss; oss << "class=" << FarlieGumbelMorgensternCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } /* Virtual constructor */ FarlieGumbelMorgensternCopula * FarlieGumbelMorgensternCopula::clone() const { return new FarlieGumbelMorgensternCopula(*this); } /* Get one realization of the distribution */ Point FarlieGumbelMorgensternCopula::getRealization() const { Point realization(2); // We use the algorithm described in Nelsen, "An Introduction to Copulas 2nd Edition", Exercise 3.23 to speed-up generation. const Scalar u = RandomGenerator::Generate(); const Scalar t = RandomGenerator::Generate(); const Scalar a = 1.0 + theta_ * (1.0 - 2.0 * u); const Scalar b = std::sqrt(a * a - 4.0 * (a - 1.0) * t); realization[0] = u; realization[1] = 2.0 * t / (a + b); return realization; } /* Get the DDF of the distribution */ Point FarlieGumbelMorgensternCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; Point result(2, 0.0); // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return result; } result[0] = 2.0 * theta_ * (2.0 * v - 1.0); result[1] = 2.0 * theta_ * (2.0 * u - 1.0); return result; } /* Get the PDF of the distribution */ Scalar FarlieGumbelMorgensternCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return 0.0; } return 1.0 + theta_ * (2.0 * u - 1.0) * (2.0 * v - 1.0); } /* Get the CDF of the distribution */ Scalar FarlieGumbelMorgensternCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) return 0.0; // If we are outside of the support, in the upper part if ((u >= 1.0) && (v >= 1.0)) return 1.0; // If we are outside of the support for u, in the upper part if (u >= 1.0) return v; // If we are outside of the support for v, in the upper part if (v >= 1.0) return u; // If we are in the support return u * v * (1.0 + theta_ * (1.0 - u) * (1.0 - v)); } /* Compute the covariance of the distribution */ void FarlieGumbelMorgensternCopula::computeCovariance() const { covariance_ = CovarianceMatrix(2); covariance_(0, 0) = 1.0 / 12.0; covariance_(0, 1) = theta_ / 36.0; covariance_(1, 1) = 1.0 / 12.0; isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix FarlieGumbelMorgensternCopula::getKendallTau() const { CorrelationMatrix tau(2); tau(0, 1) = 2.0 * theta_ / 9.0; return tau; } /* Get the PDFGradient of the distribution */ Point FarlieGumbelMorgensternCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return Point(1, 0.0); } return Point(1, (2.0 * u - 1.0) * (2.0 * v - 1.0)); } /* Get the CDFGradient of the distribution */ Point FarlieGumbelMorgensternCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return Point(1, 0.0); } return Point(1, u * v * (1.0 - u) * (1.0 - v)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar FarlieGumbelMorgensternCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; const Scalar u = y[0]; const Scalar v = x; // If we are in the support return v * (1.0 + theta_ * (v - 1.0) * (2.0 * u - 1.0)); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar FarlieGumbelMorgensternCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case for no conditioning or independent copula if ((q == 0.0) || (q == 1.0)) return q; // Initialize the conditional quantile with the quantile of the i-th marginal distribution // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; const Scalar alpha = theta_ * (1.0 - 2.0 * y[0]); const Scalar alpha1 = 1.0 + alpha; return 2.0 * q / (alpha1 + std::sqrt(alpha1 * alpha1 - 4.0 * q * alpha)); } /* Tell if the distribution has an elliptical copula */ Bool FarlieGumbelMorgensternCopula::hasEllipticalCopula() const { return (theta_ == 0.0); } /* Tell if the distribution has an independent copula */ Bool FarlieGumbelMorgensternCopula::hasIndependentCopula() const { return (theta_ == 0.0); } /* Parameters value accessor */ Point FarlieGumbelMorgensternCopula::getParameter() const { return Point(1, theta_); } void FarlieGumbelMorgensternCopula::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = FarlieGumbelMorgensternCopula(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description FarlieGumbelMorgensternCopula::getParameterDescription() const { return Description(1, "theta"); } /* Theta accessor */ void FarlieGumbelMorgensternCopula::setTheta(const Scalar theta) { if (!(std::abs(theta) <= 1.0)) throw InvalidArgumentException(HERE) << "Theta MUST be in [-1, 1]"; theta_ = theta; } /* Theta accessor */ Scalar FarlieGumbelMorgensternCopula::getTheta() const { return theta_; } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ FarlieGumbelMorgensternCopula::Implementation FarlieGumbelMorgensternCopula::getMarginal(const Indices & indices) const { if (!indices.check(2)) throw InvalidArgumentException(HERE) << "The indices of an archimedean copula must be in the range [0, 1] and must be different"; // General case const UnsignedInteger outputDimension = indices.getSize(); // Only one indice is needed, call the specialized method if (outputDimension == 1) return getMarginal(indices[0]); // The indices correspond to all the components, with a possible transposition of the two components. // As an archimedean copula is exchangeable, the resulting distribution is the copula itself, we just // have to transpose the descriptions FarlieGumbelMorgensternCopula * result(clone()); if (indices[0] != 0) { Description description(getDescription()); String tmp(description[0]); description[0] = description[1]; description[1] = tmp; result->setDescription(description); } return result; } /* Method save() stores the object through the StorageManager */ void FarlieGumbelMorgensternCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "theta_", theta_ ); } /* Method load() reloads the object from the StorageManager */ void FarlieGumbelMorgensternCopula::load(Advocate & adv) { CopulaImplementation::load(adv); adv.loadAttribute( "theta_", theta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FarlieGumbelMorgensternCopulaFactory.cxx000066400000000000000000000077531307543307100317620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FarlieGumbelMorgensternCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/FarlieGumbelMorgensternCopulaFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FarlieGumbelMorgensternCopulaFactory); static const Factory Factory_FarlieGumbelMorgensternCopulaFactory; /* Default constructor */ FarlieGumbelMorgensternCopulaFactory::FarlieGumbelMorgensternCopulaFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ FarlieGumbelMorgensternCopulaFactory * FarlieGumbelMorgensternCopulaFactory::clone() const { return new FarlieGumbelMorgensternCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ FarlieGumbelMorgensternCopulaFactory::Implementation FarlieGumbelMorgensternCopulaFactory::build(const Sample & sample) const { return buildAsFarlieGumbelMorgensternCopula(sample).clone(); } FarlieGumbelMorgensternCopulaFactory::Implementation FarlieGumbelMorgensternCopulaFactory::build(const Point & parameters) const { return buildAsFarlieGumbelMorgensternCopula(parameters).clone(); } FarlieGumbelMorgensternCopulaFactory::Implementation FarlieGumbelMorgensternCopulaFactory::build() const { return buildAsFarlieGumbelMorgensternCopula().clone(); } FarlieGumbelMorgensternCopula FarlieGumbelMorgensternCopulaFactory::buildAsFarlieGumbelMorgensternCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a FarlieGumbelMorgensternCopula distribution from an empty sample"; if (sample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a FarlieGumbelMorgensternCopula distribution from a sample of dimension not equal to 2"; Scalar theta = 4.5 * sample.computeKendallTau().operator()(0, 1); // If it is not possible to use Kendall's tau to build the copula, try Spearman's rho if (std::abs(theta) > 1.0) { LOGWARN(OSS() << "Warning! Unable to build a FarlieGumbelMorgensternCopula based on Kendall's tau: it leads to theta=" << theta << ". Trying to use Spearman's rho instead."); theta = 3.0 * sample.computeSpearmanCorrelation().operator()(0, 1); if (!(std::abs(theta) <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a FarlieGumbelMorgensternCopula from Spearman's rho either: it leads to theta=" << theta; } FarlieGumbelMorgensternCopula result(theta); result.setDescription(sample.getDescription()); return result; } FarlieGumbelMorgensternCopula FarlieGumbelMorgensternCopulaFactory::buildAsFarlieGumbelMorgensternCopula(const Point & parameters) const { try { FarlieGumbelMorgensternCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a FarlieGumbelMorgensternCopula from the given parameters"; } } FarlieGumbelMorgensternCopula FarlieGumbelMorgensternCopulaFactory::buildAsFarlieGumbelMorgensternCopula() const { return FarlieGumbelMorgensternCopula(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FisherSnedecor.cxx000066400000000000000000000245651307543307100254070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Fisher-Snedecor distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/FisherSnedecor.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FisherSnedecor); static const Factory Factory_FisherSnedecor; /* Default constructor */ FisherSnedecor::FisherSnedecor() : ContinuousDistribution() , d1_(1.0) , d2_(5.0) , normalizationFactor_(0.0) { setName( "FisherSnedecor" ); setDimension( 1 ); update(); computeRange(); } /* Parameters constructor */ FisherSnedecor::FisherSnedecor(const Scalar d1, const Scalar d2) : ContinuousDistribution() , d1_(d1) , d2_(0.0) , normalizationFactor_(0.0) { setName( "FisherSnedecor" ); setD1(d1); // This call sets also the range setD2(d2); setDimension( 1 ); } /* Comparison operator */ Bool FisherSnedecor::operator ==(const FisherSnedecor & other) const { if (this == &other) return true; return (d1_ == other.d1_) && (d2_ == other.d2_); } Bool FisherSnedecor::equals(const DistributionImplementation & other) const { const FisherSnedecor* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String FisherSnedecor::__repr__() const { OSS oss(true); oss << "class=" << FisherSnedecor::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " d1=" << d1_ << " d2=" << d2_; return oss; } String FisherSnedecor::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(d1 = " << d1_ << ", d2 = " << d2_ << ")"; return oss; } /* Virtual constructor */ FisherSnedecor * FisherSnedecor::clone() const { return new FisherSnedecor(*this); } /* Compute the numerical range of the distribution given the parameters values */ void FisherSnedecor::computeRange() { // Initialize the range with inverted bounds in order to use the generic // implementation of the computeScalarQuantile method to find the upper bound setRange(Interval(Point(1, 0.0), Point(1, -1.0), Interval::BoolCollection(1, true), Interval::BoolCollection(1, false))); // Now, compute the upper bound const Point upperBound(computeUpperBound()); setRange(Interval(Point(1, 0.0), upperBound, Interval::BoolCollection(1, true), Interval::BoolCollection(1, false))); } /* Update the derivative attributes */ void FisherSnedecor::update() { normalizationFactor_ = 0.5 * d1_ * std::log(d1_ / d2_) - SpecFunc::LnBeta(0.5 * d1_, 0.5 * d2_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point FisherSnedecor::getRealization() const { return Point(1, d2_ * DistFunc::rGamma(0.5 * d1_) / (d1_ * DistFunc::rGamma(0.5 * d2_))); } /* Get the PDF of the distribution */ Scalar FisherSnedecor::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar FisherSnedecor::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; return normalizationFactor_ + (0.5 * d1_ - 1.0) * std::log(x) - 0.5 * (d1_ + d2_) * log1p(d1_ * x / d2_); } Point FisherSnedecor::computeLogPDFGradient(const Point & point) const { const Scalar x = point[0]; Point logPdfGradient(2, 0.0); if (!(x > 0.0)) return logPdfGradient; const Scalar d1xd2 = d1_ * x + d2_; // First derivate the normlizationFactor as function of d1_, d2_ (see expression above in LogPDF) // As the term is a combinations of LnBeta(d1/2, d2/2) := log(Beta(d1/2, d2/2), dLnBeta = dBeta/Beta // As dBeta(x,y) = B(x,y) * (DiGamma(X) - DiGamma(x+y)) (see https://en.wikipedia.org/wiki/Beta_function#Derivatives) // it follows that d(LnBeta(x,y)) = dBeta(x,y) / Beta(x,y) = DiGamma(X) - DiGamma(x+y) // Rest is very easy to derivate logPdfGradient[0] = 0.5 * ( std::log(d1_ * x / d1xd2) + 1.0 - SpecFunc::DiGamma(0.5 * d1_) + SpecFunc::DiGamma(0.5 * d1_ + 0.5 * d2_) - (d1_ + d2_) * x / d1xd2); logPdfGradient[1] = 0.5 * (-d1_ / d2_ - SpecFunc::DiGamma(0.5 * d2_) + SpecFunc::DiGamma(0.5 * d1_ + 0.5 * d2_) - log1p(d1_ * x / d2_) + (d1_ + d2_) * (d1_ * x / d2_) / d1xd2); return logPdfGradient; } Point FisherSnedecor::computePDFGradient(const Point & point) const { // PDF(x) = exp(LogPDF(x)) thus PDF(x)' = LogPDF(x)' * exp(LogPDF(x)) Point PdfGradient(computeLogPDFGradient(point)); Scalar pdf = computePDF(point); return PdfGradient * pdf; } /* Get the CDF of the distribution */ Scalar FisherSnedecor::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0) return 0.0; return DistFunc::pBeta(0.5 * d1_, 0.5 * d2_, d1_ * x / (d1_ * x + d2_)); } /* Get the quantile of the distribution */ Scalar FisherSnedecor::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (getRange().getUpperBound()[0] < 0.0) return DistributionImplementation::computeScalarQuantile(prob, tail); const Scalar p = tail ? 1.0 - prob : prob; const Scalar q = DistFunc::qBeta(0.5 * d1_, 0.5 * d2_, p); if (q >= 1.0) return getRange().getUpperBound()[0]; return d2_ * q / (d1_ * (1.0 - q)); } /* Compute the mean of the distribution */ void FisherSnedecor::computeMean() const { if (!(d2_ > 2.0)) throw NotDefinedException(HERE) << "Error: the mean is defined only when d2 > 2."; mean_ = Point(1, d2_ / (d2_ - 2)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point FisherSnedecor::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point FisherSnedecor::getSkewness() const { if (!(d2_ > 6.0)) throw NotDefinedException(HERE) << "Error: the skewness is defined only when d2 > 6."; return Point(1, (2.0 * d1_ + d2_ - 2.0) * std::sqrt(8.0 * (d2_ - 4.0)) / ((d2_ - 6.0) * std::sqrt(d1_ * (d1_ + d2_ - 2.0)))); } /* Get the kurtosis of the distribution */ Point FisherSnedecor::getKurtosis() const { if (!(d2_ > 8.0)) throw NotDefinedException(HERE) << "Error: the kurtosis is defined only when d2 > 6."; return Point(1, 3.0 * (d2_ - 4.0) * (16.0 + d2_ * (-16.0 + 4.0 * d2_) + d1_ * (-20.0 + d2_ * (8.0 + d2_) + d1_ * (10.0 + d2_))) / (d1_ * (d1_ + d2_ - 2.0) * (d2_ - 6.0) * (d2_ - 8.0))); } /* Get the moments of the standardized distribution */ Point FisherSnedecor::getStandardMoment(const UnsignedInteger n) const { if (2 * n >= d2_) throw NotDefinedException(HERE) << "Error: The raw moment of a FisherSnedecor distribution is defined only up to order d2/2, here n=" << n << " and d2=" << d2_; return Point(1, std::exp(n * std::log(d2_ / d1_) + SpecFunc::LogGamma(0.5 * d1_ + n) + SpecFunc::LogGamma(0.5 * d2_ - n) - SpecFunc::LogGamma(0.5 * d1_) - SpecFunc::LogGamma(0.5 * d2_))); } /* Compute the covariance of the distribution */ void FisherSnedecor::computeCovariance() const { if (!(d2_ > 4.0)) throw NotDefinedException(HERE) << "Error: the covariance is defined only when d2 > 4."; covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 2.0 * d2_ * d2_ * (d1_ + d2_ - 2.0) / (d1_ * (d2_ - 4.0) * std::pow(d2_ - 2, 2)); isAlreadyComputedMean_ = true; } /* Parameters value accessor */ Point FisherSnedecor::getParameter() const { Point point(2); point[0] = d1_; point[1] = d2_; return point; } void FisherSnedecor::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = FisherSnedecor(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description FisherSnedecor::getParameterDescription() const { Description description(2); description[0] = "d1"; description[1] = "d2"; return description; } /* D1 accessor */ void FisherSnedecor::setD1(const Scalar d1) { if (!(d1 > 0.0)) throw InvalidArgumentException(HERE) << "Error d1 of a FisherSnedecor distribution must be positive"; if (d1_ != d1) { d1_ = d1; update(); computeRange(); } } Scalar FisherSnedecor::getD1() const { return d1_; } /* D2 accessor */ void FisherSnedecor::setD2(const Scalar d2) { if (!(d2 > 0.0)) throw InvalidArgumentException(HERE) << "Error d2 of a FisherSnedecor distribution must be positive"; if (d2_ != d2) { d2_ = d2; update(); computeRange(); } } Scalar FisherSnedecor::getD2() const { return d2_; } /* Method save() stores the object through the StorageManager */ void FisherSnedecor::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "d1_", d1_ ); adv.saveAttribute( "d2_", d2_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void FisherSnedecor::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "d1_", d1_ ); adv.loadAttribute( "d2_", d2_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FisherSnedecorFactory.cxx000066400000000000000000000103141307543307100267220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FisherSnedecor distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FisherSnedecorFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/TNC.hxx" #include "openturns/MaximumLikelihoodFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FisherSnedecorFactory); static const Factory Factory_FisherSnedecorFactory; /* Default constructor */ FisherSnedecorFactory::FisherSnedecorFactory(): DistributionFactoryImplementation() { } /* Virtual constructor */ FisherSnedecorFactory * FisherSnedecorFactory::clone() const { return new FisherSnedecorFactory(*this); } /* Here is the interface that all derived class must implement */ FisherSnedecorFactory::Implementation FisherSnedecorFactory::build(const Sample & sample) const { return buildAsFisherSnedecor(sample).clone(); } FisherSnedecorFactory::Implementation FisherSnedecorFactory::build(const Point & parameters) const { return buildAsFisherSnedecor(parameters).clone(); } FisherSnedecorFactory::Implementation FisherSnedecorFactory::build() const { return buildAsFisherSnedecor().clone(); } DistributionFactoryResult FisherSnedecorFactory::buildEstimator(const Sample & sample) const { return buildMaximumLikelihoodEstimator(sample, true); } FisherSnedecor FisherSnedecorFactory::buildAsFisherSnedecor(const Sample & sample) const { const UnsignedInteger dimension = build()->getParameterDimension(); MaximumLikelihoodFactory factory(buildAsFisherSnedecor()); // override starting point OptimizationAlgorithm solver(factory.getOptimizationAlgorithm()); solver.setStartingPoint(Point(dimension, 0.0)); factory.setOptimizationAlgorithm(solver); // override bounds Point parametersLowerBound; parametersLowerBound.add(ResourceMap::GetAsScalar("FisherSnedecorFactory-D1LowerBound")); parametersLowerBound.add(ResourceMap::GetAsScalar("FisherSnedecorFactory-D2LowerBound")); Interval bounds(parametersLowerBound, Point(dimension, SpecFunc::MaxScalar), Interval::BoolCollection(dimension, true), Interval::BoolCollection(dimension, false)); factory.setOptimizationBounds(bounds); return buildAsFisherSnedecor(factory.buildParameter(sample)); } FisherSnedecor FisherSnedecorFactory::buildAsFisherSnedecor(const Point & parameters) const { try { FisherSnedecor distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a FisherSnedecor distribution from the given parameters"; } } FisherSnedecor FisherSnedecorFactory::buildAsFisherSnedecor() const { return FisherSnedecor(); } /* Optimization solver accessor */ OptimizationAlgorithm FisherSnedecorFactory::getOptimizationAlgorithm() const { return solver_; } void FisherSnedecorFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm FisherSnedecorFactory::getOptimizationSolver() const { Log::Warn(OSS() << "FisherSnedecorFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void FisherSnedecorFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "FisherSnedecorFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FrankCopula.cxx000066400000000000000000000323321307543307100247000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The FrankCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/FrankCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FrankCopula); static const Factory Factory_FrankCopula; /* Default constructor */ FrankCopula::FrankCopula() : ArchimedeanCopula() , theta_(2.0) { setName( "FrankCopula" ); // We set the dimension of the FrankCopula distribution setDimension( 2 ); computeRange(); } /* Parameters constructor */ FrankCopula::FrankCopula(const Scalar theta) : ArchimedeanCopula() , theta_(theta) { setName( "FrankCopula" ); // We set the dimension of the FrankCopula distribution setDimension( 2 ); computeRange(); } /* Comparison operator */ Bool FrankCopula::operator ==(const FrankCopula & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool FrankCopula::equals(const DistributionImplementation & other) const { const FrankCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String FrankCopula::__repr__() const { OSS oss(true); oss << "class=" << FrankCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } String FrankCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(theta = " << theta_ << ")"; return oss; } /* Virtual constructor */ FrankCopula * FrankCopula::clone() const { return new FrankCopula(*this); } /* Get one realization of the distribution */ Point FrankCopula::getRealization() const { Point realization(2); // We use the general algorithm based on conditional CDF inversion const Scalar u = RandomGenerator::Generate(); realization[0] = u; const Scalar v = RandomGenerator::Generate(); if (theta_ == 0.0) { realization[1] = v; return realization; } const Scalar factor = (v - 1.0) * std::exp(-theta_ * u); realization[1] = 1.0 + std::log((factor - v) / (factor * std::exp(theta_) - v)) / theta_; return realization; } /* Get the DDF of the distribution */ Point FrankCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null DDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return Point(2, 0.0); } // Independent case if (theta_ == 0.0) return Point(2, 0.0); // Optimized version given by Maple 11, as there are a lot of exp's involved const Scalar theta2 = theta_ * theta_; const Scalar expMinusTheta = std::exp(-theta_); const Scalar expMinusThetaU = std::exp(-theta_ * u); const Scalar expMinusThetaV = std::exp(-theta_ * v); const Scalar product1 = expMinusThetaU * expMinusThetaV; const Scalar sum1 = expMinusTheta + product1 - expMinusThetaU - expMinusThetaV; const Scalar product2 = sum1 * sum1; const Scalar factor1 = -theta2 * expMinusThetaU * expMinusThetaV * (expMinusTheta - 1.0) / (sum1 * product2); Point result(2); result[0] = factor1 * (-expMinusTheta + product1 - expMinusThetaU + expMinusThetaV); result[1] = factor1 * (-expMinusTheta + product1 + expMinusThetaU - expMinusThetaV); return result; } /* Get the PDF of the distribution */ Scalar FrankCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) { return 0.0; } // Independent case if (theta_ == 0.0) return 1.0; // General case const Scalar expMinusTheta = std::exp(-theta_); const Scalar expMinusThetaU = std::exp(-theta_ * point[0]); const Scalar expMinusThetaV = std::exp(-theta_ * point[1]); const Scalar sum1 = expMinusTheta + expMinusThetaU * expMinusThetaV - expMinusThetaU - expMinusThetaV; return -theta_ * expMinusThetaU * expMinusThetaV * expm1(-theta_) / (sum1 * sum1); } /* Get the CDF of the distribution */ Scalar FrankCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) { return 0.0; } // If we are outside of the support, in the upper part if ((u >= 1.0) && (v >= 1.0)) { return 1.0; } // If we are outside of the support for u, in the upper part if (u >= 1.0) { return v; } // If we are outside of the support for v, in the upper part if (v >= 1.0) { return u; } // If we are in the support // Independent case if (theta_ == 0.0) return u * v; // General case const Scalar expm1MinusTheta = expm1(-theta_); const Scalar expm1MinusThetaU = expm1(-theta_ * point[0]); const Scalar expm1MinusThetaV = expm1(-theta_ * point[1]); return -log1p(expm1MinusThetaU * expm1MinusThetaV / expm1MinusTheta) / theta_; } /* Compute the covariance of the distribution */ void FrankCopula::computeCovariance() const { covariance_ = CovarianceMatrix(2); covariance_(0, 0) = 1.0 / 12.0; covariance_(0, 1) = (theta_ < 1.0e-3 ? theta_ / 72.0 * (1.0 - theta_ * theta_ / 75.0) : 1.0 / 12.0 + (SpecFunc::Debye(theta_, 2) - SpecFunc::Debye(theta_, 1)) / theta_); covariance_(1, 1) = 1.0 / 12.0; isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix FrankCopula::getKendallTau() const { CorrelationMatrix tau(2); tau(0, 1) = (std::abs(theta_) < 1.0e-3 ? theta_ / 9.0 * (1.0 - 0.01 * theta_ * theta_) : 1.0 + 4.0 * (SpecFunc::Debye(theta_, 1) - 1.0) / theta_); return tau; } /* Get the PDFGradient of the distribution */ Point FrankCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In FrankCopula::computePDFGradient(const Point & point) const"; } /* Get the CDFGradient of the distribution */ Point FrankCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In FrankCopula::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution */ Point FrankCopula::computeQuantile(const Scalar prob, const Bool tail) const { if ((prob < 0.0) || (prob > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; // Special case for boarding values if (prob == 0.0) return getRange().getLowerBound(); if (prob == 1.0) return getRange().getUpperBound(); // Independent case if (theta_ == 0.0) return Point(2, std::sqrt(prob)); // General case const Scalar thetaProb = theta_ * prob; const Scalar expTheta = std::exp(theta_); const Scalar expm1Theta = expm1(theta_); const Scalar sqrtRatio = std::sqrt(expm1(thetaProb) * expTheta / (expm1Theta * std::exp(thetaProb))); return Point(2, 1.0 - std::log(expTheta - sqrtRatio * expm1Theta) / theta_); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar FrankCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; const Scalar u = y[0]; const Scalar v = x; // If we are in the support const Scalar alpha = std::exp(-theta_ * v); const Scalar beta = std::exp(-theta_ * u) * (alpha - 1.0); return -beta / (alpha - std::exp(-theta_) - beta); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar FrankCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // Initialize the conditional quantile with the quantile of the i-th marginal distribution // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; const Scalar u = y[0]; const Scalar factor = (q - 1.0) * std::exp(-theta_ * u); return 1.0 + std::log((factor - q) / (factor * std::exp(theta_) - q)) / theta_; } /* Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar FrankCopula::computeArchimedeanGenerator(const Scalar t) const { // Independent case if (theta_ == 0.0) return -std::log(t); // General case return std::log(expm1(-theta_) / expm1(-theta_ * t)); } /* Compute the inverse of the archimedean generator */ Scalar FrankCopula::computeInverseArchimedeanGenerator(const Scalar t) const { // Independent case if (theta_ == 0.0) return std::exp(-t); // General case return 1.0 + (t - log1p(std::exp(theta_) * expm1(t))) / theta_; } /* Compute the derivative of the density generator */ Scalar FrankCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const { // Independent case if (theta_ == 0.0) return -1.0 / t; // General case return -theta_ / expm1(-theta_ * t); } /* Compute the seconde derivative of the density generator */ Scalar FrankCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const { // Independent case if (theta_ == 0.0) return 1.0 / (t * t); // General case Scalar thetaT = theta_ * t; Scalar ratio = theta_ / expm1(thetaT); return ratio * ratio * std::exp(thetaT); } /* Parameters value accessor */ Point FrankCopula::getParameter() const { return Point(1, theta_); } void FrankCopula::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = FrankCopula(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description FrankCopula::getParameterDescription() const { return Description(1, "theta"); } /* Tell if the distribution has independent copula */ Bool FrankCopula::hasIndependentCopula() const { return (theta_ == 0.0); } /* Theta accessor */ void FrankCopula::setTheta(const Scalar theta) { theta_ = theta; } /* Theta accessor */ Scalar FrankCopula::getTheta() const { return theta_; } /* Method save() stores the object through the StorageManager */ void FrankCopula::save(Advocate & adv) const { ArchimedeanCopula::save(adv); adv.saveAttribute( "theta_", theta_ ); } /* Method load() reloads the object from the StorageManager */ void FrankCopula::load(Advocate & adv) { ArchimedeanCopula::load(adv); adv.loadAttribute( "theta_", theta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/FrankCopulaFactory.cxx000066400000000000000000000114321307543307100262260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FrankCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/FrankCopulaFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FrankCopulaFactory); static const Factory Factory_FrankCopulaFactory; /* Default constructor */ FrankCopulaFactory::FrankCopulaFactory(): DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ FrankCopulaFactory * FrankCopulaFactory::clone() const { return new FrankCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ FrankCopulaFactory::Implementation FrankCopulaFactory::build(const Sample & sample) const { return buildAsFrankCopula(sample).clone(); } FrankCopulaFactory::Implementation FrankCopulaFactory::build(const Point & parameters) const { return buildAsFrankCopula(parameters).clone(); } FrankCopulaFactory::Implementation FrankCopulaFactory::build() const { return buildAsFrankCopula().clone(); } FrankCopula FrankCopulaFactory::buildAsFrankCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a FrankCopula distribution from an empty sample"; if (sample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a FrankCopula distribution from a sample of dimension not equal to 2"; Scalar tau = sample.computeKendallTau().operator()(0, 1); if (tau == 1.0) throw InvalidArgumentException(HERE) << "Error: cannot build a FrankCopula distribution from a sample with Kendall tau equal to 1"; if (tau == -1.0) throw InvalidArgumentException(HERE) << "Error: cannot build a FrankCopula distribution from a sample with Kendall tau equal to -1"; // Search the value of the Frank copula parameter by numerically inverting the relation between Kendall's tau and Frank copula's parameter const Bool isTauNegative = tau < 0.0; tau = std::abs(tau); Scalar theta = 1.0; Scalar step = 0.5; Scalar tauTheta = KendallTauFromParameter(Point(1, theta))[0]; // Find a lower bound while (tauTheta > tau) { theta -= step; tauTheta = KendallTauFromParameter(Point(1, theta))[0]; step *= 0.5; } // Here, tauTheta <= tau, hence theta is a lower bound of the parameter const Scalar minTheta = theta; const Scalar minTau = tauTheta; // Now, look for an upper bound while (tauTheta <= tau) { theta += step; tauTheta = KendallTauFromParameter(Point(1, theta))[0]; step *= 2.0; } const Scalar maxTheta = theta; const Scalar maxTau = tauTheta; const Function f(bindMethod(*this, &FrankCopulaFactory::KendallTauFromParameter, 1, 1)); // Solve the constraint equation Brent solver(ResourceMap::GetAsScalar( "FrankCopulaFactory-AbsolutePrecision" ), ResourceMap::GetAsScalar( "FrankCopulaFactory-RelativePrecision" ), ResourceMap::GetAsScalar( "FrankCopulaFactory-ResidualPrecision" ), ResourceMap::GetAsUnsignedInteger( "FrankCopulaFactory-MaximumIteration" )); theta = solver.solve(f, tau, minTheta, maxTheta, minTau, maxTau); FrankCopula result(isTauNegative ? -theta : theta); result.setDescription(sample.getDescription()); return result; } FrankCopula FrankCopulaFactory::buildAsFrankCopula(const Point & parameters) const { try { FrankCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a FrankCopula from the given parameters"; } } FrankCopula FrankCopulaFactory::buildAsFrankCopula() const { return FrankCopula(); } // Compute Kendall's tau from Frank copula's parameter. It is an increasing function Point FrankCopulaFactory::KendallTauFromParameter(const Point & theta) const { return Point(1, FrankCopula(theta[0]).getKendallTau()(0, 1)); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Frechet.cxx000066400000000000000000000300561307543307100240540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Frechet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Frechet.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Frechet); static const Factory Factory_Frechet; /* Parameters constructor */ Frechet::Frechet(const Scalar alpha, const Scalar beta, const Scalar gamma) : ContinuousDistribution() , alpha_(alpha) , beta_(beta) , gamma_(gamma) { setAlpha(alpha); setBeta(beta); setGamma(gamma); setName("Frechet"); setDimension(1); computeRange(); } /* Comparison operator */ Bool Frechet::operator ==(const Frechet & other) const { if (this == &other) return true; return (alpha_ == other.alpha_) && (beta_ == other.beta_) && (gamma_ == other.gamma_); } Bool Frechet::equals(const DistributionImplementation & other) const { const Frechet* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Frechet::__repr__() const { OSS oss; oss << "class=" << Frechet::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " alpha=" << alpha_ << " beta=" << beta_ << " gamma=" << gamma_; return oss; } String Frechet::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(alpha = " << alpha_ << ", beta = " << beta_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ Frechet * Frechet::clone() const { return new Frechet(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Frechet::computeRange() { const Point lowerBound(1, gamma_); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get the quantile of the distribution */ Scalar Frechet::computeScalarQuantile(const Scalar prob, const Bool tail) const { return gamma_ + beta_ * std::pow(-std::log(tail ? 1.0 - prob : prob), -1.0 / alpha_); } /* Get one realization of the distribution */ Point Frechet::getRealization() const { return Point(1, computeScalarQuantile(RandomGenerator::Generate())); } Point Frechet::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return Point(1, 0.0); const Scalar y = x / beta_; const Scalar minusAlphalogY = -alpha_ * std::log(y); return Point(1, -alpha_ * (-alpha_ * expm1(minusAlphalogY) + 1.0) * std::exp(-std::exp(minusAlphalogY) + minusAlphalogY) / (x * x)); } /* Get the PDF of the distribution */ Scalar Frechet::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return std::exp(-std::pow(x / beta_, -alpha_)); } /* Get the PDF of the distribution */ Scalar Frechet::computePDF(const Point & point) const { const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Frechet::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return SpecFunc::LogMinScalar; return std::log(alpha_ / beta_) + (-1.0 - alpha_) * std::log(x / beta_) - std::pow(x / beta_, -alpha_); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet Frechet::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const Interval interval(computeMinimumVolumeInterval(prob)); Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); Scalar minusLogPDFThreshold = -computeLogPDF(interval.getLowerBound()[0]); threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Parameters value and description accessor */ Point Frechet::getParameter() const { Point point(3); point[0] = alpha_; point[1] = beta_; point[2] = gamma_; return point; } void Frechet::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Frechet(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description Frechet::getParameterDescription() const { Description description(3); description[0] = "alpha"; description[1] = "beta"; description[2] = "gamma"; return description; } /* Get the PDFGradient of the distribution */ Point Frechet::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point pdfGradient(3); if (x <= gamma_) return pdfGradient; const Scalar logCdf = -std::pow((x - gamma_) / beta_, -alpha_); const Scalar logCdfm1 = std::pow((x - gamma_) / beta_, -alpha_ - 1.0); const Scalar cdf = std::exp(logCdf); pdfGradient[0] = -alpha_ * logCdfm1 * cdf * std::log((x - gamma_) / beta_) / beta_ - alpha_ * logCdf * logCdfm1 * cdf * std::log((x - gamma_) / beta_) / beta_ + logCdfm1 * cdf / beta_; pdfGradient[1] = alpha_ * alpha_ * logCdf * logCdfm1 * cdf / (beta_ * beta_) - alpha_ * logCdfm1 * (-alpha_ - 1.0) * cdf / (beta_ * beta_) - alpha_ * logCdfm1 * cdf / (beta_ * beta_); pdfGradient[2] = alpha_ * alpha_ * logCdf * logCdfm1 * cdf / (beta_ * (x - gamma_)) - alpha_ * logCdfm1 * (-alpha_ - 1.0) * cdf / (beta_ * (x - gamma_)); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Frechet::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point cdfGradient(3); if (x <= gamma_) return cdfGradient; const Scalar logCdf = -std::pow((x - gamma_) / beta_, -alpha_); const Scalar cdf = std::exp(logCdf); cdfGradient[0] = -logCdf * cdf * std::log((x - gamma_) / beta_); cdfGradient[1] = alpha_ * logCdf * cdf / beta_; cdfGradient[2] = alpha_ * logCdf * cdf / (x - gamma_); return cdfGradient; } /* Compute the mean of the distribution */ void Frechet::computeMean() const { if (!(alpha_ > 1.0)) throw InvalidArgumentException(HERE) << "mean is not defined for alpha <= 1"; mean_ = Point(1, gamma_ + beta_ * SpecFunc::Gamma(1.0 - 1.0 / alpha_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Frechet::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Compute the covariance of the distribution */ void Frechet::computeCovariance() const { if (!(alpha_ > 2.0)) throw InvalidArgumentException(HERE) << "covariance is not defined for alpha <= 2"; covariance_ = CovarianceMatrix(1); const Scalar gammaInvAlpha = SpecFunc::Gamma(1.0 - 1.0 / alpha_); covariance_(0, 0) = beta_ * beta_ * (SpecFunc::Gamma(1.0 - 2.0 / alpha_) - gammaInvAlpha * gammaInvAlpha); isAlreadyComputedCovariance_ = true; } /* Get the skewness of the distribution */ Point Frechet::getSkewness() const { if (!(alpha_ > 3.0)) throw InvalidArgumentException(HERE) << "skewness is not defined for alpha <= 3"; const Scalar gammaInvAlpha = SpecFunc::Gamma(1.0 - 1.0 / alpha_); const Scalar gamma2InvAlpha = SpecFunc::Gamma(1.0 - 2.0 / alpha_); const Scalar gamma3InvAlpha = SpecFunc::Gamma(1.0 - 3.0 / alpha_); const Scalar gammaInvAlpha2 = gammaInvAlpha * gammaInvAlpha; const Scalar skewness = (gamma3InvAlpha + gammaInvAlpha * (2.0 * gammaInvAlpha2 - 3.0 * gamma2InvAlpha)) / std::pow(gamma2InvAlpha - gammaInvAlpha2, 1.5); return Point(1, skewness); } /* Get the kurtosis of the distribution */ Point Frechet::getKurtosis() const { if (!(alpha_ > 4.0)) throw InvalidArgumentException(HERE) << "kurtosis is not defined for alpha <= 4"; const Scalar gammaInvAlpha = SpecFunc::Gamma(1.0 - 1.0 / alpha_); const Scalar gamma2InvAlpha = SpecFunc::Gamma(1.0 - 2.0 / alpha_); const Scalar gamma3InvAlpha = SpecFunc::Gamma(1.0 - 3.0 / alpha_); const Scalar gamma4InvAlpha = SpecFunc::Gamma(1.0 - 4.0 / alpha_); const Scalar gammaInvAlpha2 = gammaInvAlpha * gammaInvAlpha; const Scalar kurtosis((gamma4InvAlpha + gammaInvAlpha * (-4.0 * gamma3InvAlpha + 3.0 * gammaInvAlpha * (2.0 * gamma2InvAlpha - gammaInvAlpha2))) / std::pow(gamma2InvAlpha - gammaInvAlpha2, 2.0)); return Point(1, kurtosis); } /* Get the moments of the standardized distribution */ Point Frechet::getStandardMoment(const UnsignedInteger n) const { if (n >= alpha_) throw NotDefinedException(HERE) << "Error: cannot compute a standard moment of order greater or equal to alpha=" << alpha_; return Point(1, SpecFunc::Gamma(1.0 - n / alpha_)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Frechet::Implementation Frechet::getStandardRepresentative() const { return Frechet(alpha_, 1.0, 0.0).clone(); } /* Alpha accessor */ void Frechet::setAlpha(const Scalar alpha) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Error: Frechet alpha parameter must be positive"; if (alpha != alpha_) { alpha_ = alpha; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Frechet::getAlpha() const { return alpha_; } /* Beta accessor */ void Frechet::setBeta(const Scalar beta) { if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Error: Frechet beta parameter must be positive"; if (beta != beta_) { beta_ = beta; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Frechet::getBeta() const { return beta_; } /* Gamma accessor */ void Frechet::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Frechet::getGamma() const { return gamma_; } /* Method save() stores the object through the StorageManager */ void Frechet::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); adv.saveAttribute( "gamma_", gamma_ ); } /* Method load() reloads the object from the StorageManager */ void Frechet::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); adv.loadAttribute( "gamma_", gamma_ ); setDimension(1); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Gamma.cxx000066400000000000000000000301251307543307100235130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Gamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Gamma.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Gamma); static const Factory Factory_Gamma; /* Default constructor */ Gamma::Gamma() : ContinuousDistribution() , k_(1.0) , lambda_(1.0) , gamma_(0.0) , normalizationFactor_(0.0) { setName("Gamma"); setDimension(1); computeRange(); } /* Parameters constructor */ Gamma::Gamma(const Scalar k, const Scalar lambda, const Scalar gamma) : ContinuousDistribution() , k_(0.0) , lambda_(0.0) , gamma_(gamma) , normalizationFactor_(0.0) { setName("Gamma"); setKLambda(k, lambda); setDimension(1); } /* Comparison operator */ Bool Gamma::operator ==(const Gamma & other) const { if (this == &other) return true; return (k_ == other.k_) && (lambda_ == other.lambda_) && (gamma_ == other.gamma_); } Bool Gamma::equals(const DistributionImplementation & other) const { const Gamma* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Gamma::__repr__() const { OSS oss; oss << "class=" << Gamma::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " k=" << k_ << " lambda=" << lambda_ << " gamma=" << gamma_; return oss; } String Gamma::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(k = " << k_ << ", lambda = " << lambda_ << ", gamma = " << gamma_ << ")"; return oss; } /* K accessor */ void Gamma::setK(const Scalar k) { if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (k != k_) { k_ = k; computeRange(); update(); } } Scalar Gamma::getK() const { return k_; } /* Lambda accessor */ void Gamma::setLambda(const Scalar lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if (lambda != lambda_) { lambda_ = lambda; computeRange(); update(); } } Scalar Gamma::getLambda() const { return lambda_; } /* K and lambda accessor */ void Gamma::setKLambda(const Scalar k, const Scalar lambda) { if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if ((k != k_) || (lambda != lambda_)) { k_ = k; lambda_ = lambda; computeRange(); update(); } } /* Gamma accessor */ void Gamma::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depend on gamma computeRange(); } } Scalar Gamma::getGamma() const { return gamma_; } /* Virtual constructor */ Gamma * Gamma::clone() const { return new Gamma(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Gamma::computeRange() { const Point lowerBound(1, gamma_); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /** Update the derivative attributes */ void Gamma::update() { // For large k we use the following normalization factor: // normalizationFactor = log(lambda*k^{k-1}/Gamma(k)) // which is expanded wrt k if (k_ >= 6.9707081224932495879) { static const Scalar alpha[10] = {0.91893853320467274177, 0.83333333333333333333e-1, -0.27777777777777777778e-2, 0.79365079365079365079e-3, -0.59523809523809523810e-3, 0.84175084175084175084e-3, -0.19175269175269175269e-2, 0.64102564102564102564e-2, -0.29550653594771241830e-1, 0.17964437236883057316}; const Scalar ik = 1.0 / k_; const Scalar ik2 = ik * ik; normalizationFactor_ = std::log(lambda_) + k_ - 0.5 * std::log(k_) - (alpha[0] + ik * (alpha[1] + ik2 * (alpha[2] + ik2 * (alpha[3] + ik2 * (alpha[4] + ik2 * (alpha[5] + ik2 * (alpha[6] + ik2 * (alpha[7] + ik2 * (alpha[8] + ik2 * alpha[9]))))))))); } // For small k, the normalization factor is: // normalizationFactor = log(lambda/Gamma(k)) else normalizationFactor_ = std::log(lambda_) - SpecFunc::LnGamma(k_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point Gamma::getRealization() const { return Point(1, gamma_ + DistFunc::rGamma(k_) / lambda_); } /* Get the DDF of the distribution */ Point Gamma::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return Point(1, 0.0); return Point(1, ((k_ - 1.0) / x - lambda_) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar Gamma::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Gamma::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); // From textbook, we have log(PDF(x)) = - lambda * (x - gamma) + (k - 1) * log(x - gamma) + k * log(lambda) - log(Gamma(k)) const Scalar u = lambda_ * (point[0] - gamma_); if (u <= 0.0) return SpecFunc::LogMinScalar; // Use asymptotic expansion for large k // Here log(PDF(x)) = L - lambda * (x - gamma) + (k - 1) * log(lambda * (x - gamma) / k) if (k_ >= 6.9707081224932495879) return normalizationFactor_ - u + (k_ - 1.0) * std::log(u / k_); return normalizationFactor_ + (k_ - 1) * std::log(u) - u; } /* Get the CDF of the distribution */ Scalar Gamma::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // No test here as the CDF is continuous for all k_ if (x <= 0.0) return 0.0; return DistFunc::pGamma(k_, lambda_ * x); } Scalar Gamma::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // No test here as the CDF is continuous for all k_ if (x <= 0.0) return 1.0; return DistFunc::pGamma(k_, lambda_ * x, true); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Gamma::computeCharacteristicFunction(const Scalar x) const { return std::exp(Complex(0.0, x * gamma_)) * std::pow(Complex(1.0, -x / lambda_), -k_); } Complex Gamma::computeLogCharacteristicFunction(const Scalar x) const { return Complex(0.0, x * gamma_) - k_ * std::log(Complex(1.0, -x / lambda_)); } /* Get the PDFGradient of the distribution */ Point Gamma::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(3, 0.0); const Scalar x = point[0] - gamma_; if (x <= 0.0) return pdfGradient; const Scalar pdf = computePDF(point); pdfGradient[0] = (std::log(x) + std::log(lambda_) - SpecFunc::Psi(k_)) * pdf; pdfGradient[1] = (k_ / lambda_ - x) * pdf; pdfGradient[2] = ((1.0 - k_) / x + lambda_) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Gamma::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(3, 0.0); const Scalar x = point[0] - gamma_; if (x <= 0.0) return cdfGradient; const Scalar lambdaX = lambda_ * x; const Scalar factor = std::exp(k_ * std::log(lambdaX) - SpecFunc::LnGamma(k_) - lambdaX); const Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); cdfGradient[0] = (DistFunc::pGamma(k_ + eps, lambda_ * x) - DistFunc::pGamma(k_ - eps, lambda_ * x)) / (2.0 * eps); cdfGradient[1] = factor / lambda_; cdfGradient[2] = -factor / x; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Gamma::computeScalarQuantile(const Scalar prob, const Bool tail) const { return gamma_ + DistFunc::qGamma(k_, prob, tail) / lambda_; } /* Compute the mean of the distribution */ void Gamma::computeMean() const { mean_ = Point(1, gamma_ + k_ / lambda_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Gamma::getStandardDeviation() const { return Point(1, std::sqrt(k_) / lambda_); } /* Get the skewness of the distribution */ Point Gamma::getSkewness() const { return Point(1, 2.0 / std::sqrt(k_)); } /* Get the kurtosis of the distribution */ Point Gamma::getKurtosis() const { return Point(1, 3.0 * (k_ + 2.0) / k_); } /* Get the moments of the standardized distribution */ Point Gamma::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(SpecFunc::LogGamma(n + k_) - SpecFunc::LogGamma(k_))); } /* Get the standard representative in the parametric family, associated with the standard moments */ Gamma::Implementation Gamma::getStandardRepresentative() const { return Gamma(k_, 1.0, 0.0).clone(); } /* Compute the covariance of the distribution */ void Gamma::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = k_ / (lambda_ * lambda_); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Gamma::getParameter() const { Point point(3); point[0] = k_; point[1] = lambda_; point[2] = gamma_; return point; } void Gamma::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Gamma(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description Gamma::getParameterDescription() const { Description description(3); description[0] = "k"; description[1] = "lambda"; description[2] = "gamma"; return description; } /* Method save() stores the object through the StorageManager */ void Gamma::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "k_", k_ ); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "gamma_", gamma_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Gamma::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "k_", k_ ); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "gamma_", gamma_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GammaFactory.cxx000066400000000000000000000063421307543307100250470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Gamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GammaFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GammaFactory); static const Factory Factory_GammaFactory; /* Default constructor */ GammaFactory::GammaFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ GammaFactory * GammaFactory::clone() const { return new GammaFactory(*this); } /* Here is the interface that all derived class must implement */ GammaFactory::Implementation GammaFactory::build(const Sample & sample) const { return buildAsGamma(sample).clone(); } GammaFactory::Implementation GammaFactory::build(const Point & parameters) const { return buildAsGamma(parameters).clone(); } GammaFactory::Implementation GammaFactory::build() const { return buildAsGamma().clone(); } Gamma GammaFactory::buildAsGamma(const Sample & sample) const { UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Gamma distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Gamma distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar gamma = xMin - std::abs(xMin) / (2.0 + size); const Scalar mu = sample.computeMean()[0]; const Scalar sigma = sample.computeStandardDeviationPerComponent()[0]; if (!SpecFunc::IsNormal(sigma)) throw InvalidArgumentException(HERE) << "Error: cannot build a Gamma distribution if data contains NaN or Inf"; if (sigma == 0.0) { Gamma result(SpecFunc::MaxScalar / SpecFunc::LogMaxScalar, 1.0, gamma); result.setDescription(sample.getDescription()); return result; } Scalar lambda = (mu - gamma) / sigma; const Scalar k = lambda * lambda; lambda /= sigma; Gamma result(k, lambda, gamma); result.setDescription(sample.getDescription()); return result; } Gamma GammaFactory::buildAsGamma(const Point & parameters) const { try { Gamma distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Gamma distribution from the given parameters"; } } Gamma GammaFactory::buildAsGamma() const { return Gamma(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GammaMuSigma.cxx000066400000000000000000000136411307543307100250020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gamma distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GammaFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/GammaMuSigma.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GammaMuSigma); static const Factory Factory_GammaMuSigma; /* Default constructor */ GammaMuSigma::GammaMuSigma() : DistributionParametersImplementation() , mu_(1.0) , sigma_(1.0) , gamma_(0.) { // Nothing to do } GammaMuSigma::GammaMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) , gamma_(gamma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; } /* Virtual constructor */ GammaMuSigma * GammaMuSigma::clone() const { return new GammaMuSigma(*this); } /* Comparison operator */ Bool GammaMuSigma::operator ==(const GammaMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution GammaMuSigma::getDistribution() const { Point newParameters(3); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = gamma_; Point nativeParameters(operator()(newParameters)); return GammaFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix GammaMuSigma::gradient() const { const Scalar mu = mu_; const Scalar sigma = sigma_; const Scalar gamma = gamma_; const Scalar dkdmu = 2.0 * (mu - gamma) / (sigma * sigma); const Scalar dkdsigma = -2.0 * (mu - gamma) * (mu - gamma) / (sigma * sigma * sigma); const Scalar dkdgamma = -dkdmu; const Scalar dlambdadmu = 1.0 / (sigma * sigma); const Scalar dlambdadsigma = -2.0 * (mu - gamma) / (sigma * sigma * sigma); const Scalar dlambdadgamma = -dlambdadmu; SquareMatrix nativeParametersGradient(IdentityMatrix(3)); nativeParametersGradient(0, 0) = dkdmu; nativeParametersGradient(1, 0) = dkdsigma; nativeParametersGradient(2, 0) = dkdgamma; nativeParametersGradient(0, 1) = dlambdadmu; nativeParametersGradient(1, 1) = dlambdadsigma; nativeParametersGradient(2, 1) = dlambdadgamma; return nativeParametersGradient; } /* Conversion operator */ Point GammaMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; const Scalar gamma = inP[2]; if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; Scalar lambda = (mu - gamma) / sigma; const Scalar k = lambda * lambda; lambda /= sigma; Point nativeParameters(inP); nativeParameters[0] = k; nativeParameters[1] = lambda; return nativeParameters; } Point GammaMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar k = inP[0]; const Scalar lambda = inP[1]; const Scalar gamma = inP[2]; if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; Scalar mu = gamma + k / lambda; const Scalar sigma = std::sqrt(k) / lambda; Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void GammaMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; gamma_ = inP[2]; } Point GammaMuSigma::getValues() const { Point point(3); point[0] = mu_; point[1] = sigma_; point[2] = gamma_; return point; } Description GammaMuSigma::getDescription() const { Description description(3); description[0] = "mu"; description[1] = "sigma"; description[2] = "gamma"; return description; } /* String converter */ String GammaMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_ << " gamma=" << gamma_; return oss; } String GammaMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ", gamma = " << gamma_ << ")"; return oss; } /* Method save() stores the object through the StorageManager */ void GammaMuSigma::save(Advocate & adv) const { DistributionParametersImplementation::save(adv); adv.saveAttribute("mu_", mu_); adv.saveAttribute("sigma_", sigma_); adv.saveAttribute("gamma_", gamma_); } /* Method load() reloads the object from the StorageManager */ void GammaMuSigma::load(Advocate & adv) { DistributionParametersImplementation::load(adv); adv.loadAttribute("mu_", mu_); adv.loadAttribute("sigma_", sigma_); adv.loadAttribute("gamma_", gamma_); } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/GeneralizedExtremeValue.cxx000066400000000000000000000300671307543307100272560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GeneralizedExtremeValue distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeneralizedExtremeValue.hxx" #include "openturns/Weibull.hxx" #include "openturns/Frechet.hxx" #include "openturns/Gumbel.hxx" #include "openturns/RandomMixture.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralizedExtremeValue); static const Factory Factory_GeneralizedExtremeValue; /* Default constructor */ GeneralizedExtremeValue::GeneralizedExtremeValue() : ContinuousDistribution() , actualDistribution_(Gumbel(1.0, 0.0)) , mu_(0.0) , sigma_(1.0) , xi_(0.0) { setName("GeneralizedExtremeValue"); setDimension(1); } /* Parameters constructor to use when the two bounds are finite */ GeneralizedExtremeValue::GeneralizedExtremeValue(const Scalar mu, const Scalar sigma, const Scalar xi) : ContinuousDistribution() { setName("GeneralizedExtremeValue"); setMuSigmaXi(mu, sigma, xi); setDimension(1); computeRange(); } /* Comparison operator */ Bool GeneralizedExtremeValue::operator ==(const GeneralizedExtremeValue & other) const { if (this == &other) return true; return (mu_ == other.getMu()) && (sigma_ == other.getSigma()) && (xi_ == other.getXi()); } Bool GeneralizedExtremeValue::equals(const DistributionImplementation & other) const { const GeneralizedExtremeValue* p_other = dynamic_cast(&other); if (p_other) return (*this == *p_other); return *actualDistribution_.getImplementation() == other; } /* String converter */ String GeneralizedExtremeValue::__repr__() const { OSS oss; oss << "class=" << GeneralizedExtremeValue::GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_ << " xi=" << xi_ << " actual distribution=" << actualDistribution_; return oss; } String GeneralizedExtremeValue::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(mu=" << mu_ << ", sigma=" << sigma_ << ", xi=" << xi_ << ")"; return oss; } /* Virtual constructor */ GeneralizedExtremeValue * GeneralizedExtremeValue::clone() const { return new GeneralizedExtremeValue(*this); } /* Compute the numerical range of the distribution given the parameters values */ void GeneralizedExtremeValue::computeRange() { setRange(actualDistribution_.getRange()); } /* Get one realization of the distribution */ Point GeneralizedExtremeValue::getRealization() const { return actualDistribution_.getRealization(); } /* Get the DDF of the distribution */ Point GeneralizedExtremeValue::computeDDF(const Point & point) const { return actualDistribution_.computeDDF(point); } /* Get the PDF of the distribution */ Scalar GeneralizedExtremeValue::computePDF(const Point & point) const { return actualDistribution_.computePDF(point); } /* Get the log-PDF of the distribution */ Scalar GeneralizedExtremeValue::computeLogPDF(const Point & point) const { return actualDistribution_.computeLogPDF(point); } /* Get the CDF of the distribution */ Scalar GeneralizedExtremeValue::computeCDF(const Point & point) const { return actualDistribution_.computeCDF(point); } Scalar GeneralizedExtremeValue::computeComplementaryCDF(const Point & point) const { return actualDistribution_.computeComplementaryCDF(point); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex GeneralizedExtremeValue::computeCharacteristicFunction(const Scalar x) const { return actualDistribution_.computeCharacteristicFunction(x); } Complex GeneralizedExtremeValue::computeLogCharacteristicFunction(const Scalar x) const { return actualDistribution_.computeLogCharacteristicFunction(x); } /* Get the PDFGradient of the distribution */ Point GeneralizedExtremeValue::computePDFGradient(const Point & point) const { return actualDistribution_.computePDFGradient(point); } /* Get the CDFGradient of the distribution */ Point GeneralizedExtremeValue::computeCDFGradient(const Point & point) const { return actualDistribution_.computeCDFGradient(point); } /* Get the quantile of the distribution */ Scalar GeneralizedExtremeValue::computeScalarQuantile(const Scalar prob, const Bool tail) const { return actualDistribution_.computeQuantile(prob, tail)[0]; } /* Compute the mean of the distribution */ void GeneralizedExtremeValue::computeMean() const { mean_ = actualDistribution_.getMean(); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point GeneralizedExtremeValue::getStandardDeviation() const { return actualDistribution_.getStandardDeviation(); } /* Get the skewness of the distribution */ Point GeneralizedExtremeValue::getSkewness() const { return actualDistribution_.getSkewness(); } /* Get the kurtosis of the distribution */ Point GeneralizedExtremeValue::getKurtosis() const { return actualDistribution_.getKurtosis(); } /* Get the standard representative in the parametric family, associated with the standard moments */ GeneralizedExtremeValue::Implementation GeneralizedExtremeValue::getStandardRepresentative() const { return actualDistribution_.getImplementation()->getStandardRepresentative(); } /* Compute the covariance of the distribution */ void GeneralizedExtremeValue::computeCovariance() const { covariance_ = actualDistribution_.getCovariance(); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point GeneralizedExtremeValue::getParameter() const { Point point(3); point[0] = mu_; point[1] = sigma_; point[2] = xi_; return point; } void GeneralizedExtremeValue::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); setMuSigmaXi(parameter[0], parameter[1], parameter[2]); } /* Parameters description accessor */ Description GeneralizedExtremeValue::getParameterDescription() const { Description description(3); description[0] = "mu"; description[1] = "sigma"; description[2] = "xi"; return description; } /* Mu accessor */ void GeneralizedExtremeValue::setMu(const Scalar mu) { setMuSigmaXi(mu, sigma_, xi_); } Scalar GeneralizedExtremeValue::getMu() const { return mu_; } /* Sigma accessor */ void GeneralizedExtremeValue::setSigma(const Scalar sigma) { setMuSigmaXi(mu_, sigma, xi_); } Scalar GeneralizedExtremeValue::getSigma() const { return sigma_; } /* Xi accessor */ void GeneralizedExtremeValue::setXi(const Scalar xi) { setMuSigmaXi(mu_, sigma_, xi); } Scalar GeneralizedExtremeValue::getXi() const { return xi_; } /* All parameters accessor */ void GeneralizedExtremeValue::setMuSigmaXi(const Scalar mu, const Scalar sigma, const Scalar xi) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected a positive value for sigma, here sigma=" << sigma; mu_ = mu; sigma_ = sigma; xi_ = xi; // Now build the actual Frechet/Gumbel/Weibull distribution const Scalar xiEpsilon = ResourceMap::GetAsScalar("GeneralizedExtremeValue-XiThreshold"); // Weibull case if (xi_ < -xiEpsilon) { const Scalar alpha = -sigma / xi; const Scalar beta = -1.0 / xi; const Scalar gamma = sigma / xi - mu; actualDistribution_ = Weibull(alpha, beta, gamma) * (-1.0); } // Frechet case else if (xi_ > xiEpsilon) { const Scalar alpha = 1.0 / xi; const Scalar beta = sigma / xi; const Scalar gamma = mu - sigma / xi; actualDistribution_ = Frechet(alpha, beta, gamma); } // Gumbel case else { const Scalar alpha = 1.0 / sigma; const Scalar beta = mu; actualDistribution_ = Gumbel(alpha, beta); } isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Actual distribution accessor */ void GeneralizedExtremeValue::setActualDistribution(const Distribution & distribution) { // Try to cast the given distribution into a Gumbel distribution try { const Gumbel* p_gumbel = dynamic_cast(distribution.getImplementation().get()); // If it worked create the actual distribution if (p_gumbel) { mu_ = p_gumbel->getBeta(); sigma_ = 1.0 / p_gumbel->getAlpha(); xi_ = 0.0; actualDistribution_ = Gumbel(*p_gumbel); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; return; } // p_gumbel } catch (...) { // Nothing to do } // Try to cast the given distribution into a Frechet distribution try { const Frechet* p_frechet = dynamic_cast(distribution.getImplementation().get()); // If it worked create the actual distribution if (p_frechet) { xi_ = 1.0 / p_frechet->getAlpha(); sigma_ = p_frechet->getBeta() * xi_; mu_ = p_frechet->getGamma() + p_frechet->getBeta(); actualDistribution_ = Frechet(*p_frechet); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; return; } // p_frechet } catch (...) { // Nothing to do } // Try to cast the given distribution into a RandomMixture // with a Weibull atom with negative coefficient try { const RandomMixture* p_mixture = dynamic_cast(distribution.getImplementation().get()); // If it worked try to catch the atom into a Weibull distribution if (p_mixture) { // First, the easy checks: // + its diension is 1 // + there is only one atom // + its weight is negative if ((p_mixture->getDimension() == 1) && (p_mixture->getDistributionCollection().getSize() == 1) && (p_mixture->getWeights()(0, 0) < 0.0)) { // Try to catch the unique atom into a Weibull distribution const Weibull* p_weibull = dynamic_cast(p_mixture->getDistributionCollection()[0].getImplementation().get()); if (p_weibull) { const Scalar constant = p_mixture->getConstant()[0]; const Scalar weight = p_mixture->getWeights()(0, 0); xi_ = -1.0 / p_weibull->getBeta(); sigma_ = -(weight * p_weibull->getAlpha()) * xi_; mu_ = constant + sigma_ / xi_ - p_weibull->getGamma() * weight; actualDistribution_ = RandomMixture(*p_mixture); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; return; } // p_weibull } // mixture basic check } // p_mixture } catch (...) { throw InvalidArgumentException(HERE) << "Error: the distribution " << distribution << " cannot be used to define a GeneralizedExtremeValue distribution."; } } Distribution GeneralizedExtremeValue::getActualDistribution() const { return actualDistribution_; } /* Method save() stores the object through the StorageManager */ void GeneralizedExtremeValue::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "mu_", mu_ ); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "xi_", xi_ ); adv.saveAttribute( "actualDistribution_", actualDistribution_ ); } /* Method load() reloads the object from the StorageManager */ void GeneralizedExtremeValue::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "mu_", mu_ ); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "xi_", xi_ ); adv.loadAttribute( "actualDistribution_", actualDistribution_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GeneralizedPareto.cxx000066400000000000000000000331271307543307100261020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GeneralizedPareto distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/GeneralizedPareto.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralizedPareto); static const Factory Factory_GeneralizedPareto; /* Default constructor */ GeneralizedPareto::GeneralizedPareto() : ContinuousDistribution() , sigma_(1.0) , xi_(0.0) { setName( "GeneralizedPareto" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ GeneralizedPareto::GeneralizedPareto(const Scalar sigma, const Scalar xi) : ContinuousDistribution() , sigma_(0.0) , xi_(xi) { setName( "GeneralizedPareto" ); // We set the dimension of the GeneralizedPareto distribution setDimension( 1 ); // This call set also the range. setSigma(sigma); } /* Comparison operator */ Bool GeneralizedPareto::operator ==(const GeneralizedPareto & other) const { if (this == &other) return true; return (sigma_ == other.sigma_) && (xi_ == other.xi_); } Bool GeneralizedPareto::equals(const DistributionImplementation & other) const { const GeneralizedPareto* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String GeneralizedPareto::__repr__() const { OSS oss; oss << "class=" << GeneralizedPareto::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " sigma=" << sigma_ << " xi=" << xi_; return oss; } String GeneralizedPareto::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(sigma = " << sigma_ << ", xi=" << xi_ << ")"; return oss; } /* Virtual constructor */ GeneralizedPareto * GeneralizedPareto::clone() const { return new GeneralizedPareto(*this); } /* Compute the numerical range of the distribution given the parameters values */ void GeneralizedPareto::computeRange() { const Point lowerBound(1, 0.0); const Interval::BoolCollection finiteLowerBound(1, true); Point upperBound(1, 0.0); Interval::BoolCollection finiteUpperBound(1, false); if (xi_ >= 0.0) upperBound[0] = computeScalarQuantile(1.0 - SpecFunc::Precision); else { upperBound[0] = -sigma_ / xi_; finiteUpperBound[0] = true; } setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point GeneralizedPareto::getRealization() const { const Scalar u = RandomGenerator::Generate(); if (xi_ == 0.0) return Point(1, -sigma_ * std::log(u)); return Point(1, sigma_ * expm1(-xi_ * std::log(u)) / xi_); } /* Get the DDF of the distribution */ Point GeneralizedPareto::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = point[0] / sigma_; Point result(1); if (z < 0.0) return result; if (std::abs(std::sqrt(std::abs(xi_)) * z) < 1.0e-8) { result[0] = -0.5 * std::exp(-z) * (1.0 + xi_ * z * (0.5 * z - 1.0)) / (sigma_ * sigma_); return result; } if ((xi_ < 0.0) && (z >= -1.0 / xi_)) return result; result[0] = -(1.0 + xi_) * std::exp(-(2.0 + 1.0 / xi_) * log1p(xi_ * z)) / (sigma_ * sigma_); return result; } /* Get the PDF of the distribution */ Scalar GeneralizedPareto::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = point[0] / sigma_; if (z < 0.0) return 0.0; if (std::abs(z) * std::sqrt(std::abs(xi_)) < 1.0e-8) return std::exp(-z) * (1.0 + z * xi_ * (0.5 * z - 1.0)) / sigma_; if ((xi_ < 0.0) && (z >= -1.0 / xi_)) return 0.0; return std::exp(-(1.0 + 1.0 / xi_) * log1p(xi_ * z)) / sigma_; } Scalar GeneralizedPareto::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = point[0] / sigma_; if (z < 0.0) return SpecFunc::LogMinScalar; if (std::abs(std::sqrt(std::abs(xi_)) * z) < 1.0e-8) return -z + log1p(z * xi_ * (0.5 * z - 1.0)) - std::log(sigma_); if ((xi_ < 0.0) && (z >= -1.0 / xi_)) return SpecFunc::LogMinScalar; return -(1.0 + 1.0 / xi_) * log1p(xi_ * z) - std::log(sigma_); } /* Get the CDF of the distribution */ Scalar GeneralizedPareto::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = point[0] / sigma_; if (z <= 0.0) return 0.0; if (std::abs(std::sqrt(xi_) * z) < 1.0e-8) return -expm1(-z) - 0.5 * xi_ * z * z * std::exp(-z); if ((xi_ < 0.0) && (z > -1.0 / xi_)) return 1.0; return -expm1(-log1p(xi_ * z) / xi_); } /* Get the complementary CDF of the distribution */ Scalar GeneralizedPareto::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = point[0] / sigma_; if (z <= 0.0) return 1.0; if (std::abs(std::sqrt(xi_) * z) < 1.0e-8) return std::exp(-z) * (1.0 + 0.5 * xi_ * z * z); if ((xi_ < 0.0) && (z > -1.0 / xi_)) return 0.0; return std::exp(-log1p(xi_ * z) / xi_); } /** Get the product minimum volume interval containing a given probability of the distribution */ Interval GeneralizedPareto::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, false, marginalProb); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet GeneralizedPareto::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const Interval interval(computeMinimumVolumeInterval(prob)); Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); Scalar minusLogPDFThreshold = -computeLogPDF(interval.getUpperBound()[0]); threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex GeneralizedPareto::computeCharacteristicFunction(const Scalar x) const { if (xi_ == 0.0) return 1.0 / Complex(1.0, -x); return DistributionImplementation::computeCharacteristicFunction(x); } Complex GeneralizedPareto::computeLogCharacteristicFunction(const Scalar x) const { if (xi_ == 0.0) return -std::log(Complex(1.0, -x)); return std::log(computeCharacteristicFunction(x)); } /* Get the PDFGradient of the distribution */ Point GeneralizedPareto::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point result(2); const Scalar epsilon = 1.0e-5; result[0] = (GeneralizedPareto(sigma_ + epsilon, xi_).computePDF(point) - GeneralizedPareto(sigma_ - epsilon, xi_).computePDF(point)) / (2.0 * epsilon); result[1] = (GeneralizedPareto(sigma_, xi_ + epsilon).computePDF(point) - GeneralizedPareto(sigma_, xi_ - epsilon).computePDF(point)) / (2.0 * epsilon); return result; } /* Get the CDFGradient of the distribution */ Point GeneralizedPareto::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point result(2); const Scalar epsilon = 1.0e-5; result[0] = (GeneralizedPareto(sigma_ + epsilon, xi_).computeCDF(point) - GeneralizedPareto(sigma_ - epsilon, xi_).computeCDF(point)) / (2.0 * epsilon); result[1] = (GeneralizedPareto(sigma_, xi_ + epsilon).computeCDF(point) - GeneralizedPareto(sigma_, xi_ - epsilon).computeCDF(point)) / (2.0 * epsilon); return result; } /* Get the quantile of the distribution */ Scalar GeneralizedPareto::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar logProb = tail ? std::log(prob) : log1p(-prob); if (xi_ == 0.0) return -sigma_ * logProb; else return sigma_ * expm1(-xi_ * logProb) / xi_; } /* Compute the mean of the distribution */ void GeneralizedPareto::computeMean() const { if (!(xi_ < 1.0)) throw NotDefinedException(HERE) << "Error: the mean is defined only for xi<1, here xi=" << xi_; mean_ = Point(1, sigma_ / (1.0 - xi_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point GeneralizedPareto::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point GeneralizedPareto::getSkewness() const { if (xi_ >= 1.0 / 3.0) throw NotDefinedException(HERE) << "Error: the skewness is defined only for xi<1/3, here xi=" << xi_; return Point(1, 2.0 * (1.0 + xi_) * std::sqrt(1.0 - 2.0 * xi_) / (1.0 - 3.0 * xi_)); } /* Get the kurtosis of the distribution */ Point GeneralizedPareto::getKurtosis() const { if (xi_ >= 1.0 / 4.0) throw NotDefinedException(HERE) << "Error: the kurtosis is defined only for xi<1/4, here xi=" << xi_; return Point(1, 3.0 * (1.0 - 2.0 * xi_) * (3.0 + xi_ * (1.0 + 2.0 * xi_)) / ((1.0 - 4.0 * xi_) * (1.0 - 3.0 * xi_))); } /* Get the moments of the standardized distribution */ Point GeneralizedPareto::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); if (xi_ == 0.0) return Point(1, SpecFunc::Gamma(n + 1.0)); if (xi_ > 0.0) { if (n < trunc(1.0 / xi_)) return Point(1, std::exp(-std::log(xi_) * (n + 1.0) + SpecFunc::LogGamma(1.0 / xi_ - n) + SpecFunc::LogGamma(n + 1.0) - SpecFunc::LogGamma(1.0 + 1.0 / xi_))); throw NotDefinedException(HERE) << "Error: the standard moments are defined up to order " << trunc(1.0 / xi_) << " and n=" << n; } return Point(1, std::exp(-(n + 1.0) * std::log(-xi_) + SpecFunc::LogGamma(-1.0 / xi_) + SpecFunc::LogGamma(n + 1.0) - SpecFunc::LogGamma(-1.0 / xi_ + n + 1.0))); } /* Get the standard representative in the parametric family, associated with the standard moments */ GeneralizedPareto::Implementation GeneralizedPareto::getStandardRepresentative() const { return GeneralizedPareto(1.0, xi_).clone(); } /* Compute the covariance of the distribution */ void GeneralizedPareto::computeCovariance() const { if (xi_ >= 0.5) throw NotDefinedException(HERE) << "Error: the covariance is defined only for xi<1/2, here xi=" << xi_; covariance_ = CovarianceMatrix(1); covariance_(0, 0) = sigma_ * sigma_ / ((1.0 - 2.0 * xi_) * (1.0 - xi_) * (1.0 - xi_)); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point GeneralizedPareto::getParameter() const { Point point(2); point[0] = sigma_; point[1] = xi_; return point; } void GeneralizedPareto::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = GeneralizedPareto(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description GeneralizedPareto::getParameterDescription() const { Description description(2); description[0] = "sigma"; description[1] = "xi"; return description; } /* Sigma accessor */ void GeneralizedPareto::setSigma(const Scalar sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Sigma MUST be positive"; if (sigma != sigma_) { sigma_ = sigma; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Sigma accessor */ Scalar GeneralizedPareto::getSigma() const { return sigma_; } /* Xi accessor */ void GeneralizedPareto::setXi(const Scalar xi) { if (xi != xi_) { xi_ = xi; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; // The mean does not depend on xi computeRange(); } } /* Xi accessor */ Scalar GeneralizedPareto::getXi() const { return xi_; } /* Method save() stores the object through the StorageManager */ void GeneralizedPareto::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "xi_", xi_ ); } /* Method load() reloads the object from the StorageManager */ void GeneralizedPareto::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "xi_", xi_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GeneralizedParetoFactory.cxx000066400000000000000000000245071307543307100274340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for GeneralizedPareto distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GeneralizedParetoFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/TNC.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeneralizedParetoFactory); static const Factory Factory_GeneralizedParetoFactory; /* Default constructor */ GeneralizedParetoFactory::GeneralizedParetoFactory() : DistributionFactoryImplementation() , solver_(new TNC()) { // Create the optimization solver parameters using the parameters in the ResourceMap solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("GeneralizedParetoFactory-MaximumEvaluationNumber")); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("GeneralizedParetoFactory-MaximumAbsoluteError")); solver_.setMaximumRelativeError(ResourceMap::GetAsScalar("GeneralizedParetoFactory-MaximumRelativeError")); solver_.setMaximumResidualError(ResourceMap::GetAsScalar("GeneralizedParetoFactory-MaximumObjectiveError")); solver_.setMaximumConstraintError(ResourceMap::GetAsScalar("GeneralizedParetoFactory-MaximumConstraintError")); } /* Virtual constructor */ GeneralizedParetoFactory * GeneralizedParetoFactory::clone() const { return new GeneralizedParetoFactory(*this); } /* Here is the interface that all derived class must implement */ GeneralizedParetoFactory::Implementation GeneralizedParetoFactory::build(const Sample & sample) const { return buildAsGeneralizedPareto(sample).clone(); } GeneralizedParetoFactory::Implementation GeneralizedParetoFactory::build(const Point & parameters) const { return buildAsGeneralizedPareto(parameters).clone(); } GeneralizedParetoFactory::Implementation GeneralizedParetoFactory::build() const { return buildAsGeneralizedPareto().clone(); } GeneralizedPareto GeneralizedParetoFactory::buildAsGeneralizedPareto(const Sample & sample) const { if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a GeneralizedPareto distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a GeneralizedPareto distribution from an empty sample"; Scalar xMin = sample.getMin()[0]; if (!(xMin > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a GeneralizedPareto distribution based on a sample with nonpositive values."; Scalar smallSize = ResourceMap::GetAsUnsignedInteger( "GeneralizedParetoFactory-SmallSize" ); // The strategy is to use the probability weighted moment method for small size and to switch to the maximum likelihood if the estimator is not defined. For large size, we only use the ML estimator. if (size <= smallSize) { try { return buildMethodOfProbabilityWeightedMoments(sample); } catch (InvalidArgumentException) { // Nothing to do, fallback on the exponential regression } } // small size return buildMethodOfExponentialRegression(sample); } GeneralizedPareto GeneralizedParetoFactory::buildAsGeneralizedPareto(const Point & parameters) const { try { GeneralizedPareto distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a GeneralizedPareto distribution from the given parameters"; } } GeneralizedPareto GeneralizedParetoFactory::buildAsGeneralizedPareto() const { return GeneralizedPareto(); } /* Algorithm associated with the method of moments */ GeneralizedPareto GeneralizedParetoFactory::buildMethodOfMoments(const Sample & sample) const { const Scalar mean = sample.computeMean()[0]; const Scalar std = sample.computeStandardDeviationPerComponent()[0]; const Scalar xi = 0.5 * (std::pow(mean / std, 2) - 1.0); // The moment estimator is valid only if the estimated xi parameter is greater than -1/4 if (xi <= -0.25) throw InvalidArgumentException(HERE) << "Error: cannot estimate a GeneralizedPareto distribution with the method of moments when the estimated xi parameter=" << xi << " is less than -0.25"; const Scalar sigma = 0.5 * mean * (std::pow(mean / std, 2) + 1.0); GeneralizedPareto result(sigma, xi); result.setDescription(sample.getDescription()); return result; } struct GeneralizedParetoFactoryParameterConstraint { /** Constructor from a sample and a derivative factor estimate */ GeneralizedParetoFactoryParameterConstraint(const Sample & sample) : sampleY_(0, 1) , size_(sample.getSize()) { const Sample sortedSample(sample.sort(0)); sampleY_ = Sample(size_ - 2, 1); const Scalar xMin = sortedSample[0][0]; for (UnsignedInteger j = 0; j < size_ - 2; ++j) { const Scalar xNm1mJ = sortedSample[size_ - 1 - j][0]; const Scalar xNm2mJ = sortedSample[size_ - 2 - j][0]; if ((xNm1mJ == xMin) || (xNm2mJ == xMin)) sampleY_[j][0] = (j + 1.0) * SpecFunc::LogMaxScalar; else sampleY_[j][0] = (j + 1.0) * std::log((xNm1mJ - xMin) / (xNm2mJ - xMin)); } }; Point computeConstraint(const Point & parameter) const { const Scalar gamma = parameter[0]; // Separate the small gamma case for stability purpose if (std::abs(gamma) < 1.0e-4) { Scalar exponentialRegressionLogLikelihood = 0.0; for (UnsignedInteger j = 0; j < size_ - 2; ++j) { const Scalar logAlphaJ = std::log((j + 1.0) / size_); const Scalar gammaLogAlphaJ = gamma * logAlphaJ; const Scalar yLogAlphaJ = sampleY_[j][0] * logAlphaJ; exponentialRegressionLogLikelihood += std::log(-logAlphaJ) + yLogAlphaJ + 0.5 * gammaLogAlphaJ * (1.0 + yLogAlphaJ + gammaLogAlphaJ * (1.0 / 12.0 + yLogAlphaJ / 3.0 + gammaLogAlphaJ * yLogAlphaJ / 12.0)); } return Point(1, -exponentialRegressionLogLikelihood); } // Large gamma case Scalar exponentialRegressionLogLikelihood = 0.0; for (UnsignedInteger j = 0; j < size_ - 2; ++j) { const Scalar alphaJ = (1.0 - std::pow((j + 1.0) / size_, gamma)) / gamma; exponentialRegressionLogLikelihood += std::log(alphaJ) - alphaJ * sampleY_[j][0]; } return Point(1, -exponentialRegressionLogLikelihood); } Sample sampleY_; UnsignedInteger size_; }; /* Algorithm associated with the method of exponential regression */ GeneralizedPareto GeneralizedParetoFactory::buildMethodOfExponentialRegression(const Sample & sample) const { GeneralizedParetoFactoryParameterConstraint constraint(sample); Function f(bindMethod(constraint, &GeneralizedParetoFactoryParameterConstraint::computeConstraint, 1, 1)); CenteredFiniteDifferenceGradient gradient(1.0e-5, f.getEvaluation()); f.setGradient(gradient); // Define Optimization problem OptimizationProblem problem; problem.setObjective(f); const UnsignedInteger dimension = problem.getObjective().getInputDimension(); Point parametersLowerBound(dimension, -1.0); Point parametersUpperBound(dimension, 1.0); problem.setBounds(Interval(parametersLowerBound, parametersUpperBound, Interval::BoolCollection(dimension, 0), Interval::BoolCollection(dimension, 0))); solver_.setProblem(problem); solver_.setStartingPoint(Point(dimension, 0.0)); // run Optimization problem solver_.run(); // optimal point const Scalar xi = solver_.getResult().getOptimalPoint()[0]; const Scalar mean = sample.computeMean()[0]; const Sample sortedSample(sample.sort(0)); // Compute the first probability weighted moment Scalar m = 0.0; const UnsignedInteger size = sample.getSize(); for (UnsignedInteger i = 0; i < size; ++i) m += (size - (i + 0.65)) * sortedSample[i][0]; m /= size * size; const Scalar sigma = 2.0 * mean * m / (mean - 2.0 * m); GeneralizedPareto result(sigma, xi); result.setDescription(sample.getDescription()); return result; } /* Algorithm associated with the method of modified moments */ GeneralizedPareto GeneralizedParetoFactory::buildMethodOfProbabilityWeightedMoments(const Sample & sample) const { const Scalar mean = sample.computeMean()[0]; const Sample sortedSample(sample.sort(0)); // Compute the first probability weighted moment Scalar m = 0.0; const UnsignedInteger size = sample.getSize(); for (UnsignedInteger i = 0; i < size; ++i) m += (size - (i + 0.65)) * sortedSample[i][0]; m /= size * size; const Scalar xi = mean / (mean - 2.0 * m) - 2.0; if (xi <= -0.5) throw InvalidArgumentException(HERE) << "Error: cannot estimate a GeneralizedPareto distribution with the method of probability weighted moments when the estimated xi parameter=" << xi << " is less than -0.5"; const Scalar sigma = 2.0 * mean * m / (mean - 2.0 * m); GeneralizedPareto result(sigma, xi); result.setDescription(sample.getDescription()); return result; } /* Optimization solver accessor */ OptimizationAlgorithm GeneralizedParetoFactory::getOptimizationAlgorithm() const { return solver_; } void GeneralizedParetoFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "GeneralizedParetoFactory::setOptimizationSolver is deprecated"); solver_ = solver; } OptimizationAlgorithm GeneralizedParetoFactory::getOptimizationSolver() const { Log::Warn(OSS() << "GeneralizedParetoFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void GeneralizedParetoFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { setOptimizationAlgorithm(solver); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Geometric.cxx000066400000000000000000000202541307543307100244110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Geometric distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Geometric.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Geometric); static const Factory Factory_Geometric; /* Default constructor */ Geometric::Geometric() : DiscreteDistribution() , p_(0.5) { setName( "Geometric" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Geometric::Geometric(const Scalar p) : DiscreteDistribution() , p_(0.) { setName( "Geometric" ); // We set the dimension of the Geometric distribution setDimension( 1 ); // Also sets the range setP(p); } /* Comparison operator */ Bool Geometric::operator ==(const Geometric & other) const { if (this == &other) return true; return p_ == other.p_; } Bool Geometric::equals(const DistributionImplementation & other) const { const Geometric* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Geometric::__repr__() const { OSS oss(true); oss << "class=" << Geometric::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " p=" << p_; return oss; } String Geometric::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(p = " << p_ << ")"; return oss; } /* Virtual constructor */ Geometric * Geometric::clone() const { return new Geometric(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Geometric::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(DistributionImplementation::computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Geometric::getRealization() const { return Point(1, ceil(std::log(RandomGenerator::Generate()) / log1p(-p_))); } /* Get the PDF of the distribution */ Scalar Geometric::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < 1.0 - supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return 0.0; return p_ * std::pow(1.0 - p_, k - 1.0); } /* Get the CDF of the distribution */ Scalar Geometric::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < 1.0) return 0.0; return 1.0 - std::pow(1.0 - p_, floor(k)); } Scalar Geometric::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < 1.0) return 1.0; return std::pow(1.0 - p_, floor(k)); } /* Get the PDFGradient of the distribution */ Point Geometric::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < 1.0 - supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return Point(1, 0.0); return Point(1, (1.0 - k * p_) * std::pow(1.0 - p_, k - 2.0)); } /* Get the CDFGradient of the distribution */ Point Geometric::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = floor(point[0]); if ( k < 1.0 ) return Point(1, 0.0); return Point(1, k * std::pow(1 - p_, k - 1.0)); } /* Get the quantile of the distribution */ Scalar Geometric::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return ceil(std::log(prob) / log1p(-p_)); return ceil(log1p(-prob) / log1p(-p_)); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Geometric::computeCharacteristicFunction(const Scalar x) const { const Complex value(p_ / (std::exp(Complex(0.0, -x)) - (1.0 - p_))); return value; } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Geometric::computeGeneratingFunction(const Complex & z) const { return p_ * z / (1.0 - (1.0 - p_) * z); } /* Get the support of a discrete distribution that intersect a given interval */ Sample Geometric::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 0.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (floor(interval.getUpperBound()[0])); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Compute the mean of the distribution */ void Geometric::computeMean() const { mean_ = Point(1, 1 / p_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Geometric::getStandardDeviation() const { return Point(1, std::sqrt(1.0 - p_) / p_); } /* Get the skewness of the distribution */ Point Geometric::getSkewness() const { return Point(1, (2.0 - p_) / std::sqrt(1.0 - p_)); } /* Get the kurtosis of the distribution */ Point Geometric::getKurtosis() const { return Point(1, 9.0 + p_ * p_ / (1.0 - p_)); } /* Compute the covariance of the distribution */ void Geometric::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = (1.0 - p_) / (p_ * p_); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Geometric::getParameter() const { return Point(1, p_); } void Geometric::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Geometric(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description Geometric::getParameterDescription() const { return Description(1, "p"); } /* P accessor */ void Geometric::setP(const Scalar p) { if ( (p <= 0.0) || (p > 1.0) ) throw InvalidArgumentException(HERE) << "Error: p must be in ]0, 1], here p=" << p; if (p != p_) { p_ = p; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* P accessor */ Scalar Geometric::getP() const { return p_; } /* Method save() stores the object through the StorageManager */ void Geometric::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void Geometric::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "p_", p_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GeometricFactory.cxx000066400000000000000000000062061307543307100257420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Geometric distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/GeometricFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GeometricFactory); static const Factory Factory_GeometricFactory; /* Default constructor */ GeometricFactory::GeometricFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ GeometricFactory * GeometricFactory::clone() const { return new GeometricFactory(*this); } /* Here is the interface that all derived class must implement */ GeometricFactory::Implementation GeometricFactory::build(const Sample & sample) const { return buildAsGeometric(sample).clone(); } GeometricFactory::Implementation GeometricFactory::build(const Point & parameters) const { return buildAsGeometric(parameters).clone(); } GeometricFactory::Implementation GeometricFactory::build() const { return buildAsGeometric().clone(); } Geometric GeometricFactory::buildAsGeometric(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Geometric distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Geometric distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); // Check if all the components of the sample are integers > 0 UnsignedInteger size = sample.getSize(); Scalar sum = 0.0; for (UnsignedInteger i = 0; i < size; i++) { Scalar x = sample[i][0]; if ((x != trunc(x)) || (x < 1.0)) throw InvalidArgumentException(HERE) << "Error: can build a Geometric distribution only from a sample with integer components >= 1, here sample[" << i << "][0]=" << x; sum += x; } Geometric result(size / sum); result.setDescription(sample.getDescription()); return result; } Geometric GeometricFactory::buildAsGeometric(const Point & parameters) const { try { Geometric distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Geometric distribution from the given parameters"; } } Geometric GeometricFactory::buildAsGeometric() const { return Geometric(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Gumbel.cxx000066400000000000000000000221221307543307100237020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Gumbel distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Gumbel.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Gumbel); static const Factory Factory_Gumbel; /* Default constructor */ Gumbel::Gumbel() : ContinuousDistribution() , alpha_(1.0) , beta_(0.0) { setName( "Gumbel" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Gumbel::Gumbel(const Scalar alpha, const Scalar beta) : ContinuousDistribution() , alpha_(0.0) , beta_(beta) { setName("Gumbel"); setAlpha(alpha); setDimension( 1 ); } /* Comparison operator */ Bool Gumbel::operator ==(const Gumbel & other) const { if (this == &other) return true; return (alpha_ == other.alpha_) && (beta_ == other.beta_); } Bool Gumbel::equals(const DistributionImplementation & other) const { const Gumbel* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Gumbel::__repr__() const { OSS oss(true); oss << "class=" << Gumbel::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " alpha=" << alpha_ << " beta=" << beta_; return oss; } String Gumbel::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(alpha = " << alpha_ << ", beta = " << beta_ << ")"; return oss; } /* Virtual constructor */ Gumbel * Gumbel::clone() const { return new Gumbel(*this); } /* Get one realization of the distribution */ Point Gumbel::getRealization() const { return Point(1, beta_ - std::log(-std::log(RandomGenerator::Generate())) / alpha_); } /* Get the DDF of the distribution */ Point Gumbel::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar expX = std::exp(-alpha_ * (point[0] - beta_)); return Point(1, alpha_ * alpha_ * (expX - 1.0) * expX * std::exp(-expX)); } /* Get the PDF of the distribution */ Scalar Gumbel::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar expX = std::exp(-alpha_ * (point[0] - beta_)); return alpha_ * expX * std::exp(-expX); } Scalar Gumbel::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar X = -alpha_ * (point[0] - beta_); return std::log(alpha_) + X - std::exp(X); } /* Get the CDF of the distribution */ Scalar Gumbel::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = -alpha_ * (point[0] - beta_); const Scalar expX = std::exp(x); return std::exp(-expX); } Scalar Gumbel::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = -alpha_ * (point[0] - beta_); const Scalar expX = std::exp(x); // -2.419227917539996841 = numerical bound for which the approximation has a relative error less than 1e-16 if (x < -2.419227917539996841) { Scalar value = expX; Scalar coeff = expX; for (UnsignedInteger i = 2; i < 10; ++i) { coeff *= -expX / static_cast(i); value += coeff; } return value; } return 1.0 - std::exp(-expX); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Gumbel::computeCharacteristicFunction(const Scalar x) const { return SpecFunc::Gamma(Complex(1.0, -x / alpha_)) * std::exp(Complex(0.0, beta_ * x)); } Complex Gumbel::computeLogCharacteristicFunction(const Scalar x) const { return std::log(SpecFunc::Gamma(Complex(1.0, -x / alpha_))) + Complex(0.0, beta_ * x); } /* Get the PDFGradient of the distribution */ Point Gumbel::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - beta_; const Scalar expX = std::exp(-alpha_ * x); const Scalar pdf = alpha_ * expX * std::exp(-expX); Point pdfGradient(2); pdfGradient[0] = (1.0 / alpha_ - x * (1.0 - expX)) * pdf; pdfGradient[1] = alpha_ * (1.0 - expX) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Gumbel::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - beta_; const Scalar expX = std::exp(-alpha_ * x); const Scalar cdf = std::exp(-expX); Point cdfGradient(2); cdfGradient[0] = x * expX * cdf; cdfGradient[1] = -alpha_ * expX * cdf; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Gumbel::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return beta_ - std::log(-log1p(-prob)) / alpha_; return beta_ - std::log(-std::log(prob)) / alpha_; } /* Compute the mean of the distribution */ void Gumbel::computeMean() const { mean_ = Point(1, beta_ + SpecFunc::EulerConstant / alpha_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Gumbel::getStandardDeviation() const { return Point(1, SpecFunc::PI_SQRT6 / alpha_); } /* Get the skewness of the distribution */ Point Gumbel::getSkewness() const { // 1.139547099404648657492793 = 12 * sqrt(6) * Zeta(3) / Pi^3 return Point(1, 1.139547099404648657492793); } /* Get the kurtosis of the distribution */ Point Gumbel::getKurtosis() const { // 5.4 = 27/5 return Point(1, 5.4); } /* Get the standard representative in the parametric family, associated with the standard moments */ Gumbel::Implementation Gumbel::getStandardRepresentative() const { return Gumbel(1.0, 0.0).clone(); } /* Compute the covariance of the distribution */ void Gumbel::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = SpecFunc::PI2_6 / (alpha_ * alpha_); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Gumbel::getParameter() const { Point point(2); point[0] = alpha_; point[1] = beta_; return point; } void Gumbel::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 parameters, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Gumbel(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Gumbel::getParameterDescription() const { Description description(2); description[0] = "alpha"; description[1] = "beta"; return description; } /* Alpha accessor */ void Gumbel::setAlpha(const Scalar alpha) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (alpha != alpha_) { alpha_ = alpha; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Gumbel::getAlpha() const { return alpha_; } /* M accessor */ void Gumbel::setBeta(const Scalar beta) { if (beta != beta_) { beta_ = beta; isAlreadyComputedMean_ = false; // The covariance does not depend on beta computeRange(); } } Scalar Gumbel::getBeta() const { return beta_; } /* Method save() stores the object through the StorageManager */ void Gumbel::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); } /* Method load() reloads the object from the StorageManager */ void Gumbel::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GumbelAB.cxx000066400000000000000000000104361307543307100241120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gumbel distribution with a and b as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GumbelFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/GumbelAB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GumbelAB); /* Default constructor */ GumbelAB::GumbelAB() : DistributionParametersImplementation() , a_(0.0) , b_(1.0) { // Nothing to do } GumbelAB::GumbelAB(const Scalar a, const Scalar b) : DistributionParametersImplementation() , a_(a) , b_(b) { if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "b must be > 0, here b=" << b; } /* Virtual constructor */ GumbelAB * GumbelAB::clone() const { return new GumbelAB(*this); } /* Comparison operator */ Bool GumbelAB::operator ==(const GumbelAB & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution GumbelAB::getDistribution() const { Point newParameters(2); newParameters[0] = a_; newParameters[1] = b_; Point nativeParameters(operator()(newParameters)); return GumbelFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix GumbelAB::gradient() const { const Scalar dalphada = 0.0; const Scalar dalphadb = -1 / (b_ * b_); const Scalar dbetada = 1.0; const Scalar dbetadb = 0.0; SquareMatrix nativeParametersGradient(IdentityMatrix(2)); nativeParametersGradient(0, 0) = dalphada; nativeParametersGradient(1, 0) = dalphadb; nativeParametersGradient(0, 1) = dbetada; nativeParametersGradient(1, 1) = dbetadb; return nativeParametersGradient; } /* Conversion operator */ Point GumbelAB::operator () (const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar a = inP[0]; const Scalar b = inP[1]; if (!(b > 0.0)) throw InvalidArgumentException(HERE) << "b must be > 0, here b=" << b; const Scalar alpha = 1 / b; const Scalar beta = a; Point nativeParameters(inP); nativeParameters[0] = alpha; nativeParameters[1] = beta; return nativeParameters; } Point GumbelAB::inverse(const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar alpha = inP[0]; const Scalar beta = inP[1]; if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "alpha must be > 0, here alpha=" << alpha; const Scalar a = beta; const Scalar b = 1.0 / alpha; Point abParameters(inP); abParameters[0] = a; abParameters[1] = b; return abParameters; } /* Parameters value and description accessor */ void GumbelAB::setValues(const Point & inP) { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); a_ = inP[0]; b_ = inP[1]; } Point GumbelAB::getValues() const { Point point(2); point[0] = a_; point[1] = b_; return point; } Description GumbelAB::getDescription() const { Description description(2); description[0] = "a"; description[1] = "b"; return description; } /* String converter */ String GumbelAB::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " a=" << a_ << " b=" << b_; return oss; } String GumbelAB::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(a = " << a_ << ", b = " << b_ << ")"; return oss; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/GumbelCopula.cxx000066400000000000000000000357731307543307100250660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GumbelCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/GumbelCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GumbelCopula); static const Factory Factory_GumbelCopula; /* Default constructor */ GumbelCopula::GumbelCopula() : ArchimedeanCopula() , theta_(2.0) { setName( "GumbelCopula" ); // We set the dimension of the GumbelCopula distribution setDimension( 2 ); computeRange(); } /* Parameters constructor */ GumbelCopula::GumbelCopula(const Scalar theta) : ArchimedeanCopula() , theta_(0.0) { setName( "GumbelCopula" ); // We set the dimension of the GumbelCopula distribution setDimension( 2 ); // Check the value of theta setTheta(theta); computeRange(); } /* Comparison operator */ Bool GumbelCopula::operator ==(const GumbelCopula & other) const { if (this == &other) return true; return theta_ == other.theta_; } Bool GumbelCopula::equals(const DistributionImplementation & other) const { const GumbelCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String GumbelCopula::__repr__() const { OSS oss(true); oss << "class=" << GumbelCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " theta=" << theta_; return oss; } String GumbelCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(theta = " << theta_ << ")"; return oss; } /* Virtual constructor */ GumbelCopula * GumbelCopula::clone() const { return new GumbelCopula(*this); } /* Get one realization of the distribution Algorithm using stable distribution, see: Kjersti Aas, "Modelling the dependence structure of financial assets: a survey of four copulas", Norwegian Computing Center report nr. SAMBA/22/04, December 2004. */ Point GumbelCopula::getRealization() const { Point realization(2); const Scalar u = (RandomGenerator::Generate() - 0.5) * M_PI; const Scalar u2 = u + M_PI_2; const Scalar e = -std::log(RandomGenerator::Generate()); const Scalar inverseTheta = 1.0 / theta_; const Scalar t = std::cos(u - u2 * inverseTheta) / e; const Scalar gamma = std::pow(std::sin(u2 * inverseTheta) / t, inverseTheta) * t / std::cos(u); realization[0] = std::exp(-std::pow(-std::log(RandomGenerator::Generate()), inverseTheta) / gamma); realization[1] = std::exp(-std::pow(-std::log(RandomGenerator::Generate()), inverseTheta) / gamma); return realization; } /* Get the DDF of the distribution */ Point GumbelCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return Point(2, 0.0); Point result(2); const Scalar t1 = std::log(u); const Scalar t2 = std::pow(-t1, theta_); const Scalar t3 = std::log(v); const Scalar t4 = std::pow(-t3, theta_); const Scalar t5 = t2 + t4; const Scalar t7 = std::pow(t5, 1.0 / theta_); const Scalar t8 = t2 * t2; const Scalar t10 = std::pow(u, 2.0); const Scalar t11 = 1.0 / t10; const Scalar t12 = t1 * t1; const Scalar t13 = 1.0 / t12; const Scalar t14 = t11 * t13; const Scalar t15 = t5 * t5; const Scalar t17 = 1.0 / t15 / t5; const Scalar t20 = std::exp(-t7); const Scalar t22 = -1.0 + theta_ + t7; const Scalar t23 = 1.0 / v; const Scalar t25 = 1.0 / t3; const Scalar t26 = t22 * t23 * t25; const Scalar t29 = t7 * t4; const Scalar t35 = t23 * t25; const Scalar t36 = 1.0 / t15; const Scalar t40 = t7 * t7; const Scalar t41 = t40 * t4; const Scalar t48 = t8 * t20; const Scalar t51 = t23 * t17 * t25; const Scalar t62 = t29 * t2 * t20 * t22; const Scalar t63 = t36 * t11; result[0] = t7 * t8 * t14 * t17 * t4 * t20 * t26 + t29 * t2 * theta_ * t11 * t13 * t20 * t22 * t35 * t36 - t41 * t8 * t11 * t13 * t17 * t20 * t26 + t41 * t48 * t14 * t51 - 2.0 * t29 * t48 * t22 * t51 * t14 * theta_ - t62 * t35 * t63 / t1 - t62 * t35 * t63 * t13; const Scalar t8b = t4 * t4; const Scalar t9b = t7 * t8b; const Scalar t10b = std::pow(v, 2.0); const Scalar t11b = 1.0 / t10b; const Scalar t12b = t3 * t3; const Scalar t13b = 1.0 / t12b; const Scalar t14b = t11b * t13b; const Scalar t18 = t14b * t17; const Scalar t21 = t2 * t20; const Scalar t23b = 1.0 / u; const Scalar t26b = t22 * t23b * t25; const Scalar t33 = t21 * t22; const Scalar t36b = 1.0 / t15 * t23b * t25; const Scalar t40b = t40 * t8b; const Scalar t52 = t29 * t33; result[1] = t9b * t18 * t21 * t26b + t29 * theta_ * t11b * t13b * t33 * t36b - t40b * t11b * t2 * t13b * t17 * t20 * t26b + t40b * t21 * t14b * t23b * t17 * t25 - t52 * t11b / t3 * t36b - t52 * t14b * t36b - 2.0 * t9b * t33 * t18 * t23b * t25 * theta_; return result; } /* Get the PDF of the distribution */ Scalar GumbelCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return 0.0; const Scalar logU = std::log(u); const Scalar logV = std::log(v); const Scalar minusLogUPowerTheta = std::pow(-logU, theta_); const Scalar minusLogVPowerTheta = std::pow(-logV, theta_); const Scalar sum1 = minusLogUPowerTheta + minusLogVPowerTheta; const Scalar pow1 = std::pow(sum1, 1.0 / theta_); return pow1 * minusLogUPowerTheta * minusLogVPowerTheta * std::exp(-pow1) * (pow1 + theta_ - 1.0) / (u * v * logU * logV * sum1 * sum1); } /* Get the CDF of the distribution */ Scalar GumbelCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // If we are outside of the support, in the lower parts if ((u <= 0.0) || (v <= 0.0)) return 0.0; // If we are outside of the support, in the upper part if ((u >= 1.0) && (v >= 1.0)) return 1.0; // If we are outside of the support for u, in the upper part if (u >= 1.0) return v; // If we are outside of the support for v, in the upper part if (v >= 1.0) return u; // If we are in the support return std::exp(-std::pow(std::pow(-std::log(u), theta_) + std::pow(-std::log(v), theta_), 1.0 / theta_)); } /* Get the PDFGradient of the distribution */ Point GumbelCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null PDF gradient outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return Point(1, 0.0); const Scalar epsilon = ResourceMap::GetAsScalar("DistFunc-Precision"); return Point(1, (GumbelCopula(theta_ + epsilon).computePDF(point) - GumbelCopula(theta_ - epsilon).computePDF(point)) / (2.0 * epsilon)); } /* Get the CDFGradient of the distribution */ Point GumbelCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; const Scalar v = point[1]; // A copula has a null CDF gradient outside of ]0, 1[^2 if ((u <= 0.0) || (u >= 1.0) || (v <= 0.0) || (v >= 1.0)) return Point(1, 0.0); // If we are in the support const Scalar logU = std::log(u); const Scalar logV = std::log(v); const Scalar minusLogUPowerTheta = std::pow(-logU, theta_); const Scalar minusLogVPowerTheta = std::pow(-logV, theta_); const Scalar sum1 = minusLogUPowerTheta + minusLogVPowerTheta; const Scalar inverseTheta = 1.0 / theta_; const Scalar pow1 = std::pow(sum1, inverseTheta); return Point(1, pow1 * std::exp(-pow1) * inverseTheta * (std::log(sum1) * inverseTheta - (minusLogUPowerTheta * std::log(-logU) + minusLogVPowerTheta * std::log(-logV)) / sum1)); } /* Get the quantile of the distribution */ Point GumbelCopula::computeQuantile(const Scalar prob, const Bool tail) const { if ((prob < 0.0) || (prob > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; if (prob == 0.0) return getRange().getLowerBound(); if (prob == 1.0) return getRange().getUpperBound(); return Point(2, std::exp(-std::exp(std::log(-std::log(prob)) - M_LN2 / theta_))); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar GumbelCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; const Scalar u = y[0]; const Scalar v = x; // If we are in the support const Scalar minusLogU = -std::log(u); const Scalar minusLogUPowTheta = std::pow(minusLogU, theta_); const Scalar minusLogVPowTheta = std::pow(-std::log(v), theta_); const Scalar sum = minusLogUPowTheta + minusLogVPowTheta; return std::pow(sum, -1.0 + 1.0 / theta_) * minusLogUPowTheta * std::exp(-std::pow(sum, 1.0 / theta_)) / (u * minusLogU); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar GumbelCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q <= 0.0) || (q >= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // Initialize the conditional quantile with the quantile of the i-th marginal distribution // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; const Scalar u = y[0]; const Scalar inverseThetaMinusOne = 1.0 / (theta_ - 1.0); const Scalar minusLogU = -std::log(u); const Scalar minusLogUPowTheta = std::pow(minusLogU, theta_); const Scalar factor = minusLogUPowTheta / (u * q * minusLogU); return std::exp(-std::pow(std::exp(theta_ * (std::log(factor) / (theta_ - 1.0) - SpecFunc::LambertW(std::pow(factor, inverseThetaMinusOne) * inverseThetaMinusOne))) - minusLogUPowTheta, 1.0 / theta_)); } /* Compute the covariance of the distribution */ void GumbelCopula::computeCovariance() const { CopulaImplementation::computeCovariance(); } /* Get the Kendall concordance of the distribution */ CorrelationMatrix GumbelCopula::getKendallTau() const { CorrelationMatrix tau(2); tau(0, 1) = 1.0 - 1.0 / theta_; return tau; } /* Parameters value accessor */ Point GumbelCopula::getParameter() const { return Point(1, theta_); } void GumbelCopula::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = GumbelCopula(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description GumbelCopula::getParameterDescription() const { return Description(1, "theta"); } /* Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar GumbelCopula::computeArchimedeanGenerator(const Scalar t) const { return std::pow(-std::log(t), theta_); } /* Compute the inverse of the archimedean generator */ Scalar GumbelCopula::computeInverseArchimedeanGenerator(const Scalar t) const { return std::exp(-std::pow(t, 1.0 / theta_)); } /* Compute the derivative of the density generator */ Scalar GumbelCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const { return -theta_ * std::pow(-std::log(t), theta_ - 1.0) / t; } /* Compute the seconde derivative of the density generator */ Scalar GumbelCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const { Scalar logT = std::log(t); return theta_ * (theta_ - logT - 1.0) * std::pow(-logT, theta_ - 2.0) / (t * t); } /* Tell if the distribution has independent copula */ Bool GumbelCopula::hasIndependentCopula() const { return (theta_ == 1.0); } /* Theta accessor */ void GumbelCopula::setTheta(const Scalar theta) { if (!(theta >= 1.0)) throw InvalidArgumentException(HERE) << "Theta MUST be greater or equal to 1"; theta_ = theta; } /* Theta accessor */ Scalar GumbelCopula::getTheta() const { return theta_; } /* Method save() stores the object through the StorageManager */ void GumbelCopula::save(Advocate & adv) const { ArchimedeanCopula::save(adv); adv.saveAttribute( "theta_", theta_ ); } /* Method load() reloads the object from the StorageManager */ void GumbelCopula::load(Advocate & adv) { ArchimedeanCopula::load(adv); adv.loadAttribute( "theta_", theta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GumbelCopulaFactory.cxx000066400000000000000000000056671307543307100264150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for GumbelCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/GumbelCopulaFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GumbelCopulaFactory); static const Factory Factory_GumbelCopulaFactory; /* Default constructor */ GumbelCopulaFactory::GumbelCopulaFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ GumbelCopulaFactory * GumbelCopulaFactory::clone() const { return new GumbelCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ GumbelCopulaFactory::Implementation GumbelCopulaFactory::build(const Sample & sample) const { return buildAsGumbelCopula(sample).clone(); } GumbelCopulaFactory::Implementation GumbelCopulaFactory::build(const Point & parameters) const { return buildAsGumbelCopula(parameters).clone(); } GumbelCopulaFactory::Implementation GumbelCopulaFactory::build() const { return buildAsGumbelCopula().clone(); } GumbelCopula GumbelCopulaFactory::buildAsGumbelCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a GumbelCopula distribution from an empty sample"; if (sample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a GumbelCopula distribution from a sample of dimension not equal to 2"; Scalar tau = sample.computeKendallTau().operator()(0, 1); if (tau == 1) throw InvalidArgumentException(HERE) << "Error: cannot build a GumbelCopula distribution from a sample with Kendall tau equal to 1"; GumbelCopula result(1.0 / (1.0 - tau)); result.setDescription(sample.getDescription()); return result; } GumbelCopula GumbelCopulaFactory::buildAsGumbelCopula(const Point & parameters) const { try { GumbelCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a GumbelCopula from the given parameters"; } } GumbelCopula GumbelCopulaFactory::buildAsGumbelCopula() const { return GumbelCopula(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GumbelFactory.cxx000066400000000000000000000057421307543307100252430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Gumbel distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GumbelFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/GumbelMuSigma.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GumbelFactory); static const Factory Factory_GumbelFactory; /* Default constructor */ GumbelFactory::GumbelFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ GumbelFactory * GumbelFactory::clone() const { return new GumbelFactory(*this); } /* Here is the interface that all derived class must implement */ GumbelFactory::Implementation GumbelFactory::build(const Sample & sample) const { return buildAsGumbel(sample).clone(); } GumbelFactory::Implementation GumbelFactory::build(const Point & parameters) const { return buildAsGumbel(parameters).clone(); } GumbelFactory::Implementation GumbelFactory::build() const { return buildAsGumbel().clone(); } DistributionFactoryResult GumbelFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } Gumbel GumbelFactory::buildAsGumbel(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Gumbel distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Gumbel distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar mu = sample.computeMean()[0]; Scalar sigma = sample.computeStandardDeviationPerComponent()[0]; Point parameters(2); parameters[0] = mu; parameters[1] = sigma; Gumbel result(buildAsGumbel(GumbelMuSigma()(parameters))); result.setDescription(sample.getDescription()); return result; } Gumbel GumbelFactory::buildAsGumbel(const Point & parameters) const { try { Gumbel distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Gumbel distribution from the given parameters"; } } Gumbel GumbelFactory::buildAsGumbel() const { return Gumbel(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/GumbelMuSigma.cxx000066400000000000000000000113451307543307100251720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gumbel distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GumbelFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/GumbelMuSigma.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GumbelMuSigma); /* Default constructor */ GumbelMuSigma::GumbelMuSigma() : DistributionParametersImplementation() , mu_(SpecFunc::EulerConstant) , sigma_(SpecFunc::PI_SQRT6) { // Nothing to do } GumbelMuSigma::GumbelMuSigma(const Scalar mu, const Scalar sigma) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Sigma must be > 0, here sigma=" << sigma; } /* Virtual constructor */ GumbelMuSigma * GumbelMuSigma::clone() const { return new GumbelMuSigma(*this); } /* Comparison operator */ Bool GumbelMuSigma::operator ==(const GumbelMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution GumbelMuSigma::getDistribution() const { Point newParameters(2); newParameters[0] = mu_; newParameters[1] = sigma_; Point nativeParameters(operator()(newParameters)); return GumbelFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix GumbelMuSigma::gradient() const { const Scalar dalphadmu = 0.0; const Scalar dalphadsigma = -SpecFunc::PI_SQRT6 / (sigma_ * sigma_); const Scalar dbetadmu = 1.0; const Scalar dbetadsigma = -SpecFunc::EULERSQRT6_PI; SquareMatrix nativeParametersGradient(IdentityMatrix(2)); nativeParametersGradient(0, 0) = dalphadmu; nativeParametersGradient(1, 0) = dalphadsigma; nativeParametersGradient(0, 1) = dbetadmu; nativeParametersGradient(1, 1) = dbetadsigma; return nativeParametersGradient; } /* Conversion operator */ Point GumbelMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; const Scalar alpha = SpecFunc::PI_SQRT6 / sigma; const Scalar beta = mu - SpecFunc::EULERSQRT6_PI * sigma; Point nativeParameters(2); nativeParameters[0] = alpha; nativeParameters[1] = beta; return nativeParameters; } Point GumbelMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); const Scalar alpha = inP[0]; const Scalar beta = inP[1]; if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; const Scalar mu = beta + SpecFunc::EulerConstant / alpha; const Scalar sigma = SpecFunc::PI_SQRT6 / alpha; Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void GumbelMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 2) throw InvalidArgumentException(HERE) << "the given point must have dimension=2, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; } Point GumbelMuSigma::getValues() const { Point point(2); point[0] = mu_; point[1] = sigma_; return point; } Description GumbelMuSigma::getDescription() const { Description description(2); description[0] = "mu"; description[1] = "sigma"; return description; } /* String converter */ String GumbelMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_; return oss; } String GumbelMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ")"; return oss; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/Histogram.cxx000066400000000000000000000470151307543307100244340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Histogram distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Histogram.hxx" #include "openturns/BarPlot.hxx" #include "openturns/Curve.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Histogram); static const Factory Factory_Histogram; /* Default constructor */ Histogram::Histogram() : ContinuousDistribution() , first_(0.0) , width_(1) , height_(1, 1.0) , cumulatedWidth_(0) { setName( "Histogram" ); // This call set also the range. setData(Point(1, 1.0), Point(1, 1.0)); setDimension( 1 ); } /* Parameters constructor */ Histogram::Histogram(const Scalar first, const Point & width, const Point & height) : ContinuousDistribution() , first_(first) , width_(0) , height_(0) , cumulatedWidth_(0) { setName("Histogram"); // This call set also the range. setData(width, height); setDimension(1); } /* Comparison operator */ Bool Histogram::operator ==(const Histogram & other) const { if (this == &other) return true; return (first_ == other.first_) && (width_ == other.width_) && (height_ == other.height_); } Bool Histogram::equals(const DistributionImplementation & other) const { const Histogram* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Histogram::__repr__() const { OSS oss(true); oss << "class=" << Histogram::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " first=" << first_ << " width=" << width_ << " height=" << height_; return oss; } String Histogram::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(origin = " << first_; for (UnsignedInteger i = 0; i < width_.getSize(); ++i) oss << ", {w" << i << " = " << width_[i] << ", h" << i << " = " << height_[i] << "}"; oss << ")"; return oss; } /* Virtual constructor */ Histogram * Histogram::clone() const { return new Histogram(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Histogram::computeRange() { const UnsignedInteger size = cumulatedWidth_.getSize(); if (size == 0) return; setRange(Interval(first_, first_ + cumulatedWidth_[size - 1])); } /* Get one realization of the distribution */ Point Histogram::getRealization() const { return computeQuantile(RandomGenerator::Generate()); } /* Get the DDF of the distribution */ Point Histogram::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(1, 0.0); } /* Get the PDF of the distribution */ Scalar Histogram::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar x = point[0] - first_; const UnsignedInteger size = width_.getSize(); if ((x < 0.0) || (x >= cumulatedWidth_[size - 1])) return 0.0; // Find the bin index by bisection UnsignedInteger iMin = 0; if (x < cumulatedWidth_[iMin]) return height_[iMin]; UnsignedInteger iMax = size - 1; while (iMax > iMin + 1) { const UnsignedInteger i = (iMin + iMax) / 2; if (x < cumulatedWidth_[i]) iMax = i; else iMin = i; } return height_[iMax]; } /* Get the CDF of the distribution */ Scalar Histogram::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar x = point[0] - first_; const UnsignedInteger size = width_.getSize(); if (x <= 0.0) return 0.0; if (x >= cumulatedWidth_[size - 1]) return 1.0; // Find the bin index by bisection UnsignedInteger iMin = 0; if (x < cumulatedWidth_[iMin]) return x * height_[iMin]; UnsignedInteger iMax = size - 1; while (iMax > iMin + 1) { const UnsignedInteger i = (iMin + iMax) / 2; if (x < cumulatedWidth_[i]) iMax = i; else iMin = i; } return cumulatedSurface_[iMax] + (x - cumulatedWidth_[iMax]) * height_[iMax]; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Histogram::computeCharacteristicFunction(const Scalar x) const { if (x == 0.0) return 1.0; Complex result(0.0); const UnsignedInteger size = width_.getSize(); if (std::abs(cumulatedWidth_[size - 1] * x) < 1e-10) { Scalar term = height_[0] * cumulatedWidth_[0] * cumulatedWidth_[0]; for (UnsignedInteger k = 1; k < size; ++k) term += height_[k] * (cumulatedWidth_[k - 1] + cumulatedWidth_[k]) * width_[k]; result = Complex(1.0, 0.5 * x * term); } else { result = height_[0] * SpecFunc::Expm1(Complex(0.0, cumulatedWidth_[0] * x)); for (UnsignedInteger k = 1; k < size; ++k) result += height_[k] * (std::exp(Complex(0.0, cumulatedWidth_[k] * x)) - std::exp(Complex(0.0, cumulatedWidth_[k - 1] * x))); result /= Complex(0.0, x); } result *= std::exp(Complex(0.0, first_ * x)); return result; } /* Get the PDFGradient of the distribution */ Point Histogram::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Histogram::computePDFGradient(const Point & point) const"; } /* Get the CDFGradient of the distribution */ Point Histogram::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Histogram::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution */ Scalar Histogram::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar p = tail ? 1.0 - prob : prob; if (p <= 0.0) return first_; const UnsignedInteger size = width_.getSize(); if (p >= 1.0) return first_ + cumulatedWidth_[size - 1]; // Search of the bin UnsignedInteger index(p * size); Scalar currentProba = cumulatedSurface_[index]; UnsignedInteger currentIndex = index; // Basic search: upper bound. The loop must end because cumulatedSurface_[size - 1] = 1.0 and prob < 1.0 while (p >= currentProba) { ++currentIndex; currentProba = cumulatedSurface_[currentIndex]; } // At the end of the loop, we are sure that currentProba > p // If index < currentIndex, it means that p is associated with bin number currentIndex. Do a linear interpolation. if (index < currentIndex) { // currentIndex is now the number of the bin associated with prob return first_ + cumulatedWidth_[currentIndex] + (p - currentProba) / height_[currentIndex]; } // Here we know that we have to go downstairs. We must check that currentIndex remains >= 0 in the loop. while ((p < currentProba) && (currentIndex > 0)) { --currentIndex; currentProba = cumulatedSurface_[currentIndex]; } // At the end of the loop, either p < cumulatedSurface_[0], which means that prob is associated with the first bin... if (p < currentProba) return first_ + width_[0] * p / currentProba; // ... or p >= cumulatedSurface_[currentIndex], which means that p is associated with the bin number currentIndex + 1. Do a linear interpolation. return first_ + cumulatedWidth_[currentIndex] + (p - currentProba) / height_[currentIndex + 1]; } /* Compute the mean of the distribution */ void Histogram::computeMean() const { Scalar mean = first_; const UnsignedInteger size = width_.getSize(); Scalar lower = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar upper = lower + width_[i]; mean += 0.5 * width_[i] * height_[i] * (lower + upper); lower = upper; } mean_ = Point(1, mean); isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void Histogram::computeCovariance() const { Scalar value = 0.0; const UnsignedInteger size = width_.getSize(); covariance_ = CovarianceMatrix(1); // Since variance is invariant by translation, we center the data for numerical stability Scalar lower = first_ - getMean()[0]; for (UnsignedInteger i = 0; i < size; i++) { const Scalar upper = lower + width_[i]; value += width_[i] * height_[i] * (lower * lower + lower * upper + upper * upper); lower = upper; } covariance_(0, 0) = value / 3.0; isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Histogram::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); Scalar value = 0.0; const UnsignedInteger size = width_.getSize(); Scalar xPrec = -1.0; const Scalar factor = 2.0 / cumulatedWidth_[size - 1]; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = xPrec + width_[i] * factor; value += (std::pow(x, static_cast(n + 1)) - std::pow(xPrec, static_cast(n + 1))) * height_[i]; xPrec = x; } value /= (n + 1) * factor; return Point(1, value); } /* Get the standard representative in the parametric family, associated with the standard moments */ Histogram::Implementation Histogram::getStandardRepresentative() const { const UnsignedInteger size = width_.getSize(); // No need to transform an histogram if its range is already [-1.0, 1.0] if (first_ == -1.0 && std::abs(cumulatedWidth_[size - 1] - 2.0) <= ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")) return clone(); const Scalar first = -1.0; const Scalar factor = 2.0 / cumulatedWidth_[size - 1]; return Histogram(first, factor * width_, height_ / factor).clone(); } /* Parameters value and description accessor */ /* Parameters value accessor */ Point Histogram::getParameter() const { const UnsignedInteger size = width_.getSize(); Point parameter(1 + 2 * size); parameter[0] = first_; for (UnsignedInteger i = 0; i < size; ++i) { parameter[2 * i + 1] = width_[i]; parameter[2 * i + 2] = height_[i]; } return parameter; } void Histogram::setParameter(const Point & parameter) { if (parameter.getSize() % 2 == 0) throw InvalidArgumentException(HERE) << "Error: expected an odd number of values, got " << parameter.getSize(); const Scalar w = getWeight(); const UnsignedInteger size = (parameter.getSize() - 1) / 2; first_ = parameter[0]; width_ = Point(size); height_ = Point(size); for (UnsignedInteger i = 0; i < size; ++i) { width_[i] = parameter[2 * i + 1]; height_[i] = parameter[2 * i + 2]; } *this = Histogram(first_, width_, height_); setWeight(w); } /* Parameters description accessor */ Description Histogram::getParameterDescription() const { const UnsignedInteger size = width_.getSize(); Description description(1 + 2 * size); description[0] = "first"; for (UnsignedInteger i = 0; i < size; ++i) { { OSS oss; oss << "width_" << i; description[2 * i + 1] = oss; } { OSS oss; oss << "height_" << i; description[2 * i + 2] = oss; } } return description; } /* Interface specific to Histogram */ /* First point accessor */ void Histogram::setFirst(const Scalar first) { if (first != first_) { first_ = first; isAlreadyComputedMean_ = false; // The covariance does not depend on first computeRange(); } } Scalar Histogram::getFirst() const { return first_; } void Histogram::setData(const Point & l, const Point & h) { Scalar surface = 0.0; const UnsignedInteger size = l.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the given width has a size of 0."; if (size != h.getSize()) throw InvalidArgumentException(HERE) << "Error: the width and the height must have the same size."; cumulatedWidth_ = Point(size); cumulatedSurface_ = Point(size); // first, check that all the heights and widths are >=0 for (UnsignedInteger i = 0; i < size; ++i) { Scalar height = h[i]; if (!(height >= 0.0)) throw InvalidArgumentException(HERE) << "Error: all the heights must be >= 0, here values=" << h; Scalar width = l[i]; if (!(width > 0.0)) throw InvalidArgumentException(HERE) << "Error: all the widths must be > 0, here value=" << l; surface += height * width; cumulatedWidth_[i] = width + (i == 0 ? 0.0 : cumulatedWidth_[i - 1]); cumulatedSurface_[i] = surface; } // Check if the surface is strictly positive if (surface < ResourceMap::GetAsScalar("Distribution-DefaultCDFEpsilon")) throw InvalidArgumentException(HERE) << "Error: the surface of the histogram is zero."; // Normalization Scalar normalizationFactor = 1.0 / surface; width_ = Point(size, 1.0); height_ = Point(size, 1.0); for (UnsignedInteger i = 0; i < size; ++i) { width_[i] = l[i]; height_[i] = h[i] * normalizationFactor; cumulatedSurface_[i] *= normalizationFactor; } // Here the value could be slightly different from 1, fix it. cumulatedSurface_[size - 1] = 1.0; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } Point Histogram::getWidth() const { return width_; } Point Histogram::getHeight() const { return height_; } /* Get the PDF singularities inside of the range - 1D only */ Point Histogram::getSingularities() const { const UnsignedInteger size = width_.getSize(); // Here we know that size > 0 Scalar x = first_ + width_[0]; Point singularities(1, x); for (UnsignedInteger i = 1; i < size - 1; ++i) { x += width_[i]; singularities.add(x); } return singularities; } /* Draw the PDF of the Histogram using a specific presentation */ Graph Histogram::drawPDF() const { const UnsignedInteger lastIndex = cumulatedWidth_.getSize() - 1; // Must prefix explicitely by the class name in order to avoid conflict with the methods in the upper class return Histogram::drawPDF(first_ - 0.5 * width_[0], first_ + cumulatedWidth_[lastIndex] + 0.5 * width_[lastIndex]); } /* Draw the PDF of the Histogram using a specific presentation */ Graph Histogram::drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (xMax <= xMin) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax >= xMin, here xmin=" << xMin << " and xmax=" << xMax; const String title(OSS() << getDescription()[0] << " PDF"); const String xName(getDescription()[0]); Graph graphPDF(title, xName, "PDF", true, "topright"); const UnsignedInteger size = width_.getSize(); // Check for the border cases // If the histogram is completely at the right or at the left of the plot range, // just draw an horizontal line if ((xMax < first_) || (xMin > first_ + cumulatedWidth_[size - 1])) { Sample data(2, 2); data[0][0] = xMin; data[0][1] = 0.0; data[1][0] = xMax; data[1][1] = 0.0; graphPDF.add(Curve(data, "red", "solid", 2, title)); return graphPDF; } // Find the index of the left bar to draw UnsignedInteger indexLeft = 0; while (first_ + cumulatedWidth_[indexLeft] < xMin) ++indexLeft; // Another special case: the plot range covers only partially a unique bar if (first_ + cumulatedWidth_[indexLeft] >= xMax) { Sample data(2, 2); data[0][0] = xMin; data[0][1] = height_[indexLeft]; data[1][0] = xMax; data[1][1] = height_[indexLeft]; graphPDF.add(Curve(data, "red", "solid", 2, title)); return graphPDF; } // Find the index of the right bar to draw UnsignedInteger indexRight = indexLeft; UnsignedInteger shiftFull = 0; Sample dataFull(0, 2); while ((indexRight < size) && (first_ + cumulatedWidth_[indexRight] < xMax)) ++indexRight; // The graph is made of full bars for the class indices between indexLeft and indexRight // The graph can include completely the first class or not. It is checked using first_. // The graph can include completely the last class or not. It is checked usind indexRight == size. // !!! Only the first part of the graph has a label !!! // The first class is completely included if (xMin <= first_) { Sample data(2, 2); data[0][0] = xMin; data[0][1] = 0.0; data[1][0] = first_; data[1][1] = 0.0; dataFull.add(data); } // The first class that appears in the graph is only partially included else { Sample data(3, 2); data[0][0] = xMin; data[0][1] = height_[indexLeft]; data[1][0] = first_ + cumulatedWidth_[indexLeft]; data[1][1] = data[0][1]; data[2][0] = data[1][0]; data[2][1] = 0.0; dataFull.add(data); shiftFull = 1; } // Central part of the graph Scalar startX = first_; if (indexLeft + shiftFull > 0) startX += cumulatedWidth_[indexLeft + shiftFull]; for (UnsignedInteger i = indexLeft + shiftFull; i < indexRight; ++i) { Sample data(4, 2); data[0][0] = startX; data[0][1] = 0.0; data[1][0] = startX; data[1][1] = height_[i]; startX += width_[i]; data[2][0] = startX; data[2][1] = height_[i]; data[3][0] = startX; data[3][1] = 0.0; dataFull.add(data); } // The last class is completely included if (indexRight == size) { Sample data(2, 2); data[0][0] = first_ + cumulatedWidth_[size - 1]; data[0][1] = 0.0; data[1][0] = xMax; data[1][1] = 0.0; dataFull.add(data); } // The last class that appears in the graph is only partially included else { Sample data(3, 2); data[0][0] = first_ + cumulatedWidth_[indexRight - 1]; data[0][1] = 0.0; data[1][0] = data[0][0]; data[1][1] = height_[indexRight]; data[2][0] = xMax; data[2][1] = height_[indexRight]; dataFull.add(data); } Curve curve(dataFull, "red", "solid", 2, ""); curve.setLegend(title); graphPDF.add(curve); Point bb(graphPDF.getBoundingBox()); bb[3] *= 1.1; graphPDF.setBoundingBox(bb); return graphPDF; } /* Method save() stores the object through the StorageManager */ void Histogram::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "first_", first_); adv.saveAttribute( "width_", width_); adv.saveAttribute( "height_", height_); adv.saveAttribute( "cumulatedWidth_", cumulatedWidth_); adv.saveAttribute( "cumulatedSurface_", cumulatedSurface_); } /* Method load() reloads the object from the StorageManager */ void Histogram::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "first_", first_); adv.loadAttribute( "width_", width_); adv.loadAttribute( "height_", height_); adv.loadAttribute( "cumulatedWidth_", cumulatedWidth_); adv.loadAttribute( "cumulatedSurface_", cumulatedSurface_); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/HistogramFactory.cxx000066400000000000000000000161361307543307100257640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Histogram distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/HistogramFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(HistogramFactory); static const Factory Factory_HistogramFactory; /* Default constructor */ HistogramFactory::HistogramFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ HistogramFactory * HistogramFactory::clone() const { return new HistogramFactory(*this); } /* Here is the interface that all derived class must implement */ HistogramFactory::Implementation HistogramFactory::build(const Sample & sample) const { return buildAsHistogram(sample).clone(); } HistogramFactory::Implementation HistogramFactory::build(const Sample & sample, const Scalar bandwidth) const { return buildAsHistogram(sample, bandwidth).clone(); } HistogramFactory::Implementation HistogramFactory::build(const Sample & sample, const UnsignedInteger binNumber) const { return buildAsHistogram(sample, binNumber).clone(); } HistogramFactory::Implementation HistogramFactory::build() const { return buildAsHistogram().clone(); } Histogram HistogramFactory::buildAsHistogram(const Sample & sample) const { return buildAsHistogram(sample, computeSilvermanBandwidth(sample)); } Histogram HistogramFactory::buildAsHistogram(const Sample & sample, const Scalar bandwidth) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an Histogram based on an empty sample."; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build an Histogram only if dimension equals 1, here dimension=" << sample.getDimension(); if (!(bandwidth > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected a positive bandwidth, got bandwidth=" << bandwidth; // Construct the histogram // It will extends from min to max. const Scalar min = sample.getMin()[0]; const Scalar max = sample.getMax()[0]; if (!SpecFunc::IsNormal(min) || !SpecFunc::IsNormal(max)) throw InvalidArgumentException(HERE) << "Error: cannot build an Histogram distribution if data contains NaN or Inf"; if (max == min) { Histogram result(min - 0.5 * bandwidth, Point(1, bandwidth), Point(1, 1.0)); result.setDescription(sample.getDescription()); return result; } const UnsignedInteger binNumber = static_cast(ceil((max - min) / bandwidth + 0.5)); return buildAsHistogram(sample, binNumber); } Histogram HistogramFactory::buildAsHistogram(const Sample & sample, const UnsignedInteger binNumber) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an Histogram based on an empty sample."; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build an Histogram only if dimension equals 1, here dimension=" << sample.getDimension(); if (binNumber == 0) throw InvalidArgumentException(HERE) << "Error: expected a positive number of bin, got 0."; // Construct the histogram // It will extends from min to max. const Scalar min = sample.getMin()[0]; const Scalar max = sample.getMax()[0]; if (!SpecFunc::IsNormal(min) || !SpecFunc::IsNormal(max)) throw InvalidArgumentException(HERE) << "Error: cannot build an Histogram distribution if data contains NaN or Inf"; if (max == min) { const Scalar epsilon = ResourceMap::GetAsScalar("Distribution-DefaultCDFEpsilon"); const Scalar delta = std::max(std::abs(min), 10.0) * epsilon; Histogram result(min - 0.5 * delta, Point(1, delta), Point(1, 1.0)); result.setDescription(sample.getDescription()); return result; } // Adjust the bin with in order to match the bin number. Add a small adjustment in order to have bins defined as [x_k, x_k+1[ intervals const Scalar delta = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon") * (max - min); const Scalar hOpt = ((max - min) + delta) / binNumber; Point heights(binNumber, 0.0); const Scalar step = 1.0 / hOpt; // Aggregate the realizations into the bins for(UnsignedInteger i = 0; i < size; ++i) { // The index takes values in [[0, binNumber-1]] because min <= sample[i][0] <= max and step < binNumber / (max - min) const UnsignedInteger index = static_cast(floor((sample[i][0] - min) * step)); heights[index] += 1.0; } const Scalar inverseArea = 1.0 / (hOpt * size); Histogram result(min, Point(binNumber, hOpt), heights * inverseArea); result.setDescription(sample.getDescription()); return result; } Histogram HistogramFactory::buildAsHistogram() const { return Histogram(); } /* Compute the bandwidth according to Silverman's rule */ Scalar HistogramFactory::computeSilvermanBandwidth(const Sample & sample, const Bool useQuantile) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot compute the Silverman bandwidth based on an empty sample."; Scalar hOpt = 0; if (useQuantile) { // We use the robust estimation of dispersion based on inter-quartile hOpt = (sample.computeQuantilePerComponent(0.75)[0] - sample.computeQuantilePerComponent(0.25)[0]) * std::pow(24.0 * std::sqrt(M_PI) / size, 1.0 / 3.0) / (2.0 * DistFunc::qNormal(0.75)); // If the resulting bandwidth is zero it is because a majority of values are repeated in the sample if (hOpt == 0.0) LOGWARN(OSS() << "The first and third quartiles are equal, which means that many values are repeated in the given sample. Switch to the standard deviation-based Silverman bandwidth."); } // Here hOpt == 0.0 either because we asked for the standard deviation based bandwidth or because the quantile based bandwidth is zero if (hOpt == 0.0) { // We use the standard deviation hOpt = sample.computeStandardDeviationPerComponent()[0] * std::pow(24.0 * std::sqrt(M_PI) / size, 1.0 / 3.0); // If we get zero it is due to a constant sample if (hOpt == 0.0) LOGWARN(OSS() << "All the values are equal in the given sample. We switch to a bandwidth equal to QuantileEpsilon."); hOpt = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); } return hOpt; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/IndependentCopula.cxx000066400000000000000000000311331307543307100260720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements an independent copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/IndependentCopula.hxx" #include "openturns/Normal.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/NatafIndependentCopulaEvaluation.hxx" #include "openturns/NatafIndependentCopulaGradient.hxx" #include "openturns/NatafIndependentCopulaHessian.hxx" #include "openturns/InverseNatafIndependentCopulaEvaluation.hxx" #include "openturns/InverseNatafIndependentCopulaGradient.hxx" #include "openturns/InverseNatafIndependentCopulaHessian.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(IndependentCopula); static const Factory Factory_IndependentCopula; /* Default constructor */ IndependentCopula::IndependentCopula(const UnsignedInteger dimension) : CopulaImplementation() { setName( "IndependentCopula" ); setDimension(dimension); computeRange(); } /* Comparison operator */ Bool IndependentCopula::operator ==(const IndependentCopula & other) const { if (this == &other) return true; return getDimension() == other.getDimension(); } Bool IndependentCopula::equals(const DistributionImplementation & other) const { const IndependentCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String IndependentCopula::__repr__() const { OSS oss(true); oss << "class=" << IndependentCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } /* String converter */ String IndependentCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(dimension = " << getDimension() << ")"; return oss; } /* Virtual constructor */ IndependentCopula * IndependentCopula::clone() const { return new IndependentCopula(*this); } /* Get one realization of the distribution */ Point IndependentCopula::getRealization() const { return RandomGenerator::Generate(getDimension()); } /* Get the DDF of the distribution */ Point IndependentCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return Point(dimension, 0.0); } /* Compute the probability content of an interval */ Scalar IndependentCopula::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); // Reduce the given interval to the support of the distribution, which is the nD unit cube const Interval intersect(interval.intersect(Interval(dimension))); // If the intersection is empty if (intersect.isNumericallyEmpty()) return 0.0; const Point lower(intersect.getLowerBound()); const Point upper(intersect.getUpperBound()); Scalar value = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { value *= upper[i] - lower[i]; } return value; } /* Get the PDF of the distribution */ Scalar IndependentCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); for (UnsignedInteger i = 0; i < dimension; i++) { Scalar x = point[i]; // If one component is outside of the support, the PDF is null if ((x <= 0.0) || (x >= 1.0)) return 0.0; } // The point is in the support return 1.0; } /* Get the CDF of the distribution */ Scalar IndependentCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar value = 1.0; for (UnsignedInteger i = 0; i < dimension; i++) { Scalar x = point[i]; // If one component is at the left of the support of its matginal distribution, the CDF is null if (x <= 0.0) return 0.0; // If the component is inside of the support, multiply the value of the CDF by x // FIXME if (x < 1.0) value *= x; } return value; } /* Get the survival function of the distribution */ Scalar IndependentCopula::computeSurvivalFunction(const Point & point) const { return computeCDF(Point(getDimension(), 1.0) - point); } /* Get the Kendall concordance of the distribution */ CorrelationMatrix IndependentCopula::getKendallTau() const { return IdentityMatrix(getDimension()); } /* Get the PDF gradient of the distribution */ Point IndependentCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return Point(0, 0.0); } /* Get the CDF gradient of the distribution */ Point IndependentCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return Point(0, 0.0); } /* Get the quantile of the distribution */ Point IndependentCopula::computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const { if (!(prob < 0.0 || prob <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; const Scalar q = tail ? 1.0 - prob : prob; marginalProb = std::pow(q, 1.0 / dimension_); if (q == 0.0) return Point(dimension_, 0.0); if (q == 1.0) return Point(dimension_, 1.0); return Point(dimension_, marginalProb); } /** Get the product minimum volume interval containing a given probability of the distribution */ Interval IndependentCopula::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb); } /** Get the product bilateral confidence interval containing a given probability of the distribution */ Interval IndependentCopula::computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { marginalProb = std::pow(prob, 1.0 / dimension_); return Interval(Point(dimension_, 0.5 * (1.0 - marginalProb)), Point(dimension_, 0.5 * (1.0 + marginalProb))); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet IndependentCopula::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const Description inVars(Description::BuildDefault(dimension_, "x")); OSS formula; formula << "2*max(abs(" << inVars[0] << "-0.5"; for (UnsignedInteger i = 1; i < dimension_; ++i) formula << "),abs(" << inVars[i] << "-0.5"; formula << "))"; threshold = std::pow(prob, 1.0 / dimension_); return LevelSet(SymbolicFunction(inVars, Description(1, formula)), threshold); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ IndependentCopula::Implementation IndependentCopula::getMarginal(const Indices & indices) const { UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // General case return new IndependentCopula(indices.getSize()); } /* Compute the covariance of the distribution */ void IndependentCopula::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; i++) covariance_(i, i) = 1.0 / 12.0; isAlreadyComputedCovariance_ = true; } /* Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar IndependentCopula::computeConditionalDDF(const Scalar x, const Point & y) const { return 0.0; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar IndependentCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; if (x < 0.0) return 0.0; if (x < 1.0) return 1.0; return 0.0; } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar IndependentCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if (x < 0.0) return 0.0; if (x < 1.0) return x; return 1.0; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar IndependentCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; return q; } /* Get the isoprobabilist transformation */ IndependentCopula::IsoProbabilisticTransformation IndependentCopula::getIsoProbabilisticTransformation() const { IsoProbabilisticTransformation transformation; transformation.setEvaluation(new NatafIndependentCopulaEvaluation(getDimension())); transformation.setGradient(new NatafIndependentCopulaGradient(getDimension())); transformation.setHessian(new NatafIndependentCopulaHessian(getDimension())); return transformation; } /* Get the inverse isoprobabilistic transformation */ IndependentCopula::InverseIsoProbabilisticTransformation IndependentCopula::getInverseIsoProbabilisticTransformation() const { InverseIsoProbabilisticTransformation transformation; transformation.setEvaluation(new InverseNatafIndependentCopulaEvaluation(getDimension())); transformation.setGradient(new InverseNatafIndependentCopulaGradient(getDimension())); transformation.setHessian(new InverseNatafIndependentCopulaHessian(getDimension())); return transformation; } /* Tell if the distribution is elliptical */ Bool IndependentCopula::isElliptical() const { return dimension_ == 1; } /* Tell if the distribution has elliptical copula */ Bool IndependentCopula::hasEllipticalCopula() const { return true; } /* Tell if the distribution has independent copula */ Bool IndependentCopula::hasIndependentCopula() const { return true; } /* Method save() stores the object through the StorageManager */ void IndependentCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void IndependentCopula::load(Advocate & adv) { CopulaImplementation::load(adv); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/InverseChiSquare.cxx000066400000000000000000000275141307543307100257210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseChiSquare.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseChiSquare); static const Factory Factory_InverseChiSquare; /* Default constructor */ InverseChiSquare::InverseChiSquare() : ContinuousDistribution() , nu_(1.0) , normalizationFactor_(0.0) { setName("InverseChiSquare"); setDimension(1); computeRange(); } /* Parameters constructor */ InverseChiSquare::InverseChiSquare(const Scalar nu) : ContinuousDistribution() , nu_(0.0) , normalizationFactor_(0.0) { setName("InverseChiSquare"); setNu(nu); setDimension(1); } /* Comparison operator */ Bool InverseChiSquare::operator ==(const InverseChiSquare & other) const { if (this == &other) return true; return nu_ == other.nu_; } Bool InverseChiSquare::equals(const DistributionImplementation & other) const { const InverseChiSquare* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String InverseChiSquare::__repr__() const { OSS oss; oss << "class=" << InverseChiSquare::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_; return oss; } String InverseChiSquare::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(nu = " << nu_ << ")"; return oss; } /* K accessor */ void InverseChiSquare::setNu(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be positive"; if (nu != nu_) { nu_ = nu; computeRange(); update(); } } Scalar InverseChiSquare::getNu() const { return nu_; } /* Virtual constructor */ InverseChiSquare * InverseChiSquare::clone() const { return new InverseChiSquare(*this); } /* Compute the numerical range of the distribution given the parameters values */ void InverseChiSquare::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /** Update the derivative attributes */ void InverseChiSquare::update() { // For large k we use the following normalization factor: // normalizationFactor = log(2*k^{k-1}/Gamma(k)) // = log(2) + (k+1)log(k) - log(Gamma(k)) // which is expanded wrt k const Scalar k = 0.5 * nu_; if (k >= 6.9707081224932495879) { static const Scalar alpha[10] = {0.91893853320467274177, 0.83333333333333333333e-1, -0.27777777777777777778e-2, 0.79365079365079365079e-3, -0.59523809523809523810e-3, 0.84175084175084175084e-3, -0.19175269175269175269e-2, 0.64102564102564102564e-2, -0.29550653594771241830e-1, 0.17964437236883057316}; const Scalar ik = 1.0 / k; const Scalar ik2 = ik * ik; normalizationFactor_ = std::log(2.0) + k + 1.5 * std::log(k) - (alpha[0] + ik * (alpha[1] + ik2 * (alpha[2] + ik2 * (alpha[3] + ik2 * (alpha[4] + ik2 * (alpha[5] + ik2 * (alpha[6] + ik2 * (alpha[7] + ik2 * (alpha[8] + ik2 * alpha[9]))))))))); } // For small k, the normalization factor is: // normalizationFactor = log(2/Gamma(k)) // = log(2) - log(Gamma(k)) else normalizationFactor_ = std::log(2.0) - SpecFunc::LnGamma(k); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point InverseChiSquare::getRealization() const { return Point(1, 1.0 / (2.0 * DistFunc::rGamma(0.5 * nu_))); } /* Get the DDF of the distribution */ Point InverseChiSquare::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return Point(1, 0.0); return Point(1, (1.0 / (2.0 * x) - (0.5 * nu_ + 1.0)) * computePDF(point) / x); } /* Get the PDF of the distribution */ Scalar InverseChiSquare::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar InverseChiSquare::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); // From textbook, we have log(PDF(x)) = log(lambda)-log(Gamma(k))-(k+1)*log(lambda*x)-1/(lambda*x) const Scalar u = 2.0 * point[0]; if (u <= 0.0) return SpecFunc::LogMinScalar; // Use asymptotic expansion for large k // Here log(PDF(x)) = L - (k-1)*log(k)-(k+1)*log(2*x)-1/(2*x) const Scalar k = 0.5 * nu_; if (k >= 6.9707081224932495879) return normalizationFactor_ - (k + 1.0) * std::log(k * u) - 1.0 / u; return normalizationFactor_ - (k + 1.0) * std::log(u) - 1.0 / u; } /* Get the CDF of the distribution */ Scalar InverseChiSquare::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all k if (x <= 0.0) return 0.0; return DistFunc::pGamma(0.5 * nu_, 0.5 / x, true); } Scalar InverseChiSquare::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all k if (x <= 0.0) return 1.0; return DistFunc::pGamma(0.5 * nu_, 0.5 / x); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex InverseChiSquare::computeCharacteristicFunction(const Scalar x) const { return DistributionImplementation::computeCharacteristicFunction(x); } Complex InverseChiSquare::computeLogCharacteristicFunction(const Scalar x) const { return DistributionImplementation::computeLogCharacteristicFunction(x); } /* Get the PDFGradient of the distribution */ Point InverseChiSquare::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(2); const Scalar x = point[0]; if (x <= 0.0) return pdfGradient; const Scalar pdf = computePDF(point); pdfGradient[0] = -(std::log(2.0) + std::log(x) + SpecFunc::DiGamma(0.5 * nu_)) * pdf; pdfGradient[1] = 0.5 * (0.5 / x - nu_) * pdf; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point InverseChiSquare::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(2, 0.0); const Scalar x = point[0]; if (x <= 0.0) return cdfGradient; const Scalar lambdaXInverse = 0.5 / x; const Scalar pdf = computePDF(x); const Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); cdfGradient[0] = (DistFunc::pGamma(0.5 * nu_ + eps, lambdaXInverse, true) - DistFunc::pGamma(0.5 * nu_ - eps, lambdaXInverse, true)) / (2.0 * eps); cdfGradient[1] = 0.5 * pdf * x; return cdfGradient; } /* Get the quantile of the distribution */ Scalar InverseChiSquare::computeScalarQuantile(const Scalar prob, const Bool tail) const { return 0.5 / DistFunc::qGamma(0.5 * nu_, prob, !tail); } /* Compute the mean of the distribution */ void InverseChiSquare::computeMean() const { if (!(nu_ > 2.0)) throw NotDefinedException(HERE) << "InverseChiSquare mean is defined only for nu > 2, here nu=" << nu_; mean_ = Point(1, 1.0 / (nu_ - 2.0)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point InverseChiSquare::getStandardDeviation() const { if (!(nu_ > 4.0)) throw NotDefinedException(HERE) << "InverseChiSquare standard deviation is defined only for nu > 4, here nu=" << nu_; return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point InverseChiSquare::getSkewness() const { if (!(nu_ > 6.0)) throw NotDefinedException(HERE) << "InverseChiSquare skewness is defined only for nu > 6, here nu=" << nu_; return Point(1, 8.0 * std::sqrt(0.5 * nu_ - 2.0) / (nu_ - 6.0)); } /* Get the kurtosis of the distribution */ Point InverseChiSquare::getKurtosis() const { if (!(nu_ > 8.0)) throw NotDefinedException(HERE) << "InverseChiSquare kurtosis is defined only for nu > 8, here nu=" << nu_; return Point(1, 12.0 * (0.5 * nu_ * (0.5 * nu_ + 3.0) - 10.0) / ((nu_ - 6.0) * (nu_ - 8.0))); } /* Get the moments of the standardized distribution */ Point InverseChiSquare::getStandardMoment(const UnsignedInteger n) const { if (nu_ <= 2.0 * n) throw NotDefinedException(HERE) << "InverseChiSquare standard moment of order " << 2.0 * n << " is defined only for nu > " << 2.0 * n << ", here k=" << nu_; return Point(1, std::exp(SpecFunc::LogGamma(0.5 * nu_ - n) - SpecFunc::LogGamma(0.5 * nu_))); } /* Get the standard representative in the parametric family, associated with the standard moments */ InverseChiSquare::Implementation InverseChiSquare::getStandardRepresentative() const { return InverseChiSquare(nu_).clone(); } /* Compute the covariance of the distribution */ void InverseChiSquare::computeCovariance() const { if (!(nu_ > 4.0)) throw NotDefinedException(HERE) << "InverseChiSquare covariance is defined only for nu > 4, here nu=" << nu_; covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 2.0 / ((nu_ - 2.0) * (nu_ - 2.0) * (nu_ - 4.0)); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point InverseChiSquare::getParameter() const { return Point(1, nu_); } void InverseChiSquare::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = InverseChiSquare(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description InverseChiSquare::getParameterDescription() const { return Description(1, "nu"); } /* Method save() stores the object through the StorageManager */ void InverseChiSquare::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void InverseChiSquare::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/InverseGamma.cxx000066400000000000000000000312741307543307100250550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseGamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseGamma.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseGamma); static const Factory Factory_InverseGamma; /* Default constructor */ InverseGamma::InverseGamma() : ContinuousDistribution() , k_(1.0) , lambda_(1.0) , normalizationFactor_(0.0) { setName("InverseGamma"); setDimension(1); computeRange(); } /* Parameters constructor */ InverseGamma::InverseGamma(const Scalar k, const Scalar lambda) : ContinuousDistribution() , k_(0.0) , lambda_(0.0) , normalizationFactor_(0.0) { setName("InverseGamma"); setKLambda(k, lambda); setDimension(1); } /* Comparison operator */ Bool InverseGamma::operator ==(const InverseGamma & other) const { if (this == &other) return true; return (k_ == other.k_) && (lambda_ == other.lambda_); } Bool InverseGamma::equals(const DistributionImplementation & other) const { const InverseGamma* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String InverseGamma::__repr__() const { OSS oss; oss << "class=" << InverseGamma::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " k=" << k_ << " lambda=" << lambda_; return oss; } String InverseGamma::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(k = " << k_ << ", lambda = " << lambda_ << ")"; return oss; } /* K accessor */ void InverseGamma::setK(const Scalar k) { if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (k != k_) { k_ = k; computeRange(); update(); } } Scalar InverseGamma::getK() const { return k_; } /* Lambda accessor */ void InverseGamma::setLambda(const Scalar lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if (lambda != lambda_) { lambda_ = lambda; computeRange(); update(); } } Scalar InverseGamma::getLambda() const { return lambda_; } /* K and lambda accessor */ void InverseGamma::setKLambda(const Scalar k, const Scalar lambda) { if (!(k > 0.0)) throw InvalidArgumentException(HERE) << "K MUST be positive"; if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if ((k != k_) || (lambda != lambda_)) { k_ = k; lambda_ = lambda; computeRange(); update(); } } /* Virtual constructor */ InverseGamma * InverseGamma::clone() const { return new InverseGamma(*this); } /* Compute the numerical range of the distribution given the parameters values */ void InverseGamma::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /** Update the derivative attributes */ void InverseGamma::update() { // For large k we use the following normalization factor: // normalizationFactor = log(lambda*k^{k-1}/Gamma(k)) // = log(lambda) + (k+1)log(k) - log(Gamma(k)) // which is expanded wrt k if (k_ >= 6.9707081224932495879) { static const Scalar alpha[10] = {0.91893853320467274177, 0.83333333333333333333e-1, -0.27777777777777777778e-2, 0.79365079365079365079e-3, -0.59523809523809523810e-3, 0.84175084175084175084e-3, -0.19175269175269175269e-2, 0.64102564102564102564e-2, -0.29550653594771241830e-1, 0.17964437236883057316}; const Scalar ik = 1.0 / k_; const Scalar ik2 = ik * ik; normalizationFactor_ = std::log(lambda_) + k_ + 1.5 * std::log(k_) - (alpha[0] + ik * (alpha[1] + ik2 * (alpha[2] + ik2 * (alpha[3] + ik2 * (alpha[4] + ik2 * (alpha[5] + ik2 * (alpha[6] + ik2 * (alpha[7] + ik2 * (alpha[8] + ik2 * alpha[9]))))))))); } // For small k, the normalization factor is: // normalizationFactor = log(lambda/Gamma(k)) // = log(lambda) - log(Gamma(k)) else normalizationFactor_ = std::log(lambda_) - SpecFunc::LnGamma(k_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } /* Get one realization of the distribution */ Point InverseGamma::getRealization() const { return Point(1, 1.0 / (lambda_ * DistFunc::rGamma(k_))); } /* Get the DDF of the distribution */ Point InverseGamma::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return Point(1, 0.0); return Point(1, (1.0 / (lambda_ * x) - (k_ + 1.0)) * computePDF(point) / x); } /* Get the PDF of the distribution */ Scalar InverseGamma::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar InverseGamma::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); // From textbook, we have log(PDF(x)) = log(lambda)-log(Gamma(k))-(k+1)*log(lambda*x)-1/(lambda*x) const Scalar u = lambda_ * point[0]; if (u <= 0.0) return SpecFunc::LogMinScalar; // Use asymptotic expansion for large k // Here log(PDF(x)) = L - (k-1)*log(k)-(k+1)*log(lambda*x)-1/(lambda*x) if (k_ >= 6.9707081224932495879) return normalizationFactor_ - (k_ + 1.0) * std::log(k_ * u) - 1.0 / u; return normalizationFactor_ - (k_ + 1.0) * std::log(u) - 1.0 / u; } /* Get the CDF of the distribution */ Scalar InverseGamma::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all k_ if (x <= 0.0) return 0.0; return DistFunc::pGamma(k_, 1.0 / (lambda_ * x), true); } Scalar InverseGamma::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; // No test here as the CDF is continuous for all k_ if (x <= 0.0) return 1.0; return DistFunc::pGamma(k_, 1.0 / (lambda_ * x)); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex InverseGamma::computeCharacteristicFunction(const Scalar x) const { return DistributionImplementation::computeCharacteristicFunction(x); } Complex InverseGamma::computeLogCharacteristicFunction(const Scalar x) const { return DistributionImplementation::computeLogCharacteristicFunction(x); } /* Get the PDFGradient of the distribution */ Point InverseGamma::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(2); const Scalar x = point[0]; if (x <= 0.0) return pdfGradient; const Scalar pdf = computePDF(point); pdfGradient[0] = -(std::log(lambda_) + std::log(x) + SpecFunc::DiGamma(k_)) * pdf; pdfGradient[1] = (1.0 / (lambda_ * x) - k_) * pdf / lambda_; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point InverseGamma::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(2, 0.0); const Scalar x = point[0]; if (x <= 0.0) return cdfGradient; const Scalar lambdaXInverse = 1.0 / (lambda_ * x); const Scalar pdf = computePDF(x); const Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); cdfGradient[0] = (DistFunc::pGamma(k_ + eps, lambdaXInverse, true) - DistFunc::pGamma(k_ - eps, lambdaXInverse, true)) / (2.0 * eps); cdfGradient[1] = pdf * x / lambda_; return cdfGradient; } /* Get the quantile of the distribution */ Scalar InverseGamma::computeScalarQuantile(const Scalar prob, const Bool tail) const { return 1.0 / (lambda_ * DistFunc::qGamma(k_, prob, !tail)); } /* Compute the mean of the distribution */ void InverseGamma::computeMean() const { if (!(k_ > 1.0)) throw NotDefinedException(HERE) << "InverseGamma mean is defined only for k > 1, here k=" << k_; mean_ = Point(1, 1.0 / (lambda_ * (k_ - 1.0))); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point InverseGamma::getStandardDeviation() const { if (!(k_ > 2.0)) throw NotDefinedException(HERE) << "InverseGamma standard deviation is defined only for k > 2, here k=" << k_; return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point InverseGamma::getSkewness() const { if (!(k_ > 3.0)) throw NotDefinedException(HERE) << "InverseGamma skewness is defined only for k > 3, here k=" << k_; return Point(1, 4.0 * std::sqrt(k_ - 2.0) / (k_ - 3.0)); } /* Get the kurtosis of the distribution */ Point InverseGamma::getKurtosis() const { if (!(k_ > 4.0)) throw NotDefinedException(HERE) << "InverseGamma kurtosis is defined only for k > 4, here k=" << k_; return Point(1, 3.0 * (k_ * (k_ + 3.0) - 10.0) / ((k_ - 3.0) * (k_ - 4.0))); } /* Get the moments of the standardized distribution */ Point InverseGamma::getStandardMoment(const UnsignedInteger n) const { if (k_ <= n) throw NotDefinedException(HERE) << "InverseGamma standard moment of order " << n << " is defined only for k > " << n << ", here k=" << k_; return Point(1, std::exp(SpecFunc::LogGamma(k_ - n) - SpecFunc::LogGamma(k_))); } /* Get the standard representative in the parametric family, associated with the standard moments */ InverseGamma::Implementation InverseGamma::getStandardRepresentative() const { return InverseGamma(k_, 1.0).clone(); } /* Compute the covariance of the distribution */ void InverseGamma::computeCovariance() const { if (!(k_ > 2.0)) throw NotDefinedException(HERE) << "InverseGamma covariance is defined only for k > 2, here k=" << k_; covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 1.0 / (lambda_ * lambda_ * (k_ - 1.0) * (k_ - 1.0) * (k_ - 2.0)); isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ Point InverseGamma::getParameter() const { Point point(2); point[0] = k_; point[1] = lambda_; return point; } void InverseGamma::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 parameters, got " << parameter.getSize(); const Scalar w = getWeight(); *this = InverseGamma(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description InverseGamma::getParameterDescription() const { Description description(2); description[0] = "k"; description[1] = "lambda"; return description; } /* Method save() stores the object through the StorageManager */ void InverseGamma::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "k_", k_ ); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void InverseGamma::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "k_", k_ ); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/InverseNormal.cxx000066400000000000000000000225311307543307100252570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseNormal.hxx" #include "openturns/DistFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseNormal); static const Factory Factory_InverseNormal; /* Default constructor */ InverseNormal::InverseNormal() : ContinuousDistribution() , lambda_(1.0) , mu_(1.0) { setName( "InverseNormal" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ InverseNormal::InverseNormal(const Scalar lambda, const Scalar mu) : ContinuousDistribution() , lambda_(0.0) , mu_(0.0) { setName( "InverseNormal" ); // This call set also the range setLambdaMu(lambda, mu); setDimension( 1 ); } /* Comparison operator */ Bool InverseNormal::operator ==(const InverseNormal & other) const { if (this == &other) return true; return (lambda_ == other.lambda_) && (mu_ == other.mu_); } Bool InverseNormal::equals(const DistributionImplementation & other) const { const InverseNormal* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String InverseNormal::__repr__() const { OSS oss(true); oss << "class=" << InverseNormal::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lambda=" << lambda_ << " mu=" << mu_; return oss; } String InverseNormal::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(lambda = " << lambda_ << ", mu = " << mu_ << ")"; return oss; } /* Virtual constructor */ InverseNormal * InverseNormal::clone() const { return new InverseNormal(*this); } /* Get one realization of the distribution */ Point InverseNormal::getRealization() const { const Scalar nu = DistFunc::rNormal(); const Scalar y = nu * nu; const Scalar w = mu_ * y / lambda_; // Lower bound computed by Maple to insure double precision const Scalar x = w < 5.015e5 ? mu_ * (1.0 + 0.5 * w * (1.0 - std::sqrt(1.0 + 4.0 / w))) : mu_ * ((5.0 / w - 2.0) / w + 1.0) / w; const Scalar z = RandomGenerator::Generate(); if (z * (mu_ + x) <= mu_) return Point(1, x); return Point(1, mu_ * mu_ / x); } /* Get the PDF of the distribution */ Scalar InverseNormal::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; return std::sqrt(lambda_ / (2.0 * M_PI * x * x * x)) * std::exp(- lambda_ * (x - mu_) * (x - mu_) / (2.0 * x * mu_ * mu_)); } Scalar InverseNormal::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; return 0.5 * ( std::log(lambda_) - std::log(2.0 * M_PI * x * x * x)) - lambda_ * (x - mu_) * (x - mu_) / (2.0 * x * mu_ * mu_); } /* Get the CDF of the distribution */ Scalar InverseNormal::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; const Scalar lx = std::sqrt(lambda_ / x); const Scalar phiArg1 = lx * ( x / mu_ - 1.0); // Quick return if in the far right tail. The pNormal() function is constant // equal to 1 in double precision for argument greater than 8.24, and the // InverseNormal CDF is greater than pNormal() if (phiArg1 > 8.24) return 1.0; const Scalar phiArg2 = -lx * ( x / mu_ + 1.0); return DistFunc::pNormal(phiArg1) + std::exp(2.0 * lambda_ / mu_ + std::log(DistFunc::pNormal(phiArg2))); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet InverseNormal::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const Interval interval(computeMinimumVolumeInterval(prob)); Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); Scalar minusLogPDFThreshold = -computeLogPDF(interval.getLowerBound()[0]); threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex InverseNormal::computeCharacteristicFunction(const Scalar x) const { if (std::abs(x) < pdfEpsilon_) return 1.0; return std::exp(computeLogCharacteristicFunction(x)); } Complex InverseNormal::computeLogCharacteristicFunction(const Scalar x) const { if (std::abs(x) < pdfEpsilon_) return 0.0; const Complex logCF(lambda_ * (1.0 - std::sqrt(Complex(1.0, - 2.0 * mu_ * mu_ * x / lambda_))) / mu_); return logCF; } /* Compute the numerical range of the distribution given the parameters values */ void InverseNormal::computeRange() { const Point lowerBound(1, 0.0); const Scalar q = DistFunc::qNormal(cdfEpsilon_, true); const Point upperBound(1, 2.0 * lambda_ * mu_ / (2.0 * lambda_ + mu_ * q * q - q * std::sqrt(mu_ * (q * q * mu_ + 4.0 * lambda_)))); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Compute the mean of the distribution */ void InverseNormal::computeMean() const { mean_ = Point(1, mu_); isAlreadyComputedMean_ = true; } /* Compute the mean of the distribution */ void InverseNormal::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = mu_ * mu_ * mu_ / lambda_; isAlreadyComputedCovariance_ = true; } /* Get the standard deviation of the distribution */ Point InverseNormal::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point InverseNormal::getSkewness() const { return Point(1, 3.0 * std::sqrt(mu_ / lambda_)); } /* Get the kurtosis of the distribution */ Point InverseNormal::getKurtosis() const { return Point(1, 3.0 + 15.0 * mu_ / lambda_); } /* Get the moments of the standardized distribution */ Point InverseNormal::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); Scalar moment = 1.0; Scalar rho = 0.5 * mu_ / lambda_; Scalar product = 1.0; for (UnsignedInteger k = 1; k < n; ++k) { product *= (n - k) * (n + k - 1) * rho / k; moment += product; } return Point(1, std::pow(mu_, static_cast(n)) * moment); } /* Interface specific to InverseNormal */ void InverseNormal::setLambdaMu(const Scalar lambda, const Scalar mu) { if ( (lambda <= 0.0) || (mu <= 0.0) ) throw InvalidArgumentException(HERE) << "lambda and mu MUST be positive"; if ((lambda_ != lambda) || (mu_ != mu)) { lambda_ = lambda; mu_ = mu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* lambda accessor */ Scalar InverseNormal::getLambda() const { return lambda_; } /* mu accessor */ Scalar InverseNormal::getMu() const { return mu_; } /* Parameters value accessor */ Point InverseNormal::getParameter() const { Point point(2); point[0] = lambda_; point[1] = mu_; return point; } void InverseNormal::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = InverseNormal(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description InverseNormal::getParameterDescription() const { Description description(2); description[0] = "lambda"; description[1] = "mu"; return description; } /* Method save() stores the object through the StorageManager */ void InverseNormal::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "mu_", mu_ ); } /* Method load() reloads the object from the StorageManager */ void InverseNormal::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "mu_", mu_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/InverseNormalFactory.cxx000066400000000000000000000067321307543307100266140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for InverseNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseNormalFactory.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseNormalFactory); static const Factory Factory_InverseNormalFactory; /* Default constructor */ InverseNormalFactory::InverseNormalFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ InverseNormalFactory * InverseNormalFactory::clone() const { return new InverseNormalFactory(*this); } /* Here is the interface that all derived class must implement */ InverseNormalFactory::Implementation InverseNormalFactory::build(const Sample & sample) const { return buildAsInverseNormal(sample).clone(); } InverseNormalFactory::Implementation InverseNormalFactory::build(const Point & parameters) const { return buildAsInverseNormal(parameters).clone(); } InverseNormalFactory::Implementation InverseNormalFactory::build() const { return buildAsInverseNormal().clone(); } InverseNormal InverseNormalFactory::buildAsInverseNormal(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an InverseNormal distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot build an InverseNormal distribution from a sample of dimension different from 1"; const Scalar mu = sample.computeMean()[0]; Scalar lambda = -1.0; if (ResourceMap::Get("InverseNormalFactory-Method") == "MLE") // Maximum likelihood estimation { Scalar sum = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar xI = sample[i][0]; if (!(xI > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot build an InverseNormal distribution from a sample with non positive values"; sum += 1.0 / sample[i][0]; } lambda = 1.0 / (sum / size - 1.0 / mu); } // Moments estimation else lambda = std::pow(mu, 3) / sample.computeCovariance()(0, 0); InverseNormal result(lambda, mu); result.setDescription(sample.getDescription()); return result; } InverseNormal InverseNormalFactory::buildAsInverseNormal(const Point & parameters) const { try { InverseNormal distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a InverseNormal distribution from the given parameters"; } } InverseNormal InverseNormalFactory::buildAsInverseNormal() const { return InverseNormal(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/InverseWishart.cxx000066400000000000000000000344511307543307100254540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseWishart distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/InverseWishart.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ChiSquare.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(InverseWishart); static const Factory Factory_InverseWishart; /* Default constructor */ InverseWishart::InverseWishart() : ContinuousDistribution() , cholesky_() , nu_(1.0) { setName("InverseWishart"); setV(CovarianceMatrix(1)); computeRange(); update(); } /* Parameters constructor */ InverseWishart::InverseWishart(const CovarianceMatrix & v, const Scalar nu) : ContinuousDistribution() , cholesky_() , nu_(-1.0) // implies nu_ != nu: see setNu { setName("InverseWishart"); if (nu + 1 <= v.getDimension()) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << "is not greater than dimension-1=" << static_cast< SignedInteger > (v.getDimension()) - 1; setV(v); setNu(nu); } /* Comparison operator */ Bool InverseWishart::operator ==(const InverseWishart & other) const { if (this == &other) return true; return (nu_ == other.nu_) && (cholesky_ == other.cholesky_); } Bool InverseWishart::equals(const DistributionImplementation & other) const { const InverseWishart* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String InverseWishart::__repr__() const { OSS oss(true); oss << "class=" << InverseWishart::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " cholesky=" << cholesky_ << " nu=" << nu_; return oss; } String InverseWishart::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(V = \n" << getV() << ", nu = " << nu_ << ")"; return oss; } /* Virtual constructor */ InverseWishart * InverseWishart::clone() const { return new InverseWishart(*this); } /* Compute the numerical range of the distribution given the parameters values */ void InverseWishart::computeRange() { const UnsignedInteger p = cholesky_.getDimension(); const Scalar bound = ChiSquare(1.0).getRange().getUpperBound()[0]; UnsignedInteger index = 0; Point upper(getDimension()); Point lower(getDimension()); for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { upper[index] = std::sqrt(cholesky_(i, i) * cholesky_(j, j)) * bound; lower[index] = (i == j ? 0.0 : -upper[index]); ++index; } setRange(Interval(lower, upper, Interval::BoolCollection(index, true), Interval::BoolCollection(index, false))); } /* Get one realization of the distribution */ Point InverseWishart::getRealization() const { const CovarianceMatrix X(getRealizationAsMatrix()); const UnsignedInteger p = X.getDimension(); Point realization(getDimension()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { realization[index] = X(i, j); ++index; } return realization; } /* Get one realization of the distribution as a covariance matrix We use the Barlett decomposition and the fact that if X is distributed according to the inverse Wishart distribution with covariance matrix V, then X^{-1} is distributed according to the Wishart distribution with parameter V^{-1} X^{-1} = LAA'L' with LL'=V^{-1} gives X = L'^{-1}A'^{-1}A^{-1}L^{-1} */ CovarianceMatrix InverseWishart::getRealizationAsMatrix() const { const UnsignedInteger p = cholesky_.getDimension(); TriangularMatrix A(p); // The diagonal elements are chi-distributed for (UnsignedInteger i = 0; i < p; ++i) { A(i, i) = std::sqrt(2.0 * DistFunc::rGamma(0.5 * (nu_ - i))); // The off-diagonal elements are normaly distributed for (UnsignedInteger j = 0; j < i; ++j) A(i, j) = DistFunc::rNormal(); } const TriangularMatrix M((A.solveLinearSystem(inverseCholeskyInverse_)).getImplementation()); return (M.computeGram()).getImplementation(); } /* Get the PDF of the distribution */ Scalar InverseWishart::computePDF(const CovarianceMatrix & m) const { if (m.getDimension() != cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given matrix must have dimension=" << cholesky_.getDimension() << ", here dimension=" << m.getDimension(); const Scalar logPDF = computeLogPDF(m); const Scalar pdf = (logPDF == SpecFunc::LogMinScalar) ? 0.0 : std::exp(logPDF); return pdf; } Scalar InverseWishart::computePDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const Scalar logPDF = computeLogPDF(point); const Scalar pdf = (logPDF == SpecFunc::LogMinScalar) ? 0.0 : std::exp(logPDF); return pdf; } Scalar InverseWishart::computeLogPDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const UnsignedInteger p = cholesky_.getDimension(); // Build the covariance matrix associated to the given point CovarianceMatrix m(p); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { m(i, j) = point[index]; ++index; } return computeLogPDF(m); } Scalar InverseWishart::computeLogPDF(const CovarianceMatrix & m) const { if (m.getDimension() != cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given matrix must have dimension=" << cholesky_.getDimension() << ", here dimension=" << m.getDimension(); const UnsignedInteger p = cholesky_.getDimension(); try { // If the Cholesky factor is not defined, it means that M is not symmetric positive definite (an exception is thrown) and the PDF is zero TriangularMatrix X(CovarianceMatrix(m).computeCholesky()); // Compute the determinant of the Cholesky factor, ie the square-root of the determinant of M Scalar logPDF = 0.0; // Here, the diagonal of X is positive for (UnsignedInteger i = 0; i < p; ++i) logPDF -= std::log(X(i, i)); logPDF *= nu_ + p + 1.0; // Add the term which does not depend on M logPDF += logNormalizationFactor_; // Trace(V M^{-1}) = Trace(C C' X'^{-1} X^{-1}) = Trace(C'X'^{-1} X^{-1}C) // = Trace(A'A) with A = X^{-1}C TriangularMatrix A(X.solveLinearSystem(cholesky_).getImplementation()); logPDF -= 0.5 * A.computeGram().computeTrace(); return logPDF; } catch (...) { return SpecFunc::LogMinScalar; } } /* Get the CDF of the distribution */ Scalar InverseWishart::computeCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); return ContinuousDistribution::computeCDF(point); } /* Compute the mean of the distribution */ void InverseWishart::computeMean() const { const CovarianceMatrix V((cholesky_ * cholesky_.transpose()).getImplementation()); const UnsignedInteger p = cholesky_.getDimension(); mean_ = Point(getDimension()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { mean_[index] = V(i, j) / (nu_ - p - 1.0); ++index; } isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void InverseWishart::computeCovariance() const { const UnsignedInteger p = cholesky_.getDimension(); const Scalar den = (nu_ - p) * std::pow(nu_ - p - 1.0, 2) * (nu_ - p - 3.0); if (!(den > 0.0)) throw NotDefinedException(HERE) << "Error: the covariance of the inverse Wishart distribution is defined only if nu > p+3"; const CovarianceMatrix V(getV()); covariance_ = CovarianceMatrix(getDimension()); UnsignedInteger indexRow = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { UnsignedInteger indexColumn = 0; for (UnsignedInteger m = 0; m < i; ++m) for (UnsignedInteger n = 0; n <= j; ++n) { covariance_(indexRow, indexColumn) = (2.0 * V(i, j) * V(m, n) + (nu_ - p - 1.0) * (V(i, m) * V(j, n) + V(i, n) * V(m, j))) / den; ++indexColumn; } ++indexRow; } isAlreadyComputedCovariance_ = true; } /* Get the standard deviation of the distribution */ Point InverseWishart::getStandardDeviation() const /*throw(NotDefinedException)*/ { Point sigma(getDimension()); // If the covariance has already been computed, use it if (isAlreadyComputedCovariance_) { for (UnsignedInteger i = 0; i < getDimension(); ++i) sigma[i] = std::sqrt(covariance_(i, i)); return sigma; } // else compute only the standard deviation as the covariance may be huge const UnsignedInteger p = cholesky_.getDimension(); const Scalar den = (nu_ - p) * std::pow(nu_ - p - 1.0, 2) * (nu_ - p - 3.0); if (!(den > 0.0)) throw NotDefinedException(HERE) << "Error: the standard deviation of the inverse Wishart distribution is defined only if nu > p+3"; const CovarianceMatrix V(getV()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { sigma[index] = std::sqrt((2.0 * V(i, j) * V(i, j) + (nu_ - p - 1.0) * (V(i, i) * V(j, j) + V(i, j) * V(i, j))) / den); ++index; } return sigma; } Point InverseWishart::getParameter() const { const CovarianceMatrix V(getCovariance()); const UnsignedInteger p = V.getDimension(); Point point((p * (p + 1)) / 2 + 1); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++ i) for (UnsignedInteger j = 0; j <= i; ++ j) { point[index] = V(i, j); ++ index; } point[index] = nu_; return point; } void InverseWishart::setParameter(const Point & parameter) { const UnsignedInteger size = parameter.getSize(); const Scalar pReal = 0.5 * std::sqrt(8.0 * size - 7.0) - 0.5; const UnsignedInteger p = static_cast< UnsignedInteger >(pReal); if (pReal != p) throw InvalidArgumentException(HERE) << "Error: the given parameter cannot be converted into a covariance matrix and a number of degrees of freedom."; CovarianceMatrix V(p); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++ i) for (UnsignedInteger j = 0; j <= i; ++ j) { V(i, j) = parameter[index]; ++ index; } const Scalar nu = parameter[size - 1]; const Scalar w = getWeight(); *this = InverseWishart(V, nu); setWeight(w); } Description InverseWishart::getParameterDescription() const { const UnsignedInteger p = getDimension(); Description description((p * (p + 1)) / 2 + 1); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { description[index] = (OSS() << "v_" << i << "_" << j); } } description[index] = "nu"; return description; } /* V accessor */ void InverseWishart::setV(const CovarianceMatrix & v) { const UnsignedInteger p = v.getDimension(); try { cholesky_ = CovarianceMatrix(v).computeCholesky(); } catch(...) { throw InvalidArgumentException(HERE) << "Error: V must be positive definite"; } TriangularMatrix T((cholesky_.solveLinearSystem(IdentityMatrix(p))).getImplementation()); CovarianceMatrix vInverse((cholesky_.transpose().solveLinearSystem(T)).getImplementation()); TriangularMatrix vInverseCholesky((CovarianceMatrix(vInverse).computeCholesky()).getImplementation()); inverseCholeskyInverse_ = TriangularMatrix((vInverseCholesky.solveLinearSystem(IdentityMatrix(p))).getImplementation()); setDimension((p * (p + 1)) / 2); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } CovarianceMatrix InverseWishart::getV() const { return (cholesky_ * cholesky_.transpose()).getImplementation(); } /* Nu accessor */ void InverseWishart::setNu(const Scalar nu) { if (nu + 1.0 <= cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: nu must be greater than V dimension - 1"; if (nu != nu_) { nu_ = nu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; update(); computeRange(); } } Scalar InverseWishart::getNu() const { return nu_; } /* Compute the normalization factor on log-scale */ void InverseWishart::update() { const UnsignedInteger p = cholesky_.getDimension(); logNormalizationFactor_ = -0.5 * p * (nu_ * M_LN2 + 0.5 * (p - 1) * std::log(M_PI)); for (UnsignedInteger i = 0; i < p; ++i) logNormalizationFactor_ -= SpecFunc::LogGamma(0.5 * (nu_ - i)) - nu_ * std::log(cholesky_(i, i)); } /* Method save() stores the object through the StorageManager */ void InverseWishart::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "cholesky_", cholesky_ ); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "inverseCholeskyInverse_", inverseCholeskyInverse_ ); adv.saveAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void InverseWishart::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "cholesky_", cholesky_ ); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "inverseCholeskyInverse_", inverseCholeskyInverse_ ); adv.saveAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/KFactorFunctions.cxx000066400000000000000000000123251307543307100257150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the k factor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KFactorFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/NonCentralChiSquare.hxx" #include "openturns/Normal.hxx" BEGIN_NAMESPACE_OPENTURNS namespace KFactorFunctions { #define KFactorFunctions_RMAX 8.5 class KernelFunction: public EvaluationImplementation { public: KernelFunction(const Scalar nu, const Scalar p, const Scalar n) : EvaluationImplementation() , nu_(nu) , p_(p) , x_(1.0) , n_(n) , chiSquare_(nu) , normal_(0.0, 1.0 / std::sqrt(n)) { // Nothing to do } KernelFunction * clone() const { return new KernelFunction(*this); } Point operator() (const Point & point) const { const Scalar z = point[0]; return Point(1, chiSquare_.computeComplementaryCDF(nu_ * NonCentralChiSquare(1.0, z * z).computeQuantile(p_) / (x_ * x_)) * normal_.computePDF(z)); } void setX(const Scalar x) { x_ = x; } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } String __repr__() const { OSS oss(true); oss << "class=KernelFunction" << " nu=" << nu_ << " p=" << p_ << " x=" << x_ << " n=" << n_ << " chiSquare=" << chiSquare_ << " normal=" << normal_; return oss; } String __str__(const String & offset) const { OSS oss(false); oss << "KernelFunction(" << "nu=" << nu_ << ", p=" << p_ << ", x=" << n_ << ", n=" << n_ << ", chiSquare=" << chiSquare_ << ", normal=" << normal_ << ")"; return oss; } private: Scalar nu_; Scalar p_; Scalar x_; Scalar n_; ChiSquare chiSquare_; Normal normal_; }; // KernelFunction class ConstraintFunction: public EvaluationImplementation { public: ConstraintFunction(const Scalar nu, const Scalar p, const Scalar n) : EvaluationImplementation() , nu_(nu) , p_(p) , n_(n) , kernel_(nu, p, n) { // Nothing to do } ConstraintFunction * clone() const { return new ConstraintFunction(*this); } Point operator() (const Point & point) const { const Scalar x = point[0]; kernel_.setX(x); return GaussKronrod(ResourceMap::GetAsUnsignedInteger("KFactor-DefaultIntegrationNodesNumber"), ResourceMap::GetAsScalar("KFactor-Precision"), GaussKronrodRule(GaussKronrodRule::G7K15)).integrate(kernel_, Interval(0.0, KFactorFunctions_RMAX / std::sqrt(n_))); } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } String __repr__() const { OSS oss(true); oss << "class=ConstraintFunction" << " nu=" << nu_ << " p=" << p_ << " n=" << n_ << " kernel=" << kernel_; return oss; } String __str__(const String & offset) const { OSS oss(false); oss << "ConstraintFunction(" << "nu=" << nu_ << ", p=" << p_ << ", n=" << n_ << ", kernel=" << kernel_ << ")"; return oss; } private: Scalar nu_; Scalar p_; Scalar n_; mutable KernelFunction kernel_; }; // ConstraintFunction Scalar KFactor(const Scalar n, const Scalar nu, const Scalar p, const Scalar alpha) { if (!(n >= 1.0)) throw InvalidArgumentException(HERE) << "Error: n must be greater than 1, here n=" << n; if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: nu must be positive, here nu=" << nu; if (!((p >= 0.0) && (p <= 1.0))) throw InvalidArgumentException(HERE) << "Error: p must be in [0, 1], here p=" << p; if (!((alpha >= 0.0) && (alpha <= 1.0))) throw InvalidArgumentException(HERE) << "Error: alpha must be in [0, 1], here alpha=" << alpha; const ConstraintFunction constraint(nu, p, n); const Brent solver(ResourceMap::GetAsScalar("KFactor-Precision"), ResourceMap::GetAsScalar("KFactor-Precision"), ResourceMap::GetAsScalar("KFactor-Precision"), ResourceMap::GetAsUnsignedInteger("KFactor-MaximumIteration")); return solver.solve(constraint, 0.5 * (1.0 - alpha), SpecFunc::ScalarEpsilon, KFactorFunctions_RMAX); } } // KFactorFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/KPermutationsDistribution.cxx000066400000000000000000000243151307543307100277020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The KPermutationsDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Collection.hxx" #include "openturns/KPermutationsDistribution.hxx" #include "openturns/KPermutations.hxx" #include "openturns/Binomial.hxx" #include "openturns/Poisson.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection UnsignedIntegerCollection; CLASSNAMEINIT(KPermutationsDistribution); static const Factory Factory_KPermutationsDistribution; /* Default constructor */ KPermutationsDistribution::KPermutationsDistribution() : DiscreteDistribution() , k_(0) , n_(0) { setName("KPermutationsDistribution"); setK(1); setN(1); } /* Parameters constructor */ KPermutationsDistribution::KPermutationsDistribution(const UnsignedInteger k, const UnsignedInteger n) : DiscreteDistribution() , k_(0) , n_(0) { setName("KPermutationsDistribution"); // This method compute the range also setK(k); setN(n); } /* Comparison operator */ Bool KPermutationsDistribution::operator ==(const KPermutationsDistribution & other) const { if (this == &other) return true; return (k_ == other.k_) && (n_ == other.n_); } Bool KPermutationsDistribution::equals(const DistributionImplementation & other) const { const KPermutationsDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String KPermutationsDistribution::__repr__() const { OSS oss; oss << "class=" << KPermutationsDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " k=" << k_ << " n=" << n_; return oss; } String KPermutationsDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(k = " << k_ << ", n = " << n_ << ")"; return oss; } /* Virtual constructor */ KPermutationsDistribution * KPermutationsDistribution::clone() const { return new KPermutationsDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void KPermutationsDistribution::computeRange() { const Point lowerBound(k_, 0.0); const Point upperBound(k_, n_ - 1.0); const Interval::BoolCollection finiteLowerBound(k_, true); const Interval::BoolCollection finiteUpperBound(k_, true); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point KPermutationsDistribution::getRealization() const { Point realization(k_); Indices buffer(n_); buffer.fill(); for (UnsignedInteger i = 0; i < k_; ++i) { UnsignedInteger index = i + RandomGenerator::IntegerGenerate(n_ - i); realization[i] = buffer[index]; buffer[index] = buffer[i]; } return realization; } /* Get the PDF of the distribution */ Scalar KPermutationsDistribution::computeLogPDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Indices x(k_); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar k = point[i]; if ((k < -supportEpsilon_) || (k > n_ + supportEpsilon_)) return SpecFunc::LogMinScalar; const UnsignedInteger ik = static_cast< UnsignedInteger > (round(k)); if (std::abs(k - ik) > supportEpsilon_) return SpecFunc::LogMinScalar; x[i] = ik; } if (!x.check(n_)) return 0.0; return logPDFValue_; } Scalar KPermutationsDistribution::computePDF(const Point & point) const { const Scalar logPDF = computeLogPDF(point); if (logPDF == SpecFunc::LogMinScalar) return 0.0; return std::exp(logPDF); } /* Get the CDF of the distribution */ Scalar KPermutationsDistribution::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (dimension == 1) return static_cast < Scalar >(k_) / n_; Point sortedPoint(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar x = point[i]; if (x < -supportEpsilon_) return 0.0; sortedPoint[i] = std::min(n_ - 1.0, floor(x + supportEpsilon_)); } std::sort(sortedPoint.begin(), sortedPoint.end()); Scalar cdfValue = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) cdfValue *= (sortedPoint[i] + 1.0 - i) / (n_ - i); return cdfValue; } /* Compute the scalar quantile of the 1D KPermutationsDistribution distribution */ Scalar KPermutationsDistribution::computeScalarQuantile(const Scalar prob, const Bool tail) const { const UnsignedInteger i = static_cast< UnsignedInteger >(ceil(prob * (n_ - 1.0))); return (tail ? n_ - 1.0 - i : i); } // computeScalarQuantile /* Get the i-th marginal distribution */ KPermutationsDistribution::Implementation KPermutationsDistribution::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; return new KPermutationsDistribution(1, n_); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ KPermutationsDistribution::Implementation KPermutationsDistribution::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger outputDimension = indices.getSize(); return new KPermutationsDistribution(outputDimension, n_); } // getMarginal(Indices) /* Get the support of a discrete distribution that intersect a given interval */ Sample KPermutationsDistribution::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; return KPermutations(k_, n_).generate(); } /* Compute the mean of the distribution */ void KPermutationsDistribution::computeMean() const { mean_ = Point(k_, 0.5 * (n_ - 1.0)); isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void KPermutationsDistribution::computeCovariance() const { const Scalar var = (n_ * n_ - 1.0) / 12.0; const Scalar cov = -(n_ + 1.0) / 12.0; covariance_ = CovarianceMatrix(k_, Point(k_ * k_, cov)); for (UnsignedInteger i = 0; i < k_; ++i) covariance_(i, i) = var; isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ KPermutationsDistribution::PointWithDescriptionCollection KPermutationsDistribution::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters((dimension == 1 ? 1 : dimension + 1)); for (UnsignedInteger i = 0; i < dimension; ++i) { PointWithDescription point(1); point[0] = n_; Description description(1); description[0] = "n"; point.setDescription(description); point.setName(getDescription()[i]); parameters[i] = point; } if (dimension > 1) { PointWithDescription point(2); Description description(2); point[0] = k_; description[0] = "k"; point[1] = n_; description[1] = "n"; point.setDescription(description); point.setName("dependence"); parameters[dimension] = point; } return parameters; } /* K accessor */ void KPermutationsDistribution::setK(const UnsignedInteger k) { if (k == 0) throw InvalidArgumentException(HERE) << "Error: k must be > 0."; if (k != k_) { k_ = k; logPDFValue_ = SpecFunc::LnGamma(k_ + 1) - SpecFunc::LnGamma(n_ + 1); setDimension(k); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; } } /* K accessor */ UnsignedInteger KPermutationsDistribution::getK() const { return k_; } /* N accessor */ void KPermutationsDistribution::setN(const UnsignedInteger n) { if (n == 0) throw InvalidArgumentException(HERE) << "Error: n must be > 0."; if (n != n_) { n_ = n; logPDFValue_ = SpecFunc::LnGamma(k_ + 1) - SpecFunc::LnGamma(n_ + 1); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } UnsignedInteger KPermutationsDistribution::getN() const { return n_; } /* Method save() stores the object through the StorageManager */ void KPermutationsDistribution::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "k_", k_ ); adv.saveAttribute( "n_", n_ ); adv.saveAttribute( "logPDFValue_", logPDFValue_ ); } /* Method load() reloads the object from the StorageManager */ void KPermutationsDistribution::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "k_", k_ ); adv.loadAttribute( "n_", n_ ); adv.loadAttribute( "logPDFValue_", logPDFValue_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/KernelMixture.cxx000066400000000000000000000745151307543307100253020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Class for a product-kernel multidimensional mixture. If K is the * underlying 1D kernel, h=(h_1,\dot,h_n) is the vector of bandwidth * and X=(X^1,\dots,X^N) is the nD sample, the PDF of the kernel mixture * is: * PDF(x) = C\sum_{i=1}^N\prod_{j=1}^n K((x_j - X^i_j)/h_j), * where: * C = \frac{1}{N\prod_{k=1}^n h_k} * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/KernelMixture.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Brent.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KernelMixture); static const Factory Factory_KernelMixture; /* Default constructor */ KernelMixture::KernelMixture() : ContinuousDistribution() , kernel_() , bandwidth_(0) , bandwidthInverse_(0) , normalizationFactor_(0.0) , sample_(1, 1) , pdfApproximationCDF_() , cdfApproximation_() , pdfApproximationCCDF_() , ccdfApproximation_() , useApproximatePDFCDF_(false) { setName("KernelMixture"); setBandwidth(Point(1, 1.0)); } /* Parameters constructor */ KernelMixture::KernelMixture(const Distribution & kernel, const Point & bandwidth, const Sample & sample) : ContinuousDistribution() , kernel_(kernel) , bandwidth_(0) , bandwidthInverse_(0) , normalizationFactor_(0.0) , sample_(sample) , pdfApproximationCDF_() , cdfApproximation_() , pdfApproximationCCDF_() , ccdfApproximation_() , useApproximatePDFCDF_(false) { setName("KernelMixture"); // We check if the given kernel is 1-D (product kernel) if (kernel.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: only 1D kernel is allowed for multidimensional product kernels"; if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a KernelMixture based on an empty sample."; setDimension(sample.getDimension()); // This call set also the range. setBandwidth(bandwidth); if ((getDimension() == 1) && (sample.getSize() >= ResourceMap::GetAsUnsignedInteger("KernelMixture-SmallSize")) && (sample.getSize() < ResourceMap::GetAsUnsignedInteger("KernelMixture-LargeSize"))) { // Here we use the implementation provided by the DistributionImplementation class instead of the ContinuousDistribution class in order to use both the PDF and the CDF Collection coll(DistributionImplementation::interpolatePDFCDF(ResourceMap::GetAsUnsignedInteger("KernelMixture-PDFCDFDiscretization"))); pdfApproximationCDF_ = coll[0]; cdfApproximation_ = coll[1]; pdfApproximationCCDF_ = coll[2]; ccdfApproximation_ = coll[3]; useApproximatePDFCDF_ = true; } } /* Comparison operator */ Bool KernelMixture::operator ==(const KernelMixture & other) const { if (this == &other) return true; if (useApproximatePDFCDF_) return (bandwidth_ == other.bandwidth_) && (kernel_ == other.kernel_) && (pdfApproximationCDF_ == other.pdfApproximationCDF_) && (cdfApproximation_ == other.cdfApproximation_) && (pdfApproximationCCDF_ == other.pdfApproximationCCDF_) && (ccdfApproximation_ == other.ccdfApproximation_); return (bandwidth_ == other.bandwidth_) && (kernel_ == other.kernel_) && (sample_ == other.sample_); } Bool KernelMixture::equals(const DistributionImplementation & other) const { const KernelMixture* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String KernelMixture::__repr__() const { OSS oss; oss << "class=" << KernelMixture::GetClassName() << " name=" << getName() << " kernel=" << kernel_ << " bandwidth=" << bandwidth_ << " sample=" << sample_; return oss; } String KernelMixture::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(kernel = " << kernel_.__str__() << ", bandwidth = " << bandwidth_.__str__() << ", sample = " << "\n" << sample_.__str__(offset); return oss; } /* Compute the numerical range of the distribution given the parameters values */ void KernelMixture::computeRange() { const Interval kernelRange(kernel_.getRange()); const UnsignedInteger dimension = getDimension(); const Point lowerBound(sample_.getMin() + kernelRange.getLowerBound()[0] * bandwidth_); const Point upperBound(sample_.getMax() + kernelRange.getUpperBound()[0] * bandwidth_); const Interval::BoolCollection finiteLowerBound(dimension, kernelRange.getFiniteLowerBound()[0]); const Interval::BoolCollection finiteUpperBound(dimension, kernelRange.getFiniteUpperBound()[0]); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Kernel accessor */ void KernelMixture::setKernel(const Distribution & kernel) { // We check if the kernel is 1D if (kernel.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the kernel must be 1D for product kernel mixture"; kernel_ = kernel; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } Distribution KernelMixture::getKernel() const { return kernel_; } /* Sample accessor */ void KernelMixture::setInternalSample(const Sample & sample) { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a KernelMixture based on an empty sample."; if (sample.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given sample has dimension=" << sample.getDimension() << ", expected dimension=" << getDimension() << "."; sample_ = sample; computeRange(); if ((getDimension() == 1) && (sample.getSize() >= ResourceMap::GetAsUnsignedInteger("KernelMixture-SmallSize")) && (sample.getSize() < ResourceMap::GetAsUnsignedInteger("KernelMixture-LargeSize"))) { // Here we use the implementation provided by the DistributionImplementation class instead of the ContinuousDistribution class in order to use both the PDF and the CDF Collection coll(DistributionImplementation::interpolatePDFCDF(ResourceMap::GetAsUnsignedInteger("KernelMixture-PDFCDFDiscretization"))); pdfApproximationCDF_ = coll[0]; cdfApproximation_ = coll[1]; pdfApproximationCCDF_ = coll[2]; ccdfApproximation_ = coll[3]; useApproximatePDFCDF_ = true; } isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } Sample KernelMixture::getInternalSample() const { return sample_; } /* Bandwidth accessor */ void KernelMixture::setBandwidth(const Point & bandwidth) { const UnsignedInteger dimension = getDimension(); normalizationFactor_ = sample_.getSize(); if (bandwidth.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the dimensions of the bandwidth and the sample must be equal"; bandwidthInverse_ = Point(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar hi = bandwidth[i]; if (!(hi > 0.0)) throw InvalidArgumentException(HERE) << "Error: the bandwidth components must be > 0, here bandwidth=" << bandwidth; bandwidthInverse_[i] = 1.0 / hi; normalizationFactor_ *= hi; } bandwidth_ = bandwidth; normalizationFactor_ = 1.0 / normalizationFactor_; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } /* Distribution collection accessor */ Point KernelMixture::getBandwidth() const { return bandwidth_; } /* Virtual constructor */ KernelMixture * KernelMixture::clone() const { return new KernelMixture(*this); } /* Get one realization of the KernelMixture */ Point KernelMixture::getRealization() const { // Select the atom uniformly amongst the possible points Point result(sample_[RandomGenerator::IntegerGenerate(sample_.getSize())]); // Then add a random noise according to the product kernel const UnsignedInteger dimension = getDimension(); const Sample kernelSample(kernel_.getSample(dimension)); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] += bandwidth_[i] * kernelSample[i][0]; return result; } /* Get the DDF of the KernelMixture */ Point KernelMixture::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point ddfValue(dimension, 0.0); // Quick rejection test if (!getRange().numericallyContains(point)) return ddfValue; const UnsignedInteger size = sample_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) { Point atom(dimension, 0.0); Point kernelPdfAtom(dimension, 0.0); Scalar pdfAtom = 1.0; for (UnsignedInteger j = 0; j < dimension; ++j) { atom[j] = (point[j] - sample_[i][j]) * bandwidthInverse_[j]; kernelPdfAtom[j] = kernel_.computePDF(Point(1, atom[j])); pdfAtom *= kernelPdfAtom[j]; } for (UnsignedInteger j = 0; j < dimension; ++j) { // Only aggregate the values associated with kernelPdfAtom>0 if (kernelPdfAtom[j] > 0.0) ddfValue[j] += pdfAtom / kernelPdfAtom[j] * kernel_.computeDDF(Point(1, atom[j]))[0] * bandwidthInverse_[j]; } } /* end for */ return normalizationFactor_ * ddfValue; } /* Get the PDF of the KernelMixture */ Scalar KernelMixture::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return pdfApproximationCDF_(point)[0]; else return pdfApproximationCCDF_(point)[0]; } Scalar pdfValue = 0.0; const UnsignedInteger size = sample_.getSize(); if (dimension == 1) { const Scalar x = point[0]; const Scalar h = bandwidth_[0]; for(UnsignedInteger i = 0; i < size; ++i) pdfValue += kernel_.computePDF((x - sample_[i][0]) / h); return pdfValue / (h * size); } // Quick rejection test if (!getRange().numericallyContains(point)) return pdfValue; const Scalar pdfEpsilon = kernel_.getPDFEpsilon(); for(UnsignedInteger i = 0; i < size; ++i) { Scalar pdfAtom = kernel_.computePDF(Point(1, (point[0] - sample_[i][0]) * bandwidthInverse_[0])); for (UnsignedInteger j = 1; j < dimension; ++j) { if (pdfAtom < pdfEpsilon) break; pdfAtom *= kernel_.computePDF(Point(1, (point[j] - sample_[i][j]) * bandwidthInverse_[j])); } pdfValue += pdfAtom; } /* end for */ return normalizationFactor_ * pdfValue; } /* Get the CDF of the KernelMixture */ Scalar KernelMixture::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return cdfApproximation_(point)[0]; else return 1.0 - ccdfApproximation_(point)[0]; } Scalar cdfValue = 0.0; const UnsignedInteger size = sample_.getSize(); if (dimension == 1) { const Scalar x = point[0]; const Scalar h = bandwidth_[0]; for(UnsignedInteger i = 0; i < size; ++i) cdfValue += kernel_.computeCDF((x - sample_[i][0]) / h); return cdfValue / size; } // Check against the range of the distribution Bool allTooLarge = true; Bool oneTooSmall = false; const Point lower(getRange().getLowerBound()); const Point upper(getRange().getUpperBound()); for (UnsignedInteger i = 0; i < dimension; ++i) { allTooLarge = allTooLarge && (point[i] >= upper[i]); oneTooSmall = oneTooSmall || (point[i] <= lower[i]); } if (allTooLarge) return 1.0; if (oneTooSmall) return 0.0; const Scalar cdfEpsilon = kernel_.getCDFEpsilon(); for (UnsignedInteger i = 0; i < size; ++i) { Scalar cdfAtom = kernel_.computeCDF((point[0] - sample_[i][0]) * bandwidthInverse_[0]); for (UnsignedInteger j = 1; j < dimension; ++j) { if (cdfAtom < cdfEpsilon) break; cdfAtom *= kernel_.computeCDF((point[j] - sample_[i][j]) * bandwidthInverse_[j]); } cdfValue += cdfAtom; } /* end for */ return cdfValue / size; } /* Get the complementary CDF of the distribution */ Scalar KernelMixture::computeComplementaryCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return 1.0 - cdfApproximation_(point)[0]; else return ccdfApproximation_(point)[0]; } // More accurate computation for 1D case... if (dimension == 1) return computeSurvivalFunction(point); // ... than in the general case return DistributionImplementation::computeComplementaryCDF(point); } /* Get the survival function of the KernelMixture */ Scalar KernelMixture::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return 1.0 - cdfApproximation_(point)[0]; else return ccdfApproximation_(point)[0]; } // Check against the range of the distribution Bool oneTooLarge = true; Bool allTooSmall = false; const Point lower(getRange().getLowerBound()); const Point upper(getRange().getUpperBound()); for (UnsignedInteger i = 0; i < dimension; ++i) { oneTooLarge = oneTooLarge && (point[i] >= upper[i]); allTooSmall = allTooSmall || (point[i] <= lower[i]); } if (oneTooLarge) return 0.0; if (allTooSmall) return 1.0; const Scalar cdfEpsilon = kernel_.getCDFEpsilon(); Scalar survivalValue = 0.0; const UnsignedInteger size = sample_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { Scalar cdfAtom = kernel_.computeSurvivalFunction((point[0] - sample_[i][0]) * bandwidthInverse_[0]); for (UnsignedInteger j = 1; j < dimension; ++j) { if (cdfAtom < cdfEpsilon) break; cdfAtom *= kernel_.computeSurvivalFunction((point[j] - sample_[i][j]) * bandwidthInverse_[j]); } survivalValue += cdfAtom; } /* end for */ cdfEpsilon_ = kernel_.getCDFEpsilon() * size; return survivalValue / size; } /* Get the probability content of an interval */ Scalar KernelMixture::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); const Interval reducedInterval(interval.intersect(getRange())); if (reducedInterval == getRange()) return 1.0; if (reducedInterval.isNumericallyEmpty()) return 0.0; const Point lowerBound(reducedInterval.getLowerBound()); const Point upperBound(reducedInterval.getUpperBound()); if (useApproximatePDFCDF_) { const Scalar mean = getMean()[0]; if (lowerBound[0] > mean) return ccdfApproximation_(lowerBound)[0] - ccdfApproximation_(upperBound)[0]; else return cdfApproximation_(upperBound)[0] - cdfApproximation_(lowerBound)[0]; } Scalar probability = 0.0; const UnsignedInteger size = sample_.getSize(); if (dimension == 1) { const Scalar hInverse = bandwidthInverse_[0]; for(UnsignedInteger i = 0; i < size; ++i) probability += kernel_.computeProbability(Interval((lowerBound[0] - sample_[i][0]) * hInverse, (upperBound[0] - sample_[i][0]) * hInverse)); return probability / size; } const Scalar probabilityEpsilon = kernel_.getCDFEpsilon(); for (UnsignedInteger i = 0; i < size; ++i) { Scalar probabilityAtom = kernel_.computeProbability(Interval((lowerBound[0] - sample_[i][0]) * bandwidthInverse_[0], (upperBound[0] - sample_[i][0]) * bandwidthInverse_[0])); for (UnsignedInteger j = 1; j < dimension; ++j) { if (probabilityAtom < probabilityEpsilon) break; probabilityAtom *= kernel_.computeProbability(Interval((lowerBound[j] - sample_[i][j]) * bandwidthInverse_[j], (upperBound[j] - sample_[i][j]) * bandwidthInverse_[j])); } probability += probabilityAtom; } /* end for */ return probability / size; } /* Compute the quantile function of the distribution */ Scalar KernelMixture::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (!useApproximatePDFCDF_) return DistributionImplementation::computeScalarQuantile(prob, tail); const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; if (prob <= 0.0) return (tail ? b : a); if (prob >= 1.0) return (tail ? a : b); const UnsignedInteger n = cdfApproximation_.getLocations().getSize(); if (tail) { // Here we have to solve ComplementaryCDF(x) = prob which is mathematically // equivalent to CDF(x) = 1 - prob, but numerically different with an // accuracy that depends on prob. // The cut-off is around the mean value if (prob <= ccdfApproximation_.getValues()[0][0]) return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(ccdfApproximation_, prob, ccdfApproximation_.getLocations()[0], ccdfApproximation_.getLocations()[n - 1], ccdfApproximation_.getValues()[0][0], ccdfApproximation_.getValues()[n - 1][0]); return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(cdfApproximation_, 1.0 - prob, cdfApproximation_.getLocations()[0], cdfApproximation_.getLocations()[n - 1], cdfApproximation_.getValues()[0][0], cdfApproximation_.getValues()[n - 1][0]); } // Here we have to solve CDF(x) = prob which is mathematically // equivalent to ComplementaryCDF(x) = 1 - prob, but numerically // different with an accuracy that depends on prob. // The cut-off is around the mean value if (prob <= cdfApproximation_.getValues()[n - 1][0]) return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(cdfApproximation_, prob, cdfApproximation_.getLocations()[0], cdfApproximation_.getLocations()[n - 1], cdfApproximation_.getValues()[0][0], cdfApproximation_.getValues()[n - 1][0]); return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(ccdfApproximation_, 1.0 - prob, ccdfApproximation_.getLocations()[0], ccdfApproximation_.getLocations()[n - 1], ccdfApproximation_.getValues()[0][0], ccdfApproximation_.getValues()[n - 1][0]); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex KernelMixture::computeCharacteristicFunction(const Scalar x) const { if (x == 0.0) return 1.0; Complex cfValue(0.0); const UnsignedInteger size = sample_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) { cfValue += kernel_.computeCharacteristicFunction(x * bandwidth_[0]) * std::exp(Complex(0.0, sample_[i][0] * x)); } /* end for */ return cfValue * (1.0 / size); } /* Get the PDF gradient of the distribution */ Point KernelMixture::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In KernelMixture::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point KernelMixture::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In KernelMixture::computeCDFGradient(const Point & point) const"; } /* Get the i-th marginal distribution */ KernelMixture::Implementation KernelMixture::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case return new KernelMixture(kernel_, Point(1, bandwidth_[i]), sample_.getMarginal(i)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ KernelMixture::Implementation KernelMixture::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger marginalDimension = indices.getSize(); Point marginalBandwidth(marginalDimension); for (UnsignedInteger i = 0; i < marginalDimension; ++i) marginalBandwidth[i] = bandwidth_[indices[i]]; return new KernelMixture(kernel_, marginalBandwidth, sample_.getMarginal(indices)); } /* Compute the mean of the KernelMixture * PDF(x) = C\sum_{i=1}^N\prod_{j=1}^n K((X^i_j-x_j)/h_j), * where: * C = \frac{1}{N\prod_{k=1}^n h_k} * mu_j = \int_{-\infty}^{\infty} x_j\frac{1}{Nh_j}\sum_{i=1}^N K((x_j - X^i_j) / h_j) dx_j = \int_{-\infty}^{\infty} \frac{1}{Nh_j}\sum_{i=1}^N(h_jt + X^i_j)K(t) h_j dt = \frac{1}{Nh_j}\sum_{i=1}^NX^i_j + \int_{-\infty}^{\infty} \frac{1}{N}\sum_{i=1}^Nh_jtK(t) dt = mu_sample_j + h_j mu_K */ void KernelMixture::computeMean() const { // We know that the kernel is 1D, so its mean value is actually a scalar const Scalar meanKernel = kernel_.getMean()[0]; mean_ = sample_.computeMean(); isAlreadyComputedMean_ = true; // Special case for symmetric kernel if (meanKernel == 0.0) return; // General case mean_ += meanKernel * bandwidth_; } /* Compute the covariance of the KernelMixture Covariance(KernelMixture) = (1-1/N) Covariance(sample) + Covariance(kernel) * diag(bandwidth[i]^2) */ void KernelMixture::computeCovariance() const { const UnsignedInteger dimension = getDimension(); // We know that the kernel is 1D, so its standard deviation is actually a scalar const Scalar sigmaKernel = kernel_.getStandardDeviation()[0]; // Covariance(sample) term, with the proper scaling covariance_ = CovarianceMatrix(dimension, Collection(sample_.computeCovariance().getImplementation()->operator*(1.0 - 1.0 / sample_.getSize()))); // Add the diagonal kernel covariance contribution for (UnsignedInteger i = 0; i < dimension; ++i) covariance_(i, i) += std::pow(bandwidth_[i] * sigmaKernel, 2); isAlreadyComputedCovariance_ = true; } /* Get the standard deviation of the distribution. We don't use the square root of the covariance since it involves a O(dim^2) computation where only a O(dim) computation is required. std = [var_sample + h^2 var_K]^(1/2) */ Point KernelMixture::getStandardDeviation() const { const UnsignedInteger dimension = getDimension(); // We know that the kernel is 1D, so its standard deviation is actually a scalar const Scalar sigmaKernel = kernel_.getStandardDeviation()[0]; Point result(sample_.computeCenteredMoment(2)); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = std::sqrt(result[i] + std::pow(bandwidth_[i] * sigmaKernel, 2)); return result; } /* Get the skewness of the distribution: skew = [skew_sample * std_sample^3 + h^3 * skew_K * std_K^3] / std^3 */ Point KernelMixture::getSkewness() const { const UnsignedInteger dimension = getDimension(); // We know that the kernel is 1D, so its standard deviation is actually a scalar const Scalar sigmaKernel = kernel_.getStandardDeviation()[0]; // We know that the kernel is 1D, so its skewness is actually a scalar const Scalar skewnessKernel = kernel_.getSkewness()[0]; // Standard deviation of the KernelMixture const Point sigma(getStandardDeviation()); Point result(sample_.computeCenteredMoment(3)); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = (result[i] + std::pow(bandwidth_[i] * sigmaKernel, 3) * skewnessKernel) / std::pow(sigma[i], 3); return result; } /* Get the kurtosis of the distribution: kurt = [kurt_sample * std_sample^4 + h^4 * kurt_K * std_K^4 + 6 * h^2 * var_sample * var_K] / std^4 */ Point KernelMixture::getKurtosis() const { const UnsignedInteger dimension = getDimension(); // We know that the kernel is 1D, so its standard deviation is actually a scalar const Scalar sigmaKernel = kernel_.getStandardDeviation()[0]; // We know that the kernel is 1D, so its skewness is actually a scalar const Scalar kurtosisKernel = kernel_.getKurtosis()[0]; // Standard deviation of the sample const Point varSample(sample_.computeCenteredMoment(2)); // Standard deviation of the KernelMixture const Point sigma(getStandardDeviation()); Point result(sample_.computeCenteredMoment(4)); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] = (result[i] + std::pow(bandwidth_[i] * sigmaKernel, 4) * kurtosisKernel + 6.0 * varSample[i] * std::pow(bandwidth_[i] * sigmaKernel, 2)) / std::pow(sigma[i], 4); return result; } /* Parameters value and description accessor */ KernelMixture::PointWithDescriptionCollection KernelMixture::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = sample_.getSize(); PointWithDescriptionCollection parameters(dimension + (dimension > 1 ? 1 : 0)); // The marginal parameters : the sample and the bandwidth for (UnsignedInteger i = 0; i < dimension; ++i) { PointWithDescription marginalParameters(size + 1); Description description(marginalParameters.getDimension()); for (UnsignedInteger j = 0; j < size; ++j) { marginalParameters[j] = sample_[j][i]; if (dimension > 1) description[j] = (OSS() << "x_" << j << "^" << i); else description[j] = (OSS() << "x_" << j); } marginalParameters[size] = bandwidth_[i]; if (dimension > 1) description[size] = (OSS() << "h_" << i); else description[size] = (OSS() << "h"); marginalParameters.setDescription(description); parameters[i] = marginalParameters; } // The dependence parameters is the union of all the parameters as they all contribute to the copula, presented in a different way if (dimension > 1) { PointWithDescription dependence(dimension * (size + 1)); Description description(dependence.getDimension()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j) { dependence[index] = sample_[i][j]; description[index] = (OSS() << "x_" << i << "^" << j); ++index; } for (UnsignedInteger i = 0; i < dimension; ++i) { dependence[index] = bandwidth_[i]; description[index] = (OSS() << "h_" << i); ++index; } dependence.setDescription(description); parameters[dimension] = dependence; } return parameters; } // getParametersCollection /* Check if the distribution is elliptical */ Bool KernelMixture::isElliptical() const { // No chance to have something symmetrical if sample size > 2 if (sample_.getSize() > 2) return false; // In dimension 1, elliptical == symmetric if (getDimension() == 1) return kernel_.isElliptical(); // In dimension > 1, only samples with 1 point and Normal kernels lead to an elliptical distribution return (sample_.getSize() == 1) && (kernel_.getClassName() == "Normal"); } /* Check if the distribution is continuos */ Bool KernelMixture::isContinuous() const { return kernel_.getImplementation()->isContinuous(); } /* Tell if the distribution has elliptical copula */ Bool KernelMixture::hasEllipticalCopula() const { // In 1D, all the distributions have an elliptical copula if (getDimension() == 1) return true; return false; } /* Tell if the distribution has independent copula */ Bool KernelMixture::hasIndependentCopula() const { // In 1D, all the distributions have an independent copula return (getDimension() == 1); } /* Method save() stores the object through the StorageManager */ void KernelMixture::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "kernel_", kernel_ ); adv.saveAttribute( "bandwidth_", bandwidth_ ); adv.saveAttribute( "bandwidthInverse_", bandwidthInverse_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); adv.saveAttribute( "sample_", sample_ ); adv.saveAttribute( "pdfApproximationCDF_", pdfApproximationCDF_ ); adv.saveAttribute( "cdfApproximation_", cdfApproximation_ ); adv.saveAttribute( "pdfApproximationCCDF_", pdfApproximationCCDF_ ); adv.saveAttribute( "ccdfApproximation_", ccdfApproximation_ ); adv.saveAttribute( "useApproximatePDFCDF_", useApproximatePDFCDF_ ); } /* Method load() reloads the object from the StorageManager */ void KernelMixture::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "kernel_", kernel_ ); adv.loadAttribute( "bandwidth_", bandwidth_ ); adv.loadAttribute( "bandwidthInverse_", bandwidthInverse_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); adv.loadAttribute( "sample_", sample_ ); adv.loadAttribute( "pdfApproximationCDF_", pdfApproximationCDF_ ); adv.loadAttribute( "cdfApproximation_", cdfApproximation_ ); adv.loadAttribute( "pdfApproximationCCDF_", pdfApproximationCCDF_ ); adv.loadAttribute( "ccdfApproximation_", ccdfApproximation_ ); adv.loadAttribute( "useApproximatePDFCDF_", useApproximatePDFCDF_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/KernelSmoothing.cxx000066400000000000000000000376311307543307100256120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class acts like a KernelMixture factory, implementing a * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KernelSmoothing.hxx" #include "openturns/Normal.hxx" #include "openturns/Dirac.hxx" #include "openturns/KernelMixture.hxx" #include "openturns/Mixture.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Brent.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Function.hxx" #include "openturns/HermiteFactory.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KernelSmoothing * * The class describes the probabilistic concept of KernelSmoothing. */ CLASSNAMEINIT(KernelSmoothing); static const Factory Factory_KernelSmoothing; /* Default constructor */ KernelSmoothing::KernelSmoothing() : DistributionFactoryImplementation() , bandwidth_(Point(0)) , kernel_(Normal()) , bined_(true) , binNumber_(ResourceMap::GetAsUnsignedInteger( "KernelSmoothing-BinNumber" )) , boundaryCorrection_(false) { setName("KernelSmoothing"); if (binNumber_ < 2) throw InvalidArgumentException(HERE) << "Error: The default number of bins=" << binNumber_ << " is less than 2. Check the ResourceMap or the openturns.conf file."; } /* Default constructor */ KernelSmoothing::KernelSmoothing(const Distribution & kernel, const Bool bined, const UnsignedInteger binNumber, const Bool boundaryCorrection) : DistributionFactoryImplementation() , bandwidth_(Point(0)) , kernel_(kernel) , bined_(bined) , binNumber_(binNumber) , boundaryCorrection_(boundaryCorrection) { setName("KernelSmoothing"); // Only 1D kernel allowed here if (kernel.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: only 1D kernel allowed for product kernel smoothing"; if (bined && (binNumber < 2)) throw InvalidArgumentException(HERE) << "Error: The number of bins=" << binNumber << " is less than 2."; } /* Virtual constructor */ KernelSmoothing * KernelSmoothing::clone() const { return new KernelSmoothing(*this); } /* Compute the bandwidth according to Silverman's rule */ Point KernelSmoothing::computeSilvermanBandwidth(const Sample & sample) const { UnsignedInteger dimension = sample.getDimension(); UnsignedInteger size = sample.getSize(); // Compute the first scale estimator based on inter-quartile const Point scaleQuartile((sample.computeQuantilePerComponent(0.75) - sample.computeQuantilePerComponent(0.25)) / (2.0 * DistFunc::qNormal(0.75))); Point scaleStd(0); Point scale(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { if (scaleQuartile[i] > 0.0) scale[i] = scaleQuartile[i]; else { if (scaleStd.getSize() == 0) scaleStd = sample.computeStandardDeviationPerComponent(); scale[i] = scaleStd[i]; } } // Silverman's Normal rule Scalar factor = std::pow(size, -1.0 / (4.0 + dimension)) / kernel_.getStandardDeviation()[0]; // Scott's Normal rule return factor * scale; } struct PluginConstraint { /** Constructor from a sample and a derivative factor estimate */ PluginConstraint(const Sample & sample, const Scalar K, const UnsignedInteger order): sample_(sample), N_(sample.getSize()), K_(K), order_(order), hermitePolynomial_(HermiteFactory().build(order)) { // Normalize the polynomial hermitePolynomial_ = hermitePolynomial_ * (1.0 / hermitePolynomial_.getCoefficients()[order]); }; /** Compute the derivative estimate based on the given bandwidth */ Scalar computePhi(const Scalar h) const { // Quick return for odd order if (order_ % 2 == 1) return 0.0; Scalar phi = N_ * hermitePolynomial_(0.0); const Scalar cutOffPlugin = ResourceMap::GetAsScalar( "KernelSmoothing-CutOffPlugin" ); for (UnsignedInteger i = 1; i < N_; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { const Scalar dx = sample_[i][0] - sample_[j][0]; const Scalar x = dx / h; // Clipping: if x is large enough, the exponential factor is 0.0 if (std::abs(x) < cutOffPlugin) phi += 2.0 * hermitePolynomial_(x) * std::exp(-0.5 * x * x); } } const Scalar res = phi / ((N_ * (N_ - 1.0)) * std::pow(h, order_ + 1.0) * std::sqrt(2.0 * M_PI)); return res; } /** Compute the constraint for the plugin bandwidth */ Point computeBandwidthConstraint(const Point & x) const { const Scalar h = x[0]; const Scalar gammaH = K_ * std::pow(h, 5.0 / 7.0); const Scalar phiGammaH = computePhi(gammaH); const Scalar res = h - std::pow(2.0 * std::sqrt(M_PI) * phiGammaH * N_, -1.0 / 5.0); return Point(1, res); } const Sample & sample_; UnsignedInteger N_; Scalar K_; UnsignedInteger order_; UniVariatePolynomial hermitePolynomial_; }; /* Compute the bandwidth according to the plugin rule See Vikas Chandrakant Raykar, Ramani Duraiswami, "Very Fast optimal bandwidth selection for univariate kernel density estimation" CS-TR-4774 We implement only the basic estimator, not the fast version of it. */ Point KernelSmoothing::computePluginBandwidth(const Sample & sample) const { const UnsignedInteger dimension = sample.getDimension(); if (dimension != 1) throw InvalidArgumentException(HERE) << "Error: plugin bandwidth is available only for 1D sample"; const UnsignedInteger size = sample.getSize(); // Approximate the derivatives by smoothing under the Normal assumption const Scalar sd = sample.computeStandardDeviationPerComponent()[0]; const Scalar phi6Normal = -15.0 / (16.0 * std::sqrt(M_PI)) * std::pow(sd, -7.0); const Scalar phi8Normal = 105.0 / (32.0 * std::sqrt(M_PI)) * std::pow(sd, -9.0); const Scalar g1 = std::pow(-6.0 / (std::sqrt(2.0 * M_PI) * phi6Normal * size), 1.0 / 7.0); const Scalar g2 = std::pow(30.0 / (std::sqrt(2.0 * M_PI) * phi8Normal * size), 1.0 / 9.0); const Scalar phi4 = PluginConstraint(sample, 1.0, 4).computePhi(g1); const Scalar phi6 = PluginConstraint(sample, 1.0, 6).computePhi(g2); const Scalar K = std::pow(-6.0 * std::sqrt(2.0) * phi4 / phi6, 1.0 / 7.0); PluginConstraint constraint(sample, K, 4); const Function f(bindMethod(constraint, &PluginConstraint::computeBandwidthConstraint, 1, 1)); // Find a bracketing interval Scalar a = g1; Scalar b = g2; Scalar fA = f(Point(1, a))[0]; Scalar fB = f(Point(1, b))[0]; // While f has the same sign at the two bounds, update the interval while ((fA * fB > 0.0)) { a = 0.5 * a; fA = f(Point(1, a))[0]; if (fA * fB <= 0.0) break; b = 2.0 * b; fB = f(Point(1, b))[0]; } // Solve loosely the constraint equation Brent solver(ResourceMap::GetAsScalar( "KernelSmoothing-AbsolutePrecision" ), ResourceMap::GetAsScalar( "KernelSmoothing-RelativePrecision" ), ResourceMap::GetAsScalar( "KernelSmoothing-ResidualPrecision" ), ResourceMap::GetAsUnsignedInteger( "KernelSmoothing-MaximumIteration" )); return Point(1, solver.solve(f, 0.0, a, b) / kernel_.getStandardDeviation()[0]); } /* Compute the bandwidth according to a mixed rule: * simply use the plugin rule for small sample, and * estimate the ratio between the plugin rule and * the Silverman rule on a small sample, then * scale the Silverman bandwidth computed on the full * sample with this ratio */ Point KernelSmoothing::computeMixedBandwidth(const Sample & sample) const { const UnsignedInteger dimension = sample.getDimension(); if (dimension != 1) throw InvalidArgumentException(HERE) << "Error: mixed bandwidth is available only for 1D sample"; const UnsignedInteger size = sample.getSize(); // Small sample, just return the plugin bandwidth if (size <= ResourceMap::GetAsUnsignedInteger( "KernelSmoothing-SmallSize" )) return computePluginBandwidth(sample); Sample smallSample(ResourceMap::GetAsUnsignedInteger( "KernelSmoothing-SmallSize" ), 1); for (UnsignedInteger i = 0; i < ResourceMap::GetAsUnsignedInteger( "KernelSmoothing-SmallSize" ); ++i) smallSample[i][0] = sample[i][0]; const Scalar h1 = computePluginBandwidth(smallSample)[0]; const Scalar h2 = computeSilvermanBandwidth(smallSample)[0]; return computeSilvermanBandwidth(sample) * (h1 / h2); } /* Build a Normal kernel mixture based on the given sample. If no bandwith has already been set, Silverman's rule is used */ KernelSmoothing::Implementation KernelSmoothing::build(const Sample & sample) const { // For 1D sample, use the rule that give the best tradeoff between speed and precision if (sample.getDimension() == 1) return build(sample, computeMixedBandwidth(sample)); // For nD sample, use the only available rule return build(sample, computeSilvermanBandwidth(sample)); } /* Build a Normal kernel mixture based on the given sample and bandwidth * For multi-dimentional data, no binning and no boundary correction * If boundary correction: mirroring on the two sides, followed by truncation * If binning: condensation on a regular grid */ KernelSmoothing::Implementation KernelSmoothing::build(const Sample & sample, const Point & bandwidth) const { const UnsignedInteger dimension = sample.getDimension(); if (bandwidth.getDimension() != dimension) throw InvalidDimensionException(HERE) << "Error: the given bandwidth must have the same dimension as the given sample, here bandwidth dimension=" << bandwidth.getDimension() << " and sample dimension=" << dimension; setBandwidth(bandwidth); UnsignedInteger size = sample.getSize(); // The usual case: no boundary correction, no binning const Bool mustBin = bined_ && (dimension * std::log(1.0 * binNumber_) < std::log(1.0 * size)); if (bined_ != mustBin) LOGINFO("Will not bin the data because the bin number is greater than the sample size"); if ((dimension > 2) || ((!mustBin) && (!boundaryCorrection_))) { KernelMixture result(kernel_, bandwidth, sample); result.setDescription(sample.getDescription()); return result.clone(); } const Point xmin(sample.getMin()); const Point xmax(sample.getMax()); if (xmin == xmax) { Dirac result(xmin); result.setDescription(sample.getDescription()); return result.clone(); } // 2D binning? if ((dimension == 2) && mustBin) { Point reducedData(binNumber_ * binNumber_); Point x(binNumber_); Point y(binNumber_); const Scalar deltaX = (xmax[0] - xmin[0]) / (binNumber_ - 1); const Scalar deltaY = (xmax[1] - xmin[1]) / (binNumber_ - 1); const Scalar hX = 0.5 * deltaX; const Scalar hY = 0.5 * deltaY; for (UnsignedInteger i = 0; i < binNumber_; ++i) { x[i] = xmin[0] + i * deltaX; y[i] = xmin[1] + i * deltaY; } for (UnsignedInteger i = 0; i < size; ++i) { UnsignedInteger indexX = 0; Scalar sliceX = (sample[i][0] - (xmin[0] - hX)) / deltaX; if (sliceX >= 0.0) indexX = static_cast< UnsignedInteger > (trunc(sliceX)); if (indexX >= binNumber_) indexX = binNumber_ - 1; UnsignedInteger indexY = 0; Scalar sliceY = (sample[i][1] - (xmin[1] - hY)) / deltaY; if (sliceY >= 0.0) indexY = static_cast< UnsignedInteger > (trunc(sliceY)); if (indexY >= binNumber_) indexY = binNumber_ - 1; ++reducedData[indexX + indexY * binNumber_]; } Collection< Distribution > atoms(binNumber_ * binNumber_); for (UnsignedInteger i = 0; i < binNumber_; ++i) { Point point(2); point[0] = x[i]; for (UnsignedInteger j = 0; j < binNumber_; ++j) { point[1] = y[j]; KernelMixture atom(kernel_, bandwidth, Sample(1, point)); atoms[i + j * binNumber_] = atom; } } Mixture result(atoms, reducedData); result.setDescription(sample.getDescription()); return result.clone(); } // 2D binning // Here we are in the 1D case, with at least binning or boundary boundary correction Sample newSample(sample); Scalar xminNew = xmin[0]; Scalar xmaxNew = xmax[0]; // If boundary correction, if (boundaryCorrection_) { Scalar h = bandwidth[0]; // Reflect and add points close to the boundaries to the sample for (UnsignedInteger i = 0; i < size; i++) { const Point realization(sample[i]); if (realization[0] <= xmin[0] + h) newSample.add(2.0 * xmin - realization); if (realization[0] >= xmax[0] - h) newSample.add(2.0 * xmax - realization); } } // Now, work on the extended sample if (!mustBin) { TruncatedDistribution result(KernelMixture(kernel_, bandwidth, newSample), xmin[0], xmax[0]); result.setDescription(sample.getDescription()); return result.clone(); } if (boundaryCorrection_) { xminNew = newSample.getMin()[0]; xmaxNew = newSample.getMax()[0]; } size = newSample.getSize(); // Here, we have to bin the data Point reducedData(binNumber_); Point x(binNumber_); const Scalar delta = (xmaxNew - xminNew) / (binNumber_ - 1); const Scalar h = 0.5 * delta; for (UnsignedInteger i = 0; i < binNumber_; ++i) x[i] = xminNew + i * delta; for (UnsignedInteger i = 0; i < size; ++i) { UnsignedInteger index = 0; Scalar slice = (newSample[i][0] - (xminNew - h)) / delta; if (slice >= 0.0) index = static_cast< UnsignedInteger > (trunc(slice)); if (index >= binNumber_) index = binNumber_ - 1; ++reducedData[index]; } Collection< Distribution > atoms(binNumber_); for (UnsignedInteger i = 0; i < binNumber_; ++i) { KernelMixture atom(kernel_, bandwidth, Sample(1, Point(1, x[i]))); atoms[i] = atom; } if (boundaryCorrection_) { TruncatedDistribution result(Mixture(atoms, reducedData), xmin[0], xmax[0]); result.setDescription(sample.getDescription()); return result.clone(); } Mixture result(atoms, reducedData); result.setDescription(sample.getDescription()); return result.clone(); } /* Bandwidth accessor */ void KernelSmoothing::setBandwidth(const Point & bandwidth) const { // Check the given bandwidth for (UnsignedInteger i = 0; i < bandwidth.getDimension(); i++) if (!(bandwidth[i] > 0.0)) throw InvalidArgumentException(HERE) << "Error: the bandwidth must be > 0, here bandwith=" << bandwidth; bandwidth_ = bandwidth; } Point KernelSmoothing::getBandwidth() const { return bandwidth_; } Distribution KernelSmoothing::getKernel() const { return kernel_; } void KernelSmoothing::setBoundaryCorrection(const Bool boundaryCorrection) { boundaryCorrection_ = boundaryCorrection; } /* Method save() stores the object through the StorageManager */ void KernelSmoothing::save(Advocate & adv) const { DistributionFactoryImplementation::save(adv); adv.saveAttribute("bandwidth_", bandwidth_); adv.saveAttribute("kernel_", kernel_); adv.saveAttribute("bined_", bined_); adv.saveAttribute("binNumber_", binNumber_); adv.saveAttribute("boundaryCorrection_", boundaryCorrection_); } /* Method load() reloads the object from the StorageManager */ void KernelSmoothing::load(Advocate & adv) { DistributionFactoryImplementation::load(adv); adv.loadAttribute("bandwidth_", bandwidth_); adv.loadAttribute("kernel_", kernel_); adv.loadAttribute("bined_", bined_); adv.loadAttribute("binNumber_", binNumber_); adv.loadAttribute("boundaryCorrection_", boundaryCorrection_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/KolmogorovSmirnovDist.c000066400000000000000000000464151307543307100264620ustar00rootroot00000000000000/******************************************************************** * * File: KolmogorovSmirnovDist.c * Environment: ISO C99 or ANSI C89 * Author: Richard Simard * Organization: DIRO, Université de Montréal * Date: 1 February 2012 * Version 1.1 * Copyright 1 march 2010 by Université de Montréal, Richard Simard and Pierre L'Ecuyer ===================================================================== This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Used in OpenTURNS with written permission of the author. See COPYING.KolmogorovSmirnov =====================================================================*/ #include "KolmogorovSmirnovDist.h" #include #include #define num_Pi 3.14159265358979323846 /* PI */ #define num_Ln2 0.69314718055994530941 /* log(2) */ /* For x close to 0 or 1, we use the exact formulae of Ruben-Gambino in all cases. For n <= NEXACT, we use exact algorithms: the Durbin matrix and the Pomeranz algorithms. For n > NEXACT, we use asymptotic methods except for x close to 0 where we still use the method of Durbin for n <= NKOLMO. For n > NKOLMO, we use asymptotic methods only and so the precision is less for x close to 0. We could increase the limit NKOLMO to 10^6 to get better precision for x close to 0, but at the price of a slower speed. */ #define NEXACT 500 #define NKOLMO 100000 /* The Durbin matrix algorithm for the Kolmogorov-Smirnov distribution */ static double DurbinMatrix (int n, double d); /*========================================================================*/ #if defined(_MSC_VER) && (_MSC_VER < 1800) /* For ANSI C89 only, not for ISO C99 */ #define MAXI 50 #define EPSILON 1.0e-15 double log1p (double x) { /* returns a value equivalent to log(1 + x) accurate also for small x. */ if (fabs (x) > 0.1) { return log (1.0 + x); } else { double term = x; double sum = x; int s = 2; while ((fabs (term) > EPSILON * fabs (sum)) && (s < MAXI)) { term *= -x; sum += term / s; s++; } return sum; } } #undef MAXI #undef EPSILON #endif /*========================================================================*/ #define MFACT 30 /* The natural logarithm of factorial n! for 0 <= n <= MFACT */ static double LnFactorial[MFACT + 1] = { 0., 0., 0.6931471805599453, 1.791759469228055, 3.178053830347946, 4.787491742782046, 6.579251212010101, 8.525161361065415, 10.60460290274525, 12.80182748008147, 15.10441257307552, 17.50230784587389, 19.98721449566188, 22.55216385312342, 25.19122118273868, 27.89927138384088, 30.67186010608066, 33.50507345013688, 36.39544520803305, 39.33988418719949, 42.33561646075348, 45.3801388984769, 48.47118135183522, 51.60667556776437, 54.7847293981123, 58.00360522298051, 61.26170176100199, 64.55753862700632, 67.88974313718154, 71.257038967168, 74.65823634883016 }; /*------------------------------------------------------------------------*/ static double getLogFactorial (int n) { /* Returns the natural logarithm of factorial n! */ if (n <= MFACT) { return LnFactorial[n]; } else { double x = (double) (n + 1); double y = 1.0 / (x * x); double z = ((-(5.95238095238E-4 * y) + 7.936500793651E-4) * y - 2.7777777777778E-3) * y + 8.3333333333333E-2; z = ((x - 0.5) * log (x) - x) + 9.1893853320467E-1 + z / x; return z; } } /*------------------------------------------------------------------------*/ static double rapfac (int n) { /* Computes n! / n^n */ int i; double res = 1.0 / n; for (i = 2; i <= n; i++) { res *= (double) i / n; } return res; } /*========================================================================*/ static double **CreateMatrixD (int N, int M) { int i; double **T2; T2 = (double **) malloc (N * sizeof (double *)); T2[0] = (double *) malloc (N * M * sizeof (double)); for (i = 1; i < N; i++) T2[i] = T2[0] + i * M; return T2; } static void DeleteMatrixD (double **T) { free (T[0]); free (T); } /*========================================================================*/ static double KSPlusbarAsymp (int n, double x) { /* Compute the probability of the KS+ distribution using an asymptotic formula */ double t = (6.0 * n * x + 1); double z = t * t / (18.0 * n); double v = 1.0 - (2.0 * z * z - 4.0 * z - 1.0) / (18.0 * n); if (v <= 0.0) return 0.0; v = v * exp (-z); if (v >= 1.0) return 1.0; return v; } /*-------------------------------------------------------------------------*/ static double KSPlusbarUpper (int n, double x) { /* Compute the probability of the KS+ distribution in the upper tail using Smirnov's stable formula */ const double EPSILON = 1.0E-12; double q; double Sum = 0.0; double term; double t; double LogCom; double LOGJMAX; int j; int jdiv; int jmax = (int) (n * (1.0 - x)); if (n > 200000) return KSPlusbarAsymp (n, x); /* Avoid log(0) for j = jmax and q ~ 1.0 */ if ((1.0 - x - (double) jmax / n) <= 0.0) jmax--; if (n > 3000) jdiv = 2; else jdiv = 3; j = jmax / jdiv + 1; LogCom = getLogFactorial (n) - getLogFactorial (j) - getLogFactorial (n - j); LOGJMAX = LogCom; while (j <= jmax) { q = (double) j / n + x; term = LogCom + (j - 1) * log (q) + (n - j) * log1p (-q); t = exp (term); Sum += t; LogCom += log ((double) (n - j) / (j + 1)); if (t <= Sum * EPSILON) break; j++; } j = jmax / jdiv; LogCom = LOGJMAX + log ((double) (j + 1) / (n - j)); while (j > 0) { q = (double) j / n + x; term = LogCom + (j - 1) * log (q) + (n - j) * log1p (-q); t = exp (term); Sum += t; LogCom += log ((double) j / (n - j + 1)); if (t <= Sum * EPSILON) break; j--; } Sum *= x; /* add the term j = 0 */ Sum += exp (n * log1p (-x)); return Sum; } /*========================================================================*/ static double Pelz (int n, double x) { /* Approximating the Lower Tail-Areas of the Kolmogorov-Smirnov One-Sample Statistic, Wolfgang Pelz and I. J. Good, Journal of the Royal Statistical Society, Series B. Vol. 38, No. 2 (1976), pp. 152-156 */ const int JMAX = 20; const double EPS = 1.0e-10; const double C = 2.506628274631001; /* sqrt(2*Pi) */ const double C2 = 1.2533141373155001; /* sqrt(Pi/2) */ const double PI2 = num_Pi * num_Pi; const double PI4 = PI2 * PI2; const double RACN = sqrt ((double) n); const double z = RACN * x; const double z2 = z * z; const double z4 = z2 * z2; const double z6 = z4 * z2; const double w = PI2 / (2.0 * z * z); double ti, term, tom; double sum; int j; term = 1; j = 0; sum = 0; while (j <= JMAX && term > EPS * sum) { ti = j + 0.5; term = exp (-ti * ti * w); sum += term; j++; } sum *= C / z; term = 1; tom = 0; j = 0; while (j <= JMAX && fabs (term) > EPS * fabs (tom)) { ti = j + 0.5; term = (PI2 * ti * ti - z2) * exp (-ti * ti * w); tom += term; j++; } sum += tom * C2 / (RACN * 3.0 * z4); term = 1; tom = 0; j = 0; while (j <= JMAX && fabs (term) > EPS * fabs (tom)) { ti = j + 0.5; term = 6 * z6 + 2 * z4 + PI2 * (2 * z4 - 5 * z2) * ti * ti + PI4 * (1 - 2 * z2) * ti * ti * ti * ti; term *= exp (-ti * ti * w); tom += term; j++; } sum += tom * C2 / (n * 36.0 * z * z6); term = 1; tom = 0; j = 1; while (j <= JMAX && term > EPS * tom) { ti = j; term = PI2 * ti * ti * exp (-ti * ti * w); tom += term; j++; } sum -= tom * C2 / (n * 18.0 * z * z2); term = 1; tom = 0; j = 0; while (j <= JMAX && fabs (term) > EPS * fabs (tom)) { ti = j + 0.5; ti = ti * ti; term = -30 * z6 - 90 * z6 * z2 + PI2 * (135 * z4 - 96 * z6) * ti + PI4 * (212 * z4 - 60 * z2) * ti * ti + PI2 * PI4 * ti * ti * ti * (5 - 30 * z2); term *= exp (-ti * w); tom += term; j++; } sum += tom * C2 / (RACN * n * 3240.0 * z4 * z6); term = 1; tom = 0; j = 1; while (j <= JMAX && fabs (term) > EPS * fabs (tom)) { ti = j * j; term = (3 * PI2 * ti * z2 - PI4 * ti * ti) * exp (-ti * w); tom += term; j++; } sum += tom * C2 / (RACN * n * 108.0 * z6); return sum; } /*=========================================================================*/ static void CalcFloorCeil ( int n, /* sample size */ double t, /* = nx */ double *A, /* A_i */ double *Atflo, /* floor (A_i - t) */ double *Atcei /* ceiling (A_i + t) */ ) { /* Precompute A_i, floors, and ceilings for limits of sums in the Pomeranz algorithm */ int i; int ell = (int) t; /* floor (t) */ double z = t - ell; /* t - floor (t) */ double w = ceil (t) - t; if (z > 0.5) { for (i = 2; i <= 2 * n + 2; i += 2) Atflo[i] = i / 2 - 2 - ell; for (i = 1; i <= 2 * n + 2; i += 2) Atflo[i] = i / 2 - 1 - ell; for (i = 2; i <= 2 * n + 2; i += 2) Atcei[i] = i / 2 + ell; for (i = 1; i <= 2 * n + 2; i += 2) Atcei[i] = i / 2 + 1 + ell; } else if (z > 0.0) { for (i = 1; i <= 2 * n + 2; i++) Atflo[i] = i / 2 - 1 - ell; for (i = 2; i <= 2 * n + 2; i++) Atcei[i] = i / 2 + ell; Atcei[1] = 1 + ell; } else { /* z == 0 */ for (i = 2; i <= 2 * n + 2; i += 2) Atflo[i] = i / 2 - 1 - ell; for (i = 1; i <= 2 * n + 2; i += 2) Atflo[i] = i / 2 - ell; for (i = 2; i <= 2 * n + 2; i += 2) Atcei[i] = i / 2 - 1 + ell; for (i = 1; i <= 2 * n + 2; i += 2) Atcei[i] = i / 2 + ell; } if (w < z) z = w; A[0] = A[1] = 0; A[2] = z; A[3] = 1 - A[2]; for (i = 4; i <= 2 * n + 1; i++) A[i] = A[i - 2] + 1; A[2 * n + 2] = n; } /*========================================================================*/ static double Pomeranz (int n, double x) { /* The Pomeranz algorithm to compute the KS distribution */ const double EPS = 1.0e-15; const int ENO = 350; const double RENO = ldexp (1.0, ENO); /* for renormalization of V */ int coreno; /* counter: how many renormalizations */ const double t = n * x; double w, sum, minsum; int i, j, k, s; int r1, r2; /* Indices i and i-1 for V[i][] */ int jlow, jup, klow, kup, kup0; double *A; double *Atflo; double *Atcei; double **V; double **H; /* = pow(w, j) / Factorial(j) */ A = (double *) calloc ((size_t) (2 * n + 3), sizeof (double)); Atflo = (double *) calloc ((size_t) (2 * n + 3), sizeof (double)); Atcei = (double *) calloc ((size_t) (2 * n + 3), sizeof (double)); V = (double **) CreateMatrixD (2, n + 2); H = (double **) CreateMatrixD (4, n + 2); CalcFloorCeil (n, t, A, Atflo, Atcei); for (j = 1; j <= n + 1; j++) V[0][j] = 0; for (j = 2; j <= n + 1; j++) V[1][j] = 0; V[1][1] = RENO; coreno = 1; /* Precompute H[][] = (A[j] - A[j-1]^k / k! for speed */ H[0][0] = 1; w = 2.0 * A[2] / n; for (j = 1; j <= n + 1; j++) H[0][j] = w * H[0][j - 1] / j; H[1][0] = 1; w = (1.0 - 2.0 * A[2]) / n; for (j = 1; j <= n + 1; j++) H[1][j] = w * H[1][j - 1] / j; H[2][0] = 1; w = A[2] / n; for (j = 1; j <= n + 1; j++) H[2][j] = w * H[2][j - 1] / j; H[3][0] = 1; for (j = 1; j <= n + 1; j++) H[3][j] = 0; r1 = 0; r2 = 1; for (i = 2; i <= 2 * n + 2; i++) { jlow = 2 + (int) Atflo[i]; if (jlow < 1) jlow = 1; jup = (int) Atcei[i]; if (jup > n + 1) jup = n + 1; klow = 2 + (int) Atflo[i - 1]; if (klow < 1) klow = 1; kup0 = (int) Atcei[i - 1]; /* Find to which case it corresponds */ w = (A[i] - A[i - 1]) / n; s = -1; for (j = 0; j < 4; j++) { if (fabs (w - H[j][1]) <= EPS) { s = j; break; } } /* assert (s >= 0, "Pomeranz: s < 0"); */ minsum = RENO; r1 = (r1 + 1) & 1; /* i - 1 */ r2 = (r2 + 1) & 1; /* i */ for (j = jlow; j <= jup; j++) { kup = kup0; if (kup > j) kup = j; sum = 0; for (k = kup; k >= klow; k--) sum += V[r1][k] * H[s][j - k]; V[r2][j] = sum; if (sum < minsum) minsum = sum; } if (minsum < 1.0e-280) { /* V is too small: renormalize to avoid underflow of probabilities */ for (j = jlow; j <= jup; j++) V[r2][j] *= RENO; coreno++; /* keep track of log of RENO */ } } sum = V[r2][n + 1]; free (A); free (Atflo); free (Atcei); DeleteMatrixD (H); DeleteMatrixD (V); w = getLogFactorial (n) - coreno * ENO * num_Ln2 + log (sum); if (w >= 0.) return 1.; return exp (w); } /*========================================================================*/ static double cdfSpecial (int n, double x) { /* The KS distribution is known exactly for these cases */ /* For nx^2 > 18, KSfbar(n, x) is smaller than 5e-16 */ if ((n * x * x >= 18.0) || (x >= 1.0)) return 1.0; if (x <= 0.5 / n) return 0.0; if (n == 1) return 2.0 * x - 1.0; if (x <= 1.0 / n) { double t = 2.0 * x * n - 1.0; double w; if (n <= NEXACT) { w = rapfac (n); return w * pow (t, (double) n); } w = getLogFactorial (n) + n * log (t / n); return exp (w); } if (x >= 1.0 - 1.0 / n) { return 1.0 - 2.0 * pow (1.0 - x, (double) n); } return -1.0; } /*========================================================================*/ double KScdf (int n, double x) { const double w = n * x * x; double u = cdfSpecial (n, x); if (u >= 0.0) return u; if (n <= NEXACT) { if (w < 0.754693) return DurbinMatrix (n, x); if (w < 4.0) return Pomeranz (n, x); return 1.0 - KSfbar (n, x); } if ((w * x * n <= 7.0) && (n <= NKOLMO)) return DurbinMatrix (n, x); return Pelz (n, x); } /*=========================================================================*/ static double fbarSpecial (int n, double x) { const double w = n * x * x; if ((w >= 370.0) || (x >= 1.0)) return 0.0; if ((w <= 0.0274) || (x <= 0.5 / n)) return 1.0; if (n == 1) return 2.0 - 2.0 * x; if (x <= 1.0 / n) { double z; double t = 2.0 * x * n - 1.0; if (n <= NEXACT) { z = rapfac (n); return 1.0 - z * pow (t, (double) n); } z = getLogFactorial (n) + n * log (t / n); return 1.0 - exp (z); } if (x >= 1.0 - 1.0 / n) { return 2.0 * pow (1.0 - x, (double) n); } return -1.0; } /*========================================================================*/ double KSfbar (int n, double x) { const double w = n * x * x; double v = fbarSpecial (n, x); if (v >= 0.0) return v; if (n <= NEXACT) { if (w < 4.0) return 1.0 - KScdf (n, x); else return 2.0 * KSPlusbarUpper (n, x); } if (w >= 2.65) return 2.0 * KSPlusbarUpper (n, x); return 1.0 - KScdf (n, x); } /*========================================================================= The following implements the Durbin matrix algorithm and was programmed by G. Marsaglia, Wai Wan Tsang and Jingbo Wong. I have made small modifications in their program. (Richard Simard) =========================================================================*/ /* The C program to compute Kolmogorov's distribution K(n,d) = Prob(D_n < d), where D_n = max(x_1-0/n,x_2-1/n...,x_n-(n-1)/n,1/n-x_1,2/n-x_2,...,n/n-x_n) with x_17 DIGIT ACCURACY IN THE RIGHT TAIL */ #if 0 s = d * d * n; if (s > 7.24 || (s > 3.76 && n > 99)) return 1 - 2 * exp (-(2.000071 + .331 / sqrt (n) + 1.409 / n) * s); #endif k = (int) (n * d) + 1; m = 2 * k - 1; h = k - n * d; H = (double *) malloc ((m * m) * sizeof (double)); Q = (double *) malloc ((m * m) * sizeof (double)); for (i = 0; i < m; i++) for (j = 0; j < m; j++) if (i - j + 1 < 0) H[i * m + j] = 0; else H[i * m + j] = 1; for (i = 0; i < m; i++) { H[i * m] -= pow (h, (double) (i + 1)); H[(m - 1) * m + i] -= pow (h, (double) (m - i)); } H[(m - 1) * m] += (2 * h - 1 > 0 ? pow (2 * h - 1, (double) m) : 0); for (i = 0; i < m; i++) for (j = 0; j < m; j++) if (i - j + 1 > 0) for (g = 1; g <= i - j + 1; g++) H[i * m + j] /= g; eH = 0; mPower (H, eH, Q, &eQ, m, n); s = Q[(k - 1) * m + k - 1]; for (i = 1; i <= n; i++) { s = s * (double) i / n; if (s < INORM) { s *= NORM; eQ -= LOGNORM; } } s *= pow (10., (double) eQ); free (H); free (Q); return s; } static void mMultiply (double *A, double *B, double *C, int m) { int i, j, k; double s; for (i = 0; i < m; i++) for (j = 0; j < m; j++) { s = 0.; for (k = 0; k < m; k++) s += A[i * m + k] * B[k * m + j]; C[i * m + j] = s; } } static void renormalize (double *V, int m, int *p) { int i; for (i = 0; i < m * m; i++) V[i] *= INORM; *p += LOGNORM; } static void mPower (double *A, int eA, double *V, int *eV, int m, int n) { double *B; int eB, i; if (n == 1) { for (i = 0; i < m * m; i++) V[i] = A[i]; *eV = eA; return; } mPower (A, eA, V, eV, m, n / 2); B = (double *) malloc ((m * m) * sizeof (double)); mMultiply (V, V, B, m); eB = 2 * (*eV); if (B[(m / 2) * m + (m / 2)] > NORM) renormalize (B, m, &eB); if (n % 2 == 0) { for (i = 0; i < m * m; i++) V[i] = B[i]; *eV = eB; } else { mMultiply (A, B, V, m); *eV = eA + eB; } if (V[(m / 2) * m + (m / 2)] > NORM) renormalize (V, m, eV); free (B); } /*=========================================================================*/ #if 0 #include int main (void) { double x, y, z; const int K = 100; int n = 60; int j; printf ("n = %5d\n\n", n); printf (" x cdf fbar\n"); for (j = 0; j <= K; j++) { x = (double) j / K; y = KScdf (n, x); z = KSfbar (n, x); printf ("%8.3g %22.15g %22.15g\n", x, y, z); } return 0; } #endif openturns-1.9/lib/src/Uncertainty/Distribution/KolmogorovSmirnovDist.h000066400000000000000000000055021307543307100264570ustar00rootroot00000000000000#ifndef KOLMOGOROVSMIRNOVDIST_H #define KOLMOGOROVSMIRNOVDIST_H #ifdef __cplusplus extern "C" { #endif /******************************************************************** * * File: KolmogorovSmirnovDist.h * Environment: ISO C99 or ANSI C89 * Author: Richard Simard * Organization: DIRO, Université de Montréal * Date: 1 February 2012 * Version 1.1 * * Copyright March 2010 by Université de Montréal, Richard Simard and Pierre L'Ecuyer ===================================================================== This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Used in OpenTURNS with written permission of the author. See COPYING.KolmogorovSmirnov =====================================================================*/ /* * * The Kolmogorov-Smirnov test statistic D_n is defined by * * D_n = sup_x |F(x) - S_n(x)| * * where n is the sample size, F(x) is a completely specified theoretical * distribution, and S_n(x) is an empirical distribution function. * * * The function * * double KScdf (int n, double x); * * computes the cumulative probability P[D_n <= x] of the 2-sided 1-sample * Kolmogorov-Smirnov distribution with sample size n at x. * It returns at least 13 decimal digits of precision for n <= 500, * at least 7 decimal digits of precision for 500 < n <= 100000, * and a few correct decimal digits for n > 100000. * */ double KScdf (int n, double x); /* * The function * * double KSfbar (int n, double x); * * computes the complementary cumulative probability P[D_n >= x] of the * 2-sided 1-sample Kolmogorov-Smirnov distribution with sample size n at x. * It returns at least 10 decimal digits of precision for n <= 500, * at least 6 decimal digits of precision for 500 < n <= 200000, * and a few correct decimal digits for n > 200000. * */ double KSfbar (int n, double x); /* * NOTE: * The ISO C99 function log1p of the standard math library does not exist in * ANSI C89. Here, it is programmed explicitly in KolmogorovSmirnovDist.c. * For ANSI C89 compilers, change the preprocessor condition to make it * available. */ #ifdef __cplusplus } #endif #endif openturns-1.9/lib/src/Uncertainty/Distribution/Laplace.cxx000066400000000000000000000227021307543307100240340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Laplace distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Laplace.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Laplace); static const Factory Factory_Laplace; /* Default constructor */ Laplace::Laplace() : ContinuousDistribution() , lambda_(1.0) , mu_(0.0) { setName( "Laplace" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Laplace::Laplace(const Scalar lambda, const Scalar mu) : ContinuousDistribution() , lambda_(lambda) , mu_(mu) { setName( "Laplace" ); // We set the dimension of the Laplace distribution setDimension( 1 ); // To check that lambda > 0 setLambda(lambda); // This call is needed as lambda_ == lambda and setLambda will not compute the range computeRange(); } /* Comparison operator */ Bool Laplace::operator ==(const Laplace & other) const { if (this == &other) return true; return (lambda_ == other.lambda_) && (mu_ == other.mu_); } Bool Laplace::equals(const DistributionImplementation & other) const { const Laplace* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Laplace::__repr__() const { OSS oss; oss << "class=" << Laplace::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lambda=" << lambda_ << " mu=" << mu_; return oss; } String Laplace::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(lambda = " << lambda_ << ", mu = " << mu_ << ")"; return oss; } /* Virtual constructor */ Laplace * Laplace::clone() const { return new Laplace(*this); } /* Get one realization of the distribution */ Point Laplace::getRealization() const { const Scalar d = RandomGenerator::Generate() - 0.5; if (d < 0.0) return Point(1, mu_ + log1p(2.0 * d) / lambda_); return Point(1, mu_ - log1p(-2.0 * d) / lambda_); } /* Get the DDF of the distribution */ Point Laplace::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar value = computePDF(point) * lambda_; return (point[0] < mu_ ? Point(1, value) : Point(1, -value)); } /* Get the PDF of the distribution */ Scalar Laplace::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return 0.5 * lambda_ * std::exp(-lambda_ * std::abs(point[0] - mu_)); } Scalar Laplace::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return std::log(0.5 * lambda_) - lambda_ * std::abs(point[0] - mu_); } /* Get the CDF of the distribution */ Scalar Laplace::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar u = lambda_ * (point[0] - mu_); if (u < 0.0) return 0.5 * std::exp(u); return 1.0 - 0.5 * std::exp(-u); } /* Get the complementary CDF of the distribution */ Scalar Laplace::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar u = lambda_ * (point[0] - mu_); if (u < 0.0) return 1.0 - 0.5 * std::exp(u); return 0.5 * std::exp(-u); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Laplace::computeCharacteristicFunction(const Scalar x) const { const Scalar t = x / lambda_; return std::exp(Complex(0.0, mu_ * x)) / (1.0 + t * t); } Complex Laplace::computeLogCharacteristicFunction(const Scalar x) const { const Scalar t = x / lambda_; return Complex(0.0, mu_ * x) - log1p(t * t); } /* Get the PDFGradient of the distribution */ Point Laplace::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(2, 0.0); const Scalar factor = std::abs(point[0] - mu_) * lambda_; const Scalar expFactor = std::exp(-factor); pdfGradient[0] = 0.5 * expFactor * (1.0 - factor); pdfGradient[1] = (point[0] > mu_ ? 0.5 * lambda_ * lambda_ * expFactor : -0.5 * lambda_ * lambda_ * expFactor); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Laplace::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(2, 0.0); const Scalar factor = std::abs(point[0] - mu_) * lambda_; const Scalar expFactor = std::exp(-factor); cdfGradient[0] = 0.5 * factor / lambda_ * expFactor; cdfGradient[1] = -0.5 * lambda_ * expFactor; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Laplace::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar d = tail ? 0.5 - prob : prob - 0.5; if (d < 0.0) return mu_ + log1p(2.0 * d) / lambda_; return mu_ - log1p(-2.0 * d) / lambda_; } /* Compute the mean of the distribution */ void Laplace::computeMean() const { mean_ = Point(1, mu_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Laplace::getStandardDeviation() const { return Point(1, std::sqrt(2.0) / lambda_); } /* Get the skewness of the distribution */ Point Laplace::getSkewness() const { return Point(1, 0.0); } /* Get the kurtosis of the distribution */ Point Laplace::getKurtosis() const { return Point(1, 6.0); } /* Get the moments of the standardized distribution */ Point Laplace::getStandardMoment(const UnsignedInteger n) const { if ((n % 2) == 1) return Point(1, 0.0); return Point(1, SpecFunc::Gamma(n + 1)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Laplace::Implementation Laplace::getStandardRepresentative() const { return Laplace(1.0, 0.0).clone(); } /* Compute the covariance of the distribution */ void Laplace::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 2.0 / (lambda_ * lambda_); isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ Point Laplace::getParameter() const { Point point(2); point[0] = lambda_; point[1] = mu_; return point; } void Laplace::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Laplace(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Laplace::getParameterDescription() const { Description description(2); description[0] = "lambda"; description[1] = "mu"; return description; } /* Check if the distribution is elliptical */ Bool Laplace::isElliptical() const { return true; } /* Mu accessor */ void Laplace::setMu(const Scalar mu) { if (mu != mu_) { mu_ = mu; isAlreadyComputedMean_ = false; // The covariance does not depend on mu computeRange(); } } /* Mu accessor */ Scalar Laplace::getMu() const { return mu_; } /* Lambda accessor */ void Laplace::setLambda(const Scalar lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be positive"; if (lambda != lambda_) { lambda_ = lambda; isAlreadyComputedCovariance_ = false; // The mean does not depend on lambda computeRange(); } } /* Lambda accessor */ Scalar Laplace::getLambda() const { return lambda_; } /* Get the PDF singularities inside of the range - 1D only */ Point Laplace::getSingularities() const { return Point(1, mu_); } /* Method save() stores the object through the StorageManager */ void Laplace::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "mu_", mu_ ); } /* Method load() reloads the object from the StorageManager */ void Laplace::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "mu_", mu_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LaplaceFactory.cxx000066400000000000000000000056461307543307100253740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Laplace distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LaplaceFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LaplaceFactory); static const Factory Factory_LaplaceFactory; /* Default constructor */ LaplaceFactory::LaplaceFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ LaplaceFactory * LaplaceFactory::clone() const { return new LaplaceFactory(*this); } /* Here is the interface that all derived class must implement */ LaplaceFactory::Implementation LaplaceFactory::build(const Sample & sample) const { return buildAsLaplace(sample).clone(); } LaplaceFactory::Implementation LaplaceFactory::build(const Point & parameters) const { return buildAsLaplace(parameters).clone(); } LaplaceFactory::Implementation LaplaceFactory::build() const { return buildAsLaplace().clone(); } Laplace LaplaceFactory::buildAsLaplace(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Laplace distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Laplace distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const UnsignedInteger size = sample.getSize(); const Scalar mu = sample.computeMedian()[0]; Scalar tau = 0.0; for (UnsignedInteger i = 0; i < size; ++i) tau += std::abs(sample[i][0] - mu); if (tau == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Laplace distribution with infinite lambda."; Laplace result(size / tau, mu); result.setDescription(sample.getDescription()); return result; } Laplace LaplaceFactory::buildAsLaplace(const Point & parameters) const { try { Laplace distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Laplace distribution from the given parameters"; } } Laplace LaplaceFactory::buildAsLaplace() const { return Laplace(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LogNormal.cxx000066400000000000000000000425421307543307100243710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The LogNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/LogNormal.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/HermiteFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogNormal); static const Factory Factory_LogNormal; /* Default constructor */ LogNormal::LogNormal() : ContinuousDistribution() , muLog_(0.0) , sigmaLog_(0.0) , gamma_(0.0) // 1 / SQRT(2Pi) , normalizationFactor_(0.39894228040143267794) , H_(0) , hermiteNodes_(0) , hermiteWeights_(0) { setName("LogNormal"); setDimension(1); // The arguments must be different from the initialization values, which is the case as sigmaLog_ is initialized by 0 setMuLogSigmaLog(0.0, 1.0); computeRange(); } /* Default constructor */ LogNormal::LogNormal(const Scalar muLog, const Scalar sigmaLog, const Scalar gamma) : ContinuousDistribution() , muLog_(0.0) , sigmaLog_(0.0) , gamma_(gamma) , normalizationFactor_(0.0) , H_(0.0) , hermiteNodes_(0) , hermiteWeights_(0) { setName("LogNormal"); setMuLogSigmaLog(muLog, sigmaLog); normalizationFactor_ = 1.0 / (sigmaLog_ * std::sqrt(2.0 * M_PI)); setDimension(1); } /* Comparison operator */ Bool LogNormal::operator ==(const LogNormal & other) const { if (this == &other) return true; return (muLog_ == other.muLog_) && (sigmaLog_ == other.sigmaLog_) && (gamma_ == other.gamma_); } Bool LogNormal::equals(const DistributionImplementation & other) const { const LogNormal* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String LogNormal::__repr__() const { OSS oss(true); oss << "class=" << LogNormal::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " muLog=" << muLog_ << " sigmaLog=" << sigmaLog_ << " gamma=" << gamma_; return oss; } String LogNormal::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(muLog = " << muLog_ << ", sigmaLog = " << sigmaLog_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ LogNormal * LogNormal::clone() const { return new LogNormal(*this); } /* Compute the numerical range of the distribution given the parameters values */ void LogNormal::computeRange() { Point lowerBound(1, gamma_); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point LogNormal::getRealization() const { return Point(1, gamma_ + std::exp(muLog_ + sigmaLog_ * DistFunc::rNormal())); } /* Get the DDF of the distribution */ Point LogNormal::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return Point(1, 0.0); Scalar v = sigmaLog_ * sigmaLog_; return Point(1, (muLog_ - std::log(x) - v) / (v * x) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar LogNormal::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return 0.0; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; return normalizationFactor_ * std::exp(-0.5 * logX * logX) / x; } Scalar LogNormal::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return SpecFunc::LogMinScalar; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; return std::log(normalizationFactor_) - 0.5 * logX * logX - std::log(x); } /* Get the CDF of the distribution */ Scalar LogNormal::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return 0.0; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; return DistFunc::pNormal(logX); } Scalar LogNormal::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return 1.0; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; return DistFunc::pNormal(logX, true); } /* Compute the integrand that is involved in the computation of the characteristic function */ Complex LogNormal::characteristicIntegrand(const Scalar eta, const Scalar sStar) const { return std::exp(Complex(-sStar * (eta - std::exp(sigmaLog_ * eta) / sigmaLog_), -M_PI * eta / (2.0 * sigmaLog_))); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) * Algorithm adapted from: * John A. Gubner, "A New Formula for Lognormal Characteristic Functions", * IEEE transactions on vehicular technology, vol. 55, no. 5, September 2006. */ Complex LogNormal::computeCharacteristicFunction(const Scalar x) const { // Quick return for null argument if (x == 0.0) return 1.0; return std::exp(computeLogCharacteristicFunction(x)); } Complex LogNormal::computeLogCharacteristicFunction(const Scalar x) const { // Quick return for null argument if (x == 0.0) return 0.0; // Compute the characteristic function for the positive arguments const Scalar nu = std::abs(x) * std::exp(muLog_); const Scalar sigma2 = sigmaLog_ * sigmaLog_; Complex logCFValue(0.0); // Quick return for small argument if (nu < 0.001 * std::exp(-1.5 * sigma2)) { const Scalar nu2 = nu * nu; logCFValue = std::log(Complex(1.0 - 0.5 * nu2 * std::exp(2.0 * sigma2), nu * std::exp(0.5 * sigma2) * (1.0 - nu2 * std::exp(4.0 * sigma2) / 6.0))); } else { UnsignedInteger integrationNodesNumber = ResourceMap::GetAsUnsignedInteger("LogNormal-CharacteristicFunctionIntegrationNodes"); // Check if the integration nodes have to be recomputed if (integrationNodesNumber != hermiteNodes_.getSize()) hermiteNodes_ = HermiteFactory().getNodesAndWeights(integrationNodesNumber, hermiteWeights_); // Hermite integration of the Fourier transform for small sigma if (sigmaLog_ <= ResourceMap::GetAsScalar("LogNormal-CharacteristicFunctionSmallSigmaThreshold")) { // Adjust the integration nodes number // nu*exp(sigma*x_n) - nu * exp(sigma*x_{n-1}) < 2*\pi/8 // nu*exp(sigma*x_n)(1 - exp(sigma*(x_{n-1}-x_n))) < 2*\pi/8 // 1 - exp(sigma*(x_{n-1}-x_n)) < 2*\pi/(8*nu*exp(sigma*x_n)) // sigma << 1 // sigma(x_n-x_{n-1}) < 2*\pi/(8*nu) // const Scalar maxPulsation(exp(sigmaLog_ * nodes[integrationNodesNumber - 1])); // const UnsignedInteger minimumIntegrationNodesNumber(static_cast(8 * 2 * M_PI * nu)); // integrationNodesNumber = std::max(integrationNodesNumber, static_cast(8 * 2 * M_PI * nu)); Complex value(0.0); for (UnsignedInteger i = 0; i < integrationNodesNumber; ++i) value += hermiteWeights_[i] * std::exp(Complex(0.0, nu * std::exp(sigmaLog_ * hermiteNodes_[i]))); logCFValue = std::log(value); } // Small sigma else { // Hermite integration centered on the maximal amplitude // Compute the characteristic function for the positive arguments const Scalar sStar = -SpecFunc::LambertW(sigmaLog_ * sigmaLog_ * nu) / sigmaLog_; Complex value(0.0); for (UnsignedInteger i = 0; i < integrationNodesNumber; ++i) value += hermiteWeights_[i] * characteristicIntegrand(hermiteNodes_[i], sStar); logCFValue = std::log(value) + H_ - Complex(sStar * sStar / 2.0, M_PI * sStar / (2.0 * sigmaLog_)); } // Large sigma } // Large argument logCFValue += Complex(0.0, x * gamma_); // Use symmetry for negative arguments if (x < 0.0) logCFValue = conj(logCFValue); return logCFValue; } /* Get the PDFGradient of the distribution */ Point LogNormal::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point pdfGradient(3, 0.0); // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return pdfGradient; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; Scalar pdf = normalizationFactor_ * std::exp(-0.5 * logX * logX) / x; pdfGradient[0] = pdf * logX / sigmaLog_; pdfGradient[1] = pdf * (logX - 1.0) * (logX + 1.0) / sigmaLog_; pdfGradient[2] = pdf * (1.0 + logX / sigmaLog_) / x; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point LogNormal::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point cdfGradient(3, 0.0); // Here we keep the bound within the special case as the distribution is continuous if (x <= 0.0) return cdfGradient; Scalar logX = (std::log(x) - muLog_) / sigmaLog_; Scalar pdf = normalizationFactor_ * std::exp(-0.5 * logX * logX) / x; cdfGradient[0] = -x * pdf; cdfGradient[1] = -logX * x * pdf; cdfGradient[2] = -pdf; return cdfGradient; } /* Get the quantile of the distribution */ Scalar LogNormal::computeScalarQuantile(const Scalar prob, const Bool tail) const { return gamma_ + std::exp(muLog_ + sigmaLog_ * DistFunc::qNormal(prob, tail)); } /* Compute the mean of the distribution */ void LogNormal::computeMean() const { mean_ = Point(1, gamma_ + std::exp(muLog_ + 0.5 * sigmaLog_ * sigmaLog_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point LogNormal::getStandardDeviation() const { Scalar expSigmaLog2 = std::exp(sigmaLog_ * sigmaLog_); return Point(1, std::exp(muLog_) * std::sqrt(expSigmaLog2 * (expSigmaLog2 - 1.0))); } /* Get the skewness of the distribution */ Point LogNormal::getSkewness() const { Scalar expSigmaLog2 = std::exp(sigmaLog_ * sigmaLog_); return Point(1, (expSigmaLog2 + 2.0) * std::sqrt(expSigmaLog2 - 1.0)); } /* Get the kurtosis of the distribution */ Point LogNormal::getKurtosis() const { Scalar expSigmaLog2 = std::exp(sigmaLog_ * sigmaLog_); return Point(1, -3.0 + expSigmaLog2 * expSigmaLog2 * (3.0 + expSigmaLog2 * (2.0 + expSigmaLog2))); } /* Get the moments of the standardized distribution */ Point LogNormal::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(n * muLog_ + 0.5 * std::pow(n * sigmaLog_, 2))); } /* Get the standard representative in the parametric family, associated with the standard moments */ LogNormal::Implementation LogNormal::getStandardRepresentative() const { return LogNormal(muLog_, sigmaLog_, 0.0).clone(); } /* Compute the covariance of the distribution */ void LogNormal::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar expSigmaLog2 = std::exp(sigmaLog_ * sigmaLog_); covariance_(0, 0) = expSigmaLog2 * std::exp(2.0 * muLog_) * (expSigmaLog2 - 1.0); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point LogNormal::getParameter() const { Point point(3); point[0] = muLog_; point[1] = sigmaLog_; point[2] = gamma_; return point; } void LogNormal::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = LogNormal(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description LogNormal::getParameterDescription() const { Description description(3); description[0] = "muLog"; description[1] = "sigmaLog"; description[2] = "gamma"; return description; } /* Interface specific to LogNormal */ /* MuLogSigmaLog accessor */ void LogNormal::setMuLogSigmaLog(const Scalar muLog, const Scalar sigmaLog) { if (!(sigmaLog > 0.0)) throw InvalidArgumentException(HERE) << "SigmaLog MUST be positive, here sigmaLog=" << sigmaLog; if ((muLog != muLog_) || (sigmaLog != sigmaLog_)) { muLog_ = muLog; sigmaLog_ = sigmaLog; // Check if the parameters values are not crazy static const Interval range(Normal().getRange()); const Scalar rMin = muLog_ + range.getUpperBound()[0] * sigmaLog_; const Scalar rMax = muLog_ + range.getLowerBound()[0] * sigmaLog_; if ((rMin >= SpecFunc::LogMaxScalar) || (rMax <= SpecFunc::LogMinScalar)) throw InvalidArgumentException(HERE) << "MuLog=" << muLog_ << " and SigmaLog=" << sigmaLog_ << " lead to a LogNormal distribution with a too much wide range"; H_ = M_PI * M_PI / (8.0 * sigmaLog_ * sigmaLog_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* MuLog accessor */ void LogNormal::setMuLog(const Scalar muLog) { if (muLog != muLog_) { muLog_ = muLog; // Check if the parameters values are not crazy static const Interval range(Normal().getRange()); const Scalar rMin = muLog_ + range.getUpperBound()[0] * sigmaLog_; const Scalar rMax = muLog_ + range.getLowerBound()[0] * sigmaLog_; if ((rMin >= SpecFunc::LogMaxScalar) || (rMax <= SpecFunc::LogMinScalar)) throw InvalidArgumentException(HERE) << "MuLog and SigmaLog lead to a LogNormal distribution with a too much wide range"; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar LogNormal::getMuLog() const { return muLog_; } /* SigmaLog accessor */ void LogNormal::setSigmaLog(const Scalar sigmaLog) { if (!(sigmaLog > 0.0)) throw InvalidArgumentException(HERE) << "SigmaLog MUST be positive, here sigmaLog=" << sigmaLog; if (sigmaLog != sigmaLog_) { sigmaLog_ = sigmaLog; // Check if the parameters values are not crazy static const Interval range(Normal().getRange()); const Scalar rMin = muLog_ + range.getUpperBound()[0] * sigmaLog_; const Scalar rMax = muLog_ + range.getLowerBound()[0] * sigmaLog_; if ((rMin >= SpecFunc::LogMaxScalar) || (rMax <= SpecFunc::LogMinScalar)) throw InvalidArgumentException(HERE) << "MuLog and SigmaLog lead to a LogNormal distribution with a too much wide range"; H_ = std::pow(M_PI / (2.0 * sigmaLog_), 2.0) / 2.0 - 0.5 * std::log(2.0 * M_PI); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar LogNormal::getSigmaLog() const { return sigmaLog_; } /* Gamma accessor */ void LogNormal::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depends on gamma computeRange(); } } Scalar LogNormal::getGamma() const { return gamma_; } /* Method save() stores the object through the StorageManager */ void LogNormal::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "muLog_", muLog_ ); adv.saveAttribute( "sigmaLog_", sigmaLog_ ); adv.saveAttribute( "gamma_", gamma_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); adv.saveAttribute( "H_", H_ ); } /* Method load() reloads the object from the StorageManager */ void LogNormal::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "muLog_", muLog_ ); adv.loadAttribute( "sigmaLog_", sigmaLog_ ); adv.loadAttribute( "gamma_", gamma_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); adv.loadAttribute( "H_", H_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LogNormalFactory.cxx000066400000000000000000000311471307543307100257200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for LogNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/LogNormalFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Brent.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogNormalFactory); static const Factory Factory_LogNormalFactory; /* Default constructor */ LogNormalFactory::LogNormalFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ LogNormalFactory * LogNormalFactory::clone() const { return new LogNormalFactory(*this); } /* Here is the interface that all derived class must implement */ /* Algorithm associated with the method of moments */ LogNormal LogNormalFactory::buildMethodOfMoments(const Sample & sample) const { if (sample.getSize() < 3) throw InvalidArgumentException(HERE) << "Error: cannot build a LogNormal distribution using the method of moments with a sample of size less than 3."; // ME const Scalar std = sample.computeStandardDeviationPerComponent()[0]; if (std == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot estimate a LogNormal distribution based on a constant sample using the method of moments."; const Scalar skew = sample.computeSkewness()[0]; const Scalar a3 = skew; // V parameter, see "LogNormal Distributions, Theory and Applications", ISBN 0-8247-7803-0, p116 const Scalar v = cbrt(0.5 * (a3 + std::sqrt(4.0 + a3 * a3))) + cbrt(0.5 * (a3 - std::sqrt(4.0 + a3 * a3))); const Scalar omega = 1.0 + v * v; const Scalar sigma = std::sqrt(std::log(omega)); const Scalar beta = std / std::sqrt(omega * (omega - 1.0)); const Scalar mu = std::log(beta); const Scalar mean = sample.computeMean()[0]; const Scalar gamma = mean - beta * std::sqrt(omega); LogNormal result(mu, sigma, gamma); result.setDescription(sample.getDescription()); return result; } struct LogNormalFactoryLMLEParameterConstraint { /** Constructor from a sample and a derivative factor estimate */ LogNormalFactoryLMLEParameterConstraint(const Sample & sample) : sample_(sample) , size_(sample.getSize()) { // Nothing to do }; Point computeConstraint(const Point & parameter) const { const Point sums(computeMaximumLikelihoodSums(parameter[0])); return Point(1, sums[0] * (sums[2] - sums[1] * (1.0 + sums[1] / size_)) + size_ * sums[3]); } /* S_0 = \sum_i (X_i - \gamma)^{-1} S_1 = \sum_i \log(X_i - \gamma) S_2 = \sum_i \log^2(X_i - \gamma) S_3 = \sum_i \log(X_i - \gamma) / (X_i - \gamma) */ Point computeMaximumLikelihoodSums(const Scalar gamma) const { Point sums(4, 0.0); for (UnsignedInteger i = 0; i < size_; ++i) { const Scalar delta = sample_[i][0] - gamma; if (!(delta > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot estimate a LogNormal distribution based on the given sample using the method of local maximum likelihood, probably because the sample is constant."; const Scalar logDelta = std::log(delta); const Scalar inverseDelta = 1.0 / delta; sums[0] += inverseDelta; sums[1] += logDelta; sums[2] += logDelta * logDelta; sums[3] += logDelta * inverseDelta; } return sums; } // The data Sample sample_; UnsignedInteger size_; }; /* Algoritm associated with the method of local likelihood maximization */ LogNormal LogNormalFactory::buildMethodOfLocalLikelihoodMaximization(const Sample & sample) const { const Scalar std = sample.computeStandardDeviationPerComponent()[0]; if (std == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot estimate a LogNormal distribution based on a constant sample using the method of local maximum likelihood."; const Scalar quantileEpsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); Scalar step = std * std::sqrt(quantileEpsilon); const Scalar xMin = sample.getMin()[0]; Scalar right = xMin - quantileEpsilon; const LogNormalFactoryLMLEParameterConstraint constraint(sample); const Function f(bindMethod(constraint, &LogNormalFactoryLMLEParameterConstraint::computeConstraint, 1, 1)); Scalar constraintRight = f(Point(1, right))[0]; Scalar left = right - step; Scalar constraintLeft = f(Point(1, left))[0]; // First, the bracketing interval. We should find a change of sign within [Xmin-sigma, Xmin], else use another estimator while ((constraintLeft < 0.0) == (constraintRight < 0.0) && (step < std::sqrt(SpecFunc::MaxScalar))) { right = left; constraintRight = constraintLeft; left -= step; constraintLeft = f(Point(1, left))[0]; step *= 2.0; } // If we are unable to bracket the gamma parameter if ((constraintLeft < 0.0) == (constraintRight < 0.0)) throw InvalidArgumentException(HERE) << "Error: unable to bracket the gamma parameter. The local maximum likelihood estimator is not defined"; // Second, the bisection // Solve the constraint equation const Brent solver(ResourceMap::GetAsScalar("LogNormalFactory-AbsolutePrecision"), ResourceMap::GetAsScalar("LogNormalFactory-RelativePrecision"), ResourceMap::GetAsScalar("LogNormalFactory-ResidualPrecision"), ResourceMap::GetAsUnsignedInteger("LogNormalFactory-MaximumIteration")); // Gamma estimate const Scalar gamma = solver.solve(f, 0.0, left, right, constraintLeft, constraintRight); // Third, the final estimates const UnsignedInteger size = sample.getSize(); const Point sums(constraint.computeMaximumLikelihoodSums(gamma)); const Scalar mu = sums[1] / size; const Scalar sigma2 = sums[2] / size - mu * mu; if (!(sigma2 > 0.0)) throw InvalidArgumentException(HERE) << "Error: the variance local maximum likelihood estimator should be positive, here sigma2=" << sigma2; return LogNormal(mu, std::sqrt(sigma2), gamma); } struct LogNormalFactoryMMEParameterConstraint { /* Constructor from a sample and a derivative factor estimate */ LogNormalFactoryMMEParameterConstraint(const UnsignedInteger n, const Scalar xMin, const Scalar mean, const Scalar std): eZ1_(DistFunc::eZ1(n)), alpha_(std::pow(std / (mean - xMin), 2)) { // Nothing to do }; Point computeConstraint(const Point & parameter) const { const Scalar omega = parameter[0]; if (!(omega > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot estimate a LogNormal distribution based on the given sample using the method of modified moments, probably because the sample is constant."; return Point(1, alpha_ * std::pow(std::sqrt(omega) - std::exp(eZ1_ * std::sqrt(std::log(omega))), 2) - omega * (omega - 1.0)); } Scalar getEZ1() const { return eZ1_; } // Some intermediate coefficients Scalar eZ1_; Scalar alpha_; }; /* Algorithm associated with the method of modified moments */ LogNormal LogNormalFactory::buildMethodOfModifiedMoments(const Sample & sample) const { const Scalar std = sample.computeStandardDeviationPerComponent()[0]; if (std == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot estimate a LogNormal distribution based on a constant sample using the method of modified moments."; const Scalar mean = sample.computeMean()[0]; const Scalar xMin = sample.getMin()[0]; const LogNormalFactoryMMEParameterConstraint constraint(sample.getSize(), xMin, mean, std); const Function f(bindMethod(constraint, &LogNormalFactoryMMEParameterConstraint::computeConstraint, 1, 1)); // First, the bracketing interval Scalar ea = 1.0; Scalar eb = 2.0; Scalar a = 1.0 + ea; Scalar b = 1.0 + eb; Scalar fA = f(Point(1, a))[0]; Scalar fB = f(Point(1, b))[0]; // While f has the same sign at the two bounds, update the interval const Scalar quantileEpsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); while ((fA * fB > 0.0) && (ea > quantileEpsilon)) { ea = 0.5 * ea; a = 1.0 + ea; fA = f(Point(1, a))[0]; if (fA * fB <= 0.0) break; eb = 2.0 * eb; b = 1.0 + eb; fB = f(Point(1, b))[0]; } const Scalar absolutePrecision = ResourceMap::GetAsScalar("LogNormalFactory-AbsolutePrecision"); if (a <= quantileEpsilon) throw InvalidArgumentException(HERE) << "Error: the modified moment estimator is not defined"; Scalar omega = 0.0; if (std::abs(fA) < absolutePrecision) omega = a; else if (std::abs(fB) < absolutePrecision) omega = b; else { const Brent solver(absolutePrecision, ResourceMap::GetAsScalar("LogNormalFactory-RelativePrecision"), ResourceMap::GetAsScalar("LogNormalFactory-ResidualPrecision"), ResourceMap::GetAsUnsignedInteger("LogNormalFactory-MaximumIteration")); // Omega estimate omega = solver.solve(f, 0.0, a, b, fA, fB); } const Scalar sigma = std::sqrt(std::log(omega)); const Scalar eZ1 = constraint.getEZ1(); const Scalar sqrtOmega = std::sqrt(omega); const Scalar beta = (mean - xMin) / (sqrtOmega - std::exp(eZ1 * sigma)); const Scalar gamma = mean - beta * sqrtOmega; const Scalar mu = std::log(beta); return LogNormal(mu, sigma, gamma); } LogNormalFactory::Implementation LogNormalFactory::build(const Sample & sample) const { return build(sample, ResourceMap::GetAsUnsignedInteger("LogNormalFactory-EstimationMethod")); } LogNormalFactory::Implementation LogNormalFactory::build(const Sample & sample, const UnsignedInteger method) const { return buildAsLogNormal(sample, method).clone(); } LogNormalFactory::Implementation LogNormalFactory::build() const { return buildAsLogNormal().clone(); } LogNormalFactory::Implementation LogNormalFactory::build(const Point & parameters) const { return buildAsLogNormal(parameters).clone(); } LogNormal LogNormalFactory::buildAsLogNormal(const Sample & sample) const { return buildAsLogNormal(sample, ResourceMap::GetAsUnsignedInteger("LogNormalFactory-EstimationMethod")); }; LogNormal LogNormalFactory::buildAsLogNormal(const Sample & sample, const UnsignedInteger method) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a LogNormal distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a LogNormal distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); switch (method) { case 0: try { return buildMethodOfLocalLikelihoodMaximization(sample); } catch (InvalidArgumentException) { // We switch to the moment estimate LOGWARN(OSS() << "Warning! Unable to bracket the location parameter gamma. Using the modified moment estimator."); return buildAsLogNormal(sample, 1); } break; case 1: try { return buildMethodOfModifiedMoments(sample); } catch (InvalidArgumentException) { // We switch to the moment estimate LOGWARN(OSS() << "Warning! Unable to bracket the shape parameter sigma. Using the classical moment estimator."); return buildAsLogNormal(sample, 2); } break; case 2: return buildMethodOfMoments(sample); break; default: throw InvalidArgumentException(HERE) << "Error: invalid value=" << method << " for the key 'LogNormalFactory-EstimationMethod' in ResourceMap"; } } LogNormal LogNormalFactory::buildAsLogNormal(const Point & parameters) const { try { LogNormal distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a LogNormal distribution from the given parameters"; } } LogNormal LogNormalFactory::buildAsLogNormal() const { return LogNormal(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LogNormalMuSigma.cxx000066400000000000000000000140711307543307100256500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LogNormal distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LogNormalFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/LogNormalMuSigma.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogNormalMuSigma); /* Default constructor */ LogNormalMuSigma::LogNormalMuSigma() : DistributionParametersImplementation() , mu_(exp(0.5)) , sigma_(sqrt(exp(2.0) - exp(1.0))) , gamma_(0.) { // Nothing to do } LogNormalMuSigma::LogNormalMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) , gamma_(gamma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; } /* Virtual constructor */ LogNormalMuSigma * LogNormalMuSigma::clone() const { return new LogNormalMuSigma(*this); } /* Comparison operator */ Bool LogNormalMuSigma::operator ==(const LogNormalMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution LogNormalMuSigma::getDistribution() const { Point newParameters(3); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = gamma_; Point nativeParameters(operator()(newParameters)); return LogNormalFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix LogNormalMuSigma::gradient() const { const Scalar mu = mu_; const Scalar sigma = sigma_; const Scalar gamma = gamma_; Point newParameters(3); newParameters[0] = mu; newParameters[1] = sigma; newParameters[2] = gamma; const Scalar sigmalog = operator()(newParameters)[1]; const Scalar dsigmalogdmu = - sigma * sigma / (sigmalog * (mu - gamma) * (sigma * sigma + (mu - gamma) * (mu - gamma))); const Scalar dsigmalogdsigma = sigma / (sigmalog * (sigma * sigma + (mu - gamma) * (mu - gamma))); const Scalar dsigmalogdgamma = -dsigmalogdmu; const Scalar dmulogdmu = 1 / (mu - gamma) - sigmalog * dsigmalogdmu; const Scalar dmulogdsigma = -sigmalog * dsigmalogdsigma; const Scalar dmulogdgamma = -dmulogdmu; SquareMatrix nativeParametersGradient(IdentityMatrix(3)); nativeParametersGradient(0, 0) = dmulogdmu; nativeParametersGradient(1, 0) = dmulogdsigma; nativeParametersGradient(2, 0) = dmulogdgamma; nativeParametersGradient(0, 1) = dsigmalogdmu; nativeParametersGradient(1, 1) = dsigmalogdsigma; nativeParametersGradient(2, 1) = dsigmalogdgamma; return nativeParametersGradient; } /* Conversion operator */ Point LogNormalMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; const Scalar gamma = inP[2]; if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; Point nativeParameters(inP); Scalar sigmalog = sqrt(log(1 + sigma * sigma / ((mu - gamma) * (mu - gamma)))); Scalar mulog = log(mu - gamma) - sigmalog * sigmalog / 2; nativeParameters[0] = mulog; nativeParameters[1] = sigmalog; return nativeParameters; } Point LogNormalMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar muLog = inP[0]; const Scalar sigmaLog = inP[1]; const Scalar gamma = inP[2]; if (!(sigmaLog > 0.0)) throw InvalidArgumentException(HERE) << "SigmaLog MUST be positive, here sigmaLog=" << sigmaLog; const Scalar mu = gamma + std::exp(muLog + 0.5 * sigmaLog * sigmaLog); const Scalar expSigmaLog2 = std::exp(sigmaLog * sigmaLog); const Scalar sigma = std::exp(muLog) * std::sqrt(expSigmaLog2 * (expSigmaLog2 - 1.0)); Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void LogNormalMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; gamma_ = inP[2]; } Point LogNormalMuSigma::getValues() const { Point point(3); point[0] = mu_; point[1] = sigma_; point[2] = gamma_; return point; } Description LogNormalMuSigma::getDescription() const { Description description(3); description[0] = "mu"; description[1] = "sigma"; description[2] = "gamma"; return description; } /* String converter */ String LogNormalMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_ << " gamma=" << gamma_; return oss; } String LogNormalMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ", gamma = " << gamma_ << ")"; return oss; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/LogNormalMuSigmaOverMu.cxx000066400000000000000000000132071307543307100270060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LogNormal distribution with mu and sigma over mu as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LogNormalFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/LogNormalMuSigma.hxx" #include "openturns/LogNormalMuSigmaOverMu.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogNormalMuSigmaOverMu); /* Default constructor */ LogNormalMuSigmaOverMu::LogNormalMuSigmaOverMu() : DistributionParametersImplementation() , mu_(exp(0.5)) , sigmaOverMu_(sqrt(exp(2.0) - exp(1.0)) / exp(0.5)) , gamma_(0.) { // Nothing to do } LogNormalMuSigmaOverMu::LogNormalMuSigmaOverMu(const Scalar mu, const Scalar sigmaOverMu, const Scalar gamma) : DistributionParametersImplementation() , mu_(mu) , sigmaOverMu_(sigmaOverMu) , gamma_(gamma) { if (mu == 0.0) throw InvalidArgumentException(HERE) << "mu cannot be null in the parameter set (mu, sigmaOverMu)"; if (!(sigmaOverMu * mu > 0.0)) throw InvalidArgumentException(HERE) << "sigmaOverMu*mu must be > 0, here sigmaOverMu*mu=" << sigmaOverMu*mu; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; } /* Virtual constructor */ LogNormalMuSigmaOverMu * LogNormalMuSigmaOverMu::clone() const { return new LogNormalMuSigmaOverMu(*this); } /* Comparison operator */ Bool LogNormalMuSigmaOverMu::operator ==(const LogNormalMuSigmaOverMu & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution LogNormalMuSigmaOverMu::getDistribution() const { Point newParameters(3); newParameters[0] = mu_; newParameters[1] = sigmaOverMu_; newParameters[2] = gamma_; Point nativeParameters(operator()(newParameters)); return LogNormalFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix LogNormalMuSigmaOverMu::gradient() const { // compute the jacobian of the transformation (mulog, sigmalog, gamma) -> (mu, sigma, gamma) const LogNormalMuSigma muSigmaParameters(mu_, sigmaOverMu_ * mu_, gamma_); const Matrix muSigmaJacobian = muSigmaParameters.gradient(); // compute the jacobian of the transformation (mu, sigma, gamma) -> (mu, sigma/mu, gamma) SquareMatrix muSigmaOverMuJacobian(IdentityMatrix(3)); muSigmaOverMuJacobian(0, 1) = sigmaOverMu_; muSigmaOverMuJacobian(1, 1) = mu_; return muSigmaOverMuJacobian * muSigmaJacobian; } /* Conversion operator */ Point LogNormalMuSigmaOverMu::operator () (const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigmaOverMu = inP[1]; const Scalar gamma = inP[2]; if (mu == 0.0) throw InvalidArgumentException(HERE) << "mu cannot be null in the parameter set (mu, sigmaOverMu)"; if (!(sigmaOverMu * mu > 0.0)) throw InvalidArgumentException(HERE) << "sigmaOverMu*mu must be > 0, here sigmaOverMu*mu=" << sigmaOverMu*mu; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; Point muSigmaParametersValues(inP); muSigmaParametersValues[1] *= mu; const LogNormalMuSigma muSigmaParameters(mu, sigmaOverMu * mu, gamma); return muSigmaParameters(muSigmaParametersValues); } Point LogNormalMuSigmaOverMu::inverse(const Point & inP) const { const LogNormalMuSigma muSigmaParameters; Point muSigmaOverMuParameters(muSigmaParameters.inverse(inP)); const Scalar mu = muSigmaOverMuParameters[0]; if (mu == 0.0) throw InvalidArgumentException(HERE) << "Error: mu cannot be null in the parameter set (mu, sigmaOverMu)"; muSigmaOverMuParameters[1] /= mu; return muSigmaOverMuParameters; } /* Parameters value and description accessor */ void LogNormalMuSigmaOverMu::setValues(const Point & inP) { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigmaOverMu_ = inP[1]; gamma_ = inP[2]; } Point LogNormalMuSigmaOverMu::getValues() const { Point point(3); point[0] = mu_; point[1] = sigmaOverMu_; point[2] = gamma_; return point; } Description LogNormalMuSigmaOverMu::getDescription() const { Description description(3); description[0] = "mu"; description[1] = "sigmaOverMu"; description[2] = "gamma"; return description; } /* String converter */ String LogNormalMuSigmaOverMu::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigmaOverMu=" << sigmaOverMu_ << " gamma=" << gamma_; return oss; } String LogNormalMuSigmaOverMu::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigmaOverMu = " << sigmaOverMu_ << ", gamma = " << gamma_ << ")"; return oss; } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Distribution/LogUniform.cxx000066400000000000000000000253141307543307100245560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The LogUniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SpecFunc.hxx" #include "openturns/LogUniform.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogUniform); static const Factory Factory_LogUniform; /* Default constructor */ LogUniform::LogUniform() : ContinuousDistribution() , aLog_(-1.0) , bLog_(1.0) , a_(std::exp(-1.0)) , b_(std::exp(1.0)) { setName( "LogUniform" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ LogUniform::LogUniform(const Scalar aLog, const Scalar bLog) : ContinuousDistribution() , aLog_(aLog) , bLog_(bLog) , a_(std::exp(aLog_)) , b_(std::exp(bLog_)) { if (bLog <= aLog) throw InvalidArgumentException(HERE) << "Error the lower bound aLog of a LogUniform distribution must be lesser than its upper bound bLog, here aLog=" << aLog << " bLog=" << bLog; setName( "LogUniform" ); setDimension( 1 ); computeRange(); } /* Comparison operator */ Bool LogUniform::operator ==(const LogUniform & other) const { if (this == &other) return true; return (aLog_ == other.aLog_) && (bLog_ == other.bLog_); } Bool LogUniform::equals(const DistributionImplementation & other) const { const LogUniform* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String LogUniform::__repr__() const { OSS oss(true); oss << "class=" << LogUniform::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " aLog=" << aLog_ << " bLog=" << bLog_ << " a=" << a_ << " b=" << b_; return oss; } String LogUniform::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(aLog = " << aLog_ << ", bLog = " << bLog_ << ")"; return oss; } /* Virtual constructor */ LogUniform * LogUniform::clone() const { return new LogUniform(*this); } /* Compute the numerical range of the distribution given the parameters values */ void LogUniform::computeRange() { setRange(Interval(a_, b_)); } /* Get one realization of the distribution */ Point LogUniform::getRealization() const { return Point(1, std::exp(aLog_ + (bLog_ - aLog_) * RandomGenerator::Generate())); } /* Get the DDF of the distribution */ Point LogUniform::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x < a_) || (x > b_)) return Point(1, 0.0); return Point(1, -1.0 / (x * x * (bLog_ - aLog_))); } /* Get the PDF of the distribution */ Scalar LogUniform::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return 0.0; return 1.0 / (x * (bLog_ - aLog_)); } /* Get the CDF of the distribution */ Scalar LogUniform::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; return (std::log(x) - aLog_) / (bLog_ - aLog_); } Scalar LogUniform::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 1.0; if (x > b_) return 0.0; return (bLog_ - std::log(x)) / (bLog_ - aLog_); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex LogUniform::computeCharacteristicFunction(const Scalar x) const { Complex result; if (std::abs(x) <= 1.0e-8 * (b_ - a_)) result = Complex((bLog_ - aLog_) / (bLog_ + aLog_), (b_ - a_) * x / (bLog_ - aLog_)); else { result = (SpecFunc::Ei(Complex(0.0, x * b_)) - SpecFunc::Ei(Complex(0.0, x * a_))) / (bLog_ - aLog_); } return result; } /* Get the PDFGradient of the distribution */ Point LogUniform::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point pdfGradient(2, 0.0); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return pdfGradient; const Scalar value = computePDF(point) / (bLog_ - aLog_); pdfGradient[0] = value; pdfGradient[1] = -value; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point LogUniform::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Point cdfGradient(2, 0.0); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return cdfGradient; const Scalar denominator = std::pow(bLog_ - aLog_, 2); const Scalar logX = std::log(x); cdfGradient[0] = (logX - bLog_) / denominator; cdfGradient[1] = (aLog_ - logX) / denominator; return cdfGradient; } /* Get the quantile of the distribution */ Scalar LogUniform::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return std::exp(bLog_ - prob * (bLog_ - aLog_)); return std::exp(aLog_ + prob * (bLog_ - aLog_)); } /* Compute the mean of the distribution */ void LogUniform::computeMean() const { mean_ = Point(1, (b_ - a_) / (bLog_ - aLog_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point LogUniform::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point LogUniform::getSkewness() const { Scalar t1 = std::sqrt(2.0); Scalar t2 = a_ * a_; Scalar t4 = b_ * b_; Scalar t6 = bLog_ * aLog_; Scalar t9 = bLog_ * bLog_; Scalar t14 = aLog_ * aLog_; Scalar t30 = a_ * b_; Scalar t39 = 12.0 * t2 + 12.0 * t4 - 4.0 * t4 * t6 + 2.0 * t4 * t9 - 9.0 * t4 * bLog_ + 2.0 * t4 * t14 + 9.0 * t4 * aLog_ - 9.0 * t2 * aLog_ + 2.0 * t2 * t9 + 2.0 * b_ * a_ * t9 + 9.0 * t2 * bLog_ - 4.0 * t2 * t6 - 4.0 * t30 * t6 + 2.0 * b_ * a_ * t14 - 24.0 * t30 + 2.0 * t2 * t14; Scalar t42 = std::sqrt(b_ - a_); Scalar t45 = -bLog_ + aLog_; Scalar t46 = t45 * t45; Scalar t54 = -2.0 * a_ + aLog_ * b_ + 2.0 * b_ + aLog_ * a_ - bLog_ * b_ - bLog_ * a_; Scalar t56 = std::sqrt(-t54 / t46); Scalar t63 = 1 / t45 / t54 / t56 / t42 * t39 * t1 / 3.0; return Point(1, t63); } /* Get the kurtosis of the distribution */ Point LogUniform::getKurtosis() const { Scalar t5 = a_ * a_; Scalar t7 = b_ * b_; Scalar t9 = bLog_ * aLog_; Scalar t12 = bLog_ * bLog_; Scalar t17 = aLog_ * aLog_; Scalar t33 = a_ * b_; Scalar t42 = 12.0 * t5 + 12.0 * t7 - 4.0 * t7 * t9 + 2.0 * t7 * t12 - 9.0 * t7 * bLog_ + 2.0 * t7 * t17 + 9.0 * t7 * aLog_ - 9.0 * t5 * aLog_ + 2.0 * t5 * t12 + 2.0 * b_ * a_ * t12 + 9.0 * t5 * bLog_ - 4.0 * t5 * t9 - 4.0 * t33 * t9 + 2.0 * b_ * a_ * t17 - 24.0 * t33 + 2.0 * t5 * t17; Scalar t50 = std::pow(-2.0 * a_ + aLog_ * b_ + 2.0 * b_ + aLog_ * a_ - bLog_ * b_ - bLog_ * a_, 2.0); Scalar t54 = 2.0 / 3.0 / t50 * t42 * (-bLog_ + aLog_) / (-b_ + a_); return Point(1, t54); } /* Compute the covariance of the distribution */ void LogUniform::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar aLogbLog = bLog_ - aLog_; covariance_(0, 0) = 0.5 * (b_ - a_) * (b_ * (aLogbLog - 2.0) + a_ * (aLogbLog + 2.0)) / std::pow(aLogbLog, 2); isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point LogUniform::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); return Point(1, (std::pow(b_, static_cast(n)) - std::pow(a_, static_cast(n))) / (n * (bLog_ - aLog_))); } /* Parameters value accessor */ Point LogUniform::getParameter() const { Point point(2); point[0] = aLog_; point[1] = bLog_; return point; } void LogUniform::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = LogUniform(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description LogUniform::getParameterDescription() const { Description description(2); description[0] = "aLog"; description[1] = "bLog"; return description; } /* A accessor */ void LogUniform::setALog(const Scalar aLog) { if (aLog != aLog_) { aLog_ = aLog; a_ = std::exp(aLog_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar LogUniform::getALog() const { return aLog_; } /* B accessor */ void LogUniform::setBLog(const Scalar bLog) { if (bLog != bLog_) { bLog_ = bLog; b_ = std::exp(bLog); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar LogUniform::getBLog() const { return bLog_; } /* Method save() stores the object through the StorageManager */ void LogUniform::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "aLog_", aLog_ ); adv.saveAttribute( "bLog_", bLog_ ); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "b_", b_ ); } /* Method load() reloads the object from the StorageManager */ void LogUniform::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "aLog_", aLog_ ); adv.loadAttribute( "bLog_", bLog_ ); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "b_", b_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LogUniformFactory.cxx000066400000000000000000000067071307543307100261130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for LogUniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LogUniformFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogUniformFactory); static const Factory Factory_LogUniformFactory; /* Default constructor */ LogUniformFactory::LogUniformFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ LogUniformFactory * LogUniformFactory::clone() const { return new LogUniformFactory(*this); } /* Here is the interface that all derived class must implement */ LogUniformFactory::Implementation LogUniformFactory::build(const Sample & sample) const { return buildAsLogUniform(sample).clone(); } LogUniformFactory::Implementation LogUniformFactory::build(const Point & parameters) const { return buildAsLogUniform(parameters).clone(); } LogUniformFactory::Implementation LogUniformFactory::build() const { return buildAsLogUniform().clone(); } LogUniform LogUniformFactory::buildAsLogUniform(const Sample & sample) const { const Scalar size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a LogUniform distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a LogUniform distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar a = xMin - std::abs(xMin) / (2.0 + size); if (!(a > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a LogUniform distribution from a sample that contains non positive values."; Scalar aLog = std::log(a); const Scalar xMax = sample.getMax()[0]; const Scalar b = xMax + std::abs(xMax) / (2.0 + size); Scalar bLog = std::log(b); if (!SpecFunc::IsNormal(aLog) || !SpecFunc::IsNormal(bLog)) throw InvalidArgumentException(HERE) << "Error: cannot build a LogUniform distribution if data contains NaN or Inf"; if (xMin == xMax) { aLog *= 1.0 - SpecFunc::ScalarEpsilon; bLog *= 1.0 + SpecFunc::ScalarEpsilon; } LogUniform result(aLog, bLog); result.setDescription(sample.getDescription()); return result; } LogUniform LogUniformFactory::buildAsLogUniform(const Point & parameters) const { try { LogUniform distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a LogUniform distribution from the given parameters"; } } LogUniform LogUniformFactory::buildAsLogUniform() const { return LogUniform(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Logistic.cxx000066400000000000000000000265221307543307100242540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Logistic distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Logistic.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Logistic); static const Factory Factory_Logistic; /* Default constructor */ Logistic::Logistic() : ContinuousDistribution() , alpha_(0.0) , beta_(1.0) { setName( "Logistic" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Logistic::Logistic(const Scalar alpha, const Scalar beta) : ContinuousDistribution() , alpha_(alpha) , beta_(0.0) { setName( "Logistic" ); // This call set also the range. setBeta(beta); setDimension( 1 ); } /* Comparison operator */ Bool Logistic::operator ==(const Logistic & other) const { if (this == &other) return true; return (alpha_ == other.alpha_) && (beta_ == other.beta_); } Bool Logistic::equals(const DistributionImplementation & other) const { const Logistic* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Logistic::__repr__() const { OSS oss; oss << "class=" << Logistic::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " alpha=" << alpha_ << " beta=" << beta_; return oss; } String Logistic::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(alpha = " << alpha_ << ", beta = " << beta_ << ")"; return oss; } /* Virtual constructor */ Logistic * Logistic::clone() const { return new Logistic(*this); } /* Get one realization of the distribution */ Point Logistic::getRealization() const { Scalar prob = RandomGenerator::Generate(); return Point(1, alpha_ + beta_ * std::log(prob / (1.0 - prob))); } /* Get the DDF of the distribution */ Point Logistic::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar expX = std::exp((point[0] - alpha_) / beta_); Scalar betaExpX = beta_ * (1.0 + expX); return Point(1, beta_ * expX * (1.0 - expX) / (betaExpX * betaExpX * betaExpX)); } /* Get the PDF of the distribution */ Scalar Logistic::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = (point[0] - alpha_) / beta_; if (z > 12.38075336) { const Scalar expMZ = std::exp(-z); return expMZ * (1.0 - 2.0 * expMZ) / beta_; } if (z < -12.38075336) { const Scalar expZ = std::exp(z); return expZ * (1.0 - 2.0 * expZ) / beta_; } const Scalar expMZ = std::exp(-z); return expMZ / (beta_ * std::pow(1.0 + expMZ, 2.0)); } Scalar Logistic::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = (point[0] - alpha_) / beta_; if (z > 12.38075336) return -z + log1p(-2.0 * std::exp(-z)) - std::log(beta_); if (z < -12.38075336) return z + log1p(-2.0 * std::exp(z)) - std::log(beta_); return -z - std::log(beta_) - 2.0 * log1p(std::exp(-z)); } /* Get the CDF of the distribution */ Scalar Logistic::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = (point[0] - alpha_) / beta_; if (z > 12.01454911) { const Scalar expMZ = std::exp(-z); return 1.0 - expMZ * (1.0 - expMZ); } if (z < -12.01454911) { const Scalar expZ = std::exp(z); return expZ * (1.0 - expZ); } return 1.0 / (1.0 + std::exp(-z)); } Scalar Logistic::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = (point[0] - alpha_) / beta_; if (z > 12.01454911) { const Scalar expMZ = std::exp(-z); return expMZ * (1.0 - expMZ); } if (z < -12.01454911) { const Scalar expZ = std::exp(z); return 1.0 - expZ * (1.0 - expZ); } return 1.0 / (1.0 + std::exp(z)); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Logistic::computeCharacteristicFunction(const Scalar x) const { const Scalar piBetaU = M_PI * beta_ * x; return std::exp(Complex(0.0, x * alpha_)) * piBetaU / std::sinh(piBetaU); } Complex Logistic::computeLogCharacteristicFunction(const Scalar x) const { const Scalar piBetaU = M_PI * beta_ * x; return Complex(0.0, x * alpha_) + std::log(piBetaU) - std::log(std::sinh(piBetaU)); } /* Get the PDFGradient of the distribution */ Point Logistic::computePDFGradient(const Point & point) const { Scalar x = (point[0] - alpha_) / beta_; Scalar expX = std::exp(x); Scalar betaExpX = beta_ * (1.0 + expX); Point pdfGradient(2); pdfGradient[0] = beta_ * expX * (expX - 1.0) / (betaExpX * betaExpX * betaExpX); pdfGradient[1] = pdfGradient[0] * x - expX / (betaExpX * betaExpX); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Logistic::computeCDFGradient(const Point & point) const { Scalar x = (point[0] - alpha_) / beta_; Scalar expX = std::exp(x); Scalar betaExpX = beta_ * (1.0 + expX); Point cdfGradient(2); cdfGradient[0] = -beta_ * expX / (betaExpX * betaExpX); cdfGradient[1] = cdfGradient[0] * x; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Logistic::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return alpha_ + beta_ * std::log((1.0 - prob) / prob); return alpha_ + beta_ * std::log(prob / (1.0 - prob)); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Logistic::getRoughness() const { // 0.1666666666666666666666667 = 1 / 6 return 0.1666666666666666666666667 / beta_; } /* Compute the mean of the distribution */ void Logistic::computeMean() const { mean_ = Point(1, alpha_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Logistic::getStandardDeviation() const { return Point(1, SpecFunc::PI_SQRT3 * beta_); } /* Get the skewness of the distribution */ Point Logistic::getSkewness() const { return Point(1, 0.0); } /* Get the kurtosis of the distribution */ Point Logistic::getKurtosis() const { // 3+6/5 = 4.2 return Point(1, 4.2); } /* Compute the covariance of the distribution */ void Logistic::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = SpecFunc::PI2_3 * beta_ * beta_; isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Logistic::getStandardMoment(const UnsignedInteger n) const { if (n % 2 == 1) return Point(1, 0.0); if (n == 2) return Point(1, 3.2898681336964528730e00); if (n == 4) return Point(1, 4.5457575815867804043e01); if (n == 6) return Point(1, 1.4191935714683065499e03); if (n == 8) return Point(1, 8.0336229269397526593e04); if (n == 10) return Point(1, 7.2506291303452157147e06); if (n == 12) return Point(1, 9.5777106159240860718e08); if (n == 14) return Point(1, 1.7434597634941644924e11); if (n == 16) return Point(1, 4.1844942225739403485e13); if (n == 18) return Point(1, 1.2804698598089257967e16); if (n == 20) return Point(1, 4.8657993773520842256e18); if (n == 22) return Point(1, 2.2480009196614112639e21); if (n == 24) return Point(1, 1.2408967295076549681e24); if (n == 26) return Point(1, 8.0658291023450627114e26); if (n == 28) return Point(1, 6.0977668695185918278e29); if (n == 30) return Point(1, 5.3050571913031274079e32); if (n == 32) return Point(1, 5.2626167374485750005e35); if (n == 34) return Point(1, 5.9046559804483869578e38); if (n == 36) return Point(1, 7.4398665356897600917e41); if (n == 38) return Point(1, 1.0460452349293967338e45); if (n == 40) return Point(1, 1.6318305664943113275e48); if (n == 42) return Point(1, 2.8100122355051208743e51); if (n == 44) return Point(1, 5.3165431495765953256e54); if (n == 46) return Point(1, 1.1005244319624021505e58); if (n == 48) return Point(1, 2.4827831185072057135e61); if (n == 50) return Point(1, 6.0828186403426702060e64); return DistributionImplementation::getStandardMoment(n); } /* Get the standard representative in the parametric family, associated with the standard moments */ Logistic::Implementation Logistic::getStandardRepresentative() const { return Logistic(0.0, 1.0).clone(); } /* Parameters value accessor */ Point Logistic::getParameter() const { Point point(2); point[0] = alpha_; point[1] = beta_; return point; } void Logistic::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Logistic(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Logistic::getParameterDescription() const { Description description(2); description[0] = "alpha"; description[1] = "beta"; return description; } /* Check if the distribution is elliptical */ Bool Logistic::isElliptical() const { return true; } /* Alpha accessor */ void Logistic::setAlpha(const Scalar alpha) { if (alpha != alpha_) { alpha_ = alpha; isAlreadyComputedMean_ = false; // The covariancedoes not depend on alpha computeRange(); } } Scalar Logistic::getAlpha() const { return alpha_; } /* Beta accessor */ void Logistic::setBeta(const Scalar beta) { if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Beta MUST be positive, here beta=" << beta; if (beta != beta_) { beta_ = beta; isAlreadyComputedCovariance_ = false; // The mean does not depend on beta computeRange(); } } Scalar Logistic::getBeta() const { return beta_; } /* Method save() stores the object through the StorageManager */ void Logistic::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); } /* Method load() reloads the object from the StorageManager */ void Logistic::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/LogisticFactory.cxx000066400000000000000000000061051307543307100255770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Logistic distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/LogisticFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(LogisticFactory); static const Factory Factory_LogisticFactory; /* Default constructor */ LogisticFactory::LogisticFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ LogisticFactory * LogisticFactory::clone() const { return new LogisticFactory(*this); } /* Here is the interface that all derived class must implement */ LogisticFactory::Implementation LogisticFactory::build(const Sample & sample) const { return buildAsLogistic(sample).clone(); } LogisticFactory::Implementation LogisticFactory::build(const Point & parameters) const { return buildAsLogistic(parameters).clone(); } LogisticFactory::Implementation LogisticFactory::build() const { return buildAsLogistic().clone(); } DistributionFactoryResult LogisticFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } Logistic LogisticFactory::buildAsLogistic(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Logistic distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Logistic distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar alpha = sample.computeMean()[0]; Scalar beta = sample.computeStandardDeviationPerComponent()[0] * SpecFunc::SQRT3_PI; if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Error: can build a Logistic distribution only if beta > 0.0, here beta=" << beta; Logistic result(alpha, beta); result.setDescription(sample.getDescription()); return result; } Logistic LogisticFactory::buildAsLogistic(const Point & parameters) const { try { Logistic distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Logistic distribution from the given parameters"; } } Logistic LogisticFactory::buildAsLogistic() const { return Logistic(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MarginalDistribution.cxx000066400000000000000000000334521307543307100266310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements a generic mechanism to extract marginal distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MarginalDistribution.hxx" #include "openturns/Uniform.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MarginalDistribution); static const Factory Factory_MarginalDistribution; /* Default constructor */ MarginalDistribution::MarginalDistribution() : DistributionImplementation() , distribution_() , indices_(1, 0) { setName("MarginalDistribution"); setDimension(1); setDistribution(Uniform()); } /* Parameters constructor */ MarginalDistribution::MarginalDistribution(const Distribution & distribution, const UnsignedInteger & index) : DistributionImplementation() , distribution_() , indices_() { setName("MarginalDistribution"); setDistributionAndIndices(distribution, Indices(1, index)); } /* Parameters constructor */ MarginalDistribution::MarginalDistribution(const Distribution & distribution, const Indices & indices) : DistributionImplementation() , distribution_() , indices_() { setName("MarginalDistribution"); setDistributionAndIndices(distribution, indices); } /* Comparison operator */ Bool MarginalDistribution::operator ==(const MarginalDistribution & other) const { if (this == &other) return true; return (distribution_ == other.distribution_) && (indices_ == other.indices_); } Bool MarginalDistribution::equals(const DistributionImplementation & other) const { const MarginalDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MarginalDistribution::__repr__() const { OSS oss; oss << "class=" << MarginalDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " distribution=" << distribution_ << " indices=" << indices_; return oss; } String MarginalDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(distribution=" << distribution_.__str__() << ", indices=" << indices_; oss << ")"; return oss; } /* Distribution accessor */ void MarginalDistribution::setDistribution(const Distribution & distribution) { setDistributionAndIndices(distribution, indices_); } /* Distribution collection accessor */ Distribution MarginalDistribution::getDistribution() const { return distribution_; } /* Indices accessor */ void MarginalDistribution::setIndices(const Indices & indices) { setDistributionAndIndices(distribution_, indices); } /* Indices accessor */ Indices MarginalDistribution::getIndices() const { return indices_; } void MarginalDistribution::setDistributionAndIndices(const Distribution & distribution, const Indices & indices) { if (!indices.check(distribution.getDimension())) throw InvalidArgumentException(HERE) << "Error: the given indices=" << indices << " are not compatible with the given distribution dimension=" << distribution.getDimension(); distribution_ = distribution; indices_ = indices; // Set the dimension const UnsignedInteger dimension = indices.getSize(); setDimension(dimension); // Compute the range // From the underlying distribution Point distributionLowerBound(distribution.getRange().getLowerBound()); lowerBound_ = distributionLowerBound; Interval::BoolCollection distributionFiniteLowerBound(distribution.getRange().getFiniteLowerBound()); Point distributionUpperBound(distribution.getRange().getUpperBound()); upperBound_ = distributionUpperBound; Interval::BoolCollection distributionFiniteUpperBound(distribution.getRange().getFiniteUpperBound()); // For the marginal distribution Point lowerBound(dimension); Interval::BoolCollection finiteLowerBound(dimension); Point upperBound(dimension); Interval::BoolCollection finiteUpperBound(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const UnsignedInteger j = indices[i]; lowerBound[i] = distributionLowerBound[j]; finiteLowerBound[i] = distributionFiniteLowerBound[j]; upperBound[i] = distributionUpperBound[j]; finiteUpperBound[i] = distributionFiniteUpperBound[j]; } setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); // Extract the description const Description distributionDescription(distribution_.getDescription()); Description description(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) description[i] = distributionDescription[indices_[i]]; setDescription(description); } /* Virtual constructor */ MarginalDistribution * MarginalDistribution::clone() const { return new MarginalDistribution(*this); } /* Get one realization of the MarginalDistribution */ Point MarginalDistribution::getRealization() const { const UnsignedInteger dimension = getDimension(); const Point distributionRealization(distribution_.getRealization()); Point realization(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) realization[i] = distributionRealization[indices_[i]]; return realization; } Sample MarginalDistribution::getSample(const UnsignedInteger size) const { return distribution_.getSample(size).getMarginal(indices_); } /* Get the CDF of the MarginalDistribution */ Scalar MarginalDistribution::computeCDF(const Point & point) const { const Point x(expandPoint(point)); const Scalar cdf = distribution_.computeCDF(x); return cdf; } Scalar MarginalDistribution::computeSurvivalFunction(const Point & point) const { return distribution_.computeSurvivalFunction(expandPoint(point, false)); } /* Compute the probability content of an interval */ Scalar MarginalDistribution::computeProbability(const Interval & interval) const { return distribution_.computeProbability(Interval(expandPoint(interval.getLowerBound(), false), expandPoint(interval.getUpperBound()))); } /* Compute the mean of the distribution. It is cheap if the marginal means are cheap */ void MarginalDistribution::computeMean() const { mean_ = reducePoint(distribution_.getMean()); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point MarginalDistribution::getStandardDeviation() const { return reducePoint(distribution_.getStandardDeviation()); } /* Compute the covariance of the distribution */ void MarginalDistribution::computeCovariance() const { const UnsignedInteger dimension = getDimension(); const CovarianceMatrix distributionCovariance(distribution_.getCovariance()); covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) { const UnsignedInteger jDistribution = indices_[j]; for (UnsignedInteger i = j; i < dimension; ++i) { const UnsignedInteger iDistribution = indices_[i]; covariance_(i, j) = distributionCovariance(iDistribution, jDistribution); } } isAlreadyComputedCovariance_ = true; } // computeCovariance /* Get the skewness of the distribution */ Point MarginalDistribution::getSkewness() const { return reducePoint(distribution_.getSkewness()); } /* Get the kurtosis of the distribution */ Point MarginalDistribution::getKurtosis() const { return reducePoint(distribution_.getKurtosis()); } /* Get the Spearman correlation of the distribution */ CorrelationMatrix MarginalDistribution::getSpearmanCorrelation() const { const UnsignedInteger dimension = getDimension(); const CorrelationMatrix distributionSpearmanCorrelation(distribution_.getSpearmanCorrelation()); CorrelationMatrix spearmanCorrelation(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) { const UnsignedInteger jDistribution = indices_[j]; for (UnsignedInteger i = j; i < dimension; ++i) { const UnsignedInteger iDistribution = indices_[i]; spearmanCorrelation(i, j) = distributionSpearmanCorrelation(iDistribution, jDistribution); } } return spearmanCorrelation; } /* Get the Spearman correlation of the distribution */ CorrelationMatrix MarginalDistribution::getKendallTau() const { const UnsignedInteger dimension = getDimension(); const CorrelationMatrix distributionKendallTau(distribution_.getKendallTau()); CorrelationMatrix kendallTau(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) { const UnsignedInteger jDistribution = indices_[j]; for (UnsignedInteger i = j; i < dimension; ++i) { const UnsignedInteger iDistribution = indices_[i]; kendallTau(i, j) = distributionKendallTau(iDistribution, jDistribution); } } return kendallTau; } /* Get the i-th marginal distribution */ MarginalDistribution::Implementation MarginalDistribution::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; return getMarginal(Indices(1, i)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ MarginalDistribution::Implementation MarginalDistribution::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); // Build the indices associated to the marginal of the marginal const UnsignedInteger outputDimension = indices.getSize(); Indices marginalIndices(outputDimension); for (UnsignedInteger i = 0; i < outputDimension; ++i) marginalIndices[i] = indices_[indices[i]]; return MarginalDistribution(distribution_, marginalIndices).clone(); } /* Get the isoprobabilistic transformation */ MarginalDistribution::IsoProbabilisticTransformation MarginalDistribution::getIsoProbabilisticTransformation() const { return distribution_.getIsoProbabilisticTransformation().getMarginal(indices_); } /* Get the inverse isoprobabilist transformation */ MarginalDistribution::InverseIsoProbabilisticTransformation MarginalDistribution::getInverseIsoProbabilisticTransformation() const { return distribution_.getInverseIsoProbabilisticTransformation().getMarginal(indices_); } /* Get the standard distribution */ MarginalDistribution::Implementation MarginalDistribution::getStandardDistribution() const { return distribution_.getStandardDistribution().getMarginal(indices_).getImplementation(); } /* Tell if the distribution has independent copula */ Bool MarginalDistribution::hasIndependentCopula() const { return (getDimension() == 1) || distribution_.hasIndependentCopula(); } /* Tell if the distribution has elliptical copula */ Bool MarginalDistribution::hasEllipticalCopula() const { return (getDimension() == 1) || distribution_.hasEllipticalCopula(); } /* Check if the distribution is elliptical */ Bool MarginalDistribution::isElliptical() const { return distribution_.isElliptical(); } /* Check if the distribution is continuous */ Bool MarginalDistribution::isContinuous() const { return distribution_.isContinuous(); } /* Check if the distribution is discrete */ Bool MarginalDistribution::isDiscrete() const { return distribution_.isDiscrete(); } /* Tell if the distribution is integer valued */ Bool MarginalDistribution::isIntegral() const { return distribution_.isIntegral(); } /* Method to expand a given point in the marginal space to a point in the underlying distribution space */ Point MarginalDistribution::expandPoint(const Point & point, const Bool upper) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << dimension << ", got dimension=" << point.getDimension(); Point distributionPoint(upper ? upperBound_ : lowerBound_); for (UnsignedInteger i = 0; i < dimension; ++i) distributionPoint[indices_[i]] = point[i]; return distributionPoint; } /* Method to reduce a given point in the distribution space to a point in the marginal distribution space */ Point MarginalDistribution::reducePoint(const Point & point) const { if (point.getDimension() != distribution_.getDimension()) throw InvalidArgumentException(HERE) << "Error: expected a point of dimension=" << distribution_.getDimension() << ", got dimension=" << point.getDimension(); const UnsignedInteger dimension = getDimension(); Point marginalPoint(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) marginalPoint[i] = point[indices_[i]]; return marginalPoint; } /* Method save() stores the object through the StorageManager */ void MarginalDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "indices_", indices_ ); } /* Method load() reloads the object from the StorageManager */ void MarginalDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); Distribution distribution; Indices indices; adv.loadAttribute( "distribution_", distribution ); adv.loadAttribute( "indices_", indices_ ); setDistributionAndIndices(distribution, indices); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MaximumDistribution.cxx000066400000000000000000000234651307543307100265170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The MaximumDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/MaximumDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ComposedDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MaximumDistribution); static const Factory Factory_MaximumDistribution; /* Default constructor */ MaximumDistribution::MaximumDistribution() : DistributionImplementation() , distribution_() , allSame_(true) , variablesNumber_(1) { setName("MaximumDistribution"); setDimension(1); // Adjust the truncation interval and the distribution range setDistribution(Distribution()); } /* Parameters constructor */ MaximumDistribution::MaximumDistribution(const Distribution & distribution) : DistributionImplementation() , distribution_() , allSame_(false) , variablesNumber_(distribution.getDimension()) { setName("MaximumDistribution"); setDimension(1); setDistribution(distribution); } /* Parameters constructor */ MaximumDistribution::MaximumDistribution(const DistributionCollection & collection) : DistributionImplementation() , distribution_() , allSame_(true) , variablesNumber_(collection.getSize()) { if (variablesNumber_ == 0) throw InvalidArgumentException(HERE) << "Error: cannot take the maximum of an empty collection of distributions"; for (UnsignedInteger i = 0; i < variablesNumber_; ++i) if (collection[i].getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot take the maximum of a collection of multivariate distributions, here distribution=" << i << " has dimension=" << collection[i].getDimension(); setName("MaximumDistribution"); setDimension(1); for (UnsignedInteger i = 0; i < variablesNumber_; ++i) if (collection[i] != collection[0]) { allSame_ = false; break; } if (allSame_) setDistribution(collection[0]); else setDistribution(ComposedDistribution(collection)); } /* Parameters constructor */ MaximumDistribution::MaximumDistribution(const Distribution & distribution, const UnsignedInteger variablesNumber) : DistributionImplementation() , distribution_() , allSame_(true) , variablesNumber_(variablesNumber) { if (variablesNumber_ == 0) throw InvalidArgumentException(HERE) << "Error: cannot take the maximum of an empty collection of distributions"; if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot take the maximum of a collection of multivariate distributions, here distribution=0 has dimension=" << distribution.getDimension(); setName("MaximumDistribution"); setDimension(1); setDistribution(distribution); } /* Comparison operator */ Bool MaximumDistribution::operator ==(const MaximumDistribution & other) const { if (this == &other) return true; return (distribution_ == other.distribution_); } Bool MaximumDistribution::equals(const DistributionImplementation & other) const { const MaximumDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MaximumDistribution::__repr__() const { OSS oss; oss << "class=" << MaximumDistribution::GetClassName() << " name=" << getName() << " distribution=" << distribution_; return oss; } String MaximumDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(" << getDistribution().__str__() << ")"; return oss; } /* Virtual constructor */ MaximumDistribution * MaximumDistribution::clone() const { return new MaximumDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void MaximumDistribution::computeRange() { if (allSame_) setRange(distribution_.getRange()); const Point lower(distribution_.getRange().getLowerBound()); const Point upper(distribution_.getRange().getUpperBound()); setRange(Interval(*std::max_element(lower.begin(), lower.end()), *std::max_element(upper.begin(), upper.end()))); } /* Get one realization of the distribution */ Point MaximumDistribution::getRealization() const { if (allSame_) return distribution_.getSample(variablesNumber_).getMax(); const Point realization(distribution_.getRealization()); return Point(1, *std::max_element(realization.begin(), realization.end())); } /* Get the PDF of the distribution */ Scalar MaximumDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if ((point[0] <= getRange().getLowerBound()[0]) || (point[0] >= getRange().getUpperBound()[0])) return 0.0; // Special case for identical independent variables if (allSame_) return distribution_.computePDF(point) * std::pow(distribution_.computeCDF(point), static_cast(variablesNumber_) - 1.0); // General case if (!distribution_.hasIndependentCopula()) DistributionImplementation::computePDF(point); // Special treatment of the independent copula case const UnsignedInteger size = distribution_.getDimension(); Point marginalCDF(size); Scalar product = 1.0; DistributionCollection marginals(size); for (UnsignedInteger i = 0; i < size; ++i) { marginals[i] = distribution_.getMarginal(i); const Scalar cdf = marginals[i].computeCDF(point); if ((cdf == 0) || (cdf == 1.0)) return 0.0; marginalCDF[i] = cdf; product *= cdf; } Scalar sum = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar pdfI = marginals[i].computePDF(point); if (pdfI > 0.0) sum += pdfI / marginalCDF[i]; } return sum * product; } /* Get the CDF of the distribution */ Scalar MaximumDistribution::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); // Special case for identical independent variables if (allSame_) return std::pow(distribution_.computeCDF(point), static_cast(variablesNumber_)); // General case return distribution_.computeCDF(Point(distribution_.getDimension(), point[0])); } /* Parameters value and description accessor */ MaximumDistribution::PointWithDescriptionCollection MaximumDistribution::getParametersCollection() const { // This is done on purpose to distinguish the case allSame == True if (allSame_) return getDistribution().getParametersCollection(); return distribution_.getParametersCollection(); } void MaximumDistribution::setParametersCollection(const PointCollection & parametersCollection) { // This trick is needed n order to cope with the case allSame == True if (allSame_) { Distribution clone(getDistribution()); clone.setParametersCollection(parametersCollection); distribution_ = clone; } else distribution_.setParametersCollection(parametersCollection); } /* Distribution accessor */ void MaximumDistribution::setDistribution(const Distribution & distribution) { // Here we suppose that variablesNumber_ has already been initialized with the // correct value, ie either the distribution dimension is equal to 1 and // variablesNumber_ can take any positive value, or the distribution dimension // is greater than 1 and variablesNumber_ is equalt to this dimension const UnsignedInteger dimension = distribution.getDimension(); if ((dimension > 1) && (dimension != variablesNumber_)) throw InvalidArgumentException(HERE) << "Error: the distribution dimension=" << dimension << " does not match the number of variables=" << variablesNumber_; distribution_ = distribution; allSame_ = (dimension == 1); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = distribution_.getImplementation()->isParallel(); computeRange(); } Distribution MaximumDistribution::getDistribution() const { if (allSame_) return ComposedDistribution(DistributionCollection(variablesNumber_, distribution_)); return distribution_; } Bool MaximumDistribution::isContinuous() const { return distribution_.isContinuous(); } /* Tell if the distribution is discrete */ Bool MaximumDistribution::isDiscrete() const { return distribution_.isDiscrete(); } /* Tell if the distribution is integer valued */ Bool MaximumDistribution::isIntegral() const { return distribution_.isIntegral(); } /* Method save() stores the object through the StorageManager */ void MaximumDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "allSame_", allSame_ ); adv.saveAttribute( "variablesNumber_", variablesNumber_ ); } /* Method load() reloads the object from the StorageManager */ void MaximumDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); Distribution distribution; adv.loadAttribute( "distribution_", distribution ); adv.loadAttribute( "allSame_", allSame_ ); adv.loadAttribute( "variablesNumber_", variablesNumber_ ); setDistribution(distribution); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MaximumEntropyOrderStatisticsCopula.cxx000066400000000000000000000165671307543307100317200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The maximum entropy order statistics copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MaximumEntropyOrderStatisticsCopula.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MaximumEntropyOrderStatisticsCopula); static const Factory Factory_MaximumEntropyOrderStatisticsCopula; /* Default constructor */ MaximumEntropyOrderStatisticsCopula::MaximumEntropyOrderStatisticsCopula() : SklarCopula(MaximumEntropyOrderStatisticsDistribution()) , distribution_() { setName("MaximumEntropyOrderStatisticsCopula"); setDimension(distribution_.getDimension()); isParallel_ = distribution_.isParallel(); } /* Parameters constructor */ MaximumEntropyOrderStatisticsCopula::MaximumEntropyOrderStatisticsCopula(const DistributionCollection & coll) : SklarCopula(MaximumEntropyOrderStatisticsDistribution(coll)) , distribution_(coll) { setName("MaximumEntropyOrderStatisticsCopula"); setDimension(distribution_.getDimension()); computeRange(); isParallel_ = distribution_.isParallel(); } /* Constructor with no check of the parameters, to speed-up margina creations */ MaximumEntropyOrderStatisticsCopula::MaximumEntropyOrderStatisticsCopula(const MaximumEntropyOrderStatisticsDistribution & distribution) : SklarCopula(distribution) , distribution_(distribution) { setName("MaximumEntropyOrderStatisticsCopula"); setDimension(distribution_.getDimension()); computeRange(); isParallel_ = distribution_.isParallel(); } /* Comparison operator */ Bool MaximumEntropyOrderStatisticsCopula::operator ==(const MaximumEntropyOrderStatisticsCopula & other) const { if (this == &other) return true; return (distribution_ == other.distribution_); } Bool MaximumEntropyOrderStatisticsCopula::equals(const DistributionImplementation & other) const { const MaximumEntropyOrderStatisticsCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MaximumEntropyOrderStatisticsCopula::__repr__() const { OSS oss(true); oss << "class=" << MaximumEntropyOrderStatisticsCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " distribution=" << distribution_; return oss; } String MaximumEntropyOrderStatisticsCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(collection = " << distribution_.distributionCollection_ << ")"; return oss; } /* Virtual constructor */ MaximumEntropyOrderStatisticsCopula * MaximumEntropyOrderStatisticsCopula::clone() const { return new MaximumEntropyOrderStatisticsCopula(*this); } /* Get the kth approximation */ PiecewiseHermiteEvaluation MaximumEntropyOrderStatisticsCopula::getApproximation(const UnsignedInteger k) const { return distribution_.getApproximation(k); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ MaximumEntropyOrderStatisticsCopula::Implementation MaximumEntropyOrderStatisticsCopula::getMarginal(const Indices & indices) const { const UnsignedInteger size = indices.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "indices is empty"; const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); if (size == 1) { Implementation marginal(getMarginal(indices[0])); marginal->setDescription(Description(1, getDescription()[indices[0]])); return marginal; } Description marginalDescription(0); const Description description(getDescription()); MaximumEntropyOrderStatisticsCopula marginal(distribution_.getMarginalAsMaximumEntropyOrderStatisticsDistribution(indices)); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger j = indices[i]; marginalDescription.add(description[j]); } marginal.setDescription(marginalDescription); return marginal.clone(); } /* Distribution collection accessor */ void MaximumEntropyOrderStatisticsCopula::setDistributionCollection(const DistributionCollection & coll) { distribution_.setDistributionCollection(coll); } /* Parameters value and description accessor */ MaximumEntropyOrderStatisticsCopula::PointWithDescriptionCollection MaximumEntropyOrderStatisticsCopula::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension); const Description description(getDescription()); // First put the marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { // Each marginal distribution must output a collection of parameters of size 1, even if it contains an empty Point const PointWithDescriptionCollection marginalParameters(distribution_.distributionCollection_[marginalIndex].getParametersCollection()); PointWithDescription point(marginalParameters[0]); Description marginalParametersDescription(point.getDescription()); // Here we must add a unique prefix to the marginal parameters description in order to deambiguate the parameters of different marginals sharing the same description for (UnsignedInteger i = 0; i < point.getDimension(); ++i) marginalParametersDescription[i] = (OSS() << marginalParametersDescription[i] << "_marginal_" << marginalIndex); point.setDescription(marginalParametersDescription); point.setName(description[marginalIndex]); parameters[marginalIndex] = point; } // marginalIndex return parameters; } // getParametersCollection void MaximumEntropyOrderStatisticsCopula::setParametersCollection(const PointCollection& parametersCollection) { distribution_.setParametersCollection(parametersCollection); } MaximumEntropyOrderStatisticsCopula::DistributionCollection MaximumEntropyOrderStatisticsCopula::getDistributionCollection() const { return distribution_.distributionCollection_; } /* Compute the covariance of the copula */ void MaximumEntropyOrderStatisticsCopula::computeCovariance() const { DistributionImplementation::computeCovariance(); } /* Method save() stores the object through the StorageManager */ void MaximumEntropyOrderStatisticsCopula::save(Advocate & adv) const { SklarCopula::save(adv); adv.saveAttribute("distribution_", distribution_); } /* Method load() reloads the object from the StorageManager */ void MaximumEntropyOrderStatisticsCopula::load(Advocate & adv) { SklarCopula::load(adv); adv.loadAttribute("distribution_", distribution_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MaximumEntropyOrderStatisticsDistribution.cxx000066400000000000000000001350571307543307100331500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The maximum entropy order statistics distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MaximumEntropyOrderStatisticsDistribution.hxx" #include "openturns/MaximumEntropyOrderStatisticsCopula.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OrderStatisticsMarginalChecker.hxx" #include "openturns/Uniform.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/Brent.hxx" #include "openturns/MethodBoundEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MaximumEntropyOrderStatisticsDistribution); static const Factory Factory_MaximumEntropyOrderStatisticsDistribution; /* Default constructor */ MaximumEntropyOrderStatisticsDistribution::MaximumEntropyOrderStatisticsDistribution() : ContinuousDistribution() { setName("MaximumEntropyOrderStatisticsDistribution"); DistributionCollection coll(2); coll[0] = Uniform(-1.0, 0.5); coll[1] = Uniform(-0.5, 1.0); integrator_ = GaussKronrod(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization"), ResourceMap::GetAsScalar("GaussKronrod-MaximumError"), GaussKronrodRule(GaussKronrodRule::G7K15)); // This call set also the range. Use approximation but don't check marginals. setDistributionCollection(coll, true, false); setIntegrationNodesNumber(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-CDFIntegrationNodesNumber")); // To insure that the nodes will be already computed when calling computeCDF() in parallel Point weights; Point nodes(getGaussNodesAndWeights(weights)); } /* Parameters constructor */ MaximumEntropyOrderStatisticsDistribution::MaximumEntropyOrderStatisticsDistribution(const DistributionCollection & coll, const Bool useApprox, const Bool checkMarginals) : ContinuousDistribution() , distributionCollection_(coll) { setName("MaximumEntropyOrderStatisticsDistribution"); integrator_ = GaussKronrod(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization"), ResourceMap::GetAsScalar("GaussKronrod-MaximumError"), GaussKronrodRule(GaussKronrodRule::G7K15)); // This call set also the range. setDistributionCollection(coll, useApprox, checkMarginals); setIntegrationNodesNumber(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-CDFIntegrationNodesNumber")); // To insure that the nodes will be already computed when calling computeCDF() in parallel Point weights; Point nodes(getGaussNodesAndWeights(weights)); } /* Parameters constructor */ MaximumEntropyOrderStatisticsDistribution::MaximumEntropyOrderStatisticsDistribution(const DistributionCollection & coll, const Indices & partition, const Bool useApprox, const Collection & exponentialFactorApproximation, const Description & description) : ContinuousDistribution() , distributionCollection_(coll) , partition_(partition) , useApproximation_(useApprox) , exponentialFactorApproximation_(exponentialFactorApproximation) , integrator_(GaussKronrod(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization"), ResourceMap::GetAsScalar("GaussKronrod-MaximumError"), GaussKronrodRule(GaussKronrodRule::G7K15))) { isParallel_ = false; // Initialize the distribution manually in order to avoid costly checks that are not needed here const UnsignedInteger size = coll.getSize(); setDimension(size); computeRange(); setDescription(description); setIntegrationNodesNumber(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-CDFIntegrationNodesNumber")); // To insure that the nodes will be already computed when calling computeCDF() in parallel Point weights; Point nodes(getGaussNodesAndWeights(weights)); } /* Comparison operator */ Bool MaximumEntropyOrderStatisticsDistribution::operator ==(const MaximumEntropyOrderStatisticsDistribution & other) const { if (this == &other) return true; return (distributionCollection_ == other.distributionCollection_); } Bool MaximumEntropyOrderStatisticsDistribution::equals(const DistributionImplementation & other) const { const MaximumEntropyOrderStatisticsDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MaximumEntropyOrderStatisticsDistribution::__repr__() const { OSS oss(true); oss << "class=" << MaximumEntropyOrderStatisticsDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " collection=" << distributionCollection_; return oss; } String MaximumEntropyOrderStatisticsDistribution::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(collection = " << distributionCollection_ << ")"; return oss; } /* Virtual constructor */ MaximumEntropyOrderStatisticsDistribution * MaximumEntropyOrderStatisticsDistribution::clone() const { return new MaximumEntropyOrderStatisticsDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void MaximumEntropyOrderStatisticsDistribution::computeRange() { const UnsignedInteger dimension = getDimension(); Point lowerBound(dimension); Point upperBound(dimension); Interval::BoolCollection finiteLowerBound(dimension); Interval::BoolCollection finiteUpperBound(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Interval atomRange(distributionCollection_[i].getRange()); lowerBound[i] = atomRange.getLowerBound()[0]; upperBound[i] = atomRange.getUpperBound()[0]; finiteLowerBound[i] = atomRange.getFiniteLowerBound()[0]; finiteUpperBound[i] = atomRange.getFiniteUpperBound()[0]; } setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } struct MaximumEntropyOrderStatisticsDistributionWrapper { MaximumEntropyOrderStatisticsDistributionWrapper(const MaximumEntropyOrderStatisticsDistribution & distribution, const UnsignedInteger lower, const UnsignedInteger upper, const Scalar lowerBound) : distribution_(distribution) , lower_(lower) , upper_(upper) , lowerBound_(lowerBound) { // Nothing to do } Point computePhi(const Point & point) const { const Scalar pdfUpper = distribution_.distributionCollection_[upper_].computePDF(point); Scalar value = 0.0; if (pdfUpper > 0.0) { // First, try to use complementary CDF Scalar a = distribution_.distributionCollection_[lower_].computeComplementaryCDF(point); Scalar b = -1.0; // If the smallest complementary CDF is less than 1/2 it is better to use complementary CDF if (a < 0.5) b = distribution_.distributionCollection_[upper_].computeComplementaryCDF(point); // Else use CDF else { a = distribution_.distributionCollection_[upper_].computeCDF(point); b = distribution_.distributionCollection_[lower_].computeCDF(point); } if (b > a) value = pdfUpper / (b - a); } return Point(1, value); } Point computePartialFactor(const Point & point) const { return Point(1, distribution_.computeFactor(upper_, lowerBound_, point[0])); } Point computePartialExponentialFactor(const Point & point) const { return Point(1, distribution_.computeExponentialFactor(upper_, lowerBound_, point[0])); } const MaximumEntropyOrderStatisticsDistribution & distribution_; const UnsignedInteger lower_; const UnsignedInteger upper_; const Scalar lowerBound_; }; // struct MaximumEntropyOrderStatisticsDistributionWrapper /* Compute the exponential factor */ Scalar MaximumEntropyOrderStatisticsDistribution::computeExponentialFactor(const UnsignedInteger k, const Scalar x, const Scalar y) const { if (y < x) { const Scalar value = computeExponentialFactor(k, y, x); if (value == 0.0) return SpecFunc::LogMinScalar; return 1.0 / value; } // Generic part, no approximation here if (x == y) { const Scalar value = 1.0; return value; } const Scalar a = distributionCollection_[k].getRange().getLowerBound()[0]; if (y <= a) return 1.0; const Scalar b = distributionCollection_[k].getRange().getUpperBound()[0]; if (y >= b) return 0.0; const Scalar beta = distributionCollection_[k - 1].getRange().getUpperBound()[0]; if (x >= beta) return distributionCollection_[k].computeComplementaryCDF(y) / distributionCollection_[k].computeComplementaryCDF(x); // Here the computation depends on the use of approximation if (!useApproximation_) { const Scalar factor = computeFactor(k, x, y); return std::exp(-factor); } // Here we know that x < y, y > a, y < b, x < beta if (x <= a) { // x <= a, y > a, y <= beta if (y <= beta) return exponentialFactorApproximation_[k - 1](Point(1, y))[0]; // x <= a, y > beta, y < b const Scalar ccdfY = distributionCollection_[k].computeComplementaryCDF(y); const Scalar ccdfBeta = distributionCollection_[k].computeComplementaryCDF(beta); const Scalar rho = ccdfY / ccdfBeta; return exponentialFactorApproximation_[k - 1](Point(1, beta))[0] * rho; } // x > a, x < beta // y <= beta if (y <= beta) return exponentialFactorApproximation_[k - 1](Point(1, y))[0] / exponentialFactorApproximation_[k - 1](Point(1, x))[0]; // x > a, y > beta, y < b const Scalar ccdfY = distributionCollection_[k].computeComplementaryCDF(y); const Scalar ccdfBeta = distributionCollection_[k].computeComplementaryCDF(beta); const Scalar rho = ccdfY / ccdfBeta; return exponentialFactorApproximation_[k - 1](Point(1, beta))[0] / exponentialFactorApproximation_[k - 1](Point(1, x))[0] * rho; } /* Compute the factor */ Scalar MaximumEntropyOrderStatisticsDistribution::computeFactor(const UnsignedInteger k, const Scalar x, const Scalar y) const { if (y < x) return -computeFactor(k, y, x); // Generic part, no approximation here if (x == y) { const Scalar value = 0.0; return value; } const Scalar a = distributionCollection_[k].getRange().getLowerBound()[0]; if (y <= a) return 0.0; const Scalar b = distributionCollection_[k].getRange().getUpperBound()[0]; if (y >= b) return SpecFunc::LogMaxScalar; const Scalar beta = distributionCollection_[k - 1].getRange().getUpperBound()[0]; if (x >= beta) { const Scalar value = std::log(distributionCollection_[k].computeComplementaryCDF(y) / distributionCollection_[k].computeComplementaryCDF(x)); return value; } if (useApproximation_) { const Scalar exponentialFactor = computeExponentialFactor(k, x, y); if (exponentialFactor == 0.0) return SpecFunc::LogMaxScalar; return -std::log(exponentialFactor); } const MaximumEntropyOrderStatisticsDistributionWrapper phiKWrapper(*this, k - 1, k, a); const Function fPhiK(bindMethod(phiKWrapper, &MaximumEntropyOrderStatisticsDistributionWrapper::computePhi, 1, 1)); Scalar error = -1.0; // Here we know that x < y, y > a, y < b, x < beta if (x <= a) { // x <= a, y > a, y <= beta if (y <= beta) { const Scalar value = integrator_.integrate(fPhiK, Interval(a, y), error)[0]; return value; } // x <= a, y > beta, y < b const Scalar ccdfY = distributionCollection_[k].computeComplementaryCDF(y); const Scalar ccdfBeta = distributionCollection_[k].computeComplementaryCDF(beta); const Scalar rho = ccdfY / ccdfBeta; const Scalar value = integrator_.integrate(fPhiK, Interval(a, beta), error)[0] - std::log(rho); return value; } // x > a, x < beta // x > a, y <= beta if (y <= beta) { const Scalar value = integrator_.integrate(fPhiK, Interval(x, y), error)[0]; return value; } // x > a, y > beta, y < b const Scalar ccdfY = distributionCollection_[k].computeComplementaryCDF(y); const Scalar ccdfBeta = distributionCollection_[k].computeComplementaryCDF(beta); const Scalar rho = ccdfY / ccdfBeta; const Scalar value = integrator_.integrate(fPhiK, Interval(x, beta), error)[0] - std::log(rho); return value; } /* Get one realization of the distribution */ Point MaximumEntropyOrderStatisticsDistribution::getRealization() const { const UnsignedInteger dimension = getDimension(); Point x(1); x[0] = distributionCollection_[0].getRealization()[0]; for(UnsignedInteger k = 1; k < dimension; ++ k) { const Scalar xK = computeConditionalQuantile(RandomGenerator::Generate(), x); x.add(xK); } return x; } /* Build a C1 interpolation of the exponential factor between the two given marginals */ PiecewiseHermiteEvaluation MaximumEntropyOrderStatisticsDistribution::interpolateExponentialFactor(const UnsignedInteger lower, const UnsignedInteger upper, const UnsignedInteger maximumSubdivision, const Scalar shift) const { if (lower >= upper) throw InvalidArgumentException(HERE) << "Error: expected lower=" << lower << " to be less than upper=" << upper; const Scalar xMin = distributionCollection_[upper].getRange().getLowerBound()[0]; const Scalar xMax = distributionCollection_[lower].getRange().getUpperBound()[0]; const MaximumEntropyOrderStatisticsDistributionWrapper phiWrapper(*this, lower, upper, xMin); const Function phi(bindMethod(phiWrapper, &MaximumEntropyOrderStatisticsDistributionWrapper::computePartialExponentialFactor, 1, 1)); Point lowerBounds; Point upperBounds; Sample contributions; Point localErrors; Scalar error = -1.0; // We integrate the exponential factor in order to detect all the singularities using polynomial approximations of different order const Point tmp(GaussKronrod(ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization"), ResourceMap::GetAsScalar("GaussKronrod-MaximumError"), GaussKronrodRule(GaussKronrodRule::G1K3)).integrate(phi, xMin, xMax, error, lowerBounds, upperBounds, contributions, localErrors)); // Now, we have to sort the intervals in order to build the approximation std::sort(upperBounds.begin(), upperBounds.end()); // Here we have to subdivide the intervals to take into account the poorer approximation given by Hermite polynomials Scalar a = std::abs(xMin) < shift ? shift : xMin + shift * std::abs(xMin); Point locations(1, a); for (UnsignedInteger i = 0; i < upperBounds.getSize(); ++i) { const Scalar b = upperBounds[i]; const Scalar step = (b - a) / maximumSubdivision; for (UnsignedInteger j = 1; j <= maximumSubdivision; ++j) locations.add(a + j * step); a = b; } const UnsignedInteger size = locations.getSize(); Point values(size); Point derivatives(size); for (UnsignedInteger i = 0; i < size; ++i) { const Point x(1, locations[i]); const Scalar exponentialScalar = phiWrapper.computePartialExponentialFactor(x)[0]; values[i] = exponentialScalar; derivatives[i] = -phiWrapper.computePhi(x)[0] * exponentialScalar; } return PiecewiseHermiteEvaluation(locations, values, derivatives); } /* Build a C1 interpolation of the exponential factors in the PDF */ void MaximumEntropyOrderStatisticsDistribution::interpolateExponentialFactors() { // Use exact values to build the approximation useApproximation_ = false; UnsignedInteger dimension = getDimension(); exponentialFactorApproximation_ = Collection(dimension - 1); const UnsignedInteger maximumSubdivision = ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-MaximumApproximationSubdivision"); const Scalar shift = ResourceMap::GetAsScalar("MaximumEntropyOrderStatisticsDistribution-SupportShift"); for(UnsignedInteger k = 1; k < dimension; ++k) { if (!partition_.contains(k - 1)) exponentialFactorApproximation_[k - 1] = interpolateExponentialFactor(k - 1, k, maximumSubdivision, shift); } // k // Force parallelism here isParallel_ = true; useApproximation_ = true; } /* Get the kth approximation */ PiecewiseHermiteEvaluation MaximumEntropyOrderStatisticsDistribution::getApproximation(const UnsignedInteger k) const { if (k >= exponentialFactorApproximation_.getSize()) throw InvalidArgumentException(HERE) << "Error: the index=" << k << " must be less than " << exponentialFactorApproximation_.getSize(); return exponentialFactorApproximation_[k]; } /* Get the PDF of the distribution */ Scalar MaximumEntropyOrderStatisticsDistribution::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Early exit if the point is not in the support for (UnsignedInteger k = 1; k < dimension; ++ k) if (point[k - 1] > point[k]) return 0.0; if (!getRange().numericallyContains(point)) return 0.0; // Early exit for the independent case if (hasIndependentCopula()) { Scalar pdfValue = distributionCollection_[0].computePDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) pdfValue *= distributionCollection_[k].computePDF(point[k]); return pdfValue; } // Here we have to compute something Scalar productPDF = distributionCollection_[0].computePDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) { if (!partition_.contains(k - 1)) { // Compute the lower bound of the integral. The integrand is zero outside of the range of the kth distribution const Scalar xMin = std::max(point[k - 1], distributionCollection_[k].getRange().getLowerBound()[0]); // Compute the upper bound of the integral. The integral has a closed form outside of the range of the (k-1)th distribution, but we have still to compute the integral on the intersection with this range const Scalar xK = point[k]; const Scalar bKm1 = distributionCollection_[k - 1].getRange().getUpperBound()[0]; Scalar xMax = 0.0; Scalar cdfKm1 = 0.0; if (bKm1 < xK) { xMax = bKm1; cdfKm1 = 1.0; } else { xMax = xK; cdfKm1 = distributionCollection_[k - 1].computeCDF(xMax); } Scalar cdfK = distributionCollection_[k].computeCDF(xMax); const Scalar pdfK = distributionCollection_[k].computePDF(point[k]); const Scalar exponentialFactor = computeExponentialFactor(k, xMin, xMax); productPDF *= pdfK * exponentialFactor / (cdfKm1 - cdfK); } // Partition } // Loop over k return productPDF; } /* Get the log PDF of the distribution */ Scalar MaximumEntropyOrderStatisticsDistribution::computeLogPDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Early exit if the point is not in the support for (UnsignedInteger k = 1; k < dimension; ++ k) if (point[k - 1] > point[k]) return SpecFunc::LogMinScalar; if (!getRange().numericallyContains(point)) return SpecFunc::LogMinScalar; // Early exit for the independent case if (hasIndependentCopula()) { Scalar logPDFValue = distributionCollection_[0].computeLogPDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) logPDFValue += distributionCollection_[k].computeLogPDF(point[k]); return logPDFValue; } // Here we have to compute something Scalar sumLogPDF = distributionCollection_[0].computeLogPDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) { if (!partition_.contains(k - 1)) { // Compute the lower bound of the integral. The integrand is zero outside of the range of the kth distribution const Scalar xMin = std::max(point[k - 1], distributionCollection_[k].getRange().getLowerBound()[0]); // Compute the upper bound of the integral. The integral has a closed form outside of the range of the (k-1)th distribution, but we have still to compute the integral on the intersection with this range const Scalar xK = point[k]; const Scalar bKm1 = distributionCollection_[k - 1].getRange().getUpperBound()[0]; Scalar xMax = 0.0; Scalar cdfKm1 = 0.0; if (bKm1 < xK) { xMax = bKm1; cdfKm1 = 1.0; } else { xMax = xK; cdfKm1 = distributionCollection_[k - 1].computeCDF(xMax); } Scalar cdfK = distributionCollection_[k].computeCDF(xMax); const Scalar logPDFK = distributionCollection_[k].computeLogPDF(point[k]); const Scalar factor = computeFactor(k, xMin, xMax); sumLogPDF += logPDFK - factor - std::log(cdfKm1 - cdfK); } // Partition } // Loop over k return sumLogPDF; } /* Get the CDF of the distribution */ Scalar MaximumEntropyOrderStatisticsDistribution::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // If there is a miracle: we are in the independent case! if (hasIndependentCopula()) { Scalar cdf = distributionCollection_[0].computeCDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) cdf *= distributionCollection_[k].computeCDF(point[k]); return cdf; } // Indices of the components to take into account in the computation Indices toKeep(0); Point reducedPoint(0); const Point lowerBound(getRange().getLowerBound()); const Point upperBound(getRange().getUpperBound()); for (UnsignedInteger k = 0; k < dimension; ++ k) { const Scalar xK = point[k]; // Early exit if one component is nonpositive if (xK <= lowerBound[k]) return 0.0; // Keep only the indices for which xK is in (xk_min, xk_max) and xK < xKp1 // Marginalize the others const Scalar bound = k < dimension - 1 ? std::min(point[k + 1], upperBound[k]) : upperBound[k]; if (xK < bound) { toKeep.add(k); reducedPoint.add(xK); } } // k // If all the components are greater or equal to their marginal upper bound if (toKeep.getSize() == 0) { return 1.0; } // If one or more components (but not all) are greater or equal to their marginal upper bound compute a marginal CDF if (toKeep.getSize() < dimension) { const Scalar cdf = getMarginal(toKeep)->computeCDF(reducedPoint); return cdf; } // Else we have to do some work // Try to split the work into smaller pieces using potential block-independence const UnsignedInteger partitionSize = partition_.getSize(); if (partitionSize > 0) { Scalar cdf = 1.0; UnsignedInteger firstIndex = 0; for (UnsignedInteger i = 0; i <= partitionSize; ++i) { const UnsignedInteger lastIndex = i < partitionSize ? partition_[i] + 1 : dimension; Indices dependentBlockIndices(lastIndex - firstIndex); dependentBlockIndices.fill(firstIndex); const UnsignedInteger blockSize = dependentBlockIndices.getSize(); reducedPoint = Point(blockSize); for (UnsignedInteger k = 0; k < blockSize; ++k) reducedPoint[k] = point[firstIndex + k]; // The cdf is obtained by multiplying lower dimensional cdf, which are much more cheaper to compute than a full multidimensional integration const Implementation marginal(getMarginal(dependentBlockIndices)); const Scalar blockCDF = marginal->computeCDF(reducedPoint); cdf *= blockCDF; firstIndex = lastIndex; } return cdf; } // Here we are in the full dependent case. Use Gauss-Legendre integration restricted to the support of the copula. // We know that for each k, xk is in (xk_min, xk_max) and for k (marginalNodesNumber), static_cast< Scalar > (dimension - 1)); Indices indices(dimension, 0); Indices marginalIndices(dimension - 1); marginalIndices.fill(); const Scalar x = point[dimension - 1]; Implementation marginal(getMarginal(marginalIndices)); for (UnsignedInteger linearIndex = 0; linearIndex < size; ++linearIndex) { Point node(dimension - 1); const Scalar delta0 = 0.5 * (point[0] - lowerBound[0]); const UnsignedInteger index0 = indices[0]; node[0] = lowerBound[0] + delta0 * (1.0 + gaussNodes[index0]); Scalar weight = delta0 * gaussWeights[index0]; for (UnsignedInteger j = 1; j < dimension - 1; ++j) { const UnsignedInteger indexJ = indices[j]; const Scalar aJ = std::max(node[j - 1], distributionCollection_[j].getRange().getLowerBound()[0]); const Scalar deltaJ = 0.5 * (point[j] - aJ); node[j] = aJ + deltaJ * (1.0 + gaussNodes[indexJ]); weight *= deltaJ * gaussWeights[indexJ]; } cdf += weight * marginal->computePDF(node) * computeConditionalCDF(x, node); /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger j = 0; j < dimension - 2; ++j) indices[j + 1] += (indices[j] == marginalNodesNumber); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger j = 0; j < dimension - 2; ++j) indices[j] = indices[j] % marginalNodesNumber; } // Loop over the n-D nodes return cdf; } Scalar MaximumEntropyOrderStatisticsDistribution::computeCDFOld(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // If there is a miracle: we are in the independent case! if (hasIndependentCopula()) { Scalar cdf = distributionCollection_[0].computeCDF(point[0]); for (UnsignedInteger k = 1; k < dimension; ++k) cdf *= distributionCollection_[k].computeCDF(point[k]); return cdf; } // Indices of the components to take into account in the computation Indices toKeep(0); Point reducedPoint(0); const Point lowerBound(getRange().getLowerBound()); const Point upperBound(getRange().getUpperBound()); for (UnsignedInteger k = 0; k < dimension; ++ k) { const Scalar xK = point[k]; // Early exit if one component is nonpositive if (xK <= lowerBound[k]) return 0.0; // Keep only the indices for which xK is in (xk_min, xk_max) and xK < xKp1 // Marginalize the others const Scalar bound = k < dimension - 1 ? std::min(point[k + 1], upperBound[k]) : upperBound[k]; if (xK < bound) { toKeep.add(k); reducedPoint.add(xK); } } // k // If all the components are greater or equal to their marginal upper bound if (toKeep.getSize() == 0) { return 1.0; } // If one or more components (but not all) are greater or equal to their marginal upper bound compute a marginal CDF if (toKeep.getSize() < dimension) { const Scalar cdf = getMarginal(toKeep)->computeCDF(reducedPoint); return cdf; } // Else we have to do some work // Try to split the work into smaller pieces using potential block-independence const UnsignedInteger partitionSize = partition_.getSize(); if (partitionSize > 0) { Scalar cdf = 1.0; UnsignedInteger firstIndex = 0; for (UnsignedInteger i = 0; i <= partitionSize; ++i) { const UnsignedInteger lastIndex = i < partitionSize ? partition_[i] + 1 : dimension; Indices dependentBlockIndices(lastIndex - firstIndex); dependentBlockIndices.fill(firstIndex); const UnsignedInteger blockSize = dependentBlockIndices.getSize(); reducedPoint = Point(blockSize); for (UnsignedInteger k = 0; k < blockSize; ++k) reducedPoint[k] = point[firstIndex + k]; // The cdf is obtained by multiplying lower dimensional cdf, which are much more cheaper to compute than a full multidimensional integration const Implementation marginal(getMarginal(dependentBlockIndices)); const Scalar blockCDF = marginal->computeCDF(reducedPoint); cdf *= blockCDF; firstIndex = lastIndex; } return cdf; } // Here we are in the full dependent case. Use Gauss-Legendre integration restricted to the support of the copula. // We know that for each k, xk is in (xk_min, xk_max) and for k (marginalNodesNumber), static_cast< Scalar > (dimension)); Indices indices(dimension, 0); for (UnsignedInteger linearIndex = 0; linearIndex < size; ++linearIndex) { Point node(dimension); const Scalar delta0 = 0.5 * (point[0] - lowerBound[0]); const UnsignedInteger index0 = indices[0]; node[0] = lowerBound[0] + delta0 * (1.0 + gaussNodes[index0]); Scalar weight = delta0 * gaussWeights[index0]; for (UnsignedInteger j = 1; j < dimension; ++j) { const UnsignedInteger indexJ = indices[j]; const Scalar aJ = std::max(node[j - 1], distributionCollection_[j].getRange().getLowerBound()[0]); const Scalar deltaJ = 0.5 * (point[j] - aJ); node[j] = aJ + deltaJ * (1.0 + gaussNodes[indexJ]); weight *= deltaJ * gaussWeights[indexJ]; } cdf += weight * computePDF(node); /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j + 1] += (indices[j] == marginalNodesNumber); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j] = indices[j] % marginalNodesNumber; } // Loop over the n-D nodes return cdf; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar MaximumEntropyOrderStatisticsDistribution::computeConditionalPDF (const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; if (conditioningDimension == 0) return distributionCollection_[0].computePDF(x); const UnsignedInteger k = conditioningDimension; const Scalar aK = getRange().getLowerBound()[k]; const Scalar bK = getRange().getUpperBound()[k]; // If x is outside of the range of the kth marginal, the conditional PDF is zero if ((x <= aK) || (x > bK)) return 0.0; // The conditional PDF depends only on the last component of the conditioning vector const Scalar xKm1 = y[k - 1]; // If the conditioning component is greater than the argument the conditional PDF is zero if (xKm1 > x) return 0.0; // If the conditioning component is outside of the (k-1)th marginal range const Scalar aKm1 = getRange().getLowerBound()[k - 1]; const Scalar bKm1 = getRange().getUpperBound()[k - 1]; if ((xKm1 <= aKm1) || (xKm1 > bKm1)) return 0.0; // Here we have something to do // If x is independent of the previous components if (partition_.contains(k - 1)) return distributionCollection_[k].computePDF(x); // Else the difficult case // PDF(x|xKm1) = d(1-exp(-\int_{xKm1}^x\phi(s)ds)) / dx // = -d(-\int_{xKm1}^x\phi(s)ds)/dx * exp(-\int_{xKm1}^x\phi(s)ds) // = \phi(x) * exp(-\int_{xKm1}^x\phi(s)ds) return distributionCollection_[k].computePDF(x) * computeExponentialFactor(k, xKm1, x) / (distributionCollection_[k - 1].computeCDF(xKm1) - distributionCollection_[k].computeCDF(xKm1)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar MaximumEntropyOrderStatisticsDistribution::computeConditionalCDF (const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; if (conditioningDimension == 0) { const Scalar value = distributionCollection_[0].computeCDF(x); return value; } const UnsignedInteger k = conditioningDimension; const Scalar aK = getRange().getLowerBound()[k]; const Scalar bK = getRange().getUpperBound()[k]; // If x is less than the lower bound of its associated marginal, the conditional CDF is zero if (x <= aK) { return 0.0; } // If x is greater than the upper bound of its associated marginal, the conditional CDF is one if (x > bK) { return 1.0; } // The conditional CDF depends only on the last component of the conditioning vector const Scalar xKm1 = y[k - 1]; // If the conditioning component is greater than the argument the conditional CDF is zero if (xKm1 > x) { return 1.0; } // If the conditioning component is outside of the (k-1)th marginal range const Scalar aKm1 = getRange().getLowerBound()[k - 1]; const Scalar bKm1 = getRange().getUpperBound()[k - 1]; if ((xKm1 <= aKm1) || (xKm1 > bKm1)) { return 0.0; } // Here we have something to do // If x is independent of the previous components if (partition_.contains(k - 1)) { const Scalar value = distributionCollection_[k].computeCDF(x); return value; } // Else the difficult case // CDF(x|xKm1) = 1 - exp(-\int_{xKm1}^x\phi(s)ds) const Scalar factor = computeFactor(k, xKm1, x); const Scalar value = -expm1(-factor); return value; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar MaximumEntropyOrderStatisticsDistribution::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (conditioningDimension == 0) return distributionCollection_[0].computeQuantile(q)[0]; const UnsignedInteger k = conditioningDimension; if (partition_.contains(k - 1)) { return distributionCollection_[k].computeQuantile(q)[0]; } // We have to solve: // 1 - exp(-\int_{xKm1}^x\phi(s)ds) = q // <-> // Phi(x) - Phi(xKm1) = -log(1 - q) // Factor(x, xKm1) = -log(1 - q) const Scalar xKm1 = y[k - 1]; if (q == 0.0) return xKm1; Scalar b = getRange().getUpperBound()[k]; if (q == 1.0) return b; const Scalar logU = log1p(-q); // First, try Newton iterations: // Factor(xKm1, x+dx) = -log(1 - q) = Factor(xKm1, x) + f_k(x) / (F_{k-1}(x) - F_k(x)) dk // -> dx = (log(1 - q) + Factor(xKm1, x))(F_k(x) - F_{k-1}(x)) / f_k(x) Scalar a = xKm1; Scalar x = 0.5 * (a + b); UnsignedInteger iteration = 0; const UnsignedInteger maximumIteration = ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-MaximumQuantileIteration"); Bool convergence = false; do { ++iteration; const Scalar pdfKX = distributionCollection_[k].computePDF(x); if (pdfKX == 0.0) break; const Scalar cdfKX = distributionCollection_[k].computeCDF(x); const Scalar cdfKm1X = distributionCollection_[k - 1].computeCDF(x); const Scalar fX = logU + computeFactor(k, xKm1, x); if (fX < 0.0) { a = x; } else { b = x; } const Scalar delta = fX * (cdfKX - cdfKm1X) / pdfKX; x += delta; convergence = std::abs(delta) < quantileEpsilon_; } while (!convergence && (iteration < maximumIteration) && (a <= x) && (x <= b)); if (convergence) return x; // in some cases Newton iteration fails to converge const MaximumEntropyOrderStatisticsDistributionWrapper wrapper(*this, k - 1, k, xKm1); const Function f(bindMethod(wrapper, &MaximumEntropyOrderStatisticsDistributionWrapper::computePartialFactor, 1, 1)); Brent solver(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); return solver.solve(f, -logU, a, b); } /* Get the i-th marginal distribution */ MaximumEntropyOrderStatisticsDistribution::Implementation MaximumEntropyOrderStatisticsDistribution::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; Distribution marginal(distributionCollection_[i]); marginal.setDescription(Description(1, getDescription()[i])); return marginal.getImplementation()->clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ MaximumEntropyOrderStatisticsDistribution::Implementation MaximumEntropyOrderStatisticsDistribution::getMarginal(const Indices & indices) const { const UnsignedInteger size = indices.getSize(); if (size == 1) return getMarginal(indices[0]); return getMarginalAsMaximumEntropyOrderStatisticsDistribution(indices).clone(); } MaximumEntropyOrderStatisticsDistribution MaximumEntropyOrderStatisticsDistribution::getMarginalAsMaximumEntropyOrderStatisticsDistribution(const Indices & indices) const { const UnsignedInteger size = indices.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "indices must be of size at least 2"; const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (!indices.isIncreasing()) throw InvalidArgumentException(HERE) << "Cannot take the marginal distribution of an order statistics distribution with nonincreasing indices."; // Here we know that if the size is equal to the dimension, the indices are [0,...,dimension-1] if (size == dimension) return *this; // This call will check that indices are correct DistributionCollection marginalDistributions(size); Description marginalDescription(size); const Description description(getDescription()); Collection marginalExponentialFactorApproximation(0); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger j = indices[i]; marginalDistributions[i] = distributionCollection_[j]; marginalDescription[i] = description[j]; if (useApproximation_ && (i > 0)) { const UnsignedInteger jPrec = indices[i - 1]; if (j == jPrec + 1) marginalExponentialFactorApproximation.add(exponentialFactorApproximation_[j - 1]); else { marginalExponentialFactorApproximation.add(interpolateExponentialFactor(jPrec, j)); } } } OrderStatisticsMarginalChecker checker(marginalDistributions); const Indices marginalPartition(checker.buildPartition()); MaximumEntropyOrderStatisticsDistribution marginal(marginalDistributions, marginalPartition, useApproximation_, marginalExponentialFactorApproximation, marginalDescription); return marginal; } /* Distribution collection accessor */ void MaximumEntropyOrderStatisticsDistribution::setDistributionCollection(const DistributionCollection & coll, const Bool useApprox, const Bool checkMarginals) { OrderStatisticsMarginalChecker checker(coll); if (checkMarginals) checker.check(); partition_ = checker.buildPartition(); setDimension(coll.getSize()); // Check if the collection is not empty const UnsignedInteger size = coll.getSize(); if ((getDimension() != 0) && (size != getDimension())) throw InvalidArgumentException(HERE) << "The distribution collection must have a size equal to the distribution dimension"; Description description(size); Point lowerBound(size); Point upperBound(size); Interval::BoolCollection finiteLowerBound(size); Interval::BoolCollection finiteUpperBound(size); if (size == 0) throw InvalidArgumentException(HERE) << "Collection of distributions is empty"; // First, check that all the marginal distributions are of dimension 1 isParallel_ = true; for (UnsignedInteger i = 0; i < size; ++i) { if (coll[i].getDimension() != 1) throw InvalidArgumentException(HERE) << "The marginal distribution " << i << " is of dimension " << coll[i].getDimension() << ", which is different from 1."; isParallel_ = isParallel_ && coll[i].getImplementation()->isParallel(); const Interval marginalRange(coll[i].getRange()); lowerBound[i] = marginalRange.getLowerBound()[0]; upperBound[i] = marginalRange.getUpperBound()[0]; finiteLowerBound[i] = marginalRange.getFiniteLowerBound()[0]; finiteUpperBound[i] = marginalRange.getFiniteUpperBound()[0]; // The description of the ComposedDistribution is built first by using the marginal description // then by using the marginal name if the description is empty, which should never occur const String marginalDescription(coll[i].getDescription()[0]); if (marginalDescription.size() > 0) description[i] = marginalDescription; else { LOGINFO(OSS() << "Warning: using the name of the marginal " << i << " instead of its description for building the description of the ComposedDistribution, because the marginal description is empty."); const String marginalName(coll[i].getName()); description[i] = marginalName; } } // Everything is ok, store the collection distributionCollection_ = coll; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; setDescription(description); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); // We must set useApproximation_ to false even if we use approximation, as we need to perform exact computations to build the approximation. The flag is set to the correct value by interpolateExponentialFactors() useApproximation_ = false; if (useApprox) interpolateExponentialFactors(); } /* Parameters value and description accessor */ MaximumEntropyOrderStatisticsDistribution::PointWithDescriptionCollection MaximumEntropyOrderStatisticsDistribution::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension); const Description description(getDescription()); // First put the marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { // Each marginal distribution must output a collection of parameters of size 1, even if it contains an empty Point const PointWithDescriptionCollection marginalParameters(distributionCollection_[marginalIndex].getParametersCollection()); PointWithDescription point(marginalParameters[0]); Description marginalParametersDescription(point.getDescription()); // Here we must add a unique prefix to the marginal parameters description in order to deambiguate the parameters of different marginals sharing the same description for (UnsignedInteger i = 0; i < point.getDimension(); ++i) marginalParametersDescription[i] = (OSS() << marginalParametersDescription[i] << "_marginal_" << marginalIndex); point.setDescription(marginalParametersDescription); point.setName(description[marginalIndex]); parameters[marginalIndex] = point; } // marginalIndex return parameters; } // getParametersCollection void MaximumEntropyOrderStatisticsDistribution::setParametersCollection(const PointCollection& parametersCollection) { const UnsignedInteger dimension = getDimension(); if (parametersCollection.getSize() != dimension) throw InvalidArgumentException(HERE) << "The collection is too small(" << parametersCollection.getSize() << "). Expected (" << dimension << ")"; // set marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) distributionCollection_[marginalIndex].setParameter(parametersCollection[marginalIndex]); } MaximumEntropyOrderStatisticsDistribution::DistributionCollection MaximumEntropyOrderStatisticsDistribution::getDistributionCollection() const { return distributionCollection_; } /* Get the copula of the distribution */ MaximumEntropyOrderStatisticsDistribution::Implementation MaximumEntropyOrderStatisticsDistribution::getCopula() const { return new MaximumEntropyOrderStatisticsCopula(*this); } /* Flag to tell if we use approximation for the exponential term */ void MaximumEntropyOrderStatisticsDistribution::useApproximation(const bool flag) { if (flag != useApproximation_) { useApproximation_ = flag; if (flag) interpolateExponentialFactors(); } } /* Tell if the distribution has elliptical copula */ Bool MaximumEntropyOrderStatisticsDistribution::hasEllipticalCopula() const { return hasIndependentCopula(); } /* Tell if the distribution has independent copula */ Bool MaximumEntropyOrderStatisticsDistribution::hasIndependentCopula() const { return partition_.getSize() == (getDimension() - 1); } /* Method save() stores the object through the StorageManager */ void MaximumEntropyOrderStatisticsDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute("distributionCollection_", distributionCollection_); } /* Method load() reloads the object from the StorageManager */ void MaximumEntropyOrderStatisticsDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); DistributionPersistentCollection coll; adv.loadAttribute("distributionCollection_", coll); setDistributionCollection(coll); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MaximumLikelihoodFactory.cxx000066400000000000000000000343501307543307100274460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Maximum likelihood estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include "openturns/MaximumLikelihoodFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/OTconfig.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Normal.hxx" #include "openturns/TNC.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/GradientImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MaximumLikelihoodFactory); static const Factory Factory_MaximumLikelihoodFactory; /* Default constructor */ MaximumLikelihoodFactory::MaximumLikelihoodFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Parameters constructor */ MaximumLikelihoodFactory::MaximumLikelihoodFactory(const Distribution & distribution) : DistributionFactoryImplementation() , distribution_(distribution) , solver_(new TNC()) { // Initialize optimization solver parameter using the ResourceMap solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("MaximumLikelihoodFactory-MaximumEvaluationNumber")); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("MaximumLikelihoodFactory-MaximumAbsoluteError")); solver_.setMaximumRelativeError(ResourceMap::GetAsScalar("MaximumLikelihoodFactory-MaximumRelativeError")); solver_.setMaximumResidualError(ResourceMap::GetAsScalar("MaximumLikelihoodFactory-MaximumObjectiveError")); solver_.setMaximumConstraintError(ResourceMap::GetAsScalar("MaximumLikelihoodFactory-MaximumConstraintError")); } /* Virtual constructor */ MaximumLikelihoodFactory * MaximumLikelihoodFactory::clone() const { return new MaximumLikelihoodFactory(*this); } /* String converter */ String MaximumLikelihoodFactory::__repr__() const { OSS oss(true); oss << "class=" << this->getClassName() << " distribution=" << distribution_ << " solver=" << solver_; return oss; } /* String converter */ String MaximumLikelihoodFactory::__str__(const String & offset) const { return this->getClassName(); } class LogLikelihoodEvaluation : public EvaluationImplementation { public: LogLikelihoodEvaluation(const Sample & sample, const Distribution & distribution, const Point & knownParameterValues, const Indices & knownParameterIndices) : EvaluationImplementation() , sample_(sample) , distribution_(distribution) , knownParameterValues_(knownParameterValues) , knownParameterIndices_(knownParameterIndices) { // build the unknown indices const UnsignedInteger effectiveParameterSize = distribution.getParameter().getSize(); for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) unknownParameterIndices_.add(j); } } LogLikelihoodEvaluation * clone() const { return new LogLikelihoodEvaluation(*this); } UnsignedInteger getInputDimension() const { return unknownParameterIndices_.getSize(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return Description::BuildDefault(getInputDimension(), "theta"); } Description getOutputDescription() const { return Description(1, "lh"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } Point operator() (const Point & parameter) const { Scalar result = 0.0; // Define conditinned distribution Distribution distribution(distribution_); Point effectiveParameter(distribution.getParameter()); // set unknown values UnsignedInteger unknownParameterSize = unknownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < unknownParameterSize; ++ j) { effectiveParameter[unknownParameterIndices_[j]] = parameter[j]; } // set known values UnsignedInteger knownParametersSize = knownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < knownParametersSize; ++ j) { effectiveParameter[knownParameterIndices_[j]] = knownParameterValues_[j]; } try { distribution.setParameter(effectiveParameter); } catch (Exception &) { return Point(1, SpecFunc::LogMinScalar); } // Take into account the mean over sample // Parallelization (evaluation over a sample) is handeled by distribution_ const Sample logPdfSample = distribution.computeLogPDF(sample_); const Scalar logPdf = logPdfSample.computeMean()[0]; result = SpecFunc::IsNormal(logPdf) ? logPdf : SpecFunc::LogMinScalar; return Point(1, result); } private: Sample sample_; Distribution distribution_; Point knownParameterValues_; Indices knownParameterIndices_; Indices unknownParameterIndices_; }; class LogLikelihoodGradient : public GradientImplementation { public: LogLikelihoodGradient(const Sample & sample, const Distribution & distribution, const Point & knownParameterValues, const Indices & knownParameterIndices) : GradientImplementation() , sample_(sample) , distribution_(distribution) , knownParameterValues_(knownParameterValues) , knownParameterIndices_(knownParameterIndices) { // build the unknown indices const UnsignedInteger effectiveParameterSize = distribution.getParameter().getSize(); for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) unknownParameterIndices_.add(j); } } LogLikelihoodGradient * clone() const { return new LogLikelihoodGradient(*this); } UnsignedInteger getInputDimension() const { return unknownParameterIndices_.getSize(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return Description::BuildDefault(getInputDimension(), "theta"); } Description getOutputDescription() const { return Description(1, "lhG"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } Matrix gradient(const Point & parameter) const { // Define conditinned distribution Distribution distribution(distribution_); Point effectiveParameter(distribution.getParameter()); // set unknown values UnsignedInteger unknownParameterSize = unknownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < unknownParameterSize; ++ j) { effectiveParameter[unknownParameterIndices_[j]] = parameter[j]; } // set known values UnsignedInteger knownParametersSize = knownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < knownParametersSize; ++ j) { effectiveParameter[knownParameterIndices_[j]] = knownParameterValues_[j]; } distribution.setParameter(effectiveParameter); // Matrix result MatrixImplementation result(parameter.getSize(), 1); // Evaluate the gradient const Sample logPdfGradientSample(distribution.computeLogPDFGradient(sample_).getMarginal(unknownParameterIndices_)); const Point logPdfGradient(logPdfGradientSample.computeMean()); // Result as Matrix result = MatrixImplementation(getInputDimension(), 1, logPdfGradient); return result; } private: Sample sample_; Distribution distribution_; Point knownParameterValues_; Indices knownParameterIndices_; Indices unknownParameterIndices_; }; Point MaximumLikelihoodFactory::buildParameter(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); UnsignedInteger effectiveParameterSize = distribution_.getParameterDimension(); if (!knownParameterIndices_.check(effectiveParameterSize)) throw InvalidArgumentException(HERE) << "Error: known indices cannot exceed parameter size"; if (knownParameterValues_.getSize() != knownParameterIndices_.getSize()) throw InvalidArgumentException(HERE) << "Error: known values size must match indices"; // Define NumericalMathEvaluation using the LogLikelihoodEvaluation wrapper LogLikelihoodEvaluation logLikelihoodWrapper(sample, distribution_, knownParameterValues_, knownParameterIndices_); Function logLikelihood(logLikelihoodWrapper.clone()); // Define NumericalMathGradient using the LogLikelihoodEvaluation wrapper LogLikelihoodGradient logLikelihoodGradientWrapper(sample, distribution_, knownParameterValues_, knownParameterIndices_); logLikelihood.setGradient(logLikelihoodGradientWrapper.clone()); // Define optimization problem OptimizationProblem problem; problem.setMinimization(false); problem.setObjective(logLikelihood); problem.setBounds(optimizationBounds_); OptimizationAlgorithm solver(solver_); if (solver.getStartingPoint().getDimension() != logLikelihood.getInputDimension()) { Point effectiveParameter(distribution_.getParameter()); LOGINFO(OSS() << "Warning! The given starting point=" << solver.getStartingPoint() << " has a dimension=" << solver.getStartingPoint().getDimension() << " which is different from the expected parameter dimension=" << logLikelihood.getInputDimension() << ". Switching to the default parameter value=" << effectiveParameter); // extract unknown values Point parameter; for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) parameter.add(effectiveParameter[j]); } solver.setStartingPoint(parameter); } solver.setProblem(problem); solver.run(); Point effectiveParameter(effectiveParameterSize); // set unknown values Point parameter(solver.getResult().getOptimalPoint()); UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) { effectiveParameter[j] = parameter[index]; ++ index; } } // set known values UnsignedInteger knownParametersSize = knownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < knownParametersSize; ++ j) { effectiveParameter[knownParameterIndices_[j]] = knownParameterValues_[j]; } return effectiveParameter; } DistributionFactoryImplementation::Implementation MaximumLikelihoodFactory::build(const Sample & sample) const { Distribution result(distribution_); result.setParameter(buildParameter(sample)); result.setDescription(sample.getDescription()); return result.getImplementation(); } /* Accessor to optimization bounds */ void MaximumLikelihoodFactory::setOptimizationBounds(const Interval & optimizationBounds) { optimizationBounds_ = optimizationBounds; } Interval MaximumLikelihoodFactory::getOptimizationBounds() const { return optimizationBounds_; } void MaximumLikelihoodFactory::setOptimizationInequalityConstraint(const Function & optimizationInequalityConstraint) { optimizationInequalityConstraint_ = optimizationInequalityConstraint; } void MaximumLikelihoodFactory::setOptimizationAlgorithm(const OptimizationAlgorithm& solver) { solver_ = solver; } OptimizationAlgorithm MaximumLikelihoodFactory::getOptimizationAlgorithm() const { return solver_; } void MaximumLikelihoodFactory::setOptimizationSolver(const OptimizationAlgorithm& solver) { Log::Warn(OSS() << "MaximumLikelihoodFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } OptimizationAlgorithm MaximumLikelihoodFactory::getOptimizationSolver() const { Log::Warn(OSS() << "MaximumLikelihoodFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void MaximumLikelihoodFactory::setKnownParameter(const Point & values, const Indices & indices) { if (knownParameterValues_.getSize() != knownParameterIndices_.getSize()) throw InvalidArgumentException(HERE) << "Known parameters values and indices must have the same size"; knownParameterValues_ = values; knownParameterIndices_ = indices; } Indices MaximumLikelihoodFactory::getKnownParameterIndices() const { return knownParameterIndices_; } Point MaximumLikelihoodFactory::getKnownParameterValues() const { return knownParameterValues_; } /* Method save() stores the object through the StorageManager */ void MaximumLikelihoodFactory::save(Advocate & adv) const { DistributionFactoryImplementation::save(adv); adv.saveAttribute("knownParameterValues_", knownParameterValues_); adv.saveAttribute("knownParameterIndices_", knownParameterIndices_); adv.saveAttribute("optimizationBounds_", optimizationBounds_); adv.saveAttribute("optimizationInequalityConstraint_", optimizationInequalityConstraint_); } /* Method load() reloads the object from the StorageManager */ void MaximumLikelihoodFactory::load(Advocate & adv) { DistributionFactoryImplementation::load(adv); adv.loadAttribute("knownParameterValues_", knownParameterValues_); adv.loadAttribute("knownParameterIndices_", knownParameterIndices_); adv.loadAttribute("optimizationBounds_", optimizationBounds_); adv.loadAttribute("optimizationInequalityConstraint_", optimizationInequalityConstraint_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MeixnerDistribution.cxx000066400000000000000000000477611307543307100265160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The MeixnerDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MeixnerDistribution.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TNC.hxx" #include "openturns/Brent.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MeixnerDistribution); static const Factory Factory_MeixnerDistribution; /* Default constructor */ MeixnerDistribution::MeixnerDistribution() : ContinuousDistribution() , solver_(new TNC()) , alpha_(0.0) , beta_(0.0) , delta_(0.0) , mu_(0.0) , logNormalizationFactor_(0.0) { setName("MeixnerDistribution"); // Create the optimization solver parameters using the parameters in the ResourceMap initializeOptimizationAlgorithmParameter(); setAlphaBetaDelta(1.0, 0.0, 1.0); setDimension(1); } /* Parameters constructor */ MeixnerDistribution::MeixnerDistribution(const Scalar alpha, const Scalar beta, const Scalar delta, const Scalar mu) : ContinuousDistribution() , solver_(new TNC()) , alpha_(0.0) , beta_(0.0) , delta_(0.0) , mu_(mu) , logNormalizationFactor_(0.0) { setName("MeixnerDistribution"); // Create the optimization solver parameters using the parameters in the ResourceMap initializeOptimizationAlgorithmParameter(); setAlphaBetaDelta(alpha, beta, delta); setDimension(1); } /* Initialize optimization solver parameter using the ResourceMap */ void MeixnerDistribution::initializeOptimizationAlgorithmParameter() { solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("MeixnerDistribution-MaximumAbsoluteError")); solver_.setMaximumRelativeError(ResourceMap::GetAsScalar("MeixnerDistribution-MaximumRelativeError")); solver_.setMaximumResidualError(ResourceMap::GetAsScalar("MeixnerDistribution-MaximumObjectiveError")); solver_.setMaximumConstraintError(ResourceMap::GetAsScalar("MeixnerDistribution-MaximumConstraintError")); } /* Comparison operator */ Bool MeixnerDistribution::operator ==(const MeixnerDistribution & other) const { if (this == &other) return true; return (alpha_ == other.alpha_) && (beta_ == other.beta_) && (delta_ == other.delta_) && (mu_ == other.mu_); } Bool MeixnerDistribution::equals(const DistributionImplementation & other) const { const MeixnerDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MeixnerDistribution::__repr__() const { OSS oss(true); oss << "class=" << MeixnerDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " alpha=" << alpha_ << " beta=" << beta_ << " delta=" << delta_ << " mu=" << mu_ << " logNormalizationFactor=" << logNormalizationFactor_ << " b=" << b_ << " c=" << c_ << " dc=" << dc_; return oss; } String MeixnerDistribution::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(alpha = " << alpha_ << ", beta = " << beta_ << ", delta = " << delta_ << ", mu = " << mu_ << ")"; return oss; } /* Alpha accessor */ void MeixnerDistribution::setAlpha(const Scalar alpha) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (alpha != alpha_) { alpha_ = alpha; update(); } } Scalar MeixnerDistribution::getAlpha() const { return alpha_; } /* Beta accessor */ void MeixnerDistribution::setBeta(const Scalar beta) { if (std::abs(beta) >= M_PI) throw InvalidArgumentException(HERE) << "Beta MUST be in (-pi, pi)"; if (beta != beta_) { beta_ = beta; update(); } } Scalar MeixnerDistribution::getBeta() const { return beta_; } /* Delta accessor */ void MeixnerDistribution::setDelta(const Scalar delta) { if (!(delta > 0.0)) throw InvalidArgumentException(HERE) << "Delta MUST be positive"; if (delta != delta_) { delta_ = delta; update(); } } Scalar MeixnerDistribution::getDelta() const { return delta_; } void MeixnerDistribution::setAlphaBetaDelta(const Scalar alpha, const Scalar beta, const Scalar delta) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (std::abs(beta) >= M_PI) throw InvalidArgumentException(HERE) << "Beta MUST be in (-pi, pi)"; if (!(delta > 0.0)) throw InvalidArgumentException(HERE) << "Delta MUST be positive"; if ((alpha != alpha_) || (beta != beta_) || (delta != delta_)) { alpha_ = alpha; beta_ = beta; delta_ = delta; update(); } } /* Mu accessor */ void MeixnerDistribution::setMu(const Scalar mu) { if (mu_ != mu) { mu_ = mu; computeRange(); } } Scalar MeixnerDistribution::getMu() const { return mu_; } /* Virtual constructor */ MeixnerDistribution * MeixnerDistribution::clone() const { return new MeixnerDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void MeixnerDistribution::computeRange() { const Point mu(getMean()); const Point sigma(getStandardDeviation()); const Scalar logPDF = computeLogPDF(mu); const Scalar logPDFEpsilon = std::log(getPDFEpsilon()); Point lowerBound(mu); // Find the numerical lower bound based on the PDF value Scalar logPDFLower = logPDF; while (logPDFLower > logPDFEpsilon) { lowerBound -= sigma; logPDFLower = computeLogPDF(lowerBound); } // Find the numerical upper bound based on the PDF value Point upperBound(mu); Point stepUpper(sigma); Scalar logPDFUpper = logPDF; while (logPDFUpper > logPDFEpsilon) { upperBound += sigma; logPDFUpper = computeLogPDF(upperBound); } const Interval::BoolCollection finiteLowerBound(1, false); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } struct MeixnerBounds { MeixnerBounds(const MeixnerDistribution & distribution) : distribution_(distribution) { // Nothing to do } Point computeObjectiveB(const Point & point) const { return Point(1, distribution_.computePDF(point)); } Point computeObjectiveCD(const Point & point) const { return Point(1, point[0] * std::sqrt(distribution_.computePDF(point))); } const MeixnerDistribution & distribution_; }; class MeixnerBoundB: public FunctionImplementation { public: MeixnerBoundB(const DistributionImplementation::Implementation & p_distribution) : FunctionImplementation() , p_distribution_(p_distribution) { // Nothing to do } MeixnerBoundB * clone() const { return new MeixnerBoundB(*this); } Point operator() (const Point & point) const { return Point(1, p_distribution_->computePDF(point)); } Matrix gradient(const Point & point) const { const Point value = p_distribution_->computeDDF(point); return MatrixImplementation(getInputDimension(), getOutputDimension(), value); } UnsignedInteger getInputDimension() const { return p_distribution_->getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return p_distribution_->getDescription(); } Description getOutputDescription() const { return Description(1, "MeixnerDistributionObjectiveB"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } String __repr__() const { OSS oss; oss << "MeixnerBoundB(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "MeixnerBoundB(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation::Implementation p_distribution_; }; // class MeixnerBoundB class MeixnerBoundCD: public FunctionImplementation { public: MeixnerBoundCD(const DistributionImplementation::Implementation & p_distribution) : FunctionImplementation() , p_distribution_(p_distribution) { // Nothing to do } MeixnerBoundCD * clone() const { return new MeixnerBoundCD(*this); } Point operator() (const Point & point) const { const Scalar pdf = p_distribution_->computePDF(point); return Point(1, point[0] * std::sqrt(pdf)); } Matrix gradient(const Point & point) const { const Scalar sqrtPDF = std::sqrt(p_distribution_->computePDF(point)); if (sqrtPDF <= 0.0) return MatrixImplementation(1, 1); const Point ddf(p_distribution_->computeDDF(point)); const Point value(1, sqrtPDF + 0.5 * point[0] * ddf[0] / sqrtPDF); return MatrixImplementation(1, 1, value); } UnsignedInteger getInputDimension() const { return p_distribution_->getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return p_distribution_->getDescription(); } Description getOutputDescription() const { return Description(1, "MeixnerDistributionObjectiveCD"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } String __repr__() const { OSS oss; oss << "MeixnerBoundCD(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "MeixnerBoundCD(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation::Implementation p_distribution_; }; // class MeixnerBoundCD /* Update the derivative attributes */ void MeixnerDistribution::update() { // First, the parameters of the distribution logNormalizationFactor_ = 2.0 * delta_ * std::log(2.0 * std::cos(0.5 * beta_)) - std::log(2.0 * M_PI * alpha_) - SpecFunc::LogGamma(2.0 * delta_); computeRange(); // Second, the moments isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; // Third, the CDF and complementary CDF Collection CDFCCDF(interpolateCDF(ResourceMap::GetAsUnsignedInteger("MeixnerDistribution-CDFDiscretization"))); cdfApproximation_ = CDFCCDF[0]; ccdfApproximation_ = CDFCCDF[1]; // Fourth, the random generator // define objectives functions MeixnerBoundB fB(clone()); MeixnerBoundCD fCD(clone()); // Initialize Optimization problems OptimizationProblem problem; // Define Optimization problem1 : maximization fB problem.setMinimization(false); problem.setObjective(fB); problem.setBounds(getRange()); solver_.setStartingPoint(getMean()); solver_.setProblem(problem); solver_.run(); b_ = std::sqrt(solver_.getResult().getOptimalValue()[0]); // Define Optimization problem2 : minimization fCD problem.setMinimization(true); problem.setObjective(fCD); solver_.setProblem(problem); solver_.run(); c_ = solver_.getResult().getOptimalValue()[0]; // Define Optimization problem3 : maximization fCD problem.setMinimization(false); solver_.setProblem(problem); solver_.run(); dc_ = solver_.getResult().getOptimalValue()[0] - c_; } /* Get one realization of the distribution We use the ratio-of-uniform method: if b=\sup_x \sqrt{p(x)}, c=\inf_x x\sqrt{p(x)}, d=\sup_x x\sqrt{p(x)} then \{(u,v)\,|\,0\leq u\leq b,c\leq v\leq d\} is an enclosing region for \{(u,v)\,|\,0\leq u\leq\sqrt{p(u/v)}\} */ Point MeixnerDistribution::getRealization() const { while (true) { const Scalar u = b_ * RandomGenerator::Generate(); if (u == 0.0) continue; const Scalar v = c_ + dc_ * RandomGenerator::Generate(); const Scalar rho = v / u; if (2.0 * std::log(u) <= computeLogPDF(rho)) return Point(1, rho); } } /* Get the PDF of the distribution */ Scalar MeixnerDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return std::exp(computeLogPDF(point)); } Scalar MeixnerDistribution::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar z = (point[0] - mu_) / alpha_; return logNormalizationFactor_ + beta_ * z + 2.0 * SpecFunc::LogGamma(Complex(delta_, z)).real(); } /* Get the CDF of the distribution */ Scalar MeixnerDistribution::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= getMean()[0]) return cdfApproximation_(point)[0]; else return 1.0 - ccdfApproximation_(point)[0]; } /* Get the complementary CDF of the distribution */ Scalar MeixnerDistribution::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= getMean()[0]) return 1.0 - cdfApproximation_(point)[0]; else return ccdfApproximation_(point)[0]; } /* Compute the quantile function of the distribution */ Scalar MeixnerDistribution::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; if (prob <= 0.0) return (tail ? b : a); if (prob >= 1.0) return (tail ? a : b); const UnsignedInteger n = cdfApproximation_.getLocations().getSize(); if (tail) { // Here we have to solve ComplementaryCDF(x) = prob which is mathematically // equivalent to CDF(x) = 1 - prob, but numerically different with an // accuracy that depends on prob. // The cut-off is around the mean value if (prob <= ccdfApproximation_.getValues()[0][0]) return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(ccdfApproximation_, prob, ccdfApproximation_.getLocations()[0], ccdfApproximation_.getLocations()[n - 1], ccdfApproximation_.getValues()[0][0], ccdfApproximation_.getValues()[n - 1][0]); return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(cdfApproximation_, 1.0 - prob, cdfApproximation_.getLocations()[0], cdfApproximation_.getLocations()[n - 1], cdfApproximation_.getValues()[0][0], cdfApproximation_.getValues()[n - 1][0]); } // Here we have to solve CDF(x) = prob which is mathematically // equivalent to ComplementaryCDF(x) = 1 - prob, but numerically // different with an accuracy that depends on prob. // The cut-off is around the mean value if (prob <= cdfApproximation_.getValues()[n - 1][0]) return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(cdfApproximation_, prob, cdfApproximation_.getLocations()[0], cdfApproximation_.getLocations()[n - 1], cdfApproximation_.getValues()[0][0], cdfApproximation_.getValues()[n - 1][0]); return Brent(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_).solve(ccdfApproximation_, 1.0 - prob, ccdfApproximation_.getLocations()[0], ccdfApproximation_.getLocations()[n - 1], ccdfApproximation_.getValues()[0][0], ccdfApproximation_.getValues()[n - 1][0]); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex MeixnerDistribution::computeCharacteristicFunction(const Scalar x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex MeixnerDistribution::computeLogCharacteristicFunction(const Scalar x) const { return Complex(2.0 * delta_ * std::log(std::cos(0.5 * beta_)), mu_ * x) - 2.0 * delta_ * std::log(std::cosh(Complex(0.5 * alpha_ * x, -0.5 * mu_))); } /* Compute the mean of the distribution */ void MeixnerDistribution::computeMean() const { mean_ = Point(1, alpha_ * delta_ * std::tan(0.5 * beta_) + mu_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point MeixnerDistribution::getStandardDeviation() const { return Point(1, alpha_ * std::sqrt(delta_ / (1.0 + std::cos(beta_)))); } /* Get the skewness of the distribution */ Point MeixnerDistribution::getSkewness() const { return Point(1, std::sin(0.5 * beta_) * std::sqrt(2.0 / delta_)); } /* Get the kurtosis of the distribution */ Point MeixnerDistribution::getKurtosis() const { return Point(1, 3.0 + (2.0 - std::cos(beta_)) / delta_); } /* Get the standard representative in the parametric family, associated with the standard moments */ MeixnerDistribution::Implementation MeixnerDistribution::getStandardRepresentative() const { return MeixnerDistribution(1.0, beta_, delta_, 0.0).clone(); } /* Compute the covariance of the distribution */ void MeixnerDistribution::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = alpha_ * alpha_ * delta_ / (1.0 + std::cos(beta_)); isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ Point MeixnerDistribution::getParameter() const { Point point(4); point[0] = alpha_; point[1] = beta_; point[2] = delta_; point[3] = mu_; return point; } void MeixnerDistribution::setParameter(const Point & parameter) { if (parameter.getSize() != 4) throw InvalidArgumentException(HERE) << "Error: expected 4 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = MeixnerDistribution(parameter[0], parameter[1], parameter[2], parameter[3]); setWeight(w); } /* Parameters description accessor */ Description MeixnerDistribution::getParameterDescription() const { Description description(4); description[0] = "alpha"; description[1] = "beta"; description[2] = "delta"; description[2] = "mu"; return description; } /* Check if the distribution is elliptical */ Bool MeixnerDistribution::isElliptical() const { return beta_ == 0.0; } /* Method save() stores the object through the StorageManager */ void MeixnerDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); adv.saveAttribute( "delta_", delta_ ); adv.saveAttribute( "mu_", mu_ ); adv.saveAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void MeixnerDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); adv.loadAttribute( "delta_", delta_ ); adv.loadAttribute( "mu_", mu_ ); adv.loadAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); update(); } /* Optimization solver accessor */ OptimizationAlgorithm MeixnerDistribution::getOptimizationAlgorithm() const { return solver_; } void MeixnerDistribution::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm MeixnerDistribution::getOptimizationSolver() const { Log::Warn(OSS() << "MeixnerDistribution::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void MeixnerDistribution::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "MeixnerDistribution::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MeixnerDistributionFactory.cxx000066400000000000000000000075111307543307100300330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for MeixnerDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/MeixnerDistributionFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MeixnerDistributionFactory); static const Factory Factory_MeixnerDistributionFactory; /* Default constructor */ MeixnerDistributionFactory::MeixnerDistributionFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ MeixnerDistributionFactory * MeixnerDistributionFactory::clone() const { return new MeixnerDistributionFactory(*this); } /* Here is the interface that all derived class must implement */ MeixnerDistributionFactory::Implementation MeixnerDistributionFactory::build(const Sample & sample) const { return buildAsMeixnerDistribution(sample).clone(); } MeixnerDistributionFactory::Implementation MeixnerDistributionFactory::build(const Point & parameters) const { return buildAsMeixnerDistribution(parameters).clone(); } MeixnerDistributionFactory::Implementation MeixnerDistributionFactory::build() const { return buildAsMeixnerDistribution().clone(); } MeixnerDistribution MeixnerDistributionFactory::buildAsMeixnerDistribution(const Sample & sample) const { UnsignedInteger size = sample.getSize(); if (size < 4) throw InvalidArgumentException(HERE) << "Error: cannot build a MeixnerDistribution distribution from a sample of size less than 4."; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a MeixnerDistribution distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar gamma1 = sample.computeSkewness()[0]; const Scalar gamma2 = sample.computeKurtosis()[0]; const Scalar upperBound = 3.0 + 2.0 * gamma1 * gamma1; if (gamma2 <= upperBound) throw InvalidArgumentException(HERE) << "Error: cannot estimate a MeixnerDistribution distribution if the sample kurtosis=" << gamma2 << " is not greater than 2*skewness^2+3=" << upperBound; const Scalar m = sample.computeMean()[0]; const Scalar s2 = sample.computeVariance()[0]; const Scalar delta = 1.0 / (gamma2 - gamma1 * gamma1 - 3.0); const Scalar beta = ((0.0 < gamma1) - (gamma1 < 0.0)) * std::acos(2.0 - delta * (gamma2 - 3.0)); const Scalar alpha = cbrt(s2 * (std::cos(beta) + 1.0)); const Scalar mu = m - alpha * delta * std::tan(0.5 * beta); MeixnerDistribution result(alpha, beta, delta, mu); result.setDescription(sample.getDescription()); return result; } MeixnerDistribution MeixnerDistributionFactory::buildAsMeixnerDistribution(const Point & parameters) const { try { MeixnerDistribution distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a MeixnerDistribution distribution from the given parameters"; } } MeixnerDistribution MeixnerDistributionFactory::buildAsMeixnerDistribution() const { return MeixnerDistribution(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MethodOfMomentsFactory.cxx000066400000000000000000000264411307543307100270770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Estimation by method of moments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include "openturns/MethodOfMomentsFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Exception.hxx" #include "openturns/OTconfig.hxx" #include "openturns/Log.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/TNC.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MethodOfMomentsFactory); static const Factory Factory_MethodOfMomentsFactory; /* Default constructor */ MethodOfMomentsFactory::MethodOfMomentsFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Parameters constructor */ MethodOfMomentsFactory::MethodOfMomentsFactory(const Distribution & distribution) : DistributionFactoryImplementation() , distribution_(distribution) , solver_(new TNC()) { // Initialize optimization solver parameter using the ResourceMap solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("MethodOfMomentsFactory-MaximumEvaluationNumber")); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("MethodOfMomentsFactory-MaximumAbsoluteError")); solver_.setMaximumRelativeError(ResourceMap::GetAsScalar("MethodOfMomentsFactory-MaximumRelativeError")); solver_.setMaximumResidualError(ResourceMap::GetAsScalar("MethodOfMomentsFactory-MaximumObjectiveError")); solver_.setMaximumConstraintError(ResourceMap::GetAsScalar("MethodOfMomentsFactory-MaximumConstraintError")); } /* Virtual constructor */ MethodOfMomentsFactory * MethodOfMomentsFactory::clone() const { return new MethodOfMomentsFactory(*this); } /* String converter */ String MethodOfMomentsFactory::__repr__() const { OSS oss(true); oss << "class=" << this->getClassName() << " distribution=" << distribution_ << " solver=" << solver_; return oss; } /* String converter */ String MethodOfMomentsFactory::__str__(const String & offset) const { return this->getClassName(); } class MethodOfMomentsEvaluation : public EvaluationImplementation { public: MethodOfMomentsEvaluation(const Point & refMoments, const Distribution & distribution, const Point & knownParameterValues, const Indices & knownParameterIndices) : EvaluationImplementation() , refMoments_(refMoments) , refSign_(refMoments.getSize()) , distribution_(distribution) , knownParameterValues_(knownParameterValues) , knownParameterIndices_(knownParameterIndices) { // build the unknown indices const UnsignedInteger effectiveParameterSize = distribution.getParameter().getSize(); for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) unknownParameterIndices_.add(j); } for (UnsignedInteger j = 0; j < refMoments.getSize(); ++ j) { refSign_[j] = refMoments_[j] < 0.0 ? -1.0 : 1.0; } } MethodOfMomentsEvaluation * clone() const { return new MethodOfMomentsEvaluation(*this); } UnsignedInteger getInputDimension() const { return distribution_.getParameterDimension() - knownParameterValues_.getSize(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return Description::BuildDefault(getInputDimension(), "theta"); } Description getOutputDescription() const { return Description(1, "lh"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } Point operator() (const Point & parameter) const { UnsignedInteger parameterDimension = distribution_.getParameterDimension(); Point effectiveParameter(parameterDimension); // set unknown values UnsignedInteger unknownParameterSize = unknownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < unknownParameterSize; ++ j) { effectiveParameter[unknownParameterIndices_[j]] = parameter[j]; } // set known values UnsignedInteger knownParametersSize = knownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < knownParametersSize; ++ j) { effectiveParameter[knownParameterIndices_[j]] = knownParameterValues_[j]; } Distribution distribution(distribution_); try { distribution.setParameter(effectiveParameter); } catch (Exception &) { return Point(1, SpecFunc::MaxScalar); } // compute moments of conditioned distribution Point moments(parameterDimension); moments[0] = distribution.getMean()[0]; for (UnsignedInteger j = 1; j < parameterDimension; ++ j) { moments[j] = distribution.getCenteredMoment(j + 1)[0]; } // compute sum of deltas between centered homogenized moments Scalar result = 0.0; for (UnsignedInteger j = 0; j < parameterDimension; ++ j) { const Scalar sign = moments[j] < 0.0 ? -1.0 : 1.0; const Scalar slack = refSign_[j] * std::pow(std::abs(refMoments_[j]), 1.0 / (j + 1.0)) - sign * std::pow(std::abs(moments[j]), 1.0 / (j + 1.0)); result += slack * slack; } const Scalar sigma2 = distribution.getCovariance()(0, 0); return Point(1, result / sigma2); } private: Point refMoments_; Point refSign_; Distribution distribution_; Point knownParameterValues_; Indices knownParameterIndices_; Indices unknownParameterIndices_; }; Point MethodOfMomentsFactory::buildParameter(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const UnsignedInteger effectiveParameterSize = distribution_.getParameterDimension(); if (!knownParameterIndices_.check(effectiveParameterSize)) throw InvalidArgumentException(HERE) << "Error: known indices cannot exceed parameter size"; if (knownParameterValues_.getSize() != knownParameterIndices_.getSize()) throw InvalidArgumentException(HERE) << "Error: known values size must match indices"; Point refMoments(effectiveParameterSize); refMoments[0] = sample.computeMean()[0]; for (UnsignedInteger j = 1; j < effectiveParameterSize; ++ j) { refMoments[j] = sample.computeCenteredMoment(j + 1)[0]; } // Define NumericalMathEvaluation using the MethodOfMomentsEvaluation wrapper MethodOfMomentsEvaluation methodOfMomentsWrapper(refMoments, distribution_, knownParameterValues_, knownParameterIndices_); Function momentsObjective(methodOfMomentsWrapper.clone()); // Define optimisation problem OptimizationProblem problem(problem_); problem.setObjective(momentsObjective); OptimizationAlgorithm solver(solver_); if (solver.getStartingPoint().getDimension() != momentsObjective.getInputDimension()) { Point effectiveParameter(distribution_.getParameter()); LOGINFO(OSS() << "Warning! The given starting point=" << solver.getStartingPoint() << " has a dimension=" << solver.getStartingPoint().getDimension() << " which is different from the expected parameter dimension=" << momentsObjective.getInputDimension() << ". Switching to the default parameter value=" << effectiveParameter); // extract unknown values Point parameter; for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) parameter.add(effectiveParameter[j]); } solver.setStartingPoint(parameter); } solver.setProblem(problem); solver.run(); Point effectiveParameter(effectiveParameterSize); // set unknown values Point parameter(solver.getResult().getOptimalPoint()); UnsignedInteger index = 0; for (UnsignedInteger j = 0; j < effectiveParameterSize; ++ j) { if (!knownParameterIndices_.contains(j)) { effectiveParameter[j] = parameter[index]; ++ index; } } // set known values UnsignedInteger knownParametersSize = knownParameterIndices_.getSize(); for (UnsignedInteger j = 0; j < knownParametersSize; ++ j) { effectiveParameter[knownParameterIndices_[j]] = knownParameterValues_[j]; } return effectiveParameter; } DistributionFactoryImplementation::Implementation MethodOfMomentsFactory::build(const Sample & sample) const { Distribution result(distribution_); result.setParameter(buildParameter(sample)); result.setDescription(sample.getDescription()); return result.getImplementation(); } void MethodOfMomentsFactory::setOptimizationProblem(const OptimizationProblem& problem) { problem_ = problem; } OptimizationProblem MethodOfMomentsFactory::getOptimizationProblem() const { return problem_; } void MethodOfMomentsFactory::setOptimizationAlgorithm(const OptimizationAlgorithm& solver) { solver_ = solver; } OptimizationAlgorithm MethodOfMomentsFactory::getOptimizationAlgorithm() const { return solver_; } void MethodOfMomentsFactory::setOptimizationSolver(const OptimizationAlgorithm& solver) { Log::Warn(OSS() << "MethodOfMomentsFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } OptimizationAlgorithm MethodOfMomentsFactory::getOptimizationSolver() const { Log::Warn(OSS() << "MethodOfMomentsFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void MethodOfMomentsFactory::setKnownParameter(const Point & values, const Indices & indices) { if (knownParameterValues_.getSize() != knownParameterIndices_.getSize()) throw InvalidArgumentException(HERE); knownParameterValues_ = values; knownParameterIndices_ = indices; } Indices MethodOfMomentsFactory::getKnownParameterIndices() const { return knownParameterIndices_; } Point MethodOfMomentsFactory::getKnownParameterValues() const { return knownParameterValues_; } /* Method save() stores the object through the StorageManager */ void MethodOfMomentsFactory::save(Advocate & adv) const { DistributionFactoryImplementation::save(adv); adv.saveAttribute("knownParameterValues_", knownParameterValues_); adv.saveAttribute("knownParameterIndices_", knownParameterIndices_); } /* Method load() reloads the object from the StorageManager */ void MethodOfMomentsFactory::load(Advocate & adv) { DistributionFactoryImplementation::load(adv); adv.loadAttribute("knownParameterValues_", knownParameterValues_); adv.loadAttribute("knownParameterIndices_", knownParameterIndices_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MinCopula.cxx000066400000000000000000000153031307543307100243610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements an independent copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MinCopula.hxx" #include "openturns/Indices.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Exception.hxx" #include "openturns/Description.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MinCopula); static const Factory Factory_MinCopula; /* Default constructor */ MinCopula::MinCopula(const UnsignedInteger dim) : CopulaImplementation() { setName("MinCopula"); // The range is generic for all the copulas setDimension(dim); computeRange(); } /* Comparison operator */ Bool MinCopula::operator ==(const MinCopula & other) const { if (this == &other) return true; return getDimension() == other.getDimension(); } Bool MinCopula::equals(const DistributionImplementation & other) const { const MinCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String MinCopula::__repr__() const { OSS oss; oss << "class=" << MinCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } String MinCopula::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(dim = " << getDimension() << ")"; return oss; } /* Virtual constructor */ MinCopula * MinCopula::clone() const { return new MinCopula(*this); } /* Get one realization of the distribution */ Point MinCopula::getRealization() const { return Point(getDimension(), RandomGenerator::Generate()); } /* Get the DDF of the distribution */ Point MinCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return Point(dimension, 0.0); } /* Get the PDF of the distribution */ Scalar MinCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const Scalar u = point[0]; if ((u <= 0.0) || (u > 1.0)) return 0.0; for (UnsignedInteger i = 1; i < dimension; ++i) if (u != point[i]) return 0.0; return u; } /* Get the CDF of the distribution */ Scalar MinCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); return std::max(0.0, std::min(1.0, *std::min_element(point.begin(), point.end()))); } // computeCDF /* Compute the survival function */ Scalar MinCopula::computeSurvivalFunction(const Point & point) const { return computeCDF(Point(getDimension(), 1.0) - point); } /* Get the quantile of the distribution */ Point MinCopula::computeQuantile(const Scalar prob, const Bool tail) const { if ((prob < 0.0) || (prob > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; // Special case for boarding values if (prob == 0.0) return getRange().getLowerBound(); if (prob == 1.0) return getRange().getUpperBound(); return Point(getDimension(), prob); } /* Compute the covariance of the distribution */ void MinCopula::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension, Collection(dimension * dimension, 1.0 / 12.0)); isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix MinCopula::getKendallTau() const { const UnsignedInteger dimension = getDimension(); return CorrelationMatrix(dimension, Collection(dimension * dimension, 1.0)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ MinCopula::Implementation MinCopula::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case return new MinCopula(indices.getSize()); } /* Get the isoprobabilist transformation */ MinCopula::IsoProbabilisticTransformation MinCopula::getIsoProbabilisticTransformation() const { throw NotDefinedException(HERE) << "Error: no iso-probabilistic transformation can be defined for the Min copula."; } /* Get the inverse isoprobabilist transformation */ MinCopula::InverseIsoProbabilisticTransformation MinCopula::getInverseIsoProbabilisticTransformation() const { throw NotDefinedException(HERE) << "Error: no inverse iso-probabilistic transformation can be defined for the Min copula."; } /* Check if the distribution is elliptical */ Bool MinCopula::isElliptical() const { return false; } /* Check if the distribution is continuos */ Bool MinCopula::isContinuous() const { return false; } /* Tell if the distribution has elliptical copula */ Bool MinCopula::hasEllipticalCopula() const { return hasIndependentCopula(); } /* Tell if the distribution has independent copula */ Bool MinCopula::hasIndependentCopula() const { return (getDimension() == 1); } /* Method save() stores the object through the StorageManager */ void MinCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); } /* Method load() reloads the object from the StorageManager */ void MinCopula::load(Advocate & adv) { // The range is generic for all the copulas CopulaImplementation::load(adv); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Mixture.cxx000066400000000000000000000675221307543307100241410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all Mixtures * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Mixture.hxx" #include "openturns/Log.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Mixture); static const Factory Factory_Mixture; /* Default constructor */ Mixture::Mixture() : DistributionImplementation() , distributionCollection_(1) , weightsDistribution_(UserDefined()) , pdfApproximationCDF_() , cdfApproximation_() , pdfApproximationCCDF_() , ccdfApproximation_() , useApproximatePDFCDF_(false) { setName("Mixture"); setParallel(true); // Set an empty range setDistributionCollection(DistributionCollection(1)); } /* Parameters constructor */ Mixture::Mixture(const DistributionCollection & coll) : DistributionImplementation() , distributionCollection_() , weightsDistribution_() , pdfApproximationCDF_() , cdfApproximation_() , pdfApproximationCCDF_() , ccdfApproximation_() , useApproximatePDFCDF_(false) { setName("Mixture"); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling // the setDistributionCollection() method that do it for us. // This call set also the range. setDistributionCollection( coll ); if ((getDimension() == 1) && (coll.getSize() >= ResourceMap::GetAsUnsignedInteger("Mixture-SmallSize")) && (coll.getSize() < ResourceMap::GetAsUnsignedInteger("Mixture-LargeSize"))) { // Here we use the implementation provided by the DistributionImplementation class instead of the ContinuousDistribution class in order to use both the PDF and the CDF Collection interpolation(DistributionImplementation::interpolatePDFCDF(ResourceMap::GetAsUnsignedInteger("Mixture-PDFCDFDiscretization"))); pdfApproximationCDF_ = interpolation[0]; cdfApproximation_ = interpolation[1]; pdfApproximationCCDF_ = interpolation[2]; ccdfApproximation_ = interpolation[3]; useApproximatePDFCDF_ = true; } } /* Parameters constructor */ Mixture::Mixture(const DistributionCollection & coll, const Point & weights) : DistributionImplementation() , distributionCollection_() , weightsDistribution_() , pdfApproximationCDF_() , cdfApproximation_() , pdfApproximationCCDF_() , ccdfApproximation_() , useApproximatePDFCDF_(false) { setName("Mixture"); if (coll.getSize() != weights.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight size " << weights.getSize() << " must be equal to the distribution collection size " << coll.getSize(); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling // the setDistributionCollection() method that do it for us. // This call set also the range. setDistributionCollectionWithWeights( coll, weights ); if ((getDimension() == 1) && (coll.getSize() >= ResourceMap::GetAsUnsignedInteger("Mixture-SmallSize")) && (coll.getSize() < ResourceMap::GetAsUnsignedInteger("Mixture-LargeSize"))) { // Here we use the implementation provided by the DistributionImplementation class instead of the ContinuousDistribution class in order to use both the PDF and the CDF Collection interpolation(DistributionImplementation::interpolatePDFCDF(ResourceMap::GetAsUnsignedInteger("Mixture-PDFCDFDiscretization"))); pdfApproximationCDF_ = interpolation[0]; cdfApproximation_ = interpolation[1]; pdfApproximationCCDF_ = interpolation[2]; ccdfApproximation_ = interpolation[3]; useApproximatePDFCDF_ = true; } } /* Comparison operator */ Bool Mixture::operator ==(const Mixture & other) const { if (this == &other) return true; return distributionCollection_ == other.distributionCollection_; } Bool Mixture::equals(const DistributionImplementation & other) const { const Mixture* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Mixture::__repr__() const { OSS oss(true); oss << "class=" << Mixture::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " distributionCollection=" << distributionCollection_ << " weightsDistribution=" << weightsDistribution_; return oss; } String Mixture::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "("; String separator(""); for (UnsignedInteger i = 0; i < distributionCollection_.getSize(); ++i) { oss << separator << "(w = " << distributionCollection_[i].getWeight() << ", d = " << distributionCollection_[i] << ")"; separator = ", "; } oss << ")"; return oss; } /* Weights accessor */ Point Mixture::getWeights() const { const UnsignedInteger size = distributionCollection_.getSize(); Point weights(size); for (UnsignedInteger i = 0; i < size; ++i) weights[i] = distributionCollection_[i].getWeight(); return weights; } void Mixture::setWeights(const Point & weights) { const DistributionCollection coll(distributionCollection_); setDistributionCollectionWithWeights( coll, weights); } /* Compute the numerical range of the distribution given the parameters values */ void Mixture::computeRange() { const UnsignedInteger size = distributionCollection_.getSize(); if (size == 0) return; Interval range(distributionCollection_[0].getRange()); for (UnsignedInteger i = 1; i < size; ++i) range = range.join(distributionCollection_[i].getRange()); setRange(range); } /* Weights distribution accessor */ void Mixture::setWeightsDistribution(const UserDefined & weightsDistribution) { weightsDistribution_ = weightsDistribution; } UserDefined Mixture::getWeightsDistribution() const { return weightsDistribution_; } /* Distribution collection accessor */ void Mixture::setDistributionCollection(const DistributionCollection & coll) { const UnsignedInteger size = coll.getSize(); Point weights(size); for (UnsignedInteger i = 0; i < size; ++i) weights[i] = coll[i].getWeight(); setDistributionCollectionWithWeights(coll, weights); } void Mixture::setDistributionCollectionWithWeights(const DistributionCollection & coll, const Point & weights) { // Not const because the collection will be simplified and its size reduced UnsignedInteger size = coll.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Mixture based on an empty distribution collection."; if (weights.getSize() != size) throw InvalidArgumentException(HERE) << "Error: the number of weights=" << weights.getSize() << " is different from the number of distributions=" << size << "."; Scalar maximumWeight = weights[0]; Scalar weightSum = maximumWeight; UnsignedInteger dimension = coll[0].getDimension(); // First loop, check the atoms dimensions and the weigths values for(UnsignedInteger i = 1; i < size; ++i) { if (dimension != coll[i].getDimension()) // We throw an exception because the collection has distributions of different sizes throw InvalidArgumentException(HERE) << "Collection of distributions has distributions of different dimensions"; Scalar w = weights[i]; if (!(w >= 0.0)) throw InvalidArgumentException(HERE) << "Distribution " << i << " has a negative weight, w=" << w; if (w > maximumWeight) maximumWeight = w; weightSum += w; } /* end for */ const Scalar smallWeight = ResourceMap::GetAsScalar("Mixture-SmallWeight"); if (weightSum < smallWeight) // We throw an exception because the collection of distributions has only distributions with small weight: they cannot be renormalized throw InvalidArgumentException(HERE) << "Collection of distributions has atoms with too small total weight=" << weightSum << " for a threshold equal to Mixture-SmallWeight=" << smallWeight; // Second loop, keep only the atoms with a significant weight and update the sum weightSum = 0.0; distributionCollection_ = DistributionCollection(0); isCopula_ = true; for(UnsignedInteger i = 0; i < size; ++i) { Scalar w = weights[i]; if (w < smallWeight * maximumWeight) { LOGINFO(OSS() << "Warning! The distribution number " << i << " has a too small weight=" << w << " for a relative threshold equal to Mixture-SmallWeight=" << smallWeight << " with respect to the maximum weight=" << maximumWeight << ". It is removed from the collection."); } else { // Set the original weight into the collection as it will be reused from here in the normalization step Distribution atom(coll[i]); atom.setWeight(w); distributionCollection_.add(atom); weightSum += w; isCopula_ = isCopula_ && atom.isCopula(); } } // Update the size of the collection as null-weighted distributions could have been dismissed size = distributionCollection_.getSize(); // We set the member with the collection passed as argument and we renormalize it in place Sample x(size, 1); Point p(size); Bool parallel = true; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar normalizedWeight = distributionCollection_[i].getWeight() / weightSum; distributionCollection_[i].setWeight(normalizedWeight); x[i][0] = i; p[i] = normalizedWeight; parallel = parallel && distributionCollection_[i].getImplementation()->isParallel(); } /* end for */ setParallel(parallel); setWeightsDistribution(UserDefined(x, p)); setDimension(dimension); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } /* Distribution collection accessor */ const Mixture::DistributionCollection & Mixture::getDistributionCollection() const { return distributionCollection_; } /* Virtual constructor */ Mixture * Mixture::clone() const { return new Mixture(*this); } /* Get one realization of the Mixture */ Point Mixture::getRealization() const { // Select the atom following the weightsDistribution const UnsignedInteger index = static_cast(round(weightsDistribution_.getRealization()[0])); return distributionCollection_[index].getRealization(); } /* Get the DDF of the Mixture */ Point Mixture::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point ddfValue(dimension, 0.0); if (!getRange().numericallyContains(point)) return ddfValue; const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) ddfValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computeDDF(point); return ddfValue; } /* Get the PDF of the Mixture */ Scalar Mixture::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return pdfApproximationCDF_.derivate(point)[0]; else return pdfApproximationCCDF_.derivate(point)[0]; } Scalar pdfValue = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); if (!getRange().numericallyContains(point)) return pdfValue; for(UnsignedInteger i = 0; i < size; ++i) pdfValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computePDF(point); return pdfValue; } /* Get the CDF of the Mixture */ Scalar Mixture::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (useApproximatePDFCDF_) { if (point[0] < getMean()[0]) return cdfApproximation_(point)[0]; else return 1.0 - ccdfApproximation_(point)[0]; } Scalar cdfValue = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) cdfValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computeCDF(point); return cdfValue; } /* Get the survival function of the Mixture */ Scalar Mixture::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Scalar survivalValue = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) survivalValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computeSurvivalFunction(point); return survivalValue; } /* Compute the probability content of an interval */ Scalar Mixture::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); const Interval reducedInterval(interval.intersect(getRange())); // If the interval is empty if (reducedInterval.isNumericallyEmpty()) return 0.0; // If the interval is the range if (reducedInterval == getRange()) return 1.0; Scalar probability = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) probability += distributionCollection_[i].getWeight() * distributionCollection_[i].computeProbability(reducedInterval); return probability; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Mixture::computeCharacteristicFunction(const Scalar x) const { Complex cfValue(0.0); UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) cfValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computeCharacteristicFunction(x); return cfValue; } /* Get the PDF gradient of the distribution */ Point Mixture::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point pdfGradientValue; const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) pdfGradientValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computePDFGradient(point); return pdfGradientValue; } /* Get the CDF gradient of the distribution */ Point Mixture::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point cdfGradientValue(getDimension(), 0.0); const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) cdfGradientValue += distributionCollection_[i].getWeight() * distributionCollection_[i].computeCDFGradient(point); return cdfGradientValue; } /* Get the i-th marginal distribution */ Mixture::Implementation Mixture::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case DistributionCollection collection; const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger index = 0; index < size; ++index) { collection.add(distributionCollection_[index].getMarginal(i)); collection[index].setWeight(distributionCollection_[index].getWeight()); } Mixture marginal(collection); marginal.isCopula_ = isCopula_; return marginal.clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Mixture::Implementation Mixture::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); DistributionCollection collection; const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger index = 0; index < size; ++index) { collection.add(distributionCollection_[index].getMarginal(indices)); collection[index].setWeight(distributionCollection_[index].getWeight()); } Mixture marginal(collection); marginal.isCopula_ = isCopula_; return marginal.clone(); } /* Compute the mean of the Mixture */ void Mixture::computeMean() const { mean_ = Point(getDimension(), 0.0); const UnsignedInteger size = distributionCollection_.getSize(); for(UnsignedInteger i = 0; i < size; ++i) mean_ += distributionCollection_[i].getWeight() * distributionCollection_[i].getMean(); isAlreadyComputedMean_ = true; } /* Compute the covariance of the Mixture */ void Mixture::computeCovariance() const { const UnsignedInteger dimension = getDimension(); // To insure a zero initialization covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) covariance_(i, i) = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); // First, compute E(X.X^t) for(UnsignedInteger i = 0; i < size; ++i) { const Scalar weightI = distributionCollection_[i].getWeight(); const CovarianceMatrix covarianceI(distributionCollection_[i].getCovariance()); const Point meanI(distributionCollection_[i].getMean()); for(UnsignedInteger row = 0; row < dimension; ++row) for(UnsignedInteger column = 0; column <= row; ++column) covariance_(row, column) += weightI * (covarianceI(row, column) + meanI[row] * meanI[column]); } /* end for */ // Then, substract E(X).E(X)^t const Point mean(getMean()); for(UnsignedInteger row = 0; row < dimension; ++row) for(UnsignedInteger column = 0; column <= row; ++column) covariance_(row, column) -= mean[row] * mean[column]; isAlreadyComputedCovariance_ = true; } /** Parameters value and description accessor */ Mixture::PointWithDescriptionCollection Mixture::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = distributionCollection_.getSize(); // Special case for dimension=1 if (dimension == 1) { PointWithDescriptionCollection parameters(1); Description description; // Form a big Point from the parameters of each atom and its weight for (UnsignedInteger i = 0; i < size; ++i) { const PointWithDescription atomParameters(distributionCollection_[i].getParametersCollection()[0]); const Description atomDescription(atomParameters.getDescription()); const UnsignedInteger atomParameterDimension = atomParameters.getDimension(); // Add the current atom parameters parameters[0].add(distributionCollection_[i].getWeight()); description.add(OSS() << "w_" << i); for (UnsignedInteger j = 0; j < atomParameterDimension; ++j) { parameters[0].add(atomParameters[j]); description.add(atomDescription[j]); } } parameters[0].setDescription(description); parameters[0].setName(getName()); return parameters; } // General case PointWithDescriptionCollection parameters(size + 1); Description description; // First put the marginal parameters for (UnsignedInteger marginalIndex = 0; marginalIndex < size; ++marginalIndex) { // Each marginal distribution must output a collection of parameters of size 1, even if it contains an empty Point const PointWithDescriptionCollection marginalParameters(distributionCollection_[marginalIndex].getParametersCollection()); PointWithDescription point(marginalParameters[0]); point.setName(distributionCollection_[marginalIndex].getName()); parameters[marginalIndex] = point; } // marginalIndex // Form a big Point from the dependence parameters of each atom for (UnsignedInteger i = 0; i < size; ++i) { const PointWithDescription atomDependenceParameters(distributionCollection_[i].getParametersCollection()[dimension]); const Description atomDescription(atomDependenceParameters.getDescription()); const UnsignedInteger atomParameterDimension = atomDependenceParameters.getDimension(); const String prefix(OSS() << "atom_" << i << "_"); // Add the current atom dependence parameters for (UnsignedInteger j = 0; j < atomParameterDimension; j++) { parameters[size].add(atomDependenceParameters[j]); description.add(prefix + atomDescription[j]); } } parameters[size].setDescription(description); parameters[size].setName("dependence"); return parameters; } // getParametersCollection /* Check if the distribution is elliptical */ Bool Mixture::isElliptical() const { // If there is only one atom if (distributionCollection_.getSize() == 1) return distributionCollection_[0].isElliptical(); return false; } /* Check if the distribution is continuous */ Bool Mixture::isContinuous() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isContinuous()) return false; return true; } /* Check if the distribution is discrete */ Bool Mixture::isDiscrete() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isDiscrete()) return false; return true; } /* Check if the distribution is integral */ Bool Mixture::isIntegral() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isIntegral()) return false; return true; } /* Tell if the distribution has elliptical copula */ Bool Mixture::hasEllipticalCopula() const { // In 1D, all the distributions have an elliptical copula if (getDimension() == 1) return true; // If there is only one atom, the mixture has the same properties as this atom if (distributionCollection_.getSize() == 1) return distributionCollection_[0].getImplementation()->hasEllipticalCopula(); // General case return false; } /* Tell if the distribution has independent copula */ Bool Mixture::hasIndependentCopula() const { // In 1D, all the distributions have an independent copula if (getDimension() == 1) return true; // If there is only one atom, the mixture has the same properties as this atom if (distributionCollection_.getSize() == 1) return distributionCollection_[0].getImplementation()->hasIndependentCopula(); // General case return false; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Mixture::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; // Fill a std::set with the points in the support of each atom in order to automatically remove duplicates std::set setSupport; for (UnsignedInteger i = 0; i < distributionCollection_.getSize(); ++i) { const Sample atomSupport(distributionCollection_[i].getSupport(interval)); for (UnsignedInteger j = 0; j < atomSupport.getSize(); ++j) setSupport.insert(atomSupport[j]); } Sample support(0, getDimension()); for (std::set::iterator i = setSupport.begin(); i != setSupport.end(); ++i) support.add(*i); return support; } /* Get the PDF singularities inside of the range - 1D only */ Point Mixture::getSingularities() const { if (getDimension() > 1) throw InternalException(HERE) << "Error: getSingularities() is defined for 1D distributions only"; Point singularities(0); // Aggregate all the singularities of the atoms including the bounds of the range // as it can be singularities within the mixture range for (UnsignedInteger i = 0; i < distributionCollection_.getSize(); ++i) { singularities.add(distributionCollection_[i].getRange().getLowerBound()[0]); singularities.add(distributionCollection_[i].getSingularities()); singularities.add(distributionCollection_[i].getRange().getUpperBound()[0]); } // The singularities of a distribution have to be strictly included into the // range of the distribution. As the range of a mixture is the bounding box // of the ranges of the atoms, the bounds of the mixture range are within // the bounds of the atoms ranges and after the sorting and removing of // duplicates they are the current first and last elements of singularities. // We use a 3-steps approach: // 1) Sort the values to put the lower bound at the first position and the upper // bound at the last position std::sort(singularities.begin(), singularities.end()); // 2) Remove the duplicates and the upper bound in a unique pass singularities.erase(std::unique(singularities.begin(), singularities.end()) - 1, singularities.end()); // 3) Remove the lower bound singularities.erase(singularities.begin(), singularities.begin() + 1); return singularities; } /* Method save() stores the object through the StorageManager */ void Mixture::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distributionCollection_", distributionCollection_ ); adv.saveAttribute( "weightsDistribution_", weightsDistribution_ ); adv.saveAttribute( "pdfApproximationCDF_", pdfApproximationCDF_ ); adv.saveAttribute( "cdfApproximation_", cdfApproximation_ ); adv.saveAttribute( "pdfApproximationCCDF_", pdfApproximationCCDF_ ); adv.saveAttribute( "ccdfApproximation_", ccdfApproximation_ ); adv.saveAttribute( "useApproximatePDFCDF_", useApproximatePDFCDF_ ); } /* Method load() reloads the object from the StorageManager */ void Mixture::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "distributionCollection_", distributionCollection_ ); adv.loadAttribute( "weightsDistribution_", weightsDistribution_ ); adv.loadAttribute( "pdfApproximationCDF_", pdfApproximationCDF_ ); adv.loadAttribute( "cdfApproximation_", cdfApproximation_ ); adv.loadAttribute( "pdfApproximationCCDF_", pdfApproximationCCDF_ ); adv.loadAttribute( "ccdfApproximation_", ccdfApproximation_ ); adv.loadAttribute( "useApproximatePDFCDF_", useApproximatePDFCDF_ ); // To compute the range setDistributionCollection(DistributionCollection(distributionCollection_)); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Multinomial.cxx000066400000000000000000000556601307543307100247760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Multinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Collection.hxx" #include "openturns/Multinomial.hxx" #include "openturns/Binomial.hxx" #include "openturns/Poisson.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Exception.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearEnumerateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection UnsignedIntegerCollection; CLASSNAMEINIT(Multinomial); static const Factory Factory_Multinomial; /* Default constructor */ Multinomial::Multinomial() : DiscreteDistribution() , n_(0) , p_(0) , sumP_(0.0) , smallA_(ResourceMap::GetAsScalar("Multinomial-smallA")) , eta_(ResourceMap::GetAsScalar("Multinomial-eta")) { setName("Multinomial"); // This method compute the range also setN(1); setP( Point(1, 0.5) ); } /* Parameters constructor */ Multinomial::Multinomial(const UnsignedInteger n, const Point & p) : DiscreteDistribution() , n_(0) , p_(0) , sumP_(0.0) , smallA_(ResourceMap::GetAsScalar("Multinomial-smallA")) , eta_(ResourceMap::GetAsScalar("Multinomial-eta")) { setName("Multinomial"); // This method compute the range also setN( n ); setP( p ); computeRange(); } /* Comparison operator */ Bool Multinomial::operator ==(const Multinomial & other) const { if (this == &other) return true; return (n_ == other.n_) && (p_ == other.p_); } Bool Multinomial::equals(const DistributionImplementation & other) const { const Multinomial* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Multinomial::__repr__() const { OSS oss; oss << "class=" << Multinomial::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " p=" << p_ << " n=" << n_; return oss; } String Multinomial::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(n = " << n_ << ", p = " << p_.__str__() << ")"; return oss; } /* Virtual constructor */ Multinomial * Multinomial::clone() const { return new Multinomial(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Multinomial::computeRange() { const UnsignedInteger dimension = getDimension(); const Point lowerBound(dimension, 0.0); const Point upperBound(dimension, n_); const Interval::BoolCollection finiteLowerBound(dimension, true); const Interval::BoolCollection finiteUpperBound(dimension, true); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Multinomial::getRealization() const { const UnsignedInteger dimension = getDimension(); Point realization(dimension); /* We use an elementary algorithm based on the definition of the Multinomial distribution: * the i-th component is generated using a Binomial distribution */ UnsignedInteger n = n_; Scalar sum = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { /* The current component follow a binomial distribution with parameters p_[i] and N */ const UnsignedInteger xI = DistFunc::rBinomial(n, p_[i] / sum); realization[i] = xI; n -= xI; sum -= p_[i]; } return realization; } /* Get the PDF of the distribution */ Scalar Multinomial::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // First, check the validity of the input Scalar sumX = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar k = point[i]; // Early exit if the given point is not in the support of the distribution if ((std::abs(k - round(k)) > supportEpsilon_) || (k < -supportEpsilon_) || (k > n_ + supportEpsilon_)) return 0.0; sumX += k; } if (sumX > n_ + supportEpsilon_) return 0.0; if ((sumP_ >= 1.0) && (sumX < n_ - supportEpsilon_)) return 0.0; Scalar logPDF = -1.0; if (sumP_ < 1.0) logPDF = lgamma(n_ + 1.0) - lgamma(n_ - sumX + 1.0) + (n_ - sumX) * log1p(-sumP_); // In the case sumP_ >= 1.0, the PDF is positive only if sumX == n_ else logPDF = lgamma(n_ + 1.0); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar k = point[i]; // For p_[i] > 0, it is possible to obtain any value of k between 0 and n if (p_[i] > 0.0) logPDF += k * std::log(p_[i]) - lgamma(k + 1.0); // Else only k == 0 is allowed, with a zero contribution to the log PDF else if (k > 0) return 0.0; } return std::exp(logPDF); } /* Compute the generating function of a sum of truncated Poisson distributions as needed in the computeCDF() method */ Complex Multinomial::computeGlobalPhi(const Complex & z, const Point & x) const { // Initialize with the non truncated term Complex value(std::exp(-(1.0 - sumP_) * n_ * (1.0 - z))); const UnsignedInteger dimension = getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) { value *= computeLocalPhi(z, n_ * p_[i], x[i]); if (std::abs(value) == 0.0) { LOGWARN("Underflow in Multinomial::computePhi"); return 0.0; } } return value; } /* Compute the generating function of a truncated Poisson distributions as needed in the computeCDF() method */ Complex Multinomial::computeLocalPhi(const Complex & z, const Scalar lambda, const Scalar a) const { if (z == 0.0) return 1.0; const Complex u(lambda * z); const UnsignedInteger iMax = static_cast< UnsignedInteger > (floor(a)); // Small value of a, evaluate the generating function as a polynomial if (a <= smallA_) { Complex value(std::exp(-lambda)); Complex term(value); for (UnsignedInteger i = 1; i <= iMax; ++i) { term *= u / Complex(i); value += term; } return value; } // smallA_ // Large a Complex value(std::exp(-lambda + u)); UnsignedInteger i = iMax + 1; Complex term(std::exp(-lambda + Complex(i) * std::log(u) - lgamma(i + 1.0))); while (std::abs(term) > SpecFunc::Precision * std::abs(value)) { value -= term; ++i; term *= u / Complex(i); } return value - term; } /* Get the CDF of the distribution Algorithm described in: R. Lebrun, "Efficient time/space algorithm to compute rectangular probabilities of multinomial, multivariate hypergeometric and multivariate Polya distributions", Statistics and Computing, submitted (2011). */ Scalar Multinomial::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Early exit for 1D case if (dimension == 1) { const Scalar k = point[0]; if (k < -supportEpsilon_) return 0.0; if (k > n_ + supportEpsilon_) return 1.0; return DistFunc::pBeta(n_ - floor(k), floor(k) + 1, 1.0 - p_[0]); } // First, check the bording cases Indices indices(0); Bool allZero = true; Scalar sumX = 0.0; // Trivial cases for (UnsignedInteger i = 0; i < dimension; ++i) { // If the given point does not cover any point of the support, return 0.0 if (point[i] < -supportEpsilon_) return 0.0; if (point[i] < n_ - supportEpsilon_) indices.add(i); allZero = allZero && (std::abs(point[i]) < supportEpsilon_); sumX += point[i]; } // If we are at the origin, CDF=PDF(0,...,0) if (allZero) return std::pow(1.0 - sumP_, static_cast(n_)); // If the atoms with non zero probability sum to N if ((std::abs(sumP_ - 1.0) < supportEpsilon_) && (sumX == n_)) { Scalar value = lgamma(n_ + 1.0); for (UnsignedInteger j = 0; j < dimension; ++j) value += point[j] * std::log(p_[j]) - lgamma(point[j] + 1.0); return std::exp(value); } // If the point covers the whole support of the distribution, return 1.0 const UnsignedInteger size = indices.getSize(); if (size == 0) return 1.0; // Now, check if there is a possible reduction of the dimension if (size < dimension) { // reduce the dimension to the active indices Point pReduced(size); Point xReduced(size); for (UnsignedInteger i = 0; i < size; ++i) { pReduced[i] = p_[indices[i]]; xReduced[i] = point[indices[i]]; } return Multinomial(n_, pReduced).computeCDF(xReduced); } // Evaluation of P(W=n) using Poisson's formula Complex phiK(computeGlobalPhi(r_, point)); const Complex zetaN(std::exp(Complex(0.0, M_PI / n_))); Complex phiKp1(computeGlobalPhi(r_ * zetaN, point)); Complex delta(phiK - phiKp1); Scalar value = delta.real(); const Scalar dv0 = std::abs(delta); if (dv0 == 0.0) { LOGWARN("Underflow in Multinomial::computeCDF"); return 0.0; } Scalar sign = -1.0; Complex t(zetaN); for (UnsignedInteger k = 1; k < n_; ++k) { phiK = phiKp1; t *= zetaN; phiKp1 = computeGlobalPhi(r_ * t, point); delta = phiK - phiKp1; value += sign * delta.real(); const Scalar dv = std::abs(delta); if (dv < SpecFunc::Precision * dv0) break; sign = -sign; } // Due to round-off errors, the computed CDF can be slightly below 0 or over 1. return std::max(0.0, std::min(1.0, value * normalizationCDF_)); } /* Compute the scalar quantile of the 1D multinomial distribution */ Scalar Multinomial::computeScalarQuantile(const Scalar prob, const Bool tail) const { return Binomial(n_, p_[0]).computeQuantile(prob, tail)[0]; } // computeScalarQuantile /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) For Multinomial distribution, the conditional distribution is Binomial */ Scalar Multinomial::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if (conditioningDimension == 0) return Binomial(n_, p_[0]).computePDF(x); // General case // Check that y is a valid conditioning vector UnsignedIntegerCollection intY(conditioningDimension); Scalar sumY = 0.0; Scalar sumP = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { const Scalar yI = y[i]; const UnsignedInteger intYI = static_cast(round(yI)); if (std::abs(yI - intYI) > supportEpsilon_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has non-integer values"; sumY += yI; intY[i] = intYI; sumP += p_[i]; } if (sumY > n_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has a sum of components greater than the allowed range."; return Binomial(static_cast(n_ - sumY), p_[conditioningDimension] / sumP).computePDF(x); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Multinomial::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if (conditioningDimension == 0) return Binomial(n_, p_[0]).computeCDF(x); // General case // Check that y is a valid conditioning vector UnsignedIntegerCollection intY(conditioningDimension); Scalar sumY = 0.0; Scalar sumP = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { const Scalar yI = y[i]; const UnsignedInteger intYI = static_cast(round(yI)); if (std::abs(yI - intYI) > supportEpsilon_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has non-integer values"; sumY += yI; intY[i] = intYI; sumP += p_[i]; } if (sumY > n_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has a sum of components greater than the allowed range."; return Binomial(static_cast(n_ - sumY), p_[conditioningDimension] / sumP).computeCDF(x); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar Multinomial::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case when no contitioning or independent copula if (conditioningDimension == 0) return Binomial(n_, p_[0]).computeQuantile(q)[0]; // General case // Check that y is a valid conditioning vector UnsignedIntegerCollection intY(conditioningDimension); Scalar sumY = 0.0; Scalar sumP = 0.0; for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { const Scalar yI = y[i]; const UnsignedInteger intYI = static_cast(round(yI)); if (std::abs(yI - intYI) > supportEpsilon_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has non-integer values"; sumY += yI; intY[i] = intYI; sumP += p_[i]; } if (sumY > n_) throw InvalidArgumentException(HERE) << "Error: the conditioning vector has a sum of components greater than the allowed range."; return Binomial(static_cast(n_ - sumY), p_[conditioningDimension] / sumP).computeQuantile(q)[0]; } /* Get the i-th marginal distribution */ Multinomial::Implementation Multinomial::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case return new Binomial(n_, p_[i]); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Multinomial::Implementation Multinomial::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger outputDimension = indices.getSize(); Point marginalP(outputDimension); // Extract the correlation matrix, the marginal standard deviations and means for (UnsignedInteger i = 0; i < outputDimension; ++i) { const UnsignedInteger index_i = indices[i]; marginalP[i] = p_[index_i]; } return new Multinomial(n_, marginalP); } // getMarginal(Indices) /* Get the support of a discrete distribution that intersect a given interval */ Sample Multinomial::getSupport(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; Sample support(0, dimension); // Quick return if the lower bound of the interval is already outside of the support const Point lowerBound(interval.getLowerBound()); const Point upperBound(interval.getUpperBound()); Scalar sumLower = 0.0; Scalar sumUpper = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { // One of the components of the upper bound is negative, so the intersection with the positive quadrant is empty if (upperBound[i] < 0.0) return support; sumLower += lowerBound[i]; sumUpper += upperBound[i]; } if ((sumLower > n_) || (sumUpper < 0.0)) return support; // Here we know that all the components of the upper bound are positive or null const Sample fullSupport(getSupport()); // Quick return if the interval contains all the support // It cannot be possible if the sum of the components of the upper bound is less than n_ if ((sumUpper >= n_) && (sumLower <= 0.0)) { Bool allInside = true; for (UnsignedInteger i = 0; i < dimension; ++i) { allInside = allInside && (lowerBound[i] <= 0.0); if (!allInside) break; } if (allInside) return fullSupport; } // We have to remove some points const UnsignedInteger size = fullSupport.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Point point(fullSupport[i]); const Bool isInside = interval.contains(point); if (isInside) support.add(point); } return support; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Multinomial::getSupport() const { const UnsignedInteger dimension = getDimension(); LinearEnumerateFunction enumerate(dimension); const UnsignedInteger size = enumerate.getStrataCumulatedCardinal(n_); Sample support(0, dimension); for (UnsignedInteger i = 0; i < size; ++i) { Indices multi(enumerate(i)); support.add(Collection(multi.begin(), multi.end())); } return support; } /* Compute the mean of the distribution */ void Multinomial::computeMean() const { mean_ = n_ * p_; isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void Multinomial::computeCovariance() const { const UnsignedInteger dimension = getDimension(); // To insure a zero initialization covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar pI = p_[i]; covariance_(i, i) = pI * (1.0 - pI) * n_; // Be careful! in these computations, n_ cannot be at the begining of the formula else -n_ will underflow the UnsignedInteger range! for (UnsignedInteger j = 0; j < i; ++j) covariance_(i, j) = -pI * p_[j] * n_; } isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ Multinomial::PointWithDescriptionCollection Multinomial::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters((dimension == 1 ? 1 : dimension + 1)); for (UnsignedInteger i = 0; i < dimension; ++i) { PointWithDescription point(2); point[0] = n_; point[1] = p_[i]; Description description(2); description[0] = "n"; OSS oss; oss << "p_" << i; description[1] = oss; point.setDescription(description); point.setName(getDescription()[i]); parameters[i] = point; } if (dimension > 1) { PointWithDescription point(dimension + 1); Description description(dimension + 1); point[0] = n_; description[0] = "n"; for (UnsignedInteger i = 0; i < dimension; ++i) { point[i + 1] = p_[i]; OSS oss; oss << "p_" << i; description[i + 1] = oss; } point.setDescription(description); point.setName("dependence"); parameters[dimension] = point; } return parameters; } /* Check if the distribution is elliptical */ Bool Multinomial::isElliptical() const { return (getDimension() > 1) && (p_[0] == 0.5); } /* P accessor */ void Multinomial::setP(const Point & p) { // We check that the elements are all positive const UnsignedInteger dimension = p.getDimension(); if (dimension == 0) throw InvalidArgumentException(HERE) << "P must have a positive dimension."; Scalar sum = 0.0; for(UnsignedInteger i = 0; i < dimension; ++i) { Scalar pI = p[i]; if (!(pI >= 0.0)) throw InvalidArgumentException(HERE) << "P elements MUST be nonnegative"; sum += pI; } if (sum > 1.0) { LOGWARN(OSS() << "P elements have a sum=" << sum << " greater than 1. It has been renormalized to 1.0"); p_ = p / sum; sumP_ = 1.0; } else { p_ = p; sumP_ = sum; } setDimension(dimension); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; } /* P accessor */ Point Multinomial::getP() const { return p_; } /* N accessor */ void Multinomial::setN(const UnsignedInteger n) { if (n == 0) throw InvalidArgumentException(HERE) << "Error: n must be > 0."; if (n != n_) { n_ = n; // Best overall performance for Poisson's formula, see reference r_ = std::pow(eta_, 1.0 / (2.0 * n)); normalizationCDF_ = std::exp(lgamma(n + 1.0) - n * std::log(1.0 * n) + n - std::log(2.0 * n) - 0.5 * std::log(eta_)); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } } UnsignedInteger Multinomial::getN() const { return n_; } /* SmallA accessor */ void Multinomial::setSmallA(const Scalar smallA) { smallA_ = smallA; } Scalar Multinomial::getSmallA() const { return smallA_; } /* Eta accessor */ void Multinomial::setEta(const Scalar eta) { eta_ = eta; } Scalar Multinomial::getEta() const { return eta_; } /* Method save() stores the object through the StorageManager */ void Multinomial::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "n_", n_ ); adv.saveAttribute( "p_", p_ ); adv.saveAttribute( "sumP_", sumP_ ); adv.saveAttribute( "normalizationCDF_", normalizationCDF_ ); adv.saveAttribute( "r_", r_ ); adv.saveAttribute( "smallA_", smallA_ ); adv.saveAttribute( "eta_", eta_ ); } /* Method load() reloads the object from the StorageManager */ void Multinomial::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "n_", n_ ); adv.loadAttribute( "p_", p_ ); adv.loadAttribute( "sumP_", sumP_ ); adv.loadAttribute( "normalizationCDF_", normalizationCDF_ ); adv.loadAttribute( "r_", r_ ); adv.loadAttribute( "smallA_", smallA_ ); adv.loadAttribute( "eta_", eta_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/MultinomialFactory.cxx000066400000000000000000000055031307543307100263150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Multinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/MultinomialFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(MultinomialFactory); static const Factory Factory_MultinomialFactory; /* Default constructor */ MultinomialFactory::MultinomialFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ MultinomialFactory * MultinomialFactory::clone() const { return new MultinomialFactory(*this); } /* Here is the interface that all derived class must implement */ MultinomialFactory::Implementation MultinomialFactory::build(const Sample & sample) const { return buildAsMultinomial(sample).clone(); } MultinomialFactory::Implementation MultinomialFactory::build() const { return buildAsMultinomial().clone(); } Multinomial MultinomialFactory::buildAsMultinomial(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Multinomial distribution from an empty sample"; // Check if each component of the sample is an integer, compute the mean and extract the maximum value UnsignedInteger size = sample.getSize(); UnsignedInteger dimension = sample.getDimension(); Point p(dimension, 0.0); Scalar max = sample[0][0]; for (UnsignedInteger i = 0; i < size; i++) { for (UnsignedInteger j = 0; j < dimension; j++) { Scalar x = sample[i][j]; if ((x != trunc(x)) || (x < 0.0)) throw InvalidArgumentException(HERE) << "Error: can build a Multinomial distribution only from a sample with positive integer components, here sample[" << i << "][" << j << "]=" << x; if (x > max) max = x; p[j] += x; } } const UnsignedInteger n = (UnsignedInteger)max; p *= 1.0 / (max * size); Multinomial result(n, p); result.setDescription(sample.getDescription()); return result; } Multinomial MultinomialFactory::buildAsMultinomial() const { return Multinomial(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NegativeBinomial.cxx000066400000000000000000000277011307543307100257140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NegativeBinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NegativeBinomial.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NegativeBinomial); static const Factory Factory_NegativeBinomial; /* Default constructor */ NegativeBinomial::NegativeBinomial() : DiscreteDistribution() , r_(1.0) , p_(0.5) { setName( "NegativeBinomial" ); // We set the dimension of the NegativeBinomial distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ NegativeBinomial::NegativeBinomial(const Scalar r, const Scalar p) : DiscreteDistribution() , r_(r) , p_(p) { setName( "NegativeBinomial" ); // We set the dimension of the NegativeBinomial distribution setR(r); setP(p); setDimension( 1 ); computeRange(); } /* Comparison operator */ Bool NegativeBinomial::operator ==(const NegativeBinomial & other) const { if (this == &other) return true; return (r_ == other.r_) && (p_ == other.p_); } Bool NegativeBinomial::equals(const DistributionImplementation & other) const { const NegativeBinomial* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String NegativeBinomial::__repr__() const { OSS oss; oss << "class=" << NegativeBinomial::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " r=" << r_ << " p=" << p_; return oss; } String NegativeBinomial::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(r = " << r_ << ", p = " << p_ << ")"; return oss; } /* Virtual constructor */ NegativeBinomial * NegativeBinomial::clone() const { return new NegativeBinomial(*this); } /* Get one realization of the distribution */ Point NegativeBinomial::getRealization() const { return Point(1, DistFunc::rPoisson(DistFunc::rGamma(r_) * p_ / (1.0 - p_))); } /* Get the PDF of the distribution */ Scalar NegativeBinomial::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return 0.0; return std::exp(SpecFunc::LnGamma(k + r_) - SpecFunc::LnGamma(r_) - SpecFunc::LnGamma(k + 1.0) + k * std::log(p_) + r_ * log1p(-p_)); } /* Get the CDF of the distribution */ Scalar NegativeBinomial::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 0.0; if (p_ <= 0.5) return DistFunc::pBeta(r_, floor(k) + 1, 1.0 - p_, false); return DistFunc::pBeta(floor(k) + 1, r_, p_, true); } Scalar NegativeBinomial::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 1.0; // Complementary relation for incomplete regularized Beta function: I(a, b, x) = 1 - I(b, a, 1-x) if (p_ <= 0.5) return DistFunc::pBeta(r_, floor(k) + 1, 1.0 - p_, true); return DistFunc::pBeta(floor(k) + 1, r_, p_, false); } /* Get the PDF gradient of the distribution */ Point NegativeBinomial::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; Point pdfGradient(1, 0.0); if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return pdfGradient; throw NotYetImplementedException(HERE) << "In NegativeBinomial::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point NegativeBinomial::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return Point(1, 0.0); throw NotYetImplementedException(HERE) << "In NegativeBinomial::computeCDFGradient(const Point & point) const"; } /* Compute the mean of the distribution */ void NegativeBinomial::computeMean() const { mean_ = Point(1, r_ * p_ / (1.0 - p_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point NegativeBinomial::getStandardDeviation() const { return Point(1, std::sqrt(r_ * p_) / (1.0 - p_)); } /* Get the skewness of the distribution */ Point NegativeBinomial::getSkewness() const { return Point(1, (1.0 + p_) / std::sqrt(p_ * r_)); } /* Get the kurtosis of the distribution */ Point NegativeBinomial::getKurtosis() const { return Point(1, 3.0 + 6.0 / r_ + std::pow(1.0 - p_, 2.0) / (p_ * r_)); } /* Compute the covariance of the distribution */ void NegativeBinomial::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = r_ * p_ / std::pow(1.0 - p_, 2.0); isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample NegativeBinomial::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 0.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (std::min(floor(interval.getUpperBound()[0]), getRange().getUpperBound()[0])); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value accessor */ Point NegativeBinomial::getParameter() const { Point point(2); point[0] = r_; point[1] = p_; return point; } void NegativeBinomial::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = NegativeBinomial(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description NegativeBinomial::getParameterDescription() const { Description description(2); description[0] = "r"; description[1] = "p"; return description; } /* P accessor */ void NegativeBinomial::setP(const Scalar p) { if ((p <= 0.0) || (p >= 1.0)) throw InvalidArgumentException(HERE) << "Error: p must be in (0, 1), here p=" << p; if (p != p_) { p_ = p; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* P accessor */ Scalar NegativeBinomial::getP() const { return p_; } /* N accessor */ void NegativeBinomial::setR(const Scalar r) { if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "Error: r must be > 0, here r=" << r; if (r != r_) { r_ = r; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* N accessor */ Scalar NegativeBinomial::getR() const { return r_; } /* Compute the numerical range of the distribution given the parameters values */ void NegativeBinomial::computeRange() { const Point lowerBound(1, 0.0); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get the quantile of the distribution */ Scalar NegativeBinomial::computeScalarQuantile(const Scalar prob, const Bool tail) const { LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, prob=" << prob << ", tail=" << (tail ? "true" : "false")); if (prob <= 0.0) return (tail ? getRange().getUpperBound()[0] : 0.0); if (prob >= 1.0) return (tail ? 0.0 : getRange().getUpperBound()[0]); // Initialization by the Cornish-Fisher expansion Scalar qNorm = DistFunc::qNormal(prob, tail); Scalar gamma1 = getSkewness()[0]; Scalar gamma2 = getKurtosis()[0] - 3.0; Scalar quantile = round(getMean()[0] + getStandardDeviation()[0] * (qNorm + (qNorm * qNorm - 1.0) * gamma1 / 6.0 + qNorm * (qNorm * qNorm - 3.0) * gamma2 / 24.0 - qNorm * (2.0 * qNorm * qNorm - 5.0) * gamma1 * gamma1 / 36.0)); if (quantile < 0.0) quantile = 0.0; Scalar cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, Cornish-Fisher estimate=" << quantile << ", cdf=" << cdf); Scalar oldCDF = cdf; const Scalar step = tail ? -1.0 : 1.0; while (cdf >= prob) { quantile -= step; oldCDF = cdf; cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, backward search, quantile=" << quantile << ", cdf=" << cdf); } if (cdf < oldCDF) { quantile += step; LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, final quantile=" << quantile); return quantile; } while (cdf < prob) { quantile += step; oldCDF = cdf; cdf = tail ? computeComplementaryCDF(quantile) : computeCDF(quantile); LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, forward search, quantile=" << quantile << ", cdf=" << cdf); } LOGDEBUG(OSS() << "in NegativeBinomial::computeScalarQuantile, final quantile=" << quantile); return quantile; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex NegativeBinomial::computeCharacteristicFunction(const Scalar x) const { const Complex value((1.0 - p_) / (1.0 - p_ * std::exp(Complex(0.0, x)))); return std::pow(value, r_); } Complex NegativeBinomial::computeLogCharacteristicFunction(const Scalar x) const { const Complex value((1.0 - p_) / (1.0 - p_ * std::exp(Complex(0.0, x)))); return Complex(r_) * std::log(value); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex NegativeBinomial::computeGeneratingFunction(const Complex & z) const { const Complex value((1.0 - p_) / (1.0 - p_ * z)); return std::pow(value, r_); } Complex NegativeBinomial::computeLogGeneratingFunction(const Complex & z) const { const Complex value((1.0 - p_) / (1.0 - p_ * z)); return Complex(r_) * std::log(value); } /* Method save() stores the object through the StorageManager */ void NegativeBinomial::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "r_", r_ ); adv.saveAttribute( "p_", p_ ); } /* Method load() reloads the object from the StorageManager */ void NegativeBinomial::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "r_", r_ ); adv.loadAttribute( "p_", p_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NegativeBinomialFactory.cxx000066400000000000000000000136671307543307100272520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for NegativeBinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/NegativeBinomialFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Brent.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NegativeBinomialFactory); static const Factory Factory_NegativeBinomialFactory; /* Default constructor */ NegativeBinomialFactory::NegativeBinomialFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ NegativeBinomialFactory * NegativeBinomialFactory::clone() const { return new NegativeBinomialFactory(*this); } /* Here is the interface that all derived class must implement */ struct NegativeBinomialFactoryParameterConstraint { /** Constructor from a sample and a derivative factor estimate */ NegativeBinomialFactoryParameterConstraint(const Sample & sample, const Scalar mean): sample_(sample), mean_(mean) { // Nothing to do }; Point computeConstraint(const Point & parameter) const { const Scalar r = parameter[0]; if (!(r > 0.0)) throw InvalidArgumentException(HERE) << "Error: the r parameter must be positive."; const UnsignedInteger size = sample_.getSize(); /* \sum_{i=1}^N \psi(x_i + r) */ Scalar sumPsi = 0.0; for (UnsignedInteger i = 0; i < size; ++i) sumPsi += SpecFunc::Psi(sample_[i][0] + r); const Scalar value = sumPsi + size * (std::log(r / (r + mean_)) - SpecFunc::Psi(r)); return Point(1, value); } // The data const Sample & sample_; // Mean value Scalar mean_; }; NegativeBinomialFactory::Implementation NegativeBinomialFactory::build(const Sample & sample) const { return buildAsNegativeBinomial(sample).clone(); } NegativeBinomialFactory::Implementation NegativeBinomialFactory::build(const Point & parameters) const { return buildAsNegativeBinomial(parameters).clone(); } NegativeBinomialFactory::Implementation NegativeBinomialFactory::build() const { return buildAsNegativeBinomial().clone(); } NegativeBinomial NegativeBinomialFactory::buildAsNegativeBinomial(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a NegativeBinomial distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a NegativeBinomial distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); Scalar mean = 0.0; Scalar var = 0.0; const Scalar supportEpsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = sample[i][0]; const int iX(static_cast(round(x))); // The sample must be made of nonnegative integral values if (std::abs(x - iX) > supportEpsilon || (iX < 0)) throw InvalidArgumentException(HERE) << "Error: can build a NegativeBinomial distribution only from a sample made of nonnegative integers, here x=" << x; var = i * var / (i + 1.0) + (1.0 - 1.0 / (i + 1.0)) * (mean - x) * (mean - x) / (i + 1.0); mean = (x + i * mean) / (i + 1.0); } // Build the constraint NegativeBinomialFactoryParameterConstraint constraint(sample, mean); const Function f(bindMethod(constraint, &NegativeBinomialFactoryParameterConstraint::computeConstraint, 1, 1)); // Find a bracketing interval using the moment estimate Scalar a = 1.0; Scalar b = 2.0; // Try to improve the starting point of the bracketing using the moment estimate of r if (var > mean) { const Scalar rMoment = mean * mean / (var - mean); a = 0.5 * rMoment; b = 2.0 * rMoment; } Scalar fA = f(Point(1, a))[0]; Scalar fB = f(Point(1, b))[0]; // While f has the same sign at the two bounds, update the interval while ((fA * fB > 0.0)) { a = 0.5 * a; fA = f(Point(1, a))[0]; if (fA * fB <= 0.0) break; b = 2.0 * b; fB = f(Point(1, b))[0]; } // Solve the constraint equation Brent solver(ResourceMap::GetAsScalar("NegativeBinomialFactory-AbsolutePrecision"), ResourceMap::GetAsScalar("NegativeBinomialFactory-RelativePrecision"), ResourceMap::GetAsScalar("NegativeBinomialFactory-ResidualPrecision"), ResourceMap::GetAsUnsignedInteger("NegativeBinomialFactory-MaximumIteration")); // R estimate const Scalar r = solver.solve(f, 0.0, a, b, fA, fB); // Corresponding p estimate const Scalar p = 1.0 / (r / mean + 1.0); NegativeBinomial result(r, p); result.setDescription(sample.getDescription()); return result; } NegativeBinomial NegativeBinomialFactory::buildAsNegativeBinomial(const Point & parameters) const { try { NegativeBinomial distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a NegativeBinomial distribution from the given parameters"; } } NegativeBinomial NegativeBinomialFactory::buildAsNegativeBinomial() const { return NegativeBinomial(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NonCentralChiSquare.cxx000066400000000000000000000241731307543307100263470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NonCentralChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NonCentralChiSquare.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NonCentralChiSquare); static const Factory Factory_NonCentralChiSquare; /* Default constructor */ NonCentralChiSquare::NonCentralChiSquare(const Scalar nu, const Scalar lambda) : ContinuousDistribution() , nu_(0.0) , lambda_(0.0) , maximumIteration_(ResourceMap::GetAsUnsignedInteger("DistFunc-MaximumIteration")) { setName("NonCentralChiSquare"); // This call set also the range. setNuLambda(nu, lambda); setDimension(1); } /* Comparison operator */ Bool NonCentralChiSquare::operator ==(const NonCentralChiSquare & other) const { if (this == &other) return true; return (nu_ == other.nu_) && (lambda_ == other.lambda_); } Bool NonCentralChiSquare::equals(const DistributionImplementation & other) const { const NonCentralChiSquare* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String NonCentralChiSquare::__repr__() const { OSS oss(true); oss << "class=" << NonCentralChiSquare::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_ << " lambda=" << lambda_; return oss; } String NonCentralChiSquare::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(nu = " << nu_ << ", lambda = " << lambda_ << ")"; return oss; } /* Virtual constructor */ NonCentralChiSquare * NonCentralChiSquare::clone() const { return new NonCentralChiSquare(*this); } /* Get one realization of the distribution */ Point NonCentralChiSquare::getRealization() const { return DistFunc::rNonCentralChiSquare(nu_, lambda_, 1); } /* Get the PDF of the distribution */ Scalar NonCentralChiSquare::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return DistFunc::dNonCentralChiSquare(nu_, lambda_, point[0], pdfEpsilon_, maximumIteration_); } /* Get the CDF of the distribution */ Scalar NonCentralChiSquare::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= 0.0) return 0.0; return DistFunc::pNonCentralChiSquare(nu_, lambda_, point[0], false, cdfEpsilon_, maximumIteration_); } /** Get the PDFGradient of the distribution */ Point NonCentralChiSquare::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar eps = std::pow(pdfEpsilon_, 1.0 / 3.0); Point pdfGradient(2); pdfGradient[0] = (DistFunc::dNonCentralChiSquare(nu_ + eps, lambda_, point[0], pdfEpsilon_, maximumIteration_) - DistFunc::dNonCentralChiSquare(nu_ - eps, lambda_, point[0], pdfEpsilon_, maximumIteration_)) / (2.0 * eps); pdfGradient[1] = (DistFunc::dNonCentralChiSquare(nu_, lambda_ + eps, point[0], pdfEpsilon_, maximumIteration_) - DistFunc::dNonCentralChiSquare(nu_, lambda_ - eps, point[0], pdfEpsilon_, maximumIteration_)) / (2.0 * eps); return pdfGradient; } /** Get the CDFGradient of the distribution */ Point NonCentralChiSquare::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); Point cdfGradient(2); cdfGradient[0] = (DistFunc::pNonCentralChiSquare(nu_ + eps, lambda_, point[0], false, cdfEpsilon_, maximumIteration_) - DistFunc::pNonCentralChiSquare(nu_ - eps, lambda_, point[0], false, cdfEpsilon_, maximumIteration_)) / (2.0 * eps); cdfGradient[1] = (DistFunc::pNonCentralChiSquare(nu_, lambda_ + eps, point[0], false, cdfEpsilon_, maximumIteration_) - DistFunc::pNonCentralChiSquare(nu_, lambda_ - eps, point[0], false, cdfEpsilon_, maximumIteration_)) / (2.0 * eps); return cdfGradient; } /* Compute the mean of the distribution */ void NonCentralChiSquare::computeMean() const { mean_ = Point(1, nu_ + lambda_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point NonCentralChiSquare::getStandardDeviation() const { return Point(1, std::sqrt(2.0 * (nu_ + 2.0 * lambda_))); } /* Get the skewness of the distribution */ Point NonCentralChiSquare::getSkewness() const { if (nu_ == 0.0) throw NotDefinedException(HERE) << "Error: the skewness is not defined for nu=0."; if (lambda_ == 0.0) return Point(1, 2.0 * M_SQRT2 / std::sqrt(nu_)); return Point(1, (nu_ + 3.0 * lambda_) * std::pow(2.0 / (nu_ + 2.0 * lambda_), 1.5)); } /* Get the kurtosis of the distribution */ Point NonCentralChiSquare::getKurtosis() const { if (nu_ == 0.0) throw NotDefinedException(HERE) << "Error: the kurtosis is not defined for nu=0."; if (lambda_ == 0.0) return Point(1, 3.0 + 12.0 / nu_); return Point(1, 3.0 + 12.0 * (nu_ + 4.0 * lambda_) / std::pow(nu_ + 2.0 * lambda_, 2.0)); } /* Get the moments of the standardized distribution */ Point NonCentralChiSquare::getStandardMoment(const UnsignedInteger n) const { UniVariatePolynomial p(Point(1, 1.0)); Point derivativeFactor(3); derivativeFactor[0] = 1.0; derivativeFactor[1] = -4.0; derivativeFactor[2] = 4.0; for (UnsignedInteger k = 0; k < n; ++k) { Point polynomialFactor(2); polynomialFactor[0] = lambda_ + 4.0 * k + nu_; polynomialFactor[1] = -8.0 * k - 2.0 * nu_; p = p.derivate() * UniVariatePolynomial(derivativeFactor) + p * UniVariatePolynomial(polynomialFactor); } return Point(1, p.getCoefficients()[0]); } /* Compute the covariance of the distribution */ void NonCentralChiSquare::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = 2.0 * (nu_ + 2.0 * lambda_); isAlreadyComputedCovariance_ = true; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex NonCentralChiSquare::computeCharacteristicFunction(const Scalar x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex NonCentralChiSquare::computeLogCharacteristicFunction(const Scalar x) const { const Complex denominator(1.0, -2.0 * x); return Complex(0.0, lambda_ * x) / denominator - 0.5 * nu_ * std::log(denominator); } Point NonCentralChiSquare::getParameter() const { Point point(2); point[0] = nu_; point[1] = lambda_; return point; } void NonCentralChiSquare::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = NonCentralChiSquare(parameter[0], parameter[1]); setWeight(w); } Description NonCentralChiSquare::getParameterDescription() const { Description description(2); description[0] = "nu"; description[1] = "lambda"; return description; } /* Nu accessor */ void NonCentralChiSquare::setNu(const Scalar nu) { if (!(nu >= 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be strictly positive"; if (nu != nu_) { nu_ = nu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } void NonCentralChiSquare::setNuLambda(const Scalar nu, const Scalar lambda) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be positive"; if (!(lambda >= 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be nonnegative"; if ((nu != nu_) || (lambda != lambda_)) { nu_ = nu; lambda_ = lambda; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Nu accessor */ Scalar NonCentralChiSquare::getNu() const { return nu_; } /* Lambda accessor */ void NonCentralChiSquare::setLambda(const Scalar lambda) { if (!(lambda >= 0.0)) throw InvalidArgumentException(HERE) << "Lambda MUST be nonnegative"; if (lambda != lambda_) { lambda_ = lambda; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda accessor */ Scalar NonCentralChiSquare::getLambda() const { return lambda_; } /* Maximum iterations accessor */ void NonCentralChiSquare::setMaximumIteration(const UnsignedInteger maximumIteration) { maximumIteration_ = maximumIteration; } UnsignedInteger NonCentralChiSquare::getMaximumIteration() const { return maximumIteration_; } /* Method save() stores the object through the StorageManager */ void NonCentralChiSquare::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "lambda_", lambda_ ); adv.saveAttribute( "maximumIteration_", maximumIteration_ ); } /* Method load() reloads the object from the StorageManager */ void NonCentralChiSquare::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "lambda_", lambda_ ); adv.loadAttribute( "maximumIteration_", maximumIteration_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NonCentralStudent.cxx000066400000000000000000000244301307543307100261050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NonCentralStudent distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NonCentralStudent.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Brent.hxx" #include "openturns/MethodBoundEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NonCentralStudent); static const Factory Factory_NonCentralStudent; /* Default constructor */ NonCentralStudent::NonCentralStudent(const Scalar nu, const Scalar delta, const Scalar gamma) : ContinuousDistribution() , nu_(0.0) , delta_(delta) , gamma_(gamma) { setName("NonCentralStudent"); // This call set also the range. setNu(nu); setDimension(1); } /* Comparison operator */ Bool NonCentralStudent::operator ==(const NonCentralStudent & other) const { if (this == &other) return true; return (nu_ == other.nu_) && (delta_ == other.delta_) && (gamma_ == other.gamma_); } Bool NonCentralStudent::equals(const DistributionImplementation & other) const { const NonCentralStudent* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String NonCentralStudent::__repr__() const { OSS oss(true); oss << "class=" << NonCentralStudent::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_ << " delta=" << delta_ << " gamma=" << gamma_; return oss; } String NonCentralStudent::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(nu = " << nu_ << ", delta = " << delta_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ NonCentralStudent * NonCentralStudent::clone() const { return new NonCentralStudent(*this); } /* Get one realization of the distribution */ Point NonCentralStudent::getRealization() const { return Point(1, gamma_ + DistFunc::rNonCentralStudent(nu_, delta_)); } /* Get the PDF of the distribution */ Scalar NonCentralStudent::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return DistFunc::dNonCentralStudent(nu_, delta_, point[0] - gamma_); } /* Get the CDF of the distribution */ Scalar NonCentralStudent::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return DistFunc::pNonCentralStudent(nu_, delta_, point[0] - gamma_, false); } /* Get the PDFGradient of the distribution */ Point NonCentralStudent::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar eps = std::pow(pdfEpsilon_, 1.0 / 3.0); Point pdfGradient(3); pdfGradient[0] = (DistFunc::dNonCentralStudent(nu_ + eps, delta_, point[0] - gamma_) - DistFunc::dNonCentralStudent(nu_ - eps, delta_, point[0] - gamma_)) / (2.0 * eps); pdfGradient[1] = (DistFunc::dNonCentralStudent(nu_, delta_ + eps, point[0] - gamma_) - DistFunc::dNonCentralStudent(nu_, delta_ - eps, point[0] - gamma_)) / (2.0 * eps); pdfGradient[2] = (DistFunc::dNonCentralStudent(nu_, delta_, point[0] - gamma_ - eps) - DistFunc::dNonCentralStudent(nu_, delta_, point[0] - gamma_ + eps)) / (2.0 * eps); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point NonCentralStudent::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar eps = std::pow(cdfEpsilon_, 1.0 / 3.0); Point cdfGradient(3); cdfGradient[0] = (DistFunc::pNonCentralStudent(nu_ + eps, delta_, point[0] - gamma_, false) - DistFunc::pNonCentralStudent(nu_ - eps, delta_, point[0] - gamma_, false)) / (2.0 * eps); cdfGradient[1] = (DistFunc::pNonCentralStudent(nu_, delta_ + eps, point[0] - gamma_, false) - DistFunc::pNonCentralStudent(nu_, delta_ - eps, point[0] - gamma_, false)) / (2.0 * eps); cdfGradient[2] = (DistFunc::pNonCentralStudent(nu_, delta_, point[0] - gamma_ - eps, false) - DistFunc::pNonCentralStudent(nu_, delta_, point[0] - gamma_ + eps, false)) / (2.0 * eps); return cdfGradient; } /* Compute the mean of the distribution */ void NonCentralStudent::computeMean() const { if (!(nu_ > 1.0)) throw NotDefinedException(HERE) << "Error: the mean is defined only for nu > 1 for a non central Student distribution"; mean_ = Point(1, std::sqrt(0.5 * nu_) * std::exp(SpecFunc::LnGamma(0.5 * (nu_ - 1.0)) - SpecFunc::LnGamma(0.5 * nu_)) * delta_ + gamma_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point NonCentralStudent::getStandardDeviation() const { if (!(nu_ > 2.0)) throw NotDefinedException(HERE) << "Error: the standard deviation is defined only for nu > 2 for a non central Student distribution"; return Point(1, std::sqrt(getCovariance().operator()(0, 0))); } /* Get the skewness of the distribution */ Point NonCentralStudent::getSkewness() const { Scalar mup1 = getMean()[0] - gamma_; Scalar mu2 = getCovariance().operator()(0, 0); return Point(1, mup1 * (nu_ * (2.0 * nu_ - 3.0 + delta_ * delta_) / ((nu_ - 2.0) * (nu_ - 3.0)) - 2.0 * mu2) * std::pow(mu2, -1.5)); } /* Get the kurtosis of the distribution */ Point NonCentralStudent::getKurtosis() const { Scalar mup1 = getMean()[0] - gamma_; Scalar mu2 = getCovariance().operator()(0, 0); Scalar delta2 = delta_ * delta_; return Point(1, (nu_ * nu_ * (3.0 + 6.0 * delta2 + delta2 * delta2) / ((nu_ - 2.0) * (nu_ - 4.0)) - mup1 * mup1 * (nu_ * ((nu_ + 1.0) * delta2 + 3.0 * (3.0 * nu_ - 5.0)) / ((nu_ - 2.0) * (nu_ - 3.0)) - 3.0 * mu2)) * std::pow(mu2, -2.0)); } /* Get the moments of the standardized distribution */ Point NonCentralStudent::getStandardMoment(const UnsignedInteger n) const { if (n >= nu_) throw NotDefinedException(HERE) << "Error: cannot compute a standard moment of order greater or equal to the number of degrees of freedom"; UniVariatePolynomial p(Point(1, 1.0)); for (UnsignedInteger k = 0; k < n; ++k) p = p.derivate() + p.incrementDegree(1); return Point(1, p(delta_) * std::exp(0.5 * n * std::log(0.5 * nu_) + SpecFunc::LogGamma(0.5 * (nu_ - n)) - SpecFunc::LogGamma(0.5 * nu_))); } /* Get the standard representative in the parametric family, associated with the standard moments */ NonCentralStudent::Implementation NonCentralStudent::getStandardRepresentative() const { return NonCentralStudent(nu_, delta_, 0.0).clone(); } /* Compute the covariance of the distribution */ void NonCentralStudent::computeCovariance() const { if (!(nu_ > 2.0)) throw NotDefinedException(HERE) << "Error: the covariance is defined only for nu > 2 for a non central Student distribution"; covariance_ = CovarianceMatrix(1); const Scalar mup1 = getMean()[0] - gamma_; covariance_(0, 0) = nu_ / (nu_ - 2.0) * (1.0 + delta_ * delta_) - mup1 * mup1; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point NonCentralStudent::getParameter() const { Point point(3); point[0] = nu_; point[1] = delta_; point[2] = gamma_; return point; } void NonCentralStudent::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = NonCentralStudent(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description NonCentralStudent::getParameterDescription() const { Description description(3); description[0] = "nu"; description[1] = "delta"; description[2] = "gamma"; return description; } /* Nu accessor */ void NonCentralStudent::setNu(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be strictly positive"; if (nu != nu_) { nu_ = nu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Nu accessor */ Scalar NonCentralStudent::getNu() const { return nu_; } /* Delta accessor */ void NonCentralStudent::setDelta(const Scalar delta) { if (delta != delta_) { delta_ = delta; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Delta accessor */ Scalar NonCentralStudent::getDelta() const { return delta_; } /* Gamma accessor */ void NonCentralStudent::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depend on gamma computeRange(); } } /* Gamma accessor */ Scalar NonCentralStudent::getGamma() const { return gamma_; } /* Method save() stores the object through the StorageManager */ void NonCentralStudent::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "delta_", delta_ ); adv.saveAttribute( "gamma_", gamma_ ); } /* Method load() reloads the object from the StorageManager */ void NonCentralStudent::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "delta_", delta_ ); adv.loadAttribute( "gamma_", gamma_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Normal.cxx000066400000000000000000000732201307543307100237240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Normal.hxx" #include "openturns/Distribution.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Matrix.hxx" #include "openturns/MatrixImplementation.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/NormalCopula.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/GaussKronrodRule.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Normal); static const Factory Factory_Normal; /* Constructor for multiD standard normal distribution */ Normal::Normal(const UnsignedInteger dimension) : EllipticalDistribution(Point(dimension, 0.0) , Point(dimension, 1.0) , CorrelationMatrix(dimension), 1.0) , normalizationFactor_(1.0 / std::sqrt(std::pow(2.0 * M_PI, static_cast(dimension)))) , hasIndependentCopula_(true) { setName("Normal"); // Compute the range, the upper class cannot do it. computeRange(); } /* Constructor for 1D normal distribution */ Normal::Normal(const Scalar mu, const Scalar sd) : EllipticalDistribution(Point(1, mu) , Point(1, sd) , CorrelationMatrix(1) , 1.0) , normalizationFactor_(1.0 / std::sqrt(2 * M_PI)) , hasIndependentCopula_(true) { setName("Normal"); // Compute the range, the upper class cannot do it. computeRange(); } /* Constructor for multiD normal distribution */ Normal::Normal(const Point & mean, const Point & sigma, const CorrelationMatrix & R) : EllipticalDistribution(mean , sigma , R , 1.0) , normalizationFactor_(1.0 / std::sqrt(std::pow(2.0 * M_PI, static_cast(mean.getDimension())))) , hasIndependentCopula_(false) { setName("Normal"); // Compute the range, the upper class cannot do it. computeRange(); checkIndependentCopula(); } Normal::Normal(const Point & mean, const CovarianceMatrix & C) : EllipticalDistribution(mean , Point(mean.getDimension(), 1.0) , IdentityMatrix(mean.getDimension()) , 1.0) , normalizationFactor_(1.0 / std::sqrt(std::pow(2.0 * M_PI, static_cast(mean.getDimension())))) , hasIndependentCopula_(false) { setName("Normal"); UnsignedInteger dimension = mean.getDimension(); if (C.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the mean vector and the covariance matrix have incompatible dimensions"; if (!const_cast(&C)->isPositiveDefinite()) throw InvalidArgumentException(HERE) << "Error: the covariance matrix is not positive definite"; Point sigma(dimension); CorrelationMatrix R(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { sigma[i] = std::sqrt(C(i, i)); for (UnsignedInteger j = 0; j < i; ++j) R(i, j) = C(i, j) / (sigma[i] * sigma[j]); } // To check that the values are > 0. This call also compute the range. setSigma(sigma); setCorrelation(R); checkIndependentCopula(); } /* Comparison operator */ Bool Normal::operator ==(const Normal & other) const { if (this == &other) return true; return EllipticalDistribution::equals(other); } /* String converter */ String Normal::__repr__() const { OSS oss; oss << "class=" << Normal::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " mean=" << mean_ << " sigma=" << sigma_ << " correlationMatrix=" << R_.__repr__(); return oss; } String Normal::__str__(const String & offset) const { OSS oss; oss << offset << getClassName(); if (getDimension() == 1) oss << "(mu = " << getMean()[0] << ", sigma = " << getSigma()[0] << ")"; else oss << "(mu = " << getMean().__str__() << ", sigma = " << getSigma().__str__() << ", R = " << getCorrelation().__str__(offset) << ")"; return oss; } /* Virtual constructor */ Normal * Normal::clone() const { return new Normal(*this); } /* Get one realization of the distribution */ Point Normal::getRealization() const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return Point(1, mean_[0] + sigma_[0] * DistFunc::rNormal()); Point value(dimension); // First, a realization of independant standard coordinates for (UnsignedInteger i = 0; i < dimension; i++) value[i] = DistFunc::rNormal(); // Then, transform the independant standard coordinates into the needed ones */ if (hasIndependentCopula_) { for (UnsignedInteger i = 0; i < dimension; i++) { value[i] *= sigma_[i]; value[i] += mean_[i]; } return value; } // General case return cholesky_ * value + mean_; } Sample Normal::getSample(const UnsignedInteger size) const { const UnsignedInteger dimension = getDimension(); Sample result(size, dimension); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j) result[i][j] = DistFunc::rNormal(); if (hasIndependentCopula_) result *= sigma_; else result *= cholesky_; result += mean_; result.setName(getName()); result.setDescription(getDescription()); return result; } /* Compute the density generator of the ellipticalal generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)S^(-1)(x-mu)) */ Scalar Normal::computeDensityGenerator(const Scalar betaSquare) const { return normalizationFactor_ * std::exp(-0.5 * betaSquare); } /* Compute the derivative of the density generator */ Scalar Normal::computeDensityGeneratorDerivative(const Scalar betaSquare) const { return -0.5 * normalizationFactor_ * std::exp(-0.5 * betaSquare); } /* Compute the seconde derivative of the density generator */ Scalar Normal::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const { return 0.25 * normalizationFactor_ * std::exp(-0.5 * betaSquare); } /* Get the CDF of the distribution */ Scalar Normal::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has a dimension incompatible with the distribution."; // Special case for dimension 1 if (dimension == 1) return DistFunc::pNormal((point[0] - mean_[0]) / sigma_[0]); // Normalize the point to use the standard form of the multivariate normal distribution Point u(normalize(point)); /* Special treatment for independent components */ if (hasIndependentCopula_) { Scalar value = DistFunc::pNormal(u[0]); for (UnsignedInteger i = 1; i < dimension; ++i) value *= DistFunc::pNormal(u[i]); return value; } // General multivariate case const Point lowerBounds(getRange().getLowerBound()); const Point upperBounds(getRange().getUpperBound()); // Indices of the components to take into account in the computation Indices toKeep(0); Point reducedPoint(0); for (UnsignedInteger k = 0; k < dimension; ++ k) { const Scalar xK = point[k]; // Early exit if one component is less than its corresponding range lower bound if (xK <= lowerBounds[k]) return 0.0; // Keep only the indices for which xK is less than its corresponding range upper bound // Marginalize the others if (xK < upperBounds[k]) { toKeep.add(k); reducedPoint.add(xK); } } // k // The point has all its components greater than the corresponding range upper bound LOGINFO(OSS() << "In Normal::computeCDF, point=" << point << ", toKeep=" << toKeep << ", dimension=" << dimension << ", reducedPoint=" << reducedPoint); if (toKeep.getSize() == 0) return 1.0; // The point has some components greater than the corresponding range upper bound if (toKeep.getSize() != dimension) return getMarginal(toKeep)->computeCDF(reducedPoint); /* General case */ // For the bidimensional case, use specialized high precision routine if (dimension == 2) return DistFunc::pNormal2D(u[0], u[1], R_(0, 1)); // For the tridimensional case, use specialized high precision routine if (dimension == 3) return DistFunc::pNormal3D(u[0], u[1], u[2], R_(0, 1), R_(0, 2), R_(1, 2)); // For moderate dimension, use a Gauss-Kronrod integration. We use a non-adaptive // integration based on Kronrod's nodes only. if (dimension <= ResourceMap::GetAsUnsignedInteger("Normal-SmallDimension")) { GaussKronrodRule rule; switch (dimension) { case 4: rule = GaussKronrodRule::G15K31; break; case 5: rule = GaussKronrodRule::G11K23; break; case 6: rule = GaussKronrodRule::G7K15; break; default: LOGWARN(OSS() << "The dimension=" << dimension << " of the Normal distribution is large for Gauss quadrature! Expect a high computational cost and a reduced accuracy for CDF evaluation."); rule = GaussKronrodRule::G7K15; break; } Point kronrodWeights(1, rule.getZeroKronrodWeight()); kronrodWeights.add(rule.getOtherKronrodWeights()); kronrodWeights.add(rule.getOtherKronrodWeights()); Point kronrodNodes(1, 0.0); kronrodNodes.add(rule.getOtherKronrodNodes()); kronrodNodes.add(rule.getOtherKronrodNodes() * (-1.0)); // Perform the integration const UnsignedInteger marginalNodesNumber = kronrodNodes.getDimension(); const UnsignedInteger size = static_cast< UnsignedInteger >(round(std::pow(1.0 * marginalNodesNumber, static_cast(dimension)))); Indices indices(dimension, 0); Sample allNodes(size, dimension); Point allWeights(size); for (UnsignedInteger linearIndex = 0; linearIndex < size; ++linearIndex) { Point node(dimension); Scalar weight = 1.0; for (UnsignedInteger j = 0; j < dimension; ++j) { const UnsignedInteger indiceJ = indices[j]; const Scalar delta = 0.5 * (reducedPoint[j] - lowerBounds[j]); node[j] = lowerBounds[j] + delta * (1.0 + kronrodNodes[indiceJ]); weight *= delta * kronrodWeights[indiceJ]; } allNodes[linearIndex] = node; allWeights[linearIndex] = weight; /* Update the indices */ ++indices[0]; /* Propagate the remainders */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j + 1] += (indices[j] == marginalNodesNumber); /* Correction of the indices. The last index cannot overflow. */ for (UnsignedInteger j = 0; j < dimension - 1; ++j) indices[j] = indices[j] % marginalNodesNumber; } // Loop over the n-D nodes // Parallel evalusation of the PDF const Sample allPDF(computePDF(allNodes)); // Some black magic to use BLAS on the internal representation of samples const Scalar probability = dot(allWeights, allPDF.getImplementation()->getData()); return probability; } // For very large dimension, use a MonteCarlo algorithm LOGWARN(OSS() << "Warning, in Normal::computeCDF(), the dimension is very high. We will use a Monte Carlo method for the computation with a relative precision of 0.1% at 99% confidence level and a maximum of " << 10 * ResourceMap::GetAsUnsignedInteger( "Normal-MaximumNumberOfPoints" ) << " realizations. Expect a long running time and a poor accuracy for small values of the CDF..."); RandomGeneratorState initialState(RandomGenerator::GetState()); RandomGenerator::SetSeed(ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" )); Scalar value = 0.0; Scalar variance = 0.0; Scalar a99 = DistFunc::qNormal(0.995); UnsignedInteger outerMax = 10 * ResourceMap::GetAsUnsignedInteger( "Normal-MaximumNumberOfPoints" ) / ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" ); Scalar precision = 0.0; for (UnsignedInteger indexOuter = 0; indexOuter < outerMax; ++indexOuter) { Scalar valueBlock = 0.0; Scalar varianceBlock = 0.0; for (UnsignedInteger indexSample = 0; indexSample < ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" ); ++indexSample) { Bool inside = true; Point realization(getRealization()); // Check if the realization is in the integration domain for (UnsignedInteger i = 0; i < dimension; ++i) { inside = realization[i] <= point[i]; if (!inside) break; } // ind value is 1.0 if the realization is inside of the integration domain, 0.0 else. Scalar ind = inside; Scalar norm = 1.0 / (indexSample + 1.0); varianceBlock = (varianceBlock * indexSample + (1.0 - norm) * (valueBlock - ind) * (valueBlock - ind)) * norm; valueBlock = (valueBlock * indexSample + ind) * norm; } Scalar norm = 1.0 / (indexOuter + 1.0); variance = (varianceBlock + indexOuter * variance + (1.0 - norm) * (value - valueBlock) * (value - valueBlock)) * norm; value = (value * indexOuter + valueBlock) * norm; // Quick return for value = 1 if ((value >= 1.0 - ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")) && (variance == 0.0)) return 1.0; precision = a99 * std::sqrt(variance / (indexOuter + 1.0) / ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" )); if (precision < ResourceMap::GetAsScalar( "Normal-MinimumCDFEpsilon" ) * value) return value; // 0.1 * ((1000 * indexOuter) / outerMax) is to print percents with one figure after the decimal point LOGINFO(OSS() << 0.1 * ((1000 * indexOuter) / outerMax) << "% value=" << value << " absolute precision(99%)=" << precision << " relative precision(99%)=" << ((value > 0.0) ? precision / value : -1.0)); } RandomGenerator::SetState(initialState); cdfEpsilon_ = precision; return value; } // computeCDF /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Normal::computeCharacteristicFunction(const Scalar x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex Normal::computeCharacteristicFunction(const Point & x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex Normal::computeLogCharacteristicFunction(const Scalar x) const { return Complex(-0.5 * sigma_[0] * sigma_[0] * x * x, mean_[0] * x); } Complex Normal::computeLogCharacteristicFunction(const Point & x) const { if (x.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << x.getDimension(); return Complex(-0.5 * dot(x, getCovariance() * x), dot(x, mean_)); } /* Compute the probability content of an interval */ Scalar Normal::computeProbability(const Interval & interval) const { if (interval.isNumericallyEmpty()) return 0.0; const UnsignedInteger dimension = getDimension(); // The generic implementation provided by the DistributionImplementation upper class is more accurate than the generic implementation provided by the ContinuousDistribution upper class for dimension = 1 if (dimension == 1) return DistributionImplementation::computeProbability(interval); // Decompose and normalize the interval Point lower(normalize(interval.getLowerBound())); Point upper(normalize(interval.getUpperBound())); Interval::BoolCollection finiteLower(interval.getFiniteLowerBound()); Interval::BoolCollection finiteUpper(interval.getFiniteUpperBound()); /* Special treatment for independent components */ if (hasIndependentCopula_) { Scalar lowerCDF = 0.0; if (finiteLower[0]) lowerCDF = DistFunc::pNormal(lower[0]); Scalar upperCDF = 1.0; if (finiteUpper[0]) upperCDF = DistFunc::pNormal(upper[0]); Scalar value = upperCDF - lowerCDF; for (UnsignedInteger i = 1; i < dimension; ++i) { lowerCDF = 0.0; if (finiteLower[i]) lowerCDF = DistFunc::pNormal(lower[i]); upperCDF = 1.0; if (finiteUpper[i]) upperCDF = DistFunc::pNormal(upper[i]); value *= upperCDF - lowerCDF; } return value; } /* General case */ // For moderate dimension, use a Gauss-Legendre integration if (dimension <= ResourceMap::GetAsUnsignedInteger("Normal-SmallDimension")) { // Reduce the default integration point number for CDF computation in the range 3 < dimension <= Normal-SmallDimension const UnsignedInteger maximumNumber = static_cast< UnsignedInteger > (round(std::pow(ResourceMap::GetAsUnsignedInteger( "Normal-MaximumNumberOfPoints" ), 1.0 / getDimension()))); const UnsignedInteger candidateNumber = ResourceMap::GetAsUnsignedInteger( "Normal-MarginalIntegrationNodesNumber" ); if (candidateNumber > maximumNumber) LOGWARN(OSS() << "Warning! The requested number of marginal integration nodes=" << candidateNumber << " would lead to an excessive number of PDF evaluations. It has been reduced to " << maximumNumber << ". You should increase the ResourceMap key \"Normal-MaximumNumberOfPoints\""); setIntegrationNodesNumber(std::min(maximumNumber, candidateNumber)); return ContinuousDistribution::computeProbability(interval); } // For very large dimension, use a MonteCarlo algorithm LOGWARN(OSS() << "Warning, in Normal::computeProbability(), the dimension is very high. We will use a Monte Carlo method for the computation with a relative precision of 0.1% at 99% confidence level and a maximum of " << 10 * ResourceMap::GetAsUnsignedInteger( "Normal-MaximumNumberOfPoints" ) << " realizations. Expect a long running time and a poor accuracy for low values of the CDF..."); Scalar value = 0.0; Scalar variance = 0.0; Scalar a99 = DistFunc::qNormal(0.995); UnsignedInteger outerMax = 10 * ResourceMap::GetAsUnsignedInteger( "Normal-MaximumNumberOfPoints" ) / ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" ); Scalar precision = 0.0; for (UnsignedInteger indexOuter = 0; indexOuter < outerMax; ++indexOuter) { Scalar valueBlock = 0.0; Scalar varianceBlock = 0.0; for (UnsignedInteger indexSample = 0; indexSample < ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" ); ++indexSample) { // ind value is 1.0 if the realization is inside of the integration domain, 0.0 else. Scalar ind = interval.numericallyContains(getRealization()); Scalar norm = 1.0 / (indexSample + 1.0); varianceBlock = (varianceBlock * indexSample + (1.0 - norm) * (valueBlock - ind) * (valueBlock - ind)) * norm; valueBlock = (valueBlock * indexSample + ind) * norm; } Scalar norm = 1.0 / (indexOuter + 1.0); variance = (varianceBlock + indexOuter * variance + (1.0 - norm) * (value - valueBlock) * (value - valueBlock)) * norm; value = (value * indexOuter + valueBlock) * norm; // Quick return for value = 1 if ((value >= 1.0 - ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")) && (variance == 0.0)) return 1.0; precision = a99 * std::sqrt(variance / (indexOuter + 1.0) / ResourceMap::GetAsUnsignedInteger( "Normal-MinimumNumberOfPoints" )); if (precision < ResourceMap::GetAsScalar( "Normal-MinimumCDFEpsilon" ) * value) return value; // 0.1 * ((1000 * indexOuter) / outerMax) is to print percents with one figure after the decimal point LOGINFO(OSS() << 0.1 * ((1000 * indexOuter) / outerMax) << "% value=" << value << " absolute precision(99%)=" << precision << " relative precision(99%)=" << ((value > 0.0) ? precision / value : -1.0)); } return value; } /* Get the CDF gradient of the distribution */ Point Normal::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); Point gradientCDF(2 * dimension); if (dimension == 1) { Scalar pdf = computePDF(point); gradientCDF[0] = -pdf; gradientCDF[1] = -pdf * (point[0] - mean_[0]) / sigma_[0]; return gradientCDF; } // To be implemented return gradientCDF; } /* Compute the scalar quantile of the 1D normal distribution */ Scalar Normal::computeScalarQuantile(const Scalar prob, const Bool tail) const { return mean_[0] + sigma_[0] * DistFunc::qNormal(prob, tail); } // computeScalarQuantile /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) For Normal distribution, the conditional distribution is also Normal, with mean and covariance such as: mean_cond = mean(x) + cov(x, y).cov(y, y)^(-1)(y - mean(y)) cov_cond = cov(x, x) - cov(x, y).cov(y, y)^(-1)cov(x, y) This expression simplifies if we use the inverse of the Cholesky factor of the covariance matrix. See [Lebrun, Dutfoy, "Rosenblatt and Nataf transformation"] */ Scalar Normal::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return Distribution(getMarginal(conditioningDimension)).computePDF(x); // General case Scalar meanRos = 0.0; const Scalar sigmaRos = 1.0 / inverseCholesky_(conditioningDimension, conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); } meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; return std::exp(-0.5 * std::pow(x - meanRos, 2.0) / (sigmaRos * sigmaRos)) / (sigmaRos * std::sqrt(2.0 * M_PI)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Normal::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return Distribution(getMarginal(conditioningDimension)).computeCDF(x); // General case Scalar meanRos = 0.0; const Scalar sigmaRos = 1.0 / inverseCholesky_(conditioningDimension, conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); } meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; return DistFunc::pNormal((x - meanRos) / sigmaRos); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar Normal::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return mean_[conditioningDimension] + sigma_[conditioningDimension] * DistFunc::qNormal(q); // General case Scalar meanRos = 0.0; const Scalar sigmaRos = 1.0 / inverseCholesky_(conditioningDimension, conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) { meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); } meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; if (q == 0.0) return meanRos - 0.5 * sigmaRos * std::sqrt(4.0 * (std::log(SpecFunc::ISQRT2PI / sigmaRos) - SpecFunc::LogMinScalar)); if (q == 1.0) return meanRos + 0.5 * sigmaRos * std::sqrt(4.0 * (std::log(SpecFunc::ISQRT2PI / sigmaRos) - SpecFunc::LogMinScalar)); return meanRos + sigmaRos * DistFunc::qNormal(q); } /* Get the i-th marginal distribution */ Normal::Implementation Normal::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case CorrelationMatrix R(1); Point sigma(1, sigma_[i]); Point mean(1, mean_[i]); return new Normal(mean, sigma, R); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Normal::Implementation Normal::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger outputDimension = indices.getSize(); CorrelationMatrix R(outputDimension); Point sigma(outputDimension); Point mean(outputDimension); // Extract the correlation matrix, the marginal standard deviations and means for (UnsignedInteger i = 0; i < outputDimension; ++i) { const UnsignedInteger index_i = indices[i]; sigma[i] = sigma_[index_i]; mean[i] = mean_[index_i]; for (UnsignedInteger j = 0; j <= i; ++j) { R(i, j) = R_(index_i, indices[j]); } } return new Normal(mean, sigma, R); } // getMarginal(Indices) /* Get the skewness of the distribution */ Point Normal::getSkewness() const { return Point(getDimension(), 0.0); } /* Get the moments of the standardized distribution */ Point Normal::getStandardMoment(const UnsignedInteger n) const { if (n % 2 == 1) return Point(1, 0.0); Scalar moment = 1.0; for (UnsignedInteger i = 1; i < n / 2; ++i) moment *= 2.0 * i + 1.0; return Point(1, moment); } /* Get the standard representative in the parametric family, associated with the standard moments */ Normal::Implementation Normal::getStandardRepresentative() const { return Normal(0.0, 1.0).clone(); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Normal::getRoughness() const { // 0.2820947917738781434740398 = 1 / (2 * sqrt(Pi)) return 0.2820947917738781434740398 / getSigma()[0]; } /* Get the kurtosis of the distribution */ Point Normal::getKurtosis() const { return Point(getDimension(), 3.0); } /* Get the copula of the distribution */ Normal::Implementation Normal::getCopula() const { return new NormalCopula(R_); } /* Compute the radial distribution CDF */ Scalar Normal::computeRadialDistributionCDF(const Scalar radius, const Bool tail) const { return tail ? ChiSquare(getDimension()).computeComplementaryCDF(radius * radius) : ChiSquare(getDimension()).computeCDF(radius * radius); } /* Correlation matrix accessor */ void Normal::setCorrelation(const CorrelationMatrix & R) { // Perform checks at the upper level // This call set also the range EllipticalDistribution::setCorrelation(R); // Then check for independence checkIndependentCopula(); } /* Compute the numerical range of the distribution given the parameters values */ void Normal::computeRange() { const UnsignedInteger dimension = getDimension(); const Scalar qNorm = DistFunc::qNormal(cdfEpsilon_); // qNorm is negative as cdfEpsilon_ < 0 setRange(Interval(mean_ + qNorm * sigma_, mean_ - qNorm * sigma_, Interval::BoolCollection(dimension, false), Interval::BoolCollection(dimension, false))); } /* Tell if the distribution has independent copula */ Bool Normal::hasIndependentCopula() const { return hasIndependentCopula_; } /* Check if the distribution has independent copula */ void Normal::checkIndependentCopula() { hasIndependentCopula_ = true; const UnsignedInteger dimension = getDimension(); if (dimension == 1) return; for (UnsignedInteger i = 0; i < dimension; i++) { for (UnsignedInteger j = 0; j < i; j++) { if (R_(i, j) != 0.0) { hasIndependentCopula_ = false; return; } } } } // checkIndependentCopula /* Method save() stores the object through the StorageManager */ void Normal::save(Advocate & adv) const { EllipticalDistribution::save(adv); adv.saveAttribute( "normalizationFactor_duplicate", normalizationFactor_ ); adv.saveAttribute( "hasIndependentCopula_", hasIndependentCopula_ ); } /* Method load() reloads the object from the StorageManager */ void Normal::load(Advocate & adv) { EllipticalDistribution::load(adv); adv.loadAttribute( "normalizationFactor_duplicate", normalizationFactor_ ); adv.loadAttribute( "hasIndependentCopula_", hasIndependentCopula_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Normal2DCDF.cxx000066400000000000000000000171061307543307100244300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the CDF computation for a bi-dimensional * Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Normal2DCDF.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /* Translated in C++ from Alan Genz's matlab routine bvnl.m. This routine has no explicit copyright, but is also part of the tvnl.m routine from the same author, with the following copyright: % Copyright (C) 2011, Alan Genz, All rights reserved. % % Redistribution and use in source and binary forms, with or without % modification, are permitted provided the following conditions are met: % 1. Redistributions of source code must retain the above copyright % notice, this list of conditions and the following disclaimer. % 2. Redistributions in binary form must reproduce the above copyright % notice, this list of conditions and the following disclaimer in the % documentation and/or other materials provided with the distribution. % 3. The contributor name(s) may not be used to endorse or promote % products derived from this software without specific prior written % permission. % THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS % "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT % LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS % FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE % COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, % INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, % BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS % OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND % ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR % TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE % USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. % */ #define NORMAL2DCDF_MINUS_INF -8.29236108 #define NORMAL2DCDF_PLUS_INF 37.5193794 #define NORMAL2DCDF_MIN_LOG -745.13321 #define NORMAL2DCDF_EPS 1.0e-15 Scalar Normal2DCDF(const Scalar x1, const Scalar x2, const Scalar rho, const Bool tail) { Scalar absRho = std::abs(rho); if (!(absRho <= 1.0)) throw InvalidArgumentException(HERE) << "Error: the correlation coefficient must be in [-1,1], here rho=" << rho; // Use the relation Normal2DCDF(x1, x2, false) = Normal2DCDF(-x1, -x2, true) if (!tail) return Normal2DCDF(-x1, -x2, rho, true); // The special cases: zero mass, unit mass, marginal mass if ((x1 >= NORMAL2DCDF_PLUS_INF) || (x2 >= NORMAL2DCDF_PLUS_INF)) return 0.0; if (x1 <= NORMAL2DCDF_MINUS_INF) { if (x2 <= NORMAL2DCDF_MINUS_INF) return 1.0; else return DistFunc::pNormal(-x2); } if (x2 <= NORMAL2DCDF_MINUS_INF) return DistFunc::pNormal(-x1); // The special case: no correlation if (absRho <= NORMAL2DCDF_EPS) return DistFunc::pNormal(-x1) * DistFunc::pNormal(-x2); // Nodes and weights for Legendre integration static Scalar nodes[19] = {0.9324695142031522, 0.6612093864662647, 0.2386191860831970, 0.9815606342467191, 0.9041172563704750, 0.7699026741943050, 0.5873179542866171, 0.3678314989981802, 0.1252334085114692, 0.9931285991850949, 0.9639719272779138, 0.9122344282513259, 0.8391169718222188, 0.7463319064601508, 0.6360536807265150, 0.5108670019508271, 0.3737060887154196, 0.2277858511416451, 0.07652652113349733}; static Scalar weights[19] = {0.1713244923791705, 0.3607615730481384, 0.4679139345726904, 0.04717533638651177, 0.1069393259953183, 0.1600783285433464, 0.2031674267230659, 0.2334925365383547, 0.2491470458134029, 0.01761400713915212, 0.04060142980038694, 0.06267204833410906, 0.08327674157670475, 0.1019301198172404, 0.1181945319615184, 0.1316886384491766, 0.1420961093183821, 0.1491729864726037, 0.1527533871307259}; UnsignedInteger shift = 0; UnsignedInteger size = 0; if (absRho <= 0.3) { shift = 0; size = 3; } else if (absRho <= 0.75) { shift = 3; size = 6; } else { shift = 9; size = 10; } Scalar cdf = 0.0; Scalar u1 = x1; Scalar u2 = x2; Scalar u1u2 = u1 * u2; // Not too much correlation if (absRho <= 0.925) { const Scalar halfSquare = 0.5 * (u1 * u1 + u2 * u2); const Scalar arcSinRho = std::asin(rho); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar sinValueMinus = std::sin(0.5 * arcSinRho * (1.0 - nodes[shift + i])); const Scalar sinValuePlus = std::sin(0.5 * arcSinRho * (1.0 + nodes[shift + i])); cdf += weights[shift + i] * (std::exp((sinValueMinus * u1u2 - halfSquare) / (1.0 - sinValueMinus * sinValueMinus)) + std::exp((sinValuePlus * u1u2 - halfSquare) / (1.0 - sinValuePlus * sinValuePlus))); } cdf *= arcSinRho / (4.0 * M_PI); cdf += DistFunc::pNormal(-u1) * DistFunc::pNormal(-u2); return std::max(0.0, std::min(1.0, cdf)); } // absRho < 0.925 if (rho < 0.0) { u2 = -u2; u1u2 = -u1u2; } if (absRho < 1.0) { const Scalar aSquare = (1.0 - rho) * (1.0 + rho); Scalar a = std::sqrt(aSquare); const Scalar b = std::abs(u1 - u2); const Scalar bSquare = b * b; const Scalar c = 0.5 - 0.125 * u1u2; const Scalar d = 0.75 - 0.06125 * u1u2; const Scalar aSquareReduced = -0.5 * (bSquare / aSquare + u1u2); const Scalar firstTerm = c * (1.0 - 0.2 * d * bSquare) / 3.0; if (aSquareReduced > NORMAL2DCDF_MIN_LOG) cdf = a * std::exp(aSquareReduced) * (1.0 - (bSquare - aSquare) * firstTerm + 0.2 * c * d * aSquare * aSquare); if (u1u2 < -2.0 * NORMAL2DCDF_MIN_LOG) { const Scalar sp = std::sqrt(2.0 * M_PI) * DistFunc::pNormal(-b / a); cdf -= std::exp(-0.5 * u1u2) * sp * b * (1.0 - bSquare * firstTerm); } // u1u2 < -2.0 * NORMAL2DCDF_MIN_LOG a *= 0.5; for(UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < 2; ++j) { const Scalar x = a * (1.0 + (-1.0 + 2.0 * j) * nodes[shift + i]); const Scalar xSquare = x * x; const Scalar asr = -0.5 * (bSquare / xSquare + u1u2); if (asr > NORMAL2DCDF_MIN_LOG) { const Scalar rs = std::sqrt(1.0 - xSquare); const Scalar sp = 1.0 + c * xSquare * (1.0 + d * xSquare); const Scalar ep = std::exp(-u1u2 * (1.0 - rs) / (2.0 * (1.0 + rs))) / rs; cdf += a * weights[shift + i] * std::exp(asr) * (ep - sp); } // asr > NORMAL2DCDF_MIN_LOG } // j } // i } // absRho < 1.0 cdf /= -2.0 * M_PI; if (rho > 0.0) cdf = cdf + DistFunc::pNormal(-std::max(u1, u2)); else cdf = -cdf + std::max(0.0, DistFunc::pNormal(-u1) - DistFunc::pNormal(-u2)); return std::max(0.0, std::min(1.0, cdf)); } #undef NORMAL2DCDF_INF #undef NORMAL2DCDF_EPS #undef NORMAL2DCDF_LOG END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Normal3DCDF.cxx000066400000000000000000000304771307543307100244370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the CDF computation for a bi-dimensional * Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Normal3DCDF.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS Scalar adonet(const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13); Scalar tvnf(const Scalar x, const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13); void sincs(const Scalar x, Scalar & sx, Scalar & cs); Scalar pntgnd(const Scalar ba, const Scalar bb, const Scalar bc, const Scalar ra, const Scalar rb, const Scalar r, const Scalar rr); void krnrdt(const Scalar a, const Scalar b, const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13, Scalar & resk, Scalar & err); /* Translated in C++ from Alan Genz's matlab routine tvnl.m The routine tvnl.m has the following copyright: % Copyright (C) 2011, Alan Genz, All rights reserved. % % Redistribution and use in source and binary forms, with or without % modification, are permitted provided the following conditions are met: % 1. Redistributions of source code must retain the above copyright % notice, this list of conditions and the following disclaimer. % 2. Redistributions in binary form must reproduce the above copyright % notice, this list of conditions and the following disclaimer in the % documentation and/or other materials provided with the distribution. % 3. The contributor name(s) may not be used to endorse or promote % products derived from this software without specific prior written % permission. % THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS % "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT % LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS % FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE % COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, % INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, % BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS % OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND % ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR % TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE % USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. % */ // Opposite convention for INF wrt Normal2DCDF /* #define NORMAL3DCDF_MINUS_INF -37.5193794 #define NORMAL3DCDF_PLUS_INF 8.29236108 #define NORMAL3DCDF_MIN_LOG -745.13321 #define NORMAL3DCDF_EPS 1.0e-14 #define NORMAL3DCDF_MAXINT 100 */ #define NORMAL3DCDF_MINUS_INF -37.5193794 #define NORMAL3DCDF_PLUS_INF 8.29236108 #define NORMAL3DCDF_MIN_LOG -745.13321 #define NORMAL3DCDF_EPS 1.0e-14 #define NORMAL3DCDF_MAXINT 100 Scalar Normal3DCDF(const Scalar x1, const Scalar x2, const Scalar x3, const Scalar rho12, const Scalar rho13, const Scalar rho23, const Bool tail) { if (!(std::abs(rho12) <= 1.0)) throw InvalidArgumentException(HERE) << "Error: the correlation coefficient rho12 must be in [-1, 1], here rho12=" << rho12; if (!(std::abs(rho13) <= 1.0)) throw InvalidArgumentException(HERE) << "Error: the correlation coefficient rho13 must be in [-1, 1], here rho12=" << rho13; if (!(std::abs(rho23) <= 1.0)) throw InvalidArgumentException(HERE) << "Error: the correlation coefficient rho23 must be in [-1, 1], here rho23=" << rho23; const Scalar delta = rho12 * rho12 + rho13 * rho13 + rho23 * rho23 - 2.0 * rho12 * rho13 * rho23; if (!(delta <= 1.0)) throw InvalidArgumentException(HERE) << "Error: delta=rho12^2+rho13^2+rho23^2-2*rho12*rho13*rho23 must be in less or equal to 1, here delta=" << delta; if (tail) return Normal3DCDF(-x1, -x2, -x3, rho12, rho13, rho23, false); if ((x1 <= NORMAL3DCDF_MINUS_INF) || (x2 <= NORMAL3DCDF_MINUS_INF) || (x3 <= NORMAL3DCDF_MINUS_INF)) return 0.0; if (x1 >= NORMAL3DCDF_PLUS_INF) { if (x2 >= NORMAL3DCDF_PLUS_INF) { if (x3 >= NORMAL3DCDF_PLUS_INF) return 1.0; else return DistFunc::pNormal(x3); } // x2 >= NORMAL3DCDF_PLUS_INF // Here, x2 < NORMAL3DCDF_PLUS_INF if (x3 >= NORMAL3DCDF_PLUS_INF) return DistFunc::pNormal(x2); else return DistFunc::pNormal2D(x2, x3, rho23); } // x1 >= NORMAL3DCDF_PLUS_INF // Here, x1 < NORMAL3DCDF_PLUS_INF if (x2 >= NORMAL3DCDF_PLUS_INF) { if (x3 >= NORMAL3DCDF_PLUS_INF) return DistFunc::pNormal(x1); else return DistFunc::pNormal2D(x1, x3, rho13); } // x2 >= NORMAL3DCDF_PLUS_INF // Here, x1 < NORMAL3DCDF_PLUS_INF and x2 < NORMAL3DCDF_PLUS_INF if (x3 >= NORMAL3DCDF_PLUS_INF) return DistFunc::pNormal2D(x1, x2, rho12); // Here, we have to do some work! // Probability of the negative orthant if (std::abs(x1) + std::abs(x2) + std::abs(x3) < NORMAL3DCDF_EPS) return std::max(0.0, std::min(1.0, 0.125 * (1.0 + 2.0 * (std::asin(rho12) + std::asin(rho13) + std::asin(rho23)) / M_PI))); Scalar h1 = x1; Scalar h2 = x2; Scalar h3 = x3; Scalar r12 = rho12; Scalar r13 = rho13; Scalar r23 = rho23; // Sort R's and check for special correlation structure if (std::abs(r12) > std::abs(r13)) { h2 = h3; h3 = x2; r12 = r13; r13 = rho12; } if (std::abs(r13) > std::abs(r23)) { h1 = h2; h2 = x1; r23 = r13; r13 = rho23; } if (std::abs(r12) + std::abs(r13) < NORMAL3DCDF_EPS) return DistFunc::pNormal(h1) * DistFunc::pNormal2D(h2, h3, r23); if (std::abs(r13) + std::abs(r23) < NORMAL3DCDF_EPS) return DistFunc::pNormal(h3) * DistFunc::pNormal2D(h1, h2, r12); if (std::abs(r12) + std::abs(r23) < NORMAL3DCDF_EPS) return DistFunc::pNormal(h2) * DistFunc::pNormal2D(h1, h3, r13); if (1.0 - r23 < NORMAL3DCDF_EPS) return DistFunc::pNormal2D(h1, std::min(h2, h3), r12); if ((r23 + 1.0 < NORMAL3DCDF_EPS) && (h2 > -h3)) return std::max(0.0, std::min(1.0, DistFunc::pNormal2D(h1, h2, r12) - DistFunc::pNormal2D(h1, -h3, r12))); // At last, the general case const Scalar a12 = std::asin(r12); const Scalar a13 = std::asin(r13); return std::max(0.0, std::min(1.0, adonet(h1, h2, h3, r23, a12, a13) / (2.0 * M_PI) + DistFunc::pNormal(h1) * DistFunc::pNormal2D(h2, h3, r23))); } /* Computes Plackett formula integrands */ Scalar tvnf(const Scalar x, const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13) { Scalar result = 0.0; Scalar r12 = -1.0; Scalar rr2 = -1.0; sincs(a12 * x, r12, rr2); Scalar r13 = -1.0; Scalar rr3 = -1.0; sincs(a13 * x, r13, rr3); if (std::abs(a12) > 0.0) result = a12 * pntgnd(h1, h2, h3, r13, r23, r12, rr2); if (std::abs(a13) > 0.0) result += a13 * pntgnd(h1, h3, h2, r12, r23, r13, rr3); return result; } /* Computes accurately sin(x), cos(x)^2 for |x| near pi/2 */ void sincs(const Scalar x, Scalar & sx, Scalar & cs) { const Scalar e = 0.5 * M_PI - std::abs(x); const Scalar ee = e * e; if (ee < 5.0e-5) { cs = ee * (1.0 - ee * (1.0 - 2.0 * ee / 15.0) / 3.0); sx = (1.0 - 0.5 * ee * (1.0 - ee / 12.0)); if (x < 0.0) sx = -sx; return; } sx = std::sin(x); cs = 1.0 - sx * sx; } /* Computes Plackett formula integrand */ Scalar pntgnd(const Scalar ba, const Scalar bb, const Scalar bc, const Scalar ra, const Scalar rb, const Scalar r, const Scalar rr) { Scalar result = 0.0; const Scalar dt = rr * (rr - (ra - rb) * (ra - rb) - 2.0 * ra * rb * (1.0 - r)); if (dt > 0.0) { const Scalar bt = (bc * rr + ba * (r * rb - ra) + bb * (r * ra - rb)) / std::sqrt(dt); const Scalar delta = ba - r * bb; const Scalar ft = delta * delta / rr + bb * bb; if ((ft < -2.0 * NORMAL3DCDF_MIN_LOG) && (bt > NORMAL3DCDF_MINUS_INF)) { result = std::exp(-0.5 * ft); if (bt < NORMAL3DCDF_PLUS_INF) result *= DistFunc::pNormal(bt); } } return result; } /* 1D adaptive integration */ Scalar adonet(const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13) { Scalar result = 0.0; Scalar ai[NORMAL3DCDF_MAXINT]; ai[0] = 0.0; Scalar bi[NORMAL3DCDF_MAXINT]; bi[0] = 1.0; Scalar fi[NORMAL3DCDF_MAXINT]; Scalar ei[NORMAL3DCDF_MAXINT]; UnsignedInteger ip = 0; UnsignedInteger im = 0; Scalar err = 1.0; while ((err > 0.25 * NORMAL3DCDF_EPS) && (im < NORMAL3DCDF_MAXINT - 1)) { ++im; bi[im] = bi[ip]; ai[im] = 0.5 * (ai[ip] + bi[ip]); bi[ip] = ai[im]; krnrdt(ai[ip], bi[ip], h1, h2, h3, r23, a12, a13, fi[ip], ei[ip]); krnrdt(ai[im], bi[im], h1, h2, h3, r23, a12, a13, fi[im], ei[im]); UnsignedInteger iErrMax = 0; Scalar errMax = 0.0; err = 0.0; result = 0.0; for (UnsignedInteger i = 0; i <= im; ++i) { const Scalar localError = ei[i]; result += fi[i]; err += localError * localError; if (localError > errMax) { errMax = localError; iErrMax = i; } } ip = iErrMax; err = std::sqrt(err); } // while (err >...) return result; } /* Kronrod rule */ void krnrdt(const Scalar a, const Scalar b, const Scalar h1, const Scalar h2, const Scalar h3, const Scalar r23, const Scalar a12, const Scalar a13, Scalar & resk, Scalar & err) { static Scalar wg0(0.2729250867779007); static Scalar wg[5] = {0.05566856711617449, 0.1255803694649048, 0.1862902109277352, 0.2331937645919914, 0.2628045445102478}; static Scalar xgk[11] = {0.9963696138895427, 0.9782286581460570, 0.9416771085780681, 0.8870625997680953, 0.8160574566562211, 0.7301520055740492, 0.6305995201619651, 0.5190961292068118, 0.3979441409523776, 0.2695431559523450, 0.1361130007993617}; static Scalar wgk0(0.1365777947111183); static Scalar wgk[11] = {0.00976544104596129, 0.02715655468210443, 0.04582937856442671, 0.06309742475037484, 0.07866457193222764, 0.09295309859690074, 0.1058720744813894, 0.1167395024610472, 0.1251587991003195, 0.1312806842298057, 0.1351935727998845}; const Scalar wid = 0.5 * (b - a); const Scalar cen = 0.5 * (a + b); Scalar fc = tvnf(cen, h1, h2, h3, r23, a12, a13); Scalar resg = fc * wg0; resk = fc * wgk0; Scalar t = 0.0; for (UnsignedInteger j = 0; j < 5; ++j) { t = wid * xgk[2 * j]; fc = tvnf(cen - t, h1, h2, h3, r23, a12, a13) + tvnf(cen + t, h1, h2, h3, r23, a12, a13); resk += wgk[2 * j] * fc; t = wid * xgk[2 * j + 1]; fc = tvnf(cen - t, h1, h2, h3, r23, a12, a13) + tvnf(cen + t, h1, h2, h3, r23, a12, a13); resk += wgk[2 * j + 1] * fc; resg += wg[j] * fc; } t = wid * xgk[10]; fc = tvnf(cen - t, h1, h2, h3, r23, a12, a13) + tvnf(cen + t, h1, h2, h3, r23, a12, a13); resk = wid * (resk + wgk[10] * fc); err = std::abs(resk - wid * resg); } #undef NORMAL3DCDF_INF #undef NORMAL3DCDF_LOG #undef NORMAL3DCDF_EPS #undef NORMAL3DCDF_MAXINT END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NormalCopula.cxx000066400000000000000000000623611307543307100250740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements a normal copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NormalCopula.hxx" #include "openturns/Uniform.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/NatafEllipticalCopulaEvaluation.hxx" #include "openturns/NatafEllipticalCopulaGradient.hxx" #include "openturns/NatafEllipticalCopulaHessian.hxx" #include "openturns/InverseNatafEllipticalCopulaEvaluation.hxx" #include "openturns/InverseNatafEllipticalCopulaGradient.hxx" #include "openturns/InverseNatafEllipticalCopulaHessian.hxx" #include "openturns/Indices.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NormalCopula); static const Factory Factory_NormalCopula; /* Default constructor */ NormalCopula::NormalCopula(const UnsignedInteger dim) : CopulaImplementation() , correlation_(dim) , normal_(dim) { setName("NormalCopula"); // The range is generic for all the copulas setDimension(dim); computeRange(); } /* Default constructor */ NormalCopula::NormalCopula(const CorrelationMatrix & correlation) : CopulaImplementation() , correlation_(correlation) , normal_(Point(correlation.getNbRows(), 0.0), Point(correlation.getNbRows(), 1.0), correlation) { setName("NormalCopula"); // The range is generic for all the copulas setDimension(correlation.getNbRows()); computeRange(); } /* Comparison operator */ Bool NormalCopula::operator ==(const NormalCopula & other) const { if (this == &other) return true; return correlation_ == other.correlation_; } Bool NormalCopula::equals(const DistributionImplementation & other) const { const NormalCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String NormalCopula::__repr__() const { OSS oss; oss << "class=" << NormalCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " correlation=" << correlation_; return oss; } String NormalCopula::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(R = " << correlation_.__str__(offset) << ")"; return oss; } /* Virtual constructor */ NormalCopula * NormalCopula::clone() const { return new NormalCopula(*this); } /* Get one realization of the distribution */ Point NormalCopula::getRealization() const { UnsignedInteger dimension = getDimension(); if (hasIndependentCopula()) return RandomGenerator::Generate(dimension); else { Point realization(normal_.getRealization()); for (UnsignedInteger i = 0; i < dimension; ++i) realization[i] = DistFunc::pNormal(realization[i]); return realization; } } struct NormalCopulaComputeSamplePolicy { const Sample input_; Sample & output_; UnsignedInteger dimension_; NormalCopulaComputeSamplePolicy(const Sample & input, Sample & output) : input_(input) , output_(output) , dimension_(input.getDimension()) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) output_[i][j] = DistFunc::pNormal(input_[i][j]); } }; /* end struct NormalCopulaComputeSamplePolicy */ /* Get a sample of the distribution */ Sample NormalCopula::getSampleParallel(const UnsignedInteger size) const { if (hasIndependentCopula()) { const UnsignedInteger dimension = getDimension(); Sample result(size, dimension); const Point rawData(RandomGenerator::Generate(dimension * size)); result.getImplementation()->setData(rawData); result.setName(getName()); result.setDescription(getDescription()); return result; } else { const UnsignedInteger dimension = getDimension(); const Sample normalSample(normal_.getSample(size)); Sample result(size, dimension); const NormalCopulaComputeSamplePolicy policy( normalSample, result ); TBB::ParallelFor( 0, size, policy ); result.setName(getName()); result.setDescription(getDescription()); return result; } // Nonindependente copula } Sample NormalCopula::getSample(const UnsignedInteger size) const { if (isParallel_) return getSampleParallel(size); return DistributionImplementation::getSample(size); } /* Get the DDF of the distribution */ Point NormalCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Be careful to evaluate the copula only in the interior of its support for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support return 0.0 if ((point[i] <= 0.0) || (point[i] >= 1.0)) return Point(dimension, 0.0); } Point x(dimension); Point marginalPDF(dimension); Scalar marginalPDFProduct = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar xi = DistFunc::qNormal(point[i]); x[i] = xi; // .398942280401432677939946059934 = 1 / sqrt(2.pi) const Scalar pdfI = 0.398942280401432677939946059934 * std::exp(-0.5 * xi * xi); marginalPDF[i] = pdfI; marginalPDFProduct *= pdfI; } const Point ddfNorm(normal_.computeDDF(x)); const Scalar pdfNorm = normal_.computePDF(x); Point ddf(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) ddf[i] = (ddfNorm[i] + x[i] * pdfNorm) / (marginalPDFProduct * marginalPDF[i]); return ddf; } /* Get the PDF of the distribution */ Scalar NormalCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Be careful to evaluate the copula only in the interior of its support for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support return 0.0 if ((point[i] <= 0.0) || (point[i] >= 1.0)) return 0.0; } // Compute the normal point such that a normal distribution with this copula // and standard 1D normal marginals has the same CDF at this normal point // than the copula at the given point. // Compute the multiplicative factor between the copula PDF // and the PDF of the associated generic normal using the specific form of // the standard normal PDF Point normalPoint(dimension); Scalar value = 0.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar yi = DistFunc::qNormal(point[i]); normalPoint[i] = yi; value += yi * yi; } // 0.398942280401432677939946059934 = 1 / sqrt(2.pi) value = std::pow(0.398942280401432677939946059934, static_cast(dimension)) * std::exp(-0.5 * value); return normal_.computePDF(normalPoint) / value; } /* Get the CDF of the distribution */ Scalar NormalCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Compute the normal point such that a normal distribution with this copula // and standard 1D normal marginals has the same CDF at this normal point // than the copula at the given point. // Be careful to evaluate the copula only in the interior of its support Indices indices; for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support, in the lower part, return 0.0 if (point[i] <= 0.0) return 0.0; // If the current component is in the interior of the support, its index // is taken into account if (point[i] < 1.0) indices.add(i); } const UnsignedInteger activeDimension = indices.getSize(); // Quick return if all the components are >= 1 if (activeDimension == 0) return 1.0; Point normalPoint(activeDimension); for (UnsignedInteger i = 0; i < activeDimension; ++i) normalPoint[i] = DistFunc::qNormal(point[indices[i]]); // In the usual case when the given point is in the interior of the support // use the associated normal distribution if (dimension == activeDimension) return normal_.computeCDF(normalPoint); // In the other case, we must use the appropriate marginal distribution else return normal_.getMarginal(indices)->computeCDF(normalPoint); } // computeCDF /* Get the survival function of the distribution */ Scalar NormalCopula::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Compute the normal point such that a normal distribution with this copula // and standard 1D normal marginals has the same CDF at this normal point // than the copula at the given point. // Be careful to evaluate the copula only in the interior of its support Indices indices; for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support, in the upper part, return 0.0 if (point[i] >= 1.0) return 0.0; // If the current component is in the interior of the support, its index // is taken into account if (point[i] > 0.0) indices.add(i); } const UnsignedInteger activeDimension = indices.getSize(); // Quick return if all the components are >= 1 if (activeDimension == 0) return 1.0; Point normalPoint(activeDimension); for (UnsignedInteger i = 0; i < activeDimension; ++i) normalPoint[i] = DistFunc::qNormal(point[indices[i]]); // In the usual case when the given point is in the interior of the support // use the associated normal distribution if (dimension == activeDimension) return normal_.computeSurvivalFunction(normalPoint); // In the other case, we must use the appropriate marginal distribution else return Distribution(normal_.getMarginal(indices)).computeSurvivalFunction(normalPoint); } // computeSurvivalFunction /* Compute the probability content of an interval */ Scalar NormalCopula::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); // Reduce the given interval to the support of the distribution, which is the nD unit cube const Interval intersect(interval.intersect(Interval(dimension))); // If the intersection is empty if (intersect.isNumericallyEmpty()) return 0.0; const Point lowerBoundIntersect(intersect.getLowerBound()); const Point upperBoundIntersect(intersect.getUpperBound()); Point lowerBound(dimension); Point upperBound(dimension); Interval::BoolCollection finiteLowerBound(dimension); Interval::BoolCollection finiteUpperBound(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { if (lowerBoundIntersect[i] == 0.0) { finiteLowerBound[i] = false; lowerBound[i] = normal_.getRange().getLowerBound()[i]; } else { finiteLowerBound[i] = true; lowerBound[i] = DistFunc::qNormal(lowerBoundIntersect[i]); } if (upperBoundIntersect[i] == 1.0) { finiteUpperBound[i] = false; upperBound[i] = normal_.getRange().getUpperBound()[i]; } else { finiteUpperBound[i] = true; upperBound[i] = DistFunc::qNormal(upperBoundIntersect[i]); } } return normal_.computeProbability(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* compute the covariance of the distribution */ void NormalCopula::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { // Off-diagonal terms for (UnsignedInteger j = 0; j < i; ++j) covariance_(i, j) = std::asin(0.5 * correlation_(i, j)) / (2.0 * M_PI); // Diagonal term covariance_(i, i) = 1.0 / 12.0; } isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix NormalCopula::getKendallTau() const { const UnsignedInteger dimension = getDimension(); CorrelationMatrix tau(dimension); for (UnsignedInteger i = 1; i < dimension; ++i) for (UnsignedInteger j = 0; j < i; ++j) tau(i, j) = std::asin(correlation_(i, j)) * 2.0 / M_PI; return tau; } /* Get the Shape matrix of the copula */ CorrelationMatrix NormalCopula::getShapeMatrix() const { return correlation_; } /* Get the PDF gradient of the distribution */ Point NormalCopula::computePDFGradient(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In NormalCopula::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point NormalCopula::computeCDFGradient(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In NormalCopula::computeCDFGradient(const Point & point) const"; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) For Normal distribution, the conditional distribution is also Normal, with mean and covariance such as: mean_cond = mean(x) + cov(x, y).cov(y, y)^(-1)(y - mean(y)) cov_cond = cov(x, x) - cov(x, y).cov(y, y)^(-1)cov(x, y) This expression simplifies if we use the inverse of the Cholesky factor of the covariance matrix. See [Lebrun, Dutfoy, "Rosenblatt and Nataf transformation"] */ Scalar NormalCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return 1.0; // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = DistFunc::qNormal(y[i]); return normal_.computeConditionalPDF(DistFunc::qNormal(x), u); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar NormalCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = DistFunc::qNormal(y[i]); return normal_.computeConditionalCDF(DistFunc::qNormal(x), u); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar NormalCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = DistFunc::qNormal(y[i]); return DistFunc::pNormal(normal_.computeConditionalQuantile(q, u)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ NormalCopula::Implementation NormalCopula::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger outputDimension = indices.getSize(); CorrelationMatrix R(outputDimension); // Extract the correlation matrix, the marginal standard deviations and means for (UnsignedInteger i = 0; i < outputDimension; ++i) { const UnsignedInteger index_i = indices[i]; for (UnsignedInteger j = 0; j <= i; ++j) R(i, j) = correlation_(index_i, indices[j]); } return new NormalCopula(R); } /* Get the isoprobabilist transformation */ NormalCopula::IsoProbabilisticTransformation NormalCopula::getIsoProbabilisticTransformation() const { IsoProbabilisticTransformation transformation; transformation.setEvaluation(new NatafEllipticalCopulaEvaluation(getStandardDistribution(), normal_.getInverseCholesky())); transformation.setGradient(new NatafEllipticalCopulaGradient(getStandardDistribution(), normal_.getInverseCholesky())); transformation.setHessian(new NatafEllipticalCopulaHessian(getStandardDistribution(), normal_.getInverseCholesky())); return transformation; } /* Get the inverse isoprobabilist transformation */ NormalCopula::InverseIsoProbabilisticTransformation NormalCopula::getInverseIsoProbabilisticTransformation() const { InverseIsoProbabilisticTransformation transformation; transformation.setEvaluation(new InverseNatafEllipticalCopulaEvaluation(getStandardDistribution(), normal_.getCholesky())); transformation.setGradient(new InverseNatafEllipticalCopulaGradient(getStandardDistribution(), normal_.getCholesky())); transformation.setHessian(new InverseNatafEllipticalCopulaHessian(getStandardDistribution(), normal_.getCholesky())); return transformation; } /* Tell if the distribution has an elliptical copula */ Bool NormalCopula::hasEllipticalCopula() const { return true; } /* Tell if the distribution has independent copula */ Bool NormalCopula::hasIndependentCopula() const { return normal_.hasIndependentCopula(); } /* Parameters value and description accessor */ NormalCopula::PointWithDescriptionCollection NormalCopula::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(0); if (dimension > 1) { // Put the dependence parameters const UnsignedInteger parametersDimension = dimension * (dimension - 1) / 2; PointWithDescription point(parametersDimension); Description description(parametersDimension); point.setName(getName()); UnsignedInteger dependenceIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { point[dependenceIndex] = correlation_(i, j); OSS oss; oss << "R_" << i + 1 << "_" << j + 1; description[dependenceIndex] = oss; ++dependenceIndex; } } point.setDescription(description); parameters.add(point); } // dimension > 1 return parameters; } // getParametersCollection void NormalCopula::setParametersCollection(const PointCollection & parametersCollection) { // Check if the given parameters are ok if (parametersCollection.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: the given collection has a size=" << parametersCollection.getSize() << " but should be of size=1"; const Point parameters(parametersCollection[0]); const UnsignedInteger dimension = getDimension(); if (parameters.getDimension() != dimension * (dimension - 1) / 2) throw InvalidArgumentException(HERE) << "Error: got " << parameters.getDimension() << " parameters instead of " << dimension * (dimension - 1) / 2; if (dimension == 1) return; UnsignedInteger dependenceIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { correlation_(i, j) = parameters[dependenceIndex]; ++dependenceIndex; } } } Point NormalCopula::getParameter() const { const UnsignedInteger dimension = getDimension(); Point point; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { point.add(correlation_(i, j)); } } return point; } void NormalCopula::setParameter(const Point & parameter) { // N = ((d-1)*d)/2 const UnsignedInteger size = parameter.getSize(); Scalar dimReal = 0.5 * std::sqrt(1.0 + 8.0 * size) + 0.5; if (dimReal != round(dimReal)) throw InvalidArgumentException(HERE) << "Error: invalid value number for NormalCopula"; const UnsignedInteger dimension = dimReal; const Scalar w = getWeight(); if (dimension > 1) { CorrelationMatrix R(dimension); UnsignedInteger dependenceIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { R(i, j) = parameter[dependenceIndex]; ++ dependenceIndex; } } *this = NormalCopula(R); } else { *this = NormalCopula(dimension); } setWeight(w); } Description NormalCopula::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); Description description; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { description.add(OSS() << "R_" << i + 1 << "_" << j + 1); } } return description; } /* Compute the correlation matrix of a Normal Copula from its Spearman correlation matrix */ CorrelationMatrix NormalCopula::GetCorrelationFromSpearmanCorrelation(const CorrelationMatrix & matrix) { const UnsignedInteger dimension = matrix.getNbRows(); CorrelationMatrix result(dimension); for (UnsignedInteger i = 1; i < dimension; ++i) for (UnsignedInteger j = 0; j < i; ++j) result(i, j) = 2.0 * std::sin(M_PI * matrix(i, j) / 6.0); if (!result.isPositiveDefinite()) throw NotSymmetricDefinitePositiveException(HERE) << "Error: the normal copula correlation matrix built from the given Spearman correlation matrix is not definite positive"; return result; } /* Compute the correlation matrix of a Normal Copula from its Kendal correlation matrix */ CorrelationMatrix NormalCopula::GetCorrelationFromKendallCorrelation(const CorrelationMatrix & matrix) { const UnsignedInteger dimension = matrix.getNbRows(); CorrelationMatrix result(dimension); for (UnsignedInteger i = 1; i < dimension; ++i) for (UnsignedInteger j = 0; j < i; ++j) result(i, j) = std::sin(M_PI_2 * matrix(i, j)); if (!result.isPositiveDefinite()) throw NotSymmetricDefinitePositiveException(HERE) << "Error: the normal copula correlation matrix built from the given Kendall correlation matrix is not definite positive"; return result; } /* Method save() stores the object through the StorageManager */ void NormalCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "correlation_", correlation_ ); adv.saveAttribute( "covariance_duplicate", covariance_ ); adv.saveAttribute( "normal_", normal_ ); adv.saveAttribute( "integrationNodesNumber_duplicate", integrationNodesNumber_ ); adv.saveAttribute( "isAlreadyComputedCovariance_duplicate", isAlreadyComputedCovariance_ ); } /* Method load() reloads the object from the StorageManager */ void NormalCopula::load(Advocate & adv) { // The range is generic for all the copulas CopulaImplementation::load(adv); adv.loadAttribute( "correlation_", correlation_ ); adv.loadAttribute( "covariance_duplicate", covariance_ ); adv.loadAttribute( "normal_", normal_ ); adv.loadAttribute( "integrationNodesNumber_duplicate", integrationNodesNumber_ ); adv.loadAttribute( "isAlreadyComputedCovariance_duplicate", isAlreadyComputedCovariance_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NormalCopulaFactory.cxx000066400000000000000000000056151307543307100264230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for NormalCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NormalCopulaFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NormalCopulaFactory); static const Factory Factory_NormalCopulaFactory; /* Default constructor */ NormalCopulaFactory::NormalCopulaFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ NormalCopulaFactory * NormalCopulaFactory::clone() const { return new NormalCopulaFactory(*this); } /* Here is the interface that all derived class must implement */ NormalCopulaFactory::Implementation NormalCopulaFactory::build(const Sample & sample) const { return buildAsNormalCopula(sample).clone(); } NormalCopulaFactory::Implementation NormalCopulaFactory::build(const Point & parameters) const { return buildAsNormalCopula(parameters).clone(); } NormalCopulaFactory::Implementation NormalCopulaFactory::build() const { return buildAsNormalCopula().clone(); } NormalCopula NormalCopulaFactory::buildAsNormalCopula(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a NormalCopula distribution from an empty sample"; try { NormalCopula result(NormalCopula::GetCorrelationFromKendallCorrelation(sample.computeKendallTau())); result.setDescription(sample.getDescription()); return result; } catch (...) { LOGWARN(OSS() << "Warning! Unable to build a NormalCopula using Kendall's tau, trying Spearman's rho instead."); return NormalCopula(NormalCopula::GetCorrelationFromSpearmanCorrelation(sample.computeSpearmanCorrelation())); } } NormalCopula NormalCopulaFactory::buildAsNormalCopula(const Point & parameters) const { try { NormalCopula copula; copula.setParameter(parameters); return copula; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a NormalCopula from the given parameters"; } } NormalCopula NormalCopulaFactory::buildAsNormalCopula() const { return NormalCopula(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NormalFactory.cxx000066400000000000000000000067771307543307100252710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NormalFactory.hxx" #include "openturns/Chi.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NormalFactory); static const Factory Factory_NormalFactory; /* Default constructor */ NormalFactory::NormalFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ NormalFactory * NormalFactory::clone() const { return new NormalFactory(*this); } /* Here is the interface that all derived class must implement */ NormalFactory::Implementation NormalFactory::build(const Sample & sample) const { return buildAsNormal(sample).clone(); } NormalFactory::Implementation NormalFactory::build() const { return buildAsNormal().clone(); } NormalFactory::Implementation NormalFactory::build(const Point & parameters) const { return buildAsNormal(parameters).clone(); } Normal NormalFactory::buildAsNormal(const Sample & sample) const { if (sample.getSize() < 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Normal distribution from a sample of size < 2"; const Point mean(sample.computeMean()); const CovarianceMatrix covariance(sample.computeCovariance()); Normal result(mean, covariance); result.setDescription(sample.getDescription()); return result; } Normal NormalFactory::buildAsNormal(const Point & parameters) const { try { const UnsignedInteger size = parameters.getSize(); // see EllipticalDistribution::setParameters const UnsignedInteger dimension = 0.5 * std::sqrt(9.0 + 8.0 * size) - 1.5; Normal distribution(dimension); distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException & ex) { throw InvalidArgumentException(HERE) << "Error: cannot build a Normal distribution from the given parameters" << ex; } } Normal NormalFactory::buildAsNormal() const { return Normal(); } DistributionFactoryResult NormalFactory::buildEstimator(const Sample & sample) const { if (sample.getDimension() > 1) return buildBootStrapEstimator(sample); Normal distribution(buildAsNormal(sample)); Scalar mu = distribution.getMean()[0]; Scalar sigma = distribution.getSigma()[0]; const UnsignedInteger size = sample.getSize(); ComposedDistribution::DistributionCollection coll; Normal muDistribution(mu, sigma / sqrt(1.0 * size)); coll.add(muDistribution); Distribution sigmaDistribution(Chi(size - 1) * (1.0 / sqrt(1.0 * size - 1.0))); coll.add(sigmaDistribution); ComposedDistribution parametersDistribution(coll); DistributionFactoryResult result(distribution, parametersDistribution); return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/NormalGamma.cxx000066400000000000000000000144771307543307100247000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NormalGamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/NormalGamma.hxx" #include "openturns/Gamma.hxx" #include "openturns/Normal.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(NormalGamma); static const Factory Factory_NormalGamma; /* Default constructor */ NormalGamma::NormalGamma() : BayesDistribution() , mu_(0.0) , kappa_(1.0) , alpha_(1.0) , beta_(1.0) { setName("NormalGamma"); const Description inVars(1, "lambda"); Description formulas(2); OSS oss; oss.setPrecision(17); formulas[0] = String(oss << mu_); oss.clear(); formulas[1] = String(oss << "1.0 / (" << kappa_ << "*lambda)"); const SymbolicFunction link(inVars, formulas); setConditionedAndConditioningDistributionsAndLinkFunction(Normal(), Gamma(alpha_, beta_), link); } /* Parameters constructor */ NormalGamma::NormalGamma(const Scalar mu, const Scalar kappa, const Scalar alpha, const Scalar beta) : BayesDistribution() , mu_(mu) , kappa_(kappa) , alpha_(alpha) , beta_(beta) { if (!(kappa_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: kappa must be positive, here kappa=" << kappa; if (!(alpha_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: alpha must be positive, here alpha=" << alpha; if (!(beta_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: beta must be positive, here beta=" << beta; setName("NormalGamma"); const Description inVars(1, "lambda"); Description formulas(2); OSS oss; oss.setPrecision(17); formulas[0] = String(oss << mu_); oss.clear(); formulas[1] = String(oss << "1.0 / sqrt(" << kappa_ << "*lambda)"); const SymbolicFunction link(inVars, formulas); setConditionedAndConditioningDistributionsAndLinkFunction(Normal(), Gamma(alpha_, beta_), link); computeRange(); } /* Compute the numerical range of the distribution given the parameters values */ void NormalGamma::computeRange() { const Scalar epsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); // Lower bound Point lowerBound(2, 0.0); //const Scalar lambdaMin(conditioningDistribution_.computeQuantile(epsilon)[0]); const Scalar lambdaMax = conditioningDistribution_.computeQuantile(epsilon, true)[0]; const Normal deconditionedDistribution(mu_, 1.0 / std::sqrt(kappa_ * lambdaMax)); lowerBound[0] = deconditionedDistribution.computeQuantile(epsilon)[0]; // Upper bound Point upperBound(2, lambdaMax); upperBound[0] = deconditionedDistribution.computeQuantile(epsilon, true)[0]; Interval::BoolCollection finiteLowerBound(2, false); finiteLowerBound[1] = true; const Interval::BoolCollection finiteUpperBound(2, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Comparison operator */ Bool NormalGamma::operator ==(const NormalGamma & other) const { if (this == &other) return true; return (mu_ == other.mu_) && (kappa_ == other.kappa_) && (alpha_ == other.alpha_) && (beta_ == other.beta_); } Bool NormalGamma::equals(const DistributionImplementation & other) const { const NormalGamma* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String NormalGamma::__repr__() const { OSS oss(true); oss << "class=" << NormalGamma::GetClassName() << " name=" << getName() << " mu=" << mu_ << " kappa=" << kappa_ << " alpha=" << alpha_ << " beta=" << beta_; return oss; } String NormalGamma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu=" << mu_ << ", kappa=" << kappa_ << ", alpha=" << alpha_ << ", beta=" << beta_ << ")"; return oss; } /* Virtual constructor */ NormalGamma * NormalGamma::clone() const { return new NormalGamma(*this); } /* Mu accessor */ void NormalGamma::setMu(const Scalar mu) { if (mu != mu_) mu_ = mu; } Scalar NormalGamma::getMu() const { return mu_; } /* Kappa accessor */ void NormalGamma::setKappa(const Scalar kappa) { if (kappa != kappa_) { if (!(kappa_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: kappa must be positive, here kappa=" << kappa; kappa_ = kappa; } } Scalar NormalGamma::getKappa() const { return kappa_; } /* Alpha accessor */ void NormalGamma::setAlpha(const Scalar alpha) { if (!(alpha == alpha_)) { if (!(alpha_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: alpha must be positive, here alpha=" << alpha; alpha_ = alpha; } } Scalar NormalGamma::getAlpha() const { return alpha_; } /* Beta accessor */ void NormalGamma::setBeta(const Scalar beta) { if (!(beta == beta_)) { if (!(beta_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: beta must be positive, here beta=" << beta; beta_ = beta; } } Scalar NormalGamma::getBeta() const { return beta_; } /* Method save() stores the object through the StorageManager */ void NormalGamma::save(Advocate & adv) const { BayesDistribution::save(adv); adv.saveAttribute( "mu_", mu_ ); adv.saveAttribute( "kappa_", kappa_ ); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); } /* Method load() reloads the object from the StorageManager */ void NormalGamma::load(Advocate & adv) { BayesDistribution::load(adv); adv.loadAttribute( "mu_", mu_ ); adv.loadAttribute( "kappa_", kappa_ ); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); // The range is computed using the upper class } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/OTf2c.c000066400000000000000000000022211307543307100230220ustar00rootroot00000000000000 #include "math.h" #include "OTf2c.h" double pow_dd(doublereal *ap, doublereal *bp) { return (pow(*ap, *bp)); } double pow_di(doublereal *ap, integer *bp) { double pow = 1.; double x = *ap; integer n = *bp; unsigned long u; pow = 1.; x = *ap; n = *bp; if(n != 0) { if(n < 0) { n = -n; x = 1./x; } for(u = n; ; ) { if(u & 01) pow *= x; if(u >>= 1) x *= x; else break; } } return(pow); } double d_sign(doublereal *a, doublereal *b) { double x = (*a >= 0 ? *a : - *a); return( *b >= 0 ? x : -x); } double d_mod(doublereal *x, doublereal *y) { #ifdef IEEE_drem double xa, ya, z; if ((ya = *y) < 0.) ya = -ya; z = drem(xa = *x, ya); if (xa > 0) { if (z < 0) z += ya; } else if (z > 0) z -= ya; return z; #else double quotient; if( (quotient = *x / *y) >= 0) quotient = floor(quotient); else quotient = -floor(-quotient); return(*x - (*y) * quotient ); #endif } openturns-1.9/lib/src/Uncertainty/Distribution/OTf2c.h000066400000000000000000000005101307543307100230260ustar00rootroot00000000000000 #ifndef OPENTURNS_F2C_H #define OPENTURNS_F2C_H #include "f2c.h" #ifdef __cplusplus extern "C" { #endif double pow_dd(doublereal *ap, doublereal *bp); double pow_di(doublereal *ap, integer *bp); double d_sign(doublereal *a, doublereal *b); double d_mod(doublereal *x, doublereal *y); #ifdef __cplusplus } #endif #endif openturns-1.9/lib/src/Uncertainty/Distribution/OrderStatisticsMarginalChecker.cxx000066400000000000000000000161451307543307100305650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OrderStatisticsMarginalChecker class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OrderStatisticsMarginalChecker.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/CenteredFiniteDifferenceGradient.hxx" #include "openturns/FiniteDifferenceStep.hxx" #include "openturns/BlendedStep.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/TNC.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrderStatisticsMarginalChecker); /* Parameters constructor */ OrderStatisticsMarginalChecker::OrderStatisticsMarginalChecker(const DistributionCollection & collection) : Object() , solver_(new TNC()) { for (UnsignedInteger i = 0; i < collection.getSize(); ++ i) { if (collection[i].getDimension() != 1) throw InvalidDimensionException(HERE) << "Marginal " << i << " should be 1-d."; if (!collection[i].isContinuous()) throw InvalidArgumentException(HERE) << "Marginal " << i << " should be continuous."; } collection_ = collection; } struct OrderStatisticsMarginalCheckerWrapper { OrderStatisticsMarginalCheckerWrapper(const Distribution & distributionI, const Distribution & distributionIp1) : distributionI_(distributionI) , distributionIp1_(distributionIp1) { // Nothing to do } Point computeDelta(const Point & point) const { const Scalar delta = distributionI_.computeCDF(point) - distributionIp1_.computeCDF(point); return Point(1, delta); } const Distribution & distributionI_; const Distribution & distributionIp1_; }; // struct OrderStatisticsMarginalCheckerWrapper void OrderStatisticsMarginalChecker::check() const { UnsignedInteger quantileIteration = ResourceMap::GetAsUnsignedInteger("OrderStatisticsMarginalChecker-QuantileIteration"); Scalar epsilon = ResourceMap::GetAsScalar("OrderStatisticsMarginalChecker-OptimizationEpsilon"); const UnsignedInteger size = collection_.getSize(); // First test, check the ranges Scalar aIm1 = collection_[0].getRange().getLowerBound()[0]; Scalar bIm1 = collection_[0].getRange().getUpperBound()[0]; for (UnsignedInteger i = 1; i < size; ++i) { // check that a_{i-1} <= a_i const Scalar aI = collection_[i].getRange().getLowerBound()[0]; if (aIm1 > aI) throw InvalidArgumentException(HERE) << "margins are not compatible: the lower bound of margin " << i - 1 << " is greater than the lower bound of margin " << i; // check that b_{i-1} <= b_i const Scalar bI = collection_[i].getRange().getUpperBound()[0]; if (bIm1 > bI) throw InvalidArgumentException(HERE) << "margins are not compatible: the lower bound of margin " << i - 1 << " is greater than the lower bound of margin " << i; aIm1 = aI; bIm1 = bI; } // Second test, check the quantiles at regular levels. Store the values for further tests Sample quantiles(size, quantileIteration); for (UnsignedInteger k = 0; k < quantileIteration; ++ k) { const Scalar prob = (k + 1.0) / (quantileIteration + 1.0); Scalar qIm1 = collection_[0].computeQuantile(prob)[0]; quantiles[0][k] = qIm1; for (UnsignedInteger i = 1; i < size; ++ i) { const Scalar qI = collection_[i].computeQuantile(prob)[0]; if (qIm1 >= qI) throw InvalidArgumentException(HERE) << "margins are not compatible: the quantile=" << qIm1 << " of margin " << i - 1 << " is greater than the quantile=" << qI << " of margin " << i << " at level " << prob; quantiles[i][k] = qI; qIm1 = qI; } } // Third test, find the minimum of F_i - F_{i+1} // Initilalyse Optimization problem OptimizationProblem problem; const FiniteDifferenceStep step(BlendedStep(Point(1, std::pow(SpecFunc::ScalarEpsilon, 1.0 / 3.0)), std::sqrt(SpecFunc::ScalarEpsilon))); for (UnsignedInteger i = 1; i < size; ++ i) { const OrderStatisticsMarginalCheckerWrapper wrapper(collection_[i - 1], collection_[i]); Function f(bindMethod(wrapper, &OrderStatisticsMarginalCheckerWrapper::computeDelta, 1, 1)); f.setGradient(CenteredFiniteDifferenceGradient(step, f.getEvaluation()->clone())); for (UnsignedInteger k = 0; k < quantileIteration; ++ k) { const Scalar xMin = quantiles[i - 1][k]; const Scalar xMax = quantiles[i][k]; const Scalar xMiddle = 0.5 * (xMin + xMax); // Define Optimization problem problem.setObjective(f); problem.setBounds(Interval(xMin, xMax)); solver_.setStartingPoint(Point(1, xMiddle)); solver_.setProblem(problem); solver_.run(); const Point minimizer(solver_.getResult().getOptimalPoint()); const Scalar minValue = solver_.getResult().getOptimalValue()[0]; LOGDEBUG(OSS() << "Optimisation on [" << xMin << ", " << xMax << "] gives " << solver_.getResult()); if (minValue < epsilon) throw InvalidArgumentException(HERE) << "margins are not compatible: the CDF at x=" << minimizer[0] << " of margin " << i << " is not enough larger than the CDF of margin " << i + 1 << ". Gap is " << minValue << "."; } // k } // i } Bool OrderStatisticsMarginalChecker::isCompatible() const { Bool compatible = true; try { check(); } catch (InvalidArgumentException) { compatible = false; } return compatible; } Indices OrderStatisticsMarginalChecker::buildPartition() const { Indices partition; const UnsignedInteger size = collection_.getSize(); for (UnsignedInteger i = 1; i < size; ++ i) { // check if b_{i-1} <= a_i // so i is in partition <=> (X_0,...,X_{i-1}) is independent from (X_i,...,X_{d-1}) if (collection_[i - 1].getRange().getUpperBound()[0] <= collection_[i].getRange().getLowerBound()[0]) partition.add(i - 1); } return partition; } /* Optimization solver accessor */ OptimizationAlgorithm OrderStatisticsMarginalChecker::getOptimizationAlgorithm() const { return solver_; } void OrderStatisticsMarginalChecker::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm OrderStatisticsMarginalChecker::getOptimizationSolver() const { Log::Warn(OSS() << "OrderStatisticsMarginalChecker::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void OrderStatisticsMarginalChecker::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "OrderStatisticsMarginalChecker::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/OrdinalSumCopula.cxx000066400000000000000000000605331307543307100257200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all OrdinalSumCopulas * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OrdinalSumCopula.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(OrdinalSumCopula); static const Factory Factory_OrdinalSumCopula; /* Default constructor */ OrdinalSumCopula::OrdinalSumCopula() : CopulaImplementation() , copulaCollection_(2, IndependentCopula(2)) , bounds_(1, 0.5) , blockLengths_(2, 0.5) , blockDistribution_() { setName("OrdinalSumCopula"); setDimension(2); Sample support(2, 1); support[0][0] = 0.0; support[1][0] = 1.0; blockDistribution_ = UserDefined(support); computeRange(); } /* Default constructor */ OrdinalSumCopula::OrdinalSumCopula(const CopulaCollection & coll, const Point & bounds) : CopulaImplementation() , copulaCollection_(0) , bounds_(0) , blockLengths_(0) , blockDistribution_() { setName("OrdinalSumCopula"); // We assign the copula collection through the accessor in order to compute the ordinalSum copula dimension setCopulaCollection(coll); setBounds(bounds); } /* Virtual constructor */ OrdinalSumCopula * OrdinalSumCopula::clone() const { return new OrdinalSumCopula(*this); } /* Comparison operator */ Bool OrdinalSumCopula::operator ==(const OrdinalSumCopula & other) const { if (this == &other) return true; return (copulaCollection_ == other.copulaCollection_) && (bounds_ == other.bounds_); } Bool OrdinalSumCopula::equals(const DistributionImplementation & other) const { const OrdinalSumCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String OrdinalSumCopula::__repr__() const { OSS oss(true); oss << "class=" << OrdinalSumCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); for (UnsignedInteger i = 0; i < copulaCollection_.getSize(); ++i) oss << " copula[" << i << "]=" << copulaCollection_[i]; oss << "bounds=" << bounds_; return oss; } String OrdinalSumCopula::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "("; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { oss << (i == 0 ? "[" : ", ["); oss << (i == 0 ? 0.0 : bounds_[i - 1]) << ", "; oss << (i == size - 1 ? 1.0 : bounds_[i]) << "], "; oss << copulaCollection_[i]; } oss << ")"; return oss; } /* Distribution collection accessor */ void OrdinalSumCopula::setCopulaCollection(const CopulaCollection & coll) { // Check if the collection is not empty const UnsignedInteger size = coll.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Collection of distributions is empty"; copulaCollection_ = coll; const UnsignedInteger dimension = coll[0].getDimension(); // Compute the dimension, build the description and check the independence Bool parallel = true; for (UnsignedInteger i = 0; i < size; ++i) { if (coll[i].getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: expected copulas of dimension=" << dimension << " but copula " << i << " has dimension=" << coll[i].getDimension(); parallel = parallel && coll[i].getImplementation()->isParallel(); } setParallel(parallel); isAlreadyComputedCovariance_ = false; // One MUST set the dimension BEFORE the description, else an error occurs setDimension(dimension); setDescription(coll[0].getDescription()); computeRange(); } /* Distribution collection accessor */ const OrdinalSumCopula::CopulaCollection & OrdinalSumCopula::getCopulaCollection() const { return copulaCollection_; } /* Bounds accessor */ void OrdinalSumCopula::setBounds(const Point & bounds) { const UnsignedInteger size = bounds.getSize(); if (size != copulaCollection_.getSize() - 1) throw InvalidArgumentException(HERE) << "Error: expected " << copulaCollection_.getSize() - 1 << " bounds, got " << size; // Check that the bounds: // + are in [0, 1] // + are in increasing order // Build: // + the block lengths // + the block distribution // Here are the parameters of the block distribution bounds_ = Point(0); Sample support(0, 1); blockLengths_ = Point(0); Scalar lastBound = 0.0; CopulaCollection coll(0); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar currentBound = bounds[i]; if (currentBound < lastBound) throw InvalidArgumentException(HERE) << "Error: bound[" << i << "]=" << currentBound << " and should be greater than " << lastBound; if (!(currentBound <= 1.0)) throw InvalidArgumentException(HERE) << "Error: bound[" << i << "]=" << currentBound << " and should be less than 1"; const Scalar length = currentBound - lastBound; if (length > 0.0) { support.add(Point(1, blockLengths_.getSize())); blockLengths_.add(length); coll.add(copulaCollection_[i]); bounds_.add(currentBound); } else LOGWARN(OSS(false) << "The length of block " << i << " is zero, the corresponding copula " << copulaCollection_[i] << " is removed from the collection"); lastBound = currentBound; } if (lastBound < 1.0) { support.add(Point(1, blockLengths_.getSize())); blockLengths_.add(1.0 - lastBound); coll.add(copulaCollection_[size]); } else LOGWARN(OSS(false) << "The length of block " << size << " is zero, the corresponding copula " << copulaCollection_[size] << " is removed from the collection"); blockDistribution_ = UserDefined(support, blockLengths_); if (coll.getSize() < copulaCollection_.getSize()) copulaCollection_ = coll; } const Point & OrdinalSumCopula::getBounds() const { return bounds_; } /* Get one realization of the OrdinalSumCopula */ Point OrdinalSumCopula::getRealization() const { // If there is only one copula if (copulaCollection_.getSize() == 1) return copulaCollection_[0].getRealization(); const UnsignedInteger index = static_cast(round(blockDistribution_.getRealization()[0])); Point result(copulaCollection_[index].getRealization() * blockLengths_[index]); if (index > 0) result += Point(getDimension(), bounds_[index - 1]); return result; } /* Find the block number of a given real wrt the bounds. Returns -1 if negative and -2 if greater than 1 */ SignedInteger OrdinalSumCopula::findBlock(const Scalar x) const { if (x < 0.0) return -1; if (x >= 1.0) return -2; const UnsignedInteger size = bounds_.getSize(); // If no bounds, x must be in block 0 if (size == 0) return 0; // If less than first bound, x must be in block 0 if (x < bounds_[0]) return 0; // If x >= xMax, index = size if (x >= bounds_[size - 1]) return size; // Else, x is between bounds_[0] and bounds_[size-1]. Find the index by bisection. SignedInteger iLeft = 0; SignedInteger iRight = size - 1; while (iRight - iLeft > 1) { const SignedInteger iMiddle = (iLeft + iRight) / 2; if (x < bounds_[iMiddle]) iRight = iMiddle; else iLeft = iMiddle; } return iRight; } /* Check if the given point is in the given block */ Bool OrdinalSumCopula::isInBlock(const Point & point, const UnsignedInteger index) const { const UnsignedInteger dimension = getDimension(); if (index == 0) return Interval(Point(dimension, 0.0), Point(dimension, bounds_[index])).contains(point); if (index < bounds_.getSize()) return Interval(Point(dimension, bounds_[index - 1]), Point(dimension, bounds_[index])).contains(point); return Interval(Point(dimension, bounds_[index - 1]), Point(dimension, 1.0)).contains(point); } /* Get the DDF of the OrdinalSumCopula */ Point OrdinalSumCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // If there is only one copula if (copulaCollection_.getSize() == 1) return copulaCollection_[0].computeDDF(point); // Compute the candidate block index based on the first coordinate const SignedInteger index = findBlock(point[0]); // There is no candidate if (index < 0) return Point(dimension, 0.0); // The point is in the candidate if (isInBlock(point, index)) return copulaCollection_[index].computeDDF(point); // The point is not in the candidate return Point(dimension, 0.0); } /* Get the PDF of the OrdinalSumCopula */ Scalar OrdinalSumCopula::computePDF(const Point & point) const { LOGDEBUG(OSS() << "In OrdinalSumCopula::computePDF, point=" << point); // If there is only one copula if (copulaCollection_.getSize() == 1) return copulaCollection_[0].computePDF(point); const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Compute the candidate block index based on the first coordinate const SignedInteger index = findBlock(point[0]); Scalar pdf = 0.0; LOGDEBUG(OSS() << "index=" << index); // First, the special cases if (index < 0) { LOGDEBUG("OUT OF RANGE"); return pdf; } // The point is not in the candidate, the ordinal sum is the min copula if (!isInBlock(point, index)) { LOGDEBUG("OUT OF BLOCKS"); return pdf; } // The point is in the candidate, compute the value of the corresponding copula if (index == 0) { pdf = std::pow(blockLengths_[0], 1.0 - dimension) * copulaCollection_[0].computePDF(point / blockLengths_[0]); LOGDEBUG(OSS() << "In block " << index << ", pdf=" << pdf); return pdf; } pdf = std::pow(blockLengths_[index], 1.0 - dimension) * copulaCollection_[index].computePDF((point - Point(dimension, bounds_[index - 1])) / blockLengths_[index]); LOGDEBUG(OSS() << "In block " << index << ", pdf=" << pdf); return pdf; } /* Get the CDF of the OrdinalSumCopula */ Scalar OrdinalSumCopula::computeCDF(const Point & point) const { // If there is only one copula if (copulaCollection_.getSize() == 1) return copulaCollection_[0].computeCDF(point); LOGDEBUG(OSS() << "In OrdinalSumCopula::computeCDF, point=" << point); const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); // Compute the candidate block index based on the first coordinate const SignedInteger index = findBlock(point[0]); LOGDEBUG(OSS() << "index=" << index); // First, the special cases // The first component is negative, CDF==0 if (index == -1) return 0.0; // The first component is greater than 1, the ordinal sum is the min copula if (index == -2) return std::max(0.0, std::min(1.0, *std::min_element(point.begin(), point.end()))); // The point is not in the candidate, the ordinal sum is the min copula // We separate this case from the previous one because the test is expansive if (!isInBlock(point, index)) return std::max(0.0, std::min(1.0, *std::min_element(point.begin(), point.end()))); // The point is in the candidate, compute the value of the corresponding copula if (index == 0) return blockLengths_[0] * copulaCollection_[0].computeCDF(point / blockLengths_[0]); return bounds_[index - 1] + blockLengths_[index] * copulaCollection_[index].computeCDF((point - Point(dimension, bounds_[index - 1])) / blockLengths_[index]); } /* Compute the probability content of an interval */ Scalar OrdinalSumCopula::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); // Compute the contribution of the first block Point xMin(dimension, 0.0); Point xMax(dimension, bounds_[0]); Scalar probability = copulaCollection_[0].computeProbability(interval.intersect(Interval(xMin, xMax)) * (1.0 / blockLengths_[0])); // Sum the contribution of all the intermediate blocks xMin = xMax; const UnsignedInteger size = bounds_.getSize(); for (UnsignedInteger i = 1; i < size; ++i) { xMax = Point(dimension, bounds_[i]); probability += copulaCollection_[i].computeProbability(interval.intersect(Interval(xMin, xMax) - Interval(xMin, xMin)) * (1.0 / blockLengths_[i])); xMin = xMax; } // And the contribution of the last block xMax = Point(dimension, 1.0); probability += copulaCollection_[size].computeProbability(interval.intersect(Interval(xMin, xMax) - Interval(xMin, xMin)) * (1.0 / blockLengths_[size])); return probability; } /* Compute the covariance matrix of the distribution */ void OrdinalSumCopula::computeCovariance() const { MatrixImplementation covariance(*copulaCollection_[0].getCovariance().getImplementation()); const UnsignedInteger size = copulaCollection_.getSize(); if (size == 1) { covariance_ = covariance; isAlreadyComputedCovariance_ = true; return; } const UnsignedInteger dimension = getDimension(); const Point data(dimension * dimension, 0.25); const MatrixImplementation mask(dimension, dimension, data.begin(), data.end()); Scalar lastAi = bounds_[0]; for (UnsignedInteger i = 1; i < size - 1; ++i) { const Scalar aI = bounds_[i]; const Scalar theta = lastAi / aI; covariance = covariance * std::pow(theta, 3.0) + (*copulaCollection_[i].getCovariance().getImplementation()) * std::pow(1.0 - theta, 3.0) + mask * theta * (1.0 - theta); lastAi = aI; } const Scalar theta = lastAi; covariance = covariance * std::pow(theta, 3.0) + (*copulaCollection_[size - 1].getCovariance().getImplementation()) * std::pow(1.0 - theta, 3.0) + mask * theta * (1.0 - theta); covariance_ = covariance; isAlreadyComputedCovariance_ = true; } /* Get the Kendall concordance of the distribution */ CorrelationMatrix OrdinalSumCopula::getKendallTau() const { MatrixImplementation tauKendall(*copulaCollection_[0].getKendallTau().getImplementation()); const UnsignedInteger size = copulaCollection_.getSize(); if (size == 1) return tauKendall; const UnsignedInteger dimension = getDimension(); const Point data(dimension * dimension, 1.0); const MatrixImplementation mask(dimension, dimension, data.begin(), data.end()); Scalar lastAi = bounds_[0]; for (UnsignedInteger i = 1; i < size - 1; ++i) { const Scalar aI = bounds_[i]; const Scalar theta = lastAi / aI; tauKendall = tauKendall * std::pow(theta, 2.0) + (*copulaCollection_[i].getKendallTau().getImplementation()) * std::pow(1.0 - theta, 2.0) + mask * (2.0 * theta * (1.0 - theta)); lastAi = aI; } const Scalar theta = lastAi; tauKendall = tauKendall * std::pow(theta, 2.0) + (*copulaCollection_[size - 1].getKendallTau().getImplementation()) * std::pow(1.0 - theta, 2.0) + mask * (2.0 * theta * (1.0 - theta)); return CorrelationMatrix(tauKendall); } /* Get the PDF gradient of the distribution */ Point OrdinalSumCopula::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point OrdinalSumCopula::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::computeCDFGradient(const Point & point) const"; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar OrdinalSumCopula::computeConditionalPDF(const Scalar x, const Point & y) const { throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::computeConditionalPDF(const Scalar x, const Point & y) const"; } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar OrdinalSumCopula::computeConditionalCDF(const Scalar x, const Point & y) const { throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::computeConditionalCDF(const Scalar x, const Point & y) const"; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar OrdinalSumCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::computeConditionalQuantile(const Scalar q, const Point & y) const"; } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ OrdinalSumCopula::Implementation OrdinalSumCopula::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal distribution must be in the range [0, dim-1] and must be different"; const UnsignedInteger size = copulaCollection_.getSize(); CopulaCollection coll(size); for (UnsignedInteger i = 0; i < size; ++i) coll[i] = copulaCollection_[i].getMarginal(indices); return new OrdinalSumCopula(coll, bounds_); } /* Parameters value and description accessor */ OrdinalSumCopula::PointWithDescriptionCollection OrdinalSumCopula::getParametersCollection() const { PointWithDescriptionCollection parameters(1); // No marginal parameter // Put the dependence parameters PointWithDescription point(0); Description description(0); const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // All distributions, including copulas, must output a collection of Point of size at least 1, // even if the Point are empty const PointWithDescription copulaParameters(copulaCollection_[i].getParametersCollection()[0]); const Description parametersDescription(copulaParameters.getDescription()); const String copulaName(copulaCollection_[i].getName()); const UnsignedInteger parameterDimension = copulaParameters.getDimension(); for (UnsignedInteger j = 0; j < parameterDimension; ++j) { point.add(copulaParameters[j]); description.add(OSS() << parametersDescription[j] << "_copula_" << i); } } point.setDescription(description); point.setName(getName()); parameters[0] = point; return parameters; } // getParametersCollection void OrdinalSumCopula::setParametersCollection(const PointCollection & parametersCollection) { // Check if the given parameters are ok if (parametersCollection.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: the given collection has a size=" << parametersCollection.getSize() << " but should be of size=1"; // Dependence parameters const Point parameters(parametersCollection[0]); const UnsignedInteger parametersDimension = parameters.getDimension(); // Index within the given parametersCollection UnsignedInteger globalIndex = 0; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { // All distributions, including copulas, must output a collection of Point of size at least 1, // even if the Point are empty const UnsignedInteger atomParametersDimension = copulaCollection_[i].getParametersCollection()[0].getDimension(); // ith copula parameters Point point(atomParametersDimension); for (UnsignedInteger j = 0; j < atomParametersDimension; ++j) { if (globalIndex >= parametersDimension) throw InvalidArgumentException(HERE) << "Error: there are too few dependence parameters"; point[j] = parameters[globalIndex]; ++globalIndex; } // atom parameters copulaCollection_[i].setParametersCollection(PointCollection(1, point)); } // atoms if (globalIndex != parametersDimension) throw InvalidArgumentException(HERE) << "Error: there are too many dependence parameters, expected " << globalIndex << " parameters and got " << parametersDimension; } Point OrdinalSumCopula::getParameter() const { Point point; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { point.add(copulaCollection_[i].getParameter()); } return point; } void OrdinalSumCopula::setParameter(const Point & parameter) { UnsignedInteger globalIndex = 0; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { // All distributions, including copulas, must output a collection of Point of size at least 1, // even if the Point are empty const UnsignedInteger atomParametersDimension = copulaCollection_[i].getParameterDimension(); if (globalIndex + atomParametersDimension > parameter.getSize()) throw InvalidArgumentException(HERE) << "Error: there are too few dependence parameters"; // ith copula parameters Point newParameter(atomParametersDimension); std::copy(parameter.begin() + globalIndex, parameter.begin() + globalIndex + atomParametersDimension, newParameter.begin()); copulaCollection_[i].setParameter(newParameter); } // atoms } Description OrdinalSumCopula::getParameterDescription() const { Description description; const UnsignedInteger size = copulaCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++ i) { const Description parameterDescription(copulaCollection_[i].getParameterDescription()); const UnsignedInteger parameterDimension = parameterDescription.getSize(); for (UnsignedInteger j = 0; j < parameterDimension; ++j) { description.add(OSS() << parameterDescription[j] << "_copula_" << i); } } return description; } /* Tell if the distribution has elliptical copula */ Bool OrdinalSumCopula::hasEllipticalCopula() const { return (copulaCollection_.getSize() == 1) && copulaCollection_[0].hasEllipticalCopula(); } /* Tell if the distribution has independent copula */ Bool OrdinalSumCopula::hasIndependentCopula() const { return (copulaCollection_.getSize() == 1) && copulaCollection_[0].hasIndependentCopula(); } /* Get the isoprobabilist transformation */ OrdinalSumCopula::IsoProbabilisticTransformation OrdinalSumCopula::getIsoProbabilisticTransformation() const { throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::getIsoProbabilisticTransformation() const"; } /* Get the inverse isoprobabilist transformation */ OrdinalSumCopula::InverseIsoProbabilisticTransformation OrdinalSumCopula::getInverseIsoProbabilisticTransformation() const { throw NotYetImplementedException(HERE) << "In OrdinalSumCopula::getInverseIsoProbabilisticTransformation() const"; } /* Method save() stores the object through the StorageManager */ void OrdinalSumCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "copulaCollection_", copulaCollection_ ); adv.saveAttribute( "bounds_", bounds_ ); adv.saveAttribute( "blockLengths_", blockLengths_ ); adv.saveAttribute( "blockDistribution_", blockDistribution_ ); } /* Method load() reloads the object from the StorageManager */ void OrdinalSumCopula::load(Advocate & adv) { CopulaImplementation::load(adv); adv.loadAttribute( "copulaCollection_", copulaCollection_ ); adv.loadAttribute( "bounds_", bounds_ ); adv.loadAttribute( "blockLengths_", blockLengths_ ); adv.loadAttribute( "blockDistribution_", blockDistribution_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ParametrizedDistribution.cxx000066400000000000000000000172521307543307100275260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Parametrized distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ParametrizedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ParametrizedDistribution); static const Factory Factory_ParametrizedDistribution; /* Default constructor */ ParametrizedDistribution::ParametrizedDistribution() : DistributionImplementation() { // Nothing to do } /* Parameter constructor */ ParametrizedDistribution::ParametrizedDistribution(const DistributionParameters & distParam) : DistributionImplementation() , distributionParameters_(distParam) , distribution_(distParam.getDistribution()) { // Nothing to do } /* Virtual constructor */ ParametrizedDistribution * ParametrizedDistribution::clone() const { return new ParametrizedDistribution(*this); } /* Comparison operator */ Bool ParametrizedDistribution::operator ==(const ParametrizedDistribution & other) const { return (this == &other); } Bool ParametrizedDistribution::equals(const DistributionImplementation & other) const { const ParametrizedDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* Get the DDF of the distribution */ Point ParametrizedDistribution::computeDDF(const Point & point) const { return distribution_.computeDDF(point); } /* Get the PDF of the distribution */ Scalar ParametrizedDistribution::computePDF(const Point & point) const { return distribution_.computePDF(point); } Scalar ParametrizedDistribution::computeLogPDF(const Point & point) const { return distribution_.computeLogPDF(point); } /* Get the CDF of the distribution */ Scalar ParametrizedDistribution::computeCDF(const Point & point) const { return distribution_.computeCDF(point); } Scalar ParametrizedDistribution::computeComplementaryCDF(const Point & point) const { return distribution_.computeComplementaryCDF(point); } Complex ParametrizedDistribution::computeCharacteristicFunction(const Scalar x) const { return distribution_.computeCharacteristicFunction(x); } Complex ParametrizedDistribution::computeLogCharacteristicFunction(const Scalar x) const { return distribution_.computeLogCharacteristicFunction(x); } /* Generic implementation of the quantile computation */ Point ParametrizedDistribution::computeQuantile(const Scalar prob, const Bool tail) const { return distribution_.computeQuantile(prob, tail); } /* Get the product minimum volume interval containing a given probability of the distribution */ Interval ParametrizedDistribution::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return distribution_.computeMinimumVolumeIntervalWithMarginalProbability(prob, marginalProb); } /* Get the product bilateral confidence interval containing a given probability of the distribution */ Interval ParametrizedDistribution::computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return distribution_.computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb); } /* Get the product unilateral confidence interval containing a given probability of the distribution */ Interval ParametrizedDistribution::computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const { return distribution_.computeUnilateralConfidenceIntervalWithMarginalProbability(prob, tail, marginalProb); } /* Get the minimum volume level set containing a given probability of the distribution */ LevelSet ParametrizedDistribution::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { return distribution_.computeMinimumVolumeLevelSetWithThreshold(prob, threshold); } /* Get the PDFGradient of the distribution */ Point ParametrizedDistribution::computePDFGradient(const Point & point) const { Matrix gradient(distributionParameters_.gradient()); return gradient * distribution_.computePDFGradient(point); } /* Get the CDFGradient of the distribution */ Point ParametrizedDistribution::computeCDFGradient(const Point & point) const { Matrix gradient(distributionParameters_.gradient()); return gradient * distribution_.computeCDFGradient(point); } Point ParametrizedDistribution::getParameter() const { return distributionParameters_.inverse(distribution_.getParameter()); } void ParametrizedDistribution::setParameter(const Point & parameter) { distribution_.setParameter(distributionParameters_(parameter)); } Description ParametrizedDistribution::getParameterDescription() const { return distributionParameters_.getDescription(); } /* Check if the distribution is elliptical */ Bool ParametrizedDistribution::isElliptical() const { return distribution_.isElliptical(); } /* Check if the distribution is continuous */ Bool ParametrizedDistribution::isContinuous() const { return distribution_.isContinuous(); } /* String converter */ String ParametrizedDistribution::__repr__() const { OSS oss; oss << "class=" << ParametrizedDistribution::GetClassName() << " parameters=" << distributionParameters_ << " distribution=" << distribution_; return oss; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar ParametrizedDistribution::getRoughness() const { return distribution_.getRoughness(); } /* Get the mean of the distribution */ Point ParametrizedDistribution::getMean() const { return distribution_.getMean(); } /* Get the standard deviation of the distribution */ Point ParametrizedDistribution::getStandardDeviation() const { return distribution_.getStandardDeviation(); } /* Get the skewness of the distribution */ Point ParametrizedDistribution::getSkewness() const { return distribution_.getSkewness(); } /* Get the kurtosis of the distribution */ Point ParametrizedDistribution::getKurtosis() const { return distribution_.getKurtosis(); } /* Get the raw moments of the standardized distribution */ Point ParametrizedDistribution::getStandardMoment(const UnsignedInteger n) const { return distribution_.getStandardMoment(n); } /* Get the standard representative in the parametric family, associated with the standard moments */ ParametrizedDistribution::Implementation ParametrizedDistribution::getStandardRepresentative() const { return distribution_.getStandardRepresentative().getImplementation()->clone(); } /* Method save() stores the object through the StorageManager */ void ParametrizedDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute("distributionParameters_", distributionParameters_); } /* Method load() reloads the object from the StorageManager */ void ParametrizedDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute("distributionParameters_", distributionParameters_); distribution_ = distributionParameters_.getDistribution(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Poisson.cxx000066400000000000000000000203161307543307100241240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Poisson distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Poisson.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Poisson); static const Factory Factory_Poisson; /* Default constructor */ Poisson::Poisson() : DiscreteDistribution() , lambda_(1.0) { setName( "Poisson" ); // We set the dimension of the Poisson distribution setDimension( 1 ); computeRange(); } /* Parameters constructor */ Poisson::Poisson(const Scalar lambda) : DiscreteDistribution() , lambda_(0.0) { setName( "Poisson" ); // We set the dimension of the Poisson distribution setDimension( 1 ); // This call set also the range. setLambda(lambda); } /* Comparison operator */ Bool Poisson::operator ==(const Poisson & other) const { if (this == &other) return true; return (lambda_ == other.lambda_); } Bool Poisson::equals(const DistributionImplementation & other) const { const Poisson* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Poisson::__repr__() const { OSS oss(true); oss << "class=" << Poisson::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lambda=" << lambda_; return oss; } String Poisson::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(lambda = " << lambda_ << ")"; return oss; } /* Virtual constructor */ Poisson * Poisson::clone() const { return new Poisson(*this); } /* Get one realization of the distribution */ Point Poisson::getRealization() const { return Point(1, DistFunc::rPoisson(lambda_)); } /* Get the PDF of the distribution */ Scalar Poisson::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return 0.0; return std::exp(k * std::log(lambda_) - lambda_ - SpecFunc::LnGamma(k + 1.0)); } /* Get the CDF of the distribution */ Scalar Poisson::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 0.0; return DistFunc::pGamma(floor(k) + 1.0, lambda_, true); } Scalar Poisson::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return 1.0; return DistFunc::pGamma(floor(k) + 1.0, lambda_); } /* Get the PDF gradient of the distribution */ Point Poisson::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; Point pdfGradient(1, 0.0); if ((k < -supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_)) return pdfGradient; return Point(1, (k - lambda_) * std::exp((k - 1.0) * std::log(lambda_) - lambda_ - SpecFunc::LnGamma(k + 1.0))); } /* Get the CDF gradient of the distribution */ Point Poisson::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < -supportEpsilon_) return Point(1, 0.0); return Point(1, -std::exp(floor(k) * std::log(lambda_) - lambda_ - SpecFunc::LnGamma(floor(k) + 1.0))); } /* Get the quantile of the distribution */ Scalar Poisson::computeScalarQuantile(const Scalar prob, const Bool tail) const { return DistFunc::qPoisson(lambda_, prob, tail); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Poisson::computeCharacteristicFunction(const Scalar x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex Poisson::computeLogCharacteristicFunction(const Scalar x) const { return lambda_ * (std::exp(Complex(0.0, x)) - 1.0); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Poisson::computeGeneratingFunction(const Complex & z) const { return std::exp(computeLogGeneratingFunction(z)); } Complex Poisson::computeLogGeneratingFunction(const Complex & z) const { return lambda_ * (z - 1.0); } /* Compute the mean of the distribution */ void Poisson::computeMean() const { mean_ = Point(1, lambda_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Poisson::getStandardDeviation() const { return Point(1, std::sqrt(lambda_)); } /* Get the skewness of the distribution */ Point Poisson::getSkewness() const { return Point(1, 1.0 / std::sqrt(lambda_)); } /* Get the kurtosis of the distribution */ Point Poisson::getKurtosis() const { return Point(1, 3.0 + 1.0 / lambda_); } /* Compute the covariance of the distribution */ void Poisson::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = lambda_; isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Poisson::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 0.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (floor(interval.getUpperBound()[0])); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value accessor */ Point Poisson::getParameter() const { return Point(1, lambda_); } void Poisson::setParameter(const Point & parameter) { if (parameter.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: expected 1 value, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Poisson(parameter[0]); setWeight(w); } /* Parameters description accessor */ Description Poisson::getParameterDescription() const { return Description(1, "lambda"); } /* Lambda accessor */ void Poisson::setLambda(const Scalar lambda) { if (!(lambda > 0.0)) throw InvalidArgumentException(HERE) << "Lambda must be positive, here lambda=" << lambda; if (lambda != lambda_) { lambda_ = lambda; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda accessor */ Scalar Poisson::getLambda() const { return lambda_; } /* Method save() stores the object through the StorageManager */ void Poisson::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "lambda_", lambda_ ); } /* Method load() reloads the object from the StorageManager */ void Poisson::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "lambda_", lambda_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/PoissonFactory.cxx000066400000000000000000000063761307543307100254660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Poisson distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PoissonFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PoissonFactory); static const Factory Factory_PoissonFactory; /* Default constructor */ PoissonFactory::PoissonFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ PoissonFactory * PoissonFactory::clone() const { return new PoissonFactory(*this); } /* Here is the interface that all derived class must implement */ PoissonFactory::Implementation PoissonFactory::build(const Sample & sample) const { return buildAsPoisson(sample).clone(); } PoissonFactory::Implementation PoissonFactory::build(const Point & parameters) const { return buildAsPoisson(parameters).clone(); } PoissonFactory::Implementation PoissonFactory::build() const { return buildAsPoisson().clone(); } Poisson PoissonFactory::buildAsPoisson(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Poisson distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Poisson distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); // Check if all the components of the sample are integers > 0 const UnsignedInteger size = sample.getSize(); Scalar lambda = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { Scalar x = sample[i][0]; if ((x != trunc(x)) || (x < 0.0)) throw InvalidArgumentException(HERE) << "Error: can build a Poisson distribution only from a sample with integer components >= 0, here sample[" << i << "][0]=" << x; lambda += x; } if (!(lambda > 0.0) || SpecFunc::IsInf(lambda)) throw InvalidArgumentException(HERE) << "Error: can build a poisson distribution only if lambda > 0, here lambda=" << lambda; Poisson result(lambda / size); result.setDescription(sample.getDescription()); return result; } Poisson PoissonFactory::buildAsPoisson(const Point & parameters) const { try { Poisson distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Poisson distribution from the given parameters"; } } Poisson PoissonFactory::buildAsPoisson() const { return Poisson(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/PosteriorDistribution.cxx000066400000000000000000000264571307543307100270740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The PosteriorDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PosteriorDistribution.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PosteriorDistribution); static const Factory Factory_PosteriorDistribution; /* Default constructor */ PosteriorDistribution::PosteriorDistribution() : ContinuousDistribution(), conditionalDistribution_(), observations_() { setName("PosteriorDistribution"); // First, set the observations observations_ = Sample(1, conditionalDistribution_.getConditionedDistribution().getMean()); // Then, set the conditional distribution. It also set the dimension. setConditionalDistribution(conditionalDistribution_); computeRange(); } /* Parameters constructor */ PosteriorDistribution::PosteriorDistribution(const ConditionalDistribution & conditionalDistribution, const Sample & observations) : ContinuousDistribution(), conditionalDistribution_(), observations_(observations) { setName("PosteriorDistribution"); if (observations.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a posterior distribution with no observation."; setConditionalDistribution(conditionalDistribution); } /* Comparison operator */ Bool PosteriorDistribution::operator ==(const PosteriorDistribution & other) const { if (this == &other) return true; return (conditionalDistribution_ == other.conditionalDistribution_) && (observations_ == other.observations_); } Bool PosteriorDistribution::equals(const DistributionImplementation & other) const { const PosteriorDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String PosteriorDistribution::__repr__() const { OSS oss; oss << "class=" << PosteriorDistribution::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " conditional distribution=" << conditionalDistribution_ << " observations=" << observations_; return oss; } String PosteriorDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(conditional distribution = " << conditionalDistribution_.__str__() << ", observations = \n" << observations_.__str__(offset) << ")"; return oss; } /* Virtual constructor */ PosteriorDistribution * PosteriorDistribution::clone() const { return new PosteriorDistribution(*this); } /* Compute the likelihood of the observations */ Point PosteriorDistribution::computeLikelihood(const Point & theta) const { return Point(1, std::exp(computeLogLikelihood(theta)[0])); } /* Compute the log-likelihood of the observations */ Point PosteriorDistribution::computeLogLikelihood(const Point & theta) const { Distribution conditionedDistribution(conditionalDistribution_.getConditionedDistribution()); conditionedDistribution.setParameter(theta); Scalar logLikelihood = 0.0; const UnsignedInteger size = observations_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar atomicValue = conditionedDistribution.computeLogPDF(observations_[i]); logLikelihood += atomicValue; } return Point(1, logLikelihood); } /* Get the PDF of the distribution */ Scalar PosteriorDistribution::computePDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const Scalar value = conditionalDistribution_.getConditioningDistribution().computeLogPDF(point) - logNormalizationFactor_ + computeLogLikelihood(point)[0]; return std::exp(value); } /* Get the CDF of the distribution */ Scalar PosteriorDistribution::computeCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); Description inputDescription(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++i) inputDescription[i] = String(OSS() << "x" << i); const SymbolicFunction f(inputDescription, Description(1, "1")); const Scalar cdf = conditionalDistribution_.computeExpectation(f, point)[0]; return cdf; } /* Parameters value and description accessor */ PosteriorDistribution::PointWithDescriptionCollection PosteriorDistribution::getParametersCollection() const { throw NotYetImplementedException(HERE) << "In PosteriorDistribution::getParametersCollection() const"; } void PosteriorDistribution::setParametersCollection(const PointCollection & parametersCollection) { throw NotYetImplementedException(HERE) << "In PosteriorDistribution::setParametersCollection(const PointCollection & parametersCollection)"; } /* Conditional distribution accessor */ void PosteriorDistribution::setConditionalDistribution(const ConditionalDistribution & conditionalDistribution) { if (observations_.getDimension() != conditionalDistribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the conditioned distribution defining the conditional distribution must have the same dimension as the observations."; conditionalDistribution_ = conditionalDistribution; setDimension(conditionalDistribution.getConditioningDistribution().getDimension()); logNormalizationFactor_ = 0.0; const UnsignedInteger size = observations_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) logNormalizationFactor_ += conditionalDistribution_.computeLogPDF(observations_[i]); if (logNormalizationFactor_ == SpecFunc::LogMinScalar) throw InvalidArgumentException(HERE) << "Error: the normalization factor is null with the given conditional distribution and observations."; computeRange(); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } ConditionalDistribution PosteriorDistribution::getConditionalDistribution() const { return conditionalDistribution_; } /* Observations accessor */ void PosteriorDistribution::setObservations(const Sample & observations) { if (observations.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot use a posterior distribution with no observation."; if (observations.getDimension() != conditionalDistribution_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the conditioned distribution defining the conditional distribution must have the same dimension as the observations."; observations_ = observations; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } Sample PosteriorDistribution::getObservations() const { return observations_; } /* Log normalization factor accessor */ Scalar PosteriorDistribution::getLogNormalizationFactor() const { return logNormalizationFactor_; } /* Compute the numerical range of the distribution given the parameters values */ void PosteriorDistribution::computeRange() { setRange(conditionalDistribution_.conditioningDistribution_.getRange()); } /* Compute the mean of the distribution */ void PosteriorDistribution::computeMean() const { Description inputDescription(Description::BuildDefault(getDimension(), "x")); const SymbolicFunction meanFunction(inputDescription, inputDescription); const Function likelihood(bindMethod(PosteriorDistribution(*this), &PosteriorDistribution::computeLikelihood, getDimension(), 1)); mean_ = conditionalDistribution_.computeExpectation(likelihood * meanFunction, getRange().getUpperBound()) / std::exp(logNormalizationFactor_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point PosteriorDistribution::getStandardDeviation() const { // To insure that the covariance has been computed getCovariance(); Point sigma(getDimension()); for (UnsignedInteger i = 0; i < getDimension(); ++i) sigma[i] = std::sqrt(covariance_(i, i)); return sigma; } /* Get the skewness of the distribution */ Point PosteriorDistribution::getSkewness() const { throw NotYetImplementedException(HERE) << "In PosteriorDistribution::getSkewness() const"; } /* Get the kurtosis of the distribution */ Point PosteriorDistribution::getKurtosis() const { throw NotYetImplementedException(HERE) << "In PosteriorDistribution::getKurtosis() const"; } /* Compute the covariance of the distribution */ void PosteriorDistribution::computeCovariance() const { const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); // To insure that the mean has been computed getMean(); Description inputDescription(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) inputDescription[i] = String(OSS() << "x" << i); Description formulas((dimension * (dimension + 1)) / 2); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar muI = mean_[i]; for (UnsignedInteger j = 0; j <= i; ++j) { const Scalar muJ = mean_[j]; formulas[index] = String(OSS() << "(x" << i << "-" << muI << ")*(x" << j << "-" << muJ << ")"); ++index; } } const SymbolicFunction covarianceFunction(inputDescription, formulas); const Function likelihood(bindMethod(PosteriorDistribution(*this), &PosteriorDistribution::computeLikelihood, getDimension(), 1)); const Point result(conditionalDistribution_.computeExpectation(likelihood * covarianceFunction, getRange().getUpperBound()) / std::exp(logNormalizationFactor_)); index = 0; for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { covariance_(i, j) = result[index]; ++index; } isAlreadyComputedCovariance_ = true; } /* Method save() stores the object through the StorageManager */ void PosteriorDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "conditionalDistribution_", conditionalDistribution_ ); adv.saveAttribute( "observations_", observations_ ); adv.saveAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void PosteriorDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "conditionalDistribution_", conditionalDistribution_ ); adv.loadAttribute( "observations_", observations_ ); adv.loadAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ProductDistribution.cxx000066400000000000000000001144011307543307100265110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ProductDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/ProductDistribution.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Uniform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProductDistribution); static const Factory Factory_ProductDistribution; /* Default constructor */ ProductDistribution::ProductDistribution() : ContinuousDistribution() , left_(Uniform(0.0, 1.0)) , right_(Uniform(0.0, 1.0)) { setName("ProductDistribution"); setDimension(1); // Adjust the truncation interval and the distribution range computeRange(); } /* Parameters constructor to use when the two bounds are finite */ ProductDistribution::ProductDistribution(const Distribution & left, const Distribution & right) : ContinuousDistribution() , left_() , right_() { setName("ProductDistribution"); setLeft(left); setRight(right); computeRange(); } /* Comparison operator */ Bool ProductDistribution::operator ==(const ProductDistribution & other) const { if (this == &other) return true; return (left_ == other.getLeft()) && (right_ == other.getRight()); } Bool ProductDistribution::equals(const DistributionImplementation & other) const { const ProductDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ProductDistribution::__repr__() const { OSS oss; oss << "class=" << ProductDistribution::GetClassName() << " name=" << getName() << " left=" << left_ << " right=" << right_; return oss; } String ProductDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(" << left_.__str__() << " * " << right_.__str__() << ")"; return oss; } /* Virtual constructor */ ProductDistribution * ProductDistribution::clone() const { return new ProductDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void ProductDistribution::computeRange() { const Scalar a = left_.getRange().getLowerBound()[0]; const Scalar b = left_.getRange().getUpperBound()[0]; const Scalar c = right_.getRange().getLowerBound()[0]; const Scalar d = right_.getRange().getUpperBound()[0]; const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; setRange(Interval(std::min(std::min(ac, ad), std::min(bc, bd)), std::max(std::max(ac, ad), std::max(bc, bd)))); } /* Get one realization of the distribution */ Point ProductDistribution::getRealization() const { return Point(1, left_.getRealization()[0] * right_.getRealization()[0]); } /* Get the PDF of the distribution: PDF(x) = \int_R PDF_left(u) * PDF_right(x / u) * du / |u| */ Scalar ProductDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; if ((x < a) || (x > b)) return 0.0; const Scalar aLeft = left_.getRange().getLowerBound()[0]; const Scalar bLeft = left_.getRange().getUpperBound()[0]; const Scalar aRight = right_.getRange().getLowerBound()[0]; const Scalar bRight = right_.getRange().getUpperBound()[0]; // First, the case where the joint support of left and right is included in a unique quadrant if ((aLeft >= 0.0) && (aRight >= 0.0)) { LOGDEBUG("In ProductDistribution::computePDF, Q1"); const Scalar value = computePDFQ1(x, aLeft, bLeft, aRight, bRight); LOGDEBUG(OSS() << "pdf=" << value); return value; } if ((bLeft <= 0.0) && (aRight >= 0.0)) { LOGDEBUG("In ProductDistribution::computePDF, Q2"); const Scalar value = computePDFQ2(x, aLeft, bLeft, aRight, bRight); LOGDEBUG(OSS() << "pdf=" << value); return value; } if ((bLeft <= 0.0) && (bRight <= 0.0)) { LOGDEBUG("In ProductDistribution::computePDF, Q3"); const Scalar value = computePDFQ3(x, aLeft, bLeft, aRight, bRight); LOGDEBUG(OSS() << "pdf=" << value); return value; } if ((aLeft >= 0.0) && (bRight <= 0.0)) { LOGDEBUG("In ProductDistribution::computePDF, Q3"); const Scalar value = computePDFQ4(x, aLeft, bLeft, aRight, bRight); LOGDEBUG(OSS() << "pdf=" << value); return value; } // Second, the case where the support is in Q1 U Q2 if (aRight > 0.0) { LOGDEBUG("In ProductDistribution::computePDF, Q1 U Q2"); const Scalar q1 = computePDFQ1(x, 0.0, bLeft, aRight, bRight); const Scalar q2 = computePDFQ2(x, aLeft, 0.0, aRight, bRight); LOGDEBUG(OSS() << "value Q1=" << q1 << ", value Q2=" << q2 << ", pdf=" << q1 + q2); return q1 + q2; } // Third, the case where the support is in Q3 U Q4 if (bRight <= 0.0) { LOGDEBUG("In ProductDistribution::computePDF, Q3 U Q4"); const Scalar q3 = computePDFQ3(x, aLeft, 0.0, aRight, bRight); const Scalar q4 = computePDFQ4(x, 0.0, bLeft, aRight, bRight); LOGDEBUG(OSS() << "value Q3=" << q3 << ", value Q4=" << q4 << ", pdf=" << q3 + q4); return q3 + q4; } // Fourth, the case where the support is in Q1 U Q4 if (aLeft >= 0.0) { LOGDEBUG("In ProductDistribution::computePDF, Q1 U Q4"); const Scalar q1 = computePDFQ1(x, aLeft, bLeft, 0.0, bRight); const Scalar q4 = computePDFQ4(x, aLeft, bLeft, aRight, 0.0); LOGDEBUG(OSS() << "value Q1=" << q1 << ", value Q4=" << q4 << ", pdf=" << q1 + q4); return q1 + q4; } // Fifth, the case where the support is in Q2 U Q3 if (bLeft <= 0.0) { LOGDEBUG("In ProductDistribution::computePDF, Q2 U Q3"); const Scalar q2 = computePDFQ2(x, aLeft, bLeft, 0.0, bRight); const Scalar q3 = computePDFQ3(x, aLeft, bLeft, aRight, 0.0); LOGDEBUG(OSS() << "value Q2=" << q2 << ", value Q3=" << q3 << ", pdf=" << q2 + q3); return q2 + q3; } // Sixth, the case where the support is in Q1 U Q2 U Q3 U Q4 LOGDEBUG("In ProductDistribution::computePDF, Q1 U Q2 U Q3 U Q4"); const Scalar q1 = computePDFQ1(x, 0.0, bLeft, 0.0, bRight); const Scalar q2 = computePDFQ2(x, aLeft, 0.0, 0.0, bRight); const Scalar q3 = computePDFQ3(x, aLeft, 0.0, aRight, 0.0); const Scalar q4 = computePDFQ4(x, 0.0, bLeft, aRight, 0.0); LOGDEBUG(OSS() << "value Q1=" << q1 << "value Q2=" << q2 << ", value Q3=" << q3 << "value Q4=" << q4 << ", pdf=" << q1 + q2 + q3 + q4); return q1 + q2 + q3 + q4; } /* Get the PDF of the distribution: PDF(x) = \int_Q1 PDF_left(u) * PDF_right(x / u) * du / |u| when left >= 0, right >= 0 */ Scalar ProductDistribution::computePDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computePDFQ1, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); // Here the support is included into [ac, bd] if ((x < ac) || (x >= bd)) return 0.0; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { LOGDEBUG("c == 0.0"); if (x < ad) { LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << ad << " <= " << x); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (ad <= bc) { LOGDEBUG("ad <= bc"); if (x < ad) { LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < bc) { LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG("ad > bc"); if (x < bc) { LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < ad) { LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } /* Get the PDF of the distribution: PDF(x) = \int_Q2 PDF_left(u) * PDF_right(x / u) * du / |u| when left <= 0, right >= 0 */ Scalar ProductDistribution::computePDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computePDFQ2, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); // Here the support is included into [ad, bc] if ((x < ad) || (x >= bc)) return 0.0; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { LOGDEBUG("c == 0.0"); if (x < bd) { LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << 0.0); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (ac <= bd) { LOGDEBUG("ac <= bd"); if (x < ac) { LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < bd) { LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG("ac > bd"); if (x < bd) { LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < ac) { LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } /* Get the PDF of the distribution: PDF(x) = \int_Q3 PDF_left(u) * PDF_right(x / u) * du / |u| when left <= 0, right <= 0 */ Scalar ProductDistribution::computePDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computePDFQ3, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); // Here the support is included into [bd, ac] if ((x < bd) || (x >= ac)) return 0.0; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { LOGDEBUG("d == 0.0"); if (x < bc) { LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (ad <= bc) { LOGDEBUG("ad <= bc"); if (x < ad) { LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < bc) { LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG("ad > bc"); if (x < bc) { LOGDEBUG(OSS() << x << " < " << bc); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < ad) { LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(x / d, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } /* Get the PDF of the distribution: PDF(x) = \int_Q4 PDF_left(u) * PDF_right(x / u) * du / |u| when left >= 0, right <= 0 */ Scalar ProductDistribution::computePDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computePDFQ4, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); // Here the support is included into [bc, ad] if ((x < bc) || (x >= ad)) return 0.0; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { LOGDEBUG("d == 0.0"); if (x < ac) { LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << 0.0); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (bd <= ac) { LOGDEBUG("bd <= ac"); if (x < bd) { LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < ac) { LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG("In ProductDistribution::computePDFQ4, bd > ac"); LOGDEBUG("bd > ac"); if (x < ac) { LOGDEBUG(OSS() << x << " < " << ac); const Scalar value = algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if (x < bd) { LOGDEBUG(OSS() << x << " < " << bd); const Scalar value = algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << bd << " <= " << x << " < " << ad); const Scalar value = algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } /* Get the CDF of the distribution */ Scalar ProductDistribution::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; if (x <= a) return 0.0; if (x >= b) return 1.0; const Scalar aLeft = left_.getRange().getLowerBound()[0]; const Scalar bLeft = left_.getRange().getUpperBound()[0]; Scalar value = 0.0; // First, compute the negative part GaussKronrod algo; const CDFKernelWrapper cdfKernelWrapper(left_, right_, x); if (aLeft < 0) { const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::evalComplementary, 1, 1)); value += algo.integrate(cdfKernel, Interval(aLeft, std::min(bLeft, 0.0)), cdfEpsilon_)[0]; } if (bLeft >= 0) { const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::eval, 1, 1)); value += algo.integrate(cdfKernel, Interval(std::max(0.0, aLeft), bLeft), cdfEpsilon_)[0]; } return value; } /* Get the CDF of the distribution: CDF(x) = \int_Q1 PDF_left(u) * CDF_right(x / u) * du when left >= 0, right >= 0 */ Scalar ProductDistribution::computeCDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computeCDFQ1, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); GaussKronrod algo; const CDFKernelWrapper cdfKernelWrapper(left_, right_, x); const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { LOGDEBUG("c == 0.0"); if ((x >= 0.0) && (x < ad)) { LOGDEBUG(OSS() << 0.0 << " <= " << x << " < " << ad); const Scalar value = algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ad) && (x < bd)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) + algo.integrate(cdfKernel, Interval(x / d, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ac << ", " << 0.0 << "]"); return 0.0; } if (ad <= bc) { LOGDEBUG("ad <= bc"); if ((x >= ac) && (x < ad)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << ad); const Scalar value = algo.integrate(cdfKernel, Interval(a, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ad) && (x < bc)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bc); const Scalar value = left_.computeCDF(x / d) + algo.integrate(cdfKernel, Interval(x / d, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bc) && (x < bd)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) + algo.integrate(cdfKernel, Interval(x / d, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ac << ", " << bd << "]"); return 0.0; } LOGDEBUG("ad > bc"); if ((x >= ac) && (x < bc)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << bc); const Scalar value = algo.integrate(cdfKernel, Interval(a, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bc) && (x < ad)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ad); const Scalar value = algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ad) && (x < bd)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) + algo.integrate(cdfKernel, Interval(x / d, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ac << ", " << bd << "]"); return 0.0; } /* Get the CDF of the distribution: CDF(x) = 1 - \int_Q2 PDF_left(u) * CDF_right(x / u) * du when left <= 0, right >= 0 */ Scalar ProductDistribution::computeCDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computeCDFQ2, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); GaussKronrod algo; const CDFKernelWrapper cdfKernelWrapper(left_, right_, x); const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { LOGDEBUG("c == 0.0"); if ((x >= ad) && (x < bd)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) - algo.integrate(cdfKernel, Interval(a, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bd) && (x < 0.0)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bd); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ad << ", " << 0.0 << "]"); return 0.0; } if (ac <= bd) { LOGDEBUG("ac <= bd"); if ((x >= ad) && (x < ac)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << ac); const Scalar value = left_.computeCDF(x / d) - algo.integrate(cdfKernel, Interval(a, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ac) && (x < bd)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) - algo.integrate(cdfKernel, Interval(x / c, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bd) && (x < bc)) { LOGDEBUG(OSS() << bd << " <= " << x << " < " << bc); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(x / c, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ad << ", " << bc << "]"); return 0.0; } LOGDEBUG("ac > bd"); if ((x >= ad) && (x < bd)) { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bd); const Scalar value = left_.computeCDF(x / d) - algo.integrate(cdfKernel, Interval(a, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bd) && (x < ac)) { LOGDEBUG(OSS() << bd << " <= " << x << " < " << ac); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ac) && (x < bc)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << bc); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(x / c, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << ad << ", " << bc << "]"); return 0.0; } /* Get the CDF of the distribution: CDF(x) = 1 - \int_Q3 PDF_left(u) * CDF_right(x / u) * du when left <= 0, right <= 0 */ Scalar ProductDistribution::computeCDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computePDFQ3, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); GaussKronrod algo; const CDFKernelWrapper cdfKernelWrapper(left_, right_, x); const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { LOGDEBUG("d == 0.0"); if ((x >= 0.0) && (x < bc)) { LOGDEBUG(OSS() << 0.0 << " <= " << x << " < " << bc); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bc) && (x < ac)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ac); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << 0.0 << ", " << ac << "]"); return 0.0; } if (ad <= bc) { LOGDEBUG("ad <= bc"); if ((x >= bd) && (x < bc)) // BUG { LOGDEBUG(OSS() << bd << " <= " << x << " < " << ad); const Scalar value = left_.computeComplementaryCDF(x / d) - algo.integrate(cdfKernel, Interval(x / d, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bc) && (x < ad)) // BUG { LOGDEBUG(OSS() << ad << " <= " << x << " < " << bc); const Scalar value = left_.computeComplementaryCDF(x / d) - algo.integrate(cdfKernel, Interval(x / d, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ad) && (x < ac)) // BUG { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ac); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << bd << ", " << ac << "]"); return 0.0; } LOGDEBUG("ad > bc"); if ((x >= bd) && (x < ad)) // BUG { LOGDEBUG(OSS() << bd << " <= " << x << " < " << bc); const Scalar value = left_.computeComplementaryCDF(x / d) - algo.integrate(cdfKernel, Interval(x / d, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ad) && (x < bc)) // BUG { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ad); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bc) && (x < ac)) // BUG { LOGDEBUG(OSS() << ad << " <= " << x << " < " << ac); const Scalar value = 1.0 - algo.integrate(cdfKernel, Interval(a, x / c), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << bd << ", " << ac << "]"); return 0.0; } /* Get the CDF of the distribution: CDF(x) = \int_Q4 PDF_left(u) * CDF_right(x / u) * du when left >= 0, right <= 0 */ Scalar ProductDistribution::computeCDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { LOGDEBUG(OSS() << "In ProductDistribution::computeCDFQ4, x=" << x << ", a=" << a << ", b=" << b << ", c=" << c << ", d=" << d); const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; LOGDEBUG(OSS() << "ac=" << ac << ", ad=" << ad << ", bc=" << bc << ", bd=" << bd); GaussKronrod algo; const CDFKernelWrapper cdfKernelWrapper(left_, right_, x); const Function cdfKernel(bindMethod(cdfKernelWrapper, &CDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { LOGDEBUG("d == 0.0"); if ((x >= bc) && (x < 0.0)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << 0.0); const Scalar value = algo.integrate(cdfKernel, Interval(x / c, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ac) && (x < 0.0)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ac); const Scalar value = algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << bc << ", " << 0.0 << "]"); return 0.0; } if (bd <= ac) { LOGDEBUG("bd <= ac"); if ((x >= bc) && (x < bd)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << bd); const Scalar value = algo.integrate(cdfKernel, Interval(x / c, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bd) && (x < ac)) { LOGDEBUG(OSS() << bd << " <= " << x << " < " << ac); const Scalar value = left_.computeComplementaryCDF(x / d) + algo.integrate(cdfKernel, Interval(x / c, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ac) && (x < ad)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << ad); const Scalar value = left_.computeComplementaryCDF(x / d) + algo.integrate(cdfKernel, Interval(a, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << bc << ", " << ad << "]"); return 0.0; } LOGDEBUG("bd > ac"); if ((x >= bc) && (x < ac)) { LOGDEBUG(OSS() << bc << " <= " << x << " < " << ac); const Scalar value = algo.integrate(cdfKernel, Interval(x / c, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= ac) && (x < bd)) { LOGDEBUG(OSS() << ac << " <= " << x << " < " << bd); const Scalar value = algo.integrate(cdfKernel, Interval(a, b), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } if ((x >= bd) && (x < ad)) { LOGDEBUG(OSS() << bd << " <= " << x << " < " << ad); const Scalar value = left_.computeComplementaryCDF(x / d) + algo.integrate(cdfKernel, Interval(a, x / d), cdfEpsilon_)[0]; LOGDEBUG(OSS() << "value=" << value); return value; } LOGDEBUG(OSS() << x << " not in [" << bc << ", " << ad << "]"); return 0.0; } /* Compute the probability content of an interval */ Scalar ProductDistribution::computeProbability(const Interval & interval) const { return computeProbabilityContinuous(interval); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex ProductDistribution::computeCharacteristicFunction(const Scalar x) const { const Scalar muLeft = left_.getMean()[0]; const Scalar muRight = right_.getMean()[0]; const Scalar varLeft = left_.getCovariance()(0, 0); const Scalar varRight = right_.getCovariance()(0, 0); if (x * x * (varLeft + muLeft * muLeft + varRight + muRight * muRight) < 2.0 * SpecFunc::ScalarEpsilon) return Complex(1.0, -x * muLeft * muRight); if (std::abs(x) > ResourceMap::GetAsScalar("ProductDistribution-LargeCharacteristicFunctionArgument")) return ContinuousDistribution::computeCharacteristicFunction(x); Complex result(0.0); const Scalar aLeft = left_.getRange().getLowerBound()[0]; const Scalar bLeft = left_.getRange().getUpperBound()[0]; GaussKronrod algo; const CFKernelWrapper cfKernelWrapper(left_, right_, x); const Function cfKernel(bindMethod(cfKernelWrapper, &CFKernelWrapper::eval, 1, 2)); Scalar negativeError = 0.0; const Point negativePart(algo.integrate(cfKernel, Interval(aLeft, muLeft), negativeError)); Scalar positiveError = 0.0; const Point positivePart(algo.integrate(cfKernel, Interval(muLeft, bLeft), positiveError)); Complex value(negativePart[0] + positivePart[0], negativePart[1] + positivePart[1]); return value; } /* Compute the mean of the distribution */ void ProductDistribution::computeMean() const { mean_ = Point(1, left_.getMean()[0] * right_.getMean()[0]); isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void ProductDistribution::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar meanLeft = left_.getMean()[0]; const Scalar meanRight = right_.getMean()[0]; const Scalar varLeft = left_.getCovariance()(0, 0); const Scalar varRight = right_.getCovariance()(0, 0); covariance_(0, 0) = meanLeft * meanLeft * varRight + meanRight * meanRight * varLeft + varLeft * varRight; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point ProductDistribution::getParameter() const { Point point(left_.getParameter()); point.add(right_.getParameter()); return point; } void ProductDistribution::setParameter(const Point & parameter) { const UnsignedInteger leftSize = left_.getParameterDimension(); const UnsignedInteger rightSize = right_.getParameterDimension(); if (parameter.getSize() != leftSize + rightSize) throw InvalidArgumentException(HERE) << "Error: expected " << leftSize + rightSize << " values, got " << parameter.getSize(); Point newLeftParameters(leftSize); Point newRightParameters(rightSize); std::copy(parameter.begin(), parameter.begin() + leftSize, newLeftParameters.begin()); std::copy(parameter.begin() + leftSize, parameter.end(), newRightParameters.begin()); Distribution newLeft(left_); Distribution newRight(right_); newLeft.setParameter(newLeftParameters); newRight.setParameter(newRightParameters); const Scalar w = getWeight(); *this = ProductDistribution(newLeft, newRight); setWeight(w); } /* Parameters description accessor */ Description ProductDistribution::getParameterDescription() const { Description description(left_.getParameterDescription()); description.add(right_.getParameterDescription()); return description; } /* Check if the distribution is elliptical */ Bool ProductDistribution::isElliptical() const { return (left_.isElliptical() && (std::abs(left_.getRange().getLowerBound()[0] + left_.getRange().getUpperBound()[0]) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"))) || (right_.isElliptical() && (std::abs(right_.getRange().getLowerBound()[0] + right_.getRange().getUpperBound()[0]) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"))); } /* Left accessor */ void ProductDistribution::setLeft(const Distribution & left) { if (left.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can multiply only distribution with dimension=1, here dimension=" << left.getDimension(); if (!left.isContinuous()) throw InvalidArgumentException(HERE) << "Error: can multiply only continuous distributions"; left_ = left; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = left_.getImplementation()->isParallel(); computeRange(); } Distribution ProductDistribution::getLeft() const { return left_; } /* Right accessor */ void ProductDistribution::setRight(const Distribution & right) { if (right.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can multiply only distribution with dimension=1, here dimension=" << right.getDimension(); if (!right.isContinuous()) throw InvalidArgumentException(HERE) << "Error: can multiply only continuous distributions"; right_ = right; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = right_.getImplementation()->isParallel(); computeRange(); } Distribution ProductDistribution::getRight() const { return right_; } Bool ProductDistribution::isContinuous() const { return left_.isContinuous() && right_.isContinuous(); } /* Tell if the distribution is discrete */ Bool ProductDistribution::isDiscrete() const { return left_.isDiscrete() && right_.isDiscrete(); } /* Tell if the distribution is integer valued */ Bool ProductDistribution::isIntegral() const { return left_.isIntegral() && right_.isIntegral(); } /* Get the PDF singularities inside of the range - 1D only */ Point ProductDistribution::getSingularities() const { if (getRange().getLowerBound()[0] >= 0.0) return Point(0); if (getRange().getUpperBound()[0] <= 0.0) return Point(0); return Point(1); } /* Method save() stores the object through the StorageManager */ void ProductDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "left_", left_ ); adv.saveAttribute( "right_", right_ ); } /* Method load() reloads the object from the StorageManager */ void ProductDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "left_", left_ ); adv.loadAttribute( "right_", right_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/RandomMixture.cxx000066400000000000000000004023601307543307100252730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all RandomMixtures * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include #include "openturns/RandomMixture.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Interval.hxx" #include "openturns/Tuples.hxx" #include "openturns/Function.hxx" #include "openturns/Log.hxx" #include "openturns/Triangular.hxx" #include "openturns/Trapezoidal.hxx" #include "openturns/Uniform.hxx" #include "openturns/Exponential.hxx" #include "openturns/Gamma.hxx" #include "openturns/Mixture.hxx" #include "openturns/Dirac.hxx" #include "openturns/Bernoulli.hxx" #include "openturns/Binomial.hxx" #include "openturns/Poisson.hxx" #include "openturns/ComplexTensor.hxx" #include "openturns/FFT.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/TBB.hxx" #include "openturns/OSS.hxx" #include "openturns/SobolSequence.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_Distribution; typedef Collection DistributionCollection; typedef Collection PointCollection; typedef Collection ComplexCollection; CLASSNAMEINIT(RandomMixture); static const Factory Factory_RandomMixture; /* Default constructor */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Scalar constant) : DistributionImplementation() , distributionCollection_() , constant_(Point(1, constant)) , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); setDimension(1); weights_ = Matrix(1, coll.getSize(), Point(coll.getSize(), 1.0)); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling // the setDistributionCollection() method that do it for us. // This call set also the range. setDistributionCollection( coll ); } /* Default constructor */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Point & weights, const Scalar constant) : DistributionImplementation() , distributionCollection_() , constant_(Point(1, constant)) , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); setDimension(1); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling // the setDistributionCollection() method that do it for us. if (weights.getDimension() != coll.getSize()) throw InvalidArgumentException(HERE) << "Error: the weights collection must have the same size as the distribution collection"; weights_ = Matrix(1, coll.getSize(), weights); // This call set also the range. setDistributionCollection(coll); } /* Parameter constructor - nD */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Matrix & weights, const Point constant) : DistributionImplementation() , distributionCollection_() , constant_(constant) , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); if (constant.getSize() > 3) throw InvalidDimensionException(HERE) << "RandomMixture only possible for dimension 1,2 or 3"; setDimension(constant.getSize()); // We could NOT set distributionCollection_ in the member area of the constructor // because we must check before if the collection is valid (ie, if all the // distributions of the collection have the same dimension). We do this by calling // the setDistributionCollection() method that do it for us. if (weights.getNbColumns() != coll.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight matrix must have the same column numbers as the distribution collection's size"; if (weights.getNbRows() != constant.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight matrix must have the same row numbers as the distribution dimension"; // This call set also the range. weights_ = weights; setDistributionCollection(coll); } /* Parameter constructor - nD */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Matrix & weights) : DistributionImplementation() , distributionCollection_() , constant_() , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); const UnsignedInteger dimension = weights.getNbRows(); if (dimension > 3) throw InvalidDimensionException(HERE) << "RandomMixture only possible for dimension 1,2 or 3"; constant_ = Point(dimension, 0.0); setDimension(dimension); if (weights.getNbColumns() != coll.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight matrix must have the same column numbers as the distribution collection's size"; weights_ = weights; setDistributionCollection(coll); } /* Parameter constructor - nD */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Sample & weights, const Point constant) : DistributionImplementation() , distributionCollection_() , constant_(constant) , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); const UnsignedInteger dimension = constant.getSize(); if (dimension > 3) throw InvalidDimensionException(HERE) << "RandomMixture only possible for dimension 1,2 or 3"; setDimension(dimension); if (weights.getSize() != coll.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight sample must have the same size as the distribution collection's size"; if (weights.getDimension() != constant.getDimension()) throw InvalidArgumentException(HERE) << "Error: the weight sample must have the same dimension as the distribution dimension"; weights_ = Matrix(weights.getDimension(), weights.getSize(), weights.getImplementation()->getData()); setDistributionCollection(coll); } /* Parameter constructor - nD */ RandomMixture::RandomMixture(const DistributionCollection & coll, const Sample & weights) : DistributionImplementation() , distributionCollection_() , weights_() , inverseWeights_() , detWeightsInverse_() , fftAlgorithm_() , isAnalytical_(false) , blockMin_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMin" )) , blockMax_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultBlockMax" )) , maxSize_(ResourceMap::GetAsUnsignedInteger( "RandomMixture-DefaultMaxSize" )) , storedSize_(0) , characteristicValuesCache_(0) , alpha_(ResourceMap::GetAsScalar( "RandomMixture-DefaultAlpha" )) , beta_(ResourceMap::GetAsScalar( "RandomMixture-DefaultBeta" )) , pdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultPDFEpsilon" )) , cdfPrecision_(ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" )) , equivalentNormal_() { setName("RandomMixture"); const UnsignedInteger dimension = weights.getDimension(); if (dimension > 3) throw InvalidDimensionException(HERE) << "RandomMixture only possible for dimension 1,2 or 3"; constant_ = Point(dimension, 0.0); setDimension(dimension); if (weights.getSize() != coll.getSize()) throw InvalidArgumentException(HERE) << "Error: the weight sample must have the same size as the distribution collection's size"; weights_ = Matrix(weights.getDimension(), weights.getSize(), weights.getImplementation()->getData()); setDistributionCollection(coll); } /* Compute the numerical range of the distribution given the parameters values */ void RandomMixture::computeRange() { const UnsignedInteger size = distributionCollection_.getSize(); // First, compute the *exact* range. It will be used to clip the asymptotic range if Poisson's formula is used (ie the collection has a size greater than the dimension) Interval::BoolCollection finiteLowerBound(getDimension()); Interval::BoolCollection finiteUpperBound(getDimension()); Point lowerBound(getDimension()); Point upperBound(getDimension()); for (UnsignedInteger j = 0; j < getDimension(); ++j) { Interval range(constant_[j], constant_[j]); for (UnsignedInteger i = 0; i < size; ++i) range += distributionCollection_[i].getRange() * weights_(j, i); lowerBound[j] = range.getLowerBound()[0]; upperBound[j] = range.getUpperBound()[0]; finiteLowerBound[j] = range.getFiniteLowerBound()[0]; finiteUpperBound[j] = range.getFiniteUpperBound()[0]; } const Interval range(lowerBound, upperBound, finiteLowerBound, finiteUpperBound); if (size <= getDimension()) { setRange(range); return; } // Analytical case if (getDimension() == 1) { const Point m(1, getPositionIndicator()); const Point s(1, getDispersionIndicator()); setRange(range.intersect(Interval(m - s * beta_, m + s * beta_))); } // dimension == 1 else { Point m(constant_); Point s(getDimension(), 0.0); for (UnsignedInteger j = 0; j < getDimension(); ++j) { for(UnsignedInteger i = 0; i < size; ++i) { m[j] += weights_(j, i) * distributionCollection_[i].getPositionIndicator(); s[j] += std::pow(weights_(j, i) * distributionCollection_[i].getDispersionIndicator(), 2.0); } } for (UnsignedInteger j = 0; j < getDimension(); ++j) s[j] = std::sqrt(s[j]); setRange(range.intersect(Interval(getMean() - getStandardDeviation() * beta_, getMean() + getStandardDeviation() * beta_))); } // dimension > 1 } /* Comparison operator */ Bool RandomMixture::operator ==(const RandomMixture & other) const { if (this == &other) return true; return (distributionCollection_ == other.distributionCollection_) && (constant_ == other.constant_); } Bool RandomMixture::equals(const DistributionImplementation & other) const { const RandomMixture* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String RandomMixture::__repr__() const { OSS oss(true); oss << "class=" << RandomMixture::GetClassName() << " name=" << getName() << " distribution collection=" << distributionCollection_ << " weights =" << weights_ << " constant=" << constant_; return oss; } /* String converter */ String RandomMixture::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "("; const UnsignedInteger size = distributionCollection_.getSize(); if (dimension_ > 1) oss << "\n"; // Print marginal by marginal for (UnsignedInteger marginal = 0; marginal < dimension_; ++ marginal) { // If marginal > 0, alignement if (constant_[marginal] != 0.0) oss << constant_[marginal]; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar w = weights_(marginal, i); if ((constant_[marginal] != 0.0) || (i > 0)) { if (w > 0.0) oss << " + "; else oss << " - "; } else if (w < 0.0) oss << "-"; const String coeff(OSS() << std::abs(w)); if (coeff != "1") oss << std::abs(w) << " * "; oss << distributionCollection_[i]; } // skip to new line if (dimension_ > 1) oss << "\n"; } oss << ")"; return oss; } /* Weights distribution accessor */ void RandomMixture::setWeights(const Matrix & weights) { weights_ = weights; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computePositionIndicator(); computeDispersionIndicator(); computeRange(); computeReferenceBandwidth(); computeEquivalentNormal(); } Matrix RandomMixture::getWeights() const { return weights_; } /* Distribution collection accessor */ void RandomMixture::setDistributionCollection(const DistributionCollection & coll) { // Size will be updated during the several treatments of the collection UnsignedInteger size = coll.getSize(); const UnsignedInteger dimension = getDimension(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a RandomMixture based on an empty distribution collection."; // First, flatten all the RandomMixture atoms DistributionCollection atomCandidates(0); // The weights are stored as a collection of scalars, to be read by blocks of size dimension. Sample weightCandidates(0, dimension); LOGDEBUG("Flatten RandomMixture atoms in the current RandomMixture"); for (UnsignedInteger i = 0; i < size; ++i) { const Distribution atom(coll[i]); const Matrix w = weights_.getColumn(i); // Skip atoms with null coefficient if (w.computeGram()(0, 0) == 0.0) continue; const String atomKind(atom.getImplementation()->getClassName()); if (atom.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: a RandomMixture cannot be built from a collection of distributions of dimension not equal to 1, here distribution " << i << " has a dimension=" << atom.getDimension(); if (atomKind == "RandomMixture") { // Here we know that the atom is 1D, so we merge a 1D RandomMixture // Get the weight of the atom // Cast the atom into a RandomMixture const RandomMixture * mixture(static_cast< const RandomMixture * >(atom.getImplementation().get())); // Aggregate the constant constant_ += w * mixture->constant_; // Aggregate the weights const Matrix localWeights(w * mixture->weights_); SampleImplementation localWeightsAsSample(localWeights.getNbColumns(), dimension); localWeightsAsSample.setData(*localWeights.getImplementation()); weightCandidates.add(localWeightsAsSample); // Aggregate the atoms atomCandidates.add(mixture->getDistributionCollection()); } // atom is a RandomMixture else { weightCandidates.add(*w.getImplementation()); atomCandidates.add(atom); } // atom is not a RandomMixture } // Flatten the atoms of RandomMixture type // Update the size size = atomCandidates.getSize(); if (ResourceMap::GetAsBool("RandomMixture-SimplifyAtoms")) { // Second, split the atoms between the discrete ones, the continuous ones and the others // The Dirac atoms are optimized during this step DistributionCollection continuousAtoms(0); Sample continuousWeights(0, dimension); DistributionCollection discreteAtoms(0); Sample discreteWeights(0, dimension); DistributionCollection otherAtoms(0); Sample otherWeights(0, dimension); LOGDEBUG("Sort the atoms into continuous, discrete and others. Also merge Dirac atoms into the constant."); for (UnsignedInteger i = 0; i < size; ++i) { const Distribution atom(atomCandidates[i]); if (atom.getImplementation()->getClassName() == "Dirac") { constant_ += Point(weightCandidates[i]) * atom.getParameter()[0]; } else if (atom.isContinuous()) { continuousAtoms.add(atom); continuousWeights.add(weightCandidates[i]); } else if (atom.isDiscrete()) { discreteAtoms.add(atom); discreteWeights.add(weightCandidates[i]); } else { otherAtoms.add(atom); otherWeights.add(weightCandidates[i]); } } // Split atoms and optimize Dirac LOGDEBUG(OSS() << "Continuous atoms=" << continuousAtoms.__str__() << ", discrete atoms=" << discreteAtoms.__str__() << ", other atoms=" << otherAtoms.__str__()); // Third, merge the atoms as much as possible. Most of the optimizations assume a 1D RandomMixture. // // In the case of a nD RandomMixture with n>1: // // + The discrete atoms can be merged into a unique discrete nD UserDefined with a support of reasonable size // + There is no continuous atom, or a unique continuous atom, or all the continuous atoms are Normal // + There is no 'other' atom. // Depending on the continuous atoms, one get: // + A multivariate UserDefined if no continuous atom // + A multivariate Mixture if a unique continuous atom or only continuous Normal atoms (merged into a unique multivariate Normal) // -> all these special cases lead to an analytical expression of the RandomMixture // -> these simplifications will be implemented in a second time // // In the case of a 1D mixture: // // Continuous optimizations: // + The Uniform atoms can be merged two by two into a Trapezoidal or Triangular // + The Exponential, ChiSquare and Gamma atoms can be merged into a Gamma atom if there scale parameters are all equal after standardization (so we must group these atoms by scale*weight parameter). The possible translation has to be accumulated into the constant. // + The Normal atoms can be merged into a unique Normal // // Discrete optimizations: // + The Bernoulli and Binomial atoms can be merged into a unique Binomial as soon as they share the same value for p and the same weight // + The Poisson atoms can be merged into a unique Poisson as soon as they share the same weight // + Poisson atoms with opposite weights could be merged into a Skellam atom but it is not clear if it is worth the effort... // + The Discrete atoms can be grouped into Discrete atoms of larger support, if these merged atoms have a support of reasonable size. // // Mixed optimizations: // // + A continuous atom can be merged with a discrete atom to form a Mixture. This simplification can be done for each pair (continuous,discrete). It is not clear if some pairings are to prefer to others. distributionCollection_ = DistributionCollection(0); Sample weights(0, dimension); if (dimension == 1) { // Optimization of continuous atoms Bool hasNormalAtom = false; Scalar aggregatedMean = 0.0; Scalar aggregatedVariance = 0.0; Bool hasPendingUniform = false; Uniform pendingUniform; // This map will store all the Exponential, ChiSquare and Gamma atoms // For each value of lambda*weight it stores the cummulated k parameter std::map gammaMap; for (UnsignedInteger i = 0; i < continuousAtoms.getSize(); ++i) { const Scalar w = continuousWeights(0, i); const Distribution atom(continuousAtoms[i]); const String atomKind(atom.getImplementation()->getClassName()); // Knowledge-based optimization // First for 1D atoms if (atomKind == "Uniform") { const Scalar low = atom.getRange().getLowerBound()[0]; const Scalar high = atom.getRange().getUpperBound()[0]; Scalar a0 = w * low; Scalar b0 = w * high; if (a0 > b0) std::swap(a0, b0); // If there is already a Uniform atom, merge it into a symmetrical Trapezoidal if (hasPendingUniform) { const Scalar a1 = pendingUniform.getA(); const Scalar b1 = pendingUniform.getB(); const Scalar alpha = a1 + a0; const Scalar delta = b1 + b0; const Scalar halfWidth = 0.5 * std::abs((b1 - a1) - (b0 - a0)); const Scalar center = 0.5 * (alpha + delta); // A proper Trapezoidal if (halfWidth > 0.0) distributionCollection_.add(Trapezoidal(alpha, center - halfWidth, center + halfWidth, delta)); // A degenerated Trapezoidal, ie a Triangular else distributionCollection_.add(Triangular(alpha, center, delta)); // Add a unit weight as its initial weight has been merged into the parameters weights.add(Point(1, 1.0)); hasPendingUniform = false; } // hasPendingUniform else { pendingUniform = Uniform(a0, b0); hasPendingUniform = true; } // !hasPendingUniform } // atom is a Uniform else if (atomKind == "Normal") { hasNormalAtom = true; aggregatedMean += w * atom.getMean()[0]; aggregatedVariance += w * w * atom.getCovariance()(0, 0); } // atom is a Normal else if (atomKind == "Exponential") { const Point parameters(atom.getParameter()); const Scalar key = parameters[0] / w; std::map::iterator it(gammaMap.find(key)); // New Gamma if (it == gammaMap.end()) gammaMap[key] = 1.0; // Already known Gamma, update the shape parameter else gammaMap[key] += 1.0; // In any case update the constant constant_ += Point(1, parameters[1]) * w; } // atom is Exponential else if (atomKind == "Gamma") { const Point parameters(atom.getParameter()); const Scalar key = parameters[1] / w; std::map::iterator it(gammaMap.find(key)); // New Gamma if (it == gammaMap.end()) gammaMap[key] = parameters[0]; // Already known Gamma, update the shape parameter else gammaMap[key] += parameters[0]; // In any case update the constant constant_ += Point(1, parameters[2]) * w; } // atom is Gamma else if (atomKind == "ChiSquare") { const Point parameters(atom.getParameter()); const Scalar key = 0.5 / w; std::map::iterator it(gammaMap.find(key)); // New Gamma if (it == gammaMap.end()) gammaMap[key] = 0.5 * parameters[0]; // Already known Gamma, update the shape parameter else gammaMap[key] += 0.5 * parameters[0]; } // atom is ChiSquare else { distributionCollection_.add(atom); weights.add(Point(1, w)); } // no simplification known } // Loop over continuous atoms // Set the aggregated normal if any. Note that this atom absorbs the constant. if (hasNormalAtom) { distributionCollection_.add(Normal(aggregatedMean + constant_[0], std::sqrt(aggregatedVariance))); constant_[0] = 0.0; // Add a unit weight as its initial weight has been merged into the parameters weights.add(Point(1, 1.0)); } // hasNormalAtom // Set the pending Uniform if any. Note that this atom absorbs the constant if not yet absorbed. if (hasPendingUniform) { if (constant_[0] != 0.0) { pendingUniform = Uniform(pendingUniform.getA() + constant_[0], pendingUniform.getB() + constant_[0]); constant_[0] = 0.0; } distributionCollection_.add(pendingUniform); // Add a unit weight as its initial weight has been merged into the parameters weights.add(Point(1, 1.0)); } // hasPendingUniform // Add the aggregated Gamma if any while (!gammaMap.empty()) { const Scalar lambda = gammaMap.begin()->first; const Scalar k = gammaMap.begin()->second; if (k == 1.0) distributionCollection_.add(Exponential(lambda)); else distributionCollection_.add(Gamma(k, lambda)); weights.add(Point(1, 1.0)); gammaMap.erase(gammaMap.begin()); } // while Gamma atoms to insert // Remember the index of the first non-continuous atom in order to const UnsignedInteger firstNonContinuousAtom = distributionCollection_.getSize(); LOGDEBUG(OSS() << "After simplification of continuous atoms, distributionCollection_=" << distributionCollection_.__str__()); // Optimization of discrete atoms // This map will store all the Poisson atoms // For each value of weight it stores the cummulated theta parameter std::map poissonMap; // This map will store all the Bernoulli and Binomial atoms // For each value of (p, weight) it stores the cummulated n parameter std::map binomialMap; for (UnsignedInteger i = 0; i < discreteAtoms.getSize(); ++i) { const Scalar w = discreteWeights(0, i); const Distribution atom(discreteAtoms[i]); const String atomKind(atom.getImplementation()->getClassName()); if (atomKind == "Poisson") { const Point parameters(atom.getParameter()); const Scalar key = w; std::map::iterator it(poissonMap.find(key)); // New Poisson if (it == poissonMap.end()) poissonMap[key] = parameters[0]; // Already known Poisson, update the count parameter else poissonMap[key] += parameters[0]; } // atom is Bernoulli else if (atomKind == "Bernoulli") { const Point parameters(atom.getParameter()); Point key(2); key[0] = parameters[0]; key[1] = w; std::map::iterator it(binomialMap.find(key)); // New Binomial if (it == binomialMap.end()) binomialMap[key] = 1; // Already known Binomial, update the count parameter else binomialMap[key] += 1; } // atom is Bernoulli else if (atomKind == "Binomial") { const Point parameters(atom.getParameter()); Point key(2); key[0] = parameters[1]; key[1] = w; std::map::iterator it(binomialMap.find(key)); // New Binomial if (it == binomialMap.end()) binomialMap[key] = static_cast(parameters[0]); // Already known Binomial, update the count parameter else binomialMap[key] += static_cast(parameters[0]); } // atom is Binomial else { distributionCollection_.add(atom); weights.add(Point(1, w)); } } // discreteAtoms // Add the aggregated Poisson if any while (!poissonMap.empty()) { const Scalar w = poissonMap.begin()->first; const Scalar theta = poissonMap.begin()->second; distributionCollection_.add(Poisson(theta)); weights.add(Point(1, w)); poissonMap.erase(poissonMap.begin()); } // while Poisson atoms to insert // Add the aggregated Binomial if any while (!binomialMap.empty()) { const Scalar p = binomialMap.begin()->first[0]; const Scalar w = binomialMap.begin()->first[1]; const UnsignedInteger n = binomialMap.begin()->second; if (n == 1) distributionCollection_.add(Bernoulli(p)); else distributionCollection_.add(Binomial(n, p)); weights.add(Point(1, w)); binomialMap.erase(binomialMap.begin()); } // while Binomial atoms to insert LOGDEBUG(OSS() << "After simplification of discrete atoms, distributionCollection_=" << distributionCollection_.__str__()); // Now merge the discrete atoms by groups of reasonably sized support // if there is at least 2 discrete atoms const UnsignedInteger maxSupportSize(ResourceMap::GetAsUnsignedInteger("RandomMixture-MaximumSupportSize")); UnsignedInteger firstOtherAtom = distributionCollection_.getSize(); // No aggregation if maxSupportSize==0 or if only one discrete atom if (firstOtherAtom > firstNonContinuousAtom + 1 && maxSupportSize > 0) { UnsignedInteger indexAggregated = firstNonContinuousAtom; UnsignedInteger firstDiscreteIndex = firstNonContinuousAtom; Distribution firstDiscrete(distributionCollection_[firstDiscreteIndex]); Sample aggregatedSupport(firstDiscrete.getSupport() * weights[firstDiscreteIndex]); Point aggregatedProbabilities(firstDiscrete.getProbabilities()); UnsignedInteger aggregatedSupportSize = aggregatedSupport.getSize(); for (UnsignedInteger secondDiscreteIndex = firstNonContinuousAtom + 1; secondDiscreteIndex < firstOtherAtom; ++secondDiscreteIndex) { const Distribution secondDiscrete(distributionCollection_[secondDiscreteIndex]); const Sample secondSupport(secondDiscrete.getSupport() * weights[secondDiscreteIndex]); const Point secondProbabilities(secondDiscrete.getProbabilities()); const UnsignedInteger secondSupportSize = secondSupport.getSize(); const UnsignedInteger newAggregatedSupportSize = aggregatedSupportSize * secondSupportSize; // If the next discrete may lead to a too large support, store the current aggregated discrete atom and go to the next group if (newAggregatedSupportSize > maxSupportSize) { // If several discrete atoms have been merged store the aggregated // atom at the place occuped by the first discrete atom if (secondDiscreteIndex > firstDiscreteIndex + 1) { distributionCollection_[indexAggregated] = UserDefined(aggregatedSupport, aggregatedProbabilities); weights[indexAggregated] = Point(1, 1.0); } else distributionCollection_[indexAggregated] = firstDiscrete; ++indexAggregated; firstDiscreteIndex = secondDiscreteIndex; firstDiscrete = secondDiscrete; aggregatedSupport = secondSupport; aggregatedProbabilities = secondProbabilities; aggregatedSupportSize = secondSupportSize; } // If the aggregated discrete atom is large enough else { Sample newAggregatedSupportAndProbabilities(newAggregatedSupportSize, 2); UnsignedInteger k = 0; for (UnsignedInteger firstIndex = 0; firstIndex < aggregatedSupportSize; ++firstIndex) { const Scalar xI = aggregatedSupport[firstIndex][0]; const Scalar pI = aggregatedProbabilities[firstIndex]; for (UnsignedInteger secondIndex = 0; secondIndex < secondSupportSize; ++secondIndex) { const Scalar xJ = secondSupport[secondIndex][0]; const Scalar pJ = secondProbabilities[secondIndex]; newAggregatedSupportAndProbabilities[k][0] = xI + xJ; newAggregatedSupportAndProbabilities[k][1] = pI * pJ; ++k; } // secondIndex } // firstIndex // Merge the identical points in the support // First, sort the new aggregated data according to the support points newAggregatedSupportAndProbabilities = newAggregatedSupportAndProbabilities.sortAccordingToAComponent(0); // Second, filter out the duplicates in the point space and aggregate the values in the probability space aggregatedSupport = Sample(1, Point(1, newAggregatedSupportAndProbabilities[0][0])); aggregatedProbabilities = Point(1, newAggregatedSupportAndProbabilities[0][1]); k = 0; for (UnsignedInteger index = 1; index < newAggregatedSupportSize; ++index) { // If the current point is equal to the last one aggregate the probabilities if (newAggregatedSupportAndProbabilities[index][0] == aggregatedSupport[k][0]) { aggregatedProbabilities[k] += newAggregatedSupportAndProbabilities[index][1]; } // current point equals to the previous one else { ++k; aggregatedSupport.add(Point(1, newAggregatedSupportAndProbabilities[index][0])); aggregatedProbabilities.add(newAggregatedSupportAndProbabilities[index][1]); } // current point is different from the previous one } // Loop over the new aggregated support aggregatedSupportSize = aggregatedSupport.getSize(); } // Merge the second atom into the aggregated atom } // Loop over the discrete atoms // If there is still something to merge // It can be: // + an aggregated atom with small support (detected because firstDiscreteIndex < firstOtherAtom - 1 // + a single atom (the second one, but now equals to the first one) (detected because firstDiscreteIndex == firstOtherAtom - 1) if (firstDiscreteIndex == firstOtherAtom - 1) distributionCollection_[indexAggregated] = firstDiscrete; else { distributionCollection_[indexAggregated] = UserDefined(aggregatedSupport, aggregatedProbabilities); weights[indexAggregated] = Point(1, 1.0); } // To identify the first discrete atom to remove ++indexAggregated; // Now remove the discrete atoms that have been merged from the list of distributions distributionCollection_.erase(distributionCollection_.begin() + indexAggregated, distributionCollection_.end()); weights.erase(indexAggregated, weights.getSize()); firstOtherAtom = distributionCollection_.getSize(); } // If there are discrete atoms to merge // Then perform the continuous/discrete simplification using mixtures // There must be continuous atoms and discrete ones if (firstNonContinuousAtom > 0 && firstNonContinuousAtom != firstOtherAtom) { const SignedInteger firstContinuous = 0; const SignedInteger firstDiscrete = firstNonContinuousAtom; SignedInteger currentContinuous = firstNonContinuousAtom - 1; SignedInteger currentDiscrete = firstOtherAtom - 1; while (currentContinuous >= firstContinuous && currentDiscrete >= firstDiscrete) { const Distribution continuousAtom(distributionCollection_[currentContinuous]); const NumericalScalar continuousWeight = weights[currentContinuous][0]; Distribution discreteAtom(distributionCollection_[currentDiscrete]); NumericalScalar discreteWeight = weights[currentDiscrete][0]; const Sample support(discreteAtom.getSupport()); DistributionCollection mixtureAtoms; for (UnsignedInteger i = 0; i < support.getSize(); ++i) mixtureAtoms.add(RandomMixture(DistributionCollection(1, continuousAtom), Point(1, continuousWeight), support[i][0] * discreteWeight)); const Point probabilities(discreteAtom.getProbabilities()); // Replace the current continuous atom by the Mixture distributionCollection_[currentContinuous] = Mixture(mixtureAtoms, probabilities); // Remove the current discrete atom distributionCollection_.erase(distributionCollection_.begin() + currentDiscrete); weights.erase(currentDiscrete); --currentContinuous; --currentDiscrete; } // loop over (continuous, discrete) pairs } // continuous and discrete atoms to merge? // No simplification for other atoms distributionCollection_.add(otherAtoms); weights.add(otherWeights); } // dimension == 1 else { distributionCollection_.add(continuousAtoms); weights.add(continuousWeights); distributionCollection_.add(discreteAtoms); weights.add(discreteWeights); distributionCollection_.add(otherAtoms); weights.add(otherWeights); } // dimension > 1 // Store the weights in a Matrix format weights_ = Matrix(weights.getDimension(), weights.getSize(), weights.getImplementation()->getData()); } // simplify atoms=true else { distributionCollection_ = atomCandidates; // Store the weights in a Matrix format weights_ = Matrix(weightCandidates.getDimension(), weightCandidates.getSize(), weightCandidates.getImplementation()->getData()); } // simplify atoms=false // Special case: distributionCollection_ is empty because all the atoms were Dirac distributions, so they have all been merged into the constant. As we need at least one atom for the algorithms to work we convert the constant back into a unique Dirac distribution. This case can occur only in dimension 1 if (distributionCollection_.getSize() == 0) { distributionCollection_.add(Dirac(constant_)); weights_ = Matrix(1, 1); weights_(0, 0) = 1.0; constant_[0] = 0.0; } // We cannot use parallelism if we have more than one atom due to the characteristic function cache if (distributionCollection_.getSize() > 1) setParallel(false); else setParallel(distributionCollection_[0].getImplementation()->isParallel()); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeMean(); computeCovariance(); computePositionIndicator(); computeDispersionIndicator(); computeRange(); computeReferenceBandwidth(); computeEquivalentNormal(); // In 1D case, collection's size might change // When reducing collection to 1, computations become faster if (distributionCollection_.getSize() == dimension) { inverseWeights_ = weights_.solveLinearSystem(IdentityMatrix(dimension)); isAnalytical_ = true; detWeightsInverse_ = inverseWeights_.getImplementation().get()->computeDeterminant(); } } /* Constant accessor */ void RandomMixture::setConstant(const Point & constant) { if (constant != constant_) { if (constant.getSize() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the constant term must have the same dimension as the distribution"; constant_ = constant; isAlreadyComputedMean_ = false; // The covariance does not depend on the constant computeRange(); } } Point RandomMixture::getConstant() const { return constant_; } /* Distribution collection accessor */ const DistributionCollection & RandomMixture::getDistributionCollection() const { return distributionCollection_; } /* FFT algorithm accessor */ FFT RandomMixture::getFFTAlgorithm() const { return fftAlgorithm_; } /* FFT algorithm accessor */ void RandomMixture::setFFTAlgorithm(const FFT & fft) { fftAlgorithm_ = fft; } /* Virtual constructor */ RandomMixture * RandomMixture::clone() const { return new RandomMixture(*this); } /* Get one realization of the RandomMixture */ Point RandomMixture::getRealization() const { const UnsignedInteger size = distributionCollection_.getSize(); Point realization(size); for (UnsignedInteger i = 0; i < size; ++i) realization[i] = distributionCollection_[i].getRealization()[0]; return weights_ * realization + constant_; } /* Get a of the RandomMixture */ Sample RandomMixture::getSample(const UnsignedInteger size) const { const UnsignedInteger atomSize = distributionCollection_.getSize(); MatrixImplementation sample(size, atomSize); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < atomSize; ++i) { const Point atomSample(distributionCollection_[i].getSample(size).getImplementation()->getData()); std::copy(atomSample.begin(), atomSample.end(), sample.begin() + index); index += size; } SampleImplementation result(size, getDimension()); result.setData(sample.genProd(*weights_.getImplementation(), false, true)); return result + constant_; } Sample RandomMixture::getSampleByQMC(const UnsignedInteger size) const { const UnsignedInteger atomSize = distributionCollection_.getSize(); MatrixImplementation sample(size, atomSize); UnsignedInteger index = 0; const Point u(SobolSequence(1).generate(size).getImplementation()->getData()); for (UnsignedInteger i = 0; i < atomSize; ++i) { const Point atomSample(distributionCollection_[i].computeQuantile(u).getImplementation()->getData()); std::copy(atomSample.begin(), atomSample.end(), sample.begin() + index); index += size; } SampleImplementation result(size, getDimension()); result.setData(sample.genProd(*weights_.getImplementation(), false, true)); return result + constant_; } /* Get the DDF of the RandomMixture */ Point RandomMixture::computeDDF(const Point & point) const { return DistributionImplementation::computeDDF(point); } /* Wrapper for the convolution in the 1D case with 2 atoms */ struct RandomMixture2AtomsWrapper { RandomMixture2AtomsWrapper(const Scalar alpha1, const Scalar alpha2, const Distribution & atom1, const Distribution & atom2, const Scalar z0) : alpha1_(alpha1) , alpha2_(alpha2) , atom1_(atom1) , atom2_(atom2) , z0_(z0) { // Nothing to do } // Z = alpha0 + alpha1 X1 + alpha2 X2 // F(z) = P(Z < z) = P(alpha1 X1 + alpha2 X2 < z - alpha0) Point convolutionPDFKernel(const Point & point) const { const Scalar t = point[0]; const Scalar res = atom1_.computePDF(t) * atom2_.computePDF((z0_ - alpha1_ * t) / alpha2_); return Point(1, res); } Point convolutionCDFKernel(const Point & point) const { const Scalar t = point[0]; const Scalar pdf1 = atom1_.computePDF(t); const Scalar s = (z0_ - alpha1_ * t) / alpha2_; const Scalar cdf2 = atom2_.computeCDF(s); const Scalar res = pdf1 * cdf2; return Point(1, res); } Point convolutionCCDFKernel(const Point & point) const { const Scalar t = point[0]; const Scalar res = atom1_.computePDF(t) * atom2_.computeComplementaryCDF((z0_ - alpha1_ * t) / alpha2_); return Point(1, res); } const Scalar alpha1_; const Scalar alpha2_; const Distribution & atom1_; const Distribution & atom2_; const Scalar z0_; }; /* Get the PDF of the RandomMixture. It uses the Poisson inversion formula as described in the reference: "Abate, J. and Whitt, W. (1992). The Fourier-series method for inverting transforms of probability distributions. Queueing Systems 10, 5--88., 1992", formula 5.5. We use an incremental update of the trigonometric functions and reduce the complex arithmetic to a real arithmetic for performance purpose. Here, we recall the Poisson summation formula: \sum_{k\in Z}p(x+2k\pi/h) = h/2\pi\sum_{j\in Z}\phi(jh)\exp(-Ihjx) We can rewrite this formula as: \sum_{k\in Z}p(x+2k\pi/h) = h/2\pi\sum_{j\in Z}\left[\phi(jh) - \psi(jh)\right]\exp(-Ihjx) + \sum_{k\in Z}q(x+2k\pi/h), where q is the PDF and \psi the characteristic function of the normal distribution with the same mean and the same variance as the mixture. Take h such as p(x+2k\pi/h) << p(x) for k\neq 0, then: p(x) \simeq h/2\pi\sum_{j\in Z}\left[\phi(jh) - \psi(jh)\right]\exp(-Ihjx) + \sum_{k\in Z}q(x+2k\pi/h). The second sum \sum_{k\in Z}q(x+2k\pi/h) will be approximated using only few terms, as the condition on h will almost gives q(x+2k\pi/h) << q(x) for k\neq 0. Call this sum Q(x, h), and define \delta as delta(t) = \phi(t) - \psi(t). We unroll the complex arithmetic for performance purpose: p(x) \simeq h/2\pi\sum_{j\neq 0}\delta(jh)\exp(-Ihjx) + Q(x, h) as \delta(0) = 0 \simeq h/\pi\sum_{j>0} Re(\delta(jh)) * cos(jhx) + Im(\delta(jh)) * sin(jhx) + Q(x, h) */ Scalar RandomMixture::computePDF(const Point & point) const { if (point.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension_ << ", here dimension=" << point.getDimension(); if (isAnalytical_) { // compute analytically the pdf const Point u(point - constant_); const Point Qu(inverseWeights_ * u); // Scaling factor is 1 for discrete PDF and inverse of the Jacobian for continuous PDF Scalar value = (isDiscrete() ? 1.0 : std::abs(detWeightsInverse_)); for (UnsignedInteger j = 0; j < dimension_; ++j) value *= distributionCollection_[j].computePDF(Qu[j]); return value; } // isAnalytical_ // Check range // We check that point is in range, excepted bounds // In bounds, value is 0.0 const Interval range(getRange()); const Point lowerBound(range.getLowerBound()); const Point upperBound(range.getUpperBound()); for (UnsignedInteger j = 0; j < dimension_; ++j) if ((point[j] <= lowerBound[j]) || (point[j] >= upperBound[j])) return 0.0; // Check for exotic situations not yet implemented by the class if (!isContinuous() && distributionCollection_.getSize() > 1) throw NotYetImplementedException(HERE) << "Error: no algorithm is currently available for the non-continuous case with more than one atom."; // Special case for 1D distributions with exactly 2 continuous atoms if ((dimension_ == 1) && (distributionCollection_.getSize() == 2) && distributionCollection_[0].isContinuous() && distributionCollection_[1].isContinuous()) { // Get the parameters of the random mixture const Scalar z0 = point[0] - constant_[0]; const Scalar alpha1 = weights_(0, 0); const Scalar alpha2 = weights_(0, 1); // Get the bounds of the atoms const Scalar a = distributionCollection_[0].getRange().getLowerBound()[0]; const Scalar b = distributionCollection_[0].getRange().getUpperBound()[0]; const Scalar c = distributionCollection_[1].getRange().getLowerBound()[0]; const Scalar d = distributionCollection_[1].getRange().getUpperBound()[0]; // Compute the bounds of the convolution Scalar lower = -1.0; Scalar upper = -1.0; Scalar uc = (z0 - alpha2 * c) / alpha1; Scalar ud = (z0 - alpha2 * d) / alpha1; if ((alpha1 > 0) == (alpha2 > 0)) { lower = std::max(a, ud); upper = std::min(b, uc); } else { lower = std::max(a, uc); upper = std::min(b, ud); } GaussKronrod algo; const RandomMixture2AtomsWrapper convolutionKernelWrapper(alpha1, alpha2, distributionCollection_[0], distributionCollection_[1], z0); const Function convolutionKernel(bindMethod(convolutionKernelWrapper, &RandomMixture2AtomsWrapper::convolutionPDFKernel, 1, 1)); return algo.integrate(convolutionKernel, Interval(lower, upper), pdfEpsilon_)[0] / std::abs(alpha2); } LOGDEBUG(OSS() << "Equivalent normal=" << equivalentNormal_); // We unroll the complex arithmetic and we perform incremental update in order to improve the performances Point two_pi_on_h(dimension_); for (UnsignedInteger k = 0; k < dimension_; ++k) two_pi_on_h[k] = 2.0 * M_PI / referenceBandwidth_[k]; UnsignedInteger levelMax = 0; Scalar value = computeEquivalentNormalPDFSum(point, two_pi_on_h, 0, levelMax); UnsignedInteger k = 1; const Scalar precision = pdfPrecision_; const UnsignedInteger kmin = 1 << blockMin_; const UnsignedInteger kmax = 1 << blockMax_; // hX is only useful in 1D Scalar hX = referenceBandwidth_[0] * point[0]; Scalar error = 2.0 * precision; LOGDEBUG(OSS() << std::setprecision(20) << "h=" << referenceBandwidth_ << ", equivalent normal pdf sum=" << value << ", k=" << k << ", precision=" << precision << ", kmin=" << kmin << ", kmax=" << kmax << ", error=" << error); while ( (k < kmin) || ( (k < kmax) && (error > precision) ) ) { Scalar sumContributions = 0.0; error = 0.0; for (UnsignedInteger m = k; m < 2 * k; ++m) { if (dimension_ == 1) { const Scalar sinMHX = std::sin(m * hX); const Scalar cosMHX = std::cos(m * hX); const Complex deltaValue(computeDeltaCharacteristicFunction(m)); const Scalar contribution = (deltaValue.real() * cosMHX + deltaValue.imag() * sinMHX); LOGDEBUG(OSS() << "m=" << m << ", delta=" << deltaValue << ", contribution=" << contribution); sumContributions += contribution; error += std::abs(contribution); } // dimension_ == 1 else { Sample skinPoints(gridMesher_.getPoints(m)); const UnsignedInteger fromIndex = gridMesher_.getOffsetLevel(m); const UnsignedInteger lastIndex = gridMesher_.getOffsetLevel(m + 1) - 1; if (lastIndex <= maxSize_) { if (lastIndex > storedSize_) updateCacheDeltaCharacteristicFunction(skinPoints); // Level is now entirely on cache for (UnsignedInteger i = 0; i < skinPoints.getSize(); ++i) { const Complex deltaValue(characteristicValuesCache_[fromIndex + i - 1]); hX = 0.0; for (UnsignedInteger j = 0; j < dimension_; ++j) hX += skinPoints[i][j] * point[j]; const Scalar sinHX = std::sin(hX); const Scalar cosHX = std::cos(hX); const Scalar contribution = deltaValue.real() * cosHX + deltaValue.imag() * sinHX; error += std::abs(contribution); sumContributions += contribution; LOGDEBUG(OSS() << "m=" << m << ", delta=" << deltaValue << ", contribution=" << contribution << ", error=" << error); } // skinPoints } // lastIndex <= maxSize_ else { Point pti(dimension_); for (UnsignedInteger i = 0; i < skinPoints.getSize(); ++i) { hX = 0.0; for (UnsignedInteger j = 0; j < dimension_; ++j) { pti[j] = skinPoints[i][j]; hX += skinPoints[i][j] * point[j]; } const Complex deltaValue(computeDeltaCharacteristicFunction(pti)); const Scalar sinHX = std::sin(hX); const Scalar cosHX = std::cos(hX); const Scalar contribution = deltaValue.real() * cosHX + deltaValue.imag() * sinHX; error += std::abs(contribution); sumContributions += contribution; LOGDEBUG(OSS() << "m=" << m << ", delta=" << deltaValue << ", contribution=" << contribution << ", error=" << error); } // skinPoints } // lastIndex > maxSize_ } // dimension > 1 } error *= referenceBandwidthFactor_; sumContributions *= referenceBandwidthFactor_; if (gridMesher_.isSymmetric()) { error *= 2.0; sumContributions *= 2.0; } value += sumContributions; k *= 2; } // while // For very low level of PDF, the computed value can be slightly negative. Round it up to zero. if (value < 0.0) value = 0.0; pdfEpsilon_ = error; return value; } /* Compute the PDF of 1D distributions over a regular grid. The precision is reduced as this method is for drawing purpose only. */ Sample RandomMixture::computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { if (getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: this method is available only for 1D distribution"; return computePDF(Point(1, xMin), Point(1, xMax), Indices(1, pointNumber), grid); } struct EquivalentNormalPDFSumPolicy { const RandomMixture & mixture_; const Sample & grid_; const Point & two_b_sigma_; const UnsignedInteger levelMax_; Collection & output_; EquivalentNormalPDFSumPolicy(const RandomMixture & mixture, const Sample & grid, const Point & two_b_sigma, const UnsignedInteger levelMax, Collection & output) : mixture_(mixture) , grid_(grid) , two_b_sigma_(two_b_sigma) , levelMax_(levelMax) , output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { UnsignedInteger fakeLevelMax = 0; for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { output_[i] = mixture_.computeEquivalentNormalPDFSum(grid_[i], two_b_sigma_, levelMax_, fakeLevelMax); } } }; /* end struct EquivalentNormalPDFSumPolicy */ /* Compute the PDF of nD distributions over a regular grid */ Sample RandomMixture::computePDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const { if (xMin.getDimension() != xMax.getDimension()) throw InvalidArgumentException(HERE) << "Error: the two corner points must have the same dimension. Here, dim(xMin)=" << xMin.getDimension() << " and dim(xMax)=" << xMax.getDimension(); if (xMin.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the corner points must have the same dimension as the distribution. Here, dim(xMin)=" << xMin.getDimension() << " and distribution dimension=" << dimension_; if (dimension_ != pointNumber.getSize()) throw InvalidArgumentException(HERE) << "Error: the discretization must match the distribution dimension. Here, dim(discretization)=" << pointNumber.getSize() << " and distribution dimension=" << dimension_; if (xMin == xMax) throw InvalidArgumentException(HERE) << "Error: xMin & xMax should be different to define a grid"; if (isAnalytical_ && (dimension_ == 1)) return DistributionImplementation::computePDF(xMin, xMax, pointNumber, grid); Tuples::IndicesCollection indices(Tuples(pointNumber).generate()); if (dimension_ < 1 || dimension_ > 3) throw InvalidArgumentException(HERE) << "Error: dimension must be 1, 2 or 3; here dimension=" << dimension_; // Special case for 1D distributions with exactly 2 atoms if ((dimension_ == 1) && (distributionCollection_.getSize() == 2)) { const Scalar a = xMin[0]; const Scalar b = xMax[0]; const UnsignedInteger n = pointNumber[0]; grid = Sample(n, 1); Sample pdf(n, 1); for (UnsignedInteger i = 0; i < n; ++i) { const Scalar x = a + i * (b - a) / (n - 1); grid[i][0] = x; pdf[i][0] = computePDF(x); } return pdf; } // dimension == 1 && size == 2 const Point mu(getMean()); const Interval bounds(xMin, xMax); //if (!bounds.contains(mu)) throw InvalidArgumentException(HERE) << "Error: requested interval does not contain mean=" << mu; const Point sigma(getStandardDeviation()); UnsignedInteger b = 0; for(UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar dx = std::max(mu[i] - xMin[i], xMax[i] - mu[i]); b = std::max(b, static_cast(std::ceil(dx / sigma[i]))); } const Point b_sigma(b * sigma); const Point two_b_sigma(2.0 * b_sigma); Point h(dimension_); Point tau(dimension_); for(UnsignedInteger i = 0; i < dimension_; ++i) { h[i] = M_PI / b_sigma[i]; tau[i] = mu[i] / b_sigma[i]; } const UnsignedInteger size = indices.getSize(); grid = Sample(indices.getSize(), dimension_); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) grid[i][j] = mu[j] + ((2.0 * indices[i][j] + 1.0) / pointNumber[j] - 1.0) * b_sigma[j]; LOGWARN(OSS() << "Warning! Grid is modified: xMin=" << grid[0] << " xMax=" << grid[size - 1] << " instead of xMin=" << xMin << ", xMax=" << xMax); Sample result(size, 1); // Special case when the distribution is analytical if (isAnalytical_) return computePDF(grid); UnsignedInteger levelMax = 0; // Compute Gaussian sum pdf // First compute levelMax on mu, to speed up calls to computeEquivalentNormalPDFSum (void) computeEquivalentNormalPDFSum(mu, two_b_sigma, 0, levelMax); Collection output(size); const EquivalentNormalPDFSumPolicy policyGrid(*this, grid, two_b_sigma, levelMax, output); TBB::ParallelFor( 0, size, policyGrid); result.getImplementation()->setData(output); // Methods below will call computeDeltaCharacteristicFunction() on different threads // if using TBB, which in turn calls equivalentNormal_.computeCharacteristicFunction() // and then equivalentNormal_.getCovariance(). But covariance is lazily evaluated. // We must ensure that it is computed before entering TBB multithreaded section. (void) equivalentNormal_.getCovariance(); switch(dimension_) { case 1: addPDFOn1DGrid(pointNumber, h, tau, result); break; case 2: addPDFOn2DGrid(pointNumber, h, tau, result); break; case 3: addPDFOn3DGrid(pointNumber, h, tau, result); break; } for (UnsignedInteger j = 0; j < size; ++j) { result[j][0] = std::max(0.0, result[j][0]); } return result; } struct AddPDFOn1DGridPolicy { const RandomMixture & mixture_; const Point & xPoints_; Collection & output_; AddPDFOn1DGridPolicy(const RandomMixture & mixture, const Point & xPoints, Collection & output) : mixture_(mixture) , xPoints_(xPoints) , output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { Point x(1); for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { x[0] = xPoints_[i]; output_[i] = mixture_.computeDeltaCharacteristicFunction(x); } } }; /* end struct AddPDFOn1DGridPolicy */ void RandomMixture::addPDFOn1DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const { if (pointNumber.getSize() != 1) throw InvalidArgumentException(HERE) << "Error: the given indices must have dimension=1, here dimension=" << pointNumber.getSize(); const UnsignedInteger N = pointNumber[0]; Collection fx(N); Collection z_exp(N); const Complex cOne(0.0, 1.0); // Grid points Point xPlus(N); for (UnsignedInteger i = 0; i < N; ++i) { xPlus[i] = (i + 1) * h[0]; fx[i] = std::exp(- M_PI * cOne * (tau[0] - 1.0 + 1.0 / N) * (1.0 + i)); z_exp[i] = std::exp(- 2.0 * M_PI * cOne * static_cast(i) / static_cast(N)); } // FFT 1D Collection yk(N); // 1) compute \Sigma_+ const AddPDFOn1DGridPolicy policyGridPP(*this, xPlus, yk); TBB::ParallelFor( 0, N, policyGridPP); for (UnsignedInteger j = 0; j < N; ++j) yk[j] *= fx[j]; Collection sigma_plus(fftAlgorithm_.transform(yk)); for (UnsignedInteger j = 0; j < N; ++j) sigma_plus[j] *= z_exp[j]; // 2) compute \Sigma_- Collection ykc(N); for (UnsignedInteger j = 0; j < N; ++j) ykc[j] = std::conj(yk[N - 1 - j]); Collection sigma_minus(fftAlgorithm_.transform(ykc)); const Scalar scaling = h[0] / (2.0 * M_PI); for (UnsignedInteger j = 0; j < N; ++j) { result[j][0] += scaling * std::real( sigma_plus[j] + sigma_minus[j] ); } } struct AddPDFOn2DGridPolicy { const RandomMixture & mixture_; const Point & xPoints_; const Point & yPoints_; const UnsignedInteger nx_; const UnsignedInteger ny_; Collection & output_; AddPDFOn2DGridPolicy(const RandomMixture & mixture, const Point & xPoints, const Point & yPoints, Collection & output) : mixture_(mixture) , xPoints_(xPoints) , yPoints_(yPoints) , nx_(xPoints.getDimension()) , ny_(yPoints.getDimension()) , output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { Point x(2); for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const UnsignedInteger jj = i / nx_; const UnsignedInteger ii = i - jj * nx_; x[0] = xPoints_[ii]; x[1] = yPoints_[jj]; output_[i] = mixture_.computeDeltaCharacteristicFunction(x); } } }; /* end struct AddPDFOn2DGridPolicy */ void RandomMixture::addPDFOn2DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const { if (pointNumber.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: the given indices must have dimension=2, here dimension=" << pointNumber.getSize(); const UnsignedInteger Nx = pointNumber[0]; const UnsignedInteger Ny = pointNumber[1]; Collection fx(Nx); Collection fy(Ny); Collection z_exp_mx(Nx); Collection z_exp_my(Ny); const Complex cOne(0.0, 1.0); for (UnsignedInteger i = 0; i < Nx; ++i) { fx[i] = std::exp(- M_PI * cOne * (tau[0] - 1.0 + 1.0 / Nx) * (1.0 + i)); z_exp_mx[i] = std::exp(- 2.0 * M_PI * cOne * static_cast(i) / static_cast(Nx)); } for (UnsignedInteger j = 0; j < Ny; ++j) { fy[j] = std::exp(- M_PI * cOne * (tau[1] - 1.0 + 1.0 / Ny) * (1.0 + j)); z_exp_my[j] = std::exp(- 2.0 * M_PI * cOne * static_cast(j) / static_cast(Ny)); } Point xPlus(Nx); Point xMinus(Nx); Point yPlus(Ny); Point yMinus(Ny); for (UnsignedInteger i = 0; i < Nx; ++i) { xPlus[i] = (i + 1) * h[0]; xMinus[i] = (static_cast(i) - Nx) * h[0]; } for (UnsignedInteger j = 0; j < Ny; ++j) { yPlus[j] = (j + 1) * h[1]; yMinus[j] = (static_cast(j) - Ny) * h[1]; } ComplexMatrix yk(Nx, Ny); // 1) compute \Sigma_++ const AddPDFOn2DGridPolicy policyGridPP(*this, xPlus, yPlus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny, policyGridPP); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j) *= fx[i] * fy[j]; ComplexMatrix sigma_plus_plus(fftAlgorithm_.transform2D(yk)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_plus(i, j) *= z_exp_mx[i] * z_exp_my[j]; // 2) compute \Sigma_-- ComplexMatrix ykc(Nx, Ny); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j) = std::conj(yk(Nx - 1 - i, Ny - 1 - j)); ComplexMatrix sigma_minus_minus(fftAlgorithm_.transform2D(ykc)); // 3) compute \Sigma_+- const AddPDFOn2DGridPolicy policyGridPM(*this, xPlus, yMinus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny, policyGridPM); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j) *= fx[i] * std::conj(fy[Ny - 1 - j]); ComplexMatrix sigma_plus_minus(fftAlgorithm_.transform2D(yk)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_minus(i, j) *= z_exp_mx[i]; // 4) compute \Sigma_-+ for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j) = std::conj(yk(Nx - 1 - i, Ny - 1 - j)); ComplexMatrix sigma_minus_plus(fftAlgorithm_.transform2D(ykc)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_plus(i, j) *= z_exp_my[j]; // 5) compute \Sigma_+0 ComplexCollection yk0(Nx); Point x(2); x[1] = 0.0; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk0[i] = computeDeltaCharacteristicFunction(x) * fx[i]; } ComplexCollection sigma_plus_0(fftAlgorithm_.transform(yk0)); for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_0[i] *= z_exp_mx[i]; // 6) compute \Sigma_-0 ComplexCollection yk0c(Nx); for (UnsignedInteger i = 0; i < Nx; ++i) yk0c[i] = std::conj(yk0[Nx - 1 - i]); ComplexCollection sigma_minus_0(fftAlgorithm_.transform(yk0c)); // 7) compute \Sigma_0+ if (Nx != Ny) { yk0.resize(Ny); yk0c.resize(Ny); } x[0] = 0.0; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (j + 1) * h[1]; yk0[j] = computeDeltaCharacteristicFunction(x) * fy[j]; } ComplexCollection sigma_0_plus(fftAlgorithm_.transform(yk0)); for (UnsignedInteger j = 0; j < Ny; ++j) sigma_0_plus[j] *= z_exp_my[j]; // 8) compute \Sigma_0- for (UnsignedInteger j = 0; j < Ny; ++j) yk0c[j] = std::conj(yk0[Ny - 1 - j]); ComplexCollection sigma_0_minus(fftAlgorithm_.transform(yk0c)); UnsignedInteger counter = 0; const Scalar scaling = (h[0] * h[1]) / (4.0 * M_PI * M_PI); for (UnsignedInteger j = 0; j < Ny; ++j) { for (UnsignedInteger i = 0; i < Nx; ++i, ++counter) { result[counter][0] += scaling * std::real( sigma_plus_plus(i, j) + sigma_minus_minus(i, j) + sigma_plus_minus(i, j) + sigma_minus_plus(i, j) + sigma_plus_0[i] + sigma_minus_0[i] + sigma_0_plus[j] + sigma_0_minus[j] ); } } } struct AddPDFOn3DGridPolicy { const RandomMixture & mixture_; const Point & xPoints_; const Point & yPoints_; const Point & zPoints_; const UnsignedInteger nx_; const UnsignedInteger ny_; const UnsignedInteger nz_; Collection & output_; AddPDFOn3DGridPolicy(const RandomMixture & mixture, const Point & xPoints, const Point & yPoints, const Point & zPoints, Collection & output) : mixture_(mixture) , xPoints_(xPoints) , yPoints_(yPoints) , zPoints_(zPoints) , nx_(xPoints.getDimension()) , ny_(yPoints.getDimension()) , nz_(zPoints.getDimension()) , output_(output) {} inline void operator()( const TBB::BlockedRange & r ) const { Point x(3); for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const UnsignedInteger kk = i / nx_ / ny_; const UnsignedInteger jj = ( i - kk * nx_ * ny_ ) / nx_; const UnsignedInteger ii = i - kk * nx_ * ny_ - jj * nx_; x[0] = xPoints_[ii]; x[1] = yPoints_[jj]; x[2] = zPoints_[kk]; output_[i] = mixture_.computeDeltaCharacteristicFunction(x); } } }; /* end struct AddPDFOn3DGridPolicy */ void RandomMixture::addPDFOn3DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const { if (pointNumber.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: the given indices must have dimension=3, here dimension=" << pointNumber.getSize(); const UnsignedInteger Nx = pointNumber[0]; const UnsignedInteger Ny = pointNumber[1]; const UnsignedInteger Nz = pointNumber[2]; Collection fx(Nx); Collection fy(Ny); Collection fz(Nz); Collection z_exp_mx(Nx); Collection z_exp_my(Ny); Collection z_exp_mz(Nz); const Complex cOne(0.0, 1.0); for (UnsignedInteger i = 0; i < Nx; ++i) { fx[i] = std::exp(- M_PI * cOne * (tau[0] - 1.0 + 1.0 / Nx) * (1.0 + i)); z_exp_mx[i] = std::exp(- 2.0 * M_PI * cOne * static_cast(i) / static_cast(Nx)); } for (UnsignedInteger j = 0; j < Ny; ++j) { fy[j] = std::exp(- M_PI * cOne * (tau[1] - 1.0 + 1.0 / Ny) * (1.0 + j)); z_exp_my[j] = std::exp(- 2.0 * M_PI * cOne * static_cast(j) / static_cast(Ny)); } for (UnsignedInteger k = 0; k < Nz; ++k) { fz[k] = std::exp(- M_PI * cOne * (tau[2] - 1.0 + 1.0 / Nz) * (1.0 + k)); z_exp_mz[k] = std::exp(- 2.0 * M_PI * cOne * static_cast(k) / static_cast(Nz)); } Point xPlus(Nx); Point xMinus(Nx); Point yPlus(Ny); Point yMinus(Ny); Point zPlus(Nz); Point zMinus(Nz); for (UnsignedInteger i = 0; i < Nx; ++i) { xPlus[i] = (i + 1) * h[0]; xMinus[i] = (static_cast(i) - Nx) * h[0]; } for (UnsignedInteger j = 0; j < Ny; ++j) { yPlus[j] = (j + 1) * h[1]; yMinus[j] = (static_cast(j) - Ny) * h[1]; } for (UnsignedInteger k = 0; k < Nz; ++k) { zPlus[k] = (k + 1) * h[2]; zMinus[k] = (static_cast(k) - Nz) * h[2]; } ComplexTensor yk(Nx, Ny, Nz); const AddPDFOn3DGridPolicy policyGridPPP(*this, xPlus, yPlus, zPlus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny * Nz, policyGridPPP); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j, k) *= fx[i] * fy[j] * fz[k]; // 1) compute \Sigma_+++ ComplexTensor sigma_plus_plus_plus(fftAlgorithm_.transform3D(yk)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_plus_plus(i, j, k) *= z_exp_mx[i] * z_exp_my[j] * z_exp_mz[k]; // 2) compute \Sigma_--- ComplexTensor ykc(Nx, Ny, Nz); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j, k) = std::conj(yk(Nx - 1 - i, Ny - 1 - j, Nz - 1 - k)); ComplexTensor sigma_minus_minus_minus(fftAlgorithm_.transform3D(ykc)); // 3) compute \Sigma_++- const AddPDFOn3DGridPolicy policyGridPPM(*this, xPlus, yPlus, zMinus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny * Nz, policyGridPPM); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j, k) *= fx[i] * fy[j] * std::conj(fz[Nz - 1 - k]); ComplexTensor sigma_plus_plus_minus(fftAlgorithm_.transform3D(yk)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_plus_minus(i, j, k) *= z_exp_mx[i] * z_exp_my[j]; // 4) compute \Sigma_--+ for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j, k) = std::conj(yk(Nx - 1 - i, Ny - 1 - j, Nz - 1 - k)); ComplexTensor sigma_minus_minus_plus(fftAlgorithm_.transform3D(ykc)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_minus_plus(i, j, k) *= z_exp_mz[k]; // 5) compute \Sigma_+-+ const AddPDFOn3DGridPolicy policyGridPMP(*this, xPlus, yMinus, zPlus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny * Nz, policyGridPMP); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j, k) *= fx[i] * std::conj(fy[Ny - 1 - j]) * fz[k]; ComplexTensor sigma_plus_minus_plus(fftAlgorithm_.transform3D(yk)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_minus_plus(i, j, k) *= z_exp_mx[i] * z_exp_mz[k]; // 6) compute \Sigma_-+- for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j, k) = std::conj(yk(Nx - 1 - i, Ny - 1 - j, Nz - 1 - k)); ComplexTensor sigma_minus_plus_minus(fftAlgorithm_.transform3D(ykc)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_plus_minus(i, j, k) *= z_exp_my[j]; // 7) compute \Sigma_+-- const AddPDFOn3DGridPolicy policyGridPMM(*this, xPlus, yMinus, zMinus, *(yk.getImplementation().get())); TBB::ParallelFor( 0, Nx * Ny * Nz, policyGridPMM); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk(i, j, k) *= fx[i] * std::conj(fy[Ny - 1 - j]) * std::conj(fz[Nz - 1 - k]); ComplexTensor sigma_plus_minus_minus(fftAlgorithm_.transform3D(yk)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_minus_minus(i, j, k) *= z_exp_mx[i]; // 8) compute \Sigma_-++ for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) ykc(i, j, k) = std::conj(yk(Nx - 1 - i, Ny - 1 - j, Nz - 1 - k)); ComplexTensor sigma_minus_plus_plus(fftAlgorithm_.transform3D(ykc)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_plus_plus(i, j, k) *= z_exp_my[j] * z_exp_mz[k]; // 9) compute \Sigma_++0 ComplexMatrix yk0(Nx, Ny); Point x(3); x[2] = 0.0; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (j + 1) * h[1]; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk0(i, j) = computeDeltaCharacteristicFunction(x) * fx[i] * fy[j]; } } ComplexMatrix sigma_plus_plus_0(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_plus_0(i, j) *= z_exp_mx[i] * z_exp_my[j]; // 10) compute \Sigma_--0 ComplexMatrix yk0c(Nx, Ny); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk0c(i, j) = std::conj(yk0(Nx - 1 - i, Ny - 1 - j)); ComplexMatrix sigma_minus_minus_0(fftAlgorithm_.transform2D(yk0c)); // 11) compute \Sigma_0++ if (Nx != Ny || Ny != Nz) { yk0 = ComplexMatrix(Ny, Nz); yk0c = ComplexMatrix(Ny, Nz); } x[0] = 0.0; for (UnsignedInteger k = 0; k < Nz; ++k) { x[2] = (k + 1) * h[2]; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (j + 1) * h[1]; yk0(j, k) = computeDeltaCharacteristicFunction(x) * fy[j] * fz[k]; } } ComplexMatrix sigma_0_plus_plus(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) sigma_0_plus_plus(j, k) *= z_exp_my[j] * z_exp_mz[k]; // 12) compute \Sigma_0-- for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) yk0c(j, k) = std::conj(yk0(Ny - 1 - j, Nz - 1 - k)); ComplexMatrix sigma_0_minus_minus(fftAlgorithm_.transform2D(yk0c)); // 13) compute \Sigma_+0+ if (Nx != Ny) { yk0 = ComplexMatrix(Nx, Nz); yk0c = ComplexMatrix(Nx, Nz); } x[1] = 0.0; for (UnsignedInteger k = 0; k < Nz; ++k) { x[2] = (k + 1) * h[2]; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk0(i, k) = computeDeltaCharacteristicFunction(x) * fx[i] * fz[k]; } } ComplexMatrix sigma_plus_0_plus(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_0_plus(i, k) *= z_exp_mx[i] * z_exp_mz[k]; // 14) compute \Sigma_-0- for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger i = 0; i < Nx; ++i) yk0c(i, k) = std::conj(yk0(Nx - 1 - i, Nz - 1 - k)); ComplexMatrix sigma_minus_0_minus(fftAlgorithm_.transform2D(yk0c)); // 15) compute \Sigma_+-0 if (Ny != Nz) { yk0 = ComplexMatrix(Nx, Ny); yk0c = ComplexMatrix(Nx, Ny); } x[2] = 0.0; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (static_cast(j) - Ny) * h[1]; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk0(i, j) = computeDeltaCharacteristicFunction(x) * fx[i] * std::conj(fy[Ny - 1 - j]); } } ComplexMatrix sigma_plus_minus_0(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_minus_0(i, j) *= z_exp_mx[i]; // 16) compute \Sigma_-+0 for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) yk0c(i, j) = std::conj(yk0(Nx - 1 - i, Ny - 1 - j)); ComplexMatrix sigma_minus_plus_0(fftAlgorithm_.transform2D(yk0c)); for (UnsignedInteger j = 0; j < Ny; ++j) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_plus_0(i, j) *= z_exp_my[j]; // 17) compute \Sigma_+0- if (Nz != Ny) { yk0 = ComplexMatrix(Nx, Nz); yk0c = ComplexMatrix(Nx, Nz); } x[1] = 0.0; for (UnsignedInteger k = 0; k < Nz; ++k) { x[2] = (static_cast(k) - Nz) * h[2]; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk0(i, k) = computeDeltaCharacteristicFunction(x) * fx[i] * std::conj(fz[Nz - 1 - k]); } } ComplexMatrix sigma_plus_0_minus(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_0_minus(i, k) *= z_exp_mx[i]; // 18) compute \Sigma_-0+ for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger i = 0; i < Nx; ++i) yk0c(i, k) = std::conj(yk0(Nx - 1 - i, Nz - 1 - k)); ComplexMatrix sigma_minus_0_plus(fftAlgorithm_.transform2D(yk0c)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger i = 0; i < Nx; ++i) sigma_minus_0_plus(i, k) *= z_exp_mz[k]; // 19) compute \Sigma_0+- if (Nx != Ny) { yk0 = ComplexMatrix(Ny, Nz); yk0c = ComplexMatrix(Ny, Nz); } x[0] = 0.0; for (UnsignedInteger k = 0; k < Nz; ++k) { x[2] = (static_cast(k) - Nz) * h[2]; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (j + 1) * h[1]; yk0(j, k) = computeDeltaCharacteristicFunction(x) * fy[j] * std::conj(fz[Nz - 1 - k]); } } ComplexMatrix sigma_0_plus_minus(fftAlgorithm_.transform2D(yk0)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) sigma_0_plus_minus(j, k) *= z_exp_my[j]; // 20) compute \Sigma_0-+ for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) yk0c(j, k) = std::conj(yk0(Ny - 1 - j, Nz - 1 - k)); ComplexMatrix sigma_0_minus_plus(fftAlgorithm_.transform2D(yk0c)); for (UnsignedInteger k = 0; k < Nz; ++k) for (UnsignedInteger j = 0; j < Ny; ++j) sigma_0_minus_plus(j, k) *= z_exp_mz[k]; // 21) compute \Sigma_+00 Collection yk00(Nx); x[1] = 0.0; x[2] = 0.0; for (UnsignedInteger i = 0; i < Nx; ++i) { x[0] = (i + 1) * h[0]; yk00[i] = computeDeltaCharacteristicFunction(x) * fx[i]; } Collection sigma_plus_0_0(fftAlgorithm_.transform(yk00)); for (UnsignedInteger i = 0; i < Nx; ++i) sigma_plus_0_0[i] *= z_exp_mx[i]; // 22) compute \Sigma_-00 Collection yk00c(Nx); for (UnsignedInteger i = 0; i < Nx; ++i) yk00c[i] = std::conj(yk00[Nx - 1 - i]); Collection sigma_minus_0_0(fftAlgorithm_.transform(yk00c)); // 23) compute \Sigma_0+0 if (Nx != Ny) { yk00.resize(Ny); yk00c.resize(Ny); } x[0] = 0.0; x[2] = 0.0; for (UnsignedInteger j = 0; j < Ny; ++j) { x[1] = (j + 1) * h[1]; yk00[j] = computeDeltaCharacteristicFunction(x) * fy[j]; } Collection sigma_0_plus_0(fftAlgorithm_.transform(yk00)); for (UnsignedInteger j = 0; j < Ny; ++j) sigma_0_plus_0[j] *= z_exp_my[j]; // 24) compute \Sigma_0-0 for (UnsignedInteger j = 0; j < Ny; ++j) yk00c[j] = std::conj(yk00[Ny - 1 - j]); Collection sigma_0_minus_0(fftAlgorithm_.transform(yk00c)); // 25) compute \Sigma_00+ if (Ny != Nz) { yk00.resize(Nz); yk00c.resize(Nz); } x[0] = 0.0; x[1] = 0.0; for (UnsignedInteger k = 0; k < Nz; ++k) { x[2] = (k + 1) * h[2]; yk00[k] = computeDeltaCharacteristicFunction(x) * fz[k]; } Collection sigma_0_0_plus(fftAlgorithm_.transform(yk00)); for (UnsignedInteger k = 0; k < Nz; ++k) sigma_0_0_plus[k] *= z_exp_mz[k]; // 26) compute \Sigma_00- for (UnsignedInteger k = 0; k < Nz; ++k) yk00c[k] = std::conj(yk00[Nz - 1 - k]); Collection sigma_0_0_minus(fftAlgorithm_.transform(yk00c)); UnsignedInteger counter = 0; const Scalar scaling = (h[0] * h[1] * h[2]) / (8.0 * M_PI * M_PI * M_PI); for (UnsignedInteger k = 0; k < Nz; ++k) { for (UnsignedInteger j = 0; j < Ny; ++j) { for (UnsignedInteger i = 0; i < Nx; ++i, ++counter) { result[counter][0] += scaling * std::real( sigma_plus_plus_plus(i, j, k) + sigma_minus_minus_minus(i, j, k) + sigma_plus_plus_minus(i, j, k) + sigma_minus_minus_plus(i, j, k) + sigma_plus_minus_plus(i, j, k) + sigma_minus_plus_minus(i, j, k) + sigma_plus_minus_minus(i, j, k) + sigma_minus_plus_plus(i, j, k) + sigma_plus_plus_0(i, j) + sigma_minus_minus_0(i, j) + sigma_plus_minus_0(i, j) + sigma_minus_plus_0(i, j) + sigma_plus_0_plus(i, k) + sigma_minus_0_minus(i, k) + sigma_plus_0_minus(i, k) + sigma_minus_0_plus(i, k) + sigma_0_plus_plus(j, k) + sigma_0_minus_minus(j, k) + sigma_0_plus_minus(j, k) + sigma_0_minus_plus(j, k) + sigma_0_0_plus[k] + sigma_0_0_minus[k] + sigma_0_plus_0[j] + sigma_0_minus_0[j] + sigma_plus_0_0[i] + sigma_minus_0_0[i] ); } } } } /* Get the CDF of the RandomMixture */ Scalar RandomMixture::computeCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); if (point.getDimension() != 1) return computeProbability(Interval(getRange().getLowerBound(), point)); const Scalar x = point[0]; // Special case for combination containing only one contributor Y = alpha * X + beta // for alpha > 0.0: // P(Y < y) = P(X < (y - beta) / alpha) = CDF_X((y - beta) / alpha) // for alpha < 0.0: // P(Y < y) = P(X > (y - beta) / alpha) = 1.0 - CDF_X((y - beta) / alpha) if (isAnalytical_) { const Scalar alpha = weights_(0, 0); if (alpha > 0.0) return distributionCollection_[0].computeCDF((x - constant_[0]) / alpha); // If alpha < 0.0, compute the complementary CDF return distributionCollection_[0].computeComplementaryCDF((x - constant_[0]) / alpha); } // Check range const Interval range(getRange()); const Scalar lowerBound = range.getLowerBound()[0]; const Scalar upperBound = range.getUpperBound()[0]; if (x <= lowerBound) return 0.0; if (x >= upperBound) return 1.0; if (!isContinuous() && distributionCollection_.getSize() > 1) throw NotYetImplementedException(HERE) << "Error: no algorithm is currently available for the non-continuous case with more than one atom."; // Special case for 1D distributions with exactly 2 continuous atoms if ((dimension_ == 1) && (distributionCollection_.getSize() == 2) && distributionCollection_[0].isContinuous() && distributionCollection_[1].isContinuous()) { // Get the parameters of the random mixture const Scalar z0 = x - constant_[0]; const Scalar alpha1 = weights_(0, 0); const Scalar alpha2 = weights_(0, 1); // Get the bounds of the atoms const Scalar a = distributionCollection_[0].getRange().getLowerBound()[0]; const Scalar b = distributionCollection_[0].getRange().getUpperBound()[0]; const Scalar c = distributionCollection_[1].getRange().getLowerBound()[0]; const Scalar d = distributionCollection_[1].getRange().getUpperBound()[0]; // Compute the bounds of the convolution Scalar lower = -1.0; Scalar upper = -1.0; Scalar uc = (z0 - alpha2 * c) / alpha1; Scalar ud = (z0 - alpha2 * d) / alpha1; const RandomMixture2AtomsWrapper convolutionKernelWrapper(alpha1, alpha2, distributionCollection_[0], distributionCollection_[1], z0); GaussKronrod algo; if (alpha2 > 0) { const Function convolutionKernel(bindMethod(convolutionKernelWrapper, &RandomMixture2AtomsWrapper::convolutionCDFKernel, 1, 1)); if (alpha1 > 0) { lower = std::max(a, ud); upper = std::min(b, uc); Scalar cdf = algo.integrate(convolutionKernel, Interval(lower, upper), cdfEpsilon_)[0]; if (ud > a) cdf += distributionCollection_[0].computeCDF(ud); return cdf; } // alpha1 > 0 else { lower = std::max(a, uc); upper = std::min(b, ud); Scalar cdf = algo.integrate(convolutionKernel, Interval(lower, upper), cdfEpsilon_)[0]; if (uc > a) cdf += distributionCollection_[0].computeCDF(uc); return cdf; } // alpha1 < 0 } // alpha2 > 0 else { const Function convolutionKernel(bindMethod(convolutionKernelWrapper, &RandomMixture2AtomsWrapper::convolutionCCDFKernel, 1, 1)); if (alpha1 > 0) { lower = std::max(a, uc); upper = std::min(b, ud); Scalar cdf = algo.integrate(convolutionKernel, Interval(lower, upper), cdfEpsilon_)[0]; if (uc > a) cdf += distributionCollection_[0].computeCDF(uc); return cdf; } // alpha1 > 0 else { lower = std::max(a, ud); upper = std::min(b, uc); Scalar cdf = algo.integrate(convolutionKernel, Interval(lower, upper), cdfEpsilon_)[0]; if (ud > a) cdf += distributionCollection_[0].computeCDF(ud); return cdf; } // alpha1 < 0 } // alpha2 < 0 } // dimension_ == 1 && size == 2 // Here we call computeProbability with a ]-inf, x] interval const Scalar cdf = computeProbability(Interval(Point(1, lowerBound), point, getRange().getFiniteLowerBound(), Interval::BoolCollection(1, true))); if (cdf < 0.5) return cdf; // and if the cdf value is less than 1/2, it was better to use the complementary CDF else return 1.0 - computeProbability(Interval(point, Point(1, upperBound), Interval::BoolCollection(1, true), getRange().getFiniteUpperBound())); } Scalar RandomMixture::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); if (getDimension() > 1) return DistributionImplementation::computeComplementaryCDF(point); const Scalar x = point[0]; // Special case for combination containing only one contributor Y = alpha * X + beta // for alpha > 0.0: // P(Y < y) = P(X < (y - beta) / alpha) = CDF_X((y - beta) / alpha) // for alpha < 0.0: // P(Y < y) = P(X > (y - beta) / alpha) = 1.0 - CDF_X((y - beta) / alpha) if (isAnalytical_) { const Scalar alpha = weights_(0, 0); if (alpha > 0.0) return distributionCollection_[0].computeComplementaryCDF((x - constant_[0]) / alpha); // If alpha < 0.0, compute the CDF return distributionCollection_[0].computeCDF((x - constant_[0]) / alpha); } // Check range const Interval range(getRange()); const Scalar lowerBound = range.getLowerBound()[0]; const Scalar upperBound = range.getUpperBound()[0]; if (x <= lowerBound) return 1.0; if (x >= upperBound) return 0.0; // Here we call computeProbability with a [x, +inf[ interval // Here we call computeProbability with a ]-inf, x] interval const Scalar complementaryCDF = computeProbability(Interval(point, Point(1, upperBound), Interval::BoolCollection(1, true), getRange().getFiniteUpperBound())); if (complementaryCDF < 0.5) return complementaryCDF; // and if the cdf value is less than 1/2, it was better to use the complementary CDF else return 1.0 - computeProbability(Interval(Point(1, lowerBound), point, getRange().getFiniteLowerBound(), Interval::BoolCollection(1, true))); } /* Compute the CDF of 1D distributions over a regular grid. The precision is reduced as this method is for drawing purpose only. */ Sample RandomMixture::computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { return DistributionImplementation::computeCDF(xMin, xMax, pointNumber, grid); } /* Get the probability content of an interval. It uses the Poisson inversion formula as described in the reference: "Abate, J. and Whitt, W. (1992). The Fourier-series method for inverting transforms of probability distributions. Queueing Systems 10, 5--88., 1992", formula 5.14. We use an incremental update of the trigonometric functions and reduce the complex arithmetic to a real arithmetic for performance purpose. */ Scalar RandomMixture::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); if (interval.isNumericallyEmpty()) return 0.0; if ((dimension != 1) || (distributionCollection_.getSize() >= ResourceMap::GetAsUnsignedInteger( "RandomMixture-SmallSize" ))) { const Scalar oldPDFPrecision = pdfPrecision_; pdfPrecision_ = std::pow(SpecFunc::ScalarEpsilon, 2.0 / (3.0 * dimension_)); const UnsignedInteger n1 = ResourceMap::GetAsUnsignedInteger("RandomMixture-MarginalIntegrationNodesNumber"); const UnsignedInteger N = ResourceMap::GetAsUnsignedInteger("RandomMixture-MaximumIntegrationNodesNumber"); const UnsignedInteger n2 = static_cast(round(std::pow(N, 1.0 / dimension_))); const UnsignedInteger marginalSize = SpecFunc::NextPowerOfTwo(std::min(n1, n2)); setIntegrationNodesNumber(marginalSize); const Scalar probability = DistributionImplementation::computeProbability(interval); pdfPrecision_ = oldPDFPrecision; return probability; #ifdef TRAPEZE // For now, use a simple mid-point rule const Point xMin(interval.getLowerBound()); const Point xMax(interval.getUpperBound()); Sample gridX; const Indices discretization(dimension, marginalSize); const Sample samplePDF(computePDF(xMin, xMax, discretization, gridX)); // Compute the elementary volume const UnsignedInteger otherCornerIndex = static_cast(round((std::pow(marginalSize, dimension) - 1) / (marginalSize - 1))); const Interval elementaryInterval(gridX[0], gridX[otherCornerIndex]); const Scalar elementaryVolume = elementaryInterval.getVolume(); Scalar cdf = 0.0; for (UnsignedInteger i = 0; i < gridX.getSize(); ++i) if (interval.contains(gridX[i])) cdf += samplePDF[i][0] * elementaryVolume; return cdf; #endif } // Special case for combination containing only one contributor if (isAnalytical_) { cdfEpsilon_ = ResourceMap::GetAsScalar( "RandomMixture-DefaultCDFEpsilon" ); const Scalar lower = interval.getLowerBound()[0]; const Scalar upper = interval.getUpperBound()[0]; const Scalar weight = getWeight(); // Negative weight, swap upper and lower bound flags if (weight < 0.0) { const Interval adjustedInterval(Point(1, (upper - constant_[0]) / weight), Point(1, (lower - constant_[0]) / weight), interval.getFiniteUpperBound(), interval.getFiniteUpperBound()); return distributionCollection_[0].computeProbability(adjustedInterval.intersect(getRange())); } else { const Interval adjustedInterval(Point(1, (lower - constant_[0]) / weight), Point(1, (upper - constant_[0]) / weight), interval.getFiniteUpperBound(), interval.getFiniteUpperBound()); return distributionCollection_[0].computeProbability(interval.intersect(getRange())); } } const Interval clippedInterval(getRange().intersect(interval)); // Quick return if there is no mass in the clipped interval if (clippedInterval.isNumericallyEmpty()) return 0.0; const Bool finiteLowerBound = clippedInterval.getFiniteLowerBound()[0] == 1; const Bool finiteUpperBound = clippedInterval.getFiniteUpperBound()[0] == 1; // Quick return for integral over the whole real line if (!finiteLowerBound && !finiteUpperBound) return 1.0; const Scalar lowerBound = clippedInterval.getLowerBound()[0]; const Scalar upperBound = clippedInterval.getUpperBound()[0]; // Small size case: use Fourier series const Scalar precision = cdfPrecision_; Scalar error = 2.0 * precision; const Scalar a = referenceBandwidth_[0] * lowerBound; const Scalar b = referenceBandwidth_[0] * upperBound; const Scalar factor = referenceBandwidth_[0] / M_PI; Scalar value = computeEquivalentNormalCDFSum(lowerBound, upperBound); UnsignedInteger k = 1; const UnsignedInteger kmin = 1 << blockMin_; const UnsignedInteger kmax = 1 << blockMax_; while ( (k < kmax) && (error > std::max(precision, std::abs(precision * value)) || k < kmin) ) { error = 0.0; for (UnsignedInteger m = k; m < 2 * k; ++m) { Scalar sinMHLower = std::sin(m * a); Scalar cosMHLower = std::cos(m * a); Scalar sinMHUpper = std::sin(m * b); Scalar cosMHUpper = std::cos(m * b); const Complex deltaValue(computeDeltaCharacteristicFunction(m)); const Scalar contribution = factor * (deltaValue.real() * (sinMHUpper - sinMHLower) + deltaValue.imag() * (cosMHLower - cosMHUpper)) / (m * referenceBandwidth_[0]); value += contribution; error += std::abs(contribution); } k *= 2; } cdfEpsilon_ = error; // For extrem values of the argument, the computed value can be slightly outside of [0,1]. Truncate it. return (value < 0.0 ? 0.0 : (value > 1.0 ? 1.0 : value)); } /* Compute the quantile over a regular grid */ Sample RandomMixture::computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot compute the quantile over a regular 1D grid if the dimension is > 1"; Sample result(pointNumber, 2); Scalar q = qMin; const Scalar step = (qMax - qMin) / Scalar(pointNumber - 1.0); for (UnsignedInteger i = 0; i < pointNumber; ++i) { result[i][0] = q; result[i][1] = computeQuantile(q)[0]; q += step; } return result; } /* Quantile computation for dimension=1 */ Scalar RandomMixture::computeScalarQuantile(const Scalar prob, const Bool tail) const { // Special case for random mixture with only 1 atom: Y = alpha * X + beta // find Yq such that P(Y < Yq) = q // i.e. for alpha > 0 // P(X < (Yq - beta) / alpha) = q -> Yq = alpha * Xq + beta where P(X < Xq) = q // and for alpha < 0 // P(X > (Yq - beta) / alpha) = q i.e. P(X < (Yq - beta) / alpha) = r with r = 1-q -> Yq = alpha * Xr + beta if (isAnalytical_) { const Scalar alpha = weights_(0, 0); return distributionCollection_[0].computeQuantile((alpha > 0.0) ? (prob) : (1.0 - prob))[0] * alpha + constant_[0]; } // General case return DistributionImplementation::computeScalarQuantile(prob, tail); } /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet RandomMixture::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); // As we are in 1D and as the function defining the composite distribution can have complex variations, // we use an improved sampling method to compute the quantile of the -logPDF(X) distribution const UnsignedInteger size = SpecFunc::NextPowerOfTwo(ResourceMap::GetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize")); const Sample minusLogPDFSample(computeLogPDF(getSampleByQMC(size)) * Point(1, -1.0)); const Scalar minusLogPDFThreshold = minusLogPDFSample.computeQuantile(prob)[0]; threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex RandomMixture::computeCharacteristicFunction(const Scalar x) const { if (x == 0.0) return 1.0; return std::exp(computeLogCharacteristicFunction(x)); } Complex RandomMixture::computeCharacteristicFunction(const Point & x) const { // The characteristic function is given by the following formula: // \phi(y) = \prod_{j=1}^{d} (exp(i * y_j * constant_j) * \prod_{k=1}^{n} \phi_{X_k}((M^t y)_k)) // compute M^t * y return std::exp(computeLogCharacteristicFunction(x)); } Complex RandomMixture::computeLogCharacteristicFunction(const Scalar x) const { if (x == 0.0) return 0.0; Complex logCfValue(0.0, constant_[0] * x); const UnsignedInteger size = distributionCollection_.getSize(); const Scalar smallScalar = 0.5 * std::log(SpecFunc::MinScalar); for(UnsignedInteger i = 0; i < size; ++i) { logCfValue += distributionCollection_[i].computeLogCharacteristicFunction(weights_(0, i) * x); // Early exit for null value if (logCfValue.real() < smallScalar) break; } /* end for */ return logCfValue; } Complex RandomMixture::computeLogCharacteristicFunction(const Point & x) const { // The log-characteristic function is given by: // log(\phi(x)) = \sum_{j=1}^{d} ((i * y_j * constant_j) + \sum_{k=1}^{n} log(\phi_{X_k})((M^t x)_k)) const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = distributionCollection_.getSize(); const Scalar smallScalar = 0.5 * std::log(SpecFunc::MinScalar); // 1) compute the deterministic term Complex logCfValue; for (UnsignedInteger i = 0; i < dimension; ++i) logCfValue += Complex(0.0, x[i] * constant_[i]); // 2) compute the random part // The variables are independent for (UnsignedInteger i = 0; i < size; ++i) { // compute M^t * x Scalar wtx = 0.; for (UnsignedInteger j = 0; j < dimension; ++j) wtx += weights_(j, i) * x[j]; logCfValue += distributionCollection_[i].computeLogCharacteristicFunction(wtx); if (logCfValue.real() < smallScalar) break; } return logCfValue; } /* Compute a value of the characteristic function on a prescribed discretization. As the value associated with index == 0 is known, it is not stored so for index > 0, the corresponding value is at position index-1 */ Complex RandomMixture::computeDeltaCharacteristicFunction(const UnsignedInteger index) const { if (index == 0) return 0.0; // The cached values are computed and stored in an ascending order without hole: this function is always called on a sequence starting from 0 to n-1 // Usual case first: the index is within the already computed values if (index <= storedSize_) return characteristicValuesCache_[index - 1]; // If the index is higher than the maximum allowed storage if (index > maxSize_) { LOGINFO(OSS() << "Cache exceeded in RandomMixture::computeDeltaCharacteristicFunction, consider increasing maxSize_ to " << index); const Scalar x = index * referenceBandwidth_[0]; const Complex logCF(computeLogCharacteristicFunction(x)); const Complex logNormalCF(equivalentNormal_.computeLogCharacteristicFunction(x)); const Complex deltaLog(logCF - logNormalCF); Complex value; if (std::abs(deltaLog) < 1.0e-5) value = std::exp(logNormalCF) * (deltaLog * (1.0 + deltaLog * (0.5 + deltaLog / 6.0))); else value = std::exp(logCF) - std::exp(logNormalCF); LOGDEBUG(OSS() << "ih=" << x << ", logCF=" << logCF << ", CF=" << std::exp(logCF) << ", logNormalCF=" << logNormalCF << ", NormalCF=" << std::exp(logNormalCF) << ", value=" << value); return value; } // Here, the index has not been computed so far, fill-in the gap if (index > storedSize_) { for (UnsignedInteger i = storedSize_ + 1; i <= index; ++i) { const Scalar x = i * referenceBandwidth_[0]; const Complex logCF(computeLogCharacteristicFunction(x)); const Complex logNormalCF(equivalentNormal_.computeLogCharacteristicFunction(x)); const Complex deltaLog(logCF - logNormalCF); Complex value; if (std::abs(deltaLog) < 1.0e-5) value = std::exp(logNormalCF) * (deltaLog * (1.0 + deltaLog * (0.5 + deltaLog / 6.0))); else value = std::exp(logCF) - std::exp(logNormalCF); LOGDEBUG(OSS() << "ih=" << x << ", logCF=" << logCF << ", CF=" << std::exp(logCF) << ", logNormalCF=" << logNormalCF << ", NormalCF=" << std::exp(logNormalCF) << ", value=" << value); characteristicValuesCache_.add(value); } storedSize_ = index; return characteristicValuesCache_[storedSize_ - 1]; } // Should never go there throw InvalidArgumentException(HERE) << "Error: trying to access to a cached characteristic value in an incorrect pattern."; } /* Compute the characteristic function of nD distributions by difference to a reference Normal distribution with the same mean and the same covariance */ Complex RandomMixture::computeDeltaCharacteristicFunction(const Point & x) const { // Direct application on a point ==> useful for computation on grid const Complex logCF(computeLogCharacteristicFunction(x)); const Complex logNormalCF(equivalentNormal_.computeLogCharacteristicFunction(x)); const Complex deltaLog(logCF - logNormalCF); if (std::abs(deltaLog) < 1.0e-5) return std::exp(logNormalCF) * (deltaLog * (1.0 + deltaLog * (0.5 + deltaLog / 6.0))); else return std::exp(logCF) - std::exp(logNormalCF); } /* Update cache */ void RandomMixture::updateCacheDeltaCharacteristicFunction(const Sample & points) const { Point x(dimension_); for(UnsignedInteger i = 0; i < points.getSize(); ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) x[j] = points[i][j]; // Computation of CF - NormalCF // Here we check if it is possible to reduce calculation // We reduce CF - NormalCF to NormalCF * (CF/NormalCF -1), which rewrites // as exp(logNormalCF) * (exp(deltaLog) - 1), with deltaLog=logCF - logNormalCF // We use a 3rd order Taylor expansion of exp(deltaLog) - 1 if |deltaLog| <= 1e-5 const Complex logCF(computeLogCharacteristicFunction(x)); const Complex logNormalCF(equivalentNormal_.computeLogCharacteristicFunction(x)); const Complex deltaLog(logCF - logNormalCF); Complex value; if (std::abs(deltaLog) < 1.0e-5) value = std::exp(logNormalCF) * (deltaLog * (1.0 + deltaLog * (0.5 + deltaLog / 6.0))); else value = std::exp(logCF) - std::exp(logNormalCF); LOGDEBUG(OSS() << "ih=" << x << ", logCF=" << logCF << ", CF=" << std::exp(logCF) << ", logNormalCF=" << logNormalCF << ", NormalCF=" << std::exp(logNormalCF) << ", value=" << value); characteristicValuesCache_.add(value); ++storedSize_; } } /* Get the PDF gradient of the distribution */ Point RandomMixture::computePDFGradient(const Point & point) const { return DistributionImplementation::computePDFGradient(point); } /* Get the CDF gradient of the distribution */ Point RandomMixture::computeCDFGradient(const Point & point) const { return DistributionImplementation::computeCDFGradient(point); } /* Compute the mean of the RandomMixture */ void RandomMixture::computeMean() const { mean_ = constant_; const UnsignedInteger size = distributionCollection_.getSize(); Point mu(size); for(UnsignedInteger i = 0; i < size; ++i) mu[i] = distributionCollection_[i].getMean()[0]; mean_ += weights_ * mu; isAlreadyComputedMean_ = true; } /* Compute the covariance of the RandomMixture */ void RandomMixture::computeCovariance() const { // Compute the covariance of the mixture. // This method is private. Use the getCovariance to get the covariance value. // The covariance is given by // Cov(Y) = weight * Cov(X) * weight^t // As Cov(X) is diagonal: // Cov(Y)_{i,j} = \sum_{k=1}^n weights_{i,k} weights_{j,k} Cov(X_k, X_k) const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { Scalar covariance = 0.0; for (UnsignedInteger k = 0; k < size; ++k) { covariance += weights_(i, k) * weights_(j, k) * distributionCollection_[k].getCovariance().operator()(0, 0); } covariance_(i, j) = covariance; } } isAlreadyComputedCovariance_ = true; } /* Get the standard deviation of the RandomMixture */ Point RandomMixture::getStandardDeviation() const { const UnsignedInteger dimension = getDimension(); Point sigma(dimension, 0.0); for (UnsignedInteger i = 0; i < dimension; ++i) sigma[i] = std::sqrt(getCovariance().operator()(i, i)); return sigma; } /* Get the skewness of the RandomMixture */ Point RandomMixture::getSkewness() const { Point skewness(getDimension(), 0.0); const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger j = 0; j < getDimension(); ++j) { Scalar variance = 0.0; for(UnsignedInteger i = 0; i < size; ++i) { const Scalar wi = weights_(j, i); const Scalar wi2 = wi * wi; const Scalar vi = distributionCollection_[i].getCovariance().operator()(0, 0); variance += wi2 * vi; skewness[j] += wi2 * wi * distributionCollection_[i].getSkewness()[0] * std::pow(vi, 1.5); } /* end for */ skewness[j] *= std::pow(variance, -1.5); } return skewness; } /* Get the kurtosis of the RandomMixture */ Point RandomMixture::getKurtosis() const { Point kurtosis(getDimension(), 0.0); const UnsignedInteger size = distributionCollection_.getSize(); Point v(size); Point w2(size); for (UnsignedInteger d = 0; d < getDimension(); ++d) { Scalar variance = 0.0; for(UnsignedInteger i = 0; i < size; ++i) { const Scalar wi = weights_(d, i); const Scalar wi2 = wi * wi; w2[i] = wi2; const Scalar vi = distributionCollection_[i].getCovariance().operator()(0, 0); v[i] = vi; variance += wi2 * vi; kurtosis[d] += wi2 * wi2 * distributionCollection_[i].getKurtosis()[0] * vi * vi; for (UnsignedInteger j = 0; j < i; ++j) kurtosis[d] += 6.0 * wi2 * w2[j] * vi * v[j]; } /* end for */ kurtosis[d] /= variance * variance; } return kurtosis; } /** Parameters value and description accessor */ RandomMixture::PointWithDescriptionCollection RandomMixture::getParametersCollection() const { // TODO: Take into account Weights! const UnsignedInteger size = distributionCollection_.getSize(); PointWithDescriptionCollection parameters(1); Description parametersDescription; // Form a big Point from the parameters of each atom for (UnsignedInteger i = 0; i < size; ++i) { const String prefix(distributionCollection_[i].getName()); const PointWithDescription atomParameters(distributionCollection_[i].getParametersCollection()[0]); const Description atomDescription(atomParameters.getDescription()); const UnsignedInteger atomParameterDimension = atomParameters.getDimension(); // Add the current atom parameters for (UnsignedInteger j = 0; j < atomParameterDimension; ++j) { parameters[0].add(atomParameters[j]); parametersDescription.add(OSS() << prefix << "_" << atomDescription[j]); } } parameters[0].setDescription(parametersDescription); parameters[0].setName(getName()); return parameters; } // getParametersCollection /* Get a positon indicator for a 1D distribution */ Scalar RandomMixture::getPositionIndicator() const { if (!isAlreadyComputedPositionIndicator_) computePositionIndicator(); return positionIndicator_; } /* Compute a positon indicator for a 1D distribution */ void RandomMixture::computePositionIndicator() const { if (getDimension() == 1) { positionIndicator_ = constant_[0]; const UnsignedInteger size = distributionCollection_.getSize(); // Assume an additive behaviour of the position indicator. It is true for the mean value, and almost true for the median of moderatly skewed distributions for(UnsignedInteger i = 0; i < size; ++i) positionIndicator_ += weights_(0, i) * distributionCollection_[i].getPositionIndicator(); isAlreadyComputedPositionIndicator_ = true; } } /* Get a dispersion indicator for a 1D distribution */ Scalar RandomMixture::getDispersionIndicator() const { if (!isAlreadyComputedDispersionIndicator_) computeDispersionIndicator(); return dispersionIndicator_; } /* Compute a dispersion indicator for a 1D distribution */ void RandomMixture::computeDispersionIndicator() const { if (getDimension() == 1) { dispersionIndicator_ = 0.0; const UnsignedInteger size = distributionCollection_.getSize(); // Assume a quadratic additive behaviour of the dispersion indicator. It is true for the standard deviation value, and almost true for the interquartile of moderatly skewed distributions for(UnsignedInteger i = 0; i < size; ++i) dispersionIndicator_ += std::pow(weights_(0, i) * distributionCollection_[i].getDispersionIndicator(), 2.0); dispersionIndicator_ = std::sqrt(dispersionIndicator_); isAlreadyComputedDispersionIndicator_ = true; } } /* BlockMin accessor */ void RandomMixture::setBlockMin(const UnsignedInteger blockMin) { blockMin_ = blockMin; } UnsignedInteger RandomMixture::getBlockMin() const { return blockMin_; } /* BlockMax accessor */ void RandomMixture::setBlockMax(const UnsignedInteger blockMax) { blockMax_ = blockMax; } UnsignedInteger RandomMixture::getBlockMax() const { return blockMax_; } /* MaxSize accessor */ void RandomMixture::setMaxSize(const UnsignedInteger maxSize) { maxSize_ = maxSize; // The cache must grow progresively, so; // + if maxSize >= storedSize, we keep the current cache as it is // + if maxSize < storedSize, we reduce the cache and update the storedSize if (maxSize_ < storedSize_) { characteristicValuesCache_.resize(maxSize); storedSize_ = maxSize; } } UnsignedInteger RandomMixture::getMaxSize() const { return maxSize_; } /* Alpha accessor */ void RandomMixture::setAlpha(const Scalar alpha) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Error: the alpha parameter must be strictly positive"; alpha_ = alpha; computeRange(); computeReferenceBandwidth(); } Scalar RandomMixture::getAlpha() const { return alpha_; } void RandomMixture::setBeta(const Scalar beta) { beta_ = beta; computeRange(); computeReferenceBandwidth(); } Scalar RandomMixture::getBeta() const { return beta_; } /* Reference bandwidth accessor */ void RandomMixture::setReferenceBandwidth(const Point & bandwidth) { referenceBandwidth_ = bandwidth; // Reset the cached values storedSize_ = 0; characteristicValuesCache_ = ComplexPersistentCollection(0); } Point RandomMixture::getReferenceBandwidth() const { return referenceBandwidth_; } /* PDF precision accessor. For other distributions, it is a read-only attribute. */ void RandomMixture::setPDFPrecision(const Scalar pdfPrecision) { pdfPrecision_ = pdfPrecision; } /* CDF precision accessor. For other distributions, it is a read-only attribute. */ void RandomMixture::setCDFPrecision(const Scalar cdfPrecision) { cdfPrecision_ = cdfPrecision; } /* Compute the reference bandwidth. It is defined as the largest bandwidth that allow a precise computation of the PDF over the range [positionIndicator_ +/- beta * dispersionIndicator_] */ void RandomMixture::computeReferenceBandwidth() { referenceBandwidth_ = Point(getDimension(), 0.0); Bool isFinite = true; for (UnsignedInteger k = 0; k < getDimension(); ++k) { referenceBandwidth_[k] = 2.0 * M_PI / (getRange().getUpperBound()[k] - getRange().getLowerBound()[k]); isFinite &= (getRange().getFiniteLowerBound()[k] && getRange().getFiniteUpperBound()[k]); } // Shrink a little bit the bandwidth if the range is finite if (isFinite) referenceBandwidth_ *= 0.5; // Compute the reference bandwidth factor referenceBandwidthFactor_ = 1.0; for (UnsignedInteger k = 0; k < getDimension(); ++k) referenceBandwidthFactor_ *= (referenceBandwidth_[k] / (2.0 * M_PI)); // Compute grid helper object gridMesher_ = SphereUniformNorm::GetFromGridSteps(referenceBandwidth_, true); // Reset the cached values storedSize_ = 0; characteristicValuesCache_ = ComplexPersistentCollection(0); } /* Compute the equivalent normal distribution, i.e. with the same mean and the same standard deviation */ void RandomMixture::computeEquivalentNormal() { if (distributionCollection_.getSize() > 0) equivalentNormal_ = Normal(getMean(), getCovariance()); else equivalentNormal_ = Normal(); } /* Compute the left-hand sum in Poisson's summation formula for the equivalent normal */ Scalar RandomMixture::computeEquivalentNormalPDFSum(const Scalar x) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "RandomMixture::computeEquivalentNormalPDFSum(Scalar) is only possible for dimension 1"; Scalar value = equivalentNormal_.computePDF(x); UnsignedInteger i = 0; Scalar delta = 0.0; do { ++i; const Scalar step = 2.0 * M_PI * i / referenceBandwidth_[0]; delta = equivalentNormal_.computePDF(x + step) + equivalentNormal_.computePDF(x - step); value += delta; } while (delta > 0.0 * value); return value; } Scalar RandomMixture::computeEquivalentNormalPDFSum(const Point & y, const Point & gridStep, UnsignedInteger imax, UnsignedInteger & levelMax) const { /* Compute the left-hand sum in Poisson's summation formula for the equivalent normal. The goal is to compute: \sum_{i \in \mathbb{Z}^d} q(y + i * h) with : y = (y_1,...,y_d) point on which the pdf is requested q = the density function of the distribution computed by computeEquivalentNormal h = (h_1,...,h_d) the reference bandwidth i*h = (i_1 * h_1,...,i_d * h_d) The sum above is rewritten as: \sum_{s \in \mathbb{N}} \sum_{x such as \norm{x-y}_\infinity=s} q(x) We start with s=0 and at each iteration, we add the points which are exactly at distance s with norm L^\infinity. If s>0, there are (2s+1)^d - (2s-1)^d points to add at iteration s. The evaluation of the gaussian density at these points are added into the current sum. The summation halts when the added value at iteration s is negligible relative to the current density value. */ if (gridStep.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: invalid grid dimension"; if (dimension_ == 1) { const Scalar x = y[0]; Scalar value = equivalentNormal_.computePDF(x); UnsignedInteger i = 0; Scalar delta = 0.0; do { ++i; const Scalar step = i * gridStep[0]; delta = equivalentNormal_.computePDF(x + step) + equivalentNormal_.computePDF(x - step); value += delta; } while (delta > 0.0 * value); return value; } // We cannot use gridMesher_; we need another instance, which does not use caching. // We force symmetry to improve performance. const SphereUniformNorm grid(SphereUniformNorm::GetFromGridSteps(gridStep, true)); Scalar gaussian_pdf = equivalentNormal_.computePDF(y); Scalar delta = std::max(1.0, gaussian_pdf); const Scalar epsilon = pdfPrecision_; // If imax is zero, we want to store in levelMax the first level which does not improve accuracy. // If non zero, this means that a previous call had already computed levelMax, and levelMax // must not change. levelMax = imax; Point skin1(dimension_); Point skin2(dimension_); for (UnsignedInteger i = 1; (imax == 0 || i < imax) && (delta > gaussian_pdf * epsilon); ++i) { const Sample skinPoints(grid.getPoints(i)); if (!imax) levelMax = i; const Scalar numberOfPoints = skinPoints.getSize(); delta = 0.0; for (UnsignedInteger j = 0; j < numberOfPoints; ++j) { for (UnsignedInteger d = 0; d < dimension_; ++d) { skin1[d] = y[d] + skinPoints[j][d]; skin2[d] = y[d] - skinPoints[j][d]; } delta += equivalentNormal_.computePDF(skin1) + equivalentNormal_.computePDF(skin2); } gaussian_pdf += delta; } return gaussian_pdf; } /* Compute the left-hand sum in Poisson's summation formula for the equivalent normal */ Scalar RandomMixture::computeEquivalentNormalCDFSum(const Scalar s, const Scalar t) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "RandomMixture::computeEquivalentNormalCDFSum(Scalar) is only possible for dimension 1"; Scalar value = equivalentNormal_.computeProbability(Interval(s, t)); UnsignedInteger i = 0; Scalar delta = 0.0; do { ++i; const Scalar step = 2.0 * M_PI * i / referenceBandwidth_[0]; delta = (equivalentNormal_.computeCDF(t + step) - equivalentNormal_.computeCDF(s + step)) + (equivalentNormal_.computeCDF(t - step) - equivalentNormal_.computeCDF(s - step)); value += delta; } while (delta > 0.0 * value); return value; } struct RandomMixturePair { Scalar norm_; Distribution distribution_; RandomMixturePair(): norm_(0.0), distribution_() {} RandomMixturePair(const Scalar norm, const Distribution & distribution): norm_(norm), distribution_(distribution) {} Bool operator < (const RandomMixturePair & other) const { return norm_ < other.norm_; } }; typedef Collection RandomMixturePairCollection; /** Project a RandomMixture over a Collection of DistributionFactory by using a regular sampling and Kolmogorov distance. */ DistributionCollection RandomMixture::project(const DistributionFactoryCollection & factoryCollection, Point & kolmogorovNorm, const UnsignedInteger size) const { if (getDimension() != 1) throw NotDefinedException(HERE) << "Error: cannot project random mixtures of dimension>1."; const UnsignedInteger factorySize = factoryCollection.getSize(); RandomMixturePairCollection result(0); const Scalar mean = getMean()[0]; const Scalar sigma = getStandardDeviation()[0]; // Sample the quantile function uniformly over [mean +/- alpha * sigma] const Scalar qMin = computeCDF(mean - alpha_ * sigma); const Scalar qMax = computeCDF(mean + alpha_ * sigma); const Sample dataX(computeQuantile(qMin, qMax, size).getMarginal(1)); // Loop over the factories for (UnsignedInteger i = 0; i < factorySize; ++i) { DistributionFactory factory(factoryCollection[i]); Distribution candidate; try { candidate = factory.build(dataX); LOGINFO(OSS() << "candidate " << i << " for the projection=" << candidate); } catch(...) { LOGWARN(OSS() << "Estimation failed for the factory " << factory.getImplementation()->getClassName() << ". It is removed from the set of factories."); } Scalar kolmogorov = 0.0; for (UnsignedInteger j = 0; j < size; ++j) kolmogorov = std::max(kolmogorov, std::abs(candidate.computeCDF(dataX[j][0]) - (qMin + j * (qMax - qMin) / (size - 1.0)))); result.add(RandomMixturePair(kolmogorov, candidate)); } // Sort the results const UnsignedInteger resultSize = result.getSize(); std::stable_sort(result.begin(), result.end()); // Extract the results DistributionCollection distributionCollection(resultSize); kolmogorovNorm = Point(resultSize); for (UnsignedInteger i = 0; i < resultSize; ++i) { distributionCollection[i] = result[i].distribution_; kolmogorovNorm[i] = result[i].norm_; } return distributionCollection; } /* Get the i-th marginal distribution */ RandomMixture::Implementation RandomMixture::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; if (dimension == 1) return clone(); return RandomMixture(distributionCollection_, weights_.getRow(i), Point(1, constant_[i])).clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ RandomMixture::Implementation RandomMixture::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); const UnsignedInteger outputDimension = indices.getSize(); const UnsignedInteger size = distributionCollection_.getSize(); Matrix marginalWeights(outputDimension, size); Point marginalConstant(outputDimension); for (UnsignedInteger i = 0; i < outputDimension; ++i) { const UnsignedInteger fromI = indices[i]; marginalConstant[i] = constant_[fromI]; const Matrix row(weights_.getRow(fromI)); for (UnsignedInteger j = 0; j < outputDimension; ++j) marginalWeights(i, j) = row(0, j); } return RandomMixture(distributionCollection_, marginalWeights, marginalConstant).clone(); } // getMarginal(Indices) /* Tell if the distribution has independent copula */ Bool RandomMixture::hasIndependentCopula() const { return (getDimension() == 1); } /* Tell if the distribution has elliptical copula */ Bool RandomMixture::hasEllipticalCopula() const { return (getDimension() == 1); } /* Check if the distribution is elliptical */ Bool RandomMixture::isElliptical() const { const UnsignedInteger size = distributionCollection_.getSize(); // Case of a Dirac distribution if (size == 0) return true; for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isElliptical()) return false; return true; } /* Check if the distribution is continuous */ Bool RandomMixture::isContinuous() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (distributionCollection_[i].isContinuous()) return true; return false; } /* Check if the distribution is discrete */ Bool RandomMixture::isDiscrete() const { const UnsignedInteger size = distributionCollection_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) if (!distributionCollection_[i].isDiscrete()) return false; return true; } /* Tell if the distribution is integer valued */ Bool RandomMixture::isIntegral() const { const UnsignedInteger size = distributionCollection_.getSize(); const UnsignedInteger dimension = getDimension(); for (UnsignedInteger i = 0; i < size; ++i) { // Check if the contributor is discrete if (!distributionCollection_[i].isDiscrete()) return false; // Check if all the weights are integer for (UnsignedInteger j = 0; j < dimension; ++j) if (weights_(j, i) != round(weights_(j, i))) return false; } return true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample RandomMixture::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; if (!isDiscrete()) throw NotDefinedException(HERE) << "Error: the support is defined only for discrete distributions."; const UnsignedInteger size = distributionCollection_.getSize(); const UnsignedInteger dimension = getDimension(); // The computation of the support is available only if there is one atom // otherwise the computePDF() and computeCDF() methods are not implemented anyway Sample support(0, dimension); Sample supportCandidates; if (dimension == 1) supportCandidates = distributionCollection_[0].getSupport() * Point(*weights_.getColumn(0).getImplementation()) + constant_; else { const Sample support0 = distributionCollection_[0].getSupport(); const Point scaling(*weights_.getColumn(0).getImplementation()); supportCandidates = Sample(support0.getSize(), dimension); for (UnsignedInteger i = 0; i < support0.getSize(); ++i) supportCandidates[i] = scaling * support0[i][0] + constant_; } // dimension > 1 for (UnsignedInteger indexNext = 1; indexNext < size; ++indexNext) { Sample nextSupport; if (dimension == 1) nextSupport = distributionCollection_[indexNext].getSupport() * Point(*weights_.getColumn(indexNext).getImplementation()); else { const Sample supportNext = distributionCollection_[indexNext].getSupport(); const Point scaling(*weights_.getColumn(indexNext).getImplementation()); nextSupport = Sample(supportNext.getSize(), dimension); for (UnsignedInteger i = 0; i < supportNext.getSize(); ++i) nextSupport[i] = scaling * supportNext[i][0] + constant_; } // dimension > 1 const UnsignedInteger supportCandidatesSize = supportCandidates.getSize(); const UnsignedInteger nextSupportSize = nextSupport.getSize(); Sample newSupportCandidate(supportCandidatesSize * nextSupportSize, dimension); UnsignedInteger k = 0; for (UnsignedInteger indexCandidates = 0; indexCandidates < supportCandidatesSize; ++indexCandidates) { const Point xI(supportCandidates[indexCandidates]); for (UnsignedInteger indexNext2 = 0; indexNext2 < nextSupportSize; ++indexNext2) { const Point xJ(nextSupport[indexNext2]); newSupportCandidate[k] = xI + xJ; ++k; } // indexNext2 } // indexCandidates // Remove duplicates supportCandidates = newSupportCandidate.sortUnique(); } // loop over the other atoms for (UnsignedInteger i = 0; i < supportCandidates.getSize(); ++i) { const Point candidate(supportCandidates[i]); if (interval.contains(candidate)) support.add(candidate); } return support; } /* Method save() stores the object through the StorageManager */ void RandomMixture::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distributionCollection_", distributionCollection_ ); adv.saveAttribute( "constant_", constant_ ); adv.saveAttribute( "weights_", weights_ ); adv.saveAttribute( "positionIndicator_", positionIndicator_ ); adv.saveAttribute( "isAlreadyComputedPositionIndicator_", isAlreadyComputedPositionIndicator_ ); adv.saveAttribute( "dispersionIndicator_", dispersionIndicator_ ); adv.saveAttribute( "isAlreadyComputedDispersionIndicator_", isAlreadyComputedDispersionIndicator_ ); adv.saveAttribute( "blockMin_", blockMin_ ); adv.saveAttribute( "blockMax_", blockMax_ ); adv.saveAttribute( "referenceBandwidth_", referenceBandwidth_ ); adv.saveAttribute( "referenceBandwidthFactor_", referenceBandwidthFactor_ ); adv.saveAttribute( "maxSize_", maxSize_ ); adv.saveAttribute( "storedSize_", storedSize_ ); adv.saveAttribute( "characteristicValuesCache_", characteristicValuesCache_ ); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); adv.saveAttribute( "pdfPrecision_", pdfPrecision_ ); adv.saveAttribute( "cdfPrecision_", cdfPrecision_ ); adv.saveAttribute( "inverseWeights_", inverseWeights_ ); adv.saveAttribute( "detWeightsInverse_", detWeightsInverse_ ); adv.saveAttribute( "fftAlgorithm_", fftAlgorithm_ ); adv.saveAttribute( "isAnalytical_", isAnalytical_ ); } // save /* Method load() reloads the object from the StorageManager */ void RandomMixture::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "distributionCollection_", distributionCollection_ ); adv.loadAttribute( "constant_", constant_ ); adv.loadAttribute( "weights_", weights_ ); adv.loadAttribute( "positionIndicator_", positionIndicator_ ); adv.loadAttribute( "isAlreadyComputedPositionIndicator_", isAlreadyComputedPositionIndicator_ ); adv.loadAttribute( "dispersionIndicator_", dispersionIndicator_ ); adv.loadAttribute( "isAlreadyComputedDispersionIndicator_", isAlreadyComputedDispersionIndicator_ ); adv.loadAttribute( "blockMin_", blockMin_ ); adv.loadAttribute( "blockMax_", blockMax_ ); adv.loadAttribute( "referenceBandwidth_", referenceBandwidth_ ); adv.loadAttribute( "referenceBandwidthFactor_", referenceBandwidthFactor_ ); adv.loadAttribute( "maxSize_", maxSize_ ); adv.loadAttribute( "storedSize_", storedSize_ ); adv.loadAttribute( "characteristicValuesCache_", characteristicValuesCache_ ); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); adv.loadAttribute( "pdfPrecision_", pdfPrecision_ ); adv.loadAttribute( "cdfPrecision_", cdfPrecision_ ); adv.loadAttribute( "inverseWeights_", inverseWeights_ ); adv.loadAttribute( "detWeightsInverse_", detWeightsInverse_ ); adv.loadAttribute( "fftAlgorithm_", fftAlgorithm_ ); adv.loadAttribute( "isAnalytical_", isAnalytical_ ); computePositionIndicator(); computeDispersionIndicator(); computeRange(); computeReferenceBandwidth(); computeEquivalentNormal(); } // load END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/RatioDistribution.cxx000066400000000000000000000434741307543307100261620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The RatioDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/RatioDistribution.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Uniform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RatioDistribution); static const Factory Factory_RatioDistribution; /* Default constructor */ RatioDistribution::RatioDistribution() : ContinuousDistribution() , left_(Uniform(0.0, 1.0)) , right_(Uniform(0.0, 1.0)) { setName("RatioDistribution"); setDimension(1); // Adjust the truncation interval and the distribution range computeRange(); } /* Parameters constructor to use when the two bounds are finite */ RatioDistribution::RatioDistribution(const Distribution & left, const Distribution & right) : ContinuousDistribution() , left_() , right_() { setName("RatioDistribution"); setLeft(left); setRight(right); computeRange(); } /* Comparison operator */ Bool RatioDistribution::operator ==(const RatioDistribution & other) const { if (this == &other) return true; return (left_ == other.getLeft()) && (right_ == other.getRight()); } Bool RatioDistribution::equals(const DistributionImplementation & other) const { const RatioDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String RatioDistribution::__repr__() const { OSS oss; oss << "class=" << RatioDistribution::GetClassName() << " name=" << getName() << " left=" << left_ << " right=" << right_; return oss; } String RatioDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(" << left_.__str__() << " * " << right_.__str__() << ")"; return oss; } /* Virtual constructor */ RatioDistribution * RatioDistribution::clone() const { return new RatioDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void RatioDistribution::computeRange() { const Scalar a = left_.getRange().getLowerBound()[0]; const Scalar b = left_.getRange().getUpperBound()[0]; const Scalar c = right_.getRange().getLowerBound()[0]; const Scalar d = right_.getRange().getUpperBound()[0]; if ((c > 0.0) || (d < 0.0)) { const Scalar aOverC = a / c; const Scalar aOverD = a / d; const Scalar bOverC = b / c; const Scalar bOverD = b / d; setRange(Interval(std::min(std::min(aOverC, aOverD), std::min(bOverC, bOverD)), std::max(std::max(aOverC, aOverD), std::max(bOverC, bOverD)))); } const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; setRange(Interval(std::min(std::min(ac, ad), std::min(bc, bd)), std::max(std::max(ac, ad), std::max(bc, bd)))); } /* Get one realization of the distribution */ Point RatioDistribution::getRealization() const { return Point(1, left_.getRealization()[0] * right_.getRealization()[0]); } /* Get the PDF of the distribution: PDF(x) = \int_R PDF_left(u) * PDF_right(x / u) * du / |u| */ Scalar RatioDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; if ((x < a) || (x > b)) return 0.0; const Scalar aLeft = left_.getRange().getLowerBound()[0]; const Scalar bLeft = left_.getRange().getUpperBound()[0]; const Scalar aRight = right_.getRange().getLowerBound()[0]; const Scalar bRight = right_.getRange().getUpperBound()[0]; // First, the case where the joint support of left and right is included in a unique quadrant if ((aLeft >= 0.0) && (aRight >= 0.0)) return computePDFQ1(x, aLeft, bLeft, aRight, bRight); if ((bLeft <= 0.0) && (aRight >= 0.0)) return computePDFQ2(x, aLeft, bLeft, aRight, bRight); if ((bLeft <= 0.0) && (bRight <= 0.0)) return computePDFQ3(x, aLeft, bLeft, aRight, bRight); if ((aLeft >= 0.0) && (bRight <= 0.0)) return computePDFQ4(x, aLeft, bLeft, aRight, bRight); // Second, the case where the support is in Q1 U Q2 if (aRight > 0.0) return computePDFQ1(x, 0.0, bLeft, aRight, bRight) + computePDFQ2(x, aLeft, 0.0, aRight, bRight); // Third, the case where the support is in Q3 U Q4 if (bRight < 0.0) return computePDFQ3(x, 0.0, bLeft, aRight, bRight) + computePDFQ4(x, aLeft, 0.0, aRight, bRight); // Fourth, the case where the support is in Q1 U Q4 if (aLeft > 0.0) return computePDFQ1(x, aLeft, bLeft, 0.0, bRight) + computePDFQ4(x, aLeft, bLeft, aRight, 0.0); // Fifth, the case where the support is in Q2 U Q3 if (bLeft < 0.0) return computePDFQ2(x, aLeft, bLeft, 0.0, bRight) + computePDFQ3(x, aLeft, bLeft, aRight, 0.0); // Sixth, the case where the support is in Q1 U Q2 U Q3 U Q4 const Scalar q1 = computePDFQ1(x, 0.0, bLeft, 0.0, bRight); const Scalar q2 = computePDFQ2(x, aLeft, 0.0, 0.0, bRight); const Scalar q3 = computePDFQ3(x, aLeft, 0.0, aRight, 0.0); const Scalar q4 = computePDFQ4(x, 0.0, bLeft, aRight, 0.0); return q1 + q2 + q3 + q4; } /* Get the PDF of the distribution: PDF(x) = \int_Q1 PDF_left(u) * PDF_right(x / u) * du / |u| when both right and left are positive */ Scalar RatioDistribution::computePDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { if ((x >= 0.0) && (x < ad)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= ad) && (x <= bd)) return algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; return 0.0; } if (ad <= bc) { if ((x >= ac) && (x < ad)) return algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; if ((x >= ad) && (x < bc)) return algo.integrate(pdfKernel, Interval(x / d, x / c), pdfEpsilon_)[0]; if ((x >= bc) && (x < bd)) return algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; return 0.0; } if ((x >= ac) && (x < bc)) return algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; if ((x >= bc) && (x < ad)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= ad) && (x < bd)) return algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; return 0.0; } /* Get the PDF of the distribution: PDF(x) = \int_Q2 PDF_left(u) * PDF_right(x / u) * du / |u| when right is negative and left is positive */ Scalar RatioDistribution::computePDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (c == 0.0) { if ((x >= ad) && (x < bd)) return algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; if ((x >= bd) && (x <= 0.0)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; return 0.0; } if (ac <= bd) { if ((x >= ad) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; if ((x >= ac) && (x < bd)) return algo.integrate(pdfKernel, Interval(x / c, x / d), pdfEpsilon_)[0]; if ((x >= bd) && (x < bc)) return algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; return 0.0; } if ((x >= ad) && (x < bd)) return algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; if ((x >= bd) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= ac) && (x < bc)) return algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; return 0.0; } /* Get the PDF of the distribution: PDF(x) = \int_Q3 PDF_left(u) * PDF_right(x / u) * du / |u| when both right and left are negative */ Scalar RatioDistribution::computePDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { if ((x >= bc) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; if ((x >= 0.0) && (x < bc)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; return 0.0; } if (ad <= bc) { if ((x >= ad) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; if ((x >= bc) && (x < ad)) return algo.integrate(pdfKernel, Interval(x / d, x / c), pdfEpsilon_)[0]; if ((x >= bd) && (x < bc)) return algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; return 0.0; } if ((x >= bc) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, x / c), pdfEpsilon_)[0]; if ((x >= ad) && (x < bc)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= bd) && (x < ad)) return algo.integrate(pdfKernel, Interval(x / d, b), pdfEpsilon_)[0]; return 0.0; } /* Get the PDF of the distribution: PDF(x) = \int_Q4 PDF_left(u) * PDF_right(x / u) * du / |u| when right is positive and left is negative */ Scalar RatioDistribution::computePDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const { const Scalar ac = a * c; const Scalar ad = a * d; const Scalar bc = b * c; const Scalar bd = b * d; GaussKronrod algo; const PDFKernelWrapper pdfKernelWrapper(left_, right_, x); const Function pdfKernel(bindMethod(pdfKernelWrapper, &PDFKernelWrapper::eval, 1, 1)); if (d == 0.0) { if ((x >= ac) && (x <= 0.0)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= bc) && (x < ac)) return algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; return 0.0; } if (bd <= ac) { if ((x >= bc) && (x < ac)) return algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; if ((x >= ad) && (x < bc)) return algo.integrate(pdfKernel, Interval(x / c, x / d), pdfEpsilon_)[0]; if ((x >= bd) && (x < ad)) return algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; return 0.0; } if ((x >= bd) && (x < ad)) return algo.integrate(pdfKernel, Interval(a, x / d), pdfEpsilon_)[0]; if ((x >= ac) && (x < bd)) return algo.integrate(pdfKernel, Interval(a, b), pdfEpsilon_)[0]; if ((x >= bc) && (x < ac)) return algo.integrate(pdfKernel, Interval(x / c, b), pdfEpsilon_)[0]; return 0.0; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex RatioDistribution::computeCharacteristicFunction(const Scalar x) const { const Scalar muLeft = left_.getMean()[0]; const Scalar muRight = right_.getMean()[0]; const Scalar varLeft = left_.getCovariance()(0, 0); const Scalar varRight = right_.getCovariance()(0, 0); if (x * x * (varLeft + muLeft * muLeft + varRight + muRight * muRight) < 2.0 * SpecFunc::ScalarEpsilon) return Complex(1.0, -x * muLeft * muRight); if (std::abs(x) > ResourceMap::GetAsScalar("RatioDistribution-LargeCharacteristicFunctionArgument")) return ContinuousDistribution::computeCharacteristicFunction(x); Complex result(0.0); const Scalar aLeft = left_.getRange().getLowerBound()[0]; const Scalar bLeft = left_.getRange().getUpperBound()[0]; GaussKronrod algo; const CFKernelWrapper cfKernelWrapper(left_, right_, x); const Function cfKernel(bindMethod(cfKernelWrapper, &CFKernelWrapper::eval, 1, 2)); Scalar negativeError = 0.0; const Point negativePart(algo.integrate(cfKernel, Interval(aLeft, muLeft), negativeError)); Scalar positiveError = 0.0; const Point positivePart(algo.integrate(cfKernel, Interval(muLeft, bLeft), positiveError)); Complex value(negativePart[0] + positivePart[0], negativePart[1] + positivePart[1]); return value; } /* Compute the mean of the distribution */ void RatioDistribution::computeMean() const { mean_ = Point(1, left_.getMean()[0] * right_.getMean()[0]); isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void RatioDistribution::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar meanLeft = left_.getMean()[0]; const Scalar meanRight = right_.getMean()[0]; const Scalar varLeft = left_.getCovariance()(0, 0); const Scalar varRight = right_.getCovariance()(0, 0); covariance_(0, 0) = meanLeft * meanLeft * varRight + meanRight * meanRight * varLeft + varLeft * varRight; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point RatioDistribution::getParameter() const { Point point(left_.getParameter()); point.add(right_.getParameter()); return point; } void RatioDistribution::setParameter(const Point & parameter) { const UnsignedInteger leftSize = left_.getParameterDimension(); const UnsignedInteger rightSize = right_.getParameterDimension(); if (parameter.getSize() != leftSize + rightSize) throw InvalidArgumentException(HERE) << "Error: expected " << leftSize + rightSize << " values, got " << parameter.getSize(); Point newLeftParameters(leftSize); Point newRightParameters(rightSize); std::copy(parameter.begin(), parameter.begin() + leftSize, newLeftParameters.begin()); std::copy(parameter.begin() + leftSize, parameter.end(), newRightParameters.begin()); Distribution newLeft(left_); Distribution newRight(right_); newLeft.setParameter(newLeftParameters); newRight.setParameter(newRightParameters); const Scalar w = getWeight(); *this = RatioDistribution(newLeft, newRight); setWeight(w); } /* Parameters description accessor */ Description RatioDistribution::getParameterDescription() const { Description description(left_.getParameterDescription()); description.add(right_.getParameterDescription()); return description; } /* Left accessor */ void RatioDistribution::setLeft(const Distribution & left) { if (left.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can multiply only distribution with dimension=1, here dimension=" << left.getDimension(); if (!left.isContinuous()) throw InvalidArgumentException(HERE) << "Error: can multiply only continuous distributions"; left_ = left; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = left_.getImplementation()->isParallel(); computeRange(); } Distribution RatioDistribution::getLeft() const { return left_; } /* Right accessor */ void RatioDistribution::setRight(const Distribution & right) { if (right.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can multiply only distribution with dimension=1, here dimension=" << right.getDimension(); if (!right.isContinuous()) throw InvalidArgumentException(HERE) << "Error: can multiply only continuous distributions"; right_ = right; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = right_.getImplementation()->isParallel(); computeRange(); } Distribution RatioDistribution::getRight() const { return right_; } Bool RatioDistribution::isContinuous() const { return left_.isContinuous() && right_.isContinuous(); } /* Tell if the distribution is integer valued */ Bool RatioDistribution::isDiscrete() const { return left_.isDiscrete() && right_.isDiscrete(); } /* Tell if the distribution is integer valued */ Bool RatioDistribution::isIntegral() const { return left_.isIntegral() && right_.isIntegral(); } /* Method save() stores the object through the StorageManager */ void RatioDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "left_", left_ ); adv.saveAttribute( "right_", right_ ); } /* Method load() reloads the object from the StorageManager */ void RatioDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "left_", left_ ); adv.loadAttribute( "right_", right_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Rayleigh.cxx000066400000000000000000000244751307543307100242500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Rayleigh distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Rayleigh.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Rayleigh); static const Factory Factory_Rayleigh; /* Default constructor */ Rayleigh::Rayleigh() : ContinuousDistribution() , sigma_(1.0) , gamma_(0.0) { setName("Rayleigh"); setDimension(1); computeRange(); } /* Parameters constructor */ Rayleigh::Rayleigh(const Scalar sigma, const Scalar gamma) : ContinuousDistribution() , sigma_(0.0) , gamma_(gamma) { setName("Rayleigh"); // This call set also the range setSigma(sigma); setDimension(1); } /* Comparison operator */ Bool Rayleigh::operator ==(const Rayleigh & other) const { if (this == &other) return true; return (sigma_ == other.sigma_) && (gamma_ == other.gamma_); } Bool Rayleigh::equals(const DistributionImplementation & other) const { const Rayleigh* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Rayleigh::__repr__() const { OSS oss; oss << "class=" << Rayleigh::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " sigma=" << sigma_ << " gamma=" << gamma_; return oss; } String Rayleigh::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(sigma = " << sigma_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ Rayleigh * Rayleigh::clone() const { return new Rayleigh(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Rayleigh::computeRange() { const Point lowerBound(1, gamma_); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Rayleigh::getRealization() const { return Point(1, gamma_ + sigma_ * std::sqrt(-2.0 * std::log(RandomGenerator::Generate()))); } /* Get the DDF of the distribution */ Point Rayleigh::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return Point(1, 0.0); const Scalar y = x / sigma_; const Scalar sigma2 = sigma_ * sigma_; return Point(1, -std::exp(-0.5 * y * y) * (x - sigma_) * (x + sigma_) / (sigma2 * sigma2)); } /* Get the PDF of the distribution */ Scalar Rayleigh::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; const Scalar y = x / (sigma_ * sigma_); return y * std::exp(-0.5 * x * y); } Scalar Rayleigh::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return SpecFunc::LogMinScalar; const Scalar y = x / (sigma_ * sigma_); return std::log(y) - 0.5 * x * y; } /* Get the CDF of the distribution */ Scalar Rayleigh::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; const Scalar y = x / sigma_; return 1.0 - std::exp(-0.5 * y * y); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) phi(x) = (1 - sigma * x * exp(-sigma^2 * x^2 / 2) * sqrt(pi / 2) * (erfi(sigma * x / sqrt(2)) - i)) * exp(i * gamma * x) erfi(t) = -i * erf(i * t) = 2 / sqrt(pi) * int(exp(u^2), u=0..t) dawson(t) = exp(-t^2) * int(exp(u^2), t=0..t) erfi(t) = 2 / sqrt(pi) * exp(t^2) * dawson(t) phi(x) = (1 - sigma * x * exp(-sigma^2 * x^2 / 2) * sqrt(pi / 2) * (2 / sqrt(pi) * exp(sigma^2 * x^2 / 2) * dawson(sigma * x / sqrt(2)) - i)) * exp(i * gamma * x) = (1 - sigma * x * (sqrt(2) * dawson(sigma * x / sqrt(2)) - i * exp(-sigma^2 * x^2 / 2) * sqrt(pi/2))) * exp(i * gamma * x) = (1 - t * (2 * dawson(t) - i * exp(-t * t) * sqrt(pi))) * exp(i * gamma * x) with t = sigma * x / sqrt(2) */ Complex Rayleigh::computeCharacteristicFunction(const Scalar x) const { const Scalar t = sigma_ * x / std::sqrt(2.0); return Complex(1 - 2 * t * SpecFunc::Dawson(t), t * std::exp(-t * t) * std::sqrt(M_PI)) * std::exp(Complex(0.0, x * gamma_)); } /* Get the PDFGradient of the distribution */ Point Rayleigh::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point pdfGradient(2, 0.0); if (x <= 0.0) return pdfGradient; const Scalar sigma2 = sigma_ * sigma_; const Scalar factor1 = computePDF(point) / sigma2; const Scalar factor2 = (x - sigma_) * (x + sigma_); pdfGradient[0] = factor1 * (factor2 - sigma2) / sigma_; pdfGradient[1] = factor1 * factor2 / x; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Rayleigh::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point cdfGradient(2, 0.0); const Scalar pdf = computePDF(point); if (x <= 0.0) return cdfGradient; cdfGradient[0] = -x * pdf / sigma_; cdfGradient[1] = -pdf; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Rayleigh::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return gamma_ + sigma_ * std::sqrt(-2.0 * std::log(prob)); return gamma_ + sigma_ * std::sqrt(-2.0 * log1p(-prob)); } /* Compute the mean of the distribution */ void Rayleigh::computeMean() const { // 1.253314137315500251207882 = sqrt(pi/2) mean_ = Point(1, gamma_ + 1.253314137315500251207882 * sigma_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Rayleigh::getStandardDeviation() const { // 0.6551363775620335530939357 = sqrt(2 - pi / 2) return Point(1, 0.6551363775620335530939357 * sigma_); } /* Get the skewness of the distribution */ Point Rayleigh::getSkewness() const { // 0.631110657818937138918970 = 2 * sqrt(pi / (4 - pi)) * (pi - 3) / (4 - pi) return Point(1, 0.631110657818937138918970); } /* Get the kurtosis of the distribution */ Point Rayleigh::getKurtosis() const { // 3.245089300687638062848667 = 3 - (6 * pi^2 - 24 * pi + 16) / (4 - pi)^2 return Point(1, 3.245089300687638062848667); } /* Get the moments of the distribution */ Point Rayleigh::getStandardMoment(const UnsignedInteger n) const { return Point(1, std::exp(0.5 * n * M_LN2 + SpecFunc::LnGamma(1.0 + 0.5 * n))); } /* Get the standard representative in the parametric family, associated with the standard moments */ Rayleigh::Implementation Rayleigh::getStandardRepresentative() const { return Rayleigh(1.0, 0.0).clone(); } /* Compute the covariance of the distribution */ void Rayleigh::computeCovariance() const { covariance_ = CovarianceMatrix(1); // 0.429203673205103380768678 = (4 - pi) / 2 covariance_(0, 0) = 0.429203673205103380768678 * sigma_ * sigma_; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Rayleigh::getParameter() const { Point point(2); point[0] = sigma_; point[1] = gamma_; return point; } void Rayleigh::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Rayleigh(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Rayleigh::getParameterDescription() const { Description description(2); description[0] = "sigma"; description[1] = "gamma"; return description; } /* Sigma accessor */ void Rayleigh::setSigma(const Scalar sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Sigma MUST be positive"; if (sigma != sigma_) { sigma_ = sigma; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Rayleigh::getSigma() const { return sigma_; } /* Gamma accessor */ void Rayleigh::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depend on gamma computeRange(); } } Scalar Rayleigh::getGamma() const { return gamma_; } /* Method save() stores the object through the StorageManager */ void Rayleigh::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "gamma_", gamma_ ); } /* Method load() reloads the object from the StorageManager */ void Rayleigh::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "gamma_", gamma_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/RayleighFactory.cxx000066400000000000000000000071611307543307100255710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Rayleigh distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/RayleighFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RayleighFactory); static const Factory Factory_RayleighFactory; /* Default constructor */ RayleighFactory::RayleighFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ RayleighFactory * RayleighFactory::clone() const { return new RayleighFactory(*this); } /* Here is the interface that all derived class must implement */ RayleighFactory::Implementation RayleighFactory::build(const Sample & sample) const { return buildAsRayleigh(sample).clone(); } RayleighFactory::Implementation RayleighFactory::build(const Point & parameters) const { return buildAsRayleigh(parameters).clone(); } RayleighFactory::Implementation RayleighFactory::build() const { return buildAsRayleigh().clone(); } Rayleigh RayleighFactory::buildAsRayleigh(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Rayleigh distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Rayleigh distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar gamma = xMin - std::abs(xMin) / (2.0 + size); Scalar sumSquares = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { const Scalar xI = sample[i][0] - gamma; sumSquares += xI * xI; } // Here we test on sumSquares in order to detect also overflows if (!SpecFunc::IsNormal(sumSquares)) throw InvalidArgumentException(HERE) << "Error: cannot build a Rayleigh distribution if data contains NaN or Inf"; if (sumSquares == 0.0) { Rayleigh result(100.0 * (std::max(std::abs(gamma), SpecFunc::ScalarEpsilon) * SpecFunc::ScalarEpsilon), gamma); result.setDescription(sample.getDescription()); return result; } try { Rayleigh result(std::sqrt(0.5 * sumSquares / size), gamma); result.setDescription(sample.getDescription()); return result; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot estimate parameters of a Rayleigh distribution from the given sample"; } } Rayleigh RayleighFactory::buildAsRayleigh(const Point & parameters) const { try { Rayleigh distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Rayleigh distribution from the given parameters"; } } Rayleigh RayleighFactory::buildAsRayleigh() const { return Rayleigh(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Rice.cxx000066400000000000000000000211301307543307100233470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Rice distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Rice.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Rice); static const Factory Factory_Rice; /* Default constructor */ Rice::Rice() : ContinuousDistribution() , sigma_(-1.0) , nu_(-1.0) , maximumIteration_(ResourceMap::GetAsUnsignedInteger("DistFunc-MaximumIteration")) { setName("Rice"); setNu(0.0); setSigma(1.0); setDimension(1); computeRange(); } /* Parameters constructor */ Rice::Rice(const Scalar sigma, const Scalar nu) : ContinuousDistribution() , sigma_(0.0) , nu_(nu) , maximumIteration_(ResourceMap::GetAsUnsignedInteger("DistFunc-MaximumIteration")) { setName("Rice"); setNu(nu); // This call sets also the range setSigma(sigma); setDimension(1); } /* Comparison operator */ Bool Rice::operator ==(const Rice & other) const { if (this == &other) return true; return (sigma_ == other.sigma_) && (nu_ == other.nu_); } Bool Rice::equals(const DistributionImplementation & other) const { const Rice* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Rice::__repr__() const { OSS oss; oss << "class=" << Rice::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " sigma=" << sigma_ << " nu=" << nu_; return oss; } String Rice::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(sigma = " << sigma_ << ", nu = " << nu_ << ")"; return oss; } /* Virtual constructor */ Rice * Rice::clone() const { return new Rice(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Rice::computeRange() { const Point lowerBound(1, 0.0 ); const Point upperBound(1, computeScalarQuantile(cdfEpsilon_, true)); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Rice::getRealization() const { const Scalar x = sigma_ * DistFunc::rNormal() + nu_; const Scalar y = sigma_ * DistFunc::rNormal(); return Point(1.0, std::sqrt(x * x + y * y)); } /* Get the PDF of the distribution */ Scalar Rice::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return 0.0; const Scalar xScaled = x / sigma_; const Scalar nuScaled = nu_ / sigma_; return xScaled / sigma_ * std::exp(-0.5 * (xScaled * xScaled + nuScaled * nuScaled) + SpecFunc::LogBesselI0(xScaled * nuScaled)); } /* Get the logarithm of the PDF of the distribution */ Scalar Rice::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= 0.0) return SpecFunc::LogMinScalar; const Scalar xScaled = x / sigma_; const Scalar nuScaled = nu_ / sigma_; return std::log(xScaled / sigma_) - 0.5 * (xScaled * xScaled + nuScaled * nuScaled) + SpecFunc::LogBesselI0(xScaled * nuScaled); } /* Get the CDF of the distribution */ Scalar Rice::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= 0.0) return 0.0; const Scalar lambda = std::pow(nu_ / sigma_, 2); const Scalar y = std::pow(point[0] / sigma_, 2); return DistFunc::pNonCentralChiSquare(2, lambda , y, false, pdfEpsilon_, maximumIteration_); } Scalar Rice::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); if (point[0] <= 0.0) return 1.0; const Scalar lambda = std::pow(nu_ / sigma_, 2); const Scalar y = std::pow(point[0] / sigma_, 2); return DistFunc::pNonCentralChiSquare(2, lambda , y, true, pdfEpsilon_, maximumIteration_); } /* Compute the mean of the distribution */ void Rice::computeMean() const { //1.253314137315500251207882 = sqrt(pi/2) const Scalar x = -0.5 * std::pow(nu_ / sigma_, 2); mean_ = Point(1, sigma_ * 1.253314137315500251207882 * SpecFunc::HyperGeom_1_1(-0.5, 1, x)); } /* Get the standard deviation of the distribution */ Point Rice::getStandardDeviation() const { if (!isAlreadyComputedCovariance_) computeCovariance(); return Point(1, std::sqrt(covariance_(0, 0))); } /* Get the moments of the standardized distribution */ Point Rice::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); const Scalar sigma2 = sigma_ * sigma_; return Point(1, std::pow(2.0 * sigma2, 0.5 * n) * SpecFunc::Gamma(1.0 + 0.5 * n) * SpecFunc::HyperGeom_1_1(-0.5 * n, 1.0, -0.5 * nu_ * nu_ / sigma2)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Rice::Implementation Rice::getStandardRepresentative() const { return clone(); } /* Compute the covariance of the distribution */ void Rice::computeCovariance() const { covariance_ = CovarianceMatrix(1); Scalar covariance = 0.0; const Scalar mu = getMean()[0]; covariance = 2.0 * sigma_ * sigma_ + (nu_ - mu) * (nu_ + mu); covariance_(0, 0) = covariance; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Rice::getParameter() const { Point point(2); point[0] = sigma_; point[1] = nu_; return point; } void Rice::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Rice(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Rice::getParameterDescription() const { Description description(2); description[0] = "sigma"; description[1] = "nu"; return description; } /* Sigma accessor */ void Rice::setSigma(const Scalar sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Sigma MUST be positive"; if (sigma != sigma_) { sigma_ = sigma; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Rice::getSigma() const { return sigma_; } /* Nu accessor */ void Rice::setNu(const Scalar nu) { if (!(nu >= 0.0)) throw InvalidArgumentException(HERE) << "Nu MUST be positive"; if (nu != nu_) { nu_ = nu; isAlreadyComputedMean_ = false; // The covariance does not depend on nu computeRange(); } } Scalar Rice::getNu() const { return nu_; } /* Maximum iterations accessor */ void Rice::setMaximumIteration(const UnsignedInteger maximumIteration) { maximumIteration_ = maximumIteration; } UnsignedInteger Rice::getMaximumIteration() const { return maximumIteration_; } /* Method save() stores the object through the StorageManager */ void Rice::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "maximumIteration_", maximumIteration_ ); } /* Method load() reloads the object from the StorageManager */ void Rice::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "maximumIteration_", maximumIteration_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/RiceFactory.cxx000066400000000000000000000135541307543307100247120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Rice distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RiceFactory.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" #include "openturns/Point.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RiceFactory); static const Factory Factory_RiceFactory; /* Default constructor */ RiceFactory::RiceFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ RiceFactory * RiceFactory::clone() const { return new RiceFactory(*this); } struct RiceFactoryParameterConstraint { /** Constructor from a sample and a derivative factor estimate */ RiceFactoryParameterConstraint(const Scalar r): r2p1_(1.0 + r * r) { // Nothing to do }; Point computeConstraint(const Point & parameter) const { // Here u = \theta^2 wrt reference const Scalar u = parameter[0]; const Scalar relation = u - (r2p1_ * computeXi(u) - 2.0); return Point(1, relation); } Scalar computeXi(const Scalar u) const { if (!(u > 0.0)) throw InvalidArgumentException(HERE) << "Error: the argument u=" << u << " in the constraint must be positive."; const Scalar up2 = u + 2.0; const Scalar quarterU = 0.25 * u; return up2 - 0.125 * M_PI * std::exp(-0.5 * u + 2.0 * SpecFunc::LogBesselI0(quarterU)) * std::pow(up2 + u * std::exp(SpecFunc::DeltaLogBesselI10(quarterU)), 2.0); } Scalar r2p1_; }; /* Here is the interface that all derived class must implement */ RiceFactory::Implementation RiceFactory::build(const Sample & sample) const { return buildAsRice(sample).clone(); } RiceFactory::Implementation RiceFactory::build(const Point & parameters) const { return buildAsRice(parameters).clone(); } RiceFactory::Implementation RiceFactory::build() const { return buildAsRice().clone(); } /* Parameters estimation using the Koay inversion technique, see: Koay, C. G. and Basser, P. J., "Analytically exact correction scheme for signal extraction from noisy magnitude MR signals", Journal of Magnetic Resonance, Vol. 179, 2, pp. 317-322 (2006) */ Rice RiceFactory::buildAsRice(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Rice distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Rice distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar mu = sample.computeMean()[0]; const Scalar std = sample.computeStandardDeviationPerComponent()[0]; // Koay inversion method RiceFactoryParameterConstraint constraint(mu / std); const Function f(bindMethod(constraint, &RiceFactoryParameterConstraint::computeConstraint, 1, 1)); // Find a bracketing interval Scalar a = 1.0; Scalar b = 2.0; Scalar fA = f(Point(1, a))[0]; Scalar fB = f(Point(1, b))[0]; const Scalar largeValue = std::sqrt(SpecFunc::MaxScalar); const UnsignedInteger maximumIteration = ResourceMap::GetAsUnsignedInteger( "RiceFactory-MaximumIteration" ); UnsignedInteger iteration = 0; // While f has the same sign at the two bounds, update the interval while ((fA * fB > 0.0) && (std::abs(fA) < largeValue) && (std::abs(fB) < largeValue) && (b < largeValue) && (iteration < maximumIteration)) { a = 0.5 * a; fA = f(Point(1, a))[0]; if (fA * fB <= 0.0) break; b = 2.0 * b; fB = f(Point(1, b))[0]; LOGDEBUG(OSS() << "a=" << a << ", fa=" << fA << ", b=" << b << ", fb=" << fB); ++iteration; } if ((std::abs(fA) > largeValue) || (std::abs(fB) > largeValue) || (std::abs(b) > largeValue) || (iteration == maximumIteration)) throw InvalidArgumentException(HERE) << "Error: cannot estimate parameters of a Rice distribution from the given sample"; // Solve the constraint equation Brent solver(ResourceMap::GetAsScalar( "RiceFactory-AbsolutePrecision" ), ResourceMap::GetAsScalar( "RiceFactory-RelativePrecision" ), ResourceMap::GetAsScalar( "RiceFactory-ResidualPrecision" ), maximumIteration); // u estimate const Scalar u = solver.solve(f, 0.0, a, b, fA, fB); const Scalar xiU = constraint.computeXi(u); // Corresponding sigma estimate const Scalar sigma = std / std::sqrt(xiU); // Corresponding nu estimate const Scalar nu = std::sqrt(mu * mu + sigma * sigma * (xiU - 2.0)); try { Rice result(sigma, nu); result.setDescription(sample.getDescription()); return result; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot estimate parameters of a Rice distribution from the given sample"; } } Rice RiceFactory::buildAsRice(const Point & parameters) const { try { Rice distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Rice distribution from the given parameters"; } } Rice RiceFactory::buildAsRice() const { return Rice(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Skellam.cxx000066400000000000000000000245371307543307100240730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Skellam distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Skellam.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Skellam); static const Factory Factory_Skellam; /* Default constructor */ Skellam::Skellam() : DiscreteDistribution() , lambda1_(-1.0) , lambda2_(-1.0) , maximumIteration_(ResourceMap::GetAsUnsignedInteger("DistFunc-MaximumIteration")) { setName("Skellam"); // We set the dimension of the Skellam distribution setDimension( 1 ); setLambda1Lambda2(1.0, 1.0); } /* Parameters constructor */ Skellam::Skellam(const Scalar lambda1, const Scalar lambda2) : DiscreteDistribution() , lambda1_(-1.0) , lambda2_(-1.0) , maximumIteration_(ResourceMap::GetAsUnsignedInteger("DistFunc-MaximumIteration")) { setName("Skellam"); // We set the dimension of the Skellam distribution setDimension( 1 ); // This call set also the range. setLambda1Lambda2(lambda1, lambda2); } /* Comparison operator */ Bool Skellam::operator ==(const Skellam & other) const { if (this == &other) return true; return (lambda1_ == other.lambda1_) && (lambda2_ == other.lambda2_); } Bool Skellam::equals(const DistributionImplementation & other) const { const Skellam* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Skellam::__repr__() const { OSS oss(true); oss << "class=" << Skellam::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " lambda1=" << lambda1_ << " lambda2=" << lambda2_; return oss; } String Skellam::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(lambda1 = " << lambda1_ << ", lambda2 = " << lambda2_ << ")"; return oss; } /* Virtual constructor */ Skellam * Skellam::clone() const { return new Skellam(*this); } /* Get one realization of the distribution */ Point Skellam::getRealization() const { // Must cast the second Poisson realization to avoid overflow by taking the opposite of an UnsignedInteger return Point(1, DistFunc::rPoisson(lambda1_) - static_cast(DistFunc::rPoisson(lambda2_))); } /* Get the PDF of the distribution */ Scalar Skellam::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (std::abs(k - round(k)) > supportEpsilon_) return 0.0; if (k < 0) return 2 * DistFunc::dNonCentralChiSquare(2.0 * (1.0 - k), 2.0 * lambda1_, 2.0 * lambda2_, pdfEpsilon_, maximumIteration_); return 2 * DistFunc::dNonCentralChiSquare(2.0 * (k + 1.0), 2.0 * lambda2_, 2.0 * lambda1_, pdfEpsilon_, maximumIteration_); } /* Get the CDF of the distribution */ Scalar Skellam::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < 0.0) return DistFunc::pNonCentralChiSquare(-2.0 * k, 2.0 * lambda1_, 2.0 * lambda2_, false, cdfEpsilon_, maximumIteration_); return DistFunc::pNonCentralChiSquare(2.0 * (k + 1.0), 2.0 * lambda2_, 2.0 * lambda1_, true, cdfEpsilon_, maximumIteration_); } /* Get the PDF gradient of the distribution */ Point Skellam::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Skellam::computePDFGradient(const Point & point) const"; } /* Get the CDF gradient of the distribution */ Point Skellam::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In Skellam::computeCDFGradient(const Point & point) const"; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Skellam::computeCharacteristicFunction(const Scalar x) const { return std::exp(computeLogCharacteristicFunction(x)); } Complex Skellam::computeLogCharacteristicFunction(const Scalar x) const { return lambda1_ * std::exp(Complex(0.0, x)) + lambda2_ * std::exp(Complex(0.0, -x)) - (lambda1_ + lambda2_); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Complex Skellam::computeGeneratingFunction(const Complex & z) const { return std::exp(computeLogGeneratingFunction(z)); } Complex Skellam::computeLogGeneratingFunction(const Complex & z) const { return lambda1_ * z + lambda2_ / z - (lambda1_ + lambda2_); } /* Get the quantile of the distribution */ Scalar Skellam::computeScalarQuantile(const Scalar prob, const Bool tail) const { return ceil(DistributionImplementation::computeScalarQuantile(prob, tail)); } /* Compute the mean of the distribution */ void Skellam::computeMean() const { mean_ = Point(1, lambda1_ - lambda2_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Skellam::getStandardDeviation() const { return Point(1, std::sqrt(lambda1_ + lambda2_)); } /* Get the skewness of the distribution */ Point Skellam::getSkewness() const { return Point(1, (lambda1_ - lambda2_) * std::pow(lambda1_ + lambda2_, -1.5)); } /* Get the kurtosis of the distribution */ Point Skellam::getKurtosis() const { return Point(1, 3.0 + 1.0 / (lambda1_ + lambda2_)); } /* Compute the covariance of the distribution */ void Skellam::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = lambda1_ + lambda2_; isAlreadyComputedCovariance_ = true; } /* Get the support of a discrete distribution that intersect a given interval */ Sample Skellam::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const SignedInteger kMin = static_cast< SignedInteger > (ceil(interval.getLowerBound()[0])); const SignedInteger kMax = static_cast< SignedInteger > (floor(interval.getUpperBound()[0])); Sample result(0, 1); for (SignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value accessor */ Point Skellam::getParameter() const { Point point(2); point[0] = lambda1_; point[1] = lambda2_; return point; } void Skellam::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Skellam(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Skellam::getParameterDescription() const { Description description(2); description[0] = "lambda1"; description[1] = "lambda2"; return description; } /* Check if the distribution is elliptical */ Bool Skellam::isElliptical() const { return lambda1_ == lambda2_; } /* Lambda1/Lambda2 accessor */ void Skellam::setLambda1Lambda2(const Scalar lambda1, const Scalar lambda2) { if (!(lambda1 > 0.0)) throw InvalidArgumentException(HERE) << "Lambda1 must be positive, here lambda1=" << lambda1; if (!(lambda2 > 0.0)) throw InvalidArgumentException(HERE) << "Lambda2 must be positive, here lambda2=" << lambda2; if ((lambda1 != lambda1_) || (lambda2 != lambda2_)) { lambda1_ = lambda1; lambda2_ = lambda2; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda1 accessor */ void Skellam::setLambda1(const Scalar lambda1) { if (!(lambda1 > 0.0)) throw InvalidArgumentException(HERE) << "Lambda1 must be positive, here lambda1=" << lambda1; if (lambda1 != lambda1_) { lambda1_ = lambda1; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda1 accessor */ Scalar Skellam::getLambda1() const { return lambda1_; } /* Lambda2 accessor */ void Skellam::setLambda2(const Scalar lambda2) { if (!(lambda2 > 0.0)) throw InvalidArgumentException(HERE) << "Lambda2 must be positive, here lambda2=" << lambda2; if (lambda2 != lambda2_) { lambda2_ = lambda2; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Lambda2 accessor */ Scalar Skellam::getLambda2() const { return lambda2_; } /* Maximum iterations accessor */ void Skellam::setMaximumIteration(const UnsignedInteger maximumIteration) { maximumIteration_ = maximumIteration; } UnsignedInteger Skellam::getMaximumIteration() const { return maximumIteration_; } /* Method save() stores the object through the StorageManager */ void Skellam::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "lambda1_", lambda1_ ); adv.saveAttribute( "lambda2_", lambda2_ ); adv.saveAttribute( "maximumIteration_", maximumIteration_ ); } /* Method load() reloads the object from the StorageManager */ void Skellam::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "lambda1_", lambda1_ ); adv.loadAttribute( "lambda2_", lambda2_ ); adv.loadAttribute( "maximumIteration_", maximumIteration_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/SkellamFactory.cxx000066400000000000000000000067601307543307100254210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Skellam distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SkellamFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SkellamFactory); static const Factory Factory_SkellamFactory; /* Default constructor */ SkellamFactory::SkellamFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ SkellamFactory * SkellamFactory::clone() const { return new SkellamFactory(*this); } /* Here is the interface that all derived class must implement */ SkellamFactory::Implementation SkellamFactory::build(const Sample & sample) const { return buildAsSkellam(sample).clone(); } SkellamFactory::Implementation SkellamFactory::build(const Point & parameters) const { return buildAsSkellam(parameters).clone(); } SkellamFactory::Implementation SkellamFactory::build() const { return buildAsSkellam().clone(); } DistributionFactoryResult SkellamFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } Skellam SkellamFactory::buildAsSkellam(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Skellam distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Skellam distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); // Check if all the components of the sample are integers const UnsignedInteger size = sample.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { Scalar x = sample[i][0]; if (x != trunc(x)) throw InvalidArgumentException(HERE) << "Error: can build a Skellam distribution only from a sample with integer components, here sample[" << i << "][0]=" << x; } const Scalar mean = sample.computeMean()[0]; const Scalar var = sample.computeVariance()[0]; const Scalar lambda2 = 0.5 * (var - mean); if (!(lambda2 > 0.0)) throw InvalidArgumentException(HERE) << "Error: can build a skellam distribution only if lambda2 > 0, here lambda2=" << lambda2; const Scalar lambda1 = 0.5 * (var + mean); Skellam result(lambda1, lambda2); result.setDescription(sample.getDescription()); return result; } Skellam SkellamFactory::buildAsSkellam(const Point & parameters) const { try { Skellam distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Skellam distribution from the given parameters"; } } Skellam SkellamFactory::buildAsSkellam() const { return Skellam(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Student.cxx000066400000000000000000000734461307543307100241340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Student distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/Student.hxx" #include "openturns/Distribution.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Log.hxx" #include "openturns/OSS.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Point.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Student); static const Factory Factory_Student; /* Default constructor */ Student::Student(const Scalar nu, const UnsignedInteger dimension) : EllipticalDistribution(Point(dimension, 0.0), Point(dimension, 1.0), IdentityMatrix(dimension), -1.0) , nu_(0.0) , studentNormalizationFactor_(0.0) { setName("Student"); setDimension( dimension ); // This call set also the range setNu(nu); } /* Parameters constructor */ Student::Student(const Scalar nu, const Scalar mu, const Scalar sigma) : EllipticalDistribution(Point(1, mu), Point(1, sigma), IdentityMatrix(1), -1.0) , nu_(0.0) , studentNormalizationFactor_(0.0) { setName("Student"); setDimension(1); // Set nu with checks. This call set also the range. setNu(nu); } /* Parameters constructor */ Student::Student(const Scalar nu, const Point & mu, const Point & sigma, const CorrelationMatrix & R) : EllipticalDistribution(mu, sigma, R, -1.0) , nu_(0.0) , studentNormalizationFactor_(0.0) { setName("Student"); setDimension(mu.getDimension()); // Set nu with checks. This call set also the range. setNu(nu); } /* Comparison operator */ Bool Student::operator ==(const Student & other) const { if (this == &other) return true; return (nu_ == other.nu_) && EllipticalDistribution::equals(other); } Bool Student::equals(const DistributionImplementation & other) const { const Student* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Student::__repr__() const { OSS oss(true); oss << "class=" << Student::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " nu=" << nu_ << " mean=" << mean_ << " sigma=" << sigma_ << " correlationMatrix=" << R_; return oss; } String Student::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName(); if (getDimension() == 1) oss << "(nu = " << nu_ << ", mu = " << getMean()[0] << ", sigma = " << getSigma()[0] << ")"; else oss << "(nu = " << nu_ << ", mu = " << getMean().__str__() << ", sigma = " << getSigma().__str__() << ", R = " << getCorrelation().__str__(offset) << ")"; return oss; } /* Compute the density generator of the elliptical generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)S^(-1)(x-mu)) */ Scalar Student::computeDensityGenerator(const Scalar betaSquare) const { return std::exp(studentNormalizationFactor_ - 0.5 * (nu_ + getDimension()) * log1p(betaSquare / nu_)); } /* Compute the derivative of the density generator */ Scalar Student::computeDensityGeneratorDerivative(const Scalar betaSquare) const { const Scalar iNu = 1.0 / nu_; const UnsignedInteger dimension = getDimension(); return -0.5 * std::exp(studentNormalizationFactor_ - (0.5 * (nu_ + dimension) + 1.0) * log1p(betaSquare * iNu)) * (1.0 + dimension * iNu); } /* Compute the second derivative of the density generator */ Scalar Student::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const { const Scalar iNu = 1.0 / nu_; const UnsignedInteger dimension = getDimension(); return 0.25 * std::exp(studentNormalizationFactor_ - (0.5 * (nu_ + dimension) + 2.0) * log1p(betaSquare * iNu)) * (1.0 + dimension * iNu) * (1.0 + (dimension + 2.0) * iNu); } /* Virtual constructor */ Student * Student::clone() const { return new Student(*this); } /* Get one realization of the distribution */ Point Student::getRealization() const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return Point(1, mean_[0] + sigma_[0] * DistFunc::rStudent(nu_)); Point value(dimension); // First, a realization of independant standard normal coordinates for (UnsignedInteger i = 0; i < dimension; ++i) value[i] = DistFunc::rNormal(); return std::sqrt(0.5 * nu_ / DistFunc::rGamma(0.5 * nu_)) * (cholesky_ * value) + mean_; } /* Get the CDF of the distribution */ Scalar Student::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point has a dimension incompatible with the distribution."; // Special case for dimension 1 if (dimension == 1) return DistFunc::pStudent(nu_, (point[0] - mean_[0]) / sigma_[0]); // For moderate dimension, use a Gauss-Legendre integration if (dimension <= ResourceMap::GetAsUnsignedInteger("Student-SmallDimension")) { // Reduce the default integration point number for CDF computation in the range 3 < dimension <= Student-SmallDimension const UnsignedInteger maximumNumber = static_cast< UnsignedInteger > (round(std::pow(ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ), 1.0 / getDimension()))); const UnsignedInteger candidateNumber = ResourceMap::GetAsUnsignedInteger( "Student-MarginalIntegrationNodesNumber" ); if (candidateNumber > maximumNumber) LOGWARN(OSS() << "Warning! The requested number of marginal integration nodes=" << candidateNumber << " would lead to an excessive number of PDF evaluations. It has been reduced to " << maximumNumber << ". You should increase the ResourceMap key \"Student-MaximumNumberOfPoints\""); setIntegrationNodesNumber(std::min(maximumNumber, candidateNumber)); return ContinuousDistribution::computeCDF(point); } // For very large dimension, use a MonteCarlo algorithm LOGWARN(OSS() << "Warning, in Student::computeCDF(), the dimension is very high. We will use a Monte Carlo method for the computation with a relative precision of 0.1% at 99% confidence level and a maximum of " << 10.0 * ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ) << " realizations. Expect a long running time and a poor accuracy for small values of the CDF..."); Scalar value = 0.0; Scalar variance = 0.0; Scalar a99 = DistFunc::qNormal(0.995); UnsignedInteger outerMax = 10 * ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ) / ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" ); Scalar precision = 0.0; for (UnsignedInteger indexOuter = 0; indexOuter < outerMax; ++indexOuter) { Scalar valueBlock = 0.0; Scalar varianceBlock = 0.0; for (UnsignedInteger indexSample = 0; indexSample < ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" ); ++indexSample) { Bool inside = true; Point realization(getRealization()); // Check if the realization is in the integration domain for (UnsignedInteger i = 0; i < dimension; ++i) { inside = realization[i] <= point[i]; if (!inside) break; } // ind value is 1.0 if the realization is inside of the integration domain, 0.0 else. Scalar ind = inside; Scalar norm = 1.0 / (indexSample + 1.0); varianceBlock = (varianceBlock * indexSample + (1.0 - norm) * (valueBlock - ind) * (valueBlock - ind)) * norm; valueBlock = (valueBlock * indexSample + ind) * norm; } Scalar norm = 1.0 / (indexOuter + 1.0); variance = (varianceBlock + indexOuter * variance + (1.0 - norm) * (value - valueBlock) * (value - valueBlock)) * norm; value = (value * indexOuter + valueBlock) * norm; // Quick return for value = 1 const Scalar quantileEpsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); if ((value >= 1.0 - quantileEpsilon) && (variance == 0.0)) return 1.0; precision = a99 * std::sqrt(variance / (indexOuter + 1.0) / ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" )); if (precision < ResourceMap::GetAsScalar( "Student-MinimumCDFEpsilon" ) * value) return value; // 0.1 * ((1000 * indexOuter) / outerMax) is to print percents with one figure after the decimal point LOGINFO(OSS() << 0.1 * ((1000 * indexOuter) / outerMax) << "% value=" << value << " absolute precision(99%)=" << precision << " relative precision(99%)=" << ((value > 0.0) ? precision / value : -1.0)); } cdfEpsilon_ = precision; return value; } // computeCDF /* Compute the probability content of an interval */ Scalar Student::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval must have dimension=" << dimension << ", here dimension=" << interval.getDimension(); if (interval.isNumericallyEmpty()) return 0.0; // The generic implementation provided by the DistributionImplementation upper class is more accurate than the generic implementation provided by the ContinuousDistribution upper class for dimension = 1 if (dimension == 1) return DistributionImplementation::computeProbability(interval); // Decompose and normalize the interval Point lower(normalize(interval.getLowerBound())); Point upper(normalize(interval.getUpperBound())); const Interval::BoolCollection finiteLower(interval.getFiniteLowerBound()); const Interval::BoolCollection finiteUpper(interval.getFiniteUpperBound()); /* General case */ // For moderate dimension, use a Gauss-Legendre integration if (dimension <= ResourceMap::GetAsUnsignedInteger("Student-SmallDimension")) { // Reduce the default integration point number for CDF computation in the range 3 < dimension <= Student-SmallDimension const UnsignedInteger maximumNumber = static_cast< UnsignedInteger > (round(std::pow(ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ), 1.0 / getDimension()))); const UnsignedInteger candidateNumber = ResourceMap::GetAsUnsignedInteger( "Student-MarginalIntegrationNodesNumber" ); if (candidateNumber > maximumNumber) LOGWARN(OSS() << "Warning! The requested number of marginal integration nodes=" << candidateNumber << " would lead to an excessive number of PDF evaluations. It has been reduced to " << maximumNumber << ". You should increase the ResourceMap key \"Student-MaximumNumberOfPoints\""); setIntegrationNodesNumber(std::min(maximumNumber, candidateNumber)); return ContinuousDistribution::computeProbability(interval); } // For very large dimension, use a MonteCarlo algorithm LOGWARN(OSS() << "Warning, in Student::computeProbability(), the dimension is very high. We will use a Monte Carlo method for the computation with a relative precision of 0.1% at 99% confidence level and a maximum of " << 10.0 * ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ) << " realizations. Expect a long running time and a poor accuracy for low values of the CDF..."); RandomGeneratorState initialState(RandomGenerator::GetState()); RandomGenerator::SetSeed(ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" )); Scalar value = 0.0; Scalar variance = 0.0; const Scalar a99 = DistFunc::qNormal(0.995); UnsignedInteger outerMax = 10 * ResourceMap::GetAsUnsignedInteger( "Student-MaximumNumberOfPoints" ) / ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" ); Scalar precision = 0.0; for (UnsignedInteger indexOuter = 0; indexOuter < outerMax; ++indexOuter) { Scalar valueBlock = 0.0; Scalar varianceBlock = 0.0; for (UnsignedInteger indexSample = 0; indexSample < ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" ); ++indexSample) { // ind value is 1.0 if the realization is inside of the integration domain, 0.0 else. Scalar ind = interval.numericallyContains(getRealization()); Scalar norm = 1.0 / (indexSample + 1.0); varianceBlock = (varianceBlock * indexSample + (1.0 - norm) * (valueBlock - ind) * (valueBlock - ind)) * norm; valueBlock = (valueBlock * indexSample + ind) * norm; } Scalar norm = 1.0 / (indexOuter + 1.0); variance = (varianceBlock + indexOuter * variance + (1.0 - norm) * (value - valueBlock) * (value - valueBlock)) * norm; value = (value * indexOuter + valueBlock) * norm; // Quick return for value = 1 const Scalar quantileEpsilon = ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); if ((value >= 1.0 - quantileEpsilon) && (variance == 0.0)) return 1.0; precision = a99 * std::sqrt(variance / (indexOuter + 1.0) / ResourceMap::GetAsUnsignedInteger( "Student-MinimumNumberOfPoints" )); if (precision < ResourceMap::GetAsScalar( "Student-MinimumCDFEpsilon" ) * value) return value; // 0.1 * ((1000 * indexOuter) / outerMax) is to print percents with one figure after the decimal point LOGINFO(OSS() << 0.1 * ((1000 * indexOuter) / outerMax) << "% value=" << value << " absolute precision(99%)=" << precision << " relative precision(99%)=" << ((value > 0.0) ? precision / value : -1.0)); } RandomGenerator::SetState(initialState); return value; } /* Get the PDFGradient of the distribution */ Point Student::computePDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); Point pdfGradient(2 * dimension + 1, 0.0); if (dimension == 1) { const Point ellipticalPDFGradient(EllipticalDistribution::computePDFGradient(point)); const Scalar epsNu = 1e-3; pdfGradient[0] = (Student(nu_ + epsNu, mean_, sigma_, R_).computePDF(point) - Student(nu_ - epsNu, mean_, sigma_, R_).computePDF(point)) / (2.0 * epsNu); for (UnsignedInteger i = 0; i < 2 * dimension; ++i) pdfGradient[i + 1] = ellipticalPDFGradient[i]; return pdfGradient; } else throw NotYetImplementedException(HERE) << "In Student::computePDFGradient(const Point & point) const"; } /* Get the CDFGradient of the distribution */ Point Student::computeCDFGradient(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); if (dimension == 1) { Point cdfGradient(3, 0.0); const Scalar x = point[0] - mean_[0]; const Scalar eps = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 3.0); const Scalar i2Eps = 0.5 / eps; cdfGradient[0] = (DistFunc::pStudent(nu_ + eps, x / sigma_[0]) - DistFunc::pStudent(nu_ - eps, x / sigma_[0])) * i2Eps; // Opposite sign for eps because x - eps = point[0] - (mu + eps) cdfGradient[1] = (DistFunc::pStudent(nu_, (x - eps) / sigma_[0]) - DistFunc::pStudent(nu_, (x + eps) / sigma_[0])) * i2Eps; cdfGradient[2] = (DistFunc::pStudent(nu_, x / (sigma_[0] + eps)) - DistFunc::pStudent(nu_, x / (sigma_[0] - eps))) * i2Eps; return cdfGradient; } else throw NotYetImplementedException(HERE) << "In Student::computeCDFGradient(const Point & point) const"; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) For Student distributions, the conditional distribution is no more Student. See: Samuel Kotz, Saralees Nadarajah, "Multivariate t Distributions and Their Applications", Cambridge University Press, 2001. */ Scalar Student::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning if (conditioningDimension == 0) return Distribution(getMarginal(conditioningDimension)).computePDF(x); // General case throw NotYetImplementedException(HERE) << "In Student::computeConditionalPDF(const Scalar x, const Point & y) const"; //Scalar meanRos(0.0); //const Scalar sigmaRos(1.0 / inverseCholesky_(conditioningDimension, conditioningDimension)); //for (UnsignedInteger i = 0; i < conditioningDimension; ++i) meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); //meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; //return std::exp(-0.5 * std::pow(x - meanRos, 2.0) / (sigmaRos * sigmaRos)) / (sigmaRos * std::sqrt(2.0 * M_PI)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Student::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning if (conditioningDimension == 0) return Distribution(getMarginal(conditioningDimension)).computeCDF(x); // General case throw NotYetImplementedException(HERE) << "in Scalar Student::computeConditionalCDF(const Scalar x, const Point & y) const"; //Scalar meanRos(0.0); //const Scalar sigmaRos(1.0 / inverseCholesky_(conditioningDimension, conditioningDimension)); //for (UnsignedInteger i = 0; i < conditioningDimension; ++i) meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); //meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; //return DistFunc::pNormal((x - meanRos) / sigmaRos); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar Student::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case when no contitioning if (conditioningDimension == 0) return mean_[conditioningDimension] + sigma_[conditioningDimension] * DistFunc::qStudent(nu_, q); // General case throw NotYetImplementedException(HERE); //Scalar meanRos(0.0); //const Scalar sigmaRos(1.0 / inverseCholesky_(conditioningDimension, conditioningDimension)); //for (UnsignedInteger i = 0; i < conditioningDimension; ++i) meanRos += inverseCholesky_(conditioningDimension, i) / std::sqrt(sigma_[i]) * (y[i] - mean_[i]); //meanRos = mean_[conditioningDimension] - sigmaRos * std::sqrt(sigma_[conditioningDimension]) * meanRos; //if (q == 0.0) return meanRos - 0.5 * sigmaRos * std::sqrt(4.0 * (std::log(SpecFunc::ISQRT2PI / sigmaRos) - SpecFunc::LogMinScalar)); //if (q == 1.0) return meanRos + 0.5 * sigmaRos * std::sqrt(4.0 * (std::log(SpecFunc::ISQRT2PI / sigmaRos) - SpecFunc::LogMinScalar)); //return meanRos + sigmaRos * DistFunc::qNormal(q); } /* Get the i-th marginal distribution */ Student::Implementation Student::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (getDimension() == 1) return clone(); // General case const CorrelationMatrix R(1); const Point sigma(1, sigma_[i]); const Point mean(1, mean_[i]); return new Student(nu_, mean, sigma, R); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Student::Implementation Student::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case const UnsignedInteger outputDimension = indices.getSize(); CorrelationMatrix R(outputDimension); Point sigma(outputDimension); Point mean(outputDimension); // Extract the correlation matrix, the marginal standard deviations and means for (UnsignedInteger i = 0; i < outputDimension; ++i) { const UnsignedInteger index_i = indices[i]; sigma[i] = sigma_[index_i]; mean[i] = mean_[index_i]; for (UnsignedInteger j = 0; j <= i; ++j) R(i, j) = R_(index_i, indices[j]); } return new Student(nu_, mean, sigma, R); } // getMarginal(Indices) /* Compute the radial distribution CDF */ Scalar Student::computeRadialDistributionCDF(const Scalar radius, const Bool tail) const { const Scalar r2 = radius * radius; return DistFunc::pBeta(0.5 * getDimension(), 0.5 * nu_, r2 / (nu_ + r2), tail); } /* Mu accessor */ void Student::setMu(const Scalar mu) { if (getDimension() == 1) mean_ = Point(1, mu); computeRange(); } Scalar Student::getMu() const { if (getDimension() == 1) return mean_[0]; throw InvalidArgumentException(HERE) << "Error: cannot call this method if dimension > 1."; } /* Get the mean of the distribution */ Point Student::getMean() const { if (!(nu_ > 1.0)) throw NotDefinedException(HERE) << "Student mean is defined only for nu > 1, here nu=" << nu_; return EllipticalDistribution::getMean(); } /* Get the standard deviation of the distribution */ Point Student::getStandardDeviation() const { if (!(nu_ > 2.0)) throw NotDefinedException(HERE) << "Student standard deviation is defined only for nu > 2, here nu=" << nu_; return EllipticalDistribution::getStandardDeviation(); } /* Get the skewness of the distribution */ Point Student::getSkewness() const { if (!(nu_ > 3.0)) throw NotDefinedException(HERE) << "Student skewness is defined only for nu > 3, here nu=" << nu_; return Point(getDimension(), 0.0); } /* Get the kurtosis of the distribution */ Point Student::getKurtosis() const { if (!(nu_ > 4.0)) throw NotDefinedException(HERE) << "Student kurtosis is defined only for nu > 4, here nu=" << nu_; return Point(getDimension(), 3.0 + 6.0 / (nu_ - 4.0)); } /* Get the covariance of the distribution */ CovarianceMatrix Student::getCovariance() const { if (!(nu_ > 2.0)) throw NotDefinedException(HERE) << "Student covariance is defined only for nu > 2, here nu=" << nu_; return EllipticalDistribution::getCovariance(); } /* Get the moments of the standardized distribution */ Point Student::getStandardMoment(const UnsignedInteger n) const { if (n >= nu_) throw NotDefinedException(HERE) << "Error: cannot compute a standard moment of order greater or equal to the number of degrees of freedom"; if (n % 2 == 1) return Point(1, 0.0); Scalar moment = 1.0; for (UnsignedInteger i = 0; i < n / 2; ++i) moment *= (nu_ * (2 * i + 1)) / (nu_ - 2 * (i + 1)); // Alternate expression, not very useful as the raw moments overflow the double precision for n approximately equal to 300 (if nu is large enough), and for these values the loop is equivalent to the analytic expression both in terms of speed and // const Scalar moment(exp(0.5 * n * std::log(nu_) + SpecFunc::LogGamma(0.5 * (n + 1.0)) + SpecFunc::LogGamma(0.5 * (nu_ - n)) - SpecFunc::LogGamma(0.5 * nu_)) / sqrt(M_PI)); return Point(1, moment); } /* Get the standard representative in the parametric family, associated with the standard moments */ Student::Implementation Student::getStandardRepresentative() const { return Student(nu_).clone(); } /* Parameters value and description accessor */ Student::PointWithDescriptionCollection Student::getParametersCollection() const { // First, get the parameters of the underlying elliptical distribution, it means mu, sigma and R PointWithDescriptionCollection parameters(EllipticalDistribution::getParametersCollection()); // We get a collection of PointWithDescription, we append the value of nu at the beginning of each PointWithDescription const UnsignedInteger size = parameters.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const PointWithDescription ellipticalParameterI(parameters[i]); const Description ellipticalDescriptionI(ellipticalParameterI.getDescription()); const UnsignedInteger ellipticalParameterIDimension = ellipticalParameterI.getDimension(); PointWithDescription parameterI(ellipticalParameterIDimension + 1); Description descriptionI(ellipticalParameterIDimension + 1); parameterI[0] = nu_; descriptionI[0] = "nu"; for (UnsignedInteger j = 0; j < ellipticalParameterIDimension; ++j) { parameterI[j + 1] = ellipticalParameterI[j]; descriptionI[j + 1] = ellipticalDescriptionI[j]; } parameterI.setDescription(descriptionI); parameters[i] = parameterI; } return parameters; } void Student::setParametersCollection(const PointCollection & parametersCollection) { const Scalar w = getWeight(); const UnsignedInteger size = parametersCollection.getSize(); const UnsignedInteger dimension = size > 1 ? size - 1 : size; if (dimension == 1) *this = Student(parametersCollection[0][0], parametersCollection[0][1], parametersCollection[0][2]); else { const Scalar nu = parametersCollection[0][0]; Point mean(dimension); Point sigma(dimension); CorrelationMatrix R(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { mean[i] = parametersCollection[i][1]; sigma[i] = parametersCollection[i][2]; } UnsignedInteger parameterIndex = 1; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { R(i, j) = parametersCollection[size - 1][parameterIndex]; ++parameterIndex; } } *this = Student(nu, mean, sigma, R); } setWeight(w); } /* Parameters value accessor */ Point Student::getParameter() const { Point point(1, nu_); point.add(EllipticalDistribution::getParameter()); return point; } void Student::setParameter(const Point & parameter) { // N = 2*d+((d-1)*d)/2+1 const UnsignedInteger size = parameter.getSize(); Scalar dimReal = 0.5 * std::sqrt(1.0 + 8.0 * size) - 1.5; if (dimReal != round(dimReal)) throw InvalidArgumentException(HERE) << "Error: invalid parameter number for Student"; const UnsignedInteger dimension = dimReal; const Scalar nu = parameter[0]; if (dimension == 1) { *this = Student(nu, parameter[1], parameter[2]); } else { Point mean(dimension); Point sigma(dimension); CorrelationMatrix R(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { mean[i] = parameter[2 * i + 1]; sigma[i] = parameter[2 * i + 2]; } UnsignedInteger parameterIndex = 2 * dimension; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { R(i, j) = parameter[parameterIndex]; ++ parameterIndex; } } *this = Student(nu, mean, sigma, R); } } /* Parameters description accessor */ Description Student::getParameterDescription() const { Description description(1, "nu"); description.add(EllipticalDistribution::getParameterDescription()); return description; } /* Nu accessor */ void Student::setNu(const Scalar nu) { if (nu <= 2.0) LOGWARN(OSS() << "Warning! As nu <= 2, the covariance of the distribution will not be defined"); const UnsignedInteger dimension = getDimension(); nu_ = nu; // Only set the covarianceScalingFactor if nu > 0, else its value is -1.0 if (nu > 2.0) covarianceScalingFactor_ = nu_ / (nu_ - 2.0); studentNormalizationFactor_ = SpecFunc::LnGamma(0.5 * (nu + dimension)) - SpecFunc::LnGamma(0.5 * nu) - 0.5 * dimension * std::log(nu * M_PI); computeRange(); } /* Tell if the distribution has independent copula */ Bool Student::hasIndependentCopula() const { // A multivariate Student distribution never has an independent copula return getDimension() == 1; } /* Nu accessor */ Scalar Student::getNu() const { return nu_; } /* Quantile computation for dimension=1 */ Scalar Student::computeScalarQuantile(const Scalar prob, const Bool tail) const { return mean_[0] + sigma_[0] * DistFunc::qStudent(nu_, prob, tail); } /* Method save() stores the object through the StorageManager */ void Student::save(Advocate & adv) const { EllipticalDistribution::save(adv); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "studentNormalizationFactor_", studentNormalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Student::load(Advocate & adv) { EllipticalDistribution::load(adv); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "studentNormalizationFactor_", studentNormalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/StudentFactory.cxx000066400000000000000000000060301307543307100254450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Student distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StudentFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(StudentFactory); static const Factory Factory_StudentFactory; /* Default constructor */ StudentFactory::StudentFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ StudentFactory * StudentFactory::clone() const { return new StudentFactory(*this); } /* Here is the interface that all derived class must implement */ StudentFactory::Implementation StudentFactory::build(const Sample & sample) const { return buildAsStudent(sample).clone(); } StudentFactory::Implementation StudentFactory::build(const Point & parameter) const { return buildAsStudent(parameter).clone(); } StudentFactory::Implementation StudentFactory::build() const { return buildAsStudent().clone(); } DistributionFactoryResult StudentFactory::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample, true); } Student StudentFactory::buildAsStudent(const Sample & sample) const { if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Student distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Student distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar mu = sample.computeMean()[0]; const Scalar sigma = sample.computeStandardDeviationPerComponent()[0]; const Scalar nu = 2.0 + 2.0 / (sigma * sigma - 1.0); if (!(nu > 2.0)) throw InvalidArgumentException(HERE) << "Error: can build a Student distribution only if nu > 2.0, here nu=" << nu; Student result(nu, mu); result.setDescription(sample.getDescription()); return result; } Student StudentFactory::buildAsStudent(const Point & parameter) const { try { Student distribution; distribution.setParameter(parameter); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Student distribution from the given parameters"; } } Student StudentFactory::buildAsStudent() const { return Student(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/StudentFunctions.cxx000066400000000000000000001541331307543307100260160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the Student T * CDF and quantile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/StudentFunctions.hxx" #include "openturns/Exception.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/GaussKronrodRule.hxx" #include "openturns/Log.hxx" #include "openturns/OTconfig.hxx" #ifdef OPENTURNS_HAVE_BOOST #include #include #endif BEGIN_NAMESPACE_OPENTURNS namespace StudentFunctions { /********************************************************************************************************************************/ /* Normalized Student distribution, i.e. with a PDF equals to (1 + x^2 / nu)^(-(1 + nu) / 2) / (sqrt(nu) . Beta(1 / 2, nu / 2)) */ /********************************************************************************************************************************/ /* CDF */ Scalar StudentCDF(const Scalar nu, const Scalar x, const Bool tail) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: nu must be positive, here nu=" << nu; if (x == 0.0) return 0.5; if (nu == 1.0) return (tail ? 0.5 - (std::atan(x) * M_1_PI) : 0.5 + (std::atan(x) * M_1_PI)); const Scalar x2 = x * x; if (nu == 2.0) return (tail ? 0.5 - 0.5 * (x / std::sqrt(2.0 + x2)) : 0.5 + 0.5 * (x / std::sqrt(2.0 + x2))); if (nu == 3.0) return (tail ? 0.5 - (std::atan(x / std::sqrt(3.0)) * M_1_PI + x * std::sqrt(3.0) / (M_PI * (3.0 + x2))) : 0.5 + (std::atan(x / std::sqrt(3.0)) * M_1_PI + x * std::sqrt(3.0) / (M_PI * (3.0 + x2)))); if (nu == 4.0) return (tail ? 0.5 - (0.5 * x * (x2 + 6.0) * std::pow(4.0 + x2, -1.5)) : 0.5 + (0.5 * x * (x2 + 6.0) * std::pow(4.0 + x2, -1.5))); if (nu == 5.0) return (tail ? 0.5 - (std::atan(x / std::sqrt(5.0)) * M_1_PI + x * std::sqrt(5.0) * (3.0 * x2 + 25.0) / (3.0 * M_PI * std::pow(5.0 + x2, 2))) : 0.5 + (std::atan(x / std::sqrt(5.0)) * M_1_PI + x * std::sqrt(5.0) * (3.0 * x2 + 25.0) / (3.0 * M_PI * std::pow(5.0 + x2, 2)))); if (nu == 6.0) return (tail ? 0.5 - (0.25 * x * (135.0 + x2 * (30.0 + 2.0 * x2)) * std::pow(6.0 + x2, -2.5)) : 0.5 + (0.25 * x * (135.0 + x2 * (30.0 + 2.0 * x2)) * std::pow(6.0 + x2, -2.5))); if (nu == 7.0) return (tail ? 0.5 - (std::atan(x / std::sqrt(7.0)) * M_1_PI + x * std::sqrt(7.0) * (1617.0 + x2 * (280.0 + 15.0 * x2)) / (15.0 * M_PI * std::pow(7.0 + x2, 3))) : 0.5 + (std::atan(x / std::sqrt(7.0)) * M_1_PI + x * std::sqrt(7.0) * (1617.0 + x2 * (280.0 + 15.0 * x2)) / (15.0 * M_PI * std::pow(7.0 + x2, 3)))); #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::cdf(boost::math::complement(boost::math::students_t(nu), x)) : boost::math::cdf(boost::math::students_t(nu), x)) ; #else #ifdef USE_NEW_ALGO // First, try to use a Cornish-Fisher expansion if (nu > 1e3) { const Scalar inu = 1.0 / nu; // Compute the last corrective term first in order to check if the Cornish-Fisher approximation is good enough // ~ \phi(x)/x+x\phi(x)[c1/nu + ... + c4/nu^4] // -> \epsilon/x = x * c4 /nu^4 -> nu=(x^2*c4/\epsilon)^{1/4} const Scalar c4 = (21.0 / 2048.0 + (61.0 / 6144.0 + (-71.0 / 30720.0 + (-313.0 / 30720.0 + (-2141.0 / 92160.0 + (445.0 / 18432.0 + (-25.0 / 6144.0 + x2 / 6144.0) * x2) * x2) * x2) * x2) * x2) * x2) * x2; const Scalar lastContribution = std::abs(c4 * inu * inu * inu * inu * x); Scalar normalPDF = SpecFunc::ISQRT2PI * std::exp(-0.5 * x2); Scalar normalCCDF = DistFunc::pNormal(std::abs(x), true); if (normalCCDF > SpecFunc::ScalarEpsilon * normalPDF * lastContribution) { const Scalar c1 = 0.25 * (1.0 + x2); const Scalar c2 = (-3.0 + x2 * (-5.0 + x2 * (-7.0 + 3.0 * x2))) / 96.0; const Scalar c3 = (-15.0 + x2 * (-3.0 + x2 * (6.0 + x2 * (14.0 + x2 * (-11.0 + x2))))) / 384.0; const Scalar correction = std::abs(x) * (inu * (c1 + inu * (c2 + inu * (c3 + inu * c4)))); const Scalar value = normalCCDF + normalPDF * correction; return (((x >= 0.0) == tail) ? value : 0.5 + (0.5 - value)); } } #endif Scalar value = 0.0; if (2.0 * x2 > nu) value = 0.5 * SpecFunc::RegularizedIncompleteBeta(0.5, 0.5 * nu, x2 / (x2 + nu), true); else value = 0.5 * SpecFunc::RegularizedIncompleteBeta(0.5 * nu, 0.5, nu / (x2 + nu), false); return (((x < 0.0) == tail) ? 0.5 + (0.5 - value) : value); #endif // OPENTURNS_HAVE_BOOST } /* The algorithm is based on the following article: William T. Shaw, "New methods for simulating the Student T-distribution - direct use of the inverse cumulative distribution" eprint http://eprints.maths.ox.ac.uk/184/1/tdist.pdf */ Scalar StudentQuantile(const Scalar nu, const Scalar p, const Bool tail) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: nu must be positive, here nu=" << nu; if (p == 0.5) return 0.0; const Scalar u = std::min(p, 0.5 + (0.5 - p)); if (nu == 1.0) { Scalar value = 0.0; if (std::abs(u) < 0.025373628595705897178) { const Scalar u2 = u * u; value = (-0.31830988618379067153 + (1.0471975511965977462 + (0.68902837067332933726 + (0.64766070854027820799 + 0.63921549794217821540 * u2) * u2) * u2) * u2) / u; } else value = std::tan((u - 0.5) * M_PI); return (tail == (p < 0.5) ? -value : value); } if (nu == 2.0) { const Scalar alpha = 2.0 * u - 1.0; const Scalar value = alpha * std::sqrt(2.0 / (0.5 + (0.5 - alpha * alpha))); return (tail == (p < 0.5) ? -value : value); } if (nu == 4.0) { const Scalar alphaSqrt = 2.0 * std::sqrt(p * (0.5 + (0.5 - p))); const Scalar value = 2.0 * std::sqrt((std::cos(std::acos(alphaSqrt) / 3.0) / alphaSqrt - 0.5) - 0.5); // Warning! Here the test is different from the other ones return (tail == (p > 0.5) ? -value : value); } #ifdef OPENTURNS_HAVE_BOOST return tail ? boost::math::quantile(boost::math::complement(boost::math::students_t(nu), p)) : boost::math::quantile(boost::math::students_t(nu), p); #else #ifdef USE_NEW_ALGO // Central part const Scalar delta = 1.0 / nu; const Scalar normalizationFactor = std::sqrt(nu * M_PI) * std::exp(SpecFunc::LogGamma(0.5 * nu) - SpecFunc::LogGamma(0.5 * (nu + 1.0))); const Scalar v = (p - 0.5) * normalizationFactor; const Scalar c30 = 0.11362104808202311779e-7 + (-0.10994648871905821641e-6 + (0.52754948010031397619e-6 + (-0.16579190541298212282e-5 + (0.37966880029665235514e-5 + (-0.66596982230496113818e-5 + (0.91156850995515265275e-5 + (-0.96136067004897554437e-5 + (0.72052743951206692720e-5 + (-0.23729574256549482204e-5 + (-0.31083841717988836362e-5 + (0.72241563770271714564e-5 + (-0.88503346702785761842e-5 + (0.81494033025679967378e-5 + (-0.61299787607422707781e-5 + (0.38918328140793891542e-5 + (-0.21177061849789713922e-5 + (0.99481889094179105397e-6 + (-0.40449311472598426761e-6 + (0.14225421139331034806e-6 + (-0.43122948806183507233e-7 + (0.11198634674338365791e-7 + (-0.24684919226898448232e-8 + (0.45586959658322983050e-9 + (-0.69253251498584479106e-10 + (0.84307519236004815165e-11 + (-0.79095838183517833726e-12 + (0.53696817752523318081e-13 + (-0.23480084614199964747e-14 + (0.49659938970935851773e-16 + 0.19701319568021683118e-83 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; if (c30 * std::pow(std::abs(v), 30) < SpecFunc::Precision) { const Scalar v2 = v * v; const Scalar c1 = 0.16666666666666666667e0 + 0.16666666666666666667e0 * delta; const Scalar c2 = 0.58333333333333333333e-1 + (0.66666666666666666667e-1 + 0.83333333333333333333e-2 * delta) * delta; const Scalar c3 = 0.25198412698412698413e-1 + (0.26785714285714285714e-1 + (0.17857142857142857143e-2 + 0.19841269841269841270e-3 * delta) * delta) * delta; const Scalar c4 = 0.12039792768959435626e-1 + (0.10559964726631393298e-1 + (-0.11078042328042328042e-2 + (0.37477954144620811287e-3 + 0.27557319223985890653e-5 * delta) * delta) * delta) * delta; const Scalar c5 = 0.61039211560044893378e-2 + (0.38370059724226390893e-2 + (-0.16095979637646304313e-2 + (0.59458674042007375341e-3 + (-0.62705427288760622094e-4 + 0.25052108385441718775e-7 * delta) * delta) * delta) * delta) * delta; const Scalar c6 = 0.32177478835464946576e-2 + (0.10898206731540064873e-2 + (-0.12579159844784844785e-2 + (0.69084207973096861986e-3 + (-0.16376804137220803887e-3 + (0.15401265401265401265e-4 + 0.16059043836821614599e-9 * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c7 = 0.17438262298340009980e-2 + (0.33530976880017885309e-4 + (-0.76245135440323932387e-3 + (0.64513046951456342991e-3 + (-0.24947258047043099953e-3 + (0.49255746366361445727e-4 + (-0.39851014346715404916e-5 + 0.76471637318198164759e-12 * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c8 = 0.96472747321388644237e-3 + (-0.31101086326318780412e-3 + (-0.36307660358786885787e-3 + (0.51406605788341121363e-3 + (-0.29133414466938067350e-3 + (0.90867107935219902229e-4 + (-0.15303004486655377567e-4 + (0.10914179173496789432e-5 + 0.28114572543455207632e-14 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c9 = 0.54229262813129686486e-3 + (-0.36942667800009661203e-3 + (-0.10230378073700412687e-3 + (0.35764655430568632777e-3 + (-0.28690924218514613987e-3 + (0.12645437628698076975e-3 + (-0.33202652391372058698e-4 + (0.48903045291975346210e-5 + (-0.31239569599829868045e-6 + 0.82206352466243297170e-17 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c10 = 0.30873303081359101129e-3 + (-0.32537004938571011330e-3 + (0.43550551405434728655e-4 + (0.21464548012307279066e-3 + (-0.24866783037387793908e-3 + (0.14689614712949377285e-3 + (-0.53558768075354021202e-4 + (0.12193465978325997301e-4 + (-0.15992939851465476095e-5 + (0.92645939464804105906e-7 + 0.19572941063391261231e-19 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c11 = 0.17759647804672470704e-3 + (-0.25535863863970254416e-3 + (0.11096883532369592643e-3 + (0.10245143385318167742e-3 + (-0.19299737813074419180e-3 + (0.14967238384542144940e-3 + (-0.71397916945779067573e-4 + (0.22340804256056967439e-4 + (-0.45025708360340229558e-5 + (0.53317862670086688269e-6 + (-0.28285516204934114990e-7 + 0.38681701706306840377e-22 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c12 = 0.10304494161207094302e-3 + (-0.18870337947507879042e-3 + (0.13111867117178691920e-3 + (0.24142361947767894831e-4 + (-0.13381350551156149560e-3 + (0.13730787745727972950e-3 + (-0.82983259907885451298e-4 + (0.33532084099933722245e-4 + (-0.92267370235976158080e-5 + (0.16716613200640343655e-5 + (-0.18065780614881715429e-6 + (0.88471846978918480156e-8 + 0.64469502843844733962e-25 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c13 = 0.60225008003409982305e-4 + (-0.13446378338878729098e-3 + (0.12598693847856027229e-3 + (-0.24590085473754607964e-4 + (-0.80299081016436116016e-4 + (0.11482249262723200489e-3 + (-0.86686905022801866130e-4 + (0.43609942443795689198e-4 + (-0.15373457330466647584e-4 + (0.37852139693751540035e-5 + (-0.62383416384412893096e-6 + (0.62064429966766230519e-7 + (-0.28243405937805525220e-8 + 0.91836898637955461484e-28 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c14 = 0.35418325565277953269e-4 + (-0.93539064666727070094e-4 + (0.10944539484512486371e-3 + (-0.50697922600088918528e-4 + (-0.37072450319611740043e-4 + (0.87596232666609754365e-4 + (-0.82848204898007245194e-4 + (0.50788700804564126157e-4 + (-0.22068398246898720913e-4 + (0.69246032720547932818e-5 + (-0.15457039388956089765e-5 + (0.23391857848945430160e-6 + (-0.21577431344124575639e-7 + (0.91752074323779275911e-9 + 0.11309962886447716932e-30 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c15 = 0.20941876127554053895e-4 + (-0.63982320984468180920e-4 + (0.89476217782852851948e-4 + (-0.61139401127641540572e-4 + (-0.53533915472133463276e-5 + (0.60092507103170186035e-4 + (-0.73116739352278641607e-4 + (0.54064352860717542135e-4 + (-0.28252385872037662336e-4 + (0.10858001403563361875e-4 + (-0.30773127066866958235e-5 + (0.62914443600476829315e-6 + (-0.88098412226584032081e-7 + (0.75797246590958718870e-8 + (-0.30260395874299918486e-9 + 0.12161250415535179496e-33 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c16 = 0.12440676964611940273e-4 + (-0.43227811212828780986e-4 + (0.70220395983921690289e-4 + (-0.61710480704301234682e-4 + (0.15725654644255476988e-4 + (0.35359168269646105688e-4 + (-0.59705715039685462092e-4 + (0.53283122436065111649e-4 + (-0.32980546454767555846e-4 + (0.15124084472974760560e-4 + (-0.52275481468058844855e-5 + (0.13532478852492074758e-5 + (-0.25548550443536494162e-6 + (0.33313281803022382511e-7 + (-0.26868931811498915393e-8 + (0.10112530549820428339e-9 + 0.11516335620771950281e-36 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c17 = 0.74211365422405435880e-5 + (-0.28933653345888529746e-4 + (0.53504983616749018458e-4 + (-0.56733447346013552297e-4 + (0.28046995125144914249e-4 + (0.15046953874432646849e-4 + (-0.44797205572871768076e-4 + (0.48974195262422243935e-4 + (-0.35626672354897940259e-4 + (0.19154758965665053933e-4 + (-0.78594245320243336015e-5 + (0.24736906403032496435e-5 + (-0.59010219823058050328e-6 + (0.10357491081664883410e-6 + (-0.12643342283016852693e-7 + (0.96013308009708694978e-9 + (-0.34189008978763638042e-10 + 0.96775929586318909921e-40 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c18 = 0.44431685013520881494e-5 + (-0.19225728937686126470e-4 + (0.39866342691238713685e-4 + (-0.49168720718451249294e-4 + (0.33775289421222619037e-4 + (-0.31087617911211617812e-6 + (-0.30179218224879386155e-4 + (0.42079421138111979198e-4 + (-0.35960405573411444377e-4 + (0.22412174312718158972e-4 + (-0.10713400205607912977e-4 + (0.39886149460845449983e-5 + (-0.11542192605244155692e-5 + (0.25556230486781413954e-6 + (-0.41938614038099184801e-7 + (0.48146397593234635691e-8 + (-0.34555062015776742157e-9 + (0.11678439676013086698e-10 + 0.72654601791530713154e-43 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c19 = 0.26689550078709988424e-5 + (-0.12701371273794086192e-4 + (0.29187128312258641044e-4 + (-0.40887625651814964910e-4 + (0.34931364376163753961e-4 + (-0.10941760706981209265e-4 + (-0.17095949246117664777e-4 + (0.33684354049709423542e-4 + (-0.34115982472168278269e-4 + (0.24496276291828666349e-4 + (-0.13463974509890800010e-4 + (0.58150160113439943742e-5 + (-0.19853509812636133521e-5 + (0.53231546936576302638e-6 + (-0.11005170539457305057e-6 + (0.16966333616170516023e-7 + (-0.18390721265526858957e-8 + (0.12516003776882922472e-9 + (-0.40260203854332223970e-11 + 0.49024697565135433977e-46 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c20 = 0.16079468293566755077e-5 + (-0.83519181950909056223e-5 + (0.21068264047704844251e-4 + (-0.32967663694395873249e-4 + (0.33192227255609240600e-4 + (-0.17505725315921772768e-4 + (-0.62507158539472975653e-5 + (0.24809896176762296083e-4 + (-0.30494472688029092428e-4 + (0.25201640916265454033e-4 + (-0.15787641075728493217e-4 + (0.77993169714226206621e-5 + (-0.30798093966460254524e-5 + (0.97237595059774941332e-6 + (-0.24310038260091801130e-6 + (0.47165155130938945170e-7 + (-0.68593186343403724861e-8 + (0.70445800732998961076e-9 + (-0.45594868193886099691e-10 + (0.13994385619395025871e-11 + 0.29893108271424045108e-49 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c21 = 0.97131634673789398878e-6 + (-0.54708225462996645305e-5 + (0.15031612868346010381e-4 + (-0.25948684686355881128e-4 + (0.29836299490113887428e-4 + (-0.20841746475330982938e-4 + (0.21041249868451872146e-5 + (0.16284262391941984951e-4 + (-0.25642616763698460772e-4 + (0.24523094611425921414e-4 + (-0.17422194113333550583e-4 + (0.97452558818057754024e-5 + (-0.43860223502643760704e-5 + (0.15981068447331646635e-5 + (-0.46976961660947401631e-6 + (0.11009357544923694910e-6 + (-0.20131669532027190606e-7 + (0.27718538806172187051e-8 + (-0.27054082137873267281e-9 + (0.16696448943448797325e-10 + (-0.49008459619564683563e-12 + 0.16552108677421951887e-52 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c22 = 0.58816866045106563105e-6 + (-0.35721527099333012576e-5 + (0.10620496275112834190e-4 + (-0.20030890513892794267e-4 + (0.25769570856134526479e-4 + (-0.21796848545887314032e-4 + (0.80432398190338473790e-5 + (0.86890833863663663181e-5 + (-0.20140605182206560763e-4 + (0.22622743926783082774e-4 + (-0.18204948546547989395e-4 + (0.11449675542311518867e-4 + (-0.58093764821307956918e-5 + (0.24063727883622600125e-5 + (-0.81496902854646487096e-6 + (0.22430060731696070044e-6 + (-0.49498828597482276521e-7 + (0.85628682699988764342e-8 + (-0.11197312381501881491e-8 + (0.10414592635951676503e-9 + (-0.61430478648550010010e-11 + (0.17279382812933012608e-12 + 0.83596508471828039833e-56 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c23 = 0.35694623785962092945e-6 + (-0.23261540519033892935e-5 + (0.74419178472078609044e-5 + (-0.15216318398635566250e-4 + (0.21588373630493424187e-4 + (-0.21126970163845042742e-4 + (0.11845455304496076792e-4 + (0.23609880626344786979e-5 + (-0.14516984266273695216e-4 + (0.19775888656621845116e-4 + (-0.18086107912040198044e-4 + (0.12736537507049307512e-4 + (-0.72266519718919009453e-5 + (0.33644119808366374648e-5 + (-0.12928827313050406050e-5 + (0.40943264368765462217e-6 + (-0.10600909150611481864e-6 + (0.22114965040891172594e-7 + (-0.36311096679932346748e-8 + (0.45222524763612305957e-9 + (-0.40179389558336936254e-10 + (0.22699473155292863497e-11 + (-0.61300713659856468819e-13 + 0.38666285139605938868e-59 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c24 = 0.21706145346345576459e-6 + (-0.15113095478470218871e-5 + (0.51776320957662205422e-5 + (-0.11403661131246235169e-4 + (0.17651639712419593863e-4 + (-0.19451656683614343464e-4 + (0.13890838328443818024e-4 + (-0.25727313272785381811e-5 + (-0.91965090082447991628e-5 + (0.16312044822824170784e-4 + (-0.17120331841076803075e-4 + (0.13482036950914841652e-4 + (-0.85057705076024007563e-5 + (0.44120031517730367803e-5 + (-0.19013595509454534312e-5 + (0.68222313948188219820e-6 + (-0.20303517093341515889e-6 + (0.49655697374466441223e-7 + (-0.98257414937286547754e-8 + (0.15356901309348980984e-8 + (-0.18261072140700804068e-9 + (0.15532593734902944723e-10 + (-0.84209778634328029841e-12 + (0.21870365650245415074e-13 + 0.16439747083165790335e-62 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c25 = 0.13224235211744936908e-6 + (-0.97997851350371097919e-6 + (0.35800640027359557107e-5 + (-0.84480240475059725402e-5 + (0.14148068359250587228e-4 + (-0.17244580119470605765e-4 + (0.14584645223195765026e-4 + (-0.61429327229030144895e-5 + (-0.44783230402391903591e-5 + (0.12562837136392852172e-4 + (-0.15443365608705532966e-4 + (0.13627399430067013885e-4 + (-0.95259580946524691274e-5 + (0.54692132382223148275e-5 + (-0.26191959740227063354e-5 + (0.10521721543189930798e-5 + (-0.35438400651509059576e-6 + (0.99538596530834004426e-7 + (-0.23075877907941536799e-7 + (0.43441556712522510653e-8 + (-0.64795864328105212055e-9 + (0.73731529915903144880e-10 + (-0.60158855648069050720e-11 + (0.31353477917777829365e-12 + (-0.78433290281573252839e-14 + 0.64469596404571726805e-66 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c26 = 0.80705592796482722655e-7 + (-0.63437141448789667973e-6 + (0.24620468370828364674e-5 + (-0.61960523928876340181e-5 + (0.11151856241067755755e-4 + (-0.14845004900719220437e-4 + (0.14307620482977119539e-4 + (-0.84853793010789473256e-5 + (-0.53744517576841498778e-6 + (0.88232406830407420128e-5 + (-0.13241570978518585723e-4 + (0.13179408729958335575e-4 + (-0.10194226086350057747e-4 + (0.64476996796559746850e-5 + (-0.34070253128267544011e-5 + (0.15180006154095517750e-5 + (-0.57168713761449777375e-6 + (0.18156038533459937192e-6 + (-0.48306691833643123879e-7 + (0.10648430194032302901e-7 + (-0.19122095699195631812e-8 + (0.27282465206711428022e-9 + (-0.29768356697676522564e-10 + (0.23340591071190063562e-11 + (-0.11712858328988494492e-12 + (0.28263287020243359521e-14 + 0.23392451525606577215e-69 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c27 = 0.49331711088852888976e-7 + (-0.41004368291703239281e-6 + (0.16850897961703399574e-5 + (-0.45047105587757996876e-5 + (0.86654922165692884461e-5 + (-0.12479329094478464909e-4 + (0.13388324258361694718e-4 + (-0.97936498514572374158e-5 + (0.25587045260909124072e-5 + (0.53280747221444300349e-5 + (-0.10721181802601462187e-4 + (0.12201152453443121452e-4 + (-0.10455670828281603489e-4 + (0.72629981428834119043e-5 + (-0.42115834110197720771e-5 + (0.20657788598905200051e-5 + (-0.86161321416614910843e-6 + (0.30565678902998530755e-6 + (-0.91884499221128689685e-7 + (0.23232167295343259066e-7 + (-0.48827798799360556781e-8 + (0.83839674785068315730e-9 + (-0.11465897079417236211e-9 + (0.12018375327114657495e-10 + (-0.90704383023344657506e-12 + (0.43891978494050177196e-13 + (-0.10229785550287397172e-14 + 0.78762463049180394663e-73 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c28 = 0.30198717233369596938e-7 + (-0.26470108300951418744e-6 + (0.11484217461677342633e-5 + (-0.32497913950022215997e-5 + (0.66506386195966268716e-5 + (-0.10285555161052384677e-4 + (0.12091874722611959811e-4 + (-0.10282092538544810074e-4 + (0.48262555421988436065e-5 + (0.22424493524723868069e-5 + (-0.80820796846961632989e-5 + (0.10796653917026920819e-4 + (-0.10296848856548453781e-4 + (0.78454106322971590499e-5 + (-0.49723665063048755405e-5 + (0.26692025174386628160e-5 + (-0.12235353625461559265e-5 + (0.48015929004768634100e-6 + (-0.16110110259511009705e-6 + (0.45993987610984026749e-7 + (-0.11082468980342148503e-7 + (0.22262384615144625788e-8 + (-0.36628003675664709291e-9 + (0.48106282932046855346e-10 + (-0.48521828528371470052e-11 + (0.35302160795771468331e-12 + (-0.16495114325484165433e-13 + (0.37178575828506531682e-15 + 0.24674957095607893065e-76 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; const Scalar c29 = 0.18511689126510260351e-7 + (-0.17068181783223545647e-6 + (0.77969745348337966326e-6 + (-0.23283626828310709094e-5 + (0.50491740099013299826e-5 + (-0.83365039291660230244e-5 + (0.10619684437634706088e-4 + (-0.10159658374625481776e-4 + (0.63391094420835344202e-5 + (-0.33689109880222793626e-6 + (-0.54986527825374819902e-5 + (0.90931526908756587315e-5 + (-0.97429399092296529333e-5 + (0.81477898036860525587e-5 + (-0.56292955614970245589e-5 + (0.32919777940121169458e-5 + (-0.16481984300967700802e-5 + (0.70993867832354502130e-6 + (-0.26326178871252171607e-6 + (0.83831263419606275090e-7 + (-0.22796773476702555683e-7 + (0.52479139309798472548e-8 + (-0.10097869367487702027e-8 + (0.15950303615432153340e-9 + (-0.20152759590530488405e-10 + (0.19590143225618303329e-11 + (-0.13759028734951606136e-12 + (0.62156462450904809840e-14 + (-0.13563652403372194113e-15 + 0.72106829618959360213e-80 * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta) * delta; return (tail ? -1.0 : 1.0) * v * (1.0 + v2 * (c1 + v2 * (c2 + v2 * (c3 + v2 * (c4 + v2 * (c5 + v2 * (c6 + v2 * (c7 + v2 * (c8 + v2 * (c9 + v2 * (c10 + v2 * (c11 + v2 * (c12 + v2 * (c13 + v2 * (c14 + v2 * (c15 + v2 * (c16 + v2 * (c17 + v2 * (c18 + v2 * (c19 + v2 * (c20 + v2 * (c21 + v2 * (c22 + v2 * (c23 + v2 * (c24 + v2 * (c25 + v2 * (c26 + v2 * (c27 + v2 * (c28 + v2 * (c29 + v2 * c30)))))))))))))))))))))))))))))); } // Here we try to use an asymptotic tail expansion. We limit the expansion to the fifth term as the evaluation of the d coefficients becomes unstable for moderate to large nu // const Scalar d5(-nu / (nu + 2.0) * (nu + 1.0) / (nu + 2.0) * (nu + 3.0) / (nu + 2.0) * (nu + 9.0) / (nu + 2.0) * (-0.1 + (0.725 + (-1.578125 + (0.46875 + (1.22890625 + (0.353125 + 0.02734375 * nu) * nu) * nu) * nu) * nu) * nu) / ((nu + 2.0) * (nu + 4.0) * (nu + 4.0) * (nu + 6.0) * (nu + 8.0) * (nu + 10.0))); const Scalar d4 = -nu / (nu + 2.0) * (nu + 1.0) / (nu + 2.0) * (nu + 7.0) / (nu + 2.0) * (0.16666666666666666667 + (-0.875 + (0.74479166666666666667 + (1.2109375 + (0.40104166666666666667 + 0.0390625 * nu) * nu) * nu) * nu) * nu) / ((nu + 2.0) * (nu + 4.0) * (nu + 4.0) * (nu + 6.0) * (nu + 8.0)); const Scalar z = std::pow(std::sqrt(nu) * u * normalizationFactor, 1.0 / nu); const Scalar z2 = z * z; // if (std::abs(d5 * std::pow(z2, 5)) < SpecFunc::Precision) if (std::abs(d4 * std::pow(z2, 4)) < SpecFunc::Precision) { const Scalar d1 = -0.5 * (nu + 1.0) / (nu + 2.0); const Scalar d2 = -0.125 * (nu / (nu + 2.0) * (nu + 1.0) / (nu + 2.0) * (nu + 3.0) / (nu + 4.0)); const Scalar d3 = -nu / (nu + 2.0) * (nu + 1.0) / (nu + 2.0) * (nu + 5.0) / (nu + 2.0) * (-0.041666666666666666667 + (0.14583333333333333333 + 0.0625 * nu) * nu) / ((nu + 2.0) * (nu + 6.0)); // const Scalar d4(-nu / (nu + 2.0) * (nu + 1.0) / (nu + 2.0) * (nu + 7.0) / (nu + 2.0) * (0.16666666666666666667 + (-0.875 + (0.74479166666666666667 + (1.2109375 + (0.40104166666666666667 + 0.0390625 * nu) * nu) * nu) * nu) * nu) / ((nu + 2.0) * (nu + 4.0) * (nu + 4.0) * (nu + 6.0) * (nu + 8.0))); // const Scalar value(std::sqrt(nu) / z * (1.0 + (d1 + (d2 + (d3 + (d4 + d5 * z2) * z2) * z2) * z2) * z2)); const Scalar value = std::sqrt(nu) / z * (1.0 + (d1 + (d2 + (d3 + d4 * z2) * z2) * z2) * z2); return (tail == (p < 0.5) ? value : -value); } #endif // USE_NEW_ALGO // Finally, if neither the central series nor the tail series apply, use the incomplete beta inverse function const Scalar omega = std::sqrt(nu * (1.0 / SpecFunc::RegularizedIncompleteBetaInverse(0.5 * nu, 0.5, 2.0 * u) - 1.0)); return ((p > 0.5) == tail ? -omega : omega); #endif // OPENTURNS_HAVE_BOOST } /* Random number generation We use a transformation method based on Gamma and Normal transformation: If N is Normal(0, 1) distributed and G is Gamma(nu / 2) distributed, sqrt(2 * nu) * N / sqrt(G) is distributed according to Student(nu) */ Scalar StudentRealization(const Scalar nu) { if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: nu must be positive, here nu=" << nu; const Scalar n = DistFunc::rNormal(); Scalar g = -1.0; do { g = DistFunc::rGamma(0.5 * nu); } while (g == 0.0); return std::sqrt(0.5 * nu / g) * n; } /************************************************************************************************************/ /* Normalized NonCentralStudent distribution, i.e. with a PDF equals to (eq. 31.15 p.516 of the reference): */ /* exp(-delta^2 / 2) * (nu / (nu + x^2)) ^ ((nu + 1) / 2) / (sqrt(nu * Pi) * Gamma(nu / 2)) * SUM */ /* where SUM = sum_0^inf Gamma((nu + k + 1) / 2) * omega^k / Gamma(k + 1) */ /* and omega = x * delta * sqrt(2 / (nu + x^2)) */ /* Reference: */ /* Norman L. Johnson, Samuel Kotz, N. Balakrishnan, "Continuous univariate distributions volume 2", second */ /* edition, 1995, Wiley Inter-Science */ /************************************************************************************************************/ /* CDF We use the algorithm described in: Viktor Witkovsky, "A Note on Computing Extreme Tail Probabilities of the Noncentral T Distribution with Large Noncentrality Parameter" Computational Statistics & Data Analysis, 43 (2003) pp 249-267 */ Scalar NonCentralStudentCDF(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail) { // Check nu if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << " should be strictly positive."; // Special case when |delta| << 1 if (std::abs(delta) < 4.0 * SpecFunc::Precision * nu) return DistFunc::pStudent(nu, x, tail); // Very large nu if (nu > 1.0 / SpecFunc::Precision) return DistFunc::pNormal(x - nu); // Special case when |x| << 1 if (std::abs(x) < SpecFunc::Precision) return DistFunc::pNormal(-delta, tail); // Small nu if (nu < 20.0) { #ifdef OPENTURNS_HAVE_BOOST return (tail ? boost::math::cdf(boost::math::complement(boost::math::non_central_t(nu, delta), x)) : boost::math::cdf(boost::math::non_central_t(nu, delta), x)); #else return NonCentralStudentCDFAlt0(nu, delta, x, tail, SpecFunc::Precision, SpecFunc::MaximumIteration); #endif } if (x < 0.0) return NonCentralStudentCDF(nu, -delta, -x, !tail); Bool computeTail = true; Bool useChiSquareTail = false; if (x < delta) { computeTail = false; useChiSquareTail = true; } /*******************************/ /* Integration bounds and mode */ /*******************************/ Scalar lowerBound = 0.0; Scalar upperBound = 0.0; Scalar mode = 0.0; // const = -(log(2)+log(2*pi)/2) const Scalar const1 = -1.6120857137646180667900353000732139; // logRelTolBound = log(eps) eps = 2.220446049250313e-16 const Scalar logRelTolBound = -3.604365338911715e+01; // zUpperBound > -norminv(eps(0)) = 3.847234634276879e+01 const Scalar zUpperBound = 38.5; // tLower = log(1/(1-eps)) ~ eps const Scalar tUpper(7.208730677823431e+01); // tUpper = log(1/eps^2) const Scalar tLower(4.930380657631324e-32); // tLower = log(1/(1-eps^2)) ~ eps^2 const Scalar nuMinus2 = std::max(1.0, (nu - 2.0)); const Scalar xSquare = x * x; const Scalar halfNu = 0.5 * nu; // Estimate the position of the modus MOD of the FUNC mode = (x * std::sqrt(4 * nu * nuMinus2 + xSquare * (delta * delta + 4 * nuMinus2)) - delta * (xSquare + 2 * nu)) / (2 * (xSquare + nu)); const Scalar dZ = std::min(0.5 * std::abs(mode + delta), 0.01); Point dMode(3); dMode[0] = mode - dZ; dMode[1] = mode; dMode[2] = mode + dZ; const Scalar theta = nu / xSquare; Point q(3); q[0] = theta * std::pow(dMode[0] + delta, 2); q[1] = theta * std::pow(dMode[1] + delta, 2); q[2] = theta * std::pow(dMode[2] + delta, 2); // Estimate the value of log(FUNC) around the mode point Point logFMode(3); logFMode[0] = const1 + 0.5 * (nuMinus2 * std::log(q[0] / nu) + nu - q[0] - dMode[0] * dMode[0]); logFMode[1] = const1 + 0.5 * (nuMinus2 * std::log(q[1] / nu) + nu - q[1] - dMode[1] * dMode[1]); logFMode[2] = const1 + 0.5 * (nuMinus2 * std::log(q[2] / nu) + nu - q[2] - dMode[2] * dMode[2]); // For given logRelTolBound estimate the logAbsoluteToleranceBound const Scalar logAbsoluteToleranceBound = logFMode[1] + logRelTolBound; // Estimate the integration limits by quadratic approximation const Scalar a = 0.5 * ((logFMode[0] - logFMode[1]) + (logFMode[2] - logFMode[1])) / (dZ * dZ); const Scalar b = 0.5 * (logFMode[0] - logFMode[2]) / dZ; const Scalar discriminantSqrt = std::sqrt(b * b + 4 * a * logRelTolBound); const Scalar denominator = 2 * a; Scalar lowerBound0 = std::max(-zUpperBound, (discriminantSqrt - b) / denominator); Scalar upperBound0 = std::max(-zUpperBound, std::min(zUpperBound, -(discriminantSqrt + b) / denominator)); // Find zAbsoluteToleranceBound by solving: logAbsoluteToleranceBound = log(normpdf(z)) const Scalar zAbsoluteToleranceBound = std::min(zUpperBound, std::sqrt(-1.8378770664093454835606594728112352 - 2 * logAbsoluteToleranceBound)); if (!useChiSquareTail) { Scalar quantileUpper = 0.0; // Estimate quantile of chi^2 distribution // with nu degrees of freedom, see INGLOT (2010, Eqn. A.3) if (nu > 1) quantileUpper = std::max(0.0, nu + 2 * tUpper + 1.62 * std::sqrt(nu * tUpper) + 0.63012 * std::sqrt(nu) * std::log(tUpper) - 1.12032 * std::sqrt(nu) - 2.48 * std::sqrt(tUpper) - 0.65381 * std::log(tUpper) - 0.22872); else quantileUpper = 6.739648382445014e+01; const Scalar zQuantileUpper = std::sqrt((quantileUpper / nu) * xSquare) - delta; // Conservative estimate of the upper integration limit upperBound: // NORMPDF is sufficiently small OR CHI2CDF is close to 1. upperBound = std::min(zAbsoluteToleranceBound, zQuantileUpper); // For large nu we assume approximate symmetry of FUNC if ((nu > 1e4) && (mode > -zUpperBound) && (mode < zUpperBound)) lowerBound0 = mode - (upperBound - mode); lowerBound = std::max(-delta, lowerBound0); } else { Scalar quantileLower = 0.0; if (nu > 1) quantileLower = std::max(0.0, nu + 2 * tLower + 1.62 * std::sqrt(nu * tLower) + 0.63012 * std::sqrt(nu) * std::log(tLower) - 1.12032 * std::sqrt(nu) - 2.48 * std::sqrt(tLower) - 0.65381 * std::log(tLower) - 0.22872); else quantileLower = 0.0; const Scalar zQuantileLower = std::sqrt((quantileLower / nu) * xSquare) - delta; const Scalar lowerBound1 = std::max(-zAbsoluteToleranceBound, zQuantileLower); lowerBound = std::max(-delta, lowerBound1); if ((nu > 1e4) && (mode > -zUpperBound) && (mode < zUpperBound)) upperBound0 = mode + (mode - lowerBound); upperBound = upperBound0; } Scalar value = 0.0; // First, compute the Normal contribution if (useChiSquareTail) value = 0.5 * SpecFunc::ErfC(-lowerBound * 0.7071067811865475244); else value = 0.5 * SpecFunc::ErfC(upperBound * 0.7071067811865475244); // Second, compute the contribution of each subinterval by Gauss-Legendre integration with 15 nodes on 16 intervals const GaussKronrodRule rule(GaussKronrodRule::G7K15); const Scalar wg0 = rule.getZeroGaussWeight(); const Point wg(rule.getOtherGaussWeights()); const Point xg(rule.getOtherKronrodNodes()); const UnsignedInteger iMax = 8; const Scalar dLowerBound = (mode - lowerBound) / iMax; const Scalar wLowerBound = 0.5 * dLowerBound; const Scalar dUpperBound = (mode - upperBound) / iMax; const Scalar wUpperBound = 0.5 * dUpperBound; const Scalar omega = nu / (2.0 * xSquare); for (UnsignedInteger i = 0; i < iMax; ++i) { // Ith interval at the left of the mode const Scalar ci = lowerBound + (i + 0.5) * dLowerBound; Scalar contributionLeft = wg0 * DistFunc::pGamma(halfNu, omega * std::pow(ci + delta, 2), useChiSquareTail) * std::exp(-0.5 * ci * ci) * SpecFunc::ISQRT2PI; // Ith interval at the right of the mode const Scalar xii = upperBound + (i + 0.5) * dUpperBound; Scalar contributionRight = wg0 * DistFunc::pGamma(halfNu, omega * std::pow(xii + delta, 2), useChiSquareTail) * std::exp(-0.5 * xii * xii) * SpecFunc::ISQRT2PI; for (UnsignedInteger j = 0; j < xg.getSize() / 2; ++j) { const Scalar zetaj = xg[2 * j + 1]; // Contribution of the left interval const Scalar zj_m = ci - wLowerBound * zetaj; const Scalar zj_p = ci + wLowerBound * zetaj; contributionLeft += wg[j] * SpecFunc::ISQRT2PI * (DistFunc::pGamma(halfNu, omega * std::pow(zj_m + delta, 2), useChiSquareTail) * std::exp(-0.5 * zj_m * zj_m) + DistFunc::pGamma(halfNu, omega * std::pow(zj_p + delta, 2), useChiSquareTail) * std::exp(-0.5 * zj_p * zj_p)); // Contribution of the right interval const Scalar zetaj_m = xii - wUpperBound * zetaj; const Scalar zetaj_p = xii + wUpperBound * zetaj; contributionRight += wg[j] * SpecFunc::ISQRT2PI * (DistFunc::pGamma(halfNu, omega * std::pow(zetaj_m + delta, 2), useChiSquareTail) * std::exp(-0.5 * zetaj_m * zetaj_m) + DistFunc::pGamma(halfNu, omega * std::pow(zetaj_p + delta, 2), useChiSquareTail) * std::exp(-0.5 * zetaj_p * zetaj_p)); } // Loop over j, the integration points value += contributionLeft * wLowerBound - contributionRight * wUpperBound; } // Loop over i, the integration subintervals // Set the values of the CDF and CCDF return (computeTail == tail ? value : 0.5 + (0.5 - value)); } /* CDF Alt0 We use the algorithm described in: Denise Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43 (2003) pp 249-267 */ Scalar NonCentralStudentCDFAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail, const Scalar precision, const UnsignedInteger maximumIteration) { // Check nu if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << " should be strictly positive."; // Special case when |delta| << 1 if (std::abs(delta / (4.0 * nu)) < precision) return DistFunc::pStudent(nu, x, tail); // Very large nu if (nu > 1.0 / precision) return DistFunc::pNormal(x - nu); // Special case when |x| << 1 if (std::abs(x) < precision) return DistFunc::pNormal(-delta, tail); Scalar t = x; Scalar del = delta; // Must use the complementary function for negative arguments if (x < 0.0) { t = -t; del = -del; } // Some useful quantities const Scalar x2 = t * t; const Scalar xi = x2 / (nu + x2); const Scalar logXi = std::log(xi); const Scalar halfNu = 0.5 * nu; const Scalar halfDelta2 = 0.5 * del * del; const Scalar logHalfDelta2 = std::log(halfDelta2); // Starting index in the sum: integral part of halfDelta2 and insure that it is at least 1 const UnsignedInteger k = std::max(1UL, static_cast(floor(halfDelta2))); // Index of the forward iterations UnsignedInteger kForward = k; // Index of the backward iterations UnsignedInteger kBackward = k; LOGDEBUG(OSS() << "kForward=" << kForward << "kBackward=" << kBackward); // Terms and factors of the summation. // The initialization corresponds to the terme of index k. const Scalar commonExponent = -halfDelta2 + k * logHalfDelta2; LOGDEBUG(OSS() << "commonExponent=" << commonExponent); Scalar pForward = 0.5 * std::exp(commonExponent - SpecFunc::LnGamma(k + 1)); Scalar qForward = 0.5 * del / M_SQRT2 * std::exp(commonExponent - SpecFunc::LnGamma(k + 1.5)); LOGDEBUG(OSS() << "pForward=" << pForward << ", qForward=" << qForward); Scalar betaPForward = DistFunc::pBeta(k + 0.5, halfNu, xi); Scalar betaQForward = DistFunc::pBeta(k + 1, halfNu, xi); LOGDEBUG(OSS() << "betaPForward=" << betaPForward << ", betaQForward=" << betaQForward); // The correction factors will be updated at the beginning of each iteration: it is the quantity to add to // the corresponding betaP and betaQ factors to go to the value associated with the current iteration. // They are thus initialized such that after one update, they will change the betaP and betaQ factors // to their values associated with the iteration (k-1): const Scalar commonFactor = (k - 0.5) * logXi + halfNu * std::log(nu / (nu + x2)) - SpecFunc::LnGamma(halfNu); LOGDEBUG(OSS() << "commonFactor=" << commonFactor); // correctionBetaPForward = Gamma(k - 1/2 + nu/2) / Gamma(k + 1/2) / Gamma(nu/2) * xi^(k - 1/2) * (1 - xi)^(nu/2) Scalar correctionBetaPForward = -std::exp(SpecFunc::LnGamma(k - 0.5 + halfNu) - SpecFunc::LnGamma(k + 0.5) + commonFactor); // correctionBetaPForward = Gamma(k + nu/2) / Gamma(k + 1) / Gamma(nu/2) * xi^k * (1 - xi)^(nu/2) Scalar correctionBetaQForward = -std::exp(SpecFunc::LnGamma(k + halfNu) - SpecFunc::LnGamma(k + 1) + commonFactor + 0.5 * logXi); LOGDEBUG(OSS() << "correctionBetaPForward=" << correctionBetaPForward << ", correctionBetaQForward=" << correctionBetaQForward); Scalar pBackward = pForward; Scalar qBackward = qForward; Scalar betaPBackward = betaPForward; Scalar betaQBackward = betaQForward; // The correction factors will be updated at the beginning of each iteration: it is the quantity to add to // the corresponding betaP and betaQ factors to go to the value associated with the current iteration. // They are thus initialized such that after one update, they will change the betaP and betaQ factors // to their values associated with the iteration (k+1): // correctionBetaPBackward = Gamma(k + 1/2 + nu/2) / Gamma(k + 3/2 + nu/2) / Gamma(nu/2) * xi^(k + 1/2) * (1 - xi)^(nu/2) Scalar correctionBetaPBackward = -correctionBetaPForward * xi * (k - 0.5 + halfNu) / (k + 0.5); Scalar correctionBetaQBackward = -correctionBetaQForward * xi * (k + halfNu) / (k + 1); LOGDEBUG(OSS() << "correctionBetaPBackward=" << correctionBetaPBackward << ", correctionBetaQBackward=" << correctionBetaQBackward); Scalar value = DistFunc::pNormal(-del) + pForward * betaPForward + qForward * betaQForward; Scalar contributionForward = 0.0; Scalar contributionBackward = 0.0; Scalar error = SpecFunc::MaxScalar; // At the beginning of the iteration, kForward and kBackward store the index of the last terms // that have already been accumulated. Each iteration must update the P and Q factors, as well // as the betaP and betaQ factors. For this last update, one must update the corresponding // correction factors. Thus, we proceed as follows: // First, update the correction factors for the betaP and betaQ factors // Second, update the betaP and betaQ factors // Third, upate the P and Q factors // Fourth, accumulate the current contribution // It is the responsibility of the main iteration to update kForward and kBackward #define FORWARD_ITERATION \ correctionBetaPForward *= xi * (kForward - 0.5 + halfNu) / (kForward + 0.5); \ correctionBetaQForward *= xi * (kForward + halfNu) / (kForward + 1); \ pForward *= halfDelta2 / (kForward + 1); \ betaPForward += correctionBetaPForward; \ qForward *= halfDelta2 / (kForward + 1.5); \ betaQForward += correctionBetaQForward; \ contributionForward = pForward * betaPForward + qForward * betaQForward; \ value += contributionForward; #define BACKWARD_ITERATION \ correctionBetaPBackward *= (kBackward + 0.5) / (xi * (kBackward - 0.5 + halfNu)); \ correctionBetaQBackward *= (kBackward + 1) / (xi * (kBackward + halfNu)); \ pBackward *= kBackward / halfDelta2; \ betaPBackward += correctionBetaPBackward; \ qBackward *= (kBackward + 0.5) / halfDelta2; \ betaQBackward += correctionBetaQBackward; \ contributionBackward = pBackward * betaPBackward + qBackward * betaQBackward; \ value += contributionBackward; // Here, i is an UnsignedInteger as it is only a loop counter UnsignedInteger i = 1; const UnsignedInteger imax = std::min(k, maximumIteration); while((error > 0.0) && (i <= imax)) { FORWARD_ITERATION; BACKWARD_ITERATION; error = contributionForward + contributionBackward; ++kForward; --kBackward; ++i; } // Do we have to perform further forward iterations? while ((error > 0.0) && (i <= maximumIteration)) { FORWARD_ITERATION; error = contributionForward; ++kForward; ++i; } #undef FORWARD_ITERATION #undef BACKWARD_ITERATION if (error > precision * (std::abs(value) + precision)) LOGWARN(OSS() << "Warning: in NonCentralStudentAlt0(nu, delta, x), no convergence after " << i << " iterations. Error is " << error * value << " value is " << value << " for nu=" << nu << ", delta=" << delta << " and x=" << x); // Clip to [0,1] in order to get rid of small rounding error value = (value < 0.0 ? 0.0 : (value > 1.0 ? 1.0 : value)); // Check if we had to change the sign of the argument or if we are asked for the tail CDF if ((tail && (x > 0.0)) || (!tail && (x < 0.0))) value = 0.5 + (0.5 - value); return value; } /* PDF We use the relation between the PDF and the CDF in order to reduce the computation of the PDF to two computations of the CDF */ Scalar NonCentralStudentPDF(const Scalar nu, const Scalar delta, const Scalar x) { // Check nu if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << " should be strictly positive."; // Early exit for delta == 0, central Student PDF if (std::abs(delta / (4.0 * nu)) < SpecFunc::Precision) return std::exp(SpecFunc::LnGamma(0.5 * nu + 0.5) - SpecFunc::LnGamma(0.5 * nu) - 0.5 * std::log(M_PI * nu) + (0.5 * nu + 0.5) * std::log(nu / (nu + x * x))); if (std::abs(x) < SpecFunc::Precision) return std::exp(SpecFunc::LnGamma(0.5 * nu + 0.5) - SpecFunc::LnGamma(0.5 * nu) - 0.5 * std::log(M_PI * nu) - 0.5 * delta * delta); return std::max(0.0, nu / x * (NonCentralStudentCDF(nu + 2, delta, x * std::sqrt(1.0 + 2.0 / nu)) - NonCentralStudentCDF(nu, delta, x))); } /************************************************************************************************************/ /* Normalized NonCentralStudent distribution, i.e. with a PDF equals to (eq. 31.15 p.516 of the reference): */ /* exp(-delta^2 / 2) * (nu / (nu + x^2)) ^ ((nu + 1) / 2) / (sqrt(nu * Pi) * Gamma(nu / 2)) * SUM */ /* where SUM = sum_0^inf Gamma((nu + k + 1) / 2) * omega^k / Gamma(k + 1) */ /* and omega = x * delta * sqrt(2 / (nu + x^2)) */ /* In order to derive simple update formulas for the terms in the sum, we separate the odd indices from the */ /* even ones: */ /* SUM = SUM_ODD + SUM_EVEN, where: */ /* SUM_ODD = sum_0^inf Gamma(nu / 2 + k + 1) * omega * z^k / Gamma(2 * k + 2) */ /* SUM_EVEN = sum_O^inf Gamma((nu + 1) / 2 + k) * z^k / Gamma(2 * k + 1) */ /* and z = omega^2 */ /* The summation is done starting at the kM chosen as for the NonCentralStudentCDFAlt0 method. */ /* Reference: */ /* Norman L. Johnson, Samuel Kotz, N. Balakrishnan, "Continuous univariate distributions volume 2", second */ /* edition, 1995, Wiley Inter-Science */ /************************************************************************************************************/ Scalar NonCentralStudentPDFAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Scalar precision, const UnsignedInteger maximumIteration) { // Check nu if (!(nu > 0.0)) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << " should be strictly positive."; // Early exit for delta == 0, central Student PDF if (std::abs(delta / (4.0 * nu)) < precision) return std::exp(SpecFunc::LnGamma(0.5 * nu + 0.5) - SpecFunc::LnGamma(0.5 * nu) - 0.5 * std::log(M_PI * nu) + (0.5 * nu + 0.5) * std::log(nu / (nu + x * x))); // Case delta <> 0 #ifdef OPENTURNS_HAVE_BOOST return boost::math::pdf(boost::math::non_central_t(nu, delta), x); #else const Scalar halfNu = 0.5 * nu; const Scalar halfNup1_2 = halfNu + 0.5; const Scalar logConstant = -0.5 * delta * delta - SpecFunc::LnGamma(halfNu) - 0.5 * std::log(M_PI * nu); // Early exit for x == 0 if (std::abs(x) < precision) return std::exp(logConstant + SpecFunc::LnGamma(halfNup1_2)); // For x <> 0 const Scalar x2 = x * x; const Scalar w = 1.0 / (nu + x2); Scalar logFactor = logConstant + halfNup1_2 * std::log(nu * w); // Special treatment for very low value to avoid NaNs due to 0.Inf static const Scalar logPrecision(std::log(precision)); if (logFactor < logPrecision) { Scalar value = 0.0; if (x < 0.0) value = nu / x * (NonCentralStudentCDF(nu + 2.0, delta, x * std::sqrt(1.0 + 2.0 / nu), false) - NonCentralStudentCDF(nu, delta, x, false)); else value = -nu / x * (NonCentralStudentCDF(nu + 2.0, -delta, -x * std::sqrt(1.0 + 2.0 / nu), false) - NonCentralStudentCDF(nu, -delta, -x)); return std::max(0.0, value); } const Scalar omega = delta * x * std::sqrt(2 * w); const Scalar z = omega * omega; // Start at even index that maximize the coefficient in the sum const Scalar halfDelta2 = 0.5 * delta * delta; // Starting index in the sum: integral part of halfDelta2 and insure that it is at least 1 const UnsignedInteger k = std::max(1UL, static_cast(floor(halfDelta2))); // Loop forward and backward starting from k // Initialization const Scalar kLogZ = k * std::log(z); Scalar pForwardEven = std::exp(logFactor + SpecFunc::LnGamma(halfNup1_2 + k) - SpecFunc::LnGamma(2 * k + 1) + kLogZ); Scalar pForwardOdd = omega * std::exp(logFactor + SpecFunc::LnGamma(halfNu + k + 1) - SpecFunc::LnGamma(2 * k + 2) + kLogZ); Scalar pBackwardEven = pForwardEven; Scalar pBackwardOdd = pForwardOdd; Scalar value = pForwardOdd + pForwardEven; Scalar error = SpecFunc::MaxScalar; UnsignedInteger kForward = k; UnsignedInteger kBackward = k; #define FORWARD_ITERATION \ pForwardOdd *= (halfNu + kForward + 1) * z / (2 * (kForward + 1) * (2 * kForward + 3)); \ pForwardEven *= (halfNup1_2 + kForward) * z / (2 * (kForward + 1) * (2 * kForward + 1)); \ value += pForwardOdd + pForwardEven; #define BACKWARD_ITERATION \ pBackwardOdd *= 2 * kBackward * (2 * kBackward + 1) / (z * (halfNu + kBackward)); \ pBackwardEven *= 2 * kBackward * (2 * kBackward - 1) / (z * (halfNup1_2 + kBackward - 1)); \ value += pBackwardOdd + pBackwardEven; // Here, i is an UnsignedInteger as it is only a loop counter UnsignedInteger i = 1; const UnsignedInteger imax = std::min(k, maximumIteration); // while((error > precision * (std::abs(value) + precision)) && (i <= imax)) while((error > 0.0) && (i <= imax)) { FORWARD_ITERATION; BACKWARD_ITERATION; error = pForwardOdd + pBackwardOdd + pForwardEven + pBackwardEven; ++kForward; --kBackward; ++i; } // Do we have to perform further forward iterations? // while ((error > precision * (std::abs(value) + precision)) && (i <= MaximumIteration)) while ((error > 0.0) && (i <= maximumIteration)) { FORWARD_ITERATION; error = pForwardOdd + pForwardEven; ++kForward; ++i; } #undef FORWARD_ITERATION #undef BACKWARD_ITERATION if (error > precision * (std::abs(value) + precision)) LOGWARN(OSS() << "Warning: in NonCentralStudentPDFAlt0(nu, delta, x), no convergence after " << i << " iterations. Error is " << error * value << " value is " << value << " for nu=" << nu << ", delta=" << delta << " and x=" << x); // Clip to [0,+inf[ in order to get rid of small rounding error return (value <= 0.0 ? 0.0 : value); #endif } /* Random number generation We use a transformation method based on Gamma and Normal transformation: If N is Normal(delta, 1) distributed and G is Gamma(nu / 2) distributed, sqrt(2 * nu) * N / sqrt(G) is distributed according to NonCentralStudent(nu, delta) */ Scalar NonCentralStudentRealization(const Scalar nu, const Scalar delta) { const Scalar n = DistFunc::rNormal() + delta; Scalar g = -1.0; do { g = DistFunc::rGamma(0.5 * nu); } while (g == 0.0); return std::sqrt(0.5 * nu / g) * n; } } // StudentFunctions END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/SubSquareCopula.cxx000066400000000000000000000252211307543307100255500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements a SubSquare copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/SubSquareCopula.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/Interval.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(SubSquareCopula); static const Factory Factory_SubSquareCopula; /* Default constructor */ SubSquareCopula::SubSquareCopula() : CopulaImplementation("SubSquareCopula") , phi_(SymbolicFunction("x", "0.0")) , nullPhi_(true) , mass_(1.0) { // The range is generic for all the copulas setDimension(2); computeRange(); } /* Default constructor */ SubSquareCopula::SubSquareCopula(const Function & phi) : CopulaImplementation("SubSquareCopula") , phi_(phi) , nullPhi_(false) , mass_(0.0) { // The range is generic for all the copulas setDimension(2); computeRange(); setPhi(phi); } /* Comparison operator */ Bool SubSquareCopula::operator ==(const SubSquareCopula & other) const { if (this == &other) return true; return phi_ == other.phi_; } Bool SubSquareCopula::equals(const DistributionImplementation & other) const { const SubSquareCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String SubSquareCopula::__repr__() const { OSS oss; oss << "class=" << SubSquareCopula::GetClassName() << " name=" << getName() << " phi=" << phi_ << " nullPhi=" << nullPhi_ << " mass=" << mass_; return oss; } String SubSquareCopula::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(phi = " << phi_.__str__(offset) << ")"; return oss; } /* Virtual constructor */ SubSquareCopula * SubSquareCopula::clone() const { return new SubSquareCopula(*this); } /* Phi accessors */ void SubSquareCopula::setPhi(const Function & phi) { if (phi.getInputDimenson() != 1) throw InvalidArgumentException(HERE) << "Error: phi must have an input dimension equal to 1, here input dimension=" << phi.getInputDimension(); if (phi.getOutputDimenson() != 1) throw InvalidArgumentException(HERE) << "Error: phi must have an output dimension equal to 1, here output dimension=" << phi.getOutputDimension(); const Scalar phi0 = phi(Point(1, 0.0))[0]; if (phi0 != 0.0) throw InvalidArgumentException(HERE) << "Error: phi(0) must be null, here phi(0)=" << phi0; const Scalar phi1 = phi(Point(1, 1.0))[0]; if (!(phi1 <= 1.0)) throw InvalidArgumentException(HERE) << "Error: phi(1) must be less or equal to 1, here phi(1)=" << phi1; nullPhi_ = false; // Here, we will use the integration algorithm to evaluate phi on a meaningfull grid in order to check if phi is increasing and takes its values in [0, 1] phi_ = phi; phi_.enableHistory(); phi_.clearHistory(); mass_ = 1.0 - GaussKronrod().integrate(phi_, Interval(0.0, 1.0)); Sample inputOutput(phi_.getHistoryInput().getSample()); inputOutput.stack(phi_.getHistoryOutput().getSample()); inputOutput = inputOutput.sortAccordingToAComponent(0); Scalar lastX = inputOutput[0][0]; Scalar lastValue = inputOutput[0][1]; if (!(lastValue >= 0.0)) throw InvalidArgumentException(HERE) << "Error: phi must be nonnegative, here phi(" << lastX << ")=" << lastValue; if (!(lastValue <= 1.0)) throw InvalidArgumentException(HERE) << "Error: phi must be less or equal to 1, here phi(" << lastX << ")=" << lastValue; for (UnsignedInteger i = 1; i < inputOutput.getSize(); ++i) { const Scalar x = inputOutput[i][0]; const Scalar value = inputOutput[i][1]; if (!(value >= 0.0)) throw InvalidArgumentException(HERE) << "Error: phi must be nonnegative, here phi(" << inputOutput[i][0] << ")=" << value; if (!(lastValue <= 1.0)) throw InvalidArgumentException(HERE) << "Error: phi must be less or equal to 1, here phi(" << inputOutput[0][0] << ")=" << inputOutput[0][1]; if (value < lastValue) throw InvalidArgumentException(HERE) << "Error: phi must be nondecreasing, here phi(" << lastX << ")=" << lastValue << " and phi(" << x << ")=" << value; lastX = x; lastValue = value; } if (mass_ < error[0]) { mass_ = 0.0; nullPhi_ = true; } } /* Get one realization of the distribution */ Point SubSquareCopula::getRealization() const { UnsignedInteger dimension = getDimension(); if (hasIndependentCopula()) return RandomGenerator::Generate(dimension); else { Point realization(subSquare_.getRealization()); for (UnsignedInteger i = 0; i < dimension; ++i) realization[i] = DistFunc::pSubSquare(realization[i]); return realization; } } /* Get the PDF of the distribution */ Scalar SubSquareCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Be careful to evaluate the copula only in the interior of its support for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support return 0.0 if ((point[i] <= 0.0) || (point[i] >= 1.0)) return 0.0; } throw NotYetImplementedException(HERE) << "In SubSquareCopula::computePDF(const Point & point) const"; } /* Get the CDF of the distribution */ Scalar SubSquareCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); // Compute the subSquare point such that a subSquare distribution with this copula // and standard 1D subSquare marginals has the same CDF at this subSquare point // than the copula at the given point. // Be careful to evaluate the copula only in the interior of its support Indices indices; for (UnsignedInteger i = 0; i < dimension; ++i) { // If outside of the support, in the lower part, return 0.0 if (point[i] <= 0.0) return 0.0; // If the current component is in the interior of the support, its index // is taken into account if (point[i] < 1.0) indices.add(i); } const UnsignedInteger activeDimension = indices.getSize(); // Quick return if all the components are >= 1 if (activeDimension == 0) return 1.0; throw NotYetImplementedException(HERE) << "In SubSquareCopula::computeCDF(const Point & point) const"; } // computeCDF /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar SubSquareCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return 1.0; throw NotYetImplementedException(HERE) << "In SubSquareCopula::computeConditionalPDF(const Scalar x, const Point & y) const"; } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar SubSquareCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return x; // General case throw NotYetImplementedException(HERE) << "In SubSquareCopula::computeConditionalCDF(const Scalar x, const Point & y) const"; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar SubSquareCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; if (q == 0.0) return 0.0; if (q == 1.0) return 1.0; // Special case when no contitioning or independent copula if ((conditioningDimension == 0) || hasIndependentCopula()) return q; // General case throw NotYetImplementedException(HERE) << "In SubSquareCopula::computeConditionalQuantile(const Scalar q, const Point & y) const"; } /* Tell if the distribution has independent copula */ Bool SubSquareCopula::hasIndependentCopula() const { return nullPhi_; } /* Parameters value accessor */ Point MinCopula::getParameter() const { return Point(); } void MinCopula::setParameter(const Point & parameter) { if (parameters.getSize() != 0) throw InvalidArgumentException(HERE) << "Error: expected 0 parameters, got " << parameters.getSize(); } /* Parameters description accessor */ Description MinCopula::getParameterDescription() const { return Description(); } /* Method save() stores the object through the StorageManager */ void SubSquareCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "phi_", phi_ ); adv.saveAttribute( "nullPhi_", nullPhi_ ); adv.saveAttribute( "mass_", mass_ ); } /* Method load() reloads the object from the StorageManager */ void SubSquareCopula::load(Advocate & adv) { // The range is generic for all the copulas CopulaImplementation::load(adv); adv.loadAttribute( "phi_", phi_ ); adv.loadAttribute( "nullPhi_", nullPhi_ ); adv.loadAttribute( "mass_", mass_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TracyWidomGOE.cxx000066400000000000000000000131141307543307100251050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGOE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/TracyWidomGOE.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TracyWidomGOE); static const Factory Factory_TracyWidomGOE; /* Default constructor */ TracyWidomGOE::TracyWidomGOE() : ContinuousDistribution() { setName("TracyWidomGOE"); throw NotYetImplementedException(HERE) << "In TracyWidomGOE::TracyWidomGOE()"; } /* Comparison operator */ Bool TracyWidomGOE::operator ==(const TracyWidomGOE & other) const { return true; } Bool TracyWidomGOE::equals(const DistributionImplementation & other) const { const TracyWidomGOE* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String TracyWidomGOE::__repr__() const { OSS oss; oss << "class=" << TracyWidomGOE::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } /* Virtual constructor */ TracyWidomGOE * TracyWidomGOE::clone() const { return new TracyWidomGOE(*this); } /* Get the DDF of the distribution */ Point TracyWidomGOE::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGOE::computeDDF(const Point & point) const"; } /* Get the PDF of the distribution */ Scalar TracyWidomGOE::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGOE::computePDF(const Point & point) const"; } /* Get the CDF of the distribution */ Scalar TracyWidomGOE::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGOE::computeCDF(const Point & point) const"; } /** Get the PDFGradient of the distribution */ Point TracyWidomGOE::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /** Get the CDFGradient of the distribution */ Point TracyWidomGOE::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /* Get the quantile of the distribution */ Scalar TracyWidomGOE::computeScalarQuantile(const Scalar prob, const Bool tail) const { throw NotYetImplementedException(HERE) << "In TracyWidomGOE::computeScalarQuantile(const Scalar prob, const Bool tail) const"; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar TracyWidomGOE::getRoughness() const { throw NotYetImplementedException(HERE) << "In TracyWidomGOE::getRoughness() const"; } /* Compute the mean of the distribution */ void TracyWidomGOE::computeMean() const { // RMT matlab toolbox computation mean_ = Point(1, -1.2065335745820); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point TracyWidomGOE::getStandardDeviation() const { // RMT matlab toolbox computation return Point(1, 1.607781034581); } /* Get the skewness of the distribution */ Point TracyWidomGOE::getSkewness() const { // RMT matlab toolbox computation return Point(1, 0.29346452408); } /* Get the kurtosis of the distribution */ Point TracyWidomGOE::getKurtosis() const { // RMT matlab toolbox computation return Point(1, 0.1652429384); } /* Compute the covariance of the distribution */ void TracyWidomGOE::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar sigma = getStandardDeviation()[0]; covariance_(0, 0) = sigma * sigma; isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ TracyWidomGOE::PointWithDescriptionCollection TracyWidomGOE::getParametersCollection() const { // No parameter, return a collection with an empty PointWithDescription return PointWithDescriptionCollection(1, PointWithDescription(0)); } /* Method save() stores the object through the StorageManager */ void TracyWidomGOE::save(Advocate & adv) const { ContinuousDistribution::save(adv); } /* Method load() reloads the object from the StorageManager */ void TracyWidomGOE::load(Advocate & adv) { ContinuousDistribution::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TracyWidomGSE.cxx000066400000000000000000000132001307543307100251050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGSE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/TracyWidomGSE.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TracyWidomGSE); static const Factory Factory_TracyWidomGSE; /* Default constructor */ TracyWidomGSE::TracyWidomGSE() : ContinuousDistribution() { setName("TracyWidomGSE"); setDimension(1); setRange(Interval(-1.0, 1.0)); throw NotYetImplementedException(HERE) << "In TracyWidomGSE::TracyWidomGSE()"; } /* Comparison operator */ Bool TracyWidomGSE::operator ==(const TracyWidomGSE & other) const { return true; } Bool TracyWidomGSE::equals(const DistributionImplementation & other) const { const TracyWidomGSE* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String TracyWidomGSE::__repr__() const { OSS oss; oss << "class=" << TracyWidomGSE::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } /* Virtual constructor */ TracyWidomGSE * TracyWidomGSE::clone() const { return new TracyWidomGSE(*this); } /* Get the DDF of the distribution */ Point TracyWidomGSE::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGSE::computeDDF(const Point & point) const"; } /* Get the PDF of the distribution */ Scalar TracyWidomGSE::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGSE::computePDF(const Point & point) const"; } /* Get the CDF of the distribution */ Scalar TracyWidomGSE::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGSE::computeCDF(const Point & point) const"; } /** Get the PDFGradient of the distribution */ Point TracyWidomGSE::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /** Get the CDFGradient of the distribution */ Point TracyWidomGSE::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /* Get the quantile of the distribution */ Scalar TracyWidomGSE::computeScalarQuantile(const Scalar prob, const Bool tail) const { throw NotYetImplementedException(HERE) << "In TracyWidomGSE::computeScalarQuantile(const Scalar prob, const Bool tail) const"; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar TracyWidomGSE::getRoughness() const { throw NotYetImplementedException(HERE) << "In TracyWidomGSE::getRoughness() const"; } /* Compute the mean of the distribution */ void TracyWidomGSE::computeMean() const { // RMT matlab toolbox computation mean_ = Point(1, -2.306884893241); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point TracyWidomGSE::getStandardDeviation() const { // RMT matlab toolbox computation return Point(1, 0.5177237207726); } /* Get the skewness of the distribution */ Point TracyWidomGSE::getSkewness() const { // RMT matlab toolbox computation return Point(1, 0.16550949435); } /* Get the kurtosis of the distribution */ Point TracyWidomGSE::getKurtosis() const { // RMT matlab toolbox computation return Point(1, 0.0491951565); } /* Compute the covariance of the distribution */ void TracyWidomGSE::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar sigma = getStandardDeviation()[0]; covariance_(0, 0) = sigma * sigma; isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ TracyWidomGSE::PointWithDescriptionCollection TracyWidomGSE::getParametersCollection() const { // No parameter, return a collection with an empty PointWithDescription return PointWithDescriptionCollection(1, PointWithDescription(0)); } /* Method save() stores the object through the StorageManager */ void TracyWidomGSE::save(Advocate & adv) const { ContinuousDistribution::save(adv); } /* Method load() reloads the object from the StorageManager */ void TracyWidomGSE::load(Advocate & adv) { ContinuousDistribution::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TracyWidomGUE.cxx000066400000000000000000000132021307543307100251110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGUE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/TracyWidomGUE.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Exception.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TracyWidomGUE); static const Factory Factory_TracyWidomGUE; /* Default constructor */ TracyWidomGUE::TracyWidomGUE() : ContinuousDistribution() { setName("TracyWidomGUE"); setDimension(1); setRange(Interval(-1.0, 1.0)); throw NotYetImplementedException(HERE) << "In TracyWidomGUE::TracyWidomGUE()"; } /* Comparison operator */ Bool TracyWidomGUE::operator ==(const TracyWidomGUE & other) const { return true; } Bool TracyWidomGUE::equals(const DistributionImplementation & other) const { const TracyWidomGUE* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String TracyWidomGUE::__repr__() const { OSS oss; oss << "class=" << TracyWidomGUE::GetClassName() << " name=" << getName() << " dimension=" << getDimension(); return oss; } /* Virtual constructor */ TracyWidomGUE * TracyWidomGUE::clone() const { return new TracyWidomGUE(*this); } /* Get the DDF of the distribution */ Point TracyWidomGUE::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGUE::computeDDF(const Point & point) const"; } /* Get the PDF of the distribution */ Scalar TracyWidomGUE::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGUE::computePDF(const Point & point) const"; } /* Get the CDF of the distribution */ Scalar TracyWidomGUE::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); throw NotYetImplementedException(HERE) << "In TracyWidomGUE::computeCDF(const Point & point) const"; } /** Get the PDFGradient of the distribution */ Point TracyWidomGUE::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /** Get the CDFGradient of the distribution */ Point TracyWidomGUE::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(0); } /* Get the quantile of the distribution */ Scalar TracyWidomGUE::computeScalarQuantile(const Scalar prob, const Bool tail) const { throw NotYetImplementedException(HERE) << "In TracyWidomGUE::computeScalarQuantile(const Scalar prob, const Bool tail) const"; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar TracyWidomGUE::getRoughness() const { throw NotYetImplementedException(HERE) << "In TracyWidomGUE::getRoughness() const"; } /* Compute the mean of the distribution */ void TracyWidomGUE::computeMean() const { // RMT matlab toolbox computation mean_ = Point(1, -1.771086807411); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point TracyWidomGUE::getStandardDeviation() const { // RMT matlab toolbox computation return Point(1, 0.813194792832); } /* Get the skewness of the distribution */ Point TracyWidomGUE::getSkewness() const { // RMT matlab toolbox computation return Point(1, 0.224084203610); } /* Get the kurtosis of the distribution */ Point TracyWidomGUE::getKurtosis() const { // RMT matlab toolbox computation return Point(1, 0.0934480876); } /* Compute the covariance of the distribution */ void TracyWidomGUE::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar sigma = getStandardDeviation()[0]; covariance_(0, 0) = sigma * sigma; isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ TracyWidomGUE::PointWithDescriptionCollection TracyWidomGUE::getParametersCollection() const { // No parameter, return a collection with an empty PointWithDescription return PointWithDescriptionCollection(1, PointWithDescription(0)); } /* Method save() stores the object through the StorageManager */ void TracyWidomGUE::save(Advocate & adv) const { ContinuousDistribution::save(adv); } /* Method load() reloads the object from the StorageManager */ void TracyWidomGUE::load(Advocate & adv) { ContinuousDistribution::load(adv); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Trapezoidal.cxx000066400000000000000000000446061307543307100247600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Trapezoidal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Trapezoidal.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Trapezoidal); static const Factory Factory_Trapezoidal; /* Default constructor */ Trapezoidal::Trapezoidal() : ContinuousDistribution() , a_(-2.0) , b_(-1.0) , c_(1.0) , d_(2.0) { setName("Trapezoidal"); update(); } /* Parameters constructor */ Trapezoidal::Trapezoidal(const Scalar a, const Scalar b, const Scalar c, const Scalar d) : ContinuousDistribution() , a_(a) , b_(b) , c_(c) , d_(d) { setName("Trapezoidal"); update(); } /* Comparison operator */ Bool Trapezoidal::operator ==(const Trapezoidal & other) const { if (this == &other) return true; return (a_ == other.a_) && (b_ == other.b_) && (c_ == other.c_) && (d_ == other.d_); } Bool Trapezoidal::equals(const DistributionImplementation & other) const { const Trapezoidal* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Trapezoidal::__repr__() const { OSS oss; oss << "class=" << Trapezoidal::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " a=" << a_ << " b=" << b_ << " c=" << c_ << " d=" << d_ << " h=" << h_; return oss; } String Trapezoidal::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(a = " << a_ << ", b = " << b_ << ", c = " << c_ << ", d = " << d_ << ")"; return oss; } /* Virtual constructor */ Trapezoidal * Trapezoidal::clone() const { return new Trapezoidal(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Trapezoidal::computeRange() { setRange(Interval(a_, d_)); } /* Get one realization of the distribution */ Point Trapezoidal::getRealization() const { return Point(1, computeScalarQuantile(RandomGenerator::Generate())); } /* Get the DDF of the distribution */ Point Trapezoidal::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((a_ < x) && (x < b_)) return Point(1, h_ / (b_ - a_)); return Point(1, -h_ / (d_ - c_)); } /* Get the PDF of the distribution */ Scalar Trapezoidal::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; // Will never go there if a_ == b_ if (x < b_) return h_ * (x - a_) / (b_ - a_); if (x < c_) return h_; // Will never go there if c_ == d_ if (x < d_) return h_ * (d_ - x) / (d_ - c_); return 0.0; } /* Get the CDF of the distribution */ Scalar Trapezoidal::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; // Will never go there if a_ == b_ if (x < b_) return 0.5 * h_ * ( (x - a_) * (x - a_) / (b_ - a_) ); if (x < c_) return 0.5 * h_ * (2.0 * x - a_ - b_); // Will never go there if c_ == d_ if (x < d_) return 1.0 - 0.5 * h_ * (x - d_) * (x - d_) / (d_ - c_); return 1.0; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Trapezoidal::computeCharacteristicFunction(const Scalar u) const { const Scalar au = a_ * u; const Scalar bu = b_ * u; const Scalar cu = c_ * u; const Scalar du = d_ * u; Scalar real = 0.0; Scalar imag = 0.0; Complex phi; if (std::abs(u) <= 1.0e-10) phi = Complex((-a_ + 3.0 * b_ - 3.0 * c_ + d_) * h_ / 2.0, 1.0); else { if (a_ < b_) { real += ((b_ - a_) * u * std::sin(bu) + std::cos(bu) - std::cos(au)) * h_ / ((b_ - a_) * u * u); imag += (std::sin(bu) + (a_ - b_) * u * std::cos(bu) - std::sin(au)) * h_ / ((b_ - a_) * u * u); } real += (std::sin(cu) - std::sin(bu)) * h_ / u; imag += -(std::cos(cu) - std::cos(bu)) * h_ / u; if(c_ < d_) { real += -(std::cos(du) + (d_ - c_) * u * std::sin(cu) - std::cos(cu)) * h_ / ((d_ - c_) * u * u); imag += -(std::sin(du) - std::sin(cu) - (d_ - c_) * u * std::cos(cu)) * h_ / ((d_ - c_) * u * u); } phi = Complex (real, imag); } return phi; } /* Get the PDFGradient of the distribution */ Point Trapezoidal::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point pdfGradient(4, 0.0); if ((a_ < x) && (x < b_)) { pdfGradient[0] = -(d_ * b_ - d_ * x - a_ * a_ + 2.0 * a_ * x - b_ * b_ + b_ * c_ - c_ * x) * h_ * h_ / (2.0 * (a_ - b_) * (a_ - b_)); pdfGradient[1] = (2.0 * b_ - d_ - c_) * (x - a_) * h_ * h_ / (2.0 * (a_ - b_) * (a_ - b_)); pdfGradient[2] = 0.5 * (x - a_) * h_ * h_ / (a_ - b_); pdfGradient[3] = 0.5 * (x - a_) * h_ * h_ / (a_ - b_); } else if ((b_ <= x) && (x <= c_)) { pdfGradient[0] = h_ * h_ / 2.0; pdfGradient[1] = h_ * h_ / 2.0; pdfGradient[2] = -h_ * h_ / 2.0; pdfGradient[3] = -h_ * h_ / 2.0; } else if ((c_ < x) && (x < d_)) { pdfGradient[0] = 0.5 * (d_ - x) * h_ * h_ / (d_ - c_); pdfGradient[1] = 0.5 * (d_ - x) * h_ * h_ / (d_ - c_); pdfGradient[2] = 0.5 * (2.0 * c_ - b_ - a_) * (d_ - x) * h_ * h_ / ((d_ - c_) * (d_ - c_)); pdfGradient[3] = 0.5 * (b_ * c_ - b_ * x - c_ * c_ + c_ * a_ - d_ * d_ + 2.0 * d_ * x - a_ * x) * h_ * h_ / ((c_ - d_) * (c_ - d_)); } return pdfGradient; } /* Get the logPDFGradient of the distribution */ Point Trapezoidal::computeLogPDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point logPdfGradient(4, 0.0); if ((a_ < x) && (x < b_)) { logPdfGradient[0] = h_ / 2.0 - 1.0 / (x - a_) + 1.0 / (b_ - a_); logPdfGradient[1] = h_ / 2.0 - 1.0 / (b_ - a_); logPdfGradient[2] = -h_ / 2.0; logPdfGradient[3] = -h_ / 2.0; } else if ((b_ <= x) && (x <= c_)) { logPdfGradient[0] = h_ / 2.0; logPdfGradient[1] = h_ / 2.0; logPdfGradient[2] = -h_ / 2.0; logPdfGradient[3] = -h_ / 2.0; } else if ((c_ < x) && (x < d_)) { logPdfGradient[0] = h_ / 2.0; logPdfGradient[1] = h_ / 2.0; logPdfGradient[2] = -h_ / 2.0 + 1.0 / (d_ - c_); logPdfGradient[3] = -h_ / 2.0 + 1.0 / (d_ - x) - 1.0 / (d_ - c_); } return logPdfGradient; } /* Get the CDFGradient of the distribution */ Point Trapezoidal::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point cdfGradient(4, 0.0); if ((a_ < x) && (x < b_)) { cdfGradient[0] = 0.25 * (x - a_) * (c_ * a_ - 2.0 * c_ * b_ + c_ * x - 2.0 * a_ * x + a_ * d_ + 2.0 * b_ * b_ - 2.0 * b_ * d_ + x * d_) * h_ * h_ / ((a_ - b_) * (a_ - b_)); cdfGradient[1] = -0.25 * (a_ - x) * (a_ - x) * (c_ + d_ - 2.0 * b_) * h_ * h_ / ((a_ - b_) * (a_ - b_)); cdfGradient[2] = 0.25 * (a_ - x) * (a_ - x) * h_ * h_ / (a_ - b_); cdfGradient[3] = 0.25 * (a_ - x) * (a_ - x) * h_ * h_ / (a_ - b_); } else if ((b_ <= x) && (x <= c_)) { cdfGradient[0] = 0.25 * (-c_ - d_ + 2.0 * x) * h_ * h_; cdfGradient[1] = 0.25 * (-c_ - d_ + 2.0 * x) * h_ * h_; cdfGradient[2] = 0.25 * (a_ + b_ - 2.0 * x) * h_ * h_; cdfGradient[3] = 0.25 * (a_ + b_ - 2.0 * x) * h_ * h_; } else if ((c_ < x) && (x < d_)) { cdfGradient[0] = -0.25 * (d_ - x) * (d_ - x) * h_ * h_ / (d_ - c_); cdfGradient[1] = -0.25 * (d_ - x) * (d_ - x) * h_ * h_ / (d_ - c_); cdfGradient[2] = 0.25 * (d_ - x) * (d_ - x) * (a_ + b_ - 2.0 * c_) * h_ * h_ / ((d_ - c_) * (d_ - c_)); cdfGradient[3] = -0.25 * (d_ - x) * (2.0 * a_ * c_ - a_ * d_ - a_ * x + 2.0 * b_ * c_ - b_ * x - 2.0 * c_ * c_ + 2.0 * d_ * x) * h_ * h_ / ((d_ - c_) * (d_ - c_)); } return cdfGradient; } /* Get the quantile of the distribution */ Scalar Trapezoidal::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar c1 = 0.5 * (b_ - a_) * h_; const Scalar c2 = c1 + (c_ - b_) * h_; const Scalar q = tail ? 1.0 - prob : prob; // q in (0, c1) if (q <= c1) return a_ + std::sqrt(2.0 * (b_ - a_) * q / h_); // q in (c1, c2) if (q <= c2) return b_ + (q - c1) / h_; // q in (c2, 1) return d_ - std::sqrt(2.0 * (d_ - c_) * (1.0 - q) / h_); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Trapezoidal::getRoughness() const { return -(a_ + 2.0 * b_ - 2.0 * c_ - d_) * h_ * h_ / 3.0; } /* Compute the mean of the distribution */ void Trapezoidal::computeMean() const { mean_ = Point(1, (-b_ * b_ - b_ * a_ - a_ * a_ + c_ * c_ + c_ * d_ + d_ * d_) * h_ / 6.0); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Trapezoidal::getStandardDeviation() const /*throw(NotDefinedException)*/ { return Point(1, getSigma()); } /* Get the skewness of the distribution */ Point Trapezoidal::getSkewness() const /*throw(NotDefinedException)*/ { const Scalar a2 = a_ * a_; const Scalar a3 = a2 * a_; const Scalar a4 = a3 * a_; const Scalar b2 = b_ * b_; const Scalar b3 = b2 * b_; const Scalar b4 = b3 * b_; const Scalar c2 = c_ * c_; const Scalar c3 = c2 * c_; const Scalar c4 = c3 * c_; const Scalar d2 = d_ * d_; const Scalar d3 = d2 * d_; const Scalar d4 = d3 * d_; Scalar thirdMoment = (d_ - c_ - b_ + a_) * (d_ - c_ + b_ - a_) * (2 * d4 + 10 * c_ * d3 - 9 * b_ * d3 - 9 * a_ * d3 + 21 * c2 * d2 - 36 * b_ * c_ * d2 - 36 * a_ * c_ * d2 + 14 * b2 * d2 + 35 * a_ * b_ * d2 + 14 * a2 * d2 + 10 * c3 * d_ - 36 * b_ * c2 * d_ - 36 * a_ * c2 * d_ + 35 * b2 * c_ * d_ + 74 * a_ * b_ * c_ * d_ + 35 * a2 * c_ * d_ - 9 * b3 * d_ - 36 * a_ * b2 * d_ - 36 * a2 * b_ * d_ - 9 * a3 * d_ + 2 * c4 - 9 * b_ * c3 - 9 * a_ * c3 + 14 * b2 * c2 + 35 * a_ * b_ * c2 + 14 * a2 * c2 - 9 * b3 * c_ - 36 * a_ * b2 * c_ - 36 * a2 * b_ * c_ - 9 * a3 * c_ + 2 * b4 + 10 * a_ * b3 + 21 * a2 * b2 + 10 * a3 * b_ + 2 * a4) * h_ * h_ * h_ / 2160.0; // retrieve sigma^3 Scalar standardDeviation3 = getSigma(); standardDeviation3 = standardDeviation3 * standardDeviation3 * standardDeviation3; return Point(1, thirdMoment / standardDeviation3); } /* Get the kurtosis of the distribution */ Point Trapezoidal::getKurtosis() const /*throw(NotDefinedException)*/ { const Scalar a2 = a_ * a_; const Scalar a3 = a2 * a_; const Scalar a4 = a3 * a_; const Scalar b2 = b_ * b_; const Scalar b3 = b2 * b_; const Scalar b4 = b3 * b_; const Scalar c2 = c_ * c_; const Scalar c3 = c2 * c_; const Scalar c4 = c3 * c_; const Scalar d2 = d_ * d_; const Scalar d3 = d2 * d_; const Scalar d4 = d3 * d_; const Scalar h2 = h_ * h_; Scalar fourthMoment = (d2 + c_ * d_ - 2 * b_ * d_ - a_ * d_ + c2 - b_ * c_ - 2 * a_ * c_ + b2 + a_ * b_ + a2) * (d2 + c_ * d_ - b_ * d_ - 2 * a_ * d_ + c2 - 2 * b_ * c_ - a_ * c_ + b2 + a_ * b_ + a2) * (d4 + 2 * c_ * d3 - 3 * b_ * d3 - 3 * a_ * d3 - 3 * c2 * d2 + 4 * b2 * d2 + a_ * b_ * d2 + 4 * a2 * d2 + 2 * c3 * d_ + b2 * c_ * d_ - 2 * a_ * b_ * c_ * d_ + a2 * c_ * d_ - 3 * b3 * d_ - 3 * a3 * d_ + c4 - 3 * b_ * c3 - 3 * a_ * c3 + 4 * b2 * c2 + a_ * b_ * c2 + 4 * a2 * c2 - 3 * b3 * c_ - 3 * a3 * c_ + b4 + 2 * a_ * b3 - 3 * a2 * b2 + 2 * a3 * b_ + a4) * h2 * h2 / 2160.0; // retrieve sigma^4 Scalar standardDeviation4 = getSigma(); standardDeviation4 *= standardDeviation4; standardDeviation4 *= standardDeviation4; return Point(1, fourthMoment / standardDeviation4); } /* Get the moments of the standardized distribution */ Point Trapezoidal::getStandardMoment(const UnsignedInteger n) const { if (n == 0) return Point(1, 1.0); const Scalar beta = 1.0 - 2.0 * (d_ - b_) / (d_ - a_); const Scalar gamma = 1.0 - 2.0 * (d_ - c_) / (d_ - a_); const Scalar eta = 2.0 / (2.0 - beta + gamma); const Scalar betaPow = std::pow(beta, n + 1.0); const Scalar gammaPow = std::pow(gamma, n + 1.0); Scalar value = eta * (gammaPow - betaPow) / (n + 1); if (beta > -1.0) { if (n % 2 == 0) value += (eta / (beta + 1.0)) * ((beta * betaPow - 1.0) / (n + 2) + (betaPow + 1.0) / (n + 1)); else value += (eta / (beta + 1.0)) * ((beta * betaPow + 1.0) / (n + 2) + (betaPow - 1.0) / (n + 1)); } if (gamma < 1.0) value -= (eta / (1.0 - gamma)) * ((1.0 - gamma * gammaPow) / (n + 2) - (1.0 - gammaPow) / (n + 1)); return Point(1, value); } /* Get the standard representative in the parametric family, associated with the standard moments */ Trapezoidal::Implementation Trapezoidal::getStandardRepresentative() const { return Trapezoidal(-1.0, 1.0 - 2.0 * (d_ - b_) / (d_ - a_), 1.0 - 2.0 * (d_ - c_) / (d_ - a_), 1.0).clone(); } /* Compute the covariance of the distribution */ void Trapezoidal::computeCovariance() const { covariance_ = CovarianceMatrix(1); Scalar standardDeviation = getSigma(); covariance_(0, 0) = standardDeviation * standardDeviation; isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point Trapezoidal::getParameter() const { Point point(4); point[0] = a_; point[1] = b_; point[2] = c_; point[3] = d_; return point; } void Trapezoidal::setParameter(const Point & parameter) { if (parameter.getSize() != 4) throw InvalidArgumentException(HERE) << "Error: expected 4 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Trapezoidal(parameter[0], parameter[1], parameter[2], parameter[3]); setWeight(w); } /* Parameters description accessor */ Description Trapezoidal::getParameterDescription() const { Description description(4); description[0] = "a"; description[1] = "b"; description[2] = "c"; description[3] = "d"; return description; } /* Check if the distribution is elliptical */ Bool Trapezoidal::isElliptical() const { return std::abs(b_ - a_ - (d_ - c_)) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); } /* Sigma accessor */ Scalar Trapezoidal::getSigma() const { const Scalar a2 = a_ * a_; const Scalar a3 = a2 * a_; const Scalar a4 = a3 * a_; const Scalar b2 = b_ * b_; const Scalar b3 = b2 * b_; const Scalar b4 = b3 * b_; const Scalar c2 = c_ * c_; const Scalar c3 = c2 * c_; const Scalar c4 = c3 * c_; const Scalar d2 = d_ * d_; const Scalar d3 = d2 * d_; const Scalar d4 = d3 * d_; Scalar SecondMoment = (d4 + 2 * c_ * d3 - 3 * b_ * d3 - 3 * a_ * d3 - 3 * b_ * c_ * d2 - 3 * a_ * c_ * d2 + 4 * b2 * d2 + 4 * a_ * b_ * d2 + 4 * a2 * d2 + 2 * c3 * d_ - 3 * b_ * c2 * d_ - 3 * a_ * c2 * d_ + 4 * b2 * c_ * d_ + 4 * a_ * b_ * c_ * d_ + 4 * a2 * c_ * d_ - 3 * b3 * d_ - 3 * a_ * b2 * d_ - 3 * a2 * b_ * d_ - 3 * a3 * d_ + c4 - 3 * b_ * c3 - 3 * a_ * c3 + 4 * b2 * c2 + 4 * a_ * b_ * c2 + 4 * a2 * c2 - 3 * b3 * c_ - 3 * a_ * b2 * c_ - 3 * a2 * b_ * c_ - 3 * a3 * c_ + b4 + 2 * a_ * b3 + 2 * a3 * b_ + a4) * h_ * h_ / 72.0; return std::sqrt(SecondMoment); } /* A accessor */ void Trapezoidal::setA(const Scalar a) { if (a != a_) { a_ = a; update(); } } Scalar Trapezoidal::getA() const { return a_; } /* B accessor */ void Trapezoidal::setB(const Scalar b) { if (b != b_) { b_ = b; update(); } } Scalar Trapezoidal::getB() const { return b_; } /* C accessor */ void Trapezoidal::setC(const Scalar c) { if (c != c_) { c_ = c; update(); } } Scalar Trapezoidal::getC() const { return c_; } /* D accessor */ void Trapezoidal::setD(const Scalar d) { if (d != d_) { d_ = d; update(); } } Scalar Trapezoidal::getD() const { return d_; } /* Update attributes */ void Trapezoidal::update() { setDimension(1); if (d_ <= a_) throw InvalidArgumentException(HERE) << " in Trapezoidal : distribution parameter d must be greater than argument a, here a=" << a_ << " d=" << d_; if (b_ < a_) throw InvalidArgumentException(HERE) << " in Trapezoidal : distribution parameter b must be greater or equal to argument a, here a=" << a_ << " b=" << b_; if (c_ < b_) throw InvalidArgumentException(HERE) << " in Trapezoidal : distribution parameter c must be greater than argument b, here b=" << b_ << " c=" << c_; if (d_ < c_) throw InvalidArgumentException(HERE) << " in Trapezoidal : distribution parameter d must be greater or equal to argument c, here c=" << c_ << " d=" << d_; h_ = 2. / (c_ - a_ + d_ - b_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } /* Get the PDF singularities inside of the range - 1D only */ Point Trapezoidal::getSingularities() const { Point singularities(0); if (a_ < b_ && b_ < d_) singularities.add(b_); if (b_ < c_ && c_ < d_) singularities.add(c_); return singularities; } /* Method save() stores the object through the StorageManager */ void Trapezoidal::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute("a_", a_); adv.saveAttribute("b_", b_); adv.saveAttribute("c_", c_); adv.saveAttribute("d_", d_); } /* Method load() reloads the object from the StorageManager */ void Trapezoidal::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute("a_", a_); adv.loadAttribute("b_", b_); adv.loadAttribute("c_", c_); adv.loadAttribute("d_", d_); update(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TrapezoidalFactory.cxx000066400000000000000000000134011307543307100262750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Trapezoidal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TrapezoidalFactory.hxx" #include #include "openturns/Distribution.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/MaximumLikelihoodFactory.hxx" #include "openturns/Cobyla.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TrapezoidalFactory); static const Factory Factory_TrapezoidalFactory; /* Default constructor */ TrapezoidalFactory::TrapezoidalFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ TrapezoidalFactory * TrapezoidalFactory::clone() const { return new TrapezoidalFactory(*this); } /* Compute the log-likelihood constraint */ Point TrapezoidalFactory::computeLogLikelihoodInequalityConstraint(const Point & x) const { Point result(3, 0.0); result[0] = x[1] - x[0] ; // x[0] <= x[1] result[1] = x[2] - x[1] - SpecFunc::ScalarEpsilon; // x[1] < x[2] result[2] = x[3] - x[2] ; // x[2] <= x[3] return result; } /* Compute the log-likelihood constraint accessor */ Function TrapezoidalFactory::getLogLikelihoodInequalityConstraint() const { return bindMethod (*this, &TrapezoidalFactory::computeLogLikelihoodInequalityConstraint, 4, 3); } /* Optimization solver accessor */ OptimizationAlgorithm TrapezoidalFactory::getOptimizationAlgorithm() const { return solver_; } void TrapezoidalFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm TrapezoidalFactory::getOptimizationSolver() const { Log::Warn(OSS() << "TrapezoidalFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void TrapezoidalFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "TrapezoidalFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } /* Here is the interface that all derived class must implement */ TrapezoidalFactory::Implementation TrapezoidalFactory::build(const Sample & sample) const { return buildAsTrapezoidal(sample).clone(); } TrapezoidalFactory::Implementation TrapezoidalFactory::build(const Point & parameters) const { return buildAsTrapezoidal(parameters).clone(); } TrapezoidalFactory::Implementation TrapezoidalFactory::build() const { return buildAsTrapezoidal().clone(); } Trapezoidal TrapezoidalFactory::buildAsTrapezoidal(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Trapezoidal distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const UnsignedInteger dimension = build()->getParameterDimension(); // starting point Point startingPoint(dimension); const Scalar min = sample.getMin()[0]; const Scalar max = sample.getMax()[0]; if (!SpecFunc::IsNormal(min) || !SpecFunc::IsNormal(max)) throw InvalidArgumentException(HERE) << "Error: cannot build a Trapezoidal distribution if data contains NaN or Inf"; // if (max <= min - std::sqrt(SpecFunc::ScalarEpsilon)) if (min == max) { const Scalar delta = std::max(std::abs(min), 10.0) * SpecFunc::ScalarEpsilon; Trapezoidal result(min - delta, min, max, max + delta); result.setDescription(sample.getDescription()); return result; } startingPoint[0] = min - std::abs(min) / (2.0 + size);// a startingPoint[1] = sample.computeQuantilePerComponent(0.25)[0];// b startingPoint[2] = sample.computeQuantilePerComponent(0.75)[0];// c startingPoint[3] = max + std::abs(max) / (2.0 + size);// d MaximumLikelihoodFactory factory(buildAsTrapezoidal()); // override starting point Cobyla solver; solver.setRhoBeg(ResourceMap::GetAsScalar("TrapezoidalFactory-RhoBeg")); solver.setMaximumAbsoluteError(ResourceMap::GetAsScalar("TrapezoidalFactory-RhoEnd")); solver.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("TrapezoidalFactory-MaximumIteration")); solver.setStartingPoint(startingPoint); factory.setOptimizationAlgorithm(solver); // override constraint factory.setOptimizationInequalityConstraint(getLogLikelihoodInequalityConstraint()); Trapezoidal result(buildAsTrapezoidal(factory.buildParameter(sample))); result.setDescription(sample.getDescription()); return result; } Trapezoidal TrapezoidalFactory::buildAsTrapezoidal(const Point & parameters) const { try { Trapezoidal distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Trapezoidal distribution from the given parameters: " << parameters; } } Trapezoidal TrapezoidalFactory::buildAsTrapezoidal() const { return Trapezoidal(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Triangular.cxx000066400000000000000000000303011307543307100245750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Triangular distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Triangular.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Triangular); static const Factory Factory_Triangular; /* Default constructor */ Triangular::Triangular() : ContinuousDistribution() , a_(-1.0) , m_(0.0) , b_(1.0) { setName( "Triangular" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Triangular::Triangular(const Scalar a, const Scalar m, const Scalar b) : ContinuousDistribution() , a_(0.0) , m_(0.0) , b_(0.0) { setName( "Triangular" ); // This call set also the range setAMB(a, m, b); setDimension( 1 ); } /* Comparison operator */ Bool Triangular::operator ==(const Triangular & other) const { if (this == &other) return true; return (a_ == other.a_) && (m_ == other.m_) && (b_ == other.b_); } Bool Triangular::equals(const DistributionImplementation & other) const { const Triangular* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Triangular::__repr__() const { OSS oss; oss << "class=" << Triangular::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " a=" << a_ << " m=" << m_ << " b=" << b_; return oss; } String Triangular::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(a = " << a_ << ", m = " << m_ << ", b = " << b_ << ")"; return oss; } /* Virtual constructor */ Triangular * Triangular::clone() const { return new Triangular(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Triangular::computeRange() { setRange(Interval(a_, b_)); } /* Get one realization of the distribution */ Point Triangular::getRealization() const { const Scalar ma = m_ - a_; const Scalar ba = b_ - a_; const Scalar prob = RandomGenerator::Generate(); if (ba * prob < ma) return Point(1, a_ + std::sqrt(prob * ba * ma)); return Point(1, b_ - std::sqrt((1.0 - prob) * ba * (b_ - m_))); } /* Get the DDF of the distribution */ Point Triangular::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return Point(1, 0.0); const Scalar ddf = 2.0 / (b_ - a_); if (x < m_) return Point(1, ddf / (m_ - a_)); return Point(1, ddf / (m_ - b_)); } /* Get the PDF of the distribution */ Scalar Triangular::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return 0.0; const Scalar pdf = 2.0 / (b_ - a_); if (x < m_) return pdf * (x - a_) / (m_ - a_); return pdf * (x - b_) / (m_ - b_); } /* Get the CDF of the distribution */ Scalar Triangular::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; const Scalar cdf = 1.0 / (b_ - a_); if (x < m_) return (x - a_) * (x - a_) * cdf / (m_ - a_); return 1.0 - (x - b_) * (x - b_) * cdf / (b_ - m_); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Triangular::computeCharacteristicFunction(const Scalar x) const { if (std::abs(x) < 1.0e-8) return Complex(1.0, (a_ + b_ + m_) * x / 3.0); const Scalar ba = b_ - a_; const Scalar bm = b_ - m_; const Scalar ma = m_ - a_; return 2.0 / (x * x) * (-std::exp(Complex(0.0, a_ * x)) / (ba * ma) + std::exp(Complex(0.0, m_ * x)) / (bm * ma) - std::exp(Complex(0.0, b_ * x)) / (ba * bm)); } Complex Triangular::computeLogCharacteristicFunction(const Scalar x) const { if (std::abs(x) < pdfEpsilon_) return 0.0; const Scalar ba = b_ - a_; const Scalar bm = b_ - m_; const Scalar ma = m_ - a_; return M_LN2 - 2.0 * std::log(std::abs(x)) + std::log(-std::exp(Complex(0.0, a_ * x)) / (ba * ma) + std::exp(Complex(0.0, m_ * x)) / (bm * ma) - std::exp(Complex(0.0, b_ * x)) / (ba * bm)); } /* Get the PDFGradient of the distribution */ Point Triangular::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return Point(1, 0.0); Point pdfGradient(3); const Scalar ba = b_ - a_; const Scalar ma = m_ - a_; const Scalar bm = b_ - m_; const Scalar bx = b_ - x; const Scalar xa = x - a_; const Scalar fact = 2.0 / ba; if (x < m_) { pdfGradient[0] = fact * (-a_ * xa + x * ba - m_ * bx) / (ba * ma * ma); pdfGradient[1] = -fact * xa / (ma * ma); pdfGradient[2] = -fact * xa / (ba * ma); return pdfGradient; } pdfGradient[0] = fact * bx / (bm * ba); pdfGradient[1] = fact * bx / (bm * bm); pdfGradient[2] = fact * (-b_ * bx - m_ * xa + x * ba) / (ba * bm * bm); return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Triangular::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x < a_) || (x > b_)) return Point(1, 0.0); Point cdfGradient(3); const Scalar ba = b_ - a_; const Scalar ma = m_ - a_; const Scalar bm = b_ - m_; const Scalar bx = b_ - x; const Scalar xa = x - a_; const Scalar xm = x - m_; if (x < m_) { const Scalar fact = xa / (ba * ma); cdfGradient[0] = fact * (xm * ba - bx * ma) / (ma * ba); cdfGradient[1] = -fact * xa / ma; cdfGradient[2] = -xa / ba; return cdfGradient; } const Scalar fact = bx / (ba * bm); cdfGradient[0] = -fact * bx / ba; cdfGradient[1] = -fact * bx / bm; cdfGradient[2] = -fact * (ba * xm + xa * bm) / (bm * ba); return cdfGradient; } /* Get the quantile of the distribution */ Scalar Triangular::computeScalarQuantile(const Scalar prob, const Bool tail) const { const Scalar ma = m_ - a_; const Scalar ba = b_ - a_; const Scalar bm = b_ - m_; if (tail) { if (bm < prob * ba) return a_ + std::sqrt((1.0 - prob) * ba * ma); return b_ - std::sqrt(prob * ba * (b_ - m_)); } if (ba * prob < ma) return a_ + std::sqrt(prob * ba * ma); return b_ - std::sqrt((1.0 - prob) * ba * bm); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Triangular::getRoughness() const { // 1.333333333333333333333333 = 4/3 return 1.333333333333333333333333 / (b_ - a_); } /* Compute the mean of the distribution */ void Triangular::computeMean() const { mean_ = Point(1, (a_ + m_ + b_) / 3.0); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Triangular::getStandardDeviation() const { const Scalar ma = m_ - a_; const Scalar bm = b_ - m_; return Point(1, std::sqrt((bm * bm + bm * ma + ma * ma) / 18.0)); } /* Get the skewness of the distribution */ Point Triangular::getSkewness() const { const Scalar ma = m_ - a_; const Scalar bm = b_ - m_; const Scalar ba = b_ - a_; const Scalar den = std::pow(bm * bm + bm * ma + ma * ma, 1.5); Scalar num = (ba + ma) * (bm - ma) * (bm + ba); // 0.2828427124746190097603378 = sqrt(2) / 5 return Point(1, 0.2828427124746190097603378 * num / den); } /* Get the kurtosis of the distribution */ Point Triangular::getKurtosis() const { // 2.4 = 12/5 return Point(1, 2.4); } /* Compute the covariance of the distribution */ void Triangular::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar ma = m_ - a_; const Scalar bm = b_ - m_; covariance_(0, 0) = (bm * bm + bm * ma + ma * ma) / 18.0; isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Triangular::getStandardMoment(const UnsignedInteger n) const { const Scalar mu = ((m_ - a_) + (m_ - b_)) / (b_ - a_); // Even order if (n % 2 == 0) { // Vertical part? if (1.0 - std::abs(mu) < ResourceMap::GetAsScalar("Distribution-DefaultPDFEpsilon")) return Point(1, 1.0 / (n + 1.0)); // Usual case return Point(1, 2.0 * (1.0 - std::pow(mu, n + 2.0)) / ((n + 1.0) * (n + 2.0) * (1.0 - mu) * (1.0 + mu))); } // Odd order // Vertical part? if (1.0 - std::abs(mu) < ResourceMap::GetAsScalar("Distribution-DefaultPDFEpsilon")) return Point(1, 1.0 / (n + 2.0)); return Point(1, 2.0 * mu * (1.0 - std::pow(mu, n + 1.0)) / ((n + 1.0) * (n + 2.0) * (1.0 - mu) * (1.0 + mu))); } /* Get the standard representative in the parametric family, associated with the standard moments */ Triangular::Implementation Triangular::getStandardRepresentative() const { return Triangular(-1.0, ((m_ - a_) + (m_ - b_)) / (b_ - a_), 1.0).clone(); } /* Parameters value accessor */ Point Triangular::getParameter() const { Point point(3); point[0] = a_; point[1] = m_; point[2] = b_; return point; } void Triangular::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Triangular(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description Triangular::getParameterDescription() const { Description description(3); description[0] = "a"; description[1] = "m"; description[2] = "b"; return description; } /* Check if the distribution is elliptical */ Bool Triangular::isElliptical() const { return std::abs(m_ - 0.5 * (a_ + b_)) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); } /* Interface specific to Triangular */ /* A accessor */ void Triangular::setAMB(const Scalar a, const Scalar m, const Scalar b) { if (a >= b) throw InvalidArgumentException(HERE) << "A MUST be less than b"; if ((m < a) || (m > b)) throw InvalidArgumentException(HERE) << "M MUST be enclosed between a and b"; if ((a != a_) || (m != m_) || (b != b_)) { a_ = a; m_ = m; b_ = b; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Triangular::getA() const { return a_; } /* M accessor */ Scalar Triangular::getM() const { return m_; } /* B accessor */ Scalar Triangular::getB() const { return b_; } /* Get the PDF singularities inside of the range - 1D only */ Point Triangular::getSingularities() const { if (m_ == a_) return Point(0); if (m_ == b_) return Point(0); return Point(1, m_); } /* Method save() stores the object through the StorageManager */ void Triangular::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "m_", m_ ); adv.saveAttribute( "b_", b_ ); } /* Method load() reloads the object from the StorageManager */ void Triangular::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "m_", m_ ); adv.loadAttribute( "b_", b_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TriangularFactory.cxx000066400000000000000000000066401307543307100261360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Triangular distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TriangularFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TriangularFactory); static const Factory Factory_TriangularFactory; /* Default constructor */ TriangularFactory::TriangularFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ TriangularFactory * TriangularFactory::clone() const { return new TriangularFactory(*this); } /* Here is the interface that all derived class must implement */ TriangularFactory::Implementation TriangularFactory::build(const Sample & sample) const { return buildAsTriangular(sample).clone(); } TriangularFactory::Implementation TriangularFactory::build() const { return buildAsTriangular().clone(); } TriangularFactory::Implementation TriangularFactory::build(const Point & parameters) const { return buildAsTriangular(parameters).clone(); } Triangular TriangularFactory::buildAsTriangular(const Sample & sample) const { const Scalar size = sample.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Triangular distribution from a sample of size < 2"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Triangular distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar a = xMin - std::abs(xMin) / (size + 2); const Scalar xMax = sample.getMax()[0]; const Scalar b = xMax + std::abs(xMax) / (size + 2); if (!SpecFunc::IsNormal(a) || !SpecFunc::IsNormal(b)) throw InvalidArgumentException(HERE) << "Error: cannot build a Triangular distribution if data contains NaN or Inf"; if (xMin == xMax) { const Scalar delta = std::max(std::abs(xMin), 10.0) * SpecFunc::ScalarEpsilon; Triangular result(xMin - delta, xMin, xMax + delta); result.setDescription(sample.getDescription()); return result; } const Scalar m = 3.0 * sample.computeMean()[0] - a - b; Triangular result(a, m, b); result.setDescription(sample.getDescription()); return result; } Triangular TriangularFactory::buildAsTriangular(const Point & parameters) const { try { Triangular distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Triangular distribution from the given parameters"; } } Triangular TriangularFactory::buildAsTriangular() const { return Triangular(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TruncatedDistribution.cxx000066400000000000000000000615421307543307100270310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TruncatedDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/TruncatedDistribution.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Uniform.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TruncatedDistribution); static const Factory Factory_TruncatedDistribution; /* Default constructor */ TruncatedDistribution::TruncatedDistribution() : DistributionImplementation() , distribution_(Uniform(0.0, 1.0)) , lowerBound_(0.0) , finiteLowerBound_(true) , upperBound_(1.0) , finiteUpperBound_(true) , thresholdRealization_(ResourceMap::GetAsScalar("TruncatedDistribution-DefaultThresholdRealization")) , pdfLowerBound_(1.0) , pdfUpperBound_(1.0) , cdfLowerBound_(0.0) , cdfUpperBound_(1.0) , normalizationFactor_(1.0) { setName("TruncatedDistribution"); setDimension(1); // Adjust the truncation interval and the distribution range computeRange(); } /* Parameters constructor to use when the two bounds are finite */ TruncatedDistribution::TruncatedDistribution(const Distribution & distribution, const Scalar lowerBound, const Scalar upperBound, const Scalar thresholdRealization) : DistributionImplementation() { setName("TruncatedDistribution"); setDistribution(distribution); setThresholdRealization(thresholdRealization); setDimension(1); if (upperBound <= lowerBound) throw InvalidArgumentException(HERE) << "Error: the upper bound must be greater than the lower bound, here lowerBound=" << lowerBound << " and upperBound=" << upperBound; cdfLowerBound_ = distribution.computeCDF(Point(1, lowerBound)); cdfUpperBound_ = distribution.computeCDF(Point(1, upperBound)); if (cdfLowerBound_ == cdfUpperBound_) throw InvalidArgumentException(HERE) << "Error: the interval [lowerBound, upperBound] must contain a non-empty part of the support of the distribution, here CDf(lowerBound)=" << cdfLowerBound_ << " and CDF(upperBound)=" << cdfUpperBound_; normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); pdfLowerBound_ = distribution.computePDF(Point(1, lowerBound)); pdfUpperBound_ = distribution.computePDF(Point(1, upperBound)); lowerBound_ = lowerBound; upperBound_ = upperBound; finiteLowerBound_ = true; finiteUpperBound_ = true; computeRange(); } /* Parameters constructor to use when one of the bounds is not finite */ TruncatedDistribution::TruncatedDistribution(const Distribution & distribution, const Scalar bound, const BoundSide side, const Scalar thresholdRealization) : DistributionImplementation() { setName("TruncatedDistribution"); if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can truncate only distribution with dimension=1, here dimension=" << distribution.getDimension(); distribution_ = distribution; setThresholdRealization(thresholdRealization); setDimension(1); setDescription(distribution.getDescription()); switch (side) { case LOWER: lowerBound_ = bound; finiteLowerBound_ = true; cdfLowerBound_ = distribution.computeCDF(Point(1, bound)); if (cdfLowerBound_ == 1.0) throw InvalidArgumentException(HERE) << "Error: the interval [bound, +inf[ must contain a non-empty part of the support of the distribution, here CDF(bound)=" << cdfLowerBound_; pdfLowerBound_ = distribution.computePDF(Point(1, bound)); upperBound_ = distribution.getRange().getUpperBound()[0]; cdfUpperBound_ = 1.0; pdfUpperBound_ = 0.0; finiteUpperBound_ = distribution.getRange().getFiniteUpperBound()[0] == 1; break; case UPPER: upperBound_ = bound; finiteUpperBound_ = true; cdfUpperBound_ = distribution.computeCDF(Point(1, bound)); if (cdfUpperBound_ == 0.0) throw InvalidArgumentException(HERE) << "Error: the interval ]-inf, bound] must contain a non-empty part of the support of the distribution, here CDF(bound)=" << cdfUpperBound_; pdfUpperBound_ = distribution.computePDF(Point(1, bound)); lowerBound_ = distribution.getRange().getLowerBound()[0]; cdfLowerBound_ = 0.0; pdfLowerBound_ = 0.0; finiteLowerBound_ = distribution.getRange().getFiniteLowerBound()[0] == 1; break; default: throw InvalidArgumentException(HERE) << "Error: invalid side argument for bounds, must be LOWER or UPPER, here side=" << side; } /* end switch */ normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); // Adjust the truncation interval and the distribution range computeRange(); lowerBound_ = getRange().getLowerBound()[0]; upperBound_ = getRange().getUpperBound()[0]; finiteLowerBound_ = getRange().getFiniteLowerBound()[0] == 1; finiteUpperBound_ = getRange().getFiniteUpperBound()[0] == 1; } /* Parameters constructor to use when one of the bounds is not finite */ TruncatedDistribution::TruncatedDistribution(const Distribution & distribution, const Interval & truncationInterval, const Scalar thresholdRealization) : DistributionImplementation() { setName("TruncatedDistribution"); if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can truncate only distribution with dimension=1, here dimension=" << distribution.getDimension(); distribution_ = distribution; setThresholdRealization(thresholdRealization); setDimension(1); setDescription(distribution.getDescription()); lowerBound_ = truncationInterval.getLowerBound()[0]; upperBound_ = truncationInterval.getUpperBound()[0]; finiteLowerBound_ = truncationInterval.getFiniteLowerBound()[0] == 1; finiteUpperBound_ = truncationInterval.getFiniteUpperBound()[0] == 1; cdfLowerBound_ = distribution.computeCDF(Point(1, lowerBound_)); cdfUpperBound_ = distribution.computeCDF(Point(1, upperBound_)); if (cdfLowerBound_ >= cdfUpperBound_) throw InvalidArgumentException(HERE) << "Error: the truncation interval does not contain a non-empty part of the support of the distribution"; pdfLowerBound_ = distribution.computePDF(Point(1, lowerBound_)); pdfUpperBound_ = distribution.computePDF(Point(1, upperBound_)); normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); // Adjust the truncation interval and the distribution range computeRange(); lowerBound_ = getRange().getLowerBound()[0]; upperBound_ = getRange().getUpperBound()[0]; finiteLowerBound_ = getRange().getFiniteLowerBound()[0] == 1; finiteUpperBound_ = getRange().getFiniteUpperBound()[0] == 1; } /* Comparison operator */ Bool TruncatedDistribution::operator ==(const TruncatedDistribution & other) const { if (this == &other) return true; return (lowerBound_ == other.getLowerBound()) && (upperBound_ == other.getUpperBound()) && (distribution_ == other.getDistribution()); } Bool TruncatedDistribution::equals(const DistributionImplementation & other) const { const TruncatedDistribution* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String TruncatedDistribution::__repr__() const { OSS oss; oss << "class=" << TruncatedDistribution::GetClassName() << " name=" << getName() << " distribution=" << distribution_ << " lowerBound=" << lowerBound_ << " finiteLowerBound=" << finiteLowerBound_ << " upperBound=" << upperBound_ << " finiteUpperBound=" << finiteUpperBound_ << " thresholdRealization=" << thresholdRealization_; return oss; } String TruncatedDistribution::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(" << distribution_.__str__() << ", a = "; if (finiteLowerBound_) oss << lowerBound_; else oss << "-inf"; oss << ", b = "; if (finiteUpperBound_) oss << upperBound_; else oss << "+inf"; oss << ")"; return oss; } /* Virtual constructor */ TruncatedDistribution * TruncatedDistribution::clone() const { return new TruncatedDistribution(*this); } /* Compute the numerical range of the distribution given the parameters values */ void TruncatedDistribution::computeRange() { const Point lowerBound(1, lowerBound_); const Point upperBound(1, upperBound_); const Interval::BoolCollection finiteLowerBound(1, finiteLowerBound_); const Interval::BoolCollection finiteUpperBound(1, finiteUpperBound_); setRange(distribution_.getRange().intersect(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound))); } /* Get one realization of the distribution */ Point TruncatedDistribution::getRealization() const { // Do we use CDF inversion? if (isContinuous() && (cdfUpperBound_ - cdfLowerBound_) < thresholdRealization_) return computeQuantile(RandomGenerator::Generate()); // Here we use simple rejection of the underlying distribution against the bounds for (;;) { Point realization(distribution_.getRealization()); if ((!finiteLowerBound_ || realization[0] >= lowerBound_) && (!finiteUpperBound_ || realization[0] <= upperBound_)) return realization; } } /* Get the DDF of the distribution: DDF_trunc = 1[a, b] * DDF / (CDF(b) - CDF(a)) */ Point TruncatedDistribution::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= lowerBound_) || (x > upperBound_)) return Point(1, 0.0); return normalizationFactor_ * distribution_.computeDDF(point); } /* Get the PDF of the distribution: PDF_trunc = 1[a, b] * PDF / (CDF(b) - CDF(a)) */ Scalar TruncatedDistribution::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x < lowerBound_ - quantileEpsilon_) || (x > upperBound_ + quantileEpsilon_)) return 0.0; return normalizationFactor_ * distribution_.computePDF(point); } /* Get the CDF of the distribution: CDF_trunc = 1[a, b] * (CDF - CDF(a)) / (CDF(b) - CDF(a)) + 1]b, inf] */ Scalar TruncatedDistribution::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= lowerBound_) return 0.0; if (x >= upperBound_) return 1.0; // If tail=true, don't call distribution_.computeCDF with tail=true in the next line! return normalizationFactor_ * (distribution_.computeCDF(point) - cdfLowerBound_); } Scalar TruncatedDistribution::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= lowerBound_) return 1.0; if (x > upperBound_) return 0.0; // If tail=true, don't call distribution_.computeCDF with tail=true in the next line! return normalizationFactor_ * (cdfUpperBound_ - distribution_.computeCDF(point)); } /* Get the PDFGradient of the distribution */ Point TruncatedDistribution::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= lowerBound_) || (x > upperBound_)) return Point(distribution_.getParametersCollection()[0].getDimension() + finiteLowerBound_ + finiteUpperBound_); const Point pdfGradientX(distribution_.computePDFGradient(point)); const Point cdfGradientLowerBound(finiteLowerBound_ ? distribution_.computeCDFGradient(Point(1, lowerBound_)) : Point(distribution_.getParametersCollection()[0].getDimension())); const Point cdfGradientUpperBound(finiteUpperBound_ ? distribution_.computeCDFGradient(Point(1, upperBound_)) : Point(distribution_.getParametersCollection()[0].getDimension())); const Scalar pdfPoint = distribution_.computePDF(point); Point pdfGradient(normalizationFactor_ * pdfGradientX - pdfPoint * normalizationFactor_ * normalizationFactor_ * (cdfGradientUpperBound - cdfGradientLowerBound)); // If the lower bound is finite, add a component to the gradient if (finiteLowerBound_) { pdfGradient.add(pdfLowerBound_ * pdfPoint * normalizationFactor_ * normalizationFactor_); } // If the upper bound is finite, add a component to the gradient if (finiteUpperBound_) { pdfGradient.add(-pdfUpperBound_ * pdfPoint * normalizationFactor_ * normalizationFactor_); } return pdfGradient; } /* Get the CDFGradient of the distribution */ Point TruncatedDistribution::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= lowerBound_) || (x > upperBound_)) return Point(distribution_.getParametersCollection()[0].getDimension() + finiteLowerBound_ + finiteUpperBound_); const Point cdfGradientX(distribution_.computeCDFGradient(point)); const Point cdfGradientLowerBound(finiteLowerBound_ ? distribution_.computeCDFGradient(Point(1, lowerBound_)) : Point(distribution_.getParametersCollection()[0].getDimension())); const Point cdfGradientUpperBound(finiteUpperBound_ ? distribution_.computeCDFGradient(Point(1, upperBound_)) : Point(distribution_.getParametersCollection()[0].getDimension())); const Scalar cdfPoint = distribution_.computeCDF(point); Point cdfGradient(normalizationFactor_ * (cdfGradientX - cdfGradientLowerBound) - (cdfPoint - cdfLowerBound_) * normalizationFactor_ * normalizationFactor_ * (cdfGradientUpperBound - cdfGradientLowerBound)); // If the lower bound is finite, add a component to the gradient if (finiteLowerBound_) { cdfGradient.add(pdfLowerBound_ * normalizationFactor_ * ((cdfPoint - cdfLowerBound_) * normalizationFactor_ - 1.0)); } // If the upper bound is finite, add a component to the gradient if (finiteUpperBound_) { cdfGradient.add(-pdfUpperBound_ * normalizationFactor_ * (cdfPoint - cdfLowerBound_) * normalizationFactor_); } return cdfGradient; } /* Get the quantile of the distribution */ Scalar TruncatedDistribution::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return distribution_.computeQuantile(cdfUpperBound_ - prob * (cdfUpperBound_ - cdfLowerBound_))[0]; return distribution_.computeQuantile(cdfLowerBound_ + prob * (cdfUpperBound_ - cdfLowerBound_))[0]; } /* Parameters value accessor */ Point TruncatedDistribution::getParameter() const { Point point(distribution_.getParameter()); point.add(finiteLowerBound_ ? 1.0 : 0.0); point.add(lowerBound_); point.add(finiteUpperBound_ ? 1.0 : 0.0); point.add(upperBound_); return point; } void TruncatedDistribution::setParameter(const Point & parameter) { const UnsignedInteger parametersSize = distribution_.getParameterDimension(); if (parameter.getSize() != parametersSize + 4) throw InvalidArgumentException(HERE) << "Error: expected " << parametersSize + 4 << " values, got " << parameter.getSize(); Point newParameters(parametersSize); std::copy(parameter.begin(), parameter.begin() + parametersSize, newParameters.begin()); Distribution newDistribution(distribution_); newDistribution.setParameter(newParameters); const Bool finiteLowerBound = parameter[parametersSize] == 1.0; const Scalar lowerBound = parameter[parametersSize + 1]; const Bool finiteUpperBound = parameter[parametersSize + 2] == 1.0; const Scalar upperBound = parameter[parametersSize + 3]; const Scalar w = getWeight(); if (finiteLowerBound && finiteUpperBound) *this = TruncatedDistribution(newDistribution, lowerBound, upperBound); else if (finiteLowerBound) *this = TruncatedDistribution(newDistribution, lowerBound, LOWER); else if (finiteUpperBound) *this = TruncatedDistribution(newDistribution, upperBound, UPPER); else throw InvalidArgumentException(HERE) << "Error: no bound"; setWeight(w); } /* Parameters description accessor */ Description TruncatedDistribution::getParameterDescription() const { Description description(distribution_.getParameterDescription()); description.add("finiteLowerBound"); description.add("lowerBound"); description.add("finiteUpperBound"); description.add("upperBound"); return description; } /* Check if the distribution is elliptical */ Bool TruncatedDistribution::isElliptical() const { return distribution_.isElliptical() && finiteLowerBound_ && finiteUpperBound_ && (std::abs(distribution_.getRange().getLowerBound()[0] - lowerBound_ + distribution_.getRange().getUpperBound()[0] - upperBound_) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")); } /* distribution accessor */ void TruncatedDistribution::setDistribution(const Distribution & distribution) { if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can truncate only distribution with dimension=1, here dimension=" << distribution.getDimension(); distribution_ = distribution; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; isParallel_ = distribution.getImplementation()->isParallel(); computeRange(); } Distribution TruncatedDistribution::getDistribution() const { return distribution_; } /* Realiation threshold accessor */ void TruncatedDistribution::setThresholdRealization(const Scalar thresholdRealization) { if ((thresholdRealization < 0.0) || (thresholdRealization > 1.0)) throw InvalidArgumentException(HERE) << "Realization threshold must be in [0, 1], here thresholdRealization=" << thresholdRealization; thresholdRealization_ = thresholdRealization; } Scalar TruncatedDistribution::getThresholdRealization() const { return thresholdRealization_; } /* Lower bound accessor */ void TruncatedDistribution::setLowerBound(const Scalar lowerBound) { if ((finiteUpperBound_) && (lowerBound > upperBound_)) throw InvalidArgumentException(HERE) << "Error: the lower bound must be strictly less than the upper bound, here lower bound=" << lowerBound << " and upper bound=" << upperBound_; cdfLowerBound_ = distribution_.computeCDF(Point(1, lowerBound)); if (cdfLowerBound_ >= cdfUpperBound_) throw InvalidArgumentException(HERE) << "Error: the truncation interval does not contain a non-empty part of the support of the distribution"; pdfLowerBound_ = distribution_.computePDF(Point(1, lowerBound)); lowerBound_ = lowerBound; finiteLowerBound_ = true; normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); computeRange(); } Scalar TruncatedDistribution::getLowerBound() const { return lowerBound_; } /* Upper bound accessor */ void TruncatedDistribution::setUpperBound(const Scalar upperBound) { if ((finiteLowerBound_) && (upperBound < lowerBound_)) throw InvalidArgumentException(HERE) << "Error: the upper bound must be strictly greater than the lower bound, here upper bound=" << upperBound << " and lower bound=" << lowerBound_; cdfUpperBound_ = distribution_.computeCDF(Point(1, upperBound)); if (cdfUpperBound_ <= cdfLowerBound_) throw InvalidArgumentException(HERE) << "Error: the truncation interval does not contain a non-empty part of the support of the distribution"; pdfUpperBound_ = distribution_.computePDF(Point(1, upperBound)); upperBound_ = upperBound; finiteUpperBound_ = true; normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } Scalar TruncatedDistribution::getUpperBound() const { return upperBound_; } /* Lower bound finite flag accessor */ void TruncatedDistribution::setFiniteLowerBound(const Bool finiteLowerBound) { // A stange case: the new flag tells that the bound is finite, but no finite previous value has been given if (finiteLowerBound && !finiteLowerBound_) throw InvalidArgumentException(HERE) << "Error: cannot set a finite flag on a non finite previous value"; // If we switched from a finite value to an infinite one, update everything if (!finiteLowerBound) { lowerBound_ = -SpecFunc::MaxScalar; pdfLowerBound_ = 0.0; cdfLowerBound_ = 0.0; finiteLowerBound_ = false; normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); } isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } Bool TruncatedDistribution::getFiniteLowerBound() const { return finiteLowerBound_; } /* Upper bound finite flag accessor */ void TruncatedDistribution::setFiniteUpperBound(const Bool finiteUpperBound) { // A strange case: the new flag tells that the bound is finite, but no finite previous value has been given if (finiteUpperBound && !finiteUpperBound_) throw InvalidArgumentException(HERE) << "Error: cannot set a finite flag on a non finite previous value"; // If we switched from a finite value to an infinite one, update everything if (!finiteUpperBound) { upperBound_ = SpecFunc::MaxScalar; pdfUpperBound_ = 0.0; cdfUpperBound_ = 1.0; finiteUpperBound_ = false; normalizationFactor_ = 1.0 / (cdfUpperBound_ - cdfLowerBound_); } isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } Bool TruncatedDistribution::getFiniteUpperBound() const { return finiteUpperBound_; } /* Tell if the distribution is continuous */ Bool TruncatedDistribution::isContinuous() const { return distribution_.isContinuous(); } /* Tell if the distribution is integer valued */ Bool TruncatedDistribution::isDiscrete() const { return distribution_.isDiscrete(); } /* Tell if the distribution is integer valued */ Bool TruncatedDistribution::isIntegral() const { return distribution_.isIntegral(); } /* Get the support of a distribution that intersect a given interval */ Sample TruncatedDistribution::getSupport(const Interval & interval) const { return distribution_.getSupport(getRange().intersect(interval)); } /* Get the PDF singularities inside of the range - 1D only */ Point TruncatedDistribution::getSingularities() const { Point singularities(0); Point nontruncatedSingularities(distribution_.getSingularities()); const UnsignedInteger size = nontruncatedSingularities.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = nontruncatedSingularities[i]; if (x >= upperBound_) return singularities; if (x > lowerBound_) singularities.add(x); } return singularities; } /* Method save() stores the object through the StorageManager */ void TruncatedDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "lowerBound_", lowerBound_ ); adv.saveAttribute( "finiteLowerBound_", finiteLowerBound_ ); adv.saveAttribute( "upperBound_", upperBound_ ); adv.saveAttribute( "finiteUpperBound_", finiteUpperBound_ ); adv.saveAttribute( "thresholdRealization_", thresholdRealization_ ); adv.saveAttribute( "pdfLowerBound_", pdfLowerBound_ ); adv.saveAttribute( "cdfLowerBound_", cdfLowerBound_ ); adv.saveAttribute( "pdfUpperBound_", pdfUpperBound_ ); adv.saveAttribute( "cdfUpperBound_", cdfUpperBound_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void TruncatedDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "lowerBound_", lowerBound_ ); adv.loadAttribute( "finiteLowerBound_", finiteLowerBound_ ); adv.loadAttribute( "upperBound_", upperBound_ ); adv.loadAttribute( "finiteUpperBound_", finiteUpperBound_ ); adv.loadAttribute( "thresholdRealization_", thresholdRealization_ ); adv.loadAttribute( "pdfLowerBound_", pdfLowerBound_ ); adv.loadAttribute( "cdfLowerBound_", cdfLowerBound_ ); adv.loadAttribute( "pdfUpperBound_", pdfUpperBound_ ); adv.loadAttribute( "cdfUpperBound_", cdfUpperBound_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TruncatedNormal.cxx000066400000000000000000000551621307543307100256030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TruncatedNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/TruncatedNormal.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TruncatedNormal); static const Factory Factory_TruncatedNormal; /* Default onstructor */ TruncatedNormal::TruncatedNormal() : ContinuousDistribution() , mu_(0.0) , sigma_(1.0) , a_(-1.0) , b_(1.0) , aNorm_(-1.0) , bNorm_(1.0) // 0.24197072451914333757 = exp(-1/2)/sqrt{2\pi} , phiANorm_(0.24197072451914333757) , phiBNorm_(0.24197072451914333757) // 0.15865525393145704647 = Phi(-1) , PhiANorm_(0.15865525393145704647) // 0.84134474606854292578 = Phi(1) , PhiBNorm_(0.84134474606854292578) // 1.46479477349154407761 = 1 / (Phi(1) - Phi(-1)) , normalizationFactor_(1.46479477349154407761) { setName("TruncatedNormal"); setDimension(1); computeRange(); } /* Default onstructor */ TruncatedNormal::TruncatedNormal(const Scalar mu, const Scalar sigma, const Scalar a, const Scalar b) : ContinuousDistribution() , mu_(mu) , sigma_(0.0) , a_(a) , b_(b) , aNorm_(0.0) , bNorm_(0.0) , phiANorm_(0.0) , phiBNorm_(0.0) , PhiANorm_(0.0) , PhiBNorm_(0.0) , normalizationFactor_(0.0) { setName("TruncatedNormal"); if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Error: cannot build a TruncatedNormal distribution with sigma <=0. Here, sigma=" << sigma; if (a >= b) throw InvalidArgumentException(HERE) << "Error: cannot build a TruncatedNormal distribution with a >= b. Here, a=" << a << " and b=" << b; setSigma(sigma); setDimension(1); const Scalar iSigma = 1.0 / sigma_; aNorm_ = (a_ - mu_) * iSigma; bNorm_ = (b_ - mu_) * iSigma; PhiANorm_ = DistFunc::pNormal(aNorm_); PhiBNorm_ = DistFunc::pNormal(bNorm_); Scalar denominator = PhiBNorm_ - PhiANorm_; // If left tail truncature, use tail CDF to compute the normalization factor if (aNorm_ > 0.0) denominator = DistFunc::pNormal(aNorm_, true) - DistFunc::pNormal(bNorm_, true); if (!(denominator > 0.0)) throw InvalidArgumentException(HERE) << "Error: the truncation interval has a too small measure. Here, measure=" << denominator; normalizationFactor_ = 1.0 / denominator; phiANorm_ = SpecFunc::ISQRT2PI * std::exp(-0.5 * aNorm_ * aNorm_); phiBNorm_ = SpecFunc::ISQRT2PI * std::exp(-0.5 * bNorm_ * bNorm_); computeRange(); } /* Comparison operator */ Bool TruncatedNormal::operator ==(const TruncatedNormal & other) const { if (this == &other) return true; return (mu_ == other.mu_) && (sigma_ == other.sigma_) && (a_ == other.a_) && (b_ == other.b_); } Bool TruncatedNormal::equals(const DistributionImplementation & other) const { const TruncatedNormal* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String TruncatedNormal::__repr__() const { OSS oss(true); oss << "class=" << TruncatedNormal::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " mu=" << mu_ << " sigma=" << sigma_ << " a=" << a_ << " b=" << b_; return oss; } String TruncatedNormal::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ", a = " << a_ << ", b = " << b_ << ")"; return oss; } /* Virtual constructor */ TruncatedNormal * TruncatedNormal::clone() const { return new TruncatedNormal(*this); } /* Compute the numerical range of the distribution given the parameters values */ void TruncatedNormal::computeRange() { setRange(Interval(a_, b_)); } /* Get one realization of the distribution */ Point TruncatedNormal::getRealization() const { /* Find a better method, e.g. Algorithm from John Geweke, "Efficient Simulation from the Multivariate Normal and Student-t Distributions Subject to Linear Constraints and the Evaluation of Constraint Probabilities", communication at the meeting "Computer Science and Statistics: the Twenty-Third Symposium on the Interface", April 22-24, 1991. */ // If the truncation is strong, use CDF inversion, else use rejection. The cut-off must balance the cost of the two methods if (PhiBNorm_ - PhiANorm_ < 0.25) return computeQuantile(RandomGenerator::Generate()); Scalar value = -1.0; do { value = DistFunc::rNormal(); } while ((value < aNorm_) || (value >= bNorm_)); return Point(1, mu_ + sigma_ * value); } /* Get the DDF of the distribution */ Point TruncatedNormal::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return Point(1, 0.0); const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; return Point(1, -normalizationFactor_ * xNorm * SpecFunc::ISQRT2PI * std::exp(-0.5 * xNorm * xNorm) * iSigma * iSigma); } /* Get the PDF of the distribution */ Scalar TruncatedNormal::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return 0.0; const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; return normalizationFactor_ * std::exp(-0.5 * xNorm * xNorm) * SpecFunc::ISQRT2PI * iSigma; } /* Get the logarithm of the PDF of the distribution */ Scalar TruncatedNormal::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return SpecFunc::LogMinScalar; const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; return std::log(SpecFunc::ISQRT2PI * iSigma * normalizationFactor_) - 0.5 * xNorm * xNorm; } /* Get the CDF of the distribution */ Scalar TruncatedNormal::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; return normalizationFactor_ * (DistFunc::pNormal((x - mu_) / sigma_) - PhiANorm_); } Scalar TruncatedNormal::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 1.0; if (x > b_) return 0.0; // Don't call pNormal with tail in the next line return normalizationFactor_ * (PhiBNorm_ - DistFunc::pNormal((x - mu_) / sigma_)); } /* Get the product minimum volume interval containing a given probability of the distribution */ Interval TruncatedNormal::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { // Unimodal decreasing with mode at a_ if (mu_ <= a_) return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, false, marginalProb); // Unimodal increasing with mode at b_ if (mu_ >= b_) return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, true, marginalProb); // Unimodal with mode in (a, b) // Different cases here: // 1) PDF(a) >= PDF(b): let \alpha\in(a,b) be such that PDF(\alpha)==PDF(a) // 1a) P([a,\alpha])>=prob: the minimum volume interval (MVI) [c,d] is such that // PDF(c)=PDF(d) and a <= c < d <= \alpha -> this is a root-finding MVI // 1b) P([a,\alpha]) this is an unilateral MVI // 2) PDF(a) < PDF(b): let \beta\in(a,b) be such that PDF(\beta)==PDF(b) // 2a) PDF([\beta,b])>=prob: the MVI [c,d] is such that // PDF(c)=PDF(d) and beta <= c < d <= b -> this is a root-finding MVI // 2b) P([\beta,b]) this is a tail unilateral MVI // 1) if (phiANorm_ >= phiBNorm_) { // Find \alpha PDFWrapper pdfWrapper(this); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); const Scalar alpha = solver.solve(pdfWrapper, normalizationFactor_ * phiANorm_ / sigma_ , mu_, b_); const Scalar probability = computeProbability(Interval(a_, alpha)); // 1a) if (probability >= prob) return computeUnivariateMinimumVolumeIntervalByRootFinding(prob, marginalProb); // 1b) return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, false, marginalProb); } // 2) // Find \beta PDFWrapper pdfWrapper(this); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); const Scalar beta = solver.solve(pdfWrapper, normalizationFactor_ * phiBNorm_ / sigma_, a_, mu_); const Scalar probability = computeProbability(Interval(beta, b_)); // 2a) if (probability >= prob) return computeUnivariateMinimumVolumeIntervalByRootFinding(prob, marginalProb); // 2b) return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, true, marginalProb); } /* Get the minimum volume level set containing a given probability of the distribution */ LevelSet TruncatedNormal::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const Interval interval(computeMinimumVolumeInterval(prob)); const Scalar lower = interval.getLowerBound()[0]; const Scalar upper = interval.getUpperBound()[0]; Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); Scalar minusLogPDFThreshold = -1.0; if (lower == a_) minusLogPDFThreshold = -computeLogPDF(upper); else minusLogPDFThreshold = -computeLogPDF(lower); threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex TruncatedNormal::computeCharacteristicFunction(const Scalar x) const { const Scalar iSigma2 = 1.0 / (sigma_ * std::sqrt(2.0)); const Scalar alpha = (a_ - mu_) * iSigma2; const Scalar beta = (b_ - mu_) * iSigma2; const Scalar erf1 = SpecFunc::Erf(alpha); const Scalar erf2 = SpecFunc::Erf(beta); const Scalar t = x * sigma_ / std::sqrt(2.0); const Complex w1(SpecFunc::Faddeeva(Complex(-t, -alpha))); const Complex w2(SpecFunc::Faddeeva(Complex(-t, -beta))); return std::exp(Complex(0.0, x * mu_)) * (w2 * std::exp(Complex(-beta * beta, 2.0 * beta * t)) - w1 * std::exp(Complex(-alpha * alpha, 2.0 * alpha * t))) / (erf2 - erf1); } Complex TruncatedNormal::computeLogCharacteristicFunction(const Scalar x) const { const Scalar iSigma2 = 1.0 / (sigma_ * std::sqrt(2.0)); const Scalar alpha = (a_ - mu_) * iSigma2; const Scalar beta = (b_ - mu_) * iSigma2; const Scalar erf1 = SpecFunc::Erf(alpha); const Scalar erf2 = SpecFunc::Erf(beta); const Scalar t = x * sigma_ / std::sqrt(2.0); const Complex w1(SpecFunc::Faddeeva(Complex(-t, -alpha))); const Complex w2(SpecFunc::Faddeeva(Complex(-t, -beta))); return Complex(0.0, x * mu_) + std::log(w2 * std::exp(Complex(-beta * beta, 2.0 * beta * t)) - w1 * std::exp(Complex(-alpha * alpha, 2.0 * alpha * t))) - std::log(erf2 - erf1); } /* Get the PDFGradient of the distribution */ Point TruncatedNormal::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point pdfGradient(4, 0.0); if ((x <= a_) || (x > b_)) return pdfGradient; const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; const Scalar iDenom = normalizationFactor_ * iSigma; const Scalar iDenom2 = iDenom * iDenom; const Scalar factPhiXNorm = std::exp(-0.5 * xNorm * xNorm) * SpecFunc::ISQRT2PI * iDenom2; pdfGradient[0] = factPhiXNorm * (xNorm * (PhiBNorm_ - PhiANorm_) + phiBNorm_ - phiANorm_); pdfGradient[1] = factPhiXNorm * ((xNorm * xNorm - 1.0) * (PhiBNorm_ - PhiANorm_) + bNorm_ * phiBNorm_ - aNorm_ * phiANorm_); pdfGradient[2] = factPhiXNorm * phiANorm_; pdfGradient[3] = -factPhiXNorm * phiBNorm_; return pdfGradient; } /* Get the LogPDFGradient of the distribution */ Point TruncatedNormal::computeLogPDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "In TruncatedNormal::computeLogPDFGradient, the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point logPdfGradient(getParameterDimension()); if (!(x > a_) || !(x < b_)) return logPdfGradient; const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; const Scalar aNorm = (a_ - mu_) * iSigma; const Scalar bNorm = (b_ - mu_) * iSigma; const Scalar iDenom = normalizationFactor_ * iSigma; logPdfGradient[0] = xNorm * iSigma + iDenom * (phiBNorm_ - phiANorm_); logPdfGradient[1] = iSigma * ( -1.0 + xNorm * xNorm ) + iDenom * (phiBNorm_ * bNorm - phiANorm_ * aNorm); logPdfGradient[2] = phiANorm_ * iDenom; logPdfGradient[3] = - phiBNorm_ * iDenom; return logPdfGradient; } /* Get the CDFGradient of the distribution */ Point TruncatedNormal::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point cdfGradient(4, 0.0); if ((x <= a_) || (x > b_)) return cdfGradient; const Scalar iSigma = 1.0 / sigma_; const Scalar xNorm = (x - mu_) * iSigma; const Scalar iDenom = normalizationFactor_ * normalizationFactor_ * iSigma; const Scalar phiXNorm = std::exp(-0.5 * xNorm * xNorm) * SpecFunc::ISQRT2PI; const Scalar PhiXNorm = DistFunc::pNormal(xNorm); cdfGradient[0] = (phiANorm_ * PhiBNorm_ - PhiANorm_ * phiBNorm_ + phiXNorm * PhiANorm_ - PhiXNorm * phiANorm_ + phiBNorm_ * PhiXNorm - PhiBNorm_ * phiXNorm) * iDenom; cdfGradient[1] = (phiANorm_ * aNorm_ * PhiBNorm_ - PhiANorm_ * phiBNorm_ * bNorm_ + phiXNorm * xNorm * PhiANorm_ - PhiXNorm * phiANorm_ * aNorm_ + phiBNorm_ * bNorm_ * PhiXNorm - PhiBNorm_ * phiXNorm * xNorm) * iDenom; cdfGradient[2] = phiANorm_ * (PhiXNorm - PhiBNorm_) * iDenom; cdfGradient[3] = phiBNorm_ * (PhiANorm_ - PhiXNorm) * iDenom; return cdfGradient; } /* Get the quantile of the distribution */ Scalar TruncatedNormal::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return mu_ + sigma_ * DistFunc::qNormal(PhiBNorm_ - prob / normalizationFactor_); return mu_ + sigma_ * DistFunc::qNormal(PhiANorm_ + prob / normalizationFactor_); } /* Compute the mean of the distribution */ void TruncatedNormal::computeMean() const { mean_ = Point(1, mu_ - sigma_ * (phiBNorm_ - phiANorm_) * normalizationFactor_); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point TruncatedNormal::getStandardDeviation() const { const Scalar ratio = (phiBNorm_ - phiANorm_) * normalizationFactor_; return Point(1, sigma_ * std::sqrt(1.0 - (bNorm_ * phiBNorm_ - aNorm_ * phiANorm_) * normalizationFactor_ - ratio * ratio)); } /* Get the skewness of the distribution */ Point TruncatedNormal::getSkewness() const { const Scalar ratio = (phiBNorm_ - phiANorm_) * normalizationFactor_; const Scalar ratio2 = ratio * ratio; const Scalar crossTerm1 = (bNorm_ * phiBNorm_ - aNorm_ * phiANorm_) * normalizationFactor_; const Scalar crossTerm2 = (bNorm_ * bNorm_ * phiBNorm_ - aNorm_ * aNorm_ * phiANorm_) * normalizationFactor_; return Point(1, (-2.0 * ratio * ratio2 - 3.0 * ratio * crossTerm1 + ratio - crossTerm2) / std::pow(1.0 - crossTerm1 - ratio2, 1.5)); } /* Get the kurtosis of the distribution */ Point TruncatedNormal::getKurtosis() const { const Scalar ratio = (phiBNorm_ - phiANorm_) * normalizationFactor_; const Scalar ratio2 = ratio * ratio; const Scalar crossTerm1 = (bNorm_ * phiBNorm_ - aNorm_ * phiANorm_) * normalizationFactor_; const Scalar crossTerm2 = (bNorm_ * bNorm_ * phiBNorm_ - aNorm_ * aNorm_ * phiANorm_) * normalizationFactor_; const Scalar crossTerm3 = (bNorm_ * bNorm_ * bNorm_ * phiBNorm_ - aNorm_ * aNorm_ * aNorm_ * phiANorm_) * normalizationFactor_; return Point(1, (3.0 - 3.0 * ratio2 * ratio2 - 6.0 * ratio2 * crossTerm1 - 2.0 * ratio * (ratio + 2.0 * crossTerm2) - 3.0 * crossTerm1 - crossTerm3) / std::pow(1.0 - crossTerm1 - ratio2, 2.0)); } /* Get the standard representative in the parametric family, associated with the standard moments */ TruncatedNormal::Implementation TruncatedNormal::getStandardRepresentative() const { return TruncatedNormal((2.0 * mu_ - (b_ + a_)) / (b_ - a_), 2.0 * sigma_ / (b_ - a_), -1.0, 1.0).clone(); } /* Compute the covariance of the distribution */ void TruncatedNormal::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar ratio = (phiBNorm_ - phiANorm_) * normalizationFactor_; covariance_(0, 0) = sigma_ * sigma_ * (1.0 - (bNorm_ * phiBNorm_ - aNorm_ * phiANorm_) * normalizationFactor_ - ratio * ratio); isAlreadyComputedCovariance_ = true; } /* Parameters value accessor */ Point TruncatedNormal::getParameter() const { Point point(4); point[0] = mu_; point[1] = sigma_; point[2] = a_; point[3] = b_; return point; } void TruncatedNormal::setParameter(const Point & parameter) { if (parameter.getSize() != 4) throw InvalidArgumentException(HERE) << "Error: expected 4 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = TruncatedNormal(parameter[0], parameter[1], parameter[2], parameter[3]); setWeight(w); } /* Parameters description accessor */ Description TruncatedNormal::getParameterDescription() const { Description description(4); description[0] = "mu"; description[1] = "sigma"; description[2] = "a"; description[3] = "b"; return description; } /* Check if the distribution is elliptical */ Bool TruncatedNormal::isElliptical() const { return std::abs(mu_ - 0.5 * (a_ + b_)) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon"); } /* Mu accessor */ void TruncatedNormal::setMu(const Scalar mu) { if (mu != mu_) { mu_ = mu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } } Scalar TruncatedNormal::getMu() const { return mu_; } /* Sigma accessor */ void TruncatedNormal::setSigma(const Scalar sigma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "Sigma MUST be positive"; if (sigma != sigma_) { sigma_ = sigma; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } } Scalar TruncatedNormal::getSigma() const { return sigma_; } /* A accessor */ void TruncatedNormal::setA(const Scalar a) { if (a != a_) { a_ = a; const Scalar iSigma = 1.0 / sigma_; aNorm_ = (a_ - mu_) * iSigma; PhiANorm_ = DistFunc::pNormal(aNorm_); Scalar denominator = PhiBNorm_ - PhiANorm_; // If left tail truncature, use tail CDF to compute the normalization factor if (aNorm_ > 0.0) denominator = DistFunc::pNormal(aNorm_, true) - DistFunc::pNormal(bNorm_, true); if (!(denominator > 0.0)) throw InvalidArgumentException(HERE) << "Error: the truncation interval has a too small measure. Here, measure=" << denominator; normalizationFactor_ = 1.0 / denominator; phiANorm_ = SpecFunc::ISQRT2PI * std::exp(-0.5 * aNorm_ * aNorm_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar TruncatedNormal::getA() const { return a_; } /* B accessor */ void TruncatedNormal::setB(const Scalar b) { if (b != b_) { b_ = b; const Scalar iSigma = 1.0 / sigma_; bNorm_ = (b_ - mu_) * iSigma; PhiBNorm_ = DistFunc::pNormal(bNorm_); Scalar denominator = PhiBNorm_ - PhiANorm_; if (!(denominator > 0.0)) throw InvalidArgumentException(HERE) << "Error: the truncation interval has a too small measure. Here, measure=" << denominator; normalizationFactor_ = 1.0 / denominator; phiBNorm_ = SpecFunc::ISQRT2PI * std::exp(-0.5 * bNorm_ * bNorm_); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar TruncatedNormal::getB() const { return b_; } /* Method save() stores the object through the StorageManager */ void TruncatedNormal::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "mu_", mu_ ); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "b_", b_ ); adv.saveAttribute( "aNorm_", aNorm_ ); adv.saveAttribute( "bNorm_", bNorm_ ); adv.saveAttribute( "phiANorm_", phiANorm_ ); adv.saveAttribute( "phiBNorm_", phiBNorm_ ); adv.saveAttribute( "PhiANorm_", PhiANorm_ ); adv.saveAttribute( "PhiBNorm_", PhiBNorm_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void TruncatedNormal::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "mu_", mu_ ); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "b_", b_ ); adv.loadAttribute( "aNorm_", aNorm_ ); adv.loadAttribute( "bNorm_", bNorm_ ); adv.loadAttribute( "phiANorm_", phiANorm_ ); adv.loadAttribute( "phiBNorm_", phiBNorm_ ); adv.loadAttribute( "PhiANorm_", PhiANorm_ ); adv.loadAttribute( "PhiBNorm_", PhiBNorm_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/TruncatedNormalFactory.cxx000066400000000000000000000137221307543307100271270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for TruncatedNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/TruncatedNormalFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/MaximumLikelihoodFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(TruncatedNormalFactory); static const Factory Factory_TruncatedNormalFactory; /* Default constructor */ TruncatedNormalFactory::TruncatedNormalFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ TruncatedNormalFactory * TruncatedNormalFactory::clone() const { return new TruncatedNormalFactory(*this); } /* Here is the interface that all derived class must implement */ TruncatedNormalFactory::Implementation TruncatedNormalFactory::build(const Sample & sample) const { return buildAsTruncatedNormal(sample).clone(); } TruncatedNormalFactory::Implementation TruncatedNormalFactory::build(const Point & parameters) const { return buildAsTruncatedNormal(parameters).clone(); } TruncatedNormalFactory::Implementation TruncatedNormalFactory::build() const { return buildAsTruncatedNormal().clone(); } TruncatedNormal TruncatedNormalFactory::buildAsTruncatedNormal(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a TruncatedNormal distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); // In order to avoid numerical stability issues, we normalize the data to [-1, 1] const Scalar xMin = sample.getMin()[0]; const Scalar xMax = sample.getMax()[0]; if (!SpecFunc::IsNormal(xMin) || !SpecFunc::IsNormal(xMax)) throw InvalidArgumentException(HERE) << "Error: cannot build a TruncatedNormal distribution if data contains NaN or Inf"; if (xMin == xMax) { const Scalar delta = std::max(std::abs(xMin), 10.0) * SpecFunc::ScalarEpsilon; TruncatedNormal result(xMin, 1.0, xMin - delta, xMax + delta); result.setDescription(sample.getDescription()); return result; } // X_norm = alpha * (X - beta) const Scalar alpha = 2.0 / (xMax - xMin); const Scalar beta = 0.5 * (xMin + xMax); Sample normalizedSample(sample); normalizedSample -= Point(1, beta); normalizedSample *= Point(1, alpha); const UnsignedInteger dimension = 2;// optimize (mu, sigma) Point parametersLowerBound(dimension, -SpecFunc::MaxScalar); parametersLowerBound[1] = ResourceMap::GetAsScalar( "TruncatedNormalFactory-SigmaLowerBound"); Interval::BoolCollection parametersLowerFlags(dimension, false); parametersLowerFlags[1] = true; Point startingPoint(dimension); startingPoint[0] = normalizedSample.computeMean()[0]; startingPoint[1] = normalizedSample.computeStandardDeviationPerComponent()[0]; const Scalar oneEps = 1.0 + 1.0 / size; MaximumLikelihoodFactory factory(buildAsTruncatedNormal()); // bounds are fixed Point knownParameterValues(2, oneEps); knownParameterValues[0] = -oneEps; Indices knownParameterIndices(2); knownParameterIndices.fill(2); factory.setKnownParameter(knownParameterValues, knownParameterIndices); // override starting point OptimizationAlgorithm solver(factory.getOptimizationAlgorithm()); solver.setStartingPoint(startingPoint); factory.setOptimizationAlgorithm(solver); // override bounds Interval bounds(parametersLowerBound, Point(dimension, SpecFunc::MaxScalar), parametersLowerFlags, Interval::BoolCollection(dimension, false)); factory.setOptimizationBounds(bounds); const Point parameters(factory.buildParameter(normalizedSample)); // The parameters are scaled back // X_norm = alpha * (X - beta) // X = beta + X_norm / alpha Point scaledParameters(4, beta); scaledParameters[0] += parameters[0] / alpha;// mu scaledParameters[1] = parameters[1] / alpha;// sigma scaledParameters[2] -= oneEps / alpha;// a scaledParameters[3] += oneEps / alpha;// b TruncatedNormal result(buildAsTruncatedNormal(scaledParameters)); result.setDescription(sample.getDescription()); return result; } TruncatedNormal TruncatedNormalFactory::buildAsTruncatedNormal(const Point & parameters) const { try { TruncatedNormal distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a TruncatedNormal distribution from the given parameters"; } } TruncatedNormal TruncatedNormalFactory::buildAsTruncatedNormal() const { return TruncatedNormal(); } /* Optimization solver accessor */ OptimizationAlgorithm TruncatedNormalFactory::getOptimizationAlgorithm() const { return solver_; } void TruncatedNormalFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } void TruncatedNormalFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "TruncatedNormalFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } OptimizationAlgorithm TruncatedNormalFactory::getOptimizationSolver() const { Log::Warn(OSS() << "TruncatedNormalFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Uniform.cxx000066400000000000000000000245531307543307100241200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Uniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Uniform.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Uniform); static const Factory Factory_Uniform; /* Default constructor */ Uniform::Uniform() : ContinuousDistribution() , a_(-1.0) , b_(1.0) { setName( "Uniform" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ Uniform::Uniform(const Scalar a, const Scalar b) : ContinuousDistribution() , a_(a) , b_(b) { setName( "Uniform" ); setB(b); setDimension( 1 ); computeRange(); } /* Comparison operator */ Bool Uniform::operator ==(const Uniform & other) const { if (this == &other) return true; return (a_ == other.a_) && (b_ == other.b_); } Bool Uniform::equals(const DistributionImplementation & other) const { const Uniform* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Uniform::__repr__() const { OSS oss(true); oss << "class=" << Uniform::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " a=" << a_ << " b=" << b_; return oss; } String Uniform::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(a = " << a_ << ", b = " << b_ << ")"; return oss; } /* Virtual constructor */ Uniform * Uniform::clone() const { return new Uniform(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Uniform::computeRange() { setRange(Interval(a_, b_)); } /* Get one realization of the distribution */ Point Uniform::getRealization() const { return Point(1, a_ + (b_ - a_) * RandomGenerator::Generate()); } /* Get a sample of the distribution */ Sample Uniform::getSample(const UnsignedInteger size) const { SampleImplementation result(size, 1); result.setData(RandomGenerator::Generate(size)); result *= Point(1, b_ - a_); result += Point(1, a_); result.setName(getName()); result.setDescription(getDescription()); return result; } /* Get the DDF of the distribution */ Point Uniform::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); return Point(1, 0.0); } /* Get the PDF of the distribution */ Scalar Uniform::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if ((x <= a_) || (x > b_)) return 0.0; return 1.0 / (b_ - a_); } /* Get the CDF of the distribution */ Scalar Uniform::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 0.0; if (x >= b_) return 1.0; return (x - a_) / (b_ - a_); } Scalar Uniform::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (x <= a_) return 1.0; if (x > b_) return 0.0; return (b_ - x) / (b_ - a_); } /* Get the product minimum volume interval containing a given probability of the distribution */ Interval Uniform::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb); } /* Get the product bilateral confidence interval containing a given probability of the distribution */ Interval Uniform::computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { marginalProb = prob; const Scalar m = 0.5 * (a_ + b_); const Scalar d = 0.5 * (b_ - a_); return Interval(m - prob * d, m + prob * d); } /* Get the minimum volume level set containing a given probability of the distribution */ LevelSet Uniform::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { const SymbolicFunction function("x", String(OSS(true) << 2.0 / (b_ - a_) << " * abs(x - (" << 0.5 * (a_ + b_) << "))")); threshold = prob; return LevelSet(function, threshold); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Uniform::computeCharacteristicFunction(const Scalar x) const { Complex result; const Scalar ax = a_ * x; const Scalar bx = b_ * x; if (std::abs(ax) + std::abs(bx) <= 1.0e-5) result = Complex(1.0 - (ax * ax + ax * bx + bx * bx) / 6.0, 0.5 * (ax + bx)); else { const Scalar idenom = 1.0 / (bx - ax); result = Complex(idenom * (std::sin(bx) - std::sin(ax)), idenom * (std::cos(ax) - std::cos(bx))); } return result; } /* Get the PDFGradient of the distribution */ Point Uniform::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point pdfGradient(2, 0.0); if ((x < a_) || (x > b_)) return pdfGradient; const Scalar iAB = 1.0 / (b_ - a_); const Scalar iAB2 = iAB * iAB; pdfGradient[0] = iAB2; pdfGradient[1] = -iAB2; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Uniform::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; Point cdfGradient(2, 0.0); if ((x < a_) || (x > b_)) return cdfGradient; const Scalar iAB = 1.0 / (b_ - a_); const Scalar iAB2 = iAB * iAB; cdfGradient[0] = (x - b_) * iAB2; cdfGradient[1] = (a_ - x) * iAB2; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Uniform::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return b_ - prob * (b_ - a_); return a_ + prob * (b_ - a_); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Uniform::getRoughness() const { return 1.0 / (b_ - a_); } /* Compute the mean of the distribution */ void Uniform::computeMean() const { mean_ = Point(1, 0.5 * (a_ + b_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Uniform::getStandardDeviation() const { return Point(1, (b_ - a_) / std::sqrt(12.0)); } /* Get the skewness of the distribution */ Point Uniform::getSkewness() const { return Point(1, 0.0); } /* Get the kurtosis of the distribution */ Point Uniform::getKurtosis() const { // 1.8 = 9/5 return Point(1, 1.8); } /* Compute the covariance of the distribution */ void Uniform::computeCovariance() const { covariance_ = CovarianceMatrix(1); const Scalar eta = b_ - a_; covariance_(0, 0) = eta * eta / 12.0; isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Uniform::getStandardMoment(const UnsignedInteger n) const { if (n % 2 == 1) return Point(1, 0.0); return Point(1, 1.0 / (n + 1)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Uniform::Implementation Uniform::getStandardRepresentative() const { return Uniform(-1.0, 1.0).clone(); } /* Parameters value accessor */ Point Uniform::getParameter() const { Point point(2); point[0] = a_; point[1] = b_; return point; } void Uniform::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Uniform(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description Uniform::getParameterDescription() const { Description description(2); description[0] = "a"; description[1] = "b"; return description; } /* Check if the distribution is elliptical */ Bool Uniform::isElliptical() const { return getDimension() == 1; } /* A accessor */ void Uniform::setA(const Scalar a) { if (b_ <= a) throw InvalidArgumentException(HERE) << "Error the lower bound a of a Uniform distribution must be less than its upper bound b, here a=" << a << " b=" << b_; if (a != a_) { a_ = a; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Uniform::getA() const { return a_; } /* B accessor */ void Uniform::setB(const Scalar b) { if (b <= a_) throw InvalidArgumentException(HERE) << "Error the lower bound a of a Uniform distribution must be less than its upper bound b, here a=" << a_ << " b=" << b; if (b != b_) { b_ = b; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Uniform::getB() const { return b_; } /* Method save() stores the object through the StorageManager */ void Uniform::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "a_", a_ ); adv.saveAttribute( "b_", b_ ); } /* Method load() reloads the object from the StorageManager */ void Uniform::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "a_", a_ ); adv.loadAttribute( "b_", b_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/UniformFactory.cxx000066400000000000000000000062051307543307100254420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Uniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UniformFactory.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UniformFactory); /* Default constructor */ UniformFactory::UniformFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ UniformFactory * UniformFactory::clone() const { return new UniformFactory(*this); } /* Here is the interface that all derived class must implement */ UniformFactory::Implementation UniformFactory::build(const Sample & sample) const { return buildAsUniform(sample).clone(); } UniformFactory::Implementation UniformFactory::build(const Point & parameters) const { return buildAsUniform(parameters).clone(); } UniformFactory::Implementation UniformFactory::build() const { return buildAsUniform().clone(); } Uniform UniformFactory::buildAsUniform(const Sample & sample) const { const Scalar size = sample.getSize(); if (size < 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Uniform distribution from a sample of size < 2"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Uniform distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; const Scalar a = xMin - std::abs(xMin) / (2.0 + size); const Scalar xMax = sample.getMax()[0]; const Scalar b = xMax + std::abs(xMax) / (2.0 + size); if (!SpecFunc::IsNormal(a) || !SpecFunc::IsNormal(b)) throw InvalidArgumentException(HERE) << "Error: cannot build a Uniform distribution if data contains NaN or Inf"; if (xMin == xMax) { const Scalar delta = std::max(std::abs(xMin), 10.0) * SpecFunc::ScalarEpsilon; Uniform result(xMin - delta, xMax + delta); result.setDescription(sample.getDescription()); return result; } Uniform result(a, b); result.setDescription(sample.getDescription()); return result; } Uniform UniformFactory::buildAsUniform(const Point & parameters) const { try { Uniform distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Uniform distribution from the given parameters"; } } Uniform UniformFactory::buildAsUniform() const { return Uniform(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/UserDefined.cxx000066400000000000000000000576551307543307100247070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The UserDefined distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/UserDefined.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UserDefined); static const Factory Factory_UserDefined; /* Default constructor */ UserDefined::UserDefined() : DiscreteDistribution() , points_(1, 1) , probabilities_(1, 1.0) , cumulativeProbabilities_(1, 1.0) , hasUniformWeights_(true) { setName("UserDefined"); // Empty range setRange(Interval(1.0, 0.0)); } /* Constructor from a sample */ UserDefined::UserDefined(const Sample & sample) : DiscreteDistribution() , points_(0, 0) , probabilities_(0) , cumulativeProbabilities_(0) , hasUniformWeights_(true) { setName("UserDefined"); const UnsignedInteger size = sample.getSize(); // We set the dimension of the UserDefined distribution // This call set also the range setData(sample, Point(size, 1.0 / size)); if ((getDimension() == 1) || (sample.getSize() <= ResourceMap::GetAsUnsignedInteger("UserDefined-SmallSize"))) compactSupport(); if(!sample.getDescription().isBlank()) setDescription(sample.getDescription()); } /* Constructor from a sample and the associated weights */ UserDefined::UserDefined(const Sample & sample, const Point & weights) : DiscreteDistribution() , points_(0, 0) , probabilities_(0) , cumulativeProbabilities_(0) , hasUniformWeights_(false) { setName("UserDefined"); // We set the dimension of the UserDefined distribution // This call set also the range setData(sample, weights); if ((getDimension() == 1) || (sample.getSize() <= ResourceMap::GetAsUnsignedInteger("UserDefined-SmallSize"))) compactSupport(); if(!sample.getDescription().isBlank()) setDescription(sample.getDescription()); } /* Comparison operator */ Bool UserDefined::operator ==(const UserDefined & other) const { if (this == &other) return true; return (points_ == other.points_) && (probabilities_ == other.probabilities_); } Bool UserDefined::equals(const DistributionImplementation & other) const { const UserDefined* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String UserDefined::__repr__() const { OSS oss; oss << "class=" << UserDefined::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " points=" << points_ << " probabilities=" << probabilities_; return oss; } String UserDefined::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "("; String separator(""); for (UnsignedInteger i = 0; i < points_.getSize(); ++i) { oss << separator << "{x = " << Point(points_[i]).__str__() << ", p = " << probabilities_[i] << "}"; separator = ", "; } oss << ")"; return oss; } /* Virtual constructor */ UserDefined * UserDefined::clone() const { return new UserDefined(*this); } /* Get one realization of the distribution */ Point UserDefined::getRealization() const { // Efficient algorithm for uniform weights const UnsignedInteger size = points_.getSize(); if (hasUniformWeights_) { const UnsignedInteger j = RandomGenerator::IntegerGenerate(size); return points_[j]; } const Scalar uniformRealization = RandomGenerator::Generate(); if (uniformRealization <= cumulativeProbabilities_[0]) return points_[0]; UnsignedInteger j0 = 0; UnsignedInteger j1 = size - 1; while (j1 - j0 > 1) { const UnsignedInteger jm = (j0 + j1) / 2; if (uniformRealization > cumulativeProbabilities_[jm]) j0 = jm; else j1 = jm; } return points_[j1]; } /* Get the PDF of the distribution */ Scalar UserDefined::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (point.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << dimension << ", here dimension=" << point.getDimension(); const UnsignedInteger size = points_.getSize(); Scalar pdf = 0.0; // Quick search for 1D case const Scalar x = point[0]; UnsignedInteger upper = size - 1; Scalar xUpper = points_[upper][0]; if (x > xUpper + supportEpsilon_) return 0.0; UnsignedInteger lower = 0; Scalar xLower = points_[lower][0]; if (x < xLower - supportEpsilon_) return 0.0; // Use bisection search of the correct index while (upper - lower > 1) { // The integer arithmetic ensure that middle will be strictly between lower and upper as far as upper - lower > 1 const UnsignedInteger middle = (upper + lower) / 2; const Scalar xMiddle = points_[middle][0]; if (xMiddle > x + supportEpsilon_) { upper = middle; xUpper = xMiddle; } else { lower = middle; xLower = xMiddle; } } // while // At this point we have upper == lower or upper == lower + 1, with lower - epsilon <= x < upper + epsilon SignedInteger index = upper; while ((index < static_cast(size)) && (std::abs(x - points_[index][0]) <= supportEpsilon_)) { if ((point - points_[index]).norm() <= supportEpsilon_) pdf += probabilities_[index]; ++ index; } index = upper; --index; while ((index >= 0) && (std::abs(x - points_[index][0]) <= supportEpsilon_)) { if ((point - points_[index]).norm() <= supportEpsilon_) pdf += probabilities_[index]; --index; } return pdf; } /* Get the CDF of the distribution */ Scalar UserDefined::computeCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); Scalar cdf = 0.0; const UnsignedInteger size = points_.getSize(); const UnsignedInteger dimension = getDimension(); // Quick search for 1D case if (dimension == 1) { const Scalar x = point[0]; UnsignedInteger upper = size - 1; Scalar xUpper = points_[upper][0]; if (x > xUpper - supportEpsilon_) return 1.0; UnsignedInteger lower = 0; Scalar xLower = points_[lower][0]; if (x <= xLower - supportEpsilon_) return 0.0; // Use dichotomic search of the correct index while (upper - lower > 1) { // The integer arithmetic insure that middle will be strictly between lower and upper as far as upper - lower > 1 const UnsignedInteger middle = (upper + lower) / 2; const Scalar xMiddle = points_[middle][0]; if (xMiddle > x + supportEpsilon_) { upper = middle; xUpper = xMiddle; } else { lower = middle; xLower = xMiddle; } } // while // At this point we have upper == lower or upper == lower + 1, with lower - epsilon <= x < upper + epsilon // If xLower < x < xUpper, the contribution of lower must be taken into account, else it // must be discarded if (x <= xUpper - supportEpsilon_) return cumulativeProbabilities_[lower]; return cumulativeProbabilities_[upper]; } // Dimension > 1 for (UnsignedInteger i = 0; i < size; ++i) { const Point x(points_[i]); UnsignedInteger j = 0; while ((j < dimension) && (x[j] <= point[j] + supportEpsilon_)) ++j; if (j == dimension) cdf += probabilities_[i]; } return cdf; } /* Get the PDF gradient of the distribution */ Point UserDefined::computePDFGradient(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const UnsignedInteger size = points_.getSize(); Point pdfGradient(size, 0.0); for (UnsignedInteger i = 0; i < size; ++i) { if ((point - points_[i]).norm() < supportEpsilon_) { pdfGradient[i] = 1.0; return pdfGradient; } } return pdfGradient; } /* Get the CDF gradient of the distribution */ Point UserDefined::computeCDFGradient(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const UnsignedInteger size = points_.getSize(); const UnsignedInteger dimension = getDimension(); Point cdfGradient(size, 0.0); for (UnsignedInteger i = 0; i < size; ++i) { const Point x(points_[i]); UnsignedInteger j = 0; while ((j < dimension) && (point[j] <= x[j])) ++j; if (j == dimension) cdfGradient[i] = 1.0; } return cdfGradient; } /* Compute the numerical range of the distribution given the parameters values */ void UserDefined::computeRange() { const UnsignedInteger size = points_.getSize(); const UnsignedInteger dimension = getDimension(); // Return an empty interval for the empty collection case if (size == 0) { setRange(Interval(Point(dimension, 1.0), Point(dimension, 0.0))); return; } // The number of points is finite, so are the bounds const Interval::BoolCollection finiteLowerBound(dimension, true); const Interval::BoolCollection finiteUpperBound(dimension, true); Point lowerBound(points_[0]); Point upperBound(lowerBound); for (UnsignedInteger i = 1; i < size; ++i) { const Point pt(points_[i]); for (UnsignedInteger j = 0; j < dimension; ++j) { const Scalar x = pt[j]; if (x < lowerBound[j]) lowerBound[j] = x; if (x > upperBound[j]) upperBound[j] = x; } } setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get the support of a discrete distribution that intersect a given interval */ Sample UserDefined::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; Sample result(0, getDimension()); const UnsignedInteger size = points_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Point x(points_[i]); if (interval.contains(x)) result.add(x); } return result; } /* Tell if the distribution is integer valued */ Bool UserDefined::isIntegral() const { if (getDimension() != 1) return false; const UnsignedInteger size = points_.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = points_[i][0]; if (std::abs(x - round(x)) >= supportEpsilon_) return false; } return true; } /* Compute the mean of the distribution */ void UserDefined::computeMean() const { const UnsignedInteger size = points_.getSize(); Point mean(getDimension()); for (UnsignedInteger i = 0; i < size; ++i) mean += probabilities_[i] * points_[i]; mean_ = mean; isAlreadyComputedMean_ = true; } /* Compute the covariance of the distribution */ void UserDefined::computeCovariance() const { const UnsignedInteger size = points_.getSize(); const UnsignedInteger dimension = getDimension(); covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) covariance_(i, i) = 0.0; const Point mean(getMean()); for (UnsignedInteger k = 0; k < size; ++k) { const Point xK(points_[k] - mean); const Scalar pK = probabilities_[k]; for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j <= i; ++j) covariance_(i, j) += pK * xK[i] * xK[j]; } isAlreadyComputedCovariance_ = true; } /* Parameters value and description accessor */ UserDefined::PointWithDescriptionCollection UserDefined::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension + 1); const UnsignedInteger size = points_.getSize(); // Loop over the dimension to extract the marginal coordinates of the support for (UnsignedInteger i = 0; i < dimension; ++i) { PointWithDescription point(size); Description description(size); for (UnsignedInteger j = 0; j < size; ++j) { point[j] = points_[j][i]; OSS oss; oss << "X^" << i << "_" << j; description[j] = oss; } point.setDescription(description); parameters[i] = point; } // Loop over the size to extract the probabilities, seen as the dependence parameters PointWithDescription point(size); Description description(size); for (UnsignedInteger i = 0; i < size; ++i) { point[i] = probabilities_[i]; OSS oss; oss << "probabilities_" << i; description[i] = oss; } point.setDescription(description); point.setName(getDescription()[0]); parameters[dimension] = point; return parameters; } /* Parameters value accessor */ Point UserDefined::getParameter() const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = points_.getSize(); Point point((dimension + 1) * size); for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < size; ++ j) { point[i * size + j] = points_[j][i]; } } for (UnsignedInteger i = 0; i < size; ++ i) { point[dimension * size + i] = probabilities_[i]; } return point; } /* Parameters description accessor */ Description UserDefined::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); const UnsignedInteger size = points_.getSize(); Description description((dimension + 1) * size); for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < size; ++ j) { description[i * size + j] = (OSS() << "X^" << i << "_" << j); } } for (UnsignedInteger i = 0; i < size; ++ i) { description[dimension * size + i] = (OSS() << "probabilities_" << i); } return description; } /* Get the i-th marginal distribution */ UserDefined::Implementation UserDefined::getMarginal(const UnsignedInteger i) const { const UnsignedInteger dimension = getDimension(); if (i >= dimension) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case UserDefined::Implementation result = new UserDefined(points_.getMarginal(i), probabilities_); return result; } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ UserDefined::Implementation UserDefined::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "The indices of a marginal distribution must be in the range [0, dim-1] and must be different"; // Special case for dimension 1 if (dimension == 1) return clone(); // General case UserDefined::Implementation result = new UserDefined(points_.getMarginal(indices), probabilities_); return result; } // getMarginal(Indices) /* Interface specific to UserDefined */ void UserDefined::setData(const Sample & sample, const Point & weights) { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the collection is empty"; if (weights.getDimension() != size) throw InvalidArgumentException(HERE) << "Error: cannot build a UserDefined distribution if the weights don't have the same dimension as the sample size."; hasUniformWeights_ = true; const UnsignedInteger dimension = sample[0].getDimension(); if (dimension == 0) throw InvalidArgumentException(HERE) << "Error: the points in the collection must have a dimension > 0"; // Check if all the given probabilities are >= 0 // Check if all the points have the same dimension for (UnsignedInteger i = 1; i < size; ++i) if (sample[i].getDimension() != dimension) throw InvalidArgumentException(HERE) << "UserDefined distribution must have all its point with the same dimension"; setDimension(dimension); // First, sort the collection such that the sample made with the first component is in ascending order Sample weightedData(size, dimension + 1); for (UnsignedInteger i = 0; i < size; ++i) { const Point x(sample[i]); for (UnsignedInteger j = 0; j < dimension; ++j) weightedData[i][j] = x[j]; weightedData[i][dimension] = weights[i]; } // Sort the pairs weightedData = weightedData.sortAccordingToAComponent(0); // Check the probabilities and normalize them const Scalar firstProbability = weightedData[0][dimension]; Scalar sum = 0.0; cumulativeProbabilities_ = Point(size); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar p = weightedData[i][dimension]; if (!(p >= 0.0)) throw InvalidArgumentException(HERE) << "UserDefined distribution must have positive probabilities"; sum += p; cumulativeProbabilities_[i] = sum; hasUniformWeights_ = hasUniformWeights_ && (std::abs(p - firstProbability) < pdfEpsilon_); } if (sum <= 0.0) throw InvalidArgumentException(HERE) << "Error: the sum of probabilities is zero."; // Normalize the probabilities for (UnsignedInteger i = 0; i < size; ++i) { weightedData[i][dimension] /= sum; cumulativeProbabilities_[i] /= sum; } points_ = Sample(size, dimension); probabilities_ = Point(size); for (UnsignedInteger i = 0; i < size; ++i) { Point x(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) x[j] = weightedData[i][j]; points_[i] = x; probabilities_[i] = std::max(0.0, std::min(1.0, weightedData[i][dimension])); } // We augment slightly the last cumulative probability, which should be equal to 1.0 but we enforce a value > 1.0. It stabilizes the sampling procedures without affecting their correctness (i.e. the algoritms are exact, not approximative) cumulativeProbabilities_[size - 1] = 1.0 + 2.0 * supportEpsilon_; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } Sample UserDefined::getX() const { return points_; } Point UserDefined::getP() const { return probabilities_; } /* Quantile computation for dimension=1 */ Scalar UserDefined::computeScalarQuantile(const Scalar prob, const Bool tail) const { UnsignedInteger index = 0; const Scalar p = tail ? 1 - prob : prob; while (cumulativeProbabilities_[index] < p) ++index; return points_[index][0]; } /* Merge the identical points of the support */ void UserDefined::compactSupport(const Scalar epsilon) { // No compaction if epsilon is negative if (epsilon < 0.0) return; const UnsignedInteger size = points_.getSize(); if (size == 0) return; const UnsignedInteger dimension = getDimension(); Sample compactX(0, dimension); Point compactP(0); if (dimension > 1) { // Build a hash table with rounded components const UnsignedInteger hashSize = 511; Collection indices(hashSize); Collection residuals(hashSize); for (UnsignedInteger i = 0; i < size; ++i) { const Point x(points_[i]); Scalar roundedComponent = x[0]; if (epsilon > 0.0) roundedComponent = epsilon * round(roundedComponent / epsilon); UnsignedInteger index = *reinterpret_cast(&roundedComponent); for (UnsignedInteger j = 1; j < dimension; ++j) { roundedComponent = x[j]; if (epsilon > 0.0) roundedComponent = epsilon * round(roundedComponent / epsilon); // XOR based hash function on the binary representation of the floating point coordinates index ^= *reinterpret_cast(&roundedComponent); } const UnsignedInteger hash = index % hashSize; const UnsignedInteger quotient = index / hashSize; indices[hash].add(i); residuals[hash].add(quotient); } // Now, we just have to inspect the points with the same hash for (UnsignedInteger i = 0; i < hashSize; ++i) { const Indices bucket(indices[i]); const Indices keys(residuals[i]); const UnsignedInteger bucketSize = bucket.getSize(); if (bucketSize == 0) continue; if (bucketSize == 1) { compactX.add(points_[bucket[0]]); compactP.add(probabilities_[bucket[0]]); } else { // New weights for the points in the bucket Point weights(bucketSize); // Here we have to detect and merge all the duplicates // The ith atom is removed if flagToRemove[i] > 0 Indices flagToRemove(bucketSize, 0); for (UnsignedInteger j = 0; j < bucketSize; ++j) { const UnsignedInteger currentIndex = bucket[j]; const UnsignedInteger currentKey = keys[j]; weights[j] = probabilities_[currentIndex]; const Point current(points_[currentIndex]); if (flagToRemove[j] == 0) { for (UnsignedInteger k = j + 1; k < bucketSize; ++k) { const UnsignedInteger candidateIndex = bucket[k]; const UnsignedInteger candidateKey = keys[k]; const Point candidate(points_[candidateIndex]); if ((currentKey == candidateKey) && (current - candidate).norm() <= epsilon) { flagToRemove[k] = 1; weights[j] += probabilities_[candidateIndex]; } } // k } // flagToRemove } // j // We keep all the points that must not be removed for (UnsignedInteger j = 0; j < bucketSize; ++j) { if (flagToRemove[j] == 0) { compactX.add(points_[bucket[j]]); compactP.add(weights[j]); } } } // bucketSize > 1 } // Loop over the hash table setData(compactX, compactP); return; } Scalar lastLocation = points_[0][0]; Scalar lastWeight = probabilities_[0]; for (UnsignedInteger i = 1; i < size; ++i) { const Scalar currentLocation = points_[i][0]; const Scalar currentWeight = probabilities_[i]; // The current point must be merged if (std::abs(currentLocation - lastLocation) <= epsilon) lastWeight += probabilities_[i]; else { compactX.add(Point(1, lastLocation)); compactP.add(std::max(0.0, std::min(1.0, lastWeight))); lastLocation = currentLocation; lastWeight = currentWeight; } } compactX.add(Point(1, lastLocation)); compactP.add(std::max(0.0, std::min(1.0, lastWeight))); setData(compactX, compactP); } /* Tell if the distribution has an elliptical copula */ Bool UserDefined::hasEllipticalCopula() const { return points_.getSize() == 1; } /* Tell if the distribution has independent copula */ Bool UserDefined::hasIndependentCopula() const { return points_.getSize() == 1; } /* Method save() stores the object through the StorageManager */ void UserDefined::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "points_", points_ ); adv.saveAttribute( "probabilities_", probabilities_ ); adv.saveAttribute( "cumulativeProbabilities_", cumulativeProbabilities_ ); adv.saveAttribute( "hasUniformWeights_", hasUniformWeights_ ); } /* Method load() reloads the object from the StorageManager */ void UserDefined::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "points_", points_ ); adv.loadAttribute( "probabilities_", probabilities_ ); adv.loadAttribute( "cumulativeProbabilities_", cumulativeProbabilities_ ); adv.loadAttribute( "hasUniformWeights_", hasUniformWeights_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/UserDefinedFactory.cxx000066400000000000000000000045601307543307100262220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for UserDefined distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/UserDefinedFactory.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UserDefinedFactory); static const Factory Factory_UserDefinedFactory; /* Default constructor */ UserDefinedFactory::UserDefinedFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ UserDefinedFactory * UserDefinedFactory::clone() const { return new UserDefinedFactory(*this); } /* Here is the interface that all derived class must implement */ UserDefinedFactory::Implementation UserDefinedFactory::build(const Sample & sample) const { return buildAsUserDefined(sample, 0.0).clone(); } UserDefinedFactory::Implementation UserDefinedFactory::build(const Sample & sample, const Scalar epsilon) const { return buildAsUserDefined(sample, epsilon).clone(); } UserDefinedFactory::Implementation UserDefinedFactory::build() const { return buildAsUserDefined().clone(); } UserDefined UserDefinedFactory::buildAsUserDefined(const Sample & sample, const Scalar epsilon) const { const UnsignedInteger size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a UserDefined distribution from an empty sample"; const Scalar p = 1.0 / Scalar(size); UserDefined result(sample, Point(size, p)); result.compactSupport(epsilon); result.setDescription(sample.getDescription()); return result; } UserDefined UserDefinedFactory::buildAsUserDefined() const { return UserDefined(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/VonMises.cxx000066400000000000000000000162051307543307100242370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The VonMises distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/VonMises.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(VonMises); static const Factory Factory_VonMises; /* Default constructor */ VonMises::VonMises() : ContinuousDistribution() , mu_(0.0) , kappa_(0.0) , normalizationFactor_(0.0) , ratioOfUniformsBound_(0.0) { setName("VonMises"); setDimension(1); // This call also call update and computeRange() setKappa(1.0); computeRange(); } /* Parameters constructor */ VonMises::VonMises(const Scalar mu, const Scalar kappa) : ContinuousDistribution() , mu_(0.0) , kappa_(0.0) , normalizationFactor_(0.0) , ratioOfUniformsBound_(0.0) { setName("VonMises"); setDimension(1); // This call also call update() and computeRange() setMu(mu); setKappa(kappa); computeRange(); } /* Comparison operator */ Bool VonMises::operator ==(const VonMises & other) const { if (this == &other) return true; return (mu_ == other.mu_) && (kappa_ == other.kappa_); } Bool VonMises::equals(const DistributionImplementation & other) const { const VonMises* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String VonMises::__repr__() const { OSS oss; oss << "class=" << VonMises::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " mu=" << mu_ << " kappa=" << kappa_; return oss; } String VonMises::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(mu = " << mu_ << ", kappa=" << kappa_ << ")"; return oss; } /* Mu accessor */ void VonMises::setMu(const Scalar mu) { if (mu != mu_) { mu_ = mu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; } } Scalar VonMises::getMu() const { return mu_; } /* Kappa accessor */ void VonMises::setKappa(const Scalar kappa) { if (!(kappa > 0.0)) throw InvalidArgumentException(HERE) << "Error: expected a positive kappa, got kappa=" << kappa; if (kappa != kappa_) { kappa_ = kappa; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; update(); } } Scalar VonMises::getKappa() const { return kappa_; } /* Circular moments accessor */ Scalar VonMises::getCircularMean() const { return mu_; } Scalar VonMises::getCircularVariance() const { return 1.0 - std::exp(SpecFunc::DeltaLogBesselI10(kappa_)); } /* Virtual constructor */ VonMises * VonMises::clone() const { return new VonMises(*this); } /* Compute the numerical range of the distribution given the parameters values */ void VonMises::computeRange() { setRange(Interval(-M_PI, M_PI)); } /** Update the derivative attributes */ void VonMises::update() { normalizationFactor_ = -std::log(2.0 * M_PI) - SpecFunc::LogBesselI0(kappa_); ratioOfUniformsBound_ = (kappa_ > 1.3 ? 1.0 / std::sqrt(kappa_) : M_PI * std::exp(-kappa_)); } /* Get one realization of the distribution * We use the method described in: * Lucio Barabesi, "Generating Von Mises variates by the ratio-of-uniforms method", * Statistica Applicata Vol.7, n4, 1995. */ Point VonMises::getRealization() const { for (;;) { const Scalar r1 = RandomGenerator::Generate(); const Scalar r2 = RandomGenerator::Generate(); const Scalar theta = ratioOfUniformsBound_ * (2.0 * r2 - 1.0) / r1; // Quick rejection if (std::abs(theta) > M_PI) continue; // Quick acceptance if (kappa_ * theta * theta < 4.0 - 4.0 * r1) { const Scalar y = theta + fmod(mu_ + M_PI, 2.0 * M_PI) - M_PI; return Point(1, (y > M_PI ? y - M_PI : (y < -M_PI ? y + M_PI : y))); } // Slow rejection if (kappa_ * std::cos(theta) < 2.0 * std::log(r1) + kappa_) continue; // Acceptance const Scalar y = theta + fmod(mu_ + M_PI, 2.0 * M_PI) - M_PI; return Point(1, (y > M_PI ? y - M_PI : (y < -M_PI ? y + M_PI : y))); } return Point(1, 0.0); } /* Get the DDF of the distribution */ Point VonMises::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (std::abs(x) > M_PI) return Point(1, 0.0); return Point(1, -kappa_ * std::sin(x - mu_) * computePDF(point)); } /* Get the PDF of the distribution */ Scalar VonMises::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (std::abs(x) > M_PI) return 0.0; return std::exp(computeLogPDF(point)); } Scalar VonMises::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0]; if (std::abs(x) > M_PI) return SpecFunc::LogMinScalar; return normalizationFactor_ + kappa_ * std::cos(x - mu_); } /* Parameters value accessor */ Point VonMises::getParameter() const { Point point(2); point[0] = mu_; point[1] = kappa_; return point; } void VonMises::setParameter(const Point & parameter) { if (parameter.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected 2 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = VonMises(parameter[0], parameter[1]); setWeight(w); } /* Parameters description accessor */ Description VonMises::getParameterDescription() const { Description description(2); description[0] = "mu"; description[1] = "kappa"; return description; } /* Method save() stores the object through the StorageManager */ void VonMises::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "mu_", mu_ ); adv.saveAttribute( "kappa_", kappa_ ); } /* Check if the distribution is elliptical */ Bool VonMises::isElliptical() const { return mu_ == 0.0; } /* Method load() reloads the object from the StorageManager */ void VonMises::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "mu_", mu_ ); adv.loadAttribute( "kappa_", kappa_ ); update(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Weibull.cxx000066400000000000000000000322251307543307100240770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Weibull distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Weibull.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Weibull); static const Factory Factory_Weibull; /* Default constructor */ Weibull::Weibull() : ContinuousDistribution() , alpha_(1.0) , beta_(1.0) , gamma_(0.0) { setName("Weibull"); setDimension(1); computeRange(); } /* Parameters constructor */ Weibull::Weibull(const Scalar alpha, const Scalar beta, const Scalar gamma) : ContinuousDistribution() , alpha_(0.0) , beta_(0.0) , gamma_(gamma) { setName("Weibull"); setAlphaBeta(alpha, beta); setDimension(1); } /* Comparison operator */ Bool Weibull::operator ==(const Weibull & other) const { if (this == &other) return true; return (alpha_ == other.alpha_) && (beta_ == other.beta_) && (gamma_ == other.gamma_); } Bool Weibull::equals(const DistributionImplementation & other) const { const Weibull* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Weibull::__repr__() const { OSS oss(true); oss << "class=" << Weibull::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " alpha=" << alpha_ << " beta=" << beta_ << " gamma=" << gamma_; return oss; } String Weibull::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(alpha = " << alpha_ << ", beta = " << beta_ << ", gamma = " << gamma_ << ")"; return oss; } /* Virtual constructor */ Weibull * Weibull::clone() const { return new Weibull(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Weibull::computeRange() { const Point lowerBound(1, gamma_); const Point upperBound(computeUpperBound()); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, false); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get one realization of the distribution */ Point Weibull::getRealization() const { return Point(1, gamma_ + alpha_ * std::pow(-std::log(1.0 - RandomGenerator::Generate()), 1.0 / beta_)); } /* Get the DDF of the distribution */ Point Weibull::computeDDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return Point(1, 0.0); const Scalar powX = std::pow(x / alpha_, beta_); return Point(1, (beta_ * (1.0 - powX) - 1.0) / (x * x) * beta_ * powX * std::exp(-powX)); } /* Get the PDF of the distribution */ Scalar Weibull::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return std::exp(computeLogPDF(point)); } Scalar Weibull::computeLogPDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return SpecFunc::LogMinScalar; const Scalar y = x / alpha_; return std::log(beta_) + (beta_ - 1.0) * std::log(y) - std::log(alpha_) - std::pow(y, beta_); } /* Get the CDF of the distribution */ Scalar Weibull::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 0.0; return -expm1(-std::pow(x / alpha_, beta_)); } Scalar Weibull::computeComplementaryCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; if (x <= 0.0) return 1.0; return std::exp(-std::pow(x / alpha_, beta_)); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Weibull::computeCharacteristicFunction(const Scalar x) const { /* X=mu+sigma*Y; phi_X(u)=E(exp(I*u*(mu+sigma*Y)))=exp(I*u*mu)*E(I*u*sigma*Y)=exp(I*u*mu)*phi_Y(sigma*u) phi_Y(u)=1+(\sum_{r=1}^{\infty}(iu)^r\frac{\Gamma(r/\lambda)}{\Gamma(r)} */ if (x == 0.0) return 1.0; // Special case: beta == 1 -> exponential distribution if (beta_ == 1.0) return 1.0 / Complex(1.0, -x / alpha_); // If beta < 1.0, the series based on the Gamma function is divergente so use the generic implementation if (beta_ < 1.0) return DistributionImplementation::computeCharacteristicFunction(x); Complex value(1.0); const Scalar u = x * alpha_; const Scalar sign = x < 0.0 ? -1.0 : 1.0; const Scalar logAbsU = std::log(std::abs(u)); Scalar oldNorm = 0.0; Scalar norm = oldNorm; UnsignedInteger r = 1; Bool increasing = true; while (increasing || (norm > std::abs(value) * SpecFunc::ScalarEpsilon)) { const Scalar term1 = std::exp(r * logAbsU - SpecFunc::LogGamma(r) + SpecFunc::LogGamma(r / beta_)); ++r; const Scalar term2 = std::exp(r * logAbsU - SpecFunc::LogGamma(r) + SpecFunc::LogGamma(r / beta_)); ++r; const Scalar term3 = std::exp(r * logAbsU - SpecFunc::LogGamma(r) + SpecFunc::LogGamma(r / beta_)); ++r; const Scalar term4 = std::exp(r * logAbsU - SpecFunc::LogGamma(r) + SpecFunc::LogGamma(r / beta_)); ++r; const Complex term((term4 - term2) / beta_, sign * (term1 - term3) / beta_); oldNorm = norm; norm = std::abs(term); // If the term grows too much, the cancelation will be too large if (norm > 1e3) return DistributionImplementation::computeCharacteristicFunction(x); value += term; increasing = norm > oldNorm; } value *= std::exp(Complex(0.0, x * gamma_)); return value; } /* Get the PDFGradient of the distribution */ Point Weibull::computePDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point pdfGradient(3, 0.0); if (x <= 0.0) return pdfGradient; const Scalar powX = std::pow(x / alpha_, beta_); const Scalar factor = powX / x * std::exp(-powX); pdfGradient[0] = factor * (powX - 1.0) * beta_ * beta_ / alpha_; pdfGradient[1] = factor * (1.0 + (1.0 - powX) * std::log(powX)); pdfGradient[2] = factor * (1.0 - beta_ + beta_ * powX) / x * beta_; return pdfGradient; } /* Get the CDFGradient of the distribution */ Point Weibull::computeCDFGradient(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar x = point[0] - gamma_; Point cdfGradient(3, 0.0); if (x <= 0.0) return cdfGradient; const Scalar powX = std::pow(x / alpha_, beta_); const Scalar factor = powX * std::exp(-powX); cdfGradient[0] = -factor * beta_ / alpha_; cdfGradient[1] = factor * std::log(x / alpha_); cdfGradient[2] = -factor * beta_ / x; return cdfGradient; } /* Get the quantile of the distribution */ Scalar Weibull::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (tail) return gamma_ + alpha_ * std::pow(-std::log(prob), 1.0 / beta_); return gamma_ + alpha_ * std::pow(-std::log(1.0 - prob), 1.0 / beta_); } /* compute the mean of the distribution */ void Weibull::computeMean() const { mean_ = Point(1, gamma_ + alpha_ * SpecFunc::Gamma(1.0 + 1.0 / beta_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Weibull::getStandardDeviation() const { return Point(1, alpha_ * std::sqrt(SpecFunc::Gamma(1.0 + 2.0 / beta_) - std::pow(SpecFunc::Gamma(1.0 + 1.0 / beta_), 2.0))); } /* Get the skewness of the distribution */ Point Weibull::getSkewness() const { const Scalar gamma1 = SpecFunc::Gamma(1.0 + 1.0 / beta_); const Scalar gamma1_2 = gamma1 * gamma1; const Scalar gamma2 = SpecFunc::Gamma(1.0 + 2.0 / beta_); const Scalar gamma3 = SpecFunc::Gamma(1.0 + 3.0 / beta_); return Point(1, (2.0 * gamma1_2 * gamma1 - 3.0 * gamma1 * gamma2 + gamma3) / std::pow((gamma2 - gamma1_2), 1.5)); } /* Get the kurtosis of the distribution */ Point Weibull::getKurtosis() const { const Scalar gamma1 = SpecFunc::Gamma(1.0 + 1.0 / beta_); const Scalar gamma1_2 = gamma1 * gamma1; const Scalar gamma2 = SpecFunc::Gamma(1.0 + 2.0 / beta_); const Scalar gamma3 = SpecFunc::Gamma(1.0 + 3.0 / beta_); const Scalar gamma4 = SpecFunc::Gamma(1.0 + 4.0 / beta_); return Point(1, (6.0 * gamma1_2 * gamma2 + gamma4 - 4.0 * gamma1 * gamma3 - 3.0 * gamma1_2 * gamma1_2) / std::pow(gamma2 - gamma1_2, 2.0)); } /* Compute the covariance of the distribution */ void Weibull::computeCovariance() const { covariance_ = CovarianceMatrix(1); covariance_(0, 0) = std::pow(getStandardDeviation()[0], 2.0); isAlreadyComputedCovariance_ = true; } /* Get the moments of the standardized distribution */ Point Weibull::getStandardMoment(const UnsignedInteger n) const { return Point(1, SpecFunc::Gamma(1.0 + n / beta_)); } /* Get the standard representative in the parametric family, associated with the standard moments */ Weibull::Implementation Weibull::getStandardRepresentative() const { return Weibull(1.0, beta_, 0.0).clone(); } /* Parameters value accessor */ Point Weibull::getParameter() const { Point point(3); point[0] = alpha_; point[1] = beta_; point[2] = gamma_; return point; } void Weibull::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = Weibull(parameter[0], parameter[1], parameter[2]); setWeight(w); } /* Parameters description accessor */ Description Weibull::getParameterDescription() const { Description description(3); description[0] = "alpha"; description[1] = "beta"; description[2] = "gamma"; return description; } /* Beta accessor */ void Weibull::setBeta(const Scalar beta) { if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Beta MUST be positive"; if (beta != beta_) { beta_ = beta; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Weibull::getBeta() const { return beta_; } /* Alpha accessor */ void Weibull::setAlpha(const Scalar alpha) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (alpha != alpha_) { alpha_ = alpha; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } Scalar Weibull::getAlpha() const { return alpha_; } /* Alpha Beta accessor */ void Weibull::setAlphaBeta(const Scalar alpha, const Scalar beta) { if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Beta MUST be positive"; if ((alpha != alpha_) || (beta != beta_)) { alpha_ = alpha; beta_ = beta; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } } /* Gamma accessor */ void Weibull::setGamma(const Scalar gamma) { if (gamma != gamma_) { gamma_ = gamma; isAlreadyComputedMean_ = false; // The covariance does not depend on gamma computeRange(); } } Scalar Weibull::getGamma() const { return gamma_; } /* Method save() stores the object through the StorageManager */ void Weibull::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "alpha_", alpha_ ); adv.saveAttribute( "beta_", beta_ ); adv.saveAttribute( "gamma_", gamma_ ); } /* Method load() reloads the object from the StorageManager */ void Weibull::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "alpha_", alpha_ ); adv.loadAttribute( "beta_", beta_ ); adv.loadAttribute( "gamma_", gamma_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/WeibullFactory.cxx000066400000000000000000000070151307543307100254260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Weibull distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/WeibullFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/WeibullMuSigma.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WeibullFactory); static const Factory Factory_WeibullFactory; /* Default constructor */ WeibullFactory::WeibullFactory() : DistributionFactoryImplementation() { // Nothing to do } /* Virtual constructor */ WeibullFactory * WeibullFactory::clone() const { return new WeibullFactory(*this); } /* Here is the interface that all derived class must implement */ WeibullFactory::Implementation WeibullFactory::build(const Sample & sample) const { return buildAsWeibull(sample).clone(); } WeibullFactory::Implementation WeibullFactory::build(const Point & parameters) const { return buildAsWeibull(parameters).clone(); } WeibullFactory::Implementation WeibullFactory::build() const { return buildAsWeibull().clone(); } Weibull WeibullFactory::buildAsWeibull(const Sample & sample) const { const Scalar size = sample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Weibull distribution from an empty sample"; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: can build a Weibull distribution only from a sample of dimension 1, here dimension=" << sample.getDimension(); const Scalar xMin = sample.getMin()[0]; Scalar gamma = xMin - std::abs(xMin) / (2.0 + size); const Scalar mean = sample.computeMean()[0]; const Scalar sigma = sample.computeStandardDeviationPerComponent()[0]; if (!SpecFunc::IsNormal(gamma)) throw InvalidArgumentException(HERE) << "Error: cannot build a Weibull distribution if data contains NaN or Inf"; try { Point parameters(3); parameters[0] = mean; parameters[1] = sigma; parameters[2] = gamma; Weibull result(buildAsWeibull(WeibullMuSigma()(parameters))); result.setDescription(sample.getDescription()); return result; } // Here we are in the case of a (nearly) Dirac distribution catch (InvalidArgumentException) { if (gamma == 0.0) gamma = SpecFunc::ScalarEpsilon; Weibull result(100.0 * std::abs(gamma) * SpecFunc::ScalarEpsilon, 1.0, gamma); result.setDescription(sample.getDescription()); return result; } } Weibull WeibullFactory::buildAsWeibull(const Point & parameters) const { try { Weibull distribution; distribution.setParameter(parameters); return distribution; } catch (InvalidArgumentException) { throw InvalidArgumentException(HERE) << "Error: cannot build a Weibull distribution from the given parameters"; } } Weibull WeibullFactory::buildAsWeibull() const { return Weibull(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/WeibullMuSigma.cxx000066400000000000000000000171131307543307100253610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Weibull distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/WeibullFactory.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/WeibullMuSigma.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WeibullMuSigma); /* Default constructor */ WeibullMuSigma::WeibullMuSigma() : DistributionParametersImplementation() , mu_(1.0) , sigma_(1.0) , gamma_(0.) { // Nothing to do } WeibullMuSigma::WeibullMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma) : DistributionParametersImplementation() , mu_(mu) , sigma_(sigma) , gamma_(gamma) { if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; } /* Virtual constructor */ WeibullMuSigma * WeibullMuSigma::clone() const { return new WeibullMuSigma(*this); } /* Comparison operator */ Bool WeibullMuSigma::operator ==(const WeibullMuSigma & other) const { return (this == &other); } /* Build a distribution based on a set of native parameters */ Distribution WeibullMuSigma::getDistribution() const { Point newParameters(3); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = gamma_; Point nativeParameters(operator()(newParameters)); return WeibullFactory().build(nativeParameters); } /* Compute jacobian / native parameters */ Matrix WeibullMuSigma::gradient() const { Point newParameters(3); newParameters[0] = mu_; newParameters[1] = sigma_; newParameters[2] = gamma_; // Use finite difference technique const Scalar epsilon = 1e-5; Point pt = Point(3); pt[0] = epsilon; const Scalar dalphadmu = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[0]; const Scalar dbetadmu = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[1]; pt[0] = 0.; pt[1] = epsilon; const Scalar dalphadsigma = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[0]; const Scalar dbetadsigma = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[1]; pt[1] = 0.; pt[2] = epsilon; const Scalar dalphadgamma = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[0]; const Scalar dbetadgamma = ((operator()(newParameters + pt) - operator()(newParameters - pt)) / (2 * epsilon))[1]; SquareMatrix nativeParametersGradient(IdentityMatrix(3)); nativeParametersGradient(0, 0) = dalphadmu; nativeParametersGradient(1, 0) = dalphadsigma; nativeParametersGradient(2, 0) = dalphadgamma; nativeParametersGradient(0, 1) = dbetadmu; nativeParametersGradient(1, 1) = dbetadsigma; nativeParametersGradient(2, 1) = dbetadgamma; return nativeParametersGradient; } /* Conversion operator */ Point WeibullMuSigma::operator () (const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar mu = inP[0]; const Scalar sigma = inP[1]; const Scalar gamma = inP[2]; if (!(sigma > 0.0)) throw InvalidArgumentException(HERE) << "sigma must be > 0, here sigma=" << sigma; if (mu <= gamma) throw InvalidArgumentException(HERE) << "mu must be greater than gamma, here mu=" << mu << " and gamma=" << gamma; Scalar alpha = 0.; Scalar beta = 0.; const Scalar ratio = 1.0 + pow(sigma / (mu - gamma), 2.0); Scalar t = -1.0; Scalar betaMin = 1.0; Scalar betaMax = 1.0; Scalar step = 0.5; // Bracketing interval // Case beta < 1, i.e. ratio > 2 if (ratio > 2) { do { betaMin -= step; step *= 0.5; t = exp(SpecFunc::LnGamma(1.0 + 2.0 / betaMin) - 2.0 * SpecFunc::LnGamma(1.0 + 1.0 / betaMin)); } while (t < ratio); // Here, we know that betaMin <= beta < betaMin + 2.0 * step betaMax = betaMin + 2.0 * step; } // Case beta >= 1, i.e. ratio <= 2 else { do { betaMax += step; step *= 2.0; t = exp(SpecFunc::LnGamma(1.0 + 2.0 / betaMax) - 2.0 * SpecFunc::LnGamma(1.0 + 1.0 / betaMax)); } while (t >= ratio); // Here, we know that betaMax - 0.5 * step <= beta < betaMax betaMin = betaMax - 0.5 * step; } // Bisection loop for (;;) { beta = 0.5 * (betaMin + betaMax); // Convergence if (betaMax - betaMin <= ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon") * (1.0 + std::abs(betaMax + betaMin))) { alpha = (mu - gamma) / SpecFunc::Gamma(1.0 + 1.0 / beta); break; } // Non convergence, one step further t = exp(SpecFunc::LnGamma(1.0 + 2.0 / beta) - 2.0 * SpecFunc::LnGamma(1.0 + 1.0 / beta)); if (t < ratio) betaMax = beta; else betaMin = beta; } Point nativeParameters(inP); nativeParameters[0] = alpha; nativeParameters[1] = beta; return nativeParameters; } Point WeibullMuSigma::inverse(const Point & inP) const { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); const Scalar alpha = inP[0]; const Scalar beta = inP[1]; const Scalar gamma = inP[2]; if (!(alpha > 0.0)) throw InvalidArgumentException(HERE) << "Alpha MUST be positive"; if (!(beta > 0.0)) throw InvalidArgumentException(HERE) << "Beta MUST be positive"; const Scalar mu = gamma + alpha * SpecFunc::Gamma(1.0 + 1.0 / beta); const Scalar sigma = alpha * std::sqrt(SpecFunc::Gamma(1.0 + 2.0 / beta) - std::pow(SpecFunc::Gamma(1.0 + 1.0 / beta), 2.0)); Point muSigmaParameters(inP); muSigmaParameters[0] = mu; muSigmaParameters[1] = sigma; return muSigmaParameters; } /* Parameters value and description accessor */ void WeibullMuSigma::setValues(const Point & inP) { if (inP.getDimension() != 3) throw InvalidArgumentException(HERE) << "the given point must have dimension=3, here dimension=" << inP.getDimension(); mu_ = inP[0]; sigma_ = inP[1]; gamma_ = inP[2]; } Point WeibullMuSigma::getValues() const { Point point(3); point[0] = mu_; point[1] = sigma_; point[2] = gamma_; return point; } Description WeibullMuSigma::getDescription() const { Description description(3); description[0] = "mu"; description[1] = "sigma"; description[2] = "gamma"; return description; } /* String converter */ String WeibullMuSigma::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " name=" << getName() << " mu=" << mu_ << " sigma=" << sigma_ << " gamma=" << gamma_; return oss; } String WeibullMuSigma::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(mu = " << mu_ << ", sigma = " << sigma_ << ", gamma = " << gamma_ << ")"; return oss; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/Wishart.cxx000066400000000000000000000322611307543307100241150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Wishart distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/Wishart.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ChiSquare.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Wishart); static const Factory Factory_Wishart; /* Default constructor */ Wishart::Wishart() : ContinuousDistribution() , cholesky_() , nu_(1.0) { setName("Wishart"); setV(CovarianceMatrix(1)); computeRange(); update(); } /* Parameters constructor */ Wishart::Wishart(const CovarianceMatrix & v, const Scalar nu) : ContinuousDistribution() , cholesky_() , nu_(-1.0) { setName("Wishart"); if (nu + 1 <= v.getDimension()) throw InvalidArgumentException(HERE) << "Error: the number of degrees of freedom nu=" << nu << "is not greater than dimension-1=" << static_cast< SignedInteger > (v.getDimension()) - 1; setV(v); setNu(nu); } /* Comparison operator */ Bool Wishart::operator ==(const Wishart & other) const { if (this == &other) return true; return (nu_ == other.nu_) && (cholesky_ == other.cholesky_); } Bool Wishart::equals(const DistributionImplementation & other) const { const Wishart* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String Wishart::__repr__() const { OSS oss(true); oss << "class=" << Wishart::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " cholesky=" << cholesky_ << " nu=" << nu_; return oss; } String Wishart::__str__(const String & offset) const { OSS oss(false); oss << offset << getClassName() << "(V = \n" << getV() << ", nu = " << nu_ << ")"; return oss; } /* Virtual constructor */ Wishart * Wishart::clone() const { return new Wishart(*this); } /* Compute the numerical range of the distribution given the parameters values */ void Wishart::computeRange() { const UnsignedInteger p = cholesky_.getDimension(); const Scalar bound = ChiSquare(1.0).getRange().getUpperBound()[0]; UnsignedInteger index = 0; Point upper(getDimension()); Point lower(getDimension()); for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { upper[index] = std::sqrt(cholesky_(i, i) * cholesky_(j, j)) * bound; lower[index] = (i == j ? 0.0 : -upper[index]); ++index; } setRange(Interval(lower, upper, Interval::BoolCollection(index, true), Interval::BoolCollection(index, false))); } /* Get one realization of the distribution */ Point Wishart::getRealization() const { const CovarianceMatrix X(getRealizationAsMatrix()); const UnsignedInteger p = X.getDimension(); Point realization(getDimension()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { realization[index] = X(i, j); ++index; } return realization; } /* Get one realization of the distribution as a covariance matrix We use the Barlett decomposition X = LAA'L' where LL' = V is the covariance parameter of the distribution and A is a lower triangular matrix */ CovarianceMatrix Wishart::getRealizationAsMatrix() const { const UnsignedInteger p = cholesky_.getDimension(); TriangularMatrix A(p); // The diagonal elements are chi-distributed for (UnsignedInteger i = 0; i < p; ++i) { A(i, i) = std::sqrt(2.0 * DistFunc::rGamma(0.5 * (nu_ - i))); // The off-diagonal elements are normaly distributed for (UnsignedInteger j = 0; j < i; ++j) A(i, j) = DistFunc::rNormal(); } const TriangularMatrix M((cholesky_ * A).getImplementation()); return (M * M.transpose()).getImplementation(); } /* Get the PDF of the distribution */ Scalar Wishart::computePDF(const CovarianceMatrix & m) const { if (m.getDimension() != cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given matrix must have dimension=" << cholesky_.getDimension() << ", here dimension=" << m.getDimension(); const Scalar logPDF = computeLogPDF(m); const Scalar pdf = (logPDF == SpecFunc::LogMinScalar ? 0.0 : std::exp(logPDF)); return pdf; } Scalar Wishart::computePDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const Scalar logPDF = computeLogPDF(point); const Scalar pdf = (logPDF == SpecFunc::LogMinScalar) ? 0.0 : std::exp(logPDF); return pdf; } Scalar Wishart::computeLogPDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); const UnsignedInteger p = cholesky_.getDimension(); // Build the covariance matrix associated to the given point CovarianceMatrix m(p); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { m(i, j) = point[index]; ++index; } return computeLogPDF(m); } Scalar Wishart::computeLogPDF(const CovarianceMatrix & m) const { if (m.getDimension() != cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given matrix must have dimension=" << cholesky_.getDimension() << ", here dimension=" << m.getDimension(); const UnsignedInteger p = cholesky_.getDimension(); try { // If the Cholesky factor is not defined, it means that M is not symmetric positive definite (an exception is thrown) and the PDF is zero TriangularMatrix X(CovarianceMatrix(m).computeCholesky()); // Compute the determinant of the Cholesky factor, ie the square-root of the determinant of M Scalar logPDF = logNormalizationFactor_; // Here, the diagonal of X is positive for (UnsignedInteger i = 0; i < p; ++i) logPDF += std::log(X(i, i)); logPDF *= nu_ - p - 1.0; // V^{-1}M = (CC')^{-1}(XX') // = C'^{-1}(C^{-1}X)X' TriangularMatrix A(cholesky_.solveLinearSystem(X).getImplementation()); SquareMatrix B((A * X.transpose()).getImplementation()); SquareMatrix C(cholesky_.transpose().solveLinearSystem(B).getImplementation()); logPDF -= 0.5 * C.computeTrace(); return logPDF; } catch (...) { return SpecFunc::LogMinScalar; } } /* Get the CDF of the distribution */ Scalar Wishart::computeCDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=" << getDimension() << ", here dimension=" << point.getDimension(); return ContinuousDistribution::computeCDF(point); } /* Compute the mean of the distribution */ void Wishart::computeMean() const { const CovarianceMatrix V((cholesky_ * cholesky_.transpose()).getImplementation()); const UnsignedInteger p = cholesky_.getDimension(); mean_ = Point(getDimension()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { mean_[index] = nu_ * V(i, j); ++index; } isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point Wishart::getStandardDeviation() const /*throw(NotDefinedException)*/ { const UnsignedInteger p = cholesky_.getDimension(); Point sigma(getDimension()); const CovarianceMatrix V(getV()); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { sigma[index] = std::sqrt(nu_ * (V(i, j) * V(j, i) + V(i, i) * V(j, j))); ++index; } return sigma; } /* Parameters value and description accessor */ Wishart::PointWithDescriptionCollection Wishart::getParametersCollection() const { PointWithDescription point(getDimension() + 1); Description description(point.getDimension()); const UnsignedInteger p = cholesky_.getDimension(); UnsignedInteger index = 0; const CovarianceMatrix V(getCovariance()); for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { point[index] = V(i, j); description[index] = String(OSS() << "v_" << i << "_" << j); ++index; } point[index] = nu_; description[index] = "nu"; point.setDescription(description); PointWithDescriptionCollection parameters(point.getDimension()); return parameters; } void Wishart::setParametersCollection(const PointCollection & parametersCollection) { const Scalar w = getWeight(); const Scalar pReal = 0.5 * std::sqrt(8.0 * parametersCollection.getSize() - 7.0) - 0.5; const UnsignedInteger p = static_cast< UnsignedInteger >(pReal); if (pReal != p) throw InvalidArgumentException(HERE) << "Error: the given parameters cannot be converted into a covariance matrix and a number of degrees of freedom."; CovarianceMatrix V(p); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) for (UnsignedInteger j = 0; j <= i; ++j) { V(i, j) = parametersCollection[0][index]; ++index; } const Scalar nu = parametersCollection[0][index]; *this = Wishart(V, nu); setWeight(w); } Point Wishart::getParameter() const { const CovarianceMatrix V(getCovariance()); const UnsignedInteger p = V.getDimension(); Point point((p * (p + 1)) / 2 + 1); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++ i) for (UnsignedInteger j = 0; j <= i; ++ j) { point[index] = V(i, j); ++ index; } point[index] = nu_; return point; } void Wishart::setParameter(const Point & parameter) { const UnsignedInteger size = parameter.getSize(); const Scalar pReal = 0.5 * std::sqrt(8.0 * size - 7.0) - 0.5; const UnsignedInteger p = static_cast< UnsignedInteger >(pReal); if (pReal != p) throw InvalidArgumentException(HERE) << "Error: the given parameter cannot be converted into a covariance matrix and a number of degrees of freedom."; CovarianceMatrix V(p); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++ i) for (UnsignedInteger j = 0; j <= i; ++ j) { V(i, j) = parameter[index]; ++ index; } const Scalar nu = parameter[size - 1]; const Scalar w = getWeight(); *this = Wishart(V, nu); setWeight(w); } Description Wishart::getParameterDescription() const { const UnsignedInteger p = getDimension(); Description description((p * (p + 1)) / 2 + 1); UnsignedInteger index = 0; for (UnsignedInteger i = 0; i < p; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { description[index] = (OSS() << "v_" << i << "_" << j); } } description[index] = "nu"; return description; } /* V accessor */ void Wishart::setV(const CovarianceMatrix & v) { try { cholesky_ = CovarianceMatrix(v).computeCholesky(); } catch(...) { throw InvalidArgumentException(HERE) << "Error: V must be positive definite"; } const UnsignedInteger p = cholesky_.getDimension(); setDimension((p * (p + 1)) / 2); isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; computeRange(); } CovarianceMatrix Wishart::getV() const { return (cholesky_ * cholesky_.transpose()).getImplementation(); } /* Nu accessor */ void Wishart::setNu(const Scalar nu) { if (nu + 1.0 <= cholesky_.getDimension()) throw InvalidArgumentException(HERE) << "Error: nu must be greater than V dimension - 1"; if (nu != nu_) { nu_ = nu; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; update(); computeRange(); } } Scalar Wishart::getNu() const { return nu_; } /* Compute the normalization factor on log-scale */ void Wishart::update() { const UnsignedInteger p = cholesky_.getDimension(); logNormalizationFactor_ = -0.5 * p * (nu_ * M_LN2 + 0.5 * (p - 1) * std::log(M_PI)); for (UnsignedInteger i = 0; i < p; ++i) logNormalizationFactor_ -= SpecFunc::LogGamma(0.5 * (nu_ - i)) + nu_ * std::log(cholesky_(i, i)); } /* Method save() stores the object through the StorageManager */ void Wishart::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "cholesky_", cholesky_ ); adv.saveAttribute( "nu_", nu_ ); adv.saveAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void Wishart::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "cholesky_", cholesky_ ); adv.loadAttribute( "nu_", nu_ ); adv.loadAttribute( "logNormalizationFactor_", logNormalizationFactor_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/ZipfMandelbrot.cxx000066400000000000000000000245171307543307100254210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ZipfMandelbrot distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ZipfMandelbrot.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ZipfMandelbrot); static const Factory Factory_ZipfMandelbrot; /* Default constructor */ ZipfMandelbrot::ZipfMandelbrot() : DiscreteDistribution() , harmonicNumbers_(0) , n_(1) , q_(0.0) , s_(1.0) { setName("ZipfMandelbrot"); // We set the dimension of the ZipfMandelbrot distribution setDimension( 1 ); computeRange(); computeHarmonicNumbers(); } /* Parameters constructor */ ZipfMandelbrot::ZipfMandelbrot(const UnsignedInteger n, const Scalar q, const Scalar s ) : DiscreteDistribution() , harmonicNumbers_(ScalarCollection(0)) , n_(n) , q_(q) , s_(s) { setName("ZipfMandelbrot"); // We set the dimension of the ZipfMandelbrot distribution setDimension( 1 ); computeRange(); setN(n); setQ(q); setS(s); computeHarmonicNumbers(); } /* Comparison operator */ Bool ZipfMandelbrot::operator ==(const ZipfMandelbrot & other) const { if (this == &other) return true; return (n_ == other.n_) && (q_ == other.q_) && (s_ == other.s_); } Bool ZipfMandelbrot::equals(const DistributionImplementation & other) const { const ZipfMandelbrot* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String ZipfMandelbrot::__repr__() const { OSS oss; oss << "class=" << ZipfMandelbrot::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " n=" << n_ << " q=" << q_ << " s=" << s_; return oss; } String ZipfMandelbrot::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(n = " << n_ << ", q = " << q_ << ", s = " << s_ << ")"; return oss; } /* Virtual constructor */ ZipfMandelbrot * ZipfMandelbrot::clone() const { return new ZipfMandelbrot(*this); } /* Get one realization of the distribution */ Point ZipfMandelbrot::getRealization() const { const Scalar uniformRealization = 1.0 - RandomGenerator::Generate(); ScalarCollection::const_iterator it(lower_bound(harmonicNumbers_.begin(), harmonicNumbers_.end(), uniformRealization * getHarmonicNumbers(n_)) ); return Point(1, it - harmonicNumbers_.begin() + 1); } /* Get the PDF of the distribution */ Scalar ZipfMandelbrot::computePDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if ((k < 1 - supportEpsilon_) || (std::abs(k - round(k)) > supportEpsilon_) || (k > n_ + supportEpsilon_)) return 0.0; return 1.0 / (std::pow(round(k) + q_, s_) * getHarmonicNumbers(n_) ); } /* Get the CDF of the distribution */ Scalar ZipfMandelbrot::computeCDF(const Point & point) const { if (point.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Scalar k = point[0]; if (k < 1 - supportEpsilon_) return 0.0; if (k > n_ - 1 + supportEpsilon_) return 1.0; Scalar value (getHarmonicNumbers(static_cast(round(k))) / getHarmonicNumbers(n_)); return value; } /* Compute the mean of the distribution */ void ZipfMandelbrot::computeMean() const { Scalar value = 0.0; for (UnsignedInteger i = 1; i <= n_; ++i) value += i * std::pow(i + q_, -s_); mean_ = Point(1, value / getHarmonicNumbers(n_)); isAlreadyComputedMean_ = true; } /* Get the standard deviation of the distribution */ Point ZipfMandelbrot::getStandardDeviation() const { return Point(1, std::sqrt(getCovariance()(0, 0))); } /* Get the skewness of the distribution */ Point ZipfMandelbrot::getSkewness() const { Scalar mean = getMean()[0]; Scalar std = getStandardDeviation()[0]; Scalar value = 0.0; for (UnsignedInteger i = 1; i <= n_; ++i) value += std::pow((i - mean) / std, 3) * std::pow(i + q_, -s_); return Point(1, value / getHarmonicNumbers(n_)); } /* Get the kurtosis of the distribution */ Point ZipfMandelbrot::getKurtosis() const { Scalar mean = getMean()[0]; Scalar std = getStandardDeviation()[0]; Scalar value = 0.0; for (UnsignedInteger i = 1; i <= n_; ++i) value += std::pow((i - mean) / std, 4) * std::pow(i + q_, -s_); return Point(1, value / getHarmonicNumbers(n_)); } /* Compute the covariance of the distribution */ void ZipfMandelbrot::computeCovariance() const { Scalar mean = getMean()[0]; Scalar value = 0.0; for (UnsignedInteger i = 1; i <= n_; ++i) value += std::pow(i - mean, 2) * std::pow(i + q_, -s_); covariance_ = CovarianceMatrix(1); covariance_(0, 0) = value / getHarmonicNumbers(n_); isAlreadyComputedCovariance_ = true; } /* Get the quantile of the distribution */ Scalar ZipfMandelbrot::computeScalarQuantile(const Scalar prob, const Bool tail) const { return round(DiscreteDistribution::computeScalarQuantile(prob, tail)); } /* Check if the distribution is elliptical */ Bool ZipfMandelbrot::isElliptical() const { return n_ == 1; } /* Q accessor */ Scalar ZipfMandelbrot::getQ() const { return q_; } void ZipfMandelbrot::setQ(const Scalar q) { if (q < 0) throw InvalidArgumentException(HERE) << "q must be >= 0"; if (q != q_) { q_ = q; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; } } /* S accessor */ Scalar ZipfMandelbrot::getS() const { return s_; } void ZipfMandelbrot::setS(const Scalar s) { if (s <= 0) throw InvalidArgumentException(HERE) << "s must be > 0"; if (s != s_) { s_ = s; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; } } /* N accessor */ UnsignedInteger ZipfMandelbrot::getN() const { return n_; } void ZipfMandelbrot::setN(const UnsignedInteger n) { if (n == 0) throw InvalidArgumentException(HERE) << "N must be > 0"; if (n != n_) { n_ = n; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyCreatedGeneratingFunction_ = false; computeRange(); } } /* Compute the numerical range of the distribution given the parameters values */ void ZipfMandelbrot::computeRange() { const Point lowerBound(1, 1.0); const Point upperBound(1, n_); const Interval::BoolCollection finiteLowerBound(1, true); const Interval::BoolCollection finiteUpperBound(1, true); setRange(Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound)); } /* Get the support of a discrete distribution that intersect a given interval */ Sample ZipfMandelbrot::getSupport(const Interval & interval) const { if (interval.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension that does not match the distribution dimension."; const UnsignedInteger kMin = static_cast< UnsignedInteger > (std::max(ceil(interval.getLowerBound()[0]), 1.0)); const UnsignedInteger kMax = static_cast< UnsignedInteger > (std::min(floor(interval.getUpperBound()[0]), Scalar(n_))); Sample result(0, 1); for (UnsignedInteger k = kMin; k <= kMax; ++k) result.add(Point(1, k)); return result; } /* Parameters value accessor */ Point ZipfMandelbrot::getParameter() const { Point point(3); point[0] = n_; point[1] = q_; point[2] = s_; return point; } void ZipfMandelbrot::setParameter(const Point & parameter) { if (parameter.getSize() != 3) throw InvalidArgumentException(HERE) << "Error: expected 3 values, got " << parameter.getSize(); const Scalar w = getWeight(); *this = ZipfMandelbrot(static_cast< UnsignedInteger >(round(parameter[0])), parameter[1], parameter[2]); setWeight(w); } /* Parametersdescription accessor */ Description ZipfMandelbrot::getParameterDescription() const { Description description(3); description[0] = "n"; description[1] = "q"; description[2] = "s"; return description; } /* Method save() stores the object through the StorageManager */ void ZipfMandelbrot::save(Advocate & adv) const { DiscreteDistribution::save(adv); adv.saveAttribute( "n_", n_ ); adv.saveAttribute( "q_", q_ ); adv.saveAttribute( "s_", s_ ); } /* Method load() reloads the object from the StorageManager */ void ZipfMandelbrot::load(Advocate & adv) { DiscreteDistribution::load(adv); adv.loadAttribute( "n_", n_ ); adv.loadAttribute( "q_", q_ ); adv.loadAttribute( "s_", s_ ); computeHarmonicNumbers(); computeRange(); } /* Method getHarmonicNumbers returns the k-th harmonic number for the current distribution */ Scalar ZipfMandelbrot::getHarmonicNumbers(const UnsignedInteger k ) const { if (k < 1) throw InvalidArgumentException(HERE) << "k must be >= 1" ; if (k > n_) throw InvalidArgumentException(HERE) << "k must be <= N"; return harmonicNumbers_[k - 1]; } /* Method computeHarmonicNumbers computes and stores the of the k harmonic numbers for k = 1..n harmonicNumbers_[i] = \sum_{l=1}^i 1./( (i+q)**s ) */ void ZipfMandelbrot::computeHarmonicNumbers() { harmonicNumbers_ = ScalarCollection(n_); harmonicNumbers_[0] = std::pow(1.0 + q_, -s_); for (UnsignedInteger i = 2; i <= n_; ++i) { const Scalar hiqs = std::pow(i + q_, -s_); harmonicNumbers_[i - 1] = harmonicNumbers_[i - 2] + hiqs; } } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Distribution/f2c.h000066400000000000000000000123711307543307100225730ustar00rootroot00000000000000/* f2c.h -- Standard Fortran to C header file */ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ #ifndef F2C_INCLUDE #define F2C_INCLUDE #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) typedef int integer; typedef unsigned int uinteger; #else typedef long int integer; typedef unsigned long int uinteger; #endif typedef char *address; typedef short int shortint; typedef float real; typedef double doublereal; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) typedef int logical; #else typedef long int logical; #endif typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) typedef long longint; /* system-dependent */ typedef unsigned long ulongint; /* system-dependent */ #else typedef long long longint; /* system-dependent - oh yeah*/ typedef unsigned long long ulongint; /* system-dependent - oh yeah*/ #endif #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a,b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) typedef int flag; typedef int ftnlen; typedef int ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real r; doublereal d; complex c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal)abs(x) #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) #define bit_test(a,b) ((a) >> (b) & 1) #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a,b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif openturns-1.9/lib/src/Uncertainty/Distribution/mvndstpack.c000066400000000000000000001470171307543307100242740ustar00rootroot00000000000000/* mvndstpack.f -- translated by f2c (version 20100827). You must link the resulting object file with libf2c: on Microsoft Windows system, link with libf2c.lib; on Linux or Unix systems, link with .../path/to/libf2c.a -lm or, if you install libf2c.a in a standard place, with -lf2c -lm -- in that order, at the end of the command line, as in cc *.o -lf2c -lm Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., http://www.netlib.org/f2c/libf2c.zip */ #include "f2c.h" /* Common Block Declarations */ struct { integer ivls; } dkblck_; #define dkblck_1 dkblck_ /* Table of constant values */ static doublereal c_b11 = 2.; static doublereal c_b12 = 1.; /* This file contains a short test program and MVNDST, a subroutine */ /* for computing multivariate normal distribution function values. */ /* The file is self contained and should compile without errors on (77) */ /* standard Fortran compilers. The test program demonstrates the use of */ /* MVNDST for computing MVN distribution values for a five dimensional */ /* example problem, with three different integration limit combinations. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* *********************************** */ /* COMENTED FOR OPENTURNS INCLUSION * */ /* *********************************** */ /* PROGRAM TSTNRM */ /* Test program for MVNDST */ /* DOUBLE PRECISION ABSEPS, RELEPS, VAL, ERR */ /* INTEGER N, NN, I, J, K, IJ, MAXPTS, IFT */ /* PARAMETER ( N = 5, NN = ( N - 1 )*N/2, MAXPTS = 5000*N*N*N ) */ /* PARAMETER ( ABSEPS = 0.00005, RELEPS = 0 ) */ /* DOUBLE PRECISION CORREL(NN), LOW(N), UP(N) */ /* INTEGER INFIN(N) */ /* Chen Problem */ /* DATA ( UP(I), I=1,N) /.0, 1.5198, 1.7817, 1.4755, 1.5949/ */ /* DATA (LOW(I), I=1,N) /.0, .0 , 1.7817, 1.4755, 1.5949/ */ /* DATA (INFIN(I), I=1,N)/ 1, 2 , 1 , 1 , 0 / */ /* DATA (CORREL(I),I=1,NN)/-0.707107,0.0,0.5,0.0,2*0.5,0.0,3*0.5/ */ /* PRINT '('' Test of MVNDST'')' */ /* PRINT '(12X, ''Requested Accuracy '',F8.5)', MAX(ABSEPS,RELEPS) */ /* PRINT '('' Number of Dimensions is '',I2)', N */ /* PRINT '('' Maximum # of Function Values is '',I7)', MAXPTS */ /* DO K = 1, 3 */ /* PRINT '(/'' I Limits'')' */ /* PRINT '(4X,''Lower Upper Lower Left of */ /* Correlation Matrix'')' */ /* IJ = 0 */ /* DO I = 1, N */ /* IF ( INFIN(I) .LT. 0 ) THEN */ /* PRINT '(I2, '' -infin infin '', 7F9.5)', */ /* & I, ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE IF ( INFIN(I) .EQ. 0 ) THEN */ /* PRINT '(I2, '' -infin'', F7.4, 1X, 7F9.5)', */ /* & I, UP(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE IF ( INFIN(I) .EQ. 1 ) THEN */ /* PRINT '(I2, F7.4, '' infin '', 7F9.5)', */ /* & I, LOW(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE */ /* PRINT '(I2, 2F7.4, 1X, 7F9.5)', */ /* & I, LOW(I), UP(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ENDIF */ /* IJ = IJ + I-1 */ /* END DO */ /* CALL MVNDST( N, LOW, UP, INFIN, CORREL, */ /* & MAXPTS, ABSEPS, RELEPS, ERR, VAL, IFT ) */ /* PRINT '('' Results for: MVNDST'')' */ /* PRINT '( '' Value : '', F12.6, I5 )', VAL, IFT */ /* PRINT '( '' Error Estimate : ('',F8.6,'')'' )', ERR */ /* INFIN(1) = INFIN(1) - 1 */ /* END DO */ /* END */ /* **************************************** */ /* END COMMENTED FOR OPENTURNS INCLUSION * */ /* **************************************** */ /* Subroutine */ int mvndst_(integer *n, doublereal *lower, doublereal *upper, integer *infin, doublereal *correl, integer *maxpts, doublereal * abseps, doublereal *releps, doublereal *error, doublereal *value, integer *inform__) { /* System generated locals */ integer i__1; /* Local variables */ static doublereal d__, e, rc; static integer infis; extern /* Subroutine */ int dkbvrc_(integer *, integer *, integer *, D_fp, doublereal *, doublereal *, doublereal *, doublereal *, integer * ); extern doublereal mvndfn_(), mvndnt_(integer *, doublereal *, doublereal * , doublereal *, integer *, integer *, doublereal *, doublereal *); /* A subroutine for computing multivariate normal probabilities. */ /* This subroutine uses an algorithm given in the paper */ /* "Numerical Computation of Multivariate Normal Probabilities", in */ /* J. of Computational and Graphical Stat., 1(1992), pp. 141-149, by */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : AlanGenz@wsu.edu */ /* Parameters */ /* N INTEGER, the number of variables. */ /* LOWER REAL, array of lower integration limits. */ /* UPPER REAL, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(I) < 0, Ith limits are (-infinity, infinity); */ /* if INFIN(I) = 0, Ith limits are (-infinity, UPPER(I)]; */ /* if INFIN(I) = 1, Ith limits are [LOWER(I), infinity); */ /* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)]. */ /* CORREL REAL, array of correlation coefficients; the correlation */ /* coefficient in row I column J of the correlation matrix */ /* should be stored in CORREL( J + ((I-2)*(I-1))/2 ), */ /* for J < I. */ /* THe correlation matrix must be positive semidefinite. */ /* MAXPTS INTEGER, maximum number of function values allowed. This */ /* parameter can be used to limit the time. A sensible */ /* strategy is to start with MAXPTS = 1000*N, and then */ /* increase MAXPTS if ERROR is too large. */ /* ABSEPS REAL absolute error tolerance. */ /* RELEPS REAL relative error tolerance. */ /* ERROR REAL estimated absolute error, with 99% confidence level. */ /* VALUE REAL estimated value for the integral */ /* INFORM INTEGER, termination status parameter: */ /* if INFORM = 0, normal completion with ERROR < EPS; */ /* if INFORM = 1, completion with ERROR > EPS and MAXPTS */ /* function vaules used; increase MAXPTS to */ /* decrease ERROR; */ /* if INFORM = 2, N > 500 or N < 1. */ /* Parameter adjustments */ --correl; --infin; --upper; --lower; /* Function Body */ if (*n > 500 || *n < 1) { *inform__ = 2; *value = 0.; *error = 1.; } else { rc = mvndnt_(n, &correl[1], &lower[1], &upper[1], &infin[1], &infis, & d__, &e); if (*n - infis == 0) { *value = 1.; *error = 0.; } else if (*n - infis == 1) { *value = e - d__; *error = 2e-16; } else { /* Call the lattice rule integration subroutine */ dkblck_1.ivls = 0; i__1 = *n - infis - 1; dkbvrc_(&i__1, &dkblck_1.ivls, maxpts, (D_fp)mvndfn_, abseps, releps, error, value, inform__); } } return 0; } /* mvndst_ */ doublereal mvndfn_0_(int n__, integer *n, doublereal *w, doublereal *correl, doublereal *lower, doublereal *upper, integer *infin, integer *infis, doublereal *d__, doublereal *e) { /* System generated locals */ integer i__1, i__2; doublereal ret_val, d__1, d__2; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ static doublereal a[500], b[500]; static integer i__, j; static doublereal y[500], ai, bi, di, ei; static integer ij, ik; static doublereal cov[125250], sum; static integer infa, infb, infi[500]; extern doublereal bvnmvn_(doublereal *, doublereal *, integer *, doublereal *), phinvs_(doublereal *); extern /* Subroutine */ int mvnlms_(doublereal *, doublereal *, integer *, doublereal *, doublereal *), covsrt_(integer *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, integer *); /* Integrand subroutine */ /* Parameter adjustments */ if (w) { --w; } if (correl) { --correl; } if (lower) { --lower; } if (upper) { --upper; } if (infin) { --infin; } /* Function Body */ switch(n__) { case 1: goto L_mvndnt; } ret_val = 1.; infa = 0; infb = 0; ik = 1; ij = 0; i__1 = *n + 1; for (i__ = 1; i__ <= i__1; ++i__) { sum = 0.; i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { ++ij; if (j < ik) { sum += cov[ij - 1] * y[j - 1]; } } if (infi[i__ - 1] != 0) { if (infa == 1) { /* Computing MAX */ d__1 = ai, d__2 = a[i__ - 1] - sum; ai = max(d__1,d__2); } else { ai = a[i__ - 1] - sum; infa = 1; } } if (infi[i__ - 1] != 1) { if (infb == 1) { /* Computing MIN */ d__1 = bi, d__2 = b[i__ - 1] - sum; bi = min(d__1,d__2); } else { bi = b[i__ - 1] - sum; infb = 1; } } ++ij; if (i__ == *n + 1 || cov[ij + ik] > 0.) { i__2 = (infa << 1) + infb - 1; mvnlms_(&ai, &bi, &i__2, &di, &ei); if (di >= ei) { ret_val = 0.; return ret_val; } else { ret_val *= ei - di; if (i__ <= *n) { d__1 = di + w[ik] * (ei - di); y[ik - 1] = phinvs_(&d__1); } ++ik; infa = 0; infb = 0; } } } return ret_val; /* Entry point for intialization. */ L_mvndnt: ret_val = 0.; /* Initialization and computation of covariance Cholesky factor. */ covsrt_(n, &lower[1], &upper[1], &correl[1], &infin[1], y, infis, a, b, cov, infi); if (*n - *infis == 1) { mvnlms_(a, b, infi, d__, e); } else if (*n - *infis == 2) { if (abs(cov[2]) > 0.) { /* Computing 2nd power */ d__1 = cov[1]; *d__ = sqrt(d__1 * d__1 + 1); if (infi[1] != 0) { a[1] /= *d__; } if (infi[1] != 1) { b[1] /= *d__; } d__1 = cov[1] / *d__; *e = bvnmvn_(a, b, infi, &d__1); *d__ = 0.; } else { if (infi[0] != 0) { if (infi[1] != 0) { a[0] = max(a[0],a[1]); } } else { if (infi[1] != 0) { a[0] = a[1]; } } if (infi[0] != 1) { if (infi[1] != 1) { b[0] = min(b[0],b[1]); } } else { if (infi[1] != 1) { b[0] = b[1]; } } if (infi[0] != infi[1]) { infi[0] = 2; } mvnlms_(a, b, infi, d__, e); } ++(*infis); } return ret_val; } /* mvndfn_ */ doublereal mvndfn_(integer *n, doublereal *w) { return mvndfn_0_(0, n, w, (doublereal *)0, (doublereal *)0, (doublereal *) 0, (integer *)0, (integer *)0, (doublereal *)0, (doublereal *)0); } doublereal mvndnt_(integer *n, doublereal *correl, doublereal *lower, doublereal *upper, integer *infin, integer *infis, doublereal *d__, doublereal *e) { return mvndfn_0_(1, n, (doublereal *)0, correl, lower, upper, infin, infis, d__, e); } /* Subroutine */ int mvnlms_(doublereal *a, doublereal *b, integer *infin, doublereal *lower, doublereal *upper) { extern doublereal mvnphi_(doublereal *); *lower = 0.; *upper = 1.; if (*infin >= 0) { if (*infin != 0) { *lower = mvnphi_(a); } if (*infin != 1) { *upper = mvnphi_(b); } } *upper = max(*upper,*lower); return 0; } /* mvnlms_ */ /* Subroutine */ int covsrt_(integer *n, doublereal *lower, doublereal *upper, doublereal *correl, integer *infin, doublereal *y, integer *infis, doublereal *a, doublereal *b, doublereal *cov, integer *infi) { /* System generated locals */ integer i__1, i__2, i__3, i__4; doublereal d__1; /* Builtin functions */ double sqrt(doublereal), exp(doublereal); /* Local variables */ static doublereal d__, e; static integer i__, j, k, l, m; static doublereal aj, bj; static integer ii, ij, il; static doublereal yl, yu, sum, amin, bmin, dmin__, emin; static integer jmin; extern /* Subroutine */ int rcswp_(integer *, integer *, doublereal *, doublereal *, integer *, integer *, doublereal *); static doublereal sumsq, cvdiag; extern /* Subroutine */ int dkswap_(doublereal *, doublereal *), mvnlms_( doublereal *, doublereal *, integer *, doublereal *, doublereal *) ; /* Subroutine to sort integration limits and determine Cholesky */ /* factor. */ /* Parameter adjustments */ --infi; --cov; --b; --a; --y; --infin; --correl; --upper; --lower; /* Function Body */ ij = 0; ii = 0; *infis = 0; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { a[i__] = 0.; b[i__] = 0.; infi[i__] = infin[i__]; if (infi[i__] < 0) { ++(*infis); } else { if (infi[i__] != 0) { a[i__] = lower[i__]; } if (infi[i__] != 1) { b[i__] = upper[i__]; } } i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { ++ij; ++ii; cov[ij] = correl[ii]; } ++ij; cov[ij] = 1.; } /* First move any doubly infinite limits to innermost positions. */ if (*infis < *n) { i__1 = *n - *infis + 1; for (i__ = *n; i__ >= i__1; --i__) { if (infi[i__] >= 0) { i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { if (infi[j] < 0) { rcswp_(&j, &i__, &a[1], &b[1], &infi[1], n, &cov[1]); goto L10; } } } } /* Sort remaining limits and determine Cholesky factor. */ L10: ii = 0; i__1 = *n - *infis; for (i__ = 1; i__ <= i__1; ++i__) { /* Determine the integration limits for variable with minimum */ /* expected probability and interchange that variable with Ith. */ dmin__ = 0.; emin = 1.; jmin = i__; cvdiag = 0.; ij = ii; i__2 = *n - *infis; for (j = i__; j <= i__2; ++j) { if (cov[ij + j] > 1e-10) { sumsq = sqrt(cov[ij + j]); sum = 0.; i__3 = i__ - 1; for (k = 1; k <= i__3; ++k) { sum += cov[ij + k] * y[k]; } aj = (a[j] - sum) / sumsq; bj = (b[j] - sum) / sumsq; mvnlms_(&aj, &bj, &infi[j], &d__, &e); if (emin + d__ >= e + dmin__) { jmin = j; amin = aj; bmin = bj; dmin__ = d__; emin = e; cvdiag = sumsq; } } ij += j; } if (jmin > i__) { rcswp_(&i__, &jmin, &a[1], &b[1], &infi[1], n, &cov[1]); } cov[ii + i__] = cvdiag; /* Compute Ith column of Cholesky factor. */ /* Compute expected value for Ith integration variable and */ /* scale Ith covariance matrix row and limits. */ if (cvdiag > 0.) { il = ii + i__; i__2 = *n - *infis; for (l = i__ + 1; l <= i__2; ++l) { cov[il + i__] /= cvdiag; ij = ii + i__; i__3 = l; for (j = i__ + 1; j <= i__3; ++j) { cov[il + j] -= cov[il + i__] * cov[ij + i__]; ij += j; } il += l; } if (emin > dmin__ + 1e-10) { yl = 0.; yu = 0.; if (infi[i__] != 0) { /* Computing 2nd power */ d__1 = amin; yl = -exp(-(d__1 * d__1) / 2) / 2.506628274631001; } if (infi[i__] != 1) { /* Computing 2nd power */ d__1 = bmin; yu = -exp(-(d__1 * d__1) / 2) / 2.506628274631001; } y[i__] = (yu - yl) / (emin - dmin__); } else { if (infi[i__] == 0) { y[i__] = bmin; } if (infi[i__] == 1) { y[i__] = amin; } if (infi[i__] == 2) { y[i__] = (amin + bmin) / 2; } } i__2 = i__; for (j = 1; j <= i__2; ++j) { ++ii; cov[ii] /= cvdiag; } a[i__] /= cvdiag; b[i__] /= cvdiag; } else { il = ii + i__; i__2 = *n - *infis; for (l = i__ + 1; l <= i__2; ++l) { cov[il + i__] = 0.; il += l; } /* If the covariance matrix diagonal entry is zero, */ /* permute limits and/or rows, if necessary. */ for (j = i__ - 1; j >= 1; --j) { if ((d__1 = cov[ii + j], abs(d__1)) > 1e-10) { a[i__] /= cov[ii + j]; b[i__] /= cov[ii + j]; if (cov[ii + j] < 0.) { dkswap_(&a[i__], &b[i__]); if (infi[i__] != 2) { infi[i__] = 1 - infi[i__]; } } i__2 = j; for (l = 1; l <= i__2; ++l) { cov[ii + l] /= cov[ii + j]; } i__2 = i__ - 1; for (l = j + 1; l <= i__2; ++l) { if (cov[(l - 1) * l / 2 + j + 1] > 0.) { ij = ii; i__3 = l; for (k = i__ - 1; k >= i__3; --k) { i__4 = k; for (m = 1; m <= i__4; ++m) { dkswap_(&cov[ij - k + m], &cov[ij + m] ); } dkswap_(&a[k], &a[k + 1]); dkswap_(&b[k], &b[k + 1]); m = infi[k]; infi[k] = infi[k + 1]; infi[k + 1] = m; ij -= k; } goto L20; } } goto L20; } cov[ii + j] = 0.; } L20: ii += i__; y[i__] = 0.; } } } return 0; } /* covsrt_ */ /* Subroutine */ int dkswap_(doublereal *x, doublereal *y) { static doublereal t; t = *x; *x = *y; *y = t; return 0; } /* dkswap_ */ /* Subroutine */ int rcswp_(integer *p, integer *q, doublereal *a, doublereal *b, integer *infin, integer *n, doublereal *c__) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__, j, ii, jj; extern /* Subroutine */ int dkswap_(doublereal *, doublereal *); /* Swaps rows and columns P and Q in situ, with P <= Q. */ /* Parameter adjustments */ --c__; --infin; --b; --a; /* Function Body */ dkswap_(&a[*p], &a[*q]); dkswap_(&b[*p], &b[*q]); j = infin[*p]; infin[*p] = infin[*q]; infin[*q] = j; jj = *p * (*p - 1) / 2; ii = *q * (*q - 1) / 2; dkswap_(&c__[jj + *p], &c__[ii + *q]); i__1 = *p - 1; for (j = 1; j <= i__1; ++j) { dkswap_(&c__[jj + j], &c__[ii + j]); } jj += *p; i__1 = *q - 1; for (i__ = *p + 1; i__ <= i__1; ++i__) { dkswap_(&c__[jj + *p], &c__[ii + i__]); jj += i__; } ii += *q; i__1 = *n; for (i__ = *q + 1; i__ <= i__1; ++i__) { dkswap_(&c__[ii + *p], &c__[ii + *q]); ii += i__; } return 0; } /* rcswp_ */ /* Subroutine */ int dkbvrc_(integer *ndim, integer *minvls, integer *maxvls, D_fp functn, doublereal *abseps, doublereal *releps, doublereal * abserr, doublereal *finest, integer *inform__) { /* Initialized data */ static integer p[28] = { 31,47,73,113,173,263,397,593,907,1361,2053,3079, 4621,6947,10427,15641,23473,35221,52837,79259,118891,178349, 267523,401287,601943,902933,1354471,2031713 }; static integer c__[2772] /* was [28][99] */ = { 12,13,27,35,64,111,163, 246,347,505,794,1189,1763,2872,4309,6610,9861,10327,19540,34566, 31929,40701,103650,165843,130365,333459,500884,858339,9,11,28,27, 66,42,154,189,402,220,325,888,1018,3233,3758,6977,3647,7582,19926, 9579,49367,69087,125480,90647,236711,375354,566009,918142,9,17,10, 27,28,54,83,242,322,601,960,259,1500,1534,4034,1686,4073,7124, 11582,12654,10982,77576,59978,59925,110235,102417,399251,501970, 13,10,11,36,28,118,43,102,418,644,528,1082,432,2941,1963,3819, 2535,8214,11113,26856,3527,64590,46875,189541,125699,383544, 652979,234813,12,15,11,22,44,20,82,250,215,612,247,725,1332,2910, 730,2314,3430,9600,24585,37873,27066,39397,77172,67647,56483, 292630,355008,460565,12,15,20,29,44,31,92,250,220,160,247,811, 2203,393,642,5647,9865,10271,8726,38806,13226,33179,83021,74795, 93735,41147,430235,31996,12,15,11,29,55,31,150,102,339,206,338, 636,126,1796,1502,3953,2830,10193,17218,29501,56010,10858,126904, 68365,234469,374614,328722,753018,12,15,11,20,67,72,59,250,339, 206,366,965,2240,919,2246,3614,9328,10800,419,17271,18911,38935, 14541,167485,60549,48032,670680,256150,12,15,28,45,10,17,76,280, 339,206,847,497,1719,446,3834,5115,4320,9086,4918,3663,40574, 43129,56299,143918,1291,435453,405585,199809,12,15,13,5,10,94,76, 118,337,422,753,497,1284,919,1511,423,5913,2365,4918,10763,20767, 35468,43636,74912,93937,281493,405585,993599,12,22,13,5,10,14,47, 196,218,134,753,1490,878,919,1102,423,10365,4409,4918,18955,20767, 35468,11655,167289,245291,358168,424646,245149,12,15,28,5,10,14, 11,118,315,518,236,1490,1983,1117,1102,5408,8272,13812,15701,1298, 9686,5279,52680,75517,196061,114121,670180,794183,3,15,13,21,10, 11,11,191,315,134,334,392,266,103,1522,7426,3706,5661,17710,26560, 47603,61518,88549,8148,258647,346892,670180,121349,3,6,13,21,10, 14,100,215,315,134,334,1291,266,103,1522,423,6186,9344,4037,17132, 47603,61518,29804,172106,162489,238990,641587,150619,3,6,13,21,38, 14,131,121,315,518,461,508,266,103,3427,423,7806,9344,4037,17132, 11736,27945,101894,126159,176631,317313,215580,376952,12,6,14,21, 38,14,116,121,167,652,711,508,266,103,3427,487,7806,10362,15808, 4753,11736,70975,113675,35867,204895,164158,59048,809123,7,15,14, 21,10,94,116,49,167,382,652,1291,747,103,3928,6227,7806,9344, 11401,4753,41601,70975,48040,35867,73353,35497,633320,809123,7,15, 14,21,10,10,116,49,167,206,381,1291,747,103,915,2660,8610,9344, 19398,8713,12888,86478,113675,35867,172319,70530,81010,804319,12, 9,14,21,10,10,116,49,167,158,381,508,127,103,915,6227,2563,8585, 25950,18624,32948,86478,34987,121694,28881,70530,20789,67352,12, 13,14,21,10,10,116,49,361,441,381,1291,127,2311,3818,1221,11558, 11114,25950,13082,30801,20514,48308,52171,136787,434839,389250, 969594,12,2,14,21,10,10,116,49,201,179,652,508,2074,3117,3818, 3811,11558,13080,4454,6791,44243,20514,97926,95354,122081,24754, 389250,434796,12,2,14,21,49,14,138,49,124,441,381,508,127,1101, 3818,197,9421,13080,24987,1122,53351,73178,5475,113969,122081, 24754,638764,969594,12,2,14,21,49,14,138,49,124,56,381,867,2074, 3117,3818,4367,1181,13080,11719,19363,53351,73178,49449,113969, 275993,24754,638764,804319,12,13,14,21,49,14,138,49,124,559,381, 867,1400,3117,4782,351,9421,6949,8697,34695,16016,43098,6850, 76304,64673,393656,389250,391368,12,11,14,21,49,14,138,49,124,559, 381,867,1383,1101,4782,1281,1181,3436,1452,18770,35086,43098, 62545,123709,211587,118711,389250,761041,12,11,14,21,49,14,138,49, 124,56,381,867,1383,1101,4782,1221,1181,3436,1452,18770,35086, 4701,62545,123709,211587,118711,398094,754049,12,10,14,21,49,14, 138,49,124,56,381,934,1383,1101,3818,351,1181,3436,1452,18770, 32581,59979,9440,144615,211587,148227,80846,466264,3,15,14,21,49, 14,138,49,124,56,381,867,1383,1101,4782,351,9421,13213,1452,18770, 2464,59979,33242,123709,282859,271087,147776,754049,3,15,14,29,49, 11,138,171,124,56,226,867,1383,1101,3818,351,1181,6130,1452,15628, 2464,58556,9440,64958,282859,355831,147776,754049,3,15,14,17,49, 11,138,171,124,56,326,867,1383,2503,3818,7245,1181,6130,8697, 18770,49554,69916,33242,64958,211587,91034,296177,466264,12,15,14, 17,49,11,101,171,124,56,326,867,1383,2503,1327,1984,10574,8159, 8697,18770,2464,15170,9440,32377,242821,417029,398094,754049,7,15, 31,17,49,8,101,171,124,56,326,867,1383,2503,1327,2999,10574,8159, 6436,18770,2464,15170,33242,193002,256865,417029,398094,754049,7, 15,31,17,49,8,101,171,231,56,326,867,1383,2503,1327,2999,3534, 11595,21475,18770,49554,4832,9440,193002,256865,91034,147776, 282852,12,15,5,17,38,8,101,171,231,56,326,867,1383,2503,1327,2999, 3534,8159,6436,33766,49554,4832,62850,25023,256865,91034,147776, 429907,12,15,5,17,38,8,101,171,90,56,326,1284,1400,2503,1327,2999, 3534,3436,22913,20837,2464,43064,9440,40017,122203,417029,396313, 390017,12,15,5,17,31,8,101,171,90,56,326,1284,1383,2503,1327,2999, 3534,7096,6434,20837,81,71685,9440,141605,291915,91034,578233, 276645,12,6,31,17,4,8,101,171,90,56,126,1284,1383,2503,1327,2999, 3534,7096,18497,20837,27260,4832,9440,189165,122203,299843,578233, 994856,12,6,13,17,4,8,101,171,90,56,326,1284,1383,429,1387,3995, 2898,7096,11089,20837,10681,15170,90308,189165,291915,299843, 578233,250142,12,6,11,17,31,18,101,171,90,56,326,1284,1383,429, 1387,2063,2898,7096,11089,20837,2185,15170,90308,141605,291915, 413548,19482,144595,12,15,11,23,64,18,101,171,90,101,326,1284, 1383,429,1387,2063,2898,7096,11089,20837,2185,15170,90308,189165, 122203,413548,620706,907454,12,15,11,23,4,18,101,171,90,101,326, 1284,1383,429,1387,2063,3450,7096,11089,6545,2185,27679,47904, 189165,25639,308300,187095,689648,12,9,11,23,4,18,101,171,90,56, 326,1284,1383,429,1387,2063,2141,7096,3036,6545,2185,27679,47904, 141605,25639,413548,620706,687580,3,13,11,23,4,18,101,171,90,101, 326,1284,507,429,1387,1644,2141,7096,3036,6545,2185,27679,47904, 141605,291803,413548,187095,687580,3,2,11,23,64,113,101,171,90, 101,326,563,1073,429,1387,2063,2141,7096,14208,6545,2185,60826, 47904,141605,245397,413548,126467,687580,3,2,13,23,45,62,101,171, 90,101,326,563,1073,1702,1387,2077,2141,7096,14208,6545,2185, 60826,47904,189165,284047,308300,241663,687580,12,2,13,23,45,62, 101,171,90,101,326,563,1073,1702,1387,2512,2141,7096,14208,12138, 18086,6187,47904,127047,245397,308300,241663,978368,7,13,13,23,45, 45,101,171,90,101,326,563,1073,1702,2339,2512,2141,7096,14208, 12138,18086,6187,47904,127047,245397,308300,241663,687580,7,11,13, 23,45,45,101,171,90,101,195,1010,1990,184,2339,2512,2141,7096, 12906,12138,18086,4264,47904,127047,245397,413548,241663,552742, 12,11,13,23,45,113,101,171,48,101,195,1010,1990,184,2339,2077, 7055,7096,12906,12138,18086,4264,47904,127047,245397,308300, 241663,105195,12,10,13,23,45,113,101,171,48,101,55,1010,1990,184, 2339,2077,7055,7096,12906,12138,18086,4264,41143,127047,245397, 308300,241663,942843,12,15,13,23,66,113,101,171,48,193,55,208, 1990,184,2339,2077,7055,7096,12906,12138,17631,4264,41143,127047, 245397,308300,241663,768249,12,15,14,21,66,113,116,171,48,193,55, 838,1990,184,2339,2077,7055,7096,12906,12138,17631,4264,41143, 127047,245397,308300,241663,307142,12,15,14,27,66,113,116,171,90, 193,55,563,507,105,2339,754,7055,7096,12906,12138,18086,45567, 41143,127047,94241,308300,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,563,507,105,2339,754,7055,4377,12906,12138,18086,32269, 41143,127047,66575,15311,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,563,507,105,2339,754,7055,7096,12906,12138,18086,32269, 41143,127047,66575,15311,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,759,507,105,2339,754,7055,4377,7614,12138,37335,32269, 41143,127047,217673,15311,241663,880619,12,15,14,24,66,113,116, 171,90,193,55,759,507,105,2339,754,7055,4377,7614,12138,37774, 32269,36114,127047,217673,15311,321632,880619,3,15,14,27,66,113, 100,171,90,101,55,564,507,105,2339,754,7055,4377,7614,12138,37774, 62060,36114,127047,217673,176255,23210,880619,3,15,14,27,66,113, 100,171,90,101,55,759,507,105,2339,754,7055,4377,7614,12138,37774, 62060,36114,127047,217673,176255,23210,880619,3,6,14,17,66,113, 100,171,90,101,55,759,507,105,3148,754,7055,4377,5021,30483,26401, 62060,36114,127047,217673,23613,394484,880619,12,6,14,29,66,113, 100,171,90,101,55,801,507,105,3148,754,7055,5410,5021,30483,26401, 62060,36114,127047,217673,23613,394484,880619,7,6,14,29,66,113, 100,171,90,101,55,801,1073,105,3148,754,7055,5410,5021,30483, 26401,62060,24997,127047,217673,23613,394484,880619,7,15,14,29,66, 113,138,161,90,101,55,801,1073,105,3148,754,7055,4377,5021,30483, 26401,62060,65162,127047,217673,23613,78101,117185,12,15,14,17,66, 113,138,161,90,101,55,801,1073,105,3148,754,2831,4377,5021,30483, 26401,62060,65162,127047,217673,23613,78101,117185,12,9,14,5,66, 113,138,161,90,101,55,759,1073,105,3148,754,8204,4377,5021,12138, 26401,62060,65162,127047,217673,23613,78101,117185,12,13,14,5,66, 63,138,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,62060,65162,127785,217673,172210,542095,117185,12,2,14,5,66, 63,138,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,2,31,5,66, 53,101,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,2,31,21,66, 63,101,161,90,101,195,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,13,5,21,11, 67,101,161,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,11,5,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,121626,542095,117185,7,11,5,21,66, 67,101,14,90,101,195,563,1073,105,3148,1097,8204,4377,10145,12138, 26401,1803,65162,127785,217673,121626,542095,117185,3,10,11,21,66, 67,101,14,90,101,195,563,1073,105,3148,1097,8204,4377,10145,12138, 12982,1803,65162,127785,217673,121626,542095,117185,3,10,13,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,127785,217673,121626,542095,60731,3,15,11,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,127785,210249,121626,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,80822,210249,200187,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,226,1073,105,1776,248,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,3,15,11,21,66, 67,101,14,243,122,132,226,22,105,1776,754,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,3,15,11,21,45, 67,101,14,243,122,132,226,22,105,1776,1097,8204,4377,10145,12138, 3518,51108,47650,80822,210249,200187,542095,60731,3,15,11,21,11, 67,101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 3518,51108,47650,80822,210249,121551,542095,60731,3,15,13,21,7,67, 101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 3518,51108,47650,131661,210249,121551,542095,60731,3,6,13,21,3,67, 101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 37799,51108,47650,131661,210249,248492,542095,60731,3,2,11,21,2, 67,101,14,243,122,132,226,22,105,925,222,8204,4377,10145,9305, 37799,51108,40586,131661,210249,248492,542095,60731,3,3,13,17,2, 51,101,14,243,122,132,226,1073,105,3354,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,2,5,17,2,51, 101,14,283,122,132,226,452,105,3354,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,3,5,17,27, 51,38,14,283,122,387,226,452,784,925,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,2,5,6,5,51, 38,10,283,122,387,226,452,784,925,754,8204,4377,10145,11107,37799, 51108,40586,131661,94453,248492,457259,178309,3,2,5,17,3,51,38,10, 283,122,387,226,452,784,925,1982,4688,4377,10145,11107,37799, 51108,40586,131661,94453,248492,457259,74373,3,2,14,17,3,12,38,10, 283,122,387,226,452,784,925,1982,4688,4377,4544,11107,37799,51108, 40586,131661,94453,248492,457259,74373,3,2,13,6,5,51,38,10,283, 122,387,226,452,784,925,1982,4688,4377,4544,11107,37799,51108, 38725,131661,94453,248492,457259,74373,3,2,5,3,5,12,38,10,283,122, 387,226,318,784,2133,1982,2831,4377,4544,11107,4721,55315,38725, 131661,94453,248492,457259,74373,3,2,5,6,2,51,38,10,283,122,387, 226,301,784,2133,1982,2831,4377,4544,11107,4721,55315,38725, 131661,94453,248492,457259,74373,3,2,5,6,2,5,38,103,283,122,387, 226,301,784,2133,1982,2831,4377,4544,11107,4721,54140,38725, 131661,94453,248492,457259,74373,3,2,5,3,2,3,3,10,16,122,387,226, 301,784,2133,1982,2831,440,4544,11107,4721,54140,88329,131661, 94453,13942,457259,74373,3,2,5,3,2,3,3,10,283,101,387,226,301,784, 2133,1982,2831,440,8394,11107,7067,54140,88329,131661,94453,13942, 457259,74373,3,2,5,3,2,2,3,10,16,101,387,226,86,784,2133,1982, 2831,1199,8394,11107,7067,54140,88329,131661,94453,13942,457259, 214965,3,2,5,3,2,2,3,10,283,101,387,226,86,784,2133,1982,2831, 1199,8394,9305,7067,54140,88329,7114,94453,13942,457259,214965,3, 2,5,3,2,5,3,5,283,101,387,226,15,784,2133,1982,2831,1199,8394, 9305,7067,13134,88329,131661,94453,13942,457259,214965 }; /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Builtin functions */ double d_mod(doublereal *, doublereal *), pow_dd(doublereal *, doublereal *), sqrt(doublereal); /* Local variables */ static integer i__, k; static doublereal x[2000]; static integer np; static doublereal vk[1000]; static integer klimi; static doublereal value, difint, finval; extern /* Subroutine */ int dksmrc_(integer *, integer *, doublereal *, integer *, doublereal *, D_fp, doublereal *); static doublereal varprd; static integer sampls; static doublereal varest, varsqr; static integer intvls; /* Automatic Multidimensional Integration Subroutine */ /* AUTHOR: Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pulman, WA 99164-3113 */ /* Email: AlanGenz@wsu.edu */ /* Last Change: 7/3/7 */ /* DKBVRC computes an approximation to the integral */ /* 1 1 1 */ /* I I ... I F(X) dx(NDIM)...dx(2)dx(1) */ /* 0 0 0 */ /* DKBVRC uses randomized Korobov rules for the first 100 variables. */ /* The primary references are */ /* "Randomization of Number Theoretic Methods for Multiple Integration" */ /* R. Cranley and T.N.L. Patterson, SIAM J Numer Anal, 13, pp. 904-14, */ /* and */ /* "Optimal Parameters for Multidimensional Integration", */ /* P. Keast, SIAM J Numer Anal, 10, pp.831-838. */ /* If there are more than 100 variables, the remaining variables are */ /* integrated using the rules described in the reference */ /* "On a Number-Theoretical Integration Method" */ /* H. Niederreiter, Aequationes Mathematicae, 8(1972), pp. 304-11. */ /* ************** Parameters ******************************************** */ /* ***** Input parameters */ /* NDIM Number of variables, must exceed 1, but not exceed 40 */ /* MINVLS Integer minimum number of function evaluations allowed. */ /* MINVLS must not exceed MAXVLS. If MINVLS < 0 then the */ /* routine assumes a previous call has been made with */ /* the same integrand and continues that calculation. */ /* MAXVLS Integer maximum number of function evaluations allowed. */ /* FUNCTN EXTERNALly declared user defined function to be integrated. */ /* It must have parameters (NDIM,Z), where Z is a real array */ /* of dimension NDIM. */ /* ABSEPS Required absolute accuracy. */ /* RELEPS Required relative accuracy. */ /* ***** Output parameters */ /* MINVLS Actual number of function evaluations used. */ /* ABSERR Estimated absolute accuracy of FINEST. */ /* FINEST Estimated value of integral. */ /* INFORM INFORM = 0 for normal exit, when */ /* ABSERR <= MAX(ABSEPS, RELEPS*ABS(FINEST)) */ /* and */ /* INTVLS <= MAXCLS. */ /* INFORM = 1 If MAXVLS was too small to obtain the required */ /* accuracy. In this case a value FINEST is returned with */ /* estimated absolute accuracy ABSERR. */ /* *********************************************************************** */ *inform__ = 1; intvls = 0; klimi = 100; if (*minvls >= 0) { *finest = 0.; varest = 0.; sampls = 8; for (i__ = min(*ndim,10); i__ <= 28; ++i__) { np = i__; if (*minvls < (sampls << 1) * p[i__ - 1]) { goto L10; } } /* Computing MAX */ i__1 = 8, i__2 = *minvls / (p[np - 1] << 1); sampls = max(i__1,i__2); } L10: vk[0] = 1. / p[np - 1]; k = 1; i__1 = *ndim; for (i__ = 2; i__ <= i__1; ++i__) { if (i__ <= 100) { /* Computing MIN */ i__2 = *ndim - 1; d__1 = c__[np + min(i__2,99) * 28 - 29] * (doublereal) k; d__2 = (doublereal) p[np - 1]; k = (integer) d_mod(&d__1, &d__2); vk[i__ - 1] = k * vk[0]; } else { d__1 = (doublereal) (i__ - 100) / (*ndim - 99); vk[i__ - 1] = (doublereal) ((integer) (p[np - 1] * pow_dd(&c_b11, &d__1))); d__1 = vk[i__ - 1] / p[np - 1]; vk[i__ - 1] = d_mod(&d__1, &c_b12); } } finval = 0.; varsqr = 0.; i__1 = sampls; for (i__ = 1; i__ <= i__1; ++i__) { dksmrc_(ndim, &klimi, &value, &p[np - 1], vk, (D_fp)functn, x); difint = (value - finval) / i__; finval += difint; /* Computing 2nd power */ d__1 = difint; varsqr = (i__ - 2) * varsqr / i__ + d__1 * d__1; } intvls += (sampls << 1) * p[np - 1]; varprd = varest * varsqr; *finest += (finval - *finest) / (varprd + 1); if (varsqr > 0.) { varest = (varprd + 1) / varsqr; } *abserr = sqrt(varsqr / (varprd + 1)) * 7 / 2; /* Computing MAX */ d__1 = *abseps, d__2 = abs(*finest) * *releps; if (*abserr > max(d__1,d__2)) { if (np < 28) { ++np; } else { /* Computing MIN */ i__1 = sampls * 3 / 2, i__2 = (*maxvls - intvls) / (p[np - 1] << 1); sampls = min(i__1,i__2); sampls = max(8,sampls); } if (intvls + (sampls << 1) * p[np - 1] <= *maxvls) { goto L10; } } else { *inform__ = 0; } *minvls = intvls; /* Optimal Parameters for Lattice Rules */ return 0; } /* dkbvrc_ */ /* Subroutine */ int dksmrc_(integer *ndim, integer *klim, doublereal *sumkro, integer *prime, doublereal *vk, D_fp functn, doublereal *x) { /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Builtin functions */ double d_mod(doublereal *, doublereal *); /* Local variables */ static integer j, k, nk, jp; static doublereal xt; extern doublereal mvnuni_(void); /* Parameter adjustments */ --x; --vk; /* Function Body */ *sumkro = 0.; nk = min(*ndim,*klim); i__1 = nk - 1; for (j = 1; j <= i__1; ++j) { jp = j + (integer) (mvnuni_() * (nk + 1 - j)); xt = vk[j]; vk[j] = vk[jp]; vk[jp] = xt; } i__1 = *ndim; for (j = 1; j <= i__1; ++j) { x[*ndim + j] = mvnuni_(); } i__1 = *prime; for (k = 1; k <= i__1; ++k) { i__2 = *ndim; for (j = 1; j <= i__2; ++j) { d__2 = k * vk[j] + x[*ndim + j]; x[j] = (d__1 = d_mod(&d__2, &c_b12) * 2 - 1, abs(d__1)); } *sumkro += ((*functn)(ndim, &x[1]) - *sumkro) / ((k << 1) - 1); i__2 = *ndim; for (j = 1; j <= i__2; ++j) { x[j] = 1 - x[j]; } *sumkro += ((*functn)(ndim, &x[1]) - *sumkro) / (k << 1); } return 0; } /* dksmrc_ */ doublereal mvnphi_(doublereal *z__) { /* Initialized data */ static doublereal a[44] = { .610143081923200417926465815756, -.434841272712577471828182820888,.176351193643605501125840298123, -.060710795609249414860051215825,.017712068995694114486147141191, -.004321119385567293818599864968,8.54216676887098678819832055e-4, -1.2715509060916274262889394e-4,1.1248167243671189468847072e-5, 3.13063885421820972630152e-7,-2.70988068537762022009086e-7, 3.0737622701407688440959e-8,2.515620384817622937314e-9, -1.02892992132031912759e-9,2.9944052119949939363e-11, 2.605178968726693629e-11,-2.634839924171969386e-12, -6.43404509890636443e-13,1.12457401801663447e-13, 1.7281533389986098e-14,-4.264101694942375e-15, -5.45371977880191e-16,1.58697607761671e-16,2.0899837844334e-17, -5.900526869409e-18,-9.41893387554e-19,2.1497735647e-19, 4.6660985008e-20,-7.243011862e-21,-2.387966824e-21,1.91177535e-22, 1.20482568e-22,-6.72377e-25,-5.747997e-24,-4.28493e-25, 2.44856e-25,4.3793e-26,-8.151e-27,-3.089e-27,9.3e-29,1.74e-28, 1.6e-29,-8e-30,-2e-30 }; /* System generated locals */ doublereal ret_val; /* Builtin functions */ double exp(doublereal); /* Local variables */ static doublereal b; static integer i__; static doublereal p, t, bm, bp, xa; /* Normal distribution probabilities accurate to 1d-15. */ /* Reference: J.L. Schonfelder, Math Comp 32(1978), pp 1232-1240. */ xa = abs(*z__) / 1.414213562373095048801688724209; if (xa > 100.) { p = 0.; } else { t = (xa * 8 - 30) / (xa * 4 + 15); bm = 0.; b = 0.; for (i__ = 24; i__ >= 0; --i__) { bp = b; b = bm; bm = t * b - bp + a[i__]; } p = exp(-xa * xa) * (bm - bp) / 4; } if (*z__ > 0.) { p = 1 - p; } ret_val = p; return ret_val; } /* mvnphi_ */ doublereal phinvs_(doublereal *p) { /* System generated locals */ doublereal ret_val, d__1, d__2; /* Builtin functions */ double log(doublereal), sqrt(doublereal); /* Local variables */ static doublereal q, r__; /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3 */ /* Produces the normal deviate Z corresponding to a given lower */ /* tail area of P. */ /* The hash sums below are the sums of the mantissas of the */ /* coefficients. They are included for use in checking */ /* transcription. */ /* Coefficients for P close to 0.5 */ /* HASH SUM AB 55.88319 28806 14901 4439 */ /* Coefficients for P not close to 0, 0.5 or 1. */ /* HASH SUM CD 49.33206 50330 16102 89036 */ /* Coefficients for P near 0 or 1. */ /* HASH SUM EF 47.52583 31754 92896 71629 */ q = (*p * 2 - 1) / 2; if (abs(q) <= .425) { r__ = .180625 - q * q; ret_val = q * (((((((r__ * 2509.0809287301226727 + 33430.575583588128105) * r__ + 67265.770927008700853) * r__ + 45921.953931549871457) * r__ + 13731.693765509461125) * r__ + 1971.5909503065514427) * r__ + 133.14166789178437745) * r__ + 3.387132872796366608) / (((((((r__ * 5226.495278852854561 + 28729.085735721942674) * r__ + 39307.89580009271061) * r__ + 21213.794301586595867) * r__ + 5394.1960214247511077) * r__ + 687.1870074920579083) * r__ + 42.313330701600911252) * r__ + 1); } else { /* Computing MIN */ d__1 = *p, d__2 = 1 - *p; r__ = min(d__1,d__2); if (r__ > 0.) { r__ = sqrt(-log(r__)); if (r__ <= 5.) { r__ += -1.6; ret_val = (((((((r__ * 7.7454501427834140764e-4 + .0227238449892691845833) * r__ + .24178072517745061177) * r__ + 1.27045825245236838258) * r__ + 3.64784832476320460504) * r__ + 5.7694972214606914055) * r__ + 4.6303378461565452959) * r__ + 1.42343711074968357734) / (((((((r__ * 1.05075007164441684324e-9 + 5.475938084995344946e-4) * r__ + .0151986665636164571966) * r__ + .14810397642748007459) * r__ + .68976733498510000455) * r__ + 1.6763848301838038494) * r__ + 2.05319162663775882187) * r__ + 1); } else { r__ += -5.; ret_val = (((((((r__ * 2.01033439929228813265e-7 + 2.71155556874348757815e-5) * r__ + .0012426609473880784386) * r__ + .026532189526576123093) * r__ + .29656057182850489123) * r__ + 1.7848265399172913358) * r__ + 5.4637849111641143699) * r__ + 6.6579046435011037772) / (((((((r__ * 2.04426310338993978564e-15 + 1.4215117583164458887e-7) * r__ + 1.8463183175100546818e-5) * r__ + 7.868691311456132591e-4) * r__ + .0148753612908506148525) * r__ + .13692988092273580531) * r__ + .59983220655588793769) * r__ + 1); } } else { ret_val = 9.; } if (q < 0.) { ret_val = -ret_val; } } return ret_val; } /* phinvs_ */ doublereal bvnmvn_(doublereal *lower, doublereal *upper, integer *infin, doublereal *correl) { /* System generated locals */ doublereal ret_val, d__1, d__2, d__3, d__4; /* Local variables */ extern doublereal bvu_(doublereal *, doublereal *, doublereal *); /* A function for computing bivariate normal probabilities. */ /* Parameters */ /* LOWER REAL, array of lower integration limits. */ /* UPPER REAL, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(I) = 0, Ith limits are (-infinity, UPPER(I)]; */ /* if INFIN(I) = 1, Ith limits are [LOWER(I), infinity); */ /* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)]. */ /* CORREL REAL, correlation coefficient. */ /* Parameter adjustments */ --infin; --upper; --lower; /* Function Body */ if (infin[1] == 2 && infin[2] == 2) { ret_val = bvu_(&lower[1], &lower[2], correl) - bvu_(&upper[1], &lower[ 2], correl) - bvu_(&lower[1], &upper[2], correl) + bvu_(& upper[1], &upper[2], correl); } else if (infin[1] == 2 && infin[2] == 1) { ret_val = bvu_(&lower[1], &lower[2], correl) - bvu_(&upper[1], &lower[ 2], correl); } else if (infin[1] == 1 && infin[2] == 2) { ret_val = bvu_(&lower[1], &lower[2], correl) - bvu_(&lower[1], &upper[ 2], correl); } else if (infin[1] == 2 && infin[2] == 0) { d__1 = -upper[1]; d__2 = -upper[2]; d__3 = -lower[1]; d__4 = -upper[2]; ret_val = bvu_(&d__1, &d__2, correl) - bvu_(&d__3, &d__4, correl); } else if (infin[1] == 0 && infin[2] == 2) { d__1 = -upper[1]; d__2 = -upper[2]; d__3 = -upper[1]; d__4 = -lower[2]; ret_val = bvu_(&d__1, &d__2, correl) - bvu_(&d__3, &d__4, correl); } else if (infin[1] == 1 && infin[2] == 0) { d__1 = -upper[2]; d__2 = -(*correl); ret_val = bvu_(&lower[1], &d__1, &d__2); } else if (infin[1] == 0 && infin[2] == 1) { d__1 = -upper[1]; d__2 = -(*correl); ret_val = bvu_(&d__1, &lower[2], &d__2); } else if (infin[1] == 1 && infin[2] == 1) { ret_val = bvu_(&lower[1], &lower[2], correl); } else if (infin[1] == 0 && infin[2] == 0) { d__1 = -upper[1]; d__2 = -upper[2]; ret_val = bvu_(&d__1, &d__2, correl); } return ret_val; } /* bvnmvn_ */ doublereal bvu_(doublereal *sh, doublereal *sk, doublereal *r__) { /* Initialized data */ static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_99 = { .1713244923791705, .3607615730481384, .4679139345726904, {0}, .04717533638651177, .1069393259953183, .1600783285433464, .2031674267230659, .2334925365383547, .2491470458134029, {0}, .01761400713915212, .04060142980038694, .06267204833410906, .08327674157670475, .1019301198172404, .1181945319615184, .1316886384491766, .1420961093183821, .1491729864726037, .1527533871307259 }; #define w ((doublereal *)&equiv_99) static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_100 = { -.9324695142031522, -.6612093864662647, -.238619186083197, {0}, -.9815606342467191, -.904117256370475, -.769902674194305, -.5873179542866171, -.3678314989981802, -.1252334085114692, {0}, -.9931285991850949, -.9639719272779138, -.9122344282513259, -.8391169718222188, -.7463319064601508, -.636053680726515, -.5108670019508271, -.3737060887154196, -.2277858511416451, -.07652652113349733 }; #define x ((doublereal *)&equiv_100) /* System generated locals */ integer i__1; doublereal ret_val, d__1, d__2, d__3, d__4; /* Builtin functions */ double asin(doublereal), sin(doublereal), exp(doublereal), sqrt( doublereal); /* Local variables */ static doublereal a, b, c__, d__, h__; static integer i__; static doublereal k; static integer lg; static doublereal as; static integer ng; static doublereal bs, hk, hs, sn, rs, xs, bvn, asr; extern doublereal mvnphi_(doublereal *); /* A function for computing bivariate normal probabilities. */ /* Yihong Ge */ /* Department of Computer Science and Electrical Engineering */ /* Washington State University */ /* Pullman, WA 99164-2752 */ /* and */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* BVN - calculate the probability that X is larger than SH and Y is */ /* larger than SK. */ /* Parameters */ /* SH REAL, integration limit */ /* SK REAL, integration limit */ /* R REAL, correlation coefficient */ /* LG INTEGER, number of Gauss Rule Points and Weights */ /* Gauss Legendre Points and Weights, N = 6 */ /* Gauss Legendre Points and Weights, N = 12 */ /* Gauss Legendre Points and Weights, N = 20 */ if (abs(*r__) < .3f) { ng = 1; lg = 3; } else if (abs(*r__) < .75f) { ng = 2; lg = 6; } else { ng = 3; lg = 10; } h__ = *sh; k = *sk; hk = h__ * k; bvn = 0.; if (abs(*r__) < .925f) { hs = (h__ * h__ + k * k) / 2; asr = asin(*r__); i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { sn = sin(asr * (x[i__ + ng * 10 - 11] + 1) / 2); bvn += w[i__ + ng * 10 - 11] * exp((sn * hk - hs) / (1 - sn * sn)) ; sn = sin(asr * (-x[i__ + ng * 10 - 11] + 1) / 2); bvn += w[i__ + ng * 10 - 11] * exp((sn * hk - hs) / (1 - sn * sn)) ; } d__1 = -h__; d__2 = -k; bvn = bvn * asr / 12.566370614359172 + mvnphi_(&d__1) * mvnphi_(&d__2) ; } else { if (*r__ < 0.) { k = -k; hk = -hk; } if (abs(*r__) < 1.) { as = (1 - *r__) * (*r__ + 1); a = sqrt(as); /* Computing 2nd power */ d__1 = h__ - k; bs = d__1 * d__1; c__ = (4 - hk) / 8; d__ = (12 - hk) / 16; bvn = a * exp(-(bs / as + hk) / 2) * (1 - c__ * (bs - as) * (1 - d__ * bs / 5) / 3 + c__ * d__ * as * as / 5); if (hk > -160.) { b = sqrt(bs); d__1 = -b / a; bvn -= exp(-hk / 2) * sqrt(6.283185307179586) * mvnphi_(&d__1) * b * (1 - c__ * bs * (1 - d__ * bs / 5) / 3); } a /= 2; i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { /* Computing 2nd power */ d__1 = a * (x[i__ + ng * 10 - 11] + 1); xs = d__1 * d__1; rs = sqrt(1 - xs); bvn += a * w[i__ + ng * 10 - 11] * (exp(-bs / (xs * 2) - hk / (rs + 1)) / rs - exp(-(bs / xs + hk) / 2) * (c__ * xs * (d__ * xs + 1) + 1)); /* Computing 2nd power */ d__1 = -x[i__ + ng * 10 - 11] + 1; xs = as * (d__1 * d__1) / 4; rs = sqrt(1 - xs); bvn += a * w[i__ + ng * 10 - 11] * exp(-(bs / xs + hk) / 2) * (exp(-hk * (1 - rs) / ((rs + 1) * 2)) / rs - (c__ * xs * (d__ * xs + 1) + 1)); } bvn = -bvn / 6.283185307179586; } if (*r__ > 0.) { d__1 = -max(h__,k); bvn += mvnphi_(&d__1); } if (*r__ < 0.) { /* Computing MAX */ d__3 = -h__; d__4 = -k; d__1 = 0., d__2 = mvnphi_(&d__3) - mvnphi_(&d__4); bvn = -bvn + max(d__1,d__2); } } ret_val = bvn; return ret_val; } /* bvu_ */ #undef x #undef w doublereal mvnuni_(void) { /* Initialized data */ static integer x10 = 15485857; static integer x11 = 17329489; static integer x12 = 36312197; static integer x20 = 55911127; static integer x21 = 75906931; static integer x22 = 96210113; /* System generated locals */ doublereal ret_val; /* Local variables */ static integer h__, z__, p12, p13, p21, p23; /* Uniform (0,1) random number generator */ /* Reference: */ /* L'Ecuyer, Pierre (1996), */ /* "Combined Multiple Recursive Random Number Generators" */ /* Operations Research 44, pp. 816-822. */ /* INVMP1 = 1/(M1+1) */ /* Component 1 */ h__ = x10 / 11714; p13 = (x10 - h__ * 11714) * 183326 - h__ * 2883; h__ = x11 / 33921; p12 = (x11 - h__ * 33921) * 63308 - h__ * 12979; if (p13 < 0) { p13 += 2147483647; } if (p12 < 0) { p12 += 2147483647; } x10 = x11; x11 = x12; x12 = p12 - p13; if (x12 < 0) { x12 += 2147483647; } /* Component 2 */ h__ = x20 / 3976; p23 = (x20 - h__ * 3976) * 539608 - h__ * 2071; h__ = x22 / 24919; p21 = (x22 - h__ * 24919) * 86098 - h__ * 7417; if (p23 < 0) { p23 += 2145483479; } if (p21 < 0) { p21 += 2145483479; } x20 = x21; x21 = x22; x22 = p21 - p23; if (x22 < 0) { x22 += 2145483479; } /* Combination */ z__ = x12 - x22; if (z__ <= 0) { z__ += 2147483647; } ret_val = z__ * 4.656612873077392578125e-10; return ret_val; } /* mvnuni_ */ openturns-1.9/lib/src/Uncertainty/Distribution/mvtdstpack.c000066400000000000000000002176671307543307100243130ustar00rootroot00000000000000/* mvtdstpack.f -- translated by f2c (version 20100827). You must link the resulting object file with libf2c: on Microsoft Windows system, link with libf2c.lib; on Linux or Unix systems, link with .../path/to/libf2c.a -lm or, if you install libf2c.a in a standard place, with -lf2c -lm -- in that order, at the end of the command line, as in cc *.o -lf2c -lm Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., http://www.netlib.org/f2c/libf2c.zip */ #include "f2c.h" /* Common Block Declarations */ struct { integer ivls; } ptblck_; #define ptblck_1 ptblck_ /* Table of constant values */ static integer c__1 = 1; static logical c_true = TRUE_; static integer c__0 = 0; static doublereal c_b24 = 1.; static doublereal c_b32 = 2.; static integer c__100 = 100; /* This file contains a short test program, software MVTDST for */ /* the MVT distribution, plus supporting software. The file is */ /* self-contained and should compile without errors on standard */ /* Fortran(77) compilers. The test program demonstrates the use */ /* of MVTDST for computing MVT distribution values for a five */ /* dimensional example problem, with four different NU values. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : AlanGenz@wsu.edu */ /* ************************************ */ /* COMMENTED FOR OPENTURNS INCLUSION * */ /* ************************************ */ /* PROGRAM TSTMVT */ /* Test program for MVTDST */ /* DOUBLE PRECISION ABSEPS, RELEPS, VALS, ERRS */ /* INTEGER N, NN, NU, I, J, IJ, MAXPTS, IFTS */ /* PARAMETER ( N = 5, NN = ((N-1)*N)/2, MAXPTS = 25000 ) */ /* PARAMETER ( ABSEPS = 0, RELEPS = 0.0005 ) */ /* DOUBLE PRECISION CORREL(NN), LOW(N), UP(N), DELTA(N) */ /* INTEGER INFIN(N) */ /* DATA ( UP(I), I = 1, N ) / N*2D0 / */ /* DATA ( LOW(I), I = 1, N ) / N*0D0 / */ /* DATA ( DELTA(I), I = 1, N ) / N*1D0 / */ /* DATA ( INFIN(I), I = 1, N ) / N*0 / */ /* DATA ( CORREL(I), I = 1, NN ) / NN*0.75D0 / */ /* PRINT '('' Test of MVTDST'')' */ /* PRINT '(5X, ''Requested Accuracy '',F8.5)', MAX(ABSEPS,RELEPS) */ /* PRINT '(5X,''Number of Dimensions is '',I2)',N */ /* PRINT '('' Maximum # of Function Values is '',I7)', MAXPTS */ /* PRINT '(/'' I Limits''/'' Lower Upper Delta'','// */ /* & ' 5X, ''Lower Left of Correlation Matrix'')' */ /* IJ = 0 */ /* DO I = 1, N */ /* IF ( INFIN(I) .LT. 0 ) THEN */ /* PRINT '(I2, '' -infin infin '', F7.4, 7F9.4)', */ /* & I, DELTA(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE IF ( INFIN(I) .EQ. 0 ) THEN */ /* PRINT '(I2, '' -infin'', 2F7.4, 1X, 6F9.4)', */ /* & I, UP(I), DELTA(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE IF ( INFIN(I) .EQ. 1 ) THEN */ /* PRINT '(I2, F7.4, '' infin '', F7.4, 6F9.4)', */ /* & I, LOW(I), DELTA(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ELSE */ /* PRINT '(I2, 3F7.4, 1X, 6F9.4)', I, LOW(I), */ /* & UP(I), DELTA(I), ( CORREL(IJ+J), J = 1,I-1 ), 1.0 */ /* ENDIF */ /* IJ = IJ + I-1 */ /* END DO */ /* DO NU = 10, 110, 25 */ /* PRINT '(4X,''Nu is '',I3)', NU */ /* CALL MVTDST( N, NU, LOW, UP, INFIN, CORREL, DELTA, */ /* & MAXPTS, ABSEPS, RELEPS, ERRS, VALS, IFTS ) */ /* PRINT '('' Results for: MVTDST'')' */ /* PRINT '('' Value: '',2(F11.6,I4))', VALS, IFTS */ /* PRINT '('' Error Est.:'',2X,''('',F8.6,'')'',3X)', ERRS */ /* END DO */ /* PRINT '(4X,''Nu is Infinity'')' */ /* CALL MVTDST( N, -1, LOW, UP, INFIN, CORREL, DELTA, */ /* & MAXPTS, ABSEPS, RELEPS, ERRS, VALS, IFTS ) */ /* PRINT '('' Results for: MVTDST'')' */ /* PRINT '('' Value: '',2(F11.6,I4))', VALS, IFTS */ /* PRINT '('' Error Est.:'',2X,''('',F8.6,'')'',3X)', ERRS */ /* END */ /* **************************************** */ /* END COMMENTED FOR OPENTURNS INCLUSION * */ /* **************************************** */ /* Subroutine */ int mvtdst_(integer *n, integer *nu, doublereal *lower, doublereal *upper, integer *infin, doublereal *correl, doublereal * delta, integer *maxpts, doublereal *abseps, doublereal *releps, doublereal *error, doublereal *value, integer *inform__) { static doublereal e[1], v[1]; static integer nd; extern /* Subroutine */ int mvkbrv_(integer *, integer *, integer *, integer *, U_fp, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern /* Subroutine */ int mvsubr_(); extern /* Subroutine */ int mvints_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *); /* A subroutine for computing non-central multivariate t */ /* probabilities. */ /* This subroutine uses an algorithm (QRSVN) described in the paper */ /* "Comparison of Methods for the Computation of Multivariate */ /* t-Probabilities", by Alan Genz and Frank Bretz */ /* J. Comp. Graph. Stat. 11 (2002), pp. 950-971. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : AlanGenz@wsu.edu */ /* Parameters */ /* N INTEGER, the number of variables. */ /* NU INTEGER, the number of degrees of freedom. */ /* If NU < 1, then an MVN probability is computed. */ /* LOWER DOUBLE PRECISION, array of lower integration limits. */ /* UPPER DOUBLE PRECISION, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(I) < 0, Ith limits are (-infinity, infinity); */ /* if INFIN(I) = 0, Ith limits are (-infinity, UPPER(I)]; */ /* if INFIN(I) = 1, Ith limits are [LOWER(I), infinity); */ /* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)]. */ /* CORREL DOUBLE PRECISION, array of correlation coefficients; */ /* the correlation coefficient in row I column J of the */ /* correlation matrixshould be stored in */ /* CORREL( J + ((I-2)*(I-1))/2 ), for J < I. */ /* The correlation matrix must be positive semi-definite. */ /* DELTA DOUBLE PRECISION, array of non-centrality parameters. */ /* MAXPTS INTEGER, maximum number of function values allowed. This */ /* parameter can be used to limit the time. A sensible */ /* strategy is to start with MAXPTS = 1000*N, and then */ /* increase MAXPTS if ERROR is too large. */ /* ABSEPS DOUBLE PRECISION absolute error tolerance. */ /* RELEPS DOUBLE PRECISION relative error tolerance. */ /* ERROR DOUBLE PRECISION estimated absolute error, */ /* with 99% confidence level. */ /* VALUE DOUBLE PRECISION estimated value for the integral */ /* INFORM INTEGER, termination status parameter: */ /* if INFORM = 0, normal completion with ERROR < EPS; */ /* if INFORM = 1, completion with ERROR > EPS and MAXPTS */ /* function vaules used; increase MAXPTS to */ /* decrease ERROR; */ /* if INFORM = 2, N > 1000 or N < 1. */ /* if INFORM = 3, correlation matrix not positive */ /* semi-definite. */ /* Parameter adjustments */ --delta; --correl; --infin; --upper; --lower; /* Function Body */ ptblck_1.ivls = 0; if (*n > 1000 || *n < 1) { *value = 0.; *error = 1.; *inform__ = 2; } else { mvints_(n, nu, &correl[1], &lower[1], &upper[1], &delta[1], &infin[1], &nd, value, error, inform__); if (*inform__ == 0 && nd > 0) { /* Call the lattice rule integration subroutine */ mvkbrv_(&nd, &ptblck_1.ivls, maxpts, &c__1, (U_fp)mvsubr_, abseps, releps, e, v, inform__); *error = e[0]; *value = v[0]; } } return 0; } /* mvtdst_ */ /* Subroutine */ int mvsubr_0_(int n__, integer *n, doublereal *w, integer * nf, doublereal *f, integer *nuin, doublereal *correl, doublereal * lower, doublereal *upper, doublereal *delta, integer *infin, integer * nd, doublereal *vl, doublereal *er, integer *inform__) { /* System generated locals */ integer i__1; /* Local variables */ static doublereal a[1000], b[1000], r__, y[1000], di, ei, dl[1000]; static integer nu, ny; static doublereal cov[500500], snu; static integer infi[1000]; extern doublereal mvchnv_(integer *, doublereal *); extern /* Subroutine */ int mvspcl_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, integer *), mvvlsb_(integer *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, doublereal *), mvsort_(integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, logical *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *); /* Integrand subroutine */ /* Parameter adjustments */ if (w) { --w; } if (f) { --f; } if (correl) { --correl; } if (lower) { --lower; } if (upper) { --upper; } if (delta) { --delta; } if (infin) { --infin; } /* Function Body */ switch(n__) { case 1: goto L_mvints; } *nf = *nf; if (nu <= 0) { r__ = 1.; i__1 = *n + 1; mvvlsb_(&i__1, &w[1], &r__, dl, infi, a, b, cov, y, &di, &ei, &ny, &f[ 1]); } else { r__ = mvchnv_(&nu, &w[*n]) / snu; mvvlsb_(n, &w[1], &r__, dl, infi, a, b, cov, y, &di, &ei, &ny, &f[1]); } return 0; /* Entry point for intialization. */ L_mvints: /* Initialization and computation of covariance Cholesky factor. */ mvsort_(n, &lower[1], &upper[1], &delta[1], &correl[1], &infin[1], y, & c_true, nd, a, b, dl, cov, infi, inform__); nu = *nuin; mvspcl_(nd, &nu, a, b, dl, cov, infi, &snu, vl, er, inform__); return 0; } /* mvsubr_ */ /* Subroutine */ int mvsubr_(integer *n, doublereal *w, integer *nf, doublereal *f) { return mvsubr_0_(0, n, w, nf, f, (integer *)0, (doublereal *)0, ( doublereal *)0, (doublereal *)0, (doublereal *)0, (integer *)0, ( integer *)0, (doublereal *)0, (doublereal *)0, (integer *)0); } /* Subroutine */ int mvints_(integer *n, integer *nuin, doublereal *correl, doublereal *lower, doublereal *upper, doublereal *delta, integer * infin, integer *nd, doublereal *vl, doublereal *er, integer *inform__) { return mvsubr_0_(1, n, (doublereal *)0, (integer *)0, (doublereal *)0, nuin, correl, lower, upper, delta, infin, nd, vl, er, inform__); } /* Subroutine */ int mvspcl_(integer *nd, integer *nu, doublereal *a, doublereal *b, doublereal *dl, doublereal *cov, integer *infi, doublereal *snu, doublereal *vl, doublereal *er, integer *inform__) { /* System generated locals */ doublereal d__1; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ static doublereal r__; extern doublereal mvbvt_(integer *, doublereal *, doublereal *, integer *, doublereal *), mvstdt_(integer *, doublereal *); /* Special cases subroutine */ /* Parameter adjustments */ --infi; --cov; --dl; --b; --a; /* Function Body */ if (*inform__ > 0) { *vl = 0.; *er = 1.; } else { /* Special cases */ if (*nd == 0) { *er = 0.; } else if (*nd == 1 && (*nu < 1 || abs(dl[1]) == 0.)) { /* 1-d case for normal or central t */ *vl = 1.; if (infi[1] != 1) { d__1 = b[1] - dl[1]; *vl = mvstdt_(nu, &d__1); } if (infi[1] != 0) { d__1 = a[1] - dl[1]; *vl -= mvstdt_(nu, &d__1); } if (*vl < 0.) { *vl = 0.; } *er = 2e-16; *nd = 0; } else if (*nd == 2 && (*nu < 1 || abs(dl[1]) + abs(dl[2]) == 0.)) { /* 2-d case for normal or central t */ if (infi[1] != 0) { a[1] -= dl[1]; } if (infi[1] != 1) { b[1] -= dl[1]; } if (infi[2] != 0) { a[2] -= dl[2]; } if (infi[2] != 1) { b[2] -= dl[2]; } if (abs(cov[3]) > 0.) { /* 2-d nonsingular case */ /* Computing 2nd power */ d__1 = cov[2]; r__ = sqrt(d__1 * d__1 + 1); if (infi[2] != 0) { a[2] /= r__; } if (infi[2] != 1) { b[2] /= r__; } cov[2] /= r__; *vl = mvbvt_(nu, &a[1], &b[1], &infi[1], &cov[2]); *er = 1e-15; } else { /* 2-d singular case */ if (infi[1] != 0) { if (infi[2] != 0) { a[1] = max(a[1],a[2]); } } else { if (infi[2] != 0) { a[1] = a[2]; } } if (infi[1] != 1) { if (infi[2] != 1) { b[1] = min(b[1],b[2]); } } else { if (infi[2] != 1) { b[1] = b[2]; } } if (infi[1] != infi[2]) { infi[1] = 2; } *vl = 1.; if (infi[1] != 1) { d__1 = b[1] - dl[1]; *vl = mvstdt_(nu, &d__1); } if (infi[1] != 0) { d__1 = a[1] - dl[1]; *vl -= mvstdt_(nu, &d__1); } if (*vl < 0.) { *vl = 0.; } *er = 2e-16; } *nd = 0; } else { if (*nu > 0) { *snu = sqrt((doublereal) (*nu)); } else { --(*nd); } } } return 0; } /* mvspcl_ */ /* Subroutine */ int mvvlsb_(integer *n, doublereal *w, doublereal *r__, doublereal *dl, integer *infi, doublereal *a, doublereal *b, doublereal *cov, doublereal *y, doublereal *di, doublereal *ei, integer *nd, doublereal *value) { /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Local variables */ static integer i__, j; static doublereal ai, bi; static integer ij; static doublereal sum; static integer infa, infb; extern /* Subroutine */ int mvlims_(doublereal *, doublereal *, integer *, doublereal *, doublereal *); extern doublereal mvphnv_(doublereal *); /* Integrand subroutine */ /* Parameter adjustments */ --y; --cov; --b; --a; --infi; --dl; --w; /* Function Body */ *value = 1.; infa = 0; infb = 0; *nd = 0; ij = 0; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { sum = dl[i__]; i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { ++ij; if (j <= *nd) { sum += cov[ij] * y[j]; } } if (infi[i__] != 0) { if (infa == 1) { /* Computing MAX */ d__1 = ai, d__2 = *r__ * a[i__] - sum; ai = max(d__1,d__2); } else { ai = *r__ * a[i__] - sum; infa = 1; } } if (infi[i__] != 1) { if (infb == 1) { /* Computing MIN */ d__1 = bi, d__2 = *r__ * b[i__] - sum; bi = min(d__1,d__2); } else { bi = *r__ * b[i__] - sum; infb = 1; } } ++ij; if (i__ == *n || cov[ij + *nd + 2] > 0.) { i__2 = infa + infa + infb - 1; mvlims_(&ai, &bi, &i__2, di, ei); if (*di >= *ei) { *value = 0.; return 0; } else { *value *= *ei - *di; ++(*nd); if (i__ < *n) { d__1 = *di + w[*nd] * (*ei - *di); y[*nd] = mvphnv_(&d__1); } infa = 0; infb = 0; } } } return 0; } /* mvvlsb_ */ /* Subroutine */ int mvsort_(integer *n, doublereal *lower, doublereal *upper, doublereal *delta, doublereal *correl, integer *infin, doublereal *y, logical *pivot, integer *nd, doublereal *a, doublereal *b, doublereal *dl, doublereal *cov, integer *infi, integer *inform__) { /* System generated locals */ integer i__1, i__2, i__3, i__4; doublereal d__1; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ static doublereal d__, e; static integer i__, j, k, l, m; static doublereal aj, bj; static integer ii, ij, il, jl; static doublereal sum, amin, bmin; static integer jmin; static doublereal epsi, demin, sumsq, cvdiag; extern /* Subroutine */ int mvlims_(doublereal *, doublereal *, integer *, doublereal *, doublereal *); extern doublereal mvtdns_(integer *, doublereal *); extern /* Subroutine */ int mvswap_(integer *, integer *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *), mvsswp_(doublereal *, doublereal *); /* Subroutine to sort integration limits and determine */ /* Cholesky factor. */ /* Parameter adjustments */ --infi; --cov; --dl; --b; --a; --y; --infin; --correl; --delta; --upper; --lower; /* Function Body */ *inform__ = 0; ij = 0; ii = 0; *nd = *n; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { a[i__] = 0.; b[i__] = 0.; dl[i__] = 0.; infi[i__] = infin[i__]; if (infi[i__] < 0) { --(*nd); } else { if (infi[i__] != 0) { a[i__] = lower[i__]; } if (infi[i__] != 1) { b[i__] = upper[i__]; } dl[i__] = delta[i__]; } i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { ++ij; ++ii; cov[ij] = correl[ii]; } ++ij; cov[ij] = 1.; } /* First move any doubly infinite limits to innermost positions. */ if (*nd > 0) { i__1 = *nd + 1; for (i__ = *n; i__ >= i__1; --i__) { if (infi[i__] >= 0) { i__2 = i__ - 1; for (j = 1; j <= i__2; ++j) { if (infi[j] < 0) { mvswap_(&j, &i__, &a[1], &b[1], &dl[1], &infi[1], n, & cov[1]); goto L10; } } } } /* Sort remaining limits and determine Cholesky factor. */ L10: ii = 0; jl = *nd; i__1 = *nd; for (i__ = 1; i__ <= i__1; ++i__) { /* Determine the integration limits for variable with minimum */ /* expected probability and interchange that variable with Ith. */ demin = 1.; jmin = i__; cvdiag = 0.; ij = ii; epsi = i__ * 1e-6 * i__; if (! (*pivot)) { jl = i__; } i__2 = jl; for (j = i__; j <= i__2; ++j) { if (cov[ij + j] > epsi) { sumsq = sqrt(cov[ij + j]); sum = dl[j]; i__3 = i__ - 1; for (k = 1; k <= i__3; ++k) { sum += cov[ij + k] * y[k]; } aj = (a[j] - sum) / sumsq; bj = (b[j] - sum) / sumsq; mvlims_(&aj, &bj, &infi[j], &d__, &e); if (demin >= e - d__) { jmin = j; amin = aj; bmin = bj; demin = e - d__; cvdiag = sumsq; } } ij += j; } if (jmin > i__) { mvswap_(&i__, &jmin, &a[1], &b[1], &dl[1], &infi[1], n, &cov[ 1]); } if (cov[ii + i__] < -epsi) { *inform__ = 3; } cov[ii + i__] = cvdiag; /* Compute Ith column of Cholesky factor. */ /* Compute expected value for Ith integration variable and */ /* scale Ith covariance matrix row and limits. */ if (cvdiag > 0.) { il = ii + i__; i__2 = *nd; for (l = i__ + 1; l <= i__2; ++l) { cov[il + i__] /= cvdiag; ij = ii + i__; i__3 = l; for (j = i__ + 1; j <= i__3; ++j) { cov[il + j] -= cov[il + i__] * cov[ij + i__]; ij += j; } il += l; } /* Expected Y = -( density(b) - density(a) )/( b - a ) */ if (demin > epsi) { y[i__] = 0.; if (infi[i__] != 0) { y[i__] = mvtdns_(&c__0, &amin); } if (infi[i__] != 1) { y[i__] -= mvtdns_(&c__0, &bmin); } y[i__] /= demin; } else { if (infi[i__] == 0) { y[i__] = bmin; } if (infi[i__] == 1) { y[i__] = amin; } if (infi[i__] == 2) { y[i__] = (amin + bmin) / 2; } } i__2 = i__; for (j = 1; j <= i__2; ++j) { ++ii; cov[ii] /= cvdiag; } a[i__] /= cvdiag; b[i__] /= cvdiag; dl[i__] /= cvdiag; } else { il = ii + i__; i__2 = *nd; for (l = i__ + 1; l <= i__2; ++l) { cov[il + i__] = 0.; il += l; } /* If the covariance matrix diagonal entry is zero, */ /* permute limits and rows, if necessary. */ for (j = i__ - 1; j >= 1; --j) { if ((d__1 = cov[ii + j], abs(d__1)) > epsi) { a[i__] /= cov[ii + j]; b[i__] /= cov[ii + j]; dl[i__] /= cov[ii + j]; if (cov[ii + j] < 0.) { mvsswp_(&a[i__], &b[i__]); if (infi[i__] != 2) { infi[i__] = 1 - infi[i__]; } } i__2 = j; for (l = 1; l <= i__2; ++l) { cov[ii + l] /= cov[ii + j]; } i__2 = i__ - 1; for (l = j + 1; l <= i__2; ++l) { if (cov[(l - 1) * l / 2 + j + 1] > 0.) { ij = ii; i__3 = l; for (k = i__ - 1; k >= i__3; --k) { i__4 = k; for (m = 1; m <= i__4; ++m) { mvsswp_(&cov[ij - k + m], &cov[ij + m] ); } mvsswp_(&a[k], &a[k + 1]); mvsswp_(&b[k], &b[k + 1]); mvsswp_(&dl[k], &dl[k + 1]); m = infi[k]; infi[k] = infi[k + 1]; infi[k + 1] = m; ij -= k; } goto L20; } } goto L20; } cov[ii + j] = 0.; } L20: ii += i__; y[i__] = 0.; } } } return 0; } /* mvsort_ */ doublereal mvtdns_(integer *nu, doublereal *x) { /* System generated locals */ integer i__1; doublereal ret_val, d__1; /* Builtin functions */ double sqrt(doublereal), pow_di(doublereal *, integer *), exp(doublereal); /* Local variables */ static integer i__; static doublereal prod; ret_val = 0.; if (*nu > 0) { prod = 1 / sqrt((doublereal) (*nu)); for (i__ = *nu - 2; i__ >= 1; i__ += -2) { prod = prod * (i__ + 1) / i__; } if (*nu % 2 == 0) { prod /= 2; } else { prod /= 3.141592653589793; } d__1 = sqrt(*x * *x / *nu + 1); i__1 = *nu + 1; ret_val = prod / pow_di(&d__1, &i__1); } else { if (abs(*x) < 10.) { ret_val = exp(-(*x) * *x / 2) / 2.506628274631001; } } return ret_val; } /* mvtdns_ */ /* Subroutine */ int mvlims_(doublereal *a, doublereal *b, integer *infin, doublereal *lower, doublereal *upper) { extern doublereal mvphi_(doublereal *); *lower = 0.; *upper = 1.; if (*infin >= 0) { if (*infin != 0) { *lower = mvphi_(a); } if (*infin != 1) { *upper = mvphi_(b); } } *upper = max(*upper,*lower); return 0; } /* mvlims_ */ /* Subroutine */ int mvsswp_(doublereal *x, doublereal *y) { static doublereal t; t = *x; *x = *y; *y = t; return 0; } /* mvsswp_ */ /* Subroutine */ int mvswap_(integer *p, integer *q, doublereal *a, doublereal *b, doublereal *d__, integer *infin, integer *n, doublereal *c__) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__, j, ii, jj; extern /* Subroutine */ int mvsswp_(doublereal *, doublereal *); /* Swaps rows and columns P and Q in situ, with P <= Q. */ /* Parameter adjustments */ --c__; --infin; --d__; --b; --a; /* Function Body */ mvsswp_(&a[*p], &a[*q]); mvsswp_(&b[*p], &b[*q]); mvsswp_(&d__[*p], &d__[*q]); j = infin[*p]; infin[*p] = infin[*q]; infin[*q] = j; jj = *p * (*p - 1) / 2; ii = *q * (*q - 1) / 2; mvsswp_(&c__[jj + *p], &c__[ii + *q]); i__1 = *p - 1; for (j = 1; j <= i__1; ++j) { mvsswp_(&c__[jj + j], &c__[ii + j]); } jj += *p; i__1 = *q - 1; for (i__ = *p + 1; i__ <= i__1; ++i__) { mvsswp_(&c__[jj + *p], &c__[ii + i__]); jj += i__; } ii += *q; i__1 = *n; for (i__ = *q + 1; i__ <= i__1; ++i__) { mvsswp_(&c__[ii + *p], &c__[ii + *q]); ii += i__; } return 0; } /* mvswap_ */ doublereal mvphi_(doublereal *z__) { /* Initialized data */ static doublereal a[44] = { .610143081923200417926465815756, -.434841272712577471828182820888,.176351193643605501125840298123, -.060710795609249414860051215825,.017712068995694114486147141191, -.004321119385567293818599864968,8.54216676887098678819832055e-4, -1.2715509060916274262889394e-4,1.1248167243671189468847072e-5, 3.13063885421820972630152e-7,-2.70988068537762022009086e-7, 3.0737622701407688440959e-8,2.515620384817622937314e-9, -1.02892992132031912759e-9,2.9944052119949939363e-11, 2.605178968726693629e-11,-2.634839924171969386e-12, -6.43404509890636443e-13,1.12457401801663447e-13, 1.7281533389986098e-14,-4.264101694942375e-15, -5.45371977880191e-16,1.58697607761671e-16,2.0899837844334e-17, -5.900526869409e-18,-9.41893387554e-19,2.1497735647e-19, 4.6660985008e-20,-7.243011862e-21,-2.387966824e-21,1.91177535e-22, 1.20482568e-22,-6.72377e-25,-5.747997e-24,-4.28493e-25, 2.44856e-25,4.3793e-26,-8.151e-27,-3.089e-27,9.3e-29,1.74e-28, 1.6e-29,-8e-30,-2e-30 }; /* System generated locals */ doublereal ret_val; /* Builtin functions */ double exp(doublereal); /* Local variables */ static doublereal b; static integer i__; static doublereal p, t, bm, bp, xa; /* Normal distribution probabilities accurate to 1d-15. */ /* Reference: J.L. Schonfelder, Math Comp 32(1978), pp 1232-1240. */ xa = abs(*z__) / 1.414213562373095048801688724209; if (xa > 100.) { p = 0.; } else { t = (xa * 8 - 30) / (xa * 4 + 15); bm = 0.; b = 0.; for (i__ = 24; i__ >= 0; --i__) { bp = b; b = bm; bm = t * b - bp + a[i__]; } p = exp(-xa * xa) * (bm - bp) / 4; } if (*z__ > 0.) { p = 1 - p; } ret_val = p; return ret_val; } /* mvphi_ */ doublereal mvphnv_(doublereal *p) { /* System generated locals */ doublereal ret_val, d__1, d__2; /* Builtin functions */ double log(doublereal), sqrt(doublereal); /* Local variables */ static doublereal q, r__; /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3 */ /* Produces the normal deviate Z corresponding to a given lower */ /* tail area of P. */ /* The hash sums below are the sums of the mantissas of the */ /* coefficients. They are included for use in checking */ /* transcription. */ /* Coefficients for P close to 0.5 */ /* HASH SUM AB 55.88319 28806 14901 4439 */ /* Coefficients for P not close to 0, 0.5 or 1. */ /* HASH SUM CD 49.33206 50330 16102 89036 */ /* Coefficients for P near 0 or 1. */ /* HASH SUM EF 47.52583 31754 92896 71629 */ q = (*p * 2 - 1) / 2; if (abs(q) <= .425) { r__ = .180625 - q * q; ret_val = q * (((((((r__ * 2509.0809287301226727 + 33430.575583588128105) * r__ + 67265.770927008700853) * r__ + 45921.953931549871457) * r__ + 13731.693765509461125) * r__ + 1971.5909503065514427) * r__ + 133.14166789178437745) * r__ + 3.387132872796366608) / (((((((r__ * 5226.495278852854561 + 28729.085735721942674) * r__ + 39307.89580009271061) * r__ + 21213.794301586595867) * r__ + 5394.1960214247511077) * r__ + 687.1870074920579083) * r__ + 42.313330701600911252) * r__ + 1); } else { /* Computing MIN */ d__1 = *p, d__2 = 1 - *p; r__ = min(d__1,d__2); if (r__ > 0.) { r__ = sqrt(-log(r__)); if (r__ <= 5.) { r__ += -1.6; ret_val = (((((((r__ * 7.7454501427834140764e-4 + .0227238449892691845833) * r__ + .24178072517745061177) * r__ + 1.27045825245236838258) * r__ + 3.64784832476320460504) * r__ + 5.7694972214606914055) * r__ + 4.6303378461565452959) * r__ + 1.42343711074968357734) / (((((((r__ * 1.05075007164441684324e-9 + 5.475938084995344946e-4) * r__ + .0151986665636164571966) * r__ + .14810397642748007459) * r__ + .68976733498510000455) * r__ + 1.6763848301838038494) * r__ + 2.05319162663775882187) * r__ + 1); } else { r__ += -5.; ret_val = (((((((r__ * 2.01033439929228813265e-7 + 2.71155556874348757815e-5) * r__ + .0012426609473880784386) * r__ + .026532189526576123093) * r__ + .29656057182850489123) * r__ + 1.7848265399172913358) * r__ + 5.4637849111641143699) * r__ + 6.6579046435011037772) / (((((((r__ * 2.04426310338993978564e-15 + 1.4215117583164458887e-7) * r__ + 1.8463183175100546818e-5) * r__ + 7.868691311456132591e-4) * r__ + .0148753612908506148525) * r__ + .13692988092273580531) * r__ + .59983220655588793769) * r__ + 1); } } else { ret_val = 9.; } if (q < 0.) { ret_val = -ret_val; } } return ret_val; } /* mvphnv_ */ doublereal mvbvn_(doublereal *lower, doublereal *upper, integer *infin, doublereal *correl) { /* System generated locals */ doublereal ret_val, d__1, d__2, d__3, d__4; /* Local variables */ extern doublereal mvbvu_(doublereal *, doublereal *, doublereal *); /* A function for computing bivariate normal probabilities. */ /* Parameters */ /* LOWER REAL, array of lower integration limits. */ /* UPPER REAL, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(I) = 0, Ith limits are (-infinity, UPPER(I)]; */ /* if INFIN(I) = 1, Ith limits are [LOWER(I), infinity); */ /* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)]. */ /* CORREL REAL, correlation coefficient. */ /* Parameter adjustments */ --infin; --upper; --lower; /* Function Body */ if (infin[1] == 2 && infin[2] == 2) { ret_val = mvbvu_(&lower[1], &lower[2], correl) - mvbvu_(&upper[1], & lower[2], correl) - mvbvu_(&lower[1], &upper[2], correl) + mvbvu_(&upper[1], &upper[2], correl); } else if (infin[1] == 2 && infin[2] == 1) { ret_val = mvbvu_(&lower[1], &lower[2], correl) - mvbvu_(&upper[1], & lower[2], correl); } else if (infin[1] == 1 && infin[2] == 2) { ret_val = mvbvu_(&lower[1], &lower[2], correl) - mvbvu_(&lower[1], & upper[2], correl); } else if (infin[1] == 2 && infin[2] == 0) { d__1 = -upper[1]; d__2 = -upper[2]; d__3 = -lower[1]; d__4 = -upper[2]; ret_val = mvbvu_(&d__1, &d__2, correl) - mvbvu_(&d__3, &d__4, correl); } else if (infin[1] == 0 && infin[2] == 2) { d__1 = -upper[1]; d__2 = -upper[2]; d__3 = -upper[1]; d__4 = -lower[2]; ret_val = mvbvu_(&d__1, &d__2, correl) - mvbvu_(&d__3, &d__4, correl); } else if (infin[1] == 1 && infin[2] == 0) { d__1 = -upper[2]; d__2 = -(*correl); ret_val = mvbvu_(&lower[1], &d__1, &d__2); } else if (infin[1] == 0 && infin[2] == 1) { d__1 = -upper[1]; d__2 = -(*correl); ret_val = mvbvu_(&d__1, &lower[2], &d__2); } else if (infin[1] == 1 && infin[2] == 1) { ret_val = mvbvu_(&lower[1], &lower[2], correl); } else if (infin[1] == 0 && infin[2] == 0) { d__1 = -upper[1]; d__2 = -upper[2]; ret_val = mvbvu_(&d__1, &d__2, correl); } else { ret_val = 1.; } return ret_val; } /* mvbvn_ */ doublereal mvbvu_(doublereal *sh, doublereal *sk, doublereal *r__) { /* Initialized data */ static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_83 = { .1713244923791705, .3607615730481384, .4679139345726904, {0}, .04717533638651177, .1069393259953183, .1600783285433464, .2031674267230659, .2334925365383547, .2491470458134029, {0}, .01761400713915212, .04060142980038694, .06267204833410906, .08327674157670475, .1019301198172404, .1181945319615184, .1316886384491766, .1420961093183821, .1491729864726037, .1527533871307259 }; #define w ((doublereal *)&equiv_83) static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_84 = { -.9324695142031522, -.6612093864662647, -.238619186083197, {0}, -.9815606342467191, -.904117256370475, -.769902674194305, -.5873179542866171, -.3678314989981802, -.1252334085114692, {0}, -.9931285991850949, -.9639719272779138, -.9122344282513259, -.8391169718222188, -.7463319064601508, -.636053680726515, -.5108670019508271, -.3737060887154196, -.2277858511416451, -.07652652113349733 }; #define x ((doublereal *)&equiv_84) /* System generated locals */ integer i__1; doublereal ret_val, d__1, d__2, d__3, d__4; /* Builtin functions */ double asin(doublereal), sin(doublereal), exp(doublereal), sqrt( doublereal); /* Local variables */ static doublereal a, b, c__, d__, h__; static integer i__; static doublereal k; static integer lg; static doublereal as; static integer ng; static doublereal bs, hk, hs, sn, rs, xs, bvn, asr; extern doublereal mvphi_(doublereal *); /* A function for computing bivariate normal probabilities; */ /* developed using */ /* Drezner, Z. and Wesolowsky, G. O. (1989), */ /* On the Computation of the Bivariate Normal Integral, */ /* J. Stat. Comput. Simul.. 35 pp. 101-107. */ /* with extensive modications for double precisions by */ /* Alan Genz and Yihong Ge */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* BVN - calculate the probability that X is larger than SH and Y is */ /* larger than SK. */ /* Parameters */ /* SH REAL, integration limit */ /* SK REAL, integration limit */ /* R REAL, correlation coefficient */ /* LG INTEGER, number of Gauss Rule Points and Weights */ /* Gauss Legendre Points and Weights, N = 6 */ /* Gauss Legendre Points and Weights, N = 12 */ /* Gauss Legendre Points and Weights, N = 20 */ if (abs(*r__) < .3f) { ng = 1; lg = 3; } else if (abs(*r__) < .75f) { ng = 2; lg = 6; } else { ng = 3; lg = 10; } h__ = *sh; k = *sk; hk = h__ * k; bvn = 0.; if (abs(*r__) < .925f) { hs = (h__ * h__ + k * k) / 2; asr = asin(*r__); i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { sn = sin(asr * (x[i__ + ng * 10 - 11] + 1) / 2); bvn += w[i__ + ng * 10 - 11] * exp((sn * hk - hs) / (1 - sn * sn)) ; sn = sin(asr * (-x[i__ + ng * 10 - 11] + 1) / 2); bvn += w[i__ + ng * 10 - 11] * exp((sn * hk - hs) / (1 - sn * sn)) ; } d__1 = -h__; d__2 = -k; bvn = bvn * asr / 12.566370614359172 + mvphi_(&d__1) * mvphi_(&d__2); } else { if (*r__ < 0.) { k = -k; hk = -hk; } if (abs(*r__) < 1.) { as = (1 - *r__) * (*r__ + 1); a = sqrt(as); /* Computing 2nd power */ d__1 = h__ - k; bs = d__1 * d__1; c__ = (4 - hk) / 8; d__ = (12 - hk) / 16; bvn = a * exp(-(bs / as + hk) / 2) * (1 - c__ * (bs - as) * (1 - d__ * bs / 5) / 3 + c__ * d__ * as * as / 5); if (hk > -160.) { b = sqrt(bs); d__1 = -b / a; bvn -= exp(-hk / 2) * sqrt(6.283185307179586) * mvphi_(&d__1) * b * (1 - c__ * bs * (1 - d__ * bs / 5) / 3); } a /= 2; i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { /* Computing 2nd power */ d__1 = a * (x[i__ + ng * 10 - 11] + 1); xs = d__1 * d__1; rs = sqrt(1 - xs); bvn += a * w[i__ + ng * 10 - 11] * (exp(-bs / (xs * 2) - hk / (rs + 1)) / rs - exp(-(bs / xs + hk) / 2) * (c__ * xs * (d__ * xs + 1) + 1)); /* Computing 2nd power */ d__1 = -x[i__ + ng * 10 - 11] + 1; xs = as * (d__1 * d__1) / 4; rs = sqrt(1 - xs); bvn += a * w[i__ + ng * 10 - 11] * exp(-(bs / xs + hk) / 2) * (exp(-hk * (1 - rs) / ((rs + 1) * 2)) / rs - (c__ * xs * (d__ * xs + 1) + 1)); } bvn = -bvn / 6.283185307179586; } if (*r__ > 0.) { d__1 = -max(h__,k); bvn += mvphi_(&d__1); } if (*r__ < 0.) { /* Computing MAX */ d__3 = -h__; d__4 = -k; d__1 = 0., d__2 = mvphi_(&d__3) - mvphi_(&d__4); bvn = -bvn + max(d__1,d__2); } } ret_val = bvn; return ret_val; } /* mvbvu_ */ #undef x #undef w doublereal mvstdt_(integer *nu, doublereal *t) { /* System generated locals */ doublereal ret_val; /* Builtin functions */ double atan(doublereal), sqrt(doublereal); /* Local variables */ static integer j; static doublereal rn, ts, tt, csthe, snthe; extern doublereal mvphi_(doublereal *); static doublereal polyn; /* Student t Distribution Function */ /* T */ /* TSTDNT = C I ( 1 + y*y/NU )**( -(NU+1)/2 ) dy */ /* NU -INF */ if (*nu < 1) { ret_val = mvphi_(t); } else if (*nu == 1) { ret_val = (atan(*t) * 2 / 3.141592653589793 + 1) / 2; } else if (*nu == 2) { ret_val = (*t / sqrt(*t * *t + 2) + 1) / 2; } else { tt = *t * *t; csthe = *nu / (*nu + tt); polyn = 1.; for (j = *nu - 2; j >= 2; j += -2) { polyn = (j - 1) * csthe * polyn / j + 1; } if (*nu % 2 == 1) { rn = (doublereal) (*nu); ts = *t / sqrt(rn); ret_val = ((atan(ts) + ts * csthe * polyn) * 2 / 3.141592653589793 + 1) / 2; } else { snthe = *t / sqrt(*nu + tt); ret_val = (snthe * polyn + 1) / 2; } if (ret_val < 0.) { ret_val = 0.; } } return ret_val; } /* mvstdt_ */ doublereal mvbvt_(integer *nu, doublereal *lower, doublereal *upper, integer * infin, doublereal *correl) { /* System generated locals */ doublereal ret_val, d__1, d__2, d__3, d__4; /* Local variables */ extern doublereal mvbvn_(doublereal *, doublereal *, integer *, doublereal *), mvbvtl_(integer *, doublereal *, doublereal *, doublereal *); /* A function for computing bivariate normal and t probabilities. */ /* Parameters */ /* NU INTEGER degrees of freedom parameter; NU < 1 gives */ /* normal case. */ /* LOWER REAL, array of lower integration limits. */ /* UPPER REAL, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(I) = 0, Ith limits are (-infinity, UPPER(I)]; */ /* if INFIN(I) = 1, Ith limits are [LOWER(I), infinity); */ /* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)]. */ /* CORREL REAL, correlation coefficient. */ /* Parameter adjustments */ --infin; --upper; --lower; /* Function Body */ if (*nu < 1) { ret_val = mvbvn_(&lower[1], &upper[1], &infin[1], correl); } else { if (infin[1] == 2 && infin[2] == 2) { ret_val = mvbvtl_(nu, &upper[1], &upper[2], correl) - mvbvtl_(nu, &upper[1], &lower[2], correl) - mvbvtl_(nu, &lower[1], & upper[2], correl) + mvbvtl_(nu, &lower[1], &lower[2], correl); } else if (infin[1] == 2 && infin[2] == 1) { d__1 = -lower[1]; d__2 = -lower[2]; d__3 = -upper[1]; d__4 = -lower[2]; ret_val = mvbvtl_(nu, &d__1, &d__2, correl) - mvbvtl_(nu, &d__3, & d__4, correl); } else if (infin[1] == 1 && infin[2] == 2) { d__1 = -lower[1]; d__2 = -lower[2]; d__3 = -lower[1]; d__4 = -upper[2]; ret_val = mvbvtl_(nu, &d__1, &d__2, correl) - mvbvtl_(nu, &d__3, & d__4, correl); } else if (infin[1] == 2 && infin[2] == 0) { ret_val = mvbvtl_(nu, &upper[1], &upper[2], correl) - mvbvtl_(nu, &lower[1], &upper[2], correl); } else if (infin[1] == 0 && infin[2] == 2) { ret_val = mvbvtl_(nu, &upper[1], &upper[2], correl) - mvbvtl_(nu, &upper[1], &lower[2], correl); } else if (infin[1] == 1 && infin[2] == 0) { d__1 = -lower[1]; d__2 = -(*correl); ret_val = mvbvtl_(nu, &d__1, &upper[2], &d__2); } else if (infin[1] == 0 && infin[2] == 1) { d__1 = -lower[2]; d__2 = -(*correl); ret_val = mvbvtl_(nu, &upper[1], &d__1, &d__2); } else if (infin[1] == 1 && infin[2] == 1) { d__1 = -lower[1]; d__2 = -lower[2]; ret_val = mvbvtl_(nu, &d__1, &d__2, correl); } else if (infin[1] == 0 && infin[2] == 0) { ret_val = mvbvtl_(nu, &upper[1], &upper[2], correl); } else { ret_val = 1.; } } return ret_val; } /* mvbvt_ */ doublereal mvbvtc_(integer *nu, doublereal *l, doublereal *u, integer *infin, doublereal *rho) { /* System generated locals */ doublereal ret_val; /* Local variables */ static doublereal b; static integer i__; static doublereal lw[2], up[2]; static integer inf[2]; extern doublereal mvbvt_(integer *, doublereal *, doublereal *, integer *, doublereal *); /* A function for computing complementary bivariate normal and t */ /* probabilities. */ /* Parameters */ /* NU INTEGER degrees of freedom parameter. */ /* L REAL, array of lower integration limits. */ /* U REAL, array of upper integration limits. */ /* INFIN INTEGER, array of integration limits flags: */ /* if INFIN(1) INFIN(2), then MVBVTC computes */ /* 0 0 P( X>U(1), Y>U(2) ) */ /* 1 0 P( XU(2) ) */ /* 0 1 P( X>U(1), YU(1), Y>U(2) ) + P( XU(2) ) */ /* 2 1 P( X>U(1), YU(1), Y>U(2) ) + P( X>U(1), YU(2) ) + P( XU(1), YU(1), Y>U(2) ) + P( XU(2) ) */ /* RHO REAL, correlation coefficient. */ /* Parameter adjustments */ --infin; --u; --l; /* Function Body */ for (i__ = 1; i__ <= 2; ++i__) { if (infin[i__] % 2 == 0) { inf[i__ - 1] = 1; lw[i__ - 1] = u[i__]; } else { inf[i__ - 1] = 0; up[i__ - 1] = l[i__]; } } b = mvbvt_(nu, lw, up, inf, rho); for (i__ = 1; i__ <= 2; ++i__) { if (infin[i__] == 2) { inf[i__ - 1] = 0; up[i__ - 1] = l[i__]; b += mvbvt_(nu, lw, up, inf, rho); } } if (infin[1] == 2 && infin[2] == 2) { inf[0] = 1; lw[0] = u[1]; b += mvbvt_(nu, lw, up, inf, rho); } ret_val = b; return ret_val; } /* mvbvtc_ */ doublereal mvbvtl_(integer *nu, doublereal *dh, doublereal *dk, doublereal * r__) { /* System generated locals */ integer i__1; doublereal ret_val, d__1, d__2, d__3; /* Builtin functions */ double sqrt(doublereal), d_sign(doublereal *, doublereal *), atan2( doublereal, doublereal); /* Local variables */ static integer j, hs, ks; static doublereal hkn, hpk, hrk, krh, bvt, ors, snu, gmph, gmpk, hkrn, qhrk, xnkh, xnhk, btnckh, btnchk, btpdkh, btpdhk; /* a function for computing bivariate t probabilities. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, Wa 99164-3113 */ /* Email : alangenz@wsu.edu */ /* this function is based on the method described by */ /* Dunnett, C.W. and M. Sobel, (1954), */ /* A bivariate generalization of Student's t-distribution */ /* with tables for certain special cases, */ /* Biometrika 41, pp. 153-169. */ /* mvbvtl - calculate the probability that x < dh and y < dk. */ /* parameters */ /* nu number of degrees of freedom */ /* dh 1st lower integration limit */ /* dk 2nd lower integration limit */ /* r correlation coefficient */ snu = sqrt((doublereal) (*nu)); ors = 1 - *r__ * *r__; hrk = *dh - *r__ * *dk; krh = *dk - *r__ * *dh; if (abs(hrk) + ors > 0.) { /* Computing 2nd power */ d__1 = hrk; /* Computing 2nd power */ d__2 = hrk; /* Computing 2nd power */ d__3 = *dk; xnhk = d__1 * d__1 / (d__2 * d__2 + ors * (*nu + d__3 * d__3)); /* Computing 2nd power */ d__1 = krh; /* Computing 2nd power */ d__2 = krh; /* Computing 2nd power */ d__3 = *dh; xnkh = d__1 * d__1 / (d__2 * d__2 + ors * (*nu + d__3 * d__3)); } else { xnhk = 0.; xnkh = 0.; } d__1 = *dh - *r__ * *dk; hs = (integer) d_sign(&c_b24, &d__1); d__1 = *dk - *r__ * *dh; ks = (integer) d_sign(&c_b24, &d__1); if (*nu % 2 == 0) { bvt = atan2(sqrt(ors), -(*r__)) / 6.2831853071795862; /* Computing 2nd power */ d__1 = *dh; gmph = *dh / sqrt((*nu + d__1 * d__1) * 16); /* Computing 2nd power */ d__1 = *dk; gmpk = *dk / sqrt((*nu + d__1 * d__1) * 16); btnckh = atan2(sqrt(xnkh), sqrt(1 - xnkh)) * 2 / 3.14159265358979323844; btpdkh = sqrt(xnkh * (1 - xnkh)) * 2 / 3.14159265358979323844; btnchk = atan2(sqrt(xnhk), sqrt(1 - xnhk)) * 2 / 3.14159265358979323844; btpdhk = sqrt(xnhk * (1 - xnhk)) * 2 / 3.14159265358979323844; i__1 = *nu / 2; for (j = 1; j <= i__1; ++j) { bvt += gmph * (ks * btnckh + 1); bvt += gmpk * (hs * btnchk + 1); btnckh += btpdkh; btpdkh = (j << 1) * btpdkh * (1 - xnkh) / ((j << 1) + 1); btnchk += btpdhk; btpdhk = (j << 1) * btpdhk * (1 - xnhk) / ((j << 1) + 1); /* Computing 2nd power */ d__1 = *dh; gmph = gmph * ((j << 1) - 1) / ((j << 1) * (d__1 * d__1 / *nu + 1) ); /* Computing 2nd power */ d__1 = *dk; gmpk = gmpk * ((j << 1) - 1) / ((j << 1) * (d__1 * d__1 / *nu + 1) ); } } else { /* Computing 2nd power */ d__1 = *dh; /* Computing 2nd power */ d__2 = *dk; qhrk = sqrt(d__1 * d__1 + d__2 * d__2 - *r__ * 2 * *dh * *dk + *nu * ors); hkrn = *dh * *dk + *r__ * *nu; hkn = *dh * *dk - *nu; hpk = *dh + *dk; bvt = atan2(-snu * (hkn * qhrk + hpk * hkrn), hkn * hkrn - *nu * hpk * qhrk) / 6.2831853071795862; if (bvt < -1e-15) { bvt += 1; } /* Computing 2nd power */ d__1 = *dh; gmph = *dh / (snu * 6.2831853071795862 * (d__1 * d__1 / *nu + 1)); /* Computing 2nd power */ d__1 = *dk; gmpk = *dk / (snu * 6.2831853071795862 * (d__1 * d__1 / *nu + 1)); btnckh = sqrt(xnkh); btpdkh = btnckh; btnchk = sqrt(xnhk); btpdhk = btnchk; i__1 = (*nu - 1) / 2; for (j = 1; j <= i__1; ++j) { bvt += gmph * (ks * btnckh + 1); bvt += gmpk * (hs * btnchk + 1); btpdkh = ((j << 1) - 1) * btpdkh * (1 - xnkh) / (j << 1); btnckh += btpdkh; btpdhk = ((j << 1) - 1) * btpdhk * (1 - xnhk) / (j << 1); btnchk += btpdhk; /* Computing 2nd power */ d__1 = *dh; gmph = (j << 1) * gmph / (((j << 1) + 1) * (d__1 * d__1 / *nu + 1) ); /* Computing 2nd power */ d__1 = *dk; gmpk = (j << 1) * gmpk / (((j << 1) + 1) * (d__1 * d__1 / *nu + 1) ); } } ret_val = bvt; /* end mvbvtl */ return ret_val; } /* mvbvtl_ */ doublereal mvchnv_(integer *n, doublereal *p) { /* Initialized data */ static integer no = 0; /* System generated locals */ doublereal ret_val, d__1; /* Builtin functions */ double log(doublereal), sqrt(doublereal), exp(doublereal); /* Local variables */ static integer i__; static doublereal r__, ro, lkn; extern doublereal mvchnc_(doublereal *, integer *, doublereal *, doublereal *), mvphnv_(doublereal *); /* MVCHNV */ /* P = 1 - K I exp(-t*t/2) t**(N-1) dt, for N >= 1. */ /* N 0 */ /* LRP = LOG( SQRT( 2/PI ) ) */ if (*n <= 1) { d__1 = *p / 2; r__ = -mvphnv_(&d__1); } else if (*p < 1.) { if (*n == 2) { r__ = sqrt(log(*p) * -2); } else { if (*n != no) { no = *n; lkn = 0.; for (i__ = *n - 2; i__ >= 2; i__ += -2) { lkn -= log((doublereal) i__); } if (*n % 2 == 1) { lkn += -.22579135264472743235; } } if ((doublereal) (*n) >= log(1 - *p) * -5 / 4) { r__ = 2. / (*n * 9); /* Computing 3rd power */ d__1 = -mvphnv_(p) * sqrt(r__) + 1 - r__; r__ = *n * (d__1 * (d__1 * d__1)); if (r__ > (doublereal) ((*n << 1) + 6)) { r__ = (lkn - log(*p)) * 2 + (*n - 2) * log(r__); } } else { r__ = exp((log((1 - *p) * *n) - lkn) * 2. / *n); } r__ = sqrt(r__); ro = r__; r__ = mvchnc_(&lkn, n, p, &r__); if ((d__1 = r__ - ro, abs(d__1)) > 1e-6) { ro = r__; r__ = mvchnc_(&lkn, n, p, &r__); if ((d__1 = r__ - ro, abs(d__1)) > 1e-6) { r__ = mvchnc_(&lkn, n, p, &r__); } } } } else { r__ = 0.; } ret_val = r__; return ret_val; } /* mvchnv_ */ doublereal mvchnc_(doublereal *lkn, integer *n, doublereal *p, doublereal * r__) { /* System generated locals */ doublereal ret_val, d__1; /* Builtin functions */ double log(doublereal), exp(doublereal); /* Local variables */ static integer i__; static doublereal df, ai, bi, al, ci, di, dl, rn, rr, chi; extern doublereal mvphi_(doublereal *); /* Third order Schroeder correction to R for MVCHNV */ /* LRP = LOG( SQRT( 2/PI ) ) */ rr = *r__ * *r__; if (*n < 2) { d__1 = -(*r__); chi = mvphi_(&d__1) * 2; } else if (*n < 100) { /* Use standard Chi series */ rn = 1.; for (i__ = *n - 2; i__ >= 2; i__ += -2) { rn = rr * rn / i__ + 1; } rr /= 2; if (*n % 2 == 0) { chi = exp(log(rn) - rr); } else { d__1 = -(*r__); chi = exp(log(*r__ * rn) - .22579135264472743235 - rr) + mvphi_(& d__1) * 2; } } else { rr /= 2; al = *n / 2.; chi = exp(-rr + al * log(rr) + *lkn + log(2.) * (*n - 2) / 2); if (rr < al + 1) { /* Use Incomplete Gamma series */ dl = chi; for (i__ = 1; i__ <= 1000; ++i__) { dl = dl * rr / (al + i__); chi += dl; if ((d__1 = dl * rr / (al + i__ + 1 - rr), abs(d__1)) < 1e-14) { goto L10; } } L10: chi = 1 - chi / al; } else { /* Use Incomplete Gamma continued fraction */ bi = rr + 1 - al; ci = 1e14; di = bi; chi /= bi; for (i__ = 1; i__ <= 250; ++i__) { ai = i__ * (al - i__); bi += 2; ci = bi + ai / ci; if (ci == 0.) { ci = 1e-14; } di = bi + ai / di; if (di == 0.) { di = 1e-14; } dl = ci / di; chi *= dl; if ((d__1 = dl - 1, abs(d__1)) < 1e-14) { goto L20; } } } } L20: df = (*p - chi) / exp(*lkn + (*n - 1) * log(*r__) - rr); ret_val = *r__ - df * (1 - df * (*r__ - (*n - 1) / *r__) / 2); return ret_val; } /* mvchnc_ */ /* Subroutine */ int mvkbrv_(integer *ndim, integer *minvls, integer *maxvls, integer *nf, U_fp funsub, doublereal *abseps, doublereal *releps, doublereal *abserr, doublereal *finest, integer *inform__) { /* Initialized data */ static integer p[28] = { 31,47,73,113,173,263,397,593,907,1361,2053,3079, 4621,6947,10427,15641,23473,35221,52837,79259,118891,178349, 267523,401287,601943,902933,1354471,2031713 }; static integer c__[2772] /* was [28][99] */ = { 12,13,27,35,64,111,163, 246,347,505,794,1189,1763,2872,4309,6610,9861,10327,19540,34566, 31929,40701,103650,165843,130365,333459,500884,858339,9,11,28,27, 66,42,154,189,402,220,325,888,1018,3233,3758,6977,3647,7582,19926, 9579,49367,69087,125480,90647,236711,375354,566009,918142,9,17,10, 27,28,54,83,242,322,601,960,259,1500,1534,4034,1686,4073,7124, 11582,12654,10982,77576,59978,59925,110235,102417,399251,501970, 13,10,11,36,28,118,43,102,418,644,528,1082,432,2941,1963,3819, 2535,8214,11113,26856,3527,64590,46875,189541,125699,383544, 652979,234813,12,15,11,22,44,20,82,250,215,612,247,725,1332,2910, 730,2314,3430,9600,24585,37873,27066,39397,77172,67647,56483, 292630,355008,460565,12,15,20,29,44,31,92,250,220,160,247,811, 2203,393,642,5647,9865,10271,8726,38806,13226,33179,83021,74795, 93735,41147,430235,31996,12,15,11,29,55,31,150,102,339,206,338, 636,126,1796,1502,3953,2830,10193,17218,29501,56010,10858,126904, 68365,234469,374614,328722,753018,12,15,11,20,67,72,59,250,339, 206,366,965,2240,919,2246,3614,9328,10800,419,17271,18911,38935, 14541,167485,60549,48032,670680,256150,12,15,28,45,10,17,76,280, 339,206,847,497,1719,446,3834,5115,4320,9086,4918,3663,40574, 43129,56299,143918,1291,435453,405585,199809,12,15,13,5,10,94,76, 118,337,422,753,497,1284,919,1511,423,5913,2365,4918,10763,20767, 35468,43636,74912,93937,281493,405585,993599,12,22,13,5,10,14,47, 196,218,134,753,1490,878,919,1102,423,10365,4409,4918,18955,20767, 35468,11655,167289,245291,358168,424646,245149,12,15,28,5,10,14, 11,118,315,518,236,1490,1983,1117,1102,5408,8272,13812,15701,1298, 9686,5279,52680,75517,196061,114121,670180,794183,3,15,13,21,10, 11,11,191,315,134,334,392,266,103,1522,7426,3706,5661,17710,26560, 47603,61518,88549,8148,258647,346892,670180,121349,3,6,13,21,10, 14,100,215,315,134,334,1291,266,103,1522,423,6186,9344,4037,17132, 47603,61518,29804,172106,162489,238990,641587,150619,3,6,13,21,38, 14,131,121,315,518,461,508,266,103,3427,423,7806,9344,4037,17132, 11736,27945,101894,126159,176631,317313,215580,376952,12,6,14,21, 38,14,116,121,167,652,711,508,266,103,3427,487,7806,10362,15808, 4753,11736,70975,113675,35867,204895,164158,59048,809123,7,15,14, 21,10,94,116,49,167,382,652,1291,747,103,3928,6227,7806,9344, 11401,4753,41601,70975,48040,35867,73353,35497,633320,809123,7,15, 14,21,10,10,116,49,167,206,381,1291,747,103,915,2660,8610,9344, 19398,8713,12888,86478,113675,35867,172319,70530,81010,804319,12, 9,14,21,10,10,116,49,167,158,381,508,127,103,915,6227,2563,8585, 25950,18624,32948,86478,34987,121694,28881,70530,20789,67352,12, 13,14,21,10,10,116,49,361,441,381,1291,127,2311,3818,1221,11558, 11114,25950,13082,30801,20514,48308,52171,136787,434839,389250, 969594,12,2,14,21,10,10,116,49,201,179,652,508,2074,3117,3818, 3811,11558,13080,4454,6791,44243,20514,97926,95354,122081,24754, 389250,434796,12,2,14,21,49,14,138,49,124,441,381,508,127,1101, 3818,197,9421,13080,24987,1122,53351,73178,5475,113969,122081, 24754,638764,969594,12,2,14,21,49,14,138,49,124,56,381,867,2074, 3117,3818,4367,1181,13080,11719,19363,53351,73178,49449,113969, 275993,24754,638764,804319,12,13,14,21,49,14,138,49,124,559,381, 867,1400,3117,4782,351,9421,6949,8697,34695,16016,43098,6850, 76304,64673,393656,389250,391368,12,11,14,21,49,14,138,49,124,559, 381,867,1383,1101,4782,1281,1181,3436,1452,18770,35086,43098, 62545,123709,211587,118711,389250,761041,12,11,14,21,49,14,138,49, 124,56,381,867,1383,1101,4782,1221,1181,3436,1452,18770,35086, 4701,62545,123709,211587,118711,398094,754049,12,10,14,21,49,14, 138,49,124,56,381,934,1383,1101,3818,351,1181,3436,1452,18770, 32581,59979,9440,144615,211587,148227,80846,466264,3,15,14,21,49, 14,138,49,124,56,381,867,1383,1101,4782,351,9421,13213,1452,18770, 2464,59979,33242,123709,282859,271087,147776,754049,3,15,14,29,49, 11,138,171,124,56,226,867,1383,1101,3818,351,1181,6130,1452,15628, 2464,58556,9440,64958,282859,355831,147776,754049,3,15,14,17,49, 11,138,171,124,56,326,867,1383,2503,3818,7245,1181,6130,8697, 18770,49554,69916,33242,64958,211587,91034,296177,466264,12,15,14, 17,49,11,101,171,124,56,326,867,1383,2503,1327,1984,10574,8159, 8697,18770,2464,15170,9440,32377,242821,417029,398094,754049,7,15, 31,17,49,8,101,171,124,56,326,867,1383,2503,1327,2999,10574,8159, 6436,18770,2464,15170,33242,193002,256865,417029,398094,754049,7, 15,31,17,49,8,101,171,231,56,326,867,1383,2503,1327,2999,3534, 11595,21475,18770,49554,4832,9440,193002,256865,91034,147776, 282852,12,15,5,17,38,8,101,171,231,56,326,867,1383,2503,1327,2999, 3534,8159,6436,33766,49554,4832,62850,25023,256865,91034,147776, 429907,12,15,5,17,38,8,101,171,90,56,326,1284,1400,2503,1327,2999, 3534,3436,22913,20837,2464,43064,9440,40017,122203,417029,396313, 390017,12,15,5,17,31,8,101,171,90,56,326,1284,1383,2503,1327,2999, 3534,7096,6434,20837,81,71685,9440,141605,291915,91034,578233, 276645,12,6,31,17,4,8,101,171,90,56,126,1284,1383,2503,1327,2999, 3534,7096,18497,20837,27260,4832,9440,189165,122203,299843,578233, 994856,12,6,13,17,4,8,101,171,90,56,326,1284,1383,429,1387,3995, 2898,7096,11089,20837,10681,15170,90308,189165,291915,299843, 578233,250142,12,6,11,17,31,18,101,171,90,56,326,1284,1383,429, 1387,2063,2898,7096,11089,20837,2185,15170,90308,141605,291915, 413548,19482,144595,12,15,11,23,64,18,101,171,90,101,326,1284, 1383,429,1387,2063,2898,7096,11089,20837,2185,15170,90308,189165, 122203,413548,620706,907454,12,15,11,23,4,18,101,171,90,101,326, 1284,1383,429,1387,2063,3450,7096,11089,6545,2185,27679,47904, 189165,25639,308300,187095,689648,12,9,11,23,4,18,101,171,90,56, 326,1284,1383,429,1387,2063,2141,7096,3036,6545,2185,27679,47904, 141605,25639,413548,620706,687580,3,13,11,23,4,18,101,171,90,101, 326,1284,507,429,1387,1644,2141,7096,3036,6545,2185,27679,47904, 141605,291803,413548,187095,687580,3,2,11,23,64,113,101,171,90, 101,326,563,1073,429,1387,2063,2141,7096,14208,6545,2185,60826, 47904,141605,245397,413548,126467,687580,3,2,13,23,45,62,101,171, 90,101,326,563,1073,1702,1387,2077,2141,7096,14208,6545,2185, 60826,47904,189165,284047,308300,241663,687580,12,2,13,23,45,62, 101,171,90,101,326,563,1073,1702,1387,2512,2141,7096,14208,12138, 18086,6187,47904,127047,245397,308300,241663,978368,7,13,13,23,45, 45,101,171,90,101,326,563,1073,1702,2339,2512,2141,7096,14208, 12138,18086,6187,47904,127047,245397,308300,241663,687580,7,11,13, 23,45,45,101,171,90,101,195,1010,1990,184,2339,2512,2141,7096, 12906,12138,18086,4264,47904,127047,245397,413548,241663,552742, 12,11,13,23,45,113,101,171,48,101,195,1010,1990,184,2339,2077, 7055,7096,12906,12138,18086,4264,47904,127047,245397,308300, 241663,105195,12,10,13,23,45,113,101,171,48,101,55,1010,1990,184, 2339,2077,7055,7096,12906,12138,18086,4264,41143,127047,245397, 308300,241663,942843,12,15,13,23,66,113,101,171,48,193,55,208, 1990,184,2339,2077,7055,7096,12906,12138,17631,4264,41143,127047, 245397,308300,241663,768249,12,15,14,21,66,113,116,171,48,193,55, 838,1990,184,2339,2077,7055,7096,12906,12138,17631,4264,41143, 127047,245397,308300,241663,307142,12,15,14,27,66,113,116,171,90, 193,55,563,507,105,2339,754,7055,7096,12906,12138,18086,45567, 41143,127047,94241,308300,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,563,507,105,2339,754,7055,4377,12906,12138,18086,32269, 41143,127047,66575,15311,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,563,507,105,2339,754,7055,7096,12906,12138,18086,32269, 41143,127047,66575,15311,241663,307142,12,15,14,3,66,113,116,171, 90,193,55,759,507,105,2339,754,7055,4377,7614,12138,37335,32269, 41143,127047,217673,15311,241663,880619,12,15,14,24,66,113,116, 171,90,193,55,759,507,105,2339,754,7055,4377,7614,12138,37774, 32269,36114,127047,217673,15311,321632,880619,3,15,14,27,66,113, 100,171,90,101,55,564,507,105,2339,754,7055,4377,7614,12138,37774, 62060,36114,127047,217673,176255,23210,880619,3,15,14,27,66,113, 100,171,90,101,55,759,507,105,2339,754,7055,4377,7614,12138,37774, 62060,36114,127047,217673,176255,23210,880619,3,6,14,17,66,113, 100,171,90,101,55,759,507,105,3148,754,7055,4377,5021,30483,26401, 62060,36114,127047,217673,23613,394484,880619,12,6,14,29,66,113, 100,171,90,101,55,801,507,105,3148,754,7055,5410,5021,30483,26401, 62060,36114,127047,217673,23613,394484,880619,7,6,14,29,66,113, 100,171,90,101,55,801,1073,105,3148,754,7055,5410,5021,30483, 26401,62060,24997,127047,217673,23613,394484,880619,7,15,14,29,66, 113,138,161,90,101,55,801,1073,105,3148,754,7055,4377,5021,30483, 26401,62060,65162,127047,217673,23613,78101,117185,12,15,14,17,66, 113,138,161,90,101,55,801,1073,105,3148,754,2831,4377,5021,30483, 26401,62060,65162,127047,217673,23613,78101,117185,12,9,14,5,66, 113,138,161,90,101,55,759,1073,105,3148,754,8204,4377,5021,12138, 26401,62060,65162,127047,217673,23613,78101,117185,12,13,14,5,66, 63,138,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,62060,65162,127785,217673,172210,542095,117185,12,2,14,5,66, 63,138,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,2,31,5,66, 53,101,161,90,101,55,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,2,31,21,66, 63,101,161,90,101,195,759,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,13,5,21,11, 67,101,161,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,204328,542095,117185,12,11,5,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 26401,1803,65162,127785,217673,121626,542095,117185,7,11,5,21,66, 67,101,14,90,101,195,563,1073,105,3148,1097,8204,4377,10145,12138, 26401,1803,65162,127785,217673,121626,542095,117185,3,10,11,21,66, 67,101,14,90,101,195,563,1073,105,3148,1097,8204,4377,10145,12138, 12982,1803,65162,127785,217673,121626,542095,117185,3,10,13,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,127785,217673,121626,542095,60731,3,15,11,21,66, 67,101,14,90,101,195,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,127785,210249,121626,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,65162,80822,210249,200187,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,563,1073,105,3148,754,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,7,15,11,21,66, 67,101,14,243,101,132,226,1073,105,1776,248,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,3,15,11,21,66, 67,101,14,243,122,132,226,22,105,1776,754,8204,4377,10145,12138, 40398,1803,47650,80822,210249,200187,542095,60731,3,15,11,21,45, 67,101,14,243,122,132,226,22,105,1776,1097,8204,4377,10145,12138, 3518,51108,47650,80822,210249,200187,542095,60731,3,15,11,21,11, 67,101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 3518,51108,47650,80822,210249,121551,542095,60731,3,15,13,21,7,67, 101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 3518,51108,47650,131661,210249,121551,542095,60731,3,6,13,21,3,67, 101,14,243,122,132,226,22,105,3354,1097,8204,4377,10145,12138, 37799,51108,47650,131661,210249,248492,542095,60731,3,2,11,21,2, 67,101,14,243,122,132,226,22,105,925,222,8204,4377,10145,9305, 37799,51108,40586,131661,210249,248492,542095,60731,3,3,13,17,2, 51,101,14,243,122,132,226,1073,105,3354,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,2,5,17,2,51, 101,14,283,122,132,226,452,105,3354,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,3,5,17,27, 51,38,14,283,122,387,226,452,784,925,222,8204,4377,10145,11107, 37799,51108,40586,131661,94453,248492,277743,178309,3,2,5,6,5,51, 38,10,283,122,387,226,452,784,925,754,8204,4377,10145,11107,37799, 51108,40586,131661,94453,248492,457259,178309,3,2,5,17,3,51,38,10, 283,122,387,226,452,784,925,1982,4688,4377,10145,11107,37799, 51108,40586,131661,94453,248492,457259,74373,3,2,14,17,3,12,38,10, 283,122,387,226,452,784,925,1982,4688,4377,4544,11107,37799,51108, 40586,131661,94453,248492,457259,74373,3,2,13,6,5,51,38,10,283, 122,387,226,452,784,925,1982,4688,4377,4544,11107,37799,51108, 38725,131661,94453,248492,457259,74373,3,2,5,3,5,12,38,10,283,122, 387,226,318,784,2133,1982,2831,4377,4544,11107,4721,55315,38725, 131661,94453,248492,457259,74373,3,2,5,6,2,51,38,10,283,122,387, 226,301,784,2133,1982,2831,4377,4544,11107,4721,55315,38725, 131661,94453,248492,457259,74373,3,2,5,6,2,5,38,103,283,122,387, 226,301,784,2133,1982,2831,4377,4544,11107,4721,54140,38725, 131661,94453,248492,457259,74373,3,2,5,3,2,3,3,10,16,122,387,226, 301,784,2133,1982,2831,440,4544,11107,4721,54140,88329,131661, 94453,13942,457259,74373,3,2,5,3,2,3,3,10,283,101,387,226,301,784, 2133,1982,2831,440,8394,11107,7067,54140,88329,131661,94453,13942, 457259,74373,3,2,5,3,2,2,3,10,16,101,387,226,86,784,2133,1982, 2831,1199,8394,11107,7067,54140,88329,131661,94453,13942,457259, 214965,3,2,5,3,2,2,3,10,283,101,387,226,86,784,2133,1982,2831, 1199,8394,9305,7067,54140,88329,7114,94453,13942,457259,214965,3, 2,5,3,2,5,3,5,283,101,387,226,15,784,2133,1982,2831,1199,8394, 9305,7067,13134,88329,131661,94453,13942,457259,214965 }; /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2, d__3; /* Builtin functions */ double d_mod(doublereal *, doublereal *), pow_dd(doublereal *, doublereal *), sqrt(doublereal); /* Local variables */ static integer i__, k; static doublereal r__[1000], x[1000], fs[5000]; static integer np; static doublereal vk[1000]; static integer pr[1000], kmx; static doublereal difint, finval[5000], varprd; static integer sampls; static doublereal values[5000], varest[5000], varsqr[5000]; static integer intvls; extern /* Subroutine */ int mvkrsv_(integer *, integer *, doublereal *, integer *, doublereal *, integer *, U_fp, doublereal *, doublereal *, integer *, doublereal *); /* Automatic Multidimensional Integration Subroutine */ /* AUTHOR: Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pulman, WA 99164-3113 */ /* Email: AlanGenz@wsu.edu */ /* Last Change: 12/15/00 */ /* MVKBRV computes an approximation to the integral */ /* 1 1 1 */ /* I I ... I F(X) dx(NDIM)...dx(2)dx(1) */ /* 0 0 0 */ /* F(X) is a real NF-vector of integrands. */ /* It uses randomized Korobov rules. The primary references are */ /* "Randomization of Number Theoretic Methods for Multiple Integration" */ /* R. Cranley and T.N.L. Patterson, SIAM J Numer Anal, 13, pp. 904-14, */ /* and */ /* "Optimal Parameters for Multidimensional Integration", */ /* P. Keast, SIAM J Numer Anal, 10, pp.831-838. */ /* If there are more than 100 variables, the remaining variables are */ /* integrated using the rules described in the reference */ /* "On a Number-Theoretical Integration Method" */ /* H. Niederreiter, Aequationes Mathematicae, 8(1972), pp. 304-11. */ /* ************** Parameters ******************************************** */ /* ***** Input parameters */ /* NDIM Number of variables, must exceed 1, but not exceed 100 */ /* MINVLS Integer minimum number of function evaluations allowed. */ /* MINVLS must not exceed MAXVLS. If MINVLS < 0 then the */ /* routine assumes a previous call has been made with */ /* the same integrands and continues that calculation. */ /* MAXVLS Integer maximum number of function evaluations allowed. */ /* NF Number of integrands, must exceed 1, but not exceed 5000 */ /* FUNSUB EXTERNALly declared user defined integrand subroutine. */ /* It must have parameters ( NDIM, Z, NF, FUNVLS ), where */ /* Z is a real NDIM-vector and FUNVLS is a real NF-vector. */ /* ABSEPS Required absolute accuracy. */ /* RELEPS Required relative accuracy. */ /* ***** Output parameters */ /* MINVLS Actual number of function evaluations used. */ /* ABSERR Maximum norm of estimated absolute accuracy of FINEST. */ /* FINEST Estimated NF-vector of values of the integrals. */ /* INFORM INFORM = 0 for normal exit, when */ /* ABSERR <= MAX(ABSEPS, RELEPS*||FINEST||) */ /* and */ /* INTVLS <= MAXCLS. */ /* INFORM = 1 If MAXVLS was too small to obtain the required */ /* accuracy. In this case a value FINEST is returned with */ /* estimated absolute accuracy ABSERR. */ /* *********************************************************************** */ /* Parameter adjustments */ --finest; /* Function Body */ *inform__ = 1; intvls = 0; varprd = 0.; if (*minvls >= 0) { i__1 = *nf; for (k = 1; k <= i__1; ++k) { finest[k] = 0.; varest[k - 1] = 0.; } sampls = 8; for (i__ = min(*ndim,10); i__ <= 28; ++i__) { np = i__; if (*minvls < (sampls << 1) * p[i__ - 1]) { goto L10; } } /* Computing MAX */ i__1 = 8, i__2 = *minvls / (p[np - 1] << 1); sampls = max(i__1,i__2); } L10: vk[0] = 1. / p[np - 1]; k = 1; i__1 = *ndim; for (i__ = 2; i__ <= i__1; ++i__) { if (i__ <= 100) { /* Computing MIN */ i__2 = *ndim - 1; d__1 = c__[np + min(i__2,99) * 28 - 29] * (doublereal) k; d__2 = (doublereal) p[np - 1]; k = (integer) d_mod(&d__1, &d__2); vk[i__ - 1] = k * vk[0]; } else { d__1 = (doublereal) (i__ - 100) / (*ndim - 99); vk[i__ - 1] = (doublereal) ((integer) (p[np - 1] * pow_dd(&c_b32, &d__1))); d__1 = vk[i__ - 1] / p[np - 1]; vk[i__ - 1] = d_mod(&d__1, &c_b24); } } i__1 = *nf; for (k = 1; k <= i__1; ++k) { finval[k - 1] = 0.; varsqr[k - 1] = 0.; } i__1 = sampls; for (i__ = 1; i__ <= i__1; ++i__) { mvkrsv_(ndim, &c__100, values, &p[np - 1], vk, nf, (U_fp)funsub, x, r__, pr, fs); i__2 = *nf; for (k = 1; k <= i__2; ++k) { difint = (values[k - 1] - finval[k - 1]) / i__; finval[k - 1] += difint; /* Computing 2nd power */ d__1 = difint; varsqr[k - 1] = (i__ - 2) * varsqr[k - 1] / i__ + d__1 * d__1; } } intvls += (sampls << 1) * p[np - 1]; kmx = 1; i__1 = *nf; for (k = 1; k <= i__1; ++k) { varprd = varest[k - 1] * varsqr[k - 1]; finest[k] += (finval[k - 1] - finest[k]) / (varprd + 1); if (varsqr[k - 1] > 0.) { varest[k - 1] = (varprd + 1) / varsqr[k - 1]; } if ((d__1 = finest[k], abs(d__1)) > (d__2 = finest[kmx], abs(d__2))) { kmx = k; } } *abserr = sqrt(varsqr[kmx - 1] / (varprd + 1)) * 7 / 2; /* Computing MAX */ d__2 = *abseps, d__3 = (d__1 = finest[kmx], abs(d__1)) * *releps; if (*abserr > max(d__2,d__3)) { if (np < 28) { ++np; } else { /* Computing MIN */ i__1 = sampls * 3 / 2, i__2 = (*maxvls - intvls) / (p[np - 1] << 1); sampls = min(i__1,i__2); sampls = max(8,sampls); } if (intvls + (sampls << 1) * p[np - 1] <= *maxvls) { goto L10; } } else { *inform__ = 0; } *minvls = intvls; /* Optimal Parameters for Lattice Rules */ return 0; } /* mvkbrv_ */ /* Subroutine */ int mvkrsv_(integer *ndim, integer *kl, doublereal *values, integer *prime, doublereal *vk, integer *nf, S_fp funsub, doublereal * x, doublereal *r__, integer *pr, doublereal *fs) { /* System generated locals */ integer i__1, i__2; doublereal d__1; /* Local variables */ static integer j, k, jp; extern doublereal mvuni_(void); /* For lattice rule sums */ /* Parameter adjustments */ --fs; --pr; --r__; --x; --vk; --values; /* Function Body */ i__1 = *nf; for (j = 1; j <= i__1; ++j) { values[j] = 0.; } /* Determine random shifts for each variable; scramble lattice rule */ i__1 = *ndim; for (j = 1; j <= i__1; ++j) { r__[j] = mvuni_(); if (j < *kl) { jp = (integer) (j * r__[j]) + 1; if (jp < j) { pr[j] = pr[jp]; } pr[jp] = j; } else { pr[j] = j; } } /* Compute latice rule sums */ i__1 = *prime; for (k = 1; k <= i__1; ++k) { i__2 = *ndim; for (j = 1; j <= i__2; ++j) { r__[j] += vk[pr[j]]; if (r__[j] > 1.) { --r__[j]; } x[j] = (d__1 = r__[j] * 2 - 1, abs(d__1)); } (*funsub)(ndim, &x[1], nf, &fs[1]); i__2 = *nf; for (j = 1; j <= i__2; ++j) { values[j] += (fs[j] - values[j]) / ((k << 1) - 1); } i__2 = *ndim; for (j = 1; j <= i__2; ++j) { x[j] = 1 - x[j]; } (*funsub)(ndim, &x[1], nf, &fs[1]); i__2 = *nf; for (j = 1; j <= i__2; ++j) { values[j] += (fs[j] - values[j]) / (k << 1); } } return 0; } /* mvkrsv_ */ doublereal mvuni_(void) { /* Initialized data */ static integer x10 = 15485857; static integer x11 = 17329489; static integer x12 = 36312197; static integer x20 = 55911127; static integer x21 = 75906931; static integer x22 = 96210113; /* System generated locals */ doublereal ret_val; /* Local variables */ static integer h__, z__, p12, p13, p21, p23; /* Uniform (0,1) random number generator */ /* Reference: */ /* L'Ecuyer, Pierre (1996), */ /* "Combined Multiple Recursive Random Number Generators" */ /* Operations Research 44, pp. 816-822. */ /* INVMP1 = 1/( M1 + 1 ) */ /* Some eight digit primes for seeds */ /* Component 1 */ h__ = x10 / 11714; p13 = (x10 - h__ * 11714) * 183326 - h__ * 2883; h__ = x11 / 33921; p12 = (x11 - h__ * 33921) * 63308 - h__ * 12979; if (p13 < 0) { p13 += 2147483647; } if (p12 < 0) { p12 += 2147483647; } x10 = x11; x11 = x12; x12 = p12 - p13; if (x12 < 0) { x12 += 2147483647; } /* Component 2 */ h__ = x20 / 3976; p23 = (x20 - h__ * 3976) * 539608 - h__ * 2071; h__ = x22 / 24919; p21 = (x22 - h__ * 24919) * 86098 - h__ * 7417; if (p23 < 0) { p23 += 2145483479; } if (p21 < 0) { p21 += 2145483479; } x20 = x21; x21 = x22; x22 = p21 - p23; if (x22 < 0) { x22 += 2145483479; } /* Combination */ z__ = x12 - x22; if (z__ <= 0) { z__ += 2147483647; } ret_val = z__ * 4.656612873077392578125e-10; return ret_val; } /* mvuni_ */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/000077500000000000000000000000001307543307100240015ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Distribution/openturns/AliMikhailHaqCopula.hxx000066400000000000000000000111701307543307100303340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The AliMikhailHaqCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ALIMIKHAILHAQCOPULA_HXX #define OPENTURNS_ALIMIKHAILHAQCOPULA_HXX #include "openturns/ArchimedeanCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AliMikhailHaqCopula * * The AliMikhailHaqCopula distribution. */ class OT_API AliMikhailHaqCopula : public ArchimedeanCopula { CLASSNAME; public: /** Default constructor */ AliMikhailHaqCopula(); /** Parameters constructor */ explicit AliMikhailHaqCopula(const Scalar theta); /** Comparison operator */ Bool operator ==(const AliMikhailHaqCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual AliMikhailHaqCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ArchimedeanCopula::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ArchimedeanCopula::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ArchimedeanCopula::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar computeArchimedeanGenerator(const Scalar t) const; /** Compute the inverse of the archimedean generator */ Scalar computeInverseArchimedeanGenerator(const Scalar t) const; /** Compute the derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorDerivative(const Scalar t) const; /** Compute the second derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorSecondDerivative(const Scalar t) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /* Interface specific to AliMikhailHaqCopula */ /** Theta accessor */ void setTheta(const Scalar theta); Scalar getTheta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The parameter of the AliMikhailHaqCopula distribution */ Scalar theta_; }; /* class AliMikhailHaqCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ALIMIKHAILHAQCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/AliMikhailHaqCopulaFactory.hxx000066400000000000000000000041561307543307100316720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for AliMikhailHaqCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ALIMIKHAILHAQCOPULAFACTORY_HXX #define OPENTURNS_ALIMIKHAILHAQCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/AliMikhailHaqCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AliMikhailHaqCopulaFactory */ class OT_API AliMikhailHaqCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ AliMikhailHaqCopulaFactory(); /** Virtual constructor */ virtual AliMikhailHaqCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; AliMikhailHaqCopula buildAsAliMikhailHaqCopula(const Sample & sample) const; AliMikhailHaqCopula buildAsAliMikhailHaqCopula(const Point & parameters) const; AliMikhailHaqCopula buildAsAliMikhailHaqCopula() const; private: // Compute Kendall's tau from AliMikhailHaq copula's parameter Scalar KendallTauFromParameter(const Scalar theta) const; }; /* class AliMikhailHaqCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ALIMIKHAILHAQCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Arcsine.hxx000066400000000000000000000113641307543307100261230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Arcsine distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARCSINE_HXX #define OPENTURNS_ARCSINE_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Arcsine * * The Arcsine distribution. */ class OT_API Arcsine : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Arcsine(); /** Parameters constructor */ Arcsine(const Scalar a, const Scalar b); /** Comparison operator */ Bool operator ==(const Arcsine & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Arcsine * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Arcsine */ /** A accessor */ void setA(const Scalar a); Scalar getA() const; /** B accessor */ void setB(const Scalar b); Scalar getB() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** set both parameters */ void setAB(const Scalar a, const Scalar b); /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar a_; Scalar b_; }; /* class Arcsine */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARCSINE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ArcsineFactory.hxx000066400000000000000000000036551307543307100274570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for DerivativeArcsine distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARCSINEFACTORY_HXX #define OPENTURNS_ARCSINEFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Arcsine.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ArcsineFactory */ class OT_API ArcsineFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ ArcsineFactory(); /** Virtual constructor */ ArcsineFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; Arcsine buildAsArcsine(const Sample & sample) const; Arcsine buildAsArcsine(const Point & parameters) const; Arcsine buildAsArcsine() const; }; /* class ArcsineFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARCSINEFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ArcsineMuSigma.hxx000066400000000000000000000044241307543307100274050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Arcsine distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARCSINEMUSIGMA_HXX #define OPENTURNS_ARCSINEMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ArcsineMuSigma * */ class OT_API ArcsineMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ ArcsineMuSigma(); /** Constructor with parameters */ ArcsineMuSigma(const Scalar mu, const Scalar sigma); /** Virtual constructor */ virtual ArcsineMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const ArcsineMuSigma & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; }; /* class ArcsineMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARCSINEMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BayesDistribution.hxx000066400000000000000000000100531307543307100301740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The BayesDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BAYESDISTRIBUTION_HXX #define OPENTURNS_BAYESDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/Distribution.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BayesDistribution * * The BayesDistribution distribution. */ class OT_API BayesDistribution : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ BayesDistribution(); /** Parameters constructor */ BayesDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction); /** Parameters constructor */ BayesDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution); /** Comparison operator */ Bool operator ==(const BayesDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual BayesDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Compute the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /* Interface specific to BayesDistribution */ /** Conditioned distribution accessor */ void setConditionedDistribution(const Distribution & conditionedDistribution); Distribution getConditionedDistribution() const; /** Conditioning distribution accessor */ void setConditioningDistribution(const Distribution & conditioningDistribution); Distribution getConditioningDistribution() const; /** Link function accessor */ void setLinkFunction(const Function & linkFunction); Function getLinkFunction() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Compute the numerical range of the distribution */ void computeRange(); /** Method to set simultaneously the conditioning distribution, the conditioned distribution and the link function */ void setConditionedAndConditioningDistributionsAndLinkFunction(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction); /** The conditioned distribution, i.e L(X|Theta) */ Distribution conditionedDistribution_; /** The conditioning distribution, i.e L(Theta) */ Distribution conditioningDistribution_; /** Values of the Dirac marginals */ Function linkFunction_; }; /* class BayesDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BAYESDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Bernoulli.hxx000066400000000000000000000103641307543307100264710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Bernoulli distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BERNOULLI_HXX #define OPENTURNS_BERNOULLI_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Bernoulli * * The Bernoulli distribution. */ class OT_API Bernoulli : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Bernoulli(); /** Parameters constructor */ explicit Bernoulli(const Scalar p); /** Comparison operator */ Bool operator ==(const Bernoulli & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Bernoulli * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Bernoulli */ /** P accessor */ void setP(const Scalar p); Scalar getP() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The probability parameter of the Bernoulli distribution */ Scalar p_; }; /* class Bernoulli */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BERNOULLI_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BernoulliFactory.hxx000066400000000000000000000036151307543307100300220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Bernoulli distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BERNOULLIFACTORY_HXX #define OPENTURNS_BERNOULLIFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Bernoulli.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BernoulliFactory */ class OT_API BernoulliFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ BernoulliFactory(); /** Virtual constructor */ virtual BernoulliFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Bernoulli buildAsBernoulli(const Sample & sample) const; Bernoulli buildAsBernoulli(const Point & parameters) const; Bernoulli buildAsBernoulli() const; DistributionFactoryResult buildEstimator(const Sample & sample) const; }; /* class BernoulliFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BERNOULLIFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BernsteinCopulaFactory.hxx000066400000000000000000000052221307543307100311600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements a non parametric density estimator for copulas * based on the Bernstein copula approximation of the empirical copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BERNSTEINCOPULAFACTORY_HXX #define OPENTURNS_BERNSTEINCOPULAFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BernsteinCopulaFactory * * The class describes the probabilistic concept of BernsteinCopulaFactory. */ class OT_API BernsteinCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ BernsteinCopulaFactory(); /** Virtual constructor */ virtual BernsteinCopulaFactory * clone() const; /** Build a Bernstein copula based on the given sample. The bin number is computed according to the inverse power rule */ using DistributionFactoryImplementation::build; virtual Distribution build(const Sample & sample); /** Build a Bernstein copula based on the given sample and bin number */ virtual Distribution build(const Sample & sample, const UnsignedInteger binNumber); private: virtual Distribution buildParallel(const Sample & sample, const UnsignedInteger binNumber); virtual Distribution buildSequential(const Sample & sample, const UnsignedInteger binNumber); public: /** Compute the number of bins according to the inverse power rule */ UnsignedInteger computeBinNumber(const Sample & sample); /** Parallelization flag accessor */ void setParallel(const Bool flag); Bool isParallel() const; private: /** Flag to tell if parallelization must be used */ Bool isParallel_; }; /* class BernsteinCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BERNSTEINCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Beta.hxx000066400000000000000000000116561307543307100254160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Beta distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BETA_HXX #define OPENTURNS_BETA_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Beta * * The Beta distribution. */ class OT_API Beta : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Beta(); /** Parameters constructor */ Beta(const Scalar r, const Scalar t, const Scalar a, const Scalar b); /** Comparison operator */ Bool operator ==(const Beta & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Beta * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Beta */ /** R accessor */ void setR(const Scalar r); Scalar getR() const; /** T accessor */ void setT(const Scalar t); Scalar getT() const; /** A accessor */ void setA(const Scalar a); Scalar getA() const; /** B accessor */ void setB(const Scalar b); Scalar getB() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** RT accessor that avoid a check between the setting of r and the setting of t */ void setRT(const Scalar r, const Scalar t); /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar r_; Scalar t_; Scalar a_; Scalar b_; Scalar normalizationFactor_; }; /* class Beta */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BETA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BetaFactory.hxx000066400000000000000000000033641307543307100267430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Beta distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BETAFACTORY_HXX #define OPENTURNS_BETAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Beta.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BetaFactory */ class OT_API BetaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ BetaFactory(); /** Virtual constructor */ virtual BetaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Beta buildAsBeta(const Sample & sample) const; Beta buildAsBeta(const Point & parameters) const; Beta buildAsBeta() const; }; /* class BetaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BETAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BetaMuSigma.hxx000066400000000000000000000046061307543307100266760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Beta distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BETAMUSIGMA_HXX #define OPENTURNS_BETAMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BetaMuSigma * */ class OT_API BetaMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ BetaMuSigma(); /** Constructor with parameters */ BetaMuSigma(const Scalar mu, const Scalar sigma, const Scalar a = 0., const Scalar b = 1.); /** Virtual constructor */ virtual BetaMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const BetaMuSigma & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; Scalar a_; Scalar b_; }; /* class BetaMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BETAMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Binomial.hxx000066400000000000000000000110501307543307100262610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Binomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BINOMIAL_HXX #define OPENTURNS_BINOMIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Binomial * * The Binomial distribution. */ class OT_API Binomial : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Binomial(); /** Parameters constructor */ Binomial(const UnsignedInteger n, const Scalar p); /** Comparison operator */ Bool operator ==(const Binomial & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Binomial * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using DiscreteDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Binomial */ /** P accessor */ void setP(const Scalar p); Scalar getP() const; /** N accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The maximum value of the Binomial distribution */ UnsignedInteger n_; /** The probability parameter of the Binomial distribution */ Scalar p_; }; /* class Binomial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BINOMIAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BinomialFactory.hxx000066400000000000000000000040451307543307100276170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Binomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BINOMIALFACTORY_HXX #define OPENTURNS_BINOMIALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Binomial.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BinomialFactory */ class OT_API BinomialFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ BinomialFactory(); /** Virtual constructor */ virtual BinomialFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Binomial buildAsBinomial(const Sample & sample) const; Binomial buildAsBinomial(const Point & parameters) const; Binomial buildAsBinomial() const; // private: // Compute the log-likelihood of a sample static Scalar ComputeLogLikelihood(const UnsignedInteger n, const Scalar p, const Sample & sample); }; /* class BinomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BINOMIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Burr.hxx000066400000000000000000000100051307543307100254400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Burr distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BURR_HXX #define OPENTURNS_BURR_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Burr * * The Burr distribution. */ class OT_API Burr : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Burr(); /** Parameters constructor */ Burr(const Scalar c, const Scalar k); /** Comparison operator */ Bool operator ==(const Burr & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Burr * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Burr */ /** C accessor */ void setC(const Scalar c); Scalar getC() const; /** K accessor */ void setK(const Scalar k); Scalar getK() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Get the covariance of the distribution */ void computeCovariance() const; /** The c of the Burr distribution */ Scalar c_; /** The k of the Burr distribution */ Scalar k_; }; /* class Burr */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BURR_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/BurrFactory.hxx000066400000000000000000000033641307543307100270020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Burr distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_BURRFACTORY_HXX #define OPENTURNS_BURRFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Burr.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class BurrFactory */ class OT_API BurrFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ BurrFactory(); /** Virtual constructor */ virtual BurrFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Burr buildAsBurr(const Sample & sample) const; Burr buildAsBurr(const Point & parameters) const; Burr buildAsBurr() const; }; /* class BurrFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_BURRFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Chi.hxx000066400000000000000000000102361307543307100252370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Chi distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHI_HXX #define OPENTURNS_CHI_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Chi * * The Chi distribution. */ class OT_API Chi : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Chi(); /** Parameters constructor */ explicit Chi(const Scalar nu); /** Comparison operator */ Bool operator ==(const Chi & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Chi * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Chi */ /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar nu_; Scalar normalizationFactor_; /** Get the mean */ void computeMean() const; /** Get the covariance */ void computeCovariance() const; }; /* class Chi */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHI_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ChiFactory.hxx000066400000000000000000000033031307543307100265640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Chi distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHIFACTORY_HXX #define OPENTURNS_CHIFACTORY_HXX #include "openturns/Chi.hxx" #include "openturns/DistributionFactoryImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ChiFactory */ class OT_API ChiFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ ChiFactory(); /** Virtual constructor */ virtual ChiFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Chi buildAsChi(const Sample & sample) const; Chi buildAsChi(const Point & parameters) const; Chi buildAsChi() const; }; /* class ChiFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHIFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ChiSquare.hxx000066400000000000000000000106271307543307100264240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHISQUARE_HXX #define OPENTURNS_CHISQUARE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ChiSquare * * The ChiSquare distribution. */ class OT_API ChiSquare : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ ChiSquare(); /** Parameters constructor */ explicit ChiSquare(const Scalar nu); /** Comparison operator */ Bool operator ==(const ChiSquare & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual ChiSquare * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the logarithm of the PDF of the distribution */ using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to ChiSquare */ /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar nu_; Scalar normalizationFactor_; }; /* class ChiSquare */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHISQUARE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ChiSquareFactory.hxx000066400000000000000000000036471307543307100277600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for ChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CHISQUAREFACTORY_HXX #define OPENTURNS_CHISQUAREFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/ChiSquare.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ChiSquareFactory */ class OT_API ChiSquareFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ ChiSquareFactory(); /** Virtual constructor */ virtual ChiSquareFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; ChiSquare buildAsChiSquare(const Sample & sample) const; ChiSquare buildAsChiSquare(const Point & parameters) const; ChiSquare buildAsChiSquare() const; }; /* class ChiSquareFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CHISQUAREFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ClaytonCopula.hxx000066400000000000000000000110651307543307100273120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ClaytonCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLAYTONCOPULA_HXX #define OPENTURNS_CLAYTONCOPULA_HXX #include "openturns/ArchimedeanCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ClaytonCopula * * The ClaytonCopula distribution. */ class OT_API ClaytonCopula : public ArchimedeanCopula { CLASSNAME; public: /** Default constructor */ ClaytonCopula(); /** Parameters constructor */ explicit ClaytonCopula(const Scalar theta); /** Comparison operator */ Bool operator ==(const ClaytonCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual ClaytonCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ArchimedeanCopula::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ArchimedeanCopula::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ArchimedeanCopula::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar computeArchimedeanGenerator(const Scalar t) const; /** Compute the inverse of the archimedean generator */ Scalar computeInverseArchimedeanGenerator(const Scalar t) const; /** Compute the derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorDerivative(const Scalar t) const; /** Compute the second derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorSecondDerivative(const Scalar t) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /* Interface specific to ClaytonCopula */ /** Theta accessor */ void setTheta(const Scalar theta); Scalar getTheta() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The parameter of the ClaytonCopula distribution */ Scalar theta_; }; /* class ClaytonCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLAYTONCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ClaytonCopulaFactory.hxx000066400000000000000000000036051307543307100306430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for ClaytonCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CLAYTONCOPULAFACTORY_HXX #define OPENTURNS_CLAYTONCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/ClaytonCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ClaytonCopulaFactory */ class OT_API ClaytonCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ ClaytonCopulaFactory(); /** Virtual constructor */ virtual ClaytonCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; ClaytonCopula buildAsClaytonCopula(const Sample & sample) const; ClaytonCopula buildAsClaytonCopula(const Point & parameters) const; ClaytonCopula buildAsClaytonCopula() const; }; /* class ClaytonCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CLAYTONCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ComposedCopula.hxx000066400000000000000000000131131307543307100274460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements assembly distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSEDCOPULA_HXX #define OPENTURNS_COMPOSEDCOPULA_HXX #include "openturns/CopulaImplementation.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Copula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedCopula * * The class describes the probabilistic concept of copulas * made from a collection of copulas joined by an independent copula */ class OT_API ComposedCopula : public CopulaImplementation { CLASSNAME; public: /** A type for distribution collection */ typedef Collection CopulaCollection; typedef PersistentCollection CopulaPersistentCollection; /** Default constructor for save/load methods : 1D distribution with default Uniform marginal and IndependentCopula */ ComposedCopula(); /** Default constructor */ explicit ComposedCopula(const CopulaCollection & coll); /** Comparison operator */ Bool operator ==(const ComposedCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Copula collection accessor */ void setCopulaCollection(const CopulaCollection & coll); const CopulaCollection & getCopulaCollection() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual ComposedCopula * clone() const; /** Get one realization of the ComposedCopula */ Point getRealization() const; /** Get the DDF of the ComposedCopula */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the ComposedCopula */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the ComposedCopula */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Compute the survival function */ using CopulaImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the shape matrix of the distribution, ie the correlation matrix of its copula if it is elliptical */ CorrelationMatrix getShapeMatrix() const; /** Get the PDF gradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; virtual Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; virtual Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; virtual Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using CopulaImplementation::setParametersCollection; void setParametersCollection(const PointCollection & setParametersCollection); /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the isoprobabilistic transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilistic transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The collection of copules of the ComposedCopula */ CopulaPersistentCollection copulaCollection_; /** Flag to tell if the copula is independent */ Bool isIndependent_; }; /* class ComposedCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ComposedDistribution.hxx000066400000000000000000000162011307543307100307030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements assembly distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSEDDISTRIBUTION_HXX #define OPENTURNS_COMPOSEDDISTRIBUTION_HXX #include "openturns/Distribution.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Copula.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ComposedDistribution * * The class describes the probabilistic concept of distributions * made from marginal distributions and from a copula. */ class OT_API ComposedDistribution : public DistributionImplementation { CLASSNAME; public: /** A type for distribution collection */ typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; /** Default constructor for save/load methods : 1D distribution with default Uniform marginal and IndependentCopula */ ComposedDistribution(); /** Default constructor, independent copula is supposed */ explicit ComposedDistribution(const DistributionCollection & coll); /** Default constructor */ ComposedDistribution(const DistributionCollection & coll, const Distribution & copula); /** Comparison operator */ Bool operator ==(const ComposedDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ void setDistributionCollection(const DistributionCollection & coll); const DistributionCollection & getDistributionCollection() const; /** Copula accessor */ void setCopula(const Distribution & copula); Implementation getCopula() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual ComposedDistribution * clone() const; /** Get one realization of the ComposedDistribution */ Point getRealization() const; protected: Sample getSampleParallel(const UnsignedInteger size) const; public: Sample getSample(const UnsignedInteger size) const; /** Get the DDF of the ComposedDistribution */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the ComposedDistribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the ComposedDistribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the survival function of the ComposedDistribution */ using DistributionImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the PDF gradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution */ Implementation getStandardDistribution() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using DistributionImplementation::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** The collection of distribution of the ComposedDistribution */ DistributionPersistentCollection distributionCollection_; /** The copula of the ComposedDistribution */ Distribution copula_; }; /* class ComposedDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSEDDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/CompositeDistribution.hxx000066400000000000000000000143141307543307100310770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The CompositeDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSITEDISTRIBUTION_HXX #define OPENTURNS_COMPOSITEDISTRIBUTION_HXX #include "openturns/DistributionImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Function.hxx" #include "openturns/Solver.hxx" #include "openturns/GaussKronrod.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CompositeDistribution * * The CompositeDistribution distribution. */ class OT_API CompositeDistribution : public DistributionImplementation { CLASSNAME; public: /** Default constructor */ CompositeDistribution(); /** Parameters constructor */ CompositeDistribution(const Function & function, const Distribution & antecedent); /** Parameters constructor */ CompositeDistribution(const Function & function, const Distribution & antecedent, const Point & bounds, const Point & values); /** Comparison operator */ Bool operator ==(const CompositeDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual CompositeDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ virtual LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using DistributionImplementation::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to CompositeDistribution */ /** Function accessor */ void setFunction(const Function & function); Function getFunction() const; /** Antecedent accessor */ void setAntecedent(const Distribution & antecedent); Distribution getAntecedent() const; /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Set the solver used to perform the different computations */ void setSolver(const Solver & solver); Solver getSolver() const; /** Compute the shifted moments of the distribution */ Point computeShiftedMomentContinuous(const UnsignedInteger n, const Point & shift) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: friend class CompositeDistributionShiftedMomentWrapper; // Structure used to compute shifted moments struct CompositeDistributionShiftedMomentWrapper { CompositeDistributionShiftedMomentWrapper(const UnsignedInteger n, const Scalar shift, const CompositeDistribution * p_distribution): n_(n), shift_(shift), p_distribution_(p_distribution) {}; Point computeShiftedMomentKernel(const Point & point) const { const Scalar y = p_distribution_->function_(point)[0]; const Scalar power = std::pow(y - shift_, static_cast(n_)); const Scalar pdf = p_distribution_->antecedent_.computePDF(point); const Scalar value = power * pdf; return Point(1, value); }; const UnsignedInteger n_; const Scalar shift_; const CompositeDistribution * p_distribution_; }; // struct CompositeDistributionShiftedMomentWrapper // Structure used to wrap the gradient of the function into a Function struct DerivativeWrapper { const Function & function_; DerivativeWrapper(const Function & function) : function_(function) {} Point computeDerivative(const Point & point) const { Point value(1, function_.gradient(point)(0, 0)); return value; } }; /** update all the derivative attributes */ void update(); /** Set the function and antecedent with check */ void setFunctionAndAntecedent(const Function & function, const Distribution & antecedent); /** The main parameter set of the distribution */ Function function_; Distribution antecedent_; /** Usefull quantities */ Point bounds_; Point values_; Point probabilities_; Indices increasing_; /** Solver used to invert the function and to find the zeros of its derivative */ Solver solver_; }; /* class CompositeDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSITEDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ConditionalDistribution.hxx000066400000000000000000000121721307543307100314000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ConditionalDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONDITIONALDISTRIBUTION_HXX #define OPENTURNS_CONDITIONALDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/Mixture.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Function.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConditionalDistribution * * The ConditionalDistribution distribution. */ class OT_API ConditionalDistribution : public Mixture { CLASSNAME; /** The PosteriorDistribution class is closely linked with the ConditionalDistribution class as they are the two parts of the Bayesian modeling using distributions */ friend class PosteriorDistribution; public: /** Default constructor */ ConditionalDistribution(); /** Parameters constructor */ ConditionalDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution); ConditionalDistribution(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction); /** Comparison operator */ Bool operator ==(const ConditionalDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual ConditionalDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to ConditionalDistribution */ /** Conditioned distribution accessor */ void setConditionedDistribution(const Distribution & conditionedDistribution); Distribution getConditionedDistribution() const; /** Conditioning distribution accessor */ void setConditioningDistribution(const Distribution & conditioningDistribution); Distribution getConditioningDistribution() const; /** Link function accessor */ void setLinkFunction(const Function & linkFunction); Function getLinkFunction() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** set both parameters */ void setConditionedAndConditioningDistributionsAndLinkFunction(const Distribution & conditionedDistribution, const Distribution & conditioningDistribution, const Function & linkFunction); /** Compute the expectation of f(\theta)1_{\theta\leq \theta^*} with respect to the prior distribution of \theta */ Point computeExpectation(const Function & f, const Point & thetaStar) const; /** The conditioned distribution, i.e L(X|Theta) */ Distribution conditionedDistribution_; /** The conditioning distribution, i.e L(Theta) */ Distribution conditioningDistribution_; /** The link function */ Function linkFunction_; /** Discrete marginals indices */ Indices discreteMarginalsIndices_; /** Dirac marginals indices */ Indices diracMarginalsIndices_; /** Continuous marginals indices */ Indices continuousMarginalsIndices_; /** Lower bounds of the continuous marginals */ Point continuousLowerBounds_; /** Upper bounds of the continuous marginals */ Point continuousUpperBounds_; /** Standard continuous integration nodes */ Sample continuousNodes_; /** Standard continuous weights */ Point continuousWeights_; /** Discrete integration nodes */ Sample discreteNodes_; /** Values of the Dirac marginals */ Point diracValues_; }; /* class ConditionalDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONDITIONALDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/CumulativeDistributionNetwork.hxx000066400000000000000000000110601307543307100326200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the multivariate distribution based on a * bipartite graph and a collection of distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CUMULATIVEDISTRIBUTIONNETWORK_HXX #define OPENTURNS_CUMULATIVEDISTRIBUTIONNETWORK_HXX #include "openturns/Distribution.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/BipartiteGraph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CumulativeDistributionNetwork * * This class implements the multivariate distribution based on a * bipartite graph and a collection of distributions */ class OT_API CumulativeDistributionNetwork : public DistributionImplementation { CLASSNAME; public: /** A type for distribution collection */ typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; /** Default constructor */ CumulativeDistributionNetwork(); /** Parameters constructor */ CumulativeDistributionNetwork(const DistributionCollection & coll, const BipartiteGraph & graph); /** Comparison operator */ Bool operator ==(const CumulativeDistributionNetwork & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ void setDistributionCollection(const DistributionCollection & coll); const DistributionCollection & getDistributionCollection() const; /** Graph accessor */ void setGraph(const BipartiteGraph & graph); const BipartiteGraph & getGraph() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual CumulativeDistributionNetwork * clone() const; /** Get one realization of the CumulativeDistributionNetwork */ Point getRealization() const; /** Get many realizations of the CumulativeDistributionNetwork */ Sample getSample(const UnsignedInteger size) const; /** Get the PDF of the CumulativeDistributionNetwork */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the CumulativeDistributionNetwork */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Check if the distribution is integral */ Bool isIntegral() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Extract the components of a full dimension point to feed the index distribution */ Point reducePoint(const Point & point, const UnsignedInteger index) const; /** The collection of distribution of the cumulativeDistributionNetwork */ DistributionPersistentCollection distributionCollection_; /** Bipartite graph corresponding to the network */ BipartiteGraph graph_; }; /* class CumulativeDistributionNetwork */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CUMULATIVEDISTRIBUTIONNETWORK_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Dirac.hxx000066400000000000000000000125621307543307100255620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Dirac distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRAC_HXX #define OPENTURNS_DIRAC_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Dirac * * The Dirac distribution. */ class OT_API Dirac : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Dirac(); /** Parameters constructor */ explicit Dirac(const Scalar p); /** Parameters constructor */ explicit Dirac(const Point & point); /** Comparison operator */ Bool operator ==(const Dirac & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Dirac * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get a sample of the distribution */ Sample getSample(const UnsignedInteger size) const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using DiscreteDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Dirac */ /** Point accessor */ void setPoint(const Point & point); Point getPoint() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The support of the Dirac distribution */ Point point_; }; /* class Dirac */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DIRAC_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/DiracFactory.hxx000066400000000000000000000034031307543307100271040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Dirac distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRACFACTORY_HXX #define OPENTURNS_DIRACFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Dirac.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DiracFactory */ class OT_API DiracFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ DiracFactory(); /** Virtual constructor */ virtual DiracFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Dirac buildAsDirac(const Sample & sample) const; Dirac buildAsDirac(const Point & parameters) const; Dirac buildAsDirac() const; }; /* class DiracFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DIRACFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Dirichlet.hxx000066400000000000000000000123701307543307100264440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Dirichlet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRICHLET_HXX #define OPENTURNS_DIRICHLET_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Dirichlet * * The Dirichlet distribution. */ class OT_API Dirichlet : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Dirichlet(); /** Parameters constructor */ Dirichlet(const Point & theta); /** Comparison operator */ Bool operator ==(const Dirichlet & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Dirichlet * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value and description accessor */ virtual PointWithDescriptionCollection getParametersCollection() const; using ContinuousDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Dirichlet */ /** Theta accessor */ void setTheta(const Point & theta); Point getTheta() const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Tell if the distribution has independent marginals */ Bool hasIndependentCopula() const; /** Tell if the distribution has an elliptical copula */ Bool hasEllipticalCopula() const; /** Get the Spearman correlation of the distribution */ CorrelationMatrix getSpearmanCorrelation() const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Initialize the integration routine */ void initializeIntegration() const; /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Point theta_; Scalar sumTheta_; Scalar normalizationFactor_; mutable Bool isInitializedCDF_; mutable PointCollection integrationNodes_; mutable PointCollection integrationWeights_; }; /* class Dirichlet */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DIRICHLET_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/DirichletFactory.hxx000066400000000000000000000035041307543307100277730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Dirichlet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DIRICHLETFACTORY_HXX #define OPENTURNS_DIRICHLETFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Dirichlet.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DirichletFactory */ class OT_API DirichletFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ DirichletFactory(); /** Virtual constructor */ virtual DirichletFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Dirichlet buildAsDirichlet(const Sample & sample) const; Dirichlet buildAsDirichlet(const Point & parameters) const; Dirichlet buildAsDirichlet() const; }; /* class DirichletFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DIRICHLETFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/DistFunc.hxx000066400000000000000000000222321307543307100262520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OpenTURNS wrapper to a library of special functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTFUNC_HXX #define OPENTURNS_DISTFUNC_HXX #include "openturns/OTprivate.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Point.hxx" #include "openturns/Indices.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS class OT_API DistFunc { public: static const UnsignedInteger NumberOfBandNormalZigurrat; static const Scalar NormalZigguratTail; // The array NormalZigguratAbscissa stores the abscissas of the bands: // the ith band is [NormalZigguratAbscissa[0], NormalZigguratAbscissa[i+1]] with // NormalZigguratAbscissa[0] = 0.0 and // NormalZigguratAbscissa[NumberOfBandNormalZigurrat] = NormalZigguratTail static const Scalar NormalZigguratAbscissa[]; // The array NormalZigguratRatio stores the ratio between a band and the next one, // starting from the smallest one: // NormalZigguratRatio[i] = NormalZigguratAbscissa[i] / NormalZigguratAbscissa[i+1] static const Scalar NormalZigguratRatio[]; // For Beta distribution. WARNING: here we adopt the classical definition // If tail=false, compute P(X<=x), else P(X>x) static Scalar pBeta(const Scalar p1, const Scalar p2, const Scalar x, const Bool tail = false); // If tail=false, compute x such that P(X<=x)=q, else x such that P(X>x)=q static Scalar qBeta(const Scalar p1, const Scalar p2, const Scalar p, const Bool tail = false); static Scalar rBeta(const Scalar p1, const Scalar p2); static Point rBeta(const Scalar p1, const Scalar p2, const UnsignedInteger size); // For the Binomial distribution private: static Scalar fcBinomial(const UnsignedInteger k); public: static UnsignedInteger rBinomial(const UnsignedInteger n, const Scalar p); static Indices rBinomial(const UnsignedInteger n, const Scalar p, const UnsignedInteger size); // For Gamma distribution static Scalar pGamma(const Scalar k, const Scalar x, const Bool tail = false); static Scalar qGamma(const Scalar k, const Scalar p, const Bool tail = false); static Scalar rGamma(const Scalar k); static Point rGamma(const Scalar k, const UnsignedInteger size); // For Kolmogorov distribution static Scalar pKolmogorov(const UnsignedInteger n, const Scalar x, const Bool tail = false); // For NonCentralChiSquare distribution static Scalar dNonCentralChiSquare(const Scalar nu, const Scalar lambda, const Scalar x, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision"), const UnsignedInteger maximumIteration = ResourceMap::GetAsScalar("DistFunc-MaximumIteration")); static Scalar pNonCentralChiSquare(const Scalar nu, const Scalar lambda, const Scalar x, const Bool tail = false, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision"), const UnsignedInteger maximumIteration = ResourceMap::GetAsScalar("DistFunc-MaximumIteration")); static Scalar rNonCentralChiSquare(const Scalar nu, const Scalar lambda); static Point rNonCentralChiSquare(const Scalar nu, const Scalar lambda, const UnsignedInteger size); // For NonCentralStudent distribution static Scalar dNonCentralStudent(const Scalar nu, const Scalar delta, const Scalar x); static Scalar dNonCentralStudentAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision"), const UnsignedInteger maximumIteration = ResourceMap::GetAsScalar("DistFunc-MaximumIteration")); static Scalar pNonCentralStudent(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail = false); static Scalar rNonCentralStudent(const Scalar nu, const Scalar delta); static Point rNonCentralStudent(const Scalar nu, const Scalar delta, const UnsignedInteger size); // For Normal distribution static Scalar pNormal(const Scalar x, const Bool tail = false); static Scalar pNormal2D(const Scalar x1, const Scalar x2, const Scalar rho, const Bool tail = false); static Scalar pNormal3D(const Scalar x1, const Scalar x2, const Scalar x3, const Scalar rho12, const Scalar rho13, const Scalar rho23, const Bool tail = false); static Scalar qNormal(const Scalar p, const Bool tail = false); static Scalar rNormal(); static Point rNormal(const UnsignedInteger size); // For Poisson distribution static Scalar qPoisson(const Scalar lambda, const Scalar p, const Bool tail = false); static UnsignedInteger rPoisson(const Scalar lambda); static Indices rPoisson(const Scalar lambda, const UnsignedInteger size); // For Student distribution static Scalar pStudent(const Scalar nu, const Scalar x, const Bool tail = false); static Scalar qStudent(const Scalar nu, const Scalar p, const Bool tail = false); static Scalar rStudent(const Scalar nu); static Point rStudent(const Scalar nu, const UnsignedInteger size); static Point rUniformTriangle(const Point & a, const Point & b, const Point & c); static Sample rUniformTriangle(const Point & a, const Point & b, const Point & c, const UnsignedInteger size); // For TruncatedNormal distribution // static Scalar rTruncatedNormal(const Scalar a, const Scalar b); // Compute the expectation of the min of n independent standard normal random variables static Scalar eZ1(const UnsignedInteger n); // K factor for exact two-sided tolerance intervals of normal pooled populations static Scalar kFactorPooled(const UnsignedInteger n, const UnsignedInteger m, const Scalar p, const Scalar alpha); // K factor for exact two-sided tolerance intervals of a normal population static Scalar kFactor(const UnsignedInteger n, const Scalar p, const Scalar alpha); // Asymptotic distribution of the DickeyFuller distribution static Scalar pDickeyFullerTrend(const Scalar x, const Bool tail = false); static Scalar pDickeyFullerConstant(const Scalar x, const Bool tail = false); static Scalar pDickeyFullerNoConstant(const Scalar x, const Bool tail = false); static Scalar qDickeyFullerTrend(const Scalar p, const Bool tail = false); static Scalar qDickeyFullerConstant(const Scalar p, const Bool tail = false); static Scalar qDickeyFullerNoConstant(const Scalar p, const Bool tail = false); }; /* class DistFunc */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTFUNC_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Epanechnikov.hxx000066400000000000000000000067771307543307100271650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Epanechnikov distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EPANECHNIKOV_HXX #define OPENTURNS_EPANECHNIKOV_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Epanechnikov * * The Epanechnikov distribution. */ class OT_API Epanechnikov : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Epanechnikov(); /** Comparison operator */ Bool operator ==(const Epanechnikov & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Epanechnikov * clone() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; }; /* class Epanechnikov */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EPANECHNIKOV_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Exponential.hxx000066400000000000000000000114001307543307100270140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Exponential distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIAL_HXX #define OPENTURNS_EXPONENTIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Exponential * * The Exponential distribution. */ class OT_API Exponential : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Exponential(); /** Parameters constructor */ explicit Exponential(const Scalar lambda, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const Exponential & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Exponential * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Exponential */ /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The lamdbda of the Exponential distribution */ Scalar lambda_; /** The gamma of the Exponential distribution */ Scalar gamma_; }; /* class Exponential */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ExponentialFactory.hxx000066400000000000000000000035441307543307100303560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Exponential distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EXPONENTIALFACTORY_HXX #define OPENTURNS_EXPONENTIALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Exponential.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ExponentialFactory */ class OT_API ExponentialFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ ExponentialFactory(); /** Virtual constructor */ virtual ExponentialFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Exponential buildAsExponential(const Sample & sample) const; Exponential buildAsExponential(const Point & parameters) const; Exponential buildAsExponential() const; }; /* class ExponentialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EXPONENTIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FarlieGumbelMorgensternCopula.hxx000066400000000000000000000103431307543307100324610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The FarlieGumbelMorgensternCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULA_HXX #define OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULA_HXX #include "openturns/CopulaImplementation.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FarlieGumbelMorgensternCopula * * The FarlieGumbelMorgensternCopula distribution. */ class OT_API FarlieGumbelMorgensternCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ FarlieGumbelMorgensternCopula(); /** Parameters constructor */ explicit FarlieGumbelMorgensternCopula(const Scalar theta); /** Comparison operator */ Bool operator ==(const FarlieGumbelMorgensternCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual FarlieGumbelMorgensternCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /* Interface specific to FarlieGumbelMorgensternCopula */ /** Theta accessor */ void setTheta(const Scalar theta); Scalar getTheta() const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The parameter of the FarlieGumbelMorgensternCopula distribution */ Scalar theta_; }; /* class FarlieGumbelMorgensternCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FarlieGumbelMorgensternCopulaFactory.hxx000066400000000000000000000042171307543307100340140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FarlieGumbelMorgensternCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULAFACTORY_HXX #define OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/FarlieGumbelMorgensternCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FarlieGumbelMorgensternCopulaFactory */ class OT_API FarlieGumbelMorgensternCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ FarlieGumbelMorgensternCopulaFactory(); /** Virtual constructor */ virtual FarlieGumbelMorgensternCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; FarlieGumbelMorgensternCopula buildAsFarlieGumbelMorgensternCopula(const Sample & sample) const; FarlieGumbelMorgensternCopula buildAsFarlieGumbelMorgensternCopula(const Point & parameters) const; FarlieGumbelMorgensternCopula buildAsFarlieGumbelMorgensternCopula() const; private: }; /* class FarlieGumbelMorgensternCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FARLIEGUMBELMORGENSTERNCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FisherSnedecor.hxx000066400000000000000000000100571307543307100274400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Fisher-Snedecor distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FISHERSNEDECOR_HXX #define OPENTURNS_FISHERSNEDECOR_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FisherSnedecor * * The Fisher-Snedecor distribution. */ class OT_API FisherSnedecor : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ FisherSnedecor(); /** Parameters constructor */ FisherSnedecor(const Scalar d1, const Scalar d2); /** Comparison operator */ Bool operator ==(const FisherSnedecor & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual FisherSnedecor * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; // LogPDFGradient using ContinuousDistribution::computeLogPDFGradient; Point computeLogPDFGradient(const Point & point) const; // PDFGradient using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to FisherSnedecor */ /** D1 accessor */ void setD1(const Scalar d1); Scalar getD1() const; /** D2 accessor */ void setD2(const Scalar d2); Scalar getD2() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the Triangular distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar d1_; Scalar d2_; Scalar normalizationFactor_; }; /* class FisherSnedecor */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FISHERSNEDECOR_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FisherSnedecorFactory.hxx000066400000000000000000000047221307543307100307720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FisherSnedecor distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FISHERSNEDECORFACTORY_HXX #define OPENTURNS_FISHERSNEDECORFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/FisherSnedecor.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FisherSnedecorFactory */ class OT_API FisherSnedecorFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ FisherSnedecorFactory(); /** Virtual constructor */ virtual FisherSnedecorFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; FisherSnedecor buildAsFisherSnedecor(const Sample & sample) const; FisherSnedecor buildAsFisherSnedecor(const Point & parameters) const; FisherSnedecor buildAsFisherSnedecor() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; }; /* class FisherSnedecorFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FISHERSNEDECORFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FrankCopula.hxx000066400000000000000000000110101307543307100267300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The FrankCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FRANKCOPULA_HXX #define OPENTURNS_FRANKCOPULA_HXX #include "openturns/ArchimedeanCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FrankCopula * * The FrankCopula distribution. */ class OT_API FrankCopula : public ArchimedeanCopula { CLASSNAME; public: /** Default constructor */ FrankCopula(); /** Parameters constructor */ explicit FrankCopula(const Scalar theta); /** Comparison operator */ Bool operator ==(const FrankCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual FrankCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ArchimedeanCopula::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ArchimedeanCopula::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ArchimedeanCopula::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar computeArchimedeanGenerator(const Scalar t) const; /** Compute the inverse of the archimedean generator */ Scalar computeInverseArchimedeanGenerator(const Scalar t) const; /** Compute the derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorDerivative(const Scalar t) const; /** Compute the second derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorSecondDerivative(const Scalar t) const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to FrankCopula */ /** Theta accessor */ void setTheta(const Scalar theta); Scalar getTheta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The parameter of the FrankCopula distribution */ Scalar theta_; }; /* class FrankCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FRANKCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/FrankCopulaFactory.hxx000066400000000000000000000037431307543307100302760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for FrankCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FRANKCOPULAFACTORY_HXX #define OPENTURNS_FRANKCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/FrankCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FrankCopulaFactory */ class OT_API FrankCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ FrankCopulaFactory(); /** Virtual constructor */ virtual FrankCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; FrankCopula buildAsFrankCopula(const Sample & sample) const; FrankCopula buildAsFrankCopula(const Point & parameters) const; FrankCopula buildAsFrankCopula() const; private: // Compute Kendall's tau from Frank copula's parameter Point KendallTauFromParameter(const Point & theta) const; }; /* class FrankCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FRANKCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Frechet.hxx000066400000000000000000000111541307543307100261140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Frechet distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FRECHET_HXX #define OPENTURNS_FRECHET_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Frechet * * The Frechet distribution. */ class OT_API Frechet : public ContinuousDistribution { CLASSNAME; public: /** Parameters constructor */ explicit Frechet(const Scalar alpha = 1.0, const Scalar beta = 1.0, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const Frechet & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Frechet * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Frechet */ /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar alpha_; Scalar beta_; Scalar gamma_; }; /* class Frechet */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FRECHET_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Gamma.hxx000066400000000000000000000116321307543307100255570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Gamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAMMA_HXX #define OPENTURNS_GAMMA_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Gamma * * The Gamma distribution. */ class OT_API Gamma : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Gamma(); /** Parameters constructor */ Gamma(const Scalar arg1, const Scalar arg2, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const Gamma & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Gamma * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Gamma */ /** K accessor */ void setK(const Scalar k); Scalar getK() const; /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** K and lambda accessor */ void setKLambda(const Scalar k, const Scalar lambda); /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar k_; Scalar lambda_; Scalar gamma_; Scalar normalizationFactor_; }; /* class Gamma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAMMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GammaFactory.hxx000066400000000000000000000034041307543307100271050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Gamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAMMAFACTORY_HXX #define OPENTURNS_GAMMAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Gamma.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GammaFactory */ class OT_API GammaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ GammaFactory(); /** Virtual constructor */ virtual GammaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Gamma buildAsGamma(const Sample & sample) const; Gamma buildAsGamma(const Point & parameters) const; Gamma buildAsGamma() const; }; /* class GammaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAMMAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GammaMuSigma.hxx000066400000000000000000000047141307543307100270450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gamma distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAMMAMUSIGMA_HXX #define OPENTURNS_GAMMAMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GammaMuSigma * */ class OT_API GammaMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ GammaMuSigma(); /** Constructor with parameters */ GammaMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma = 0.); /** Virtual constructor */ virtual GammaMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const GammaMuSigma & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; Scalar gamma_; }; /* class GammaMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GAMMAMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GeneralizedExtremeValue.hxx000066400000000000000000000123051307543307100313130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GeneralizedExtremeValue distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALIZEDEXTREMEVALUE_HXX #define OPENTURNS_GENERALIZEDEXTREMEVALUE_HXX #include "openturns/ContinuousDistribution.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralizedExtremeValue * * The GeneralizedExtremeValue distribution. */ class OT_API GeneralizedExtremeValue : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ GeneralizedExtremeValue(); /** Parameters constructor to use when the two bounds are finite */ GeneralizedExtremeValue(const Scalar mu, const Scalar sigma, const Scalar xi); /** Comparison operator */ Bool operator ==(const GeneralizedExtremeValue & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual GeneralizedExtremeValue * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; using DistributionImplementation::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; using DistributionImplementation::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to GeneralizedExtremeValue */ /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Sigma bound accessor */ void setSigma(const Scalar sigma); Scalar getSigma() const; /** Xi accessor */ void setXi(const Scalar xi); Scalar getXi() const; /** Actual distribution accessor */ void setActualDistribution(const Distribution & distribution); Distribution getActualDistribution() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Set the whole set of parameters with check */ void setMuSigmaXi(const Scalar mu, const Scalar sigma, const Scalar xi); /** The actual distribution in {Weibull, Frechet, Gumbel} */ Distribution actualDistribution_; Scalar mu_; Scalar sigma_; Scalar xi_; }; /* class GeneralizedExtremeValue */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GENERALIZEDEXTREMEVALUE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GeneralizedPareto.hxx000066400000000000000000000122641307543307100301430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GeneralizedPareto distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALIZEDPARETO_HXX #define OPENTURNS_GENERALIZEDPARETO_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralizedPareto * * The GeneralizedPareto distribution. */ class OT_API GeneralizedPareto : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ GeneralizedPareto(); /** Parameters constructor */ GeneralizedPareto(const Scalar sigma, const Scalar xi); /** Comparison operator */ Bool operator ==(const GeneralizedPareto & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual GeneralizedPareto * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to GeneralizedPareto */ /** Sigma accessor */ void setSigma(const Scalar sigma); Scalar getSigma() const; /** Xi accessor */ void setXi(const Scalar xi); Scalar getXi() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The scale parameter of the GeneralizedPareto distribution */ Scalar sigma_; /** The shape parameter of the GeneralizedPareto distribution */ Scalar xi_; }; /* class GeneralizedPareto */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GENERALIZEDPARETO_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GeneralizedParetoFactory.hxx000066400000000000000000000054751307543307100315010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for GeneralizedPareto distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GENERALIZEDPARETOFACTORY_HXX #define OPENTURNS_GENERALIZEDPARETOFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/GeneralizedPareto.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeneralizedParetoFactory */ class OT_API GeneralizedParetoFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ GeneralizedParetoFactory(); /** Virtual constructor */ virtual GeneralizedParetoFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; GeneralizedPareto buildAsGeneralizedPareto(const Sample & sample) const; GeneralizedPareto buildAsGeneralizedPareto(const Point & parameters) const; GeneralizedPareto buildAsGeneralizedPareto() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Algorithm associated with the method of moments */ GeneralizedPareto buildMethodOfMoments(const Sample & sample) const; /** Algoritm associated with the method of exponential regression model */ GeneralizedPareto buildMethodOfExponentialRegression(const Sample & sample) const; /** Algorithm associated with the method of modified moments */ GeneralizedPareto buildMethodOfProbabilityWeightedMoments(const Sample & sample) const; /** Optimization solver */ mutable OptimizationAlgorithm solver_; }; /* class GeneralizedParetoFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GENERALIZEDPARETOFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Geometric.hxx000066400000000000000000000102171307543307100264510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Geometric distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GEOMETRIC_HXX #define OPENTURNS_GEOMETRIC_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Geometric * * The Geometric distribution. */ class OT_API Geometric : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Geometric(); /** Parameters constructor */ explicit Geometric(const Scalar p); /** Comparison operator */ Bool operator ==(const Geometric & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Geometric * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using DiscreteDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Geometric */ /** P accessor */ void setP(const Scalar p); Scalar getP() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The P of the Geometric distribution */ Scalar p_; }; /* class Geometric */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GEOMETRIC_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GeometricFactory.hxx000066400000000000000000000035051307543307100300030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Geometric distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GEOMETRICFACTORY_HXX #define OPENTURNS_GEOMETRICFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Geometric.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GeometricFactory */ class OT_API GeometricFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ GeometricFactory(); /** Virtual constructor */ virtual GeometricFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Geometric buildAsGeometric(const Sample & sample) const; Geometric buildAsGeometric(const Point & parameters) const; Geometric buildAsGeometric() const; }; /* class GeometricFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GEOMETRICFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Gumbel.hxx000066400000000000000000000105741307543307100257540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Gumbel distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBEL_HXX #define OPENTURNS_GUMBEL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Gumbel * * The Gumbel distribution. */ class OT_API Gumbel : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Gumbel(); /** Parameters constructor */ Gumbel(const Scalar alpha, const Scalar beta); /** Comparison operator */ Bool operator ==(const Gumbel & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Gumbel * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Gumbel */ /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The main parameter set of the distribution */ Scalar alpha_; Scalar beta_; }; /* class Gumbel */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBEL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GumbelAB.hxx000066400000000000000000000041661307543307100261570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gumbel distribution with a and b as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBELAB_HXX #define OPENTURNS_GUMBELAB_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GumbelAB * */ class OT_API GumbelAB : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ GumbelAB(); /** Constructor with parameters */ GumbelAB(const Scalar a, const Scalar b); /** Virtual constructor */ virtual GumbelAB * clone() const; /** Comparison operator */ Bool operator ==(const GumbelAB & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar a_; Scalar b_; }; /* class GumbelAB */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBELAB_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GumbelCopula.hxx000066400000000000000000000110151307543307100271070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The GumbelCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBELCOPULA_HXX #define OPENTURNS_GUMBELCOPULA_HXX #include "openturns/ArchimedeanCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GumbelCopula * * The GumbelCopula distribution. */ class OT_API GumbelCopula : public ArchimedeanCopula { CLASSNAME; public: /** Default constructor */ GumbelCopula(); /** Parameters constructor */ GumbelCopula(const Scalar theta); /** Comparison operator */ Bool operator ==(const GumbelCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual GumbelCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ArchimedeanCopula::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ArchimedeanCopula::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ArchimedeanCopula::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar computeArchimedeanGenerator(const Scalar t) const; /** Compute the inverse of the archimedean generator */ Scalar computeInverseArchimedeanGenerator(const Scalar t) const; /** Compute the derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorDerivative(const Scalar t) const; /** Compute the second derivative of the archimedean generator */ Scalar computeArchimedeanGeneratorSecondDerivative(const Scalar t) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /* Interface specific to GumbelCopula */ /** Theta accessor */ void setTheta(const Scalar theta); Scalar getTheta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; /** The parameter of the GumbelCopula distribution */ Scalar theta_; }; /* class GumbelCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBELCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GumbelCopulaFactory.hxx000066400000000000000000000035641307543307100304510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for GumbelCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBELCOPULAFACTORY_HXX #define OPENTURNS_GUMBELCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/GumbelCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GumbelCopulaFactory */ class OT_API GumbelCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ GumbelCopulaFactory(); /** Virtual constructor */ virtual GumbelCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; GumbelCopula buildAsGumbelCopula(const Sample & sample) const; GumbelCopula buildAsGumbelCopula(const Point & parameters) const; GumbelCopula buildAsGumbelCopula() const; }; /* class GumbelCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBELCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GumbelFactory.hxx000066400000000000000000000036321307543307100273010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Gumbel distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBELFACTORY_HXX #define OPENTURNS_GUMBELFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Gumbel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GumbelFactory */ class OT_API GumbelFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ GumbelFactory(); /** Virtual constructor */ virtual GumbelFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; Gumbel buildAsGumbel(const Sample & sample) const; Gumbel buildAsGumbel(const Point & parameters) const; Gumbel buildAsGumbel() const; }; /* class GumbelFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBELFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/GumbelMuSigma.hxx000066400000000000000000000042671307543307100272410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Gumbel distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GUMBELMUSIGMA_HXX #define OPENTURNS_GUMBELMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GumbelMuSigma * */ class OT_API GumbelMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ GumbelMuSigma(); /** Constructor with parameters */ GumbelMuSigma(const Scalar mu, const Scalar sigma); /** Virtual constructor */ virtual GumbelMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const GumbelMuSigma & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; }; /* class GumbelMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_GUMBELMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Histogram.hxx000066400000000000000000000120411307543307100264650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Histogram distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HISTOGRAM_HXX #define OPENTURNS_HISTOGRAM_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/PersistentObject.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Histogram * * The Histogram distribution. */ class OT_API Histogram : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Histogram(); /** Parameters constructor */ Histogram(const Scalar first, const Point & width, const Point & height); /** Comparison operator */ Bool operator ==(const Histogram & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Histogram * clone() const; /** Get one realization of the Histogram distribution */ Point getRealization() const; /** Get the DDF of the Histogram distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the Histogram distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the Histogram distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the Histogram distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the Histogram distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value and description accessor */ Point getParameter() const; void setParameter(const Point & parameter); Description getParameterDescription() const; /* Interface specific to Histogram */ /** First point accessor */ void setFirst(const Scalar first); Scalar getFirst() const; /** Data accessor */ void setData(const Point & width, const Point & weight); Point getWidth() const; Point getHeight() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Draw the PDF of the Histogram using a specific presentation */ // using ContinuousDistribution::drawPDF; virtual Graph drawPDF() const; /** Draw the PDF of the Histogram using a specific presentation */ virtual Graph drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the Histogram distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The first point of the collection */ Scalar first_; /** The collection of widths/heights */ Point width_; Point height_; /** The cumulated bin widths */ Point cumulatedWidth_; /** The cumulated bin surface */ Point cumulatedSurface_; }; /* class Histogram */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HISTOGRAM_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/HistogramFactory.hxx000066400000000000000000000045111307543307100300200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Histogram distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HISTOGRAMFACTORY_HXX #define OPENTURNS_HISTOGRAMFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Histogram.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HistogramFactory */ class OT_API HistogramFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ HistogramFactory(); /** Virtual constructor */ virtual HistogramFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Sample & sample, const Scalar bandwidth) const; Implementation build(const Sample & sample, const UnsignedInteger binNumber) const; Implementation build() const; Histogram buildAsHistogram(const Sample & sample) const; Histogram buildAsHistogram(const Sample & sample, const Scalar bandwidth) const; Histogram buildAsHistogram(const Sample & sample, const UnsignedInteger binNumber) const; Histogram buildAsHistogram() const; /** Compute the bandwidth according to Silverman's rule */ Scalar computeSilvermanBandwidth(const Sample & sample, const Bool useQuantile = true) const; }; /* class HistogramFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HISTOGRAMFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/IndependentCopula.hxx000066400000000000000000000131411307543307100301330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements an independent copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INDEPENDENTCOPULA_HXX #define OPENTURNS_INDEPENDENTCOPULA_HXX #include "openturns/OTprivate.hxx" #include "openturns/CopulaImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class IndependentCopula * * The class implements an independent copula */ class OT_API IndependentCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ explicit IndependentCopula(const UnsignedInteger dimension = 1); /** Comparison operator */ Bool operator ==(const IndependentCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual IndependentCopula * clone() const; /** Get one realization of the IndependentCopula distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the IndependentCopula distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the IndependentCopula distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Compute the survival function */ using CopulaImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product bilateral confidence interval containing a given probability of the distribution */ Interval computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the PDF gradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the IndependentCopula distribution */ using DistributionImplementation::computeQuantile; #ifndef SWIG Point computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const; #endif /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalDDF(const Scalar x, const Point & y) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; virtual Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; virtual Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; virtual Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the isoprobabilistic transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilistic transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Tell if the distribution is elliptical */ Bool isElliptical() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; }; /* class IndependentCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INDEPENDENTCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/InverseChiSquare.hxx000066400000000000000000000112551307543307100277560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSECHISQUARE_HXX #define OPENTURNS_INVERSECHISQUARE_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseChiSquare * * The InverseChiSquare distribution. */ class OT_API InverseChiSquare : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ InverseChiSquare(); /** Parameters constructor */ InverseChiSquare(const Scalar nu); /** Comparison operator */ Bool operator ==(const InverseChiSquare & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual InverseChiSquare * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to InverseChiSquare */ /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar nu_; Scalar normalizationFactor_; }; /* class InverseChiSquare */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSECHISQUARE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/InverseGamma.hxx000066400000000000000000000115601307543307100271130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseGamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSEGAMMA_HXX #define OPENTURNS_INVERSEGAMMA_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseGamma * * The InverseGamma distribution. */ class OT_API InverseGamma : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ InverseGamma(); /** Parameters constructor */ InverseGamma(const Scalar k, const Scalar lambda); /** Comparison operator */ Bool operator ==(const InverseGamma & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual InverseGamma * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to InverseGamma */ /** K accessor */ void setK(const Scalar k); Scalar getK() const; /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** K and lambda accessor */ void setKLambda(const Scalar k, const Scalar lambda); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar k_; Scalar lambda_; Scalar normalizationFactor_; }; /* class InverseGamma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEGAMMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/InverseNormal.hxx000066400000000000000000000077741307543307100273350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENORMAL_HXX #define OPENTURNS_INVERSENORMAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNormal * * The InverseNormal distribution. */ class OT_API InverseNormal : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ InverseNormal(); /** Parameters constructor */ InverseNormal(const Scalar lambda, const Scalar mu); /** Comparison operator */ Bool operator ==(const InverseNormal & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual InverseNormal * clone() const; /** Get one realization of the InverseNormal distribution */ Point getRealization() const; /** Get the PDF of the InverseNormal distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the InverseNormal distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /* Interface specific to InverseNormal */ void setLambdaMu(const Scalar lambda, const Scalar mu); /** lambda accessor */ Scalar getLambda() const; /** mu accessor */ Scalar getMu() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** The main parameter set of the distribution */ Scalar lambda_; Scalar mu_; }; /* class InverseNormal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENORMAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/InverseNormalFactory.hxx000066400000000000000000000036041307543307100306510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for InverseNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSENORMALFACTORY_HXX #define OPENTURNS_INVERSENORMALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/InverseNormal.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseNormalFactory */ class OT_API InverseNormalFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ InverseNormalFactory(); /** Virtual constructor */ virtual InverseNormalFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; InverseNormal buildAsInverseNormal(const Sample & sample) const; InverseNormal buildAsInverseNormal(const Point & parameters) const; InverseNormal buildAsInverseNormal() const; }; /* class InverseNormalFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSENORMALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/InverseWishart.hxx000066400000000000000000000076341307543307100275210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The InverseWishart distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_INVERSEWISHART_HXX #define OPENTURNS_INVERSEWISHART_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/TriangularMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class InverseWishart * * The InverseWishart distribution. */ class OT_API InverseWishart : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ InverseWishart(); /** Parameters constructor */ InverseWishart(const CovarianceMatrix & v, const Scalar nu); /** Comparison operator */ Bool operator ==(const InverseWishart & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual InverseWishart * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get one realization of the distribution as a covariance matrix */ CovarianceMatrix getRealizationAsMatrix() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; Scalar computePDF(const CovarianceMatrix & m) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; Scalar computeLogPDF(const CovarianceMatrix & m) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to InverseWishart */ /** V accessor */ void setV(const CovarianceMatrix & v); CovarianceMatrix getV() const; /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the normalization factor on a log scale */ void update(); /** The main parameter set of the distribution */ mutable TriangularMatrix cholesky_; Scalar nu_; /** The inverse of the Cholesky factor of the inverse of the scale matrix V */ TriangularMatrix inverseCholeskyInverse_; /** The log-normalization factor */ Scalar logNormalizationFactor_; }; /* class InverseWishart */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_INVERSEWISHART_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/KFactorFunctions.hxx000066400000000000000000000023541307543307100277600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the k factor * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KFACTORFUNCTIONS_HXX #define OPENTURNS_KFACTORFUNCTIONS_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS namespace KFactorFunctions { Scalar KFactor(const Scalar n, const Scalar nu, const Scalar p, const Scalar alpha); } // KFactorFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KFACTORFUNCTIONS_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/KPermutationsDistribution.hxx000066400000000000000000000077711307543307100317530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The KPermutationsDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KPERMUTATIONSDISTRIBUTION_HXX #define OPENTURNS_KPERMUTATIONSDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KPermutationsDistribution * * The KPermutationsDistribution distribution. */ class OT_API KPermutationsDistribution : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ KPermutationsDistribution(); /** Parameters constructor */ KPermutationsDistribution(const UnsignedInteger k, const UnsignedInteger n); /** Comparison operator */ Bool operator ==(const KPermutationsDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual KPermutationsDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; using DiscreteDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the i-th marginal distribution */ using DiscreteDistribution::getMarginal; Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /* Interface specific to KPermutationsDistribution */ /** K accessor */ void setK(const UnsignedInteger k); UnsignedInteger getK() const; /** N accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Size of the permutations */ UnsignedInteger k_; /** Size of the base set */ UnsignedInteger n_; /** Log PDF value */ Scalar logPDFValue_; }; /* class KPermutationsDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KPERMUTATIONSDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/KernelMixture.hxx000066400000000000000000000141651307543307100273370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements kernelMixtures * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KERNELMIXTURE_HXX #define OPENTURNS_KERNELMIXTURE_HXX #include "openturns/Distribution.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KernelMixture * * The class describes the probabilistic concept of KernelMixture. */ class OT_API KernelMixture : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ KernelMixture(); /** Parameters constructor */ KernelMixture(const Distribution & kernel, const Point & bandwidth, const Sample & sample); /** Comparison operator */ Bool operator ==(const KernelMixture & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Kernel accessor */ void setKernel(const Distribution & kernel); Distribution getKernel() const; /** Bandwidth accessor */ void setBandwidth(const Point & bandwidth); Point getBandwidth() const; /** Sample accessor */ void setInternalSample(const Sample & sample); Sample getInternalSample() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual KernelMixture * clone() const; /** Get one realization of the KernelMixture */ Point getRealization() const; /** Get the DDF of the KernelMixture */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the KernelMixture */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the KernelMixture */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Compute the survival function */ using ContinuousDistribution::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDF gradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is constinuous */ Bool isContinuous() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); friend class Factory; /** Get the mean of a kernelMixture */ void computeMean() const; /** Get the covariance of a kernelMixture */ void computeCovariance() const; /** Compute the normalization factor */ void computeNormalizationFactor(); /** The kernel of the kernelMixture */ Distribution kernel_; /** The bandwidth of the KernelMixture */ Point bandwidth_; /** The componentwise bandwidth inverse of the KernelMixture */ Point bandwidthInverse_; /** The (n\product_{k=1}^{dim}h_k)^{-1} normalization factor */ Scalar normalizationFactor_; /** The sample of the kernelMixture */ Sample sample_; /** PDF approximation associated to the CDF approximation */ PiecewiseHermiteEvaluation pdfApproximationCDF_; /** CDF approximation */ PiecewiseHermiteEvaluation cdfApproximation_; /** PDF approximation associated to the CCDF approximation */ PiecewiseHermiteEvaluation pdfApproximationCCDF_; /** Complementary CDF approximation */ PiecewiseHermiteEvaluation ccdfApproximation_; /** Do I have an approximation for the CDF? */ Bool useApproximatePDFCDF_; }; /* class KernelMixture */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KERNELMIXTURE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/KernelSmoothing.hxx000066400000000000000000000074771307543307100276610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class acts like a (possibly truncated) KernelMixture factory, implementing density estimation * using the kernel smoothing method. It uses Silverman's rule for product kernel. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KERNELSMOOTHING_HXX #define OPENTURNS_KERNELSMOOTHING_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KernelSmoothing * * The class describes the probabilistic concept of KernelSmoothing. */ class OT_API KernelSmoothing : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ KernelSmoothing(); /** Default constructor */ explicit KernelSmoothing(const Distribution & kernel, const Bool bined = true, const UnsignedInteger binNumber = ResourceMap::GetAsUnsignedInteger("KernelSmoothing-BinNumber"), const Bool boundaryCorrection = false); /** Virtual constructor */ virtual KernelSmoothing * clone() const; /** Build a Normal kernel mixture based on the given sample. If no bandwith has already been set, Silverman's rule is used */ using DistributionFactoryImplementation::build; virtual Implementation build(const Sample & sample) const; /** Build a (possibly truncated) kernel mixture based on the given sample and bandwidth */ virtual Implementation build(const Sample & sample, const Point & bandwidth) const; /** Bandwidth accessor */ Point getBandwidth() const; /** Kernel accessor */ Distribution getKernel() const; void setBoundaryCorrection(const Bool boundaryCorrection); /** Compute the bandwidth according to Silverman's rule */ Point computeSilvermanBandwidth(const Sample & sample) const; /** Compute the bandwidth according to the plugin rule. Warning! * it can take a lot of time for large samples, as the cost is * quadratic with the sample size */ Point computePluginBandwidth(const Sample & sample) const; /** Compute the bandwidth according to a mixed rule: * simply use the plugin rule for small sample, and * estimate the ratio between the plugin rule and * the Silverman rule on a small sample, then * scale the Silverman bandwidth computed on the full * sample with this ratio */ Point computeMixedBandwidth(const Sample & sample) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: void setBandwidth(const Point & bandwidth) const; // Bandwith of the smoothing mutable Point bandwidth_; // 1D kernel for kernel product Distribution kernel_; // Flag to tell if we compute a bined version of the estimator Bool bined_; // Number of bins UnsignedInteger binNumber_; Bool boundaryCorrection_; }; /* class KernelSmoothing */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KERNELSMOOTHING_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Laplace.hxx000066400000000000000000000114041307543307100260730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Laplace distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LAPLACE_HXX #define OPENTURNS_LAPLACE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Laplace * * The Laplace distribution. */ class OT_API Laplace : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Laplace(); /** Parameters constructor */ explicit Laplace(const Scalar lambda, const Scalar mu = 0.0); /** Comparison operator */ Bool operator ==(const Laplace & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Laplace * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the complementary CDF of the distribution */ using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Laplace */ /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The lambda of the Laplace distribution */ Scalar lambda_; /** The mu of the Laplace distribution */ Scalar mu_; }; /* class Laplace */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LAPLACE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LaplaceFactory.hxx000066400000000000000000000034441307543307100274300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Laplace distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LAPLACEFACTORY_HXX #define OPENTURNS_LAPLACEFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Laplace.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LaplaceFactory */ class OT_API LaplaceFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ LaplaceFactory(); /** Virtual constructor */ virtual LaplaceFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Laplace buildAsLaplace(const Sample & sample) const; Laplace buildAsLaplace(const Point & parameters) const; Laplace buildAsLaplace() const; }; /* class LaplaceFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LAPLACEFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogNormal.hxx000066400000000000000000000126421307543307100264310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The LogNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGNORMAL_HXX #define OPENTURNS_LOGNORMAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogNormal * * The LogNormal distribution. */ class OT_API LogNormal : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ LogNormal(); /** Parameters constructor */ LogNormal(const Scalar muLog, const Scalar sigmaLog, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const LogNormal & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual LogNormal * clone() const; /** Get one realization of the LogNormal distribution */ Point getRealization() const; /** Get the DDF of the LogNormal distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the LogNormal distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the LogNormal distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the LogNormal distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the LogNormal distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to LogNormal */ /** MuLog accessor */ void setMuLog(const Scalar muLog); Scalar getMuLog() const; /** SigmaLog accessor */ void setSigmaLog(const Scalar sigmaLog); Scalar getSigmaLog() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** MuLogSigmaLog accessor */ void setMuLogSigmaLog(const Scalar muLog, const Scalar sigmaLog); private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the LogNormal distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the integrand that is involved in the computation of the characteristic function */ Complex characteristicIntegrand(const Scalar eta, const Scalar sStar) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar muLog_; Scalar sigmaLog_; Scalar gamma_; Scalar normalizationFactor_; /** Normalization factor for the characteristic function */ Scalar H_; /** Hermite integration */ mutable Point hermiteNodes_; mutable Point hermiteWeights_; }; /* class LogNormal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGNORMAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogNormalFactory.hxx000066400000000000000000000047231307543307100277620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for LogNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGNORMALFACTORY_HXX #define OPENTURNS_LOGNORMALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/LogNormal.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogNormalFactory */ class OT_API LogNormalFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ LogNormalFactory(); /** Virtual constructor */ virtual LogNormalFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Sample & sample, const UnsignedInteger method) const; Implementation build(const Point & parameters) const; Implementation build() const; LogNormal buildAsLogNormal(const Sample & sample) const; LogNormal buildAsLogNormal(const Sample & sample, const UnsignedInteger method) const; LogNormal buildAsLogNormal(const Point & parameters) const; LogNormal buildAsLogNormal() const; /** Algorithm associated with the method of moments */ LogNormal buildMethodOfMoments(const Sample & sample) const; /** Algoritm associated with the method of local likelihood maximization */ LogNormal buildMethodOfLocalLikelihoodMaximization(const Sample & sample) const; /** Algorithm associated with the method of modified moments */ LogNormal buildMethodOfModifiedMoments(const Sample & sample) const; private: }; /* class LogNormalFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGNORMALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogNormalMuSigma.hxx000066400000000000000000000044021307543307100277070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LogNormal distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGNORMALMUSIGMA_HXX #define OPENTURNS_LOGNORMALMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogNormalMuSigma * */ class OT_API LogNormalMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ LogNormalMuSigma(); /** Constructor with parameters */ LogNormalMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma = 0.); /** Virtual constructor */ virtual LogNormalMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const LogNormalMuSigma & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; Scalar gamma_; }; /* class LogNormalMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGNORMALMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogNormalMuSigmaOverMu.hxx000066400000000000000000000045221307543307100310500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief LogNormal distribution with mu and sigma over mu as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGNORMALMUSIGMAOVERMU_HXX #define OPENTURNS_LOGNORMALMUSIGMAOVERMU_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogNormalMuSigmaOverMu * */ class OT_API LogNormalMuSigmaOverMu : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ LogNormalMuSigmaOverMu(); /** Constructor with parameters */ LogNormalMuSigmaOverMu(const Scalar mu, const Scalar sigmaOverMu, const Scalar gamma = 0.); /** Virtual constructor */ virtual LogNormalMuSigmaOverMu * clone() const; /** Comparison operator */ Bool operator ==(const LogNormalMuSigmaOverMu & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigmaOverMu_; Scalar gamma_; }; /* class LogNormalMuSigmaOverMu */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGNORMALMUSIGMAOVERMU_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogUniform.hxx000066400000000000000000000113041307543307100266120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The LogUniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGUNIFORM_HXX #define OPENTURNS_LOGUNIFORM_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogUniform * * The LogUniform distribution. */ class OT_API LogUniform : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ LogUniform(); /** Parameters constructor */ LogUniform(const Scalar aLog, const Scalar bLog); /** Comparison operator */ Bool operator ==(const LogUniform & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual LogUniform * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution, i.e. the gradient of its PDF w.r.t. point */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution, i.e. P(point < X < point+dx) = PDF(point)dx + o(dx) */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to LogUniform */ /** ALog accessor */ void setALog(const Scalar aLog); Scalar getALog() const; /** BLog accessor */ void setBLog(const Scalar bLog); Scalar getBLog() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ /** Lower bound on the logarithmic scale */ Scalar aLog_; /** Upper bound on the logarithmic scale */ Scalar bLog_; /** Derivative parameters */ /** Lower bound on the natural scale */ Scalar a_; /** Upper bound on the natural scale */ Scalar b_; }; /* class LogUniform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGUNIFORM_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogUniformFactory.hxx000066400000000000000000000035151307543307100301470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for LogUniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGUNIFORMFACTORY_HXX #define OPENTURNS_LOGUNIFORMFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/LogUniform.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogUniformFactory */ class OT_API LogUniformFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ LogUniformFactory(); /** Virtual constructor */ LogUniformFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; LogUniform buildAsLogUniform(const Sample & sample) const; LogUniform buildAsLogUniform(const Point & parameters) const; LogUniform buildAsLogUniform() const; }; /* class LogUniformFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGUNIFORMFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Logistic.hxx000066400000000000000000000113721307543307100263130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Logistic distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGISTIC_HXX #define OPENTURNS_LOGISTIC_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Logistic * * The Logistic distribution. */ class OT_API Logistic : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Logistic(); /** Parameters constructor */ Logistic(const Scalar alpha, const Scalar beta); /** Comparison operator */ Bool operator ==(const Logistic & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Logistic * clone() const; /** Get one realization of the Logistic distribution */ Point getRealization() const; /** Get the DDF of the Logistic distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the Logistic distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the Logistic distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the Logistic distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the Logistic distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Logistic */ /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the Logistic distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The main parameter set of the distribution */ Scalar alpha_; Scalar beta_; }; /* class Logistic */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGISTIC_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/LogisticFactory.hxx000066400000000000000000000036731307543307100276500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Logistic distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LOGISTICFACTORY_HXX #define OPENTURNS_LOGISTICFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Logistic.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LogisticFactory */ class OT_API LogisticFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ LogisticFactory(); /** Virtual constructor */ virtual LogisticFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; Logistic buildAsLogistic(const Sample & sample) const; Logistic buildAsLogistic(const Point & parameters) const; Logistic buildAsLogistic() const; }; /* class LogisticFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LOGISTICFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MarginalDistribution.hxx000066400000000000000000000133271307543307100306720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements a generic mechanism to extract marginal distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MARGINALDISTRIBUTION_HXX #define OPENTURNS_MARGINALDISTRIBUTION_HXX #include "openturns/Distribution.hxx" #include "openturns/DistributionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MarginalDistribution * * The class describes the probabilistic concept of marginal distributions */ class OT_API MarginalDistribution : public DistributionImplementation { CLASSNAME; public: /** Default constructor for save/load methods : 1D distribution with default Uniform underlying distribution */ MarginalDistribution(); /** Default constructor, independent copula is supposed */ MarginalDistribution(const Distribution & distribution, const UnsignedInteger & index); MarginalDistribution(const Distribution & distribution, const Indices & indices); /** Comparison operator */ Bool operator ==(const MarginalDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Indices accessor */ void setIndices(const Indices & indices); Indices getIndices() const; private: /** Set the distribution and the indices in one shot */ void setDistributionAndIndices(const Distribution & distribution, const Indices & indices); public: /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual MarginalDistribution * clone() const; /** Get one realization of the MarginalDistribution */ Point getRealization() const; Sample getSample(const UnsignedInteger size) const; /** Get the CDF of the MarginalDistribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the survival function of the MarginalDistribution */ using DistributionImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the Spearman correlation of the distribution */ CorrelationMatrix getSpearmanCorrelation() const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution */ Implementation getStandardDistribution() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Expand the given marginal point to the underlying distribution argument point */ Point expandPoint(const Point & point, const Bool upper = true) const; /** Reduce the given point to the marginal point */ Point reducePoint(const Point & point) const; /** The distribution under the MarginalDistribution */ Distribution distribution_; /** The indices of the MarginalDistribution */ Indices indices_; /** The lower bound of the underlying distribution */ Point lowerBound_; /** The upper bound of the underlying distribution */ Point upperBound_; }; /* class MarginalDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MARGINALDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MaximumDistribution.hxx000066400000000000000000000077221307543307100305570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The MaximumDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MAXIMUMDISTRIBUTION_HXX #define OPENTURNS_MAXIMUMDISTRIBUTION_HXX #include "openturns/DistributionImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Collection.hxx" /* The maximum distribution of F is the distribution of X = max(X_1, ... , X_n) where (X_1, ... , X_n) ~ F. P(X < x) = P(X_1 < x && ... && X_n < x) */ BEGIN_NAMESPACE_OPENTURNS /** * @class MaximumDistribution * * The MaximumDistribution distribution. */ class OT_API MaximumDistribution : public DistributionImplementation { CLASSNAME; public: /** A type for distribution collection */ typedef Collection DistributionCollection; /** Default constructor */ MaximumDistribution(); /** Parameters constructor */ explicit MaximumDistribution(const Distribution & distribution); /** Parameters constructor */ explicit MaximumDistribution(const DistributionCollection & collection); /** Parameters constructor */ MaximumDistribution(const Distribution & distribution, const UnsignedInteger size); /** Comparison operator */ Bool operator ==(const MaximumDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual MaximumDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using DistributionImplementation::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /* Interface specific to MaximumDistribution */ /** Distribution accessor */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /* Compute the numerical range of the distribution given the parameters values */ void computeRange(); /* The underlying joint distribution */ Distribution distribution_; /* Flag to tell if all the components are equal and independent */ Bool allSame_; /* Number of variables upon which the maximum is taken */ UnsignedInteger variablesNumber_; }; /* class MaximumDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MAXIMUMDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MaximumEntropyOrderStatisticsCopula.hxx000066400000000000000000000070421307543307100337460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The maximum entropy order statistics copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSCOPULA_HXX #define OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSCOPULA_HXX #include "openturns/OTprivate.hxx" #include "openturns/SklarCopula.hxx" #include "openturns/MaximumEntropyOrderStatisticsDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MaximumEntropyOrderStatisticsCopula * * The maximum entropy order statistics copula */ class OT_API MaximumEntropyOrderStatisticsCopula : public SklarCopula { CLASSNAME; public: typedef MaximumEntropyOrderStatisticsDistribution::DistributionCollection DistributionCollection; /** Default constructor */ MaximumEntropyOrderStatisticsCopula(); /** Parameters constructor */ explicit MaximumEntropyOrderStatisticsCopula(const DistributionCollection & coll); /** Constructor with no check of the parameters, to speed-up marginal creations */ MaximumEntropyOrderStatisticsCopula(const MaximumEntropyOrderStatisticsDistribution & distribution); /** Comparison operator */ Bool operator ==(const MaximumEntropyOrderStatisticsCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ void setDistributionCollection(const DistributionCollection & coll); DistributionCollection getDistributionCollection() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual MaximumEntropyOrderStatisticsCopula * clone() const; /** Get the kth approximation */ PiecewiseHermiteEvaluation getApproximation(const UnsignedInteger k = 0) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using CopulaImplementation::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /* Interface specific to MaximumEntropyOrderStatisticsCopula */ /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the covariance of the copula */ void computeCovariance() const; /** The underlying order statistics distribution */ MaximumEntropyOrderStatisticsDistribution distribution_; }; /* class MaximumEntropyOrderStatisticsCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSCOPULA_HXX */ MaximumEntropyOrderStatisticsDistribution.hxx000066400000000000000000000200301307543307100351130ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Distribution/openturns// -*- C++ -*- /** * @brief The maximum entropy order statistics distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSDISTRIBUTION_HXX #define OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/PiecewiseHermiteEvaluation.hxx" #include "openturns/Distribution.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MaximumEntropyOrderStatisticsDistribution * * The maximum entropy order statistics distribution */ class OT_API MaximumEntropyOrderStatisticsDistribution : public ContinuousDistribution { CLASSNAME; /** The MaximumEntropyOrderStatisticsDistributionWrapper class is closely linked with the MaximumEntropyOrderStatisticsDistribution class */ friend struct MaximumEntropyOrderStatisticsDistributionWrapper; /** The MaximumEntropyOrderStatisticsCopula class is closely linked with the MaximumEntropyOrderStatisticsDistribution class */ friend class MaximumEntropyOrderStatisticsCopula; public: /** A type for distribution collection */ typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; /** Default constructor */ MaximumEntropyOrderStatisticsDistribution(); /** Parameters constructor */ explicit MaximumEntropyOrderStatisticsDistribution(const DistributionCollection & coll, const Bool useApproximation = ResourceMap::GetAsBool("MaximumEntropyOrderStatisticsDistribution-UseApproximation"), const Bool checkMarginals = ResourceMap::GetAsBool("MaximumEntropyOrderStatisticsDistribution-CheckMarginals")); /** Comparison operator */ Bool operator ==(const MaximumEntropyOrderStatisticsDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ void setDistributionCollection(const DistributionCollection & coll, const Bool useApproximation = ResourceMap::GetAsBool("MaximumEntropyOrderStatisticsDistribution-UseApproximation"), const Bool checkMarginals = ResourceMap::GetAsBool("MaximumEntropyOrderStatisticsDistribution-CheckMarginals")); /** Marginal distributions accessor */ DistributionCollection getDistributionCollection() const; /** Get the copula of a distribution */ Implementation getCopula() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual MaximumEntropyOrderStatisticsDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; Scalar computeCDFOld(const Point & point) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; private: MaximumEntropyOrderStatisticsDistribution getMarginalAsMaximumEntropyOrderStatisticsDistribution(const Indices & indices) const; public: /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using ContinuousDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Tell if the distribution uses approximations for the exponential terms */ void useApproximation(const Bool flag = true); /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the kth approximation */ PiecewiseHermiteEvaluation getApproximation(const UnsignedInteger k = 0) const; /* Interface specific to MaximumEntropyOrderStatisticsDistribution */ /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Constructor with no check of the parameters, to speed-up margina creations */ MaximumEntropyOrderStatisticsDistribution(const DistributionCollection & coll, const Indices & partition, const Bool useApproximation, const Collection & exponentialFactorApproximation, const Description & description); /** Build a C1 interpolation of the exponential factor between two marginals */ PiecewiseHermiteEvaluation interpolateExponentialFactor(const UnsignedInteger lower, const UnsignedInteger upper, const UnsignedInteger maximumSubdivision = ResourceMap::GetAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-MaximumApproximationSubdivision"), const Scalar shift = ResourceMap::GetAsScalar("MaximumEntropyOrderStatisticsDistribution-SupportShift")) const; /** Build a C1 interpolation of the exponential factors in the PDF */ void interpolateExponentialFactors(); public: /** Compute the exponential factor */ Scalar computeExponentialFactor(const UnsignedInteger k, const Scalar u, const Scalar v) const; /** Compute the factor */ Scalar computeFactor(const UnsignedInteger k, const Scalar u, const Scalar v) const; private: /** The main parameter set of the distribution */ DistributionPersistentCollection distributionCollection_; /** partition of non-overlapping marginals */ Indices partition_; /** Flag to tell if we use approximation for the exponential term */ mutable Bool useApproximation_; /** interpolation of the exponential factors in the PDF */ Collection exponentialFactorApproximation_; /** Integration algorithm */ GaussKronrod integrator_; }; /* class MaximumEntropyOrderStatisticsDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MAXIMUMENTROPYORDERSTATISTICSDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MaximumLikelihoodFactory.hxx000066400000000000000000000067601307543307100315140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Maximum likelihood estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MAXIMUMLIKELIHOODFACTORY_HXX #define OPENTURNS_MAXIMUMLIKELIHOODFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MaximumLikelihoodFactory */ class OT_API MaximumLikelihoodFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ MaximumLikelihoodFactory(); /** Parameters constructor */ MaximumLikelihoodFactory(const Distribution & distribution); /** Virtual constructor */ virtual MaximumLikelihoodFactory * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; using DistributionFactoryImplementation::build; /* Here is the interface that all derived class must implement */ /** Build a distribution based on a sample */ virtual Implementation build(const Sample & sample) const; /** Build a distribution based on a set of parameters */ virtual Point buildParameter(const Sample & sample) const; /** Optimization solver accessor */ void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationAlgorithm() const; // @deprecated void setOptimizationSolver(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationSolver() const; /** Accessor to optimization bounds */ void setOptimizationBounds(const Interval & optimizationBounds); Interval getOptimizationBounds() const; /** Accessor to inequality constraint */ void setOptimizationInequalityConstraint(const Function & optimizationInequalityConstraint); /** Accessor to known parameter */ void setKnownParameter(const Point & values, const Indices & positions); Point getKnownParameterValues() const; Indices getKnownParameterIndices() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* The underlying distribution */ Distribution distribution_; /* Solver & optimization problem for log-likelihood maximization */ OptimizationAlgorithm solver_; // Bounds used for parameter optimization Interval optimizationBounds_; // Inequality constraint used for parameter optimization Function optimizationInequalityConstraint_; /* Known parameter */ Point knownParameterValues_; Indices knownParameterIndices_; }; /* class MaximumLikelihoodFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MAXIMUMLIKELIHOODFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MeixnerDistribution.hxx000066400000000000000000000134621307543307100305470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The MeixnerDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MEIXNERDISTRIBUTION_HXX #define OPENTURNS_MEIXNERDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/PiecewiseHermiteEvaluation.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MeixnerDistribution * * The MeixnerDistribution distribution. */ class OT_API MeixnerDistribution : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ MeixnerDistribution(); /** Parameters constructor */ MeixnerDistribution(const Scalar alpha, const Scalar beta, const Scalar delta, const Scalar mu); /** Comparison operator */ Bool operator ==(const MeixnerDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual MeixnerDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to MeixnerDistribution */ /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Delta accessor */ void setDelta(const Scalar delta); Scalar getDelta() const; /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Initialize optimization solver parameter using the ResourceMap */ void initializeOptimizationAlgorithmParameter(); /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; private: /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Set simultaneously the tree scale and shape parameters */ void setAlphaBetaDelta(const Scalar alpha, const Scalar beta, const Scalar delta); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar alpha_; Scalar beta_; Scalar delta_; Scalar mu_; /** The logarithm of the normalization factor */ Scalar logNormalizationFactor_; /** Bounds for the ratio of uniform sampling algorithm */ Scalar b_; Scalar c_; Scalar dc_; /** CDF approximation */ PiecewiseHermiteEvaluation cdfApproximation_; /** Complementary CDF approximation */ PiecewiseHermiteEvaluation ccdfApproximation_; }; /* class MeixnerDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MEIXNERDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MeixnerDistributionFactory.hxx000066400000000000000000000037441307543307100321010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for MeixnerDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MEIXNERDISTRIBUTIONFACTORY_HXX #define OPENTURNS_MEIXNERDISTRIBUTIONFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/MeixnerDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MeixnerDistributionFactory */ class OT_API MeixnerDistributionFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ MeixnerDistributionFactory(); /** Virtual constructor */ virtual MeixnerDistributionFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; MeixnerDistribution buildAsMeixnerDistribution(const Sample & sample) const; MeixnerDistribution buildAsMeixnerDistribution(const Point & parameters) const; MeixnerDistribution buildAsMeixnerDistribution() const; }; /* class MeixnerDistributionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MEIXNERDISTRIBUTIONFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MethodOfMomentsFactory.hxx000066400000000000000000000062251307543307100311370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Estimation by method of moments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_METHODOFMOMENTSFACTORY_HXX #define OPENTURNS_METHODOFMOMENTSFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MethodOfMomentsFactory */ class OT_API MethodOfMomentsFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ MethodOfMomentsFactory(); /** Parameters constructor */ MethodOfMomentsFactory(const Distribution & distribution); /** Virtual constructor */ virtual MethodOfMomentsFactory * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; using DistributionFactoryImplementation::build; /* Here is the interface that all derived class must implement */ /** Build a distribution based on a sample */ virtual Implementation build(const Sample & sample) const; /** Build a distribution based on a set of parameters */ virtual Point buildParameter(const Sample & sample) const; /** Solver accessor */ void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationAlgorithm() const; // @deprecated void setOptimizationSolver(const OptimizationAlgorithm & solver); OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationProblem(const OptimizationProblem & problem); OptimizationProblem getOptimizationProblem() const; /** Accessor to known parameter */ void setKnownParameter(const Point & values, const Indices & positions); Point getKnownParameterValues() const; Indices getKnownParameterIndices() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* The underlying distribution */ Distribution distribution_; /* Solver & optimization problem for log-likelihood maximization */ OptimizationAlgorithm solver_; OptimizationProblem problem_; /* Known parameter */ Point knownParameterValues_; Indices knownParameterIndices_; }; /* class MethodOfMomentsFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_METHODOFMOMENTSFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MinCopula.hxx000066400000000000000000000074041307543307100264260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements a min copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MINCOPULA_HXX #define OPENTURNS_MINCOPULA_HXX #include "openturns/OTprivate.hxx" #include "openturns/CopulaImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MinCopula * * The class implements a min copula */ class OT_API MinCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ explicit MinCopula(const UnsignedInteger dim = 1); /** Comparison operator */ Bool operator ==(const MinCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual MinCopula * clone() const; /** Get one realization of the MinCopula distribution */ Point getRealization() const; /** Get the DDF of the MinCopula distribution */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the MinCopula distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the MinCopula distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the survival function */ using CopulaImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is constinuous */ Bool isContinuous() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ virtual void computeCovariance() const; }; /* class MinCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MINCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Mixture.hxx000066400000000000000000000145431307543307100261760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements mixtures * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MIXTURE_HXX #define OPENTURNS_MIXTURE_HXX #include "openturns/Distribution.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/UserDefined.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Mixture * * The class describes the probabilistic concept of Mixture. */ class OT_API Mixture : public DistributionImplementation { CLASSNAME; // Make the BernsteinCopulaFactory class a friend of Mixture as it has to // set the isCopula_ attribute directly friend class BernsteinCopulaFactory; public: /** A type for distribution collection */ typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; /** Default constructor */ Mixture(); /** Parameters constructor */ explicit Mixture(const DistributionCollection & coll); Mixture(const DistributionCollection & coll, const Point & weights); /** Comparison operator */ Bool operator ==(const Mixture & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ void setDistributionCollection(const DistributionCollection & coll); const DistributionCollection & getDistributionCollection() const; /** get/set weights accessor */ Point getWeights() const; void setWeights(const Point & weights); /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual Mixture * clone() const; /** Get one realization of the Mixture */ Point getRealization() const; /** Get the DDF of the Mixture */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the Mixture */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the Mixture */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Compute the survival function */ using DistributionImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDF gradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Check if the distribution is integral */ Bool isIntegral() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Set distribution collection with weights given in a vector */ void setDistributionCollectionWithWeights(const DistributionCollection & coll, const Point & weights); /** Compute the mean of a mixture */ void computeMean() const; /** Compute the covariance of a mixture */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Weights distribution accessor */ void setWeightsDistribution(const UserDefined & weighstDistribution); UserDefined getWeightsDistribution() const; /** The collection of distribution of the mixture */ DistributionPersistentCollection distributionCollection_; /** The discrete distribution of the weights */ UserDefined weightsDistribution_; /** PDF approximation associated to the CDF approximation */ PiecewiseHermiteEvaluation pdfApproximationCDF_; /** CDF approximation */ PiecewiseHermiteEvaluation cdfApproximation_; /** PDF approximation associated to the CCDF approximation */ PiecewiseHermiteEvaluation pdfApproximationCCDF_; /** Complementary CDF approximation */ PiecewiseHermiteEvaluation ccdfApproximation_; /** Do I have an approximation for the CDF? */ Bool useApproximatePDFCDF_; }; /* class Mixture */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MIXTURE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Multinomial.hxx000066400000000000000000000130531307543307100270260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Multinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MULTINOMIAL_HXX #define OPENTURNS_MULTINOMIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Multinomial * * The Multinomial distribution. */ class OT_API Multinomial : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Multinomial(); /** Parameters constructor */ Multinomial(const UnsignedInteger n, const Point & p); /** Comparison operator */ Bool operator ==(const Multinomial & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Multinomial * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the i-th marginal distribution */ using DiscreteDistribution::getMarginal; Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; Sample getSupport() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Multinomial */ /** P vector accessor */ void setP(const Point & p); Point getP() const; /** N accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; /** SmallA accessor */ void setSmallA(const Scalar smallA); Scalar getSmallA() const; /** Eta accessor */ void setEta(const Scalar eta); Scalar getEta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the generating function of a sum of truncated Poisson distributions as needed in the computeCDF() method */ Complex computeGlobalPhi(const Complex & z, const Point & x) const; /** Compute the generating function of a truncated Poisson distributions as needed in the computeCDF() method */ Complex computeLocalPhi(const Complex & z, const Scalar lambda, const Scalar a) const; /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** The range of the output */ UnsignedInteger n_; /** The vector of probabilities of the Multinomial distribution */ Point p_; /** The sum of probabilities of the Multinomial distribution */ Scalar sumP_; /** Normalization factor for the CDF */ Scalar normalizationCDF_; /** Radius of the discretization in Poisson's formula */ Scalar r_; /** Threshold for the A parameter of the CDF algorithm */ Scalar smallA_; /** Normalization for the CDF algorithm */ Scalar eta_; }; /* class Multinomial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MULTINOMIAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/MultinomialFactory.hxx000066400000000000000000000033531307543307100303600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Multinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_MULTINOMIALFACTORY_HXX #define OPENTURNS_MULTINOMIALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Multinomial.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class MultinomialFactory */ class OT_API MultinomialFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ MultinomialFactory(); /** Virtual constructor */ virtual MultinomialFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build() const; Multinomial buildAsMultinomial(const Sample & sample) const; Multinomial buildAsMultinomial() const; }; /* class MultinomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_MULTINOMIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NegativeBinomial.hxx000066400000000000000000000110651307543307100277520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NegativeBinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NEGATIVEBINOMIAL_HXX #define OPENTURNS_NEGATIVEBINOMIAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NegativeBinomial * * The NegativeBinomial distribution. */ class OT_API NegativeBinomial : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ NegativeBinomial(); /** Parameters constructor */ NegativeBinomial(const Scalar r, const Scalar p); /** Comparison operator */ Bool operator ==(const NegativeBinomial & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual NegativeBinomial * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using DiscreteDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to NegativeBinomial */ /** P accessor */ void setP(const Scalar p); Scalar getP() const; /** R accessor */ void setR(const Scalar r); Scalar getR() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The maximum value of the NegativeBinomial distribution */ Scalar r_; /** The probability parameter of the NegativeBinomial distribution */ Scalar p_; }; /* class NegativeBinomial */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NEGATIVEBINOMIAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NegativeBinomialFactory.hxx000066400000000000000000000036651307543307100313110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for NegativeBinomial distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NEGATIVEBINOMIALFACTORY_HXX #define OPENTURNS_NEGATIVEBINOMIALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/NegativeBinomial.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NegativeBinomialFactory */ class OT_API NegativeBinomialFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ NegativeBinomialFactory(); /** Virtual constructor */ virtual NegativeBinomialFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; NegativeBinomial buildAsNegativeBinomial(const Sample & sample) const; NegativeBinomial buildAsNegativeBinomial(const Point & parameters) const; NegativeBinomial buildAsNegativeBinomial() const; }; /* class NegativeBinomialFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NEGATIVEBINOMIALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NonCentralChiSquare.hxx000066400000000000000000000104231307543307100304020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NonCentralChiSquare distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NONCENTRALCHISQUARE_HXX #define OPENTURNS_NONCENTRALCHISQUARE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NonCentralChiSquare * * The NonCentralChiSquare distribution. */ class OT_API NonCentralChiSquare : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ /* The default values correspond to a classical ChiSquare distribution with 5 degrees of freedom */ NonCentralChiSquare(const Scalar nu = 5.0, const Scalar lambda = 0.0); /** Comparison operator */ Bool operator ==(const NonCentralChiSquare & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual NonCentralChiSquare * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Nu accessor */ void setNu(const Scalar nu); void setNuLambda(const Scalar nu, const Scalar lambda); Scalar getNu() const; /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** Maximum iterations accessor */ void setMaximumIteration(const UnsignedInteger maximumIteration); UnsignedInteger getMaximumIteration() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Number of degrees of freedom */ Scalar nu_; /** Non-centrality parameter */ Scalar lambda_; /** The maximum iterations for the PDF and CDF computations */ UnsignedInteger maximumIteration_; }; /* class NonCentralChiSquare */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NONCENTRALCHISQUARE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NonCentralStudent.hxx000066400000000000000000000077641307543307100301620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NonCentralStudent distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NONCENTRALSTUDENT_HXX #define OPENTURNS_NONCENTRALSTUDENT_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NonCentralStudent * * The NonCentralStudent distribution. */ class OT_API NonCentralStudent : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ NonCentralStudent(const Scalar nu = 5.0, const Scalar delta = 0.0, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const NonCentralStudent & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual NonCentralStudent * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Delta accessor */ void setDelta(const Scalar delta); Scalar getDelta() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Number of degrees of freedom */ Scalar nu_; /** Non-centrality parameter */ Scalar delta_; /** Location parameter */ Scalar gamma_; }; /* class NonCentralStudent */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NONCENTRALSTUDENT_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Normal.hxx000066400000000000000000000137241307543307100257710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMAL_HXX #define OPENTURNS_NORMAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/EllipticalDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Normal * * The Normal (gaussian) distribution. */ class OT_API Normal : public EllipticalDistribution { CLASSNAME; public: /** Default constructor */ explicit Normal(const UnsignedInteger dimension = 1); /** Dimension 1 constructor */ Normal(const Scalar mu, const Scalar sd); /** Constructor for multiD normal distribution */ Normal(const Point & mean, const Point & sigma, const CorrelationMatrix & R); Normal(const Point & mean, const CovarianceMatrix & C); /** Comparison operator */ using EllipticalDistribution::operator==; Bool operator ==(const Normal & other) const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Normal * clone() const; /** Compute the density generator of the ellipticalal generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R^(-1)(x-mu)) */ Scalar computeDensityGenerator(const Scalar betaSquare) const; /** Compute the derivative of the density generator */ Scalar computeDensityGeneratorDerivative(const Scalar betaSquare) const; /** Compute the seconde derivative of the density generator */ Scalar computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const; /** Get one realization of the Normal distribution */ Point getRealization() const; Sample getSample(const UnsignedInteger size) const; /** Get the CDF of the Normal distribution */ using EllipticalDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeCharacteristicFunction(const Point & x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Point & x) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the CDF gradient of the distribution */ using EllipticalDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the radial distribution CDF */ Scalar computeRadialDistributionCDF(const Scalar radius, const Bool tail = false) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Correlation matrix accessor */ void setCorrelation(const CorrelationMatrix & R); /** Get the copula of a distribution */ Implementation getCopula() const; /* Interface specific to Implementation */ /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Check if the distribution has independent copula */ void checkIndependentCopula(); /** The normalization factor of the Normal distribution */ Scalar normalizationFactor_; /** Store the independence status */ Bool hasIndependentCopula_; }; /* class Normal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Normal2DCDF.hxx000066400000000000000000000023421307543307100264660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the CDF computation for a bi-dimensional * Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALCDF2D_HXX #define OPENTURNS_NORMALCDF2D_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS Scalar Normal2DCDF(const Scalar x1, const Scalar x2, const Scalar rho, const Bool tail); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALCDF2D_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Normal3DCDF.hxx000066400000000000000000000025271307543307100264740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the CDF computation for a tri-dimensional * Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALCDF3D_HXX #define OPENTURNS_NORMALCDF3D_HXX #include "openturns/OTprivate.hxx" BEGIN_NAMESPACE_OPENTURNS Scalar Normal3DCDF(const Scalar x1, const Scalar x2, const Scalar x3, const Scalar rho12, const Scalar rho13, const Scalar rho23, const Bool tail); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALCDF3D_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NormalCopula.hxx000066400000000000000000000134701307543307100271330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements a normal copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALCOPULA_HXX #define OPENTURNS_NORMALCOPULA_HXX #include "openturns/CopulaImplementation.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/Normal.hxx" #include "openturns/DistFunc.hxx" #include "openturns/TBB.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NormalCopula * * The class implements a normal copula */ class OT_API NormalCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ explicit NormalCopula(const UnsignedInteger dim = 2); /** Default constructor */ explicit NormalCopula(const CorrelationMatrix & correlation); /** Comparison operator */ Bool operator ==(const NormalCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual NormalCopula * clone() const; /** Get one realization of the NormalCopula distribution */ Point getRealization() const; protected: Sample getSampleParallel(const UnsignedInteger size) const; public: Sample getSample(const UnsignedInteger size) const; /** Get the DDF of the NormalCopula distribution */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the NormalCopula distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the NormalCopula distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; using CopulaImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the shape matrix of the copula */ CorrelationMatrix getShapeMatrix() const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDF gradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using CopulaImplementation::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Compute the correlation matrix of a Normal Copula from its Spearman correlation matrix */ static CorrelationMatrix GetCorrelationFromSpearmanCorrelation(const CorrelationMatrix & matrix); /** Compute the correlation matrix of a Normal Copula from its Kendall correlation matrix */ static CorrelationMatrix GetCorrelationFromKendallCorrelation(const CorrelationMatrix & matrix); /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Compute the covariance of the distribution */ void computeCovariance() const; // Normal copula parameter CorrelationMatrix correlation_; // Underlying generic representative Normal normal_; }; /* class NormalCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NormalCopulaFactory.hxx000066400000000000000000000035641307543307100304660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for NormalCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALCOPULAFACTORY_HXX #define OPENTURNS_NORMALCOPULAFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/NormalCopula.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NormalCopulaFactory */ class OT_API NormalCopulaFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ NormalCopulaFactory(); /** Virtual constructor */ virtual NormalCopulaFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; NormalCopula buildAsNormalCopula(const Sample & sample) const; NormalCopula buildAsNormalCopula(const Point & parameters) const; NormalCopula buildAsNormalCopula() const; }; /* class NormalCopulaFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALCOPULAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NormalFactory.hxx000066400000000000000000000035371307543307100273220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Normal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALFACTORY_HXX #define OPENTURNS_NORMALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Normal.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NormalFactory */ class OT_API NormalFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ NormalFactory(); /** Virtual constructor */ virtual NormalFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Normal buildAsNormal(const Sample & sample) const; Normal buildAsNormal(const Point & parameters) const; Normal buildAsNormal() const; DistributionFactoryResult buildEstimator(const Sample & sample) const; }; /* class NormalFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/NormalGamma.hxx000066400000000000000000000061071307543307100267310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The NormalGamma distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALGAMMA_HXX #define OPENTURNS_NORMALGAMMA_HXX #include "openturns/OTprivate.hxx" #include "openturns/BayesDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NormalGamma * * The NormalGamma distribution. */ class OT_API NormalGamma : public BayesDistribution { CLASSNAME; public: /** Default constructor */ NormalGamma(); /** Parameters constructor */ NormalGamma(const Scalar mu, const Scalar kappa, const Scalar alpha, const Scalar beta); /** Comparison operator */ Bool operator ==(const NormalGamma & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual NormalGamma * clone() const; /* Interface specific to NormalGamma */ /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Kappa accessor */ void setKappa(const Scalar kappa); Scalar getKappa() const; /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Conditioned distribution accessor */ using BayesDistribution::setConditionedDistribution; using BayesDistribution::getConditionedDistribution; /** Conditioning distribution accessor */ using BayesDistribution::setConditioningDistribution; using BayesDistribution::getConditioningDistribution; /** Link function accessor */ using BayesDistribution::setLinkFunction; using BayesDistribution::getLinkFunction; private: /** Compute the numerical range of the distribution */ void computeRange(); /** The prior mean */ Scalar mu_; /** The prior precision scale */ Scalar kappa_; /** The prior shape */ Scalar alpha_; /** The prior rate */ Scalar beta_; }; /* class NormalGamma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALGAMMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/OTDistribution.hxx000066400000000000000000000147271307543307100274670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTDISTRIBUTION_HXX #define OPENTURNS_OTDISTRIBUTION_HXX #include "openturns/AliMikhailHaqCopula.hxx" #include "openturns/AliMikhailHaqCopulaFactory.hxx" #include "openturns/Arcsine.hxx" #include "openturns/ArcsineFactory.hxx" #include "openturns/ArcsineMuSigma.hxx" #include "openturns/Bernoulli.hxx" #include "openturns/BernoulliFactory.hxx" #include "openturns/BernsteinCopulaFactory.hxx" #include "openturns/Beta.hxx" #include "openturns/BetaFactory.hxx" #include "openturns/BetaMuSigma.hxx" #include "openturns/Binomial.hxx" #include "openturns/BinomialFactory.hxx" #include "openturns/Burr.hxx" #include "openturns/BurrFactory.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/ChiSquareFactory.hxx" #include "openturns/Chi.hxx" #include "openturns/ChiFactory.hxx" #include "openturns/ClaytonCopula.hxx" #include "openturns/ClaytonCopulaFactory.hxx" #include "openturns/ComposedCopula.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/CompositeDistribution.hxx" #include "openturns/ConditionalDistribution.hxx" #include "openturns/CumulativeDistributionNetwork.hxx" #include "openturns/BayesDistribution.hxx" #include "openturns/Dirac.hxx" #include "openturns/DiracFactory.hxx" #include "openturns/Dirichlet.hxx" #include "openturns/DirichletFactory.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Epanechnikov.hxx" #include "openturns/Exponential.hxx" #include "openturns/ExponentialFactory.hxx" #include "openturns/FarlieGumbelMorgensternCopula.hxx" #include "openturns/FarlieGumbelMorgensternCopulaFactory.hxx" #include "openturns/FrankCopula.hxx" #include "openturns/FrankCopulaFactory.hxx" #include "openturns/FisherSnedecor.hxx" #include "openturns/FisherSnedecorFactory.hxx" #include "openturns/Frechet.hxx" #include "openturns/Gamma.hxx" #include "openturns/GammaFactory.hxx" #include "openturns/GammaMuSigma.hxx" #include "openturns/GeneralizedExtremeValue.hxx" #include "openturns/GeneralizedPareto.hxx" #include "openturns/GeneralizedParetoFactory.hxx" #include "openturns/Geometric.hxx" #include "openturns/GeometricFactory.hxx" #include "openturns/Gumbel.hxx" #include "openturns/GumbelCopula.hxx" #include "openturns/GumbelCopulaFactory.hxx" #include "openturns/GumbelFactory.hxx" #include "openturns/GumbelAB.hxx" #include "openturns/GumbelMuSigma.hxx" #include "openturns/Histogram.hxx" #include "openturns/HistogramFactory.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/InverseChiSquare.hxx" #include "openturns/InverseGamma.hxx" #include "openturns/InverseNormal.hxx" #include "openturns/InverseNormalFactory.hxx" #include "openturns/InverseWishart.hxx" #include "openturns/KPermutationsDistribution.hxx" #include "openturns/KernelMixture.hxx" #include "openturns/KernelSmoothing.hxx" #include "openturns/Laplace.hxx" #include "openturns/LaplaceFactory.hxx" #include "openturns/Logistic.hxx" #include "openturns/LogisticFactory.hxx" #include "openturns/LogNormal.hxx" #include "openturns/LogNormalFactory.hxx" #include "openturns/LogNormalMuSigma.hxx" #include "openturns/LogNormalMuSigmaOverMu.hxx" #include "openturns/LogUniform.hxx" #include "openturns/LogUniformFactory.hxx" #include "openturns/OrderStatisticsMarginalChecker.hxx" #include "openturns/OrdinalSumCopula.hxx" #include "openturns/MarginalDistribution.hxx" #include "openturns/MaximumDistribution.hxx" #include "openturns/MaximumEntropyOrderStatisticsDistribution.hxx" #include "openturns/MaximumEntropyOrderStatisticsCopula.hxx" #include "openturns/MaximumLikelihoodFactory.hxx" #include "openturns/MeixnerDistribution.hxx" #include "openturns/MeixnerDistributionFactory.hxx" #include "openturns/MethodOfMomentsFactory.hxx" #include "openturns/MinCopula.hxx" #include "openturns/Mixture.hxx" #include "openturns/Multinomial.hxx" #include "openturns/MultinomialFactory.hxx" #include "openturns/NegativeBinomial.hxx" #include "openturns/NegativeBinomialFactory.hxx" #include "openturns/NonCentralChiSquare.hxx" #include "openturns/NonCentralStudent.hxx" #include "openturns/Normal2DCDF.hxx" #include "openturns/Normal3DCDF.hxx" #include "openturns/Normal.hxx" #include "openturns/NormalCopula.hxx" #include "openturns/NormalCopulaFactory.hxx" #include "openturns/NormalFactory.hxx" #include "openturns/NormalGamma.hxx" #include "openturns/ParametrizedDistribution.hxx" #include "openturns/Poisson.hxx" #include "openturns/PoissonFactory.hxx" #include "openturns/PosteriorDistribution.hxx" #include "openturns/ProductDistribution.hxx" #include "openturns/RandomMixture.hxx" #include "openturns/RatioDistribution.hxx" #include "openturns/Rayleigh.hxx" #include "openturns/RayleighFactory.hxx" #include "openturns/Rice.hxx" #include "openturns/RiceFactory.hxx" #include "openturns/Skellam.hxx" #include "openturns/SkellamFactory.hxx" #include "openturns/Student.hxx" #include "openturns/StudentFunctions.hxx" #include "openturns/StudentFactory.hxx" #include "openturns/TracyWidomGOE.hxx" #include "openturns/TracyWidomGSE.hxx" #include "openturns/TracyWidomGUE.hxx" #include "openturns/Trapezoidal.hxx" #include "openturns/TrapezoidalFactory.hxx" #include "openturns/Triangular.hxx" #include "openturns/TriangularFactory.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/TruncatedNormal.hxx" #include "openturns/TruncatedNormalFactory.hxx" #include "openturns/Uniform.hxx" #include "openturns/UniformFactory.hxx" #include "openturns/UserDefined.hxx" #include "openturns/UserDefinedFactory.hxx" #include "openturns/VonMises.hxx" #include "openturns/Weibull.hxx" #include "openturns/WeibullFactory.hxx" #include "openturns/WeibullMuSigma.hxx" #include "openturns/Wishart.hxx" #include "openturns/ZipfMandelbrot.hxx" #endif /* OPENTURNS_OTDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/OrderStatisticsMarginalChecker.hxx000066400000000000000000000044531307543307100326260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief OrderStatisticsMarginalChecker class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORDERSTATISTICSMARGINALCHECKER_HXX #define OPENTURNS_ORDERSTATISTICSMARGINALCHECKER_HXX #include "openturns/OTprivate.hxx" #include "openturns/Indices.hxx" #include "openturns/Distribution.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrderStatisticsMarginalChecker * @brief Checks for ordered marginals in the context of the maximum order statistics copula */ class OT_API OrderStatisticsMarginalChecker : public Object { CLASSNAME; public: typedef Collection DistributionCollection; /** Parameters constructor */ OrderStatisticsMarginalChecker(const DistributionCollection & collection); /** Is the collection of marginals compatible ? */ Bool isCompatible() const; /** Throws an exception if incompatible margins */ void check() const; /** Returns the indices of disjoints marginals */ Indices buildPartition() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; private: DistributionCollection collection_; }; /* class OrderStatisticsMarginalChecker */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORDERSTATISTICSMARGINALCHECKER_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/OrdinalSumCopula.hxx000066400000000000000000000141461307543307100277610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements assembly distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ORDINALSUMCOPULA_HXX #define OPENTURNS_ORDINALSUMCOPULA_HXX #include "openturns/CopulaImplementation.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Copula.hxx" #include "openturns/UserDefined.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class OrdinalSumCopula * * The class describes the probabilistic concept of copulas * made from a collection of copulas joined by an independent copula */ class OT_API OrdinalSumCopula : public CopulaImplementation { CLASSNAME; public: /** A type for distribution collection */ typedef Collection CopulaCollection; typedef PersistentCollection CopulaPersistentCollection; /** Default constructor for save/load methods : 1D distribution with default Uniform marginal and IndependentCopula */ OrdinalSumCopula(); /** Default constructor */ OrdinalSumCopula(const CopulaCollection & coll, const Point & bounds); /** Comparison operator */ Bool operator ==(const OrdinalSumCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Copula collection accessor */ void setCopulaCollection(const CopulaCollection & coll); const CopulaCollection & getCopulaCollection() const; /** Bounds accessor */ void setBounds(const Point & bounds); const Point & getBounds() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual OrdinalSumCopula * clone() const; /** Get one realization of the OrdinalSumCopula */ Point getRealization() const; /** Get the DDF of the OrdinalSumCopula */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the OrdinalSumCopula */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the OrdinalSumCopula */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the Kendall concordance of the distribution */ CorrelationMatrix getKendallTau() const; /** Get the PDF gradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; virtual Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; virtual Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; virtual Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using CopulaImplementation::setParametersCollection; void setParametersCollection(const PointCollection & setParametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the isoprobabilistic transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilistic transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Find the block number of a given real wrt the bounds. Returns -1 if negative and -2 if greater than 1 */ SignedInteger findBlock(const Scalar x) const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Check if the given point is in the given block */ Bool isInBlock(const Point & point, const UnsignedInteger index) const; /** The collection of distribution of the ComposedCopula */ CopulaPersistentCollection copulaCollection_; /** Bounds of the ordinal sum */ Point bounds_; /** Lenghts of the blocks */ Point blockLengths_; /** Discrete distribution to select the component of the sum for sampling */ UserDefined blockDistribution_; }; /* class ComposedCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ORDINALSUMCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ParametrizedDistribution.hxx000066400000000000000000000126721307543307100315710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Parametrized distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PARAMETRIZEDDISTRIBUTION_HXX #define OPENTURNS_PARAMETRIZEDDISTRIBUTION_HXX #include "openturns/DistributionImplementation.hxx" #include "openturns/DistributionParameters.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ParametrizedDistribution * * A subclass for Parametrized distributions. */ class OT_API ParametrizedDistribution : public DistributionImplementation { CLASSNAME; public: /** Default constructor */ ParametrizedDistribution(); /** Constructor with parameter */ ParametrizedDistribution(const DistributionParameters & distParam); /** Virtual constructor */ virtual ParametrizedDistribution * clone() const; /** Comparison operator */ Bool operator ==(const ParametrizedDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** Get the DDF of the distribution */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; using DistributionImplementation::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeComplementaryCDF; virtual Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ using DistributionImplementation::computeQuantile; virtual Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product bilateral confidence interval containing a given probability of the distribution */ Interval computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product unilateral confidence interval containing a given probability of the distribution */ Interval computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ virtual Bool isElliptical() const; /** Check if the distribution is continuous */ virtual Bool isContinuous() const; /** Get the roughness, i.e. the L2-norm of the PDF */ virtual Scalar getRoughness() const; /** Get the mean of the distribution */ virtual Point getMean() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: DistributionParameters distributionParameters_; Distribution distribution_; }; /* class ParametrizedDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PARAMETRIZEDDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Poisson.hxx000066400000000000000000000102521307543307100261640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Poisson distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POISSON_HXX #define OPENTURNS_POISSON_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Poisson * * The Poisson distribution. */ class OT_API Poisson : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Poisson(); /** Parameters constructor */ explicit Poisson(const Scalar lambda); /** Comparison operator */ Bool operator ==(const Poisson & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Poisson * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using DiscreteDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Poisson */ /** Lambda accessor */ void setLambda(const Scalar lambda); Scalar getLambda() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The Lambda of the Poisson distribution */ Scalar lambda_; }; /* class Poisson */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POISSON_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/PoissonFactory.hxx000066400000000000000000000034441307543307100275210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Poisson distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POISSONFACTORY_HXX #define OPENTURNS_POISSONFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Poisson.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PoissonFactory */ class OT_API PoissonFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ PoissonFactory(); /** Virtual constructor */ virtual PoissonFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Poisson buildAsPoisson(const Sample & sample) const; Poisson buildAsPoisson(const Point & parameters) const; Poisson buildAsPoisson() const; }; /* class PoissonFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POISSONFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/PosteriorDistribution.hxx000066400000000000000000000102051307543307100311160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The PosteriorDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_POSTERIORDISTRIBUTION_HXX #define OPENTURNS_POSTERIORDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/ConditionalDistribution.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PosteriorDistribution * * The PosteriorDistribution distribution. */ class OT_API PosteriorDistribution : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ PosteriorDistribution(); /** Parameters constructor */ PosteriorDistribution(const ConditionalDistribution & conditionalDistribution, const Sample & observations); /** Comparison operator */ Bool operator ==(const PosteriorDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual PosteriorDistribution * clone() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using ContinuousDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /* Interface specific to PosteriorDistribution */ /** Conditional distribution accessor */ void setConditionalDistribution(const ConditionalDistribution & conditionalDistribution); ConditionalDistribution getConditionalDistribution() const; /** Observations accessor */ void setObservations(const Sample & observations); Sample getObservations() const; /** Log normalization factor accessor */ Scalar getLogNormalizationFactor() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Compute the likelihood of the observations */ Point computeLikelihood(const Point & theta) const; /** Compute the log-likelihood of the observations */ Point computeLogLikelihood(const Point & theta) const; protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** The underlying conditional distribution */ ConditionalDistribution conditionalDistribution_; /** The observations */ Sample observations_; /** The Bayes normalization constant */ Scalar logNormalizationFactor_; }; /* class PosteriorDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_POSTERIORDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ProductDistribution.hxx000066400000000000000000000216271307543307100305620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ProductDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PRODUCTDISTRIBUTION_HXX #define OPENTURNS_PRODUCTDISTRIBUTION_HXX #include "openturns/ContinuousDistribution.hxx" #include "openturns/Distribution.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProductDistribution * * The ProductDistribution distribution. */ class OT_API ProductDistribution : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ ProductDistribution(); /** Parameters constructor to use when the two bounds are finite */ ProductDistribution(const Distribution & left, const Distribution & right); /** Comparison operator */ Bool operator ==(const ProductDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual ProductDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; private: Scalar computePDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; public: /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; private: Scalar computeCDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computeCDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computeCDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computeCDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; public: /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to ProductDistribution */ /** Distribution accessor */ void setLeft(const Distribution & left); Distribution getLeft() const; /** Distribution accessor */ void setRight(const Distribution & right); Distribution getRight() const; /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Structure used to wrap the kernel of the integral defining the PDF of the product struct PDFKernelWrapper { const Distribution left_; const Distribution right_; const Scalar x_; const Bool isZero_; const Scalar pdf0_; PDFKernelWrapper(const Distribution & left, const Distribution & right, const Scalar x): left_(left), right_(right), x_(x), isZero_(std::abs(x) < ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")), pdf0_(isZero_ ? right.computePDF(0.0) : 0.0) {}; Point eval(const Point & point) const { const Scalar value = left_.computePDF(point); if (value == 0.0) return Point(1, 0.0); const Scalar u = point[0]; const Scalar absU = std::abs(u); // x_ == 0 if (isZero_) { if (pdf0_ == 0.0) return Point(1, 0.0); if (absU == 0.0) return Point(1, SpecFunc::MaxScalar); return Point(1, value * pdf0_ / absU); } // x_ != 0 if (absU == 0.0) { const Scalar epsilon = 1e-7; return Point(1, value * 0.5 * (right_.computePDF(x_ / epsilon) + right_.computePDF(-x_ / epsilon)) / epsilon); } return Point(1, value * right_.computePDF(x_ / u) / absU); }; }; // struct PDFKernelWrapper // Structure used to wrap the kernel of the integral defining the CDF of the product struct CDFKernelWrapper { const Distribution left_; const Distribution right_; const Scalar x_; const Bool isZero_; const Scalar cdf0_; const Scalar ccdf0_; CDFKernelWrapper(const Distribution & left, const Distribution & right, const Scalar x): left_(left), right_(right), x_(x), isZero_(std::abs(x) == 0.0), cdf0_(isZero_ ? right.computeCDF(0.0) : 0.0), ccdf0_(isZero_ ? right.computeComplementaryCDF(0.0) : 0.0) {}; Point eval(const Point & point) const { const Scalar value = left_.computePDF(point); if (value == 0.0) return Point(1, 0.0); // x_ == 0 if (isZero_) return Point(1, value * cdf0_); const Scalar u = point[0]; if (u == 0.0) return Point(1, x_ < 0.0 ? 0.0 : value); return Point(1, value * right_.computeCDF(x_ / u)); }; Point evalComplementary(const Point & point) const { const Scalar value = left_.computePDF(point); if (value == 0.0) return Point(1, 0.0); // x_ == 0 if (isZero_) return Point(1, value * ccdf0_); const Scalar u = point[0]; if (u == 0.0) return Point(1, x_ < 0.0 ? 0.0 : value); return Point(1, value * right_.computeComplementaryCDF(x_ / u)); }; }; // struct CDFKernelWrapper // Structure used to wrap the kernel of the integral defining the product struct CFKernelWrapper { const Distribution left_; const Distribution right_; const Scalar x_; CFKernelWrapper(const Distribution & left, const Distribution & right, const Scalar x): left_(left), right_(right), x_(x) {}; Point eval(const Point & point) const { Point value(2); const Scalar u = point[0]; const Complex phi(right_.computeCharacteristicFunction(u * x_)); const Scalar pdf = left_.computePDF(point); value[0] = pdf * phi.real(); value[1] = pdf * phi.imag(); return value; }; }; // struct CFKernelWrapper /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Distribution left_; Distribution right_; }; /* class ProductDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PRODUCTDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/RandomMixture.hxx000066400000000000000000000367321307543307100273430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements randomMixtures * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMMIXTURE_HXX #define OPENTURNS_RANDOMMIXTURE_HXX #include "openturns/Distribution.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Normal.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SphereUniformNorm.hxx" #include "openturns/Indices.hxx" #include "openturns/FFT.hxx" #include // std::numeric_limits BEGIN_NAMESPACE_OPENTURNS /** * @class RandomMixture * * The class describes the probabilistic concept of RandomMixture. */ class OT_API RandomMixture : public DistributionImplementation { CLASSNAME; public: typedef Collection DistributionCollection; typedef PersistentCollection DistributionPersistentCollection; typedef PersistentCollection ComplexPersistentCollection; typedef Collection DistributionFactoryCollection; /** Parameter constructor - 1D */ explicit RandomMixture(const DistributionCollection & coll, const Scalar constant = 0.0); /** Parameter constructor - 1D */ explicit RandomMixture(const DistributionCollection & coll, const Point & weights, const Scalar constant = 0.0); /** Parameter constructor - nD */ RandomMixture(const DistributionCollection & coll, const Matrix & weights, const Point constant); /** Parameter constructor - nD */ RandomMixture(const DistributionCollection & coll, const Matrix & weights); /** Parameter constructor - nD */ RandomMixture(const DistributionCollection & coll, const Sample & weights, const Point constant); /** Parameter constructor - nD */ RandomMixture(const DistributionCollection & coll, const Sample & weights); /** Comparison operator */ Bool operator ==(const RandomMixture & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Distribution collection accessor */ const DistributionCollection & getDistributionCollection() const; /** FFT algorithm accessor */ FFT getFFTAlgorithm() const; void setFFTAlgorithm(const FFT & fft); /** Constant accessor */ void setConstant(const Point & constant); Point getConstant() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual RandomMixture * clone() const; /** Get one realization of the RandomMixture */ Point getRealization() const; /** Get a sample of the RandomMixture */ Sample getSample(const UnsignedInteger size) const; protected: virtual Sample getSampleByQMC(const UnsignedInteger size) const; public: /** Get the DDF of the RandomMixture */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the RandomMixture */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Compute the PDF over a regular grid */ Sample computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /* Compute the PDF of over a regular grid */ Sample computePDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; protected: private: /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the characteristic function of 1D distributions by difference to a reference Normal distribution with the same mean and the same standard deviation in a regular pattern with cache */ Complex computeDeltaCharacteristicFunction(const UnsignedInteger index) const; /** Compute the characteristic function of nD distributions by difference to a reference Normal distribution with the same mean and the same covariance */ friend struct AddPDFOn1DGridPolicy; friend struct AddPDFOn2DGridPolicy; friend struct AddPDFOn3DGridPolicy; Complex computeDeltaCharacteristicFunction(const Point & x) const; /** Update cache of the characteristic function */ void updateCacheDeltaCharacteristicFunction(const Sample & points) const; /** Contribution to computePDF on a 1D grid */ void addPDFOn1DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const; /** Contribution to computePDF on a 2D grid */ void addPDFOn2DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const; /** Contribution to computePDF on a 3D grid */ void addPDFOn3DGrid(const Indices & pointNumber, const Point & h, const Point & tau, Sample & result) const; public: /** Get the CDF of the RandomMixture */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; using DistributionImplementation::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Compute the CDF over a regular grid */ Sample computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Compute the quantile over a regular grid */ using DistributionImplementation::computeQuantile; Sample computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail = false) const; /** Get the minimum volume level set containing a given probability of the distribution */ virtual LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ using DistributionImplementation::computeCharacteristicFunction; Complex computeCharacteristicFunction(const Scalar x) const; Complex computeCharacteristicFunction(const Point & x) const; using DistributionImplementation::computeLogCharacteristicFunction; Complex computeLogCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Point & x) const; /** Get the PDF gradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDF gradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Weights distribution accessor */ protected: void setWeights(const Matrix & weights); void setDistributionCollection(const DistributionCollection & coll); public: Matrix getWeights() const; /** Get a positon indicator for a 1D distribution */ Scalar getPositionIndicator() const; /** Get a dispersion indicator for a 1D distribution */ Scalar getDispersionIndicator() const; /** BlockMin accessor */ void setBlockMin(const UnsignedInteger blockMin); UnsignedInteger getBlockMin() const; /** BlockMax accessor */ void setBlockMax(const UnsignedInteger blockMax); UnsignedInteger getBlockMax() const; /** MaxSize accessor */ void setMaxSize(const UnsignedInteger maxSize); UnsignedInteger getMaxSize() const; /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Reference bandwidth accessor */ void setReferenceBandwidth(const Point & bandwidth); Point getReferenceBandwidth() const; /** PDF epsilon accessor. For other distributions, it is a read-only attribute. */ void setPDFPrecision(const Scalar pdfPrecision); /** CDF epsilon accessor. For other distributions, it is a read-only attribute. */ void setCDFPrecision(const Scalar cdfPrecision); /** Project a RandomMixture distribution over a collection of DistributionFactory by using sampling and Kolmogorov distance. */ DistributionCollection project(const DistributionFactoryCollection & factoryCollection, Point & kolmogorovNorm, const UnsignedInteger size = ResourceMap::GetAsUnsignedInteger( "RandomMixture-ProjectionDefaultSize" )) const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: class KolmogorovProjection { public: /** Constructor from a distribution and a data set */ KolmogorovProjection(const Sample & dataX, const Sample & dataY, const DistributionFactory & factory): dataX_(dataX), dataY_(dataY), factory_(factory) {}; /** Compute the Kolmogorov distance based on the given data, for a given parameter set */ Point computeNorm(const Point & parameters) const { Scalar norm = 0.0; try { const Distribution candidate(factory_.build(PointCollection(1, parameters))); for (UnsignedInteger i = 0; i < dataX_.getSize(); ++i) norm += std::pow(candidate.computeCDF(dataX_[i][0]) - dataY_[i][0], 2); return Point(1, norm); } catch(...) { return Point(1, SpecFunc::MaxScalar); } } /** factory accessor */ void setDistributionFactory(const DistributionFactory & factory) { factory_ = factory; } private: Sample dataX_; Sample dataY_; DistributionFactory factory_; }; protected: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Default constructor for save/load mechanism */ RandomMixture() {}; friend class Factory; /** Get the mean of a randomMixture */ void computeMean() const; /** Get the covariance of a randomMixture */ void computeCovariance() const; private: /** Compute the left-hand sum in Poisson's summation formula for the equivalent normal */ Scalar computeEquivalentNormalPDFSum(const Scalar x) const; Scalar computeEquivalentNormalCDFSum(const Scalar s, const Scalar t) const; friend struct EquivalentNormalPDFSumPolicy; Scalar computeEquivalentNormalPDFSum(const Point & y, const Point & gridStep, UnsignedInteger imax, UnsignedInteger & levelMax) const; public: /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; private: /** Compute the position indicator */ void computePositionIndicator() const; /** Compute the dispersion indicator */ void computeDispersionIndicator() const; /** Compute the reference bandwidth. It is defined as the maximum bandwidth that allow a precise computation of the PDF over the range [positionIndicator_ +/- beta * dispersionIndicator_] */ void computeReferenceBandwidth(); /** Compute the equivalent normal distribution, i.e. with the same mean and the same standard deviation */ void computeEquivalentNormal(); /** The collection of distribution of the randomMixture */ DistributionPersistentCollection distributionCollection_; /** The constant term of the mixture */ Point constant_; /** The Weight matrix */ Matrix weights_; /** inverse weight matrix if defined */ Matrix inverseWeights_; /** Determinant of inverse weights */ Scalar detWeightsInverse_; /** FFT algorithm */ FFT fftAlgorithm_; /** The RandomMixture is analytic if size of collection = dimension */ Bool isAnalytical_; /** Position indicator */ mutable Scalar positionIndicator_; mutable Bool isAlreadyComputedPositionIndicator_; /** Dispersion indicator */ mutable Scalar dispersionIndicator_; mutable Bool isAlreadyComputedDispersionIndicator_; /** Minimum number of blocks to consider for PDF and CDF computation */ UnsignedInteger blockMin_; /** Maximum number of blocks to consider for PDF and CDF computation */ UnsignedInteger blockMax_; /** Reference bandwidth */ Point referenceBandwidth_; /** Reference bandwidth factor */ Scalar referenceBandwidthFactor_; /** Maximum size of the cache for the CharacteristicFunction values */ UnsignedInteger maxSize_; /** Index of the top of the cache */ mutable UnsignedInteger storedSize_; /** Cache for the characteristic function values */ mutable ComplexPersistentCollection characteristicValuesCache_; /** A priori range of PDF and CDF argument expressed in dispersionIndicator units */ Scalar alpha_; /** Distance from the boundary of the a priori range at which the PDF is negligible */ Scalar beta_; /** Requested precision for PDF computation */ mutable Scalar pdfPrecision_; /** Requested precision for CDF computation */ mutable Scalar cdfPrecision_; /** Normal distribution with the same mean and standard deviation than the RandomMixture */ Normal equivalentNormal_; /** Helper object to retrieve points on a regular grid */ SphereUniformNorm gridMesher_; }; /* class RandomMixture */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMMIXTURE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/RatioDistribution.hxx000066400000000000000000000143431307543307100302150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The RatioDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RATIODISTRIBUTION_HXX #define OPENTURNS_RATIODISTRIBUTION_HXX #include "openturns/ContinuousDistribution.hxx" #include "openturns/Distribution.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RatioDistribution * * The RatioDistribution distribution. */ class OT_API RatioDistribution : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ RatioDistribution(); /** Parameters constructor to use when the two bounds are finite */ RatioDistribution(const Distribution & left, const Distribution & right); /** Comparison operator */ Bool operator ==(const RatioDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual RatioDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; private: Scalar computePDFQ1(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ2(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ3(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; Scalar computePDFQ4(const Scalar x, const Scalar a, const Scalar b, const Scalar c, const Scalar d) const; public: /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to RatioDistribution */ /** Distribution accessor */ void setLeft(const Distribution & left); Distribution getLeft() const; /** Distribution accessor */ void setRight(const Distribution & right); Distribution getRight() const; /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: // Structure used to wrap the kernel of the integral defining the ratio struct PDFKernelWrapper { PDFKernelWrapper(const Distribution & left, const Distribution & right, const Scalar x): left_(left), right_(right), x_(x), isZero_(std::abs(x) == 0.0), pdf0_(isZero_ ? right.computePDF(0.0) : 0.0) {}; // Compute |u|p_left(u)p_right(ux) where x is the argument of the pdf of left*right Point eval(const Point & point) const { const Scalar u = point[0]; const Scalar absU = std::abs(u); // First special case: |u|==0 if (absU == 0.0) return Point(1, 0.0); // Secon special case: x==0 if (isZero_) { if (pdf0_ == 0.0) return Point(1, 0.0); return Point(1, absU * pdf0_ * left_.computePDF(point)); } const Scalar value = left_.computePDF(point); // If the given point is outside of the support of left if (value == 0.0) return Point(1, 0.0); return Point(1, absU * right_.computePDF(u * x_) * value); }; const Distribution left_; const Distribution right_; const Scalar x_; const Bool isZero_; const Scalar pdf0_; }; // struct PDFKernelWrapper // Structure used to wrap the kernel of the integral defining the ratio struct CFKernelWrapper { CFKernelWrapper(const Distribution & left, const Distribution & right, const Scalar x): left_(left), right_(right), x_(x) {}; Point eval(const Point & point) const { Point value(2); const Scalar u = point[0]; const Complex phi(right_.computeCharacteristicFunction(u * x_)); const Scalar pdf = left_.computePDF(point); value[0] = pdf * phi.real(); value[1] = pdf * phi.imag(); return value; }; const Distribution left_; const Distribution right_; const Scalar x_; }; // struct CFKernelWrapper /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Distribution left_; Distribution right_; }; /* class RatioDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RATIODISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Rayleigh.hxx000066400000000000000000000113321307543307100262760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Rayleigh distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RAYLEIGH_HXX #define OPENTURNS_RAYLEIGH_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Rayleigh * * The Rayleigh distribution. */ class OT_API Rayleigh : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Rayleigh(); /** Parameters constructor */ explicit Rayleigh(const Scalar sigma, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const Rayleigh & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Rayleigh * clone() const; /** Get one realization of the Rayleigh distribution */ Point getRealization() const; /** Get the DDF of the distribution, i.e. the gradient of its PDF w.r.t. point */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution, i.e. P(point < X < point+dx) = PDF(point)dx + o(dx) */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point). If tail=true, compute P(X >= point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Rayleigh */ /** Sigma accessor */ void setSigma(const Scalar sigma); Scalar getSigma() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The dispersion parameter */ Scalar sigma_; /** The position parameter */ Scalar gamma_; }; /* class Rayleigh */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RAYLEIGH_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/RayleighFactory.hxx000066400000000000000000000034211307543307100276260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Rayleigh distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RAYLEIGHFACTORY_HXX #define OPENTURNS_RAYLEIGHFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Rayleigh.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RayleighFactory */ class OT_API RayleighFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ RayleighFactory(); /** Virtual constructor */ virtual RayleighFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Rayleigh buildAsRayleigh(const Sample & sample) const; Rayleigh buildAsRayleigh(const Point & parameters) const; Rayleigh buildAsRayleigh() const; }; /* class RayleighFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RAYLEIGHFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Rice.hxx000066400000000000000000000100451307543307100254140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Rice distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RICE_HXX #define OPENTURNS_RICE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Rice * * The Rice distribution. */ class OT_API Rice : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Rice(); /** Parameters constructor */ explicit Rice(const Scalar sigma, const Scalar nu = 0.0); /** Comparison operator */ Bool operator ==(const Rice & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Rice * clone() const; /** Get one realization of the Rice distribution */ Point getRealization() const; /** Get the PDF of the distribution, i.e. P(point < X < point+dx) = PDF(point)dx + o(dx) */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the logarithm of the PDF of the distribution */ using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point). If tail=true, compute P(X >= point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Rice */ /** Sigma accessor */ void setSigma(const Scalar sigma); Scalar getSigma() const; /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Maximum iterations accessor */ void setMaximumIteration(const UnsignedInteger maximumIteration); UnsignedInteger getMaximumIteration() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The dispersion parameter */ Scalar sigma_; /** The position parameter */ Scalar nu_; /** The maximum iterations for the PDF and CDF computations */ UnsignedInteger maximumIteration_; }; /* class Rice */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RICE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/RiceFactory.hxx000066400000000000000000000033211307543307100267430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Rice distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RICEFACTORY_HXX #define OPENTURNS_RICEFACTORY_HXX #include "openturns/Rice.hxx" #include "openturns/DistributionFactoryImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RiceFactory */ class OT_API RiceFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ RiceFactory(); /** Virtual constructor */ virtual RiceFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Rice buildAsRice(const Sample & sample) const; Rice buildAsRice(const Point & parameters) const; Rice buildAsRice() const; }; /* class RiceFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RICEFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Skellam.hxx000066400000000000000000000113141307543307100261220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Skellam distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SKELLAM_HXX #define OPENTURNS_SKELLAM_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Skellam * * The Skellam distribution. */ class OT_API Skellam : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ Skellam(); /** Parameters constructor */ Skellam(const Scalar lambda1, const Scalar lambda2); /** Comparison operator */ Bool operator ==(const Skellam & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Skellam * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the characteristic function, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Skellam */ /** Lambda1/Lambda2 accessor */ void setLambda1Lambda2(const Scalar lambda1, const Scalar lambda2); /** Lambda1 accessor */ void setLambda1(const Scalar lambda1); Scalar getLambda1() const; /** Lambda2 accessor */ void setLambda2(const Scalar lambda2); Scalar getLambda2() const; /** Maximum iterations accessor */ void setMaximumIteration(const UnsignedInteger maximumIteration); UnsignedInteger getMaximumIteration() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** The Lambda1 of the Skellam distribution */ Scalar lambda1_; /** The Lambda2 of the Skellam distribution */ Scalar lambda2_; /** The maximum iterations for the PDF and CDF computations */ UnsignedInteger maximumIteration_; }; /* class Skellam */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SKELLAM_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/SkellamFactory.hxx000066400000000000000000000036521307543307100274600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Skellam distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SKELLAMFACTORY_HXX #define OPENTURNS_SKELLAMFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Skellam.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SkellamFactory */ class OT_API SkellamFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ SkellamFactory(); /** Virtual constructor */ virtual SkellamFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; Skellam buildAsSkellam(const Sample & sample) const; Skellam buildAsSkellam(const Point & parameters) const; Skellam buildAsSkellam() const; }; /* class SkellamFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SKELLAMFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Student.hxx000066400000000000000000000143401307543307100261620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Student distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STUDENT_HXX #define OPENTURNS_STUDENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/EllipticalDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Student * * The Student distribution. */ class OT_API Student : public EllipticalDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ explicit Student(const Scalar nu = 3.0, const UnsignedInteger dimension = 1); /** Parameters constructor */ Student(const Scalar nu, const Scalar mu, const Scalar sigma = 1.0); /** Parameters constructor */ Student(const Scalar nu, const Point & mu, const Point & sigma, const CorrelationMatrix & R); /** Comparison operator */ Bool operator ==(const Student & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Student * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the CDF of the distribution */ using EllipticalDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the PDFGradient of the distribution */ using EllipticalDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using EllipticalDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the radial distribution CDF */ Scalar computeRadialDistributionCDF(const Scalar radius, const Bool tail = false) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using DistributionImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Get the mean of the distribution */ Point getMean() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the covariance of the distribution */ CovarianceMatrix getCovariance() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using EllipticalDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessor */ Point getParameter() const; void setParameter(const Point & parameter); /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /* Interface specific to Student */ /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Compute the density generator of the ellipticalal generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R^(-1)(x-mu)) */ Scalar computeDensityGenerator(const Scalar betaSquare) const; /** Compute the derivative of the density generator */ Scalar computeDensityGeneratorDerivative(const Scalar betaSquare) const; /** Compute the seconde derivative of the density generator */ Scalar computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The nu of the Student distribution */ Scalar nu_; /** Specific normalization factor for the Student distribution */ Scalar studentNormalizationFactor_; }; /* class Student */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STUDENT_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/StudentFactory.hxx000066400000000000000000000036501307543307100275140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Student distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STUDENTFACTORY_HXX #define OPENTURNS_STUDENTFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Student.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StudentFactory */ class OT_API StudentFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ StudentFactory(); /** Virtual constructor */ virtual StudentFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameter) const; Implementation build() const; using DistributionFactoryImplementation::buildEstimator; DistributionFactoryResult buildEstimator(const Sample & sample) const; Student buildAsStudent(const Sample & sample) const; Student buildAsStudent(const Point & parameter) const; Student buildAsStudent() const; }; /* class StudentFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STUDENTFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/StudentFunctions.hxx000066400000000000000000000057671307543307100300700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Efficient implementation of the computation of the Student T * CDF and quantile * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STUDENTFUNCTIONS_HXX #define OPENTURNS_STUDENTFUNCTIONS_HXX #include "openturns/OTprivate.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS namespace StudentFunctions { Scalar StudentCDF(const Scalar nu, const Scalar x, const Bool tail = false); Scalar StudentQuantile(const Scalar nu, const Scalar p, const Bool tail = false); Scalar StudentRealization(const Scalar nu); Scalar NonCentralStudentCDF(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail = false); Scalar NonCentralStudentCDFAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail = false, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision"), const UnsignedInteger maximumIteration = ResourceMap::GetAsScalar("DistFunc-MaximumIteration")); Scalar NonCentralStudentCDFAlt1(const Scalar nu, const Scalar delta, const Scalar x, const Bool tail = false, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision")); Scalar NonCentralStudentPDF(const Scalar nu, const Scalar delta, const Scalar x); Scalar NonCentralStudentPDFAlt0(const Scalar nu, const Scalar delta, const Scalar x, const Scalar precision = ResourceMap::GetAsScalar("DistFunc-Precision"), const UnsignedInteger maximumIteration = ResourceMap::GetAsScalar("DistFunc-MaximumIteration")); Scalar NonCentralStudentRealization(const Scalar nu, const Scalar delta); } // StudentFunctions END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STUDENTFUNCTIONS_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/SubSquareCopula.hxx000066400000000000000000000073271307543307100276210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class that implements a SubSquare copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SUBSQUARECOPULA_HXX #define OPENTURNS_SUBSQUARECOPULA_HXX #include "openturns/CopulaImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SubSquareCopula * * The class implements a subSquare copula */ class OT_API SubSquareCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ SubSquareCopula(); /** Default constructor */ explicit SubSquareCopula(const Function & phi); /** Comparison operator */ Bool operator ==(const SubSquareCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual SubSquareCopula * clone() const; /** Get one realization of the SubSquareCopula distribution */ Point getRealization() const; /** Get the PDF of the SubSquareCopula distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the SubSquareCopula distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Phi accessors */ void setPhi(const Function & phi); Function getPhi() const; /** Mass accessor */ Scalar getMass(); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: // Compute the mass associated to phi void computeMass() const; // SubSquare copula parameter Function phi_; // Flag to tell if phi is zero Bool nullPhi_; // Mass Scalar mass_; }; /* class SubSquareCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SUBSQUARECOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TracyWidomGOE.hxx000066400000000000000000000062471307543307100271600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGOE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRACYWIDOMGOE_HXX #define OPENTURNS_TRACYWIDOMGOE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TracyWidomGOE * * The TracyWidomGOE distribution. */ class OT_API TracyWidomGOE : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ TracyWidomGOE(); /** Comparison operator */ Bool operator ==(const TracyWidomGOE & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual TracyWidomGOE * clone() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; }; /* class TracyWidomGOE */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRACYWIDOMGOE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TracyWidomGSE.hxx000066400000000000000000000062471307543307100271640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGSE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRACYWIDOMGSE_HXX #define OPENTURNS_TRACYWIDOMGSE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TracyWidomGSE * * The TracyWidomGSE distribution. */ class OT_API TracyWidomGSE : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ TracyWidomGSE(); /** Comparison operator */ Bool operator ==(const TracyWidomGSE & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual TracyWidomGSE * clone() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; }; /* class TracyWidomGSE */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRACYWIDOMGSE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TracyWidomGUE.hxx000066400000000000000000000062471307543307100271660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TracyWidomGUE distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRACYWIDOMGUE_HXX #define OPENTURNS_TRACYWIDOMGUE_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TracyWidomGUE * * The TracyWidomGUE distribution. */ class OT_API TracyWidomGUE : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ TracyWidomGUE(); /** Comparison operator */ Bool operator ==(const TracyWidomGUE & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual TracyWidomGUE * clone() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; }; /* class TracyWidomGUE */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRACYWIDOMGUE_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Trapezoidal.hxx000066400000000000000000000124721307543307100270160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Trapezoidal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRAPEZOIDAL_HXX #define OPENTURNS_TRAPEZOIDAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Trapezoidal * * The Trapezoidal distribution. */ class OT_API Trapezoidal : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Trapezoidal(); /** Parameters constructor */ Trapezoidal(const Scalar a, const Scalar b, const Scalar c, const Scalar d); /** Comparison operator */ Bool operator ==(const Trapezoidal & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Trapezoidal * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution, i.e. the gradient of its PDF w.r.t. point */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the logPDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeLogPDFGradient; Point computeLogPDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Trapezoidal */ /** A accessor */ void setA(const Scalar a); Scalar getA() const; /** B accessor */ void setB(const Scalar b); Scalar getB() const; /** C accessor */ void setC(const Scalar c); Scalar getC() const; /** D accessor */ void setD(const Scalar d); Scalar getD() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update attributes */ void update(); /** Sigma accessor */ Scalar getSigma() const; /** The main parameter set of the distribution */ Scalar a_; Scalar b_; Scalar c_; Scalar d_; Scalar h_; }; /* class Trapezoidal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRAPEZOIDAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TrapezoidalFactory.hxx000066400000000000000000000051051307543307100303410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Trapezoidal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRAPEZOIDALFACTORY_HXX #define OPENTURNS_TRAPEZOIDALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Trapezoidal.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TrapezoidalFactory */ class OT_API TrapezoidalFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ TrapezoidalFactory(); /** Virtual constructor */ TrapezoidalFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build( const Sample & sample ) const; Implementation build(const Point & parameters) const; Implementation build() const; Trapezoidal buildAsTrapezoidal( const Sample & sample ) const; Trapezoidal buildAsTrapezoidal(const Point & parameters) const; Trapezoidal buildAsTrapezoidal() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Likelihood constraint accessor */ Function getLogLikelihoodInequalityConstraint() const; /** likelihood estimate */ Point computeLogLikelihoodInequalityConstraint( const Point & x ) const; /** only used to pass data to be used in computeLogLikeliHood */ mutable Sample sample_; /** OptimizationAlgorithm */ mutable OptimizationAlgorithm solver_; }; /* class TrapezoidalFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRAPEZOIDALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Triangular.hxx000066400000000000000000000115471307543307100266520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Triangular distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRIANGULAR_HXX #define OPENTURNS_TRIANGULAR_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Triangular * * The Triangular distribution. */ class OT_API Triangular : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Triangular(); /** Parameters constructor */ Triangular(const Scalar a, const Scalar m, const Scalar b); /** Comparison operator */ Bool operator ==(const Triangular & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Triangular * clone() const; /** Get one realization of the Triangular distribution */ Point getRealization() const; /** Get the DDF of the Triangular distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the Triangular distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the Triangular distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the Triangular distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the Triangular distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Triangular */ /** A accessor */ void setAMB(const Scalar a, const Scalar m, const Scalar b); Scalar getA() const; /** M accessor */ Scalar getM() const; /** B accessor */ Scalar getB() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the Triangular distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar a_; Scalar m_; Scalar b_; }; /* class Triangular */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRIANGULAR_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TriangularFactory.hxx000066400000000000000000000035241307543307100301760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Triangular distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRIANGULARFACTORY_HXX #define OPENTURNS_TRIANGULARFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Triangular.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TriangularFactory */ class OT_API TriangularFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ TriangularFactory(); /** Virtual constructor */ virtual TriangularFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Triangular buildAsTriangular(const Sample & sample) const; Triangular buildAsTriangular(const Point & parameters) const; Triangular buildAsTriangular() const; }; /* class TriangularFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRIANGULARFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TruncatedDistribution.hxx000066400000000000000000000143651307543307100310740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TruncatedDistribution distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRUNCATEDDISTRIBUTION_HXX #define OPENTURNS_TRUNCATEDDISTRIBUTION_HXX #include "openturns/DistributionImplementation.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TruncatedDistribution * * The TruncatedDistribution distribution. */ class OT_API TruncatedDistribution : public DistributionImplementation { CLASSNAME; public: enum BoundSide { LOWER, UPPER }; /** Default constructor */ TruncatedDistribution(); /** Parameters constructor to use when the two bounds are finite */ TruncatedDistribution(const Distribution & distribution, const Scalar lowerBound, const Scalar upperBound, const Scalar thresholdRealization = ResourceMap::GetAsScalar("TruncatedDistribution-DefaultThresholdRealization")); /** Parameters constructor to use when one of the bounds is not finite */ TruncatedDistribution(const Distribution & distribution, const Scalar bound, const BoundSide side = LOWER, const Scalar thresholdRealization = ResourceMap::GetAsScalar("TruncatedDistribution-DefaultThresholdRealization")); /** Parameters constructor to use when the two bounds are finite */ TruncatedDistribution(const Distribution & distribution, const Interval & truncationInterval, const Scalar thresholdRealization = ResourceMap::GetAsScalar("TruncatedDistribution-DefaultThresholdRealization")); /** Comparison operator */ using DistributionImplementation::operator ==; Bool operator ==(const TruncatedDistribution & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual TruncatedDistribution * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; using DistributionImplementation::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DistributionImplementation::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DistributionImplementation::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to TruncatedDistribution */ /** Distribution accessor */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Lower bound accessor */ void setLowerBound(const Scalar lowerBound); Scalar getLowerBound() const; /** Lower bound finite flag accessor */ void setFiniteLowerBound(const Bool finiteLowerBound); Bool getFiniteLowerBound() const; /** Upper bound accessor */ void setUpperBound(const Scalar upperBound); Scalar getUpperBound() const; /** Upper bound finite flag accessor */ void setFiniteUpperBound(const Bool finiteUpperBound); Bool getFiniteUpperBound() const; /** Threshold realization accessor */ void setThresholdRealization(const Scalar thresholdRealization); Scalar getThresholdRealization() const; /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Get the support of a distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Distribution distribution_; Scalar lowerBound_; Bool finiteLowerBound_; Scalar upperBound_; Bool finiteUpperBound_; Scalar thresholdRealization_; /** Usefull quantities */ Scalar pdfLowerBound_; Scalar pdfUpperBound_; Scalar cdfLowerBound_; Scalar cdfUpperBound_; Scalar normalizationFactor_; }; /* class TruncatedDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRUNCATEDDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TruncatedNormal.hxx000066400000000000000000000135171307543307100276430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The TruncatedNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRUNCATEDNORMAL_HXX #define OPENTURNS_TRUNCATEDNORMAL_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TruncatedNormal * * The TruncatedNormal distribution. */ class OT_API TruncatedNormal : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ TruncatedNormal(); /** Parameters constructor */ TruncatedNormal(const Scalar mu, const Scalar sigma, const Scalar a, const Scalar b); /** Comparison operator */ Bool operator ==(const TruncatedNormal & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual TruncatedNormal * clone() const; /** Get one realization of the TruncatedNormal distribution */ Point getRealization() const; /** Get the DDF of the TruncatedNormal distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the TruncatedNormal distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the logarithm of the PDF of the TruncatedNormal distribution */ using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the TruncatedNormal distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the TruncatedNormal distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the LogPDFGradient of the TruncatedNormal distribution */ using ContinuousDistribution::computeLogPDFGradient; Point computeLogPDFGradient(const Point & point) const; /** Get the CDFGradient of the TruncatedNormal distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to TruncatedNormal */ /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Sigma accessor */ void setSigma(const Scalar sigma); Scalar getSigma() const; /** A accessor */ void setA(const Scalar a); Scalar getA() const; /** B accessor */ void setB(const Scalar b); Scalar getB() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the TruncatedNormal distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; Scalar a_; Scalar b_; /** Usefull quantities */ Scalar aNorm_; Scalar bNorm_; Scalar phiANorm_; Scalar phiBNorm_; Scalar PhiANorm_; Scalar PhiBNorm_; Scalar normalizationFactor_; }; /* class TruncatedNormal */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRUNCATEDNORMAL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/TruncatedNormalFactory.hxx000066400000000000000000000045241307543307100311710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for TruncatedNormal distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_TRUNCATEDNORMALFACTORY_HXX #define OPENTURNS_TRUNCATEDNORMALFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/TruncatedNormal.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class TruncatedNormalFactory */ class OT_API TruncatedNormalFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ TruncatedNormalFactory(); /** Virtual constructor */ TruncatedNormalFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; TruncatedNormal buildAsTruncatedNormal(const Sample & sample) const; TruncatedNormal buildAsTruncatedNormal(const Point & parameters) const; TruncatedNormal buildAsTruncatedNormal() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; }; /* class TruncatedNormalFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_TRUNCATEDNORMALFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Uniform.hxx000066400000000000000000000127551307543307100261630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Uniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIFORM_HXX #define OPENTURNS_UNIFORM_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Uniform * * The Uniform distribution. */ class OT_API Uniform : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Uniform(); /** Parameters constructor */ Uniform(const Scalar a, const Scalar b); /** Comparison operator */ using DistributionImplementation::operator ==; Bool operator ==(const Uniform & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Uniform * clone() const; /** Get one realization of the distribution */ Point getRealization() const; Sample getSample(const UnsignedInteger size) const; /** Get the DDF of the distribution, i.e. the gradient of its PDF w.r.t. point */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution, i.e. P(point < X < point+dx) = PDF(point)dx + o(dx) */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product bilateral confidence interval containing a given probability of the distribution */ Interval computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to Uniform */ /** A accessor */ void setA(const Scalar a); Scalar getA() const; /** B accessor */ void setB(const Scalar b); Scalar getB() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar a_; Scalar b_; }; /* class Uniform */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIFORM_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/UniformFactory.hxx000066400000000000000000000034341307543307100275050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Uniform distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_UNIFORMFACTORY_HXX #define OPENTURNS_UNIFORMFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Uniform.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UniformFactory */ class OT_API UniformFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ UniformFactory(); /** Virtual constructor */ UniformFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Uniform buildAsUniform(const Sample & sample) const; Uniform buildAsUniform(const Point & parameters) const; Uniform buildAsUniform() const; }; /* class UniformFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_UNIFORMFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/UserDefined.hxx000066400000000000000000000115361307543307100267350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The UserDefined distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USERDEFINED_HXX #define OPENTURNS_USERDEFINED_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Indices.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UserDefined * * The UserDefined distribution. */ class OT_API UserDefined : public DiscreteDistribution { CLASSNAME; public: /** Default constructor */ UserDefined(); /** Constructor from a sample */ explicit UserDefined(const Sample & points); /** Constructor from a sample and associated weights */ UserDefined(const Sample & points, const Point & weights); /** Comparison operator */ Bool operator ==(const UserDefined & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual UserDefined * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the PDFGradient of the distribution */ using DiscreteDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ using DiscreteDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Parameters value accessors */ Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to UserDefined */ /** Data accessors */ void setData(const Sample & points, const Point & weights); Sample getX() const; Point getP() const; /** Get the i-th marginal distribution */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Implementation getMarginal(const Indices & indices) const; /** Merge the identical points of the support */ void compactSupport(const Scalar epsilon = ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon")); /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Quantile computation for dimension=1 */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** The collection of couple (xi, pi) */ Sample points_; Point probabilities_; /** The cumulative probabilities si = sum(pk, k=0..i) */ Point cumulativeProbabilities_; /** Flag to accelerate computations in case of uniform weights */ Bool hasUniformWeights_; }; /* class UserDefined */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USERDEFINED_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/UserDefinedFactory.hxx000066400000000000000000000036121307543307100302610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for UserDefined distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USERDEFINEDFACTORY_HXX #define OPENTURNS_USERDEFINEDFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/UserDefined.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UserDefinedFactory */ class OT_API UserDefinedFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ UserDefinedFactory(); /** Virtual constructor */ virtual UserDefinedFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Sample & sample, const Scalar epsilon) const; Implementation build() const; UserDefined buildAsUserDefined(const Sample & sample, const Scalar epsilon = 0.0) const; UserDefined buildAsUserDefined() const; }; /* class UserDefinedFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USERDEFINEDFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/VonMises.hxx000066400000000000000000000064531307543307100263050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The VonMises distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_VONMISES_HXX #define OPENTURNS_VONMISES_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class VonMises * * The VonMises distribution. */ class OT_API VonMises : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ VonMises(); /** Parameters constructor */ explicit VonMises(const Scalar mu, const Scalar kappa); /** Comparison operator */ using DistributionImplementation::operator ==; Bool operator ==(const VonMises & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual VonMises * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to VonMises */ /** Mu accessor */ void setMu(const Scalar mu); Scalar getMu() const; /** Kappa accessor */ void setKappa(const Scalar kappa); Scalar getKappa() const; /** Circular moments accessor */ Scalar getCircularMean() const; Scalar getCircularVariance() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the derivative attributes */ void update(); /** The main parameter set of the distribution */ Scalar mu_; Scalar kappa_; Scalar normalizationFactor_; Scalar ratioOfUniformsBound_; }; /* class VonMises */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_VONMISES_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Weibull.hxx000066400000000000000000000121441307543307100261370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Weibull distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WEIBULL_HXX #define OPENTURNS_WEIBULL_HXX #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Weibull * * The Weibull distribution. */ class OT_API Weibull : public ContinuousDistribution { CLASSNAME; public: typedef Pointer Implementation; /** Default constructor */ Weibull(); /** Parameters constructor */ Weibull(const Scalar alpha, const Scalar beta, const Scalar gamma = 0.0); /** Comparison operator */ Bool operator ==(const Weibull & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Weibull * clone() const; /** Get one realization of the Weibull distribution */ Point getRealization() const; /** Get the DDF of the distribution, i.e. the gradient of its PDF w.r.t. point */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution, i.e. P(point < X < point+dx) = PDF(point)dx + o(dx) */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution, i.e. P(X <= point) = CDF(point). If tail=true, compute P(X >= point) */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; using ContinuousDistribution::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the gradient of the PDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Get the gradient of the CDF w.r.t the parameters of the distribution */ using ContinuousDistribution::computeCDFGradient; Point computeCDFGradient(const Point & point) const; protected: /** Set simultaneously alpha and beta to factorize the call to computeRange() */ void setAlphaBeta(const Scalar alpha, const Scalar beta); public: /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the standard representative in the parametric family, associated with the standard moments */ Implementation getStandardRepresentative() const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Weibull */ /** Beta accessor */ void setBeta(const Scalar beta); Scalar getBeta() const; /** Alpha accessor */ void setAlpha(const Scalar alpha); Scalar getAlpha() const; /** Gamma accessor */ void setGamma(const Scalar gamma); Scalar getGamma() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Get the quantile of the distribution, i.e the value Xp such that P(X <= Xp) = prob */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The main parameter set of the distribution */ Scalar alpha_; Scalar beta_; Scalar gamma_; }; /* class Weibull */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WEIBULL_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/WeibullFactory.hxx000066400000000000000000000034451307543307100274730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Factory for Weibull distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WEIBULLFACTORY_HXX #define OPENTURNS_WEIBULLFACTORY_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Weibull.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WeibullFactory */ class OT_API WeibullFactory : public DistributionFactoryImplementation { CLASSNAME; public: /** Default constructor */ WeibullFactory(); /** Virtual constructor */ virtual WeibullFactory * clone() const; /* Here is the interface that all derived class must implement */ using DistributionFactoryImplementation::build; Implementation build(const Sample & sample) const; Implementation build(const Point & parameters) const; Implementation build() const; Weibull buildAsWeibull(const Sample & sample) const; Weibull buildAsWeibull(const Point & parameters) const; Weibull buildAsWeibull() const; }; /* class WeibullFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WEIBULLFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/WeibullMuSigma.hxx000066400000000000000000000043541307543307100274260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Weibull distribution with mu and sigma as parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WEIBULLMUSIGMA_HXX #define OPENTURNS_WEIBULLMUSIGMA_HXX #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WeibullMuSigma * */ class OT_API WeibullMuSigma : public DistributionParametersImplementation { CLASSNAME; public: /** Default constructor */ WeibullMuSigma(); /** Constructor with parameters */ WeibullMuSigma(const Scalar mu, const Scalar sigma, const Scalar gamma = 0.); /** Virtual constructor */ virtual WeibullMuSigma * clone() const; /** Comparison operator */ Bool operator ==(const WeibullMuSigma & other) const; /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; private: /** The main parameter set of the distribution */ Scalar mu_; Scalar sigma_; Scalar gamma_; }; /* class WeibullMuSigma */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WEIBULLMUSIGMA_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/Wishart.hxx000066400000000000000000000075421307543307100261630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The Wishart distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WISHART_HXX #define OPENTURNS_WISHART_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/TriangularMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Wishart * * The Wishart distribution. */ class OT_API Wishart : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ Wishart(); /** Parameters constructor */ Wishart(const CovarianceMatrix & v, const Scalar nu); /** Comparison operator */ Bool operator ==(const Wishart & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual Wishart * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get one realization of the distribution as a covariance matrix */ CovarianceMatrix getRealizationAsMatrix() const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; Scalar computePDF(const CovarianceMatrix & m) const; using ContinuousDistribution::computeLogPDF; Scalar computeLogPDF(const Point & point) const; Scalar computeLogPDF(const CovarianceMatrix & m) const; /** Get the CDF of the distribution */ using ContinuousDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using ContinuousDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /* Interface specific to Wishart */ /** V accessor */ void setV(const CovarianceMatrix & v); CovarianceMatrix getV() const; /** Nu accessor */ void setNu(const Scalar nu); Scalar getNu() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: private: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** Update the normalization factor on a log scale */ void update(); /** The main parameter set of the distribution */ mutable TriangularMatrix cholesky_; Scalar nu_; /** The log-normalization factor */ Scalar logNormalizationFactor_; }; /* class Wishart */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WISHART_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/openturns/ZipfMandelbrot.hxx000066400000000000000000000104501307543307100274520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The ZipfMandelbrot distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ZIPFMANDELBROT_HXX #define OPENTURNS_ZIPFMANDELBROT_HXX #include "openturns/OTprivate.hxx" #include "openturns/DiscreteDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ZipfMandelbrot * * The ZipfMandelbrot distribution. */ class OT_API ZipfMandelbrot : public DiscreteDistribution { CLASSNAME; public: typedef Collection ScalarCollection; /** Default constructor */ ZipfMandelbrot(); /** Parameters constructor */ ZipfMandelbrot(const UnsignedInteger n, const Scalar q, const Scalar s); /** Comparison operator */ using DistributionImplementation::operator ==; Bool operator ==(const ZipfMandelbrot & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual ZipfMandelbrot * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the PDF of the distribution */ using DiscreteDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DiscreteDistribution::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /* Interface specific to ZipfMandelbrot */ /** Q accessor */ void setQ(const Scalar q); Scalar getQ() const; /** S accessor */ void setS(const Scalar s); Scalar getS() const; /** N accessor */ void setN(const UnsignedInteger n); UnsignedInteger getN() const; /** Get the support of a discrete distribution that intersect a given interval */ using DistributionImplementation::getSupport; Sample getSupport(const Interval & interval) const; /** Parameters value accessors */ void setParameter(const Point & parameter); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* Compute generalized harmonic numbers */ Scalar getHarmonicNumbers(UnsignedInteger const) const; void computeHarmonicNumbers(); ScalarCollection harmonicNumbers_; private: /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; /** Compute the numerical range of the distribution given the parameters values */ void computeRange(); /** The maximum value of the ZipfMandelbrot distribution */ UnsignedInteger n_; /** The q probability parameter of the ZipfMandelbrot distribution */ Scalar q_; /** The s probability parameter of the ZipfMandelbrot distribution */ Scalar s_; }; /* class ZipfMandelbrot */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ZIPFMANDELBROT_HXX */ openturns-1.9/lib/src/Uncertainty/Distribution/poissinv_cpu.h000066400000000000000000000325501307543307100246430ustar00rootroot00000000000000/* This software was written by Mike Giles, copyright University of Oxford, and is provided under the terms of the GNU GPLv3 license: http://www.gnu.org/licenses/gpl.html Commercial users who would like to use the software under a more permissive license, such as BSD, should contact the author: mike.giles@maths.ox.ac.uk The code below requires the functions: erfc defined in the GCC math library erfcinv defined in the next header file Used in OpenTURNS with the written permission of the Author, see COPYING.poissinv. */ #ifndef POISSINV_H #define POISSINV_H #ifdef __cplusplus extern "C" { #endif /* Replace the initial implementation of erfinv by some OpenTURNS equivalent */ // #include #include "openturns/DistFunc.hxx" // // This double precision function computes the inverse // of the Poisson CDF using the vector algorithm // // u = CDF value in range (0,1) // lam = Poisson rate // // For lam < 1e15, max |error| no more than 1 // ave |error| < 1e-16*max(4,lam) for lam < 1e9 // < 1e-6 for lam < 1e15 // // For lam > 1e15, the errors will be about 1 ulp. // inline double poissinv_vector(double U, double Lam) { int i; double X=0.0, Xi, T, Del, Rm, R, R2, S, S2, Eta, B0, B1; // large lam if (Lam > 4.0) { S = OT::DistFunc::qNormal(U)/sqrt(Lam); // S = - sqrt(2.0)*erfcinv(2.0*U)/sqrt(Lam); Del = 2.0e-6; // use polynomial approximations in central region if ( (S>-0.6833501) && (S<1.777993) ) {; // polynomial approximation to f^{-1}(s) - 1 Rm = 2.82298751e-07; Rm = -2.58136133e-06 + Rm*S; Rm = 1.02118025e-05 + Rm*S; Rm = -2.37996199e-05 + Rm*S; Rm = 4.05347462e-05 + Rm*S; Rm = -6.63730967e-05 + Rm*S; Rm = 0.000124762566 + Rm*S; Rm = -0.000256970731 + Rm*S; Rm = 0.000558953132 + Rm*S; Rm = -0.00133129194 + Rm*S; Rm = 0.00370367937 + Rm*S; Rm = -0.0138888706 + Rm*S; Rm = 0.166666667 + Rm*S; S += S*(Rm*S); Rm = S; // polynomial approximation to correction c0(r) T = 1.86386867e-05; T = -0.000207319499 + T*Rm; T = 0.0009689451 + T*Rm; T = -0.00247340054 + T*Rm; T = 0.00379952985 + T*Rm; T = -0.00386717047 + T*Rm; T = 0.00346960934 + T*Rm; T = -0.00414125511 + T*Rm; T = 0.00586752093 + T*Rm; T = -0.00838583787 + T*Rm; T = 0.0132793933 + T*Rm; T = -0.027775536 + T*Rm; T = 0.333333333 + T*Rm; // O(1/lam) correction X = -0.00014585224; X = 0.00146121529 + X*Rm; X = -0.00610328845 + X*Rm; X = 0.0138117964 + X*Rm; X = -0.0186988746 + X*Rm; X = 0.0168155118 + X*Rm; X = -0.013394797 + X*Rm; X = 0.0135698573 + X*Rm; X = -0.0155377333 + X*Rm; X = 0.0174065334 + X*Rm; X = -0.0198011178 + X*Rm; X = X / Lam; // sum from smallest to largest to minimise rounding error // rounding down final sum is important S = Lam + (((X+Del)+T)+Lam*S); } // otherwise use Newton iteration else if (S > -sqrt(2.0)) { R = 1.0 + S; if (R<0.1) R = 0.1; do { T = log(R); R2 = R; S2 = sqrt(2.0*(1.0 - R + R*T)); if (R<1.0) S2 = -S2; R = R2 - (S2-S)*S2/T; if (R<0.1*R2) R = 0.1*R2; } while (fabs(R-R2)>1e-5); T = log(R); S = Lam*R + log(sqrt(2.0*R*(1.0-R+R*T))/fabs(R-1.0)) / T; S = S - (8.2/405.0)/(S+0.025*Lam); Del = 0.01/S; S = S + Del; } // if x>10, round down to nearest integer, and check accuracy X = floor(S); if (S>10.0 && S0.5*Lam && X<2.0*Lam) { Xi = 1.0 / X; Eta = X / Lam; Eta = sqrt(2.0*(1.0-Eta+Eta*log(Eta))/Eta); if (X>Lam) Eta = -Eta; B1 = 8.0995211567045583e-16; S = B1; B0 = -1.9752288294349411e-15; S = B0 + S*Eta; B1 = -5.1391118342426808e-16 + 25.0*B1*Xi; S = B1 + S*Eta; B0 = 2.8534893807047458e-14 + 24.0*B0*Xi; S = B0 + S*Eta; B1 = -1.3923887224181616e-13 + 23.0*B1*Xi; S = B1 + S*Eta; B0 = 3.3717632624009806e-13 + 22.0*B0*Xi; S = B0 + S*Eta; B1 = 1.1004392031956284e-13 + 21.0*B1*Xi; S = B1 + S*Eta; B0 = -5.0276692801141763e-12 + 20.0*B0*Xi; S = B0 + S*Eta; B1 = 2.4361948020667402e-11 + 19.0*B1*Xi; S = B1 + S*Eta; B0 = -5.8307721325504166e-11 + 18.0*B0*Xi; S = B0 + S*Eta; B1 = -2.5514193994946487e-11 + 17.0*B1*Xi; S = B1 + S*Eta; B0 = 9.1476995822367933e-10 + 16.0*B0*Xi; S = B0 + S*Eta; B1 = -4.3820360184533521e-09 + 15.0*B1*Xi; S = B1 + S*Eta; B0 = 1.0261809784240299e-08 + 14.0*B0*Xi; S = B0 + S*Eta; B1 = 6.7078535434015332e-09 + 13.0*B1*Xi; S = B1 + S*Eta; B0 = -1.7665952736826086e-07 + 12.0*B0*Xi; S = B0 + S*Eta; B1 = 8.2967113409530833e-07 + 11.0*B1*Xi; S = B1 + S*Eta; B0 = -1.8540622107151585e-06 + 10.0*B0*Xi; S = B0 + S*Eta; B1 = -2.1854485106799979e-06 + 9.0*B1*Xi; S = B1 + S*Eta; B0 = 3.9192631785224383e-05 + 8.0*B0*Xi; S = B0 + S*Eta; B1 = -0.00017875514403292177 + 7.0*B1*Xi; S = B1 + S*Eta; B0 = 0.00035273368606701921 + 6.0*B0*Xi; S = B0 + S*Eta; B1 = 0.0011574074074074078 + 5.0*B1*Xi; S = B1 + S*Eta; B0 = -0.014814814814814815 + 4.0*B0*Xi; S = B0 + S*Eta; B1 = 0.083333333333333329 + 3.0*B1*Xi; S = B1 + S*Eta; B0 = -0.33333333333333331 + 2.0*B0*Xi; S = B0 + S*Eta; S = S / (1.0 + B1*Xi); S = S*exp(-0.5*X*Eta*Eta)/sqrt(2.0*3.141592653589793*X); if (X U) X -= 1.0; } else { S -= 0.5*erfc(-Eta*sqrt(0.5*X)); if (S > U-1.0) X -= 1.0; } } // sum downwards or upwards else { Xi = 1.0 / X; S = - (691.0/360360.0); S = (1.0/1188.0) + S*Xi*Xi; S = - (1.0/1680.0) + S*Xi*Xi; S = (1.0/1260.0) + S*Xi*Xi; S = - (1.0/360.0) + S*Xi*Xi; S = (1.0/12.0) + S*Xi*Xi; S = S*Xi; S = (X - Lam) - X*log(X/Lam) - S; if (X 0.0) X -= 1.0; } else { T = exp(-0.5*S); S = 1.0 - T*((1.0-U)*T) * sqrt(2.0*3.141592653589793*X); Xi = X; for (i=0; i<50; i++) { Xi += 1.0; S = S*Xi/Lam + 1.0; } if (S < 0.0) X -= 1.0; } } } } // bottom-up summation if (X<10.0) { X = 0.0; T = exp(0.5*Lam); Del = 0.0; if (U>0.5) Del = T*(1e-13*T); S = 1.0 - T*(U*T) + Del; while (S<0.0) { X += 1.0; T = X/Lam; Del = T*Del; S = T*S + 1.0; } // top-down summation if needed if (S < 2.0*Del) { Del = 1e13*Del; T = 1e15*Del; while (Del0.0) { T *= X/Lam; S -= T; X -= 1.0; } } } return X; } // // This double precision function computes the inverse // of the Poisson CDF using the scalar algorithm // // u = CDF value in range (0,1) // lam = Poisson rate // // For lam < 1e15, max |error| no more than 1 // ave |error| < 1e-16*max(4,lam) for lam < 1e9 // < 1e-6 for lam < 1e15 // // For lam > 1e15, the errors will be about 1 ulp. // inline double poissinv_scalar(double U, double Lam) { int i; double X=0.0, Xi, W, T, Del, R, R2, S, S2, Eta, B0, B1; // large lam if (Lam > 4.0) { W = OT::DistFunc::qNormal(U); // W = - sqrt(2.0)*erfcinv(2.0*U); // use polynomial approximations in central region if ( fabs(W)<3.0 ) {; double Lam_root = sqrt(Lam); S = Lam_root*W + (1.0/3.0 + (1.0/6.0)*W*W)*(1.0 - W/(12.0*Lam_root)); Del = (1.0 /160.0); Del = (1.0 / 80.0) + Del*(W*W); Del = (1.0 / 40.0) + Del*(W*W); Del = Del / Lam; S = Lam + (S + Del); } // otherwise use Newton iteration else { S = W / sqrt(Lam); R = 1.0 + S; if (R<0.1) R = 0.1; do { T = log(R); R2 = R; S2 = sqrt(2.0*((1.0-R) + R*T)); if (R<1.0) S2 = -S2; R = R2 - (S2-S)*S2/T; if (R<0.1*R2) R = 0.1*R2; } while (fabs(R-R2)>1e-8); T = log(R); S = Lam*R + log(sqrt(2.0*R*((1.0-R)+R*T))/fabs(R-1.0)) / T; S = S - 0.0218/(S+0.065*Lam); Del = 0.01/S; S = S + Del; } // if x>10, round down to nearest integer, and check accuracy X = floor(S); if (S>10.0 && S0.5*Lam && X<2.0*Lam) { Xi = 1.0 / X; Eta = X / Lam; Eta = sqrt(2.0*(1.0-Eta+Eta*log(Eta))/Eta); if (X>Lam) Eta = -Eta; B1 = 8.0995211567045583e-16; S = B1; B0 = -1.9752288294349411e-15; S = B0 + S*Eta; B1 = -5.1391118342426808e-16 + 25.0*B1*Xi; S = B1 + S*Eta; B0 = 2.8534893807047458e-14 + 24.0*B0*Xi; S = B0 + S*Eta; B1 = -1.3923887224181616e-13 + 23.0*B1*Xi; S = B1 + S*Eta; B0 = 3.3717632624009806e-13 + 22.0*B0*Xi; S = B0 + S*Eta; B1 = 1.1004392031956284e-13 + 21.0*B1*Xi; S = B1 + S*Eta; B0 = -5.0276692801141763e-12 + 20.0*B0*Xi; S = B0 + S*Eta; B1 = 2.4361948020667402e-11 + 19.0*B1*Xi; S = B1 + S*Eta; B0 = -5.8307721325504166e-11 + 18.0*B0*Xi; S = B0 + S*Eta; B1 = -2.5514193994946487e-11 + 17.0*B1*Xi; S = B1 + S*Eta; B0 = 9.1476995822367933e-10 + 16.0*B0*Xi; S = B0 + S*Eta; B1 = -4.3820360184533521e-09 + 15.0*B1*Xi; S = B1 + S*Eta; B0 = 1.0261809784240299e-08 + 14.0*B0*Xi; S = B0 + S*Eta; B1 = 6.7078535434015332e-09 + 13.0*B1*Xi; S = B1 + S*Eta; B0 = -1.7665952736826086e-07 + 12.0*B0*Xi; S = B0 + S*Eta; B1 = 8.2967113409530833e-07 + 11.0*B1*Xi; S = B1 + S*Eta; B0 = -1.8540622107151585e-06 + 10.0*B0*Xi; S = B0 + S*Eta; B1 = -2.1854485106799979e-06 + 9.0*B1*Xi; S = B1 + S*Eta; B0 = 3.9192631785224383e-05 + 8.0*B0*Xi; S = B0 + S*Eta; B1 = -0.00017875514403292177 + 7.0*B1*Xi; S = B1 + S*Eta; B0 = 0.00035273368606701921 + 6.0*B0*Xi; S = B0 + S*Eta; B1 = 0.0011574074074074078 + 5.0*B1*Xi; S = B1 + S*Eta; B0 = -0.014814814814814815 + 4.0*B0*Xi; S = B0 + S*Eta; B1 = 0.083333333333333329 + 3.0*B1*Xi; S = B1 + S*Eta; B0 = -0.33333333333333331 + 2.0*B0*Xi; S = B0 + S*Eta; S = S / (1.0 + B1*Xi); S = S*exp(-0.5*X*Eta*Eta)/sqrt(2.0*3.141592653589793*X); if (X U) X -= 1.0; } else { S -= 0.5*erfc(-Eta*sqrt(0.5*X)); if (S > U-1.0) X -= 1.0; } } // sum downwards or upwards else { Xi = 1.0 / X; S = - (691.0/360360.0); S = (1.0/1188.0) + S*Xi*Xi; S = - (1.0/1680.0) + S*Xi*Xi; S = (1.0/1260.0) + S*Xi*Xi; S = - (1.0/360.0) + S*Xi*Xi; S = (1.0/12.0) + S*Xi*Xi; S = S*Xi; S = (X - Lam) - X*log(X/Lam) - S; if (X 0.0) X -= 1.0; } else { T = exp(-0.5*S); S = 1.0 - T*((1.0-U)*T) * sqrt(2.0*3.141592653589793*X); Xi = X; for (i=0; i<50; i++) { Xi += 1.0; S = S*Xi/Lam + 1.0; } if (S < 0.0) X -= 1.0; } } } } // bottom-up summation if (X<10.0) { X = 0.0; T = exp(0.5*Lam); Del = 0.0; if (U>0.5) Del = T*(1e-13*T); S = 1.0 - T*(U*T) + Del; while (S<0.0) { X += 1.0; T = X/Lam; Del = T*Del; S = T*S + 1.0; } // top-down summation if needed if (S < 2.0*Del) { Del = 1e13*Del; T = 1e15*Del; while (Del0.0) { T *= X/Lam; S -= T; X -= 1.0; } } } return X; } #ifdef __cplusplus } #endif #endif openturns-1.9/lib/src/Uncertainty/Distribution/tvpack.c000066400000000000000000000701761307543307100234130ustar00rootroot00000000000000/* tvpack.f -- translated by f2c (version 20100827). You must link the resulting object file with libf2c: on Microsoft Windows system, link with libf2c.lib; on Linux or Unix systems, link with .../path/to/libf2c.a -lm or, if you install libf2c.a in a standard place, with -lf2c -lm -- in that order, at the end of the command line, as in cc *.o -lf2c -lm Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., http://www.netlib.org/f2c/libf2c.zip */ #include "f2c.h" /* Common Block Declarations */ union { struct { doublereal h1, h2, h3, r23, rua, rub, ar, ruc; integer nuc; } _1; struct { doublereal h1, h2, h3, r23, rua, rub, ar, ruc; integer nu; } _2; } tvtmbk_; #define tvtmbk_1 (tvtmbk_._1) #define tvtmbk_2 (tvtmbk_._2) struct { doublereal err; integer im; } ablk_; #define ablk_1 ablk_ /* Table of constant values */ static doublereal c_b2 = 0.; static doublereal c_b6 = 1.; /* This file contains a test program and functions TVTL */ /* (trivariate normal */ /* and t), BVTL (bivariate t), BVND (bivariate normal), STUDNT */ /* (univariate */ /* t), PHID (univariate normal), plus some support functions. */ /* The file is self contained and should compile without errors on (77) */ /* standard Fortran compilers. The test program demonstrates the use of */ /* TVTL for computing trivariate distribution values 20 test problems */ /* with NU = 0 (normal case), 3, 6, 9, and 12. */ /* The software is based on work described in the paper */ /* "Numerical Computation of Rectangular Bivariate and Trivariate Normal */ /* and t Probabilities", by */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* COMMENTED FOR OPENTURNS INCLUSION */ /* PROGRAM TVTST */ /* INTEGER I, J, NU, NT */ /* PARAMETER ( NT = 20 ) */ /* DOUBLE PRECISION TVTL, LIMIT(3,NT), SIGMA(3,NT), EPS, V */ /* DATA ( LIMIT(I,1), I = 1, 3 ), ( SIGMA(I,1), I = 1, 3 ) */ /* & / .5D0, .5D0, .8D0, .1D0, .6D0, .8D0 / */ /* DATA ( LIMIT(I,2), I = 1, 3 ), ( SIGMA(I,2), I = 1, 3 ) */ /* & / -2.5D0, .5D0, .8D0, .1D0, -.6D0, -.8D0 / */ /* DATA ( LIMIT(I,3), I = 1, 3 ), ( SIGMA(I,3), I = 1, 3 ) */ /* & / 1.5D0, .5D0, .8D0, .1D0, .6D0, .8D0 / */ /* DATA ( LIMIT(I,4), I = 1, 3 ), ( SIGMA(I,4), I = 1, 3 ) */ /* & / .5D0, .5D0, .8D0, .1D0, -.6D0, -.8D0 / */ /* DATA ( LIMIT(I,5), I = 1, 3 ), ( SIGMA(I,5), I = 1, 3 ) */ /* & / .5D0, .5D0, .8D0, .1D0, -.5D0, .5D0 / */ /* DATA ( LIMIT(I,6), I = 1, 3 ), ( SIGMA(I,6), I = 1, 3 ) */ /* & / -1.5D0, .5D0, .8D0, .1D0, -.5D0, .5D0 / */ /* DATA ( LIMIT(I,7), I = 1, 3 ), ( SIGMA(I,7), I = 1, 3 ) */ /* & / 1.5D0, .5D0, .8D0, .1D0, .5D0, -.5D0 / */ /* DATA ( LIMIT(I,8), I = 1, 3 ), ( SIGMA(I,8), I = 1, 3 ) */ /* & / -.5D0, 1D0, 1.2D0, -.4D0, .2D0, .7D0 / */ /* DATA ( LIMIT(I,9), I = 1, 3 ), ( SIGMA(I,9), I = 1, 3 ) */ /* & / 1D0, 1D0, 2D0, .4D0, .8D0, .8D0 / */ /* DATA ( LIMIT(I,10), I = 1, 3 ), ( SIGMA(I,10), I = 1, 3 ) */ /* & / 1D0, 2D0, 1D0, .4D0, .8D0, .8D0 / */ /* DATA ( LIMIT(I,11), I = 1, 3 ), ( SIGMA(I,11), I = 1, 3 ) */ /* & / -2D0, -2D0, -2D0, .4D0, .8D0, .8D0 / */ /* DATA ( LIMIT(I,12), I = 1, 3 ), ( SIGMA(I,12), I = 1, 3 ) */ /* * / 1D0, 2D0, 3D0, -.998D0, -0.248D0, 0.248D0 / */ /* DATA ( LIMIT(I,13), I = 1, 3 ), ( SIGMA(I,13), I = 1, 3 ) */ /* * / -1D0, 2D0, 3D0, .25D0, 0.25D0, 0.25D0 / */ /* DATA ( LIMIT(I,14), I = 1, 3 ), ( SIGMA(I,14), I = 1, 3 ) */ /* * / 1D0, 1D0, 3D0, .998D0, 0.2482D0, 0.2487D0 / */ /* DATA ( LIMIT(I,15), I = 1, 3 ), ( SIGMA(I,15), I = 1, 3 ) */ /* * / 1D0, 1D0, 3D0, .998D0, 0.5D0, 0.5D0 / */ /* DATA ( LIMIT(I,16), I = 1, 3 ), ( SIGMA(I,16), I = 1, 3 ) */ /* * / 1D0, 1D0, 3D0, .99D0, 0.99D0, 0.99D0 / */ /* DATA ( LIMIT(I,17), I = 1, 3 ), ( SIGMA(I,17), I = 1, 3 ) */ /* * / 1D0, 2D0, 3D0, -1D0, -.99D0, .99D0 / */ /* DATA ( LIMIT(I,18), I = 1, 3 ), ( SIGMA(I,18), I = 1, 3 ) */ /* * / 1D0, 2D0, 3D0, 1D0, -.99D0, -.99D0 / */ /* DATA ( LIMIT(I,19), I = 1, 3 ), ( SIGMA(I,19), I = 1, 3 ) */ /* * / 1D0, -1D0, 1D0, .998D0, -0.2482D0, -0.2482D0 / */ /* DATA ( LIMIT(I,NT), I = 1, 3 ), ( SIGMA(I,NT), I = 1, 3 ) */ /* * / 1D0, -1D0, 2D0, .99992D0, 0.64627D0, 0.63975D0 / */ /* EPS = 1D-16 */ /* PRINT '('' Trivariate t Test with EPS ='', E10.1)', EPS */ /* DO NU = 0, 12, 3 */ /* PRINT '(''NU B1 B2 B3 R21 R31 R32 TVT'')' */ /* DO J = 1, NT */ /* V = TVTL( NU, LIMIT(1,J), SIGMA(1,J), EPS ) */ /* PRINT '(I2,3F5.1,3F9.5,F13.10)', NU, */ /* & ( LIMIT(I,J), I = 1, 3 ), ( SIGMA(I,J), I = 1, 3 ), V */ /* END DO */ /* END DO */ /* END */ /* **************************************** */ /* END COMMENTED FOR OPENTURNS INCLUSION * */ /* **************************************** */ doublereal tvtl_(integer *nu, doublereal *h__, doublereal *r__, doublereal * epsi) { /* System generated locals */ doublereal ret_val, d__1, d__2; /* Builtin functions */ double asin(doublereal), d_sign(doublereal *, doublereal *); /* Local variables */ static doublereal r12, r13, pt, eps, tvt; extern doublereal phid_(doublereal *), bvtl_(integer *, doublereal *, doublereal *, doublereal *), adonet_(D_fp, doublereal *, doublereal *, doublereal *); extern /* Subroutine */ doublereal tvtmfn_(doublereal *); /* A function for computing trivariate normal and t-probabilities. */ /* This function uses algorithms developed from the ideas */ /* described in the papers: */ /* R.L. Plackett, Biometrika 41(1954), pp. 351-360. */ /* Z. Drezner, Math. Comp. 62(1994), pp. 289-294. */ /* with adaptive integration from (0,0,1) to (0,0,r23) to R. */ /* Calculate the probability that X(I) < H(I), for I = 1,2,3 */ /* NU INTEGER degrees of freedom; use NU = 0 for normal cases. */ /* H REAL array of uppoer limits for probability distribution */ /* R REAL array of three correlation coefficients, R should */ /* contain the lower left portion of the correlation matrix r. */ /* R should contains the values r21, r31, r23 in that order. */ /* EPSI REAL required absolute accuracy; maximum accuracy for most */ /* computations is approximately 1D-14 */ /* The software is based on work described in the paper */ /* "Numerical Computation of Rectangular Bivariate and Trivariate */ /* Normal and t Probabilities", by the code author: */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* , HS(3), ZROS(3) */ /* Parameter adjustments */ --r__; --h__; /* Function Body */ eps = max(1e-14,*epsi); pt = asin(1.); tvtmbk_1.nuc = *nu; tvtmbk_1.h1 = h__[1]; tvtmbk_1.h2 = h__[2]; tvtmbk_1.h3 = h__[3]; r12 = r__[1]; r13 = r__[2]; tvtmbk_1.r23 = r__[3]; /* Sort R's and check for special cases */ if (abs(r12) > abs(r13)) { tvtmbk_1.h2 = tvtmbk_1.h3; tvtmbk_1.h3 = h__[2]; r12 = r13; r13 = r__[1]; } if (abs(r13) > abs(tvtmbk_1.r23)) { tvtmbk_1.h1 = tvtmbk_1.h2; tvtmbk_1.h2 = h__[1]; tvtmbk_1.r23 = r13; r13 = r__[3]; } tvt = 0.; if (abs(tvtmbk_1.h1) + abs(tvtmbk_1.h2) + abs(tvtmbk_1.h3) < eps) { tvt = ((asin(r12) + asin(r13) + asin(tvtmbk_1.r23)) / pt + 1) / 8; } else if (*nu < 1 && abs(r12) + abs(r13) < eps) { tvt = phid_(&tvtmbk_1.h1) * bvtl_(nu, &tvtmbk_1.h2, &tvtmbk_1.h3, & tvtmbk_1.r23); } else if (*nu < 1 && abs(r13) + abs(tvtmbk_1.r23) < eps) { tvt = phid_(&tvtmbk_1.h3) * bvtl_(nu, &tvtmbk_1.h1, &tvtmbk_1.h2, & r12); } else if (*nu < 1 && abs(r12) + abs(tvtmbk_1.r23) < eps) { tvt = phid_(&tvtmbk_1.h2) * bvtl_(nu, &tvtmbk_1.h1, &tvtmbk_1.h3, & r13); } else if (1 - tvtmbk_1.r23 < eps) { d__1 = min(tvtmbk_1.h2,tvtmbk_1.h3); tvt = bvtl_(nu, &tvtmbk_1.h1, &d__1, &r12); } else if (tvtmbk_1.r23 + 1 < eps) { if (tvtmbk_1.h2 > -tvtmbk_1.h3) { d__1 = -tvtmbk_1.h3; tvt = bvtl_(nu, &tvtmbk_1.h1, &tvtmbk_1.h2, &r12) - bvtl_(nu, & tvtmbk_1.h1, &d__1, &r12); } } else { /* Compute singular TVT value */ if (*nu < 1) { tvt = bvtl_(nu, &tvtmbk_1.h2, &tvtmbk_1.h3, &tvtmbk_1.r23) * phid_(&tvtmbk_1.h1); } else if (tvtmbk_1.r23 >= 0.) { d__1 = min(tvtmbk_1.h2,tvtmbk_1.h3); tvt = bvtl_(nu, &tvtmbk_1.h1, &d__1, &c_b2); } else if (tvtmbk_1.h2 > -tvtmbk_1.h3) { d__1 = -tvtmbk_1.h3; tvt = bvtl_(nu, &tvtmbk_1.h1, &tvtmbk_1.h2, &c_b2) - bvtl_(nu, & tvtmbk_1.h1, &d__1, &c_b2); } /* Use numerical integration to compute probability */ tvtmbk_1.rua = asin(r12); tvtmbk_1.rub = asin(r13); tvtmbk_1.ar = asin(tvtmbk_1.r23); tvtmbk_1.ruc = d_sign(&pt, &tvtmbk_1.ar) - tvtmbk_1.ar; tvt += adonet_((D_fp)tvtmfn_, &c_b2, &c_b6, &eps) / (pt * 4); } /* Computing MAX */ d__1 = 0., d__2 = min(tvt,1.); ret_val = max(d__1,d__2); return ret_val; } /* tvtl_ */ doublereal tvtmfn_(doublereal *x) { /* System generated locals */ doublereal ret_val, d__1; /* Local variables */ static doublereal r__, r12, r13, rr, rr2, rr3; extern /* Subroutine */ int sincs_(doublereal *, doublereal *, doublereal *); extern doublereal pntgnd_(integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *); /* Computes Plackett formula integrands */ ret_val = 0.; d__1 = tvtmbk_2.rua * *x; sincs_(&d__1, &r12, &rr2); d__1 = tvtmbk_2.rub * *x; sincs_(&d__1, &r13, &rr3); if (abs(tvtmbk_2.rua) > 0.) { ret_val += tvtmbk_2.rua * pntgnd_(&tvtmbk_2.nu, &tvtmbk_2.h1, & tvtmbk_2.h2, &tvtmbk_2.h3, &r13, &tvtmbk_2.r23, &r12, &rr2); } if (abs(tvtmbk_2.rub) > 0.) { ret_val += tvtmbk_2.rub * pntgnd_(&tvtmbk_2.nu, &tvtmbk_2.h1, & tvtmbk_2.h3, &tvtmbk_2.h2, &r12, &tvtmbk_2.r23, &r13, &rr3); } if (tvtmbk_2.nu > 0) { d__1 = tvtmbk_2.ar + tvtmbk_2.ruc * *x; sincs_(&d__1, &r__, &rr); ret_val -= tvtmbk_2.ruc * pntgnd_(&tvtmbk_2.nu, &tvtmbk_2.h2, & tvtmbk_2.h3, &tvtmbk_2.h1, &c_b2, &c_b2, &r__, &rr); } return ret_val; } /* tvtmfn_ */ /* Subroutine */ int sincs_(doublereal *x, doublereal *sx, doublereal *cs) { /* System generated locals */ doublereal d__1; /* Builtin functions */ double d_sign(doublereal *, doublereal *), sin(doublereal); /* Local variables */ static doublereal ee; /* Computes SIN(X), COS(X)^2, with series approx. for |X| near PI/2 */ /* Computing 2nd power */ d__1 = 1.57079632679489661923132169163975 - abs(*x); ee = d__1 * d__1; if (ee < 5e-5) { d__1 = 1 - ee * (1 - ee / 12) / 2; *sx = d_sign(&d__1, x); *cs = ee * (1 - ee * (1 - ee * 2 / 15) / 3); } else { *sx = sin(*x); *cs = 1 - *sx * *sx; } return 0; } /* sincs_ */ doublereal pntgnd_(integer *nu, doublereal *ba, doublereal *bb, doublereal * bc, doublereal *ra, doublereal *rb, doublereal *r__, doublereal *rr) { /* System generated locals */ doublereal ret_val, d__1; /* Builtin functions */ double sqrt(doublereal), exp(doublereal), pow_di(doublereal *, integer *); /* Local variables */ static doublereal bt, dt, ft; extern doublereal phid_(doublereal *), studnt_(integer *, doublereal *); /* Computes Plackett formula integrand */ ret_val = 0.; /* Computing 2nd power */ d__1 = *ra - *rb; dt = *rr * (*rr - d__1 * d__1 - *ra * 2 * *rb * (1 - *r__)); if (dt > 0.) { bt = (*bc * *rr + *ba * (*r__ * *rb - *ra) + *bb * (*r__ * *ra - *rb)) / sqrt(dt); /* Computing 2nd power */ d__1 = *ba - *r__ * *bb; ft = d__1 * d__1 / *rr + *bb * *bb; if (*nu < 1) { if (bt > -10. && ft < 100.) { ret_val = exp(-ft / 2); if (bt < 10.) { ret_val *= phid_(&bt); } } } else { ft = sqrt(ft / *nu + 1); d__1 = bt / ft; ret_val = studnt_(nu, &d__1) / pow_di(&ft, nu); } } return ret_val; } /* pntgnd_ */ doublereal adonet_(D_fp f, doublereal *a, doublereal *b, doublereal *tol) { /* System generated locals */ integer i__1; doublereal ret_val, d__1; /* Builtin functions */ double sqrt(doublereal); /* Local variables */ static integer i__; static doublereal ai[100], bi[100], ei[100], fi[100]; static integer ip; static doublereal fin; extern doublereal krnrdt_(doublereal *, doublereal *, D_fp, doublereal *); /* One Dimensional Globally Adaptive Integration Function */ ai[0] = *a; bi[0] = *b; ablk_1.err = 1.; ip = 1; ablk_1.im = 1; while(ablk_1.err * 4 > *tol && ablk_1.im < 100) { ++ablk_1.im; bi[ablk_1.im - 1] = bi[ip - 1]; ai[ablk_1.im - 1] = (ai[ip - 1] + bi[ip - 1]) / 2; bi[ip - 1] = ai[ablk_1.im - 1]; fi[ip - 1] = krnrdt_(&ai[ip - 1], &bi[ip - 1], (D_fp)f, &ei[ip - 1]); fi[ablk_1.im - 1] = krnrdt_(&ai[ablk_1.im - 1], &bi[ablk_1.im - 1], ( D_fp)f, &ei[ablk_1.im - 1]); ablk_1.err = 0.; fin = 0.; i__1 = ablk_1.im; for (i__ = 1; i__ <= i__1; ++i__) { if (ei[i__ - 1] > ei[ip - 1]) { ip = i__; } fin += fi[i__ - 1]; /* Computing 2nd power */ d__1 = ei[i__ - 1]; ablk_1.err += d__1 * d__1; } ablk_1.err = sqrt(ablk_1.err); } ret_val = fin; return ret_val; } /* adonet_ */ doublereal krnrdt_(doublereal *a, doublereal *b, D_fp f, doublereal *err) { /* Initialized data */ static doublereal wg[7] = { .2729250867779007,.05566856711617449, .1255803694649048,.1862902109277352,.2331937645919914, .2628045445102478 }; static doublereal xgk[12] = { 0.,.9963696138895427,.978228658146057, .9416771085780681,.8870625997680953,.8160574566562211, .7301520055740492,.6305995201619651,.5190961292068118, .3979441409523776,.269543155952345,.1361130007993617 }; static doublereal wgk[12] = { .1365777947111183,.00976544104596129, .02715655468210443,.04582937856442671,.06309742475037484, .07866457193222764,.09295309859690074,.1058720744813894, .1167395024610472,.1251587991003195,.1312806842298057, .1351935727998845 }; /* System generated locals */ doublereal ret_val, d__1, d__2; /* Local variables */ static integer j; static doublereal t, fc, cen, wid, resg, resk; /* Kronrod Rule */ /* The abscissae and weights are given for the interval (-1,1); */ /* only positive abscissae and corresponding weights are given. */ /* XGK - abscissae of the 2N+1-point Kronrod rule: */ /* XGK(2), XGK(4), ... N-point Gauss rule abscissae; */ /* XGK(1), XGK(3), ... optimally added abscissae. */ /* WGK - weights of the 2N+1-point Kronrod rule. */ /* WG - weights of the N-point Gauss rule. */ /* Major variables */ /* CEN - mid point of the interval */ /* WID - half-length of the interval */ /* RESG - result of the N-point Gauss formula */ /* RESK - result of the 2N+1-point Kronrod formula */ /* Compute the 2N+1-point Kronrod approximation to */ /* the integral, and estimate the absolute error. */ wid = (*b - *a) / 2; cen = (*b + *a) / 2; fc = (*f)(&cen); resg = fc * wg[0]; resk = fc * wgk[0]; for (j = 1; j <= 11; ++j) { t = wid * xgk[j]; d__1 = cen - t; d__2 = cen + t; fc = (*f)(&d__1) + (*f)(&d__2); resk += wgk[j] * fc; if (j % 2 == 0) { resg += wg[j / 2] * fc; } } ret_val = wid * resk; *err = (d__1 = wid * (resk - resg), abs(d__1)); return ret_val; } /* krnrdt_ */ doublereal studnt_(integer *nu, doublereal *t) { /* System generated locals */ doublereal ret_val, d__1, d__2; /* Builtin functions */ double acos(doublereal), atan(doublereal), sqrt(doublereal); /* Local variables */ static integer j; static doublereal pi, rn, ts, tt; extern doublereal phid_(doublereal *); static doublereal snthe, polyn, cssthe; /* Student t Distribution Function */ /* T */ /* STUDNT = C I ( 1 + y*y/NU )**( -(NU+1)/2 ) dy */ /* NU -INF */ pi = acos(-1.); if (*nu < 1) { ret_val = phid_(t); } else if (*nu == 1) { ret_val = (atan(*t) * 2 / pi + 1) / 2; } else if (*nu == 2) { ret_val = (*t / sqrt(*t * *t + 2) + 1) / 2; } else { tt = *t * *t; cssthe = 1 / (tt / *nu + 1); polyn = 1.; for (j = *nu - 2; j >= 2; j += -2) { polyn = (j - 1) * cssthe * polyn / j + 1; } if (*nu % 2 == 1) { rn = (doublereal) (*nu); ts = *t / sqrt(rn); ret_val = ((atan(ts) + ts * cssthe * polyn) * 2 / pi + 1) / 2; } else { snthe = *t / sqrt(*nu + tt); ret_val = (snthe * polyn + 1) / 2; } /* Computing MAX */ d__1 = 0., d__2 = min(ret_val,1.); ret_val = max(d__1,d__2); } return ret_val; } /* studnt_ */ doublereal bvtl_(integer *nu, doublereal *dh, doublereal *dk, doublereal *r__) { /* System generated locals */ integer i__1; doublereal ret_val, d__1, d__2, d__3; /* Builtin functions */ double acos(doublereal), sqrt(doublereal), d_sign(doublereal *, doublereal *), atan2(doublereal, doublereal); /* Local variables */ static integer j; static doublereal pi; static integer hs, ks; static doublereal hkn, hpk, hrk, krh, bvt, tpi, ors, snu; extern doublereal bvnd_(doublereal *, doublereal *, doublereal *); static doublereal gmph, gmpk, hkrn, qhrk, xnkh, xnhk, btnckh, btnchk, btpdkh, btpdhk; extern doublereal studnt_(integer *, doublereal *); /* A function for computing bivariate t probabilities. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* This function is based on the method described by */ /* Dunnett, C.W. and M. Sobel, (1954), */ /* A bivariate generalization of Student's t-distribution */ /* with tables for certain special cases, */ /* Biometrika 41, pp. 153-169. */ /* BVTL - calculate the probability that X < DH and Y < DK. */ /* parameters */ /* NU number of degrees of freedom */ /* DH 1st lower integration limit */ /* DK 2nd lower integration limit */ /* R correlation coefficient */ if (*nu < 1) { d__1 = -(*dh); d__2 = -(*dk); ret_val = bvnd_(&d__1, &d__2, r__); } else if (1 - *r__ <= 1e-15) { d__1 = min(*dh,*dk); ret_val = studnt_(nu, &d__1); } else if (*r__ + 1 <= 1e-15) { if (*dh > -(*dk)) { d__1 = -(*dk); ret_val = studnt_(nu, dh) - studnt_(nu, &d__1); } else { ret_val = 0.; } } else { pi = acos(-1.); tpi = pi * 2; snu = (doublereal) (*nu); snu = sqrt(snu); ors = 1 - *r__ * *r__; hrk = *dh - *r__ * *dk; krh = *dk - *r__ * *dh; if (abs(hrk) + ors > 0.) { /* Computing 2nd power */ d__1 = hrk; /* Computing 2nd power */ d__2 = hrk; /* Computing 2nd power */ d__3 = *dk; xnhk = d__1 * d__1 / (d__2 * d__2 + ors * (*nu + d__3 * d__3)); /* Computing 2nd power */ d__1 = krh; /* Computing 2nd power */ d__2 = krh; /* Computing 2nd power */ d__3 = *dh; xnkh = d__1 * d__1 / (d__2 * d__2 + ors * (*nu + d__3 * d__3)); } else { xnhk = 0.; xnkh = 0.; } d__1 = *dh - *r__ * *dk; hs = (integer) d_sign(&c_b6, &d__1); d__1 = *dk - *r__ * *dh; ks = (integer) d_sign(&c_b6, &d__1); if (*nu % 2 == 0) { bvt = atan2(sqrt(ors), -(*r__)) / tpi; /* Computing 2nd power */ d__1 = *dh; gmph = *dh / sqrt((*nu + d__1 * d__1) * 16); /* Computing 2nd power */ d__1 = *dk; gmpk = *dk / sqrt((*nu + d__1 * d__1) * 16); btnckh = atan2(sqrt(xnkh), sqrt(1 - xnkh)) * 2 / pi; btpdkh = sqrt(xnkh * (1 - xnkh)) * 2 / pi; btnchk = atan2(sqrt(xnhk), sqrt(1 - xnhk)) * 2 / pi; btpdhk = sqrt(xnhk * (1 - xnhk)) * 2 / pi; i__1 = *nu / 2; for (j = 1; j <= i__1; ++j) { bvt += gmph * (ks * btnckh + 1); bvt += gmpk * (hs * btnchk + 1); btnckh += btpdkh; btpdkh = (j << 1) * btpdkh * (1 - xnkh) / ((j << 1) + 1); btnchk += btpdhk; btpdhk = (j << 1) * btpdhk * (1 - xnhk) / ((j << 1) + 1); /* Computing 2nd power */ d__1 = *dh; gmph = gmph * ((j << 1) - 1) / ((j << 1) * (d__1 * d__1 / *nu + 1)); /* Computing 2nd power */ d__1 = *dk; gmpk = gmpk * ((j << 1) - 1) / ((j << 1) * (d__1 * d__1 / *nu + 1)); } } else { /* Computing 2nd power */ d__1 = *dh; /* Computing 2nd power */ d__2 = *dk; qhrk = sqrt(d__1 * d__1 + d__2 * d__2 - *r__ * 2 * *dh * *dk + * nu * ors); hkrn = *dh * *dk + *r__ * *nu; hkn = *dh * *dk - *nu; hpk = *dh + *dk; bvt = atan2(-snu * (hkn * qhrk + hpk * hkrn), hkn * hkrn - *nu * hpk * qhrk) / tpi; if (bvt < -1e-15) { bvt += 1; } /* Computing 2nd power */ d__1 = *dh; gmph = *dh / (tpi * snu * (d__1 * d__1 / *nu + 1)); /* Computing 2nd power */ d__1 = *dk; gmpk = *dk / (tpi * snu * (d__1 * d__1 / *nu + 1)); btnckh = sqrt(xnkh); btpdkh = btnckh; btnchk = sqrt(xnhk); btpdhk = btnchk; i__1 = (*nu - 1) / 2; for (j = 1; j <= i__1; ++j) { bvt += gmph * (ks * btnckh + 1); bvt += gmpk * (hs * btnchk + 1); btpdkh = ((j << 1) - 1) * btpdkh * (1 - xnkh) / (j << 1); btnckh += btpdkh; btpdhk = ((j << 1) - 1) * btpdhk * (1 - xnhk) / (j << 1); btnchk += btpdhk; /* Computing 2nd power */ d__1 = *dh; gmph = (j << 1) * gmph / (((j << 1) + 1) * (d__1 * d__1 / *nu + 1)); /* Computing 2nd power */ d__1 = *dk; gmpk = (j << 1) * gmpk / (((j << 1) + 1) * (d__1 * d__1 / *nu + 1)); } } ret_val = bvt; } /* END BVTL */ return ret_val; } /* bvtl_ */ doublereal phid_(doublereal *z__) { /* Initialized data */ static doublereal a[44] = { .610143081923200417926465815756, -.434841272712577471828182820888,.176351193643605501125840298123, -.060710795609249414860051215825,.017712068995694114486147141191, -.004321119385567293818599864968,8.54216676887098678819832055e-4, -1.2715509060916274262889394e-4,1.1248167243671189468847072e-5, 3.13063885421820972630152e-7,-2.70988068537762022009086e-7, 3.0737622701407688440959e-8,2.515620384817622937314e-9, -1.02892992132031912759e-9,2.9944052119949939363e-11, 2.605178968726693629e-11,-2.634839924171969386e-12, -6.43404509890636443e-13,1.12457401801663447e-13, 1.7281533389986098e-14,-4.264101694942375e-15, -5.45371977880191e-16,1.58697607761671e-16,2.0899837844334e-17, -5.900526869409e-18,-9.41893387554e-19,2.1497735647e-19, 4.6660985008e-20,-7.243011862e-21,-2.387966824e-21,1.91177535e-22, 1.20482568e-22,-6.72377e-25,-5.747997e-24,-4.28493e-25, 2.44856e-25,4.3793e-26,-8.151e-27,-3.089e-27,9.3e-29,1.74e-28, 1.6e-29,-8e-30,-2e-30 }; /* System generated locals */ doublereal ret_val; /* Builtin functions */ double exp(doublereal); /* Local variables */ static doublereal b; static integer i__; static doublereal p, t, bm, bp, xa; /* Normal distribution probabilities accurate to 1d-15. */ /* Reference: J.L. Schonfelder, Math Comp 32(1978), pp 1232-1240. */ xa = abs(*z__) / 1.414213562373095048801688724209; if (xa > 100.) { p = 0.; } else { t = (xa * 8 - 30) / (xa * 4 + 15); bm = 0.; b = 0.; for (i__ = 24; i__ >= 0; --i__) { bp = b; b = bm; bm = t * b - bp + a[i__]; } p = exp(-xa * xa) * (bm - bp) / 4; } if (*z__ > 0.) { p = 1 - p; } ret_val = p; return ret_val; } /* phid_ */ doublereal bvnd_(doublereal *dh, doublereal *dk, doublereal *r__) { /* Initialized data */ static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_92 = { .1713244923791705, .3607615730481384, .4679139345726904, {0}, .04717533638651177, .1069393259953183, .1600783285433464, .2031674267230659, .2334925365383547, .2491470458134029, {0}, .01761400713915212, .04060142980038694, .06267204833410906, .08327674157670475, .1019301198172404, .1181945319615184, .1316886384491766, .1420961093183821, .1491729864726037, .1527533871307259 }; #define w ((doublereal *)&equiv_92) static struct { doublereal e_1[3]; doublereal fill_2[7]; doublereal e_3[6]; doublereal fill_4[4]; doublereal e_5[10]; } equiv_93 = { -.9324695142031522, -.6612093864662647, -.238619186083197, {0}, -.9815606342467191, -.904117256370475, -.769902674194305, -.5873179542866171, -.3678314989981802, -.1252334085114692, {0}, -.9931285991850949, -.9639719272779138, -.9122344282513259, -.8391169718222188, -.7463319064601508, -.636053680726515, -.5108670019508271, -.3737060887154196, -.2277858511416451, -.07652652113349733 }; #define x ((doublereal *)&equiv_93) /* System generated locals */ integer i__1; doublereal ret_val, d__1, d__2; /* Builtin functions */ double asin(doublereal), sin(doublereal), exp(doublereal), sqrt( doublereal); /* Local variables */ static doublereal a, b, c__, d__, h__; static integer i__; static doublereal k; static integer lg; static doublereal as; static integer ng; static doublereal bs, hk, hs; static integer is; static doublereal sn, rs, xs, bvn, asr; extern doublereal phid_(doublereal *); /* A function for computing bivariate normal probabilities. */ /* Alan Genz */ /* Department of Mathematics */ /* Washington State University */ /* Pullman, WA 99164-3113 */ /* Email : alangenz@wsu.edu */ /* This function is based on the method described by */ /* Drezner, Z and G.O. Wesolowsky, (1989), */ /* On the computation of the bivariate normal integral, */ /* Journal of Statist. Comput. Simul. 35, pp. 101-107, */ /* with major modifications for double precision, */ /* and for |R| close to 1. */ /* BVND calculates the probability that X > DH and Y > DK. */ /* Note: Prob( X < DH, Y < DK ) = BVND( -DH, -DK, R ). */ /* Parameters */ /* DH DOUBLE PRECISION, integration limit */ /* DK DOUBLE PRECISION, integration limit */ /* R DOUBLE PRECISION, correlation coefficient */ /* Gauss Legendre Points and Weights, N = 6 */ /* Gauss Legendre Points and Weights, N = 12 */ /* Gauss Legendre Points and Weights, N = 20 */ if (abs(*r__) < .3f) { ng = 1; lg = 3; } else if (abs(*r__) < .75f) { ng = 2; lg = 6; } else { ng = 3; lg = 10; } h__ = *dh; k = *dk; hk = h__ * k; bvn = 0.; if (abs(*r__) < .925f) { if (abs(*r__) > 0.) { hs = (h__ * h__ + k * k) / 2; asr = asin(*r__); i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { for (is = -1; is <= 1; is += 2) { sn = sin(asr * (is * x[i__ + ng * 10 - 11] + 1) / 2); bvn += w[i__ + ng * 10 - 11] * exp((sn * hk - hs) / (1 - sn * sn)); } } bvn = bvn * asr / 12.566370614359172; } d__1 = -h__; d__2 = -k; bvn += phid_(&d__1) * phid_(&d__2); } else { if (*r__ < 0.) { k = -k; hk = -hk; } if (abs(*r__) < 1.) { as = (1 - *r__) * (*r__ + 1); a = sqrt(as); /* Computing 2nd power */ d__1 = h__ - k; bs = d__1 * d__1; c__ = (4 - hk) / 8; d__ = (12 - hk) / 16; asr = -(bs / as + hk) / 2; if (asr > -100.) { bvn = a * exp(asr) * (1 - c__ * (bs - as) * (1 - d__ * bs / 5) / 3 + c__ * d__ * as * as / 5); } if (-hk < 100.) { b = sqrt(bs); d__1 = -b / a; bvn -= exp(-hk / 2) * sqrt(6.283185307179586) * phid_(&d__1) * b * (1 - c__ * bs * (1 - d__ * bs / 5) / 3); } a /= 2; i__1 = lg; for (i__ = 1; i__ <= i__1; ++i__) { for (is = -1; is <= 1; is += 2) { /* Computing 2nd power */ d__1 = a * (is * x[i__ + ng * 10 - 11] + 1); xs = d__1 * d__1; rs = sqrt(1 - xs); asr = -(bs / xs + hk) / 2; if (asr > -100.) { bvn += a * w[i__ + ng * 10 - 11] * exp(asr) * (exp( -hk * (1 - rs) / ((rs + 1) * 2)) / rs - (c__ * xs * (d__ * xs + 1) + 1)); } } } bvn = -bvn / 6.283185307179586; } if (*r__ > 0.) { d__1 = -max(h__,k); bvn += phid_(&d__1); } else { bvn = -bvn; if (k > h__) { bvn = bvn + phid_(&k) - phid_(&h__); } } } ret_val = bvn; return ret_val; } /* bvnd_ */ #undef x #undef w openturns-1.9/lib/src/Uncertainty/Model/000077500000000000000000000000001307543307100203255ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Model/ArchimedeanCopula.cxx000066400000000000000000000160001307543307100244120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for archimedean copulas * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ArchimedeanCopula.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ArchimedeanCopula); /* Default constructor */ ArchimedeanCopula::ArchimedeanCopula() : CopulaImplementation() { setDimension(2); } /* Virtual constructor */ ArchimedeanCopula * ArchimedeanCopula::clone() const { return new ArchimedeanCopula(*this); } /* Comparison operator */ Bool ArchimedeanCopula::operator ==(const ArchimedeanCopula & other) const { Bool sameObject = false; if (this != &other) // Other is NOT me, so I have to realize the comparison { // sameObject = ... } else sameObject = true; return sameObject; } /* String converter */ String ArchimedeanCopula::__repr__() const { OSS oss; oss << "class=" << ArchimedeanCopula::GetClassName(); return oss; } /* Get the PDF of the distribution */ Scalar ArchimedeanCopula::computePDF(const Point & point) const { if ((point[0] <= 0.0) || (point[1] <= 0.0) || (point[0] >= 1.0) || point[1] >= 1.0) return 0.0; Scalar sum = computeArchimedeanGenerator(point[0]) + computeArchimedeanGenerator(point[1]); Scalar inv = computeInverseArchimedeanGenerator(sum); Scalar den = computeArchimedeanGeneratorDerivative(inv); return -computeArchimedeanGeneratorSecondDerivative(inv) * computeArchimedeanGeneratorDerivative(point[0]) * computeArchimedeanGeneratorDerivative(point[1]) / (den * den * den); } /* Get the CDF of the distribution */ Scalar ArchimedeanCopula::computeCDF(const Point & point) const { if ((point[0] <= 0.0) || (point[1] <= 0.0)) return 0.0; if ((point[0] >= 1.0) && (point[1] >= 1.0)) return 1.0; if (point[0] >= 1.0) return point[1]; if (point[1] >= 1.0) return point[0]; return computeInverseArchimedeanGenerator(computeArchimedeanGenerator(point[0]) + computeArchimedeanGenerator(point[1])); } Scalar ArchimedeanCopula::computeComplementaryCDF(const Point & point) const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::computeComplementaryCDF(const Point & point) const"; } /* Compute the probability content of an interval */ Scalar ArchimedeanCopula::computeProbability(const Interval & interval) const { Interval intersect(interval.intersect(Interval(2))); // Empty interval if (intersect.isNumericallyEmpty()) return 0.0; Point lowerBound(intersect.getLowerBound()); Point upperBound(intersect.getUpperBound()); Scalar uuCDF = computeCDF(upperBound); Scalar llCDF = computeCDF(lowerBound); Point ul(2); ul[0] = upperBound[0]; ul[1] = lowerBound[1]; Scalar ulCDF = computeCDF(ul); Point lu(2); lu[0] = lowerBound[0]; lu[1] = upperBound[1]; Scalar luCDF = computeCDF(lu); return uuCDF - ulCDF - luCDF + llCDF; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar ArchimedeanCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // If x is outside of the range of the marginal distribution if ((x <= 0.0) || (x >= 1.0)) return 0.0; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return 1.0; const Scalar z = y[0]; // If the conditioning variable is outside of the range of the marginal distribution if ((z <= 0.0) || (z >= 1.0)) return 0.0; Point point(2); point[0] = z; point[1] = x; return computePDF(point); } /* Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ Scalar ArchimedeanCopula::computeArchimedeanGenerator(const Scalar t) const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::computeArchimedeanGenerator(const Scalar t) const"; } /* Compute the inverse of the archimedean generator */ Scalar ArchimedeanCopula::computeInverseArchimedeanGenerator(const Scalar t) const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::computeInverseArchimedeanGenerator(const Scalar t) const"; } /* Compute the derivative of the density generator */ Scalar ArchimedeanCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::computeArchimedeanGeneratorDerivative(const Scalar t) const"; } /* Compute the seconde derivative of the density generator */ Scalar ArchimedeanCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::computeArchimedeanGeneratorSecondDerivative(const Scalar t) const"; } /* Tell if the distribution has elliptical copula */ Bool ArchimedeanCopula::hasEllipticalCopula() const { return hasIndependentCopula(); } /* Tell if the distribution has independent copula */ Bool ArchimedeanCopula::hasIndependentCopula() const { throw NotYetImplementedException(HERE) << "In ArchimedeanCopula::hasIndependentCopula() const"; } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ ArchimedeanCopula::Implementation ArchimedeanCopula::getMarginal(const Indices & indices) const { if (!indices.check(2)) throw InvalidArgumentException(HERE) << "The indices of an archimedean copula must be in the range [0, 1] and must be different"; // General case const UnsignedInteger outputDimension = indices.getSize(); // Only one indice is needed, call the specialized method if (outputDimension == 1) return getMarginal(indices[0]); // The indices correspond to all the components, with a possible transposition of the two components. // As an archimedean copula is exchangeable, the resulting distribution is the copula itself, we just // have to transpose the descriptions ArchimedeanCopula * result(clone()); if (indices[0] != 0) { Description description(getDescription()); String tmp(description[0]); description[0] = description[1]; description[1] = tmp; result->setDescription(description); } return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/CMakeLists.txt000066400000000000000000000055021307543307100230670ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (Distribution.cxx) ot_add_source_file (DistributionImplementation.cxx) ot_add_source_file (ContinuousDistribution.cxx) ot_add_source_file (DiscreteDistribution.cxx) ot_add_source_file (EllipticalDistribution.cxx) ot_add_source_file (Copula.cxx) ot_add_source_file (CopulaImplementation.cxx) ot_add_source_file (SklarCopula.cxx) ot_add_source_file (ArchimedeanCopula.cxx) ot_add_source_file (RandomVector.cxx) ot_add_source_file (Event.cxx) ot_add_source_file (RandomVectorImplementation.cxx) ot_add_source_file (ConditionalRandomVector.cxx) ot_add_source_file (ConstantRandomVector.cxx) ot_add_source_file (CompositeRandomVector.cxx) ot_add_source_file (FunctionalChaosRandomVector.cxx) ot_add_source_file (KrigingRandomVector.cxx) ot_add_source_file (UsualRandomVector.cxx) ot_add_source_file (EventDomain.cxx) ot_add_source_file (EventRandomVector.cxx) ot_add_source_file (EventProcess.cxx) ot_add_source_file (StandardEvent.cxx) ot_add_source_file (DistributionFactoryResult.cxx) ot_add_source_file (DistributionFactory.cxx) ot_add_source_file (DistributionFactoryImplementation.cxx) ot_add_source_file (ProcessImplementation.cxx) ot_add_source_file (Process.cxx) ot_add_source_file (DistributionParametersImplementation.cxx) ot_add_source_file (DistributionParameters.cxx) ot_install_header_file (RandomVectorImplementation.hxx) ot_install_header_file (SklarCopula.hxx) ot_install_header_file (Event.hxx) ot_install_header_file (RandomVector.hxx) ot_install_header_file (EllipticalDistribution.hxx) ot_install_header_file (ContinuousDistribution.hxx) ot_install_header_file (CompositeRandomVector.hxx) ot_install_header_file (ConditionalRandomVector.hxx) ot_install_header_file (DistributionFactoryResult.hxx) ot_install_header_file (DistributionFactory.hxx) ot_install_header_file (DistributionImplementation.hxx) ot_install_header_file (FunctionalChaosRandomVector.hxx) ot_install_header_file (KrigingRandomVector.hxx) ot_install_header_file (UsualRandomVector.hxx) ot_install_header_file (StandardEvent.hxx) ot_install_header_file (Distribution.hxx) ot_install_header_file (EventDomain.hxx) ot_install_header_file (EventRandomVector.hxx) ot_install_header_file (EventProcess.hxx) ot_install_header_file (ArchimedeanCopula.hxx) ot_install_header_file (CopulaImplementation.hxx) ot_install_header_file (DistributionFactoryImplementation.hxx) ot_install_header_file (DiscreteDistribution.hxx) ot_install_header_file (ConstantRandomVector.hxx) ot_install_header_file (OTModel.hxx) ot_install_header_file (Copula.hxx) ot_install_header_file (ProcessImplementation.hxx) ot_install_header_file (Process.hxx) ot_install_header_file (DistributionParametersImplementation.hxx) ot_install_header_file (DistributionParameters.hxx)openturns-1.9/lib/src/Uncertainty/Model/CompositeRandomVector.cxx000066400000000000000000000146471307543307100253530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for Composite random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/CompositeRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CompositeRandomVector); static const Factory Factory_CompositeRandomVector; /* Standard constructor */ CompositeRandomVector::CompositeRandomVector() : RandomVectorImplementation() , function_() , p_antecedent_() { // Nothing to do } /* Standard constructor */ CompositeRandomVector::CompositeRandomVector(const Function & function, const Antecedent & p_antecedent) : RandomVectorImplementation() , function_(function) , p_antecedent_(p_antecedent) { if (function.getInputDimension() != p_antecedent->getDimension()) throw InvalidArgumentException(HERE) << "Error: trying to build a CompositeRandomVector from a RandomVector and a Function with incompatible dimensions, here RandomVector dimension=" << p_antecedent->getDimension() << " and Function input dimension=" << function.getInputDimension(); // Get the description from the underlying function setDescription(function.getOutputDescription()); } /* Standard constructor */ CompositeRandomVector::CompositeRandomVector(const Function & function, const RandomVector & antecedent) : RandomVectorImplementation() , function_(function) , p_antecedent_(antecedent.getImplementation()) { if (function.getInputDimension() != p_antecedent_->getDimension()) throw InvalidArgumentException(HERE) << "Error: trying to build a CompositeRandomVector from a RandomVector and a Function with incompatible dimensions, here RandomVector dimension=" << p_antecedent_->getDimension() << " and Function input dimension=" << function.getInputDimension(); // Get the description from the underlying function setDescription(function.getOutputDescription()); } /* Virtual constructor */ CompositeRandomVector * CompositeRandomVector::clone() const { return new CompositeRandomVector(*this); } /* String converter */ String CompositeRandomVector::__repr__() const { OSS oss; oss << "class=" << CompositeRandomVector::GetClassName() << " function=" << function_ << " antecedent=" << (p_antecedent_ ? p_antecedent_->__repr__() : ""); return oss; } /* Is the underlying random vector composite ? */ Bool CompositeRandomVector::isComposite() const { return true; } /* Here is the interface that all derived class must implement */ /* Dimension accessor */ UnsignedInteger CompositeRandomVector::getDimension() const { return function_.getOutputDimension(); } /* Realization accessor */ Point CompositeRandomVector::getRealization() const { return function_(p_antecedent_->getRealization()); } /* Numerical sample accessor */ Sample CompositeRandomVector::getSample(const UnsignedInteger size) const { Sample sample(function_(p_antecedent_->getSample(size))); const Description description(getDescription()); // It may append that the description has been overloaded by a child class // FIXME: change this ugly hack to something reasonable if (description.getSize() == sample.getDimension()) sample.setDescription(description); else sample.setDescription(function_.getOutputDescription()); return sample; } /* Mean accessor */ Point CompositeRandomVector::getMean() const { /* To be implemented by a suitable algorithm, given by the user. It could be the e.g. quadratic cumul algorithm */ throw NotYetImplementedException(HERE) << "In CompositeRandomVector::getMean() const"; } /* Covariance accessor */ CovarianceMatrix CompositeRandomVector::getCovariance() const { /* To be implemented by a suitable algorithm, given by the user. It could be the e.g. quadratic cumul algorithm */ throw NotYetImplementedException(HERE) << "In CompositeRandomVector::getCovariance() const"; } /* Get the random vector corresponding to the i-th marginal component */ CompositeRandomVector::Implementation CompositeRandomVector::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal random vector must be in the range [0, dim-1]"; return new CompositeRandomVector(function_.getMarginal(i), p_antecedent_); } /* Get the marginal random vector corresponding to indices components */ CompositeRandomVector::Implementation CompositeRandomVector::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal random vector must be in the range [0, dim-1] and must be different"; return new CompositeRandomVector(function_.getMarginal(indices), p_antecedent_); } /* Antecedent accessor */ CompositeRandomVector::Antecedent CompositeRandomVector::getAntecedent() const { return p_antecedent_; } /* Function accessor */ Function CompositeRandomVector::getFunction() const { return function_; } /* Distribution accessor */ Distribution CompositeRandomVector::getDistribution() const { throw NotYetImplementedException(HERE) << "In CompositeRandomVector::getDistribution() const"; } /* Method save() stores the object through the StorageManager */ void CompositeRandomVector::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "function_", function_ ); adv.saveAttribute( "antecedent_", *p_antecedent_ ); } /* Method load() reloads the object from the StorageManager */ void CompositeRandomVector::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "function_", function_ ); TypedInterfaceObject antecedent; adv.loadAttribute( "antecedent_", antecedent ); p_antecedent_ = antecedent.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/ConditionalRandomVector.cxx000066400000000000000000000071261307543307100256460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for distribution-based random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ConditionalRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConditionalRandomVector); static const Factory Factory_ConditionalRandomVector; /* Default constructor */ ConditionalRandomVector::ConditionalRandomVector(const Distribution & distribution, const RandomVector & randomParameters) : RandomVectorImplementation(), distribution_(distribution), randomParameters_(randomParameters) { // Check if the random parameters random vector has a dimension compatible with // the number of parameters of the distribution if (randomParameters.getDimension() != distribution.getParameterDimension()) throw InvalidArgumentException(HERE) << "Error: the random parameters dimension must be equal with the number of parameters of the distribution."; // Get the description from the underlying distribution setDescription(distribution.getDescription()); } /* Virtual constructor */ ConditionalRandomVector * ConditionalRandomVector::clone() const { return new ConditionalRandomVector(*this); } /* String converter */ String ConditionalRandomVector::__repr__() const { OSS oss; oss << "class=" << ConditionalRandomVector::GetClassName() << " distribution=" << distribution_ << " random parameters=" << randomParameters_; return oss; } /* Here is the interface that all derived class must implement */ /* Dimension accessor */ UnsignedInteger ConditionalRandomVector::getDimension() const { return distribution_.getDimension(); } /* Realization accessor */ Point ConditionalRandomVector::getRealization() const { Point parameters; return getRealization(parameters); } /* Realization accessor */ Point ConditionalRandomVector::getRealization(Point & parameters) const { parameters = randomParameters_.getRealization(); distribution_.setParameter(parameters); return distribution_.getRealization(); } /* Distribution accessor */ Distribution ConditionalRandomVector::getDistribution() const { return distribution_; } /* Random parameters accessor */ RandomVector ConditionalRandomVector::getRandomParameters() const { return randomParameters_; } /* Method save() stores the object through the StorageManager */ void ConditionalRandomVector::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "randomParameters_", randomParameters_ ); } /* Method load() reloads the object from the StorageManager */ void ConditionalRandomVector::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "randomParameters_", randomParameters_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/ConstantRandomVector.cxx000066400000000000000000000104551307543307100251730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for constant random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ConstantRandomVector.hxx" #include "openturns/Dirac.hxx" #include "openturns/SquareMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConstantRandomVector); static const Factory Factory_ConstantRandomVector; /* Default constructor */ ConstantRandomVector::ConstantRandomVector(const PointWithDescription & point) : RandomVectorImplementation() , point_(point) { // Get the description from the underlying point setDescription( point.getDescription() ); } /* Parameter constructor */ ConstantRandomVector::ConstantRandomVector(const Point & point) : RandomVectorImplementation() , point_(point) { // setDescription( Description::BuildDefault(point.getDimension(), "x") ); } /* Virtual constructor */ ConstantRandomVector * ConstantRandomVector::clone() const { return new ConstantRandomVector(*this); } /* String converter */ String ConstantRandomVector::__repr__() const { OSS oss; oss << "class=" << ConstantRandomVector::GetClassName() << " description=" << getDescription() << " point=" << point_; return oss; } /* Here is the interface that all derived class must implement */ /* Dimension accessor */ UnsignedInteger ConstantRandomVector::getDimension() const { return point_.getDimension(); } /* Realization accessor */ Point ConstantRandomVector::getRealization() const { return point_; } /* Numerical sample accessor */ Sample ConstantRandomVector::getSample(const UnsignedInteger size) const { Sample sample(size, point_); sample.setDescription(getDescription()); return sample; } /* Mean accessor */ Point ConstantRandomVector::getMean() const { return point_; } /* Covariance accessor */ CovarianceMatrix ConstantRandomVector::getCovariance() const { const UnsignedInteger dimension = getDimension(); CovarianceMatrix covariance(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) covariance(i, i) = 0.0; return covariance; } /* Get the random vector corresponding to the i-th marginal component */ ConstantRandomVector::Implementation ConstantRandomVector::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal random vector must be in the range [0, dim-1]"; return new ConstantRandomVector(Point(1, point_[i])); } /* Get the marginal random vector corresponding to indices components */ ConstantRandomVector::Implementation ConstantRandomVector::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal random vector must be in the range [0, dim-1] and must be different"; const UnsignedInteger marginalDimension = indices.getSize(); Point marginalPoint(marginalDimension); for (UnsignedInteger i = 0; i < marginalDimension; ++i) marginalPoint[i] = point_[indices[i]]; return new ConstantRandomVector(marginalPoint); } /* Distribution accessor */ Distribution ConstantRandomVector::getDistribution() const { return Dirac(point_); } /* Method save() stores the object through the StorageManager */ void ConstantRandomVector::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "point_", point_ ); } /* Method load() reloads the object from the StorageManager */ void ConstantRandomVector::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "point_", point_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/ContinuousDistribution.cxx000066400000000000000000000154511307543307100256250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Continuous distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/ContinuousDistribution.hxx" #include "openturns/Collection.hxx" #include "openturns/Distribution.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/GaussKronrod.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ContinuousDistribution); /* Default constructor */ ContinuousDistribution::ContinuousDistribution() : DistributionImplementation() { // Nothing to do } /* Virtual constructor */ ContinuousDistribution * ContinuousDistribution::clone() const { return new ContinuousDistribution(*this); } /* Comparison operator */ Bool ContinuousDistribution::operator ==(const ContinuousDistribution & other) const { return (this == &other); } /* String converter */ String ContinuousDistribution::__repr__() const { OSS oss; oss << "class=" << ContinuousDistribution::GetClassName(); return oss; } /* Get the DDF of the distribution */ Point ContinuousDistribution::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); Point ddf(dimension); const Scalar h = std::pow(pdfEpsilon_, 1.0 / 3.0); LOGINFO(OSS() << "h=" << h); for (UnsignedInteger i = 0; i < dimension; ++i) { Point left(point); left[i] += h; Point right(point); right[i] -= h; const Scalar denom = left[i] - right[i]; const Scalar pdfLeft = computePDF(left); const Scalar pdfRight = computePDF(right); ddf[i] = (pdfLeft - pdfRight) / denom; LOGINFO(OSS() << "left=" << left << ", right=" << right << ", pdfLeft=" << pdfLeft << ", pdfRight=" << pdfRight); } return ddf; } /* Get the PDF of the distribution */ Scalar ContinuousDistribution::computePDF(const Point & point) const { throw NotYetImplementedException(HERE) << "In ContinuousDistribution::computePDF(const Point & point) const"; } /* Get the CDF of the distribution */ Scalar ContinuousDistribution::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); const Point lowerBounds(getRange().getLowerBound()); const Point upperBounds(getRange().getUpperBound()); // Indices of the components to take into account in the computation Indices toKeep(0); Point reducedPoint(0); for (UnsignedInteger k = 0; k < dimension; ++ k) { const Scalar xK = point[k]; // Early exit if one component is less than its corresponding range lower bound if (xK <= lowerBounds[k]) return 0.0; // Keep only the indices for which xK is less than its corresponding range upper bound // Marginalize the others if (xK < upperBounds[k]) { toKeep.add(k); reducedPoint.add(xK); } } // k // The point has all its components greater than the corresponding range upper bound if (toKeep.getSize() == 0) { return 1.0; } // The point has some components greater than the corresponding range upper bound if (toKeep.getSize() != dimension) { // Try to reduce the dimension try { return getMarginal(toKeep)->computeCDF(reducedPoint); } catch (...) { // Fallback on the default algorithm if the getMarginal() method is not implemented } } const Interval interval(getRange().getLowerBound(), point); LOGINFO(OSS() << "In ContinuousDistribution::computeCDF, using computeProbabilityContinuous(), interval=" << interval.__str__()); return computeProbabilityContinuous(interval); } /* Get the survival function of the distribution */ Scalar ContinuousDistribution::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return computeComplementaryCDF(point); const Point lowerBounds(getRange().getLowerBound()); const Point upperBounds(getRange().getUpperBound()); Bool allOutside = true; for (UnsignedInteger i = 0; i < dimension; ++i) { if (point[i] >= upperBounds[i]) return 0.0; allOutside &= (point[i] <= lowerBounds[i]); } if (allOutside) return 1.0; const Scalar survival = computeProbability(Interval(point, getRange().getUpperBound())); return survival; } /* Build a C1 interpolation of the CDF function for 1D continuous distributions */ Collection ContinuousDistribution::interpolateCDF(const UnsignedInteger n) { if (getDimension() != 1) throw NotYetImplementedException(HERE) << "In ContinuousDistribution::interpolateCDF(const UnsignedInteger n): cannot interpolate CDF for multidimensional distributions."; const PDFWrapper pdfWrapper(this); const Scalar xMin = getRange().getLowerBound()[0]; const Scalar xMax = getRange().getUpperBound()[0]; const Scalar mu = getMean()[0]; Point locationsCDF(n); Point locationsCCDF(n); Point valuesCDF(n); Point valuesCCDF(n); Point derivativesCDF(n); Point derivativesCCDF(n); Scalar xCDFOld = xMin; Scalar xCCDFOld = xMax; locationsCDF[0] = xMin; locationsCCDF[n - 1] = xMax; GaussKronrod algo; const Scalar stepCDF = (mu - xMin) / (n - 1.0); const Scalar stepCCDF = (xMax - mu) / (n - 1.0); for (UnsignedInteger i = 1; i < n; ++i) { const Scalar xCDF = xMin + i * stepCDF; const Scalar xCCDF = xMax - i * stepCCDF; locationsCDF[i] = xCDF; locationsCCDF[n - i - 1] = xCCDF; Point ai; Point bi; Sample fi; Point ei; Scalar error = -1.0; valuesCDF[i] = valuesCDF[i - 1] + algo.integrate(pdfWrapper, xCDFOld, xCDF, error, ai, bi, fi, ei)[0]; valuesCCDF[n - i - 1] = valuesCCDF[n - i] + algo.integrate(pdfWrapper, xCCDF, xCCDFOld, error, ai, bi, fi, ei)[0]; derivativesCDF[i] = computePDF(xCDF); derivativesCCDF[n - i - 1] = -computePDF(xCCDF); xCDFOld = xCDF; xCCDFOld = xCCDF; } Collection coll(2); coll[0] = PiecewiseHermiteEvaluation(locationsCDF, valuesCDF, derivativesCDF); coll[1] = PiecewiseHermiteEvaluation(locationsCCDF, valuesCCDF, derivativesCCDF); return coll; } /* Tell if the distribution is continuous */ Bool ContinuousDistribution::isContinuous() const { return true; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/Copula.cxx000066400000000000000000000036161307543307100223020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all copulas * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Copula.hxx" #include "openturns/IndependentCopula.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Copula); /* Default constructor */ Copula::Copula() : Distribution(IndependentCopula(1)) { // Nothing to do } /* Constructor from distribution */ Copula::Copula(const Distribution & distribution) : Distribution(distribution) { // Nothing to do } /* Constructor from implementation */ Copula::Copula(const DistributionImplementation & implementation) : Distribution(implementation) { // Nothing to do } /* Constructor from implementation */ Copula::Copula(const Implementation & p_implementation) : Distribution(p_implementation) { // Nothing to do } /* Constructor from implementation */ Copula::Copula(DistributionImplementation * p_implementation) : Distribution(p_implementation) { // Nothing to do } /* String converter */ String Copula::__repr__() const { return Distribution::__repr__(); } /* String converter */ String Copula::__str__(const String & offset) const { return Distribution::__str__(offset); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/CopulaImplementation.cxx000066400000000000000000000253041307543307100252060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Continuous distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/CopulaImplementation.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/Distribution.hxx" #include "openturns/Brent.hxx" #include "openturns/Curve.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/Combinations.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/IteratedQuadrature.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CopulaImplementation); /* Default constructor */ CopulaImplementation::CopulaImplementation() : ContinuousDistribution() { // Set the flag isCopula_ here to avoid warnings on the initialization order isCopula_ = true; } /* Virtual constructor */ CopulaImplementation * CopulaImplementation::clone() const { return new CopulaImplementation(*this); } /* Comparison operator */ Bool CopulaImplementation::operator ==(const CopulaImplementation & other) const { return (this == &other) || (hasIndependentCopula() && other.hasIndependentCopula()); } Bool CopulaImplementation::equals(const DistributionImplementation & other) const { const CopulaImplementation* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String CopulaImplementation::__repr__() const { OSS oss; oss << "class=" << CopulaImplementation::GetClassName(); return oss; } Scalar CopulaImplementation::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); if (dimension == 1) return computeComplementaryCDF(point); Bool allOutside = true; for (UnsignedInteger i = 0; i < dimension; ++i) { if (point[i] >= 1.0) return 0.0; allOutside &= (point[i] <= 0.0); } if (allOutside) return 1.0; // Use Poincaré's formula Scalar value = 1.0 + (1 - 2 * (dimension % 2)) * computeCDF(point); // We know the explicit value of the 1D marginal distributions for (UnsignedInteger i = 0; i < dimension; ++i) value -= point[i]; Scalar sign = 1.0; for (UnsignedInteger i = 2; i < dimension - 1; ++i) { Scalar contribution = 0.0; Combinations::IndicesCollection indices(Combinations(i, dimension).generate()); Point subPoint(i); for (UnsignedInteger j = 0; j < indices.getSize(); ++j) { for (UnsignedInteger k = 0; k < i; ++k) subPoint[k] = point[indices[j][k]]; contribution += getMarginal(indices[j])->computeCDF(subPoint); } value += sign * contribution; sign = -sign; } return value; } /* Generic implementation of the quantile computation for copulas */ Point CopulaImplementation::computeQuantile(const Scalar prob, const Bool tail) const { const UnsignedInteger dimension = getDimension(); // Special case for bording values const Scalar q = tail ? 1.0 - prob : prob; if (q <= 0.0) return Point(dimension, 0.0); if (q >= 1.0) return Point(dimension, 1.0); // Special case for dimension 1 if (dimension == 1) return Point(1, q); QuantileWrapper wrapper(this); const Function f(bindMethod(wrapper, &QuantileWrapper::computeDiagonal, 1, 1)); Scalar leftTau = q; const Point leftPoint(1, leftTau); const Point leftValue(f(leftPoint)); Scalar leftCDF = leftValue[0]; // Upper bound of the bracketing interval Scalar rightTau = 1.0 - (1.0 - q) / dimension; Point rightPoint(1, rightTau); const Point rightValue(f(rightPoint)); Scalar rightCDF = rightValue[0]; // Use Brent's method to compute the quantile efficiently Brent solver(cdfEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); return Point(dimension, solver.solve(f, q, leftTau, rightTau, leftCDF, rightCDF)); } /* Get the mean of the copula */ Point CopulaImplementation::getMean() const { return Point(getDimension(), 0.5); } /* Get the standard deviation of the copula */ Point CopulaImplementation::getStandardDeviation() const { // 0.2886751345948128822545744 = 1 / sqrt(12) return Point(getDimension(), 0.2886751345948128822545744); } /* Get the Spearman correlation of the copula */ CorrelationMatrix CopulaImplementation::getSpearmanCorrelation() const { return getLinearCorrelation(); } struct CopulaImplementationKendallTauWrapper { CopulaImplementationKendallTauWrapper(const DistributionImplementation::Implementation & distribution) : p_distribution_(distribution) { // Nothing to do } Point kernel(const Point & point) const { return Point(1, p_distribution_->computeCDF(point) * p_distribution_->computePDF(point)); } const DistributionImplementation::Implementation & p_distribution_; }; /* Get the Kendall concordance of the copula */ CorrelationMatrix CopulaImplementation::getKendallTau() const { const UnsignedInteger dimension = getDimension(); CorrelationMatrix tau(dimension); if (hasIndependentCopula()) return tau; // Here we have a circular dependency between copulas and distributions if (hasEllipticalCopula()) { const CorrelationMatrix shape(getShapeMatrix()); for (UnsignedInteger i = 0; i < dimension; ++i) for(UnsignedInteger j = 0; j < i; ++j) tau(i, j) = std::asin(shape(i, j)) * (2.0 / M_PI); return tau; } const IteratedQuadrature integrator = IteratedQuadrature(GaussKronrod()); const Interval square(Point(2, 0.0), Point(2, 1.0)); // Performs the integration in the strictly lower triangle of the tau matrix Indices indices(2); for(UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { indices[0] = rowIndex; for (UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension_; ++columnIndex) { indices[1] = columnIndex; const Implementation marginalDistribution(getMarginal(indices)); if (!marginalDistribution->hasIndependentCopula()) { // Build the integrand const CopulaImplementationKendallTauWrapper functionWrapper(marginalDistribution); const Function function(bindMethod(functionWrapper, &CopulaImplementationKendallTauWrapper::kernel, 2, 1)); tau(rowIndex, columnIndex) = integrator.integrate(function, square)[0]; } } // loop over column indices } // loop over row indices return tau; } /* Get the skewness of the copula */ Point CopulaImplementation::getSkewness() const { return Point(getDimension(), 0.0); } /* Get the kurtosis of the copula */ Point CopulaImplementation::getKurtosis() const { // 1.8 = 9/5 return Point(getDimension(), 1.8); } struct CopulaImplementationCovarianceWrapper { CopulaImplementationCovarianceWrapper(const Distribution & distribution) : distribution_(distribution) { // Nothing to do } Point kernel(const Point & point) const { return Point(1, distribution_.computeCDF(point) - point[0] * point[1]); } const Distribution & distribution_; }; /* Compute the covariance of the copula */ void CopulaImplementation::computeCovariance() const { const UnsignedInteger dimension = getDimension(); // We need this to initialize the covariance matrix in two cases: // + this is the first call to this routine (which could be checked by testing the dimension of the copula and the dimension of the matrix // + the copula has changed from a non-independent one to the independent copula covariance_ = CovarianceMatrix(dimension); // First the diagonal terms, which are the marginal covariances // Uniform marginals, the diagonal is 1/12 for (UnsignedInteger i = 0; i < dimension; ++i) { // 0.08333333333333333333333333 = 1 / 12 covariance_(i, i) = 0.08333333333333333333333333; } // Off-diagonal terms if the copula is not the independent copula if (!hasIndependentCopula()) { const IteratedQuadrature integrator; const Interval unitSquare(Point(2, 0.0), Point(2, 1.0)); // Performs the integration for each covariance in the strictly lower triangle of the covariance matrix // We start with the loop over the coefficients because the most expensive task is to get the 2D marginal copulas Indices indices(2); for(UnsignedInteger rowIndex = 0; rowIndex < dimension; ++rowIndex) { indices[0] = rowIndex; for(UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension; ++columnIndex) { indices[1] = columnIndex; // For the usual case of a bidimensional copula, no need to extract marginal distributions Distribution marginalDistribution(*this); if (dimension > 2) marginalDistribution = getMarginal(indices); if (!marginalDistribution.getImplementation()->hasIndependentCopula()) { // Build the integrand CopulaImplementationCovarianceWrapper functionWrapper(marginalDistribution); Function function(bindMethod(functionWrapper, &CopulaImplementationCovarianceWrapper::kernel, 2, 1)); // Compute the covariance element covariance_(rowIndex, columnIndex) = integrator.integrate(function, unitSquare)[0]; } } // loop over column indices } // loop over row indices } // if !hasIndependentCopula isAlreadyComputedCovariance_ = true; } // computeCovariance /* Get the i-th marginal distribution */ CopulaImplementation::Implementation CopulaImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal distribution must be in the range [0, dim-1]"; return new IndependentCopula(1); } /* Get the copula of a distribution */ CopulaImplementation::Implementation CopulaImplementation::getCopula() const { return clone(); } /* Compute the mathematical and numerical range of the copula. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ void CopulaImplementation::computeRange() { setRange(Interval(getDimension())); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/DiscreteDistribution.cxx000066400000000000000000000052321307543307100252150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Discrete distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/DiscreteDistribution.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DiscreteDistribution); /* Default constructor */ DiscreteDistribution::DiscreteDistribution() : DistributionImplementation() , supportEpsilon_(ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon")) { // Nothing to do } /* Virtual constructor */ DiscreteDistribution * DiscreteDistribution::clone() const { return new DiscreteDistribution(*this); } /* Comparison operator */ Bool DiscreteDistribution::operator ==(const DiscreteDistribution & other) const { if (this == &other) return true; return false; } /* String converter */ String DiscreteDistribution::__repr__() const { OSS oss; oss << "class=" << DiscreteDistribution::GetClassName(); return oss; } /* Tell if the distribution is continuous */ Bool DiscreteDistribution::isContinuous() const { return false; } /* Tell if the distribution is discrete */ Bool DiscreteDistribution::isDiscrete() const { return true; } /* Tell if the distribution is integer valued */ Bool DiscreteDistribution::isIntegral() const { return true; } /* Support tolerance accessor */ void DiscreteDistribution::setSupportEpsilon(const Scalar epsilon) { supportEpsilon_ = epsilon; } Scalar DiscreteDistribution::getSupportEpsilon() const { return supportEpsilon_; } /* Method save() stores the object through the StorageManager */ void DiscreteDistribution::save(Advocate & adv) const { DistributionImplementation::save(adv); adv.saveAttribute( "supportEpsilon_", supportEpsilon_ ); } /* Method load() reloads the object from the StorageManager */ void DiscreteDistribution::load(Advocate & adv) { DistributionImplementation::load(adv); adv.loadAttribute( "supportEpsilon_", supportEpsilon_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/Distribution.cxx000066400000000000000000001027741307543307100235430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Distribution.hxx" #include "openturns/Uniform.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Distribution); /* Default constructor */ Distribution::Distribution() : TypedInterfaceObject(new Uniform()) { // Nothing to do } /* Default constructor */ Distribution::Distribution(const DistributionImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ Distribution::Distribution(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Initialize any other class members here // At last, allocate memory space if needed, but go to destructor to free it } /* Constructor from implementation pointer */ Distribution::Distribution(DistributionImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Initialize any other class members here // At last, allocate memory space if needed, but go to destructor to free it } /* Comparison operator */ Bool Distribution::operator ==(const Distribution & other) const { if (this == &other) return true; return *getImplementation() == *other.getImplementation(); } /* Comparison operator */ Bool Distribution::operator !=(const Distribution & other) const { return !operator==(other); } /* Addition operator */ Distribution Distribution::operator + (const Distribution & other) const { return getImplementation()->operator +(other.getImplementation()); } Distribution Distribution::operator + (const Scalar value) const { return getImplementation()->operator +(value); } /* Substraction operator */ Distribution Distribution::operator - (const Distribution & other) const { return getImplementation()->operator -(other.getImplementation()); } Distribution Distribution::operator - (const Scalar value) const { return getImplementation()->operator -(value); } /* Multiplication operator */ Distribution Distribution::operator * (const Distribution & other) const { return getImplementation()->operator *(other.getImplementation()); } Distribution Distribution::operator * (const Scalar value) const { return getImplementation()->operator *(value); } /* Division operator */ Distribution Distribution::operator / (const Distribution & other) const { return getImplementation()->operator /(other.getImplementation()); } Distribution Distribution::operator / (const Scalar value) const { return getImplementation()->operator /(value); } /* Transformation of distributions by usual functions */ Distribution Distribution::cos() const { return getImplementation()->cos(); } Distribution Distribution::sin() const { return getImplementation()->sin(); } Distribution Distribution::tan() const { return getImplementation()->tan(); } Distribution Distribution::acos() const { return getImplementation()->acos(); } Distribution Distribution::asin() const { return getImplementation()->asin(); } Distribution Distribution::atan() const { return getImplementation()->atan(); } Distribution Distribution::cosh() const { return getImplementation()->cosh(); } Distribution Distribution::sinh() const { return getImplementation()->sinh(); } Distribution Distribution::tanh() const { return getImplementation()->tanh(); } Distribution Distribution::acosh() const { return getImplementation()->acosh(); } Distribution Distribution::asinh() const { return getImplementation()->asinh(); } Distribution Distribution::atanh() const { return getImplementation()->atanh(); } Distribution Distribution::exp() const { return getImplementation()->exp(); } Distribution Distribution::log() const { return getImplementation()->log(); } Distribution Distribution::ln() const { return getImplementation()->ln(); } Distribution Distribution::pow(const Scalar exponent) const { return getImplementation()->pow(exponent); } Distribution Distribution::pow(const SignedInteger exponent) const { return getImplementation()->pow(exponent); } Distribution Distribution::sqr() const { return getImplementation()->sqr(); } Distribution Distribution::inverse() const { return getImplementation()->inverse(); } Distribution Distribution::sqrt() const { return getImplementation()->sqrt(); } Distribution Distribution::cbrt() const { return getImplementation()->cbrt(); } Distribution Distribution::abs() const { return getImplementation()->abs(); } /* String converter */ String Distribution::__repr__() const { return getImplementation()->__repr__(); } /* String converter */ String Distribution::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Weight accessor */ void Distribution::setWeight(const Scalar w) { copyOnWrite(); getImplementation()->setWeight(w); } /* Weight accessor */ Scalar Distribution::getWeight() const { return getImplementation()->getWeight(); } /* Dimension accessor */ UnsignedInteger Distribution::getDimension() const { return getImplementation()->getDimension(); } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar Distribution::getRoughness() const { return getImplementation()->getRoughness(); } /* Get the mean of the distribution */ Point Distribution::getMean() const { return getImplementation()->getMean(); } /* Get the standard deviation of the distribution */ Point Distribution::getStandardDeviation() const { return getImplementation()->getStandardDeviation(); } /* Get the skewness of the distribution */ Point Distribution::getSkewness() const { return getImplementation()->getSkewness(); } /* Get the kurtosis of the distribution */ Point Distribution::getKurtosis() const { return getImplementation()->getKurtosis(); } /* Get the raw moments of the standardized distribution */ Point Distribution::getStandardMoment(const UnsignedInteger n) const { return getImplementation()->getStandardMoment(n); } /* Get the raw moments of the distribution */ Point Distribution::getMoment(const UnsignedInteger n) const { return getImplementation()->getMoment(n); } /* Get the centered moments about the mean of the distribution */ Point Distribution::getCenteredMoment(const UnsignedInteger n) const { return getImplementation()->getCenteredMoment(n); } /* Get the shifted moments of the distribution */ Point Distribution::getShiftedMoment(const UnsignedInteger n, const Point & shift) const { return getImplementation()->getShiftedMoment(n, shift); } /* Get the covariance of the distribution */ CovarianceMatrix Distribution::getCovariance() const { return getImplementation()->getCovariance(); } /* Cholesky factor of the covariance matrix accessor */ TriangularMatrix Distribution::getCholesky() const { return getImplementation()->getCholesky(); } /* Inverse of the Cholesky factor of the covariance matrix accessor */ TriangularMatrix Distribution::getInverseCholesky() const { return getImplementation()->getInverseCholesky(); } /* Get the linear correlation of the distribution */ CorrelationMatrix Distribution::getCorrelation() const { return getImplementation()->getCorrelation(); } CorrelationMatrix Distribution::getLinearCorrelation() const { return getImplementation()->getLinearCorrelation(); } CorrelationMatrix Distribution::getPearsonCorrelation() const { return getImplementation()->getPearsonCorrelation(); } /* Get the Spearman correlation of the distribution */ CorrelationMatrix Distribution::getSpearmanCorrelation() const { return getImplementation()->getSpearmanCorrelation(); } /* Get the Kendall concordance of the distribution */ CorrelationMatrix Distribution::getKendallTau() const { return getImplementation()->getKendallTau(); } /* Get the Shape matrix of the copula */ CorrelationMatrix Distribution::getShapeMatrix() const { return getImplementation()->getShapeMatrix(); } /* Get one realization of the distribution */ Point Distribution::getRealization() const { return getImplementation()->getRealization(); } /* Get a numerical sample whose elements follow the distribution */ Sample Distribution::getSample(const UnsignedInteger size) const { return getImplementation()->getSample(size); } /* Get the DDF of the distribution */ Point Distribution::computeDDF(const Point & point) const { return getImplementation()->computeDDF(point); } /* Get the PDF of the distribution */ Scalar Distribution::computePDF(const Point & point) const { return getImplementation()->computePDF(point); } Scalar Distribution::computeLogPDF(const Point & point) const { return getImplementation()->computeLogPDF(point); } /* Get the CDF of the distribution */ Scalar Distribution::computeCDF(const Point & point) const { return getImplementation()->computeCDF(point); } Scalar Distribution::computeComplementaryCDF(const Point & point) const { return getImplementation()->computeComplementaryCDF(point); } Scalar Distribution::computeSurvivalFunction(const Point & point) const { return getImplementation()->computeSurvivalFunction(point); } Point Distribution::computeInverseSurvivalFunction(const Scalar prob) const { return getImplementation()->computeInverseSurvivalFunction(prob); } Point Distribution::computeInverseSurvivalFunction(const Scalar prob, Scalar & marginalProb) const { return getImplementation()->computeInverseSurvivalFunction(prob, marginalProb); } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex Distribution::computeCharacteristicFunction(const Scalar x) const { return getImplementation()->computeCharacteristicFunction(x); } Complex Distribution::computeLogCharacteristicFunction(const Scalar x) const { return getImplementation()->computeLogCharacteristicFunction(x); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Scalar Distribution::computeGeneratingFunction(const Scalar z) const { return getImplementation()->computeGeneratingFunction(z); } Scalar Distribution::computeLogGeneratingFunction(const Scalar z) const { return getImplementation()->computeLogGeneratingFunction(z); } Complex Distribution::computeGeneratingFunction(const Complex & z) const { return getImplementation()->computeGeneratingFunction(z); } Complex Distribution::computeLogGeneratingFunction(const Complex & z) const { return getImplementation()->computeLogGeneratingFunction(z); } /* Get the DDF of the distribution (for a sample) */ Sample Distribution::computeDDF(const Sample & sample) const { return getImplementation()->computeDDF(sample); } /* Get the PDF of the distribution (for a sample) */ Sample Distribution::computePDF(const Sample & sample) const { return getImplementation()->computePDF(sample); } Sample Distribution::computeLogPDF(const Sample & sample) const { return getImplementation()->computeLogPDF(sample); } /* Get the CDF of the distribution (for a sample) */ Sample Distribution::computeCDF(const Sample & sample) const { return getImplementation()->computeCDF(sample); } Sample Distribution::computeComplementaryCDF(const Sample & sample) const { return getImplementation()->computeComplementaryCDF(sample); } Sample Distribution::computeSurvivalFunction(const Sample & sample) const { return getImplementation()->computeSurvivalFunction(sample); } /* Get the DDF of the distribution (for a scalar) */ Scalar Distribution::computeDDF(const Scalar scalar) const { return getImplementation()->computeDDF(scalar); } /* Get the PDF of the distribution (for a scalar) */ Scalar Distribution::computePDF(const Scalar scalar) const { return getImplementation()->computePDF(scalar); } Scalar Distribution::computeLogPDF(const Scalar scalar) const { return getImplementation()->computeLogPDF(scalar); } /* Get the CDF of the distribution (for a scalar) */ Scalar Distribution::computeCDF(const Scalar scalar) const { return getImplementation()->computeCDF(scalar); } Scalar Distribution::computeComplementaryCDF(const Scalar scalar) const { return getImplementation()->computeComplementaryCDF(scalar); } Scalar Distribution::computeSurvivalFunction(const Scalar scalar) const { return getImplementation()->computeSurvivalFunction(scalar); } /* Get the probability content of an interval */ Scalar Distribution::computeProbability(const Interval & interval) const { return getImplementation()->computeProbability(interval); } /* Compute the PDF of 1D distributions over a regular grid */ Sample Distribution::computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Sample grid; return getImplementation()->computePDF(xMin, xMax, pointNumber, grid); } /* Compute the log-PDF of 1D distributions over a regular grid */ Sample Distribution::computeLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Sample grid; return getImplementation()->computeLogPDF(xMin, xMax, pointNumber, grid); } /* Compute the CDF of 1D distributions over a regular grid */ Sample Distribution::computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Sample grid; return getImplementation()->computeCDF(xMin, xMax, pointNumber, grid); } Sample Distribution::computeComplementaryCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Sample grid; return getImplementation()->computeComplementaryCDF(xMin, xMax, pointNumber, grid); } /* Get the PDF gradient of the distribution */ Point Distribution::computePDFGradient(const Point & point) const { return getImplementation()->computePDFGradient(point); } Sample Distribution::computePDFGradient(const Sample & sample) const { return getImplementation()->computePDFGradient(sample); } /* Get the logPDF gradient of the distribution */ Point Distribution::computeLogPDFGradient(const Point & point) const { return getImplementation()->computeLogPDFGradient(point); } Sample Distribution::computeLogPDFGradient(const Sample & sample) const { return getImplementation()->computeLogPDFGradient(sample); } /* Get the CDF gradient of the distribution */ Point Distribution::computeCDFGradient(const Point & point) const { return getImplementation()->computeCDFGradient(point); } Sample Distribution::computeCDFGradient(const Sample & sample) const { return getImplementation()->computeCDFGradient(sample); } /* Get the mathematical and numerical range of the distribution. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ Interval Distribution::getRange() const { return getImplementation()->getRange(); } /* Get the quantile of the distribution */ Point Distribution::computeQuantile(const Scalar prob, const Bool tail) const { return getImplementation()->computeQuantile(prob, tail); } Point Distribution::computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const { return getImplementation()->computeQuantile(prob, tail, marginalProb); } Sample Distribution::computeQuantile(const Point & prob, const Bool tail) const { return getImplementation()->computeQuantile(prob, tail); } /* Get the product minimum volume interval containing at least a given probability of the distribution. The minimum volume interval [a, b] is such that: a\in[lowerBound, F^{-1}(1-p)] b = F^{-1}(p+F(a)) f(a) = f(b) = f(F^{-1}(p+F(a))) so we look for the root of f(F^{-1}(p+F(a))) - f(a) */ Interval Distribution::computeMinimumVolumeInterval(const Scalar prob) const { return getImplementation()->computeMinimumVolumeInterval(prob); } Interval Distribution::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return getImplementation()->computeMinimumVolumeIntervalWithMarginalProbability(prob, marginalProb); } /* Get the product bilateral confidence interval containing at least a given probability of the distribution. The bilateral confidence interval [a, b] is such that: for all i\in{1,...,d}, P(X_i\in[a_i, b_i])=\beta where \beta is such that P(X\in\prod_{i=1}^d[a_i, b_i])=p */ Interval Distribution::computeBilateralConfidenceInterval(const Scalar prob) const { return getImplementation()->computeBilateralConfidenceInterval(prob); } Interval Distribution::computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { return getImplementation()->computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb); } /* Get the product unilateral confidence interval containing at least a given probability of the distribution. The bilateral confidence interval [a, b] is such that: if upper == false for all i\in{1,...,d}, a_i=-\intfy and P(X_i<=b_i)=\beta if upper == true for all i\in{1,...,d}, P(a_i<=X_i)=\beta and b_i=\intfy where in both cases \beta is such that P(X\in\prod_{i=1}^d[a_i, b_i])=p */ Interval Distribution::computeUnilateralConfidenceInterval(const Scalar prob, const Bool tail) const { return getImplementation()->computeUnilateralConfidenceInterval(prob, tail); } Interval Distribution::computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const { return getImplementation()->computeUnilateralConfidenceIntervalWithMarginalProbability(prob, tail, marginalProb); } /* Get the minimum volume level set containing at least a given probability of the distribution. The minimum volume level A(p) set is such that A(p)={x\in R^n | y(x) <= y_p} where y(x)=-\log X and y_p is the p-quantile of Y=pdf(X) */ LevelSet Distribution::computeMinimumVolumeLevelSet(const Scalar prob) const { return getImplementation()->computeMinimumVolumeLevelSet(prob); } LevelSet Distribution::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { return getImplementation()->computeMinimumVolumeLevelSetWithThreshold(prob, threshold); } /* Compute the quantile over a regular grid */ Sample Distribution::computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail) const { return getImplementation()->computeQuantile(qMin, qMax, pointNumber, tail); } /* Get the implementation of the distribution */ Distribution::Implementation Distribution::getImplementation() const { return p_implementation_; } /* Check if the distribution is elliptical */ Bool Distribution::isElliptical() const { return getImplementation()->isElliptical(); } /* Check if the distribution is a copula */ Bool Distribution::isCopula() const { return getImplementation()->isCopula(); } /* Check if the distribution is continuous */ Bool Distribution::isContinuous() const { return getImplementation()->isContinuous(); } /* Check if the distribution is discrete */ Bool Distribution::isDiscrete() const { return getImplementation()->isDiscrete(); } /* Tell if the distribution is integer valued */ Bool Distribution::isIntegral() const { return getImplementation()->isIntegral(); } /* Tell if the distribution has elliptical copula */ Bool Distribution::hasEllipticalCopula() const { return getImplementation()->hasEllipticalCopula(); } /* Tell if the distribution has independent copula */ Bool Distribution::hasIndependentCopula() const { return getImplementation()->hasIndependentCopula(); } /* Get the support of a distribution that intersect a given interval */ Sample Distribution::getSupport(const Interval & interval) const { return getImplementation()->getSupport(interval); } /* Get the support on the whole range */ Sample Distribution::getSupport() const { return getImplementation()->getSupport(); } /* Get the discrete probability levels */ Point Distribution::getProbabilities() const { return getImplementation()->getProbabilities(); } /* Get the PDF singularities inside of the range - 1D only */ Point Distribution::getSingularities() const { return getImplementation()->getSingularities(); } /* Compute the density generator of the elliptical generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R(x-mu)) */ Scalar Distribution::computeDensityGenerator(const Scalar betaSquare) const { return getImplementation()->computeDensityGenerator(betaSquare); } /* Compute the derivative of the density generator */ Scalar Distribution::computeDensityGeneratorDerivative(const Scalar betaSquare) const { return getImplementation()->computeDensityGeneratorDerivative(betaSquare); } /* Compute the seconde derivative of the density generator */ Scalar Distribution::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const { return getImplementation()->computeDensityGeneratorSecondDerivative(betaSquare); } /* Compute the radial distribution CDF */ Scalar Distribution::computeRadialDistributionCDF (const Scalar radius, const Bool tail) const { return getImplementation()->computeRadialDistributionCDF(radius, tail); } /* Get the i-th marginal distribution */ Distribution Distribution::getMarginal(const UnsignedInteger i) const { return *(getImplementation()->getMarginal(i)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ Distribution Distribution::getMarginal(const Indices & indices) const { return *(getImplementation()->getMarginal(indices)); } /* Get the copula of a distribution */ Distribution Distribution::getCopula() const { return getImplementation()->getCopula(); } /* Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Distribution::computeConditionalDDF(const Scalar x, const Point & y) const { return getImplementation()->computeConditionalDDF(x, y); } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Distribution::computeConditionalPDF(const Scalar x, const Point & y) const { return getImplementation()->computeConditionalPDF(x, y); } Point Distribution::computeConditionalPDF(const Point & x, const Sample & y) const { return getImplementation()->computeConditionalPDF(x, y); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar Distribution::computeConditionalCDF(const Scalar x, const Point & y) const { return getImplementation()->computeConditionalCDF(x, y); } Point Distribution::computeConditionalCDF(const Point & x, const Sample & y) const { return getImplementation()->computeConditionalCDF(x, y); } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar Distribution::computeConditionalQuantile(const Scalar q, const Point & y) const { return getImplementation()->computeConditionalQuantile(q, y); } Point Distribution::computeConditionalQuantile(const Point & q, const Sample & y) const { return getImplementation()->computeConditionalQuantile(q, y); } /* Get the isoprobabilist transformation */ Distribution::IsoProbabilisticTransformation Distribution::getIsoProbabilisticTransformation() const { return getImplementation()->getIsoProbabilisticTransformation(); } /* Get the inverse isoprobabilist transformation */ Distribution::InverseIsoProbabilisticTransformation Distribution::getInverseIsoProbabilisticTransformation() const { return getImplementation()->getInverseIsoProbabilisticTransformation(); } /* Get the standard distribution */ Distribution Distribution::getStandardDistribution() const { return getImplementation()->getStandardDistribution(); } /* Get the standard representative in the parametric family, associated with the standard moments */ Distribution Distribution::getStandardRepresentative() const { return getImplementation()->getStandardRepresentative(); } /* Draw the PDF of the distribution when its dimension is 1 */ Graph Distribution::drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawPDF(xMin, xMax, pointNumber); } /* Draw the PDF of the distribution when its dimension is 1 */ Graph Distribution::drawPDF(const UnsignedInteger pointNumber) const { return getImplementation()->drawPDF(pointNumber); } /* Draw the PDF of a 1D marginal */ Graph Distribution::drawMarginal1DPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawMarginal1DPDF(marginalIndex, xMin, xMax, pointNumber); } /* Draw the PDF of the distribution when its dimension is 2 */ Graph Distribution::drawPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawPDF(xMin, xMax, pointNumber); } /* Draw the PDF of the distribution when its dimension is 2 */ Graph Distribution::drawPDF(const Point & xMin, const Point & xMax) const { return getImplementation()->drawPDF(xMin, xMax); } /* Draw the PDF of the distribution when its dimension is 2 */ Graph Distribution::drawPDF(const Indices & pointNumber) const { return getImplementation()->drawPDF(pointNumber); } /* Draw the PDF of a 2D marginal */ Graph Distribution::drawMarginal2DPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawMarginal2DPDF(firstMarginal, secondMarginal, xMin, xMax, pointNumber); } /* Draw the PDF of the distribution when its dimension is 1 or 2 */ Graph Distribution::drawPDF() const { return getImplementation()->drawPDF(); } /* Draw the log-PDF of the distribution when its dimension is 1 */ Graph Distribution::drawLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawLogPDF(xMin, xMax, pointNumber); } /* Draw the log-PDF of the distribution when its dimension is 1 */ Graph Distribution::drawLogPDF(const UnsignedInteger pointNumber) const { return getImplementation()->drawLogPDF(pointNumber); } /* Draw the log-PDF of a 1D marginal */ Graph Distribution::drawMarginal1DLogPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawMarginal1DLogPDF(marginalIndex, xMin, xMax, pointNumber); } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph Distribution::drawLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawLogPDF(xMin, xMax, pointNumber); } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph Distribution::drawLogPDF(const Point & xMin, const Point & xMax) const { return getImplementation()->drawLogPDF(xMin, xMax); } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph Distribution::drawLogPDF(const Indices & pointNumber) const { return getImplementation()->drawLogPDF(pointNumber); } /* Draw the log-PDF of a 2D marginal */ Graph Distribution::drawMarginal2DLogPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawMarginal2DLogPDF(firstMarginal, secondMarginal, xMin, xMax, pointNumber); } /* Draw the log-PDF of the distribution when its dimension is 1 or 2 */ Graph Distribution::drawLogPDF() const { return getImplementation()->drawLogPDF(); } /* Draw the CDF of the distribution when its dimension is 1 */ Graph Distribution::drawCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawCDF(xMin, xMax, pointNumber); } /* Draw the CDF of the distribution when its dimension is 1 */ Graph Distribution::drawCDF(const UnsignedInteger pointNumber) const { return getImplementation()->drawCDF(pointNumber); } /* Draw the CDF of a 1D marginal */ Graph Distribution::drawMarginal1DCDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawMarginal1DCDF(marginalIndex, xMin, xMax, pointNumber); } /* Draw the CDF of the distribution when its dimension is 2 */ Graph Distribution::drawCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawCDF(xMin, xMax, pointNumber); } /* Draw the CDF of the distribution when its dimension is 2 */ Graph Distribution::drawCDF(const Point & xMin, const Point & xMax) const { return getImplementation()->drawCDF(xMin, xMax); } /* Draw the CDF of the distribution when its dimension is 2 */ Graph Distribution::drawCDF(const Indices & pointNumber) const { return getImplementation()->drawCDF(pointNumber); } /* Draw the CDF of a 2D marginal */ Graph Distribution::drawMarginal2DCDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { return getImplementation()->drawMarginal2DCDF(firstMarginal, secondMarginal, xMin, xMax, pointNumber); } /* Draw the CDF of the distribution when its dimension is 1 or 2 */ Graph Distribution::drawCDF() const { return getImplementation()->drawCDF(); } /* Draw the quantile of the distribution when its dimension is 1 or 2 */ Graph Distribution::drawQuantile(const UnsignedInteger pointNumber) const { return getImplementation()->drawQuantile(pointNumber); } Graph Distribution::drawQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber) const { return getImplementation()->drawQuantile(qMin, qMax, pointNumber); } /* Parameters value and description accessor */ Distribution::PointWithDescriptionCollection Distribution::getParametersCollection() const { return getImplementation()->getParametersCollection(); } void Distribution::setParametersCollection(const PointWithDescriptionCollection & parametersCollection) { copyOnWrite(); getImplementation()->setParametersCollection(parametersCollection); } void Distribution::setParametersCollection(const PointCollection & parametersCollection) { copyOnWrite(); getImplementation()->setParametersCollection(parametersCollection); } /* Parameters value accessor */ void Distribution::setParameter(const Point & parameters) { copyOnWrite(); getImplementation()->setParameter(parameters); } Point Distribution::getParameter() const { return getImplementation()->getParameter(); } /* Parameters description accessor */ Description Distribution::getParameterDescription() const { return getImplementation()->getParameterDescription(); } /* Parameters number */ UnsignedInteger Distribution::getParameterDimension() const { return getImplementation()->getParameterDimension(); } /* Description accessor */ void Distribution::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } Description Distribution::getDescription() const { return getImplementation()->getDescription(); } /* Accessor to PDF computation precision */ Scalar Distribution::getPDFEpsilon() const { return getImplementation()->getPDFEpsilon(); } /* Accessor to CDF computation precision */ Scalar Distribution::getCDFEpsilon() const { return getImplementation()->getCDFEpsilon(); } /* Get a positon indicator for a 1D distribution */ Scalar Distribution::getPositionIndicator() const { return getImplementation()->getPositionIndicator(); } /* Get a dispersion indicator for a 1D distribution */ Scalar Distribution::getDispersionIndicator() const { return getImplementation()->getDispersionIndicator(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/DistributionFactory.cxx000066400000000000000000000170001307543307100250560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all distribution factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DistributionFactory.hxx" #include "openturns/Description.hxx" #include "openturns/Path.hxx" #include "openturns/Exception.hxx" #include "openturns/AliMikhailHaqCopulaFactory.hxx" #include "openturns/ArcsineFactory.hxx" #include "openturns/BernoulliFactory.hxx" #include "openturns/BetaFactory.hxx" #include "openturns/BinomialFactory.hxx" #include "openturns/BurrFactory.hxx" #include "openturns/ChiFactory.hxx" #include "openturns/ChiSquareFactory.hxx" #include "openturns/ClaytonCopulaFactory.hxx" #include "openturns/DiracFactory.hxx" #include "openturns/DirichletFactory.hxx" #include "openturns/ExponentialFactory.hxx" #include "openturns/FarlieGumbelMorgensternCopulaFactory.hxx" #include "openturns/FisherSnedecorFactory.hxx" #include "openturns/FrankCopulaFactory.hxx" #include "openturns/GammaFactory.hxx" #include "openturns/GeneralizedParetoFactory.hxx" #include "openturns/GeometricFactory.hxx" #include "openturns/GumbelCopulaFactory.hxx" #include "openturns/GumbelFactory.hxx" #include "openturns/HistogramFactory.hxx" #include "openturns/InverseNormalFactory.hxx" #include "openturns/LaplaceFactory.hxx" #include "openturns/LogisticFactory.hxx" #include "openturns/LogNormalFactory.hxx" #include "openturns/LogUniformFactory.hxx" #include "openturns/MeixnerDistributionFactory.hxx" #include "openturns/MultinomialFactory.hxx" #include "openturns/NegativeBinomialFactory.hxx" #include "openturns/NormalCopulaFactory.hxx" #include "openturns/NormalFactory.hxx" #include "openturns/PoissonFactory.hxx" #include "openturns/RayleighFactory.hxx" #include "openturns/RiceFactory.hxx" #include "openturns/SkellamFactory.hxx" #include "openturns/StudentFactory.hxx" #include "openturns/TrapezoidalFactory.hxx" #include "openturns/TriangularFactory.hxx" #include "openturns/TruncatedNormalFactory.hxx" #include "openturns/UniformFactory.hxx" #include "openturns/UserDefinedFactory.hxx" #include "openturns/WeibullFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionFactory); /* Catalog of factories */ DistributionFactory::DistributionFactoryCollection DistributionFactory::GetContinuousUniVariateFactories() { DistributionFactoryCollection collection(0); collection.add(ArcsineFactory()); collection.add(BetaFactory()); collection.add(BurrFactory()); collection.add(ChiFactory()); collection.add(ChiSquareFactory()); collection.add(DirichletFactory()); collection.add(ExponentialFactory()); collection.add(FisherSnedecorFactory()); collection.add(GammaFactory()); collection.add(GeneralizedParetoFactory()); collection.add(GumbelFactory()); collection.add(HistogramFactory()); collection.add(InverseNormalFactory()); collection.add(LaplaceFactory()); collection.add(LogisticFactory()); collection.add(LogNormalFactory()); collection.add(LogUniformFactory()); collection.add(MeixnerDistributionFactory()); collection.add(NormalFactory()); collection.add(RayleighFactory()); collection.add(RiceFactory()); collection.add(StudentFactory()); collection.add(TrapezoidalFactory()); collection.add(TriangularFactory()); collection.add(TruncatedNormalFactory()); collection.add(UniformFactory()); collection.add(WeibullFactory()); return collection; } DistributionFactory::DistributionFactoryCollection DistributionFactory::GetContinuousMultiVariateFactories() { DistributionFactoryCollection collection(0); collection.add(AliMikhailHaqCopulaFactory()); collection.add(ClaytonCopulaFactory()); collection.add(DirichletFactory()); collection.add(FarlieGumbelMorgensternCopulaFactory()); collection.add(FrankCopulaFactory()); collection.add(GumbelCopulaFactory()); collection.add(NormalCopulaFactory()); collection.add(NormalFactory()); collection.add(StudentFactory()); return collection; } DistributionFactory::DistributionFactoryCollection DistributionFactory::GetDiscreteUniVariateFactories() { DistributionFactoryCollection collection(0); collection.add(BernoulliFactory()); collection.add(BinomialFactory()); collection.add(DiracFactory()); collection.add(GeometricFactory()); collection.add(MultinomialFactory()); collection.add(NegativeBinomialFactory()); collection.add(PoissonFactory()); collection.add(UserDefinedFactory()); collection.add(SkellamFactory()); return collection; } DistributionFactory::DistributionFactoryCollection DistributionFactory::GetDiscreteMultiVariateFactories() { DistributionFactoryCollection collection(0); collection.add(DiracFactory()); collection.add(MultinomialFactory()); collection.add(UserDefinedFactory()); return collection; } DistributionFactory::DistributionFactoryCollection DistributionFactory::GetUniVariateFactories() { DistributionFactoryCollection collection(DistributionFactory::GetContinuousUniVariateFactories()); collection.add(DistributionFactory::GetDiscreteUniVariateFactories()); return collection; } DistributionFactory::DistributionFactoryCollection DistributionFactory::GetMultiVariateFactories() { DistributionFactoryCollection collection(DistributionFactory::GetContinuousMultiVariateFactories()); collection.add(DistributionFactory::GetDiscreteMultiVariateFactories()); return collection; } /* Default constructor */ DistributionFactory::DistributionFactory(const UnsignedInteger bootstrapSize) : TypedInterfaceObject(new DistributionFactoryImplementation(bootstrapSize)) { // Nothing to do } /* Parameter constructor */ DistributionFactory::DistributionFactory(const DistributionFactoryImplementation & factory) : TypedInterfaceObject(factory.clone()) { // Nothing to do } /* String converter */ String DistributionFactory::__repr__() const { OSS oss; oss << "class=" << DistributionFactory::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String DistributionFactory::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Here is the interface that all derived class must implement */ Distribution DistributionFactory::build(const Sample & sample) const { return getImplementation()->build(sample); } Distribution DistributionFactory::build(const Point & parameters) const { return getImplementation()->build(parameters); } Distribution DistributionFactory::build() const { return getImplementation()->build(); } DistributionFactoryResult DistributionFactory::buildEstimator(const Sample & sample) const { return getImplementation()->buildEstimator(sample); } DistributionFactoryResult DistributionFactory::buildEstimator(const Sample & sample, const DistributionParameters & parameters) const { return getImplementation()->buildEstimator(sample, parameters); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/DistributionFactoryImplementation.cxx000066400000000000000000000207541307543307100277760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all distribution factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/BootstrapExperiment.hxx" #include "openturns/NormalFactory.hxx" #include "openturns/KernelSmoothing.hxx" #include "openturns/Normal.hxx" #include "openturns/ParametrizedDistribution.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionFactoryImplementation); static const Factory Factory_DistributionFactoryImplementation; /* Default constructor */ DistributionFactoryImplementation::DistributionFactoryImplementation(const UnsignedInteger bootstrapSize) : PersistentObject() , bootstrapSize_(bootstrapSize) { // Nothing to do } /* Virtual constructor */ DistributionFactoryImplementation * DistributionFactoryImplementation::clone() const { return new DistributionFactoryImplementation(*this); } /* String converter */ String DistributionFactoryImplementation::__repr__() const { OSS oss(true); oss << "class=" << this->getClassName(); return oss; } /* String converter */ String DistributionFactoryImplementation::__str__(const String & offset) const { return this->getClassName(); } /* Here is the interface that all derived class must implement */ /* Build a distribution based on a sample */ DistributionFactoryImplementation::Implementation DistributionFactoryImplementation::build(const Sample & sample) const { throw NotYetImplementedException(HERE) << "In DistributionFactoryImplementation::build(const Sample & sample) const"; } /* Build a distribution based on a set of parameters */ DistributionFactoryImplementation::Implementation DistributionFactoryImplementation::build(const Point & parameters) const { throw NotYetImplementedException(HERE) << "In DistributionFactoryImplementation::build(const PointCollection & parameters) const"; } /* Build a distribution using its default constructor */ DistributionFactoryImplementation::Implementation DistributionFactoryImplementation::build() const { throw NotYetImplementedException(HERE) << "In DistributionFactoryImplementation::build() const"; } DistributionFactoryResult DistributionFactoryImplementation::buildEstimator(const Sample & sample) const { return buildBootStrapEstimator(sample); } DistributionFactoryResult DistributionFactoryImplementation::buildEstimator(const Sample & sample, const DistributionParameters & parameters) const { String parametersDistributionName(parameters.getDistribution().getImplementation()->getClassName()); String referenceDistributionName(build().getImplementation()->getClassName()); if (parametersDistributionName != referenceDistributionName) throw InvalidArgumentException(HERE) << "Cannot use a " << parametersDistributionName << " parametrization to build a " << referenceDistributionName; DistributionFactoryResult nativeResult(buildEstimator(sample)); Distribution nativeDistribution(nativeResult.getDistribution()); DistributionParameters parameters2(parameters); Point newParameter(parameters.inverse(nativeDistribution.getParameter())); parameters2.setValues(newParameter); ParametrizedDistribution distribution(parameters2); Distribution parameterDistribution; Distribution nativeParameterDistribution(nativeResult.getParameterDistribution()); if (nativeParameterDistribution.getImplementation()->getClassName() == "Normal") { Matrix delta(parameters2.gradient()); CovarianceMatrix sigma(nativeParameterDistribution.getCovariance()); parameterDistribution = Normal(newParameter, CovarianceMatrix((delta * sigma * delta.transpose()).getImplementation())); } else { UnsignedInteger bootstrapSize = getBootstrapSize(); BootstrapExperiment experiment(sample); Sample parameterSample(0, distribution.getParameterDimension()); for (UnsignedInteger i = 0; i < bootstrapSize; ++ i) { Sample bootstrapSample(experiment.generate()); Distribution estimatedDistribution(build(bootstrapSample)); Point newEstimatedParameter(parameters.inverse(estimatedDistribution.getParameter())); parameterSample.add(newEstimatedParameter); } KernelSmoothing factory; parameterDistribution = factory.build(parameterSample); } DistributionFactoryResult result(distribution, parameterDistribution); return result; } DistributionFactoryResult DistributionFactoryImplementation::buildBootStrapEstimator(const Sample & sample, const Bool isGaussian) const { Distribution distribution(build(sample)); UnsignedInteger bootstrapSize = getBootstrapSize(); BootstrapExperiment experiment(sample); Sample parameterSample(0, distribution.getParameterDimension()); for (UnsignedInteger i = 0; i < bootstrapSize; ++ i) { Sample bootstrapSample(experiment.generate()); Distribution estimatedDistribution(build(bootstrapSample)); parameterSample.add(estimatedDistribution.getParameter()); } Distribution parameterDistribution; if (isGaussian) { NormalFactory factory; parameterDistribution = factory.build(parameterSample); } else { KernelSmoothing factory; parameterDistribution = factory.build(parameterSample); } DistributionFactoryResult result(distribution, parameterDistribution); return result; } DistributionFactoryResult DistributionFactoryImplementation::buildMaximumLikelihoodEstimator (const Sample & sample, const Bool isRegular) const { const UnsignedInteger size = sample.getSize(); const Distribution distribution(build(sample)); const UnsignedInteger parameterDimension = distribution.getParameterDimension(); Distribution parameterDistribution; if (isRegular) { Matrix theta(parameterDimension, parameterDimension); const Sample pdf(distribution.computePDF(sample)); const Sample dpdf(distribution.computePDFGradient(sample)); for (UnsignedInteger i = 0; i < size; ++ i) { Matrix dpdfi(parameterDimension, 1, dpdf[i].getCollection()); dpdfi = dpdfi / pdf[i][0]; theta = theta + dpdfi * dpdfi.transpose() / size; } CovarianceMatrix covariance(SymmetricMatrix(theta.getImplementation()).solveLinearSystem(IdentityMatrix(parameterDimension) / size).getImplementation()); parameterDistribution = Normal(distribution.getParameter(), covariance); } else { const UnsignedInteger bootstrapSize = getBootstrapSize(); BootstrapExperiment experiment(sample); Sample parameterSample(0, distribution.getParameterDimension()); for (UnsignedInteger i = 0; i < bootstrapSize; ++ i) { Sample bootstrapSample(experiment.generate()); Distribution estimatedDistribution(build(bootstrapSample)); parameterSample.add(estimatedDistribution.getParameter()); } KernelSmoothing factory; parameterDistribution = factory.build(parameterSample); } DistributionFactoryResult result(distribution, parameterDistribution); return result; } /* Bootstrap size accessor */ UnsignedInteger DistributionFactoryImplementation::getBootstrapSize() const { return bootstrapSize_; } void DistributionFactoryImplementation::setBootstrapSize(const UnsignedInteger bootstrapSize) { if (bootstrapSize == 0) throw InvalidArgumentException(HERE) << "Error: the bootstrap size must be > 0."; bootstrapSize_ = bootstrapSize; } /* Method save() stores the object through the StorageManager */ void DistributionFactoryImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("bootstrapSize_", bootstrapSize_); } /* Method load() reloads the object from the StorageManager */ void DistributionFactoryImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("bootstrapSize_", bootstrapSize_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/DistributionFactoryResult.cxx000066400000000000000000000065661307543307100262740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Results of distribution estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DistributionFactoryResult.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionFactoryResult); static const Factory Factory_DistributionFactoryResult; /* Default constructor */ DistributionFactoryResult::DistributionFactoryResult() : PersistentObject() { // Nothing to do } /* Parameters constructor */ DistributionFactoryResult::DistributionFactoryResult(const Distribution & distribution, const Distribution & parameterDistribution) : PersistentObject() , distribution_(distribution) , parameterDistribution_(parameterDistribution) { if (distribution_.getParameterDimension() != parameterDistribution.getDimension()) throw InvalidDimensionException(HERE) << "The dimension of the parameter of the distribution (" << distribution_.getParameterDimension() << ") does not match the dimension of the distribution of the parameter (" << parameterDistribution.getDimension(); } /* Virtual constructor */ DistributionFactoryResult * DistributionFactoryResult::clone() const { return new DistributionFactoryResult(*this); } /* Accessor to the estimated distribution */ void DistributionFactoryResult::setDistribution(const Distribution & distribution) { distribution_ = distribution; } Distribution DistributionFactoryResult::getDistribution() const { return distribution_; } /* Accessor to the distribution of the parameter */ void DistributionFactoryResult::setParameterDistribution(const Distribution & parameterDistribution) { parameterDistribution_ = parameterDistribution; } Distribution DistributionFactoryResult::getParameterDistribution() const { return parameterDistribution_; } /* String converter */ String DistributionFactoryResult::__repr__() const { OSS oss; oss << "class=" << getClassName() << " distribution=" << getDistribution() << " parameterDistribution=" << getParameterDistribution(); return oss; } /* Method save() stores the object through the StorageManager */ void DistributionFactoryResult::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("distribution_", distribution_); adv.saveAttribute("parameterDistribution_", parameterDistribution_); } /* Method load() reloads the object from the StorageManager */ void DistributionFactoryResult::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("distribution_", distribution_); adv.loadAttribute("parameterDistribution_", parameterDistribution_); } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Model/DistributionImplementation.cxx000066400000000000000000005631171307543307100264530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/Collection.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/CompositeDistribution.hxx" #include "openturns/Chi.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/Dirac.hxx" #include "openturns/LogNormal.hxx" #include "openturns/LogUniform.hxx" #include "openturns/Mixture.hxx" #include "openturns/Normal.hxx" #include "openturns/RandomMixture.hxx" #include "openturns/MaximumDistribution.hxx" #include "openturns/ProductDistribution.hxx" #include "openturns/TruncatedDistribution.hxx" #include "openturns/Uniform.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/MarginalDistribution.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/MarginalTransformationHessian.hxx" #include "openturns/RosenblattEvaluation.hxx" #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/Function.hxx" #include "openturns/SklarCopula.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/PlatformInfo.hxx" #include "openturns/Contour.hxx" #include "openturns/Curve.hxx" #include "openturns/Staircase.hxx" #include "openturns/Drawable.hxx" #include "openturns/Graph.hxx" #include "openturns/Brent.hxx" #include "openturns/Box.hxx" #include "openturns/Tuples.hxx" #include "openturns/Combinations.hxx" #include "openturns/TBB.hxx" #include "openturns/GaussKronrod.hxx" #include "openturns/GaussLegendre.hxx" #include "openturns/IteratedQuadrature.hxx" #include "openturns/OptimizationProblem.hxx" #include "openturns/TNC.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/MethodBoundEvaluation.hxx" #include "openturns/SobolSequence.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionImplementation); typedef FunctionImplementation::EvaluationPointer EvaluationPointer; typedef FunctionImplementation::GradientPointer GradientPointer; typedef FunctionImplementation::HessianPointer HessianPointer; typedef Collection DistributionCollection; static const Factory Factory_DistributionImplementation; /* Default constructor */ DistributionImplementation::DistributionImplementation() : PersistentObject() , mean_(Point(0)) , covariance_(CovarianceMatrix(0)) , gaussNodes_() , gaussWeights_() , integrationNodesNumber_(ResourceMap::GetAsUnsignedInteger("Distribution-DefaultIntegrationNodesNumber")) , isAlreadyComputedMean_(false) , isAlreadyComputedCovariance_(false) , isAlreadyComputedGaussNodesAndWeights_(false) , pdfEpsilon_(ResourceMap::GetAsScalar("Distribution-DefaultPDFEpsilon")) , cdfEpsilon_(ResourceMap::GetAsScalar("Distribution-DefaultCDFEpsilon")) , quantileEpsilon_(ResourceMap::GetAsScalar("Distribution-DefaultQuantileEpsilon")) , quantileIterations_(ResourceMap::GetAsUnsignedInteger("Distribution-DefaultQuantileIteration")) , isAlreadyComputedStandardDistribution_(false) , p_standardDistribution_() , isAlreadyCreatedGeneratingFunction_(false) , generatingFunction_(0) , dimension_(1) , weight_(1.0) // The range is empty by default , range_(Interval(1.0, -1.0)) , description_(1) , isParallel_(ResourceMap::GetAsBool("Distribution-Parallel")) , isCopula_(false) , isInitializedCF_(false) , pdfGrid_(0) { description_[0] = "X0"; } /* Virtual constructor */ DistributionImplementation * DistributionImplementation::clone() const { return new DistributionImplementation(*this); } /* Comparison operator */ Bool DistributionImplementation::operator ==(const DistributionImplementation & other) const { if (this == &other) return true; // Compare both this to other and other to this to ensure symmetry return equals(other) && other.equals(*this); } Bool DistributionImplementation::equals(const DistributionImplementation & other) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::equals"; } /* Comparison operator */ Bool DistributionImplementation::operator !=(const DistributionImplementation & other) const { return !operator==(other); } /* Addition operator */ DistributionImplementation::Implementation DistributionImplementation::operator + (const DistributionImplementation & other) const { return operator + (other.clone()); } DistributionImplementation::Implementation DistributionImplementation::operator + (const Implementation & other) const { if ((dimension_ != 1) || (other->dimension_ != 1)) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator + (const Implementation & other) const: can add 1D distributions only."; Collection< Distribution > coll(2); coll[0] = *this; coll[1] = *other; return RandomMixture(coll).clone(); } DistributionImplementation::Implementation DistributionImplementation::operator + (const Scalar value) const { if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator + (const Scalar value) const: can add a constant to 1D distributions only."; if (value == 0.0) return clone(); Collection< Distribution > coll(2); coll[0] = *this; coll[1] = Dirac(Point(1, value)); return RandomMixture(coll).clone(); } /* Substraction operator */ DistributionImplementation::Implementation DistributionImplementation::operator - (const DistributionImplementation & other) const { return operator - (other.clone()); } DistributionImplementation::Implementation DistributionImplementation::operator - (const Implementation & other) const { if ((dimension_ != 1) || (other->dimension_ != 1)) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator - (const Implementation & other) const: can substract 1D distributions only."; Collection< Distribution > coll(2); coll[0] = *this; coll[1] = *other; Point weights(2); weights[0] = 1.0; weights[1] = -1.0; return RandomMixture(coll, weights).clone(); } DistributionImplementation::Implementation DistributionImplementation::operator - (const Scalar value) const { if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator - (const Scalar value) const: can substract a constant to 1D distributions only."; if (value == 0.0) return clone(); Collection< Distribution > coll(2); coll[0] = *this; coll[1] = Dirac(Point(1, -value)); return RandomMixture(coll).clone(); } /* Multiplication operator */ DistributionImplementation::Implementation DistributionImplementation::operator * (const DistributionImplementation & other) const { return operator * (other.clone()); } DistributionImplementation::Implementation DistributionImplementation::operator * (const Implementation & other) const { // Special case: LogNormal distributions if ((getClassName() == "LogNormal") && (other->getClassName() == "LogNormal")) { const Point parameters(getParameter()); const Point otherParameters(other->getParameter()); return LogNormal(parameters[0] + otherParameters[0], std::sqrt(parameters[1] * parameters[1] + otherParameters[1] * otherParameters[1])).clone(); } if ((getClassName() == "LogUniform") && (other->getClassName() == "LogUniform")) { const Point parameters(getParameter()); const Point otherParameters(other->getParameter()); return (Uniform(parameters[0], parameters[1]) + Uniform(otherParameters[0], otherParameters[1]))->exp(); } if ((getClassName() == "LogUniform") && (other->getClassName() == "LogNormal")) { const Point parameters(getParameter()); const Point otherParameters(other->getParameter()); return (Uniform(parameters[0], parameters[1]) + Normal(otherParameters[0], otherParameters[1]))->exp(); } if ((getClassName() == "LogNormal") && (other->getClassName() == "LogUniform")) { const Point parameters(getParameter()); const Point otherParameters(other->getParameter()); return (Normal(parameters[0], parameters[1]) + Uniform(otherParameters[0], otherParameters[1]))->exp(); } return ProductDistribution(*this, *other).clone(); } DistributionImplementation::Implementation DistributionImplementation::operator * (const Scalar value) const { if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator * (const Scalar value) const: can multiply by a constant 1D distributions only."; if (value == 0.0) return Dirac(Point(1, 0.0)).clone(); if (value == 1.0) return clone(); const Collection< Distribution > coll(1, *this); const Point weight(1, value); return RandomMixture(coll, weight).clone(); } /* Division operator */ DistributionImplementation::Implementation DistributionImplementation::operator / (const DistributionImplementation & other) const { return operator / (other.clone()); } DistributionImplementation::Implementation DistributionImplementation::operator / (const Implementation & other) const { if ((dimension_ != 1) || (other->dimension_ != 1)) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator / (const Implementation & other) const: can multiply 1D distributions only."; return operator * (*other->inverse()); } DistributionImplementation::Implementation DistributionImplementation::operator / (const Scalar value) const { if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::operator / (const Scalar value) const: can divide multiply by a constant 1D distributions only."; if (value == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot divide by 0."; if (value == 1.0) return clone(); return (*this) * (1.0 / value); } /* Product operator */ DistributionImplementation::Implementation operator * (const Scalar scalar, const DistributionImplementation & distribution) { return distribution * scalar; } DistributionImplementation::Implementation operator * (const Scalar scalar, const DistributionImplementation::Implementation & p_distribution) { return (*p_distribution) * scalar; } /* Division operator */ DistributionImplementation::Implementation operator / (const Scalar scalar, const DistributionImplementation & distribution) { return (*distribution.inverse()) * scalar; } DistributionImplementation::Implementation operator / (const Scalar scalar, const DistributionImplementation::Implementation & p_distribution) { return (*(*p_distribution).inverse()) * scalar; } /* Addition operator */ DistributionImplementation::Implementation operator + (const Scalar scalar, const DistributionImplementation & distribution) { return distribution + scalar; } DistributionImplementation::Implementation operator + (const Scalar scalar, const DistributionImplementation::Implementation & p_distribution) { return (*p_distribution) + scalar; } /* Substraction operator */ DistributionImplementation::Implementation operator - (const Scalar scalar, const DistributionImplementation & distribution) { return (*(distribution * (-1.0))) + scalar; } DistributionImplementation::Implementation operator - (const Scalar scalar, const DistributionImplementation::Implementation & p_distribution) { return (*((*p_distribution) * (-1.0))) + scalar; } DistributionImplementation::Implementation operator - (const DistributionImplementation & distribution) { return distribution * (-1.0); } DistributionImplementation::Implementation operator - (const DistributionImplementation::Implementation & p_distribution) { return (*p_distribution) * (-1.0); } DistributionImplementation::Implementation maximum(const DistributionImplementation::Implementation & p_left, const DistributionImplementation::Implementation & p_right) { MaximumDistribution::DistributionCollection coll(2); coll[0] = p_left; coll[1] = p_right; return MaximumDistribution(coll).clone(); } DistributionImplementation::Implementation maximum(const DistributionImplementation & left, const DistributionImplementation::Implementation & p_right) { MaximumDistribution::DistributionCollection coll(2); coll[0] = left; coll[1] = p_right; return MaximumDistribution(coll).clone(); } DistributionImplementation::Implementation maximum(const DistributionImplementation::Implementation & p_left, const DistributionImplementation & right) { MaximumDistribution::DistributionCollection coll(2); coll[0] = p_left; coll[1] = right; return MaximumDistribution(coll).clone(); } DistributionImplementation::Implementation maximum(const DistributionImplementation & left, const DistributionImplementation & right) { MaximumDistribution::DistributionCollection coll(2); coll[0] = left; coll[1] = right; return MaximumDistribution(coll).clone(); } /* String converter */ String DistributionImplementation::__repr__() const { OSS oss(true); oss << "class=" << DistributionImplementation::GetClassName() << " description=" << description_; return oss; } /* String converter */ String DistributionImplementation::__str__(const String & offset) const { return __repr__(); } /* Weight accessor */ void DistributionImplementation::setWeight(const Scalar w) { weight_ = w; } /* Weight accessor */ Scalar DistributionImplementation::getWeight() const { return weight_; } /* Dimension accessor */ UnsignedInteger DistributionImplementation::getDimension() const { return dimension_; } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar DistributionImplementation::getRoughness() const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::getRoughness() const"; } /* Dimension accessor */ void DistributionImplementation::setDimension(const UnsignedInteger dim) { if (dim == 0) throw InvalidArgumentException(HERE) << "Dimension argument must be an integer >= 1, here dim = " << dim; if (dim != dimension_) { dimension_ = dim; isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyComputedGaussNodesAndWeights_ = false; // Check if the current description is compatible with the new dimension if (description_.getSize() != dim) description_ = Description::BuildDefault(dim, "X"); } } /* Get one realization of the distribution */ Point DistributionImplementation::getRealization() const { return getRealizationByInversion(); } /* Get a numerical sample whose elements follow the distributionImplementation */ Sample DistributionImplementation::getSample(const UnsignedInteger size) const { Sample returnSample(size, dimension_); for (UnsignedInteger i = 0; i < size; ++ i) returnSample[i] = getRealization(); returnSample.setName(getName()); returnSample.setDescription(getDescription()); return returnSample; } /* Get one realization of the distribution */ Point DistributionImplementation::getRealizationByInversion() const { // Use CDF inversion in the 1D case if (dimension_ == 1) return computeQuantile(RandomGenerator::Generate()); // Use conditional CDF inversion in the 1D case Point point(0); for (UnsignedInteger i = 0; i < dimension_; ++ i) { const Scalar u = RandomGenerator::Generate(); LOGINFO(OSS(false) << "i=" << i << ", u=" << u); point.add(computeConditionalQuantile(u, point)); LOGINFO(OSS(false) << "i=" << i << ", u=" << u << ", point=" << point); } return point; } /* Get a numerical sample whose elements follow the distributionImplementation */ Sample DistributionImplementation::getSampleByInversion(const UnsignedInteger size) const { // Use CDF inversion in the 1D case if (dimension_ == 1) return computeQuantile(RandomGenerator::Generate(size)); // Use conditional CDF inversion in the 1D case Sample result(size, 0); for (UnsignedInteger i = 0; i < dimension_; ++ i) { const Point u(RandomGenerator::Generate(size)); SampleImplementation q(size, 1); q.setData(computeConditionalQuantile(u, result)); result.stack(q); } return result; } Sample DistributionImplementation::getSampleByQMC(const UnsignedInteger size) const { const SobolSequence sequence(1); // Use CDF inversion in the 1D case if (dimension_ == 1) return computeQuantile(sequence.generate(size).getImplementation()->getData()); // Use conditional CDF inversion in the 1D case Sample result(size, 0); for (UnsignedInteger i = 0; i < dimension_; ++ i) { const Point u(sequence.generate(size).getImplementation()->getData()); SampleImplementation q(size, 1); q.setData(computeConditionalQuantile(u, result)); result.stack(q); } return result; } /* Get the DDF of the distribution */ Point DistributionImplementation::computeDDF(const Point & point) const { if (dimension_ == 1) { Point ddf(dimension_); const Scalar cdfPoint = computeCDF(point); const Scalar h = std::pow(cdfEpsilon_, 0.25); const Scalar idenom = 1.0 / std::sqrt(cdfEpsilon_); for (UnsignedInteger i = 0; i < dimension_; ++ i) { Point epsilon(dimension_, 0.0); epsilon[i] = h; ddf[i] = (computeCDF(point + epsilon) - 2.0 * cdfPoint + computeCDF(point - epsilon)) * idenom; } return ddf; } throw NotDefinedException(HERE) << "In DistributionImplementation::computeDDF()"; } /* Get the PDF of the distribution */ Scalar DistributionImplementation::computePDF(const Point & point) const { const Scalar epsilon = 2.0 * std::pow(cdfEpsilon_, 1.0 / 3.0); const Sample xSample(((Box(Indices(dimension_, 0)).generate() - Point(dimension_, 0.5)) * Point(dimension_, epsilon)) + point); const Sample cdfSample(computeCDF(xSample)); Scalar pdf = 0.0; const UnsignedInteger iMax = cdfSample.getSize(); for (UnsignedInteger i = 0; i < iMax; ++ i) { // The points with an even number of positive shifts are counted positively // The others are counted negatively const UnsignedInteger numNullBits = dimension_ - SpecFunc::BitCount(i); pdf += (1.0 - 2.0 * (numNullBits % 2)) * cdfSample[i][0]; } return pdf / std::pow(epsilon, 1.0 * dimension_); } Scalar DistributionImplementation::computeLogPDF(const Point & point) const { const Scalar pdf = computePDF(point); Scalar logPdf = SpecFunc::LogMinScalar; if ( pdf > 0.0 ) logPdf = std::log(pdf); return logPdf; } /* Get the CDF, complementary CDF and survival function of the distribution */ /* On a Point */ Scalar DistributionImplementation::computeCDF(const Point & point) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeCDF(const Point & point) const"; } Scalar DistributionImplementation::computeComplementaryCDF(const Point & point) const { const Scalar cdf = computeCDF(point); return 0.5 + (0.5 - cdf); } /* Computation of the survival function: A_k = \{X_k > x_k\}, k=0..n-1 P(\cap A_k) = 1 - \bar{P}(\cap A_k) = 1 + \sum_{j=0}^{n-1}(-1)^j\sum_{\{k_0,\dots,k_{j-1}\}\subset\{0,\dots,n-1\}P(\bar{A}_{k_0},\dots,\bar{A}_{k_{j-1}}) so n=1: P(X_1>x_1) = 1 - P(X_1\leq x_1) n=2: P(X_1>x_1, X_2>x_2) = 1 - P(X_1\leq x_1) - P(X_2\leq x_2) + P(X_1\leq x_1, X_2\leq x_2) n=3: P(X_1>x_1, X_2>x_2, X_3>x_3) = 1 - P(X_1\leq x_1) - P(X_2\leq x_2) - P(X_3\leq x_3) + P(X_1\leq x_1, X_2\leq x_2) + P(X_1\leq x_1, X_3\leq x_3) + P(X_2\leq x_2, X_3\leq x_3) - P(X_1\leq x_1, X_2\leq x_2, X_3\leq x_3) */ Scalar DistributionImplementation::computeSurvivalFunction(const Point & point) const { if (dimension_ == 1) return computeComplementaryCDF(point); // Special case for independent copula if (hasIndependentCopula()) { Scalar value = 1.0; for (UnsignedInteger i = 0; i < dimension_; ++i) value *= getMarginal(i)->computeComplementaryCDF(point[i]); return value; } // For elliptical distributions, // P(X_1-mu_1<=x_1,...,X_d-mu_d<=x_d)=P(X_1-mu_1>=-x_1,...,X_d-mu_d>=-x_d) // So // P(X_1>=x_1,...,X_d>=x_d)=P(X_1<=2mu_1-x_1,...,X_d<=2mu_d-x_d) if (isElliptical()) return computeCDF(getMean() * 2.0 - point); const Point lowerBounds(getRange().getLowerBound()); const Point upperBounds(getRange().getUpperBound()); Bool allOutside = true; for (UnsignedInteger i = 0; i < dimension_; ++ i) { if (point[i] >= upperBounds[i]) return 0.0; allOutside &= (point[i] <= lowerBounds[i]); } if (allOutside) return 1.0; // Use Poincaré's formula const Scalar cdf = computeCDF(point); Scalar value = 1.0 + (dimension_ % 2 == 0 ? cdf : -cdf); Scalar sign = -1.0; for (UnsignedInteger i = 1; i < dimension_; ++ i) { Scalar contribution = 0.0; Combinations::IndicesCollection indices(Combinations(i, dimension_).generate()); Point subPoint(i); for (UnsignedInteger j = 0; j < indices.getSize(); ++j) { for (UnsignedInteger k = 0; k < i; ++k) subPoint[k] = point[indices[j][k]]; contribution += getMarginal(indices[j])->computeCDF(subPoint); } value += sign * contribution; sign = -sign; } return value; } Point DistributionImplementation::computeInverseSurvivalFunction(const Scalar prob) const { Scalar marginalProb = 0.0; return computeInverseSurvivalFunction(prob, marginalProb); } Point DistributionImplementation::computeInverseSurvivalFunction(const Scalar prob, Scalar & marginalProb) const { // Special case for bording values marginalProb = prob; if (prob < 0.0) return range_.getUpperBound(); if (prob >= 1.0) return range_.getLowerBound(); // Special case for dimension 1 if (dimension_ == 1) return Point(1, computeScalarQuantile(prob, true)); // Special case for independent copula if (hasIndependentCopula()) { Point result(dimension_); marginalProb = std::pow(prob, 1.0 / dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = getMarginal(i)->computeScalarQuantile(marginalProb, true); return result; } // For elliptical distributions, // P(X_1-mu_1<=x_1,...,X_d-mu_d<=x_d)=P(X_1-mu_1>=-x_1,...,X_d-mu_d>=-x_d) // So // P(X_1>=x_1,...,X_d>=x_d)=P(X_1<=2mu_1-x_1,...,X_d<=2mu_d-x_d) // So // InverseSurvivalFunction(q) = 2mu-Quantile(q) if (isElliptical()) return getMean() * 2.0 - computeQuantile(prob, false, marginalProb); // Extract the marginal distributions Collection marginals(dimension_); for (UnsignedInteger i = 0; i < dimension_; i++) marginals[i] = getMarginal(i); // The n-D inverse survival function is defined as X(\tau) = (S_1^{-1}(\tau), ..., S_n^{-1}(\tau)), // with tau such as S(X(\tau)) = q. // As F(x) = C(F_1(x_1),...,F_n(x_n)), the constraint F(X(\tau)) = q reads: // C(\tau,...,\tau) = q // Bracketing of \tau using the Frechet Hoeffding bounds: // max(n\tau - n + 1, 0) <= C(\tau,...,\tau) <= \tau // from which we deduce that q <= \tau and \tau <= 1 - (1 - q) / n // Lower bound of the bracketing interval const SurvivalFunctionWrapper wrapper(marginals, this); const Function f(bindMethod(wrapper, &SurvivalFunctionWrapper::computeDiagonal, 1, 1)); Scalar leftTau = prob; Scalar leftSurvival = f(Point(1, leftTau))[0]; // Due to numerical precision issues, the theoretical bound can be slightly violated if (leftSurvival > prob) { leftTau = 0.0; leftSurvival = 1.0; } // Upper bound of the bracketing interval Scalar rightTau = 1.0 - (1.0 - prob) / dimension_; Scalar rightSurvival = f(Point(1, rightTau))[0]; // Due to numerical precision issues, the theoretical bound can be slightly violated if (rightSurvival < prob) { rightTau = 1.0; rightSurvival = 0.0; } LOGDEBUG(OSS() << "DistributionImplementation::computeInverseSurvivalFunction: dimension=" << dimension_ << ", prob=" << prob << ", leftTau=" << leftTau << ", leftSurvival=" << leftSurvival << ", rightTau=" << rightTau << ", rightSurvival=" << rightSurvival); // Use Brent's method to compute the quantile efficiently for continuous distributions const Brent solver(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); marginalProb = solver.solve(f, prob, leftTau, rightTau, leftSurvival, rightSurvival); LOGINFO(OSS(false) << "tau=" << marginalProb); return wrapper.diagonalToSpace(marginalProb); } /* On a Sample */ Sample DistributionImplementation::computeCDFSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++ i) outSample[i][0] = computeCDF(inSample[i]); return outSample; } struct ComputeCDFPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeCDFPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i][0] = distribution_.computeCDF(input_[i]); } }; /* end struct ComputeCDFPolicy */ Sample DistributionImplementation::computeCDFParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputeCDFPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeCDF(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computeCDFParallel(inSample); else return computeCDFSequential(inSample); } Sample DistributionImplementation::computeComplementaryCDFSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++ i) outSample[i][0] = computeComplementaryCDF(inSample[i]); return outSample; } struct ComputeComplementaryCDFPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeComplementaryCDFPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++ i) output_[i][0] = distribution_.computeComplementaryCDF(input_[i]); } }; /* end struct ComputeComplementaryCDFPolicy */ Sample DistributionImplementation::computeComplementaryCDFParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputeComplementaryCDFPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeComplementaryCDF(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computeComplementaryCDFParallel(inSample); else return computeComplementaryCDFSequential(inSample); } Sample DistributionImplementation::computeSurvivalFunctionSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++ i) outSample[i][0] = computeSurvivalFunction(inSample[i]); return outSample; } struct ComputeSurvivalFunctionPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeSurvivalFunctionPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i][0] = distribution_.computeSurvivalFunction(input_[i]); } }; /* end struct ComputeSurvivalFunctionPolicy */ Sample DistributionImplementation::computeSurvivalFunctionParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputeSurvivalFunctionPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeSurvivalFunction(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computeSurvivalFunctionParallel(inSample); else return computeSurvivalFunctionSequential(inSample); } /* Compute the probability content of an interval */ Scalar DistributionImplementation::computeProbability(const Interval & interval) const { if (interval.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: expected an interval of dimension=" << dimension_ << ", got dimension=" << interval.getDimension(); // Empty interval, quick check. More checks will be done in the refined algorithms if (interval.isNumericallyEmpty()) return 0.0; // Generic implementation for univariate distributions if (dimension_ == 1) { const Bool finiteA = interval.getFiniteLowerBound()[0] == 1; const Bool finiteB = interval.getFiniteUpperBound()[0] == 1; if (finiteA) { const Scalar a = interval.getLowerBound()[0]; const Scalar ccdfA = computeComplementaryCDF(a); if (finiteB) { // [a, b] const Scalar b = interval.getUpperBound()[0]; if (ccdfA <= 0.5) { const Scalar ccdfB = computeComplementaryCDF(b); return ccdfA - ccdfB; } const Scalar cdfA = computeCDF(a); const Scalar cdfB = computeCDF(b); return cdfB - cdfA; } // [a,+inf) return ccdfA; } // (-inf, b] if (finiteB) return computeCDF(interval.getUpperBound()[0]); // (-inf, +inf) return 1.0; } // Generic implementation for continuous distributions if (isContinuous()) return computeProbabilityContinuous(interval); // Generic implementation for discrete distributions if (isDiscrete()) return computeProbabilityDiscrete(interval); // Generic implementation for general distributions return computeProbabilityGeneral(interval); } /* Get the probability content of an interval, continuous case */ Scalar DistributionImplementation::computeProbabilityContinuous(const Interval & interval) const { const Interval reducedInterval(interval.intersect(getRange())); if (reducedInterval.isNumericallyEmpty()) return 0.0; if (reducedInterval == getRange()) return 1.0; // Use adaptive multidimensional integration of the PDF on the reduced interval const PDFWrapper pdfWrapper(this); Scalar probability = 0.0; if (dimension_ == 1) { Scalar error = -1.0; const Point singularities(getSingularities()); // If no singularity inside of the given reduced interval const UnsignedInteger singularitiesNumber = singularities.getSize(); const Scalar lower = reducedInterval.getLowerBound()[0]; const Scalar upper = reducedInterval.getUpperBound()[0]; if (singularitiesNumber == 0 || singularities[0] >= upper || singularities[singularitiesNumber - 1] <= lower) probability = GaussKronrod().integrate(pdfWrapper, reducedInterval, error)[0]; else { Scalar a = lower; for (UnsignedInteger i = 0; i < singularitiesNumber; ++i) { const Scalar b = singularities[i]; if (b > lower && b < upper) { probability += GaussKronrod().integrate(pdfWrapper, Interval(a, b), error)[0]; a = b; } // Exit the loop if no more singularities inside of the reduced interval if (b >= upper) break; } // for // Last contribution probability += GaussKronrod().integrate(pdfWrapper, Interval(a, upper), error)[0]; } // else } // dimension_ == 1 else { if (hasIndependentCopula()) { const Point lower(interval.getLowerBound()); const Point upper(interval.getLowerBound()); probability = 1.0; for (UnsignedInteger i = 0; i < dimension_; ++i) probability *= getMarginal(i)->computeProbability(Interval(lower[i], upper[i])); } else probability = IteratedQuadrature().integrate(pdfWrapper, reducedInterval)[0]; } // dimension > 1 return std::min(1.0, std::max(0.0, probability)); } /* Get the probability content of an interval, discrete case */ Scalar DistributionImplementation::computeProbabilityDiscrete(const Interval & interval) const { const Sample support(getSupport(interval)); Scalar value = 0.0; for (UnsignedInteger i = 0; i < support.getSize(); ++i) value += computePDF(support[i]); return value; } /* Get the probability content of an interval, general case */ Scalar DistributionImplementation::computeProbabilityGeneral(const Interval & interval) const { const Interval reducedInterval(interval.intersect(getRange())); if (reducedInterval.isNumericallyEmpty()) return 0.0; if (reducedInterval == getRange()) return 1.0; // P(\bigcap_i ai < Xi \leq bi) = \sum_c (−1)^n(c) F(c_1,c_2,...,c_n) // with c = (c_i, i =1, ..., n), c_i \in [a_i, b_i] // and n(c) = Card({c_i == a_i, i = 1, ..., n}) Scalar probability = 0.0; const Point a(reducedInterval.getLowerBound()); const Point b(reducedInterval.getUpperBound()); const UnsignedInteger iMax = 1 << dimension_; for( UnsignedInteger i = 0; i < iMax; ++i ) { Bool evenLower = true; Point c(b); for( UnsignedInteger j = 0; j < dimension_; ++j ) { const UnsignedInteger mask = 1 << j; if (i & mask) { c[j] = a[j]; evenLower = (!evenLower); } } // j const Scalar cdf = computeCDF(c); probability += (evenLower ? cdf : -cdf); } // i return probability; } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex DistributionImplementation::computeCharacteristicFunction(const Scalar x) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: cannot use the computeCharacteristicFunction method with distributions of dimension > 1"; if (x == 0.0) return 1.0; Complex value(0.0); // In the continuous case, we use simple gauss integration with a fixed number of integration points. We divide the interval in order to have a sufficient number of integration points by interval. It is good for low to moderate value of x, but is prohibitive for large x. In this case, we use Filon's method with linear interpolation, it means the modified trapezoidal rule as in E. O. Tuck, 'A simple "Filon-Trapezoidal" Rule' if (isContinuous()) { const UnsignedInteger N = ResourceMap::GetAsUnsignedInteger("Distribution-CharacteristicFunctionNMax"); // The circular function will have x(b-a)/2\pi arches over [a, b], so we need a number of points of this order, we decide to take 8 points per arch Point legendreWeights; const Point legendreNodes(getGaussNodesAndWeights(legendreWeights)); // How many sub-intervals? // nPts = 8*x(b-a)/2\pi => (b-a)/2 = nPts * \pi / (8*x) const Scalar xMin = range_.getLowerBound()[0]; const Scalar xMax = range_.getUpperBound()[0]; const Scalar delta = xMax - xMin; const UnsignedInteger intervalsNumber = std::max(1, static_cast(round(2 * x * delta / integrationNodesNumber_))); if (intervalsNumber * integrationNodesNumber_ < N) { const Scalar halfLength = 0.5 * delta / intervalsNumber; for (UnsignedInteger n = 0; n < intervalsNumber; ++n) { const Scalar a = xMin + 2.0 * n * halfLength; for (UnsignedInteger i = 0; i < integrationNodesNumber_; ++i) { const Scalar xi = a + (1.0 + legendreNodes[i]) * halfLength; value += legendreWeights[i] * computePDF(xi) * std::exp(Complex(0.0, x * xi)); } } // We factor out the scaling as all the sub intervals have the same length value *= halfLength; } else { const Scalar a = range_.getLowerBound()[0]; const Scalar b = range_.getUpperBound()[0]; const Scalar T = 0.5 * (b - a); const Scalar c = 0.5 * (a + b); const Scalar dt = T / N; if (!isInitializedCF_) { // const UnsignedInteger nMax(ResourceMap::GetAsUnsignedLong("Distribution-CharacteristicFunctionNMax")); Sample locations(Box(Indices(1, 2 * N - 1)).generate()); locations *= Point(1, b - a); locations += Point(1, a); pdfGrid_ = computePDF(locations).getImplementation()->getData(); isInitializedCF_ = true; } const Scalar omegaDt = x * dt; const Scalar omegaDt2 = omegaDt * omegaDt; const Scalar cosOmegaDt = std::cos(omegaDt); const Scalar sinOmegaDt = std::sin(omegaDt); // The bound 4.3556e-4 is such that we get full double precision const Complex wM(std::abs(omegaDt) < 4.3556e-4 ? Complex(0.5 - omegaDt2 / 24.0, omegaDt / 6.0 * (1.0 - omegaDt2 / 40.0)) : Complex((1.0 - cosOmegaDt) / omegaDt2, (omegaDt - sinOmegaDt) / omegaDt2)); const Complex wP(std::abs(omegaDt) < 4.3556e-4 ? Complex(0.5 - omegaDt2 / 24.0, -omegaDt / 6.0 * (1.0 - omegaDt2 / 40.0)) : Complex((1.0 - cosOmegaDt) / omegaDt2, (-omegaDt + sinOmegaDt) / omegaDt2)); const Scalar cosNOmegaDt = std::cos(N * omegaDt); const Scalar sinNOmegaDt = std::sin(N * omegaDt); // The bound 4.3556e-4 is such that we get full double precision const Scalar w = std::abs(omegaDt) < 4.3556e-4 ? std::pow(std::sin(0.5 * omegaDt) / (0.5 * omegaDt), 2) : 1.0 - omegaDt2 / 12.0; // value = pdfGrid_[N] * w + pdfGrid_[0] * wM * Complex(cosNOmegaDt, -sinNOmegaDt) + pdfGrid_[2 * N] * wP * Complex(cosNOmegaDt, sinNOmegaDt); value = pdfGrid_[0] * wM * Complex(cosNOmegaDt, -sinNOmegaDt) + pdfGrid_[2 * N - 1] * wP * Complex(cosNOmegaDt, sinNOmegaDt); for (UnsignedInteger n = 1; n < N; ++n) { const Scalar cosN = std::cos(n * omegaDt); const Scalar sinN = std::sin(n * omegaDt); value += Complex(w * cosN * (pdfGrid_[N + n - 1] + pdfGrid_[N - n]), w * sinN * (pdfGrid_[N + n - 1] - pdfGrid_[N - n])); } return dt * value * Complex(std::cos(x * c), std::sin(x * c)); } } // Continuous else { // Discrete // In the discrete case, we have a reasonably efficient algorithm both in term of speed and precision. if (isDiscrete()) { const Sample support(getSupport()); const UnsignedInteger size = support.getSize(); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar pt = support[i][0]; value += computePDF(pt) * std::exp(Complex(0.0, x * pt)); } } // In the composite case, no default algorithm else { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeCharacteristicFunction(const Scalar x) const: no default algorithm to compute the characteristic function in the composite case."; } } return value; } Complex DistributionImplementation::computeCharacteristicFunction(const Point & x) const { if (dimension_ == 1) return computeCharacteristicFunction(x[0]); throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeCharacteristicFunction(const Point & x) const"; } Complex DistributionImplementation::computeLogCharacteristicFunction(const Scalar x) const { const Complex value(computeCharacteristicFunction(x)); const Complex result(std::log(value)); return result; } Complex DistributionImplementation::computeLogCharacteristicFunction(const Point & x) const { if (dimension_ == 1) return computeLogCharacteristicFunction(x[0]); throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeLogCharacteristicFunction(const Point & x) const"; } Complex DistributionImplementation::computeCharacteristicFunction(const UnsignedInteger index, const Scalar step) const { return computeCharacteristicFunction(index * step); } Complex DistributionImplementation::computeLogCharacteristicFunction(const UnsignedInteger index, const Scalar step) const { return computeLogCharacteristicFunction(index * step); } Complex DistributionImplementation::computeCharacteristicFunction(const Indices & indices, const Point & step) const { Point point(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) point[i] = indices[i] * step[i]; return computeCharacteristicFunction(point); } Complex DistributionImplementation::computeLogCharacteristicFunction(const Indices & indices, const Point & step) const { Point point(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) point[i] = indices[i] * step[i]; return computeLogCharacteristicFunction(point); } /* Get the generating function of the distribution, i.e. psi(z) = E(z^X) */ Scalar DistributionImplementation::computeGeneratingFunction(const Scalar z) const { return computeGeneratingFunction(Complex(z, 0.0)).real(); } Scalar DistributionImplementation::computeLogGeneratingFunction(const Scalar z) const { return computeLogGeneratingFunction(Complex(z, 0.0)).real(); } Complex DistributionImplementation::computeGeneratingFunction(const Complex & z) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: cannot use the computeCharacteristicFunction method with distributions of dimension > 1"; if (!isDiscrete()) throw NotDefinedException(HERE) << "Error: cannot compute the generating function for non discrete distributions."; const Sample support(getSupport()); const UnsignedInteger size = support.getSize(); Complex value(0.0); // If the distribution is integral, the generating function is either a polynomial if the support is finite, or can be well approximated by such a polynomial if (isAlreadyCreatedGeneratingFunction_) value = generatingFunction_(z); else // If isIntegral, then we have to create the generating function as a polynomial if (isIntegral()) { Point coefficients(size); for (UnsignedInteger i = 0; i < size; ++i) coefficients[i] = computePDF(support[i]); generatingFunction_ = UniVariatePolynomial(coefficients); isAlreadyCreatedGeneratingFunction_ = true; value = generatingFunction_(z); } // The distribution is discrete but not integral else { for (UnsignedInteger i = 0; i < size; ++i) { const Scalar pt = support[i][0]; value += computePDF(pt) * std::pow(z, pt); } } return value; } Complex DistributionImplementation::computeLogGeneratingFunction(const Complex & z) const { Complex value = computeGeneratingFunction(z); return std::log(value); } /* Get the DDF of the distribution */ Sample DistributionImplementation::computeDDFSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++i) outSample[i] = computeDDF(inSample[i]); return outSample; } /* Get the DDF of the distribution */ struct ComputeDDFPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeDDFPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i] = distribution_.computeDDF(input_[i]); } }; /* end struct ComputeDDFPolicy */ Sample DistributionImplementation::computeDDFParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputeDDFPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeDDF(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computeDDFParallel(inSample); else return computeDDFSequential(inSample); } /* Get the PDF of the distribution */ Sample DistributionImplementation::computePDFSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++i) outSample[i][0] = computePDF(inSample[i]); return outSample; } /* Get the PDF of the distribution */ struct ComputePDFPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputePDFPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i][0] = distribution_.computePDF(input_[i]); } }; /* end struct ComputePDFPolicy */ Sample DistributionImplementation::computePDFParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputePDFPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computePDF(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computePDFParallel(inSample); else return computePDFSequential(inSample); } /* Get the Log PDF of the distribution */ Sample DistributionImplementation::computeLogPDFSequential(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, 1); for (UnsignedInteger i = 0; i < size; ++i) outSample[i][0] = computeLogPDF(inSample[i]); return outSample; } /* Get the LogPDF of the distribution */ struct ComputeLogPDFPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeLogPDFPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i][0] = distribution_.computeLogPDF(input_[i]); } }; /* end struct ComputeLogPDFPolicy */ Sample DistributionImplementation::computeLogPDFParallel(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); const UnsignedInteger size = inSample.getSize(); Sample result(size, 1); const ComputeLogPDFPolicy policy( inSample, result, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeLogPDF(const Sample & inSample) const { if (inSample.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given sample has an invalid dimension. Expect a dimension " << dimension_ << ", got " << inSample.getDimension(); if (isParallel_) return computeLogPDFParallel(inSample); else return computeLogPDFSequential(inSample); } /* Get the DDF of the distribution */ Scalar DistributionImplementation::computeDDF(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computeDDF with distributions of dimension > 1"; return computeDDF(Point(1, scalar))[0]; } /* Get the PDF of the distribution */ Scalar DistributionImplementation::computePDF(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computePDF with distributions of dimension > 1"; return computePDF(Point(1, scalar)); } Scalar DistributionImplementation::computeLogPDF(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computeLogPDF with distributions of dimension > 1"; return computeLogPDF(Point(1, scalar)); } /* Get the CDF of the distribution */ Scalar DistributionImplementation::computeCDF(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computeCDF with distributions of dimension > 1"; return computeCDF(Point(1, scalar)); } Scalar DistributionImplementation::computeComplementaryCDF(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computeComplementaryCDF with distributions of dimension > 1"; return computeComplementaryCDF(Point(1, scalar)); } Scalar DistributionImplementation::computeSurvivalFunction(const Scalar scalar) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "ERROR: cannot use the simplified interface of computeSurvivalFunction with distributions of dimension > 1"; return computeSurvivalFunction(Point(1, scalar)); } /* Compute the PDF of 1D distributions over a regular grid */ Sample DistributionImplementation::computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { return computePDF(Point(1, xMin), Point(1, xMax), Indices(1, pointNumber), grid); } /* Compute the PDF of nD distributions over a regular grid */ Sample DistributionImplementation::computePDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const { if (xMin.getDimension() != xMax.getDimension()) throw InvalidArgumentException(HERE) << "Error: the two corner points must have the same dimension. Here, dim(xMin)=" << xMin.getDimension() << " and dim(xMax)=" << xMax.getDimension(); if (xMin.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the corner points must have the same dimension as the distribution. Here, dim(xMin)=" << xMin.getDimension() << " and distribution dimension=" << dimension_; if (dimension_ != pointNumber.getSize()) throw InvalidArgumentException(HERE) << "Error: the discretization must match the distribution dimension. Here, dim(discretization)=" << pointNumber.getSize() << " and distribution dimension=" << dimension_; Tuples::IndicesCollection indices(Tuples(pointNumber).generate()); const UnsignedInteger size = indices.getSize(); Sample inputSample(indices.getSize(), dimension_); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) inputSample[i][j] = xMin[j] + indices[i][j] * (xMax[j] - xMin[j]) / (pointNumber[j] - 1.0); grid = inputSample; return computePDF(inputSample); } /* Compute the log-PDF of 1D distributions over a regular grid */ Sample DistributionImplementation::computeLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { return computeLogPDF(Point(1, xMin), Point(1, xMax), Indices(1, pointNumber), grid); } /* Compute the log-PDF of nD distributions over a regular grid */ Sample DistributionImplementation::computeLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const { if (xMin.getDimension() != xMax.getDimension()) throw InvalidArgumentException(HERE) << "Error: the two corner points must have the same dimension. Here, dim(xMin)=" << xMin.getDimension() << " and dim(xMax)=" << xMax.getDimension(); if (xMin.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the corner points must have the same dimension as the distribution. Here, dim(xMin)=" << xMin.getDimension() << " and distribution dimension=" << dimension_; if (dimension_ != pointNumber.getSize()) throw InvalidArgumentException(HERE) << "Error: the discretization must match the distribution dimension. Here, dim(discretization)=" << pointNumber.getSize() << " and distribution dimension=" << dimension_; Tuples::IndicesCollection indices(Tuples(pointNumber).generate()); const UnsignedInteger size = indices.getSize(); Sample inputSample(indices.getSize(), dimension_); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) inputSample[i][j] = xMin[j] + indices[i][j] * (xMax[j] - xMin[j]) / (pointNumber[j] - 1.0); grid = inputSample; return computeLogPDF(inputSample); } /* Compute the CDF of 1D distributions over a regular grid */ Sample DistributionImplementation::computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { return computeCDF(Point(1, xMin), Point(1, xMax), Indices(1, pointNumber), grid); } /* Compute the CDF of nD distributions over a regular grid */ Sample DistributionImplementation::computeCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const { if (xMin.getDimension() != xMax.getDimension()) throw InvalidArgumentException(HERE) << "Error: the two corner points must have the same dimension. Here, dim(xMin)=" << xMin.getDimension() << " and dim(xMax)=" << xMax.getDimension(); if (xMin.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the corner points must have the same dimension as the distribution. Here, dim(xMin)=" << xMin.getDimension() << " and distribution dimension=" << dimension_; if (dimension_ != pointNumber.getSize()) throw InvalidArgumentException(HERE) << "Error: the discretization must match the distribution dimension. Here, dim(discretization)=" << pointNumber.getSize() << " and distribution dimension=" << dimension_; Tuples::IndicesCollection indices(Tuples(pointNumber).generate()); const UnsignedInteger size = indices.getSize(); Sample inputSample(indices.getSize(), dimension_); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) inputSample[i][j] = xMin[j] + indices[i][j] * (xMax[j] - xMin[j]) / (pointNumber[j] - 1.0); grid = inputSample; return computeCDF(inputSample); } Sample DistributionImplementation::computeComplementaryCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const { if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Error: cannot compute the CDF over a regular 1D grid if the dimension is > 1"; Sample result(pointNumber, 2); Scalar x = xMin; Scalar step = (xMax - xMin) / Scalar(pointNumber - 1.0); grid = Sample(pointNumber, 1); for (UnsignedInteger i = 0; i < pointNumber; ++i) { grid[i][0] = x; result[i][0] = x; result[i][1] = computeComplementaryCDF(x); x += step; } return result; } /* Compute the quantile over a regular grid */ Sample DistributionImplementation::computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail) const { Sample grid; return computeQuantile(qMin, qMax, pointNumber, grid, tail); } Sample DistributionImplementation::computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, Sample & grid, const Bool tail) const { // First, build the regular grid for the quantile levels grid = Sample(pointNumber, 1); for (UnsignedInteger i = 0; i < pointNumber; ++i) grid[i][0] = qMin + i * (qMax - qMin) / (pointNumber - 1.0); // Use possible parallelization return computeQuantile(grid.getImplementation()->getData(), tail); } /* Compute the quantile over a provided grid */ Sample DistributionImplementation::computeQuantileSequential(const Point & prob, const Bool tail) const { const UnsignedInteger size = prob.getSize(); Sample result(size, dimension_); for ( UnsignedInteger i = 0; i < size; ++ i ) result[i] = computeQuantile(prob[i], tail); return result; } struct ComputeQuantilePolicy { const Point & prob_; Sample & output_; Bool tail_; const DistributionImplementation & distribution_; ComputeQuantilePolicy( const Point & prob, Sample & output, const Bool tail, const DistributionImplementation & distribution) : prob_(prob) , output_(output) , tail_(tail) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) output_[i] = distribution_.computeQuantile(prob_[i], tail_); } }; /* end struct ComputeQuantilePolicy */ Sample DistributionImplementation::computeQuantileParallel(const Point & prob, const Bool tail) const { const UnsignedInteger size = prob.getSize(); Sample result(size, dimension_); const ComputeQuantilePolicy policy( prob, result, tail, *this ); TBB::ParallelFor( 0, size, policy ); return result; } Sample DistributionImplementation::computeQuantile(const Point & prob, const Bool tail) const { if (isParallel_) return computeQuantileParallel(prob, tail); else return computeQuantileSequential(prob, tail); } /* Get the PDF gradient of the distribution */ Point DistributionImplementation::computePDFGradient(const Point & point) const { if (dimension_ > 1) throw NotYetImplementedException(HERE) << "DistributionImplementation::computePDFGradient(const Point & point) const"; // As we are in 1D, we know that the collection contains exactly one point const Point initialParameters(getParameter()); const UnsignedInteger parametersDimension = initialParameters.getDimension(); Point PDFGradient(parametersDimension); // Clone the distribution Implementation cloneDistribution(clone()); // Increment for centered differences const Scalar eps = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 3.0); // Increment for noncentered differences const Scalar eps2 = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 2.0); Point newParameters(initialParameters); for (UnsignedInteger i = 0; i < parametersDimension; ++i) { Scalar delta = 0.0; Scalar rightPDF = 0.0; // We will try a centered finite difference approximation try { newParameters[i] = initialParameters[i] + eps; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(point); delta += eps; } catch (...) { // If something went wrong with the right point, stay at the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(point); } Scalar leftPDF = 0.0; try { // If something is wrong with the right point, use non-centered finite differences const Scalar leftEpsilon = delta == 0.0 ? eps2 : eps; newParameters[i] = initialParameters[i] - leftEpsilon; cloneDistribution->setParameter(newParameters); leftPDF = cloneDistribution->computePDF(point); delta += leftEpsilon; } catch (...) { // If something is wrong with the left point, it is either because the gradient is not computable or because we must use non-centered finite differences, in which case the right point has to be recomputed if (delta == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot compute the PDF gradient at x=" << point << " for the current values of the parameters=" << initialParameters; newParameters[i] = initialParameters[i] + eps2; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(point); delta += eps2; // And the left point will be the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); leftPDF = cloneDistribution->computePDF(point); } PDFGradient[i] = (rightPDF - leftPDF) / delta; newParameters[i] = initialParameters[i]; } return PDFGradient; } /* ComputePDFGradient On a Sample */ Sample DistributionImplementation::computePDFGradient(const Sample & inSample) const { if (dimension_ > 1) throw NotYetImplementedException(HERE) << "DistributionImplementation::computePDFGradient(const Point & point) const"; // As we are in 1D, we know that the collection contains exactly one point const Point initialParameters(getParameter()); const UnsignedInteger parametersDimension = initialParameters.getDimension(); const UnsignedInteger size = inSample.getSize(); // Empty sample ==> stack for each parameter Sample outSample(size, 0); // Clone the distribution Implementation cloneDistribution(clone()); // Increment for centered differences const Scalar eps = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 3.0); // Increment for noncentered differences const Scalar eps2 = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 2.0); Point newParameters(initialParameters); for (UnsignedInteger i = 0; i < parametersDimension; ++i) { Scalar delta = 0.0; Sample rightPDF; // We will try a centered finite difference approximation try { newParameters[i] = initialParameters[i] + eps; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(inSample); delta += eps; } catch (...) { // If something went wrong with the right point, stay at the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(inSample); } Sample leftPDF; try { // If something is wrong with the right point, use non-centered finite differences const Scalar leftEpsilon = delta == 0.0 ? eps2 : eps; newParameters[i] = initialParameters[i] - leftEpsilon; cloneDistribution->setParameter(newParameters); leftPDF = cloneDistribution->computePDF(inSample); delta += leftEpsilon; } catch (...) { // If something is wrong with the left point, it is either because the gradient is not computable or because we must use non-centered finite differences, in which case the right point has to be recomputed if (delta == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot compute the PDF gradient at x=" << inSample << " for the current values of the parameters=" << initialParameters; newParameters[i] = initialParameters[i] + eps2; cloneDistribution->setParameter(newParameters); rightPDF = cloneDistribution->computePDF(inSample); delta += eps2; // And the left point will be the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); leftPDF = cloneDistribution->computePDF(inSample); } outSample.stack((rightPDF - leftPDF) / Point(1, delta)); newParameters[i] = initialParameters[i]; } return outSample; } /* Get the logPDF gradient of the distribution */ Point DistributionImplementation::computeLogPDFGradient(const Point & point) const { // log(u)' = u' / u for any u function // With u(theta|point) = PDF(theta|point), du(theta|point)/dtheta = PDFGradient(theta|point) const Scalar pdf = computePDF(point); if (pdf > 0) { const Point logPDFGradient(computePDFGradient(point) / pdf); return logPDFGradient; } else // LogPDFGradient is used to maximize the log-likelihood for exponential models // if pdf is zero the u'/u has undetermined form (for exponential models we could extract // the correct determined form) return Point(getParameterDimension(), 0.0); } /* Get the LogPDFGradient of the distributionImplementation */ struct ComputeLogPDFGradientPolicy { const Sample & input_; Sample & output_; const DistributionImplementation & distribution_; ComputeLogPDFGradientPolicy( const Sample & input, Sample & output, const DistributionImplementation & distribution) : input_(input) , output_(output) , distribution_(distribution) {} inline void operator()( const TBB::BlockedRange & r ) const { for (UnsignedInteger i = r.begin(); i != r.end(); ++i) { const Point out = distribution_.computeLogPDFGradient(input_[i]); for (UnsignedInteger j = 0; j < output_.getDimension(); ++j) output_[i][j] = out[j]; } } }; /* end struct ComputeLogPDFGradientPolicy */ /* Get the logPDF gradient of the distribution (sequential implementation) */ Sample DistributionImplementation::computeLogPDFGradientSequential(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); Sample outSample(size, getParameterDimension()); // Sequential implementation for (UnsignedInteger i = 0; i < size; ++i) { const Point result = computeLogPDFGradient(sample[i]); for (UnsignedInteger j = 0; j < getParameterDimension(); ++j) outSample[i][j] = result[j]; } return outSample; } /* Get the logPDF gradient of the distribution (parallel implementation) */ Sample DistributionImplementation::computeLogPDFGradientParallel(const Sample & sample) const { const UnsignedInteger size = sample.getSize(); Sample outSample(size, getParameterDimension()); const ComputeLogPDFGradientPolicy policy( sample, outSample, *this ); TBB::ParallelFor( 0, size, policy ); return outSample; } /* Get the logPDF gradient of the distribution */ Sample DistributionImplementation::computeLogPDFGradient(const Sample & inSample) const { if (isParallel_) return computeLogPDFGradientParallel(inSample); else return computeLogPDFGradientSequential(inSample); } /* ComputeCDFGradient On a Sample */ Sample DistributionImplementation::computeCDFGradient(const Sample & inSample) const { const UnsignedInteger size = inSample.getSize(); Sample outSample(size, getParameterDimension()); for (UnsignedInteger i = 0; i < size; ++i) outSample[i] = computeCDFGradient(inSample[i]); return outSample; } /* Get the CDF gradient of the distribution */ Point DistributionImplementation::computeCDFGradient(const Point & point) const { if (dimension_ > 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeCDFGradient(const Point & point) const"; // As we are in 1D, we know that the collection contains exactly one point const Point initialParameters(getParameter()); const UnsignedInteger parametersDimension = initialParameters.getDimension(); Point CDFGradient(parametersDimension); // Clone the distribution Implementation cloneDistribution(clone()); // We will use centered differences const Scalar eps = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 3.0); // Increment for noncentered differences const Scalar eps2 = std::pow(ResourceMap::GetAsScalar("DistFunc-Precision"), 1.0 / 2.0); Point newParameters(initialParameters); for (UnsignedInteger i = 0; i < parametersDimension; ++i) { Scalar delta = 0.0; Scalar rightCDF = 0.0; // We will try a centered finite difference approximation try { newParameters[i] = initialParameters[i] + eps; cloneDistribution->setParameter(newParameters); rightCDF = cloneDistribution->computeCDF(point); delta += eps; } catch (...) { // If something went wrong with the right point, stay at the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); rightCDF = cloneDistribution->computeCDF(point); } Scalar leftCDF = 0.0; try { // If something is wrong with the right point, use non-centered finite differences const Scalar leftEpsilon = delta == 0.0 ? eps2 : eps; newParameters[i] = initialParameters[i] - leftEpsilon; cloneDistribution->setParameter(newParameters); leftCDF = cloneDistribution->computeCDF(point); delta += leftEpsilon; } catch (...) { // If something is wrong with the left point, it is either because the gradient is not computable or because we must use non-centered finite differences, in which case the right point has to be recomputed if (delta == 0.0) throw InvalidArgumentException(HERE) << "Error: cannot compute the CDF gradient at x=" << point << " for the current values of the parameters=" << initialParameters; newParameters[i] = initialParameters[i] + eps2; cloneDistribution->setParameter(newParameters); rightCDF = cloneDistribution->computeCDF(point); delta += eps2; // And the left point will be the center point newParameters[i] = initialParameters[i]; cloneDistribution->setParameter(newParameters); leftCDF = cloneDistribution->computeCDF(point); } CDFGradient[i] = (rightCDF - leftCDF) / delta; newParameters[i] = initialParameters[i]; } return CDFGradient; } /* Build a C1 interpolation of the CDF function for 1D continuous distributions */ Collection DistributionImplementation::interpolatePDFCDF(const UnsignedInteger n) { if (!isContinuous()) throw InternalException(HERE) << "Error: cannot interpolate the PDF and CDF of noncontinuous distributions."; if (dimension_ != 1) throw NotYetImplementedException(HERE) << "In DistributionImplementation::interpolatePDFCDF(const UnsignedInteger n): cannot interpolate CDF for multidimensional distributions."; const Scalar xMin = getRange().getLowerBound()[0]; const Scalar xMax = getRange().getUpperBound()[0]; const Scalar mu = getMean()[0]; // Here we use an absolute precision of 0.0 in order to force the algorithm to use all the available discretization points GaussKronrod algorithm(n - 1, cdfEpsilon_ * cdfEpsilon_, GaussKronrodRule::G3K7); const PDFWrapper pdfWrapper(this); Scalar error = -1.0; Point ai; Point bi; Sample fi; Point ei; algorithm.integrate(pdfWrapper, xMin, mu, error, ai, bi, fi, ei); ai.add(mu); Sample locationsCDF(ai.getSize(), 1); locationsCDF.getImplementation()->setData(ai); locationsCDF = locationsCDF.sort(0); algorithm.integrate(pdfWrapper, mu, xMax, error, ai, bi, fi, ei); ai.add(xMax); Sample locationsCCDF(ai.getSize(), 1); locationsCCDF.getImplementation()->setData(ai); locationsCCDF = locationsCCDF.sort(0); Collection coll(4); const Sample valuesCDF(computeCDF(locationsCDF)); const Sample valuesPDF(computePDF(locationsCDF)); const Sample valuesDDF(computeDDF(locationsCDF)); coll[0] = PiecewiseHermiteEvaluation(locationsCDF.getImplementation()->getData(), valuesPDF, valuesDDF); coll[1] = PiecewiseHermiteEvaluation(locationsCDF.getImplementation()->getData(), valuesCDF, valuesPDF); const Sample valuesCCDF(computeComplementaryCDF(locationsCCDF)); const Sample valuesCPDF(computePDF(locationsCCDF)); Sample derivativesCCDF(valuesCPDF); derivativesCCDF *= Point(1, -1.0); const Sample valuesCDDF(computeDDF(locationsCCDF)); coll[2] = PiecewiseHermiteEvaluation(locationsCCDF.getImplementation()->getData(), valuesCPDF, valuesCDDF); coll[3] = PiecewiseHermiteEvaluation(locationsCCDF.getImplementation()->getData(), valuesCCDF, derivativesCCDF); return coll; } /* Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar DistributionImplementation::computeConditionalDDF(const Scalar x, const Point & y) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeConditionalDDF(const Scalar x, const Point & y) const"; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar DistributionImplementation::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= dimension_) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return getMarginal(conditioningDimension)->computePDF(x); // General case Indices conditioning(conditioningDimension); conditioning.fill(); Indices conditioned(conditioning); conditioned.add(conditioningDimension); const Implementation conditioningDistribution(getMarginal(conditioning)); const Scalar pdfConditioning = conditioningDistribution->computePDF(y); if (pdfConditioning <= 0.0) return 0.0; Point z(y); z.add(x); const Implementation conditionedDistribution(getMarginal(conditioned)); const Scalar pdfConditioned = conditionedDistribution->computePDF(z); pdfEpsilon_ = conditionedDistribution->getPDFEpsilon() + conditioningDistribution->getPDFEpsilon(); return pdfConditioned / pdfConditioning; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Point DistributionImplementation::computeConditionalPDF(const Point & x, const Sample & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= dimension_) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Convert the values in x into a Sample const UnsignedInteger size = x.getDimension(); SampleImplementation xAsSample(size, 1); xAsSample.setData(x); // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return getMarginal(conditioningDimension)->computePDF(xAsSample).getImplementation()->getData(); // General case Indices conditioning(conditioningDimension); conditioning.fill(); Indices conditioned(conditioning); conditioned.add(conditioningDimension); const Implementation conditioningDistribution(getMarginal(conditioning)); const Sample pdfConditioning(conditioningDistribution->computePDF(y)); Sample z(y); z.stack(xAsSample); const Implementation conditionedDistribution(getMarginal(conditioned)); const Sample pdfConditioned(conditionedDistribution->computePDF(z)); Point result(size); for (UnsignedInteger i = 0; i < size; ++i) if (pdfConditioning[i][0] > 0.0) result[i] = pdfConditioned[i][0] / pdfConditioning[i][0]; return result; } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar DistributionImplementation::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= dimension_) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return getMarginal(conditioningDimension)->computeCDF(x); // General case Indices conditioning(conditioningDimension); conditioning.fill(); Indices conditioned(conditioning); conditioned.add(conditioningDimension); const Implementation conditioningDistribution(getMarginal(conditioning)); const Scalar pdfConditioning = conditioningDistribution->computePDF(y); if (pdfConditioning <= 0.0) return 0.0; const Implementation conditionedDistribution(getMarginal(conditioned)); const Scalar xMin = conditionedDistribution->getRange().getLowerBound()[conditioningDimension]; if (x <= xMin) return 0.0; const Scalar xMax = conditionedDistribution->getRange().getUpperBound()[conditioningDimension]; if (x >= xMax) return 1.0; // Numerical integration with respect to x // Here we recreate a ConditionalPDFWrapper only if none has been created or if the parameter dimension has changed if (p_conditionalPDFWrapper_.isNull() || (p_conditionalPDFWrapper_->getParameter().getDimension() != y.getDimension())) p_conditionalPDFWrapper_ = new ConditionalPDFWrapper(conditionedDistribution); p_conditionalPDFWrapper_->setParameter(y); GaussKronrod algo; const Point value(algo.integrate(p_conditionalPDFWrapper_, Interval(xMin, x))); return std::min(1.0, std::max(0.0, value[0] / pdfConditioning)); } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Point DistributionImplementation::computeConditionalCDF(const Point & x, const Sample & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= dimension_) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Convert the values in x into a Sample const UnsignedInteger size = x.getDimension(); // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) { SampleImplementation xAsSample(size, 1); xAsSample.setData(x); return getMarginal(conditioningDimension)->computeCDF(xAsSample).getImplementation()->getData(); } // General case Indices conditioning(conditioningDimension); conditioning.fill(); Indices conditioned(conditioning); conditioned.add(conditioningDimension); const Implementation conditioningDistribution(getMarginal(conditioning)); const Sample pdfConditioning(conditioningDistribution->computePDF(y)); const Implementation conditionedDistribution(getMarginal(conditioned)); const Scalar xMin = conditionedDistribution->getRange().getLowerBound()[conditioningDimension]; const Scalar xMax = conditionedDistribution->getRange().getUpperBound()[conditioningDimension]; Point result(size); // Here we recreate a ConditionalPDFWrapper only if none has been created or if the parameter dimension has changed if (p_conditionalPDFWrapper_.isNull() || (p_conditionalPDFWrapper_->getParameter().getDimension() != y.getDimension())) p_conditionalPDFWrapper_ = new ConditionalPDFWrapper(conditionedDistribution); GaussKronrod algo; for (UnsignedInteger i = 0; i < size; ++i) if (pdfConditioning[i][0] > 0.0) { if (x[i] >= xMax) result[i] = 1.0; else if (x[i] > xMin) { // Numerical integration with respect to x p_conditionalPDFWrapper_->setParameter(y[i]); const Point value(algo.integrate(p_conditionalPDFWrapper_, Interval(xMin, x[i]))); result[i] = std::min(1.0, std::max(0.0, value[0] / pdfConditioning[i][0])); } // xMin < x < xMax } // pdfConditioning[i][0] > 0 return result; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Scalar DistributionImplementation::computeConditionalQuantile(const Scalar q, const Point & y) const { return computeConditionalQuantile(Point(1, q), Sample(1, y))[0]; } /* Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ Point DistributionImplementation::computeConditionalQuantile(const Point & q, const Sample & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= dimension_) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile with a conditioning point of dimension greater or equal to the distribution dimension."; const UnsignedInteger size = q.getDimension(); for (UnsignedInteger i = 0; i < size; ++i) { if ((q[i] < 0.0) || (q[i] > 1.0)) throw InvalidArgumentException(HERE) << "Error: point=" << i << ", cannot compute a conditional quantile for a probability level q[" << i << "]=" << q[i] << " outside of [0, 1]"; } // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return getMarginal(conditioningDimension)->computeQuantile(q).getImplementation()->getData(); // General case const Scalar xMin = range_.getLowerBound()[conditioningDimension]; const Scalar xMax = range_.getUpperBound()[conditioningDimension]; Point result(size); // Here we recreate a ConditionalCDFWrapper only if none has been created or if the parameter dimension has changed if (p_conditionalCDFWrapper_.isNull() || (p_conditionalCDFWrapper_->getParameter().getDimension() != y.getDimension())) p_conditionalCDFWrapper_ = new ConditionalCDFWrapper(this); for (UnsignedInteger i = 0; i < size; ++i) { p_conditionalCDFWrapper_->setParameter(y[i]); Brent solver(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); result[i] = solver.solve(p_conditionalCDFWrapper_, q[i], xMin, xMax, 0.0, 1.0); } return result; } /* Quantile computation for dimension=1 */ Scalar DistributionImplementation::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: the method computeScalarQuantile is only defined for 1D distributions"; // This test allows to check if one can trust the current range. If not, it means that we are here to compute the range and then we cannot rely on it! Scalar lower = range_.getLowerBound()[0]; Scalar upper = range_.getUpperBound()[0]; // This test allows to know if the range has already been computed. If not, it is the role of the computeScalarQuantile() to do it. if (lower > upper) { LOGDEBUG("DistributionImplementation::computeScalarQuantile: look for a bracketing of the bounds of the range"); // Find a rough estimate of the lower bound and the upper bound Scalar step = 1.0; Scalar cdf = computeCDF(lower); if (cdf >= cdfEpsilon_) { // negative lower bound lower -= step; cdf = computeCDF(lower); while (cdf >= cdfEpsilon_) { step *= 2.0; lower -= step; cdf = computeCDF(lower); } } else { // positive lower bound lower += step; cdf = computeCDF(lower); while (computeCDF(lower) <= cdfEpsilon_) { step *= 2.0; lower += step; cdf = computeCDF(lower); } } // Here, lower is a rough estimate of the lower bound // Go to the upper bound upper = lower; step = 1.0; Scalar ccdf = computeComplementaryCDF(upper); while (ccdf >= cdfEpsilon_) { upper += step; step *= 2.0; ccdf = computeComplementaryCDF(upper); } } LOGDEBUG(OSS() << "DistributionImplementation::computeScalarQuantile: lower=" << lower << ", upper=" << upper); if (prob < 0.0) return (tail ? upper : lower); if (prob >= 1.0) return (tail ? lower : upper); const Scalar q = tail ? 1.0 - prob : prob; const CDFWrapper wrapper(this); const Function f(bindMethod(wrapper, &CDFWrapper::computeCDF, 1, 1)); const Scalar leftTau = lower; const Scalar leftCDF = 0.0; const Scalar rightTau = upper; const Scalar rightCDF = 1.0; Brent solver(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); const Scalar root = solver.solve(f, q, leftTau, rightTau, leftCDF, rightCDF); LOGDEBUG(OSS() << "root=" << root); return root; } // computeScalarQuantile /* Generic implementation of the quantile computation */ Point DistributionImplementation::computeQuantile(const Scalar prob, const Bool tail) const { Scalar marginalProb = 0.0; return computeQuantile(prob, tail, marginalProb); } Point DistributionImplementation::computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const { const Scalar q = tail ? 1.0 - prob : prob; marginalProb = q; // Special case for bording values if (prob < 0.0) return (tail ? range_.getUpperBound() : range_.getLowerBound()); if (prob >= 1.0) return (tail ? range_.getLowerBound() : range_.getUpperBound()); // Special case for dimension 1 if (dimension_ == 1) return Point(1, computeScalarQuantile(prob, tail)); // Special case for independent copula if (hasIndependentCopula()) { Point result(dimension_); marginalProb = std::pow(q, 1.0 / dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = getMarginal(i)->computeScalarQuantile(marginalProb); return result; } // Extract the marginal distributions Collection marginals(dimension_); for (UnsignedInteger i = 0; i < dimension_; i++) marginals[i] = getMarginal(i); // The n-D quantile is defined as X(\tau) = (F_1^{-1}(\tau), ..., F_n^{-1}(\tau)), // with tau such as F(X(\tau)) = q. // As F(x) = C(F_1(x_1),...,F_n(x_n)), the constraint F(X(\tau)) = q reads: // C(\tau,...,\tau) = q // Bracketing of \tau using the Frechet Hoeffding bounds: // max(n\tau - n + 1, 0) <= C(\tau,...,\tau) <= \tau // from which we deduce that q <= \tau and \tau <= 1 - (1 - q) / n // Lower bound of the bracketing interval const QuantileWrapper wrapper(marginals, this); const Function f(bindMethod(wrapper, &QuantileWrapper::computeDiagonal, 1, 1)); Scalar leftTau = q; Scalar leftCDF = f(Point(1, leftTau))[0]; // Due to numerical precision issues, the theoretical bound can be slightly violated if (leftCDF > prob) { leftTau = 0.0; leftCDF = 0.0; } // Upper bound of the bracketing interval Scalar rightTau = 1.0 - (1.0 - q) / dimension_; Scalar rightCDF = f(Point(1, rightTau))[0]; // Due to numerical precision issues, the theoretical bound can be slightly violated if (rightCDF < prob) { rightTau = 1.0; rightCDF = 1.0; } LOGDEBUG(OSS() << "DistributionImplementation::computeQuantile: dimension=" << dimension_ << ", q=" << q << ", leftTau=" << leftTau << ", leftCDF=" << leftCDF << ", rightTau=" << rightTau << ", rightCDF=" << rightCDF); // Use Brent's method to compute the quantile efficiently for continuous distributions const Brent solver(quantileEpsilon_, cdfEpsilon_, cdfEpsilon_, quantileIterations_); marginalProb = solver.solve(f, q, leftTau, rightTau, leftCDF, rightCDF); LOGINFO(OSS(false) << "tau=" << marginalProb); return wrapper.diagonalToSpace(marginalProb); } /* Get the minimum volume interval containing at least a given probability of the distribution. The minimum volume interval [a, b] is such that: a\in[lowerBound, F^{-1}(1-p)] b = F^{-1}(p+F(a)) f(a) = f(b) = f(F^{-1}(p+F(a))) so we look for the root of f(F^{-1}(p+F(a))) - f(a) */ struct MinimumVolumeIntervalWrapper { MinimumVolumeIntervalWrapper(const DistributionImplementation * p_distribution, const Collection & marginals, const Scalar prob) : p_distribution_(p_distribution) , marginals_(marginals) , lastB_(-SpecFunc::MaxScalar) , prob_(prob) { // Nothing to do } MinimumVolumeIntervalWrapper(const DistributionImplementation * p_distribution, const Scalar prob) : p_distribution_(p_distribution) , marginals_(0) , lastB_(-SpecFunc::MaxScalar) , prob_(prob) { // Nothing to do } // The minimum volume interval [a, b] is such that: // a\in[lowerBound, F^{-1}(1-p)] // b = F^{-1}(p+F(a)) // f(a) = f(b) = f(F^{-1}(p+F(a))) // Here we compute f(F^{-1}(p+F(a))) - f(a) Point operator() (const Point & point) const { lastB_ = p_distribution_->computeQuantile(prob_ + p_distribution_->computeCDF(point))[0]; const Scalar pdfB = p_distribution_->computePDF(lastB_); const Scalar pdfPoint = p_distribution_->computePDF(point); return Point(1, pdfB - pdfPoint); } Point objective(const Point & point) const { lastB_ = p_distribution_->computeQuantile(prob_ + p_distribution_->computeCDF(point))[0]; return Point(1, lastB_ - point[0]); } Scalar getLastB() const { return lastB_; } Interval buildBilateralInterval(const Scalar beta) const { const UnsignedInteger size(marginals_.getSize()); Point lower(size); Point upper(size); const Scalar alpha(0.5 * (1.0 - beta)); for (UnsignedInteger i = 0; i < size; ++i) { lower[i] = marginals_[i].computeQuantile(alpha, false)[0]; upper[i] = marginals_[i].computeQuantile(alpha, true)[0]; } return Interval(lower, upper); } Interval buildMinimumVolumeInterval(const Scalar beta) const { const UnsignedInteger size(marginals_.getSize()); Point lower(size); Point upper(size); for (UnsignedInteger i = 0; i < size; ++i) { const Interval marginalIC(marginals_[i].computeMinimumVolumeInterval(beta)); lower[i] = marginalIC.getLowerBound()[0]; upper[i] = marginalIC.getUpperBound()[0]; } return Interval(lower, upper); } Point computeBilateralProbability(const Point & beta) const { const Interval IC(buildBilateralInterval(beta[0])); const Scalar probability = p_distribution_->computeProbability(IC); return Point(1, probability); } Point computeMinimumVolumeProbability(const Point & beta) const { const Interval IC(buildMinimumVolumeInterval(beta[0])); const Scalar probability = p_distribution_->computeProbability(IC); return Point(1, probability); } const DistributionImplementation * p_distribution_; Collection marginals_; mutable Scalar lastB_; const Scalar prob_; }; // struct MinimumVolumeIntervalWrapper Interval DistributionImplementation::computeMinimumVolumeInterval(const Scalar prob) const { Scalar marginalProb = -1.0; return computeMinimumVolumeIntervalWithMarginalProbability(prob, marginalProb); } Interval DistributionImplementation::computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { if (!isContinuous()) throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeMinimumVolumeInterval()"; // If the distribution is elliptical, the minimum volume interval is equal to the bilateral confidence interval which is much cheaper to compute if (isElliptical()) { LOGINFO("Compute the minimum volume interval using the bilateral confidence interval (elliptical case)"); const Interval result(computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb)); return result; } if (prob <= 0.0) { const Point median(computeQuantile(0.5)); marginalProb = 0.0; return Interval(median, median); } if (prob >= 1.0) { marginalProb = 1.0; return range_; } if (dimension_ == 1) { // First, the most accurate method, which assumes a continuous PDF try { const Interval result(computeUnivariateMinimumVolumeIntervalByRootFinding(prob, marginalProb)); LOGINFO("Compute the minimum volume interval by root finding (continuous case)"); return result; } // Second, the general purpose method catch(...) { const Interval result(computeUnivariateMinimumVolumeIntervalByOptimization(prob, marginalProb)); LOGINFO("Compute the minimum volume interval by optimization (general case)"); return result; } } Collection marginals(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) marginals[i] = getMarginal(i); const MinimumVolumeIntervalWrapper minimumVolumeIntervalWrapper(this, marginals, prob); const Function function(bindMethod(minimumVolumeIntervalWrapper, &MinimumVolumeIntervalWrapper::computeMinimumVolumeProbability, 1, 1)); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); // Here the equation we have to solve is P(X\in IC(\beta))=prob marginalProb = solver.solve(function, prob, 0.0, 1.0, 0.0, 1.0); const Interval IC(minimumVolumeIntervalWrapper.buildMinimumVolumeInterval(marginalProb)); return IC; } /* If the density is continuous, we have to solve PDF(b) - PDF(a) == 0 with F(b)-F(a)=prob, b>=a ie b=F^{-1}(prob+F(a)) */ Interval DistributionImplementation::computeUnivariateMinimumVolumeIntervalByRootFinding(const Scalar prob, Scalar & marginalProb) const { const MinimumVolumeIntervalWrapper minimumVolumeIntervalWrapper(this, prob); const Function function(bindMethod(minimumVolumeIntervalWrapper, &MinimumVolumeIntervalWrapper::operator(), 1, 1)); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); const Scalar xMin = range_.getLowerBound()[0]; const Scalar xMax = computeScalarQuantile(prob, true); const Scalar a = solver.solve(function, 0.0, xMin, xMax); const Scalar b = minimumVolumeIntervalWrapper.getLastB(); marginalProb = prob; return Interval(a, b); } /* We minimize b-a with the constraint F(b)-F(a)=prob, b>=a ie b=F^{-1}(prob+F(a)) */ Interval DistributionImplementation::computeUnivariateMinimumVolumeIntervalByOptimization(const Scalar prob, Scalar & marginalProb) const { const MinimumVolumeIntervalWrapper minimumVolumeIntervalWrapper(this, prob); const Function objective(bindMethod(minimumVolumeIntervalWrapper, &MinimumVolumeIntervalWrapper::objective, 1, 1)); OptimizationProblem problem; problem.setObjective(objective); problem.setBounds(getRange()); TNC solver(problem); solver.setStartingPoint(computeQuantile(prob, true)); solver.run(); const Scalar a = solver.getResult().getOptimalPoint()[0]; const Scalar b = minimumVolumeIntervalWrapper.getLastB(); marginalProb = prob; return Interval(a, b); } /* Get the product bilateral confidence interval containing a given probability of the distribution */ Interval DistributionImplementation::computeBilateralConfidenceInterval(const Scalar prob) const { Scalar marginalProb = -1.0; return computeBilateralConfidenceIntervalWithMarginalProbability(prob, marginalProb); } Interval DistributionImplementation::computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const { if (!isContinuous()) throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeMinimumVolumeInterval()"; if (prob <= 0.0) { const Point median(computeQuantile(0.5)); marginalProb = 0.0; return Interval(median, median); } if (prob >= 1.0) { marginalProb = 1.0; return range_; } if (dimension_ == 1) { marginalProb = prob; const Interval IC(computeQuantile(0.5 * (1.0 - prob), false), computeQuantile(0.5 * (1.0 - prob), true)); return IC; } Collection marginals(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) marginals[i] = getMarginal(i); const MinimumVolumeIntervalWrapper minimumVolumeIntervalWrapper(this, marginals, prob); const Function function(bindMethod(minimumVolumeIntervalWrapper, &MinimumVolumeIntervalWrapper::computeBilateralProbability, 1, 1)); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); marginalProb = solver.solve(function, prob, 0.0, 1.0, 0.0, 1.0); const Interval IC(minimumVolumeIntervalWrapper.buildBilateralInterval(marginalProb)); return IC; } /* Get the product unilateral confidence interval containing a given probability of the distribution */ Interval DistributionImplementation::computeUnilateralConfidenceInterval(const Scalar prob, const Bool tail) const { Scalar marginalProb = -1.0; return computeUnilateralConfidenceIntervalWithMarginalProbability(prob, tail, marginalProb); } Interval DistributionImplementation::computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const { marginalProb = -1.0; if (tail) { const Point lowerBound(computeInverseSurvivalFunction(prob, marginalProb)); return Interval(lowerBound, range_.getUpperBound()); } const Point upperBound(computeQuantile(prob, false, marginalProb)); return Interval(range_.getLowerBound(), upperBound); } /* Get the minimum volume level set containing at least a given probability of the distribution. The minimum volume level A(p) set is such that A(p)={x\in R^n | y(x) <= y_p} where y(x)=-\log X and y_p is the p-quantile of Y=pdf(X) */ LevelSet DistributionImplementation::computeMinimumVolumeLevelSet(const Scalar prob) const { Scalar threshold = -1.0; return computeMinimumVolumeLevelSetWithThreshold(prob, threshold); } LevelSet DistributionImplementation::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { if (!isContinuous()) throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeMinimumVolumeLevelSet()"; // 1D special case here to avoid a double construction of minimumVolumeLevelSetFunction if ((dimension_ == 1) && (ResourceMap::GetAsBool("Distribution-MinimumVolumeLevelSetBySampling"))) { LOGINFO("Compute the minimum volume level set by sampling (QMC)"); const LevelSet result(computeUnivariateMinimumVolumeLevelSetByQMC(prob, threshold)); return result; } Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); // If dimension_ == 1 the threshold can be computed analyticaly Scalar minusLogPDFThreshold; if (dimension_ == 1) { const CompositeDistribution composite(minimumVolumeLevelSetFunction, *this); minusLogPDFThreshold = composite.computeQuantile(prob)[0]; LOGINFO("Compute the minimum volume level set by using a composite distribution quantile (univariate general case)"); } // dimension == 1 else { LOGINFO("Compute the minimum volume level set by sampling (Monte Carlo)"); const UnsignedInteger size = ResourceMap::GetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize"); const Sample xSample(getSample(size)); const Sample logPDFSample(computeLogPDF(xSample)); minusLogPDFThreshold = -logPDFSample.computeQuantile(1.0 - prob)[0]; } // dimension > 1 threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } LevelSet DistributionImplementation::computeUnivariateMinimumVolumeLevelSetByQMC(const Scalar prob, Scalar & threshold) const { Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); // As we are in 1D and as the function defining the composite distribution can have complex variations, // we use an improved sampling method to compute the quantile of the -logPDF(X) distribution const UnsignedInteger size = SpecFunc::NextPowerOfTwo(ResourceMap::GetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize")); const Sample xQMC(getSampleByQMC(size)); const Sample logPDFSample(computeLogPDF(xQMC)); const Scalar minusLogPDFThreshold = -logPDFSample.computeQuantile(1.0 - prob)[0]; threshold = std::exp(-minusLogPDFThreshold); return LevelSet(minimumVolumeLevelSetFunction, minusLogPDFThreshold); } /* Get the mathematical and numerical range of the distribution. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ Interval DistributionImplementation::getRange() const { return range_; } void DistributionImplementation::setRange(const Interval & range) { if (range.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given range has a dimension incompatible with the dimension of the distribution."; range_ = range; } /* Compute the numerical range of the distribution given the parameters values */ void DistributionImplementation::computeRange() { const Interval::BoolCollection finiteLowerBound(dimension_, false); const Interval::BoolCollection finiteUpperBound(dimension_, false); // Initialize the range with inverted bounds in order to inform the generic implementation of the // computeScalarQuantile() method that it cannot trust the current range range_ = Interval(Point(dimension_, 1.0), Point(dimension_, -1.0), finiteLowerBound, finiteUpperBound); setRange(Interval(computeLowerBound(), computeUpperBound(), finiteLowerBound, finiteUpperBound)); } /* Compute the lower bound of the range */ Point DistributionImplementation::computeLowerBound() const { // For a multivariate distribution, the range is the axes aligned box that fits to the marginal ranges Point lowerBound(dimension_); // Here, we must separate the 1D case from the nD case as the getMarginal() method is generic for 1D case and // would involve a circular call to computeRange() if (dimension_ == 1) lowerBound[0] = computeScalarQuantile(cdfEpsilon_); else for (UnsignedInteger i = 0; i < dimension_; ++i) lowerBound[i] = getMarginal(i)->computeScalarQuantile(cdfEpsilon_); return lowerBound; } /* Compute the upper bound of the range */ Point DistributionImplementation::computeUpperBound() const { // For a multivariate distribution, the range is the axes aligned box that fits to the marginal ranges Point upperBound(dimension_); if (dimension_ == 1) upperBound[0] = computeScalarQuantile(cdfEpsilon_, true); else for (UnsignedInteger i = 0; i < dimension_; ++i) upperBound[i] = getMarginal(i)->computeScalarQuantile(cdfEpsilon_, true); return upperBound; } /* Compute the mean of the distribution */ void DistributionImplementation::computeMean() const { mean_ = getShiftedMoment(1, Point(getDimension(), 0.0)); isAlreadyComputedMean_ = true; } /* Get the mean of the distribution */ Point DistributionImplementation::getMean() const { if (!isAlreadyComputedMean_) computeMean(); return mean_; } /* Get the standard deviation of the distribution */ Point DistributionImplementation::getStandardDeviation() const { const Point variance(getCenteredMoment(2)); Point result(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = std::sqrt(variance[i]); return result; } /* Get the skewness of the distribution */ Point DistributionImplementation::getSkewness() const { const Point variance(getCenteredMoment(2)); const Point thirdMoment(getCenteredMoment(3)); Point result(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = thirdMoment[i] / std::pow(variance[i], 1.5); return result; } /* Get the kurtosis of the distribution */ Point DistributionImplementation::getKurtosis() const { const Point variance(getCenteredMoment(2)); const Point fourthMoment(getCenteredMoment(4)); Point result(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) result[i] = fourthMoment[i] / std::pow(variance[i], 2.0); return result; } /* Get the moments of the distribution */ Point DistributionImplementation::getMoment(const UnsignedInteger n) const { if (n == 0) return Point(dimension_, 1.0); return getShiftedMoment(n, Point(dimension_, 0.0)); } /* Get the centered moments of the distribution */ Point DistributionImplementation::getCenteredMoment(const UnsignedInteger n) const { if (n == 0) throw InvalidArgumentException(HERE) << "Error: the centered moments of order 0 are undefined."; if (n == 1) return Point(dimension_, 0.0); return getShiftedMoment(n, getMean()); } /* Compute the covariance of the distribution */ void DistributionImplementation::computeCovariance() const { if (isContinuous()) computeCovarianceContinuous(); else if (isDiscrete()) computeCovarianceDiscrete(); else computeCovarianceGeneral(); } void DistributionImplementation::computeCovarianceContinuous() const { // We need this to initialize the covariance matrix in two cases: // + this is the first call to this routine (which could be checked by testing the dimension of the distribution and the dimension of the matrix // + the copula has changed from a non-independent one to the independent copula mean_ = getMean(); covariance_ = CovarianceMatrix(dimension_); // First the diagonal terms, which are the marginal covariances // Marginal covariances const Point variance(getCenteredMoment(2)); for (UnsignedInteger component = 0; component < dimension_; ++component) covariance_(component, component) = variance[component]; // Off-diagonal terms if the copula is not the independent copula if (!hasIndependentCopula()) { // Here we use the following expression of the covariance \Sigma_{i,j}: // \Sigma_{i,j}=\int_{\R^2}(x_i-\mu_i)(x_j-\mu_j)p_{i,j}(x_i,x_j)dx_idx_j // Do we use the adaptive quadrature algorithm? const Bool useAdaptiveAlorithm = ResourceMap::GetAsBool("Distribution-UseCovarianceAdaptiveAlgorithm"); IntegrationAlgorithm integrator; if (useAdaptiveAlorithm) integrator = IteratedQuadrature(GaussKronrod()); else integrator = GaussLegendre(Indices(2, static_cast(std::ceil(std::sqrt(1.0 * integrationNodesNumber_))))); // Performs the integration for each covariance in the strictly lower triangle of the covariance matrix // We loop over the coefficients in the outer loop because the most expensive task is to get the 2D marginal distributions Indices indices(2); for(UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { indices[0] = rowIndex; const Scalar muI = mean_[rowIndex]; for (UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension_; ++columnIndex) { indices[1] = columnIndex; const Scalar muJ = mean_[columnIndex]; const Implementation marginalDistribution(getMarginal(indices)); if (!marginalDistribution->hasIndependentCopula()) { // Compute the covariance element const CovarianceWrapper kernel(marginalDistribution, muI, muJ); const Interval interval(marginalDistribution->getRange()); LOGINFO(OSS() << "Compute covariance(" << rowIndex << ", " << columnIndex << ")"); const Point value(integrator.integrate(kernel, interval)); LOGINFO(OSS() << "covariance(" << rowIndex << ", " << columnIndex << ")=" << value[0]); covariance_(rowIndex, columnIndex) = value[0]; } } // loop over column indices } // loop over row indices } // if !hasIndependentCopula isAlreadyComputedCovariance_ = true; } // computeCovarianceContinuous void DistributionImplementation::computeCovarianceDiscrete() const { // We need this to initialize the covariance matrix in two cases: // + this is the first call to this routine (which could be checked by testing the dimension of the distribution and the dimension of the matrix // + the copula has changed from a non-independent one to the independent copula covariance_ = CovarianceMatrix(dimension_); // First the diagonal terms, which are the marginal covariances // Marginal covariances const Point variance(getCenteredMoment(2)); for(UnsignedInteger component = 0; component < dimension_; ++component) covariance_(component, component) = variance[component]; // Off-diagonal terms if the copula is not the independent copula if (!hasIndependentCopula()) { // To ensure that the mean is up to date mean_ = getMean(); // Performs the integration for each covariance in the strictly lower triangle of the covariance matrix // We first loop over the coefficients because the most expensive task is to get the 2D marginal distributions Indices indices(2); for(UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { indices[0] = rowIndex; const Scalar muI = mean_[rowIndex]; for(UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension_; ++columnIndex) { indices[1] = columnIndex; const Scalar muJ = mean_[columnIndex]; const Implementation marginalDistribution(getMarginal(indices)); if (!marginalDistribution->hasIndependentCopula()) { const Sample support(marginalDistribution->getSupport()); const Sample samplePDF(marginalDistribution->computePDF(support)); Scalar value = 0.0; const UnsignedInteger size = support.getSize(); for (UnsignedInteger i = 0; i < size; ++i) value += (support[i][0] - muI) * (support[i][1] - muJ) * samplePDF[i][0]; covariance_(rowIndex, columnIndex) = value; } } // loop over column indices } // loop over row indices } // if !hasIndependentCopula isAlreadyComputedCovariance_ = true; } void DistributionImplementation::computeCovarianceGeneral() const { // We need this to initialize the covariance matrix in two cases: // + this is the first call to this routine (which could be checked by testing the dimension of the distribution and the dimension of the matrix // + the copula has changed from a non-independent one to the independent copula covariance_ = CovarianceMatrix(dimension_); // First the diagonal terms, which are the marginal covariances // To ensure that the mean is up to date mean_ = getMean(); // Get the standard deviation const Point standardDeviation(getStandardDeviation()); for(UnsignedInteger component = 0; component < dimension_; ++component) covariance_(component, component) = standardDeviation[component] * standardDeviation[component]; // Off-diagonal terms if the copula is not the independent copula if (!hasIndependentCopula()) { const Scalar delta = 2.0; Indices indices(2); const int N(8 * 2 * 2 * 2 * 2 * 2); const Scalar h = 0.5 / 2 / 2 / 2 / 2 / 2; for(UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { indices[0] = rowIndex; const Implementation marginalI(getMarginal(rowIndex)); const Scalar mi = marginalI->computeQuantile(0.5)[0]; const Scalar di = marginalI->computeQuantile(0.75)[0] - marginalI->computeQuantile(0.25)[0]; for(UnsignedInteger columnIndex = rowIndex + 1; columnIndex < dimension_; ++columnIndex) { indices[1] = columnIndex; const Implementation marginalDistribution(getMarginal(indices)); if (!marginalDistribution->hasIndependentCopula()) { const Implementation marginalJ(getMarginal(columnIndex)); const Scalar mj = marginalJ->computeQuantile(0.5)[0]; const Scalar dj = marginalJ->computeQuantile(0.75)[0] - marginalJ->computeQuantile(0.25)[0]; Point xij(2); xij[0] = mi; xij[1] = mj; Scalar covarianceIJ = 0.0; // Then we loop over the integration points for(int rowNodeIndex = -N; rowNodeIndex < N + 1; ++rowNodeIndex) { const Scalar hi = h * rowNodeIndex; const Scalar expHi = std::exp(hi); const Scalar iexpHi = 1.0 / expHi; const Scalar sinhHi = 0.5 * (expHi - iexpHi); const Scalar expSinhHi = std::exp(sinhHi); const Scalar iexpSinhHi = 1.0 / expSinhHi; const Scalar iTwoCoshSinhHi = 1.0 / (expSinhHi + iexpSinhHi); const Scalar xip = mi + expSinhHi * iTwoCoshSinhHi * di * delta; const Scalar wi = (expHi + iexpHi) * iTwoCoshSinhHi * iTwoCoshSinhHi; const Scalar cdfip = marginalI->computeCDF(xip); for(int columnNodeIndex = -N; columnNodeIndex < N + 1; ++columnNodeIndex) { const Scalar hj = h * columnNodeIndex; const Scalar expHj = std::exp(hj); const Scalar iexpHj = 1.0 / expHj; const Scalar sinhHj = 0.5 * (expHj - iexpHj); const Scalar expSinhHj = std::exp(sinhHj); const Scalar iexpSinhHj = 1.0 / expSinhHj; const Scalar iTwoCoshSinhHj = 1.0 / (expSinhHj + iexpSinhHj); const Scalar xjp = mj + expSinhHj * iTwoCoshSinhHj * dj * delta; const Scalar wj = (expHj + iexpHj) * iTwoCoshSinhHj * iTwoCoshSinhHj; const Scalar cdfjp = marginalJ->computeCDF(xjp); Point inpp(2); inpp[0] = xip; inpp[1] = xjp; covarianceIJ += delta * delta * di * dj * h * h * wi * wj * (marginalDistribution->computeCDF(inpp) - cdfip * cdfjp); } // loop over J integration nodes } // loop over I integration nodes covariance_(rowIndex, columnIndex) = covarianceIJ; } } // loop over column indices } // loop over row indices } // if !hasIndependentCopula isAlreadyComputedCovariance_ = true; } // computeCovarianceGeneral /* Get the covariance of the distribution */ CovarianceMatrix DistributionImplementation::getCovariance() const { if (!isAlreadyComputedCovariance_) computeCovariance(); return covariance_; } /* Correlation matrix accessor */ CorrelationMatrix DistributionImplementation::getCorrelation() const { // To make sure the covariance is up to date covariance_ = getCovariance(); CorrelationMatrix R(dimension_); Point sigma(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const Scalar sigmaI = std::sqrt(covariance_(i, i)); sigma[i] = sigmaI; if (sigmaI > 0.0) for (UnsignedInteger j = 0; j < i; ++j) if (sigma[j] > 0) R(i, j) = covariance_(i, j) / (sigmaI * sigma[j]); } return R; } CorrelationMatrix DistributionImplementation::getLinearCorrelation() const { return getCorrelation(); } CorrelationMatrix DistributionImplementation::getPearsonCorrelation() const { return getCorrelation(); } /* Get the Spearman correlation of the distribution */ CorrelationMatrix DistributionImplementation::getSpearmanCorrelation() const { if (isCopula()) return getCorrelation(); return getCopula()->getSpearmanCorrelation(); } /* Get the Kendall concordance of the distribution */ CorrelationMatrix DistributionImplementation::getKendallTau() const { if (isElliptical()) { const CorrelationMatrix shape(getCorrelation()); CorrelationMatrix tau(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) for(UnsignedInteger j = 0; j < i; ++j) tau(i, j) = std::asin(shape(i, j)) * (2.0 / M_PI); return tau; } return getCopula()->getKendallTau(); } /* Get the shape matrix of the distribution, ie the correlation matrix of its copula if it is elliptical */ CorrelationMatrix DistributionImplementation::getShapeMatrix() const { if (!hasEllipticalCopula()) throw NotDefinedException(HERE) << "Error: the shape matrix is defined only for distributions with elliptical copulas."; return getCopula()->getShapeMatrix(); } /* Cholesky factor of the correlation matrix accessor */ TriangularMatrix DistributionImplementation::getCholesky() const { return getCovariance().computeCholesky(); } /* Inverse of the Cholesky factor of the correlation matrix accessor */ TriangularMatrix DistributionImplementation::getInverseCholesky() const { // Compute its Cholesky factor TriangularMatrix cholesky(getCholesky()); const TriangularMatrix inverseCholesky(cholesky.solveLinearSystem(IdentityMatrix(dimension_), false).getImplementation()); return inverseCholesky; } /* Compute the nodes and weights for a 1D gauss quadrature over [-1, 1] with respect to the Lebesgue measure */ void DistributionImplementation::computeGaussNodesAndWeights() const { const GaussLegendre integrator(Indices(1, integrationNodesNumber_)); // Nodes gaussNodes_ = integrator.getNodes().getImplementation()->getData() * 2.0 - Point(integrationNodesNumber_, 1.0); // Weights gaussWeights_ = integrator.getWeights() * 2.0; isAlreadyComputedGaussNodesAndWeights_ = true; } /* integrationNodesNumber accessors */ UnsignedInteger DistributionImplementation::getIntegrationNodesNumber() const { return integrationNodesNumber_; } void DistributionImplementation::setIntegrationNodesNumber(const UnsignedInteger integrationNodesNumber) const { if (integrationNodesNumber != integrationNodesNumber_) { isAlreadyComputedMean_ = false; isAlreadyComputedCovariance_ = false; isAlreadyComputedGaussNodesAndWeights_ = false; integrationNodesNumber_ = integrationNodesNumber; } } /* Gauss nodes and weights accessor */ Point DistributionImplementation::getGaussNodesAndWeights(Point & weights) const { if (!isAlreadyComputedGaussNodesAndWeights_) computeGaussNodesAndWeights(); weights = gaussWeights_; return gaussNodes_; } /* Get the moments of the standardized distribution */ Point DistributionImplementation::getStandardMoment(const UnsignedInteger n) const { return getStandardRepresentative()->getMoment(n); } /* Get the shifted moments of the distribution */ Point DistributionImplementation::getShiftedMoment(const UnsignedInteger n, const Point & shift) const { if (isContinuous()) return computeShiftedMomentContinuous(n, shift); if (isDiscrete()) return computeShiftedMomentDiscrete(n, shift); return computeShiftedMomentGeneral(n, shift); } Point DistributionImplementation::computeShiftedMomentContinuous(const UnsignedInteger n, const Point & shift) const { if (shift.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the shift dimension must match the distribution dimension."; if (n == 0) return Point(dimension_, 1.0); Point moment(dimension_); // For each component GaussKronrod algo; for(UnsignedInteger component = 0; component < dimension_; ++component) { const Implementation marginalDistribution(getMarginal(component)); const ShiftedMomentWrapper integrand(n, shift[component], marginalDistribution); const Scalar a = marginalDistribution->getRange().getLowerBound()[0]; const Scalar b = marginalDistribution->getRange().getUpperBound()[0]; moment[component] = algo.integrate(integrand, Interval(a, b))[0]; } // End of each component return moment; } Point DistributionImplementation::computeShiftedMomentDiscrete(const UnsignedInteger n, const Point & shift) const { if (n == 0) throw InvalidArgumentException(HERE) << "Error: the centered moments of order 0 are undefined."; if (shift.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the shift dimension must match the distribution dimension."; Point moment(dimension_); const Sample support(getSupport()); const Sample pdfSupport(computePDF(support)); for (UnsignedInteger i = 0; i < support.getSize(); ++i) for (UnsignedInteger j = 0; j < dimension_; ++j) moment[j] += std::pow(support[i][j] - shift[j], static_cast(n)) * pdfSupport[i][0]; return moment; } Point DistributionImplementation::computeShiftedMomentGeneral(const UnsignedInteger n, const Point & shift) const { if (n == 0) throw InvalidArgumentException(HERE) << "Error: the centered moments of order 0 are undefined."; if (shift.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the shift dimension must match the distribution dimension."; Point moment(dimension_); const Scalar epsilon = std::sqrt(quantileEpsilon_); const UnsignedInteger MaximumLevel = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultLevelNumber") + 3; // For each component for(UnsignedInteger component = 0; component < dimension_; ++component) { Scalar h = 0.5; UnsignedInteger N = 6; const Implementation marginalDistribution(getMarginal(component)); const Scalar shiftComponent = shift[component]; // Central term moment[component] = h * 0.5 * std::pow(marginalDistribution->computeQuantile(0.5)[0], static_cast(n)); // First block for (UnsignedInteger j = 1; j <= N; ++j) { const Scalar hj = h * j; const Scalar expHj = std::exp(hj); const Scalar iexpHj = 1.0 / expHj; const Scalar sinhHj = 0.5 * (expHj - iexpHj); const Scalar expSinhHj = std::exp(sinhHj); const Scalar iexpSinhHj = 1.0 / expSinhHj; const Scalar iTwoCoshSinhHj = 1.0 / (expSinhHj + iexpSinhHj); const Scalar xjm = iexpSinhHj * iTwoCoshSinhHj; const Scalar xjp = expSinhHj * iTwoCoshSinhHj; const Scalar wj = (expHj + iexpHj) * iTwoCoshSinhHj * iTwoCoshSinhHj; moment[component] += h * wj * (std::pow(marginalDistribution->computeQuantile(xjm)[0] - shiftComponent, static_cast(n)) + std::pow(marginalDistribution->computeQuantile(xjp)[0] - shiftComponent, static_cast(n))); } // End of first block //values[0] = moment[component]; // Sequential addition of half-blocks Scalar error = 1.0; UnsignedInteger level = 0; while( (error > epsilon) && (level < MaximumLevel)) { ++level; h *= 0.5; moment[component] *= 0.5; Scalar delta = 0.0; for (UnsignedInteger j = 0; j <= N; ++j) { const Scalar hj = h * (2 * j + 1); const Scalar expHj = std::exp(hj); const Scalar iexpHj = 1.0 / expHj; const Scalar sinhHj = 0.5 * (expHj - iexpHj); const Scalar expSinhHj = std::exp(sinhHj); const Scalar iexpSinhHj = 1.0 / expSinhHj; const Scalar iTwoCoshSinhHj = 1.0 / (expSinhHj + iexpSinhHj); const Scalar xjm = iexpSinhHj * iTwoCoshSinhHj; const Scalar xjp = expSinhHj * iTwoCoshSinhHj; Scalar wj = (expHj + iexpHj) * iTwoCoshSinhHj * iTwoCoshSinhHj; delta += h * wj * (std::pow(marginalDistribution->computeQuantile(xjm)[0] - shiftComponent, static_cast(n)) + std::pow(marginalDistribution->computeQuantile(xjp)[0] - shiftComponent, static_cast(n))); } error = std::abs((delta - moment[component]) / (1.0 + std::abs(delta))); moment[component] += delta; N *= 2; } // End of half-block } // End of each component return moment; } /* Check if the distribution is elliptical */ Bool DistributionImplementation::isElliptical() const { return false; } /* Check if the distribution is a copula */ Bool DistributionImplementation::isCopula() const { return isCopula_; } /* Check if the distribution is continuous */ Bool DistributionImplementation::isContinuous() const { return true; } /* Check if the distribution is discrete */ Bool DistributionImplementation::isDiscrete() const { return false; } /* Tell if the distribution is integer valued */ Bool DistributionImplementation::isIntegral() const { return false; } /* Tell if the distribution has elliptical copula */ Bool DistributionImplementation::hasEllipticalCopula() const { return dimension_ == 1; } /* Tell if the distribution has independent copula */ Bool DistributionImplementation::hasIndependentCopula() const { return dimension_ == 1; } /* Get the support of a distribution that intersect a given interval */ Sample DistributionImplementation::getSupport(const Interval & interval) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::getSupport(const Interval & interval) const"; } /* Get the support on the whole range */ Sample DistributionImplementation::getSupport() const { return getSupport(getRange()); } /* Get the discrete probability levels */ Point DistributionImplementation::getProbabilities() const { if (!isDiscrete()) throw InternalException(HERE) << "Error: cannot return probability levels of a non discrete distribution."; return computePDF(getSupport()).getImplementation()->getData(); } /* Get the PDF singularities inside of the range - 1D only */ Point DistributionImplementation::getSingularities() const { if (dimension_ != 1) throw NotDefinedException(HERE) << "Error: cannot ask for PDF singularities for multivariate distributions."; return Point(0); } /* Compute the density generator of the elliptical generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R(x-mu)) */ Scalar DistributionImplementation::computeDensityGenerator(const Scalar betaSquare) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeDensityGenerator(const Scalar betaSquare) const"; } /* Compute the derivative of the density generator */ Scalar DistributionImplementation::computeDensityGeneratorDerivative(const Scalar betaSquare) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeDensityGeneratorDerivative(const Scalar betaSquare) const"; } /* Compute the seconde derivative of the density generator */ Scalar DistributionImplementation::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const"; } /* Get the i-th marginal distribution */ DistributionImplementation::Implementation DistributionImplementation::getMarginal(const UnsignedInteger i) const { if ((dimension_ == 1) && (i == 0)) return clone(); if (isCopula() && (i < dimension_)) return new Uniform(0.0, 1.0); return MarginalDistribution(*this, i).clone(); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ DistributionImplementation::Implementation DistributionImplementation::getMarginal(const Indices & indices) const { if ((dimension_ == 1) && (indices[0] == 0)) return clone(); if ((dimension_ == 2) && (indices.getSize() == 1) && (indices[0] < dimension_)) return new Uniform(0.0, 1.0); if ((dimension_ == 2) && (indices.getSize() == 2) && (indices[0] == 0) && (indices[1] == 1)) return clone(); return MarginalDistribution(*this, indices).clone(); } /* Get the copula of a distribution */ DistributionImplementation::Implementation DistributionImplementation::getCopula() const { if (dimension_ == 1) return new IndependentCopula(1); if (isCopula()) return clone(); return new SklarCopula(*this); } /* Get the isoprobabilist transformation */ DistributionImplementation::IsoProbabilisticTransformation DistributionImplementation::getIsoProbabilisticTransformation() const { // Special case for dimension 1 if (dimension_ == 1) { DistributionCollection collection(1); collection[0] = *this; // Get the marginal transformation evaluation implementation MarginalTransformationEvaluation evaluation(collection, DistributionCollection(1, Normal())); // We have to correct the direction because the output collection corresponds to the standard space, so there is no parameter to take into account. evaluation.setDirection(MarginalTransformationEvaluation::FROM); const EvaluationPointer p_evaluation(evaluation.clone()); // Get the marginal transformation gradient implementation const GradientPointer p_gradient = new MarginalTransformationGradient(evaluation); // Get the marginal transformation hessian implementation const HessianPointer p_hessian = new MarginalTransformationHessian(evaluation); InverseIsoProbabilisticTransformation inverseTransformation(p_evaluation, p_gradient, p_hessian); PointWithDescription parameters(getParameter()); const UnsignedInteger parametersDimension = parameters.getDimension(); Description parametersDescription(parameters.getDescription()); const String name(parameters.getName()); for (UnsignedInteger i = 0; i < parametersDimension; i++) parametersDescription[i] = OSS() << name << "_" << parametersDescription[i]; parameters.setDescription(parametersDescription); inverseTransformation.setParameter(parameters); return inverseTransformation; } // General case, Rosenblatt transformation return FunctionImplementation(new RosenblattEvaluation(clone())); } /* Get the inverse isoprobabilist transformation */ DistributionImplementation::InverseIsoProbabilisticTransformation DistributionImplementation::getInverseIsoProbabilisticTransformation() const { // Special case for dimension 1 if (dimension_ == 1) { DistributionCollection collection(1); collection[0] = *this; // Get the marginal transformation evaluation implementation MarginalTransformationEvaluation evaluation(DistributionCollection(1, Normal()), collection); // We have to correct the direction because the input collection corresponds to the standard space, so there is no parameter to take into account. evaluation.setDirection(MarginalTransformationEvaluation::TO); const EvaluationPointer p_evaluation(evaluation.clone()); // Get the marginal transformation gradient implementation const GradientPointer p_gradient = new MarginalTransformationGradient(evaluation); // Get the marginal transformation hessian implementation const HessianPointer p_hessian = new MarginalTransformationHessian(evaluation); InverseIsoProbabilisticTransformation inverseTransformation(p_evaluation, p_gradient, p_hessian); PointWithDescription parameters(getParameter()); const UnsignedInteger parametersDimension = parameters.getDimension(); Description parametersDescription(parameters.getDescription()); const String name(parameters.getName()); for (UnsignedInteger i = 0; i < parametersDimension; i++) parametersDescription[i] = OSS() << name << "_" << parametersDescription[i]; parameters.setDescription(parametersDescription); inverseTransformation.setParameter(parameters); return inverseTransformation; } // General case, inverse Rosenblatt transformation return FunctionImplementation(new InverseRosenblattEvaluation(clone())); } /* Get the standard distribution */ void DistributionImplementation::computeStandardDistribution() const { Normal standardDistribution(dimension_); standardDistribution.setDescription(getDescription()); p_standardDistribution_ = standardDistribution.clone(); isAlreadyComputedStandardDistribution_ = true; } /* Get the standard distribution */ DistributionImplementation::Implementation DistributionImplementation::getStandardDistribution() const { if (!isAlreadyComputedStandardDistribution_) computeStandardDistribution(); return p_standardDistribution_; } /* Get the standard representative in the parametric family, associated with the standard moments */ DistributionImplementation::Implementation DistributionImplementation::getStandardRepresentative() const { return clone(); } /* Compute the radial distribution CDF */ Scalar DistributionImplementation::computeRadialDistributionCDF(const Scalar radius, const Bool tail) const { throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeRadialDistributionCDF(const Scalar radius, const Bool tail) const"; } /* Draw the PDF of a discrete distribution */ Graph DistributionImplementation::drawDiscretePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw the PDF of a multidimensional discrete distribution this way."; if (xMax < xMin - ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon")) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax < xMin, here xmin=" << xMin << " and xmax=" << xMax; const String title(OSS() << getDescription()[0] << " PDF"); const Sample support(getSupport(Interval(xMin, xMax))); // First the vertical bars const String xName(getDescription()[0]); Graph graphPDF(title, xName, "PDF", true, "topright"); Point point(2); point[0] = xMin - ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); const Sample gridY(computePDF(support)); Sample data(0, 2); data.add(point); for (UnsignedInteger i = 0; i < support.getSize(); ++i) { point[0] = support[i][0]; data.add(point); point[1] = gridY[i][0]; data.add(point); point[1] = 0.0; data.add(point); } point[0] = xMax + ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); point[1] = 0.0; data.add(point); graphPDF.add(Curve(data, "red", "solid", 2, title)); Point boundingBox(graphPDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = gridY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphPDF.setBoundingBox(boundingBox); return graphPDF; } /* Draw the PDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: can draw a PDF only if dimension equals 1, here dimension=" << dimension_; if (xMax <= xMin) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax <= xMin, here xmin=" << xMin << " and xmax=" << xMax; if (pointNumber < 2) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with a point number < 2"; if (isDiscrete()) return drawDiscretePDF(xMin, xMax, pointNumber); // Discretization of the x axis const String title(OSS() << getDescription()[0] << " PDF"); Sample gridX; const Sample gridY(computePDF(xMin, xMax, pointNumber, gridX)); Curve curvePDF(gridX, gridY); curvePDF.setColor("red"); curvePDF.setLegend(title); curvePDF.setLineStyle("solid"); curvePDF.setLineWidth(2); const String xName(getDescription()[0]); Graph graphPDF(title, xName, "PDF", true, "topright"); graphPDF.add(curvePDF); Point boundingBox(graphPDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = gridY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphPDF.setBoundingBox(boundingBox); return graphPDF; } /* Draw the PDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawPDF(const UnsignedInteger pointNumber) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: this method is available only for 1D distributions"; // For discrete distributions, use the numerical range to define the drawing range const Scalar xMin = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; const Scalar xMax = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; const Scalar delta = 2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin"))); if (isDiscrete()) { Scalar a = std::max(xMin - delta, range_.getLowerBound()[0] - 1.0); Scalar b = std::min(xMax + delta, range_.getUpperBound()[0] + 1.0); if (b <= a) { a -= 1.0; b += 1.0; } return drawPDF(a, b, pointNumber); } return drawPDF(xMin - delta, xMax + delta, pointNumber); } /* Draw the PDF of a 1D marginal */ Graph DistributionImplementation::drawMarginal1DPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Graph marginalGraph(getMarginal(marginalIndex)->drawPDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->" << description_[marginalIndex] << " component PDF"); return marginalGraph; } /* Draw the PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { if (!(pointNumber[0] >= 2 && pointNumber[1] >= 2)) throw InvalidArgumentException(HERE) << "Error: the discretization must have at least 2 points per component"; Point discretization(2); Point scaling(2); Point origin(2); const Scalar nX = pointNumber[0] - 2; discretization[0] = nX; // Discretization of the first component Sample x(Box(Point(1, nX)).generate()); origin[0] = xMin[0]; scaling[0] = xMax[0] - xMin[0]; x *= Point(1, scaling[0]); x += Point(1, origin[0]); const Scalar nY = pointNumber[1] - 2; discretization[1] = nY; // Discretization of the second component Sample y(Box(Point(1, nY)).generate()); origin[1] = xMin[1]; scaling[1] = xMax[1] - xMin[1]; y *= Point(1, scaling[1]); y += Point(1, origin[1]); Sample xy; // Compute the output sample, using possible parallelism or optimized implementation const Sample z(computePDF(xMin, xMax, pointNumber, xy)); const String xName(description_[0]); const String yName(description_[1]); const String title(OSS() << getDescription() << " iso-PDF"); Graph graph(title, xName, yName, true, "topright"); Contour isoValues(Contour(x, y, z, Point(0), Description(0), true, title)); isoValues.buildDefaultLevels(); isoValues.buildDefaultLabels(); graph.add(isoValues); return graph; } /* Draw the PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawPDF(const Point & xMin, const Point & xMax) const { return drawPDF(xMin, xMax, Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); } /* Draw the PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawPDF(const Indices & pointNumber) const { if (pointNumber.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: pointNumber must be of size 2, here size=" << pointNumber.getSize(); Point xMin(2); if (isCopula()) xMin = Point(2, 0.0); else { xMin[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; xMin[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; } Point xMax(2); if (isCopula()) xMax = Point(2, 1.0); else { xMax[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; xMax[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; } Point delta(2, 0.0); if (!isCopula()) delta = (2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin")))); const Interval intersection(getRange().intersect(Interval(xMin - delta, xMax + delta))); Graph graph(drawPDF(intersection.getLowerBound(), intersection.getUpperBound(), pointNumber)); // Add a border for a copula if (isCopula()) { const Drawable drawable(graph.getDrawable(0)); Sample data(5, 2); data[1][0] = 1.0; data[2] = Point(2, 1.0); data[3][1] = 1.0; Curve square(data); square.setColor("blue"); graph.setDrawable(square, 0); graph.add(drawable); } return graph; } /* Draw the PDF of a 2D marginal */ Graph DistributionImplementation::drawMarginal2DPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { Indices indices(2); indices[0] = firstMarginal; indices[1] = secondMarginal; Graph marginalGraph(getMarginal(indices)->drawPDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->[" << description_[firstMarginal] << ", " << description_[secondMarginal] << "] components iso-PDF"); return marginalGraph; } /* Draw the PDF of the distribution when its dimension is 1 or 2 */ Graph DistributionImplementation::drawPDF() const { UnsignedInteger dimension = getDimension(); // Generic interface for the 1D and 2D cases if (dimension == 1) return drawPDF(ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")); if (dimension == 2) return drawPDF(Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); throw InvalidDimensionException(HERE) << "Error: can draw a PDF only if dimension equals 1 or 2, here dimension=" << dimension; } /* Draw the log-PDF of a discrete distribution */ Graph DistributionImplementation::drawDiscreteLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw the PDF of a multidimensional discrete distribution this way."; if (xMax < xMin - ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon")) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax < xMin, here xmin=" << xMin << " and xmax=" << xMax; const String title(OSS() << getDescription()[0] << " PDF"); const Sample support(getSupport(Interval(xMin, xMax))); // First the vertical bars const String xName(getDescription()[0]); Graph graphLogPDF(title, xName, "PDF", true, "topright"); Point point(2); point[0] = xMin - ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); const Sample gridY(computeLogPDF(support)); Sample data(0, 2); data.add(point); for (UnsignedInteger i = 0; i < support.getSize(); ++i) { point[0] = support[i][0]; data.add(point); point[1] = gridY[i][0]; data.add(point); point[1] = 0.0; data.add(point); } point[0] = xMax + ResourceMap::GetAsScalar("DiscreteDistribution-SupportEpsilon"); point[1] = 0.0; data.add(point); graphLogPDF.add(Curve(data, "red", "solid", 2, title)); Point boundingBox(graphLogPDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = gridY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphLogPDF.setBoundingBox(boundingBox); return graphLogPDF; } /* Draw the log-PDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: can draw a PDF only if dimension equals 1, here dimension=" << dimension_; if (xMax <= xMin) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax <= xMin, here xmin=" << xMin << " and xmax=" << xMax; if (pointNumber < 2) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with a point number < 2"; if (isDiscrete()) return drawDiscreteLogPDF(xMin, xMax, pointNumber); // Discretization of the x axis const String title(OSS() << getDescription()[0] << " log PDF"); Sample gridX; const Sample gridY(computeLogPDF(xMin, xMax, pointNumber, gridX)); Curve curvePDF(gridX, gridY); curvePDF.setColor("red"); curvePDF.setLegend(title); curvePDF.setLineStyle("solid"); curvePDF.setLineWidth(2); const String xName(getDescription()[0]); Graph graphPDF(title, xName, "log PDF", true, "topright"); graphPDF.add(curvePDF); Point boundingBox(graphPDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = gridY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphPDF.setBoundingBox(boundingBox); return graphPDF; } /* Draw the log-PDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawLogPDF(const UnsignedInteger pointNumber) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: this method is available only for 1D distributions"; // For discrete distributions, use the numerical range to define the drawing range const Scalar xMin = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; const Scalar xMax = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; const Scalar delta = 2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin"))); if (isDiscrete()) { Scalar a = std::max(xMin - delta, range_.getLowerBound()[0] - 1.0); Scalar b = std::min(xMax + delta, range_.getUpperBound()[0] + 1.0); if (b <= a) { a -= 1.0; b += 1.0; } return drawLogPDF(a, b, pointNumber); } return drawLogPDF(xMin - delta, xMax + delta, pointNumber); } /* Draw the log-PDF of a 1D marginal */ Graph DistributionImplementation::drawMarginal1DLogPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Graph marginalGraph(getMarginal(marginalIndex)->drawLogPDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->" << description_[marginalIndex] << " component log PDF"); return marginalGraph; } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { if (!(pointNumber[0] >= 2 && pointNumber[1] >= 2)) throw InvalidArgumentException(HERE) << "Error: the discretization must have at least 2 points per component"; Point discretization(2); Point scaling(2); Point origin(2); const Scalar nX = pointNumber[0] - 2; discretization[0] = nX; // Discretization of the first component Sample x(Box(Point(1, nX)).generate()); origin[0] = xMin[0]; scaling[0] = xMax[0] - xMin[0]; x *= Point(1, scaling[0]); x += Point(1, origin[0]); const Scalar nY = pointNumber[1] - 2; discretization[1] = nY; // Discretization of the second component Sample y(Box(Point(1, nY)).generate()); origin[1] = xMin[1]; scaling[1] = xMax[1] - xMin[1]; y *= Point(1, scaling[1]); y += Point(1, origin[1]); Sample xy; // Compute the output sample, using possible parallelism or optimized implementation const Sample z(computeLogPDF(xMin, xMax, pointNumber, xy)); const String xName(description_[0]); const String yName(description_[1]); const String title(OSS() << getDescription() << " iso-log PDF"); Graph graph(title, xName, yName, true, "topright"); Contour isoValues(Contour(x, y, z, Point(0), Description(0), true, title)); isoValues.buildDefaultLevels(); isoValues.buildDefaultLabels(); graph.add(isoValues); return graph; } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawLogPDF(const Point & xMin, const Point & xMax) const { return drawLogPDF(xMin, xMax, Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); } /* Draw the log-PDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawLogPDF(const Indices & pointNumber) const { if (pointNumber.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: pointNumber must be of size 2, here size=" << pointNumber.getSize(); Point xMin(2); if (isCopula()) xMin = Point(2, 0.0); else { xMin[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; xMin[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; } Point xMax(2); if (isCopula()) xMax = Point(2, 1.0); else { xMax[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; xMax[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; } Point delta(2, 0.0); if (!isCopula()) delta = (2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin")))); const Interval intersection(getRange().intersect(Interval(xMin - delta, xMax + delta))); Graph graph(drawLogPDF(intersection.getLowerBound(), intersection.getUpperBound(), pointNumber)); // Add a border for a copula if (isCopula()) { const Drawable drawable(graph.getDrawable(0)); Sample data(5, 2); data[1][0] = 1.0; data[2] = Point(2, 1.0); data[3][1] = 1.0; Curve square(data); square.setColor("blue"); graph.setDrawable(square, 0); graph.add(drawable); } return graph; } /* Draw the log-PDF of a 2D marginal */ Graph DistributionImplementation::drawMarginal2DLogPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { Indices indices(2); indices[0] = firstMarginal; indices[1] = secondMarginal; Graph marginalGraph(getMarginal(indices)->drawLogPDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->[" << description_[firstMarginal] << ", " << description_[secondMarginal] << "] components iso-log PDF"); return marginalGraph; } /* Draw the log-PDF of the distribution when its dimension is 1 or 2 */ Graph DistributionImplementation::drawLogPDF() const { UnsignedInteger dimension = getDimension(); // Generic interface for the 1D and 2D cases if (dimension == 1) return drawLogPDF(ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")); if (dimension == 2) return drawLogPDF(Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); throw InvalidDimensionException(HERE) << "Error: can draw a log-PDF only if dimension equals 1 or 2, here dimension=" << dimension; } /* Draw the CDF of a discrete distribution */ Graph DistributionImplementation::drawDiscreteCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { // Value : 0 1/5 2/5 3/5 4/5 1 // Data : ------+-----+---+------+----+--------- // Case 1: ------------------------------[----]-- // Case 2: ------------------[---]--------------- // -[--]--------------------------------- // Case 3: ----------[---]----------------------- // ---[-----------------------------]---- // -------[-----------------]------------ if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot draw the CDF of a multidimensional discrete distribution this way."; if (xMax <= xMin) throw InvalidArgumentException(HERE) << "Error: cannot draw a PDF with xMax >= xMin, here xmin=" << xMin << " and xmax=" << xMax; // Create the graph that will store the staircase representing the empirical CDF const String title(OSS() << getDescription()[0] << " CDF"); const Sample support(getSupport(Interval(xMin, xMax))); const Sample gridY(computeCDF(support)); const UnsignedInteger size = support.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "empty range (" << xMin << ", " << xMax << ")" << ", support is (" << getSupport().getMin()[0] << ", " << getSupport().getMax()[0] << ")"; const String xName(getDescription()[0]); Graph graphCDF(title, xName, "CDF", true, "topleft"); Sample data(size + 2, 2); data[0][0] = xMin; data[0][1] = computeCDF(xMin); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar x = support[i][0]; data[i + 1][0] = x; data[i + 1][1] = gridY[i][0]; } if (support[size - 1][0] == xMax) data[size + 1] = data[size]; else { data[size + 1][0] = xMax; data[size + 1][1] = computeCDF(xMax); } graphCDF.add(Staircase(data, "red", "solid", 2, "s", title)); Point boundingBox(graphCDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = gridY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphCDF.setBoundingBox(boundingBox); return graphCDF; } /* Draw the CDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: can draw a CDF only if dimension equals 1, here dimension=" << dimension_; if (xMax <= xMin) throw InvalidArgumentException(HERE) << "Error: cannot draw a CDF with xMax >= xMin, here xmin=" << xMin << " and xmax=" << xMax; if (pointNumber < 2) throw InvalidArgumentException(HERE) << "Error: cannot draw a CDF with a point number < 2"; if (isDiscrete()) return drawDiscreteCDF(xMin, xMax, pointNumber); const String title(OSS() << getDescription()[0] << " CDF"); Sample dataX; const Sample dataY(computeCDF(xMin, xMax, pointNumber, dataX)); Curve curveCDF(dataX, dataY); curveCDF.setColor("red"); curveCDF.setLegend(title); curveCDF.setLineStyle("solid"); curveCDF.setLineWidth(2); const String xName(getDescription()[0]); Graph graphCDF(title, xName, "CDF", true, "topleft"); graphCDF.add(curveCDF); Point boundingBox(graphCDF.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = dataY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphCDF.setBoundingBox(boundingBox); return graphCDF; } /* Draw the CDF of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawCDF(const UnsignedInteger pointNumber) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: this method is available only for 1D distributions"; // For discrete distributions, use the numerical range to define the drawing range const Scalar xMin = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; const Scalar xMax = computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; const Scalar delta = 2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin"))); if (isDiscrete()) { Scalar a = std::max(xMin - delta, range_.getLowerBound()[0] - 1.0); Scalar b = std::min(xMax + delta, range_.getUpperBound()[0] + 1.0); if (b <= a) { a -= 1.0; b += 1.0; } return drawCDF(a, b, pointNumber); } return drawCDF(xMin - delta, xMax + delta, pointNumber); } /* Draw the CDF of a 1D marginal */ Graph DistributionImplementation::drawMarginal1DCDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const { Graph marginalGraph(getMarginal(marginalIndex)->drawCDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->" << description_[marginalIndex] << " component CDF"); return marginalGraph; } /* Draw the CDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const { if (xMin.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: expected xMin to be of dimension 2, here dimension=" << xMin.getDimension(); if (xMax.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: expected xMax to be of dimension 2, here dimension=" << xMax.getDimension(); if (pointNumber.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected pointNumber to be of size 2, here size=" << pointNumber.getSize(); if (!(pointNumber[0] >= 2 && pointNumber[1] >= 2)) throw InvalidArgumentException(HERE) << "Error: the discretization must have at least 2 points per component"; Point discretization(2); Point scaling(2); Point origin(2); const Scalar nX = pointNumber[0] - 2; discretization[0] = nX; // Discretization of the first component Sample x(Box(Point(1, nX)).generate()); origin[0] = xMin[0]; scaling[0] = xMax[0] - xMin[0]; x *= Point(1, scaling[0]); x += Point(1, origin[0]); const Scalar nY = pointNumber[1] - 2; discretization[1] = nY; // Discretization of the second component Sample y(Box(Point(1, nY)).generate()); origin[1] = xMin[1]; scaling[1] = xMax[1] - xMin[1]; y *= Point(1, scaling[1]); y += Point(1, origin[1]); // Discretization of the XY plane Sample xy(Box(discretization).generate()); xy *= scaling; xy += origin; // Compute the output sample, using possible parallelism const Sample z(computeCDF(xy)); const String xName(description_[0]); const String yName(description_[1]); const String title(OSS() << getDescription() << " iso-CDF"); Graph graph(title, xName, yName, true, "topright"); Contour isoValues(Contour(x, y, z, Point(0), Description(0), true, title)); isoValues.buildDefaultLevels(); isoValues.buildDefaultLabels(); graph.add(isoValues); return graph; } /* Draw the CDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawCDF(const Point & xMin, const Point & xMax) const { return drawCDF(xMin, xMax, Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); } /* Draw the CDF of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawCDF(const Indices & pointNumber) const { if (pointNumber.getSize() != 2) throw InvalidArgumentException(HERE) << "Error: expected pointNumber to be of size 2, here size=" << pointNumber.getSize(); Point xMin(2); if (isCopula()) xMin = Point(2, 0.0); else { xMin[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; xMin[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMin"))[0]; } Point xMax(2); if (isCopula()) xMax = Point(2, 1.0); else { xMax[0] = getMarginal(0)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; xMax[1] = getMarginal(1)->computeQuantile(ResourceMap::GetAsScalar("Distribution-QMax"))[0]; } Point delta(2, 0.0); if (!isCopula()) delta = (2.0 * (xMax - xMin) * (1.0 - 0.5 * (ResourceMap::GetAsScalar("Distribution-QMax" ) - ResourceMap::GetAsScalar("Distribution-QMin")))); return drawCDF(xMin - delta, xMax + delta, pointNumber); } /* Draw the CDF of a 2D marginal */ Graph DistributionImplementation::drawMarginal2DCDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const { Indices indices(2); indices[0] = firstMarginal; indices[1] = secondMarginal; Graph marginalGraph(getMarginal(indices)->drawCDF(xMin, xMax, pointNumber)); marginalGraph.setTitle(OSS() << getDescription() << "->[" << description_[firstMarginal] << ", " << description_[secondMarginal] << "] components iso-CDF"); return marginalGraph; } /* Draw the CDF of the distribution when its dimension is 1 or 2 */ Graph DistributionImplementation::drawCDF() const { const UnsignedInteger dimension = getDimension(); // Generic interface for the 1D and 2D cases if (dimension == 1) return drawCDF(ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")); if (dimension == 2) return drawCDF(Indices(2, ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber"))); throw InvalidDimensionException(HERE) << "Error: can draw a CDF only if dimension equals 1 or 2, here dimension=" << dimension; } /* Draw the quantile of the distribution when its dimension is 1 or 2 */ Graph DistributionImplementation::drawQuantile(const UnsignedInteger pointNumber) const { const Scalar qMin = SpecFunc::ScalarEpsilon; const Scalar qMax = 1.0 - qMin; return drawQuantile(qMin, qMax, pointNumber); } Graph DistributionImplementation::drawQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber) const { // Generic interface for the 1D and 2D cases if (dimension_ == 1) return drawQuantile1D(qMin, qMax, pointNumber); if (dimension_ == 2) return drawQuantile2D(qMin, qMax, pointNumber); throw InvalidDimensionException(HERE) << "Error: can draw the quantiles only if dimension equals 1 or 2, here dimension=" << dimension_; } /* Draw the quantile of the distribution when its dimension is 1 */ Graph DistributionImplementation::drawQuantile1D(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber) const { const String title(OSS() << getDescription()[0] << " Quantile"); Sample dataX; const Sample dataY(computeQuantile(qMin, qMax, pointNumber, dataX)); Curve curveQuantile(dataX, dataY); curveQuantile.setColor("red"); curveQuantile.setLegend(title); curveQuantile.setLineStyle("solid"); curveQuantile.setLineWidth(2); const String xName(getDescription()[0]); Graph graphQuantile(title, "p", xName, true, "topleft"); graphQuantile.add(curveQuantile); Point boundingBox(graphQuantile.getBoundingBox()); const Scalar yMin = boundingBox[2]; const Scalar yMax = dataY.computeQuantilePerComponent(0.99)[0]; boundingBox[2] = yMin - 0.1 * (yMax - yMin); boundingBox[3] = yMax + 0.1 * (yMax - yMin); graphQuantile.setBoundingBox(boundingBox); return graphQuantile; } /* Draw the quantile of the distribution when its dimension is 2 */ Graph DistributionImplementation::drawQuantile2D(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber) const { const String title(OSS() << getDescription() << " Quantile"); const Sample data(computeQuantile(qMin, qMax, pointNumber)); Curve curveQuantile(data); curveQuantile.setColor("red"); curveQuantile.setLegend(title); curveQuantile.setLineStyle("solid"); curveQuantile.setLineWidth(2); const String xName(getDescription()[0]); const String yName(getDescription()[1]); Graph graphQuantile(title, xName, yName, true, "topleft"); graphQuantile.add(drawCDF(data.getMin(), data.getMax()).getDrawable(0)); graphQuantile.add(curveQuantile); Point bb(graphQuantile.getBoundingBox()); const Scalar delta = bb[3] - bb[2]; bb[3] += 0.05 * delta; bb[2] -= 0.05 * delta; graphQuantile.setBoundingBox(bb); Description legends(2); legends[0] = "iso-CDF"; legends[1] = "quantile"; graphQuantile.setLegends(legends); return graphQuantile; } /* Parameters value and description accessor */ DistributionImplementation::PointWithDescriptionCollection DistributionImplementation::getParametersCollection() const { // Use compact accessor PointWithDescription parameters(getParameter()); parameters.setDescription(getParameterDescription()); parameters.setName(getDescription()[0]); return PointWithDescriptionCollection(1, parameters); } void DistributionImplementation::setParametersCollection(const PointWithDescriptionCollection & parametersCollection) { if (getDimension() == 1) { if (parametersCollection.getSize() != 1) throw InvalidArgumentException(HERE) << "Expected collection of size 1, got " << parametersCollection.getSize(); setParameter(parametersCollection[0]); } // Get the actual collection of parameters to check the description and the size const PointWithDescriptionCollection actualParameters(getParametersCollection()); const UnsignedInteger size = actualParameters.getSize(); if (parametersCollection.getSize() != size) throw InvalidArgumentException(HERE) << "Error: the given parameters collection has an invalid size (" << parametersCollection.getSize() << "), it should be " << size; PointCollection coll(0); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger dimension = actualParameters[i].getDimension(); if (parametersCollection[i].getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given parameters collection has an invalid dimension at index " << i; coll.add(parametersCollection[i]); } setParametersCollection(coll); } void DistributionImplementation::setParametersCollection(const PointCollection & parametersCollection) { const UnsignedInteger size = parametersCollection.getSize(); Point newParameters; for (UnsignedInteger i = 0; i < size; ++ i) newParameters.add(parametersCollection[i]); setParameter(newParameters); } /* Parameters value accessor */ Point DistributionImplementation::getParameter() const { return Point(); } void DistributionImplementation::setParameter(const Point & parameters) { if (parameters.getSize() != 0) throw InvalidArgumentException(HERE) << "Error: expected 0 parameters, got " << parameters.getSize(); } /* Parameters description accessor */ Description DistributionImplementation::getParameterDescription() const { return Description(); } /* Parameters number */ UnsignedInteger DistributionImplementation::getParameterDimension() const { return getParameter().getSize(); } /* Description accessor */ void DistributionImplementation::setDescription(const Description & description) { const UnsignedInteger size = description.getSize(); if (size != getDimension()) throw InvalidArgumentException(HERE) << "Error: the description must have the same size than the distribution dimension, here size=" << size << " and dimension=" << getDimension(); // Check if the description is valid // First, copy the description Description test(description); // Second, sort the copy std::sort(test.begin(), test.end()); // Third, move the duplicates at the end Description::const_iterator it = std::unique(test.begin(), test.end()); // Fourth, check if there was any duplicate if (it != test.end()) { LOGINFO(OSS() << "Warning! The description of the distribution " << getName() << " is " << description << " and cannot identify uniquely the marginal distribution. Use default description instead."); description_ = Description::BuildDefault(dimension_, "X"); } else description_ = description; } /* Description accessot */ Description DistributionImplementation::getDescription() const { return description_; } /* Accessor to PDF computation precision */ Scalar DistributionImplementation::getPDFEpsilon() const { return pdfEpsilon_; } /* Accessor to CDF computation precision */ Scalar DistributionImplementation::getCDFEpsilon() const { return cdfEpsilon_; } /* Get a positon indicator for a 1D distribution */ Scalar DistributionImplementation::getPositionIndicator() const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: cannot get the position indicator of a distribution with dimension > 1"; // First, try to return the mean of the distribution try { return getMean()[0]; } catch (...) { // Second, return the median of the distribution return computeQuantile(0.5)[0]; } } /* Get a dispersion indicator for a 1D distribution */ Scalar DistributionImplementation::getDispersionIndicator() const { if (dimension_ != 1) throw InvalidDimensionException(HERE) << "Error: cannot get the dispersion indicator of a distribution with dimension > 1"; // First, try to return the standard deviation of the distribution try { return getStandardDeviation()[0]; } catch (...) { // Second, return the interquartile of the distribution return computeQuantile(0.75)[0] - computeQuantile(0.25)[0]; } } /* Is it safe to compute PDF/CDF etc in parallel? */ Bool DistributionImplementation::isParallel() const { return isParallel_; } void DistributionImplementation::setParallel(const Bool flag) { isParallel_ = flag; } /* Method save() stores the object through the StorageManager */ void DistributionImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "mean_", mean_ ); adv.saveAttribute( "covariance_", covariance_ ); adv.saveAttribute( "gaussNodes_", gaussNodes_ ); adv.saveAttribute( "gaussWeights_", gaussWeights_ ); adv.saveAttribute( "integrationNodesNumber_", integrationNodesNumber_ ); adv.saveAttribute( "isAlreadyComputedMean_", isAlreadyComputedMean_ ); adv.saveAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); adv.saveAttribute( "isAlreadyComputedGaussNodesAndWeights_", isAlreadyComputedGaussNodesAndWeights_ ); adv.saveAttribute( "dimension_", dimension_ ); adv.saveAttribute( "weight_", weight_ ); adv.saveAttribute( "range_", range_ ); adv.saveAttribute( "description_", description_ ); adv.saveAttribute( "isCopula_", isCopula_ ); } /* Method load() reloads the object from the StorageManager */ void DistributionImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "mean_", mean_ ); adv.loadAttribute( "covariance_", covariance_ ); adv.loadAttribute( "gaussNodes_", gaussNodes_ ); adv.loadAttribute( "gaussWeights_", gaussWeights_ ); adv.loadAttribute( "integrationNodesNumber_", integrationNodesNumber_ ); adv.loadAttribute( "isAlreadyComputedMean_", isAlreadyComputedMean_ ); adv.loadAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); adv.loadAttribute( "isAlreadyComputedGaussNodesAndWeights_", isAlreadyComputedGaussNodesAndWeights_ ); adv.loadAttribute( "dimension_", dimension_ ); adv.loadAttribute( "weight_", weight_ ); adv.loadAttribute( "range_", range_ ); adv.loadAttribute( "description_", description_ ); adv.loadAttribute( "isCopula_", isCopula_ ); } /* Transformation of distributions by usual functions */ DistributionImplementation::Implementation DistributionImplementation::cos() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; const SignedInteger nMin = static_cast< SignedInteger > (ceil(a / M_PI)); const SignedInteger nMax = static_cast< SignedInteger > (floor(b / M_PI)); Point bounds(1, a); Point values(1, std::cos(a)); for (SignedInteger n = nMin; n <= nMax; ++n) { bounds.add(n * M_PI); values.add(n % 2 == 0 ? 1.0 : -1.0); } bounds.add(b); values.add(std::cos(b)); return CompositeDistribution(SymbolicFunction("x", "cos(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::sin() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; const SignedInteger nMin = static_cast< SignedInteger > (ceil(a / M_PI - 0.5)); const SignedInteger nMax = static_cast< SignedInteger > (floor(b / M_PI - 0.5)); Point bounds(1, a); Point values(1, std::sin(a)); for (SignedInteger n = nMin; n <= nMax; ++n) { bounds.add((n + 0.5) * M_PI); values.add(n % 2 == 0 ? 1.0 : -1.0); } bounds.add(b); values.add(std::sin(b)); return CompositeDistribution(SymbolicFunction("x", "sin(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::tan() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; const SignedInteger nMin = static_cast< SignedInteger > (ceil(a / M_PI - 0.5)); const SignedInteger nMax = static_cast< SignedInteger > (floor(b / M_PI - 0.5)); // Compute the lower bound and upper bound of the support of tan(X) Scalar sumPDF = 0.0; for (SignedInteger n = nMin; n <= nMax; ++n) sumPDF += computePDF((n + 0.5) * M_PI); const Scalar bound = std::tan(M_PI_2 - quantileEpsilon_ / sumPDF); Point bounds(1, a); Point values(1, std::tan(a)); for (SignedInteger n = nMin; n <= nMax; ++n) { bounds.add((n + 0.5) * M_PI); values.add(bound); bounds.add((n + 0.5) * M_PI); values.add(-bound); } bounds.add(b); values.add(std::tan(b)); return CompositeDistribution(SymbolicFunction("x", "tan(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::acos() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; if (a < -1.0) throw InvalidArgumentException(HERE) << "Error: cannot take the arc cos of a random variable that takes values less than -1 with positive probability."; const Scalar b = getRange().getUpperBound()[0]; if (!(b <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot take the arc cos of a random variable that takes values greater than 1 with positive probability."; Point bounds(1, a); Point values(1, std::acos(a)); bounds.add(b); values.add(std::acos(b)); return CompositeDistribution(SymbolicFunction("x", "acos(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::asin() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; if (a < -1.0) throw InvalidArgumentException(HERE) << "Error: cannot take the arc sin of a random variable that takes values less than -1 with positive probability."; const Scalar b = getRange().getUpperBound()[0]; if (!(b <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot take the arc sin of a random variable that takes values greater than 1 with positive probability."; Point bounds(1, a); Point values(1, std::asin(a)); bounds.add(b); values.add(std::asin(b)); return CompositeDistribution(SymbolicFunction("x", "asin(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::atan() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; Point bounds(1, a); Point values(1, std::atan(a)); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); values.add(std::atan(b)); return CompositeDistribution(SymbolicFunction("x", "atan(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::cosh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; Point bounds(1, a); Point values(1, std::cosh(a)); const Scalar b = getRange().getUpperBound()[0]; if ((a < 0.0) && (b > 0.0)) { bounds.add(0.0); values.add(1.0); } bounds.add(b); values.add(std::cosh(b)); return CompositeDistribution(SymbolicFunction("x", "cosh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::sinh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, std::sinh(a)); bounds.add(b); values.add(std::sinh(b)); return CompositeDistribution(SymbolicFunction("x", "sinh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::tanh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, std::tanh(a)); bounds.add(b); values.add(std::tanh(b)); return CompositeDistribution(SymbolicFunction("x", "tanh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::acosh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; if (!(a >= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot take the arc cosh of a random variable that takes values less than 1 with positive probability."; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, SpecFunc::Acosh(a)); bounds.add(b); values.add(SpecFunc::Acosh(b)); return CompositeDistribution(SymbolicFunction("x", "acosh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::asinh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, SpecFunc::Asinh(a)); bounds.add(b); values.add(SpecFunc::Asinh(b)); return CompositeDistribution(SymbolicFunction("x", "asinh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::atanh() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; if (a < -1.0) throw InvalidArgumentException(HERE) << "Error: cannot take the arc tanh of a random variable that takes values less than -1 with positive probability."; const Scalar b = getRange().getUpperBound()[0]; if (!(b <= 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot take the arc tanh of a random variable that takes values greater than 1 with positive probability."; Point bounds(1, a); // F_Y(y)=P(atanh(X)P(Xy=atanh(F_X^{-1}(epsilon)) Point values(1, a == -1.0 ? SpecFunc::Atanh(computeQuantile(quantileEpsilon_)[0]) : SpecFunc::Atanh(a)); bounds.add(b); values.add(b == 1.0 ? SpecFunc::Atanh(computeQuantile(quantileEpsilon_, true)[0]) : SpecFunc::Atanh(b)); return CompositeDistribution(SymbolicFunction("x", "atanh(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::exp() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; // Check if we can reuse an existing class if (getClassName() == "Normal") { Point parameters(getParameter()); return LogNormal(parameters[0], parameters[1]).clone(); } if (getClassName() == "Uniform") { Point parameters(getParameter()); return LogUniform(parameters[0], parameters[1]).clone(); } const Scalar a = getRange().getLowerBound()[0]; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, std::exp(a)); bounds.add(b); values.add(std::exp(b)); return CompositeDistribution(SymbolicFunction("x", "exp(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::log() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; // Check if we can reuse an existing class if (getClassName() == "LogNormal") { Point parameters(getParameter()); if (parameters[2] == 0.0) return Normal(parameters[0], parameters[1]).clone(); } if (getClassName() == "LogUniform") { Point parameters(getParameter()); return Uniform(parameters[0], parameters[1]).clone(); } const Scalar a = getRange().getLowerBound()[0]; if (!(a >= 0.0)) throw NotDefinedException(HERE) << "Error: cannot take the logarithm of a random variable that takes negative values with positive probability."; const Scalar b = getRange().getUpperBound()[0]; Point bounds(1, a); Point values(1, (a == 0.0 ? std::log(computeQuantile(quantileEpsilon_)[0]) : std::log(a))); bounds.add(b); values.add(std::log(b)); return CompositeDistribution(SymbolicFunction("x", "log(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::ln() const { return log(); } DistributionImplementation::Implementation DistributionImplementation::pow(const Scalar exponent) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; // First, the case where the exponent is integer if (trunc(exponent) == exponent) return pow(static_cast< SignedInteger >(trunc(exponent))); const Scalar a = getRange().getLowerBound()[0]; if (!(a >= 0.0)) throw NotDefinedException(HERE) << "Error: cannot take a fractional power of a random variable that takes negative values with positive probability."; SymbolicFunction toPower("x", String(OSS() << (exponent < 0.0 ? "x^(" : "x^") << exponent << (exponent < 0.0 ? ")" : ""))); Point bounds(1, a); Point values(1, (a == 0.0 ? (exponent < 0.0 ? std::pow(computeQuantile(quantileEpsilon_)[0], exponent) : 0.0) : std::pow(a, exponent))); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); values.add(std::pow(b, exponent)); return CompositeDistribution(toPower, clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::pow(const SignedInteger exponent) const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; if (exponent == 0.0) return Dirac(Point(1, 1.0)).clone(); const Scalar a = getRange().getLowerBound()[0]; SymbolicFunction toPower("x", String(OSS() << (exponent < 0.0 ? "x^(" : "x^") << exponent << (exponent < 0.0 ? ")" : ""))); // Easy case: a >= 0 if (a >= 0.0) { Point bounds(1, a); Point values(1, (a == 0.0 ? (exponent < 0.0 ? std::pow(computeQuantile(quantileEpsilon_)[0], 1.0 * exponent) : 0.0) : std::pow(a, 1.0 * exponent))); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); values.add(std::pow(b, 1.0 * exponent)); return CompositeDistribution(toPower, clone(), bounds, values).clone(); } // Easy case: b <= 0 Point bounds(1, a); Point values(1, std::pow(a, 1.0 * exponent)); const Scalar b = getRange().getUpperBound()[0]; if (b <= 0.0) { bounds.add(b); values.add(b == 0.0 ? (exponent < 0.0 ? std::pow(computeQuantile(quantileEpsilon_, true)[0], 1.0 * exponent) : 0.0) : std::pow(b, 1.0 * exponent)); return CompositeDistribution(toPower, clone(), bounds, values).clone(); } // Difficult case: a < 0 < b // For odd exponents, the function is bijective if (exponent % 2 != 0) { // No singularity at 0 for positive exponent if (exponent > 0) { bounds.add(b); values.add(std::pow(b, 1.0 * exponent)); return CompositeDistribution(toPower, clone(), bounds, values).clone(); } // A singularity at 0 for negative exponent bounds.add(0.0); values.add(-SpecFunc::MaxScalar); bounds.add(0.0); values.add(SpecFunc::MaxScalar); bounds.add(b); values.add(std::pow(b, 1.0 * exponent)); return CompositeDistribution(SymbolicFunction("x", String(OSS() << "x^(" << exponent << ")")), clone(), bounds, values).clone(); } // For even exponent, the behaviour changes at 0 bounds.add(0.0); values.add(exponent > 0 ? 0.0 : SpecFunc::MaxScalar); bounds.add(b); values.add(std::pow(b, 1.0 * exponent)); return CompositeDistribution(toPower, clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::sqr() const { // Check if we can reuse an existing class if (getClassName() == "Chi") { Point parameters(getParameter()); return ChiSquare(parameters[0]).clone(); } return pow(static_cast< SignedInteger >(2)); } DistributionImplementation::Implementation DistributionImplementation::inverse() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; Point bounds(1, a); // Easy case: a >= 0 if (a >= 0.0) { Point values(1, (a == 0.0 ? 1.0 / computeQuantile(quantileEpsilon_)[0] : 1.0 / a)); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); if (getRange().getFiniteUpperBound()[0]) values.add(1.0 / b); else values.add(0.0); return CompositeDistribution(SymbolicFunction("x", "1.0 / x"), clone(), bounds, values).clone(); } // Here, a < 0 Point values(1); if (getRange().getFiniteLowerBound()[0]) values[0] = 1.0 / a; else values[0] = 0.0; const Scalar b = getRange().getUpperBound()[0]; // Easy case: b <= 0 if (b <= 0.0) { bounds.add(b); values.add(b == 0.0 ? 1.0 / computeQuantile(quantileEpsilon_, true)[0] : 1.0 / b); return CompositeDistribution(SymbolicFunction("x", "1.0 / x"), clone(), bounds, values).clone(); } // Difficult case: a < 0 < b // A singularity at 0 bounds.add(0.0); // The CDF of Y=1/X is // F_Y(y)=[F_X(0) - F_X(1 / y)]1_{y < 0} + // [F_X(0) + 1 - F_X(1 / y)]1_{y > 0} + // F_X(0)1_{y = 0} // so the bounds for Y are obtained when X->0^- and X->0^+ values.add(1.0 / computeQuantile(computeCDF(0.0) - quantileEpsilon_)[0]); bounds.add(0.0); values.add(1.0 / computeQuantile(computeCDF(0.0) + quantileEpsilon_)[0]); bounds.add(b); if (getRange().getFiniteUpperBound()[0]) values.add(1.0 / b); else values.add(0.0); return CompositeDistribution(SymbolicFunction("x", "1.0 / x"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::sqrt() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; // Check if we can reuse an existing class if (getClassName() == "ChiSquare") { Point parameters(getParameter()); return Chi(parameters[0]).clone(); } const Scalar a = getRange().getLowerBound()[0]; if (!(a >= 0.0)) throw NotDefinedException(HERE) << "Error: cannot take the square root of a random variable that takes negative values with positive probability."; Point bounds(1, a); Point values(1, std::sqrt(a)); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); values.add(std::sqrt(b)); return CompositeDistribution(SymbolicFunction("x", "sqrt(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::cbrt() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; Point bounds(1, a); Point values(1, SpecFunc::Cbrt(a)); const Scalar b = getRange().getUpperBound()[0]; bounds.add(b); values.add(SpecFunc::Cbrt(b)); return CompositeDistribution(SymbolicFunction("x", "cbrt(x)"), clone(), bounds, values).clone(); } DistributionImplementation::Implementation DistributionImplementation::abs() const { if (getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the distribution must be univariate."; const Scalar a = getRange().getLowerBound()[0]; Point bounds(1, a); Point values(1, std::abs(a)); const Scalar b = getRange().getUpperBound()[0]; if ((a < 0.0) && (b > 0.0)) { bounds.add(0.0); values.add(0.0); } bounds.add(b); values.add(std::abs(b)); return CompositeDistribution(SymbolicFunction("x", "abs(x)"), clone(), bounds, values).clone(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/DistributionParameters.cxx000066400000000000000000000063451307543307100255640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distribution parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/DistributionParameters.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionParameters); /* Default constructor */ DistributionParameters::DistributionParameters() : TypedInterfaceObject() { // Nothing to do } /* Default constructor */ DistributionParameters::DistributionParameters(const DistributionParametersImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ DistributionParameters::DistributionParameters(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ DistributionParameters::DistributionParameters(DistributionParametersImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Build a distribution based on a set of native parameters */ Distribution DistributionParameters::getDistribution() const { return getImplementation()->getDistribution(); } /* Compute jacobian / native parameters */ Point DistributionParameters::evaluate() const { return getImplementation()->evaluate(); } /* Compute jacobian / native parameters */ Matrix DistributionParameters::gradient() const { return getImplementation()->gradient(); } /* Conversion operator */ Point DistributionParameters::operator () (const Point & inP) const { return getImplementation()->operator ()(inP); } /* Conversion from native parameters */ Point DistributionParameters::inverse(const Point & inP) const { return getImplementation()->inverse(inP); } /* Parameters value and description accessor */ void DistributionParameters::setValues(const Point & values) { copyOnWrite(); getImplementation()->setValues(values); } Point DistributionParameters::getValues() const { return getImplementation()->getValues(); } Description DistributionParameters::getDescription() const { return getImplementation()->getDescription(); } /* String converter */ String DistributionParameters::__repr__() const { return getImplementation()->__repr__(); } /* String converter */ String DistributionParameters::__str__(const String & offset) const { return getImplementation()->__str__(offset); } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Model/DistributionParametersImplementation.cxx000066400000000000000000000074701307543307100304720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DistributionParametersImplementation.hxx" #include "openturns/DistributionParameters.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DistributionParametersImplementation); // static const Factory Factory_DistributionParametersImplementation; /* Default constructor */ DistributionParametersImplementation::DistributionParametersImplementation() : PersistentObject() { } /* Virtual constructor */ DistributionParametersImplementation * DistributionParametersImplementation::clone() const { return new DistributionParametersImplementation(*this); } /* Build a distribution based on a set of native parameters */ Distribution DistributionParametersImplementation::getDistribution() const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::getDistribution() const"; } /* Compute jacobian / native parameters */ Point DistributionParametersImplementation::evaluate() const { return operator()(getValues()); } /* Compute jacobian / native parameters */ Matrix DistributionParametersImplementation::gradient() const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::gradient() const"; } /* Conversion operator */ Point DistributionParametersImplementation::operator () (const Point & inP) const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::operator() const"; } /* Conversion from native parameters */ Point DistributionParametersImplementation::inverse(const Point & inP) const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::inverse const"; } /* Parameters value and description accessor */ void DistributionParametersImplementation::setValues(const Point & values) { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::setValues()"; } Point DistributionParametersImplementation::getValues() const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::getValues() const"; } Description DistributionParametersImplementation::getDescription() const { throw NotYetImplementedException(HERE) << "In DistributionParametersImplementation::getDescription() const"; } /* String converter */ String DistributionParametersImplementation::__repr__() const { OSS oss; oss << "class=" << DistributionParametersImplementation::GetClassName(); return oss; } /* String converter */ String DistributionParametersImplementation::__str__(const String & offset) const { return __repr__(); } /* Method save() stores the object through the StorageManager */ void DistributionParametersImplementation::save(Advocate & adv) const { PersistentObject::save(adv); } /* Method load() reloads the object from the StorageManager */ void DistributionParametersImplementation::load(Advocate & adv) { PersistentObject::load(adv); } END_NAMESPACE_OPENTURNSopenturns-1.9/lib/src/Uncertainty/Model/EllipticalDistribution.cxx000066400000000000000000000744141307543307100255450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for elliptical distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/EllipticalDistribution.hxx" #include "openturns/Distribution.hxx" #include "openturns/NatafEllipticalDistributionEvaluation.hxx" #include "openturns/NatafEllipticalDistributionGradient.hxx" #include "openturns/NatafEllipticalDistributionHessian.hxx" #include "openturns/InverseNatafEllipticalDistributionEvaluation.hxx" #include "openturns/InverseNatafEllipticalDistributionGradient.hxx" #include "openturns/InverseNatafEllipticalDistributionHessian.hxx" #include "openturns/Description.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Brent.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EllipticalDistribution); static const Factory Factory_EllipticalDistribution; /* Default constructor */ EllipticalDistribution::EllipticalDistribution() : ContinuousDistribution() { // Nothing to do } /* Parameter constructor */ EllipticalDistribution::EllipticalDistribution(const Point & mean, const Point & sigma, const CorrelationMatrix & R, const Scalar covarianceScalingFactor) : ContinuousDistribution() , sigma_(sigma) , R_(R) , covarianceScalingFactor_(covarianceScalingFactor) { const UnsignedInteger dimension = R.getDimension(); // We check if the inputs have the same dimension. If not, we throw an exception if ( (dimension != mean.getDimension()) || (dimension != sigma.getDimension()) ) throw InvalidArgumentException(HERE) << "Arguments have incompatible dimensions: R dimension=" << dimension << " sigma dimension=" << sigma.getDimension() << " mean dimension=" << mean.getDimension(); // We check that the given correlation matrix is definite positive if ( !R_.isPositiveDefinite()) throw InvalidArgumentException(HERE) << "The correlation matrix must be definite positive R=" << R; // We check that the marginal standard deviations are > 0 for(UnsignedInteger i = 0; i < dimension; ++i) if (!(sigma[i] > 0.0)) throw InvalidArgumentException(HERE) << "The marginal standard deviations must be > 0 sigma=" << sigma[i]; // Then we set the dimension of the Elliptical distribution setDimension(dimension); // The mean attribute is stored at an upper level mean_ = mean; // Compute the auxiliary attributes. It also set isAlreadyComputedMean to true update(); } Bool EllipticalDistribution::equals(const DistributionImplementation & other) const { // Check by properties // Do they have the same dimension? if (dimension_ != other.getDimension()) return false; // Can I cast other into an elliptical distribution? const EllipticalDistribution * p_other = dynamic_cast(&other); if (p_other) return (mean_ == p_other->mean_) && (sigma_ == p_other->sigma_) && (R_ == p_other->R_); // Here, if dimension == 1 no more test can be done if (dimension_ == 1) return false; // Otherwise, check equality using properties // Are they both elliptical? if (!other.isElliptical()) return false; // The copula... if ( !( (hasIndependentCopula() && other.hasIndependentCopula()) || (*getCopula() == *other.getCopula()) ) ) return false; // Then the marginals for (UnsignedInteger i = 0; i < dimension_; ++ i) if (!(getMarginal(i)->operator == (*other.getMarginal(i)))) return false; return true; } /* Centers and reduces a value u = Diag(sigma_)^(-1) * (x - mean_) */ Point EllipticalDistribution::normalize(const Point & x) const { Point u(x - mean_); for (UnsignedInteger i = 0; i < getDimension(); ++i) u[i] /= sigma_[i]; return u; } /* Decenters and scales a value x = mean_ + Diag(sigma_) * u */ Point EllipticalDistribution::denormalize(const Point & u) const { Point x(mean_); for (UnsignedInteger i = 0; i < getDimension(); ++i) x[i] += sigma_[i] * u[i]; return x; } /* String converter */ String EllipticalDistribution::__repr__() const { OSS oss; oss << "class=" << EllipticalDistribution::GetClassName() << "parameters collection=" << getParametersCollection(); return oss; } /* Tell if the distribution is elliptical */ Bool EllipticalDistribution::isElliptical() const { return true; } /* Tell if the distribution has elliptical copula */ Bool EllipticalDistribution::hasEllipticalCopula() const { return true; } /* Compute the density generator of the elliptical distribution, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi((x-mean_).C^{-1} * (x-mean_)) */ Scalar EllipticalDistribution::computeDensityGenerator(const Scalar betaSquare) const { throw NotYetImplementedException(HERE) << "In EllipticalDistribution::computeDensityGenerator(const Scalar betaSquare) const"; } Scalar EllipticalDistribution::computeLogDensityGenerator(const Scalar betaSquare) const { const Scalar densityGenerator = computeDensityGenerator(betaSquare); if (densityGenerator == 0.0) return SpecFunc::LogMinScalar; return std::log(densityGenerator); } /* Compute the derivative of the density generator */ Scalar EllipticalDistribution::computeDensityGeneratorDerivative(const Scalar betaSquare) const { // Use centered finite difference const Scalar epsilon = std::pow(ResourceMap::GetAsScalar("Distribution-DefaultPDFEpsilon"), 1.0 / 3.0); return (computeDensityGenerator(betaSquare + epsilon) - computeDensityGenerator(betaSquare - epsilon)) / epsilon; } /* Compute the seconde derivative of the density generator */ Scalar EllipticalDistribution::computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const { // Use centered finite difference const Scalar epsilon = std::pow(ResourceMap::GetAsScalar("Distribution-DefaultPDFEpsilon"), 0.25); return (computeDensityGenerator(betaSquare + epsilon) - 2.0 * computeDensityGenerator(betaSquare) + computeDensityGenerator(betaSquare - epsilon)) / (epsilon * epsilon); } /* Get the DDF of the distribution */ Point EllipticalDistribution::computeDDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const UnsignedInteger dimension = getDimension(); switch(dimension) { case 1: { const Scalar iLx = (point[0] - mean_[0]) / sigma_[0]; return Point(1, 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(iLx * iLx) * inverseCholesky_(0, 0) * iLx); } break; case 2: { const Scalar deltaX = point[0] - mean_[0]; const Scalar deltaY = point[1] - mean_[1]; Scalar iLx, iLy; Point result(2); if (inverseCholesky_.isLowerTriangular()) { iLx = inverseCholesky_(0, 0) * deltaX; iLy = inverseCholesky_(1, 0) * deltaX + inverseCholesky_(1, 1) * deltaY; const Scalar betaSquare = iLx * iLx + iLy * iLy; const Scalar factor = 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(betaSquare); result[0] = factor * (inverseCholesky_(0, 0) * iLx + inverseCholesky_(1, 0) * iLy); result[1] = factor * (inverseCholesky_(1, 1) * iLy); } else { iLx = inverseCholesky_(0, 0) * deltaX + inverseCholesky_(0, 1) * deltaY; iLy = inverseCholesky_(1, 1) * deltaY; const Scalar betaSquare = iLx * iLx + iLy * iLy; const Scalar factor = 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(betaSquare); result[0] = factor * (inverseCholesky_(0, 0) * iLx); result[1] = factor * (inverseCholesky_(0, 1) * iLx + inverseCholesky_(1, 1) * iLy); } return result; } break; case 3: { const Scalar deltaX = point[0] - mean_[0]; const Scalar deltaY = point[1] - mean_[1]; const Scalar deltaZ = point[2] - mean_[2]; Scalar iLx, iLy, iLz; Point result(3); if (inverseCholesky_.isLowerTriangular()) { iLx = inverseCholesky_(0, 0) * deltaX; iLy = inverseCholesky_(1, 0) * deltaX + inverseCholesky_(1, 1) * deltaY; iLz = inverseCholesky_(2, 0) * deltaX + inverseCholesky_(2, 1) * deltaY + inverseCholesky_(2, 2) * deltaZ; const Scalar betaSquare = iLx * iLx + iLy * iLy + iLz * iLz; const Scalar factor = 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(betaSquare); result[0] = factor * (inverseCholesky_(0, 0) * iLx + inverseCholesky_(1, 0) * iLy + inverseCholesky_(2, 0) * iLz); result[1] = factor * (inverseCholesky_(1, 1) * iLy + inverseCholesky_(2, 1) * iLz); result[2] = factor * (inverseCholesky_(2, 2) * iLz); } else { iLx = inverseCholesky_(0, 0) * deltaX + inverseCholesky_(0, 1) * deltaY + inverseCholesky_(0, 2) * deltaZ; iLy = inverseCholesky_(1, 1) * deltaY + inverseCholesky_(1, 2) * deltaZ; iLz = inverseCholesky_(2, 2) * deltaZ; const Scalar betaSquare = iLx * iLx + iLy * iLy + iLz * iLz; const Scalar factor = 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(betaSquare); result[0] = factor * (inverseCholesky_(0, 0) * iLx); result[1] = factor * (inverseCholesky_(0, 1) * iLx + inverseCholesky_(1, 1) * iLy); result[2] = factor * (inverseCholesky_(0, 2) * iLx + inverseCholesky_(1, 2) * iLy + inverseCholesky_(2, 2) * iLz); } return result; } break; default: const Point iLx(inverseCholesky_ * (point - mean_)); const Scalar betaSquare = iLx.normSquare(); return 2.0 * normalizationFactor_ * computeDensityGeneratorDerivative(betaSquare) * inverseCholesky_.transpose() * iLx; } } /* Get the PDF of the distribution */ Scalar EllipticalDistribution::computePDF(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const UnsignedInteger dimension = getDimension(); switch(dimension) { case 1: { const Scalar iLx = (point[0] - mean_[0]) / sigma_[0]; return normalizationFactor_ * computeDensityGenerator(iLx * iLx); } break; case 2: { const Scalar deltaX = point[0] - mean_[0]; const Scalar deltaY = point[1] - mean_[1]; Scalar iLx, iLy; if (inverseCholesky_.isLowerTriangular()) { iLx = inverseCholesky_(0, 0) * deltaX; iLy = inverseCholesky_(1, 0) * deltaX + inverseCholesky_(1, 1) * deltaY; } else { iLx = inverseCholesky_(0, 0) * deltaX + inverseCholesky_(0, 1) * deltaY; iLy = inverseCholesky_(1, 1) * deltaY; } const Scalar betaSquare = iLx * iLx + iLy * iLy; return normalizationFactor_ * computeDensityGenerator(betaSquare); } break; case 3: { const Scalar deltaX = point[0] - mean_[0]; const Scalar deltaY = point[1] - mean_[1]; const Scalar deltaZ = point[2] - mean_[2]; Scalar iLx, iLy, iLz; if (inverseCholesky_.isLowerTriangular()) { iLx = inverseCholesky_(0, 0) * deltaX; iLy = inverseCholesky_(1, 0) * deltaX + inverseCholesky_(1, 1) * deltaY; iLz = inverseCholesky_(2, 0) * deltaX + inverseCholesky_(2, 1) * deltaY + inverseCholesky_(2, 2) * deltaZ; } else { iLx = inverseCholesky_(0, 0) * deltaX + inverseCholesky_(0, 1) * deltaY + inverseCholesky_(0, 2) * deltaZ; iLy = inverseCholesky_(1, 1) * deltaY + inverseCholesky_(1, 2) * deltaZ; iLz = inverseCholesky_(2, 2) * deltaZ; } const Scalar betaSquare = iLx * iLx + iLy * iLy + iLz * iLz; return normalizationFactor_ * computeDensityGenerator(betaSquare); } break; default: const Point iLx(inverseCholesky_ * (point - mean_)); const Scalar betaSquare = iLx.normSquare(); return normalizationFactor_ * computeDensityGenerator(betaSquare); } } /* Get the PDF gradient of the distribution */ Point EllipticalDistribution::computePDFGradient(const Point & point) const { if (point.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Error: the given point must have dimension=1, here dimension=" << point.getDimension(); const Point minusGardientMean(computeDDF(point)); const UnsignedInteger dimension = getDimension(); const Point u(normalize(point)); const Point iRu(inverseR_ * u); const Scalar betaSquare = dot(u, iRu); const Scalar phi = computeDensityGenerator(betaSquare); const Scalar phiDerivative = computeDensityGeneratorDerivative(betaSquare); Point pdfGradient(2 * dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { Scalar iSigma = 1.0 / sigma_[i]; // dPDF / dmu_i pdfGradient[i] = -2.0 * normalizationFactor_ * phiDerivative * iRu[i] * iSigma; // dPDF / dsigma_i pdfGradient[dimension + i] = pdfGradient[i] * u[i] - normalizationFactor_ * phi * iSigma; } return pdfGradient; } /* Get the survival function of the distribution */ Scalar EllipticalDistribution::computeSurvivalFunction(const Point & point) const { return computeCDF(2.0 * mean_ - point); } /* Get the minimum volume level set containing at least a given probability of the distribution. The minimum volume level A(p) set is such that A(p)={x\in R^n | y(x) <= y_p} where y(x)=-\log X and y_p is the p-quantile of Y=pdf(X) In the case of an elliptical distribution, it is the opposite of the value of the log-PDF of the standard representative at any point at distance q from the origin, where q is the prob-quantile of the radial distribution. */ LevelSet EllipticalDistribution::computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const { if (!isContinuous()) throw NotYetImplementedException(HERE) << "In DistributionImplementation::computeMinimumVolumeLevelSet()"; if (getDimension() == 1) return DistributionImplementation::computeMinimumVolumeLevelSetWithThreshold(prob, threshold); RadialCDFWrapper radialWrapper(this); const Distribution standard(getStandardDistribution()); Point point(getDimension()); const Scalar xMax = standard.getRange().getUpperBound().norm(); Brent solver(quantileEpsilon_, pdfEpsilon_, pdfEpsilon_, quantileIterations_); point[0] = solver.solve(radialWrapper, prob, 0.0, xMax, 0.0, 1.0); Function minimumVolumeLevelSetFunction(MinimumVolumeLevelSetEvaluation(clone()).clone()); minimumVolumeLevelSetFunction.setGradient(MinimumVolumeLevelSetGradient(clone()).clone()); const Scalar logThreshold = standard.computeLogPDF(point); threshold = std::exp(logThreshold); return LevelSet(minimumVolumeLevelSetFunction, -logThreshold); } /* Update the derivative attributes */ void EllipticalDistribution::update() { const UnsignedInteger dimension = getDimension(); if (dimension > 1) { // Build the shape matrix shape_ = R_; for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j <= i; ++j) shape_(i, j) *= sigma_[i] * sigma_[j]; // Compute its Cholesky factor cholesky_ = shape_.computeCholesky(); inverseCholesky_ = cholesky_.solveLinearSystem(IdentityMatrix(dimension)).getImplementation(); // Inverse the correlation matrix R = D^(-1).L.L'.D^(-1) // R^(-1) = D.L^(-1).L^(-1)'.D inverseR_ = SymmetricMatrix(dimension); const SquareMatrix inverseShape(inverseCholesky_.transpose() * inverseCholesky_); for (UnsignedInteger i = 0; i < dimension; ++i) for (UnsignedInteger j = 0; j <= i; ++j) inverseR_(i, j) = sigma_[i] * inverseShape(i, j) * sigma_[j]; normalizationFactor_ = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) normalizationFactor_ /= cholesky_(i, i); } else // dimension 1 { if (shape_.getDimension() == 0) // First time we enter here, set matrix sizes { shape_ = CovarianceMatrix(1); inverseR_ = IdentityMatrix(1); cholesky_ = TriangularMatrix(1); inverseCholesky_ = TriangularMatrix(1); } shape_(0, 0) = sigma_[0] * sigma_[0]; cholesky_(0, 0) = sigma_[0]; inverseCholesky_(0, 0) = 1.0 / sigma_[0]; normalizationFactor_ = 1.0 / sigma_[0]; } isAlreadyComputedMean_ = true; } /* Mean point accessor */ void EllipticalDistribution::setMean(const Point & mean) { if (mean.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Mean point dimension (" << mean.getDimension() << ") differ from distribution dimension(" << getDimension() << "). Unable to construct EllipticalDistribution distribution object."; mean_ = mean; isAlreadyComputedMean_ = true; computeRange(); } /* Mean computation */ void EllipticalDistribution::computeMean() const { // Just set the flag as it may have been changed e.g if the integration nodes number has changed isAlreadyComputedMean_ = true; } /* Covariance matrix computation */ void EllipticalDistribution::computeCovariance() const { // We have to extract the implementation because we know that the result // is a valid covariance matrix, but it cannot be infered by the C++ // from the operands covariance_ = (covarianceScalingFactor_ * shape_).getImplementation(); isAlreadyComputedCovariance_ = true; } /* Sigma accessor */ void EllipticalDistribution::setSigma(const Point & sigma) { if (sigma.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Sigma dimension (" << sigma.getDimension() << ") differ from distribution dimension(" << getDimension() << "). Unable to construct elliptical distribution object."; // We check that the marginal standard deviations are > 0 for(UnsignedInteger i = 0; i < sigma.getDimension(); ++i) if (!(sigma[i] > 0.0)) throw InvalidArgumentException(HERE) << "The marginal standard deviations must be > 0 sigma=" << sigma[i]; sigma_ = sigma; update(); computeRange(); isAlreadyComputedCovariance_ = false; } /* Sigma accessor */ Point EllipticalDistribution::getSigma() const { return sigma_; } /* Get the standard deviation of the distribution. Warning! This method MUST be overloaded for elliptical distributions without finite second moment: it is possible to have a well-defined sigma vector but no standard deviation, think about Stundent distribution with nu < 2 */ Point EllipticalDistribution::getStandardDeviation() const { return std::sqrt(covarianceScalingFactor_) * sigma_; } /* Correlation matrix accessor */ void EllipticalDistribution::setCorrelation(const CorrelationMatrix & R) { if (R.getDimension() != getDimension()) throw InvalidArgumentException(HERE) << "Correlation Matrix dimension (" << R.getDimension() << ") differ from distribution dimension(" << getDimension() << "). Unable to construct elliptical distribution object."; // We check that the given correlation matrix is definite positive if ( !const_cast(&R)->isPositiveDefinite()) throw InvalidArgumentException(HERE) << "The correlation matrix must be definite positive R=" << R; R_ = R; update(); isAlreadyComputedCovariance_ = false; } /* Correlation matrix accessor */ CorrelationMatrix EllipticalDistribution::getCorrelation() const { return R_; } /* Inverse correlation matrix accessor */ SquareMatrix EllipticalDistribution::getInverseCorrelation() const { return inverseR_; } /* Cholesky factor of the correlation matrix accessor */ TriangularMatrix EllipticalDistribution::getCholesky() const { return cholesky_; } /* Inverse of the Cholesky factor of the correlation matrix accessor */ TriangularMatrix EllipticalDistribution::getInverseCholesky() const { return inverseCholesky_; } /* Virtual copy constructor */ EllipticalDistribution * EllipticalDistribution::clone() const { return new EllipticalDistribution(*this); } /* Get the isoprobabilist transformation */ EllipticalDistribution::IsoProbabilisticTransformation EllipticalDistribution::getIsoProbabilisticTransformation() const { IsoProbabilisticTransformation transform; transform.setEvaluation(new NatafEllipticalDistributionEvaluation(mean_, inverseCholesky_)); transform.setGradient(new NatafEllipticalDistributionGradient(inverseCholesky_)); transform.setHessian(new NatafEllipticalDistributionHessian(getDimension())); // Set the parameters values and descriptions // The result of parameterGradient is given // in the following form: // (d/dmu, d/dsigma) // There is no gradient according to the dependence parameters yet (28/10/2006) const UnsignedInteger dimension = getDimension(); Point parameters(2 * dimension); Description description(parameters.getDimension()); PointWithDescriptionCollection parametersCollection(getParametersCollection()); for (UnsignedInteger i = 0; i < dimension; ++i) { const Description parametersDescription(parametersCollection[i].getDescription()); const String marginalName(parametersCollection[i].getName()); parameters[i] = parametersCollection[i][0]; parameters[dimension + i] = parametersCollection[i][1]; description[i] = OSS() << marginalName << "_" << parametersDescription[0]; description[dimension + i] = OSS() << marginalName << "_" << parametersDescription[1]; } transform.setParameter(parameters); transform.setParameterDescription(description); return transform; } /* Get the inverse isoprobabilist transformation */ EllipticalDistribution::InverseIsoProbabilisticTransformation EllipticalDistribution::getInverseIsoProbabilisticTransformation() const { InverseIsoProbabilisticTransformation inverseTransform; inverseTransform.setEvaluation(new InverseNatafEllipticalDistributionEvaluation(mean_, cholesky_)); inverseTransform.setGradient(new InverseNatafEllipticalDistributionGradient(cholesky_)); inverseTransform.setHessian(new InverseNatafEllipticalDistributionHessian(getDimension())); // Set the parameters values and descriptions // The result of parameterGradient is given // in the following form: // (d/dmu, d/dsigma) // There is no gradient according to the dependence parameters yet (28/10/2006) const UnsignedInteger dimension = getDimension(); Point parameters(2 * dimension); Description description(parameters.getDimension()); PointWithDescriptionCollection parametersCollection(getParametersCollection()); for (UnsignedInteger i = 0; i < dimension; ++i) { const Description parametersDescription(parametersCollection[i].getDescription()); const String marginalName(parametersCollection[i].getName()); parameters[i] = parametersCollection[i][0]; parameters[dimension + i] = parametersCollection[i][1]; description[i] = OSS() << marginalName << "_" << parametersDescription[0]; description[dimension + i] = OSS() << marginalName << "_" << parametersDescription[1]; } inverseTransform.setParameter(parameters); inverseTransform.setParameterDescription(description); return inverseTransform; } /* Get the standard distribution, i.e. a distribution of the same kind but with zero mean, * unit marginal standard distribution and identity correlation */ EllipticalDistribution::Implementation EllipticalDistribution::getStandardDistribution() const { EllipticalDistribution * p_standardDistribution(clone()); const UnsignedInteger dimension = getDimension(); p_standardDistribution->setMean(Point(dimension, 0.0)); p_standardDistribution->setSigma(Point(dimension, 1.0)); p_standardDistribution->setCorrelation(CorrelationMatrix(dimension)); return p_standardDistribution; } /* Parameters value and description accessor */ EllipticalDistribution::PointWithDescriptionCollection EllipticalDistribution::getParametersCollection() const { const UnsignedInteger dimension = getDimension(); PointWithDescriptionCollection parameters(dimension + (dimension > 1 ? 1 : 0)); // First put the marginal parameters const Description description(getDescription()); for (UnsignedInteger marginalIndex = 0; marginalIndex < dimension; ++marginalIndex) { PointWithDescription point(2); Description marginalDescription(point.getDimension()); point[0] = mean_[marginalIndex]; point[1] = sigma_[marginalIndex]; marginalDescription[0] = OSS() << "mean_" << marginalIndex; marginalDescription[1] = OSS() << "standard_deviation_" << marginalIndex; point.setDescription(marginalDescription); point.setName(description[marginalIndex]); parameters[marginalIndex] = point; } // marginalIndex if (dimension > 1) { // Second put the dependence parameters PointWithDescription point(dimension * (dimension - 1) / 2); Description dependenceDescription(point.getDimension()); point.setName("dependence"); UnsignedInteger dependenceIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { point[dependenceIndex] = R_(i, j); dependenceDescription[dependenceIndex] = OSS() << "R_" << i << "_" << j; ++dependenceIndex; } } point.setDescription(dependenceDescription); parameters[dimension] = point; } // dimension > 1 return parameters; } // getParametersCollection void EllipticalDistribution::setParametersCollection(const PointCollection & parametersCollection) { const UnsignedInteger size = parametersCollection.getSize(); const UnsignedInteger dimension = size > 1 ? size - 1 : size; setDimension(dimension); mean_ = Point(dimension); sigma_ = Point(dimension); R_ = CorrelationMatrix(dimension); if (dimension == 1) { mean_[0] = parametersCollection[0][0]; sigma_[0] = parametersCollection[0][1]; if (!(sigma_[0] > 0.0)) throw InvalidArgumentException(HERE) << "The marginal standard deviations must be > 0 sigma=" << sigma_[0]; } else { for (UnsignedInteger i = 0; i < dimension; ++i) { mean_[i] = parametersCollection[i][0]; sigma_[i] = parametersCollection[i][1]; if (!(sigma_[i] > 0.0)) throw InvalidArgumentException(HERE) << "The marginal standard deviations must be > 0 sigma=" << sigma_[i]; } UnsignedInteger parameterIndex = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j < i; ++j) { R_(i, j) = parametersCollection[size - 1][parameterIndex]; ++parameterIndex; } } if ( !R_.isPositiveDefinite()) throw InvalidArgumentException(HERE) << "The correlation matrix must be definite positive R=" << R_; } update(); computeRange(); isAlreadyComputedCovariance_ = false; } Point EllipticalDistribution::getParameter() const { const UnsignedInteger dimension = getDimension(); Point point(2 * dimension + (dimension > 1 ? ((dimension - 1)*dimension) / 2 : 0)); for (UnsignedInteger i = 0; i < dimension; ++i) { point[2 * i] = mean_[i]; point[2 * i + 1] = sigma_[i]; } UnsignedInteger index = 2 * dimension; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++j) { point[index] = R_(i, j); ++ index; } } return point; } void EllipticalDistribution::setParameter(const Point & parameters) { // N = 2*d+((d-1)*d)/2 const UnsignedInteger size = parameters.getSize(); Scalar dimReal = 0.5 * std::sqrt(9.0 + 8.0 * size) - 1.5; if (dimReal != round(dimReal)) throw InvalidArgumentException(HERE) << "Error: invalid parameter number for EllipticalDistribution"; const UnsignedInteger dimension = dimReal; mean_ = Point(dimension); sigma_ = Point(dimension); R_ = CorrelationMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { mean_[i] = parameters[2 * i]; sigma_[i] = parameters[2 * i + 1]; } if (dimension > 1) { UnsignedInteger index = 2 * dimension; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { R_(i, j) = parameters[index]; ++ index; } } if (!R_.isPositiveDefinite()) throw InvalidArgumentException(HERE) << "The correlation matrix must be definite positive R=" << R_; } update(); computeRange(); isAlreadyComputedCovariance_ = false; } Description EllipticalDistribution::getParameterDescription() const { const UnsignedInteger dimension = getDimension(); Description description(2 * dimension + (dimension > 1 ? ((dimension - 1)*dimension) / 2 : 0)); for (UnsignedInteger i = 0; i < dimension; ++ i) { description[2 * i] = OSS() << "mean_" << i; description[2 * i + 1] = OSS() << "standard_deviation_" << i; } UnsignedInteger index = 2 * dimension; for (UnsignedInteger i = 0; i < dimension; ++ i) { for (UnsignedInteger j = 0; j < i; ++ j) { description[index] = OSS() << "R_" << i << "_" << j; ++ index; } } return description; } /* Method save() stores the object through the StorageManager */ void EllipticalDistribution::save(Advocate & adv) const { ContinuousDistribution::save(adv); adv.saveAttribute( "R_", R_ ); adv.saveAttribute( "sigma_", sigma_ ); adv.saveAttribute( "mean_duplicate", mean_ ); adv.saveAttribute( "shape_", shape_ ); adv.saveAttribute( "inverseR_", inverseR_ ); adv.saveAttribute( "cholesky_", cholesky_ ); adv.saveAttribute( "inverseCholesky_", inverseCholesky_ ); adv.saveAttribute( "normalizationFactor_", normalizationFactor_ ); } /* Method load() reloads the object from the StorageManager */ void EllipticalDistribution::load(Advocate & adv) { ContinuousDistribution::load(adv); adv.loadAttribute( "R_", R_ ); adv.loadAttribute( "sigma_", sigma_ ); adv.loadAttribute( "mean_duplicate", mean_ ); adv.loadAttribute( "shape_", shape_ ); adv.loadAttribute( "inverseR_", inverseR_ ); adv.loadAttribute( "cholesky_", cholesky_ ); adv.loadAttribute( "inverseCholesky_", inverseCholesky_ ); adv.loadAttribute( "normalizationFactor_", normalizationFactor_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/Event.cxx000066400000000000000000000044711307543307100221400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements all random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/Event.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/Less.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Event); /* Default constructor for save/load */ Event::Event() : RandomVector(CompositeRandomVector(SymbolicFunction("x", "x"), RandomVector(Point(1, 0.0))), Less(), 0.0) { // Nothing to do } /* Constructor from RandomVector */ Event::Event(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold) : RandomVector(antecedent, op, threshold) { // Nothing to do } /* Constructor from RandomVector */ Event::Event(const RandomVector & antecedent, const Domain & domain) : RandomVector(antecedent, domain) { // Nothing to do } /* Constructor from RandomVector */ Event::Event(const RandomVector & antecedent, const Interval & interval) : RandomVector(antecedent, interval) { // Nothing to do } /* Constructor from RandomVector */ Event::Event(const Process & process, const Domain & domain) : RandomVector(process, domain) { // Nothing to do } /* String converter */ String Event::__repr__() const { OSS oss(true); oss << "class=" << Event::GetClassName() << " name=" << getName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String Event::__str__(const String & offset) const { return __repr__(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/EventDomain.cxx000066400000000000000000000073101307543307100232630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event random vector (composite) built * upon a boolean function which is described by a domain appartenance. * The antecedent of the event must be a "classical" composite random * vector in the context of OpenTURNS. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EventDomain.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/OSS.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EventDomain); static const Factory Factory_EventDomain; /* Default constructor */ EventDomain::EventDomain() : CompositeRandomVector() { // Nothing to do } /* Constructor from RandomVector */ EventDomain::EventDomain(const RandomVectorImplementation & antecedent, const Domain & domain) : CompositeRandomVector() , domain_(domain) { // Event can only be constructed from composite random vectors if (!antecedent.isComposite()) throw InvalidArgumentException(HERE) << "Event can only be constructed from composite random vectors. The random vector (" << antecedent << ") passed as first argument of EventDomain " << " has incorrect type"; function_ = antecedent.getFunction(); p_antecedent_ = antecedent.getAntecedent(); setName(antecedent.getName()); setDescription(Description(1, OSS() << antecedent.getName() << " in " << domain.getName())); } EventDomain * EventDomain::clone() const { return new EventDomain(*this); } /* String converter */ String EventDomain::__repr__() const { OSS oss; oss << "class=" << EventDomain::GetClassName() << " antecedent=" << CompositeRandomVector::__repr__() << " domain=" << domain_; return oss; } /* Dimension accessor */ UnsignedInteger EventDomain::getDimension() const { return 1; } /* Domain accessor */ Domain EventDomain::getDomain() const { return domain_; } /* Realization accessor */ Point EventDomain::getRealization() const { return Point(1, domain_.contains(CompositeRandomVector::getRealization())); } /* Numerical sample accessor */ Sample EventDomain::getSample(const UnsignedInteger size) const { // First, compute a sample of the event antecedent const Sample returnSample(CompositeRandomVector::getSample(size)); // Then, we loop over the sample to check each point in sequence Sample result(size, 1); for (UnsignedInteger i = 0; i < size; ++i) result[i][0] = domain_.contains(returnSample[i]); result.setName("EventDomain sample"); result.setDescription(getDescription()); return result; } /* Method save() stores the object through the StorageManager */ void EventDomain::save(Advocate & adv) const { CompositeRandomVector::save(adv); adv.saveAttribute( "domain_", domain_ ); } /* Method load() reloads the object from the StorageManager */ void EventDomain::load(Advocate & adv) { CompositeRandomVector::load(adv); adv.loadAttribute( "domain_", domain_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/EventProcess.cxx000066400000000000000000000061351307543307100234760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event random vector (not necessary composite) * built upon a process and a domain. * The class check that a realization of a stochastic process is in a domain \mathcal{D} * using contains method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EventProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EventProcess); static const Factory Factory_EventProcess; /* Default constructor */ EventProcess::EventProcess() : RandomVectorImplementation() { // Nothing to do } /* Constructor from RandomVector */ EventProcess::EventProcess(const Process & process, const Domain & domain) : RandomVectorImplementation() , process_(process) , domain_(domain) { // Set the description setDescription(Description(1, OSS() << process.getName() << " in " << domain.getName())); } EventProcess * EventProcess::clone() const { return new EventProcess(*this); } /* String converter */ String EventProcess::__repr__() const { OSS oss; oss << "class=" << EventProcess::GetClassName() << " domain=" << domain_ << " process=" << process_ ; return oss; } /* Dimension accessor */ UnsignedInteger EventProcess::getDimension() const { return 1; } /* Domain accessor */ Domain EventProcess::getDomain() const { return domain_; } /* Process accessor */ Process EventProcess::getProcess() const { return process_; } /* check that a values of a field are/are not in the domain */ Bool EventProcess::checkTimeSerieValuesInDomain(const Field & fld) const { for (UnsignedInteger i = 0; i < fld.getSize(); ++i) if (domain_.contains(fld.getValueAtIndex(i))) return true; return false; } /* Realization accessor */ Point EventProcess::getRealization() const { return Point(1, checkTimeSerieValuesInDomain(process_.getRealization())); } /* Method save() stores the object through the StorageManager */ void EventProcess::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "domain_", domain_ ); adv.saveAttribute( "process_", process_ ); } /* Method load() reloads the object from the StorageManager */ void EventProcess::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "domain_", domain_ ); adv.loadAttribute( "process_", process_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/EventRandomVector.cxx000066400000000000000000000116641307543307100244660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event random vector, i.e. a * composite random vector built upon a boolean function which * is described by a threshold and a comparison operator. The * antecedent of the event must be a "classical" composite random * vector in the context of OpenTURNS. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/EventRandomVector.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(EventRandomVector); static const Factory Factory_EventRandomVector; /* Default constructor */ EventRandomVector::EventRandomVector() : CompositeRandomVector() , operator_() , threshold_() { // Nothing to do } /* Constructor from RandomVector */ EventRandomVector::EventRandomVector(const RandomVectorImplementation & antecedent, const ComparisonOperator & op, const Scalar threshold) : CompositeRandomVector() , operator_(op) , threshold_(threshold) { // Event can only be constructed from composite random vectors if (!antecedent.isComposite()) throw InvalidArgumentException(HERE) << "Event can only be constructed from composite random vectors. The random vector (" << antecedent << ") passed as first argument of EventRandomVector " << " has incorrect type"; // EventRandomVector can only be constructed from 1D random vectors if (antecedent.getDimension() != 1) throw InvalidArgumentException(HERE) << "EventRandomVector can only be constructed from 1D random vectors. The random vector (" << antecedent << ") passed as first argument of EventRandomVector " << " has incorrect dimension"; function_ = antecedent.getFunction(); p_antecedent_ = antecedent.getAntecedent(); setName(antecedent.getName()); setDescription(antecedent.getDescription()); } EventRandomVector * EventRandomVector::clone() const { return new EventRandomVector(*this); } /* String converter */ String EventRandomVector::__repr__() const { OSS oss; oss << "class=" << EventRandomVector::GetClassName() << " antecedent=" << CompositeRandomVector::__repr__() << " operator=" << operator_ << " threshold=" << threshold_; return oss; } /* Dimension accessor */ UnsignedInteger EventRandomVector::getDimension() const { return 1; } /* Operator accessor */ ComparisonOperator EventRandomVector::getOperator() const { return operator_; } /* Threshold accessor */ Scalar EventRandomVector::getThreshold() const { return threshold_; } /* Realization accessor */ Point EventRandomVector::getRealization() const { return Point(1, operator_(CompositeRandomVector::getRealization()[0], threshold_)); } /* Numerical sample accessor */ Sample EventRandomVector::getSample(const UnsignedInteger size) const { // We don't build the return sample element by element because it doesn't // use the potential distribution of the computation. As the returned // sample can be huge, we use it twice in place // First, it stores a sample of its antecedent Sample returnSample(CompositeRandomVector::getSample(size)); // Then, we loop over the sample and substitute realizations of the eventRandomVectorImplementation // in place of the realizations of the antecedent for (UnsignedInteger i = 0; i < size; ++i) returnSample[i][0] = operator_(returnSample[i][0], threshold_); returnSample.setName("EventRandomVector sample"); returnSample.setDescription(getDescription()); return returnSample; } /* Method save() stores the object through the StorageManager */ void EventRandomVector::save(Advocate & adv) const { CompositeRandomVector::save(adv); adv.saveAttribute( "operator_", operator_ ); adv.saveAttribute( "threshold_", threshold_ ); } /* Method load() reloads the object from the StorageManager */ void EventRandomVector::load(Advocate & adv) { CompositeRandomVector::load(adv); adv.loadAttribute( "operator_", operator_ ); adv.loadAttribute( "threshold_", threshold_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/FunctionalChaosRandomVector.cxx000066400000000000000000000335221307543307100264620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for functionalChaos random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/PersistentObjectFactory.hxx" #include "openturns/FunctionalChaosRandomVector.hxx" #include "openturns/UsualRandomVector.hxx" #include "openturns/EnumerateFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionalChaosRandomVector); static const Factory Factory_FunctionalChaosRandomVector; /* Default constructor */ FunctionalChaosRandomVector::FunctionalChaosRandomVector(const FunctionalChaosResult & functionalChaosResult) : CompositeRandomVector(functionalChaosResult.getComposedMetaModel(), UsualRandomVector(functionalChaosResult.getOrthogonalBasis().getMeasure())) , covariance_(0) , isAlreadyComputedCovariance_(false) , functionalChaosResult_(functionalChaosResult) { // Nothing to do } /* Virtual constructor */ FunctionalChaosRandomVector * FunctionalChaosRandomVector::clone() const { return new FunctionalChaosRandomVector(*this); } /* String converter */ String FunctionalChaosRandomVector::__repr__() const { OSS oss; oss << "class=" << FunctionalChaosRandomVector::GetClassName() << " functional chaos result=" << functionalChaosResult_; return oss; } /* Mean accessor */ Point FunctionalChaosRandomVector::getMean() const { return functionalChaosResult_.getCoefficients()[0]; } /* Covariance accessor */ CovarianceMatrix FunctionalChaosRandomVector::getCovariance() const { if (!isAlreadyComputedCovariance_) computeCovariance(); return covariance_; } /* Compute the covariance */ void FunctionalChaosRandomVector::computeCovariance() const { const UnsignedInteger dimension = getDimension(); const Indices indices(functionalChaosResult_.getIndices()); const Sample coefficients(functionalChaosResult_.getCoefficients()); const UnsignedInteger size = indices.getSize(); covariance_ = CovarianceMatrix(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { for (UnsignedInteger j = 0; j <= i; ++j) { covariance_(i, j) = 0.0; for (UnsignedInteger k = 0; k < size; ++k) // Take into account only non-zero indices as the null index is the mean of the vector if (indices[k] > 0) covariance_(i, j) += coefficients[k][i] * coefficients[k][j]; } // Loop over the second index } // Loop over the first index isAlreadyComputedCovariance_ = true; } /* Sobol index accessor */ Scalar FunctionalChaosRandomVector::getSobolIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex) const { const UnsignedInteger inputDimension = getAntecedent()->getDimension(); if (!variableIndices.check(inputDimension)) throw InvalidArgumentException(HERE) << "The variable indices of a Sobol indice must be in the range [0, dim-1] and must be different."; if (marginalIndex >= getDimension()) throw InvalidArgumentException(HERE) << "The marginal index must be in the range [0, dim-1]."; // Check if the measure defining the basis has an independent copula else // the conditional covariance cannot be extracted from the decomposition if (!functionalChaosResult_.getOrthogonalBasis().getMeasure().hasIndependentCopula()) throw InternalException(HERE) << "Error: cannot compute Sobol indices from a non-tensorized basis."; if (!functionalChaosResult_.getDistribution().hasIndependentCopula()) LOGWARN(OSS(false) << "The Sobol indices are computed wrt the basis measure, and there is no one-to-one transformation between this measure and the input distribution. The interpretation of the indices may be misleading."); const UnsignedInteger orderSobolIndice = variableIndices.getSize(); const Sample coefficients(functionalChaosResult_.getCoefficients().getMarginal(marginalIndex)); const Indices coefficientIndices(functionalChaosResult_.getIndices()); const UnsignedInteger size = coefficients.getSize(); Scalar covarianceVariables = 0.0; const EnumerateFunction enumerateFunction(functionalChaosResult_.getOrthogonalBasis().getEnumerateFunction()); // Sum the contributions of all the coefficients associated to a basis vector involving only the needed variables Scalar totalVariance = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { if (coefficientIndices[i] > 0) { const Scalar coefficientI = coefficients[i][0]; if (coefficientI != 0.0) { Indices multiIndices(enumerateFunction(coefficientIndices[i])); // Take into account only nonzero multi indices if (*std::max_element(multiIndices.begin(), multiIndices.end()) > 0) { totalVariance += coefficientI * coefficientI; Bool isProperSubset = true; // First check that the exponents associated to the selected variables are > 0 for (UnsignedInteger j = 0; j < orderSobolIndice; ++j) { const UnsignedInteger varJ = variableIndices[j]; isProperSubset = isProperSubset && (multiIndices[varJ] > 0); // We must set the value of the current variable index to 0 for the next test multiIndices[varJ] = 0; } // At this step, the current index could be associated to a function that does not involve all the variables if (isProperSubset) { // Second, check that the other coefficients are 0 if (*std::max_element(multiIndices.begin(), multiIndices.end()) == 0) covarianceVariables += coefficientI * coefficientI; } } // *std::max_element(multiIndices.begin(), multiIndices.end())s > 0 } // if coefficientI <> 0 } // coefficientIndices[i] > 0 } // Loop over the coefficients if (totalVariance > 0.0) return covarianceVariables / totalVariance; else return 0.0; } /* Sobol index accessor */ Scalar FunctionalChaosRandomVector::getSobolIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex) const { Indices index(1); index[0] = variableIndex; return getSobolIndex(index, marginalIndex); } /* Sobol total index accessor */ Scalar FunctionalChaosRandomVector::getSobolTotalIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex) const { const UnsignedInteger inputDimension = getAntecedent()->getDimension(); if (!variableIndices.check(inputDimension)) throw InvalidArgumentException(HERE) << "The variable indices of a Sobol indice must be in the range [0, dim-1] and must be different."; if (marginalIndex >= getDimension()) throw InvalidArgumentException(HERE) << "The marginal index must be in the range [0, dim-1]."; // Check if the measure defining the basis has an independent copula else // the conditional covariance cannot be extracted from the decomposition if (!functionalChaosResult_.getOrthogonalBasis().getMeasure().hasIndependentCopula()) throw InternalException(HERE) << "Error: cannot compute Sobol total indices from a non-tensorized basis."; if (!functionalChaosResult_.getDistribution().hasIndependentCopula()) LOGWARN(OSS(false) << "The Sobol total indices are computed wrt the basis measure, and there is no one-to-one transformation between this measure and the input distribution. The interpretation of the total indices may be misleading."); const UnsignedInteger orderSobolIndice = variableIndices.getSize(); const Sample coefficients(functionalChaosResult_.getCoefficients().getMarginal(marginalIndex)); const Indices coefficientIndices(functionalChaosResult_.getIndices()); const UnsignedInteger size = coefficients.getSize(); Scalar covarianceVariables = 0.0; const EnumerateFunction enumerateFunction(functionalChaosResult_.getOrthogonalBasis().getEnumerateFunction()); // Sum the contributions to all the coefficients associated to a basis vector involving at least the variable i Scalar totalVariance = 0.0; for (UnsignedInteger i = 1; i < size; ++i) { if (coefficientIndices[i] > 0) { const Scalar coefficientI = coefficients[i][0]; if (coefficientI != 0.0) { const Indices multiIndices(enumerateFunction(coefficientIndices[i])); // Take into account only nonzero multi indices if (*std::max_element(multiIndices.begin(), multiIndices.end()) > 0) { totalVariance += coefficientI * coefficientI; Bool isProperSubset = true; // Check that the exponents associated to the selected variables are > 0 for (UnsignedInteger j = 0; j < orderSobolIndice; ++j) { const UnsignedInteger varJ = variableIndices[j]; isProperSubset = isProperSubset && (multiIndices[varJ] > 0); } if (isProperSubset) covarianceVariables += coefficientI * coefficientI; } // *std::max_element(multiIndices.begin(), multiIndices.end()) > 0 } // if coefficientI <> 0 } // coefficientIndices[i] > 0 } // Loop over the coefficients if (totalVariance > 0.0) return covarianceVariables / totalVariance; else return 0.0; } /* Sobol total index accessor */ Scalar FunctionalChaosRandomVector::getSobolTotalIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex) const { Indices index(1); index[0] = variableIndex; return getSobolTotalIndex(index, marginalIndex); } /* Sobol grouped index accessor */ Scalar FunctionalChaosRandomVector::getSobolGroupedIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex) const { const UnsignedInteger inputDimension = getAntecedent()->getDimension(); if (!variableIndices.check(inputDimension)) throw InvalidArgumentException(HERE) << "The variable indices of a Sobol indice must be in the range [0, dim-1] and must be different."; if (marginalIndex >= getDimension()) throw InvalidArgumentException(HERE) << "The marginal index must be in the range [0, dim-1]."; // Check if the measure defining the basis has an independent copula else // the conditional covariance cannot be extracted from the decomposition if (!functionalChaosResult_.getOrthogonalBasis().getMeasure().hasIndependentCopula()) throw InternalException(HERE) << "Error: cannot compute Sobol indices from a non-tensorized basis."; if (!functionalChaosResult_.getDistribution().hasIndependentCopula()) LOGWARN(OSS(false) << "The Sobol indices are computed wrt the basis measure, and there is no one-to-one transformation between this measure and the input distribution. The interpretation of the indices may be misleading."); const UnsignedInteger orderSobolIndice = variableIndices.getSize(); const Sample coefficients(functionalChaosResult_.getCoefficients().getMarginal(marginalIndex)); const Indices coefficientIndices(functionalChaosResult_.getIndices()); const UnsignedInteger size = coefficients.getSize(); Scalar covarianceVariables = 0.0; const EnumerateFunction enumerateFunction(functionalChaosResult_.getOrthogonalBasis().getEnumerateFunction()); // Sum the contributions of all the coefficients associated to a basis vector involving only the needed variables Scalar totalVariance = 0.0; for (UnsignedInteger i = 0; i < size; ++i) { if (coefficientIndices[i] > 0) { const Scalar coefficientI = coefficients[i][0]; if (coefficientI != 0.0) { Indices multiIndices(enumerateFunction(coefficientIndices[i])); // Take into account only nonzero multi indices if (*std::max_element(multiIndices.begin(), multiIndices.end()) > 0) { totalVariance += coefficientI * coefficientI; // Set the exponents corresponding to the group to zero for (UnsignedInteger j = 0; j < orderSobolIndice; ++j) multiIndices[variableIndices[j]] = 0; // Now check that all the indices are zero if (*std::max_element(multiIndices.begin(), multiIndices.end()) == 0) covarianceVariables += coefficientI * coefficientI; } // *std::max_element(multiIndices.begin(), multiIndices.end()) > 0 } // if coefficientI <> 0 } // coefficientIndices[i] > 0 } // Loop over the coefficients if (totalVariance > 0.0) return covarianceVariables / totalVariance; else return 0.0; } /* Sobol index accessor */ Scalar FunctionalChaosRandomVector::getSobolGroupedIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex) const { Indices index(1); index[0] = variableIndex; return getSobolGroupedIndex(index, marginalIndex); } /* Functional chaos result accessor */ FunctionalChaosResult FunctionalChaosRandomVector::getFunctionalChaosResult() const { return functionalChaosResult_; } /* Method save() stores the object through the StorageManager */ void FunctionalChaosRandomVector::save(Advocate & adv) const { CompositeRandomVector::save(adv); adv.saveAttribute( "functionalChaosResult_", functionalChaosResult_ ); adv.saveAttribute( "covariance_", covariance_ ); adv.saveAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); } /* Method load() reloads the object from the StorageManager */ void FunctionalChaosRandomVector::load(Advocate & adv) { CompositeRandomVector::load(adv); adv.loadAttribute( "functionalChaosResult_", functionalChaosResult_ ); adv.loadAttribute( "covariance_", covariance_ ); adv.loadAttribute( "isAlreadyComputedCovariance_", isAlreadyComputedCovariance_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/KrigingRandomVector.cxx000066400000000000000000000055171307543307100247770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for kriging random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/KrigingRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(KrigingRandomVector); static const Factory Factory_KrigingRandomVector; /* Default constructor */ KrigingRandomVector::KrigingRandomVector(const KrigingResult & krigingResult, const Point & point) : UsualRandomVector(krigingResult(point)) , krigingResult_(krigingResult) , sample_(Sample(1, point)) { // Nothing to do } /* Default constructor */ KrigingRandomVector::KrigingRandomVector(const KrigingResult & krigingResult, const Sample & sample) : UsualRandomVector(krigingResult(sample)) , krigingResult_(krigingResult) , sample_(sample) { // Nothing to do } /* Virtual constructor */ KrigingRandomVector * KrigingRandomVector::clone() const { return new KrigingRandomVector(*this); } /* String converter */ String KrigingRandomVector::__repr__() const { OSS oss; oss << "class=" << KrigingRandomVector::GetClassName() << " kriging result=" << krigingResult_; return oss; } /** Get a realization of the process */ Point KrigingRandomVector::getRealization() const { return getDistribution().getRealization(); } /** Get a sample of realizations of the process */ Sample KrigingRandomVector::getSample(const UnsignedInteger size) const { return getDistribution().getSample(size); } /* Kriging result accessor */ KrigingResult KrigingRandomVector::getKrigingResult() const { return krigingResult_; } /* Method save() stores the object through the StorageManager */ void KrigingRandomVector::save(Advocate & adv) const { UsualRandomVector::save(adv); adv.saveAttribute( "krigingResult_", krigingResult_ ); adv.saveAttribute( "sample_", sample_ ); } /* Method load() reloads the object from the StorageManager */ void KrigingRandomVector::load(Advocate & adv) { UsualRandomVector::load(adv); adv.loadAttribute( "krigingResult_", krigingResult_ ); adv.loadAttribute( "sample_", sample_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/Process.cxx000066400000000000000000000114621307543307100224730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements all random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Process.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(Process); /* Default constructor */ Process::Process() : TypedInterfaceObject(new ProcessImplementation()) { // Nothing to do } /* Parameters constructor */ Process::Process(const ProcessImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ Process::Process(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ Process::Process(ProcessImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* String converter */ String Process::__repr__() const { OSS oss; oss << "class=" << GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String Process::__str__(const String & offset) const { return getImplementation()->__str__(offset); } /* Description Accessor */ void Process::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } /* Description Accessor */ Description Process::getDescription() const { return getImplementation()->getDescription(); } /* Is the underlying a gaussian process ? */ Bool Process::isNormal() const { return getImplementation()->isNormal(); } /* Is the underlying a stationary process ? */ Bool Process::isStationary() const { return getImplementation()->isStationary(); } /* Is the underlying a composite process ? */ Bool Process::isComposite() const { return getImplementation()->isComposite(); } /* Covariance model accessor */ CovarianceModel Process::getCovarianceModel() const { return getImplementation()->getCovarianceModel(); } /* Trend accessor */ TrendTransform Process::getTrend() const { return getImplementation()->getTrend(); } /* Here is the interface that all derived class may implement */ /* Dimension accessor */ UnsignedInteger Process::getSpatialDimension() const { return getImplementation()->getSpatialDimension(); } UnsignedInteger Process::getDimension() const { return getImplementation()->getDimension(); } /* Discrete realization accessor */ Field Process::getRealization() const { return getImplementation()->getRealization(); } /* Continuous realization accessor */ Function Process::getContinuousRealization() const { return getImplementation()->getContinuousRealization(); } /* TimeGrid accessor - get */ RegularGrid Process::getTimeGrid() const { return getImplementation()->getTimeGrid(); } /* TimeGrid accessor - set */ void Process::setTimeGrid(const RegularGrid & timeGrid) { copyOnWrite(); return getImplementation()->setTimeGrid(timeGrid); } /* Mesh accessor - get */ Mesh Process::getMesh() const { return getImplementation()->getMesh(); } /* Mesh accessor - set */ void Process::setMesh(const Mesh & mesh) { copyOnWrite(); return getImplementation()->setMesh(mesh); } ProcessSample Process::getSample(const UnsignedInteger size) const { return getImplementation()->getSample(size); } TimeSeries Process::getFuture(const UnsignedInteger stepNumber) const { return getImplementation()->getFuture(stepNumber); } ProcessSample Process::getFuture(const UnsignedInteger stepNumber, const UnsignedInteger size) const { return getImplementation()->getFuture(stepNumber, size); } /* Get the process corresponding to the i-th marginal component */ Process Process::getMarginal(const UnsignedInteger i) const { return *(getImplementation()->getMarginal(i)); } /* Get the marginal random vector corresponding to indices components */ Process Process::getMarginal(const Indices & indices) const { return *(getImplementation()->getMarginal(indices)); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/ProcessImplementation.cxx000066400000000000000000000160171307543307100254020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ProcessImplementation.hxx" #include "openturns/Exception.hxx" #include "openturns/Function.hxx" #include "openturns/PiecewiseLinearEvaluation.hxx" #include "openturns/P1LagrangeEvaluation.hxx" #include "openturns/RegularGrid.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ProcessImplementation); static const Factory Factory_ProcessImplementation; /* Default constructor */ ProcessImplementation::ProcessImplementation() : PersistentObject() , description_() , dimension_(1) , mesh_(RegularGrid(0.0, 1.0, 1)) { // Nothing to do } /* Virtual constructor */ ProcessImplementation * ProcessImplementation::clone() const { return new ProcessImplementation(*this); } /* String converter */ String ProcessImplementation::__repr__() const { OSS oss(true); oss << "class=" << ProcessImplementation::GetClassName() << " dimension_=" << dimension_ << " description=" << description_ << " mesh=" << mesh_; return oss; } /* String converter */ String ProcessImplementation::__str__(const String & offset) const { OSS oss(false); oss << "class=" << ProcessImplementation::GetClassName() << " dimension=" << dimension_ << " description=" << description_.__str__(offset) << " mesh=" << mesh_.__str__(offset); return oss; } /* Dimension accessor */ UnsignedInteger ProcessImplementation::getSpatialDimension() const { return mesh_.getDimension(); } UnsignedInteger ProcessImplementation::getDimension() const { return dimension_; } void ProcessImplementation::setDimension(const UnsignedInteger dimension) { dimension_ = dimension; } /* Description accessor */ void ProcessImplementation::setDescription(const Description & description) { description_ = description; } Description ProcessImplementation::getDescription() const { return description_; } /* TimeGrid accessor */ RegularGrid ProcessImplementation::getTimeGrid() const { return getMesh(); } void ProcessImplementation::setTimeGrid(const RegularGrid & timeGrid) { setMesh(timeGrid); } /* Mesh accessor */ Mesh ProcessImplementation::getMesh() const { return mesh_; } void ProcessImplementation::setMesh(const Mesh & mesh) { mesh_ = mesh; } /* Here is the interface that all derived class must implement */ /* Is the underlying a gaussian process ? */ Bool ProcessImplementation::isNormal() const { return false; } /* Is the underlying a stationary process ? */ Bool ProcessImplementation::isStationary() const { return false; } /* Is the underlying a composite process ? */ Bool ProcessImplementation::isComposite() const { return false; } /* Covariance model accessor */ CovarianceModel ProcessImplementation::getCovarianceModel() const { throw NotYetImplementedException(HERE) << "In ProcessImplementation::getCovarianceModel()"; } /* Trend accessor */ TrendTransform ProcessImplementation::getTrend() const { throw NotYetImplementedException(HERE) << "In ProcessImplementation::getTrend()"; } /* Discrete realization accessor */ Field ProcessImplementation::getRealization() const { throw NotYetImplementedException(HERE) << "In ProcessImplementation::getRealization() const"; } /* Continuous realization accessor */ Function ProcessImplementation::getContinuousRealization() const { // The continuous realization is obtained by a piecewise linear interpolation const Field field(getRealization()); const Sample values(field.getValues()); if (getSpatialDimension() == 1) { const Point locations(mesh_.getVertices().getImplementation()->getData()); return PiecewiseLinearEvaluation(locations, values); } return P1LagrangeEvaluation(field); } ProcessSample ProcessImplementation::getSample(const UnsignedInteger size) const { ProcessSample result(size, getRealization()); for (UnsignedInteger i = 1; i < size; ++i) result[i] = getRealization().getValues(); return result; } /* Future accessor */ TimeSeries ProcessImplementation::getFuture(const UnsignedInteger stepNumber) const { throw NotYetImplementedException(HERE) << "In ProcessImplementation::getFuture(const UnsignedInteger stepNumber) const"; } ProcessSample ProcessImplementation::getFuture(const UnsignedInteger stepNumber, const UnsignedInteger size) const { if (getSpatialDimension() != 1) throw NotDefinedException(HERE) << "Error: can extend the realization of a process only if defined on a 1D mesh."; if (size == 0) return ProcessSample(mesh_, 0, dimension_); ProcessSample result(size, getFuture(stepNumber)); for (UnsignedInteger i = 1; i < size; ++i) result[i] = getFuture(stepNumber).getValues(); return result; } /* Get the random vector corresponding to the i-th marginal component */ ProcessImplementation::Implementation ProcessImplementation::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "Error: the index must be less than the output dimension"; if (getDimension() == 1) return clone(); throw NotYetImplementedException(HERE) << "In ProcessImplementation::getMarginal(const UnsignedInteger i) const"; } /* Get the marginal random vector corresponding to indices components */ ProcessImplementation::Implementation ProcessImplementation::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal process must be in the range [0, dim-1] and must be different"; if (dimension == 1) return clone(); throw NotYetImplementedException(HERE) << "In ProcessImplementation::getMarginal(const Indices & indices) const"; } /* Method save() stores the object through the StorageManager */ void ProcessImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "dimension_", dimension_ ); adv.saveAttribute( "description_", description_ ); adv.saveAttribute( "mesh_", mesh_ ); } /* Method load() reloads the object from the StorageManager */ void ProcessImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "dimension_", dimension_ ); adv.loadAttribute( "description_", description_ ); adv.loadAttribute( "mesh_", mesh_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/RandomVector.cxx000066400000000000000000000234461307543307100234650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements all random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomVector.hxx" #include "openturns/ConstantRandomVector.hxx" #include "openturns/UsualRandomVector.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/EventRandomVector.hxx" #include "openturns/EventDomain.hxx" #include "openturns/EventProcess.hxx" #include "openturns/FunctionalChaosRandomVector.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/Domain.hxx" #include "openturns/ConditionalRandomVector.hxx" #include "openturns/Less.hxx" #include "openturns/Greater.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/ComposedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RandomVector); /* Default constructor */ RandomVector:: RandomVector() : TypedInterfaceObject(new RandomVectorImplementation()) { // Nothing to do } /* Parameters constructor */ RandomVector::RandomVector(const RandomVectorImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ RandomVector::RandomVector(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ RandomVector::RandomVector(RandomVectorImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor for constant vector */ RandomVector::RandomVector(const Point & point) : TypedInterfaceObject(new ConstantRandomVector(point)) { // Nothing to do } /* Constructor for distribution-based vector */ RandomVector::RandomVector(const Distribution & distribution) : TypedInterfaceObject(new UsualRandomVector(distribution)) { // Nothing to do } /* Constructor for distribution-based conditional vector */ RandomVector::RandomVector(const Distribution & distribution, const RandomVector & randomParameters) : TypedInterfaceObject(new ConditionalRandomVector(distribution, randomParameters)) { // Nothing to do } /* Constructor for composite vector */ RandomVector::RandomVector(const Function & function, const RandomVector & antecedent) : TypedInterfaceObject(new CompositeRandomVector(function, antecedent.getImplementation())) { // Nothing to do } /* Constructor for functional chaos vector */ RandomVector::RandomVector(const FunctionalChaosResult & functionalChaosResult) : TypedInterfaceObject(new FunctionalChaosRandomVector(functionalChaosResult)) { // Nothing to do } /* Constructor from event RandomVector */ RandomVector::RandomVector(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold) : TypedInterfaceObject(new EventRandomVector(*antecedent.getImplementation(), op, threshold)) { // Nothing to do } /* Constructor from domain event */ RandomVector::RandomVector(const RandomVector & antecedent, const Domain & domain) : TypedInterfaceObject(new EventDomain(*antecedent.getImplementation(), domain)) { // Nothing to do } RandomVector::RandomVector(const RandomVector & antecedent, const Interval & interval) : TypedInterfaceObject(new EventDomain(*antecedent.getImplementation(), interval)) { #ifdef OPENTURNS_HAVE_MUPARSER UnsignedInteger dimension = interval.getDimension(); UnsignedInteger inputDimension = antecedent.getFunction().getInputDimension(); Interval::BoolCollection finiteLowerBound(interval.getFiniteLowerBound()); Interval::BoolCollection finiteUpperBound(interval.getFiniteUpperBound()); Point lowerBound(interval.getLowerBound()); Point upperBound(interval.getUpperBound()); SymbolicFunction testFunction(Description::BuildDefault(inputDimension, "x"), Description(1, "0.0")); // easy case: 1d interval if (interval.getDimension() == 1) { if (finiteLowerBound[0] && !finiteUpperBound[0]) { *this = RandomVector(antecedent, Greater(), lowerBound[0]); } if (!finiteLowerBound[0] && finiteUpperBound[0]) { *this = RandomVector(antecedent, Less(), upperBound[0]); } if (finiteLowerBound[0] && finiteUpperBound[0]) { testFunction = SymbolicFunction("x", OSS() << "min(x-(" << lowerBound[0] << "), (" << upperBound[0] << ") - x)"); RandomVector newVector(ComposedFunction(testFunction, antecedent.getFunction()), antecedent.getAntecedent()); *this = RandomVector(newVector, Greater(), 0.0); } if (!finiteLowerBound[0] && !finiteUpperBound[0]) { RandomVector newVector(Function(testFunction), antecedent.getAntecedent()); *this = RandomVector(newVector, Less(), 1.0); } } // general case else { Description inVars(Description::BuildDefault(dimension, "y")); Description slacks(0); for (UnsignedInteger i = 0; i < dimension; ++ i) { if (finiteLowerBound[i]) slacks.add(OSS() << inVars[i] << "-(" << lowerBound[i] << ")"); if (finiteUpperBound[i]) slacks.add(OSS() << "(" << upperBound[i] << ")-" << inVars[i]); } // No constraint if (slacks.getSize() == 0) { RandomVector newVector(Function(testFunction), antecedent.getAntecedent()); *this = RandomVector(newVector, Less(), 1.0); } else { String formula; if (slacks.getSize() == 1) { formula = slacks[0]; } else { formula = "min(" + slacks[0]; for (UnsignedInteger i = 1; i < slacks.getSize(); ++ i) formula += "," + slacks[i]; formula += ")"; } testFunction = SymbolicFunction(inVars, Description(1, formula)); RandomVector newVector(ComposedFunction(testFunction, antecedent.getFunction()), antecedent.getAntecedent()); *this = RandomVector(newVector, Greater(), 0.0); } } #endif } /* Constructor from domain event */ RandomVector::RandomVector(const Process & process, const Domain & domain) : TypedInterfaceObject(new EventProcess(process, domain)) { // Nothing to do } /* String converter */ String RandomVector::__repr__() const { OSS oss; oss << "class=" << RandomVector::GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String RandomVector::__str__(const String & offset) const { return __repr__(); } /* Description Accessor */ void RandomVector::setDescription(const Description & description) { copyOnWrite(); getImplementation()->setDescription(description); } /* Description Accessor */ Description RandomVector::getDescription() const { return getImplementation()->getDescription(); } /* Is the underlying random vector composite ? */ Bool RandomVector::isComposite() const { return getImplementation()->isComposite(); } /* Here is the interface that all derived class may implement */ /* Dimension accessor */ UnsignedInteger RandomVector::getDimension() const { return getImplementation()->getDimension(); } /* Realization accessor */ Point RandomVector::getRealization() const { return getImplementation()->getRealization(); } /* Numerical sample accessor */ Sample RandomVector::getSample(UnsignedInteger size) const { return getImplementation()->getSample(size); } /* Mean accessor */ Point RandomVector::getMean() const { return getImplementation()->getMean(); } /* Covariance accessor */ CovarianceMatrix RandomVector::getCovariance() const { return getImplementation()->getCovariance(); } /* Get the random vector corresponding to the i-th marginal component */ RandomVector RandomVector::getMarginal(const UnsignedInteger i) const { return *(getImplementation()->getMarginal(i)); } /* Get the random vector corresponding to the i-th marginal component */ RandomVector RandomVector::getMarginal(const Indices & indices) const { return *(getImplementation()->getMarginal(indices)); } /* This method allows to access the antecedent RandomVector in case of a composite RandomVector */ RandomVector::Antecedent RandomVector::getAntecedent() const { return getImplementation()->getAntecedent(); } /* This method allows to access the Function in case of a composite RandomVector */ Function RandomVector::getFunction() const { return getImplementation()->getFunction(); } /* This method allows to access the Distribution in case of a usual RandomVector */ Distribution RandomVector::getDistribution() const { return getImplementation()->getDistribution(); } /* Operator accessor */ ComparisonOperator RandomVector::getOperator() const { return getImplementation()->getOperator(); } /* Threshold accessor */ Scalar RandomVector::getThreshold() const { return getImplementation()->getThreshold(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/RandomVectorImplementation.cxx000066400000000000000000000136161307543307100263710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RandomVectorImplementation); static const Factory Factory_RandomVectorImplementation; /* Default constructor */ RandomVectorImplementation::RandomVectorImplementation() : PersistentObject() , description_() { // Nothing to do } /* Virtual constructor */ RandomVectorImplementation * RandomVectorImplementation::clone() const { return new RandomVectorImplementation(*this); } /* String converter */ String RandomVectorImplementation::__repr__() const { OSS oss; oss << "class=" << RandomVectorImplementation::GetClassName(); return oss; } /* Description accessor */ void RandomVectorImplementation::setDescription(const Description & description) { if (description.getSize() != getDimension()) throw InvalidDimensionException(HERE) << "Description's size must be equal to dimension." << " Here, description's size=" << description.getSize() << " and dimension=" << getDimension(); description_ = description; } Description RandomVectorImplementation::getDescription() const { return description_; } /* Here is the interface that all derived class must implement */ /* Is the underlying random vector composite ? */ Bool RandomVectorImplementation::isComposite() const { return false; } /* Dimension accessor */ UnsignedInteger RandomVectorImplementation::getDimension() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getDimension() const"; } /* Realization accessor */ Point RandomVectorImplementation::getRealization() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getRealization() const"; } /* Numerical sample accessor */ Sample RandomVectorImplementation::getSample(const UnsignedInteger size) const { Sample result(size, getDimension()); for (UnsignedInteger i = 0; i < size; ++i) result[i] = getRealization(); result.setDescription(getDescription()); return result; } /* Mean accessor */ Point RandomVectorImplementation::getMean() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getMean() const"; } /* Covariance accessor */ CovarianceMatrix RandomVectorImplementation::getCovariance() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getCovariance() const"; } /* Get the random vector corresponding to the i-th marginal component */ RandomVectorImplementation::Implementation RandomVectorImplementation::getMarginal(const UnsignedInteger i) const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getMarginal(const UnsignedInteger i) const"; } /* Get the marginal random vector corresponding to indices components */ RandomVectorImplementation::Implementation RandomVectorImplementation::getMarginal(const Indices & indices) const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getMarginal(const Indices & indices) const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ RandomVectorImplementation::Antecedent RandomVectorImplementation::getAntecedent() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getAntecedent() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ Function RandomVectorImplementation::getFunction() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getFunction() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ Distribution RandomVectorImplementation::getDistribution() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getDistribution() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ ComparisonOperator RandomVectorImplementation::getOperator() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getOperator() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ Process RandomVectorImplementation::getProcess() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getProcess() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ Domain RandomVectorImplementation::getDomain() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getDomain() const"; } /* Fake method due to pbs with dynamic_cast and Pointer */ Scalar RandomVectorImplementation::getThreshold() const { throw NotYetImplementedException(HERE) << "In RandomVectorImplementation::getThreshold() const"; } /* Method save() stores the object through the StorageManager */ void RandomVectorImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "description_", description_ ); } /* Method load() reloads the object from the StorageManager */ void RandomVectorImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "description_", description_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/SklarCopula.cxx000066400000000000000000000444071307543307100233020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The SklarCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SklarCopula.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/MarginalTransformationEvaluation.hxx" #include "openturns/MarginalTransformationGradient.hxx" #include "openturns/MarginalTransformationHessian.hxx" #include "openturns/RosenblattEvaluation.hxx" #include "openturns/InverseRosenblattEvaluation.hxx" #include "openturns/FunctionImplementation.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/Uniform.hxx" #include "openturns/IndependentCopula.hxx" #include "openturns/ComposedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS typedef FunctionImplementation::EvaluationPointer EvaluationPointer; typedef FunctionImplementation::GradientPointer GradientPointer; typedef FunctionImplementation::HessianPointer HessianPointer; CLASSNAMEINIT(SklarCopula); static const Factory Factory_SklarCopula; /* Default constructor */ SklarCopula::SklarCopula() : CopulaImplementation() , distribution_() , marginalCollection_() { setName( "SklarCopula" ); setDimension( 1 ); computeRange(); } /* Parameters constructor */ SklarCopula::SklarCopula(const Distribution & distribution) : CopulaImplementation() , distribution_(distribution) , marginalCollection_(distribution.getDimension()) { setName( "SklarCopula" ); // We set the dimension of the SklarCopula distribution const UnsignedInteger dimension = distribution.getDimension(); setDimension( dimension ); // Extract all the 1D marginal distributions for (UnsignedInteger i = 0; i < dimension; ++i) marginalCollection_[i] = distribution.getMarginal(i); computeRange(); } /* Comparison operator */ Bool SklarCopula::operator ==(const SklarCopula & other) const { if (this == &other) return true; return distribution_ == other.distribution_; } Bool SklarCopula::equals(const DistributionImplementation & other) const { const SklarCopula* p_other = dynamic_cast(&other); return p_other && (*this == *p_other); } /* String converter */ String SklarCopula::__repr__() const { OSS oss; oss << "class=" << SklarCopula::GetClassName() << " name=" << getName() << " dimension=" << getDimension() << " distribution=" << distribution_; return oss; } /* Virtual constructor */ SklarCopula * SklarCopula::clone() const { return new SklarCopula(*this); } /* Get one realization of the distribution F(x_1,\dots,x_n) = C(F_1(x_1),\dots,F_n(x_n)) so a realization of C is a realization of F marginaly composed with F_i */ Point SklarCopula::getRealization() const { const UnsignedInteger dimension = getDimension(); // Special case for independent copula, for improved performance if (hasIndependentCopula()) return RandomGenerator::Generate(dimension); Point realization(distribution_.getRealization()); for (UnsignedInteger i = 0; i < dimension; ++i) realization[i] = marginalCollection_[i].computeCDF(realization[i]); return realization; } /* Get the DDF of the distribution F(x_1,\dots,x_n) = C(u_1,\dots,u_n) where u_i = F_i(x_i) so p(x_1,\dots,x_n) = c(u_1,\dots,u_n)\prod_{i=1}^n p_i(x_i) and dp/dx_k(x_1,\dots,x_n) = [dc/du_k(u_1,\dots,u_n)p_k(x_k) + p'_k(x_k)/p_k(x_k)c(u_1,\dots,u_n)]\prod_{i=1}^n p_i(x_i) but c(u_1,\dots,u_n) = p(x_1,\dots,u_n)/\prod_{i=1}^n p_i(x_i) so dp/dx_k(x_1,\dots,x_n) = dc/du_k(u_1,\dots,u_n)p_k(x_k)\prod_{i=1}^n p_i(x_i) + p'_k(x_k)/p_k(x_k)p(x_1,\dots,x_n) */ Point SklarCopula::computeDDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); // Early exit for the 1D case (Uniform(0,1) distribution) if (dimension == 1) return Point(1, 0.0); Point x(point); Point pdfX(dimension); Point ddfX(dimension); Scalar factor = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar ui = point[i]; if ((ui <= 0.0) || ui >= 1.0) return Point(dimension, 0.0); const Point xi(marginalCollection_[i].computeQuantile(ui)); x[i] = xi[0]; pdfX[i] = marginalCollection_[i].computePDF(xi); ddfX[i] = marginalCollection_[i].computeDDF(xi)[0]; factor *= pdfX[i]; if (factor == 0.0) return Point(dimension, 0.0); } const Scalar pdfDistribution = distribution_.computePDF(x); Point result(distribution_.computeDDF(x)); for (UnsignedInteger i = 0; i < dimension; ++i) result[i] -= ddfX[i] * pdfDistribution / pdfX[i]; return result * (1.0 / factor); } /* Get the PDF of the distribution F(x_1,\dots,x_n) = C(F_1(x_1),\dots,F_n(x_n)) so p(x_1,\dots,x_n) = c(F_1(x_1),\dots,F_n(x_n))\prod_{i=1}^n p_i(x_i) */ Scalar SklarCopula::computePDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); // Early exit for the independent case if (distribution_.hasIndependentCopula()) return IndependentCopula(dimension).computePDF(point); for (UnsignedInteger i = 0; i < dimension; ++i) { const Scalar ui = point[i]; if ((ui <= 0.0) || ui > 1.0) return 0.0; } Point x(dimension); Scalar factor = 1.0; for (UnsignedInteger i = 0; i < dimension; ++i) { const Point xi(marginalCollection_[i].computeQuantile(point[i])); x[i] = xi[0]; factor *= marginalCollection_[i].computePDF(xi); if (std::abs(factor) < pdfEpsilon_) return 0.0; } return distribution_.computePDF(x) / factor; } /* Get the CDF of the distribution F(x_1,\dots,x_n) = C(F_1(x_1),\dots,F_n(x_n)) */ Scalar SklarCopula::computeCDF(const Point & point) const { const UnsignedInteger dimension = getDimension(); // Early exit for the independent case if (distribution_.hasIndependentCopula()) return IndependentCopula(dimension).computeCDF(point); Point u(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { u[i] = std::min(point[i], 1.0); if (u[i] <= 0.0) return 0.0; } Point x(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) x[i] = marginalCollection_[i].computeQuantile(u[i])[0]; return distribution_.computeCDF(x); } /* Compute the probability content of an interval */ Scalar SklarCopula::computeProbability(const Interval & interval) const { const UnsignedInteger dimension = getDimension(); if (interval.getDimension() != dimension) throw InvalidArgumentException(HERE) << "Error: the given interval has a dimension not compatible with the distribution dimension"; // Early exit for the independent case if (distribution_.hasIndependentCopula()) return IndependentCopula(dimension).computeProbability(interval); // Reduce the given interval to the support of the distribution, which is the nD unit cube const Interval intersect(interval.intersect(Interval(dimension))); // If the intersection is empty if (intersect.isNumericallyEmpty()) return 0.0; const Point lowerBoundIntersect(intersect.getLowerBound()); const Point upperBoundIntersect(intersect.getUpperBound()); // Early exit for the 1D case (Uniform(0,1) distribution) if (dimension == 1) return upperBoundIntersect[0] - lowerBoundIntersect[0]; Point lowerBound(dimension); Point upperBound(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { lowerBound[i] = marginalCollection_[i].computeQuantile(lowerBoundIntersect[i])[0]; upperBound[i] = marginalCollection_[i].computeQuantile(upperBoundIntersect[i])[0]; } return distribution_.computeProbability(Interval(lowerBound, upperBound)); } /* Get the survival function of the distribution */ Scalar SklarCopula::computeSurvivalFunction(const Point & point) const { const UnsignedInteger dimension = getDimension(); // Early exit for the independent case if (distribution_.hasIndependentCopula()) return IndependentCopula(dimension).computeSurvivalFunction(point); Point u(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { u[i] = std::max(point[i], 0.0); if (u[i] >= 1.0) return 0.0; } Point x(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) x[i] = marginalCollection_[i].computeQuantile(u[i])[0]; return distribution_.computeSurvivalFunction(x); } /* Get the PDFGradient of the distribution */ Point SklarCopula::computePDFGradient(const Point & point) const { throw NotYetImplementedException(HERE) << "In SklarCopula::computePDFGradient(const Point & point) const"; } /* Get the CDFGradient of the distribution */ Point SklarCopula::computeCDFGradient(const Point & point) const { throw NotYetImplementedException(HERE) << "In SklarCopula::computeCDFGradient(const Point & point) const"; } /* Get the quantile of the distribution F(x_1,\dots,x_n) = C(F_1(x_1),\dots,F_n(x_n)) */ Point SklarCopula::computeQuantile(const Scalar prob, const Bool tail) const { const UnsignedInteger dimension = getDimension(); const Scalar epsilon = cdfEpsilon_; if (prob < -epsilon || prob > 1.0 + epsilon) throw InvalidArgumentException(HERE) << "Error: cannot compute a quantile for a probability level outside of [0, 1]"; if (dimension == 1) return Point(1, (tail ? 1.0 - prob : prob)); Point uq(distribution_.computeQuantile(prob)); for (UnsignedInteger i = 0; i < dimension; ++i) uq[i] = tail ? marginalCollection_[i].computeComplementaryCDF(uq[i]) : marginalCollection_[i].computeCDF(uq[i]); return uq; } /* Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar SklarCopula::computeConditionalPDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional PDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return (x < 0.0 ? 0.0 : (x > 1.0 ? 0.0 : 1.0)); // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = marginalCollection_[i].computeQuantile(y[i])[0]; const Scalar ux = marginalCollection_[conditioningDimension].computeQuantile(x)[0]; const Scalar pdf = marginalCollection_[conditioningDimension].computePDF(ux); if (pdf == 0.0) return 0.0; return distribution_.computeConditionalPDF(ux, u) / pdf; } /* Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar SklarCopula::computeConditionalCDF(const Scalar x, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return std::min(1.0, std::max(0.0, x)); // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = marginalCollection_[i].computeQuantile(y[i])[0]; return distribution_.computeConditionalCDF(marginalCollection_[conditioningDimension].computeQuantile(x)[0], u); } /* Compute the quantile of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar SklarCopula::computeConditionalQuantile(const Scalar q, const Point & y) const { const UnsignedInteger conditioningDimension = y.getDimension(); if (conditioningDimension >= getDimension()) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional CDF with a conditioning point of dimension greater or equal to the distribution dimension."; if ((q < 0.0) || (q > 1.0)) throw InvalidArgumentException(HERE) << "Error: cannot compute a conditional quantile for a probability level outside of [0, 1]"; // Special case for no conditioning or independent copula if ((conditioningDimension == 0) || (hasIndependentCopula())) return q; // General case Point u(conditioningDimension); for (UnsignedInteger i = 0; i < conditioningDimension; ++i) u[i] = marginalCollection_[i].computeQuantile(y[i])[0]; return marginalCollection_[conditioningDimension].computeCDF(distribution_.computeConditionalQuantile(q, u)); } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ SklarCopula::Implementation SklarCopula::getMarginal(const Indices & indices) const { // This call will check that indices are correct return new SklarCopula(distribution_.getMarginal(indices)); } /* Get the isoprobabilist transformation */ SklarCopula::IsoProbabilisticTransformation SklarCopula::getIsoProbabilisticTransformation() const { // Special case for distributions with elliptical copula if (distribution_.getImplementation()->hasEllipticalCopula()) { // Get the IsoProbabilisticTransformation from the copula const IsoProbabilisticTransformation isoprobabilistic(distribution_.getIsoProbabilisticTransformation()); // Get the right function implementations const MarginalTransformationEvaluation rightEvaluation(marginalCollection_, MarginalTransformationEvaluation::TO); const EvaluationPointer p_rightFunction(rightEvaluation.clone()); // Get the right gradient implementations const GradientPointer p_rightGradient = new MarginalTransformationGradient(rightEvaluation); // Get the right hessian implementations const HessianPointer p_rightHessian = new MarginalTransformationHessian(rightEvaluation); const IsoProbabilisticTransformation right(p_rightFunction, p_rightGradient, p_rightHessian); const ComposedFunction transformation(isoprobabilistic, right); return transformation; } // Else simply use the Rosenblatt transformation else return FunctionImplementation(new RosenblattEvaluation(*this)); } /* Get the inverse isoprobabilist transformation */ SklarCopula::InverseIsoProbabilisticTransformation SklarCopula::getInverseIsoProbabilisticTransformation() const { // Special case for the elliptical copula if (distribution_.getImplementation()->hasEllipticalCopula()) { // Get the inverse IsoProbabilisticTransformation from the distribution const InverseIsoProbabilisticTransformation inverseIsoprobabilistic(distribution_.getInverseIsoProbabilisticTransformation()); // Get the left and right function implementations const MarginalTransformationEvaluation leftEvaluation(marginalCollection_); const EvaluationPointer p_leftFunction(leftEvaluation.clone()); // Get the left and right gradient implementations const GradientPointer p_leftGradient = new MarginalTransformationGradient(leftEvaluation); // Get the left and right hessian implementations const HessianPointer p_leftHessian = new MarginalTransformationHessian(leftEvaluation); const InverseIsoProbabilisticTransformation left(p_leftFunction, p_leftGradient, p_leftHessian); const ComposedFunction transformation(left, inverseIsoprobabilistic); return transformation; } // Else simply use the inverse Rosenblatt transformation else return FunctionImplementation(new InverseRosenblattEvaluation(clone())); } /* Get the standard distribution */ SklarCopula::Implementation SklarCopula::getStandardDistribution() const { return distribution_.getStandardDistribution().getImplementation(); } /* Parameters value and description accessor */ SklarCopula::PointWithDescriptionCollection SklarCopula::getParametersCollection() const { PointWithDescriptionCollection parameters(0); const PointWithDescriptionCollection distributionParameters(distribution_.getParametersCollection()); const UnsignedInteger dimension = distribution_.getDimension(); // If the underlying distribution has dependence parameters if (distributionParameters.getSize() == dimension + 1) { parameters.add(distributionParameters[dimension]); } return parameters; } Point SklarCopula::getParameter() const { return distribution_.getParameter(); } void SklarCopula::setParameter(const Point & parameters) { Distribution newDistribution(distribution_); newDistribution.setParameter(parameters); const Scalar w = getWeight(); *this = SklarCopula(newDistribution); setWeight(w); } Description SklarCopula::getParameterDescription() const { return distribution_.getParameterDescription(); } /* Tell if the distribution has independent copula */ Bool SklarCopula::hasIndependentCopula() const { return distribution_.getImplementation()->hasIndependentCopula(); } /* Tell if the distribution has elliptical copula */ Bool SklarCopula::hasEllipticalCopula() const { return distribution_.getImplementation()->hasEllipticalCopula(); } /* Distribution accessor */ void SklarCopula::setDistribution(const Distribution & distribution) { distribution_ = distribution; } /* Distribution accessor */ Distribution SklarCopula::getDistribution() const { return distribution_; } /* Get the Kendall concordance of the copula */ CorrelationMatrix SklarCopula::getKendallTau() const { if (distribution_.isElliptical()) return distribution_.getKendallTau(); return CopulaImplementation::getKendallTau(); } /* Compute the covariance of the copula */ void SklarCopula::computeCovariance() const { DistributionImplementation::computeCovariance(); } /* Method save() stores the object through the StorageManager */ void SklarCopula::save(Advocate & adv) const { CopulaImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "marginalCollection_", marginalCollection_ ); } /* Method load() reloads the object from the StorageManager */ void SklarCopula::load(Advocate & adv) { CopulaImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "marginalCollection_", marginalCollection_ ); computeRange(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/StandardEvent.cxx000066400000000000000000000103551307543307100236170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event based on a composite random vector whose * antecedent has a spherical distribution * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/StandardEvent.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/Distribution.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/UsualRandomVector.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Pointer.hxx" #include "openturns/ComparisonOperatorImplementation.hxx" #include "openturns/CovarianceMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Distribution::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; CLASSNAMEINIT(StandardEvent); /* Default constructor */ StandardEvent::StandardEvent() : Event() { // Nothing to do } /* Constructor from a RandomVector */ StandardEvent::StandardEvent(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold) : Event(antecedent, op, threshold) { // StandardEvent can only be constructed from composite random vector whose antecedent has a spherical distribution. As we cannot check it, we just check that the distribution is elliptical if (!antecedent.getImplementation()->getAntecedent()->getDistribution().isElliptical()) throw InvalidArgumentException(HERE) << "Error: StandardEvent can only be constructed from composite random vectors whose antecedent is standard spherical, here the distribution is " << antecedent.getImplementation()->getAntecedent()->getDistribution().getImplementation()->__str__(); CovarianceMatrix covariance(antecedent.getImplementation()->getAntecedent()->getDistribution().getCovariance()); const UnsignedInteger dimension = antecedent.getImplementation()->getAntecedent()->getDistribution().getDimension(); for (UnsignedInteger i = 0; i < dimension; ++i) { if (covariance(i, i) != 1.0) throw InvalidArgumentException(HERE) << "Error: StandardEvent can only be constructed from composite random vectors whose antecedent is standard spherical, here the distribution is " << antecedent.getImplementation()->getAntecedent()->getDistribution().getImplementation()->__str__(); for (UnsignedInteger j = 0; j < i; ++j) if (covariance(i, j) != 0.0) throw InvalidArgumentException(HERE) << "Error: StandardEvent can only be constructed from composite random vectors whose antecedent is standard spherical, here the distribution is " << antecedent.getImplementation()->getAntecedent()->getDistribution().getImplementation()->__str__(); } } /* Constructor from an Event */ StandardEvent::StandardEvent(const Event & event) : Event(event) { // Get the isoprobabilistic inverse transformation from the antecedent distribution const Distribution distribution(event.getImplementation()->getAntecedent()->getDistribution()); const InverseIsoProbabilisticTransformation inverse(distribution.getInverseIsoProbabilisticTransformation()); // Get the function const Function function(event.getImplementation()->getFunction()); // Get the standard distribution from the antecedent distribution const Distribution standard(distribution.getStandardDistribution()); // Build the antecedent const RandomVector antecedent(standard); const ComposedFunction composed(function, inverse); const RandomVector vect(composed, antecedent); // Set the random vector implementation (*this) = StandardEvent(vect, event.getOperator(), event.getThreshold()); setName(event.getName()); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/UsualRandomVector.cxx000066400000000000000000000073271307543307100244770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for distribution-based random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/UsualRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(UsualRandomVector); static const Factory Factory_UsualRandomVector; /* Default constructor */ UsualRandomVector::UsualRandomVector(const Distribution & distribution) : RandomVectorImplementation() , distribution_(distribution) { // Get the description from the underlying distribution setDescription(distribution.getDescription()); } /* Virtual constructor */ UsualRandomVector * UsualRandomVector::clone() const { return new UsualRandomVector(*this); } /* String converter */ String UsualRandomVector::__repr__() const { OSS oss; oss << "class=" << UsualRandomVector::GetClassName() << " distribution=" << distribution_; return oss; } /* Here is the interface that all derived class must implement */ /* Dimension accessor */ UnsignedInteger UsualRandomVector::getDimension() const { return distribution_.getDimension(); } /* Realization accessor */ Point UsualRandomVector::getRealization() const { return distribution_.getRealization(); } /* Numerical sample accessor */ Sample UsualRandomVector::getSample(const UnsignedInteger size) const { Sample sample(distribution_.getSample(size)); sample.setDescription(getDescription()); return sample; } /* Mean accessor */ Point UsualRandomVector::getMean() const { return distribution_.getMean(); } /* Covariance accessor */ CovarianceMatrix UsualRandomVector::getCovariance() const { return distribution_.getCovariance(); } /* Get the random vector corresponding to the i-th marginal component */ UsualRandomVector::Implementation UsualRandomVector::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal random vector must be in the range [0, dim-1]"; return new UsualRandomVector(distribution_.getMarginal(i)); } /* Get the marginal random vector corresponding to indices components */ UsualRandomVector::Implementation UsualRandomVector::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal random vector must be in the range [0, dim-1] and must be different"; return new UsualRandomVector(distribution_.getMarginal(indices)); } /* Distribution accessor */ Distribution UsualRandomVector::getDistribution() const { return distribution_; } /* Method save() stores the object through the StorageManager */ void UsualRandomVector::save(Advocate & adv) const { RandomVectorImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); } /* Method load() reloads the object from the StorageManager */ void UsualRandomVector::load(Advocate & adv) { RandomVectorImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Model/openturns/000077500000000000000000000000001307543307100223625ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Model/openturns/ArchimedeanCopula.hxx000066400000000000000000000067011307543307100264630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for non elliptical distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARCHIMEDEANCOPULA_HXX #define OPENTURNS_ARCHIMEDEANCOPULA_HXX #include "openturns/OTprivate.hxx" #include "openturns/CopulaImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ArchimedeanCopula * * All traditionnal distribution inherits from this class. * Classes derived from ArchimedeanCopula are known by themselves, * without being reconstructed or built in any way. */ class OT_API ArchimedeanCopula : public CopulaImplementation { CLASSNAME; public: /** Default constructor */ ArchimedeanCopula(); /** Virtual constructor */ virtual ArchimedeanCopula * clone() const; /** Comparison operator */ Bool operator ==(const ArchimedeanCopula & other) const; /** String converter */ String __repr__() const; /** Get the PDF of the archimedean copula */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the archimedean copula */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; using CopulaImplementation::computeComplementaryCDF; Scalar computeComplementaryCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the archimedean generator of the archimedean copula, i.e. * the function phi such that the CDF of the copula can * be written as CDF(t) = phi^{-1}(phi(u)+phi(v)) */ virtual Scalar computeArchimedeanGenerator(const Scalar t) const; /** Compute the inverse of the archimedean generator */ virtual Scalar computeInverseArchimedeanGenerator(const Scalar t) const; /** Compute the derivative of the archimedean generator */ virtual Scalar computeArchimedeanGeneratorDerivative(const Scalar t) const; /** Compute the second derivative of the archimedean generator */ virtual Scalar computeArchimedeanGeneratorSecondDerivative(const Scalar t) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; protected: private: }; /* class ArchimedeanCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARCHIMEDEANCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/CompositeRandomVector.hxx000066400000000000000000000064421307543307100274070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for composite random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSITERANDOMVECTOR_HXX #define OPENTURNS_COMPOSITERANDOMVECTOR_HXX #include "openturns/RandomVectorImplementation.hxx" #include "openturns/RandomVector.hxx" #include "openturns/Pointer.hxx" #include "openturns/Function.hxx" #include "openturns/CovarianceMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CompositeRandomVector * * An implementation class for composite random vectors */ class OT_API CompositeRandomVector : public RandomVectorImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ CompositeRandomVector(); /** Standard constructor */ CompositeRandomVector(const Function & function, const Antecedent & p_antecedent); /** Standard constructor */ CompositeRandomVector(const Function & function, const RandomVector & antecedent); /** Virtual constructor */ virtual CompositeRandomVector * clone() const; /** String converter */ String __repr__() const; /** Is the underlying random vector composite ? */ Bool isComposite() const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ UnsignedInteger getDimension() const; /** Realization accessor */ Point getRealization() const; /** Numerical sample accessor */ Sample getSample(const UnsignedInteger size) const; /** Mean accessor */ Point getMean() const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; /** Get the random vector corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Antecedent accessor */ Antecedent getAntecedent() const; /** Function accessor */ Function getFunction() const; /** Distribution accessor */ Distribution getDistribution() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The function the vector is the output */ Function function_; /** The antecedent of the vector through the numerical math function */ Antecedent p_antecedent_; private: }; /* class CompositeRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSITERANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/ConditionalRandomVector.hxx000066400000000000000000000052531307543307100277070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for distribution-based random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONDITIONALRANDOMVECTOR_HXX #define OPENTURNS_CONDITIONALRANDOMVECTOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/RandomVector.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConditionalRandomVector * * An implementation class for distribution-based random vectors */ class OT_API ConditionalRandomVector : public RandomVectorImplementation { CLASSNAME; public: /** Default constructor */ ConditionalRandomVector(const Distribution & distribution, const RandomVector & randomParameters); /** Virtual constructor */ virtual ConditionalRandomVector * clone() const; /** String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ UnsignedInteger getDimension() const; /** Realization accessor */ Point getRealization() const; Point getRealization(Point & parameters) const; /** Distribution accessor */ Distribution getDistribution() const; /** Random parameters accessor */ RandomVector getRandomParameters() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ ConditionalRandomVector() : RandomVectorImplementation() {}; private: /** The distribution the vector follows */ mutable Distribution distribution_; /** The random vector defining the distribution parameters */ RandomVector randomParameters_; }; /* class ConditionalRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONDITIONALRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/ConstantRandomVector.hxx000066400000000000000000000055141307543307100272350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for constant random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONSTANTRANDOMVECTOR_HXX #define OPENTURNS_CONSTANTRANDOMVECTOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConstantRandomVector * * An implementation class for constant random vectors */ class OT_API ConstantRandomVector : public RandomVectorImplementation { CLASSNAME; public: /** Default constructor */ ConstantRandomVector(const PointWithDescription & point); /** Parameter constructor */ ConstantRandomVector(const Point & point); /** Virtual constructor */ virtual ConstantRandomVector * clone() const; /** String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ UnsignedInteger getDimension() const; /** Realization accessor */ Point getRealization() const; /** Numerical sample accessor */ Sample getSample(const UnsignedInteger size) const; /** Mean accessor */ Point getMean() const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; /** Get the random vector corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Distribution accessor */ Distribution getDistribution() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ ConstantRandomVector() : RandomVectorImplementation() {}; private: /** The point where the vector realizes itself */ Point point_; }; /* class ConstantRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONSTANTRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/ContinuousDistribution.hxx000066400000000000000000000047311307543307100276660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Continuous distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONTINUOUSDISTRIBUTION_HXX #define OPENTURNS_CONTINUOUSDISTRIBUTION_HXX #include "openturns/DistributionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ContinuousDistribution * * A subclass for Continuous usual distributions. */ class OT_API ContinuousDistribution : public DistributionImplementation { CLASSNAME; public: /** Default constructor */ ContinuousDistribution(); /** Virtual constructor */ virtual ContinuousDistribution * clone() const; /** Comparison operator */ Bool operator ==(const ContinuousDistribution & other) const; /** Get the PDF of the distribution */ using DistributionImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using DistributionImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using DistributionImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the survival function of the distribution */ using DistributionImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; protected: /** Interpolate the CDF for smooth continuous distributions */ Collection interpolateCDF(const UnsignedInteger n); public: /** String converter */ String __repr__() const; /* Methods inherited from upper classes */ /** Tell if the distribution is continuous */ Bool isContinuous() const; protected: }; /* class ContinuousDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONTINUOUSDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/Copula.hxx000066400000000000000000000036311307543307100243410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COPULA_HXX #define OPENTURNS_COPULA_HXX #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /* * @class Copula * * The class describes the probabilistic concept of distribution. * Instances of this class can produce samples following the * distribution, can compute PDF or CDF, etc. * They are the actual key component of RandomVectors. */ class OT_API Copula : public Distribution { CLASSNAME; public: /* Default constructor */ Copula(); /* Constructor from distribution */ Copula(const Distribution & distribution); /* Constructor from implementation */ Copula(const DistributionImplementation & implementation); /* Constructor from implementation */ Copula(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ Copula(DistributionImplementation * p_implementation); #endif /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset = "") const; }; /* class Copula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/CopulaImplementation.hxx000066400000000000000000000072571307543307100272570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all copula * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COPULAIMPLEMENTATION_HXX #define OPENTURNS_COPULAIMPLEMENTATION_HXX #include "openturns/OTprivate.hxx" #include "openturns/ContinuousDistribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CopulaImplementation */ class OT_API CopulaImplementation : public ContinuousDistribution { CLASSNAME; public: /** Default constructor */ CopulaImplementation(); /** Virtual constructor */ virtual CopulaImplementation * clone() const; /** Comparison operator */ Bool operator ==(const CopulaImplementation & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** Compute the survival function */ virtual Scalar computeSurvivalFunction(const Point & point) const; /** Get the mean of the copula */ Point getMean() const; /** Get the Spearman correlation of the copula */ CorrelationMatrix getSpearmanCorrelation() const; /** Get the Kendall concordance of the copula */ CorrelationMatrix getKendallTau() const; /** Get the standard deviation of the copula */ Point getStandardDeviation() const; /** Get the skewness of the copula */ Point getSkewness() const; /** Get the kurtosis of the copula */ Point getKurtosis() const; /** Get the i-th marginal copula */ using ContinuousDistribution::getMarginal; #ifndef SWIG Implementation getMarginal(const UnsignedInteger i) const; #endif /** Get the copula */ Implementation getCopula() const; /** String converter */ String __repr__() const; /* Methods inherited from upper classes */ /** Generic implementation of the quantile computation for continuous copulas */ Point computeQuantile(const Scalar prob, const Bool tail = false) const; protected: /** Compute the covariance of the copula */ void computeCovariance() const; /** Compute the mathematical and numerical range of the copula. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ void computeRange(); private: // Structure used to implement the computeQuantile() method efficiently struct QuantileWrapper { QuantileWrapper(const DistributionImplementation * p_distribution) : p_distribution_(p_distribution) , dimension_(p_distribution->getDimension()) { // Nothing to do } Point computeDiagonal(const Point & u) const { const Point point(dimension_, u[0]); const Scalar cdf = p_distribution_->computeCDF(point); const Point value(1, cdf); return value; } const DistributionImplementation * p_distribution_; const UnsignedInteger dimension_; }; // struct QuantileWrapper }; /* class CopulaImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COPULAIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/DiscreteDistribution.hxx000066400000000000000000000045571307543307100272700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for Discrete distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISCRETEDISTRIBUTION_HXX #define OPENTURNS_DISCRETEDISTRIBUTION_HXX #include "openturns/OTprivate.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DiscreteDistribution * * A subclass for Discrete usual distributions. */ class OT_API DiscreteDistribution : public DistributionImplementation { CLASSNAME; public: /** Default constructor */ DiscreteDistribution(); /** Virtual constructor */ virtual DiscreteDistribution * clone() const; /** Comparison operator */ Bool operator ==(const DiscreteDistribution & other) const; /** String converter */ String __repr__() const; /* Methods inherited from upper classes */ /** Tell if the distribution is continuous */ Bool isContinuous() const; /** Tell if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Support tolerance accessor */ void setSupportEpsilon(const Scalar epsilon); Scalar getSupportEpsilon() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Tolerance to say if a point is in the support of the distribution */ Scalar supportEpsilon_; private: }; /* class DiscreteDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISCRETEDISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/Distribution.hxx000066400000000000000000000513601307543307100255770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTION_HXX #define OPENTURNS_DISTRIBUTION_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Distribution * * The class describes the probabilistic concept of distribution. * Instances of this class can produce samples following the * distribution, can compute PDF or CDF, etc. * They are the actual key component of RandomVectors. */ class OT_API Distribution : public TypedInterfaceObject { CLASSNAME; public: typedef Function IsoProbabilisticTransformation; typedef IsoProbabilisticTransformation InverseIsoProbabilisticTransformation; typedef Collection PointCollection; typedef Collection PointWithDescriptionCollection; /** Default constructor */ Distribution(); /** Default constructor */ Distribution(const DistributionImplementation & implementation); /** Constructor from implementation */ Distribution(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ Distribution(DistributionImplementation * p_implementation); #endif /** Comparison operator */ Bool operator ==(const Distribution & other) const; /** Comparison operator */ Bool operator !=(const Distribution & other) const; /** Addition operator */ Distribution operator + (const Distribution & other) const; Distribution operator + (const Scalar value) const; /** Substraction operator */ Distribution operator - (const Distribution & other) const; Distribution operator - (const Scalar value) const; /** Multiplication operator */ Distribution operator * (const Distribution & other) const; Distribution operator * (const Scalar value) const; /** Division operator */ Distribution operator / (const Distribution & other) const; Distribution operator / (const Scalar value) const; /** Static methods to transform distributions by usual functions */ Distribution cos() const; Distribution sin() const; Distribution tan() const; Distribution acos() const; Distribution asin() const; Distribution atan() const; Distribution cosh() const; Distribution sinh() const; Distribution tanh() const; Distribution acosh() const; Distribution asinh() const; Distribution atanh() const; Distribution exp() const; Distribution log() const; Distribution ln() const; Distribution pow(const SignedInteger exponent) const; Distribution pow(const Scalar exponent) const; Distribution inverse() const; Distribution sqr() const; Distribution sqrt() const; Distribution cbrt() const; Distribution abs() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Weight accessor */ void setWeight(const Scalar w); Scalar getWeight() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /* Here is the interface that all derived class must implement */ /** Get one realization of the distribution */ Point getRealization() const; /** Get a numerical sample whose elements follow the distribution */ Sample getSample(const UnsignedInteger size) const; /** Get the DDF of the distribution */ Scalar computeDDF(const Scalar scalar) const; Point computeDDF(const Point & point) const; Sample computeDDF(const Sample & sample) const; /** Get the PDF of the distribution */ Scalar computePDF(const Scalar scalar) const; Scalar computePDF(const Point & point) const; Sample computePDF(const Sample & sample) const; Scalar computeLogPDF(const Scalar scalar) const; Scalar computeLogPDF(const Point & point) const; Sample computeLogPDF(const Sample & sample) const; /** Compute the PDF of 1D distributions over a regular grid */ Sample computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Compute the log-PDF of 1D distributions over a regular grid */ Sample computeLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Get the CDF of the distribution */ Scalar computeCDF(const Scalar scalar) const; Scalar computeComplementaryCDF(const Scalar scalar) const; Scalar computeSurvivalFunction(const Scalar scalar) const; Scalar computeCDF(const Point & point) const; Scalar computeComplementaryCDF(const Point & point) const; Scalar computeSurvivalFunction(const Point & point) const; Point computeInverseSurvivalFunction(const Scalar prob) const; #ifndef SWIG Point computeInverseSurvivalFunction(const Scalar prob, Scalar & marginalProb) const; #endif Sample computeCDF(const Sample & sample) const; Sample computeComplementaryCDF(const Sample & sample) const; Sample computeSurvivalFunction(const Sample & sample) const; /** Compute the CDF of 1D distributions over a regular grid */ Sample computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; Sample computeComplementaryCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; Complex computeLogCharacteristicFunction(const Scalar x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ Scalar computeGeneratingFunction(const Scalar z) const; Scalar computeLogGeneratingFunction(const Scalar z) const; Complex computeGeneratingFunction(const Complex & z) const; Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the PDF gradient of the distribution */ Point computePDFGradient(const Point & point) const; Sample computePDFGradient(const Sample & sample) const; /** Get the log(PDFgradient) of the distribution */ Point computeLogPDFGradient(const Point & point) const; Sample computeLogPDFGradient(const Sample & sample) const; /** Get the CDF gradient of the distribution */ Point computeCDFGradient(const Point & point) const; Sample computeCDFGradient(const Sample & sample) const; /** Get the quantile of the distribution */ Point computeQuantile(const Scalar prob, const Bool tail = false) const; #ifndef SWIG Point computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const; #endif Sample computeQuantile(const Point & prob, const Bool tail = false) const; /** Compute the quantile over a regular grid */ Sample computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail = false) const; /** Get the product minimum volume interval containing a given probability of the distribution */ Interval computeMinimumVolumeInterval(const Scalar prob) const; Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product bilateral confidence interval containing a given probability of the distribution */ Interval computeBilateralConfidenceInterval(const Scalar prob) const; Interval computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product unilateral confidence interval containing a given probability of the distribution */ Interval computeUnilateralConfidenceInterval(const Scalar prob, const Bool tail = false) const; Interval computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ LevelSet computeMinimumVolumeLevelSet(const Scalar prob) const; LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Get the mathematical and numerical range of the distribution. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ Interval getRange() const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the mean of the distribution */ Point getMean() const; /** Get the covariance of the distribution */ CovarianceMatrix getCovariance() const; /** Cholesky factor of the covariance matrix accessor */ TriangularMatrix getCholesky() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the raw moments of the distribution */ Point getMoment(const UnsignedInteger n) const; /** Get the centered moments about the mean of the distribution */ Point getCenteredMoment(const UnsignedInteger n) const; /** Get the shifted moments of the distribution */ Point getShiftedMoment(const UnsignedInteger n, const Point & shift) const; /** Inverse of the Cholesky factor of the covariance matrix accessor */ TriangularMatrix getInverseCholesky() const; /** Correlation matrix accessor */ CorrelationMatrix getCorrelation() const; CorrelationMatrix getLinearCorrelation() const; CorrelationMatrix getPearsonCorrelation() const; /** Get the Spearman correlation of the distribution */ virtual CorrelationMatrix getSpearmanCorrelation() const; /** Get the Kendall concordance of the distribution */ virtual CorrelationMatrix getKendallTau() const; /** Get the Shape matrix of the copula */ CorrelationMatrix getShapeMatrix() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the implementation of the distribution */ Implementation getImplementation() const; /** Check if the distribution is a copula */ Bool isCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is constinuous */ Bool isContinuous() const; /** Check if the distribution is discrete */ Bool isDiscrete() const; /** Tell if the distribution is integer valued */ Bool isIntegral() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the support of a distribution that intersect a given interval */ Sample getSupport(const Interval & interval) const; /** Get the support on the whole range */ Sample getSupport() const; /** Get the discrete probability levels */ Point getProbabilities() const; /** Get the PDF singularities inside of the range - 1D only */ Point getSingularities() const; /** Compute the density generator of the elliptical generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R(x-mu)) */ virtual Scalar computeDensityGenerator(const Scalar betaSquare) const; /** Compute the derivative of the density generator */ virtual Scalar computeDensityGeneratorDerivative(const Scalar betaSquare) const; /** Compute the seconde derivative of the density generator */ virtual Scalar computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const; /** Compute the radial distribution CDF */ virtual Scalar computeRadialDistributionCDF (const Scalar radius, const Bool tail = false) const; /** Get the i-th marginal distribution */ Distribution getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ Distribution getMarginal(const Indices & indices) const; /** Get the copula of a distribution */ Distribution getCopula() const; /** Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalDDF(const Scalar x, const Point & y) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalPDF(const Scalar x, const Point & y) const; virtual Point computeConditionalPDF(const Point & x, const Sample & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalCDF(const Scalar x, const Point & y) const; virtual Point computeConditionalCDF(const Point & x, const Sample & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; virtual Point computeConditionalQuantile(const Point & q, const Sample & y) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution */ Distribution getStandardDistribution() const; /** Get the standard representative in the parametric family, associated with the standard moments */ Distribution getStandardRepresentative() const; /** Draw the PDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawPDF() const; /** Draw the PDF of the distribution when its dimension is 1 */ virtual Graph drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawPDF(const UnsignedInteger pointNumber) const; /** Draw the PDF of a 1D marginal */ virtual Graph drawMarginal1DPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the PDF of the distribution when its dimension is 2 */ virtual Graph drawPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawPDF(const Point & xMin, const Point & xMax) const; virtual Graph drawPDF(const Indices & pointNumber) const; /** Draw the PDF of a 2D marginal */ virtual Graph drawMarginal2DPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the log-PDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawLogPDF() const; /** Draw the log-PDF of the distribution when its dimension is 1 */ virtual Graph drawLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawLogPDF(const UnsignedInteger pointNumber) const; /** Draw the log-PDF of a 1D marginal */ virtual Graph drawMarginal1DLogPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the log-PDF of the distribution when its dimension is 2 */ virtual Graph drawLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawLogPDF(const Point & xMin, const Point & xMax) const; virtual Graph drawLogPDF(const Indices & pointNumber) const; /** Draw the PDF of a 2D marginal */ virtual Graph drawMarginal2DLogPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the CDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawCDF() const; /** Draw the CDF of the distribution when its dimension is 1 */ virtual Graph drawCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawCDF(const UnsignedInteger pointNumber) const; /** Draw the CDF of the distribution when its dimension is 2 */ virtual Graph drawCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawCDF(const Point & xMin, const Point & xMax) const; virtual Graph drawCDF(const Indices & pointNumber) const; /** Draw the CDF of a 1D marginal */ virtual Graph drawMarginal1DCDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the CDF of a 2D marginal */ virtual Graph drawMarginal2DCDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the quantile of the distribution when its dimension is 1 or 2 */ virtual Graph drawQuantile(const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; void setParametersCollection(const PointWithDescriptionCollection & parametersCollection); void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameters); /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Parameters number */ UnsignedInteger getParameterDimension() const; /** Description accessor */ void setDescription(const Description & description); Description getDescription() const; /** Accessor to PDF computation precision */ Scalar getPDFEpsilon() const; /** Accessor to CDF computation precision */ Scalar getCDFEpsilon() const; /** Get a positon indicator for a 1D distribution */ Scalar getPositionIndicator() const; /** Get a dispersion indicator for a 1D distribution */ Scalar getDispersionIndicator() const; }; /* class Distribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionFactory.hxx000066400000000000000000000060051307543307100271230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all distribution factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONFACTORY_HXX #define OPENTURNS_DISTRIBUTIONFACTORY_HXX #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/DistributionFactoryResult.hxx" #include "openturns/TypedInterfaceObject.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionFactory */ class OT_API DistributionFactory : public TypedInterfaceObject { CLASSNAME; public: typedef Collection PointCollection; typedef Collection DistributionFactoryCollection; /** Default constructor */ explicit DistributionFactory(const UnsignedInteger bootstrapSize = ResourceMap::GetAsUnsignedInteger("DistributionFactory-DefaultBootstrapSize")); /** Parameter constructor */ DistributionFactory(const DistributionFactoryImplementation & factory); /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ virtual Distribution build(const Sample & sample) const; virtual Distribution build(const Point & parameters) const; virtual Distribution build() const; /** Build the distribution and the parameter distribution */ virtual DistributionFactoryResult buildEstimator(const Sample & sample) const; /** Build the distribution and the parameter distribution in a new parametrization */ virtual DistributionFactoryResult buildEstimator(const Sample & sample, const DistributionParameters & parameters) const; /** Catalog of factories */ static DistributionFactoryCollection GetContinuousUniVariateFactories(); static DistributionFactoryCollection GetContinuousMultiVariateFactories(); static DistributionFactoryCollection GetDiscreteUniVariateFactories(); static DistributionFactoryCollection GetDiscreteMultiVariateFactories(); static DistributionFactoryCollection GetUniVariateFactories(); static DistributionFactoryCollection GetMultiVariateFactories(); private: }; /* class DistributionFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionFactoryImplementation.hxx000066400000000000000000000070421307543307100320330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Top-level class for all distribution factories * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONIMPLEMENTATIONFACTORY_HXX #define OPENTURNS_DISTRIBUTIONIMPLEMENTATIONFACTORY_HXX #include "openturns/DistributionFactoryResult.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/DistributionParameters.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionFactoryImplementation */ class OT_API DistributionFactoryImplementation : public PersistentObject { CLASSNAME; public: typedef Collection PointCollection; typedef Collection PointWithDescriptionCollection; typedef DistributionImplementation::Implementation Implementation; /** Default constructor */ explicit DistributionFactoryImplementation(const UnsignedInteger bootstrapSize = ResourceMap::GetAsUnsignedInteger("DistributionFactory-DefaultBootstrapSize")); /** Virtual constructor */ virtual DistributionFactoryImplementation * clone() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Build a distribution based on a sample */ virtual Implementation build(const Sample & sample) const; /** Build a distribution based on a set of parameters */ virtual Implementation build(const Point & parameters) const; /** Build a distribution using its default constructor */ virtual Implementation build() const; /** Build the distribution and the parameter distribution */ virtual DistributionFactoryResult buildEstimator(const Sample & sample) const; /** Build the distribution and the parameter distribution in a new parametrization */ virtual DistributionFactoryResult buildEstimator(const Sample & sample, const DistributionParameters & parameters) const; /** Bootstrap size accessor */ UnsignedInteger getBootstrapSize() const; void setBootstrapSize(const UnsignedInteger bootstrapSize); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /* Bootstrap estimator */ virtual DistributionFactoryResult buildBootStrapEstimator(const Sample & sample, const Bool isGaussian = false) const; /* Build the distribution and the parameter distribution */ virtual DistributionFactoryResult buildMaximumLikelihoodEstimator(const Sample & sample, const Bool isRegular = false) const; /* Number of bootstrap resampling for covariance estimation */ UnsignedInteger bootstrapSize_; }; /* class DistributionFactoryImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONIMPLEMENTATIONFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionFactoryResult.hxx000066400000000000000000000044411307543307100303240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Results of distribution estimation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONFACTORYRESULT_HXX #define OPENTURNS_DISTRIBUTIONFACTORYRESULT_HXX #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionFactoryResult * */ class OT_API DistributionFactoryResult : public PersistentObject { CLASSNAME; public: /** Default constructor */ DistributionFactoryResult(); /** Parameters constructor */ DistributionFactoryResult(const Distribution & distribution, const Distribution & parameterDistribution); /** Virtual constructor */ virtual DistributionFactoryResult * clone() const; /** Accessor to the estimated distribution */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Accessor to the distribution of the parameter */ void setParameterDistribution(const Distribution & parameterDistribution); Distribution getParameterDistribution() const; /** String converter */ String __repr__() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The estimated distribution */ Distribution distribution_; /** The distribution of the parameter */ Distribution parameterDistribution_; }; /* class DistributionFactoryResult */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONFACTORYRESULT_HXX */openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionImplementation.hxx000066400000000000000000001414451307543307100305110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONIMPLEMENTATION_HXX #define OPENTURNS_DISTRIBUTIONIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/PointWithDescription.hxx" #include "openturns/Sample.hxx" #include "openturns/Indices.hxx" #include "openturns/Interval.hxx" #include "openturns/LevelSet.hxx" #include "openturns/CorrelationMatrix.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Graph.hxx" #include "openturns/Description.hxx" #include "openturns/EvaluationImplementation.hxx" #include "openturns/GradientImplementation.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/PiecewiseHermiteEvaluation.hxx" #include "openturns/ResourceMap.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionImplementation * * The class describes the probabilistic concept of distribution. * Instances of this class can produce samples following the * distribution, can compute PDF or CDF, etc. * They are the actual key component of RandomVectors. */ class OT_API DistributionImplementation : public PersistentObject { CLASSNAME; public: typedef Pointer Implementation; typedef Function IsoProbabilisticTransformation; typedef IsoProbabilisticTransformation InverseIsoProbabilisticTransformation; typedef Collection PointCollection; typedef Collection PointWithDescriptionCollection; /** Default constructor */ DistributionImplementation(); /** Comparison operator */ Bool operator ==(const DistributionImplementation & other) const; protected: virtual Bool equals(const DistributionImplementation & other) const; public: Bool operator !=(const DistributionImplementation & other) const; /** Addition operator */ Implementation operator + (const DistributionImplementation & other) const; Implementation operator + (const Implementation & other) const; Implementation operator + (const Scalar value) const; /** Substraction operator */ Implementation operator - (const DistributionImplementation & other) const; Implementation operator - (const Implementation & other) const; Implementation operator - (const Scalar value) const; /** Multiplication operator */ Implementation operator * (const DistributionImplementation & other) const; Implementation operator * (const Implementation & other) const; Implementation operator * (const Scalar value) const; /** Division operator */ Implementation operator / (const DistributionImplementation & other) const; Implementation operator / (const Implementation & other) const; Implementation operator / (const Scalar value) const; /** Methods to transform distributions by usual functions */ Implementation cos() const; Implementation sin() const; Implementation tan() const; Implementation acos() const; Implementation asin() const; Implementation atan() const; Implementation cosh() const; Implementation sinh() const; Implementation tanh() const; Implementation acosh() const; Implementation asinh() const; Implementation atanh() const; Implementation exp() const; Implementation log() const; Implementation ln() const; Implementation pow(const SignedInteger exponent) const; Implementation pow(const Scalar exponent) const; Implementation inverse() const; Implementation sqr() const; Implementation sqrt() const; Implementation cbrt() const; Implementation abs() const; /** String converter */ virtual String __repr__() const; String __str__(const String & offset = "") const; /** Weight accessor */ void setWeight(Scalar w); Scalar getWeight() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /* Here is the interface that all derived class must implement */ /** Virtual constructor */ virtual DistributionImplementation * clone() const; /** Get one realization of the distribution */ virtual Point getRealization() const; protected: virtual Point getRealizationByInversion() const; public: /** Get a numerical sample whose elements follow the distributionImplementation */ virtual Sample getSample(const UnsignedInteger size) const; protected: virtual Sample getSampleByInversion(const UnsignedInteger size) const; virtual Sample getSampleByQMC(const UnsignedInteger size) const; public: /** Get the DDF of the distribution */ virtual Scalar computeDDF(const Scalar scalar) const; virtual Point computeDDF(const Point & point) const; virtual Sample computeDDF(const Sample & sample) const; protected: virtual Sample computeDDFSequential(const Sample & sample) const; virtual Sample computeDDFParallel(const Sample & sample) const; public: /** Get the PDF of the distribution */ virtual Scalar computePDF(const Scalar scalar) const; virtual Scalar computePDF(const Point & point) const; virtual Sample computePDF(const Sample & sample) const; protected: virtual Sample computePDFSequential(const Sample & sample) const; virtual Sample computePDFParallel(const Sample & sample) const; public: virtual Scalar computeLogPDF(const Scalar scalar) const; virtual Scalar computeLogPDF(const Point & point) const; virtual Sample computeLogPDF(const Sample & sample) const; protected: virtual Sample computeLogPDFSequential(const Sample & sample) const; virtual Sample computeLogPDFParallel(const Sample & sample) const; public: /** Compute the PDF of 1D distributions over a regular grid */ virtual Sample computePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /** Compute the PDF of nD distributions over a regular grid */ virtual Sample computePDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const; /** Compute the log-PDF of 1D distributions over a regular grid */ virtual Sample computeLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /** Compute the log-PDF of nD distributions over a regular grid */ virtual Sample computeLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const; /** Get the CDF of the distribution */ virtual Scalar computeCDF(const Scalar scalar) const; virtual Scalar computeComplementaryCDF(const Scalar scalar) const; virtual Scalar computeSurvivalFunction(const Scalar scalar) const; virtual Scalar computeCDF(const Point & point) const; virtual Scalar computeComplementaryCDF(const Point & point) const; virtual Scalar computeSurvivalFunction(const Point & point) const; virtual Point computeInverseSurvivalFunction(const Scalar point) const; #ifndef SWIG virtual Point computeInverseSurvivalFunction(const Scalar prob, Scalar & marginalProb) const; #endif protected: virtual Sample computeCDFSequential(const Sample & sample) const; virtual Sample computeCDFParallel(const Sample & sample) const; public: virtual Sample computeCDF(const Sample & sample) const; protected: virtual Sample computeSurvivalFunctionSequential(const Sample & sample) const; virtual Sample computeSurvivalFunctionParallel(const Sample & sample) const; public: virtual Sample computeSurvivalFunction(const Sample & sample) const; protected: virtual Sample computeComplementaryCDFSequential(const Sample & sample) const; virtual Sample computeComplementaryCDFParallel(const Sample & sample) const; public: virtual Sample computeComplementaryCDF(const Sample & sample) const; /** Compute the CDF of 1D distributions over a regular grid */ virtual Sample computeCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /** Compute the CDF of nD distributions over a regular grid */ virtual Sample computeCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber, Sample & grid) const; virtual Sample computeComplementaryCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber, Sample & grid) const; /** Get the probability content of an interval */ virtual Scalar computeProbability(const Interval & interval) const; protected: /** Generic implementation for continuous distributions */ virtual Scalar computeProbabilityContinuous(const Interval & interval) const; /** Generic implementation for discrete distributions */ virtual Scalar computeProbabilityDiscrete(const Interval & interval) const; /** Generic implementation for general distributions */ virtual Scalar computeProbabilityGeneral(const Interval & interval) const; public: /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ virtual Complex computeCharacteristicFunction(const Scalar x) const; virtual Complex computeCharacteristicFunction(const Point & x) const; virtual Complex computeLogCharacteristicFunction(const Scalar x) const; virtual Complex computeLogCharacteristicFunction(const Point & x) const; /** Compute the generating function, i.e. psi(z) = E(z^X) */ virtual Scalar computeGeneratingFunction(const Scalar z) const; virtual Scalar computeLogGeneratingFunction(const Scalar z) const; virtual Complex computeGeneratingFunction(const Complex & z) const; virtual Complex computeLogGeneratingFunction(const Complex & z) const; /** Get the PDF gradient of the distribution */ virtual Point computePDFGradient(const Point & point) const; virtual Sample computePDFGradient(const Sample & inSample) const; /** Get the logPDF gradient of the distribution */ virtual Point computeLogPDFGradient(const Point & point) const; virtual Sample computeLogPDFGradient(const Sample & inSample) const; protected: virtual Sample computeLogPDFGradientSequential(const Sample & sample) const; virtual Sample computeLogPDFGradientParallel(const Sample & sample) const; public: /** Get the CDF gradient of the distribution */ virtual Point computeCDFGradient(const Point & point) const; virtual Sample computeCDFGradient(const Sample & inSample) const; public: /** Get the quantile of the distribution */ virtual Point computeQuantile(const Scalar prob, const Bool tail = false) const; #ifndef SWIG virtual Point computeQuantile(const Scalar prob, const Bool tail, Scalar & marginalProb) const; #endif /** Get the quantile over a provided grid */ protected: virtual Sample computeQuantileSequential(const Point & prob, const Bool tail = false) const; virtual Sample computeQuantileParallel(const Point & prob, const Bool tail = false) const; public: virtual Sample computeQuantile(const Point & prob, const Bool tail = false) const; /** Compute the quantile over a regular grid */ virtual Sample computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, const Bool tail = false) const; virtual Sample computeQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber, Sample & grid, const Bool tail = false) const; /** Get the product minimum volume interval containing a given probability of the distribution */ virtual Interval computeMinimumVolumeInterval(const Scalar prob) const; virtual Interval computeMinimumVolumeIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; protected: Interval computeUnivariateMinimumVolumeIntervalByOptimization(const Scalar prob, Scalar & marginalProb) const; Interval computeUnivariateMinimumVolumeIntervalByRootFinding(const Scalar prob, Scalar & marginalProb) const; public: /** Get the product bilateral confidence interval containing a given probability of the distribution */ virtual Interval computeBilateralConfidenceInterval(const Scalar prob) const; virtual Interval computeBilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, Scalar & marginalProb) const; /** Get the product unilateral confidence interval containing a given probability of the distribution */ virtual Interval computeUnilateralConfidenceInterval(const Scalar prob, const Bool tail = false) const; virtual Interval computeUnilateralConfidenceIntervalWithMarginalProbability(const Scalar prob, const Bool tail, Scalar & marginalProb) const; /** Get the minimum volume level set containing a given probability of the distribution */ virtual LevelSet computeMinimumVolumeLevelSet(const Scalar prob) const; virtual LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; protected: virtual LevelSet computeUnivariateMinimumVolumeLevelSetByQMC(const Scalar prob, Scalar & threshold) const; public: /** Get the mathematical and numerical range of the distribution. Its mathematical range is the smallest closed interval outside of which the PDF is zero, and the numerical range is the interval outside of which the PDF is rounded to zero in double precision */ virtual Interval getRange() const; protected: virtual void setRange(const Interval & range); public: /** Get the roughness, i.e. the L2-norm of the PDF */ virtual Scalar getRoughness() const; /** Get the mean of the distribution */ virtual Point getMean() const; /** Get the standard deviation of the distribution */ virtual Point getStandardDeviation() const; /** Get the skewness of the distribution */ virtual Point getSkewness() const; /** Get the kurtosis of the distribution */ virtual Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ virtual Point getStandardMoment(const UnsignedInteger n) const; /** Get the raw moments of the distribution */ virtual Point getMoment(const UnsignedInteger n) const; /** Get the centered moments of the distribution */ virtual Point getCenteredMoment(const UnsignedInteger n) const; /** Get the shifted moments of the distribution */ virtual Point getShiftedMoment(const UnsignedInteger n, const Point & shift) const; /** Get the covariance of the distribution */ virtual CovarianceMatrix getCovariance() const; /** Correlation matrix accessor */ CorrelationMatrix getCorrelation() const; /** Get the linear correlation of the distribution */ virtual CorrelationMatrix getLinearCorrelation() const; virtual CorrelationMatrix getPearsonCorrelation() const; /** Get the Spearman correlation of the distribution */ virtual CorrelationMatrix getSpearmanCorrelation() const; /** Get the Kendall concordance of the distribution */ virtual CorrelationMatrix getKendallTau() const; /** Get the shape matrix of the distribution, ie the correlation matrix of its copula if it is elliptical */ virtual CorrelationMatrix getShapeMatrix() const; /** Cholesky factor of the covariance matrix accessor */ TriangularMatrix getCholesky() const; /** Inverse of the Cholesky factor of the covariance matrix accessor */ TriangularMatrix getInverseCholesky() const; /** Check if the distribution is a copula */ virtual Bool isCopula() const; /** Check if the distribution is elliptical */ virtual Bool isElliptical() const; /** Check if the distribution is continuous */ virtual Bool isContinuous() const; /** Check if the distribution is discrete */ virtual Bool isDiscrete() const; /** Tell if the distribution is integer valued */ virtual Bool isIntegral() const; /** Tell if the distribution has elliptical copula */ virtual Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ virtual Bool hasIndependentCopula() const; /** Get the support of a distribution that intersect a given interval */ virtual Sample getSupport(const Interval & interval) const; /** Get the support on the whole range */ virtual Sample getSupport() const; /** Get the discrete probability levels */ virtual Point getProbabilities() const; /** Get the PDF singularities inside of the range - 1D only */ virtual Point getSingularities() const; /** Compute the density generator of the elliptical generator, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R(x-mu)) */ virtual Scalar computeDensityGenerator(const Scalar betaSquare) const; /** Compute the derivative of the density generator */ virtual Scalar computeDensityGeneratorDerivative(const Scalar betaSquare) const; /** Compute the seconde derivative of the density generator */ virtual Scalar computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const; /** Compute the radial distribution CDF */ virtual Scalar computeRadialDistributionCDF(const Scalar radius, const Bool tail = false) const; /** Get the i-th marginal distribution */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ virtual Implementation getMarginal(const Indices & indices) const; /** Get the copula of a distribution */ virtual Implementation getCopula() const; /** Compute the DDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalDDF(const Scalar x, const Point & y) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalPDF(const Scalar x, const Point & y) const; virtual Point computeConditionalPDF(const Point & x, const Sample & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalCDF(const Scalar x, const Point & y) const; virtual Point computeConditionalCDF(const Point & x, const Sample & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ virtual Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; virtual Point computeConditionalQuantile(const Point & q, const Sample & y) const; /** Get the isoprobabilist transformation */ virtual IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ virtual InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution */ virtual Implementation getStandardDistribution() const; /** Get the standard representative in the parametric family, associated with the standard moments */ virtual Implementation getStandardRepresentative() const; /** integrationNodesNumber accessors */ UnsignedInteger getIntegrationNodesNumber() const; void setIntegrationNodesNumber(const UnsignedInteger integrationNodesNumber) const; /** Gauss nodes and weights accessor */ Point getGaussNodesAndWeights(Point & weights) const; /** Draw the PDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawPDF() const; /** Draw the PDF of the distribution when its dimension is 1 */ virtual Graph drawPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawPDF(const UnsignedInteger pointNumber) const; /** Draw the PDF of a 1D marginal */ virtual Graph drawMarginal1DPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the PDF of the distribution when its dimension is 2 */ virtual Graph drawPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawPDF(const Point & xMin, const Point & xMax) const; virtual Graph drawPDF(const Indices & pointNumber) const; /** Draw the PDF of a 2D marginal */ virtual Graph drawMarginal2DPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the log-PDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawLogPDF() const; /** Draw the log-PDF of the distribution when its dimension is 1 */ virtual Graph drawLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawLogPDF(const UnsignedInteger pointNumber) const; /** Draw the log-PDF of a 1D marginal */ virtual Graph drawMarginal1DLogPDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the log-PDF of the distribution when its dimension is 2 */ virtual Graph drawLogPDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawLogPDF(const Point & xMin, const Point & xMax) const; virtual Graph drawLogPDF(const Indices & pointNumber) const; /** Draw the PDF of a 2D marginal */ virtual Graph drawMarginal2DLogPDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the CDF of the distribution when its dimension is 1 or 2 */ virtual Graph drawCDF() const; /** Draw the CDF of the distribution when its dimension is 1 */ virtual Graph drawCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawCDF(const UnsignedInteger pointNumber) const; /** Draw the CDF of the distribution when its dimension is 2 */ virtual Graph drawCDF(const Point & xMin, const Point & xMax, const Indices & pointNumber) const; virtual Graph drawCDF(const Point & xMin, const Point & xMax) const; virtual Graph drawCDF(const Indices & pointNumber) const; /** Draw the CDF of a 1D marginal */ virtual Graph drawMarginal1DCDF(const UnsignedInteger marginalIndex, const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Draw the CDF of a 2D marginal */ virtual Graph drawMarginal2DCDF(const UnsignedInteger firstMarginal, const UnsignedInteger secondMarginal, const Point & xMin, const Point & xMax, const Indices & pointNumber) const; /** Draw the quantile of the distribution when its dimension is 1 or 2 */ virtual Graph drawQuantile(const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawQuantile(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; protected: virtual Graph drawQuantile1D(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; virtual Graph drawQuantile2D(const Scalar qMin, const Scalar qMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; public: /** Parameters value and description accessor */ virtual PointWithDescriptionCollection getParametersCollection() const; virtual void setParametersCollection(const PointWithDescriptionCollection & parametersCollection); virtual void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameters); /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Total number of parameters */ virtual UnsignedInteger getParameterDimension() const; /** Description accessor */ void setDescription(const Description & description); Description getDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** Accessor to PDF computation precision */ Scalar getPDFEpsilon() const; /** Accessor to CDF computation precision */ Scalar getCDFEpsilon() const; /** Get a positon indicator for a 1D distribution */ Scalar getPositionIndicator() const; /** Get a dispersion indicator for a 1D distribution */ Scalar getDispersionIndicator() const; /** Is it safe to compute PDF/CDF etc in parallel? */ Bool isParallel() const; void setParallel(const Bool flag); protected: /** Draw the PDF of a discrete distribution */ virtual Graph drawDiscretePDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; /** Draw the log-PDF of a discrete distribution */ virtual Graph drawDiscreteLogPDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")) const; /** Draw the CDF of a discrete distribution */ Graph drawDiscreteCDF(const Scalar xMin, const Scalar xMax, const UnsignedInteger pointNumber) const; /** Compute the characteristic function of 1D distributions in a regular pattern with cache */ virtual Complex computeCharacteristicFunction(const UnsignedInteger index, const Scalar step) const; virtual Complex computeLogCharacteristicFunction(const UnsignedInteger index, const Scalar step) const; virtual Complex computeCharacteristicFunction(const Indices & indices, const Point & step) const; virtual Complex computeLogCharacteristicFunction(const Indices & indices, const Point & step) const; /** Compute the mean of the distribution */ virtual void computeMean() const; /** Compute the covariance of the distribution */ virtual void computeCovariance() const; virtual void computeCovarianceContinuous() const; virtual void computeCovarianceDiscrete() const; virtual void computeCovarianceGeneral() const; /** Compute the shifted moments of the distribution */ virtual Point computeShiftedMomentContinuous(const UnsignedInteger n, const Point & shift) const; virtual Point computeShiftedMomentDiscrete(const UnsignedInteger n, const Point & shift) const; virtual Point computeShiftedMomentGeneral(const UnsignedInteger n, const Point & shift) const; /** Compute the nodes and weights of the 1D gauss integration rule over [-1, 1] */ virtual void computeGaussNodesAndWeights() const; /** Dimension accessor */ void setDimension(UnsignedInteger dim); /** Quantile computation for dimension=1 */ virtual Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the numerical range of the distribution given the parameters values */ virtual void computeRange(); virtual Point computeLowerBound() const; virtual Point computeUpperBound() const; /** Compute the standard distribution associated with the current distribution */ virtual void computeStandardDistribution() const; /** Interpolate the PDF and CDF for smooth continuous distributions */ virtual Collection interpolatePDFCDF(const UnsignedInteger n); mutable Point mean_; mutable CovarianceMatrix covariance_; mutable Point gaussNodes_; mutable Point gaussWeights_; /** The integration nodes number for covariance computation */ mutable UnsignedInteger integrationNodesNumber_; /** Flags to avoid redundant computations */ mutable Bool isAlreadyComputedMean_; mutable Bool isAlreadyComputedCovariance_; mutable Bool isAlreadyComputedGaussNodesAndWeights_; /** Indicators for PDF and CDF absolute precision. By default, equals to DefaultPDFEpsilon, DefaultCDFEpsilon and DefaultQuantileEpsilon */ mutable Scalar pdfEpsilon_; mutable Scalar cdfEpsilon_; mutable Scalar quantileEpsilon_; mutable UnsignedInteger quantileIterations_; /** Standard distribution */ mutable Bool isAlreadyComputedStandardDistribution_; mutable Implementation p_standardDistribution_; /** Optimization for the generating function evaluation */ mutable Bool isAlreadyCreatedGeneratingFunction_; mutable UniVariatePolynomial generatingFunction_; #ifndef SWIG // Class used to wrap the computePDF() method for interpolation purpose class PDFWrapper: public FunctionImplementation { public: PDFWrapper(const DistributionImplementation * p_distribution) : FunctionImplementation() , p_distribution_(p_distribution) { // Nothing to do } PDFWrapper * clone() const { return new PDFWrapper(*this); } Point operator() (const Point & point) const { return Point(1, p_distribution_->computePDF(point)); } Sample operator() (const Sample & sample) const { return p_distribution_->computePDF(sample); }; UnsignedInteger getInputDimension() const { return p_distribution_->getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return p_distribution_->getDescription(); } Description getOutputDescription() const { return Description(1, "pdf"); } String __repr__() const { OSS oss; oss << "PDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "PDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation * p_distribution_; }; // class PDFWrapper // Structure used to wrap the computeCDF() method for interpolation purpose struct CDFWrapper { CDFWrapper(const DistributionImplementation * p_distribution): p_distribution_(p_distribution) {}; Point computeCDF(const Point & point) const { return Point(1, p_distribution_->computeCDF(point)); }; const DistributionImplementation * p_distribution_; }; // struct CDFWrapper // Structure used to implement the computeQuantile() method efficiently struct QuantileWrapper { QuantileWrapper(const Collection< Implementation > marginals, const DistributionImplementation * p_distribution) : marginals_(marginals) , p_distribution_(p_distribution) , dimension_(p_distribution->getDimension()) { // Nothing to do } Point computeDiagonal(const Point & u) const { const Scalar cdf = p_distribution_->computeCDF(diagonalToSpace(u[0])); LOGDEBUG(OSS(false) << "in DistributionImplementation::QuantileWrapper::computeDiagonal, u=" << u << ", cdf=" << cdf); return Point(1, cdf); } Point diagonalToSpace(const Scalar tau) const { Point x(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) x[i] = marginals_[i]->computeQuantile(tau)[0]; LOGDEBUG(OSS(false) << "in DistributionImplementation::QuantileWrapper::diagonalToSpace, tau=" << tau << ", x=" << x); return x; } const Collection< Implementation > marginals_; const DistributionImplementation * p_distribution_; const UnsignedInteger dimension_; }; // struct QuantileWrapper // Structure used to implement the computeInverseSurvivalFunction() method efficiently struct SurvivalFunctionWrapper { SurvivalFunctionWrapper(const Collection< Implementation > marginals, const DistributionImplementation * p_distribution) : marginals_(marginals) , p_distribution_(p_distribution) , dimension_(p_distribution->getDimension()) { // Nothing to do } Point computeDiagonal(const Point & u) const { const Scalar survival = p_distribution_->computeSurvivalFunction(diagonalToSpace(u[0])); LOGDEBUG(OSS(false) << "in DistributionImplementation::InverseSurvivalFunctionWrapper::computeDiagonal, u=" << u << ", survival=" << survival); return Point(1, survival); } Point diagonalToSpace(const Scalar tau) const { Point x(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) x[i] = marginals_[i]->computeQuantile(tau, true)[0]; LOGDEBUG(OSS(false) << "in DistributionImplementation::InverseSurvivalFunctionWrapper::diagonalToSpace, tau=" << tau << ", x=" << x); return x; } const Collection< Implementation > marginals_; const DistributionImplementation * p_distribution_; const UnsignedInteger dimension_; }; // struct SurvivalFunctionWrapper class MinimumVolumeLevelSetEvaluation: public EvaluationImplementation { public: // Here we use a smart pointer instead of a const C++ pointer because the life-cycle of the // object goes outside of the calling method MinimumVolumeLevelSetEvaluation(const DistributionImplementation::Implementation & p_distribution) : EvaluationImplementation() , p_distribution_(p_distribution) { // Nothing to do } MinimumVolumeLevelSetEvaluation * clone() const { return new MinimumVolumeLevelSetEvaluation(*this); } // The minimum volume level A(p) set is such that A(p)={x\in R^n | y(x) <= y_p} // where y(x)=-\log X and y_p is the p-quantile of Y=pdf(X) Point operator() (const Point & point) const { const Scalar value = -p_distribution_->computeLogPDF(point); return Point(1, value); } Sample operator() (const Sample & sample) const { return p_distribution_->computeLogPDF(sample) * (-1.0); } UnsignedInteger getInputDimension() const { return p_distribution_->getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return p_distribution_->getDescription(); } Description getOutputDescription() const { return Description(1, "-logPDF"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } String __repr__() const { OSS oss; oss << "MinimumVolumeLevelSetEvaluation(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "MinimumVolumeLevelSetEvaluation(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation::Implementation p_distribution_; }; // class MinimumVolumeLevelSetEvaluation class MinimumVolumeLevelSetGradient: public GradientImplementation { public: // Here we use a smart pointer instead of a const C++ pointer because the life-cycle of the // object goes outside of the calling method MinimumVolumeLevelSetGradient(const DistributionImplementation::Implementation & p_distribution) : GradientImplementation() , p_distribution_(p_distribution) { // Nothing to do } MinimumVolumeLevelSetGradient * clone() const { return new MinimumVolumeLevelSetGradient(*this); } Matrix gradient(const Point & point) const { const Scalar pdf = p_distribution_->computePDF(point); if (pdf == 0) return Matrix(getInputDimension(), getOutputDimension()); const Point value = p_distribution_->computeDDF(point) * (-1.0 / pdf); return MatrixImplementation(getInputDimension(), getOutputDimension(), value); } UnsignedInteger getInputDimension() const { return p_distribution_->getDimension(); } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return p_distribution_->getDescription(); } Description getOutputDescription() const { return Description(1, "-logPDF"); } Description getDescription() const { Description description(getInputDescription()); description.add(getOutputDescription()); return description; } String __repr__() const { OSS oss; oss << "MinimumVolumeLevelSetGradient(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "MinimumVolumeLevelSetGradient(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation::Implementation p_distribution_; }; // class MinimumVolumeLevelSetGradient class CovarianceWrapper: public FunctionImplementation { public: CovarianceWrapper(const DistributionImplementation::Implementation & p_distribution, const Scalar muI, const Scalar muJ) : FunctionImplementation() , p_distribution_(p_distribution) , muI_(muI) , muJ_(muJ) { // Nothing to do } CovarianceWrapper * clone() const { return new CovarianceWrapper(*this); } Point operator() (const Point & point) const { return Point(1, (point[0] - muI_) * (point[1] - muJ_) * p_distribution_->computePDF(point)); } Sample operator() (const Sample & sample) const { const UnsignedInteger size = sample.getSize(); Sample result(p_distribution_->computePDF(sample)); for (UnsignedInteger i = 0; i < size; ++i) result[i][0] *= (sample[i][0] - muI_) * (sample[i][1] - muJ_); return result; } UnsignedInteger getInputDimension() const { return 2; } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return Description::BuildDefault(2, "x"); } Description getOutputDescription() const { return Description(1, "c"); } String __repr__() const { OSS oss; oss << "CovarianceWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "CovarianceWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: const DistributionImplementation::Implementation p_distribution_; const Scalar muI_; const Scalar muJ_; }; // class CovarianceWrapper // Class used to wrap the computeConditionalPDF() method for the computation of the conditional CDF class ShiftedMomentWrapper: public FunctionImplementation { public: ShiftedMomentWrapper(const UnsignedInteger n, const Scalar shift, const DistributionImplementation::Implementation & p_distribution) : FunctionImplementation() , n_(1.0 * n) , shift_(shift) , p_distribution_(p_distribution) { // Nothing to do }; ShiftedMomentWrapper * clone() const { return new ShiftedMomentWrapper(*this); } Point operator() (const Point & point) const { const Scalar power = std::pow(point[0] - shift_, n_); const Scalar pdf = p_distribution_->computePDF(point); return Point(1, power * pdf); }; Sample operator() (const Sample & sample) const { const UnsignedInteger size = sample.getSize(); Sample result(size, 1); const Sample pdf(p_distribution_->computePDF(sample)); for (UnsignedInteger i = 0; i < size; ++i) result[i][0] = std::pow(sample[i][0] - shift_, n_) * pdf[i][0]; return result; }; UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } String __repr__() const { OSS oss; oss << "ShiftedMomentWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "ShiftedMomentWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: const Scalar n_; const Scalar shift_; const DistributionImplementation::Implementation & p_distribution_; }; // class ShiftedMomentWrapper // Class used to wrap the computeConditionalPDF() method for the computation of the conditional CDF class ConditionalPDFWrapper: public FunctionImplementation { public: ConditionalPDFWrapper(const DistributionImplementation::Implementation p_distribution) : FunctionImplementation() , y_(0.0) , p_distribution_(p_distribution) { // Nothing to do }; ConditionalPDFWrapper * clone() const { return new ConditionalPDFWrapper(*this); } Point operator() (const Point & point) const { Point z(y_); z.add(point[0]); return Point(1, p_distribution_->computePDF(z)); }; Sample operator() (const Sample & sample) const { const UnsignedInteger size = sample.getSize(); Sample z(size, y_); z.stack(sample); return p_distribution_->computePDF(z); }; void setParameter(const Point & parameters) { y_ = parameters; } Point getParameter() const { return y_; } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } String __repr__() const { OSS oss; oss << "ConditionalPDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "ConditionalPDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: Point y_; const DistributionImplementation::Implementation p_distribution_; }; // class ConditionalPDFWrapper // Class used to wrap the computeConditionalCDF() method for the computation of the conditional quantile class ConditionalCDFWrapper: public FunctionImplementation { public: ConditionalCDFWrapper(const DistributionImplementation * p_distribution) : FunctionImplementation() , y_(0.0) , p_distribution_(p_distribution) { // Nothing to do }; ConditionalCDFWrapper * clone() const { return new ConditionalCDFWrapper(*this); } Point operator() (const Point & point) const { return Point(1, p_distribution_->computeConditionalCDF(point[0], y_)); }; void setParameter(const Point & parameters) { y_ = parameters; } Point getParameter() const { return y_; } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } String __repr__() const { OSS oss; oss << "ConditionalCDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "ConditionalCDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: Point y_; const DistributionImplementation * p_distribution_; }; // class ConditionalCDFWrapper #endif /** The dimension of the distribution */ UnsignedInteger dimension_; /** The weight used ONLY by Mixture */ Scalar weight_; /** Range of the distribution */ Interval range_; /** Description of each component */ Description description_; /** Use parallelism */ Bool isParallel_; /** Flag to tell if the distribution is indeed a copula */ Bool isCopula_; /** Data for characteristic function computation */ mutable Bool isInitializedCF_; mutable Point pdfGrid_; /** Wrapper to compute conditional CDF */ mutable Pointer p_conditionalPDFWrapper_; /** Wrapper to compute conditional quantile */ mutable Pointer p_conditionalCDFWrapper_; }; /* class DistributionImplementation */ #ifndef SWIG /** Product operator */ OT_API DistributionImplementation::Implementation operator * (const Scalar, const DistributionImplementation & distribution); OT_API DistributionImplementation::Implementation operator * (const Scalar, const DistributionImplementation::Implementation & p_distribution); /** Division operator */ OT_API DistributionImplementation::Implementation operator / (const Scalar, const DistributionImplementation & distribution); OT_API DistributionImplementation::Implementation operator / (const Scalar, const DistributionImplementation::Implementation & p_distribution); /** Addition operator */ OT_API DistributionImplementation::Implementation operator + (const Scalar, const DistributionImplementation & distribution); OT_API DistributionImplementation::Implementation operator + (const Scalar, const DistributionImplementation::Implementation & p_distribution); /** Substraction operator */ OT_API DistributionImplementation::Implementation operator - (const Scalar, const DistributionImplementation & distribution); OT_API DistributionImplementation::Implementation operator - (const Scalar, const DistributionImplementation::Implementation & p_distribution); OT_API DistributionImplementation::Implementation operator - (const DistributionImplementation & distribution); OT_API DistributionImplementation::Implementation operator - (const DistributionImplementation::Implementation & p_distribution); #endif OT_API DistributionImplementation::Implementation maximum(const DistributionImplementation::Implementation & p_left, const DistributionImplementation::Implementation & p_right); OT_API DistributionImplementation::Implementation maximum(const DistributionImplementation & left, const DistributionImplementation::Implementation & p_right); OT_API DistributionImplementation::Implementation maximum(const DistributionImplementation::Implementation & p_left, const DistributionImplementation & right); OT_API DistributionImplementation::Implementation maximum(const DistributionImplementation & left, const DistributionImplementation & right); END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionParameters.hxx000066400000000000000000000050021307543307100276130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distributions parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONPARAMETERS_HXX #define OPENTURNS_DISTRIBUTIONPARAMETERS_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/DistributionParametersImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionParameters * */ class OT_API DistributionParameters : public TypedInterfaceObject { CLASSNAME; public: typedef Collection PointWithDescriptionCollection; /** Default constructor */ DistributionParameters(); /** Default constructor */ DistributionParameters(const DistributionParametersImplementation & implementation); /** Constructor from implementation */ DistributionParameters(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ DistributionParameters(DistributionParametersImplementation * p_implementation); #endif /** Build a distribution based on a set of native parameters */ Distribution getDistribution() const; /** Evaluate native parameters */ Point evaluate() const; /** Compute jacobian / native parameters */ Matrix gradient() const; /** Conversion operator */ Point operator () (const Point & inP) const; /** Conversion from native parameters */ Point inverse(const Point & inP) const; /** Parameters value and description accessor */ void setValues(const Point & values); Point getValues() const; Description getDescription() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; }; /* class DistributionParameters */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONPARAMETERS_HXX */openturns-1.9/lib/src/Uncertainty/Model/openturns/DistributionParametersImplementation.hxx000066400000000000000000000051731307543307100325320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for all distribution parameters * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DISTRIBUTIONPARAMETERSIMPLEMENTATION_HXX #define OPENTURNS_DISTRIBUTIONPARAMETERSIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Distribution.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DistributionParametersImplementation * */ class OT_API DistributionParametersImplementation : public PersistentObject { CLASSNAME; public: typedef Collection PointCollection; typedef Collection PointWithDescriptionCollection; /** Default constructor */ DistributionParametersImplementation(); /** Virtual constructor */ virtual DistributionParametersImplementation * clone() const; /** String converter */ virtual String __repr__() const; String __str__(const String & offset = "") const; /** Build a distribution based on a set of native parameters */ virtual Distribution getDistribution() const; /** Evaluate native parameters */ virtual Point evaluate() const; /** Compute jacobian / native parameters */ virtual Matrix gradient() const; /** Conversion operator */ virtual Point operator () (const Point & inP) const; /** Conversion from native parameters */ virtual Point inverse(const Point & inP) const; /** Parameters value and description accessor */ virtual void setValues(const Point & values); virtual Point getValues() const; virtual Description getDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); }; /* class DistributionParametersImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DISTRIBUTIONPARAMETERSIMPLEMENTATION_HXX */openturns-1.9/lib/src/Uncertainty/Model/openturns/EllipticalDistribution.hxx000066400000000000000000000200471307543307100276000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Abstract top-level class for elliptical distributions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ELLIPTICALDISTRIBUTIONIMPLEMENTATION_HXX #define OPENTURNS_ELLIPTICALDISTRIBUTIONIMPLEMENTATION_HXX #include "openturns/ContinuousDistribution.hxx" #include "openturns/CorrelationMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EllipticalDistribution * * A subclass for elliptical usual distributions. */ class OT_API EllipticalDistribution : public ContinuousDistribution { CLASSNAME; public: // Numerical precision for computing the quantile /** Default constructor */ EllipticalDistribution(); /** Parameter constructor */ EllipticalDistribution(const Point & mean, const Point & sigma, const CorrelationMatrix & R, const Scalar covarianceNormalizationFactor); /** Virtual copy constructor */ virtual EllipticalDistribution * clone() const; /** Comparison operator */ protected: virtual Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /** Tell if the distribution is elliptical */ Bool isElliptical() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Get the DDF of the distribution */ using ContinuousDistribution::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using ContinuousDistribution::computePDF; Scalar computePDF(const Point & point) const; /** Get the PDF gradient of the distribution */ using ContinuousDistribution::computePDFGradient; Point computePDFGradient(const Point & point) const; /** Compute the density generator of the elliptical distribution, i.e. * the function phi such that the density of the distribution can * be written as p(x) = phi(t(x-mu)R^{-1}(x-mu)) */ virtual Scalar computeDensityGenerator(const Scalar betaSquare) const; virtual Scalar computeLogDensityGenerator(const Scalar betaSquare) const; /** Compute the derivative of the density generator */ virtual Scalar computeDensityGeneratorDerivative(const Scalar betaSquare) const; /** Compute the second derivative of the density generator */ virtual Scalar computeDensityGeneratorSecondDerivative(const Scalar betaSquare) const; /** Compute the survival function */ using ContinuousDistribution::computeSurvivalFunction; virtual Scalar computeSurvivalFunction(const Point & point) const; /** Get the minimum volume level set containing a given probability of the distribution */ virtual LevelSet computeMinimumVolumeLevelSetWithThreshold(const Scalar prob, Scalar & threshold) const; /** Mean point accessor */ void setMean(const Point & mean); /** Sigma vector accessor */ void setSigma(const Point & sigma); /** Sigma vector accessor */ Point getSigma() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Correlation matrix accessor */ void setCorrelation(const CorrelationMatrix & R); /** Correlation matrix accessor */ CorrelationMatrix getCorrelation() const; protected: /** Compute the mean of the distribution */ void computeMean() const; /** Compute the covariance of the distribution */ void computeCovariance() const; public: /** Normalize the given point u_i = (x_i - mu_i) / sigma_i */ Point normalize(const Point & x) const; /** Denormalize the given point x_i = mu_i + sigma_i * x_i */ Point denormalize(const Point & u) const; /** Inverse correlation matrix accessor */ SquareMatrix getInverseCorrelation() const; /** Cholesky factor of the correlation matrix accessor */ TriangularMatrix getCholesky() const; /** Inverse of the Cholesky factor of the correlation matrix accessor */ TriangularMatrix getInverseCholesky() const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution, i.e. a distribution of the same kind but with zero mean, * unit marginal standard distribution and identity correlation */ Implementation getStandardDistribution() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; using ContinuousDistribution::setParametersCollection; void setParametersCollection(const PointCollection & parametersCollection); /** Parameters value accessor */ virtual Point getParameter() const; virtual void setParameter(const Point & parameters); /** Parameters description accessor */ virtual Description getParameterDescription() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The sigma vector of the distribution */ mutable Point sigma_; /** The correlation matrix (Rij) of the distribution */ mutable CorrelationMatrix R_; /** The shape matrix of the distribution = Diag(sigma_) * R_ * Diag(sigma_) */ mutable CovarianceMatrix shape_; /** The inverse of the correlation matrix of the distribution */ SymmetricMatrix inverseR_; /** The Cholesky factor of the shape matrix shape_ = cholesky_ * cholesky_.transpose() */ TriangularMatrix cholesky_; /** The inverse Cholesky factor of the covariance matrix */ TriangularMatrix inverseCholesky_; /** The normalization factor of the distribution */ Scalar normalizationFactor_; /** The scaling factor of the covariance matrix covariance = covarianceScalingFactor_ * shape_*/ Scalar covarianceScalingFactor_; private: // Class used to wrap the computeRadialCDF() method for interpolation purpose class RadialCDFWrapper: public FunctionImplementation { public: RadialCDFWrapper(const EllipticalDistribution * p_distribution) : FunctionImplementation() , p_distribution_(p_distribution) { // Nothing to do } RadialCDFWrapper * clone() const { return new RadialCDFWrapper(*this); } Point operator() (const Point & point) const { return Point(1, p_distribution_->computeRadialDistributionCDF(point[0])); } UnsignedInteger getInputDimension() const { return 1; } UnsignedInteger getOutputDimension() const { return 1; } Description getInputDescription() const { return Description(1, "R"); } Description getOutputDescription() const { return Description(1, "radialCDF"); } String __repr__() const { OSS oss; oss << "RadialCDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } String __str__(const String & offset) const { OSS oss; oss << offset << "RadialCDFWrapper(" << p_distribution_->__str__() << ")"; return oss; } private: const EllipticalDistribution * p_distribution_; }; // class RadialCDFWrapper /** Compute the value of the auxiliary attributes */ void update(); }; /* class EllipticalDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ELLIPTICALDISTRIBUTIONIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/Event.hxx000066400000000000000000000036271307543307100242040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class specializes the concept of RandomVector by constructing a Bernoulli * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EVENT_HXX #define OPENTURNS_EVENT_HXX #include "openturns/RandomVector.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Event * * The class that implements all random vectors */ class OT_API Event : public RandomVector { CLASSNAME; public: /** for save/load mecanism */ Event(); /** Constructor from RandomVector */ Event(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold); /** Constructor from RandomVector */ Event(const RandomVector & antecedent, const Domain & domain); /** Constructor from RandomVector */ Event(const RandomVector & antecedent, const Interval & interval); /** Constructor from RandomVector */ Event(const Process & process, const Domain & domain); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; private: }; /* class Event */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EVENT_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/EventDomain.hxx000066400000000000000000000047151307543307100253330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event domain based on a composite random vector * built upon a boolean function which is described by a domain appartenance. * The antecedent of the event must be a "classical" composite random * vector in the context of OpenTURNS. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EVENTDOMAIN_HXX #define OPENTURNS_EVENTDOMAIN_HXX #include "openturns/CompositeRandomVector.hxx" #include "openturns/Domain.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EventDomain * * */ class OT_API EventDomain : public CompositeRandomVector { CLASSNAME; public: /** Default constructor */ EventDomain(); /** Constructor from RandomVector */ EventDomain(const RandomVectorImplementation & antecedent, const Domain & domain); /** Virtual contructor */ virtual EventDomain * clone() const; /** String converter */ String __repr__() const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Domain accessor */ Domain getDomain() const; /* Here is the interface that all derived class may implement */ /** Realization accessor */ virtual Point getRealization() const; /** Numerical sample accessor */ virtual Sample getSample(const UnsignedInteger size) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** The domain of the eventDomainImplementation */ Domain domain_; }; /* class EventDomain */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EVENTDOMAIN_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/EventProcess.hxx000066400000000000000000000046561307543307100255460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event based on the evaluation of the * domain appartenance of a stochastic process using a boolean function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EVENTPROCESS_HXX #define OPENTURNS_EVENTPROCESS_HXX #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Domain.hxx" #include "openturns/Process.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EventProcess * * */ class OT_API EventProcess : public RandomVectorImplementation { CLASSNAME; public: /** Default constructor */ EventProcess(); /** Constructor from RandomVector */ EventProcess(const Process & process, const Domain & domain); /** Virtual constructor */ virtual EventProcess * clone() const; /** String converter */ String __repr__() const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Domain accessor */ Domain getDomain() const; /** Process accessor */ Process getProcess() const; /** Realization accessor */ Point getRealization() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: friend class Factory; /** The process of the eventProcess */ Process process_; /** The domain of the evenProcess */ Domain domain_; /** Private method - check that values of a time serie are/are not in the domain */ Bool checkTimeSerieValuesInDomain(const Field & ts) const; }; /* class EventProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EVENTPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/EventRandomVector.hxx000066400000000000000000000054041307543307100265230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event random vector, i.e. a * composite random vector built upon a boolean function which * is described by a threshold and a comparison operator. The * antecedent of the event must be a "classical" composite random * vector in the context of OpenTURNS. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_EVENTRANDOMVECTOR_HXX #define OPENTURNS_EVENTRANDOMVECTOR_HXX #include "openturns/CompositeRandomVector.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class EventRandomVector * * */ class OT_API EventRandomVector : public CompositeRandomVector { CLASSNAME; public: /** Default constructor */ EventRandomVector(); /** Constructor from RandomVector */ EventRandomVector(const RandomVectorImplementation & antecedent, const ComparisonOperator & op, const Scalar threshold); /** Virtual constructor */ virtual EventRandomVector * clone() const; /** String converter */ String __repr__() const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Operator accessor */ ComparisonOperator getOperator() const; /** Threshold accessor */ Scalar getThreshold() const; /* Here is the interface that all derived class may implement */ /** Realization accessor */ virtual Point getRealization() const; /** Numerical sample accessor */ virtual Sample getSample(const UnsignedInteger size) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** The comparison operator of the eventRandomVectorImplementation */ ComparisonOperator operator_; /** The threshold of the eventRandomVectorImplementation */ Scalar threshold_; }; /* class EventRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_EVENTRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/FunctionalChaosRandomVector.hxx000066400000000000000000000071501307543307100305220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for functionalChaos random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALCHAOSRANDOMVECTOR_HXX #define OPENTURNS_FUNCTIONALCHAOSRANDOMVECTOR_HXX #include "openturns/CompositeRandomVector.hxx" #include "openturns/FunctionalChaosResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalChaosRandomVector * * An implementation class for functionalChaos random vectors */ class OT_API FunctionalChaosRandomVector : public CompositeRandomVector { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ FunctionalChaosRandomVector(const FunctionalChaosResult & functionalChaosResult); /** Virtual constructor */ virtual FunctionalChaosRandomVector * clone() const; /** String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /** Mean accessor */ Point getMean() const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; /** Sobol index accessor */ Scalar getSobolIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex = 0) const; Scalar getSobolIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex = 0) const; /** Sobol total index accessor */ Scalar getSobolTotalIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex = 0) const; Scalar getSobolTotalIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex = 0) const; /** Sobol grouped index accessor */ Scalar getSobolGroupedIndex(const Indices & variableIndices, const UnsignedInteger marginalIndex = 0) const; Scalar getSobolGroupedIndex(const UnsignedInteger variableIndex, const UnsignedInteger marginalIndex = 0) const; /** Functional chaos result accessor */ FunctionalChaosResult getFunctionalChaosResult() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ FunctionalChaosRandomVector() : CompositeRandomVector() {}; private: /** Compute the covariance */ void computeCovariance() const; /** Scalar value of the covariance */ mutable CovarianceMatrix covariance_; /** Flag to tell if the covariance has already been computed */ mutable Bool isAlreadyComputedCovariance_; /** The functional chaos result tht allows to build the random vector */ FunctionalChaosResult functionalChaosResult_; }; /* class FunctionalChaosRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALCHAOSRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/KrigingRandomVector.hxx000066400000000000000000000050031307543307100270270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for kriging random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KRIGINGRANDOMVECTOR_HXX #define OPENTURNS_KRIGINGRANDOMVECTOR_HXX #include "openturns/UsualRandomVector.hxx" #include "openturns/KrigingResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KrigingRandomVector * * An implementation class for kriging random vectors */ class OT_API KrigingRandomVector : public UsualRandomVector { CLASSNAME; public: /** Default constructors */ KrigingRandomVector(const KrigingResult & krigingResult, const Point & point); KrigingRandomVector(const KrigingResult & krigingResult, const Sample & sample); /** Virtual constructor */ virtual KrigingRandomVector * clone() const; /** String converter */ String __repr__() const; /** Get a realization of the process */ using UsualRandomVector::getRealization; Point getRealization() const; /** Get realizations of the process */ using UsualRandomVector::getSample; Sample getSample(const UnsignedInteger size) const; /** Kriging result accessor */ KrigingResult getKrigingResult() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ KrigingRandomVector() : UsualRandomVector() {}; private: /** The kriging result tht allows to build the random vector */ KrigingResult krigingResult_; /** The points on which we seek the realizations */ Sample sample_; }; /* class KrigingRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KRIGINGRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/OTModel.hxx000066400000000000000000000042351307543307100244220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Model * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTMODEL_HXX #define OPENTURNS_OTMODEL_HXX #include "openturns/ArchimedeanCopula.hxx" #include "openturns/CompositeRandomVector.hxx" #include "openturns/ConditionalRandomVector.hxx" #include "openturns/ConstantRandomVector.hxx" #include "openturns/ContinuousDistribution.hxx" #include "openturns/Copula.hxx" #include "openturns/CopulaImplementation.hxx" #include "openturns/DiscreteDistribution.hxx" #include "openturns/Distribution.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/DistributionImplementation.hxx" #include "openturns/DistributionFactoryImplementation.hxx" #include "openturns/DistributionParametersImplementation.hxx" #include "openturns/DistributionParameters.hxx" #include "openturns/EllipticalDistribution.hxx" #include "openturns/Event.hxx" #include "openturns/EventDomain.hxx" #include "openturns/EventRandomVector.hxx" #include "openturns/EventProcess.hxx" #include "openturns/FunctionalChaosRandomVector.hxx" #include "openturns/KrigingRandomVector.hxx" #include "openturns/ProcessImplementation.hxx" #include "openturns/Process.hxx" #include "openturns/RandomVector.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/SklarCopula.hxx" #include "openturns/StandardEvent.hxx" #include "openturns/UsualRandomVector.hxx" #endif /* OPENTURNS_OTMODEL_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/Process.hxx000066400000000000000000000066411307543307100245400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The interface class that implements all process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PROCESS_HXX #define OPENTURNS_PROCESS_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Pointer.hxx" #include "openturns/ProcessImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Process * * The class that implements all processs */ class OT_API Process : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef ProcessImplementation::Implementation Implementation; /** Default constructor */ Process(); /** Copy constructors */ Process(const ProcessImplementation & implementation); /** Constructor from implementation */ Process(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ Process(ProcessImplementation * p_implementation); #endif /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** Is the underlying a normal process ? */ Bool isNormal() const; /** Is the underlying a stationary process ? */ Bool isStationary() const; /** Is the underlying a composite process ? */ Bool isComposite() const; /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Trend accessor */ TrendTransform getTrend() const; /** Dimension accessor */ UnsignedInteger getSpatialDimension() const; UnsignedInteger getDimension() const; /** Discrete realization accessor */ Field getRealization() const; /** Continuous realization accessor */ Function getContinuousRealization() const; /** TimeGrid accessor */ RegularGrid getTimeGrid() const; void setTimeGrid (const RegularGrid & timeGrid); /** Mesh accessor */ Mesh getMesh() const; void setMesh (const Mesh & mesh); /** Process sample accessors */ ProcessSample getSample(const UnsignedInteger size) const; /** Continuation of the last realization on a given number of steps */ TimeSeries getFuture(const UnsignedInteger stepNumber) const; ProcessSample getFuture(const UnsignedInteger stepNumber, const UnsignedInteger size) const; /** Get the process corresponding to the i-th marginal component */ Process getMarginal(const UnsignedInteger i) const; /** Get the marginal process corresponding to indices components */ Process getMarginal(const Indices & indices) const; }; /* class Process */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/ProcessImplementation.hxx000066400000000000000000000105141307543307100274400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PROCESSIMPLEMENTATION_HXX #define OPENTURNS_PROCESSIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Function.hxx" #include "openturns/Indices.hxx" #include "openturns/Field.hxx" #include "openturns/TimeSeries.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/TrendTransform.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ProcessImplementation * * An interface for all implementation class of process */ class OT_API ProcessImplementation : public PersistentObject { CLASSNAME; public: /** Some typedefs to ease reading */ typedef Pointer Antecedent; typedef Antecedent Implementation; /** Default constructor */ ProcessImplementation(); /** Virtual constructor */ virtual ProcessImplementation * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /* Here is the interface that all derived class must implement */ /** Is the underlying gaussian process ? */ virtual Bool isNormal() const; /** Is the underlying a stationary process ? */ virtual Bool isStationary() const; /** Is the underlying a composite process ? */ virtual Bool isComposite() const; /** Covariance model accessor */ virtual CovarianceModel getCovarianceModel() const; /** Trend accessor */ virtual TrendTransform getTrend() const; /** Dimension accessor */ virtual UnsignedInteger getSpatialDimension() const; virtual UnsignedInteger getDimension() const; /** TimeGrid accessor */ virtual RegularGrid getTimeGrid() const; virtual void setTimeGrid(const RegularGrid & timeGrid); /** Mesh accessor */ virtual Mesh getMesh() const; virtual void setMesh(const Mesh & mesh); /** Discrete realization accessor */ virtual Field getRealization() const; /** Continuous realization accessor */ virtual Function getContinuousRealization() const; /** Process sample accessors */ virtual ProcessSample getSample(const UnsignedInteger size) const; /** Continuation of the last realization on a given number of steps */ virtual TimeSeries getFuture(const UnsignedInteger stepNumber) const; virtual ProcessSample getFuture(const UnsignedInteger stepNumber, const UnsignedInteger size) const; /** Get the marginal process corresponding to the i-th marginal component */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal process corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Description accessor */ virtual void setDescription(const Description & description); virtual Description getDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** Dimension accessor */ void setDimension(const UnsignedInteger dimension); /** Description of each component */ Description description_; /** Dimension of the process */ UnsignedInteger dimension_; /** The mesh over which the process is defined or discretized */ Mesh mesh_; }; /* class ProcessImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PROCESSIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/RandomVector.hxx000066400000000000000000000106371307543307100255250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements all random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMVECTOR_HXX #define OPENTURNS_RANDOMVECTOR_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Pointer.hxx" #include "openturns/RandomVectorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomVector * * The class that implements all random vectors */ class OT_API RandomVector : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef RandomVectorImplementation::Antecedent Antecedent; /** Default constructor */ RandomVector(); /** Default constructor */ RandomVector(const RandomVectorImplementation & implementation); /** Constructor from implementation */ RandomVector(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ RandomVector(RandomVectorImplementation * p_implementation); #endif /** Constructor for constant vector */ explicit RandomVector(const Point & point); /** Constructor for distribution-based vector */ explicit RandomVector(const Distribution & distribution); /** Constructor for distribution-based conditional vector */ RandomVector(const Distribution & distribution, const RandomVector & randomParameters); /** Constructor for composite vector */ RandomVector(const Function & function, const RandomVector & antecedent); /** Constructor for functional chaos vector */ explicit RandomVector(const FunctionalChaosResult & functionalChaosResult); /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Description Accessor */ void setDescription(const Description & description); Description getDescription() const; /** Is the underlying random vector composite ? */ Bool isComposite() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Realization accessor */ Point getRealization() const; /** Numerical sample accessor */ Sample getSample(const UnsignedInteger size) const; /** Get the random vector corresponding to the i-th marginal component */ RandomVector getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ RandomVector getMarginal(const Indices & indices) const; /** Mean accessor */ Point getMean() const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; /** This method allows to access the antecedent RandomVector in case of a composite RandomVector */ Antecedent getAntecedent() const; /** This method allows to access the Function in case of a composite RandomVector */ Function getFunction() const; /** This method allows to access the Distribution in case of a usual RandomVector */ Distribution getDistribution() const; /** Operator accessor */ ComparisonOperator getOperator() const; /** Threshold accessor */ Scalar getThreshold() const; protected: /** Constructor for event vector */ RandomVector(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold); /** Constructor for event vector */ RandomVector(const RandomVector & antecedent, const Domain & domain); /** Constructor for event vector */ RandomVector(const RandomVector & antecedent, const Interval & interval); /** Constructor for event vector */ RandomVector(const Process & process, const Domain & domain); }; /* class RandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/RandomVectorImplementation.hxx000066400000000000000000000100161307543307100304220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMVECTORIMPLEMENTATION_HXX #define OPENTURNS_RANDOMVECTORIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Point.hxx" #include "openturns/Sample.hxx" #include "openturns/Indices.hxx" #include "openturns/Function.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/Distribution.hxx" #include "openturns/ComparisonOperator.hxx" #include "openturns/FunctionalChaosResult.hxx" #include "openturns/Domain.hxx" #include "openturns/Process.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomVectorImplementation * * An interface for all implementation class of random vectors */ class OT_API RandomVectorImplementation : public PersistentObject { CLASSNAME; public: /** Some typedefs to ease reading */ typedef Pointer Antecedent; typedef Antecedent Implementation; /** Default constructor */ RandomVectorImplementation(); /** Virtual constructor */ virtual RandomVectorImplementation * clone() const; /** String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /** Is the underlying random vector composite ? */ virtual Bool isComposite() const; /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Realization accessor */ virtual Point getRealization() const; /** Numerical sample accessor */ virtual Sample getSample(const UnsignedInteger size) const; /** Mean accessor */ virtual Point getMean() const; /** Covariance accessor */ virtual CovarianceMatrix getCovariance() const; /** Get the random vector corresponding to the i-th marginal component */ virtual Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ virtual Implementation getMarginal(const Indices & indices) const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Antecedent getAntecedent() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Function getFunction() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Distribution getDistribution() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual ComparisonOperator getOperator() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Domain getDomain() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Process getProcess() const; /** Fake method due to pbs with dynamic_cast and Pointer */ virtual Scalar getThreshold() const; /** Description accessor */ virtual void setDescription(const Description & description); virtual Description getDescription() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: /** Description of each component */ Description description_; }; /* class RandomVectorImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMVECTORIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/SklarCopula.hxx000066400000000000000000000127131307543307100253370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The SklarCopula distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SKLARCOPULA_HXX #define OPENTURNS_SKLARCOPULA_HXX #include "openturns/CopulaImplementation.hxx" #include "openturns/Distribution.hxx" #include "openturns/PersistentCollection.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SklarCopula * * The SklarCopula distribution. */ class OT_API SklarCopula : public CopulaImplementation { CLASSNAME; public: typedef PersistentCollection DistributionPersistentCollection; /** Default constructor */ SklarCopula(); /** Parameters constructor */ explicit SklarCopula(const Distribution & distribution); /** Comparison operator */ Bool operator ==(const SklarCopula & other) const; protected: Bool equals(const DistributionImplementation & other) const; public: /** String converter */ String __repr__() const; /* Interface inherited from Distribution */ /** Virtual constructor */ virtual SklarCopula * clone() const; /** Get one realization of the distribution */ Point getRealization() const; /** Get the DDF of the distribution */ using CopulaImplementation::computeDDF; Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ using CopulaImplementation::computePDF; Scalar computePDF(const Point & point) const; /** Get the CDF of the distribution */ using CopulaImplementation::computeCDF; Scalar computeCDF(const Point & point) const; /** Get the probability content of an interval */ Scalar computeProbability(const Interval & interval) const; /** Compute the survival function */ using CopulaImplementation::computeSurvivalFunction; Scalar computeSurvivalFunction(const Point & point) const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Compute the PDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalPDF; Scalar computeConditionalPDF(const Scalar x, const Point & y) const; /** Compute the CDF of Xi | X1, ..., Xi-1. x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalCDF; Scalar computeConditionalCDF(const Scalar x, const Point & y) const; /** Compute the quantile of Xi | X1, ..., Xi-1, i.e. x such that CDF(x|y) = q with x = Xi, y = (X1,...,Xi-1) */ using CopulaImplementation::computeConditionalQuantile; Scalar computeConditionalQuantile(const Scalar q, const Point & y) const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ using CopulaImplementation::getMarginal; Implementation getMarginal(const Indices & indices) const; /** Get the isoprobabilist transformation */ IsoProbabilisticTransformation getIsoProbabilisticTransformation() const; /** Get the inverse isoprobabilist transformation */ InverseIsoProbabilisticTransformation getInverseIsoProbabilisticTransformation() const; /** Get the standard distribution */ Implementation getStandardDistribution() const; /** Parameters value and description accessor */ PointWithDescriptionCollection getParametersCollection() const; /** Parameters value accessors */ void setParameter(const Point & parameters); Point getParameter() const; /** Parameters description accessor */ Description getParameterDescription() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Get the Kendall concordance of the distribution */ virtual CorrelationMatrix getKendallTau() const; /* Interface specific to SklarCopula */ /** Distribution accessor */ void setDistribution(const Distribution & distribution); Distribution getDistribution() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Compute the covariance of the copula */ void computeCovariance() const; /** The distribution from which the copula is extracted */ Distribution distribution_; /** The marginal distributions of the underlying distribution */ DistributionPersistentCollection marginalCollection_; private: }; /* class SklarCopula */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SKLARCOPULA_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/StandardEvent.hxx000066400000000000000000000033621307543307100256610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements an event based on a composite random vector whose * antecedent has a spherical distribution * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_STANDARDEVENT_HXX #define OPENTURNS_STANDARDEVENT_HXX #include "openturns/OTprivate.hxx" #include "openturns/RandomVector.hxx" #include "openturns/Event.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class StandardEvent * * The class that implements an event based on a composite random vector whose * antecedent has a spherical distribution */ class OT_API StandardEvent : public Event { CLASSNAME; public: /** Default constructor */ StandardEvent(); /** Constructor from RandomVector */ StandardEvent(const RandomVector & antecedent, const ComparisonOperator & op, const Scalar threshold); /** Constructor from Event */ StandardEvent(const Event & event); protected: private: }; /* class StandardEvent */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_STANDARDEVENT_HXX */ openturns-1.9/lib/src/Uncertainty/Model/openturns/UsualRandomVector.hxx000066400000000000000000000054561307543307100265420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An implementation class for distribution-based random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_USUALRANDOMVECTOR_HXX #define OPENTURNS_USUALRANDOMVECTOR_HXX #include "openturns/OTprivate.hxx" #include "openturns/RandomVectorImplementation.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class UsualRandomVector * * An implementation class for distribution-based random vectors */ class OT_API UsualRandomVector : public RandomVectorImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ explicit UsualRandomVector(const Distribution & distribution); /** Virtual constructor */ virtual UsualRandomVector * clone() const; /** String converter */ String __repr__() const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ UnsignedInteger getDimension() const; /** Realization accessor */ Point getRealization() const; /** Numerical sample accessor */ Sample getSample(const UnsignedInteger size) const; /** Mean accessor */ Point getMean() const; /** Covariance accessor */ CovarianceMatrix getCovariance() const; /** Get the random vector corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Distribution accessor */ Distribution getDistribution() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: friend class Factory; /** Default constructor */ UsualRandomVector() : RandomVectorImplementation() {}; private: /** The distribution the vector follows */ Distribution distribution_; }; /* class UsualRandomVector */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_USUALRANDOMVECTOR_HXX */ openturns-1.9/lib/src/Uncertainty/Process/000077500000000000000000000000001307543307100207035ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Process/ARMA.cxx000066400000000000000000000355511307543307100221600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the ARMA process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/ARMA.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Normal.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Collection.hxx" BEGIN_NAMESPACE_OPENTURNS typedef Collection< Complex > ComplexCollection; CLASSNAMEINIT(ARMA); static const Factory Factory_ARMA; ARMA::ARMA() : ProcessImplementation() , ARCoefficients_(0, 1) , MACoefficients_(0, 1) , noiseDistribution_(Normal()) , p_(0) , q_(0) , state_(Sample(0, 1), Sample(0, 1)) , hasComputedNThermalization_(true) , nThermalization_(2) { setDimension(1); thermalize(); setDescription(noiseDistribution_.getDescription()); } /* Standard constructor with coefficients and a White Noise */ ARMA::ARMA(const ARMACoefficients & ARCoefficients, const ARMACoefficients & MACoefficients, const WhiteNoise & whiteNoise) : ProcessImplementation() // Don't initialize these attributes before to check if they are valid // as they can be huge , ARCoefficients_() , MACoefficients_() , p_(ARCoefficients.getSize()) , q_(MACoefficients.getSize()) , state_() , hasComputedNThermalization_(false) , nThermalization_(0) { if (ARCoefficients_.getDimension() != MACoefficients_.getDimension()) throw InvalidArgumentException(HERE) << "Error: Incompatible dimensions for coefficients of AR part and MA part"; ARCoefficients_ = ARCoefficients; MACoefficients_ = MACoefficients; setDimension(ARCoefficients_.getDimension()); setWhiteNoise(whiteNoise); setDescription(noiseDistribution_.getDescription()); // This call checks that the given WhiteNoise is based on a RegularGrid setTimeGrid(whiteNoise.getTimeGrid()); // The default state is with null values and noises state_ = ARMAState(Sample(p_, dimension_), Sample(q_, dimension_)); // Thermalize thermalize(); } /* Standard constructor with coefficients, a White Noise and a state */ ARMA::ARMA(const ARMACoefficients & ARCoefficients, const ARMACoefficients & MACoefficients, const WhiteNoise & whiteNoise, const ARMAState & state) : ProcessImplementation() // Don't initialize these attributes before to check if they are valid // as they can be huge , ARCoefficients_() , MACoefficients_() , p_(ARCoefficients.getSize()) , q_(MACoefficients.getSize()) , state_() , hasComputedNThermalization_(false) , nThermalization_(0) { if (ARCoefficients_.getDimension() != MACoefficients_.getDimension()) throw InvalidArgumentException(HERE) << "Error: Incompatible dimensions for coefficients of AR part and MA part"; ARCoefficients_ = ARCoefficients; MACoefficients_ = MACoefficients; setDimension(ARCoefficients_.getDimension()); setWhiteNoise(whiteNoise); setDescription(noiseDistribution_.getDescription()); // This call checks that the given WhiteNoise is based on a RegularGrid setTimeGrid(whiteNoise.getTimeGrid()); setState(state); } /* Virtual constructor */ ARMA * ARMA::clone() const { return new ARMA(*this); } /* String converter */ String ARMA::__repr__() const { OSS oss; oss << "class= " << ARMA::GetClassName() << " timeGrid=" << RegularGrid(mesh_) << " coefficients AR=" << ARCoefficients_ << " coefficients MA=" << MACoefficients_ << " noiseDistribution= " << noiseDistribution_ << " state= " << state_ ; return oss; } String ARMA::__str__(const String & offset) const { OSS oss; oss << "ARMA("; // ARMA process for (UnsignedInteger d = 0; d < dimension_ ; ++d) { if (d > 0) oss << "\n"; // Writing d-th the marginal process oss << "X_{" << d << ",t}" ; // decomposition by number of elements for (UnsignedInteger i = 0; i < p_ ; i++) { for (UnsignedInteger dimensionComponent = 0; dimensionComponent < dimension_ ; ++dimensionComponent) { const Scalar ai = ARCoefficients_[i](d, dimensionComponent); if (ai > 0) oss << " + " << ai << " X_{" << dimensionComponent << ",t-" << i + 1 << "}"; if (ai < 0) oss << " - " << -ai << " X_{" << dimensionComponent << ",t-" << i + 1 << "}"; } } // MA part // with convention \epsilon_{t} + \sum_{i=1}^{q} \beta_{k} * \epsilon_{t-k} oss << " = " << "E_{" << d << ",t}"; // q - 1 first components for (UnsignedInteger i = 0; i < q_ ; ++i) { for (UnsignedInteger dimensionComponent = 0; dimensionComponent < dimension_ ; ++dimensionComponent) { const Scalar ai = MACoefficients_[i](d, dimensionComponent); if (ai > 0) oss << " + " << ai << " E_{" << dimensionComponent << ",t-" << i + 1 << "}"; if (ai < 0) oss << " - " << -ai << " E_{" << dimensionComponent << ",t-" << i + 1 << "}"; } } } oss << ", E_t ~ " << noiseDistribution_.__str__(offset) << ")"; return oss; } /* Is the underlying a Normal process ? */ Bool ARMA::isNormal() const { // The easy case: the distribution is an interface to // a Normal distribution if (noiseDistribution_.getImplementation()->getClassName() == "Normal") return true; // The hard case: the distribution has the properties of a Normal distribution return (noiseDistribution_.isElliptical() && noiseDistribution_.getStandardDistribution().hasIndependentCopula()); } /* Is the underlying a stationary process ? */ Bool ARMA::isStationary() const { // True since we consider stationary process only return true; } UnsignedInteger ARMA::computeNThermalization(const Scalar epsilon) const { if (!(epsilon > 0.0)) throw InvalidArgumentException(HERE) << "Error: epsilon must be positive, here epsilon=" << epsilon; // MA processes are always stationary. Just do q_ + 1 steps to forget // the initial noise values if (p_ == 0) return q_ + 1; // Companion matrix - Matrix is of size (dimension * p_) SquareMatrix matrix(dimension_ * p_); for (UnsignedInteger coefficientIndex = 0; coefficientIndex < p_ ; ++coefficientIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++ rowIndex) { for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++ columnIndex) { matrix( dimension_ * (p_ - 1) + rowIndex, coefficientIndex * dimension_ + columnIndex ) = -ARCoefficients_[p_ - 1 - coefficientIndex](rowIndex, columnIndex) ; } } } // Incorporation into the previous for loop for (UnsignedInteger index = 0; index < dimension_ * (p_ - 1); ++index) { matrix(index, dimension_ + index) = 1.0; } // Computation of EigenValues without keeping intact (matrix not used after) const ComplexCollection eigenValues(matrix.computeEigenValues(false)); // Find the largest eigenvalue module Scalar s = std::abs(eigenValues[0]); for (UnsignedInteger i = 1; i < eigenValues.getSize() ; ++i) s = std::max(s, std::abs(eigenValues[i])); // If the largest eigenvalue is not in the interior of the unit circle, the ARMA process is not stable if (!(s < 1.0)) throw InvalidArgumentException(HERE) << "Error: the ARMA process is not stationary with the given coefficients. Here, AR coefficients=" << ARCoefficients_ << " and MA coefficients=" << MACoefficients_ << " with largest eigenvalue s=" << s; return static_cast(ceil( log(epsilon) / log(s) ) ); } /* Nthermalization get accessor */ UnsignedInteger ARMA::getNThermalization() const { if (!hasComputedNThermalization_) { // Not yet in SpecFunc nThermalization_ = computeNThermalization(std::numeric_limits::epsilon()); hasComputedNThermalization_ = true; } return nThermalization_; } /* Nthermalization set accessor */ void ARMA::setNThermalization(const UnsignedInteger size) { nThermalization_ = size; hasComputedNThermalization_ = true; } // Compute the steps next values of the process starting from the current state. // The result is the current state extended steps date further ARMAState ARMA::computeReccurence(const UnsignedInteger stepNumber) const { // We extend the state by stepNumber points Sample result(state_.getX()); Sample epsilonValues(state_.getEpsilon()); // Pre-allocate the room for the stepNumber next values result.add(Sample(stepNumber, dimension_)); epsilonValues.add(noiseDistribution_.getSample(stepNumber)); // Consider : X_t = \sum_{i=0}^{p-1} A[i] * X_{t-i-1} + \sum_{i=0}^{q-1} B[i] * \epsilon_{t-i-1} + \epsilon_{t} // last observations organization: x[0] --> X_{-(p-1)}, x[1]-> X_{2-p} ... x[p-1] -> X_{-1} // coefficients organization: coeff[0]-> coeff_{t-1}, coeff[1] -> coeff_{t-2}.... for (UnsignedInteger t = 0; t < stepNumber ; ++t) { // Next value // initialization using the current noise value result[p_ + t] = epsilonValues[q_ + t]; // AR part computation : \sum_{i=0}^{p-1} A[i] * X_{t-i-1} for(UnsignedInteger i = 0; i < p_ ; ++i) result[p_ + t] -= ARCoefficients_[i] * result[(p_ - 1 + t) - i]; // MA part computation : \sum_{i=0}^{p-1} B[i] * \epsilon_{t-i-1} for(UnsignedInteger i = 0; i < q_ ; ++i) result[p_ + t] += MACoefficients_[i] * epsilonValues[(q_ - 1 + t) - i]; } return ARMAState(result, epsilonValues); } /* Thermalize : burn-in */ void ARMA::thermalize() const { // Check if the number of iterations nThermalize is known or compute it const UnsignedInteger stepNumber = getNThermalization(); // Go stepNumber steps further and use the result to update the current state setState(computeReccurence(stepNumber)); } /* Realization accessor */ Field ARMA::getRealization() const { // thermalize to "forget" the initial state --> change state thermalize(); // Get the size of the realization const UnsignedInteger size = RegularGrid(mesh_).getN(); // Go size steps further: newState contains (size + p_) X values and (q_ + size) epsilon values const ARMAState newState(computeReccurence(size)); // Update the current state setState(newState); // Use the X part of the newState to build the realization Sample values(newState.getX().split(p_)); values.setDescription(getDescription()); return Field(mesh_, values); } // Prediction of the futur of an ARMA process // possible futur changes TimeSeries ARMA::getFuture(const UnsignedInteger stepNumber) const { if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = RegularGrid(mesh_).getStep(); // The EndTime is not considered to be included in the TimeGrid const RegularGrid futurTimeGrid(RegularGrid(mesh_).getEnd(), timeStep, stepNumber); // Run the computation const ARMAState newState(computeReccurence(stepNumber)); return TimeSeries(futurTimeGrid, newState.getX().split(p_)); } /* Coefficients accessor : AR & MA */ ARMACoefficients ARMA::getARCoefficients() const { return ARCoefficients_; } /* Coefficients accessor : AR & MA */ ARMACoefficients ARMA::getMACoefficients() const { return MACoefficients_; } /* State accessor of the ARMA process */ ARMAState ARMA::getState() const { return state_; } void ARMA::setState(const ARMAState & state) const { Sample x(state.getX()); Sample epsilon(state.getEpsilon()); if (p_ > x.getSize()) throw InvalidArgumentException(HERE) << "Error: Size of coefficients of AR part is greater than the size of the last observed values"; if (q_ > epsilon.getSize()) throw InvalidArgumentException(HERE) << "Error: Size of coefficients of MA part is greater than the size of the last observed noise"; // Only the p_ last values of X and the q_ last values of epsilon are needed state_ = ARMAState(x.split(x.getSize() - p_), epsilon.split(epsilon.getSize() - q_)); } /* WhiteNoise accessor of the ARMA process */ WhiteNoise ARMA::getWhiteNoise() const { return WhiteNoise(noiseDistribution_, mesh_); } void ARMA::setWhiteNoise(const WhiteNoise & whiteNoise) { noiseDistribution_ = whiteNoise.getDistribution(); // Check if the given distribution has a null mean const Point mean(noiseDistribution_.getMean()); if (mean.norm() > ResourceMap::GetAsScalar("ARMA-MeanEpsilon")) throw InvalidArgumentException(HERE) << "Error: the given distribution has a mean=" << mean.__str__() << " which is not null."; } /* Get the random vector corresponding to the i-th marginal component */ ARMA::Implementation ARMA::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "Error: the index must be less than the output dimension"; if (getDimension() == 1) return clone(); throw NotYetImplementedException(HERE) << "In ARMA::getMarginal(const UnsignedInteger i) const"; } /* Get the marginal random vector corresponding to indices components */ ARMA::Implementation ARMA::getMarginal(const Indices & indices) const { if (!indices.check(dimension_)) throw InvalidArgumentException(HERE) << "The indices of a marginal process must be in the range [0, dim-1] and must be different"; throw NotYetImplementedException(HERE) << "In ARMA::getMarginal(const Indices & indices) const"; } /* Method save() stores the object through the StorageManager */ void ARMA::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "p_", p_); adv.saveAttribute( "q_", q_); adv.saveAttribute( "hasComputedNThermalization_", hasComputedNThermalization_ ); adv.saveAttribute( "nThermalization_", nThermalization_ ); adv.saveAttribute( "ARCoefficients_", ARCoefficients_); adv.saveAttribute( "MACoefficients_", MACoefficients_ ); adv.saveAttribute( "state_", state_ ); adv.saveAttribute( "noiseDistribution_", noiseDistribution_ ); } /* Method load() reloads the object from the StorageManager */ void ARMA::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "p_", p_); adv.loadAttribute( "q_", q_); adv.loadAttribute( "hasComputedNThermalization_", hasComputedNThermalization_ ); adv.loadAttribute( "nThermalization_", nThermalization_ ); adv.loadAttribute( "ARCoefficients_", ARCoefficients_); adv.loadAttribute( "MACoefficients_", MACoefficients_ ); adv.loadAttribute( "state_", state_ ); adv.loadAttribute( "noiseDistribution_", noiseDistribution_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ARMACoefficients.cxx000066400000000000000000000112121307543307100244660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ARMACoefficients class enables to stock coefficients of an ARMA process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< ARMACoefficients >); TEMPLATE_CLASSNAMEINIT(PersistentCollection< SquareMatrix >); static const Factory > Factory_PersistentCollection_SquareMatrix; CLASSNAMEINIT(ARMACoefficients); static const Factory Factory_ARMACoefficients; /* Default constructor */ ARMACoefficients::ARMACoefficients(const UnsignedInteger & size, const UnsignedInteger & dimension) : PersistentCollection(size, SquareMatrix(dimension) ) , dimension_(dimension) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Error: dimension should be at least 1"; } /* Standard constructor */ ARMACoefficients::ARMACoefficients(const SquareMatrixCollection & collection) : PersistentCollection(0) { // Adding elements one by one and checking coherance of dimension const UnsignedInteger collectionSize = collection.getSize(); if (collectionSize == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an ARMACoefficients object based on an empty collection of matrices."; dimension_ = collection[0].getDimension(); add(collection[0]); for (UnsignedInteger i = 1; i < collectionSize; ++i) if (collection[i].getDimension() == dimension_) add(collection[i]); } /* Default constructor */ ARMACoefficients::ARMACoefficients(const Point & scalarCoefficients) : PersistentCollection(scalarCoefficients.getSize(), SquareMatrix(1)) { dimension_ = 1; for (UnsignedInteger i = 0 ; i < getSize() ; ++i ) (*this)[i](0, 0) = scalarCoefficients[i]; } /* constructor using polynomial */ ARMACoefficients::ARMACoefficients(const UniVariatePolynomial & polynomial) : PersistentCollection(polynomial.getDegree() + 1, SquareMatrix(1)) { dimension_ = 1; const Point coefficients(polynomial.getCoefficients()); for (UnsignedInteger i = 0 ; i < getSize() ; ++i ) (*this)[i](0, 0) = coefficients[i]; } /* Virtual constructor - clone*/ ARMACoefficients * ARMACoefficients::clone() const { return new ARMACoefficients(*this); } /* String converter */ String ARMACoefficients::__repr__() const { OSS oss(true); oss << "class=" << ARMACoefficients::GetClassName(); for (UnsignedInteger i = 0; i < getSize(); ++i) oss << ", shift=" << i << ", value=" << (*this)[i]; return oss; } String ARMACoefficients::__str__(const String & offset) const { OSS oss(false); for (UnsignedInteger i = 0; i < getSize(); ++i) oss << offset << "shift = " << i << "\n" << offset << (*this)[i].__str__(offset) << "\n"; return oss; } /* Dimension accessor */ UnsignedInteger ARMACoefficients::getDimension() const { return dimension_; } /** Redefinition of add method : control of SquareMatrix sizes */ void ARMACoefficients::add(const SquareMatrix & matrix) { if (matrix.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Could not add the coefficient. Incompatible dimension with the elements of collection"; PersistentCollection::add(matrix); } void ARMACoefficients::add(const Scalar scalar) { if (dimension_ != 1) throw InvalidArgumentException(HERE) << "Could not add the coefficient. The dimension is greater than 1."; PersistentCollection::add(SquareMatrix(1, Point(1, scalar))); } /* Method save() stores the object through the StorageManager */ void ARMACoefficients::save(Advocate & adv) const { PersistentCollection::save( adv ); } /* Method load() reloads the object from the StorageManager */ void ARMACoefficients::load(Advocate & adv) { PersistentCollection::load( adv ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ARMAFactory.cxx000066400000000000000000000047041307543307100235040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class that implements all random vectors * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ARMAFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ARMAFactory); /* Default constructor */ ARMAFactory::ARMAFactory() : TypedInterfaceObject(new ARMAFactoryImplementation()) { // Nothing to do } /* Parameters constructor */ ARMAFactory::ARMAFactory(const ARMAFactoryImplementation & implementation) : TypedInterfaceObject(implementation.clone()) { // Nothing to do } /* Constructor from implementation */ ARMAFactory::ARMAFactory(const Implementation & p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Constructor from implementation pointer */ ARMAFactory::ARMAFactory(ARMAFactoryImplementation * p_implementation) : TypedInterfaceObject(p_implementation) { // Nothing to do } /* Virtual constructor */ ARMAFactory * ARMAFactory::clone() const { return new ARMAFactory(*this); } /* String converter */ String ARMAFactory::__repr__() const { OSS oss(true); oss << "class=" << GetClassName() << " implementation=" << getImplementation()->__repr__(); return oss; } /* String converter */ String ARMAFactory::__str__(const String & offset) const { return __repr__(); } /* Build method */ ARMA ARMAFactory::build(const TimeSeries & timeSeries) const { return getImplementation()->build(timeSeries); } /* Build method */ ARMA ARMAFactory::build(const ProcessSample & sample) const { return getImplementation()->build(sample); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ARMAFactoryImplementation.cxx000066400000000000000000000121011307543307100264000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ARMAFactoryImplementation.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ARMAFactoryImplementation); static const Factory Factory_ARMAFactoryImplementation; /* Default constructor */ ARMAFactoryImplementation::ARMAFactoryImplementation() : PersistentObject() , p_(0) , currentP_(0) , q_(0) , currentQ_(0) , invertible_(true) { // Nothing to do } /* Parameter constructor */ ARMAFactoryImplementation::ARMAFactoryImplementation(const UnsignedInteger p, const UnsignedInteger q, const Bool invertible) : PersistentObject() , p_(1, p) , currentP_(p) , q_(1, q) , currentQ_(q) , invertible_(invertible) { // Nothing to do } /* Parameter constructor */ ARMAFactoryImplementation::ARMAFactoryImplementation(const Indices & p, const Indices & q, const Bool invertible) : PersistentObject() , p_(p) , currentP_(0) , q_(q) , currentQ_(0) , invertible_(invertible) { // Nothing to do } /* Virtual constructor */ ARMAFactoryImplementation * ARMAFactoryImplementation::clone() const { return new ARMAFactoryImplementation(*this); } /* P accessor */ Indices ARMAFactoryImplementation::getP() const { return p_; } void ARMAFactoryImplementation::setP(const Indices & ARIndices) { p_ = ARIndices; } UnsignedInteger ARMAFactoryImplementation::getCurrentP() const { return currentP_; } void ARMAFactoryImplementation::setCurrentP(const UnsignedInteger p) const { currentP_ = p; } /* Q accessor */ Indices ARMAFactoryImplementation::getQ() const { return q_; } void ARMAFactoryImplementation::setQ(const Indices & MAIndices) { q_ = MAIndices; } UnsignedInteger ARMAFactoryImplementation::getCurrentQ() const { return currentQ_; } void ARMAFactoryImplementation::setCurrentQ(const UnsignedInteger q) const { currentQ_ = q; } /* Invertibility accessor */ Bool ARMAFactoryImplementation::getInvertible() const { return invertible_; } void ARMAFactoryImplementation::setInvertible(const Bool invertible) { invertible_ = invertible; } /* String converter */ String ARMAFactoryImplementation::__repr__() const { OSS oss; oss << "class= " << ARMAFactoryImplementation::GetClassName() << " p=" << p_ << " current p=" << currentP_ << " q=" << q_ << " current q=" << currentQ_ << " invertible=" << invertible_; return oss; } /* String converter */ String ARMAFactoryImplementation::__str__(const String & offset) const { OSS oss; oss << "class= " << ARMAFactoryImplementation::GetClassName() << " p=" << p_ << " q=" << q_ << " invertible=" << invertible_; return oss; } /* Build method */ ARMA ARMAFactoryImplementation::build(const TimeSeries & timeSeries) const { throw NotYetImplementedException(HERE) << "In ARMAFactoryImplementation::build(const TimeSeries & timeSeries) const"; } ARMA ARMAFactoryImplementation::build(const TimeSeries & timeSeries, Point & informationCriteria) const { throw NotYetImplementedException(HERE) << "In ARMAFactoryImplementation::build(const TimeSeries & timeSeries, Point & informationCriteria) const"; } /* Build method */ ARMA ARMAFactoryImplementation::build(const ProcessSample & sample) const { throw NotYetImplementedException(HERE) << "In ARMAFactoryImplementation::build(const ProcessSample & sample) const"; } ARMA ARMAFactoryImplementation::build(const ProcessSample & sample, Point & informationCriteria) const { throw NotYetImplementedException(HERE) << "In ARMAFactoryImplementation::build(const ProcessSample & sample, Point & informationCriteria) const"; } /* Method save() stores the object through the StorageManager */ void ARMAFactoryImplementation::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "p_", p_ ); adv.saveAttribute( "q_", q_ ); adv.saveAttribute( "invertible_", invertible_ ); } /* Method load() reloads the object from the StorageManager */ void ARMAFactoryImplementation::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "p_", p_ ); adv.loadAttribute( "q_", q_ ); adv.loadAttribute( "invertible_", invertible_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ARMALikelihoodFactory.cxx000066400000000000000000001561351307543307100255160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ARMALikelihoodFactory makes an estimate of a multivariate ARMA model from data * using a maximization of the likelihood function. We use here some articles of J.A.Mauricio (http://www.ucm.es/info/ecocuan/jam/) * to use an efficient method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ARMALikelihoodFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Log.hxx" #include "openturns/Normal.hxx" #include "openturns/WhittleFactory.hxx" #include "openturns/Lapack.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Cobyla.hxx" #include "openturns/MethodBoundEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ARMALikelihoodFactory); static const Factory Factory_ARMALikelihoodFactory; static int modifiedCholeskyDecomposition(SquareMatrix &matrix, Scalar epsilon); /* Default constructor */ ARMALikelihoodFactory::ARMALikelihoodFactory() : ARMAFactoryImplementation() , currentG_() , w_() , dimension_(1) , covarianceMatrix_() , autoCovariance_() , crossCovariance_() , blockPhiTThetaTMatrix_() , sigma2_(1.0) , hasInitializedARCoefficients_(false) , hasInitializedMACoefficients_(false) , hasInitializedCovarianceMatrix_(false) , verbose_(false) , solver_(new Cobyla()) { // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); } /* Standard constructor */ ARMALikelihoodFactory::ARMALikelihoodFactory(const UnsignedInteger p, const UnsignedInteger q, const UnsignedInteger dimension, const Bool invertible) : ARMAFactoryImplementation(p, q, invertible) , currentG_() , w_() , dimension_() , covarianceMatrix_() , autoCovariance_() , crossCovariance_() , blockPhiTThetaTMatrix_() , sigma2_(1.0) , hasInitializedARCoefficients_(false) , hasInitializedMACoefficients_(false) , hasInitializedCovarianceMatrix_(false) , verbose_(false) , solver_(new Cobyla()) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Error : dimension could not be zero" ; dimension_ = dimension; // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); if ((p != 0) || (q != 0)) { currentP_ = p; currentQ_ = q; } else { throw InvalidArgumentException(HERE) << "Error : both AR and MA sizes are null"; } // Initializing - With this constructor, no exploration of several configurations initialize(); } /* Parameter constructor */ ARMALikelihoodFactory::ARMALikelihoodFactory(const Indices & p, const Indices & q, const UnsignedInteger dimension, const Bool invertible) : ARMAFactoryImplementation(p, q, invertible) , currentG_() , w_() , dimension_() , covarianceMatrix_() , autoCovariance_() , crossCovariance_() , blockPhiTThetaTMatrix_() , sigma2_(1.0) , hasInitializedARCoefficients_(false) , hasInitializedMACoefficients_(false) , hasInitializedCovarianceMatrix_(false) , verbose_(false) , solver_(new Cobyla()) { if (dimension == 0) throw InvalidArgumentException(HERE) << "Error : dimension could not be zero" ; dimension_ = dimension; // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); } void ARMALikelihoodFactory::initialize() { // Initializing matrices depending on the couple (p, q) and dimension blockPhiTThetaTMatrix_ = Matrix(dimension_ * (currentP_ + currentQ_), dimension_); currentG_ = std::max(currentP_, currentQ_); covarianceMatrix_ = CovarianceMatrix(dimension_); // Set up the booleans to false since reallocation has been done hasInitializedARCoefficients_ = false; hasInitializedMACoefficients_ = false; hasInitializedCovarianceMatrix_ = false; } /* Virtual constructor */ ARMALikelihoodFactory * ARMALikelihoodFactory::clone() const { return new ARMALikelihoodFactory(*this); } /* Compute the log-likelihood function */ Scalar ARMALikelihoodFactory::computeLogLikelihood(const Point & beta) const { // beta regroups all unknown parameters : // p square matrices of dimension m (AR part) ==> m * m * p scalar coefficients // q square matrices of dimension m (MA part) ==> m * m * q scalar coefficients // 1 covariance matrix ==> m * (m + 1) / 2 scalar coefficients // 1 scalar parameter sigma2 // Total number of unknowns is m * (m * (p + q) + 0.5 * (m + 1)) + 1 // Set the coefficients and covariance matrix from input // beta has for size n = (p + q) * dimension * dimension + dimension * (dimension + 1) /2 + 1 // The first (p + q) * dimension * dimension elements correspond to the block phi and theta (blockPhiTThetaTMatrix_) // the next dimension * (dimension + 1) /2 correspond to the covariance matrix) // final scalar corresponds to sigma2 UnsignedInteger currentIndex = 0; for (UnsignedInteger k = 0; k < currentP_; ++k) { for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { // \phi_{k}(i,j) blockPhiTThetaTMatrix_(k * dimension_ + j, i) = beta[currentIndex]; currentIndex += 1; } } } for (UnsignedInteger k = 0; k < currentQ_; ++k) { for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { // \theta_{k}(i,j) blockPhiTThetaTMatrix_((k + currentP_) * dimension_ + j, i) = beta[currentIndex]; currentIndex += 1; } } } for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { // cov(i,j) covarianceMatrix_(i, j) = beta[currentIndex]; currentIndex += 1; } } // sigma2 parameters sigma2_ = beta[currentIndex]; covarianceMatrixCholesky_ = covarianceMatrix_.computeCholesky(); covarianceMatrixCholeskyInverse_ = SquareMatrix(dimension_); Point rhs(dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) { rhs[j] = 0.0; covarianceMatrixCholeskyInverse_(j, i) = 0.0; } rhs[i] = 1.0; // Solve the linear system rhs[0] /= covarianceMatrixCholesky_(0, 0); for (UnsignedInteger k = 1; k < dimension_; ++k) { Scalar value = 0.0; for (UnsignedInteger l = 0; l < k; ++l) { value += covarianceMatrixCholesky_(k, l) * rhs[l]; } rhs[k] = (rhs[k] - value) / covarianceMatrixCholesky_(k, k); } for (UnsignedInteger j = i; j < dimension_; ++j) { covarianceMatrixCholeskyInverse_(j, i) = rhs[j]; } } if (currentP_ > 0) { computeCrossCovarianceMatrix(); computeAutocovarianceMatrix(); } // Methods depending on both time series and coefficients // Assemble \Sigma, compute its cholesky factor and its determinant // In case of q = 0, computation of two factor matrices of size p * dimension_ then assemble them into the choleskyFactor matrix // Step (c): Compute the symmetric matrix of size (currentG_ * dimension_) V1 * \Omega * V1^{T} // and perform its Cholesky decomposition SquareMatrix matV1_Omega_V1TCholesky(computeV1_Omega_V1T_Cholesky()); // Step (d): Compute the \xi matrices and premultiply by R = Q1^{-1} Matrix rxi(computeRXi()); // Step (e): Compute the n vectors \eta_{i} = R a_{0,i}, i = 1, 2, ..., n-1 Matrix eta(computeEta()); // Step (f): Compute h vectors and premultiply them by M^{T} Point vector_h(computeVectorh(rxi, eta, matV1_Omega_V1TCholesky)); // Step (g): Compute the symmetric matrix of size (dimension_ * currentG_) H^{T} H SymmetricMatrix matrix_HTH(computeHTH(rxi)); // Step (h): Compute the symmetric matrix (I + M^{T} H^{T} H M) CovarianceMatrix cov_I_MTHTHM(computeI_MTHTHM(matrix_HTH, matV1_Omega_V1TCholesky)); // and its Cholesky decomposition SquareMatrix matrix_L(cov_I_MTHTHM.computeCholesky()); // Step (i): Solve L \lambda = M^{T} h = vector_h vector_h[0] /= matrix_L(0, 0); for (UnsignedInteger i = 1; i < currentG_ * dimension_; ++i) { Scalar value = 0.0; for (UnsignedInteger j = 0; j < i; ++j) { value += matrix_L(i, j) * vector_h[j]; } vector_h[i] = (vector_h[i] - value) / matrix_L(i, i); } // Step (j): Compute \eta^{T} \eta - \lambda^{T} \lambda Scalar norm1 = 0.0; const UnsignedInteger size = w_.getSize(); for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < size; ++j) { norm1 += eta(i, j) * eta(i, j); } } Scalar normSquare = vector_h.normSquare(); Scalar f1 = norm1 - normSquare; // Step (k): compute the exact log-likelihood Scalar determinantL = 1.0; for (UnsignedInteger i = 0; i < currentG_ * dimension_; ++i) { determinantL *= matrix_L(i, i); } Scalar logLikelihood = 0.0; const Scalar n = static_cast(w_.getSize()); const Scalar fullSize = static_cast(dimension_ * n); const Scalar lg2pi = log(2.0 * M_PI); const Scalar detQ = covarianceMatrix_.computeDeterminant(); logLikelihood = -0.5 * (fullSize * (lg2pi + log(sigma2_)) + n * log(detQ) + 2.0 * log(determinantL) + f1 / sigma2_); return logLikelihood; } /* Compute the log-likelihood constraint */ Point ARMALikelihoodFactory::computeLogLikelihoodInequalityConstraint(const Point & beta) const { const Scalar epsilon = ResourceMap::GetAsScalar("ARMALikelihoodFactory-RootEpsilon"); Point result(nbInequalityConstraint_, 0.0); UnsignedInteger constraintIndex = 0; UnsignedInteger currentIndex = 0; // If not pure MA, check the eigenValues of the AR polynom if (currentP_ > 0) { // Companion matrix - Matrix is of size (dimension * p_) SquareMatrix matrix(dimension_ * currentP_); for (UnsignedInteger coefficientIndex = 0; coefficientIndex < currentP_ ; ++coefficientIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++ rowIndex) { for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++ columnIndex) { matrix( dimension_ * (currentP_ - 1) + rowIndex, coefficientIndex * dimension_ + columnIndex ) = beta[currentIndex] ; ++currentIndex; } } } // Incorporation into the previous for loop for (UnsignedInteger index = 0; index < dimension_ * (currentP_ - 1); ++index) { matrix(index, dimension_ + index) = 1.0; } // Computation of EigenValues without keeping intact (matrix not used after) const Collection eigenValues(matrix.computeEigenValues(false)); // Find the largest eigenvalue module Scalar s = std::norm(eigenValues[0]); for (UnsignedInteger i = 1; i < eigenValues.getSize() ; ++i) s = std::max(s, std::norm(eigenValues[i])); // If the largest eigenvalue is not in the interior of the unit circle, the ARMA process is not stable result[constraintIndex] = 1.0 - std::sqrt(s) - epsilon; ++constraintIndex; } // If invertible and not pure AR, check the eigenValues of the MA polynom if (invertible_ && currentQ_ > 0) { // Companion matrix - Matrix is of size (dimension * p_) SquareMatrix matrix(dimension_ * currentQ_); for (UnsignedInteger coefficientIndex = 0; coefficientIndex < currentQ_ ; ++coefficientIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++ rowIndex) { for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++ columnIndex) { matrix( dimension_ * (currentQ_ - 1) + rowIndex, coefficientIndex * dimension_ + columnIndex ) = beta[currentIndex]; ++currentIndex; } } } // Incorporation into the previous for loop for (UnsignedInteger index = 0; index < dimension_ * (currentQ_ - 1); ++index) { matrix(index, dimension_ + index) = 1.0; } // Computation of EigenValues without keeping intact (matrix not used after) const Collection eigenValues(matrix.computeEigenValues(false)); // Find the largest eigenvalue module Scalar s = std::norm(eigenValues[0]); for (UnsignedInteger i = 1; i < eigenValues.getSize() ; ++i) s = std::max(s, std::norm(eigenValues[i])); // If the largest eigenvalue is not in the interior of the unit circle, criteria is not respected result[constraintIndex] = 1.0 - std::sqrt(s) - epsilon; ++constraintIndex; } // Check the positive character of the matrix CovarianceMatrix covarianceMatrix(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { covarianceMatrix(i, j) = beta[currentIndex]; currentIndex += 1; } } // Computation of EigenValues without keeping intact (matrix not used after) const Point eigenValues(covarianceMatrix.computeEigenValues(false)); // Find the largest eigenvalue module Scalar s = eigenValues[0]; for (UnsignedInteger i = 1; i < eigenValues.getSize() ; ++i) s = std::min(s, eigenValues[i]); // Constrain is that the min eigenvalue upper than 0 result[constraintIndex] = s - epsilon; return result; } /* Compute the log-likelihood function accessor */ Function ARMALikelihoodFactory::getLogLikelihoodFunction() const { return bindMethod ( *this, &ARMALikelihoodFactory::computeLogLikelihood, inputDimension_, 1); } /* Compute the log-likelihood constraint accessor */ Function ARMALikelihoodFactory::getLogLikelihoodInequalityConstraint() const { return bindMethod ( *this, &ARMALikelihoodFactory::computeLogLikelihoodInequalityConstraint, inputDimension_ , nbInequalityConstraint_); } /* Initialize optimization solver parameter using the ResourceMap */ void ARMALikelihoodFactory::initializeCobylaSolverParameter() { Cobyla* cobyla = dynamic_cast(solver_.getImplementation().get()); if (cobyla == NULL) throw InternalException(HERE); cobyla->setRhoBeg(ResourceMap::GetAsScalar("ARMALikelihoodFactory-DefaultRhoBeg")); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("ARMALikelihoodFactory-DefaultRhoEnd")); solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("ARMALikelihoodFactory-DefaultMaxFun")); } /* Optimization solver accessor */ OptimizationAlgorithm ARMALikelihoodFactory::getOptimizationAlgorithm() const { return solver_; } void ARMALikelihoodFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm ARMALikelihoodFactory::getOptimizationSolver() const { Log::Warn(OSS() << "ARMALikelihoodFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void ARMALikelihoodFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "ARMALikelihoodFactory::getOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } // in-place Cholesky decomposition int modifiedCholeskyDecomposition(SquareMatrix &matrix, Scalar epsilon) { const UnsignedInteger n = matrix.getDimension(); Scalar maxSqrtDiag = std::sqrt(std::abs(matrix(0, 0))); for (UnsignedInteger j = 1; j < n; ++j) { maxSqrtDiag = std::max(maxSqrtDiag, std::sqrt(std::abs(matrix(j, j)))); } // The diagonal elements are too small if (maxSqrtDiag * maxSqrtDiag < epsilon) { matrix = SquareMatrix(n); return 1; } const Scalar minValue = maxSqrtDiag * std::sqrt(epsilon); for (UnsignedInteger j = 0; j < n; ++j) { Scalar value = matrix(j, j); for (UnsignedInteger i = 0; i < j; ++i) { value -= matrix(j, i) * matrix(j, i); } if (value < - minValue) return 1; matrix(j, j) = value; Scalar minJ = 0.0; for (UnsignedInteger i = j + 1; i < n; ++i) { value = matrix(j, i); for (UnsignedInteger k = 0; k < j; ++k) { value -= matrix(i, k) * matrix(j, k); } matrix(i, j) = value; if (std::abs(matrix(i, j)) > minJ) minJ = std::abs(matrix(i, j)); } if (minJ / maxSqrtDiag > 0.0) { minJ /= maxSqrtDiag; } else { minJ = 0.0; } if (matrix(j, j) > minJ * minJ) { matrix(j, j) = std::sqrt(matrix(j, j)); } else { if (minJ < minValue) minJ = minValue; matrix(j, j) = minJ; } for (UnsignedInteger i = j + 1; i < n; ++i) { matrix(i, j) /= matrix(j, j); } } for (UnsignedInteger j = 1; j < n; ++j) { for (UnsignedInteger i = 0; i < j; ++i) { matrix(i, j) = 0.0; } } return 0; } /* String converter */ String ARMALikelihoodFactory::__repr__() const { OSS oss(true); oss << "class=" << ARMALikelihoodFactory::GetClassName() << " implementation=" << ARMAFactoryImplementation::__repr__() << " dimension=" << dimension_ ; return oss; } /* String converter */ String ARMALikelihoodFactory::__str__(const String & offset) const { return this->__repr__(); } /* Verbosity accessor */ Bool ARMALikelihoodFactory::getVerbose() const { return verbose_; } void ARMALikelihoodFactory::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Build method */ ARMA ARMALikelihoodFactory::build(const TimeSeries & timeSeries) const { // Currently the implementation of the factory bases on m estimations of univariate models, m is the dimension of the // above time series // Define Optimization problem (Maximization) OptimizationProblem problem; problem.setMinimization(false); // Checking the size of time series if (timeSeries.getSize() < currentG_) throw InvalidArgumentException(HERE) << "Error : expected time series of size greater than " << currentG_; // passing time series to log likelihood function w_ = timeSeries; const UnsignedInteger dimension = w_.getDimension(); if (dimension != dimension_) throw InvalidDimensionException(HERE) << "Error : expected time series of dimension " << dimension_ << " here time series is of dimension " << dimension; if (dimension_ == 1) return WhittleFactory(currentP_, currentQ_).build(timeSeries); // Calling the default initilization if no coefficients have been initialized if ((!hasInitializedARCoefficients_) || (!hasInitializedMACoefficients_) || (!hasInitializedCovarianceMatrix_)) defaultInitialize(); int n((currentP_ + currentQ_) * dimension_ * dimension_ + dimension_ * (dimension_ + 1) / 2 + 1); // constraints count. At least, check the covariance character int m(1); // Check the minimum eigenvalue module of the AR polynom only if not pure MA process if (currentP_ > 0) ++m; // Check the minimum eigenvalue module of the MA polynom only if not pure AR process and if invertible if (invertible_ && currentQ_ > 0) ++m; // Current parameters vector \beta Point beta(n); UnsignedInteger currentIndex = 0; for (UnsignedInteger k = 0; k < currentP_; ++k) { for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { beta[currentIndex] = blockPhiTThetaTMatrix_(k * dimension_ + j, i); currentIndex += 1; } } } for (UnsignedInteger k = 0; k < currentQ_; ++k) { for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { beta[currentIndex] = blockPhiTThetaTMatrix_((k + currentP_) * dimension_ + j, i); currentIndex += 1; } } } for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { // Openturns conventions about ARMA are different from those in Mauricio's papers. // Moreover in order to improve matrix-matrix computation, transpose matrices are // stored in blockPhiTThetaTMatrix_. beta[currentIndex] = covarianceMatrix_(i, j); currentIndex += 1; } } // initial sigma2 beta[currentIndex] = sigma2_; // use attributes to pass the data nbInequalityConstraint_ = m; inputDimension_ = n; // Define Objective and Constraint functions for Optimization problem problem.setObjective(getLogLikelihoodFunction()); problem.setInequalityConstraint(getLogLikelihoodInequalityConstraint()); solver_.setProblem(problem); solver_.setStartingPoint(beta); // run Optimization problem solver_.run(); // optimal point const Point optpoint(solver_.getResult().getOptimalPoint()); beta = optpoint; // Return result currentIndex = 0; ARMACoefficients phi(currentP_, dimension_); for (UnsignedInteger k = 0; k < currentP_; ++k) { SquareMatrix phi_k(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { phi_k(i, j) = - beta[currentIndex]; ++currentIndex; } } phi[k] = phi_k; } ARMACoefficients theta(currentQ_, dimension_); for (UnsignedInteger k = 0; k < currentQ_; ++k) { SquareMatrix theta_k(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { theta_k(i, j) = - beta[currentIndex]; ++currentIndex; } } theta[k] = theta_k; } CovarianceMatrix cov(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { cov(i, j) = beta[currentIndex]; ++currentIndex; } } sigma2_ = beta[currentIndex]; for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { cov(i, j) *= sigma2_; ++currentIndex; } } const Normal distribution(Point(dimension_), cov); const RegularGrid timeGrid(timeSeries.getTimeGrid()); const WhiteNoise whiteNoise(distribution, timeGrid); return ARMA(phi, theta, whiteNoise); } /* Build method */ ARMA ARMALikelihoodFactory::build(const ProcessSample & sample) const { throw NotYetImplementedException(HERE) << "In ARMALikelihoodFactory::build(const ProcessSample & sample) const"; } // Set accessor for starting point of the optimization void ARMALikelihoodFactory::setInitialARCoefficients(const ARMACoefficients & phi) { if (phi.getDimension() != dimension_) throw InvalidDimensionException(HERE) << "Error; dimension of the AR coefficients is not coherent"; if (phi.getSize() != currentP_) throw InvalidDimensionException(HERE) << "Error; size of the AR coefficients is not coherent"; for (UnsignedInteger k = 0; k < currentP_; ++k) { for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) { // Openturns conventions about ARMA are different from those in Mauricio's papers. // Moreover in order to improve matrix-matrix computation, transpose matrices are // stored in blockPhiTThetaTMatrix_. blockPhiTThetaTMatrix_(k * dimension_ + j, i) = - phi[k](i, j); } } } hasInitializedARCoefficients_ = true; } /* Run the default initilization of coefficients / covariance for the optimization */ void ARMALikelihoodFactory::defaultInitialize() const { // Launch d times the WhittleFactory to get initial conditions for the optimization problem WhittleFactory factory(currentP_, currentQ_); const Sample values(w_.getSample()); const RegularGrid timeGrid(w_.getTimeGrid()); for (UnsignedInteger d = 0; d < dimension_; ++d) { // Univariate estimate const TimeSeries marginal_d(timeGrid, values.getMarginal(d)); ARMA marginalARMAModel(factory.build(marginal_d)); const WhiteNoise whiteNoise(marginalARMAModel.getWhiteNoise()); const Scalar sigma = whiteNoise.getDistribution().getStandardDeviation()[0]; covarianceMatrix_(d, d) = sigma * sigma; const ARMACoefficients arCoefficients(marginalARMAModel.getARCoefficients()); const ARMACoefficients maCoefficients(marginalARMAModel.getMACoefficients()); // fill the coefficients for (UnsignedInteger k = 0; k < currentP_; ++k) { const Scalar value = arCoefficients[k](0, 0); blockPhiTThetaTMatrix_(k * dimension_ + d, d) = -value; } for (UnsignedInteger k = 0; k < currentQ_; ++k) { const Scalar value = maCoefficients[k](0, 0); blockPhiTThetaTMatrix_((currentP_ + k) * dimension_ + d, d) = -value; } } // Init done hasInitializedARCoefficients_ = true; hasInitializedMACoefficients_ = true; hasInitializedCovarianceMatrix_ = true; } void ARMALikelihoodFactory::setInitialMACoefficients(const ARMACoefficients & theta) { if (theta.getDimension() != dimension_) throw InvalidDimensionException(HERE) << "Error; dimension of the MA coefficients is not coherent"; if (theta.getSize() != currentQ_) throw InvalidDimensionException(HERE) << "Error; size of the MA coefficients is not coherent"; for (UnsignedInteger k = 0; k < currentQ_; ++k) { for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) { // Openturns conventions about ARMA are different from those in Mauricio's papers // Moreover in order to improve matrix-matrix computation, transpose matrices are // stored in blockPhiTThetaTMatrix_. blockPhiTThetaTMatrix_((currentP_ + k) * dimension_ + j, i) = - theta[k](i, j); } } } hasInitializedMACoefficients_ = true; } void ARMALikelihoodFactory::setInitialCovarianceMatrix(const CovarianceMatrix & covarianceMatrix) { if (covarianceMatrix.getDimension() != covarianceMatrix_.getDimension()) throw InvalidDimensionException(HERE) << "Error; dimension of the covariance matrix is not coherent"; covarianceMatrix_ = covarianceMatrix; hasInitializedCovarianceMatrix_ = true; } // Global set initial starting point method void ARMALikelihoodFactory::setInitialConditions(const ARMACoefficients & arCoefficients, const ARMACoefficients & maCoefficients, const CovarianceMatrix & covarianceMatrix) { setInitialARCoefficients(arCoefficients); setInitialMACoefficients(maCoefficients); setInitialCovarianceMatrix(covarianceMatrix); } ARMACoefficients ARMALikelihoodFactory::getInitialARCoefficients() const { // Openturns conventions about ARMA are different from those in Mauricio's papers // Moreover in order to improve matrix-matrix computation, transpose matrices are // stored in blockPhiTThetaTMatrix_. ARMACoefficients phi(currentP_, dimension_); for (UnsignedInteger k = 0; k < currentP_; ++k) { SquareMatrix phi_k(phi[k]); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { phi_k(i, j) = - blockPhiTThetaTMatrix_(k * dimension_ + j, i); } } phi[k] = phi_k; } return phi; } ARMACoefficients ARMALikelihoodFactory::getInitialMACoefficients() const { // Openturns conventions about ARMA are different from those in Mauricio's papers // Moreover in order to improve matrix-matrix computation, transpose matrices are // stored in blockPhiTThetaTMatrix_. ARMACoefficients theta(currentQ_, dimension_); for (UnsignedInteger k = 0; k < currentQ_; ++k) { SquareMatrix theta_k(dimension_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { theta_k(i, j) = - blockPhiTThetaTMatrix_((currentP_ + k) * dimension_ + j, i); } } theta[k] = theta_k; } return theta; } CovarianceMatrix ARMALikelihoodFactory::getInitialCovarianceMatrix() const { return covarianceMatrix_; } /* Compute the cross-covariance matrix - This method is public for validation purposes */ void ARMALikelihoodFactory::computeCrossCovarianceMatrix() const { // This method aims at computing the theoretical cross covariance matrix // It is based on the article of J.A.Mauricio // The result matrix crossCovariance_ is a matrix of size (dimension, (max(1,q) * dimension)) // It contains \Lambda_0, \Lambda_{-1},...,\Lambda_{1-q} // Allocate size for cross covariance matrix // \Lambda_{0}, \Lambda_{-1},..., \Lambda_{1-q} // If q = 0 or 1, the only matrix to compute is \Lambda_0 const UnsignedInteger one = 1; const UnsignedInteger size = std::max(one, currentQ_); crossCovariance_ = Matrix(dimension_, dimension_ * size); // \Lambda_0 is \Sigma for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = j; i < dimension_; ++i) { crossCovariance_(i, j) = covarianceMatrix_(i, j); crossCovariance_(j, i) = covarianceMatrix_(i, j); } } // Computation of \Lambda_{-k} = - \theta_{k} * \Sigma + \sum_{l=1}^{k} \phi_{l} * \Lambda_{l-k} // for k = 1,2,...,q-1 if (currentQ_ > 1) { for (UnsignedInteger k = 1; k <= currentQ_ - 1; ++k) { // Convention : \phi_{l} = 0 for l > p // So we compute \phi_{l} * \Lambda_{l-k} only for l <= k and l <= p const UnsignedInteger lMax = std::min(k, currentP_); for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { // - \theta_{k} * \Sigma in the article Scalar value = 0.0; for (UnsignedInteger h = 0; h < dimension_; ++h) { value -= blockPhiTThetaTMatrix_((currentP_ + k - 1) * dimension_ + h, i) * covarianceMatrix_(h, j); } // + \sum_{l=1}^{k} \phi_{l} * \Lambda_{l-k} for (UnsignedInteger l = 1; l <= lMax; ++l) { for (UnsignedInteger h = 0; h < dimension_; ++h) { value += blockPhiTThetaTMatrix_((l - 1) * dimension_ + h, i) * crossCovariance_(h, (k - l) * dimension_ + j); } } crossCovariance_(i, k * dimension_ + j) = value; } } } } } /* Compute the autocovariance matrix - This method is public for validation purposes*/ void ARMALikelihoodFactory::computeAutocovarianceMatrix() const { // This method aims at computing the autocovariance matrix from data // The method is based on the articles of J.A.Mauricio // The objective here is to compute the matrix which allows the resolution of linear system for \Gamma // The p unknown theoretical autocovariance matrices \Gamma_{0},..., \Gamma_{p-1} are given as follows: // \Gamma_0 - \sum_{r=1}^{p} \phi_{r} \Gamma_0 \phi_{r}^{T} - \sum_{r=1}^{p-1} \sum_{s=1}^{p-r} [ \phi_{r+s} \Gamma_{r} \phi_{s}^{T} + \phi_{s} \Gamma_{r}^{T} \phi_{r+s}^{T}] = W0 // \Gamma_{k} - \sum_{r=1}^{k-1} \Gamma_{r} \phi_{k-r}^{T} - \sum_{r=0}^{p-k} \Gamma_{r}^{T} \phi_{k+r}^{T} = Wk, k=1,..,p-1 // with Wk = -\sum_{s=k}^{q} \Lambda_{k-s} \theta_{s}^{T}, k > 0 (stored in matrix rhs) // // The previous equations are rewritten as system of the form A v = b with v = vec(\Gamma_0,....,Gamma_{p-1}) // From a theoretical point of view, since W0 is symmetric, only the m(m+1)/2 first elements are useful (m = dimension for simplification) // Memory allocation const UnsignedInteger one = 1; const UnsignedInteger arSize = std::max(one, currentP_); // Initializing the autocovariance matrix autoCovariance_ = Matrix(dimension_, arSize * dimension_); // Compute the W0 matrix // This matrix is symmetric, only its upper part is filled up in computeW0Matrix() const SquareMatrix W0(computeW0Matrix()); // Distinction between case p = 0 and p > 0 // if p = 0 ==> No linear system needed but only use of W0 matrix if (currentP_ == 0) { // Assembling \Gamma_{0} for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i <= j; ++i) { autoCovariance_(i, j) = W0(i, j); // Using the symetry autoCovariance_(j, i) = W0(i, j); } } } else { // Memory allocate for the rhs and matA matrices const UnsignedInteger max1P = std::max(one, currentP_); const UnsignedInteger size = dimension_ * dimension_ * (max1P - 1) + dimension_ * (dimension_ + 1) / 2; SquareMatrix matA(size); Point rhs(size); // Fill the first dimension_ * (dimension_ + 1) / 2 rows for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i <= j; ++i) { // Row index differ from the expression of the article since indice start from 0 const UnsignedInteger rowIndex = j * (j + 1) / 2 + i; // Fill the first dimension_ * (dimension_ + 1) / 2 columns for (UnsignedInteger l = 0; l < dimension_; ++l) { for (UnsignedInteger k = 0; k <= l ; ++k) { const UnsignedInteger columnIndex = l * (l + 1) / 2 + k; Scalar value = 0.0; if (k == l) { // Computation of - \sum_{r=1}^{p} \phi_{r}(i, k) \phi_{r}(j, l) for (UnsignedInteger r = 1; r <= currentP_; ++r) { value -= blockPhiTThetaTMatrix_((r - 1) * dimension_ + k, i) * blockPhiTThetaTMatrix_((r - 1) * dimension_ + l, j); } } else { // Computation of - \sum_{r=1}^{p} \phi_{r}(i, k) \phi_{r}(j, l) + \phi_{r}(i, l) \phi_{r}(j, k) for (UnsignedInteger r = 1; r <= currentP_; ++r) { value -= blockPhiTThetaTMatrix_((r - 1) * dimension_ + k, i) * blockPhiTThetaTMatrix_((r - 1) * dimension_ + l, j) ; value -= blockPhiTThetaTMatrix_((r - 1) * dimension_ + l, i) * blockPhiTThetaTMatrix_((r - 1) * dimension_ + k, j) ; } } matA(rowIndex, columnIndex) = value; } } // Fill the remaining dimension_ * dimension_ * (currentP_ - 1) columns for (UnsignedInteger s = 1; s < currentP_; ++s) { for (UnsignedInteger l = 0; l < dimension_; ++l) { const UnsignedInteger columnIndex = dimension_ * (dimension_ + 1) / 2 + dimension_ * dimension_ * (s - 1) + dimension_ * l; for (UnsignedInteger k = 0; k < dimension_; ++k) { Scalar value = 0.0; // Computation of - \sum_{r=1}^{p-s} \phi_{r+s}(i, k) \phi_{r}(j, l) + \phi_{r+s}(j, k) \phi_{r}(i, l) for (UnsignedInteger r = 1; r <= currentP_ - s; ++r) { value -= blockPhiTThetaTMatrix_((r + s - 1) * dimension_ + k, i) * blockPhiTThetaTMatrix_((r - 1) * dimension_ + l, j); value -= blockPhiTThetaTMatrix_((r + s - 1) * dimension_ + k, j) * blockPhiTThetaTMatrix_((r - 1) * dimension_ + l, i); } matA(rowIndex, columnIndex + k) = value; } } } // Set up the diagonal of A and right hand side matA(rowIndex, rowIndex) += 1.0; rhs[rowIndex] = W0(i, j); } } // compute the remaining dimension_ * dimension_ * (currentP_ - 1) rows for (UnsignedInteger s = 1; s < currentP_; ++s) { for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = 0; j < dimension_; ++j) { const UnsignedInteger rowIndex = dimension_ * (dimension_ + 1) / 2 + dimension_ * dimension_ * (s - 1) + dimension_ * i + j; // compute the first dimension_ * (dimension_ + 1) / 2 columns // Get the value : -\phi_{s}(i, l) UnsignedInteger columnIndex = j * (j + 1) / 2; for (UnsignedInteger l = 0; l <= j; ++l) { matA(rowIndex, columnIndex + l) = - blockPhiTThetaTMatrix_((s - 1) * dimension_ + l, i); } for (UnsignedInteger l = j + 1; l < dimension_; ++l) { matA(rowIndex, l * (l + 1) / 2 + j) = - blockPhiTThetaTMatrix_((s - 1) * dimension_ + l, i); } // compute the remaining dimension_ * dimension_ * (currentP_ - 1) columns for (UnsignedInteger r = 1; r < currentP_; ++r) { columnIndex = dimension_ * (dimension_ + 1) / 2 + dimension_ * dimension_ * (r - 1); for (UnsignedInteger l = 0; l < dimension_; ++l) { if (r + s <= currentP_) matA(rowIndex, columnIndex + dimension_ * j + l) = - blockPhiTThetaTMatrix_((r + s - 1) * dimension_ + l, i); if (s > r) matA(rowIndex, columnIndex + dimension_ * l + j) -= blockPhiTThetaTMatrix_((s - r - 1) * dimension_ + l, i); } } // Set up the diagonal matA(rowIndex, rowIndex) += 1.0; // compute the right-hand-side // Ws = -\sum_{h=s}^{q} \Lambda_{s-h} \theta_{h}^{T} for (UnsignedInteger h = s; h <= currentQ_; ++h) { Scalar value = 0.0; for (UnsignedInteger k = 0; k < dimension_; ++k) { value += crossCovariance_(j, (h - s) * dimension_ + k) * blockPhiTThetaTMatrix_((h + currentP_ - 1) * dimension_ + k, i); } rhs[rowIndex] -= value; } } } } // Solve the linear system const Point x(matA.solveLinearSystem(rhs)); // Now we assemble the autocovariance matrices // Assembling \Gamma_{0} for (UnsignedInteger i = 0; i < dimension_; ++i) { for (UnsignedInteger j = i; j < dimension_; ++j) { const UnsignedInteger index = j * (j + 1) / 2 + i; autoCovariance_(i, j) = x[index]; // Using the symmetry autoCovariance_(j, i) = x[index]; } } // Assembling Gamma_{k}, k=1,...,p-1 for (UnsignedInteger k = 1; k < currentP_; ++k) { for (UnsignedInteger j = 0; j < dimension_; ++j) { for (UnsignedInteger i = 0; i < dimension_; ++i) { const UnsignedInteger index = dimension_ * (dimension_ + 1) / 2 + dimension_ * dimension_ * (k - 1) + dimension_ * j + i; autoCovariance_(i, k * dimension_ + j) = x[index]; } } } } //end else } SquareMatrix ARMALikelihoodFactory::computeW0Matrix() const { // Compute W0 matrix in J.A.Mauricio notations (JAM295) // W0 = \Sigma - (B + B^{T}) + \sum_{j=1}^{q} \theta_{j} * \Sigma * \theta_{j}^{T} // with B = \sum_{i=1}^{p} \sum_{j=i}^{q} \phi_{i} * \Lambda_{i-j} * \theta_{j}^{T} // // W0 is symmetric, compute only its upper part SquareMatrix wzero(dimension_); SquareMatrix matrixB(dimension_); SquareMatrix productPhiLambdaT(dimension_); for (UnsignedInteger i = 1; i <= currentP_; ++i) { for (UnsignedInteger j = i; j <= currentQ_; ++j) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++columnIndex) { Scalar value = 0.0; for(UnsignedInteger k = 0; k < dimension_; ++k) { value += blockPhiTThetaTMatrix_((i - 1) * dimension_ + k, rowIndex) * crossCovariance_(k, (j - i) * dimension_ + columnIndex); } productPhiLambdaT(columnIndex, rowIndex) = value; } } for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { Scalar value = 0.0; for(UnsignedInteger k = 0; k < dimension_; ++k) { value += productPhiLambdaT(k, rowIndex) * blockPhiTThetaTMatrix_((j - 1 + currentP_) * dimension_ + k, columnIndex); } matrixB(rowIndex, columnIndex) += value; } } } } // Now compute \Sigma - (B + B^{T}) // As the final matrix is symmetric, we fill only the upper part // The lower part is never used for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex <= columnIndex; ++rowIndex) { wzero(rowIndex, columnIndex) = covarianceMatrix_(rowIndex, columnIndex) - matrixB(rowIndex, columnIndex) - matrixB(columnIndex, rowIndex); } } // Computation of \sum_{j=1}^{q} \theta_{j} * \Sigma * \theta_{j}^{T} for (UnsignedInteger j = 1; j <= currentQ_; ++j) { // Reuse matrixB to store intermediate result \theta_{j} * \Sigma for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex < dimension_; ++rowIndex) { Scalar value = 0.0; for(UnsignedInteger k = 0; k < dimension_; ++k) { value += blockPhiTThetaTMatrix_((j - 1 + currentP_) * dimension_ + k, rowIndex) * covarianceMatrix_(k, columnIndex); } matrixB(rowIndex, columnIndex) = value; } } for (UnsignedInteger columnIndex = 0; columnIndex < dimension_; ++columnIndex) { for (UnsignedInteger rowIndex = 0; rowIndex <= columnIndex; ++rowIndex) { Scalar value = 0.0; for(UnsignedInteger k = 0; k < dimension_; ++k) { value += matrixB(rowIndex, k) * blockPhiTThetaTMatrix_((j - 1 + currentP_) * dimension_ + k, columnIndex); } wzero(rowIndex, columnIndex) += value; } } } return wzero; } /** The methods hereafter depends both on coefficients and time series values and or size */ /* * Step (c) of AS311: Compute the symmetric currentG_ * dimension_ matrix V1 * \Omega * V1^{T} */ SquareMatrix ARMALikelihoodFactory::computeV1_Omega_V1T_Cholesky() const { Matrix omegaV1T((currentP_ + currentQ_) * dimension_, currentG_ * dimension_); for (UnsignedInteger i = 1; i <= currentP_; ++i) { for (UnsignedInteger j = 1; j <= currentG_; ++j) { // (Omega * V1^{T})_{ij} = \sum_{k=j-i}^{p-i} \Gamma_{k}\phi_{p-k-i+j}^{T} // - \sum_{k=j-i}^{q-i} \Lambda_{q-p-k}\theta_{q-k-i+j}^{T} for (int k = j - i; k + i <= currentP_ ; ++k) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; if (k >= 0) { for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += autoCovariance_(ii, k * dimension_ + kk) * blockPhiTThetaTMatrix_((currentP_ - k - i + j - 1) * dimension_ + kk, jj); } } else { for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += autoCovariance_(kk, (-k) * dimension_ + ii) * blockPhiTThetaTMatrix_((currentP_ - k - i + j - 1) * dimension_ + kk, jj); } } omegaV1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) += value; } } } for (int k = j - i; k + i <= currentQ_ && k + currentP_ <= currentQ_; ++k) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += crossCovariance_(ii, (currentQ_ - currentP_ - k) * dimension_ + kk) * blockPhiTThetaTMatrix_((currentP_ + currentQ_ - k - i + j - 1) * dimension_ + kk, jj); } omegaV1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) -= value; } } } } } for (UnsignedInteger i = currentP_ + 1; i <= currentP_ + currentQ_; ++i) { for (UnsignedInteger j = 1; j <= currentG_; ++j) { // (Omega * V1^{T})_{ij} = \sum_{k=p+j-i}^{2p-i} \Lambda_{q-p+k}^{T}\phi_{2p-k-i+j}^{T} - \Sigma \theta_{q+p-i+j}^{T} for (int k = currentP_ + j - i; k + i <= 2 * currentP_ ; ++k) { if (currentP_ > k + currentQ_) continue; for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += crossCovariance_(kk, (currentQ_ - currentP_ + k) * dimension_ + ii) * blockPhiTThetaTMatrix_((2 * currentP_ - k - i + j - 1) * dimension_ + kk, jj); } omegaV1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) += value; } } } if ((currentP_ + j <= i) ) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += covarianceMatrix_(ii, kk) * blockPhiTThetaTMatrix_((2 * currentP_ + currentQ_ - i + j - 1) * dimension_ + kk, jj); } omegaV1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) -= value; } } } } } // Now compute (V1 * Omega * V1^{T})_{ij} = \sum_{k=0}^{p-i} \phi_{p-k} E_{k+i,j} // - \sum_{k=0}^{q-i} \theta_{q-k} E_{k+p+i,j} SquareMatrix V1_Omega_V1T(dimension_ * currentG_); for (UnsignedInteger i = 1; i <= currentG_; ++i) { for (UnsignedInteger j = i; j <= currentG_; ++j) { for (int k = 0; k + i <= currentP_ ; ++k) { for (UnsignedInteger ii = 0; ii < dimension_; ++ii) { for(UnsignedInteger jj = ((i == j) ? ii : 0); jj < dimension_; ++jj) { Scalar value = 0.0; for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += blockPhiTThetaTMatrix_((currentP_ - k - 1) * dimension_ + kk, ii) * omegaV1T((k + i - 1) * dimension_ + kk, (j - 1) * dimension_ + jj); } V1_Omega_V1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) += value; } } } for (int k = 0; k + i <= currentQ_ ; ++k) { for (UnsignedInteger ii = 0; ii < dimension_; ++ii) { for(UnsignedInteger jj = ((i == j) ? ii : 0); jj < dimension_; ++jj) { Scalar value = 0.0; for(UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += blockPhiTThetaTMatrix_((currentP_ + currentQ_ - k - 1) * dimension_ + kk, ii) * omegaV1T((k + currentP_ + i - 1) * dimension_ + kk, (j - 1) * dimension_ + jj); } V1_Omega_V1T((i - 1) * dimension_ + ii, (j - 1) * dimension_ + jj) -= value; } } } } } // And compute the Cholesky decomposition Scalar smallestValue = 1.0; while (smallestValue + 1.0 > 1.0) { smallestValue *= 0.5; } smallestValue *= 2.0; modifiedCholeskyDecomposition(V1_Omega_V1T, smallestValue); return V1_Omega_V1T; } /* * Step (d) of AS311: Compute the \xi matrices: * \xi_{k}(i,j), i = 1, 2, ..., dimension_, j = 1, 2, ... , dimension_, k = 0, 1, ... n-1 * defined by \xi_{0} = Id and the relation * \xi_{k} = \sum_{j=1}^{q} \theta_j \xi_{k-j} * Premultiply \xi matrices by R = Q1^{-1} * In this initial version, there is no truncation, see Mauricio's paper to see how * to implement it. */ Matrix ARMALikelihoodFactory::computeRXi() const { UnsignedInteger size = w_.getSize(); Matrix xi(dimension_, size * dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { xi(i, i) = 1.0; } for (UnsignedInteger k = 1; k < size; ++k) { for (UnsignedInteger j = 1; j <= currentQ_ && j <= k; ++j) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger h = 0; h < dimension_; ++h) { value += blockPhiTThetaTMatrix_((currentP_ + j - 1) * dimension_ + h, ii) * xi(h, (k - j) * dimension_ + jj); } xi(ii, k * dimension_ + jj) += value; } } } } // Premultiply \xi by R return Matrix(covarianceMatrixCholeskyInverse_ * xi); } /* * Step (e) of AS311: Compute the n vectors (stored in a matrix for convenience) * \eta_{i} = R a_{0,i}, i = 1, 2, ..., n-1 * where a0 is defined by recurrence: * a_{0,i} = w_{i} - \sum_{j=1}^{p} \phi_{j} w_{i-j} + \sum_{j=1}^{q} \theta_{j} a0_{i-j} */ Matrix ARMALikelihoodFactory::computeEta() const { UnsignedInteger size = w_.getSize(); Matrix a0(dimension_, size); for (UnsignedInteger i = 1; i <= size; ++i) { // Compute \sum_{j=1}^{p} \phi_{j} w_{i-j} Point phiW(dimension_); for (UnsignedInteger j = 1; j <= currentP_ && j < i; ++j) { Point point(w_.getValueAtIndex(i - j - 1)); for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger h = 0; h < dimension_; ++h) { value += blockPhiTThetaTMatrix_((j - 1) * dimension_ + h, ii) * point[h]; } phiW[ii] += value; } } // Compute \sum_{j=1}^{q} \theta_{j} a0_{i-j} Point thetaA0(dimension_); for (UnsignedInteger j = 1; j <= currentQ_ && j < i; ++j) { for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for(UnsignedInteger h = 0; h < dimension_; ++h) { value += blockPhiTThetaTMatrix_((currentP_ + j - 1) * dimension_ + h, ii) * a0(h, i - j - 1); } thetaA0[ii] += value; } } // Compute a0_{i} = w_{i} - phiW + thetaA0; Point point(w_.getValueAtIndex(i - 1)); for(UnsignedInteger ii = 0; ii < dimension_; ++ii) { for(UnsignedInteger h = 0; h < dimension_; ++h) { a0(h, i - 1) = point[h] - phiW[h] + thetaA0[h]; } } } // Premultiply a0 by R return Matrix(covarianceMatrixCholeskyInverse_ * a0); } /* * Step (f) of AS311: Compute the g vectors (stored in a matrix for convenience) * h_{j} = \sum_{i=0}^{n-j} \xi_{i}^{T} R^{T} \eta_{i+j} * = \sum_{i=0}^{n-j} (R \xi_{i})^{T} \eta_{i+j} * and premultiply by M^{T} */ Point ARMALikelihoodFactory::computeVectorh(const Matrix & rxi, const Matrix & eta, const Matrix & matV1_Omega_V1TCholesky) const { UnsignedInteger size = w_.getSize(); Point vector_h(dimension_ * currentG_); // size condition in the loop is due to possible truncation for (UnsignedInteger j = 1; j <= currentG_ && j <= size; ++j) { for (UnsignedInteger i = 0; i <= size - j; ++i) { for(UnsignedInteger jj = 0; jj < dimension_; ++jj) { Scalar value = 0.0; for(UnsignedInteger k = 0; k < dimension_; ++k) { value += rxi(k, i * dimension_ + jj) * eta(k, i + j - 1); } vector_h[jj + (j - 1) * dimension_] += value; } } } // Premultiply vector_h by M^{T} Point vector_MTh(dimension_ * currentG_); for (UnsignedInteger i = 0; i < dimension_ * currentG_; ++i) { Scalar value = 0.0; for (UnsignedInteger k = 0; k < dimension_ * currentG_; ++k) { value += matV1_Omega_V1TCholesky(k, i) * vector_h[k]; } vector_MTh[i] = value; } return vector_MTh; } /* * Step (g) of AS311: Compute the symmetric matrix dimension_ * currentG_ H^{T} H * This is a block matrix, defined by: * (H^{T} H)_{i,1} = \sum_{k=0}^{n-i} (R \xi_{k})^{T} R \xi_{k+i-1} for i=1, 2, ..., g * and by the recurrence relation * (H^{T} H)_{i,j} = (H^{T} H)_{i-1,j-1} - (R \xi_{n-i+1})^{T} R \xi_{n-j+1} for i=2, 3, ..., g and j=2, ", ..., i */ SymmetricMatrix ARMALikelihoodFactory::computeHTH(const Matrix & rxi) const { UnsignedInteger size = w_.getSize(); SymmetricMatrix matrix_HTH(dimension_ * currentG_); // First block for (UnsignedInteger k = 0; k < size; ++k) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for (UnsignedInteger ii = jj; ii < dimension_; ++ii) { Scalar value = 0.0; for (UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += rxi(kk, k * dimension_ + ii) * rxi(kk, k * dimension_ + jj); } matrix_HTH(ii, jj) += value; } } } // Other blocks on the first column // size condition in the loop is due to possible truncation of rxi for (UnsignedInteger i = 2; i <= currentG_ && i <= size; ++i) { for (UnsignedInteger k = 0; k <= size - i; ++k) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for (UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for (UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += rxi(kk, k * dimension_ + ii) * rxi(kk, (k + i - 1) * dimension_ + jj); } matrix_HTH(ii + (i - 1) * dimension_, jj) += value; } } } } // Other diagonal blocks // size condition in the loop is due to possible truncation of rxi for (UnsignedInteger i = 2; i <= currentG_ && i <= size + 1; ++i) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for (UnsignedInteger ii = jj; ii < dimension_; ++ii) { Scalar value = 0.0; for (UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += rxi(kk, (size - i + 1) * dimension_ + ii) * rxi(kk, (size - i + 1) * dimension_ + jj); } matrix_HTH(ii + (i - 1) * dimension_, jj + (i - 1) * dimension_) = matrix_HTH(ii + (i - 2) * dimension_, jj + (i - 2) * dimension_) - value; } } } // Other subdiagonal blocks // size condition in the loop is due to possible truncation of rxi for (UnsignedInteger i = 2; i <= currentG_ && i <= size + 1; ++i) { for (UnsignedInteger j = 2; j < i; ++j) { for (UnsignedInteger jj = 0; jj < dimension_; ++jj) { for (UnsignedInteger ii = 0; ii < dimension_; ++ii) { Scalar value = 0.0; for (UnsignedInteger kk = 0; kk < dimension_; ++kk) { value += rxi(kk, (size - i + 1) * dimension_ + ii) * rxi(kk, (size - j + 1) * dimension_ + jj); } matrix_HTH(ii + (i - 1) * dimension_, jj + (j - 1) * dimension_) = matrix_HTH(ii + (i - 2) * dimension_, jj + (j - 2) * dimension_) - value; } } } } return matrix_HTH; } /* * Step (h) of AS311: Compute the symmetric matrix (dimension_ * currentG_) (I + M^{T} H^{T} H M) */ CovarianceMatrix ARMALikelihoodFactory::computeI_MTHTHM(const SymmetricMatrix & matrix_HTH, const Matrix & matV1_Omega_V1TCholesky) const { CovarianceMatrix matrixI_MTHTHM(dimension_ * currentG_); // Compute M^{T} H^{T} H Matrix matrix_MTHTH(matV1_Omega_V1TCholesky.transpose() * matrix_HTH); Matrix matrix_MTHTHM(matrix_MTHTH * matV1_Omega_V1TCholesky); for (UnsignedInteger j = 0; j < dimension_ * currentG_; ++j) { for (UnsignedInteger i = j; i < dimension_ * currentG_; ++i) { matrixI_MTHTHM(i, j) += matrix_MTHTHM(i, j); } } return matrixI_MTHTHM; } /* Method save() stores the object through the StorageManager */ void ARMALikelihoodFactory::save(Advocate & adv) const { ARMAFactoryImplementation::save(adv); adv.saveAttribute( "dimension_", dimension_); } /* Method load() reloads the object from the StorageManager */ void ARMALikelihoodFactory::load(Advocate & adv) { ARMAFactoryImplementation::load(adv); adv.loadAttribute( "dimension_", dimension_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ARMAState.cxx000066400000000000000000000067371307543307100231650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ARMAState class enables to set a State before a simulation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/ARMAState.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ARMAState); static const Factory Factory_ARMAState; /* Default constructor */ ARMAState::ARMAState() : PersistentObject() , x_() , epsilon_() { // Nothing to do } /* Standard constructor */ ARMAState::ARMAState(const Sample & x, const Sample & epsilon) : PersistentObject() , x_(x) , epsilon_(epsilon) { // Nothing to do } /* Virtual constructor - clone*/ ARMAState * ARMAState::clone() const { return new ARMAState(*this); } /* String converter */ String ARMAState::__repr__() const { OSS oss; oss << "class= " << ARMAState::GetClassName(); oss << " x= " << x_ << " epsilon= " << epsilon_; return oss; } String ARMAState::__str__(const String & offset) const { OSS oss; // The x part of the state stores the p past values of the process that // are needed to compute the current value oss << offset; String separator(""); const UnsignedInteger xSize = x_.getSize(); for (UnsignedInteger i = 0; i < xSize; ++i, separator = "\n") { const UnsignedInteger index = xSize - i; oss << separator << "X(t-" << index << ")" << std::setw(String(OSS() << xSize).size() - String(OSS() << index).size() + 3) << " = " << x_[i]; } // The epsilon part of the state stores the q past values of the noise // that are needed to compute the current value const UnsignedInteger epsilonSize = epsilon_.getSize(); for (UnsignedInteger i = 0; i < epsilonSize; ++i) { const UnsignedInteger index = epsilonSize - i; oss << separator << "epsilon(t-" << index << ")" << std::setw(String(OSS() << epsilonSize).size() - String(OSS() << index).size() + 3) << " = " << epsilon_[i]; } return oss; } /* Data X accessor */ Sample ARMAState::getX() const { return x_; } void ARMAState::setXEpsilon(const Sample & x, const Sample & epsilon) { x_ = x; epsilon_ = epsilon; } /* Epsilon \epsilon accessor */ Sample ARMAState::getEpsilon() const { return epsilon_; } UnsignedInteger ARMAState::getDimension() const { return x_.getDimension(); } /* Method save() stores the object through the StorageManager */ void ARMAState::save(Advocate & adv) const { PersistentObject::save( adv ); adv.saveAttribute("x_", x_); adv.saveAttribute("epsilon_", epsilon_); } /* Method load() reloads the object from the StorageManager */ void ARMAState::load(Advocate & adv) { PersistentObject::load( adv ); adv.loadAttribute("x_", x_); adv.loadAttribute("epsilon_", epsilon_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/AggregatedProcess.cxx000066400000000000000000000244401307543307100250240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the AggregatedProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/AggregatedProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/WhiteNoise.hxx" #include "openturns/TensorizedCovarianceModel.hxx" #include "openturns/AggregatedFunction.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< Process >); CLASSNAMEINIT(AggregatedProcess); static const Factory Factory_AggregatedProcess; static const Factory > Factory_PersistentCollection_Process; AggregatedProcess::AggregatedProcess() : ProcessImplementation() , processCollection_(ProcessCollection(1, WhiteNoise())) { // Nothing to do } /* Standard constructor */ AggregatedProcess::AggregatedProcess(const ProcessCollection & coll) : ProcessImplementation() , processCollection_() { setProcessCollection(coll); } /* Virtual constructor */ AggregatedProcess * AggregatedProcess::clone() const { return new AggregatedProcess(*this); } /* String converter */ String AggregatedProcess::__repr__() const { OSS oss(true); oss << "class=" << AggregatedProcess::GetClassName() << " process collection=" << processCollection_; return oss; } String AggregatedProcess::__str__(const String & offset) const { OSS oss(false); oss << "AggregatedProcess(" << processCollection_ << ")"; return oss; } /* Realization accessor */ Field AggregatedProcess::getRealization() const { Sample values(processCollection_[0].getRealization().getValues()); for (UnsignedInteger i = 1; i < processCollection_.getSize(); ++i) values.stack(processCollection_[i].getRealization().getValues()); return Field(getMesh(), values); } /* Continuous realization accessor */ Function AggregatedProcess::getContinuousRealization() const { const UnsignedInteger size = processCollection_.getSize(); Collection continuousRealizations(size); for (UnsignedInteger i = 0; i < size; ++i) continuousRealizations[i] = processCollection_[i].getContinuousRealization(); return AggregatedFunction(continuousRealizations); } /* Compute the next steps of a random walk */ TimeSeries AggregatedProcess::getFuture(const UnsignedInteger stepNumber) const { /* TimeGrid of the process */ RegularGrid timeGrid; try { timeGrid = getTimeGrid(); } catch (...) { throw InternalException(HERE) << "Error: can extend the realization of a process only if defined on a regular grid."; } if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = timeGrid.getStep(); const RegularGrid futurTimeGrid(timeGrid.getEnd(), timeStep, stepNumber); Sample values(processCollection_[0].getFuture(stepNumber).getValues()); for (UnsignedInteger i = 1; i < processCollection_.getSize(); ++i) values.stack(processCollection_[i].getFuture(stepNumber).getValues()); return TimeSeries(futurTimeGrid, values); } /* Get the random vector corresponding to the i-th marginal component */ AggregatedProcess::Implementation AggregatedProcess::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "Error: the index must be less than the output dimension"; UnsignedInteger lastBlock = 0; for (UnsignedInteger k = 0; k < processCollection_.getSize(); ++k) { const UnsignedInteger block = lastBlock + processCollection_[k].getDimension(); if (i < block) return processCollection_[k].getMarginal(i - lastBlock).getImplementation(); lastBlock = block; } throw InternalException(HERE) << "AggregatedProcess::getMarginal: should never go there"; } /* Get the marginal process corresponding to indices dimensions Some additional restriction occur for this copula: the indices must be of the form: [i_1^1,...,i_k1^1,i_1^2,...,i_k2^2,...,i_1^n,...,i_kn^n] where: i_1^1,...,i_k1^1 is a subset of {0,...,dim_1-1}, i_1^2,...,i_k2^2 is a subset of {0,...,dim_2-1}+dim_1, i_1^n,...,i_kn^n is a subset of {0,...,dim_n-1}+dim_1+...+dim_(n-1), dim_1 = dimension(copula_1) etc. */ AggregatedProcess::Implementation AggregatedProcess::getMarginal(const Indices & indices) const { const UnsignedInteger dimension = getDimension(); if (!indices.check(dimension)) throw InvalidArgumentException(HERE) << "Error: the indices of a marginal process must be in the range [0, dim-1] and must be different"; ProcessCollection marginalProcesses(0); const UnsignedInteger indicesSize = indices.getSize(); const UnsignedInteger size = processCollection_.getSize(); // For each copula, see if there is something to extract UnsignedInteger currentPosition = 0; UnsignedInteger currentIndex = indices[currentPosition]; // Lower bound of indices related to the current copula UnsignedInteger lowerIndex = 0; // Upper bound of indices related to the current copula plus 1 UnsignedInteger upperIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { const Process process(processCollection_[i]); // Update index range for the current copula lowerIndex = upperIndex; upperIndex += process.getDimension(); Indices processIndices(0); // Find the indices related to the current copula while ((currentPosition < indicesSize) && (currentIndex >= lowerIndex) && (currentIndex < upperIndex)) { processIndices.add(currentIndex - lowerIndex); // Go to next index ++currentPosition; if (currentPosition == indicesSize) break; currentIndex = indices[currentPosition]; } // If there is something to extract if (processIndices.getSize() > 0) marginalProcesses.add(processCollection_[i].getMarginal(processIndices)); // All the indices have been taken into account if (currentPosition == indicesSize) break; // Check if a bad case occurs: one index related to copula i is found after indices related to copula j, with j > i if (currentIndex < lowerIndex) throw InvalidArgumentException(HERE) << "Error: one index related to the ith process has been found after indices related to the jth process, with j > i"; } return new AggregatedProcess(marginalProcesses); } /* Process collection accessor */ void AggregatedProcess::setProcessCollection(const ProcessCollection & coll) { const UnsignedInteger size = coll.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: cannot build an aggregated process based on an empty process collection."; processCollection_ = ProcessCollection(size); processCollection_[0] = coll[0]; const UnsignedInteger spatialDimension = processCollection_[0].getSpatialDimension(); UnsignedInteger dimension = processCollection_[0].getDimension(); for (UnsignedInteger i = 1; i < size; ++i) { if (coll[i].getSpatialDimension() != spatialDimension) throw InvalidArgumentException(HERE) << "Error: expected a spatial dimension=" << spatialDimension << ", got process " << i << " with a spatial dimension=" << coll[i].getSpatialDimension(); processCollection_[i] = coll[i]; dimension += coll[i].getDimension(); } setDimension(dimension); setMesh(processCollection_[0].getMesh()); } AggregatedProcess::ProcessCollection AggregatedProcess::getProcessCollection() const { return processCollection_; } /* Mesh accessor */ void AggregatedProcess::setMesh(const Mesh & mesh) { // We know that an AggregatedProcess cannot be built with an empty process collection if (mesh.getDimension() != processCollection_[0].getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: the given mesh has a dimension=" << mesh.getDimension() << " which is different from the spatial dimension of the aggregated process spatial dimension=" << processCollection_[0].getSpatialDimension(); for (UnsignedInteger i = 0; i < processCollection_.getSize(); ++i) processCollection_[i].setMesh(mesh); ProcessImplementation::setMesh(mesh); } /* Time grid accessor */ void AggregatedProcess::setTimeGrid(const RegularGrid & timeGrid) { for (UnsignedInteger i = 0; i < processCollection_.getSize(); ++i) processCollection_[i].setTimeGrid(timeGrid); ProcessImplementation::setTimeGrid(timeGrid); } /* Is the underlying a gaussian process ? */ Bool AggregatedProcess::isNormal() const { for (UnsignedInteger i = 0; i < processCollection_.getSize(); ++i) if (!processCollection_[i].isNormal()) return false; return true; } /* Is the underlying a stationary process ? */ Bool AggregatedProcess::isStationary() const { for (UnsignedInteger i = 0; i < processCollection_.getSize(); ++i) if (!processCollection_[i].isStationary()) return false; return true; } /* Covariance model accessor */ CovarianceModel AggregatedProcess::getCovarianceModel() const { Collection coll(processCollection_.getSize()); for (UnsignedInteger i = 0; i < processCollection_.getSize(); ++i) coll[i] = processCollection_[i].getCovarianceModel(); return TensorizedCovarianceModel(coll); } /* Trend accessor */ TrendTransform AggregatedProcess::getTrend() const { throw NotYetImplementedException(HERE) << "AggregatedProcess::getTrend()"; } /* Method save() stores the object through the StorageManager */ void AggregatedProcess::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "processCollection_", processCollection_ ); } /* Method load() reloads the object from the StorageManager */ void AggregatedProcess::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "processCollection_", processCollection_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/CMakeLists.txt000066400000000000000000000034351307543307100234500ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (WhiteNoise.cxx) ot_add_source_file (RandomWalk.cxx) ot_add_source_file (ARMACoefficients.cxx) ot_add_source_file (ARMAState.cxx) ot_add_source_file (ARMA.cxx) ot_add_source_file (SpectralGaussianProcess.cxx) ot_add_source_file (GaussianProcess.cxx) ot_add_source_file (AggregatedProcess.cxx) ot_add_source_file (CompositeProcess.cxx) ot_add_source_file (FunctionalBasisProcess.cxx) ot_add_source_file (ARMAFactoryImplementation.cxx) ot_add_source_file (ARMAFactory.cxx) ot_add_source_file (WhittleFactory.cxx) ot_add_source_file (WhittleFactoryState.cxx) ot_add_source_file (ARMALikelihoodFactory.cxx) ot_add_source_file (ConditionedNormalProcess.cxx) ot_add_source_file (KarhunenLoeveQuadratureFactory.cxx) ot_add_source_file (KarhunenLoeveQuadratureAlgorithm.cxx) ot_install_header_file (OTProcess.hxx) ot_install_header_file (WhiteNoise.hxx) ot_install_header_file (RandomWalk.hxx) ot_install_header_file (ARMACoefficients.hxx) ot_install_header_file (ARMAState.hxx) ot_install_header_file (ARMA.hxx) ot_install_header_file (SpectralGaussianProcess.hxx) ot_install_header_file (GaussianProcess.hxx) ot_install_header_file (AggregatedProcess.hxx) ot_install_header_file (CompositeProcess.hxx) ot_install_header_file (FunctionalBasisProcess.hxx) ot_install_header_file (ARMAFactoryImplementation.hxx) ot_install_header_file (ARMAFactory.hxx) ot_install_header_file (WhittleFactory.hxx) ot_install_header_file (WhittleFactoryState.hxx) ot_install_header_file (ARMALikelihoodFactory.hxx) ot_install_header_file (ConditionedNormalProcess.hxx) ot_install_header_file (KarhunenLoeveQuadratureFactory.hxx) ot_install_header_file (KarhunenLoeveQuadratureAlgorithm.hxx) openturns-1.9/lib/src/Uncertainty/Process/CompositeProcess.cxx000066400000000000000000000140371307543307100247350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the CompositeProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/CompositeProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/WhiteNoise.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(CompositeProcess); static const Factory Factory_CompositeProcess; CompositeProcess::CompositeProcess() : ProcessImplementation() , function_(SymbolicFunction("x", "x^2")) , p_antecedent_(WhiteNoise().clone()) { // Set the mesh setMesh(function_.getOutputMesh(p_antecedent_->getMesh())); } /* Standard constructor */ CompositeProcess::CompositeProcess(const FieldFunction & function, const Antecedent & p_antecedent) : ProcessImplementation() { *this = CompositeProcess(function, *p_antecedent); } /* Standard constructor */ CompositeProcess::CompositeProcess(const FieldFunction & function, const Process & antecedent) : ProcessImplementation() , function_(function) , p_antecedent_(antecedent.getImplementation()) { if (function.getInputDimension() != p_antecedent_->getDimension()) throw InvalidArgumentException(HERE) << "Error: trying to build a CompositeProcess from a Process and a FieldFunction with incompatible dimensions " << "here Process dimension=" << p_antecedent_->getDimension() << " and FieldFunction input dimension=" << function.getInputDimension(); if (function.getSpatialDimension() != p_antecedent_->getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: trying to build a CompositeProcess from a Process and a FieldFunction with incompatible mesh dimensions " << "here Process mesh dimension=" << p_antecedent_->getSpatialDimension() << " and FieldFunction mesh dimension=" << function.getSpatialDimension(); setMesh(function.getOutputMesh(p_antecedent_->getMesh())); setDimension(function.getOutputDimension()); setDescription(function.getOutputDescription()); } /* Virtual constructor */ CompositeProcess * CompositeProcess::clone() const { return new CompositeProcess(*this); } /* String converter */ String CompositeProcess::__repr__() const { OSS oss(true); oss << "class=" << CompositeProcess::GetClassName() << " function=" << function_.__repr__() << " antecedent=" << p_antecedent_->__repr__(); return oss; } String CompositeProcess::__str__(const String & offset) const { OSS oss(false); oss << getClassName() << "(" << function_.__str__() << "(" << p_antecedent_->__str__() << ")"; return oss; } /* Is the underlying a composite process ? */ Bool CompositeProcess::isComposite() const { return true; } /* Antecedent accessor */ CompositeProcess::Antecedent CompositeProcess::getAntecedent() const { return p_antecedent_; } /* Function accessor */ FieldFunction CompositeProcess::getFunction() const { return function_; } /* Realization accessor */ Field CompositeProcess::getRealization() const { Field result(function_(p_antecedent_->getRealization())); Sample values(result.getValues()); values.setDescription(getDescription()); result.setValues(values); return result; } /* Compute the next steps of a random walk */ TimeSeries CompositeProcess::getFuture(const UnsignedInteger stepNumber) const { /* TimeGrid of the process */ RegularGrid timeGrid; try { timeGrid = getTimeGrid(); } catch (...) { throw InternalException(HERE) << "Error: can extend the realization of a process only if defined on a regular grid."; } if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = timeGrid.getStep(); const RegularGrid futurTimeGrid(timeGrid.getEnd(), timeStep, stepNumber); return TimeSeries(futurTimeGrid, function_(p_antecedent_->getFuture(stepNumber)).getValues()); } /* Get the random vector corresponding to the i-th marginal component */ CompositeProcess::Implementation CompositeProcess::getMarginal(const UnsignedInteger i) const { return new CompositeProcess(function_.getMarginal(i), Pointer(p_antecedent_->getMarginal(i))); } /* Get the marginal random vector corresponding to indices components */ CompositeProcess::Implementation CompositeProcess::getMarginal(const Indices & indices) const { return new CompositeProcess(function_.getMarginal(indices), Pointer(p_antecedent_->getMarginal(indices))); } /* Method save() stores the object through the StorageManager */ void CompositeProcess::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "function_", function_ ); adv.saveAttribute( "antecedent_", *p_antecedent_ ); } /* Method load() reloads the object from the StorageManager */ void CompositeProcess::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "function_", function_ ); TypedInterfaceObject antecedent; adv.loadAttribute( "antecedent_", antecedent ); p_antecedent_ = antecedent.getImplementation(); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/ConditionedNormalProcess.cxx000066400000000000000000000154611307543307100264050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the ConditionedNormalProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/ConditionedNormalProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/DistFunc.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(ConditionedNormalProcess); static const Factory Factory_ConditionedNormalProcess; ConditionedNormalProcess::ConditionedNormalProcess() : GaussianProcess() , krigingResult_() , trendEvaluationMesh_() { // Nothing to do } ConditionedNormalProcess::ConditionedNormalProcess(const KrigingResult & result, const Mesh & mesh) : GaussianProcess() , krigingResult_(result) , trendEvaluationMesh_() { // set covariance model covarianceModel_ = result.getCovarianceModel(); // Set the mesh & dimension setDimension(covarianceModel_.getDimension()); if (covarianceModel_.getSpatialDimension() != mesh.getDimension()) throw InvalidArgumentException(HERE) << "In ConditionedNormalProcess::ConditionedNormalProcess, process dimension incompatible with mesh dimension. Here, (process dimension= " << getDimension() << ", mesh dimension=" << mesh.getDimension() << ")"; setMesh(mesh); // Initialize initialize(); } /* Virtual constructor */ ConditionedNormalProcess * ConditionedNormalProcess::clone() const { return new ConditionedNormalProcess(*this); } /* String converter */ String ConditionedNormalProcess::__repr__() const { OSS oss(true); oss << "class=" << ConditionedNormalProcess::GetClassName() << ", mesh=" << mesh_ << ", trend=" << trend_ << ", covariance=" << covarianceModel_ << ", conditional covariance =" << covarianceCholeskyFactor_; return oss; } String ConditionedNormalProcess::__str__(const String & offset) const { OSS oss(false); oss << "ConditionedNormalProcess(" << "mesh=" << mesh_.__str__(offset) << ", trend=" << trend_.__str__(offset) << ", covariance=" << covarianceModel_.__str__(offset) << ", conditional covariance =" << covarianceCholeskyFactor_.__str__(offset) << ")"; return oss; } void ConditionedNormalProcess::initialize() { if (isInitialized_) return; // Build the covariance factor Sample vertices(mesh_.getVertices()); // Build the covariance matrix CovarianceMatrix covarianceMatrix(krigingResult_.getConditionalCovariance(vertices)); // Get the Cholesky factor LOGINFO(OSS(false) << "Evaluation of the Cholesky factor"); covarianceCholeskyFactor_ = covarianceMatrix.computeCholesky(); // Build the trend function LOGINFO(OSS(false) << "Build of the trend function"); const Function krigingEvaluation(krigingResult_.getMetaModel()); // Evaluation of the trend part (evaluation once) trendEvaluationMesh_ = krigingEvaluation(mesh_.getVertices()); // Set the trend function trend_ = TrendTransform(krigingEvaluation); // Set descriptions trend_.setInputDescription( Description::BuildDefault(getSpatialDimension(), "x")); trend_.setOutputDescription( Description::BuildDefault(getDimension(), "y")); // Set description setDescription(trend_.getOutputDescription()); isInitialized_ = true; } /* Mesh accessor */ void ConditionedNormalProcess::setMesh(const Mesh & mesh) { // Checking dimension coherancy between kriging result & mesh if (mesh.getDimension() != krigingResult_.getMetaModel().getInputDimension()) throw InvalidArgumentException(HERE) << "In ConditionedNormalProcess::ConditionedNormalProcess, incompatible dimension between mesh & kriging. Here, mesh dimension = " << mesh.getDimension() << " and kriging input dimension = " << krigingResult_.getMetaModel().getInputDimension(); // Set the mesh isInitialized_ = false; ProcessImplementation::setMesh(mesh); trendEvaluationMesh_ = Sample(0, 0); initialize(); } /* TimeGrid accessor */ void ConditionedNormalProcess::setTimeGrid(const RegularGrid & timeGrid) { setMesh(timeGrid); } /** Set sampling method accessor */ void ConditionedNormalProcess::setSamplingMethod(const UnsignedInteger samplingMethod) { // Nothing to do LOGWARN(OSS(false) << "Only the cholesky factor method is implemented. The method has no effect here"); } /* Realization generator */ Field ConditionedNormalProcess::getRealization() const { // 1) L.X product with L: cholesky factor, X the gaussian vector // Constantes values const UnsignedInteger fullSize = covarianceCholeskyFactor_.getDimension(); Point gaussianPoint(fullSize); // N independent gaussian realizations for (UnsignedInteger index = 0; index < fullSize; ++index) gaussianPoint[index] = DistFunc::rNormal(); // 2) X <- LX gaussianPoint = covarianceCholeskyFactor_ * gaussianPoint; const UnsignedInteger size = getMesh().getVerticesNumber(); Sample values(size, getDimension()); values.getImplementation()->setData(gaussianPoint); // 3) Add the trend part // This last one is evaluated thanks to the trend function // It is similar to trend_(Field(mesh_, values)) values += trendEvaluationMesh_; values.setDescription(getDescription()); return Field(mesh_, values); } /* Is the underlying a gaussian process ? */ Bool ConditionedNormalProcess::isNormal() const { return true; } /* Is the underlying a stationary process ? */ Bool ConditionedNormalProcess::isStationary() const { // False since the conditioned variance is null at conditioning points return false; } /* Method save() stores the object through the StorageManager */ void ConditionedNormalProcess::save(Advocate & adv) const { GaussianProcess::save(adv); adv.saveAttribute("krigingResult_", krigingResult_); adv.saveAttribute("trendEvaluationMesh_", trendEvaluationMesh_); } /* Method load() reloads the object from the StorageManager */ void ConditionedNormalProcess::load(Advocate & adv) { GaussianProcess::load(adv); adv.loadAttribute("krigingResult_", krigingResult_); adv.loadAttribute("trendEvaluationMesh_", trendEvaluationMesh_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/FunctionalBasisProcess.cxx000066400000000000000000000234101307543307100260520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the FunctionalBasisProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/FunctionalBasisProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" #include "openturns/SymbolicFunction.hxx" #include "openturns/RankMCovarianceModel.hxx" #include "openturns/LinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(FunctionalBasisProcess); static const Factory Factory_FunctionalBasisProcess; /* Standard constructor */ FunctionalBasisProcess::FunctionalBasisProcess() : ProcessImplementation() , distribution_(Normal()) , basis_(Collection(1, SymbolicFunction("t", "t"))) , state_(1, 0.0) { // Set the dimension of the process setDimension(1); setDescription(basis_[0].getOutputDescription()); } /* Standard constructor */ FunctionalBasisProcess::FunctionalBasisProcess(const Distribution & distribution, const Basis & basis) : ProcessImplementation() , distribution_(distribution) , basis_() , state_(distribution.getDimension(), 0.0) { // Check the given basis against the distribution if (basis.getSize() > 0) setMesh(Mesh(basis[0].getInputDimension())); setBasis(basis); } /* Standard constructor */ FunctionalBasisProcess::FunctionalBasisProcess(const Distribution & distribution, const Basis & basis, const Mesh & mesh) : ProcessImplementation() , distribution_(distribution) , basis_() , state_(distribution.getDimension(), 0.0) { // Check the given basis against the distribution setMesh(mesh); setBasis(basis); } /* Virtual constructor */ FunctionalBasisProcess * FunctionalBasisProcess::clone() const { return new FunctionalBasisProcess(*this); } /* String converter */ String FunctionalBasisProcess::__repr__() const { OSS oss; oss << "class=" << FunctionalBasisProcess::GetClassName() << " distribution=" << distribution_ << " basis=" << basis_; return oss; } /* Covariance model accessor */ CovarianceModel FunctionalBasisProcess::getCovarianceModel() const { const UnsignedInteger dimension = distribution_.getDimension(); Collection functions(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) functions[i] = basis_.build(i); if (distribution_.hasIndependentCopula()) { // We use the standard deviation as it is an O(dim) computation // in the general case, while covariance is an O(n^2) computation Point coefficients(distribution_.getStandardDeviation()); for (UnsignedInteger i = 0; i < dimension; ++i) coefficients[i] *= coefficients[i]; return RankMCovarianceModel(coefficients, functions); } return RankMCovarianceModel(distribution_.getCovariance(), functions); } /* Is the process stationary ? */ Bool FunctionalBasisProcess::isStationary() const { return false; } /* Is the process gaussian ? */ Bool FunctionalBasisProcess::isNormal() const { // The easy case: the distribution is an interface to // a Normal distribution if (distribution_.getImplementation()->getClassName() == "Normal") return true; // The hard case: the distribution has the properties of a Normal distribution return (distribution_.isElliptical() && distribution_.getStandardDistribution().hasIndependentCopula()); } /* Discrete realization accessor */ Field FunctionalBasisProcess::getRealization() const { state_ = distribution_.getRealization(); const UnsignedInteger timeGridSize = mesh_.getVerticesNumber(); const UnsignedInteger basisSize = basis_.getSize(); // Loop over the time stamps Sample result(timeGridSize, Point(dimension_, 0.0)); // Loop over the basis for (UnsignedInteger j = 0; j < basisSize; ++j) { Sample currentBasisContribution(basis_[j](mesh_.getVertices())); currentBasisContribution *= Point(dimension_, state_[j]); result += currentBasisContribution; } result.setDescription(getDescription()); return Field(mesh_, result); } /* Continuous realization accessor */ Function FunctionalBasisProcess::getContinuousRealization() const { state_ = distribution_.getRealization(); return LinearCombinationFunction(basis_, state_); } /* Compute the next steps of the process */ TimeSeries FunctionalBasisProcess::getFuture(const UnsignedInteger stepNumber) const { /* TimeGrid of the process */ RegularGrid timeGrid; try { timeGrid = getTimeGrid(); } catch (...) { throw InternalException(HERE) << "Error: can extend the realization of a process only if defined on a regular grid."; } if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = timeGrid.getStep(); const RegularGrid futureTimeGrid(timeGrid.getEnd(), timeStep, stepNumber); const UnsignedInteger basisSize = basis_.getSize(); // Loop over the time stamps Sample result(stepNumber, Point(dimension_, 0.0)); for (UnsignedInteger i = 0; i < stepNumber; ++i) { const Point t(1, futureTimeGrid.getValue(i)); // Loop over the basis using the previous state for (UnsignedInteger j = 0; j < basisSize; ++j) result[i] += basis_[j](t) * state_[j]; } return TimeSeries(futureTimeGrid, result); } /* Get the marginal process corresponding to the i-th marginal component */ FunctionalBasisProcess::Implementation FunctionalBasisProcess::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal process must be in the range [0, dim-1]"; return getMarginal(Indices(1, i)); } /* Get the marginal random vector corresponding to indices components */ FunctionalBasisProcess::Implementation FunctionalBasisProcess::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal process must be in the range [0, dim-1] and must be different"; // First the marginal distribution Distribution marginalDistribution(distribution_.getMarginal(indices)); // Second the marginal basis const UnsignedInteger basisSize = basis_.getSize(); Basis marginalBasis(basisSize); for (UnsignedInteger i = 0; i < basisSize; ++i) marginalBasis[i] = basis_[i].getMarginal(indices); // Return the associated FunctionalBasisProcess return FunctionalBasisProcess(marginalDistribution, marginalBasis, mesh_).clone(); } /* Distribution accessor */ Distribution FunctionalBasisProcess::getDistribution() const { return distribution_; } /* Distribution accessor */ void FunctionalBasisProcess::setDistribution(const Distribution & distribution) { // Check the distribution against the basis if (distribution.getDimension() != basis_.getSize()) throw InvalidArgumentException(HERE) << "Error: the given distribution has a dimension=" << distribution.getDimension() << " that does not match the basis size=" << basis_.getSize(); distribution_ = distribution; } /* Basis accessor */ Basis FunctionalBasisProcess::getBasis() const { return basis_; } /* Basis accessor */ void FunctionalBasisProcess::setBasis(const Basis & basis) { const UnsignedInteger size = basis.getSize(); // Check if the basis is not empty if (size == 0) throw InvalidArgumentException(HERE) << "Error: the given basis is empty."; // Check the basis against the distribution if (size != distribution_.getDimension() ) throw InvalidArgumentException(HERE) << "Error: the given basis has a size=" << size << " that does not match the distribution dimension=" << distribution_.getDimension(); // Check if the functions in the basis are from R to R^n for the same n dimension_ = basis[0].getOutputDimension(); const UnsignedInteger inputDimension = mesh_.getDimension(); for (UnsignedInteger i = 0; i < size; ++i) { // Check the input dimension if (basis[i].getInputDimension() != inputDimension) throw InvalidArgumentException(HERE) << "Error: the function at index=" << i << " has an input dimension=" << basis[i].getInputDimension() << " which is not equal to " << inputDimension << "."; // Check the output dimension if (basis[i].getOutputDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the function at index=" << i << " has an output dimension=" << basis[i].getOutputDimension() << " which is not equal to the process dimension=" << dimension_; } basis_ = basis; setDescription(basis[0].getOutputDescription()); } /* Method save() stores the object through the StorageManager */ void FunctionalBasisProcess::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "basis_", basis_ ); adv.saveAttribute( "state_", state_ ); } /* Method load() reloads the object from the StorageManager */ void FunctionalBasisProcess::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "basis_", basis_ ); adv.loadAttribute( "state_", state_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/GaussianProcess.cxx000066400000000000000000000415371307543307100245520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the Gaussian process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/GaussianProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/DistFunc.hxx" #include "openturns/TriangularMatrix.hxx" #include "openturns/KPermutationsDistribution.hxx" #include "openturns/RandomGenerator.hxx" #include "openturns/HMatrixFactory.hxx" #include "openturns/SymbolicFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(GaussianProcess); static const Factory Factory_GaussianProcess; GaussianProcess::GaussianProcess() : ProcessImplementation() , covarianceModel_() , covarianceCholeskyFactor_(0) , covarianceHMatrix_() , isInitialized_(false) , hasStationaryTrend_(true) , checkedStationaryTrend_(true) , trend_() , stationaryTrendValue_(0) , samplingMethod_(0) { #ifdef OPENTURNS_HAVE_MUPARSER trend_ = TrendTransform(SymbolicFunction(Description::BuildDefault(covarianceModel_.getSpatialDimension(), "x"), Description(getDimension(), "0.0"))); #else trend_ = TrendTransform(Function(Sample(1, covarianceModel_.getSpatialDimension()), Sample(1, getDimension()))); #endif setDescription(trend_.getOutputDescription()); } /* Standard constructor */ GaussianProcess::GaussianProcess(const TrendTransform & trend, const SecondOrderModel & model, const Mesh & mesh) : ProcessImplementation() , covarianceModel_(model.getCovarianceModel()) , covarianceCholeskyFactor_(0) , covarianceHMatrix_() , isInitialized_(false) , hasStationaryTrend_(false) , checkedStationaryTrend_(false) , trend_(trend) , stationaryTrendValue_(trend.getOutputDimension()) , samplingMethod_(0) { if (trend.getInputDimension() != model.getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: the given trend has an input dimension=" << trend.getInputDimension() << " different from the second order model spatial dimension=" << model.getSpatialDimension(); if (trend.getOutputDimension() != model.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given trend has an output dimension=" << trend.getOutputDimension() << " different from the second order model dimension=" << model.getDimension(); setMesh(mesh); setDimension(model.getDimension()); setDescription(trend_.getOutputDescription()); } /* Standard constructor */ GaussianProcess::GaussianProcess(const TrendTransform & trend, const CovarianceModel & covarianceModel, const Mesh & mesh) : ProcessImplementation() , covarianceModel_(covarianceModel) , covarianceCholeskyFactor_(0) , covarianceHMatrix_() , isInitialized_(false) , hasStationaryTrend_(false) , checkedStationaryTrend_(false) , trend_(trend) , stationaryTrendValue_(trend.getOutputDimension()) , samplingMethod_(0) { if (trend.getInputDimension() != covarianceModel.getSpatialDimension()) throw InvalidArgumentException(HERE) << "Error: the given trend has an input dimension=" << trend.getInputDimension() << " different from the covariance model spatial dimension=" << covarianceModel.getSpatialDimension(); if (trend.getOutputDimension() != covarianceModel.getDimension()) throw InvalidArgumentException(HERE) << "Error: the given trend has an output dimension=" << trend.getOutputDimension() << " different from the covariance model dimension=" << covarianceModel.getDimension(); setMesh(mesh); setDimension(covarianceModel.getDimension()); setDescription(trend_.getOutputDescription()); } /* Standard constructor */ GaussianProcess::GaussianProcess(const SecondOrderModel & model, const Mesh & mesh) : ProcessImplementation() , covarianceModel_(model.getCovarianceModel()) , covarianceCholeskyFactor_(0) , covarianceHMatrix_() , isInitialized_(false) , hasStationaryTrend_(true) , checkedStationaryTrend_(true) , trend_() , stationaryTrendValue_(model.getDimension()) , samplingMethod_(0) { setMesh(mesh); setDimension(model.getDimension()); #ifdef OPENTURNS_HAVE_MUPARSER trend_ = TrendTransform(SymbolicFunction(Description::BuildDefault(getSpatialDimension(), "x"), Description(getDimension(), "0.0"))); #else trend_ = TrendTransform(Function(Sample(1, getSpatialDimension()), Sample(1, getDimension()))); #endif setDescription(trend_.getOutputDescription()); } /* Standard constructor */ GaussianProcess::GaussianProcess(const CovarianceModel & covarianceModel, const Mesh & mesh) : ProcessImplementation() , covarianceModel_(covarianceModel) , covarianceCholeskyFactor_(0) , covarianceHMatrix_() , isInitialized_(false) , hasStationaryTrend_(true) , checkedStationaryTrend_(true) , trend_() , stationaryTrendValue_(covarianceModel.getDimension()) , samplingMethod_(0) { setMesh(mesh); setDimension(covarianceModel.getDimension()); #ifdef OPENTURNS_HAVE_MUPARSER trend_ = TrendTransform(SymbolicFunction(Description::BuildDefault(getSpatialDimension(), "x"), Description(getDimension(), "0.0"))); #else trend_ = TrendTransform(Function(Sample(1, getSpatialDimension()), Sample(1, getDimension()))); #endif setDescription(trend_.getOutputDescription()); } /* Virtual constructor */ GaussianProcess * GaussianProcess::clone() const { return new GaussianProcess(*this); } void GaussianProcess::initialize() const { // Initialization of the process // Get the covariance matrix (its Cholesky factor) CovarianceMatrix covarianceMatrix; if (samplingMethod_ != 1) { LOGINFO(OSS() << "Discretize the covariance model"); covarianceMatrix = CovarianceMatrix(covarianceModel_.discretize(mesh_)); } // Boolean flag to tell if the regularization is enough Bool continuationCondition = true; // Scaling factor of the matrix : M-> M + \lambda I with \lambda very small // The regularization is needed for fast decreasing covariance models const Scalar startingScaling = ResourceMap::GetAsScalar("GaussianProcess-StartingScaling"); const Scalar maximalScaling = ResourceMap::GetAsScalar("GaussianProcess-MaximalScaling"); Scalar cumulatedScaling = 0.0; Scalar scaling = startingScaling; HMatrixFactory hmatFactory; HMatrixParameters hmatrixParameters; while (continuationCondition && (cumulatedScaling < maximalScaling)) { // Unroll the regularization to optimize the computation if (samplingMethod_ == 1) { LOGINFO(OSS() << "Assemble and factor the covariance matrix"); covarianceHMatrix_ = hmatFactory.build(mesh_.getVertices(), covarianceModel_.getDimension(), true, hmatrixParameters); if (covarianceModel_.getDimension() == 1) { CovarianceAssemblyFunction simple(covarianceModel_, mesh_.getVertices(), cumulatedScaling); covarianceHMatrix_.assemble(simple, 'L'); } else { CovarianceBlockAssemblyFunction block(covarianceModel_, mesh_.getVertices(), cumulatedScaling); covarianceHMatrix_.assemble(block, 'L'); } try { covarianceHMatrix_.factorize("LLt"); continuationCondition = false; } catch (InternalException) { cumulatedScaling += scaling ; scaling *= 2.0; Scalar assemblyEpsilon = hmatrixParameters.getAssemblyEpsilon() / 10.0; hmatrixParameters.setAssemblyEpsilon(assemblyEpsilon); Scalar recompressionEpsilon = hmatrixParameters.getRecompressionEpsilon() / 10.0; hmatrixParameters.setRecompressionEpsilon(recompressionEpsilon); LOGDEBUG(OSS() << "Currently, scaling up to " << cumulatedScaling << " to get an admissible covariance. Maybe compression & recompression factors are not adapted."); LOGDEBUG(OSS() << "Currently, assembly espilon = " << assemblyEpsilon ); LOGDEBUG(OSS() << "Currently, recompression epsilon " << recompressionEpsilon); } } else { const UnsignedInteger fullSize = covarianceMatrix.getDimension(); for (UnsignedInteger i = 0; i < fullSize; ++i) covarianceMatrix(i, i) += scaling; LOGINFO(OSS() << "Factor the covariance matrix"); try { covarianceCholeskyFactor_ = covarianceMatrix.computeCholesky(); continuationCondition = false; } catch (...) { cumulatedScaling += scaling ; scaling *= 2.0; } } } // While if (scaling >= maximalScaling) throw InvalidArgumentException(HERE) << "Error; Could not compute the Cholesky factor" << " Scaling up to " << cumulatedScaling << " was not enough"; if (cumulatedScaling > 0.0) LOGWARN(OSS() << "Warning! Scaling up to " << cumulatedScaling << " was needed in order to get an admissible covariance. "); // The process has been initialized isInitialized_ = true; } /* String converter */ String GaussianProcess::__repr__() const { OSS oss(true); oss << "class=" << GaussianProcess::GetClassName(); oss << " mesh=" << mesh_ << " trend=" << trend_ << " covarianceModel=" << covarianceModel_ << " covarianceCholeskyFactor=" << covarianceCholeskyFactor_ << " isInitialized=" << isInitialized_ << " hasStationaryTrend=" << hasStationaryTrend_ << " checkedStationaryTrend=" << checkedStationaryTrend_; return oss; } String GaussianProcess::__str__(const String & offset) const { OSS oss(false); oss << "GaussianProcess(" << "trend=" << trend_.__str__(offset) << ", covariance=" << covarianceModel_.__str__(offset) << ")"; return oss; } /* Mesh accessor */ void GaussianProcess::setMesh(const Mesh & mesh) { checkedStationaryTrend_ = false; ProcessImplementation::setMesh(mesh); isInitialized_ = false; covarianceCholeskyFactor_ = TriangularMatrix(); covarianceHMatrix_ = HMatrix(); } /* TimeGrid accessor */ void GaussianProcess::setTimeGrid(const RegularGrid & timeGrid) { setMesh(timeGrid); } /** Set sampling method accessor */ void GaussianProcess::setSamplingMethod(const UnsignedInteger samplingMethod) { if (samplingMethod > 2) throw InvalidArgumentException(HERE) << "Sampling method should be 0 (Cholesky), 1 (H-Matrix implementation) or 2 (Gibbs, available only in dimension 1 "; if ((samplingMethod == 2) && getDimension() != 1) throw InvalidArgumentException(HERE) << "Sampling method Gibbs is available only in dimension 1 "; // Set the sampling method if (samplingMethod != samplingMethod_) { samplingMethod_ = samplingMethod; isInitialized_ = false; covarianceCholeskyFactor_ = TriangularMatrix(); covarianceHMatrix_ = HMatrix(); } } /* Realization generator */ Field GaussianProcess::getRealization() const { Sample values; if ((getDimension() == 1) && (samplingMethod_ == 2)) values = getRealizationGibbs(); else if (samplingMethod_ == 1) values = getRealizationHMatrix(); else values = getRealizationCholesky(); // If constant trend if (isTrendStationary()) { // If nonzero trend if (stationaryTrendValue_.norm() != 0.0) values += stationaryTrendValue_; values.setDescription(getDescription()); return Field(mesh_, values); } // else apply the trend values.setDescription(getDescription()); return trend_(Field(mesh_, values)); } Sample GaussianProcess::getRealizationGibbs() const { const Sample vertices(getMesh().getVertices()); const UnsignedInteger size = vertices.getSize(); const UnsignedInteger nMax = std::max(static_cast(1), ResourceMap::GetAsUnsignedInteger("GaussianProcess-GibbsMaximumIteration")); Sample values(size, 1); Point diagonal(size); const KPermutationsDistribution permutationDistribution(size, size); for (UnsignedInteger n = 0; n < nMax; ++n) { LOGINFO(OSS() << "Gibbs sampler - start iteration " << n + 1 << " over " << nMax); const Point permutation(permutationDistribution.getRealization()); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger index = static_cast< UnsignedInteger >(permutation[i]); LOGDEBUG(OSS() << "Gibbs sampler - update " << i << " -> component " << index << " over " << size - 1); // Here we work on the normalized covariance, ie the correlation Sample covarianceRow(covarianceModel_.discretizeRow(vertices, index)); diagonal[index] = covarianceRow[index][0]; const Point delta(1, (DistFunc::rNormal() - values[index][0]) / diagonal[index]); values += covarianceRow * delta; } } // We have to rescale the realization for (UnsignedInteger i = 0; i < size; ++i) values[i] *= diagonal[i]; return values; } Sample GaussianProcess::getRealizationCholesky() const { if (!isInitialized_) initialize(); // Constantes values const UnsignedInteger size = getMesh().getVerticesNumber(); const UnsignedInteger fullSize = covarianceCholeskyFactor_.getDimension(); const Point gaussianPoint(DistFunc::rNormal(fullSize)); SampleImplementation values(size, dimension_); const Point rawResult(covarianceCholeskyFactor_ * gaussianPoint); LOGINFO(OSS() << "In GaussianProcess::getRealizationCholesky(), size=" << size << ", fullSize=" << fullSize << ", gaussianPoint dimension=" << gaussianPoint.getDimension() << ", rawResult dimension=" << rawResult.getDimension()); values.setData(rawResult); return values; } Sample GaussianProcess::getRealizationHMatrix() const { if (!isInitialized_) initialize(); const UnsignedInteger size = getMesh().getVerticesNumber(); const UnsignedInteger fullSize = covarianceHMatrix_.getNbRows(); const Point gaussianPoint(DistFunc::rNormal(fullSize)); Point y(fullSize); covarianceHMatrix_.gemv('N', 1.0, gaussianPoint, 0.0, y); Sample values(size, dimension_); values.getImplementation()->setData(y); return values; } /* Covariance model accessor */ CovarianceModel GaussianProcess::getCovarianceModel() const { return covarianceModel_; } /* Trend accessor */ TrendTransform GaussianProcess::getTrend() const { return trend_; } /* Check if the process is stationary */ Bool GaussianProcess::isStationary() const { return covarianceModel_.isStationary() && isTrendStationary(); } /* Tell if the process is trend stationary */ Bool GaussianProcess::isTrendStationary() const { if (!checkedStationaryTrend_) checkStationaryTrend(); return hasStationaryTrend_; } /* Check if the process is trend stationary */ void GaussianProcess::checkStationaryTrend() const { hasStationaryTrend_ = true; checkedStationaryTrend_ = true; const UnsignedInteger n = mesh_.getVerticesNumber(); if (n == 0) return; stationaryTrendValue_ = (*trend_.getEvaluation())(mesh_.getVertices()[0]); for (UnsignedInteger i = 1; i < n; ++i) { if ((*trend_.getEvaluation())(mesh_.getVertices()[i]) != stationaryTrendValue_) { hasStationaryTrend_ = false; return; } } return; } /* Check if the process is Normal */ Bool GaussianProcess::isNormal() const { return true; } /* Method save() stores the object through the StorageManager */ void GaussianProcess::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute("covarianceModel_", covarianceModel_); adv.saveAttribute("covarianceCholeskyFactor_", covarianceCholeskyFactor_); adv.saveAttribute("isInitialized_", isInitialized_); adv.saveAttribute("hasStationaryTrend_", hasStationaryTrend_); adv.saveAttribute("checkedStationaryTrend_", checkedStationaryTrend_); adv.saveAttribute("trend_", trend_); adv.saveAttribute("stationaryTrendValue_", stationaryTrendValue_); adv.saveAttribute("samplingMethod_", samplingMethod_); } /* Method load() reloads the object from the StorageManager */ void GaussianProcess::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute("covarianceModel_", covarianceModel_); adv.loadAttribute("covarianceCholeskyFactor_", covarianceCholeskyFactor_); adv.loadAttribute("isInitialized_", isInitialized_); adv.loadAttribute("hasStationaryTrend_", hasStationaryTrend_); adv.loadAttribute("checkedStationaryTrend_", checkedStationaryTrend_); adv.loadAttribute("trend_", trend_); adv.loadAttribute("stationaryTrendValue_", stationaryTrendValue_); adv.loadAttribute("samplingMethod_", samplingMethod_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/KarhunenLoeveQuadratureAlgorithm.cxx000066400000000000000000000474041307543307100301130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * quadrature approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveQuadratureAlgorithm.hxx" #include "openturns/Exception.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/Pointer.hxx" #include "openturns/Uniform.hxx" #include "openturns/ComposedDistribution.hxx" #include "openturns/GaussProductExperiment.hxx" #include "openturns/EnumerateFunction.hxx" #include "openturns/OrthogonalProductPolynomialFactory.hxx" #include "openturns/LegendreFactory.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/LinearCombinationFunction.hxx" #include "openturns/DualLinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveQuadratureAlgorithm */ CLASSNAMEINIT(KarhunenLoeveQuadratureAlgorithm); static const Factory Algorithm_KarhunenLoeveQuadratureAlgorithm; /* Constructor without parameters */ KarhunenLoeveQuadratureAlgorithm::KarhunenLoeveQuadratureAlgorithm() : KarhunenLoeveAlgorithmImplementation() , domain_() , experiment_() , basis_() , basisSize_(0) , mustScale_(false) { // Nothing to do } /* Constructor with parameters */ KarhunenLoeveQuadratureAlgorithm::KarhunenLoeveQuadratureAlgorithm(const Domain & domain, const CovarianceModel & covariance, const WeightedExperiment & experiment, const Basis & basis, const UnsignedInteger basisSize, const Bool mustScale, const Scalar threshold) : KarhunenLoeveAlgorithmImplementation(covariance, threshold) , domain_(domain) , experiment_(experiment) , basis_(basis) , basisSize_(basisSize) , mustScale_(mustScale) { // Check the arguments const UnsignedInteger dimension = domain.getDimension(); const Distribution distribution(experiment.getDistribution()); if (dimension != distribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the domain dimension=" << dimension << " does not match the distribution dimension=" << distribution.getDimension() << " of the weighted experiment"; const Point domainLowerBound(domain.getLowerBound()); const Point domainUpperBound(domain.getUpperBound()); if (Interval(domainLowerBound, domainUpperBound).isNumericallyEmpty()) throw InvalidArgumentException(HERE) << "Error: the given domain is numerically empty."; } /* Constructor with parameters specialized to the case of Legendre polynomials and Gauss product quadrature */ KarhunenLoeveQuadratureAlgorithm::KarhunenLoeveQuadratureAlgorithm(const Domain & domain, const CovarianceModel & covariance, const UnsignedInteger marginalDegree, const Scalar threshold) : KarhunenLoeveAlgorithmImplementation(covariance, threshold) , domain_(domain) , experiment_(GaussProductExperiment(ComposedDistribution(Collection(domain.getDimension(), Uniform())), Indices(domain.getDimension(), marginalDegree + 1))) // Here we have to use the double/double version of std::pow to make VC++ happy. Grrr. , basis_(OrthogonalProductPolynomialFactory(Collection(domain.getDimension(), LegendreFactory()), EnumerateFunction(domain.getDimension(), SpecFunc::MaxScalar))), basisSize_(static_cast(std::floor(0.5 + std::pow(1.0 * marginalDegree, 1.0 * domain.getDimension())))) , mustScale_(true) { // Check the arguments const UnsignedInteger dimension = domain.getDimension(); const Distribution distribution(experiment_.getDistribution()); if (dimension != distribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the domain dimension=" << dimension << " does not match the distribution dimension=" << distribution.getDimension() << " of the weighted experiment"; const Point domainLowerBound(domain.getLowerBound()); const Point domainUpperBound(domain.getUpperBound()); if (Interval(domainLowerBound, domainUpperBound).isNumericallyEmpty()) throw InvalidArgumentException(HERE) << "Error: the given domain is numerically empty."; } /* Virtual constructor */ KarhunenLoeveQuadratureAlgorithm * KarhunenLoeveQuadratureAlgorithm::clone() const { return new KarhunenLoeveQuadratureAlgorithm( *this ); } /* Solve the Fredholm eigenvalues problem: \int_{\Omega}C(s,t)\phi_n(s)ds=\lambda_n\phi_n(t) using a quadrature approximation of the integrals over a given basis: \int_{\Omega}C(s,t)\phi_n(s)ds=\sum_{l=1}^Lw_lC(\xi_l,t)\phi_n(\xi_l)1_{\Omega}(\xi_n)/p(\xi_n) where (w_n,\xi_n) is the quadrature rule associated with the density p, p being such that p>0 over \Omega. The eignefunctions \phi_n are projected onto the basis \theta_k \phi_n(t)=\sum_k\alpha_k^n\theta_k(t) leading to: \forall t\in\Omega, \sum_{l=1}^Lw_lC(\xi_l,t)\sum_k\alpha_k^n\theta(\xi_l)1_{\Omega}(\xi_l)/p(\xi_l)=\lambda_n\sum_k\alpha_k^n\theta(t) then we write that the dot product wrt any \theta_j of both sides are equal: \sum_{l'=1}^Lw_l'[\sum_{l=1}^Lw_lC(\xi_l,\xi_l')\sum_k\alpha_k^n\theta(\xi_l)1_{\Omega}(\xi_l)/p(\xi_l)]\theta_j'(\xi_l')1_{\Omega}(\xi_l')/p(\xi_l')=\lambda_n\sum_k\alpha_k^n\sum_{l'=1}^Lw_l'\theta_k(\xi_l')\theta_j(\xi_l')1_{\Omega}(\xi_l')/p(\xi_l') introducing \eta_l=\sqrt{1_{\Omega}(\xi_l)w_l(\xi_n)/p(\xi_n)} it writes: \sum_k\alpha_k^n\sum_{l'=1}^L\sum_{l=1}^L[\eta_l\theta(\xi_l)]\eta_lC(\xi_l,\xi_l')\eta_l'[\eta_l'\theta_j'(\xi_l')]=\lambda_n\sum_k\alpha_k^n\sum_{l'=1}^L\eta_l'\theta_k(\xi_l')\eta_l'\theta_j(\xi_l') In a block-matrix form we get: [C(\xi_1,\xi_1) ... C(\xi_1,\xi_L)][K_11 ... K_1N][\alpha_1] [\alpha_1] [ ... ... ][ ... ...][ ... ] = \lambda_n [ ... ] [C(\xi_N,\xi_1) ... C(\xi_N,\xi_N)][K_N1 ... K_NN][\alpha_N] [\alpha_N] Where: K_ij = \int_{\Omega}\theta_i(s)\theta_j(s)ds I with I the dxd identity matrix */ void KarhunenLoeveQuadratureAlgorithm::run() { const UnsignedInteger domainDimension = domain_.getDimension(); const Distribution distribution(experiment_.getDistribution()); // First thing to do: build a linear transformation that maps the range of the distribution associated with the weighted experiment to the bounding box of the domain const Point domainLowerBound(domain_.getLowerBound()); const Point domainUpperBound(domain_.getUpperBound()); const Point distributionLowerBound(distribution.getRange().getLowerBound()); const Point distributionUpperBound(distribution.getRange().getUpperBound()); const Bool hasSameBounds = (domainLowerBound == distributionLowerBound) && (domainUpperBound == distributionUpperBound); // The function scaling maps points in the range of the distribution into the domain Function scaling; Function inverseScaling; // Normalization factor takes into account the fact that we map the range of the distribution defining the weighted experiment with the bounding box of the domain Scalar normalizationFactor = 1.0; if (!hasSameBounds) { TriangularMatrix T(domainDimension); TriangularMatrix inverseT(domainDimension); Point center((distributionUpperBound + distributionLowerBound) * 0.5); Point constant((domainUpperBound + domainLowerBound) * 0.5); for (UnsignedInteger i = 0; i < domainDimension; ++i) { T(i, i) = (domainUpperBound[i] - domainLowerBound[i]) / (distributionUpperBound[i] - distributionLowerBound[i]); normalizationFactor *= T(i, i); inverseT(i, i) = 1.0 / T(i, i); } scaling = LinearFunction(center, constant, T); inverseScaling = LinearFunction(constant, center, inverseT); } // Here we set the collection of functions Collection coll(basisSize_); for (UnsignedInteger i = 0; i < basisSize_; ++i) if (!hasSameBounds && mustScale_) coll[i] = ComposedFunction(basis_.build(i), inverseScaling); else coll[i] = basis_.build(i); // Compute the integration nodes and weights Point rawWeights; WeightedExperiment experimentCopy(experiment_); LOGINFO("Generate the weighted experiment"); Sample rawNodes(experimentCopy.generateWithWeights(rawWeights)); LOGINFO(OSS(false) << "Initial number of integration nodes=" << rawNodes.getSize()); LOGINFO("Generate the pdf"); const Sample pdf(distribution.computePDF(rawNodes)); if (!hasSameBounds) rawNodes = scaling(rawNodes); // Update the weights in order to match Lebesgue distribution on the domain // We keep only the nodes inside of the domain Sample nodes(0, domainDimension); Point weights(0); LOGINFO("Filter the integration nodes"); for (UnsignedInteger i = 0; i < rawWeights.getDimension(); ++i) { const Bool isInside = domain_.contains(rawNodes[i]); if (isInside) { nodes.add(rawNodes[i]); weights.add(std::sqrt(normalizationFactor * rawWeights[i] / pdf[i][0])); } } const UnsignedInteger nodesNumber = nodes.getSize(); // Reduce the scope of quadrature to free the data as soon as possible { Sample quadrature(nodes); SampleImplementation weightsAsSample(nodesNumber, 1); weightsAsSample.setData(weights); quadrature.stack(weightsAsSample); quadrature = quadrature.sortAccordingToAComponent(0); Indices full(domainDimension); full.fill(); nodes = quadrature.getMarginal(full); weights = quadrature.getMarginal(domainDimension).getImplementation()->getData(); } // Now we compute the basis functions over the nodes, properly scaled LOGINFO(OSS(false) << "Final number of integration nodes=" << nodesNumber); if (nodesNumber == 0) throw InternalException(HERE) << "Error: cannot compute a Karhunen Loeve decomposition with zero integration node."; LOGINFO("Compute the design matrix"); MatrixImplementation scaledTheta(nodesNumber, basisSize_); UnsignedInteger indexTheta = 0; // scaledTheta(i,j)=w_i\theta_j(\xi_i) for (UnsignedInteger j = 0; j < basisSize_; ++j) { const Point thetaj(coll[j](nodes).getImplementation()->getData()); for (UnsignedInteger i = 0; i < nodesNumber; ++i) { scaledTheta[indexTheta] = thetaj[i] * weights[i]; ++indexTheta; } } // Compute the Cholesky factor L of \theta^t\diag(w_i)^2\theta, ie LL^t=\theta^t\diag(w_i)^2\theta LOGINFO("Compute the Cholesky factor of the Gram matrix"); CovarianceMatrix gram(scaledTheta.computeGram(true)); const Scalar epsilon = ResourceMap::GetAsScalar("KarhunenLoeveQuadratureFactory-RegularizationFactor"); if (epsilon > 0.0) for (UnsignedInteger i = 0; i < gram.getDimension(); ++i) gram(i, i) += epsilon; TriangularMatrix cholesky(gram.computeCholesky(false)); // Discretize the covariance model LOGINFO("Discretize the covariance matrix"); const UnsignedInteger dimension = covariance_.getDimension(); CovarianceMatrix C(covariance_.discretize(nodes)); // Prepare the generalized eigenvalues problem // Step 1: scale C by the weights LOGINFO("Scale the covariance matrix"); if (dimension == 1) { for (UnsignedInteger j = 0; j < nodesNumber; ++j) for (UnsignedInteger i = j; i < nodesNumber; ++i) { const Scalar factor = weights[i] * weights[j]; C(i, j) *= factor; } // i } // dimension == 1 else { for (UnsignedInteger j = 0; j < nodesNumber; ++j) for (UnsignedInteger i = j; i < nodesNumber; ++i) { const Scalar factor = weights[i] * weights[j]; for (UnsignedInteger m = 0; m < dimension; ++m) for (UnsignedInteger n = 0; n < dimension; ++n) C(m + i * dimension, n + j * dimension) *= factor; } // i } // dimension > 1 // Step 2: take theta into account Matrix omega; LOGINFO("Scale the design matrix"); // If dimension == 1 we can use scaledTheta directly if (dimension == 1) omega = scaledTheta; // Here we have to expand scaledTheta if dimension > 1 else { omega = Matrix(nodesNumber * dimension, basisSize_ * dimension); for (UnsignedInteger j = 0; j < basisSize_; ++j) for (UnsignedInteger i = 0; i < nodesNumber; ++i) { const Scalar value = scaledTheta(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) omega(k + i * dimension, k + j * dimension) = value; } } // M.genProd(N, f1, f2) = // M .N si f1=false, f2=false // M^t.N si f1=true, f2=false // M .N^t si f1=false, f2=true // M^t.N^t si f1=true, f2=true LOGINFO("Build the lhs matrix of the generalized eigenvalues problem"); C = omega.getImplementation()->genProd(*(C * omega).getImplementation(), true, false); // Cholesky decomposition of scaledTheta LOGINFO("Expand the Cholesky factor"); TriangularMatrix choleskyBlock; // If dimension == 1 we can use cholesky directly if (dimension == 1) choleskyBlock = cholesky; // Here we have to expand cholesky if dimension > 1 else { choleskyBlock = TriangularMatrix(basisSize_ * dimension); for (UnsignedInteger j = 0; j < basisSize_; ++j) for (UnsignedInteger i = j; i < basisSize_; ++i) { const Scalar value = cholesky(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) choleskyBlock(k + i * dimension, k + j * dimension) = value; } } // Step 3: reduction to a standard eigenvalues problem // A = L^{-1}CL^{-t} // = L^{-1}((CL^{-t})^t)^t as (A^t)^t=A // = L^{-1}(L^{-1}C^t)^t as (MN)^t = N^tM^t // = L^{-1}(L^{-1}C)^t as C^t = C LOGINFO("Reduce the generalized eigenvalue problem to a standard eigenvalues problem"); C = choleskyBlock.solveLinearSystem((choleskyBlock.solveLinearSystem(C)).transpose()).getImplementation(); SquareMatrix eigenVectors; // Last time we need C, so we can overwrite it by eigenVectors LOGINFO("Solve the standard eigenvalues problem"); Point eigenValues(C.computeEV(eigenVectors, false)); const UnsignedInteger augmentedDimension = eigenVectors.getDimension(); // Transform the eigenvectors to the generalizd ones // Last time we need cholesky, so we can overwrite it by eigenVectors LOGINFO("Get the generalized eigenvectors"); eigenVectors = choleskyBlock.transpose().solveLinearSystem(eigenVectors, false).getImplementation(); LOGINFO("Sort the eigenvectors by decreasing eigenvalues"); Sample eigenPairs(augmentedDimension, augmentedDimension + 1); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenPairs[i][j] = eigenVectors(j, i); eigenPairs[i][augmentedDimension] = -eigenValues[i]; } eigenPairs = eigenPairs.sortAccordingToAComponent(augmentedDimension); for (UnsignedInteger i = 0; i < augmentedDimension; ++i) { for (UnsignedInteger j = 0; j < augmentedDimension; ++j) eigenVectors(i, j) = eigenPairs[j][i]; eigenValues[i] = -eigenPairs[i][augmentedDimension]; } UnsignedInteger K = 0; Scalar cumulatedVariance = std::abs(eigenValues[0]); // Find the cut-off in the eigenvalues while ((K < eigenValues.getSize()) && (eigenValues[K] >= threshold_ * cumulatedVariance)) { cumulatedVariance += eigenValues[K]; ++K; } // Reduce and rescale the eigenvectors MatrixImplementation transposedProjection(nodesNumber, K); Point selectedEV(K); Basis modes(0); ProcessSample modesAsProcessSample(Mesh(nodes), 0, dimension); SampleImplementation values(nodesNumber, dimension); UnsignedInteger indexProjection = 0; for (UnsignedInteger k = 0; k < K; ++k) { selectedEV[k] = eigenValues[k]; const MatrixImplementation a(*eigenVectors.getColumn(k).getImplementation()); const Scalar norm = (omega * Point(a)).norm(); // Store the eigen modes in two forms Point modeValues(omega.getImplementation()->genProd(a)); const Scalar factor = modeValues[0] < 0.0 ? -1.0 / norm : 1.0 / norm; // Unscale the values for (UnsignedInteger i = 0; i < nodesNumber; ++i) modeValues[i] *= factor / weights[i]; values.setData(modeValues); modesAsProcessSample.add(values); if (dimension == 1) modes.add(LinearCombinationFunction(coll, a * factor)); else { SampleImplementation aSample(basisSize_, dimension); aSample.setData(a * factor); modes.add(DualLinearCombinationFunction(coll, aSample)); } // Build the relevant column of the transposed projection matrix // For k=1,...,K K is the number of selected modes // M_{k,:}[f(\xi_j)]=1/\sqrt{\lambda_k}\int_{\Omega}f(x)\phi_k(x)dx // =1/\sqrt{\lambda_k}\sum_{j=1}^N w_jf(\xi_j)\phi_k(\xi_j) // =1/\sqrt{\lambda_k}\sum_{j=1}^N w_jf(\xi_j)\sum_{i=1}^P a_i^k\theta_i(\xi_j) // So M is KxNd, \omega is NdxPd, eigenVectors is PdxK // M^t=\omega * eigenVectors MatrixImplementation b(omega.getImplementation()->genProd(a * (factor / sqrt(selectedEV[k])))); UnsignedInteger indexB = 0; for (UnsignedInteger i = 0; i < nodesNumber; ++i) { const Scalar wI = weights[i]; for (UnsignedInteger j = 0; j < dimension; ++j) { b[indexB] *= wI; ++indexB; } // for j } // for i std::copy(b.begin(), b.end(), transposedProjection.begin() + indexProjection); indexProjection += b.getSize(); } result_ = KarhunenLoeveResultImplementation(covariance_, threshold_, selectedEV, modes, modesAsProcessSample, transposedProjection.transpose()); } /* Domain accessor */ Domain KarhunenLoeveQuadratureAlgorithm::getDomain() const { return domain_; } /* Experiment accessor */ WeightedExperiment KarhunenLoeveQuadratureAlgorithm::getExperiment() const { return experiment_; } /* Basis accessor */ Basis KarhunenLoeveQuadratureAlgorithm::getBasis() const { return basis_; } /* BasisSize accessor */ UnsignedInteger KarhunenLoeveQuadratureAlgorithm::getBasisSize() const { return basisSize_; } /* MustScale accessor */ Bool KarhunenLoeveQuadratureAlgorithm::getMustScale() const { return mustScale_; } /* String converter */ String KarhunenLoeveQuadratureAlgorithm::__repr__() const { OSS oss(true); oss << "class=" << KarhunenLoeveQuadratureAlgorithm::GetClassName() << ", domain=" << domain_; return oss; } /* String converter */ String KarhunenLoeveQuadratureAlgorithm::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KarhunenLoeveQuadratureAlgorithm::GetClassName() << ", domain=" << domain_; return oss; } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveQuadratureAlgorithm::save(Advocate & adv) const { KarhunenLoeveAlgorithmImplementation::save(adv); adv.saveAttribute( "domain_", domain_ ); adv.saveAttribute( "experiment_", experiment_ ); adv.saveAttribute( "basis_", basis_ ); adv.saveAttribute( "basisSize_", basisSize_ ); adv.saveAttribute( "mustScale_", mustScale_ ); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveQuadratureAlgorithm::load(Advocate & adv) { KarhunenLoeveAlgorithmImplementation::load(adv); adv.loadAttribute( "domain_", domain_ ); adv.loadAttribute( "experiment_", experiment_ ); adv.loadAttribute( "basis_", basis_ ); adv.loadAttribute( "basisSize_", basisSize_ ); adv.loadAttribute( "mustScale_", mustScale_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/KarhunenLoeveQuadratureFactory.cxx000066400000000000000000000356611307543307100275760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * quadrature approximation of the integral equation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/KarhunenLoeveQuadratureFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SquareComplexMatrix.hxx" #include "openturns/Sample.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/LinearFunction.hxx" #include "openturns/Pointer.hxx" #include "openturns/ComposedFunction.hxx" #include "openturns/LinearCombinationFunction.hxx" #include "openturns/DualLinearCombinationFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveQuadratureFactory */ CLASSNAMEINIT(KarhunenLoeveQuadratureFactory); static const Factory Factory_KarhunenLoeveQuadratureFactory; /* Constructor without parameters */ KarhunenLoeveQuadratureFactory::KarhunenLoeveQuadratureFactory() : PersistentObject() , domain_() , coll_(0) , threshold_(0.0) , nodes_(0, 0) , weights_(0) , theta_(0, 0) , cholesky_(0) { // Nothing to do } /* Constructor with parameters */ KarhunenLoeveQuadratureFactory::KarhunenLoeveQuadratureFactory(const Domain & domain, const WeightedExperiment & experiment, const Basis & basis, const UnsignedInteger basisSize, const Bool mustScale, const Scalar threshold) : PersistentObject() , domain_(domain) , coll_(basisSize) , threshold_(threshold) , nodes_(0, 0) , weights_(0) , theta_(0, 0) , cholesky_(0) { Log::Warn(OSS() << "KarhunenLoeveQuadratureFactory is deprecated"); // Check the arguments const UnsignedInteger dimension = domain.getDimension(); const Distribution distribution(experiment.getDistribution()); if (dimension != distribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the domain dimension=" << dimension << " does not match the distribution dimension=" << distribution.getDimension() << " of the weighted experiment"; // First thing to do: build a linear transformation that maps the range of the distribution associated with the weighted experiment to the bounding box of the domain const Point domainLowerBound(domain.getLowerBound()); const Point domainUpperBound(domain.getUpperBound()); if (Interval(domainLowerBound, domainUpperBound).isNumericallyEmpty()) throw InvalidArgumentException(HERE) << "Error: the given domain is numerically empty."; const Point distributionLowerBound(distribution.getRange().getLowerBound()); const Point distributionUpperBound(distribution.getRange().getUpperBound()); const Bool hasSameBounds = (domainLowerBound == distributionLowerBound) && (domainUpperBound == distributionUpperBound); // The function scaling maps points in the range of the distribution into the domain Function scaling; Function inverseScaling; // Normalization factor takes into account the fact that we map the range of the distribution defining the weighted experiment with the bounding box of the domain Scalar normalizationFactor = 1.0; if (!hasSameBounds) { TriangularMatrix T(dimension); TriangularMatrix inverseT(dimension); Point center((distributionUpperBound + distributionLowerBound) * 0.5); Point constant((domainUpperBound + domainLowerBound) * 0.5); for (UnsignedInteger i = 0; i < dimension; ++i) { T(i, i) = (domainUpperBound[i] - domainLowerBound[i]) / (distributionUpperBound[i] - distributionLowerBound[i]); normalizationFactor *= T(i, i); inverseT(i, i) = 1.0 / T(i, i); } scaling = LinearFunction(center, constant, T); inverseScaling = LinearFunction(constant, center, inverseT); } // Here we set the collection of functions for (UnsignedInteger i = 0; i < basisSize; ++i) if (!hasSameBounds && mustScale) coll_[i] = ComposedFunction(basis.build(i), inverseScaling); else coll_[i] = basis.build(i); // Compute the integration nodes and weights Point rawWeights; WeightedExperiment experimentCopy(experiment); LOGINFO("Generate the weighted experiment"); Sample rawNodes(experimentCopy.generateWithWeights(rawWeights)); LOGINFO(OSS(false) << "Initial number of integration nodes=" << rawNodes.getSize()); LOGINFO("Generate the pdf"); const Sample pdf(distribution.computePDF(rawNodes)); if (!hasSameBounds) rawNodes = scaling(rawNodes); // Update the weights in order to match Lebesgue distribution on the domain // We keep only the nodes inside of the domain nodes_ = Sample(0, dimension); LOGINFO("Filter the integration nodes"); for (UnsignedInteger i = 0; i < rawWeights.getDimension(); ++i) { const Bool isInside = domain.contains(rawNodes[i]); if (isInside) { nodes_.add(rawNodes[i]); weights_.add(std::sqrt(normalizationFactor * rawWeights[i] / pdf[i][0])); } } // Now we compute the basis functions over the nodes, properly scaled const UnsignedInteger nodesNumber = nodes_.getSize(); LOGINFO(OSS(false) << "Final number of integration nodes=" << nodesNumber); if (nodesNumber == 0) throw InternalException(HERE) << "Error: cannot compute a Karhunen Loeve decomposition with zero integration node."; LOGINFO("Compute the design matrix"); theta_ = Matrix(nodesNumber, basisSize); for (UnsignedInteger j = 0; j < basisSize; ++j) { const Point thetaj(coll_[j](nodes_).getImplementation()->getData()); for (UnsignedInteger i = 0; i < nodesNumber; ++i) theta_(i, j) = weights_[i] * thetaj[i]; } // Compute the Cholesky factor of \theta^t\theta LOGINFO("Compute the Cholesky factor of the Gram matrix"); CovarianceMatrix gram(theta_.computeGram(true)); const Scalar epsilon = ResourceMap::GetAsScalar("KarhunenLoeveQuadratureFactory-RegularizationFactor"); if (epsilon > 0.0) for (UnsignedInteger i = 0; i < gram.getDimension(); ++i) gram(i, i) += epsilon; cholesky_ = gram.computeCholesky(false); } /* Virtual constructor */ KarhunenLoeveQuadratureFactory * KarhunenLoeveQuadratureFactory::clone() const { return new KarhunenLoeveQuadratureFactory( *this ); } /* Solve the Fredholm eigenvalues problem: \int_{\Omega}C(s,t)\phi_n(s)ds=\lambda_n\phi_n(t) using a quadrature approximation of the integrals over a given basis: \int_{\Omega}C(s,t)\phi_n(s)ds=\sum_{l=1}^Lw_lC(\xi_l,t)\phi_n(\xi_l)1_{\Omega}(\xi_n)/p(\xi_n) where (w_n,\xi_n) is the quadrature rule associated with the density p, p being such that p>0 over \Omega. The eignefunctions \phi_n are projected onto the basis \theta_k \phi_n(t)=\sum_k\alpha_k^n\theta_k(t) leading to: \forall t\in\Omega, \sum_{l=1}^Lw_lC(\xi_l,t)\sum_k\alpha_k^n\theta(\xi_l)1_{\Omega}(\xi_l)/p(\xi_l)=\lambda_n\sum_k\alpha_k^n\theta(t) then we write that the dot product wrt any \theta_j of both sides are equal: \sum_{l'=1}^Lw_l'[\sum_{l=1}^Lw_lC(\xi_l,\xi_l')\sum_k\alpha_k^n\theta(\xi_l)1_{\Omega}(\xi_l)/p(\xi_l)]\theta_j'(\xi_l')1_{\Omega}(\xi_l')/p(\xi_l')=\lambda_n\sum_k\alpha_k^n\sum_{l'=1}^Lw_l'\theta_k(\xi_l')\theta_j(\xi_l')1_{\Omega}(\xi_l')/p(\xi_l') introducing \eta_l=\sqrt{1_{\Omega}(\xi_l)w_l(\xi_n)/p(\xi_n)} it writes: \sum_k\alpha_k^n\sum_{l'=1}^L\sum_{l=1}^L[\eta_l\theta(\xi_l)]\eta_lC(\xi_l,\xi_l')\eta_l'[\eta_l'\theta_j'(\xi_l')]=\lambda_n\sum_k\alpha_k^n\sum_{l'=1}^L\eta_l'\theta_k(\xi_l')\eta_l'\theta_j(\xi_l') In a block-matrix form we get: [C(\xi_1,\xi_1) ... C(\xi_1,\xi_L)][K_11 ... K_1N][\alpha_1] [\alpha_1] [ ... ... ][ ... ...][ ... ] = \lambda_n [ ... ] [C(\xi_N,\xi_1) ... C(\xi_N,\xi_N)][K_N1 ... K_NN][\alpha_N] [\alpha_N] Where: K_ij = \int_{\Omega}\theta_i(s)\theta_j(s)ds I with I the dxd identity matrix */ Basis KarhunenLoeveQuadratureFactory::build(const CovarianceModel & covarianceModel, Point & selectedEV) const { const UnsignedInteger nodesNumber = nodes_.getSize(); const UnsignedInteger dimension = covarianceModel.getDimension(); // Discretize the covariance model LOGINFO("Discretize the covariance matrix"); CovarianceMatrix C(covarianceModel.discretize(nodes_)); // Prepare the generalized eigenvalues problem // Step 1: scale C by the weights LOGINFO("Scale the covariance matrix"); if (dimension == 1) { for (UnsignedInteger j = 0; j < nodesNumber; ++j) for (UnsignedInteger i = j; i < nodesNumber; ++i) { const Scalar factor = weights_[i] * weights_[j]; C(i, j) *= factor; } // i } // dimension == 1 else { for (UnsignedInteger j = 0; j < nodesNumber; ++j) for (UnsignedInteger i = j; i < nodesNumber; ++i) { const Scalar factor = weights_[i] * weights_[j]; for (UnsignedInteger m = 0; m < dimension; ++m) for (UnsignedInteger n = 0; n < dimension; ++n) C(m + i * dimension, n + j * dimension) *= factor; } // i } // dimension > 1 // Step 2: take theta into account const UnsignedInteger basisSize = coll_.getSize(); Matrix omega; LOGINFO("Scale the design matrix"); // If dimension == 1 we can use theta_ directly if (dimension == 1) omega = theta_; // Here we have to expand theta if dimension > 1 else { omega = Matrix(nodesNumber * dimension, basisSize * dimension); for (UnsignedInteger j = 0; j < basisSize; ++j) for (UnsignedInteger i = 0; i < nodesNumber; ++i) { const Scalar value = theta_(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) omega(k + i * dimension, k + j * dimension) = value; } } // M.genProd(N, f1, f2) = // M .N si f1=false, f2=false // M^t.N si f1=true, f2=false // M .N^t si f1=false, f2=true // M^t.N^t si f1=true, f2=true LOGINFO("Build the lhs matrix of the generalized eigenvalues problem"); C = omega.getImplementation()->genProd(*(C * omega).getImplementation(), true, false); // Cholesky decomposition of theta LOGINFO("Expand the Cholesky factor"); TriangularMatrix cholesky; // If dimension == 1 we can use cholesky_ directly if (dimension == 1) cholesky = cholesky_; // Here we have to expand cholesky if dimension > 1 else { cholesky = TriangularMatrix(basisSize * dimension); for (UnsignedInteger j = 0; j < basisSize; ++j) for (UnsignedInteger i = j; i < basisSize; ++i) { const Scalar value = cholesky_(i, j); for (UnsignedInteger k = 0; k < dimension; ++k) cholesky(k + i * dimension, k + j * dimension) = value; } } // Step 3: reduction to a standard eigenvalues problem // A = L^{-1}CL^{-t} // = L^{-1}((CL^{-t})^t)^t as (A^t)^t=A // = L^{-1}(L^{-1}C^t)^t as (MN)^t = N^tM^t // = L^{-1}(L^{-1}C)^t as C^t = C LOGINFO("Reduce the generalized eigenvalue problem to a standard eigenvalu problem"); C = cholesky.solveLinearSystem((cholesky.solveLinearSystem(C)).transpose()).getImplementation(); SquareMatrix eigenVectors; // Last time we need C, so we can overwrite it by eigenVectors LOGINFO("Solve the standard eigenvalue problem"); Point eigenValues(C.computeEV(eigenVectors, false)); const UnsignedInteger eigenDimension = eigenVectors.getDimension(); // Transform the eigenvectors to the generalizd ones // Last time we need cholesky, so we can overwrite it by eigenVectors LOGINFO("Get the generalized eigenvectors"); eigenVectors = cholesky.transpose().solveLinearSystem(eigenVectors, false).getImplementation(); LOGINFO("Sort the eigenvectors by decreasing eigenvalues"); Sample eigenPairs(eigenDimension, eigenDimension + 1); for (UnsignedInteger i = 0; i < eigenDimension; ++i) { for (UnsignedInteger j = 0; j < eigenDimension; ++j) eigenPairs[i][j] = eigenVectors(j, i); eigenPairs[i][eigenDimension] = -eigenValues[i]; } eigenPairs = eigenPairs.sortAccordingToAComponent(eigenDimension); for (UnsignedInteger i = 0; i < eigenDimension; ++i) { for (UnsignedInteger j = 0; j < eigenDimension; ++j) eigenVectors(i, j) = eigenPairs[j][i]; eigenValues[i] = -eigenPairs[i][eigenDimension]; } selectedEV = Point(0); UnsignedInteger j = 0; FunctionCollection resultBasis(0); LOGINFO("Keep only the relevant eigen pairs"); while ((j < eigenDimension) && (eigenValues[j] > threshold_ * std::abs(eigenValues[0]))) { selectedEV.add(eigenValues[j]); const Point a(*eigenVectors.getColumn(j).getImplementation()); const Scalar norm = (omega * a).norm(); if (dimension == 1) resultBasis.add(LinearCombinationFunction(coll_, a / norm)); else { SampleImplementation aSample(basisSize, dimension); aSample.setData(a / norm); resultBasis.add(DualLinearCombinationFunction(coll_, aSample)); } ++j; } return resultBasis; } /* String converter */ String KarhunenLoeveQuadratureFactory::__repr__() const { OSS oss(true); oss << "class=" << KarhunenLoeveQuadratureFactory::GetClassName() << ", domain=" << domain_ << ", coll=" << coll_ << ", threshold=" << threshold_ << ", nodes=" << nodes_ << ", weights=" << weights_ << ", theta=" << theta_ << ", cholesky=" << cholesky_; return oss; } /* String converter */ String KarhunenLoeveQuadratureFactory::__str__(const String & offset) const { OSS oss(false); oss << "class=" << KarhunenLoeveQuadratureFactory::GetClassName() << ", domain=" << domain_ << ", coll=" << coll_ << ", threshold=" << threshold_; return oss; } /* Method save() stores the object through the StorageManager */ void KarhunenLoeveQuadratureFactory::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "domain_", domain_ ); adv.saveAttribute( "coll_", coll_ ); adv.saveAttribute( "threshold_", threshold_ ); adv.saveAttribute( "nodes_", nodes_ ); adv.saveAttribute( "weights_", weights_ ); adv.saveAttribute( "theta_", theta_ ); adv.saveAttribute( "cholesky_", cholesky_ ); } /* Method load() reloads the object from the StorageManager */ void KarhunenLoeveQuadratureFactory::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "domain_", domain_ ); adv.loadAttribute( "coll_", coll_ ); adv.loadAttribute( "threshold_", threshold_ ); adv.loadAttribute( "nodes_", nodes_ ); adv.loadAttribute( "weights_", weights_ ); adv.loadAttribute( "theta_", theta_ ); adv.loadAttribute( "cholesky_", cholesky_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/RandomWalk.cxx000066400000000000000000000151241307543307100234710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the RandomWalk process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/RandomWalk.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(RandomWalk); static const Factory Factory_RandomWalk; /* Standard constructor */ RandomWalk::RandomWalk() : ProcessImplementation() , origin_(1) , distribution_(Normal()) , currentPosition_(1) { setDescription(distribution_.getDescription()); } /* Standard constructor */ RandomWalk::RandomWalk(const Point & origin, const Distribution & distribution) : ProcessImplementation() , origin_(origin) , distribution_() , currentPosition_(origin) { // Set the dimension of the process setDimension(origin.getDimension()); setDistribution(distribution); } /* Standard constructor */ RandomWalk::RandomWalk(const Point & origin, const Distribution & distribution, const RegularGrid & timeGrid) : ProcessImplementation() , origin_(origin) , distribution_() , currentPosition_(origin) { // Set the dimension of the process setDimension(origin.getDimension()); setDistribution(distribution); setTimeGrid(timeGrid); } /* Virtual constructor */ RandomWalk * RandomWalk::clone() const { return new RandomWalk(*this); } /* String converter */ String RandomWalk::__repr__() const { OSS oss; oss << "class=" << RandomWalk::GetClassName() << ", origin=" << origin_ << ", distribution=" << distribution_; return oss; } /* Is the underlying stationary ? */ Bool RandomWalk::isStationary() const { return false; } /* Is the underlying gaussian ? */ Bool RandomWalk::isNormal() const { // The easy case: the distribution is an interface to // a Normal distribution if (distribution_.getImplementation()->getClassName() == "Normal") return true; // The hard case: the distribution has the properties of a Normal distribution return (distribution_.isElliptical() && distribution_.getStandardDistribution().hasIndependentCopula()); } /* Realization accessor */ Field RandomWalk::getRealization() const { const UnsignedInteger size = mesh_.getVerticesNumber(); Sample data(size, origin_); for (UnsignedInteger i = 1; i < size; ++i) data[i] = data[i - 1] + distribution_.getRealization(); currentPosition_ = data[data.getSize() - 1]; data.setDescription(getDescription()); return Field(mesh_, data); } /* Compute the next steps of a random walk */ TimeSeries RandomWalk::getFuture(const UnsignedInteger stepNumber) const { /* TimeGrid of the process */ RegularGrid timeGrid; try { timeGrid = getTimeGrid(); } catch (...) { throw InternalException(HERE) << "Error: can extend the realization of a process only if defined on a regular grid."; } if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = RegularGrid(mesh_).getStep(); const RegularGrid futurTimeGrid(RegularGrid(mesh_).getEnd(), timeStep, stepNumber); Sample data(stepNumber, dimension_); Point previous(currentPosition_); for (UnsignedInteger i = 0; i < stepNumber; ++i) { data[i] = previous + distribution_.getRealization(); previous = data[i]; } return TimeSeries(futurTimeGrid, data); } /* Get the random vector corresponding to the i-th marginal component */ RandomWalk::Implementation RandomWalk::getMarginal(const UnsignedInteger i) const { if (i >= dimension_) throw InvalidArgumentException(HERE) << "The index of a marginal process must be in the range [0, dim-1]"; return new RandomWalk(Point(1, origin_[i]), distribution_.getMarginal(i), mesh_); } /* Get the marginal process corresponding to indices components */ RandomWalk::Implementation RandomWalk::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal process must be in the range [0, dim-1] and must be different"; const UnsignedInteger size = indices.getSize(); Point marginalOrigin(size); for (UnsignedInteger i = 0; i < size; ++i) marginalOrigin[i] = origin_[indices[i]]; return new RandomWalk(marginalOrigin, distribution_.getMarginal(indices), mesh_); } /* Distribution accessor */ Distribution RandomWalk::getDistribution() const { return distribution_; } /* Distribution accessor */ void RandomWalk::setDistribution(const Distribution & distribution) { if (distribution.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given distribution has a dimension=" << distribution.getDimension() << " incompatible with the process dimension=" << dimension_; distribution_ = distribution; setDescription(distribution_.getDescription()); } /* Origin accessor */ Point RandomWalk::getOrigin() const { return origin_; } void RandomWalk::setOrigin(const Point & origin) { if (origin.getDimension() != dimension_) throw InvalidArgumentException(HERE) << "Error: the given origin has a dimension=" << origin.getDimension() << " incompatible with the process dimension=" << dimension_; origin_ = origin; } /* Method save() stores the object through the StorageManager */ void RandomWalk::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); adv.saveAttribute( "origin_", origin_ ); adv.saveAttribute( "currentPosition_", currentPosition_ ); } /* Method load() reloads the object from the StorageManager */ void RandomWalk::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); adv.loadAttribute( "origin_", origin_ ); adv.loadAttribute( "currentPosition_", currentPosition_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/SpectralGaussianProcess.cxx000066400000000000000000000354051307543307100262450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the SpectralGaussianProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/SpectralGaussianProcess.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Log.hxx" #include "openturns/DistFunc.hxx" #include "openturns/SpecFunc.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection< TriangularComplexMatrix >); static const Factory > Factory_PersistentCollection_TriangularComplexMatrix; CLASSNAMEINIT(SpectralGaussianProcess); static const Factory Factory_SpectralGaussianProcess; SpectralGaussianProcess::SpectralGaussianProcess() : ProcessImplementation() , spectralModel_() , maximalFrequency_(0.0) , nFrequency_(0) , frequencyStep_(0.0) , choleskyFactorsCache_(0) , alpha_(0) , fftAlgorithm_() { setDimension(spectralModel_.getDimension()); setDescription(Description::BuildDefault(getDimension(), "x")); } /* Standard constructor */ SpectralGaussianProcess::SpectralGaussianProcess(const SecondOrderModel & model, const RegularGrid & timeGrid) : ProcessImplementation() , spectralModel_(model.getSpectralModel()) , maximalFrequency_(0.0) , nFrequency_(0) , frequencyStep_(0.0) , choleskyFactorsCache_(0) , alpha_(0) , fftAlgorithm_() { setTimeGrid(timeGrid); setDimension(model.getDimension()); setDescription(Description::BuildDefault(getDimension(), "x")); } /* Standard constructor with spectralModel - The timeGrid imposes the frequencies values*/ SpectralGaussianProcess::SpectralGaussianProcess(const SpectralModel & spectralModel, const RegularGrid & timeGrid) : ProcessImplementation() , spectralModel_(spectralModel) , maximalFrequency_(0.0) , nFrequency_(0) , frequencyStep_(0.0) , choleskyFactorsCache_(0) , alpha_(0) , fftAlgorithm_() { setTimeGrid(timeGrid); setDimension(spectralModel.getDimension()); setDescription(Description::BuildDefault(getDimension(), "x")); } /* Standard constructor */ SpectralGaussianProcess::SpectralGaussianProcess(const SecondOrderModel & model, const Scalar maximalFrequency, const UnsignedInteger nFrequency) : ProcessImplementation() , spectralModel_(model.getSpectralModel()) , maximalFrequency_(maximalFrequency) , nFrequency_(nFrequency) , frequencyStep_(0.0) , choleskyFactorsCache_(0) , alpha_(0) , fftAlgorithm_() { if (!(maximalFrequency > 0.0)) throw InvalidArgumentException(HERE) << "Error: the maximal frequency must be positive, here maximalFrequency=" << maximalFrequency; if (nFrequency < 1) throw InvalidArgumentException(HERE) << "Error: the number of frequency points in the positive domain must be at least 1."; frequencyStep_ = maximalFrequency_ / nFrequency_; // Adapt the time grid to the frequency discretization computeTimeGrid(); computeAlpha(); setDimension(model.getDimension()); setDescription(Description::BuildDefault(getDimension(), "x")); } /* Standard constructor with spectralModel - The timeGrid imposes the frequencies values*/ SpectralGaussianProcess::SpectralGaussianProcess(const SpectralModel & spectralModel, const Scalar maximalFrequency, const UnsignedInteger nFrequency) : ProcessImplementation() , spectralModel_(spectralModel) , maximalFrequency_(maximalFrequency) , nFrequency_(nFrequency) , frequencyStep_(0.0) , choleskyFactorsCache_(0) , alpha_(0) , fftAlgorithm_() { if (!(maximalFrequency > 0.0)) throw InvalidArgumentException(HERE) << "Error: the maximal frequency must be positive, here maximalFrequency=" << maximalFrequency; if (nFrequency < 1) throw InvalidArgumentException(HERE) << "Error: the number of frequency points in the positive domain must be at least 1."; frequencyStep_ = maximalFrequency_ / nFrequency_; // Adapt the time grid to the frequency discretization computeTimeGrid(); computeAlpha(); setDimension(spectralModel.getDimension()); setDescription(Description::BuildDefault(getDimension(), "x")); } /* Virtual constructor */ SpectralGaussianProcess * SpectralGaussianProcess::clone() const { return new SpectralGaussianProcess(*this); } /** Get the Cholesky factor of the kth DSP matrix from cache or computed on the fly */ TriangularComplexMatrix SpectralGaussianProcess::getCholeskyFactor(const UnsignedInteger k) const { // The value is in the cache if (k < choleskyFactorsCache_.getSize()) return choleskyFactorsCache_[k]; // Compute the needed factor TriangularComplexMatrix factor(computeCholeskyFactor(k)); // There are still room to store the factor if (k < ResourceMap::GetAsUnsignedInteger("SpectralGaussianProcess-CholeskyCacheSize")) choleskyFactorsCache_.add(factor); else LOGWARN(OSS() << "Warning! The cache for cholesky factors is full. Expect a big performance penalty. Increase the cache size using the ResourceMap key \"SpectralGaussianProcess-CholeskyCacheSize\" if you have enough memory."); return factor; } /** Compute the needed Cholesky factor using regularization */ TriangularComplexMatrix SpectralGaussianProcess::computeCholeskyFactor(const UnsignedInteger k) const { // Convert the index into a frequency // The index k corresponds to the kth positive discretization point in the frequency domain [-f_max, f_max] discretized using the center of the regular partition into 2N cells of the interval. const Scalar frequency = (k + 0.5) * frequencyStep_; // Compute the DSP matrix HermitianMatrix spectralDensityMatrix(spectralModel_(frequency)); // Flag to tell if the regularization has to be increased Bool continuationCondition = true; // Scale control values Scalar cumulatedScaling = 0.0; const Scalar startingScaling = ResourceMap::GetAsScalar("SpectralGaussianProcess-StartingScaling"); const Scalar maximalScaling = ResourceMap::GetAsScalar("SpectralGaussianProcess-MaximalScaling"); Scalar scaling = startingScaling; TriangularComplexMatrix choleskyFactor; while (continuationCondition) { // Try to compute the Cholesky factor with the current regularization try { choleskyFactor = spectralDensityMatrix.computeCholesky(); continuationCondition = false; } // If the factorization failed, increase the regularization catch (InternalException &) { cumulatedScaling += scaling; for (UnsignedInteger index = 0; index < dimension_; ++index) spectralDensityMatrix(index, index) += scaling; scaling *= 2.0; } // No reasonable regularization succeeded if (cumulatedScaling >= maximalScaling) throw InvalidArgumentException(HERE) << "Error; Could not compute the Cholesky factor" << " Scaling up to " << cumulatedScaling << " was not enough"; } // Loop over the continuation condition return choleskyFactor; } /* String converter */ String SpectralGaussianProcess::__repr__() const { OSS oss(true); oss << "class=" << SpectralGaussianProcess::GetClassName(); oss << " timeGrid=" << getTimeGrid() << " spectralModel=" << spectralModel_ << " maximal frequency=" << maximalFrequency_ << " n frequency=" << nFrequency_ << " cholesky cache=" << choleskyFactorsCache_; return oss; } String SpectralGaussianProcess::__str__(const String & offset) const { OSS oss(false); oss << " SpectralGaussianProcess=" << SpectralGaussianProcess::GetClassName() << " dimension=" << dimension_ << " spectralModel=" << spectralModel_ << " maximal frequency=" << maximalFrequency_ << " n frequency=" << nFrequency_; return oss; } /* Get the grid of frequencies, covering both the negative and the positive axes */ RegularGrid SpectralGaussianProcess::getFrequencyGrid() const { return RegularGrid(-maximalFrequency_ + 0.5 * frequencyStep_, frequencyStep_, 2 * nFrequency_); } /* Maximal frequency accessor */ Scalar SpectralGaussianProcess::getMaximalFrequency() const { return maximalFrequency_; } /* Number of frequency steps accessor */ UnsignedInteger SpectralGaussianProcess::getNFrequency() const { return nFrequency_; } /* Frequency steps accessor */ Scalar SpectralGaussianProcess::getFrequencyStep() const { return frequencyStep_; } /* FFT algorithm accessors */ FFT SpectralGaussianProcess::getFFTAlgorithm() const { return fftAlgorithm_; } void SpectralGaussianProcess::setFFTAlgorithm(const FFT & fft) { fftAlgorithm_ = fft; } /** Spectral model accessor */ SpectralModel SpectralGaussianProcess::getSpectralModel() const { return spectralModel_; } /* Set TimeGrid */ void SpectralGaussianProcess::setTimeGrid(const RegularGrid & tg) { if (tg != RegularGrid(mesh_)) { // The time grid must contains an even number of points const UnsignedInteger nT = tg.getN(); if (nT % 2 != 0) throw InvalidArgumentException(HERE) << "Error: only time grids with an even (or better a power of two) number of points are allowed. You may use the AdaptGrid method."; // Fix the new timeGrid mesh_ = tg; // Compute the frequency characteristics maximalFrequency_ = 0.5 / tg.getStep(); nFrequency_ = nT / 2; frequencyStep_ = maximalFrequency_ / nFrequency_; // We must fix also the alpha vector computeAlpha(); // Reset the cache choleskyFactorsCache_ = TriangularComplexMatrixPersistentCollection(0); } } /* Compute the time grid associated to the frequency grid */ void SpectralGaussianProcess::computeTimeGrid() { mesh_ = RegularGrid(0.0, 1.0 / (2.0 * maximalFrequency_), 2 * nFrequency_); } /* Set the alpha vector */ void SpectralGaussianProcess::computeAlpha() { alpha_ = PersistentComplexCollection(2 * nFrequency_); // Convert the frequency into pulsation, take into account that there are 2*nFrequency points and that // a sqrt(2) factor is needed to switch from Box Muller transform to normal complex random variable const Scalar factor = 2.0 * nFrequency_ * sqrt(frequencyStep_); const Scalar beta = -M_PI * (1.0 - 1.0 / (2.0 * nFrequency_)); for (UnsignedInteger index = 0; index < 2 * nFrequency_; ++index) { const Scalar theta = beta * index; alpha_[index] = factor * Complex(cos(theta), sin(theta)); } } /* Realization accessor */ Field SpectralGaussianProcess::getRealization() const { // Build the big collection of size dimension * number of frequencies const UnsignedInteger twoNF = 2 * nFrequency_; ComplexCollection arrayCollection(dimension_ * twoNF); // Loop over the frequencies // Gaussian vector // Loop over half of the frequency range for (UnsignedInteger k = 0; k < nFrequency_; ++k) { const TriangularComplexMatrix choleskyFactor(getCholeskyFactor(k)); // Use matrix/vector product to optimize the loop ComplexCollection left(dimension_); ComplexCollection right(dimension_); // Compute both the left and the right points using the current Cholesky factor R. // We use the relation S(-f)=conjugate(S(f)) from which R(-f)=conjugate(R(f)) // and R(-f).z = conjugate(R(f).conjugate(z)) // If z ~ N(0, 1) in C, then conjugate(z) ~ N(0, 1) in C, so there is no need to conjugate z // Complex gaussian realization for (UnsignedInteger i = 0; i < dimension_; ++i) { // Care! Getting a realization of a random gaussian should be done using two intermediate variables // Complex(DistFunc::rNormal(), DistFunc::rNormal()) is correct but the fill of the complex depends on the os and compiler const Scalar realLeft = DistFunc::rNormal(); const Scalar imagLeft = DistFunc::rNormal(); left[i] = Complex(realLeft, imagLeft); const Scalar realRight = DistFunc::rNormal(); const Scalar imagRight = DistFunc::rNormal(); right[i] = Complex(realRight, imagRight); } // Use an efficient matrix/vector product here ComplexCollection resultLeft(choleskyFactor * left); ComplexCollection resultRight(choleskyFactor * right); for (UnsignedInteger i = 0; i < dimension_; ++i) { arrayCollection[i * twoNF + nFrequency_ - 1 - k] = conj(resultLeft[i]); arrayCollection[i * twoNF + nFrequency_ + k] = resultRight[i]; } } // Loop over the frequencies // From the big collection, build the inverse FFT by blocks Sample sampleValues(twoNF , dimension_); for (UnsignedInteger i = 0; i < dimension_; ++i) { const ComplexCollection inverseFFTResult(fftAlgorithm_.inverseTransform(arrayCollection, i * twoNF, twoNF)); for (UnsignedInteger k = 0; k < twoNF; ++k) sampleValues[k][i] = std::real(inverseFFTResult[k] * alpha_[k]); } sampleValues.setDescription(getDescription()); return Field(mesh_, sampleValues); } /* Check if the process is stationary */ Bool SpectralGaussianProcess::isStationary() const { return true; } /* Check if the process is Normal */ Bool SpectralGaussianProcess::isNormal() const { return true; } /* Adapt a time grid in order to have a power of two time stamps. Both the starting point and the end point are preserved. */ RegularGrid SpectralGaussianProcess::AdaptGrid(const RegularGrid & grid) { const Scalar start = grid.getStart(); const Scalar end = grid.getEnd(); UnsignedInteger powerOfTwo = SpecFunc::NextPowerOfTwo(grid.getN()); return RegularGrid(start, (end - start) / powerOfTwo, powerOfTwo); } /* Method save() stores the object through the StorageManager */ void SpectralGaussianProcess::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute("spectralModel_", spectralModel_); adv.saveAttribute("maximalFrequency_", maximalFrequency_); adv.saveAttribute("nFrequency_", nFrequency_); adv.saveAttribute("choleskyFactorsCache_", choleskyFactorsCache_); adv.saveAttribute("alpha_", alpha_); adv.saveAttribute("fftAlgorithm_", fftAlgorithm_); } /* Method load() reloads the object from the StorageManager */ void SpectralGaussianProcess::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute("spectralModel_", spectralModel_); adv.loadAttribute("maximalFrequency_", maximalFrequency_); adv.loadAttribute("nFrequency_", nFrequency_); adv.loadAttribute("choleskyFactorsCache_", choleskyFactorsCache_); adv.loadAttribute("alpha_", alpha_); adv.loadAttribute("fftAlgorithm_", fftAlgorithm_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/WhiteNoise.cxx000066400000000000000000000126501307543307100235110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the WhiteNoise process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/WhiteNoise.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Point.hxx" #include "openturns/DatabaseFunction.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WhiteNoise); static const Factory Factory_WhiteNoise; /* Standard constructor */ WhiteNoise::WhiteNoise() : ProcessImplementation() , distribution_() { setDistribution(Normal()); } /* Standard constructor */ WhiteNoise::WhiteNoise(const Distribution & distribution) /* throw (InvalidArgumentException) */ : ProcessImplementation() , distribution_() { // Check if the given distribution has a null mean setDistribution(distribution); } /* Standard constructor */ WhiteNoise::WhiteNoise(const Distribution & distribution, const Mesh & mesh) : ProcessImplementation() , distribution_() { // Set the dimension of the process // Check if the given distribution has a null mean setDistribution(distribution); setMesh(mesh); } /* Virtual constructor */ WhiteNoise * WhiteNoise::clone() const { return new WhiteNoise(*this); } /* String converter */ String WhiteNoise::__repr__() const { OSS oss; oss << "class=" << WhiteNoise::GetClassName() << " distribution=" << distribution_ ; return oss; } String WhiteNoise::__str__(const String & offset) const { OSS oss; oss << offset << getClassName() << "(" << distribution_.__str__() << ")"; return oss; } /* Is the underlying stationary ? */ Bool WhiteNoise::isStationary() const { return true; } /* Is the underlying gaussian ? */ Bool WhiteNoise::isNormal() const { // The easy case: the distribution is an interface to // a Normal distribution if (distribution_.getImplementation()->getClassName() == "Normal") return true; // The hard case: the distribution has the properties of a Normal distribution return (distribution_.isElliptical() && distribution_.getStandardDistribution().hasIndependentCopula()); } /* Realization accessor */ Field WhiteNoise::getRealization() const { Sample values(distribution_.getSample(mesh_.getVerticesNumber())); values.setDescription(getDescription()); return Field(mesh_, values); } /* Continuous realization accessor */ Function WhiteNoise::getContinuousRealization() const { return DatabaseFunction(mesh_.getVertices(), distribution_.getSample(mesh_.getVerticesNumber())); } /* Compute the next steps of a random walk */ TimeSeries WhiteNoise::getFuture(const UnsignedInteger stepNumber) const { /* TimeGrid of the process */ RegularGrid timeGrid; try { timeGrid = getTimeGrid(); } catch (...) { throw InternalException(HERE) << "Error: can extend the realization of a process only if defined on a regular grid."; } if (stepNumber == 0) throw InvalidArgumentException(HERE) << "Error: the number of future steps must be positive."; /* TimeGrid associated with the possible future */ const Scalar timeStep = timeGrid.getStep(); const RegularGrid futurTimeGrid(timeGrid.getEnd(), timeStep, stepNumber); return TimeSeries(futurTimeGrid, distribution_.getSample(stepNumber)); } /* Get the marginal process corresponding to the i-th marginal component */ WhiteNoise::Implementation WhiteNoise::getMarginal(const UnsignedInteger i) const { if (i >= getDimension()) throw InvalidArgumentException(HERE) << "The index of a marginal process must be in the range [0, dim-1]"; return WhiteNoise(distribution_.getMarginal(i), mesh_).clone(); } /* Get the marginal random vector corresponding to indices components */ WhiteNoise::Implementation WhiteNoise::getMarginal(const Indices & indices) const { if (!indices.check(getDimension())) throw InvalidArgumentException(HERE) << "The indices of a marginal process must be in the range [0, dim-1] and must be different"; return new WhiteNoise(distribution_.getMarginal(indices), mesh_); } /* Distribution accessor */ Distribution WhiteNoise::getDistribution() const { return distribution_; } /* Distribution accessor */ void WhiteNoise::setDistribution(const Distribution & distribution) { distribution_ = distribution; setDimension(distribution.getDimension()); setDescription(distribution.getDescription()); } /* Method save() stores the object through the StorageManager */ void WhiteNoise::save(Advocate & adv) const { ProcessImplementation::save(adv); adv.saveAttribute( "distribution_", distribution_ ); } /* Method load() reloads the object from the StorageManager */ void WhiteNoise::load(Advocate & adv) { ProcessImplementation::load(adv); adv.loadAttribute( "distribution_", distribution_ ); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/WhittleFactory.cxx000066400000000000000000000477501307543307100244140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/WhittleFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/UserDefinedSpectralModel.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/Log.hxx" #include "openturns/Normal.hxx" #include "openturns/UniVariatePolynomial.hxx" #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/Cobyla.hxx" #include "openturns/MethodBoundEvaluation.hxx" BEGIN_NAMESPACE_OPENTURNS TEMPLATE_CLASSNAMEINIT(PersistentCollection); static const Factory > Factory_PersistentCollection_WhittleFactoryState; CLASSNAMEINIT(WhittleFactory); static const Factory Factory_WhittleFactory; /* Default constructor */ WhittleFactory::WhittleFactory() : ARMAFactoryImplementation() , spectralFactory_(WelchFactory()) , normalizedFrequencies_(0) , timeGrid_() , m_(0) , spectralDensity_() , sigma2_(0.0) , verbose_(false) , isHistoryEnabled_(true) , history_(0) , startingPoints_(0) , solver_(new Cobyla()) { // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); } /* Standard constructor */ WhittleFactory::WhittleFactory(const UnsignedInteger p, const UnsignedInteger q, const Bool invertible) : ARMAFactoryImplementation(p, q, invertible) , spectralFactory_(WelchFactory()) , normalizedFrequencies_(0) , timeGrid_() , m_(0) , spectralDensity_() , sigma2_(0.0) , verbose_(false) , isHistoryEnabled_(true) , history_(0) , startingPoints_(0) , solver_(new Cobyla()) { // Create the set of starting points using the parameters in the ResourceMap initializeStartingPoints(); // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); } /* Standard constructor */ WhittleFactory::WhittleFactory(const Indices & p, const Indices & q, const Bool invertible) : ARMAFactoryImplementation(p, q, invertible) , spectralFactory_(WelchFactory()) , normalizedFrequencies_(0) , timeGrid_() , m_(0) , spectralDensity_() , sigma2_(0.0) , verbose_(false) , isHistoryEnabled_(true) , history_(0) , startingPoints_(0) , solver_(new Cobyla()) { // Create the set of starting points using the parameters in the ResourceMap initializeStartingPoints(); // Create the optimization solver parameters using the parameters in the ResourceMap initializeCobylaSolverParameter(); } /* Virtual constructor */ WhittleFactory * WhittleFactory::clone() const { return new WhittleFactory(*this); } /* Estimate the spectral density */ void WhittleFactory::buildSpectralDensity(const TimeSeries & timeSeries) const { timeGrid_ = timeSeries.getTimeGrid(); // Estimate a spectral model computeSpectralDensity(spectralFactory_.buildAsUserDefinedSpectralModel(timeSeries)); } /* Estimate the spectral density */ void WhittleFactory::buildSpectralDensity(const ProcessSample & sample) const { timeGrid_ = sample.getTimeGrid(); // Estimate a spectral model computeSpectralDensity(spectralFactory_.buildAsUserDefinedSpectralModel(sample)); } /* Compute the spectral density in normalized frequencies */ void WhittleFactory::computeSpectralDensity(const UserDefinedSpectralModel & spectralModel) const { // We get the frequency grid and fix it for computation purposes const RegularGrid frequencyGrid(spectralModel.getFrequencyGrid()); m_ = frequencyGrid.getN(); // Index of the first frequency to take into account UnsignedInteger kStart = 0; // Suppress first value if the associated frequency is zero if (frequencyGrid.getStart() == 0.0) { --m_; kStart = 1; } const Scalar fMax = frequencyGrid.getEnd(); normalizedFrequencies_ = Point(m_); spectralDensity_ = Point(m_); Scalar dt = timeGrid_.getStep(); for (UnsignedInteger k = 0; k < m_ ; ++k) { const Scalar frequency = frequencyGrid.getValue(k + kStart); const Scalar estimatedValue = std::real(spectralModel(frequency)(0, 0)) / dt; spectralDensity_[k] = estimatedValue; normalizedFrequencies_[k] = M_PI * frequency / fMax; } } /* Compute the log-likelihood function */ Scalar WhittleFactory::computeLogLikelihood(const Point & theta) const { Scalar logTerm = 0.0; Scalar ratioTerm = 0.0; for (UnsignedInteger j = 0; j < m_; ++j) { const Scalar frequency = normalizedFrequencies_[j]; // Gj computation const UnsignedInteger n = std::max(currentP_, currentQ_); Complex numerator(1.0, 0.0); Complex denominator(1.0, 0.0); Complex y(std::polar(1.0, -frequency)); Complex z(1.0, 0.0); for (UnsignedInteger i = 0; i < n; ++i) { z *= y; if (i < currentQ_) numerator += theta[currentP_ + i] * z; if (i < currentP_) denominator += theta[i] * z; } const Scalar gJ = std::norm(numerator) / std::norm(denominator); // Whittle likelihood update logTerm += log(gJ); ratioTerm += spectralDensity_[j] / gJ; } sigma2_ = ratioTerm / m_; return -logTerm - m_ * log(ratioTerm); } /* Compute the log-likelihood constraint */ Point WhittleFactory::computeLogLikelihoodInequalityConstraint(const Point & theta) const { const Scalar epsilon = ResourceMap::GetAsScalar("WhittleFactory-RootEpsilon"); Point result(nbInequalityConstraint_, 0.0); UnsignedInteger constraintIndex = 0; // If not pure MA, check the roots of the AR polynom if (currentP_ > 0) { Point arCoefficients(currentP_ + 1, 1.0); for (UnsignedInteger i = 0; i < currentP_; ++i) arCoefficients[i + 1] = theta[i]; UniVariatePolynomial polynom(arCoefficients); // Check the roots only if the polynom is not constant if (polynom.getDegree() > 0) { Collection roots(polynom.getRoots()); Scalar minRootModule = std::norm(roots[0]); for (UnsignedInteger i = 1; i < currentP_; ++i) { const Scalar rootModule = std::norm(roots[i]); if (rootModule < minRootModule) minRootModule = rootModule; } result[constraintIndex] = minRootModule - 1.0 - epsilon; } // For constant polynom, assume root 0 else result[constraintIndex] = -1.0 - epsilon; ++constraintIndex; } // If invertible and not pure AR, check the roots of the MA polynom if (invertible_ && currentQ_ > 0) { Point maCoefficients(currentQ_ + 1, 1.0); for (UnsignedInteger i = 0; i < currentQ_; ++i) maCoefficients[i + 1] = theta[i + currentP_]; UniVariatePolynomial polynom(maCoefficients); // Check the roots only if the polynom is not constant if (polynom.getDegree() > 0) { Collection roots(polynom.getRoots()); Scalar minRootModule = std::norm(roots[0]); for (UnsignedInteger i = 1; i < currentQ_; ++i) { const Scalar rootModule = std::norm(roots[i]); if (rootModule < minRootModule) minRootModule = rootModule; } result[constraintIndex] = minRootModule - 1.0 - epsilon; } // For constant polynom, assume root 0 else result[constraintIndex] = -1.0 - epsilon; } return result; } /* Compute the log-likelihood function accessor */ Function WhittleFactory::getLogLikelihoodFunction() const { return bindMethod ( *this, &WhittleFactory::computeLogLikelihood, currentP_ + currentQ_ , 1); } Function WhittleFactory::getLogLikelihoodInequalityConstraint() const { return bindMethod ( *this, &WhittleFactory::computeLogLikelihoodInequalityConstraint, currentP_ + currentQ_, nbInequalityConstraint_); } /* Initialize optimization solver parameter using the ResourceMap */ void WhittleFactory::initializeCobylaSolverParameter() { Cobyla* cobyla = dynamic_cast(solver_.getImplementation().get()); if (cobyla == NULL) throw InternalException(HERE); cobyla->setRhoBeg(ResourceMap::GetAsScalar("WhittleFactory-DefaultRhoBeg")); solver_.setMaximumAbsoluteError(ResourceMap::GetAsScalar("WhittleFactory-DefaultRhoEnd")); solver_.setMaximumIterationNumber(ResourceMap::GetAsUnsignedInteger("WhittleFactory-DefaultMaxFun")); } /* Optimization solver accessor */ OptimizationAlgorithm WhittleFactory::getOptimizationAlgorithm() const { return solver_; } void WhittleFactory::setOptimizationAlgorithm(const OptimizationAlgorithm & solver) { solver_ = solver; } OptimizationAlgorithm WhittleFactory::getOptimizationSolver() const { Log::Warn(OSS() << "WhittleFactory::getOptimizationSolver is deprecated"); return getOptimizationAlgorithm(); } void WhittleFactory::setOptimizationSolver(const OptimizationAlgorithm & solver) { Log::Warn(OSS() << "WhittleFactory::setOptimizationSolver is deprecated"); setOptimizationAlgorithm(solver); } /* String converter */ String WhittleFactory::__repr__() const { OSS oss; oss << "class= " << WhittleFactory::GetClassName() << " p = " << p_ << " q = " << q_ << " spectralModelFactory = " << spectralFactory_; return oss; } /* String converter */ String WhittleFactory::__str__(const String & offset) const { return this->__repr__(); } /* SpectralModelFactory set acccessor */ WelchFactory WhittleFactory::getSpectralModelFactory() const { return spectralFactory_; } /* Verbosity accessor */ Bool WhittleFactory::getVerbose() const { return verbose_; } void WhittleFactory::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Enable or disable the estimation history */ void WhittleFactory::enableHistory() const { isHistoryEnabled_ = true; } void WhittleFactory::disableHistory() const { isHistoryEnabled_ = false; } Bool WhittleFactory::isHistoryEnabled() const { return isHistoryEnabled_; } void WhittleFactory::clearHistory() const { history_ = Collection< WhittleFactoryState >(0); } Collection< WhittleFactoryState > WhittleFactory::getHistory() const { return history_; } /* SpectralModelFactory get acccessor */ void WhittleFactory::setSpectralModelFactory(const WelchFactory & factory) { spectralFactory_ = factory; } /* Build method * The Whittle likelihood is a ratio of spectral densities: * \log L(\theta, \sigma^2) = -\sum_{j=1}^m\log f(\lambda_j|\theta, \sigma^2)-\frac{1}{2\pi}\sum_{j=1}^m\frac{I(\lambda_j)}{f(\lambda_j|\theta,\sigma^2)} * with: * I(\lambda_j]=\frac{1}{n}\left|\sum_{k=1}^n w_ky_k\exp(-ik\lambda_j\right|^2 * f(\lambda | \theta, \sigma^~)=\frac{\sigma^2}{2\pi}\left|\frac{\beta(\exp(-i\lambda))}{\alpha(\exp(-i\lambda))}\right|^2 * and \theta = (\alpha, \lambda), m=ceil((n-1)/2) * * In its reduced form, we have: * \log L(\theta) = m\log(2\pi)-m\log\left[\frac{1}{m}\sum_{j=1}^m\frac{I(\lambda_j)}{g(\lambda_j|\theta)}\right]-\sum_{j=1}^m\log g(\lambda_j|\theta)-m * and * \sigma^2=\frac{1}{m}\sum_{j=1}^m\frac{I(\lambda_j)}{g(\lambda_j|\theta)} * with g(\lambda|\theta)=\frax{2\pi}{\sigma^2}f(\lambda|\theta,\sigma^2) * =\left|\frac{\beta(\exp(-i\lambda))}{\alpha(\exp(-i\lambda))}\right|^2 * It can be noticed that dropping the term -\sum_{j=1}^m\log f(\lambda_j|\theta, \sigma^2) in the Whittle likelihood or the term */ ARMA WhittleFactory::build(const TimeSeries & timeSeries, Point & informationCriteria) const { if (timeSeries.getDimension() != 1) throw NotYetImplementedException(HERE) << "In WhittleFactory::build(const TimeSeries & timeSeries, Point & informationCriteria) const: currently implemented for 1 d case only"; // Compute the tapered periodogramme for the time series using the Welch method // The computation is done once buildSpectralDensity(timeSeries); return maximizeLogLikelihood(informationCriteria); } ARMA WhittleFactory::build(const TimeSeries & timeSeries) const { Point informationCriteria; return build(timeSeries, informationCriteria); } /* Build method */ ARMA WhittleFactory::build(const ProcessSample & sample, Point & informationCriteria) const { if (sample.getDimension() != 1) throw NotYetImplementedException(HERE) << "In WhittleFactory::build(const ProcessSample & sample, Point & informationCriteria) const: currently implemented for 1 d case only"; // Compute the tapered periodogramme for the process sample using the Welch method buildSpectralDensity(sample); return maximizeLogLikelihood(informationCriteria); } ARMA WhittleFactory::build(const ProcessSample & sample) const { Point informationCriteria; return build(sample, informationCriteria); } /* Do the likelihood maximization */ ARMA WhittleFactory::maximizeLogLikelihood(Point & informationCriteria) const { // Define Optimization problem OptimizationProblem problem; problem.setMinimization(false); // First, clean the history clearHistory(); const UnsignedInteger sizeP = p_.getSize(); const UnsignedInteger sizeQ = q_.getSize(); // Best parameters Point bestTheta(0); Scalar bestSigma2 = 0.0; Point bestInformationCriteria(3, SpecFunc::MaxScalar); UnsignedInteger bestP = 0; UnsignedInteger bestQ = 0; UnsignedInteger pointIndex = 0; for (UnsignedInteger pIndex = 0; pIndex < sizeP; ++pIndex) { currentP_ = p_[pIndex]; for (UnsignedInteger qIndex = 0; qIndex < sizeQ; ++qIndex) { currentQ_ = q_[qIndex]; if (verbose_) LOGINFO(OSS() << "Current parameters p=" << currentP_ << ", q=" << currentQ_); // Dimension of the optimization problem int n(currentP_ + currentQ_); int m(0); // Check the minimum root module of the AR polynom only if not pure MA process if (currentP_ > 0) ++m; // Check the minimum root module of the MA polynom only if not pure AR process and if invertible if (invertible_ && currentQ_ > 0) ++m; // Current parameters vector Point theta(startingPoints_[pointIndex]); // Optimize only if there is some ARMA parameters to estimate if (n > 0) { // Define Objective and Constraint functions for Optimization problem problem.setObjective(getLogLikelihoodFunction()); // use attributes to pass the data nbInequalityConstraint_ = m; problem.setInequalityConstraint(getLogLikelihoodInequalityConstraint()); solver_.setProblem(problem); solver_.setStartingPoint(startingPoints_[pointIndex]); // run Optimization problem solver_.run(); // optimal point const Point optpoint(solver_.getResult().getOptimalPoint()); theta = optpoint; } // Compute the information criteria // First, the corrected AIC const Scalar logLikelihood = computeLogLikelihood(theta); Point currentInformationCriteria(3); if (m_ > static_cast(n + 2)) currentInformationCriteria[0] = -2.0 * logLikelihood + 2.0 * (n + 1) * m_ / (m_ - n - 2); else { LOGWARN(OSS() << "Warning! Unable to compute the corrected AIC criteria, too few data (" << m_ << ") for the model complexity (" << n + 1); currentInformationCriteria[0] = SpecFunc::MaxScalar; } // Second, the AIC currentInformationCriteria[1] = -2.0 * logLikelihood + 2.0 * (n + 1); // Third, the BIC currentInformationCriteria[2] = -2.0 * logLikelihood + 2.0 * (n + 1) * log(1.0 * m_); if (verbose_) LOGINFO(OSS(false) << "Current estimate: theta=" << theta << ", sigma2=" << sigma2_ << ", Current information criteria=" << currentInformationCriteria); if (isHistoryEnabled_) history_.add(WhittleFactoryState(currentP_, theta, sigma2_, currentInformationCriteria, timeGrid_)); // Keep the best model according to the first criteria if (currentInformationCriteria[0] < bestInformationCriteria[0]) { bestInformationCriteria = currentInformationCriteria; bestSigma2 = sigma2_; bestTheta = theta; bestP = currentP_; bestQ = currentQ_; } if (verbose_) LOGINFO(OSS(false) << "Best so far: p=" << bestP << ", q=" << bestQ << ", theta=" << bestTheta << ", sigma2=" << bestSigma2 << ", information criteria=" << bestInformationCriteria); ++pointIndex; } // Loop over q } // Loop over p // Return the best information criteria informationCriteria = bestInformationCriteria; return WhittleFactoryState(bestP, bestTheta, bestSigma2, bestInformationCriteria, timeGrid_).getARMA(); } /* Starting points accessor */ void WhittleFactory::setStartingPoints(const Collection< Point > & startingPoints) { const UnsignedInteger sizeP = p_.getSize(); const UnsignedInteger sizeQ = q_.getSize(); // First, check the size of the collection if (startingPoints.getSize() != sizeP * sizeQ) throw InvalidArgumentException(HERE) << "Error: the given collection has size=" << startingPoints.getSize() << " but should have size=" << sizeP * sizeQ; // Second, check that all the points have the correct dimension UnsignedInteger k = 0; for (UnsignedInteger pIndex = 0; pIndex < sizeP; ++pIndex) { const UnsignedInteger p = p_[pIndex]; for (UnsignedInteger qIndex = 0; qIndex < sizeQ; ++qIndex) { const UnsignedInteger q = q_[qIndex]; // Dimension of the optimization problem const UnsignedInteger n = p + q; if (startingPoints[k].getSize() != n) throw InvalidArgumentException(HERE) << "Error: the point at index=" << k << " should have a size=" << n << " instead of size=" << startingPoints[k].getSize(); ++k; } } // Everything is ok startingPoints_ = startingPoints; } Collection< Point > WhittleFactory::getStartingPoints() const { return startingPoints_; } /* Initialize the starting points using the ResourceMap */ void WhittleFactory::initializeStartingPoints() { startingPoints_ = Collection< Point >(0); // Initialization of the starting point const Scalar theta0 = ResourceMap::GetAsScalar("WhittleFactory-DefaultStartingPointScale"); const UnsignedInteger sizeP = p_.getSize(); const UnsignedInteger sizeQ = q_.getSize(); for (UnsignedInteger pIndex = 0; pIndex < sizeP; ++pIndex) { const UnsignedInteger p = p_[pIndex]; for (UnsignedInteger qIndex = 0; qIndex < sizeQ; ++qIndex) { const UnsignedInteger q = q_[qIndex]; // Dimension of the optimization problem const UnsignedInteger n = p + q; Point theta(n); if (n > 0) { theta[0] = theta0; for (UnsignedInteger k = 1; k < static_cast(n); ++k) theta[k] = 0.5 * theta[k - 1]; } startingPoints_.add(theta); } // Loop over q } // Loop over p } /* Method save() stores the object through the StorageManager */ void WhittleFactory::save(Advocate & adv) const { ARMAFactoryImplementation::save(adv); adv.saveAttribute( "spectralFactory_", spectralFactory_); adv.saveAttribute( "verbose_", verbose_); adv.saveAttribute( "isHistoryEnabled_", isHistoryEnabled_); adv.saveAttribute( "history_", history_); adv.saveAttribute( "startingPoints_", startingPoints_); } /* Method load() reloads the object from the StorageManager */ void WhittleFactory::load(Advocate & adv) { ARMAFactoryImplementation::load(adv); adv.loadAttribute( "spectralFactory_", spectralFactory_); adv.loadAttribute( "verbose_", verbose_); adv.loadAttribute( "isHistoryEnabled_", isHistoryEnabled_); adv.loadAttribute( "history_", history_); adv.loadAttribute( "startingPoints_", startingPoints_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/WhittleFactoryState.cxx000066400000000000000000000120371307543307100254030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class stores the current state of the fitting step in the WhittleFactory class. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/WhittleFactoryState.hxx" #include "openturns/Normal.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(WhittleFactoryState); static const Factory Factory_WhittleFactoryState; /* Default constructor */ WhittleFactoryState::WhittleFactoryState() : PersistentObject() , p_(0) , theta_(0) , sigma2_(0.0) , informationCriteria_(0) , timeGrid_() { // Nothing to do } /* Standard constructor */ WhittleFactoryState::WhittleFactoryState(const UnsignedInteger p, const Point & theta, const Scalar sigma2, const Point & informationCriteria, const RegularGrid & timeGrid) : PersistentObject() , p_(p) , theta_(theta) , sigma2_(sigma2) , informationCriteria_(informationCriteria) , timeGrid_(timeGrid) { // Check the variance if (!(sigma2_ > 0.0)) throw InvalidArgumentException(HERE) << "Error: the given variance must be positive, here sigma2=" << sigma2; // Check the AR order with respect to the number of parameters if (p > theta.getSize()) throw InvalidArgumentException(HERE) << "Error: the AR order p=" << p << " is greater than the number of parameters n=" << theta.getSize(); } /* Virtual constructor */ WhittleFactoryState * WhittleFactoryState::clone() const { return new WhittleFactoryState(*this); } String WhittleFactoryState::__repr__() const { OSS oss; oss << "class= " << WhittleFactoryState::GetClassName() << " p=" << p_ << " theta=" << theta_ << " sigma2=" << sigma2_ << " informationCriteria=" << informationCriteria_; return oss; } /* String converter */ String WhittleFactoryState::__str__(const String & offset) const { OSS oss; oss << getARMA().__str__(offset) << "\n"; oss << offset << "Information criteria:\n"; oss << offset << "AICc = " << informationCriteria_[0] << "\n"; oss << offset << "AIC = " << informationCriteria_[1] << "\n"; oss << offset << "BIC = " << informationCriteria_[2]; return oss; } /* P accessor */ UnsignedInteger WhittleFactoryState::getP() const { return p_; } /* Q accessor */ UnsignedInteger WhittleFactoryState::getQ() const { return theta_.getSize() - p_; } /* Theta accessor */ Point WhittleFactoryState::getTheta() const { return theta_; } /* Sigma2 accessor */ Scalar WhittleFactoryState::getSigma2() const { return sigma2_; } /* AR coefficients accessor */ ARMACoefficients WhittleFactoryState::getARCoefficients() const { Point arCoefficients(p_); for (UnsignedInteger k = 0; k < p_; ++k) arCoefficients[k] = theta_[k]; return ARMACoefficients(arCoefficients); } /* MA coefficients accessor */ ARMACoefficients WhittleFactoryState::getMACoefficients() const { const UnsignedInteger q = getQ(); Point maCoefficients(q); for (UnsignedInteger k = 0; k < q; ++k) maCoefficients[k] = theta_[k + p_]; return ARMACoefficients(maCoefficients); } /* White noise accessor */ WhiteNoise WhittleFactoryState::getWhiteNoise() const { return WhiteNoise(Normal(0.0, sqrt(sigma2_))); } /* ARMA process accessor */ ARMA WhittleFactoryState::getARMA() const { ARMA process(getARCoefficients(), getMACoefficients(), getWhiteNoise()); process.setTimeGrid(timeGrid_); return process; } /* Information criteria accessor */ Point WhittleFactoryState::getInformationCriteria() const { return informationCriteria_; } /* Time grid accessor */ RegularGrid WhittleFactoryState::getTimeGrid() const { return timeGrid_; } /* Method save() stores the object through the StorageManager */ void WhittleFactoryState::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute( "p_", p_); adv.saveAttribute( "theta_", theta_); adv.saveAttribute( "sigma2_", sigma2_); adv.saveAttribute( "informationCriteria_", informationCriteria_); adv.saveAttribute( "timeGrid_", timeGrid_); } /* Method load() reloads the object from the StorageManager */ void WhittleFactoryState::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute( "p_", p_); adv.loadAttribute( "theta_", theta_); adv.loadAttribute( "sigma2_", sigma2_); adv.loadAttribute( "informationCriteria_", informationCriteria_); adv.loadAttribute( "timeGrid_", timeGrid_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/Process/openturns/000077500000000000000000000000001307543307100227405ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMA.hxx000066400000000000000000000111231307543307100242070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the ARMA process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMA_HXX #define OPENTURNS_ARMA_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Process.hxx" #include "openturns/Pointer.hxx" #include "openturns/Distribution.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/ARMAState.hxx" #include "openturns/WhiteNoise.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMA * * An interface class for ARMA */ class OT_API ARMA : public ProcessImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ ARMA(); /** Standard constructor with coefficients and a White Noise */ ARMA(const ARMACoefficients & ARCoefficients, const ARMACoefficients & MACoefficients, const WhiteNoise & whiteNoise); /** Standard constructor with coefficients, a White Noise and a state */ ARMA(const ARMACoefficients & ARCoefficients, const ARMACoefficients & MACoefficients, const WhiteNoise & whiteNoise, const ARMAState & state); /** Virtual constructor */ virtual ARMA * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Is the underlying a stationary process ? */ Bool isStationary() const; /** Is the underlying a Normal process ? */ Bool isNormal() const; /** Realization accessor */ Field getRealization() const; /** Prediction of the N futur iterations of an ARMA process */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Coefficients accessor : AR & MA */ ARMACoefficients getARCoefficients() const; ARMACoefficients getMACoefficients() const; /** State accessor of the ARMA process */ ARMAState getState() const; void setState(const ARMAState & state) const; /** WhiteNoise accessor of the ARMA process */ WhiteNoise getWhiteNoise() const; void setWhiteNoise(const WhiteNoise & whiteNoise); /** Computation of nThermalization */ UnsignedInteger computeNThermalization(const Scalar epsilon) const; /** Nthermalization accessor - Visibility is done */ UnsignedInteger getNThermalization() const; /** Nthermalization accessor - Setting the value */ void setNThermalization(const UnsignedInteger n); /** Get the random vector corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Compute the steps next values of the process starting from the current state. The result is the current state extended stepNumber steps further */ ARMAState computeReccurence(const UnsignedInteger stepNumber) const; /** thermalize method */ void thermalize() const; /** AR coefficients of the ARMA process */ ARMACoefficients ARCoefficients_; /** MA coefficients of the ARMA process */ ARMACoefficients MACoefficients_; /** The distribution underlying the White Noise of the process */ Distribution noiseDistribution_; /** Size of AR part */ UnsignedInteger p_; /** Size of MA part */ UnsignedInteger q_; /** Mutable current state of the ARMA process */ mutable ARMAState state_; /** Boolean flag - compute once the number of iterations of the thermalize */ mutable Bool hasComputedNThermalization_; /** Number of iterations for the thermalize method */ mutable UnsignedInteger nThermalization_; }; /* class ARMA */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMA_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMACoefficients.hxx000066400000000000000000000053141307543307100265360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ARMACoefficients class enables to stock coefficients of an ARMA process * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMACOEFFICIENTS_HXX #define OPENTURNS_ARMACOEFFICIENTS_HXX #include "openturns/PersistentCollection.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/Point.hxx" #include "openturns/Collection.hxx" #include "openturns/UniVariatePolynomial.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMACoefficients * * Coefficients of ARMA process * */ class OT_API ARMACoefficients : public PersistentCollection { CLASSNAME; public: /** Some typedefs to ease reading */ typedef Collection SquareMatrixCollection; typedef PersistentCollection SquareMatrixPersistentCollection; /** Default and standard constructors */ explicit ARMACoefficients(const UnsignedInteger & size = 0, const UnsignedInteger & dimension = 1); explicit ARMACoefficients(const SquareMatrixCollection & collection); explicit ARMACoefficients(const Point & ScalarCoefficients); explicit ARMACoefficients(const UniVariatePolynomial & polynomial); /** Virtual constructor */ virtual ARMACoefficients * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Definition of add method : control of SquareMatrix sizes */ #ifndef SWIG using SquareMatrixCollection::add; #endif void add(const SquareMatrix & matrix); void add(const Scalar scalar); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Dimension of the underlying ARMA process */ UnsignedInteger dimension_; }; /* class ARMACoefficients */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMACOEFFICIENTS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMAFactory.hxx000066400000000000000000000042011307543307100255360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The interface class that implements all process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMAFACTORY_HXX #define OPENTURNS_ARMAFACTORY_HXX #include "openturns/TypedInterfaceObject.hxx" #include "openturns/Pointer.hxx" #include "openturns/ARMAFactoryImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMAFactory * * The class that implements all processs */ class OT_API ARMAFactory : public TypedInterfaceObject { CLASSNAME; public: /* Some typedefs for easy reading */ typedef ARMAFactoryImplementation::Implementation Implementation; /** Default constructor */ ARMAFactory(); /** Copy constructors */ ARMAFactory(const ARMAFactoryImplementation & implementation); /** Constructor from implementation */ ARMAFactory(const Implementation & p_implementation); #ifndef SWIG /** Constructor from implementation pointer */ ARMAFactory(ARMAFactoryImplementation * p_implementation); #endif /** Virtual constructor */ ARMAFactory * clone() const; /** String converter */ String __repr__() const; /** String converter */ String __str__(const String & offset = "") const; /** Build method */ ARMA build(const TimeSeries & timeSeries) const; /** Build method */ ARMA build(const ProcessSample & sample) const; }; /* class ARMAFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMAFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMAFactoryImplementation.hxx000066400000000000000000000067701307543307100304610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief An interface for all implementation class of process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMAFACTORYIMPLEMENTATION_HXX #define OPENTURNS_ARMAFACTORYIMPLEMENTATION_HXX #include "openturns/PersistentObject.hxx" #include "openturns/ARMA.hxx" #include "openturns/TimeSeries.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMAFactoryImplementation * * An interface for all implementation class of process */ class OT_API ARMAFactoryImplementation : public PersistentObject { CLASSNAME; public: /** Some typedefs to ease reading */ typedef Pointer Antecedent; typedef Antecedent Implementation; /** Default constructor */ ARMAFactoryImplementation(); /** Parameter constructor */ ARMAFactoryImplementation(const UnsignedInteger p, const UnsignedInteger q, const Bool invertible = true); /** Parameter constructor */ ARMAFactoryImplementation(const Indices & p, const Indices & q, const Bool invertible = true); /** Virtual constructor */ virtual ARMAFactoryImplementation * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** P accessor */ Indices getP() const; UnsignedInteger getCurrentP() const; /** Q accessor */ Indices getQ() const; UnsignedInteger getCurrentQ() const; /** Invertibility accessor */ Bool getInvertible() const; void setInvertible(const Bool invertible); /** Build method */ virtual ARMA build(const TimeSeries & timeSeries) const; virtual ARMA build(const TimeSeries & timeSeries, Point & informationCriteria) const; /** Build method */ virtual ARMA build(const ProcessSample & sample) const; virtual ARMA build(const ProcessSample & sample, Point & informationCriteria) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** P accessor */ void setP(const Indices & ARIndices); void setCurrentP(const UnsignedInteger p) const; /** Q accessor */ void setQ(const Indices & MAIndices); void setCurrentQ(const UnsignedInteger q) const; /** AR size */ Indices p_; mutable UnsignedInteger currentP_; /** MA size */ Indices q_; mutable UnsignedInteger currentQ_; /** Invertibility constraint */ Bool invertible_; }; /* class ARMAFactoryImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMAFACTORYIMPLEMENTATION_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMALikelihoodFactory.hxx000066400000000000000000000162761307543307100275610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class enables to get the coefficients of an ARMA process using the likelihood function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMALIKELIHOODFACTORY_HXX #define OPENTURNS_ARMALIKELIHOODFACTORY_HXX #include "openturns/ARMAFactoryImplementation.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMALikelihoodFactory * * The class implements the classical likelihood for estimating ARMA coefficients */ class OT_API ARMALikelihoodFactory : public ARMAFactoryImplementation { CLASSNAME; public: /** Default constructor */ ARMALikelihoodFactory(); /** Default constructor */ ARMALikelihoodFactory(const UnsignedInteger p, const UnsignedInteger q, const UnsignedInteger dimension, const Bool invertible = true); /** Parameter constructor */ ARMALikelihoodFactory(const Indices & p, const Indices & q, const UnsignedInteger dimension, const Bool invertible = true); /** Virtual constructor */ virtual ARMALikelihoodFactory * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** set accessor for starting point of the optimization * We also add a global set method */ void setInitialARCoefficients(const ARMACoefficients & phi); void setInitialMACoefficients(const ARMACoefficients & theta); void setInitialCovarianceMatrix(const CovarianceMatrix & covarianceMatrix); void setInitialConditions(const ARMACoefficients & arCoefficients, const ARMACoefficients & maCoefficients, const CovarianceMatrix & covarianceMatrix); /** get accessor for starting point of the optimization */ ARMACoefficients getInitialARCoefficients() const; ARMACoefficients getInitialMACoefficients() const; CovarianceMatrix getInitialCovarianceMatrix() const; /** Build method ==> estimating the coefficients */ ARMA build(const TimeSeries & timeSeries) const; ARMA build(const ProcessSample & sample) const; /** Verbosity accessor */ Bool getVerbose() const; void setVerbose(const Bool verbose); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : /** Parameter g is the maximum of p and q */ mutable UnsignedInteger currentG_; /** TimeSeries used to pass data */ mutable TimeSeries w_; /** Dimension parameter - only used to pass data */ UnsignedInteger dimension_; /** only used to pass data to be used in computeLogLikelihood */ mutable CovarianceMatrix covarianceMatrix_; mutable SquareMatrix covarianceMatrixCholesky_; mutable SquareMatrix covarianceMatrixCholeskyInverse_; /** autocovariance matrix ==> matrix of size (dimension, max(1,p) * dimension) * only used to pass data to be used in computeLogLikelihood */ mutable Matrix autoCovariance_; /** crosscovariance matrix ==> matrix of size (dimension, max(1,q) * dimension) * only used to pass data to be used in computeLogLikelihood */ mutable Matrix crossCovariance_; /** CoefficientsBlockMatrix ==> matrix of size (dimension , (p + q) * dimension) * only used to pass data to be used in computeLogLikelihood * Encapsulate both AR coefficients \phi, MA coefficients \theta * Sign conventions are different between OpenTurns and Mauricio's papers, so a * sign change is performed by accessors. In order to improve performance during * matrix multiplication, transposed matrices are stored. */ mutable Matrix blockPhiTThetaTMatrix_; /** only used to pass data to be used in computeLogLikeliHood */ mutable Scalar sigma2_; /** Bool variables */ mutable Bool hasInitializedARCoefficients_; mutable Bool hasInitializedMACoefficients_; mutable Bool hasInitializedCovarianceMatrix_; /** Verbosity control */ Bool verbose_; /** Method that initialize the size of matrices and vectors depending on the used couple (p, q) */ void initialize(); /** Compute W0 matrix */ SquareMatrix computeW0Matrix() const; /** Likelihood function ==> Compute the reduced form of the likelihood */ Scalar computeLogLikelihood(const Point & beta) const; /** Run the default initilization of coefficients / covariance for the optimization */ void defaultInitialize() const; /** Compute the autocovariance matrix - This method is public for validation purposes*/ void computeAutocovarianceMatrix() const; /** Compute the cross-covariance matrix - This method is public for validation purposes */ void computeCrossCovarianceMatrix() const; /** Compute the Cholesky factor of V1 Omega V1^{T} */ SquareMatrix computeV1_Omega_V1T_Cholesky() const; /** Compute R xi matrices */ Matrix computeRXi() const; /** Compute eta matrices */ Matrix computeEta() const; /** Compute h vectors */ Point computeVectorh(const Matrix & rxi, const Matrix & eta, const Matrix & matV1_Omega_V1TCholesky) const; /** Compute H^{T} H matrix */ SymmetricMatrix computeHTH(const Matrix & rxi) const; /** Compute I + M^{T} H^{T} H M matrix */ CovarianceMatrix computeI_MTHTHM(const SymmetricMatrix & matrix_HTH, const Matrix & matV1_Omega_V1TCholesky) const; /** Likelihood function accessor */ Function getLogLikelihoodFunction() const; /** Likelihood constraint accessor */ Function getLogLikelihoodInequalityConstraint() const; /** likelihood estimate */ Point computeLogLikelihoodInequalityConstraint( const Point & beta ) const; /** only used to pass data to be used in computeLogLikelihood and computeLogLikelihoodInequalityConstraint */ mutable UnsignedInteger inputDimension_; /** only used to pass data to be used in computeLogLikelihoodInequalityConstraint */ mutable UnsignedInteger nbInequalityConstraint_; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); /** Initialize default Cobyla solver parameter using the ResourceMap */ void initializeCobylaSolverParameter(); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; }; /* class ARMALikelihoodFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMALIKELIHOODFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ARMAState.hxx000066400000000000000000000044121307543307100252130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief ARMAState class enables to set a State before a simulation * of an ARMA process and / or t get the State * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_ARMASTATE_HXX #define OPENTURNS_ARMASTATE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/Sample.hxx" #include "openturns/Point.hxx" #include "openturns/Field.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ARMAState * * The implementation of ARMA State */ class OT_API ARMAState : public PersistentObject { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructors */ ARMAState(); ARMAState(const Sample & x, const Sample & epsilon); /** Virtual constructor */ virtual ARMAState * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** Data X accessor */ Sample getX() const; void setXEpsilon(const Sample & x, const Sample & epsilon); /** Noise \epsilon accessor */ Sample getEpsilon() const; /** Dimension accessor */ UnsignedInteger getDimension() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** Store the p last values of an ARMA(p, q) */ Sample x_; /** Store the q last value of the noise of an ARMA(p, q) */ Sample epsilon_; }; /* class ARMAState */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_ARMASTATE_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/AggregatedProcess.hxx000066400000000000000000000064501307543307100270670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the AggregatedProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_AGGREGATEDPROCESS_HXX #define OPENTURNS_AGGREGATEDPROCESS_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Process.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class AggregatedProcess * * The implementation of the AggregatedProcess class */ class OT_API AggregatedProcess : public ProcessImplementation { CLASSNAME; public: typedef Collection< Process > ProcessCollection; typedef PersistentCollection< Process > ProcessPersistentCollection; /** Default constructor */ AggregatedProcess(); /** Standard constructor */ AggregatedProcess(const ProcessCollection & coll); /** Virtual constructor */ AggregatedProcess * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Realization accessor */ Field getRealization() const; /** Continuous realization accessor */ Function getContinuousRealization() const; /** Continuation of the last realization on a given number of steps */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Get the process corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the process corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Process collection accessor */ void setProcessCollection(const ProcessCollection & coll); ProcessCollection getProcessCollection() const; /** Mesh accessor */ void setMesh(const Mesh & mesh); void setTimeGrid(const RegularGrid & timeGrid); /** Is the underlying gaussian process ? */ virtual Bool isNormal() const; /** Is the underlying a stationary process ? */ virtual Bool isStationary() const; /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Trend accessor */ TrendTransform getTrend() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** The collection of process to aggregate */ ProcessPersistentCollection processCollection_; }; /* class AggregatedProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_AGGREGATEDPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/CompositeProcess.hxx000066400000000000000000000057511307543307100270020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the CompositeProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_COMPOSITEPROCESS_HXX #define OPENTURNS_COMPOSITEPROCESS_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Process.hxx" #include "openturns/FieldFunction.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class CompositeProcess * * The implementation of the CompositeProcess class */ class OT_API CompositeProcess : public ProcessImplementation { CLASSNAME; public: /** Default constructor */ CompositeProcess(); /** Standard constructor */ CompositeProcess(const FieldFunction & function, const Antecedent & p_antecedent); /** Standard constructor */ CompositeProcess(const FieldFunction & function, const Process & antecedent); /** Virtual constructor */ virtual CompositeProcess * clone() const; /** String converter */ virtual String __repr__() const; /** String converter - pretty print */ virtual String __str__(const String & offset = "") const; /** Is the underlying a composite process ? */ Bool isComposite() const; /** Realization accessor */ virtual Field getRealization() const; /** Continuation of the last realization on a given number of steps */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Antecedent accessor */ Antecedent getAntecedent() const; /** Function accessor */ FieldFunction getFunction() const; /** Get the random vector corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal random vector corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: /** The function used for realization */ FieldFunction function_; /** The antecedent of the process through the function */ Antecedent p_antecedent_; }; /* class CompositeProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_COMPOSITEPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/ConditionedNormalProcess.hxx000066400000000000000000000053521307543307100304450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the ConditionedNormalProcess * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_CONDITIONEDNORMALPROCESS_HXX #define OPENTURNS_CONDITIONEDNORMALPROCESS_HXX #include "openturns/GaussianProcess.hxx" #include "openturns/KrigingResult.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class ConditionedNormalProcess * * The implementation of a Normal process, conditioned by observations & kriging */ class OT_API ConditionedNormalProcess : public GaussianProcess { CLASSNAME; public: /** Default constructor */ ConditionedNormalProcess(); /** Standard constructor */ ConditionedNormalProcess(const KrigingResult & result, const Mesh & mesh); /** Virtual constructor */ virtual ConditionedNormalProcess * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Realization accessor */ Field getRealization() const; /** Is the underlying a Normal process ? */ Bool isNormal() const; /** Is the underlying a stationary process ? */ Bool isStationary() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); /** Mesh accessor */ using GaussianProcess::setMesh; void setMesh(const Mesh & mesh); using GaussianProcess::setTimeGrid; void setTimeGrid(const RegularGrid & timeGrid); /** Set sampling method accessor */ using GaussianProcess::setSamplingMethod; void setSamplingMethod(const UnsignedInteger samplingMethod); protected: /** Initialization of the process */ void initialize(); private: /** KrigingResult */ KrigingResult krigingResult_; /** Trend part - conditionned by the mesh points */ Sample trendEvaluationMesh_; }; /* class ConditionedNormalProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_CONDITIONEDNORMALPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/FunctionalBasisProcess.hxx000066400000000000000000000066501307543307100301230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the FunctionalBasisProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FUNCTIONALBASISPROCESS_HXX #define OPENTURNS_FUNCTIONALBASISPROCESS_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Basis.hxx" #include "openturns/Distribution.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FunctionalBasisProcess * * An interface class for composite White Noise */ class OT_API FunctionalBasisProcess : public ProcessImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ FunctionalBasisProcess(); /** Standard constructor */ FunctionalBasisProcess(const Distribution & distribution, const Basis & basis); /** Standard constructor */ FunctionalBasisProcess(const Distribution & distribution, const Basis & basis, const Mesh & mesh); /** Virtual constructor */ virtual FunctionalBasisProcess * clone() const; /** String converter */ String __repr__() const; /** Is the underlying stationary ? */ Bool isStationary() const; /** Is the underlying a Normal process ? */ Bool isNormal() const; /** Discrete realization accessor */ virtual Field getRealization() const; /** Continuous realization accessor */ virtual Function getContinuousRealization() const; /** Continuation of the last realization on a given number of steps */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Get the marginal process corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal process corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Distribution accessor */ Distribution getDistribution() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** Basis accessor */ Basis getBasis() const; /** Basis accessor */ void setBasis(const Basis & basis); /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** The distribution of the coefficients */ Distribution distribution_; /** The functional basis */ Basis basis_; /** The last state */ mutable Point state_; }; /* class FunctionalBasisProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FUNCTIONALBASISPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/GaussianProcess.hxx000066400000000000000000000100071307543307100266000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the Gaussian process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_GAUSSIANPROCESS_HXX #define OPENTURNS_GAUSSIANPROCESS_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/SquareMatrix.hxx" #include "openturns/SecondOrderModel.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/TrendTransform.hxx" #include "openturns/HMatrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class GaussianProcess * * The implementation of the Normal process class */ class OT_API GaussianProcess : public ProcessImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ GaussianProcess(); /** Standard constructor */ GaussianProcess(const TrendTransform & trend, const SecondOrderModel & model, const Mesh & mesh); /** Standard constructor */ GaussianProcess(const TrendTransform & trend, const CovarianceModel & covarianceModel, const Mesh & mesh); /** Standard constructor */ GaussianProcess(const SecondOrderModel & model, const Mesh & mesh); /** Standard constructor */ GaussianProcess(const CovarianceModel & covarianceModel, const Mesh & mesh); /** Virtual constructor */ virtual GaussianProcess * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Mesh accessor */ void setMesh(const Mesh & mesh); void setTimeGrid(const RegularGrid & timeGrid); /** Set sampling method accessor */ void setSamplingMethod(const UnsignedInteger samplingMethod); /** Realization accessor */ Field getRealization() const; private: Sample getRealizationCholesky() const; Sample getRealizationGibbs() const; Sample getRealizationHMatrix() const; public: /** Covariance model accessor */ CovarianceModel getCovarianceModel() const; /** Trend accessor */ TrendTransform getTrend() const; /** Check if the process is stationary */ Bool isStationary() const; /** Check if the process trend is stationary */ Bool isTrendStationary() const; /** Check if the process is Normal */ Bool isNormal() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Initialization of the process */ void initialize() const; /** Check if the trend function is stationary */ void checkStationaryTrend() const; /** Covariance model */ CovarianceModel covarianceModel_; /** Cholesky factor */ mutable TriangularMatrix covarianceCholeskyFactor_; /** Cholesky factor */ mutable HMatrix covarianceHMatrix_; /** Flag to manage process initialization */ mutable Bool isInitialized_; /** Flag to tell if the process has a stationary trend */ mutable Bool hasStationaryTrend_; mutable Bool checkedStationaryTrend_; /** Trend function */ TrendTransform trend_; mutable Point stationaryTrendValue_; /** Sampling method */ UnsignedInteger samplingMethod_; }; /* class GaussianProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/KarhunenLoeveQuadratureAlgorithm.hxx000066400000000000000000000071501307543307100321470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * quadrature approximation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEQuadratureALGORITHM_HXX #define OPENTURNS_KARHUNENLOEVEQuadratureALGORITHM_HXX #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" #include "openturns/Domain.hxx" #include "openturns/WeightedExperiment.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveQuadratureAlgorithm */ class OT_API KarhunenLoeveQuadratureAlgorithm : public KarhunenLoeveAlgorithmImplementation { CLASSNAME; public: /** Default constructor without parameters */ KarhunenLoeveQuadratureAlgorithm(); /** Parameter constructor */ KarhunenLoeveQuadratureAlgorithm(const Domain & domain, const CovarianceModel & covariance, const WeightedExperiment & experiment, const Basis & basis, const UnsignedInteger basisSize, const Bool mustScale, const Scalar threshold = 0.0); /** Parameter constructor for the Legendre/GaussProduct case */ KarhunenLoeveQuadratureAlgorithm(const Domain & domain, const CovarianceModel & covariance, const UnsignedInteger basisSize, const Scalar threshold = 0.0); /** Virtual copy constructor */ virtual KarhunenLoeveQuadratureAlgorithm * clone() const; /** Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using Quadrature approximation */ void run(); /** Domain accessor */ Domain getDomain() const; /** Experiment accessor */ WeightedExperiment getExperiment() const; /** Basis accessor */ Basis getBasis() const; /** BasisSize accessor */ UnsignedInteger getBasisSize() const; /** MustScale accessor */ Bool getMustScale() const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Underlying domain */ Domain domain_; /** Experiment */ WeightedExperiment experiment_; /** Basis */ Basis basis_; /** Basis size */ UnsignedInteger basisSize_; /** Scaling flag */ Bool mustScale_; } ; /* class KarhunenLoeveQuadratureAlgorithm */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEQuadratureALGORITHM_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/KarhunenLoeveQuadratureFactory.hxx000066400000000000000000000071771307543307100316410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class implements the computation of the Karhunen-Loeve * basis and eigenvalues of a given covariance model based on * quadrature approximation of the integral equation. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_KARHUNENLOEVEQUADRATUREFACTORY_HXX #define OPENTURNS_KARHUNENLOEVEQUADRATUREFACTORY_HXX #include "openturns/Domain.hxx" #include "openturns/CovarianceMatrix.hxx" #include "openturns/CovarianceModel.hxx" #include "openturns/WeightedExperiment.hxx" #include "openturns/Basis.hxx" #include "openturns/Collection.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/Function.hxx" #include "openturns/Point.hxx" #include "openturns/ProcessSample.hxx" #include "openturns/PersistentObject.hxx" #include "openturns/Matrix.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class KarhunenLoeveQuadratureFactory */ class OT_API KarhunenLoeveQuadratureFactory : public PersistentObject { CLASSNAME; public: typedef Collection FunctionCollection; typedef PersistentCollection FunctionPersistentCollection; /** Default constructor without parameters */ KarhunenLoeveQuadratureFactory(); /** Default constructor without parameters */ KarhunenLoeveQuadratureFactory(const Domain & domain, const WeightedExperiment & experiment, const Basis & basis, const UnsignedInteger basisSize, const Bool mustScale, const Scalar threshold); /** Virtual copy constructor */ virtual KarhunenLoeveQuadratureFactory * clone() const; /** Solve the Fredholm eigenvalues problem: * find (\phi_k, \lambda_k) such that * \int_{D} C(s,t)\phi_k(s)ds=\lambda_k\phi_k(t) * where C is a given covariance model, using a quadrature approximation * of the integral */ Basis build(const CovarianceModel & covarianceModel, Point & eigenvalues) const; /** String converter */ virtual String __repr__() const; /** String converter */ virtual String __str__(const String & offset = "") const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ virtual void load(Advocate & adv); private: /** Underlying domain */ Domain domain_; /** Functions used for the representation */ FunctionPersistentCollection coll_; /** Threshold for eigenvalues selection */ Scalar threshold_; /** Quadrature nodes and weights */ Sample nodes_; Point weights_; /** Scaled design matrix */ mutable Matrix theta_; /** Inverse of the Cholesky factor of theta */ mutable TriangularMatrix cholesky_; } ; /* class KarhunenLoeveQuadratureFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_KARHUNENLOEVEQUADRATUREFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/OTProcess.hxx000066400000000000000000000033701307543307100253550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSTOCHASTICPROCESS_HXX #define OPENTURNS_OTSTOCHASTICPROCESS_HXX #include "openturns/ARMA.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/ARMAState.hxx" #include "openturns/SpectralGaussianProcess.hxx" #include "openturns/GaussianProcess.hxx" #include "openturns/WhiteNoise.hxx" #include "openturns/RandomWalk.hxx" #include "openturns/AggregatedProcess.hxx" #include "openturns/CompositeProcess.hxx" #include "openturns/FunctionalBasisProcess.hxx" #include "openturns/ARMAFactoryImplementation.hxx" #include "openturns/ARMAFactory.hxx" #include "openturns/WhittleFactory.hxx" #include "openturns/WhittleFactoryState.hxx" #include "openturns/ARMALikelihoodFactory.hxx" #include "openturns/ConditionedNormalProcess.hxx" #include "openturns/KarhunenLoeveQuadratureFactory.hxx" #include "openturns/KarhunenLoeveQuadratureAlgorithm.hxx" #endif /* OPENTURNS_OTSTOCHASTICPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/RandomWalk.hxx000066400000000000000000000061401307543307100255310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the RandomWalk process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_RANDOMWALK_HXX #define OPENTURNS_RANDOMWALK_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Process.hxx" #include "openturns/Pointer.hxx" #include "openturns/Distribution.hxx" #include "openturns/Point.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class RandomWalk * * An interface class for composite White Noise */ class OT_API RandomWalk : public ProcessImplementation { CLASSNAME; public: /** Default constructor */ RandomWalk(); /** Standard constructor */ RandomWalk(const Point & origin, const Distribution & distribution); /** Standard constructor */ RandomWalk(const Point & origin, const Distribution & distribution, const RegularGrid & timeGrid); /** Virtual constructor */ virtual RandomWalk * clone() const; /** String converter */ String __repr__() const; /** Is the underlying stationary ? */ Bool isStationary() const; /** Is the underlying a Normal process ? */ Bool isNormal() const; /** Realization accessor */ Field getRealization() const; /** Continuation of the last realization on a given number of steps */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Get the process corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal process corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Distribution accessor */ Distribution getDistribution() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** Origin accessor */ Point getOrigin() const; /** Origin accessor */ void setOrigin(const Point & origin); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** The origin of the walk */ Point origin_; /** The distribution of the walk steps */ Distribution distribution_; /** The current position of the walk */ mutable Point currentPosition_; }; /* class RandomWalk */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_RANDOMWALK_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/SpectralGaussianProcess.hxx000066400000000000000000000123631307543307100303050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the SpectralGaussianProcess process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_SPECTRALGAUSSIANPROCESS_HXX #define OPENTURNS_SPECTRALGAUSSIANPROCESS_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/SpectralModel.hxx" #include "openturns/SecondOrderModel.hxx" #include "openturns/TriangularComplexMatrix.hxx" #include "openturns/PersistentCollection.hxx" #include "openturns/FFT.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class SpectralGaussianProcess * * The implementation of the Normal process class * in spectral domain */ class OT_API SpectralGaussianProcess : public ProcessImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ typedef PersistentCollection TriangularComplexMatrixPersistentCollection; typedef PersistentCollection PersistentComplexCollection; typedef Collection ComplexCollection; /** Default constructor */ SpectralGaussianProcess(); /** Standard constructor - The timeGrid imposes the frequencies values*/ SpectralGaussianProcess(const SecondOrderModel & model, const RegularGrid & grid); /** Standard constructor with spectralModel - The timeGrid imposes the frequencies values*/ SpectralGaussianProcess(const SpectralModel & spectralModel, const RegularGrid & grid); /** Specific constructor - The frequency parameters impose the time grid */ SpectralGaussianProcess(const SecondOrderModel & model, const Scalar maximalFrequency, const UnsignedInteger nFrequency); /** Specific constructor - The frequency parameters impose the time grid */ SpectralGaussianProcess(const SpectralModel & spectralModel, const Scalar maximalFrequency, const UnsignedInteger nFrequency); /** Virtual constructor */ virtual SpectralGaussianProcess * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Realization accessor */ Field getRealization() const; /** Frequency grid accessor, covering both the negative and the positive axes */ RegularGrid getFrequencyGrid() const; /** Maximal frequency accessor */ Scalar getMaximalFrequency() const; /** Number of frequency steps accessor */ UnsignedInteger getNFrequency() const; /** Frequency step accessor */ Scalar getFrequencyStep() const; /** Spectral model accessor */ SpectralModel getSpectralModel() const; /** Set TimeGrid */ void setTimeGrid(const RegularGrid & timeGrid); /** FFT algorithm accessors */ FFT getFFTAlgorithm() const; void setFFTAlgorithm(const FFT & fft); /** Check if the process is stationary */ Bool isStationary() const; /** Check if the process is Normal */ Bool isNormal() const; /** Adapt a time grid in order to have a power of two time stamps. Both the starting point and the end point are preserved. */ static RegularGrid AdaptGrid(const RegularGrid & grid); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Initialization of the process */ void initialize() const; /** Compute the time grid associated to the frequency grid */ void computeTimeGrid(); /** Set the alpha vector */ void computeAlpha(); /** Get the Cholesky factor of the kth DSP matrix from cache or computed on the fly */ TriangularComplexMatrix getCholeskyFactor(const UnsignedInteger k) const; /** Compute the Cholesky factor of the kth DSP matrix */ TriangularComplexMatrix computeCholeskyFactor(const UnsignedInteger k) const; private: /** Spectral model associated to the process */ SpectralModel spectralModel_; /** Maximal frequency */ Scalar maximalFrequency_; /** Number of frequencies on the positive axis */ UnsignedInteger nFrequency_; /** Frequency step */ Scalar frequencyStep_; /** Cholesky factor */ mutable TriangularComplexMatrixPersistentCollection choleskyFactorsCache_; /** Cache size */ mutable UnsignedInteger cacheSize_; /** alpha vector - scale factor */ PersistentComplexCollection alpha_; /** FFT Algorithm */ FFT fftAlgorithm_; }; /* class SpectralGaussianProcess */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_SPECTRALGAUSSIANPROCESS_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/WhiteNoise.hxx000066400000000000000000000056471307543307100255630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief A class which implements the WhiteNoise process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WHITENOISE_HXX #define OPENTURNS_WHITENOISE_HXX #include "openturns/ProcessImplementation.hxx" #include "openturns/Distribution.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WhiteNoise * * An interface class for composite White Noise */ class OT_API WhiteNoise : public ProcessImplementation { CLASSNAME; public: /** Some typedefs to ease reading */ /** Default constructor */ WhiteNoise(); /** Standard constructor */ explicit WhiteNoise(const Distribution & distribution); /** Standard constructor */ WhiteNoise(const Distribution & distribution, const Mesh & mesh); /** Virtual constructor */ virtual WhiteNoise * clone() const; /** String converter */ String __repr__() const; /** String converter - pretty print */ String __str__(const String & offset = "") const; /** Is the underlying stationary ? */ Bool isStationary() const; /** Is the underlying a Normal process ? */ Bool isNormal() const; /** Realization accessor */ Field getRealization() const; /** Continuous realization accessor */ Function getContinuousRealization() const; /** Continuation of the last realization on a given number of steps */ using ProcessImplementation::getFuture; TimeSeries getFuture(const UnsignedInteger stepNumber) const; /** Get the marginal process corresponding to the i-th marginal component */ Implementation getMarginal(const UnsignedInteger i) const; /** Get the marginal process corresponding to indices components */ Implementation getMarginal(const Indices & indices) const; /** Distribution accessor */ Distribution getDistribution() const; /** Distribution accessor */ void setDistribution(const Distribution & distribution); /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private: /** The distribution of the WhiteNoise */ Distribution distribution_; }; /* class WhiteNoise */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WHITENOISE_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/WhittleFactory.hxx000066400000000000000000000132131307543307100264410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The class enables to get the coefficients of an ARMA process using its spectral density function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WHITTLEFACTORY_HXX #define OPENTURNS_WHITTLEFACTORY_HXX #include "openturns/ARMAFactoryImplementation.hxx" #include "openturns/WelchFactory.hxx" #include "openturns/WhittleFactoryState.hxx" #include "openturns/OptimizationAlgorithm.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WhittleFactory * * The class implements the Whittle likelihood for estimating ARMA coefficients */ class OT_API WhittleFactory : public ARMAFactoryImplementation { CLASSNAME; public: /** Default constructor */ WhittleFactory(); /** Default constructor */ WhittleFactory(const UnsignedInteger p, const UnsignedInteger q, const Bool invertible = true); /** Default constructor */ WhittleFactory(const Indices & p, const Indices & q, const Bool invertible = true); /** Virtual constructor */ virtual WhittleFactory * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** SpectralModelFactory accessors - Make easy change of periodogram estimate */ WelchFactory getSpectralModelFactory() const; void setSpectralModelFactory(const WelchFactory & factory); /** Build method ==> estimating the coefficients */ ARMA build(const TimeSeries & timeSeries, Point & informationCriteria) const; ARMA build(const TimeSeries & timeSeries) const; ARMA build(const ProcessSample & sample, Point & informationCriteria) const; ARMA build(const ProcessSample & sample) const; /** Verbosity accessor */ Bool getVerbose() const; void setVerbose(const Bool verbose); /** Enable or disable the estimation history */ void enableHistory() const; void disableHistory() const; Bool isHistoryEnabled() const; void clearHistory() const; Collection< WhittleFactoryState > getHistory() const; /** Starting points accessor */ void setStartingPoints(const Collection< Point > & startingPoints); Collection< Point > getStartingPoints() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : /** Likelihood function ==> Compute the reduced form of the likelihood */ Scalar computeLogLikelihood(const Point & theta) const; /** Log likelihood maximization, shared among the different build() methods */ ARMA maximizeLogLikelihood(Point & InformationCriterion) const; /** Compute the spectral density at the relevant normalized frequencies */ void computeSpectralDensity(const UserDefinedSpectralModel & spectralModel) const; /** Estimate the periodogram */ void buildSpectralDensity(const TimeSeries & timeSeries) const; void buildSpectralDensity(const ProcessSample & sample) const; /** Initialize the starting points using the ResourceMap */ void initializeStartingPoints(); /** Welch factory used to estimate the spectral model */ WelchFactory spectralFactory_; /** Frequency grid to be used in internal */ mutable Point normalizedFrequencies_; /** Time grid associated with the given data */ mutable RegularGrid timeGrid_; /** Number of frequecies - Used to pass data to be used in computeLogLikeliHood */ mutable UnsignedInteger m_; /** only used to pass data to be used in computeLogLikeliHood */ mutable Point spectralDensity_; /** only used to pass data to be used in computeLogLikeliHood */ mutable Scalar sigma2_; /** Verbosity control */ Bool verbose_; /** History flag */ mutable Bool isHistoryEnabled_; /** History */ mutable PersistentCollection< WhittleFactoryState > history_; /** Starting points for the estimation process */ PersistentCollection< Point > startingPoints_; /** Likelihood function accessor */ Function getLogLikelihoodFunction() const; /** likelihood estimate */ Point computeLogLikelihoodInequalityConstraint( const Point & theta ) const; /** only used to pass data to be used in computeLogLikelihoodInequalityConstraint */ mutable UnsignedInteger nbInequalityConstraint_; /** Likelihood constraint accessor */ Function getLogLikelihoodInequalityConstraint() const; /** Optimization solver accessor */ OptimizationAlgorithm getOptimizationAlgorithm() const; void setOptimizationAlgorithm(const OptimizationAlgorithm & solver); // @deprecated OptimizationAlgorithm getOptimizationSolver() const; void setOptimizationSolver(const OptimizationAlgorithm & solver); /** Initialize default Cobyla solver parameter using the ResourceMap */ void initializeCobylaSolverParameter(); protected: /** Optimization solver */ mutable OptimizationAlgorithm solver_; }; /* class WhittleFactory */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WHITTLEFACTORY_HXX */ openturns-1.9/lib/src/Uncertainty/Process/openturns/WhittleFactoryState.hxx000066400000000000000000000062531307543307100274500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class stores the current state of the fitting step in the WhittleFactory class. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_WHITTLEFACTORYSTATE_HXX #define OPENTURNS_WHITTLEFACTORYSTATE_HXX #include "openturns/PersistentObject.hxx" #include "openturns/ARMA.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/Point.hxx" #include "openturns/WhiteNoise.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class WhittleFactoryState * * The class implements the state of the WhittleFactory class that results form a particular fitting */ class OT_API WhittleFactoryState : public PersistentObject { CLASSNAME; public: /** Default constructor */ WhittleFactoryState(); /** Default constructor */ WhittleFactoryState(const UnsignedInteger p, const Point & theta, const Scalar sigma2, const Point & informationCriteria, const RegularGrid & timeGrid); /** Virtual constructor */ virtual WhittleFactoryState * clone() const; /** String converter */ String __repr__() const; String __str__(const String & offset = "") const; /** P accessor */ UnsignedInteger getP() const; /** Q accessor */ UnsignedInteger getQ() const; /** Theta accessor */ Point getTheta() const; /** Sigma2 accessor */ Scalar getSigma2() const; /** AR coefficients accessor */ ARMACoefficients getARCoefficients() const; /** MA coefficients accessor */ ARMACoefficients getMACoefficients() const; /** White noise accessor */ WhiteNoise getWhiteNoise() const; /** ARMA process accessor */ ARMA getARMA() const; /** Information criteria accessor */ Point getInformationCriteria() const; /** Time grid accessor */ RegularGrid getTimeGrid() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); private : /* The AR order of the ARMA process */ UnsignedInteger p_; /* The flat vector of coefficients of the ARMA process */ Point theta_; /* The variance of the white noise */ Scalar sigma2_; /* The information criteria of the fitting */ Point informationCriteria_; /* The time grid associated with the estimation */ RegularGrid timeGrid_; }; /* class WhittleFactoryState */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_WHITTLEFACTORYSTATE_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/000077500000000000000000000000001307543307100212235ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/StatTests/CMakeLists.txt000066400000000000000000000012411307543307100237610ustar00rootroot00000000000000# -*- cmake -*- # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (FittingTest.cxx) ot_add_source_file (VisualTest.cxx) ot_add_source_file (NormalityTest.cxx) ot_add_source_file (LinearModelTest.cxx) ot_add_source_file (HypothesisTest.cxx) ot_add_source_file (DickeyFullerTest.cxx) ot_install_header_file (NormalityTest.hxx) ot_install_header_file (LinearModelTest.hxx) ot_install_header_file (VisualTest.hxx) ot_install_header_file (FittingTest.hxx) ot_install_header_file (HypothesisTest.hxx) ot_install_header_file (DickeyFullerTest.hxx) ot_install_header_file (OTStatTests.hxx) openturns-1.9/lib/src/Uncertainty/StatTests/DickeyFullerTest.cxx000066400000000000000000000632631307543307100252030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * This statistical test enables user to check if a time series is stationary * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PersistentObjectFactory.hxx" #include "openturns/DickeyFullerTest.hxx" #include "openturns/Exception.hxx" #include "openturns/Sample.hxx" #include "openturns/Point.hxx" #include "openturns/DistFunc.hxx" #include "openturns/IdentityMatrix.hxx" #include "openturns/FisherSnedecor.hxx" #include "openturns/Log.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(DickeyFullerTest); static const Factory Factory_DickeyFullerTest; /* Default constructor */ DickeyFullerTest::DickeyFullerTest() : PersistentObject() , timeSeries_() , T_() , verbose_(false) , lastModel_(0) , rho_(0.0) , sigmaRho_(1.0) , drift_(0.0) , sigmaDrift_(1.0) , trend_(0.0) , sigmaTrend_(1.0) , isComputedNoConstantCharacteristics_(false) , sum_yt_yt_minus_one_(0.0) , sum_squared_yt_minus_one_(0.0) , isComputedDriftCharacteristics_(false) , sum_yt_minus_one_(0.0) , sum_yt_(0.0) , isComputedTrendCharacteristics_(false) , sum_t_yt_minus_one_(0.0) , sum_t_yt_(0.0) , sum_ti_(0.0) , sum_ti_ti_(0.0) { // Nothing to do } /* Parameters constructor */ DickeyFullerTest::DickeyFullerTest(const TimeSeries & series, const Bool verbose) : PersistentObject() , timeSeries_(series) , T_() , verbose_(verbose) , lastModel_() , rho_(0.0) , sigmaRho_(1.0) , drift_(0.0) , sigmaDrift_(1.0) , trend_(0.0) , sigmaTrend_(1.0) , isComputedNoConstantCharacteristics_(false) , sum_yt_yt_minus_one_(0.0) , sum_squared_yt_minus_one_(0.0) , isComputedDriftCharacteristics_(false) , sum_yt_minus_one_(0.0) , sum_yt_(0.0) , isComputedTrendCharacteristics_(false) , sum_t_yt_minus_one_(0.0) , sum_t_yt_(0.0) , sum_ti_(0.0) , sum_ti_ti_(0.0) { if (series.getDimension() != 1) throw InvalidDimensionException(HERE) << "Expected time series of dimension 1"; // Build the estimation of parameters rho and \phi_i const UnsignedInteger size = series.getSize(); if (size <= 1) throw InvalidArgumentException(HERE) << "The size of time series is " << size << "Impossible to run the test" ; T_ = size - 1; } /* Virtual constructor */ DickeyFullerTest * DickeyFullerTest::clone() const { return new DickeyFullerTest(*this); } /* Computation of \sum_{t=1}^{N} y_{t} y{t-1} and \sum_{t=1}^{N} y_{t-1} * y{t-1} */ void DickeyFullerTest::computeNoConstantCharacteristics() { if (!isComputedNoConstantCharacteristics_) { // Computation of \sum_{t=1}^{N} y_{t} y{t-1} and // Computation of \sum_{t=1}^{N} y_{t-1} * y{t-1} for (UnsignedInteger t = 0; t < T_; ++t) { const Scalar y_t_minus_one = timeSeries_.getValueAtIndex(t)[0]; const Scalar y_t = timeSeries_.getValueAtIndex(t + 1)[0]; sum_yt_yt_minus_one_ += y_t_minus_one * y_t; sum_squared_yt_minus_one_ += y_t_minus_one * y_t_minus_one; } isComputedNoConstantCharacteristics_ = true; } } /* Computation of: 1) \sum_{t=1}^{N} y{t-1} 2) \sum_{t=1}^{N} y{t} */ void DickeyFullerTest::computeDriftCharacteristics() { if (!isComputedDriftCharacteristics_) { Scalar partialSum = 0.0; for (UnsignedInteger t = 1; t < T_; ++t) partialSum += timeSeries_.getValueAtIndex(t)[0]; sum_yt_minus_one_ = partialSum + timeSeries_.getValueAtIndex(0)[0]; sum_yt_ = partialSum + timeSeries_.getValueAtIndex(T_)[0]; isComputedDriftCharacteristics_ = true; } } /* Computation of: 1) \sum_{t=1}^{N} t * y{t-1} 2) \sum_{t=1}^{N} t * y{t} 3) \sum_{i=1}^{N} t_{i} 4) \sum_{i=1}^{N} t_{i}^2 */ void DickeyFullerTest::computeTrendCharacteristics() { RegularGrid timeGrid(timeSeries_.getTimeGrid()); const Scalar dt = timeGrid.getStep(); const Scalar t0 = timeGrid.getStart(); if (!isComputedTrendCharacteristics_) { // Computation of \sum_{t=1}^{N} t * y{t-1} // and \sum_{t=1}^{N} t * y{t} for (UnsignedInteger t = 0; t < T_; ++t) { const Scalar y_t_minus_one = timeSeries_.getValueAtIndex(t)[0]; const Scalar time = timeGrid.getValue(t + 1); const Scalar y_t = timeSeries_.getValueAtIndex(t + 1)[0]; sum_t_yt_minus_one_ += y_t_minus_one * time; sum_t_yt_ += y_t * time; } // Computation of \sum_{i=1}^{N} t_{i} and \sum_{i=1}^{N} t_{i}^2 // We recall that t_{i} = t_{start} + i * t_{step} // Thus \sum_{i=1}^{T_} t_{i} = t_{start} + 0.5 * dt * (T_ + 1) and // Thus \sum_{i=1}^{T_} t_{i}^2 = t_{start} * t_{start} + t_{start} * dt * (T_ + 1) + dt * dt * (T_ + 1) * (2 * T_ + 1) /6 sum_ti_ = T_ * (t0 + 0.5 * dt * (T_ + 1.0)); sum_ti_ti_ = T_ * (t0 * t0 + t0 * dt * (T_ + 1.0) + dt * dt * (T_ + 1.0) * (2.0 * T_ + 1.0) / 6.0); isComputedTrendCharacteristics_ = true; } } /* Compute the coefficients of a model with trend and constant */ void DickeyFullerTest::estimateDriftAndLinearTrendModel() { // Linear system (of dimension 3) is solved // We recall the analytical expression of the matrix // The unknowns are sorted as following : drift, trend and AR coefficient // i.e. model is y_{t} = a + b *t + \rho * y_{t-1} + \epsilon_t // We could refer to classical linear algebra documentation to get the expression of the matrix // which is [1 \sum_t_{i} \sum_y_{t-1}; \sum_t_{i} \sum_t_{i}^2 \sum_t_{i} y_{i-1}; \sum_y_{t-1} \sum_y_{t-1} t_{i} \sum_y_{t-1}*y_{t-1}] // Some expressions such as \sum t_{i} or \sum t_{i}^2 may be easily deduced using the fact that t_i = t_0 + i * \delta t // Second member is [\sum_y_{t} \sum_t_{i} * y_{i} \sum y_{t-1} y_{t}] computeNoConstantCharacteristics(); computeDriftCharacteristics(); computeTrendCharacteristics(); if (lastModel_ != 3) { SymmetricMatrix matrix(3); matrix(0, 0) = T_; matrix(1, 0) = sum_ti_; matrix(2, 0) = sum_yt_minus_one_; matrix(1, 1) = sum_ti_ti_; matrix(2, 1) = sum_t_yt_minus_one_; matrix(2, 2) = sum_squared_yt_minus_one_; Point secondMember(3); secondMember[0] = sum_yt_; secondMember[1] = sum_t_yt_; secondMember[2] = sum_yt_yt_minus_one_; // Solving the linear system Point unknown(matrix.solveLinearSystem(secondMember)); drift_ = unknown[0]; trend_ = unknown[1]; rho_ = unknown[2]; // Estimate the sum square of residual value Scalar error = 0.0; const RegularGrid timeGrid_(timeSeries_.getTimeGrid()); for (UnsignedInteger t = 0; t < T_; ++t) { const Scalar x = timeSeries_.getValueAtIndex(t)[0]; const Scalar y = timeSeries_.getValueAtIndex(t + 1)[0]; const Scalar time = timeGrid_.getValue(t + 1); const Scalar epsilon = y - rho_ * x - trend_ * time - drift_; error += epsilon * epsilon; } const Scalar sigmaError = sqrt(error / T_); // Estimate the variance-covariance matrix associated to the coefficient const IdentityMatrix identity(3); const Matrix varianceCovariance(matrix.solveLinearSystem(identity)); sigmaDrift_ = sigmaError * sqrt(varianceCovariance(0, 0)); sigmaTrend_ = sigmaError * sqrt(varianceCovariance(1, 1)); sigmaRho_ = sigmaError * sqrt(varianceCovariance(2, 2)); } // inform that the last model which has been checked is the trend model lastModel_ = 3; } /* Compute the coefficients of a model with a constant */ void DickeyFullerTest::estimateDriftModel() { if (lastModel_ != 2) { trend_ = 0.0; sigmaTrend_ = 0.0; computeNoConstantCharacteristics(); computeDriftCharacteristics(); // Linear system of dimension 2 // The size term vanish sice we use a biased variance estimator SymmetricMatrix matrix(2); matrix(0, 0) = T_; matrix(1, 0) = sum_yt_minus_one_; matrix(1, 1) = sum_squared_yt_minus_one_; Point secondMember(2); secondMember[0] = sum_yt_; secondMember[1] = sum_yt_yt_minus_one_; // Solving the linear system Point unknown(matrix.solveLinearSystem(secondMember)); drift_ = unknown[0]; rho_ = unknown[1]; // Estimate the sum square of residual value Scalar error = 0.0; for (UnsignedInteger t = 0; t < T_; ++ t) { const Scalar x = timeSeries_.getValueAtIndex(t)[0]; const Scalar y = timeSeries_.getValueAtIndex(t + 1)[0]; const Scalar epsilon = y - rho_ * x - drift_; error += epsilon * epsilon; } const Scalar sigmaError = sqrt(error / T_); // Estimate the variance-covariance matrix associated to the coefficient const IdentityMatrix identity(2); const Matrix varianceCovariance(matrix.solveLinearSystem(identity)); sigmaDrift_ = sigmaError * sqrt(varianceCovariance(0, 0)); sigmaRho_ = sigmaError * sqrt(varianceCovariance(1, 1)); } lastModel_ = 2; } /* Compute the coefficients of a model with a constant */ void DickeyFullerTest::estimateAR1Model() { if (lastModel_ != 1) { trend_ = 0.0; sigmaTrend_ = 0.0; drift_ = 0.0; sigmaDrift_ = 0.0; computeNoConstantCharacteristics(); // The rho value is the simplest ratio rho_ = sum_yt_yt_minus_one_ / sum_squared_yt_minus_one_; // Expected error residual Scalar error = 0.0; for (UnsignedInteger t = 0; t < T_; ++ t) { const Scalar x = timeSeries_.getValueAtIndex(t)[0]; const Scalar y = timeSeries_.getValueAtIndex(t + 1)[0]; const Scalar epsilon = y - rho_ * x; error += epsilon * epsilon; } // Writing the expression of the statistic const Scalar sigmaError = sqrt(error / T_); sigmaRho_ = sigmaError / sqrt(sum_squared_yt_minus_one_); } lastModel_ = 1; } /* Test H0: there is a unit root in a drift and linear trend model */ TestResult DickeyFullerTest::testUnitRootInDriftAndLinearTrendModel(const Scalar level) { // compute the coefficients of trend model estimateDriftAndLinearTrendModel(); const Scalar statistic ((rho_ - 1.0) / sigmaRho_); // Statistical test : the null hypothesis is that there is a unit root const Scalar pValue = DistFunc::pDickeyFullerTrend(statistic); return TestResult("DickeyFullerUnitRootInDriftAndLinearTrendModel", pValue > 1.0 - level, pValue, 1.0 - level); } /* Test H0: there is a unit root in a drift model */ TestResult DickeyFullerTest::testUnitRootInDriftModel(const Scalar level) { // compute the coefficients of the model estimateDriftModel(); // Writing the expression of the statistic const Scalar statistic = (rho_ - 1.0) / sigmaRho_; // We compare the statistic of the test with the critical value of the DF test Scalar pValue = DistFunc::pDickeyFullerConstant(statistic); return TestResult("DickeyFullerUnitRootInDriftModel", pValue > 1.0 - level, pValue, 1.0 - level); } /* Test H0: there is a unit root in an AR1 model */ TestResult DickeyFullerTest::testUnitRootInAR1Model(const Scalar level) { estimateAR1Model(); const Scalar statistic = (rho_ - 1.0) / sigmaRho_; // We get now the statistic of the test and compare it with the critical value of the DF test const Scalar pValue = DistFunc::pDickeyFullerNoConstant(statistic); return TestResult("DickeyFullerUnitRootAR1Model", pValue > 1.0 - level, pValue, 1.0 - level); } /* Strategy method to check the stationarity */ TestResult DickeyFullerTest::runStrategy(const Scalar level) { // Run the trend model if (verbose_) LOGINFO("Running test with general model...\nTesting unit root..."); const TestResult runTrendTestModel(testUnitRootInDriftAndLinearTrendModel(level)); if (!runTrendTestModel.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Testing unit root with general model rejected.\nRunning test of nullity of trend coefficient..."); // Student test TestResult testNullTrend(testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(level)); if (verbose_) LOGINFO("Test of nullity of trend coefficient done."); if (verbose_) LOGINFO(testNullTrend.__repr__()); // Test is rejected if the the statistic is greater than the quantile if (!testNullTrend.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Test of nullity of trend coefficient rejected ==> No unit root and trend stationary."); if (verbose_) LOGINFO("End of strategy tests"); return testNullTrend; } else { if (verbose_) LOGINFO("Test of nullity of trend coefficient accepted."); return runDriftModelStrategyTest(level); } } else { if (verbose_) LOGINFO("Testing unit root with general model accepted.\nRunning test of nullity of trend coefficient and unit root"); // Fisher test TestResult testNullTrend(testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(level)); if (verbose_) LOGINFO("Test done."); if (verbose_) LOGINFO(testNullTrend.__repr__()); // Test is rejected if the the statistic is greater than the quantile if (!testNullTrend.getBinaryQualityMeasure()) { // Check the pValue ==> False // The test bases on the fact that H0 : if (verbose_) LOGINFO("Test of nullity of trend coefficient rejected ==> trend stationary and no unit root"); if (verbose_) LOGINFO("End of strategy tests"); return testNullTrend; } else { return runDriftModelStrategyTest(level); } } } /* Run strategy of tests with drift model */ TestResult DickeyFullerTest::runDriftModelStrategyTest(const Scalar level) { // Run the trend model if (verbose_) LOGINFO("Running test with drift model...\nTesting unit root..."); // First check the presence of a unit root in the drift model const TestResult runDriftTestModel(testUnitRootInDriftModel(level)); if (!runDriftTestModel.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Unit root test with drift model rejected.\nRunning test of nullity of drift coefficient..."); // Student test TestResult testNullDrift(testNoUnitRootAndNoDriftInDriftModel(level)); if (verbose_) LOGINFO("Test done."); if (verbose_) LOGINFO(testNullDrift.__repr__()); // Test is rejected if the the statistic is greater than the quantile if (!testNullDrift.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Test of nullity of drift coefficient rejected ==> No unit root but drift."); if (verbose_) LOGINFO("End of strategy tests"); return testNullDrift; } else { if (verbose_) LOGINFO("Test of nullity of drift coefficient accepted. Checking a random walk"); return runRandomWalkModelStrategyTest(level); } } else { if (verbose_) LOGINFO("Testing unit root with drift model accepted.\nRunning test of nullity of drift coefficient and unit root"); // Fisher test TestResult testNullDrift(testNoUnitRootAndNoDriftInDriftModel(level)); if (verbose_) LOGINFO("Test done."); if (verbose_) LOGINFO(testNullDrift.__repr__()); // Test is rejected if the the statistic is greater than the quantile if (!testNullDrift.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Test of nullity of drift coefficient rejected ==> drift and unit root"); if (verbose_) LOGINFO("End of strategy tests"); return testNullDrift; } else { if (verbose_) LOGINFO("Test of nullity of drift coefficient accepted. Checking a random walk"); return runRandomWalkModelStrategyTest(level); } } } /* Test of random walk model ==> run a part of strategy */ TestResult DickeyFullerTest::runRandomWalkModelStrategyTest(const Scalar level) { // Run the trend model if (verbose_) LOGINFO("Running test with random walk model...\nTesting unit root..."); // First check the presence of a unit root in the drift model const TestResult runRWTestModel(testUnitRootInAR1Model(level)); if (!runRWTestModel.getBinaryQualityMeasure()) { if (verbose_) LOGINFO("Unit root test rejected. Stationary checked"); } else { if (verbose_) LOGINFO("Unit root test accepted."); } if (verbose_) LOGINFO("End of strategy tests"); return runRWTestModel; } /* Test H0: there is no linear trend in a drift and linear trend model knowing that there is a unit root Run a Fisher test H0 : Trend coefficient is null conditional to the acceptation of the fact that rho is 1 H1 : Trend coefficient significatively different from 0 Construction of the statistic The notations are similar to the Course of Non Stationary process - Dauphine SCR3c is the sum of square of residual using Trend model with conditions that rho_ = 1, trend_ = 0 i.e. x_{t} = x_{t} + c + \epsilon_t c is given as (x_{N-1} - x_{0}) / N - 1 */ TestResult DickeyFullerTest::testUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(const Scalar level) { // We first compute the coefficients of the trend model TestResult resultTestTrendModel(testUnitRootInDriftAndLinearTrendModel(level)); if (!resultTestTrendModel.getBinaryQualityMeasure()) { LOGWARN("The model has no unit root. The result test may have no sense. The statistical \"testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel\" test is suggested "); } const Scalar c = (timeSeries_[T_][1] - timeSeries_[0][1]) / T_; Scalar SCR3c = 0.0; Scalar SCR3 = 0.0; const RegularGrid timeGrid(timeSeries_.getTimeGrid()); for (UnsignedInteger t = 0; t < T_; ++t) { const Scalar deltaX = timeSeries_[t + 1][1] - timeSeries_[t][1]; const Scalar epsilon_t = deltaX - c; SCR3c += epsilon_t * epsilon_t; // Perform since it is computed previously const Scalar x = timeSeries_.getValueAtIndex(t)[0]; const Scalar y = timeSeries_.getValueAtIndex(t + 1)[0]; const Scalar tick = timeGrid.getValue(t + 1); const Scalar epsilon = y - rho_ * x - trend_ * tick - drift_; SCR3 += epsilon * epsilon; } // F3 statistic // Fisher statistic const Scalar fisherStatisticNullTrend = 0.5 * (SCR3c - SCR3) * (T_ - 2) / SCR3; // Fisher test const FisherSnedecor fisherSnedecor(2, T_ - 2); const Scalar pValueNullTrend = fisherSnedecor.computeCDF(fisherStatisticNullTrend); // Decision const TestResult result("DickeyFullerTrendNullWithUnitRoot", pValueNullTrend < level, 1.0 - pValueNullTrend, 1.0 - level); return result; } /* Test H0: there is no linear trend in a drift and linear trend model knowing that there is no unit root Run a Student test H0 : Trend coefficient is null ==> trend_ = 0 H1 : Trend coefficient significatively different from 0 */ TestResult DickeyFullerTest::testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(const Scalar level) { // First compute all coefficients of trend model TestResult resultTestTrendModel(testUnitRootInDriftAndLinearTrendModel(level)); if (resultTestTrendModel.getBinaryQualityMeasure()) { LOGWARN("The model has a unit root. The result test may have no sense. The statistical \"testNullTrendCoefficientWithUnitRoot\" test is suggested "); } // We write the statistic of studentized // Care: check that the variance is the non biased estimator // Student quantile ==> T(n - p - 1) with n: size of sample and p: number of variables // p here is 3 (rho, drift and trend) const Scalar studentStatisticNullTrend = std::abs(trend_) / sigmaTrend_; // Here, T_ = n - 1 const Scalar complementaryCDFNullTrend = DistFunc::pStudent(T_ - 3, studentStatisticNullTrend, true); // True pValue = 1 - F(s) with s the student statistic and F the Student cumulative function // Test is rejected if the the statistic is greater than the quantile const TestResult result("DickeyFullerTrendNullWithoutUnitRoot", complementaryCDFNullTrend > 1.0 - level, complementaryCDFNullTrend, 1.0 - level); return result; } /* Test H0: there is no drift in a drift model knowing that there is a unit root Run a Fisher test H0 : Trend coefficient is null conditional to the acceptation of the fact that rho is 1 H1 : Trend coefficient significatively different from 0 Construction of the statistic The notations are similar to the Course of Non Stationary process - Dauphine SCR2c is the sum of square of residual using Trend model with conditions that rho_ = 1, trend_ = 0 i.e. x_{t} = x_{t} + \epsilon_t c is given as (x_{N-1} - x_{0}) / N - 1 */ TestResult DickeyFullerTest::testUnitRootAndNoDriftInDriftModel(const Scalar level) { // Run the computation of drift model TestResult resultTestDriftModel(testUnitRootInDriftModel(level)); if (!resultTestDriftModel.getBinaryQualityMeasure()) { LOGWARN("The model has no unit root. The result test may have no sense. The statistical \"testNoUnitRootAndNoDriftInDriftModel\" test is suggested "); } Scalar SCR2c = 0.0; Scalar SCR2 = 0.0; for (UnsignedInteger t = 0; t < T_; ++ t) { const Scalar epsilon_t = timeSeries_[t + 1][1] - timeSeries_[t][1]; SCR2c += epsilon_t * epsilon_t; // Perform since it is computed previously const Scalar X = timeSeries_.getValueAtIndex(t)[0]; const Scalar Y = timeSeries_.getValueAtIndex(t + 1)[0]; const Scalar epsilon = Y - rho_ * X - drift_; SCR2 += epsilon * epsilon; } // F2 statistic // Fisher statistic const Scalar fisherStatisticNullDrift = 0.5 * (SCR2c - SCR2) * (T_ - 1) / SCR2; // Fisher test const FisherSnedecor fisherSnedecor(2, T_ - 2); const Scalar pValueNullDrift = fisherSnedecor.computeCDF(fisherStatisticNullDrift); // Decision TestResult result("DickeyFullerDriftNullWithUnitRoot", pValueNullDrift < level, 1.0 - pValueNullDrift, 1.0 - level); return result; } /* Test the nullity of drift coefficient with assumption that there is no unit root Run a Student test H0 : Drift coefficient is null H1 : Drift coefficient significatively different from 0 */ TestResult DickeyFullerTest::testNoUnitRootAndNoDriftInDriftModel(const Scalar level) { // Run the computation of drift model TestResult resultTestDriftModel(testUnitRootInDriftModel(level)); if (resultTestDriftModel.getBinaryQualityMeasure()) { LOGWARN("The model has a unit root. The result test may have no sense. The statistical \"testUnitRootAndNoDriftInDriftModel\" test is suggested "); } // Perform the statistical test const Scalar studentStatisticNullDrift = std::abs(drift_) / sigmaDrift_; // Student quantile ==> T(n - p - 1) with n: size of sample and p: number of variables const Scalar complementaryCDFNullDrift = DistFunc::pStudent(T_ - 2, studentStatisticNullDrift); // Test is rejected if the the statistic is greater than the quantile const TestResult result("DickeyFullerDriftNullWithoutUnitRoot", complementaryCDFNullDrift < 1.0 - level, complementaryCDFNullDrift, 1.0 - level); return result; } /* Verbosity set accessor */ void DickeyFullerTest::setVerbose(const Bool verbose) { verbose_ = verbose; } /* Verbosity get accessor */ Bool DickeyFullerTest::getVerbose() const { return verbose_; } /* Method save() stores the object through the StorageManager */ void DickeyFullerTest::save(Advocate & adv) const { PersistentObject::save(adv); adv.saveAttribute("timeSeries_", timeSeries_); adv.saveAttribute("T_", T_); adv.saveAttribute("verbose_", verbose_); adv.saveAttribute("sum_yt_yt_minus_one_", sum_yt_yt_minus_one_); adv.saveAttribute("sum_squared_yt_minus_one_", sum_squared_yt_minus_one_); adv.saveAttribute("lastModel_", lastModel_); adv.saveAttribute("rho_", rho_); adv.saveAttribute("sigmaRho_", sigmaRho_); adv.saveAttribute("isComputedNoConstantCharacteristics_", isComputedNoConstantCharacteristics_); adv.saveAttribute("sum_yt_minus_one_", sum_yt_minus_one_); adv.saveAttribute("sum_y_t_", sum_yt_); adv.saveAttribute("drift_", drift_); adv.saveAttribute("sigmaDrift_", sigmaDrift_); adv.saveAttribute("isComputedNoConstantCharacteristics_", isComputedNoConstantCharacteristics_); adv.saveAttribute("sum_t_yt_minus_one_", sum_t_yt_minus_one_); adv.saveAttribute("sum_t_yt_", sum_t_yt_); adv.saveAttribute("sum_ti_", sum_ti_); adv.saveAttribute("sum_ti_ti_", sum_ti_ti_); adv.saveAttribute("trend_", trend_); adv.saveAttribute("sigmaTrend_", sigmaTrend_); adv.saveAttribute("isComputedTrendCharacteristics_", isComputedTrendCharacteristics_); } /* Method load() reloads the object from the StorageManager */ void DickeyFullerTest::load(Advocate & adv) { PersistentObject::load(adv); adv.loadAttribute("timeSeries_", timeSeries_ ); adv.loadAttribute("T_", T_ ); adv.loadAttribute("verbose_", verbose_ ); adv.loadAttribute("sum_yt_yt_minus_one_", sum_yt_yt_minus_one_); adv.loadAttribute("sum_squared_yt_minus_one_", sum_squared_yt_minus_one_); adv.loadAttribute("lastModel_", lastModel_); adv.loadAttribute("rho_", rho_); adv.loadAttribute("sigmaRho_", sigmaRho_); adv.loadAttribute("isComputedNoConstantCharacteristics_", isComputedNoConstantCharacteristics_); adv.loadAttribute("sum_yt_minus_one_", sum_yt_minus_one_); adv.loadAttribute("sum_y_t_", sum_yt_); adv.loadAttribute("drift_", drift_); adv.loadAttribute("sigmaDrift_", sigmaDrift_); adv.loadAttribute("isComputedNoConstantCharacteristics_", isComputedNoConstantCharacteristics_); adv.loadAttribute("sum_t_yt_minus_one_", sum_t_yt_minus_one_); adv.loadAttribute("sum_t_yt_", sum_t_yt_); adv.loadAttribute("sum_ti_", sum_ti_); adv.loadAttribute("sum_ti_ti_", sum_ti_ti_); adv.loadAttribute("trend_", trend_); adv.loadAttribute("sigmaTrend_", sigmaTrend_); adv.loadAttribute("isComputedTrendCharacteristics_", isComputedTrendCharacteristics_); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/FittingTest.cxx000066400000000000000000000505541307543307100242240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/FittingTest.hxx" #include "openturns/Point.hxx" #include "openturns/Description.hxx" #include "openturns/Path.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/DistFunc.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS /* Default constructor */ FittingTest::FittingTest() { // Nothing to do } /* Best model for a given numerical sample by BIC */ Distribution FittingTest::BestModelBIC(const Sample & sample, const DistributionFactoryCollection & factoryCollection) { const UnsignedInteger size = factoryCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; Bool builtAtLeastOne = false; Distribution bestDistribution; Scalar bestConcordanceMeasure = SpecFunc::MaxScalar; Bool continuousCase = true; for (UnsignedInteger i = 0; i < size; ++i) { const DistributionFactory factory(factoryCollection[i]); try { LOGINFO(OSS(false) << "Trying factory " << factory); const Distribution distribution(factory.build(sample)); if (i == 0) continuousCase = distribution.isContinuous(); else if (distribution.isContinuous() != continuousCase) throw InvalidArgumentException(HERE) << "Error: cannot merge continuous and non-continuous models for BIC selection."; const Scalar concordanceMeasure = BIC(sample, distribution, distribution.getParameterDimension()); LOGINFO(OSS(false) << "Resulting distribution=" << distribution << ", BIC=" << concordanceMeasure); if (concordanceMeasure < bestConcordanceMeasure) { bestConcordanceMeasure = concordanceMeasure; bestDistribution = distribution; builtAtLeastOne = true; } } catch (InvalidArgumentException & ex) { LOGWARN(OSS(false) << "Warning! Impossible to use factory " << factory << ". Reason=" << ex); } } if(!builtAtLeastOne) throw InvalidArgumentException(HERE) << "None of the factories could build a model."; if (bestConcordanceMeasure == SpecFunc::MaxScalar) LOGWARN(OSS(false) << "Be careful, the best model has an infinite concordance measure. The output distribution must be severely wrong."); return bestDistribution; } /* Best model for a given numerical sample by BIC */ Distribution FittingTest::BestModelBIC(const Sample & sample, const DistributionCollection & distributionCollection) { const UnsignedInteger size = distributionCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; Distribution bestDistribution; Scalar bestConcordanceMeasure = SpecFunc::MaxScalar; for (UnsignedInteger i = 0; i < size; ++i) { const Distribution distribution(distributionCollection[i]); LOGINFO(OSS(false) << "Testing distribution " << distribution); const Scalar concordanceMeasure = BIC(sample, distribution); LOGINFO(OSS(false) << "BIC=" << concordanceMeasure); if (concordanceMeasure < bestConcordanceMeasure) { bestConcordanceMeasure = concordanceMeasure; bestDistribution = distribution; } } if (bestConcordanceMeasure > SpecFunc::MaxScalar) LOGWARN(OSS(false) << "Be careful, the best model has an infinite concordance measure. The output distribution must be severely wrong."); return bestDistribution; } /* Best model for a given numerical sample by Kolmogorov */ Distribution FittingTest::BestModelKolmogorov(const Sample & sample, const DistributionFactoryCollection & factoryCollection, TestResult & bestResult) { const UnsignedInteger size = factoryCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; const Scalar fakeLevel = 0.5; Bool builtAtLeastOne = false; Distribution bestDistribution; Scalar bestPValue = -1.0; for (UnsignedInteger i = 0; i < size; ++i) { const DistributionFactory factory(factoryCollection[i]); try { LOGINFO(OSS(false) << "Trying factory " << factory); const Distribution distribution(factoryCollection[i].build(sample)); const TestResult result(Kolmogorov(sample, distribution, fakeLevel, distribution.getParameterDimension())); LOGINFO(OSS(false) << "Resulting distribution=" << distribution << ", test result=" << result); if (result.getPValue() > bestPValue) { bestPValue = result.getPValue(); bestResult = result; bestDistribution = distribution; builtAtLeastOne = true; } } catch (InvalidArgumentException & ex) { LOGWARN(OSS(false) << "Warning! Impossible to use factory " << factory << ". Reason=" << ex); } } if(!builtAtLeastOne) throw InvalidArgumentException(HERE) << "None of the factories could build a model."; if ( bestPValue == 0.0) LOGWARN(OSS(false) << "Be careful, the best model has a p-value of zero. The output distribution must be severely wrong."); return bestDistribution; } /* Best model for a given numerical sample by Kolmogorov */ Distribution FittingTest::BestModelKolmogorov(const Sample & sample, const DistributionCollection & distributionCollection, TestResult & bestResult) { const UnsignedInteger size = distributionCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; Distribution bestDistribution; Scalar bestPValue = -1.0; for (UnsignedInteger i = 0; i < size; ++i) { const Distribution distribution(distributionCollection[i]); LOGINFO(OSS(false) << "Testing distribution " << distribution); const TestResult result(Kolmogorov(sample, distribution)); LOGINFO(OSS(false) << "Test result=" << result); if (result.getPValue() > bestPValue) { bestPValue = result.getPValue(); bestResult = result; bestDistribution = distribution; } } if ( bestPValue == 0.0) LOGWARN(OSS(false) << "Be careful, the best model has a p-value of zero. The output distribution must be severely wrong."); return bestDistribution; } /* Best model for a given numerical sample by ChiSquared */ Distribution FittingTest::BestModelChiSquared(const Sample & sample, const DistributionFactoryCollection & factoryCollection, TestResult & bestResult) { const UnsignedInteger size = factoryCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; const Scalar fakeLevel = 0.5; Distribution bestDistribution(factoryCollection[0].build(sample)); bestResult = ChiSquared(sample, bestDistribution, fakeLevel, bestDistribution.getParameterDimension()); for (UnsignedInteger i = 1; i < size; ++i) { const Distribution distribution(factoryCollection[i].build(sample)); const TestResult result(ChiSquared(sample, distribution, fakeLevel, distribution.getParameterDimension())); if (result.getPValue() > bestResult.getPValue()) { bestResult = result; bestDistribution = distribution; } } if ( bestResult.getPValue() == 0.0) LOGWARN(OSS(false) << "Be careful, the best model has a p-value of zero."); return bestDistribution; } /* Best model for a given numerical sample by ChiSquared */ Distribution FittingTest::BestModelChiSquared(const Sample & sample, const DistributionCollection & distributionCollection, TestResult & bestResult) { const UnsignedInteger size = distributionCollection.getSize(); if (size == 0) throw InternalException(HERE) << "Error: no model given"; Distribution bestDistribution(distributionCollection[0]); bestResult = ChiSquared(sample, bestDistribution); for (UnsignedInteger i = 1; i < size; ++i) { const Distribution distribution(distributionCollection[i]); const TestResult result(ChiSquared(sample, distribution)); if (result.getPValue() > bestResult.getPValue()) { bestResult = result; bestDistribution = distribution; } } if ( bestResult.getPValue() == 0.0) LOGWARN(OSS(false) << "Be careful, the best model has a p-value of zero."); return bestDistribution; } /* Bayesian Information Criterion computation */ Scalar FittingTest::BIC(const Sample & sample, const Distribution & distribution, const UnsignedInteger estimatedParameters) { if (sample.getDimension() != distribution.getDimension()) throw InvalidArgumentException(HERE) << "Error: the sample dimension and the distribution dimension must be equal"; if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: the sample is empty"; const UnsignedInteger size = sample.getSize(); const UnsignedInteger parametersNumber = distribution.getParameterDimension(); if (parametersNumber < estimatedParameters) throw InvalidArgumentException(HERE) << "Error: the number of estimated parameters cannot exceed the number of parameters of the distribution"; Scalar logLikelihood = 0.0; const Sample logPDF(distribution.computeLogPDF(sample)); for (UnsignedInteger i = 0; i < size; ++i) { if (logPDF[i][0] == -SpecFunc::MaxScalar) return SpecFunc::MaxScalar; logLikelihood += logPDF[i][0]; } return (-2.0 * logLikelihood + estimatedParameters * log(1.0 * size)) / size; } /* Bayesian Information Criterion computation */ Scalar FittingTest::BIC(const Sample & sample, const DistributionFactory & factory) { const Distribution distribution(factory.build(sample)); return BIC(sample, distribution, distribution.getParameterDimension()); } /* Kolmogorov test */ TestResult FittingTest::Kolmogorov(const Sample & sample, const DistributionFactory & factory, const Scalar level) { if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Error: level must be in ]0, 1[, here level=" << level; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test works only with 1D samples"; const Distribution distribution(factory.build(sample)); if (!distribution.getImplementation()->isContinuous()) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test can be applied only to a continuous distribution"; if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test works only with 1D distribution"; return Kolmogorov(sample, distribution, level, distribution.getParameterDimension()); } /* Kolmogorov test */ TestResult FittingTest::Kolmogorov(const Sample & sample, const Distribution & distribution, const Scalar level, const UnsignedInteger estimatedParameters) { if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Error: level must be in ]0, 1[, here level=" << level; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test works only with 1D samples"; if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: the sample is empty"; if (!distribution.getImplementation()->isContinuous()) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test can be applied only to a continuous distribution"; if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test works only with 1D distribution"; if (estimatedParameters > 0) LOGINFO("Warning: using Kolmogorov test for a distribution with estimated parameters will result in an overestimated pValue"); const UnsignedInteger size = sample.getSize(); Scalar value = 0.0; const Sample cdfValues(distribution.computeCDF(sample.sort(0))); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar cdfValue = cdfValues[i][0]; value = std::max(value, std::max(std::abs(Scalar(i) / size - cdfValue), std::abs(cdfValue - Scalar(i + 1) / size))); } const Scalar pValue = DistFunc::pKolmogorov(size, value, true); TestResult result(OSS(false) << "Kolmogorov" << distribution.getClassName(), (pValue > 1.0 - level), pValue, 1.0 - level); result.setDescription(Description(1, String(OSS() << distribution.__str__() << " vs sample " << sample.getName()))); LOGDEBUG(OSS() << result); return result; } /* Two-sample Kolmogorov–Smirnov test */ TestResult FittingTest::TwoSamplesKolmogorov(const Sample & sample1, const Sample & sample2, const Scalar level) { if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Error: level must be in ]0, 1[, here level=" << level; if ((sample1.getDimension() != 1) || (sample2.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: Kolmogorov test works only with 1D samples"; if ((sample1.getSize() == 0) || (sample2.getSize() == 0)) throw InvalidArgumentException(HERE) << "Error: the sample is empty"; const UnsignedInteger size1 = sample1.getSize(); const UnsignedInteger size2 = sample2.getSize(); Sample sampleAllSorted(sample1.sort()); sampleAllSorted.add(sample2.sort()); Scalar value = 0.0; for (UnsignedInteger i = 0; i < size1 + size2; ++ i) { const Scalar sampleAllSorted_i = sampleAllSorted[i][0]; Scalar cdf1 = 0.0; for (UnsignedInteger j = 0; j < size1; ++ j) { if (sampleAllSorted[j][0] <= sampleAllSorted_i) { cdf1 = (j + 1.0) / size1; } else break; } Scalar cdf2 = 0.0; for (UnsignedInteger j = 0; j < size2; ++ j) { if (sampleAllSorted[size1 + j][0] <= sampleAllSorted_i) { cdf2 = (j + 1.0) / size2; } else break; } value = std::max(value, std::abs(cdf1 - cdf2)); } const Scalar pValue = DistFunc::pKolmogorov((size1 * size2) / (size1 + size2), value, true); TestResult result(OSS(false) << "Kolmogorov " << sample1.getName() << "/" << sample2.getName(), (pValue > 1.0 - level), pValue, 1.0 - level); result.setDescription(Description(1, String(OSS() << "sample" << sample1.getName() << " vs sample " << sample2.getName()))); LOGDEBUG(OSS() << result); return result; } /* Chi-squared test */ TestResult FittingTest::ChiSquared(const Sample & sample, const DistributionFactory & factory, const Scalar level) { if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Error: level must be in ]0, 1[, here level=" << level; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: ChiSquared test works only with 1D samples"; if (sample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: the sample is empty"; const Distribution distribution(factory.build(sample)); if (distribution.getImplementation()->isContinuous()) throw InvalidArgumentException(HERE) << "Error: Chi-squared test cannot be applied to a continuous distribution"; if (distribution.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: ChiSquared test works only with 1D distribution"; return ChiSquared(sample, distribution, level, distribution.getParameterDimension()); } /* Chi-squared test */ TestResult FittingTest::ChiSquared(const Sample & sample, const Distribution & distribution, const Scalar level, const UnsignedInteger estimatedParameters) { if ((level <= 0.0) || (level >= 1.0)) throw InvalidArgumentException(HERE) << "Error: level must be in ]0, 1[, here level=" << level; if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: ChiSquared test works only with 1D samples"; if (distribution.getImplementation()->isContinuous()) throw InvalidArgumentException(HERE) << "Error: Chi-squared test cannot be applied to a continuous distribution"; #if 0 // First, bin the data such that the theoretical frequency in each bin is at least nMin const UnsignedInteger nMin = ResourceMap::GetAsUnsignedInteger("FittingTest-ChiSquaredMinFrequency"); const UnsignedInteger size = sample.getSize(); if (size < 2 * nMin) throw InvalidArgumentException(HERE) << "Error: ChiSquared test cannot be used with a sample size smaller than " << 2 * nMin << ". Reduce the value of \"FittingTest-ChiSquaredMinFrequency\" below " << size / 2 << " if you really want to do this test."; // The test statistics Scalar xi = 0.0; // Sort the data const Sample sortedSample(sample.sort(0)); const UnsignedInteger iMax = static_cast(round(size / nMin)); UnsignedInteger dataIndex = 0; for (UnsignedInteger i = 1; i <= iMax; ++i) { const Scalar currentBound = distribution.computeQuantile(i / Scalar(iMax))[0]; UnsignedInteger count = 0; while (sample[dataIndex][0] <= currentBound) { ++count; ++dataIndex; } } #endif return RunRTest(sample, distribution, level, estimatedParameters, "ChiSquared"); } /* Generic invocation of a R script for testing a distribution against a sample */ TestResult FittingTest::RunRTest(const Sample & sample, const Distribution & distribution, const Scalar level, const UnsignedInteger estimatedParameters, const String & testName) { const String dataFileName(sample.storeToTemporaryFile()); const String resultFileName(Path::BuildTemporaryFileName("RResult.txt.XXXXXX")); const String commandFileName(Path::BuildTemporaryFileName("RCmd.R.XXXXXX")); std::ofstream cmdFile(commandFileName.c_str(), std::ios::out); // Fill-in the command file cmdFile << "library(rot)" << std::endl; cmdFile << "options(digits=17)" << std::endl; cmdFile << "options(warn=-1)" << std::endl; cmdFile << "options(stringsAsFactors = F)" << std::endl; cmdFile << "sample <- data.matrix(read.table(\"" << dataFileName << "\"))" << std::endl; cmdFile << "res <- computeTest" << testName << distribution.getImplementation()->getClassName(); cmdFile << "(sample, "; const Point parameters(distribution.getParametersCollection()[0]); const UnsignedInteger parametersNumber = parameters.getDimension(); for (UnsignedInteger i = 0; i < parametersNumber; ++i) cmdFile << parameters[i] << ", "; cmdFile << level << ", " << estimatedParameters << ")" << std::endl; cmdFile << "f <- file(\"" << resultFileName << "\",\"wt\")" << std::endl; cmdFile << "cat(res$test, res$testResult, res$threshold, res$pValue, sep=\"\\n\", file=f)" << std::endl; cmdFile << "close(f)" << std::endl; cmdFile.close(); const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << RExecutable << " --no-save --silent < \"" << commandFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In FittingTest::RunRTest(const Sample & sample, const Distribution & distribution, const Scalar level, const UnsignedInteger estimatedParameters, const String & testName): needs R. Please install it and set the absolute path of the R executable in ResourceMap."; const int returnCode(Os::ExecuteCommand(systemCommand)); if (returnCode != 0) throw InternalException(HERE) << "Error: unable to execute the system command " << String(systemCommand) << " returned code is " << returnCode; // Parse result file std::ifstream resultFile(resultFileName.c_str(), std::ios::in); String testType; resultFile >> testType; Bool testResult; resultFile >> testResult; Scalar pThreshold = -1.0; resultFile >> pThreshold; Scalar pValue = -1.0; resultFile >> pValue; // Clean-up everything Os::Remove(dataFileName); Os::Remove(resultFileName); Os::Remove(commandFileName); TestResult result(testType, testResult, pValue, pThreshold); return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/HypothesisTest.cxx000066400000000000000000000370231307543307100247530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/HypothesisTest.hxx" #include "openturns/HypothesisTest.hxx" #include "openturns/Point.hxx" #include "openturns/Path.hxx" #include "openturns/Log.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/LinearModelFactory.hxx" #include "openturns/Exception.hxx" #include "openturns/Os.hxx" #include "openturns/OTconfig.hxx" BEGIN_NAMESPACE_OPENTURNS HypothesisTest::HypothesisTest() { } /* Independance test between 2 scalar scalar samples for discrete distributions */ TestResult HypothesisTest::ChiSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level) { if ((firstSample.getDimension() != 1) || (secondSample.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the ChiSquared test can be performed only between two 1D samples."; return RunTwoSamplesRTest(firstSample, secondSample, level, "TwoSampleChiSquared"); } /* Independence Pearson test between 2 scalar samples which form a gaussian vector: test the linear relation */ TestResult HypothesisTest::Pearson(const Sample & firstSample, const Sample & secondSample, const Scalar level) { if ((firstSample.getDimension() != 1) || (secondSample.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the Pearson test can be performed only between two 1D samples."; return RunTwoSamplesRTest(firstSample, secondSample, level, "TwoSamplePearson"); } /* Smirnov test if two scalar samples (of sizes not necessarily equal) follow the same distribution (only for continuous distributions)*/ TestResult HypothesisTest::Smirnov(const Sample & firstSample, const Sample & secondSample, const Scalar level) { if ((firstSample.getDimension() != 1) || (secondSample.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the Smirnov test can be performed only between two 1D samples."; return RunTwoSamplesRTest(firstSample, secondSample, level, "TwoSampleSmirnov"); } /* Spearman test between 2 scalar samples : test the monotonous relation (only for continuous distributions) */ TestResult HypothesisTest::Spearman(const Sample & firstSample, const Sample & secondSample, const Scalar level) { if ((firstSample.getDimension() != 1) || (secondSample.getDimension() != 1)) throw InvalidArgumentException(HERE) << "Error: the Spearman test can be performed only between two 1D samples."; return RunTwoSamplesRTest(firstSample, secondSample, level, "TwoSampleSpearman"); } /* Generic invocation of a R script for executing a test between two 1D samples */ TestResult HypothesisTest::RunTwoSamplesRTest(const Sample & firstSample, const Sample & secondSample, const Scalar level, const String & testName) { const String firstDataFileName(firstSample.storeToTemporaryFile()); const String secondDataFileName(secondSample.storeToTemporaryFile()); const String resultFileName(Path::BuildTemporaryFileName("RResult.txt.XXXXXX")); const String commandFileName(Path::BuildTemporaryFileName("RCmd.R.XXXXXX")); std::ofstream cmdFile(commandFileName.c_str(), std::ios::out); // Fill-in the command file cmdFile << "library(rot)" << std::endl; cmdFile << "options(digits=17)" << std::endl; cmdFile << "options(warn=-1)" << std::endl; cmdFile << "options(stringsAsFactors = F)" << std::endl; cmdFile << "firstSample <- data.matrix(read.table(\"" << firstDataFileName << "\"))" << std::endl; cmdFile << "secondSample <- data.matrix(read.table(\"" << secondDataFileName << "\"))" << std::endl; cmdFile << "res <- computeTest" << testName; cmdFile << "(firstSample, secondSample, " << level << ")" << std::endl; cmdFile << "f <- file(\"" << resultFileName << "\",\"wt\")" << std::endl; cmdFile << "cat(res$test, res$testResult, res$threshold, res$pValue, sep=\"\\n\", file=f)" << std::endl; cmdFile << "close(f)" << std::endl; cmdFile.close(); const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << RExecutable << " --no-save --silent < \"" << commandFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In HypothesisTest::RunTwoSamplesRTest(const Sample & firstSample, const Sample & secondSample, const Scalar level, const String & testName): needs R. Please install it and set the absolute path of the R executable in ResourceMap."; const int returnCode(Os::ExecuteCommand(String(systemCommand).c_str())); if (returnCode != 0) throw InternalException(HERE) << "Error: unable to execute the system command " << String(systemCommand) << " returned code is " << returnCode; // Parse result file std::ifstream resultFile(resultFileName.c_str(), std::ios::in); // First, test type String testType; resultFile >> testType; // Second, test results Bool testResult; resultFile >> testResult; // Third, test threshold Scalar pThreshold = -1.0; resultFile >> pThreshold; // Fourth, test value Scalar pValue = -1.0; resultFile >> pValue; // Clean-up everything Os::Remove(firstDataFileName); Os::Remove(secondDataFileName); Os::Remove(resultFileName); Os::Remove(commandFileName); return TestResult(testType, testResult, pValue, pThreshold); } /* Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numeriacl sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample, for i in the selection. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. */ HypothesisTest::TestResultCollection HypothesisTest::PartialPearson(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level) { if (secondSample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the Spearman test can be performed only with an 1-d ouput sample."; if (!selection.check(firstSample.getDimension())) throw InvalidArgumentException(HERE) << "Error: invalid selection, repeated indices or values out of bound"; return RunTwoSamplesASelectionRTest(firstSample, secondSample, selection, level, "PartialPearson"); } /* Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialRegression performs the Regression test simultaneously on all firstSample[i] and secondSample, for i in the selection. The Regression test tests ifthe regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. */ HypothesisTest::TestResultCollection HypothesisTest::PartialRegression(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level) { // TODO: this can be checked inside RunTwoSamplesASelectionRTest once the rot script is fixed if (secondSample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the Regression test can be performed only with an 1-d ouput sample."; if (!selection.check(firstSample.getDimension())) throw InvalidArgumentException(HERE) << "Error: invalid selection, repeated indices or values out of bound"; // FIXME: unlike other rot scripts in/out sample args are swapped: return RunTwoSamplesASelectionRTest(secondSample, firstSample, selection, level, "PartialRegression"); } /* Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on firstSample[i] and secondSample, for i in the selection. */ HypothesisTest::TestResultCollection HypothesisTest::PartialSpearman(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level) { if (secondSample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the Spearman test can be performed only with an 1-d ouput sample."; if (!selection.check(firstSample.getDimension())) throw InvalidArgumentException(HERE) << "Error: invalid selection, repeated indices or values out of bound"; return RunTwoSamplesASelectionRTest(firstSample, secondSample, selection, level, "PartialSpearman"); } /* Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullPearson performs the Independence Pearson test simultaneously on all firstSample[i] and secondSample. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. */ HypothesisTest::TestResultCollection HypothesisTest::FullPearson(const Sample & firstSample, const Sample & secondSample, const Scalar level) { const UnsignedInteger dimension = firstSample.getDimension(); Indices selection(dimension); selection.fill(); return PartialPearson(firstSample, secondSample, selection, level); } /* Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullRegression performs the Regression test simultaneously on all firstSample[i] and secondSample. The Regression test tests if the regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. */ HypothesisTest::TestResultCollection HypothesisTest::FullRegression(const Sample & firstSample, const Sample & secondSample, const Scalar level) { const UnsignedInteger dimension = firstSample.getDimension(); Indices selection(dimension); selection.fill(); return PartialRegression(firstSample, secondSample, selection, level); } /* Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on all firstSample[i] and secondSample. */ HypothesisTest::TestResultCollection HypothesisTest::FullSpearman(const Sample & firstSample, const Sample & secondSample, const Scalar level) { const UnsignedInteger dimension = firstSample.getDimension(); Indices selection(dimension); selection.fill(); return PartialSpearman(firstSample, secondSample, selection, level); } /* Generic invocation of a R script for testing the partial correlation between two samples */ HypothesisTest::TestResultCollection HypothesisTest::RunTwoSamplesASelectionRTest(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level, const String & testName) { const String firstDataFileName(firstSample.storeToTemporaryFile()); const String secondDataFileName(secondSample.storeToTemporaryFile()); const UnsignedInteger size = selection.getSize(); Sample selectionSample(size, 1); for (UnsignedInteger i = 0; i < size; ++ i) selectionSample[i][0] = selection[i] + 1.0; const String selectionFileName(selectionSample.storeToTemporaryFile()); const String resultFileName(Path::BuildTemporaryFileName("RResult.txt.XXXXXX")); const String commandFileName(Path::BuildTemporaryFileName("RCmd.R.XXXXXX")); std::ofstream cmdFile(commandFileName.c_str(), std::ios::out); // Fill-in the command file cmdFile << "library(rot)" << std::endl; cmdFile << "options(digits=17)" << std::endl; cmdFile << "options(warn=-1)" << std::endl; cmdFile << "options(stringsAsFactors = F)" << std::endl; cmdFile << "firstSample <- data.matrix(read.table(\"" << firstDataFileName << "\"))" << std::endl; cmdFile << "secondSample <- data.matrix(read.table(\"" << secondDataFileName << "\"))" << std::endl; cmdFile << "selection <- data.matrix(read.table(\"" << selectionFileName << "\"))" << std::endl; cmdFile << "res <- computeTest" << testName; cmdFile << "(firstSample, secondSample, selection, " << level << ")" << std::endl; cmdFile << "f <- file(\"" << resultFileName << "\",\"wt\")" << std::endl; cmdFile << "cat(res$test, res$testResult, res$threshold, res$pValue, sep=\"\\n\", file=f)" << std::endl; cmdFile << "close(f)" << std::endl; cmdFile.close(); const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << RExecutable << " --no-save --silent < \"" << commandFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In HypothesisTest::RunTwoSamplesASelectionRTest(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level, const String & testName): needs R. Please install it and set the absolute path of the R executable in ResourceMap."; const int returnCode = Os::ExecuteCommand(systemCommand); if (returnCode != 0) throw InternalException(HERE) << "Error: unable to execute the system command " << String(systemCommand) << " returned code is " << returnCode; // Parse result file std::ifstream resultFile(resultFileName.c_str(), std::ios::in); // First, test type String testType; resultFile >> testType; // Second, test results Indices results(size); // FIXME: rot script should not output intercept p-value Scalar intercept = 0.; if (testName == "PartialRegression") resultFile >> intercept; for (UnsignedInteger i = 0; i < size; ++ i) resultFile >> results[i]; // Third, test threshold Scalar pThreshold = 0.; resultFile >> pThreshold; // Fourth, test values Point pValues(size); if (testName == "PartialRegression") resultFile >> intercept; for (UnsignedInteger i = 0; i < size; ++ i) resultFile >> pValues[i]; // Clean-up everything Os::Remove(firstDataFileName); Os::Remove(secondDataFileName); Os::Remove(selectionFileName); Os::Remove(resultFileName); Os::Remove(commandFileName); // Then, build the collection of results TestResultCollection resultCollection(size); for (UnsignedInteger i = 0; i < size; ++ i) resultCollection[i] = TestResult(testType, results[i] == 1, pValues[i], pThreshold); return resultCollection; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/LinearModelTest.cxx000066400000000000000000000331201307543307100250010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/LinearModelTest.hxx" #include "openturns/LinearModelFactory.hxx" #include "openturns/TestResult.hxx" #include "openturns/Description.hxx" #include "openturns/DistFunc.hxx" #include "openturns/Normal.hxx" #include "openturns/ChiSquare.hxx" #include "openturns/Path.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/OTconfig.hxx" #include "openturns/Log.hxx" #include "openturns/Os.hxx" BEGIN_NAMESPACE_OPENTURNS LinearModelTest::LinearModelTest() { } /* */ TestResult LinearModelTest::LinearModelAdjustedRSquared(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level) { return RunTwoSamplesALinearModelRTest(firstSample, secondSample, linearModel, level, "LmAdjustedRSquare"); } /* */ TestResult LinearModelTest::LinearModelAdjustedRSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level) { return LinearModelAdjustedRSquared(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level); } /* */ TestResult LinearModelTest::LinearModelFisher(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level) { return RunTwoSamplesALinearModelRTest(firstSample, secondSample, linearModel, level, "LmFisher"); } /* */ TestResult LinearModelTest::LinearModelFisher(const Sample & firstSample, const Sample & secondSample, const Scalar level) { return LinearModelFisher(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level); } /* */ TestResult LinearModelTest::LinearModelResidualMean(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level) { return RunTwoSamplesALinearModelRTest(firstSample, secondSample, linearModel, level, "LmResidualMean"); } /* */ TestResult LinearModelTest::LinearModelResidualMean(const Sample & firstSample, const Sample & secondSample, const Scalar level) { return LinearModelResidualMean(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level); } /* */ TestResult LinearModelTest::LinearModelRSquared(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level) { return RunTwoSamplesALinearModelRTest(firstSample, secondSample, linearModel, level, "LmRsquared"); } /* */ TestResult LinearModelTest::LinearModelRSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level) { return LinearModelRSquared(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level); } /* Generic invocation of a R script for testing a linear model against two samples */ TestResult LinearModelTest::RunTwoSamplesALinearModelRTest(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level, const String & testName) { String firstDataFileName(firstSample.storeToTemporaryFile()); String secondDataFileName(secondSample.storeToTemporaryFile()); Sample regression(1, linearModel.getRegression()); String regressionFileName(regression.storeToTemporaryFile()); String resultFileName(Path::BuildTemporaryFileName("RResult.txt.XXXXXX")); String commandFileName(Path::BuildTemporaryFileName("RCmd.R.XXXXXX")); std::ofstream cmdFile(commandFileName.c_str(), std::ios::out); // Fill-in the command file cmdFile << "library(rot)" << std::endl; cmdFile << "options(digits=17)" << std::endl; cmdFile << "options(warn=-1)" << std::endl; cmdFile << "options(stringsAsFactors = F)" << std::endl; cmdFile << "firstSample <- data.matrix(read.table(\"" << firstDataFileName << "\"))" << std::endl; cmdFile << "secondSample <- data.matrix(read.table(\"" << secondDataFileName << "\"))" << std::endl; cmdFile << "regression <- t(data.matrix(read.table(\"" << regressionFileName << "\")))" << std::endl; cmdFile << "res <- test" << testName; cmdFile << "(firstSample, regression, secondSample, " << level << ")" << std::endl; cmdFile << "f <- file(\"" << resultFileName << "\",\"wt\")" << std::endl; cmdFile << "cat(res$test, res$testResult, res$threshold, res$pValue, sep=\"\\n\", file=f)" << std::endl; cmdFile << "close(f)" << std::endl; cmdFile.close(); const String RExecutable(ResourceMap::Get("R-executable-command")); OSS systemCommand; if (RExecutable != "") systemCommand << RExecutable << " --no-save --silent < \"" << commandFileName << "\"" << Os::GetDeleteCommandOutput(); else throw NotYetImplementedException(HERE) << "In LinearModelTest::RunTwoSamplesALinearModelRTest(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level, const String & testName): needs R. Please install it and set the absolute path of the R executable in ResourceMap."; int returnCode(Os::ExecuteCommand(systemCommand)); if (returnCode != 0) throw InternalException(HERE) << "Error: unable to execute the system command " << String(systemCommand) << " returned code is " << returnCode; // Parse result file std::ifstream resultFile(resultFileName.c_str(), std::ios::in); String testType; resultFile >> testType; Bool testResult; resultFile >> testResult; Scalar pThreshold = -1.0; resultFile >> pThreshold; Scalar pValue = -1.0; resultFile >> pValue; // Clean-up everything Os::Remove(firstDataFileName); Os::Remove(secondDataFileName); Os::Remove(regressionFileName); Os::Remove(resultFileName); Os::Remove(commandFileName); return TestResult(testType, testResult, pValue, pThreshold); } /* */ TestResult LinearModelTest::LinearModelHarrisonMcCabe(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level, const Scalar breakPoint, const Scalar simulationSize) { const Sample residuals(linearModel.getResidual(firstSample, secondSample)); const UnsignedInteger residualSize = firstSample.getSize(); /* Split the sample using the breakPoint*/ const UnsignedInteger breakIndex = std::floor(residualSize * breakPoint); Scalar sumSelectResiduals = 0; for(UnsignedInteger i = 0; i < breakIndex; ++i) { const Point residual(residuals[i]); sumSelectResiduals += residual.normSquare(); } const Scalar sumSquaredResiduals = residuals.computeVariance()[0] * (residualSize - 1); /* compute Harrison McCabe statistic */ const Scalar hmc = sumSelectResiduals / sumSquaredResiduals; /* p-value computed by simultation */ Scalar pValue = 0; for(UnsignedInteger i = 0; i < simulationSize; ++i) { const Sample sample(Normal().getSample(residualSize)); const Sample stantardSample((sample - sample.computeMean()) / sample.computeStandardDeviationPerComponent()); Scalar sumSelectResidualsSimulation = 0; for (UnsignedInteger j = 0; j < breakIndex; ++ j) { const Point stantardSamplePoint(stantardSample[j]); sumSelectResidualsSimulation += stantardSamplePoint.normSquare(); } const Scalar sumSquaredResidualsSimulation = stantardSample.computeVariance()[0] * (residualSize - 1); const Scalar statistic = sumSelectResidualsSimulation / sumSquaredResidualsSimulation; if(statistic < hmc) { pValue += 1.0; } } pValue = pValue / simulationSize; return TestResult(String("HarrisonMcCabe"), Bool(pValue > 1.0 - level), pValue, Scalar(level)); } /* */ TestResult LinearModelTest::LinearModelHarrisonMcCabe(const Sample & firstSample, const Sample & secondSample, const Scalar level, const Scalar breakPoint, const Scalar simulationSize) { return LinearModelHarrisonMcCabe(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level, breakPoint, simulationSize); } /* */ TestResult LinearModelTest::LinearModelBreuschPagan(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level) { const Sample residuals(linearModel.getResidual(firstSample, secondSample)); const UnsignedInteger residualSize = firstSample.getSize(); /* compute variance of the residuals*/ const Scalar residualsVariance = residuals.computeVariance()[0]; Sample w(residualSize, 1); for(UnsignedInteger i = 0; i < residualSize; ++i) { const Point residual(residuals[i]); w[i][0] = (residual.normSquare() - residualsVariance); } /* Build a linear model on the squared residuals */ const LinearModel linearModelResiduals(LinearModelFactory().build(firstSample, w)); /* Predicted values of the squared residuals*/ const Sample wPredicted(linearModelResiduals.getPredicted(firstSample)); /* Compute variances */ const Scalar wPredictedVar = wPredicted.computeVariance()[0]; const Scalar wVariance = w.computeVariance()[0]; /* Compute the Breusch Pagan statistic */ const Scalar bp = residualSize * wPredictedVar / wVariance; /* Get the degree of freedom */ const UnsignedInteger dof = firstSample.getDimension(); /* Compute the p-value */ const Scalar pValue = ChiSquare(dof).computeComplementaryCDF(bp); return TestResult(String("BreuschPagan"), Bool(pValue > 1.0 - level), pValue, level); } /* */ TestResult LinearModelTest::LinearModelBreuschPagan(const Sample & firstSample, const Sample & secondSample, const Scalar level) { return LinearModelBreuschPagan(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), level); } /* */ TestResult LinearModelTest::LinearModelDurbinWatson(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const String hypothesis, const Scalar level) { const Sample residuals(linearModel.getResidual(firstSample, secondSample)); const UnsignedInteger residualSize = firstSample.getSize(); const UnsignedInteger dimension = firstSample.getDimension(); const Scalar sumSquaredResiduals = residuals.computeVariance()[0] * (residualSize - 1); Scalar sumSquaredDifference = 0; for(UnsignedInteger i = 1; i < residualSize; ++i) { const Point residualDifference(residuals[i] - residuals[i - 1]); sumSquaredDifference += residualDifference.normSquare(); } /* Compute the Durbin Watson statistic */ const Scalar dw = sumSquaredDifference / sumSquaredResiduals; /* Normal approximation of dw to compute the p-value*/ /* Create the matrix [1 x]*/ Matrix X(residualSize, dimension + 1); for(UnsignedInteger i = 0; i < residualSize; ++i) { X(i, 0) = 1; X(i, 1) = firstSample[i][0]; } Matrix AX(residualSize, dimension + 1); AX(0, 1) = firstSample[0][0] - firstSample[1][0]; AX(residualSize - 1, 1) = firstSample[residualSize - 1][0] - firstSample[residualSize - 2][0]; for(UnsignedInteger i = 0; i < residualSize - 2; ++i) { AX(i + 1, 1) = -firstSample[i][0] + 2 * firstSample[i + 1][0] - firstSample[i + 2][0]; } CovarianceMatrix XtX(X.computeGram()); const SquareMatrix XAXQt(XtX.solveLinearSystem(AX.transpose() * X).getImplementation()); const Scalar P = 2 * (residualSize - 1) - XAXQt.computeTrace(); const Scalar XAXTrace = XtX.solveLinearSystem(AX.computeGram(), false).getImplementation()->computeTrace(); const Scalar Q = 2 * (3 * residualSize - 4) - 2 * XAXTrace + (XAXQt * XAXQt).getImplementation()->computeTrace(); const Scalar dmean = P / (residualSize - (dimension + 1)); const Scalar dvar = 2.0 / ((residualSize - (dimension + 1)) * (residualSize - (dimension + 1) + 2)) * (Q - P * dmean); /* Compute the p-value with respect to the hypothesis */ // Initial values defined for hypothesis = "Equal" Scalar pValue = 2.0 * DistFunc::pNormal(std::abs(dw - dmean) / std::sqrt(dvar), true); Description description(1, "Hypothesis test: autocorrelation equals 0."); if(hypothesis == "Less") { pValue = 1 - pValue / 2; description[0] = "Hypothesis test: autocorrelation is less than 0"; } else if(hypothesis == "Greater") { pValue = pValue / 2; description[0] = "Hypothesis test: autocorrelation is greater than 0"; } /* Set test result */ TestResult result(String("DurbinWatson"), Bool(pValue > 1 - level), pValue, level); result.setDescription(description); return result; } /* */ TestResult LinearModelTest::LinearModelDurbinWatson(const Sample & firstSample, const Sample & secondSample, const String hypothesis, const Scalar level) { return LinearModelDurbinWatson(firstSample, secondSample, LinearModelFactory().build(firstSample, secondSample, level), hypothesis, level); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/NormalityTest.cxx000066400000000000000000000117731307543307100245760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/NormalityTest.hxx" #include "openturns/Exception.hxx" #include "openturns/Path.hxx" #include "openturns/DistFunc.hxx" BEGIN_NAMESPACE_OPENTURNS NormalityTest::NormalityTest() { } /* Anderson Darling normality test for normal distributions. */ TestResult NormalityTest::AndersonDarlingNormal(const Sample & sample, const Scalar level) { if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot perform an Anderson Darling normality test with sample of dimension > 1."; if (sample.getSize() < 8) throw InvalidArgumentException(HERE) << "Error: cannot perform an Anderson Darling normality test with sample of size < 8."; Sample sortedSample(sample.sort(0)); Scalar mean = sortedSample.computeMean()[0]; Scalar sd = sortedSample.computeStandardDeviationPerComponent()[0]; const UnsignedInteger size = sample.getSize(); Scalar testStatistic = 0.0; UnsignedInteger effectiveIndex = 0; for (UnsignedInteger i = 0; i < size; ++i) { Scalar yi = DistFunc::pNormal((sortedSample[i][0] - mean) / sd); Scalar yni = 1.0 - DistFunc::pNormal((sortedSample[size - i - 1][0] - mean) / sd); if ((yi > 0.0) && (yni > 0.0)) { testStatistic += (2.0 * effectiveIndex + 1) * (log(yi) + log(yni)); ++effectiveIndex; } } testStatistic /= effectiveIndex; testStatistic = (-Scalar(effectiveIndex) - testStatistic); // Corrective factor for small sample size Scalar adjustedStatistic = testStatistic * (1.0 + 0.75 / effectiveIndex + 2.25 / (effectiveIndex * effectiveIndex)); // Compute approximate p-value Scalar pValue = 1.0; if (adjustedStatistic >= -1.38) { pValue = 1 - exp(-13.436 + 101.14 * adjustedStatistic - 223.73 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.2) { pValue = 1 - exp(-8.318 + 42.796 * adjustedStatistic - 59.938 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.34) { pValue = exp(0.9177 - 4.279 * adjustedStatistic - 1.38 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.6) { pValue = exp(1.2937 - 5.709 * adjustedStatistic + 0.0186 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 153.0) { pValue = 0.0; } return TestResult("AndersonDarlingNormal", pValue > 1.0 - level, pValue, 1.0 - level); } /* Cramer Von Mises normality test for normal distributions. */ TestResult NormalityTest::CramerVonMisesNormal(const Sample & sample, const Scalar level) { if (sample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: cannot perform a Cramer Von-Mises normality test with sample of dimension > 1."; if (sample.getSize() < 8) throw InvalidArgumentException(HERE) << "Error: cannot perform a Cramer Von-Mises normality test with sample of size < 8."; Sample sortedSample(sample.sort(0)); Scalar mean = sortedSample.computeMean()[0]; Scalar sd = sortedSample.computeStandardDeviationPerComponent()[0]; const UnsignedInteger size = sample.getSize(); Scalar testStatistic = 1.0 / (12.0 * size); for (UnsignedInteger i = 0; i < size; ++i) { Scalar yi = DistFunc::pNormal((sortedSample[i][0] - mean) / sd); Scalar delta = yi - (2.0 * i + 1.0) / (2.0 * size); testStatistic += delta * delta; } // Corrective factor for small sample size Scalar adjustedStatistic = testStatistic * (1.0 + 0.5 / size); // Compute approximate p-value Scalar pValue = 1.0; if (adjustedStatistic >= -0.2) { pValue = 1 - exp(-13.953 + 775.5 * adjustedStatistic - 12542.61 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.0275) { pValue = 1 - exp(-5.903 + 179.546 * adjustedStatistic - 1515.29 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.051) { pValue = exp(0.886 - 31.62 * adjustedStatistic + 10.897 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 0.092) { pValue = exp(1.111 - 34.242 * adjustedStatistic + 12.832 * adjustedStatistic * adjustedStatistic); } if (adjustedStatistic >= 2.636) { pValue = 0.0; } return TestResult("CramerVonMisesNormal", pValue > 1.0 - level, pValue, 1.0 - level); } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/VisualTest.cxx000066400000000000000000000535621307543307100240650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/VisualTest.hxx" #include "openturns/Curve.hxx" #include "openturns/Cloud.hxx" #include "openturns/Staircase.hxx" #include "openturns/Point.hxx" #include "openturns/Interval.hxx" #include "openturns/Indices.hxx" #include "openturns/Description.hxx" #include "openturns/ResourceMap.hxx" #include "openturns/UserDefined.hxx" #include "openturns/SpecFunc.hxx" #include "openturns/HistogramFactory.hxx" #include "openturns/Normal.hxx" #include "openturns/NormalFactory.hxx" BEGIN_NAMESPACE_OPENTURNS VisualTest::VisualTest() { } /* Draw the empirical CDF of the Sample when its dimension is 1 */ Graph VisualTest::DrawEmpiricalCDF(const Sample & sample, const Scalar xMin, const Scalar xMax) { return UserDefined(sample).drawCDF(xMin, xMax); } /* Draw the Histogram of the Sample when its dimension is 1 */ Graph VisualTest::DrawHistogram(const Sample & sample, const UnsignedInteger binNumber) { // Create an empty graph Graph graphHist("sample histogram", "realizations", "frequency", true, "topright"); graphHist.add(HistogramFactory().buildAsHistogram(sample, binNumber).drawPDF()); // Create the barplot OSS oss; oss << sample.getName() << " histogram"; graphHist.setLegends(Description(1, oss)); return graphHist; } /* Draw the Histogram of the Sample when its dimension is 1, Normal empirical rule for bin number */ Graph VisualTest::DrawHistogram(const Sample & sample) { // Create an empty graph Graph graphHist("sample histogram", "realizations", "frequency", true, "topright"); graphHist.add(HistogramFactory().buildAsHistogram(sample).drawPDF()); // Create the barplot OSS oss; oss << sample.getName() << " histogram"; graphHist.setLegends(Description(1, oss)); return graphHist; } /* Draw the QQplot of the two Samples when its dimension is 1 */ Graph VisualTest::DrawQQplot(const Sample & sample1, const Sample & sample2, const UnsignedInteger pointNumber) { if (sample1.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a QQplot only if dimension equals 1, here dimension=" << sample1.getDimension(); if (sample2.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a QQplot only if dimension equals 1, here dimension=" << sample2.getDimension(); Sample data(pointNumber, 2); const Scalar step = 1.0 / pointNumber; for (UnsignedInteger i = 0; i < pointNumber; ++i) { const Scalar q = (i + 0.5) * step; data[i][0] = sample1.computeQuantilePerComponent(q)[0]; data[i][1] = sample2.computeQuantilePerComponent(q)[0]; } Cloud cloudQQplot(data, "Data"); if (pointNumber < 100) cloudQQplot.setPointStyle("fcircle"); else if (pointNumber < 1000) cloudQQplot.setPointStyle("bullet"); else cloudQQplot.setPointStyle("dot"); Graph graphQQplot("Two sample QQ-plot", sample1.getDescription()[0], sample2.getDescription()[0], true, "topleft"); // First, the bisectrice Sample diagonal(2, 2); Point point(2); diagonal[0][0] = data[0][0]; diagonal[0][1] = data[0][0]; diagonal[1][0] = data[pointNumber - 1][0]; diagonal[1][1] = data[pointNumber - 1][0]; Curve bisectrice(diagonal, "Test line"); bisectrice.setColor("red"); bisectrice.setLineStyle("dashed"); graphQQplot.add(bisectrice); // Then the QQ plot graphQQplot.add(cloudQQplot); // Adapt the margins Point boundingBox(graphQQplot.getBoundingBox()); Scalar width = boundingBox[1] - boundingBox[0]; Scalar height = boundingBox[3] - boundingBox[2]; boundingBox[0] -= 0.1 * width; boundingBox[1] += 0.1 * width; boundingBox[2] -= 0.1 * height; boundingBox[3] += 0.1 * height; graphQQplot.setBoundingBox(boundingBox); return graphQQplot; } /* Draw the QQplot of one Sample and one Distribution when its dimension is 1 */ Graph VisualTest::DrawQQplot(const Sample & sample, const Distribution & dist) { if (sample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a QQplot only if dimension equals 1, here dimension=" << sample.getDimension(); if (dist.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a QQplot only if dimension equals 1, here dimension=" << dist.getDimension(); const UnsignedInteger size = sample.getSize(); const Sample sortedSample(sample.sort(0)); Sample data(size, 2); const Scalar step = 1.0 / size; for (UnsignedInteger i = 0; i < size; ++i) { data[i][0] = sortedSample[i][0]; data[i][1] = dist.computeQuantile((i + 0.5) * step)[0]; } Cloud cloudQQplot(data, "Data"); if (size < 100) cloudQQplot.setPointStyle("fcircle"); else if (size < 1000) cloudQQplot.setPointStyle("bullet"); else cloudQQplot.setPointStyle("dot"); Graph graphQQplot("Sample versus model QQ-plot", sample.getDescription()[0], dist.__str__(), true, "topleft"); // First, the bisectrice Sample diagonal(2, 2); Point point(2); diagonal[0][0] = data[0][0]; diagonal[0][1] = data[0][0]; diagonal[1][0] = data[size - 1][0]; diagonal[1][1] = data[size - 1][0]; Curve bisectrice(diagonal, "Test line"); bisectrice.setColor("red"); bisectrice.setLineStyle("dashed"); graphQQplot.add(bisectrice); // Then the QQ plot graphQQplot.add(cloudQQplot); // Adapt the margins Point boundingBox(graphQQplot.getBoundingBox()); Scalar width = boundingBox[1] - boundingBox[0]; Scalar height = boundingBox[3] - boundingBox[2]; boundingBox[0] -= 0.1 * width; boundingBox[1] += 0.1 * width; boundingBox[2] -= 0.1 * height; boundingBox[3] += 0.1 * height; graphQQplot.setBoundingBox(boundingBox); return graphQQplot; } /* Draw the Henry line for a sample when its dimension is 1 */ Graph VisualTest::DrawHenryLine(const Sample & sample) { if (sample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a Henry line only if the sample dimension equals 1, here dimension=" << sample.getDimension(); return DrawHenryLine(sample, NormalFactory().buildAsNormal(sample)); } /* Draw the Henry line for a sample and a given normal distribution when its dimension is 1 */ Graph VisualTest::DrawHenryLine(const Sample & sample, const Distribution & normal) { if (sample.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a Henry plot only if the sample dimension equals 1, here dimension=" << sample.getDimension(); if (normal.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a Henry plot only if the normal distribution dimension equals 1, here dimension=" << normal.getDimension(); if (normal.getImplementation()->getClassName() != "Normal") throw InvalidArgumentException(HERE) << "Normal distribution expected"; Graph graphHenry("Henry plot", "Sample", "Standard normal quantiles", true, "topleft"); const UnsignedInteger size = sample.getSize(); const Sample sortedSample(sample.sort(0)); // First, the Henry line: y = (x - mu) / sigma const Scalar mu = normal.getMean()[0]; const Scalar sigma = normal.getStandardDeviation()[0]; Sample henryLinePoints(2, 2); henryLinePoints[0][0] = sortedSample[0][0]; // sample.getMin()[0]; henryLinePoints[0][1] = (henryLinePoints[0][0] - mu) / sigma; henryLinePoints[1][0] = sortedSample[size - 1][0]; // sample.getMax()[0]; henryLinePoints[1][1] = (henryLinePoints[1][0] - mu) / sigma; Curve henryLine(henryLinePoints, "Henry line"); henryLine.setColor("red"); henryLine.setLineStyle("dashed"); graphHenry.add(henryLine); // Then, the data const Normal standard_normal(0.0, 1.0); Sample data(size, 2); const Scalar step = 1.0 / size; for (UnsignedInteger i = 0; i < size; ++i) { data[i][0] = sortedSample[i][0]; data[i][1] = standard_normal.computeQuantile((i + 0.5) * step)[0]; } Cloud dataCloud(data, "Data"); graphHenry.add(dataCloud); return graphHenry; } /* Draw the clouds of one Sample and one model when its dimension is 2 */ Graph VisualTest::DrawClouds(const Sample & sample, const Distribution & dist) { if (sample.getDimension() != 2) throw InvalidDimensionException(HERE) << "Error: can draw sample clouds only if dimension equals 2, here dimension=" << sample.getDimension(); if (dist.getDimension() != 2) throw InvalidDimensionException(HERE) << "Error: can draw distribution clouds only if dimension equals 2, here dimension=" << dist.getDimension(); const Sample distSample(dist.getSample(sample.getSize())); const Cloud sampleCloud(sample, "blue", "fsquare", "Sample Cloud"); const Cloud distCloud(distSample, "red", "fsquare", "Model Cloud"); Graph myGraph("two samples clouds", "x1", "x2", true, "topright"); // Then, draw it myGraph.add(sampleCloud); myGraph.add(distCloud); return myGraph; } /* Draw the clouds of two Sample and one model when its dimension is 2 */ Graph VisualTest::DrawClouds(const Sample & sample1, const Sample & sample2) { if (sample1.getDimension() != 2) throw InvalidDimensionException(HERE) << "Error: can draw sample clouds only if dimension equals 2, here dimension=" << sample1.getDimension(); if (sample2.getDimension() != 2) throw InvalidDimensionException(HERE) << "Error: can draw sample clouds only if dimension equals 2, here dimension=" << sample2.getDimension(); const Cloud sampleCloud1(sample1, "blue", "fsquare", "Sample1 Cloud"); const Cloud sampleCloud2(sample2, "red", "fsquare", "Sample2 Cloud"); Graph myGraph("two samples clouds", "x1", "x2", true, "topright"); // Then, draw it myGraph.add(sampleCloud1); myGraph.add(sampleCloud2); return myGraph; } /* Draw the visual test for the LinearModel when its dimension is 1 */ Graph VisualTest::DrawLinearModel(const Sample & sample1, const Sample & sample2, const LinearModel & linearModel) { if (sample1.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a LinearModel visual test only if dimension equals 1, here dimension=" << sample1.getDimension(); if (sample2.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a LinearModel visual test only if dimension equals 1, here dimension=" << sample2.getDimension(); if (sample1.getSize() != sample2.getSize()) throw InvalidArgumentException(HERE) << "Error: can draw a LinearModel visual test only if sample 1 and sample 2 have the same size, here sample 1 size=" << sample1.getSize() << " and sample 2 size=" << sample2.getSize(); const Sample y(linearModel.getPredicted(sample1)); OSS oss; oss << sample1.getName() << " LinearModel visualTest"; const UnsignedInteger size = sample1.getSize(); Sample sample2D(size, 2); for (UnsignedInteger i = 0; i < size; ++i) { Point point(2); point[0] = sample1[i][0]; point[1] = y[i][0]; sample2D[i] = point; } Curve curveLinearModelTest(sample2D.sortAccordingToAComponent(0)); curveLinearModelTest.setLegend(oss); Cloud cloudLinearModelTest(sample1, sample2); cloudLinearModelTest.setColor("red"); cloudLinearModelTest.setPointStyle("fsquare"); cloudLinearModelTest.setLegend("Original Sample"); Graph graphLinearModelTest("original sample versus Linear Model one", "x", "y", true, "topright"); graphLinearModelTest.add(cloudLinearModelTest); graphLinearModelTest.add(curveLinearModelTest); return graphLinearModelTest; } /* Draw the visual test for the LinearModel residuals */ Graph VisualTest::DrawLinearModelResidual(const Sample & sample1, const Sample & sample2, const LinearModel & linearModel) { if (sample1.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a LinearModel residual visual test only if dimension equals 1, here dimension=" << sample1.getDimension(); if (sample2.getDimension() != 1) throw InvalidDimensionException(HERE) << "Error: can draw a LinearModel residual visual test only if dimension equals 1, here dimension=" << sample2.getDimension(); if (sample1.getSize() != sample2.getSize()) throw InvalidArgumentException(HERE) << "Error: can draw a LinearModel residual visual test only if sample 1 and sample 2 have the same size, here sample 1 size=" << sample1.getSize() << " and sample 2 size=" << sample2.getSize(); const Sample y(linearModel.getResidual(sample1, sample2)); const UnsignedInteger size = sample1.getSize(); Sample data(size - 1, 2); for (UnsignedInteger i = 0; i < size - 1; ++i) { data[i][0] = y[i][0]; data[i][1] = y[i + 1][0]; } OSS oss; oss << sample1.getName() << " LinearModel residual Test"; const Cloud cloudLinearModelRTest(data, "red", "fsquare", oss); Graph graphLinearModelRTest("residual(i) versus residual(i-1)", "redidual(i-1)", "residual(i)", true, "topright"); graphLinearModelRTest.add(cloudLinearModelRTest); return graphLinearModelRTest; } /* Draw the CobWeb visual test */ Graph VisualTest::DrawCobWeb(const Sample & inputSample, const Sample & outputSample, const Scalar minValue, const Scalar maxValue, const String & color, const Bool quantileScale) { const UnsignedInteger size = inputSample.getSize(); if (size == 0) throw InvalidArgumentException(HERE) << "Error: the input sample is empty."; if (size != outputSample.getSize()) throw InvalidArgumentException(HERE) << "Error: the input sample and the output sample must have the same size."; if (outputSample.getDimension() != 1) throw InvalidArgumentException(HERE) << "Error: the output sample dimension must be 1."; if (minValue > maxValue) throw InvalidArgumentException(HERE) << "Error: minValue cannot be greater than maxValue."; // If based on quantiles, rank the values UnsignedInteger minRank = 0; UnsignedInteger maxRank = 0; if (!quantileScale) { const Scalar minCDF = outputSample.computeEmpiricalCDF(Point(1, minValue)); const Scalar maxCDF = outputSample.computeEmpiricalCDF(Point(1, maxValue)); minRank = static_cast(round(size * minCDF)); maxRank = static_cast(round(size * maxCDF)); } else { if ((minValue < 0.0) || (maxValue > 1.0) || (minValue > maxValue)) throw InvalidArgumentException(HERE) << "Error: we must have 0 <= minValue <= maxValue <= 1 when using quantile scale."; minRank = static_cast(size * minValue); maxRank = static_cast(size * maxValue); } const UnsignedInteger inputDimension = inputSample.getDimension(); const Sample rankedInput(inputSample.rank()); const Sample rankedOutput(outputSample.rank()); // Create the graph Graph cobWeb(String(OSS() << "Cobweb graph - " << outputSample.getDescription() << " vs " << inputSample.getDescription()), "", "", false, "topright"); // First discriminate the filaments: draw the background filaments and memorize the selected ones Indices selectedFilaments(0); for (UnsignedInteger i = 0; i < size; ++i) { const UnsignedInteger currentRank = static_cast(rankedOutput[i][0]); if ((currentRank >= minRank) && (currentRank <= maxRank)) selectedFilaments.add(i); else { Sample data(inputDimension + 1, 1); for (UnsignedInteger j = 0; j < inputDimension; ++j) data[j][0] = rankedInput[i][j]; data[inputDimension][0] = rankedOutput[i][0]; Curve filament(data); filament.setColor("grey"); cobWeb.add(filament); } } // Draw the selected filaments const UnsignedInteger selectedSize = selectedFilaments.getSize(); for (UnsignedInteger i = 0; i < selectedSize; ++i) { Sample data(inputDimension + 1, 1); for (UnsignedInteger j = 0; j < inputDimension; ++j) data[j][0] = rankedInput[selectedFilaments[i]][j]; data[inputDimension][0] = rankedOutput[selectedFilaments[i]][0]; Curve filament(data); filament.setColor(color); cobWeb.add(filament); } // Draw the vertical lines associated with the input variables const Description palette(Curve::BuildDefaultPalette(inputDimension)); for (UnsignedInteger i = 0; i < inputDimension + 1; ++i) { Sample data(2, 2); Point point(2); data[0][0] = i; data[1][0] = i; data[1][1] = size; Curve bar(data); if (i < inputDimension) { bar.setColor(palette[i]); bar.setLegend(inputSample.getDescription()[i]); } else { bar.setColor("black"); bar.setLegend(outputSample.getDescription()[0]); } bar.setLineWidth(3); cobWeb.add(bar); } Point minPoint(2); minPoint[0] = 0.0; minPoint[1] = 0.0; Point maxPoint(2); maxPoint[0] = 1.1 * inputDimension; maxPoint[1] = size; cobWeb.setBoundingBox(Interval(minPoint, maxPoint)); cobWeb.setGrid(false); return cobWeb; } /* Draw the Kendall plot to assess a copula for a bidimensional sample */ Graph VisualTest::DrawKendallPlot(const Sample & data, const Distribution & copula) { if (data.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the data sample is empty."; if (data.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the data sample has a dimension not equal to 2."; if (!copula.isCopula()) throw InvalidArgumentException(HERE) << "Error: the given distribution=" << copula << " is not a copula."; if (copula.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the copula has a dimension not equal to 2."; const Sample empiricalStatistics(ComputeKendallPlotEmpiricalStatistics(data)); const Sample theoreticalStatistics(ComputeKendallPlotTheoreticalStatistics(copula, data.getSize())); Graph graph("Kendall Plot", copula.getName(), data.getName(), true, "topleft"); // Draw the first diagonal Sample dataDiagonal(0, 2); dataDiagonal.add(Point(2, 0.0)); dataDiagonal.add(Point(2, 1.0)); Curve diagonal(dataDiagonal); diagonal.setColor("red"); diagonal.setLineStyle("dashed"); graph.add(diagonal); // Draw the Kendall curve graph.add(Curve(theoreticalStatistics, empiricalStatistics)); return graph; } /* Draw the Kendall plot to assess if two bidimensional samples share the same copula */ Graph VisualTest::DrawKendallPlot(const Sample & firstSample, const Sample & secondSample) { if (firstSample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the first sample is empty."; if (secondSample.getSize() == 0) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the second sample is empty."; if (firstSample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the first sample has a dimension not equal to 2."; if (secondSample.getDimension() != 2) throw InvalidArgumentException(HERE) << "Error: cannot build a Kendall plot if the second sample has a dimension not equal to 2."; const Sample firstEmpiricalStatistics(ComputeKendallPlotEmpiricalStatistics(firstSample)); const Sample secondEmpiricalStatistics(ComputeKendallPlotEmpiricalStatistics(secondSample)); Graph graph("Kendall Plot", firstSample.getName(), secondSample.getName(), true, "topleft"); // Draw the first diagonal Sample data(0, 2); data.add(Point(2, 0.0)); data.add(Point(2, 1.0)); Curve diagonal(data); diagonal.setColor("red"); diagonal.setLineStyle("dashed"); graph.add(diagonal); // Draw the Kendall curve graph.add(Curve(firstEmpiricalStatistics, secondEmpiricalStatistics)); return graph; } /* Compute the Kendall plot empirical statistic associated with a bidimensional sample */ Sample VisualTest::ComputeKendallPlotEmpiricalStatistics(const Sample & sample) { const UnsignedInteger size = sample.getSize(); Sample result(size, 1); for (UnsignedInteger i = 0; i < size; ++i) { const Point pointI(sample[i]); const Scalar uI = pointI[0]; const Scalar vI = pointI[1]; UnsignedInteger cardinal = 0; for (UnsignedInteger j = 0; j < i; ++j) { const Point pointJ(sample[j]); cardinal += (pointJ[0] <= uI) && (pointJ[1] <= vI); } for (UnsignedInteger j = i + 1; j < size; ++j) { const Point pointJ(sample[j]); cardinal += (pointJ[0] <= uI) && (pointJ[1] <= vI); } result[i] = Point(1, cardinal / static_cast(size - 1)); } return result.sort(0); } /* Compute the Kendall plot theoretical statistic associated with a bidimensional copula */ Sample VisualTest::ComputeKendallPlotTheoreticalStatistics(const Distribution & copula, const UnsignedInteger size) { if (!copula.isCopula()) throw InvalidArgumentException(HERE) << "Error: the given distribution=" << copula << " is not a copula."; const UnsignedInteger maximumIteration = ResourceMap::GetAsUnsignedInteger( "VisualTest-KendallPlot-MonteCarloSize" ); Sample result(size, 1); for (UnsignedInteger i = 0; i < maximumIteration; ++i) { const Sample empiricalStatistics(ComputeKendallPlotEmpiricalStatistics(copula.getSample(size))); for (UnsignedInteger j = 0; j < size; ++j) result[j] = (result[j] * i + empiricalStatistics[j]) / (i + 1); } return result; } END_NAMESPACE_OPENTURNS openturns-1.9/lib/src/Uncertainty/StatTests/openturns/000077500000000000000000000000001307543307100232605ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/StatTests/openturns/DickeyFullerTest.hxx000066400000000000000000000126571307543307100272460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_DICKEYFULLERTEST_HXX #define OPENTURNS_DICKEYFULLERTEST_HXX #include "openturns/PersistentObject.hxx" #include "openturns/TestResult.hxx" #include "openturns/Indices.hxx" #include "openturns/TimeSeries.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class DickeyFullerTest * */ class OT_API DickeyFullerTest : public PersistentObject { CLASSNAME; public: /** Default constructor */ DickeyFullerTest(); /** Parameters constructor */ explicit DickeyFullerTest(const TimeSeries & series, const Bool verbose = true); /** Virtual constructor */ virtual DickeyFullerTest * clone() const; /** Test H0: there is a unit root in a drift and linear trend model */ TestResult testUnitRootInDriftAndLinearTrendModel(const Scalar level = 0.95); /** Test H0: there is a unit root in a drift model */ TestResult testUnitRootInDriftModel(const Scalar level = 0.95); /** Test H0: there is a unit root in an AR1 model */ TestResult testUnitRootInAR1Model(const Scalar level = 0.95); /** Strategy of tests */ TestResult runStrategy(const Scalar level = 0.95); /** Test H0: there is no linear trend in a drift and linear trend model knowing that there is a unit root */ TestResult testUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(const Scalar level = 0.95); /** Test H0: there is no linear trend in a drift and linear trend model knowing that there is no unit root */ TestResult testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel(const Scalar level = 0.95); /** Test H0: there is no drift in a drift model knowing that there is a unit root */ TestResult testUnitRootAndNoDriftInDriftModel(const Scalar level = 0.95); /** Test the nullity of drift coefficient with assumption that there is no unit root */ TestResult testNoUnitRootAndNoDriftInDriftModel(const Scalar level = 0.95); /** Verbosity accessor */ void setVerbose(const Bool verbose); Bool getVerbose() const; /** Method save() stores the object through the StorageManager */ void save(Advocate & adv) const; /** Method load() reloads the object from the StorageManager */ void load(Advocate & adv); protected: /** Test of general model ==> run a part of strategy */ TestResult runTrendModelTest(const Scalar level = 0.95); /** Test of drift model ==> run a part of strategy */ TestResult runDriftModelStrategyTest(const Scalar level = 0.95); /** Test of random walk model ==> run a part of strategy */ TestResult runRandomWalkModelStrategyTest(const Scalar level = 0.95); /** Estimate the coefficients of a model with drift and linear trend */ void estimateDriftAndLinearTrendModel(); /** Estimate the coefficients of a model with drift */ void estimateDriftModel(); /** Estimate the coefficients of an AR1 model */ void estimateAR1Model(); private: /** Time series on which computation is done */ TimeSeries timeSeries_; /** Size of underlying part */ UnsignedInteger T_; /** Boolean verbose */ Bool verbose_; /** Last model evaluated. Values are 1 (AR) to 3 (trend model) */ UnsignedInteger lastModel_; /** rho value and the variance associated to the estimator */ Scalar rho_; Scalar sigmaRho_; /** drift value associated to the estimator */ Scalar drift_; Scalar sigmaDrift_; /** trend value associated to the estimator */ Scalar trend_; Scalar sigmaTrend_; /** Boolean - Are the characteristic for model without drift computed? */ Bool isComputedNoConstantCharacteristics_; /** Sum of 1/T * y_{t}*y_{t-1}, t=1,,,N */ Scalar sum_yt_yt_minus_one_; /** Sum of 1/T * y_{t-1}*y_{t-1}, t=1,,,N */ Scalar sum_squared_yt_minus_one_; /** Perform the computation of the previous quantities */ void computeNoConstantCharacteristics(); /** Boolean - Are the characteristic for model with drift computed? */ Bool isComputedDriftCharacteristics_; /** Sum of 1/T * y_{t-1}, t=1,,,N */ Scalar sum_yt_minus_one_; /** Sum of 1/T * y_{t}, t=1,,,N */ Scalar sum_yt_; /** Perform the computation of the previous quantities */ void computeDriftCharacteristics(); /** Boolean - Are the characteristic for model with trend computed? */ Bool isComputedTrendCharacteristics_; /** Sum of 1/T * y_{t-1}* t, t=1,,,N */ Scalar sum_t_yt_minus_one_; /** Sum of 1/T * y_{t-1}* t, t=1,,,N */ Scalar sum_t_yt_; /** Sum of 1/T * t_i, t=1,,,N */ Scalar sum_ti_; /** Sum of 1/T * t_i * t_i, t=1,,,N */ Scalar sum_ti_ti_; /** Perform the computation of the previous quantity */ void computeTrendCharacteristics() ; }; /* class DickeyFullerTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_DICKEYFULLERTEST_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/FittingTest.hxx000066400000000000000000000122151307543307100262560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_FITTINGTEST_HXX #define OPENTURNS_FITTINGTEST_HXX #include "openturns/OTprivate.hxx" #include "openturns/TestResult.hxx" #include "openturns/Collection.hxx" #include "openturns/Sample.hxx" #include "openturns/Distribution.hxx" #include "openturns/DistributionFactory.hxx" #include "openturns/Pointer.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class FittingTest * */ class OT_API FittingTest { public: typedef Collection DistributionFactoryCollection; typedef Collection DistributionCollection; /** Best model for a given numerical sample by BIC */ static Distribution BestModelBIC(const Sample & sample, const DistributionFactoryCollection & factoryCollection); /** Best model for a given numerical sample by BIC */ static Distribution BestModelBIC(const Sample & sample, const DistributionCollection & distributionCollection); /** Best model for a given numerical sample by Kolmogorov */ static Distribution BestModelKolmogorov(const Sample & sample, const DistributionFactoryCollection & factoryCollection, TestResult & bestResult); /** Best model for a given numerical sample by Kolmogorov */ static Distribution BestModelKolmogorov(const Sample & sample, const DistributionCollection & distributionCollection, TestResult & bestResult); /** Best model for a given numerical sample by ChiSquared */ static Distribution BestModelChiSquared(const Sample & sample, const DistributionFactoryCollection & factoryCollection, TestResult & bestResult); /** Best model for a given numerical sample by ChiSquared */ static Distribution BestModelChiSquared(const Sample & sample, const DistributionCollection & distributionCollection, TestResult & bestResult); /** Bayesian Information Criterion computation */ static Scalar BIC(const Sample & sample, const Distribution & distribution, const UnsignedInteger estimatedParameters = 0); /** Bayesian Information Criterion computation */ static Scalar BIC(const Sample & sample, const DistributionFactory & factory); /** Kolmogorov fitting test for continuous distributions */ static TestResult Kolmogorov(const Sample & sample, const Distribution & distribution, const Scalar level = 0.95, const UnsignedInteger estimatedParameters = 0); /** Kolmogorov fitting test for continuous distributions */ static TestResult Kolmogorov(const Sample & sample, const DistributionFactory & factory, const Scalar level = 0.95); /** Two-sample Kolmogorov–Smirnov test */ static TestResult TwoSamplesKolmogorov (const Sample & sample1, const Sample & sample2, const Scalar level = 0.95); /** ChiSquared fitting test for discrete distributions */ static TestResult ChiSquared(const Sample & sample, const Distribution & distribution, const Scalar level = 0.95, const UnsignedInteger estimatedParameters = 0); /** ChiSquared fitting test for discrete distributions */ static TestResult ChiSquared(const Sample & sample, const DistributionFactory & factory, const Scalar level = 0.95); protected: /** Generic invocation of a R script for testing a distribution against a sample */ static TestResult RunRTest(const Sample & sample, const Distribution & distribution, const Scalar level, const UnsignedInteger estimatedParameters, const String & testName); private: FittingTest(); }; /* class FittingTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_FITTINGTEST_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/HypothesisTest.hxx000066400000000000000000000155041307543307100270150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_HYPOTHESISTEST_HXX #define OPENTURNS_HYPOTHESISTEST_HXX #include "openturns/OTprivate.hxx" #include "openturns/TestResult.hxx" #include "openturns/Indices.hxx" #include "openturns/Sample.hxx" #include "openturns/LinearModel.hxx" #include "openturns/Distribution.hxx" #include "openturns/DistributionFactoryImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class HypothesisTest * */ class OT_API HypothesisTest { public: typedef Collection TestResultCollection; /** Independance ChiSquared test between 2 scalar samples for discrete distributions */ static TestResult ChiSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Independence Pearson test between 2 samples which form a gaussian vector: test the linear relation */ static TestResult Pearson(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Smirnov test if two scalar samples (of sizes not necessarily equal) follow the same distribution (only for continuous distributions) */ static TestResult Smirnov(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Spearman test between 2 scalar samples : test the monotonous relation */ static TestResult Spearman(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numeriacl sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample, for i in the selection. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. */ static TestResultCollection PartialPearson(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level = 0.95); /** Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialRegression performs the Regression test simultaneously on all firstSample[i] and secondSample, for i in the selection. The Regression test tests ifthe regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. */ static TestResultCollection PartialRegression(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level = 0.95); /** Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on firstSample[i] and secondSample, for i in the selection. */ static TestResultCollection PartialSpearman(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level = 0.95); /** Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullPearson performs the Independence Pearson test simultaneously on all firstSample[i] and secondSample. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. */ static TestResultCollection FullPearson(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullRegression performs the Regression test simultaneously on all firstSample[i] and secondSample. The Regression test tests ifthe regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. */ static TestResultCollection FullRegression(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); /** Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on all firstSample[i] and secondSample. */ static TestResultCollection FullSpearman(const Sample & firstSample, const Sample & secondSample, const Scalar level = 0.95); protected: /** Generic invocation of a R script for executing a partial test between two samples */ static TestResultCollection RunTwoSamplesASelectionRTest(const Sample & firstSample, const Sample & secondSample, const Indices & selection, const Scalar level, const String & testName); /** Generic invocation of a R script for executing a test between two 1D samples */ static TestResult RunTwoSamplesRTest(const Sample & firstSample, const Sample & secondSample, const Scalar level, const String & testName); HypothesisTest(); }; /* class HypothesisTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_HYPOTHESISTEST_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/LinearModelTest.hxx000066400000000000000000000131731307543307100270510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_LINEARMODELTEST_HXX #define OPENTURNS_LINEARMODELTEST_HXX #include "openturns/OTprivate.hxx" #include "openturns/TestResult.hxx" #include "openturns/Sample.hxx" #include "openturns/LinearModel.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class LinearModelTest * */ class OT_API LinearModelTest { public: /** */ static TestResult LinearModelAdjustedRSquared(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelAdjustedRSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelFisher(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelFisher(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelResidualMean(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelResidualMean(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelRSquared(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelRSquared(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelHarrisonMcCabe(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" ), const Scalar breakPoint = ResourceMap::GetAsScalar( "LinearModelTest-DefaultHarrisonMcCabeBreakpoint" ), const Scalar simulationSize = ResourceMap::GetAsUnsignedInteger( "LinearModelTest-DefaultHarrisonMcCabeSimulationSize" )); /** */ static TestResult LinearModelHarrisonMcCabe(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" ), const Scalar breakPoint = ResourceMap::GetAsScalar( "LinearModelTest-DefaultHarrisonMcCabeBreakpoint" ), const Scalar simulationSize = ResourceMap::GetAsUnsignedInteger( "LinearModelTest-DefaultHarrisonMcCabeSimulationSize" )); /** */ static TestResult LinearModelBreuschPagan(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelBreuschPagan(const Sample & firstSample, const Sample & secondSample, const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelDurbinWatson(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const String hypothesis = ResourceMap::Get( "LinearModelTest-DefaultDurbinWatsonHypothesis" ), const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); /** */ static TestResult LinearModelDurbinWatson(const Sample & firstSample, const Sample & secondSample, const String hypothesis = ResourceMap::Get( "LinearModelTest-DefaultDurbinWatsonHypothesis" ), const Scalar level = ResourceMap::GetAsScalar( "LinearModelTest-DefaultLevel" )); protected: /** Generic invocation of a R script for testing a distribution against a sample */ static TestResult RunTwoSamplesALinearModelRTest(const Sample & firstSample, const Sample & secondSample, const LinearModel & linearModel, const Scalar level, const String & testName); LinearModelTest(); }; /* class LinearModelTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_LINEARMODELTEST_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/NormalityTest.hxx000066400000000000000000000031621307543307100266310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_NORMALITYTEST_HXX #define OPENTURNS_NORMALITYTEST_HXX #include "openturns/OTprivate.hxx" #include "openturns/TestResult.hxx" #include "openturns/Sample.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class NormalityTest * */ class OT_API NormalityTest { public: /** Anderson Darling normality test for normal distributions. */ static TestResult AndersonDarlingNormal(const Sample & sample, const Scalar level = 0.95); /** Cramer Von Mises normality test for normal distributions. */ static TestResult CramerVonMisesNormal(const Sample & sample, const Scalar level = 0.95); private: NormalityTest(); }; /* class NormalityTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_NORMALITYTEST_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/OTStatTests.hxx000066400000000000000000000022731307543307100262160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir StatTests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTSTATTESTS_HXX #define OPENTURNS_OTSTATTESTS_HXX #include "openturns/FittingTest.hxx" #include "openturns/HypothesisTest.hxx" #include "openturns/LinearModelTest.hxx" #include "openturns/NormalityTest.hxx" #include "openturns/VisualTest.hxx" #include "openturns/DickeyFullerTest.hxx" #endif /* OPENTURNS_OTSTATTESTS_HXX */ openturns-1.9/lib/src/Uncertainty/StatTests/openturns/VisualTest.hxx000066400000000000000000000111361307543307100261160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief StatTest implements statistical tests * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_VISUALTEST_HXX #define OPENTURNS_VISUALTEST_HXX #include "openturns/OTprivate.hxx" #include "openturns/Sample.hxx" #include "openturns/LinearModel.hxx" #include "openturns/Distribution.hxx" #include "openturns/Graph.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class Test * */ class OT_API VisualTest { public: /** Draw the empirical CDF of the Sample when its dimension is 1 */ static Graph DrawEmpiricalCDF(const Sample & sample, const Scalar xMin, const Scalar xMax); /** Draw the Histogram of the Sample when its dimension is 1 */ static Graph DrawHistogram(const Sample & sample, const UnsignedInteger BarNumber); /** Draw the Histogram of the Sample when its dimension is 1, using the Normal empirical rule */ static Graph DrawHistogram(const Sample & sample); /** Draw the QQplot of two Samples when its dimension is 1 */ static Graph DrawQQplot(const Sample & sample1, const Sample & sample2, const UnsignedInteger pointNumber = ResourceMap::GetAsUnsignedInteger("Distribution-DefaultPointNumber")); /** Draw the QQplot of one Sample and one Distribution when its dimension is 1 */ static Graph DrawQQplot(const Sample & sample, const Distribution & dist); /** Draw the Henry curve for one Sample when its dimension is 1 */ static Graph DrawHenryLine(const Sample & sample); /** Draw the Henry line for a sample and a given normal distribution when its dimension is 1 */ static Graph DrawHenryLine(const Sample & sample, const Distribution & normal); /** Draw the clouds of one Sample and one model when its dimension is 2 */ static Graph DrawClouds(const Sample & sample1, const Distribution & dist); /** Draw the clouds of two Samples when its dimension is 2 */ static Graph DrawClouds(const Sample & sample1, const Sample & sample2); /** Draw the visual test for the LinearModel when its dimension is 1 */ static Graph DrawLinearModel(const Sample & sample1, const Sample & sample2, const LinearModel & linearModel); /** Draw the visual test for the LinearModel residuals when its dimension is 1 */ static Graph DrawLinearModelResidual(const Sample & sample1, const Sample & sample2, const LinearModel & linearModel); /** Draw the CobWeb visual test */ static Graph DrawCobWeb(const Sample & inputSample, const Sample & outputSample, const Scalar minValue, const Scalar maxValue, const String & color, const Bool quantileScale = true); /** Draw the Kendall plot to assess a copula for a bidimensional sample */ static Graph DrawKendallPlot(const Sample & data, const Distribution & copula); /** Draw the Kendall plot to assess if two bidimensional samples share the same copula */ static Graph DrawKendallPlot(const Sample & firstSample, const Sample & secondSample); private: /** Compute the Kendall plot empirical statistic associated with a bidimensional sample */ static Sample ComputeKendallPlotEmpiricalStatistics(const Sample & sample); /** Compute the Kendall plot theoretical statistic associated with a bidimensional copula */ static Sample ComputeKendallPlotTheoreticalStatistics(const Distribution & copula, const UnsignedInteger size); VisualTest(); }; /* class VisualTest */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_VISUALTEST_HXX */ openturns-1.9/lib/src/Uncertainty/openturns/000077500000000000000000000000001307543307100213225ustar00rootroot00000000000000openturns-1.9/lib/src/Uncertainty/openturns/OTUncertainty.hxx000066400000000000000000000022621307543307100246250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The external header file of OpenTURNS for subdir Uncertainty * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_OTUNCERTAINTY_HXX #define OPENTURNS_OTUNCERTAINTY_HXX #include "openturns/OTAlgorithm.hxx" #include "openturns/OTBayesian.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTStatTests.hxx" #include "openturns/OTProcess.hxx" #endif /* OPENTURNS_OTUNCERTAINTY_HXX */ openturns-1.9/lib/src/libOT-gdb.py000066400000000000000000000060611307543307100171000ustar00rootroot00000000000000 import gdb import re import sys if sys.version > '3': long = int objfile = gdb.current_objfile() or gdb.objfiles()[0] int_ptr = gdb.lookup_type('int').pointer() ot_pretty_printers = [] def AddToPrettyPrinter(rx): def class_wrapper(cls): ot_pretty_printers.append( (re.compile(rx), cls) ) return cls return class_wrapper @AddToPrettyPrinter(r'^OT::PersistentObject$') class PersistentObjectPrinter(object): def __init__(self, val): self.val = val def to_string(self): name = self.val['p_name_']['ptr_']['ptr_'] if name == gdb.Value(0): return "[unnamed]" else: return "[name=%s]" % (str(name.dereference())) @AddToPrettyPrinter(r'^OT::Pointer<.*>$') class PointerPrinter(object): def __init__(self, val): self.val = val def to_string(self): global int_ptr pointee = self.val['ptr_']['ptr_'] if long(pointee) == long(0): return "NULL" else: atomicVal = self.val['ptr_']['count_']['p_impl_']['use_count_']['val_'] # This atomicVal points either to an int or a tbb::atomic # The implementation of tbb::atomic depends on tbb's version, thus it is easier # to dereference it. atomicVal = atomicVal.address.cast(int_ptr).dereference() return "([counter=%s] %s) 0x%x = %s" % (str(atomicVal), str(pointee.type), long(pointee), str(pointee.dereference())) @AddToPrettyPrinter(r'^OT::TypedInterfaceObject<.*>$') class TypedInterfaceObjectPrinter(object): def __init__(self, val): self.val = val self.template_name = val.type.template_argument(0) def to_string(self): return "{ p_implementation_ -> [ %s ] }" % (str(self.val['p_implementation_'])) @AddToPrettyPrinter(r'^OT::(PersistentCollection<.*>|.*PersistentCollection)$') class PersistentCollectionPrinter(object): def __init__(self, val): self.val = val def display_hint(self): return 'array' def to_string(self): # Dereference PersistentObject name = self.val['p_name_']['ptr_']['ptr_'] if long(name) == long(0): decoratedName = "[unnamed]" else: decoratedName = "[name=%s]" % (str(name.dereference())) # Dereference Collection return "%s %s" % (decoratedName, self.val['coll__']) @AddToPrettyPrinter(r'^OT::(Collection<.*>|.*Collection)$') class CollectionPrinter(object): def __init__(self, val): self.val = val def display_hint(self): return 'array' def to_string(self): return str(self.val['coll__']) def lookup_function(val): type = val.type if type.code == gdb.TYPE_CODE_REF: type = type.target() type = type.unqualified().strip_typedefs() typename = type.tag if not typename or not typename.startswith('OT::'): return None for regex, pretty_printer in ot_pretty_printers: if regex.search(typename): return pretty_printer(val) return None objfile.pretty_printers.append(lookup_function) openturns-1.9/lib/src/main.cxx000066400000000000000000000023771307543307100164410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The main program. The entry point of the project... * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" extern "C" int openturns_library_ok(); /* * @fn int main (int argc, char *argv[]) * @brief The main program. The entry point of the project... * @return The return code (null if correct) * @param argc The number or arguments in argv * @param argv The array of arguments from the calling program */ int main(int argc, char *argv[]) { return openturns_library_ok() ? 0 : 1 ; } openturns-1.9/lib/src/openturns-config-build.in000066400000000000000000000157241307543307100217160ustar00rootroot00000000000000#! /bin/sh # -*- Shell-script -*- # # openturns-config-build.in / openturns-config-build / openturns-config # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # Permission to copy, use, modify, sell and distribute this software # is granted provided this copyright notice appears in all copies. # This software is provided "as is" without express or implied # warranty, and with no claim as to its suitability for any purpose. # # # # This script provides external information on how and where OpenTURNS is installed # # Set this variable to yes if the script is located in its target directory installed=yes # The installation process renames the script (by removing an extra -build to its name) case $0 in *-build) installed=no ;; esac abs_top_srcdir=@CMAKE_SOURCE_DIR@ top_srcdir=@CMAKE_SOURCE_DIR@ srcdir=@CMAKE_CURRENT_SOURCE_DIR@ top_builddir=@CMAKE_BINARY_DIR@ version=@PACKAGE_VERSION@ bugreport=@PACKAGE_BUGREPORT@ package=@CPACK_PACKAGE_NAME@ #swig=@SWIG@ R=@R_EXECUTABLE@ win32=@WIN32@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ bindir=@INSTALL_PATH@/bin sbindir=@INSTALL_PATH@/bin libdir=@INSTALL_PATH@/lib@LIB_SUFFIX@ libexecdir=@INSTALL_PATH@/lib@LIB_SUFFIX@ sysconfdir=@SYSCONFIG_PATH@ datarootdir=@DATA_PATH@/$package mandir=@DATA_PATH@ localedir=@DATA_PATH@ infodir=@DATA_PATH@ datadir=@DATA_PATH@ m4dir=@DATA_PATH@/m4 includedir=@INCLUDE_PATH@ localstatedir=@DATA_PATH@ sharedstatedir=@DATA_PATH@ pkgincludedir=@INCLUDE_PATH@ pkglibdir=@LIBRARY_PATH@ pkgswigdir=$pkgincludedir/swig if test $installed = yes then cppflags="-I$pkgincludedir @EXTRA_CPPFLAGS@" if test "$win32" = 1 then ldflags="-L$bindir @EXTRA_LDFLAGS@" else ldflags="-L$pkglibdir @EXTRA_LDFLAGS@" fi libs="-lOT @EXTRA_LIBS@" swigflags="-I$pkgswigdir @EXTRA_SWIGFLAGS@" else cppflags=`echo '@OPENTURNS_CPPFLAGS@' | sed -e 's/\$(\([^)]*\))/${\1}/g'` ldflags=`echo '@OPENTURNS_LDFLAGS@' | sed -e 's/\$(\([^)]*\))/${\1}/g'` libs=`echo '@OPENTURNS_LIBS@' | sed -e 's/\$(\([^)]*\))/${\1}/g'` fi CC="@CMAKE_C_COMPILER@" CXX="@CMAKE_CXX_COMPILER@" F77="@CMAKE_Fortran_COMPILER@" ######################################## print_usage() { cat <. * */ #ifndef OPENTURNS_OT_HXX #define OPENTURNS_OT_HXX /* * This include defines the configuration flags. */ #include "openturns/OTconfig.hxx" /* * This include defines the debug level in all source code. */ #include "openturns/OTdebug.h" /* * The OTtypes.hxx header file contains all type declarations used by * the OpenTURNS platform. */ #include "openturns/OTtypes.hxx" /* * The OTmemory.hxx header file declares some debugging memory functions */ #include "openturns/OTmemory.hxx" /** * Here is the list of all classes belonging to the external API of OpenTURNS * @todo List the classes belonging to the external API of OpenTURNS */ #include "openturns/OTBase.hxx" #include "openturns/OTUncertainty.hxx" #endif /* OPENTURNS_OT_HXX */ openturns-1.9/lib/src/openturns_library_ok.c000066400000000000000000000021341307543307100213760ustar00rootroot00000000000000// -*- C -*- /** * @brief This file contains a single C function to allow m4 easy detection * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTdebug.h" /* * @fn int openturns_library_ok() * @brief A function that return 1 on success * @return The return code */ int OT_API openturns_library_ok(void); int OT_API openturns_library_ok(void) { return 1; } openturns-1.9/lib/test/000077500000000000000000000000001307543307100151505ustar00rootroot00000000000000openturns-1.9/lib/test/CMakeLists.txt000066400000000000000000000533071307543307100177200ustar00rootroot00000000000000# -*- cmake -*- # # CMakeLists.txt # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # set (NEW_PATH "${INSTALL_DESTDIR}${EXAMPLE_PATH}${PATH_SEP}$ENV{PATH}") set (ADAPT_CHECK_TESTS_EXPONENT) set (REPLACE_EOL " | cat ") if (MINGW) # replace dos eols set (REPLACE_EOL " | tr -d '\\\\015' ") # By default, Mingw-g++ puts 3 digits to real exponent whereas g++ puts 2. set (ADAPT_CHECK_TESTS_EXPONENT "PRINTF_EXPONENT_DIGITS=2") if (CMAKE_SIZEOF_VOID_P EQUAL 4) add_library (CRT_fp8 STATIC CRT_fp8.c) endif () endif () set (CHECK_ENVIRONMENT "OPENTURNS_CONFIG_PATH=${CMAKE_BINARY_DIR}/lib/etc" ${ADAPT_CHECK_TESTS_EXPONENT} ) # This macro compiles on the fly and run the corresponding pre-installation test # It can have two optional arguments PRE and POST followed by some shell command to be run # before or after the test if needed # PRE and POST options cn be repeated many times: the arguments will be run one after the other # in the order of appearence. If one fails, the whole command fails. set (CHECK_TO_BE_RUN) macro (ot_check_test TESTNAME) set (TESTNAME_TGT t_${TESTNAME}) set (TESTNAME_SRC ${TESTNAME_TGT}.cxx) set (TESTNAME_SRCS ${TESTNAME_SRC}) add_executable (${TESTNAME_TGT} EXCLUDE_FROM_ALL ${TESTNAME_SRCS}) add_dependencies(tests ${TESTNAME_TGT}) target_link_libraries (${TESTNAME_TGT} OT) if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4) target_link_libraries (${TESTNAME_TGT} CRT_fp8) endif () set_target_properties (${TESTNAME_TGT} PROPERTIES INSTALL_RPATH "${CMAKE_BINARY_DIR}/lib/src;${CMAKE_INSTALL_RPATH}") set (TESTNAME_LOC ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}${CMAKE_EXECUTABLE_SUFFIX}) set (_CMD) set (_PRE) set (_POST) set (_PARAMS) set (_IGNOREOUT OFF) foreach (_ARG ${ARGN}) string (TOUPPER ${_ARG} ARG) if (${ARG} MATCHES PRE) set (_CMD PRE) elseif (${ARG} MATCHES POST) set (_CMD POST) elseif (${ARG} MATCHES PARAMS) set (_CMD PARAMS) elseif (${ARG} MATCHES IGNOREOUT) set (_IGNOREOUT ON) else (${ARG} MATCHES PRE) if (${_CMD} MATCHES PRE) set (_PRE "${_PRE} ${_ARG} && ") elseif (${_CMD} MATCHES POST) set (_POST "${_POST} && ${_ARG}") elseif (${_CMD} MATCHES PARAMS) set (_PARAMS "${_PARAMS} ${_ARG}") endif (${_CMD} MATCHES PRE) set (_CMD) endif (${ARG} MATCHES PRE) endforeach (_ARG) if (_IGNOREOUT) set (COMMAND "(${TESTNAME_LOC} ${_PARAMS} > /dev/null)") else (_IGNOREOUT) set (TESTNAME_OUT ${TESTNAME_TGT}.expout) set (OUTFILE_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_OUT}) set (COMMAND "(${TESTNAME_LOC} ${_PARAMS} ${REPLACE_EOL} > ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out) && diff -u ${OUTFILE_LOC} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out") endif (_IGNOREOUT) if (_PRE OR _POST) set (COMMAND "${_PRE}${COMMAND}${_POST}") endif (_PRE OR _POST) add_test (cppcheck_${TESTNAME} "sh" "-c" "${COMMAND}") set_tests_properties (cppcheck_${TESTNAME} PROPERTIES ENVIRONMENT "${CHECK_ENVIRONMENT}") list (APPEND CHECK_TO_BE_RUN ${TESTNAME_TGT}) install (FILES ${TESTNAME_SRC} DESTINATION ${EXAMPLE_PATH} ) if (USE_COTIRE) option (COTIRE_TESTS "cotire tests" ON) if (COTIRE_TESTS) set_target_properties (${TESTNAME_TGT} PROPERTIES COTIRE_ENABLE_PRECOMPILED_HEADER FALSE) cotire (${TESTNAME_TGT}) endif () endif () endmacro (ot_check_test) include_directories (${INTERNAL_INCLUDE_DIRS}) ## Pre-installation tests # Common ot_check_test (Object_std) ot_check_test (OStream_std) ot_check_test (PersistentObject_std) ot_check_test (Pointer_std) ot_check_test (Pointer_cast) ot_check_test (Exception_std) ot_check_test (Log_std) ot_check_test (IdFactory_std IGNOREOUT) ot_check_test (ComparisonOperator_std) if (LIBXML2_FOUND) ot_check_test (Study_saveload ) endif () ot_check_test (ResourceMap_std IGNOREOUT) ot_check_test (Catalog_std IGNOREOUT) ot_check_test (AtomicFunctions_std IGNOREOUT) # Type ot_check_test (Collection_std) ot_check_test (Indices_std) ot_check_test (Description_std) ot_check_test (Point_std) ot_check_test (Point_description) ot_check_test (Matrix_std) ot_check_test (IdentityMatrix_std) ot_check_test (Tensor_std) ot_check_test (ComplexTensor_std) ot_check_test (SymmetricTensor_std) ot_check_test (SquareMatrix_std) ot_check_test (TriangularMatrix_std) ot_check_test (SymmetricMatrix_std) ot_check_test (Matrix_solve) ot_check_test (Matrix_decomposition) ot_check_test (SquareMatrix_lapack) ot_check_test (SymmetricMatrix_lapack) ot_check_test (Cache_std) ot_check_test (ComplexMatrix_std) ot_check_test (SquareComplexMatrix_std) ot_check_test (HermitianMatrix_std) ot_check_test (TriangularComplexMatrix_std) # Func ot_check_test (LinearEvaluation_std) ot_check_test (ConstantGradient_std) ot_check_test (AggregatedEvaluation_std) ot_check_test (PiecewiseLinearEvaluation_std) ot_check_test (PiecewiseHermiteEvaluation_std) ot_check_test (P1LagrangeEvaluation_std) if (OPENTURNS_HAVE_MUPARSER) ot_check_test (SymbolicEvaluation_std) ot_check_test (SymbolicGradient_std) ot_check_test (SymbolicHessian_std) endif () ot_check_test (LinearFunction_std) ot_check_test (LinearCombinationEvaluation_std) ot_check_test (LinearCombinationGradient_std) ot_check_test (LinearCombinationHessian_std) ot_check_test (QuadraticEvaluation_std) ot_check_test (LinearGradient_std) ot_check_test (ConstantHessian_std) ot_check_test (MethodBoundEvaluation_std) ot_check_test (SymbolicFunction_std) ot_check_test (IndicatorFunction_std) ot_check_test (AggregatedFunction_std) ot_check_test (DualLinearCombinationFunction_std) ot_check_test (LinearCombinationFunction_std) ot_check_test (Function_operations) ot_check_test (ParametricFunction_std) ot_check_test (DatabaseFunction_std) ot_check_test (Function_history) if (R_base_FOUND) ot_check_test (Function_draw) endif () ot_check_test (MonomialFunction_std) ot_check_test (MonomialFunctionFactory_std) ot_check_test (TensorizedUniVariateFunctionFactory_std) ot_check_test (UniVariatePolynomial_std) ot_check_test (Basis_std) ot_check_test (BasisSequence_std) ot_check_test (LARS_std) ot_check_test (FieldFunction_std) ot_check_test (ValueFunction_std) ot_check_test (VertexValueFunction_std) ot_check_test (BoxCoxEvaluation_std) ot_check_test (BoxCoxTransform_std) ot_check_test (InverseBoxCoxEvaluation_std) ot_check_test (InverseBoxCoxTransform_std) ot_check_test (TrendEvaluation_std) ot_check_test (TrendTransform_std) ot_check_test (InverseTrendEvaluation_std) ot_check_test (InverseTrendTransform_std) ot_check_test (ExpertMixture_std) ot_check_test (BasisFactory_std) # Optim ot_check_test (AbdoRackwitz_std) ot_check_test (Cobyla_std) ot_check_test (SQP_std) ot_check_test (TNC_std) ot_check_test (NearestPointChecker_std) if (NLOPT_FOUND) ot_check_test (NLopt_std) endif () ot_check_test (MultiStart_std) # Solver ot_check_test (Bisection_std) ot_check_test (Brent_std) ot_check_test (Secant_std) ot_check_test (RungeKutta_std) # Stat ot_check_test (Sample_std) ot_check_test (Sample_split) ot_check_test (Sample_large) ot_check_test (Sample_computation) ot_check_test (Sample_operators) ot_check_test (HistoryStrategy_std) ot_check_test (CovarianceMatrixLapack_std) ot_check_test (CorrelationMatrix_std) ot_check_test (TestResult_std) if (R_rot_FOUND) ot_check_test (LinearModelFactory_std) ot_check_test (LinearModel_std) endif () ot_check_test (Field_draw) ot_check_test (ProcessSample_std) ot_check_test (RandomGenerator_std) ot_check_test (SobolSequence_std) ot_check_test (FaureSequence_std) ot_check_test (HaltonSequence_std) ot_check_test (HaselgroveSequence_std) ot_check_test (ReverseHaltonSequence_std) ot_check_test (CorrelationAnalysis_std) ot_check_test (TimeSeries_std) ot_check_test (ExponentialCauchy_std) ot_check_test (FilteringWindows_std) ot_check_test (WelchFactory_std) ot_check_test (ExponentialModel_std) ot_check_test (CovarianceModel_std) ot_check_test (DiracCovarianceModel_std) ot_check_test (ExponentiallyDampedCosineModel_std) ot_check_test (CauchyModel_std) ot_check_test (SecondOrderModel_std) ot_check_test (UserDefinedSpectralModel_std) ot_check_test (UserDefinedCovarianceModel_std) ot_check_test (UserDefinedStationaryCovarianceModel_std) ot_check_test (StationaryCovarianceModelFactory_std) ot_check_test (NonStationaryCovarianceModelFactory_std) if (HMAT_FOUND) ot_check_test (HMatrix_LDLt) ot_check_test (HMatrix_LLt) ot_check_test (HMatrix_LU) ot_check_test (HMatrix_block_LLt) ot_check_test (HMatrix_block_LU) ot_check_test (DiracCovarianceModel_hmat) endif () # Diff ot_check_test (FiniteDifferenceStep_std) # Geom ot_check_test (Domain_std) ot_check_test (Interval_std) ot_check_test (IntervalMesher_std) ot_check_test (LevelSet_std) ot_check_test (LevelSetMesher_std) ot_check_test (Mesh_std) if (R_base_FOUND) ot_check_test (Mesh_draw) endif () ot_check_test (RegularGrid_std) # Graph if (R_base_FOUND) ot_check_test (BarPlot_std) ot_check_test (Cloud_std) ot_check_test (Contour_std) ot_check_test (Curve_std) ot_check_test (Drawable_std) ot_check_test (Graph_mix) ot_check_test (Graph_export) ot_check_test (Pairs_std) ot_check_test (Pie_std) ot_check_test (Polygon_std) ot_check_test (PolygonArray_std) ot_check_test (Staircase_std) ot_check_test (Text_std) endif () # Algo ot_check_test (PenalizedLeastSquaresAlgorithm_std) ot_check_test (CorrectedLeaveOneOut_std) ot_check_test (KDTree_std) ot_check_test (KFold_std) ot_check_test (LeastSquaresMetaModelSelectionFactory_std) ot_check_test (KissFFT_std) ot_check_test (GaussKronrod_std) ot_check_test (GaussLegendre_std) ot_check_test (IteratedQuadrature_std) ot_check_test (KarhunenLoeveP1Factory_std) ot_check_test (KarhunenLoeveP1Algorithm_std) ot_check_test (LeastSquaresMethod_std) ot_check_test (LeastSquaresMethod_weighted) ot_check_test (KarhunenLoeveSVDAlgorithm_std) # Analytical ot_check_test (Analytical_std) ot_check_test (AnalyticalResult_std) ot_check_test (FORM_std) ot_check_test (FORM_AbdoRackwitz) ot_check_test (FORM_SQP) ot_check_test (FORM_sensitivity) if (R_base_FOUND) ot_check_test (FORM_draw) endif () ot_check_test (SORM_std) ot_check_test (StrongMaximumTest_std) ot_check_test (StrongMaximumTest_tabulatedValues) ot_check_test (StrongMaximumTest_other) # Distribution ot_check_test (Arcsine_std) ot_check_test (ArcsineFactory_std) ot_check_test (Bernoulli_std) ot_check_test (BernoulliFactory_std) ot_check_test (BernsteinCopulaFactory_std) ot_check_test (Beta_std) ot_check_test (BetaFactory_std) ot_check_test (Binomial_std) ot_check_test (BinomialFactory_std) ot_check_test (Burr_std) ot_check_test (BurrFactory_std) ot_check_test (Chi_std) ot_check_test (ChiFactory_std) ot_check_test (ChiSquare_std) ot_check_test (ChiSquareFactory_std) ot_check_test (ComposedCopula_std) ot_check_test (ComposedDistribution_std) ot_check_test (ComposedDistribution_large) ot_check_test (CompositeDistribution_std) ot_check_test (ConditionalDistribution_std) ot_check_test (CumulativeDistributionNetwork_std) ot_check_test (Dirac_std) ot_check_test (DiracFactory_std) ot_check_test (Dirichlet_std) ot_check_test (DirichletFactory_std) ot_check_test (Epanechnikov_std) ot_check_test (Exponential_std) ot_check_test (ExponentialFactory_std) ot_check_test (FisherSnedecor_std) ot_check_test (FisherSnedecorFactory_std) ot_check_test (Frechet_std) ot_check_test (Gamma_std) ot_check_test (GammaFactory_std) ot_check_test (GeneralizedExtremeValue_std) ot_check_test (GeneralizedPareto_std) ot_check_test (GeneralizedParetoFactory_std) ot_check_test (Geometric_std) ot_check_test (GeometricFactory_std) ot_check_test (Gumbel_std) ot_check_test (GumbelFactory_std) ot_check_test (Histogram_std) ot_check_test (HistogramFactory_std) ot_check_test (InverseChiSquare_std) ot_check_test (InverseGamma_std) ot_check_test (InverseNormal_std) ot_check_test (InverseNormalFactory_std) ot_check_test (InverseWishart_std) ot_check_test (KPermutationsDistribution_std) ot_check_test (KernelMixture_std) ot_check_test (KernelSmoothing_std) ot_check_test (Laplace_std) ot_check_test (LaplaceFactory_std) ot_check_test (Logistic_std) ot_check_test (LogisticFactory_std) ot_check_test (LogNormal_std) ot_check_test (LogNormalFactory_std) ot_check_test (LogUniform_std) ot_check_test (LogUniformFactory_std) ot_check_test (OrderStatisticsMarginalChecker_std) # ot_check_test (MarginalDistribution_std) ot_check_test (MaximumEntropyOrderStatisticsDistribution_std) ot_check_test (MaximumEntropyOrderStatisticsCopula_std) ot_check_test (MaximumLikelihoodFactory_std) ot_check_test (Mixture_std) ot_check_test (Multinomial_std) ot_check_test (MultinomialFactory_std) ot_check_test (NegativeBinomial_std) ot_check_test (NegativeBinomialFactory_std) ot_check_test (NonCentralChiSquare_std) ot_check_test (NonCentralStudent_std) ot_check_test (Normal_std) ot_check_test (NormalFactory_std) ot_check_test (Normal_large) ot_check_test (Normal_wrongarg) ot_check_test (Poisson_std) ot_check_test (PoissonFactory_std) ot_check_test (PosteriorDistribution_std) ot_check_test (ProductDistribution_std) ot_check_test (RandomMixture_std) ot_check_test (RandomMixture_grid3d) ot_check_test (RandomMixture_grid2d) ot_check_test (RandomMixture_grid1d) ot_check_test (SphereUnitNorm_std) ot_check_test (Rayleigh_std) ot_check_test (RayleighFactory_std) ot_check_test (Rice_std) ot_check_test (RiceFactory_std) ot_check_test (SklarCopula_std) ot_check_test (Skellam_std) ot_check_test (SkellamFactory_std) ot_check_test (Student_std) ot_check_test (StudentFactory_std) ot_check_test (Trapezoidal_std) ot_check_test (TrapezoidalFactory_std) ot_check_test (Triangular_std) ot_check_test (TriangularFactory_std) ot_check_test (TruncatedDistribution_std) ot_check_test (TruncatedNormal_std) ot_check_test (TruncatedNormalFactory_std) ot_check_test (Uniform_std) ot_check_test (UniformFactory_std) ot_check_test (UserDefined_std) ot_check_test (UserDefinedFactory_std) ot_check_test (VonMises_std) ot_check_test (Weibull_std) ot_check_test (WeibullFactory_std) ot_check_test (Wishart_std) ot_check_test (ZipfMandelbrot_std) ot_check_test (IndependentCopula_std) ot_check_test (MeixnerDistribution_std) ot_check_test (MeixnerDistributionFactory_std) ot_check_test (MinCopula_std) ot_check_test (NormalCopula_std) ot_check_test (NormalCopulaFactory_std) ot_check_test (FarlieGumbelMorgensternCopula_std) ot_check_test (FarlieGumbelMorgensternCopulaFactory_std) ot_check_test (AliMikhailHaqCopula_std) ot_check_test (AliMikhailHaqCopulaFactory_std) ot_check_test (FrankCopula_std) ot_check_test (FrankCopulaFactory_std) ot_check_test (ClaytonCopula_std) ot_check_test (ClaytonCopulaFactory_std) ot_check_test (GumbelCopula_std) ot_check_test (GumbelCopulaFactory_std) ot_check_test (OrdinalSumCopula_std) ot_check_test (DistFunc_beta) ot_check_test (DistFunc_gamma) ot_check_test (DistFunc_kfactor) ot_check_test (DistFunc_kolmogorov) ot_check_test (DistFunc_noncentralchisquare) ot_check_test (DistFunc_noncentralstudent) ot_check_test (DistFunc_normal) ot_check_test (DistFunc_poisson) ot_check_test (DistFunc_student) # Model ot_check_test (DistributionFactory_std) ot_check_test (Distribution_arithmetic) if (R_base_FOUND) ot_check_test (Distribution_draw) endif () ot_check_test (Event_std) ot_check_test (Event_domain) ot_check_test (RandomVector_constant) ot_check_test (RandomVector_conditional) ot_check_test (RandomVector_distribution) ot_check_test (RandomVector_composite) ot_check_test (StandardEvent_std) # Process ot_check_test (AggregatedProcess_std) ot_check_test (ARMACoefficients_std) ot_check_test (ARMAState_std) ot_check_test (ARMA_std) ot_check_test (CompositeProcess_std ) ot_check_test (FunctionalBasisProcess_std ) ot_check_test (RandomWalk_std) ot_check_test (SpectralGaussianProcess_std) ot_check_test (GaussianProcess_std) ot_check_test (WhiteNoise_std) ot_check_test (WhittleFactory_std) ot_check_test (ConditionedNormalProcess_std) ot_check_test (ARMALikelihoodFactory_std) ot_check_test (KarhunenLoeveQuadratureFactory_std) ot_check_test (KarhunenLoeveQuadratureAlgorithm_std) # Transformation ot_check_test (MarginalTransformationEvaluation_std) ot_check_test (MarginalTransformationGradient_std) ot_check_test (MarginalTransformationHessian_std) ot_check_test (InverseNatafIndependentCopulaEvaluation_std) ot_check_test (InverseNatafIndependentCopulaGradient_std) ot_check_test (InverseNatafIndependentCopulaHessian_std) ot_check_test (NatafIndependentCopulaEvaluation_std) ot_check_test (NatafIndependentCopulaGradient_std) ot_check_test (NatafIndependentCopulaHessian_std) ot_check_test (IsoProbabilisticTransformation_IndependentCopula) ot_check_test (IsoProbabilisticTransformation_EllipticalCopula) ot_check_test (IsoProbabilisticTransformation_EllipticalDistribution) ot_check_test (BoxCoxFactory_std) ot_check_test (BoxCoxFactory_glm) ot_check_test (TrendFactory_std) # Bayesian ot_check_test (CalibrationStrategy_std) ot_check_test (RandomWalkMetropolisHastings_std) ot_check_test (RandomWalkMetropolisHastings_regression) ot_check_test (PosteriorRandomVector_std) # Classification ot_check_test (MixtureClassifier_std) # Experiments ot_check_test (MinMax_computation) ot_check_test (Axial_std) ot_check_test (Box_std) ot_check_test (Composite_std) ot_check_test (Factorial_std) ot_check_test (Combinations_std) ot_check_test (KPermutations_std) ot_check_test (Tuples_std) ot_check_test (BootstrapExperiment_std) ot_check_test (FixedExperiment_std) ot_check_test (SpaceFilling_std) ot_check_test (MonteCarloLHS_std) ot_check_test (SimulatedAnnealingLHS_std) ot_check_test (GaussProductExperiment_std) ot_check_test (ImportanceSamplingExperiment_std) ot_check_test (LHSExperiment_std) ot_check_test (LowDiscrepancyExperiment_std) ot_check_test (MonteCarloExperiment_std) # OrthogonalBasis ot_check_test (LinearEnumerateFunction_std) ot_check_test (HyperbolicAnisotropicEnumerateFunction_std) ot_check_test (OrthogonalUniVariatePolynomial_std) ot_check_test (CharlierFactory_std) ot_check_test (ChebychevFactory_std) ot_check_test (HermiteFactory_std) ot_check_test (HistogramPolynomialFactory_std) ot_check_test (JacobiFactory_std) ot_check_test (KrawtchoukFactory_std) ot_check_test (LaguerreFactory_std) ot_check_test (LegendreFactory_std) ot_check_test (MeixnerFactory_std) ot_check_test (SoizeGhanemFactory_std) ot_check_test (OrthonormalizationAlgorithm_std) ot_check_test (AdaptiveStieltjesAlgorithm_std) ot_check_test (ChebychevAlgorithm_std) ot_check_test (GramSchmidtAlgorithm_std) ot_check_test (StandardDistributionPolynomialFactory_std) ot_check_test (OrthogonalBasis_std) # MetaModel ot_check_test (FunctionalChaosRandomVector_std) ot_check_test (FunctionalChaos_gsobol) ot_check_test (FunctionalChaos_ishigami) ot_check_test (FunctionalChaos_gsobol_sparse) ot_check_test (FunctionalChaos_ishigami_sparse) ot_check_test (FunctionalChaos_ishigami_database) ot_check_test (FunctionalChaos_nd) ot_check_test (KrigingAlgorithm_std) ot_check_test (KrigingRandomVector_std) ot_check_test (MetaModelValidation_std) ot_check_test (GeneralLinearModelAlgorithm_std) ot_check_test (TensorApproximationAlgorithm_std) if (HMAT_FOUND) ot_check_test (KrigingAlgorithm_std_hmat) ot_check_test (GeneralLinearModelAlgorithm_std_hmat) endif () if (NLOPT_FOUND) ot_check_test (GeneralLinearModelAlgorithm_nlopt) endif () # Sensitivity ot_check_test (ANCOVA_std) ot_check_test (FAST_std) ot_check_test (SobolIndicesAlgorithm_std) # Simulation ot_check_test (DirectionalSampling_std) ot_check_test (ImportanceSampling_std) ot_check_test (LHS_std) if (R_base_FOUND) ot_check_test (MonteCarlo_draw) endif () ot_check_test (MonteCarlo_sensitivity) ot_check_test (MonteCarlo_std) ot_check_test (PostAnalyticalControlledImportanceSampling_std) ot_check_test (PostAnalyticalImportanceSampling_std) ot_check_test (QuasiMonteCarlo_std) ot_check_test (RandomizedLHS_std) ot_check_test (RandomizedQuasiMonteCarlo_std) ot_check_test (Wilks_std) ot_check_test (SimulationSensitivityAnalysis_std) ot_check_test (QuadrantSampling_std) ot_check_test (AdaptiveDirectionalSampling_std) # StatTests if (R_rot_FOUND) ot_check_test (VisualTest_std) ot_check_test (FittingTest_std) ot_check_test (HypothesisTest_std) ot_check_test (HypothesisTest_correlation) ot_check_test (LinearModelTest_std) ot_check_test (NormalityTest_std) endif () ot_check_test (DickeyFullerTest_std) ot_check_test (TaylorExpansionMoments_std) ## Post-installation tests # Common ot_check_test (Path_std IGNOREOUT) # Func ot_check_test (Function_std) ot_check_test (ComposedFunction_std) # Stat ot_check_test (Sample_csv) # Diff ot_check_test (NonCenteredFiniteDifferenceGradient_std) ot_check_test (CenteredFiniteDifferenceGradient_std) ot_check_test (CenteredFiniteDifferenceHessian_std) # Experiments ot_check_test (LinearTaylor_std) ot_check_test (QuadraticLeastSquares_std) ot_check_test (LinearLeastSquares_std) # Waarts tests # ot_check_test (Waarts_25_quadratic_terms) # ot_check_test (Waarts_concave) # ot_check_test (Waarts_convex) # ot_check_test (Waarts_discontinuous_lsf) # ot_check_test (Waarts_noisy_lsf) # ot_check_test (Waarts_oblate) # ot_check_test (Waarts_RS2) # ot_check_test (Waarts_saddle) # ot_check_test (Waarts_system_series) add_custom_target (cppcheck COMMAND ${CMAKE_CTEST_COMMAND} -R "^cppcheck_" DEPENDS ${CHECK_TO_BE_RUN} COMMENT "Run C++ pre-installation tests") add_dependencies (check cppcheck) openturns-1.9/lib/test/CRT_fp8.c000066400000000000000000000007661307543307100165320ustar00rootroot00000000000000/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #include <_mingw.h> extern void (* __MINGW_IMP_SYMBOL(_fpreset))(void); void _fpreset (void); void _fpreset (void) { (* __MINGW_IMP_SYMBOL(_fpreset))(); } #ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); #else void fpreset(void) { _fpreset(); } #endif openturns-1.9/lib/test/res000066400000000000000000000035601307543307100156700ustar00rootroot00000000000000../src/Uncertainty/Distribution/openturns/AliMikhailHaqCopula.hxx ../src/Uncertainty/Distribution/openturns/BayesDistribution.hxx ../src/Uncertainty/Distribution/openturns/ClaytonCopula.hxx ../src/Uncertainty/Distribution/openturns/ComposedCopula.hxx ../src/Uncertainty/Distribution/openturns/ComposedDistribution.hxx ../src/Uncertainty/Distribution/openturns/ConditionalDistribution.hxx ../src/Uncertainty/Distribution/openturns/CumulativeDistributionNetwork.hxx ../src/Uncertainty/Distribution/openturns/Dirac.hxx ../src/Uncertainty/Distribution/openturns/Dirichlet.hxx ../src/Uncertainty/Distribution/openturns/FarlieGumbelMorgensternCopula.hxx ../src/Uncertainty/Distribution/openturns/FrankCopula.hxx ../src/Uncertainty/Distribution/openturns/IndependentCopula.hxx ../src/Uncertainty/Distribution/openturns/InverseWishart.hxx ../src/Uncertainty/Distribution/openturns/KernelMixture.hxx ../src/Uncertainty/Distribution/openturns/KPermutationsDistribution.hxx ../src/Uncertainty/Distribution/openturns/MarginalDistribution.hxx ../src/Uncertainty/Distribution/openturns/MaximumEntropyOrderStatisticsCopula.hxx ../src/Uncertainty/Distribution/openturns/MaximumEntropyOrderStatisticsDistribution.hxx ../src/Uncertainty/Distribution/openturns/MinCopula.hxx ../src/Uncertainty/Distribution/openturns/Mixture.hxx ../src/Uncertainty/Distribution/openturns/Multinomial.hxx ../src/Uncertainty/Distribution/openturns/NormalCopula.hxx ../src/Uncertainty/Distribution/openturns/NormalGamma.hxx ../src/Uncertainty/Distribution/openturns/OrdinalSumCopula.hxx ../src/Uncertainty/Distribution/openturns/PosteriorDistribution.hxx ../src/Uncertainty/Distribution/openturns/RandomMixture.hxx ../src/Uncertainty/Distribution/openturns/Student.hxx ../src/Uncertainty/Distribution/openturns/SubSquareCopula.hxx ../src/Uncertainty/Distribution/openturns/UserDefined.hxx ../src/Uncertainty/Distribution/openturns/Wishart.hxx openturns-1.9/lib/test/t_ANCOVA_std.cxx000066400000000000000000000100061307543307100200350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of ANCOVA method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Problem parameters UnsignedInteger dimension = 2; Scalar rho = 0.3; Scalar a = 4.; Scalar b = 5.; // Reference analytical values Scalar covTh = a * a + b * b + 2 * a * b * rho; Sample Si(2, 2); Si[0][0] = (a * a + a * b * rho) / covTh; Si[1][0] = (b * b + a * b * rho) / covTh; Si[0][1] = a * a / covTh; Si[1][1] = b * b / covTh; // Function Description inputVariables(dimension); inputVariables[0] = "X1"; inputVariables[1] = "X2"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << a << "* X1 + " << b << "* X2"); Function model(inputVariables, outputVariables, formula); // Input distribution Collection marginals(dimension); marginals[0] = Normal(); marginals[1] = Normal(); ComposedDistribution distribution(marginals); // Correlated input distribution CorrelationMatrix S(2); S(1, 0) = 0.3; CorrelationMatrix R(NormalCopula::GetCorrelationFromSpearmanCorrelation(S)); NormalCopula myCopula(R); ComposedDistribution myCorrelatedInputDistribution(marginals, myCopula); Sample sample(myCorrelatedInputDistribution.getSample(2000)); // Orthogonal basis Collection polynomialCollection(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) polynomialCollection[i] = HermiteFactory(); EnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Adaptive strategy UnsignedInteger degree = 4; FixedStrategy adaptiveStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree)); // Projection strategy UnsignedInteger samplingSize = 250; MonteCarloExperiment experiment(samplingSize); LeastSquaresStrategy projectionStrategy(experiment); // Polynomial chaos algorithm FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); RandomGenerator::SetSeed(0); algo.run(); // Post-process the results FunctionalChaosResult result(algo.getResult()); ANCOVA ancova(result, sample); Point indices(ancova.getIndices()); Point uncorrelatedIndices(ancova.getUncorrelatedIndices()); for(UnsignedInteger i = 0; i < dimension; ++i) { Scalar value = indices[i]; fullprint << "ANCOVA index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - Si[i][0]) << std::endl; value = uncorrelatedIndices[i]; fullprint << "ANCOVA uncorrelated index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - Si[i][1]) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ANCOVA_std.expout000066400000000000000000000003321307543307100205600ustar00rootroot00000000000000ANCOVA index 0 = 0.41108 absolute error=4.0e-03 ANCOVA uncorrelated index 0 = 0.29868 absolute error=3.2e-03 ANCOVA index 1 = 0.58892 absolute error=4.0e-03 ANCOVA uncorrelated index 1 = 0.47653 absolute error=4.8e-03 openturns-1.9/lib/test/t_ARMACoefficients_std.cxx000066400000000000000000000073531307543307100221430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ARMACoefficients * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection SquareMatrixCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Constructor with size */ const UnsignedInteger dim = 2; SquareMatrix squareMatrix1(dim); squareMatrix1(0, 0) = 1.; squareMatrix1(1, 0) = 2.; squareMatrix1(0, 1) = 3.; squareMatrix1(1, 1) = 4.; /* Second matrix to add to the ARMACoefficients*/ double s = 3.0; SquareMatrix squareMatrix2 = squareMatrix1 * s; /* Last matrix to add to the ARMACoefficients*/ double t = 1.5; SquareMatrix squareMatrix3 = squareMatrix1 / t; /* size : Number of matrix */ const UnsignedInteger size = 3; /* ARMACoefficients with default constructor */ ARMACoefficients coefficients0; fullprint << "Using default constructor " << std::endl; fullprint << "coefficients0 = " << coefficients0 << std::endl; /* ARMACoefficients with size / dimension constructor */ ARMACoefficients coefficients1(size, dim); coefficients1[0] = squareMatrix1 ; coefficients1[1] = squareMatrix2 ; coefficients1[2] = squareMatrix3 ; fullprint << "Using constructor based on size / dimension " << std::endl; fullprint << "coefficients1 = " << coefficients1 << std::endl; fullprint << "size of coefficients1 = " << coefficients1.getSize() << std::endl; fullprint << "dimension of coefficients1 objects= " << coefficients1.getDimension() << std::endl; /*constructors with collection of matrix*/ SquareMatrixCollection myCollection; myCollection.add(squareMatrix1); myCollection.add(squareMatrix2); myCollection.add(squareMatrix3); fullprint << "SquareMatrix collection = " << myCollection.__repr__() << std::endl; /*fullprint of the new collection*/ fullprint << "Using constructor based on a collection " << std::endl; ARMACoefficients coefficients2(myCollection); fullprint << "coefficients2 = " << coefficients2 << std::endl; /* 1D case */ Point point(dim * dim, 1.0); point[0] = 1; point[1] = 2; point[2] = 3; point[3] = 4; /* ARMACoefficients Point constructor */ ARMACoefficients coefficients3(point); coefficients3.add(s); /*fullprint of the new collection*/ fullprint << "Using Point constructor " << std::endl; fullprint << "coefficients3 = " << coefficients3 << std::endl; /* ARMACoefficients with polynomial constructor */ point *= 2.0 ; UniVariatePolynomial poly(point); ARMACoefficients coefficients4(poly); /*fullprint of the new collection*/ fullprint << "Using polynomial constructor " << std::endl; fullprint << "coefficients4 = " << coefficients4 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ARMACoefficients_std.expout000066400000000000000000000054551307543307100226660ustar00rootroot00000000000000Using default constructor coefficients0 = class=ARMACoefficients Using constructor based on size / dimension coefficients1 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] size of coefficients1 = 3 dimension of coefficients1 objects= 2 SquareMatrix collection = [class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4],class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12],class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667]] Using constructor based on a collection coefficients2 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] Using Point constructor coefficients3 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1], shift=1, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2], shift=2, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3], shift=3, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4], shift=4, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] Using polynomial constructor coefficients4 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2], shift=1, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4], shift=2, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6], shift=3, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[8] openturns-1.9/lib/test/t_ARMALikelihoodFactory_std.cxx000066400000000000000000000070771307543307100231600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ARMALikelihoodFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include "openturns/DistFunc.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // ARMA(p, q) const UnsignedInteger p = 2; const UnsignedInteger q = 1; const UnsignedInteger dimension = 2; // Make a realization of an ARMA model // Tmin , Tmax and N points for TimeGrid const Scalar dt = 1.0; const UnsignedInteger size = 400; RegularGrid timeGrid(0.0, dt, size); // Fixing the distributions for the WhiteNoise const Scalar sigma = 0.1; CovarianceMatrix cov(dimension); cov(0, 0) = sigma; cov(1, 1) = 2.0 * sigma; Normal whiteNoiseDistribution(Point(dimension), cov); // Building a process from a White Noise WhiteNoise whiteNoise(whiteNoiseDistribution); whiteNoise.setTimeGrid(timeGrid); Collection arCoefficients(p); Collection maCoefficients(q); SquareMatrix alpha(dimension); alpha(0, 0) = -0.5; alpha(0, 1) = -0.1; alpha(1, 0) = -0.4; alpha(1, 1) = -0.5; arCoefficients[0] = alpha; alpha(0, 0) = 0.0; alpha(0, 1) = 0.0; alpha(1, 0) = -0.25; alpha(1, 1) = 0.0; arCoefficients[1] = alpha; alpha(0, 0) = -0.4; alpha(0, 1) = 0.0; alpha(1, 0) = 0.0; alpha(1, 1) = -0.4; maCoefficients[0] = alpha; ARMACoefficients phi(arCoefficients); ARMACoefficients theta(maCoefficients); // ARMA model creation ARMA myARMA(phi, theta, whiteNoise); fullprint << "myARMA process = " << myARMA << std::endl; // Create a realization TimeSeries timeSeries(myARMA.getRealization()); cov(0, 0) += 0.01 * DistFunc::rNormal(); cov(1, 1) += 0.01 * DistFunc::rNormal(); for (UnsignedInteger k = 0; k < p; ++k) { for (UnsignedInteger j = 0; j < dimension; ++j) { for (UnsignedInteger i = 0; i < dimension; ++i) alpha(i, j) = 0.01 * DistFunc::rNormal() ; } phi[k] = phi[k] + alpha; } // for (UnsignedInteger k = 0; k < q; ++k) { for (UnsignedInteger j = 0; j < dimension; ++j) { for (UnsignedInteger i = 0; i < dimension; ++i) alpha(i, j) = 0.01 * DistFunc::rNormal() ; } theta[k] = theta[k] + alpha; } ARMALikelihoodFactory factory(p, q, dimension); fullprint << "factory=" << factory << std::endl; factory.setInitialConditions(phi, theta, cov); Process result(factory.build(timeSeries)); //fullprint << "Estimated ARMA=" << result << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ARMALikelihoodFactory_std.expout000066400000000000000000000025501307543307100236710ustar00rootroot00000000000000myARMA process = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=1 n=400 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[-0.5,-0.4,-0.1,-0.5], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,-0.25,0,0] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[-0.4,0,0,-0.4] noiseDistribution= class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[0.316228,0.447214] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-0.458508,-0.542927],[-0.661498,0.142981]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.541164,0.421868]] factory=class=ARMALikelihoodFactory implementation=class= ARMAFactoryImplementation p=[2] current p=2 q=[1] current q=1 invertible=true dimension=2 openturns-1.9/lib/test/t_ARMAState_std.cxx000066400000000000000000000045201307543307100206130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ARMAState * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RandomGenerator::SetSeed(0); /* Constructor with size */ const UnsignedInteger dim = 1; const UnsignedInteger p = 6; const UnsignedInteger q = 4; Sample valuesX(p, dim); Sample valuesEpsilon(q, dim); /**/ for(UnsignedInteger j = 0 ; j < dim ; ++j) { // Fill the AR-part (the last p-coefficients X_{-1}, X{-2},..., X_{-p}) for(UnsignedInteger i = 0 ; i < p ; ++i) { valuesX[i][j] = 2.0 * i + 3.0 * j + 1.0; } // Fill the MA-part (the last p-coefficients \epsilon_{-1}, \epsilon_{-2},..., \epsilon_{-p}) for(UnsignedInteger i = 0 ; i < q ; ++i) { valuesEpsilon[i][j] = RandomGenerator::Generate() ; } } /** Print the initial state of the ARMA : coefficients*/ fullprint << "X values = " << valuesX << std::endl; fullprint << "Epsilon values = " << valuesEpsilon << std::endl; // default constructor ARMAState myDefaultState; fullprint << "ARMAState with default constructor = " << myDefaultState.__repr__() << std::endl; // parameters constructor ARMAState myState(valuesX, valuesEpsilon); fullprint << "ARMAState = " << myState.__repr__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ARMAState_std.expout000066400000000000000000000016301307543307100213340ustar00rootroot00000000000000X values = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] Epsilon values = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.629877],[0.882805],[0.135276],[0.0325028]] ARMAState with default constructor = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] ARMAState = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.629877],[0.882805],[0.135276],[0.0325028]] openturns-1.9/lib/test/t_ARMA_std.cxx000066400000000000000000000106361307543307100176170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ARMA * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /*2 D case */ RandomGenerator::SetSeed(0); /* Matrices of the process */ const UnsignedInteger dim = 2; SquareMatrix squareMatrix1(dim); squareMatrix1(0, 0) = 0.2 ; squareMatrix1(1, 0) = 0.3 ; squareMatrix1(0, 1) = 0.7 ; squareMatrix1(1, 1) = 0.4 ; /* Second matrix to add to the ARMACoefficients*/ SquareMatrix squareMatrix2(dim) ; squareMatrix2(0, 0) = 0.1; squareMatrix2(1, 0) = 0.0; squareMatrix2(0, 1) = 0.0; squareMatrix2(1, 1) = 0.5; /* ARMA(p, q) */ const UnsignedInteger p = 1; const UnsignedInteger q = 1; /* ARMACoefficients with default constructor */ /* AR coefficients */ ARMACoefficients coefficientsP(p, dim); coefficientsP[0] = squareMatrix1 ; /* MA coefficients */ ARMACoefficients coefficientsQ(q, dim); coefficientsQ[0] = squareMatrix2 ; fullprint << "coefficientsP = " << coefficientsP << std::endl; fullprint << "coefficientsQ = " << coefficientsQ << std::endl; /* Time grid creation and White Noise */ Scalar Tmin = 0.0; Scalar deltaT = 0.1; UnsignedInteger steps = 11; /* Initialization of the time grid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, steps); /* Distributions for the choice */ Distribution dist1 = Normal(0.0, 0.01); Distribution dist2 = Normal(0.0, 0.02); // Create a collection of distribution ComposedDistribution::DistributionCollection aCollection; aCollection.add( dist1 ); aCollection.add( dist2 ); Distribution dist = ComposedDistribution(aCollection); fullprint << "dist = " << dist << std::endl; WhiteNoise whiteNoise(dist); /*Setting the timeGrid*/ whiteNoise.setTimeGrid(timeGrid); /* Last coefficients values */ Sample xValues(p, dim); Sample epsilonValues(q, dim); for(UnsignedInteger j = 0 ; j < dim ; ++j) { // Fill the AR-part (the last p-coefficients X_{-1}, X{-2},..., X_{-p}) for(UnsignedInteger i = 0 ; i < p ; ++i) { xValues[i][j] = RandomGenerator::Generate(); } // Fill the MA-part (the last p-coefficients \epsilon_{-1}, \epsilon_{-2},..., \epsilon_{-p}) for(UnsignedInteger i = 0 ; i < q ; ++i) { epsilonValues[i][j] = RandomGenerator::Generate(); } } /** Print the initial state of the ARMA : coefficients*/ fullprint << "Last values of the process = " << xValues << std::endl; fullprint << "Last innovations of the process = " << epsilonValues << std::endl; // ARMAState creation ARMAState state(xValues, epsilonValues); Process process1 = ARMA(coefficientsP, coefficientsQ, whiteNoise); fullprint << "process1 = " << process1 << std::endl; ARMA process2(coefficientsP, coefficientsQ, whiteNoise); fullprint << "process2 = " << process2 << std::endl; ARMA process3(coefficientsP, coefficientsQ, whiteNoise, state); fullprint << "process3 = " << process3 << std::endl; // Test realization fullprint << "One realization=" << process2.getRealization() << std::endl; // Some steps further UnsignedInteger stepNumber = 4; fullprint << "One future=" << process2.getFuture(stepNumber) << std::endl; UnsignedInteger size = 3; fullprint << "Some futures=" << process2.getFuture(stepNumber, size) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ARMA_std.expout000066400000000000000000000177431307543307100203470ustar00rootroot00000000000000coefficientsP = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficientsQ = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] dist = class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Last values of the process = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0.629877,0.135276]] Last innovations of the process = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0.882805,0.0325028]] process1 = class=Process implementation=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] noiseDistribution= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.00251208,-0.0178604]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0146295,-0.0199822]] process2 = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] noiseDistribution= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0213481,-0.000385516]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.00747966,-0.00379622]] process3 = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] noiseDistribution= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0.629877,0.135276]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0.882805,0.0325028]] One realization=class=Field name=Unnamed description=[t,X0,X1] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 description=[X0,X1] data=[[0.010204,-0.00744086],[-0.00287281,-0.0293307],[0.0190836,-0.00416576],[0.000428186,-0.0133922],[0.0226688,-0.0154754],[0.0156377,-0.00180096],[-0.00152644,0.0220058],[-0.0290278,-0.000953817],[0.00341936,-0.0137703],[0.00530122,-0.00738418],[-0.0161936,0.0111398]] One future=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[-0.00486985,0.0088404],[-0.0213829,0.0140495],[-0.0034992,0.00524708],[0.0067867,-0.00506869]] start=1.1 timeStep=0.1 n=4 Some futures=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[-1.82364e-05,0.0156951],[-0.0150433,-0.0192013],[0.0304955,0.00743803],[-0.00879671,-0.0355234]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[-0.0129397,-0.00706455],[0.013426,-0.0179524],[-0.00898944,0.00403051],[-0.00677231,0.00868747]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[-0.00500545,-0.0157516],[0.0236257,0.0301551],[-0.0128599,-0.00625936],[-0.00239186,0.000610274]]] openturns-1.9/lib/test/t_AbdoRackwitz_std.cxx000066400000000000000000000100341307543307100214530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AbdoRackwitz for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk(((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i])); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test function operator () Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1+2*x2-3*x3+4*x4")); // Add a finite difference gradient to the function, as Abdo Rackwitz algorithm // needs it NonCenteredFiniteDifferenceGradient myGradient(1e-7, levelFunction.getEvaluation()); /** Substitute the gradient */ levelFunction.setGradient(new NonCenteredFiniteDifferenceGradient(myGradient)); Point startingPoint(4, 0.0); AbdoRackwitz myAlgorithm(OptimizationProblem(levelFunction, 3.0)); myAlgorithm.setStartingPoint(startingPoint); fullprint << "myAlgorithm = " << myAlgorithm << std::endl; myAlgorithm.run(); fullprint << "result = " << printPoint(myAlgorithm.getResult().getOptimalPoint(), 4) << std::endl; fullprint << "multipliers = " << printPoint(myAlgorithm.getResult().getLagrangeMultipliers(), 4) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } try { Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4")); // Activate the cache as we will use an analytical method levelFunction.enableCache(); // Add a finite difference gradient to the function, as Abdo Rackwitz algorithm // needs it NonCenteredFiniteDifferenceGradient myGradient(1e-7, levelFunction.getEvaluation()); fullprint << "myGradient=" << myGradient << std::endl; /** Substitute the gradient */ levelFunction.setGradient(new NonCenteredFiniteDifferenceGradient(myGradient)); Point startingPoint(4, 0.0); AbdoRackwitz myAlgorithm(OptimizationProblem(levelFunction, -0.5)); myAlgorithm.setStartingPoint(startingPoint); fullprint << "myAlgorithm = " << myAlgorithm << std::endl; myAlgorithm.run(); OptimizationResult result(myAlgorithm.getResult()); fullprint << "result = " << printPoint(result.getOptimalPoint(), 4) << std::endl; Graph convergence(result.drawErrorHistory()); fullprint << "evaluation calls number=" << levelFunction.getEvaluationCallsNumber() << std::endl; fullprint << "gradient calls number=" << levelFunction.getGradientCallsNumber() << std::endl; fullprint << "hessian calls number=" << levelFunction.getHessianCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AbdoRackwitz_std.expout000066400000000000000000000057761307543307100222160ustar00rootroot00000000000000myAlgorithm = class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result = [0.1000,0.2000,-0.3000,0.4000] multipliers = [-0.1000] myGradient=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] myAlgorithm = class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=-0.5 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result = [-0.0460,-0.0133,0.1449,-0.0267] evaluation calls number=26 gradient calls number=0 hessian calls number=0 openturns-1.9/lib/test/t_AdaptiveDirectionalSampling_std.cxx000066400000000000000000000054371307543307100245100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AdaptiveDirectionalSampling for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char **argv) { // Log::Show(Log::ALL); OStream fullprint(std::cout); const UnsignedInteger dim = 4; Description input(dim); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; /* We create a numerical math function */ Function function(input, Description(1, "d"), Description(1, "F*L^3/(3.*E*I)")); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I const Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(function, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); const UnsignedInteger n = 1000; { /* We create a Directional Sampling algorithm */ MonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(100 * n); myAlgo.setBlockSize(1); /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "result=" << myAlgo.getResult() << std::endl; } /* We create a Directional Sampling algorithm */ AdaptiveDirectionalSampling myAlgo(myEvent); // myAlgo.setPartialStratification(true); // myAlgo.setMaximumStratificationDimension(2); myAlgo.setMaximumOuterSampling(n); myAlgo.setBlockSize(1); UnsignedInteger calls0 = function.getEvaluationCallsNumber(); /* Perform the simulation */ myAlgo.run(); UnsignedInteger calls = function.getEvaluationCallsNumber() - calls0; /* Stream out the result */ fullprint << "result=" << myAlgo.getResult() << std::endl; fullprint << "callsNumber=" << calls << std::endl; return 0; } openturns-1.9/lib/test/t_AdaptiveDirectionalSampling_std.expout000066400000000000000000000006301307543307100252200ustar00rootroot00000000000000result=probabilityEstimate=2.973447e-03 varianceEstimate=8.815098e-08 standard deviation=2.97e-04 coefficient of variation=9.99e-02 confidenceLength(0.95)=1.16e-03 outerSampling=33631 blockSize=1 result=probabilityEstimate=2.891731e-03 varianceEstimate=6.487074e-10 standard deviation=2.55e-05 coefficient of variation=8.81e-03 confidenceLength(0.95)=9.98e-05 outerSampling=991 blockSize=1 callsNumber=23875 openturns-1.9/lib/test/t_AdaptiveStieltjesAlgorithm_std.cxx000066400000000000000000000047701307543307100243740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GramSchmidtAlgorithm for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) { if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; in[i] = 1.0e-4 * round(1.0e4 * in[i]); } return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger iMax = 5; { Uniform distribution; LegendreFactory algo0; AdaptiveStieltjesAlgorithm algo1(distribution); fullprint << algo1 << std::endl; // Centered case for (UnsignedInteger i = 0; i < iMax; ++i) { fullprint << distribution.getClassName() << " Reference(" << i << ")=" << clean(algo0.getRecurrenceCoefficients(i)) << std::endl; fullprint << distribution.getClassName() << " AdaStielj(" << i << ")=" << clean(algo1.getRecurrenceCoefficients(i)) << std::endl; } } { // Non-centered case Beta distribution(0.5, 3.0, -1.0, 1.0); JacobiFactory algo0(-0.5, 1.5); AdaptiveStieltjesAlgorithm algo1(distribution); fullprint << algo1 << std::endl; for (UnsignedInteger i = 0; i < iMax; ++i) { fullprint << distribution.getClassName() << " Reference(" << i << ")=" << clean(algo0.getRecurrenceCoefficients(i)) << std::endl; fullprint << distribution.getClassName() << " AdaStielj(" << i << ")=" << clean(algo1.getRecurrenceCoefficients(i)) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AdaptiveStieltjesAlgorithm_std.expout000066400000000000000000000042171307543307100251120ustar00rootroot00000000000000class=AdaptiveStieltjesAlgorithm measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=true Uniform Reference(0)=class=Point name=Unnamed dimension=3 values=[1.7321,0,0] Uniform AdaStielj(0)=class=Point name=Unnamed dimension=3 values=[1.7321,0,0] Uniform Reference(1)=class=Point name=Unnamed dimension=3 values=[1.9365,0,-1.118] Uniform AdaStielj(1)=class=Point name=Unnamed dimension=3 values=[1.9365,0,-1.118] Uniform Reference(2)=class=Point name=Unnamed dimension=3 values=[1.972,0,-1.0184] Uniform AdaStielj(2)=class=Point name=Unnamed dimension=3 values=[1.972,0,-1.0184] Uniform Reference(3)=class=Point name=Unnamed dimension=3 values=[1.9843,0,-1.0062] Uniform AdaStielj(3)=class=Point name=Unnamed dimension=3 values=[1.9843,0,-1.0062] Uniform Reference(4)=class=Point name=Unnamed dimension=3 values=[1.99,0,-1.0029] Uniform AdaStielj(4)=class=Point name=Unnamed dimension=3 values=[1.99,0,-1.0029] class=AdaptiveStieltjesAlgorithm measure=class=Beta name=Beta dimension=1 r=0.5 t=3 a=-1 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0.666667,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=false Beta Reference(0)=class=Point name=Unnamed dimension=3 values=[2.6833,-1.7889,0] Beta AdaStielj(0)=class=Point name=Unnamed dimension=3 values=[2.6833,1.7889,0] Beta Reference(1)=class=Point name=Unnamed dimension=3 values=[2.1822,-0.291,-0.8133] Beta AdaStielj(1)=class=Point name=Unnamed dimension=3 values=[2.1822,0.291,-0.8133] Beta Reference(2)=class=Point name=Unnamed dimension=3 values=[2.087,-0.1193,-0.9564] Beta AdaStielj(2)=class=Point name=Unnamed dimension=3 values=[2.087,0.1193,-0.9564] Beta Reference(3)=class=Point name=Unnamed dimension=3 values=[2.0513,-0.0651,-0.9829] Beta AdaStielj(3)=class=Point name=Unnamed dimension=3 values=[2.0513,0.0651,-0.9829] Beta Reference(4)=class=Point name=Unnamed dimension=3 values=[2.0339,-0.0411,-0.9915] Beta AdaStielj(4)=class=Point name=Unnamed dimension=3 values=[2.0339,0.0411,-0.9915] openturns-1.9/lib/test/t_AggregatedEvaluation_std.cxx000066400000000000000000000043651307543307100231630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AggregatedEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inputNames(3); inputNames[0] = "x0"; inputNames[1] = "x1"; inputNames[2] = "x2"; Description outputNames1(1); outputNames1[0] = "y0"; Description formulas1(1); formulas1[0] = "x0^2+2*x1+3*x2^3"; Function function1(inputNames, outputNames1, formulas1); Description outputNames2(2); outputNames2[0] = "z0"; outputNames2[1] = "z1"; Description formulas2(2); formulas2[0] = "cos(x0*sin(x2+x1))"; formulas2[1] = "exp(x1 - x0 * sin(x2))"; Function function2(inputNames, outputNames2, formulas2); Collection< Function > coll(2); coll[0] = function1; coll[1] = function2; AggregatedEvaluation evaluation(coll); fullprint << "evaluation=" << evaluation << std::endl; Point point(3); point[0] = 4.0; point[1] = -4.0; point[2] = 1.0; fullprint << "function 1 at" << point << "=" << function1(point) << std::endl; fullprint << "function 2 at" << point << "=" << function2(point) << std::endl; fullprint << "evaluation at" << point << "=" << evaluation(point) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AggregatedEvaluation_std.expout000066400000000000000000000034171307543307100237020ustar00rootroot00000000000000evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,z0,z1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[z0,z1] formulas=[cos(x0*sin(x2+x1)),exp(x1 - x0 * sin(x2))] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[z0,z1] formulas=[cos(x0*sin(x2+x1)),exp(x1 - x0 * sin(x2))] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[z0,z1] formulas=[cos(x0*sin(x2+x1)),exp(x1 - x0 * sin(x2))]] function 1 atclass=Point name=Unnamed dimension=3 values=[4,-4,1]=class=Point name=Unnamed dimension=1 values=[11] function 2 atclass=Point name=Unnamed dimension=3 values=[4,-4,1]=class=Point name=Unnamed dimension=2 values=[0.844867,0.000632466] evaluation atclass=Point name=Unnamed dimension=3 values=[4,-4,1]=class=Point name=Unnamed dimension=3 values=[11,0.844867,0.000632466] openturns-1.9/lib/test/t_AggregatedFunction_std.cxx000066400000000000000000000055441307543307100226410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for aggregation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // First, build two functions from R^3->R^2 Description inVar(3); inVar[0] = "x1"; inVar[1] = "x2"; inVar[2] = "x3"; Description formula(2); formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)"; formula[1] = "x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)"; AggregatedEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)"; formula[0] = "exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the function AggregatedFunction myFunction(functions); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myFunction=" << myFunction << std::endl; fullprint << "Value at " << inPoint << "=" << myFunction(inPoint) << std::endl; fullprint << "Gradient at " << inPoint << "=" << myFunction.gradient(inPoint) << std::endl; PlatformInfo::SetNumericalPrecision(5); fullprint << "Hessian at " << inPoint << "=" << myFunction.hessian(inPoint) << std::endl; for (UnsignedInteger i = 0; i < myFunction.getOutputDimension(); ++i) { fullprint << "Marginal " << i << "=" << myFunction.getMarginal(i) << std::endl; } Indices indices(2); indices[0] = 0; indices[1] = 1; fullprint << "Marginal (0,1)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 0; indices[1] = 2; fullprint << "Marginal (0,2)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 1; indices[1] = 2; fullprint << "Marginal (1,2)=" << myFunction.getMarginal(indices) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AggregatedFunction_std.expout000066400000000000000000001411261307543307100233600ustar00rootroot00000000000000myFunction=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1,y0,y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] gradientImplementation=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Point name=Unnamed dimension=4 values=[-2.67038,-13.1757,-0.00142562,-13.1757] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[-4.79497,-0.893127,-0.311467,16.1934,-4.67213,-3.48031,0.000407664,0.0043079,0.00392597,16.1934,-4.67213,-3.48031] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=4 values=[-7.222,-0.99874,-1.797,0,1.5358,4.5394,0,0,10.178,-10.759,4.5955,5.2391,0,-0.81967,-0.81967,0,0,-0.95953,-0.018954,0.0043086,-0.007232,0,-0.014647,-0.0084823,0,0,-0.013158,-10.759,4.5955,5.2391,0,-0.81967,-0.81967,0,0,-0.95953] Marginal 0=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[1,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[1,0,0,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=1 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal 1=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,1,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,1,0,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=1 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal 2=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=1 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal 3=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=1 values=[0,0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=1 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal (0,1)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[1,0,0,0,0,1,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[1,0,0,0,0,1,0,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal (0,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[1,0,0,0,0,0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[1,0,0,0,0,0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal (1,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y1] formulas=[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0,1,0,0,0,0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0,1,0,0,0,0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2,y3] formulas=[0.0,0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0,y1] formulas=[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] openturns-1.9/lib/test/t_AggregatedProcess_std.cxx000066400000000000000000000052551307543307100224710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CompositeProcess * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RandomGenerator::SetSeed(0); /* Time grid creation */ Scalar Tmin = 0.0; Scalar deltaT = 0.1; UnsignedInteger steps = 11; /* Initialization of the time grid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, steps); { /* Default aggregated process creation */ AggregatedProcess myProcess; /* We fix the time grid to the process */ myProcess.setTimeGrid(timeGrid); fullprint << "myProcess=" << myProcess << std::endl; fullprint << "myProcess=" << myProcess.__str__() << std::endl; fullprint << "a realization=" << myProcess.getRealization() << std::endl; Process marginalProcess(myProcess.getMarginal(0)); fullprint << "a marginal process=" << marginalProcess << std::endl; } { /* Parameter aggregated process creation */ Collection< Process > coll(0); coll.add(WhiteNoise()); coll.add(ARMA()); coll.add(GaussianProcess()); AggregatedProcess myProcess(coll); myProcess.setTimeGrid(timeGrid); fullprint << "myProcess=" << myProcess << std::endl; fullprint << "myProcess=" << myProcess.__str__() << std::endl; fullprint << "a realization=" << myProcess.getRealization() << std::endl; Process marginalProcess(myProcess.getMarginal(1)); fullprint << "a marginal process=" << marginalProcess << std::endl; Indices indices(2); indices[0] = 0; indices[1] = 2; fullprint << "another marginal process=" << Process(myProcess.getMarginal(indices)) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AggregatedProcess_std.expout000066400000000000000000000155171307543307100232150ustar00rootroot00000000000000myProcess=class=AggregatedProcess process collection=[class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] myProcess=AggregatedProcess([WhiteNoise(Normal(mu = 0, sigma = 1))]) a realization=class=Field name=Unnamed description=[t,X0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=11 dimension=1 description=[X0] data=[[0.608202],[-1.26617],[-0.438266],[1.20548],[-2.18139],[0.350042],[-0.355007],[1.43725],[0.810668],[0.793156],[-0.470526]] a marginal process=class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] myProcess=class=AggregatedProcess process collection=[class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Process implementation=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[],class=Process implementation=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false] myProcess=AggregatedProcess([WhiteNoise(Normal(mu = 0, sigma = 1)),ARMA(X_{0,t} = E_{0,t}, E_t ~ Normal(mu = 0, sigma = 1)),GaussianProcess(trend=[x0]->[0.0], covariance=ExponentialModel(scale=[1], amplitude=[1], no spatial correlation))]) a realization=class=Field name=Unnamed description=[t,X0,X0,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=3 description=[X0,X0,y0] data=[[-1.28289,0.351418,-0.0436123],[-1.31178,1.78236,0.190168],[-0.0907838,0.0702074,0.299777],[0.995793,-0.781366,0.444838],[-0.139453,-0.721533,0.195966],[-0.560206,-0.241223,0.0142559],[0.44549,-1.78796,-0.307618],[0.322925,0.40136,-0.16853],[0.445785,1.36783,0.685721],[-1.03808,1.00434,0.33466],[-0.856712,0.741548,1.09293]] a marginal process=class=Process implementation=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] another marginal process=class=Process implementation=class=AggregatedProcess process collection=[class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Process implementation=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false] openturns-1.9/lib/test/t_AliMikhailHaqCopulaFactory_std.cxx000066400000000000000000000052261307543307100242300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AliMikhailHaqCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { AliMikhailHaqCopula distribution(0.5); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); AliMikhailHaqCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; AliMikhailHaqCopula estimatedAliMikhailHaqCopula(factory.buildAsAliMikhailHaqCopula(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated AliMikhailHaqCopula=" << estimatedAliMikhailHaqCopula << std::endl; estimatedAliMikhailHaqCopula = factory.buildAsAliMikhailHaqCopula(); fullprint << "Default AliMikhailHaqCopula=" << estimatedAliMikhailHaqCopula << std::endl; estimatedAliMikhailHaqCopula = factory.buildAsAliMikhailHaqCopula(distribution.getParameter()); fullprint << "AliMikhailHaqCopula from parameters=" << estimatedAliMikhailHaqCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AliMikhailHaqCopulaFactory_std.expout000066400000000000000000000014471307543307100247530ustar00rootroot00000000000000Distribution =class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Estimated distribution=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.433481 Default distribution=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Distribution from parameters=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Distribution =class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Estimated AliMikhailHaqCopula=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.433481 Default AliMikhailHaqCopula=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 AliMikhailHaqCopula from parameters=class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 openturns-1.9/lib/test/t_AliMikhailHaqCopula_std.cxx000066400000000000000000000146431307543307100227030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AliMikhailHaqCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; AliMikhailHaqCopula copula(0.5); copula.setName("a aliMikhailHaq copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AliMikhailHaqCopula_std.expout000066400000000000000000000110231307543307100234120ustar00rootroot00000000000000Copula class=AliMikhailHaqCopula name=a aliMikhailHaq copula dimension=2 theta=0.5 Copula AliMikhailHaqCopula(theta = 0.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.629877,0.895761] oneSample=class=Sample name=a aliMikhailHaq copula implementation=class=SampleImplementation name=a aliMikhailHaq copula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.0211783],[0.347057,0.964145],[0.92068,0.606772],[0.0632061,0.189429],[0.714382,0.449122],[0.373767,0.713037],[0.883503,0.393905],[0.92851,0.86981],[0.684575,0.852794],[0.359802,0.947852]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[0.502777,0.500292] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0166341,0.0166341,0.0832656] point= class=Point name=Unnamed dimension=2 values=[0.2,0.2] ddf=class=Point name=Unnamed dimension=2 values=[-0.860562,-0.860562] ddf (FD)=class=Point name=Unnamed dimension=2 values=[-0.860562,-0.860562] pdf=1.20853 cdf=0.0588235 Survival =0.658824 Survival (ref)=0.658824 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.025625,0.025625] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.689898,0.689898] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0126791,0.0126791] upper bound=class=Point name=Unnamed dimension=2 values=[0.987321,0.987321] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.974642 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(AliMikhailHaqCopula(theta = 0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(AliMikhailHaqCopula(theta = 0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(AliMikhailHaqCopula(theta = 0.5)) level=0.339383 beta=0.71221 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0126791,0.0126791] upper bound=class=Point name=Unnamed dimension=2 values=[0.987321,0.987321] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974642 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.974521,0.974521] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974521 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.025625,0.025625] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974375 covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0160319,0.0160319,0.0833333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.192383,0.192383,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.192383,0.192383,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.128765,0.128765,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.294088] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.47206] indices=[1,0] margins=class=AliMikhailHaqCopula name=a aliMikhailHaq copula dimension=2 theta=0.5 margins PDF=1.13619 margins CDF=0.0869565 margins quantile=class=Point name=Unnamed dimension=2 values=[0.974521,0.974521] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.196586,0.527995] openturns-1.9/lib/test/t_AnalyticalResult_std.cxx000066400000000000000000000074641307543307100223640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of AnalyticalResult class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create an AnalyticalResult based on fictive results */ AnalyticalResult result(sigma, myEvent, false); fullprint << "result=" << result << std::endl; UnsignedInteger digits = 5; fullprint << "standard space design point=" << printPoint(result.getStandardSpaceDesignPoint(), digits) << std::endl; fullprint << "physical space design point=" << printPoint(result.getPhysicalSpaceDesignPoint(), digits) << std::endl; fullprint << "is standard point origin in failure space? " << (result.getIsStandardPointOriginInFailureSpace() ? "true" : "false") << std::endl; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "importance factors (physical) =" << printPoint(result.getImportanceFactors(AnalyticalResult::PHYSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; fullprint << "graph importance factors=" << result.drawImportanceFactors() << std::endl; fullprint << "graph importance factors (classical)=" << result.drawImportanceFactors(AnalyticalResult::CLASSICAL) << std::endl; fullprint << "graph sensitivity=" << result.drawHasoferReliabilityIndexSensitivity() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_AnalyticalResult_std.expout000066400000000000000000000146161307543307100231030ustar00rootroot00000000000000result=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=4 values=[1,1,1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[51,2,11,6] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=2 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] standard space design point=[1.00000,1.00000,1.00000,1.00000] physical space design point=[51.00000,2.00000,11.00000,6.00000] is standard point origin in failure space? false importance factors=[0.25000,0.25000,0.25000,0.25000] importance factors (classical)=[0.25000,0.25000,0.25000,0.25000] importance factors (physical) =[0.00109,0.70913,0.21098,0.07879] Hasofer reliability index=2 graph importance factors=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Design Point - Unnamed xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 25.0%,X1 : 25.0%,X2 : 25.0%,X3 : 25.0%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#ccff00,#00ff66,#0066ff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.25],[0.25],[0.25],[0.25]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] graph importance factors (classical)=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Design Point - Unnamed xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 25.0%,X1 : 25.0%,X2 : 25.0%,X3 : 25.0%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#ccff00,#00ff66,#0066ff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.25],[0.25],[0.25],[0.25]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] graph sensitivity=[class=Graph name=Sensitivity implementation=class=GraphImplementation name=Sensitivity title=Hasofer Reliability Index Sensitivities - Marginal parameters - Unnamed xTitle=parameters yTitle=sensitivities axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=X0 [mean_0,standard_deviation_0] implementation=class=BarPlot name=X0 [mean_0,standard_deviation_0] origin=0 derived from class=DrawableImplementation name=X0 [mean_0,standard_deviation_0] legend=X0 [mean_0,standard_deviation_0] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.0330236],[1,0.0330236]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X1 [mean_1,standard_deviation_1] implementation=class=BarPlot name=X1 [mean_1,standard_deviation_1] origin=3 derived from class=DrawableImplementation name=X1 [mean_1,standard_deviation_1] legend=X1 [mean_1,standard_deviation_1] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,-0.842101],[1,-0.842101]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X2 [mean_2,standard_deviation_2] implementation=class=BarPlot name=X2 [mean_2,standard_deviation_2] origin=6 derived from class=DrawableImplementation name=X2 [mean_2,standard_deviation_2] legend=X2 [mean_2,standard_deviation_2] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,-0.459328],[1,-0.459328]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X3 [mean_3,standard_deviation_3] implementation=class=BarPlot name=X3 [mean_3,standard_deviation_3] origin=9 derived from class=DrawableImplementation name=X3 [mean_3,standard_deviation_3] legend=X3 [mean_3,standard_deviation_3] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.2807],[1,0.2807]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1],class=Graph name=Sensitivity implementation=class=GraphImplementation name=Sensitivity title=Hasofer Reliability Index Sensitivities - Other parameters - Unnamed xTitle=parameters yTitle=sensitivities axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] implementation=class=BarPlot name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] origin=0 derived from class=DrawableImplementation name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] legend=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[1,0],[1,0],[1,0],[1,0],[1,0],[1,0]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]] openturns-1.9/lib/test/t_Analytical_std.cxx000066400000000000000000000067541307543307100211660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of Analytical class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create an OptimizationAlgorithm algorithm */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(400); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); fullprint << "myCobyla=" << myCobyla << std::endl << std::flush; /* We create a Analytical algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ Analytical myAlgo(myCobyla, myEvent, mean); fullprint << "Analytical=" << myAlgo << std::endl; fullprint << "physical starting point=" << myAlgo.getPhysicalStartingPoint() << std::endl; fullprint << "event=" << myAlgo.getEvent() << std::endl; fullprint << "nearest point algorithm=" << myAlgo.getNearestPointAlgorithm() << std::endl; fullprint << "result=" << myAlgo.getAnalyticalResult() << std::endl; myAlgo.run(); fullprint << "result=" << myAlgo.getAnalyticalResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Analytical_std.expout000066400000000000000000000216451307543307100217040ustar00rootroot00000000000000myCobyla=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 Analytical=class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] physical starting point=class=Point name=Unnamed dimension=4 values=[50,1,10,5] event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 nearest point algorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 result=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[50,1,10,5] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=true hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] result=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=4 values=[-0.0310354,0.841942,0.445404,-0.332238] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[49.969,1.84194,10.4454,4.66776] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.00925 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] openturns-1.9/lib/test/t_ArcsineFactory_std.cxx000066400000000000000000000044511307543307100220110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Arcsine for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Arcsine distribution(1., 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); ArcsineFactory factory; Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Arcsine estimatedArcsine(factory.buildAsArcsine(sample)); fullprint << "Arcsine =" << distribution << std::endl; fullprint << "Estimated Arcsine=" << estimatedArcsine << std::endl; estimatedArcsine = factory.buildAsArcsine(); fullprint << "Default Arcsine=" << estimatedArcsine << std::endl; estimatedArcsine = factory.buildAsArcsine(distribution.getParameter()); fullprint << "Arcsine from parameters=" << estimatedArcsine << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ArcsineFactory_std.expout000066400000000000000000000011061307543307100225250ustar00rootroot00000000000000Distribution =class=Arcsine name=Arcsine dimension=1 a=1 b=2.5 Estimated distribution=class=Arcsine name=Arcsine dimension=1 a=1.00127 b=2.51039 Default distribution=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 Distribution from parameters=class=Arcsine name=Arcsine dimension=1 a=1 b=2.5 Arcsine =class=Arcsine name=Arcsine dimension=1 a=1 b=2.5 Estimated Arcsine=class=Arcsine name=Arcsine dimension=1 a=1.00127 b=2.51039 Default Arcsine=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 Arcsine from parameters=class=Arcsine name=Arcsine dimension=1 a=1 b=2.5 openturns-1.9/lib/test/t_Arcsine_std.cxx000066400000000000000000000203001307543307100204500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Arcsine for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Arcsine { public: TestObject() : Arcsine(-1.0, 1.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Arcsine distribution(5.2, 11.6); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point(distribution.getDimension(), 9.1); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Arcsine::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Arcsine_std.expout000066400000000000000000000115641307543307100212060ustar00rootroot00000000000000Testing class Arcsine checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Arcsine name=Arcsine dimension=1 a=-1 b=1 streamObject(const T & anObject) class=Arcsine name=Arcsine dimension=1 a=-1 b=1 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Arcsine name=Arcsine dimension=1 a=5.2 b=11.6 Distribution Arcsine(a = 5.2, b = 11.6) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[9.66973] oneSample first=class=Point name=Unnamed dimension=1 values=[11.3856] last=class=Point name=Unnamed dimension=1 values=[7.65026] mean=class=Point name=Unnamed dimension=1 values=[8.42467] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.18235] skewness=class=Point name=Unnamed dimension=1 values=[-0.0159154] kurtosis=class=Point name=Unnamed dimension=1 values=[1.49339] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf =class=Point name=Unnamed dimension=1 values=[0.00731882] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.00731882] log pdf=-2.28336 pdf =0.101941 pdf (FD)=0.101941 cdf=0.570198 ccdf=0.429802 survival=0.429802 Inverse survival=class=Point name=Unnamed dimension=1 values=[5.2394] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[11.5606] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=1 values=[5.2394] cdf (tail)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[0.0130693,-0.0203881] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0130693,-0.0203881] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0398206,-0.0621201] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0398206,-0.0621201] Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[5.20986] upper bound=class=Point name=Unnamed dimension=1 values=[11.5901] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Arcsine(a = 5.2, b = 11.6)) gradientImplementation=MinimumVolumeLevelSetGradient(Arcsine(a = 5.2, b = 11.6)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Arcsine(a = 5.2, b = 11.6)) level=2.30479 beta=0.0997794 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[5.20986] upper bound=class=Point name=Unnamed dimension=1 values=[11.5901] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[5.2] upper bound=class=Point name=Unnamed dimension=1 values=[11.5606] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[5.2394] upper bound=class=Point name=Unnamed dimension=1 values=[11.6] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[8.4] standard deviation=class=Point name=Unnamed dimension=1 values=[2.26274] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[1.5] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.12] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[a : 5.2, b : 11.6]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.5] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.375] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Arcsine(a = -1, b = 1) openturns-1.9/lib/test/t_AtomicFunctions_std.cxx000066400000000000000000000061711307543307100222030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class AtomicFunctions for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include // sysconf #include // getenv #ifndef _MSC_VER # include # include #endif #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; #define NB_ITER 1000000 void* threadFunc(void* arg) { // AtomicInt * atom = (AtomicInt*) arg; int i; for( i = 0; i < NB_ITER; i++ ) { atom->increment(); atom->decrement(); atom->fetchAndAdd(1); } return NULL; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { AtomicInt atom; #ifndef WIN32 unsigned int nbThreads = sysconf(_SC_NPROCESSORS_CONF); #else std::istringstream converter(getenv("NUMBER_OF_PROCESSORS")); unsigned int nbThreads; if (!(converter >> nbThreads)) { OSS errorMessage; errorMessage << "OT::AtomicFunctions wrong nb of thread!"; throw TestFailed(errorMessage); } #endif nbThreads++; pthread_t *threadsIds = new pthread_t[nbThreads]; unsigned int i; for( i = 0; i < nbThreads; ++i ) { int rc = pthread_create( threadsIds + i, NULL, threadFunc, (void*) &atom ); if (rc != 0) { #ifndef _MSC_VER int j; for( j = i - 1 ; j >= 0 ; --j ) pthread_kill( threadsIds[j], SIGTERM ); #endif OSS errorMessage; errorMessage << "OT::AtomicFunctions Threads creation failed!"; throw TestFailed(errorMessage); } } /* end for */ for( i = 0; i < nbThreads; ++i ) { int rc = pthread_join( threadsIds[i], NULL ); if (rc != 0) { OSS errorMessage; errorMessage << "OT::AtomicFunctions Threads join failed!"; throw TestFailed(errorMessage); } } /* end for */ delete [] threadsIds; unsigned int shaked = atom.fetchAndAdd(10); if (shaked != (NB_ITER * nbThreads)) { OSS errorMessage; errorMessage << "OT::AtomicFunctions does NOT return the correct value (value=" << shaked << " should be " << NB_ITER * nbThreads << ")."; throw TestFailed(errorMessage); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Axial_std.cxx000066400000000000000000000031371307543307100201330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Axial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Point center(4, 0.0); center.setName("center"); center[0] = 0.5; center[1] = 1.5; center[2] = 2.5; center[3] = 3.5; Point levels(3, 0.0); levels.setName("levels"); levels[0] = 4; levels[1] = 8; levels[2] = 16; Axial myPlane(center, levels); fullprint << "myPlane = " << myPlane << std::endl; Sample sample(myPlane.generate()); fullprint << "sample = " << sample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Axial_std.expout000066400000000000000000000013671307543307100206600ustar00rootroot00000000000000myPlane = class=Axial name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Axial plane implementation=class=SampleImplementation name=Axial plane size=25 dimension=4 data=[[0.5,1.5,2.5,3.5],[4.5,1.5,2.5,3.5],[-3.5,1.5,2.5,3.5],[0.5,5.5,2.5,3.5],[0.5,-2.5,2.5,3.5],[0.5,1.5,6.5,3.5],[0.5,1.5,-1.5,3.5],[0.5,1.5,2.5,7.5],[0.5,1.5,2.5,-0.5],[8.5,1.5,2.5,3.5],[-7.5,1.5,2.5,3.5],[0.5,9.5,2.5,3.5],[0.5,-6.5,2.5,3.5],[0.5,1.5,10.5,3.5],[0.5,1.5,-5.5,3.5],[0.5,1.5,2.5,11.5],[0.5,1.5,2.5,-4.5],[16.5,1.5,2.5,3.5],[-15.5,1.5,2.5,3.5],[0.5,17.5,2.5,3.5],[0.5,-14.5,2.5,3.5],[0.5,1.5,18.5,3.5],[0.5,1.5,-13.5,3.5],[0.5,1.5,2.5,19.5],[0.5,1.5,2.5,-12.5]] openturns-1.9/lib/test/t_BarPlot_std.cxx000066400000000000000000000061571307543307100204450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BarPlot for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 1; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; CorrelationMatrix R = IdentityMatrix(dim); Normal distribution1(meanPoint, sigma, R); // Instanciate another distribution object meanPoint[0] = -1.5; sigma[0] = 4.0; Normal distribution2(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 2000; UnsignedInteger nBars = 20; Sample sample1(distribution1.getSample( size )); Sample sample2(distribution2.getSample( size )); // Construct histograms Scalar epsilon = 0.1; Scalar min1 = sample1.getMin()[0]; Scalar max1 = sample1.getMax()[0] + epsilon; Scalar min2 = sample2.getMin()[0]; Scalar max2 = sample2.getMax()[0] + epsilon; Point tmp(2); tmp[0] = (max1 - min1) / nBars; tmp[1] = 0; Sample data1(nBars, tmp); tmp[0] = (max2 - min2) / nBars; Sample data2(nBars, tmp); UnsignedInteger index; for(UnsignedInteger i = 0; i < size; i++) { index = static_cast(floor((sample1[i][0] - min1) / (max1 - min1) * nBars)); data1[index][1]++; index = static_cast(floor((sample2[i][0] - min2) / (max2 - min2) * nBars)); data2[index][1]++; } // Create an empty graph Graph myGraph("Some barplots", "y", "frequency", true, "topleft"); // Create the first barplot BarPlot myBarPlot1(data1, min1, "blue", "shaded", "dashed", "histogram1"); // Then, draw it myGraph.add(myBarPlot1); myGraph.draw("Graph_BarPlot_a_OT.png"); // Check that the correct files have been generated by computing their checksum // Create the second barplot BarPlot myBarPlot2(data2, min2, "red", "solid", "solid", "histogram2"); // Add it to the graph and draw everything myGraph.add(myBarPlot2); myGraph.draw("Graph_BarPlot_b_OT.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BarPlot_std.expout000066400000000000000000000000001307543307100211440ustar00rootroot00000000000000openturns-1.9/lib/test/t_BasisFactory_std.cxx000066400000000000000000000051151307543307100214640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of BasisFactory class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { try { UnsignedInteger inputDimension = 2; Point x(inputDimension); for (UnsignedInteger i = 0; i < inputDimension; ++ i) { x[i] = 2. + i; } std::cout << "x=" << x << std::endl; { ConstantBasisFactory factory(inputDimension); std::cout << "factory=" << factory << std::endl; Basis basis(factory.build()); std::cout << "basis=" << basis << std::endl; AggregatedFunction f(basis); Point y(f(x)); std::cout << "y=" << y << std::endl; } { LinearBasisFactory factory(inputDimension); std::cout << "factory=" << factory << std::endl; Basis basis(factory.build()); std::cout << "basis=" << basis << std::endl; AggregatedFunction f(basis); Point y(f(x)); std::cout << "y=" << y << std::endl; } { QuadraticBasisFactory factory(inputDimension); std::cout << "factory=" << factory << std::endl; Basis basis(factory.build()); std::cout << "basis=" << basis << std::endl; AggregatedFunction f(basis); Point y(f(x)); std::cout << "y=" << y << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BasisFactory_std.expout000066400000000000000000000023011307543307100222000ustar00rootroot00000000000000x=[2,3] factory=class=ConstantBasisFactory name=Unnamed basis=Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]]] ) y=[1] factory=class=LinearBasisFactory name=Unnamed basis=Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 1 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 0 ] [ 1 ]]] ) y=[1,2,3] factory=class=QuadraticBasisFactory name=Unnamed basis=Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 1 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 0 ] [ 1 ]],QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 1 0 ] [ 0 0 ]] ,QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 0 1 ] [ 1 0 ]] ,QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 0 0 ] [ 0 1 ]] ] ) y=[1,2,3,2,6,4.5] openturns-1.9/lib/test/t_BasisSequence_std.cxx000066400000000000000000000036401307543307100216260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BasisSequence for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); const UnsignedInteger dimension = 3; Description input; Description output[dimension]; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { OSS oss; oss << "x" << j; String in(oss); input.add(in); output[j].add(in); } Collection coll; Indices cumulBasis; Indices partialBasis[dimension]; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { Function ei(input, output[j], output[j]); coll.add(ei); cumulBasis.add(j); partialBasis[j] = cumulBasis; } Basis masterBasis(coll); BasisSequence seq(masterBasis); for ( UnsignedInteger j = 0; j < dimension; ++ j ) { seq.add(partialBasis[j]); } fullprint << "sequence = " << seq << std::endl; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { fullprint << "indices of subBasis[" << j << "] = " << seq[j] << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_BasisSequence_std.expout000066400000000000000000000037661307543307100223610ustar00rootroot00000000000000sequence = class=BasisSequence implementation=class=BasisSequenceImplementation collection=[[0],[0,1],[0,1,2]] masterBasis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2]] indices of subBasis[0] = [0] indices of subBasis[1] = [0,1] indices of subBasis[2] = [0,1,2] openturns-1.9/lib/test/t_Basis_std.cxx000066400000000000000000000031441307543307100201340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Basis for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); const UnsignedInteger dimension = 3; Description input; Description output[dimension]; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { OSS oss; oss << "x" << j; String in(oss); input.add(in); output[j].add(in); } Collection coll; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { Function ei(input, output[j], output[j]); coll.add(ei); } Basis myBasis(coll); fullprint << "basis = " << myBasis << std::endl; fullprint << "dimension = " << myBasis.getDimension() << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_Basis_std.expout000066400000000000000000000034641307543307100206630ustar00rootroot00000000000000basis = class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x1] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[x2] formulas=[x2]] dimension = 3 openturns-1.9/lib/test/t_BernoulliFactory_std.cxx000066400000000000000000000047641307543307100223670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Bernoulli for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Bernoulli distribution(0.7); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); BernoulliFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Bernoulli estimatedBernoulli(factory.buildAsBernoulli(sample)); fullprint << "Bernoulli =" << distribution << std::endl; fullprint << "Estimated Bernoulli=" << estimatedBernoulli << std::endl; estimatedBernoulli = factory.buildAsBernoulli(); fullprint << "Default Bernoulli=" << estimatedBernoulli << std::endl; estimatedBernoulli = factory.buildAsBernoulli(distribution.getParameter()); fullprint << "Bernoulli from parameters=" << estimatedBernoulli << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BernoulliFactory_std.expout000066400000000000000000000011021307543307100230700ustar00rootroot00000000000000Distribution =class=Bernoulli name=Bernoulli dimension=1 p=0.7 Estimated distribution=class=Bernoulli name=Bernoulli dimension=1 p=0.6916 Default distribution=class=Bernoulli name=Bernoulli dimension=1 p=0.5 Distribution from parameters=class=Bernoulli name=Bernoulli dimension=1 p=0.7 Bernoulli =class=Bernoulli name=Bernoulli dimension=1 p=0.7 Estimated Bernoulli=class=Bernoulli name=Bernoulli dimension=1 p=0.6916 Default Bernoulli=class=Bernoulli name=Bernoulli dimension=1 p=0.5 Bernoulli from parameters=class=Bernoulli name=Bernoulli dimension=1 p=0.7 openturns-1.9/lib/test/t_Bernoulli_std.cxx000066400000000000000000000132321307543307100210250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Bernoulli for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Bernoulli { public: TestObject() : Bernoulli(0.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Bernoulli distribution(0.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 0.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( 0.5 ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( 0.5 ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Bernoulli::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; fullprint << "probabilities=" << distribution.getProbabilities() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Bernoulli_std.expout000066400000000000000000000050701307543307100215500ustar00rootroot00000000000000Testing class Bernoulli checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Bernoulli name=Bernoulli dimension=1 p=0.7 streamObject(const T & anObject) class=Bernoulli name=Bernoulli dimension=1 p=0.7 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Bernoulli name=Bernoulli dimension=1 p=0.7 Distribution Bernoulli(p = 0.7) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[1] oneSample first=class=Point name=Unnamed dimension=1 values=[0] last=class=Point name=Unnamed dimension=1 values=[1] mean=class=Point name=Unnamed dimension=1 values=[0.6916] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.213311] Point= class=Point name=Unnamed dimension=1 values=[0] log pdf=-1.20397 pdf =0.3 pdf (FD)=0.3 cdf=0.3 ccdf=0.7 survival=0.7 characteristic function=(0.914308,0.335598) log characteristic function=(-0.0263921,0.351784) generating function=(0.51,0.49) log generating function=(-0.346374,0.765401) quantile=class=Point name=Unnamed dimension=1 values=[1] cdf(quantile)=1 mean=class=Point name=Unnamed dimension=1 values=[0.7] standard deviation=class=Point name=Unnamed dimension=1 values=[0.458258] skewness=class=Point name=Unnamed dimension=1 values=[-0.872872] kurtosis=class=Point name=Unnamed dimension=1 values=[13.7619] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.21] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[p : 0.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.7] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.7] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.7] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.7] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.7] Standard representative=Bernoulli(p = 0.7) probabilities=class=Point name=Unnamed dimension=2 values=[0.3,0.7] openturns-1.9/lib/test/t_BernsteinCopulaFactory_std.cxx000066400000000000000000000040631307543307100235210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BernsteinCopulaFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Collection coll; coll.add(GumbelCopula(3.0)); coll.add(ClaytonCopula(3.0)); coll.add(FrankCopula(3.0)); Point point(2); UnsignedInteger size = 1000; for (UnsignedInteger i = 0; i < coll.getSize(); ++i) { Copula ref_copula(coll[i]); fullprint << "Reference copula" << ref_copula << std::endl; Sample sample(ref_copula.getSample(size)); Distribution est_copula(BernsteinCopulaFactory().build(sample)); Scalar max_error = 0.0; for (UnsignedInteger m = 0; m < 11; ++m) { point[0] = 0.1 * m; for (UnsignedInteger n = 0; n < 11; ++n) { point[1] = 0.1 * n; max_error = std::max(max_error, std::abs(ref_copula.computeCDF(point) - est_copula.computeCDF(point))); } } fullprint << "Max. error=" << max_error << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BernsteinCopulaFactory_std.expout000066400000000000000000000004311307543307100242360ustar00rootroot00000000000000Reference copulaclass=GumbelCopula name=GumbelCopula dimension=2 theta=3 Max. error=0.039628 Reference copulaclass=ClaytonCopula name=ClaytonCopula dimension=2 theta=3 Max. error=0.0378453 Reference copulaclass=FrankCopula name=FrankCopula dimension=2 theta=3 Max. error=0.0174008 openturns-1.9/lib/test/t_BetaFactory_std.cxx000066400000000000000000000100421307543307100212710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Beta for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Beta distribution(0.2, 0.6, -1.0, 2.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); BetaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Beta(0.5, 1.3, -1.0, 2.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Beta(0.5, 2.3, -1.0, 2.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Beta(1.5, 4.3, -1.0, 2.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Beta estimatedBeta(factory.buildAsBeta(sample)); fullprint << "Beta =" << distribution << std::endl; fullprint << "Estimated Beta=" << estimatedBeta << std::endl; estimatedBeta = factory.buildAsBeta(); fullprint << "Default Beta=" << estimatedBeta << std::endl; estimatedBeta = factory.buildAsBeta(distribution.getParameter()); fullprint << "Beta from parameters=" << estimatedBeta << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BetaFactory_std.expout000066400000000000000000000024351307543307100220220ustar00rootroot00000000000000Distribution =class=Beta name=Beta dimension=1 r=0.2 t=0.6 a=-1 b=2 Estimated distribution=class=Beta name=Beta dimension=1 r=0.2007 t=0.598761 a=-1.0001 b=2.0002 Distribution =class=Beta name=Beta dimension=1 r=0.5 t=1.3 a=-1 b=2 Estimated distribution=class=Beta name=Beta dimension=1 r=0.490819 t=1.25193 a=-1.0001 b=2.0002 Distribution =class=Beta name=Beta dimension=1 r=0.5 t=2.3 a=-1 b=2 Estimated distribution=class=Beta name=Beta dimension=1 r=0.50081 t=2.29485 a=-1.0001 b=1.98667 Distribution =class=Beta name=Beta dimension=1 r=1.5 t=4.3 a=-1 b=2 Estimated distribution=class=Beta name=Beta dimension=1 r=1.43176 t=3.95068 a=-0.995542 b=1.87405 Default distribution=class=Beta name=Beta dimension=1 r=2 t=4 a=-1 b=1 Distribution from parameters=class=Beta name=Beta dimension=1 r=1.5 t=4.3 a=-1 b=2 Beta =class=Beta name=Beta dimension=1 r=1.5 t=4.3 a=-1 b=2 Estimated Beta=class=Beta name=Beta dimension=1 r=1.43176 t=3.95068 a=-0.995542 b=1.87405 Default Beta=class=Beta name=Beta dimension=1 r=2 t=4 a=-1 b=1 Beta from parameters=class=Beta name=Beta dimension=1 r=1.5 t=4.3 a=-1 b=2 Estimated distribution=class=Beta name=Beta dimension=1 r=1 t=2 a=-2.22045e-14 b=2.22045e-14 Estimated distribution=class=Beta name=Beta dimension=1 r=1 t=2 a=1 b=1 openturns-1.9/lib/test/t_Beta_std.cxx000066400000000000000000000234071307543307100177520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Beta for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Beta { public: TestObject() : Beta(2., 5., -1., 2.) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Beta distribution(2.0, 5.0, -1.0, 2.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; //RandomGenerator::SetSeed(0); size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(4); PDFgrFD[0] = (Beta(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point) - Beta(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Beta(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computePDF(point) - Beta(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Beta(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computePDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[3] = (Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computePDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(4); CDFgrFD[0] = (Beta(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point) - Beta(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Beta(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computeCDF(point) - Beta(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Beta(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computeCDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[3] = (Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computeCDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Beta::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Beta_std.expout000066400000000000000000000117601307543307100204730ustar00rootroot00000000000000Testing class Beta checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Beta name=Beta dimension=1 r=2 t=5 a=-1 b=2 streamObject(const T & anObject) class=Beta name=Beta dimension=1 r=2 t=5 a=-1 b=2 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Beta name=Beta dimension=1 r=2 t=5 a=-1 b=2 Distribution Beta(r = 2, t = 5, a = -1, b = 2) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.456966] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.504347] last=class=Point name=Unnamed dimension=1 values=[-0.367645] mean=class=Point name=Unnamed dimension=1 values=[0.203901] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.365788] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.444444] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.444444] log pdf=-1.2164 pdf =0.296296 pdf (FD)=0.296296 cdf=0.888889 ccdf=0.111111 survival=0.111111 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.707166] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[1.25419] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=1 values=[-0.707166] cdf (tail)=0.95 characteristic function=(0.817458,0.156352) log characteristic function=(-0.183591,0.188983) pdf gradient =class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] cdf gradient =class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] cdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.868627] upper bound=class=Point name=Unnamed dimension=1 values=[1.31692] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Beta(r = 2, t = 5, a = -1, b = 2)) gradientImplementation=MinimumVolumeLevelSetGradient(Beta(r = 2, t = 5, a = -1, b = 2)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Beta(r = 2, t = 5, a = -1, b = 2)) level=1.83159 beta=0.160159 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.797242] upper bound=class=Point name=Unnamed dimension=1 values=[1.41764] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[1.25419] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.707166] upper bound=class=Point name=Unnamed dimension=1 values=[2] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.2] standard deviation=class=Point name=Unnamed dimension=1 values=[0.6] skewness=class=Point name=Unnamed dimension=1 values=[0.285714] kurtosis=class=Point name=Unnamed dimension=1 values=[2.35714] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.36] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[r : 2, t : 5, a : -1, b : 2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[-0.2] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[-0.0857143] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.0857143] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[-0.047619] Standard representative=Beta(r = 2, t = 5, a = -1, b = 1) openturns-1.9/lib/test/t_BinomialFactory_std.cxx000066400000000000000000000047471307543307100221670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Binomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Binomial distribution(15, 0.7); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); BinomialFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Binomial estimatedBinomial(factory.buildAsBinomial(sample)); fullprint << "Binomial =" << distribution << std::endl; fullprint << "Estimated binomial=" << estimatedBinomial << std::endl; estimatedBinomial = factory.buildAsBinomial(); fullprint << "Default binomial=" << estimatedBinomial << std::endl; estimatedBinomial = factory.buildAsBinomial(distribution.getParameter()); fullprint << "Binomial from parameters=" << estimatedBinomial << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BinomialFactory_std.expout000066400000000000000000000011261307543307100226750ustar00rootroot00000000000000Distribution =class=Binomial name=Binomial dimension=1 n=15 p=0.7 Estimated distribution=class=Binomial name=Binomial dimension=1 n=15 p=0.69894 Default distribution=class=Binomial name=Binomial dimension=1 n=1 p=0.5 Distribution from parameters=class=Binomial name=Binomial dimension=1 n=15 p=0.7 Binomial =class=Binomial name=Binomial dimension=1 n=15 p=0.7 Estimated binomial=class=Binomial name=Binomial dimension=1 n=15 p=0.69894 Default binomial=class=Binomial name=Binomial dimension=1 n=1 p=0.5 Binomial from parameters=class=Binomial name=Binomial dimension=1 n=15 p=0.7 openturns-1.9/lib/test/t_Binomial_std.cxx000066400000000000000000000135361307543307100206330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Binomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Binomial { public: TestObject() : Binomial(15, 0.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Binomial distribution(15, 0.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 5.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Binomial::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Binomial_std.expout000066400000000000000000000052461307543307100213540ustar00rootroot00000000000000Testing class Binomial checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Binomial name=Binomial dimension=1 n=15 p=0.7 streamObject(const T & anObject) class=Binomial name=Binomial dimension=1 n=15 p=0.7 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Binomial name=Binomial dimension=1 n=15 p=0.7 Distribution Binomial(n = 15, p = 0.7) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[10] oneSample first=class=Point name=Unnamed dimension=1 values=[8] last=class=Point name=Unnamed dimension=1 values=[11] mean=class=Point name=Unnamed dimension=1 values=[10.4842] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.20027] Point= class=Point name=Unnamed dimension=1 values=[5] log pdf=-5.81574 pdf =0.00298029 pdf (FD)=0.00298029 cdf=0.00365252 ccdf=0.996347 survival=0.996347 quantile=class=Point name=Unnamed dimension=1 values=[13] cdf(quantile)=0.964732 quantile (tail)=class=Point name=Unnamed dimension=1 values=[6] cdf (tail)=0.984757 characteristic function=(0.0107296,-0.0674204) log characteristic function=(-2.6843,-13.9793) generating function=(0.00258535,-0.00490073) log generating function=(-5.1956,11.481) mean=class=Point name=Unnamed dimension=1 values=[10.5] standard deviation=class=Point name=Unnamed dimension=1 values=[1.77482] skewness=class=Point name=Unnamed dimension=1 values=[-0.225374] kurtosis=class=Point name=Unnamed dimension=1 values=[2.91746] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.15] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[n : 15, p : 0.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[10.5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[113.4] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1255.59] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[14214.8] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[164186] Standard representative=Binomial(n = 15, p = 0.7) openturns-1.9/lib/test/t_BipartiteGraph_std.cxx000066400000000000000000000035251307543307100220030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Indices for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger size = 4; Indices indices(size, 0); for (UnsignedInteger i = 0; i < size; i++) { indices[i] = i; } fullprint << "indices=" << indices << std::endl; fullprint << "are indices valid with bound=" << size << "? " << (indices.check(size) ? "true" : "false") << std::endl; fullprint << "are indices valid with bound=" << size / 2 << "? " << (indices.check(size / 2) ? "true" : "false") << std::endl; indices[0] = indices[size - 1]; fullprint << "indices after transformation=" << indices << std::endl; fullprint << "are indices valid with bound=" << size << "? " << (indices.check(size) ? "true" : "false") << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BipartiteGraph_std.expout000066400000000000000000000002521307543307100225170ustar00rootroot00000000000000indices=[0,1,2,3] are indices valid with bound=4? true are indices valid with bound=2? false indices after transformation=[3,1,2,3] are indices valid with bound=4? false openturns-1.9/lib/test/t_Bisection_std.cxx000066400000000000000000000034441307543307100210150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Bisection for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** Analytical construction */ Description input(1); input[0] = "x"; Description output(1); output[0] = "y"; Description formulas(output.getSize()); formulas[0] = "x-cos(x)"; Function analytical(input, output, formulas); Bisection myAlgo; fullprint << "myAlgo=" << myAlgo << std::endl; Scalar value = 0.0; fullprint << "Solve " << formulas[0] << "=" << value << " for " << input[0] << std::endl; OSS oss; oss.setPrecision(5); fullprint << "x=" << String(oss << myAlgo.solve(analytical, value, 0.0, 3.0)) << std::endl; fullprint << "myAlgo=" << myAlgo << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Bisection_std.expout000066400000000000000000000006061307543307100215340ustar00rootroot00000000000000myAlgo=class=Bisection derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 Solve x-cos(x)=0 for x x=0.73908 myAlgo=class=Bisection derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=19 openturns-1.9/lib/test/t_BootstrapExperiment_std.cxx000066400000000000000000000034051307543307100231110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BootstrapExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger size = 5; UnsignedInteger dim = 6; Sample refSample(size, dim); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dim; ++j) refSample[i][j] = i + j; fullprint << "ref. sample=" << refSample << std::endl; BootstrapExperiment myPlane(refSample); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BootstrapExperiment_std.expout000066400000000000000000000015471307543307100236400ustar00rootroot00000000000000ref. sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] myPlane = class=BootstrapExperiment name=Unnamed distribution=class=UserDefined name=UserDefined dimension=6 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] probabilities=class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] size=5 sample = class=Sample name=UserDefined implementation=class=SampleImplementation name=UserDefined size=5 dimension=6 description=[v0,v1,v2,v3,v4,v5] data=[[4,5,6,7,8,9],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[2,3,4,5,6,7]] weights = class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] openturns-1.9/lib/test/t_BoxCoxEvaluation_std.cxx000066400000000000000000000063611307543307100223310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BoxCoxEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger dimension = 3; // Lambda Point lambda(dimension); lambda[0] = 0.0; lambda[1] = 0.5; lambda[2] = 1.0; // With zero shift { BoxCoxEvaluation myFunction(lambda); myFunction.setName("boxCoxFunction"); // In this test, we check that for a Point with same values, the function is done by component Point inPoint(dimension, 3.0); // result of the function Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; // Creation of a Sample const UnsignedInteger size = 10; Sample inSample(size, dimension); for (UnsignedInteger index = 0 ; index < size; ++index) { inSample[index] = Point(dimension, index + 1); } // result of the function Sample outSample = myFunction( inSample ); fullprint << myFunction.getName() << "( " << inSample << " ) = " << outSample << std::endl; } // With non-zero shift { // Shift Point shift(dimension); shift[0] = 0.8; shift[1] = 1.5; shift[2] = 2.1; BoxCoxEvaluation myFunction(lambda, shift); myFunction.setName("boxCoxFunction"); // In this test, we check that for a Point with same values, the function is done by component Point inPoint(dimension, 3.0); // result of the function Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; // Creation of a Sample const UnsignedInteger size = 10; Sample inSample(size, dimension); for (UnsignedInteger index = 0 ; index < size; ++index) { inSample[index] = Point(dimension, index + 1); } // result of the function Sample outSample = myFunction( inSample ); fullprint << myFunction.getName() << "( " << inSample << " ) = " << outSample << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BoxCoxEvaluation_std.expout000066400000000000000000000033001307543307100230410ustar00rootroot00000000000000myFunction=class=BoxCoxEvaluation name=boxCoxFunction dimension=3 lambda=class=Point name=Unnamed dimension=3 values=[0,0.5,1] shift=class=Point name=Unnamed dimension=3 values=[0,0,0] boxCoxFunction( class=Point name=Unnamed dimension=3 values=[3,3,3] ) = class=Point name=Unnamed dimension=3 values=[1.09861,1.4641,2] boxCoxFunction( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6],[7,7,7],[8,8,8],[9,9,9],[10,10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 description=[y0,y1,y2] data=[[0,0,0],[0.693147,0.828427,1],[1.09861,1.4641,2],[1.38629,2,3],[1.60944,2.47214,4],[1.79176,2.89898,5],[1.94591,3.2915,6],[2.07944,3.65685,7],[2.19722,4,8],[2.30259,4.32456,9]] myFunction=class=BoxCoxEvaluation name=boxCoxFunction dimension=3 lambda=class=Point name=Unnamed dimension=3 values=[0,0.5,1] shift=class=Point name=Unnamed dimension=3 values=[0.8,1.5,2.1] boxCoxFunction( class=Point name=Unnamed dimension=3 values=[3,3,3] ) = class=Point name=Unnamed dimension=3 values=[1.335,2.24264,4.1] boxCoxFunction( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6],[7,7,7],[8,8,8],[9,9,9],[10,10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 description=[y0,y1,y2] data=[[0.587787,1.16228,2.1],[1.02962,1.74166,3.1],[1.335,2.24264,4.1],[1.56862,2.69042,5.1],[1.75786,3.09902,6.1],[1.91692,3.47723,7.1],[2.05412,3.83095,8.1],[2.17475,4.16441,9.1],[2.28238,4.48074,10.1],[2.37955,4.78233,11.1]] openturns-1.9/lib/test/t_BoxCoxFactory_glm.cxx000066400000000000000000000046611307543307100216170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BoxCoxFactory for standard methods using GLM * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { const UnsignedInteger size = 200; // input sample const Sample inputSample = Uniform(-1.0, 1.0).getSample(size); Sample outputSample(inputSample); // Evaluation of y = ax + b (a: scale, b: translate) // scale const Point scale(1, 3.0); outputSample *= scale; // translate sample const Point translate(1, 3.1); outputSample += translate; // Finally inverse transform using an arbitrary lambda const Point lambda(1, 1.8); const InverseBoxCoxEvaluation boxCoxFunction(lambda); // transform y using BoxCox function outputSample = boxCoxFunction(outputSample); // Add small noise const Sample epsilon = Normal(0, 1e-2).getSample(size); outputSample += epsilon; // Now we build the factory BoxCoxFactory factory; // Creation of the BoxCoxTransform GeneralLinearModelResult result; const Basis basis = LinearBasisFactory(1).build(); const DiracCovarianceModel covarianceModel; const Point shift(1, 1.0e-1); BoxCoxTransform myBoxCox = factory.build(inputSample, outputSample, covarianceModel, basis, shift, result); fullprint << "myBoxCox (GLM)=" << myBoxCox << std::endl; fullprint << "GLM result=" << result << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BoxCoxFactory_glm.expout000066400000000000000000000051051307543307100223330ustar00rootroot00000000000000myBoxCox (GLM)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.80518] shift=class=Point name=Unnamed dimension=1 values=[0.1] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.80518] shift=class=Point name=Unnamed dimension=1 values=[0.1] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.80518] shift=class=Point name=Unnamed dimension=1 values=[0.1] GLM result=class=GeneralLinearModelResult, covariance models=class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=1 values=[0.0245747], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[], basis=[class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=1 values=[0] constant=class=Point name=Unnamed dimension=1 values=[1] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=1 columns=1 sheets=1 values=[0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=1 values=[0] constant=class=Point name=Unnamed dimension=1 values=[0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=1 columns=1 sheets=1 values=[0]]], trend coefficients=[class=Point name=Unnamed dimension=2 values=[3.33898,3.11022]] openturns-1.9/lib/test/t_BoxCoxFactory_std.cxx000066400000000000000000000050711307543307100216260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BoxCoxFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // TimeGrid parameters const UnsignedInteger n = 101; const Scalar timeStart = 0.0; const Scalar timeStep = 0.1; RegularGrid timeGrid(timeStart, timeStep, n); // White noise const WhiteNoise whiteNoise(Uniform(), timeGrid); // Composite process const CompositeProcess process(ValueFunction(SymbolicFunction("x", "x+2")), whiteNoise); // A realization of the process const TimeSeries timeSeries(process.getRealization()); const Sample sample(timeSeries.getSample()); // Now we build the factory BoxCoxFactory factory; // Creation of the BoxCoxTransform BoxCoxTransform myBoxCox(factory.build(timeSeries)); fullprint << "myBoxCox (time-series)=" << myBoxCox << std::endl; fullprint << "myBoxCox (sample) =" << factory.build(sample) << std::endl; // Creation of the BoxCoxTransform using shift Point shift(1, 1.0); BoxCoxTransform myBoxCoxShift(factory.build(timeSeries, shift)); fullprint << "myBoxCox with shift (time-series)=" << myBoxCoxShift << std::endl; fullprint << "myBoxCox with shift (sample) =" << factory.build(sample, shift) << std::endl; // Creation of the BoxCoxTransform using shift with graph Graph graph; BoxCoxTransform myBoxCoxShiftGraph(factory.build(timeSeries, shift, graph)); fullprint << "BoxCox graph (time-series)=" << graph << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BoxCoxFactory_std.expout000066400000000000000000000165121307543307100223520ustar00rootroot00000000000000myBoxCox (time-series)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] myBoxCox (sample) =class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.962794] shift=class=Point name=Unnamed dimension=1 values=[0] myBoxCox with shift (time-series)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] myBoxCox with shift (sample) =class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[1.07478] shift=class=Point name=Unnamed dimension=1 values=[1] BoxCox graph (time-series)=class=Graph name=Box-Cox likelihood implementation=class=GraphImplementation name=Box-Cox likelihood title=Box-Cox likelihood xTitle=lambda yTitle=log-likelihood axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=201 dimension=2 data=[[0,53.6742],[0.01075,53.7109],[0.0215,53.7471],[0.03225,53.783],[0.043,53.8184],[0.05375,53.8536],[0.0645,53.8883],[0.07525,53.9226],[0.086,53.9566],[0.09675,53.9902],[0.1075,54.0234],[0.11825,54.0563],[0.129,54.0887],[0.13975,54.1208],[0.1505,54.1525],[0.16125,54.1839],[0.172,54.2148],[0.18275,54.2454],[0.1935,54.2756],[0.20425,54.3055],[0.215,54.3349],[0.22575,54.364],[0.2365,54.3927],[0.24725,54.4211],[0.258,54.449],[0.26875,54.4766],[0.2795,54.5038],[0.29025,54.5307],[0.301,54.5571],[0.31175,54.5832],[0.3225,54.609],[0.33325,54.6343],[0.344,54.6593],[0.35475,54.6839],[0.3655,54.7081],[0.37625,54.732],[0.387,54.7555],[0.39775,54.7786],[0.4085,54.8013],[0.41925,54.8237],[0.43,54.8457],[0.44075,54.8673],[0.4515,54.8886],[0.46225,54.9095],[0.473,54.93],[0.48375,54.9501],[0.4945,54.9699],[0.50525,54.9893],[0.516,55.0083],[0.52675,55.027],[0.5375,55.0453],[0.54825,55.0632],[0.559,55.0808],[0.56975,55.098],[0.5805,55.1148],[0.59125,55.1313],[0.602,55.1474],[0.61275,55.1631],[0.6235,55.1784],[0.63425,55.1934],[0.645,55.2081],[0.65575,55.2223],[0.6665,55.2362],[0.67725,55.2497],[0.688,55.2629],[0.69875,55.2757],[0.7095,55.2881],[0.72025,55.3002],[0.731,55.3119],[0.74175,55.3232],[0.7525,55.3342],[0.76325,55.3448],[0.774,55.355],[0.78475,55.3649],[0.7955,55.3744],[0.80625,55.3836],[0.817,55.3924],[0.82775,55.4008],[0.8385,55.4089],[0.84925,55.4166],[0.86,55.4239],[0.87075,55.4309],[0.8815,55.4375],[0.89225,55.4438],[0.903,55.4497],[0.91375,55.4552],[0.9245,55.4604],[0.93525,55.4652],[0.946,55.4697],[0.95675,55.4738],[0.9675,55.4775],[0.97825,55.4809],[0.989,55.4839],[0.99975,55.4866],[1.0105,55.4889],[1.02125,55.4909],[1.032,55.4925],[1.04275,55.4937],[1.0535,55.4946],[1.06425,55.4951],[1.075,55.4953],[1.08575,55.4951],[1.0965,55.4946],[1.10725,55.4937],[1.118,55.4924],[1.12875,55.4908],[1.1395,55.4888],[1.15025,55.4865],[1.161,55.4839],[1.17175,55.4808],[1.1825,55.4775],[1.19325,55.4737],[1.204,55.4697],[1.21475,55.4652],[1.2255,55.4605],[1.23625,55.4553],[1.247,55.4498],[1.25775,55.444],[1.2685,55.4378],[1.27925,55.4313],[1.29,55.4244],[1.30075,55.4172],[1.3115,55.4096],[1.32225,55.4016],[1.333,55.3934],[1.34375,55.3847],[1.3545,55.3758],[1.36525,55.3664],[1.376,55.3567],[1.38675,55.3467],[1.3975,55.3364],[1.40825,55.3256],[1.419,55.3146],[1.42975,55.3032],[1.4405,55.2914],[1.45125,55.2793],[1.462,55.2669],[1.47275,55.2541],[1.4835,55.241],[1.49425,55.2275],[1.505,55.2137],[1.51575,55.1995],[1.5265,55.185],[1.53725,55.1702],[1.548,55.155],[1.55875,55.1395],[1.5695,55.1236],[1.58025,55.1074],[1.591,55.0908],[1.60175,55.0739],[1.6125,55.0567],[1.62325,55.0391],[1.634,55.0212],[1.64475,55.0029],[1.6555,54.9844],[1.66625,54.9654],[1.677,54.9462],[1.68775,54.9265],[1.6985,54.9066],[1.70925,54.8863],[1.72,54.8657],[1.73075,54.8448],[1.7415,54.8235],[1.75225,54.8018],[1.763,54.7799],[1.77375,54.7576],[1.7845,54.735],[1.79525,54.712],[1.806,54.6887],[1.81675,54.6651],[1.8275,54.6411],[1.83825,54.6168],[1.849,54.5922],[1.85975,54.5672],[1.8705,54.5419],[1.88125,54.5163],[1.892,54.4903],[1.90275,54.464],[1.9135,54.4374],[1.92425,54.4105],[1.935,54.3832],[1.94575,54.3556],[1.9565,54.3276],[1.96725,54.2994],[1.978,54.2708],[1.98875,54.2419],[1.9995,54.2126],[2.01025,54.183],[2.021,54.1531],[2.03175,54.1229],[2.0425,54.0924],[2.05325,54.0615],[2.064,54.0303],[2.07475,53.9988],[2.0855,53.9669],[2.09625,53.9347],[2.107,53.9022],[2.11775,53.8694],[2.1285,53.8362],[2.13925,53.8028],[2.15,53.769]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=lambda=1.07478 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[1.07478,55.4953]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=circle lineWidth=1] openturns-1.9/lib/test/t_BoxCoxTransform_std.cxx000066400000000000000000000053031307543307100221700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class BoxCoxTransform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Realization issued from a Normal distribution const UnsignedInteger dimension = 1; // Fix the realization as a Normal // Parameters are done such as the values are positive Normal myDistribution(10, 3); // get a realization const UnsignedInteger n = 101; const Scalar timeStart = 0.; const Scalar timeStep = 0.1; Sample mySample(myDistribution.getSample(n)); RegularGrid myTimeGrid(timeStart, timeStep, n); /* Create a TimeSeries */ const TimeSeries myRealization(myTimeGrid, mySample); // Create the lambda parameter Point lambda(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { lambda[index] = (index + 2) * 0.1; } BoxCoxTransform myBoxCox(lambda); fullprint << "myBoxCox=" << myBoxCox << std::endl; /* Get the input and output dimension */ fullprint << "myBoxCox input dimension=" << myBoxCox.getInputDimension() << std::endl; fullprint << "myBoxCox output dimension=" << myBoxCox.getOutputDimension() << std::endl; // BoxCoxTransform fullprint << "input time series=" << myRealization << std::endl; fullprint << "output time series=" << myBoxCox(myRealization) << std::endl; /* BoxCoxTransform's inverse accessor */ InverseBoxCoxTransform myInverseBoxCox(myBoxCox.getInverse()); fullprint << "myInverseBoxCox=" << myInverseBoxCox << std::endl; /* Get the number of calls */ fullprint << "number of call(s) : " << myBoxCox.getCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BoxCoxTransform_std.expout000066400000000000000000000161101307543307100227100ustar00rootroot00000000000000myBoxCox=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] myBoxCox input dimension=1 myBoxCox output dimension=1 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=101 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5],[5.1],[5.2],[5.3],[5.4],[5.5],[5.6],[5.7],[5.8],[5.9],[6],[6.1],[6.2],[6.3],[6.4],[6.5],[6.6],[6.7],[6.8],[6.9],[7],[7.1],[7.2],[7.3],[7.4],[7.5],[7.6],[7.7],[7.8],[7.9],[8],[8.1],[8.2],[8.3],[8.4],[8.5],[8.6],[8.7],[8.8],[8.9],[9],[9.1],[9.2],[9.3],[9.4],[9.5],[9.6],[9.7],[9.8],[9.9],[10]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,53],[53,54],[54,55],[55,56],[56,57],[57,58],[58,59],[59,60],[60,61],[61,62],[62,63],[63,64],[64,65],[65,66],[66,67],[67,68],[68,69],[69,70],[70,71],[71,72],[72,73],[73,74],[74,75],[75,76],[76,77],[77,78],[78,79],[79,80],[80,81],[81,82],[82,83],[83,84],[84,85],[85,86],[86,87],[87,88],[88,89],[89,90],[90,91],[91,92],[92,93],[93,94],[94,95],[95,96],[96,97],[97,98],[98,99],[99,100]] values=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=101 dimension=1 description=[X0] data=[[11.8246],[6.20148],[8.6852],[13.6164],[3.45584],[11.0501],[8.93498],[14.3117],[12.432],[12.3795],[8.58842],[10.7831],[3.12981],[6.15134],[6.06466],[9.72765],[12.9874],[9.58164],[8.31938],[11.3365],[10.9688],[11.3374],[6.88577],[7.42986],[11.4209],[9.62351],[11.0543],[15.3471],[10.2106],[7.6559],[7.8354],[9.27633],[4.63611],[11.2041],[14.1035],[13.013],[12.2246],[9.86916],[11.618],[10.8999],[11.2232],[8.54466],[8.85102],[7.74155],[10.7738],[15.9063],[7.98613],[15.5674],[10.1565],[12.3713],[12.1491],[7.76913],[10.5531],[5.4078],[11.9651],[11.6142],[15.2146],[7.12383],[11.1338],[9.45699],[15.0189],[6.88312],[8.93934],[13.6414],[7.6689],[5.89441],[10.3104],[7.32454],[12.7168],[11.0044],[8.54908],[12.0339],[15.1281],[13.2119],[8.47923],[5.01741],[16.7387],[12.2788],[8.46771],[8.1008],[7.12878],[11.6321],[12.4437],[7.79587],[9.66562],[12.9834],[9.51812],[7.18369],[4.09393],[8.02719],[11.0163],[13.0467],[11.9115],[9.73028],[7.43234],[13.8138],[9.28524],[13.9789],[16.359],[7.29526],[5.44911]] start=0 timeStep=0.1 n=101 output time series=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=101 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5],[5.1],[5.2],[5.3],[5.4],[5.5],[5.6],[5.7],[5.8],[5.9],[6],[6.1],[6.2],[6.3],[6.4],[6.5],[6.6],[6.7],[6.8],[6.9],[7],[7.1],[7.2],[7.3],[7.4],[7.5],[7.6],[7.7],[7.8],[7.9],[8],[8.1],[8.2],[8.3],[8.4],[8.5],[8.6],[8.7],[8.8],[8.9],[9],[9.1],[9.2],[9.3],[9.4],[9.5],[9.6],[9.7],[9.8],[9.9],[10]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,53],[53,54],[54,55],[55,56],[56,57],[57,58],[58,59],[59,60],[60,61],[61,62],[62,63],[63,64],[64,65],[65,66],[66,67],[67,68],[68,69],[69,70],[70,71],[71,72],[72,73],[73,74],[74,75],[75,76],[76,77],[77,78],[78,79],[79,80],[80,81],[81,82],[82,83],[83,84],[84,85],[85,86],[86,87],[87,88],[88,89],[89,90],[90,91],[91,92],[92,93],[93,94],[94,95],[95,96],[96,97],[97,98],[98,99],[99,100]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=101 dimension=1 description=[y0] data=[[3.19459],[2.20226],[2.70417],[3.42913],[1.40739],[3.08432],[2.74798],[3.51351],[3.2771],[3.27009],[2.68693],[3.04486],[1.28165],[2.19058],[2.1702],[2.88082],[3.34977],[2.85702],[2.63815],[3.12579],[3.07238],[3.12592],[2.35462],[2.46734],[3.13785],[2.86388],[3.08492],[3.63327],[2.95757],[2.51224],[2.54714],[2.8063],[1.79518],[3.10672],[3.48858],[3.35306],[3.2493],[2.90362],[3.16576],[3.06221],[3.10948],[2.67908],[2.73337],[2.52897],[3.04347],[3.69528],[2.57595],[3.65791],[2.94911],[3.26901],[3.23908],[2.53433],[3.01024],[2.00768],[3.21397],[3.16522],[3.61831],[2.40479],[3.09652],[2.83647],[3.59602],[2.35406],[2.74874],[3.43222],[2.51479],[2.12948],[2.97306],[2.44605],[3.31468],[3.07761],[2.67987],[3.22339],[3.60849],[3.37843],[2.66728],[1.90345],[3.78444],[3.2566],[2.66519],[2.59759],[2.40582],[3.16774],[3.27866],[2.53951],[2.87075],[3.34926],[2.84658],[2.41719],[1.62824],[2.58373],[3.07936],[3.35738],[3.2066],[2.88125],[2.46784],[3.45343],[2.8078],[3.47353],[3.74423],[2.44009],[2.01835]] myInverseBoxCox=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=InverseBoxCoxGradient name=Unnamed evaluation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=InverseBoxCoxHessian name=Unnamed evaluation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] number of call(s) : 101 openturns-1.9/lib/test/t_Box_std.cxx000066400000000000000000000026621307543307100176270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Box for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Point levels(2, 0.0); levels.setName("levels"); levels[0] = 4; levels[1] = 4; Box myPlane(levels); fullprint << "myPlane = " << myPlane << std::endl; Sample sample(myPlane.generate()); fullprint << "sample = " << sample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Box_std.expout000066400000000000000000000013431307543307100203440ustar00rootroot00000000000000myPlane = class=Box name=Unnamed levels=class=Point name=levels dimension=2 values=[4,4] bounds=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[0,0],[0.2,0],[0.4,0],[0.6,0],[0.8,0],[1,0],[0,0.2],[0.2,0.2],[0.4,0.2],[0.6,0.2],[0.8,0.2],[1,0.2],[0,0.4],[0.2,0.4],[0.4,0.4],[0.6,0.4],[0.8,0.4],[1,0.4],[0,0.6],[0.2,0.6],[0.4,0.6],[0.6,0.6],[0.8,0.6],[1,0.6],[0,0.8],[0.2,0.8],[0.4,0.8],[0.6,0.8],[0.8,0.8],[1,0.8],[0,1],[0.2,1],[0.4,1],[0.6,1],[0.8,1],[1,1]] openturns-1.9/lib/test/t_Brent_std.cxx000066400000000000000000000034431307543307100201470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Brent for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** Analytical construction */ Description input(1); input[0] = "x"; Description output(1); output[0] = "y"; Description formulas(output.getSize()); formulas[0] = "x-cos(x)"; Function analytical(input, output, formulas); Brent myAlgo; fullprint << "myAlgo=" << myAlgo << std::endl; Scalar value = 0.0; fullprint << "Solve " << formulas[0] << "=" << value << " for " << input[0] << std::endl; OSS oss; oss.setPrecision(5); fullprint << "x=" << String(oss << myAlgo.solve(analytical, value, -4.0, 4.0 / 3.0)) << std::endl; fullprint << "myAlgo=" << myAlgo << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Brent_std.expout000066400000000000000000000005751307543307100206740ustar00rootroot00000000000000myAlgo=class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 Solve x-cos(x)=0 for x x=0.73908 myAlgo=class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=8 openturns-1.9/lib/test/t_BurrFactory_std.cxx000066400000000000000000000046441307543307100213430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Burr for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Burr distribution(2.5, 1.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); BurrFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Burr estimatedBurr(factory.buildAsBurr(sample)); fullprint << "Burr =" << distribution << std::endl; fullprint << "Estimated burr=" << estimatedBurr << std::endl; estimatedBurr = factory.buildAsBurr(); fullprint << "Default burr=" << estimatedBurr << std::endl; estimatedBurr = factory.buildAsBurr(distribution.getParameter()); fullprint << "Burr from parameters=" << estimatedBurr << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_BurrFactory_std.expout000066400000000000000000000010201307543307100220460ustar00rootroot00000000000000Distribution =class=Burr name=Burr dimension=1 c=2.5 k=1.5 Estimated distribution=class=Burr name=Burr dimension=1 c=2.48352 k=1.48109 Default distribution=class=Burr name=Burr dimension=1 c=1 k=1 Distribution from parameters=class=Burr name=Burr dimension=1 c=2.5 k=1.5 Burr =class=Burr name=Burr dimension=1 c=2.5 k=1.5 Estimated burr=class=Burr name=Burr dimension=1 c=2.48352 k=1.48109 Default burr=class=Burr name=Burr dimension=1 c=1 k=1 Burr from parameters=class=Burr name=Burr dimension=1 c=2.5 k=1.5 openturns-1.9/lib/test/t_Burr_std.cxx000077500000000000000000000145731307543307100200200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Burr for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Burr { public: TestObject() : Burr(1.5, 4.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Burr distribution(1.5, 4.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.5 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Burr(distribution.getC() + eps, distribution.getK()).computePDF(point) - Burr(distribution.getC() - eps, distribution.getK()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Burr(distribution.getC(), distribution.getK() + eps).computePDF(point) - Burr(distribution.getC(), distribution.getK() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Burr(distribution.getC() + eps, distribution.getK()).computeCDF(point) - Burr(distribution.getC() - eps, distribution.getK()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Burr(distribution.getC(), distribution.getK() + eps).computeCDF(point) - Burr(distribution.getC(), distribution.getK() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Burr::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Burr_std.expout000066400000000000000000000060051307543307100205260ustar00rootroot00000000000000Testing class Burr checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Burr name=Burr dimension=1 c=1.5 k=4.5 streamObject(const T & anObject) class=Burr name=Burr dimension=1 c=1.5 k=4.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Burr name=Burr dimension=1 c=1.5 k=4.5 Distribution Burr(c = 1.5, k = 4.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.393842] oneSample first=class=Point name=Unnamed dimension=1 values=[0.719504] last=class=Point name=Unnamed dimension=1 values=[0.257588] mean=class=Point name=Unnamed dimension=1 values=[0.383125] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0960551] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.0861923] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0861923] log pdf=-3.62306 pdf =0.0267008 pdf (FD)=0.0267008 cdf=0.990837 ccdf=0.00916331 survival=0.00916331 pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.00992994,-0.0219098] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.00992994,-0.0219098] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.0108262,0.00955539] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0108262,0.00955539] quantile=class=Point name=Unnamed dimension=1 values=[0.963592] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.37922] standard deviation=class=Point name=Unnamed dimension=1 values=[0.310221] skewness=class=Point name=Unnamed dimension=1 values=[2.16221] kurtosis=class=Point name=Unnamed dimension=1 values=[13.2624] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0962368] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[c : 1.5, k : 4.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.37922] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.240044] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.228571] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.324466] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.738598] Standard representative=Burr(c = 1.5, k = 4.5) openturns-1.9/lib/test/t_Cache_std.cxx000066400000000000000000000053571307543307100201060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Cache for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef PersistentCollection KeyType; typedef PersistentCollection ValueType; typedef Cache TestCache; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a Cache object TestCache myCache(3); myCache.setName("aCache"); myCache.enable(); fullprint << "myCache = " << myCache << std::endl; // Create a point and add it to the cache KeyType k(3); k[0] = 1.; k[1] = 2.; k[2] = 3.; ValueType v(2); v[0] = 10.; v[1] = 20.; myCache.add( k, v ); fullprint << "myCache = " << myCache << std::endl; // Create a fake point KeyType ko(3); ko[0] = -1.; ko[1] = -2.; ko[2] = -3.; // Create a valid point KeyType ok(k); // Check which point is in the cache and retrieve corresponding values fullprint << "Is ko in myCache ? " << myCache.hasKey( ko ) << std::endl; fullprint << "Cache value for ko = " << myCache.find( ko ) << std::endl; fullprint << "Is ok in myCache ? " << myCache.hasKey( ok ) << std::endl; fullprint << "Cache value for ok = " << myCache.find( ok ) << std::endl; fullprint << "myCache = " << myCache << std::endl; // Add some more points in the cache KeyType p1 = 2. * k; ValueType pv1 = 2. * v; myCache.add( p1, pv1 ); fullprint << "myCache = " << myCache << std::endl; KeyType p2 = 3. * k; ValueType pv2 = 3. * v; myCache.add( p2, pv2 ); fullprint << "myCache = " << myCache << std::endl; KeyType p3 = 4. * k; ValueType pv3 = 4. * v; myCache.add( p3, pv3 ); fullprint << "myCache = " << myCache << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Cache_std.expout000066400000000000000000000021631307543307100206200ustar00rootroot00000000000000myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=0 hits=0 points={} myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=1 hits=0 points={[1,2,3]->[10,20]/0} Is ko in myCache ? false Cache value for ko = [] Is ok in myCache ? true Cache value for ok = [10,20] myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=1 hits=1 points={[1,2,3]->[10,20]/1} myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=2 hits=1 points={[1,2,3]->[10,20]/1, [2,4,6]->[20,40]/0} myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=3 hits=1 points={[1,2,3]->[10,20]/1, [2,4,6]->[20,40]/0, [3,6,9]->[30,60]/0} myCache = class=Cache, PersistentCollection> enabled=true name=aCache maxSize=3 size=3 hits=1 points={[1,2,3]->[10,20]/1, [3,6,9]->[30,60]/0, [4,8,12]->[40,80]/0} openturns-1.9/lib/test/t_CalibrationStrategy_std.cxx000066400000000000000000000027121307543307100230450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CalibrationStrategy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { CalibrationStrategy myAlgo(Interval(0.3, 0.5)); for ( UnsignedInteger i = 0; i < 4; ++ i ) { Scalar rho = 0.1 + i * 0.2; Scalar updateFactor = myAlgo.computeUpdateFactor(rho); fullprint << "updateFactor=" << updateFactor << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CalibrationStrategy_std.expout000066400000000000000000000001001307543307100235540ustar00rootroot00000000000000updateFactor=0.8 updateFactor=1 updateFactor=1 updateFactor=1.2 openturns-1.9/lib/test/t_Catalog_std.cxx000066400000000000000000000022321307543307100204420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Catalog for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Create a Catalog Object fullprint << Catalog::GetInstance().__repr__() << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_CauchyModel_std.cxx000066400000000000000000000114161307543307100212710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CauchyModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default dimension parameter to evaluate the model */ const UnsignedInteger defaultDimension = 1; /* Default spatial dimension parameter */ const UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(defaultDimension, 1.0); /* Scale values */ Point scale(spatialDimension, 1.0); /* Default constructor */ CauchyModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; /* Second order model with parameters */ CauchyModel myModel(scale, amplitude); fullprint << "myModel = " << myModel << std::endl; const Scalar frequencyValue = 1.0; fullprint << "spectral density matrix at f = " << frequencyValue << " : " << myModel(frequencyValue) << std::endl; /* Evaluation at time higher to check the decrease of the cauchy values */ const Scalar frequencyValueHigh = 10.0; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " : " << myModel(frequencyValueHigh) << std::endl; /* Default dimension parameter to evaluate the model */ const UnsignedInteger highDimension = 3; /* Reallocation of adequate sizes*/ amplitude.resize(highDimension); CorrelationMatrix spatialCorrelation(highDimension); for (UnsignedInteger index = 0 ; index < highDimension; ++index) { // amplitude amplitude[index] = (index + 1.0) / defaultDimension ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } fullprint << "spatialCorrelation=\n" << spatialCorrelation << std::endl; fullprint << "spatialCorrelation=\n" << spatialCorrelation.__str__() << std::endl; /* checking the cast */ SpectralModel mySpectralModel(CauchyModel(scale, amplitude, spatialCorrelation)); fullprint << "mySpectralModel = " << mySpectralModel << std::endl; /* Second order model - high dimension */ CauchyModel myHighModel(scale, amplitude, spatialCorrelation); fullprint << "myHighModel = " << myHighModel << std::endl; fullprint << "spectral density matrix at f = " << frequencyValue << " : " << myHighModel(frequencyValue).clean(1.0e-6) << std::endl; fullprint << "spectral density matrix at f = " << frequencyValue << " :\n" << myHighModel(frequencyValue).clean(1.0e-6).__str__() << std::endl; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " : " << myHighModel(frequencyValueHigh).clean(1.0e-6) << std::endl; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " :\n" << myHighModel(frequencyValueHigh).clean(1.0e-6).__str__() << std::endl; CovarianceMatrix spatialCovariance(highDimension); for (UnsignedInteger index = 0 ; index < highDimension; ++index) { spatialCovariance(index, index) = 1.0; if (index > 0) spatialCovariance(index, index - 1) = 1.0 / index; } /* constructor based on spatial covariance */ CauchyModel myHighModelCovariance(scale, spatialCovariance); fullprint << "myHighModelCovariance = " << myHighModelCovariance << std::endl; fullprint << "spectral density matrix at f = " << frequencyValue << " : " << myHighModelCovariance(frequencyValue).clean(1.0e-6) << std::endl; fullprint << "spectral density matrix at f = " << frequencyValue << " :\n" << myHighModelCovariance(frequencyValue).clean(1.0e-6).__str__() << std::endl; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " : " << myHighModelCovariance(frequencyValueHigh).clean(1.0e-6) << std::endl; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " :\n" << myHighModelCovariance(frequencyValueHigh).clean(1.0e-6).__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CauchyModel_std.expout000066400000000000000000000074331307543307100220170ustar00rootroot00000000000000myDefautModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true myModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true spectral density matrix at f = 1 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.049409,0)] spectral density matrix at f = 10 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.000506478,0)] spatialCorrelation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] spatialCorrelation= [[ 1 1 0 ] [ 1 1 0.5 ] [ 0 0.5 1 ]] mySpectralModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=3 values=[1,2,3] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] isDiagonal=false myHighModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=3 values=[1,2,3] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] isDiagonal=false spectral density matrix at f = 1 : class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=3 columns=3 values=[(0.049409,0),(0.098818,0),(0,0),(0,0),(0.197636,0),(0.148227,0),(0,0),(0,0),(0.444681,0)] spectral density matrix at f = 1 : [[ (0.049409,0) (0,0) (0,0) ] [ (0.098818,0) (0.197636,0) (0,0) ] [ (0,0) (0.148227,0) (0.444681,0) ]] spectral density matrix at f = 10 : class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=3 columns=3 values=[(0.000506,0),(0.001013,0),(0,0),(0,0),(0.002026,0),(0.001519,0),(0,0),(0,0),(0.004558,0)] spectral density matrix at f = 10 : [[ (0.000506,0) (0,0) (0,0) ] [ (0.001013,0) (0.002026,0) (0,0) ] [ (0,0) (0.001519,0) (0.004558,0) ]] myHighModelCovariance = class=CauchyModel amplitude=class=Point name=Unnamed dimension=3 values=[1,1,1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] isDiagonal=false spectral density matrix at f = 1 : class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=3 columns=3 values=[(0.049409,0),(0.049409,0),(0,0),(0,0),(0.049409,0),(0.024705,0),(0,0),(0,0),(0.049409,0)] spectral density matrix at f = 1 : [[ (0.049409,0) (0,0) (0,0) ] [ (0.049409,0) (0.049409,0) (0,0) ] [ (0,0) (0.024705,0) (0.049409,0) ]] spectral density matrix at f = 10 : class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=3 columns=3 values=[(0.000506,0),(0.000506,0),(0,0),(0,0),(0.000506,0),(0.000253,0),(0,0),(0,0),(0.000506,0)] spectral density matrix at f = 10 : [[ (0.000506,0) (0,0) (0,0) ] [ (0.000506,0) (0.000506,0) (0,0) ] [ (0,0) (0.000253,0) (0.000506,0) ]] openturns-1.9/lib/test/t_CenteredFiniteDifferenceGradient_std.cxx000066400000000000000000000041601307543307100254130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CenteredFiniteDifferenceGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar eps = 1e-2; /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); Point epsilon(myFunc.getInputDimension(), eps); Point in(epsilon.getDimension(), 1.0); CenteredFiniteDifferenceGradient myGradient(epsilon, myFunc.getEvaluation()); fullprint << "myGradient=" << myGradient << std::endl; fullprint << "myFunc.gradient(" << in << ")=" << myFunc.gradient(in) << std::endl; fullprint << "myGradient.gradient(" << in << ")=" << myGradient.gradient(in) << std::endl; /** Substitute the gradient */ myFunc.setGradient(new CenteredFiniteDifferenceGradient(myGradient)); fullprint << "myFunc.gradient(" << in << ")=" << myFunc.gradient(in) << " (after substitution)" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CenteredFiniteDifferenceGradient_std.expout000066400000000000000000000017051307543307100261370ustar00rootroot00000000000000myGradient=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.01,0.01] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540302,-0.909297,-0.909297,0.735759,-1.10364] myGradient.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540293,-0.909282,-0.909282,0.735771,-1.10366] myFunc.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540293,-0.909282,-0.909282,0.735771,-1.10366] (after substitution) openturns-1.9/lib/test/t_CenteredFiniteDifferenceHessian_std.cxx000066400000000000000000000041371307543307100252540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CenteredFiniteDifferenceHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar eps = 1e-2; /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); Point epsilon(myFunc.getInputDimension(), eps); Point in(epsilon.getDimension(), 1.0); CenteredFiniteDifferenceHessian myHessian(epsilon, myFunc.getEvaluation()); fullprint << "myHessian=" << myHessian << std::endl; fullprint << "myFunc.hessian(" << in << ")=" << myFunc.hessian(in) << std::endl; fullprint << "myHessian.hessian(" << in << ")=" << myHessian.hessian(in) << std::endl; /** Substitute the hessian */ myFunc.setHessian(new CenteredFiniteDifferenceHessian(myHessian)); fullprint << "myFunc.hessian(" << in << ")=" << myFunc.hessian(in) << " (after substitution)" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CenteredFiniteDifferenceHessian_std.expout000066400000000000000000000020751307543307100257750ustar00rootroot00000000000000myHessian=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.01,0.01] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.hessian(class=Point name=Unnamed dimension=2 values=[1,1])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540302,0,-0.841471,0.416147,0.416147,0,0.416147,0.735759,-1.10364,0,1.47152] myHessian.hessian(class=Point name=Unnamed dimension=2 values=[1,1])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540293,0,-0.841443,0.416133,0.416133,0,0.416133,0.735783,-1.10368,0,1.47152] myFunc.hessian(class=Point name=Unnamed dimension=2 values=[1,1])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540293,0,-0.841443,0.416133,0.416133,0,0.416133,0.735783,-1.10368,0,1.47152] (after substitution) openturns-1.9/lib/test/t_CharlierFactory_std.cxx000066400000000000000000000032531307543307100221550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CharlierFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { CharlierFactory charlier(2.5); fullprint << "charlier=" << charlier << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "charlier(" << i << ")=" << charlier.build(i).__str__() << std::endl; } Point roots(charlier.getRoots(10)); fullprint << "charlier(10) roots=" << roots << std::endl; Point weights; roots = charlier.getNodesAndWeights(10, weights); fullprint << "charlier(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CharlierFactory_std.expout000066400000000000000000000027251307543307100227020ustar00rootroot00000000000000charlier=class=CharlierFactory lambda=2.5 measure=class=Poisson name=Poisson dimension=1 lambda=2.5 charlier(0)=1 charlier(1)=1.58114 - 0.632456 * X charlier(2)=1.76777 - 1.69706 * X + 0.282843 * X^2 charlier(3)=1.61374 - 2.91765 * X + 1.08444 * X^2 - 0.10328 * X^3 charlier(4)=1.27578 - 4.11514 * X + 2.5638 * X^2 - 0.522558 * X^3 + 0.0326599 * X^4 charlier(5)=0.90211 - 5.31682 * X + 4.90748 * X^2 - 1.59349 * X^3 + 0.207846 * X^4 - 0.0092376 * X^5 charlier(6)=0.582309 - 6.7723 * X + 8.53567 * X^2 - 3.87585 * X^3 + 0.784115 * X^4 - 0.0715542 * X^5 + 0.00238514 * X^6 charlier(7)=0.347996 - 8.97735 * X + 14.419 * X^2 - 8.44043 * X^3 + 2.32731 * X^4 - 0.324277 * X^5 + 0.0219511 * X^6 - 0.000570157 * X^7 charlier(8)=0.194536 - 12.8132 * X + 24.6527 * X^2 - 17.5284 * X^3 + 6.09769 * X^4 - 1.14232 * X^5 + 0.116909 * X^6 - 0.00611957 * X^7 + 0.000127491 * X^8 charlier(9)=0.102529 - 19.9402 * X + 43.6781 * X^2 - 36.0402 * X^3 + 14.9989 * X^4 - 3.50841 * X^5 + 0.478916 * X^6 - 0.0376553 * X^7 + 0.00157233 * X^8 - 2.68775e-05 * X^9 charlier(10) roots=class=Point name=Unnamed dimension=10 values=[0.00152556,1.02568,2.14884,3.45871,4.99217,6.76487,8.80524,11.1736,13.9991,17.6303] charlier(10) roots=class=Point name=Unnamed dimension=10 values=[0.00152556,1.02568,2.14884,3.45871,4.99217,6.76487,8.80524,11.1736,13.9991,17.6303] and weights=class=Point name=Unnamed dimension=10 values=[0.0827243,0.219515,0.307739,0.252202,0.11091,0.0243651,0.00244673,9.63995e-05,1.10093e-06,1.685e-09] openturns-1.9/lib/test/t_ChebychevAlgorithm_std.cxx000066400000000000000000000034641307543307100226470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ChebychevAlgorithm for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger iMax = 5; Triangular distribution(-1.0, 0.3, 1.0); ChebychevAlgorithm algo(distribution); fullprint << "algo=" << algo << std::endl; for (UnsignedInteger i = 0; i < iMax; ++i) fullprint << distribution.getClassName() << " polynomial(" << i << ")=" << algo.getRecurrenceCoefficients(i).__str__() << std::endl; algo.setReferenceFamily(HermiteFactory()); fullprint << "algo=" << algo << std::endl; for (UnsignedInteger i = 0; i < iMax; ++i) fullprint << distribution.getClassName() << " polynomial(" << i << ")=" << algo.getRecurrenceCoefficients(i).__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ChebychevAlgorithm_std.expout000066400000000000000000000023721307543307100233660ustar00rootroot00000000000000algo=class=ChebychevAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 reference family=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 Triangular polynomial(0)=[2.41355,-0.241355,0] Triangular polynomial(1)=[2.09874,0.0321942,-0.869564] Triangular polynomial(2)=[2.04635,-0.0276334,-0.975039] Triangular polynomial(3)=[2.04338,0.00798025,-0.99855] Triangular polynomial(4)=[2.01498,-0.00254217,-0.986101] algo=class=ChebychevAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 reference family=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Triangular polynomial(0)=[2.41355,-0.241355,0] Triangular polynomial(1)=[2.09874,0.0321942,-0.869564] Triangular polynomial(2)=[2.04635,-0.0276334,-0.975039] Triangular polynomial(3)=[2.04338,0.00798025,-0.99855] Triangular polynomial(4)=[2.01498,-0.00254217,-0.986101] openturns-1.9/lib/test/t_ChebychevFactory_std.cxx000066400000000000000000000032671307543307100223310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ChebychevFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { ChebychevFactory chebychev; fullprint << "chebychev=" << chebychev << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "chebychev(" << i << ")=" << chebychev.build(i).__str__() << std::endl; } Point roots(chebychev.getRoots(10)); fullprint << "chebychev(10) roots=" << roots << std::endl; Point weights; Point nodes(chebychev.getNodesAndWeights(10, weights)); fullprint << "chebychev(10) nodes=" << nodes << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ChebychevFactory_std.expout000066400000000000000000000020361307543307100230440ustar00rootroot00000000000000chebychev=class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 chebychev(0)=1 chebychev(1)=1.41421 * X chebychev(2)=-1.41421 + 2.82843 * X^2 chebychev(3)=-4.24264 * X + 5.65685 * X^3 chebychev(4)=1.41421 - 11.3137 * X^2 + 11.3137 * X^4 chebychev(5)=7.07107 * X - 28.2843 * X^3 + 22.6274 * X^5 chebychev(6)=-1.41421 + 25.4558 * X^2 - 67.8823 * X^4 + 45.2548 * X^6 chebychev(7)=-9.89949 * X + 79.196 * X^3 - 158.392 * X^5 + 90.5097 * X^7 chebychev(8)=1.41421 - 45.2548 * X^2 + 226.274 * X^4 - 362.039 * X^6 + 181.019 * X^8 chebychev(9)=12.7279 * X - 169.706 * X^3 + 610.94 * X^5 - 814.587 * X^7 + 362.039 * X^9 chebychev(10) roots=class=Point name=Unnamed dimension=10 values=[0.987688,0.891007,0.707107,0.45399,0.156434,-0.156434,-0.45399,-0.707107,-0.891007,-0.987688] chebychev(10) nodes=class=Point name=Unnamed dimension=10 values=[0.987688,0.891007,0.707107,0.45399,0.156434,-0.156434,-0.45399,-0.707107,-0.891007,-0.987688] and weights=class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] openturns-1.9/lib/test/t_ChiFactory_std.cxx000066400000000000000000000063701307543307100211320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Chi for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Chi distribution(0.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); ChiFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Chi(1.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Chi(2.5); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Chi estimatedChi(factory.buildAsChi(sample)); fullprint << "Chi =" << distribution << std::endl; fullprint << "Estimated chi=" << estimatedChi << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedChi = factory.buildAsChi(); fullprint << "Default chi=" << estimatedChi << std::endl; estimatedChi = factory.buildAsChi(distribution.getParameter()); fullprint << "Chi from parameters=" << estimatedChi << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ChiFactory_std.expout000066400000000000000000000013121307543307100216430ustar00rootroot00000000000000Distribution =class=Chi name=Chi dimension=1 nu=0.5 Estimated distribution=class=Chi name=Chi dimension=1 nu=0.49317 Distribution =class=Chi name=Chi dimension=1 nu=1 Estimated distribution=class=Chi name=Chi dimension=1 nu=1.00223 Distribution =class=Chi name=Chi dimension=1 nu=2.5 Estimated distribution=class=Chi name=Chi dimension=1 nu=2.48936 Default distribution=class=Chi name=Chi dimension=1 nu=1 Distribution from parameters=class=Chi name=Chi dimension=1 nu=2.5 Chi =class=Chi name=Chi dimension=1 nu=2.5 Estimated chi=class=Chi name=Chi dimension=1 nu=2.48936 Default chi=class=Chi name=Chi dimension=1 nu=1 Chi from parameters=class=Chi name=Chi dimension=1 nu=2.5 openturns-1.9/lib/test/t_ChiSquareFactory_std.cxx000066400000000000000000000065521307543307100223150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ChiSquare for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ChiSquare distribution(0.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); ChiSquareFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = ChiSquare(1.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = ChiSquare(2.5); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; ChiSquare estimatedChiSquare(factory.buildAsChiSquare(sample)); fullprint << "ChiSquare =" << distribution << std::endl; fullprint << "Estimated chiSquare=" << estimatedChiSquare << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedChiSquare = factory.buildAsChiSquare(); fullprint << "Default chiSquare=" << estimatedChiSquare << std::endl; estimatedChiSquare = factory.buildAsChiSquare(distribution.getParameter()); fullprint << "ChiSquare from parameters=" << estimatedChiSquare << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ChiSquareFactory_std.expout000066400000000000000000000015621307543307100230330ustar00rootroot00000000000000Distribution =class=ChiSquare name=ChiSquare dimension=1 nu=0.5 Estimated distribution=class=ChiSquare name=ChiSquare dimension=1 nu=0.49317 Distribution =class=ChiSquare name=ChiSquare dimension=1 nu=1 Estimated distribution=class=ChiSquare name=ChiSquare dimension=1 nu=1.00223 Distribution =class=ChiSquare name=ChiSquare dimension=1 nu=2.5 Estimated distribution=class=ChiSquare name=ChiSquare dimension=1 nu=2.48936 Default distribution=class=ChiSquare name=ChiSquare dimension=1 nu=1 Distribution from parameters=class=ChiSquare name=ChiSquare dimension=1 nu=2.5 ChiSquare =class=ChiSquare name=ChiSquare dimension=1 nu=2.5 Estimated chiSquare=class=ChiSquare name=ChiSquare dimension=1 nu=2.48936 Default chiSquare=class=ChiSquare name=ChiSquare dimension=1 nu=1 ChiSquare from parameters=class=ChiSquare name=ChiSquare dimension=1 nu=2.5 openturns-1.9/lib/test/t_ChiSquare_std.cxx000066400000000000000000000176061307543307100207670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ChiSquare for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public ChiSquare { public: TestObject() : ChiSquare(1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object ChiSquare distribution(1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(1); PDFgrFD[0] = (ChiSquare(distribution.getNu() + eps).computePDF(point) - ChiSquare(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (ChiSquare(distribution.getNu() + eps).computeCDF(point) - ChiSquare(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; ChiSquare::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); UnsignedInteger oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(5); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; PlatformInfo::SetNumericalPrecision(oldPrecision); fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar nu = distribution.getNu(); fullprint << "nu=" << nu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ChiSquare_std.expout000066400000000000000000000112731307543307100215030ustar00rootroot00000000000000Testing class ChiSquare checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=ChiSquare name=ChiSquare dimension=1 nu=1.5 streamObject(const T & anObject) class=ChiSquare name=ChiSquare dimension=1 nu=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=ChiSquare name=ChiSquare dimension=1 nu=1.5 Distribution ChiSquare(nu = 1.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.77998] oneSample first=class=Point name=Unnamed dimension=1 values=[2.51653] last=class=Point name=Unnamed dimension=1 values=[1.04578] mean=class=Point name=Unnamed dimension=1 values=[1.49285] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.84211] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.220728] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.220728] log pdf=-1.22314 pdf =0.294304 pdf (FD)=0.294304 cdf=0.527937 ccdf=0.472063 survival=0.472063 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0332328] Survival(inverse survival)=0.95 characteristic function=(0.368925,0.403688) log characteristic function=(-0.603539,0.830362) pdf gradient =class=Point name=Unnamed dimension=1 values=[0.0577886] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.0577886] cdf gradient =class=Point name=Unnamed dimension=1 values=[-0.291714] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.291714] quantile=class=Point name=Unnamed dimension=1 values=[4.9802] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[4.9802] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(ChiSquare(nu = 1.5)) gradientImplementation=MinimumVolumeLevelSetGradient(ChiSquare(nu = 1.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(ChiSquare(nu = 1.5)) level=3.61461 beta=0.0269275 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.013113] upper bound=class=Point name=Unnamed dimension=1 values=[6.27581] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[4.9802] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0332328] upper bound=class=Point name=Unnamed dimension=1 values=[39.9307] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.5] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[5.25] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[28.875] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[216.56] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[2057.3] Standard representative=ChiSquare(nu = 1.5) nu=1.5 standard deviation=class=Point name=Unnamed dimension=1 values=[1.73205] skewness=class=Point name=Unnamed dimension=1 values=[2.3094] kurtosis=class=Point name=Unnamed dimension=1 values=[11] openturns-1.9/lib/test/t_Chi_std.cxx000066400000000000000000000172431307543307100176030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Chi for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Chi { public: TestObject() : Chi(1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Chi distribution(1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(1); PDFgrFD[0] = (Chi(distribution.getNu() + eps).computePDF(point) - Chi(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (Chi(distribution.getNu() + eps).computeCDF(point) - Chi(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Chi::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar nu = distribution.getNu(); fullprint << "nu=" << nu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Chi_std.expout000066400000000000000000000112171307543307100203200ustar00rootroot00000000000000Testing class Chi checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Chi name=Chi dimension=1 nu=1.5 streamObject(const T & anObject) class=Chi name=Chi dimension=1 nu=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Chi name=Chi dimension=1 nu=1.5 Distribution Chi(nu = 1.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.66733] oneSample first=class=Point name=Unnamed dimension=1 values=[1.58636] last=class=Point name=Unnamed dimension=1 values=[1.02264] mean=class=Point name=Unnamed dimension=1 values=[1.04589] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.399002] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.294304] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.294304] log pdf=-0.529994 pdf =0.588608 pdf (FD)=0.588608 cdf=0.527937 ccdf=0.472063 survival=0.472063 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.182299] Survival(inverse survival)=0.95 characteristic function=(0.433496,0.694719) log characteristic function=(-0.199826,1.01293) pdf gradient =class=Point name=Unnamed dimension=1 values=[0.115577] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.115577] cdf gradient =class=Point name=Unnamed dimension=1 values=[-0.291714] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.291714] quantile=class=Point name=Unnamed dimension=1 values=[2.23164] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0147509] upper bound=class=Point name=Unnamed dimension=1 values=[2.24137] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Chi(nu = 1.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Chi(nu = 1.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Chi(nu = 1.5)) level=2.13833 beta=0.117852 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.114512] upper bound=class=Point name=Unnamed dimension=1 values=[2.50516] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[2.23164] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.182299] upper bound=class=Point name=Unnamed dimension=1 values=[7.89498] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.04605] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40578] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.04605] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.5] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[2.61512] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[5.25] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[11.7681] Standard representative=Chi(nu = 1.5) nu=1.5 standard deviation=class=Point name=Unnamed dimension=1 values=[0.637009] skewness=class=Point name=Unnamed dimension=1 values=[0.762585] kurtosis=class=Point name=Unnamed dimension=1 values=[3.42425] openturns-1.9/lib/test/t_ClaytonCopulaFactory_std.cxx000066400000000000000000000050671307543307100232060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ClaytonCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ClaytonCopula distribution(1.5); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); ClaytonCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; ClaytonCopula estimatedClaytonCopula(factory.buildAsClaytonCopula(sample)); fullprint << "ClaytonCopula =" << distribution << std::endl; fullprint << "Estimated claytonCopula=" << estimatedClaytonCopula << std::endl; estimatedClaytonCopula = factory.buildAsClaytonCopula(); fullprint << "Default claytonCopula=" << estimatedClaytonCopula << std::endl; estimatedClaytonCopula = factory.buildAsClaytonCopula(distribution.getParameter()); fullprint << "ClaytonCopula from parameters=" << estimatedClaytonCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ClaytonCopulaFactory_std.expout000066400000000000000000000012601307543307100237170ustar00rootroot00000000000000Distribution =class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.5 Estimated distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.33821 Default distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 Distribution from parameters=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.5 ClaytonCopula =class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.5 Estimated claytonCopula=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.33821 Default claytonCopula=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 ClaytonCopula from parameters=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.5 openturns-1.9/lib/test/t_ClaytonCopula_std.cxx000066400000000000000000000167171307543307100216620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ClaytonCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; ClaytonCopula copula(2.5); copula.setName("a clayton copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF.__str__() << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point).__str__() << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Covariance and correlation UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(4); CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; // Additional tests for PDF/CDF in extreme cases Sample points(0, 2); points.add(Point(2, 1.0e-12)); points.add(Point(2, 1.0e-7)); points.add(Point(2, 0.1)); points.add(Point(2, 0.5)); points.add(Point(2, 0.1)); points.add(Point(2, 0.1)); points.add(Point(2, 0.1)); Point thetas; thetas.add(1.0e-12); thetas.add(0.9e-8); thetas.add(1.1e-8); thetas.add(-0.99); thetas.add(9.9e1); thetas.add(1.1e2); thetas.add(1.0e5); for (UnsignedInteger i = 0; i < thetas.getSize(); ++i) { Point x(points[i]); copula = ClaytonCopula(thetas[i]); fullprint << copula.__str__() << std::endl; fullprint << "PDF(" << x.__str__() << ")=" << std::setprecision(12) << copula.computePDF(x) << std::endl; fullprint << "CDF(" << x.__str__() << ")=" << std::setprecision(12) << copula.computeCDF(x) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ClaytonCopula_std.expout000066400000000000000000000117451307543307100224000ustar00rootroot00000000000000Copula class=ClaytonCopula name=a clayton copula dimension=2 theta=2.5 Copula ClaytonCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.629877,0.901557] oneSample=class=Sample name=a clayton copula implementation=class=SampleImplementation name=a clayton copula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.0526823],[0.347057,0.895953],[0.92068,0.794201],[0.0632061,0.0551566],[0.714382,0.621802],[0.373767,0.583326],[0.883503,0.65348],[0.92851,0.935197],[0.684575,0.88113],[0.359802,0.865943]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[0.502777,0.50134] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0628988,0.0628988,0.0838004] point= class=Point name=Unnamed dimension=2 values=[0.2,0.2] ddf=[-8.01112,-8.01112] ddf (FD)=[-8.01111,-8.01111] pdf=3.3879 cdf=0.152117 Survival =0.752117 Survival (ref)=0.752117 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.0402547,0.0402547] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.618165,0.618165] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0156773,0.0156773] upper bound=class=Point name=Unnamed dimension=2 values=[0.984323,0.984323] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.968645 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(ClaytonCopula(theta = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(ClaytonCopula(theta = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(ClaytonCopula(theta = 2.5)) level=0.815537 beta=0.442402 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0156773,0.0156773] upper bound=class=Point name=Unnamed dimension=2 values=[0.984323,0.984323] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.968645 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.973879,0.973879] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.973879 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0402547,0.0402547] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.959745 covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.08333,0.06184,0.06184,0.08333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.742,0.742,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.742,0.742,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5556,0.5556,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.294088] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.47206] indices=[1,0] margins=class=ClaytonCopula name=a clayton copula dimension=2 theta=2.5 margins PDF=2.75468 margins CDF=0.190662 margins quantile=class=Point name=Unnamed dimension=2 values=[0.973879,0.973879] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.196586,0.274622] ClaytonCopula(theta = 1e-12) PDF([1e-12,1e-12])=1.00000000071 CDF([1e-12,1e-12])=1.00000000076e-24 ClaytonCopula(theta = 9e-09) PDF([1e-07,1e-07])=1.00000205701 CDF([1e-07,1e-07])=1.00000233814e-14 ClaytonCopula(theta = 1.1e-08) PDF([0.1,0.1])=1.00000001866 CDF([0.1,0.1])=0.0100000005832 ClaytonCopula(theta = -0.99) PDF([0.5,0.5])=1.38641895688 CDF([0.5,0.5])=0.00661510662812 ClaytonCopula(theta = 99) PDF([0.1,0.1])=248.255741658 CDF([0.1,0.1])=0.0993022966632 ClaytonCopula(theta = 110) PDF([0.1,0.1])=275.756876477 CDF([0.1,0.1])=0.099371847379 ClaytonCopula(theta = 100000) PDF([0.1,0.1])=250000.767121 CDF([0.1,0.1])=0.0999993068552 openturns-1.9/lib/test/t_Cloud_std.cxx000066400000000000000000000050641307543307100201440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Cloud for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal distribution1(meanPoint, sigma, R); // Instanciate another distribution object meanPoint[0] = -1.5; meanPoint[1] = 0.5; sigma[0] = 4.0; sigma[1] = 1.0; for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = -0.25; } Normal distribution2(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 200; Sample sample1(distribution1.getSample( size )); Sample sample2(distribution2.getSample( size )); // Create an empty graph Graph myGraph("Normal sample", "x1", "x2", true, "topright"); // Create the first cloud Cloud myCloud1(sample1, "blue", "fsquare", "First Cloud"); // Then, draw it myGraph.add(myCloud1); myGraph.draw("Graph_Cloud_a_OT.png"); // Check that the correct files have been generated by computing their checksum // Create the second cloud Cloud myCloud2(sample2, "red", "dot", "Second Cloud"); // Add it to the graph and draw everything myGraph.add(myCloud2); myGraph.draw("Graph_Cloud_b_OT.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Cloud_std.expout000066400000000000000000000000001307543307100206470ustar00rootroot00000000000000openturns-1.9/lib/test/t_Cobyla_std.cxx000066400000000000000000000071501307543307100203050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Cobyla for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test function operator () Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1+2*x2-3*x3+4*x4")); Point startingPoint(4, 0.0); Cobyla myAlgorithm(OptimizationProblem(levelFunction, 3.0)); myAlgorithm.setStartingPoint(startingPoint); fullprint << "myAlgorithm = " << myAlgorithm << std::endl; myAlgorithm.run(); fullprint << "result = " << printPoint(myAlgorithm.getResult().getOptimalPoint(), 4) << std::endl; fullprint << "multipliers = " << printPoint(myAlgorithm.getResult().getLagrangeMultipliers(), 4) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } try { Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4")); Point startingPoint(4, 0.0); Cobyla myAlgorithm(OptimizationProblem(levelFunction, 3.0)); myAlgorithm.setStartingPoint(startingPoint); myAlgorithm.setMaximumIterationNumber(400); myAlgorithm.setMaximumAbsoluteError(1.0e-10); myAlgorithm.setMaximumRelativeError(1.0e-10); myAlgorithm.setMaximumResidualError(1.0e-10); myAlgorithm.setMaximumConstraintError(1.0e-10); fullprint << "myAlgorithm = " << myAlgorithm << std::endl; myAlgorithm.run(); OptimizationResult result(myAlgorithm.getResult()); fullprint << "result = " << printPoint(result.getOptimalPoint(), 4) << std::endl; fullprint << "multipliers = " << printPoint(result.getLagrangeMultipliers(), 4) << std::endl; Graph convergence(result.drawErrorHistory()); //FIXME:fullprint << "evaluation calls number=" << levelFunction.getEvaluationCallsNumber() << std::endl; fullprint << "gradient calls number=" << levelFunction.getGradientCallsNumber() << std::endl; fullprint << "hessian calls number=" << levelFunction.getHessianCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Cobyla_std.expout000066400000000000000000000047301307543307100210300ustar00rootroot00000000000000myAlgorithm = class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false rhoBeg=0.1 result = [0.1000,0.2000,-0.3000,0.4000] multipliers = [-0.1000] myAlgorithm = class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 result = [0.1297,-0.1645,-0.6181,-0.3290] multipliers = [-0.1331] gradient calls number=1 hessian calls number=0 openturns-1.9/lib/test/t_Collection_std.cxx000066400000000000000000000044631307543307100211730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Collection for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); /* Default constructor */ Collection point1; /* Check method add() */ point1.add(0.); point1.add(1.); fullprint << "size of point1 = " << point1.getSize() << std::endl; fullprint << "point1[0] = " << point1[0] << std::endl << "point1[1] = " << point1[1] << std::endl; /* Constructor with size */ Collection point2(2); /* Check operator[] methods */ point2[0] = 10.; point2[1] = 11.; fullprint << "point2[0] = " << point2[0] << std::endl << "point2[1] = " << point2[1] << std::endl; /* Copy constructor */ Collection point3(point1); fullprint << "point3[0] = " << point3[0] << std::endl << "point3[1] = " << point3[1] << std::endl; /* Assignment operator */ Collection point4; point4 = point2; fullprint << "point4[0] = " << point4[0] << std::endl << "point4[1] = " << point4[1] << std::endl; /* Stream operator */ fullprint << "point1 = " << point1 << std::endl; /* Constructor with size and value */ Collection point5(5, 1.0); fullprint << "point5 = " << point5 << std::endl; /* Large collection, the size is printed */ Collection point6(12, 1.5); fullprint << "point6 = " << point6 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_Collection_std.expout000066400000000000000000000003511307543307100217050ustar00rootroot00000000000000size of point1 = 2 point1[0] = 0 point1[1] = 1 point2[0] = 10 point2[1] = 11 point3[0] = 0 point3[1] = 1 point4[0] = 10 point4[1] = 11 point1 = [0,1] point5 = [1,1,1,1,1] point6 = [1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5]#12 openturns-1.9/lib/test/t_Combinations_std.cxx000066400000000000000000000026371307543307100215260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Combinations for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Combinations myGenerator(3, 5); fullprint << "myGenerator = " << myGenerator << std::endl; Combinations::IndicesCollection combinations(myGenerator.generate()); fullprint << "combinations = " << combinations << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Combinations_std.expout000066400000000000000000000002321307543307100222350ustar00rootroot00000000000000myGenerator = class=Combinations name=Unnamed k=3 n=5 combinations = [[0,1,2],[0,1,3],[0,1,4],[0,2,3],[0,2,4],[0,3,4],[1,2,3],[1,2,4],[1,3,4],[2,3,4]]#10 openturns-1.9/lib/test/t_ComparisonOperator_std.cxx000066400000000000000000000103221307543307100227150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComparisonOperator for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Pointer p_operator; // p_operator.reset(new Less); // fullprint << "Less.compare(10,20) = " << p_operator->compare(10,20) << std::endl; // fullprint << "Less.compare(20,20) = " << p_operator->compare(20,20) << std::endl; // fullprint << "Less.compare(30,20) = " << p_operator->compare(30,20) << std::endl; // p_operator.reset(new LessOrEqual); // fullprint << "LessOrEqual.compare(10,20) = " << p_operator->compare(10,20) << std::endl; // fullprint << "LessOrEqual.compare(20,20) = " << p_operator->compare(20,20) << std::endl; // fullprint << "LessOrEqual.compare(30,20) = " << p_operator->compare(30,20) << std::endl; // p_operator.reset(new Equal); // fullprint << "Equal.compare(10,20) = " << p_operator->compare(10,20) << std::endl; // fullprint << "Equal.compare(20,20) = " << p_operator->compare(20,20) << std::endl; // fullprint << "Equal.compare(30,20) = " << p_operator->compare(30,20) << std::endl; // p_operator.reset(new GreaterOrEqual); // fullprint << "GreaterOrEqual.compare(10,20) = " << p_operator->compare(10,20) << std::endl; // fullprint << "GreaterOrEqual.compare(20,20) = " << p_operator->compare(20,20) << std::endl; // fullprint << "GreaterOrEqual.compare(30,20) = " << p_operator->compare(30,20) << std::endl; // p_operator.reset(new Greater); // fullprint << "Greater.compare(10,20) = " << p_operator->compare(10,20) << std::endl; // fullprint << "Greater.compare(20,20) = " << p_operator->compare(20,20) << std::endl; // fullprint << "Greater.compare(30,20) = " << p_operator->compare(30,20) << std::endl; ComparisonOperator comparisonOperator; ComparisonOperator less = Less(); fullprint << "Less(10,20) = " << less(10, 20) << std::endl; fullprint << "Less(20,20) = " << less(20, 20) << std::endl; fullprint << "Less(30,20) = " << less(30, 20) << std::endl; ComparisonOperator lessOrEqual = LessOrEqual(); fullprint << "LessOrEqual(10,20) = " << lessOrEqual(10, 20) << std::endl; fullprint << "LessOrEqual(20,20) = " << lessOrEqual(20, 20) << std::endl; fullprint << "LessOrEqual(30,20) = " << lessOrEqual(30, 20) << std::endl; ComparisonOperator equal = Equal(); fullprint << "Equal(10,20) = " << equal(10, 20) << std::endl; fullprint << "Equal(20,20) = " << equal(20, 20) << std::endl; fullprint << "Equal(30,20) = " << equal(30, 20) << std::endl; ComparisonOperator greaterOrEqual = GreaterOrEqual(); fullprint << "GreaterOrEqual(10,20) = " << greaterOrEqual(10, 20) << std::endl; fullprint << "GreaterOrEqual(20,20) = " << greaterOrEqual(20, 20) << std::endl; fullprint << "GreaterOrEqual(30,20) = " << greaterOrEqual(30, 20) << std::endl; ComparisonOperator greater = Greater(); fullprint << "Greater(10,20) = " << greater(10, 20) << std::endl; fullprint << "Greater(20,20) = " << greater(20, 20) << std::endl; fullprint << "Greater(30,20) = " << greater(30, 20) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComparisonOperator_std.expout000066400000000000000000000005441307543307100234440ustar00rootroot00000000000000Less(10,20) = true Less(20,20) = false Less(30,20) = false LessOrEqual(10,20) = true LessOrEqual(20,20) = true LessOrEqual(30,20) = false Equal(10,20) = false Equal(20,20) = true Equal(30,20) = false GreaterOrEqual(10,20) = false GreaterOrEqual(20,20) = true GreaterOrEqual(30,20) = true Greater(10,20) = false Greater(20,20) = false Greater(30,20) = true openturns-1.9/lib/test/t_ComplexMatrix_std.cxx000066400000000000000000000175031307543307100216730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComplexMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); /** TEST ZERO : CHECK THE DEFAULT CONSTRUCTOR AND THE STRING CONVERTER */ fullprint << "test 0 : default constructor and string converter" << std::endl; /* Default constructor */ ComplexMatrix matrix0; /* String converter */ fullprint << "matrix0 = " << matrix0 << std::endl; /** TEST ONE : MATRIX-CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test 1 : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ ComplexMatrix matrix1(2, 2); /* Check operator() methods */ matrix1(0, 0) = Complex(1., 1) ; matrix1(1, 0) = Complex(2., -1) ; matrix1(0, 1) = Complex(4., 2) ; matrix1(1, 1) = Complex(3., 2) ; /* String converter */ fullprint << "matrix1 = " << matrix1 << std::endl; /** TEST TWO : COPY CONSTRUCTOR */ fullprint << "test 2 : copy constructor and string converter" << std::endl; /* Copy constructor */ ComplexMatrix matrix2(matrix1); /* String converter */ fullprint << "matrix2 = " << matrix2 << std::endl; /** TEST THREE : GET DIMENSIONS METHODS */ fullprint << "test 3 : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "matrix1's nbRows = " << matrix1.getNbRows() << std::endl << "matrix1's nbColumns = " << matrix1.getNbColumns() << std::endl; /** TEST FOUR : CONSTRUCTOR WITH COLLECTION AND ARRAY */ fullprint << "test 4 : constructor with collection and array method" << std::endl; /* Create the collection of values */ Collection elementsValues(6); elementsValues[0] = 1.; elementsValues[1] = 2.; elementsValues[2] = 3.; elementsValues[3] = 4.; elementsValues[4] = 5.; elementsValues[5] = 6.; /* Check the content of the collection */ fullprint << "elementsValues = " << elementsValues << std::endl; /* Check the constructor with collection */ ComplexMatrix matrix0bis = ComplexMatrix(2, 2, elementsValues); fullprint << "matrix0bis = " << matrix0bis << std::endl; /** TEST FIVE : ASSIGNMENT METHOD */ fullprint << "test 5 : assignment method" << std::endl; /* Assignment method */ ComplexMatrix matrix3 ; matrix3 = matrix1 ; fullprint << "matrix3 = " << matrix3 << std::endl; /** TEST SIX : TRANSPOSITION METHOD */ fullprint << "test 6 : transposition method" << std::endl; /* Check transpose method */ ComplexMatrix matrix4 = matrix1.transpose(); fullprint << "matrix1 transposed = " << matrix4 << std::endl; /** TEST SEVEN : CONJUGATE METHOD */ fullprint << "test 7 : conjugate method" << std::endl; /* Check conjugate method */ ComplexMatrix matrix5 = matrix1.conjugate(); fullprint << "matrix1 conjugated = " << matrix5 << std::endl; /** TEST EIGHT : CONJUGATE AND TRANSPOSITION METHOD */ fullprint << "test 8 : conjugate and transposition method" << std::endl; /* Check conjugate method */ ComplexMatrix matrix6 = matrix1.conjugate(); fullprint << "matrix1 conjugated and transposed= " << matrix6 << std::endl; /** TEST NINE : ADDITION METHOD */ fullprint << "test 9 : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ ComplexMatrix sum1 = matrix1.operator + ( matrix4 ) ; ComplexMatrix sum2 = matrix4.operator + ( matrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** TEST TEN : SUBSTRACTION METHOD */ fullprint << "test 10: substraction method" << std::endl; /* Check substraction method */ ComplexMatrix diff = matrix1.operator - ( matrix4 ) ; fullprint << "diff = " << diff << std::endl; /** TEST ELEVEN : MATRIX MULTIPLICATION METHOD */ fullprint << "test 11 : matrix multiplication method" << std::endl; /* Check multiplication method */ ComplexMatrix prod = matrix1.operator * ( matrix4 ) ; fullprint << "prod = " << prod << std::endl; /** TEST TWELVE : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 12 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ ComplexCollection ptResult = matrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** TEST THIRTEEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test 13 : multiplication and division by a complex methods" << std::endl; /* Check the multiplication method */ Complex s(3., 1.0); ComplexMatrix scalprod1 = matrix1.operator * (s) ; ComplexMatrix scalprod2 = s * matrix1 ; ComplexMatrix scalprod3 = matrix1 * s ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod3 = " << scalprod3 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; fullprint << "scalprod1 equals scalprod3 = " << (scalprod1 == scalprod3) << std::endl; fullprint << "scalprod2 equals scalprod3 = " << (scalprod2 == scalprod3) << std::endl; /* Check the division method */ ComplexMatrix scaldiv1 = matrix1.operator / (s) ; ComplexMatrix scaldiv2 = matrix1.operator / (s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** TEST FOURTEEN : ISEMPTY METHOD */ fullprint << "test 14 : isEmpty method" << std::endl; /* Check method isEmpty */ ComplexMatrix matrix7; ComplexMatrix matrix8; // matrix6.setDimensions(0,3); fullprint << "matrix1 is empty = " << matrix1.isEmpty() << std::endl << "matrix7 is empty = " << matrix7.isEmpty() << std::endl << "matrix8 is empty = " << matrix8.isEmpty() << std::endl << "matrix0 is empty = " << matrix0.isEmpty() << std::endl; /** TEST FIFTEEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 15 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt_test ; pt_test.add(1.) ; pt_test.add(2.) ; fullprint << "pt_test = " << pt_test << std::endl; ComplexMatrix A(2, 2); A(0, 0) = 0.5 ; A(1, 0) = -(std::sqrt(3.) / 2) ; A(0, 1) = (std::sqrt(3.) / 2) ; A(1, 1) = 0.5 ; ComplexMatrix B = A.transpose(); ComplexMatrix id = B.operator * (A); /* Check the product method */ ComplexCollection ptResult2 = id.operator * ( pt_test ) ; fullprint << "A = " << A << std::endl; fullprint << "B = " << B << std::endl; fullprint << "id = " << id << std::endl; fullprint << "ptResult2 = " << ptResult2 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_ComplexMatrix_std.expout000066400000000000000000000100371307543307100224100ustar00rootroot00000000000000test 0 : default constructor and string converter matrix0 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test 1 : constructor with size, operator() and string converter matrix1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(2,-1),(4,2),(3,2)] test 2 : copy constructor and string converter matrix2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(2,-1),(4,2),(3,2)] test 3 : get dimensions methods matrix1's nbRows = 2 matrix1's nbColumns = 2 test 4 : constructor with collection and array method elementsValues = [(1,0),(2,0),(3,0),(4,0),(5,0),(6,0)] matrix0bis = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(2,0),(3,0),(4,0)] test 5 : assignment method matrix3 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(2,-1),(4,2),(3,2)] test 6 : transposition method matrix1 transposed = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(4,2),(2,-1),(3,2)] test 7 : conjugate method matrix1 conjugated = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(2,1),(4,-2),(3,-2)] test 8 : conjugate and transposition method matrix1 conjugated and transposed= class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(2,1),(4,-2),(3,-2)] test 9 : addition method sum1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,2),(6,1),(6,1),(6,4)] sum2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,2),(6,1),(6,1),(6,4)] sum1 equals sum2 = true test 10: substraction method diff = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(-2,-3),(2,3),(0,0)] test 11 : matrix multiplication method prod = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(12,18),(11,15),(11,15),(8,8)] test 12 : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(9,5),(8,3)] test 13 : multiplication and division by a complex methods scalprod1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,4),(7,-1),(10,10),(7,9)] scalprod2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,4),(7,-1),(10,10),(7,9)] scalprod3 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,4),(7,-1),(10,10),(7,9)] scalprod1 equals scalprod2 = true scalprod1 equals scalprod3 = true scalprod2 equals scalprod3 = true scaldiv1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.4,0.2),(0.5,-0.5),(1.4,0.2),(1.1,0.3)] scaldiv2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.4,0.2),(0.5,-0.5),(1.4,0.2),(1.1,0.3)] scaldiv1 equals scaldiv2 = true test 14 : isEmpty method matrix1 is empty = false matrix7 is empty = true matrix8 is empty = true matrix0 is empty = true test 15 : multiplication with a numerical point method pt_test = class=Point name=Unnamed dimension=2 values=[1,2] A = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,0),(-0.866025,0),(0.866025,0),(0.5,0)] B = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,0),(0.866025,0),(-0.866025,0),(0.5,0)] id = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(0,0),(0,0),(1,0)] ptResult2 = [(1,0),(2,0)] openturns-1.9/lib/test/t_ComplexTensor_std.cxx000066400000000000000000000114651307543307100217020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComplexTensor for standard methods * * Copyright (C) 2014 Airbus-EDF-Phimeca-IMACS * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ ComplexTensor tensor0; /* String converter */ fullprint << "tensor0 = " << tensor0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ ComplexTensor tensor1(2, 2, 3); tensor1.setName("tensor1"); /* Check operator() methods */ tensor1(0, 0, 0) = Complex(1., 0.1); tensor1(1, 0, 0) = Complex(2., 0.2); tensor1(0, 1, 0) = Complex(3., 0.3); tensor1(1, 1, 0) = Complex(4., 0.4); tensor1(0, 0, 1) = Complex(5., 0.5); tensor1(1, 0, 1) = Complex(6., 0.6); tensor1(0, 1, 1) = Complex(7., 0.7); tensor1(1, 1, 1) = Complex(8., 0.8); tensor1(0, 0, 2) = Complex(9., 0.9); tensor1(1, 0, 2) = Complex(10., 1.0) ; tensor1(0, 1, 2) = Complex(11., 1.1) ; tensor1(1, 1, 2) = Complex(12., 1.2) ; /* String converter */ fullprint << "tensor1 = " << tensor1 << std::endl; fullprint << "values = " << tensor1(0, 0, 0) << " ; " << tensor1(1, 0, 0) << " ; " << tensor1(0, 1, 0) << " ; " << tensor1(1, 1, 0) << " ; " << tensor1(0, 0, 1) << " ; " << tensor1(1, 0, 1) << " ; " << tensor1(0, 1, 1) << " ; " << tensor1(1, 1, 1) << " ; " << tensor1(0, 0, 2) << " ; " << tensor1(1, 0, 2) << " ; " << tensor1(0, 1, 2) << " ; " << tensor1(1, 1, 2) << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ ComplexTensor tensor2(tensor1); /* String converter */ fullprint << "tensor2 = " << tensor2 << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "tensor1's nbRows = " << tensor1.getNbRows() << std::endl << "tensor1's nbColumns = " << tensor1.getNbColumns() << std::endl << "tensor1's nbSheets = " << tensor1.getNbSheets() << std::endl; /** TEST NUMBER FOUR : ASSIGNMENT METHOD */ fullprint << "test number four : assignment method" << std::endl; /* Assignment method */ ComplexTensor tensor3 ; tensor3 = tensor1 ; fullprint << "tensor3 = " << tensor3 << std::endl; /** TEST NUMBER FIVE : ISEMPTY METHOD */ fullprint << "test number five : isEmpty method" << std::endl; /* Check method isEmpty */ ComplexTensor tensor5; ComplexTensor tensor6; fullprint << "tensor1 is empty = " << tensor1.isEmpty() << std::endl << "tensor0 is empty = " << tensor0.isEmpty() << std::endl << "tensor5 is empty = " << tensor5.isEmpty() << std::endl << "tensor6 is empty = " << tensor6.isEmpty() << std::endl; /** TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS */ fullprint << "tensor1 = " << tensor1 << std::endl; // Matrix sheet1(tensor1.getSheet(1)); fullprint << "tensor1.getSheet(1) = " << tensor1.getSheet(1) << std::endl; ComplexMatrix sheet2(2, 2); sheet2(0, 0) = 0.5; sheet2(1, 0) = 0.6; sheet2(0, 1) = 0.7; sheet2(1, 1) = 0.8; fullprint << "sheet2 = " << sheet2 << std::endl; tensor1.setSheet(1, sheet2); fullprint << "tensor1 = " << tensor1 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComplexTensor_std.expout000066400000000000000000000041531307543307100224200ustar00rootroot00000000000000test number zero : default constructor and string converter tensor0 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] values = (1,0.1) ; (2,0.2) ; (3,0.3) ; (4,0.4) ; (5,0.5) ; (6,0.6) ; (7,0.7) ; (8,0.8) ; (9,0.9) ; (10,1) ; (11,1.1) ; (12,1.2) test number two : copy constructor and string converter tensor2 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] test number three : get dimensions methods tensor1's nbRows = 2 tensor1's nbColumns = 2 tensor1's nbSheets = 3 test number four : assignment method tensor3 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] test number five : isEmpty method tensor1 is empty = false tensor0 is empty = true tensor5 is empty = true tensor6 is empty = true tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] tensor1.getSheet(1) = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(5,0.5),(6,0.6),(7,0.7),(8,0.8)] sheet2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,0),(0.6,0),(0.7,0),(0.8,0)] tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(0.5,0),(0.6,0),(0.7,0),(0.8,0),(9,0.9),(10,1),(11,1.1),(12,1.2)] openturns-1.9/lib/test/t_ComposedCopula_std.cxx000066400000000000000000000200541307543307100220070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComposedCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object CorrelationMatrix R(3); R(0, 1) = 0.5; R(0, 2) = 0.25; ComposedCopula::CopulaCollection collection(3); collection[0] = FrankCopula(3.0); collection[1] = NormalCopula(R); collection[2] = ClaytonCopula(2.0); ComposedCopula copula(collection); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; // Is this copula elliptical ? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula continuous ? fullprint << "Continuous = " << (copula.isContinuous() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical = " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent = " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = copula.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(4); fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Define a point Point point( copula.getDimension(), 0.6 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point //Scalar eps(1e-5); Point DDF = copula.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Point ddfFD(copula.getDimension()); fullprint << "ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << std::endl; Scalar PDF = copula.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = copula.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; if (copula.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point mean = copula.getMean(); fullprint << "mean=" << mean << std::endl; ComposedCopula::PointWithDescriptionCollection parameters = copula.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; // Covariance and correlation PlatformInfo::SetNumericalPrecision(4); CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Specific to this copula // Extract a 5-D marginal UnsignedInteger dim = 5; point = Point(dim, 0.25); Indices indices(dim, 0); indices[0] = 1; indices[1] = 2; indices[2] = 3; indices[3] = 5; indices[4] = 6; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(point) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(point) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; // Tests o the isoprobabilistic transformation // General case with normal standard distribution fullprint << "isoprobabilistic transformation (general normal)=" << copula.getIsoProbabilisticTransformation() << std::endl; // General case with non-normal standard distribution collection[0] = SklarCopula(Student(3.0, Point(2, 1.0), Point(2, 3.0), CorrelationMatrix(2))); copula = ComposedCopula(collection); fullprint << "isoprobabilistic transformation (general non-normal)=" << copula.getIsoProbabilisticTransformation() << std::endl; // Special case, independent copula collection[0] = SklarCopula(Normal(2)); collection[1] = IndependentCopula(2); collection[2] = NormalCopula(CorrelationMatrix(2)); copula = ComposedCopula(collection); fullprint << "isoprobabilistic transformation (independent)=" << copula.getIsoProbabilisticTransformation() << std::endl; // Special case, single contributor collection = Collection(1); collection[0] = SklarCopula(Student(3.0, Point(2, 1.0), Point(2, 3.0), CorrelationMatrix(2))); copula = ComposedCopula(collection); fullprint << "isoprobabilistic transformation (single contributor)=" << copula.getIsoProbabilisticTransformation() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComposedCopula_std.expout000066400000000000000000001350031307543307100225320ustar00rootroot00000000000000Copula class=ComposedCopula name=ComposedCopula dimension=7 copula[0]=class=FrankCopula name=FrankCopula dimension=2 theta=3 copula[1]=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0.25,0.5,1,0,0.25,0,1] copula[2]=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 Copula ComposedCopula(FrankCopula(theta = 3), NormalCopula(R = [[ 1 0.5 0.25 ] [ 0.5 1 0 ] [ 0.25 0 1 ]]), ClaytonCopula(theta = 2)) Elliptical distribution= false Continuous = true Elliptical = false Independent = false oneRealization=class=Point name=Unnamed dimension=7 values=[0.629877,0.893758,0.102726,0.155617,0.816172,0.0632061,0.0560402] oneSample first=class=Point name=Unnamed dimension=7 values=[0.714382,0.535485,0.361292,0.857057,0.68437,0.684575,0.881797] last=class=Point name=Unnamed dimension=7 values=[0.791736,0.439906,0.167406,0.184528,0.064039,0.0580909,0.0426336] mean=class=Point name=Unnamed dimension=7 values=[0.499089,0.499413,0.497874,0.501718,0.499415,0.50039,0.499583] covariance=class=CovarianceMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[0.08521,0.03941,-0.001371,-0.00121,1.813e-05,0.001567,0.001463,0.03941,0.08388,-0.001656,-0.0006699,0.0007087,0.002045,0.00153,-0.001371,-0.001656,0.08316,0.04072,0.02003,0.0006667,-0.00105,-0.00121,-0.0006699,0.04072,0.083,2.415e-06,-0.000755,-0.001269,1.813e-05,0.0007087,0.02003,2.415e-06,0.08511,0.000302,-0.000421,0.001567,0.002045,0.0006667,-0.000755,0.000302,0.08351,0.05735,0.001463,0.00153,-0.00105,-0.001269,-0.000421,0.05735,0.08381] Point= class=Point name=Unnamed dimension=7 values=[0.6,0.6,0.6,0.6,0.6,0.6,0.6] ddf =class=Point name=Unnamed dimension=7 values=[0.580905,0.580905,0.91183,0.260523,0.130261,0.177648,0.177648] ddf (FD)=class=Point name=Unnamed dimension=7 values=[0.580905,0.580905,0.91183,0.260523,0.130261,0.177648,0.177648] pdf =2.18507 cdf=0.0587971 Survival =0.00724359 Survival (ref)=0.00724359 Inverse survival=class=Point name=Unnamed dimension=7 values=[0.00832738,0.00832738,0.00832738,0.00832738,0.00832738,0.00832738,0.00832738] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=7 values=[0.895624,0.895624,0.895624,0.895624,0.895624,0.895624,0.895624] CDF(quantile)=0.5 mean=class=Point name=Unnamed dimension=7 values=[0.5,0.5,0.5,0.5,0.5,0.5,0.5] parameters=[[copula_0_theta : 3, copula_1_R_2_1 : 0.5, copula_1_R_3_1 : 0.25, copula_1_R_3_2 : 0, copula_2_theta : 2]] covariance=class=CovarianceMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[0.08333,0.03739,0,0,0,0,0,0.03739,0.08333,0,0,0,0,0,0,0,0.08333,0.04022,0.01995,0,0,0,0,0.04022,0.08333,0,0,0,0,0,0.01995,0,0.08333,0,0,0,0,0,0,0,0.08333,0.05685,0,0,0,0,0,0.05685,0.08333] correlation=class=CorrelationMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[1,0.4487,0,0,0,0,0,0.4487,1,0,0,0,0,0,0,0,1,0.4826,0.2394,0,0,0,0,0.4826,1,0,0,0,0,0,0.2394,0,1,0,0,0,0,0,0,0,1,0.6822,0,0,0,0,0,0.6822,1] spearman=class=CorrelationMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[1,0.4487,0,0,0,0,0,0.4487,1,0,0,0,0,0,0,0,1,0.4826,0.2394,0,0,0,0,0.4826,1,0,0,0,0,0,0.2394,0,1,0,0,0,0,0,0,0,1,0.6822,0,0,0,0,0,0.6822,1] kendall=class=CorrelationMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[1,0.3072,0,0,0,0,0,0.3072,1,0,0,0,0,0,0,0,1,0.3333,0.1609,0,0,0,0,0.3333,1,0,0,0,0,0,0.1609,0,1,0,0,0,0,0,0,0,1,0.5,0,0,0,0,0,0.5,1] indices=[1,2,3,5,6] margins=class=ComposedCopula name=ComposedCopula dimension=5 copula[0]=class=IndependentCopula name=IndependentCopula dimension=1 copula[1]=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] copula[2]=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 margins PDF=3.08607 margins CDF=0.00540051 margins quantile=class=Point name=Unnamed dimension=5 values=[0.989493,0.989493,0.989493,0.989493,0.989493] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=5 values=[0.374352,0.645016,0.316395,0.102431,0.120505] isoprobabilistic transformation (general normal)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1,y0,y1,y2,Y0,Y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] gradientImplementation=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] hessianImplementation=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=FrankCopula name=FrankCopula dimension=2 theta=3 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] isoprobabilistic transformation (general non-normal)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1,y0,y1,y2,Y0,Y1] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] gradientImplementation=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] hessianImplementation=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalCopulaEvaluation description=[x0,x1,x2,y0,y1,y2] standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] cholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] gradientImplementation=class=NatafEllipticalCopulaGradient standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] hessianImplementation=class=NatafEllipticalCopulaHessian standardDistribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] inverseCholesky=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,-0.348155,0,1.1547,0.174078,0,0,1.04447] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1,y2] formulas=[x0,x1,x2],class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,Y0,Y1] left function=class=FunctionImplementation name=Unnamed description=[X0,X1,Y0,Y1] evaluationImplementation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=RosenblattEvaluation description=[X0,X1,Y0,Y1] distribution=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,x4,x5,x6,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0,y1] formulas=[x0,x1]] isoprobabilistic transformation (independent)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[X0,X1,X2,X3,X4,X5,Y0,Y1,Y2,Y3,Y4,Y5] evaluationImplementation=class=NatafIndependentCopulaEvaluation description=[X0,X1,X2,X3,X4,X5,Y0,Y1,Y2,Y3,Y4,Y5] dimension=6 gradientImplementation=class=NatafIndependentCopulaGradient dimension=6 hessianImplementation=class=NatafIndependentCopulaHessian dimension=6 isoprobabilistic transformation (single contributor)=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=2 values=[1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0,0,0.333333] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0,0,0.333333] hessianImplementation=class=NatafEllipticalDistributionHessian right function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] openturns-1.9/lib/test/t_ComposedDistribution_large.cxx000066400000000000000000000077701307543307100235550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComposedDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::Set("Distribution-Parallel", "0"); try { Point meanPoint(1); meanPoint[0] = 1.0; Point sigma(1); sigma[0] = 3.0; CorrelationMatrix R(1); R(0, 0) = 1.0; // Create a collection of distribution UnsignedInteger dimension = 2000; fullprint << "Creating a composed distribution of dimension " << dimension << std::endl; ComposedDistribution::DistributionCollection aCollection(dimension, Normal(meanPoint, sigma, R)); for (UnsignedInteger i = 0; i < dimension; i++) { aCollection[i] = Normal(meanPoint, sigma, R); } // Create a copula IndependentCopula aCopula(dimension); // Instanciate one distribution object ComposedDistribution distribution(aCollection, aCopula); fullprint << "Distribution created." << std::endl; // Is this distribution an elliptical distribution? fullprint << "Elliptical distribution= " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Has this distribution an elliptical copula? fullprint << "Elliptical copula= " << (distribution.hasEllipticalCopula() ? "true" : "false") << std::endl; // Has this distribution an independent copula? fullprint << "Independent copula= " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for sampling UnsignedInteger size = 10; Sample anotherSample = distribution.getSample( size ); // Define a point Point zero(dimension, 0.0); // Show PDF and CDF of zero point Scalar zeroPDF = distribution.computePDF( zero ); Scalar zeroCDF = distribution.computeCDF( zero ); fullprint << " pdf=" << zeroPDF << " cdf=" << zeroCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2)) << std::endl; quantile = margins.computeQuantile(0.5); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; Sample sample(margins.getSample(1000)); fullprint << "margins sample mean=" << sample.computeMean() << std::endl; fullprint << "margins sample covariance=" << sample.computeCovariance() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComposedDistribution_large.expout000066400000000000000000000361631307543307100242750ustar00rootroot00000000000000Creating a composed distribution of dimension 2000 Distribution created. Elliptical distribution= true Elliptical copula= true Independent copula= true pdf=0 cdf=0 Quantile=class=Point name=Unnamed dimension=2000 values=[13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149] CDF(quantile)=0.95 indices=[1,0] margins=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margins PDF=0.0158242 margins CDF=0.136487 margins quantile=class=Point name=Unnamed dimension=2 values=[2.63486,2.63486] margins CDF(quantile)=0.5 margins realization=class=Point name=Unnamed dimension=2 values=[-0.497945,0.0659895] margins sample mean=class=Point name=Unnamed dimension=2 values=[1.10296,1.01133] margins sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[9.04179,-0.213449,-0.213449,8.62407] openturns-1.9/lib/test/t_ComposedDistribution_std.cxx000066400000000000000000000244651307543307100232550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ComposedDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::Set("Distribution-Parallel", "0"); try { // Test basic functionnalities //checkClassWithClassName(); Point mean(3); mean[0] = 1.0; mean[1] = 2.0; mean[2] = 3.0; Point sigma(3); sigma[0] = 2.0; sigma[1] = 3.0; sigma[2] = 4.0; // Create a collection of distribution ComposedDistribution::DistributionCollection aCollection; Normal marginal(mean[0], sigma[0]); marginal.setName("First"); Description component(1); component[0] = "One"; marginal.setDescription(component); aCollection.add( Distribution(marginal) ); aCollection[0].setName("First"); marginal = Normal(mean[1], sigma[1]); marginal.setName("Second"); component[0] = "Two"; marginal.setDescription(component); aCollection.add( Distribution(marginal) ); aCollection[1].setName("Second"); marginal = Normal(mean[2], sigma[2]); marginal.setName("Third"); component[0] = "Three"; marginal.setDescription(component); aCollection.add( Distribution(marginal) ); aCollection[2].setName("Third"); // Create a copula IndependentCopula aCopula(aCollection.getSize()); aCopula.setName("Independent copula"); // Instanciate one distribution object ComposedDistribution distribution(aCollection, aCopula); distribution.setName("myDist"); UnsignedInteger dim = distribution.getDimension(); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; fullprint << "Parameters " << distribution.getParametersCollection() << std::endl; fullprint << "Mean " << distribution.getMean() << std::endl; UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(2); fullprint << "Covariance " << distribution.getCovariance() << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Is this distribution an elliptical distribution? fullprint << "Elliptical distribution= " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Has this distribution an elliptical copula? fullprint << "Elliptical copula= " << (distribution.hasEllipticalCopula() ? "true" : "false") << std::endl; // Has this distribution an independent copula? fullprint << "Independent copula= " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = distribution.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point zero(dim, 0.0); // Show PDF and CDF of zero point Scalar zeroPDF = distribution.computePDF( zero ); Scalar zeroCDF = distribution.computeCDF( zero ); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Reference Normal ref(mean, sigma, IdentityMatrix(distribution.getDimension())); fullprint << "Reference=" << std::endl; fullprint << "Zero point= " << zero << " pdf= " << ref.computePDF(zero) << " cdf= " << ref.computeCDF(zero) << " quantile= " << ref.computeQuantile(0.95) << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2)) << std::endl; quantile = margins.computeQuantile(0.5); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; // With a Normal copula CorrelationMatrix correlation(dim); for(UnsignedInteger i = 1; i < dim; i++) { correlation(i - 1, i) = 0.25; } NormalCopula anotherCopula(correlation); anotherCopula.setName("Normal copula"); distribution = ComposedDistribution(aCollection, anotherCopula); distribution.setName("myDist"); Normal distributionRef(mean, sigma, correlation); fullprint << "Distribution " << distribution << std::endl; fullprint << "Parameters " << distribution.getParametersCollection() << std::endl; // Show PDF and CDF at point Point point(dim, 0.0); fullprint << "PDF =" << distribution.computePDF(point) << std::endl; fullprint << "PDF (ref)=" << distributionRef.computePDF(point) << std::endl; fullprint << "CDF =" << distribution.computeCDF(point) << std::endl; fullprint << "CDF (ref)=" << distributionRef.computeCDF(point) << std::endl; Scalar Survival = distribution.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << distribution.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; // 95% quantile quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile =" << quantile << std::endl; fullprint << "Quantile (ref)=" << distributionRef.computeQuantile( 0.95 ) << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions if (distribution.getDimension() <= 2) { Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } // Moments fullprint << "Mean =" << distribution.getMean() << std::endl; fullprint << "Mean (ref)=" << distributionRef.getMean() << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "Standard deviation =" << standardDeviation << std::endl; fullprint << "Standard deviation (ref)=" << distributionRef.getStandardDeviation() << std::endl; Point skewness = distribution.getSkewness(); fullprint << "Skewness =" << skewness << std::endl; fullprint << "Skewness (ref)==" << distributionRef.getSkewness() << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "Kurtosis =" << kurtosis << std::endl; fullprint << "Kurtosis (ref)=" << distributionRef.getKurtosis() << std::endl; fullprint << "Covariance =" << distribution.getCovariance() << std::endl; fullprint << "Covariance (ref)=" << distributionRef.getCovariance() << std::endl; anotherSample = distribution.getSample(size); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComposedDistribution_std.expout000066400000000000000000000200351307543307100237640ustar00rootroot00000000000000Distribution class=ComposedDistribution name=myDist dimension=3 copula=class=IndependentCopula name=Independent copula dimension=3 marginal[0]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution ComposedDistribution(Normal(mu = 1, sigma = 2), Normal(mu = 2, sigma = 3), Normal(mu = 3, sigma = 4), IndependentCopula(dimension = 3)) Parameters [[mean_0_marginal_0 : 1, standard_deviation_0_marginal_0 : 2],[mean_0_marginal_1 : 2, standard_deviation_0_marginal_1 : 3],[mean_0_marginal_2 : 3, standard_deviation_0_marginal_2 : 4],[]] Mean class=Point name=Unnamed dimension=3 values=[1,2,3] Covariance class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,0,0,0,9,0,0,0,16] Elliptical distribution= true Elliptical copula= true Independent copula= true oneRealization=class=Point name=Unnamed dimension=3 values=[2.2164,-1.79852,1.24694] oneSample=class=Sample name=myDist implementation=class=SampleImplementation name=myDist size=10 dimension=3 description=[One,Two,Three] data=[[3.41096,-4.54416,4.40017],[0.289986,6.31175,6.24267],[2.58631,0.588423,4.04407],[-3.58012,-1.84866,-2.24712],[0.818432,4.98738,2.44219],[-0.120411,3.33647,4.2917],[1.89157,-1.11423,-0.426849],[1.94723,1.62351,4.40567],[4.56472,2.21062,-0.125466],[-0.443067,1.27633,-4.15186]] anotherSample mean=class=Point name=Unnamed dimension=3 values=[0.975552,1.97676,3.01562] anotherSample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.93888,-0.108482,0.0252497,-0.108482,9.16197,-0.158405,0.0252497,-0.158405,16.281] Zero point= class=Point name=Unnamed dimension=3 values=[0,0,0] pdf=0.00141116 cdf=0.017655 Quantile=class=Point name=Unnamed dimension=3 values=[5.2424,8.3636,11.4848] CDF(quantile)=0.95 Reference= Zero point= class=Point name=Unnamed dimension=3 values=[0,0,0] pdf= 0.00141116 cdf= 0.017655 quantile= class=Point name=Unnamed dimension=3 values=[5.2424,8.3636,11.4848] margin=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.176033 margin CDF=0.308538 margin quantile=class=Point name=Unnamed dimension=1 values=[4.28971] margin realization=class=Point name=Unnamed dimension=1 values=[-0.253129] margin=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.106483 margin CDF=0.252493 margin quantile=class=Point name=Unnamed dimension=1 values=[6.93456] margin realization=class=Point name=Unnamed dimension=1 values=[1.6826] margin=class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.0752844 margin CDF=0.226627 margin quantile=class=Point name=Unnamed dimension=1 values=[9.57941] margin realization=class=Point name=Unnamed dimension=1 values=[4.19987] indices=[1,0] margins=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margins PDF=0.0187444 margins CDF=0.0779034 margins quantile=class=Point name=Unnamed dimension=2 values=[3.63486,2.0899] margins CDF(quantile)=0.5 margins realization=class=Point name=Unnamed dimension=2 values=[2.80455,-2.40285] Distribution class=ComposedDistribution name=myDist dimension=3 copula=class=NormalCopula name=Normal copula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] marginal[0]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Parameters [[mean_0_marginal_0 : 1, standard_deviation_0_marginal_0 : 2],[mean_0_marginal_1 : 2, standard_deviation_0_marginal_1 : 3],[mean_0_marginal_2 : 3, standard_deviation_0_marginal_2 : 4],[R_2_1_copula : 0.25, R_3_1_copula : 0, R_3_2_copula : 0.25]] PDF =0.00175369 PDF (ref)=0.00175369 CDF =0.033495 CDF (ref)=0.033495 Survival =0.439015 Survival (ref)=0.439015 Inverse survival=class=Point name=Unnamed dimension=3 values=[-3.21773,-4.3266,-5.43546] Survival(inverse survival)=0.95 Quantile =class=Point name=Unnamed dimension=3 values=[5.21773,8.3266,11.4355] Quantile (ref)=class=Point name=Unnamed dimension=3 values=[5.21773,8.3266,11.4355] CDF(quantile)=0.95 Mean =class=Point name=Unnamed dimension=3 values=[1,2,3] Mean (ref)=class=Point name=Unnamed dimension=3 values=[1,2,3] Standard deviation =class=Point name=Unnamed dimension=3 values=[2,3,4] Standard deviation (ref)=class=Point name=Unnamed dimension=3 values=[2,3,4] Skewness =class=Point name=Unnamed dimension=3 values=[0,0,0] Skewness (ref)==class=Point name=Unnamed dimension=3 values=[0,0,0] Kurtosis =class=Point name=Unnamed dimension=3 values=[3,3,3] Kurtosis (ref)=class=Point name=Unnamed dimension=3 values=[3,3,3] Covariance =class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,1.5,0,1.5,9,3,0,3,16] Covariance (ref)=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,1.5,0,1.5,9,3,0,3,16] anotherSample mean=class=Point name=Unnamed dimension=3 values=[1.0094,1.95912,3.02197] anotherSample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.9732,1.4789,-0.0760272,1.4789,9.09621,3.047,-0.0760272,3.047,16.185] openturns-1.9/lib/test/t_ComposedFunction_std.cxx000066400000000000000000000071151307543307100223540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** Left hand side of the composition */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction left(input, formula); /** Right hand side of the composition */ Description input_r(4); input_r[0] = "x1"; input_r[1] = "x2"; input_r[2] = "x3"; input_r[3] = "x4"; Description formula_r(2); formula_r[0] = "(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)"; formula_r[1] = "cos(x2*x2+x4)/(x1*x1+1+x3^4)"; SymbolicFunction right(input_r, formula_r); /** Compositon of left and right */ Function composed(ComposedFunction(left, right)); fullprint << "right=" << right << std::endl; fullprint << "left=" << left << std::endl; fullprint << "composed=" << composed << std::endl; /** Does it worked? */ Point x(right.getInputDimension(), 1.0); Point y(right(x)); Point z(left(y)); Matrix Dy(right.gradient(x)); Matrix Dz(left.gradient(y)); fullprint << "x=" << x << " y=right(x)=" << y << " z=left(y)=" << z << std::endl; fullprint << "left(right(x))=" << composed(x) << std::endl; fullprint << "D(right)(x)=" << Dy << " D(left)(y)=" << Dz; fullprint << " prod=" << Dy * Dz << std::endl; fullprint << "D(left(right(x)))=" << composed.gradient(x) << std::endl; SymmetricTensor result(composed.hessian(x)); fullprint << "DD(left(right(x)))=" << std::endl; for(UnsignedInteger k = 0; k < result.getNbSheets(); k++) { for(UnsignedInteger j = 0; j < result.getNbColumns(); j++) { for(UnsignedInteger i = 0; i < result.getNbRows(); i++) { fullprint << std::setw(14) << std::scientific << std::right << result(i, j, k); } fullprint << std::endl; } fullprint << std::endl; } for (UnsignedInteger i = 0; i < composed.getOutputDimension(); ++i) { fullprint << "Marginal " << i << "=" << composed.getMarginal(i) << std::endl; } Indices indices(2); indices[0] = 0; indices[1] = 1; fullprint << "Marginal (0,1)=" << composed.getMarginal(indices) << std::endl; indices[0] = 0; indices[1] = 2; fullprint << "Marginal (0,2)=" << composed.getMarginal(indices) << std::endl; indices[0] = 1; indices[1] = 2; fullprint << "Marginal (1,2)=" << composed.getMarginal(indices) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ComposedFunction_std.expout000066400000000000000000000615351307543307100231040ustar00rootroot00000000000000right=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] left=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] composed=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x1,x2,x3,x4,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] right function=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] x=class=Point name=Unnamed dimension=4 values=[1,1,1,1] y=right(x)=class=Point name=Unnamed dimension=2 values=[0.5,-0.138716] z=left(y)=class=Point name=Unnamed dimension=3 values=[-0.0691356,0.935444,1.87405] left(right(x))=class=Point name=Unnamed dimension=3 values=[-0.0691356,0.935444,1.87405] D(right)(x)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0.75,0.75,-0.5,-0.5,0.0924771,-0.606198,0.184954,-0.303099] D(left)(y)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[-0.138271,0.495197,-0.353476,-0.353476,1.87405,-1.57222] prod=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[-0.057909,-0.403891,0.160724,-0.0809583,-0.297795,-0.0508305,0.111361,0.283876,1.26014,2.35861,-1.22781,-0.460485] D(left(right(x)))=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[-0.057909,-0.403891,0.160724,-0.0809583,-0.297795,-0.0508305,0.111361,0.283876,1.26014,2.35861,-1.22781,-0.460485] DD(left(right(x)))= 5.357403e-02 -2.890439e-01 7.435629e-02 -6.910706e-02 -2.890439e-01 -1.107986e+00 9.337731e-01 3.288363e-01 7.435629e-02 9.337731e-01 -2.194186e-01 1.164833e-01 -6.910706e-02 3.288363e-01 1.164833e-01 4.443663e-01 -8.297894e-01 -5.212867e-01 6.005606e-01 8.265957e-01 -5.212867e-01 -5.314120e-01 2.178440e-02 2.750733e-01 6.005606e-01 2.178440e-02 -2.913767e-01 -7.330065e-01 8.265957e-01 2.750733e-01 -7.330065e-01 -4.756260e-01 1.811224e+00 2.497746e+00 -1.886630e+00 -1.962054e+00 2.497746e+00 4.931892e+00 -3.938341e+00 -2.885451e+00 -1.886630e+00 -3.938341e+00 1.558095e+00 1.681981e+00 -1.962054e+00 -2.885451e+00 1.681981e+00 -1.274057e+00 Marginal 0=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0] formulas=[x1*sin(x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[1,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[1,0,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] Marginal 1=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[cos(x1+x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] Marginal 2=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y2] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y2] formulas=[(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] Marginal (0,1)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y1] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1] formulas=[x1*sin(x2),cos(x1+x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] Marginal (0,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y2] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y2] formulas=[x1*sin(x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] Marginal (1,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1,y2] evaluationImplementation=class=ComposedEvaluation name=Unnamed leftFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1,y2] formulas=[cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[0,1,0,0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ComposedGradient name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[0,1,0,0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] rightHessian=class=ComposedHessian name=Unnamed leftGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] leftHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightGradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] rightHessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] openturns-1.9/lib/test/t_CompositeDistribution_std.cxx000066400000000000000000000177111307543307100234420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CompositeDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public CompositeDistribution { public: TestObject() : CompositeDistribution(SymbolicFunction("x", "x^2 + 2 * sin(x)"), Normal()) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object SymbolicFunction f("x", "x^2 + 2 * sin(x)"); CompositeDistribution distribution(f, Normal()); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; //RandomGenerator::SetSeed(0); size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; // ResourceMap::SetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize", 1000); LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; CompositeDistribution::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Distribution antecedent(distribution.getAntecedent()); fullprint << "antecedent=" << antecedent << std::endl; Function function(distribution.getFunction()); fullprint << "function=" << function << std::endl; CompositeDistribution newDistribution(function, antecedent); fullprint << "newDistribution=" << newDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CompositeDistribution_std.expout000066400000000000000000000247751307543307100241740ustar00rootroot00000000000000Testing class CompositeDistribution checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-7.65063,-0.739085,7.65063] values=class=Point name=Unnamed dimension=3 values=[56.5733,-0.800977,60.4909] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.229928,1] increasing=[0,1] streamObject(const T & anObject) class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-7.65063,-0.739085,7.65063] values=class=Point name=Unnamed dimension=3 values=[56.5733,-0.800977,60.4909] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.229928,1] increasing=[0,1] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-7.65063,-0.739085,7.65063] values=class=Point name=Unnamed dimension=3 values=[56.5733,-0.800977,60.4909] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.229928,1] increasing=[0,1] Distribution CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)] Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.51269] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.304726] last=class=Point name=Unnamed dimension=1 values=[4.32165] mean=class=Point name=Unnamed dimension=1 values=[0.981731] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.68811] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.0620066] log pdf=-1.82877 pdf =0.160612 pdf (FD)=0.160612 cdf=0.621614 ccdf=0.378386 survival=0.378386 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.78963] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[4.91251] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=1 values=[-0.78963] cdf (tail)=0.95 characteristic function=(0.421744,0.00166811) log characteristic function=(-0.863349,0.00395524) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.0164482,-0.0648158] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.274716,-0.309724] Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.800977] upper bound=class=Point name=Unnamed dimension=1 values=[4.91251] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)]) gradientImplementation=MinimumVolumeLevelSetGradient(CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)]) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)]) level=3.43805 beta=0.0321272 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.79814] upper bound=class=Point name=Unnamed dimension=1 values=[5.94149] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.800977] upper bound=class=Point name=Unnamed dimension=1 values=[4.91251] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.78963] upper bound=class=Point name=Unnamed dimension=1 values=[60.4909] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1] standard deviation=class=Point name=Unnamed dimension=1 values=[1.93115] skewness=class=Point name=Unnamed dimension=1 values=[1.56182] kurtosis=class=Point name=Unnamed dimension=1 values=[6.15981] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.72933] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mean_0 : 0, standard_deviation_0 : 1]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[4.72933] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[23.436] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[154.038] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1261.42] Standard representative=CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] newDistribution=class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-7.65063,-0.739085,7.65063] values=class=Point name=Unnamed dimension=3 values=[56.5733,-0.800977,60.4909] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.229928,1] increasing=[0,1] openturns-1.9/lib/test/t_CompositeProcess_std.cxx000066400000000000000000000044561307543307100224030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CompositeProcess * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /*2 D case */ RandomGenerator::SetSeed(0); /* Time grid creation */ Scalar Tmin = 0.0; Scalar deltaT = 0.1; UnsignedInteger steps = 11; /* Initialization of the time grid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, steps); /* Default ARMA creation */ ARMA myARMAProcess; /* We fix the time grid to the ARMA process */ myARMAProcess.setTimeGrid(timeGrid); fullprint << "myAntecedent = " << myARMAProcess << std::endl; /* We build a 1D function */ Description inputDescription(1, "x"); Description formula(1, "2 * x + 5"); SymbolicFunction myOneDimensionalFunction(inputDescription, formula); /* We build a spatial function */ ValueFunction myFunction(myOneDimensionalFunction); /* Definition of the CompositeProcess */ CompositeProcess myCompositeProcess(myFunction, myARMAProcess); fullprint << "myCompositeProcess =" << myCompositeProcess << std::endl; // We get a TimeSeries as realization of the CompositeProcess const TimeSeries realization(myCompositeProcess.getRealization()); fullprint << "One ARMA realization=" << realization << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CompositeProcess_std.expout000066400000000000000000000044621307543307100231220ustar00rootroot00000000000000myAntecedent = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] myCompositeProcess =class=CompositeProcess function=class=FieldFunction name=Unnamed implementation=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[2 * x + 5] antecedent=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] One ARMA realization=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0.63723],[5.70008],[4.28999],[7.8745],[6.62134],[6.58631],[4.05895],[5.52204],[0.419876],[2.43423],[2.37644]] start=0 timeStep=0.1 n=11 openturns-1.9/lib/test/t_Composite_std.cxx000066400000000000000000000031471307543307100210400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Composite for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Point center(4, 0.0); center.setName("center"); center[0] = 0.5; center[1] = 1.5; center[2] = 2.5; center[3] = 3.5; Point levels(3, 0.0); levels.setName("levels"); levels[0] = 4; levels[1] = 8; levels[2] = 16; Composite myPlane(center, levels); fullprint << "myPlane = " << myPlane << std::endl; Sample sample(myPlane.generate()); fullprint << "sample = " << sample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Composite_std.expout000066400000000000000000000034231307543307100215570ustar00rootroot00000000000000myPlane = class=Composite name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Composite plane implementation=class=SampleImplementation name=Composite plane size=73 dimension=4 data=[[0.5,1.5,2.5,3.5],[-3.5,-2.5,-1.5,-0.5],[4.5,-2.5,-1.5,-0.5],[-3.5,5.5,-1.5,-0.5],[4.5,5.5,-1.5,-0.5],[-3.5,-2.5,6.5,-0.5],[4.5,-2.5,6.5,-0.5],[-3.5,5.5,6.5,-0.5],[4.5,5.5,6.5,-0.5],[-3.5,-2.5,-1.5,7.5],[4.5,-2.5,-1.5,7.5],[-3.5,5.5,-1.5,7.5],[4.5,5.5,-1.5,7.5],[-3.5,-2.5,6.5,7.5],[4.5,-2.5,6.5,7.5],[-3.5,5.5,6.5,7.5],[4.5,5.5,6.5,7.5],[-7.5,-6.5,-5.5,-4.5],[8.5,-6.5,-5.5,-4.5],[-7.5,9.5,-5.5,-4.5],[8.5,9.5,-5.5,-4.5],[-7.5,-6.5,10.5,-4.5],[8.5,-6.5,10.5,-4.5],[-7.5,9.5,10.5,-4.5],[8.5,9.5,10.5,-4.5],[-7.5,-6.5,-5.5,11.5],[8.5,-6.5,-5.5,11.5],[-7.5,9.5,-5.5,11.5],[8.5,9.5,-5.5,11.5],[-7.5,-6.5,10.5,11.5],[8.5,-6.5,10.5,11.5],[-7.5,9.5,10.5,11.5],[8.5,9.5,10.5,11.5],[-15.5,-14.5,-13.5,-12.5],[16.5,-14.5,-13.5,-12.5],[-15.5,17.5,-13.5,-12.5],[16.5,17.5,-13.5,-12.5],[-15.5,-14.5,18.5,-12.5],[16.5,-14.5,18.5,-12.5],[-15.5,17.5,18.5,-12.5],[16.5,17.5,18.5,-12.5],[-15.5,-14.5,-13.5,19.5],[16.5,-14.5,-13.5,19.5],[-15.5,17.5,-13.5,19.5],[16.5,17.5,-13.5,19.5],[-15.5,-14.5,18.5,19.5],[16.5,-14.5,18.5,19.5],[-15.5,17.5,18.5,19.5],[16.5,17.5,18.5,19.5],[4.5,1.5,2.5,3.5],[-3.5,1.5,2.5,3.5],[0.5,5.5,2.5,3.5],[0.5,-2.5,2.5,3.5],[0.5,1.5,6.5,3.5],[0.5,1.5,-1.5,3.5],[0.5,1.5,2.5,7.5],[0.5,1.5,2.5,-0.5],[8.5,1.5,2.5,3.5],[-7.5,1.5,2.5,3.5],[0.5,9.5,2.5,3.5],[0.5,-6.5,2.5,3.5],[0.5,1.5,10.5,3.5],[0.5,1.5,-5.5,3.5],[0.5,1.5,2.5,11.5],[0.5,1.5,2.5,-4.5],[16.5,1.5,2.5,3.5],[-15.5,1.5,2.5,3.5],[0.5,17.5,2.5,3.5],[0.5,-14.5,2.5,3.5],[0.5,1.5,18.5,3.5],[0.5,1.5,-13.5,3.5],[0.5,1.5,2.5,19.5],[0.5,1.5,2.5,-12.5]] openturns-1.9/lib/test/t_ConditionalDistribution_std.cxx000066400000000000000000000171651307543307100237460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ConditionalDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities //checkClassWithClassName(); // Create a collection of distribution { Collection< Distribution > coll2; coll2.add(Dirac(1)); coll2.add(Dirac(2)); coll2.add(Bernoulli(0.7)); coll2.add(Uniform(3.0, 4.0)); ComposedDistribution d2(coll2); Collection< Distribution > coll1; coll1.add(Uniform()); coll1.add(Uniform()); ComposedDistribution d1(coll1); ConditionalDistribution distribution(d1, d2); UnsignedInteger dim = distribution.getDimension(); fullprint << "distribution=" << distribution << std::endl; fullprint << "Parameters " << distribution.getParametersCollection() << std::endl; fullprint << "Mean " << distribution.getMean() << std::endl; fullprint << "Covariance " << distribution.getCovariance().clean(1e-10) << std::endl; // Is this distribution an elliptical distribution? fullprint << "Elliptical distribution= " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Has this distribution an elliptical copula? fullprint << "Elliptical copula= " << (distribution.hasEllipticalCopula() ? "true" : "false") << std::endl; // Has this distribution an independent copula? fullprint << "Independent copula= " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = distribution.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point zero(dim, 0.0); // Show PDF and CDF of zero point Scalar zeroPDF = distribution.computePDF( zero ); Scalar zeroCDF = distribution.computeCDF( zero ); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; } // 1D tests Normal conditionedDistribution; Collection< Distribution > conditioningDistributionCollection; // First conditioning distribution: continuous/continuous { Collection< Distribution > atoms; atoms.add( Uniform( 0.0, 1.0) ); atoms.add( Uniform( 1.0, 2.0) ); conditioningDistributionCollection.add(ComposedDistribution(atoms)); } // Second conditioning distribution: discrete/continuous { Collection< Distribution > atoms; atoms.add( Binomial(3, 0.5) ); atoms.add( Uniform( 1.0, 2.0) ); conditioningDistributionCollection.add(ComposedDistribution(atoms)); } // Third conditioning distribution: dirac/continuous { Collection< Distribution > atoms; atoms.add( Dirac(0.0) ); atoms.add( Uniform( 1.0, 2.0) ); conditioningDistributionCollection.add(ComposedDistribution(atoms)); } for (UnsignedInteger i = 0; i < conditioningDistributionCollection.getSize(); ++i) { fullprint << "conditioning distribution=" << conditioningDistributionCollection[i].__str__() << std::endl; ConditionalDistribution distribution(conditionedDistribution, conditioningDistributionCollection[i]); UnsignedInteger dim = distribution.getDimension(); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; fullprint << "Parameters " << distribution.getParametersCollection() << std::endl; fullprint << "Mean " << distribution.getMean() << std::endl; fullprint << "Covariance " << distribution.getCovariance() << std::endl; // Is this distribution an elliptical distribution? fullprint << "Elliptical distribution= " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Has this distribution an elliptical copula? fullprint << "Elliptical copula= " << (distribution.hasEllipticalCopula() ? "true" : "false") << std::endl; // Has this distribution an independent copula? fullprint << "Independent copula= " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = distribution.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point zero(dim, 0.0); // Show PDF and CDF of zero point Scalar zeroPDF = distribution.computePDF( zero ); Scalar zeroCDF = distribution.computeCDF( zero ); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Extract the marginals for (UnsignedInteger j = 0; j < dim; ++j) { Distribution margin(distribution.getMarginal(j)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ConditionalDistribution_std.expout000066400000000000000000000360401307543307100244610ustar00rootroot00000000000000distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=2 conditioned distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=4 copula=class=IndependentCopula name=IndependentCopula dimension=4 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[1] marginal[1]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[2] marginal[2]=class=Bernoulli name=Bernoulli dimension=1 p=0.7 marginal[3]=class=Uniform name=Uniform dimension=1 a=3 b=4 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y2,y3,y0,y1,y2,y3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1,y2,y3] outputVariablesNames=[y0,y1,y2,y3] formulas=[y0,y1,y2,y3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1,y2,y3] outputVariablesNames=[y0,y1,y2,y3] formulas=[y0,y1,y2,y3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1,y2,y3] outputVariablesNames=[y0,y1,y2,y3] formulas=[y0,y1,y2,y3] Parameters [[point_0_marginal_0 : 1],[point_0_marginal_1 : 2],[p_marginal_2 : 0.7],[a_marginal_3 : 3, b_marginal_3 : 4],[]] Mean class=Point name=Unnamed dimension=2 values=[1.5,2.1] Covariance class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0,0,0.751111] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[1.13528,1.0937] oneSample=class=Sample name=ConditionalDistribution implementation=class=SampleImplementation name=ConditionalDistribution size=10 dimension=2 description=[X0,X1] data=[[1.92068,2.49374],[1.71438,1.87896],[1.8835,1.80748],[1.68457,3.16374],[1.58862,1.53788],[1.21044,2.02765],[1.98184,3.21605],[1.25986,2.2968],[1.11108,1.85243],[1.97898,2.729]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[1.50538,2.09375] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0847776,-0.000929088,-0.000929088,0.74965] Zero point= class=Point name=Unnamed dimension=2 values=[0,0] pdf=0 cdf=0 Quantile=class=Point name=Unnamed dimension=2 values=[1.97468,3.60341] CDF(quantile)=0.95 conditioning distribution=ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[a_marginal_0 : 0, b_marginal_0 : 1],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean class=Point name=Unnamed dimension=1 values=[0.5] Covariance class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.41667] Elliptical distribution= false Elliptical copula= true Independent copula= true oneRealization=class=Point name=Unnamed dimension=1 values=[-0.21251] oneSample=class=Sample name=ConditionalDistribution implementation=class=SampleImplementation name=ConditionalDistribution size=10 dimension=1 description=[X0] data=[[1.04021],[-0.768799],[-0.0327311],[1.95381],[1.43698],[1.31895],[2.05226],[-1.44045],[2.03224],[0.258808]] anotherSample mean=class=Point name=Unnamed dimension=1 values=[0.503649] anotherSample covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.41134] Zero point= class=Point name=Unnamed dimension=1 values=[0] pdf=0.253748 cdf=0.367604 Quantile=class=Point name=Unnamed dimension=1 values=[3.05046] CDF(quantile)=0.95 margin=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] margin PDF=0.253748 margin CDF=0.367604 margin quantile=class=Point name=Unnamed dimension=1 values=[3.05046] margin realization=class=Point name=Unnamed dimension=1 values=[0.141979] conditioning distribution=ComposedDistribution(Binomial(n = 3, p = 0.5), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Binomial name=Binomial dimension=1 n=3 p=0.5 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Binomial(n = 3, p = 0.5), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[n_marginal_0 : 3, p_marginal_0 : 0.5],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean class=Point name=Unnamed dimension=1 values=[1.5] Covariance class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.08333] Elliptical distribution= false Elliptical copula= true Independent copula= true oneRealization=class=Point name=Unnamed dimension=1 values=[0.106685] oneSample=class=Sample name=ConditionalDistribution implementation=class=SampleImplementation name=ConditionalDistribution size=10 dimension=1 description=[X0] data=[[1.52532],[3.2931],[4.70326],[2.99546],[5.81408],[2.47839],[3.09905],[4.94457],[-0.310612],[0.910042]] anotherSample mean=class=Point name=Unnamed dimension=1 values=[1.49603] anotherSample covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.16539] Zero point= class=Point name=Unnamed dimension=1 values=[0] pdf=0.156744 cdf=0.192205 Quantile=class=Point name=Unnamed dimension=1 values=[4.38019] CDF(quantile)=0.95 margin=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Binomial name=Binomial dimension=1 n=3 p=0.5 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] margin PDF=0.156744 margin CDF=0.192205 margin quantile=class=Point name=Unnamed dimension=1 values=[4.38019] margin realization=class=Point name=Unnamed dimension=1 values=[0.843042] conditioning distribution=ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[point_0_marginal_0 : 0],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean class=Point name=Unnamed dimension=1 values=[0] Covariance class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.33333] Elliptical distribution= false Elliptical copula= true Independent copula= true oneRealization=class=Point name=Unnamed dimension=1 values=[0.190984] oneSample=class=Sample name=ConditionalDistribution implementation=class=SampleImplementation name=ConditionalDistribution size=10 dimension=1 description=[X0] data=[[-0.217096],[-1.35136],[-1.30765],[0.789252],[1.43663],[0.580832],[-1.41361],[0.000383335],[-0.00807902],[-1.82229]] anotherSample mean=class=Point name=Unnamed dimension=1 values=[0.0285016] anotherSample covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.34231] Zero point= class=Point name=Unnamed dimension=1 values=[0] pdf=0.276526 cdf=0.5 Quantile=class=Point name=Unnamed dimension=1 values=[2.50635] CDF(quantile)=0.95 margin=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] margin PDF=0.276526 margin CDF=0.5 margin quantile=class=Point name=Unnamed dimension=1 values=[2.50635] margin realization=class=Point name=Unnamed dimension=1 values=[-0.479683] openturns-1.9/lib/test/t_ConditionedNormalProcess_std.cxx000066400000000000000000000070721307543307100240460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ConditionedNormalProcess for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Set Numerical precision to 3 PlatformInfo::SetNumericalPrecision(3); // Process with empty constructor ConditionedNormalProcess myProcess; fullprint << "process = " << myProcess << std::endl; // Learning data Point levels(2); levels[0] = 8; levels[1] = 5; // Define the Box Box box(levels); // Get the input sample Sample inputSample( box.generate() ); // Scale each direction inputSample *= 10; // Define model Description inputDescription(2); inputDescription[0] = "x"; inputDescription[1] = "y"; Description formula(1); formula[0] = "cos(0.5*x) + sin(y)" ; const SymbolicFunction model(inputDescription, formula); // Build the output sample const Sample outputSample( model(inputSample) ); // 2) Definition of exponential model Point scale(2); scale[0] = 1.988; scale[1] = 0.924; Point amplitude(1, 3.153); SquaredExponential covarianceModel(scale, amplitude); // 3) Basis definition Basis basis(ConstantBasisFactory(2).build()); // Kriring algorithm std::cerr << "before algo" << std::endl; KrigingAlgorithm algo(inputSample, outputSample, covarianceModel, basis, true); std::cerr << "before run" << std::endl; algo.run(); std::cerr << "run ok" << std::endl; // Get result KrigingResult result(algo.getResult()); std::cerr << "result=" << result << std::endl; // Build a mesh // Start with vertices Sample vertices(0, 2); Point p(2); p[0] = 1.0; p[1] = 0.0; vertices.add(p); p[0] = 2.0; p[1] = 0.0; vertices.add(p); p[0] = 2.0; p[1] = 1.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; vertices.add(p); p[0] = 1.5; p[1] = 0.5; vertices.add(p); Mesh::IndicesCollection simplicies(4, Indices(3)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[0][2] = 4; simplicies[1][0] = 1; simplicies[1][1] = 2; simplicies[1][2] = 4; simplicies[2][0] = 2; simplicies[2][1] = 3; simplicies[2][2] = 4; simplicies[3][0] = 3; simplicies[3][1] = 0; simplicies[3][2] = 4; Mesh mesh2D(vertices, simplicies); // Conditioned process ConditionedNormalProcess process(result, mesh2D); std::cerr << "process (conditioned)=" << process << std::endl; // Get a realization of the process Field realization( process.getRealization() ); fullprint << "realization = " << realization << std::endl; // Get a sample & compare it to expectation ProcessSample sample(process.getSample(5000)); fullprint << "Mean over 5000 realizations = " << sample.computeMean() << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_ConditionedNormalProcess_std.expout000066400000000000000000000035161307543307100245670ustar00rootroot00000000000000process = class=ConditionedNormalProcess, mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 description=[t] data=[[0]] simplices=[], trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0], covariance=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true, conditional covariance =class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] realization = class=Field name=Unnamed description=[v0,v1,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,0],[2,0],[2,1],[1,1],[1.5,0.5]] simplices=[[0,1,4],[1,2,4],[2,3,4],[3,0,4]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[y0] data=[[0.878],[0.54],[1.39],[1.73],[1.22]] Mean over 5000 realizations = class=Field name=Unnamed description=[v0,v1,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,0],[2,0],[2,1],[1,1],[1.5,0.5]] simplices=[[0,1,4],[1,2,4],[2,3,4],[3,0,4]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[y0] data=[[0.878],[0.54],[1.4],[1.73],[1.23]] openturns-1.9/lib/test/t_ConstantGradient_std.cxx000066400000000000000000000035731307543307100223500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ConstantGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Constant term Matrix constant(inputDimension, outputDimension); constant(0, 0) = 1.0; constant(1, 0) = 2.0; constant(2, 0) = 5.0; constant(0, 1) = 7.0; constant(1, 1) = 9.0; constant(2, 1) = 3.0; ConstantGradient myGradient(constant); myGradient.setName("constantGradient"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; Matrix outMatrix = myGradient.gradient( inPoint ); fullprint << "myGradient=" << myGradient << std::endl; fullprint << myGradient.getName() << "( " << inPoint << " ) = " << outMatrix << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ConstantGradient_std.expout000066400000000000000000000005371307543307100230670ustar00rootroot00000000000000myGradient=class=ConstantGradient name=constantGradient constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] constantGradient( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] openturns-1.9/lib/test/t_ConstantHessian_std.cxx000066400000000000000000000046261307543307100222050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ConstantHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(4); UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Constant term SymmetricTensor constant(inputDimension, outputDimension); constant(0, 0, 0) = 7.0; constant(0, 0, 1) = -7.0; constant(0, 1, 0) = 8.0; constant(0, 1, 1) = -8.0; constant(0, 2, 0) = 9.0; constant(0, 2, 1) = -9.0; constant(1, 0, 0) = 8.0; constant(1, 0, 1) = -8.0; constant(1, 1, 0) = 10.0; constant(1, 1, 1) = -10.0; constant(1, 2, 0) = 11.0; constant(1, 2, 1) = -11.0; constant(2, 0, 0) = 9.0; constant(2, 0, 1) = -9.0; constant(2, 1, 0) = 11.0; constant(2, 1, 1) = -11.0; constant(2, 2, 0) = 12.0; constant(2, 2, 1) = -12.0; ConstantHessian myHessian(constant); myHessian.setName("constantHessian"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; SymmetricTensor outTensor = myHessian.hessian( inPoint ); fullprint << "myHessian=" << myHessian << std::endl; fullprint << myHessian.getName() << "( " << inPoint << " ) = " << outTensor << std::endl; fullprint << myHessian.getName() << "( " << inPoint << " ) = " << outTensor.__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ConstantHessian_std.expout000066400000000000000000000012121307543307100227130ustar00rootroot00000000000000myHessian=class=ConstantHessian name=constantHessian constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] constantHessian( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] constantHessian( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = sheet #0 [[ 7 8 9 ] [ 8 10 11 ] [ 9 11 12 ]] sheet #1 [[ -7 -8 -9 ] [ -8 -10 -11 ] [ -9 -11 -12 ]] openturns-1.9/lib/test/t_Contour_std.cxx000066400000000000000000000046301307543307100205250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Contour for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a function Description inputVar(2); inputVar[0] = "x"; inputVar[1] = "y"; Description outputVar(1); outputVar[0] = "z"; Description formula(1); formula[0] = "exp(-sin(cos(y)^2*x^2+sin(x)^2*y^2))"; Function f(inputVar, outputVar, formula); // Generate the data for the curver to be drawn Point discretization(2); UnsignedInteger nX = 75; UnsignedInteger nY = 75; discretization[0] = nX; discretization[1] = nY; Sample inputData(Box(discretization).generate()); inputData *= Point(2, 10.0); inputData += Point(2, -5.0); Sample data(f(inputData)); UnsignedInteger size = 7; Point levels(size); for (UnsignedInteger i = 0; i < size; i++) { levels[i] = (0.5 + i) / size; } // Create an empty graph Graph myGraph("Complex iso lines", "u1", "u2", true, "topright"); // Create the first cloud Contour myContour(nX + 2, nY + 2, data); myContour.setLevels(levels); myContour.setColor("red"); fullprint << "contour=" << myContour << std::endl; // Then, draw it myGraph.add(Drawable(myContour)); myGraph.draw("Graph_Contour_OT"); // Check that the correct files have been generated by computing their checksum } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Contour_std.expout000066400000000000000000000046061307543307100212520ustar00rootroot00000000000000contour=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=77 dimension=1 data=[[0],[0.0131579],[0.0263158],[0.0394737],[0.0526316],[0.0657895],[0.0789474],[0.0921053],[0.105263],[0.118421],[0.131579],[0.144737],[0.157895],[0.171053],[0.184211],[0.197368],[0.210526],[0.223684],[0.236842],[0.25],[0.263158],[0.276316],[0.289474],[0.302632],[0.315789],[0.328947],[0.342105],[0.355263],[0.368421],[0.381579],[0.394737],[0.407895],[0.421053],[0.434211],[0.447368],[0.460526],[0.473684],[0.486842],[0.5],[0.513158],[0.526316],[0.539474],[0.552632],[0.565789],[0.578947],[0.592105],[0.605263],[0.618421],[0.631579],[0.644737],[0.657895],[0.671053],[0.684211],[0.697368],[0.710526],[0.723684],[0.736842],[0.75],[0.763158],[0.776316],[0.789474],[0.802632],[0.815789],[0.828947],[0.842105],[0.855263],[0.868421],[0.881579],[0.894737],[0.907895],[0.921053],[0.934211],[0.947368],[0.960526],[0.973684],[0.986842],[1]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=77 dimension=1 data=[[0],[0.0131579],[0.0263158],[0.0394737],[0.0526316],[0.0657895],[0.0789474],[0.0921053],[0.105263],[0.118421],[0.131579],[0.144737],[0.157895],[0.171053],[0.184211],[0.197368],[0.210526],[0.223684],[0.236842],[0.25],[0.263158],[0.276316],[0.289474],[0.302632],[0.315789],[0.328947],[0.342105],[0.355263],[0.368421],[0.381579],[0.394737],[0.407895],[0.421053],[0.434211],[0.447368],[0.460526],[0.473684],[0.486842],[0.5],[0.513158],[0.526316],[0.539474],[0.552632],[0.565789],[0.578947],[0.592105],[0.605263],[0.618421],[0.631579],[0.644737],[0.657895],[0.671053],[0.684211],[0.697368],[0.710526],[0.723684],[0.736842],[0.75],[0.763158],[0.776316],[0.789474],[0.802632],[0.815789],[0.828947],[0.842105],[0.855263],[0.868421],[0.881579],[0.894737],[0.907895],[0.921053],[0.934211],[0.947368],[0.960526],[0.973684],[0.986842],[1]] levels=class=Point name=Unnamed dimension=7 values=[0.0714286,0.214286,0.357143,0.5,0.642857,0.785714,0.928571] labels=[0.0714286,0.214286,0.357143,0.5,0.642857,0.785714,0.928571] show labels=true derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5929 dimension=1 description=[z] data=[[1.14151],[0.398118],[0.369272],...,[0.369272],[0.398118],[1.14151]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1 openturns-1.9/lib/test/t_CorrectedLeaveOneOut_std.cxx000066400000000000000000000042421307543307100231140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CorrectedLeaveOneOut for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); UnsignedInteger size = 100; Uniform xuniform(0.9, 1.1); Sample x( xuniform.getSample(size) ); Uniform yuniform(1.9, 2.1); Sample y( yuniform.getSample(size) ); Function f( Description(1, "x"), Description(1, "y"), Description(1, "2.0*x") ); Basis basis; basis.add(f); Indices indices(basis.getSize()); indices.fill(); FittingAlgorithm fittingAlgo = CorrectedLeaveOneOut(); Scalar result = fittingAlgo.run(x, y, basis, indices); fullprint << "result = " << result << std::endl; try { size = 2; x = xuniform.getSample(size); y = yuniform.getSample(size); Function f2( Description(1, "x"), Description(1, "y"), Description(1, "x^2") ); basis.add(f2); Function f3( Description(1, "x"), Description(1, "y"), Description(1, "x^3") ); basis.add(f3); indices = Indices(basis.getSize()); indices.fill(); result = fittingAlgo.run( x, y, basis, indices ); fullprint << "result=" << result << std::endl; } catch (InvalidArgumentException & ex) { fullprint << "caught exception: " << ex.what() << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_CorrectedLeaveOneOut_std.expout000066400000000000000000000001071307543307100236320ustar00rootroot00000000000000result = 5.42565 caught exception: Not enough samples (2) required (3) openturns-1.9/lib/test/t_CorrelationAnalysis_std.cxx000066400000000000000000000044721307543307100230650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Test file fo the correlation coefficients computation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection DistributionCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dimension = 2; UnsignedInteger sampleSize = 1000; // we create an analytical function Description input(dimension); input[0] = "x0"; input[1] = "x1"; Description foutput(1, "f"); Description formulas(1, "10+3*x0+x1"); Function analytical(input, foutput, formulas); // we create a collection of Normal centered distributions DistributionCollection aCollection; for(UnsignedInteger i = 0; i < dimension; ++i) { aCollection.add(Normal()); } // we create one distribution object ComposedDistribution aDistribution(aCollection, IndependentCopula(dimension)); RandomVector randomVector(aDistribution); RandomVector composite(analytical, randomVector); fullprint << "composite=" << composite << std::endl; // we create two input samples for the function Sample inputSample(randomVector.getSample(sampleSize)); Sample outputSample(analytical(inputSample)); Point src(CorrelationAnalysis::SRC(inputSample, outputSample)); fullprint << "src=" << src << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CorrelationAnalysis_std.expout000066400000000000000000000027631307543307100236100ustar00rootroot00000000000000composite=class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,f] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] antecedent=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] src=class=Point name=Unnamed dimension=2 values=[0.895287,0.104713] openturns-1.9/lib/test/t_CorrelationMatrix_std.cxx000066400000000000000000000023031307543307100225350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the standard methods of the CorrelationMatrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); CorrelationMatrix matrix1(2); matrix1.setName("matrix1"); fullprint << "matrix1 = " << matrix1 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_CorrelationMatrix_std.expout000066400000000000000000000002071307543307100232600ustar00rootroot00000000000000matrix1 = class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0,0,1] openturns-1.9/lib/test/t_CovarianceMatrixLapack_std.cxx000066400000000000000000000043071307543307100234500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the Lapack based methods of the CovarianceMatrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); CovarianceMatrix matrix1(2); matrix1.setName("matrix1"); fullprint << "matrix1 (default)=" << matrix1 << std::endl; matrix1(0, 0) = 1.0; matrix1(1, 0) = 0.5; matrix1(1, 1) = 1.0; fullprint << "matrix1 (initialized)=" << matrix1 << std::endl; Point pt; pt.add(5.0); pt.add(0.0); fullprint << "pt=" << pt << std::endl; Point result; result = matrix1.solveLinearSystem(pt); fullprint << "result=" << result << std::endl; Matrix b(2, 3); b(0, 0) = 5.0; b(1, 0) = 0.0; b(0, 1) = 10.0; b(1, 1) = 1.0; b(0, 2) = 15.0; b(1, 2) = 2.0; Matrix result2 ; result2 = matrix1.solveLinearSystem(b); fullprint << "result2=" << result2 << std::endl; Scalar determinant ; determinant = matrix1.computeDeterminant(); fullprint << "determinant=" << determinant << std::endl; Collection ev(2); ev = matrix1.computeEigenValues().getCollection(); fullprint << "ev=" << ev << std::endl; bool isSPD = matrix1.isPositiveDefinite(); fullprint << "isSPD=" << isSPD << std::endl; TriangularMatrix matrix2 = matrix1.computeCholesky(); fullprint << "matrix2=" << matrix2 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_CovarianceMatrixLapack_std.expout000066400000000000000000000013561307543307100241730ustar00rootroot00000000000000matrix1 (default)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0,0,1] matrix1 (initialized)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0.5,0.5,1] pt=class=Point name=Unnamed dimension=2 values=[5,0] result=class=Point name=Unnamed dimension=2 values=[6.66667,-3.33333] result2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[6.66667,-3.33333,12.6667,-5.33333,18.6667,-7.33333] determinant=0.75 ev=[0.5,1.5] isSPD=true matrix2=class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0,0.866025] openturns-1.9/lib/test/t_CovarianceModel_std.cxx000066400000000000000000000147571307543307100221420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SquaredExponential * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; static void test_model(const CovarianceModel & myModel) { OStream fullprint(std::cout); fullprint << "myModel = " << myModel << std::endl; const UnsignedInteger spatialDimension = myModel.getSpatialDimension(); const UnsignedInteger dimension = myModel.getDimension(); Point x1(spatialDimension); Point x2(spatialDimension); for (UnsignedInteger j = 0; j < spatialDimension; ++ j) { x1[j] = 8.0 * (0.5 - j); x2[j] = -1.0 * (3.0 - 2.0 * j); } fullprint << "myModel(" << x1 << ", " << x2 << ")=" << myModel(x1, x2) << std::endl; Matrix grad(myModel.partialGradient(x1, x2)); fullprint << "dCov =" << grad << std::endl; Scalar eps = 1e-3; if (dimension == 1) { Point gradfd(spatialDimension); for (UnsignedInteger j = 0; j < spatialDimension; ++ j) { Point x1_g(x1); Point x1_d(x1); x1_g[j] += eps; x1_d[j] -= eps; gradfd[j] = (myModel(x1_g, x2)(0, 0) - myModel(x1_d, x2)(0, 0)) / (2.0 * eps); } fullprint << "dCov (FD)=" << gradfd << std::endl; } else { Matrix gradfd(spatialDimension, dimension * dimension); CovarianceMatrix covarianceX1X2 = myModel(x1, x2); // Convert result into MatrixImplementation to symmetrize & get the collection MatrixImplementation covarianceX1X2Implementation(*covarianceX1X2.getImplementation()); covarianceX1X2Implementation.symmetrize(); const Point centralValue(covarianceX1X2Implementation); // Loop over the shifted points for (UnsignedInteger i = 0; i < spatialDimension; ++i) { Point currentPoint(x1); currentPoint[i] += eps; CovarianceMatrix localCovariance = myModel(currentPoint, x2); MatrixImplementation localCovarianceImplementation(*localCovariance.getImplementation()); localCovarianceImplementation.symmetrize(); const Point currentValue(localCovarianceImplementation); for (UnsignedInteger j = 0; j < centralValue.getDimension(); ++j) gradfd(i, j) = (currentValue[j] - centralValue[j]) / eps; } fullprint << "dCov (FD)=" << gradfd << std::endl; } } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(3); // Default spatial dimension parameter to evaluate the model const UnsignedInteger dimension = 2; { /* Default constructor */ SquaredExponential myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; SquaredExponential myModel(dimension); test_model(myModel); } { /* Default constructor */ GeneralizedExponential myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; GeneralizedExponential myModel(Point(dimension, 10.0), 1.5); test_model(myModel); } { /* Default constructor */ AbsoluteExponential myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; AbsoluteExponential myModel(Point(dimension, 10.0)); test_model(myModel); } { /* Default constructor */ MaternModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; MaternModel myModel(Point(dimension, 8.0), 2.0); test_model(myModel); } { // Generate collection Collection collection; // Collection ==> add covariance models AbsoluteExponential myAbsoluteExponential(Point(1, 3.0)); collection.add(myAbsoluteExponential); SquaredExponential mySquaredExponential(Point(1, 2.0)); collection.add(mySquaredExponential); // Build ProductCovarianceModel ProductCovarianceModel myModel(collection); fullprint << "myModel = " << myModel << std::endl; // Check that myModel(x) = myAbsoluteExponential * mySquaredExponential Point point(2); point[0] = 0.50; point[1] = -6.0; const Point x(1, point[0]); const Point y(1, point[1]); fullprint << "Validation of myModel(x_1, x_2) - myAbsoluteExponential(x_1) * mySquaredExponential(x_2) = " << myModel(point) - myAbsoluteExponential(x) * mySquaredExponential(y) << std::endl; // Gradient test in comparison with FD test_model(myModel); } { // Tensorized covariance model const UnsignedInteger spatialDimension = 2; Collection collection; // Collection ==> add covariance models // Add AbsoluteExponentialModel to the collection AbsoluteExponential myAbsoluteExponential(Point(spatialDimension, 3.0)); collection.add(myAbsoluteExponential); // Add SquaredExponentialModel to the collection SquaredExponential mySquaredExponential(Point(spatialDimension, 2.0)); collection.add(mySquaredExponential); // Add exponentialModel to the collection Point amplitude(2); amplitude[0] = 4.0; amplitude[1] = 2.0; // Define scale Point scale(2, 1.0); // Define a spatial correlation CorrelationMatrix spatialCorrelation(spatialDimension); spatialCorrelation(1, 0) = 0.3; ExponentialModel myExponentialModel(scale, amplitude, spatialCorrelation); collection.add(myExponentialModel); // Build TensorizedCovarianceModel with scale = [1,..,1] TensorizedCovarianceModel myModel(collection); test_model(myModel); // Define new scale scale[0] = 2.5; scale[1] = 1.5; myModel.setScale(scale); test_model(myModel); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CovarianceModel_std.expout000066400000000000000000000160161307543307100226520ustar00rootroot00000000000000myDefautModel = class=SquaredExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] myModel = class=SquaredExponential scale=class=Point name=Unnamed dimension=2 values=[1,1] amplitude=class=Point name=Unnamed dimension=1 values=[1] myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.54e-13] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[-1.78e-12,7.63e-13] dCov (FD)=class=Point name=Unnamed dimension=2 values=[-1.78e-12,7.63e-13] myDefautModel = class=GeneralizedExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] p=1 myModel = class=GeneralizedExponential scale=class=Point name=Unnamed dimension=2 values=[10,10] amplitude=class=Point name=Unnamed dimension=1 values=[1] p=1.5 myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.514] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[-0.0619,0.0265] dCov (FD)=class=Point name=Unnamed dimension=2 values=[-0.0619,0.0265] myDefautModel = class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] myModel = class=AbsoluteExponential scale=class=Point name=Unnamed dimension=2 values=[10,10] amplitude=class=Point name=Unnamed dimension=1 values=[1] myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.368] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[-0.0368,0.0368] dCov (FD)=class=Point name=Unnamed dimension=2 values=[-0.0368,0.0368] myDefautModel = class=MaternModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] nu=1.5 myModel = class=MaternModel scale=class=Point name=Unnamed dimension=2 values=[8,8] amplitude=class=Point name=Unnamed dimension=1 values=[1] nu=2 myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.535] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[-0.0661,0.0283] dCov (FD)=class=Point name=Unnamed dimension=2 values=[-0.0661,0.0283] myModel = class=ProductCovarianceModel input dimension=2 models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[3] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=SquaredExponential scale=class=Point name=Unnamed dimension=1 values=[2] amplitude=class=Point name=Unnamed dimension=1 values=[1]] Validation of myModel(x_1, x_2) - myAbsoluteExponential(x_1) * mySquaredExponential(x_2) = class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0] myModel = class=ProductCovarianceModel input dimension=2 models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[3] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=SquaredExponential scale=class=Point name=Unnamed dimension=1 values=[2] amplitude=class=Point name=Unnamed dimension=1 values=[1]] myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0315] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[-0.0105,0.0236] dCov (FD)=class=Point name=Unnamed dimension=2 values=[-0.0105,0.0236] myModel = class=TensorizedCovarianceModel input dimension=2, dimension = 4, models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=2 values=[3,3] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=SquaredExponential scale=class=Point name=Unnamed dimension=2 values=[2,2] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=ExponentialModel scale=class=Point name=Unnamed dimension=2 values=[1,1] amplitude=class=Point name=Unnamed dimension=2 values=[4,2] spatial correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.3,0.3,1] isDiagonal=false] myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.0357,0,0,0,0,0.00071,0,0,0,0,0.00788,0.00118,0,0,0.00118,0.00197] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[-0.0119,0.0119,0,0,0,0,0,0,0,0,-0.00124,0.000533,0,0,0,0,0,0,0,0,-0.00724,0.0031,-0.00109,0.000466,0,0,0,0,-0.00109,0.000466,-0.00181,0.000776] dCov (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[-0.0119,0.0119,0,0,0,0,0,0,0,0,-0.00124,0.000533,0,0,0,0,0,0,0,0,-0.00724,0.00311,-0.00109,0.000466,0,0,0,0,-0.00109,0.000466,-0.00181,0.000776] myModel = class=TensorizedCovarianceModel input dimension=2, dimension = 4, models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=2 values=[2.5,1.5] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=SquaredExponential scale=class=Point name=Unnamed dimension=2 values=[1.67,1] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=ExponentialModel scale=class=Point name=Unnamed dimension=2 values=[0.833,0.5] amplitude=class=Point name=Unnamed dimension=2 values=[4,2] spatial correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.3,0.3,1] isDiagonal=false] myModel(class=Point name=Unnamed dimension=2 values=[4,-4], class=Point name=Unnamed dimension=2 values=[-3,-1])=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.00823,0,0,0,0,1.64e-06,0,0,0,0,0.000526,7.89e-05,0,0,7.89e-05,0.000132] dCov =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[-0.00329,0.00549,0,0,0,0,0,0,0,0,-4.14e-06,4.92e-06,0,0,0,0,0,0,0,0,-0.000514,0.000611,-7.7e-05,9.17e-05,0,0,0,0,-7.7e-05,9.17e-05,-0.000128,0.000153] dCov (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[-0.00329,0.00549,0,0,0,0,0,0,0,0,-4.13e-06,4.93e-06,0,0,0,0,0,0,0,0,-0.000513,0.000612,-7.7e-05,9.18e-05,0,0,0,0,-7.7e-05,9.18e-05,-0.000128,0.000153] openturns-1.9/lib/test/t_CumulativeDistributionNetwork_std.cxx000066400000000000000000000146501307543307100251670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class CumulativeDistributionNetwork for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public CumulativeDistributionNetwork { public: TestObject() : CumulativeDistributionNetwork() {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object BipartiteGraph graph(0); Indices first(0); first.add(0); first.add(1); graph.add(first); Indices second(0); second.add(0); second.add(1); graph.add(second); CumulativeDistributionNetwork distribution(CumulativeDistributionNetwork::DistributionCollection(2, Normal(2)), graph); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; UnsignedInteger oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(5); // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << std::setprecision(5) << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << std::setprecision(5) << "pdf =" << PDF << std::endl; fullprint << std::setprecision(5) << "pdf (FD)=" << distribution.DistributionImplementation::computePDF(point) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << std::setprecision(5) << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << std::setprecision(5) << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << std::setprecision(5) << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions if (distribution.getDimension() <= 2) { ResourceMap::SetAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize", 1000 ); Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; PlatformInfo::SetNumericalPrecision(oldPrecision); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_CumulativeDistributionNetwork_std.expout000066400000000000000000000123431307543307100257060ustar00rootroot00000000000000Testing class CumulativeDistributionNetwork checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=CumulativeDistributionNetwork name=CumulativeDistributionNetwork dimension=1 distributionCollection=[class=Uniform name=Uniform dimension=1 a=-1 b=1] graph=[[0]] streamObject(const T & anObject) class=CumulativeDistributionNetwork name=CumulativeDistributionNetwork dimension=1 distributionCollection=[class=Uniform name=Uniform dimension=1 a=-1 b=1] graph=[[0]] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=CumulativeDistributionNetwork name=CumulativeDistributionNetwork dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1]] graph=[[0,1],[0,1]] Distribution CumulativeDistributionNetwork([Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])), Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]]))][[0,1],[0,1]]) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=2 values=[0.819143,1.55123] oneSample first=class=Point name=Unnamed dimension=2 values=[-0.337688,0.500922] last=class=Point name=Unnamed dimension=2 values=[-0.31133,-0.29406] mean=class=Point name=Unnamed dimension=2 values=[0.57312,0.562745] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.693077,-0.0044764,-0.0044764,0.685993] Point= class=Point name=Unnamed dimension=2 values=[1,1] log pdf=-1.7971 pdf =0.16578 pdf (FD)=0.16578 cdf=0.50107 ccdf=0.49893 survival=0.085345 Inverse survival=class=Point name=Unnamed dimension=2 values=[-0.99806,-0.99806] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=2 values=[2.234,2.234] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-7.6506,-7.6506] upper bound=class=Point name=Unnamed dimension=2 values=[7.6506,7.6506] finite lower bound=[1,1] finite upper bound=[1,1] threshold=1 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(CumulativeDistributionNetwork([Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])), Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]]))][[0,1],[0,1]])) gradientImplementation=MinimumVolumeLevelSetGradient(CumulativeDistributionNetwork([Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])), Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]]))][[0,1],[0,1]])) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(CumulativeDistributionNetwork([Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])), Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]]))][[0,1],[0,1]])) level=4.473 beta=0.011413 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-7.6506,-7.6506] upper bound=class=Point name=Unnamed dimension=2 values=[7.6506,7.6506] finite lower bound=[1,1] finite upper bound=[1,1] beta=1 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-7.6506,-7.6506] upper bound=class=Point name=Unnamed dimension=2 values=[2.234,2.234] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.97468 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-0.99806,-0.99806] upper bound=class=Point name=Unnamed dimension=2 values=[7.6506,7.6506] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.97468 mean=class=Point name=Unnamed dimension=2 values=[0.56419,0.56419] standard deviation=class=Point name=Unnamed dimension=2 values=[0.82565,0.82565] skewness=class=Point name=Unnamed dimension=2 values=[0.13695,0.13695] kurtosis=class=Point name=Unnamed dimension=2 values=[3.0617,3.0617] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.68169,0,0,0.68169] correlation=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] spearman=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] kendall=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] openturns-1.9/lib/test/t_Curve_std.cxx000066400000000000000000000046631307543307100201660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Curve for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Generate the data for the curves to be drawn UnsignedInteger size = 50; Point cursor(2); Sample data1(size, 2); //curve y = 2x for x in [-2;5] Sample data2(size, 2); //curve y = x*x for x in [-1;1] Scalar tmp; for(UnsignedInteger i = 0; i < size; i++) { tmp = 7.*i / size + 2; cursor[0] = tmp; cursor[1] = 2 * tmp; data1[i] = cursor; tmp = 9.*i / size + 1; cursor[0] = tmp; cursor[1] = tmp * tmp; data2[i] = cursor; } // Create an empty graph Graph myGraph("Some curves", "x1", "x2", true, "topright", 1.0, GraphImplementation::NONE); // Create the first curve Curve myCurve1(data1, "blue", "dashed", 2, "linear function"); // Then, draw it myGraph.add(myCurve1); myGraph.draw("Graph_Curve_a_OT.png"); // Check that the correct files have been generated by computing their checksum // Create the second cloud Curve myCurve2(data2, "red", "solid", 2, "polynomial function"); // Add it to the graph and draw everything myGraph.add(myCurve2); for (UnsignedInteger i = 0; i < 4; ++i) { myGraph.setLogScale(static_cast(i)); myGraph.draw(String(OSS() << "Graph_Curve_b_OT_" << i << ".png")); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Curve_std.expout000066400000000000000000000000001307543307100206650ustar00rootroot00000000000000openturns-1.9/lib/test/t_DatabaseFunction_std.cxx000066400000000000000000000037671307543307100223200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for database * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Database construction */ Sample inputSample(0, 2); inputSample.add(Point(2, 1.0)); inputSample.add(Point(2, 2.0)); Description inputDescription(0); inputDescription.add("x0"); inputDescription.add("x1"); inputSample.setDescription(inputDescription); Sample outputSample(0, 1); outputSample.add(Point(1, 4.0)); outputSample.add(Point(1, 5.0)); Description outputDescription(0); outputDescription.add("y0"); outputSample.setDescription(outputDescription); DatabaseFunction database(inputSample, outputSample); fullprint << "database=" << database.__str__() << std::endl << std::endl; /* Does it work? */ Point x(database.getInputDimension(), 1.8); fullprint << "x=" << x.__str__() << std::endl; fullprint << "database(x)=" << database(x).__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DatabaseFunction_std.expout000066400000000000000000000002471307543307100230300ustar00rootroot00000000000000database=DatabaseEvaluation input sample : [ x0 x1 ] 0 : [ 1 1 ] 1 : [ 2 2 ] output sample : [ y0 ] 0 : [ 4 ] 1 : [ 5 ] x=[1.8,1.8] database(x)=[5] openturns-1.9/lib/test/t_Description_std.cxx000066400000000000000000000052411307543307100213560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Description for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); String val1, val2; /* Default constructor */ Description desc1; const Description & ref_desc1(desc1); /* Check method add() */ desc1.add("X"); desc1.add("Y"); UnsignedInteger size = desc1.getSize(); fullprint << "size of desc1 = " << size << std::endl; val1 = ref_desc1[0]; val2 = ref_desc1[1]; fullprint << "desc1[0] = " << val1 << std::endl << "desc1[1] = " << val2 << std::endl; /* Constructor with size */ Description desc2(2); const Description & ref_desc2(desc2); /* Check operator[] methods */ desc2[0] = "a"; desc2[1] = "b"; val1 = ref_desc2[0]; val2 = ref_desc2[1]; fullprint << "desc2[0] = " << val1 << std::endl << "desc2[1] = " << val2 << std::endl; /* Copy constructor */ Description desc3(desc1); const Description & ref_desc3(desc3); val1 = ref_desc3[0]; val2 = ref_desc3[1]; fullprint << "desc3[0] = " << val1 << std::endl << "desc3[1] = " << val2 << std::endl; /* Assignment operator */ Description desc4; const Description & ref_desc4(desc4); desc4 = ref_desc2; val1 = ref_desc4[0]; val2 = ref_desc4[1]; fullprint << "desc4[0] = " << val1 << std::endl << "desc4[1] = " << val2 << std::endl; /* Stream operator */ fullprint << "desc1 = " << ref_desc1 << std::endl; /* sort method and copy on write mecanism */ Description desc5(3); desc5[0] = "c"; desc5[1] = "b"; desc5[2] = "a"; Description desc5copy(desc5); std::sort(desc5copy.begin(), desc5copy.end()); fullprint << "desc5copy = " << desc5copy << std::endl; fullprint << "desc5 = " << desc5 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_Description_std.expout000066400000000000000000000002541307543307100220770ustar00rootroot00000000000000size of desc1 = 2 desc1[0] = X desc1[1] = Y desc2[0] = a desc2[1] = b desc3[0] = X desc3[1] = Y desc4[0] = a desc4[1] = b desc1 = [X,Y] desc5copy = [a,b,c] desc5 = [c,b,a] openturns-1.9/lib/test/t_DickeyFullerTest_std.cxx000066400000000000000000000045311307543307100223160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DickeyFullerTest * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); const UnsignedInteger size = 100; ARMACoefficients ARCoefficients(Point(1, 0.3)); ARMACoefficients MACoefficients(0); RegularGrid timeGrid(0.0, 0.1, size); // White noise ==> gaussian Normal myDistribution; WhiteNoise whiteNoise (myDistribution, timeGrid); ARMA myARMA(ARCoefficients, MACoefficients, whiteNoise); // A realization of the ARMA process // The realization is supposed to be of a stationnary process TimeSeries realization (myARMA.getRealization()); // In the strategy of tests, one has to detect a trend tendency // We check if the time series writes as x_t = a +b * t + c * x_{t-1} // H0 = c is equal to one and thus // p-value threshold : probability of the H0 reject zone : 1-0.95 // p-value : probability (test variable decision > test variable decision (statistic) evaluated on data) // Test = True <=> p-value > p-value threshold // Tests are run starting from general model to simplest model DickeyFullerTest myTestClass(realization); fullprint << "Drift and linear trend model=" << myTestClass.testUnitRootInDriftAndLinearTrendModel(0.95) << std::endl; fullprint << "Drift model=" << myTestClass.testUnitRootInDriftModel(0.95) << std::endl; fullprint << "AR1 model=" << myTestClass.testUnitRootInAR1Model(0.95) << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_DickeyFullerTest_std.expout000066400000000000000000000007631307543307100230430ustar00rootroot00000000000000Drift and linear trend model=class=TestResult name=Unnamed type=DickeyFullerUnitRootInDriftAndLinearTrendModel binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] Drift model=class=TestResult name=Unnamed type=DickeyFullerUnitRootInDriftModel binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] AR1 model=class=TestResult name=Unnamed type=DickeyFullerUnitRootAR1Model binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] openturns-1.9/lib/test/t_DiracCovarianceModel_hmat.cxx000066400000000000000000000076061307543307100232370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DiracCovarianceModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; static std::string hmatrix__str__(const HMatrix & hmat) { if (hmat.getNbRows() == 0 || hmat.getNbColumns() == 0) return "[]"; Sample res(hmat.getNbRows(), hmat.getNbColumns()); for ( UnsignedInteger i = 0; i < hmat.getNbRows(); ++i) { Point x(hmat.getNbColumns()); x[i] = 1.0; Point y(hmat.getNbRows()); hmat.gemv('N', 1.0, x, 0.0, y); res[i] = y; } return res.__str__(); } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(4); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 6); // Spatial dimension const UnsignedInteger spatialDimension = 2; // Dimension const UnsignedInteger dimension = 2; DiracCovarianceModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; // Amplitude of dimension 2 Point amplitude(dimension); for (UnsignedInteger k = 0; k < dimension; ++k) amplitude[k] = 1.5 + 2.0 * k; // Model of dimension 2 DiracCovarianceModel myModel1(spatialDimension, amplitude); fullprint << "myModel1 = " << myModel1 << std::endl; fullprint << "Pretty print of myModel1 = " << myModel1.__str__() << std::endl; // Definition of spatial correlation CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) for (UnsignedInteger i = j + 1; i < dimension; ++i) spatialCorrelation(i , j) = (i + 1.0) / dimension - (j + 1.0) / dimension; DiracCovarianceModel myModel2(spatialDimension, amplitude, spatialCorrelation); fullprint << "myModel2 = " << myModel2 << std::endl; fullprint << "Pretty print of myModel2 = " << myModel2.__str__() << std::endl; // Evaluation on some points Indices levels(spatialDimension, 1); Box box(levels); const Sample vertices = box.generate(); const Scalar nuggetFactor = ResourceMap::GetAsScalar("CovarianceModel-DefaultNuggetFactor"); const HMatrixParameters parameters; fullprint << "Discretization on a grid of vertices" << std::endl; fullprint << "Discretization of myModel1 = " << hmatrix__str__(myModel1.discretizeHMatrix(vertices, nuggetFactor, parameters)) << std::endl; fullprint << "Discretization of myModel2 = " << hmatrix__str__(myModel2.discretizeHMatrix(vertices, nuggetFactor, parameters)) << std::endl; // Evaluation of the Cholesky factor fullprint << "Discretization & factorization on a grid of vertices" << std::endl; fullprint << "Discretization & factorization of myModel1 = " << hmatrix__str__(myModel1.discretizeAndFactorizeHMatrix(vertices, nuggetFactor, parameters)) << std::endl; fullprint << "Discretization & factorizationof myModel2 = " << hmatrix__str__(myModel2.discretizeAndFactorizeHMatrix(vertices, nuggetFactor, parameters)) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DiracCovarianceModel_hmat.expout000066400000000000000000000220651307543307100237550ustar00rootroot00000000000000myDefautModel = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=1 values=[1], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] myModel1 = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=2 values=[1.5,3.5], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] Pretty print of myModel1 = DiracCovarianceModel(t)=[[ 2.25 0 ] [ 0 12.25 ]] * t==[0,0] myModel2 = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=2 values=[1.5,3.5], spatialCorrelation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] Pretty print of myModel2 = DiracCovarianceModel(t)=[[ 2.25 2.625 ] [ 2.625 12.25 ]] * t==[0,0] Discretization on a grid of vertices Discretization of myModel1 = 0 : [ 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 1 : [ 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 2 : [ 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 3 : [ 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 4 : [ 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 5 : [ 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 ] 6 : [ 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 ] 7 : [ 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 ] 8 : [ 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 ] 9 : [ 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 ] 10 : [ 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 ] 11 : [ 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 ] 12 : [ 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 ] 13 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 ] 14 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 ] 15 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 ] 16 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 ] 17 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 ] Discretization of myModel2 = 0 : [ 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 1 : [ 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 2 : [ 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 3 : [ 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 4 : [ 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 ] 5 : [ 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 ] 6 : [ 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 ] 7 : [ 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 ] 8 : [ 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 ] 9 : [ 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 ] 10 : [ 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 ] 11 : [ 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 ] 12 : [ 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 ] 13 : [ 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 ] 14 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 ] 15 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 ] 16 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 ] 17 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 ] Discretization & factorization on a grid of vertices Discretization & factorization of myModel1 = 0 : [ 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 1 : [ 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 2 : [ 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 3 : [ 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 4 : [ 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 5 : [ 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 ] 6 : [ 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 ] 7 : [ 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 ] 8 : [ 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 ] 9 : [ 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 ] 10 : [ 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 ] 11 : [ 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 ] 12 : [ 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 ] 13 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 ] 14 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 ] 15 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 ] 16 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 ] 17 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 ] Discretization & factorizationof myModel2 = 0 : [ 1.5 1.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 1 : [ 0 3.031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 2 : [ 0 0 1.5 1.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 3 : [ 0 0 0 3.031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 4 : [ 0 0 0 0 1.5 1.75 0 0 0 0 0 0 0 0 0 0 0 0 ] 5 : [ 0 0 0 0 0 3.031 0 0 0 0 0 0 0 0 0 0 0 0 ] 6 : [ 0 0 0 0 0 0 1.5 1.75 0 0 0 0 0 0 0 0 0 0 ] 7 : [ 0 0 0 0 0 0 0 3.031 0 0 0 0 0 0 0 0 0 0 ] 8 : [ 0 0 0 0 0 0 0 0 1.5 1.75 0 0 0 0 0 0 0 0 ] 9 : [ 0 0 0 0 0 0 0 0 0 3.031 0 0 0 0 0 0 0 0 ] 10 : [ 0 0 0 0 0 0 0 0 0 0 1.5 1.75 0 0 0 0 0 0 ] 11 : [ 0 0 0 0 0 0 0 0 0 0 0 3.031 0 0 0 0 0 0 ] 12 : [ 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.75 0 0 0 0 ] 13 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 3.031 0 0 0 0 ] 14 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.75 0 0 ] 15 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.031 0 0 ] 16 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.75 ] 17 : [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.031 ] openturns-1.9/lib/test/t_DiracCovarianceModel_std.cxx000066400000000000000000000076001307543307100230720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DiracCovarianceModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(4); // Spatial dimension const UnsignedInteger spatialDimension = 2; // Dimension const UnsignedInteger dimension = 2; DiracCovarianceModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; // Amplitude of dimension 2 Point amplitude(dimension); for (UnsignedInteger k = 0; k < dimension; ++k) amplitude[k] = 1.5 + 2.0 * k; // Model of dimension 2 DiracCovarianceModel myModel1(spatialDimension, amplitude); fullprint << "myModel1 = " << myModel1 << std::endl; fullprint << "Pretty print of myModel1 = " << myModel1.__str__() << std::endl; // Definition of spatial correlation CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger j = 0; j < dimension; ++j) for (UnsignedInteger i = j + 1; i < dimension; ++i) spatialCorrelation(i , j) = (i + 1.0) / dimension - (j + 1.0) / dimension; DiracCovarianceModel myModel2(spatialDimension, amplitude, spatialCorrelation); fullprint << "myModel2 = " << myModel2 << std::endl; fullprint << "Pretty print of myModel2 = " << myModel2.__str__() << std::endl; // Evaluation on some points Indices levels(spatialDimension, 1); Box box(levels); const Sample vertices = box.generate(); // Two first points of vertices // First is 0, second one different from 0 const Point tau1 = vertices[0]; const Point tau2 = vertices[1]; fullprint << "Evaluation of the models on the point" << vertices[0] << std::endl; fullprint << "myModel1(" << tau1.__str__() << ") = " << myModel1.operator()(vertices[0]) << std::endl; fullprint << "myModel2(" << tau2.__str__() << ") = " << myModel2.operator()(vertices[0]) << std::endl; fullprint << "Evaluation of the models on the point" << vertices[1] << std::endl; fullprint << "myModel1(" << tau1.__str__() << ") = " << myModel1.operator()(vertices[1]) << std::endl; fullprint << "myModel2(" << tau2.__str__() << ") = " << myModel2.operator()(vertices[1]) << std::endl; fullprint << "Discretization on a grid of vertices" << std::endl; fullprint << "Discretization of myModel1 = " << myModel1.discretize(vertices).__str__() << std::endl; fullprint << "Discretization of myModel2 = " << myModel2.discretize(vertices).__str__() << std::endl; // Evaluation of the Cholesky factor fullprint << "Discretization & factorization on a grid of vertices" << std::endl; fullprint << "Discretization & factorization of myModel1 = " << myModel1.discretizeAndFactorize(vertices).__str__() << std::endl; fullprint << "Discretization & factorizationof myModel2 = " << myModel2.discretizeAndFactorize(vertices).__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DiracCovarianceModel_std.expout000066400000000000000000000230631307543307100236150ustar00rootroot00000000000000myDefautModel = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=1 values=[1], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] myModel1 = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=2 values=[1.5,3.5], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] Pretty print of myModel1 = DiracCovarianceModel(t)=[[ 2.25 0 ] [ 0 12.25 ]] * t==[0,0] myModel2 = class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=2 values=[1.5,3.5], spatialCorrelation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] Pretty print of myModel2 = DiracCovarianceModel(t)=[[ 2.25 2.625 ] [ 2.625 12.25 ]] * t==[0,0] Evaluation of the models on the pointclass=Point name=Unnamed dimension=2 values=[0,0] myModel1([0,0]) = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2.25,0,0,12.25] myModel2([0.5,0]) = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2.25,2.625,2.625,12.25] Evaluation of the models on the pointclass=Point name=Unnamed dimension=2 values=[0.5,0] myModel1([0,0]) = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0] myModel2([0.5,0]) = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0] Discretization on a grid of vertices Discretization of myModel1 = 18x18 [[ 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12.25 ]] Discretization of myModel2 = 18x18 [[ 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.25 2.625 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.625 12.25 ]] Discretization & factorization on a grid of vertices Discretization & factorization of myModel1 = 18x18 [[ 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.5 ]] Discretization & factorizationof myModel2 = 18x18 [[ 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 1.75 3.031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 1.75 3.031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 1.75 3.031 0 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 1.75 3.031 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 1.75 3.031 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 1.75 3.031 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 1.75 3.031 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.75 3.031 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.75 3.031 ]] openturns-1.9/lib/test/t_DiracFactory_std.cxx000066400000000000000000000046601307543307100214510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Dirac for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Dirac distribution(0.7); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); DiracFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Dirac estimatedDirac(factory.buildAsDirac(sample)); fullprint << "Dirac =" << distribution << std::endl; fullprint << "Estimated dirac=" << estimatedDirac << std::endl; estimatedDirac = factory.buildAsDirac(); fullprint << "Default dirac=" << estimatedDirac << std::endl; estimatedDirac = factory.buildAsDirac(distribution.getParameter()); fullprint << "Dirac from parameters=" << estimatedDirac << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DiracFactory_std.expout000066400000000000000000000015701307543307100221700ustar00rootroot00000000000000Distribution =class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Estimated distribution=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Default distribution=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] Distribution from parameters=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Dirac =class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Estimated dirac=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Default dirac=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] Dirac from parameters=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] openturns-1.9/lib/test/t_Dirac_std.cxx000066400000000000000000000251361307543307100201220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Dirac for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Dirac { public: TestObject() : Dirac(0.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object // 1D tests { Dirac distribution(0.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; Scalar sampleCovariance = oneSample.computeCovariance()(0, 0); fullprint << "covariance=" << (std::abs(sampleCovariance) < 1.0e-16 ? 0.0 : sampleCovariance) << std::endl; { // Define a point Point point( distribution.getDimension(), 0.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; } { // Define a point Point point( distribution.getSupport(distribution.getRange())[0]); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; } Complex CF = distribution.computeCharacteristicFunction( 0.5 ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction(0.5 ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.5, 0.3) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.5, 0.3) ); fullprint << "log generating function=" << LGF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Dirac::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } // N-D tests { UnsignedInteger dim = 4; Dirac distribution(Point(dim, 2.3)); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; CovarianceMatrix sampleCovariance(oneSample.computeCovariance()); for (UnsignedInteger i = 0; i < dim; ++i) for (UnsignedInteger j = 0; j <= i; ++j) if (std::abs(sampleCovariance(i, j)) < 1.0e-16) sampleCovariance(i, j) = 0.0; fullprint << "covariance=" << sampleCovariance << std::endl; { // Define a point Point point( dim, 0.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(dim, 0) ) - distribution.computeCDF( point + Point(dim, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; } { // Define a point Point point( distribution.getSupport(distribution.getRange())[0]); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(dim, 0) ) - distribution.computeCDF( point + Point(dim, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; } Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Dirac::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Dirac_std.expout000066400000000000000000000120721307543307100206370ustar00rootroot00000000000000Testing class Dirac checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] streamObject(const T & anObject) class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.7] Distribution Dirac(point = [0.7]) Elliptical = true Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[0.7] oneSample first=class=Point name=Unnamed dimension=1 values=[0.7] last=class=Point name=Unnamed dimension=1 values=[0.7] mean=class=Point name=Unnamed dimension=1 values=[0.7] covariance=0 Point= class=Point name=Unnamed dimension=1 values=[0] pdf =0 pdf (FD)=0 cdf=0 ccdf=1 survival=1 Point= class=Point name=Unnamed dimension=1 values=[0.7] log pdf=0 pdf =1 pdf (FD)=1 cdf=1 ccdf=0 survival=0 characteristic function=(0.939373,0.342898) log characteristic function=(0,0.35) generating function=(0.637047,0.253185) log generating function=(-0.377583,0.378294) quantile=class=Point name=Unnamed dimension=1 values=[0.7] cdf(quantile)=1 mean=class=Point name=Unnamed dimension=1 values=[0.7] standard deviation=class=Point name=Unnamed dimension=1 values=[0] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[0] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[point_0 : 0.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.7] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.49] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.343] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.2401] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.16807] Standard representative=Dirac(point = [0.7]) Distribution class=Dirac name=Dirac dimension=4 point=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] Distribution Dirac(point = [2.3,2.3,2.3,2.3]) Elliptical = true Continuous = false oneRealization=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] oneSample first=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] last=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] mean=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] Point= class=Point name=Unnamed dimension=4 values=[0,0,0,0] pdf =0 pdf (FD)=0 cdf=0 ccdf=1 Point= class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] log pdf=0 pdf =1 pdf (FD)=1 cdf=1 ccdf=0 quantile=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] cdf(quantile)=1 mean=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] standard deviation=class=Point name=Unnamed dimension=4 values=[0,0,0,0] skewness=class=Point name=Unnamed dimension=4 values=[0,0,0,0] kurtosis=class=Point name=Unnamed dimension=4 values=[0,0,0,0] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] correlation=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] spearman=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] kendall=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] parameters=[[point_0 : 2.3],[point_1 : 2.3],[point_2 : 2.3],[point_3 : 2.3]] standard moment n=0, value=class=Point name=Unnamed dimension=4 values=[1,1,1,1] standard moment n=1, value=class=Point name=Unnamed dimension=4 values=[2.3,2.3,2.3,2.3] standard moment n=2, value=class=Point name=Unnamed dimension=4 values=[5.29,5.29,5.29,5.29] standard moment n=3, value=class=Point name=Unnamed dimension=4 values=[12.167,12.167,12.167,12.167] standard moment n=4, value=class=Point name=Unnamed dimension=4 values=[27.9841,27.9841,27.9841,27.9841] standard moment n=5, value=class=Point name=Unnamed dimension=4 values=[64.3634,64.3634,64.3634,64.3634] Standard representative=Dirac(point = [2.3,2.3,2.3,2.3]) openturns-1.9/lib/test/t_DirectionalSampling_std.cxx000066400000000000000000000047461307543307100230340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of DirectionalSampling class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Directional Sampling algorithm */ DirectionalSampling myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.1); fullprint << "DirectionalSampling=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "DirectionalSampling result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DirectionalSampling_std.expout000066400000000000000000000037621307543307100235530ustar00rootroot00000000000000DirectionalSampling=class=DirectionalSampling rootStrategy=class=RootStrategy implementation=class=SafeAndSlow derived from class=RootStrategyImplementation solver=class=Solver implementation=class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 maximumDistance=8 stepSize=1 samplingStrategy=class=SamplingStrategy implementation=class=RandomDirection derived from class=SamplingStrategyImplementation dimension=4 derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 DirectionalSampling result=probabilityEstimate=1.748122e-01 varianceEstimate=2.978217e-04 standard deviation=1.73e-02 coefficient of variation=9.87e-02 confidenceLength(0.95)=6.76e-02 outerSampling=30 blockSize=4 openturns-1.9/lib/test/t_DirichletFactory_std.cxx000066400000000000000000000043321307543307100223320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Dirichlet for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Point theta(0); theta.add(0.2); theta.add(0.3); theta.add(0.4); theta.add(0.5); Dirichlet distribution(theta); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); DirichletFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; Dirichlet estimatedDirichlet(factory.buildAsDirichlet(sample)); fullprint << "Dirichlet =" << distribution << std::endl; fullprint << "Estimated dirichlet=" << estimatedDirichlet << std::endl; estimatedDirichlet = factory.buildAsDirichlet(); fullprint << "Default dirichlet=" << estimatedDirichlet << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DirichletFactory_std.expout000066400000000000000000000014471307543307100230600ustar00rootroot00000000000000Distribution =class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.2,0.3,0.4,0.5] Estimated distribution=class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.197715,0.300208,0.398258,0.498906] Default distribution=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1,1] Dirichlet =class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.2,0.3,0.4,0.5] Estimated dirichlet=class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.197715,0.300208,0.398258,0.498906] Default dirichlet=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1,1] openturns-1.9/lib/test/t_Dirichlet_std.cxx000066400000000000000000000144411307543307100210040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Dirichlet for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object for (UnsignedInteger dim = 1; dim <= 2; dim++) { Point theta(dim + 1); for (UnsignedInteger i = 0; i <= dim; i++) theta[i] = 1.0 + (i + 1.0) / 4.0; Dirichlet distribution(theta); Description description(dim); for (UnsignedInteger j = 1; j <= dim; j++) { OSS oss; oss << "Marginal " << j; description[j - 1] = oss; } distribution.setDescription(description); fullprint << std::setprecision(5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample(distribution.getSample( size )); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; if (distribution.getDimension() == 1) { size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { RandomGenerator::SetSeed(2); fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } } // Define a point Point point( distribution.getDimension(), 0.5 / distribution.getDimension() ); fullprint << "Point=" << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf=" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); int oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision( 4 ); fullprint << "quantile=" << quantile << std::endl; PlatformInfo::SetNumericalPrecision( oldPrecision ); fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; // get/set parameters collection Dirichlet::PointWithDescriptionCollection parametersCollection(distribution.getParametersCollection()); fullprint << "parameters collection=" << parametersCollection << std::endl; fullprint << "before set=" << distribution << std::endl; Point theta2(dim + 1, 1.); Dirichlet tmp(theta2); tmp.setParametersCollection(parametersCollection); fullprint << "after set= " << tmp << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.5)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.5)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } if (dim >= 2) { // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.5)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.5)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Dirichlet_std.expout000066400000000000000000000105551307543307100215300ustar00rootroot00000000000000Distribution class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.25,1.5] Distribution Dirichlet(theta = [1.25,1.5]) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.569088] oneSample first=class=Point name=Unnamed dimension=1 values=[0.14321] last=class=Point name=Unnamed dimension=1 values=[0.243847] mean=class=Point name=Unnamed dimension=1 values=[0.456339] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.067112] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point=class=Point name=Unnamed dimension=1 values=[0.5] log pdf=0.17441 pdf=1.1905 cdf=0.56973 quantile=class=Point name=Unnamed dimension=1 values=[0.8867] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.454545] standard deviation=class=Point name=Unnamed dimension=1 values=[0.352089] skewness=class=Point name=Unnamed dimension=1 values=[0.108715] kurtosis=class=Point name=Unnamed dimension=1 values=[1.98398] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0661157] parameters collection=[[theta : 1.25, sum theta : 1.5]] before set=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.25,1.5] after set= class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.25,1.5] margin=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.25,1.5] margin PDF=1.1905 margin CDF=0.56973 margin quantile=class=Point name=Unnamed dimension=1 values=[0.88672] margin realization=class=Point name=Unnamed dimension=1 values=[0.495988] Distribution class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.25,1.5,1.75] Distribution Dirichlet(theta = [1.25,1.5,1.75]) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=2 values=[0.135837,0.267152] oneSample first=class=Point name=Unnamed dimension=2 values=[0.197265,0.207428] last=class=Point name=Unnamed dimension=2 values=[0.354329,0.139825] mean=class=Point name=Unnamed dimension=2 values=[0.275613,0.333625] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0358934,-0.0169336,-0.0169336,0.0408276] Point=class=Point name=Unnamed dimension=2 values=[0.25,0.25] log pdf=1.1976 pdf=3.3122 cdf=0.14355 quantile=class=Point name=Unnamed dimension=2 values=[0.7136,0.7674] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=2 values=[0.277778,0.333333] standard deviation=class=Point name=Unnamed dimension=2 values=[0.384946,0.426401] skewness=class=Point name=Unnamed dimension=2 values=[0.35525,0.240534] kurtosis=class=Point name=Unnamed dimension=2 values=[2.86651,2.53846] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0364759,-0.016835,-0.016835,0.040404] parameters collection=[[theta : 1.25, sum theta : 3.25],[theta : 1.5, sum theta : 3]] before set=class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.25,1.5,1.75] after set= class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.25,1.5,1.75] margin=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.25,3.25] margin PDF=0.88989 margin CDF=0.85595 margin quantile=class=Point name=Unnamed dimension=1 values=[0.643596] margin realization=class=Point name=Unnamed dimension=1 values=[0.116349] margin=class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[1.5,3] margin PDF=1.1601 margin CDF=0.78445 margin quantile=class=Point name=Unnamed dimension=1 values=[0.704013] margin realization=class=Point name=Unnamed dimension=1 values=[0.683216] indices=[1,0] margins=class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.5,1.25,1.75] margins PDF=0 margins CDF=0.6404 margins quantile=class=Point name=Unnamed dimension=2 values=[0.767409,0.713647] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.210342,0.240573] openturns-1.9/lib/test/t_DistFunc_beta.cxx000066400000000000000000000070711307543307100207360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Beta related functions { // pBeta Scalar p1Min = 0.2; Scalar p1Max = 5.0; UnsignedInteger n1 = 5; Scalar p2Min = 0.2; Scalar p2Max = 5.0; UnsignedInteger n2 = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pBeta(" << p1 << ", " << p2 << ", " << x << ")=" << DistFunc::pBeta(p1, p2, x) << ", complementary=" << DistFunc::pBeta(p1, p2, x, true) << std::endl; } } } } // pBeta { // qBeta Scalar p1Min = 0.2; Scalar p1Max = 5.0; UnsignedInteger n1 = 5; Scalar p2Min = 0.2; Scalar p2Max = 5.0; UnsignedInteger n2 = 5; Scalar qMin = 0.1; Scalar qMax = 0.9; UnsignedInteger nQ = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1); for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qBeta(" << p1 << ", " << p2 << ", " << q << ")=" << DistFunc::qBeta(p1, p2, q) << ", complementary=" << DistFunc::qBeta(p1, p2, q, true) << std::endl; } } } } // qBeta { // rBeta Scalar p1Min = 0.2; Scalar p1Max = 5.0; UnsignedInteger n1 = 5; Scalar p2Min = 0.2; Scalar p2Max = 5.0; UnsignedInteger n2 = 5; UnsignedInteger nR = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rBeta(" << p1 << ", " << p2 << ")=" << DistFunc::rBeta(p1, p2) << std::endl; } } } } // rBeta } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_beta.expout000066400000000000000000000400021307543307100214470ustar00rootroot00000000000000pBeta(0.2, 0.2, 0.1)=0.33669, complementary=0.66331 pBeta(0.2, 0.2, 0.3)=0.433204, complementary=0.566796 pBeta(0.2, 0.2, 0.5)=0.5, complementary=0.5 pBeta(0.2, 0.2, 0.7)=0.566796, complementary=0.433204 pBeta(0.2, 0.2, 0.9)=0.66331, complementary=0.33669 pBeta(0.2, 1.4, 0.1)=0.687341, complementary=0.312659 pBeta(0.2, 1.4, 0.3)=0.843889, complementary=0.156111 pBeta(0.2, 1.4, 0.5)=0.91974, complementary=0.0802601 pBeta(0.2, 1.4, 0.7)=0.9659, complementary=0.0340998 pBeta(0.2, 1.4, 0.9)=0.993451, complementary=0.0065488 pBeta(0.2, 2.6, 0.1)=0.78472, complementary=0.21528 pBeta(0.2, 2.6, 0.3)=0.927628, complementary=0.0723715 pBeta(0.2, 2.6, 0.5)=0.976392, complementary=0.0236082 pBeta(0.2, 2.6, 0.7)=0.994757, complementary=0.00524303 pBeta(0.2, 2.6, 0.9)=0.999738, complementary=0.000262128 pBeta(0.2, 3.8, 0.1)=0.839339, complementary=0.160661 pBeta(0.2, 3.8, 0.3)=0.96231, complementary=0.03769 pBeta(0.2, 3.8, 0.5)=0.992027, complementary=0.00797294 pBeta(0.2, 3.8, 0.7)=0.999059, complementary=0.000940783 pBeta(0.2, 3.8, 0.9)=0.999988, complementary=1.24072e-05 pBeta(0.2, 5, 0.1)=0.875479, complementary=0.124521 pBeta(0.2, 5, 0.3)=0.979271, complementary=0.0207289 pBeta(0.2, 5, 0.5)=0.997129, complementary=0.00287138 pBeta(0.2, 5, 0.7)=0.999819, complementary=0.00018128 pBeta(0.2, 5, 0.9)=0.999999, complementary=6.34097e-07 pBeta(1.4, 0.2, 0.1)=0.0065488, complementary=0.993451 pBeta(1.4, 0.2, 0.3)=0.0340998, complementary=0.9659 pBeta(1.4, 0.2, 0.5)=0.0802601, complementary=0.91974 pBeta(1.4, 0.2, 0.7)=0.156111, complementary=0.843889 pBeta(1.4, 0.2, 0.9)=0.312659, complementary=0.687341 pBeta(1.4, 1.4, 0.1)=0.0591132, complementary=0.940887 pBeta(1.4, 1.4, 0.3)=0.260754, complementary=0.739246 pBeta(1.4, 1.4, 0.5)=0.5, complementary=0.5 pBeta(1.4, 1.4, 0.7)=0.739246, complementary=0.260754 pBeta(1.4, 1.4, 0.9)=0.940887, complementary=0.0591132 pBeta(1.4, 2.6, 0.1)=0.122223, complementary=0.877777 pBeta(1.4, 2.6, 0.3)=0.462386, complementary=0.537614 pBeta(1.4, 2.6, 0.5)=0.749929, complementary=0.250071 pBeta(1.4, 2.6, 0.7)=0.927944, complementary=0.0720564 pBeta(1.4, 2.6, 0.9)=0.995565, complementary=0.0044346 pBeta(1.4, 3.8, 0.1)=0.188357, complementary=0.811643 pBeta(1.4, 3.8, 0.3)=0.61876, complementary=0.38124 pBeta(1.4, 3.8, 0.5)=0.879463, complementary=0.120537 pBeta(1.4, 3.8, 0.7)=0.980978, complementary=0.0190224 pBeta(1.4, 3.8, 0.9)=0.999684, complementary=0.000315635 pBeta(1.4, 5, 0.1)=0.25411, complementary=0.74589 pBeta(1.4, 5, 0.3)=0.733788, complementary=0.266212 pBeta(1.4, 5, 0.5)=0.943117, complementary=0.0568833 pBeta(1.4, 5, 0.7)=0.995103, complementary=0.00489727 pBeta(1.4, 5, 0.9)=0.999978, complementary=2.18452e-05 pBeta(2.6, 0.2, 0.1)=0.000262128, complementary=0.999738 pBeta(2.6, 0.2, 0.3)=0.00524303, complementary=0.994757 pBeta(2.6, 0.2, 0.5)=0.0236082, complementary=0.976392 pBeta(2.6, 0.2, 0.7)=0.0723715, complementary=0.927628 pBeta(2.6, 0.2, 0.9)=0.21528, complementary=0.78472 pBeta(2.6, 1.4, 0.1)=0.0044346, complementary=0.995565 pBeta(2.6, 1.4, 0.3)=0.0720564, complementary=0.927944 pBeta(2.6, 1.4, 0.5)=0.250071, complementary=0.749929 pBeta(2.6, 1.4, 0.7)=0.537614, complementary=0.462386 pBeta(2.6, 1.4, 0.9)=0.877777, complementary=0.122223 pBeta(2.6, 2.6, 0.1)=0.0136623, complementary=0.986338 pBeta(2.6, 2.6, 0.3)=0.181828, complementary=0.818172 pBeta(2.6, 2.6, 0.5)=0.5, complementary=0.5 pBeta(2.6, 2.6, 0.7)=0.818172, complementary=0.181828 pBeta(2.6, 2.6, 0.9)=0.986338, complementary=0.0136623 pBeta(2.6, 3.8, 0.1)=0.0281425, complementary=0.971858 pBeta(2.6, 3.8, 0.3)=0.309445, complementary=0.690555 pBeta(2.6, 3.8, 0.5)=0.694462, complementary=0.305538 pBeta(2.6, 3.8, 0.7)=0.936802, complementary=0.0631984 pBeta(2.6, 3.8, 0.9)=0.998688, complementary=0.00131193 pBeta(2.6, 5, 0.1)=0.0476092, complementary=0.952391 pBeta(2.6, 5, 0.3)=0.436453, complementary=0.563547 pBeta(2.6, 5, 0.5)=0.823851, complementary=0.176149 pBeta(2.6, 5, 0.7)=0.979632, complementary=0.0203678 pBeta(2.6, 5, 0.9)=0.999885, complementary=0.000115391 pBeta(3.8, 0.2, 0.1)=1.24072e-05, complementary=0.999988 pBeta(3.8, 0.2, 0.3)=0.000940783, complementary=0.999059 pBeta(3.8, 0.2, 0.5)=0.00797294, complementary=0.992027 pBeta(3.8, 0.2, 0.7)=0.03769, complementary=0.96231 pBeta(3.8, 0.2, 0.9)=0.160661, complementary=0.839339 pBeta(3.8, 1.4, 0.1)=0.000315635, complementary=0.999684 pBeta(3.8, 1.4, 0.3)=0.0190224, complementary=0.980978 pBeta(3.8, 1.4, 0.5)=0.120537, complementary=0.879463 pBeta(3.8, 1.4, 0.7)=0.38124, complementary=0.61876 pBeta(3.8, 1.4, 0.9)=0.811643, complementary=0.188357 pBeta(3.8, 2.6, 0.1)=0.00131193, complementary=0.998688 pBeta(3.8, 2.6, 0.3)=0.0631984, complementary=0.936802 pBeta(3.8, 2.6, 0.5)=0.305538, complementary=0.694462 pBeta(3.8, 2.6, 0.7)=0.690555, complementary=0.309445 pBeta(3.8, 2.6, 0.9)=0.971858, complementary=0.0281425 pBeta(3.8, 3.8, 0.1)=0.00342106, complementary=0.996579 pBeta(3.8, 3.8, 0.3)=0.132524, complementary=0.867476 pBeta(3.8, 3.8, 0.5)=0.5, complementary=0.5 pBeta(3.8, 3.8, 0.7)=0.867476, complementary=0.132524 pBeta(3.8, 3.8, 0.9)=0.996579, complementary=0.00342106 pBeta(3.8, 5, 0.1)=0.00702538, complementary=0.992975 pBeta(3.8, 5, 0.3)=0.22026, complementary=0.77974 pBeta(3.8, 5, 0.5)=0.664623, complementary=0.335377 pBeta(3.8, 5, 0.7)=0.948811, complementary=0.0511887 pBeta(3.8, 5, 0.9)=0.999633, complementary=0.000366713 pBeta(5, 0.2, 0.1)=6.34097e-07, complementary=0.999999 pBeta(5, 0.2, 0.3)=0.00018128, complementary=0.999819 pBeta(5, 0.2, 0.5)=0.00287138, complementary=0.997129 pBeta(5, 0.2, 0.7)=0.0207289, complementary=0.979271 pBeta(5, 0.2, 0.9)=0.124521, complementary=0.875479 pBeta(5, 1.4, 0.1)=2.18452e-05, complementary=0.999978 pBeta(5, 1.4, 0.3)=0.00489727, complementary=0.995103 pBeta(5, 1.4, 0.5)=0.0568833, complementary=0.943117 pBeta(5, 1.4, 0.7)=0.266212, complementary=0.733788 pBeta(5, 1.4, 0.9)=0.74589, complementary=0.25411 pBeta(5, 2.6, 0.1)=0.000115391, complementary=0.999885 pBeta(5, 2.6, 0.3)=0.0203678, complementary=0.979632 pBeta(5, 2.6, 0.5)=0.176149, complementary=0.823851 pBeta(5, 2.6, 0.7)=0.563547, complementary=0.436453 pBeta(5, 2.6, 0.9)=0.952391, complementary=0.0476092 pBeta(5, 3.8, 0.1)=0.000366713, complementary=0.999633 pBeta(5, 3.8, 0.3)=0.0511887, complementary=0.948811 pBeta(5, 3.8, 0.5)=0.335377, complementary=0.664623 pBeta(5, 3.8, 0.7)=0.77974, complementary=0.22026 pBeta(5, 3.8, 0.9)=0.992975, complementary=0.00702538 pBeta(5, 5, 0.1)=0.00089092, complementary=0.999109 pBeta(5, 5, 0.3)=0.0988087, complementary=0.901191 pBeta(5, 5, 0.5)=0.5, complementary=0.5 pBeta(5, 5, 0.7)=0.901191, complementary=0.0988087 pBeta(5, 5, 0.9)=0.999109, complementary=0.00089092 qBeta(0.2, 0.2, 0.1)=0.000247765, complementary=0.999752 qBeta(0.2, 0.2, 0.3)=0.0578806, complementary=0.942119 qBeta(0.2, 0.2, 0.5)=0.5, complementary=0.5 qBeta(0.2, 0.2, 0.7)=0.942119, complementary=0.0578806 qBeta(0.2, 0.2, 0.9)=0.999752, complementary=0.000247765 qBeta(0.2, 1.4, 0.1)=6.30039e-06, complementary=0.436917 qBeta(0.2, 1.4, 0.3)=0.00153177, complementary=0.109934 qBeta(0.2, 1.4, 0.5)=0.0198197, complementary=0.0198197 qBeta(0.2, 1.4, 0.7)=0.109934, complementary=0.00153177 qBeta(0.2, 1.4, 0.9)=0.436917, complementary=6.30039e-06 qBeta(0.2, 2.6, 0.1)=2.94251e-06, complementary=0.237904 qBeta(0.2, 2.6, 0.3)=0.00071571, complementary=0.0530747 qBeta(0.2, 2.6, 0.5)=0.00931014, complementary=0.00931014 qBeta(0.2, 2.6, 0.7)=0.0530747, complementary=0.00071571 qBeta(0.2, 2.6, 0.9)=0.237904, complementary=2.94251e-06 qBeta(0.2, 3.8, 0.1)=1.91273e-06, complementary=0.162223 qBeta(0.2, 3.8, 0.3)=0.000465297, complementary=0.0348444 qBeta(0.2, 3.8, 0.5)=0.00606228, complementary=0.00606228 qBeta(0.2, 3.8, 0.7)=0.0348444, complementary=0.000465297 qBeta(0.2, 3.8, 0.9)=0.162223, complementary=1.91273e-06 qBeta(0.2, 5, 0.1)=1.41593e-06, complementary=0.122897 qBeta(0.2, 5, 0.3)=0.000344465, complementary=0.0259165 qBeta(0.2, 5, 0.5)=0.00449136, complementary=0.00449136 qBeta(0.2, 5, 0.7)=0.0259165, complementary=0.000344465 qBeta(0.2, 5, 0.9)=0.122897, complementary=1.41593e-06 qBeta(1.4, 0.2, 0.1)=0.563083, complementary=0.999994 qBeta(1.4, 0.2, 0.3)=0.890066, complementary=0.998468 qBeta(1.4, 0.2, 0.5)=0.98018, complementary=0.98018 qBeta(1.4, 0.2, 0.7)=0.998468, complementary=0.890066 qBeta(1.4, 0.2, 0.9)=0.999994, complementary=0.563083 qBeta(1.4, 1.4, 0.1)=0.146816, complementary=0.853184 qBeta(1.4, 1.4, 0.3)=0.333994, complementary=0.666006 qBeta(1.4, 1.4, 0.5)=0.5, complementary=0.5 qBeta(1.4, 1.4, 0.7)=0.666006, complementary=0.333994 qBeta(1.4, 1.4, 0.9)=0.853184, complementary=0.146816 qBeta(1.4, 2.6, 0.1)=0.085789, complementary=0.657564 qBeta(1.4, 2.6, 0.3)=0.204845, complementary=0.4597 qBeta(1.4, 2.6, 0.5)=0.323041, complementary=0.323041 qBeta(1.4, 2.6, 0.7)=0.4597, complementary=0.204845 qBeta(1.4, 2.6, 0.9)=0.657564, complementary=0.085789 qBeta(1.4, 3.8, 0.1)=0.0606869, complementary=0.525681 qBeta(1.4, 3.8, 0.3)=0.147795, complementary=0.348865 qBeta(1.4, 3.8, 0.5)=0.238204, complementary=0.238204 qBeta(1.4, 3.8, 0.7)=0.348865, complementary=0.147795 qBeta(1.4, 3.8, 0.9)=0.525681, complementary=0.0606869 qBeta(1.4, 5, 0.1)=0.046966, complementary=0.435859 qBeta(1.4, 5, 0.3)=0.115615, complementary=0.280684 qBeta(1.4, 5, 0.5)=0.188589, complementary=0.188589 qBeta(1.4, 5, 0.7)=0.280684, complementary=0.115615 qBeta(1.4, 5, 0.9)=0.435859, complementary=0.046966 qBeta(2.6, 0.2, 0.1)=0.762096, complementary=0.999997 qBeta(2.6, 0.2, 0.3)=0.946925, complementary=0.999284 qBeta(2.6, 0.2, 0.5)=0.99069, complementary=0.99069 qBeta(2.6, 0.2, 0.7)=0.999284, complementary=0.946925 qBeta(2.6, 0.2, 0.9)=0.999997, complementary=0.762096 qBeta(2.6, 1.4, 0.1)=0.342436, complementary=0.914211 qBeta(2.6, 1.4, 0.3)=0.5403, complementary=0.795155 qBeta(2.6, 1.4, 0.5)=0.676959, complementary=0.676959 qBeta(2.6, 1.4, 0.7)=0.795155, complementary=0.5403 qBeta(2.6, 1.4, 0.9)=0.914211, complementary=0.342436 qBeta(2.6, 2.6, 0.1)=0.22943, complementary=0.77057 qBeta(2.6, 2.6, 0.3)=0.381151, complementary=0.618849 qBeta(2.6, 2.6, 0.5)=0.5, complementary=0.5 qBeta(2.6, 2.6, 0.7)=0.618849, complementary=0.381151 qBeta(2.6, 2.6, 0.9)=0.77057, complementary=0.22943 qBeta(2.6, 3.8, 0.1)=0.173278, complementary=0.654633 qBeta(2.6, 3.8, 0.3)=0.295079, complementary=0.503271 qBeta(2.6, 3.8, 0.5)=0.39593, complementary=0.39593 qBeta(2.6, 3.8, 0.7)=0.503271, complementary=0.295079 qBeta(2.6, 3.8, 0.9)=0.654633, complementary=0.173278 qBeta(2.6, 5, 0.1)=0.139386, complementary=0.565998 qBeta(2.6, 5, 0.3)=0.240882, complementary=0.423301 qBeta(2.6, 5, 0.5)=0.327633, complementary=0.327633 qBeta(2.6, 5, 0.7)=0.423301, complementary=0.240882 qBeta(2.6, 5, 0.9)=0.565998, complementary=0.139386 qBeta(3.8, 0.2, 0.1)=0.837777, complementary=0.999998 qBeta(3.8, 0.2, 0.3)=0.965156, complementary=0.999535 qBeta(3.8, 0.2, 0.5)=0.993938, complementary=0.993938 qBeta(3.8, 0.2, 0.7)=0.999535, complementary=0.965156 qBeta(3.8, 0.2, 0.9)=0.999998, complementary=0.837777 qBeta(3.8, 1.4, 0.1)=0.474319, complementary=0.939313 qBeta(3.8, 1.4, 0.3)=0.651135, complementary=0.852205 qBeta(3.8, 1.4, 0.5)=0.761796, complementary=0.761796 qBeta(3.8, 1.4, 0.7)=0.852205, complementary=0.651135 qBeta(3.8, 1.4, 0.9)=0.939313, complementary=0.474319 qBeta(3.8, 2.6, 0.1)=0.345367, complementary=0.826722 qBeta(3.8, 2.6, 0.3)=0.496729, complementary=0.704921 qBeta(3.8, 2.6, 0.5)=0.60407, complementary=0.60407 qBeta(3.8, 2.6, 0.7)=0.704921, complementary=0.496729 qBeta(3.8, 2.6, 0.9)=0.826722, complementary=0.345367 qBeta(3.8, 3.8, 0.1)=0.273162, complementary=0.726838 qBeta(3.8, 3.8, 0.3)=0.402671, complementary=0.597329 qBeta(3.8, 3.8, 0.5)=0.5, complementary=0.5 qBeta(3.8, 3.8, 0.7)=0.597329, complementary=0.402671 qBeta(3.8, 3.8, 0.9)=0.726838, complementary=0.273162 qBeta(3.8, 5, 0.1)=0.226355, complementary=0.645024 qBeta(3.8, 5, 0.3)=0.338889, complementary=0.517235 qBeta(3.8, 5, 0.5)=0.426431, complementary=0.426431 qBeta(3.8, 5, 0.7)=0.517235, complementary=0.338889 qBeta(3.8, 5, 0.9)=0.645024, complementary=0.226355 qBeta(5, 0.2, 0.1)=0.877103, complementary=0.999999 qBeta(5, 0.2, 0.3)=0.974083, complementary=0.999656 qBeta(5, 0.2, 0.5)=0.995509, complementary=0.995509 qBeta(5, 0.2, 0.7)=0.999656, complementary=0.974083 qBeta(5, 0.2, 0.9)=0.999999, complementary=0.877103 qBeta(5, 1.4, 0.1)=0.564141, complementary=0.953034 qBeta(5, 1.4, 0.3)=0.719316, complementary=0.884385 qBeta(5, 1.4, 0.5)=0.811411, complementary=0.811411 qBeta(5, 1.4, 0.7)=0.884385, complementary=0.719316 qBeta(5, 1.4, 0.9)=0.953034, complementary=0.564141 qBeta(5, 2.6, 0.1)=0.434002, complementary=0.860614 qBeta(5, 2.6, 0.3)=0.576699, complementary=0.759118 qBeta(5, 2.6, 0.5)=0.672367, complementary=0.672367 qBeta(5, 2.6, 0.7)=0.759118, complementary=0.576699 qBeta(5, 2.6, 0.9)=0.860614, complementary=0.434002 qBeta(5, 3.8, 0.1)=0.354976, complementary=0.773645 qBeta(5, 3.8, 0.3)=0.482765, complementary=0.661111 qBeta(5, 3.8, 0.5)=0.573569, complementary=0.573569 qBeta(5, 3.8, 0.7)=0.661111, complementary=0.482765 qBeta(5, 3.8, 0.9)=0.773645, complementary=0.354976 qBeta(5, 5, 0.1)=0.300969, complementary=0.699031 qBeta(5, 5, 0.3)=0.415605, complementary=0.584395 qBeta(5, 5, 0.5)=0.5, complementary=0.5 qBeta(5, 5, 0.7)=0.584395, complementary=0.415605 qBeta(5, 5, 0.9)=0.699031, complementary=0.300969 rBeta(0.2, 0.2)=0.156052 rBeta(0.2, 0.2)=0.9992 rBeta(0.2, 0.2)=0.00584644 rBeta(0.2, 0.2)=0.953567 rBeta(0.2, 0.2)=0.000468873 rBeta(0.2, 1.4)=0.15554 rBeta(0.2, 1.4)=0.00609813 rBeta(0.2, 1.4)=0.450018 rBeta(0.2, 1.4)=0.599953 rBeta(0.2, 1.4)=0.125688 rBeta(0.2, 2.6)=0.00341746 rBeta(0.2, 2.6)=0.0400444 rBeta(0.2, 2.6)=2.63293e-06 rBeta(0.2, 2.6)=0.000233909 rBeta(0.2, 2.6)=5.06383e-09 rBeta(0.2, 3.8)=0.000615211 rBeta(0.2, 3.8)=0.0146319 rBeta(0.2, 3.8)=8.77919e-06 rBeta(0.2, 3.8)=0.0630611 rBeta(0.2, 3.8)=5.66773e-07 rBeta(0.2, 5)=0.000291087 rBeta(0.2, 5)=0.000244793 rBeta(0.2, 5)=0.033274 rBeta(0.2, 5)=0.00475718 rBeta(0.2, 5)=5.20763e-05 rBeta(1.4, 0.2)=0.999707 rBeta(1.4, 0.2)=0.986968 rBeta(1.4, 0.2)=1 rBeta(1.4, 0.2)=0.999096 rBeta(1.4, 0.2)=0.999884 rBeta(1.4, 1.4)=0.485624 rBeta(1.4, 1.4)=0.933502 rBeta(1.4, 1.4)=0.782887 rBeta(1.4, 1.4)=0.242806 rBeta(1.4, 1.4)=0.893764 rBeta(1.4, 2.6)=0.426686 rBeta(1.4, 2.6)=0.0736164 rBeta(1.4, 2.6)=0.489684 rBeta(1.4, 2.6)=0.295115 rBeta(1.4, 2.6)=0.612222 rBeta(1.4, 3.8)=0.175646 rBeta(1.4, 3.8)=0.280007 rBeta(1.4, 3.8)=0.27002 rBeta(1.4, 3.8)=0.325441 rBeta(1.4, 3.8)=0.424636 rBeta(1.4, 5)=0.475496 rBeta(1.4, 5)=0.312055 rBeta(1.4, 5)=0.367104 rBeta(1.4, 5)=0.122461 rBeta(1.4, 5)=0.231872 rBeta(2.6, 0.2)=0.999486 rBeta(2.6, 0.2)=0.983949 rBeta(2.6, 0.2)=0.999979 rBeta(2.6, 0.2)=0.999994 rBeta(2.6, 0.2)=0.994164 rBeta(2.6, 1.4)=0.718897 rBeta(2.6, 1.4)=0.900546 rBeta(2.6, 1.4)=0.896262 rBeta(2.6, 1.4)=0.751736 rBeta(2.6, 1.4)=0.882997 rBeta(2.6, 2.6)=0.518813 rBeta(2.6, 2.6)=0.332689 rBeta(2.6, 2.6)=0.779803 rBeta(2.6, 2.6)=0.728029 rBeta(2.6, 2.6)=0.154406 rBeta(2.6, 3.8)=0.324814 rBeta(2.6, 3.8)=0.402559 rBeta(2.6, 3.8)=0.544642 rBeta(2.6, 3.8)=0.438609 rBeta(2.6, 3.8)=0.321803 rBeta(2.6, 5)=0.403027 rBeta(2.6, 5)=0.283523 rBeta(2.6, 5)=0.375099 rBeta(2.6, 5)=0.435297 rBeta(2.6, 5)=0.314206 rBeta(3.8, 0.2)=0.765236 rBeta(3.8, 0.2)=1 rBeta(3.8, 0.2)=0.771142 rBeta(3.8, 0.2)=0.998233 rBeta(3.8, 0.2)=0.975034 rBeta(3.8, 1.4)=0.402612 rBeta(3.8, 1.4)=0.514468 rBeta(3.8, 1.4)=0.741919 rBeta(3.8, 1.4)=0.646984 rBeta(3.8, 1.4)=0.663609 rBeta(3.8, 2.6)=0.801286 rBeta(3.8, 2.6)=0.744747 rBeta(3.8, 2.6)=0.653823 rBeta(3.8, 2.6)=0.74085 rBeta(3.8, 2.6)=0.813882 rBeta(3.8, 3.8)=0.512431 rBeta(3.8, 3.8)=0.908579 rBeta(3.8, 3.8)=0.350713 rBeta(3.8, 3.8)=0.317657 rBeta(3.8, 3.8)=0.340499 rBeta(3.8, 5)=0.505419 rBeta(3.8, 5)=0.192688 rBeta(3.8, 5)=0.434283 rBeta(3.8, 5)=0.26326 rBeta(3.8, 5)=0.633409 rBeta(5, 0.2)=0.999251 rBeta(5, 0.2)=0.971178 rBeta(5, 0.2)=0.832947 rBeta(5, 0.2)=0.995765 rBeta(5, 0.2)=0.999984 rBeta(5, 1.4)=0.590906 rBeta(5, 1.4)=0.847716 rBeta(5, 1.4)=0.881434 rBeta(5, 1.4)=0.853464 rBeta(5, 1.4)=0.683562 rBeta(5, 2.6)=0.540083 rBeta(5, 2.6)=0.94074 rBeta(5, 2.6)=0.690156 rBeta(5, 2.6)=0.597546 rBeta(5, 2.6)=0.399028 rBeta(5, 3.8)=0.318358 rBeta(5, 3.8)=0.268051 rBeta(5, 3.8)=0.462067 rBeta(5, 3.8)=0.634355 rBeta(5, 3.8)=0.341872 rBeta(5, 5)=0.362547 rBeta(5, 5)=0.787532 rBeta(5, 5)=0.2502 rBeta(5, 5)=0.20747 rBeta(5, 5)=0.70176 openturns-1.9/lib/test/t_DistFunc_gamma.cxx000066400000000000000000000055111307543307100211020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Gamma related functions { // pGamma Scalar kMin = 0.2; Scalar kMax = 5.0; UnsignedInteger nK = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < nK; ++i1) { Scalar k = kMin + (kMax - kMin) * i1 / (nK - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pGamma(" << k << ", " << x << ")=" << DistFunc::pGamma(k, x) << ", complementary=" << DistFunc::pGamma(k, x, true) << std::endl; } } } // pGamma { // qGamma Scalar kMin = 0.2; Scalar kMax = 5.0; UnsignedInteger nK = 5; Scalar qMin = 0.1; Scalar qMax = 0.9; UnsignedInteger nQ = 5; for (UnsignedInteger i1 = 0; i1 < nK; ++i1) { Scalar k = kMin + (kMax - kMin) * i1 / (nK - 1); for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qGamma(" << k << ", " << q << ")=" << DistFunc::qGamma(k, q) << ", complementary=" << DistFunc::qGamma(k, q, true) << std::endl; } } } // qGamma { // rGamma Scalar kMin = 0.2; Scalar kMax = 5.0; UnsignedInteger nK = 5; UnsignedInteger nR = 5; for (UnsignedInteger i1 = 0; i1 < nK; ++i1) { Scalar k = kMin + (kMax - kMin) * i1 / (nK - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rGamma(" << k << ")=" << DistFunc::rGamma(k) << std::endl; } } } // rGamma } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_gamma.expout000066400000000000000000000056431307543307100216320ustar00rootroot00000000000000pGamma(0.2, 0.1)=0.676043, complementary=0.323957 pGamma(0.2, 0.3)=0.816527, complementary=0.183473 pGamma(0.2, 0.5)=0.878775, complementary=0.121225 pGamma(0.2, 0.7)=0.91522, complementary=0.0847804 pGamma(0.2, 0.9)=0.938827, complementary=0.0611732 pGamma(1.4, 0.1)=0.0302441, complementary=0.969756 pGamma(1.4, 0.3)=0.125659, complementary=0.874341 pGamma(1.4, 0.5)=0.229949, complementary=0.770051 pGamma(1.4, 0.7)=0.330626, complementary=0.669374 pGamma(1.4, 0.9)=0.423203, complementary=0.576797 pGamma(2.6, 0.1)=0.000628831, complementary=0.999371 pGamma(2.6, 0.3)=0.00948612, complementary=0.990514 pGamma(2.6, 0.5)=0.0310977, complementary=0.968902 pGamma(2.6, 0.7)=0.0649097, complementary=0.93509 pGamma(2.6, 0.9)=0.108786, complementary=0.891214 pGamma(3.8, 0.1)=8.2099e-06, complementary=0.999992 pGamma(3.8, 0.3)=0.000456182, complementary=0.999544 pGamma(3.8, 0.5)=0.00271909, complementary=0.997281 pGamma(3.8, 0.7)=0.00836579, complementary=0.991634 pGamma(3.8, 0.9)=0.018647, complementary=0.981353 pGamma(5, 0.1)=7.6678e-08, complementary=1 pGamma(5, 0.3)=1.5785e-05, complementary=0.999984 pGamma(5, 0.5)=0.000172116, complementary=0.999828 pGamma(5, 0.7)=0.000785535, complementary=0.999214 pGamma(5, 0.9)=0.00234412, complementary=0.997656 qGamma(0.2, 0.1)=6.52552e-06, complementary=0.604902 qGamma(0.2, 0.3)=0.00158779, complementary=0.121038 qGamma(0.2, 0.5)=0.0207463, complementary=0.0207463 qGamma(0.2, 0.7)=0.121038, complementary=0.00158779 qGamma(0.2, 0.9)=0.604902, complementary=6.52552e-06 qGamma(1.4, 0.1)=0.249736, complementary=2.96694 qGamma(1.4, 0.3)=0.637693, complementary=1.70884 qGamma(1.4, 0.5)=1.08437, complementary=1.08437 qGamma(1.4, 0.7)=1.70884, complementary=0.637693 qGamma(1.4, 0.9)=2.96694, complementary=0.249736 qGamma(2.6, 0.1)=0.862885, complementary=4.7607 qGamma(2.6, 0.3)=1.58195, complementary=3.14956 qGamma(2.6, 0.5)=2.27534, complementary=2.27534 qGamma(2.6, 0.7)=3.14956, complementary=1.58195 qGamma(2.6, 0.9)=4.7607, complementary=0.862885 qGamma(3.8, 0.1)=1.61202, complementary=6.41335 qGamma(3.8, 0.3)=2.59185, complementary=4.53462 qGamma(3.8, 0.5)=3.47237, complementary=3.47237 qGamma(3.8, 0.7)=4.53462, complementary=2.59185 qGamma(3.8, 0.9)=6.41335, complementary=1.61202 qGamma(5, 0.1)=2.43259, complementary=7.99359 qGamma(5, 0.3)=3.63361, complementary=5.89036 qGamma(5, 0.5)=4.67091, complementary=4.67091 qGamma(5, 0.7)=5.89036, complementary=3.63361 qGamma(5, 0.9)=7.99359, complementary=2.43259 rGamma(0.2)=0.180905 rGamma(0.2)=0.0210068 rGamma(0.2)=3.88934e-07 rGamma(0.2)=0.0142227 rGamma(0.2)=1.64884 rGamma(1.4)=0.650772 rGamma(1.4)=0.149491 rGamma(1.4)=0.214591 rGamma(1.4)=0.764088 rGamma(1.4)=1.76641 rGamma(2.6)=4.1207 rGamma(2.6)=0.882263 rGamma(2.6)=3.0057 rGamma(2.6)=1.03548 rGamma(2.6)=1.37163 rGamma(3.8)=3.23821 rGamma(3.8)=6.03859 rGamma(3.8)=3.59904 rGamma(3.8)=3.74936 rGamma(3.8)=3.03665 rGamma(5)=3.17393 rGamma(5)=2.91779 rGamma(5)=7.1899 rGamma(5)=6.60932 rGamma(5)=5.93144 openturns-1.9/lib/test/t_DistFunc_kfactor.cxx000066400000000000000000000057721307543307100214620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // kFactor related functions { // kFactor UnsignedInteger nMin = 2; UnsignedInteger nMax = 3; Scalar pMin = 0.1; Scalar pMax = 0.9; UnsignedInteger nP = 2; Scalar alphaMin = 0.1; Scalar alphaMax = 0.9; UnsignedInteger nAlpha = 2; for (UnsignedInteger n = nMin; n <= nMax; ++n) { for (UnsignedInteger iP = 0; iP <= nP; ++iP) { Scalar p = pMin + ((pMax - pMin) * iP) / nP; for (UnsignedInteger iAlpha = 0; iAlpha <= nAlpha; ++iAlpha) { Scalar alpha = alphaMin + (alphaMax - alphaMin) * iAlpha / nAlpha; fullprint << "kFactor(" << 2 * n << ", " << p << ", " << alpha << ")=" << DistFunc::kFactor(2 * n, p, alpha) << std::endl; } // alpha } // p } // n } // kFactor { // kFactorPooled UnsignedInteger nMin = 2; UnsignedInteger nMax = 3; UnsignedInteger mMin = 1; UnsignedInteger mMax = 2; Scalar pMin = 0.1; Scalar pMax = 0.9; UnsignedInteger nP = 2; Scalar alphaMin = 0.1; Scalar alphaMax = 0.9; UnsignedInteger nAlpha = 2; for (UnsignedInteger n = nMin; n <= nMax; ++n) { for (UnsignedInteger m = mMin; m <= mMax; ++m) { for (UnsignedInteger iP = 0; iP <= nP; ++iP) { Scalar p = pMin + ((pMax - pMin) * iP) / nP; for (UnsignedInteger iAlpha = 0; iAlpha <= nAlpha; ++iAlpha) { Scalar alpha = alphaMin + (alphaMax - alphaMin) * iAlpha / nAlpha; fullprint << "kFactorPooled(" << 2 * n << ", " << m << ", " << p << ", " << alpha << ")=" << DistFunc::kFactorPooled(2 * n, m, p, alpha) << std::endl; } // alpha } // p } // m } // n } // kFactorPooled } // try catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_kfactor.expout000066400000000000000000000036041307543307100221740ustar00rootroot00000000000000kFactor(4, 0.1, 0.1)=0.0948248 kFactor(4, 0.1, 0.5)=0.159868 kFactor(4, 0.1, 0.9)=0.336537 kFactor(4, 0.5, 0.1)=0.508054 kFactor(4, 0.5, 0.5)=0.852251 kFactor(4, 0.5, 0.9)=1.76562 kFactor(4, 0.9, 0.1)=1.22991 kFactor(4, 0.9, 0.5)=2.03901 kFactor(4, 0.9, 0.9)=4.15708 kFactor(6, 0.1, 0.1)=0.0981609 kFactor(6, 0.1, 0.5)=0.146103 kFactor(6, 0.1, 0.9)=0.246967 kFactor(6, 0.5, 0.1)=0.526396 kFactor(6, 0.5, 0.5)=0.781955 kFactor(6, 0.5, 0.9)=1.31356 kFactor(6, 0.9, 0.1)=1.27862 kFactor(6, 0.9, 0.5)=1.88846 kFactor(6, 0.9, 0.9)=3.14058 kFactorPooled(4, 1, 0.1, 0.1)=0.0948248 kFactorPooled(4, 1, 0.1, 0.5)=0.159868 kFactorPooled(4, 1, 0.1, 0.9)=0.336537 kFactorPooled(4, 1, 0.5, 0.1)=0.508054 kFactorPooled(4, 1, 0.5, 0.5)=0.852251 kFactorPooled(4, 1, 0.5, 0.9)=1.76562 kFactorPooled(4, 1, 0.9, 0.1)=1.22991 kFactorPooled(4, 1, 0.9, 0.5)=2.03901 kFactorPooled(4, 1, 0.9, 0.9)=4.15708 kFactorPooled(4, 2, 0.1, 0.1)=0.101899 kFactorPooled(4, 2, 0.1, 0.5)=0.149319 kFactorPooled(4, 2, 0.1, 0.9)=0.248996 kFactorPooled(4, 2, 0.5, 0.1)=0.546291 kFactorPooled(4, 2, 0.5, 0.5)=0.797623 kFactorPooled(4, 2, 0.5, 0.9)=1.30566 kFactorPooled(4, 2, 0.9, 0.1)=1.32525 kFactorPooled(4, 2, 0.9, 0.5)=1.91438 kFactorPooled(4, 2, 0.9, 0.9)=3.05366 kFactorPooled(6, 1, 0.1, 0.1)=0.0981609 kFactorPooled(6, 1, 0.1, 0.5)=0.146103 kFactorPooled(6, 1, 0.1, 0.9)=0.246967 kFactorPooled(6, 1, 0.5, 0.1)=0.526396 kFactorPooled(6, 1, 0.5, 0.5)=0.781955 kFactorPooled(6, 1, 0.5, 0.9)=1.31356 kFactorPooled(6, 1, 0.9, 0.1)=1.27862 kFactorPooled(6, 1, 0.9, 0.5)=1.88846 kFactorPooled(6, 1, 0.9, 0.9)=3.14058 kFactorPooled(6, 2, 0.1, 0.1)=0.104942 kFactorPooled(6, 2, 0.1, 0.5)=0.140475 kFactorPooled(6, 2, 0.1, 0.9)=0.202791 kFactorPooled(6, 2, 0.5, 0.1)=0.562926 kFactorPooled(6, 2, 0.5, 0.5)=0.752396 kFactorPooled(6, 2, 0.5, 0.9)=1.07853 kFactorPooled(6, 2, 0.9, 0.1)=1.36887 kFactorPooled(6, 2, 0.9, 0.5)=1.82006 kFactorPooled(6, 2, 0.9, 0.9)=2.57114 openturns-1.9/lib/test/t_DistFunc_kolmogorov.cxx000066400000000000000000000051001307543307100222100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Kolmogorov related functions Indices nValues(0); nValues.add(2); nValues.add(5); nValues.add(10); nValues.add(20); nValues.add(50); nValues.add(100); nValues.add(200); nValues.add(500); nValues.add(1000); nValues.add(2000); nValues.add(5000); nValues.add(10000); nValues.add(20000); nValues.add(100000); nValues.add(1000000); Point xValues(0); xValues.add(0.0001); xValues.add(0.0002); xValues.add(0.0005); xValues.add(0.001); xValues.add(0.002); xValues.add(0.005); xValues.add(0.01); xValues.add(0.02); xValues.add(0.05); xValues.add(0.1); xValues.add(0.2); xValues.add(0.5); xValues.add(1.0); xValues.add(1.2); xValues.add(1.5); xValues.add(2.0); xValues.add(5.0); xValues.add(10.0); xValues.add(20.0); xValues.add(50.0); for (UnsignedInteger i = 0; i < nValues.getSize(); ++i) { const UnsignedInteger n = nValues[i]; for (UnsignedInteger j = 0; j < xValues.getSize(); ++j) { const Scalar x = xValues[j]; const Scalar cdf = DistFunc::pKolmogorov(n, x); const Scalar ccdf = DistFunc::pKolmogorov(n, x, true); fullprint << "pKolmogorov(" << n << ", " << x << ")=" << std::fixed << (cdf < 1e-16 ? 0.0 : cdf) << ", complementary=" << (ccdf < 1e-16 ? 0.0 : ccdf) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_kolmogorov.expout000066400000000000000000000434071307543307100227460ustar00rootroot00000000000000pKolmogorov(2, 0.0001)=0.000000, complementary=1.000000 pKolmogorov(2, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(2, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(2, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.050000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.100000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.200000)=0.000000, complementary=1.000000 pKolmogorov(2, 0.500000)=0.500000, complementary=0.500000 pKolmogorov(2, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(2, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(2, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(2, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(2, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(2, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(2, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(2, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(5, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(5, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(5, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.050000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.100000)=0.000000, complementary=1.000000 pKolmogorov(5, 0.200000)=0.038400, complementary=0.961600 pKolmogorov(5, 0.500000)=0.888000, complementary=0.112000 pKolmogorov(5, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(5, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(5, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(5, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(10, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(10, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(10, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.050000)=0.000000, complementary=1.000000 pKolmogorov(10, 0.100000)=0.000363, complementary=0.999637 pKolmogorov(10, 0.200000)=0.251281, complementary=0.748719 pKolmogorov(10, 0.500000)=0.992223, complementary=0.007777 pKolmogorov(10, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(10, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(10, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(10, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(20, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(20, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(20, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.050000)=0.000000, complementary=1.000000 pKolmogorov(20, 0.100000)=0.023745, complementary=0.976255 pKolmogorov(20, 0.200000)=0.647280, complementary=0.352720 pKolmogorov(20, 0.500000)=0.999962, complementary=0.000038 pKolmogorov(20, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(20, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(20, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(20, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(50, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(50, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(50, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(50, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(50, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(50, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(50, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(50, 0.050000)=0.000976, complementary=0.999024 pKolmogorov(50, 0.100000)=0.337689, complementary=0.662311 pKolmogorov(50, 0.200000)=0.968561, complementary=0.031439 pKolmogorov(50, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(50, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(50, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(50, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(50, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(100, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(100, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(100, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(100, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(100, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(100, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(100, 0.020000)=0.000000, complementary=1.000000 pKolmogorov(100, 0.050000)=0.046784, complementary=0.953216 pKolmogorov(100, 0.100000)=0.747307, complementary=0.252693 pKolmogorov(100, 0.200000)=0.999445, complementary=0.000555 pKolmogorov(100, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(100, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(100, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(100, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(100, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(200, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(200, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(200, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(200, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(200, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(200, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(200, 0.020000)=0.000005, complementary=0.999995 pKolmogorov(200, 0.050000)=0.319737, complementary=0.680263 pKolmogorov(200, 0.100000)=0.965890, complementary=0.034110 pKolmogorov(200, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(200, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(200, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(200, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(200, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(200, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(500, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(500, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(500, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(500, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(500, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(500, 0.010000)=0.000000, complementary=1.000000 pKolmogorov(500, 0.020000)=0.014013, complementary=0.985987 pKolmogorov(500, 0.050000)=0.841337, complementary=0.158663 pKolmogorov(500, 0.100000)=0.999917, complementary=0.000083 pKolmogorov(500, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(500, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(500, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(500, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(500, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(500, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(1000, 0.010000)=0.000050, complementary=0.999950 pKolmogorov(1000, 0.020000)=0.189103, complementary=0.810897 pKolmogorov(1000, 0.050000)=0.986988, complementary=0.013012 pKolmogorov(1000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(1000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(1000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(1000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(1000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(1000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(1000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.005000)=0.000000, complementary=1.000000 pKolmogorov(2000, 0.010000)=0.012863, complementary=0.987137 pKolmogorov(2000, 0.020000)=0.604687, complementary=0.395313 pKolmogorov(2000, 0.050000)=0.999913, complementary=0.000087 pKolmogorov(2000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(2000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(2000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(2000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(2000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(2000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(2000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(5000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(5000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(5000, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(5000, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(5000, 0.005000)=0.000414, complementary=0.999586 pKolmogorov(5000, 0.010000)=0.304544, complementary=0.695456 pKolmogorov(5000, 0.020000)=0.963861, complementary=0.036139 pKolmogorov(5000, 0.050000)=1.000000, complementary=0.000000 pKolmogorov(5000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(5000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(5000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(5000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(5000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(5000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(5000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(10000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(10000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(10000, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(10000, 0.002000)=0.000000, complementary=1.000000 pKolmogorov(10000, 0.005000)=0.037122, complementary=0.962878 pKolmogorov(10000, 0.010000)=0.731781, complementary=0.268219 pKolmogorov(10000, 0.020000)=0.999338, complementary=0.000662 pKolmogorov(10000, 0.050000)=1.000000, complementary=0.000000 pKolmogorov(10000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(10000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(10000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(10000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(10000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(10000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(10000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(20000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(20000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(20000, 0.001000)=0.000000, complementary=1.000000 pKolmogorov(20000, 0.002000)=0.000002, complementary=0.999998 pKolmogorov(20000, 0.005000)=0.302591, complementary=0.697409 pKolmogorov(20000, 0.010000)=0.963614, complementary=0.036386 pKolmogorov(20000, 0.020000)=1.000000, complementary=0.000000 pKolmogorov(20000, 0.050000)=1.000000, complementary=0.000000 pKolmogorov(20000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(20000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(20000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(20000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(20000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(20000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(20000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(100000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(100000, 0.000500)=0.000000, complementary=1.000000 pKolmogorov(100000, 0.001000)=0.000036, complementary=0.999964 pKolmogorov(100000, 0.002000)=0.182159, complementary=0.817841 pKolmogorov(100000, 0.005000)=0.986569, complementary=0.013431 pKolmogorov(100000, 0.010000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.020000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.050000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(100000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(100000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(100000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(100000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(100000, 50.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.000100)=0.000000, complementary=1.000000 pKolmogorov(1000000, 0.000200)=0.000000, complementary=1.000000 pKolmogorov(1000000, 0.000500)=0.036161, complementary=0.963839 pKolmogorov(1000000, 0.001000)=0.730179, complementary=0.269821 pKolmogorov(1000000, 0.002000)=0.999330, complementary=0.000670 pKolmogorov(1000000, 0.005000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.010000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.020000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.050000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.100000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.200000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 0.500000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 1.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 1.200000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 1.500000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 2.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 5.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 10.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 20.000000)=1.000000, complementary=0.000000 pKolmogorov(1000000, 50.000000)=1.000000, complementary=0.000000 openturns-1.9/lib/test/t_DistFunc_noncentralchisquare.cxx000066400000000000000000000074651307543307100241020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // NonCentralChiSquare related functions { // dNonCentralChiSquare Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar lambdaMin = 0.2; Scalar lambdaMax = 5.0; UnsignedInteger n2 = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar lambda = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "dNonCentralChiSquare(" << nu << ", " << lambda << ", " << x << ")=" << DistFunc::dNonCentralChiSquare(nu, lambda, x) << std::endl; } } } } // dNonCentralChiSquare { // pNonCentralChiSquare Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar lambdaMin = 0.2; Scalar lambdaMax = 5.0; UnsignedInteger n2 = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar lambda = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pNonCentralChiSquare(" << nu << ", " << lambda << ", " << x << ")=" << DistFunc::pNonCentralChiSquare(nu, lambda, x) << ", complementary=" << DistFunc::pNonCentralChiSquare(nu, lambda, x, true) << std::endl; } } } } // pNonCentralChiSquare { // rNonCentralChiSquare Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar lambdaMin = 0.2; Scalar lambdaMax = 5.0; UnsignedInteger n2 = 5; UnsignedInteger nR = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar lambda = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rNonCentralChiSquare(" << nu << ", " << lambda << ")=" << DistFunc::rNonCentralChiSquare(nu, lambda) << std::endl; } } } } // rNonCentralChiSquare } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_noncentralchisquare.expout000066400000000000000000000451221307543307100246140ustar00rootroot00000000000000dNonCentralChiSquare(0.2, 0.2, 0.1)=0.704123 dNonCentralChiSquare(0.2, 0.2, 0.3)=0.259812 dNonCentralChiSquare(0.2, 0.2, 0.5)=0.161577 dNonCentralChiSquare(0.2, 0.2, 0.7)=0.11686 dNonCentralChiSquare(0.2, 0.2, 0.9)=0.0907845 dNonCentralChiSquare(0.2, 1.4, 0.1)=0.498846 dNonCentralChiSquare(0.2, 1.4, 0.3)=0.260264 dNonCentralChiSquare(0.2, 1.4, 0.5)=0.204772 dNonCentralChiSquare(0.2, 1.4, 0.7)=0.176642 dNonCentralChiSquare(0.2, 1.4, 0.9)=0.157882 dNonCentralChiSquare(0.2, 2.6, 0.1)=0.337148 dNonCentralChiSquare(0.2, 2.6, 0.3)=0.212679 dNonCentralChiSquare(0.2, 2.6, 0.5)=0.184725 dNonCentralChiSquare(0.2, 2.6, 0.7)=0.170368 dNonCentralChiSquare(0.2, 2.6, 0.9)=0.160341 dNonCentralChiSquare(0.2, 3.8, 0.1)=0.220747 dNonCentralChiSquare(0.2, 3.8, 0.3)=0.158063 dNonCentralChiSquare(0.2, 3.8, 0.5)=0.146156 dNonCentralChiSquare(0.2, 3.8, 0.7)=0.140845 dNonCentralChiSquare(0.2, 3.8, 0.9)=0.13735 dNonCentralChiSquare(0.2, 5, 0.1)=0.14127 dNonCentralChiSquare(0.2, 5, 0.3)=0.111158 dNonCentralChiSquare(0.2, 5, 0.5)=0.107764 dNonCentralChiSquare(0.2, 5, 0.7)=0.107523 dNonCentralChiSquare(0.2, 5, 0.9)=0.107958 dNonCentralChiSquare(1.4, 0.2, 0.1)=0.820233 dNonCentralChiSquare(1.4, 0.2, 0.3)=0.541407 dNonCentralChiSquare(1.4, 0.2, 0.5)=0.426228 dNonCentralChiSquare(1.4, 0.2, 0.7)=0.353531 dNonCentralChiSquare(1.4, 0.2, 0.9)=0.300786 dNonCentralChiSquare(1.4, 1.4, 0.1)=0.469535 dNonCentralChiSquare(1.4, 1.4, 0.3)=0.335866 dNonCentralChiSquare(1.4, 1.4, 0.5)=0.285213 dNonCentralChiSquare(1.4, 1.4, 0.7)=0.254135 dNonCentralChiSquare(1.4, 1.4, 0.9)=0.231438 dNonCentralChiSquare(1.4, 2.6, 0.1)=0.268511 dNonCentralChiSquare(1.4, 2.6, 0.3)=0.206715 dNonCentralChiSquare(1.4, 2.6, 0.5)=0.187178 dNonCentralChiSquare(1.4, 2.6, 0.7)=0.176573 dNonCentralChiSquare(1.4, 2.6, 0.9)=0.169285 dNonCentralChiSquare(1.4, 3.8, 0.1)=0.153407 dNonCentralChiSquare(1.4, 3.8, 0.3)=0.126375 dNonCentralChiSquare(1.4, 3.8, 0.5)=0.120994 dNonCentralChiSquare(1.4, 3.8, 0.7)=0.119699 dNonCentralChiSquare(1.4, 3.8, 0.9)=0.119636 dNonCentralChiSquare(1.4, 5, 0.1)=0.087567 dNonCentralChiSquare(1.4, 5, 0.3)=0.0768137 dNonCentralChiSquare(1.4, 5, 0.5)=0.0772675 dNonCentralChiSquare(1.4, 5, 0.7)=0.079638 dNonCentralChiSquare(1.4, 5, 0.9)=0.0824557 dNonCentralChiSquare(2.6, 0.2, 0.1)=0.195959 dNonCentralChiSquare(2.6, 0.2, 0.3)=0.248429 dNonCentralChiSquare(2.6, 0.2, 0.5)=0.264025 dNonCentralChiSquare(2.6, 0.2, 0.7)=0.266295 dNonCentralChiSquare(2.6, 0.2, 0.9)=0.261802 dNonCentralChiSquare(2.6, 1.4, 0.1)=0.110039 dNonCentralChiSquare(2.6, 1.4, 0.3)=0.145918 dNonCentralChiSquare(2.6, 1.4, 0.5)=0.162028 dNonCentralChiSquare(2.6, 1.4, 0.7)=0.170565 dNonCentralChiSquare(2.6, 1.4, 0.9)=0.174844 dNonCentralChiSquare(2.6, 2.6, 0.1)=0.061777 dNonCentralChiSquare(2.6, 2.6, 0.3)=0.0855441 dNonCentralChiSquare(2.6, 2.6, 0.5)=0.0989422 dNonCentralChiSquare(2.6, 2.6, 0.7)=0.10825 dNonCentralChiSquare(2.6, 2.6, 0.9)=0.115102 dNonCentralChiSquare(2.6, 3.8, 0.1)=0.0346748 dNonCentralChiSquare(2.6, 3.8, 0.3)=0.0500623 dNonCentralChiSquare(2.6, 3.8, 0.5)=0.0601544 dNonCentralChiSquare(2.6, 3.8, 0.7)=0.0681684 dNonCentralChiSquare(2.6, 3.8, 0.9)=0.0748904 dNonCentralChiSquare(2.6, 5, 0.1)=0.0194585 dNonCentralChiSquare(2.6, 5, 0.3)=0.0292499 dNonCentralChiSquare(2.6, 5, 0.5)=0.0364298 dNonCentralChiSquare(2.6, 5, 0.7)=0.0426416 dNonCentralChiSquare(2.6, 5, 0.9)=0.0482532 dNonCentralChiSquare(3.8, 0.2, 0.1)=0.0302672 dNonCentralChiSquare(3.8, 0.2, 0.3)=0.0740002 dNonCentralChiSquare(3.8, 0.2, 0.5)=0.106597 dNonCentralChiSquare(3.8, 0.2, 0.7)=0.131252 dNonCentralChiSquare(3.8, 0.2, 0.9)=0.149684 dNonCentralChiSquare(3.8, 1.4, 0.1)=0.0168744 dNonCentralChiSquare(3.8, 1.4, 0.3)=0.0425607 dNonCentralChiSquare(3.8, 1.4, 0.5)=0.0632196 dNonCentralChiSquare(3.8, 1.4, 0.7)=0.0802345 dNonCentralChiSquare(3.8, 1.4, 0.9)=0.094277 dNonCentralChiSquare(3.8, 2.6, 0.1)=0.00940691 dNonCentralChiSquare(3.8, 2.6, 0.3)=0.0244605 dNonCentralChiSquare(3.8, 2.6, 0.5)=0.0374202 dNonCentralChiSquare(3.8, 2.6, 0.7)=0.0488657 dNonCentralChiSquare(3.8, 2.6, 0.9)=0.0590282 dNonCentralChiSquare(3.8, 3.8, 0.1)=0.00524361 dNonCentralChiSquare(3.8, 3.8, 0.3)=0.0140482 dNonCentralChiSquare(3.8, 3.8, 0.5)=0.0221091 dNonCentralChiSquare(3.8, 3.8, 0.7)=0.0296614 dNonCentralChiSquare(3.8, 3.8, 0.9)=0.0367658 dNonCentralChiSquare(3.8, 5, 0.1)=0.00292266 dNonCentralChiSquare(3.8, 5, 0.3)=0.00806276 dNonCentralChiSquare(3.8, 5, 0.5)=0.0130406 dNonCentralChiSquare(3.8, 5, 0.7)=0.0179496 dNonCentralChiSquare(3.8, 5, 0.9)=0.0227935 dNonCentralChiSquare(5, 0.2, 0.1)=0.00362671 dNonCentralChiSquare(5, 0.2, 0.3)=0.0171199 dNonCentralChiSquare(5, 0.2, 0.5)=0.033464 dNonCentralChiSquare(5, 0.2, 0.7)=0.0503583 dNonCentralChiSquare(5, 0.2, 0.9)=0.0666942 dNonCentralChiSquare(5, 1.4, 0.1)=0.00201435 dNonCentralChiSquare(5, 1.4, 0.3)=0.00973762 dNonCentralChiSquare(5, 1.4, 0.5)=0.019488 dNonCentralChiSquare(5, 1.4, 0.7)=0.0300198 dNonCentralChiSquare(5, 1.4, 0.9)=0.0406898 dNonCentralChiSquare(5, 2.6, 0.1)=0.00111877 dNonCentralChiSquare(5, 2.6, 0.3)=0.00553668 dNonCentralChiSquare(5, 2.6, 0.5)=0.011338 dNonCentralChiSquare(5, 2.6, 0.7)=0.0178624 dNonCentralChiSquare(5, 2.6, 0.9)=0.0247504 dNonCentralChiSquare(5, 3.8, 0.1)=0.00062134 dNonCentralChiSquare(5, 3.8, 0.3)=0.003147 dNonCentralChiSquare(5, 3.8, 0.5)=0.0065903 dNonCentralChiSquare(5, 3.8, 0.7)=0.0106102 dNonCentralChiSquare(5, 3.8, 0.9)=0.0150137 dNonCentralChiSquare(5, 5, 0.1)=0.000345064 dNonCentralChiSquare(5, 5, 0.3)=0.00178812 dNonCentralChiSquare(5, 5, 0.5)=0.00382731 dNonCentralChiSquare(5, 5, 0.7)=0.00629217 dNonCentralChiSquare(5, 5, 0.9)=0.00908441 pNonCentralChiSquare(0.2, 0.2, 0.1)=0.704862, complementary=0.295138 pNonCentralChiSquare(0.2, 0.2, 0.3)=0.786395, complementary=0.213605 pNonCentralChiSquare(0.2, 0.2, 0.5)=0.82698, complementary=0.17302 pNonCentralChiSquare(0.2, 0.2, 0.7)=0.854362, complementary=0.145638 pNonCentralChiSquare(0.2, 0.2, 0.9)=0.874928, complementary=0.125072 pNonCentralChiSquare(0.2, 1.4, 0.1)=0.397213, complementary=0.602787 pNonCentralChiSquare(0.2, 1.4, 0.3)=0.465193, complementary=0.534807 pNonCentralChiSquare(0.2, 1.4, 0.5)=0.510895, complementary=0.489105 pNonCentralChiSquare(0.2, 1.4, 0.7)=0.548804, complementary=0.451196 pNonCentralChiSquare(0.2, 1.4, 0.9)=0.582156, complementary=0.417844 pNonCentralChiSquare(0.2, 2.6, 0.1)=0.223771, complementary=0.776229 pNonCentralChiSquare(0.2, 2.6, 0.3)=0.274526, complementary=0.725474 pNonCentralChiSquare(0.2, 2.6, 0.5)=0.313859, complementary=0.686141 pNonCentralChiSquare(0.2, 2.6, 0.7)=0.349258, complementary=0.650742 pNonCentralChiSquare(0.2, 2.6, 0.9)=0.382285, complementary=0.617715 pNonCentralChiSquare(0.2, 3.8, 0.1)=0.126022, complementary=0.873978 pNonCentralChiSquare(0.2, 3.8, 0.3)=0.161651, complementary=0.838349 pNonCentralChiSquare(0.2, 3.8, 0.5)=0.191869, complementary=0.808131 pNonCentralChiSquare(0.2, 3.8, 0.7)=0.220519, complementary=0.779481 pNonCentralChiSquare(0.2, 3.8, 0.9)=0.248322, complementary=0.751678 pNonCentralChiSquare(0.2, 5, 0.1)=0.0709516, complementary=0.929048 pNonCentralChiSquare(0.2, 5, 0.3)=0.0949936, complementary=0.905006 pNonCentralChiSquare(0.2, 5, 0.5)=0.116784, complementary=0.883216 pNonCentralChiSquare(0.2, 5, 0.7)=0.138291, complementary=0.861709 pNonCentralChiSquare(0.2, 5, 0.9)=0.159835, complementary=0.840165 pNonCentralChiSquare(1.4, 0.2, 0.1)=0.120179, complementary=0.879821 pNonCentralChiSquare(1.4, 0.2, 0.3)=0.250471, complementary=0.749529 pNonCentralChiSquare(1.4, 0.2, 0.5)=0.346152, complementary=0.653848 pNonCentralChiSquare(1.4, 0.2, 0.7)=0.423682, complementary=0.576318 pNonCentralChiSquare(1.4, 0.2, 0.9)=0.488869, complementary=0.511131 pNonCentralChiSquare(1.4, 1.4, 0.1)=0.067112, complementary=0.932888 pNonCentralChiSquare(1.4, 1.4, 0.3)=0.144597, complementary=0.855403 pNonCentralChiSquare(1.4, 1.4, 0.5)=0.206188, complementary=0.793812 pNonCentralChiSquare(1.4, 1.4, 0.7)=0.259929, complementary=0.740071 pNonCentralChiSquare(1.4, 1.4, 0.9)=0.308388, complementary=0.691612 pNonCentralChiSquare(1.4, 2.6, 0.1)=0.0374735, complementary=0.962526 pNonCentralChiSquare(1.4, 2.6, 0.3)=0.0834022, complementary=0.916598 pNonCentralChiSquare(1.4, 2.6, 0.5)=0.122545, complementary=0.877455 pNonCentralChiSquare(1.4, 2.6, 0.7)=0.158838, complementary=0.841162 pNonCentralChiSquare(1.4, 2.6, 0.9)=0.193389, complementary=0.806611 pNonCentralChiSquare(1.4, 3.8, 0.1)=0.020922, complementary=0.979078 pNonCentralChiSquare(1.4, 3.8, 0.3)=0.0480651, complementary=0.951935 pNonCentralChiSquare(1.4, 3.8, 0.5)=0.0726836, complementary=0.927316 pNonCentralChiSquare(1.4, 3.8, 0.7)=0.096719, complementary=0.903281 pNonCentralChiSquare(1.4, 3.8, 0.9)=0.120642, complementary=0.879358 pNonCentralChiSquare(1.4, 5, 0.1)=0.0116798, complementary=0.98832 pNonCentralChiSquare(1.4, 5, 0.3)=0.027678, complementary=0.972322 pNonCentralChiSquare(1.4, 5, 0.5)=0.043028, complementary=0.956972 pNonCentralChiSquare(1.4, 5, 0.7)=0.0587043, complementary=0.941296 pNonCentralChiSquare(1.4, 5, 0.9)=0.0749113, complementary=0.925089 pNonCentralChiSquare(2.6, 0.2, 0.1)=0.0153806, complementary=0.984619 pNonCentralChiSquare(2.6, 0.2, 0.3)=0.0609317, complementary=0.939068 pNonCentralChiSquare(2.6, 0.2, 0.5)=0.112495, complementary=0.887505 pNonCentralChiSquare(2.6, 0.2, 0.7)=0.165677, complementary=0.834323 pNonCentralChiSquare(2.6, 0.2, 0.9)=0.218569, complementary=0.781431 pNonCentralChiSquare(2.6, 1.4, 0.1)=0.00855084, complementary=0.991449 pNonCentralChiSquare(2.6, 1.4, 0.3)=0.0347375, complementary=0.965262 pNonCentralChiSquare(2.6, 1.4, 0.5)=0.0657071, complementary=0.934293 pNonCentralChiSquare(2.6, 1.4, 0.7)=0.0990561, complementary=0.900944 pNonCentralChiSquare(2.6, 1.4, 0.9)=0.133653, complementary=0.866347 pNonCentralChiSquare(2.6, 2.6, 0.1)=0.0047536, complementary=0.995246 pNonCentralChiSquare(2.6, 2.6, 0.3)=0.0197958, complementary=0.980204 pNonCentralChiSquare(2.6, 2.6, 0.5)=0.038337, complementary=0.961663 pNonCentralChiSquare(2.6, 2.6, 0.7)=0.0591062, complementary=0.940894 pNonCentralChiSquare(2.6, 2.6, 0.9)=0.0814749, complementary=0.918525 pNonCentralChiSquare(2.6, 3.8, 0.1)=0.00264251, complementary=0.997357 pNonCentralChiSquare(2.6, 3.8, 0.3)=0.0112764, complementary=0.988724 pNonCentralChiSquare(2.6, 3.8, 0.5)=0.0223448, complementary=0.977655 pNonCentralChiSquare(2.6, 3.8, 0.7)=0.0352029, complementary=0.964797 pNonCentralChiSquare(2.6, 3.8, 0.9)=0.0495269, complementary=0.950473 pNonCentralChiSquare(2.6, 5, 0.1)=0.00146889, complementary=0.998531 pNonCentralChiSquare(2.6, 5, 0.3)=0.00642093, complementary=0.993579 pNonCentralChiSquare(2.6, 5, 0.5)=0.013011, complementary=0.986989 pNonCentralChiSquare(2.6, 5, 0.7)=0.02093, complementary=0.97907 pNonCentralChiSquare(2.6, 5, 0.9)=0.030028, complementary=0.969972 pNonCentralChiSquare(3.8, 0.2, 0.1)=0.00161935, complementary=0.998381 pNonCentralChiSquare(3.8, 0.2, 0.3)=0.0122783, complementary=0.987722 pNonCentralChiSquare(3.8, 0.2, 0.5)=0.0304894, complementary=0.969511 pNonCentralChiSquare(3.8, 0.2, 0.7)=0.0543902, complementary=0.94561 pNonCentralChiSquare(3.8, 0.2, 0.9)=0.0825763, complementary=0.917424 pNonCentralChiSquare(3.8, 1.4, 0.1)=0.000897902, complementary=0.999102 pNonCentralChiSquare(3.8, 1.4, 0.3)=0.00694693, complementary=0.993053 pNonCentralChiSquare(3.8, 1.4, 0.5)=0.0175934, complementary=0.982407 pNonCentralChiSquare(3.8, 1.4, 0.7)=0.031993, complementary=0.968007 pNonCentralChiSquare(3.8, 1.4, 0.9)=0.0494895, complementary=0.950511 pNonCentralChiSquare(3.8, 2.6, 0.1)=0.000497858, complementary=0.999502 pNonCentralChiSquare(3.8, 2.6, 0.3)=0.00392958, complementary=0.99607 pNonCentralChiSquare(3.8, 2.6, 0.5)=0.0101458, complementary=0.989854 pNonCentralChiSquare(3.8, 2.6, 0.7)=0.0187973, complementary=0.981203 pNonCentralChiSquare(3.8, 2.6, 0.9)=0.0296067, complementary=0.970393 pNonCentralChiSquare(3.8, 3.8, 0.1)=0.000276039, complementary=0.999724 pNonCentralChiSquare(3.8, 3.8, 0.3)=0.0022223, complementary=0.997778 pNonCentralChiSquare(3.8, 3.8, 0.5)=0.00584748, complementary=0.994153 pNonCentralChiSquare(3.8, 3.8, 0.7)=0.0110323, complementary=0.988968 pNonCentralChiSquare(3.8, 3.8, 0.9)=0.0176822, complementary=0.982318 pNonCentralChiSquare(3.8, 5, 0.1)=0.000153047, complementary=0.999847 pNonCentralChiSquare(3.8, 5, 0.3)=0.0012565, complementary=0.998743 pNonCentralChiSquare(3.8, 5, 0.5)=0.00336826, complementary=0.996632 pNonCentralChiSquare(3.8, 5, 0.7)=0.0064683, complementary=0.993532 pNonCentralChiSquare(3.8, 5, 0.9)=0.0105438, complementary=0.989456 pNonCentralChiSquare(5, 0.2, 0.1)=0.000147079, complementary=0.999853 pNonCentralChiSquare(5, 0.2, 0.3)=0.00214169, complementary=0.997858 pNonCentralChiSquare(5, 0.2, 0.5)=0.00717736, complementary=0.992823 pNonCentralChiSquare(5, 0.2, 0.7)=0.0155617, complementary=0.984438 pNonCentralChiSquare(5, 0.2, 0.9)=0.0272824, complementary=0.972718 pNonCentralChiSquare(5, 1.4, 0.1)=8.14106e-05, complementary=0.999919 pNonCentralChiSquare(5, 1.4, 0.3)=0.00120559, complementary=0.998794 pNonCentralChiSquare(5, 1.4, 0.5)=0.00410761, complementary=0.995892 pNonCentralChiSquare(5, 1.4, 0.7)=0.00905177, complementary=0.990948 pNonCentralChiSquare(5, 1.4, 0.9)=0.0161242, complementary=0.983876 pNonCentralChiSquare(5, 2.6, 0.1)=4.50613e-05, complementary=0.999955 pNonCentralChiSquare(5, 2.6, 0.3)=0.000678549, complementary=0.999321 pNonCentralChiSquare(5, 2.6, 0.5)=0.00234991, complementary=0.99765 pNonCentralChiSquare(5, 2.6, 0.7)=0.0052614, complementary=0.994739 pNonCentralChiSquare(5, 2.6, 0.9)=0.00951886, complementary=0.990481 pNonCentralChiSquare(5, 3.8, 0.1)=2.49413e-05, complementary=0.999975 pNonCentralChiSquare(5, 3.8, 0.3)=0.000381859, complementary=0.999618 pNonCentralChiSquare(5, 3.8, 0.5)=0.00134386, complementary=0.998656 pNonCentralChiSquare(5, 3.8, 0.7)=0.00305615, complementary=0.996944 pNonCentralChiSquare(5, 3.8, 0.9)=0.00561339, complementary=0.994387 pNonCentralChiSquare(5, 5, 0.1)=1.38047e-05, complementary=0.999986 pNonCentralChiSquare(5, 5, 0.3)=0.000214866, complementary=0.999785 pNonCentralChiSquare(5, 5, 0.5)=0.000768256, complementary=0.999232 pNonCentralChiSquare(5, 5, 0.7)=0.00177404, complementary=0.998226 pNonCentralChiSquare(5, 5, 0.9)=0.0033069, complementary=0.996693 rNonCentralChiSquare(0.2, 0.2)=0.0612653 rNonCentralChiSquare(0.2, 0.2)=4.76134 rNonCentralChiSquare(0.2, 0.2)=0.038133 rNonCentralChiSquare(0.2, 0.2)=1.71477e-05 rNonCentralChiSquare(0.2, 0.2)=0.000417952 rNonCentralChiSquare(0.2, 1.4)=0.00325601 rNonCentralChiSquare(0.2, 1.4)=2.07897 rNonCentralChiSquare(0.2, 1.4)=0.0239742 rNonCentralChiSquare(0.2, 1.4)=0.0361934 rNonCentralChiSquare(0.2, 1.4)=0.561101 rNonCentralChiSquare(0.2, 2.6)=0.608614 rNonCentralChiSquare(0.2, 2.6)=2.47661 rNonCentralChiSquare(0.2, 2.6)=5.28009 rNonCentralChiSquare(0.2, 2.6)=3.31977 rNonCentralChiSquare(0.2, 2.6)=2.93009 rNonCentralChiSquare(0.2, 3.8)=0.934387 rNonCentralChiSquare(0.2, 3.8)=9.20111 rNonCentralChiSquare(0.2, 3.8)=6.10443 rNonCentralChiSquare(0.2, 3.8)=11.642 rNonCentralChiSquare(0.2, 3.8)=1.06002 rNonCentralChiSquare(0.2, 5)=3.14006 rNonCentralChiSquare(0.2, 5)=3.85811 rNonCentralChiSquare(0.2, 5)=5.44288 rNonCentralChiSquare(0.2, 5)=16.3424 rNonCentralChiSquare(0.2, 5)=9.41437 rNonCentralChiSquare(1.4, 0.2)=0.26634 rNonCentralChiSquare(1.4, 0.2)=2.37055 rNonCentralChiSquare(1.4, 0.2)=3.48665 rNonCentralChiSquare(1.4, 0.2)=0.89323 rNonCentralChiSquare(1.4, 0.2)=1.79408 rNonCentralChiSquare(1.4, 1.4)=0.0821739 rNonCentralChiSquare(1.4, 1.4)=2.20005 rNonCentralChiSquare(1.4, 1.4)=3.39576 rNonCentralChiSquare(1.4, 1.4)=1.23198 rNonCentralChiSquare(1.4, 1.4)=0.991647 rNonCentralChiSquare(1.4, 2.6)=0.375739 rNonCentralChiSquare(1.4, 2.6)=6.61233 rNonCentralChiSquare(1.4, 2.6)=2.81355 rNonCentralChiSquare(1.4, 2.6)=8.49984 rNonCentralChiSquare(1.4, 2.6)=1.07351 rNonCentralChiSquare(1.4, 3.8)=4.59694 rNonCentralChiSquare(1.4, 3.8)=8.596 rNonCentralChiSquare(1.4, 3.8)=4.46206 rNonCentralChiSquare(1.4, 3.8)=6.91333 rNonCentralChiSquare(1.4, 3.8)=7.15488 rNonCentralChiSquare(1.4, 5)=2.46596 rNonCentralChiSquare(1.4, 5)=0.350294 rNonCentralChiSquare(1.4, 5)=2.41434 rNonCentralChiSquare(1.4, 5)=1.12 rNonCentralChiSquare(1.4, 5)=4.45259 rNonCentralChiSquare(2.6, 0.2)=1.08586 rNonCentralChiSquare(2.6, 0.2)=1.68427 rNonCentralChiSquare(2.6, 0.2)=0.955528 rNonCentralChiSquare(2.6, 0.2)=10.587 rNonCentralChiSquare(2.6, 0.2)=3.40341 rNonCentralChiSquare(2.6, 1.4)=1.00498 rNonCentralChiSquare(2.6, 1.4)=3.55186 rNonCentralChiSquare(2.6, 1.4)=3.70253 rNonCentralChiSquare(2.6, 1.4)=4.49896 rNonCentralChiSquare(2.6, 1.4)=4.58234 rNonCentralChiSquare(2.6, 2.6)=5.95968 rNonCentralChiSquare(2.6, 2.6)=1.0963 rNonCentralChiSquare(2.6, 2.6)=0.981728 rNonCentralChiSquare(2.6, 2.6)=2.7402 rNonCentralChiSquare(2.6, 2.6)=6.14636 rNonCentralChiSquare(2.6, 3.8)=1.09154 rNonCentralChiSquare(2.6, 3.8)=8.64628 rNonCentralChiSquare(2.6, 3.8)=0.0890308 rNonCentralChiSquare(2.6, 3.8)=8.45384 rNonCentralChiSquare(2.6, 3.8)=13.5536 rNonCentralChiSquare(2.6, 5)=9.99927 rNonCentralChiSquare(2.6, 5)=1.86201 rNonCentralChiSquare(2.6, 5)=10.1853 rNonCentralChiSquare(2.6, 5)=4.2474 rNonCentralChiSquare(2.6, 5)=7.71897 rNonCentralChiSquare(3.8, 0.2)=4.19774 rNonCentralChiSquare(3.8, 0.2)=2.88942 rNonCentralChiSquare(3.8, 0.2)=10.1338 rNonCentralChiSquare(3.8, 0.2)=3.30303 rNonCentralChiSquare(3.8, 0.2)=0.721482 rNonCentralChiSquare(3.8, 1.4)=6.08327 rNonCentralChiSquare(3.8, 1.4)=9.54997 rNonCentralChiSquare(3.8, 1.4)=5.78148 rNonCentralChiSquare(3.8, 1.4)=0.630014 rNonCentralChiSquare(3.8, 1.4)=5.81862 rNonCentralChiSquare(3.8, 2.6)=7.27571 rNonCentralChiSquare(3.8, 2.6)=0.975429 rNonCentralChiSquare(3.8, 2.6)=6.61349 rNonCentralChiSquare(3.8, 2.6)=6.98297 rNonCentralChiSquare(3.8, 2.6)=3.25552 rNonCentralChiSquare(3.8, 3.8)=0.767204 rNonCentralChiSquare(3.8, 3.8)=3.36333 rNonCentralChiSquare(3.8, 3.8)=3.57949 rNonCentralChiSquare(3.8, 3.8)=4.263 rNonCentralChiSquare(3.8, 3.8)=2.89343 rNonCentralChiSquare(3.8, 5)=4.22781 rNonCentralChiSquare(3.8, 5)=12.4908 rNonCentralChiSquare(3.8, 5)=9.15028 rNonCentralChiSquare(3.8, 5)=4.54976 rNonCentralChiSquare(3.8, 5)=12.439 rNonCentralChiSquare(5, 0.2)=1.69273 rNonCentralChiSquare(5, 0.2)=2.81985 rNonCentralChiSquare(5, 0.2)=7.24405 rNonCentralChiSquare(5, 0.2)=11.4825 rNonCentralChiSquare(5, 0.2)=2.01198 rNonCentralChiSquare(5, 1.4)=2.97689 rNonCentralChiSquare(5, 1.4)=4.89329 rNonCentralChiSquare(5, 1.4)=3.70067 rNonCentralChiSquare(5, 1.4)=4.16863 rNonCentralChiSquare(5, 1.4)=11.0268 rNonCentralChiSquare(5, 2.6)=2.48859 rNonCentralChiSquare(5, 2.6)=6.32029 rNonCentralChiSquare(5, 2.6)=5.56539 rNonCentralChiSquare(5, 2.6)=9.47491 rNonCentralChiSquare(5, 2.6)=13.9559 rNonCentralChiSquare(5, 3.8)=10.361 rNonCentralChiSquare(5, 3.8)=1.09388 rNonCentralChiSquare(5, 3.8)=5.42167 rNonCentralChiSquare(5, 3.8)=11.1485 rNonCentralChiSquare(5, 3.8)=12.514 rNonCentralChiSquare(5, 5)=11.3336 rNonCentralChiSquare(5, 5)=6.2603 rNonCentralChiSquare(5, 5)=14.7487 rNonCentralChiSquare(5, 5)=11.6438 rNonCentralChiSquare(5, 5)=12.4474 openturns-1.9/lib/test/t_DistFunc_noncentralstudent.cxx000066400000000000000000000074001307543307100235710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // NonCentralStudent related functions { // dNonCentralStudent Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar deltaMin = 0.2; Scalar deltaMax = 5.0; UnsignedInteger n2 = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "dNonCentralStudent(" << nu << ", " << delta << ", " << x << ")=" << DistFunc::dNonCentralStudent(nu, delta, x) << std::endl; } } } } // dNonCentralStudent { // pNonCentralStudent Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar deltaMin = 0.2; Scalar deltaMax = 5.0; UnsignedInteger n2 = 5; Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pNonCentralStudent(" << nu << ", " << delta << ", " << x << ")=" << DistFunc::pNonCentralStudent(nu, delta, x) << ", complementary=" << DistFunc::pNonCentralStudent(nu, delta, x, true) << std::endl; } } } } // pNonCentralStudent { // rNonCentralStudent Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar deltaMin = 0.2; Scalar deltaMax = 5.0; UnsignedInteger n2 = 5; UnsignedInteger nR = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger i2 = 0; i2 < n2; ++i2) { Scalar delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rNonCentralStudent(" << nu << ", " << delta << ")=" << DistFunc::rNonCentralStudent(nu, delta) << std::endl; } } } } // rNonCentralStudent } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_noncentralstudent.expout000066400000000000000000000436501307543307100243220ustar00rootroot00000000000000dNonCentralStudent(0.2, 0.2, 0.1)=0.195616 dNonCentralStudent(0.2, 0.2, 0.3)=0.171706 dNonCentralStudent(0.2, 0.2, 0.5)=0.136747 dNonCentralStudent(0.2, 0.2, 0.7)=0.107823 dNonCentralStudent(0.2, 0.2, 0.9)=0.0866756 dNonCentralStudent(0.2, 1.4, 0.1)=0.0966703 dNonCentralStudent(0.2, 1.4, 0.3)=0.137274 dNonCentralStudent(0.2, 1.4, 0.5)=0.150602 dNonCentralStudent(0.2, 1.4, 0.7)=0.142532 dNonCentralStudent(0.2, 1.4, 0.9)=0.127164 dNonCentralStudent(0.2, 2.6, 0.1)=0.0116755 dNonCentralStudent(0.2, 2.6, 0.3)=0.0335846 dNonCentralStudent(0.2, 2.6, 0.5)=0.0655722 dNonCentralStudent(0.2, 2.6, 0.7)=0.0888641 dNonCentralStudent(0.2, 2.6, 0.9)=0.0981329 dNonCentralStudent(0.2, 3.8, 0.1)=0.000346153 dNonCentralStudent(0.2, 3.8, 0.3)=0.00271108 dNonCentralStudent(0.2, 3.8, 0.5)=0.0132314 dNonCentralStudent(0.2, 3.8, 0.7)=0.0321665 dNonCentralStudent(0.2, 3.8, 0.9)=0.050349 dNonCentralStudent(0.2, 5, 0.1)=2.53101e-06 dNonCentralStudent(0.2, 5, 0.3)=7.65629e-05 dNonCentralStudent(0.2, 5, 0.5)=0.00134722 dNonCentralStudent(0.2, 5, 0.7)=0.0073899 dNonCentralStudent(0.2, 5, 0.9)=0.0187694 dNonCentralStudent(1.4, 0.2, 0.1)=0.335629 dNonCentralStudent(1.4, 0.2, 0.3)=0.328809 dNonCentralStudent(1.4, 0.2, 0.5)=0.303097 dNonCentralStudent(1.4, 0.2, 0.7)=0.266567 dNonCentralStudent(1.4, 0.2, 0.9)=0.2272 dNonCentralStudent(1.4, 1.4, 0.1)=0.148486 dNonCentralStudent(1.4, 1.4, 0.3)=0.195381 dNonCentralStudent(1.4, 1.4, 0.5)=0.239006 dNonCentralStudent(1.4, 1.4, 0.7)=0.270636 dNonCentralStudent(1.4, 1.4, 0.9)=0.285726 dNonCentralStudent(1.4, 2.6, 0.1)=0.0156377 dNonCentralStudent(1.4, 2.6, 0.3)=0.0287285 dNonCentralStudent(1.4, 2.6, 0.5)=0.0501795 dNonCentralStudent(1.4, 2.6, 0.7)=0.0803627 dNonCentralStudent(1.4, 2.6, 0.9)=0.116083 dNonCentralStudent(1.4, 3.8, 0.1)=0.000392098 dNonCentralStudent(1.4, 3.8, 0.3)=0.00104998 dNonCentralStudent(1.4, 3.8, 0.5)=0.00285531 dNonCentralStudent(1.4, 3.8, 0.7)=0.00725525 dNonCentralStudent(1.4, 3.8, 0.9)=0.0162246 dNonCentralStudent(1.4, 5, 0.1)=2.34115e-06 dNonCentralStudent(1.4, 5, 0.3)=9.58171e-06 dNonCentralStudent(1.4, 5, 0.5)=4.47804e-05 dNonCentralStudent(1.4, 5, 0.7)=0.000205981 dNonCentralStudent(1.4, 5, 0.9)=0.000820326 dNonCentralStudent(2.6, 0.2, 0.1)=0.361327 dNonCentralStudent(2.6, 0.2, 0.3)=0.357305 dNonCentralStudent(2.6, 0.2, 0.5)=0.335366 dNonCentralStudent(2.6, 0.2, 0.7)=0.300818 dNonCentralStudent(2.6, 0.2, 0.9)=0.260202 dNonCentralStudent(2.6, 1.4, 0.1)=0.158077 dNonCentralStudent(2.6, 1.4, 0.3)=0.204925 dNonCentralStudent(2.6, 1.4, 0.5)=0.250973 dNonCentralStudent(2.6, 1.4, 0.7)=0.28925 dNonCentralStudent(2.6, 1.4, 0.9)=0.314223 dNonCentralStudent(2.6, 2.6, 0.1)=0.0164281 dNonCentralStudent(2.6, 2.6, 0.3)=0.028521 dNonCentralStudent(2.6, 2.6, 0.5)=0.0475146 dNonCentralStudent(2.6, 2.6, 0.7)=0.074528 dNonCentralStudent(2.6, 2.6, 0.9)=0.108753 dNonCentralStudent(2.6, 3.8, 0.1)=0.000405584 dNonCentralStudent(2.6, 3.8, 0.3)=0.000964692 dNonCentralStudent(2.6, 3.8, 0.5)=0.00229004 dNonCentralStudent(2.6, 3.8, 0.7)=0.00522396 dNonCentralStudent(2.6, 3.8, 0.9)=0.0110853 dNonCentralStudent(2.6, 5, 0.1)=2.37889e-06 dNonCentralStudent(2.6, 5, 0.3)=7.94166e-06 dNonCentralStudent(2.6, 5, 0.5)=2.82718e-05 dNonCentralStudent(2.6, 5, 0.7)=0.00010105 dNonCentralStudent(2.6, 5, 0.9)=0.00034112 dNonCentralStudent(3.8, 0.2, 0.1)=0.371953 dNonCentralStudent(3.8, 0.2, 0.3)=0.369098 dNonCentralStudent(3.8, 0.2, 0.5)=0.348898 dNonCentralStudent(3.8, 0.2, 0.7)=0.315562 dNonCentralStudent(3.8, 0.2, 0.9)=0.274808 dNonCentralStudent(3.8, 1.4, 0.1)=0.162044 dNonCentralStudent(3.8, 1.4, 0.3)=0.208819 dNonCentralStudent(3.8, 1.4, 0.5)=0.255655 dNonCentralStudent(3.8, 1.4, 0.7)=0.296458 dNonCentralStudent(3.8, 1.4, 0.9)=0.325742 dNonCentralStudent(3.8, 2.6, 0.1)=0.0167564 dNonCentralStudent(3.8, 2.6, 0.3)=0.028458 dNonCentralStudent(3.8, 2.6, 0.5)=0.0464552 dNonCentralStudent(3.8, 2.6, 0.7)=0.0719742 dNonCentralStudent(3.8, 2.6, 0.9)=0.104918 dNonCentralStudent(3.8, 3.8, 0.1)=0.000411285 dNonCentralStudent(3.8, 3.8, 0.3)=0.000934893 dNonCentralStudent(3.8, 3.8, 0.5)=0.00209997 dNonCentralStudent(3.8, 3.8, 0.7)=0.0045517 dNonCentralStudent(3.8, 3.8, 0.9)=0.00932118 dNonCentralStudent(3.8, 5, 0.1)=2.39627e-06 dNonCentralStudent(3.8, 5, 0.3)=7.40896e-06 dNonCentralStudent(3.8, 5, 0.5)=2.36895e-05 dNonCentralStudent(3.8, 5, 0.7)=7.55621e-05 dNonCentralStudent(3.8, 5, 0.9)=0.000231695 dNonCentralStudent(5, 0.2, 0.1)=0.377722 dNonCentralStudent(5, 0.2, 0.3)=0.375509 dNonCentralStudent(5, 0.2, 0.5)=0.356303 dNonCentralStudent(5, 0.2, 0.7)=0.323737 dNonCentralStudent(5, 0.2, 0.9)=0.283025 dNonCentralStudent(5, 1.4, 0.1)=0.164197 dNonCentralStudent(5, 1.4, 0.3)=0.21092 dNonCentralStudent(5, 1.4, 0.5)=0.258135 dNonCentralStudent(5, 1.4, 0.7)=0.300249 dNonCentralStudent(5, 1.4, 0.9)=0.33192 dNonCentralStudent(5, 2.6, 0.1)=0.0169347 dNonCentralStudent(5, 2.6, 0.3)=0.028427 dNonCentralStudent(5, 2.6, 0.5)=0.0458856 dNonCentralStudent(5, 2.6, 0.7)=0.0705534 dNonCentralStudent(5, 2.6, 0.9)=0.102642 dNonCentralStudent(5, 3.8, 0.1)=0.000414397 dNonCentralStudent(5, 3.8, 0.3)=0.0009197 dNonCentralStudent(5, 3.8, 0.5)=0.00200509 dNonCentralStudent(5, 3.8, 0.7)=0.00422102 dNonCentralStudent(5, 3.8, 0.9)=0.00844907 dNonCentralStudent(5, 5, 0.1)=2.40597e-06 dNonCentralStudent(5, 5, 0.3)=7.1458e-06 dNonCentralStudent(5, 5, 0.5)=2.15797e-05 dNonCentralStudent(5, 5, 0.7)=6.46041e-05 dNonCentralStudent(5, 5, 0.9)=0.000186833 pNonCentralStudent(0.2, 0.2, 0.1)=0.440296, complementary=0.559704 pNonCentralStudent(0.2, 0.2, 0.3)=0.477478, complementary=0.522522 pNonCentralStudent(0.2, 0.2, 0.5)=0.508294, complementary=0.491706 pNonCentralStudent(0.2, 0.2, 0.7)=0.532613, complementary=0.467387 pNonCentralStudent(0.2, 0.2, 0.9)=0.551948, complementary=0.448052 pNonCentralStudent(0.2, 1.4, 0.1)=0.0892746, complementary=0.910725 pNonCentralStudent(0.2, 1.4, 0.3)=0.112986, complementary=0.887014 pNonCentralStudent(0.2, 1.4, 0.5)=0.142259, complementary=0.857741 pNonCentralStudent(0.2, 1.4, 0.7)=0.171793, complementary=0.828207 pNonCentralStudent(0.2, 1.4, 0.9)=0.198805, complementary=0.801195 pNonCentralStudent(0.2, 2.6, 0.1)=0.00555527, complementary=0.994445 pNonCentralStudent(0.2, 2.6, 0.3)=0.00979229, complementary=0.990208 pNonCentralStudent(0.2, 2.6, 0.5)=0.0197091, complementary=0.980291 pNonCentralStudent(0.2, 2.6, 0.7)=0.0353949, complementary=0.964605 pNonCentralStudent(0.2, 2.6, 0.9)=0.0542989, complementary=0.945701 pNonCentralStudent(0.2, 3.8, 0.1)=9.50467e-05, complementary=0.999905 pNonCentralStudent(0.2, 3.8, 0.3)=0.000325614, complementary=0.999674 pNonCentralStudent(0.2, 3.8, 0.5)=0.00173766, complementary=0.998262 pNonCentralStudent(0.2, 3.8, 0.7)=0.00620761, complementary=0.993792 pNonCentralStudent(0.2, 3.8, 0.9)=0.0145399, complementary=0.98546 pNonCentralStudent(0.2, 5, 0.1)=4.26665e-07, complementary=1 pNonCentralStudent(0.2, 5, 0.3)=4.66282e-06, complementary=0.999995 pNonCentralStudent(0.2, 5, 0.5)=0.000101887, complementary=0.999898 pNonCentralStudent(0.2, 5, 0.7)=0.000870284, complementary=0.99913 pNonCentralStudent(0.2, 5, 0.9)=0.00342707, complementary=0.996573 pNonCentralStudent(1.4, 0.2, 0.1)=0.454099, complementary=0.545901 pNonCentralStudent(1.4, 0.2, 0.3)=0.520907, complementary=0.479093 pNonCentralStudent(1.4, 0.2, 0.5)=0.584352, complementary=0.415648 pNonCentralStudent(1.4, 0.2, 0.7)=0.641426, complementary=0.358574 pNonCentralStudent(1.4, 0.2, 0.9)=0.690797, complementary=0.309203 pNonCentralStudent(1.4, 1.4, 0.1)=0.0944955, complementary=0.905505 pNonCentralStudent(1.4, 1.4, 0.3)=0.128858, complementary=0.871142 pNonCentralStudent(1.4, 1.4, 0.5)=0.172431, complementary=0.827569 pNonCentralStudent(1.4, 1.4, 0.7)=0.22365, complementary=0.77635 pNonCentralStudent(1.4, 1.4, 0.9)=0.27957, complementary=0.72043 pNonCentralStudent(1.4, 2.6, 0.1)=0.0060064, complementary=0.993994 pNonCentralStudent(1.4, 2.6, 0.3)=0.0103213, complementary=0.989679 pNonCentralStudent(1.4, 2.6, 0.5)=0.0180598, complementary=0.98194 pNonCentralStudent(1.4, 2.6, 0.7)=0.030984, complementary=0.969016 pNonCentralStudent(1.4, 2.6, 0.9)=0.0505803, complementary=0.94942 pNonCentralStudent(1.4, 3.8, 0.1)=0.000103669, complementary=0.999896 pNonCentralStudent(1.4, 3.8, 0.3)=0.000236638, complementary=0.999763 pNonCentralStudent(1.4, 3.8, 0.5)=0.000598423, complementary=0.999402 pNonCentralStudent(1.4, 3.8, 0.7)=0.00155027, complementary=0.99845 pNonCentralStudent(1.4, 3.8, 0.9)=0.00380628, complementary=0.996194 pNonCentralStudent(1.4, 5, 0.1)=4.60098e-07, complementary=1 pNonCentralStudent(1.4, 5, 0.3)=1.47182e-06, complementary=0.999999 pNonCentralStudent(1.4, 5, 0.5)=6.01639e-06, complementary=0.999994 pNonCentralStudent(1.4, 5, 0.7)=2.73021e-05, complementary=0.999973 pNonCentralStudent(1.4, 5, 0.9)=0.000117596, complementary=0.999882 pNonCentralStudent(2.6, 0.2, 0.1)=0.456644, complementary=0.543356 pNonCentralStudent(2.6, 0.2, 0.3)=0.528833, complementary=0.471167 pNonCentralStudent(2.6, 0.2, 0.5)=0.598363, complementary=0.401637 pNonCentralStudent(2.6, 0.2, 0.7)=0.662136, complementary=0.337864 pNonCentralStudent(2.6, 0.2, 0.9)=0.718288, complementary=0.281712 pNonCentralStudent(2.6, 1.4, 0.1)=0.0954614, complementary=0.904539 pNonCentralStudent(2.6, 1.4, 0.3)=0.131719, complementary=0.868281 pNonCentralStudent(2.6, 1.4, 0.5)=0.177381, complementary=0.822619 pNonCentralStudent(2.6, 1.4, 0.7)=0.231587, complementary=0.768413 pNonCentralStudent(2.6, 1.4, 0.9)=0.292186, complementary=0.707814 pNonCentralStudent(2.6, 2.6, 0.1)=0.00609152, complementary=0.993908 pNonCentralStudent(2.6, 2.6, 0.3)=0.0104869, complementary=0.989513 pNonCentralStudent(2.6, 2.6, 0.5)=0.0179617, complementary=0.982038 pNonCentralStudent(2.6, 2.6, 0.7)=0.0300318, complementary=0.969968 pNonCentralStudent(2.6, 2.6, 0.9)=0.0482592, complementary=0.951741 pNonCentralStudent(2.6, 3.8, 0.1)=0.000105395, complementary=0.999895 pNonCentralStudent(2.6, 3.8, 0.3)=0.000234275, complementary=0.999766 pNonCentralStudent(2.6, 3.8, 0.5)=0.000541433, complementary=0.999459 pNonCentralStudent(2.6, 3.8, 0.7)=0.00125638, complementary=0.998744 pNonCentralStudent(2.6, 3.8, 0.9)=0.00282554, complementary=0.997174 pNonCentralStudent(2.6, 5, 0.1)=4.68022e-07, complementary=1 pNonCentralStudent(2.6, 5, 0.3)=1.38425e-06, complementary=0.999999 pNonCentralStudent(2.6, 5, 0.5)=4.57751e-06, complementary=0.999995 pNonCentralStudent(2.6, 5, 0.7)=1.60321e-05, complementary=0.999984 pNonCentralStudent(2.6, 5, 0.9)=5.5772e-05, complementary=0.999944 pNonCentralStudent(3.8, 0.2, 0.1)=0.457696, complementary=0.542304 pNonCentralStudent(3.8, 0.2, 0.3)=0.532111, complementary=0.467889 pNonCentralStudent(3.8, 0.2, 0.5)=0.604172, complementary=0.395828 pNonCentralStudent(3.8, 0.2, 0.7)=0.670791, complementary=0.329209 pNonCentralStudent(3.8, 0.2, 0.9)=0.729903, complementary=0.270097 pNonCentralStudent(3.8, 1.4, 0.1)=0.0958609, complementary=0.904139 pNonCentralStudent(3.8, 1.4, 0.3)=0.132899, complementary=0.867101 pNonCentralStudent(3.8, 1.4, 0.5)=0.179395, complementary=0.820605 pNonCentralStudent(3.8, 1.4, 0.7)=0.234758, complementary=0.765242 pNonCentralStudent(3.8, 1.4, 0.9)=0.297205, complementary=0.702795 pNonCentralStudent(3.8, 2.6, 0.1)=0.00612677, complementary=0.993873 pNonCentralStudent(3.8, 2.6, 0.3)=0.0105573, complementary=0.989443 pNonCentralStudent(3.8, 2.6, 0.5)=0.0179307, complementary=0.982069 pNonCentralStudent(3.8, 2.6, 0.7)=0.0296439, complementary=0.970356 pNonCentralStudent(3.8, 2.6, 0.9)=0.0472198, complementary=0.95278 pNonCentralStudent(3.8, 3.8, 0.1)=0.000106112, complementary=0.999894 pNonCentralStudent(3.8, 3.8, 0.3)=0.000233646, complementary=0.999766 pNonCentralStudent(3.8, 3.8, 0.5)=0.000522164, complementary=0.999478 pNonCentralStudent(3.8, 3.8, 0.7)=0.00115851, complementary=0.998841 pNonCentralStudent(3.8, 3.8, 0.9)=0.00249658, complementary=0.997503 pNonCentralStudent(3.8, 5, 0.1)=4.71341e-07, complementary=1 pNonCentralStudent(3.8, 5, 0.3)=1.35595e-06, complementary=0.999999 pNonCentralStudent(3.8, 5, 0.5)=4.1537e-06, complementary=0.999996 pNonCentralStudent(3.8, 5, 0.7)=1.3114e-05, complementary=0.999987 pNonCentralStudent(3.8, 5, 0.9)=4.11142e-05, complementary=0.999959 pNonCentralStudent(5, 0.2, 0.1)=0.458268, complementary=0.541732 pNonCentralStudent(5, 0.2, 0.3)=0.53389, complementary=0.46611 pNonCentralStudent(5, 0.2, 0.5)=0.607332, complementary=0.392668 pNonCentralStudent(5, 0.2, 0.7)=0.675517, complementary=0.324483 pNonCentralStudent(5, 0.2, 0.9)=0.736284, complementary=0.263716 pNonCentralStudent(5, 1.4, 0.1)=0.0960778, complementary=0.903922 pNonCentralStudent(5, 1.4, 0.3)=0.133539, complementary=0.866461 pNonCentralStudent(5, 1.4, 0.5)=0.180481, complementary=0.819519 pNonCentralStudent(5, 1.4, 0.7)=0.236453, complementary=0.763547 pNonCentralStudent(5, 1.4, 0.9)=0.299881, complementary=0.700119 pNonCentralStudent(5, 2.6, 0.1)=0.00614591, complementary=0.993854 pNonCentralStudent(5, 2.6, 0.3)=0.0105958, complementary=0.989404 pNonCentralStudent(5, 2.6, 0.5)=0.0179152, complementary=0.982085 pNonCentralStudent(5, 2.6, 0.7)=0.029433, complementary=0.970567 pNonCentralStudent(5, 2.6, 0.9)=0.046635, complementary=0.953365 pNonCentralStudent(5, 3.8, 0.1)=0.000106501, complementary=0.999893 pNonCentralStudent(5, 3.8, 0.3)=0.000233365, complementary=0.999767 pNonCentralStudent(5, 3.8, 0.5)=0.000512502, complementary=0.999487 pNonCentralStudent(5, 3.8, 0.7)=0.00111001, complementary=0.99889 pNonCentralStudent(5, 3.8, 0.9)=0.00233429, complementary=0.997666 pNonCentralStudent(5, 5, 0.1)=4.73149e-07, complementary=1 pNonCentralStudent(5, 5, 0.3)=1.34199e-06, complementary=0.999999 pNonCentralStudent(5, 5, 0.5)=3.95309e-06, complementary=0.999996 pNonCentralStudent(5, 5, 0.7)=1.18148e-05, complementary=0.999988 pNonCentralStudent(5, 5, 0.9)=3.49242e-05, complementary=0.999965 rNonCentralStudent(0.2, 0.2)=9934.8 rNonCentralStudent(0.2, 0.2)=777147 rNonCentralStudent(0.2, 0.2)=-0.135759 rNonCentralStudent(0.2, 0.2)=21.7255 rNonCentralStudent(0.2, 0.2)=-2527.19 rNonCentralStudent(0.2, 1.4)=3.78141 rNonCentralStudent(0.2, 1.4)=0.717253 rNonCentralStudent(0.2, 1.4)=197250 rNonCentralStudent(0.2, 1.4)=23.9483 rNonCentralStudent(0.2, 1.4)=6.81175 rNonCentralStudent(0.2, 2.6)=2.49802 rNonCentralStudent(0.2, 2.6)=17.6081 rNonCentralStudent(0.2, 2.6)=5.09369 rNonCentralStudent(0.2, 2.6)=8.87474 rNonCentralStudent(0.2, 2.6)=141.296 rNonCentralStudent(0.2, 3.8)=1.64729 rNonCentralStudent(0.2, 3.8)=19.8836 rNonCentralStudent(0.2, 3.8)=12146.3 rNonCentralStudent(0.2, 3.8)=5.31691 rNonCentralStudent(0.2, 3.8)=1923.69 rNonCentralStudent(0.2, 5)=5.22208 rNonCentralStudent(0.2, 5)=7.04668 rNonCentralStudent(0.2, 5)=110.327 rNonCentralStudent(0.2, 5)=16.924 rNonCentralStudent(0.2, 5)=8.58818 rNonCentralStudent(1.4, 0.2)=-5.57995 rNonCentralStudent(1.4, 0.2)=2.9374 rNonCentralStudent(1.4, 0.2)=-0.833079 rNonCentralStudent(1.4, 0.2)=-0.392505 rNonCentralStudent(1.4, 0.2)=0.0715501 rNonCentralStudent(1.4, 1.4)=0.781103 rNonCentralStudent(1.4, 1.4)=3.18001 rNonCentralStudent(1.4, 1.4)=6.70006 rNonCentralStudent(1.4, 1.4)=1.13151 rNonCentralStudent(1.4, 1.4)=52.0542 rNonCentralStudent(1.4, 2.6)=5.20717 rNonCentralStudent(1.4, 2.6)=2.87432 rNonCentralStudent(1.4, 2.6)=2.04453 rNonCentralStudent(1.4, 2.6)=6.24137 rNonCentralStudent(1.4, 2.6)=3.05677 rNonCentralStudent(1.4, 3.8)=2.84277 rNonCentralStudent(1.4, 3.8)=0.846181 rNonCentralStudent(1.4, 3.8)=1.97535 rNonCentralStudent(1.4, 3.8)=7.66042 rNonCentralStudent(1.4, 3.8)=7.6798 rNonCentralStudent(1.4, 5)=29.7351 rNonCentralStudent(1.4, 5)=6.75319 rNonCentralStudent(1.4, 5)=97.5129 rNonCentralStudent(1.4, 5)=37.6912 rNonCentralStudent(1.4, 5)=8.98728 rNonCentralStudent(2.6, 0.2)=-0.838138 rNonCentralStudent(2.6, 0.2)=0.196618 rNonCentralStudent(2.6, 0.2)=4.72526 rNonCentralStudent(2.6, 0.2)=0.398024 rNonCentralStudent(2.6, 0.2)=0.353525 rNonCentralStudent(2.6, 1.4)=1.85205 rNonCentralStudent(2.6, 1.4)=2.80567 rNonCentralStudent(2.6, 1.4)=0.922602 rNonCentralStudent(2.6, 1.4)=3.37366 rNonCentralStudent(2.6, 1.4)=0.942145 rNonCentralStudent(2.6, 2.6)=10.9561 rNonCentralStudent(2.6, 2.6)=0.965111 rNonCentralStudent(2.6, 2.6)=5.18197 rNonCentralStudent(2.6, 2.6)=5.11594 rNonCentralStudent(2.6, 2.6)=3.36479 rNonCentralStudent(2.6, 3.8)=5.47612 rNonCentralStudent(2.6, 3.8)=2.66678 rNonCentralStudent(2.6, 3.8)=10.553 rNonCentralStudent(2.6, 3.8)=8.50958 rNonCentralStudent(2.6, 3.8)=14.7761 rNonCentralStudent(2.6, 5)=3.29199 rNonCentralStudent(2.6, 5)=6.40479 rNonCentralStudent(2.6, 5)=8.76698 rNonCentralStudent(2.6, 5)=7.18538 rNonCentralStudent(2.6, 5)=9.77094 rNonCentralStudent(3.8, 0.2)=2.31629 rNonCentralStudent(3.8, 0.2)=-0.157768 rNonCentralStudent(3.8, 0.2)=4.96538 rNonCentralStudent(3.8, 0.2)=1.3264 rNonCentralStudent(3.8, 0.2)=0.218784 rNonCentralStudent(3.8, 1.4)=2.10245 rNonCentralStudent(3.8, 1.4)=1.49228 rNonCentralStudent(3.8, 1.4)=4.98706 rNonCentralStudent(3.8, 1.4)=0.544448 rNonCentralStudent(3.8, 1.4)=1.36688 rNonCentralStudent(3.8, 2.6)=4.18523 rNonCentralStudent(3.8, 2.6)=4.51351 rNonCentralStudent(3.8, 2.6)=2.53294 rNonCentralStudent(3.8, 2.6)=2.06967 rNonCentralStudent(3.8, 2.6)=2.04626 rNonCentralStudent(3.8, 3.8)=3.04623 rNonCentralStudent(3.8, 3.8)=4.06596 rNonCentralStudent(3.8, 3.8)=4.01627 rNonCentralStudent(3.8, 3.8)=1.6563 rNonCentralStudent(3.8, 3.8)=7.38507 rNonCentralStudent(3.8, 5)=5.57045 rNonCentralStudent(3.8, 5)=5.58475 rNonCentralStudent(3.8, 5)=4.46189 rNonCentralStudent(3.8, 5)=6.44042 rNonCentralStudent(3.8, 5)=6.56722 rNonCentralStudent(5, 0.2)=0.145208 rNonCentralStudent(5, 0.2)=0.625313 rNonCentralStudent(5, 0.2)=1.14924 rNonCentralStudent(5, 0.2)=1.33753 rNonCentralStudent(5, 0.2)=0.794765 rNonCentralStudent(5, 1.4)=0.449776 rNonCentralStudent(5, 1.4)=1.36769 rNonCentralStudent(5, 1.4)=2.70149 rNonCentralStudent(5, 1.4)=-0.661426 rNonCentralStudent(5, 1.4)=1.53251 rNonCentralStudent(5, 2.6)=2.20857 rNonCentralStudent(5, 2.6)=2.17065 rNonCentralStudent(5, 2.6)=0.956197 rNonCentralStudent(5, 2.6)=1.76901 rNonCentralStudent(5, 2.6)=2.99356 rNonCentralStudent(5, 3.8)=4.15438 rNonCentralStudent(5, 3.8)=7.95548 rNonCentralStudent(5, 3.8)=2.75046 rNonCentralStudent(5, 3.8)=13.348 rNonCentralStudent(5, 3.8)=2.76854 rNonCentralStudent(5, 5)=3.89296 rNonCentralStudent(5, 5)=5.7349 rNonCentralStudent(5, 5)=3.11155 rNonCentralStudent(5, 5)=9.62167 rNonCentralStudent(5, 5)=4.25349 openturns-1.9/lib/test/t_DistFunc_normal.cxx000066400000000000000000000042541307543307100213130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Normal related functions { // pNormal Scalar xMin = 0.1; Scalar xMax = 0.9; UnsignedInteger nX = 10; for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pNormal(" << x << ")=" << DistFunc::pNormal(x) << ", complementary=" << DistFunc::pNormal(x, true) << std::endl; } } // pNormal { // qNormal Scalar qMin = 0.1; Scalar qMax = 0.9; UnsignedInteger nQ = 10; for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qNormal(" << q << ")=" << DistFunc::qNormal(q) << ", complementary=" << DistFunc::qNormal(q, true) << std::endl; } } // qNormal { // rNormal UnsignedInteger nR = 10; for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rNormal()=" << DistFunc::rNormal() << std::endl; } } // rNormal } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_normal.expout000066400000000000000000000022501307543307100220270ustar00rootroot00000000000000pNormal(0.1)=0.539828, complementary=0.460172 pNormal(0.188889)=0.57491, complementary=0.42509 pNormal(0.277778)=0.609409, complementary=0.390591 pNormal(0.366667)=0.643066, complementary=0.356934 pNormal(0.455556)=0.675645, complementary=0.324355 pNormal(0.544444)=0.706932, complementary=0.293068 pNormal(0.633333)=0.736742, complementary=0.263258 pNormal(0.722222)=0.764921, complementary=0.235079 pNormal(0.811111)=0.791349, complementary=0.208651 pNormal(0.9)=0.81594, complementary=0.18406 qNormal(0.1)=-1.28155, complementary=1.28155 qNormal(0.188889)=-0.881998, complementary=0.881998 qNormal(0.277778)=-0.589456, complementary=0.589456 qNormal(0.366667)=-0.340695, complementary=0.340695 qNormal(0.455556)=-0.111637, complementary=0.111637 qNormal(0.544444)=0.111637, complementary=-0.111637 qNormal(0.633333)=0.340695, complementary=-0.340695 qNormal(0.722222)=0.589456, complementary=-0.589456 qNormal(0.811111)=0.881998, complementary=-0.881998 qNormal(0.9)=1.28155, complementary=-1.28155 rNormal()=0.608202 rNormal()=-1.26617 rNormal()=-0.438266 rNormal()=1.20548 rNormal()=-2.18139 rNormal()=0.350042 rNormal()=-0.355007 rNormal()=1.43725 rNormal()=0.810668 rNormal()=0.793156 openturns-1.9/lib/test/t_DistFunc_poisson.cxx000066400000000000000000000033011307543307100215050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Poisson related functions { // rPoisson Scalar lambdaMin = 0.2; Scalar lambdaMax = 5.0; UnsignedInteger n1 = 5; UnsignedInteger nR = 5; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar lambda = lambdaMin + (lambdaMax - lambdaMin) * i1 / (n1 - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rPoisson(" << lambda << ")=" << DistFunc::rPoisson(lambda) << std::endl; } } } // rPoisson } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_poisson.expout000066400000000000000000000006061307543307100222340ustar00rootroot00000000000000rPoisson(0.2)=0 rPoisson(0.2)=1 rPoisson(0.2)=0 rPoisson(0.2)=0 rPoisson(0.2)=0 rPoisson(1.4)=4 rPoisson(1.4)=3 rPoisson(1.4)=1 rPoisson(1.4)=0 rPoisson(1.4)=1 rPoisson(2.6)=3 rPoisson(2.6)=2 rPoisson(2.6)=2 rPoisson(2.6)=4 rPoisson(2.6)=5 rPoisson(3.8)=3 rPoisson(3.8)=7 rPoisson(3.8)=6 rPoisson(3.8)=5 rPoisson(3.8)=6 rPoisson(5)=4 rPoisson(5)=9 rPoisson(5)=5 rPoisson(5)=3 rPoisson(5)=2 openturns-1.9/lib/test/t_DistFunc_student.cxx000066400000000000000000000115351307543307100215110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistFunc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Student related functions { // pStudent Scalar nuMin = 0.2; Scalar nuMax = 100.0; UnsignedInteger n1 = 10; Scalar xMin = -10.0; Scalar xMax = 10.0; UnsignedInteger nX = 20; // First, the special cases: small integer nu for (UnsignedInteger nu = 1; nu <= 7; ++nu) { for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pStudent(" << nu << ", " << x << ")=" << DistFunc::pStudent(nu, x) << ", complementary=" << DistFunc::pStudent(nu, x, true) << std::endl; } } // Second, the general case: medium real nu for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pStudent(" << nu << ", " << x << ")=" << DistFunc::pStudent(nu, x) << ", complementary=" << DistFunc::pStudent(nu, x, true) << std::endl; } } // Third, the extreme case: large real nu Scalar logNuMin = 9.0; Scalar logNuMax = 9.0; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = exp(logNuMin + (logNuMax - logNuMin) * i1 / (n1 - 1)); for (UnsignedInteger iX = 0; iX < nX; ++iX) { Scalar x = xMin + (xMax - xMin) * iX / (nX - 1); fullprint << "pStudent(" << nu << ", " << x << ")=" << DistFunc::pStudent(nu, x) << ", complementary=" << DistFunc::pStudent(nu, x, true) << std::endl; } } } // pStudent { // qStudent Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; Scalar qMin = 0.1; Scalar qMax = 0.9; UnsignedInteger nQ = 10; // First, the special cases: small integer nu for (UnsignedInteger nu = 1; nu <= 6; ++nu) { for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qStudent(" << nu << ", " << q << ")=" << DistFunc::qStudent(nu, q) << ", complementary=" << DistFunc::qStudent(nu, q, true) << std::endl; } } // Second, the general case: medium real nu for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qStudent(" << nu << ", " << q << ")=" << DistFunc::qStudent(nu, q) << ", complementary=" << DistFunc::qStudent(nu, q, true) << std::endl; } } // Third, the extreme case: large real nu Scalar logNuMin = 9.0; Scalar logNuMax = 12.0; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = exp(logNuMin + (logNuMax - logNuMin) * i1 / (n1 - 1)); for (UnsignedInteger iQ = 0; iQ < nQ; ++iQ) { Scalar q = qMin + (qMax - qMin) * iQ / (nQ - 1); fullprint << "qStudent(" << nu << ", " << q << ")=" << DistFunc::qStudent(nu, q) << ", complementary=" << DistFunc::qStudent(nu, q, true) << std::endl; } } } // qStudent { // rStudent Scalar nuMin = 0.2; Scalar nuMax = 5.0; UnsignedInteger n1 = 5; UnsignedInteger nR = 10; for (UnsignedInteger i1 = 0; i1 < n1; ++i1) { Scalar nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1); for (UnsignedInteger iR = 0; iR < nR; ++iR) { fullprint << "rStudent(" << nu << ")=" << DistFunc::rStudent(nu) << std::endl; } } } // rStudent } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistFunc_student.expout000066400000000000000000001207101307543307100222270ustar00rootroot00000000000000pStudent(1, -10)=0.0317255, complementary=0.968274 pStudent(1, -8.94737)=0.0354288, complementary=0.964571 pStudent(1, -7.89474)=0.0401057, complementary=0.959894 pStudent(1, -6.84211)=0.0461951, complementary=0.953805 pStudent(1, -5.78947)=0.0544436, complementary=0.945556 pStudent(1, -4.73684)=0.0662263, complementary=0.933774 pStudent(1, -3.68421)=0.0843658, complementary=0.915634 pStudent(1, -2.63158)=0.115593, complementary=0.884407 pStudent(1, -1.57895)=0.179708, complementary=0.820292 pStudent(1, -0.526316)=0.345786, complementary=0.654214 pStudent(1, 0.526316)=0.654214, complementary=0.345786 pStudent(1, 1.57895)=0.820292, complementary=0.179708 pStudent(1, 2.63158)=0.884407, complementary=0.115593 pStudent(1, 3.68421)=0.915634, complementary=0.0843658 pStudent(1, 4.73684)=0.933774, complementary=0.0662263 pStudent(1, 5.78947)=0.945556, complementary=0.0544436 pStudent(1, 6.84211)=0.953805, complementary=0.0461951 pStudent(1, 7.89474)=0.959894, complementary=0.0401057 pStudent(1, 8.94737)=0.964571, complementary=0.0354288 pStudent(1, 10)=0.968274, complementary=0.0317255 pStudent(2, -10)=0.00492623, complementary=0.995074 pStudent(2, -8.94737)=0.00613103, complementary=0.993869 pStudent(2, -7.89474)=0.00783418, complementary=0.992166 pStudent(2, -6.84211)=0.01035, complementary=0.98965 pStudent(2, -5.78947)=0.0142813, complementary=0.985719 pStudent(2, -4.73684)=0.0208969, complementary=0.979103 pStudent(2, -3.68421)=0.0332088, complementary=0.966791 pStudent(2, -2.63158)=0.0595696, complementary=0.94043 pStudent(2, -1.57895)=0.127552, complementary=0.872448 pStudent(2, -0.526316)=0.325605, complementary=0.674395 pStudent(2, 0.526316)=0.674395, complementary=0.325605 pStudent(2, 1.57895)=0.872448, complementary=0.127552 pStudent(2, 2.63158)=0.94043, complementary=0.0595696 pStudent(2, 3.68421)=0.966791, complementary=0.0332088 pStudent(2, 4.73684)=0.979103, complementary=0.0208969 pStudent(2, 5.78947)=0.985719, complementary=0.0142813 pStudent(2, 6.84211)=0.98965, complementary=0.01035 pStudent(2, 7.89474)=0.992166, complementary=0.00783418 pStudent(2, 8.94737)=0.993869, complementary=0.00613103 pStudent(2, 10)=0.995074, complementary=0.00492623 pStudent(3, -10)=0.0010642, complementary=0.998936 pStudent(3, -8.94737)=0.00147286, complementary=0.998527 pStudent(3, -7.89474)=0.00211785, complementary=0.997882 pStudent(3, -6.84211)=0.0031948, complementary=0.996805 pStudent(3, -5.78947)=0.00512554, complementary=0.994874 pStudent(3, -4.73684)=0.00891948, complementary=0.991081 pStudent(3, -3.68421)=0.0173278, complementary=0.982672 pStudent(3, -2.63158)=0.0391095, complementary=0.960891 pStudent(3, -1.57895)=0.106233, complementary=0.893767 pStudent(3, -0.526316)=0.31755, complementary=0.68245 pStudent(3, 0.526316)=0.68245, complementary=0.31755 pStudent(3, 1.57895)=0.893767, complementary=0.106233 pStudent(3, 2.63158)=0.960891, complementary=0.0391095 pStudent(3, 3.68421)=0.982672, complementary=0.0173278 pStudent(3, 4.73684)=0.991081, complementary=0.00891948 pStudent(3, 5.78947)=0.994874, complementary=0.00512554 pStudent(3, 6.84211)=0.996805, complementary=0.0031948 pStudent(3, 7.89474)=0.997882, complementary=0.00211785 pStudent(3, 8.94737)=0.998527, complementary=0.00147286 pStudent(3, 10)=0.998936, complementary=0.0010642 pStudent(4, -10)=0.000281002, complementary=0.999719 pStudent(4, -8.94737)=0.000431531, complementary=0.999568 pStudent(4, -7.89474)=0.000696127, complementary=0.999304 pStudent(4, -6.84211)=0.00119375, complementary=0.998806 pStudent(4, -5.78947)=0.00221192, complementary=0.997788 pStudent(4, -4.73684)=0.00452913, complementary=0.995471 pStudent(4, -3.68421)=0.0105629, complementary=0.989437 pStudent(4, -2.63158)=0.029045, complementary=0.970955 pStudent(4, -1.57895)=0.0947463, complementary=0.905254 pStudent(4, -0.526316)=0.313251, complementary=0.686749 pStudent(4, 0.526316)=0.686749, complementary=0.313251 pStudent(4, 1.57895)=0.905254, complementary=0.0947463 pStudent(4, 2.63158)=0.970955, complementary=0.029045 pStudent(4, 3.68421)=0.989437, complementary=0.0105629 pStudent(4, 4.73684)=0.995471, complementary=0.00452913 pStudent(4, 5.78947)=0.997788, complementary=0.00221192 pStudent(4, 6.84211)=0.998806, complementary=0.00119375 pStudent(4, 7.89474)=0.999304, complementary=0.000696127 pStudent(4, 8.94737)=0.999568, complementary=0.000431531 pStudent(4, 10)=0.999719, complementary=0.000281002 pStudent(5, -10)=8.54738e-05, complementary=0.999915 pStudent(5, -8.94737)=0.000145332, complementary=0.999855 pStudent(5, -7.89474)=0.000262231, complementary=0.999738 pStudent(5, -6.84211)=0.000509019, complementary=0.999491 pStudent(5, -5.78947)=0.00108241, complementary=0.998918 pStudent(5, -4.73684)=0.00258228, complementary=0.997418 pStudent(5, -3.68421)=0.00711555, complementary=0.992884 pStudent(5, -2.63158)=0.0232224, complementary=0.976778 pStudent(5, -1.57895)=0.0875907, complementary=0.912409 pStudent(5, -0.526316)=0.310586, complementary=0.689414 pStudent(5, 0.526316)=0.689414, complementary=0.310586 pStudent(5, 1.57895)=0.912409, complementary=0.0875907 pStudent(5, 2.63158)=0.976778, complementary=0.0232224 pStudent(5, 3.68421)=0.992884, complementary=0.00711555 pStudent(5, 4.73684)=0.997418, complementary=0.00258228 pStudent(5, 5.78947)=0.998918, complementary=0.00108241 pStudent(5, 6.84211)=0.999491, complementary=0.000509019 pStudent(5, 7.89474)=0.999738, complementary=0.000262231 pStudent(5, 8.94737)=0.999855, complementary=0.000145332 pStudent(5, 10)=0.999915, complementary=8.54738e-05 pStudent(6, -10)=2.89599e-05, complementary=0.999971 pStudent(6, -8.94737)=5.44045e-05, complementary=0.999946 pStudent(6, -7.89474)=0.000109483, complementary=0.999891 pStudent(6, -6.84211)=0.000239578, complementary=0.99976 pStudent(6, -5.78947)=0.000581187, complementary=0.999419 pStudent(6, -4.73684)=0.00160092, complementary=0.998399 pStudent(6, -3.68421)=0.00513957, complementary=0.99486 pStudent(6, -2.63158)=0.0194886, complementary=0.980511 pStudent(6, -1.57895)=0.0827134, complementary=0.917287 pStudent(6, -0.526316)=0.308774, complementary=0.691226 pStudent(6, 0.526316)=0.691226, complementary=0.308774 pStudent(6, 1.57895)=0.917287, complementary=0.0827134 pStudent(6, 2.63158)=0.980511, complementary=0.0194886 pStudent(6, 3.68421)=0.99486, complementary=0.00513957 pStudent(6, 4.73684)=0.998399, complementary=0.00160092 pStudent(6, 5.78947)=0.999419, complementary=0.000581187 pStudent(6, 6.84211)=0.99976, complementary=0.000239578 pStudent(6, 7.89474)=0.999891, complementary=0.000109483 pStudent(6, 8.94737)=0.999946, complementary=5.44045e-05 pStudent(6, 10)=0.999971, complementary=2.89599e-05 pStudent(7, -10)=1.06971e-05, complementary=0.999989 pStudent(7, -8.94737)=2.21575e-05, complementary=0.999978 pStudent(7, -7.89474)=4.95918e-05, complementary=0.99995 pStudent(7, -6.84211)=0.000121862, complementary=0.999878 pStudent(7, -5.78947)=0.000335359, complementary=0.999665 pStudent(7, -4.73684)=0.00105782, complementary=0.998942 pStudent(7, -3.68421)=0.00390805, complementary=0.996092 pStudent(7, -2.63158)=0.0169174, complementary=0.983083 pStudent(7, -1.57895)=0.0791787, complementary=0.920821 pStudent(7, -0.526316)=0.307464, complementary=0.692536 pStudent(7, 0.526316)=0.692536, complementary=0.307464 pStudent(7, 1.57895)=0.920821, complementary=0.0791787 pStudent(7, 2.63158)=0.983083, complementary=0.0169174 pStudent(7, 3.68421)=0.996092, complementary=0.00390805 pStudent(7, 4.73684)=0.998942, complementary=0.00105782 pStudent(7, 5.78947)=0.999665, complementary=0.000335359 pStudent(7, 6.84211)=0.999878, complementary=0.000121862 pStudent(7, 7.89474)=0.99995, complementary=4.95918e-05 pStudent(7, 8.94737)=0.999978, complementary=2.21575e-05 pStudent(7, 10)=0.999989, complementary=1.06971e-05 pStudent(0.2, -10)=0.237171, complementary=0.762829 pStudent(0.2, -8.94737)=0.242499, complementary=0.757501 pStudent(0.2, -7.89474)=0.248636, complementary=0.751364 pStudent(0.2, -6.84211)=0.25584, complementary=0.74416 pStudent(0.2, -5.78947)=0.264508, complementary=0.735492 pStudent(0.2, -4.73684)=0.275296, complementary=0.724704 pStudent(0.2, -3.68421)=0.289396, complementary=0.710604 pStudent(0.2, -2.63158)=0.309306, complementary=0.690694 pStudent(0.2, -1.57895)=0.341658, complementary=0.658342 pStudent(0.2, -0.526316)=0.414222, complementary=0.585778 pStudent(0.2, 0.526316)=0.585778, complementary=0.414222 pStudent(0.2, 1.57895)=0.658342, complementary=0.341658 pStudent(0.2, 2.63158)=0.690694, complementary=0.309306 pStudent(0.2, 3.68421)=0.710604, complementary=0.289396 pStudent(0.2, 4.73684)=0.724704, complementary=0.275296 pStudent(0.2, 5.78947)=0.735492, complementary=0.264508 pStudent(0.2, 6.84211)=0.74416, complementary=0.25584 pStudent(0.2, 7.89474)=0.751364, complementary=0.248636 pStudent(0.2, 8.94737)=0.757501, complementary=0.242499 pStudent(0.2, 10)=0.762829, complementary=0.237171 pStudent(11.2889, -10)=2.98626e-07, complementary=1 pStudent(11.2889, -8.94737)=9.20003e-07, complementary=0.999999 pStudent(11.2889, -7.89474)=3.15492e-06, complementary=0.999997 pStudent(11.2889, -6.84211)=1.22459e-05, complementary=0.999988 pStudent(11.2889, -5.78947)=5.47333e-05, complementary=0.999945 pStudent(11.2889, -4.73684)=0.000285278, complementary=0.999715 pStudent(11.2889, -3.68421)=0.00172483, complementary=0.998275 pStudent(11.2889, -2.63158)=0.0114496, complementary=0.98855 pStudent(11.2889, -1.57895)=0.0709707, complementary=0.929029 pStudent(11.2889, -0.526316)=0.304427, complementary=0.695573 pStudent(11.2889, 0.526316)=0.695573, complementary=0.304427 pStudent(11.2889, 1.57895)=0.929029, complementary=0.0709707 pStudent(11.2889, 2.63158)=0.98855, complementary=0.0114496 pStudent(11.2889, 3.68421)=0.998275, complementary=0.00172483 pStudent(11.2889, 4.73684)=0.999715, complementary=0.000285278 pStudent(11.2889, 5.78947)=0.999945, complementary=5.47333e-05 pStudent(11.2889, 6.84211)=0.999988, complementary=1.22459e-05 pStudent(11.2889, 7.89474)=0.999997, complementary=3.15492e-06 pStudent(11.2889, 8.94737)=0.999999, complementary=9.20003e-07 pStudent(11.2889, 10)=1, complementary=2.98626e-07 pStudent(22.3778, -10)=5.06963e-10, complementary=1 pStudent(22.3778, -8.94737)=3.78595e-09, complementary=1 pStudent(22.3778, -7.89474)=3.26126e-08, complementary=1 pStudent(22.3778, -6.84211)=3.25525e-07, complementary=1 pStudent(22.3778, -5.78947)=3.73849e-06, complementary=0.999996 pStudent(22.3778, -4.73684)=4.79005e-05, complementary=0.999952 pStudent(22.3778, -3.68421)=0.000635509, complementary=0.999364 pStudent(22.3778, -2.63158)=0.0075564, complementary=0.992444 pStudent(22.3778, -1.57895)=0.0641904, complementary=0.93581 pStudent(22.3778, -0.526316)=0.301923, complementary=0.698077 pStudent(22.3778, 0.526316)=0.698077, complementary=0.301923 pStudent(22.3778, 1.57895)=0.93581, complementary=0.0641904 pStudent(22.3778, 2.63158)=0.992444, complementary=0.0075564 pStudent(22.3778, 3.68421)=0.999364, complementary=0.000635509 pStudent(22.3778, 4.73684)=0.999952, complementary=4.79005e-05 pStudent(22.3778, 5.78947)=0.999996, complementary=3.73849e-06 pStudent(22.3778, 6.84211)=1, complementary=3.25525e-07 pStudent(22.3778, 7.89474)=1, complementary=3.26126e-08 pStudent(22.3778, 8.94737)=1, complementary=3.78595e-09 pStudent(22.3778, 10)=1, complementary=5.06963e-10 pStudent(33.4667, -10)=6.93924e-12, complementary=1 pStudent(33.4667, -8.94737)=1.07084e-10, complementary=1 pStudent(33.4667, -7.89474)=1.90469e-09, complementary=1 pStudent(33.4667, -6.84211)=3.84968e-08, complementary=1 pStudent(33.4667, -5.78947)=8.53877e-07, complementary=0.999999 pStudent(33.4667, -4.73684)=1.94143e-05, complementary=0.999981 pStudent(33.4667, -3.68421)=0.000402513, complementary=0.999597 pStudent(33.4667, -2.63158)=0.00637845, complementary=0.993622 pStudent(33.4667, -1.57895)=0.0618774, complementary=0.938123 pStudent(33.4667, -0.526316)=0.30107, complementary=0.69893 pStudent(33.4667, 0.526316)=0.69893, complementary=0.30107 pStudent(33.4667, 1.57895)=0.938123, complementary=0.0618774 pStudent(33.4667, 2.63158)=0.993622, complementary=0.00637845 pStudent(33.4667, 3.68421)=0.999597, complementary=0.000402513 pStudent(33.4667, 4.73684)=0.999981, complementary=1.94143e-05 pStudent(33.4667, 5.78947)=0.999999, complementary=8.53877e-07 pStudent(33.4667, 6.84211)=1, complementary=3.84968e-08 pStudent(33.4667, 7.89474)=1, complementary=1.90469e-09 pStudent(33.4667, 8.94737)=1, complementary=1.07084e-10 pStudent(33.4667, 10)=1, complementary=6.93924e-12 pStudent(44.5556, -10)=2.90448e-13, complementary=1 pStudent(44.5556, -8.94737)=8.21461e-12, complementary=1 pStudent(44.5556, -7.89474)=2.62448e-10, complementary=1 pStudent(44.5556, -6.84211)=9.16808e-09, complementary=1 pStudent(44.5556, -5.78947)=3.30423e-07, complementary=1 pStudent(44.5556, -4.73684)=1.11834e-05, complementary=0.999989 pStudent(44.5556, -3.68421)=0.000309281, complementary=0.999691 pStudent(44.5556, -2.63158)=0.00581623, complementary=0.994184 pStudent(44.5556, -1.57895)=0.0607111, complementary=0.939289 pStudent(44.5556, -0.526316)=0.30064, complementary=0.69936 pStudent(44.5556, 0.526316)=0.69936, complementary=0.30064 pStudent(44.5556, 1.57895)=0.939289, complementary=0.0607111 pStudent(44.5556, 2.63158)=0.994184, complementary=0.00581623 pStudent(44.5556, 3.68421)=0.999691, complementary=0.000309281 pStudent(44.5556, 4.73684)=0.999989, complementary=1.11834e-05 pStudent(44.5556, 5.78947)=1, complementary=3.30423e-07 pStudent(44.5556, 6.84211)=1, complementary=9.16808e-09 pStudent(44.5556, 7.89474)=1, complementary=2.62448e-10 pStudent(44.5556, 8.94737)=1, complementary=8.21461e-12 pStudent(44.5556, 10)=1, complementary=2.90448e-13 pStudent(55.6444, -10)=2.45302e-14, complementary=1 pStudent(55.6444, -8.94737)=1.15922e-12, complementary=1 pStudent(55.6444, -7.89474)=6.00338e-11, complementary=1 pStudent(55.6444, -6.84211)=3.24596e-09, complementary=1 pStudent(55.6444, -5.78947)=1.69854e-07, complementary=1 pStudent(55.6444, -4.73684)=7.70019e-06, complementary=0.999992 pStudent(55.6444, -3.68421)=0.000260464, complementary=0.99974 pStudent(55.6444, -2.63158)=0.00548806, complementary=0.994512 pStudent(55.6444, -1.57895)=0.0600083, complementary=0.939992 pStudent(55.6444, -0.526316)=0.30038, complementary=0.69962 pStudent(55.6444, 0.526316)=0.69962, complementary=0.30038 pStudent(55.6444, 1.57895)=0.939992, complementary=0.0600083 pStudent(55.6444, 2.63158)=0.994512, complementary=0.00548806 pStudent(55.6444, 3.68421)=0.99974, complementary=0.000260464 pStudent(55.6444, 4.73684)=0.999992, complementary=7.70019e-06 pStudent(55.6444, 5.78947)=1, complementary=1.69854e-07 pStudent(55.6444, 6.84211)=1, complementary=3.24596e-09 pStudent(55.6444, 7.89474)=1, complementary=6.00338e-11 pStudent(55.6444, 8.94737)=1, complementary=1.15922e-12 pStudent(55.6444, 10)=1, complementary=2.45302e-14 pStudent(66.7333, -10)=3.34779e-15, complementary=1 pStudent(66.7333, -8.94737)=2.45791e-13, complementary=1 pStudent(66.7333, -7.89474)=1.90887e-11, complementary=1 pStudent(66.7333, -6.84211)=1.47469e-09, complementary=1 pStudent(66.7333, -5.78947)=1.03693e-07, complementary=1 pStudent(66.7333, -4.73684)=5.87992e-06, complementary=0.999994 pStudent(66.7333, -3.68421)=0.00023079, complementary=0.999769 pStudent(66.7333, -2.63158)=0.00527325, complementary=0.994727 pStudent(66.7333, -1.57895)=0.0595385, complementary=0.940462 pStudent(66.7333, -0.526316)=0.300207, complementary=0.699793 pStudent(66.7333, 0.526316)=0.699793, complementary=0.300207 pStudent(66.7333, 1.57895)=0.940462, complementary=0.0595385 pStudent(66.7333, 2.63158)=0.994727, complementary=0.00527325 pStudent(66.7333, 3.68421)=0.999769, complementary=0.00023079 pStudent(66.7333, 4.73684)=0.999994, complementary=5.87992e-06 pStudent(66.7333, 5.78947)=1, complementary=1.03693e-07 pStudent(66.7333, 6.84211)=1, complementary=1.47469e-09 pStudent(66.7333, 7.89474)=1, complementary=1.90887e-11 pStudent(66.7333, 8.94737)=1, complementary=2.45791e-13 pStudent(66.7333, 10)=1, complementary=3.34779e-15 pStudent(77.8222, -10)=6.46107e-16, complementary=1 pStudent(77.8222, -8.94737)=6.95239e-14, complementary=1 pStudent(77.8222, -7.89474)=7.62251e-12, complementary=1 pStudent(77.8222, -6.84211)=7.92521e-10, complementary=1 pStudent(77.8222, -5.78947)=7.08342e-08, complementary=1 pStudent(77.8222, -4.73684)=4.794e-06, complementary=0.999995 pStudent(77.8222, -3.68421)=0.000210966, complementary=0.999789 pStudent(77.8222, -2.63158)=0.0051218, complementary=0.994878 pStudent(77.8222, -1.57895)=0.0592022, complementary=0.940798 pStudent(77.8222, -0.526316)=0.300083, complementary=0.699917 pStudent(77.8222, 0.526316)=0.699917, complementary=0.300083 pStudent(77.8222, 1.57895)=0.940798, complementary=0.0592022 pStudent(77.8222, 2.63158)=0.994878, complementary=0.0051218 pStudent(77.8222, 3.68421)=0.999789, complementary=0.000210966 pStudent(77.8222, 4.73684)=0.999995, complementary=4.794e-06 pStudent(77.8222, 5.78947)=1, complementary=7.08342e-08 pStudent(77.8222, 6.84211)=1, complementary=7.92521e-10 pStudent(77.8222, 7.89474)=1, complementary=7.62251e-12 pStudent(77.8222, 8.94737)=1, complementary=6.95239e-14 pStudent(77.8222, 10)=1, complementary=6.46107e-16 pStudent(88.9111, -10)=1.61741e-16, complementary=1 pStudent(88.9111, -8.94737)=2.43259e-14, complementary=1 pStudent(88.9111, -7.89474)=3.58939e-12, complementary=1 pStudent(88.9111, -6.84211)=4.79703e-10, complementary=1 pStudent(88.9111, -5.78947)=5.22982e-08, complementary=1 pStudent(88.9111, -4.73684)=4.08512e-06, complementary=0.999996 pStudent(88.9111, -3.68421)=0.000196833, complementary=0.999803 pStudent(88.9111, -2.63158)=0.00500932, complementary=0.994991 pStudent(88.9111, -1.57895)=0.0589497, complementary=0.94105 pStudent(88.9111, -0.526316)=0.29999, complementary=0.70001 pStudent(88.9111, 0.526316)=0.70001, complementary=0.29999 pStudent(88.9111, 1.57895)=0.94105, complementary=0.0589497 pStudent(88.9111, 2.63158)=0.994991, complementary=0.00500932 pStudent(88.9111, 3.68421)=0.999803, complementary=0.000196833 pStudent(88.9111, 4.73684)=0.999996, complementary=4.08512e-06 pStudent(88.9111, 5.78947)=1, complementary=5.22982e-08 pStudent(88.9111, 6.84211)=1, complementary=4.79703e-10 pStudent(88.9111, 7.89474)=1, complementary=3.58939e-12 pStudent(88.9111, 8.94737)=1, complementary=2.43259e-14 pStudent(88.9111, 10)=1, complementary=1.61741e-16 pStudent(100, -10)=4.95084e-17, complementary=1 pStudent(100, -8.94737)=1.00082e-14, complementary=1 pStudent(100, -7.89474)=1.91238e-12, complementary=1 pStudent(100, -6.84211)=3.16895e-10, complementary=1 pStudent(100, -5.78947)=4.08378e-08, complementary=1 pStudent(100, -4.73684)=3.59138e-06, complementary=0.999996 pStudent(100, -3.68421)=0.000186271, complementary=0.999814 pStudent(100, -2.63158)=0.00492249, complementary=0.995078 pStudent(100, -1.57895)=0.0587531, complementary=0.941247 pStudent(100, -0.526316)=0.299917, complementary=0.700083 pStudent(100, 0.526316)=0.700083, complementary=0.299917 pStudent(100, 1.57895)=0.941247, complementary=0.0587531 pStudent(100, 2.63158)=0.995078, complementary=0.00492249 pStudent(100, 3.68421)=0.999814, complementary=0.000186271 pStudent(100, 4.73684)=0.999996, complementary=3.59138e-06 pStudent(100, 5.78947)=1, complementary=4.08378e-08 pStudent(100, 6.84211)=1, complementary=3.16895e-10 pStudent(100, 7.89474)=1, complementary=1.91238e-12 pStudent(100, 8.94737)=1, complementary=1.00082e-14 pStudent(100, 10)=1, complementary=4.95084e-17 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 pStudent(8103.08, -10)=1.04111e-23, complementary=1 pStudent(8103.08, -8.94737)=2.22625e-19, complementary=1 pStudent(8103.08, -7.89474)=1.6451e-15, complementary=1 pStudent(8103.08, -6.84211)=4.18569e-12, complementary=1 pStudent(8103.08, -5.78947)=3.66199e-09, complementary=1 pStudent(8103.08, -4.73684)=1.10383e-06, complementary=0.999999 pStudent(8103.08, -3.68421)=0.000115454, complementary=0.999885 pStudent(8103.08, -2.63158)=0.00425751, complementary=0.995742 pStudent(8103.08, -1.57895)=0.0571936, complementary=0.942806 pStudent(8103.08, -0.526316)=0.299342, complementary=0.700658 pStudent(8103.08, 0.526316)=0.700658, complementary=0.299342 pStudent(8103.08, 1.57895)=0.942806, complementary=0.0571936 pStudent(8103.08, 2.63158)=0.995742, complementary=0.00425751 pStudent(8103.08, 3.68421)=0.999885, complementary=0.000115454 pStudent(8103.08, 4.73684)=0.999999, complementary=1.10383e-06 pStudent(8103.08, 5.78947)=1, complementary=3.66199e-09 pStudent(8103.08, 6.84211)=1, complementary=4.18569e-12 pStudent(8103.08, 7.89474)=1, complementary=1.6451e-15 pStudent(8103.08, 8.94737)=1, complementary=2.22625e-19 pStudent(8103.08, 10)=1, complementary=1.04111e-23 qStudent(1, 0.1)=-3.07768, complementary=3.07768 qStudent(1, 0.188889)=-1.48256, complementary=1.48256 qStudent(1, 0.277778)=-0.8391, complementary=0.8391 qStudent(1, 0.366667)=-0.445229, complementary=0.445229 qStudent(1, 0.455556)=-0.140541, complementary=0.140541 qStudent(1, 0.544444)=0.140541, complementary=-0.140541 qStudent(1, 0.633333)=0.445229, complementary=-0.445229 qStudent(1, 0.722222)=0.8391, complementary=-0.8391 qStudent(1, 0.811111)=1.48256, complementary=-1.48256 qStudent(1, 0.9)=3.07768, complementary=-3.07768 qStudent(2, 0.1)=-1.88562, complementary=1.88562 qStudent(2, 0.188889)=-1.12405, complementary=1.12405 qStudent(2, 0.277778)=-0.701646, complementary=0.701646 qStudent(2, 0.366667)=-0.391293, complementary=0.391293 qStudent(2, 0.455556)=-0.126207, complementary=0.126207 qStudent(2, 0.544444)=0.126207, complementary=-0.126207 qStudent(2, 0.633333)=0.391293, complementary=-0.391293 qStudent(2, 0.722222)=0.701646, complementary=-0.701646 qStudent(2, 0.811111)=1.12405, complementary=-1.12405 qStudent(2, 0.9)=1.88562, complementary=-1.88562 qStudent(3, 0.1)=-1.63774, complementary=1.63774 qStudent(3, 0.188889)=-1.03251, complementary=1.03251 qStudent(3, 0.277778)=-0.66151, complementary=0.66151 qStudent(3, 0.366667)=-0.37391, complementary=0.37391 qStudent(3, 0.455556)=-0.121315, complementary=0.121315 qStudent(3, 0.544444)=0.121315, complementary=-0.121315 qStudent(3, 0.633333)=0.37391, complementary=-0.37391 qStudent(3, 0.722222)=0.66151, complementary=-0.66151 qStudent(3, 0.811111)=1.03251, complementary=-1.03251 qStudent(3, 0.9)=1.63774, complementary=-1.63774 qStudent(4, 0.1)=-1.53321, complementary=1.53321 qStudent(4, 0.188889)=-0.99101, complementary=0.99101 qStudent(4, 0.277778)=-0.642445, complementary=0.642445 qStudent(4, 0.366667)=-0.365374, complementary=0.365374 qStudent(4, 0.455556)=-0.118867, complementary=0.118867 qStudent(4, 0.544444)=0.118867, complementary=-0.118867 qStudent(4, 0.633333)=0.365374, complementary=-0.365374 qStudent(4, 0.722222)=0.642445, complementary=-0.642445 qStudent(4, 0.811111)=0.99101, complementary=-0.99101 qStudent(4, 0.9)=1.53321, complementary=-1.53321 qStudent(5, 0.1)=-1.47588, complementary=1.47588 qStudent(5, 0.188889)=-0.967394, complementary=0.967394 qStudent(5, 0.277778)=-0.631332, complementary=0.631332 qStudent(5, 0.366667)=-0.360314, complementary=0.360314 qStudent(5, 0.455556)=-0.117403, complementary=0.117403 qStudent(5, 0.544444)=0.117403, complementary=-0.117403 qStudent(5, 0.633333)=0.360314, complementary=-0.360314 qStudent(5, 0.722222)=0.631332, complementary=-0.631332 qStudent(5, 0.811111)=0.967394, complementary=-0.967394 qStudent(5, 0.9)=1.47588, complementary=-1.47588 qStudent(6, 0.1)=-1.43976, complementary=1.43976 qStudent(6, 0.188889)=-0.952166, complementary=0.952166 qStudent(6, 0.277778)=-0.624062, complementary=0.624062 qStudent(6, 0.366667)=-0.35697, complementary=0.35697 qStudent(6, 0.455556)=-0.11643, complementary=0.11643 qStudent(6, 0.544444)=0.11643, complementary=-0.11643 qStudent(6, 0.633333)=0.35697, complementary=-0.35697 qStudent(6, 0.722222)=0.624062, complementary=-0.624062 qStudent(6, 0.811111)=0.952166, complementary=-0.952166 qStudent(6, 0.9)=1.43976, complementary=-1.43976 qStudent(0.2, 0.1)=-750.829, complementary=750.829 qStudent(0.2, 0.188889)=-31.2237, complementary=31.2237 qStudent(0.2, 0.277778)=-4.52796, complementary=4.52796 qStudent(0.2, 0.366667)=-1.0846, complementary=1.0846 qStudent(0.2, 0.455556)=-0.236812, complementary=0.236812 qStudent(0.2, 0.544444)=0.236812, complementary=-0.236812 qStudent(0.2, 0.633333)=1.0846, complementary=-1.0846 qStudent(0.2, 0.722222)=4.52796, complementary=-4.52796 qStudent(0.2, 0.811111)=31.2237, complementary=-31.2237 qStudent(0.2, 0.9)=750.829, complementary=-750.829 qStudent(1.4, 0.1)=-2.29897, complementary=2.29897 qStudent(1.4, 0.188889)=-1.26062, complementary=1.26062 qStudent(1.4, 0.277778)=-0.757262, complementary=0.757262 qStudent(1.4, 0.366667)=-0.414108, complementary=0.414108 qStudent(1.4, 0.455556)=-0.132431, complementary=0.132431 qStudent(1.4, 0.544444)=0.132431, complementary=-0.132431 qStudent(1.4, 0.633333)=0.414108, complementary=-0.414108 qStudent(1.4, 0.722222)=0.757262, complementary=-0.757262 qStudent(1.4, 0.811111)=1.26062, complementary=-1.26062 qStudent(1.4, 0.9)=2.29897, complementary=-2.29897 qStudent(2.6, 0.1)=-1.70816, complementary=1.70816 qStudent(2.6, 0.188889)=-1.05942, complementary=1.05942 qStudent(2.6, 0.277778)=-0.673575, complementary=0.673575 qStudent(2.6, 0.366667)=-0.379219, complementary=0.379219 qStudent(2.6, 0.455556)=-0.122822, complementary=0.122822 qStudent(2.6, 0.544444)=0.122822, complementary=-0.122822 qStudent(2.6, 0.633333)=0.379219, complementary=-0.379219 qStudent(2.6, 0.722222)=0.673575, complementary=-0.673575 qStudent(2.6, 0.811111)=1.05942, complementary=-1.05942 qStudent(2.6, 0.9)=1.70816, complementary=-1.70816 qStudent(3.8, 0.1)=-1.54894, complementary=1.54894 qStudent(3.8, 0.188889)=-0.997383, complementary=0.997383 qStudent(3.8, 0.277778)=-0.64541, complementary=0.64541 qStudent(3.8, 0.366667)=-0.366713, complementary=0.366713 qStudent(3.8, 0.455556)=-0.119253, complementary=0.119253 qStudent(3.8, 0.544444)=0.119253, complementary=-0.119253 qStudent(3.8, 0.633333)=0.366713, complementary=-0.366713 qStudent(3.8, 0.722222)=0.64541, complementary=-0.64541 qStudent(3.8, 0.811111)=0.997383, complementary=-0.997383 qStudent(3.8, 0.9)=1.54894, complementary=-1.54894 qStudent(5, 0.1)=-1.47588, complementary=1.47588 qStudent(5, 0.188889)=-0.967394, complementary=0.967394 qStudent(5, 0.277778)=-0.631332, complementary=0.631332 qStudent(5, 0.366667)=-0.360314, complementary=0.360314 qStudent(5, 0.455556)=-0.117403, complementary=0.117403 qStudent(5, 0.544444)=0.117403, complementary=-0.117403 qStudent(5, 0.633333)=0.360314, complementary=-0.360314 qStudent(5, 0.722222)=0.631332, complementary=-0.631332 qStudent(5, 0.811111)=0.967394, complementary=-0.967394 qStudent(5, 0.9)=1.47588, complementary=-1.47588 qStudent(8103.08, 0.1)=-1.28166, complementary=1.28166 qStudent(8103.08, 0.188889)=-0.882047, complementary=0.882047 qStudent(8103.08, 0.277778)=-0.58948, complementary=0.58948 qStudent(8103.08, 0.366667)=-0.340707, complementary=0.340707 qStudent(8103.08, 0.455556)=-0.111641, complementary=0.111641 qStudent(8103.08, 0.544444)=0.111641, complementary=-0.111641 qStudent(8103.08, 0.633333)=0.340707, complementary=-0.340707 qStudent(8103.08, 0.722222)=0.58948, complementary=-0.58948 qStudent(8103.08, 0.811111)=0.882047, complementary=-0.882047 qStudent(8103.08, 0.9)=1.28166, complementary=-1.28166 qStudent(17154.2, 0.1)=-1.2816, complementary=1.2816 qStudent(17154.2, 0.188889)=-0.882021, complementary=0.882021 qStudent(17154.2, 0.277778)=-0.589467, complementary=0.589467 qStudent(17154.2, 0.366667)=-0.3407, complementary=0.3407 qStudent(17154.2, 0.455556)=-0.111639, complementary=0.111639 qStudent(17154.2, 0.544444)=0.111639, complementary=-0.111639 qStudent(17154.2, 0.633333)=0.3407, complementary=-0.3407 qStudent(17154.2, 0.722222)=0.589467, complementary=-0.589467 qStudent(17154.2, 0.811111)=0.882021, complementary=-0.882021 qStudent(17154.2, 0.9)=1.2816, complementary=-1.2816 qStudent(36315.5, 0.1)=-1.28157, complementary=1.28157 qStudent(36315.5, 0.188889)=-0.882009, complementary=0.882009 qStudent(36315.5, 0.277778)=-0.589461, complementary=0.589461 qStudent(36315.5, 0.366667)=-0.340697, complementary=0.340697 qStudent(36315.5, 0.455556)=-0.111638, complementary=0.111638 qStudent(36315.5, 0.544444)=0.111638, complementary=-0.111638 qStudent(36315.5, 0.633333)=0.340697, complementary=-0.340697 qStudent(36315.5, 0.722222)=0.589461, complementary=-0.589461 qStudent(36315.5, 0.811111)=0.882009, complementary=-0.882009 qStudent(36315.5, 0.9)=1.28157, complementary=-1.28157 qStudent(76879.9, 0.1)=-1.28156, complementary=1.28156 qStudent(76879.9, 0.188889)=-0.882003, complementary=0.882003 qStudent(76879.9, 0.277778)=-0.589458, complementary=0.589458 qStudent(76879.9, 0.366667)=-0.340696, complementary=0.340696 qStudent(76879.9, 0.455556)=-0.111638, complementary=0.111638 qStudent(76879.9, 0.544444)=0.111638, complementary=-0.111638 qStudent(76879.9, 0.633333)=0.340696, complementary=-0.340696 qStudent(76879.9, 0.722222)=0.589458, complementary=-0.589458 qStudent(76879.9, 0.811111)=0.882003, complementary=-0.882003 qStudent(76879.9, 0.9)=1.28156, complementary=-1.28156 qStudent(162755, 0.1)=-1.28156, complementary=1.28156 qStudent(162755, 0.188889)=-0.882001, complementary=0.882001 qStudent(162755, 0.277778)=-0.589457, complementary=0.589457 qStudent(162755, 0.366667)=-0.340695, complementary=0.340695 qStudent(162755, 0.455556)=-0.111637, complementary=0.111637 qStudent(162755, 0.544444)=0.111637, complementary=-0.111637 qStudent(162755, 0.633333)=0.340695, complementary=-0.340695 qStudent(162755, 0.722222)=0.589457, complementary=-0.589457 qStudent(162755, 0.811111)=0.882001, complementary=-0.882001 qStudent(162755, 0.9)=1.28156, complementary=-1.28156 rStudent(0.2)=7476.31 rStudent(0.2)=666559 rStudent(0.2)=-0.310923 rStudent(0.2)=17.3504 rStudent(0.2)=-2769.01 rStudent(0.2)=-0.262211 rStudent(0.2)=-0.478461 rStudent(0.2)=47638.9 rStudent(0.2)=6.05369 rStudent(0.2)=3.81509 rStudent(1.4)=0.131632 rStudent(1.4)=-1.29869 rStudent(1.4)=0.679956 rStudent(1.4)=0.455992 rStudent(1.4)=-0.772744 rStudent(1.4)=0.184676 rStudent(1.4)=0.916568 rStudent(1.4)=1.23578 rStudent(1.4)=-1.7993 rStudent(1.4)=2.31455 rStudent(2.6)=-0.106989 rStudent(2.6)=-0.323672 rStudent(2.6)=-2.29613 rStudent(2.6)=-1.60233 rStudent(2.6)=0.507901 rStudent(2.6)=-2.79408 rStudent(2.6)=-0.823351 rStudent(2.6)=-0.851024 rStudent(2.6)=0.926106 rStudent(2.6)=-0.902698 rStudent(3.8)=2.05706 rStudent(3.8)=-2.89392 rStudent(3.8)=-0.0639838 rStudent(3.8)=-0.145949 rStudent(3.8)=-0.627063 rStudent(3.8)=3.52391 rStudent(3.8)=-2.73892 rStudent(3.8)=-0.239003 rStudent(3.8)=1.59404 rStudent(3.8)=-2.43636 rStudent(5)=-0.619784 rStudent(5)=-0.620556 rStudent(5)=-0.772649 rStudent(5)=1.24861 rStudent(5)=-0.151396 rStudent(5)=-0.700545 rStudent(5)=-1.79918 rStudent(5)=2.25695 rStudent(5)=-0.510679 rStudent(5)=-0.715766 openturns-1.9/lib/test/t_DistributionFactory_std.cxx000066400000000000000000000036331307543307100231050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class DistributionFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { fullprint << "Continuous univariate factories=" << DistributionFactory::GetContinuousUniVariateFactories() << std::endl; fullprint << "Continuous multivariate factories=" << DistributionFactory::GetContinuousMultiVariateFactories() << std::endl; fullprint << "Discrete univariate factories=" << DistributionFactory::GetDiscreteUniVariateFactories() << std::endl; fullprint << "Discrete multivariate factories=" << DistributionFactory::GetDiscreteMultiVariateFactories() << std::endl; fullprint << "Univariate factories=" << DistributionFactory::GetUniVariateFactories() << std::endl; fullprint << "Multivariate factories=" << DistributionFactory::GetMultiVariateFactories() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DistributionFactory_std.expout000066400000000000000000000035471307543307100236330ustar00rootroot00000000000000Continuous univariate factories=[ArcsineFactory,BetaFactory,BurrFactory,ChiFactory,ChiSquareFactory,DirichletFactory,ExponentialFactory,FisherSnedecorFactory,GammaFactory,GeneralizedParetoFactory,GumbelFactory,HistogramFactory,InverseNormalFactory,LaplaceFactory,LogisticFactory,LogNormalFactory,LogUniformFactory,MeixnerDistributionFactory,NormalFactory,RayleighFactory,RiceFactory,StudentFactory,TrapezoidalFactory,TriangularFactory,TruncatedNormalFactory,UniformFactory,WeibullFactory]#27 Continuous multivariate factories=[AliMikhailHaqCopulaFactory,ClaytonCopulaFactory,DirichletFactory,FarlieGumbelMorgensternCopulaFactory,FrankCopulaFactory,GumbelCopulaFactory,NormalCopulaFactory,NormalFactory,StudentFactory] Discrete univariate factories=[BernoulliFactory,BinomialFactory,DiracFactory,GeometricFactory,MultinomialFactory,NegativeBinomialFactory,PoissonFactory,UserDefinedFactory,SkellamFactory] Discrete multivariate factories=[DiracFactory,MultinomialFactory,UserDefinedFactory] Univariate factories=[ArcsineFactory,BetaFactory,BurrFactory,ChiFactory,ChiSquareFactory,DirichletFactory,ExponentialFactory,FisherSnedecorFactory,GammaFactory,GeneralizedParetoFactory,GumbelFactory,HistogramFactory,InverseNormalFactory,LaplaceFactory,LogisticFactory,LogNormalFactory,LogUniformFactory,MeixnerDistributionFactory,NormalFactory,RayleighFactory,RiceFactory,StudentFactory,TrapezoidalFactory,TriangularFactory,TruncatedNormalFactory,UniformFactory,WeibullFactory,BernoulliFactory,BinomialFactory,DiracFactory,GeometricFactory,MultinomialFactory,NegativeBinomialFactory,PoissonFactory,UserDefinedFactory,SkellamFactory]#36 Multivariate factories=[AliMikhailHaqCopulaFactory,ClaytonCopulaFactory,DirichletFactory,FarlieGumbelMorgensternCopulaFactory,FrankCopulaFactory,GumbelCopulaFactory,NormalCopulaFactory,NormalFactory,StudentFactory,DiracFactory,MultinomialFactory,UserDefinedFactory]#12 openturns-1.9/lib/test/t_Distribution_arithmetic.cxx000066400000000000000000000157771307543307100231300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // UnsignedInteger pointNumber(251); try { Normal dist1(1.0, 0.5); Graph graph; fullprint << "dist1:" << Distribution(dist1) << std::endl; Distribution result; result = dist1 + 2.0; fullprint << "dist1+2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_plus_2.png"); result = dist1 - 2.0; fullprint << "dist1-2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_moins_2.png"); result = dist1 * 2.0; fullprint << "dist1*2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_fois_2.png"); result = dist1 / 2.0; fullprint << "dist1/2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_div_2.png"); result = dist1.cos(); fullprint << "cos(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_cos.png"); result = dist1.sin(); fullprint << "sin(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_sin.png"); result = dist1.tan(); fullprint << "tan(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_tan.png"); Uniform dist0(-1.0, 1.0); result = dist0.acos(); fullprint << "acos(dist0):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist0_acos.png"); result = dist0.asin(); fullprint << "asin(dist0):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist0_asin.png"); result = dist0.atan(); fullprint << "atan(dist0):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist0_atan.png"); result = dist1.cosh(); fullprint << "cosh(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_cosh.png"); result = dist1.sinh(); fullprint << "sinh(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_sinh.png"); result = dist1.tanh(); fullprint << "tanh(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_tanh.png"); LogNormal distG1(1.0, 1.0, 1.0); result = distG1.acosh(); fullprint << "acosh(distG1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("distG1_acosh.png"); result = dist1.asinh(); fullprint << "asinh(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_asinh.png"); result = dist0.atanh(); fullprint << "atanh(dist0):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist0_atanh.png"); result = dist1.exp(); fullprint << "exp(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_exp.png"); result = distG1.log(); fullprint << "log(distG1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("distG1_log.png"); result = distG1.ln(); fullprint << "ln(distG1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("distG1_ln.png"); result = dist1.pow(SignedInteger(3)); fullprint << "dist1^3:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_pow.png"); result = distG1.pow(2.5); fullprint << "dist1^2.5:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("distG1_pow.png"); result = dist1.inverse(); UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(3); fullprint << "inverse(dist1):" << result << std::endl; PlatformInfo::SetNumericalPrecision(precision); // graph = result.drawPDF(1024); // graph.draw("dist1_inverse.png"); result = dist1.sqr(); fullprint << "sqr(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_sqr.png"); result = distG1.sqrt(); fullprint << "sqrt(distG1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("distG1_sqrt.png"); result = dist1.cbrt(); fullprint << "cbrt(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_cbrt.png"); result = dist1.abs(); fullprint << "abs(dist1):" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_abs.png"); Normal dist2(-2.0, 1.0); result = dist1 + dist2; fullprint << "dist1+dist2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_plus_dist2.png"); result = dist1 - dist2; fullprint << "dist1-dist2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_moins_dist2.png"); result = dist1 * dist2; fullprint << "dist1*dist2:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("dist1_fois_dist2.png"); result = dist1 / dist2; PlatformInfo::SetNumericalPrecision(3); fullprint << "dist1/dist2:" << result << std::endl; PlatformInfo::SetNumericalPrecision(precision); // graph = result.drawPDF(1024); // graph.draw("dist1_div_dist2.png"); result = LogNormal() * LogNormal(); fullprint << "logn*logn:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("logn_fois_logn.png"); result = LogUniform() * LogUniform(); fullprint << "logu*logu:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("logu_fois_logu.png"); result = LogUniform() * LogNormal(); fullprint << "logu*logn:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("logu_fois_logn.png"); result = LogNormal() * LogUniform(); fullprint << "logn*logu:" << result << std::endl; // graph = result.drawPDF(1024); // graph.draw("logn_fois_logu.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Distribution_arithmetic.expout000066400000000000000000001000031307543307100236230ustar00rootroot00000000000000dist1:class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] dist1+2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] dist1-2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] dist1*2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] dist1/2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0.5] sigma=class=Point name=Unnamed dimension=1 values=[0.25] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] cos(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cos(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cos(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cos(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=4 values=[-2.82531,0,3.14159,4.82531] values=class=Point name=Unnamed dimension=4 values=[-0.950399,1,-1,0.112685] probabilities=class=Point name=Unnamed dimension=4 values=[1e-14,0.0227501,0.999991,1] increasing=[1,0,1] sin(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=5 values=[-2.82531,-1.5708,1.5708,4.71239,4.82531] values=class=Point name=Unnamed dimension=5 values=[-0.311032,-1,1,-1,-0.993631] probabilities=class=Point name=Unnamed dimension=5 values=[1e-14,1.3621e-07,0.873188,1,1] increasing=[0,1,0,1] tan(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tan(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tan(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tan(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=8 values=[-2.82531,-1.5708,-1.5708,1.5708,1.5708,4.71239,4.71239,4.82531] values=class=Point name=Unnamed dimension=8 values=[0.327264,4.15834e+11,-4.15834e+11,4.15834e+11,-4.15834e+11,4.15834e+11,-4.15834e+11,-8.81776] probabilities=class=Point name=Unnamed dimension=8 values=[1e-14,1.3621e-07,1.3621e-07,0.873188,0.873188,1,1,1] increasing=[1,0,1,0,1,0,1] acos(dist0):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acos(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acos(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acos(x)] antecedent=class=Uniform name=Uniform dimension=1 a=-1 b=1 bounds=class=Point name=Unnamed dimension=2 values=[-1,1] values=class=Point name=Unnamed dimension=2 values=[3.14159,0] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[0] asin(dist0):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asin(x)] antecedent=class=Uniform name=Uniform dimension=1 a=-1 b=1 bounds=class=Point name=Unnamed dimension=2 values=[-1,1] values=class=Point name=Unnamed dimension=2 values=[-1.5708,1.5708] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] atan(dist0):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atan(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atan(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atan(x)] antecedent=class=Uniform name=Uniform dimension=1 a=-1 b=1 bounds=class=Point name=Unnamed dimension=2 values=[-1,1] values=class=Point name=Unnamed dimension=2 values=[-0.785398,0.785398] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] cosh(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cosh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cosh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cosh(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-2.82531,0,4.82531] values=class=Point name=Unnamed dimension=3 values=[8.46277,1,62.3168] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.0227501,1] increasing=[0,1] sinh(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sinh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sinh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sinh(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=2 values=[-2.82531,4.82531] values=class=Point name=Unnamed dimension=2 values=[-8.40348,62.3088] probabilities=class=Point name=Unnamed dimension=2 values=[1e-14,1] increasing=[1] tanh(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tanh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tanh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[tanh(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=2 values=[-2.82531,4.82531] values=class=Point name=Unnamed dimension=2 values=[-0.992994,0.999871] probabilities=class=Point name=Unnamed dimension=2 values=[1e-14,1] increasing=[1] acosh(distG1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acosh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acosh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[acosh(x)] antecedent=class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=1 gamma=1 bounds=class=Point name=Unnamed dimension=2 values=[1,5714.73] values=class=Point name=Unnamed dimension=2 values=[0,9.34395] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] asinh(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asinh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asinh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[asinh(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=2 values=[-2.82531,4.82531] values=class=Point name=Unnamed dimension=2 values=[-1.76171,2.27759] probabilities=class=Point name=Unnamed dimension=2 values=[1e-14,1] increasing=[1] atanh(dist0):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atanh(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atanh(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[atanh(x)] antecedent=class=Uniform name=Uniform dimension=1 a=-1 b=1 bounds=class=Point name=Unnamed dimension=2 values=[-1,1] values=class=Point name=Unnamed dimension=2 values=[-13.8155,13.8155] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] exp(dist1):class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=0.5 gamma=0 log(distG1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] antecedent=class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=1 gamma=1 bounds=class=Point name=Unnamed dimension=2 values=[1,5714.73] values=class=Point name=Unnamed dimension=2 values=[0,8.6508] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] ln(distG1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[log(x)] antecedent=class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=1 gamma=1 bounds=class=Point name=Unnamed dimension=2 values=[1,5714.73] values=class=Point name=Unnamed dimension=2 values=[0,8.6508] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] dist1^3:class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^3] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=2 values=[-2.82531,4.82531] values=class=Point name=Unnamed dimension=2 values=[-22.5528,112.351] probabilities=class=Point name=Unnamed dimension=2 values=[1e-14,1] increasing=[1] dist1^2.5:class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2.5] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2.5] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2.5] antecedent=class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=1 gamma=1 bounds=class=Point name=Unnamed dimension=2 values=[1,5714.73] values=class=Point name=Unnamed dimension=2 values=[1,2.46882e+09] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] inverse(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=4 values=[-2.83,0,0,4.83] values=class=Point name=Unnamed dimension=4 values=[0,-1.08e+11,1.08e+11,0] probabilities=class=Point name=Unnamed dimension=4 values=[1e-14,0.0228,0.0228,1] increasing=[0,1,0] sqr(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-2.82531,0,4.82531] values=class=Point name=Unnamed dimension=3 values=[7.9824,0,23.2837] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.0227501,1] increasing=[0,1] sqrt(distG1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sqrt(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sqrt(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sqrt(x)] antecedent=class=LogNormal name=LogNormal dimension=1 muLog=1 sigmaLog=1 gamma=1 bounds=class=Point name=Unnamed dimension=2 values=[1,5714.73] values=class=Point name=Unnamed dimension=2 values=[1,75.5959] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] cbrt(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cbrt(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cbrt(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[cbrt(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=2 values=[-2.82531,4.82531] values=class=Point name=Unnamed dimension=2 values=[-1.41369,1.68983] probabilities=class=Point name=Unnamed dimension=2 values=[1e-14,1] increasing=[1] abs(dist1):class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[abs(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[abs(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[abs(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-2.82531,0,4.82531] values=class=Point name=Unnamed dimension=3 values=[2.82531,0,4.82531] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.0227501,1] increasing=[0,1] dist1+dist2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-1] sigma=class=Point name=Unnamed dimension=1 values=[1.11803] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] dist1-dist2:class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.11803] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] dist1*dist2:class=ProductDistribution name=ProductDistribution left=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] right=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] dist1/dist2:class=ProductDistribution name=ProductDistribution left=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[0.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] right=class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1.0 / x] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=4 values=[-9.65,0,0,5.65] values=class=Point name=Unnamed dimension=4 values=[0,-5.4e+10,5.4e+10,0] probabilities=class=Point name=Unnamed dimension=4 values=[1e-14,0.977,0.977,1] increasing=[0,1,0] logn*logn:class=LogNormal name=LogNormal dimension=1 muLog=0 sigmaLog=1.41421 gamma=0 logu*logu:class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] antecedent=class=RandomMixture name=RandomMixture distribution collection=[class=Triangular name=Triangular dimension=1 a=-2 m=0 b=2] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] bounds=class=Point name=Unnamed dimension=2 values=[-2,2] values=class=Point name=Unnamed dimension=2 values=[0.135335,7.38906] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] logu*logn:class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] antecedent=class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=2 values=[1,1] constant=class=Point name=Unnamed dimension=1 values=[0] bounds=class=Point name=Unnamed dimension=2 values=[-8.65063,8.65063] values=class=Point name=Unnamed dimension=2 values=[0.000175017,5713.73] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] logn*logu:class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[exp(x)] antecedent=class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=2 values=[1,1] constant=class=Point name=Unnamed dimension=1 values=[0] bounds=class=Point name=Unnamed dimension=2 values=[-8.65063,8.65063] values=class=Point name=Unnamed dimension=2 values=[0.000175017,5713.73] probabilities=class=Point name=Unnamed dimension=2 values=[0,1] increasing=[1] openturns-1.9/lib/test/t_Distribution_draw.cxx000066400000000000000000000131521307543307100217150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // UnsignedInteger pointNumber(251); try { Normal dist1D(2.0, 4.0); Normal dist2D(Point(2, 2.0), Point(2, 4.0), CorrelationMatrix(2)); Normal distND(Point(5, 2.0), Point(5, 4.0), CorrelationMatrix(5)); // Check drawing methods for 1D distributions // PDF Graph graphPDF(dist1D.drawPDF()); graphPDF.draw("DefaultDrawPDF_1D.png"); graphPDF = dist1D.drawPDF(-4.0, 4.0, 101); graphPDF.draw("FullParametersDrawPDF_1D.png"); graphPDF = dist1D.drawPDF(-4.0, 4.0); graphPDF.draw("RangeDrawPDF_1D.png"); graphPDF = dist1D.drawPDF(101); graphPDF.draw("PointNumberDrawPDF_1D.png"); // log-PDF Graph graphLogPDF(dist1D.drawLogPDF()); graphLogPDF.draw("DefaultDrawLogPDF_1D.png"); graphLogPDF = dist1D.drawLogPDF(-4.0, 4.0, 101); graphLogPDF.draw("FullParametersDrawLogPDF_1D.png"); graphLogPDF = dist1D.drawLogPDF(-4.0, 4.0); graphLogPDF.draw("RangeDrawLogPDF_1D.png"); graphLogPDF = dist1D.drawLogPDF(101); graphLogPDF.draw("PointNumberDrawLogPDF_1D.png"); // CDF Graph graphCDF(dist1D.drawCDF()); graphCDF.draw("DefaultDrawCDF_1D.png"); graphCDF = dist1D.drawCDF(-4.0, 4.0, 101); graphCDF.draw("FullParametersDrawCDF_1D.png"); graphCDF = dist1D.drawCDF(-4.0, 4.0); graphCDF.draw("RangeDrawCDF_1D.png"); graphCDF = dist1D.drawCDF(101); graphCDF.draw("PointNumberDrawCDF_1D.png"); Graph graphQuantile(dist1D.drawQuantile()); graphQuantile.draw("DefaultDrawQuantile_1D.png"); graphQuantile = dist1D.drawQuantile(101); graphQuantile.draw("PointNumberDrawQuantile_1D.png"); graphQuantile = dist1D.drawQuantile(0.1, 0.9, 101); graphQuantile.draw("FullParameterDrawQuantile_1D.png"); graphQuantile = dist1D.drawQuantile(0.1, 0.9); graphQuantile.draw("RangeDrawQuantile_1D.png"); // Check drawing methods for 2D distributions // PDF graphPDF = dist2D.drawPDF(); graphPDF.draw("DefaultDrawPDF_2D.png"); graphPDF = dist2D.drawPDF(Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphPDF.draw("FullParametersDrawPDF_2D.png"); graphPDF = dist2D.drawPDF(Point(2, -4.0), Point(2, 4.0)); graphPDF.draw("RangeDrawPDF_2D.png"); graphPDF = dist2D.drawPDF(Indices(2, 101)); graphPDF.draw("PointNumberDrawPDF_2D.png"); // log-PDF graphLogPDF = dist2D.drawLogPDF(); graphLogPDF.draw("DefaultDrawLogPDF_2D.png"); graphLogPDF = dist2D.drawLogPDF(Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphLogPDF.draw("FullParametersDrawLogPDF_2D.png"); graphLogPDF = dist2D.drawPDF(Point(2, -4.0), Point(2, 4.0)); graphLogPDF.draw("RangeDrawLogPDF_2D.png"); graphLogPDF = dist2D.drawLogPDF(Indices(2, 101)); graphLogPDF.draw("PointNumberDrawLogPDF_2D.png"); // CDF graphCDF = dist2D.drawCDF(); graphCDF.draw("DefaultDrawCDF_2D.png"); graphCDF = dist2D.drawCDF(Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphCDF.draw("FullParametersDrawCDF_2D.png"); graphCDF = dist2D.drawCDF(Point(2, -4.0), Point(2, 4.0)); graphCDF.draw("RangeDrawCDF_2D.png"); graphCDF = dist2D.drawCDF(Indices(2, 101)); graphCDF.draw("PointNumberDrawCDF_2D.png"); // Check drawing methods for ND distributions // PDF graphPDF = distND.drawMarginal1DPDF(2, -4.0, 4.0, 101); graphPDF.draw("FullParametersDrawMarginal1DPDF_ND.png"); graphPDF = distND.drawMarginal2DPDF(2, 3, Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphPDF.draw("FullParametersDrawMarginal2DPDF_ND.png"); // log-PDF graphLogPDF = distND.drawMarginal1DLogPDF(2, -4.0, 4.0, 101); graphLogPDF.draw("FullParametersDrawMarginal1DLogPDF_ND.png"); graphLogPDF = distND.drawMarginal2DLogPDF(2, 3, Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphPDF.draw("FullParametersDrawMarginal2DLogPDF_ND.png"); // CDF graphCDF = distND.drawMarginal1DCDF(2, -4.0, 4.0, 101); graphCDF.draw("FullParametersDrawMarginal1DCDF_ND.png"); graphCDF = distND.drawMarginal2DCDF(2, 3, Point(2, -4.0), Point(2, 4.0), Indices(2, 101)); graphCDF.draw("FullParametersDrawMarginal2DCDF_ND.png"); // Quantile graphQuantile = dist2D.drawQuantile(); graphQuantile.draw("DefaultDrawQuantile_2D.png"); graphQuantile = dist2D.drawQuantile(101); graphQuantile.draw("PointNumberDrawQuantile_2D.png"); graphQuantile = dist2D.drawQuantile(0.1, 0.9, 101); graphQuantile.draw("FullParameterDrawQuantile_2D.png"); graphQuantile = dist2D.drawQuantile(0.1, 0.9); graphQuantile.draw("RangeDrawQuantile_2D.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Distribution_draw.expout000066400000000000000000000000001307543307100224230ustar00rootroot00000000000000openturns-1.9/lib/test/t_Domain_std.cxx000066400000000000000000000033621307543307100203040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Domain for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // The 1D interface UnsignedInteger dim = 2; Point a(dim, -1.0); Point b(dim, 2.0); Domain domain = Interval(a, b); Point p1(dim, 0.5); Point p2(dim, 2.5); fullprint << "Domain= " << domain << std::endl; // Accessors fullprint << "Dimension= " << domain.getDimension() << std::endl; // Contains fullprint << "is point " << p1 << " inside " << domain << "? " << (domain.contains(p1) ? "yes" : "no") << std::endl; fullprint << "is point " << p2 << " inside " << domain << "? " << (domain.contains(p2) ? "yes" : "no") << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Domain_std.expout000066400000000000000000000014621307543307100210250ustar00rootroot00000000000000Domain= class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] Dimension= 2 is point class=Point name=Unnamed dimension=2 values=[0.5,0.5] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1]? yes is point class=Point name=Unnamed dimension=2 values=[2.5,2.5] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1]? no openturns-1.9/lib/test/t_Drawable_std.cxx000066400000000000000000000044321307543307100206150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Drawable for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { fullprint << "Named colors=" << Drawable::GetValidColors() << std::endl; fullprint << "RGB colors (31, 63, 127)=" << Drawable::ConvertFromRGB(31UL, 63UL, 127UL) << std::endl; fullprint << "RGB colors (0.1, 0.2, 0.3)=" << Drawable::ConvertFromRGB(0.1, 0.2, 0.3) << std::endl; fullprint << "RGBA colors (31, 63, 127, 191)=" << Drawable::ConvertFromRGBA(31UL, 63UL, 127UL, 191UL) << std::endl; fullprint << "RGBA colors (0.1, 0.2, 0.3, 0.4)=" << Drawable::ConvertFromRGBA(0.1, 0.2, 0.3, 0.4) << std::endl; fullprint << "HSV colors (215.0, 0.2, 0.3)=" << Drawable::ConvertFromHSV(215.0, 0.2, 0.3) << std::endl; fullprint << "HSVA colors (215.0, 0.2, 0.3, 0.4)=" << Drawable::ConvertFromHSVA(215.0, 0.2, 0.3, 0.4) << std::endl; fullprint << "HSV (215.0, 0.2, 0.3) to RGB=" << Drawable::ConvertFromHSVIntoRGB(215.0, 0.2, 0.3) << std::endl; fullprint << "Line styles=" << Drawable::GetValidLineStyles() << std::endl; fullprint << "Point styles=" << Drawable::GetValidPointStyles() << std::endl; fullprint << "Fill styles=" << Drawable::GetValidFillStyles() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Drawable_std.expout000066400000000000000000000150231307543307100213350ustar00rootroot00000000000000Named colors=[aliceblue,antiquewhite,antiquewhite1,antiquewhite2,antiquewhite3,antiquewhite4,aquamarine,aquamarine1,aquamarine2,aquamarine3,aquamarine4,azure,azure1,azure2,azure3,azure4,beige,bisque,bisque1,bisque2,bisque3,bisque4,black,blanchedalmond,blue,blue1,blue2,blue3,blue4,blueviolet,brown,brown1,brown2,brown3,brown4,burlywood,burlywood1,burlywood2,burlywood3,burlywood4,cadetblue,cadetblue1,cadetblue2,cadetblue3,cadetblue4,chartreuse,chartreuse1,chartreuse2,chartreuse3,chartreuse4,chocolate,chocolate1,chocolate2,chocolate3,chocolate4,coral,coral1,coral2,coral3,coral4,cornflowerblue,cornsilk,cornsilk1,cornsilk2,cornsilk3,cornsilk4,cyan,cyan1,cyan2,cyan3,cyan4,darkblue,darkcyan,darkgoldenrod,darkgoldenrod1,darkgoldenrod2,darkgoldenrod3,darkgoldenrod4,darkgray,darkgreen,darkgrey,darkkhaki,darkmagenta,darkolivegreen,darkolivegreen1,darkolivegreen2,darkolivegreen3,darkolivegreen4,darkorange,darkorange1,darkorange2,darkorange3,darkorange4,darkorchid,darkorchid1,darkorchid2,darkorchid3,darkorchid4,darkred,darksalmon,darkseagreen,darkseagreen1,darkseagreen2,darkseagreen3,darkseagreen4,darkslateblue,darkslategray,darkslategray1,darkslategray2,darkslategray3,darkslategray4,darkslategrey,darkturquoise,darkviolet,deeppink,deeppink1,deeppink2,deeppink3,deeppink4,deepskyblue,deepskyblue1,deepskyblue2,deepskyblue3,deepskyblue4,dimgray,dimgrey,dodgerblue,dodgerblue1,dodgerblue2,dodgerblue3,dodgerblue4,firebrick,firebrick1,firebrick2,firebrick3,firebrick4,floralwhite,forestgreen,gainsboro,ghostwhite,gold,gold1,gold2,gold3,gold4,goldenrod,goldenrod1,goldenrod2,goldenrod3,goldenrod4,gray,gray0,gray1,gray10,gray100,gray11,gray12,gray13,gray14,gray15,gray16,gray17,gray18,gray19,gray2,gray20,gray21,gray22,gray23,gray24,gray25,gray26,gray27,gray28,gray29,gray3,gray30,gray31,gray32,gray33,gray34,gray35,gray36,gray37,gray38,gray39,gray4,gray40,gray41,gray42,gray43,gray44,gray45,gray46,gray47,gray48,gray49,gray5,gray50,gray51,gray52,gray53,gray54,gray55,gray56,gray57,gray58,gray59,gray6,gray60,gray61,gray62,gray63,gray64,gray65,gray66,gray67,gray68,gray69,gray7,gray70,gray71,gray72,gray73,gray74,gray75,gray76,gray77,gray78,gray79,gray8,gray80,gray81,gray82,gray83,gray84,gray85,gray86,gray87,gray88,gray89,gray9,gray90,gray91,gray92,gray93,gray94,gray95,gray96,gray97,gray98,gray99,green,green1,green2,green3,green4,greenyellow,grey,grey0,grey1,grey10,grey100,grey11,grey12,grey13,grey14,grey15,grey16,grey17,grey18,grey19,grey2,grey20,grey21,grey22,grey23,grey24,grey25,grey26,grey27,grey28,grey29,grey3,grey30,grey31,grey32,grey33,grey34,grey35,grey36,grey37,grey38,grey39,grey4,grey40,grey41,grey42,grey43,grey44,grey45,grey46,grey47,grey48,grey49,grey5,grey50,grey51,grey52,grey53,grey54,grey55,grey56,grey57,grey58,grey59,grey6,grey60,grey61,grey62,grey63,grey64,grey65,grey66,grey67,grey68,grey69,grey7,grey70,grey71,grey72,grey73,grey74,grey75,grey76,grey77,grey78,grey79,grey8,grey80,grey81,grey82,grey83,grey84,grey85,grey86,grey87,grey88,grey89,grey9,grey90,grey91,grey92,grey93,grey94,grey95,grey96,grey97,grey98,grey99,honeydew,honeydew1,honeydew2,honeydew3,honeydew4,hotpink,hotpink1,hotpink2,hotpink3,hotpink4,indianred,indianred1,indianred2,indianred3,indianred4,ivory,ivory1,ivory2,ivory3,ivory4,khaki,khaki1,khaki2,khaki3,khaki4,lavender,lavenderblush,lavenderblush1,lavenderblush2,lavenderblush3,lavenderblush4,lawngreen,lemonchiffon,lemonchiffon1,lemonchiffon2,lemonchiffon3,lemonchiffon4,lightblue,lightblue1,lightblue2,lightblue3,lightblue4,lightcoral,lightcyan,lightcyan1,lightcyan2,lightcyan3,lightcyan4,lightgoldenrod,lightgoldenrod1,lightgoldenrod2,lightgoldenrod3,lightgoldenrod4,lightgoldenrodyellow,lightgray,lightgreen,lightgrey,lightpink,lightpink1,lightpink2,lightpink3,lightpink4,lightsalmon,lightsalmon1,lightsalmon2,lightsalmon3,lightsalmon4,lightseagreen,lightskyblue,lightskyblue1,lightskyblue2,lightskyblue3,lightskyblue4,lightslateblue,lightslategray,lightslategrey,lightsteelblue,lightsteelblue1,lightsteelblue2,lightsteelblue3,lightsteelblue4,lightyellow,lightyellow1,lightyellow2,lightyellow3,lightyellow4,limegreen,linen,magenta,magenta1,magenta2,magenta3,magenta4,maroon,maroon1,maroon2,maroon3,maroon4,mediumaquamarine,mediumblue,mediumorchid,mediumorchid1,mediumorchid2,mediumorchid3,mediumorchid4,mediumpurple,mediumpurple1,mediumpurple2,mediumpurple3,mediumpurple4,mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue,mintcream,mistyrose,mistyrose1,mistyrose2,mistyrose3,mistyrose4,moccasin,navajowhite,navajowhite1,navajowhite2,navajowhite3,navajowhite4,navy,navyblue,oldlace,olivedrab,olivedrab1,olivedrab2,olivedrab3,olivedrab4,orange,orange1,orange2,orange3,orange4,orangered,orangered1,orangered2,orangered3,orangered4,orchid,orchid1,orchid2,orchid3,orchid4,palegoldenrod,palegreen,palegreen1,palegreen2,palegreen3,palegreen4,paleturquoise,paleturquoise1,paleturquoise2,paleturquoise3,paleturquoise4,palevioletred,palevioletred1,palevioletred2,palevioletred3,palevioletred4,papayawhip,peachpuff,peachpuff1,peachpuff2,peachpuff3,peachpuff4,peru,pink,pink1,pink2,pink3,pink4,plum,plum1,plum2,plum3,plum4,powderblue,purple,purple1,purple2,purple3,purple4,red,red1,red2,red3,red4,rosybrown,rosybrown1,rosybrown2,rosybrown3,rosybrown4,royalblue,royalblue1,royalblue2,royalblue3,royalblue4,saddlebrown,salmon,salmon1,salmon2,salmon3,salmon4,sandybrown,seagreen,seagreen1,seagreen2,seagreen3,seagreen4,seashell,seashell1,seashell2,seashell3,seashell4,sienna,sienna1,sienna2,sienna3,sienna4,skyblue,skyblue1,skyblue2,skyblue3,skyblue4,slateblue,slateblue1,slateblue2,slateblue3,slateblue4,slategray,slategray1,slategray2,slategray3,slategray4,slategrey,snow,snow1,snow2,snow3,snow4,springgreen,springgreen1,springgreen2,springgreen3,springgreen4,steelblue,steelblue1,steelblue2,steelblue3,steelblue4,tan,tan1,tan2,tan3,tan4,thistle,thistle1,thistle2,thistle3,thistle4,tomato,tomato1,tomato2,tomato3,tomato4,turquoise,turquoise1,turquoise2,turquoise3,turquoise4,violet,violetred,violetred1,violetred2,violetred3,violetred4,wheat,wheat1,wheat2,wheat3,wheat4,white,whitesmoke,yellow,yellow1,yellow2,yellow3,yellow4,yellowgreen] RGB colors (31, 63, 127)=#1f3f7f RGB colors (0.1, 0.2, 0.3)=#1a334d RGBA colors (31, 63, 127, 191)=#1f3f7fbf RGBA colors (0.1, 0.2, 0.3, 0.4)=#1a334d66 HSV colors (215.0, 0.2, 0.3)=#3d444d HSVA colors (215.0, 0.2, 0.3, 0.4)=#3d444d66 HSV (215.0, 0.2, 0.3) to RGB=class=Point name=Unnamed dimension=3 values=[0.24,0.265,0.3] Line styles=[blank,solid,dashed,dotted,dotdash,longdash,twodash] Point styles=[bullet,circle,diamond,dot,fcircle,fdiamond,fsquare,ftriangleup,none,plus,square,star,times,triangledown,triangleup] Fill styles=[solid,shaded] openturns-1.9/lib/test/t_DualLinearCombinationFunction_std.cxx000066400000000000000000000057531307543307100250140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for dual_linear combinations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // First, build two functions from R^3->R Description inVar(3); inVar[0] = "x1"; inVar[1] = "x2"; inVar[2] = "x3"; Description formula(1); formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)"; DualLinearCombinationEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the weights Sample coefficients(0, 3); Point p(3); p[0] = 1.5; p[1] = 2.5; p[2] = -0.5; coefficients.add(p); p[0] = -3.5; p[1] = 0.5; p[2] = -1.5; coefficients.add(p); // Third, build the function DualLinearCombinationFunction myFunction(functions, coefficients); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myFunction=" << myFunction << std::endl; fullprint << "Value at " << inPoint << "=" << myFunction(inPoint) << std::endl; fullprint << "Gradient at " << inPoint << "=" << myFunction.gradient(inPoint) << std::endl; PlatformInfo::SetNumericalPrecision(5); fullprint << "Hessian at " << inPoint << "=" << myFunction.hessian(inPoint) << std::endl; for (UnsignedInteger i = 0; i < myFunction.getOutputDimension(); ++i) { fullprint << "Marginal " << i << "=" << myFunction.getMarginal(i) << std::endl; } Indices indices(2); indices[0] = 0; indices[1] = 1; fullprint << "Marginal (0,1)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 0; indices[1] = 2; fullprint << "Marginal (0,2)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 1; indices[1] = 2; fullprint << "Marginal (1,2)=" << myFunction.getMarginal(indices) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_DualLinearCombinationFunction_std.expout000066400000000000000000001261761307543307100255410ustar00rootroot00000000000000myFunction=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,v0,v1,v2] evaluationImplementation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] gradientImplementation=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Point name=Unnamed dimension=3 values=[-32.6345,-2.5861,-10.9343] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[178.768,-375.374,-305.359,-38.5532,51.2006,42.7773,82.095,-159.854,-130.512] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[-1751.3,4267.4,3202.7,0,-11041,-8261.4,0,0,-6049.1,230.59,-612.35,-462.4,0,1581.5,1192.5,0,0,891.78,-742.32,1830,1374.6,0,-4733.6,-3545.8,0,0,-2604.1] Marginal 0=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[1.5,-3.5] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[1,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[1,0,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Marginal 1=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[2.5,0.5] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Marginal 2=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[-0.5,-1.5] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Marginal (0,1)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,v0,v1] evaluationImplementation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.5,2.5],[-3.5,0.5]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,1,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,1,0] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Marginal (0,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,v0,v1] evaluationImplementation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.5,-0.5],[-3.5,-1.5]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,0,0,0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] Marginal (1,2)=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,v0,v1] evaluationImplementation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2.5,-0.5],[0.5,-1.5]] gradientImplementation=class=ComposedGradient name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[0,1,0,0,0,1] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=DualLinearCombinationGradient evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] hessianImplementation=class=ComposedHessian name=Unnamed leftGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[0,1,0,0,0,1] leftHessian=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] rightFunction=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[0.0,0.0,0.0] rightGradient=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0,0,0,0,0,0,0,0,0] rightHessian=class=DualLinearCombinationHessian evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[1.5,2.5,-0.5],[-3.5,0.5,-1.5]] openturns-1.9/lib/test/t_Epanechnikov_std.cxx000066400000000000000000000155311307543307100215100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Epanechnikov for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Epanechnikov { public: TestObject() : Epanechnikov() {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Epanechnikov distribution; fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 0.5 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Epanechnikov::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Epanechnikov_std.expout000066400000000000000000000106141307543307100222270ustar00rootroot00000000000000Testing class Epanechnikov checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Epanechnikov name=Epanechnikov dimension=1 streamObject(const T & anObject) class=Epanechnikov name=Epanechnikov dimension=1 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Epanechnikov name=Epanechnikov dimension=1 Distribution Epanechnikov() Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.174954] oneSample first=class=Point name=Unnamed dimension=1 values=[0.573175] last=class=Point name=Unnamed dimension=1 values=[-0.100711] mean=class=Point name=Unnamed dimension=1 values=[0.00498178] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.203765] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.75] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.75] log pdf=-0.575364 pdf =0.5625 pdf (FD)=0.5625 cdf=0.84375 ccdf=0.15625 survival=0.15625 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.729299] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=0 values=[] cdf gradient =class=Point name=Unnamed dimension=0 values=[] quantile=class=Point name=Unnamed dimension=1 values=[0.729299] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.811401] upper bound=class=Point name=Unnamed dimension=1 values=[0.811401] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Epanechnikov()) gradientImplementation=MinimumVolumeLevelSetGradient(Epanechnikov()) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Epanechnikov()) level=1.36172 beta=0.256221 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.811401] upper bound=class=Point name=Unnamed dimension=1 values=[0.811401] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[0.729299] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.729299] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0] standard deviation=class=Point name=Unnamed dimension=1 values=[0.447214] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[2.14286] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.2] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.0857143] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Epanechnikov() openturns-1.9/lib/test/t_Event_domain.cxx000066400000000000000000000040461307543307100206330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of Event class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; Normal distribution(dim); // // Case 1: composite random vector based event // { // The input vector RandomVector X(distribution); // The model: the identity function Description inVars(Description::BuildDefault(dim, "x")); SymbolicFunction model(inVars, inVars); // The output vector RandomVector Y(model, X); // The domain: [0, 1]^dim Interval domain(dim); // The event Event event(Y, domain); fullprint << "sample=" << event.getSample(10) << std::endl; } // // Case 2: process based event // { // The input process WhiteNoise X(distribution); // The domain: [0, 1]^dim Interval domain(dim); // The event Event event(X, domain); fullprint << "sample=" << event.getSample(10) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Event_domain.expout000066400000000000000000000006121307543307100213500ustar00rootroot00000000000000sample=class=Sample name=EventRandomVector sample implementation=class=SampleImplementation name=EventRandomVector sample size=10 dimension=1 description=[y0] data=[[0],[0],[0],[0],[1],[0],[0],[0],[0],[0]] sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[Unnamed in Unnamed] data=[[1],[0],[0],[0],[0],[0],[0],[0],[0],[1]] openturns-1.9/lib/test/t_Event_std.cxx000066400000000000000000000052431307543307100201560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of Event class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical point of dimension 1 */ Point point(4); const Point & ref_point(point); point[0] = 101; point[1] = 202; point[2] = 303; point[3] = 404; fullprint << "point = " << ref_point << std::endl; /* We create a 'constant' RandomVector from the Point */ RandomVector vect(point); fullprint << "vect=" << vect << std::endl; /* Check standard methods of class RandomVector */ fullprint << "vect dimension=" << vect.getDimension() << std::endl; fullprint << "vect realization (first )=" << vect.getRealization() << std::endl; fullprint << "vect sample =" << vect.getSample(5) << std::endl; /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), 50); fullprint << "myEvent=" << myEvent << std::endl; /* We compute one realization of the event */ fullprint << "myEvent realization=" << myEvent.getRealization() << std::endl; fullprint << "myEvent antecedent realization=" << myEvent.getImplementation()->getAntecedent()->getRealization() << std::endl; /* We compute a sample of the event */ fullprint << "myEvent sample=" << myEvent.getSample(10) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Event_std.expout000066400000000000000000000035201307543307100206740ustar00rootroot00000000000000point = class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect=class=RandomVector implementation=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect dimension=4 vect realization (first )=class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=4 description=[x0,x1,x2,x3] data=[[101,202,303,404],[101,202,303,404],[101,202,303,404],[101,202,303,404],[101,202,303,404]] myEvent=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,202,303,404] operator=class=Less name=Unnamed threshold=50 myEvent realization=class=Point name=Unnamed dimension=1 values=[1] myEvent antecedent realization=class=Point name=Unnamed dimension=4 values=[101,202,303,404] myEvent sample=class=Sample name=EventRandomVector sample implementation=class=SampleImplementation name=EventRandomVector sample size=10 dimension=1 description=[d] data=[[1],[1],[1],[1],[1],[1],[1],[1],[1],[1]] openturns-1.9/lib/test/t_Exception_std.cxx000066400000000000000000000062471307543307100210400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Exception for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; template ExitCodeValue check() { ExitCodeValue rc = ExitCode::Error; try { throw EXC(HERE) << "This is the reason of the exception"; std::cerr << "--- Exception not thrown !" << std::endl; } catch (const EXC & ex) { rc = ExitCode::Success; std::cerr << "+++ Correct exception catched." << std::endl; } catch (const Exception & ex) { rc = ExitCode::Error; std::cerr << "--- General exception catched !" << std::endl; } catch (const std::exception & ex) { rc = ExitCode::Error; std::cerr << "--- Standard exception catched !" << std::endl; } catch (...) { rc = ExitCode::Error; std::cerr << "--- Unknown exception catched !" << std::endl; }; return rc; } template <> ExitCodeValue check< Exception >() { ExitCodeValue rc = ExitCode::Error; try { throw Exception(HERE) << "This is the reason of the exception"; std::cerr << "--- Exception not thrown !" << std::endl; } catch (const Exception & ex) { rc = ExitCode::Success; std::cerr << "+++ Correct exception catched." << std::endl; } catch (const std::exception & ex) { rc = ExitCode::Error; std::cerr << "--- Standard exception catched !" << std::endl; } catch (...) { rc = ExitCode::Error; std::cerr << "--- Unknown exception catched !" << std::endl; }; return rc; } int main(int argc, char *argv[]) { Log::Show( Log::ALL ); TESTPREAMBLE; OStream fullprint(std::cout); ExitCodeValue rc = ExitCode::Success; rc |= check< Exception >(); rc |= check< FileNotFoundException >(); rc |= check< InternalException >(); rc |= check< InvalidArgumentException >(); rc |= check< InvalidDimensionException >(); rc |= check< NotYetImplementedException >(); rc |= check< OutOfBoundException >(); rc |= check< XMLException >(); rc |= check< XMLParserException >(); rc |= check< DynamicLibraryException >(); rc |= check< NotSymmetricDefinitePositiveException >(); rc |= check< InvalidRangeException >(); rc |= check< NotDefinedException >(); rc |= check< FileOpenException >(); rc |= check< StudyFileParsingException >(); rc |= check< ObjectNotInStudyException >(); rc |= check< ConfigurationFileParsingException >(); return rc; } openturns-1.9/lib/test/t_Exception_std.expout000066400000000000000000000000001307543307100215370ustar00rootroot00000000000000openturns-1.9/lib/test/t_ExpertMixture_std.cxx000066400000000000000000000044731307543307100217260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ExpertMixture for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Create a collection of distribution Mixture::DistributionCollection aCollection; CorrelationMatrix R(2); R(0, 1) = -0.99; Point mean(2); mean[0] = -1.0; mean[1] = 1.0; aCollection.add( Normal(mean, Point(2, 1.0), R) ); R(0, 1) = 0.99; mean[0] = 1.0; aCollection.add( Normal(mean, Point(2, 1.0), R) ); // Instanciate one distribution object Mixture distribution(aCollection, Point(aCollection.getSize(), 1.0)); // Create a mixture classifier MixtureClassifier classifier(distribution); fullprint << "classifier dimension=" << classifier.getDimension() << std::endl; // Create local experts Basis experts(0); experts.add(SymbolicFunction("x", "-x")); experts.add(SymbolicFunction("x", "x")); // Create a mixture of experts ExpertMixture moe(experts, classifier); fullprint << "Mixture of experts=" << moe << std::endl; // Evaluate the mixture of experts on some points for (UnsignedInteger i = 0; i < 5; ++i) { Point p(1, -0.3 + 0.8 * i / 4.0); fullprint << "moe(" << p[0] << ")=" << moe(p) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ExpertMixture_std.expout000066400000000000000000000046741307543307100224530ustar00rootroot00000000000000classifier dimension=2 Mixture of experts=class=ExpertMixture, experts=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x]], classifier=class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[-1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,-0.99,-0.99,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.99,0.99,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5] moe(-0.3)=class=Point name=Unnamed dimension=1 values=[0.3] moe(-0.1)=class=Point name=Unnamed dimension=1 values=[0.1] moe(0.1)=class=Point name=Unnamed dimension=1 values=[0.1] moe(0.3)=class=Point name=Unnamed dimension=1 values=[0.3] moe(0.5)=class=Point name=Unnamed dimension=1 values=[0.5] openturns-1.9/lib/test/t_ExponentialCauchy_std.cxx000066400000000000000000000063471307543307100225260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ExponentialCauchy * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default dimension parameter to evaluate the model */ const UnsignedInteger defaultDimension = 1; /* Default spaatial dimension parameter */ const UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(defaultDimension, 1.0); /* Scale values */ Point scale(spatialDimension, 1.0); /* Default constructor */ ExponentialCauchy myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; /* Second order model with parameters */ ExponentialCauchy myModel(scale, amplitude); fullprint << "myModel = " << myModel << std::endl; const Scalar frequencyValueOne = 1.0; fullprint << "spectral density matrix at f = " << frequencyValueOne << " : " << myModel.computeSpectralDensity(frequencyValueOne) << std::endl; fullprint << "spectral density matrix at f = " << -frequencyValueOne << " : " << myModel.computeSpectralDensity(-frequencyValueOne) << std::endl; const Scalar frequencyValueHigh = 4.0; fullprint << "spectral density matrix at f = " << frequencyValueHigh << " : " << myModel.computeSpectralDensity(frequencyValueHigh) << std::endl; fullprint << "spectral density matrix at f = " << -frequencyValueHigh << " : " << myModel.computeSpectralDensity(-frequencyValueHigh) << std::endl; const Scalar timeValueOne = 1.0; fullprint << "covariance matrix at t = " << timeValueOne << " : " << myModel.computeCovariance(timeValueOne) << std::endl; fullprint << "covariance matrix at t = " << -timeValueOne << " : " << myModel.computeCovariance(-timeValueOne) << std::endl; /* Evaluation at time higher to check the decrease of the exponential values */ const Scalar timeValueHigh = 4.0; fullprint << "covariance matrix at t = " << timeValueHigh << " : " << myModel.computeCovariance(timeValueHigh) << std::endl; /* Discretize the process on a small time grid */ RegularGrid timeGrid(0.0, 1.0 / 3.0, 4); fullprint << "discretized covariance over the time grid=" << timeGrid << " is" << std::endl; fullprint << myModel.discretize(timeGrid) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ExponentialCauchy_std.expout000066400000000000000000000050101307543307100232320ustar00rootroot00000000000000myDefautModel = class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true myModel = class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true spectral density matrix at f = 1 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.049409,0)] spectral density matrix at f = -1 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.049409,0)] spectral density matrix at f = 4 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.00316128,0)] spectral density matrix at f = -4 : class=HermitianMatrix dimension=1 implementation=class=ComplexMatrixImplementation name=Unnamed rows=1 columns=1 values=[(0.00316128,0)] covariance matrix at t = 1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879] covariance matrix at t = -1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879] covariance matrix at t = 4 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0183156] discretized covariance over the time grid=class=RegularGrid name=Unnamed start=0 step=0.333333 n=4 is class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.716531,0.513417,0.367879,0.716531,1,0.716531,0.513417,0.513417,0.716531,1,0.716531,0.367879,0.513417,0.716531,1] openturns-1.9/lib/test/t_ExponentialFactory_std.cxx000066400000000000000000000057301307543307100227140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Exponential for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Exponential distribution(2.5, -1.3); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); ExponentialFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Exponential estimatedExponential(factory.buildAsExponential(sample)); fullprint << "Exponential =" << distribution << std::endl; fullprint << "Estimated exponential=" << estimatedExponential << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedExponential = factory.buildAsExponential(); fullprint << "Default exponential=" << estimatedExponential << std::endl; estimatedExponential = factory.buildAsExponential(distribution.getParameter()); fullprint << "Exponential from parameters=" << estimatedExponential << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ExponentialFactory_std.expout000066400000000000000000000016541307543307100234370ustar00rootroot00000000000000Distribution =class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-1.3 Estimated distribution=class=Exponential name=Exponential dimension=1 lambda=2.50961 gamma=-1.30009 Default distribution=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 Distribution from parameters=class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-1.3 Exponential =class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-1.3 Estimated exponential=class=Exponential name=Exponential dimension=1 lambda=2.50961 gamma=-1.30009 Default exponential=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 Exponential from parameters=class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-1.3 Estimated distribution=class=Exponential name=Exponential dimension=1 lambda=2.53274e+305 gamma=0 Estimated distribution=class=Exponential name=Exponential dimension=1 lambda=10002 gamma=0.9999 openturns-1.9/lib/test/t_ExponentialModel_std.cxx000066400000000000000000000076321307543307100223500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ExponentialModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default dimension parameter to evaluate the model */ const UnsignedInteger defaultDimension = 1; /* Spatial dimension of the model */ const UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(defaultDimension, 2.0); /* Scale values */ Point scale(spatialDimension, 1.0); /* Default constructor */ ExponentialModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; /* Second order model with parameters */ ExponentialModel myModel(scale, amplitude); fullprint << "myModel = " << myModel << std::endl; const Scalar timeValueOne = 1.0; fullprint << "covariance matrix at t = " << timeValueOne << " : " << myModel(timeValueOne) << std::endl; fullprint << "covariance matrix at t = " << -1.0 * timeValueOne << " : " << myModel(-1.0 * timeValueOne) << std::endl; /* Evaluation at time higher to check the decrease of the exponential values */ const Scalar timeValueHigh = 4.0; fullprint << "covariance matrix at t = " << timeValueHigh << " : " << myModel(timeValueHigh) << std::endl; /* Discretize the process on a small time grid */ RegularGrid timeGrid(0.0, 1.0 / 3.0, 4); fullprint << "discretized covariance over the time grid=" << timeGrid << " is" << std::endl; fullprint << myModel.discretize(timeGrid) << std::endl; /* Default dimension parameter to evaluate the model */ const UnsignedInteger highDimension = 3; /* Reallocation of adequate sizes*/ amplitude.resize(highDimension); CorrelationMatrix spatialCorrelation(highDimension); for (UnsignedInteger index = 0 ; index < highDimension; ++index) { // constant amplitude amplitude[index] = 1.0 ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } fullprint << "spatialCorrelation=" << spatialCorrelation << std::endl; /* checking the cast*/ StationaryCovarianceModel mySecondOrderModel(ExponentialModel(scale, amplitude, spatialCorrelation)); fullprint << "mySecondOrderModel = " << mySecondOrderModel << std::endl; /* Second order model - high dimension */ ExponentialModel myHighModel(scale, amplitude, spatialCorrelation); fullprint << "myHighModel = " << myHighModel << std::endl; fullprint << "covariance matrix at t = " << timeValueOne << " : " << myHighModel(timeValueOne) << std::endl; fullprint << "covariance matrix at t = " << -timeValueOne << " : " << myHighModel(-timeValueOne) << std::endl; fullprint << "covariance matrix at t = " << timeValueHigh << " : " << myHighModel(timeValueHigh) << std::endl; fullprint << "discretized covariance over the time grid=" << timeGrid << " is" << std::endl; fullprint << myHighModel.discretize(timeGrid) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ExponentialModel_std.expout000066400000000000000000000071421307543307100230660ustar00rootroot00000000000000myDefautModel = class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true myModel = class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[2] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covariance matrix at t = 1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152] covariance matrix at t = -1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152] covariance matrix at t = 4 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0732626] discretized covariance over the time grid=class=RegularGrid name=Unnamed start=0 step=0.333333 n=4 is class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[4,2.86613,2.05367,1.47152,2.86613,4,2.86613,2.05367,2.05367,2.86613,4,2.86613,1.47152,2.05367,2.86613,4] spatialCorrelation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] mySecondOrderModel = class= StationaryCovarianceModel myHighModel = class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=3 values=[1,1,1] spatial correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,1,0.5,0,0.5,1] isDiagonal=false covariance matrix at t = 1 : class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.367879,0.367879,0,0.367879,0.367879,0.18394,0,0.18394,0.367879] covariance matrix at t = -1 : class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.367879,0.367879,0,0.367879,0.367879,0.18394,0,0.18394,0.367879] covariance matrix at t = 4 : class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0183156,0.0183156,0,0.0183156,0.0183156,0.00915782,0,0.00915782,0.0183156] discretized covariance over the time grid=class=RegularGrid name=Unnamed start=0 step=0.333333 n=4 is class=CovarianceMatrix dimension=12 implementation=class=MatrixImplementation name=Unnamed rows=12 columns=12 values=[1,1,0,0.716531,0.716531,0,0.513417,0.513417,0,0.367879,0.367879,0,1,1,0.5,0.716531,0.716531,0.358266,0.513417,0.513417,0.256709,0.367879,0.367879,0.18394,0,0.5,1,0,0.358266,0.716531,0,0.256709,0.513417,0,0.18394,0.367879,0.716531,0.716531,0,1,1,0,0.716531,0.716531,0,0.513417,0.513417,0,0.716531,0.716531,0.358266,1,1,0.5,0.716531,0.716531,0.358266,0.513417,0.513417,0.256709,0,0.358266,0.716531,0,0.5,1,0,0.358266,0.716531,0,0.256709,0.513417,0.513417,0.513417,0,0.716531,0.716531,0,1,1,0,0.716531,0.716531,0,0.513417,0.513417,0.256709,0.716531,0.716531,0.358266,1,1,0.5,0.716531,0.716531,0.358266,0,0.256709,0.513417,0,0.358266,0.716531,0,0.5,1,0,0.358266,0.716531,0.367879,0.367879,0,0.513417,0.513417,0,0.716531,0.716531,0,1,1,0,0.367879,0.367879,0.18394,0.513417,0.513417,0.256709,0.716531,0.716531,0.358266,1,1,0.5,0,0.18394,0.367879,0,0.256709,0.513417,0,0.358266,0.716531,0,0.5,1] openturns-1.9/lib/test/t_Exponential_std.cxx000066400000000000000000000202321307543307100213560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Exponential for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Exponential { public: TestObject() : Exponential(2.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Exponential distribution(2.5, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Exponential(distribution.getLambda() + eps, distribution.getGamma()).computePDF(point) - Exponential(distribution.getLambda() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Exponential(distribution.getLambda(), distribution.getGamma() + eps).computePDF(point) - Exponential(distribution.getLambda(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Exponential(distribution.getLambda() + eps, distribution.getGamma()).computeCDF(point) - Exponential(distribution.getLambda() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Exponential(distribution.getLambda(), distribution.getGamma() + eps).computeCDF(point) - Exponential(distribution.getLambda(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Exponential::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Exponential_std.expout000066400000000000000000000116121307543307100221020ustar00rootroot00000000000000Testing class Exponential checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-0.5 streamObject(const T & anObject) class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-0.5 Distribution Exponential(lambda = 2.5, gamma = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[-0.315107] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.45014] last=class=Point name=Unnamed dimension=1 values=[-0.157472] mean=class=Point name=Unnamed dimension=1 values=[-0.101604] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.160734] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.146986] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.146986] log pdf=-2.83371 pdf =0.0587944 pdf (FD)=0.0587944 cdf=0.976482 ccdf=0.0235177 survival=0.0235177 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.479483] Survival(inverse survival)=0.95 characteristic function=(0.921856,-0.110683) log characteristic function=(-0.07421,-0.119494) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0646738,0.146986] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0646738,0.146986] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.0352766,-0.0587944] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0352766,-0.0587944] quantile=class=Point name=Unnamed dimension=1 values=[0.698293] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[0.698293] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Exponential(lambda = 2.5, gamma = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Exponential(lambda = 2.5, gamma = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Exponential(lambda = 2.5, gamma = -0.5)) level=2.07944 beta=0.125 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.489873] upper bound=class=Point name=Unnamed dimension=1 values=[0.975552] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[0.698293] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.479483] upper bound=class=Point name=Unnamed dimension=1 values=[12.3945] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[-0.1] standard deviation=class=Point name=Unnamed dimension=1 values=[0.4] skewness=class=Point name=Unnamed dimension=1 values=[2] kurtosis=class=Point name=Unnamed dimension=1 values=[9] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.16] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[lambda : 2.5, gamma : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[6] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[24] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[120] Standard representative=Exponential(lambda = 1, gamma = 0) openturns-1.9/lib/test/t_ExponentiallyDampedCosineModel_std.cxx000066400000000000000000000046301307543307100251640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ExponentiallyDampedCosineModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Amplitude values */ Point amplitude(1, 1.0); /* Scale values */ Point scale(1, 1.0); /* Frequency values */ Scalar frequency = 0.1; /* Default constructor */ ExponentiallyDampedCosineModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; /* Second order model with parameters */ ExponentiallyDampedCosineModel myModel(scale, amplitude, frequency); fullprint << "myModel = " << myModel << std::endl; const Scalar timeValueOne = 1.0; fullprint << "covariance matrix at t = " << timeValueOne << " : " << myModel(timeValueOne) << std::endl; fullprint << "covariance matrix at t = " << -1.0 * timeValueOne << " : " << myModel(-1.0 * timeValueOne) << std::endl; /* Evaluation at time higher to check the decrease of the exponentiallyDampedCosine values */ const Scalar timeValueHigh = 4.0; fullprint << "covariance matrix at t = " << timeValueHigh << " : " << myModel(timeValueHigh) << std::endl; /* Discretize the process on a small time grid */ RegularGrid timeGrid(0.0, 1.0 / 3.0, 4); fullprint << "discretized covariance over the time grid=" << timeGrid << " is" << std::endl; fullprint << myModel.discretize(timeGrid) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ExponentiallyDampedCosineModel_std.expout000066400000000000000000000022061307543307100257030ustar00rootroot00000000000000myDefautModel = class=ExponentiallyDampedCosineModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] frequency=1 myModel = class=ExponentiallyDampedCosineModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] frequency=0.1 covariance matrix at t = 1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879] covariance matrix at t = -1 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879] covariance matrix at t = 4 : class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0183156] discretized covariance over the time grid=class=RegularGrid name=Unnamed start=0 step=0.333333 n=4 is class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,-0.358266,-0.256709,0.367879,-0.358266,1,-0.358266,-0.256709,-0.256709,-0.358266,1,-0.358266,0.367879,-0.256709,-0.358266,1] openturns-1.9/lib/test/t_FAST_std.cxx000066400000000000000000000134361307543307100176350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FAST * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RandomGenerator::SetSeed(0); UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 1; Description inputName(inputDimension); inputName[0] = "X1"; inputName[1] = "X2"; inputName[2] = "X3"; Description outputName(outputDimension); outputName[0] = "Y"; // // Test with Ishigami function Description formulaIshigami(1); formulaIshigami[0] = "sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)"; Function modelIshigami(inputName, outputName, formulaIshigami); ComposedDistribution::DistributionCollection marginals(inputDimension); marginals[0] = Uniform(-1.0, 1.0); marginals[1] = Uniform(-1.0, 1.0); marginals[2] = Uniform(-1.0, 1.0); ComposedDistribution distributions(marginals); FAST sensitivityFast(modelIshigami, distributions, 400); // Comparaison with reference analytical values Scalar a = 7.0; Scalar b = 0.1; Scalar covTh = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1(3); sob_1[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh; sob_1[1] = (pow(a, 2.0) / 8.0) / covTh; sob_1[2] = 0.0; Point sob_2(3); sob_2[0] = 0.0; sob_2[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh; sob_2[2] = 0.0; Point sob_3(1, 0.0); Point sob_T1(3); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; Point firstOrderFastIndices(sensitivityFast.getFirstOrderIndices()); Point totalOrderFastIndices(sensitivityFast.getTotalOrderIndices()); for(UnsignedInteger i = 0; i < inputDimension; ++i) { Scalar value = firstOrderFastIndices[i]; fullprint << "Ishigami first order FAST indice " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_1[i]) << std::endl; } fullprint << std::endl; for(UnsignedInteger i = 0; i < inputDimension; ++i) { Scalar value = totalOrderFastIndices[i]; fullprint << "Ishigami total order FAST indice " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T1[i]) << std::endl; } fullprint << std::endl; // // Test with G-Sobol function covTh = 1.0; Point a_i(inputDimension); Description formulaGSobol(1); formulaGSobol[0] = "1.0"; for (UnsignedInteger i = 0; i < inputDimension; ++i) { a_i[i] = 0.5 * i; covTh *= 1.0 + 1.0 / (3.0 * pow(1.0 + a_i[i], 2.0)); formulaGSobol[0] = (OSS() << formulaGSobol[0] << " * ((abs(4.0 * X" << i + 1 << " - 2.0) + " << a_i[i] << ") / (1.0 + " << a_i[i] << "))"); } covTh = covTh - 1.0; SymbolicFunction modelGSobol(inputName, formulaGSobol); marginals[0] = Uniform(0., 1.0); marginals[1] = Uniform(0., 1.0); marginals[2] = Uniform(0., 1.0); distributions = ComposedDistribution(marginals); sensitivityFast = FAST(modelGSobol, distributions, 400); sensitivityFast.setBlockSize(7); // Comparaison with reference analytical values firstOrderFastIndices = sensitivityFast.getFirstOrderIndices(); totalOrderFastIndices = sensitivityFast.getTotalOrderIndices(); // First-order indices Point V_i(inputDimension); Point Vtot_i(inputDimension); Scalar prod_V_i = 1.0; for(UnsignedInteger i = 0; i < inputDimension; ++i) { V_i[i] = 1.0 / (3.0 * pow(1.0 + a_i[i], 2.0)); prod_V_i *= V_i[i]; } // Total indices Vtot_i[0] = V_i[0] + V_i[0] * V_i[1] + V_i[0] * V_i[2] + prod_V_i; Vtot_i[1] = V_i[1] + V_i[0] * V_i[1] + V_i[1] * V_i[2] + prod_V_i; Vtot_i[2] = V_i[2] + V_i[0] * V_i[2] + V_i[1] * V_i[2] + prod_V_i; // Results for(UnsignedInteger i = 0; i < inputDimension; ++i) { Scalar value = firstOrderFastIndices[i]; fullprint << "G-Sobol first order FAST indice " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - V_i[i]) << std::endl; } fullprint << std::endl; for(UnsignedInteger i = 0; i < inputDimension; ++i) { Scalar value = totalOrderFastIndices[i]; fullprint << "G-Sobol total order FAST indice " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - Vtot_i[i]) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FAST_std.expout000066400000000000000000000014551307543307100203550ustar00rootroot00000000000000Ishigami first order FAST indice 0 = 0.30746 absolute error=6.4e-03 Ishigami first order FAST indice 1 = 0.44252 absolute error=1.1e-04 Ishigami first order FAST indice 2 = 0.00000 absolute error=4.2e-07 Ishigami total order FAST indice 0 = 0.55425 absolute error=3.3e-03 Ishigami total order FAST indice 1 = 0.48710 absolute error=4.5e-02 Ishigami total order FAST indice 2 = 0.23946 absolute error=4.2e-03 G-Sobol first order FAST indice 0 = 0.49827 absolute error=1.6e-01 G-Sobol first order FAST indice 1 = 0.22147 absolute error=7.3e-02 G-Sobol first order FAST indice 2 = 0.12249 absolute error=3.9e-02 G-Sobol total order FAST indice 0 = 0.63490 absolute error=2.2e-01 G-Sobol total order FAST indice 1 = 0.32501 absolute error=1.1e-01 G-Sobol total order FAST indice 2 = 0.19723 absolute error=7.0e-02 openturns-1.9/lib/test/t_FORM_AbdoRackwitz.cxx000066400000000000000000000107161307543307100214330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a NearestPoint algorithm */ // Test function operator () input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "d"), Description(1, "x1+2*x2-3*x3+4*x4")); Point startingPoint(4, 1.0); AbdoRackwitz myAlgorithm(OptimizationProblem(levelFunction, 3.0)); myAlgorithm.setStartingPoint(startingPoint); myAlgorithm.setMaximumIterationNumber(100); myAlgorithm.setMaximumAbsoluteError(1.0e-10); myAlgorithm.setMaximumRelativeError(1.0e-10); myAlgorithm.setMaximumResidualError(1.0e-10); myAlgorithm.setMaximumConstraintError(1.0e-10); /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ FORM myAlgo(myAlgorithm, myEvent, mean); fullprint << "FORM=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ FORMResult result(myAlgo.getResult()); UnsignedInteger digits = 5; fullprint << "event probability=" << result.getEventProbability() << std::endl; fullprint << "generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndex() << std::endl; fullprint << "standard space design point=" << printPoint(result.getStandardSpaceDesignPoint(), digits) << std::endl; fullprint << "physical space design point=" << printPoint(result.getPhysicalSpaceDesignPoint(), digits) << std::endl; fullprint << "is standard point origin in failure space? " << (result.getIsStandardPointOriginInFailureSpace() ? "true" : "false") << std::endl; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FORM_AbdoRackwitz.expout000066400000000000000000000102671307543307100221560ustar00rootroot00000000000000FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[1,1,1,1] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] event probability=0.156426 generalized reliability index=1.0093 standard space design point=[-0.03104,0.84194,0.44540,-0.33224] physical space design point=[49.96896,1.84194,10.44540,4.66776] is standard point origin in failure space? false importance factors=[0.00095,0.69592,0.19476,0.10837] importance factors (classical)=[0.00095,0.69592,0.19476,0.10837] Hasofer reliability index=1.0093 openturns-1.9/lib/test/t_FORM_SQP.cxx000066400000000000000000000107051307543307100175100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a NearestPoint algorithm */ // Test function operator () input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "d"), Description(1, "x1+2*x2-3*x3+4*x4")); Point startingPoint(4, 1.0); SQP myAlgorithm(OptimizationProblem(levelFunction, 3.0)); myAlgorithm.setStartingPoint(startingPoint); myAlgorithm.setMaximumIterationNumber(100); myAlgorithm.setMaximumAbsoluteError(1.0e-10); myAlgorithm.setMaximumRelativeError(1.0e-10); myAlgorithm.setMaximumResidualError(1.0e-10); myAlgorithm.setMaximumConstraintError(1.0e-10); /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ FORM myAlgo(myAlgorithm, myEvent, mean); fullprint << "FORM=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ FORMResult result(myAlgo.getResult()); UnsignedInteger digits = 5; fullprint << "event probability=" << result.getEventProbability() << std::endl; fullprint << "generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndex() << std::endl; fullprint << "standard space design point=" << printPoint(result.getStandardSpaceDesignPoint(), digits) << std::endl; fullprint << "physical space design point=" << printPoint(result.getPhysicalSpaceDesignPoint(), digits) << std::endl; fullprint << "is standard point origin in failure space? " << (result.getIsStandardPointOriginInFailureSpace() ? "true" : "false") << std::endl; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FORM_SQP.expout000066400000000000000000000102561307543307100202330ustar00rootroot00000000000000FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[1,1,1,1] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] event probability=0.156426 generalized reliability index=1.0093 standard space design point=[-0.03104,0.84194,0.44540,-0.33224] physical space design point=[49.96896,1.84194,10.44540,4.66776] is standard point origin in failure space? false importance factors=[0.00095,0.69592,0.19476,0.10837] importance factors (classical)=[0.00095,0.69592,0.19476,0.10837] Hasofer reliability index=1.0093 openturns-1.9/lib/test/t_FORM_draw.cxx000066400000000000000000000122451307543307100200030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ /** Analytical construction */ Description inputFunc(2); inputFunc[0] = "x0"; inputFunc[1] = "x1"; Description outputFunc(1); outputFunc[0] = "y0"; Description formulas(outputFunc.getSize()); formulas[0] = "-(6+x0^2-x1)"; fullprint << "formulas=" << formulas << std::endl; Function myFunction(inputFunc, outputFunc, formulas); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 5.0; // x0 mean[1] = 2.1; // x1 Point sigma(dim, 0.0); sigma[0] = 3.3; // x0 sigma[1] = 3.0; // x1 IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* we name the components of the distribution */ Description componentDescription(dim); componentDescription[0] = "Marginal 1"; componentDescription[1] = "Marginal 2"; myDistribution.setDescription(componentDescription); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); Description outputDescription(1); outputDescription[0] = "Interest Variable 1"; output.setDescription(outputDescription); /* We create an Event from this RandomVector */ Event myEvent(output, Greater(), 0.0); /* We create a NearestPoint algorithm */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(200); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); fullprint << "myCobyla=" << myCobyla << std::endl << std::flush; /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ FORM myAlgo(myCobyla, myEvent, mean); fullprint << "FORM=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ FORMResult result(myAlgo.getResult()); UnsignedInteger digits = 5; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; /* Graph 1 : Importance Factors graph */ Graph importanceFactorsGraph(result.drawImportanceFactors()); importanceFactorsGraph.draw("ImportanceFactorsDrawingFORM.png"); /* Graph 1bis : Importance Factors graph */ Graph classicalImportanceFactorsGraph(result.drawImportanceFactors(AnalyticalResult::CLASSICAL)); classicalImportanceFactorsGraph.draw("ClassicalImportanceFactorsDrawingFORM.png"); /* Graph 2 : Hasofer Reliability Index Sensitivity Graphs graph */ AnalyticalResult::GraphCollection reliabilityIndexSensitivityGraphs(result.drawHasoferReliabilityIndexSensitivity()); reliabilityIndexSensitivityGraphs[0].draw("HasoferReliabilityIndexMarginalSensitivityDrawing.png"); reliabilityIndexSensitivityGraphs[1].draw("HasoferReliabilityIndexOtherSensitivityDrawing.png"); /* Graph 3 : FORM Event Probability Sensitivity Graphs graph */ AnalyticalResult::GraphCollection eventProbabilitySensitivityGraphs(result.drawEventProbabilitySensitivity()); eventProbabilitySensitivityGraphs[0].draw("EventProbabilityIndexMarginalSensitivityDrawing.png"); eventProbabilitySensitivityGraphs[1].draw("EventProbabilityIndexOtherSensitivityDrawing.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FORM_draw.expout000066400000000000000000000111121307543307100205150ustar00rootroot00000000000000formulas=[-(6+x0^2-x1)] myCobyla=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] level value=0 bounds=none minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 physicalstartingPoint=class=Point name=Unnamed dimension=2 values=[5,2.1] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] importance factors=[0.50259,0.49741] importance factors (classical)=[0.50259,0.49741] openturns-1.9/lib/test/t_FORM_sensitivity.cxx000066400000000000000000000123121307543307100214330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ /** Analytical construction */ Description inputFunc(2); inputFunc[0] = "x0"; inputFunc[1] = "x1"; Description outputFunc(1); outputFunc[0] = "y0"; Description formulas(outputFunc.getSize()); formulas[0] = "-(6+x0^2-x1)"; fullprint << "formulas=" << formulas << std::endl; Function myFunction(inputFunc, outputFunc, formulas); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 5.0; // x0 mean[1] = 2.1; // x1 Point sigma(dim, 0.0); sigma[0] = 3.3; // x0 sigma[1] = 3.0; // x1 IdentityMatrix R(dim); ComposedDistribution::DistributionCollection testDistributions(2); testDistributions[0] = Normal(mean, sigma, R); ComposedDistribution::DistributionCollection marginals(2); marginals[0] = testDistributions[0].getMarginal(0); marginals[1] = testDistributions[0].getMarginal(1); testDistributions[1] = ComposedDistribution(marginals); for (UnsignedInteger i = 0; i < 2; i ++) { Distribution myDistribution(testDistributions[i]); /* we name the components of the distribution */ Description componentDescription(dim); componentDescription[0] = "Marginal 1"; componentDescription[1] = "Marginal 2"; myDistribution.setDescription(componentDescription); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); Description outputDescription(1); outputDescription[0] = "Interest Variable 1"; output.setDescription(outputDescription); /* We create an Event from this RandomVector */ Event myEvent(output, Greater(), 0.0); /* We create a NearestPoint algorithm */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(200); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); fullprint << "myCobyla=" << myCobyla << std::endl << std::flush; /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ FORM myAlgo(myCobyla, myEvent, mean); fullprint << "FORM=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ FORMResult result(myAlgo.getResult()); UnsignedInteger digits = 5; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; fullprint << "result=" << result << std::endl; /* Hasofer Reliability Index Sensitivity */ Analytical::Sensitivity hasoferReliabilityIndexSensitivity(result.getHasoferReliabilityIndexSensitivity()); // Display only marginal sensitivities fullprint << "hasoferReliabilityIndexSensitivity = " << hasoferReliabilityIndexSensitivity << std::endl; /* Event Probability Sensitivity */ Analytical::Sensitivity eventProbabilitySensitivity(result.getEventProbabilitySensitivity()); fullprint << "eventProbabilitySensitivity = " << eventProbabilitySensitivity << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FORM_sensitivity.expout000066400000000000000000000347071307543307100221710ustar00rootroot00000000000000formulas=[-(6+x0^2-x1)] myCobyla=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] level value=0 bounds=none minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 physicalstartingPoint=class=Point name=Unnamed dimension=2 values=[5,2.1] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] importance factors=[0.50259,0.49741] importance factors (classical)=[0.50259,0.49741] Hasofer reliability index=1.9419 result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=2 values=[-1.3767,1.36959] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[0.456905,6.20876] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.94192 importanceFactors=class=PointWithDescription name=Importance Factors dimension=2 description=[Marginal 1,Marginal 2] values=[0.502588,0.497412] classicalImportanceFactors=class=PointWithDescription name=Classical Importance Factors dimension=2 description=[Marginal 1,Marginal 2] values=[0.502588,0.497412] hasoferReliabilityIndexSensitivity=[] eventProbability=0.0260733 generalisedReliabilityIndex=1.94192 eventProbabilitySensitivity=[] hasoferReliabilityIndexSensitivity = [[mean_0 : 0.214829, standard_deviation_0 : -0.295754],[mean_1 : -0.235091, standard_deviation_1 : -0.321978],[R_1_0 : 0]] eventProbabilitySensitivity = [[mean_0 : -0.0130055, standard_deviation_0 : 0.0179046],[mean_1 : 0.0142322, standard_deviation_1 : 0.0194922],[R_1_0 : -0]] myCobyla=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] level value=0 bounds=none minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[5] sigma=class=Point name=Unnamed dimension=1 values=[3.3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2.1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] operator=class=Greater name=Unnamed threshold=0 physicalstartingPoint=class=Point name=Unnamed dimension=2 values=[5,2.1] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] importance factors=[0.50259,0.49741] importance factors (classical)=[0.50259,0.49741] Hasofer reliability index=1.9419 result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=2 values=[-1.3767,1.36959] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[0.456905,6.20876] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[5] sigma=class=Point name=Unnamed dimension=1 values=[3.3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2.1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] operator=class=Greater name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.94192 importanceFactors=class=PointWithDescription name=Importance Factors dimension=2 description=[Marginal 1,Marginal 2] values=[0.502588,0.497412] classicalImportanceFactors=class=PointWithDescription name=Classical Importance Factors dimension=2 description=[Marginal 1,Marginal 2] values=[0.502588,0.497412] hasoferReliabilityIndexSensitivity=[] eventProbability=0.0260733 generalisedReliabilityIndex=1.94192 eventProbabilitySensitivity=[] hasoferReliabilityIndexSensitivity = [[mean_0_marginal_0 : 0.214829, standard_deviation_0_marginal_0 : -0.295754],[mean_0_marginal_1 : -0.235091, standard_deviation_0_marginal_1 : -0.321978],[]] eventProbabilitySensitivity = [[mean_0_marginal_0 : -0.0130055, standard_deviation_0_marginal_0 : 0.0179046],[mean_0_marginal_1 : 0.0142322, standard_deviation_0_marginal_1 : 0.0194922],[]] openturns-1.9/lib/test/t_FORM_std.cxx000066400000000000000000000103011307543307100176270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); CorrelationMatrix R(dim); R(0, 1) = 0.5; Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a NearestPoint algorithm */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(400); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); fullprint << "myCobyla=" << myCobyla << std::endl << std::flush; /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ FORM myAlgo(myCobyla, myEvent, mean); fullprint << "FORM=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ FORMResult result(myAlgo.getResult()); UnsignedInteger digits = 5; fullprint << "event probability=" << result.getEventProbability() << std::endl; fullprint << "generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndex() << std::endl; fullprint << "standard space design point=" << printPoint(result.getStandardSpaceDesignPoint(), digits) << std::endl; fullprint << "physical space design point=" << printPoint(result.getPhysicalSpaceDesignPoint(), digits) << std::endl; fullprint << "is standard point origin in failure space? " << (result.getIsStandardPointOriginInFailureSpace() ? "true" : "false") << std::endl; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FORM_std.expout000066400000000000000000000116341307543307100203630ustar00rootroot00000000000000myCobyla=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM=class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] event probability=0.153295 generalized reliability index=1.0224 standard space design point=[0.39996,0.74756,0.45747,-0.34238] physical space design point=[50.39996,1.84738,10.45747,4.65762] is standard point origin in failure space? false importance factors=[0.13281,0.59613,0.17374,0.09732] importance factors (classical)=[0.15303,0.53462,0.20021,0.11214] Hasofer reliability index=1.0224 openturns-1.9/lib/test/t_Factorial_std.cxx000066400000000000000000000031471307543307100210020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Factorial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Point center(4, 0.0); center.setName("center"); center[0] = 0.5; center[1] = 1.5; center[2] = 2.5; center[3] = 3.5; Point levels(3, 0.0); levels.setName("levels"); levels[0] = 4; levels[1] = 8; levels[2] = 16; Factorial myPlane(center, levels); fullprint << "myPlane = " << myPlane << std::endl; Sample sample(myPlane.generate()); fullprint << "sample = " << sample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Factorial_std.expout000066400000000000000000000025151307543307100215220ustar00rootroot00000000000000myPlane = class=Factorial name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Factorial plane implementation=class=SampleImplementation name=Factorial plane size=49 dimension=4 data=[[0.5,1.5,2.5,3.5],[-3.5,-2.5,-1.5,-0.5],[4.5,-2.5,-1.5,-0.5],[-3.5,5.5,-1.5,-0.5],[4.5,5.5,-1.5,-0.5],[-3.5,-2.5,6.5,-0.5],[4.5,-2.5,6.5,-0.5],[-3.5,5.5,6.5,-0.5],[4.5,5.5,6.5,-0.5],[-3.5,-2.5,-1.5,7.5],[4.5,-2.5,-1.5,7.5],[-3.5,5.5,-1.5,7.5],[4.5,5.5,-1.5,7.5],[-3.5,-2.5,6.5,7.5],[4.5,-2.5,6.5,7.5],[-3.5,5.5,6.5,7.5],[4.5,5.5,6.5,7.5],[-7.5,-6.5,-5.5,-4.5],[8.5,-6.5,-5.5,-4.5],[-7.5,9.5,-5.5,-4.5],[8.5,9.5,-5.5,-4.5],[-7.5,-6.5,10.5,-4.5],[8.5,-6.5,10.5,-4.5],[-7.5,9.5,10.5,-4.5],[8.5,9.5,10.5,-4.5],[-7.5,-6.5,-5.5,11.5],[8.5,-6.5,-5.5,11.5],[-7.5,9.5,-5.5,11.5],[8.5,9.5,-5.5,11.5],[-7.5,-6.5,10.5,11.5],[8.5,-6.5,10.5,11.5],[-7.5,9.5,10.5,11.5],[8.5,9.5,10.5,11.5],[-15.5,-14.5,-13.5,-12.5],[16.5,-14.5,-13.5,-12.5],[-15.5,17.5,-13.5,-12.5],[16.5,17.5,-13.5,-12.5],[-15.5,-14.5,18.5,-12.5],[16.5,-14.5,18.5,-12.5],[-15.5,17.5,18.5,-12.5],[16.5,17.5,18.5,-12.5],[-15.5,-14.5,-13.5,19.5],[16.5,-14.5,-13.5,19.5],[-15.5,17.5,-13.5,19.5],[16.5,17.5,-13.5,19.5],[-15.5,-14.5,18.5,19.5],[16.5,-14.5,18.5,19.5],[-15.5,17.5,18.5,19.5],[16.5,17.5,18.5,19.5]] openturns-1.9/lib/test/t_FarlieGumbelMorgensternCopulaFactory_std.cxx000066400000000000000000000055071307543307100263560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FarlieGumbelMorgensternCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { FarlieGumbelMorgensternCopula distribution(0.7); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); FarlieGumbelMorgensternCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; FarlieGumbelMorgensternCopula estimatedFarlieGumbelMorgensternCopula(factory.buildAsFarlieGumbelMorgensternCopula(sample)); fullprint << "FarlieGumbelMorgensternCopula =" << distribution << std::endl; fullprint << "Estimated farlieGumbelMorgensternCopula=" << estimatedFarlieGumbelMorgensternCopula << std::endl; estimatedFarlieGumbelMorgensternCopula = factory.buildAsFarlieGumbelMorgensternCopula(); fullprint << "Default farlieGumbelMorgensternCopula=" << estimatedFarlieGumbelMorgensternCopula << std::endl; estimatedFarlieGumbelMorgensternCopula = factory.buildAsFarlieGumbelMorgensternCopula(distribution.getParameter()); fullprint << "FarlieGumbelMorgensternCopula from parameters=" << estimatedFarlieGumbelMorgensternCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FarlieGumbelMorgensternCopulaFactory_std.expout000066400000000000000000000017661307543307100271030ustar00rootroot00000000000000Distribution =class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 Estimated distribution=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.616721 Default distribution=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.5 Distribution from parameters=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 FarlieGumbelMorgensternCopula =class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 Estimated farlieGumbelMorgensternCopula=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.616721 Default farlieGumbelMorgensternCopula=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.5 FarlieGumbelMorgensternCopula from parameters=class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 openturns-1.9/lib/test/t_FarlieGumbelMorgensternCopula_std.cxx000066400000000000000000000147011307543307100250220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FarlieGumbelMorgensternCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; FarlieGumbelMorgensternCopula copula(0.7); copula.setName("a farlieGumbelMorgenstern copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FarlieGumbelMorgensternCopula_std.expout000066400000000000000000000114651307543307100255500ustar00rootroot00000000000000Copula class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 Copula class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.629877,0.899275] oneSample=class=Sample name=a farlieGumbelMorgenstern copula implementation=class=SampleImplementation name=a farlieGumbelMorgenstern copula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.0216751],[0.347057,0.961496],[0.92068,0.638913],[0.0632061,0.196286],[0.714382,0.457863],[0.373767,0.700168],[0.883503,0.426304],[0.92851,0.882855],[0.684575,0.859274],[0.359802,0.944448]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[0.502777,0.500551] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0201085,0.0201085,0.0833041] point= class=Point name=Unnamed dimension=2 values=[0.2,0.2] ddf=class=Point name=Unnamed dimension=2 values=[-0.84,-0.84] ddf (FD)=class=Point name=Unnamed dimension=2 values=[-0.84,-0.84] pdf=1.252 cdf=0.05792 Survival =0.65792 Survival (ref)=0.65792 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.0255431,0.0255431] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.683555,0.683555] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0126603,0.0126603] upper bound=class=Point name=Unnamed dimension=2 values=[0.98734,0.98734] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.974679 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7) gradientImplementation=MinimumVolumeLevelSetGradient(class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7) level=0.392698 beta=0.675232 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0126603,0.0126603] upper bound=class=Point name=Unnamed dimension=2 values=[0.98734,0.98734] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974679 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.974457,0.974457] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974457 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0255431,0.0255431] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974457 covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0194444,0.0194444,0.0833333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.233333,0.233333,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.233333,0.233333,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.155556,0.155556,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.294088] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.47206] indices=[1,0] margins=class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 margins PDF=1.175 margins CDF=0.0871094 margins quantile=class=Point name=Unnamed dimension=2 values=[0.974457,0.974457] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.196586,0.508063] openturns-1.9/lib/test/t_FaureSequence_std.cxx000066400000000000000000000042401307543307100216240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Faure' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a Faure sequence FaureSequence sequence(15); fullprint << sequence << std::endl; // Create a numerical sample of the sequence Sample faureSample(sequence.generate(10)); fullprint << faureSample << std::endl; // Create another Faure' sequence of dimension 2 to estimate Pi in [0; 1)^2 UnsignedInteger dimension = 2; sequence = FaureSequence(dimension); UnsignedInteger pointInsideCircle = 0; UnsignedInteger sampleSize = 1000; for(UnsignedInteger i = 0; i < sampleSize; ++i) { Point faurePoint(sequence.generate()); fullprint << faurePoint << std::endl; if(faurePoint.norm() < 1.0) ++ pointInsideCircle; } Scalar probabilityEstimate = 1.0 * pointInsideCircle / sampleSize; Scalar probability = M_PI / 4.0; Scalar relativeError = std::abs(probability - probabilityEstimate) / probability; fullprint << "sample size=" << sampleSize << std::endl; fullprint << "relative error to Pi=" << relativeError << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FaureSequence_std.expout000066400000000000000000002001361307543307100223500ustar00rootroot00000000000000class=FaureSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 modulus=17 seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235],[0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647],[0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471],[0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294],[0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118],[0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941],[0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765],[0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588],[0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412],[0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235]] class=Point name=Unnamed dimension=2 values=[0.5,0.5] class=Point name=Unnamed dimension=2 values=[0.25,0.75] class=Point name=Unnamed dimension=2 values=[0.75,0.25] class=Point name=Unnamed dimension=2 values=[0.125,0.625] class=Point name=Unnamed dimension=2 values=[0.625,0.125] class=Point name=Unnamed dimension=2 values=[0.375,0.375] class=Point name=Unnamed dimension=2 values=[0.875,0.875] class=Point name=Unnamed dimension=2 values=[0.0625,0.9375] class=Point name=Unnamed dimension=2 values=[0.5625,0.4375] class=Point name=Unnamed dimension=2 values=[0.3125,0.1875] class=Point name=Unnamed dimension=2 values=[0.8125,0.6875] class=Point name=Unnamed dimension=2 values=[0.1875,0.3125] class=Point name=Unnamed dimension=2 values=[0.6875,0.8125] class=Point name=Unnamed dimension=2 values=[0.4375,0.5625] class=Point name=Unnamed dimension=2 values=[0.9375,0.0625] class=Point name=Unnamed dimension=2 values=[0.03125,0.53125] class=Point name=Unnamed dimension=2 values=[0.53125,0.03125] class=Point name=Unnamed dimension=2 values=[0.28125,0.28125] class=Point name=Unnamed dimension=2 values=[0.78125,0.78125] class=Point name=Unnamed dimension=2 values=[0.15625,0.15625] class=Point name=Unnamed dimension=2 values=[0.65625,0.65625] class=Point name=Unnamed dimension=2 values=[0.40625,0.90625] class=Point name=Unnamed dimension=2 values=[0.90625,0.40625] class=Point name=Unnamed dimension=2 values=[0.09375,0.46875] class=Point name=Unnamed dimension=2 values=[0.59375,0.96875] class=Point name=Unnamed dimension=2 values=[0.34375,0.71875] class=Point name=Unnamed dimension=2 values=[0.84375,0.21875] class=Point name=Unnamed dimension=2 values=[0.21875,0.84375] class=Point name=Unnamed dimension=2 values=[0.71875,0.34375] class=Point name=Unnamed dimension=2 values=[0.46875,0.09375] class=Point name=Unnamed dimension=2 values=[0.96875,0.59375] class=Point name=Unnamed dimension=2 values=[0.015625,0.796875] class=Point name=Unnamed dimension=2 values=[0.515625,0.296875] class=Point name=Unnamed dimension=2 values=[0.265625,0.046875] class=Point name=Unnamed dimension=2 values=[0.765625,0.546875] class=Point name=Unnamed dimension=2 values=[0.140625,0.421875] class=Point name=Unnamed dimension=2 values=[0.640625,0.921875] class=Point name=Unnamed dimension=2 values=[0.390625,0.671875] class=Point name=Unnamed dimension=2 values=[0.890625,0.171875] class=Point name=Unnamed dimension=2 values=[0.078125,0.234375] class=Point name=Unnamed dimension=2 values=[0.578125,0.734375] class=Point name=Unnamed dimension=2 values=[0.328125,0.984375] class=Point name=Unnamed dimension=2 values=[0.828125,0.484375] class=Point name=Unnamed dimension=2 values=[0.203125,0.609375] class=Point name=Unnamed dimension=2 values=[0.703125,0.109375] class=Point name=Unnamed dimension=2 values=[0.453125,0.359375] class=Point name=Unnamed dimension=2 values=[0.953125,0.859375] class=Point name=Unnamed dimension=2 values=[0.046875,0.265625] class=Point name=Unnamed dimension=2 values=[0.546875,0.765625] class=Point name=Unnamed dimension=2 values=[0.296875,0.515625] class=Point name=Unnamed dimension=2 values=[0.796875,0.015625] class=Point name=Unnamed dimension=2 values=[0.171875,0.890625] class=Point name=Unnamed dimension=2 values=[0.671875,0.390625] class=Point name=Unnamed dimension=2 values=[0.421875,0.140625] class=Point name=Unnamed dimension=2 values=[0.921875,0.640625] class=Point name=Unnamed dimension=2 values=[0.109375,0.703125] class=Point name=Unnamed dimension=2 values=[0.609375,0.203125] class=Point name=Unnamed dimension=2 values=[0.359375,0.453125] class=Point name=Unnamed dimension=2 values=[0.859375,0.953125] class=Point name=Unnamed dimension=2 values=[0.234375,0.078125] class=Point name=Unnamed dimension=2 values=[0.734375,0.578125] class=Point name=Unnamed dimension=2 values=[0.484375,0.828125] class=Point name=Unnamed dimension=2 values=[0.984375,0.328125] class=Point name=Unnamed dimension=2 values=[0.0078125,0.664062] class=Point name=Unnamed dimension=2 values=[0.507812,0.164062] class=Point name=Unnamed dimension=2 values=[0.257812,0.414062] class=Point name=Unnamed dimension=2 values=[0.757812,0.914062] class=Point name=Unnamed dimension=2 values=[0.132812,0.0390625] class=Point name=Unnamed dimension=2 values=[0.632812,0.539062] class=Point name=Unnamed dimension=2 values=[0.382812,0.789062] class=Point name=Unnamed dimension=2 values=[0.882812,0.289062] class=Point name=Unnamed dimension=2 values=[0.0703125,0.351562] class=Point name=Unnamed dimension=2 values=[0.570312,0.851562] class=Point name=Unnamed dimension=2 values=[0.320312,0.601562] class=Point name=Unnamed dimension=2 values=[0.820312,0.101562] class=Point name=Unnamed dimension=2 values=[0.195312,0.976562] class=Point name=Unnamed dimension=2 values=[0.695312,0.476562] class=Point name=Unnamed dimension=2 values=[0.445312,0.226562] class=Point name=Unnamed dimension=2 values=[0.945312,0.726562] class=Point name=Unnamed dimension=2 values=[0.0390625,0.132812] class=Point name=Unnamed dimension=2 values=[0.539062,0.632812] class=Point name=Unnamed dimension=2 values=[0.289062,0.882812] class=Point name=Unnamed dimension=2 values=[0.789062,0.382812] class=Point name=Unnamed dimension=2 values=[0.164062,0.507812] class=Point name=Unnamed dimension=2 values=[0.664062,0.0078125] class=Point name=Unnamed dimension=2 values=[0.414062,0.257812] class=Point name=Unnamed dimension=2 values=[0.914062,0.757812] class=Point name=Unnamed dimension=2 values=[0.101562,0.820312] class=Point name=Unnamed dimension=2 values=[0.601562,0.320312] class=Point name=Unnamed dimension=2 values=[0.351562,0.0703125] class=Point name=Unnamed dimension=2 values=[0.851562,0.570312] class=Point name=Unnamed dimension=2 values=[0.226562,0.445312] class=Point name=Unnamed dimension=2 values=[0.726562,0.945312] class=Point name=Unnamed dimension=2 values=[0.476562,0.695312] class=Point name=Unnamed dimension=2 values=[0.976562,0.195312] class=Point name=Unnamed dimension=2 values=[0.0234375,0.398438] class=Point name=Unnamed dimension=2 values=[0.523438,0.898438] class=Point name=Unnamed dimension=2 values=[0.273438,0.648438] class=Point name=Unnamed dimension=2 values=[0.773438,0.148438] class=Point name=Unnamed dimension=2 values=[0.148438,0.773438] class=Point name=Unnamed dimension=2 values=[0.648438,0.273438] class=Point name=Unnamed dimension=2 values=[0.398438,0.0234375] class=Point name=Unnamed dimension=2 values=[0.898438,0.523438] class=Point name=Unnamed dimension=2 values=[0.0859375,0.585938] class=Point name=Unnamed dimension=2 values=[0.585938,0.0859375] class=Point name=Unnamed dimension=2 values=[0.335938,0.335938] class=Point name=Unnamed dimension=2 values=[0.835938,0.835938] class=Point name=Unnamed dimension=2 values=[0.210938,0.210938] class=Point name=Unnamed dimension=2 values=[0.710938,0.710938] class=Point name=Unnamed dimension=2 values=[0.460938,0.960938] class=Point name=Unnamed dimension=2 values=[0.960938,0.460938] class=Point name=Unnamed dimension=2 values=[0.0546875,0.929688] class=Point name=Unnamed dimension=2 values=[0.554688,0.429688] class=Point name=Unnamed dimension=2 values=[0.304688,0.179688] class=Point name=Unnamed dimension=2 values=[0.804688,0.679688] class=Point name=Unnamed dimension=2 values=[0.179688,0.304688] class=Point name=Unnamed dimension=2 values=[0.679688,0.804688] class=Point name=Unnamed dimension=2 values=[0.429688,0.554688] class=Point name=Unnamed dimension=2 values=[0.929688,0.0546875] class=Point name=Unnamed dimension=2 values=[0.117188,0.117188] class=Point name=Unnamed dimension=2 values=[0.617188,0.617188] class=Point name=Unnamed dimension=2 values=[0.367188,0.867188] class=Point name=Unnamed dimension=2 values=[0.867188,0.367188] class=Point name=Unnamed dimension=2 values=[0.242188,0.742188] class=Point name=Unnamed dimension=2 values=[0.742188,0.242188] class=Point name=Unnamed dimension=2 values=[0.492188,0.492188] class=Point name=Unnamed dimension=2 values=[0.992188,0.992188] class=Point name=Unnamed dimension=2 values=[0.00390625,0.996094] class=Point name=Unnamed dimension=2 values=[0.503906,0.496094] class=Point name=Unnamed dimension=2 values=[0.253906,0.246094] class=Point name=Unnamed dimension=2 values=[0.753906,0.746094] class=Point name=Unnamed dimension=2 values=[0.128906,0.371094] class=Point name=Unnamed dimension=2 values=[0.628906,0.871094] class=Point name=Unnamed dimension=2 values=[0.378906,0.621094] class=Point name=Unnamed dimension=2 values=[0.878906,0.121094] class=Point name=Unnamed dimension=2 values=[0.0664062,0.0585938] class=Point name=Unnamed dimension=2 values=[0.566406,0.558594] class=Point name=Unnamed dimension=2 values=[0.316406,0.808594] class=Point name=Unnamed dimension=2 values=[0.816406,0.308594] class=Point name=Unnamed dimension=2 values=[0.191406,0.683594] class=Point name=Unnamed dimension=2 values=[0.691406,0.183594] class=Point name=Unnamed dimension=2 values=[0.441406,0.433594] class=Point name=Unnamed dimension=2 values=[0.941406,0.933594] class=Point name=Unnamed dimension=2 values=[0.0351562,0.464844] class=Point name=Unnamed dimension=2 values=[0.535156,0.964844] class=Point name=Unnamed dimension=2 values=[0.285156,0.714844] class=Point name=Unnamed dimension=2 values=[0.785156,0.214844] class=Point name=Unnamed dimension=2 values=[0.160156,0.839844] class=Point name=Unnamed dimension=2 values=[0.660156,0.339844] class=Point name=Unnamed dimension=2 values=[0.410156,0.0898438] class=Point name=Unnamed dimension=2 values=[0.910156,0.589844] class=Point name=Unnamed dimension=2 values=[0.0976562,0.527344] class=Point name=Unnamed dimension=2 values=[0.597656,0.0273438] class=Point name=Unnamed dimension=2 values=[0.347656,0.277344] class=Point name=Unnamed dimension=2 values=[0.847656,0.777344] class=Point name=Unnamed dimension=2 values=[0.222656,0.152344] class=Point name=Unnamed dimension=2 values=[0.722656,0.652344] class=Point name=Unnamed dimension=2 values=[0.472656,0.902344] class=Point name=Unnamed dimension=2 values=[0.972656,0.402344] class=Point name=Unnamed dimension=2 values=[0.0195312,0.199219] class=Point name=Unnamed dimension=2 values=[0.519531,0.699219] class=Point name=Unnamed dimension=2 values=[0.269531,0.949219] class=Point name=Unnamed dimension=2 values=[0.769531,0.449219] class=Point name=Unnamed dimension=2 values=[0.144531,0.574219] class=Point name=Unnamed dimension=2 values=[0.644531,0.0742188] class=Point name=Unnamed dimension=2 values=[0.394531,0.324219] class=Point name=Unnamed dimension=2 values=[0.894531,0.824219] class=Point name=Unnamed dimension=2 values=[0.0820312,0.761719] class=Point name=Unnamed dimension=2 values=[0.582031,0.261719] class=Point name=Unnamed dimension=2 values=[0.332031,0.0117188] class=Point name=Unnamed dimension=2 values=[0.832031,0.511719] class=Point name=Unnamed dimension=2 values=[0.207031,0.386719] class=Point name=Unnamed dimension=2 values=[0.707031,0.886719] class=Point name=Unnamed dimension=2 values=[0.457031,0.636719] class=Point name=Unnamed dimension=2 values=[0.957031,0.136719] class=Point name=Unnamed dimension=2 values=[0.0507812,0.730469] class=Point name=Unnamed dimension=2 values=[0.550781,0.230469] class=Point name=Unnamed dimension=2 values=[0.300781,0.480469] class=Point name=Unnamed dimension=2 values=[0.800781,0.980469] class=Point name=Unnamed dimension=2 values=[0.175781,0.105469] class=Point name=Unnamed dimension=2 values=[0.675781,0.605469] class=Point name=Unnamed dimension=2 values=[0.425781,0.855469] class=Point name=Unnamed dimension=2 values=[0.925781,0.355469] class=Point name=Unnamed dimension=2 values=[0.113281,0.292969] class=Point name=Unnamed dimension=2 values=[0.613281,0.792969] class=Point name=Unnamed dimension=2 values=[0.363281,0.542969] class=Point name=Unnamed dimension=2 values=[0.863281,0.0429688] class=Point name=Unnamed dimension=2 values=[0.238281,0.917969] class=Point name=Unnamed dimension=2 values=[0.738281,0.417969] class=Point name=Unnamed dimension=2 values=[0.488281,0.167969] class=Point name=Unnamed dimension=2 values=[0.988281,0.667969] class=Point name=Unnamed dimension=2 values=[0.0117188,0.332031] class=Point name=Unnamed dimension=2 values=[0.511719,0.832031] class=Point name=Unnamed dimension=2 values=[0.261719,0.582031] class=Point name=Unnamed dimension=2 values=[0.761719,0.0820312] class=Point name=Unnamed dimension=2 values=[0.136719,0.957031] class=Point name=Unnamed dimension=2 values=[0.636719,0.457031] class=Point name=Unnamed dimension=2 values=[0.386719,0.207031] class=Point name=Unnamed dimension=2 values=[0.886719,0.707031] class=Point name=Unnamed dimension=2 values=[0.0742188,0.644531] class=Point name=Unnamed dimension=2 values=[0.574219,0.144531] class=Point name=Unnamed dimension=2 values=[0.324219,0.394531] class=Point name=Unnamed dimension=2 values=[0.824219,0.894531] class=Point name=Unnamed dimension=2 values=[0.199219,0.0195312] class=Point name=Unnamed dimension=2 values=[0.699219,0.519531] class=Point name=Unnamed dimension=2 values=[0.449219,0.769531] class=Point name=Unnamed dimension=2 values=[0.949219,0.269531] class=Point name=Unnamed dimension=2 values=[0.0429688,0.863281] class=Point name=Unnamed dimension=2 values=[0.542969,0.363281] class=Point name=Unnamed dimension=2 values=[0.292969,0.113281] class=Point name=Unnamed dimension=2 values=[0.792969,0.613281] class=Point name=Unnamed dimension=2 values=[0.167969,0.488281] class=Point name=Unnamed dimension=2 values=[0.667969,0.988281] class=Point name=Unnamed dimension=2 values=[0.417969,0.738281] class=Point name=Unnamed dimension=2 values=[0.917969,0.238281] class=Point name=Unnamed dimension=2 values=[0.105469,0.175781] class=Point name=Unnamed dimension=2 values=[0.605469,0.675781] class=Point name=Unnamed dimension=2 values=[0.355469,0.925781] class=Point name=Unnamed dimension=2 values=[0.855469,0.425781] class=Point name=Unnamed dimension=2 values=[0.230469,0.550781] class=Point name=Unnamed dimension=2 values=[0.730469,0.0507812] class=Point name=Unnamed dimension=2 values=[0.480469,0.300781] class=Point name=Unnamed dimension=2 values=[0.980469,0.800781] class=Point name=Unnamed dimension=2 values=[0.0273438,0.597656] class=Point name=Unnamed dimension=2 values=[0.527344,0.0976562] class=Point name=Unnamed dimension=2 values=[0.277344,0.347656] class=Point name=Unnamed dimension=2 values=[0.777344,0.847656] class=Point name=Unnamed dimension=2 values=[0.152344,0.222656] class=Point name=Unnamed dimension=2 values=[0.652344,0.722656] class=Point name=Unnamed dimension=2 values=[0.402344,0.972656] class=Point name=Unnamed dimension=2 values=[0.902344,0.472656] class=Point name=Unnamed dimension=2 values=[0.0898438,0.410156] class=Point name=Unnamed dimension=2 values=[0.589844,0.910156] class=Point name=Unnamed dimension=2 values=[0.339844,0.660156] class=Point name=Unnamed dimension=2 values=[0.839844,0.160156] class=Point name=Unnamed dimension=2 values=[0.214844,0.785156] class=Point name=Unnamed dimension=2 values=[0.714844,0.285156] class=Point name=Unnamed dimension=2 values=[0.464844,0.0351562] class=Point name=Unnamed dimension=2 values=[0.964844,0.535156] class=Point name=Unnamed dimension=2 values=[0.0585938,0.0664062] class=Point name=Unnamed dimension=2 values=[0.558594,0.566406] class=Point name=Unnamed dimension=2 values=[0.308594,0.816406] class=Point name=Unnamed dimension=2 values=[0.808594,0.316406] class=Point name=Unnamed dimension=2 values=[0.183594,0.691406] class=Point name=Unnamed dimension=2 values=[0.683594,0.191406] class=Point name=Unnamed dimension=2 values=[0.433594,0.441406] class=Point name=Unnamed dimension=2 values=[0.933594,0.941406] class=Point name=Unnamed dimension=2 values=[0.121094,0.878906] class=Point name=Unnamed dimension=2 values=[0.621094,0.378906] class=Point name=Unnamed dimension=2 values=[0.371094,0.128906] class=Point name=Unnamed dimension=2 values=[0.871094,0.628906] class=Point name=Unnamed dimension=2 values=[0.246094,0.253906] class=Point name=Unnamed dimension=2 values=[0.746094,0.753906] class=Point name=Unnamed dimension=2 values=[0.496094,0.503906] class=Point name=Unnamed dimension=2 values=[0.996094,0.00390625] class=Point name=Unnamed dimension=2 values=[0.00195312,0.501953] class=Point name=Unnamed dimension=2 values=[0.501953,0.00195312] class=Point name=Unnamed dimension=2 values=[0.251953,0.251953] class=Point name=Unnamed dimension=2 values=[0.751953,0.751953] class=Point name=Unnamed dimension=2 values=[0.126953,0.126953] class=Point name=Unnamed dimension=2 values=[0.626953,0.626953] class=Point name=Unnamed dimension=2 values=[0.376953,0.876953] class=Point name=Unnamed dimension=2 values=[0.876953,0.376953] class=Point name=Unnamed dimension=2 values=[0.0644531,0.439453] class=Point name=Unnamed dimension=2 values=[0.564453,0.939453] class=Point name=Unnamed dimension=2 values=[0.314453,0.689453] class=Point name=Unnamed dimension=2 values=[0.814453,0.189453] class=Point name=Unnamed dimension=2 values=[0.189453,0.814453] class=Point name=Unnamed dimension=2 values=[0.689453,0.314453] class=Point name=Unnamed dimension=2 values=[0.439453,0.0644531] class=Point name=Unnamed dimension=2 values=[0.939453,0.564453] class=Point name=Unnamed dimension=2 values=[0.0332031,0.0332031] class=Point name=Unnamed dimension=2 values=[0.533203,0.533203] class=Point name=Unnamed dimension=2 values=[0.283203,0.783203] class=Point name=Unnamed dimension=2 values=[0.783203,0.283203] class=Point name=Unnamed dimension=2 values=[0.158203,0.658203] class=Point name=Unnamed dimension=2 values=[0.658203,0.158203] class=Point name=Unnamed dimension=2 values=[0.408203,0.408203] class=Point name=Unnamed dimension=2 values=[0.908203,0.908203] class=Point name=Unnamed dimension=2 values=[0.0957031,0.970703] class=Point name=Unnamed dimension=2 values=[0.595703,0.470703] class=Point name=Unnamed dimension=2 values=[0.345703,0.220703] class=Point name=Unnamed dimension=2 values=[0.845703,0.720703] class=Point name=Unnamed dimension=2 values=[0.220703,0.345703] class=Point name=Unnamed dimension=2 values=[0.720703,0.845703] class=Point name=Unnamed dimension=2 values=[0.470703,0.595703] class=Point name=Unnamed dimension=2 values=[0.970703,0.0957031] class=Point name=Unnamed dimension=2 values=[0.0175781,0.298828] class=Point name=Unnamed dimension=2 values=[0.517578,0.798828] class=Point name=Unnamed dimension=2 values=[0.267578,0.548828] class=Point name=Unnamed dimension=2 values=[0.767578,0.0488281] class=Point name=Unnamed dimension=2 values=[0.142578,0.923828] class=Point name=Unnamed dimension=2 values=[0.642578,0.423828] class=Point name=Unnamed dimension=2 values=[0.392578,0.173828] class=Point name=Unnamed dimension=2 values=[0.892578,0.673828] class=Point name=Unnamed dimension=2 values=[0.0800781,0.736328] class=Point name=Unnamed dimension=2 values=[0.580078,0.236328] class=Point name=Unnamed dimension=2 values=[0.330078,0.486328] class=Point name=Unnamed dimension=2 values=[0.830078,0.986328] class=Point name=Unnamed dimension=2 values=[0.205078,0.111328] class=Point name=Unnamed dimension=2 values=[0.705078,0.611328] class=Point name=Unnamed dimension=2 values=[0.455078,0.861328] class=Point name=Unnamed dimension=2 values=[0.955078,0.361328] class=Point name=Unnamed dimension=2 values=[0.0488281,0.767578] class=Point name=Unnamed dimension=2 values=[0.548828,0.267578] class=Point name=Unnamed dimension=2 values=[0.298828,0.0175781] class=Point name=Unnamed dimension=2 values=[0.798828,0.517578] class=Point name=Unnamed dimension=2 values=[0.173828,0.392578] class=Point name=Unnamed dimension=2 values=[0.673828,0.892578] class=Point name=Unnamed dimension=2 values=[0.423828,0.642578] class=Point name=Unnamed dimension=2 values=[0.923828,0.142578] class=Point name=Unnamed dimension=2 values=[0.111328,0.205078] class=Point name=Unnamed dimension=2 values=[0.611328,0.705078] class=Point name=Unnamed dimension=2 values=[0.361328,0.955078] class=Point name=Unnamed dimension=2 values=[0.861328,0.455078] class=Point name=Unnamed dimension=2 values=[0.236328,0.580078] class=Point name=Unnamed dimension=2 values=[0.736328,0.0800781] class=Point name=Unnamed dimension=2 values=[0.486328,0.330078] class=Point name=Unnamed dimension=2 values=[0.986328,0.830078] class=Point name=Unnamed dimension=2 values=[0.00976562,0.166016] class=Point name=Unnamed dimension=2 values=[0.509766,0.666016] class=Point name=Unnamed dimension=2 values=[0.259766,0.916016] class=Point name=Unnamed dimension=2 values=[0.759766,0.416016] class=Point name=Unnamed dimension=2 values=[0.134766,0.541016] class=Point name=Unnamed dimension=2 values=[0.634766,0.0410156] class=Point name=Unnamed dimension=2 values=[0.384766,0.291016] class=Point name=Unnamed dimension=2 values=[0.884766,0.791016] class=Point name=Unnamed dimension=2 values=[0.0722656,0.853516] class=Point name=Unnamed dimension=2 values=[0.572266,0.353516] class=Point name=Unnamed dimension=2 values=[0.322266,0.103516] class=Point name=Unnamed dimension=2 values=[0.822266,0.603516] class=Point name=Unnamed dimension=2 values=[0.197266,0.478516] class=Point name=Unnamed dimension=2 values=[0.697266,0.978516] class=Point name=Unnamed dimension=2 values=[0.447266,0.728516] class=Point name=Unnamed dimension=2 values=[0.947266,0.228516] class=Point name=Unnamed dimension=2 values=[0.0410156,0.634766] class=Point name=Unnamed dimension=2 values=[0.541016,0.134766] class=Point name=Unnamed dimension=2 values=[0.291016,0.384766] class=Point name=Unnamed dimension=2 values=[0.791016,0.884766] class=Point name=Unnamed dimension=2 values=[0.166016,0.00976562] class=Point name=Unnamed dimension=2 values=[0.666016,0.509766] class=Point name=Unnamed dimension=2 values=[0.416016,0.759766] class=Point name=Unnamed dimension=2 values=[0.916016,0.259766] class=Point name=Unnamed dimension=2 values=[0.103516,0.322266] class=Point name=Unnamed dimension=2 values=[0.603516,0.822266] class=Point name=Unnamed dimension=2 values=[0.353516,0.572266] class=Point name=Unnamed dimension=2 values=[0.853516,0.0722656] class=Point name=Unnamed dimension=2 values=[0.228516,0.947266] class=Point name=Unnamed dimension=2 values=[0.728516,0.447266] class=Point name=Unnamed dimension=2 values=[0.478516,0.197266] class=Point name=Unnamed dimension=2 values=[0.978516,0.697266] class=Point name=Unnamed dimension=2 values=[0.0253906,0.900391] class=Point name=Unnamed dimension=2 values=[0.525391,0.400391] class=Point name=Unnamed dimension=2 values=[0.275391,0.150391] class=Point name=Unnamed dimension=2 values=[0.775391,0.650391] class=Point name=Unnamed dimension=2 values=[0.150391,0.275391] class=Point name=Unnamed dimension=2 values=[0.650391,0.775391] class=Point name=Unnamed dimension=2 values=[0.400391,0.525391] class=Point name=Unnamed dimension=2 values=[0.900391,0.0253906] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0878906] class=Point name=Unnamed dimension=2 values=[0.587891,0.587891] class=Point name=Unnamed dimension=2 values=[0.337891,0.837891] class=Point name=Unnamed dimension=2 values=[0.837891,0.337891] class=Point name=Unnamed dimension=2 values=[0.212891,0.712891] class=Point name=Unnamed dimension=2 values=[0.712891,0.212891] class=Point name=Unnamed dimension=2 values=[0.462891,0.462891] class=Point name=Unnamed dimension=2 values=[0.962891,0.962891] class=Point name=Unnamed dimension=2 values=[0.0566406,0.431641] class=Point name=Unnamed dimension=2 values=[0.556641,0.931641] class=Point name=Unnamed dimension=2 values=[0.306641,0.681641] class=Point name=Unnamed dimension=2 values=[0.806641,0.181641] class=Point name=Unnamed dimension=2 values=[0.181641,0.806641] class=Point name=Unnamed dimension=2 values=[0.681641,0.306641] class=Point name=Unnamed dimension=2 values=[0.431641,0.0566406] class=Point name=Unnamed dimension=2 values=[0.931641,0.556641] class=Point name=Unnamed dimension=2 values=[0.119141,0.619141] class=Point name=Unnamed dimension=2 values=[0.619141,0.119141] class=Point name=Unnamed dimension=2 values=[0.369141,0.369141] class=Point name=Unnamed dimension=2 values=[0.869141,0.869141] class=Point name=Unnamed dimension=2 values=[0.244141,0.244141] class=Point name=Unnamed dimension=2 values=[0.744141,0.744141] class=Point name=Unnamed dimension=2 values=[0.494141,0.994141] class=Point name=Unnamed dimension=2 values=[0.994141,0.494141] class=Point name=Unnamed dimension=2 values=[0.00585938,0.498047] class=Point name=Unnamed dimension=2 values=[0.505859,0.998047] class=Point name=Unnamed dimension=2 values=[0.255859,0.748047] class=Point name=Unnamed dimension=2 values=[0.755859,0.248047] class=Point name=Unnamed dimension=2 values=[0.130859,0.873047] class=Point name=Unnamed dimension=2 values=[0.630859,0.373047] class=Point name=Unnamed dimension=2 values=[0.380859,0.123047] class=Point name=Unnamed dimension=2 values=[0.880859,0.623047] class=Point name=Unnamed dimension=2 values=[0.0683594,0.560547] class=Point name=Unnamed dimension=2 values=[0.568359,0.0605469] class=Point name=Unnamed dimension=2 values=[0.318359,0.310547] class=Point name=Unnamed dimension=2 values=[0.818359,0.810547] class=Point name=Unnamed dimension=2 values=[0.193359,0.185547] class=Point name=Unnamed dimension=2 values=[0.693359,0.685547] class=Point name=Unnamed dimension=2 values=[0.443359,0.935547] class=Point name=Unnamed dimension=2 values=[0.943359,0.435547] class=Point name=Unnamed dimension=2 values=[0.0371094,0.966797] class=Point name=Unnamed dimension=2 values=[0.537109,0.466797] class=Point name=Unnamed dimension=2 values=[0.287109,0.216797] class=Point name=Unnamed dimension=2 values=[0.787109,0.716797] class=Point name=Unnamed dimension=2 values=[0.162109,0.341797] class=Point name=Unnamed dimension=2 values=[0.662109,0.841797] class=Point name=Unnamed dimension=2 values=[0.412109,0.591797] class=Point name=Unnamed dimension=2 values=[0.912109,0.0917969] class=Point name=Unnamed dimension=2 values=[0.0996094,0.0292969] class=Point name=Unnamed dimension=2 values=[0.599609,0.529297] class=Point name=Unnamed dimension=2 values=[0.349609,0.779297] class=Point name=Unnamed dimension=2 values=[0.849609,0.279297] class=Point name=Unnamed dimension=2 values=[0.224609,0.654297] class=Point name=Unnamed dimension=2 values=[0.724609,0.154297] class=Point name=Unnamed dimension=2 values=[0.474609,0.404297] class=Point name=Unnamed dimension=2 values=[0.974609,0.904297] class=Point name=Unnamed dimension=2 values=[0.0214844,0.701172] class=Point name=Unnamed dimension=2 values=[0.521484,0.201172] class=Point name=Unnamed dimension=2 values=[0.271484,0.451172] class=Point name=Unnamed dimension=2 values=[0.771484,0.951172] class=Point name=Unnamed dimension=2 values=[0.146484,0.0761719] class=Point name=Unnamed dimension=2 values=[0.646484,0.576172] class=Point name=Unnamed dimension=2 values=[0.396484,0.826172] class=Point name=Unnamed dimension=2 values=[0.896484,0.326172] class=Point name=Unnamed dimension=2 values=[0.0839844,0.263672] class=Point name=Unnamed dimension=2 values=[0.583984,0.763672] class=Point name=Unnamed dimension=2 values=[0.333984,0.513672] class=Point name=Unnamed dimension=2 values=[0.833984,0.0136719] class=Point name=Unnamed dimension=2 values=[0.208984,0.888672] class=Point name=Unnamed dimension=2 values=[0.708984,0.388672] class=Point name=Unnamed dimension=2 values=[0.458984,0.138672] class=Point name=Unnamed dimension=2 values=[0.958984,0.638672] class=Point name=Unnamed dimension=2 values=[0.0527344,0.232422] class=Point name=Unnamed dimension=2 values=[0.552734,0.732422] class=Point name=Unnamed dimension=2 values=[0.302734,0.982422] class=Point name=Unnamed dimension=2 values=[0.802734,0.482422] class=Point name=Unnamed dimension=2 values=[0.177734,0.607422] class=Point name=Unnamed dimension=2 values=[0.677734,0.107422] class=Point name=Unnamed dimension=2 values=[0.427734,0.357422] class=Point name=Unnamed dimension=2 values=[0.927734,0.857422] class=Point name=Unnamed dimension=2 values=[0.115234,0.794922] class=Point name=Unnamed dimension=2 values=[0.615234,0.294922] class=Point name=Unnamed dimension=2 values=[0.365234,0.0449219] class=Point name=Unnamed dimension=2 values=[0.865234,0.544922] class=Point name=Unnamed dimension=2 values=[0.240234,0.419922] class=Point name=Unnamed dimension=2 values=[0.740234,0.919922] class=Point name=Unnamed dimension=2 values=[0.490234,0.669922] class=Point name=Unnamed dimension=2 values=[0.990234,0.169922] class=Point name=Unnamed dimension=2 values=[0.0136719,0.833984] class=Point name=Unnamed dimension=2 values=[0.513672,0.333984] class=Point name=Unnamed dimension=2 values=[0.263672,0.0839844] class=Point name=Unnamed dimension=2 values=[0.763672,0.583984] class=Point name=Unnamed dimension=2 values=[0.138672,0.458984] class=Point name=Unnamed dimension=2 values=[0.638672,0.958984] class=Point name=Unnamed dimension=2 values=[0.388672,0.708984] class=Point name=Unnamed dimension=2 values=[0.888672,0.208984] class=Point name=Unnamed dimension=2 values=[0.0761719,0.146484] class=Point name=Unnamed dimension=2 values=[0.576172,0.646484] class=Point name=Unnamed dimension=2 values=[0.326172,0.896484] class=Point name=Unnamed dimension=2 values=[0.826172,0.396484] class=Point name=Unnamed dimension=2 values=[0.201172,0.521484] class=Point name=Unnamed dimension=2 values=[0.701172,0.0214844] class=Point name=Unnamed dimension=2 values=[0.451172,0.271484] class=Point name=Unnamed dimension=2 values=[0.951172,0.771484] class=Point name=Unnamed dimension=2 values=[0.0449219,0.365234] class=Point name=Unnamed dimension=2 values=[0.544922,0.865234] class=Point name=Unnamed dimension=2 values=[0.294922,0.615234] class=Point name=Unnamed dimension=2 values=[0.794922,0.115234] class=Point name=Unnamed dimension=2 values=[0.169922,0.990234] class=Point name=Unnamed dimension=2 values=[0.669922,0.490234] class=Point name=Unnamed dimension=2 values=[0.419922,0.240234] class=Point name=Unnamed dimension=2 values=[0.919922,0.740234] class=Point name=Unnamed dimension=2 values=[0.107422,0.677734] class=Point name=Unnamed dimension=2 values=[0.607422,0.177734] class=Point name=Unnamed dimension=2 values=[0.357422,0.427734] class=Point name=Unnamed dimension=2 values=[0.857422,0.927734] class=Point name=Unnamed dimension=2 values=[0.232422,0.0527344] class=Point name=Unnamed dimension=2 values=[0.732422,0.552734] class=Point name=Unnamed dimension=2 values=[0.482422,0.802734] class=Point name=Unnamed dimension=2 values=[0.982422,0.302734] class=Point name=Unnamed dimension=2 values=[0.0292969,0.0996094] class=Point name=Unnamed dimension=2 values=[0.529297,0.599609] class=Point name=Unnamed dimension=2 values=[0.279297,0.849609] class=Point name=Unnamed dimension=2 values=[0.779297,0.349609] class=Point name=Unnamed dimension=2 values=[0.154297,0.724609] class=Point name=Unnamed dimension=2 values=[0.654297,0.224609] class=Point name=Unnamed dimension=2 values=[0.404297,0.474609] class=Point name=Unnamed dimension=2 values=[0.904297,0.974609] class=Point name=Unnamed dimension=2 values=[0.0917969,0.912109] class=Point name=Unnamed dimension=2 values=[0.591797,0.412109] class=Point name=Unnamed dimension=2 values=[0.341797,0.162109] class=Point name=Unnamed dimension=2 values=[0.841797,0.662109] class=Point name=Unnamed dimension=2 values=[0.216797,0.287109] class=Point name=Unnamed dimension=2 values=[0.716797,0.787109] class=Point name=Unnamed dimension=2 values=[0.466797,0.537109] class=Point name=Unnamed dimension=2 values=[0.966797,0.0371094] class=Point name=Unnamed dimension=2 values=[0.0605469,0.568359] class=Point name=Unnamed dimension=2 values=[0.560547,0.0683594] class=Point name=Unnamed dimension=2 values=[0.310547,0.318359] class=Point name=Unnamed dimension=2 values=[0.810547,0.818359] class=Point name=Unnamed dimension=2 values=[0.185547,0.193359] class=Point name=Unnamed dimension=2 values=[0.685547,0.693359] class=Point name=Unnamed dimension=2 values=[0.435547,0.943359] class=Point name=Unnamed dimension=2 values=[0.935547,0.443359] class=Point name=Unnamed dimension=2 values=[0.123047,0.380859] class=Point name=Unnamed dimension=2 values=[0.623047,0.880859] class=Point name=Unnamed dimension=2 values=[0.373047,0.630859] class=Point name=Unnamed dimension=2 values=[0.873047,0.130859] class=Point name=Unnamed dimension=2 values=[0.248047,0.755859] class=Point name=Unnamed dimension=2 values=[0.748047,0.255859] class=Point name=Unnamed dimension=2 values=[0.498047,0.00585938] class=Point name=Unnamed dimension=2 values=[0.998047,0.505859] class=Point name=Unnamed dimension=2 values=[0.000976562,0.75293] class=Point name=Unnamed dimension=2 values=[0.500977,0.25293] class=Point name=Unnamed dimension=2 values=[0.250977,0.00292969] class=Point name=Unnamed dimension=2 values=[0.750977,0.50293] class=Point name=Unnamed dimension=2 values=[0.125977,0.37793] class=Point name=Unnamed dimension=2 values=[0.625977,0.87793] class=Point name=Unnamed dimension=2 values=[0.375977,0.62793] class=Point name=Unnamed dimension=2 values=[0.875977,0.12793] class=Point name=Unnamed dimension=2 values=[0.0634766,0.19043] class=Point name=Unnamed dimension=2 values=[0.563477,0.69043] class=Point name=Unnamed dimension=2 values=[0.313477,0.94043] class=Point name=Unnamed dimension=2 values=[0.813477,0.44043] class=Point name=Unnamed dimension=2 values=[0.188477,0.56543] class=Point name=Unnamed dimension=2 values=[0.688477,0.0654297] class=Point name=Unnamed dimension=2 values=[0.438477,0.31543] class=Point name=Unnamed dimension=2 values=[0.938477,0.81543] class=Point name=Unnamed dimension=2 values=[0.0322266,0.28418] class=Point name=Unnamed dimension=2 values=[0.532227,0.78418] class=Point name=Unnamed dimension=2 values=[0.282227,0.53418] class=Point name=Unnamed dimension=2 values=[0.782227,0.0341797] class=Point name=Unnamed dimension=2 values=[0.157227,0.90918] class=Point name=Unnamed dimension=2 values=[0.657227,0.40918] class=Point name=Unnamed dimension=2 values=[0.407227,0.15918] class=Point name=Unnamed dimension=2 values=[0.907227,0.65918] class=Point name=Unnamed dimension=2 values=[0.0947266,0.72168] class=Point name=Unnamed dimension=2 values=[0.594727,0.22168] class=Point name=Unnamed dimension=2 values=[0.344727,0.47168] class=Point name=Unnamed dimension=2 values=[0.844727,0.97168] class=Point name=Unnamed dimension=2 values=[0.219727,0.0966797] class=Point name=Unnamed dimension=2 values=[0.719727,0.59668] class=Point name=Unnamed dimension=2 values=[0.469727,0.84668] class=Point name=Unnamed dimension=2 values=[0.969727,0.34668] class=Point name=Unnamed dimension=2 values=[0.0166016,0.0498047] class=Point name=Unnamed dimension=2 values=[0.516602,0.549805] class=Point name=Unnamed dimension=2 values=[0.266602,0.799805] class=Point name=Unnamed dimension=2 values=[0.766602,0.299805] class=Point name=Unnamed dimension=2 values=[0.141602,0.674805] class=Point name=Unnamed dimension=2 values=[0.641602,0.174805] class=Point name=Unnamed dimension=2 values=[0.391602,0.424805] class=Point name=Unnamed dimension=2 values=[0.891602,0.924805] class=Point name=Unnamed dimension=2 values=[0.0791016,0.987305] class=Point name=Unnamed dimension=2 values=[0.579102,0.487305] class=Point name=Unnamed dimension=2 values=[0.329102,0.237305] class=Point name=Unnamed dimension=2 values=[0.829102,0.737305] class=Point name=Unnamed dimension=2 values=[0.204102,0.362305] class=Point name=Unnamed dimension=2 values=[0.704102,0.862305] class=Point name=Unnamed dimension=2 values=[0.454102,0.612305] class=Point name=Unnamed dimension=2 values=[0.954102,0.112305] class=Point name=Unnamed dimension=2 values=[0.0478516,0.518555] class=Point name=Unnamed dimension=2 values=[0.547852,0.0185547] class=Point name=Unnamed dimension=2 values=[0.297852,0.268555] class=Point name=Unnamed dimension=2 values=[0.797852,0.768555] class=Point name=Unnamed dimension=2 values=[0.172852,0.143555] class=Point name=Unnamed dimension=2 values=[0.672852,0.643555] class=Point name=Unnamed dimension=2 values=[0.422852,0.893555] class=Point name=Unnamed dimension=2 values=[0.922852,0.393555] class=Point name=Unnamed dimension=2 values=[0.110352,0.456055] class=Point name=Unnamed dimension=2 values=[0.610352,0.956055] class=Point name=Unnamed dimension=2 values=[0.360352,0.706055] class=Point name=Unnamed dimension=2 values=[0.860352,0.206055] class=Point name=Unnamed dimension=2 values=[0.235352,0.831055] class=Point name=Unnamed dimension=2 values=[0.735352,0.331055] class=Point name=Unnamed dimension=2 values=[0.485352,0.0810547] class=Point name=Unnamed dimension=2 values=[0.985352,0.581055] class=Point name=Unnamed dimension=2 values=[0.00878906,0.416992] class=Point name=Unnamed dimension=2 values=[0.508789,0.916992] class=Point name=Unnamed dimension=2 values=[0.258789,0.666992] class=Point name=Unnamed dimension=2 values=[0.758789,0.166992] class=Point name=Unnamed dimension=2 values=[0.133789,0.791992] class=Point name=Unnamed dimension=2 values=[0.633789,0.291992] class=Point name=Unnamed dimension=2 values=[0.383789,0.0419922] class=Point name=Unnamed dimension=2 values=[0.883789,0.541992] class=Point name=Unnamed dimension=2 values=[0.0712891,0.604492] class=Point name=Unnamed dimension=2 values=[0.571289,0.104492] class=Point name=Unnamed dimension=2 values=[0.321289,0.354492] class=Point name=Unnamed dimension=2 values=[0.821289,0.854492] class=Point name=Unnamed dimension=2 values=[0.196289,0.229492] class=Point name=Unnamed dimension=2 values=[0.696289,0.729492] class=Point name=Unnamed dimension=2 values=[0.446289,0.979492] class=Point name=Unnamed dimension=2 values=[0.946289,0.479492] class=Point name=Unnamed dimension=2 values=[0.0400391,0.885742] class=Point name=Unnamed dimension=2 values=[0.540039,0.385742] class=Point name=Unnamed dimension=2 values=[0.290039,0.135742] class=Point name=Unnamed dimension=2 values=[0.790039,0.635742] class=Point name=Unnamed dimension=2 values=[0.165039,0.260742] class=Point name=Unnamed dimension=2 values=[0.665039,0.760742] class=Point name=Unnamed dimension=2 values=[0.415039,0.510742] class=Point name=Unnamed dimension=2 values=[0.915039,0.0107422] class=Point name=Unnamed dimension=2 values=[0.102539,0.0732422] class=Point name=Unnamed dimension=2 values=[0.602539,0.573242] class=Point name=Unnamed dimension=2 values=[0.352539,0.823242] class=Point name=Unnamed dimension=2 values=[0.852539,0.323242] class=Point name=Unnamed dimension=2 values=[0.227539,0.698242] class=Point name=Unnamed dimension=2 values=[0.727539,0.198242] class=Point name=Unnamed dimension=2 values=[0.477539,0.448242] class=Point name=Unnamed dimension=2 values=[0.977539,0.948242] class=Point name=Unnamed dimension=2 values=[0.0244141,0.651367] class=Point name=Unnamed dimension=2 values=[0.524414,0.151367] class=Point name=Unnamed dimension=2 values=[0.274414,0.401367] class=Point name=Unnamed dimension=2 values=[0.774414,0.901367] class=Point name=Unnamed dimension=2 values=[0.149414,0.0263672] class=Point name=Unnamed dimension=2 values=[0.649414,0.526367] class=Point name=Unnamed dimension=2 values=[0.399414,0.776367] class=Point name=Unnamed dimension=2 values=[0.899414,0.276367] class=Point name=Unnamed dimension=2 values=[0.0869141,0.338867] class=Point name=Unnamed dimension=2 values=[0.586914,0.838867] class=Point name=Unnamed dimension=2 values=[0.336914,0.588867] class=Point name=Unnamed dimension=2 values=[0.836914,0.0888672] class=Point name=Unnamed dimension=2 values=[0.211914,0.963867] class=Point name=Unnamed dimension=2 values=[0.711914,0.463867] class=Point name=Unnamed dimension=2 values=[0.461914,0.213867] class=Point name=Unnamed dimension=2 values=[0.961914,0.713867] class=Point name=Unnamed dimension=2 values=[0.0556641,0.182617] class=Point name=Unnamed dimension=2 values=[0.555664,0.682617] class=Point name=Unnamed dimension=2 values=[0.305664,0.932617] class=Point name=Unnamed dimension=2 values=[0.805664,0.432617] class=Point name=Unnamed dimension=2 values=[0.180664,0.557617] class=Point name=Unnamed dimension=2 values=[0.680664,0.0576172] class=Point name=Unnamed dimension=2 values=[0.430664,0.307617] class=Point name=Unnamed dimension=2 values=[0.930664,0.807617] class=Point name=Unnamed dimension=2 values=[0.118164,0.870117] class=Point name=Unnamed dimension=2 values=[0.618164,0.370117] class=Point name=Unnamed dimension=2 values=[0.368164,0.120117] class=Point name=Unnamed dimension=2 values=[0.868164,0.620117] class=Point name=Unnamed dimension=2 values=[0.243164,0.495117] class=Point name=Unnamed dimension=2 values=[0.743164,0.995117] class=Point name=Unnamed dimension=2 values=[0.493164,0.745117] class=Point name=Unnamed dimension=2 values=[0.993164,0.245117] class=Point name=Unnamed dimension=2 values=[0.00488281,0.249023] class=Point name=Unnamed dimension=2 values=[0.504883,0.749023] class=Point name=Unnamed dimension=2 values=[0.254883,0.999023] class=Point name=Unnamed dimension=2 values=[0.754883,0.499023] class=Point name=Unnamed dimension=2 values=[0.129883,0.624023] class=Point name=Unnamed dimension=2 values=[0.629883,0.124023] class=Point name=Unnamed dimension=2 values=[0.379883,0.374023] class=Point name=Unnamed dimension=2 values=[0.879883,0.874023] class=Point name=Unnamed dimension=2 values=[0.0673828,0.811523] class=Point name=Unnamed dimension=2 values=[0.567383,0.311523] class=Point name=Unnamed dimension=2 values=[0.317383,0.0615234] class=Point name=Unnamed dimension=2 values=[0.817383,0.561523] class=Point name=Unnamed dimension=2 values=[0.192383,0.436523] class=Point name=Unnamed dimension=2 values=[0.692383,0.936523] class=Point name=Unnamed dimension=2 values=[0.442383,0.686523] class=Point name=Unnamed dimension=2 values=[0.942383,0.186523] class=Point name=Unnamed dimension=2 values=[0.0361328,0.717773] class=Point name=Unnamed dimension=2 values=[0.536133,0.217773] class=Point name=Unnamed dimension=2 values=[0.286133,0.467773] class=Point name=Unnamed dimension=2 values=[0.786133,0.967773] class=Point name=Unnamed dimension=2 values=[0.161133,0.0927734] class=Point name=Unnamed dimension=2 values=[0.661133,0.592773] class=Point name=Unnamed dimension=2 values=[0.411133,0.842773] class=Point name=Unnamed dimension=2 values=[0.911133,0.342773] class=Point name=Unnamed dimension=2 values=[0.0986328,0.280273] class=Point name=Unnamed dimension=2 values=[0.598633,0.780273] class=Point name=Unnamed dimension=2 values=[0.348633,0.530273] class=Point name=Unnamed dimension=2 values=[0.848633,0.0302734] class=Point name=Unnamed dimension=2 values=[0.223633,0.905273] class=Point name=Unnamed dimension=2 values=[0.723633,0.405273] class=Point name=Unnamed dimension=2 values=[0.473633,0.155273] class=Point name=Unnamed dimension=2 values=[0.973633,0.655273] class=Point name=Unnamed dimension=2 values=[0.0205078,0.952148] class=Point name=Unnamed dimension=2 values=[0.520508,0.452148] class=Point name=Unnamed dimension=2 values=[0.270508,0.202148] class=Point name=Unnamed dimension=2 values=[0.770508,0.702148] class=Point name=Unnamed dimension=2 values=[0.145508,0.327148] class=Point name=Unnamed dimension=2 values=[0.645508,0.827148] class=Point name=Unnamed dimension=2 values=[0.395508,0.577148] class=Point name=Unnamed dimension=2 values=[0.895508,0.0771484] class=Point name=Unnamed dimension=2 values=[0.0830078,0.0146484] class=Point name=Unnamed dimension=2 values=[0.583008,0.514648] class=Point name=Unnamed dimension=2 values=[0.333008,0.764648] class=Point name=Unnamed dimension=2 values=[0.833008,0.264648] class=Point name=Unnamed dimension=2 values=[0.208008,0.639648] class=Point name=Unnamed dimension=2 values=[0.708008,0.139648] class=Point name=Unnamed dimension=2 values=[0.458008,0.389648] class=Point name=Unnamed dimension=2 values=[0.958008,0.889648] class=Point name=Unnamed dimension=2 values=[0.0517578,0.483398] class=Point name=Unnamed dimension=2 values=[0.551758,0.983398] class=Point name=Unnamed dimension=2 values=[0.301758,0.733398] class=Point name=Unnamed dimension=2 values=[0.801758,0.233398] class=Point name=Unnamed dimension=2 values=[0.176758,0.858398] class=Point name=Unnamed dimension=2 values=[0.676758,0.358398] class=Point name=Unnamed dimension=2 values=[0.426758,0.108398] class=Point name=Unnamed dimension=2 values=[0.926758,0.608398] class=Point name=Unnamed dimension=2 values=[0.114258,0.545898] class=Point name=Unnamed dimension=2 values=[0.614258,0.0458984] class=Point name=Unnamed dimension=2 values=[0.364258,0.295898] class=Point name=Unnamed dimension=2 values=[0.864258,0.795898] class=Point name=Unnamed dimension=2 values=[0.239258,0.170898] class=Point name=Unnamed dimension=2 values=[0.739258,0.670898] class=Point name=Unnamed dimension=2 values=[0.489258,0.920898] class=Point name=Unnamed dimension=2 values=[0.989258,0.420898] class=Point name=Unnamed dimension=2 values=[0.0126953,0.584961] class=Point name=Unnamed dimension=2 values=[0.512695,0.0849609] class=Point name=Unnamed dimension=2 values=[0.262695,0.334961] class=Point name=Unnamed dimension=2 values=[0.762695,0.834961] class=Point name=Unnamed dimension=2 values=[0.137695,0.209961] class=Point name=Unnamed dimension=2 values=[0.637695,0.709961] class=Point name=Unnamed dimension=2 values=[0.387695,0.959961] class=Point name=Unnamed dimension=2 values=[0.887695,0.459961] class=Point name=Unnamed dimension=2 values=[0.0751953,0.397461] class=Point name=Unnamed dimension=2 values=[0.575195,0.897461] class=Point name=Unnamed dimension=2 values=[0.325195,0.647461] class=Point name=Unnamed dimension=2 values=[0.825195,0.147461] class=Point name=Unnamed dimension=2 values=[0.200195,0.772461] class=Point name=Unnamed dimension=2 values=[0.700195,0.272461] class=Point name=Unnamed dimension=2 values=[0.450195,0.0224609] class=Point name=Unnamed dimension=2 values=[0.950195,0.522461] class=Point name=Unnamed dimension=2 values=[0.0439453,0.116211] class=Point name=Unnamed dimension=2 values=[0.543945,0.616211] class=Point name=Unnamed dimension=2 values=[0.293945,0.866211] class=Point name=Unnamed dimension=2 values=[0.793945,0.366211] class=Point name=Unnamed dimension=2 values=[0.168945,0.741211] class=Point name=Unnamed dimension=2 values=[0.668945,0.241211] class=Point name=Unnamed dimension=2 values=[0.418945,0.491211] class=Point name=Unnamed dimension=2 values=[0.918945,0.991211] class=Point name=Unnamed dimension=2 values=[0.106445,0.928711] class=Point name=Unnamed dimension=2 values=[0.606445,0.428711] class=Point name=Unnamed dimension=2 values=[0.356445,0.178711] class=Point name=Unnamed dimension=2 values=[0.856445,0.678711] class=Point name=Unnamed dimension=2 values=[0.231445,0.303711] class=Point name=Unnamed dimension=2 values=[0.731445,0.803711] class=Point name=Unnamed dimension=2 values=[0.481445,0.553711] class=Point name=Unnamed dimension=2 values=[0.981445,0.0537109] class=Point name=Unnamed dimension=2 values=[0.0283203,0.350586] class=Point name=Unnamed dimension=2 values=[0.52832,0.850586] class=Point name=Unnamed dimension=2 values=[0.27832,0.600586] class=Point name=Unnamed dimension=2 values=[0.77832,0.100586] class=Point name=Unnamed dimension=2 values=[0.15332,0.975586] class=Point name=Unnamed dimension=2 values=[0.65332,0.475586] class=Point name=Unnamed dimension=2 values=[0.40332,0.225586] class=Point name=Unnamed dimension=2 values=[0.90332,0.725586] class=Point name=Unnamed dimension=2 values=[0.0908203,0.663086] class=Point name=Unnamed dimension=2 values=[0.59082,0.163086] class=Point name=Unnamed dimension=2 values=[0.34082,0.413086] class=Point name=Unnamed dimension=2 values=[0.84082,0.913086] class=Point name=Unnamed dimension=2 values=[0.21582,0.0380859] class=Point name=Unnamed dimension=2 values=[0.71582,0.538086] class=Point name=Unnamed dimension=2 values=[0.46582,0.788086] class=Point name=Unnamed dimension=2 values=[0.96582,0.288086] class=Point name=Unnamed dimension=2 values=[0.0595703,0.819336] class=Point name=Unnamed dimension=2 values=[0.55957,0.319336] class=Point name=Unnamed dimension=2 values=[0.30957,0.0693359] class=Point name=Unnamed dimension=2 values=[0.80957,0.569336] class=Point name=Unnamed dimension=2 values=[0.18457,0.444336] class=Point name=Unnamed dimension=2 values=[0.68457,0.944336] class=Point name=Unnamed dimension=2 values=[0.43457,0.694336] class=Point name=Unnamed dimension=2 values=[0.93457,0.194336] class=Point name=Unnamed dimension=2 values=[0.12207,0.131836] class=Point name=Unnamed dimension=2 values=[0.62207,0.631836] class=Point name=Unnamed dimension=2 values=[0.37207,0.881836] class=Point name=Unnamed dimension=2 values=[0.87207,0.381836] class=Point name=Unnamed dimension=2 values=[0.24707,0.506836] class=Point name=Unnamed dimension=2 values=[0.74707,0.00683594] class=Point name=Unnamed dimension=2 values=[0.49707,0.256836] class=Point name=Unnamed dimension=2 values=[0.99707,0.756836] class=Point name=Unnamed dimension=2 values=[0.00292969,0.250977] class=Point name=Unnamed dimension=2 values=[0.50293,0.750977] class=Point name=Unnamed dimension=2 values=[0.25293,0.500977] class=Point name=Unnamed dimension=2 values=[0.75293,0.000976562] class=Point name=Unnamed dimension=2 values=[0.12793,0.875977] class=Point name=Unnamed dimension=2 values=[0.62793,0.375977] class=Point name=Unnamed dimension=2 values=[0.37793,0.125977] class=Point name=Unnamed dimension=2 values=[0.87793,0.625977] class=Point name=Unnamed dimension=2 values=[0.0654297,0.688477] class=Point name=Unnamed dimension=2 values=[0.56543,0.188477] class=Point name=Unnamed dimension=2 values=[0.31543,0.438477] class=Point name=Unnamed dimension=2 values=[0.81543,0.938477] class=Point name=Unnamed dimension=2 values=[0.19043,0.0634766] class=Point name=Unnamed dimension=2 values=[0.69043,0.563477] class=Point name=Unnamed dimension=2 values=[0.44043,0.813477] class=Point name=Unnamed dimension=2 values=[0.94043,0.313477] class=Point name=Unnamed dimension=2 values=[0.0341797,0.782227] class=Point name=Unnamed dimension=2 values=[0.53418,0.282227] class=Point name=Unnamed dimension=2 values=[0.28418,0.0322266] class=Point name=Unnamed dimension=2 values=[0.78418,0.532227] class=Point name=Unnamed dimension=2 values=[0.15918,0.407227] class=Point name=Unnamed dimension=2 values=[0.65918,0.907227] class=Point name=Unnamed dimension=2 values=[0.40918,0.657227] class=Point name=Unnamed dimension=2 values=[0.90918,0.157227] class=Point name=Unnamed dimension=2 values=[0.0966797,0.219727] class=Point name=Unnamed dimension=2 values=[0.59668,0.719727] class=Point name=Unnamed dimension=2 values=[0.34668,0.969727] class=Point name=Unnamed dimension=2 values=[0.84668,0.469727] class=Point name=Unnamed dimension=2 values=[0.22168,0.594727] class=Point name=Unnamed dimension=2 values=[0.72168,0.0947266] class=Point name=Unnamed dimension=2 values=[0.47168,0.344727] class=Point name=Unnamed dimension=2 values=[0.97168,0.844727] class=Point name=Unnamed dimension=2 values=[0.0185547,0.547852] class=Point name=Unnamed dimension=2 values=[0.518555,0.0478516] class=Point name=Unnamed dimension=2 values=[0.268555,0.297852] class=Point name=Unnamed dimension=2 values=[0.768555,0.797852] class=Point name=Unnamed dimension=2 values=[0.143555,0.172852] class=Point name=Unnamed dimension=2 values=[0.643555,0.672852] class=Point name=Unnamed dimension=2 values=[0.393555,0.922852] class=Point name=Unnamed dimension=2 values=[0.893555,0.422852] class=Point name=Unnamed dimension=2 values=[0.0810547,0.485352] class=Point name=Unnamed dimension=2 values=[0.581055,0.985352] class=Point name=Unnamed dimension=2 values=[0.331055,0.735352] class=Point name=Unnamed dimension=2 values=[0.831055,0.235352] class=Point name=Unnamed dimension=2 values=[0.206055,0.860352] class=Point name=Unnamed dimension=2 values=[0.706055,0.360352] class=Point name=Unnamed dimension=2 values=[0.456055,0.110352] class=Point name=Unnamed dimension=2 values=[0.956055,0.610352] class=Point name=Unnamed dimension=2 values=[0.0498047,0.0166016] class=Point name=Unnamed dimension=2 values=[0.549805,0.516602] class=Point name=Unnamed dimension=2 values=[0.299805,0.766602] class=Point name=Unnamed dimension=2 values=[0.799805,0.266602] class=Point name=Unnamed dimension=2 values=[0.174805,0.641602] class=Point name=Unnamed dimension=2 values=[0.674805,0.141602] class=Point name=Unnamed dimension=2 values=[0.424805,0.391602] class=Point name=Unnamed dimension=2 values=[0.924805,0.891602] class=Point name=Unnamed dimension=2 values=[0.112305,0.954102] class=Point name=Unnamed dimension=2 values=[0.612305,0.454102] class=Point name=Unnamed dimension=2 values=[0.362305,0.204102] class=Point name=Unnamed dimension=2 values=[0.862305,0.704102] class=Point name=Unnamed dimension=2 values=[0.237305,0.329102] class=Point name=Unnamed dimension=2 values=[0.737305,0.829102] class=Point name=Unnamed dimension=2 values=[0.487305,0.579102] class=Point name=Unnamed dimension=2 values=[0.987305,0.0791016] class=Point name=Unnamed dimension=2 values=[0.0107422,0.915039] class=Point name=Unnamed dimension=2 values=[0.510742,0.415039] class=Point name=Unnamed dimension=2 values=[0.260742,0.165039] class=Point name=Unnamed dimension=2 values=[0.760742,0.665039] class=Point name=Unnamed dimension=2 values=[0.135742,0.290039] class=Point name=Unnamed dimension=2 values=[0.635742,0.790039] class=Point name=Unnamed dimension=2 values=[0.385742,0.540039] class=Point name=Unnamed dimension=2 values=[0.885742,0.0400391] class=Point name=Unnamed dimension=2 values=[0.0732422,0.102539] class=Point name=Unnamed dimension=2 values=[0.573242,0.602539] class=Point name=Unnamed dimension=2 values=[0.323242,0.852539] class=Point name=Unnamed dimension=2 values=[0.823242,0.352539] class=Point name=Unnamed dimension=2 values=[0.198242,0.727539] class=Point name=Unnamed dimension=2 values=[0.698242,0.227539] class=Point name=Unnamed dimension=2 values=[0.448242,0.477539] class=Point name=Unnamed dimension=2 values=[0.948242,0.977539] class=Point name=Unnamed dimension=2 values=[0.0419922,0.383789] class=Point name=Unnamed dimension=2 values=[0.541992,0.883789] class=Point name=Unnamed dimension=2 values=[0.291992,0.633789] class=Point name=Unnamed dimension=2 values=[0.791992,0.133789] class=Point name=Unnamed dimension=2 values=[0.166992,0.758789] class=Point name=Unnamed dimension=2 values=[0.666992,0.258789] class=Point name=Unnamed dimension=2 values=[0.416992,0.00878906] class=Point name=Unnamed dimension=2 values=[0.916992,0.508789] class=Point name=Unnamed dimension=2 values=[0.104492,0.571289] class=Point name=Unnamed dimension=2 values=[0.604492,0.0712891] class=Point name=Unnamed dimension=2 values=[0.354492,0.321289] class=Point name=Unnamed dimension=2 values=[0.854492,0.821289] class=Point name=Unnamed dimension=2 values=[0.229492,0.196289] class=Point name=Unnamed dimension=2 values=[0.729492,0.696289] class=Point name=Unnamed dimension=2 values=[0.479492,0.946289] class=Point name=Unnamed dimension=2 values=[0.979492,0.446289] class=Point name=Unnamed dimension=2 values=[0.0263672,0.149414] class=Point name=Unnamed dimension=2 values=[0.526367,0.649414] class=Point name=Unnamed dimension=2 values=[0.276367,0.899414] class=Point name=Unnamed dimension=2 values=[0.776367,0.399414] class=Point name=Unnamed dimension=2 values=[0.151367,0.524414] class=Point name=Unnamed dimension=2 values=[0.651367,0.0244141] class=Point name=Unnamed dimension=2 values=[0.401367,0.274414] class=Point name=Unnamed dimension=2 values=[0.901367,0.774414] class=Point name=Unnamed dimension=2 values=[0.0888672,0.836914] class=Point name=Unnamed dimension=2 values=[0.588867,0.336914] class=Point name=Unnamed dimension=2 values=[0.338867,0.0869141] class=Point name=Unnamed dimension=2 values=[0.838867,0.586914] class=Point name=Unnamed dimension=2 values=[0.213867,0.461914] class=Point name=Unnamed dimension=2 values=[0.713867,0.961914] class=Point name=Unnamed dimension=2 values=[0.463867,0.711914] class=Point name=Unnamed dimension=2 values=[0.963867,0.211914] class=Point name=Unnamed dimension=2 values=[0.0576172,0.680664] class=Point name=Unnamed dimension=2 values=[0.557617,0.180664] class=Point name=Unnamed dimension=2 values=[0.307617,0.430664] class=Point name=Unnamed dimension=2 values=[0.807617,0.930664] class=Point name=Unnamed dimension=2 values=[0.182617,0.0556641] class=Point name=Unnamed dimension=2 values=[0.682617,0.555664] class=Point name=Unnamed dimension=2 values=[0.432617,0.805664] class=Point name=Unnamed dimension=2 values=[0.932617,0.305664] class=Point name=Unnamed dimension=2 values=[0.120117,0.368164] class=Point name=Unnamed dimension=2 values=[0.620117,0.868164] class=Point name=Unnamed dimension=2 values=[0.370117,0.618164] class=Point name=Unnamed dimension=2 values=[0.870117,0.118164] class=Point name=Unnamed dimension=2 values=[0.245117,0.993164] class=Point name=Unnamed dimension=2 values=[0.745117,0.493164] class=Point name=Unnamed dimension=2 values=[0.495117,0.243164] class=Point name=Unnamed dimension=2 values=[0.995117,0.743164] class=Point name=Unnamed dimension=2 values=[0.00683594,0.74707] class=Point name=Unnamed dimension=2 values=[0.506836,0.24707] class=Point name=Unnamed dimension=2 values=[0.256836,0.49707] class=Point name=Unnamed dimension=2 values=[0.756836,0.99707] class=Point name=Unnamed dimension=2 values=[0.131836,0.12207] class=Point name=Unnamed dimension=2 values=[0.631836,0.62207] class=Point name=Unnamed dimension=2 values=[0.381836,0.87207] class=Point name=Unnamed dimension=2 values=[0.881836,0.37207] class=Point name=Unnamed dimension=2 values=[0.0693359,0.30957] class=Point name=Unnamed dimension=2 values=[0.569336,0.80957] class=Point name=Unnamed dimension=2 values=[0.319336,0.55957] class=Point name=Unnamed dimension=2 values=[0.819336,0.0595703] class=Point name=Unnamed dimension=2 values=[0.194336,0.93457] class=Point name=Unnamed dimension=2 values=[0.694336,0.43457] class=Point name=Unnamed dimension=2 values=[0.444336,0.18457] class=Point name=Unnamed dimension=2 values=[0.944336,0.68457] class=Point name=Unnamed dimension=2 values=[0.0380859,0.21582] class=Point name=Unnamed dimension=2 values=[0.538086,0.71582] class=Point name=Unnamed dimension=2 values=[0.288086,0.96582] class=Point name=Unnamed dimension=2 values=[0.788086,0.46582] class=Point name=Unnamed dimension=2 values=[0.163086,0.59082] class=Point name=Unnamed dimension=2 values=[0.663086,0.0908203] class=Point name=Unnamed dimension=2 values=[0.413086,0.34082] class=Point name=Unnamed dimension=2 values=[0.913086,0.84082] class=Point name=Unnamed dimension=2 values=[0.100586,0.77832] class=Point name=Unnamed dimension=2 values=[0.600586,0.27832] class=Point name=Unnamed dimension=2 values=[0.350586,0.0283203] class=Point name=Unnamed dimension=2 values=[0.850586,0.52832] class=Point name=Unnamed dimension=2 values=[0.225586,0.40332] class=Point name=Unnamed dimension=2 values=[0.725586,0.90332] class=Point name=Unnamed dimension=2 values=[0.475586,0.65332] class=Point name=Unnamed dimension=2 values=[0.975586,0.15332] class=Point name=Unnamed dimension=2 values=[0.0224609,0.450195] class=Point name=Unnamed dimension=2 values=[0.522461,0.950195] class=Point name=Unnamed dimension=2 values=[0.272461,0.700195] class=Point name=Unnamed dimension=2 values=[0.772461,0.200195] class=Point name=Unnamed dimension=2 values=[0.147461,0.825195] class=Point name=Unnamed dimension=2 values=[0.647461,0.325195] class=Point name=Unnamed dimension=2 values=[0.397461,0.0751953] class=Point name=Unnamed dimension=2 values=[0.897461,0.575195] class=Point name=Unnamed dimension=2 values=[0.0849609,0.512695] class=Point name=Unnamed dimension=2 values=[0.584961,0.0126953] class=Point name=Unnamed dimension=2 values=[0.334961,0.262695] class=Point name=Unnamed dimension=2 values=[0.834961,0.762695] class=Point name=Unnamed dimension=2 values=[0.209961,0.137695] class=Point name=Unnamed dimension=2 values=[0.709961,0.637695] class=Point name=Unnamed dimension=2 values=[0.459961,0.887695] class=Point name=Unnamed dimension=2 values=[0.959961,0.387695] class=Point name=Unnamed dimension=2 values=[0.0537109,0.981445] class=Point name=Unnamed dimension=2 values=[0.553711,0.481445] class=Point name=Unnamed dimension=2 values=[0.303711,0.231445] class=Point name=Unnamed dimension=2 values=[0.803711,0.731445] class=Point name=Unnamed dimension=2 values=[0.178711,0.356445] class=Point name=Unnamed dimension=2 values=[0.678711,0.856445] class=Point name=Unnamed dimension=2 values=[0.428711,0.606445] class=Point name=Unnamed dimension=2 values=[0.928711,0.106445] class=Point name=Unnamed dimension=2 values=[0.116211,0.0439453] class=Point name=Unnamed dimension=2 values=[0.616211,0.543945] class=Point name=Unnamed dimension=2 values=[0.366211,0.793945] class=Point name=Unnamed dimension=2 values=[0.866211,0.293945] class=Point name=Unnamed dimension=2 values=[0.241211,0.668945] class=Point name=Unnamed dimension=2 values=[0.741211,0.168945] class=Point name=Unnamed dimension=2 values=[0.491211,0.418945] class=Point name=Unnamed dimension=2 values=[0.991211,0.918945] class=Point name=Unnamed dimension=2 values=[0.0146484,0.0830078] class=Point name=Unnamed dimension=2 values=[0.514648,0.583008] class=Point name=Unnamed dimension=2 values=[0.264648,0.833008] class=Point name=Unnamed dimension=2 values=[0.764648,0.333008] class=Point name=Unnamed dimension=2 values=[0.139648,0.708008] class=Point name=Unnamed dimension=2 values=[0.639648,0.208008] class=Point name=Unnamed dimension=2 values=[0.389648,0.458008] class=Point name=Unnamed dimension=2 values=[0.889648,0.958008] class=Point name=Unnamed dimension=2 values=[0.0771484,0.895508] class=Point name=Unnamed dimension=2 values=[0.577148,0.395508] class=Point name=Unnamed dimension=2 values=[0.327148,0.145508] class=Point name=Unnamed dimension=2 values=[0.827148,0.645508] class=Point name=Unnamed dimension=2 values=[0.202148,0.270508] class=Point name=Unnamed dimension=2 values=[0.702148,0.770508] class=Point name=Unnamed dimension=2 values=[0.452148,0.520508] class=Point name=Unnamed dimension=2 values=[0.952148,0.0205078] class=Point name=Unnamed dimension=2 values=[0.0458984,0.614258] class=Point name=Unnamed dimension=2 values=[0.545898,0.114258] class=Point name=Unnamed dimension=2 values=[0.295898,0.364258] class=Point name=Unnamed dimension=2 values=[0.795898,0.864258] class=Point name=Unnamed dimension=2 values=[0.170898,0.239258] class=Point name=Unnamed dimension=2 values=[0.670898,0.739258] class=Point name=Unnamed dimension=2 values=[0.420898,0.989258] class=Point name=Unnamed dimension=2 values=[0.920898,0.489258] class=Point name=Unnamed dimension=2 values=[0.108398,0.426758] class=Point name=Unnamed dimension=2 values=[0.608398,0.926758] class=Point name=Unnamed dimension=2 values=[0.358398,0.676758] class=Point name=Unnamed dimension=2 values=[0.858398,0.176758] class=Point name=Unnamed dimension=2 values=[0.233398,0.801758] class=Point name=Unnamed dimension=2 values=[0.733398,0.301758] class=Point name=Unnamed dimension=2 values=[0.483398,0.0517578] class=Point name=Unnamed dimension=2 values=[0.983398,0.551758] class=Point name=Unnamed dimension=2 values=[0.0302734,0.848633] class=Point name=Unnamed dimension=2 values=[0.530273,0.348633] class=Point name=Unnamed dimension=2 values=[0.280273,0.0986328] class=Point name=Unnamed dimension=2 values=[0.780273,0.598633] class=Point name=Unnamed dimension=2 values=[0.155273,0.473633] class=Point name=Unnamed dimension=2 values=[0.655273,0.973633] class=Point name=Unnamed dimension=2 values=[0.405273,0.723633] class=Point name=Unnamed dimension=2 values=[0.905273,0.223633] class=Point name=Unnamed dimension=2 values=[0.0927734,0.161133] sample size=1000 relative error to Pi=0.000766282 openturns-1.9/lib/test/t_FieldFunction_std.cxx000066400000000000000000000035521307543307100216270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FieldFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Create an intance */ FieldFunction myFunc; fullprint << "myFunc=" << myFunc << std::endl; /* Get the input and output description */ fullprint << "myFunc input description=" << myFunc.getInputDescription() << std::endl; fullprint << "myFunc output description=" << myFunc.getOutputDescription() << std::endl; /* Get the input and output dimension, based on description */ fullprint << "myFunc input dimension=" << myFunc.getInputDimension() << std::endl; fullprint << "myFunc output dimension=" << myFunc.getOutputDimension() << std::endl; /* Get the number of calls */ fullprint << "called " << myFunc.getCallsNumber() << " times" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FieldFunction_std.expout000066400000000000000000000004361307543307100223470ustar00rootroot00000000000000myFunc=class=FieldFunction name=Unnamed implementation=class=FieldFunctionImplementation name=Unnamed input description=[] output description=[] number of calls=0 myFunc input description=[] myFunc output description=[] myFunc input dimension=0 myFunc output dimension=0 called 0 times openturns-1.9/lib/test/t_Field_draw.cxx000066400000000000000000000043671307543307100202710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Field for drawing methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection TimeSeriesCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // A 1D->1D field { Mesh mesh(IntervalMesher(Indices(1, 10)).build(Interval(-2.0, 2.0))); SymbolicFunction function("x", "x"); Field field(mesh, function(mesh.getVertices())); Graph graph(field.draw()); graph = field.drawMarginal(0, false); graph = field.drawMarginal(0, true); } // A 2D->1D field { Mesh mesh(IntervalMesher(Indices(2, 10)).build(Interval(Point(2, -2.0), Point(2, 2.0)))); SymbolicFunction function(Description::BuildDefault(2, "x"), Description(1, "x0+x1")); Field field(mesh, function(mesh.getVertices())); Graph graph(field.draw()); graph = field.drawMarginal(0, false); graph = field.drawMarginal(0, true); } // A 2D->2D field { Mesh mesh(IntervalMesher(Indices(2, 10)).build(Interval(Point(2, -2.0), Point(2, 2.0)))); SymbolicFunction function(Description::BuildDefault(2, "x"), Description::BuildDefault(2, "x")); Field field(mesh, function(mesh.getVertices())); Graph graph(field.draw()); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Field_draw.expout000066400000000000000000000000001307543307100207670ustar00rootroot00000000000000openturns-1.9/lib/test/t_FilteringWindows_std.cxx000066400000000000000000000036661307543307100224020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FilteringWindows * This tests the Hamming and Hanning classes * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Hanning filter */ Hanning myHanningFilter; fullprint << "myHanningFilter = " << myHanningFilter << std::endl; /* Hamming filter */ Hamming myHammingFilter; fullprint << "myHammingFilter = " << myHammingFilter << std::endl; /* Evaluation of values between t=0 and t=1 using a step = 0.01 */ const UnsignedInteger steps(100); const Scalar tMin = 0.0; const Scalar tMax = 1.0; const Scalar tStep = (tMax - tMin) / steps; for (UnsignedInteger i = 0; i < steps + 1; ++i ) { const Scalar t = tMin + i * tStep; fullprint << "t = " << t << " Hanning = " << myHanningFilter(t) << " Hamming = " << myHammingFilter(t) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FilteringWindows_std.expout000066400000000000000000000111221307543307100231060ustar00rootroot00000000000000myHanningFilter = class=Hanning myHammingFilter = class=Hamming t = 0 Hanning = 0 Hamming = 0.137563 t = 0.01 Hanning = 0.00161117 Hamming = 0.138989 t = 0.02 Hanning = 0.00643832 Hamming = 0.143258 t = 0.03 Hanning = 0.0144624 Hamming = 0.150356 t = 0.04 Hanning = 0.0256517 Hamming = 0.160253 t = 0.05 Hanning = 0.0399622 Hamming = 0.172911 t = 0.06 Hanning = 0.0573373 Hamming = 0.188279 t = 0.07 Hanning = 0.0777084 Hamming = 0.206298 t = 0.08 Hanning = 0.100995 Hamming = 0.226896 t = 0.09 Hanning = 0.127106 Hamming = 0.249991 t = 0.1 Hanning = 0.155937 Hamming = 0.275493 t = 0.11 Hanning = 0.187375 Hamming = 0.303301 t = 0.12 Hanning = 0.221296 Hamming = 0.333305 t = 0.13 Hanning = 0.257566 Hamming = 0.365386 t = 0.14 Hanning = 0.296042 Hamming = 0.399419 t = 0.15 Hanning = 0.336572 Hamming = 0.435268 t = 0.16 Hanning = 0.378996 Hamming = 0.472793 t = 0.17 Hanning = 0.423146 Hamming = 0.511845 t = 0.18 Hanning = 0.468849 Hamming = 0.55227 t = 0.19 Hanning = 0.515924 Hamming = 0.593909 t = 0.2 Hanning = 0.564185 Hamming = 0.636597 t = 0.21 Hanning = 0.613442 Hamming = 0.680166 t = 0.22 Hanning = 0.6635 Hamming = 0.724443 t = 0.23 Hanning = 0.714162 Hamming = 0.769255 t = 0.24 Hanning = 0.765228 Hamming = 0.814424 t = 0.25 Hanning = 0.816497 Hamming = 0.859772 t = 0.26 Hanning = 0.867765 Hamming = 0.90512 t = 0.27 Hanning = 0.918831 Hamming = 0.950289 t = 0.28 Hanning = 0.969493 Hamming = 0.9951 t = 0.29 Hanning = 1.01955 Hamming = 1.03938 t = 0.3 Hanning = 1.06881 Hamming = 1.08295 t = 0.31 Hanning = 1.11707 Hamming = 1.12563 t = 0.32 Hanning = 1.16414 Hamming = 1.16727 t = 0.33 Hanning = 1.20985 Hamming = 1.2077 t = 0.34 Hanning = 1.254 Hamming = 1.24675 t = 0.35 Hanning = 1.29642 Hamming = 1.28428 t = 0.36 Hanning = 1.33695 Hamming = 1.32012 t = 0.37 Hanning = 1.37543 Hamming = 1.35416 t = 0.38 Hanning = 1.4117 Hamming = 1.38624 t = 0.39 Hanning = 1.44562 Hamming = 1.41624 t = 0.4 Hanning = 1.47706 Hamming = 1.44405 t = 0.41 Hanning = 1.50589 Hamming = 1.46955 t = 0.42 Hanning = 1.532 Hamming = 1.49265 t = 0.43 Hanning = 1.55528 Hamming = 1.51325 t = 0.44 Hanning = 1.57566 Hamming = 1.53126 t = 0.45 Hanning = 1.59303 Hamming = 1.54663 t = 0.46 Hanning = 1.60734 Hamming = 1.55929 t = 0.47 Hanning = 1.61853 Hamming = 1.56919 t = 0.48 Hanning = 1.62655 Hamming = 1.57629 t = 0.49 Hanning = 1.63138 Hamming = 1.58056 t = 0.5 Hanning = 1.63299 Hamming = 1.58198 t = 0.51 Hanning = 1.63138 Hamming = 1.58056 t = 0.52 Hanning = 1.62655 Hamming = 1.57629 t = 0.53 Hanning = 1.61853 Hamming = 1.56919 t = 0.54 Hanning = 1.60734 Hamming = 1.55929 t = 0.55 Hanning = 1.59303 Hamming = 1.54663 t = 0.56 Hanning = 1.57566 Hamming = 1.53126 t = 0.57 Hanning = 1.55528 Hamming = 1.51325 t = 0.58 Hanning = 1.532 Hamming = 1.49265 t = 0.59 Hanning = 1.50589 Hamming = 1.46955 t = 0.6 Hanning = 1.47706 Hamming = 1.44405 t = 0.61 Hanning = 1.44562 Hamming = 1.41624 t = 0.62 Hanning = 1.4117 Hamming = 1.38624 t = 0.63 Hanning = 1.37543 Hamming = 1.35416 t = 0.64 Hanning = 1.33695 Hamming = 1.32012 t = 0.65 Hanning = 1.29642 Hamming = 1.28428 t = 0.66 Hanning = 1.254 Hamming = 1.24675 t = 0.67 Hanning = 1.20985 Hamming = 1.2077 t = 0.68 Hanning = 1.16414 Hamming = 1.16727 t = 0.69 Hanning = 1.11707 Hamming = 1.12563 t = 0.7 Hanning = 1.06881 Hamming = 1.08295 t = 0.71 Hanning = 1.01955 Hamming = 1.03938 t = 0.72 Hanning = 0.969493 Hamming = 0.9951 t = 0.73 Hanning = 0.918831 Hamming = 0.950289 t = 0.74 Hanning = 0.867765 Hamming = 0.90512 t = 0.75 Hanning = 0.816497 Hamming = 0.859772 t = 0.76 Hanning = 0.765228 Hamming = 0.814424 t = 0.77 Hanning = 0.714162 Hamming = 0.769255 t = 0.78 Hanning = 0.6635 Hamming = 0.724443 t = 0.79 Hanning = 0.613442 Hamming = 0.680166 t = 0.8 Hanning = 0.564185 Hamming = 0.636597 t = 0.81 Hanning = 0.515924 Hamming = 0.593909 t = 0.82 Hanning = 0.468849 Hamming = 0.55227 t = 0.83 Hanning = 0.423146 Hamming = 0.511845 t = 0.84 Hanning = 0.378996 Hamming = 0.472793 t = 0.85 Hanning = 0.336572 Hamming = 0.435268 t = 0.86 Hanning = 0.296042 Hamming = 0.399419 t = 0.87 Hanning = 0.257566 Hamming = 0.365386 t = 0.88 Hanning = 0.221296 Hamming = 0.333305 t = 0.89 Hanning = 0.187375 Hamming = 0.303301 t = 0.9 Hanning = 0.155937 Hamming = 0.275493 t = 0.91 Hanning = 0.127106 Hamming = 0.249991 t = 0.92 Hanning = 0.100995 Hamming = 0.226896 t = 0.93 Hanning = 0.0777084 Hamming = 0.206298 t = 0.94 Hanning = 0.0573373 Hamming = 0.188279 t = 0.95 Hanning = 0.0399622 Hamming = 0.172911 t = 0.96 Hanning = 0.0256517 Hamming = 0.160253 t = 0.97 Hanning = 0.0144624 Hamming = 0.150356 t = 0.98 Hanning = 0.00643832 Hamming = 0.143258 t = 0.99 Hanning = 0.00161117 Hamming = 0.138989 t = 1 Hanning = 0 Hamming = 0.137563 openturns-1.9/lib/test/t_FiniteDifferenceStep_std.cxx000066400000000000000000000034051307543307100231200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FiniteDifferenceStep for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dimension = 2; Point epsilon( dimension, 1e-5 ); Point eta( dimension, 1.0 ); Collection coll; coll.add(ConstantStep(epsilon)); coll.add(BlendedStep(epsilon, eta)); Point x(dimension, -3.0); for (UnsignedInteger i = 0; i < coll.getSize(); ++ i) { FiniteDifferenceStep step_i( coll[i] ); std::cout << "step type=" << step_i.getImplementation()->getClassName() << " x=" << x << " epsilon=" << step_i.getEpsilon() << " step value=" << step_i.operator()(x) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FiniteDifferenceStep_std.expout000066400000000000000000000002371307543307100236420ustar00rootroot00000000000000step type=ConstantStep x=[-3,-3] epsilon=[1e-05,1e-05] step value=[1e-05,1e-05] step type=BlendedStep x=[-3,-3] epsilon=[1e-05,1e-05] step value=[4e-05,4e-05] openturns-1.9/lib/test/t_FisherSnedecorFactory_std.cxx000066400000000000000000000051721307543307100233310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FisherSnedecor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { PlatformInfo::SetNumericalPrecision(5); FisherSnedecor distribution(4.5, 8.4); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); FisherSnedecorFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; FisherSnedecor estimatedFisherSnedecor(factory.buildAsFisherSnedecor(sample)); fullprint << "FisherSnedecor =" << distribution << std::endl; fullprint << "Estimated fisherSnedecor=" << estimatedFisherSnedecor << std::endl; estimatedFisherSnedecor = factory.buildAsFisherSnedecor(); fullprint << "Default fisherSnedecor=" << estimatedFisherSnedecor << std::endl; estimatedFisherSnedecor = factory.buildAsFisherSnedecor(distribution.getParameter()); fullprint << "FisherSnedecor from parameters=" << estimatedFisherSnedecor << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FisherSnedecorFactory_std.expout000066400000000000000000000013441307543307100240500ustar00rootroot00000000000000Distribution =class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5 d2=8.4 Estimated distribution=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5705 d2=8.2066 Default distribution=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=1 d2=5 Distribution from parameters=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5 d2=8.4 FisherSnedecor =class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5 d2=8.4 Estimated fisherSnedecor=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5705 d2=8.2066 Default fisherSnedecor=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=1 d2=5 FisherSnedecor from parameters=class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5 d2=8.4 openturns-1.9/lib/test/t_FisherSnedecor_std.cxx000066400000000000000000000215601307543307100220000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FisherSnedecor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public FisherSnedecor { public: TestObject() : FisherSnedecor(5.5, 10.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object FisherSnedecor distribution(5.5, 10.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computePDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computePDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point logPDFgr = distribution.computeLogPDFGradient( point ); fullprint << "log-pdf gradient =" << logPDFgr << std::endl; Point logPDFgrFD(2); logPDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computeLogPDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computeLogPDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computeLogPDF(point)) / (2.0 * eps); fullprint << "log-pdf gradient (FD)=" << logPDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computeCDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computeCDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Moments Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; FisherSnedecor::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FisherSnedecor_std.expout000066400000000000000000000121031307543307100225130ustar00rootroot00000000000000Testing class FisherSnedecor checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 streamObject(const T & anObject) class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 Distribution FisherSnedecor(d1 = 5.5, d2 = 10.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.85322] oneSample first=class=Point name=Unnamed dimension=1 values=[2.55996] last=class=Point name=Unnamed dimension=1 values=[1.06184] mean=class=Point name=Unnamed dimension=1 values=[1.24575] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20146] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.517181] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.517181] log pdf=-0.659362 pdf =0.517181 pdf (FD)=0.517181 cdf=0.531405 ccdf=0.468595 survival=0.468595 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.230549] Survival(inverse survival)=0.95 characteristic function=(0.385738,0.612601) log characteristic function=(-0.323062,1.00884) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.0333323,0.00890862] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0333323,0.00890862] log-pdf gradient =class=Point name=Unnamed dimension=2 values=[0.0644499,0.0172253] log-pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0644499,0.0172253] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0101307,0.00377782] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0101307,0.00377782] quantile=class=Point name=Unnamed dimension=1 values=[3.2027] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0385599] upper bound=class=Point name=Unnamed dimension=1 values=[3.21723] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(FisherSnedecor(d1 = 5.5, d2 = 10.5)) gradientImplementation=MinimumVolumeLevelSetGradient(FisherSnedecor(d1 = 5.5, d2 = 10.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(FisherSnedecor(d1 = 5.5, d2 = 10.5)) level=3.14683 beta=0.0429883 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.168551] upper bound=class=Point name=Unnamed dimension=1 values=[4.04601] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[3.2027] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.230549] upper bound=class=Point name=Unnamed dimension=1 values=[2048] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.23529] standard deviation=class=Point name=Unnamed dimension=1 values=[1.09323] skewness=class=Point name=Unnamed dimension=1 values=[3.56105] kurtosis=class=Point name=Unnamed dimension=1 values=[42.039] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19515] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[d1 : 5.5, d2 : 10.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.23529] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2.7211] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[10.9669] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[96.309] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[4964.29] Standard representative=FisherSnedecor(d1 = 5.5, d2 = 10.5) openturns-1.9/lib/test/t_FittingTest_std.cxx000066400000000000000000000136061307543307100213430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); Collection continuousDistributionCollection; Collection discreteDistributionCollection; Collection distributionCollection; Beta beta(2.0, 3.0, 0.0, 1.0); distributionCollection.add(beta); continuousDistributionCollection.add(beta); Gamma gamma(1.0, 2.0, 3.0); distributionCollection.add(gamma); continuousDistributionCollection.add(gamma); Gumbel gumbel(1.0, 2.0); distributionCollection.add(gumbel); continuousDistributionCollection.add(gumbel); LogNormal lognormal(1.0, 1.0, 2.0); distributionCollection.add(lognormal); continuousDistributionCollection.add(lognormal); Logistic logistic(1.0, 1.0); distributionCollection.add(logistic); continuousDistributionCollection.add(logistic); Normal normal(1.0, 2.0); distributionCollection.add(normal); continuousDistributionCollection.add(normal); TruncatedNormal truncatednormal(1.0, 1.0, 0.0, 3.0); distributionCollection.add(truncatednormal); continuousDistributionCollection.add(truncatednormal); Student student(10.0, 10.0); distributionCollection.add(student); continuousDistributionCollection.add(student); Triangular triangular(-1.0, 2.0, 4.0); distributionCollection.add(triangular); continuousDistributionCollection.add(triangular); Uniform uniform(1.0, 2.0); distributionCollection.add(uniform); continuousDistributionCollection.add(uniform); Weibull weibull(1.0, 1.0, 2.0); distributionCollection.add(weibull); continuousDistributionCollection.add(weibull); Geometric geometric(0.5); distributionCollection.add(geometric); discreteDistributionCollection.add(geometric); Poisson poisson(2.0); distributionCollection.add(poisson); discreteDistributionCollection.add(poisson); Sample x(3, 1); x[0][0] = 1.0; x[1][0] = 2.0; x[2][0] = 3.0; Point p(3); p[0] = 0.3; p[1] = 0.2; p[2] = 0.5; UserDefined userdefined(x, p); distributionCollection.add(userdefined); discreteDistributionCollection.add(userdefined); UnsignedInteger size = 100; UnsignedInteger continuousDistributionNumber = continuousDistributionCollection.getSize(); UnsignedInteger discreteDistributionNumber = discreteDistributionCollection.getSize(); UnsignedInteger distributionNumber = continuousDistributionNumber + discreteDistributionNumber; Collection sampleCollection(distributionNumber); Collection continuousSampleCollection(continuousDistributionNumber); Collection discreteSampleCollection(discreteDistributionNumber); for (UnsignedInteger i = 0; i < continuousDistributionNumber; i++) { continuousSampleCollection[i] = continuousDistributionCollection[i].getSample(size); sampleCollection[i] = continuousSampleCollection[i]; } for (UnsignedInteger i = 0; i < discreteDistributionNumber; i++) { discreteSampleCollection[i] = discreteDistributionCollection[i].getSample(size); sampleCollection[continuousDistributionNumber + i] = discreteSampleCollection[i]; } FittingTest::DistributionFactoryCollection factoryCollection; factoryCollection.add(UniformFactory()); factoryCollection.add(BetaFactory()); factoryCollection.add(NormalFactory()); Sample aSample(Uniform(-1.5, 2.5).getSample(size)); TestResult bestResult; fullprint << "best model BIC=" << FittingTest::BestModelBIC(aSample, factoryCollection) << std::endl; fullprint << "best model Kolmogorov=" << FittingTest::BestModelKolmogorov(aSample, factoryCollection, bestResult) << std::endl; SquareMatrix resultBIC(distributionNumber); for (UnsignedInteger i = 0; i < distributionNumber; i++) { for (UnsignedInteger j = 0; j < distributionNumber; j++) { const Scalar value = FittingTest::BIC(sampleCollection[i], distributionCollection[j], 0); resultBIC(i, j) = (std::abs(value) < 1.0e-6 ? 0.0 : value); } } fullprint << "resultBIC=" << resultBIC << std::endl; SquareMatrix resultKolmogorov(continuousDistributionNumber); for (UnsignedInteger i = 0; i < continuousDistributionNumber; i++) { for (UnsignedInteger j = 0; j < continuousDistributionNumber; j++) { const Scalar value = FittingTest::Kolmogorov(continuousSampleCollection[i], continuousDistributionCollection[j], 0.95, 0).getPValue(); resultKolmogorov(i, j) = (std::abs(value) < 1.0e-6 ? 0.0 : value); } } fullprint << "resultKolmogorov=" << resultKolmogorov << std::endl; SquareMatrix resultChiSquared(discreteDistributionNumber - 1); for (UnsignedInteger i = 0; i < discreteDistributionNumber - 1; i++) { for (UnsignedInteger j = 0; j < discreteDistributionNumber - 1; j++) { const Scalar value = FittingTest::ChiSquared(discreteSampleCollection[i], discreteDistributionCollection[j], 0.95, 0).getPValue(); resultChiSquared(i, j) = (std::abs(value) < 1.0e-6 ? 0.0 : value); } } fullprint << "resultChiSquared=" << resultChiSquared << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_FittingTest_std.expout000066400000000000000000000047041307543307100220640ustar00rootroot00000000000000best model BIC=class=Uniform name=Uniform dimension=1 a=-1.39122 b=2.45155 best model Kolmogorov=class=Beta name=Beta dimension=1 r=1.14515 t=2.39684 a=-1.39122 b=2.45155 resultBIC=class=SquareMatrix dimension=14 implementation=class=MatrixImplementation name=Unnamed rows=14 columns=14 values=[-0.506611,1416.79,1260.87,1416.79,1062.8,1133.59,935.04,1416.79,1204.29,1416.79,1416.79,722.564,1062.59,1005.92,1416.79,0.390135,964.655,210.864,1232.77,1148.05,1416.79,26.4376,1232.62,1416.79,865.069,1233.51,1205.07,1416.79,4.94401,3.40566,3.36873,9.04993,7.59532,36.5729,3.45423,15.9133,4.0612,2.44214,2.97694,3.35073,3.97803,2.82863,1416.79,3.02206,512.945,4.87206,993.28,936.458,1163.09,7.11503,781.182,1416.79,4.24283,1063.47,964.471,624.978,2.84271,5.25018,4.44992,10.9583,3.6054,4.34917,3.02071,17.9129,3.54591,2.94694,4.65243,3.81864,3.97857,3.81633,3.25977,4.78199,4.40705,14.8314,3.72037,4.27123,3.35483,23.6423,3.66558,3.31367,4.49168,3.98667,4.03917,3.82167,1.57993,1416.79,455.161,1219.03,412.435,695.404,1.96017,1416.79,285.407,1.79553,554.759,186.174,370.43,3.82754,26.8191,20.1943,22.0736,15.3766,25.307,25.7348,25.4331,3.16515,24.2971,25.0307,21.3014,23.5995,23.4314,23.1683,2.98858,131.382,243.114,851.769,88.0953,342.671,2.52017,1416.79,2.95261,2.20348,102.28,186.341,214.757,2.84408,1416.79,1416.79,1062.59,1416.79,1005.92,1190.11,736.732,1416.79,949.251,0,1416.79,1048.43,963.419,1204.27,1416.79,2.88821,511.803,8.7561,992.328,935.944,1161.87,15.912,779.915,1416.79,2.01493,1063.63,964.559,624.509,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,2.81418,158.758,3.14689,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,3.28126,3.43457,3.06783,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,186.366,370.234,1.95746] resultKolmogorov=class=SquareMatrix dimension=11 implementation=class=MatrixImplementation name=Unnamed rows=11 columns=11 values=[0.380754,0,0,0,0,0,0,0,0,0,0,0,0.101178,0,0,0,0,0,0,0,0,0,0,0,0.935178,0,0,0,0,0,6.03204e-05,0,0,0,0,0,0.261505,0,0,0,0,0,0,0,0,0,0,0,0.102296,0.488213,0,0,0,0,0,0,0,0,0,0.0115789,0.979805,0,0,0,0,0,0,0,0,0,0.00855122,0,0.256542,0,0,0,0,0,0,0,0,0,0,0,0.515105,0,0,0,0,0,0,0,0.000639599,0,7.75439e-06,0,0.268376,0,0,0,0,0,0,0,0,0,0,0,0.556345,0,0,0,0,0,0,0,0,0,0,0,0.640406] resultChiSquared=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0.892467] openturns-1.9/lib/test/t_FixedExperiment_std.cxx000066400000000000000000000033451307543307100221760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FixedExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger size = 5; UnsignedInteger dim = 6; Sample refSample(size, dim); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dim; ++j) refSample[i][j] = i + j; fullprint << "ref. sample=" << refSample << std::endl; FixedExperiment myPlane(refSample); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FixedExperiment_std.expout000066400000000000000000000013621307543307100227150ustar00rootroot00000000000000ref. sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] myPlane = class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] weights=class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] weights = class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] openturns-1.9/lib/test/t_FrankCopulaFactory_std.cxx000066400000000000000000000050251307543307100226300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FrankCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { FrankCopula distribution(1.5); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); FrankCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; FrankCopula estimatedFrankCopula(factory.buildAsFrankCopula(sample)); fullprint << "FrankCopula =" << distribution << std::endl; fullprint << "Estimated frankCopula=" << estimatedFrankCopula << std::endl; estimatedFrankCopula = factory.buildAsFrankCopula(); fullprint << "Default frankCopula=" << estimatedFrankCopula << std::endl; estimatedFrankCopula = factory.buildAsFrankCopula(distribution.getParameter()); fullprint << "FrankCopula from parameters=" << estimatedFrankCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FrankCopulaFactory_std.expout000066400000000000000000000012101307543307100233420ustar00rootroot00000000000000Distribution =class=FrankCopula name=FrankCopula dimension=2 theta=1.5 Estimated distribution=class=FrankCopula name=FrankCopula dimension=2 theta=1.31776 Default distribution=class=FrankCopula name=FrankCopula dimension=2 theta=2 Distribution from parameters=class=FrankCopula name=FrankCopula dimension=2 theta=1.5 FrankCopula =class=FrankCopula name=FrankCopula dimension=2 theta=1.5 Estimated frankCopula=class=FrankCopula name=FrankCopula dimension=2 theta=1.31776 Default frankCopula=class=FrankCopula name=FrankCopula dimension=2 theta=2 FrankCopula from parameters=class=FrankCopula name=FrankCopula dimension=2 theta=1.5 openturns-1.9/lib/test/t_FrankCopula_std.cxx000066400000000000000000000146131307543307100213030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FrankCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; FrankCopula copula(2.5); copula.setName("a frank copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FrankCopula_std.expout000066400000000000000000000107031307543307100220210ustar00rootroot00000000000000Copula class=FrankCopula name=a frank copula dimension=2 theta=2.5 Copula FrankCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.629877,0.895308] oneSample=class=Sample name=a frank copula implementation=class=SampleImplementation name=a frank copula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.016871],[0.347057,0.945426],[0.92068,0.721499],[0.0632061,0.142503],[0.714382,0.513452],[0.373767,0.654314],[0.883503,0.519404],[0.92851,0.915709],[0.684575,0.864187],[0.359802,0.923248]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[0.502777,0.501102] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0329314,0.0329314,0.0835427] point= class=Point name=Unnamed dimension=2 values=[0.2,0.2] ddf=class=Point name=Unnamed dimension=2 values=[-1.35738,-1.35738] ddf (FD)=class=Point name=Unnamed dimension=2 values=[-1.35738,-1.35738] pdf=1.44974 cdf=0.0738879 Survival =0.673888 Survival (ref)=0.673888 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.0258555,0.0258555] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.662772,0.662772] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0127327,0.0127327] upper bound=class=Point name=Unnamed dimension=2 values=[0.987267,0.987267] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.974535 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(FrankCopula(theta = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(FrankCopula(theta = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(FrankCopula(theta = 2.5)) level=0.654845 beta=0.519522 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0127327,0.0127327] upper bound=class=Point name=Unnamed dimension=2 values=[0.987267,0.987267] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974535 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.974144,0.974144] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974144 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0258555,0.0258555] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.974144 covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0321352,0.0321352,0.0833333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.385622,0.385622,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.385622,0.385622,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.262063,0.262063,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.294088] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.47206] indices=[1,0] margins=class=FrankCopula name=a frank copula dimension=2 theta=2.5 margins PDF=1.33439 margins CDF=0.107307 margins quantile=class=Point name=Unnamed dimension=2 values=[0.974144,0.974144] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.196586,0.435233] openturns-1.9/lib/test/t_Frechet_std.cxx000066400000000000000000000215371307543307100204610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Frechet for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Frechet { public: TestObject() : Frechet(6.0, 1.5, -1.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Frechet distribution(6.0, 1.5, -1.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (Frechet(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computePDF(point) - Frechet(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Frechet(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computePDF(point) - Frechet(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computePDF(point) - Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (Frechet(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point) - Frechet(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Frechet(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computeCDF(point) - Frechet(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computeCDF(point) - Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Frechet::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Frechet_std.expout000066400000000000000000000117271307543307100212030ustar00rootroot00000000000000Testing class Frechet checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Frechet name=Frechet dimension=1 alpha=6 beta=1.5 gamma=-1 streamObject(const T & anObject) class=Frechet name=Frechet dimension=1 alpha=6 beta=1.5 gamma=-1 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Frechet name=Frechet dimension=1 alpha=6 beta=1.5 gamma=-1 Distribution Frechet(alpha = 6, beta = 1.5, gamma = -1) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.705878] oneSample first=class=Point name=Unnamed dimension=1 values=[1.12231] last=class=Point name=Unnamed dimension=1 values=[0.539283] mean=class=Point name=Unnamed dimension=1 values=[0.698001] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.177003] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-1.32548] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-1.32548] log pdf=-0.805459 pdf =0.446883 pdf (FD)=0.446883 cdf=0.83696 ccdf=0.16304 survival=0.16304 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.249321] Survival(inverse survival)=0.95 characteristic function=(0.72659,0.574653) log characteristic function=(-0.0764829,0.669162) pdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0311988,1.46939,1.32548] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.0311988,1.46939,1.32548] cdf gradient =class=Point name=Unnamed dimension=3 values=[0.0428534,-0.595844,-0.446883] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.0428534,-0.595844,-0.446883] quantile=class=Point name=Unnamed dimension=1 values=[1.46083] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.125077] upper bound=class=Point name=Unnamed dimension=1 values=[1.49279] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Frechet(alpha = 6, beta = 1.5, gamma = -1)) gradientImplementation=MinimumVolumeLevelSetGradient(Frechet(alpha = 6, beta = 1.5, gamma = -1)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Frechet(alpha = 6, beta = 1.5, gamma = -1)) level=2.21675 beta=0.108963 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.206726] upper bound=class=Point name=Unnamed dimension=1 values=[1.76813] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[1.46083] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.249321] upper bound=class=Point name=Unnamed dimension=1 values=[322.208] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.693181] standard deviation=class=Point name=Unnamed dimension=1 values=[0.424152] skewness=class=Point name=Unnamed dimension=1 values=[2.80557] kurtosis=class=Point name=Unnamed dimension=1 values=[24.6781] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.179905] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[alpha : 6, beta : 1.5, gamma : -1]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.12879] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.35412] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1.77245] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[2.67894] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[5.56632] Standard representative=Frechet(alpha = 6, beta = 1, gamma = 0) openturns-1.9/lib/test/t_Function_draw.cxx000066400000000000000000000056241307543307100210300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for drawing methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Simplified interfaces // First, try 1D drawing { SymbolicFunction f("x", "sin(2*_pi*x)*exp(-x^2/2)"); fullprint << "f=" << f << std::endl; Graph graph(f.draw(-1.2, 1.2, 32)); fullprint << "graph=" << graph << std::endl; graph.draw("NMFDraw1D.png"); } // Second, try 2D drawing { Description inputVar(2); inputVar[0] = "x"; inputVar[1] = "y"; Description formula(1); formula[0] = "2.0+x-2*y+x*y-x^2-3*y^2+x*y^2"; SymbolicFunction f(inputVar, formula); fullprint << "f=" << f << std::endl; Graph graph(f.draw(Point(2, -10.0), Point(2, 10.0), Indices(2, 21))); fullprint << "graph=" << graph << std::endl; graph.draw("NMFDraw2D.png"); } // Full interfaces { Description inputVars(3); inputVars[0] = "x0"; inputVars[1] = "x1"; inputVars[2] = "x2"; Description formulas(2); formulas[0] = "x0 * sin(x1 + 2.0 * x2) - 2.0 * x1 * cos(3.0 * x0 - x2)"; formulas[1] = "x1 * cos(x2 + 2.0 * x1) + 2.0 * x0 * cos(3.0 * x1 - x0)"; SymbolicFunction f(inputVars, formulas); Point centralPoint(3); centralPoint[0] = 1.0; centralPoint[1] = -0.5; centralPoint[2] = 1.5; // First output as a function of first input around central point Graph graph1D(f.draw(0, 0, centralPoint, -5.0, 5.0, 32)); fullprint << "graph1D=" << graph1D << std::endl; graph1D.draw("NMFDraw1DFull.png"); // Second output as a function of second and third inputs around central point Graph graph2D(f.draw(1, 2, 1, centralPoint, Point(2, -5.0), Point(2, 5.0), Indices(2, 21))); fullprint << "graph1D=" << graph2D << std::endl; graph2D.draw("NMFDraw2DFull.png"); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Function_draw.expout000066400000000000000000002760661307543307100215640ustar00rootroot00000000000000f=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*_pi*x)*exp(-x^2/2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*_pi*x)*exp(-x^2/2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*_pi*x)*exp(-x^2/2)] graph=class=Graph name=y0 as a function of x implementation=class=GraphImplementation name=y0 as a function of x title=y0 as a function of x xTitle=x yTitle=y0 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=32 dimension=2 data=[[-1.2,-0.462929],[-1.12258,-0.370796],[-1.04516,-0.162143],[-0.967742,0.126031],[-0.890323,0.427794],[-0.812903,0.663231],[-0.735484,0.759851],[-0.658065,0.67465],[-0.580645,0.410016],[-0.503226,0.0178566],[-0.425806,-0.410515],[-0.348387,-0.766947],[-0.270968,-0.955601],[-0.193548,-0.920351],[-0.116129,-0.662137],[-0.0387097,-0.240649],[0.0387097,0.240649],[0.116129,0.662137],[0.193548,0.920351],[0.270968,0.955601],[0.348387,0.766947],[0.425806,0.410515],[0.503226,-0.0178566],[0.580645,-0.410016],[0.658065,-0.67465],[0.735484,-0.759851],[0.812903,-0.663231],[0.890323,-0.427794],[0.967742,-0.126031],[1.04516,0.162143],[1.12258,0.370796],[1.2,0.462929]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] f=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[2.0+x-2*y+x*y-x^2-3*y^2+x*y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[2.0+x-2*y+x*y-x^2-3*y^2+x*y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[2.0+x-2*y+x*y-x^2-3*y^2+x*y^2] graph=class=Graph name=y0 as a function of (x,y) implementation=class=GraphImplementation name=y0 as a function of (x,y) title=y0 as a function of (x,y) xTitle=x yTitle=y axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-841] labels=[-841] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-841 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-434] labels=[-434] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-434 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-234] labels=[-234] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-234 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-128] labels=[-128] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-128 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-71] labels=[-71] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-71 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-34] labels=[-34] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-34 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-11] labels=[-11] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-11 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[1] labels=[1] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[59] labels=[59] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=59 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[258] labels=[258] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=258 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] graph1D=class=Graph name=y0 as a function of x0 around [1,-0.5,1.5] implementation=class=GraphImplementation name=y0 as a function of x0 around [1,-0.5,1.5] title=y0 as a function of x0 around [1,-0.5,1.5] xTitle=x0 yTitle=y0 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=32 dimension=2 data=[[-5,-3.69476],[-4.67742,-3.78391],[-4.35484,-3.02071],[-4.03226,-1.89872],[-3.70968,-1.2221],[-3.3871,-1.40946],[-3.06452,-2.13148],[-2.74194,-2.596],[-2.41935,-2.23377],[-2.09677,-1.19124],[-1.77419,-0.203786],[-1.45161,0.0409039],[-1.12903,-0.501874],[-0.806452,-1.19512],[-0.483871,-1.27159],[-0.16129,-0.497955],[0.16129,0.623188],[0.483871,1.28841],[0.806452,1.08897],[1.12903,0.364642],[1.45161,-0.0904172],[1.77419,0.284854],[2.09677,1.33272],[2.41935,2.31318],[2.74194,2.5446],[3.06452,1.99377],[3.3871,1.30465],[3.70968,1.24093],[4.03226,2.02488],[4.35484,3.14499],[4.67742,3.79872],[5,3.58728]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] graph1D=class=Graph name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=GraphImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] title=y1 as a function of (x1,x2) around [1,-0.5,1.5] xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-4.33184] labels=[-4.33184] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-4.33184 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-2.52913] labels=[-2.52913] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-2.52913 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-1.81489] labels=[-1.81489] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-1.81489 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-1.09649] labels=[-1.09649] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-1.09649 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-0.370831] labels=[-0.370831] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-0.370831 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[0.301006] labels=[0.301006] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=0.301006 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[1.0806] labels=[1.0806] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=1.0806 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[1.64977] labels=[1.64977] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=1.64977 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[2.63876] labels=[2.63876] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=2.63876 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[4.39464] labels=[4.39464] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=4.39464 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] openturns-1.9/lib/test/t_Function_history.cxx000066400000000000000000000045731307543307100215760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for history mechanism * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { SymbolicFunction f("x", "x^2"); UnsignedInteger size = 4; Sample input(size, 1); for (UnsignedInteger i = 0; i < size; ++i) input[i][0] = i; Sample output(f(input)); fullprint << "Is history enabled for f? " << (f.isHistoryEnabled() ? "true" : "false") << std::endl; fullprint << "input history=" << f.getHistoryInput() << std::endl; fullprint << "output history=" << f.getHistoryOutput() << std::endl; f.enableHistory(); output = f(input); fullprint << "Is history enabled for f? " << (f.isHistoryEnabled() ? "true" : "false") << std::endl; fullprint << "input history=" << f.getHistoryInput() << std::endl; fullprint << "output history=" << f.getHistoryOutput() << std::endl; f.clearHistory(); fullprint << "Is history enabled for f? " << (f.isHistoryEnabled() ? "true" : "false") << std::endl; fullprint << "input history=" << f.getHistoryInput() << std::endl; fullprint << "output history=" << f.getHistoryOutput() << std::endl; // Perform the computation twice output = f(input); output = f(input); fullprint << "input history=" << f.getHistoryInput() << std::endl; fullprint << "output history=" << f.getHistoryOutput() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Function_history.expout000066400000000000000000000031261307543307100223110ustar00rootroot00000000000000Is history enabled for f? false input history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] output history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Is history enabled for f? true input history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1],[2],[3]] output history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1],[4],[9]] Is history enabled for f? true input history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] output history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] input history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[0],[1],[2],[3],[0],[1],[2],[3]] output history=class=HistoryStrategy implementation=class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[0],[1],[4],[9],[0],[1],[4],[9]] openturns-1.9/lib/test/t_Function_operations.cxx000066400000000000000000000116511307543307100222530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for linear combinations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { { // Product // First, build a function from R^3->R Description inVar(Description::BuildDefault(3, "x")); Description outVar(Description::BuildDefault(1, "y")); Description formula(1); formula[0] = "x0^2 + 2 * x1 * x2 + 3 * x2"; Function f1(inVar, outVar, formula); // Second, build a function from R^3->R^2 formula[0] = "x2 - x0 + x1"; formula.add("x0 + x1 * x0 + x2"); outVar = Description::BuildDefault(2, "y"); Function f2(inVar, outVar, formula); // Third, build the product function Function myFunction(f1 * f2); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myFunction=" << myFunction << std::endl; fullprint << "myFunction=" << myFunction.__str__() << std::endl; const Point value(myFunction(inPoint)); fullprint << "Value at " << inPoint << "=\n" << value << std::endl; fullprint << "Value at " << inPoint << "=\n" << value.__str__() << std::endl; const Matrix gradient(myFunction.gradient(inPoint)); fullprint << "Gradient at " << inPoint << "=\n" << gradient << std::endl; fullprint << "Gradient at " << inPoint << "=\n" << gradient.__str__() << std::endl; const SymmetricTensor hessian(myFunction.hessian(inPoint)); fullprint << "Hessian at " << inPoint << "=\n" << hessian << std::endl; fullprint << "Hessian at " << inPoint << "=\n" << hessian.__str__() << std::endl; } // Product { // Sum/difference // First, build two functions from R^3->R^2 Description inVar(Description::BuildDefault(3, "x")); Description outVar(Description::BuildDefault(2, "y")); Description formula(2); formula[0] = "x0 + 2 * x1 * x2 + 3 * x2"; formula[1] = "x2 - x0 + x1 * x0"; Function f1(inVar, outVar, formula); formula[0] = "x0 + x1 + x2"; formula[1] = "-2 * x0 + 3 * x2 * x1 - x1"; Function f2(inVar, outVar, formula); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; // Second, build the function Function mySum(f1 + f2); { fullprint << "mySum=" << mySum << std::endl; fullprint << "mySum=" << mySum.__str__() << std::endl; const Point value(mySum(inPoint)); fullprint << "Value at " << inPoint << "=\n" << value << std::endl; fullprint << "Value at " << inPoint << "=\n" << value.__str__() << std::endl; const Matrix gradient(mySum.gradient(inPoint)); fullprint << "Gradient at " << inPoint << "=\n" << gradient << std::endl; fullprint << "Gradient at " << inPoint << "=\n" << gradient.__str__() << std::endl; const SymmetricTensor hessian(mySum.hessian(inPoint)); fullprint << "Hessian at " << inPoint << "=\n" << hessian << std::endl; fullprint << "Hessian at " << inPoint << "=\n" << hessian.__str__() << std::endl; } Function myDiff(f1 - f2); { fullprint << "myDiff=" << myDiff << std::endl; fullprint << "myDiff=" << myDiff.__str__() << std::endl; const Point value(myDiff(inPoint)); fullprint << "Value at " << inPoint << "=\n" << value << std::endl; fullprint << "Value at " << inPoint << "=\n" << value.__str__() << std::endl; const Matrix gradient(myDiff.gradient(inPoint)); fullprint << "Gradient at " << inPoint << "=\n" << gradient << std::endl; fullprint << "Gradient at " << inPoint << "=\n" << gradient.__str__() << std::endl; const SymmetricTensor hessian(myDiff.hessian(inPoint)); fullprint << "Hessian at " << inPoint << "=\n" << hessian << std::endl; fullprint << "Hessian at " << inPoint << "=\n" << hessian.__str__() << std::endl; } } // Sum/difference } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Function_operations.expout000066400000000000000000000345301307543307100227760ustar00rootroot00000000000000myFunction=class=Function name=Unnamed implementation=class=ProductFunction name=Unnamed description=[x0,x1,x2,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2 + 2 * x1 * x2 + 3 * x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2 + 2 * x1 * x2 + 3 * x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2 + 2 * x1 * x2 + 3 * x2] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x2 - x0 + x1,x0 + x1 * x0 + x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x2 - x0 + x1,x0 + x1 * x0 + x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x2 - x0 + x1,x0 + x1 * x0 + x2] myFunction=class=ProductFunction name=Unnamed description=[x0,x1,x2,y0,y1] left function=[x0,x1,x2]->[x0^2 + 2 * x1 * x2 + 3 * x2] right function=[x0,x1,x2]->[x2 - x0 + x1,x0 + x1 * x0 + x2] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Point name=Unnamed dimension=2 values=[122.76,200.781] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [122.76,200.781] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[-16.48,57.88,61.48,107.688,82.784,83.216] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [[ -16.48 107.688 ] [ 57.88 82.784 ] [ 61.48 83.216 ]] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[4.2,-4.4,-5.2,0,13.6,23.4,0,0,15.2,30.56,52.6,27.48,0,16.32,30.64,0,0,15.2] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= sheet #0 [[ 4.2 -4.4 -5.2 ] [ -4.4 13.6 23.4 ] [ -5.2 23.4 15.2 ]] sheet #1 [[ 30.56 52.6 27.48 ] [ 52.6 16.32 30.64 ] [ 27.48 30.64 15.2 ]] mySum=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,1] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,1] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,1] mySum=(([x0,x1,x2]->[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0]) + ([x0,x1,x2]->[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1])) Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Point name=Unnamed dimension=2 values=[33.94,23.72] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [33.94,23.72] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[2,7.8,8.6,-0.7,10.4,7.9] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [[ 2 -0.7 ] [ 7.8 10.4 ] [ 8.6 7.9 ]] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,2,0,2,0,0,1,0,1,0,3,0,3,0] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= sheet #0 [[ 0 0 0 ] [ 0 0 2 ] [ 0 2 0 ]] sheet #1 [[ 0 1 0 ] [ 1 0 3 ] [ 0 3 0 ]] myDiff=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] myDiff=(([x0,x1,x2]->[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0]) - ([x0,x1,x2]->[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1])) Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Point name=Unnamed dimension=2 values=[20.14,-13.8] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [20.14,-13.8] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[0,5.8,6.6,3.3,-8,-5.9] Gradient at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= [[ 0 3.3 ] [ 5.8 -8 ] [ 6.6 -5.9 ]] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,2,0,2,0,0,1,0,1,0,-3,0,-3,0] Hessian at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]= sheet #0 [[ 0 0 0 ] [ 0 0 2 ] [ 0 2 0 ]] sheet #1 [[ 0 1 0 ] [ 1 0 -3 ] [ 0 -3 0 ]] openturns-1.9/lib/test/t_Function_std.cxx000066400000000000000000000051031307543307100206550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities //checkClassWithClassName(); /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); /** Copy constructor */ Function newFunc(myFunc); fullprint << "myFunc=" << myFunc << std::endl; Point point(myFunc.getInputDimension(), 1.2); fullprint << "myFunc(point)=" << myFunc(point) << std::endl; fullprint << "myFunc input parameter(s)="; for (UnsignedInteger i = 0; i < myFunc.getInputDimension(); i++) { fullprint << (i == 0 ? "" : ",") << myFunc.getInputDescription()[i]; } fullprint << std::endl; fullprint << "myFunc output parameter(s)="; for (UnsignedInteger i = 0; i < myFunc.getOutputDimension(); i++) { fullprint << (i == 0 ? "" : ",") << myFunc.getOutputDescription()[i]; } fullprint << std::endl; for (UnsignedInteger i = 0; i < myFunc.getOutputDimension(); i++) { fullprint << "myFunc marginal " << i << "(point)=" << myFunc.getMarginal(i)(point) << std::endl; } Indices indices(2); indices[0] = 2; indices[1] = 0; fullprint << "myFunc marginal " << indices << "(point)=" << myFunc.getMarginal(indices)(point) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Function_std.expout000066400000000000000000000023201307543307100213750ustar00rootroot00000000000000myFunc=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc(point)=class=Point name=Unnamed dimension=3 values=[1.11845,-0.737394,0.662627] myFunc input parameter(s)=x1,x2 myFunc output parameter(s)=y0,y1,y2 myFunc marginal 0(point)=class=Point name=Unnamed dimension=1 values=[1.11845] myFunc marginal 1(point)=class=Point name=Unnamed dimension=1 values=[-0.737394] myFunc marginal 2(point)=class=Point name=Unnamed dimension=1 values=[0.662627] myFunc marginal [2,0](point)=class=Point name=Unnamed dimension=2 values=[0.662627,1.11845] openturns-1.9/lib/test/t_FunctionalBasisProcess_std.cxx000066400000000000000000000050721307543307100235200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FunctionalBasisProcess * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { const Scalar Tmin = 0.0; const Scalar deltaT = 0.1; const UnsignedInteger N = 11; /* Initialization of the RegularGrid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, N); /* Functional basis */ UnsignedInteger basisDimension = 10; Basis basis(basisDimension); Collection coefficients(basisDimension); UnsignedInteger oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(20); for (UnsignedInteger i = 0; i < basisDimension; ++i) { basis[i] = SymbolicFunction("x", String(OSS() << "sin(" << i << "*x)")); coefficients[i] = Normal(0.0, (1.0 + i)); } PlatformInfo::SetNumericalPrecision(oldPrecision); Process process = FunctionalBasisProcess(ComposedDistribution(coefficients), basis); /* Setting the timeGrid */ process.setTimeGrid(timeGrid); /* Print of the process */ fullprint << "process = " << process << std::endl; /* Initialization of the TimeSeries */ TimeSeries timeSerie = process.getRealization(); /* Full prints */ fullprint << "timeSerie = " << timeSerie << std::endl; // Some steps further UnsignedInteger stepNumber = 4; fullprint << "One future=" << process.getFuture(stepNumber) << std::endl; UnsignedInteger size = 3; fullprint << "Some futures=" << process.getFuture(stepNumber, size) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalBasisProcess_std.expout000066400000000000000000000253241307543307100242440ustar00rootroot00000000000000process = class=Process implementation=class=FunctionalBasisProcess distribution=class=ComposedDistribution name=ComposedDistribution dimension=10 copula=class=IndependentCopula name=IndependentCopula dimension=10 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[3]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[4]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[5]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[6] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[6]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[7] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[7]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[8] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[8]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[9] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[9]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[10] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] basis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)]] timeSerie = class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0],[15.1214],[19.6823],[10.0388],[-8.19027],[-23.8303],[-27.3493],[-16.7578],[1.53599],[17.1672],[22.3299]] start=0 timeStep=0.1 n=11 One future=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[16.0431],[3.69774],[-7.2426],[-12.0885]] start=1.1 timeStep=0.1 n=4 Some futures=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[16.0431],[3.69774],[-7.2426],[-12.0885]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[16.0431],[3.69774],[-7.2426],[-12.0885]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[16.0431],[3.69774],[-7.2426],[-12.0885]]] openturns-1.9/lib/test/t_FunctionalChaosRandomVector_std.cxx000066400000000000000000000024351307543307100245010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FunctionalChaosRandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // see #619 try { FunctionalChaosResult result; FunctionalChaosRandomVector rvector(result); } catch (InvalidArgumentException & ex) { fullprint << "caught exception: " << ex.what() << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaosRandomVector_std.expout000066400000000000000000000002771307543307100252250ustar00rootroot00000000000000caught exception: Error: trying to build a CompositeRandomVector from a RandomVector and a Function with incompatible dimensions, here RandomVector dimension=1 and Function input dimension=0 openturns-1.9/lib/test/t_FunctionalChaos_gsobol.cxx000066400000000000000000000200351307543307100226440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FunctionalChaosAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar sobol(const Indices & indices, const Point & a) { Scalar value = 1.0; for (UnsignedInteger i = 0; i < indices.getSize(); ++i) { value *= 1.0 / (3.0 * pow(1.0 + a[indices[i]], 2.0)); } return value; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Problem parameters UnsignedInteger dimension = 5; // Reference analytical values Scalar meanTh = 1.0; Scalar covTh = 1.0; Point a(dimension); // Create the gSobol function Description inputVariables(dimension); Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = "1.0"; for (UnsignedInteger i = 0; i < dimension; ++i) { a[i] = 0.5 * i; covTh *= 1.0 + 1.0 / (3.0 * pow(1.0 + a[i], 2.0)); inputVariables[i] = (OSS() << "xi" << i); formula[0] = (OSS() << formula[0] << " * ((abs(4.0 * xi" << i << " - 2.0) + " << a[i] << ") / (1.0 + " << a[i] << "))"); } --covTh; Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginals(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { marginals[i] = Uniform(0.0, 1.0); } ComposedDistribution distribution(marginals); // Create the orthogonal basis Collection polynomialCollection(dimension); for (UnsignedInteger i = 0; i < dimension; ++i) { polynomialCollection[i] = LegendreFactory(); } EnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Create the adaptive strategy // We can choose amongst several strategies // First, the most efficient (but more complex!) strategy Collection listAdaptiveStrategy(0); UnsignedInteger degree = 4; UnsignedInteger indexMax = enumerateFunction.getStrataCumulatedCardinal(degree); UnsignedInteger basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree / 2); Scalar threshold = 1.0e-6; listAdaptiveStrategy.add(CleaningStrategy(productBasis, indexMax, basisDimension, threshold, false)); // Second, the most used (and most basic!) strategy listAdaptiveStrategy.add(FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))); // Third, a slight enhancement with respect to the basic strategy listAdaptiveStrategy.add(SequentialStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree / 2), false)); for(UnsignedInteger adaptiveStrategyIndex = 0; adaptiveStrategyIndex < listAdaptiveStrategy.getSize(); ++adaptiveStrategyIndex) { AdaptiveStrategy adaptiveStrategy(listAdaptiveStrategy[adaptiveStrategyIndex]); // Create the projection strategy UnsignedInteger samplingSize = 250; Collection listProjectionStrategy(0); // The least squares strategy // Monte Carlo sampling listProjectionStrategy.add(LeastSquaresStrategy(MonteCarloExperiment(samplingSize))); // LHS sampling listProjectionStrategy.add(LeastSquaresStrategy(LHSExperiment(samplingSize))); // Low Discrepancy sequence listProjectionStrategy.add(LeastSquaresStrategy(LowDiscrepancyExperiment(LowDiscrepancySequence(SobolSequence()), samplingSize))); // The integration strategy // Monte Carlo sampling listProjectionStrategy.add(IntegrationStrategy(MonteCarloExperiment(samplingSize))); // LHS sampling listProjectionStrategy.add(IntegrationStrategy(LHSExperiment(samplingSize))); // Low Discrepancy sequence listProjectionStrategy.add(IntegrationStrategy(LowDiscrepancyExperiment(LowDiscrepancySequence(SobolSequence()), samplingSize))); for(UnsignedInteger projectionStrategyIndex = 0; projectionStrategyIndex < listProjectionStrategy.getSize(); ++projectionStrategyIndex) { ProjectionStrategy projectionStrategy(listProjectionStrategy[projectionStrategyIndex]); // Create the polynomial chaos algorithm Scalar maximumResidual = 1.0e-10; FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); algo.setMaximumResidual(maximumResidual); // Reinitialize the RandomGenerator to see the effect of the sampling method only RandomGenerator::SetSeed(0); algo.run(); // Examine the results FunctionalChaosResult result(algo.getResult()); fullprint << "//////////////////////////////////////////////////////////////////////" << std::endl; fullprint << algo.getAdaptiveStrategy() << std::endl; fullprint << algo.getProjectionStrategy() << std::endl; Point residuals(result.getResiduals()); fullprint << "residuals=" << std::fixed << std::setprecision(5) << residuals << std::endl; Point relativeErrors(result.getRelativeErrors()); fullprint << "relative errors=" << std::fixed << std::setprecision(5) << relativeErrors << std::endl; // Post-process the results FunctionalChaosRandomVector vector(result); Scalar mean = vector.getMean()[0]; fullprint << "mean=" << std::fixed << std::setprecision(5) << mean << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(mean - meanTh) << std::endl; Scalar variance = vector.getCovariance()(0, 0); fullprint << "variance=" << std::fixed << std::setprecision(5) << variance << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(variance - covTh) << std::endl; Indices indices(1); for(UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; Scalar value = vector.getSobolIndex(i); fullprint << "Sobol index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sobol(indices, a) / covTh) << std::endl; } indices = Indices(2); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < dimension; ++j) { indices[1] = j; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sobol(indices, a) / covTh) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sobol(indices, a) / covTh) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_gsobol.expout000066400000000000000000001023421307543307100233700ustar00rootroot00000000000000////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.000747975] relative errors=class=Point name=Unnamed dimension=1 values=[0.000179746] mean=1.01719 absolute error=1.7e-02 variance=0.77079 absolute error=4.1e-02 Sobol index 0 = 0.40665 absolute error=4.1e-03 Sobol index 1 = 0.20470 absolute error=2.2e-02 Sobol index 2 = 0.11767 absolute error=1.5e-02 Sobol index 3 = 0.06381 absolute error=1.9e-03 Sobol index 4 = 0.05107 absolute error=5.4e-03 Sobol index [0,1] =0.05895 absolute error=1.9e-03 Sobol index [0,2] =0.02768 absolute error=6.6e-03 Sobol index [0,3] =0.01890 absolute error=3.0e-03 Sobol index [0,4] =0.01140 absolute error=3.8e-03 Sobol index [1,2] =0.01860 absolute error=3.4e-03 Sobol index [1,3] =0.00745 absolute error=2.3e-03 Sobol index [1,4] =0.00332 absolute error=3.4e-03 Sobol index [2,3] =0.00433 absolute error=1.2e-03 Sobol index [2,4] =0.00326 absolute error=5.4e-04 Sobol index [3,4] =0.00000 absolute error=2.4e-03 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.000731116] relative errors=class=Point name=Unnamed dimension=1 values=[0.000186856] mean=1.01215 absolute error=1.2e-02 variance=0.77109 absolute error=4.0e-02 Sobol index 0 = 0.43137 absolute error=2.1e-02 Sobol index 1 = 0.19674 absolute error=1.4e-02 Sobol index 2 = 0.10462 absolute error=1.9e-03 Sobol index 3 = 0.06158 absolute error=4.1e-03 Sobol index 4 = 0.06223 absolute error=1.7e-02 Sobol index [0,1] =0.05429 absolute error=6.6e-03 Sobol index [0,2] =0.02645 absolute error=7.8e-03 Sobol index [0,3] =0.01152 absolute error=1.0e-02 Sobol index [0,4] =0.01281 absolute error=2.4e-03 Sobol index [1,2] =0.00996 absolute error=5.3e-03 Sobol index [1,3] =0.00623 absolute error=3.5e-03 Sobol index [1,4] =0.00589 absolute error=8.7e-04 Sobol index [2,3] =0.00564 absolute error=1.6e-04 Sobol index [2,4] =0.00551 absolute error=1.7e-03 Sobol index [3,4] =0.00372 absolute error=1.3e-03 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.000755863] relative errors=class=Point name=Unnamed dimension=1 values=[0.000198192] mean=1.00209 absolute error=2.1e-03 variance=0.73650 absolute error=7.5e-02 Sobol index 0 = 0.42117 absolute error=1.0e-02 Sobol index 1 = 0.19370 absolute error=1.1e-02 Sobol index 2 = 0.11212 absolute error=9.4e-03 Sobol index 3 = 0.07006 absolute error=4.3e-03 Sobol index 4 = 0.04993 absolute error=4.3e-03 Sobol index [0,1] =0.04613 absolute error=1.5e-02 Sobol index [0,2] =0.03263 absolute error=1.6e-03 Sobol index [0,3] =0.01646 absolute error=5.4e-03 Sobol index [0,4] =0.01355 absolute error=1.7e-03 Sobol index [1,2] =0.01588 absolute error=6.7e-04 Sobol index [1,3] =0.00632 absolute error=3.4e-03 Sobol index [1,4] =0.00398 absolute error=2.8e-03 Sobol index [2,3] =0.00544 absolute error=3.8e-05 Sobol index [2,4] =0.00410 absolute error=3.0e-04 Sobol index [3,4] =0.00000 absolute error=2.4e-03 Sobol index [0,1,2] =0.00206 absolute error=3.0e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.0949945] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=1.01809 absolute error=1.8e-02 variance=1.69306 absolute error=8.8e-01 Sobol index 0 = 0.14261 absolute error=2.7e-01 Sobol index 1 = 0.13317 absolute error=4.9e-02 Sobol index 2 = 0.00000 absolute error=1.0e-01 Sobol index 3 = 0.02506 absolute error=4.1e-02 Sobol index 4 = 0.08596 absolute error=4.0e-02 Sobol index [0,1] =0.05695 absolute error=3.9e-03 Sobol index [0,2] =0.00000 absolute error=3.4e-02 Sobol index [0,3] =0.00000 absolute error=2.2e-02 Sobol index [0,4] =0.06055 absolute error=4.5e-02 Sobol index [1,2] =0.00000 absolute error=1.5e-02 Sobol index [1,3] =0.00000 absolute error=9.7e-03 Sobol index [1,4] =0.00000 absolute error=6.8e-03 Sobol index [2,3] =0.00000 absolute error=5.5e-03 Sobol index [2,4] =0.00000 absolute error=3.8e-03 Sobol index [3,4] =0.02947 absolute error=2.7e-02 Sobol index [0,1,2] =0.03403 absolute error=2.9e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.0569396] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98767 absolute error=1.2e-02 variance=1.22492 absolute error=4.1e-01 Sobol index 0 = 0.19784 absolute error=2.1e-01 Sobol index 1 = 0.08475 absolute error=9.8e-02 Sobol index 2 = 0.05520 absolute error=4.7e-02 Sobol index 3 = 0.05847 absolute error=7.2e-03 Sobol index 4 = 0.05100 absolute error=5.4e-03 Sobol index [0,1] =0.04743 absolute error=1.3e-02 Sobol index [0,2] =0.00000 absolute error=3.4e-02 Sobol index [0,3] =0.03203 absolute error=1.0e-02 Sobol index [0,4] =0.00000 absolute error=1.5e-02 Sobol index [1,2] =0.03114 absolute error=1.6e-02 Sobol index [1,3] =0.03155 absolute error=2.2e-02 Sobol index [1,4] =0.04619 absolute error=3.9e-02 Sobol index [2,3] =0.00000 absolute error=5.5e-03 Sobol index [2,4] =0.00000 absolute error=3.8e-03 Sobol index [3,4] =0.04194 absolute error=4.0e-02 Sobol index [0,1,2] =0.03750 absolute error=3.2e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=21 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0487801] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98068 absolute error=1.9e-02 variance=0.98347 absolute error=1.7e-01 Sobol index 0 = 0.28975 absolute error=1.2e-01 Sobol index 1 = 0.11920 absolute error=6.3e-02 Sobol index 2 = 0.05985 absolute error=4.3e-02 Sobol index 3 = 0.05148 absolute error=1.4e-02 Sobol index 4 = 0.03847 absolute error=7.2e-03 Sobol index [0,1] =0.01403 absolute error=4.7e-02 Sobol index [0,2] =0.00000 absolute error=3.4e-02 Sobol index [0,3] =0.00000 absolute error=2.2e-02 Sobol index [0,4] =0.00000 absolute error=1.5e-02 Sobol index [1,2] =0.00000 absolute error=1.5e-02 Sobol index [1,3] =0.00000 absolute error=9.7e-03 Sobol index [1,4] =0.00000 absolute error=6.8e-03 Sobol index [2,3] =0.00000 absolute error=5.5e-03 Sobol index [2,4] =0.00000 absolute error=3.8e-03 Sobol index [3,4] =0.01595 absolute error=1.4e-02 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.000486389] relative errors=class=Point name=Unnamed dimension=1 values=[7.60066e-05] mean=1.02272 absolute error=2.3e-02 variance=0.90017 absolute error=8.9e-02 Sobol index 0 = 0.40358 absolute error=7.1e-03 Sobol index 1 = 0.18033 absolute error=2.2e-03 Sobol index 2 = 0.09823 absolute error=4.4e-03 Sobol index 3 = 0.07319 absolute error=7.5e-03 Sobol index 4 = 0.03993 absolute error=5.7e-03 Sobol index [0,1] =0.05429 absolute error=6.6e-03 Sobol index [0,2] =0.03629 absolute error=2.1e-03 Sobol index [0,3] =0.02520 absolute error=3.3e-03 Sobol index [0,4] =0.01559 absolute error=3.8e-04 Sobol index [1,2] =0.01456 absolute error=6.5e-04 Sobol index [1,3] =0.00680 absolute error=2.9e-03 Sobol index [1,4] =0.00724 absolute error=4.8e-04 Sobol index [2,3] =0.00319 absolute error=2.3e-03 Sobol index [2,4] =0.00332 absolute error=4.8e-04 Sobol index [3,4] =0.00369 absolute error=1.3e-03 Sobol index [0,1,2] =0.00160 absolute error=3.5e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.000424142] relative errors=class=Point name=Unnamed dimension=1 values=[6.28862e-05] mean=1.01272 absolute error=1.3e-02 variance=0.80617 absolute error=5.4e-03 Sobol index 0 = 0.40035 absolute error=1.0e-02 Sobol index 1 = 0.19126 absolute error=8.7e-03 Sobol index 2 = 0.09229 absolute error=1.0e-02 Sobol index 3 = 0.07136 absolute error=5.6e-03 Sobol index 4 = 0.04956 absolute error=3.9e-03 Sobol index [0,1] =0.06437 absolute error=3.5e-03 Sobol index [0,2] =0.02313 absolute error=1.1e-02 Sobol index [0,3] =0.01262 absolute error=9.3e-03 Sobol index [0,4] =0.01263 absolute error=2.6e-03 Sobol index [1,2] =0.01820 absolute error=3.0e-03 Sobol index [1,3] =0.00797 absolute error=1.8e-03 Sobol index [1,4] =0.01008 absolute error=3.3e-03 Sobol index [2,3] =0.00279 absolute error=2.7e-03 Sobol index [2,4] =0.00674 absolute error=2.9e-03 Sobol index [3,4] =0.00659 absolute error=4.2e-03 Sobol index [0,1,2] =0.00107 absolute error=4.0e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.000529075] relative errors=class=Point name=Unnamed dimension=1 values=[9.71037e-05] mean=1.00365 absolute error=3.6e-03 variance=0.79975 absolute error=1.2e-02 Sobol index 0 = 0.39887 absolute error=1.2e-02 Sobol index 1 = 0.18784 absolute error=5.3e-03 Sobol index 2 = 0.09898 absolute error=3.7e-03 Sobol index 3 = 0.07067 absolute error=5.0e-03 Sobol index 4 = 0.05266 absolute error=7.0e-03 Sobol index [0,1] =0.04523 absolute error=1.6e-02 Sobol index [0,2] =0.02875 absolute error=5.5e-03 Sobol index [0,3] =0.02753 absolute error=5.6e-03 Sobol index [0,4] =0.01574 absolute error=5.3e-04 Sobol index [1,2] =0.01066 absolute error=4.6e-03 Sobol index [1,3] =0.00926 absolute error=4.8e-04 Sobol index [1,4] =0.01014 absolute error=3.4e-03 Sobol index [2,3] =0.00527 absolute error=2.0e-04 Sobol index [2,4] =0.00439 absolute error=5.9e-04 Sobol index [3,4] =0.00441 absolute error=2.0e-03 Sobol index [0,1,2] =0.00204 absolute error=3.0e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.139052] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=1.01809 absolute error=1.8e-02 variance=2.65816 absolute error=1.8e+00 Sobol index 0 = 0.10028 absolute error=3.1e-01 Sobol index 1 = 0.09072 absolute error=9.2e-02 Sobol index 2 = 0.02623 absolute error=7.6e-02 Sobol index 3 = 0.03497 absolute error=3.1e-02 Sobol index 4 = 0.05597 absolute error=1.0e-02 Sobol index [0,1] =0.04976 absolute error=1.1e-02 Sobol index [0,2] =0.01520 absolute error=1.9e-02 Sobol index [0,3] =0.02464 absolute error=2.7e-03 Sobol index [0,4] =0.05530 absolute error=4.0e-02 Sobol index [1,2] =0.03005 absolute error=1.5e-02 Sobol index [1,3] =0.02218 absolute error=1.2e-02 Sobol index [1,4] =0.01776 absolute error=1.1e-02 Sobol index [2,3] =0.00713 absolute error=1.7e-03 Sobol index [2,4] =0.01629 absolute error=1.2e-02 Sobol index [3,4] =0.03823 absolute error=3.6e-02 Sobol index [0,1,2] =0.03395 absolute error=2.9e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.0960581] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98767 absolute error=1.2e-02 variance=1.96252 absolute error=1.2e+00 Sobol index 0 = 0.14101 absolute error=2.7e-01 Sobol index 1 = 0.05635 absolute error=1.3e-01 Sobol index 2 = 0.03529 absolute error=6.7e-02 Sobol index 3 = 0.03980 absolute error=2.6e-02 Sobol index 4 = 0.03361 absolute error=1.2e-02 Sobol index [0,1] =0.04336 absolute error=1.7e-02 Sobol index [0,2] =0.01303 absolute error=2.1e-02 Sobol index [0,3] =0.04507 absolute error=2.3e-02 Sobol index [0,4] =0.03356 absolute error=1.8e-02 Sobol index [1,2] =0.04102 absolute error=2.6e-02 Sobol index [1,3] =0.03854 absolute error=2.9e-02 Sobol index [1,4] =0.05723 absolute error=5.0e-02 Sobol index [2,3] =0.02227 absolute error=1.7e-02 Sobol index [2,4] =0.01265 absolute error=8.8e-03 Sobol index [3,4] =0.03682 absolute error=3.4e-02 Sobol index [0,1,2] =0.06059 absolute error=5.6e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=126 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0742206] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98068 absolute error=1.9e-02 variance=1.29228 absolute error=4.8e-01 Sobol index 0 = 0.22147 absolute error=1.9e-01 Sobol index 1 = 0.09293 absolute error=9.0e-02 Sobol index 2 = 0.05130 absolute error=5.1e-02 Sobol index 3 = 0.04184 absolute error=2.4e-02 Sobol index 4 = 0.02944 absolute error=1.6e-02 Sobol index [0,1] =0.01384 absolute error=4.7e-02 Sobol index [0,2] =0.02545 absolute error=8.8e-03 Sobol index [0,3] =0.01277 absolute error=9.1e-03 Sobol index [0,4] =0.01006 absolute error=5.2e-03 Sobol index [1,2] =0.02587 absolute error=1.1e-02 Sobol index [1,3] =0.02190 absolute error=1.2e-02 Sobol index [1,4] =0.01001 absolute error=3.3e-03 Sobol index [2,3] =0.01147 absolute error=6.0e-03 Sobol index [2,4] =0.02031 absolute error=1.7e-02 Sobol index [3,4] =0.02366 absolute error=2.1e-02 Sobol index [0,1,2] =0.00898 absolute error=3.9e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.00166099] relative errors=class=Point name=Unnamed dimension=1 values=[0.000886377] mean=1.00029 absolute error=2.9e-04 variance=0.62526 absolute error=1.9e-01 Sobol index 0 = 0.52160 absolute error=1.1e-01 Sobol index 1 = 0.21324 absolute error=3.1e-02 Sobol index 2 = 0.12231 absolute error=2.0e-02 Sobol index 3 = 0.06708 absolute error=1.4e-03 Sobol index 4 = 0.05347 absolute error=7.8e-03 Sobol index [0,1] =0.00025 absolute error=6.1e-02 Sobol index [0,2] =0.00234 absolute error=3.2e-02 Sobol index [0,3] =0.00306 absolute error=1.9e-02 Sobol index [0,4] =0.00003 absolute error=1.5e-02 Sobol index [1,2] =0.00209 absolute error=1.3e-02 Sobol index [1,3] =0.00638 absolute error=3.4e-03 Sobol index [1,4] =0.00461 absolute error=2.1e-03 Sobol index [2,3] =0.00137 absolute error=4.1e-03 Sobol index [2,4] =0.00214 absolute error=1.7e-03 Sobol index [3,4] =0.00003 absolute error=2.4e-03 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.00160546] relative errors=class=Point name=Unnamed dimension=1 values=[0.000901012] mean=0.98742 absolute error=1.3e-02 variance=0.58350 absolute error=2.3e-01 Sobol index 0 = 0.48435 absolute error=7.4e-02 Sobol index 1 = 0.25250 absolute error=7.0e-02 Sobol index 2 = 0.08924 absolute error=1.3e-02 Sobol index 3 = 0.09005 absolute error=2.4e-02 Sobol index 4 = 0.06658 absolute error=2.1e-02 Sobol index [0,1] =0.00312 absolute error=5.8e-02 Sobol index [0,2] =0.00133 absolute error=3.3e-02 Sobol index [0,3] =0.00010 absolute error=2.2e-02 Sobol index [0,4] =0.00003 absolute error=1.5e-02 Sobol index [1,2] =0.00036 absolute error=1.5e-02 Sobol index [1,3] =0.00464 absolute error=5.1e-03 Sobol index [1,4] =0.00372 absolute error=3.0e-03 Sobol index [2,3] =0.00170 absolute error=3.8e-03 Sobol index [2,4] =0.00063 absolute error=3.2e-03 Sobol index [3,4] =0.00164 absolute error=7.9e-04 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0016184] relative errors=class=Point name=Unnamed dimension=1 values=[0.000908599] mean=0.99262 absolute error=7.4e-03 variance=0.58379 absolute error=2.3e-01 Sobol index 0 = 0.49747 absolute error=8.7e-02 Sobol index 1 = 0.22343 absolute error=4.1e-02 Sobol index 2 = 0.12660 absolute error=2.4e-02 Sobol index 3 = 0.08963 absolute error=2.4e-02 Sobol index 4 = 0.05481 absolute error=9.2e-03 Sobol index [0,1] =0.00116 absolute error=6.0e-02 Sobol index [0,2] =0.00208 absolute error=3.2e-02 Sobol index [0,3] =0.00040 absolute error=2.2e-02 Sobol index [0,4] =0.00018 absolute error=1.5e-02 Sobol index [1,2] =0.00021 absolute error=1.5e-02 Sobol index [1,3] =0.00006 absolute error=9.7e-03 Sobol index [1,4] =0.00171 absolute error=5.0e-03 Sobol index [2,3] =0.00002 absolute error=5.5e-03 Sobol index [2,4] =0.00045 absolute error=3.3e-03 Sobol index [3,4] =0.00179 absolute error=6.5e-04 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.0472571] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=1.01809 absolute error=1.8e-02 variance=0.90508 absolute error=9.3e-02 Sobol index 0 = 0.26686 absolute error=1.4e-01 Sobol index 1 = 0.26154 absolute error=7.9e-02 Sobol index 2 = 0.03160 absolute error=7.1e-02 Sobol index 3 = 0.07099 absolute error=5.3e-03 Sobol index 4 = 0.15896 absolute error=1.1e-01 Sobol index [0,1] =0.05018 absolute error=1.1e-02 Sobol index [0,2] =0.00446 absolute error=3.0e-02 Sobol index [0,3] =0.00530 absolute error=1.7e-02 Sobol index [0,4] =0.01735 absolute error=2.1e-03 Sobol index [1,2] =0.03123 absolute error=1.6e-02 Sobol index [1,3] =0.01583 absolute error=6.1e-03 Sobol index [1,4] =0.00023 absolute error=6.5e-03 Sobol index [2,3] =0.00683 absolute error=1.4e-03 Sobol index [2,4] =0.02351 absolute error=2.0e-02 Sobol index [3,4] =0.05513 absolute error=5.3e-02 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.0301525] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98767 absolute error=1.2e-02 variance=0.59357 absolute error=2.2e-01 Sobol index 0 = 0.41357 absolute error=2.9e-03 Sobol index 1 = 0.17529 absolute error=7.2e-03 Sobol index 2 = 0.05806 absolute error=4.5e-02 Sobol index 3 = 0.12180 absolute error=5.6e-02 Sobol index 4 = 0.09997 absolute error=5.4e-02 Sobol index [0,1] =0.00038 absolute error=6.0e-02 Sobol index [0,2] =0.00647 absolute error=2.8e-02 Sobol index [0,3] =0.06610 absolute error=4.4e-02 Sobol index [0,4] =0.00199 absolute error=1.3e-02 Sobol index [1,2] =0.00049 absolute error=1.5e-02 Sobol index [1,3] =0.00156 absolute error=8.2e-03 Sobol index [1,4] =0.02805 absolute error=2.1e-02 Sobol index [2,3] =0.02313 absolute error=1.8e-02 Sobol index [2,4] =0.00169 absolute error=2.1e-03 Sobol index [3,4] =0.00145 absolute error=9.9e-04 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=21 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=5 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176,3224577333197275136,1963569437533536256] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=5 copula=class=IndependentCopula name=IndependentCopula dimension=5 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[3]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[4]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0270021] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=0.98068 absolute error=1.9e-02 variance=0.52437 absolute error=2.9e-01 Sobol index 0 = 0.47594 absolute error=6.5e-02 Sobol index 1 = 0.19618 absolute error=1.4e-02 Sobol index 2 = 0.11477 absolute error=1.2e-02 Sobol index 3 = 0.09674 absolute error=3.1e-02 Sobol index 4 = 0.06059 absolute error=1.5e-02 Sobol index [0,1] =0.00343 absolute error=5.7e-02 Sobol index [0,2] =0.01787 absolute error=1.6e-02 Sobol index [0,3] =0.00600 absolute error=1.6e-02 Sobol index [0,4] =0.00493 absolute error=1.0e-02 Sobol index [1,2] =0.00201 absolute error=1.3e-02 Sobol index [1,3] =0.00457 absolute error=5.2e-03 Sobol index [1,4] =0.00005 absolute error=6.7e-03 Sobol index [2,3] =0.00119 absolute error=4.3e-03 Sobol index [2,4] =0.00501 absolute error=1.2e-03 Sobol index [3,4] =0.01072 absolute error=8.3e-03 Sobol index [0,1,2] =0.00000 absolute error=5.1e-03 openturns-1.9/lib/test/t_FunctionalChaos_gsobol_sparse.cxx000066400000000000000000000073471307543307100242340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LeastSquaresMetaModelSelection for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Log::Show( Log::Flags() | Log::INFO ); // Problem parameters UnsignedInteger dimension = 8; // Reference analytical values Scalar covTh = 1.0; Point a(dimension); a[0] = 1.0; a[1] = 2.0; a[2] = 5.0; a[3] = 10.0; a[4] = 20.0; a[5] = 50.0; a[6] = 100.0; a[7] = 500.0; // Create the gSobol function Description inputVariables(dimension); Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = "1.0"; for (UnsignedInteger i = 0; i < dimension; ++i) { covTh *= 1.0 + 1.0 / (3.0 * pow(1.0 + a[i], 2.0)); inputVariables[i] = (OSS() << "xi" << i); formula[0] = (OSS() << formula[0] << " * ((abs(4.0 * xi" << i << " - 2.0) + " << a[i] << ") / (1.0 + " << a[i] << "))"); } --covTh; Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginalX(dimension); for ( UnsignedInteger i = 0; i < dimension; ++ i ) { marginalX[i] = Uniform( 0.0, 1.0 ); } ComposedDistribution distribution(marginalX); // Create the orthogonal basis Collection polynomialCollection(dimension); for ( UnsignedInteger i = 0; i < dimension; ++ i ) { polynomialCollection[i] = LegendreFactory(); } const Scalar q = 0.4; HyperbolicAnisotropicEnumerateFunction enumerateFunction(dimension, q); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // design experiment UnsignedInteger samplingSize = 75; // build basis UnsignedInteger basisSize = enumerateFunction.getStrataCumulatedCardinal(30); // run algorithm Collection listFittingAlgorithm; listFittingAlgorithm.add(KFold()); listFittingAlgorithm.add(CorrectedLeaveOneOut()); for ( UnsignedInteger fittingAlgorithmIndex = 0; fittingAlgorithmIndex < listFittingAlgorithm.getSize(); ++ fittingAlgorithmIndex ) { FixedStrategy adaptiveStrategy( productBasis, basisSize ); FittingAlgorithm fittingAlgorithm( listFittingAlgorithm[fittingAlgorithmIndex] ); LeastSquaresStrategy projectionStrategy( LowDiscrepancyExperiment(SobolSequence(dimension), samplingSize), LeastSquaresMetaModelSelectionFactory (LARS(), fittingAlgorithm)); FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); RandomGenerator::SetSeed(0); algo.run(); FunctionalChaosResult result(algo.getResult()); fullprint << "coeffs = " << result.getCoefficients() << std::endl; fullprint << "residuals = " << result.getResiduals() << std::endl; fullprint << "relative errors = " << result.getRelativeErrors() << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_gsobol_sparse.expout000066400000000000000000000030261307543307100247440ustar00rootroot00000000000000coeffs = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=48 dimension=1 data=[[0.961893],[0.23725],[0.157245],[0.0611527],[0.0204323],[-0.0015851],[-0.0412671],[-0.027549],[-0.0219898],[0.00986382],[0.0320248],[0.0198174],[-0.00244136],[-0.00432115],[-0.00766779],[-0.00745624],[-0.00502061],[-0.0101333],[0.0112252],[-0.00250379],[0.0168928],[0.026029],[0.00646896],[0.0130916],[0.00520319],[0.0197484],[-0.000950185],[-0.0081094],[0.00339982],[-0.0011655],[-0.0132109],[-0.0237317],[-0.026485],[-0.00367227],[0.00358307],[-0.00730491],[0.00413715],[0.00217953],[-0.0048057],[0.00262715],[0.0172036],[0.000815265],[-0.0083601],[-0.00927762],[0.00473758],[-0.000907697],[-0.0129698],[-0.0180804]] residuals = class=Point name=Unnamed dimension=1 values=[0.000138694] relative errors = class=Point name=Unnamed dimension=1 values=[1.80612e-05] coeffs = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=33 dimension=1 data=[[0.961274],[0.237628],[0.155141],[0.0656271],[0.023241],[-0.0495285],[-0.0307734],[-0.0188016],[0.00619862],[0.0189202],[0.0244676],[-0.0115662],[-0.0106377],[-0.00689405],[0.023976],[0.0233564],[0.0205347],[0.00134944],[0.00375397],[-0.00530109],[-0.0110302],[-0.0247311],[-0.0196563],[-0.00993382],[0.00326686],[0.00939696],[0.00655561],[0.0177861],[0.00438853],[-0.014147],[0.00803075],[-0.0131491],[-0.0216348]] residuals = class=Point name=Unnamed dimension=1 values=[0.00026907] relative errors = class=Point name=Unnamed dimension=1 values=[0.000734432] openturns-1.9/lib/test/t_FunctionalChaos_ishigami.cxx000066400000000000000000000234001307543307100231500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FunctionalChaosAlgoritm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Problem parameters UnsignedInteger dimension = 3; Scalar a = 7.0; Scalar b = 0.1; // Reference analytical values Scalar meanTh = a / 2; Scalar covTh = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1(3); sob_1[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh; sob_1[1] = (pow(a, 2.0) / 8.0) / covTh; sob_1[2] = 0.0; Point sob_2(3); sob_2[0] = 0.0; sob_2[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh; sob_2[2] = 0.0; Point sob_3(1, 0.0); Point sob_T1(3); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T2(3); sob_T2[0] = sob_2[0] + sob_3[0]; sob_T2[1] = sob_2[1] + sob_3[0]; sob_T2[2] = sob_2[2] + sob_3[0]; Point sob_T3(sob_3); // Create the Ishigami function Description inputVariables(dimension); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + (" << a << ") * (sin(xi2)) ^ 2 + (" << b << ") * xi3^4 * sin(xi1)"); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginals(dimension); marginals[0] = Uniform(-M_PI, M_PI); marginals[1] = Uniform(-M_PI, M_PI); marginals[2] = Uniform(-M_PI, M_PI); ComposedDistribution distribution(marginals); // Create the orthogonal basis Collection polynomialCollection(dimension); polynomialCollection[0] = LegendreFactory(); polynomialCollection[1] = LegendreFactory(); polynomialCollection[2] = LegendreFactory(); EnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Create the adaptive strategy // We can choose amongst several strategies // First, the most efficient (but more complex!) strategy Collection listAdaptiveStrategy(0); UnsignedInteger degree = 6; UnsignedInteger indexMax = enumerateFunction.getStrataCumulatedCardinal(degree); UnsignedInteger basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree / 2); Scalar threshold = 1.0e-6; listAdaptiveStrategy.add(CleaningStrategy(productBasis, indexMax, basisDimension, threshold, false)); // Second, the most used (and most basic!) strategy listAdaptiveStrategy.add(FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))); // Third, a slight enhancement with respect to the basic strategy listAdaptiveStrategy.add(SequentialStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree / 2), false)); // Create the result object here in order to test the save/load mechanism outside of the double loop FunctionalChaosResult result; for(UnsignedInteger adaptiveStrategyIndex = 0; adaptiveStrategyIndex < listAdaptiveStrategy.getSize(); ++adaptiveStrategyIndex) { AdaptiveStrategy adaptiveStrategy(listAdaptiveStrategy[adaptiveStrategyIndex]); // Create the projection strategy UnsignedInteger samplingSize = 250; Collection listProjectionStrategy(0); // Monte Carlo sampling listProjectionStrategy.add(LeastSquaresStrategy(MonteCarloExperiment(samplingSize))); // LHS sampling listProjectionStrategy.add(LeastSquaresStrategy(LHSExperiment(samplingSize))); // Low Discrepancy sequence listProjectionStrategy.add(LeastSquaresStrategy(LowDiscrepancyExperiment(LowDiscrepancySequence(SobolSequence()), samplingSize))); // The integration strategy // Monte Carlo sampling listProjectionStrategy.add(IntegrationStrategy(MonteCarloExperiment(samplingSize))); // LHS sampling listProjectionStrategy.add(IntegrationStrategy(LHSExperiment(samplingSize))); // Low Discrepancy sequence listProjectionStrategy.add(IntegrationStrategy(LowDiscrepancyExperiment(LowDiscrepancySequence(SobolSequence()), samplingSize))); for(UnsignedInteger projectionStrategyIndex = 0; projectionStrategyIndex < listProjectionStrategy.getSize(); ++projectionStrategyIndex) { ProjectionStrategy projectionStrategy(listProjectionStrategy[projectionStrategyIndex]); // Create the polynomial chaos algorithm Scalar maximumResidual = 1.0e-10; FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); algo.setMaximumResidual(maximumResidual); // Reinitialize the RandomGenerator to see the effect of the sampling method only RandomGenerator::SetSeed(0); algo.run(); // Examine the results result = algo.getResult(); fullprint << "//////////////////////////////////////////////////////////////////////" << std::endl; fullprint << algo.getAdaptiveStrategy() << std::endl; fullprint << algo.getProjectionStrategy() << std::endl; Point residuals(result.getResiduals()); fullprint << "residuals=" << std::fixed << std::setprecision(5) << residuals << std::endl; Point relativeErrors(result.getRelativeErrors()); fullprint << "relative errors=" << std::fixed << std::setprecision(5) << relativeErrors << std::endl; // Post-process the results FunctionalChaosRandomVector vector(result); Scalar mean = vector.getMean()[0]; fullprint << "mean=" << std::fixed << std::setprecision(5) << mean << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(mean - meanTh) << std::endl; Scalar variance = vector.getCovariance()(0, 0); fullprint << "variance=" << std::fixed << std::setprecision(5) << variance << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(variance - covTh) << std::endl; for(UnsignedInteger i = 0; i < dimension; ++i) { Scalar value = vector.getSobolIndex(i); fullprint << "Sobol index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_1[i]) << std::endl; } Indices indices(2); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < dimension; ++j) { indices[1] = j; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_2[k]) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_3[0]) << std::endl; for (UnsignedInteger i = 0; i < dimension; ++i) { Scalar value = vector.getSobolTotalIndex(i); fullprint << "Sobol total index " << i << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T1[i]) << std::endl; } indices = Indices(2); k = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < dimension; ++j) { indices[1] = j; Scalar value = vector.getSobolTotalIndex(indices); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T2[k]) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; value = vector.getSobolTotalIndex(indices); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T3[0]) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_ishigami.expout000066400000000000000000000734211307543307100237020ustar00rootroot00000000000000////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.00198384] relative errors=class=Point name=Unnamed dimension=1 values=[7.12093e-05] mean=3.46342 absolute error=3.7e-02 variance=13.50334 absolute error=3.4e-01 Sobol index 0 = 0.31585 absolute error=1.9e-03 Sobol index 1 = 0.42762 absolute error=1.5e-02 Sobol index 2 = 0.00000 absolute error=1.7e-06 Sobol index [0,1] =0.00002 absolute error=1.6e-05 Sobol index [0,2] =0.25602 absolute error=1.2e-02 Sobol index [1,2] =0.00035 absolute error=3.5e-04 Sobol index [0,1,2] =0.00014 absolute error=1.4e-04 Sobol total index 0 =0.57203 absolute error=1.4e-02 Sobol total index 1 =0.42812 absolute error=1.4e-02 Sobol total index 2 =0.25651 absolute error=1.3e-02 Sobol total index [0,1] =0.00015 absolute error=1.5e-04 Sobol total index [0,2] =0.25616 absolute error=1.2e-02 Sobol total index [1,2] =0.00049 absolute error=4.9e-04 Sobol total index [0,1,2] =0.00014 absolute error=1.4e-04 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.00205131] relative errors=class=Point name=Unnamed dimension=1 values=[7.8601e-05] mean=3.54043 absolute error=4.0e-02 variance=13.37475 absolute error=4.7e-01 Sobol index 0 = 0.31289 absolute error=1.0e-03 Sobol index 1 = 0.45251 absolute error=1.0e-02 Sobol index 2 = 0.00039 absolute error=3.9e-04 Sobol index [0,1] =0.00050 absolute error=5.0e-04 Sobol index [0,2] =0.23225 absolute error=1.1e-02 Sobol index [1,2] =0.00130 absolute error=1.3e-03 Sobol index [0,1,2] =0.00014 absolute error=1.4e-04 Sobol total index 0 =0.54579 absolute error=1.2e-02 Sobol total index 1 =0.45446 absolute error=1.2e-02 Sobol total index 2 =0.23409 absolute error=9.6e-03 Sobol total index [0,1] =0.00065 absolute error=6.5e-04 Sobol total index [0,2] =0.23239 absolute error=1.1e-02 Sobol total index [1,2] =0.00145 absolute error=1.4e-03 Sobol total index [0,1,2] =0.00014 absolute error=1.4e-04 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.00183731] relative errors=class=Point name=Unnamed dimension=1 values=[6.16204e-05] mean=3.52114 absolute error=2.1e-02 variance=13.62210 absolute error=2.2e-01 Sobol index 0 = 0.31794 absolute error=4.0e-03 Sobol index 1 = 0.43570 absolute error=6.7e-03 Sobol index 2 = 0.00000 absolute error=1.4e-06 Sobol index [0,1] =0.00005 absolute error=4.6e-05 Sobol index [0,2] =0.24416 absolute error=4.8e-04 Sobol index [1,2] =0.00044 absolute error=4.4e-04 Sobol index [0,1,2] =0.00172 absolute error=1.7e-03 Sobol total index 0 =0.56386 absolute error=6.3e-03 Sobol total index 1 =0.43790 absolute error=4.5e-03 Sobol total index 2 =0.24631 absolute error=2.6e-03 Sobol total index [0,1] =0.00176 absolute error=1.8e-03 Sobol total index [0,2] =0.24588 absolute error=2.2e-03 Sobol total index [1,2] =0.00215 absolute error=2.2e-03 Sobol total index [0,1,2] =0.00172 absolute error=1.7e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.134395] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.22600 absolute error=2.7e-01 variance=15.88852 absolute error=2.0e+00 Sobol index 0 = 0.27153 absolute error=4.2e-02 Sobol index 1 = 0.33853 absolute error=1.0e-01 Sobol index 2 = 0.00273 absolute error=2.7e-03 Sobol index [0,1] =0.06822 absolute error=6.8e-02 Sobol index [0,2] =0.21933 absolute error=2.4e-02 Sobol index [1,2] =0.07036 absolute error=7.0e-02 Sobol index [0,1,2] =0.02930 absolute error=2.9e-02 Sobol total index 0 =0.58838 absolute error=3.1e-02 Sobol total index 1 =0.50640 absolute error=6.4e-02 Sobol total index 2 =0.32172 absolute error=7.8e-02 Sobol total index [0,1] =0.09752 absolute error=9.8e-02 Sobol total index [0,2] =0.24863 absolute error=4.9e-03 Sobol total index [1,2] =0.09965 absolute error=1.0e-01 Sobol total index [0,1,2] =0.02930 absolute error=2.9e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.15998] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.62132 absolute error=1.2e-01 variance=17.12896 absolute error=3.3e+00 Sobol index 0 = 0.22910 absolute error=8.5e-02 Sobol index 1 = 0.31911 absolute error=1.2e-01 Sobol index 2 = 0.01297 absolute error=1.3e-02 Sobol index [0,1] =0.01509 absolute error=1.5e-02 Sobol index [0,2] =0.27182 absolute error=2.8e-02 Sobol index [1,2] =0.03713 absolute error=3.7e-02 Sobol index [0,1,2] =0.11478 absolute error=1.1e-01 Sobol total index 0 =0.63079 absolute error=7.3e-02 Sobol total index 1 =0.48611 absolute error=4.4e-02 Sobol total index 2 =0.43670 absolute error=1.9e-01 Sobol total index [0,1] =0.12988 absolute error=1.3e-01 Sobol total index [0,2] =0.38660 absolute error=1.4e-01 Sobol total index [1,2] =0.15191 absolute error=1.5e-01 Sobol total index [0,1,2] =0.11478 absolute error=1.1e-01 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0782409] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.57691 absolute error=7.7e-02 variance=14.86914 absolute error=1.0e+00 Sobol index 0 = 0.29130 absolute error=2.3e-02 Sobol index 1 = 0.39833 absolute error=4.4e-02 Sobol index 2 = 0.00062 absolute error=6.2e-04 Sobol index [0,1] =0.00932 absolute error=9.3e-03 Sobol index [0,2] =0.26319 absolute error=2.0e-02 Sobol index [1,2] =0.01461 absolute error=1.5e-02 Sobol index [0,1,2] =0.02263 absolute error=2.3e-02 Sobol total index 0 =0.58644 absolute error=2.9e-02 Sobol total index 1 =0.44488 absolute error=2.5e-03 Sobol total index 2 =0.30105 absolute error=5.7e-02 Sobol total index [0,1] =0.03195 absolute error=3.2e-02 Sobol total index [0,2] =0.28582 absolute error=4.2e-02 Sobol total index [1,2] =0.03724 absolute error=3.7e-02 Sobol total index [0,1,2] =0.02263 absolute error=2.3e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.00152475] relative errors=class=Point name=Unnamed dimension=1 values=[4.2065e-05] mean=3.45802 absolute error=4.2e-02 variance=13.83831 absolute error=6.3e-03 Sobol index 0 = 0.30612 absolute error=7.8e-03 Sobol index 1 = 0.43754 absolute error=4.9e-03 Sobol index 2 = 0.00129 absolute error=1.3e-03 Sobol index [0,1] =0.00254 absolute error=2.5e-03 Sobol index [0,2] =0.24156 absolute error=2.1e-03 Sobol index [1,2] =0.00386 absolute error=3.9e-03 Sobol index [0,1,2] =0.00708 absolute error=7.1e-03 Sobol total index 0 =0.55731 absolute error=2.8e-04 Sobol total index 1 =0.45103 absolute error=8.6e-03 Sobol total index 2 =0.25380 absolute error=1.0e-02 Sobol total index [0,1] =0.00962 absolute error=9.6e-03 Sobol total index [0,2] =0.24864 absolute error=5.0e-03 Sobol total index [1,2] =0.01094 absolute error=1.1e-02 Sobol total index [0,1,2] =0.00708 absolute error=7.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.00156941] relative errors=class=Point name=Unnamed dimension=1 values=[4.60089e-05] mean=3.48612 absolute error=1.4e-02 variance=14.20288 absolute error=3.6e-01 Sobol index 0 = 0.30217 absolute error=1.2e-02 Sobol index 1 = 0.44117 absolute error=1.2e-03 Sobol index 2 = 0.00453 absolute error=4.5e-03 Sobol index [0,1] =0.00772 absolute error=7.7e-03 Sobol index [0,2] =0.23078 absolute error=1.3e-02 Sobol index [1,2] =0.00606 absolute error=6.1e-03 Sobol index [0,1,2] =0.00758 absolute error=7.6e-03 Sobol total index 0 =0.54824 absolute error=9.3e-03 Sobol total index 1 =0.46252 absolute error=2.0e-02 Sobol total index 2 =0.24895 absolute error=5.3e-03 Sobol total index [0,1] =0.01529 absolute error=1.5e-02 Sobol total index [0,2] =0.23835 absolute error=5.3e-03 Sobol total index [1,2] =0.01363 absolute error=1.4e-02 Sobol total index [0,1,2] =0.00758 absolute error=7.6e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0015633] relative errors=class=Point name=Unnamed dimension=1 values=[4.46114e-05] mean=3.52947 absolute error=2.9e-02 variance=13.72886 absolute error=1.2e-01 Sobol index 0 = 0.31135 absolute error=2.6e-03 Sobol index 1 = 0.42587 absolute error=1.7e-02 Sobol index 2 = 0.00041 absolute error=4.1e-04 Sobol index [0,1] =0.00315 absolute error=3.1e-03 Sobol index [0,2] =0.25121 absolute error=7.5e-03 Sobol index [1,2] =0.00252 absolute error=2.5e-03 Sobol index [0,1,2] =0.00549 absolute error=5.5e-03 Sobol total index 0 =0.57120 absolute error=1.4e-02 Sobol total index 1 =0.43703 absolute error=5.4e-03 Sobol total index 2 =0.25963 absolute error=1.6e-02 Sobol total index [0,1] =0.00864 absolute error=8.6e-03 Sobol total index [0,2] =0.25670 absolute error=1.3e-02 Sobol total index [1,2] =0.00801 absolute error=8.0e-03 Sobol total index [0,1,2] =0.00549 absolute error=5.5e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.199582] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.22600 absolute error=2.7e-01 variance=18.40649 absolute error=4.6e+00 Sobol index 0 = 0.24656 absolute error=6.7e-02 Sobol index 1 = 0.29835 absolute error=1.4e-01 Sobol index 2 = 0.01602 absolute error=1.6e-02 Sobol index [0,1] =0.07958 absolute error=8.0e-02 Sobol index [0,2] =0.21304 absolute error=3.1e-02 Sobol index [1,2] =0.09113 absolute error=9.1e-02 Sobol index [0,1,2] =0.05533 absolute error=5.5e-02 Sobol total index 0 =0.59451 absolute error=3.7e-02 Sobol total index 1 =0.52438 absolute error=8.2e-02 Sobol total index 2 =0.37551 absolute error=1.3e-01 Sobol total index [0,1] =0.13491 absolute error=1.3e-01 Sobol total index [0,2] =0.26837 absolute error=2.5e-02 Sobol total index [1,2] =0.14646 absolute error=1.5e-01 Sobol total index [0,1,2] =0.05533 absolute error=5.5e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.205762] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.62132 absolute error=1.2e-01 variance=18.95143 absolute error=5.1e+00 Sobol index 0 = 0.20832 absolute error=1.1e-01 Sobol index 1 = 0.29079 absolute error=1.5e-01 Sobol index 2 = 0.01404 absolute error=1.4e-02 Sobol index [0,1] =0.03854 absolute error=3.9e-02 Sobol index [0,2] =0.26636 absolute error=2.3e-02 Sobol index [1,2] =0.05352 absolute error=5.4e-02 Sobol index [0,1,2] =0.12844 absolute error=1.3e-01 Sobol total index 0 =0.64165 absolute error=8.4e-02 Sobol total index 1 =0.51128 absolute error=6.9e-02 Sobol total index 2 =0.46236 absolute error=2.2e-01 Sobol total index [0,1] =0.16697 absolute error=1.7e-01 Sobol total index [0,2] =0.39480 absolute error=1.5e-01 Sobol total index [1,2] =0.18196 absolute error=1.8e-01 Sobol total index [0,1,2] =0.12844 absolute error=1.3e-01 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0865757] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.57691 absolute error=7.7e-02 variance=15.31686 absolute error=1.5e+00 Sobol index 0 = 0.28586 absolute error=2.8e-02 Sobol index 1 = 0.38758 absolute error=5.5e-02 Sobol index 2 = 0.00286 absolute error=2.9e-03 Sobol index [0,1] =0.01430 absolute error=1.4e-02 Sobol index [0,2] =0.25857 absolute error=1.5e-02 Sobol index [1,2] =0.02058 absolute error=2.1e-02 Sobol index [0,1,2] =0.03026 absolute error=3.0e-02 Sobol total index 0 =0.58898 absolute error=3.1e-02 Sobol total index 1 =0.45271 absolute error=1.0e-02 Sobol total index 2 =0.31226 absolute error=6.9e-02 Sobol total index [0,1] =0.04455 absolute error=4.5e-02 Sobol total index [0,2] =0.28883 absolute error=4.5e-02 Sobol total index [1,2] =0.05083 absolute error=5.1e-02 Sobol total index [0,1,2] =0.03026 absolute error=3.0e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.0102878] relative errors=class=Point name=Unnamed dimension=1 values=[0.00191499] mean=3.28651 absolute error=2.1e-01 variance=7.75138 absolute error=6.1e+00 Sobol index 0 = 0.52245 absolute error=2.1e-01 Sobol index 1 = 0.06987 absolute error=3.7e-01 Sobol index 2 = 0.00752 absolute error=7.5e-03 Sobol index [0,1] =0.00020 absolute error=2.0e-04 Sobol index [0,2] =0.38827 absolute error=1.4e-01 Sobol index [1,2] =0.00373 absolute error=3.7e-03 Sobol index [0,1,2] =0.00797 absolute error=8.0e-03 Sobol total index 0 =0.91888 absolute error=3.6e-01 Sobol total index 1 =0.08177 absolute error=3.6e-01 Sobol total index 2 =0.40748 absolute error=1.6e-01 Sobol total index [0,1] =0.00817 absolute error=8.2e-03 Sobol total index [0,2] =0.39623 absolute error=1.5e-01 Sobol total index [1,2] =0.01170 absolute error=1.2e-02 Sobol total index [0,1,2] =0.00797 absolute error=8.0e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.0101725] relative errors=class=Point name=Unnamed dimension=1 values=[0.00193297] mean=3.52041 absolute error=2.0e-02 variance=7.57391 absolute error=6.3e+00 Sobol index 0 = 0.53501 absolute error=2.2e-01 Sobol index 1 = 0.05984 absolute error=3.8e-01 Sobol index 2 = 0.00082 absolute error=8.2e-04 Sobol index [0,1] =0.02004 absolute error=2.0e-02 Sobol index [0,2] =0.37605 absolute error=1.3e-01 Sobol index [1,2] =0.00825 absolute error=8.3e-03 Sobol index [0,1,2] =0.00000 absolute error=4.0e-09 Sobol total index 0 =0.93109 absolute error=3.7e-01 Sobol total index 1 =0.08813 absolute error=3.5e-01 Sobol total index 2 =0.38511 absolute error=1.4e-01 Sobol total index [0,1] =0.02004 absolute error=2.0e-02 Sobol total index [0,2] =0.37605 absolute error=1.3e-01 Sobol total index [1,2] =0.00825 absolute error=8.3e-03 Sobol total index [0,1,2] =0.00000 absolute error=4.0e-09 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.0107385] relative errors=class=Point name=Unnamed dimension=1 values=[0.00210498] mean=3.54673 absolute error=4.7e-02 variance=6.36939 absolute error=7.5e+00 Sobol index 0 = 0.66795 absolute error=3.5e-01 Sobol index 1 = 0.03504 absolute error=4.1e-01 Sobol index 2 = 0.00168 absolute error=1.7e-03 Sobol index [0,1] =0.00108 absolute error=1.1e-03 Sobol index [0,2] =0.29044 absolute error=4.7e-02 Sobol index [1,2] =0.00310 absolute error=3.1e-03 Sobol index [0,1,2] =0.00071 absolute error=7.1e-04 Sobol total index 0 =0.96019 absolute error=4.0e-01 Sobol total index 1 =0.03993 absolute error=4.0e-01 Sobol total index 2 =0.29593 absolute error=5.2e-02 Sobol total index [0,1] =0.00179 absolute error=1.8e-03 Sobol total index [0,2] =0.29116 absolute error=4.7e-02 Sobol total index [1,2] =0.00381 absolute error=3.8e-03 Sobol total index [0,1,2] =0.00071 absolute error=7.1e-04 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals=class=Point name=Unnamed dimension=1 values=[0.177483] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.22600 absolute error=2.7e-01 variance=7.42751 absolute error=6.4e+00 Sobol index 0 = 0.58087 absolute error=2.7e-01 Sobol index 1 = 0.12814 absolute error=3.1e-01 Sobol index 2 = 0.03313 absolute error=3.3e-02 Sobol index [0,1] =0.01317 absolute error=1.3e-02 Sobol index [0,2] =0.17625 absolute error=6.7e-02 Sobol index [1,2] =0.04884 absolute error=4.9e-02 Sobol index [0,1,2] =0.01960 absolute error=2.0e-02 Sobol total index 0 =0.78988 absolute error=2.3e-01 Sobol total index 1 =0.20975 absolute error=2.3e-01 Sobol total index 2 =0.27782 absolute error=3.4e-02 Sobol total index [0,1] =0.03276 absolute error=3.3e-02 Sobol total index [0,2] =0.19584 absolute error=4.8e-02 Sobol total index [1,2] =0.06844 absolute error=6.8e-02 Sobol total index [0,1,2] =0.01960 absolute error=2.0e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=1 values=[0.170435] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.62132 absolute error=1.2e-01 variance=7.57733 absolute error=6.3e+00 Sobol index 0 = 0.49794 absolute error=1.8e-01 Sobol index 1 = 0.03066 absolute error=4.1e-01 Sobol index 2 = 0.00577 absolute error=5.8e-03 Sobol index [0,1] =0.01823 absolute error=1.8e-02 Sobol index [0,2] =0.42713 absolute error=1.8e-01 Sobol index [1,2] =0.02027 absolute error=2.0e-02 Sobol index [0,1,2] =0.00000 absolute error=2.5e-07 Sobol total index 0 =0.94330 absolute error=3.9e-01 Sobol total index 1 =0.06916 absolute error=3.7e-01 Sobol total index 2 =0.45317 absolute error=2.1e-01 Sobol total index [0,1] =0.01823 absolute error=1.8e-02 Sobol total index [0,2] =0.42713 absolute error=1.8e-01 Sobol total index [1,2] =0.02027 absolute error=2.0e-02 Sobol total index [0,1,2] =0.00000 absolute error=2.5e-07 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals=class=Point name=Unnamed dimension=1 values=[0.170595] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.57691 absolute error=7.7e-02 variance=6.77931 absolute error=7.1e+00 Sobol index 0 = 0.63905 absolute error=3.3e-01 Sobol index 1 = 0.05807 absolute error=3.8e-01 Sobol index 2 = 0.00231 absolute error=2.3e-03 Sobol index [0,1] =0.00294 absolute error=2.9e-03 Sobol index [0,2] =0.29574 absolute error=5.2e-02 Sobol index [1,2] =0.00055 absolute error=5.5e-04 Sobol index [0,1,2] =0.00134 absolute error=1.3e-03 Sobol total index 0 =0.93907 absolute error=3.8e-01 Sobol total index 1 =0.06290 absolute error=3.8e-01 Sobol total index 2 =0.29994 absolute error=5.6e-02 Sobol total index [0,1] =0.00428 absolute error=4.3e-03 Sobol total index [0,2] =0.29708 absolute error=5.3e-02 Sobol total index [1,2] =0.00189 absolute error=1.9e-03 Sobol total index [0,1,2] =0.00134 absolute error=1.3e-03 openturns-1.9/lib/test/t_FunctionalChaos_ishigami_database.cxx000066400000000000000000000222001307543307100247710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of the FunctionalChaosAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Problem parameters UnsignedInteger dimension = 3; Scalar a = 7.0; Scalar b = 0.1; // Reference analytical values Scalar meanTh = a / 2; Scalar covTh = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1(3); sob_1[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh; sob_1[1] = (pow(a, 2.0) / 8.0) / covTh; sob_1[2] = 0.0; Point sob_2(3); sob_2[0] = 0.0; sob_2[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh; sob_2[2] = 0.0; Point sob_3(1, 0.0); Point sob_T1(3); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T2(3); sob_T2[0] = sob_2[0] + sob_2[1] + sob_3[0]; sob_T2[1] = sob_2[0] + sob_2[2] + sob_3[0]; sob_T2[2] = sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T3(sob_3); // Create the Ishigami function Description inputVariables(dimension); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + (" << a << ") * (sin(xi2)) ^ 2 + (" << b << ") * xi3^4 * sin(xi1)"); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginals(dimension); marginals[0] = Uniform(-M_PI, M_PI); marginals[1] = Uniform(-M_PI, M_PI); marginals[2] = Uniform(-M_PI, M_PI); ComposedDistribution distribution(marginals); // Create the orthogonal basis Collection polynomialCollection(dimension); polynomialCollection[0] = LegendreFactory(); polynomialCollection[1] = LegendreFactory(); polynomialCollection[2] = LegendreFactory(); EnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Create the projection strategy UnsignedInteger samplingSize = 250; Collection listProjectionStrategy(0); // Monte Carlo sampling Sample inputSample(LowDiscrepancyExperiment(LowDiscrepancySequence(SobolSequence()), distribution, samplingSize).generate()); Sample outputSample(model(inputSample)); // From here, the model is no more needed listProjectionStrategy.add(LeastSquaresStrategy()); listProjectionStrategy.add(LeastSquaresStrategy(LeastSquaresMetaModelSelectionFactory (LARS(), CorrectedLeaveOneOut()))); listProjectionStrategy.add(IntegrationStrategy()); // Create the adaptive strategy // We can choose amongst several strategies // First, the most efficient (but more complex!) strategy UnsignedInteger degree = 6; Collection listAdaptiveStrategy(0); UnsignedInteger indexMax = enumerateFunction.getStrataCumulatedCardinal(degree); UnsignedInteger basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree / 2); Scalar threshold = 1.0e-6; listAdaptiveStrategy.add(CleaningStrategy(productBasis, indexMax, basisDimension, threshold, true)); // Second, the most used (and most basic!) strategy listAdaptiveStrategy.add(FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))); for(UnsignedInteger adaptiveStrategyIndex = 0; adaptiveStrategyIndex < listAdaptiveStrategy.getSize(); ++adaptiveStrategyIndex) { AdaptiveStrategy adaptiveStrategy(listAdaptiveStrategy[adaptiveStrategyIndex]); for(UnsignedInteger projectionStrategyIndex = 0; projectionStrategyIndex < listProjectionStrategy.getSize(); ++projectionStrategyIndex) { ProjectionStrategy projectionStrategy(listProjectionStrategy[projectionStrategyIndex]); // Create the polynomial chaos algorithm Scalar maximumResidual = 1.0e-10; FunctionalChaosAlgorithm algo(inputSample, outputSample, distribution, adaptiveStrategy, projectionStrategy); algo.setMaximumResidual(maximumResidual); // Reinitialize the RandomGenerator to see the effect of the sampling method only RandomGenerator::SetSeed(0); algo.run(); // Examine the results FunctionalChaosResult result(algo.getResult()); fullprint << "//////////////////////////////////////////////////////////////////////" << std::endl; fullprint << adaptiveStrategy << std::endl; fullprint << projectionStrategy << std::endl; Point residuals(result.getResiduals()); fullprint << "residuals=" << std::fixed << std::setprecision(5) << residuals << std::endl; Point relativeErrors(result.getRelativeErrors()); fullprint << "relative errors=" << std::fixed << std::setprecision(5) << relativeErrors << std::endl; // Post-process the results FunctionalChaosRandomVector vector(result); Scalar mean = vector.getMean()[0]; fullprint << "mean=" << std::fixed << std::setprecision(5) << mean << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(mean - meanTh) << std::endl; Scalar variance = vector.getCovariance()(0, 0); fullprint << "variance=" << std::fixed << std::setprecision(5) << variance << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(variance - covTh) << std::endl; for(UnsignedInteger i = 0; i < dimension; ++i) { Scalar value = vector.getSobolIndex(i); fullprint << "Sobol index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_1[i]) << std::endl; } Indices indices(2); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < dimension; ++j) { indices[1] = j; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_2[k]) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_3[0]) << std::endl; for (UnsignedInteger i = 0; i < dimension; ++i) { Scalar value = vector.getSobolTotalIndex(i); fullprint << "Sobol total index " << i << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T1[i]) << std::endl; } indices = Indices(2); k = 0; for (UnsignedInteger i = 0; i < dimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < dimension; ++j) { indices[1] = j; Scalar value = vector.getSobolIndex(indices); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_2[k]) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; value = vector.getSobolTotalIndex(indices); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_3[0]) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_ishigami_database.expout000066400000000000000000001651641307543307100255340ustar00rootroot00000000000000////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.00183731] relative errors=class=Point name=Unnamed dimension=1 values=[6.16204e-05] mean=3.52114 absolute error=2.1e-02 variance=13.62210 absolute error=2.2e-01 Sobol index 0 = 0.31794 absolute error=4.0e-03 Sobol index 1 = 0.43570 absolute error=6.7e-03 Sobol index 2 = 0.00000 absolute error=1.4e-06 Sobol index [0,1] =0.00005 absolute error=4.6e-05 Sobol index [0,2] =0.24416 absolute error=4.8e-04 Sobol index [1,2] =0.00044 absolute error=4.4e-04 Sobol index [0,1,2] =0.00172 absolute error=1.7e-03 Sobol total index 0 =0.56386 absolute error=6.3e-03 Sobol total index 1 =0.43790 absolute error=4.5e-03 Sobol total index 2 =0.24631 absolute error=2.6e-03 Sobol total index [0,1] =0.00005 absolute error=4.6e-05 Sobol total index [0,2] =0.24416 absolute error=4.8e-04 Sobol total index [1,2] =0.00044 absolute error=4.4e-04 Sobol total index [0,1,2] =0.00172 absolute error=1.7e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.00197231] relative errors=class=Point name=Unnamed dimension=1 values=[8.89613e-05] mean=3.51972 absolute error=2.0e-02 variance=13.59299 absolute error=2.5e-01 Sobol index 0 = 0.31924 absolute error=5.3e-03 Sobol index 1 = 0.43640 absolute error=6.0e-03 Sobol index 2 = 0.00000 absolute error=0.0e+00 Sobol index [0,1] =0.00000 absolute error=0.0e+00 Sobol index [0,2] =0.24437 absolute error=6.8e-04 Sobol index [1,2] =0.00000 absolute error=0.0e+00 Sobol index [0,1,2] =0.00000 absolute error=0.0e+00 Sobol total index 0 =0.56360 absolute error=6.0e-03 Sobol total index 1 =0.43640 absolute error=6.0e-03 Sobol total index 2 =0.24437 absolute error=6.8e-04 Sobol total index [0,1] =0.00000 absolute error=0.0e+00 Sobol total index [0,2] =0.24437 absolute error=6.8e-04 Sobol total index [1,2] =0.00000 absolute error=0.0e+00 Sobol total index [0,1,2] =0.00000 absolute error=0.0e+00 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.0782409] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.57691 absolute error=7.7e-02 variance=14.86914 absolute error=1.0e+00 Sobol index 0 = 0.29130 absolute error=2.3e-02 Sobol index 1 = 0.39833 absolute error=4.4e-02 Sobol index 2 = 0.00062 absolute error=6.2e-04 Sobol index [0,1] =0.00932 absolute error=9.3e-03 Sobol index [0,2] =0.26319 absolute error=2.0e-02 Sobol index [1,2] =0.01461 absolute error=1.5e-02 Sobol index [0,1,2] =0.02263 absolute error=2.3e-02 Sobol total index 0 =0.58644 absolute error=2.9e-02 Sobol total index 1 =0.44488 absolute error=2.5e-03 Sobol total index 2 =0.30105 absolute error=5.7e-02 Sobol total index [0,1] =0.00932 absolute error=9.3e-03 Sobol total index [0,2] =0.26319 absolute error=2.0e-02 Sobol total index [1,2] =0.01461 absolute error=1.5e-02 Sobol total index [0,1,2] =0.02263 absolute error=2.3e-02 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.0015633] relative errors=class=Point name=Unnamed dimension=1 values=[4.46114e-05] mean=3.52947 absolute error=2.9e-02 variance=13.72886 absolute error=1.2e-01 Sobol index 0 = 0.31135 absolute error=2.6e-03 Sobol index 1 = 0.42587 absolute error=1.7e-02 Sobol index 2 = 0.00041 absolute error=4.1e-04 Sobol index [0,1] =0.00315 absolute error=3.1e-03 Sobol index [0,2] =0.25121 absolute error=7.5e-03 Sobol index [1,2] =0.00252 absolute error=2.5e-03 Sobol index [0,1,2] =0.00549 absolute error=5.5e-03 Sobol total index 0 =0.57120 absolute error=1.4e-02 Sobol total index 1 =0.43703 absolute error=5.4e-03 Sobol total index 2 =0.25963 absolute error=1.6e-02 Sobol total index [0,1] =0.00315 absolute error=3.1e-03 Sobol total index [0,2] =0.25121 absolute error=7.5e-03 Sobol total index [1,2] =0.00252 absolute error=2.5e-03 Sobol total index [0,1,2] =0.00549 absolute error=5.5e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.00186978] relative errors=class=Point name=Unnamed dimension=1 values=[8.25367e-05] mean=3.52361 absolute error=2.4e-02 variance=13.62090 absolute error=2.2e-01 Sobol index 0 = 0.31594 absolute error=2.0e-03 Sobol index 1 = 0.43512 absolute error=7.3e-03 Sobol index 2 = 0.00000 absolute error=0.0e+00 Sobol index [0,1] =0.00000 absolute error=0.0e+00 Sobol index [0,2] =0.24688 absolute error=3.2e-03 Sobol index [1,2] =0.00000 absolute error=0.0e+00 Sobol index [0,1,2] =0.00205 absolute error=2.1e-03 Sobol total index 0 =0.56488 absolute error=7.3e-03 Sobol total index 1 =0.43718 absolute error=5.2e-03 Sobol total index 2 =0.24893 absolute error=5.3e-03 Sobol total index [0,1] =0.00000 absolute error=0.0e+00 Sobol total index [0,2] =0.24688 absolute error=3.2e-03 Sobol total index [1,2] =0.00000 absolute error=0.0e+00 Sobol total index [0,1,2] =0.00205 absolute error=2.1e-03 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=250 dimension=3 description=[X0,X1,X2] data=[[0,0,0],[1.5708,-1.5708,1.5708],[-1.5708,1.5708,-1.5708],[-0.785398,-0.785398,0.785398],[2.35619,2.35619,-2.35619],[0.785398,-2.35619,-0.785398],[-2.35619,0.785398,2.35619],[-1.9635,-1.1781,-1.1781],[1.1781,1.9635,1.9635],[2.74889,-2.74889,0.392699],[-0.392699,0.392699,-2.74889],[-1.1781,-1.9635,2.74889],[1.9635,1.1781,-0.392699],[0.392699,-0.392699,-1.9635],[-2.74889,2.74889,1.1781],[-2.55254,-0.19635,2.15984],[0.589049,2.94524,-0.981748],[2.15984,-1.76715,-2.55254],[-0.981748,1.37445,0.589049],[-0.19635,-2.55254,-0.19635],[2.94524,0.589049,2.94524],[1.37445,-0.981748,1.37445],[-1.76715,2.15984,-1.76715],[-2.15984,-2.15984,0.19635],[0.981748,0.981748,-2.94524],[2.55254,-0.589049,-1.37445],[-0.589049,2.55254,1.76715],[-1.37445,-1.37445,-2.15984],[1.76715,1.76715,0.981748],[0.19635,-2.94524,2.55254],[-2.94524,0.19635,-0.589049],[-2.84707,-1.47262,0.687223],[0.294524,1.66897,-2.45437],[1.86532,-3.04342,-0.883573],[-1.27627,0.0981748,2.25802],[-0.490874,-2.25802,-1.66897],[2.65072,0.883573,1.47262],[1.07992,-0.687223,3.04342],[-2.06167,2.45437,-0.0981748],[-1.66897,-2.65072,1.86532],[1.47262,0.490874,-1.27627],[3.04342,-1.07992,-2.84707],[-0.0981748,2.06167,0.294524],[-0.883573,-0.294524,-0.490874],[2.25802,2.84707,2.65072],[0.687223,-1.86532,1.07992],[-2.45437,1.27627,-2.06167],[-2.65072,-1.66897,-1.47262],[0.490874,1.47262,1.66897],[2.06167,-0.0981748,0.0981748],[-1.07992,3.04342,-3.04342],[-0.294524,-0.883573,2.45437],[2.84707,2.25802,-0.687223],[1.27627,-2.45437,-2.25802],[-1.86532,0.687223,0.883573],[-2.25802,-0.490874,-2.65072],[0.883573,2.65072,0.490874],[2.45437,-2.06167,2.06167],[-0.687223,1.07992,-1.07992],[-1.47262,-2.84707,1.27627],[1.66897,0.294524,-1.86532],[0.0981748,-1.27627,-0.294524],[-3.04342,1.86532,2.84707],[-2.99433,-0.638136,-0.343612],[0.147262,2.50346,2.79798],[1.71806,-2.20893,1.22718],[-1.42353,0.93266,-1.91441],[-0.638136,-2.99433,2.01258],[2.50346,0.147262,-1.12901],[0.93266,-1.42353,-2.69981],[-2.20893,1.71806,0.441786],[-1.81623,-1.81623,-2.30711],[1.32536,1.32536,0.834486],[2.89616,-0.245437,2.40528],[-0.245437,2.89616,-0.736311],[-1.03084,-1.03084,0.0490874],[2.11076,2.11076,-3.09251],[0.539961,-2.60163,-1.52171],[-2.60163,0.539961,1.61988],[-2.40528,-2.40528,1.03084],[0.736311,0.736311,-2.11076],[2.30711,-0.834486,-0.539961],[-0.834486,2.30711,2.60163],[-0.0490874,-0.0490874,-2.89616],[3.09251,3.09251,0.245437],[1.52171,-1.61988,1.81623],[-1.61988,1.52171,-1.32536],[-2.01258,-1.22718,2.99433],[1.12901,1.91441,-0.147262],[2.69981,-2.79798,-1.71806],[-0.441786,0.343612,1.42353],[-1.22718,-2.01258,-0.93266],[1.91441,1.12901,2.20893],[0.343612,-0.441786,0.638136],[-2.79798,2.69981,-2.50346],[-2.89616,-2.30711,2.69981],[0.245437,0.834486,-0.441786],[1.81623,-0.736311,-2.01258],[-1.32536,2.40528,1.12901],[-0.539961,-1.52171,-1.22718],[2.60163,1.61988,1.91441],[1.03084,-3.09251,0.343612],[-2.11076,0.0490874,-2.79798],[-1.71806,-0.343612,1.52171],[1.42353,2.79798,-1.61988],[2.99433,-1.91441,-0.0490874],[-0.147262,1.22718,3.09251],[-0.93266,-2.69981,-2.40528],[2.20893,0.441786,0.736311],[0.638136,-1.12901,2.30711],[-2.50346,2.01258,-0.834486],[-2.69981,-0.93266,-1.81623],[0.441786,2.20893,1.32536],[2.01258,-2.50346,2.89616],[-1.12901,0.638136,-0.245437],[-0.343612,-1.71806,0.539961],[2.79798,1.42353,-2.60163],[1.22718,-0.147262,-1.03084],[-1.91441,2.99433,2.11076],[-2.30711,-2.89616,-0.638136],[0.834486,0.245437,2.50346],[2.40528,-1.32536,0.93266],[-0.736311,1.81623,-2.20893],[-1.52171,-0.539961,1.71806],[1.61988,2.60163,-1.42353],[0.0490874,-2.11076,-2.99433],[-3.09251,1.03084,0.147262],[-3.06796,-1.05538,1.79169],[0.0736311,2.08621,-1.3499],[1.64443,-2.62618,-2.9207],[-1.49717,0.515418,0.220893],[-0.711767,-1.84078,-0.564505],[2.42983,1.30082,2.57709],[0.859029,-0.269981,1.00629],[-2.28256,2.87161,-2.1353],[-1.88986,-3.01887,0.613592],[1.25173,0.122718,-2.528],[2.82252,-1.44808,-0.957204],[-0.319068,1.69351,2.18439],[-1.10447,-0.66268,-1.7426],[2.03713,2.47891,1.39899],[0.46633,-2.23348,2.96979],[-2.67526,0.908117,-0.171806],[-2.47891,-2.03713,-2.72435],[0.66268,1.10447,0.417243],[2.23348,-0.46633,1.98804],[-0.908117,2.67526,-1.15355],[-0.122718,-1.25173,1.20264],[3.01887,1.88986,-1.93895],[1.44808,-2.82252,-0.368155],[-1.69351,0.319068,2.77344],[-2.08621,-0.0736311,-1.54625],[1.05538,3.06796,1.59534],[2.62618,-1.64443,0.0245437],[-0.515418,1.49717,-3.11705],[-1.30082,-2.42983,2.38074],[1.84078,0.711767,-0.760854],[0.269981,-0.859029,-2.33165],[-2.87161,2.28256,0.809942],[-2.77344,-2.72435,-1.05538],[0.368155,0.417243,2.08621],[1.93895,-1.15355,0.515418],[-1.20264,1.98804,-2.62618],[-0.417243,-0.368155,2.87161],[2.72435,2.77344,-0.269981],[1.15355,-1.93895,-1.84078],[-1.98804,1.20264,1.30082],[-1.59534,-1.54625,-3.01887],[1.54625,1.59534,0.122718],[3.11705,-3.11705,1.69351],[-0.0245437,0.0245437,-1.44808],[-0.809942,-2.33165,0.908117],[2.33165,0.809942,-2.23348],[0.760854,-0.760854,-0.66268],[-2.38074,2.38074,2.47891],[-2.57709,-0.564505,0.319068],[0.564505,2.57709,-2.82252],[2.1353,-2.1353,-1.25173],[-1.00629,1.00629,1.88986],[-0.220893,-2.9207,-2.03713],[2.9207,0.220893,1.10447],[1.3499,-1.3499,2.67526],[-1.79169,1.79169,-0.46633],[-2.18439,-1.7426,2.28256],[0.957204,1.39899,-0.859029],[2.528,-0.171806,-2.42983],[-0.613592,2.96979,0.711767],[-1.39899,-0.957204,-0.0736311],[1.7426,2.18439,3.06796],[0.171806,-2.528,1.49717],[-2.96979,0.613592,-1.64443],[-3.01887,-1.88986,1.44808],[0.122718,1.25173,-1.69351],[1.69351,-0.319068,-0.122718],[-1.44808,2.82252,3.01887],[-0.66268,-1.10447,-2.47891],[2.47891,2.03713,0.66268],[0.908117,-2.67526,2.23348],[-2.23348,0.46633,-0.908117],[-1.84078,-0.711767,2.62618],[1.30082,2.42983,-0.515418],[2.87161,-2.28256,-2.08621],[-0.269981,0.859029,1.05538],[-1.05538,-3.06796,-1.30082],[2.08621,0.0736311,1.84078],[0.515418,-1.49717,0.269981],[-2.62618,1.64443,-2.87161],[-2.42983,-1.30082,-0.711767],[0.711767,1.84078,2.42983],[2.28256,-2.87161,0.859029],[-0.859029,0.269981,-2.28256],[-0.0736311,-2.08621,1.64443],[3.06796,1.05538,-1.49717],[1.49717,-0.515418,-3.06796],[-1.64443,2.62618,0.0736311],[-2.03713,-2.47891,-1.88986],[1.10447,0.66268,1.25173],[2.67526,-0.908117,2.82252],[-0.46633,2.23348,-0.319068],[-1.25173,-0.122718,0.46633],[1.88986,3.01887,-2.67526],[0.319068,-1.69351,-1.10447],[-2.82252,1.44808,2.03713],[-2.9207,-0.220893,-2.18439],[0.220893,2.9207,0.957204],[1.79169,-1.79169,2.528],[-1.3499,1.3499,-0.613592],[-0.564505,-2.57709,0.171806],[2.57709,0.564505,-2.96979],[1.00629,-1.00629,-1.39899],[-2.1353,2.1353,1.7426],[-1.7426,-2.18439,-0.220893],[1.39899,0.957204,2.9207],[2.96979,-0.613592,1.3499],[-0.171806,2.528,-1.79169],[-0.957204,-1.39899,2.1353],[2.18439,1.7426,-1.00629],[0.613592,-2.96979,-2.57709],[-2.528,0.171806,0.564505],[-2.72435,-2.77344,3.11705],[0.417243,0.368155,-0.0245437],[1.98804,-1.20264,-1.59534],[-1.15355,1.93895,1.54625],[-0.368155,-0.417243,-0.809942],[2.77344,2.72435,2.33165],[1.20264,-1.98804,0.760854],[-1.93895,1.15355,-2.38074],[-2.33165,-0.809942,1.15355],[0.809942,2.33165,-1.98804],[2.38074,-2.38074,-0.417243]] weights=class=Point name=Unnamed dimension=250 values=[0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004,0.004] residuals=class=Point name=Unnamed dimension=1 values=[0.0865757] relative errors=class=Point name=Unnamed dimension=1 values=[0] mean=3.57691 absolute error=7.7e-02 variance=15.31686 absolute error=1.5e+00 Sobol index 0 = 0.28586 absolute error=2.8e-02 Sobol index 1 = 0.38758 absolute error=5.5e-02 Sobol index 2 = 0.00286 absolute error=2.9e-03 Sobol index [0,1] =0.01430 absolute error=1.4e-02 Sobol index [0,2] =0.25857 absolute error=1.5e-02 Sobol index [1,2] =0.02058 absolute error=2.1e-02 Sobol index [0,1,2] =0.03026 absolute error=3.0e-02 Sobol total index 0 =0.58898 absolute error=3.1e-02 Sobol total index 1 =0.45271 absolute error=1.0e-02 Sobol total index 2 =0.31226 absolute error=6.9e-02 Sobol total index [0,1] =0.01430 absolute error=1.4e-02 Sobol total index [0,2] =0.25857 absolute error=1.5e-02 Sobol total index [1,2] =0.02058 absolute error=2.1e-02 Sobol total index [0,1,2] =0.03026 absolute error=3.0e-02 openturns-1.9/lib/test/t_FunctionalChaos_ishigami_sparse.cxx000066400000000000000000000104741307543307100245340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class FunctionalChaosAlgorithm in interaction * with the FittingAlgorithm class. * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Log::Show( Log::Flags() | Log::INFO ); // Problem parameters UnsignedInteger dimension = 3; Scalar a = 7.0; Scalar b = 0.1; // Reference analytical values Scalar covTh = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1(3); sob_1[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh; sob_1[1] = (pow(a, 2.0) / 8.0) / covTh; sob_1[2] = 0.0; Point sob_2(3); sob_2[0] = 0.0; sob_2[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh; sob_2[2] = 0.0; Point sob_3(1, 0.0); Point sob_T1(3); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T2(3); sob_T2[0] = sob_2[0] + sob_2[1] + sob_3[0]; sob_T2[1] = sob_2[0] + sob_2[2] + sob_3[0]; sob_T2[2] = sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T3(sob_3); // Create the Ishigami function Description inputVariables(dimension); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + (" << a << ") * (sin(xi2)) ^ 2 + (" << b << ") * xi3^4 * sin(xi1)"); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginalX(dimension); for ( UnsignedInteger i = 0; i < dimension; ++ i ) { marginalX[i] = Uniform(-M_PI, M_PI); } ComposedDistribution distribution(marginalX); // Create the orthogonal basis Collection polynomialCollection(dimension); for ( UnsignedInteger i = 0; i < dimension; ++ i ) { polynomialCollection[i] = LegendreFactory(); } LinearEnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // design experiment UnsignedInteger samplingSize = 75; // build basis UnsignedInteger degree = 10; UnsignedInteger basisSize = enumerateFunction.getStrataCumulatedCardinal( degree ); Collection listFittingAlgorithm; listFittingAlgorithm.add( KFold() ); listFittingAlgorithm.add( CorrectedLeaveOneOut() ); for ( UnsignedInteger fittingAlgorithmIndex = 0; fittingAlgorithmIndex < listFittingAlgorithm.getSize(); ++ fittingAlgorithmIndex ) { FixedStrategy adaptiveStrategy( productBasis, basisSize ); FittingAlgorithm fittingAlgorithm( listFittingAlgorithm[fittingAlgorithmIndex] ); LeastSquaresStrategy projectionStrategy( LowDiscrepancyExperiment(SobolSequence(dimension), samplingSize), LeastSquaresMetaModelSelectionFactory(LARS(), fittingAlgorithm)); FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); RandomGenerator::SetSeed(0); algo.run(); FunctionalChaosResult result(algo.getResult()); fullprint << "coeffs = " << result.getCoefficients() << std::endl; fullprint << "residuals = " << result.getResiduals() << std::endl; fullprint << "relative errors = " << result.getRelativeErrors() << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_ishigami_sparse.expout000066400000000000000000000027001307543307100252470ustar00rootroot00000000000000coeffs = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=37 dimension=1 data=[[3.50064],[1.6251],[-0.593014],[-1.29235],[1.37183],[-1.94994],[5.71514e-05],[0.195858],[-1.09326],[0.409022],[0.000563483],[-0.00015688],[-8.15185e-05],[1.35967],[-0.00035393],[-0.010686],[0.164277],[-0.326119],[0.00224536],[0.000321079],[0.00179013],[-0.336109],[-0.00115584],[-0.000608568],[-0.00787737],[0.000510091],[0.0514133],[-0.000369702],[-0.00118681],[0.00142616],[-0.000686008],[-0.00267992],[-0.000924827],[0.000407682],[0.0473871],[0.000960004],[-0.00215534]] residuals = class=Point name=Unnamed dimension=1 values=[2.81377e-05] relative errors = class=Point name=Unnamed dimension=1 values=[3.14134e-09] coeffs = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=37 dimension=1 data=[[3.50064],[1.6251],[-0.593014],[-1.29235],[1.37183],[-1.94994],[5.71514e-05],[0.195858],[-1.09326],[0.409022],[0.000563483],[-0.00015688],[-8.15185e-05],[1.35967],[-0.00035393],[-0.010686],[0.164277],[-0.326119],[0.00224536],[0.000321079],[0.00179013],[-0.336109],[-0.00115584],[-0.000608568],[-0.00787737],[0.000510091],[0.0514133],[-0.000369702],[-0.00118681],[0.00142616],[-0.000686008],[-0.00267992],[-0.000924827],[0.000407682],[0.0473871],[0.000960004],[-0.00215534]] residuals = class=Point name=Unnamed dimension=1 values=[2.81377e-05] relative errors = class=Point name=Unnamed dimension=1 values=[1.43801e-07] openturns-1.9/lib/test/t_FunctionalChaos_nd.cxx000066400000000000000000000304001307543307100217550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of MonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline Scalar sobol(const Indices & indices, const Point & a) { Scalar value = 1.0; for (UnsignedInteger i = 0; i < indices.getSize(); ++i) { value *= 1.0 / (3.0 * pow(1.0 + a[indices[i]], 2.0)); } return value; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Problem parameters UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Reference analytical values Scalar meanTh_Sobol = 1.0; Scalar covTh_Sobol = 1.0; Point kappa(inputDimension); Scalar a = 7.0; Scalar b = 0.1; // Create the gSobol function Description inputVariables(inputDimension); Description outputVariables(outputDimension); outputVariables[0] = "y0"; outputVariables[1] = "y1"; Description formula(outputDimension); formula[0] = "1.0"; for (UnsignedInteger i = 0; i < inputDimension; ++i) { kappa[i] = 0.5 * i; covTh_Sobol *= 1.0 + 1.0 / (3.0 * pow(1.0 + kappa[i], 2.0)); inputVariables[i] = (OSS() << "xi" << i); formula[0] = (OSS() << formula[0] << " * ((abs(4.0 * xi" << i << " - 2.0) + " << kappa[i] << ") / (1.0 + " << kappa[i] << "))"); } formula[1] = (OSS() << "sin(" << -M_PI << " + 2 * " << M_PI << " * xi0) + (" << a << ") * (sin(" << -M_PI << " + 2 * " << M_PI << " * xi1)) ^ 2 + (" << b << ") * (" << -M_PI << " + 2 * " << M_PI << " * xi2)^4 * sin(" << -M_PI << " + 2 * " << M_PI << " * xi0)"); --covTh_Sobol; // Reference analytical values Scalar meanTh_Ishigami = a / 2; Scalar covTh_Ishigami = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1_Ishigami(3); sob_1_Ishigami[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh_Ishigami; sob_1_Ishigami[1] = (pow(a, 2.0) / 8.0) / covTh_Ishigami; sob_1_Ishigami[2] = 0.0; Point sob_2_Ishigami(3); sob_2_Ishigami[0] = 0.0; sob_2_Ishigami[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh_Ishigami; sob_2_Ishigami[2] = 0.0; Point sob_3_Ishigami(1, 0.0); // Multidimensional reference values // Mean Point meanTh(outputDimension); meanTh[0] = meanTh_Sobol; meanTh[1] = meanTh_Ishigami; // Covariance CovarianceMatrix covTh(outputDimension); covTh(0, 0) = covTh_Sobol; covTh(1, 1) = covTh_Ishigami; // 1rst order Sobol Point sob_1(inputDimension * outputDimension); { Indices indices(1); indices[0] = 0; sob_1[0] = sobol(indices, kappa) / covTh_Sobol; indices[0] = 1; sob_1[1] = sobol(indices, kappa) / covTh_Sobol; indices[0] = 2; sob_1[2] = sobol(indices, kappa) / covTh_Sobol; sob_1[3] = sob_1_Ishigami[0]; sob_1[4] = sob_1_Ishigami[1]; sob_1[5] = sob_1_Ishigami[2]; } // 2nd order Sobol Point sob_2(inputDimension * outputDimension); { Indices indices(2); indices[0] = 0; indices[1] = 1; sob_2[0] = sobol(indices, kappa) / covTh_Sobol; indices[1] = 2; sob_2[1] = sobol(indices, kappa) / covTh_Sobol; indices[0] = 1; indices[1] = 2; sob_2[2] = sobol(indices, kappa) / covTh_Sobol; sob_2[3] = sob_2_Ishigami[0]; sob_2[4] = sob_2_Ishigami[1]; sob_2[5] = sob_2_Ishigami[2]; } // 3rd order Sobol Point sob_3(outputDimension); { Indices indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; sob_3[0] = sobol(indices, kappa) / covTh_Sobol; sob_3[1] = sob_3_Ishigami[0]; } // 1rst order Total Sobol Point sob_T1(inputDimension * outputDimension); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; sob_T1[3] = sob_1[3] + sob_2[3] + sob_2[4] + sob_3[1]; sob_T1[4] = sob_1[4] + sob_2[3] + sob_2[5] + sob_3[1]; sob_T1[5] = sob_1[5] + sob_2[4] + sob_2[5] + sob_3[1]; Point sob_T2(inputDimension * outputDimension); sob_T2[0] = sob_2[0] + sob_3[0]; sob_T2[1] = sob_2[1] + sob_3[0]; sob_T2[2] = sob_2[2] + sob_3[0]; sob_T2[3] = sob_2[3] + sob_3[1]; sob_T2[4] = sob_2[4] + sob_3[1]; sob_T2[5] = sob_2[5] + sob_3[1]; // 3rd order Total Sobol Point sob_T3(sob_3); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginals(inputDimension); for (UnsignedInteger i = 0; i < inputDimension; ++i) marginals[i] = Uniform(0.0, 1.0); ComposedDistribution distribution(marginals); // Create the orthogonal basis Collection polynomialCollection(inputDimension); for (UnsignedInteger i = 0; i < inputDimension; ++i) { polynomialCollection[i] = LegendreFactory(); } EnumerateFunction enumerateFunction(inputDimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Create the adaptive strategy // We can choose amongst several strategies // First, the most efficient (but more complex!) strategy Collection listAdaptiveStrategy(0); UnsignedInteger degree = 6; UnsignedInteger indexMax = enumerateFunction.getStrataCumulatedCardinal(degree); UnsignedInteger basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree / 2); Scalar threshold = 1.0e-6; listAdaptiveStrategy.add(CleaningStrategy(productBasis, indexMax, basisDimension, threshold, false)); // Second, the most used (and most basic!) strategy listAdaptiveStrategy.add(FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))); for(UnsignedInteger adaptiveStrategyIndex = 0; adaptiveStrategyIndex < listAdaptiveStrategy.getSize(); ++adaptiveStrategyIndex) { AdaptiveStrategy adaptiveStrategy(listAdaptiveStrategy[adaptiveStrategyIndex]); // Create the projection strategy UnsignedInteger samplingSize = 250; Collection listProjectionStrategy(0); // LHS experiment listProjectionStrategy.add(LeastSquaresStrategy(LHSExperiment(samplingSize))); for(UnsignedInteger projectionStrategyIndex = 0; projectionStrategyIndex < listProjectionStrategy.getSize(); ++projectionStrategyIndex) { ProjectionStrategy projectionStrategy(listProjectionStrategy[projectionStrategyIndex]); // Create the polynomial chaos algorithm Scalar maximumResidual = 1.0e-10; FunctionalChaosAlgorithm algo(model, distribution, adaptiveStrategy, projectionStrategy); algo.setMaximumResidual(maximumResidual); // Reinitialize the RandomGenerator to see the effect of the sampling method only RandomGenerator::SetSeed(0); algo.run(); // Examine the results FunctionalChaosResult result(algo.getResult()); fullprint << "//////////////////////////////////////////////////////////////////////" << std::endl; fullprint << algo.getAdaptiveStrategy() << std::endl; fullprint << algo.getProjectionStrategy() << std::endl; Point residuals(result.getResiduals()); fullprint << "residuals=" << std::fixed << std::setprecision(5) << residuals << std::endl; Point relativeErrors(result.getRelativeErrors()); fullprint << "relative errors=" << std::fixed << std::setprecision(5) << relativeErrors << std::endl; // Post-process the results FunctionalChaosRandomVector vector(result); for (UnsignedInteger outputIndex = 0; outputIndex < outputDimension; ++outputIndex) { fullprint << "output=" << outputIndex << std::endl; Scalar mean = vector.getMean()[outputIndex]; fullprint << "mean=" << std::fixed << std::setprecision(5) << mean << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(mean - meanTh[outputIndex]) << std::endl; Scalar variance = vector.getCovariance()(outputIndex, outputIndex); fullprint << "variance=" << std::fixed << std::setprecision(5) << variance << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(variance - covTh(outputIndex, outputIndex)) << std::endl; Indices indices(1); for(UnsignedInteger i = 0; i < inputDimension; ++i) { indices[0] = i; Scalar value = vector.getSobolIndex(i, outputIndex); fullprint << "Sobol index " << i << " = " << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_1[i + inputDimension * outputIndex]) << std::endl; } indices = Indices(2); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < inputDimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < inputDimension; ++j) { indices[1] = j; Scalar value = vector.getSobolIndex(indices, outputIndex); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_2[k + inputDimension * outputIndex]) << std::endl; k = k + 1; } // j } // i indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; Scalar value = vector.getSobolIndex(indices, outputIndex); fullprint << "Sobol index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_3[outputIndex]) << std::endl; for (UnsignedInteger i = 0; i < inputDimension; ++i) { value = vector.getSobolTotalIndex(i, outputIndex); fullprint << "Sobol total index " << i << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T1[i + inputDimension * outputIndex]) << std::endl; } indices = Indices(2); k = 0; for (UnsignedInteger i = 0; i < inputDimension; ++i) { indices[0] = i; for (UnsignedInteger j = i + 1; j < inputDimension; ++j) { indices[1] = j; value = vector.getSobolTotalIndex(indices, outputIndex); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T2[k + inputDimension * outputIndex]) << std::endl; k = k + 1; } } indices = Indices(3); indices[0] = 0; indices[1] = 1; indices[2] = 2; value = vector.getSobolTotalIndex(indices, outputIndex); fullprint << "Sobol total index " << indices << " =" << std::fixed << std::setprecision(5) << value << " absolute error=" << std::scientific << std::setprecision(1) << std::abs(value - sob_T3[1]) << std::endl; } // outputIndex } // ProjectionStrategy } // AdaptiveStrategy } // try catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_FunctionalChaos_nd.expout000066400000000000000000000115621307543307100225070ustar00rootroot00000000000000////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=2 values=[0.000333364,0.0020513] relative errors=class=Point name=Unnamed dimension=2 values=[4.30584e-05,7.86005e-05] output=0 mean=0.99922 absolute error=7.8e-04 variance=0.64968 absolute error=8.8e-03 Sobol index 0 = 0.51156 absolute error=5.3e-03 Sobol index 1 = 0.22835 absolute error=3.3e-03 Sobol index 2 = 0.12201 absolute error=4.6e-03 Sobol index [0,1] =0.07645 absolute error=1.5e-03 Sobol index [0,2] =0.03673 absolute error=5.5e-03 Sobol index [1,2] =0.01848 absolute error=2.7e-04 Sobol index [0,1,2] =0.00642 absolute error=1.7e-04 Sobol total index 0 =0.63116 absolute error=1.5e-03 Sobol total index 1 =0.32970 absolute error=4.7e-03 Sobol total index 2 =0.18364 absolute error=1.0e-02 Sobol total index [0,1] =0.08287 absolute error=1.6e-03 Sobol total index [0,2] =0.04315 absolute error=5.3e-03 Sobol total index [1,2] =0.02490 absolute error=1.0e-04 Sobol total index [0,1,2] =0.00642 absolute error=6.4e-03 output=1 mean=3.54043 absolute error=4.0e-02 variance=13.37471 absolute error=4.7e-01 Sobol index 0 = 0.31289 absolute error=1.0e-03 Sobol index 1 = 0.45252 absolute error=1.0e-02 Sobol index 2 = 0.00039 absolute error=3.9e-04 Sobol index [0,1] =0.00050 absolute error=5.0e-04 Sobol index [0,2] =0.23225 absolute error=1.1e-02 Sobol index [1,2] =0.00130 absolute error=1.3e-03 Sobol index [0,1,2] =0.00014 absolute error=1.4e-04 Sobol total index 0 =0.54579 absolute error=1.2e-02 Sobol total index 1 =0.45446 absolute error=1.2e-02 Sobol total index 2 =0.23409 absolute error=9.6e-03 Sobol total index [0,1] =0.00065 absolute error=6.5e-04 Sobol total index [0,2] =0.23239 absolute error=1.1e-02 Sobol total index [1,2] =0.00145 absolute error=1.4e-03 Sobol total index [0,1,2] =0.00014 absolute error=1.4e-04 ////////////////////////////////////////////////////////////////////// class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals=class=Point name=Unnamed dimension=2 values=[0.000270407,0.00156941] relative errors=class=Point name=Unnamed dimension=2 values=[2.83306e-05,4.60086e-05] output=0 mean=0.99342 absolute error=6.6e-03 variance=0.63987 absolute error=1.9e-02 Sobol index 0 = 0.50440 absolute error=1.9e-03 Sobol index 1 = 0.21952 absolute error=5.5e-03 Sobol index 2 = 0.12588 absolute error=6.8e-04 Sobol index [0,1] =0.07467 absolute error=3.3e-04 Sobol index [0,2] =0.03953 absolute error=2.7e-03 Sobol index [1,2] =0.02183 absolute error=3.1e-03 Sobol index [0,1,2] =0.01416 absolute error=7.9e-03 Sobol total index 0 =0.63277 absolute error=3.1e-03 Sobol total index 1 =0.33019 absolute error=5.2e-03 Sobol total index 2 =0.20140 absolute error=7.7e-03 Sobol total index [0,1] =0.08884 absolute error=7.6e-03 Sobol total index [0,2] =0.05370 absolute error=5.3e-03 Sobol total index [1,2] =0.03599 absolute error=1.1e-02 Sobol total index [0,1,2] =0.01416 absolute error=1.4e-02 output=1 mean=3.48613 absolute error=1.4e-02 variance=14.20283 absolute error=3.6e-01 Sobol index 0 = 0.30217 absolute error=1.2e-02 Sobol index 1 = 0.44117 absolute error=1.2e-03 Sobol index 2 = 0.00453 absolute error=4.5e-03 Sobol index [0,1] =0.00772 absolute error=7.7e-03 Sobol index [0,2] =0.23078 absolute error=1.3e-02 Sobol index [1,2] =0.00606 absolute error=6.1e-03 Sobol index [0,1,2] =0.00758 absolute error=7.6e-03 Sobol total index 0 =0.54824 absolute error=9.3e-03 Sobol total index 1 =0.46252 absolute error=2.0e-02 Sobol total index 2 =0.24895 absolute error=5.3e-03 Sobol total index [0,1] =0.01529 absolute error=1.5e-02 Sobol total index [0,2] =0.23835 absolute error=5.3e-03 Sobol total index [1,2] =0.01363 absolute error=1.4e-02 Sobol total index [0,1,2] =0.00758 absolute error=7.6e-03 openturns-1.9/lib/test/t_GammaFactory_std.cxx000066400000000000000000000064301307543307100214460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Gamma for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Gamma distribution(0.2, 1.0, 1.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); GammaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; distribution = Gamma(2.3, 1.0, 1.0); sample = distribution.getSample(size); // estimatedDistribution = factory.build(sample, covariance); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Gamma estimatedGamma(factory.buildAsGamma(sample)); fullprint << "Gamma =" << distribution << std::endl; fullprint << "Estimated gamma=" << estimatedGamma << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedGamma = factory.buildAsGamma(); fullprint << "Default gamma=" << estimatedGamma << std::endl; estimatedGamma = factory.buildAsGamma(distribution.getParameter()); fullprint << "Gamma from parameters=" << estimatedGamma << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GammaFactory_std.expout000066400000000000000000000017731307543307100221750ustar00rootroot00000000000000Distribution =class=Gamma name=Gamma dimension=1 k=0.2 lambda=1 gamma=1 Estimated distribution=class=Gamma name=Gamma dimension=1 k=0.222723 lambda=1.12563 gamma=0.9999 Distribution =class=Gamma name=Gamma dimension=1 k=2.3 lambda=1 gamma=1 Estimated distribution=class=Gamma name=Gamma dimension=1 k=2.1923 lambda=0.974143 gamma=1.06104 Default distribution=class=Gamma name=Gamma dimension=1 k=1 lambda=1 gamma=0 Distribution from parameters=class=Gamma name=Gamma dimension=1 k=2.3 lambda=1 gamma=1 Gamma =class=Gamma name=Gamma dimension=1 k=2.3 lambda=1 gamma=1 Estimated gamma=class=Gamma name=Gamma dimension=1 k=2.1923 lambda=0.974143 gamma=1.06104 Default gamma=class=Gamma name=Gamma dimension=1 k=1 lambda=1 gamma=0 Gamma from parameters=class=Gamma name=Gamma dimension=1 k=2.3 lambda=1 gamma=1 Estimated distribution=class=Gamma name=Gamma dimension=1 k=2.53274e+305 lambda=1 gamma=0 Estimated distribution=class=Gamma name=Gamma dimension=1 k=2.53274e+305 lambda=1 gamma=0.9999 openturns-1.9/lib/test/t_Gamma_std.cxx000066400000000000000000000223261307543307100201200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Gamma for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Gamma { public: TestObject() : Gamma(1.5, 2.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Collection allDistributions(0); allDistributions.add(Gamma(1.5, 2.5, -0.5)); allDistributions.add(Gamma(15.0, 2.5)); for (UnsignedInteger n = 0; n < allDistributions.getSize(); ++n) { Gamma distribution(allDistributions[n]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (Gamma(distribution.getK() + eps, distribution.getLambda(), distribution.getGamma()).computePDF(point) - Gamma(distribution.getK() - eps, distribution.getLambda(), distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Gamma(distribution.getK(), distribution.getLambda() + eps, distribution.getGamma()).computePDF(point) - Gamma(distribution.getK(), distribution.getLambda() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() + eps).computePDF(point) - Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (Gamma(distribution.getK() + eps, distribution.getLambda(), distribution.getGamma()).computeCDF(point) - Gamma(distribution.getK() - eps, distribution.getLambda(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Gamma(distribution.getK(), distribution.getLambda() + eps, distribution.getGamma()).computeCDF(point) - Gamma(distribution.getK(), distribution.getLambda() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() + eps).computeCDF(point) - Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Gamma::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Gamma_std.expout000066400000000000000000000227701307543307100206450ustar00rootroot00000000000000Testing class Gamma checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Gamma name=Gamma dimension=1 k=1.5 lambda=2.5 gamma=-0.5 streamObject(const T & anObject) class=Gamma name=Gamma dimension=1 k=1.5 lambda=2.5 gamma=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Gamma name=Gamma dimension=1 k=1.5 lambda=2.5 gamma=-0.5 Distribution Gamma(k = 1.5, lambda = 2.5, gamma = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.281847] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.263977] last=class=Point name=Unnamed dimension=1 values=[-0.375541] mean=class=Point name=Unnamed dimension=1 values=[0.101621] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.247946] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.278355] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.278355] log pdf=-2.05205 pdf =0.128471 pdf (FD)=0.128471 cdf=0.942442 ccdf=0.0575585 survival=0.0575585 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.429631] Survival(inverse survival)=0.95 characteristic function=(0.892418,0.0632527) log characteristic function=(-0.111315,0.0707596) pdf gradient =class=Point name=Unnamed dimension=3 values=[0.16512,-0.115624,0.278355] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.16512,-0.115624,0.278355] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0875625,0.0770828,-0.128471] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.0875625,0.0770828,-0.128471] quantile=class=Point name=Unnamed dimension=1 values=[1.06295] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.499368] upper bound=class=Point name=Unnamed dimension=1 values=[1.06337] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Gamma(k = 1.5, lambda = 2.5, gamma = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Gamma(k = 1.5, lambda = 2.5, gamma = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Gamma(k = 1.5, lambda = 2.5, gamma = -0.5)) level=2.18978 beta=0.111942 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.456841] upper bound=class=Point name=Unnamed dimension=1 values=[1.36968] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[1.06295] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.429631] upper bound=class=Point name=Unnamed dimension=1 values=[13.1546] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.1] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.24] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[k : 1.5, lambda : 2.5, gamma : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[3.75] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[13.125] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[59.0625] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[324.844] Standard representative=Gamma(k = 1.5, lambda = 1, gamma = 0) standard deviation=class=Point name=Unnamed dimension=1 values=[0.489898] skewness=class=Point name=Unnamed dimension=1 values=[1.63299] kurtosis=class=Point name=Unnamed dimension=1 values=[7] Distribution class=Gamma name=Gamma dimension=1 k=15 lambda=2.5 gamma=0 Distribution Gamma(k = 15, lambda = 2.5, gamma = 0) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[6.03324] oneSample first=class=Point name=Unnamed dimension=1 values=[4.73401] last=class=Point name=Unnamed dimension=1 values=[3.93099] mean=class=Point name=Unnamed dimension=1 values=[6.02305] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.44857] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[1.00845e-05] ddf (FD)=class=Point name=Unnamed dimension=1 values=[1.00845e-05] log pdf=-13.9469 pdf =8.76911e-07 pdf (FD)=8.76911e-07 cdf=6.91531e-08 ccdf=1 survival=1 Inverse survival=class=Point name=Unnamed dimension=1 values=[3.69853] Survival(inverse survival)=0.95 characteristic function=(0.275588,-0.178824) log characteristic function=(-1.11315,5.7076) pdf gradient =class=Point name=Unnamed dimension=3 values=[-1.54166e-06,4.38456e-06,-1.00845e-05] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-1.54166e-06,4.38456e-06,-1.00845e-05] cdf gradient =class=Point name=Unnamed dimension=3 values=[-1.26959e-07,3.50764e-07,-8.76911e-07] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-1.26959e-07,3.50764e-07,-8.76911e-07] quantile=class=Point name=Unnamed dimension=1 values=[8.75459] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[3.1431] upper bound=class=Point name=Unnamed dimension=1 values=[9.09027] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Gamma(k = 15, lambda = 2.5, gamma = 0)) gradientImplementation=MinimumVolumeLevelSetGradient(Gamma(k = 15, lambda = 2.5, gamma = 0)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Gamma(k = 15, lambda = 2.5, gamma = 0)) level=3.27167 beta=0.037943 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[3.35815] upper bound=class=Point name=Unnamed dimension=1 values=[9.39585] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[8.75459] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[3.69853] upper bound=class=Point name=Unnamed dimension=1 values=[26.3665] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[6] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.4] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[k : 15, lambda : 2.5, gamma : 0]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[15] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[240] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[4080] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[73440] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1.39536e+06] Standard representative=Gamma(k = 15, lambda = 1, gamma = 0) standard deviation=class=Point name=Unnamed dimension=1 values=[1.54919] skewness=class=Point name=Unnamed dimension=1 values=[0.516398] kurtosis=class=Point name=Unnamed dimension=1 values=[3.4] openturns-1.9/lib/test/t_GaussKronrod_std.cxx000066400000000000000000000076501307543307100215220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GaussKronrod * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // First, a smooth function { SymbolicFunction f("x", "sin(x)"); Scalar a = -2.5; Scalar b = 4.5; // Default parameters GaussKronrod algo; GaussKronrodRule::GaussKronrodPair rules[5] = {GaussKronrodRule::G3K7, GaussKronrodRule::G7K15, GaussKronrodRule::G11K23, GaussKronrodRule::G15K31, GaussKronrodRule::G25K51}; for (UnsignedInteger i = 0; i < 5; ++i) { algo.setRule(rules[i]); fullprint << "Algo=" << algo << std::endl; // High-level interface Scalar error = -1.0; Scalar value = algo.integrate(f, Interval(a, b), error)[0]; Scalar ref = cos(a) - cos(b); fullprint << "value=" << value << ", ref=" << ref << ", true error below bound? " << (std::abs(ref - value) < algo.getMaximumError() ? "true" : "false") << ", estimated error below bound? " << (error < algo.getMaximumError() ? "true" : "false") << std::endl; // Low-level interface // Point ai; // Point bi; // Sample fi; // Point ei; // Scalar value2(algo.integrate(f, a, b, error, ai, bi, fi, ei)[0]); // ai.add(b); // Graph g(f.draw(a, b, 512)); // Cloud lower(ai, Point(ai.getDimension())); // lower.setColor("magenta"); // g.add(lower); // g.draw(String(OSS() << "Smooth_function_adaptation_" << i)); } } // Second, a piecewise smooth function { SymbolicFunction f("x", "abs(sin(x))"); Scalar a = -2.5; Scalar b = 4.5; GaussKronrod algo; GaussKronrodRule::GaussKronrodPair rules[5] = {GaussKronrodRule::G3K7, GaussKronrodRule::G7K15, GaussKronrodRule::G11K23, GaussKronrodRule::G15K31, GaussKronrodRule::G25K51}; for (UnsignedInteger i = 0; i < 5; ++i) { algo.setRule(rules[i]); fullprint << "Algo=" << algo << std::endl; Scalar error = -1.0; Scalar value = algo.integrate(f, Interval(a, b), error)[0]; Scalar ref = 4.0 + cos(b) - cos(a); fullprint << "value=" << value << ", ref=" << ref << ", true error below bound? " << (std::abs(ref - value) < algo.getMaximumError() ? "true" : "false") << ", estimated error below bound? " << (error < algo.getMaximumError() ? "true" : "false") << std::endl; // Low-level interface // Point ai; // Point bi; // Sample fi; // Point ei; // Scalar value2(algo.integrate(f, a, b, error, ai, bi, fi, ei)[0]); // ai.add(b); // Graph g(f.draw(a, b, 512)); // Cloud lower(ai, Point(ai.getDimension())); // lower.setColor("magenta"); // g.add(lower); // g.draw(String(OSS() << "Nonsmooth_function_adaptation_" << i)); } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GaussKronrod_std.expout000066400000000000000000000040471307543307100222410ustar00rootroot00000000000000Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G3K7) value=-0.590348, ref=-0.590348, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G7K15) value=-0.590348, ref=-0.590348, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G11K23) value=-0.590348, ref=-0.590348, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G15K31) value=-0.590348, ref=-0.590348, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G25K51) value=-0.590348, ref=-0.590348, true error below bound? true, estimated error below bound? false Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G3K7) value=4.59035, ref=4.59035, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G7K15) value=4.59035, ref=4.59035, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G11K23) value=4.59035, ref=4.59035, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G15K31) value=4.59035, ref=4.59035, true error below bound? true, estimated error below bound? true Algo=class=GaussKronrod, maximum sub intervals=100, maximum error=1e-12, rule=class=GaussKronrodRule, pair=G25K51) value=4.59035, ref=4.59035, true error below bound? false, estimated error below bound? false openturns-1.9/lib/test/t_GaussLegendre_std.cxx000066400000000000000000000035621307543307100216270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GaussKronrod * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { SymbolicFunction f("x", "sin(x)"); Scalar a = -2.5; Scalar b = 4.5; // Default parameters GaussLegendre algo; fullprint << "Algo=" << algo << std::endl; // High-level interface algo = GaussLegendre(Indices(1, 20)); Scalar value = algo.integrate(f, Interval(a, b))[0]; Scalar ref = cos(a) - cos(b); fullprint << "value=" << value << ", ref=" << ref << std::endl; // Low-level interface Sample adaptedNodes; value = algo.integrateWithNodes(f, Interval(a, b), adaptedNodes)[0]; fullprint << "value=" << value << ", ref=" << ref << ", adaptedNodes=" << adaptedNodes << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GaussLegendre_std.expout000066400000000000000000000036701307543307100223510ustar00rootroot00000000000000Algo=class=GaussLegendre, discretization=[64], nodes=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=1 data=[[0.000347479],[0.00182994],[0.00449331],[0.00833187],[0.0133366],[0.0194956],[0.0267943],[0.0352154],[0.0447389],[0.0553423],[0.0670003],[0.0796854],[0.0933673],[0.108014],[0.12359],[0.140059],[0.157382],[0.175517],[0.194422],[0.214052],[0.23436],[0.255298],[0.276817],[0.298865],[0.32139],[0.344339],[0.367656],[0.391288],[0.415178],[0.439269],[0.463503],[0.487825],[0.512175],[0.536497],[0.560731],[0.584822],[0.608712],[0.632344],[0.655661],[0.67861],[0.701135],[0.723183],[0.744702],[0.76564],[0.785948],[0.805578],[0.824483],[0.842618],[0.859941],[0.87641],[0.891986],[0.906633],[0.920315],[0.933],[0.944658],[0.955261],[0.964785],[0.973206],[0.980504],[0.986663],[0.991668],[0.995507],[0.99817],[0.999653]], weights=class=Point name=Unnamed dimension=64 values=[0.00089164,0.00207352,0.00325223,0.00442338,0.00558407,0.00673152,0.00786302,0.00897586,0.0100674,0.0111351,0.0121764,0.0131887,0.0141698,0.0151173,0.016029,0.0169026,0.0177361,0.0185276,0.0192751,0.0199769,0.0206313,0.0212368,0.0217919,0.0222953,0.0227458,0.0231424,0.0234841,0.0237701,0.0239997,0.0241724,0.0242877,0.0243455,0.0243455,0.0242877,0.0241724,0.0239997,0.0237701,0.0234841,0.0231424,0.0227458,0.0222953,0.0217919,0.0212368,0.0206313,0.0199769,0.0192751,0.0185276,0.0177361,0.0169026,0.016029,0.0151173,0.0141698,0.0131887,0.0121764,0.0111351,0.0100674,0.00897586,0.00786302,0.00673152,0.00558407,0.00442338,0.00325223,0.00207352,0.00089164] value=-0.590348, ref=-0.590348 value=-0.590348, ref=-0.590348, adaptedNodes=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=1 data=[[-2.47595],[-2.3739],[-2.19282],[-1.93691],[-1.61216],[-1.22619],[-0.788035],[-0.307971],[0.20275],[0.732157],[1.26784],[1.79725],[2.30797],[2.78803],[3.22619],[3.61216],[3.93691],[4.19282],[4.3739],[4.47595]] openturns-1.9/lib/test/t_GaussProductExperiment_std.cxx000066400000000000000000000041251307543307100235570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GaussProductExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Collection marginals(0); marginals.add(Exponential()); marginals.add(Triangular(-1.0, -0.5, 1.0)); ComposedDistribution distribution(marginals); Indices marginalDegrees(0); marginalDegrees.add(3); marginalDegrees.add(6); // Test the constructor based on marginal degrees fullprint << "experiment1=" << GaussProductExperiment(marginalDegrees) << std::endl; // Test the constructor based on distribution fullprint << "experiment2=" << GaussProductExperiment(distribution) << std::endl; // Test the constructor based on marginal degrees and distribution GaussProductExperiment myPlane(distribution, marginalDegrees); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GaussProductExperiment_std.expout000066400000000000000000000034261307543307100243040ustar00rootroot00000000000000experiment1=class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal degrees=[3,6] experiment2=class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 marginal[1]=class=Triangular name=Triangular dimension=1 a=-1 m=-0.5 b=1 marginal degrees=[5,5] myPlane = class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 marginal[1]=class=Triangular name=Triangular dimension=1 a=-1 m=-0.5 b=1 marginal degrees=[3,6] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=18 dimension=2 description=[X0,X1] data=[[0.415775,-0.874259],[2.29428,-0.874259],[6.28995,-0.874259],[0.415775,-0.607842],[2.29428,-0.607842],[6.28995,-0.607842],[0.415775,-0.261572],[2.29428,-0.261572],[6.28995,-0.261572],[0.415775,0.158746],[2.29428,0.158746],[6.28995,0.158746],[0.415775,0.559836],[2.29428,0.559836],[6.28995,0.559836],[0.415775,0.860618],[2.29428,0.860618],[6.28995,0.860618]] weights = class=Point name=Unnamed dimension=18 values=[0.0366823,0.0143676,0.000535938,0.174703,0.0684267,0.00255245,0.239237,0.0937032,0.00349531,0.16962,0.066436,0.00247819,0.0757736,0.0296787,0.00110707,0.0150779,0.00590563,0.000220292] openturns-1.9/lib/test/t_GaussianProcess_std.cxx000066400000000000000000000104151307543307100222030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Temporal Normal Process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* Default dimension parameter to evaluate the model */ const UnsignedInteger defaultDimension = 1; /* Spatial dimension of the model */ const UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(defaultDimension, 1.0); /* Scale values */ Point scale(spatialDimension, 1.0); /* Second order model with parameters */ ExponentialCauchy myModel(scale, amplitude); fullprint << "myModel=" << myModel << std::endl; /* checking the copy-cast*/ SecondOrderModel mySecondOrderModel(myModel); fullprint << "mySecondOrderModel=" << mySecondOrderModel << std::endl; const Scalar tmin = 0.0; const Scalar step = 0.1; const UnsignedInteger n = 11; RegularGrid myTimeGrid(tmin, step, n); const UnsignedInteger size = 25; GaussianProcess myProcess(myModel, myTimeGrid); fullprint << "myProcess=" << myProcess << std::endl; fullprint << "is stationary? " << myProcess.isStationary() << std::endl; myProcess.setSamplingMethod(0); fullprint << "mean over " << size << " realizations=" << myProcess.getSample(size).computeMean() << std::endl; myProcess.setSamplingMethod(2); fullprint << "mean over " << size << " realizations=" << myProcess.getSample(size).computeMean() << std::endl; /* Second order model with parameters */ ExponentialModel myCovModel(scale, amplitude); fullprint << "myCovModel=" << myCovModel << std::endl; GaussianProcess myProcess1(myCovModel, myTimeGrid); fullprint << "myProcess1=" << myProcess1 << std::endl; fullprint << "is stationary? " << myProcess1.isStationary() << std::endl; myProcess1.setSamplingMethod(0); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; myProcess1.setSamplingMethod(2); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; /* With constant trend */ TrendTransform trend(SymbolicFunction("t", "4.0")); GaussianProcess myProcess2(trend, myCovModel, myTimeGrid); fullprint << "myProcess2=" << myProcess2 << std::endl; fullprint << "is stationary? " << myProcess2.isStationary() << std::endl; myProcess1.setSamplingMethod(0); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; myProcess1.setSamplingMethod(2); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; /* With varying trend */ TrendTransform trend3(SymbolicFunction("t", "sin(t)")); GaussianProcess myProcess3(trend3, myCovModel, myTimeGrid); fullprint << "myProcess3=" << myProcess3 << std::endl; fullprint << "is stationary? " << myProcess3.isStationary() << std::endl; myProcess1.setSamplingMethod(0); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; myProcess1.setSamplingMethod(2); fullprint << "mean over " << size << " realizations=" << myProcess1.getSample(size).computeMean() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GaussianProcess_std.expout000066400000000000000000000252571307543307100227370ustar00rootroot00000000000000myModel=class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true mySecondOrderModel=class=SecondOrderModel implementation=class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true myProcess=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false is stationary? true mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[-0.188307],[-0.276361],[-0.371205],[-0.284791],[-0.412755],[-0.22348],[-0.136958],[-0.0333005],[0.0318759],[-0.0703118],[-0.196535]] mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[-0.0240053],[0.0640317],[-0.0209763],[-0.0496144],[-0.0333348],[0.0486537],[-0.00997906],[-0.105565],[-0.13351],[-0.096771],[-0.075824]] myCovModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true myProcess1=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false is stationary? true mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0.301595],[0.37506],[0.321926],[0.367551],[0.122526],[0.123648],[0.0419671],[-0.0629345],[-0.00632637],[-0.102149],[-0.137184]] mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0.407148],[0.396594],[0.372824],[0.387984],[0.299184],[0.280284],[0.190112],[0.136746],[0.151671],[0.187193],[0.180541]] myProcess2=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[4.0] covarianceModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=false checkedStationaryTrend=false is stationary? true mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[-0.251757],[-0.222795],[-0.234703],[-0.220498],[-0.0886277],[-0.08522],[-0.0397054],[-0.113986],[-0.0915855],[-0.157247],[-0.122319]] mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[-0.0497446],[0.0982915],[0.0241147],[0.0462604],[0.159583],[0.106009],[0.263916],[0.261368],[0.412177],[0.479138],[0.369998]] myProcess3=class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] covarianceModel=class=ExponentialModel scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] isDiagonal=true covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=false checkedStationaryTrend=false is stationary? false mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0.114547],[0.140195],[0.093912],[0.033274],[0.0888621],[0.00857431],[0.0748437],[0.013844],[-0.048691],[-0.0891705],[-0.0593602]] mean over 25 realizations=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[y0] data=[[0.150853],[0.275676],[0.207606],[0.184074],[0.272174],[0.306164],[0.210497],[0.0391189],[0.119042],[0.0631432],[0.111788]] openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_nlopt.cxx000066400000000000000000000055241307543307100250010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of GeneralLinearModelAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Set Numerical precision to 3 PlatformInfo::SetNumericalPrecision(3); std::cout << "================" << std::endl; std::cout << "Test using NLOpt" << std::endl; std::cout << "================" << std::endl; // Calibration of default optimizer ResourceMap::SetAsScalar("GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound", 1.0e-5); ResourceMap::SetAsScalar("GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound", 100); // Data & estimation const UnsignedInteger spatialDimension = 1; Sample X = Normal(0, 1).getSample(100); X = X.sortAccordingToAComponent(0); SquaredExponential covarianceModel(1); Description inDescription(1); inDescription[0] = "x"; Description formula(1); formula[0] = "x - 0.6 * cos(x/3)"; SymbolicFunction model(inDescription, formula); const Sample Y = model(X); const Basis basis = QuadraticBasisFactory(spatialDimension).build(); GeneralLinearModelAlgorithm algo(X, Y, covarianceModel, basis, true); NLopt solver("LN_NELDERMEAD"); algo.setOptimizationAlgorithm(solver); algo.run(); // perform an evaluation GeneralLinearModelResult result = algo.getResult(); const Function metaModel = result.getMetaModel(); CovarianceModel conditionalCovariance = result.getCovarianceModel(); const Sample residual = metaModel(X) - Y; assert_almost_equal(residual.computeCenteredMoment(2), Point(1, 1.06e-05), 1e-5, 1e-5); Point parameter(2); parameter[0] = 0.702138; parameter[1] = 0.00137; assert_almost_equal(conditionalCovariance.getParameter(), parameter, 2e-3, 1e-3); std::cout << "Test Ok" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_nlopt.expout000066400000000000000000000000731307543307100255150ustar00rootroot00000000000000================ Test using NLOpt ================ Test Ok openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_std.cxx000066400000000000000000000112041307543307100244270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of GeneralLinearModelAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Set Numerical precision to 4 PlatformInfo::SetNumericalPrecision(4); UnsignedInteger sampleSize = 40; UnsignedInteger spatialDimension = 1; // Create the function to estimate SymbolicFunction model("x0", "x0"); Sample X(sampleSize, spatialDimension); for (UnsignedInteger i = 0; i < sampleSize; ++ i) X[i][0] = 3.0 + (8.0 * i) / sampleSize; Sample Y = model(X); // Add a small noise to data Y += GaussianProcess(AbsoluteExponential(Point(1, 0.1), Point(1, 0.2)), Mesh(X)).getRealization().getValues(); Basis basis = LinearBasisFactory(spatialDimension).build(); // Case of a misspecified covariance model DiracCovarianceModel covarianceModel(spatialDimension); fullprint << "===================================================\n" << std::endl; GeneralLinearModelAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); GeneralLinearModelResult result = algo.getResult(); fullprint << "\ncovariance (dirac, optimized)=" << result.getCovarianceModel() << std::endl; fullprint << "trend (dirac, optimized)=" << result.getTrendCoefficients() << std::endl; fullprint << "===================================================\n" << std::endl; // Now without estimating covariance parameters basis = LinearBasisFactory(spatialDimension).build(); covarianceModel = DiracCovarianceModel(spatialDimension); algo = GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis, true, true); algo.setOptimizeParameters(false); algo.run(); result = algo.getResult(); fullprint << "\ncovariance (dirac, not optimized)=" << result.getCovarianceModel() << std::endl; fullprint << "trend (dirac, not optimized)=" << result.getTrendCoefficients() << std::endl; fullprint << "===================================================\n" << std::endl; // Case of a well specified covariance model // Test the optimization when the amplitude is deduced analytically from the scale { AbsoluteExponential covarianceModel(spatialDimension); GeneralLinearModelAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); GeneralLinearModelResult result = algo.getResult(); fullprint << "\ncovariance (reduced, unbiased)=" << result.getCovarianceModel() << std::endl; fullprint << "trend (reduced, unbiased)=" << result.getTrendCoefficients() << std::endl; fullprint << "===================================================\n" << std::endl; ResourceMap::SetAsBool("GeneralLinearModelAlgorithm-UnbiasedVariance", false); algo = GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis); algo.run(); result = algo.getResult(); fullprint << "\ncovariance (reduced, biased)=" << result.getCovarianceModel() << std::endl; fullprint << "trend (reduced, biased)=" << result.getTrendCoefficients() << std::endl; fullprint << "===================================================\n" << std::endl; ResourceMap::SetAsBool("GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate", false); algo = GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis); algo.run(); result = algo.getResult(); fullprint << "\ncovariance (full optim)=" << result.getCovarianceModel() << std::endl; fullprint << "trend (full optim)=" << result.getTrendCoefficients() << std::endl; fullprint << "===================================================\n" << std::endl; } std::cout << "Test Ok" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_std.expout000066400000000000000000000030631307543307100251550ustar00rootroot00000000000000=================================================== covariance (dirac, optimized)=class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=1 values=[0.1957], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] trend (dirac, optimized)=[[-0.1109,1.015]] =================================================== covariance (dirac, not optimized)=class=DiracCovarianceModel, amplitude=class=Point name=Unnamed dimension=1 values=[1], spatialCorrelation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] trend (dirac, not optimized)=[[6.892,2.373]] =================================================== covariance (reduced, unbiased)=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[0.1328] amplitude=class=Point name=Unnamed dimension=1 values=[0.1956] trend (reduced, unbiased)=[[-0.1034,1.014]] =================================================== covariance (reduced, biased)=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[0.1328] amplitude=class=Point name=Unnamed dimension=1 values=[0.1907] trend (reduced, biased)=[[-0.1034,1.014]] =================================================== covariance (full optim)=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[0.1328] amplitude=class=Point name=Unnamed dimension=1 values=[0.1907] trend (full optim)=[[-0.1034,1.014]] =================================================== Test Ok openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_std_hmat.cxx000066400000000000000000000057741307543307100254570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of GeneralLinearModelAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::Set("GeneralLinearModelAlgorithm-LinearAlgebra", "HMAT"); try { // Set Numerical precision to 3 PlatformInfo::SetNumericalPrecision(3); std::cout << "========================" << std::endl; std::cout << "Test standard using HMat" << std::endl; std::cout << "=======================" << std::endl; UnsignedInteger sampleSize = 6; UnsignedInteger spatialDimension = 1; // Create the function to estimate Description input(spatialDimension); input[0] = "x0"; Description foutput(1); foutput[0] = "f0"; Description formulas(1); formulas[0] = "x0"; Function model(input, foutput, formulas); Sample X(sampleSize, spatialDimension); Sample X2(sampleSize, spatialDimension); for ( UnsignedInteger i = 0; i < sampleSize; ++ i ) { X[i][0] = 3.0 + i; X2[i][0] = 2.5 + i; } X[0][0] = 1.0; X[1][0] = 3.0; X2[0][0] = 2.0; X2[1][0] = 4.0; Sample Y = model(X); for ( UnsignedInteger i = 0; i < sampleSize; ++ i ) { Y[i][0] += 0.01 * DistFunc::rNormal(); } // Add a small noise to data Sample Y2 = model(X2); Basis basis = LinearBasisFactory(spatialDimension).build(); DiracCovarianceModel covarianceModel(spatialDimension); GeneralLinearModelAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); // perform an evaluation GeneralLinearModelResult result = algo.getResult(); Function metaModel = result.getMetaModel(); CovarianceModel conditionalCovariance = result.getCovarianceModel(); const Sample residual = metaModel(X) - Y; assert_almost_equal(residual.computeCenteredMoment(2), Point(1, 0.00013144), 1e-5, 1e-5); assert_almost_equal(conditionalCovariance.getParameter(), Point(1, 0.011464782674211804), 1e-5, 1e-3); std::cout << "Test Ok" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralLinearModelAlgorithm_std_hmat.expout000066400000000000000000000001221307543307100261570ustar00rootroot00000000000000======================== Test standard using HMat ======================= Test Ok openturns-1.9/lib/test/t_GeneralizedExtremeValue_std.cxx000066400000000000000000000230551307543307100236560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GeneralizedExtremeValue for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public GeneralizedExtremeValue { public: TestObject() : GeneralizedExtremeValue(2.0, 1.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Collection all_cases(0); all_cases.add(GeneralizedExtremeValue(2.0, 1.5, -0.15)); all_cases.add(GeneralizedExtremeValue(2.0, 1.5, 0.0)); all_cases.add(GeneralizedExtremeValue(2.0, 1.5, 0.15)); for (UnsignedInteger i = 0; i < all_cases.getSize(); ++i) { GeneralizedExtremeValue distribution(all_cases[i]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (GeneralizedExtremeValue(distribution.getMu() + eps, distribution.getSigma(), distribution.getXi()).computePDF(point) - GeneralizedExtremeValue(distribution.getMu() - eps, distribution.getSigma(), distribution.getXi()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() + eps, distribution.getXi()).computePDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() - eps, distribution.getXi()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() + eps).computePDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (GeneralizedExtremeValue(distribution.getMu() + eps, distribution.getSigma(), distribution.getXi()).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu() - eps, distribution.getSigma(), distribution.getXi()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() + eps, distribution.getXi()).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() - eps, distribution.getXi()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() + eps).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; GeneralizedExtremeValue::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative() << std::endl; fullprint << "mu=" << distribution.getMu() << std::endl; fullprint << "sigma=" << distribution.getSigma() << std::endl; fullprint << "xi=" << distribution.getXi() << std::endl; fullprint << "Actual distribution=" << distribution.getActualDistribution() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralizedExtremeValue_std.expout000066400000000000000000000366761307543307100244150ustar00rootroot00000000000000Testing class GeneralizedExtremeValue checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=GeneralizedExtremeValue name=GeneralizedExtremeValue mu=2 sigma=1.5 xi=-0.5 actual distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Weibull name=Weibull dimension=1 alpha=3 beta=2 gamma=-5] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[-1] constant=class=Point name=Unnamed dimension=1 values=[0] streamObject(const T & anObject) class=GeneralizedExtremeValue name=GeneralizedExtremeValue mu=2 sigma=1.5 xi=-0.5 actual distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Weibull name=Weibull dimension=1 alpha=3 beta=2 gamma=-5] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[-1] constant=class=Point name=Unnamed dimension=1 values=[0] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=GeneralizedExtremeValue name=GeneralizedExtremeValue mu=2 sigma=1.5 xi=-0.15 actual distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Weibull name=Weibull dimension=1 alpha=10 beta=6.66667 gamma=-12] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[-1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.00915] oneSample first=class=Point name=Unnamed dimension=1 values=[0.788048] last=class=Point name=Unnamed dimension=1 values=[2.8505] mean=class=Point name=Unnamed dimension=1 values=[2.65453] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.73151] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0.108952] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.108952] log pdf=-1.75315 pdf =0.173227 pdf (FD)=0.173227 cdf=0.151408 ccdf=0.848592 survival=0.848592 Inverse survival=class=Point name=Unnamed dimension=1 values=[5.59515] Survival(inverse survival)=0.05 pdf gradient =class=Point name=Unnamed dimension=0 values=[] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.108952,-0.0428497,0.0749046] cdf gradient =class=Point name=Unnamed dimension=0 values=[] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.173227,0.115485,-0.0559084] quantile=class=Point name=Unnamed dimension=1 values=[5.59515] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.359967] upper bound=class=Point name=Unnamed dimension=1 values=[5.97545] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15)) level=3.31111 beta=0.0364758 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.162817] upper bound=class=Point name=Unnamed dimension=1 values=[-0.162817] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-4.83649] upper bound=class=Point name=Unnamed dimension=1 values=[5.59515] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[5.59515] upper bound=class=Point name=Unnamed dimension=1 values=[12] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[2.66959] standard deviation=class=Point name=Unnamed dimension=1 values=[1.64028] skewness=class=Point name=Unnamed dimension=1 values=[0.435743] kurtosis=class=Point name=Unnamed dimension=1 values=[3.13766] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.69053] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mu : 2, sigma : 1.5, xi : -0.15]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[2.66959] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[9.81725] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[42.4963] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[209.086] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1135.1] Standard representative=true mu=2 sigma=1.5 xi=-0.15 Actual distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Weibull name=Weibull dimension=1 alpha=10 beta=6.66667 gamma=-12] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[-1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution class=GeneralizedExtremeValue name=GeneralizedExtremeValue mu=2 sigma=1.5 xi=0 actual distribution=class=Gumbel name=Gumbel dimension=1 alpha=0.666667 beta=2 Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.37981] oneSample first=class=Point name=Unnamed dimension=1 values=[2.81173] last=class=Point name=Unnamed dimension=1 values=[1.71953] mean=class=Point name=Unnamed dimension=1 values=[2.87466] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.75194] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0.116989] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.116989] log pdf=-1.68653 pdf =0.18516 pdf (FD)=0.18516 cdf=0.142597 ccdf=0.857403 survival=0.857403 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.354217] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[0.102258,-0.116989] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.116989,-0.0454479,0.0844441] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.277741,-0.18516] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.18516,0.12344,-0.0617202] quantile=class=Point name=Unnamed dimension=1 values=[6.45529] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.341999] upper bound=class=Point name=Unnamed dimension=1 values=[6.74221] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0)) level=3.6093 beta=0.0270708 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0420159] upper bound=class=Point name=Unnamed dimension=1 values=[7.51437] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-3.20963] upper bound=class=Point name=Unnamed dimension=1 values=[6.45529] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.354217] upper bound=class=Point name=Unnamed dimension=1 values=[50.3543] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[2.86582] standard deviation=class=Point name=Unnamed dimension=1 values=[1.92382] skewness=class=Point name=Unnamed dimension=1 values=[1.13955] kurtosis=class=Point name=Unnamed dimension=1 values=[5.4] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.7011] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mu : 2, sigma : 1.5, xi : 0]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.577216] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.97811] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[5.44487] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[23.5615] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[117.839] Standard representative=true mu=2 sigma=1.5 xi=0 Actual distribution=class=Gumbel name=Gumbel dimension=1 alpha=0.666667 beta=2 Distribution class=GeneralizedExtremeValue name=GeneralizedExtremeValue mu=2 sigma=1.5 xi=0.15 actual distribution=class=Frechet name=Frechet dimension=1 alpha=6.66667 beta=10 gamma=-8 Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.16249] oneSample first=class=Point name=Unnamed dimension=1 values=[0.614999] last=class=Point name=Unnamed dimension=1 values=[6.02257] mean=class=Point name=Unnamed dimension=1 values=[3.12347] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.04599] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0.127801] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.127801] log pdf=-1.6163 pdf =0.198632 pdf (FD)=0.198632 cdf=0.132842 ccdf=0.867158 survival=0.867158 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.482513] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=3 values=[0.00847762,-0.134884,-0.127801] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.127801,-0.0472207,0.095424] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0282528,-0.178769,-0.198632] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.198632,0.132422,-0.0685353] quantile=class=Point name=Unnamed dimension=1 values=[7.61316] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.261956] upper bound=class=Point name=Unnamed dimension=1 values=[7.81353] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15)) level=3.47643e+56 beta=0 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.22178] upper bound=class=Point name=Unnamed dimension=1 values=[9.35746] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-8] upper bound=class=Point name=Unnamed dimension=1 values=[7.61316] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.482513] upper bound=class=Point name=Unnamed dimension=1 values=[1251.08] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[3.12484] standard deviation=class=Point name=Unnamed dimension=1 values=[2.45836] skewness=class=Point name=Unnamed dimension=1 values=[2.53025] kurtosis=class=Point name=Unnamed dimension=1 values=[19.2742] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.04353] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mu : 2, sigma : 1.5, xi : 0.15]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.11248] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.29806] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1.61612] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[2.21815] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[3.62435] Standard representative=true mu=2 sigma=1.5 xi=0.15 Actual distribution=class=Frechet name=Frechet dimension=1 alpha=6.66667 beta=10 gamma=-8 openturns-1.9/lib/test/t_GeneralizedParetoFactory_std.cxx000066400000000000000000000056021307543307100240300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GeneralizedPareto for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); PlatformInfo::SetNumericalPrecision(4); try { Point xi(3); xi[0] = -0.75; xi[1] = 0.0; xi[2] = 0.75; UnsignedInteger size = 10000; CovarianceMatrix covariance; GeneralizedParetoFactory factory; GeneralizedPareto distribution; for (UnsignedInteger i = 0; i < 3; ++i) { distribution = GeneralizedPareto(2.5, xi[i]); Sample sample(distribution.getSample(size)); // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; GeneralizedPareto estimatedGeneralizedPareto(factory.buildAsGeneralizedPareto(sample)); fullprint << "GeneralizedPareto =" << distribution << std::endl; fullprint << "Estimated generalizedPareto=" << estimatedGeneralizedPareto << std::endl; // fullprint << "Covariance=" << covariance << std::endl; } Distribution estimatedDistribution(factory.build()); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; GeneralizedPareto estimatedGeneralizedPareto(factory.buildAsGeneralizedPareto()); fullprint << "Default generalizedPareto=" << estimatedGeneralizedPareto << std::endl; estimatedGeneralizedPareto = factory.buildAsGeneralizedPareto(distribution.getParameter()); fullprint << "GeneralizedPareto from parameters=" << estimatedGeneralizedPareto << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralizedParetoFactory_std.expout000066400000000000000000000031761307543307100245560ustar00rootroot00000000000000Distribution =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=-0.75 Estimated distribution=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.431 xi=-0.7464 GeneralizedPareto =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=-0.75 Estimated generalizedPareto=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.431 xi=-0.7464 Distribution =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0 Estimated distribution=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.498 xi=0.01582 GeneralizedPareto =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0 Estimated generalizedPareto=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.498 xi=0.01582 Distribution =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0.75 Estimated distribution=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.592 xi=0.7697 GeneralizedPareto =class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0.75 Estimated generalizedPareto=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.592 xi=0.7697 Default distribution=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1 xi=0 Distribution from parameters=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0.75 Default generalizedPareto=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1 xi=0 GeneralizedPareto from parameters=class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=2.5 xi=0.75 openturns-1.9/lib/test/t_GeneralizedPareto_std.cxx000066400000000000000000000215211307543307100224760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GeneralizedPareto for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate distributions with different shape parameters Point xiValues(3); xiValues[0] = -0.2; xiValues[1] = 0.0; xiValues[2] = 0.2; for (UnsignedInteger n = 0; n < 3; ++n) { GeneralizedPareto distribution(1.5, xiValues[n]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { RandomGenerator::SetSeed(0); fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (GeneralizedPareto(distribution.getSigma() + eps, distribution.getXi()).computePDF(point) - GeneralizedPareto(distribution.getSigma() - eps, distribution.getXi()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (GeneralizedPareto(distribution.getSigma(), distribution.getXi() + eps).computePDF(point) - GeneralizedPareto(distribution.getSigma(), distribution.getXi() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (GeneralizedPareto(distribution.getSigma() + eps, distribution.getXi()).computeCDF(point) - GeneralizedPareto(distribution.getSigma() - eps, distribution.getXi()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (GeneralizedPareto(distribution.getSigma(), distribution.getXi() + eps).computeCDF(point) - GeneralizedPareto(distribution.getSigma(), distribution.getXi() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; GeneralizedPareto::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) { try { Point value(distribution.getStandardMoment(i)); fullprint << "standard moment n=" << i << ", value=" << value << std::endl; } catch (NotDefinedException & ex) { fullprint << ex << std::endl; } } fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; Scalar sigma = distribution.getSigma(); fullprint << "sigma=" << sigma << std::endl; Scalar xi = distribution.getXi(); fullprint << "xi=" << xi << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeneralizedPareto_std.expout000066400000000000000000000327611307543307100232300ustar00rootroot00000000000000Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=-0.2 Distribution GeneralizedPareto(sigma = 1.5, xi=-0.2) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.662264] oneSample first=class=Point name=Unnamed dimension=1 values=[0.184665] last=class=Point name=Unnamed dimension=1 values=[1.18051] mean=class=Point name=Unnamed dimension=1 values=[1.24428] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.12783] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.231453] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.231453] log pdf=-0.977868 pdf =0.376112 pdf (FD)=0.376112 cdf=0.511054 ccdf=0.488946 survival=0.488946 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0765466] Survival(inverse survival)=0.95 characteristic function=(0.322373,0.527748) log characteristic function=(-0.480588,1.02244) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.096439,-0.188281] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.096439,-0.188281] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.250741,-0.131347] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.250741,-0.131347] quantile=class=Point name=Unnamed dimension=1 values=[3.3804] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[3.3804] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=-0.2)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedPareto(sigma = 1.5, xi=-0.2)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=-0.2)) level=2.80205 beta=0.0606855 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0378807] upper bound=class=Point name=Unnamed dimension=1 values=[3.91368] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[3.3804] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0765466] upper bound=class=Point name=Unnamed dimension=1 values=[7.5] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.25] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.11607] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[sigma : 1.5, xi : -0.2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.833333] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.19048] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[2.23214] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[4.96032] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[12.4008] Standard representative=GeneralizedPareto(sigma = 1, xi=-0.2) standard deviation=class=Point name=Unnamed dimension=1 values=[1.05644] skewness=class=Point name=Unnamed dimension=1 values=[1.18322] kurtosis=class=Point name=Unnamed dimension=1 values=[4.2] sigma=1.5 xi=-0.2 Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=0 Distribution GeneralizedPareto(sigma = 1.5, xi=0) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.115607] oneSample first=class=Point name=Unnamed dimension=1 values=[2.83459] last=class=Point name=Unnamed dimension=1 values=[5.88096] mean=class=Point name=Unnamed dimension=1 values=[1.4961] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.26942] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.114093] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.228185] log pdf=-1.07213 pdf =0.342278 pdf (FD)=0.342278 cdf=0.486583 ccdf=0.513417 survival=0.513417 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0769399] Survival(inverse survival)=0.95 characteristic function=(0.5,0.5) log characteristic function=(-0.346574,0.785398) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0760618,-0.152124] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0760618,-0.152124] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.228185,-0.114093] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.228185,-0.114093] quantile=class=Point name=Unnamed dimension=1 values=[4.4936] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[4.4936] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedPareto(sigma = 1.5, xi=0)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0)) level=3.4012 beta=0.0333333 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0379767] upper bound=class=Point name=Unnamed dimension=1 values=[5.53332] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[4.4936] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0769399] upper bound=class=Point name=Unnamed dimension=1 values=[54.0655] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.5] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.25] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[sigma : 1.5, xi : 0]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[6] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[24] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[120] Standard representative=GeneralizedPareto(sigma = 1, xi=0) standard deviation=class=Point name=Unnamed dimension=1 values=[1.5] skewness=class=Point name=Unnamed dimension=1 values=[2] kurtosis=class=Point name=Unnamed dimension=1 values=[9] sigma=1.5 xi=0 Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=0.2 Distribution GeneralizedPareto(sigma = 1.5, xi=0.2) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.116502] oneSample first=class=Point name=Unnamed dimension=1 values=[3.44463] last=class=Point name=Unnamed dimension=1 values=[8.92872] mean=class=Point name=Unnamed dimension=1 values=[1.87267] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.01684] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.222073] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.222073] log pdf=-1.15644 pdf =0.314603 pdf (FD)=0.314603 cdf=0.465175 ccdf=0.534825 survival=0.534825 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0773359] Survival(inverse survival)=0.95 characteristic function=(0.298705,0.418886) log characteristic function=(-0.664599,0.951337) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0616868,-0.125946] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0616868,-0.125946] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.209735,-0.100495] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.209735,-0.100495] quantile=class=Point name=Unnamed dimension=1 values=[6.15423] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[6.15423] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0.2)) gradientImplementation=MinimumVolumeLevelSetGradient(GeneralizedPareto(sigma = 1.5, xi=0.2)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0.2)) level=4.00034 beta=0.0183093 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.038073] upper bound=class=Point name=Unnamed dimension=1 values=[8.18459] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[6.15423] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0773359] upper bound=class=Point name=Unnamed dimension=1 values=[10126.3] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.875] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.85938] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[sigma : 1.5, xi : 0.2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.25] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[4.16667] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[31.25] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[625] NotDefinedException : Error: the standard moments are defined up to order 5 and n=5 Standard representative=GeneralizedPareto(sigma = 1, xi=0.2) standard deviation=class=Point name=Unnamed dimension=1 values=[2.42061] skewness=class=Point name=Unnamed dimension=1 values=[4.64758] kurtosis=class=Point name=Unnamed dimension=1 values=[73.8] sigma=1.5 xi=0.2 openturns-1.9/lib/test/t_GeometricFactory_std.cxx000066400000000000000000000047641307543307100223520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Geometric for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Geometric distribution(0.7); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); GeometricFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Geometric estimatedGeometric(factory.buildAsGeometric(sample)); fullprint << "Geometric =" << distribution << std::endl; fullprint << "Estimated geometric=" << estimatedGeometric << std::endl; estimatedGeometric = factory.buildAsGeometric(); fullprint << "Default geometric=" << estimatedGeometric << std::endl; estimatedGeometric = factory.buildAsGeometric(distribution.getParameter()); fullprint << "Geometric from parameters=" << estimatedGeometric << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GeometricFactory_std.expout000066400000000000000000000011061307543307100230570ustar00rootroot00000000000000Distribution =class=Geometric name=Geometric dimension=1 p=0.7 Estimated distribution=class=Geometric name=Geometric dimension=1 p=0.698861 Default distribution=class=Geometric name=Geometric dimension=1 p=0.5 Distribution from parameters=class=Geometric name=Geometric dimension=1 p=0.7 Geometric =class=Geometric name=Geometric dimension=1 p=0.7 Estimated geometric=class=Geometric name=Geometric dimension=1 p=0.698861 Default geometric=class=Geometric name=Geometric dimension=1 p=0.5 Geometric from parameters=class=Geometric name=Geometric dimension=1 p=0.7 openturns-1.9/lib/test/t_Geometric_std.cxx000066400000000000000000000145621307543307100210170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Geometric for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Geometric { public: TestObject() : Geometric(0.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Geometric distribution(0.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 3.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(1); PDFgrFD[0] = (Geometric(distribution.getP() + eps).computePDF(point) - Geometric(distribution.getP() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (Geometric(distribution.getP() + eps).computeCDF(point) - Geometric(distribution.getP() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; Geometric::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Geometric_std.expout000066400000000000000000000054661307543307100215440ustar00rootroot00000000000000Testing class Geometric checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Geometric name=Geometric dimension=1 p=0.7 streamObject(const T & anObject) class=Geometric name=Geometric dimension=1 p=0.7 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Geometric name=Geometric dimension=1 p=0.7 Distribution Geometric(p = 0.7) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[1] oneSample first=class=Point name=Unnamed dimension=1 values=[1] last=class=Point name=Unnamed dimension=1 values=[1] mean=class=Point name=Unnamed dimension=1 values=[1.4309] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.618887] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Point= class=Point name=Unnamed dimension=1 values=[3] log pdf=-2.76462 pdf =0.063 pdf (FD)=0.063 cdf=0.973 ccdf=0.027 survival=0.027 characteristic function=(-0.536222,0.0586605) log characteristic function=(-0.61726,3.03263) generating function=(0.101124,0.561798) log generating function=(-0.56067,1.3927) pdf gradient =class=Point name=Unnamed dimension=1 values=[-0.33] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.33] cdf gradient =class=Point name=Unnamed dimension=1 values=[0.27] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.27] quantile=class=Point name=Unnamed dimension=1 values=[3] cdf(quantile)=0.973 mean=class=Point name=Unnamed dimension=1 values=[1.42857] standard deviation=class=Point name=Unnamed dimension=1 values=[0.782461] skewness=class=Point name=Unnamed dimension=1 values=[2.37346] kurtosis=class=Point name=Unnamed dimension=1 values=[10.6333] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.612245] parameters=[[p : 0.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.42857] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2.65306] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[6.67638] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[22.1449] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[91.9266] Standard representative=Geometric(p = 0.7) openturns-1.9/lib/test/t_GramSchmidtAlgorithm_std.cxx000066400000000000000000000035241307543307100231460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GramSchmidtAlgorithm for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger iMax = 5; Triangular distribution(-1.0, 0.3, 1.0); GramSchmidtAlgorithm algo(distribution); fullprint << "algo=" << algo << std::endl; for (UnsignedInteger i = 0; i < iMax; ++i) fullprint << distribution.getClassName() << " polynomial(" << i << ")=" << clean(algo.getRecurrenceCoefficients(i)).__str__() << std::endl; algo.setReferenceFamily(LegendreFactory()); fullprint << "Reference family=" << algo.getReferenceFamily() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GramSchmidtAlgorithm_std.expout000066400000000000000000000010131307543307100236570ustar00rootroot00000000000000algo=class=GramSchmidtAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 Triangular polynomial(0)=[2.41355,-0.241355,0] Triangular polynomial(1)=[2.09874,0.0321942,-0.869564] Triangular polynomial(2)=[2.04635,-0.0276334,-0.975039] Triangular polynomial(3)=[2.04338,0.00798025,-0.99855] Triangular polynomial(4)=[2.01498,-0.00254217,-0.986101] Reference family=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 openturns-1.9/lib/test/t_Graph_export.cxx000066400000000000000000000040221307543307100206570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of Graph class for EDF case number 1 * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger maxPoint = 101; Scalar xMin = -2.0 * M_PI; Scalar xMax = 2.0 * M_PI; Sample data(maxPoint, 2); for (UnsignedInteger i = 0; i < maxPoint; ++i) { Scalar x = xMin + (xMax - xMin) * i / (maxPoint - 1.0); data[i][0] = x; data[i][1] = sin(x); } Graph sinGraph("Sin function", "x", "y", true, "topright"); sinGraph.add(Curve(data, "red", "solid", 2, "sin")); // Test export to all formats sinGraph.draw("sinGraph_ALL", 640, 480, GraphImplementation::ALL); // Test export to PNG format sinGraph.draw("sinGraph_PNG", 640, 480, GraphImplementation::PNG); // Test export to EPS format sinGraph.draw("sinGraph_EPS_PDF", 640, 480, GraphImplementation::EPS | GraphImplementation::PDF); // Test export to FIG format sinGraph.draw("sinGraph_FIG", 640, 480, GraphImplementation::FIG); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Graph_export.expout000066400000000000000000000000001307543307100213710ustar00rootroot00000000000000openturns-1.9/lib/test/t_Graph_mix.cxx000066400000000000000000000076271307543307100201510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of Graph class for EDF case number 9 * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; Point meanPoint(dim, 1.0); meanPoint[0] = 12.0; meanPoint[1] = 5.0; Point sigma(dim, 1.0); sigma[0] = 3.0; sigma[1] = 1.0; CorrelationMatrix R = IdentityMatrix(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.75; } Normal distribution(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 200; Sample sample(distribution.getSample( size )); Sample tmp(2, Point(2)); tmp[0][0] = sample.getMin()[0]; tmp[0][1] = meanPoint[1] - sigma[1] / sigma[0] * (meanPoint[0] - tmp[0][0]); tmp[1][0] = sample.getMax()[0]; tmp[1][1] = meanPoint[1] - sigma[1] / sigma[0] * (meanPoint[0] - tmp[1][0]); // Create the cloud Cloud myCloud(sample, "blue", "fsquare", "Normal Cloud"); // Create the line Curve myLine(tmp, "red", "solid", 2, "Line"); Point data(0); Description palette; Description labels; data.add(5665855); labels.add("chirac"); palette.add("blue"); data.add(4804713); labels.add("lepen"); palette.add("white"); data.add(4610113); labels.add("jospin"); palette.add("pink"); data.add(1949170); labels.add("bayrou"); palette.add("yellow"); data.add(1630045); labels.add("laguiller"); palette.add("red"); data.add(1518528); labels.add("chevenement"); palette.add("ivory"); data.add(1495724); labels.add("mamere"); palette.add("green"); data.add(1210562); labels.add("besancenot"); palette.add("orange"); data.add(1204689); labels.add("saint-josse"); palette.add("maroon"); data.add(1113484); labels.add("madelin"); palette.add("violet"); data.add(3295588); labels.add("cumul candidats < 3.5% "); palette.add("purple"); Point centre(2); centre[0] = 7.0; centre[1] = 10.0; // Create the piechart #ifdef WIN32 OT:: // mingw defined a Pie(...) function #endif Pie myPie(data, labels, centre, 4, palette); // Create an empty graph Graph myGraph("Cloud/line/pie", "x1", "x2", true, "topright", 1.0); // Then, draw it myGraph.add(myCloud); myGraph.add(myLine); myGraph.add(myPie); myGraph.draw("Graph_mix_OT.png"); // Test if a drawable can be extracted from a graph to be added to another graph Graph firstGraph("Overall graph", "x", "y", true, "topright"); firstGraph.add(myCloud); Graph secondGraph("temporary graph", "x", "y", true, "topright"); secondGraph.add(myLine); // Extract the drawable from the second graph and add it to the first graph firstGraph.add(secondGraph.getDrawables()[0]); firstGraph.draw("OverallGraph.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Graph_mix.expout000066400000000000000000000000001307543307100206450ustar00rootroot00000000000000openturns-1.9/lib/test/t_GumbelCopulaFactory_std.cxx000066400000000000000000000050461307543307100230050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GumbelCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { GumbelCopula distribution(1.5); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); GumbelCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; GumbelCopula estimatedGumbelCopula(factory.buildAsGumbelCopula(sample)); fullprint << "GumbelCopula =" << distribution << std::endl; fullprint << "Estimated gumbelCopula=" << estimatedGumbelCopula << std::endl; estimatedGumbelCopula = factory.buildAsGumbelCopula(); fullprint << "Default gumbelCopula=" << estimatedGumbelCopula << std::endl; estimatedGumbelCopula = factory.buildAsGumbelCopula(distribution.getParameter()); fullprint << "GumbelCopula from parameters=" << estimatedGumbelCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GumbelCopulaFactory_std.expout000066400000000000000000000012341307543307100235220ustar00rootroot00000000000000Distribution =class=GumbelCopula name=GumbelCopula dimension=2 theta=1.5 Estimated distribution=class=GumbelCopula name=GumbelCopula dimension=2 theta=1.55919 Default distribution=class=GumbelCopula name=GumbelCopula dimension=2 theta=2 Distribution from parameters=class=GumbelCopula name=GumbelCopula dimension=2 theta=1.5 GumbelCopula =class=GumbelCopula name=GumbelCopula dimension=2 theta=1.5 Estimated gumbelCopula=class=GumbelCopula name=GumbelCopula dimension=2 theta=1.55919 Default gumbelCopula=class=GumbelCopula name=GumbelCopula dimension=2 theta=2 GumbelCopula from parameters=class=GumbelCopula name=GumbelCopula dimension=2 theta=1.5 openturns-1.9/lib/test/t_GumbelCopula_std.cxx000066400000000000000000000150651307543307100214570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class GumbelCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; GumbelCopula copula(2.5); copula.setName("a gumbel copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Covariance and correlation UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(4); CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GumbelCopula_std.expout000066400000000000000000000106601307543307100221750ustar00rootroot00000000000000Copula class=GumbelCopula name=a gumbel copula dimension=2 theta=2.5 Copula GumbelCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.659445,0.596689] oneSample=class=Sample name=a gumbel copula implementation=class=SampleImplementation name=a gumbel copula size=10 dimension=2 description=[X0,X1] data=[[0.92546,0.834663],[0.239934,0.114143],[0.705071,0.41781],[0.94214,0.955906],[0.814987,0.721541],[0.254655,0.325386],[0.694987,0.506464],[0.87143,0.917787],[0.191102,0.290004],[0.881289,0.654839]] anotherSample mean=class=Point name=Unnamed dimension=2 values=[0.504187,0.500439] anotherSample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0840685,0.0659466,0.0659466,0.0842036] point= class=Point name=Unnamed dimension=2 values=[0.2,0.2] ddf=class=Point name=Unnamed dimension=2 values=[-2.34991,-2.34991] ddf (FD)=class=Point name=Unnamed dimension=2 values=[-2.34991,-2.34991] pdf=2.2206 cdf=0.119592 Survival =0.719592 Survival (ref)=0.719592 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.0298629,0.0298629] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.591374,0.591374] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0164093,0.0164093] upper bound=class=Point name=Unnamed dimension=2 values=[0.983591,0.983591] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.967181 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(GumbelCopula(theta = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(GumbelCopula(theta = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(GumbelCopula(theta = 2.5)) level=0.936314 beta=0.39207 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0164093,0.0164093] upper bound=class=Point name=Unnamed dimension=2 values=[0.983591,0.983591] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.967181 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.961873,0.961873] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.961873 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0298629,0.0298629] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.970137 covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.08333,0.06566,0.06566,0.08333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.7879,0.7879,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.7879,0.7879,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.6,0.6,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.305358] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.109287] indices=[1,0] margins=class=GumbelCopula name=a gumbel copula dimension=2 theta=2.5 margins PDF=2.03487 margins CDF=0.160538 margins quantile=class=Point name=Unnamed dimension=2 values=[0.961873,0.961873] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.153303,0.00866159] openturns-1.9/lib/test/t_GumbelFactory_std.cxx000066400000000000000000000047051307543307100216420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Gumbel for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Gumbel distribution(2., 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); GumbelFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Gumbel estimatedGumbel(factory.buildAsGumbel(sample)); fullprint << "Gumbel =" << distribution << std::endl; fullprint << "Estimated gumbel=" << estimatedGumbel << std::endl; estimatedGumbel = factory.buildAsGumbel(); fullprint << "Default gumbel=" << estimatedGumbel << std::endl; estimatedGumbel = factory.buildAsGumbel(distribution.getParameter()); fullprint << "Gumbel from parameters=" << estimatedGumbel << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_GumbelFactory_std.expout000066400000000000000000000011501307543307100223530ustar00rootroot00000000000000Distribution =class=Gumbel name=Gumbel dimension=1 alpha=2 beta=2.5 Estimated distribution=class=Gumbel name=Gumbel dimension=1 alpha=1.98682 beta=2.50626 Default distribution=class=Gumbel name=Gumbel dimension=1 alpha=1 beta=0 Distribution from parameters=class=Gumbel name=Gumbel dimension=1 alpha=2 beta=2.5 Gumbel =class=Gumbel name=Gumbel dimension=1 alpha=2 beta=2.5 Estimated gumbel=class=Gumbel name=Gumbel dimension=1 alpha=1.98682 beta=2.50626 Default gumbel=class=Gumbel name=Gumbel dimension=1 alpha=1 beta=0 Gumbel from parameters=class=Gumbel name=Gumbel dimension=1 alpha=2 beta=2.5 openturns-1.9/lib/test/t_Gumbel_std.cxx000066400000000000000000000174601307543307100203140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Gumbel for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Gumbel { public: TestObject() : Gumbel(2.0, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Gumbel distribution(2.0, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Gumbel(distribution.getAlpha() + eps, distribution.getBeta()).computePDF(point) - Gumbel(distribution.getAlpha() - eps, distribution.getBeta()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Gumbel(distribution.getAlpha(), distribution.getBeta() + eps).computePDF(point) - Gumbel(distribution.getAlpha(), distribution.getBeta() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Gumbel(distribution.getAlpha() + eps, distribution.getBeta()).computeCDF(point) - Gumbel(distribution.getAlpha() - eps, distribution.getBeta()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Gumbel(distribution.getAlpha(), distribution.getBeta() + eps).computeCDF(point) - Gumbel(distribution.getAlpha(), distribution.getBeta() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Gumbel::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Gumbel_std.expout000066400000000000000000000113371307543307100210330ustar00rootroot00000000000000Testing class Gumbel checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 streamObject(const T & anObject) class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 Distribution Gumbel(alpha = 2, beta = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[-0.114155] oneSample first=class=Point name=Unnamed dimension=1 values=[0.54112] last=class=Point name=Unnamed dimension=1 values=[-0.422444] mean=class=Point name=Unnamed dimension=1 values=[-0.20325] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.416712] Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.180043] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.180043] log pdf=-2.35664 pdf =0.094738 pdf (FD)=0.094738 cdf=0.951432 ccdf=0.048568 survival=0.048568 Inverse survival=class=Point name=Unnamed dimension=1 values=[-1.04859] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0876629,0.180043] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0876629,0.180043] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.0710535,-0.094738] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0710535,-0.094738] characteristic function=(0.799265,-0.209152) log characteristic function=(-0.190945,-0.255942) quantile=class=Point name=Unnamed dimension=1 values=[0.985098] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.28067] upper bound=class=Point name=Unnamed dimension=1 values=[1.08074] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Gumbel(alpha = 2, beta = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Gumbel(alpha = 2, beta = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Gumbel(alpha = 2, beta = -0.5)) level=2.51069 beta=0.0812123 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.15266] upper bound=class=Point name=Unnamed dimension=1 values=[1.33812] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.23654] upper bound=class=Point name=Unnamed dimension=1 values=[0.985098] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.04859] upper bound=class=Point name=Unnamed dimension=1 values=[15.6181] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[-0.211392] standard deviation=class=Point name=Unnamed dimension=1 values=[0.641275] skewness=class=Point name=Unnamed dimension=1 values=[1.13955] kurtosis=class=Point name=Unnamed dimension=1 values=[5.4] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.411234] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[alpha : 2, beta : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.577216] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.97811] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[5.44487] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[23.5615] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[117.839] Standard representative=Gumbel(alpha = 1, beta = 0) openturns-1.9/lib/test/t_HMatrix_LDLt.cxx000066400000000000000000000070651307543307100204620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; class TestHMatrixRealAssemblyFunction : public HMatrixRealAssemblyFunction { const Sample& vertices_; const Scalar scaling_; public: TestHMatrixRealAssemblyFunction(const Sample& vertices, Scalar scaling) : vertices_(vertices) , scaling_(scaling) {} inline Scalar operator() (Point pt1, Point pt2) const { Point difference(pt1 - pt2); return exp(-std::abs(difference.norm()) / scaling_); } Scalar operator() (UnsignedInteger i, UnsignedInteger j) const { return operator()(vertices_[i], vertices_[j]); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsBool("HMatrix-ForceSequential", true); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 10); HMatrixFactory hmatrixFactory; if (!hmatrixFactory.IsAvailable()) throw NotYetImplementedException(HERE); const UnsignedInteger n = 30; Indices indices(0); indices.add(n); indices.add(n); const IntervalMesher intervalMesher(indices); const Point lowerBound(2, 0.0); const Point upperBound(2, 1.0); const Mesh mesh2D(intervalMesher.build(Interval(lowerBound, upperBound))); const Sample vertices2D(mesh2D.getVertices()); Sample vertices(vertices2D.getSize(), 3); for (UnsignedInteger i = 0; i < vertices2D.getSize(); ++i) { vertices[i][0] = vertices2D[i][0]; vertices[i][1] = vertices2D[i][1]; } TestHMatrixRealAssemblyFunction simpleAssembly(vertices, 0.1); // Symmetric HMatrix HMatrix hmat(hmatrixFactory.build(vertices, 1, true)); hmat.assemble(simpleAssembly, 'L'); hmat.factorize("LDLt"); Point mean(vertices.computeMean()); Point rhs(vertices.getSize()); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { rhs[i] = simpleAssembly(vertices[i], mean); } Point rhsCopy(rhs); Scalar rhsCopyNorm = rhsCopy.norm(); Point result(hmat.solve(rhs)); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { for (UnsignedInteger j = 0; j < vertices.getSize(); ++j) { rhsCopy[i] -= simpleAssembly(i, j) * result[j]; } } Scalar diffNorm = rhsCopy.norm(); Scalar threshold = 1.e-4; fullprint << "|| M X - b || / || b ||" << ((diffNorm < threshold * rhsCopyNorm) ? " < " : " > ") << threshold << std::endl; } catch (NotYetImplementedException & ex) { std::cerr << "Compiled without HMat" << std::endl; return ExitCode::Success; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HMatrix_LDLt.expout000077500000000000000000000000411307543307100211720ustar00rootroot00000000000000|| M X - b || / || b || < 0.0001 openturns-1.9/lib/test/t_HMatrix_LLt.cxx000066400000000000000000000065771307543307100203650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; class TestHMatrixRealAssemblyFunction : public HMatrixRealAssemblyFunction { const Sample& vertices_; const Scalar scaling_; public: TestHMatrixRealAssemblyFunction(const Sample& vertices, Scalar scaling) : vertices_(vertices) , scaling_(scaling) {} inline Scalar operator() (Point pt1, Point pt2) const { Point difference(pt1 - pt2); return exp(-std::abs(difference.norm()) / scaling_); } Scalar operator() (UnsignedInteger i, UnsignedInteger j) const { return operator()(vertices_[i], vertices_[j]); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsBool("HMatrix-ForceSequential", true); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 10); HMatrixFactory hmatrixFactory; if (!hmatrixFactory.IsAvailable()) throw NotYetImplementedException(HERE); const UnsignedInteger n = 30; Indices indices(0); indices.add(n); indices.add(n); const IntervalMesher intervalMesher(indices); const Point lowerBound(2, 0.0); const Point upperBound(2, 1.0); const Mesh mesh2D(intervalMesher.build(Interval(lowerBound, upperBound))); const Sample vertices2D(mesh2D.getVertices()); Sample vertices(vertices2D.getSize(), 3); for (UnsignedInteger i = 0; i < vertices2D.getSize(); ++i) { vertices[i][0] = vertices2D[i][0]; vertices[i][1] = vertices2D[i][1]; } TestHMatrixRealAssemblyFunction simpleAssembly(vertices, 0.1); // Symmetric HMatrix HMatrix hmat(hmatrixFactory.build(vertices, 1, true)); hmat.assemble(simpleAssembly, 'L'); HMatrix hmatRef(hmat); const Scalar refNorm = hmatRef.norm(); hmat.factorize("LLt"); hmatRef.gemm('N', 'T', -1., hmat, hmat, 1.); Scalar threshold = 1.e-10; fullprint << "|| M - L Lt || / || M ||" << ((hmatRef.norm() < threshold * refNorm) ? " < " : " > ") << threshold << std::endl; const Scalar normL(hmat.norm()); const Scalar alpha(0.1); hmat.scale(alpha); fullprint << "|| L || - 10.0 * || 0.1 * L || " << ((std::abs(normL - hmat.norm() / alpha) < threshold) ? " < " : " > ") << threshold << std::endl; } catch (NotYetImplementedException & ex) { std::cerr << "Compiled without HMat" << std::endl; return ExitCode::Success; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HMatrix_LLt.expout000077500000000000000000000001111307543307100210640ustar00rootroot00000000000000|| M - L Lt || / || M || < 1e-10 || L || - 10.0 * || 0.1 * L || < 1e-10 openturns-1.9/lib/test/t_HMatrix_LU.cxx000066400000000000000000000070221307543307100201740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; class TestHMatrixRealAssemblyFunction : public HMatrixRealAssemblyFunction { const Sample& vertices_; const Scalar scaling_; public: TestHMatrixRealAssemblyFunction(const Sample& vertices, Scalar scaling) : vertices_(vertices) , scaling_(scaling) {} inline Scalar operator() (Point pt1, Point pt2) const { Point difference(pt1 - pt2); return exp(-std::abs(difference.norm()) / scaling_); } Scalar operator() (UnsignedInteger i, UnsignedInteger j) const { return operator()(vertices_[i], vertices_[j]); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsBool("HMatrix-ForceSequential", true); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 10); HMatrixFactory hmatrixFactory; if (!hmatrixFactory.IsAvailable()) throw NotYetImplementedException(HERE); HMatrixParameters hmatrixParameters; hmatrixParameters.setAssemblyEpsilon(1.e-6); hmatrixParameters.setRecompressionEpsilon(1.e-6); const UnsignedInteger n = 30; Indices indices(0); indices.add(n); indices.add(n); const IntervalMesher intervalMesher(indices); const Point lowerBound(2, 0.0); const Point upperBound(2, 1.0); const Mesh mesh2D(intervalMesher.build(Interval(lowerBound, upperBound))); const Sample vertices(mesh2D.getVertices()); TestHMatrixRealAssemblyFunction simpleAssembly(vertices, 10.0); // Non-symmetric HMatrix HMatrix hmat(hmatrixFactory.build(vertices, 1, false, hmatrixParameters)); hmat.assemble(simpleAssembly, 'N'); hmat.factorize("LU"); Point mean(vertices.computeMean()); Point rhs(vertices.getSize()); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { rhs[i] = simpleAssembly(vertices[i], mean); } Point rhsCopy(rhs); Scalar rhsCopyNorm = rhsCopy.norm(); Point result(hmat.solve(rhs)); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { for (UnsignedInteger j = 0; j < vertices.getSize(); ++j) { rhsCopy[i] -= simpleAssembly(i, j) * result[j]; } } Scalar diffNorm = rhsCopy.norm(); Scalar threshold = 1.e-4; fullprint << "|| M X - b || / || b ||" << ((diffNorm < threshold * rhsCopyNorm) ? " < " : " > ") << threshold << std::endl; } catch (NotYetImplementedException & ex) { std::cerr << "Compiled without HMat" << std::endl; return ExitCode::Success; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HMatrix_LU.expout000077500000000000000000000000411307543307100207130ustar00rootroot00000000000000|| M X - b || / || b || < 0.0001 openturns-1.9/lib/test/t_HMatrix_block_LLt.cxx000066400000000000000000000066141307543307100215270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; class TestHMatrixTensorRealAssemblyFunction : public HMatrixTensorRealAssemblyFunction { private: const CovarianceModel & covarianceModel_; const Sample & vertices_; public: TestHMatrixTensorRealAssemblyFunction(const CovarianceModel & covarianceModel, const Sample & vertices) : HMatrixTensorRealAssemblyFunction(covarianceModel.getDimension()) , covarianceModel_(covarianceModel) , vertices_(vertices) {} void compute(UnsignedInteger i, UnsignedInteger j, Matrix* result) const { CovarianceMatrix localResult(covarianceModel_( vertices_[i] - vertices_[j] )); memcpy( &result->getImplementation()->operator[](0), &localResult.getImplementation()->operator[](0), dimension_ * dimension_ * sizeof(Scalar) ); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsBool("HMatrix-ForceSequential", true); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 10); HMatrixFactory hmatrixFactory; if (!hmatrixFactory.IsAvailable()) throw NotYetImplementedException(HERE); const UnsignedInteger n = 20; Indices indices(0); indices.add(n); indices.add(n); const IntervalMesher intervalMesher(indices); const Point lowerBound(2, 0.0); const Point upperBound(2, 1.0); const Mesh mesh2D(intervalMesher.build(Interval(lowerBound, upperBound))); const Sample vertices(mesh2D.getVertices()); Point xMin(vertices.getMin()); Point xMax(vertices.getMax()); Point scale(2, 0.1); CovarianceModel covarianceModel(ExponentialModel(scale, Point(2, 1.0))); TestHMatrixTensorRealAssemblyFunction blockAssembly(covarianceModel, vertices); // Non-symmetric HMatrix HMatrix hmat(hmatrixFactory.build(vertices, covarianceModel.getDimension(), true)); hmat.assemble(blockAssembly, 'L'); HMatrix hmatRef(hmat); hmatRef.assemble(blockAssembly, 'L'); Scalar refNorm = hmatRef.norm(); hmat.factorize("LLt"); hmatRef.gemm('N', 'T', -1., hmat, hmat, 1.); Scalar threshold = 1.e-10; fullprint << "|| M - L Lt || / || M ||" << ((hmatRef.norm() < threshold * refNorm) ? " < " : " > ") << threshold << std::endl; } catch (NotYetImplementedException & ex) { std::cerr << "Compiled without HMat" << std::endl; return ExitCode::Success; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HMatrix_block_LLt.expout000066400000000000000000000000411307543307100222350ustar00rootroot00000000000000|| M - L Lt || / || M || < 1e-10 openturns-1.9/lib/test/t_HMatrix_block_LU.cxx000066400000000000000000000110111307543307100213370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HMatrixImplementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; class TestHMatrixTensorRealAssemblyFunction : public HMatrixTensorRealAssemblyFunction { private: const CovarianceModel & covarianceModel_; const Sample & vertices_; public: TestHMatrixTensorRealAssemblyFunction(const CovarianceModel & covarianceModel, const Sample & vertices) : HMatrixTensorRealAssemblyFunction(covarianceModel.getDimension()) , covarianceModel_(covarianceModel) , vertices_(vertices) {} void compute(UnsignedInteger i, UnsignedInteger j, Matrix* result) const { CovarianceMatrix localResult(covarianceModel_( vertices_[i] - vertices_[j] )); memcpy( &result->getImplementation()->operator[](0), &localResult.getImplementation()->operator[](0), dimension_ * dimension_ * sizeof(Scalar) ); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsBool("HMatrix-ForceSequential", true); ResourceMap::SetAsUnsignedInteger("HMatrix-MaxLeafSize", 10); HMatrixFactory hmatrixFactory; if (!hmatrixFactory.IsAvailable()) throw NotYetImplementedException(HERE); const UnsignedInteger n = 20; Indices indices(0); indices.add(n); indices.add(n); const IntervalMesher intervalMesher(indices); const Point lowerBound(2, 0.0); const Point upperBound(2, 1.0); const Mesh mesh2D(intervalMesher.build(Interval(lowerBound, upperBound))); const Sample vertices2D(mesh2D.getVertices()); Sample vertices(vertices2D.getSize(), 3); for (UnsignedInteger i = 0; i < vertices2D.getSize(); ++i) { vertices[i][0] = vertices2D[i][0]; vertices[i][1] = vertices2D[i][1]; } Point xMin(vertices.getMin()); Point xMax(vertices.getMax()); Point scale(3, 0.1); CovarianceModel covarianceModel(ExponentialModel(scale, Point(3, 1.0))); TestHMatrixTensorRealAssemblyFunction blockAssembly(covarianceModel, vertices); // Non-symmetric HMatrix HMatrix hmat(hmatrixFactory.build(vertices, covarianceModel.getDimension(), false)); hmat.assemble(blockAssembly, 'N'); hmat.factorize("LU"); Point rhs(covarianceModel.getDimension() * vertices.getSize()); CovarianceMatrix local(covarianceModel.getDimension()); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { blockAssembly.compute(i, 0, &local); for (UnsignedInteger dim = 0; dim < covarianceModel.getDimension(); ++dim) { rhs[covarianceModel.getDimension() * i + dim] = local(dim, 0); } } Point rhsCopy(rhs); Scalar rhsCopyNorm = rhsCopy.norm(); Point result(hmat.solve(rhs)); for (UnsignedInteger i = 0; i < vertices.getSize(); ++i) { for (UnsignedInteger j = 0; j < vertices.getSize(); ++j) { blockAssembly.compute(i, j, &local); for (UnsignedInteger dimI = 0; dimI < covarianceModel.getDimension(); ++dimI) { for (UnsignedInteger dimJ = 0; dimJ < covarianceModel.getDimension(); ++dimJ) { rhsCopy[covarianceModel.getDimension() * i + dimI] -= local(dimI, dimJ) * result[covarianceModel.getDimension() * j + dimJ]; } } } } Scalar diffNorm = rhsCopy.norm(); Scalar threshold = 1.e-4; fullprint << "|| M X - b || / || b ||" << ((diffNorm < threshold * rhsCopyNorm) ? " < " : " > ") << threshold << std::endl; } catch (NotYetImplementedException & ex) { std::cerr << "Compiled without HMat" << std::endl; return ExitCode::Success; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HMatrix_block_LU.expout000066400000000000000000000000411307543307100220620ustar00rootroot00000000000000|| M X - b || / || b || < 0.0001 openturns-1.9/lib/test/t_HaltonSequence_std.cxx000066400000000000000000000042521307543307100220120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Halton' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a Halton sequence HaltonSequence sequence(15); fullprint << sequence << std::endl; // Create a numerical sample of the sequence Sample haltonSample(sequence.generate(10)); fullprint << haltonSample << std::endl; // Create another Halton' sequence of dimension 2 to estimate Pi in [0; 1)^2 UnsignedInteger dimension = 2; sequence = HaltonSequence(dimension); UnsignedInteger pointInsideCircle = 0; UnsignedInteger sampleSize = 1000; for(UnsignedInteger i = 0; i < sampleSize; ++i) { Point haltonPoint(sequence.generate()); fullprint << haltonPoint << std::endl; if(haltonPoint.norm() < 1.0) ++ pointInsideCircle; } Scalar probabilityEstimate = 1.0 * pointInsideCircle / sampleSize; Scalar probability = M_PI / 4.0; Scalar relativeError = std::abs(probability - probabilityEstimate) / probability; fullprint << "sample size=" << sampleSize << std::endl; fullprint << "relative error to Pi=" << relativeError << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HaltonSequence_std.expout000066400000000000000000002001131307543307100225260ustar00rootroot00000000000000class=HaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.5,0.333333,0.2,0.142857,0.0909091,0.0769231,0.0588235,0.0526316,0.0434783,0.0344828,0.0322581,0.027027,0.0243902,0.0232558,0.0212766],[0.25,0.666667,0.4,0.285714,0.181818,0.153846,0.117647,0.105263,0.0869565,0.0689655,0.0645161,0.0540541,0.0487805,0.0465116,0.0425532],[0.75,0.111111,0.6,0.428571,0.272727,0.230769,0.176471,0.157895,0.130435,0.103448,0.0967742,0.0810811,0.0731707,0.0697674,0.0638298],[0.125,0.444444,0.8,0.571429,0.363636,0.307692,0.235294,0.210526,0.173913,0.137931,0.129032,0.108108,0.097561,0.0930233,0.0851064],[0.625,0.777778,0.04,0.714286,0.454545,0.384615,0.294118,0.263158,0.217391,0.172414,0.16129,0.135135,0.121951,0.116279,0.106383],[0.375,0.222222,0.24,0.857143,0.545455,0.461538,0.352941,0.315789,0.26087,0.206897,0.193548,0.162162,0.146341,0.139535,0.12766],[0.875,0.555556,0.44,0.0204082,0.636364,0.538462,0.411765,0.368421,0.304348,0.241379,0.225806,0.189189,0.170732,0.162791,0.148936],[0.0625,0.888889,0.64,0.163265,0.727273,0.615385,0.470588,0.421053,0.347826,0.275862,0.258065,0.216216,0.195122,0.186047,0.170213],[0.5625,0.037037,0.84,0.306122,0.818182,0.692308,0.529412,0.473684,0.391304,0.310345,0.290323,0.243243,0.219512,0.209302,0.191489],[0.3125,0.37037,0.08,0.44898,0.909091,0.769231,0.588235,0.526316,0.434783,0.344828,0.322581,0.27027,0.243902,0.232558,0.212766]] class=Point name=Unnamed dimension=2 values=[0.5,0.333333] class=Point name=Unnamed dimension=2 values=[0.25,0.666667] class=Point name=Unnamed dimension=2 values=[0.75,0.111111] class=Point name=Unnamed dimension=2 values=[0.125,0.444444] class=Point name=Unnamed dimension=2 values=[0.625,0.777778] class=Point name=Unnamed dimension=2 values=[0.375,0.222222] class=Point name=Unnamed dimension=2 values=[0.875,0.555556] class=Point name=Unnamed dimension=2 values=[0.0625,0.888889] class=Point name=Unnamed dimension=2 values=[0.5625,0.037037] class=Point name=Unnamed dimension=2 values=[0.3125,0.37037] class=Point name=Unnamed dimension=2 values=[0.8125,0.703704] class=Point name=Unnamed dimension=2 values=[0.1875,0.148148] class=Point name=Unnamed dimension=2 values=[0.6875,0.481481] class=Point name=Unnamed dimension=2 values=[0.4375,0.814815] class=Point name=Unnamed dimension=2 values=[0.9375,0.259259] class=Point name=Unnamed dimension=2 values=[0.03125,0.592593] class=Point name=Unnamed dimension=2 values=[0.53125,0.925926] class=Point name=Unnamed dimension=2 values=[0.28125,0.0740741] class=Point name=Unnamed dimension=2 values=[0.78125,0.407407] class=Point name=Unnamed dimension=2 values=[0.15625,0.740741] class=Point name=Unnamed dimension=2 values=[0.65625,0.185185] class=Point name=Unnamed dimension=2 values=[0.40625,0.518519] class=Point name=Unnamed dimension=2 values=[0.90625,0.851852] class=Point name=Unnamed dimension=2 values=[0.09375,0.296296] class=Point name=Unnamed dimension=2 values=[0.59375,0.62963] class=Point name=Unnamed dimension=2 values=[0.34375,0.962963] class=Point name=Unnamed dimension=2 values=[0.84375,0.0123457] class=Point name=Unnamed dimension=2 values=[0.21875,0.345679] class=Point name=Unnamed dimension=2 values=[0.71875,0.679012] class=Point name=Unnamed dimension=2 values=[0.46875,0.123457] class=Point name=Unnamed dimension=2 values=[0.96875,0.45679] class=Point name=Unnamed dimension=2 values=[0.015625,0.790123] class=Point name=Unnamed dimension=2 values=[0.515625,0.234568] class=Point name=Unnamed dimension=2 values=[0.265625,0.567901] class=Point name=Unnamed dimension=2 values=[0.765625,0.901235] class=Point name=Unnamed dimension=2 values=[0.140625,0.0493827] class=Point name=Unnamed dimension=2 values=[0.640625,0.382716] class=Point name=Unnamed dimension=2 values=[0.390625,0.716049] class=Point name=Unnamed dimension=2 values=[0.890625,0.160494] class=Point name=Unnamed dimension=2 values=[0.078125,0.493827] class=Point name=Unnamed dimension=2 values=[0.578125,0.82716] class=Point name=Unnamed dimension=2 values=[0.328125,0.271605] class=Point name=Unnamed dimension=2 values=[0.828125,0.604938] class=Point name=Unnamed dimension=2 values=[0.203125,0.938272] class=Point name=Unnamed dimension=2 values=[0.703125,0.0864198] class=Point name=Unnamed dimension=2 values=[0.453125,0.419753] class=Point name=Unnamed dimension=2 values=[0.953125,0.753086] class=Point name=Unnamed dimension=2 values=[0.046875,0.197531] class=Point name=Unnamed dimension=2 values=[0.546875,0.530864] class=Point name=Unnamed dimension=2 values=[0.296875,0.864198] class=Point name=Unnamed dimension=2 values=[0.796875,0.308642] class=Point name=Unnamed dimension=2 values=[0.171875,0.641975] class=Point name=Unnamed dimension=2 values=[0.671875,0.975309] class=Point name=Unnamed dimension=2 values=[0.421875,0.0246914] class=Point name=Unnamed dimension=2 values=[0.921875,0.358025] class=Point name=Unnamed dimension=2 values=[0.109375,0.691358] class=Point name=Unnamed dimension=2 values=[0.609375,0.135802] class=Point name=Unnamed dimension=2 values=[0.359375,0.469136] class=Point name=Unnamed dimension=2 values=[0.859375,0.802469] class=Point name=Unnamed dimension=2 values=[0.234375,0.246914] class=Point name=Unnamed dimension=2 values=[0.734375,0.580247] class=Point name=Unnamed dimension=2 values=[0.484375,0.91358] class=Point name=Unnamed dimension=2 values=[0.984375,0.0617284] class=Point name=Unnamed dimension=2 values=[0.0078125,0.395062] class=Point name=Unnamed dimension=2 values=[0.507812,0.728395] class=Point name=Unnamed dimension=2 values=[0.257812,0.17284] class=Point name=Unnamed dimension=2 values=[0.757812,0.506173] class=Point name=Unnamed dimension=2 values=[0.132812,0.839506] class=Point name=Unnamed dimension=2 values=[0.632812,0.283951] class=Point name=Unnamed dimension=2 values=[0.382812,0.617284] class=Point name=Unnamed dimension=2 values=[0.882812,0.950617] class=Point name=Unnamed dimension=2 values=[0.0703125,0.0987654] class=Point name=Unnamed dimension=2 values=[0.570312,0.432099] class=Point name=Unnamed dimension=2 values=[0.320312,0.765432] class=Point name=Unnamed dimension=2 values=[0.820312,0.209877] class=Point name=Unnamed dimension=2 values=[0.195312,0.54321] class=Point name=Unnamed dimension=2 values=[0.695312,0.876543] class=Point name=Unnamed dimension=2 values=[0.445312,0.320988] class=Point name=Unnamed dimension=2 values=[0.945312,0.654321] class=Point name=Unnamed dimension=2 values=[0.0390625,0.987654] class=Point name=Unnamed dimension=2 values=[0.539062,0.00411523] class=Point name=Unnamed dimension=2 values=[0.289062,0.337449] class=Point name=Unnamed dimension=2 values=[0.789062,0.670782] class=Point name=Unnamed dimension=2 values=[0.164062,0.115226] class=Point name=Unnamed dimension=2 values=[0.664062,0.44856] class=Point name=Unnamed dimension=2 values=[0.414062,0.781893] class=Point name=Unnamed dimension=2 values=[0.914062,0.226337] class=Point name=Unnamed dimension=2 values=[0.101562,0.559671] class=Point name=Unnamed dimension=2 values=[0.601562,0.893004] class=Point name=Unnamed dimension=2 values=[0.351562,0.0411523] class=Point name=Unnamed dimension=2 values=[0.851562,0.374486] class=Point name=Unnamed dimension=2 values=[0.226562,0.707819] class=Point name=Unnamed dimension=2 values=[0.726562,0.152263] class=Point name=Unnamed dimension=2 values=[0.476562,0.485597] class=Point name=Unnamed dimension=2 values=[0.976562,0.81893] class=Point name=Unnamed dimension=2 values=[0.0234375,0.263374] class=Point name=Unnamed dimension=2 values=[0.523438,0.596708] class=Point name=Unnamed dimension=2 values=[0.273438,0.930041] class=Point name=Unnamed dimension=2 values=[0.773438,0.0781893] class=Point name=Unnamed dimension=2 values=[0.148438,0.411523] class=Point name=Unnamed dimension=2 values=[0.648438,0.744856] class=Point name=Unnamed dimension=2 values=[0.398438,0.1893] class=Point name=Unnamed dimension=2 values=[0.898438,0.522634] class=Point name=Unnamed dimension=2 values=[0.0859375,0.855967] class=Point name=Unnamed dimension=2 values=[0.585938,0.300412] class=Point name=Unnamed dimension=2 values=[0.335938,0.633745] class=Point name=Unnamed dimension=2 values=[0.835938,0.967078] class=Point name=Unnamed dimension=2 values=[0.210938,0.0164609] class=Point name=Unnamed dimension=2 values=[0.710938,0.349794] class=Point name=Unnamed dimension=2 values=[0.460938,0.683128] class=Point name=Unnamed dimension=2 values=[0.960938,0.127572] class=Point name=Unnamed dimension=2 values=[0.0546875,0.460905] class=Point name=Unnamed dimension=2 values=[0.554688,0.794239] class=Point name=Unnamed dimension=2 values=[0.304688,0.238683] class=Point name=Unnamed dimension=2 values=[0.804688,0.572016] class=Point name=Unnamed dimension=2 values=[0.179688,0.90535] class=Point name=Unnamed dimension=2 values=[0.679688,0.0534979] class=Point name=Unnamed dimension=2 values=[0.429688,0.386831] class=Point name=Unnamed dimension=2 values=[0.929688,0.720165] class=Point name=Unnamed dimension=2 values=[0.117188,0.164609] class=Point name=Unnamed dimension=2 values=[0.617188,0.497942] class=Point name=Unnamed dimension=2 values=[0.367188,0.831276] class=Point name=Unnamed dimension=2 values=[0.867188,0.27572] class=Point name=Unnamed dimension=2 values=[0.242188,0.609053] class=Point name=Unnamed dimension=2 values=[0.742188,0.942387] class=Point name=Unnamed dimension=2 values=[0.492188,0.090535] class=Point name=Unnamed dimension=2 values=[0.992188,0.423868] class=Point name=Unnamed dimension=2 values=[0.00390625,0.757202] class=Point name=Unnamed dimension=2 values=[0.503906,0.201646] class=Point name=Unnamed dimension=2 values=[0.253906,0.534979] class=Point name=Unnamed dimension=2 values=[0.753906,0.868313] class=Point name=Unnamed dimension=2 values=[0.128906,0.312757] class=Point name=Unnamed dimension=2 values=[0.628906,0.646091] class=Point name=Unnamed dimension=2 values=[0.378906,0.979424] class=Point name=Unnamed dimension=2 values=[0.878906,0.0288066] class=Point name=Unnamed dimension=2 values=[0.0664062,0.36214] class=Point name=Unnamed dimension=2 values=[0.566406,0.695473] class=Point name=Unnamed dimension=2 values=[0.316406,0.139918] class=Point name=Unnamed dimension=2 values=[0.816406,0.473251] class=Point name=Unnamed dimension=2 values=[0.191406,0.806584] class=Point name=Unnamed dimension=2 values=[0.691406,0.251029] class=Point name=Unnamed dimension=2 values=[0.441406,0.584362] class=Point name=Unnamed dimension=2 values=[0.941406,0.917695] class=Point name=Unnamed dimension=2 values=[0.0351562,0.0658436] class=Point name=Unnamed dimension=2 values=[0.535156,0.399177] class=Point name=Unnamed dimension=2 values=[0.285156,0.73251] class=Point name=Unnamed dimension=2 values=[0.785156,0.176955] class=Point name=Unnamed dimension=2 values=[0.160156,0.510288] class=Point name=Unnamed dimension=2 values=[0.660156,0.843621] class=Point name=Unnamed dimension=2 values=[0.410156,0.288066] class=Point name=Unnamed dimension=2 values=[0.910156,0.621399] class=Point name=Unnamed dimension=2 values=[0.0976562,0.954733] class=Point name=Unnamed dimension=2 values=[0.597656,0.102881] class=Point name=Unnamed dimension=2 values=[0.347656,0.436214] class=Point name=Unnamed dimension=2 values=[0.847656,0.769547] class=Point name=Unnamed dimension=2 values=[0.222656,0.213992] class=Point name=Unnamed dimension=2 values=[0.722656,0.547325] class=Point name=Unnamed dimension=2 values=[0.472656,0.880658] class=Point name=Unnamed dimension=2 values=[0.972656,0.325103] class=Point name=Unnamed dimension=2 values=[0.0195312,0.658436] class=Point name=Unnamed dimension=2 values=[0.519531,0.99177] class=Point name=Unnamed dimension=2 values=[0.269531,0.00823045] class=Point name=Unnamed dimension=2 values=[0.769531,0.341564] class=Point name=Unnamed dimension=2 values=[0.144531,0.674897] class=Point name=Unnamed dimension=2 values=[0.644531,0.119342] class=Point name=Unnamed dimension=2 values=[0.394531,0.452675] class=Point name=Unnamed dimension=2 values=[0.894531,0.786008] class=Point name=Unnamed dimension=2 values=[0.0820312,0.230453] class=Point name=Unnamed dimension=2 values=[0.582031,0.563786] class=Point name=Unnamed dimension=2 values=[0.332031,0.897119] class=Point name=Unnamed dimension=2 values=[0.832031,0.0452675] class=Point name=Unnamed dimension=2 values=[0.207031,0.378601] class=Point name=Unnamed dimension=2 values=[0.707031,0.711934] class=Point name=Unnamed dimension=2 values=[0.457031,0.156379] class=Point name=Unnamed dimension=2 values=[0.957031,0.489712] class=Point name=Unnamed dimension=2 values=[0.0507812,0.823045] class=Point name=Unnamed dimension=2 values=[0.550781,0.26749] class=Point name=Unnamed dimension=2 values=[0.300781,0.600823] class=Point name=Unnamed dimension=2 values=[0.800781,0.934156] class=Point name=Unnamed dimension=2 values=[0.175781,0.0823045] class=Point name=Unnamed dimension=2 values=[0.675781,0.415638] class=Point name=Unnamed dimension=2 values=[0.425781,0.748971] class=Point name=Unnamed dimension=2 values=[0.925781,0.193416] class=Point name=Unnamed dimension=2 values=[0.113281,0.526749] class=Point name=Unnamed dimension=2 values=[0.613281,0.860082] class=Point name=Unnamed dimension=2 values=[0.363281,0.304527] class=Point name=Unnamed dimension=2 values=[0.863281,0.63786] class=Point name=Unnamed dimension=2 values=[0.238281,0.971193] class=Point name=Unnamed dimension=2 values=[0.738281,0.0205761] class=Point name=Unnamed dimension=2 values=[0.488281,0.353909] class=Point name=Unnamed dimension=2 values=[0.988281,0.687243] class=Point name=Unnamed dimension=2 values=[0.0117188,0.131687] class=Point name=Unnamed dimension=2 values=[0.511719,0.465021] class=Point name=Unnamed dimension=2 values=[0.261719,0.798354] class=Point name=Unnamed dimension=2 values=[0.761719,0.242798] class=Point name=Unnamed dimension=2 values=[0.136719,0.576132] class=Point name=Unnamed dimension=2 values=[0.636719,0.909465] class=Point name=Unnamed dimension=2 values=[0.386719,0.0576132] class=Point name=Unnamed dimension=2 values=[0.886719,0.390947] class=Point name=Unnamed dimension=2 values=[0.0742188,0.72428] class=Point name=Unnamed dimension=2 values=[0.574219,0.168724] class=Point name=Unnamed dimension=2 values=[0.324219,0.502058] class=Point name=Unnamed dimension=2 values=[0.824219,0.835391] class=Point name=Unnamed dimension=2 values=[0.199219,0.279835] class=Point name=Unnamed dimension=2 values=[0.699219,0.613169] class=Point name=Unnamed dimension=2 values=[0.449219,0.946502] class=Point name=Unnamed dimension=2 values=[0.949219,0.0946502] class=Point name=Unnamed dimension=2 values=[0.0429688,0.427984] class=Point name=Unnamed dimension=2 values=[0.542969,0.761317] class=Point name=Unnamed dimension=2 values=[0.292969,0.205761] class=Point name=Unnamed dimension=2 values=[0.792969,0.539095] class=Point name=Unnamed dimension=2 values=[0.167969,0.872428] class=Point name=Unnamed dimension=2 values=[0.667969,0.316872] class=Point name=Unnamed dimension=2 values=[0.417969,0.650206] class=Point name=Unnamed dimension=2 values=[0.917969,0.983539] class=Point name=Unnamed dimension=2 values=[0.105469,0.0329218] class=Point name=Unnamed dimension=2 values=[0.605469,0.366255] class=Point name=Unnamed dimension=2 values=[0.355469,0.699588] class=Point name=Unnamed dimension=2 values=[0.855469,0.144033] class=Point name=Unnamed dimension=2 values=[0.230469,0.477366] class=Point name=Unnamed dimension=2 values=[0.730469,0.8107] class=Point name=Unnamed dimension=2 values=[0.480469,0.255144] class=Point name=Unnamed dimension=2 values=[0.980469,0.588477] class=Point name=Unnamed dimension=2 values=[0.0273438,0.921811] class=Point name=Unnamed dimension=2 values=[0.527344,0.0699588] class=Point name=Unnamed dimension=2 values=[0.277344,0.403292] class=Point name=Unnamed dimension=2 values=[0.777344,0.736626] class=Point name=Unnamed dimension=2 values=[0.152344,0.18107] class=Point name=Unnamed dimension=2 values=[0.652344,0.514403] class=Point name=Unnamed dimension=2 values=[0.402344,0.847737] class=Point name=Unnamed dimension=2 values=[0.902344,0.292181] class=Point name=Unnamed dimension=2 values=[0.0898438,0.625514] class=Point name=Unnamed dimension=2 values=[0.589844,0.958848] class=Point name=Unnamed dimension=2 values=[0.339844,0.106996] class=Point name=Unnamed dimension=2 values=[0.839844,0.440329] class=Point name=Unnamed dimension=2 values=[0.214844,0.773663] class=Point name=Unnamed dimension=2 values=[0.714844,0.218107] class=Point name=Unnamed dimension=2 values=[0.464844,0.55144] class=Point name=Unnamed dimension=2 values=[0.964844,0.884774] class=Point name=Unnamed dimension=2 values=[0.0585938,0.329218] class=Point name=Unnamed dimension=2 values=[0.558594,0.662551] class=Point name=Unnamed dimension=2 values=[0.308594,0.995885] class=Point name=Unnamed dimension=2 values=[0.808594,0.00137174] class=Point name=Unnamed dimension=2 values=[0.183594,0.334705] class=Point name=Unnamed dimension=2 values=[0.683594,0.668038] class=Point name=Unnamed dimension=2 values=[0.433594,0.112483] class=Point name=Unnamed dimension=2 values=[0.933594,0.445816] class=Point name=Unnamed dimension=2 values=[0.121094,0.77915] class=Point name=Unnamed dimension=2 values=[0.621094,0.223594] class=Point name=Unnamed dimension=2 values=[0.371094,0.556927] class=Point name=Unnamed dimension=2 values=[0.871094,0.890261] class=Point name=Unnamed dimension=2 values=[0.246094,0.0384088] class=Point name=Unnamed dimension=2 values=[0.746094,0.371742] class=Point name=Unnamed dimension=2 values=[0.496094,0.705075] class=Point name=Unnamed dimension=2 values=[0.996094,0.14952] class=Point name=Unnamed dimension=2 values=[0.00195312,0.482853] class=Point name=Unnamed dimension=2 values=[0.501953,0.816187] class=Point name=Unnamed dimension=2 values=[0.251953,0.260631] class=Point name=Unnamed dimension=2 values=[0.751953,0.593964] class=Point name=Unnamed dimension=2 values=[0.126953,0.927298] class=Point name=Unnamed dimension=2 values=[0.626953,0.0754458] class=Point name=Unnamed dimension=2 values=[0.376953,0.408779] class=Point name=Unnamed dimension=2 values=[0.876953,0.742112] class=Point name=Unnamed dimension=2 values=[0.0644531,0.186557] class=Point name=Unnamed dimension=2 values=[0.564453,0.51989] class=Point name=Unnamed dimension=2 values=[0.314453,0.853224] class=Point name=Unnamed dimension=2 values=[0.814453,0.297668] class=Point name=Unnamed dimension=2 values=[0.189453,0.631001] class=Point name=Unnamed dimension=2 values=[0.689453,0.964335] class=Point name=Unnamed dimension=2 values=[0.439453,0.0137174] class=Point name=Unnamed dimension=2 values=[0.939453,0.347051] class=Point name=Unnamed dimension=2 values=[0.0332031,0.680384] class=Point name=Unnamed dimension=2 values=[0.533203,0.124829] class=Point name=Unnamed dimension=2 values=[0.283203,0.458162] class=Point name=Unnamed dimension=2 values=[0.783203,0.791495] class=Point name=Unnamed dimension=2 values=[0.158203,0.23594] class=Point name=Unnamed dimension=2 values=[0.658203,0.569273] class=Point name=Unnamed dimension=2 values=[0.408203,0.902606] class=Point name=Unnamed dimension=2 values=[0.908203,0.0507545] class=Point name=Unnamed dimension=2 values=[0.0957031,0.384088] class=Point name=Unnamed dimension=2 values=[0.595703,0.717421] class=Point name=Unnamed dimension=2 values=[0.345703,0.161866] class=Point name=Unnamed dimension=2 values=[0.845703,0.495199] class=Point name=Unnamed dimension=2 values=[0.220703,0.828532] class=Point name=Unnamed dimension=2 values=[0.720703,0.272977] class=Point name=Unnamed dimension=2 values=[0.470703,0.60631] class=Point name=Unnamed dimension=2 values=[0.970703,0.939643] class=Point name=Unnamed dimension=2 values=[0.0175781,0.0877915] class=Point name=Unnamed dimension=2 values=[0.517578,0.421125] class=Point name=Unnamed dimension=2 values=[0.267578,0.754458] class=Point name=Unnamed dimension=2 values=[0.767578,0.198903] class=Point name=Unnamed dimension=2 values=[0.142578,0.532236] class=Point name=Unnamed dimension=2 values=[0.642578,0.865569] class=Point name=Unnamed dimension=2 values=[0.392578,0.310014] class=Point name=Unnamed dimension=2 values=[0.892578,0.643347] class=Point name=Unnamed dimension=2 values=[0.0800781,0.97668] class=Point name=Unnamed dimension=2 values=[0.580078,0.0260631] class=Point name=Unnamed dimension=2 values=[0.330078,0.359396] class=Point name=Unnamed dimension=2 values=[0.830078,0.69273] class=Point name=Unnamed dimension=2 values=[0.205078,0.137174] class=Point name=Unnamed dimension=2 values=[0.705078,0.470508] class=Point name=Unnamed dimension=2 values=[0.455078,0.803841] class=Point name=Unnamed dimension=2 values=[0.955078,0.248285] class=Point name=Unnamed dimension=2 values=[0.0488281,0.581619] class=Point name=Unnamed dimension=2 values=[0.548828,0.914952] class=Point name=Unnamed dimension=2 values=[0.298828,0.0631001] class=Point name=Unnamed dimension=2 values=[0.798828,0.396433] class=Point name=Unnamed dimension=2 values=[0.173828,0.729767] class=Point name=Unnamed dimension=2 values=[0.673828,0.174211] class=Point name=Unnamed dimension=2 values=[0.423828,0.507545] class=Point name=Unnamed dimension=2 values=[0.923828,0.840878] class=Point name=Unnamed dimension=2 values=[0.111328,0.285322] class=Point name=Unnamed dimension=2 values=[0.611328,0.618656] class=Point name=Unnamed dimension=2 values=[0.361328,0.951989] class=Point name=Unnamed dimension=2 values=[0.861328,0.100137] class=Point name=Unnamed dimension=2 values=[0.236328,0.433471] class=Point name=Unnamed dimension=2 values=[0.736328,0.766804] class=Point name=Unnamed dimension=2 values=[0.486328,0.211248] class=Point name=Unnamed dimension=2 values=[0.986328,0.544582] class=Point name=Unnamed dimension=2 values=[0.00976562,0.877915] class=Point name=Unnamed dimension=2 values=[0.509766,0.322359] class=Point name=Unnamed dimension=2 values=[0.259766,0.655693] class=Point name=Unnamed dimension=2 values=[0.759766,0.989026] class=Point name=Unnamed dimension=2 values=[0.134766,0.00548697] class=Point name=Unnamed dimension=2 values=[0.634766,0.33882] class=Point name=Unnamed dimension=2 values=[0.384766,0.672154] class=Point name=Unnamed dimension=2 values=[0.884766,0.116598] class=Point name=Unnamed dimension=2 values=[0.0722656,0.449931] class=Point name=Unnamed dimension=2 values=[0.572266,0.783265] class=Point name=Unnamed dimension=2 values=[0.322266,0.227709] class=Point name=Unnamed dimension=2 values=[0.822266,0.561043] class=Point name=Unnamed dimension=2 values=[0.197266,0.894376] class=Point name=Unnamed dimension=2 values=[0.697266,0.042524] class=Point name=Unnamed dimension=2 values=[0.447266,0.375857] class=Point name=Unnamed dimension=2 values=[0.947266,0.709191] class=Point name=Unnamed dimension=2 values=[0.0410156,0.153635] class=Point name=Unnamed dimension=2 values=[0.541016,0.486968] class=Point name=Unnamed dimension=2 values=[0.291016,0.820302] class=Point name=Unnamed dimension=2 values=[0.791016,0.264746] class=Point name=Unnamed dimension=2 values=[0.166016,0.59808] class=Point name=Unnamed dimension=2 values=[0.666016,0.931413] class=Point name=Unnamed dimension=2 values=[0.416016,0.079561] class=Point name=Unnamed dimension=2 values=[0.916016,0.412894] class=Point name=Unnamed dimension=2 values=[0.103516,0.746228] class=Point name=Unnamed dimension=2 values=[0.603516,0.190672] class=Point name=Unnamed dimension=2 values=[0.353516,0.524005] class=Point name=Unnamed dimension=2 values=[0.853516,0.857339] class=Point name=Unnamed dimension=2 values=[0.228516,0.301783] class=Point name=Unnamed dimension=2 values=[0.728516,0.635117] class=Point name=Unnamed dimension=2 values=[0.478516,0.96845] class=Point name=Unnamed dimension=2 values=[0.978516,0.0178326] class=Point name=Unnamed dimension=2 values=[0.0253906,0.351166] class=Point name=Unnamed dimension=2 values=[0.525391,0.684499] class=Point name=Unnamed dimension=2 values=[0.275391,0.128944] class=Point name=Unnamed dimension=2 values=[0.775391,0.462277] class=Point name=Unnamed dimension=2 values=[0.150391,0.79561] class=Point name=Unnamed dimension=2 values=[0.650391,0.240055] class=Point name=Unnamed dimension=2 values=[0.400391,0.573388] class=Point name=Unnamed dimension=2 values=[0.900391,0.906722] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0548697] class=Point name=Unnamed dimension=2 values=[0.587891,0.388203] class=Point name=Unnamed dimension=2 values=[0.337891,0.721536] class=Point name=Unnamed dimension=2 values=[0.837891,0.165981] class=Point name=Unnamed dimension=2 values=[0.212891,0.499314] class=Point name=Unnamed dimension=2 values=[0.712891,0.832647] class=Point name=Unnamed dimension=2 values=[0.462891,0.277092] class=Point name=Unnamed dimension=2 values=[0.962891,0.610425] class=Point name=Unnamed dimension=2 values=[0.0566406,0.943759] class=Point name=Unnamed dimension=2 values=[0.556641,0.0919067] class=Point name=Unnamed dimension=2 values=[0.306641,0.42524] class=Point name=Unnamed dimension=2 values=[0.806641,0.758573] class=Point name=Unnamed dimension=2 values=[0.181641,0.203018] class=Point name=Unnamed dimension=2 values=[0.681641,0.536351] class=Point name=Unnamed dimension=2 values=[0.431641,0.869684] class=Point name=Unnamed dimension=2 values=[0.931641,0.314129] class=Point name=Unnamed dimension=2 values=[0.119141,0.647462] class=Point name=Unnamed dimension=2 values=[0.619141,0.980796] class=Point name=Unnamed dimension=2 values=[0.369141,0.0301783] class=Point name=Unnamed dimension=2 values=[0.869141,0.363512] class=Point name=Unnamed dimension=2 values=[0.244141,0.696845] class=Point name=Unnamed dimension=2 values=[0.744141,0.141289] class=Point name=Unnamed dimension=2 values=[0.494141,0.474623] class=Point name=Unnamed dimension=2 values=[0.994141,0.807956] class=Point name=Unnamed dimension=2 values=[0.00585938,0.252401] class=Point name=Unnamed dimension=2 values=[0.505859,0.585734] class=Point name=Unnamed dimension=2 values=[0.255859,0.919067] class=Point name=Unnamed dimension=2 values=[0.755859,0.0672154] class=Point name=Unnamed dimension=2 values=[0.130859,0.400549] class=Point name=Unnamed dimension=2 values=[0.630859,0.733882] class=Point name=Unnamed dimension=2 values=[0.380859,0.178326] class=Point name=Unnamed dimension=2 values=[0.880859,0.51166] class=Point name=Unnamed dimension=2 values=[0.0683594,0.844993] class=Point name=Unnamed dimension=2 values=[0.568359,0.289438] class=Point name=Unnamed dimension=2 values=[0.318359,0.622771] class=Point name=Unnamed dimension=2 values=[0.818359,0.956104] class=Point name=Unnamed dimension=2 values=[0.193359,0.104252] class=Point name=Unnamed dimension=2 values=[0.693359,0.437586] class=Point name=Unnamed dimension=2 values=[0.443359,0.770919] class=Point name=Unnamed dimension=2 values=[0.943359,0.215364] class=Point name=Unnamed dimension=2 values=[0.0371094,0.548697] class=Point name=Unnamed dimension=2 values=[0.537109,0.88203] class=Point name=Unnamed dimension=2 values=[0.287109,0.326475] class=Point name=Unnamed dimension=2 values=[0.787109,0.659808] class=Point name=Unnamed dimension=2 values=[0.162109,0.993141] class=Point name=Unnamed dimension=2 values=[0.662109,0.00960219] class=Point name=Unnamed dimension=2 values=[0.412109,0.342936] class=Point name=Unnamed dimension=2 values=[0.912109,0.676269] class=Point name=Unnamed dimension=2 values=[0.0996094,0.120713] class=Point name=Unnamed dimension=2 values=[0.599609,0.454047] class=Point name=Unnamed dimension=2 values=[0.349609,0.78738] class=Point name=Unnamed dimension=2 values=[0.849609,0.231824] class=Point name=Unnamed dimension=2 values=[0.224609,0.565158] class=Point name=Unnamed dimension=2 values=[0.724609,0.898491] class=Point name=Unnamed dimension=2 values=[0.474609,0.0466392] class=Point name=Unnamed dimension=2 values=[0.974609,0.379973] class=Point name=Unnamed dimension=2 values=[0.0214844,0.713306] class=Point name=Unnamed dimension=2 values=[0.521484,0.15775] class=Point name=Unnamed dimension=2 values=[0.271484,0.491084] class=Point name=Unnamed dimension=2 values=[0.771484,0.824417] class=Point name=Unnamed dimension=2 values=[0.146484,0.268861] class=Point name=Unnamed dimension=2 values=[0.646484,0.602195] class=Point name=Unnamed dimension=2 values=[0.396484,0.935528] class=Point name=Unnamed dimension=2 values=[0.896484,0.0836763] class=Point name=Unnamed dimension=2 values=[0.0839844,0.41701] class=Point name=Unnamed dimension=2 values=[0.583984,0.750343] class=Point name=Unnamed dimension=2 values=[0.333984,0.194787] class=Point name=Unnamed dimension=2 values=[0.833984,0.528121] class=Point name=Unnamed dimension=2 values=[0.208984,0.861454] class=Point name=Unnamed dimension=2 values=[0.708984,0.305898] class=Point name=Unnamed dimension=2 values=[0.458984,0.639232] class=Point name=Unnamed dimension=2 values=[0.958984,0.972565] class=Point name=Unnamed dimension=2 values=[0.0527344,0.0219479] class=Point name=Unnamed dimension=2 values=[0.552734,0.355281] class=Point name=Unnamed dimension=2 values=[0.302734,0.688615] class=Point name=Unnamed dimension=2 values=[0.802734,0.133059] class=Point name=Unnamed dimension=2 values=[0.177734,0.466392] class=Point name=Unnamed dimension=2 values=[0.677734,0.799726] class=Point name=Unnamed dimension=2 values=[0.427734,0.24417] class=Point name=Unnamed dimension=2 values=[0.927734,0.577503] class=Point name=Unnamed dimension=2 values=[0.115234,0.910837] class=Point name=Unnamed dimension=2 values=[0.615234,0.0589849] class=Point name=Unnamed dimension=2 values=[0.365234,0.392318] class=Point name=Unnamed dimension=2 values=[0.865234,0.725652] class=Point name=Unnamed dimension=2 values=[0.240234,0.170096] class=Point name=Unnamed dimension=2 values=[0.740234,0.503429] class=Point name=Unnamed dimension=2 values=[0.490234,0.836763] class=Point name=Unnamed dimension=2 values=[0.990234,0.281207] class=Point name=Unnamed dimension=2 values=[0.0136719,0.61454] class=Point name=Unnamed dimension=2 values=[0.513672,0.947874] class=Point name=Unnamed dimension=2 values=[0.263672,0.0960219] class=Point name=Unnamed dimension=2 values=[0.763672,0.429355] class=Point name=Unnamed dimension=2 values=[0.138672,0.762689] class=Point name=Unnamed dimension=2 values=[0.638672,0.207133] class=Point name=Unnamed dimension=2 values=[0.388672,0.540466] class=Point name=Unnamed dimension=2 values=[0.888672,0.8738] class=Point name=Unnamed dimension=2 values=[0.0761719,0.318244] class=Point name=Unnamed dimension=2 values=[0.576172,0.651578] class=Point name=Unnamed dimension=2 values=[0.326172,0.984911] class=Point name=Unnamed dimension=2 values=[0.826172,0.0342936] class=Point name=Unnamed dimension=2 values=[0.201172,0.367627] class=Point name=Unnamed dimension=2 values=[0.701172,0.70096] class=Point name=Unnamed dimension=2 values=[0.451172,0.145405] class=Point name=Unnamed dimension=2 values=[0.951172,0.478738] class=Point name=Unnamed dimension=2 values=[0.0449219,0.812071] class=Point name=Unnamed dimension=2 values=[0.544922,0.256516] class=Point name=Unnamed dimension=2 values=[0.294922,0.589849] class=Point name=Unnamed dimension=2 values=[0.794922,0.923182] class=Point name=Unnamed dimension=2 values=[0.169922,0.0713306] class=Point name=Unnamed dimension=2 values=[0.669922,0.404664] class=Point name=Unnamed dimension=2 values=[0.419922,0.737997] class=Point name=Unnamed dimension=2 values=[0.919922,0.182442] class=Point name=Unnamed dimension=2 values=[0.107422,0.515775] class=Point name=Unnamed dimension=2 values=[0.607422,0.849108] class=Point name=Unnamed dimension=2 values=[0.357422,0.293553] class=Point name=Unnamed dimension=2 values=[0.857422,0.626886] class=Point name=Unnamed dimension=2 values=[0.232422,0.960219] class=Point name=Unnamed dimension=2 values=[0.732422,0.108368] class=Point name=Unnamed dimension=2 values=[0.482422,0.441701] class=Point name=Unnamed dimension=2 values=[0.982422,0.775034] class=Point name=Unnamed dimension=2 values=[0.0292969,0.219479] class=Point name=Unnamed dimension=2 values=[0.529297,0.552812] class=Point name=Unnamed dimension=2 values=[0.279297,0.886145] class=Point name=Unnamed dimension=2 values=[0.779297,0.33059] class=Point name=Unnamed dimension=2 values=[0.154297,0.663923] class=Point name=Unnamed dimension=2 values=[0.654297,0.997257] class=Point name=Unnamed dimension=2 values=[0.404297,0.00274348] class=Point name=Unnamed dimension=2 values=[0.904297,0.336077] class=Point name=Unnamed dimension=2 values=[0.0917969,0.66941] class=Point name=Unnamed dimension=2 values=[0.591797,0.113855] class=Point name=Unnamed dimension=2 values=[0.341797,0.447188] class=Point name=Unnamed dimension=2 values=[0.841797,0.780521] class=Point name=Unnamed dimension=2 values=[0.216797,0.224966] class=Point name=Unnamed dimension=2 values=[0.716797,0.558299] class=Point name=Unnamed dimension=2 values=[0.466797,0.891632] class=Point name=Unnamed dimension=2 values=[0.966797,0.0397805] class=Point name=Unnamed dimension=2 values=[0.0605469,0.373114] class=Point name=Unnamed dimension=2 values=[0.560547,0.706447] class=Point name=Unnamed dimension=2 values=[0.310547,0.150892] class=Point name=Unnamed dimension=2 values=[0.810547,0.484225] class=Point name=Unnamed dimension=2 values=[0.185547,0.817558] class=Point name=Unnamed dimension=2 values=[0.685547,0.262003] class=Point name=Unnamed dimension=2 values=[0.435547,0.595336] class=Point name=Unnamed dimension=2 values=[0.935547,0.928669] class=Point name=Unnamed dimension=2 values=[0.123047,0.0768176] class=Point name=Unnamed dimension=2 values=[0.623047,0.410151] class=Point name=Unnamed dimension=2 values=[0.373047,0.743484] class=Point name=Unnamed dimension=2 values=[0.873047,0.187929] class=Point name=Unnamed dimension=2 values=[0.248047,0.521262] class=Point name=Unnamed dimension=2 values=[0.748047,0.854595] class=Point name=Unnamed dimension=2 values=[0.498047,0.29904] class=Point name=Unnamed dimension=2 values=[0.998047,0.632373] class=Point name=Unnamed dimension=2 values=[0.000976562,0.965706] class=Point name=Unnamed dimension=2 values=[0.500977,0.0150892] class=Point name=Unnamed dimension=2 values=[0.250977,0.348422] class=Point name=Unnamed dimension=2 values=[0.750977,0.681756] class=Point name=Unnamed dimension=2 values=[0.125977,0.1262] class=Point name=Unnamed dimension=2 values=[0.625977,0.459534] class=Point name=Unnamed dimension=2 values=[0.375977,0.792867] class=Point name=Unnamed dimension=2 values=[0.875977,0.237311] class=Point name=Unnamed dimension=2 values=[0.0634766,0.570645] class=Point name=Unnamed dimension=2 values=[0.563477,0.903978] class=Point name=Unnamed dimension=2 values=[0.313477,0.0521262] class=Point name=Unnamed dimension=2 values=[0.813477,0.38546] class=Point name=Unnamed dimension=2 values=[0.188477,0.718793] class=Point name=Unnamed dimension=2 values=[0.688477,0.163237] class=Point name=Unnamed dimension=2 values=[0.438477,0.496571] class=Point name=Unnamed dimension=2 values=[0.938477,0.829904] class=Point name=Unnamed dimension=2 values=[0.0322266,0.274348] class=Point name=Unnamed dimension=2 values=[0.532227,0.607682] class=Point name=Unnamed dimension=2 values=[0.282227,0.941015] class=Point name=Unnamed dimension=2 values=[0.782227,0.0891632] class=Point name=Unnamed dimension=2 values=[0.157227,0.422497] class=Point name=Unnamed dimension=2 values=[0.657227,0.75583] class=Point name=Unnamed dimension=2 values=[0.407227,0.200274] class=Point name=Unnamed dimension=2 values=[0.907227,0.533608] class=Point name=Unnamed dimension=2 values=[0.0947266,0.866941] class=Point name=Unnamed dimension=2 values=[0.594727,0.311385] class=Point name=Unnamed dimension=2 values=[0.344727,0.644719] class=Point name=Unnamed dimension=2 values=[0.844727,0.978052] class=Point name=Unnamed dimension=2 values=[0.219727,0.0274348] class=Point name=Unnamed dimension=2 values=[0.719727,0.360768] class=Point name=Unnamed dimension=2 values=[0.469727,0.694102] class=Point name=Unnamed dimension=2 values=[0.969727,0.138546] class=Point name=Unnamed dimension=2 values=[0.0166016,0.471879] class=Point name=Unnamed dimension=2 values=[0.516602,0.805213] class=Point name=Unnamed dimension=2 values=[0.266602,0.249657] class=Point name=Unnamed dimension=2 values=[0.766602,0.58299] class=Point name=Unnamed dimension=2 values=[0.141602,0.916324] class=Point name=Unnamed dimension=2 values=[0.641602,0.0644719] class=Point name=Unnamed dimension=2 values=[0.391602,0.397805] class=Point name=Unnamed dimension=2 values=[0.891602,0.731139] class=Point name=Unnamed dimension=2 values=[0.0791016,0.175583] class=Point name=Unnamed dimension=2 values=[0.579102,0.508916] class=Point name=Unnamed dimension=2 values=[0.329102,0.84225] class=Point name=Unnamed dimension=2 values=[0.829102,0.286694] class=Point name=Unnamed dimension=2 values=[0.204102,0.620027] class=Point name=Unnamed dimension=2 values=[0.704102,0.953361] class=Point name=Unnamed dimension=2 values=[0.454102,0.101509] class=Point name=Unnamed dimension=2 values=[0.954102,0.434842] class=Point name=Unnamed dimension=2 values=[0.0478516,0.768176] class=Point name=Unnamed dimension=2 values=[0.547852,0.21262] class=Point name=Unnamed dimension=2 values=[0.297852,0.545953] class=Point name=Unnamed dimension=2 values=[0.797852,0.879287] class=Point name=Unnamed dimension=2 values=[0.172852,0.323731] class=Point name=Unnamed dimension=2 values=[0.672852,0.657064] class=Point name=Unnamed dimension=2 values=[0.422852,0.990398] class=Point name=Unnamed dimension=2 values=[0.922852,0.00685871] class=Point name=Unnamed dimension=2 values=[0.110352,0.340192] class=Point name=Unnamed dimension=2 values=[0.610352,0.673525] class=Point name=Unnamed dimension=2 values=[0.360352,0.11797] class=Point name=Unnamed dimension=2 values=[0.860352,0.451303] class=Point name=Unnamed dimension=2 values=[0.235352,0.784636] class=Point name=Unnamed dimension=2 values=[0.735352,0.229081] class=Point name=Unnamed dimension=2 values=[0.485352,0.562414] class=Point name=Unnamed dimension=2 values=[0.985352,0.895748] class=Point name=Unnamed dimension=2 values=[0.00878906,0.0438957] class=Point name=Unnamed dimension=2 values=[0.508789,0.377229] class=Point name=Unnamed dimension=2 values=[0.258789,0.710562] class=Point name=Unnamed dimension=2 values=[0.758789,0.155007] class=Point name=Unnamed dimension=2 values=[0.133789,0.48834] class=Point name=Unnamed dimension=2 values=[0.633789,0.821674] class=Point name=Unnamed dimension=2 values=[0.383789,0.266118] class=Point name=Unnamed dimension=2 values=[0.883789,0.599451] class=Point name=Unnamed dimension=2 values=[0.0712891,0.932785] class=Point name=Unnamed dimension=2 values=[0.571289,0.0809328] class=Point name=Unnamed dimension=2 values=[0.321289,0.414266] class=Point name=Unnamed dimension=2 values=[0.821289,0.747599] class=Point name=Unnamed dimension=2 values=[0.196289,0.192044] class=Point name=Unnamed dimension=2 values=[0.696289,0.525377] class=Point name=Unnamed dimension=2 values=[0.446289,0.858711] class=Point name=Unnamed dimension=2 values=[0.946289,0.303155] class=Point name=Unnamed dimension=2 values=[0.0400391,0.636488] class=Point name=Unnamed dimension=2 values=[0.540039,0.969822] class=Point name=Unnamed dimension=2 values=[0.290039,0.0192044] class=Point name=Unnamed dimension=2 values=[0.790039,0.352538] class=Point name=Unnamed dimension=2 values=[0.165039,0.685871] class=Point name=Unnamed dimension=2 values=[0.665039,0.130316] class=Point name=Unnamed dimension=2 values=[0.415039,0.463649] class=Point name=Unnamed dimension=2 values=[0.915039,0.796982] class=Point name=Unnamed dimension=2 values=[0.102539,0.241427] class=Point name=Unnamed dimension=2 values=[0.602539,0.57476] class=Point name=Unnamed dimension=2 values=[0.352539,0.908093] class=Point name=Unnamed dimension=2 values=[0.852539,0.0562414] class=Point name=Unnamed dimension=2 values=[0.227539,0.389575] class=Point name=Unnamed dimension=2 values=[0.727539,0.722908] class=Point name=Unnamed dimension=2 values=[0.477539,0.167353] class=Point name=Unnamed dimension=2 values=[0.977539,0.500686] class=Point name=Unnamed dimension=2 values=[0.0244141,0.834019] class=Point name=Unnamed dimension=2 values=[0.524414,0.278464] class=Point name=Unnamed dimension=2 values=[0.274414,0.611797] class=Point name=Unnamed dimension=2 values=[0.774414,0.94513] class=Point name=Unnamed dimension=2 values=[0.149414,0.0932785] class=Point name=Unnamed dimension=2 values=[0.649414,0.426612] class=Point name=Unnamed dimension=2 values=[0.399414,0.759945] class=Point name=Unnamed dimension=2 values=[0.899414,0.20439] class=Point name=Unnamed dimension=2 values=[0.0869141,0.537723] class=Point name=Unnamed dimension=2 values=[0.586914,0.871056] class=Point name=Unnamed dimension=2 values=[0.336914,0.315501] class=Point name=Unnamed dimension=2 values=[0.836914,0.648834] class=Point name=Unnamed dimension=2 values=[0.211914,0.982167] class=Point name=Unnamed dimension=2 values=[0.711914,0.0315501] class=Point name=Unnamed dimension=2 values=[0.461914,0.364883] class=Point name=Unnamed dimension=2 values=[0.961914,0.698217] class=Point name=Unnamed dimension=2 values=[0.0556641,0.142661] class=Point name=Unnamed dimension=2 values=[0.555664,0.475995] class=Point name=Unnamed dimension=2 values=[0.305664,0.809328] class=Point name=Unnamed dimension=2 values=[0.805664,0.253772] class=Point name=Unnamed dimension=2 values=[0.180664,0.587106] class=Point name=Unnamed dimension=2 values=[0.680664,0.920439] class=Point name=Unnamed dimension=2 values=[0.430664,0.0685871] class=Point name=Unnamed dimension=2 values=[0.930664,0.40192] class=Point name=Unnamed dimension=2 values=[0.118164,0.735254] class=Point name=Unnamed dimension=2 values=[0.618164,0.179698] class=Point name=Unnamed dimension=2 values=[0.368164,0.513032] class=Point name=Unnamed dimension=2 values=[0.868164,0.846365] class=Point name=Unnamed dimension=2 values=[0.243164,0.290809] class=Point name=Unnamed dimension=2 values=[0.743164,0.624143] class=Point name=Unnamed dimension=2 values=[0.493164,0.957476] class=Point name=Unnamed dimension=2 values=[0.993164,0.105624] class=Point name=Unnamed dimension=2 values=[0.00488281,0.438957] class=Point name=Unnamed dimension=2 values=[0.504883,0.772291] class=Point name=Unnamed dimension=2 values=[0.254883,0.216735] class=Point name=Unnamed dimension=2 values=[0.754883,0.550069] class=Point name=Unnamed dimension=2 values=[0.129883,0.883402] class=Point name=Unnamed dimension=2 values=[0.629883,0.327846] class=Point name=Unnamed dimension=2 values=[0.379883,0.66118] class=Point name=Unnamed dimension=2 values=[0.879883,0.994513] class=Point name=Unnamed dimension=2 values=[0.0673828,0.0109739] class=Point name=Unnamed dimension=2 values=[0.567383,0.344307] class=Point name=Unnamed dimension=2 values=[0.317383,0.677641] class=Point name=Unnamed dimension=2 values=[0.817383,0.122085] class=Point name=Unnamed dimension=2 values=[0.192383,0.455418] class=Point name=Unnamed dimension=2 values=[0.692383,0.788752] class=Point name=Unnamed dimension=2 values=[0.442383,0.233196] class=Point name=Unnamed dimension=2 values=[0.942383,0.566529] class=Point name=Unnamed dimension=2 values=[0.0361328,0.899863] class=Point name=Unnamed dimension=2 values=[0.536133,0.048011] class=Point name=Unnamed dimension=2 values=[0.286133,0.381344] class=Point name=Unnamed dimension=2 values=[0.786133,0.714678] class=Point name=Unnamed dimension=2 values=[0.161133,0.159122] class=Point name=Unnamed dimension=2 values=[0.661133,0.492455] class=Point name=Unnamed dimension=2 values=[0.411133,0.825789] class=Point name=Unnamed dimension=2 values=[0.911133,0.270233] class=Point name=Unnamed dimension=2 values=[0.0986328,0.603567] class=Point name=Unnamed dimension=2 values=[0.598633,0.9369] class=Point name=Unnamed dimension=2 values=[0.348633,0.085048] class=Point name=Unnamed dimension=2 values=[0.848633,0.418381] class=Point name=Unnamed dimension=2 values=[0.223633,0.751715] class=Point name=Unnamed dimension=2 values=[0.723633,0.196159] class=Point name=Unnamed dimension=2 values=[0.473633,0.529492] class=Point name=Unnamed dimension=2 values=[0.973633,0.862826] class=Point name=Unnamed dimension=2 values=[0.0205078,0.30727] class=Point name=Unnamed dimension=2 values=[0.520508,0.640604] class=Point name=Unnamed dimension=2 values=[0.270508,0.973937] class=Point name=Unnamed dimension=2 values=[0.770508,0.0233196] class=Point name=Unnamed dimension=2 values=[0.145508,0.356653] class=Point name=Unnamed dimension=2 values=[0.645508,0.689986] class=Point name=Unnamed dimension=2 values=[0.395508,0.134431] class=Point name=Unnamed dimension=2 values=[0.895508,0.467764] class=Point name=Unnamed dimension=2 values=[0.0830078,0.801097] class=Point name=Unnamed dimension=2 values=[0.583008,0.245542] class=Point name=Unnamed dimension=2 values=[0.333008,0.578875] class=Point name=Unnamed dimension=2 values=[0.833008,0.912209] class=Point name=Unnamed dimension=2 values=[0.208008,0.0603567] class=Point name=Unnamed dimension=2 values=[0.708008,0.39369] class=Point name=Unnamed dimension=2 values=[0.458008,0.727023] class=Point name=Unnamed dimension=2 values=[0.958008,0.171468] class=Point name=Unnamed dimension=2 values=[0.0517578,0.504801] class=Point name=Unnamed dimension=2 values=[0.551758,0.838134] class=Point name=Unnamed dimension=2 values=[0.301758,0.282579] class=Point name=Unnamed dimension=2 values=[0.801758,0.615912] class=Point name=Unnamed dimension=2 values=[0.176758,0.949246] class=Point name=Unnamed dimension=2 values=[0.676758,0.0973937] class=Point name=Unnamed dimension=2 values=[0.426758,0.430727] class=Point name=Unnamed dimension=2 values=[0.926758,0.76406] class=Point name=Unnamed dimension=2 values=[0.114258,0.208505] class=Point name=Unnamed dimension=2 values=[0.614258,0.541838] class=Point name=Unnamed dimension=2 values=[0.364258,0.875171] class=Point name=Unnamed dimension=2 values=[0.864258,0.319616] class=Point name=Unnamed dimension=2 values=[0.239258,0.652949] class=Point name=Unnamed dimension=2 values=[0.739258,0.986283] class=Point name=Unnamed dimension=2 values=[0.489258,0.0356653] class=Point name=Unnamed dimension=2 values=[0.989258,0.368999] class=Point name=Unnamed dimension=2 values=[0.0126953,0.702332] class=Point name=Unnamed dimension=2 values=[0.512695,0.146776] class=Point name=Unnamed dimension=2 values=[0.262695,0.48011] class=Point name=Unnamed dimension=2 values=[0.762695,0.813443] class=Point name=Unnamed dimension=2 values=[0.137695,0.257888] class=Point name=Unnamed dimension=2 values=[0.637695,0.591221] class=Point name=Unnamed dimension=2 values=[0.387695,0.924554] class=Point name=Unnamed dimension=2 values=[0.887695,0.0727023] class=Point name=Unnamed dimension=2 values=[0.0751953,0.406036] class=Point name=Unnamed dimension=2 values=[0.575195,0.739369] class=Point name=Unnamed dimension=2 values=[0.325195,0.183813] class=Point name=Unnamed dimension=2 values=[0.825195,0.517147] class=Point name=Unnamed dimension=2 values=[0.200195,0.85048] class=Point name=Unnamed dimension=2 values=[0.700195,0.294925] class=Point name=Unnamed dimension=2 values=[0.450195,0.628258] class=Point name=Unnamed dimension=2 values=[0.950195,0.961591] class=Point name=Unnamed dimension=2 values=[0.0439453,0.109739] class=Point name=Unnamed dimension=2 values=[0.543945,0.443073] class=Point name=Unnamed dimension=2 values=[0.293945,0.776406] class=Point name=Unnamed dimension=2 values=[0.793945,0.22085] class=Point name=Unnamed dimension=2 values=[0.168945,0.554184] class=Point name=Unnamed dimension=2 values=[0.668945,0.887517] class=Point name=Unnamed dimension=2 values=[0.418945,0.331962] class=Point name=Unnamed dimension=2 values=[0.918945,0.665295] class=Point name=Unnamed dimension=2 values=[0.106445,0.998628] class=Point name=Unnamed dimension=2 values=[0.606445,0.000457247] class=Point name=Unnamed dimension=2 values=[0.356445,0.333791] class=Point name=Unnamed dimension=2 values=[0.856445,0.667124] class=Point name=Unnamed dimension=2 values=[0.231445,0.111568] class=Point name=Unnamed dimension=2 values=[0.731445,0.444902] class=Point name=Unnamed dimension=2 values=[0.481445,0.778235] class=Point name=Unnamed dimension=2 values=[0.981445,0.222679] class=Point name=Unnamed dimension=2 values=[0.0283203,0.556013] class=Point name=Unnamed dimension=2 values=[0.52832,0.889346] class=Point name=Unnamed dimension=2 values=[0.27832,0.0374943] class=Point name=Unnamed dimension=2 values=[0.77832,0.370828] class=Point name=Unnamed dimension=2 values=[0.15332,0.704161] class=Point name=Unnamed dimension=2 values=[0.65332,0.148605] class=Point name=Unnamed dimension=2 values=[0.40332,0.481939] class=Point name=Unnamed dimension=2 values=[0.90332,0.815272] class=Point name=Unnamed dimension=2 values=[0.0908203,0.259717] class=Point name=Unnamed dimension=2 values=[0.59082,0.59305] class=Point name=Unnamed dimension=2 values=[0.34082,0.926383] class=Point name=Unnamed dimension=2 values=[0.84082,0.0745313] class=Point name=Unnamed dimension=2 values=[0.21582,0.407865] class=Point name=Unnamed dimension=2 values=[0.71582,0.741198] class=Point name=Unnamed dimension=2 values=[0.46582,0.185642] class=Point name=Unnamed dimension=2 values=[0.96582,0.518976] class=Point name=Unnamed dimension=2 values=[0.0595703,0.852309] class=Point name=Unnamed dimension=2 values=[0.55957,0.296754] class=Point name=Unnamed dimension=2 values=[0.30957,0.630087] class=Point name=Unnamed dimension=2 values=[0.80957,0.96342] class=Point name=Unnamed dimension=2 values=[0.18457,0.0128029] class=Point name=Unnamed dimension=2 values=[0.68457,0.346136] class=Point name=Unnamed dimension=2 values=[0.43457,0.67947] class=Point name=Unnamed dimension=2 values=[0.93457,0.123914] class=Point name=Unnamed dimension=2 values=[0.12207,0.457247] class=Point name=Unnamed dimension=2 values=[0.62207,0.790581] class=Point name=Unnamed dimension=2 values=[0.37207,0.235025] class=Point name=Unnamed dimension=2 values=[0.87207,0.568358] class=Point name=Unnamed dimension=2 values=[0.24707,0.901692] class=Point name=Unnamed dimension=2 values=[0.74707,0.04984] class=Point name=Unnamed dimension=2 values=[0.49707,0.383173] class=Point name=Unnamed dimension=2 values=[0.99707,0.716507] class=Point name=Unnamed dimension=2 values=[0.00292969,0.160951] class=Point name=Unnamed dimension=2 values=[0.50293,0.494284] class=Point name=Unnamed dimension=2 values=[0.25293,0.827618] class=Point name=Unnamed dimension=2 values=[0.75293,0.272062] class=Point name=Unnamed dimension=2 values=[0.12793,0.605396] class=Point name=Unnamed dimension=2 values=[0.62793,0.938729] class=Point name=Unnamed dimension=2 values=[0.37793,0.086877] class=Point name=Unnamed dimension=2 values=[0.87793,0.42021] class=Point name=Unnamed dimension=2 values=[0.0654297,0.753544] class=Point name=Unnamed dimension=2 values=[0.56543,0.197988] class=Point name=Unnamed dimension=2 values=[0.31543,0.531321] class=Point name=Unnamed dimension=2 values=[0.81543,0.864655] class=Point name=Unnamed dimension=2 values=[0.19043,0.309099] class=Point name=Unnamed dimension=2 values=[0.69043,0.642433] class=Point name=Unnamed dimension=2 values=[0.44043,0.975766] class=Point name=Unnamed dimension=2 values=[0.94043,0.0251486] class=Point name=Unnamed dimension=2 values=[0.0341797,0.358482] class=Point name=Unnamed dimension=2 values=[0.53418,0.691815] class=Point name=Unnamed dimension=2 values=[0.28418,0.13626] class=Point name=Unnamed dimension=2 values=[0.78418,0.469593] class=Point name=Unnamed dimension=2 values=[0.15918,0.802926] class=Point name=Unnamed dimension=2 values=[0.65918,0.247371] class=Point name=Unnamed dimension=2 values=[0.40918,0.580704] class=Point name=Unnamed dimension=2 values=[0.90918,0.914037] class=Point name=Unnamed dimension=2 values=[0.0966797,0.0621856] class=Point name=Unnamed dimension=2 values=[0.59668,0.395519] class=Point name=Unnamed dimension=2 values=[0.34668,0.728852] class=Point name=Unnamed dimension=2 values=[0.84668,0.173297] class=Point name=Unnamed dimension=2 values=[0.22168,0.50663] class=Point name=Unnamed dimension=2 values=[0.72168,0.839963] class=Point name=Unnamed dimension=2 values=[0.47168,0.284408] class=Point name=Unnamed dimension=2 values=[0.97168,0.617741] class=Point name=Unnamed dimension=2 values=[0.0185547,0.951075] class=Point name=Unnamed dimension=2 values=[0.518555,0.0992227] class=Point name=Unnamed dimension=2 values=[0.268555,0.432556] class=Point name=Unnamed dimension=2 values=[0.768555,0.765889] class=Point name=Unnamed dimension=2 values=[0.143555,0.210334] class=Point name=Unnamed dimension=2 values=[0.643555,0.543667] class=Point name=Unnamed dimension=2 values=[0.393555,0.877] class=Point name=Unnamed dimension=2 values=[0.893555,0.321445] class=Point name=Unnamed dimension=2 values=[0.0810547,0.654778] class=Point name=Unnamed dimension=2 values=[0.581055,0.988112] class=Point name=Unnamed dimension=2 values=[0.331055,0.00457247] class=Point name=Unnamed dimension=2 values=[0.831055,0.337906] class=Point name=Unnamed dimension=2 values=[0.206055,0.671239] class=Point name=Unnamed dimension=2 values=[0.706055,0.115684] class=Point name=Unnamed dimension=2 values=[0.456055,0.449017] class=Point name=Unnamed dimension=2 values=[0.956055,0.78235] class=Point name=Unnamed dimension=2 values=[0.0498047,0.226795] class=Point name=Unnamed dimension=2 values=[0.549805,0.560128] class=Point name=Unnamed dimension=2 values=[0.299805,0.893461] class=Point name=Unnamed dimension=2 values=[0.799805,0.0416095] class=Point name=Unnamed dimension=2 values=[0.174805,0.374943] class=Point name=Unnamed dimension=2 values=[0.674805,0.708276] class=Point name=Unnamed dimension=2 values=[0.424805,0.152721] class=Point name=Unnamed dimension=2 values=[0.924805,0.486054] class=Point name=Unnamed dimension=2 values=[0.112305,0.819387] class=Point name=Unnamed dimension=2 values=[0.612305,0.263832] class=Point name=Unnamed dimension=2 values=[0.362305,0.597165] class=Point name=Unnamed dimension=2 values=[0.862305,0.930498] class=Point name=Unnamed dimension=2 values=[0.237305,0.0786465] class=Point name=Unnamed dimension=2 values=[0.737305,0.41198] class=Point name=Unnamed dimension=2 values=[0.487305,0.745313] class=Point name=Unnamed dimension=2 values=[0.987305,0.189758] class=Point name=Unnamed dimension=2 values=[0.0107422,0.523091] class=Point name=Unnamed dimension=2 values=[0.510742,0.856424] class=Point name=Unnamed dimension=2 values=[0.260742,0.300869] class=Point name=Unnamed dimension=2 values=[0.760742,0.634202] class=Point name=Unnamed dimension=2 values=[0.135742,0.967535] class=Point name=Unnamed dimension=2 values=[0.635742,0.0169182] class=Point name=Unnamed dimension=2 values=[0.385742,0.350251] class=Point name=Unnamed dimension=2 values=[0.885742,0.683585] class=Point name=Unnamed dimension=2 values=[0.0732422,0.128029] class=Point name=Unnamed dimension=2 values=[0.573242,0.461363] class=Point name=Unnamed dimension=2 values=[0.323242,0.794696] class=Point name=Unnamed dimension=2 values=[0.823242,0.23914] class=Point name=Unnamed dimension=2 values=[0.198242,0.572474] class=Point name=Unnamed dimension=2 values=[0.698242,0.905807] class=Point name=Unnamed dimension=2 values=[0.448242,0.0539552] class=Point name=Unnamed dimension=2 values=[0.948242,0.387289] class=Point name=Unnamed dimension=2 values=[0.0419922,0.720622] class=Point name=Unnamed dimension=2 values=[0.541992,0.165066] class=Point name=Unnamed dimension=2 values=[0.291992,0.4984] class=Point name=Unnamed dimension=2 values=[0.791992,0.831733] class=Point name=Unnamed dimension=2 values=[0.166992,0.276177] class=Point name=Unnamed dimension=2 values=[0.666992,0.609511] class=Point name=Unnamed dimension=2 values=[0.416992,0.942844] class=Point name=Unnamed dimension=2 values=[0.916992,0.0909922] class=Point name=Unnamed dimension=2 values=[0.104492,0.424326] class=Point name=Unnamed dimension=2 values=[0.604492,0.757659] class=Point name=Unnamed dimension=2 values=[0.354492,0.202103] class=Point name=Unnamed dimension=2 values=[0.854492,0.535437] class=Point name=Unnamed dimension=2 values=[0.229492,0.86877] class=Point name=Unnamed dimension=2 values=[0.729492,0.313214] class=Point name=Unnamed dimension=2 values=[0.479492,0.646548] class=Point name=Unnamed dimension=2 values=[0.979492,0.979881] class=Point name=Unnamed dimension=2 values=[0.0263672,0.0292638] class=Point name=Unnamed dimension=2 values=[0.526367,0.362597] class=Point name=Unnamed dimension=2 values=[0.276367,0.69593] class=Point name=Unnamed dimension=2 values=[0.776367,0.140375] class=Point name=Unnamed dimension=2 values=[0.151367,0.473708] class=Point name=Unnamed dimension=2 values=[0.651367,0.807042] class=Point name=Unnamed dimension=2 values=[0.401367,0.251486] class=Point name=Unnamed dimension=2 values=[0.901367,0.584819] class=Point name=Unnamed dimension=2 values=[0.0888672,0.918153] class=Point name=Unnamed dimension=2 values=[0.588867,0.0663009] class=Point name=Unnamed dimension=2 values=[0.338867,0.399634] class=Point name=Unnamed dimension=2 values=[0.838867,0.732968] class=Point name=Unnamed dimension=2 values=[0.213867,0.177412] class=Point name=Unnamed dimension=2 values=[0.713867,0.510745] class=Point name=Unnamed dimension=2 values=[0.463867,0.844079] class=Point name=Unnamed dimension=2 values=[0.963867,0.288523] class=Point name=Unnamed dimension=2 values=[0.0576172,0.621856] class=Point name=Unnamed dimension=2 values=[0.557617,0.95519] class=Point name=Unnamed dimension=2 values=[0.307617,0.103338] class=Point name=Unnamed dimension=2 values=[0.807617,0.436671] class=Point name=Unnamed dimension=2 values=[0.182617,0.770005] class=Point name=Unnamed dimension=2 values=[0.682617,0.214449] class=Point name=Unnamed dimension=2 values=[0.432617,0.547782] class=Point name=Unnamed dimension=2 values=[0.932617,0.881116] class=Point name=Unnamed dimension=2 values=[0.120117,0.32556] class=Point name=Unnamed dimension=2 values=[0.620117,0.658893] class=Point name=Unnamed dimension=2 values=[0.370117,0.992227] class=Point name=Unnamed dimension=2 values=[0.870117,0.0086877] class=Point name=Unnamed dimension=2 values=[0.245117,0.342021] class=Point name=Unnamed dimension=2 values=[0.745117,0.675354] class=Point name=Unnamed dimension=2 values=[0.495117,0.119799] class=Point name=Unnamed dimension=2 values=[0.995117,0.453132] class=Point name=Unnamed dimension=2 values=[0.00683594,0.786465] class=Point name=Unnamed dimension=2 values=[0.506836,0.23091] class=Point name=Unnamed dimension=2 values=[0.256836,0.564243] class=Point name=Unnamed dimension=2 values=[0.756836,0.897577] class=Point name=Unnamed dimension=2 values=[0.131836,0.0457247] class=Point name=Unnamed dimension=2 values=[0.631836,0.379058] class=Point name=Unnamed dimension=2 values=[0.381836,0.712391] class=Point name=Unnamed dimension=2 values=[0.881836,0.156836] class=Point name=Unnamed dimension=2 values=[0.0693359,0.490169] class=Point name=Unnamed dimension=2 values=[0.569336,0.823503] class=Point name=Unnamed dimension=2 values=[0.319336,0.267947] class=Point name=Unnamed dimension=2 values=[0.819336,0.60128] class=Point name=Unnamed dimension=2 values=[0.194336,0.934614] class=Point name=Unnamed dimension=2 values=[0.694336,0.0827618] class=Point name=Unnamed dimension=2 values=[0.444336,0.416095] class=Point name=Unnamed dimension=2 values=[0.944336,0.749428] class=Point name=Unnamed dimension=2 values=[0.0380859,0.193873] class=Point name=Unnamed dimension=2 values=[0.538086,0.527206] class=Point name=Unnamed dimension=2 values=[0.288086,0.86054] class=Point name=Unnamed dimension=2 values=[0.788086,0.304984] class=Point name=Unnamed dimension=2 values=[0.163086,0.638317] class=Point name=Unnamed dimension=2 values=[0.663086,0.971651] class=Point name=Unnamed dimension=2 values=[0.413086,0.0210334] class=Point name=Unnamed dimension=2 values=[0.913086,0.354367] class=Point name=Unnamed dimension=2 values=[0.100586,0.6877] class=Point name=Unnamed dimension=2 values=[0.600586,0.132144] class=Point name=Unnamed dimension=2 values=[0.350586,0.465478] class=Point name=Unnamed dimension=2 values=[0.850586,0.798811] class=Point name=Unnamed dimension=2 values=[0.225586,0.243256] class=Point name=Unnamed dimension=2 values=[0.725586,0.576589] class=Point name=Unnamed dimension=2 values=[0.475586,0.909922] class=Point name=Unnamed dimension=2 values=[0.975586,0.0580704] class=Point name=Unnamed dimension=2 values=[0.0224609,0.391404] class=Point name=Unnamed dimension=2 values=[0.522461,0.724737] class=Point name=Unnamed dimension=2 values=[0.272461,0.169182] class=Point name=Unnamed dimension=2 values=[0.772461,0.502515] class=Point name=Unnamed dimension=2 values=[0.147461,0.835848] class=Point name=Unnamed dimension=2 values=[0.647461,0.280293] class=Point name=Unnamed dimension=2 values=[0.397461,0.613626] class=Point name=Unnamed dimension=2 values=[0.897461,0.946959] class=Point name=Unnamed dimension=2 values=[0.0849609,0.0951075] class=Point name=Unnamed dimension=2 values=[0.584961,0.428441] class=Point name=Unnamed dimension=2 values=[0.334961,0.761774] class=Point name=Unnamed dimension=2 values=[0.834961,0.206219] class=Point name=Unnamed dimension=2 values=[0.209961,0.539552] class=Point name=Unnamed dimension=2 values=[0.709961,0.872885] class=Point name=Unnamed dimension=2 values=[0.459961,0.31733] class=Point name=Unnamed dimension=2 values=[0.959961,0.650663] class=Point name=Unnamed dimension=2 values=[0.0537109,0.983996] class=Point name=Unnamed dimension=2 values=[0.553711,0.0333791] class=Point name=Unnamed dimension=2 values=[0.303711,0.366712] class=Point name=Unnamed dimension=2 values=[0.803711,0.700046] class=Point name=Unnamed dimension=2 values=[0.178711,0.14449] class=Point name=Unnamed dimension=2 values=[0.678711,0.477824] class=Point name=Unnamed dimension=2 values=[0.428711,0.811157] class=Point name=Unnamed dimension=2 values=[0.928711,0.255601] class=Point name=Unnamed dimension=2 values=[0.116211,0.588935] class=Point name=Unnamed dimension=2 values=[0.616211,0.922268] class=Point name=Unnamed dimension=2 values=[0.366211,0.0704161] class=Point name=Unnamed dimension=2 values=[0.866211,0.403749] class=Point name=Unnamed dimension=2 values=[0.241211,0.737083] class=Point name=Unnamed dimension=2 values=[0.741211,0.181527] class=Point name=Unnamed dimension=2 values=[0.491211,0.514861] class=Point name=Unnamed dimension=2 values=[0.991211,0.848194] class=Point name=Unnamed dimension=2 values=[0.0146484,0.292638] class=Point name=Unnamed dimension=2 values=[0.514648,0.625972] class=Point name=Unnamed dimension=2 values=[0.264648,0.959305] class=Point name=Unnamed dimension=2 values=[0.764648,0.107453] class=Point name=Unnamed dimension=2 values=[0.139648,0.440786] class=Point name=Unnamed dimension=2 values=[0.639648,0.77412] class=Point name=Unnamed dimension=2 values=[0.389648,0.218564] class=Point name=Unnamed dimension=2 values=[0.889648,0.551898] class=Point name=Unnamed dimension=2 values=[0.0771484,0.885231] class=Point name=Unnamed dimension=2 values=[0.577148,0.329675] class=Point name=Unnamed dimension=2 values=[0.327148,0.663009] class=Point name=Unnamed dimension=2 values=[0.827148,0.996342] class=Point name=Unnamed dimension=2 values=[0.202148,0.00182899] class=Point name=Unnamed dimension=2 values=[0.702148,0.335162] class=Point name=Unnamed dimension=2 values=[0.452148,0.668496] class=Point name=Unnamed dimension=2 values=[0.952148,0.11294] class=Point name=Unnamed dimension=2 values=[0.0458984,0.446273] class=Point name=Unnamed dimension=2 values=[0.545898,0.779607] class=Point name=Unnamed dimension=2 values=[0.295898,0.224051] class=Point name=Unnamed dimension=2 values=[0.795898,0.557385] class=Point name=Unnamed dimension=2 values=[0.170898,0.890718] class=Point name=Unnamed dimension=2 values=[0.670898,0.038866] class=Point name=Unnamed dimension=2 values=[0.420898,0.372199] class=Point name=Unnamed dimension=2 values=[0.920898,0.705533] class=Point name=Unnamed dimension=2 values=[0.108398,0.149977] class=Point name=Unnamed dimension=2 values=[0.608398,0.48331] class=Point name=Unnamed dimension=2 values=[0.358398,0.816644] class=Point name=Unnamed dimension=2 values=[0.858398,0.261088] class=Point name=Unnamed dimension=2 values=[0.233398,0.594422] class=Point name=Unnamed dimension=2 values=[0.733398,0.927755] class=Point name=Unnamed dimension=2 values=[0.483398,0.0759031] class=Point name=Unnamed dimension=2 values=[0.983398,0.409236] class=Point name=Unnamed dimension=2 values=[0.0302734,0.74257] class=Point name=Unnamed dimension=2 values=[0.530273,0.187014] class=Point name=Unnamed dimension=2 values=[0.280273,0.520348] class=Point name=Unnamed dimension=2 values=[0.780273,0.853681] class=Point name=Unnamed dimension=2 values=[0.155273,0.298125] class=Point name=Unnamed dimension=2 values=[0.655273,0.631459] class=Point name=Unnamed dimension=2 values=[0.405273,0.964792] class=Point name=Unnamed dimension=2 values=[0.905273,0.0141747] class=Point name=Unnamed dimension=2 values=[0.0927734,0.347508] sample size=1000 relative error to Pi=0.00203952 openturns-1.9/lib/test/t_HaselgroveSequence_std.cxx000066400000000000000000000043221307543307100226620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Haselgrove' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a Haselgrove sequence HaselgroveSequence sequence(15); fullprint << sequence << std::endl; // Create a numerical sample of the sequence Sample haselgroveSample(sequence.generate(10)); fullprint << haselgroveSample << std::endl; // Create another Haselgrove' sequence of dimension 2 to estimate Pi in [0; 1)^2 UnsignedInteger dimension = 2; sequence = HaselgroveSequence(dimension); UnsignedInteger pointInsideCircle = 0; UnsignedInteger sampleSize = 1000; for(UnsignedInteger i = 0; i < sampleSize; ++i) { Point haselgrovePoint(sequence.generate()); fullprint << haselgrovePoint << std::endl; if(haselgrovePoint.norm() < 1.0) ++ pointInsideCircle; } Scalar probabilityEstimate = 1.0 * pointInsideCircle / sampleSize; Scalar probability = M_PI / 4.0; Scalar relativeError = std::abs(probability - probabilityEstimate) / probability; fullprint << "sample size=" << sampleSize << std::endl; fullprint << "relative error to Pi=" << relativeError << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HaselgroveSequence_std.expout000066400000000000000000002004011307543307100234000ustar00rootroot00000000000000class=HaselgroveSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=class=Point name=Unnamed dimension=15 values=[1.41421,1.73205,2.23607,2.64575,3.31662,3.60555,4.12311,4.3589,4.79583,5.38516,5.56776,6.08276,6.40312,6.55744,6.85565] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.414214,0.732051,0.236068,0.645751,0.316625,0.605551,0.123106,0.358899,0.795832,0.385165,0.567764,0.0827625,0.403124,0.557439,0.855655],[0.828427,0.464102,0.472136,0.291503,0.63325,0.211103,0.246211,0.717798,0.591663,0.77033,0.135529,0.165525,0.806248,0.114877,0.711309],[0.242641,0.196152,0.708204,0.937254,0.949874,0.816654,0.369317,0.0766968,0.387495,0.155494,0.703293,0.248288,0.209373,0.672316,0.566964],[0.656854,0.928203,0.944272,0.583005,0.266499,0.422205,0.492423,0.435596,0.183326,0.540659,0.271057,0.33105,0.612497,0.229754,0.422618],[0.0710678,0.660254,0.18034,0.228757,0.583124,0.0277564,0.615528,0.794495,0.979158,0.925824,0.838822,0.413813,0.0156212,0.787193,0.278273],[0.485281,0.392305,0.416408,0.874508,0.899749,0.633308,0.738634,0.153394,0.774989,0.310989,0.406586,0.496575,0.418745,0.344631,0.133928],[0.899495,0.124356,0.652476,0.520259,0.216374,0.238859,0.861739,0.512293,0.570821,0.696154,0.974351,0.579338,0.82187,0.90207,0.989582],[0.313708,0.856406,0.888544,0.16601,0.532998,0.84441,0.984845,0.871192,0.366652,0.0813185,0.542115,0.6621,0.224994,0.459508,0.845237],[0.727922,0.588457,0.124612,0.811762,0.849623,0.449961,0.107951,0.23009,0.162484,0.466483,0.109879,0.744863,0.628118,0.0169467,0.700891],[0.142136,0.320508,0.36068,0.457513,0.166248,0.0555128,0.231056,0.588989,0.958315,0.851648,0.677644,0.827625,0.0312424,0.574385,0.556546]] class=Point name=Unnamed dimension=2 values=[0.414214,0.732051] class=Point name=Unnamed dimension=2 values=[0.828427,0.464102] class=Point name=Unnamed dimension=2 values=[0.242641,0.196152] class=Point name=Unnamed dimension=2 values=[0.656854,0.928203] class=Point name=Unnamed dimension=2 values=[0.0710678,0.660254] class=Point name=Unnamed dimension=2 values=[0.485281,0.392305] class=Point name=Unnamed dimension=2 values=[0.899495,0.124356] class=Point name=Unnamed dimension=2 values=[0.313708,0.856406] class=Point name=Unnamed dimension=2 values=[0.727922,0.588457] class=Point name=Unnamed dimension=2 values=[0.142136,0.320508] class=Point name=Unnamed dimension=2 values=[0.556349,0.0525589] class=Point name=Unnamed dimension=2 values=[0.970563,0.78461] class=Point name=Unnamed dimension=2 values=[0.384776,0.51666] class=Point name=Unnamed dimension=2 values=[0.79899,0.248711] class=Point name=Unnamed dimension=2 values=[0.213203,0.980762] class=Point name=Unnamed dimension=2 values=[0.627417,0.712813] class=Point name=Unnamed dimension=2 values=[0.0416306,0.444864] class=Point name=Unnamed dimension=2 values=[0.455844,0.176915] class=Point name=Unnamed dimension=2 values=[0.870058,0.908965] class=Point name=Unnamed dimension=2 values=[0.284271,0.641016] class=Point name=Unnamed dimension=2 values=[0.698485,0.373067] class=Point name=Unnamed dimension=2 values=[0.112698,0.105118] class=Point name=Unnamed dimension=2 values=[0.526912,0.837169] class=Point name=Unnamed dimension=2 values=[0.941125,0.569219] class=Point name=Unnamed dimension=2 values=[0.355339,0.30127] class=Point name=Unnamed dimension=2 values=[0.769553,0.033321] class=Point name=Unnamed dimension=2 values=[0.183766,0.765372] class=Point name=Unnamed dimension=2 values=[0.59798,0.497423] class=Point name=Unnamed dimension=2 values=[0.0121933,0.229473] class=Point name=Unnamed dimension=2 values=[0.426407,0.961524] class=Point name=Unnamed dimension=2 values=[0.84062,0.693575] class=Point name=Unnamed dimension=2 values=[0.254834,0.425626] class=Point name=Unnamed dimension=2 values=[0.669048,0.157677] class=Point name=Unnamed dimension=2 values=[0.0832611,0.889727] class=Point name=Unnamed dimension=2 values=[0.497475,0.621778] class=Point name=Unnamed dimension=2 values=[0.911688,0.353829] class=Point name=Unnamed dimension=2 values=[0.325902,0.0858799] class=Point name=Unnamed dimension=2 values=[0.740115,0.817931] class=Point name=Unnamed dimension=2 values=[0.154329,0.549981] class=Point name=Unnamed dimension=2 values=[0.568542,0.282032] class=Point name=Unnamed dimension=2 values=[0.982756,0.0140831] class=Point name=Unnamed dimension=2 values=[0.39697,0.746134] class=Point name=Unnamed dimension=2 values=[0.811183,0.478185] class=Point name=Unnamed dimension=2 values=[0.225397,0.210236] class=Point name=Unnamed dimension=2 values=[0.63961,0.942286] class=Point name=Unnamed dimension=2 values=[0.0538239,0.674337] class=Point name=Unnamed dimension=2 values=[0.468037,0.406388] class=Point name=Unnamed dimension=2 values=[0.882251,0.138439] class=Point name=Unnamed dimension=2 values=[0.296465,0.87049] class=Point name=Unnamed dimension=2 values=[0.710678,0.60254] class=Point name=Unnamed dimension=2 values=[0.124892,0.334591] class=Point name=Unnamed dimension=2 values=[0.539105,0.066642] class=Point name=Unnamed dimension=2 values=[0.953319,0.798693] class=Point name=Unnamed dimension=2 values=[0.367532,0.530744] class=Point name=Unnamed dimension=2 values=[0.781746,0.262794] class=Point name=Unnamed dimension=2 values=[0.195959,0.994845] class=Point name=Unnamed dimension=2 values=[0.610173,0.726896] class=Point name=Unnamed dimension=2 values=[0.0243866,0.458947] class=Point name=Unnamed dimension=2 values=[0.4386,0.190998] class=Point name=Unnamed dimension=2 values=[0.852814,0.923048] class=Point name=Unnamed dimension=2 values=[0.267027,0.655099] class=Point name=Unnamed dimension=2 values=[0.681241,0.38715] class=Point name=Unnamed dimension=2 values=[0.0954544,0.119201] class=Point name=Unnamed dimension=2 values=[0.509668,0.851252] class=Point name=Unnamed dimension=2 values=[0.923882,0.583302] class=Point name=Unnamed dimension=2 values=[0.338095,0.315353] class=Point name=Unnamed dimension=2 values=[0.752309,0.0474041] class=Point name=Unnamed dimension=2 values=[0.166522,0.779455] class=Point name=Unnamed dimension=2 values=[0.580736,0.511506] class=Point name=Unnamed dimension=2 values=[0.994949,0.243557] class=Point name=Unnamed dimension=2 values=[0.409163,0.975607] class=Point name=Unnamed dimension=2 values=[0.823376,0.707658] class=Point name=Unnamed dimension=2 values=[0.23759,0.439709] class=Point name=Unnamed dimension=2 values=[0.651804,0.17176] class=Point name=Unnamed dimension=2 values=[0.0660172,0.903811] class=Point name=Unnamed dimension=2 values=[0.480231,0.635861] class=Point name=Unnamed dimension=2 values=[0.894444,0.367912] class=Point name=Unnamed dimension=2 values=[0.308658,0.099963] class=Point name=Unnamed dimension=2 values=[0.722871,0.832014] class=Point name=Unnamed dimension=2 values=[0.137085,0.564065] class=Point name=Unnamed dimension=2 values=[0.551299,0.296115] class=Point name=Unnamed dimension=2 values=[0.965512,0.0281662] class=Point name=Unnamed dimension=2 values=[0.379726,0.760217] class=Point name=Unnamed dimension=2 values=[0.793939,0.492268] class=Point name=Unnamed dimension=2 values=[0.208153,0.224319] class=Point name=Unnamed dimension=2 values=[0.622366,0.956369] class=Point name=Unnamed dimension=2 values=[0.0365799,0.68842] class=Point name=Unnamed dimension=2 values=[0.450793,0.420471] class=Point name=Unnamed dimension=2 values=[0.865007,0.152522] class=Point name=Unnamed dimension=2 values=[0.279221,0.884573] class=Point name=Unnamed dimension=2 values=[0.693434,0.616623] class=Point name=Unnamed dimension=2 values=[0.107648,0.348674] class=Point name=Unnamed dimension=2 values=[0.521861,0.0807251] class=Point name=Unnamed dimension=2 values=[0.936075,0.812776] class=Point name=Unnamed dimension=2 values=[0.350288,0.544827] class=Point name=Unnamed dimension=2 values=[0.764502,0.276878] class=Point name=Unnamed dimension=2 values=[0.178716,0.00892833] class=Point name=Unnamed dimension=2 values=[0.592929,0.740979] class=Point name=Unnamed dimension=2 values=[0.00714267,0.47303] class=Point name=Unnamed dimension=2 values=[0.421356,0.205081] class=Point name=Unnamed dimension=2 values=[0.83557,0.937132] class=Point name=Unnamed dimension=2 values=[0.249783,0.669182] class=Point name=Unnamed dimension=2 values=[0.663997,0.401233] class=Point name=Unnamed dimension=2 values=[0.0782105,0.133284] class=Point name=Unnamed dimension=2 values=[0.492424,0.865335] class=Point name=Unnamed dimension=2 values=[0.906638,0.597386] class=Point name=Unnamed dimension=2 values=[0.320851,0.329436] class=Point name=Unnamed dimension=2 values=[0.735065,0.0614872] class=Point name=Unnamed dimension=2 values=[0.149278,0.793538] class=Point name=Unnamed dimension=2 values=[0.563492,0.525589] class=Point name=Unnamed dimension=2 values=[0.977705,0.25764] class=Point name=Unnamed dimension=2 values=[0.391919,0.98969] class=Point name=Unnamed dimension=2 values=[0.806133,0.721741] class=Point name=Unnamed dimension=2 values=[0.220346,0.453792] class=Point name=Unnamed dimension=2 values=[0.63456,0.185843] class=Point name=Unnamed dimension=2 values=[0.0487732,0.917894] class=Point name=Unnamed dimension=2 values=[0.462987,0.649944] class=Point name=Unnamed dimension=2 values=[0.8772,0.381995] class=Point name=Unnamed dimension=2 values=[0.291414,0.114046] class=Point name=Unnamed dimension=2 values=[0.705627,0.846097] class=Point name=Unnamed dimension=2 values=[0.119841,0.578148] class=Point name=Unnamed dimension=2 values=[0.534055,0.310199] class=Point name=Unnamed dimension=2 values=[0.948268,0.0422493] class=Point name=Unnamed dimension=2 values=[0.362482,0.7743] class=Point name=Unnamed dimension=2 values=[0.776695,0.506351] class=Point name=Unnamed dimension=2 values=[0.190909,0.238402] class=Point name=Unnamed dimension=2 values=[0.605122,0.970453] class=Point name=Unnamed dimension=2 values=[0.019336,0.702503] class=Point name=Unnamed dimension=2 values=[0.43355,0.434554] class=Point name=Unnamed dimension=2 values=[0.847763,0.166605] class=Point name=Unnamed dimension=2 values=[0.261977,0.898656] class=Point name=Unnamed dimension=2 values=[0.67619,0.630707] class=Point name=Unnamed dimension=2 values=[0.0904038,0.362757] class=Point name=Unnamed dimension=2 values=[0.504617,0.0948082] class=Point name=Unnamed dimension=2 values=[0.918831,0.826859] class=Point name=Unnamed dimension=2 values=[0.333044,0.55891] class=Point name=Unnamed dimension=2 values=[0.747258,0.290961] class=Point name=Unnamed dimension=2 values=[0.161472,0.0230114] class=Point name=Unnamed dimension=2 values=[0.575685,0.755062] class=Point name=Unnamed dimension=2 values=[0.989899,0.487113] class=Point name=Unnamed dimension=2 values=[0.404112,0.219164] class=Point name=Unnamed dimension=2 values=[0.818326,0.951215] class=Point name=Unnamed dimension=2 values=[0.232539,0.683265] class=Point name=Unnamed dimension=2 values=[0.646753,0.415316] class=Point name=Unnamed dimension=2 values=[0.0609665,0.147367] class=Point name=Unnamed dimension=2 values=[0.47518,0.879418] class=Point name=Unnamed dimension=2 values=[0.889394,0.611469] class=Point name=Unnamed dimension=2 values=[0.303607,0.34352] class=Point name=Unnamed dimension=2 values=[0.717821,0.0755703] class=Point name=Unnamed dimension=2 values=[0.132034,0.807621] class=Point name=Unnamed dimension=2 values=[0.546248,0.539672] class=Point name=Unnamed dimension=2 values=[0.960461,0.271723] class=Point name=Unnamed dimension=2 values=[0.374675,0.00377356] class=Point name=Unnamed dimension=2 values=[0.788889,0.735824] class=Point name=Unnamed dimension=2 values=[0.203102,0.467875] class=Point name=Unnamed dimension=2 values=[0.617316,0.199926] class=Point name=Unnamed dimension=2 values=[0.0315293,0.931977] class=Point name=Unnamed dimension=2 values=[0.445743,0.664028] class=Point name=Unnamed dimension=2 values=[0.859956,0.396078] class=Point name=Unnamed dimension=2 values=[0.27417,0.128129] class=Point name=Unnamed dimension=2 values=[0.688384,0.86018] class=Point name=Unnamed dimension=2 values=[0.102597,0.592231] class=Point name=Unnamed dimension=2 values=[0.516811,0.324282] class=Point name=Unnamed dimension=2 values=[0.931024,0.0563324] class=Point name=Unnamed dimension=2 values=[0.345238,0.788383] class=Point name=Unnamed dimension=2 values=[0.759451,0.520434] class=Point name=Unnamed dimension=2 values=[0.173665,0.252485] class=Point name=Unnamed dimension=2 values=[0.587878,0.984536] class=Point name=Unnamed dimension=2 values=[0.00209204,0.716586] class=Point name=Unnamed dimension=2 values=[0.416306,0.448637] class=Point name=Unnamed dimension=2 values=[0.830519,0.180688] class=Point name=Unnamed dimension=2 values=[0.244733,0.912739] class=Point name=Unnamed dimension=2 values=[0.658946,0.64479] class=Point name=Unnamed dimension=2 values=[0.0731599,0.376841] class=Point name=Unnamed dimension=2 values=[0.487373,0.108891] class=Point name=Unnamed dimension=2 values=[0.901587,0.840942] class=Point name=Unnamed dimension=2 values=[0.315801,0.572993] class=Point name=Unnamed dimension=2 values=[0.730014,0.305044] class=Point name=Unnamed dimension=2 values=[0.144228,0.0370946] class=Point name=Unnamed dimension=2 values=[0.558441,0.769145] class=Point name=Unnamed dimension=2 values=[0.972655,0.501196] class=Point name=Unnamed dimension=2 values=[0.386868,0.233247] class=Point name=Unnamed dimension=2 values=[0.801082,0.965298] class=Point name=Unnamed dimension=2 values=[0.215295,0.697349] class=Point name=Unnamed dimension=2 values=[0.629509,0.429399] class=Point name=Unnamed dimension=2 values=[0.0437226,0.16145] class=Point name=Unnamed dimension=2 values=[0.457936,0.893501] class=Point name=Unnamed dimension=2 values=[0.87215,0.625552] class=Point name=Unnamed dimension=2 values=[0.286363,0.357603] class=Point name=Unnamed dimension=2 values=[0.700577,0.0896534] class=Point name=Unnamed dimension=2 values=[0.11479,0.821704] class=Point name=Unnamed dimension=2 values=[0.529004,0.553755] class=Point name=Unnamed dimension=2 values=[0.943218,0.285806] class=Point name=Unnamed dimension=2 values=[0.357431,0.0178567] class=Point name=Unnamed dimension=2 values=[0.771645,0.749907] class=Point name=Unnamed dimension=2 values=[0.185858,0.481958] class=Point name=Unnamed dimension=2 values=[0.600072,0.214009] class=Point name=Unnamed dimension=2 values=[0.0142853,0.94606] class=Point name=Unnamed dimension=2 values=[0.428499,0.678111] class=Point name=Unnamed dimension=2 values=[0.842712,0.410162] class=Point name=Unnamed dimension=2 values=[0.256926,0.142212] class=Point name=Unnamed dimension=2 values=[0.67114,0.874263] class=Point name=Unnamed dimension=2 values=[0.0853532,0.606314] class=Point name=Unnamed dimension=2 values=[0.499567,0.338365] class=Point name=Unnamed dimension=2 values=[0.91378,0.0704156] class=Point name=Unnamed dimension=2 values=[0.327994,0.802466] class=Point name=Unnamed dimension=2 values=[0.742207,0.534517] class=Point name=Unnamed dimension=2 values=[0.156421,0.266568] class=Point name=Unnamed dimension=2 values=[0.570635,0.998619] class=Point name=Unnamed dimension=2 values=[0.984848,0.73067] class=Point name=Unnamed dimension=2 values=[0.399062,0.46272] class=Point name=Unnamed dimension=2 values=[0.813275,0.194771] class=Point name=Unnamed dimension=2 values=[0.227489,0.926822] class=Point name=Unnamed dimension=2 values=[0.641702,0.658873] class=Point name=Unnamed dimension=2 values=[0.0559159,0.390924] class=Point name=Unnamed dimension=2 values=[0.470129,0.122974] class=Point name=Unnamed dimension=2 values=[0.884343,0.855025] class=Point name=Unnamed dimension=2 values=[0.298557,0.587076] class=Point name=Unnamed dimension=2 values=[0.71277,0.319127] class=Point name=Unnamed dimension=2 values=[0.126984,0.0511777] class=Point name=Unnamed dimension=2 values=[0.541197,0.783228] class=Point name=Unnamed dimension=2 values=[0.955411,0.515279] class=Point name=Unnamed dimension=2 values=[0.369624,0.24733] class=Point name=Unnamed dimension=2 values=[0.783838,0.979381] class=Point name=Unnamed dimension=2 values=[0.198052,0.711432] class=Point name=Unnamed dimension=2 values=[0.612265,0.443483] class=Point name=Unnamed dimension=2 values=[0.0264787,0.175533] class=Point name=Unnamed dimension=2 values=[0.440692,0.907584] class=Point name=Unnamed dimension=2 values=[0.854906,0.639635] class=Point name=Unnamed dimension=2 values=[0.269119,0.371686] class=Point name=Unnamed dimension=2 values=[0.683333,0.103737] class=Point name=Unnamed dimension=2 values=[0.0975465,0.835787] class=Point name=Unnamed dimension=2 values=[0.51176,0.567838] class=Point name=Unnamed dimension=2 values=[0.925974,0.299889] class=Point name=Unnamed dimension=2 values=[0.340187,0.0319398] class=Point name=Unnamed dimension=2 values=[0.754401,0.763991] class=Point name=Unnamed dimension=2 values=[0.168614,0.496041] class=Point name=Unnamed dimension=2 values=[0.582828,0.228092] class=Point name=Unnamed dimension=2 values=[0.997041,0.960143] class=Point name=Unnamed dimension=2 values=[0.411255,0.692194] class=Point name=Unnamed dimension=2 values=[0.825469,0.424245] class=Point name=Unnamed dimension=2 values=[0.239682,0.156295] class=Point name=Unnamed dimension=2 values=[0.653896,0.888346] class=Point name=Unnamed dimension=2 values=[0.0681092,0.620397] class=Point name=Unnamed dimension=2 values=[0.482323,0.352448] class=Point name=Unnamed dimension=2 values=[0.896536,0.0844987] class=Point name=Unnamed dimension=2 values=[0.31075,0.816549] class=Point name=Unnamed dimension=2 values=[0.724963,0.5486] class=Point name=Unnamed dimension=2 values=[0.139177,0.280651] class=Point name=Unnamed dimension=2 values=[0.553391,0.0127019] class=Point name=Unnamed dimension=2 values=[0.967604,0.744753] class=Point name=Unnamed dimension=2 values=[0.381818,0.476804] class=Point name=Unnamed dimension=2 values=[0.796031,0.208854] class=Point name=Unnamed dimension=2 values=[0.210245,0.940905] class=Point name=Unnamed dimension=2 values=[0.624458,0.672956] class=Point name=Unnamed dimension=2 values=[0.038672,0.405007] class=Point name=Unnamed dimension=2 values=[0.452886,0.137058] class=Point name=Unnamed dimension=2 values=[0.867099,0.869108] class=Point name=Unnamed dimension=2 values=[0.281313,0.601159] class=Point name=Unnamed dimension=2 values=[0.695526,0.33321] class=Point name=Unnamed dimension=2 values=[0.10974,0.0652608] class=Point name=Unnamed dimension=2 values=[0.523953,0.797312] class=Point name=Unnamed dimension=2 values=[0.938167,0.529362] class=Point name=Unnamed dimension=2 values=[0.35238,0.261413] class=Point name=Unnamed dimension=2 values=[0.766594,0.993464] class=Point name=Unnamed dimension=2 values=[0.180808,0.725515] class=Point name=Unnamed dimension=2 values=[0.595021,0.457566] class=Point name=Unnamed dimension=2 values=[0.00923472,0.189616] class=Point name=Unnamed dimension=2 values=[0.423448,0.921667] class=Point name=Unnamed dimension=2 values=[0.837662,0.653718] class=Point name=Unnamed dimension=2 values=[0.251875,0.385769] class=Point name=Unnamed dimension=2 values=[0.666089,0.11782] class=Point name=Unnamed dimension=2 values=[0.0803025,0.84987] class=Point name=Unnamed dimension=2 values=[0.494516,0.581921] class=Point name=Unnamed dimension=2 values=[0.90873,0.313972] class=Point name=Unnamed dimension=2 values=[0.322943,0.0460229] class=Point name=Unnamed dimension=2 values=[0.737157,0.778074] class=Point name=Unnamed dimension=2 values=[0.15137,0.510125] class=Point name=Unnamed dimension=2 values=[0.565584,0.242175] class=Point name=Unnamed dimension=2 values=[0.979797,0.974226] class=Point name=Unnamed dimension=2 values=[0.394011,0.706277] class=Point name=Unnamed dimension=2 values=[0.808225,0.438328] class=Point name=Unnamed dimension=2 values=[0.222438,0.170379] class=Point name=Unnamed dimension=2 values=[0.636652,0.902429] class=Point name=Unnamed dimension=2 values=[0.0508653,0.63448] class=Point name=Unnamed dimension=2 values=[0.465079,0.366531] class=Point name=Unnamed dimension=2 values=[0.879292,0.0985818] class=Point name=Unnamed dimension=2 values=[0.293506,0.830633] class=Point name=Unnamed dimension=2 values=[0.70772,0.562683] class=Point name=Unnamed dimension=2 values=[0.121933,0.294734] class=Point name=Unnamed dimension=2 values=[0.536147,0.026785] class=Point name=Unnamed dimension=2 values=[0.95036,0.758836] class=Point name=Unnamed dimension=2 values=[0.364574,0.490887] class=Point name=Unnamed dimension=2 values=[0.778787,0.222937] class=Point name=Unnamed dimension=2 values=[0.193001,0.954988] class=Point name=Unnamed dimension=2 values=[0.607214,0.687039] class=Point name=Unnamed dimension=2 values=[0.021428,0.41909] class=Point name=Unnamed dimension=2 values=[0.435642,0.151141] class=Point name=Unnamed dimension=2 values=[0.849855,0.883191] class=Point name=Unnamed dimension=2 values=[0.264069,0.615242] class=Point name=Unnamed dimension=2 values=[0.678282,0.347293] class=Point name=Unnamed dimension=2 values=[0.0924958,0.0793439] class=Point name=Unnamed dimension=2 values=[0.506709,0.811395] class=Point name=Unnamed dimension=2 values=[0.920923,0.543446] class=Point name=Unnamed dimension=2 values=[0.335137,0.275496] class=Point name=Unnamed dimension=2 values=[0.74935,0.00754712] class=Point name=Unnamed dimension=2 values=[0.163564,0.739598] class=Point name=Unnamed dimension=2 values=[0.577777,0.471649] class=Point name=Unnamed dimension=2 values=[0.991991,0.2037] class=Point name=Unnamed dimension=2 values=[0.406204,0.93575] class=Point name=Unnamed dimension=2 values=[0.820418,0.667801] class=Point name=Unnamed dimension=2 values=[0.234631,0.399852] class=Point name=Unnamed dimension=2 values=[0.648845,0.131903] class=Point name=Unnamed dimension=2 values=[0.0630586,0.863954] class=Point name=Unnamed dimension=2 values=[0.477272,0.596004] class=Point name=Unnamed dimension=2 values=[0.891486,0.328055] class=Point name=Unnamed dimension=2 values=[0.305699,0.060106] class=Point name=Unnamed dimension=2 values=[0.719913,0.792157] class=Point name=Unnamed dimension=2 values=[0.134126,0.524208] class=Point name=Unnamed dimension=2 values=[0.54834,0.256258] class=Point name=Unnamed dimension=2 values=[0.962554,0.988309] class=Point name=Unnamed dimension=2 values=[0.376767,0.72036] class=Point name=Unnamed dimension=2 values=[0.790981,0.452411] class=Point name=Unnamed dimension=2 values=[0.205194,0.184462] class=Point name=Unnamed dimension=2 values=[0.619408,0.916512] class=Point name=Unnamed dimension=2 values=[0.0336213,0.648563] class=Point name=Unnamed dimension=2 values=[0.447835,0.380614] class=Point name=Unnamed dimension=2 values=[0.862048,0.112665] class=Point name=Unnamed dimension=2 values=[0.276262,0.844716] class=Point name=Unnamed dimension=2 values=[0.690476,0.576766] class=Point name=Unnamed dimension=2 values=[0.104689,0.308817] class=Point name=Unnamed dimension=2 values=[0.518903,0.0408681] class=Point name=Unnamed dimension=2 values=[0.933116,0.772919] class=Point name=Unnamed dimension=2 values=[0.34733,0.50497] class=Point name=Unnamed dimension=2 values=[0.761543,0.237021] class=Point name=Unnamed dimension=2 values=[0.175757,0.969071] class=Point name=Unnamed dimension=2 values=[0.589971,0.701122] class=Point name=Unnamed dimension=2 values=[0.00418408,0.433173] class=Point name=Unnamed dimension=2 values=[0.418398,0.165224] class=Point name=Unnamed dimension=2 values=[0.832611,0.897275] class=Point name=Unnamed dimension=2 values=[0.246825,0.629325] class=Point name=Unnamed dimension=2 values=[0.661038,0.361376] class=Point name=Unnamed dimension=2 values=[0.0752519,0.093427] class=Point name=Unnamed dimension=2 values=[0.489465,0.825478] class=Point name=Unnamed dimension=2 values=[0.903679,0.557529] class=Point name=Unnamed dimension=2 values=[0.317893,0.289579] class=Point name=Unnamed dimension=2 values=[0.732106,0.0216302] class=Point name=Unnamed dimension=2 values=[0.14632,0.753681] class=Point name=Unnamed dimension=2 values=[0.560533,0.485732] class=Point name=Unnamed dimension=2 values=[0.974747,0.217783] class=Point name=Unnamed dimension=2 values=[0.38896,0.949833] class=Point name=Unnamed dimension=2 values=[0.803174,0.681884] class=Point name=Unnamed dimension=2 values=[0.217388,0.413935] class=Point name=Unnamed dimension=2 values=[0.631601,0.145986] class=Point name=Unnamed dimension=2 values=[0.0458146,0.878037] class=Point name=Unnamed dimension=2 values=[0.460028,0.610087] class=Point name=Unnamed dimension=2 values=[0.874242,0.342138] class=Point name=Unnamed dimension=2 values=[0.288455,0.0741891] class=Point name=Unnamed dimension=2 values=[0.702669,0.80624] class=Point name=Unnamed dimension=2 values=[0.116882,0.538291] class=Point name=Unnamed dimension=2 values=[0.531096,0.270342] class=Point name=Unnamed dimension=2 values=[0.94531,0.00239234] class=Point name=Unnamed dimension=2 values=[0.359523,0.734443] class=Point name=Unnamed dimension=2 values=[0.773737,0.466494] class=Point name=Unnamed dimension=2 values=[0.18795,0.198545] class=Point name=Unnamed dimension=2 values=[0.602164,0.930596] class=Point name=Unnamed dimension=2 values=[0.0163774,0.662646] class=Point name=Unnamed dimension=2 values=[0.430591,0.394697] class=Point name=Unnamed dimension=2 values=[0.844805,0.126748] class=Point name=Unnamed dimension=2 values=[0.259018,0.858799] class=Point name=Unnamed dimension=2 values=[0.673232,0.59085] class=Point name=Unnamed dimension=2 values=[0.0874452,0.3229] class=Point name=Unnamed dimension=2 values=[0.501659,0.0549512] class=Point name=Unnamed dimension=2 values=[0.915872,0.787002] class=Point name=Unnamed dimension=2 values=[0.330086,0.519053] class=Point name=Unnamed dimension=2 values=[0.744299,0.251104] class=Point name=Unnamed dimension=2 values=[0.158513,0.983154] class=Point name=Unnamed dimension=2 values=[0.572727,0.715205] class=Point name=Unnamed dimension=2 values=[0.98694,0.447256] class=Point name=Unnamed dimension=2 values=[0.401154,0.179307] class=Point name=Unnamed dimension=2 values=[0.815367,0.911358] class=Point name=Unnamed dimension=2 values=[0.229581,0.643408] class=Point name=Unnamed dimension=2 values=[0.643794,0.375459] class=Point name=Unnamed dimension=2 values=[0.058008,0.10751] class=Point name=Unnamed dimension=2 values=[0.472222,0.839561] class=Point name=Unnamed dimension=2 values=[0.886435,0.571612] class=Point name=Unnamed dimension=2 values=[0.300649,0.303663] class=Point name=Unnamed dimension=2 values=[0.714862,0.0357133] class=Point name=Unnamed dimension=2 values=[0.129076,0.767764] class=Point name=Unnamed dimension=2 values=[0.543289,0.499815] class=Point name=Unnamed dimension=2 values=[0.957503,0.231866] class=Point name=Unnamed dimension=2 values=[0.371716,0.963917] class=Point name=Unnamed dimension=2 values=[0.78593,0.695967] class=Point name=Unnamed dimension=2 values=[0.200144,0.428018] class=Point name=Unnamed dimension=2 values=[0.614357,0.160069] class=Point name=Unnamed dimension=2 values=[0.0285707,0.89212] class=Point name=Unnamed dimension=2 values=[0.442784,0.624171] class=Point name=Unnamed dimension=2 values=[0.856998,0.356221] class=Point name=Unnamed dimension=2 values=[0.271211,0.0882722] class=Point name=Unnamed dimension=2 values=[0.685425,0.820323] class=Point name=Unnamed dimension=2 values=[0.0996385,0.552374] class=Point name=Unnamed dimension=2 values=[0.513852,0.284425] class=Point name=Unnamed dimension=2 values=[0.928066,0.0164755] class=Point name=Unnamed dimension=2 values=[0.342279,0.748526] class=Point name=Unnamed dimension=2 values=[0.756493,0.480577] class=Point name=Unnamed dimension=2 values=[0.170706,0.212628] class=Point name=Unnamed dimension=2 values=[0.58492,0.944679] class=Point name=Unnamed dimension=2 values=[0.999133,0.676729] class=Point name=Unnamed dimension=2 values=[0.413347,0.40878] class=Point name=Unnamed dimension=2 values=[0.827561,0.140831] class=Point name=Unnamed dimension=2 values=[0.241774,0.872882] class=Point name=Unnamed dimension=2 values=[0.655988,0.604933] class=Point name=Unnamed dimension=2 values=[0.0702013,0.336984] class=Point name=Unnamed dimension=2 values=[0.484415,0.0690343] class=Point name=Unnamed dimension=2 values=[0.898628,0.801085] class=Point name=Unnamed dimension=2 values=[0.312842,0.533136] class=Point name=Unnamed dimension=2 values=[0.727056,0.265187] class=Point name=Unnamed dimension=2 values=[0.141269,0.997238] class=Point name=Unnamed dimension=2 values=[0.555483,0.729288] class=Point name=Unnamed dimension=2 values=[0.969696,0.461339] class=Point name=Unnamed dimension=2 values=[0.38391,0.19339] class=Point name=Unnamed dimension=2 values=[0.798123,0.925441] class=Point name=Unnamed dimension=2 values=[0.212337,0.657492] class=Point name=Unnamed dimension=2 values=[0.62655,0.389542] class=Point name=Unnamed dimension=2 values=[0.040764,0.121593] class=Point name=Unnamed dimension=2 values=[0.454978,0.853644] class=Point name=Unnamed dimension=2 values=[0.869191,0.585695] class=Point name=Unnamed dimension=2 values=[0.283405,0.317746] class=Point name=Unnamed dimension=2 values=[0.697618,0.0497964] class=Point name=Unnamed dimension=2 values=[0.111832,0.781847] class=Point name=Unnamed dimension=2 values=[0.526045,0.513898] class=Point name=Unnamed dimension=2 values=[0.940259,0.245949] class=Point name=Unnamed dimension=2 values=[0.354473,0.978] class=Point name=Unnamed dimension=2 values=[0.768686,0.71005] class=Point name=Unnamed dimension=2 values=[0.1829,0.442101] class=Point name=Unnamed dimension=2 values=[0.597113,0.174152] class=Point name=Unnamed dimension=2 values=[0.0113268,0.906203] class=Point name=Unnamed dimension=2 values=[0.42554,0.638254] class=Point name=Unnamed dimension=2 values=[0.839754,0.370305] class=Point name=Unnamed dimension=2 values=[0.253967,0.102355] class=Point name=Unnamed dimension=2 values=[0.668181,0.834406] class=Point name=Unnamed dimension=2 values=[0.0823946,0.566457] class=Point name=Unnamed dimension=2 values=[0.496608,0.298508] class=Point name=Unnamed dimension=2 values=[0.910822,0.0305586] class=Point name=Unnamed dimension=2 values=[0.325035,0.762609] class=Point name=Unnamed dimension=2 values=[0.739249,0.49466] class=Point name=Unnamed dimension=2 values=[0.153462,0.226711] class=Point name=Unnamed dimension=2 values=[0.567676,0.958762] class=Point name=Unnamed dimension=2 values=[0.98189,0.690813] class=Point name=Unnamed dimension=2 values=[0.396103,0.422863] class=Point name=Unnamed dimension=2 values=[0.810317,0.154914] class=Point name=Unnamed dimension=2 values=[0.22453,0.886965] class=Point name=Unnamed dimension=2 values=[0.638744,0.619016] class=Point name=Unnamed dimension=2 values=[0.0529573,0.351067] class=Point name=Unnamed dimension=2 values=[0.467171,0.0831174] class=Point name=Unnamed dimension=2 values=[0.881384,0.815168] class=Point name=Unnamed dimension=2 values=[0.295598,0.547219] class=Point name=Unnamed dimension=2 values=[0.709812,0.27927] class=Point name=Unnamed dimension=2 values=[0.124025,0.0113207] class=Point name=Unnamed dimension=2 values=[0.538239,0.743371] class=Point name=Unnamed dimension=2 values=[0.952452,0.475422] class=Point name=Unnamed dimension=2 values=[0.366666,0.207473] class=Point name=Unnamed dimension=2 values=[0.780879,0.939524] class=Point name=Unnamed dimension=2 values=[0.195093,0.671575] class=Point name=Unnamed dimension=2 values=[0.609307,0.403626] class=Point name=Unnamed dimension=2 values=[0.0235201,0.135676] class=Point name=Unnamed dimension=2 values=[0.437734,0.867727] class=Point name=Unnamed dimension=2 values=[0.851947,0.599778] class=Point name=Unnamed dimension=2 values=[0.266161,0.331829] class=Point name=Unnamed dimension=2 values=[0.680374,0.0638796] class=Point name=Unnamed dimension=2 values=[0.0945879,0.79593] class=Point name=Unnamed dimension=2 values=[0.508801,0.527981] class=Point name=Unnamed dimension=2 values=[0.923015,0.260032] class=Point name=Unnamed dimension=2 values=[0.337229,0.992083] class=Point name=Unnamed dimension=2 values=[0.751442,0.724134] class=Point name=Unnamed dimension=2 values=[0.165656,0.456184] class=Point name=Unnamed dimension=2 values=[0.579869,0.188235] class=Point name=Unnamed dimension=2 values=[0.994083,0.920286] class=Point name=Unnamed dimension=2 values=[0.408296,0.652337] class=Point name=Unnamed dimension=2 values=[0.82251,0.384388] class=Point name=Unnamed dimension=2 values=[0.236724,0.116438] class=Point name=Unnamed dimension=2 values=[0.650937,0.848489] class=Point name=Unnamed dimension=2 values=[0.0651506,0.58054] class=Point name=Unnamed dimension=2 values=[0.479364,0.312591] class=Point name=Unnamed dimension=2 values=[0.893578,0.0446417] class=Point name=Unnamed dimension=2 values=[0.307791,0.776692] class=Point name=Unnamed dimension=2 values=[0.722005,0.508743] class=Point name=Unnamed dimension=2 values=[0.136218,0.240794] class=Point name=Unnamed dimension=2 values=[0.550432,0.972845] class=Point name=Unnamed dimension=2 values=[0.964646,0.704896] class=Point name=Unnamed dimension=2 values=[0.378859,0.436947] class=Point name=Unnamed dimension=2 values=[0.793073,0.168997] class=Point name=Unnamed dimension=2 values=[0.207286,0.901048] class=Point name=Unnamed dimension=2 values=[0.6215,0.633099] class=Point name=Unnamed dimension=2 values=[0.0357134,0.36515] class=Point name=Unnamed dimension=2 values=[0.449927,0.0972006] class=Point name=Unnamed dimension=2 values=[0.86414,0.829251] class=Point name=Unnamed dimension=2 values=[0.278354,0.561302] class=Point name=Unnamed dimension=2 values=[0.692568,0.293353] class=Point name=Unnamed dimension=2 values=[0.106781,0.0254038] class=Point name=Unnamed dimension=2 values=[0.520995,0.757455] class=Point name=Unnamed dimension=2 values=[0.935208,0.489505] class=Point name=Unnamed dimension=2 values=[0.349422,0.221556] class=Point name=Unnamed dimension=2 values=[0.763635,0.953607] class=Point name=Unnamed dimension=2 values=[0.177849,0.685658] class=Point name=Unnamed dimension=2 values=[0.592063,0.417709] class=Point name=Unnamed dimension=2 values=[0.00627612,0.149759] class=Point name=Unnamed dimension=2 values=[0.42049,0.88181] class=Point name=Unnamed dimension=2 values=[0.834703,0.613861] class=Point name=Unnamed dimension=2 values=[0.248917,0.345912] class=Point name=Unnamed dimension=2 values=[0.66313,0.0779627] class=Point name=Unnamed dimension=2 values=[0.0773439,0.810013] class=Point name=Unnamed dimension=2 values=[0.491557,0.542064] class=Point name=Unnamed dimension=2 values=[0.905771,0.274115] class=Point name=Unnamed dimension=2 values=[0.319985,0.0061659] class=Point name=Unnamed dimension=2 values=[0.734198,0.738217] class=Point name=Unnamed dimension=2 values=[0.148412,0.470268] class=Point name=Unnamed dimension=2 values=[0.562625,0.202318] class=Point name=Unnamed dimension=2 values=[0.976839,0.934369] class=Point name=Unnamed dimension=2 values=[0.391052,0.66642] class=Point name=Unnamed dimension=2 values=[0.805266,0.398471] class=Point name=Unnamed dimension=2 values=[0.21948,0.130522] class=Point name=Unnamed dimension=2 values=[0.633693,0.862572] class=Point name=Unnamed dimension=2 values=[0.0479067,0.594623] class=Point name=Unnamed dimension=2 values=[0.46212,0.326674] class=Point name=Unnamed dimension=2 values=[0.876334,0.0587248] class=Point name=Unnamed dimension=2 values=[0.290547,0.790776] class=Point name=Unnamed dimension=2 values=[0.704761,0.522826] class=Point name=Unnamed dimension=2 values=[0.118974,0.254877] class=Point name=Unnamed dimension=2 values=[0.533188,0.986928] class=Point name=Unnamed dimension=2 values=[0.947402,0.718979] class=Point name=Unnamed dimension=2 values=[0.361615,0.45103] class=Point name=Unnamed dimension=2 values=[0.775829,0.18308] class=Point name=Unnamed dimension=2 values=[0.190042,0.915131] class=Point name=Unnamed dimension=2 values=[0.604256,0.647182] class=Point name=Unnamed dimension=2 values=[0.0184694,0.379233] class=Point name=Unnamed dimension=2 values=[0.432683,0.111284] class=Point name=Unnamed dimension=2 values=[0.846897,0.843334] class=Point name=Unnamed dimension=2 values=[0.26111,0.575385] class=Point name=Unnamed dimension=2 values=[0.675324,0.307436] class=Point name=Unnamed dimension=2 values=[0.0895372,0.0394869] class=Point name=Unnamed dimension=2 values=[0.503751,0.771538] class=Point name=Unnamed dimension=2 values=[0.917964,0.503589] class=Point name=Unnamed dimension=2 values=[0.332178,0.235639] class=Point name=Unnamed dimension=2 values=[0.746391,0.96769] class=Point name=Unnamed dimension=2 values=[0.160605,0.699741] class=Point name=Unnamed dimension=2 values=[0.574819,0.431792] class=Point name=Unnamed dimension=2 values=[0.989032,0.163843] class=Point name=Unnamed dimension=2 values=[0.403246,0.895893] class=Point name=Unnamed dimension=2 values=[0.817459,0.627944] class=Point name=Unnamed dimension=2 values=[0.231673,0.359995] class=Point name=Unnamed dimension=2 values=[0.645886,0.0920458] class=Point name=Unnamed dimension=2 values=[0.0601,0.824097] class=Point name=Unnamed dimension=2 values=[0.474314,0.556147] class=Point name=Unnamed dimension=2 values=[0.888527,0.288198] class=Point name=Unnamed dimension=2 values=[0.302741,0.020249] class=Point name=Unnamed dimension=2 values=[0.716954,0.7523] class=Point name=Unnamed dimension=2 values=[0.131168,0.484351] class=Point name=Unnamed dimension=2 values=[0.545381,0.216401] class=Point name=Unnamed dimension=2 values=[0.959595,0.948452] class=Point name=Unnamed dimension=2 values=[0.373808,0.680503] class=Point name=Unnamed dimension=2 values=[0.788022,0.412554] class=Point name=Unnamed dimension=2 values=[0.202236,0.144605] class=Point name=Unnamed dimension=2 values=[0.616449,0.876655] class=Point name=Unnamed dimension=2 values=[0.0306627,0.608706] class=Point name=Unnamed dimension=2 values=[0.444876,0.340757] class=Point name=Unnamed dimension=2 values=[0.85909,0.0728079] class=Point name=Unnamed dimension=2 values=[0.273303,0.804859] class=Point name=Unnamed dimension=2 values=[0.687517,0.53691] class=Point name=Unnamed dimension=2 values=[0.101731,0.26896] class=Point name=Unnamed dimension=2 values=[0.515944,0.00101112] class=Point name=Unnamed dimension=2 values=[0.930158,0.733062] class=Point name=Unnamed dimension=2 values=[0.344371,0.465113] class=Point name=Unnamed dimension=2 values=[0.758585,0.197164] class=Point name=Unnamed dimension=2 values=[0.172798,0.929214] class=Point name=Unnamed dimension=2 values=[0.587012,0.661265] class=Point name=Unnamed dimension=2 values=[0.00122549,0.393316] class=Point name=Unnamed dimension=2 values=[0.415439,0.125367] class=Point name=Unnamed dimension=2 values=[0.829653,0.857418] class=Point name=Unnamed dimension=2 values=[0.243866,0.589468] class=Point name=Unnamed dimension=2 values=[0.65808,0.321519] class=Point name=Unnamed dimension=2 values=[0.0722933,0.05357] class=Point name=Unnamed dimension=2 values=[0.486507,0.785621] class=Point name=Unnamed dimension=2 values=[0.90072,0.517672] class=Point name=Unnamed dimension=2 values=[0.314934,0.249722] class=Point name=Unnamed dimension=2 values=[0.729148,0.981773] class=Point name=Unnamed dimension=2 values=[0.143361,0.713824] class=Point name=Unnamed dimension=2 values=[0.557575,0.445875] class=Point name=Unnamed dimension=2 values=[0.971788,0.177926] class=Point name=Unnamed dimension=2 values=[0.386002,0.909976] class=Point name=Unnamed dimension=2 values=[0.800215,0.642027] class=Point name=Unnamed dimension=2 values=[0.214429,0.374078] class=Point name=Unnamed dimension=2 values=[0.628642,0.106129] class=Point name=Unnamed dimension=2 values=[0.042856,0.83818] class=Point name=Unnamed dimension=2 values=[0.45707,0.570231] class=Point name=Unnamed dimension=2 values=[0.871283,0.302281] class=Point name=Unnamed dimension=2 values=[0.285497,0.0343321] class=Point name=Unnamed dimension=2 values=[0.69971,0.766383] class=Point name=Unnamed dimension=2 values=[0.113924,0.498434] class=Point name=Unnamed dimension=2 values=[0.528137,0.230485] class=Point name=Unnamed dimension=2 values=[0.942351,0.962535] class=Point name=Unnamed dimension=2 values=[0.356565,0.694586] class=Point name=Unnamed dimension=2 values=[0.770778,0.426637] class=Point name=Unnamed dimension=2 values=[0.184992,0.158688] class=Point name=Unnamed dimension=2 values=[0.599205,0.890739] class=Point name=Unnamed dimension=2 values=[0.0134188,0.622789] class=Point name=Unnamed dimension=2 values=[0.427632,0.35484] class=Point name=Unnamed dimension=2 values=[0.841846,0.086891] class=Point name=Unnamed dimension=2 values=[0.256059,0.818942] class=Point name=Unnamed dimension=2 values=[0.670273,0.550993] class=Point name=Unnamed dimension=2 values=[0.0844866,0.283043] class=Point name=Unnamed dimension=2 values=[0.4987,0.0150942] class=Point name=Unnamed dimension=2 values=[0.912914,0.747145] class=Point name=Unnamed dimension=2 values=[0.327127,0.479196] class=Point name=Unnamed dimension=2 values=[0.741341,0.211247] class=Point name=Unnamed dimension=2 values=[0.155554,0.943297] class=Point name=Unnamed dimension=2 values=[0.569768,0.675348] class=Point name=Unnamed dimension=2 values=[0.983982,0.407399] class=Point name=Unnamed dimension=2 values=[0.398195,0.13945] class=Point name=Unnamed dimension=2 values=[0.812409,0.871501] class=Point name=Unnamed dimension=2 values=[0.226622,0.603552] class=Point name=Unnamed dimension=2 values=[0.640836,0.335602] class=Point name=Unnamed dimension=2 values=[0.0550494,0.0676531] class=Point name=Unnamed dimension=2 values=[0.469263,0.799704] class=Point name=Unnamed dimension=2 values=[0.883476,0.531755] class=Point name=Unnamed dimension=2 values=[0.29769,0.263806] class=Point name=Unnamed dimension=2 values=[0.711904,0.995856] class=Point name=Unnamed dimension=2 values=[0.126117,0.727907] class=Point name=Unnamed dimension=2 values=[0.540331,0.459958] class=Point name=Unnamed dimension=2 values=[0.954544,0.192009] class=Point name=Unnamed dimension=2 values=[0.368758,0.92406] class=Point name=Unnamed dimension=2 values=[0.782971,0.65611] class=Point name=Unnamed dimension=2 values=[0.197185,0.388161] class=Point name=Unnamed dimension=2 values=[0.611399,0.120212] class=Point name=Unnamed dimension=2 values=[0.0256121,0.852263] class=Point name=Unnamed dimension=2 values=[0.439826,0.584314] class=Point name=Unnamed dimension=2 values=[0.854039,0.316364] class=Point name=Unnamed dimension=2 values=[0.268253,0.0484152] class=Point name=Unnamed dimension=2 values=[0.682466,0.780466] class=Point name=Unnamed dimension=2 values=[0.0966799,0.512517] class=Point name=Unnamed dimension=2 values=[0.510893,0.244568] class=Point name=Unnamed dimension=2 values=[0.925107,0.976618] class=Point name=Unnamed dimension=2 values=[0.339321,0.708669] class=Point name=Unnamed dimension=2 values=[0.753534,0.44072] class=Point name=Unnamed dimension=2 values=[0.167748,0.172771] class=Point name=Unnamed dimension=2 values=[0.581961,0.904822] class=Point name=Unnamed dimension=2 values=[0.996175,0.636872] class=Point name=Unnamed dimension=2 values=[0.410388,0.368923] class=Point name=Unnamed dimension=2 values=[0.824602,0.100974] class=Point name=Unnamed dimension=2 values=[0.238816,0.833025] class=Point name=Unnamed dimension=2 values=[0.653029,0.565076] class=Point name=Unnamed dimension=2 values=[0.0672427,0.297127] class=Point name=Unnamed dimension=2 values=[0.481456,0.0291773] class=Point name=Unnamed dimension=2 values=[0.89567,0.761228] class=Point name=Unnamed dimension=2 values=[0.309883,0.493279] class=Point name=Unnamed dimension=2 values=[0.724097,0.22533] class=Point name=Unnamed dimension=2 values=[0.13831,0.957381] class=Point name=Unnamed dimension=2 values=[0.552524,0.689431] class=Point name=Unnamed dimension=2 values=[0.966738,0.421482] class=Point name=Unnamed dimension=2 values=[0.380951,0.153533] class=Point name=Unnamed dimension=2 values=[0.795165,0.885584] class=Point name=Unnamed dimension=2 values=[0.209378,0.617635] class=Point name=Unnamed dimension=2 values=[0.623592,0.349685] class=Point name=Unnamed dimension=2 values=[0.0378054,0.0817362] class=Point name=Unnamed dimension=2 values=[0.452019,0.813787] class=Point name=Unnamed dimension=2 values=[0.866233,0.545838] class=Point name=Unnamed dimension=2 values=[0.280446,0.277889] class=Point name=Unnamed dimension=2 values=[0.69466,0.00993946] class=Point name=Unnamed dimension=2 values=[0.108873,0.74199] class=Point name=Unnamed dimension=2 values=[0.523087,0.474041] class=Point name=Unnamed dimension=2 values=[0.9373,0.206092] class=Point name=Unnamed dimension=2 values=[0.351514,0.938143] class=Point name=Unnamed dimension=2 values=[0.765727,0.670193] class=Point name=Unnamed dimension=2 values=[0.179941,0.402244] class=Point name=Unnamed dimension=2 values=[0.594155,0.134295] class=Point name=Unnamed dimension=2 values=[0.00836816,0.866346] class=Point name=Unnamed dimension=2 values=[0.422582,0.598397] class=Point name=Unnamed dimension=2 values=[0.836795,0.330448] class=Point name=Unnamed dimension=2 values=[0.251009,0.0624983] class=Point name=Unnamed dimension=2 values=[0.665222,0.794549] class=Point name=Unnamed dimension=2 values=[0.079436,0.5266] class=Point name=Unnamed dimension=2 values=[0.49365,0.258651] class=Point name=Unnamed dimension=2 values=[0.907863,0.990702] class=Point name=Unnamed dimension=2 values=[0.322077,0.722752] class=Point name=Unnamed dimension=2 values=[0.73629,0.454803] class=Point name=Unnamed dimension=2 values=[0.150504,0.186854] class=Point name=Unnamed dimension=2 values=[0.564717,0.918905] class=Point name=Unnamed dimension=2 values=[0.978931,0.650956] class=Point name=Unnamed dimension=2 values=[0.393144,0.383006] class=Point name=Unnamed dimension=2 values=[0.807358,0.115057] class=Point name=Unnamed dimension=2 values=[0.221572,0.847108] class=Point name=Unnamed dimension=2 values=[0.635785,0.579159] class=Point name=Unnamed dimension=2 values=[0.0499987,0.31121] class=Point name=Unnamed dimension=2 values=[0.464212,0.0432605] class=Point name=Unnamed dimension=2 values=[0.878426,0.775311] class=Point name=Unnamed dimension=2 values=[0.292639,0.507362] class=Point name=Unnamed dimension=2 values=[0.706853,0.239413] class=Point name=Unnamed dimension=2 values=[0.121067,0.971464] class=Point name=Unnamed dimension=2 values=[0.53528,0.703514] class=Point name=Unnamed dimension=2 values=[0.949494,0.435565] class=Point name=Unnamed dimension=2 values=[0.363707,0.167616] class=Point name=Unnamed dimension=2 values=[0.777921,0.899667] class=Point name=Unnamed dimension=2 values=[0.192134,0.631718] class=Point name=Unnamed dimension=2 values=[0.606348,0.363769] class=Point name=Unnamed dimension=2 values=[0.0205615,0.0958193] class=Point name=Unnamed dimension=2 values=[0.434775,0.82787] class=Point name=Unnamed dimension=2 values=[0.848989,0.559921] class=Point name=Unnamed dimension=2 values=[0.263202,0.291972] class=Point name=Unnamed dimension=2 values=[0.677416,0.0240226] class=Point name=Unnamed dimension=2 values=[0.0916293,0.756073] class=Point name=Unnamed dimension=2 values=[0.505843,0.488124] class=Point name=Unnamed dimension=2 values=[0.920056,0.220175] class=Point name=Unnamed dimension=2 values=[0.33427,0.952226] class=Point name=Unnamed dimension=2 values=[0.748484,0.684277] class=Point name=Unnamed dimension=2 values=[0.162697,0.416327] class=Point name=Unnamed dimension=2 values=[0.576911,0.148378] class=Point name=Unnamed dimension=2 values=[0.991124,0.880429] class=Point name=Unnamed dimension=2 values=[0.405338,0.61248] class=Point name=Unnamed dimension=2 values=[0.819551,0.344531] class=Point name=Unnamed dimension=2 values=[0.233765,0.0765814] class=Point name=Unnamed dimension=2 values=[0.647978,0.808632] class=Point name=Unnamed dimension=2 values=[0.062192,0.540683] class=Point name=Unnamed dimension=2 values=[0.476406,0.272734] class=Point name=Unnamed dimension=2 values=[0.890619,0.00478468] class=Point name=Unnamed dimension=2 values=[0.304833,0.736835] class=Point name=Unnamed dimension=2 values=[0.719046,0.468886] class=Point name=Unnamed dimension=2 values=[0.13326,0.200937] class=Point name=Unnamed dimension=2 values=[0.547473,0.932988] class=Point name=Unnamed dimension=2 values=[0.961687,0.665039] class=Point name=Unnamed dimension=2 values=[0.375901,0.39709] class=Point name=Unnamed dimension=2 values=[0.790114,0.12914] class=Point name=Unnamed dimension=2 values=[0.204328,0.861191] class=Point name=Unnamed dimension=2 values=[0.618541,0.593242] class=Point name=Unnamed dimension=2 values=[0.0327548,0.325293] class=Point name=Unnamed dimension=2 values=[0.446968,0.0573436] class=Point name=Unnamed dimension=2 values=[0.861182,0.789394] class=Point name=Unnamed dimension=2 values=[0.275395,0.521445] class=Point name=Unnamed dimension=2 values=[0.689609,0.253496] class=Point name=Unnamed dimension=2 values=[0.103823,0.985547] class=Point name=Unnamed dimension=2 values=[0.518036,0.717598] class=Point name=Unnamed dimension=2 values=[0.93225,0.449648] class=Point name=Unnamed dimension=2 values=[0.346463,0.181699] class=Point name=Unnamed dimension=2 values=[0.760677,0.91375] class=Point name=Unnamed dimension=2 values=[0.17489,0.645801] class=Point name=Unnamed dimension=2 values=[0.589104,0.377852] class=Point name=Unnamed dimension=2 values=[0.00331753,0.109902] class=Point name=Unnamed dimension=2 values=[0.417531,0.841953] class=Point name=Unnamed dimension=2 values=[0.831745,0.574004] class=Point name=Unnamed dimension=2 values=[0.245958,0.306055] class=Point name=Unnamed dimension=2 values=[0.660172,0.0381057] class=Point name=Unnamed dimension=2 values=[0.0743853,0.770156] class=Point name=Unnamed dimension=2 values=[0.488599,0.502207] class=Point name=Unnamed dimension=2 values=[0.902812,0.234258] class=Point name=Unnamed dimension=2 values=[0.317026,0.966309] class=Point name=Unnamed dimension=2 values=[0.73124,0.69836] class=Point name=Unnamed dimension=2 values=[0.145453,0.430411] class=Point name=Unnamed dimension=2 values=[0.559667,0.162461] class=Point name=Unnamed dimension=2 values=[0.97388,0.894512] class=Point name=Unnamed dimension=2 values=[0.388094,0.626563] class=Point name=Unnamed dimension=2 values=[0.802307,0.358614] class=Point name=Unnamed dimension=2 values=[0.216521,0.0906646] class=Point name=Unnamed dimension=2 values=[0.630735,0.822715] class=Point name=Unnamed dimension=2 values=[0.0449481,0.554766] class=Point name=Unnamed dimension=2 values=[0.459162,0.286817] class=Point name=Unnamed dimension=2 values=[0.873375,0.0188678] class=Point name=Unnamed dimension=2 values=[0.287589,0.750919] class=Point name=Unnamed dimension=2 values=[0.701802,0.482969] class=Point name=Unnamed dimension=2 values=[0.116016,0.21502] class=Point name=Unnamed dimension=2 values=[0.530229,0.947071] class=Point name=Unnamed dimension=2 values=[0.944443,0.679122] class=Point name=Unnamed dimension=2 values=[0.358657,0.411173] class=Point name=Unnamed dimension=2 values=[0.77287,0.143223] class=Point name=Unnamed dimension=2 values=[0.187084,0.875274] class=Point name=Unnamed dimension=2 values=[0.601297,0.607325] class=Point name=Unnamed dimension=2 values=[0.0155108,0.339376] class=Point name=Unnamed dimension=2 values=[0.429724,0.0714267] class=Point name=Unnamed dimension=2 values=[0.843938,0.803477] class=Point name=Unnamed dimension=2 values=[0.258152,0.535528] class=Point name=Unnamed dimension=2 values=[0.672365,0.267579] class=Point name=Unnamed dimension=2 values=[0.0865787,0.99963] class=Point name=Unnamed dimension=2 values=[0.500792,0.731681] class=Point name=Unnamed dimension=2 values=[0.915006,0.463732] class=Point name=Unnamed dimension=2 values=[0.329219,0.195782] class=Point name=Unnamed dimension=2 values=[0.743433,0.927833] class=Point name=Unnamed dimension=2 values=[0.157646,0.659884] class=Point name=Unnamed dimension=2 values=[0.57186,0.391935] class=Point name=Unnamed dimension=2 values=[0.986074,0.123986] class=Point name=Unnamed dimension=2 values=[0.400287,0.856036] class=Point name=Unnamed dimension=2 values=[0.814501,0.588087] class=Point name=Unnamed dimension=2 values=[0.228714,0.320138] class=Point name=Unnamed dimension=2 values=[0.642928,0.0521888] class=Point name=Unnamed dimension=2 values=[0.0571414,0.78424] class=Point name=Unnamed dimension=2 values=[0.471355,0.51629] class=Point name=Unnamed dimension=2 values=[0.885569,0.248341] class=Point name=Unnamed dimension=2 values=[0.299782,0.980392] class=Point name=Unnamed dimension=2 values=[0.713996,0.712443] class=Point name=Unnamed dimension=2 values=[0.128209,0.444494] class=Point name=Unnamed dimension=2 values=[0.542423,0.176544] class=Point name=Unnamed dimension=2 values=[0.956636,0.908595] class=Point name=Unnamed dimension=2 values=[0.37085,0.640646] class=Point name=Unnamed dimension=2 values=[0.785063,0.372697] class=Point name=Unnamed dimension=2 values=[0.199277,0.104748] class=Point name=Unnamed dimension=2 values=[0.613491,0.836798] class=Point name=Unnamed dimension=2 values=[0.0277041,0.568849] class=Point name=Unnamed dimension=2 values=[0.441918,0.3009] class=Point name=Unnamed dimension=2 values=[0.856131,0.0329509] class=Point name=Unnamed dimension=2 values=[0.270345,0.765002] class=Point name=Unnamed dimension=2 values=[0.684558,0.497053] class=Point name=Unnamed dimension=2 values=[0.098772,0.229103] class=Point name=Unnamed dimension=2 values=[0.512986,0.961154] class=Point name=Unnamed dimension=2 values=[0.927199,0.693205] class=Point name=Unnamed dimension=2 values=[0.341413,0.425256] class=Point name=Unnamed dimension=2 values=[0.755626,0.157307] class=Point name=Unnamed dimension=2 values=[0.16984,0.889357] class=Point name=Unnamed dimension=2 values=[0.584053,0.621408] class=Point name=Unnamed dimension=2 values=[0.998267,0.353459] class=Point name=Unnamed dimension=2 values=[0.41248,0.0855098] class=Point name=Unnamed dimension=2 values=[0.826694,0.817561] class=Point name=Unnamed dimension=2 values=[0.240908,0.549611] class=Point name=Unnamed dimension=2 values=[0.655121,0.281662] class=Point name=Unnamed dimension=2 values=[0.0693347,0.013713] class=Point name=Unnamed dimension=2 values=[0.483548,0.745764] class=Point name=Unnamed dimension=2 values=[0.897762,0.477815] class=Point name=Unnamed dimension=2 values=[0.311975,0.209865] class=Point name=Unnamed dimension=2 values=[0.726189,0.941916] class=Point name=Unnamed dimension=2 values=[0.140403,0.673967] class=Point name=Unnamed dimension=2 values=[0.554616,0.406018] class=Point name=Unnamed dimension=2 values=[0.96883,0.138069] class=Point name=Unnamed dimension=2 values=[0.383043,0.870119] class=Point name=Unnamed dimension=2 values=[0.797257,0.60217] class=Point name=Unnamed dimension=2 values=[0.21147,0.334221] class=Point name=Unnamed dimension=2 values=[0.625684,0.0662719] class=Point name=Unnamed dimension=2 values=[0.0398975,0.798323] class=Point name=Unnamed dimension=2 values=[0.454111,0.530374] class=Point name=Unnamed dimension=2 values=[0.868325,0.262424] class=Point name=Unnamed dimension=2 values=[0.282538,0.994475] class=Point name=Unnamed dimension=2 values=[0.696752,0.726526] class=Point name=Unnamed dimension=2 values=[0.110965,0.458577] class=Point name=Unnamed dimension=2 values=[0.525179,0.190628] class=Point name=Unnamed dimension=2 values=[0.939392,0.922678] class=Point name=Unnamed dimension=2 values=[0.353606,0.654729] class=Point name=Unnamed dimension=2 values=[0.76782,0.38678] class=Point name=Unnamed dimension=2 values=[0.182033,0.118831] class=Point name=Unnamed dimension=2 values=[0.596247,0.850882] class=Point name=Unnamed dimension=2 values=[0.0104602,0.582932] class=Point name=Unnamed dimension=2 values=[0.424674,0.314983] class=Point name=Unnamed dimension=2 values=[0.838887,0.047034] class=Point name=Unnamed dimension=2 values=[0.253101,0.779085] class=Point name=Unnamed dimension=2 values=[0.667314,0.511136] class=Point name=Unnamed dimension=2 values=[0.081528,0.243186] class=Point name=Unnamed dimension=2 values=[0.495742,0.975237] class=Point name=Unnamed dimension=2 values=[0.909955,0.707288] class=Point name=Unnamed dimension=2 values=[0.324169,0.439339] class=Point name=Unnamed dimension=2 values=[0.738382,0.17139] class=Point name=Unnamed dimension=2 values=[0.152596,0.90344] class=Point name=Unnamed dimension=2 values=[0.566809,0.635491] class=Point name=Unnamed dimension=2 values=[0.981023,0.367542] class=Point name=Unnamed dimension=2 values=[0.395237,0.0995929] class=Point name=Unnamed dimension=2 values=[0.80945,0.831644] class=Point name=Unnamed dimension=2 values=[0.223664,0.563695] class=Point name=Unnamed dimension=2 values=[0.637877,0.295745] class=Point name=Unnamed dimension=2 values=[0.0520908,0.0277961] class=Point name=Unnamed dimension=2 values=[0.466304,0.759847] class=Point name=Unnamed dimension=2 values=[0.880518,0.491898] class=Point name=Unnamed dimension=2 values=[0.294731,0.223949] class=Point name=Unnamed dimension=2 values=[0.708945,0.955999] class=Point name=Unnamed dimension=2 values=[0.123159,0.68805] class=Point name=Unnamed dimension=2 values=[0.537372,0.420101] class=Point name=Unnamed dimension=2 values=[0.951586,0.152152] class=Point name=Unnamed dimension=2 values=[0.365799,0.884203] class=Point name=Unnamed dimension=2 values=[0.780013,0.616253] class=Point name=Unnamed dimension=2 values=[0.194226,0.348304] class=Point name=Unnamed dimension=2 values=[0.60844,0.080355] class=Point name=Unnamed dimension=2 values=[0.0226535,0.812406] class=Point name=Unnamed dimension=2 values=[0.436867,0.544457] class=Point name=Unnamed dimension=2 values=[0.851081,0.276507] class=Point name=Unnamed dimension=2 values=[0.265294,0.00855824] class=Point name=Unnamed dimension=2 values=[0.679508,0.740609] class=Point name=Unnamed dimension=2 values=[0.0937213,0.47266] class=Point name=Unnamed dimension=2 values=[0.507935,0.204711] class=Point name=Unnamed dimension=2 values=[0.922148,0.936761] class=Point name=Unnamed dimension=2 values=[0.336362,0.668812] class=Point name=Unnamed dimension=2 values=[0.750576,0.400863] class=Point name=Unnamed dimension=2 values=[0.164789,0.132914] class=Point name=Unnamed dimension=2 values=[0.579003,0.864965] class=Point name=Unnamed dimension=2 values=[0.993216,0.597016] class=Point name=Unnamed dimension=2 values=[0.40743,0.329066] class=Point name=Unnamed dimension=2 values=[0.821643,0.0611171] class=Point name=Unnamed dimension=2 values=[0.235857,0.793168] class=Point name=Unnamed dimension=2 values=[0.650071,0.525219] class=Point name=Unnamed dimension=2 values=[0.0642841,0.25727] class=Point name=Unnamed dimension=2 values=[0.478498,0.98932] class=Point name=Unnamed dimension=2 values=[0.892711,0.721371] class=Point name=Unnamed dimension=2 values=[0.306925,0.453422] class=Point name=Unnamed dimension=2 values=[0.721138,0.185473] class=Point name=Unnamed dimension=2 values=[0.135352,0.917524] class=Point name=Unnamed dimension=2 values=[0.549565,0.649574] class=Point name=Unnamed dimension=2 values=[0.963779,0.381625] class=Point name=Unnamed dimension=2 values=[0.377993,0.113676] class=Point name=Unnamed dimension=2 values=[0.792206,0.845727] class=Point name=Unnamed dimension=2 values=[0.20642,0.577778] class=Point name=Unnamed dimension=2 values=[0.620633,0.309828] class=Point name=Unnamed dimension=2 values=[0.0348468,0.0418792] class=Point name=Unnamed dimension=2 values=[0.44906,0.77393] class=Point name=Unnamed dimension=2 values=[0.863274,0.505981] class=Point name=Unnamed dimension=2 values=[0.277488,0.238032] class=Point name=Unnamed dimension=2 values=[0.691701,0.970082] class=Point name=Unnamed dimension=2 values=[0.105915,0.702133] class=Point name=Unnamed dimension=2 values=[0.520128,0.434184] class=Point name=Unnamed dimension=2 values=[0.934342,0.166235] class=Point name=Unnamed dimension=2 values=[0.348555,0.898286] class=Point name=Unnamed dimension=2 values=[0.762769,0.630337] class=Point name=Unnamed dimension=2 values=[0.176982,0.362387] class=Point name=Unnamed dimension=2 values=[0.591196,0.0944381] class=Point name=Unnamed dimension=2 values=[0.00540957,0.826489] class=Point name=Unnamed dimension=2 values=[0.419623,0.55854] class=Point name=Unnamed dimension=2 values=[0.833837,0.290591] class=Point name=Unnamed dimension=2 values=[0.24805,0.0226413] class=Point name=Unnamed dimension=2 values=[0.662264,0.754692] class=Point name=Unnamed dimension=2 values=[0.0764774,0.486743] class=Point name=Unnamed dimension=2 values=[0.490691,0.218794] class=Point name=Unnamed dimension=2 values=[0.904905,0.950845] class=Point name=Unnamed dimension=2 values=[0.319118,0.682895] class=Point name=Unnamed dimension=2 values=[0.733332,0.414946] class=Point name=Unnamed dimension=2 values=[0.147545,0.146997] class=Point name=Unnamed dimension=2 values=[0.561759,0.879048] class=Point name=Unnamed dimension=2 values=[0.975972,0.611099] class=Point name=Unnamed dimension=2 values=[0.390186,0.343149] class=Point name=Unnamed dimension=2 values=[0.804399,0.0752002] class=Point name=Unnamed dimension=2 values=[0.218613,0.807251] class=Point name=Unnamed dimension=2 values=[0.632827,0.539302] class=Point name=Unnamed dimension=2 values=[0.0470401,0.271353] class=Point name=Unnamed dimension=2 values=[0.461254,0.00340346] class=Point name=Unnamed dimension=2 values=[0.875467,0.735454] class=Point name=Unnamed dimension=2 values=[0.289681,0.467505] class=Point name=Unnamed dimension=2 values=[0.703894,0.199556] class=Point name=Unnamed dimension=2 values=[0.118108,0.931607] class=Point name=Unnamed dimension=2 values=[0.532322,0.663657] class=Point name=Unnamed dimension=2 values=[0.946535,0.395708] class=Point name=Unnamed dimension=2 values=[0.360749,0.127759] class=Point name=Unnamed dimension=2 values=[0.774962,0.85981] class=Point name=Unnamed dimension=2 values=[0.189176,0.591861] class=Point name=Unnamed dimension=2 values=[0.603389,0.323912] class=Point name=Unnamed dimension=2 values=[0.0176029,0.0559623] class=Point name=Unnamed dimension=2 values=[0.431816,0.788013] class=Point name=Unnamed dimension=2 values=[0.84603,0.520064] class=Point name=Unnamed dimension=2 values=[0.260244,0.252115] class=Point name=Unnamed dimension=2 values=[0.674457,0.984166] class=Point name=Unnamed dimension=2 values=[0.0886707,0.716216] class=Point name=Unnamed dimension=2 values=[0.502884,0.448267] class=Point name=Unnamed dimension=2 values=[0.917098,0.180318] class=Point name=Unnamed dimension=2 values=[0.331311,0.912369] class=Point name=Unnamed dimension=2 values=[0.745525,0.64442] class=Point name=Unnamed dimension=2 values=[0.159739,0.37647] class=Point name=Unnamed dimension=2 values=[0.573952,0.108521] class=Point name=Unnamed dimension=2 values=[0.988166,0.840572] class=Point name=Unnamed dimension=2 values=[0.402379,0.572623] class=Point name=Unnamed dimension=2 values=[0.816593,0.304674] class=Point name=Unnamed dimension=2 values=[0.230806,0.0367245] class=Point name=Unnamed dimension=2 values=[0.64502,0.768775] class=Point name=Unnamed dimension=2 values=[0.0592334,0.500826] class=Point name=Unnamed dimension=2 values=[0.473447,0.232877] class=Point name=Unnamed dimension=2 values=[0.887661,0.964928] class=Point name=Unnamed dimension=2 values=[0.301874,0.696978] class=Point name=Unnamed dimension=2 values=[0.716088,0.429029] class=Point name=Unnamed dimension=2 values=[0.130301,0.16108] class=Point name=Unnamed dimension=2 values=[0.544515,0.893131] class=Point name=Unnamed dimension=2 values=[0.958728,0.625182] class=Point name=Unnamed dimension=2 values=[0.372942,0.357233] class=Point name=Unnamed dimension=2 values=[0.787156,0.0892833] class=Point name=Unnamed dimension=2 values=[0.201369,0.821334] class=Point name=Unnamed dimension=2 values=[0.615583,0.553385] class=Point name=Unnamed dimension=2 values=[0.0297962,0.285436] class=Point name=Unnamed dimension=2 values=[0.44401,0.0174866] class=Point name=Unnamed dimension=2 values=[0.858223,0.749537] class=Point name=Unnamed dimension=2 values=[0.272437,0.481588] class=Point name=Unnamed dimension=2 values=[0.68665,0.213639] class=Point name=Unnamed dimension=2 values=[0.100864,0.94569] class=Point name=Unnamed dimension=2 values=[0.515078,0.677741] class=Point name=Unnamed dimension=2 values=[0.929291,0.409791] class=Point name=Unnamed dimension=2 values=[0.343505,0.141842] class=Point name=Unnamed dimension=2 values=[0.757718,0.873893] class=Point name=Unnamed dimension=2 values=[0.171932,0.605944] class=Point name=Unnamed dimension=2 values=[0.586145,0.337995] class=Point name=Unnamed dimension=2 values=[0.000358937,0.0700455] class=Point name=Unnamed dimension=2 values=[0.414572,0.802096] class=Point name=Unnamed dimension=2 values=[0.828786,0.534147] class=Point name=Unnamed dimension=2 values=[0.243,0.266198] class=Point name=Unnamed dimension=2 values=[0.657213,0.998249] class=Point name=Unnamed dimension=2 values=[0.0714267,0.730299] class=Point name=Unnamed dimension=2 values=[0.48564,0.46235] class=Point name=Unnamed dimension=2 values=[0.899854,0.194401] class=Point name=Unnamed dimension=2 values=[0.314067,0.926452] class=Point name=Unnamed dimension=2 values=[0.728281,0.658503] class=Point name=Unnamed dimension=2 values=[0.142495,0.390554] class=Point name=Unnamed dimension=2 values=[0.556708,0.122604] class=Point name=Unnamed dimension=2 values=[0.970922,0.854655] class=Point name=Unnamed dimension=2 values=[0.385135,0.586706] class=Point name=Unnamed dimension=2 values=[0.799349,0.318757] class=Point name=Unnamed dimension=2 values=[0.213562,0.0508076] sample size=1000 relative error to Pi=0.00941963 openturns-1.9/lib/test/t_HermiteFactory_std.cxx000066400000000000000000000034611307543307100220220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HermiteFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { HermiteFactory hermite; fullprint << "hermite=" << hermite << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "hermite(" << i << ")=" << hermite.build(i).__str__() << std::endl; // fullprint << "hermite(" << i << ")=" << UniVariatePolynomial(clean(hermite.build(i).getCoefficients())).__str__() << std::endl; } Point roots(hermite.getRoots(10)); fullprint << "hermite(10) roots=" << roots << std::endl; Point weights; Point nodes(hermite.getNodesAndWeights(10, weights)); fullprint << "hermite(10) nodes=" << nodes << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HermiteFactory_std.expout000066400000000000000000000024611307543307100225430ustar00rootroot00000000000000hermite=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] hermite(0)=1 hermite(1)=X hermite(2)=-0.707107 + 0.707107 * X^2 hermite(3)=-1.22474 * X + 0.408248 * X^3 hermite(4)=0.612372 - 1.22474 * X^2 + 0.204124 * X^4 hermite(5)=1.36931 * X - 0.912871 * X^3 + 0.0912871 * X^5 hermite(6)=-0.559017 + 1.67705 * X^2 - 0.559017 * X^4 + 0.0372678 * X^6 hermite(7)=-1.47902 * X + 1.47902 * X^3 - 0.295804 * X^5 + 0.0140859 * X^7 hermite(8)=0.522913 - 2.09165 * X^2 + 1.04583 * X^4 - 0.139443 * X^6 + 0.00498012 * X^8 hermite(9)=1.56874 * X - 2.09165 * X^3 + 0.627495 * X^5 - 0.0597614 * X^7 + 0.00166004 * X^9 hermite(10) roots=class=Point name=Unnamed dimension=10 values=[-4.85946,-3.58182,-2.48433,-1.46599,-0.484936,0.484936,1.46599,2.48433,3.58182,4.85946] hermite(10) nodes=class=Point name=Unnamed dimension=10 values=[-4.85946,-3.58182,-2.48433,-1.46599,-0.484936,0.484936,1.46599,2.48433,3.58182,4.85946] and weights=class=Point name=Unnamed dimension=10 values=[4.31065e-06,0.000758071,0.0191116,0.135484,0.344642,0.344642,0.135484,0.0191116,0.000758071,4.31065e-06] openturns-1.9/lib/test/t_HermitianMatrix_std.cxx000066400000000000000000000150161307543307100222010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HermitianMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 0 : default constructor and string converter" << std::endl; /* Default constructor */ HermitianMatrix hermitianMatrix0; /* String converter */ fullprint << "hermitianMatrix0 = " << hermitianMatrix0 << std::endl; /** CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test 1: constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ HermitianMatrix hermitianMatrix1(2); /* Check operator() methods */ hermitianMatrix1(0, 0) = 1.0 ; hermitianMatrix1(1, 0) = Complex(3.0, -1.0) ; hermitianMatrix1(1, 1) = 4.0 ; /* String converter */ fullprint << "hermitianMatrix1 = " << hermitianMatrix1 << std::endl; /** COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 2 : copy constructor and string converter" << std::endl; /* Copy constructor */ HermitianMatrix hermitianMatrix2(hermitianMatrix1); /* String converter */ fullprint << "hermitianMatrix2 = " << hermitianMatrix2 << std::endl; /** GET DIMENSIONS METHODS */ fullprint << "test 3 : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "hermitianMatrix1's nbRows = " << hermitianMatrix1.getNbRows() << std::endl << "hermitianMatrix1's nbColumns = " << hermitianMatrix1.getNbColumns() << std::endl; /** ASSIGNMENT METHOD */ fullprint << "test 4 : assignment method" << std::endl; /* Assignment method */ HermitianMatrix hermitianMatrix3 ; hermitianMatrix3 = hermitianMatrix1 ; fullprint << "hermitianMatrix3 = " << hermitianMatrix3 << std::endl; /** CONJUGATE METHOD */ fullprint << "test 5 : conjugate method" << std::endl; /* Check transpose method */ HermitianMatrix hermitianMatrix4 = hermitianMatrix1.conjugate(); fullprint << "hermitianMatrix1 conjugate = " << hermitianMatrix4 << std::endl; fullprint << "hermitianMatrix1 conjugate = " << hermitianMatrix1.conjugate() << std::endl; /** ADDITION METHOD */ fullprint << "test number 6 : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ HermitianMatrix sum1 = hermitianMatrix1.operator + ( hermitianMatrix4 ) ; HermitianMatrix sum2 = hermitianMatrix4.operator + ( hermitianMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** SUBSTRACTION METHOD */ fullprint << "test 7 : substraction method" << std::endl; /* Check substraction method */ HermitianMatrix diff1 = hermitianMatrix1.operator - ( hermitianMatrix4 ) ; fullprint << "diff1 = " << diff1 << std::endl; SquareComplexMatrix mat(2); mat(0, 0) = Complex(1.0, 2.0); mat(0, 1) = Complex(3.0, 4.0); mat(1, 0) = Complex(5.0, 6.0); mat(1, 1) = Complex(7.0, 8.0); SquareComplexMatrix diff2 = hermitianMatrix1.operator - ( mat ) ; fullprint << "diff2 = " << diff2 << std::endl; SquareComplexMatrix diff3 = mat.operator - (hermitianMatrix1) ; fullprint << "diff3 = " << diff3 << std::endl; /** MATRIX MULTIPLICATION METHOD */ fullprint << "test 8 : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareComplexMatrix prod = hermitianMatrix1.operator * ( hermitianMatrix4 ) ; fullprint << "prod = " << prod << std::endl; /** MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 9 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ ComplexCollection ptResult = hermitianMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test 10 : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ Complex s(3.0, 2.0); HermitianMatrix scalprod1 = hermitianMatrix1.operator * (s) ; HermitianMatrix scalprod2 = s * hermitianMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ HermitianMatrix scaldiv1 = hermitianMatrix1.operator / (s) ; HermitianMatrix scaldiv2 = hermitianMatrix1.operator * (1.0 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** ISEMPTY METHOD */ fullprint << "test number twelve : isEmpty method" << std::endl; /* Check method isEmpty */ HermitianMatrix hermitianMatrix5; fullprint << "hermitianMatrix0 is empty = " << hermitianMatrix0.isEmpty() << std::endl << "hermitianMatrix1 is empty = " << hermitianMatrix1.isEmpty() << std::endl << "hermitianMatrix5 is empty = " << hermitianMatrix5.isEmpty() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HermitianMatrix_std.expout000066400000000000000000000067111307543307100227250ustar00rootroot00000000000000test 0 : default constructor and string converter hermitianMatrix0 = class=HermitianMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test 1: constructor with size, operator() and string converter hermitianMatrix1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,-1),(0,0),(4,0)] test 2 : copy constructor and string converter hermitianMatrix2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,-1),(0,0),(4,0)] test 3 : get dimensions methods hermitianMatrix1's nbRows = 2 hermitianMatrix1's nbColumns = 2 test 4 : assignment method hermitianMatrix3 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,-1),(0,0),(4,0)] test 5 : conjugate method hermitianMatrix1 conjugate = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(3,1),(0,0),(4,-0)] hermitianMatrix1 conjugate = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(3,1),(0,0),(4,-0)] test number 6 : addition method sum1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(6,0),(0,0),(8,0)] sum2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(6,0),(0,0),(8,0)] sum1 equals sum2 = true test 7 : substraction method diff1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(0,-2),(0,0),(0,0)] diff2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,-2),(-2,-7),(0,-3),(-3,-8)] diff3 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,2),(2,7),(0,3),(3,8)] test 8 : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(9,6),(15,3),(15,3),(24,-6)] test 9 : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(7,2),(11,-1)] test 10 : multiplication and division by a numerical scalar methods scalprod1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(11,3),(7,9),(12,8)] scalprod2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(11,3),(7,9),(12,8)] scalprod1 equals scalprod2 = true scaldiv1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.538462,-0.692308),(0.846154,-0.230769),(0.923077,-0.615385)] scaldiv2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.538462,-0.692308),(0.846154,-0.230769),(0.923077,-0.615385)] scaldiv1 equals scaldiv2 = true test number twelve : isEmpty method hermitianMatrix0 is empty = true hermitianMatrix1 is empty = false hermitianMatrix5 is empty = true openturns-1.9/lib/test/t_HistogramFactory_std.cxx000066400000000000000000000063241307543307100223630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Histogram for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger collectionSize = 4; Point l(collectionSize); l[0] = 1.0; l[1] = 0.7; l[2] = 1.2; l[3] = 0.9; Point h(collectionSize); h[0] = 0.5; h[1] = 1.5; h[2] = 3.5; h[3] = 2.5; Histogram distribution(-1.5, l, h); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); HistogramFactory factory; Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; fullprint << "Silverman bandwidth=" << factory.computeSilvermanBandwidth(sample) << std::endl; { Histogram estimatedHistogram(factory.buildAsHistogram(sample)); fullprint << "Histogram =" << distribution << std::endl; fullprint << "Estimated histogram=" << estimatedHistogram << std::endl; } { Histogram estimatedHistogram(factory.buildAsHistogram(sample, 0.1)); fullprint << "Histogram =" << distribution << std::endl; fullprint << "Estimated histogram=" << estimatedHistogram << std::endl; } { Histogram estimatedHistogram(factory.buildAsHistogram(sample, UnsignedInteger(15))); fullprint << "Histogram =" << distribution << std::endl; fullprint << "Estimated histogram=" << estimatedHistogram << std::endl; } Histogram estimatedHistogram(factory.buildAsHistogram()); fullprint << "Default histogram=" << estimatedHistogram << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HistogramFactory_std.expout000066400000000000000000000105351307543307100231040ustar00rootroot00000000000000Distribution =class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Estimated distribution=class=Histogram name=Histogram dimension=1 first=-1.49739 width=class=Point name=Unnamed dimension=28 values=[0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609] height=class=Point name=Unnamed dimension=28 values=[0.0663672,0.0479318,0.0671046,0.0663672,0.0612053,0.0722665,0.0693168,0.143058,0.204263,0.180666,0.174029,0.182141,0.320775,0.418851,0.429912,0.418113,0.414426,0.460883,0.430649,0.432124,0.413689,0.390829,0.285379,0.313401,0.331098,0.314875,0.337735,0.326674] Default distribution=class=Histogram name=Histogram dimension=1 first=0 width=class=Point name=Unnamed dimension=1 values=[1] height=class=Point name=Unnamed dimension=1 values=[1] Silverman bandwidth=0.14315 Histogram =class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Estimated histogram=class=Histogram name=Histogram dimension=1 first=-1.49739 width=class=Point name=Unnamed dimension=28 values=[0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609] height=class=Point name=Unnamed dimension=28 values=[0.0663672,0.0479318,0.0671046,0.0663672,0.0612053,0.0722665,0.0693168,0.143058,0.204263,0.180666,0.174029,0.182141,0.320775,0.418851,0.429912,0.418113,0.414426,0.460883,0.430649,0.432124,0.413689,0.390829,0.285379,0.313401,0.331098,0.314875,0.337735,0.326674] Histogram =class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Estimated histogram=class=Histogram name=Histogram dimension=1 first=-1.49739 width=class=Point name=Unnamed dimension=39 values=[0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605,0.0973605] height=class=Point name=Unnamed dimension=39 values=[0.0667622,0.0544369,0.0472471,0.0677893,0.073952,0.0585453,0.0626538,0.0657351,0.073952,0.0729249,0.15304,0.191043,0.19926,0.190016,0.174609,0.166392,0.200287,0.347164,0.426251,0.419061,0.431387,0.404682,0.404682,0.446793,0.457064,0.441658,0.422143,0.437549,0.419061,0.418034,0.320459,0.283483,0.301971,0.322513,0.334838,0.31635,0.321486,0.351272,0.324567] Histogram =class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Estimated histogram=class=Histogram name=Histogram dimension=1 first=-1.49739 width=class=Point name=Unnamed dimension=15 values=[0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137,0.253137] height=class=Point name=Unnamed dimension=15 values=[0.0588614,0.0659721,0.0620217,0.0797986,0.190016,0.178164,0.270604,0.41677,0.422696,0.446398,0.430597,0.364624,0.301418,0.328676,0.333811] Default histogram=class=Histogram name=Histogram dimension=1 first=0 width=class=Point name=Unnamed dimension=1 values=[1] height=class=Point name=Unnamed dimension=1 values=[1] Estimated distribution=class=Histogram name=Histogram dimension=1 first=-5e-13 width=class=Point name=Unnamed dimension=1 values=[1e-12] height=class=Point name=Unnamed dimension=1 values=[1e+12] Estimated distribution=class=Histogram name=Histogram dimension=1 first=1 width=class=Point name=Unnamed dimension=1 values=[1e-12] height=class=Point name=Unnamed dimension=1 values=[1e+12] openturns-1.9/lib/test/t_HistogramPolynomialFactory_std.cxx000066400000000000000000000037621307543307100244320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HistogramPolynomialFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar first = -2.0; Point width; width.add(1.0); width.add(2.0); width.add(1.5); Point height; height.add(2.0); height.add(5.0); height.add(3.5); HistogramPolynomialFactory histogramPolynomial(first, width, height); fullprint << "histogramPolynomial=" << histogramPolynomial << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "histogramPolynomial(" << i << ")=" << histogramPolynomial.build(i).__str__() << std::endl; } Point roots(histogramPolynomial.getRoots(10)); fullprint << "histogramPolynomial(10) roots=" << roots << std::endl; Point weights; Point nodes(histogramPolynomial.getNodesAndWeights(10, weights)); fullprint << "histogramPolynomial(10) nodes=" << nodes << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HistogramPolynomialFactory_std.expout000066400000000000000000000034731307543307100251530ustar00rootroot00000000000000histogramPolynomial=class=HistogramPolynomialFactory measure=class=Histogram name=Histogram dimension=1 first=-2 width=class=Point name=Unnamed dimension=3 values=[1,2,1.5] height=class=Point name=Unnamed dimension=3 values=[0.115942,0.289855,0.202899] legendre=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 histogramPolynomial(0)=1 histogramPolynomial(1)=-0.311705 + 0.868995 * X histogramPolynomial(2)=-0.856068 - 0.53005 * X + 0.720074 * X^2 histogramPolynomial(3)=0.439081 - 1.56306 * X - 0.552709 * X^2 + 0.618088 * X^3 histogramPolynomial(4)=0.811777 + 1.24547 * X - 2.05101 * X^2 - 0.613588 * X^3 + 0.554811 * X^4 histogramPolynomial(5)=-0.67725 + 1.90316 * X + 2.26804 * X^2 - 2.25731 * X^3 - 0.711591 * X^4 + 0.494122 * X^5 histogramPolynomial(6)=-0.672065 - 2.17033 * X + 3.26047 * X^2 + 3.00751 * X^3 - 2.389 * X^4 - 0.714632 * X^5 + 0.432514 * X^6 histogramPolynomial(7)=0.816364 - 2.08595 * X - 4.85092 * X^2 + 4.56489 * X^3 + 3.8474 * X^4 - 2.46825 * X^5 - 0.716834 * X^6 + 0.38213 * X^7 histogramPolynomial(8)=0.471292 + 3.50174 * X - 3.93381 * X^2 - 8.64894 * X^3 + 5.54451 * X^4 + 4.85041 * X^5 - 2.47959 * X^6 - 0.747288 * X^7 + 0.344731 * X^8 histogramPolynomial(9)=-0.893763 + 1.712 * X + 8.62475 * X^2 - 6.09001 * X^3 - 12.507 * X^4 + 6.25895 * X^5 + 5.47892 * X^6 - 2.39409 * X^7 - 0.728754 * X^8 + 0.302869 * X^9 histogramPolynomial(10) roots=class=Point name=Unnamed dimension=10 values=[-1.93832,-1.67917,-1.21469,-0.674631,-0.0599205,0.588202,1.20713,1.7752,2.19553,2.44117] histogramPolynomial(10) nodes=class=Point name=Unnamed dimension=10 values=[-1.93832,-1.67917,-1.21469,-0.674631,-0.0599205,0.588202,1.20713,1.7752,2.19553,2.44117] and weights=class=Point name=Unnamed dimension=10 values=[0.0182915,0.0415858,0.070671,0.165385,0.186558,0.185533,0.131996,0.100983,0.0684909,0.0305057] openturns-1.9/lib/test/t_Histogram_std.cxx000066400000000000000000000240221307543307100210260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Histogram for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger collectionSize = 4; Point l(collectionSize); l[0] = 1.0; l[1] = 0.7; l[2] = 1.2; l[3] = 0.9; Point h(collectionSize); h[0] = 0.5; h[1] = 1.5; h[2] = 3.5; h[3] = 2.5; Histogram distribution(-1.5, l, h); fullprint << "l=" << l << " h=" << h << std::endl; fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; // Point PDFgr = distribution.computePDFGradient( point ); // fullprint << "pdf gradient =" << PDFgr << std::endl; // Point PDFgrFD(1 + 2 * collectionSize); // PDFgrFD[0] = (Histogram(distribution.getFirst() + eps, distribution.getPairCollection()).computePDF(point) - // Histogram(distribution.getFirst() - eps, distribution.getPairCollection()).computePDF(point)) / (2.0 * eps); // for (UnsignedInteger i = 0; i < collectionSize; i++) // { // Histogram::PairCollection collectionLeft = distribution.getPairCollection(); // Histogram::PairCollection collectionRight = distribution.getPairCollection(); // collectionLeft[i].h_ += eps; // collectionRight[i].h_ -= eps; // PDFgrFD[2 * i + 1] = (Histogram(distribution.getFirst(), collectionLeft).computePDF(point) - // Histogram(distribution.getFirst(), collectionRight).computePDF(point)) / (2.0 * eps); // collectionLeft = distribution.getPairCollection(); // collectionRight = collectionLeft; // collectionLeft[i].l_ += eps; // collectionRight[i].l_ -= eps; // PDFgrFD[2 * i + 2] = (Histogram(distribution.getFirst(), collectionLeft).computePDF(point) - // Histogram(distribution.getFirst(), collectionRight).computePDF(point)) / (2.0 * eps); // } // fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; // Point CDFgr = distribution.computeCDFGradient( point ); // fullprint << "cdf gradient =" << CDFgr << std::endl; // Point CDFgrFD(1 + 2 * collectionSize); // CDFgrFD[0] = (Histogram(distribution.getFirst() + eps, distribution.getPairCollection()).computeCDF(point) - // Histogram(distribution.getFirst() - eps, distribution.getPairCollection()).computeCDF(point)) / (2.0 * eps); // for (UnsignedInteger i = 0; i < collectionSize; i++) // { // Histogram::PairCollection collectionLeft = distribution.getPairCollection(); // Histogram::PairCollection collectionRight = distribution.getPairCollection(); // collectionLeft[i].h_ += eps; // collectionRight[i].h_ -= eps; // CDFgrFD[2 * i + 1] = (Histogram(distribution.getFirst(), collectionLeft).computeCDF(point) - // Histogram(distribution.getFirst(), collectionRight).computeCDF(point)) / (2.0 * eps); // collectionLeft = distribution.getPairCollection(); // collectionRight = collectionLeft; // collectionLeft[i].l_ += eps; // collectionRight[i].l_ -= eps; // CDFgrFD[2 * i + 2] = (Histogram(distribution.getFirst(), collectionLeft).computeCDF(point) - // Histogram(distribution.getFirst(), collectionRight).computeCDF(point)) / (2.0 * eps); // } // fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Histogram::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; UnsignedInteger testSize = 0; for (UnsignedInteger i = 0; i < testSize; i++) { Scalar q = RandomGenerator::Generate(); if (std::abs(q - distribution.computeCDF(distribution.computeQuantile(q))) > eps) { fullprint << "q=" << q << " quantile=" << distribution.computeQuantile(q)[0] << " CDF(quantile)=" << distribution.computeCDF(distribution.computeQuantile(q)) << std::endl; } } // non-regression for #599 { Point l(2); l[0] = 1.0; l[1] = 2.0; Point h(2); h[0] = 0.6; h[1] = 0.3; Histogram distribution(2.0, l, h); for ( UnsignedInteger i = 0; i < 10; ++ i ) { const Scalar p = 1.0 * i / 10.0; fullprint << "q@" << p << "=" << distribution.computeQuantile(p)[0] << std::endl; } } // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Histogram_std.expout000066400000000000000000000114001307543307100215440ustar00rootroot00000000000000l=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] h=class=Point name=Unnamed dimension=4 values=[0.5,1.5,3.5,2.5] Distribution class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Distribution Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125}) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.19686] oneSample first=class=Point name=Unnamed dimension=1 values=[1.92498] last=class=Point name=Unnamed dimension=1 values=[0.727936] mean=class=Point name=Unnamed dimension=1 values=[0.866401] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.732365] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0] log pdf=-0.826679 pdf =0.4375 pdf (FD)=0.4375 cdf=0.54375 ccdf=0.45625 survival=0.45625 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.7] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[2.14] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.7] upper bound=class=Point name=Unnamed dimension=1 values=[2.3] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125})) gradientImplementation=MinimumVolumeLevelSetGradient(Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125})) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125})) level=2.77259 beta=0.0625 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.1] upper bound=class=Point name=Unnamed dimension=1 values=[2.22] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.5] upper bound=class=Point name=Unnamed dimension=1 values=[2.14] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.7] upper bound=class=Point name=Unnamed dimension=1 values=[2.3] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.858125] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.720205] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[first : -1.5, width_0 : 1, height_0 : 0.0625, width_1 : 0.7, height_1 : 0.1875, width_2 : 1.2, height_2 : 0.4375, width_3 : 0.9, height_3 : 0.3125]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.241118] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.257641] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.120302] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.145552] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.0795608] Standard representative=Histogram(origin = -1, {w0 = 0.526316, h0 = 0.11875}, {w1 = 0.368421, h1 = 0.35625}, {w2 = 0.631579, h2 = 0.83125}, {w3 = 0.473684, h3 = 0.59375}) q@0=2 q@0.1=2.2 q@0.2=2.4 q@0.3=2.6 q@0.4=2.8 q@0.5=3 q@0.6=3.4 q@0.7=3.8 q@0.8=4.2 q@0.9=4.6 openturns-1.9/lib/test/t_HistoryStrategy_std.cxx000066400000000000000000000062151307543307100222610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HistoryStrategy for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger size = 10; UnsignedInteger dimension = 2; Sample sample(size, dimension); // Fill-in the sample for (UnsignedInteger i = 0; i < size; ++i) { for (UnsignedInteger j = 0; j < dimension; ++j) { sample[i][j] = i + Scalar(j) / dimension; } } fullprint << "sample=" << sample << std::endl; // History using the Null strategy Null nullStrategy; for (UnsignedInteger i = 0; i < size; ++i) { nullStrategy.store(sample[i]); } fullprint << "Null strategy sample=" << nullStrategy.getSample() << std::endl; // History using the Full strategy Full fullStrategy; for (UnsignedInteger i = 0; i < size; ++i) { fullStrategy.store(sample[i]); } fullprint << "Full strategy sample=" << fullStrategy.getSample() << std::endl; // History using the Last strategy, large storage Last lastStrategy(3 * size); for (UnsignedInteger i = 0; i < size; ++i) { lastStrategy.store(sample[i]); } fullprint << "Last strategy sample (large storage)=" << lastStrategy.getSample() << std::endl; lastStrategy = Last(size / 3); // History using the Last strategy, small storage for (UnsignedInteger i = 0; i < size; ++i) { lastStrategy.store(sample[i]); } fullprint << "Last strategy sample (small storage)=" << lastStrategy.getSample() << std::endl; // History using the Compact strategy, large storage Compact compactStrategy(3 * size); for (UnsignedInteger i = 0; i < size; ++i) { compactStrategy.store(sample[i]); } fullprint << "Compact strategy sample (large storage)=" << compactStrategy.getSample() << std::endl; compactStrategy = Compact(size / 3); // History using the Compact strategy, small storage for (UnsignedInteger i = 0; i < size; ++i) { compactStrategy.store(sample[i]); } fullprint << "Compact strategy sample (small storage)=" << compactStrategy.getSample() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HistoryStrategy_std.expout000066400000000000000000000024751307543307100230070ustar00rootroot00000000000000sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Null strategy sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] Full strategy sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Last strategy sample (large storage)=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Last strategy sample (small storage)=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[7,7.5],[8,8.5],[9,9.5]] Compact strategy sample (large storage)=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Compact strategy sample (small storage)=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,1.5],[3,3.5],[5,5.5],[7,7.5],[9,9.5]] openturns-1.9/lib/test/t_HyperbolicAnisotropicEnumerateFunction_std.cxx000066400000000000000000000062771307543307100267740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HyperbolicAnisotropicEnumerateFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { fullprint << "Default q : " << ResourceMap::GetAsScalar("HyperbolicAnisotropicEnumerateFunction-DefaultQ") << std::endl << std::endl; // first verify consistency with LinearEnumerateFunction UnsignedInteger size = 10; UnsignedInteger stratas = 5; for (UnsignedInteger dimension = 1; dimension < 4; ++ dimension) { HyperbolicAnisotropicEnumerateFunction f( dimension, 1.0 ); LinearEnumerateFunction g(dimension); fullprint << "First " << size << " values for dimension " << dimension << std::endl; for (UnsignedInteger index = 0; index < size; ++index) { if (f(index) != g(index)) throw InternalException(HERE) << "Results are different"; fullprint << "index=" << index << " " << f(index) << std::endl; } Indices strataCardinal; for ( UnsignedInteger index = 0; index < stratas; ++ index ) { strataCardinal.add( f.getStrataCardinal(index) ); } fullprint << "And first " << stratas << " strata cardinals :" << strataCardinal << std::endl << std::endl; } // values with varying q size = 25; Point qValues; qValues.add(0.75); qValues.add(0.5); qValues.add(0.25); for (UnsignedInteger dimension = 2; dimension < 5; ++ dimension) { for (UnsignedInteger j = 0; j < qValues.getDimension(); ++ j) { Scalar q = qValues[j]; fullprint << "First " << size << " values dimension=" << dimension << " q=" << q << std::endl; HyperbolicAnisotropicEnumerateFunction f( dimension, q); for (UnsignedInteger index = 0; index < size; ++index) { fullprint << "index=" << index << " " << f(index) << std::endl; } Indices strataCardinal; for ( UnsignedInteger index = 0; index < stratas; ++ index ) { strataCardinal.add( f.getStrataCardinal(index) ); } fullprint << "And first " << stratas << " strata cardinals :" << strataCardinal << std::endl << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_HyperbolicAnisotropicEnumerateFunction_std.expout000066400000000000000000000117611307543307100275100ustar00rootroot00000000000000Default q : 0.4 First 10 values for dimension 1 index=0 [0] index=1 [1] index=2 [2] index=3 [3] index=4 [4] index=5 [5] index=6 [6] index=7 [7] index=8 [8] index=9 [9] And first 5 strata cardinals :[1,1,1,1,1] First 10 values for dimension 2 index=0 [0,0] index=1 [1,0] index=2 [0,1] index=3 [2,0] index=4 [1,1] index=5 [0,2] index=6 [3,0] index=7 [2,1] index=8 [1,2] index=9 [0,3] And first 5 strata cardinals :[1,2,3,4,5] First 10 values for dimension 3 index=0 [0,0,0] index=1 [1,0,0] index=2 [0,1,0] index=3 [0,0,1] index=4 [2,0,0] index=5 [1,1,0] index=6 [1,0,1] index=7 [0,2,0] index=8 [0,1,1] index=9 [0,0,2] And first 5 strata cardinals :[1,3,6,10,15] First 25 values dimension=2 q=0.75 index=0 [0,0] index=1 [1,0] index=2 [0,1] index=3 [2,0] index=4 [0,2] index=5 [1,1] index=6 [3,0] index=7 [0,3] index=8 [2,1] index=9 [1,2] index=10 [4,0] index=11 [0,4] index=12 [3,1] index=13 [1,3] index=14 [5,0] index=15 [0,5] index=16 [2,2] index=17 [4,1] index=18 [1,4] index=19 [6,0] index=20 [0,6] index=21 [3,2] index=22 [2,3] index=23 [7,0] index=24 [0,7] And first 5 strata cardinals :[1,2,2,1,2] First 25 values dimension=2 q=0.5 index=0 [0,0] index=1 [1,0] index=2 [0,1] index=3 [2,0] index=4 [0,2] index=5 [3,0] index=6 [0,3] index=7 [1,1] index=8 [4,0] index=9 [0,4] index=10 [5,0] index=11 [0,5] index=12 [2,1] index=13 [1,2] index=14 [6,0] index=15 [0,6] index=16 [7,0] index=17 [0,7] index=18 [3,1] index=19 [1,3] index=20 [2,2] index=21 [8,0] index=22 [0,8] index=23 [4,1] index=24 [1,4] And first 5 strata cardinals :[1,2,2,2,3] First 25 values dimension=2 q=0.25 index=0 [0,0] index=1 [1,0] index=2 [0,1] index=3 [2,0] index=4 [0,2] index=5 [3,0] index=6 [0,3] index=7 [4,0] index=8 [0,4] index=9 [5,0] index=10 [0,5] index=11 [6,0] index=12 [0,6] index=13 [7,0] index=14 [0,7] index=15 [8,0] index=16 [0,8] index=17 [9,0] index=18 [0,9] index=19 [10,0] index=20 [0,10] index=21 [11,0] index=22 [0,11] index=23 [12,0] index=24 [0,12] And first 5 strata cardinals :[1,2,2,2,2] First 25 values dimension=3 q=0.75 index=0 [0,0,0] index=1 [1,0,0] index=2 [0,1,0] index=3 [0,0,1] index=4 [2,0,0] index=5 [0,2,0] index=6 [0,0,2] index=7 [1,1,0] index=8 [1,0,1] index=9 [0,1,1] index=10 [3,0,0] index=11 [0,3,0] index=12 [0,0,3] index=13 [2,1,0] index=14 [2,0,1] index=15 [1,2,0] index=16 [0,2,1] index=17 [1,0,2] index=18 [0,1,2] index=19 [4,0,0] index=20 [0,4,0] index=21 [0,0,4] index=22 [1,1,1] index=23 [3,1,0] index=24 [3,0,1] And first 5 strata cardinals :[1,3,3,3,3] First 25 values dimension=3 q=0.5 index=0 [0,0,0] index=1 [1,0,0] index=2 [0,1,0] index=3 [0,0,1] index=4 [2,0,0] index=5 [0,2,0] index=6 [0,0,2] index=7 [3,0,0] index=8 [0,3,0] index=9 [0,0,3] index=10 [1,1,0] index=11 [1,0,1] index=12 [0,1,1] index=13 [4,0,0] index=14 [0,4,0] index=15 [0,0,4] index=16 [5,0,0] index=17 [0,5,0] index=18 [0,0,5] index=19 [2,1,0] index=20 [2,0,1] index=21 [1,2,0] index=22 [0,2,1] index=23 [1,0,2] index=24 [0,1,2] And first 5 strata cardinals :[1,3,3,3,6] First 25 values dimension=3 q=0.25 index=0 [0,0,0] index=1 [1,0,0] index=2 [0,1,0] index=3 [0,0,1] index=4 [2,0,0] index=5 [0,2,0] index=6 [0,0,2] index=7 [3,0,0] index=8 [0,3,0] index=9 [0,0,3] index=10 [4,0,0] index=11 [0,4,0] index=12 [0,0,4] index=13 [5,0,0] index=14 [0,5,0] index=15 [0,0,5] index=16 [6,0,0] index=17 [0,6,0] index=18 [0,0,6] index=19 [7,0,0] index=20 [0,7,0] index=21 [0,0,7] index=22 [8,0,0] index=23 [0,8,0] index=24 [0,0,8] And first 5 strata cardinals :[1,3,3,3,3] First 25 values dimension=4 q=0.75 index=0 [0,0,0,0] index=1 [1,0,0,0] index=2 [0,1,0,0] index=3 [0,0,1,0] index=4 [0,0,0,1] index=5 [2,0,0,0] index=6 [0,2,0,0] index=7 [0,0,2,0] index=8 [0,0,0,2] index=9 [1,1,0,0] index=10 [1,0,1,0] index=11 [1,0,0,1] index=12 [0,1,1,0] index=13 [0,1,0,1] index=14 [0,0,1,1] index=15 [3,0,0,0] index=16 [0,3,0,0] index=17 [0,0,3,0] index=18 [0,0,0,3] index=19 [2,1,0,0] index=20 [2,0,1,0] index=21 [2,0,0,1] index=22 [1,2,0,0] index=23 [0,2,1,0] index=24 [0,2,0,1] And first 5 strata cardinals :[1,4,4,6,4] First 25 values dimension=4 q=0.5 index=0 [0,0,0,0] index=1 [1,0,0,0] index=2 [0,1,0,0] index=3 [0,0,1,0] index=4 [0,0,0,1] index=5 [2,0,0,0] index=6 [0,2,0,0] index=7 [0,0,2,0] index=8 [0,0,0,2] index=9 [3,0,0,0] index=10 [0,3,0,0] index=11 [0,0,3,0] index=12 [0,0,0,3] index=13 [1,1,0,0] index=14 [1,0,1,0] index=15 [1,0,0,1] index=16 [0,1,1,0] index=17 [0,1,0,1] index=18 [0,0,1,1] index=19 [4,0,0,0] index=20 [0,4,0,0] index=21 [0,0,4,0] index=22 [0,0,0,4] index=23 [5,0,0,0] index=24 [0,5,0,0] And first 5 strata cardinals :[1,4,4,4,10] First 25 values dimension=4 q=0.25 index=0 [0,0,0,0] index=1 [1,0,0,0] index=2 [0,1,0,0] index=3 [0,0,1,0] index=4 [0,0,0,1] index=5 [2,0,0,0] index=6 [0,2,0,0] index=7 [0,0,2,0] index=8 [0,0,0,2] index=9 [3,0,0,0] index=10 [0,3,0,0] index=11 [0,0,3,0] index=12 [0,0,0,3] index=13 [4,0,0,0] index=14 [0,4,0,0] index=15 [0,0,4,0] index=16 [0,0,0,4] index=17 [5,0,0,0] index=18 [0,5,0,0] index=19 [0,0,5,0] index=20 [0,0,0,5] index=21 [6,0,0,0] index=22 [0,6,0,0] index=23 [0,0,6,0] index=24 [0,0,0,6] And first 5 strata cardinals :[1,4,4,4,4] openturns-1.9/lib/test/t_HypothesisTest_correlation.cxx000066400000000000000000000155051307543307100236250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); UnsignedInteger size = 100; UnsignedInteger dim = 10; CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = (i + j + 1.0) / (2.0 * dim); } } Point mean(dim, 2.0); Point sigma(dim, 3.0); Normal distribution(mean, sigma, R); Sample sample(distribution.getSample(size)); Sample sampleX(size, dim - 1); Sample sampleY(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleY[i][0] = sample[i][0]; for (UnsignedInteger j = 1; j < dim; j++) { sampleX[i][j - 1] = sample[i][j]; } } Indices selection(5); for (UnsignedInteger i = 0; i < 5; i++) { selection[i] = i; } Indices selection2(1, 0); Sample sampleX0(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleX0[i][0] = sampleX[i][0]; } Sample sampleZ(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleZ[i][0] = sampleY[i][0] * sampleY[i][0]; } // PartialPearson : Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample, for i in the selection. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. // Probability of the H0 reject zone : 1-0.90 fullprint << "PartialPearsonXY=" << HypothesisTest::PartialPearson(sampleX, sampleY, selection, 0.90) << std::endl; // The three tests must be equal fullprint << "PartialPearsonX0Y=" << HypothesisTest::PartialPearson(sampleX, sampleY, selection2, 0.90) << std::endl; fullprint << "PearsonX0Y=" << HypothesisTest::Pearson(sampleX0, sampleY, 0.90) << std::endl; fullprint << "FullPearsonX0Y=" << HypothesisTest::FullPearson(sampleX0, sampleY, 0.90) << std::endl; // FullPearson : Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. // Probability of the H0 reject zone : 1-0.90 fullprint << "FullPearsonX0Y=" << HypothesisTest::FullPearson(sampleX, sampleY, 0.90) << std::endl; fullprint << "FullPearsonYY=" << HypothesisTest::FullPearson(sampleY, sampleY, 0.90) << std::endl; // PartialSpearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on firstSample[i] and secondSample, for i in the selection. // Probability of the H0 reject zone : 1-0.90 // The three tests must be equal fullprint << "PartialSpearmanX0Y=" << HypothesisTest::PartialSpearman(sampleX, sampleY, selection2, 0.90) << std::endl; fullprint << "SpearmanX0Y=" << HypothesisTest::Spearman(sampleX0, sampleY, 0.90) << std::endl; fullprint << "FullSpearmanX0Y=" << HypothesisTest::FullSpearman(sampleX0, sampleY, 0.90) << std::endl; fullprint << "PartialSpearmanXY=" << HypothesisTest::PartialSpearman(sampleX, sampleY, selection, 0.90) << std::endl; // FullSpearman : Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullSpearman performs the Independence Spearman test simultaneously on all firstSample[i] and secondSample. // Probability of the H0 reject zone : 1-0.90 fullprint << "FullSpearmanYZ=" << HypothesisTest::FullSpearman(sampleY, sampleZ, 0.90) << std::endl; fullprint << "FullSpearmanYY=" << HypothesisTest::FullSpearman(sampleY, sampleY, 0.90) << std::endl; // Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialRegression performs the Regression test simultaneously on all firstSample[i] and secondSample, for i in the selection. The Regression test tests ifthe regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. // The two tests must be equal fullprint << "PartialRegressionX0Y=" << HypothesisTest::PartialRegression(sampleX, sampleY, selection2, 0.90) << std::endl; fullprint << "FullRegressionX0Y=" << HypothesisTest::FullRegression(sampleX0, sampleY, 0.90) << std::endl; fullprint << "PartialRegressionXY=" << HypothesisTest::PartialRegression(sampleX, sampleY, selection, 0.90) << std::endl; // Regression test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullRegression performs the Regression test simultaneously on all firstSample[i] and secondSample. The Regression test tests if the regression model between two scalar numerical samples is significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. fullprint << "FullRegressionXZ=" << HypothesisTest::FullRegression(sampleX, sampleZ, 0.90) << std::endl; fullprint << "FullRegressionZZ=" << HypothesisTest::FullRegression(sampleZ, sampleZ, 0.90) << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_HypothesisTest_correlation.expout000066400000000000000000000135361307543307100243510ustar00rootroot00000000000000PartialPearsonXY=[class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00343681 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.54134e-05 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000370666 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00133147 description=[]] PartialPearsonX0Y=[class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] PearsonX0Y=class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[] FullPearsonX0Y=[class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] FullPearsonX0Y=[class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00343681 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.54134e-05 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000370666 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00133147 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=6.71397e-06 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.0456e-08 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=5.58992e-09 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.47753e-11 description=[]] FullPearsonYY=[class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] PartialSpearmanX0Y=[class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[]] SpearmanX0Y=class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[] FullSpearmanX0Y=[class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[]] PartialSpearmanXY=[class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00627948 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=7.32128e-07 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000464745 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0013131 description=[]] FullSpearmanYZ=[class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] FullSpearmanYY=[class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] PartialRegressionX0Y=[class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] FullRegressionX0Y=[class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] PartialRegressionXY=[class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.756546 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.634249 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0117222 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.138249 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.422638 description=[]] FullRegressionXZ=[class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.406774 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0760524 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.624678 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.988176 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.155015 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.176608 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.447791 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.769215 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0126047 description=[]] FullRegressionZZ=[class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] openturns-1.9/lib/test/t_HypothesisTest_std.cxx000066400000000000000000000101121307543307100220630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); UnsignedInteger size = 100; UnsignedInteger dim = 10; CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = (i + j + 1.0) / (2.0 * dim); } } Point mean(dim, 2.0); Point sigma(dim, 3.0); Normal distribution(mean, sigma, R); Sample sample(distribution.getSample(size)); Sample sampleX(size, dim - 1); Sample sampleY(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleY[i][0] = sample[i][0]; for (UnsignedInteger j = 1; j < dim; j++) { sampleX[i][j - 1] = sample[i][j]; } } Sample sampleZ(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleZ[i][0] = sampleY[i][0] * sampleY[i][0]; } Sample discreteSample1(Poisson(0.1).getSample(size)); Sample discreteSample2(Geometric(0.4).getSample(size)); // ChiSquared Independance test : test if two samples (of sizes not necessarily equal) are independant ? // Care : discrete samples only // H0 = independent samples // p-value threshold : probability of the H0 reject zone : 1-0.90 // p-value : probability (test variable decision > test variable decision evaluated on the samples) // Test = True <=> p-value > p-value threshold fullprint << "ChiSquared=" << HypothesisTest::ChiSquared(discreteSample1, discreteSample2, 0.90) << std::endl; fullprint << "ChiSquared2=" << HypothesisTest::ChiSquared(discreteSample1, discreteSample1, 0.90) << std::endl; // Pearson Test : test if two gaussian samples are independent (based on the evaluation of the linear correlation coefficient) // H0 : independent samples (linear correlation coefficient = 0) // Test = True <=> independent samples (linear correlation coefficient = 0) // p-value threshold : probability of the H0 reject zone : 1-0.90 // p-value : probability (test variable decision > test variable decision evaluated on the samples) // Test = True <=> p-value > p-value threshold fullprint << "Pearson=" << HypothesisTest::Pearson(sampleY, sampleZ, 0.90) << std::endl; // Smirnov Test : test if two samples (of sizes not necessarily equal) follow the same distribution // Care : continuous distributions only // H0 = same continuous distribution // Test = True <=> same distribution // p-value threshold : probability of the H0 reject zone : 1-0.90 // p-value : probability (test variable decision > test variable decision evaluated on the samples) // Test = True <=> p-value > p-value threshold fullprint << "Smirnov=" << HypothesisTest::Smirnov(sampleY, sampleZ, 0.90) << std::endl; // Spearman Test : test if two samples have a monotonous relation // H0 = no monotonous relation between both samples // Test = True <=> no monotonous relation // p-value threshold : probability of the H0 reject zone : 1-0.90 // p-value : probability (test variable decision > test variable decision evaluated on the samples) // Test = True <=> p-value > p-value threshold fullprint << "Spearman=" << HypothesisTest::Spearman(sampleY, sampleZ, 0.90) << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_HypothesisTest_std.expout000066400000000000000000000013211307543307100226070ustar00rootroot00000000000000ChiSquared=class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=true p-value threshold=0.1 p-value=0.985079 description=[] ChiSquared2=class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=false p-value threshold=0.1 p-value=1.15627e-20 description=[] Pearson=class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=false p-value threshold=0.1 p-value=6.40572e-08 description=[] Smirnov=class=TestResult name=Unnamed type=TwoSampleSmirnov binaryQualityMeasure=false p-value threshold=0.1 p-value=7.47514e-11 description=[] Spearman=class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[] openturns-1.9/lib/test/t_IdFactory_std.cxx000066400000000000000000000025461307543307100207640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IdFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Id initialId = IdFactory::BuildId(); Id nextId = IdFactory::BuildId(); if ((nextId - initialId) != 1) throw TestFailed("OT::IdFactory initialization error."); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IdentityMatrix_std.cxx000066400000000000000000000034641307543307100220560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the IdentityMatrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); IdentityMatrix matrix1(2); matrix1.setName("matrix1"); fullprint << "matrix1 = " << matrix1 << std::endl; Point pt ; pt.add(5.) ; pt.add(0.) ; fullprint << "pt = " << pt << std::endl; Point result ; result = matrix1.solveLinearSystem(pt); fullprint << "result = " << result << std::endl; Scalar determinant ; determinant = matrix1.computeDeterminant(); fullprint << "determinant = " << determinant << std::endl; Collection ev(2); ev = matrix1.computeEigenValues().getCollection(); fullprint << "ev = " << ev << std::endl; bool isSPD = matrix1.isPositiveDefinite(); fullprint << "isSPD = " << isSPD << std::endl; SquareMatrix matrix2 = matrix1.computeCholesky(); fullprint << "matrix2 = " << matrix2 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_IdentityMatrix_std.expout000066400000000000000000000006401307543307100225710ustar00rootroot00000000000000matrix1 = class=IdentityMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0,0,1] pt = class=Point name=Unnamed dimension=2 values=[5,0] result = class=Point name=Unnamed dimension=2 values=[5,0] determinant = 1 ev = [1,1] isSPD = true matrix2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0,0,1] openturns-1.9/lib/test/t_ImportanceSamplingExperiment_std.cxx000066400000000000000000000032751307543307100247350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ImportanceSamplingExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Normal distribution(4); Normal weightingDistribution(distribution); weightingDistribution.setMean(Point(4, 1.0)); UnsignedInteger size = 10; ImportanceSamplingExperiment myPlane(distribution, weightingDistribution, size); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ImportanceSamplingExperiment_std.expout000066400000000000000000000025741307543307100254600ustar00rootroot00000000000000myPlane = class=ImportanceSamplingExperiment name=Unnamed distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] importance distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[1.6082,-0.266173,0.561734,2.20548],[-1.18139,1.35004,0.644993,2.43725],[1.81067,1.79316,0.529474,1.26102],[-1.29006,-0.282885,-0.311781,0.909216],[1.99579,0.860547,0.439794,1.44549],[1.32293,1.44579,-0.0380766,0.143288],[1.47362,0.874502,1.35142,2.78236],[1.07021,0.218634,0.278467,0.758777],[-0.787964,1.40136,2.36783,2.00434],[1.74155,0.956388,1.53934,1.29995]] weights = class=Point name=Unnamed dimension=10 values=[0.12133,0.286247,0.0335635,19.5997,0.0644655,0.417312,0.011312,0.721745,0.050511,0.0290938] openturns-1.9/lib/test/t_ImportanceSampling_std.cxx000066400000000000000000000053071307543307100226720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of ImportanceSampling class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create an importance sampling Carlo algorithm */ mean[0] = 4.99689645939288809018e+01; mean[1] = 1.84194175946153282375e+00; mean[2] = 1.04454036676956398821e+01; mean[3] = 4.66776215562709406726e+00; Normal myImportance(mean, sigma, R); ImportanceSampling myAlgo(myEvent, myImportance); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.1); fullprint << "ImportanceSampling=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "ImportanceSampling result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ImportanceSampling_std.expout000066400000000000000000000030161307543307100234070ustar00rootroot00000000000000ImportanceSampling=class=ImportanceSampling derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 ImportanceSampling result=probabilityEstimate=1.533139e-01 varianceEstimate=2.330392e-04 standard deviation=1.53e-02 coefficient of variation=9.96e-02 confidenceLength(0.95)=5.98e-02 outerSampling=43 blockSize=4 openturns-1.9/lib/test/t_IndependentCopula_std.cxx000066400000000000000000000160731307543307100225010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IndependentCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public IndependentCopula { public: TestObject() : IndependentCopula(3) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities // checkClassWithClassName(); // Instanciate one distribution object UnsignedInteger dim = 3; IndependentCopula copula(dim); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; // Is this copula elliptical ? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula continuous ? fullprint << "Continuous = " << (copula.isContinuous() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical = " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independant ? fullprint << "Independent = " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = copula.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( copula.getDimension(), 0.6 ); fullprint << "Point= " << point << std::endl; // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point PDFgr = copula.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point CDFgr = copula.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point mean = copula.getMean(); fullprint << "mean=" << mean << std::endl; IndependentCopula::PointWithDescriptionCollection parameters = copula.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IndependentCopula_std.expout000066400000000000000000000120571307543307100232210ustar00rootroot00000000000000Copula class=IndependentCopula name=IndependentCopula dimension=3 Copula IndependentCopula(dimension = 3) Elliptical distribution= false Continuous = true Elliptical = true Independent = true oneRealization=class=Point name=Unnamed dimension=3 values=[0.629877,0.882805,0.135276] oneSample first=class=Point name=Unnamed dimension=3 values=[0.0325028,0.347057,0.969423] last=class=Point name=Unnamed dimension=3 values=[0.282986,0.307215,0.899457] mean=class=Point name=Unnamed dimension=3 values=[0.503596,0.496822,0.501632] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0830104,0.000288954,0.000906179,0.000288954,0.0846323,2.63752e-05,0.000906179,2.63752e-05,0.0837848] Point= class=Point name=Unnamed dimension=3 values=[0.6,0.6,0.6] point= class=Point name=Unnamed dimension=3 values=[0.6,0.6,0.6] ddf=class=Point name=Unnamed dimension=3 values=[0,0,0] ddf (FD)=class=Point name=Unnamed dimension=3 values=[0,0,0] pdf=1 cdf=0.216 Survival =0.064 Survival (ref)=0.064 Inverse survival=class=Point name=Unnamed dimension=3 values=[0.0169524,0.0169524,0.0169524] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=3 values=[0.793701,0.793701,0.793701] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0.00847621,0.00847621,0.00847621] upper bound=class=Point name=Unnamed dimension=3 values=[0.991524,0.991524,0.991524] finite lower bound=[1,1,1] finite upper bound=[1,1,1] threshold=0.983048 Minimum volume level set=class=LevelSet name=Unnamed dimension=3 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[2*max(abs(x0-0.5),abs(x1-0.5),abs(x2-0.5))] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[2*max(abs(x0-0.5),abs(x1-0.5),abs(x2-0.5))] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[2*max(abs(x0-0.5),abs(x1-0.5),abs(x2-0.5))] level=0.983048 beta=0.983048 Bilateral confidence interval=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0.00847621,0.00847621,0.00847621] upper bound=class=Point name=Unnamed dimension=3 values=[0.991524,0.991524,0.991524] finite lower bound=[1,1,1] finite upper bound=[1,1,1] beta=0.983048 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[0.983048,0.983048,0.983048] finite lower bound=[1,1,1] finite upper bound=[1,1,1] beta=0.983048 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0.0169524,0.0169524,0.0169524] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] beta=0.983048 pdf gradient =class=Point name=Unnamed dimension=0 values=[] cdf gradient =class=Point name=Unnamed dimension=0 values=[] mean=class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] parameters=[[]] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0,0,0,0.0833333,0,0,0,0.0833333] correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] spearman=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] kendall=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.575665] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.336563] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.961293] indices=[1,0] margins=class=IndependentCopula name=IndependentCopula dimension=2 margins PDF=1 margins CDF=0.0625 margins quantile=class=Point name=Unnamed dimension=2 values=[0.974679,0.974679] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.931788,0.190073] openturns-1.9/lib/test/t_IndicatorFunction_std.cxx000066400000000000000000000035771307543307100225270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for indicator * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Analytical construction */ Description input(2); input[0] = "x0"; input[1] = "x1"; Description formulas(1); formulas[0] = "x0+x1"; SymbolicFunction analytical(input, formulas); fullprint << "function=" << analytical << std::endl; /* Create indicator function */ IndicatorFunction indicator(analytical, Less(), 0.0); /* Does it work? */ Point x(Point(2, 1.0)); Scalar value = analytical(x)[0]; fullprint << "Value of the function=" << value << " value of the indicator=" << indicator(x) << std::endl; x = Point(2, -1.0); value = analytical(x)[0]; fullprint << "Value of the function=" << value << " value of the indicator=" << indicator(x) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IndicatorFunction_std.expout000066400000000000000000000014461307543307100232420ustar00rootroot00000000000000function=class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] Value of the function=2 value of the indicator=class=Point name=Unnamed dimension=1 values=[0] Value of the function=-2 value of the indicator=class=Point name=Unnamed dimension=1 values=[1] openturns-1.9/lib/test/t_Indices_std.cxx000066400000000000000000000035251307543307100204540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Indices for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger size = 4; Indices indices(size, 0); for (UnsignedInteger i = 0; i < size; i++) { indices[i] = i; } fullprint << "indices=" << indices << std::endl; fullprint << "are indices valid with bound=" << size << "? " << (indices.check(size) ? "true" : "false") << std::endl; fullprint << "are indices valid with bound=" << size / 2 << "? " << (indices.check(size / 2) ? "true" : "false") << std::endl; indices[0] = indices[size - 1]; fullprint << "indices after transformation=" << indices << std::endl; fullprint << "are indices valid with bound=" << size << "? " << (indices.check(size) ? "true" : "false") << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Indices_std.expout000066400000000000000000000002521307543307100211700ustar00rootroot00000000000000indices=[0,1,2,3] are indices valid with bound=4? true are indices valid with bound=2? false indices after transformation=[3,1,2,3] are indices valid with bound=4? false openturns-1.9/lib/test/t_IntervalMesher_std.cxx000066400000000000000000000035241307543307100220250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IntervalMesher for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // The 1D mesher IntervalMesher mesher1D(Indices(1, 5)); fullprint << "mesher1D=" << mesher1D << std::endl; Mesh mesh1D(mesher1D.build(Interval(-1.0, 2.0))); fullprint << "mesh1D=" << mesh1D << std::endl; IntervalMesher mesher2D(Indices(2, 4)); fullprint << "mesher2D=" << mesher2D << std::endl; Mesh mesh2D(mesher2D.build(Interval(Point(2, -1.0), Point(2, 2.0)))); fullprint << "mesh2D=" << mesh2D << std::endl; IntervalMesher mesher3D(Indices(3, 3)); fullprint << "mesher3D=" << mesher3D << std::endl; Mesh mesh3D(mesher3D.build(Interval(Point(3, -1.0), Point(3, 2.0)))); fullprint << "mesh3D=" << mesh3D << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IntervalMesher_std.expout000066400000000000000000000077161307543307100225560ustar00rootroot00000000000000mesher1D=class=IntervalMesher discretization=[5] mesh1D=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[-1],[-0.4],[0.2],[0.8],[1.4],[2]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] mesher2D=class=IntervalMesher discretization=[4,4] mesh2D=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=25 dimension=2 data=[[-1,-1],[-0.25,-1],[0.5,-1],[1.25,-1],[2,-1],[-1,-0.25],[-0.25,-0.25],[0.5,-0.25],[1.25,-0.25],[2,-0.25],[-1,0.5],[-0.25,0.5],[0.5,0.5],[1.25,0.5],[2,0.5],[-1,1.25],[-0.25,1.25],[0.5,1.25],[1.25,1.25],[2,1.25],[-1,2],[-0.25,2],[0.5,2],[1.25,2],[2,2]] simplices=[[0,1,5],[1,6,5],[1,2,6],[2,7,6],[2,3,7],[3,8,7],[3,4,8],[4,9,8],[5,6,10],[6,11,10],[6,7,11],[7,12,11],[7,8,12],[8,13,12],[8,9,13],[9,14,13],[10,11,15],[11,16,15],[11,12,16],[12,17,16],[12,13,17],[13,18,17],[13,14,18],[14,19,18],[15,16,20],[16,21,20],[16,17,21],[17,22,21],[17,18,22],[18,23,22],[18,19,23],[19,24,23]] mesher3D=class=IntervalMesher discretization=[3,3,3] mesh3D=class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=3 data=[[-1,-1,-1],[0,-1,-1],[1,-1,-1],[2,-1,-1],[-1,0,-1],[0,0,-1],[1,0,-1],[2,0,-1],[-1,1,-1],[0,1,-1],[1,1,-1],[2,1,-1],[-1,2,-1],[0,2,-1],[1,2,-1],[2,2,-1],[-1,-1,0],[0,-1,0],[1,-1,0],[2,-1,0],[-1,0,0],[0,0,0],[1,0,0],[2,0,0],[-1,1,0],[0,1,0],[1,1,0],[2,1,0],[-1,2,0],[0,2,0],[1,2,0],[2,2,0],[-1,-1,1],[0,-1,1],[1,-1,1],[2,-1,1],[-1,0,1],[0,0,1],[1,0,1],[2,0,1],[-1,1,1],[0,1,1],[1,1,1],[2,1,1],[-1,2,1],[0,2,1],[1,2,1],[2,2,1],[-1,-1,2],[0,-1,2],[1,-1,2],[2,-1,2],[-1,0,2],[0,0,2],[1,0,2],[2,0,2],[-1,1,2],[0,1,2],[1,1,2],[2,1,2],[-1,2,2],[0,2,2],[1,2,2],[2,2,2]] simplices=[[0,1,17,21],[0,5,1,21],[0,17,16,21],[0,16,20,21],[0,20,4,21],[0,4,5,21],[1,2,18,22],[1,6,2,22],[1,18,17,22],[1,17,21,22],[1,21,5,22],[1,5,6,22],[2,3,19,23],[2,7,3,23],[2,19,18,23],[2,18,22,23],[2,22,6,23],[2,6,7,23],[4,5,21,25],[4,9,5,25],[4,21,20,25],[4,20,24,25],[4,24,8,25],[4,8,9,25],[5,6,22,26],[5,10,6,26],[5,22,21,26],[5,21,25,26],[5,25,9,26],[5,9,10,26],[6,7,23,27],[6,11,7,27],[6,23,22,27],[6,22,26,27],[6,26,10,27],[6,10,11,27],[8,9,25,29],[8,13,9,29],[8,25,24,29],[8,24,28,29],[8,28,12,29],[8,12,13,29],[9,10,26,30],[9,14,10,30],[9,26,25,30],[9,25,29,30],[9,29,13,30],[9,13,14,30],[10,11,27,31],[10,15,11,31],[10,27,26,31],[10,26,30,31],[10,30,14,31],[10,14,15,31],[16,17,33,37],[16,21,17,37],[16,33,32,37],[16,32,36,37],[16,36,20,37],[16,20,21,37],[17,18,34,38],[17,22,18,38],[17,34,33,38],[17,33,37,38],[17,37,21,38],[17,21,22,38],[18,19,35,39],[18,23,19,39],[18,35,34,39],[18,34,38,39],[18,38,22,39],[18,22,23,39],[20,21,37,41],[20,25,21,41],[20,37,36,41],[20,36,40,41],[20,40,24,41],[20,24,25,41],[21,22,38,42],[21,26,22,42],[21,38,37,42],[21,37,41,42],[21,41,25,42],[21,25,26,42],[22,23,39,43],[22,27,23,43],[22,39,38,43],[22,38,42,43],[22,42,26,43],[22,26,27,43],[24,25,41,45],[24,29,25,45],[24,41,40,45],[24,40,44,45],[24,44,28,45],[24,28,29,45],[25,26,42,46],[25,30,26,46],[25,42,41,46],[25,41,45,46],[25,45,29,46],[25,29,30,46],[26,27,43,47],[26,31,27,47],[26,43,42,47],[26,42,46,47],[26,46,30,47],[26,30,31,47],[32,33,49,53],[32,37,33,53],[32,49,48,53],[32,48,52,53],[32,52,36,53],[32,36,37,53],[33,34,50,54],[33,38,34,54],[33,50,49,54],[33,49,53,54],[33,53,37,54],[33,37,38,54],[34,35,51,55],[34,39,35,55],[34,51,50,55],[34,50,54,55],[34,54,38,55],[34,38,39,55],[36,37,53,57],[36,41,37,57],[36,53,52,57],[36,52,56,57],[36,56,40,57],[36,40,41,57],[37,38,54,58],[37,42,38,58],[37,54,53,58],[37,53,57,58],[37,57,41,58],[37,41,42,58],[38,39,55,59],[38,43,39,59],[38,55,54,59],[38,54,58,59],[38,58,42,59],[38,42,43,59],[40,41,57,61],[40,45,41,61],[40,57,56,61],[40,56,60,61],[40,60,44,61],[40,44,45,61],[41,42,58,62],[41,46,42,62],[41,58,57,62],[41,57,61,62],[41,61,45,62],[41,45,46,62],[42,43,59,63],[42,47,43,63],[42,59,58,63],[42,58,62,63],[42,62,46,63],[42,46,47,63]] openturns-1.9/lib/test/t_Interval_std.cxx000066400000000000000000000060411307543307100206560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Interval for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // The 1D interface Interval interval1D(-3, 5); fullprint << "interval1D=" << interval1D << std::endl; // The default interface Interval defaultInterval(2); fullprint << "defaultInterval=" << defaultInterval << std::endl; // Construction from 2 Point Point p1(2, -1.0); Point p2(2, 2.0); fullprint << "interval from 2 points=" << Interval(p1, p2) << std::endl; // Construction from 2 points and 2 flags Interval::BoolCollection flag1(2, false); Interval::BoolCollection flag2(2, true); Interval interval(p1, p2, flag1, flag2); fullprint << "interval from 2 points and 2 flags=" << interval << std::endl; // Accessors fullprint << "lower bound=" << interval.getLowerBound() << std::endl; fullprint << "upper bound=" << interval.getUpperBound() << std::endl; fullprint << "lower bound flags=" << interval.getFiniteLowerBound() << std::endl; fullprint << "upper bound flags=" << interval.getFiniteUpperBound() << std::endl; // Check if a given interval is empty fullprint << "interval [p1, p2] empty? " << (Interval(p1, p2).isEmpty() ? "true" : "false") << std::endl; fullprint << "interval [p2, p1] empty? " << (Interval(p2, p1).isEmpty() ? "true" : "false") << std::endl; // Intersection Interval interval1(p1, p2); Point p3(2); p3[0] = 0.5; p3[1] = -1.5; Point p4(2); p4[0] = 1.5; p4[1] = 2.5; Interval interval2(p3, p4); fullprint << "intersection of " << interval1 << " and " << interval2 << " equals " << interval1.intersect(interval2) << std::endl; // Inside Point p5((p1 + p2) * 0.5); fullprint << "is point " << p5 << " inside " << interval1 << "? " << (interval1.contains(p5) ? "yes" : "no") << std::endl; Point p6(2.0 * p2); fullprint << "is point " << p6 << " inside " << interval1 << "? " << (interval1.contains(p6) ? "yes" : "no") << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Interval_std.expout000066400000000000000000000046031307543307100214020ustar00rootroot00000000000000interval1D=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-3] upper bound=class=Point name=Unnamed dimension=1 values=[5] finite lower bound=[1] finite upper bound=[1] defaultInterval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] interval from 2 points=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] interval from 2 points and 2 flags=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[0,0] finite upper bound=[1,1] lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] lower bound flags=[0,0] upper bound flags=[1,1] interval [p1, p2] empty? false interval [p2, p1] empty? true intersection of class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] and class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.5,-1.5] upper bound=class=Point name=Unnamed dimension=2 values=[1.5,2.5] finite lower bound=[1,1] finite upper bound=[1,1] equals class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.5,-1] upper bound=class=Point name=Unnamed dimension=2 values=[1.5,2] finite lower bound=[1,1] finite upper bound=[1,1] is point class=Point name=Unnamed dimension=2 values=[0.5,0.5] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1]? yes is point class=Point name=Unnamed dimension=2 values=[4,4] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1]? no openturns-1.9/lib/test/t_InverseBoxCoxEvaluation_std.cxx000066400000000000000000000042651307543307100236660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseBoxCoxEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger dimension = 3; // Lambda Point lambda(dimension); lambda[0] = 0.; lambda[1] = 0.5; lambda[2] = 1; InverseBoxCoxEvaluation myFunction(lambda); myFunction.setName("inverseBoxCoxFunction"); // In this test, we check that for a Point with same values, the function is done by component Point inPoint(dimension, 2.0); // result of the function Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; // Creation of a Sample const UnsignedInteger size = 10; Sample inSample(size, dimension); for (UnsignedInteger index = 0 ; index < size; ++index) { inSample[index] = Point(dimension, 1.0 / (index + 1)); } // result of the function Sample outSample = myFunction( inSample ); fullprint << myFunction.getName() << "( " << inSample << " ) = " << outSample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseBoxCoxEvaluation_std.expout000066400000000000000000000020101307543307100243720ustar00rootroot00000000000000myFunction=class=InverseBoxCoxEvaluation name=inverseBoxCoxFunction dimension=3 lambda=class=Point name=Unnamed dimension=3 values=[0,0.5,1] shift=class=Point name=Unnamed dimension=3 values=[0,0,0] inverseBoxCoxFunction( class=Point name=Unnamed dimension=3 values=[2,2,2] ) = class=Point name=Unnamed dimension=3 values=[7.38906,4,3] inverseBoxCoxFunction( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[0.5,0.5,0.5],[0.333333,0.333333,0.333333],[0.25,0.25,0.25],[0.2,0.2,0.2],[0.166667,0.166667,0.166667],[0.142857,0.142857,0.142857],[0.125,0.125,0.125],[0.111111,0.111111,0.111111],[0.1,0.1,0.1]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 description=[y0,y1,y2] data=[[2.71828,2.25,2],[1.64872,1.5625,1.5],[1.39561,1.36111,1.33333],[1.28403,1.26562,1.25],[1.2214,1.21,1.2],[1.18136,1.17361,1.16667],[1.15356,1.14796,1.14286],[1.13315,1.12891,1.125],[1.11752,1.1142,1.11111],[1.10517,1.1025,1.1]] openturns-1.9/lib/test/t_InverseBoxCoxTransform_std.cxx000066400000000000000000000053531307543307100235310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseBoxCoxTransform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Realization issued from a Normal distribution const UnsignedInteger dimension = 1; // Fix the realization as a Normal // Parameters are done such as the values are positive Uniform myDistribution(-1, 1); // get a realization const UnsignedInteger n = 51; const Scalar timeStart = 0.; const Scalar timeStep = 0.1; Sample mySample(myDistribution.getSample(n)); RegularGrid myTimeGrid(timeStart, timeStep, n); /* Create a TimeSeries */ const TimeSeries myRealization(myTimeGrid, mySample); // Create the lambda parameter Point lambda(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { lambda[index] = (index + 2) * 0.1; } InverseBoxCoxTransform myInverseBoxCox(lambda); fullprint << "myInverseBoxCox=" << myInverseBoxCox << std::endl; /* Get the input and output dimension */ fullprint << "myInverseBoxCox input dimension=" << myInverseBoxCox.getInputDimension() << std::endl; fullprint << "myInverseBoxCox output dimension=" << myInverseBoxCox.getOutputDimension() << std::endl; fullprint << "input time series=" << myRealization << std::endl; fullprint << "output time series=" << myInverseBoxCox(myRealization) << std::endl; /* InverseBoxCoxTransform's inverse accessor */ BoxCoxTransform myBoxCox(myInverseBoxCox.getInverse()); fullprint << "myBoxCox=" << myBoxCox << std::endl; /* Get the number of calls */ fullprint << "number of call(s) : " << myInverseBoxCox.getCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseBoxCoxTransform_std.expout000066400000000000000000000115571307543307100242560ustar00rootroot00000000000000myInverseBoxCox=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=InverseBoxCoxGradient name=Unnamed evaluation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=InverseBoxCoxHessian name=Unnamed evaluation=class=InverseBoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] myInverseBoxCox input dimension=1 myInverseBoxCox output dimension=1 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=51 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50]] values=class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=51 dimension=1 description=[X0] data=[[0.259753],[0.76561],[-0.729447],[-0.934994],[-0.305886],[0.938846],[0.841359],[0.0060803],[-0.873588],[-0.414486],[0.428764],[-0.233276],[-0.252465],[0.474536],[0.767007],[-0.410012],[0.857021],[0.641622],[0.36915],[0.656054],[-0.280396],[0.909492],[0.177231],[-0.635922],[-0.82843],[0.321455],[-0.579116],[-0.227543],[-0.950881],[-0.162163],[0.963682],[0.832264],[0.911206],[-0.0540999],[-0.480278],[0.32268],[-0.0204509],[-0.0629513],[-0.777844],[-0.309362],[0.311954],[0.350177],[0.95796],[0.292669],[-0.871575],[0.546039],[0.988399],[-0.833853],[-0.550266],[-0.394761],[-0.565578]] start=0 timeStep=0.1 n=51 output time series=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=51 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=51 dimension=1 description=[y0] data=[[1.28818],[2.03881],[0.454538],[0.355186],[0.72932],[2.36407],[2.1763],[1.0061],[0.382836],[0.648769],[1.50888],[0.787499],[0.771775],[1.57357],[2.04128],[0.65194],[2.20564],[1.82881],[1.42783],[1.85233],[0.749338],[2.30622],[1.19025],[0.506539],[0.404248],[1.36553],[0.540375],[0.792246],[0.348299],[0.848021],[2.41392],[2.15941],[2.30957],[0.947058],[0.603544],[1.3671],[0.979716],[0.938614],[0.42936],[0.726624],[1.35339],[1.40278],[2.40236],[1.329],[0.383771],[1.67905],[2.46436],[0.401627],[0.558239],[0.662843],[0.5487]] myBoxCox=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] gradientImplementation=class=BoxCoxGradient name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] hessianImplementation=class=BoxCoxHessian name=Unnamed evaluation=class=BoxCoxEvaluation name=Unnamed dimension=1 lambda=class=Point name=Unnamed dimension=1 values=[0.2] shift=class=Point name=Unnamed dimension=1 values=[0] number of call(s) : 51 openturns-1.9/lib/test/t_InverseChiSquare_std.cxx000066400000000000000000000201671307543307100223170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseChiSquare for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public InverseChiSquare { public: TestObject() : InverseChiSquare(1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Collection allDistributions(0); allDistributions.add(InverseChiSquare(10.5)); allDistributions.add(InverseChiSquare(15.0)); for (UnsignedInteger n = 0; n < allDistributions.getSize(); ++n) { InverseChiSquare distribution(allDistributions[n]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 2.0 / distribution.getNu() ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(1); PDFgrFD[0] = (InverseChiSquare(distribution.getNu() + eps).computePDF(point) - InverseChiSquare(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (InverseChiSquare(distribution.getNu() + eps).computeCDF(point) - InverseChiSquare(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; InverseChiSquare::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseChiSquare_std.expout000066400000000000000000000224471307543307100230440ustar00rootroot00000000000000Testing class InverseChiSquare checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=InverseChiSquare name=InverseChiSquare dimension=1 nu=1.5 streamObject(const T & anObject) class=InverseChiSquare name=InverseChiSquare dimension=1 nu=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=InverseChiSquare name=InverseChiSquare dimension=1 nu=10.5 Distribution InverseChiSquare(nu = 10.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.0782188] oneSample first=class=Point name=Unnamed dimension=1 values=[0.139041] last=class=Point name=Unnamed dimension=1 values=[0.137094] mean=class=Point name=Unnamed dimension=1 values=[0.118211] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00448375] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.190476] ddf =class=Point name=Unnamed dimension=1 values=[-32.6097] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-32.6097] log pdf=0.538527 pdf =1.71348 pdf (FD)=1.71348 cdf=0.898124 ccdf=0.101876 survival=0.101876 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0526499] Survival(inverse survival)=0.95 characteristic function=(0.999474,0.0224004) log characteristic function=(-0.000274906,0.0224084) pdf gradient =class=Point name=Unnamed dimension=2 values=[-1.01934,-6.74683] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.509672] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.0888995,0.163189] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.0444498] quantile=class=Point name=Unnamed dimension=1 values=[0.235] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0358836] upper bound=class=Point name=Unnamed dimension=1 values=[0.238469] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 10.5)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseChiSquare(nu = 10.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 10.5)) level=35.0308 beta=6.11368e-16 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0471602] upper bound=class=Point name=Unnamed dimension=1 values=[0.283384] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[0.235] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0526499] upper bound=class=Point name=Unnamed dimension=1 values=[85.793] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.117647] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00425872] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 10.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.235294] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.0723982] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.032177] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.0257416] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.102966] Standard representative=InverseChiSquare(nu = 10.5) standard deviation=class=Point name=Unnamed dimension=1 values=[0.0652588] skewness=class=Point name=Unnamed dimension=1 values=[3.20493] kurtosis=class=Point name=Unnamed dimension=1 values=[35.5333] Distribution class=InverseChiSquare name=InverseChiSquare dimension=1 nu=15 Distribution InverseChiSquare(nu = 15) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.0913064] oneSample first=class=Point name=Unnamed dimension=1 values=[0.0472117] last=class=Point name=Unnamed dimension=1 values=[0.0823255] mean=class=Point name=Unnamed dimension=1 values=[0.0764712] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00106545] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.133333] ddf =class=Point name=Unnamed dimension=1 values=[-67.8131] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-67.8131] log pdf=0.643708 pdf =1.90353 pdf (FD)=1.90353 cdf=0.942263 ccdf=0.0577369 survival=0.0577369 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0400067] Survival(inverse survival)=0.95 characteristic function=(0.999938,0.0102561) log characteristic function=(-9.55898e-06,0.0102564) pdf gradient =class=Point name=Unnamed dimension=2 values=[-1.18971,-10.7073] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.594853] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.0479461,0.126902] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.023973] quantile=class=Point name=Unnamed dimension=1 values=[0.137723] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0299545] upper bound=class=Point name=Unnamed dimension=1 values=[0.140394] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 15)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseChiSquare(nu = 15)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 15)) level=-0.39369 beta=1.48244 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.036379] upper bound=class=Point name=Unnamed dimension=1 values=[0.15969] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[0.137723] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0400067] upper bound=class=Point name=Unnamed dimension=1 values=[10.2372] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.0769231] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00107585] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 15]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.153846] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.027972] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.00621601] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.001776] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.000710401] Standard representative=InverseChiSquare(nu = 15) standard deviation=class=Point name=Unnamed dimension=1 values=[0.0328001] skewness=class=Point name=Unnamed dimension=1 values=[2.08463] kurtosis=class=Point name=Unnamed dimension=1 values=[13.0952] openturns-1.9/lib/test/t_InverseGamma_std.cxx000066400000000000000000000212311307543307100214460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseGamma for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public InverseGamma { public: TestObject() : InverseGamma(1.5, 2.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Collection allDistributions(0); allDistributions.add(InverseGamma(5.5, 2.5)); allDistributions.add(InverseGamma(15.0, 2.5)); for (UnsignedInteger n = 0; n < allDistributions.getSize(); ++n) { InverseGamma distribution(allDistributions[n]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 2.0 / (distribution.getK() * distribution.getLambda()) ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (InverseGamma(distribution.getK() + eps, distribution.getLambda()).computePDF(point) - InverseGamma(distribution.getK() - eps, distribution.getLambda()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (InverseGamma(distribution.getK(), distribution.getLambda() + eps).computePDF(point) - InverseGamma(distribution.getK(), distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (InverseGamma(distribution.getK() + eps, distribution.getLambda()).computeCDF(point) - InverseGamma(distribution.getK() - eps, distribution.getLambda()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (InverseGamma(distribution.getK(), distribution.getLambda() + eps).computeCDF(point) - InverseGamma(distribution.getK(), distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; InverseGamma::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseGamma_std.expout000066400000000000000000000227221307543307100221760ustar00rootroot00000000000000Testing class InverseGamma checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=InverseGamma name=InverseGamma dimension=1 k=1.5 lambda=2.5 streamObject(const T & anObject) class=InverseGamma name=InverseGamma dimension=1 k=1.5 lambda=2.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=InverseGamma name=InverseGamma dimension=1 k=5.5 lambda=2.5 Distribution InverseGamma(k = 5.5, lambda = 2.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.0599153] oneSample first=class=Point name=Unnamed dimension=1 values=[0.105001] last=class=Point name=Unnamed dimension=1 values=[0.114865] mean=class=Point name=Unnamed dimension=1 values=[0.0892908] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00236759] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.145455] ddf =class=Point name=Unnamed dimension=1 values=[-56.4599] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-56.4599] log pdf=0.783883 pdf =2.18996 pdf (FD)=2.18996 cdf=0.904561 ccdf=0.0954395 survival=0.0954395 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0406605] Survival(inverse survival)=0.95 characteristic function=(0.999937,0.0129291) log characteristic function=(2.03228e-05,0.0129292) pdf gradient =class=Point name=Unnamed dimension=2 values=[-1.31286,-2.40895] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-1.31286,-2.40895] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.082705,0.127416] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.082705,0.127416] quantile=class=Point name=Unnamed dimension=1 values=[0.174871] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0280966] upper bound=class=Point name=Unnamed dimension=1 values=[0.177562] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseGamma(k = 5.5, lambda = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseGamma(k = 5.5, lambda = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseGamma(k = 5.5, lambda = 2.5)) level=34.4467 beta=1.09642e-15 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0364963] upper bound=class=Point name=Unnamed dimension=1 values=[0.209657] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[0.174871] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0406605] upper bound=class=Point name=Unnamed dimension=1 values=[50.1015] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.0888889] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0022575] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[k : 5.5, lambda : 2.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.222222] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.0634921] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.0253968] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.0169312] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.0338624] Standard representative=InverseGamma(k = 5.5, lambda = 1) standard deviation=class=Point name=Unnamed dimension=1 values=[0.0475131] skewness=class=Point name=Unnamed dimension=1 values=[2.99333] kurtosis=class=Point name=Unnamed dimension=1 values=[29.4] Distribution class=InverseGamma name=InverseGamma dimension=1 k=15 lambda=2.5 Distribution InverseGamma(k = 15, lambda = 2.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.0272144] oneSample first=class=Point name=Unnamed dimension=1 values=[0.0286215] last=class=Point name=Unnamed dimension=1 values=[0.0158049] mean=class=Point name=Unnamed dimension=1 values=[0.0284817] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.38042e-05] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.0533333] ddf =class=Point name=Unnamed dimension=1 values=[-253.351] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-253.352] log pdf=0.463518 pdf =1.58966 pdf (FD)=1.58966 cdf=0.98974 ccdf=0.0102604 survival=0.0102604 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0182761] Survival(inverse survival)=0.95 characteristic function=(0.999999,0.00152381) log characteristic function=(-8.93075e-08,0.00152381) pdf gradient =class=Point name=Unnamed dimension=2 values=[-1.04829,-4.76897] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-1.04829,-4.76897] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.00792151,0.0339127] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.00792151,0.0339127] quantile=class=Point name=Unnamed dimension=1 values=[0.0432604] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0154445] upper bound=class=Point name=Unnamed dimension=1 values=[0.0443646] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseGamma(k = 15, lambda = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseGamma(k = 15, lambda = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseGamma(k = 15, lambda = 2.5)) level=-1.89324 beta=6.64087 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0170288] upper bound=class=Point name=Unnamed dimension=1 values=[0.0476452] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[0.0432604] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0182761] upper bound=class=Point name=Unnamed dimension=1 values=[0.508519] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.0285714] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.27943e-05] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[k : 15, lambda : 2.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.0714286] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.00549451] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.000457875] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[4.1625e-05] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[4.1625e-06] Standard representative=InverseGamma(k = 15, lambda = 1) standard deviation=class=Point name=Unnamed dimension=1 values=[0.00792429] skewness=class=Point name=Unnamed dimension=1 values=[1.20185] kurtosis=class=Point name=Unnamed dimension=1 values=[5.90909] openturns-1.9/lib/test/t_InverseMarginalTransformationHessian_std.cxx000066400000000000000000000034511307543307100264240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseMarginalTransformationHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { InverseMarginalTransformationHessian::DistributionCollection coll(0); coll.add(Normal(1.0, 2.5)); coll.add(Gamma(1.5, 3.0)); InverseMarginalTransformationHessian transformation(coll); fullprint << "transformation=" << transformation << std::endl; Point point(coll.getSize(), 0.75); fullprint << "transformation(" << point << ")=" << transformation.hessian(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseMarginalTransformationHessian_std.expout000066400000000000000000000012421307543307100271420ustar00rootroot00000000000000transformation=class=InverseMarginalTransformationHessian distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[16.6983,0,0,0,0,0,0,5.86713] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_InverseNatafIndependentCopulaEvaluation_std.cxx000066400000000000000000000034371307543307100270370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseNatafIndependentCopulaEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; InverseNatafIndependentCopulaEvaluation transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation(point) << std::endl; fullprint << "transformation parameters gradient=" << transformation.parameterGradient(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseNatafIndependentCopulaEvaluation_std.expout000066400000000000000000000006221307543307100275520ustar00rootroot00000000000000transformation=class=InverseNatafIndependentCopulaEvaluation description=[X0,X1,Y0,Y1] dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Point name=Unnamed dimension=2 values=[0.773373,0.773373] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=2 values=[] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_InverseNatafIndependentCopulaGradient_std.cxx000066400000000000000000000032641307543307100264630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseNatafIndependentCopulaGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; InverseNatafIndependentCopulaGradient transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation.gradient(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseNatafIndependentCopulaGradient_std.expout000066400000000000000000000004501307543307100271770ustar00rootroot00000000000000transformation=class=InverseNatafIndependentCopulaGradient dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.301137,0,0,0.301137] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_InverseNatafIndependentCopulaHessian_std.cxx000066400000000000000000000032611307543307100263150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseNatafIndependentCopulaHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; InverseNatafIndependentCopulaHessian transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation.hessian(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseNatafIndependentCopulaHessian_std.expout000066400000000000000000000005031307543307100270330ustar00rootroot00000000000000transformation=class=InverseNatafIndependentCopulaHessian dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.225853,0,0,0,0,0,0,-0.225853] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_InverseNormalFactory_std.cxx000066400000000000000000000056071307543307100232150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { InverseNormal distribution(2.5, 1.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); InverseNormalFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; ResourceMap::Set("InverseNormalFactory-Method", "Moments"); estimatedDistribution = factory.build(sample); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; ResourceMap::Set("InverseNormalFactory-Method", "MLE"); // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; InverseNormal estimatedInverseNormal(factory.buildAsInverseNormal(sample)); fullprint << "InverseNormal =" << distribution << std::endl; fullprint << "Estimated inverseNormal=" << estimatedInverseNormal << std::endl; estimatedInverseNormal = factory.buildAsInverseNormal(); fullprint << "Default inverseNormal=" << estimatedInverseNormal << std::endl; estimatedInverseNormal = factory.buildAsInverseNormal(distribution.getParameter()); fullprint << "InverseNormal from parameters=" << estimatedInverseNormal << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseNormalFactory_std.expout000066400000000000000000000016641307543307100237360ustar00rootroot00000000000000Distribution =class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 Estimated distribution=class=InverseNormal name=InverseNormal dimension=1 lambda=2.46246 mu=1.47866 Distribution =class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 Estimated distribution=class=InverseNormal name=InverseNormal dimension=1 lambda=2.51756 mu=1.47866 Default distribution=class=InverseNormal name=InverseNormal dimension=1 lambda=1 mu=1 Distribution from parameters=class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 InverseNormal =class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 Estimated inverseNormal=class=InverseNormal name=InverseNormal dimension=1 lambda=2.46246 mu=1.47866 Default inverseNormal=class=InverseNormal name=InverseNormal dimension=1 lambda=1 mu=1 InverseNormal from parameters=class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 openturns-1.9/lib/test/t_InverseNormal_std.cxx000066400000000000000000000154521307543307100216640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public InverseNormal { public: TestObject() : InverseNormal(0.5, 2.) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object InverseNormal distribution(0.5, 2.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; fullprint << "range=" << distribution.getRange() << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; RandomGenerator::SetSeed(1); for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } Point point( distribution.getDimension(), 3.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Moments Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Triangular::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseNormal_std.expout000066400000000000000000000111661307543307100224040ustar00rootroot00000000000000Testing class InverseNormal checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=InverseNormal name=InverseNormal dimension=1 lambda=0.5 mu=2 streamObject(const T & anObject) class=InverseNormal name=InverseNormal dimension=1 lambda=0.5 mu=2 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=InverseNormal name=InverseNormal dimension=1 lambda=0.5 mu=2 Distribution InverseNormal(lambda = 0.5, mu = 2) Elliptical = false Continuous = true range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[472.248] finite lower bound=[1] finite upper bound=[0] oneRealization=class=Point name=Unnamed dimension=1 values=[0.632204] oneSample first=class=Point name=Unnamed dimension=1 values=[6.88993] last=class=Point name=Unnamed dimension=1 values=[0.573857] mean=class=Point name=Unnamed dimension=1 values=[1.98518] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[14.9406] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[3] log pdf=-2.93426 pdf =0.0531698 pdf (FD)=0.0531698 cdf=0.834308 ccdf=0.165692 survival=0.165692 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.117535] Survival(inverse survival)=0.95 characteristic function=(0.130777,0.348769) log characteristic function=(-0.987568,1.21205) quantile=class=Point name=Unnamed dimension=1 values=[8.26789] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0274495] upper bound=class=Point name=Unnamed dimension=1 values=[8.27076] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseNormal(lambda = 0.5, mu = 2)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseNormal(lambda = 0.5, mu = 2)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseNormal(lambda = 0.5, mu = 2)) level=4.73175 beta=0.00881103 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0917281] upper bound=class=Point name=Unnamed dimension=1 values=[12.6739] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[8.26789] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.117535] upper bound=class=Point name=Unnamed dimension=1 values=[472.248] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[2] standard deviation=class=Point name=Unnamed dimension=1 values=[4] skewness=class=Point name=Unnamed dimension=1 values=[6] kurtosis=class=Point name=Unnamed dimension=1 values=[63] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[16] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[lambda : 0.5, mu : 2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[20] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[488] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[19600] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1.09955e+06] Standard representative=InverseNormal(lambda = 0.5, mu = 2) openturns-1.9/lib/test/t_InverseTrendEvaluation_std.cxx000066400000000000000000000040201307543307100235250ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseTrendEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger dimension = 2; // Function SymbolicFunction f("t", "sin(t)"); InverseTrendEvaluation myFunction(f); myFunction.setName("InverseTrendFunction"); Point inPoint(dimension, 3.0); // result of the function Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; // Creation of a Sample const UnsignedInteger size = 10; Sample inSample(size, dimension); for (UnsignedInteger index = 0 ; index < size; ++index) { inSample[index] = Point(dimension, index + 1); } // result of the function Sample outSample = myFunction( inSample ); fullprint << myFunction.getName() << "( " << inSample << " ) = " << outSample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseTrendEvaluation_std.expout000066400000000000000000000022711307543307100242550ustar00rootroot00000000000000myFunction=class=InverseTrendEvaluation name=InverseTrendFunction function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] InverseTrendFunction( class=Point name=Unnamed dimension=2 values=[3,3] ) = class=Point name=Unnamed dimension=1 values=[2.85888] InverseTrendFunction( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[0.158529],[1.0907],[2.85888],[4.7568],[5.95892],[6.27942],[6.34301],[7.01064],[8.58788],[10.544]] openturns-1.9/lib/test/t_InverseTrendTransform_std.cxx000066400000000000000000000050551307543307100234020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class InverseTrendTransform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Create an intance */ Description inputVars; inputVars.add("t"); Description formula; formula.add("sin(t)"); formula.add("cos(t)"); SymbolicFunction myFunc(inputVars, formula); InverseTrendTransform myInverseTrendFunc(myFunc); fullprint << "myInverseTrendFunc=" << myInverseTrendFunc << std::endl; fullprint << "myInverseTrendFunc input description=" << myInverseTrendFunc.getInputDescription() << std::endl; fullprint << "myInverseTrendFunc input dimension=" << myInverseTrendFunc.getInputDimension() << std::endl; fullprint << "myInverseTrendFunc output description=" << myInverseTrendFunc.getOutputDescription() << std::endl; fullprint << "myInverseTrendFunc output dimension=" << myInverseTrendFunc.getOutputDimension() << std::endl; /* Create a TimeSeries */ RegularGrid tg(0.0, 0.1, 11); Sample data(tg.getN(), 2); for (UnsignedInteger i = 0; i < data.getSize(); ++i) { const Scalar instant = tg.getStart() + i * tg.getStep(); data(i, 0) = i + 1 + sin(instant); data(i, 1) = i + cos(instant); } TimeSeries ts(tg, data); fullprint << "input time series=" << ts << std::endl; fullprint << "output time series=" << myInverseTrendFunc(ts) << std::endl; /* Get the number of calls */ fullprint << "called " << myInverseTrendFunc.getCallsNumber() << " times" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseTrendTransform_std.expout000066400000000000000000000032721307543307100241230ustar00rootroot00000000000000myInverseTrendFunc=class=InverseTrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0,y1] formulas=[sin(t),cos(t)] myInverseTrendFunc input description=[y0,y1] myInverseTrendFunc input dimension=2 myInverseTrendFunc output description=[y0,y1] myInverseTrendFunc output dimension=2 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[1,1],[2.09983,1.995],[3.19867,2.98007],[4.29552,3.95534],[5.38942,4.92106],[6.47943,5.87758],[7.56464,6.82534],[8.64422,7.76484],[9.71736,8.69671],[10.7833,9.62161],[11.8415,10.5403]] start=0 timeStep=0.1 n=11 output time series=class=Field name=Unnamed description=[t,y0,y1] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 description=[y0,y1] data=[[1,0],[2,1],[3,2],[4,3],[5,4],[6,5],[7,6],[8,7],[9,8],[10,9],[11,10]] called 1 times openturns-1.9/lib/test/t_InverseWishart_std.cxx000066400000000000000000000201061307543307100220450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Arcsine for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object CovarianceMatrix cov(1); InverseWishart distribution(cov, 5.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point(distribution.getDimension(), 9.1); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; // Point PDFgrFD(2); // PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - // Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); // PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - // Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); // fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; // Point CDFgrFD(2); // CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - // Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); // CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - // Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); // fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Arcsine::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_InverseWishart_std.expout000066400000000000000000000111311307543307100225650ustar00rootroot00000000000000Distribution class=InverseWishart name=InverseWishart dimension=1 cholesky=class=TriangularMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] nu=5 Distribution InverseWishart(V = [[ 1 ]], nu = 5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.156697] oneSample first=class=Point name=Unnamed dimension=1 values=[0.374649] last=class=Point name=Unnamed dimension=1 values=[0.381059] mean=class=Point name=Unnamed dimension=1 values=[0.335077] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.249466] skewness=class=Point name=Unnamed dimension=1 values=[25.4956] kurtosis=class=Point name=Unnamed dimension=1 values=[1165.62] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf =class=Point name=Unnamed dimension=1 values=[-2.09622e-05] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-2.09622e-05] log pdf=-9.80146 pdf =5.53709e-05 pdf (FD)=5.53709e-05 cdf=0.999795 ccdf=0.000204753 survival=0.000204753 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0903302] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[0.872999] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=1 values=[0.0903302] cdf (tail)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[0.000135385,-9.97944e-05] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.000503875,0.000410437] Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0458714] upper bound=class=Point name=Unnamed dimension=1 values=[0.877774] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(InverseWishart(V = [[ 1 ]], nu = 5)) gradientImplementation=MinimumVolumeLevelSetGradient(InverseWishart(V = [[ 1 ]], nu = 5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(InverseWishart(V = [[ 1 ]], nu = 5)) level=16.35 beta=7.92992e-08 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0779271] upper bound=class=Point name=Unnamed dimension=1 values=[1.20306] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[0.872999] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0903302] upper bound=class=Point name=Unnamed dimension=1 values=[59.8961] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.333333] standard deviation=class=Point name=Unnamed dimension=1 values=[1] skewness=class=Point name=Unnamed dimension=1 values=[18.5998] kurtosis=class=Point name=Unnamed dimension=1 values=[1074.6] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 1, : 5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.333143] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.299063] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1.74217] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[40.1732] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1456.57] Standard representative=InverseWishart(V = [[ 1 ]], nu = 5) openturns-1.9/lib/test/t_IsoProbabilisticTransformation_EllipticalCopula.cxx000066400000000000000000000303331307543307100277170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IsoProbabilisticTransformation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Distribution::IsoProbabilisticTransformation IsoProbabilisticTransformation; typedef Distribution::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; SymmetricTensor clean(SymmetricTensor in) { UnsignedInteger rowDim = in.getNbRows(); UnsignedInteger colDim = in.getNbColumns(); UnsignedInteger sheetDim = in.getNbSheets(); for(UnsignedInteger i = 0; i < rowDim; i++) for(UnsignedInteger j = 0; j < colDim; j++) for (UnsignedInteger k = 0; k < sheetDim; k++) { in(i, j, k) = 1.e-4 * round(1.e4 * in(i, j, k)); if (std::abs(in(i, j, k)) < 1.e-4) in(i, j, k) = 0.0; } return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Create a collection of distribution ComposedDistribution::DistributionCollection aCollection; aCollection.add(Uniform(-1.0, 2.0)); aCollection.add(Gamma(2.0, 2.0, 0.0)); UnsignedInteger dim = aCollection.getSize(); // Create a copula CorrelationMatrix RCopula(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { RCopula(i, j) = (i + j + 1.0) / (2.0 * dim); } } ComposedDistribution distribution(aCollection, NormalCopula(RCopula)); // Test for sampling UnsignedInteger size = 10000; Sample sample = distribution.getSample( size ); fullprint << "sample first=" << sample[0] << " last=" << sample[size - 1] << std::endl; // Should be close to [0.5, 1, 0.544439] fullprint << "sample mean=" << sample.computeMean() << std::endl; // Should be close to [0.75, 0, 0, 0, 0.5, 0, 0, 0, 0.739866] for the independent copula fullprint << "sample covariance=" << sample.computeCovariance() << std::endl; IsoProbabilisticTransformation transform(distribution.getIsoProbabilisticTransformation()); fullprint << "isoprobabilistic transformation=" << transform << std::endl; Sample transformedSample(transform(sample)); fullprint << "transformed sample first=" << transformedSample[0] << " last=" << transformedSample[size - 1] << std::endl; fullprint << "transformed sample mean=" << transformedSample.computeMean() << std::endl; fullprint << "transformed sample covariance=" << transformedSample.computeCovariance() << std::endl; // Test for evaluation InverseIsoProbabilisticTransformation inverseTransform(distribution.getInverseIsoProbabilisticTransformation()); fullprint << "inverse isoprobabilistic transformation=" << inverseTransform << std::endl; Sample transformedBackSample(inverseTransform(transformedSample)); fullprint << "transformed back sample first=" << transformedBackSample[0] << " last=" << transformedBackSample[size - 1] << std::endl; fullprint << "transformed back sample mean=" << transformedBackSample.computeMean() << std::endl; fullprint << "transformed back sample covariance=" << transformedBackSample.computeCovariance() << std::endl; Point point(dim, 0.75); fullprint << "point=" << point << std::endl; Point transformedPoint(transform(point)); fullprint << "transform value at point =" << transformedPoint << std::endl; fullprint << "transform gradient at point =" << transform.gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform gradient at point (FD)=" << CenteredFiniteDifferenceGradient(1.0e-5, transform.getEvaluation()).gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform hessian at point =" << std::setprecision(4) << clean(transform.hessian(point)) << std::endl; fullprint << "transform hessian at point (FD) =" << std::setprecision(4) << clean(CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)) << std::endl; fullprint << "inverse transform value at transformed point =" << inverseTransform(transformedPoint) << std::endl; fullprint << "inverse transform gradient at transformed point =" << inverseTransform.gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform gradient at transformed point (FD)=" << CenteredFiniteDifferenceGradient(1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform hessian at transformed point =" << std::setprecision(4) << clean(inverseTransform.hessian(transformedPoint)) << std::endl; fullprint << "inverse transform hessian at transformed point (FD) =" << std::setprecision(4) << clean(CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)) << std::endl; // Test for parameters fullprint << "parameters gradient at point=" << transform.parameterGradient(point) << std::endl; { // Validation using finite difference Scalar eps = 1.0e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradient(5, 2); Point dTdp; { // dT/dp0 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0 + eps, 2.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0 - eps, 2.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(0, 0) = dTdp[0]; gradient(0, 1) = dTdp[1]; } { // dT/dp1 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0, 2.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0, 2.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(1, 0) = dTdp[0]; gradient(1, 1) = dTdp[1]; } { // dT/dp2 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0 + eps, 2.0, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0 - eps, 2.0, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(2, 0) = dTdp[0]; gradient(2, 1) = dTdp[1]; } { // dT/dp3 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0 + eps, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0 - eps, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(3, 0) = dTdp[0]; gradient(3, 1) = dTdp[1]; } { // dT/dp4 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0, 0.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0, 0.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(4, 0) = dTdp[0]; gradient(4, 1) = dTdp[1]; } fullprint << "parameters gradient (FD) =" << gradient << std::endl; } // Test for parameters fullprint << "(inverse) parameters gradient at point=" << inverseTransform.parameterGradient(point) << std::endl; { // Validation using finite difference Scalar eps = 1.0e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradient(5, 2); Point dTdp; { // dT/dp0 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0 + eps, 2.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0 - eps, 2.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(0, 0) = dTdp[0]; gradient(0, 1) = dTdp[1]; } { // dT/dp1 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0, 2.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0, 2.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(1, 0) = dTdp[0]; gradient(1, 1) = dTdp[1]; } { // dT/dp2 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0 + eps, 2.0, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0 - eps, 2.0, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(2, 0) = dTdp[0]; gradient(2, 1) = dTdp[1]; } { // dT/dp3 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0 + eps, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0 - eps, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(3, 0) = dTdp[0]; gradient(3, 1) = dTdp[1]; } { // dT/dp4 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0, 0.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0, 0.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(4, 0) = dTdp[0]; gradient(4, 1) = dTdp[1]; } fullprint << "(inverse) parameters gradient (FD) =" << gradient << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IsoProbabilisticTransformation_EllipticalCopula.expout000066400000000000000000000331731307543307100304460ustar00rootroot00000000000000sample first=class=Point name=Unnamed dimension=2 values=[1.18542,0.431558] last=class=Point name=Unnamed dimension=2 values=[-0.0893062,0.97441] sample mean=class=Point name=Unnamed dimension=2 values=[0.502667,0.992171] sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.744767,0.273144,0.273144,0.489568] isoprobabilistic transformation=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=2 values=[0,0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,-0.57735,1.1547] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,-0.57735,1.1547] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0,0,0,0,0,0,0,0] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed sample first=class=Point name=Unnamed dimension=2 values=[0.608202,-1.26617] last=class=Point name=Unnamed dimension=2 values=[-0.514176,0.52988] transformed sample mean=class=Point name=Unnamed dimension=2 values=[0.00249552,-0.0141031] transformed sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.987375,-0.01342,-0.01342,1.01408] inverse isoprobabilistic transformation=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=2 values=[0,0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0.5,0.866025] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0.5,0.866025] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0,0,0,0,0,0,0,0] transformed back sample first=class=Point name=Unnamed dimension=2 values=[1.18542,0.431558] last=class=Point name=Unnamed dimension=2 values=[-0.0893062,0.97441] transformed back sample mean=class=Point name=Unnamed dimension=2 values=[0.502667,0.992171] transformed back sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.744767,0.273144,0.273144,0.489568] point=class=Point name=Unnamed dimension=2 values=[0.75,0.75] transform value at point =class=Point name=Unnamed dimension=2 values=[0.210428,-0.289451] transform gradient at point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.854248,0,-0.4932,1.95809] transform gradient at point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.854248,0,-0.4932,1.95809] transform hessian at point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.1536,0,0,0,-0.0887,0,0,-1.7884] transform hessian at point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.1536,0,0,0,-0.0887,0,0,-1.7884] inverse transform value at transformed point =class=Point name=Unnamed dimension=2 values=[0.75,0.75] inverse transform gradient at transformed point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.17062,0,0.294853,0.510701] inverse transform gradient at transformed point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.17062,0,0.294853,0.510701] inverse transform hessian at transformed point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.2463,0,0,0,0.0794,0.1375,0,0.2382] inverse transform hessian at transformed point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.2463,0,0,0,0.0794,0.1375,0,0.2382] parameters gradient at point=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=2 values=[-0.355937,-0.498311,0,0,0,0,0.2055,0.2877,-0.917013,0.734285,-1.95809,0] parameters gradient (FD) =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.355937,-0.498311,0,0,0,0.2055,0.2877,-0.917013,0.734285,-1.95809] (inverse) parameters gradient at point=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=2 values=[0.226627,0.773373,0,0,0,0,0,0,0.695264,-0.837121,1,0] (inverse) parameters gradient (FD) =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.226627,0.773373,0,0,0,0,0,0.695264,-0.837121,1] openturns-1.9/lib/test/t_IsoProbabilisticTransformation_EllipticalDistribution.cxx000066400000000000000000000130371307543307100311550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IsoProbabilisticTransformation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Distribution::IsoProbabilisticTransformation IsoProbabilisticTransformation; typedef Distribution::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; return in; } SymmetricTensor clean(SymmetricTensor in) { UnsignedInteger rowDim = in.getNbRows(); UnsignedInteger colDim = in.getNbColumns(); UnsignedInteger sheetDim = in.getNbSheets(); for(UnsignedInteger i = 0; i < rowDim; i++) for(UnsignedInteger j = 0; j < colDim; j++) for (UnsignedInteger k = 0; k < sheetDim; k++) if (std::abs(in(i, j, k)) < 1.e-6) in(i, j, k) = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 3; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal distribution(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 10000; Sample sample = distribution.getSample( size ); fullprint << "sample first=" << sample[0] << " last=" << sample[size - 1] << std::endl; fullprint << "sample mean=" << sample.computeMean() << std::endl; fullprint << "sample covariance=" << sample.computeCovariance() << std::endl; IsoProbabilisticTransformation transform(distribution.getIsoProbabilisticTransformation()); fullprint << "isoprobabilistic transformation=" << transform << std::endl; Sample transformedSample(transform(sample)); fullprint << "transformed sample first=" << transformedSample[0] << " last=" << transformedSample[size - 1] << std::endl; fullprint << "transformed sample mean=" << transformedSample.computeMean() << std::endl; fullprint << "transformed sample covariance=" << transformedSample.computeCovariance() << std::endl; // Test for evaluation InverseIsoProbabilisticTransformation inverseTransform(distribution.getInverseIsoProbabilisticTransformation()); fullprint << "inverse isoprobabilistic transformation=" << inverseTransform << std::endl; Sample transformedBackSample(inverseTransform(transformedSample)); fullprint << "transformed back sample first=" << transformedBackSample[0] << " last=" << transformedBackSample[size - 1] << std::endl; fullprint << "transformed back sample mean=" << transformedBackSample.computeMean() << std::endl; fullprint << "transformed back sample covariance=" << transformedBackSample.computeCovariance() << std::endl; Point point(dim, 1.0); fullprint << "point=" << point << std::endl; Point transformedPoint(transform(point)); fullprint << "transform value at point =" << transformedPoint << std::endl; fullprint << "transform gradient at point =" << transform.gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform gradient at point (FD)=" << CenteredFiniteDifferenceGradient(1.0e-5, transform.getEvaluation()).gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform hessian at point =" << clean(transform.hessian(point)) << std::endl; fullprint << "transform hessian at point (FD) =" << clean(CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)) << std::endl; fullprint << "inverse transform value at transformed point =" << inverseTransform(transformedPoint) << std::endl; fullprint << "inverse transform gradient at transformed point (FD)=" << inverseTransform.gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform gradient at transformed point =" << CenteredFiniteDifferenceGradient(1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform hessian at transformed point =" << clean(inverseTransform.hessian(transformedPoint)) << std::endl; fullprint << "inverse transform hessian at transformed point (FD) =" << clean(CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)) << std::endl; // Test for parameters fullprint << "parameters gradient at point=" << transform.parameterGradient(point).clean(1.0e-6) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IsoProbabilisticTransformation_EllipticalDistribution.expout000066400000000000000000000115761307543307100317050ustar00rootroot00000000000000sample first=class=Point name=Unnamed dimension=3 values=[1.7164,-2.87731,-0.0888678] last=class=Point name=Unnamed dimension=3 values=[-0.227791,-2.59096,1.4601] sample mean=class=Point name=Unnamed dimension=3 values=[0.476599,-0.538382,0.997853] sample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.93982,2.85907,-0.0162011,2.85907,8.94638,1.48782,-0.0162011,1.48782,1.00509] isoprobabilistic transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,-0.288675,0.204124,0,0.3849,-0.272166,0,0,1.22474] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,-0.288675,0.204124,0,0.3849,-0.272166,0,0,1.22474] hessianImplementation=class=NatafEllipticalDistributionHessian transformed sample first=class=Point name=Unnamed dimension=3 values=[0.608202,-1.26617,-0.438266] last=class=Point name=Unnamed dimension=3 values=[-0.363896,-0.594717,0.984039] transformed sample mean=class=Point name=Unnamed dimension=3 values=[-0.0117004,-0.00801788,0.0030405] transformed sample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.984954,-0.0184348,0.00311426,-0.0184348,1.01836,-0.0129937,0.00311426,-0.0129937,1.01684] inverse isoprobabilistic transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=InverseNatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[0,0,0] cholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,1.5,0,0,2.59808,0.57735,0,0,0.816497] gradientImplementation=class=InverseNatafEllipticalDistributionGradient cholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,1.5,0,0,2.59808,0.57735,0,0,0.816497] hessianImplementation=class=InverseNatafEllipticalDistributionHessian transformed back sample first=class=Point name=Unnamed dimension=3 values=[1.7164,-2.87731,-0.0888678] last=class=Point name=Unnamed dimension=3 values=[-0.227791,-2.59096,1.4601] transformed back sample mean=class=Point name=Unnamed dimension=3 values=[0.476599,-0.538382,0.997853] transformed back sample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.93982,2.85907,-0.0162011,2.85907,8.94638,1.48782,-0.0162011,1.48782,1.00509] point=class=Point name=Unnamed dimension=3 values=[1,1,1] transform value at point =class=Point name=Unnamed dimension=3 values=[0.25,0.433013,-0.306186] transform gradient at point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,-0.288675,0.3849,0,0.204124,-0.272166,1.22474] transform gradient at point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,-0.288675,0.3849,0,0.204124,-0.272166,1.22474] transform hessian at point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] transform hessian at point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] inverse transform value at transformed point =class=Point name=Unnamed dimension=3 values=[1,1,1] inverse transform gradient at transformed point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,0,0,1.5,2.59808,0,0,0.57735,0.816497] inverse transform gradient at transformed point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,0,0,1.5,2.59808,0,0,0.57735,0.816497] inverse transform hessian at transformed point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] inverse transform hessian at transformed point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] parameters gradient at point=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=3 values=[-0.5,0,0,-0.125,0,0,0.288675,-0.3849,0,0,-0.222222,0,-0.204124,0.272166,-1.22474,0,0,0] openturns-1.9/lib/test/t_IsoProbabilisticTransformation_IndependentCopula.cxx000066400000000000000000000312151307543307100300720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IsoProbabilisticTransformation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Distribution::IsoProbabilisticTransformation IsoProbabilisticTransformation; typedef Distribution::InverseIsoProbabilisticTransformation InverseIsoProbabilisticTransformation; SymmetricTensor clean(SymmetricTensor in) { UnsignedInteger rowDim = in.getNbRows(); UnsignedInteger colDim = in.getNbColumns(); UnsignedInteger sheetDim = in.getNbSheets(); for(UnsignedInteger i = 0; i < rowDim; i++) for(UnsignedInteger j = 0; j < colDim; j++) for (UnsignedInteger k = 0; k < sheetDim; k++) { in(i, j, k) = 1.e-4 * round(1.e4 * in(i, j, k)); if (std::abs(in(i, j, k)) < 1.e-4) in(i, j, k) = 0.0; } return in; } void print(Point point) { OStream fullprint(std::cout); UnsignedInteger dimension = point.getDimension(); fullprint << "["; for (UnsignedInteger i = 0; i < dimension; i++) { fullprint << ((i == 0) ? "" : ", "); fullprint << std::setprecision(16) << point[i]; } fullprint << "]" << std::endl; } void print(Matrix matrix) { OStream fullprint(std::cout); UnsignedInteger rowDimension = matrix.getNbRows(); UnsignedInteger colDimension = matrix.getNbColumns(); for (UnsignedInteger i = 0; i < rowDimension; i++) { fullprint << "|"; for (UnsignedInteger j = 0; j < colDimension; j++) { fullprint << ((j == 0) ? "" : ", "); fullprint << std::setw(21) << std::setprecision(16) << matrix(i, j); } fullprint << "|" << std::endl; } } void print(SymmetricTensor tensor) { OStream fullprint(std::cout); UnsignedInteger sheetDimension = tensor.getNbSheets(); for (UnsignedInteger k = 0; k < sheetDimension; k++) { print(Matrix(tensor.getSheet(k))); fullprint << std::endl; } fullprint << "]" << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Create a collection of distribution ComposedDistribution::DistributionCollection aCollection; aCollection.add(Uniform(-1.0, 2.0)); aCollection.add(Gamma(2.0, 2.0, 0.0)); UnsignedInteger dim = aCollection.getSize(); // Instanciate one distribution object ComposedDistribution distribution(aCollection, IndependentCopula(dim)); // Test for sampling UnsignedInteger size = 10000; Sample sample = distribution.getSample( size ); fullprint << "sample first=" << sample[0] << " last=" << sample[size - 1] << std::endl; // Should be close to [0.5, 1, 0.544439] fullprint << "sample mean=" << sample.computeMean() << std::endl; // Should be close to [0.75, 0, 0, 0, 0.5, 0, 0, 0, 0.739866] for the independent copula fullprint << "sample covariance=" << sample.computeCovariance() << std::endl; IsoProbabilisticTransformation transform(distribution.getIsoProbabilisticTransformation()); fullprint << "isoprobabilistic transformation=" << transform << std::endl; Sample transformedSample(transform(sample)); fullprint << "transformed sample first=" << transformedSample[0] << " last=" << transformedSample[size - 1] << std::endl; fullprint << "transformed sample mean=" << transformedSample.computeMean() << std::endl; fullprint << "transformed sample covariance=" << transformedSample.computeCovariance() << std::endl; // Test for evaluation InverseIsoProbabilisticTransformation inverseTransform(distribution.getInverseIsoProbabilisticTransformation()); fullprint << "inverse isoprobabilistic transformation=" << inverseTransform << std::endl; Sample transformedBackSample(inverseTransform(transformedSample)); fullprint << "transformed back sample first=" << transformedBackSample[0] << " last=" << transformedBackSample[size - 1] << std::endl; fullprint << "transformed back sample mean=" << transformedBackSample.computeMean() << std::endl; fullprint << "transformed back sample covariance=" << transformedBackSample.computeCovariance() << std::endl; Point point(dim, 1.0); fullprint << "point=" << point << std::endl; Point transformedPoint(transform(point)); fullprint << "transform value at point =" << transformedPoint << std::endl; fullprint << "transform gradient at point =" << transform.gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform gradient at point (FD)=" << CenteredFiniteDifferenceGradient(1.0e-5, transform.getEvaluation()).gradient(point).clean(1.0e-6) << std::endl; fullprint << "transform hessian at point =" << std::setprecision(4) << clean(transform.hessian(point)) << std::endl; fullprint << "transform hessian at point (FD) =" << std::setprecision(4) << clean(CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)) << std::endl; fullprint << "inverse transform value at transformed point =" << inverseTransform(transformedPoint) << std::endl; fullprint << "inverse transform gradient at transformed point =" << inverseTransform.gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform gradient at transformed point (FD)=" << CenteredFiniteDifferenceGradient(1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1.0e-6) << std::endl; fullprint << "inverse transform hessian at transformed point =" << std::setprecision(4) << clean(inverseTransform.hessian(transformedPoint)) << std::endl; fullprint << "inverse transform hessian at transformed point (FD) =" << std::setprecision(4) << clean(CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)) << std::endl; // Test for parameters fullprint << "parameters gradient at point=" << transform.parameterGradient(point) << std::endl; { // Validation using finite difference Scalar eps = 1e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradient(5, 2); Point dTdp; { // dT/dp0 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0 + eps, 2.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0 - eps, 2.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(0, 0) = dTdp[0]; gradient(0, 1) = dTdp[1]; } { // dT/dp1 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0, 2.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll).getIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0, 2.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(1, 0) = dTdp[0]; gradient(1, 1) = dTdp[1]; } { // dT/dp2 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0 + eps, 2.0, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0 - eps, 2.0, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(2, 0) = dTdp[0]; gradient(2, 1) = dTdp[1]; } { // dT/dp3 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0 + eps, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0 - eps, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(3, 0) = dTdp[0]; gradient(3, 1) = dTdp[1]; } { // dT/dp4 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0, 0.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll).getIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0, 0.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll).getIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(4, 0) = dTdp[0]; gradient(4, 1) = dTdp[1]; } fullprint << "parameters gradient (FD) =" << gradient << std::endl; } // Test for parameters fullprint << "(inverse) parameters gradient at point=" << inverseTransform.parameterGradient(point) << std::endl; { // Validation using finite difference Scalar eps = 1e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradient(5, 2); Point dTdp; { // dT/dp0 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0 + eps, 2.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0 - eps, 2.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(0, 0) = dTdp[0]; gradient(0, 1) = dTdp[1]; } { // dT/dp1 ComposedDistribution::DistributionCollection coll(aCollection); coll[0] = Uniform(-1.0, 2.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); coll[0] = Uniform(-1.0, 2.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(1, 0) = dTdp[0]; gradient(1, 1) = dTdp[1]; } { // dT/dp2 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0 + eps, 2.0, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0 - eps, 2.0, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(2, 0) = dTdp[0]; gradient(2, 1) = dTdp[1]; } { // dT/dp3 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0 + eps, 0.0); IsoProbabilisticTransformation left(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0 - eps, 0.0); IsoProbabilisticTransformation right(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(3, 0) = dTdp[0]; gradient(3, 1) = dTdp[1]; } { // dT/dp4 ComposedDistribution::DistributionCollection coll(aCollection); coll[1] = Gamma(2.0, 2.0, 0.0 + eps); IsoProbabilisticTransformation left(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); coll[1] = Gamma(2.0, 2.0, 0.0 - eps); IsoProbabilisticTransformation right(ComposedDistribution(coll).getInverseIsoProbabilisticTransformation()); dTdp = (left(point) - right(point)) * factor; gradient(4, 0) = dTdp[0]; gradient(4, 1) = dTdp[1]; } fullprint << "(inverse) parameters gradient (FD) =" << gradient << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IsoProbabilisticTransformation_IndependentCopula.expout000066400000000000000000000276351307543307100306270ustar00rootroot00000000000000sample first=class=Point name=Unnamed dimension=2 values=[0.88963,0.64148] last=class=Point name=Unnamed dimension=2 values=[-0.637014,0.629913] sample mean=class=Point name=Unnamed dimension=2 values=[0.5097,1.00099] sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.762895,-0.0052843,-0.0052843,0.516961] isoprobabilistic transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed sample first=class=Point name=Unnamed dimension=2 values=[0.331526,-0.33947] last=class=Point name=Unnamed dimension=2 values=[-1.17003,-0.361455] transformed sample mean=class=Point name=Unnamed dimension=2 values=[0.0107197,-0.00573321] transformed sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.01651,-0.00878902,-0.00878902,1.0289] inverse isoprobabilistic transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed back sample first=class=Point name=Unnamed dimension=2 values=[0.88963,0.64148] last=class=Point name=Unnamed dimension=2 values=[-0.637014,0.629913] transformed back sample mean=class=Point name=Unnamed dimension=2 values=[0.5097,1.00099] transformed back sample covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.762895,-0.0052843,-0.0052843,0.516961] point=class=Point name=Unnamed dimension=2 values=[1,1] transform value at point =class=Point name=Unnamed dimension=2 values=[0.430727,0.237832] transform gradient at point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,0,1.39587] transform gradient at point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,0,1.39587] transform hessian at point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,0,0,0,-0.9325] transform hessian at point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,0,0,0,-0.9325] inverse transform value at transformed point =class=Point name=Unnamed dimension=2 values=[1,1] inverse transform gradient at transformed point =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0,0.716401] inverse transform gradient at transformed point (FD)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0,0.716401] inverse transform hessian at transformed point =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0,0,0,0.3428] inverse transform hessian at transformed point (FD) =class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0,0,0,0.3428] parameters gradient at point=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.305586,-0.611173,0,0,0,0,0,-0.758101,0.697933,-1.39587] parameters gradient (FD) =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.305586,-0.611173,0,0,0,0,0,-0.758101,0.697933,-1.39587] (inverse) parameters gradient at point=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0.690599,-0.824882,1] (inverse) parameters gradient (FD) =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0.690599,-0.824882,1] openturns-1.9/lib/test/t_IteratedQuadrature_std.cxx000066400000000000000000000054351307543307100226770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class IteratedQuadrature * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // First, compute the volume of the unit ball in R^n Scalar a = -1.0; Scalar b = 1.0; String formula("1.0"); Collection< Function > lower(0); Collection< Function > upper(0); IteratedQuadrature algo(GaussKronrod(20, 1.0e-6, GaussKronrodRule(GaussKronrodRule::G3K7))); for (UnsignedInteger n = 0; n < 3; ++n) { Description inVars(Description::BuildDefault(n + 1, "x")); Description inVarsBounds(n); for (UnsignedInteger i = 0; i < n; ++i) inVarsBounds[i] = inVars[i]; if (n > 0) { formula += String("-") + inVars[n - 1] + String("^2"); lower.add(SymbolicFunction(inVarsBounds, Description(1, String("-sqrt(") + formula + String(")")))); upper.add(SymbolicFunction(inVarsBounds, Description(1, String("sqrt(") + formula + String(")")))); } SymbolicFunction integrand(inVars, Description(1, "1.0")); Scalar value = algo.integrate(integrand, a, b, lower, upper)[0]; fullprint << "dim=" << n + 1 << ", volume=" << value << ", calls=" << integrand.getCallsNumber() << std::endl; } // Second, integrate a multi-valued function Interval bounds(Point(3, -1.0), Point(3, 1.0)); Description vars(Description::BuildDefault(3, "x")); Description formulas(2); formulas[0] = "x0^2 + 2*x1^2 + 3*x2^2"; formulas[1] = "x2^2 + 2*x1^2 + 3*x0^2"; SymbolicFunction integrand(vars, formulas); Point value(algo.integrate(integrand, bounds)); fullprint << "value=" << value << ", calls=" << integrand.getCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_IteratedQuadrature_std.expout000066400000000000000000000002451307543307100234130ustar00rootroot00000000000000dim=1, volume=2, calls=14 dim=2, volume=3.14159, calls=3724 dim=3, volume=4.18879, calls=50960 value=class=Point name=Unnamed dimension=2 values=[16,16], calls=2744 openturns-1.9/lib/test/t_JacobiFactory_std.cxx000066400000000000000000000036351307543307100216170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class JacobiFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { { JacobiFactory jacobi(2.5, 3.5, JacobiFactory::PROBABILITY); fullprint << "jacobi=" << jacobi << std::endl; } { JacobiFactory jacobi(2.5, 3.5, JacobiFactory::ANALYSIS); fullprint << "jacobi=" << jacobi << std::endl; } JacobiFactory jacobi(2.5, 3.5); fullprint << "jacobi=" << jacobi << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "jacobi(" << i << ")=" << jacobi.build(i).__str__() << std::endl; } Point roots(jacobi.getRoots(10)); fullprint << "jacobi(10) roots=" << roots << std::endl; Point weights; roots = jacobi.getNodesAndWeights(10, weights); fullprint << "jacobi(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_JacobiFactory_std.expout000066400000000000000000000032211307543307100223300ustar00rootroot00000000000000jacobi=class=JacobiFactory alpha=0 beta=1.5 measure=class=Beta name=Beta dimension=1 r=2.5 t=3.5 a=-1 b=1 jacobi=class=JacobiFactory alpha=2.5 beta=3.5 measure=class=Beta name=Beta dimension=1 r=4.5 t=8 a=-1 b=1 jacobi=class=JacobiFactory alpha=2.5 beta=3.5 measure=class=Beta name=Beta dimension=1 r=4.5 t=8 a=-1 b=1 jacobi(0)=1 jacobi(1)=-0.377964 + 3.02372 * X jacobi(2)=-0.755929 - 1.51186 * X + 7.55929 * X^2 jacobi(3)=0.436436 - 4.36436 * X - 4.36436 * X^2 + 17.4574 * X^3 jacobi(4)=0.690066 + 2.76026 * X - 16.5616 * X^2 - 11.041 * X^3 + 38.6437 * X^4 jacobi(5)=-0.465242 + 5.58291 * X + 11.1658 * X^2 - 52.1071 * X^3 - 26.0536 * X^4 + 83.3714 * X^5 jacobi(6)=-0.657952 - 3.94771 * X + 27.634 * X^2 + 36.8453 * X^3 - 147.381 * X^4 - 58.9525 * X^5 + 176.857 * X^6 jacobi(7)=0.482805 - 6.75926 * X - 20.2778 * X^2 + 108.148 * X^3 + 108.148 * X^4 - 389.334 * X^5 - 129.778 * X^6 + 370.794 * X^7 jacobi(8)=0.63869 + 5.10952 * X - 40.8762 * X^2 - 81.7524 * X^3 + 367.886 * X^4 + 294.309 * X^5 - 981.028 * X^6 - 280.294 * X^7 + 770.808 * X^8 jacobi(9)=-0.494727 + 7.91564 * X + 31.6626 * X^2 - 189.975 * X^3 - 284.963 * X^4 + 1139.85 * X^5 + 759.901 * X^6 - 2388.26 * X^7 - 597.065 * X^8 + 1592.17 * X^9 jacobi(10) roots=class=Point name=Unnamed dimension=10 values=[-0.867175,-0.712865,-0.521474,-0.302684,-0.0681347,0.169589,0.397703,0.603939,0.777235,0.908482] jacobi(10) roots=class=Point name=Unnamed dimension=10 values=[-0.867175,-0.712865,-0.521474,-0.302684,-0.0681347,0.169589,0.397703,0.603939,0.777235,0.908482] and weights=class=Point name=Unnamed dimension=10 values=[0.000553302,0.00864389,0.0456158,0.12776,0.223552,0.260299,0.202864,0.100618,0.0274194,0.0026748] openturns-1.9/lib/test/t_KDTree_std.cxx000066400000000000000000000030011307543307100202010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KDTree for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); Sample sample(Normal(3).getSample(10)); KDTree tree(sample); fullprint << "tree=" << tree << std::endl; Sample test(Normal(3).getSample(20)); for (UnsignedInteger i = 0; i < test.getSize(); ++i) { UnsignedInteger index = tree.getNearestNeighbourIndex(test[i]); Point neighbour(tree.getNearestNeighbour(test[i])); fullprint << "Nearest neighbour of " << test[i] << "=" << neighbour << " (index=" << index << ")" << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_KDTree_std.expout000066400000000000000000000076051307543307100207410ustar00rootroot00000000000000tree=class=KDTree root=class=KDNode index=5 left=class=KDNode index=4 left=NULL right=class=KDNode index=6 left=NULL right=class=KDNode index=2 left=NULL right=NULL right=class=KDNode index=7 left=class=KDNode index=0 left=NULL right=class=KDNode index=1 left=NULL right=NULL right=class=KDNode index=9 left=NULL right=class=KDNode index=8 left=NULL right=class=KDNode index=3 left=NULL right=NULL Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.721533,-0.241223,-1.78796]=class=Point name=Unnamed dimension=3 values=[0.445785,-1.03808,-0.856712] (index=7) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.40136,1.36783,1.00434]=class=Point name=Unnamed dimension=3 values=[-0.355007,1.43725,0.810668] (index=2) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.741548,-0.0436123,0.539345]=class=Point name=Unnamed dimension=3 values=[0.473617,-0.125498,0.351418] (index=8) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.29995,0.407717,-0.485112]=class=Point name=Unnamed dimension=3 values=[-0.0907838,0.995793,-0.139453] (index=5) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.382992,-0.752817,0.257926]=class=Point name=Unnamed dimension=3 values=[0.473617,-0.125498,0.351418] (index=8) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[1.96876,-0.671291,1.85579]=class=Point name=Unnamed dimension=3 values=[0.793156,-0.470526,0.261018] (index=3) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.0521593,0.790446,0.716353]=class=Point name=Unnamed dimension=3 values=[-0.355007,1.43725,0.810668] (index=2) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.743622,0.184356,-1.53073]=class=Point name=Unnamed dimension=3 values=[-0.0907838,0.995793,-0.139453] (index=5) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.655027,0.538071,1.73821]=class=Point name=Unnamed dimension=3 values=[0.473617,-0.125498,0.351418] (index=8) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.958722,0.377922,-0.181004]=class=Point name=Unnamed dimension=3 values=[-0.560206,0.44549,0.322925] (index=6) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[1.67297,-1.03896,-0.353552]=class=Point name=Unnamed dimension=3 values=[0.608202,-1.26617,-0.438266] (index=0) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[1.21381,-0.777033,-1.36853]=class=Point name=Unnamed dimension=3 values=[0.445785,-1.03808,-0.856712] (index=7) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.103474,-0.89182,0.905602]=class=Point name=Unnamed dimension=3 values=[0.473617,-0.125498,0.351418] (index=8) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.334794,-0.483642,0.677958]=class=Point name=Unnamed dimension=3 values=[0.473617,-0.125498,0.351418] (index=8) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[1.70938,1.07062,-0.506925]=class=Point name=Unnamed dimension=3 values=[1.78236,0.0702074,-0.781366] (index=9) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-1.66086,2.24623,0.759602]=class=Point name=Unnamed dimension=3 values=[-0.355007,1.43725,0.810668] (index=2) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.510764,-0.633066,-0.957072]=class=Point name=Unnamed dimension=3 values=[0.445785,-1.03808,-0.856712] (index=7) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[0.544047,0.814561,-0.734708]=class=Point name=Unnamed dimension=3 values=[-0.0907838,0.995793,-0.139453] (index=5) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.111461,0.994482,-0.160625]=class=Point name=Unnamed dimension=3 values=[-0.0907838,0.995793,-0.139453] (index=5) Nearest neighbour of class=Point name=Unnamed dimension=3 values=[-0.938771,-1.96869,-0.657603]=class=Point name=Unnamed dimension=3 values=[-2.29006,-1.28289,-1.31178] (index=4) openturns-1.9/lib/test/t_KFold_std.cxx000066400000000000000000000030631307543307100200720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KFold for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); const UnsignedInteger size = 100; Uniform xuniform(0.9, 1.1); Sample x( xuniform.getSample(size) ); Uniform yuniform(1.9, 2.1); Sample y( yuniform.getSample(size) ); Function f( Description(1, "x"), Description(1, "y"), Description(1, "2.0*x") ); Basis basis; basis.add(f); Indices indices(basis.getSize()); FittingAlgorithm fittingAlgo = KFold(); Scalar result = fittingAlgo.run(x, y, basis, indices); fullprint << "result = " << result << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_KFold_std.expout000066400000000000000000000000211307543307100206030ustar00rootroot00000000000000result = 0.54167 openturns-1.9/lib/test/t_KPermutationsDistribution_std.cxx000066400000000000000000000101241307543307100242740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KPermutationsDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public KPermutationsDistribution { public: TestObject() : KPermutationsDistribution(5, 12) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object KPermutationsDistribution distribution(5, 12); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; // Scalar Survival = distribution.computeSurvivalFunction( point ); // fullprint << "survival=" << Survival << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; // CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); // fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; KPermutationsDistribution::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KPermutationsDistribution_std.expout000066400000000000000000000044251307543307100250250ustar00rootroot00000000000000Testing class KPermutationsDistribution checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=KPermutationsDistribution name=KPermutationsDistribution dimension=5 k=5 n=12 streamObject(const T & anObject) class=KPermutationsDistribution name=KPermutationsDistribution dimension=5 k=5 n=12 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=KPermutationsDistribution name=KPermutationsDistribution dimension=5 k=5 n=12 Distribution KPermutationsDistribution(k = 5, n = 12) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=5 values=[0,5,3,6,8] oneSample first=class=Point name=Unnamed dimension=5 values=[2,6,1,0,8] last=class=Point name=Unnamed dimension=5 values=[5,11,1,2,10] mean=class=Point name=Unnamed dimension=5 values=[5.3888,5.4518,5.5082,5.4548,5.5287] covariance=class=CovarianceMatrix dimension=5 implementation=class=MatrixImplementation name=Unnamed rows=5 columns=5 values=[11.8336,-1.13537,-1.06199,-1.10364,-0.960355,-1.13537,12.0819,-1.07121,-1.27841,-0.968764,-1.06199,-1.07121,11.8851,-1.10004,-0.885674,-1.10364,-1.27841,-1.10004,11.9077,-1.29858,-0.960355,-0.968764,-0.885674,-1.29858,11.9054] Point= class=Point name=Unnamed dimension=5 values=[1,1,1,1,1] log pdf=0 pdf =1 cdf=0 ccdf=1 quantile=class=Point name=Unnamed dimension=5 values=[11,11,11,11,11] cdf(quantile)=1 mean=class=Point name=Unnamed dimension=5 values=[5.5,5.5,5.5,5.5,5.5] covariance=class=CovarianceMatrix dimension=5 implementation=class=MatrixImplementation name=Unnamed rows=5 columns=5 values=[11.9167,-1.08333,-1.08333,-1.08333,-1.08333,-1.08333,11.9167,-1.08333,-1.08333,-1.08333,-1.08333,-1.08333,11.9167,-1.08333,-1.08333,-1.08333,-1.08333,-1.08333,11.9167,-1.08333,-1.08333,-1.08333,-1.08333,-1.08333,11.9167] correlation=class=CovarianceMatrix dimension=5 implementation=class=MatrixImplementation name=Unnamed rows=5 columns=5 values=[1,-0.0909091,-0.0909091,-0.0909091,-0.0909091,-0.0909091,1,-0.0909091,-0.0909091,-0.0909091,-0.0909091,-0.0909091,1,-0.0909091,-0.0909091,-0.0909091,-0.0909091,-0.0909091,1,-0.0909091,-0.0909091,-0.0909091,-0.0909091,-0.0909091,1] parameters=[[n : 12],[n : 12],[n : 12],[n : 12],[n : 12],[k : 5, n : 12]] openturns-1.9/lib/test/t_KPermutations_std.cxx000066400000000000000000000034531307543307100217030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KPermutations for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger k = 3; UnsignedInteger n = 5; { // Classical permutations KPermutations myGenerator(k); fullprint << "myGenerator = " << myGenerator << std::endl; KPermutations::IndicesCollection kPermutations(myGenerator.generate()); fullprint << "kPermutations = " << kPermutations << std::endl; } { // K permutations KPermutations myGenerator(k, n); fullprint << "myGenerator = " << myGenerator << std::endl; KPermutations::IndicesCollection kPermutations(myGenerator.generate()); fullprint << "kPermutations = " << kPermutations << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KPermutations_std.expout000066400000000000000000000012451307543307100224220ustar00rootroot00000000000000myGenerator = class=KPermutations name=Unnamed k=3 n=3 kPermutations = [[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]] myGenerator = class=KPermutations name=Unnamed k=3 n=5 kPermutations = [[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0],[0,1,3],[0,3,1],[1,0,3],[1,3,0],[3,0,1],[3,1,0],[0,1,4],[0,4,1],[1,0,4],[1,4,0],[4,0,1],[4,1,0],[0,2,3],[0,3,2],[2,0,3],[2,3,0],[3,0,2],[3,2,0],[0,2,4],[0,4,2],[2,0,4],[2,4,0],[4,0,2],[4,2,0],[0,3,4],[0,4,3],[3,0,4],[3,4,0],[4,0,3],[4,3,0],[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1],[1,2,4],[1,4,2],[2,1,4],[2,4,1],[4,1,2],[4,2,1],[1,3,4],[1,4,3],[3,1,4],[3,4,1],[4,1,3],[4,3,1],[2,3,4],[2,4,3],[3,2,4],[3,4,2],[4,2,3],[4,3,2]]#60 openturns-1.9/lib/test/t_KarhunenLoeveP1Algorithm_std.cxx000066400000000000000000000062751307543307100237210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KarhunenLoeveP1Algorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Mesh mesh(IntervalMesher(Indices(1, 9)).build(Interval(-1.0, 1.0))); { AbsoluteExponential cov1D(Point(1, 1.0)); KarhunenLoeveP1Algorithm algo(mesh, cov1D, 0.0); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; GaussianProcess process(cov1D, KLModes.getMesh()); Sample coefficients(result.project(process.getSample(10))); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } { CorrelationMatrix R(2); R(0, 1) = 0.5; Point scale(1, 1.0); Point amplitude(2); amplitude[0] = 1.0; amplitude[1] = 2.0; ExponentialModel cov2D(scale, amplitude, R); KarhunenLoeveP1Algorithm algo(mesh, cov2D, 0.0); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; GaussianProcess process(cov2D, KLModes.getMesh()); Sample coefficients(result.project(process.getSample(10))); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KarhunenLoeveP1Algorithm_std.expout000066400000000000000000001220641307543307100244360ustar00rootroot00000000000000KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]]] KL eigenvalues=class=Point name=Unnamed dimension=10 values=[1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=10 data=[[-0.203621,-0.431497,1.51822,-1.01115,0.124251,0.808461,1.53888,1.81086,0.418953,-1.38935],[-1.76177,-0.159268,1.50613,1.52138,-0.359257,-0.171515,0.573694,-0.992881,-0.684789,-0.881749],[0.143707,-0.60078,1.37379,0.706534,-0.0832319,1.09034,-1.47036,-0.279771,-0.196865,-0.165975],[-0.0545959,-1.88514,-0.262147,1.00909,1.38232,0.140004,0.150435,-0.628133,-0.81918,-0.294412],[0.474544,-1.23896,1.01277,0.743111,0.757876,-0.356037,-0.930728,1.03102,1.41191,-1.27186],[0.284542,-0.515046,0.607026,1.56395,-0.0511769,-0.850748,0.497779,-0.299238,0.27467,1.99453],[0.181463,1.20381,0.630583,-0.710783,0.968057,1.05153,2.11158,0.378122,-0.303388,0.754926],[0.939476,-0.285159,-0.13813,-1.24797,-2.80792,1.13789,0.628207,-1.08956,-0.342563,0.801607],[-0.470737,0.465052,-1.62732,1.20605,-1.4716,-1.11118,-0.693818,0.0154974,0.325176,-0.322025],[1.22161,-0.635282,1.50977,-0.864321,-0.291154,-0.770491,-1.0691,1.73122,-1.11705,-0.204718]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]]]#10 ) KL lift=(-0.218409 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]]) - 0.26806 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]]) + 0.588482 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]]) - 0.272021 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]]) + 0.0248709 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]]) + 0.125992 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]]) + 0.19349 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]]) + 0.190979 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]]) + 0.0391245 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]]) - 0.12493 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]])) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.608202],[-0.271448],[-0.479886],[0.337837],[-1.03616],[-0.620015],[-0.709124],[0.293113],[0.720309],[1.05189]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]]] KL eigenvalues=class=Point name=Unnamed dimension=20 values=[4.95043,1.66056,0.802171,0.64647,0.311402,0.269079,0.172398,0.104754,0.1045,0.0680227,0.0504597,0.0478575,0.0375245,0.0347904,0.0279355,0.0169332,0.0110224,0.00775486,0.00608049,0.00563746] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=20 data=[[-1.60239,-3.0203,0.900366,0.263466,-0.640423,0.95979,0.63832,-1.22693,1.8929,-1.07364,-1.1335,0.824662,0.355806,0.534215,0.25566,-2.18519,0.964064,-0.677883,-1.10842,-1.18151],[-1.27147,0.864476,-0.339286,-2.44528,-0.762951,-1.32054,1.13688,-2.20545,0.640524,0.191444,-1.93962,0.487885,-0.350738,0.298397,0.804342,0.165465,-0.81021,-1.06212,1.20385,-1.34606],[0.132977,-0.151807,-0.881459,-0.0936935,-0.194083,-0.168069,0.911533,0.0730198,0.704187,0.987741,0.423058,0.839114,1.05843,0.560032,-0.61264,-0.338296,-0.27073,-0.694375,-0.767607,-0.656371],[0.183077,1.17949,0.97213,-0.575322,0.252678,-0.0467502,1.57401,-0.178257,-1.93233,-1.57764,-0.852779,-1.11244,-0.623046,0.0782933,-0.510651,0.656247,-0.222374,-0.19694,-0.250984,0.381449],[-1.47044,-0.466059,0.119173,0.00106788,0.447117,-0.462723,-1.93382,0.193615,-0.548358,0.229376,-0.0253137,-0.534097,0.380739,1.20099,1.16166,0.452665,-1.65937,0.0902378,2.13384,-0.679656],[-0.189955,0.115762,0.416216,1.27463,-1.86376,0.0855473,-0.095998,0.136914,-0.088579,-0.475802,0.418669,0.608524,-2.2811,2.41884,0.453642,0.158861,2.40542,0.93329,-1.12723,2.05513],[-1.27128,0.721345,-0.0506906,0.0389693,1.06691,0.845977,1.02898,1.11837,-1.09343,0.519788,1.03402,-1.17951,0.0856535,1.09831,-0.57238,-0.281692,-1.77329,0.955157,0.798854,0.124055],[0.868727,-2.31581,0.293953,0.0616447,1.40545,-0.839921,0.206037,0.242091,1.29223,0.49684,1.0014,0.133985,1.72114,-0.538876,-1.06864,0.422318,-1.02584,0.29418,-0.568828,-0.142982],[-1.57185,0.188797,-1.90798,-1.28075,-0.304271,-0.164739,0.396813,-1.76934,-0.308602,-0.368116,0.702189,0.279212,1.93849,-0.0951773,-0.202522,-0.768173,-1.13613,0.456591,-1.76618,1.41845],[1.86898,0.305721,-0.215186,-0.565808,0.49303,0.950718,-0.382939,-0.120791,0.853218,-0.0347473,0.156629,0.258525,0.256935,0.701716,-1.07751,-0.81906,1.68774,-0.975673,-1.20381,0.351974]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]]]#20 ) KL lift=(-3.56525 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]]) - 3.89205 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]]) + 0.806404 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]]) + 0.211836 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]]) - 0.357378 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]]) + 0.49787 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]]) + 0.265036 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]]) - 0.397105 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]]) + 0.611906 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]]) - 0.280018 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]]) - 0.25462 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]]) + 0.180406 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]]) + 0.068924 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]]) + 0.0996428 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]]) + 0.0427308 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]]) - 0.284353 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]]) + 0.101215 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]]) - 0.0596955 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]]) - 0.0864318 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]]) - 0.0887117 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]])) KL lift as field=class=Field name=Unnamed description=[v0,v0,v1] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[-1.51696,-3.76756],[-1.07669,-6.09243],[-0.854224,-6.17513],[-0.0683646,-5.1242],[0.075551,-2.88829],[0.259111,-2.62067],[-0.0713508,-2.03275],[-0.157604,1.3975],[0.438098,2.31818],[0.717228,0.62749]] openturns-1.9/lib/test/t_KarhunenLoeveP1Factory_std.cxx000066400000000000000000000041661307543307100233770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KarhunenLoeveP1Factory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Mesh mesh(IntervalMesher(Indices(1, 9)).build(Interval(-1.0, 1.0))); KarhunenLoeveP1Factory factory(mesh, 0.0); Point lambda; ProcessSample KLModes(factory.buildAsProcessSample(AbsoluteExponential(Point(1, 1.0)), lambda)); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; AbsoluteExponential cov1D(Point(1, 1.0)); Basis KLFunctions(factory.build(cov1D, lambda)); fullprint << "KL functions=" << KLFunctions << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; CorrelationMatrix R(2); R(0, 1) = 0.5; Point scale(1, 1.0); Point amplitude(2); amplitude[0] = 1.0; amplitude[1] = 2.0; ExponentialModel cov2D(scale, amplitude, R); KLFunctions = factory.build(cov2D, lambda); fullprint << "KL functions=" << KLFunctions << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KarhunenLoeveP1Factory_std.expout000066400000000000000000002216241307543307100241210ustar00rootroot00000000000000KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]]] KL eigenvalues=class=Point name=Unnamed dimension=10 values=[1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557] KL functions=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]]] KL eigenvalues=class=Point name=Unnamed dimension=10 values=[1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557] KL functions=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0,y1] evaluationImplementation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[1e-05] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]]] KL eigenvalues=class=Point name=Unnamed dimension=20 values=[4.95043,1.66056,0.802171,0.64647,0.311402,0.269079,0.172398,0.104754,0.1045,0.0680227,0.0504597,0.0478575,0.0375245,0.0347904,0.0279355,0.0169332,0.0110224,0.00775486,0.00608049,0.00563746] openturns-1.9/lib/test/t_KarhunenLoeveQuadratureAlgorithm_std.cxx000066400000000000000000000067101307543307100255500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KarhunenLoeveQuadratureAlgorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsScalar("LinearCombinationEvaluation-SmallCoefficient", 1.0e-10); UnsignedInteger dim = 1; Interval domain(Point(dim, -1.0), Point(dim, 1.0)); OrthogonalProductPolynomialFactory basis(Collection(dim, LegendreFactory())); UnsignedInteger basisSize = 5; LHSExperiment experiment(basis.getMeasure(), 100); Bool mustScale = false; Scalar threshold = 0.0001; AbsoluteExponential model(Point(dim, 1.0)); KarhunenLoeveQuadratureAlgorithm algo(domain, model, experiment, basis, basisSize, mustScale, threshold); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; GaussianProcess process(model, KLModes.getMesh()); ProcessSample sample(process.getSample(10)); Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; // Now using Legendre/Gauss quadrature { UnsignedInteger marginalDegree = 5; KarhunenLoeveQuadratureAlgorithm algo2(domain, model, marginalDegree, threshold); algo2.run(); KarhunenLoeveResult result(algo2.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KarhunenLoeveQuadratureAlgorithm_std.expout000066400000000000000000000400671307543307100262750ustar00rootroot00000000000000KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[-0.997152],[-0.975687],[-0.945485],[-0.934372],[-0.905005],[-0.887838],[-0.872969],[-0.85371],[-0.823519],[-0.807677],[-0.794151],[-0.775176],[-0.74529],[-0.723448],[-0.701219],[-0.698789],[-0.667931],[-0.657676],[-0.639273],[-0.618418],[-0.594967],[-0.573032],[-0.555073],[-0.523508],[-0.515387],[-0.497085],[-0.470133],[-0.445757],[-0.423022],[-0.414115],[-0.395004],[-0.363394],[-0.344698],[-0.330302],[-0.307494],[-0.299879],[-0.267949],[-0.255477],[-0.229506],[-0.211218],[-0.186932],[-0.176419],[-0.152021],[-0.135259],[-0.117392],[-0.0829355],[-0.0693938],[-0.0579699],[-0.0265762],[-0.00971196],[0.0160519],[0.0281132],[0.046915],[0.0624505],[0.0984453],[0.109626],[0.134402],[0.151197],[0.179117],[0.186419],[0.211151],[0.229805],[0.244912],[0.269095],[0.280399],[0.318234],[0.3363],[0.34476],[0.366515],[0.388858],[0.405719],[0.435464],[0.440186],[0.462974],[0.494895],[0.502946],[0.537883],[0.554339],[0.577697],[0.587024],[0.619129],[0.637203],[0.656048],[0.677155],[0.6909],[0.714451],[0.730491],[0.753776],[0.778547],[0.788847],[0.811293],[0.828009],[0.851558],[0.870026],[0.887803],[0.913161],[0.93174],[0.955812],[0.97489],[0.987574]] simplices=[] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[0.52213],[0.533176],[0.54841],[0.553923],[0.568246],[0.57645],[0.583455],[0.592384],[0.606054],[0.613062],[0.618956],[0.627082],[0.639538],[0.648374],[0.657129],[0.658072],[0.669788],[0.673577],[0.680244],[0.687592],[0.695589],[0.702812],[0.708538],[0.71819],[0.720588],[0.725862],[0.733299],[0.739686],[0.745348],[0.747489],[0.751933],[0.758837],[0.762656],[0.765462],[0.769667],[0.771006],[0.776256],[0.778147],[0.781799],[0.784137],[0.786942],[0.78805],[0.790373],[0.791767],[0.793073],[0.795063],[0.795654],[0.796069],[0.796816],[0.796978],[0.796902],[0.796733],[0.796299],[0.795783],[0.794045],[0.793351],[0.791553],[0.79013],[0.787402],[0.786614],[0.783715],[0.781295],[0.779189],[0.775545],[0.773727],[0.767114],[0.763671],[0.761996],[0.757503],[0.752615],[0.748743],[0.741531],[0.740342],[0.734432],[0.725683],[0.72339],[0.713043],[0.707948],[0.700474],[0.697411],[0.686528],[0.680173],[0.673373],[0.66555],[0.660338],[0.651196],[0.644818],[0.635345],[0.624991],[0.620603],[0.610875],[0.603484],[0.592865],[0.58437],[0.576057],[0.563971],[0.554949],[0.543055],[0.533468],[0.527016]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[0.798699],[0.822805],[0.852162],[0.86165],[0.883412],[0.893951],[0.901809],[0.910266],[0.919714],[0.922858],[0.924579],[0.925526],[0.923637],[0.919721],[0.91361],[0.912815],[0.900593],[0.895678],[0.885822],[0.873086],[0.856841],[0.839869],[0.824741],[0.795572],[0.787555],[0.768746],[0.73924],[0.71079],[0.682825],[0.671507],[0.646567],[0.603441],[0.576899],[0.555967],[0.521976],[0.510411],[0.460814],[0.440987],[0.398953],[0.368792],[0.328094],[0.310267],[0.268459],[0.239419],[0.208214],[0.147437],[0.123377],[0.10302],[0.0468749],[0.0166392],[-0.0295729],[-0.0511906],[-0.0848358],[-0.112562],[-0.176416],[-0.196107],[-0.239438],[-0.268534],[-0.316324],[-0.328689],[-0.370117],[-0.400858],[-0.425403],[-0.463991],[-0.481712],[-0.539413],[-0.566024],[-0.578262],[-0.609048],[-0.639584],[-0.661865],[-0.699474],[-0.705237],[-0.732213],[-0.767572],[-0.776022],[-0.810397],[-0.825248],[-0.844782],[-0.852061],[-0.874759],[-0.885876],[-0.896145],[-0.905996],[-0.911447],[-0.918971],[-0.922749],[-0.926233],[-0.927266],[-0.926863],[-0.924249],[-0.920725],[-0.913417],[-0.905722],[-0.896648],[-0.880805],[-0.866985],[-0.846228],[-0.827441],[-0.813784]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[0.850404],[0.899966],[0.949806],[0.962633],[0.983247],[0.986893],[0.985366],[0.977292],[0.95181],[0.932671],[0.913427],[0.882224],[0.823994],[0.77516],[0.720684],[0.71446],[0.631342],[0.602196],[0.548244],[0.484868],[0.411275],[0.340707],[0.282013],[0.177624],[0.15064],[0.089819],[0.000632331],[-0.0791199],[-0.152267],[-0.180517],[-0.240202],[-0.335692],[-0.389966],[-0.430506],[-0.492299],[-0.512226],[-0.591642],[-0.620747],[-0.677666],[-0.714624],[-0.759516],[-0.777419],[-0.815293],[-0.838262],[-0.859946],[-0.89341],[-0.903497],[-0.910644],[-0.923807],[-0.92693],[-0.926355],[-0.923865],[-0.917166],[-0.909053],[-0.881384],[-0.870299],[-0.841607],[-0.81898],[-0.775834],[-0.763438],[-0.71813],[-0.680665],[-0.648334],[-0.593024],[-0.565735],[-0.468214],[-0.418544],[-0.394651],[-0.331485],[-0.264267],[-0.212149],[-0.117765],[-0.102538],[-0.0283093],[0.0771572],[0.103913],[0.220044],[0.27444],[0.35084],[0.38098],[0.482495],[0.537717],[0.593451],[0.65324],[0.69047],[0.750695],[0.788842],[0.839565],[0.886773],[0.904155],[0.937049],[0.956785],[0.977092],[0.986407],[0.989476],[0.983106],[0.969858],[0.941102],[0.908426],[0.881595]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[2.02098],[1.79399],[1.49449],[1.39003],[1.12846],[0.985105],[0.866508],[0.720461],[0.508248],[0.404882],[0.320872],[0.209497],[0.0490223],[-0.0570378],[-0.155543],[-0.165748],[-0.285883],[-0.322008],[-0.38222],[-0.443461],[-0.503728],[-0.552141],[-0.586247],[-0.634605],[-0.644737],[-0.664227],[-0.684776],[-0.695377],[-0.698773],[-0.698464],[-0.694805],[-0.680201],[-0.666832],[-0.654276],[-0.630566],[-0.621653],[-0.579194],[-0.560506],[-0.518113],[-0.485642],[-0.439495],[-0.418535],[-0.367822],[-0.331469],[-0.291521],[-0.211564],[-0.179279],[-0.151743],[-0.0749962],[-0.0333376],[0.0305176],[0.0603859],[0.106764],[0.144805],[0.231372],[0.257661],[0.314615],[0.352028],[0.41169],[0.426709],[0.475562],[0.510158],[0.536615],[0.57581],[0.592702],[0.641984],[0.661253],[0.669262],[0.686738],[0.699762],[0.706098],[0.709499],[0.709086],[0.703254],[0.683893],[0.676852],[0.635687],[0.610081],[0.56657],[0.546773],[0.467648],[0.415357],[0.354657],[0.278952],[0.225139],[0.124417],[0.0494908],[-0.0686784],[-0.206985],[-0.26842],[-0.410499],[-0.523758],[-0.694416],[-0.837554],[-0.983247],[-1.20485],[-1.37774],[-1.61533],[-1.81477],[-1.95294]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[2.46699],[2.0344],[1.49205],[1.31107],[0.878106],[0.654009],[0.476278],[0.267667],[-0.0132371],[-0.139473],[-0.236407],[-0.356363],[-0.509818],[-0.596623],[-0.664829],[-0.671123],[-0.732503],[-0.745721],[-0.761184],[-0.766796],[-0.759406],[-0.74075],[-0.717944],[-0.663599],[-0.647027],[-0.606296],[-0.538919],[-0.471847],[-0.405303],[-0.37842],[-0.319602],[-0.22021],[-0.161047],[-0.11568],[-0.0447051],[-0.0213674],[0.0737073],[0.109342],[0.180193],[0.226986],[0.284623],[0.307844],[0.357395],[0.387717],[0.416522],[0.46129],[0.474847],[0.484464],[0.502158],[0.506305],[0.505355],[0.501884],[0.492648],[0.481532],[0.443925],[0.428963],[0.39049],[0.3604],[0.303636],[0.287478],[0.228995],[0.18134],[0.14074],[0.0724551],[0.0393263],[-0.0758522],[-0.132475],[-0.159193],[-0.228121],[-0.298591],[-0.351037],[-0.440699],[-0.454476],[-0.518666],[-0.600535],[-0.619369],[-0.690685],[-0.717508],[-0.746829],[-0.755378],[-0.769271],[-0.765375],[-0.751285],[-0.722257],[-0.695237],[-0.632843],[-0.577886],[-0.478702],[-0.345996],[-0.282008],[-0.123494],[0.0124232],[0.23149],[0.427181],[0.636528],[0.972842],[1.24893],[1.64622],[1.99445],[2.24306]]] KL eigenvalues=class=Point name=Unnamed dimension=5 values=[1.1483,0.391416,0.15749,0.0668318,0.035614] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=5 data=[[-0.0925383,0.905465,0.543963,1.25091,-0.560751],[-0.715549,-0.230914,0.383488,-0.162984,0.961542],[0.180671,-0.940989,1.00647,-0.685311,0.897492],[0.417306,0.96804,-1.6899,-1.57893,0.755257],[-1.1978,-1.42051,-2.13492,-1.34067,0.343484],[1.15261,1.09864,1.72705,-1.12929,1.03995],[-1.79776,1.20792,0.946314,-0.614654,-0.0625113],[0.642645,1.34378,-0.256209,-0.816543,-1.09532],[0.583539,-0.143015,0.19071,-0.457231,0.252681],[0.0287311,1.10475,1.26228,0.478788,0.82466]] KL functions=Basis( [(0.70255 * (1) - 0.000248374 * (1.73205 * x0) - 0.0831356 * (-1.11803 + 3.3541 * x0^2) + 0.000160127 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.00133029 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.000836876 * (1) - 0.690504 * (1.73205 * x0) - 0.000269551 * (-1.11803 + 3.3541 * x0^2) + 0.150655 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.000219221 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.0769408 * (1) - 0.000541 * (1.73205 * x0) + 0.660957 * (-1.11803 + 3.3541 * x0^2) + 0.00192047 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.235948 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.00203533 * (1) - 0.14544 * (1.73205 * x0) + 0.00149293 * (-1.11803 + 3.3541 * x0^2) - 0.688055 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.00857263 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.0228608 * (1) - 0.00349991 * (1.73205 * x0) + 0.230003 * (-1.11803 + 3.3541 * x0^2) - 0.00283799 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.658909 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))] ) KL lift=(-0.0991631 * ((0.70255 * (1) - 0.000248374 * (1.73205 * x0) - 0.0831356 * (-1.11803 + 3.3541 * x0^2) + 0.000160127 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.00133029 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.566488 * ((-0.000836876 * (1) - 0.690504 * (1.73205 * x0) - 0.000269551 * (-1.11803 + 3.3541 * x0^2) + 0.150655 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.000219221 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.215872 * ((0.0769408 * (1) - 0.000541 * (1.73205 * x0) + 0.660957 * (-1.11803 + 3.3541 * x0^2) + 0.00192047 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.235948 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.323385 * ((0.00203533 * (1) - 0.14544 * (1.73205 * x0) + 0.00149293 * (-1.11803 + 3.3541 * x0^2) - 0.688055 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.00857263 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) - 0.105823 * ((0.0228608 * (1) - 0.00349991 * (1.73205 * x0) + 0.230003 * (-1.11803 + 3.3541 * x0^2) - 0.00283799 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.658909 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)))) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[-0.997152],[-0.975687],[-0.945485],[-0.934372],[-0.905005],[-0.887838],[-0.872969],[-0.85371],[-0.823519],[-0.807677],[-0.794151],[-0.775176],[-0.74529],[-0.723448],[-0.701219],[-0.698789],[-0.667931],[-0.657676],[-0.639273],[-0.618418],[-0.594967],[-0.573032],[-0.555073],[-0.523508],[-0.515387],[-0.497085],[-0.470133],[-0.445757],[-0.423022],[-0.414115],[-0.395004],[-0.363394],[-0.344698],[-0.330302],[-0.307494],[-0.299879],[-0.267949],[-0.255477],[-0.229506],[-0.211218],[-0.186932],[-0.176419],[-0.152021],[-0.135259],[-0.117392],[-0.0829355],[-0.0693938],[-0.0579699],[-0.0265762],[-0.00971196],[0.0160519],[0.0281132],[0.046915],[0.0624505],[0.0984453],[0.109626],[0.134402],[0.151197],[0.179117],[0.186419],[0.211151],[0.229805],[0.244912],[0.269095],[0.280399],[0.318234],[0.3363],[0.34476],[0.366515],[0.388858],[0.405719],[0.435464],[0.440186],[0.462974],[0.494895],[0.502946],[0.537883],[0.554339],[0.577697],[0.587024],[0.619129],[0.637203],[0.656048],[0.677155],[0.6909],[0.714451],[0.730491],[0.753776],[0.778547],[0.788847],[0.811293],[0.828009],[0.851558],[0.870026],[0.887803],[0.913161],[0.93174],[0.955812],[0.97489],[0.987574]] simplices=[] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[0.976744],[0.972378],[0.958796],[0.951764],[0.928351],[0.911651],[0.895534],[0.872543],[0.832138],[0.809024],[0.788351],[0.758023],[0.707492],[0.668743],[0.628016],[0.623494],[0.565112],[0.545376],[0.50965],[0.468815],[0.422661],[0.379467],[0.344216],[0.282811],[0.267176],[0.232255],[0.181775],[0.137283],[0.096949],[0.081482],[0.0489878],[-0.00253585],[-0.0316039],[-0.0532319],[-0.0860872],[-0.0966605],[-0.138751],[-0.154181],[-0.184431],[-0.204178],[-0.228378],[-0.23813],[-0.259064],[-0.272064],[-0.284682],[-0.305413],[-0.312274],[-0.317502],[-0.329277],[-0.334063],[-0.339359],[-0.341025],[-0.34262],[-0.343046],[-0.341099],[-0.339707],[-0.335392],[-0.331566],[-0.323753],[-0.321437],[-0.31285],[-0.305706],[-0.29957],[-0.289228],[-0.284226],[-0.267081],[-0.258868],[-0.255059],[-0.245472],[-0.236106],[-0.229494],[-0.219122],[-0.217657],[-0.211422],[-0.205414],[-0.204482],[-0.203625],[-0.205232],[-0.210032],[-0.212843],[-0.226825],[-0.237894],[-0.252126],[-0.271577],[-0.286374],[-0.315903],[-0.339221],[-0.378016],[-0.426153],[-0.448376],[-0.50155],[-0.54557],[-0.614364],[-0.674149],[-0.73679],[-0.835245],[-0.914508],[-1.02665],[-1.12346],[-1.19187]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[-0.93247],[-0.661209],[-0.238619],[0.238619],[0.661209],[0.93247]] simplices=[] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0.540938],[0.666297],[0.786859],[0.786859],[0.666297],[0.540938]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0.815153],[0.909318],[0.433324],[-0.433324],[-0.909318],[-0.815153]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0.857457],[0.683941],[-0.662356],[-0.662356],[0.683941],[0.857457]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1.4217],[-0.287086],[-0.514751],[0.514751],[0.287086],[-1.4217]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1.37499],[-0.688643],[0.103492],[0.103492],[-0.688643],[1.37499]]] KL eigenvalues=class=Point name=Unnamed dimension=5 values=[1.17804,0.412173,0.183065,0.0839312,0.0519137] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=5 data=[[-0.19021,0.66852,0.795856,1.52719,0.248862],[-0.781867,-0.70339,-0.480362,0.797143,2.32708],[-0.0570826,-1.01354,1.00877,-1.04659,0.999239],[0.541208,1.02116,-1.80074,-0.68054,0.545148],[-1.29167,-1.21324,-1.96111,-0.940005,0.435274],[0.861079,1.51038,2.20132,-0.441706,0.562684],[-1.80213,1.04687,1.20676,0.0694195,-0.0932428],[0.807824,1.17354,-0.572033,-1.02865,-0.436582],[0.638359,-0.291622,0.314835,0.183007,1.0017],[-0.208959,1.31271,1.31898,0.43451,1.0084]] KL functions=Basis( [(0.701232 * (1) - 0.0909208 * (-1.11803 + 3.3541 * x0^2) + 0.00253805 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.685051 * (1.73205 * x0) + 0.175228 * (-3.96863 * x0 + 6.61438 * x0^3)),(0.0837175 * (1) + 0.63746 * (-1.11803 + 3.3541 * x0^2) - 0.294341 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.175228 * (1.73205 * x0) - 0.685051 * (-3.96863 * x0 + 6.61438 * x0^3)),(0.0355587 * (1) + 0.292196 * (-1.11803 + 3.3541 * x0^2) + 0.642928 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))] ) KL lift=(-0.206449 * ((0.701232 * (1) - 0.0909208 * (-1.11803 + 3.3541 * x0^2) + 0.00253805 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.429195 * ((-0.685051 * (1.73205 * x0) + 0.175228 * (-3.96863 * x0 + 6.61438 * x0^3))) + 0.340516 * ((0.0837175 * (1) + 0.63746 * (-1.11803 + 3.3541 * x0^2) - 0.294341 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.442442 * ((-0.175228 * (1.73205 * x0) - 0.685051 * (-3.96863 * x0 + 6.61438 * x0^3))) + 0.0567023 * ((0.0355587 * (1) + 0.292196 * (-1.11803 + 3.3541 * x0^2) + 0.642928 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)))) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[-0.93247],[-0.661209],[-0.238619],[0.238619],[0.661209],[0.93247]] simplices=[] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1.23714],[0.319544],[-0.423888],[-0.340353],[-0.206967],[-0.72061]] openturns-1.9/lib/test/t_KarhunenLoeveQuadratureFactory_std.cxx000066400000000000000000000036061307543307100252320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KarhunenLoeveQuadratureFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 1; Interval domain(Point(dim, -1.0), Point(dim, 1.0)); OrthogonalProductPolynomialFactory basis(Collection(dim, LegendreFactory())); UnsignedInteger basisSize = 10; LHSExperiment experiment(basis.getMeasure(), 1000); Bool mustScale = false; Scalar threshold = 0.01; KarhunenLoeveQuadratureFactory factory(domain, experiment, basis, basisSize, mustScale, threshold); AbsoluteExponential model(Point(dim, 1.0)); Point lambda; Basis KLModes(factory.build(model, lambda)); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KarhunenLoeveQuadratureFactory_std.expout000066400000000000000000003134221307543307100257540ustar00rootroot00000000000000KL modes=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.702174,-3.14498e-05,0.0833769,1.05454e-05,-0.00134338,1.28e-06,1.24881e-05,-1.09989e-06,-4.08916e-06,-5.77354e-07] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.702174,-3.14498e-05,0.0833769,1.05454e-05,-0.00134338,1.28e-06,1.24881e-05,-1.09989e-06,-4.08916e-06,-5.77354e-07] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.702174,-3.14498e-05,0.0833769,1.05454e-05,-0.00134338,1.28e-06,1.24881e-05,-1.09989e-06,-4.08916e-06,-5.77354e-07],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-9.48744e-05,0.690461,2.29378e-05,-0.152325,-2.36916e-05,0.00853292,2.3492e-06,-0.000211375,4.9888e-06,2.07137e-06] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-9.48744e-05,0.690461,2.29378e-05,-0.152325,-2.36916e-05,0.00853292,2.3492e-06,-0.000211375,4.9888e-06,2.07137e-06] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-9.48744e-05,0.690461,2.29378e-05,-0.152325,-2.36916e-05,0.00853292,2.3492e-06,-0.000211375,4.9888e-06,2.07137e-06],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.0787813,5.7874e-05,-0.659439,4.35034e-05,0.241038,1.37535e-05,-0.0278547,-1.68221e-05,0.00162403,9.18244e-06] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.0787813,5.7874e-05,-0.659439,4.35034e-05,0.241038,1.37535e-05,-0.0278547,-1.68221e-05,0.00162403,9.18244e-06] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.0787813,5.7874e-05,-0.659439,4.35034e-05,0.241038,1.37535e-05,-0.0278547,-1.68221e-05,0.00162403,9.18244e-06],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-3.57375e-05,-0.137831,-2.56552e-05,-0.606508,0.000145144,0.330766,-6.75505e-05,-0.0617757,3.78013e-05,0.00598178] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-3.57375e-05,-0.137831,-2.56552e-05,-0.606508,0.000145144,0.330766,-6.75505e-05,-0.0617757,3.78013e-05,0.00598178] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-3.57375e-05,-0.137831,-2.56552e-05,-0.606508,0.000145144,0.330766,-6.75505e-05,-0.0617757,3.78013e-05,0.00598178],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.023496,-0.000182808,-0.207431,-0.000233857,-0.526778,4.98515e-05,0.409037,0.000152171,-0.107255,-7.64915e-05] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.023496,-0.000182808,-0.207431,-0.000233857,-0.526778,4.98515e-05,0.409037,0.000152171,-0.107255,-7.64915e-05] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.023496,-0.000182808,-0.207431,-0.000233857,-0.526778,4.98515e-05,0.409037,0.000152171,-0.107255,-7.64915e-05],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.000130109,-0.0538684,-7.80562e-05,-0.26826,0.000390618,-0.424371,-2.77443e-05,0.467851,-4.65395e-05,-0.16179] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.000130109,-0.0538684,-7.80562e-05,-0.26826,0.000390618,-0.424371,-2.77443e-05,0.467851,-4.65395e-05,-0.16179] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-0.000130109,-0.0538684,-7.80562e-05,-0.26826,0.000390618,-0.424371,-2.77443e-05,0.467851,-4.65395e-05,-0.16179],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[0.0121692,0.000190822,0.10618,7.81677e-05,0.33989,0.000218895,0.363177,-0.000119257,-0.491359,-6.39397e-05] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[0.0121692,0.000190822,0.10618,7.81677e-05,0.33989,0.000218895,0.363177,-0.000119257,-0.491359,-6.39397e-05] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[0.0121692,0.000190822,0.10618,7.81677e-05,0.33989,0.000218895,0.363177,-0.000119257,-0.491359,-6.39397e-05],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-8.66232e-05,-0.0319818,-2.48628e-05,-0.165161,7.10571e-05,-0.373431,0.00036256,-0.258631,-0.000265814,0.515287] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-8.66232e-05,-0.0319818,-2.48628e-05,-0.165161,7.10571e-05,-0.373431,0.00036256,-0.258631,-0.000265814,0.515287] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=2 values=[0,1.73205]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-1.11803,0,3.3541]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[-0,-3.96863,0,6.61438]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.125,-0,-11.25,0,13.125]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,6.21867,-0,-29.0205,0,26.1184]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-1.12673,0,23.6614,-0,-70.9843,0,52.0551]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[-0,-8.47215,0,76.2494,-0,-167.749,0,103.844]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=9 values=[1.12741,-0,-40.5868,0,223.228,-0,-386.928,0,207.283]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=class=ProductPolynomialEvaluation, polynomials=[class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=10 values=[0,10.727,-0,-157.329,0,613.583,-0,-876.547,0,413.925]] gradientImplementation=class=ProductPolynomialGradient hessianImplementation=class=ProductPolynomialHessian] coefficients=class=Point name=Unnamed dimension=10 values=[-8.66232e-05,-0.0319818,-2.48628e-05,-0.165161,7.10571e-05,-0.373431,0.00036256,-0.258631,-0.000265814,0.515287]] KL eigenvalues=class=Point name=Unnamed dimension=8 values=[1.14931,0.390933,0.157068,0.079541,0.047119,0.0308835,0.0204403,0.0145902] openturns-1.9/lib/test/t_KarhunenLoeveSVDAlgorithm_std.cxx000066400000000000000000000143771307543307100240770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KarhunenLoeveSVDAlgorithm * * Copyright 2005-2016 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); Log::Show(Log::ALL); try { Mesh mesh(IntervalMesher(Indices(1, 9)).build(Interval(-1.0, 1.0))); { // 1D mesh, 1D covariance, uniform weight, automatic centering, more samples // than vertices AbsoluteExponential cov1D(Point(1, 1.0)); ProcessSample sample(GaussianProcess(cov1D, mesh).getSample(16)); KarhunenLoeveSVDAlgorithm algo(sample, 0.0); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } { // 1D mesh, 1D covariance, uniform weight, automatic centering AbsoluteExponential cov1D(Point(1, 1.0)); ProcessSample sample(GaussianProcess(cov1D, mesh).getSample(6)); KarhunenLoeveSVDAlgorithm algo(sample, 0.0); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } { // 1D mesh, 1D covariance, uniform weight, declared centered AbsoluteExponential cov1D(Point(1, 1.0)); ProcessSample sample(GaussianProcess(cov1D, mesh).getSample(6)); KarhunenLoeveSVDAlgorithm algo(sample, 0.0, true); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } { // 1D mesh, 1D covariance, nonuniform weight, automatic centering AbsoluteExponential cov1D(Point(1, 1.0)); Point weights(mesh.computeWeights()); ProcessSample sample(GaussianProcess(cov1D, mesh).getSample(6)); KarhunenLoeveSVDAlgorithm algo(sample, weights, 0.0, true); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } { // 1D mesh, 1D covariance, uniform weight, automatic centering CorrelationMatrix R(2); R(0, 1) = 0.5; Point scale(1, 1.0); Point amplitude(2); amplitude[0] = 1.0; amplitude[1] = 2.0; ExponentialModel cov2D(scale, amplitude, R); ProcessSample sample(GaussianProcess(cov2D, mesh).getSample(6)); KarhunenLoeveSVDAlgorithm algo(sample, 0.0); algo.run(); KarhunenLoeveResult result(algo.getResult()); Point lambda(result.getEigenValues()); ProcessSample KLModes(result.getModesAsProcessSample()); fullprint << "KL modes=" << KLModes << std::endl; fullprint << "KL eigenvalues=" << lambda << std::endl; Sample coefficients(result.project(sample)); fullprint << "KL coefficients=" << coefficients << std::endl; Basis KLFunctions(result.getModes()); fullprint << "KL functions=" << KLFunctions.__str__() << std::endl; fullprint << "KL lift=" << result.lift(coefficients[0]).__str__() << std::endl; fullprint << "KL lift as field=" << result.liftAsField(coefficients[0]) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KarhunenLoeveSVDAlgorithm_std.expout000066400000000000000000001254061307543307100246150ustar00rootroot00000000000000KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.461975],[0.469819],[0.680048],[0.922755],[0.788249],[0.92976],[0.701168],[0.698245],[0.566134],[0.382458]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.51558],[0.396054],[0.65763],[0.841717],[0.549378],[-0.149973],[-0.571052],[-0.892482],[-1.14529],[-0.788227]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.17694],[0.791241],[0.25008],[0.356324],[-0.574883],[-0.816454],[-0.921811],[0.0783808],[0.879656],[0.854495]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36553],[0.923253],[-0.0908243],[-0.939984],[-0.649199],[1.01883],[0.125186],[0.0339358],[-0.558081],[-0.267217]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.827786],[-0.278318],[-1.48247],[0.334499],[0.712926],[0.653745],[-0.557117],[-0.581433],[0.347225],[0.362361]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41359],[0.00171596],[-0.474516],[0.131647],[0.135682],[-1.04458],[1.43495],[-0.229441],[-0.117446],[-0.21594]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.568106],[-0.789771],[0.841086],[-0.501649],[0.100571],[0.230669],[0.198091],[-0.901607],[-0.0684603],[1.91607]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.428497],[-0.81678],[-0.215719],[1.1319],[-1.26659],[0.354371],[0.041451],[0.446069],[-0.636201],[0.395102]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.113493],[0.169623],[-0.320876],[-0.277502],[0.738355],[-0.456262],[-0.341375],[1.15214],[-1.08306],[1.3524]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.43812],[-1.11662],[0.504433],[-0.436383],[0.372397],[-0.0543671],[-0.538437],[0.691826],[0.256404],[-1.26353]]] KL eigenvalues=class=Point name=Unnamed dimension=10 values=[1.60029,0.50589,0.153906,0.0878152,0.0611075,0.0301577,0.0274992,0.0223195,0.0146928,0.00912713] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16 dimension=10 data=[[-0.189452,-0.485643,1.70222,-0.517205,0.604995,-0.0950924,0.161491,2.64994,0.142024,0.240817],[-1.55027,-0.374013,0.635319,1.16055,-0.81997,1.07981,-1.10628,0.879015,0.356346,-1.78017],[0.0663551,-0.798178,0.947164,0.558232,-0.503545,0.129052,-1.37747,-1.3402,1.32431,1.32709],[-0.0629095,-1.58012,-1.04936,0.10463,1.695,0.591773,-0.0205873,-0.314632,0.937786,-1.06325],[0.366364,-1.28108,0.47561,0.991608,0.242532,-1.05109,0.632732,0.499147,1.42758,1.01701],[0.191036,-0.652312,-0.09382,1.06039,-0.875604,2.06509,1.11739,-0.869261,-0.656068,0.65343],[0.139098,0.979987,1.39201,0.013876,0.770315,1.8165,0.530493,-0.112153,-0.561827,-0.397765],[0.804564,-0.149545,0.0634084,-2.20233,-1.71693,1.22014,-1.09084,0.466116,0.935362,0.544278],[-0.342453,0.569126,-1.86364,0.646714,-1.14328,-0.617701,-0.834667,1.12089,-0.859128,0.272345],[0.999104,-0.854835,1.57535,-0.257889,-0.70619,-1.21468,0.237331,-0.650056,-1.93085,-0.4816],[-2.19204,-0.526963,-0.15551,-0.444155,-0.94377,0.0800377,2.05802,0.284214,-0.0177107,1.24097],[0.906391,-1.7774,-0.526341,0.940095,0.157656,0.788433,-0.852183,1.07853,-1.57486,0.897874],[-0.850689,-1.94738,-0.44504,-1.86746,-0.0280599,-0.158892,0.0069756,-0.607254,-0.618841,-1.03922],[-2.02375,0.209523,0.677198,-0.166232,1.09287,-0.212562,-1.73651,-0.762777,-1.04715,1.30348],[-0.392083,-0.33658,0.781705,1.01196,-1.59743,-0.863064,-0.0424449,-0.449295,0.366562,-1.23866],[-0.0635799,-0.20035,0.354385,-0.0212267,-0.139495,-0.468914,0.419792,0.0504802,0.337454,0.132563]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.461975],[0.469819],[0.680048],[0.922755],[0.788249],[0.92976],[0.701168],[0.698245],[0.566134],[0.382458]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.51558],[0.396054],[0.65763],[0.841717],[0.549378],[-0.149973],[-0.571052],[-0.892482],[-1.14529],[-0.788227]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.17694],[0.791241],[0.25008],[0.356324],[-0.574883],[-0.816454],[-0.921811],[0.0783808],[0.879656],[0.854495]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36553],[0.923253],[-0.0908243],[-0.939984],[-0.649199],[1.01883],[0.125186],[0.0339358],[-0.558081],[-0.267217]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.827786],[-0.278318],[-1.48247],[0.334499],[0.712926],[0.653745],[-0.557117],[-0.581433],[0.347225],[0.362361]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41359],[0.00171596],[-0.474516],[0.131647],[0.135682],[-1.04458],[1.43495],[-0.229441],[-0.117446],[-0.21594]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.568106],[-0.789771],[0.841086],[-0.501649],[0.100571],[0.230669],[0.198091],[-0.901607],[-0.0684603],[1.91607]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.428497],[-0.81678],[-0.215719],[1.1319],[-1.26659],[0.354371],[0.041451],[0.446069],[-0.636201],[0.395102]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.113493],[0.169623],[-0.320876],[-0.277502],[0.738355],[-0.456262],[-0.341375],[1.15214],[-1.08306],[1.3524]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.43812],[-1.11662],[0.504433],[-0.436383],[0.372397],[-0.0543671],[-0.538437],[0.691826],[0.256404],[-1.26353]]]#10 ) KL lift=(-0.239661 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.461975],[0.469819],[0.680048],[0.922755],[0.788249],[0.92976],[0.701168],[0.698245],[0.566134],[0.382458]]) - 0.345418 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.51558],[0.396054],[0.65763],[0.841717],[0.549378],[-0.149973],[-0.571052],[-0.892482],[-1.14529],[-0.788227]]) + 0.667795 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.17694],[0.791241],[0.25008],[0.356324],[-0.574883],[-0.816454],[-0.921811],[0.0783808],[0.879656],[0.854495]]) - 0.153267 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36553],[0.923253],[-0.0908243],[-0.939984],[-0.649199],[1.01883],[0.125186],[0.0339358],[-0.558081],[-0.267217]]) + 0.149554 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.827786],[-0.278318],[-1.48247],[0.334499],[0.712926],[0.653745],[-0.557117],[-0.581433],[0.347225],[0.362361]]) - 0.0165137 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41359],[0.00171596],[-0.474516],[0.131647],[0.135682],[-1.04458],[1.43495],[-0.229441],[-0.117446],[-0.21594]]) + 0.0267798 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.568106],[-0.789771],[0.841086],[-0.501649],[0.100571],[0.230669],[0.198091],[-0.901607],[-0.0684603],[1.91607]]) + 0.395893 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.428497],[-0.81678],[-0.215719],[1.1319],[-1.26659],[0.354371],[0.041451],[0.446069],[-0.636201],[0.395102]]) + 0.0172152 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.113493],[0.169623],[-0.320876],[-0.277502],[0.738355],[-0.456262],[-0.341375],[1.15214],[-1.08306],[1.3524]]) + 0.0230067 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.43812],[-1.11662],[0.504433],[-0.436383],[0.372397],[-0.0543671],[-0.538437],[0.691826],[0.256404],[-1.26353]])) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.608202],[-0.271448],[-0.479886],[0.337837],[-1.03616],[-0.620015],[-0.709124],[0.293113],[0.720309],[1.05189]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.353883],[0.314608],[0.63721],[1.04152],[0.961824],[0.820085],[0.812974],[0.485266],[0.431062],[0.579206]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.103867],[0.868108],[0.906038],[-0.395452],[-1.02558],[-0.621663],[0.312119],[0.888545],[0.233191],[0.8765]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.556053],[-0.144545],[-0.875082],[-0.642249],[-0.590921],[1.06277],[0.827956],[0.846673],[-0.00614584],[-0.728266]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.29293],[0.873918],[-0.712643],[0.384458],[0.514402],[-0.941549],[0.262212],[0.317184],[-0.876218],[-0.559498]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.865707],[0.0792601],[0.347707],[-0.160287],[-0.496796],[0.316021],[0.946136],[-1.40097],[-0.717634],[0.711095]]] KL eigenvalues=class=Point name=Unnamed dimension=5 values=[0.960801,0.266034,0.125309,0.040464,0.0211503] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=5 data=[[1.11056,-0.637503,-1.22595,-0.57283,1.2366],[-1.29291,0.499071,-1.29777,1.01596,0.602439],[-1.36366,-1.39973,0.443167,-0.816309,0.564281],[0.252502,-1.48097,-0.651503,0.931055,-1.20485],[0.414392,-0.438186,1.09178,1.45137,1.15664],[-0.31507,1.24132,2.20024,-1.74222,-3.26887]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.353883],[0.314608],[0.63721],[1.04152],[0.961824],[0.820085],[0.812974],[0.485266],[0.431062],[0.579206]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.103867],[0.868108],[0.906038],[-0.395452],[-1.02558],[-0.621663],[0.312119],[0.888545],[0.233191],[0.8765]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.556053],[-0.144545],[-0.875082],[-0.642249],[-0.590921],[1.06277],[0.827956],[0.846673],[-0.00614584],[-0.728266]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.29293],[0.873918],[-0.712643],[0.384458],[0.514402],[-0.941549],[0.262212],[0.317184],[-0.876218],[-0.559498]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.865707],[0.0792601],[0.347707],[-0.160287],[-0.496796],[0.316021],[0.946136],[-1.40097],[-0.717634],[0.711095]]] ) KL lift=(1.08857 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.353883],[0.314608],[0.63721],[1.04152],[0.961824],[0.820085],[0.812974],[0.485266],[0.431062],[0.579206]]) - 0.328814 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.103867],[0.868108],[0.906038],[-0.395452],[-1.02558],[-0.621663],[0.312119],[0.888545],[0.233191],[0.8765]]) - 0.433974 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.556053],[-0.144545],[-0.875082],[-0.642249],[-0.590921],[1.06277],[0.827956],[0.846673],[-0.00614584],[-0.728266]]) - 0.115229 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.29293],[0.873918],[-0.712643],[0.384458],[0.514402],[-0.941549],[0.262212],[0.317184],[-0.876218],[-0.559498]]) + 0.17984 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.865707],[0.0792601],[0.347707],[-0.160287],[-0.496796],[0.316021],[0.946136],[-1.40097],[-0.717634],[0.711095]])) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.116468],[0.0333102],[0.920143],[1.46939],[1.49207],[0.801246],[0.56298],[-0.419852],[0.367139],[0.850704]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.455196],[0.445566],[0.690278],[0.79567],[0.966497],[0.873703],[0.826299],[0.644891],[0.494536],[0.308555]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.1747],[0.705614],[0.64003],[0.57785],[0.350114],[-0.0919742],[-0.81675],[-0.824238],[-1.04035],[-0.132548]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.893046],[0.54416],[0.395356],[0.191322],[-0.340857],[-1.43208],[-0.239795],[0.523435],[0.970962],[0.584693]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.581627],[0.885191],[0.321053],[-0.708044],[-1.25088],[0.486448],[0.830476],[0.115511],[-0.512288],[0.593448]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.603587],[-0.399336],[-0.523332],[0.969029],[-0.309502],[-0.689758],[1.01946],[0.380275],[-0.790926],[-1.0625]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.449742],[0.0250465],[0.517659],[-0.0234504],[-0.616032],[0.483213],[-0.261007],[-0.140195],[0.793041],[-2.36645]]] KL eigenvalues=class=Point name=Unnamed dimension=6 values=[2.65233,0.464235,0.104452,0.0915122,0.0492695,0.0143935] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=6 data=[[-0.551179,1.74174,-0.191067,-0.644972,-0.824419,1.23708],[-0.663397,0.884124,0.522084,-1.15646,0.559698,-1.68968],[-0.523475,-0.0458226,1.57521,0.906683,-1.4905,-0.446013],[1.57521,0.837618,-0.855902,0.396819,-0.935123,-1.02598],[-1.18926,-0.894237,-1.40076,-0.461231,-1.16495,-0.504006],[-1.04234,0.825408,-0.717594,1.74767,0.744255,-0.330208]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.455196],[0.445566],[0.690278],[0.79567],[0.966497],[0.873703],[0.826299],[0.644891],[0.494536],[0.308555]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.1747],[0.705614],[0.64003],[0.57785],[0.350114],[-0.0919742],[-0.81675],[-0.824238],[-1.04035],[-0.132548]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.893046],[0.54416],[0.395356],[0.191322],[-0.340857],[-1.43208],[-0.239795],[0.523435],[0.970962],[0.584693]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.581627],[0.885191],[0.321053],[-0.708044],[-1.25088],[0.486448],[0.830476],[0.115511],[-0.512288],[0.593448]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.603587],[-0.399336],[-0.523332],[0.969029],[-0.309502],[-0.689758],[1.01946],[0.380275],[-0.790926],[-1.0625]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.449742],[0.0250465],[0.517659],[-0.0234504],[-0.616032],[0.483213],[-0.261007],[-0.140195],[0.793041],[-2.36645]]] ) KL lift=(-0.89765 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.455196],[0.445566],[0.690278],[0.79567],[0.966497],[0.873703],[0.826299],[0.644891],[0.494536],[0.308555]]) + 1.18673 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.1747],[0.705614],[0.64003],[0.57785],[0.350114],[-0.0919742],[-0.81675],[-0.824238],[-1.04035],[-0.132548]]) - 0.0617511 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.893046],[0.54416],[0.395356],[0.191322],[-0.340857],[-1.43208],[-0.239795],[0.523435],[0.970962],[0.584693]]) - 0.19511 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.581627],[0.885191],[0.321053],[-0.708044],[-1.25088],[0.486448],[0.830476],[0.115511],[-0.512288],[0.593448]]) - 0.182994 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.603587],[-0.399336],[-0.523332],[0.969029],[-0.309502],[-0.689758],[1.01946],[0.380275],[-0.790926],[-1.0625]]) + 0.148417 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.449742],[0.0250465],[0.517659],[-0.0234504],[-0.616032],[0.483213],[-0.261007],[-0.140195],[0.793041],[-2.36645]])) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.773121],[0.307893],[0.225458],[-0.0829538],[-0.221768],[-0.701968],[-2.08351],[-1.70229],[-1.3761],[-0.742955]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.616002],[0.91033],[1.02798],[0.705106],[0.655863],[0.860077],[0.743838],[0.356978],[0.225934],[0.227994]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.856086],[0.0808244],[-0.358739],[-0.93342],[-0.137635],[-0.120464],[0.300981],[0.799944],[0.667921],[1.95805]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.780169],[-0.383753],[-0.128354],[-0.354673],[-0.786633],[0.418481],[0.929192],[0.841422],[-0.996253],[-1.04719]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.922438],[0.356428],[1.05707],[-0.659253],[-1.01324],[0.192014],[-0.482137],[-0.987515],[-0.258715],[0.338851]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.75338],[0.649004],[-0.994779],[-0.309112],[0.773253],[-0.110482],[0.107881],[-0.753421],[-0.150431],[-0.699221]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.386246],[0.0372028],[-0.544439],[0.576211],[-1.0573],[0.55092],[0.0377976],[-0.11143],[1.42888],[-0.798316]]] KL eigenvalues=class=Point name=Unnamed dimension=6 values=[1.61213,0.16891,0.0956362,0.0714837,0.0417428,0.00265863] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=6 data=[[1.29562,1.35719,-0.151435,-0.959615,-1.23087,0.143443],[0.183173,-1.0408,0.499092,0.810411,-1.49408,1.321],[1.73152,-0.59732,1.22341,0.439277,0.579237,-0.787299],[-0.797911,0.160333,0.524329,0.494806,-1.31792,-1.75527],[-0.661971,1.30709,1.75696,0.282236,0.393246,0.729447],[0.46348,0.991861,-0.932411,1.97609,0.160079,0.038246]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.616002],[0.91033],[1.02798],[0.705106],[0.655863],[0.860077],[0.743838],[0.356978],[0.225934],[0.227994]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.856086],[0.0808244],[-0.358739],[-0.93342],[-0.137635],[-0.120464],[0.300981],[0.799944],[0.667921],[1.95805]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.780169],[-0.383753],[-0.128354],[-0.354673],[-0.786633],[0.418481],[0.929192],[0.841422],[-0.996253],[-1.04719]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.922438],[0.356428],[1.05707],[-0.659253],[-1.01324],[0.192014],[-0.482137],[-0.987515],[-0.258715],[0.338851]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.75338],[0.649004],[-0.994779],[-0.309112],[0.773253],[-0.110482],[0.107881],[-0.753421],[-0.150431],[-0.699221]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.386246],[0.0372028],[-0.544439],[0.576211],[-1.0573],[0.55092],[0.0377976],[-0.11143],[1.42888],[-0.798316]]] ) KL lift=(1.64504 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.616002],[0.91033],[1.02798],[0.705106],[0.655863],[0.860077],[0.743838],[0.356978],[0.225934],[0.227994]]) + 0.557786 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.856086],[0.0808244],[-0.358739],[-0.93342],[-0.137635],[-0.120464],[0.300981],[0.799944],[0.667921],[1.95805]]) - 0.0468313 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.780169],[-0.383753],[-0.128354],[-0.354673],[-0.786633],[0.418481],[0.929192],[0.841422],[-0.996253],[-1.04719]]) - 0.256567 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.922438],[0.356428],[1.05707],[-0.659253],[-1.01324],[0.192014],[-0.482137],[-0.987515],[-0.258715],[0.338851]]) - 0.25148 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.75338],[0.649004],[-0.994779],[-0.309112],[0.773253],[-0.110482],[0.107881],[-0.753421],[-0.150431],[-0.699221]]) + 0.00739617 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.386246],[0.0372028],[-0.544439],[0.576211],[-1.0573],[0.55092],[0.0377976],[-0.11143],[1.42888],[-0.798316]])) KL lift as field=class=Field name=Unnamed description=[v0,v0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.779572],[1.3062],[1.47191],[0.907028],[1.09667],[1.31066],[1.44486],[1.43605],[0.905659],[1.59927]] KL modes=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.121431,0.173028],[-0.0411489,-0.0678556],[-0.161338,-0.56929],[-0.340058,-0.802722],[-0.392293,-0.925055],[-0.307619,-0.682377],[-0.322633,-0.753901],[-0.278438,-0.729848],[-0.232889,-0.599109],[-0.193636,-0.391842]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.371553,0.691286],[0.505088,1.01491],[0.594789,0.821138],[0.567747,0.413403],[0.35341,0.0504135],[0.197659,-0.0550613],[-0.12393,-0.473801],[-0.319128,-0.332797],[-0.212597,-0.546314],[-0.289569,-0.869513]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.18022,0.0240764],[0.809075,0.235903],[0.238706,-0.0945309],[0.0888241,-1.11216],[0.25486,0.467533],[0.120085,0.00822735],[-0.123206,0.379998],[-0.311006,-0.142548],[-0.108702,-0.063692],[0.502,1.45997]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.326545,-1.45341],[0.532093,-0.141771],[0.201428,-0.0393993],[-0.199877,0.824197],[-0.707852,0.00232691],[-0.457918,-0.0601884],[-0.418906,0.178391],[-0.581584,0.48867],[-0.648345,-0.60949],[0.0879087,0.25089]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.579604,0.0953957],[0.188979,-1.24773],[0.85366,-0.234561],[0.471406,0.51224],[0.0803436,-0.0144669],[0.292375,-0.440645],[0.757983,-0.0739708],[-0.135872,-0.58329],[0.285989,-0.101564],[-0.476778,0.267572]]] KL eigenvalues=class=Point name=Unnamed dimension=5 values=[5.81043,2.91031,0.47011,0.41955,0.222821] KL coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=5 data=[[-0.0495508,1.36405,1.40808,-0.994889,0.405485],[-1.2341,-0.341968,-0.384568,-1.40512,-1.11256],[-1.21391,-0.461257,1.34206,1.15202,-0.430553],[-0.240875,-1.4139,0.409294,-0.73867,1.49322],[-1.39389,0.90031,-0.949079,0.403789,1.08753],[0.386987,0.511429,0.422292,-1.32706,-0.523815]] KL functions=Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.121431,0.173028],[-0.0411489,-0.0678556],[-0.161338,-0.56929],[-0.340058,-0.802722],[-0.392293,-0.925055],[-0.307619,-0.682377],[-0.322633,-0.753901],[-0.278438,-0.729848],[-0.232889,-0.599109],[-0.193636,-0.391842]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.371553,0.691286],[0.505088,1.01491],[0.594789,0.821138],[0.567747,0.413403],[0.35341,0.0504135],[0.197659,-0.0550613],[-0.12393,-0.473801],[-0.319128,-0.332797],[-0.212597,-0.546314],[-0.289569,-0.869513]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.18022,0.0240764],[0.809075,0.235903],[0.238706,-0.0945309],[0.0888241,-1.11216],[0.25486,0.467533],[0.120085,0.00822735],[-0.123206,0.379998],[-0.311006,-0.142548],[-0.108702,-0.063692],[0.502,1.45997]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.326545,-1.45341],[0.532093,-0.141771],[0.201428,-0.0393993],[-0.199877,0.824197],[-0.707852,0.00232691],[-0.457918,-0.0601884],[-0.418906,0.178391],[-0.581584,0.48867],[-0.648345,-0.60949],[0.0879087,0.25089]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.579604,0.0953957],[0.188979,-1.24773],[0.85366,-0.234561],[0.471406,0.51224],[0.0803436,-0.0144669],[0.292375,-0.440645],[0.757983,-0.0739708],[-0.135872,-0.58329],[0.285989,-0.101564],[-0.476778,0.267572]]] ) KL lift=(-0.119441 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.121431,0.173028],[-0.0411489,-0.0678556],[-0.161338,-0.56929],[-0.340058,-0.802722],[-0.392293,-0.925055],[-0.307619,-0.682377],[-0.322633,-0.753901],[-0.278438,-0.729848],[-0.232889,-0.599109],[-0.193636,-0.391842]]) + 2.32701 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.371553,0.691286],[0.505088,1.01491],[0.594789,0.821138],[0.567747,0.413403],[0.35341,0.0504135],[0.197659,-0.0550613],[-0.12393,-0.473801],[-0.319128,-0.332797],[-0.212597,-0.546314],[-0.289569,-0.869513]]) + 0.965447 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.18022,0.0240764],[0.809075,0.235903],[0.238706,-0.0945309],[0.0888241,-1.11216],[0.25486,0.467533],[0.120085,0.00822735],[-0.123206,0.379998],[-0.311006,-0.142548],[-0.108702,-0.063692],[0.502,1.45997]]) - 0.644416 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.326545,-1.45341],[0.532093,-0.141771],[0.201428,-0.0393993],[-0.199877,0.824197],[-0.707852,0.00232691],[-0.457918,-0.0601884],[-0.418906,0.178391],[-0.581584,0.48867],[-0.648345,-0.60949],[0.0879087,0.25089]]) + 0.191405 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.579604,0.0953957],[0.188979,-1.24773],[0.85366,-0.234561],[0.471406,0.51224],[0.0803436,-0.0144669],[0.292375,-0.440645],[0.757983,-0.0739708],[-0.135872,-0.58329],[0.285989,-0.101564],[-0.476778,0.267572]])) KL lift as field=class=Field name=Unnamed description=[v0,v0,v1] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[-1],[-0.777778],[-0.555556],[-0.333333],[-0.111111],[0.111111],[0.333333],[0.555556],[0.777778],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.89005,2.56607],[1.65466,2.45011],[1.6674,1.86802],[1.66656,-0.448941],[1.58683,0.674912],[0.963685,-0.0842363],[0.046232,-0.774742],[-0.660842,-1.25142],[-0.0993018,-0.887886],[-0.313954,-0.677499]] openturns-1.9/lib/test/t_KernelMixture_std.cxx000066400000000000000000000204241307543307100216710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KernelMixture for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dimension = 3; Point meanPoint(dimension, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dimension, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; Sample sample(0, dimension); // Create a collection of distribution Mixture::DistributionCollection aCollection; aCollection.add( Normal(meanPoint, sigma, IdentityMatrix(dimension)) ); sample.add(meanPoint); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, IdentityMatrix(dimension)) ); sample.add(meanPoint); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, IdentityMatrix(dimension)) ); sample.add(meanPoint); // Instanciate one distribution object Normal kernel; KernelMixture distribution(kernel, sigma, sample); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; Mixture distributionRef(aCollection); // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 100; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( dimension, 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (ref)=" << distributionRef.computeDDF( point ) << std::endl; Point ddfFD(distribution.ContinuousDistribution::computeDDF(point)); fullprint << "ddf (FD)=" << ddfFD << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (ref)=" << distributionRef.computePDF( point ) << std::endl; if (dimension == 1) { fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; } Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; fullprint << "cdf (ref)=" << distributionRef.computeCDF( point ) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "quantile (ref)=" << distributionRef.computeQuantile( 0.95 ) << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; if (distribution.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point x(3); x[0] = 1.1; x[1] = 1.6; x[2] = 2.2; Point q(3); q[0] = 0.1; q[1] = 0.3; q[2] = 0.7; Sample y(3, 1); y[0][0] = -0.5; y[1][0] = 0.5; y[2][0] = 1.5; Scalar condCDF = distribution.computeConditionalCDF(x[0], y[0]); fullprint << "cond. cdf=" << condCDF << std::endl; Point condCDFs(distribution.computeConditionalCDF(x, y)); fullprint << "cond. cdf (vect)=" << condCDFs << std::endl; Scalar condPDF = distribution.computeConditionalPDF(x[0], y[0]); fullprint << "cond. pdf=" << condPDF << std::endl; Point condPDFs(distribution.computeConditionalPDF(x, y)); fullprint << "cond. pdf (vect)=" << condPDFs << std::endl; Scalar condQuantile = distribution.computeConditionalQuantile(q[0], y[0]); fullprint << "cond. quantile=" << condQuantile << std::endl; Point condQuantiles(distribution.computeConditionalQuantile(q, y)); fullprint << "cond. quantile (vect)=" << condQuantiles << std::endl; fullprint << "cond. cdf(cond. quantile)=" << distribution.computeConditionalCDF(condQuantiles, y) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; fullprint << "mean (ref)=" << distributionRef.getMean() << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; fullprint << "covariance (ref)=" << distributionRef.getCovariance() << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; // CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); // fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; // KernelMixture::PointCollection parameters = distribution.getParametersCollection(); // fullprint << "parameters=" << parameters << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KernelMixture_std.expout000066400000000000000000000063351307543307100224200ustar00rootroot00000000000000Distribution class=KernelMixture name=KernelMixture kernel=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bandwidth=class=Point name=Unnamed dimension=3 values=[2,3,1] sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=3 data=[[0.5,-0.5,1],[1.5,0.5,2],[2.5,1.5,3]] Distribution KernelMixture(kernel = Normal(mu = 0, sigma = 1), bandwidth = [2,3,1], sample = 0 : [ 0.5 -0.5 1 ] 1 : [ 1.5 0.5 2 ] 2 : [ 2.5 1.5 3 ] Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=3 values=[2.07328,-2.47593,2.92288] oneSample first=class=Point name=Unnamed dimension=3 values=[-1.86277,2.55013,2.64499] last=class=Point name=Unnamed dimension=3 values=[2.81013,-1.29834,1.89856] mean=class=Point name=Unnamed dimension=3 values=[1.63854,0.0623536,2.01459] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.5743,-0.738335,-0.178015,-0.738335,6.42657,0.306325,-0.178015,0.306325,1.37246] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] ddf =class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] ddf (ref)=class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] ddf (FD)=class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] log pdf=-5.2181 pdf =0.00541761 pdf (ref)=0.00541761 cdf=0.0817585 ccdf=0.918241 survival=0.236113 Inverse survival=class=Point name=Unnamed dimension=3 values=[-3.05991,-6.07458,-0.668274] Survival(inverse survival)=0.95 cdf (ref)=0.0817585 characteristic function=(0.00663938,0.0936246) log characteristic function=(-2.36595,1.5) quantile=class=Point name=Unnamed dimension=3 values=[6.05991,7.07458,4.66827] quantile (ref)=class=Point name=Unnamed dimension=3 values=[6.05991,7.07458,4.66827] cdf(quantile)=0.95 cond. cdf=0.615836 cond. cdf (vect)=class=Point name=Unnamed dimension=3 values=[0.615836,0.657634,0.707868] cond. pdf=0.123311 cond. pdf (vect)=class=Point name=Unnamed dimension=3 values=[0.123311,0.118288,0.110573] cond. quantile=-3.77006 cond. quantile (vect)=class=Point name=Unnamed dimension=3 values=[-3.77006,-1.28752,2.12927] cond. cdf(cond. quantile)=class=Point name=Unnamed dimension=3 values=[0.1,0.3,0.7] mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] mean (ref)=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,0.666667,0.666667,0.666667,9.66667,0.666667,0.666667,0.666667,1.66667] covariance (ref)=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,0.666667,0.666667,0.666667,9.66667,0.666667,0.666667,0.666667,1.66667] correlation=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.0992583,0.239046,0.0992583,1,0.166091,0.239046,0.166091,1] openturns-1.9/lib/test/t_KernelSmoothing_std.cxx000066400000000000000000000132431307543307100222040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KernelSmoothing for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } // Instanciate one distribution object Normal distribution(meanPoint, sigma, R); UnsignedInteger discretization = 300; Sample sample(distribution.getSample(discretization)); Collection kernels; kernels.add(Normal()); kernels.add(Epanechnikov()); kernels.add(Uniform()); kernels.add(Triangular()); kernels.add(Logistic()); kernels.add(Beta(2.0, 4.0, -1.0, 1.0)); kernels.add(Beta(3.0, 6.0, -1.0, 1.0)); for (UnsignedInteger i = 0; i < kernels.getSize(); ++i) { Distribution kernel(kernels[i]); fullprint << "kernel=" << kernel.getName() << std::endl; KernelSmoothing smoother(kernel); Distribution smoothed(smoother.build(sample)); fullprint << "kernel bandwidth=[" << smoother.getBandwidth()[0] << ", " << smoother.getBandwidth()[1] << "]" << std::endl; // Check moments fullprint << "mean(smoothed)=[" << smoothed.getMean()[0] << ", " << smoothed.getMean()[1] << "] mean(exact)=[" << distribution.getMean()[0] << ", " << distribution.getMean()[1] << "]" << std::endl; fullprint << "covariance(smoothed)=" << smoothed.getCovariance() << " covariance(exact)=" << distribution.getCovariance() << std::endl; // Define a point Point point( smoothed.getDimension(), 0.0 ); // Show PDF and CDF of point point Scalar pointPDF = smoothed.computePDF( point ); Scalar pointCDF = smoothed.computeCDF( point ); fullprint << "Point= " << point << std::endl; fullprint << " pdf(smoothed)= " << pointPDF << " pdf(exact)=" << distribution.computePDF( point ) << std::endl; fullprint << " cdf(smoothed)= " << pointCDF << " cdf(exact)=" << distribution.computeCDF( point ) << std::endl; } // Test for boundary correction Collection distributionCollection(2); distributionCollection[0] = Normal(0.0, 1.0); distributionCollection[1] = Beta(0.7, 1.6, -1.0, 2.0); Collection sampleCollection(2); sampleCollection[0] = distributionCollection[0].getSample(discretization); sampleCollection[1] = distributionCollection[1].getSample(discretization); for (UnsignedInteger i = 0; i < kernels.getSize(); ++i) { Distribution kernel(kernels[i]); fullprint << "kernel=" << kernel.getName() << std::endl; KernelSmoothing smoother(kernel); for (UnsignedInteger j = 0; j < 2; ++j) { Scalar hSilverman = smoother.computeSilvermanBandwidth(sampleCollection[j])[0]; Scalar hPlugin = smoother.computePluginBandwidth(sampleCollection[j])[0]; Scalar hMixed = smoother.computeMixedBandwidth(sampleCollection[j])[0]; fullprint << "Silverman's bandwidth=" << hSilverman << " plugin bandwidth=" << hPlugin << " mixed bandwidth=" << hMixed << std::endl; for (UnsignedInteger k = 0; k < 2; ++k) { smoother.setBoundaryCorrection(k == 1); Distribution smoothed(smoother.build(sampleCollection[j])); fullprint << "Bounded underlying distribution? " << (j == 0 ? "False" : "True") << " bounded reconstruction? " << (k == 0 ? "False" : "True") << std::endl; // Define a point Point point( smoothed.getDimension(), -0.9 ); // Show PDF and CDF of point point Scalar pointPDF = smoothed.computePDF( point ); Scalar pointCDF = smoothed.computeCDF( point ); fullprint << " pdf(smoothed)= " << pointPDF << " pdf(exact)=" << distributionCollection[j].computePDF( point ) << std::endl; fullprint << " cdf(smoothed)= " << pointCDF << " cdf(exact)=" << distributionCollection[j].computeCDF( point ) << std::endl; } } } // Test with varying binning { sample = Normal().getSample(5000); Distribution ks1(KernelSmoothing(Normal(), true, 64).build(sample)); Distribution ks2(KernelSmoothing(Normal(), true, 1024).build(sample)); Distribution ks3(KernelSmoothing(Normal(), false).build(sample)); Point point(1, 0.3); fullprint << "with low bin count, pdf=" << ks1.computePDF(point) << std::endl; fullprint << "with high bin count, pdf=" << ks2.computePDF(point) << std::endl; fullprint << "without binning, pdf=" << ks3.computePDF(point) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KernelSmoothing_std.expout000066400000000000000000000230631307543307100227270ustar00rootroot00000000000000kernel=Normal kernel bandwidth=[0.681867, 1.14073] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.025801 pdf(exact)=0.0280502 cdf(smoothed)= 0.271892 cdf(exact)=0.305529 kernel=Epanechnikov kernel bandwidth=[1.5247, 2.55075] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.025933 pdf(exact)=0.0280502 cdf(smoothed)= 0.272041 cdf(exact)=0.305529 kernel=Uniform kernel bandwidth=[1.18103, 1.9758] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.0246413 pdf(exact)=0.0280502 cdf(smoothed)= 0.272447 cdf(exact)=0.305529 kernel=Triangular kernel bandwidth=[1.67023, 2.7942] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.0255707 pdf(exact)=0.0280502 cdf(smoothed)= 0.272078 cdf(exact)=0.305529 kernel=Logistic kernel bandwidth=[0.375933, 0.628917] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.025701 pdf(exact)=0.0280502 cdf(smoothed)= 0.27191 cdf(exact)=0.305529 kernel=Beta kernel bandwidth=[1.5247, 2.55075] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.025933 pdf(exact)=0.0280502 cdf(smoothed)= 0.272041 cdf(exact)=0.305529 kernel=Beta kernel bandwidth=[1.80405, 3.01809] mean(smoothed)=[0.575394, -0.412442] mean(exact)=[0.5, -0.5] covariance(smoothed)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.2591,2.77149,2.77149,9.81845] covariance(exact)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)= 0.0259139 pdf(exact)=0.0280502 cdf(smoothed)= 0.27195 cdf(exact)=0.305529 kernel=Normal Silverman's bandwidth=0.304667 plugin bandwidth=0.301536 mixed bandwidth=0.296607 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.271227 pdf(exact)=0.266085 cdf(smoothed)= 0.208052 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.271406 pdf(exact)=0.266085 cdf(smoothed)= 0.207727 cdf(exact)=0.18406 Silverman's bandwidth=0.390286 plugin bandwidth=0.14183 mixed bandwidth=0.146186 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.458803 pdf(exact)=0.597681 cdf(smoothed)= 0.0829312 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.621511 pdf(exact)=0.597681 cdf(smoothed)= 0.0618142 cdf(exact)=0.0852122 kernel=Epanechnikov Silverman's bandwidth=0.681257 plugin bandwidth=0.674254 mixed bandwidth=0.663233 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.27125 pdf(exact)=0.266085 cdf(smoothed)= 0.208384 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.27125 pdf(exact)=0.266085 cdf(smoothed)= 0.208384 cdf(exact)=0.18406 Silverman's bandwidth=0.872707 plugin bandwidth=0.317142 mixed bandwidth=0.326883 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.437164 pdf(exact)=0.597681 cdf(smoothed)= 0.0831747 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.640392 pdf(exact)=0.597681 cdf(smoothed)= 0.0651184 cdf(exact)=0.0852122 kernel=Uniform Silverman's bandwidth=0.527699 plugin bandwidth=0.522275 mixed bandwidth=0.513738 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.282245 pdf(exact)=0.266085 cdf(smoothed)= 0.208734 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.282245 pdf(exact)=0.266085 cdf(smoothed)= 0.208734 cdf(exact)=0.18406 Silverman's bandwidth=0.675996 plugin bandwidth=0.245657 mixed bandwidth=0.253202 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.414688 pdf(exact)=0.597681 cdf(smoothed)= 0.0829579 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.645071 pdf(exact)=0.597681 cdf(smoothed)= 0.0642517 cdf(exact)=0.0852122 kernel=Triangular Silverman's bandwidth=0.746279 plugin bandwidth=0.738609 mixed bandwidth=0.726535 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.267673 pdf(exact)=0.266085 cdf(smoothed)= 0.208251 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.267673 pdf(exact)=0.266085 cdf(smoothed)= 0.208251 cdf(exact)=0.18406 Silverman's bandwidth=0.956002 plugin bandwidth=0.347412 mixed bandwidth=0.358082 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.447781 pdf(exact)=0.597681 cdf(smoothed)= 0.0833693 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.637093 pdf(exact)=0.597681 cdf(smoothed)= 0.0657848 cdf(exact)=0.0852122 kernel=Logistic Silverman's bandwidth=0.167972 plugin bandwidth=0.166245 mixed bandwidth=0.163528 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.270018 pdf(exact)=0.266085 cdf(smoothed)= 0.207968 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.270196 pdf(exact)=0.266085 cdf(smoothed)= 0.207655 cdf(exact)=0.18406 Silverman's bandwidth=0.215176 plugin bandwidth=0.0781951 mixed bandwidth=0.0805968 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.476832 pdf(exact)=0.597681 cdf(smoothed)= 0.0826949 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.60452 pdf(exact)=0.597681 cdf(smoothed)= 0.0593203 cdf(exact)=0.0852122 kernel=Beta Silverman's bandwidth=0.681257 plugin bandwidth=0.674254 mixed bandwidth=0.663233 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.27125 pdf(exact)=0.266085 cdf(smoothed)= 0.208384 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.27125 pdf(exact)=0.266085 cdf(smoothed)= 0.208384 cdf(exact)=0.18406 Silverman's bandwidth=0.872707 plugin bandwidth=0.317142 mixed bandwidth=0.326883 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.437164 pdf(exact)=0.597681 cdf(smoothed)= 0.0831747 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.640392 pdf(exact)=0.597681 cdf(smoothed)= 0.0651184 cdf(exact)=0.0852122 kernel=Beta Silverman's bandwidth=0.806074 plugin bandwidth=0.797789 mixed bandwidth=0.784747 Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.270706 pdf(exact)=0.266085 cdf(smoothed)= 0.208212 cdf(exact)=0.18406 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.270706 pdf(exact)=0.266085 cdf(smoothed)= 0.208212 cdf(exact)=0.18406 Silverman's bandwidth=1.0326 plugin bandwidth=0.375247 mixed bandwidth=0.386773 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.443128 pdf(exact)=0.597681 cdf(smoothed)= 0.0831543 cdf(exact)=0.0852122 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.6398 pdf(exact)=0.597681 cdf(smoothed)= 0.0654913 cdf(exact)=0.0852122 with low bin count, pdf=0.366602 with high bin count, pdf=0.367161 without binning, pdf=0.367185 openturns-1.9/lib/test/t_KissFFT_std.cxx000066400000000000000000000067111307543307100203470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KissFFT * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // for fft, the best implementation is given for N = 2^p const UnsignedInteger size = 16; // collection for test ComplexCollection collection(size); // Fill the data with artificial values // Create a complex gaussian sample for (UnsignedInteger index = 0; index < size; ++index) { const Scalar realPart = 0.1 * (1.0 + index) / size; const Scalar imagPart = 0.3 * (1.0 + index) / size; collection[index] = Complex(realPart, imagPart); } /* Instanciation of FFT class */ KissFFT myFFT; fullprint << "myFFT = " << myFFT << std::endl; // Initial transformation fullprint << "collection = " << collection << std::endl; // FFT transform const ComplexCollection transformedCollection(myFFT.transform(collection)); fullprint << "FFT result = " << transformedCollection << std::endl; // Inverse transformation const ComplexCollection inverseTransformedCollection(myFFT.inverseTransform(transformedCollection)); fullprint << "FFT back=" << inverseTransformedCollection << std::endl; const Scalar threshold = 1e-14; // 2D case now const UnsignedInteger N = 8; Normal distribution(N); Sample sample(distribution.getSample(2 * N)); // FFT transform const ComplexMatrix transformedSample(myFFT.transform2D(sample)); fullprint << "2D FFT result = " << transformedSample.clean(threshold) << std::endl; // Inverse transformation const ComplexMatrix inverseTransformedSample(myFFT.inverseTransform2D(transformedSample)); fullprint << "2D FFT back=" << inverseTransformedSample.clean(threshold) << std::endl; // 3D case Tensor tensor(N, N, N); for(UnsignedInteger k = 0; k < N; ++k) for (UnsignedInteger j = 0; j < N; ++j) for (UnsignedInteger i = 0; i < N; ++i) tensor(i, j, k) = RandomGenerator::Generate(); // FFT transform const ComplexTensor transformedTensor(myFFT.transform3D(tensor)); fullprint << "3D FFT result = " << transformedTensor.clean(threshold) << std::endl; // Inverse transformation const ComplexTensor inverseTransformedTensor(myFFT.inverseTransform3D(transformedTensor)); fullprint << "3D FFT back=" << inverseTransformedTensor.clean(threshold) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KissFFT_std.expout000066400000000000000000000526301307543307100210720ustar00rootroot00000000000000myFFT = class=KissFFT collection = [(0.00625,0.01875),(0.0125,0.0375),(0.01875,0.05625),(0.025,0.075),(0.03125,0.09375),(0.0375,0.1125),(0.04375,0.13125),(0.05,0.15),(0.05625,0.16875),(0.0625,0.1875),(0.06875,0.20625),(0.075,0.225),(0.08125,0.24375),(0.0875,0.2625),(0.09375,0.28125),(0.1,0.3)]#16 FFT result = [(0.85,2.55),(-0.804101,0.101367),(-0.412132,-0.0292893),(-0.274491,-0.0751697),(-0.2,-0.1),(-0.150227,-0.116591),(-0.112132,-0.129289),(-0.0798369,-0.140054),(-0.05,-0.15),(-0.0201631,-0.159946),(0.012132,-0.170711),(0.0502268,-0.183409),(0.1,-0.2),(0.174491,-0.22483),(0.312132,-0.270711),(0.704101,-0.401367)]#16 FFT back=[(0.00625,0.01875),(0.0125,0.0375),(0.01875,0.05625),(0.025,0.075),(0.03125,0.09375),(0.0375,0.1125),(0.04375,0.13125),(0.05,0.15),(0.05625,0.16875),(0.0625,0.1875),(0.06875,0.20625),(0.075,0.225),(0.08125,0.24375),(0.0875,0.2625),(0.09375,0.28125),(0.1,0.3)]#16 2D FFT result = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=16 columns=8 values=[(3.16931,0),(-6.37974,-6.11715),(-3.08415,7.98457),(-3.94566,11.2042),(-6.06117,0.666391),(1.64417,-4.14897),(0.514855,-1.88685),(12.1186,2.12964),(-3.02083,0),(12.1186,-2.12964),(0.514855,1.88685),(1.64417,4.14897),(-6.06117,-0.666391),(-3.94566,-11.2042),(-3.08415,-7.98457),(-6.37974,6.11715),(-5.77029,-7.24883),(2.74425,-11.564),(-0.00975469,7.31483),(0.891148,-9.51602),(6.6154,-6.00256),(6.00561,2.52621),(-15.575,8.59167),(-9.28442,-3.98255),(-5.17818,-10.0408),(4.20585,6.02783),(4.83876,11.9249),(10.0731,-8.599),(-0.0536966,8.00215),(16.0247,18.8431),(15.4013,12.397),(-1.95861,3.56567),(-1.05663,1.32169),(2.09575,-3.59862),(5.99934,-1.77031),(-3.98933,1.22167),(-20.083,-1.39086),(8.94795,0.745915),(9.20289,10.223),(10.2257,2.6964),(-13.419,-4.45021),(17.0168,5.38565),(-2.41489,12.0928),(-13.2123,-1.87316),(5.23849,9.71701),(-13.3254,3.81627),(14.3634,9.2868),(-18.0684,13.5177),(-2.88771,5.28856),(15.1357,-11.4632),(2.07741,-5.21248),(-1.21193,-4.07099),(5.88504,-2.00739),(8.22369,-3.63049),(-1.8181,11.6403),(5.49036,-7.86156),(6.41094,-6.75183),(11.4121,11.911),(16.212,11.8775),(1.5975,3.40853),(-6.17229,13.9538),(-7.20154,9.75362),(-2.26459,4.21167),(9.40803,-11.4716),(1.9222,0),(-14.7845,5.87216),(-1.07367,6.76406),(-14.8554,-8.10692),(0.0676694,-0.429114),(10.2596,8.50865),(-12.6516,3.74506),(-0.975958,1.01511),(0.616574,0),(-0.975958,-1.01511),(-12.6516,-3.74506),(10.2596,-8.50865),(0.0676694,0.429114),(-14.8554,8.10692),(-1.07367,-6.76406),(-14.7845,-5.87216),(-2.88771,-5.28856),(9.40803,11.4716),(-2.26459,-4.21167),(-7.20154,-9.75362),(-6.17229,-13.9538),(1.5975,-3.40853),(16.212,-11.8775),(11.4121,-11.911),(6.41094,6.75183),(5.49036,7.86156),(-1.8181,-11.6403),(8.22369,3.63049),(5.88504,2.00739),(-1.21193,4.07099),(2.07741,5.21248),(15.1357,11.4632),(-1.05663,-1.32169),(-18.0684,-13.5177),(14.3634,-9.2868),(-13.3254,-3.81627),(5.23849,-9.71701),(-13.2123,1.87316),(-2.41489,-12.0928),(17.0168,-5.38565),(-13.419,4.45021),(10.2257,-2.6964),(9.20289,-10.223),(8.94795,-0.745915),(-20.083,1.39086),(-3.98933,-1.22167),(5.99934,1.77031),(2.09575,3.59862),(-5.77029,7.24883),(-1.95861,-3.56567),(15.4013,-12.397),(16.0247,-18.8431),(-0.0536966,-8.00215),(10.0731,8.599),(4.83876,-11.9249),(4.20585,-6.02783),(-5.17818,10.0408),(-9.28442,3.98255),(-15.575,-8.59167),(6.00561,-2.52621),(6.6154,6.00256),(0.891148,9.51602),(-0.00975469,-7.31483),(2.74425,11.564)] 2D FFT back=class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=16 columns=8 values=[(0.608202,0),(0.810668,0),(0.995793,0),(0.473617,0),(-1.78796,0),(0.407717,0),(0.0521593,0),(1.73821,0),(-0.777033,0),(1.70938,0),(-0.957072,0),(-1.96869,0),(-0.238253,0),(0.01323,0),(-0.465482,0),(-2.4067,0),(-1.26617,0),(0.793156,0),(-0.139453,0),(-0.125498,0),(0.40136,0),(-0.485112,0),(0.790446,0),(-0.958722,0),(-1.36853,0),(1.07062,0),(0.544047,0),(-0.657603,0),(1.3263,0),(-1.25743,0),(0.332084,0),(0.662936,0),(-0.438266,0),(-0.470526,0),(-0.560206,0),(0.351418,0),(1.36783,0),(-0.382992,0),(0.716353,0),(0.377922,0),(0.103474,0),(-0.506925,0),(0.814561,0),(0.338751,0),(2.11968,0),(1.02776,0),(-0.167726,0),(-0.65616,0),(1.20548,0),(0.261018,0),(0.44549,0),(1.78236,0),(1.00434,0),(-0.752817,0),(-0.743622,0),(-0.181004,0),(-0.89182,0),(-1.66086,0),(-0.734708,0),(1.01556,0),(-0.901581,0),(-0.766431,0),(3.01263,0),(-0.751611,0),(-2.18139,0),(-2.29006,0),(0.322925,0),(0.0702074,0),(0.741548,0),(0.257926,0),(0.184356,0),(1.67297,0),(0.905602,0),(2.24623,0),(-0.111461,0),(0.637167,0),(-1.51696,0),(0.217512,0),(0.94204,0),(0.438177,0),(0.350042,0),(-1.28289,0),(0.445785,0),(-0.781366,0),(-0.0436123,0),(1.96876,0),(-1.53073,0),(-1.03896,0),(0.334794,0),(0.759602,0),(0.994482,0),(-0.0899071,0),(-1.29938,0),(1.04533,0),(0.61189,0),(-0.455335,0),(-0.355007,0),(-1.31178,0),(-1.03808,0),(-0.721533,0),(0.539345,0),(-0.671291,0),(0.655027,0),(-0.353552,0),(-0.483642,0),(-0.510764,0),(-0.160625,0),(-0.855886,0),(0.230372,0),(0.331569,0),(0.611715,0),(1.86038,0),(1.43725,0),(-0.0907838,0),(-0.856712,0),(-0.241223,0),(0.29995,0),(1.85579,0),(0.538071,0),(1.21381,0),(0.677958,0),(-0.633066,0),(-0.938771,0),(1.27128,0),(-3.09737,0),(-0.488205,0),(-1.5375,0),(0.219721,0)] 3D FFT result = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=8 columns=8 sheets=8 values=[(251.366,0),(-3.67643,-1.97743),(0.372505,-4.42187),(-7.20319,0.900825),(-8.77573,0),(-7.20319,-0.900825),(0.372505,4.42187),(-3.67643,1.97743),(-2.14507,8.76073),(2.19446,-3.88014),(-2.39598,-6.59607),(2.27595,3.05807),(-2.9663,2.53117),(7.70661,-3.78059),(-0.0821367,-1.61704),(-7.25816,-2.70646),(-2.67706,10.7771),(1.03403,2.79299),(6.4127,-7.27683),(5.61049,1.38333),(-1.79031,2.65727),(5.08144,6.4724),(-1.53314,-6.44762),(1.82104,-2.41083),(-4.93371,-3.08283),(3.28991,-0.272426),(7.95986,0.170511),(-1.12441,0.484677),(4.13136,4.90169),(-1.60446,-0.854862),(2.30987,-5.53535),(4.67579,-0.706573),(7.82598,0),(-0.513339,0.799294),(3.11598,1.16338),(3.64803,0.803833),(1.71283,0),(3.64803,-0.803833),(3.11598,-1.16338),(-0.513339,-0.799294),(-4.93371,3.08283),(4.67579,0.706573),(2.30987,5.53535),(-1.60446,0.854862),(4.13136,-4.90169),(-1.12441,-0.484677),(7.95986,-0.170511),(3.28991,0.272426),(-2.67706,-10.7771),(1.82104,2.41083),(-1.53314,6.44762),(5.08144,-6.4724),(-1.79031,-2.65727),(5.61049,-1.38333),(6.4127,7.27683),(1.03403,-2.79299),(-2.14507,-8.76073),(-7.25816,2.70646),(-0.0821367,1.61704),(7.70661,3.78059),(-2.9663,-2.53117),(2.27595,-3.05807),(-2.39598,6.59607),(2.19446,3.88014),(0.187771,2.37335),(-5.43854,0.925472),(-6.08499,-2.14861),(2.78709,-3.27061),(1.33206,-1.95908),(2.75269,-2.44245),(3.6527,3.08883),(0.23898,0.707856),(-1.01381,-1.8573),(7.8854,7.82022),(4.94362,6.49289),(1.83087,4.57766),(6.32501,2.38882),(-0.41581,2.78819),(0.677342,5.61287),(-5.31416,-4.23129),(3.93423,-2.3738),(2.62059,6.40115),(-4.9293,0.371557),(-4.88171,0.0758294),(-2.69103,1.01601),(5.80211,-1.26894),(-4.06134,-4.30177),(3.48867,5.29096),(0.191568,4.97804),(1.34926,-4.53111),(-5.14072,-0.615674),(-0.715909,7.59079),(-2.59928,-5.51526),(6.89393,4.57647),(-6.43395,0.660881),(-1.04376,-2.27764),(12.1179,-0.314082),(-1.16095,3.93147),(0.398535,-5.53735),(4.94985,0.0701975),(-0.669426,-6.85187),(-3.44821,-3.29637),(-3.31997,-9.44573),(-0.942706,1.42498),(1.48589,-2.71922),(-1.22267,1.11963),(5.86752,3.41474),(2.39107,-7.08939),(1.69394,-6.11442),(5.09494,2.59488),(-1.94294,-2.79434),(-1.68045,11.6288),(1.08351,5.19534),(1.08533,13.1807),(-1.03956,1.83316),(-2.11414,7.33073),(2.9152,-3.15176),(7.31179,5.67899),(-0.270706,-0.92924),(-1.78581,-3.31918),(0.829537,-6.70154),(6.32139,2.00577),(-2.25564,3.64862),(-2.19019,5.69749),(-0.957297,-2.60957),(1.36463,3.24401),(3.96438,0.36181),(-1.85744,-1.17386),(-1.85747,4.59885),(1.64041,-3.69481),(-1.88295,-0.394478),(-0.808682,0.463141),(5.17111,-0.36112),(-3.70348,2.67759),(2.09781,-5.47209),(5.12277,-5.29627),(-1.3909,-1.96723),(-3.02798,5.69424),(-0.454061,-4.35633),(2.35871,0.671382),(-9.52424,10.9923),(-11.2803,-0.726768),(1.63589,1.21055),(2.56222,-1.24097),(-1.78297,-11.6813),(5.1908,-7.49652),(1.98751,-6.27251),(6.07422,13.3287),(-0.0701297,7.31216),(3.49661,9.02335),(-1.24376,3.9524),(-10.7391,-0.645528),(2.15762,1.42563),(7.90364,-9.93058),(0.766898,3.77439),(5.55309,-3.77043),(7.03424,0.246925),(-5.48612,2.38607),(1.18055,-2.32142),(-0.619615,1.18021),(3.37304,-5.99618),(9.56121,3.63922),(0.407172,0.0474905),(-2.63397,-2.29265),(-0.063046,-0.0321475),(-7.48226,2.9921),(0.928863,8.2119),(7.61621,6.46902),(-6.31455,-5.64847),(5.53063,-5.30196),(4.54697,4.89516),(-7.40746,-8.27577),(-8.07358,-10.1258),(6.48391,2.14556),(8.14205,-14.1698),(-0.650693,8.00003),(16.4279,-5.58752),(-3.72208,-2.72732),(4.31933,6.16014),(-4.48134,5.57602),(-3.65578,4.97737),(-1.0365,4.83618),(2.87426,1.52784),(3.02034,-2.20162),(7.43833,-0.774667),(8.62474,1.59037),(4.93578,-1.77876),(-5.86654,2.57141),(-6.72208,-2.03671),(2.63962,0.913302),(-2.39201,-6.2213),(-2.22993,5.27745),(-2.57889,3.52221),(-0.489585,-11.4792),(1.89165,-0.284362),(-1.65635,1.72639),(-7.2041,6.86237),(0.810474,0.146287),(-5.52089,-4.36887),(-1.92296,-1.93684),(0.446434,-3.94159),(4.8001,2.34297),(0.359383,1.92795),(7.94462,-1.76607),(0.694383,0.411013),(-4.51274,5.65217),(0.605974,-11.8745),(5.85647,3.57181),(2.23636,5.02514),(-5.07173,1.13531),(-9.03279,4.7894),(-1.96137,0.3007),(-3.15902,-4.20572),(-1.82873,1.35372),(-5.36675,-0.749461),(0.861778,2.39758),(-0.809417,3.61295),(12.3988,3.37519),(-1.94812,0.84198),(1.36025,-3.11121),(-2.56085,0.398625),(1.3224,-4.47159),(1.90939,-3.02468),(-1.52454,2.59174),(1.39788,1.21237),(6.11712,-3.9164),(3.62808,-3.76329),(1.17541,0.518159),(-2.17077,-2.55519),(-7.46629,5.41932),(4.45745,5.87329),(1.9756,1.67657),(3.04835,5.26253),(-0.342992,-8.53416),(-3.2719,3.319),(-1.281,8.93442),(-11.8845,1.76736),(-2.88645,11.6464),(2.91117,2.52709),(6.1425,4.39348),(2.20046,6.8072),(-0.745681,-3.34617),(-2.8726,3.15479),(8.75704,-1.98246),(5.99158,-0.825486),(1.73519,-2.5161),(-5.0841,-2.91958),(0.675155,0.194499),(0.29311,-6.26658),(-0.689971,-4.23263),(4.36803,5.41822),(-0.300137,-5.60686),(-9.24465,1.59788),(6.16626,-5.91503),(12.5004,-1.09081),(-4.71208,-5.51736),(-5.37047,0),(5.26066,-4.75094),(-3.36831,-1.05659),(-6.61605,-0.569846),(-3.25144,0),(-6.61605,0.569846),(-3.36831,1.05659),(5.26066,4.75094),(-1.17868,1.79631),(5.736,5.40956),(4.91792,-2.73938),(-3.00311,0.893223),(3.90236,-1.30788),(-6.63711,0.0680877),(-0.42711,-3.12506),(-4.88687,-6.03725),(-2.23785,8.87241),(0.936285,-3.45642),(-2.71667,0.172025),(4.4879,-5.7004),(-1.19191,9.45947),(-2.62254,6.33042),(7.25843,4.03038),(1.25569,-2.39199),(5.94487,4.04341),(-1.75648,-4.36934),(2.82698,1.92932),(0.70445,3.36571),(6.73257,-7.2905),(-1.46477,2.07726),(-0.524141,-1.35252),(2.00054,-0.826188),(-10.5161,0),(-6.64381,3.85942),(-0.779638,-2.4443),(-0.0896355,-2.6649),(-1.08926,0),(-0.0896355,2.6649),(-0.779638,2.4443),(-6.64381,-3.85942),(5.94487,-4.04341),(2.00054,0.826188),(-0.524141,1.35252),(-1.46477,-2.07726),(6.73257,7.2905),(0.70445,-3.36571),(2.82698,-1.92932),(-1.75648,4.36934),(-2.23785,-8.87241),(1.25569,2.39199),(7.25843,-4.03038),(-2.62254,-6.33042),(-1.19191,-9.45947),(4.4879,5.7004),(-2.71667,-0.172025),(0.936285,3.45642),(-1.17868,-1.79631),(-4.88687,6.03725),(-0.42711,3.12506),(-6.63711,-0.0680877),(3.90236,1.30788),(-3.00311,-0.893223),(4.91792,2.73938),(5.736,-5.40956),(-2.57889,-3.52221),(-1.92296,1.93684),(-5.52089,4.36887),(0.810474,-0.146287),(-7.2041,-6.86237),(-1.65635,-1.72639),(1.89165,0.284362),(-0.489585,11.4792),(0.29311,6.26658),(-4.71208,5.51736),(12.5004,1.09081),(6.16626,5.91503),(-9.24465,-1.59788),(-0.300137,5.60686),(4.36803,-5.41822),(-0.689971,4.23263),(2.20046,-6.8072),(0.675155,-0.194499),(-5.0841,2.91958),(1.73519,2.5161),(5.99158,0.825486),(8.75704,1.98246),(-2.8726,-3.15479),(-0.745681,3.34617),(3.04835,-5.26253),(6.1425,-4.39348),(2.91117,-2.52709),(-2.88645,-11.6464),(-11.8845,-1.76736),(-1.281,-8.93442),(-3.2719,-3.319),(-0.342992,8.53416),(1.39788,-1.21237),(1.9756,-1.67657),(4.45745,-5.87329),(-7.46629,-5.41932),(-2.17077,2.55519),(1.17541,-0.518159),(3.62808,3.76329),(6.11712,3.9164),(-0.809417,-3.61295),(-1.52454,-2.59174),(1.90939,3.02468),(1.3224,4.47159),(-2.56085,-0.398625),(1.36025,3.11121),(-1.94812,-0.84198),(12.3988,-3.37519),(2.23636,-5.02514),(0.861778,-2.39758),(-5.36675,0.749461),(-1.82873,-1.35372),(-3.15902,4.20572),(-1.96137,-0.3007),(-9.03279,-4.7894),(-5.07173,-1.13531),(0.446434,3.94159),(5.85647,-3.57181),(0.605974,11.8745),(-4.51274,-5.65217),(0.694383,-0.411013),(7.94462,1.76607),(0.359383,-1.92795),(4.8001,-2.34297),(-1.85747,-4.59885),(5.12277,5.29627),(2.09781,5.47209),(-3.70348,-2.67759),(5.17111,0.36112),(-0.808682,-0.463141),(-1.88295,0.394478),(1.64041,3.69481),(7.43833,0.774667),(-2.22993,-5.27745),(-2.39201,6.2213),(2.63962,-0.913302),(-6.72208,2.03671),(-5.86654,-2.57141),(4.93578,1.77876),(8.62474,-1.59037),(16.4279,5.58752),(3.02034,2.20162),(2.87426,-1.52784),(-1.0365,-4.83618),(-3.65578,-4.97737),(-4.48134,-5.57602),(4.31933,-6.16014),(-3.72208,2.72732),(-6.31455,5.64847),(-0.650693,-8.00003),(8.14205,14.1698),(6.48391,-2.14556),(-8.07358,10.1258),(-7.40746,8.27577),(4.54697,-4.89516),(5.53063,5.30196),(3.37304,5.99618),(7.61621,-6.46902),(0.928863,-8.2119),(-7.48226,-2.9921),(-0.063046,0.0321475),(-2.63397,2.29265),(0.407172,-0.0474905),(9.56121,-3.63922),(2.15762,-1.42563),(-0.619615,-1.18021),(1.18055,2.32142),(-5.48612,-2.38607),(7.03424,-0.246925),(5.55309,3.77043),(0.766898,-3.77439),(7.90364,9.93058),(-1.78297,11.6813),(-10.7391,0.645528),(-1.24376,-3.9524),(3.49661,-9.02335),(-0.0701297,-7.31216),(6.07422,-13.3287),(1.98751,6.27251),(5.1908,7.49652),(-1.3909,1.96723),(2.56222,1.24097),(1.63589,-1.21055),(-11.2803,0.726768),(-9.52424,-10.9923),(2.35871,-0.671382),(-0.454061,4.35633),(-3.02798,-5.69424),(0.187771,-2.37335),(0.23898,-0.707856),(3.6527,-3.08883),(2.75269,2.44245),(1.33206,1.95908),(2.78709,3.27061),(-6.08499,2.14861),(-5.43854,-0.925472),(0.829537,6.70154),(-1.85744,1.17386),(3.96438,-0.36181),(1.36463,-3.24401),(-0.957297,2.60957),(-2.19019,-5.69749),(-2.25564,-3.64862),(6.32139,-2.00577),(1.08351,-5.19534),(-1.78581,3.31918),(-0.270706,0.92924),(7.31179,-5.67899),(2.9152,3.15176),(-2.11414,-7.33073),(-1.03956,-1.83316),(1.08533,-13.1807),(1.48589,2.71922),(-1.68045,-11.6288),(-1.94294,2.79434),(5.09494,-2.59488),(1.69394,6.11442),(2.39107,7.08939),(5.86752,-3.41474),(-1.22267,-1.11963),(12.1179,0.314082),(-0.942706,-1.42498),(-3.31997,9.44573),(-3.44821,3.29637),(-0.669426,6.85187),(4.94985,-0.0701975),(0.398535,5.53735),(-1.16095,-3.93147),(0.191568,-4.97804),(-1.04376,2.27764),(-6.43395,-0.660881),(6.89393,-4.57647),(-2.59928,5.51526),(-0.715909,-7.59079),(-5.14072,0.615674),(1.34926,4.53111),(3.93423,2.3738),(3.48867,-5.29096),(-4.06134,4.30177),(5.80211,1.26894),(-2.69103,-1.01601),(-4.88171,-0.0758294),(-4.9293,-0.371557),(2.62059,-6.40115),(-1.01381,1.8573),(-5.31416,4.23129),(0.677342,-5.61287),(-0.41581,-2.78819),(6.32501,-2.38882),(1.83087,-4.57766),(4.94362,-6.49289),(7.8854,-7.82022)] 3D FFT back=class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=8 columns=8 sheets=8 values=[(0.901532,0),(0.872797,0),(0.320412,0),(0.996377,0),(0.311808,0),(0.220652,0),(0.349851,0),(0.949285,0),(0.0477304,0),(0.0791328,0),(0.0606909,0),(0.0475671,0),(0.395072,0),(0.871399,0),(0.00775935,0),(0.963321,0),(0.150419,0),(0.768282,0),(0.52002,0),(0.33744,0),(0.819759,0),(0.408766,0),(0.0121888,0),(0.503649,0),(0.294143,0),(0.229737,0),(0.842879,0),(0.626339,0),(0.117037,0),(0.00424093,0),(0.0959054,0),(0.414321,0),(0.241681,0),(0.698317,0),(0.793294,0),(0.315328,0),(0.501471,0),(0.933127,0),(0.971199,0),(0.215199,0),(0.364325,0),(0.713948,0),(0.638032,0),(0.866042,0),(0.482234,0),(0.0693131,0),(0.492862,0),(0.0881152,0),(0.530443,0),(0.908716,0),(0.411431,0),(0.154144,0),(0.448536,0),(0.199529,0),(0.527627,0),(0.493307,0),(0.291282,0),(0.360299,0),(0.6069,0),(0.555687,0),(0.552027,0),(0.600321,0),(0.903757,0),(0.218234,0),(0.534703,0),(0.242476,0),(0.423206,0),(0.139994,0),(0.836659,0),(0.955023,0),(0.798566,0),(0.757314,0),(0.616354,0),(0.960683,0),(0.0493002,0),(0.81209,0),(0.442067,0),(0.533371,0),(0.122134,0),(0.726119,0),(0.938274,0),(0.101407,0),(0.89066,0),(0.536602,0),(0.293536,0),(0.864078,0),(0.627852,0),(0.196993,0),(0.207499,0),(0.996742,0),(0.00143427,0),(0.313233,0),(0.0199802,0),(0.0515033,0),(0.20001,0),(0.0286926,0),(0.562026,0),(0.670163,0),(0.559764,0),(0.592898,0),(0.611045,0),(0.463699,0),(0.367699,0),(0.893983,0),(0.913126,0),(0.121696,0),(0.100329,0),(0.160161,0),(0.743017,0),(0.147739,0),(0.674196,0),(0.240217,0),(0.561498,0),(0.492979,0),(0.618953,0),(0.588282,0),(0.756584,0),(0.436101,0),(0.180434,0),(0.465164,0),(0.189075,0),(0.667181,0),(0.68124,0),(0.00751686,0),(0.199793,0),(0.855826,0),(0.49455,0),(0.153684,0),(0.279509,0),(0.00110479,0),(0.295463,0),(0.449075,0),(0.922485,0),(0.603463,0),(0.975901,0),(0.00510658,0),(0.117853,0),(0.64898,0),(0.232903,0),(0.225701,0),(0.369216,0),(0.0871069,0),(0.595619,0),(0.226544,0),(0.295896,0),(0.32545,0),(0.81107,0),(0.387509,0),(0.336025,0),(0.758478,0),(0.316421,0),(0.520973,0),(0.988946,0),(0.770525,0),(0.644731,0),(0.451343,0),(0.73164,0),(0.288055,0),(0.902017,0),(0.519411,0),(0.372213,0),(0.749742,0),(0.0548972,0),(0.909451,0),(0.464768,0),(0.64036,0),(0.147879,0),(0.145031,0),(0.0854764,0),(0.963641,0),(0.808553,0),(0.300608,0),(0.27324,0),(0.900241,0),(0.0257728,0),(0.42838,0),(0.6675,0),(0.296415,0),(0.969349,0),(0.737274,0),(0.86191,0),(0.899327,0),(0.048745,0),(0.102737,0),(0.0953205,0),(0.942164,0),(0.962162,0),(0.323319,0),(0.315286,0),(0.879535,0),(0.486312,0),(0.558839,0),(0.362054,0),(0.423671,0),(0.410333,0),(0.588362,0),(0.25206,0),(0.295404,0),(0.0616908,0),(0.13637,0),(0.458256,0),(0.240138,0),(0.49155,0),(0.914179,0),(0.610583,0),(0.973747,0),(0.617949,0),(0.00726908,0),(0.340834,0),(0.990126,0),(0.153202,0),(0.0416536,0),(0.585922,0),(0.335709,0),(0.0473599,0),(0.99313,0),(0.0253824,0),(0.726601,0),(0.322316,0),(0.811466,0),(0.597043,0),(0.849425,0),(0.371581,0),(0.80116,0),(0.759207,0),(0.085111,0),(0.486362,0),(0.543351,0),(0.677443,0),(0.431848,0),(0.311368,0),(0.00789952,0),(0.0358374,0),(0.204519,0),(0.351313,0),(0.253795,0),(0.429314,0),(0.0204337,0),(0.51169,0),(0.481518,0),(0.978697,0),(0.725105,0),(0.550516,0),(0.76771,0),(0.569658,0),(0.628995,0),(0.711662,0),(0.972339,0),(0.38338,0),(0.716526,0),(0.883387,0),(0.909294,0),(0.0511235,0),(0.721716,0),(0.877846,0),(0.834947,0),(0.549311,0),(0.796874,0),(0.185003,0),(0.0994375,0),(0.907442,0),(0.249664,0),(0.214906,0),(0.354399,0),(0.105242,0),(0.856746,0),(0.518905,0),(0.0399128,0),(0.211035,0),(0.719794,0),(0.164955,0),(0.998465,0),(0.58276,0),(0.459105,0),(0.282338,0),(0.165129,0),(0.175967,0),(0.401304,0),(0.95512,0),(0.464518,0),(0.91348,0),(0.573855,0),(0.759522,0),(0.685527,0),(0.599481,0),(0.11762,0),(0.490815,0),(0.498501,0),(0.693914,0),(0.723598,0),(0.150939,0),(0.489266,0),(0.38804,0),(0.515168,0),(0.368962,0),(0.333008,0),(0.699854,0),(0.167483,0),(0.0519198,0),(0.272503,0),(0.916083,0),(0.0314856,0),(0.469154,0),(0.783467,0),(0.00444693,0),(0.175808,0),(0.960051,0),(0.319286,0),(0.509083,0),(0.01879,0),(0.58184,0),(0.929952,0),(0.350229,0),(0.753129,0),(0.792789,0),(0.759641,0),(0.633719,0),(0.798922,0),(0.882795,0),(0.260345,0),(0.653773,0),(0.861233,0),(0.439678,0),(0.888738,0),(0.297716,0),(0.621804,0),(0.0308063,0),(0.948673,0),(0.250718,0),(0.256264,0),(0.383321,0),(0.986556,0),(0.859676,0),(0.318308,0),(0.22163,0),(0.663711,0),(0.533507,0),(0.781865,0),(0.665661,0),(0.223279,0),(0.747211,0),(0.00291806,0),(0.412696,0),(0.0158012,0),(0.859267,0),(0.147885,0),(0.34912,0),(0.168197,0),(0.290976,0),(0.823184,0),(0.445103,0),(0.515978,0),(0.238667,0),(0.84527,0),(0.871445,0),(0.34421,0),(0.706781,0),(0.533343,0),(0.936858,0),(0.84254,0),(0.348014,0),(0.71065,0),(0.491741,0),(0.0877009,0),(0.909474,0),(0.175653,0),(0.643057,0),(0.944443,0),(0.308764,0),(0.198332,0),(0.131614,0),(0.7564,0),(0.370018,0),(0.939574,0),(0.339416,0),(0.286888,0),(0.241089,0),(0.295472,0),(0.644726,0),(0.491913,0),(0.331054,0),(0.617105,0),(0.172896,0),(0.0750455,0),(0.511945,0),(0.216676,0),(0.396025,0),(0.026715,0),(0.0187214,0),(0.73757,0),(0.205996,0),(0.377617,0),(0.774303,0),(0.599221,0),(0.207031,0),(0.71844,0),(0.445441,0),(0.0577331,0),(0.0490961,0),(0.242542,0),(0.256608,0),(0.259121,0),(0.00477589,0),(0.484872,0),(0.815318,0),(0.724005,0),(0.580271,0),(0.737812,0),(0.376436,0),(0.7361,0),(0.055602,0),(0.230181,0),(0.932012,0),(0.696571,0),(0.789655,0),(0.987523,0),(0.155707,0),(0.522042,0),(0.259342,0),(0.704798,0),(0.0804176,0),(0.0731289,0),(0.515662,0),(0.753321,0),(0.26725,0),(0.957684,0),(0.744031,0),(0.355983,0),(0.0981987,0),(0.361215,0),(0.0615345,0),(0.749186,0),(0.0222073,0),(0.974322,0),(0.907448,0),(0.912987,0),(0.633564,0),(0.632505,0),(0.481844,0),(0.699357,0),(0.731182,0),(0.637125,0),(0.631382,0),(0.697668,0),(0.510865,0),(0.384866,0),(0.442633,0),(0.715151,0),(0.825944,0),(0.103193,0),(0.687105,0),(0.68598,0),(0.0745197,0),(0.75824,0),(0.42528,0),(0.136291,0),(0.316628,0),(0.409526,0),(0.5318,0),(0.0610748,0),(0.376164,0),(0.510449,0),(0.695705,0),(0.13464,0),(0.251199,0),(0.54046,0),(0.298146,0),(0.849213,0),(0.534008,0),(0.415987,0),(0.897311,0),(0.379349,0),(0.286539,0),(0.548542,0),(0.428038,0),(0.201491,0),(0.627851,0),(0.751972,0),(0.900578,0),(0.607102,0),(0.843256,0),(0.305512,0),(0.280407,0),(0.581616,0),(0.708808,0),(0.890749,0),(0.857314,0),(0.807461,0),(0.337774,0),(0.192927,0),(0.357327,0),(0.935883,0),(0.959454,0),(0.705476,0),(0.141913,0),(0.440722,0),(0.317492,0),(0.830308,0),(0.893418,0),(0.625766,0),(0.944936,0),(0.561536,0),(0.700908,0),(0.798569,0),(0.498973,0),(0.306193,0),(0.642865,0),(0.464905,0),(0.944389,0),(0.73419,0),(0.597932,0),(0.313696,0)] openturns-1.9/lib/test/t_KrawtchoukFactory_std.cxx000066400000000000000000000033051307543307100225440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class KrawtchoukFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { KrawtchoukFactory krawtchouk(10, 0.3); fullprint << "krawtchouk=" << krawtchouk << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "krawtchouk(" << i << ")=" << krawtchouk.build(i).__str__() << std::endl; } Point roots(krawtchouk.getRoots(10)); fullprint << "krawtchouk(10) roots=" << roots << std::endl; Point weights; roots = krawtchouk.getNodesAndWeights(10, weights); fullprint << "krawtchouk(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KrawtchoukFactory_std.expout000066400000000000000000000027371307543307100232760ustar00rootroot00000000000000krawtchouk=class=KrawtchoukFactory N=10 p=0.3 measure=class=Binomial name=Binomial dimension=1 n=10 p=0.3 krawtchouk(0)=1 krawtchouk(1)=-2.0702 + 0.690066 * X krawtchouk(2)=2.87494 - 2.27156 * X + 0.354931 * X^2 krawtchouk(3)=-3.07344 + 4.52796 * X - 1.61261 * X^2 + 0.158099 * X^3 krawtchouk(4)=2.66168 - 7.00706 * X + 4.33182 * X^2 - 0.938865 * X^3 + 0.0651989 * X^4 krawtchouk(5)=-1.90879 + 9.52774 * X - 9.1726 * X^2 + 3.29374 * X^3 - 0.493542 * X^4 + 0.0259759 * X^5 krawtchouk(6)=1.14072 - 12.7331 * X + 17.7364 * X^2 - 9.27688 * X^3 + 2.23022 * X^4 - 0.248377 * X^5 + 0.010349 * X^6 krawtchouk(7)=-0.56451 + 18.964 * X - 35.2541 * X^2 + 24.5639 * X^3 - 8.28138 * X^4 + 1.44595 * X^5 - 0.125475 * X^6 + 0.00426787 * X^7 krawtchouk(8)=0.226308 - 35.492 * X + 80.3695 * X^2 - 69.1447 * X^3 + 29.9279 * X^4 - 7.1562 * X^5 + 0.95707 * X^6 - 0.0669173 * X^7 + 0.00190106 * X^8 krawtchouk(9)=-0.06984 + 91.4005 * X - 233.841 * X^2 + 233.472 * X^3 - 121.44 * X^4 + 36.5443 * X^5 - 6.5879 * X^6 + 0.700731 * X^7 - 0.0404809 * X^8 + 0.0009778 * X^9 krawtchouk(10) roots=class=Point name=Unnamed dimension=10 values=[3.92176e-05,1.00077,2.00643,3.03055,4.09408,5.2104,6.3761,7.57396,8.77477,9.9329] krawtchouk(10) roots=class=Point name=Unnamed dimension=10 values=[3.92176e-05,1.00077,2.00643,3.03055,4.09408,5.2104,6.3761,7.57396,8.77477,9.9329] and weights=class=Point name=Unnamed dimension=10 values=[0.0282538,0.121381,0.236762,0.276807,0.207965,0.097633,0.0268759,0.00401913,0.000293801,8.47269e-06] openturns-1.9/lib/test/t_KrigingAlgorithm_std.cxx000066400000000000000000000130611307543307100223330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of KrigingAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Set Numerical precision to 3 PlatformInfo::SetNumericalPrecision(3); { UnsignedInteger sampleSize = 6; UnsignedInteger dimension = 1; // Create the function to estimate Description input(dimension); input[0] = "x0"; Description foutput(1); foutput[0] = "f0"; Description formulas(1); formulas[0] = "x0 * sin(x0)"; Function model(input, foutput, formulas); Sample X(sampleSize, dimension); Sample X2(sampleSize, dimension); for ( UnsignedInteger i = 0; i < sampleSize; ++ i ) { X[i][0] = 3.0 + i; X2[i][0] = 2.5 + i; } X[0][0] = 1.0; X[1][0] = 3.0; X2[0][0] = 2.0; X2[1][0] = 4.0; Sample Y(model(X)); Sample Y2(model(X2)); Basis basis(ConstantBasisFactory(dimension).build()); SquaredExponential covarianceModel(Point(1, 1e-05), Point(1, 4.11749)); KrigingAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); // perform an evaluation KrigingResult result(algo.getResult()); std::cout << "X=" << X << std::endl; std::cout << "f(X)=" << Y << std::endl; assert_almost_equal(result.getMetaModel()(X), Y, 1e-3); Point residualRef(1, 5.57410e-06); assert_almost_equal(result.getResiduals(), residualRef, 1e-3, 1e-4); Point relativeErrorRef(1, 9.17605e-12); assert_almost_equal(result.getRelativeErrors(), relativeErrorRef, 1e-3, 1e-5); // Evaluation of the covariance on the X dataset CovarianceMatrix covMatrix(result.getConditionalCovariance(X)); // Validation of the covariance ==> should be null on the learning set assert_almost_equal(Point(*covMatrix.getImplementation()), Point(sampleSize * sampleSize), 8.95e-7, 8.95e-7); } { UnsignedInteger dimension = 2; UnsignedInteger sampleSize = 8; // Create the function to estimate Description input(dimension); input[0] = "x0"; input[1] = "x1"; Description foutput(1); foutput[0] = "f0"; Description formulas(1); formulas[0] = "5.-x1-0.5*(x0-0.1)^2"; Function model(input, foutput, formulas); Sample X(sampleSize, dimension); X[0][0] = -4.61611719; X[0][1] = -6.00099547; X[1][0] = 4.10469096; X[1][1] = 5.32782448; X[2][0] = 0.; X[2][1] = -.5; X[3][0] = -6.17289014; X[3][1] = -4.6984743; X[4][0] = 1.3109306; X[4][1] = -6.93271427; X[5][0] = -5.03823144; X[5][1] = 3.10584743; X[6][0] = -2.87600388; X[6][1] = 6.74310541; X[7][0] = 5.21301203; X[7][1] = 4.26386883; Sample Y(model(X)); // create algorithm Basis basis(ConstantBasisFactory(dimension).build()); Point scale(2); scale[0] = 1e-05; scale[1] = 18.9; Point amplitude(1, 8.05); SquaredExponential covarianceModel(scale, amplitude); KrigingAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); // perform an evaluation KrigingResult result(algo.getResult()); std::cout << "X=" << X << std::endl; std::cout << "f(X)=" << Y << std::endl; std::cout << "covariance parameter=" << result.getCovarianceModel().getParameter() << std::endl; assert_almost_equal(result.getMetaModel()(X), Y, 1e-3); Point residualRef(1, 1.17e-07); assert_almost_equal(result.getResiduals(), residualRef, 1e-3, 1e-5); Point relativeErrorRef(1, 1.48e-11); assert_almost_equal(result.getRelativeErrors(), relativeErrorRef, 1e-3, 1e-5); std::cout << "df(X0)=" << model.gradient(X[1]) << std::endl; Function metaModel(result.getMetaModel()); // Get the gradient computed by metamodel Matrix gradientKriging(metaModel.gradient(X[1])); // Set DF evaluation as gradient and validate metaModel.setGradient(new CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), metaModel.getEvaluation())); // Get the gradient computed by metamodel using FD Matrix gradientKrigingFD(metaModel.gradient(X[1])); // Validation of the gradient std::cout << "d^f(X0) & d^f(X0) FD similar ?" << std::endl; assert_almost_equal(Point(*gradientKriging.getImplementation()), Point(*gradientKrigingFD.getImplementation()), 1e-3, 1e-3); std::cout << "d^f(X0) & d^f(X0) FD are similar." << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KrigingAlgorithm_std.expout000066400000000000000000000011241307543307100230520ustar00rootroot00000000000000X=0 : [ 1 ] 1 : [ 3 ] 2 : [ 5 ] 3 : [ 6 ] 4 : [ 7 ] 5 : [ 8 ] f(X)= [ f0 ] 0 : [ 0.841 ] 1 : [ 0.423 ] 2 : [ -4.79 ] 3 : [ -1.68 ] 4 : [ 4.6 ] 5 : [ 7.91 ] X=0 : [ -4.62 -6 ] 1 : [ 4.1 5.33 ] 2 : [ 0 -0.5 ] 3 : [ -6.17 -4.7 ] 4 : [ 1.31 -6.93 ] 5 : [ -5.04 3.11 ] 6 : [ -2.88 6.74 ] 7 : [ 5.21 4.26 ] f(X)= [ f0 ] 0 : [ -0.12 ] 1 : [ -8.35 ] 2 : [ 5.5 ] 3 : [ -9.98 ] 4 : [ 11.2 ] 5 : [ -11.3 ] 6 : [ -6.17 ] 7 : [ -12.3 ] covariance parameter=[0.01,18.9] df(X0)=[[ -4 ] [ -1 ]] d^f(X0) & d^f(X0) FD similar ? d^f(X0) & d^f(X0) FD are similar. openturns-1.9/lib/test/t_KrigingAlgorithm_std_hmat.cxx000066400000000000000000000133271307543307100233510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of KrigingAlgorithm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::Set("KrigingAlgorithm-LinearAlgebra", "HMAT"); try { // Set Numerical precision to 3 PlatformInfo::SetNumericalPrecision(3); { UnsignedInteger sampleSize = 6; UnsignedInteger dimension = 1; // Create the function to estimate Description input(dimension); input[0] = "x0"; Description foutput(1); foutput[0] = "f0"; Description formulas(1); formulas[0] = "x0 * sin(x0)"; Function model(input, foutput, formulas); Sample X(sampleSize, dimension); Sample X2(sampleSize, dimension); for ( UnsignedInteger i = 0; i < sampleSize; ++ i ) { X[i][0] = 3.0 + i; X2[i][0] = 2.5 + i; } X[0][0] = 1.0; X[1][0] = 3.0; X2[0][0] = 2.0; X2[1][0] = 4.0; Sample Y(model(X)); Sample Y2(model(X2)); Basis basis(ConstantBasisFactory(dimension).build()); SquaredExponential covarianceModel(Point(1, 1e-05), Point(1, 4.11749)); KrigingAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); // perform an evaluation KrigingResult result(algo.getResult()); std::cout << "X=" << X << std::endl; std::cout << "f(X)=" << Y << std::endl; std::cout << "covariance parameter=" << result.getCovarianceModel().getParameter() << std::endl; assert_almost_equal(result.getMetaModel()(X), Y, 1e-3); Point residualRef(1, 5.57410e-06); assert_almost_equal(result.getResiduals(), residualRef, 1e-3, 1e-4); Point relativeErrorRef(1, 9.17605e-12); assert_almost_equal(result.getRelativeErrors(), relativeErrorRef, 1e-3, 1e-5); // Evaluation of the covariance on the X dataset CovarianceMatrix covMatrix(result.getConditionalCovariance(X)); // Validation of the covariance ==> should be null on the learning set assert_almost_equal(Point(*covMatrix.getImplementation()), Point(sampleSize * sampleSize), 8.95e-7, 8.95e-7); } { UnsignedInteger dimension = 2; UnsignedInteger sampleSize = 8; // Create the function to estimate Description input(dimension); input[0] = "x0"; input[1] = "x1"; Description foutput(1); foutput[0] = "f0"; Description formulas(1); formulas[0] = "5.-x1-0.5*(x0-0.1)^2"; Function model(input, foutput, formulas); Sample X(sampleSize, dimension); X[0][0] = -4.61611719; X[0][1] = -6.00099547; X[1][0] = 4.10469096; X[1][1] = 5.32782448; X[2][0] = 0.; X[2][1] = -.5; X[3][0] = -6.17289014; X[3][1] = -4.6984743; X[4][0] = 1.3109306; X[4][1] = -6.93271427; X[5][0] = -5.03823144; X[5][1] = 3.10584743; X[6][0] = -2.87600388; X[6][1] = 6.74310541; X[7][0] = 5.21301203; X[7][1] = 4.26386883; Sample Y(model(X)); // create algorithm Basis basis(ConstantBasisFactory(dimension).build()); Point scale(2); scale[0] = 1e-05; scale[1] = 18.9; Point amplitude(1, 8.05); SquaredExponential covarianceModel(scale, amplitude); KrigingAlgorithm algo(X, Y, covarianceModel, basis); algo.run(); // perform an evaluation KrigingResult result(algo.getResult()); std::cout << "X=" << X << std::endl; std::cout << "f(X)=" << Y << std::endl; std::cout << "covariance parameter=" << result.getCovarianceModel().getParameter() << std::endl; assert_almost_equal(result.getMetaModel()(X), Y, 1e-3); Point residualRef(1, 1.17e-07); assert_almost_equal(result.getResiduals(), residualRef, 1e-3, 1e-5); Point relativeErrorRef(1, 1.48e-11); assert_almost_equal(result.getRelativeErrors(), relativeErrorRef, 1e-3, 1e-5); std::cout << "df(X0)=" << model.gradient(X[1]) << std::endl; Function metaModel(result.getMetaModel()); // Get the gradient computed by metamodel Matrix gradientKriging(metaModel.gradient(X[1])); // Set DF evaluation as gradient and validate metaModel.setGradient(new CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), metaModel.getEvaluation())); // Get the gradient computed by metamodel using FD Matrix gradientKrigingFD(metaModel.gradient(X[1])); // Validation of the gradient std::cout << "d^f(X0) & d^f(X0) FD similar ?" << std::endl; assert_almost_equal(Point(*gradientKriging.getImplementation()), Point(*gradientKrigingFD.getImplementation()), 1e-3, 1e-3); std::cout << "d^f(X0) & d^f(X0) FD are similar." << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KrigingAlgorithm_std_hmat.expout000066400000000000000000000011601307543307100240630ustar00rootroot00000000000000X=0 : [ 1 ] 1 : [ 3 ] 2 : [ 5 ] 3 : [ 6 ] 4 : [ 7 ] 5 : [ 8 ] f(X)= [ f0 ] 0 : [ 0.841 ] 1 : [ 0.423 ] 2 : [ -4.79 ] 3 : [ -1.68 ] 4 : [ 4.6 ] 5 : [ 7.91 ] covariance parameter=[0.01] X=0 : [ -4.62 -6 ] 1 : [ 4.1 5.33 ] 2 : [ 0 -0.5 ] 3 : [ -6.17 -4.7 ] 4 : [ 1.31 -6.93 ] 5 : [ -5.04 3.11 ] 6 : [ -2.88 6.74 ] 7 : [ 5.21 4.26 ] f(X)= [ f0 ] 0 : [ -0.12 ] 1 : [ -8.35 ] 2 : [ 5.5 ] 3 : [ -9.98 ] 4 : [ 11.2 ] 5 : [ -11.3 ] 6 : [ -6.17 ] 7 : [ -12.3 ] covariance parameter=[0.01,18.9] df(X0)=[[ -4 ] [ -1 ]] d^f(X0) & d^f(X0) FD similar ? d^f(X0) & d^f(X0) FD are similar. openturns-1.9/lib/test/t_KrigingRandomVector_std.cxx000066400000000000000000000063771307543307100230240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of KrigingRandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(2); // Learning data Point levels(2); levels[0] = 8; levels[1] = 5; // Define the Box Box box(levels); // Get the input sample Sample inputSample( box.generate() ); // Scale each direction inputSample *= 10; // Define model Description inputDescription(2); inputDescription[0] = "x"; inputDescription[1] = "y"; Description formula(1); formula[0] = "cos(0.5*x) + sin(y)" ; const SymbolicFunction model(inputDescription, formula); // Build the output sample const Sample outputSample( model(inputSample) ); // 2) Definition of exponential model Point scale(2); scale[0] = 1.988; scale[1] = 0.924; Point amplitude(1, 3.153); SquaredExponential covarianceModel(scale, amplitude); // 3) Basis definition Basis basis(ConstantBasisFactory(2).build()); // Kriring algorithm KrigingAlgorithm algo(inputSample, outputSample, covarianceModel, basis); algo.run(); // Get result KrigingResult result(algo.getResult()); // Get meta model Function metaModel(result.getMetaModel()); // Interpolation error assert_almost_equal(outputSample, metaModel(inputSample), 3.0e-5, 3.0e-5); // Kriging variance is 0 on learning points CovarianceMatrix var(result.getConditionalCovariance(inputSample)); // assert_almost_equal could not be applied to matrices Point covariancePoint(*var.getImplementation()); assert_almost_equal(covariancePoint, Point(covariancePoint.getSize()), 1e-6, 1e-6); // Random vector evaluation Sample unifRealization(Uniform(0.0, 10.0).getSample(2)); Point validationPoint(unifRealization.getImplementation()->getData()); KrigingRandomVector rvector(result, validationPoint); // Realization of the random vector Point realization (rvector.getRealization()); std::cout << "Realization of the KRV=" << realization << std::endl; // Get a sample of size 10 Sample realizations(rvector.getSample(10)); std::cout << "Sample of realizations of the KRV=" << realizations << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_KrigingRandomVector_std.expout000066400000000000000000000003331307543307100235300ustar00rootroot00000000000000Realization of the KRV=[-0.44] Sample of realizations of the KRV= [ X0 ] 0 : [ -0.43 ] 1 : [ -0.41 ] 2 : [ -0.46 ] 3 : [ -0.42 ] 4 : [ -0.43 ] 5 : [ -0.41 ] 6 : [ -0.41 ] 7 : [ -0.41 ] 8 : [ -0.43 ] 9 : [ -0.42 ] openturns-1.9/lib/test/t_LARS_std.cxx000066400000000000000000000110541307543307100176330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LAR for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Log::Show( Log::Flags() | Log::INFO ); // Problem parameters UnsignedInteger dimension = 3; Scalar a = 7.0; Scalar b = 0.1; // Reference analytical values Scalar covTh = (pow(b, 2.0) * pow(M_PI, 8.0)) / 18.0 + (b * pow(M_PI, 4.0)) / 5.0 + (pow(a, 2.0)) / 8.0 + 1.0 / 2.0; Point sob_1(3); sob_1[0] = (b * pow(M_PI, 4.0) / 5.0 + pow(b, 2.0) * pow(M_PI, 8.0) / 50.0 + 1.0 / 2.0) / covTh; sob_1[1] = (pow(a, 2.0) / 8.0) / covTh; sob_1[2] = 0.0; Point sob_2(3); sob_2[0] = 0.0; sob_2[1] = (pow(b, 2.0) * pow(M_PI, 8.0) / 18.0 - pow(b, 2.0) * pow(M_PI, 8.0) / 50.0) / covTh; sob_2[2] = 0.0; Point sob_3(1, 0.0); Point sob_T1(3); sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0]; sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0]; sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T2(3); sob_T2[0] = sob_2[0] + sob_2[1] + sob_3[0]; sob_T2[1] = sob_2[0] + sob_2[2] + sob_3[0]; sob_T2[2] = sob_2[1] + sob_2[2] + sob_3[0]; Point sob_T3(sob_3); // Create the Ishigami function Description inputVariables(dimension); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + (" << a << ") * (sin(xi2)) ^ 2 + (" << b << ") * xi3^4 * sin(xi1)"); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginalX(dimension); marginalX[0] = Uniform(-M_PI, M_PI); marginalX[1] = Uniform(-M_PI, M_PI); marginalX[2] = Uniform(-M_PI, M_PI); ComposedDistribution distribution(marginalX); // Create the orthogonal basis Collection polynomialCollection(dimension); polynomialCollection[0] = LegendreFactory(); polynomialCollection[1] = LegendreFactory(); polynomialCollection[2] = LegendreFactory(); LinearEnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // design experiment UnsignedInteger samplingSize = 75; Experiment experiment(LowDiscrepancyExperiment(SobolSequence(dimension), distribution, samplingSize)); // build the isoprobabilistic transformation Collection marginalZ; for (UnsignedInteger i = 0; i < dimension; ++ i ) { marginalZ.add(productBasis.getMeasure().getMarginal(i)); } MarginalTransformationEvaluation evaluationT(MarginalTransformationEvaluation(marginalX, marginalZ)); MarginalTransformationGradient gradientT(evaluationT); MarginalTransformationHessian hessianT(evaluationT); Function xToU(evaluationT.clone(), gradientT.clone(), hessianT.clone()); // generate samples Sample x( experiment.generate() ); Sample u( xToU(x) ); Sample y( model(x) ); // build basis UnsignedInteger degree = 10; UnsignedInteger basisSize = enumerateFunction.getStrataCumulatedCardinal(degree); Collection coll; for ( UnsignedInteger i = 0; i < basisSize; ++ i ) { coll.add(productBasis.build(i)); } Basis psi(coll); Indices indices(basisSize); indices.fill(); // run algorithm LARS factory; factory.setVerbose(true); fullprint << "factory = " << factory << std::endl; BasisSequence seq = factory.build( u, y, psi, indices); UnsignedInteger first = 20; if ( seq.getSize() >= first ) fullprint << "first " << first << " indices = " << seq[first - 1] << std::endl; else fullprint << " size=" << seq.getSize() << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_LARS_std.expout000066400000000000000000000001531307543307100203530ustar00rootroot00000000000000factory = class=LARS first 20 indices = [0,30,115,10,1,77,187,15,162,40,89,7,51,55,156,278,179,232,35,157] openturns-1.9/lib/test/t_LHSExperiment_std.cxx000066400000000000000000000042571307543307100215700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LHSExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Normal distribution(4); UnsignedInteger size = 10; LHSExperiment myPlane(distribution, size); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; fullprint << "sample2 = " << myPlane.generate() << std::endl; myPlane = LHSExperiment(distribution, size, true, true); fullprint << "sample = " << myPlane.generate() << std::endl; fullprint << "sample2 = " << myPlane.generate() << std::endl; myPlane = LHSExperiment(distribution, size, false, false); fullprint << "sample = " << myPlane.generate() << std::endl; fullprint << "sample2 = " << myPlane.generate() << std::endl; myPlane = LHSExperiment(distribution, size, true, false); fullprint << "sample = " << myPlane.generate() << std::endl; fullprint << "sample2 = " << myPlane.generate() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LHSExperiment_std.expout000066400000000000000000000111171307543307100223030ustar00rootroot00000000000000myPlane = class=LHSExperiment name=Unnamed distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 alwaysShuffle=false random shift=true sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-0.128245,0.376836,-1.22066,-1.10522],[1.10582,-0.338459,0.24791,-0.346101],[0.54296,-1.42346,0.839551,0.0208249],[-1.16265,0.0759283,-2.01943,1.09374],[0.145939,-1.05065,1.1245,0.752451],[-0.54266,0.796553,-0.152699,-0.0930679],[2.38039,1.23369,-0.479086,1.68956],[-0.466678,-0.566345,1.58492,0.34823],[-3.52623,-0.191816,-0.753697,-0.645958],[0.297406,2.83847,0.380733,-1.46889]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-0.010542,0.440747,-0.907702,-1.04424],[0.917871,-0.318324,0.234117,-0.348873],[0.706998,-1.47467,0.547381,0.0632927],[-0.963304,0.089972,-1.72779,0.962638],[0.201535,-1.00455,0.965576,0.831549],[-0.668953,0.555671,-0.023116,-0.0627709],[1.64612,1.04263,-0.276266,1.91121],[-0.361935,-0.575544,1.89896,0.292035],[-1.38907,-0.110551,-0.626966,-0.834518],[0.44615,1.95064,0.328131,-1.36724]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-1.0393,0.335691,-1.45686,-0.25094],[1.06144,2.41939,0.626709,-0.314665],[0.416873,-0.779287,1.53713,-0.813699],[0.142019,0.929935,0.431971,-1.50779],[-1.70296,-1.44323,-0.0367999,0.0604975],[0.534882,-1.05605,0.205732,2.50647],[-0.56838,0.111106,-0.731972,0.598258],[-0.373196,0.526136,1.2056,0.974748],[-0.0568821,-0.356297,-1.04449,0.468425],[1.78081,-0.0663524,-0.357779,-1.04292]] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[0.765581,-0.641697,-0.15499,1.02033],[0.0316325,-0.216958,-0.928132,-1.17524],[-1.09931,-1.46787,-1.28836,0.208209],[-0.446501,1.98151,0.97195,1.93178],[1.10742,1.13989,0.178853,-0.225676],[1.2938,0.540534,-0.403253,-1.31606],[-0.63869,-0.441023,0.797084,0.579203],[0.494526,0.171276,0.50552,-0.423837],[-2.05943,-0.845955,1.89207,-0.661324],[-0.160979,0.496285,-0.561349,0.337265]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-0.38532,-1.64485,0.67449,0.38532],[0.67449,-1.03643,0.125661,1.64485],[1.64485,-0.67449,1.64485,-0.67449],[0.38532,1.64485,-0.125661,-1.64485],[-1.03643,1.03643,-1.64485,-1.03643],[1.03643,0.67449,0.38532,1.03643],[-0.125661,-0.38532,-1.03643,-0.38532],[-0.67449,0.125661,1.03643,0.125661],[0.125661,-0.125661,-0.38532,0.67449],[-1.64485,0.38532,-0.67449,-0.125661]] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-0.38532,-1.64485,0.67449,0.38532],[0.67449,-1.03643,0.125661,1.64485],[1.64485,-0.67449,1.64485,-0.67449],[0.38532,1.64485,-0.125661,-1.64485],[-1.03643,1.03643,-1.64485,-1.03643],[1.03643,0.67449,0.38532,1.03643],[-0.125661,-0.38532,-1.03643,-0.38532],[-0.67449,0.125661,1.03643,0.125661],[0.125661,-0.125661,-0.38532,0.67449],[-1.64485,0.38532,-0.67449,-0.125661]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-1.03643,-1.03643,1.03643,0.67449],[-1.64485,-0.38532,0.125661,1.03643],[-0.38532,-0.67449,-1.03643,0.38532],[-0.125661,0.67449,0.67449,0.125661],[0.67449,-1.64485,-0.125661,-1.64485],[0.125661,1.03643,1.64485,-1.03643],[-0.67449,0.38532,0.38532,-0.38532],[1.64485,-0.125661,-0.38532,-0.125661],[0.38532,1.64485,-1.64485,-0.67449],[1.03643,0.125661,-0.67449,1.64485]] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[0.38532,0.38532,-1.03643,-0.38532],[-0.125661,0.67449,0.125661,-1.64485],[0.67449,-0.125661,1.64485,1.03643],[-1.64485,1.64485,1.03643,1.64485],[-0.38532,-0.67449,-0.125661,-1.03643],[1.03643,-1.03643,-1.64485,0.67449],[0.125661,-0.38532,0.38532,-0.67449],[1.64485,0.125661,0.67449,-0.125661],[-1.03643,1.03643,-0.67449,0.38532],[-0.67449,-1.64485,-0.38532,0.125661]] openturns-1.9/lib/test/t_LHS_std.cxx000066400000000000000000000046201307543307100175210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of LHS class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; SymbolicFunction myFunction(input, Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ LHS myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.1); fullprint << "LHS=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "LHS result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LHS_std.expout000066400000000000000000000027461307543307100202520ustar00rootroot00000000000000LHS=class=LHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 LHS result=probabilityEstimate=1.355721e-01 varianceEstimate=1.825027e-04 standard deviation=1.35e-02 coefficient of variation=9.96e-02 confidenceLength(0.95)=5.30e-02 outerSampling=201 blockSize=4 openturns-1.9/lib/test/t_LaguerreFactory_std.cxx000066400000000000000000000036701307543307100221750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LaguerreFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { { LaguerreFactory laguerre(2.5, LaguerreFactory::PROBABILITY); fullprint << "laguerre=" << laguerre << std::endl; } { LaguerreFactory laguerre(2.5, LaguerreFactory::ANALYSIS); fullprint << "laguerre=" << laguerre << std::endl; } LaguerreFactory laguerre(2.5); fullprint << "laguerre=" << laguerre << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "laguerre(" << i << ")=" << laguerre.build(i).__str__() << std::endl; } Point roots(laguerre.getRoots(10)); fullprint << "laguerre(10) roots=" << roots << std::endl; Point weights; roots = laguerre.getNodesAndWeights(10, weights); fullprint << "laguerre(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LaguerreFactory_std.expout000066400000000000000000000032641307543307100227160ustar00rootroot00000000000000laguerre=class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=2.5 lambda=1 gamma=0 laguerre=class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 laguerre=class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 laguerre(0)=1 laguerre(1)=-1.87083 + 0.534522 * X laguerre(2)=2.80624 - 1.60357 * X + 0.178174 * X^2 laguerre(3)=-3.79967 + 3.25686 * X - 0.723747 * X^2 + 0.0438634 * X^3 laguerre(4)=4.84365 - 5.5356 * X + 1.8452 * X^2 - 0.223661 * X^3 + 0.00860233 * X^4 laguerre(5)=-5.93223 + 8.47462 * X - 3.7665 * X^2 + 0.684818 * X^3 - 0.0526783 * X^4 + 0.00140475 * X^5 laguerre(6)=7.06077 - 12.1042 * X + 6.72454 * X^2 - 1.63019 * X^3 + 0.188099 * X^4 - 0.010032 * X^5 + 0.000196705 * X^6 laguerre(7)=-8.22555 + 16.4511 * X - 10.9674 * X^2 + 3.32345 * X^3 - 0.511301 * X^4 + 0.0409041 * X^5 - 0.00160408 * X^6 + 2.41215e-05 * X^7 laguerre(8)=9.42355 - 21.5395 * X + 16.753 * X^2 - 6.09199 * X^3 + 1.17154 * X^4 - 0.124964 * X^5 + 0.00735082 * X^6 - 0.000221077 * X^7 + 2.63187e-06 * X^8 laguerre(9)=-10.6523 + 27.3916 * X - 24.3481 * X^2 + 10.3295 * X^3 - 2.38373 * X^4 + 0.31783 * X^5 - 0.0249278 * X^6 + 0.00112456 * X^7 - 2.67753e-05 * X^8 + 2.58699e-07 * X^9 laguerre(10) roots=class=Point name=Unnamed dimension=10 values=[0.711476,1.78548,3.31448,5.33305,7.89076,11.0617,14.961,19.7822,25.8977,34.2622] laguerre(10) roots=class=Point name=Unnamed dimension=10 values=[0.711476,1.78548,3.31448,5.33305,7.89076,11.0617,14.961,19.7822,25.8977,34.2622] and weights=class=Point name=Unnamed dimension=10 values=[0.0540126,0.27873,0.386588,0.217442,0.0561105,0.00675159,0.000357814,7.2229e-06,4.05914e-08,2.8002e-11] openturns-1.9/lib/test/t_LaplaceFactory_std.cxx000066400000000000000000000047301307543307100217660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Laplace for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Laplace distribution(2.5, -1.3); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); LaplaceFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Laplace estimatedLaplace(factory.buildAsLaplace(sample)); fullprint << "Laplace =" << distribution << std::endl; fullprint << "Estimated laplace=" << estimatedLaplace << std::endl; estimatedLaplace = factory.buildAsLaplace(); fullprint << "Default laplace=" << estimatedLaplace << std::endl; estimatedLaplace = factory.buildAsLaplace(distribution.getParameter()); fullprint << "Laplace from parameters=" << estimatedLaplace << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LaplaceFactory_std.expout000066400000000000000000000012021307543307100224770ustar00rootroot00000000000000Distribution =class=Laplace name=Laplace dimension=1 lambda=2.5 mu=-1.3 Estimated distribution=class=Laplace name=Laplace dimension=1 lambda=2.46764 mu=-1.29551 Default distribution=class=Laplace name=Laplace dimension=1 lambda=1 mu=0 Distribution from parameters=class=Laplace name=Laplace dimension=1 lambda=2.5 mu=-1.3 Laplace =class=Laplace name=Laplace dimension=1 lambda=2.5 mu=-1.3 Estimated laplace=class=Laplace name=Laplace dimension=1 lambda=2.46764 mu=-1.29551 Default laplace=class=Laplace name=Laplace dimension=1 lambda=1 mu=0 Laplace from parameters=class=Laplace name=Laplace dimension=1 lambda=2.5 mu=-1.3 openturns-1.9/lib/test/t_Laplace_std.cxx000066400000000000000000000205141307543307100204340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Laplace for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Laplace { public: TestObject() : Laplace(1.5, 0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Laplace distribution(1.0 / 1.5, 0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Laplace(distribution.getLambda() + eps, distribution.getMu()).computePDF(point) - Laplace(distribution.getLambda() - eps, distribution.getMu()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Laplace(distribution.getLambda(), distribution.getMu() + eps).computePDF(point) - Laplace(distribution.getLambda(), distribution.getMu() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Laplace(distribution.getLambda() + eps, distribution.getMu()).computeCDF(point) - Laplace(distribution.getLambda() - eps, distribution.getMu()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Laplace(distribution.getLambda(), distribution.getMu() + eps).computeCDF(point) - Laplace(distribution.getLambda(), distribution.getMu() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Laplace::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar lambda = distribution.getLambda(); fullprint << "lambda=" << lambda << std::endl; Scalar mu = distribution.getMu(); fullprint << "mu=" << mu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Laplace_std.expout000066400000000000000000000115241307543307100211570ustar00rootroot00000000000000Testing class Laplace checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Laplace name=Laplace dimension=1 lambda=1.5 mu=0.5 streamObject(const T & anObject) class=Laplace name=Laplace dimension=1 lambda=1.5 mu=0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Laplace name=Laplace dimension=1 lambda=0.666667 mu=0.5 Distribution Laplace(lambda = 0.666667, mu = 0.5) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.951157] oneSample first=class=Point name=Unnamed dimension=1 values=[2.67616] last=class=Point name=Unnamed dimension=1 values=[0.255241] mean=class=Point name=Unnamed dimension=1 values=[0.520328] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.54149] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.159229] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.159229] log pdf=-1.43195 pdf =0.238844 pdf (FD)=0.238844 cdf=0.641734 ccdf=0.358266 survival=0.358266 Inverse survival=class=Point name=Unnamed dimension=1 values=[-2.95388] Survival(inverse survival)=0.95 characteristic function=(0.270025,0.147516) log characteristic function=(-1.17865,0.5) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.238844,0.159229] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.238844,0.159229] cdf gradient =class=Point name=Unnamed dimension=2 values=[0.179133,-0.238844] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.179133,-0.238844] quantile=class=Point name=Unnamed dimension=1 values=[3.95388] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-3.9936] upper bound=class=Point name=Unnamed dimension=1 values=[4.9936] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Laplace(lambda = 0.666667, mu = 0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Laplace(lambda = 0.666667, mu = 0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Laplace(lambda = 0.666667, mu = 0.5)) level=4.09434 beta=0.0166667 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-3.9936] upper bound=class=Point name=Unnamed dimension=1 values=[4.9936] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-46.8158] upper bound=class=Point name=Unnamed dimension=1 values=[3.95388] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.95388] upper bound=class=Point name=Unnamed dimension=1 values=[47.8158] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.5] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.5] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[lambda : 0.666667, mu : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[24] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Laplace(lambda = 1, mu = 0) lambda=0.666667 mu=0.5 standard deviation=class=Point name=Unnamed dimension=1 values=[2.12132] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[6] openturns-1.9/lib/test/t_LeastSquaresMetaModelSelectionFactory_std.cxx000066400000000000000000000030301307543307100264670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LeastSquaresMetaModelSelectionFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); Sample x(1, 1); Sample y(1, 1); Point weight(1, 1.0); Collection coll; coll.add(SymbolicFunction("x", "x")); Basis psi(coll); Indices indices(coll.getSize()); indices.fill(); LeastSquaresMetaModelSelectionFactory factory = LeastSquaresMetaModelSelectionFactory(LARS(), CorrectedLeaveOneOut()); ApproximationAlgorithm algo(factory.build(x, y, weight, psi, indices)); fullprint << "algo = " << algo << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_LeastSquaresMetaModelSelectionFactory_std.expout000066400000000000000000000001701307543307100272130ustar00rootroot00000000000000algo = class=LeastSquaresMetaModelSelection basisSequenceFactory=class=LARS fittingAlgorithm=class=CorrectedLeaveOneOut openturns-1.9/lib/test/t_LeastSquaresMethod_std.cxx000066400000000000000000000072101307543307100226460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LeastSquaresMethod for the standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(3); const UnsignedInteger dimension = 10; const UnsignedInteger size = 20; Sample x(Normal(dimension).getSample(size)); Collection coll; const Description description(Description::BuildDefault(dimension, "x")); for(UnsignedInteger i = 0; i < dimension; ++i) { coll.add(SymbolicFunction(description, Description(1, OSS() << "x" << i))); } Basis psi(coll); Indices indices(dimension); indices.fill(); DesignProxy proxy(x, psi); { QRMethod qrMethod(proxy, indices); qrMethod.update(Indices(0), indices, Indices(0)); fullprint << "QR" << std::endl; fullprint << "Solve=" << qrMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << qrMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << qrMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << qrMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << qrMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << qrMethod.getGramInverseDiag() << std::endl; } { SVDMethod svdMethod(proxy, indices); svdMethod.update(Indices(0), indices, Indices(0)); fullprint << "SVD" << std::endl; fullprint << "Solve=" << svdMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << svdMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << svdMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << svdMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << svdMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << svdMethod.getGramInverseDiag() << std::endl; } { CholeskyMethod choleskyMethod(proxy, indices); choleskyMethod.update(Indices(0), indices, Indices(0)); fullprint << "Cholesky" << std::endl; fullprint << "Solve=" << choleskyMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << choleskyMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << choleskyMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << choleskyMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << choleskyMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << choleskyMethod.getGramInverseDiag() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LeastSquaresMethod_std.expout000066400000000000000000000105611307543307100233730ustar00rootroot00000000000000QR Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] SVD Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] Cholesky Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] openturns-1.9/lib/test/t_LeastSquaresMethod_weighted.cxx000066400000000000000000000134731307543307100236640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LeastSquaresMethod for the standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(3); const UnsignedInteger dimension = 10; const UnsignedInteger size = 20; Sample x(Normal(dimension).getSample(size)); Collection coll; const Description description(Description::BuildDefault(dimension, "x")); for(UnsignedInteger i = 0; i < dimension; ++i) { coll.add(SymbolicFunction(description, Description(1, OSS() << "x" << i))); } Basis psi(coll); Indices indices(dimension); indices.fill(); DesignProxy proxy(x, psi); Point weights(size, 10.0); fullprint << "Uniform weights" << std::endl << std::endl; { QRMethod qrMethod(proxy, weights, indices); qrMethod.update(Indices(0), indices, Indices(0)); fullprint << "QR" << std::endl; fullprint << "Solve=" << qrMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << qrMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << qrMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << qrMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << qrMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << qrMethod.getGramInverseDiag() << std::endl; } { SVDMethod svdMethod(proxy, weights, indices); svdMethod.update(Indices(0), indices, Indices(0)); fullprint << "SVD" << std::endl; fullprint << "Solve=" << svdMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << svdMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << svdMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << svdMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << svdMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << svdMethod.getGramInverseDiag() << std::endl; } { CholeskyMethod choleskyMethod(proxy, weights, indices); choleskyMethod.update(Indices(0), indices, Indices(0)); fullprint << "Cholesky" << std::endl; fullprint << "Solve=" << choleskyMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << choleskyMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << choleskyMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << choleskyMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << choleskyMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << choleskyMethod.getGramInverseDiag() << std::endl; } fullprint << std::endl << "Non-uniform weights" << std::endl << std::endl; weights[0] += 1.e-10; { QRMethod qrMethod(proxy, weights, indices); qrMethod.update(Indices(0), indices, Indices(0)); fullprint << "QR" << std::endl; fullprint << "Solve=" << qrMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << qrMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << qrMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << qrMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << qrMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << qrMethod.getGramInverseDiag() << std::endl; } { SVDMethod svdMethod(proxy, weights, indices); svdMethod.update(Indices(0), indices, Indices(0)); fullprint << "SVD" << std::endl; fullprint << "Solve=" << svdMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << svdMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << svdMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << svdMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << svdMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << svdMethod.getGramInverseDiag() << std::endl; } { CholeskyMethod choleskyMethod(proxy, weights, indices); choleskyMethod.update(Indices(0), indices, Indices(0)); fullprint << "Cholesky" << std::endl; fullprint << "Solve=" << choleskyMethod.solve(Point(size, 1.0)) << std::endl; fullprint << "SolveNormal=" << choleskyMethod.solveNormal(Point(dimension, 1.0)) << std::endl; fullprint << "GramInverse=" << choleskyMethod.getGramInverse() << std::endl; fullprint << "HDiag=" << choleskyMethod.getHDiag() << std::endl; fullprint << "GramInverseTrace=" << choleskyMethod.getGramInverseTrace() << std::endl; fullprint << "GramInverseDiag=" << choleskyMethod.getGramInverseDiag() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LeastSquaresMethod_weighted.expout000066400000000000000000000221201307543307100243730ustar00rootroot00000000000000Uniform weights QR Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] SVD Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] Cholesky Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.11,0.0246,-0.0109,-0.0312,0.0227,-0.0152,0.0147,-0.0105,0.00668,-0.0201,0.0246,0.12,-0.0258,0.00303,-0.00128,0.00273,-0.011,-0.039,0.0254,0.0114,-0.0109,-0.0258,0.0597,-0.0163,-0.00204,-0.00414,-0.00988,0.0177,0.00617,-0.0154,-0.0312,0.00303,-0.0163,0.0517,-0.00727,0.0101,0.0124,-0.00138,-0.0106,0.0196,0.0227,-0.00128,-0.00204,-0.00727,0.0948,-0.0112,0.00407,0.0295,-0.00178,0.0121,-0.0152,0.00273,-0.00414,0.0101,-0.0112,0.0396,0.00397,-0.0194,0.00276,0.0104,0.0147,-0.011,-0.00988,0.0124,0.00407,0.00397,0.0634,-5.78e-05,-0.00959,-0.00102,-0.0105,-0.039,0.0177,-0.00138,0.0295,-0.0194,-5.78e-05,0.0882,-0.0174,0.0021,0.00668,0.0254,0.00617,-0.0106,-0.00178,0.00276,-0.00959,-0.0174,0.0715,0.00912,-0.0201,0.0114,-0.0154,0.0196,0.0121,0.0104,-0.00102,0.0021,0.00912,0.0894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.11,0.12,0.0597,0.0517,0.0948,0.0396,0.0634,0.0882,0.0715,0.0894] Non-uniform weights QR Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.011,0.00246,-0.00109,-0.00312,0.00227,-0.00152,0.00147,-0.00105,0.000668,-0.00201,0.00246,0.012,-0.00258,0.000303,-0.000128,0.000273,-0.0011,-0.0039,0.00254,0.00114,-0.00109,-0.00258,0.00597,-0.00163,-0.000204,-0.000414,-0.000988,0.00177,0.000617,-0.00154,-0.00312,0.000303,-0.00163,0.00517,-0.000727,0.00101,0.00124,-0.000138,-0.00106,0.00196,0.00227,-0.000128,-0.000204,-0.000727,0.00948,-0.00112,0.000407,0.00295,-0.000178,0.00121,-0.00152,0.000273,-0.000414,0.00101,-0.00112,0.00396,0.000397,-0.00194,0.000276,0.00104,0.00147,-0.0011,-0.000988,0.00124,0.000407,0.000397,0.00634,-5.78e-06,-0.000959,-0.000102,-0.00105,-0.0039,0.00177,-0.000138,0.00295,-0.00194,-5.78e-06,0.00882,-0.00174,0.00021,0.000668,0.00254,0.000617,-0.00106,-0.000178,0.000276,-0.000959,-0.00174,0.00715,0.000912,-0.00201,0.00114,-0.00154,0.00196,0.00121,0.00104,-0.000102,0.00021,0.000912,0.00894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.0788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.011,0.012,0.00597,0.00517,0.00948,0.00396,0.00634,0.00882,0.00715,0.00894] SVD Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.011,0.00246,-0.00109,-0.00312,0.00227,-0.00152,0.00147,-0.00105,0.000668,-0.00201,0.00246,0.012,-0.00258,0.000303,-0.000128,0.000273,-0.0011,-0.0039,0.00254,0.00114,-0.00109,-0.00258,0.00597,-0.00163,-0.000204,-0.000414,-0.000988,0.00177,0.000617,-0.00154,-0.00312,0.000303,-0.00163,0.00517,-0.000727,0.00101,0.00124,-0.000138,-0.00106,0.00196,0.00227,-0.000128,-0.000204,-0.000727,0.00948,-0.00112,0.000407,0.00295,-0.000178,0.00121,-0.00152,0.000273,-0.000414,0.00101,-0.00112,0.00396,0.000397,-0.00194,0.000276,0.00104,0.00147,-0.0011,-0.000988,0.00124,0.000407,0.000397,0.00634,-5.78e-06,-0.000959,-0.000102,-0.00105,-0.0039,0.00177,-0.000138,0.00295,-0.00194,-5.78e-06,0.00882,-0.00174,0.00021,0.000668,0.00254,0.000617,-0.00106,-0.000178,0.000276,-0.000959,-0.00174,0.00715,0.000912,-0.00201,0.00114,-0.00154,0.00196,0.00121,0.00104,-0.000102,0.00021,0.000912,0.00894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.0788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.011,0.012,0.00597,0.00517,0.00948,0.00396,0.00634,0.00882,0.00715,0.00894] Cholesky Solve=class=Point name=Unnamed dimension=10 values=[-0.145,-0.294,-0.0966,-0.133,-0.149,-0.00563,0.246,0.131,0.319,-0.171] SolveNormal=class=Point name=Unnamed dimension=10 values=[0.091,0.11,-0.000889,0.03,0.14,0.0196,0.067,0.0497,0.0822,0.117] GramInverse=class=CovarianceMatrix dimension=10 implementation=class=MatrixImplementation name=Unnamed rows=10 columns=10 values=[0.011,0.00246,-0.00109,-0.00312,0.00227,-0.00152,0.00147,-0.00105,0.000668,-0.00201,0.00246,0.012,-0.00258,0.000303,-0.000128,0.000273,-0.0011,-0.0039,0.00254,0.00114,-0.00109,-0.00258,0.00597,-0.00163,-0.000204,-0.000414,-0.000988,0.00177,0.000617,-0.00154,-0.00312,0.000303,-0.00163,0.00517,-0.000727,0.00101,0.00124,-0.000138,-0.00106,0.00196,0.00227,-0.000128,-0.000204,-0.000727,0.00948,-0.00112,0.000407,0.00295,-0.000178,0.00121,-0.00152,0.000273,-0.000414,0.00101,-0.00112,0.00396,0.000397,-0.00194,0.000276,0.00104,0.00147,-0.0011,-0.000988,0.00124,0.000407,0.000397,0.00634,-5.78e-06,-0.000959,-0.000102,-0.00105,-0.0039,0.00177,-0.000138,0.00295,-0.00194,-5.78e-06,0.00882,-0.00174,0.00021,0.000668,0.00254,0.000617,-0.00106,-0.000178,0.000276,-0.000959,-0.00174,0.00715,0.000912,-0.00201,0.00114,-0.00154,0.00196,0.00121,0.00104,-0.000102,0.00021,0.000912,0.00894] HDiag=class=Point name=Unnamed dimension=20 values=[0.713,0.56,0.455,0.562,0.479,0.604,0.469,0.718,0.498,0.658,0.748,0.574,0.642,0.526,0.286,0.0433,0.435,0.211,0.452,0.364] GramInverseTrace=0.0788861 GramInverseDiag=class=Point name=Unnamed dimension=10 values=[0.011,0.012,0.00597,0.00517,0.00948,0.00396,0.00634,0.00882,0.00715,0.00894] openturns-1.9/lib/test/t_LegendreFactory_std.cxx000066400000000000000000000032461307543307100221530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LegendreFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { LegendreFactory legendre; fullprint << "legendre=" << legendre << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "legendre(" << i << ")=" << legendre.build(i).__str__() << std::endl; } Point roots(legendre.getRoots(10)); fullprint << "legendre(10) roots=" << roots << std::endl; Point weights; roots = legendre.getNodesAndWeights(10, weights); fullprint << "legendre(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LegendreFactory_std.expout000066400000000000000000000021011307543307100226620ustar00rootroot00000000000000legendre=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 legendre(0)=1 legendre(1)=1.73205 * X legendre(2)=-1.11803 + 3.3541 * X^2 legendre(3)=-3.96863 * X + 6.61438 * X^3 legendre(4)=1.125 - 11.25 * X^2 + 13.125 * X^4 legendre(5)=6.21867 * X - 29.0205 * X^3 + 26.1184 * X^5 legendre(6)=-1.12673 + 23.6614 * X^2 - 70.9843 * X^4 + 52.0551 * X^6 legendre(7)=-8.47215 * X + 76.2494 * X^3 - 167.749 * X^5 + 103.844 * X^7 legendre(8)=1.12741 - 40.5868 * X^2 + 223.228 * X^4 - 386.928 * X^6 + 207.283 * X^8 legendre(9)=10.727 * X - 157.329 * X^3 + 613.583 * X^5 - 876.547 * X^7 + 413.925 * X^9 legendre(10) roots=class=Point name=Unnamed dimension=10 values=[-0.973907,-0.865063,-0.67941,-0.433395,-0.148874,0.148874,0.433395,0.67941,0.865063,0.973907] legendre(10) roots=class=Point name=Unnamed dimension=10 values=[-0.973907,-0.865063,-0.67941,-0.433395,-0.148874,0.148874,0.433395,0.67941,0.865063,0.973907] and weights=class=Point name=Unnamed dimension=10 values=[0.0333357,0.0747257,0.109543,0.134633,0.147762,0.147762,0.134633,0.109543,0.0747257,0.0333357] openturns-1.9/lib/test/t_LevelSetMesher_std.cxx000066400000000000000000000067031307543307100217660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LevelSetMesher for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { ResourceMap::SetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumIteration", 1000 ); ResourceMap::SetAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumEvaluationNumber", 100000); ResourceMap::SetAsScalar("OptimizationAlgorithm-DefaultMaximumAbsoluteError", 1.0e-7 ); ResourceMap::SetAsScalar("OptimizationAlgorithm-DefaultMaximumRelativeError", 1.0e-7 ); ResourceMap::SetAsScalar("OptimizationAlgorithm-DefaultMaximumResidualError", 1.0e-7 ); ResourceMap::SetAsScalar("OptimizationAlgorithm-DefaultMaximumConstraintError", 1.0e-7 ); PlatformInfo::SetNumericalPrecision(3); // The 1D mesher LevelSetMesher mesher1D(Indices(1, 7)); fullprint << "mesher1D=" << mesher1D << std::endl; Scalar level = 0.5; SymbolicFunction function1D("x", "cos(x)/(1+0.1*x^2)"); LevelSet levelSet1D(function1D, level); // Automatic bounding box Mesh mesh1D(mesher1D.build(levelSet1D)); fullprint << "mesh1D=" << mesh1D << std::endl; // Manual bounding box mesh1D = mesher1D.build(levelSet1D, Interval(Point(1, -10.0), Point(1, 10.0))); fullprint << "mesh1D=" << mesh1D << std::endl; // The 2D mesher LevelSetMesher mesher2D(Indices(2, 5)); fullprint << "mesher2D=" << mesher2D << std::endl; SymbolicFunction function2D(Description::BuildDefault(2, "x"), Description(1, "cos(x0 * x1)/(1 + 0.1 * (x0^2 + x1^2))")); LevelSet levelSet2D(function2D, level); // Automatic bounding box Mesh mesh2D(mesher2D.build(levelSet2D)); fullprint << "mesh2D=" << mesh2D << std::endl; // Manual bounding box mesh2D = mesher2D.build(levelSet2D, Interval(Point(2, -10.0), Point(2, 10.0))); fullprint << "mesh2D=" << mesh2D << std::endl; // The 3D mesher LevelSetMesher mesher3D(Indices(3, 3)); fullprint << "mesher3D=" << mesher3D << std::endl; SymbolicFunction function3D(Description::BuildDefault(3, "x"), Description(1, "cos(x0 * x1 + x2)/(1 + 0.1*(x0^2 + x1^2 + x2^2))")); LevelSet levelSet3D(function3D, level); // Automatic bounding box Mesh mesh3D(mesher3D.build(levelSet3D)); fullprint << "mesh3D=" << mesh3D << std::endl; // Manual bounding box mesh3D = mesher3D.build(levelSet3D, Interval(Point(3, -10.0), Point(3, 10.0))); fullprint << "mesh3D=" << mesh3D << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LevelSetMesher_std.expout000066400000000000000000000227141307543307100225100ustar00rootroot00000000000000mesher1D=class=LevelSetMesher discretization=[7] mesh1D=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[0.99],[0.99],[0.99],[0.99],[0.99]] simplices=[[0,1],[1,2],[2,3],[3,4]] mesh1D=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[-10],[-7.14],[-4.29],[-1.43],[1.43],[4.29],[7.14],[10]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] mesher2D=class=LevelSetMesher discretization=[5,5] mesh2D=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-3.16,-3.16],[-1.9,-3.16],[-0.632,-3.16],[0.632,-3.16],[1.9,-3.16],[3.16,-3.16],[-3.16,-1.9],[-1.9,-1.9],[-0.632,-1.9],[0.632,-1.9],[1.9,-1.9],[3.16,-1.9],[-3.16,-0.632],[-1.9,-0.632],[-0.967,-0.967],[0.967,-0.967],[1.9,-0.632],[3.16,-0.632],[-3.16,0.632],[-1.9,0.632],[-0.967,0.967],[1.37,-0.661],[1.9,0.632],[3.16,0.632],[-3.16,1.9],[-1.9,1.9],[-0.632,1.9],[0.632,1.9],[1.9,1.9],[3.16,1.9],[-3.16,3.16],[-1.9,3.16],[-0.632,3.16],[0.632,3.16],[1.9,3.16],[3.16,3.16]] simplices=[[0,1,6],[1,7,6],[1,2,7],[2,8,7],[2,3,8],[3,9,8],[3,4,9],[4,10,9],[4,5,10],[5,11,10],[6,7,12],[7,13,12],[7,8,13],[8,14,13],[8,9,14],[9,15,14],[9,10,15],[10,16,15],[10,11,16],[11,17,16],[12,13,18],[13,19,18],[13,14,19],[14,20,19],[15,16,21],[16,22,21],[16,17,22],[17,23,22],[18,19,24],[19,25,24],[19,20,25],[20,26,25],[20,21,26],[21,27,26],[21,22,27],[22,28,27],[22,23,28],[23,29,28],[24,25,30],[25,31,30],[25,26,31],[26,32,31],[26,27,32],[27,33,32],[27,28,33],[28,34,33],[28,29,34],[29,35,34]] mesh2D=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-10,-10],[-6,-10],[-2,-10],[2,-10],[6,-10],[10,-10],[-10,-6],[-6,-6],[-2,-6],[2,-6],[6,-6],[10,-6],[-10,-2],[-6,-2],[-2,-2],[2,-2],[6,-2],[10,-2],[-10,2],[-6,2],[-2,2],[2,2],[6,2],[10,2],[-10,6],[-6,6],[-2,6],[2,6],[6,6],[10,6],[-10,10],[-6,10],[-2,10],[2,10],[6,10],[10,10]] simplices=[[0,1,6],[1,7,6],[1,2,7],[2,8,7],[2,3,8],[3,9,8],[3,4,9],[4,10,9],[4,5,10],[5,11,10],[6,7,12],[7,13,12],[7,8,13],[8,14,13],[8,9,14],[9,15,14],[9,10,15],[10,16,15],[10,11,16],[11,17,16],[12,13,18],[13,19,18],[13,14,19],[14,20,19],[14,15,20],[15,21,20],[15,16,21],[16,22,21],[16,17,22],[17,23,22],[18,19,24],[19,25,24],[19,20,25],[20,26,25],[20,21,26],[21,27,26],[21,22,27],[22,28,27],[22,23,28],[23,29,28],[24,25,30],[25,31,30],[25,26,31],[26,32,31],[26,27,32],[27,33,32],[27,28,33],[28,34,33],[28,29,34],[29,35,34]] mesher3D=class=LevelSetMesher discretization=[3,3,3] mesh3D=class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=3 data=[[-3.16,-3.16,-2.33],[-1.05,-3.16,-2.33],[1.05,-3.16,-2.33],[3.16,-3.16,-2.33],[-3.16,-1.05,-2.33],[-1.05,-1.05,-2.33],[1.05,-1.05,-2.33],[3.16,-1.05,-2.33],[-3.16,1.05,-2.33],[-1.05,1.05,-2.33],[1.05,1.05,-2.33],[3.16,1.05,-2.33],[-3.16,3.16,-2.33],[-1.05,3.16,-2.33],[1.05,3.16,-2.33],[3.16,3.16,-2.33],[-3.16,-3.16,-0.777],[-1.05,-3.16,-0.777],[1.05,-3.16,-0.777],[3.16,-3.16,-0.777],[-3.16,-1.05,-0.777],[-1.22,-1.22,-0.666],[1.05,-1.05,-0.777],[3.16,-1.05,-0.777],[-3.16,1.05,-0.777],[-1.05,1.05,-0.777],[1.22,1.22,-0.666],[3.16,1.05,-0.777],[-3.16,3.16,-0.777],[-1.05,3.16,-0.777],[1.05,3.16,-0.777],[3.16,3.16,-0.777],[-3.16,-3.16,0.777],[-1.05,-3.16,0.777],[1.05,-3.16,0.777],[3.16,-3.16,0.777],[-3.16,-1.05,0.777],[-1.05,-1.05,0.777],[0.726,-0.727,1.39],[3.16,-1.05,0.777],[-3.16,1.05,0.777],[-0.727,0.726,1.39],[1.05,1.05,0.777],[3.16,1.05,0.777],[-3.16,3.16,0.777],[-1.05,3.16,0.777],[1.05,3.16,0.777],[3.16,3.16,0.777],[-3.16,-3.16,2.33],[-1.05,-3.16,2.33],[1.05,-3.16,2.33],[3.16,-3.16,2.33],[-3.16,-1.05,2.33],[-1.05,-1.05,2.33],[1.05,-1.05,2.33],[3.16,-1.05,2.33],[-3.16,1.05,2.33],[-1.05,1.05,2.33],[1.05,1.05,2.33],[3.16,1.05,2.33],[-3.16,3.16,2.33],[-1.05,3.16,2.33],[1.05,3.16,2.33],[3.16,3.16,2.33]] simplices=[[0,1,17,21],[0,5,1,21],[0,17,16,21],[0,16,20,21],[0,20,4,21],[0,4,5,21],[1,2,18,22],[1,6,2,22],[1,18,17,22],[1,17,21,22],[1,21,5,22],[1,5,6,22],[2,3,19,23],[2,7,3,23],[2,19,18,23],[2,18,22,23],[2,22,6,23],[2,6,7,23],[4,5,21,25],[4,9,5,25],[4,21,20,25],[4,20,24,25],[4,24,8,25],[4,8,9,25],[5,6,22,26],[5,10,6,26],[5,22,21,26],[5,21,25,26],[5,25,9,26],[5,9,10,26],[6,7,23,27],[6,11,7,27],[6,23,22,27],[6,22,26,27],[6,26,10,27],[6,10,11,27],[8,9,25,29],[8,13,9,29],[8,25,24,29],[8,24,28,29],[8,28,12,29],[8,12,13,29],[9,10,26,30],[9,14,10,30],[9,26,25,30],[9,25,29,30],[9,29,13,30],[9,13,14,30],[10,11,27,31],[10,15,11,31],[10,27,26,31],[10,26,30,31],[10,30,14,31],[10,14,15,31],[16,17,33,37],[16,21,17,37],[16,33,32,37],[16,32,36,37],[16,36,20,37],[16,20,21,37],[17,18,34,38],[17,22,18,38],[17,34,33,38],[17,33,37,38],[17,37,21,38],[17,21,22,38],[18,19,35,39],[18,23,19,39],[18,35,34,39],[18,34,38,39],[18,38,22,39],[18,22,23,39],[20,21,37,41],[20,25,21,41],[20,37,36,41],[20,36,40,41],[20,40,24,41],[20,24,25,41],[21,22,38,42],[21,26,22,42],[21,38,37,42],[21,37,41,42],[21,41,25,42],[21,25,26,42],[22,23,39,43],[22,27,23,43],[22,39,38,43],[22,38,42,43],[22,42,26,43],[22,26,27,43],[24,25,41,45],[24,29,25,45],[24,41,40,45],[24,40,44,45],[24,44,28,45],[24,28,29,45],[25,26,42,46],[25,30,26,46],[25,42,41,46],[25,41,45,46],[25,45,29,46],[25,29,30,46],[26,27,43,47],[26,31,27,47],[26,43,42,47],[26,42,46,47],[26,46,30,47],[26,30,31,47],[32,33,49,53],[32,37,33,53],[32,49,48,53],[32,48,52,53],[32,52,36,53],[32,36,37,53],[33,34,50,54],[33,38,34,54],[33,50,49,54],[33,49,53,54],[33,53,37,54],[33,37,38,54],[34,35,51,55],[34,39,35,55],[34,51,50,55],[34,50,54,55],[34,54,38,55],[34,38,39,55],[36,37,53,57],[36,41,37,57],[36,53,52,57],[36,52,56,57],[36,56,40,57],[36,40,41,57],[37,38,54,58],[37,42,38,58],[37,54,53,58],[37,53,57,58],[37,57,41,58],[37,41,42,58],[38,39,55,59],[38,43,39,59],[38,55,54,59],[38,54,58,59],[38,58,42,59],[38,42,43,59],[40,41,57,61],[40,45,41,61],[40,57,56,61],[40,56,60,61],[40,60,44,61],[40,44,45,61],[41,42,58,62],[41,46,42,62],[41,58,57,62],[41,57,61,62],[41,61,45,62],[41,45,46,62],[42,43,59,63],[42,47,43,63],[42,59,58,63],[42,58,62,63],[42,62,46,63],[42,46,47,63]] mesh3D=class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=3 data=[[-10,-10,-10],[-3.33,-10,-10],[3.33,-10,-10],[10,-10,-10],[-10,-3.33,-10],[-3.33,-3.33,-10],[3.33,-3.33,-10],[10,-3.33,-10],[-10,3.33,-10],[-3.33,3.33,-10],[3.33,3.33,-10],[10,3.33,-10],[-10,10,-10],[-3.33,10,-10],[3.33,10,-10],[10,10,-10],[-10,-10,-3.33],[-3.33,-10,-3.33],[3.33,-10,-3.33],[10,-10,-3.33],[-10,-3.33,-3.33],[-3.33,-3.33,-3.33],[3.33,-3.33,-3.33],[10,-3.33,-3.33],[-10,3.33,-3.33],[-3.33,3.33,-3.33],[3.33,3.33,-3.33],[10,3.33,-3.33],[-10,10,-3.33],[-3.33,10,-3.33],[3.33,10,-3.33],[10,10,-3.33],[-10,-10,3.33],[-3.33,-10,3.33],[3.33,-10,3.33],[10,-10,3.33],[-10,-3.33,3.33],[-3.33,-3.33,3.33],[3.33,-3.33,3.33],[10,-3.33,3.33],[-10,3.33,3.33],[-3.33,3.33,3.33],[3.33,3.33,3.33],[10,3.33,3.33],[-10,10,3.33],[-3.33,10,3.33],[3.33,10,3.33],[10,10,3.33],[-10,-10,10],[-3.33,-10,10],[3.33,-10,10],[10,-10,10],[-10,-3.33,10],[-3.33,-3.33,10],[3.33,-3.33,10],[10,-3.33,10],[-10,3.33,10],[-3.33,3.33,10],[3.33,3.33,10],[10,3.33,10],[-10,10,10],[-3.33,10,10],[3.33,10,10],[10,10,10]] simplices=[[0,1,17,21],[0,5,1,21],[0,17,16,21],[0,16,20,21],[0,20,4,21],[0,4,5,21],[1,2,18,22],[1,6,2,22],[1,18,17,22],[1,17,21,22],[1,21,5,22],[1,5,6,22],[2,3,19,23],[2,7,3,23],[2,19,18,23],[2,18,22,23],[2,22,6,23],[2,6,7,23],[4,5,21,25],[4,9,5,25],[4,21,20,25],[4,20,24,25],[4,24,8,25],[4,8,9,25],[5,6,22,26],[5,10,6,26],[5,22,21,26],[5,21,25,26],[5,25,9,26],[5,9,10,26],[6,7,23,27],[6,11,7,27],[6,23,22,27],[6,22,26,27],[6,26,10,27],[6,10,11,27],[8,9,25,29],[8,13,9,29],[8,25,24,29],[8,24,28,29],[8,28,12,29],[8,12,13,29],[9,10,26,30],[9,14,10,30],[9,26,25,30],[9,25,29,30],[9,29,13,30],[9,13,14,30],[10,11,27,31],[10,15,11,31],[10,27,26,31],[10,26,30,31],[10,30,14,31],[10,14,15,31],[16,17,33,37],[16,21,17,37],[16,33,32,37],[16,32,36,37],[16,36,20,37],[16,20,21,37],[17,18,34,38],[17,22,18,38],[17,34,33,38],[17,33,37,38],[17,37,21,38],[17,21,22,38],[18,19,35,39],[18,23,19,39],[18,35,34,39],[18,34,38,39],[18,38,22,39],[18,22,23,39],[20,21,37,41],[20,25,21,41],[20,37,36,41],[20,36,40,41],[20,40,24,41],[20,24,25,41],[21,22,38,42],[21,26,22,42],[21,38,37,42],[21,37,41,42],[21,41,25,42],[21,25,26,42],[22,23,39,43],[22,27,23,43],[22,39,38,43],[22,38,42,43],[22,42,26,43],[22,26,27,43],[24,25,41,45],[24,29,25,45],[24,41,40,45],[24,40,44,45],[24,44,28,45],[24,28,29,45],[25,26,42,46],[25,30,26,46],[25,42,41,46],[25,41,45,46],[25,45,29,46],[25,29,30,46],[26,27,43,47],[26,31,27,47],[26,43,42,47],[26,42,46,47],[26,46,30,47],[26,30,31,47],[32,33,49,53],[32,37,33,53],[32,49,48,53],[32,48,52,53],[32,52,36,53],[32,36,37,53],[33,34,50,54],[33,38,34,54],[33,50,49,54],[33,49,53,54],[33,53,37,54],[33,37,38,54],[34,35,51,55],[34,39,35,55],[34,51,50,55],[34,50,54,55],[34,54,38,55],[34,38,39,55],[36,37,53,57],[36,41,37,57],[36,53,52,57],[36,52,56,57],[36,56,40,57],[36,40,41,57],[37,38,54,58],[37,42,38,58],[37,54,53,58],[37,53,57,58],[37,57,41,58],[37,41,42,58],[38,39,55,59],[38,43,39,59],[38,55,54,59],[38,54,58,59],[38,58,42,59],[38,42,43,59],[40,41,57,61],[40,45,41,61],[40,57,56,61],[40,56,60,61],[40,60,44,61],[40,44,45,61],[41,42,58,62],[41,46,42,62],[41,58,57,62],[41,57,61,62],[41,61,45,62],[41,45,46,62],[42,43,59,63],[42,47,43,63],[42,59,58,63],[42,58,62,63],[42,62,46,63],[42,46,47,63]] openturns-1.9/lib/test/t_LevelSet_std.cxx000066400000000000000000000067461307543307100206310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LevelSet for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // The function defining the level-set Description inVars(0); inVars.add("x"); inVars.add("y"); Description formula1(1, "x^4 + y^4"); SymbolicFunction function1(inVars, formula1); LevelSet levelSet1(function1, 1.0); fullprint << "levelSet1=" << levelSet1 << std::endl; Point p0(2); p0[0] = -0.5; p0[1] = -0.5; Point p1(2); p1[0] = 0.5; p1[1] = 0.0; Point p2(2); p2[0] = 1.5; p2[1] = 0.0; fullprint << "levelSet1 contains " << p0 << "? " << (levelSet1.contains(p0) ? "true" : "false") << std::endl; fullprint << "levelSet1 contains " << p1 << "? " << (levelSet1.contains(p1) ? "true" : "false") << std::endl; fullprint << "levelSet1 contains " << p2 << "? " << (levelSet1.contains(p2) ? "true" : "false") << std::endl; // Intersection Description formula2(1, "(x-1)^2 + y^2"); SymbolicFunction function2(inVars, formula2); LevelSet levelSet2(function2, 1.0); fullprint << "levelSet2=" << levelSet2 << std::endl; fullprint << "levelSet2 contains " << p0 << "? " << (levelSet2.contains(p0) ? "true" : "false") << std::endl; fullprint << "levelSet2 contains " << p1 << "? " << (levelSet2.contains(p1) ? "true" : "false") << std::endl; fullprint << "levelSet2 contains " << p2 << "? " << (levelSet2.contains(p2) ? "true" : "false") << std::endl; LevelSet intersection(levelSet1.intersect(levelSet2)); fullprint << "intersection of " << levelSet1 << " and " << levelSet2 << " equals " << intersection << std::endl; fullprint << "intersection contains " << p0 << "? " << (intersection.contains(p0) ? "true" : "false") << std::endl; fullprint << "intersection contains " << p1 << "? " << (intersection.contains(p1) ? "true" : "false") << std::endl; fullprint << "intersection contains " << p2 << "? " << (intersection.contains(p2) ? "true" : "false") << std::endl; // Union LevelSet join(levelSet1.join(levelSet2)); fullprint << "join of " << levelSet1 << " and " << levelSet2 << " equals " << join << std::endl; fullprint << "join contains " << p0 << "? " << (join.contains(p0) ? "true" : "false") << std::endl; fullprint << "join contains " << p1 << "? " << (join.contains(p1) ? "true" : "false") << std::endl; fullprint << "join contains " << p2 << "? " << (join.contains(p2) ? "true" : "false") << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LevelSet_std.expout000066400000000000000000000342501307543307100213420ustar00rootroot00000000000000levelSet1=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] level=1 levelSet1 contains class=Point name=Unnamed dimension=2 values=[-0.5,-0.5]? true levelSet1 contains class=Point name=Unnamed dimension=2 values=[0.5,0]? true levelSet1 contains class=Point name=Unnamed dimension=2 values=[1.5,0]? false levelSet2=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] level=1 levelSet2 contains class=Point name=Unnamed dimension=2 values=[-0.5,-0.5]? false levelSet2 contains class=Point name=Unnamed dimension=2 values=[0.5,0]? true levelSet2 contains class=Point name=Unnamed dimension=2 values=[1.5,0]? true intersection of class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] level=1 and class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] level=1 equals class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x,y,y0] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[max(x0 - 1, x1 - 1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[max(x0 - 1, x1 - 1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[max(x0 - 1, x1 - 1)] right function=class=FunctionImplementation name=Unnamed description=[x,y,y0,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] gradientImplementation=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] hessianImplementation=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] level=0 intersection contains class=Point name=Unnamed dimension=2 values=[-0.5,-0.5]? false intersection contains class=Point name=Unnamed dimension=2 values=[0.5,0]? true intersection contains class=Point name=Unnamed dimension=2 values=[1.5,0]? false join of class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] level=1 and class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] level=1 equals class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x,y,y0] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[min(x0 - 1, x1 - 1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[min(x0 - 1, x1 - 1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[min(x0 - 1, x1 - 1)] right function=class=FunctionImplementation name=Unnamed description=[x,y,y0,y0] evaluationImplementation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] gradientImplementation=class=AggregatedGradient evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] hessianImplementation=class=AggregatedHessian evaluation=class=AggregatedEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[x^4 + y^4],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[(x-1)^2 + y^2]] level=0 join contains class=Point name=Unnamed dimension=2 values=[-0.5,-0.5]? true join contains class=Point name=Unnamed dimension=2 values=[0.5,0]? true join contains class=Point name=Unnamed dimension=2 values=[1.5,0]? true openturns-1.9/lib/test/t_LinearCombinationEvaluation_std.cxx000066400000000000000000000041001307543307100245110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearCombinationEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // First, build two functions from R^3->R Description inVar(3); inVar[0] = "x1"; inVar[1] = "x2"; inVar[2] = "x3"; Description formula(1); formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)"; LinearCombinationEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the weights Point coefficients(2); coefficients[0] = 0.3; coefficients[1] = 2.9; LinearCombinationEvaluation myEvaluation(functions, coefficients); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myEvaluation=" << myEvaluation << std::endl; fullprint << "Value at " << inPoint << "=" << myEvaluation(inPoint) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearCombinationEvaluation_std.expout000066400000000000000000000033011307543307100252350ustar00rootroot00000000000000myEvaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[0.3,2.9] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Point name=Unnamed dimension=1 values=[22.92] openturns-1.9/lib/test/t_LinearCombinationFunction_std.cxx000066400000000000000000000060571307543307100242040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for linear combinations * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // First, build two functions from R^3->R^3 Description inVar(2); inVar[0] = "x1"; inVar[1] = "x2"; Description formula(3); formula[0] = "x1^3 * sin(x2 + 2.5 * x1) - (x1 + x2)^2 / (1.0 + x2^2)"; formula[1] = "x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2)"; formula[2] = "x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)"; LinearCombinationEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x1) / cos(1.0 + x2 * x2 - x1)"; formula[0] = "exp(-x2 * x1 + x1) / cos(1.0 + x2 * x1 - x2)"; formula[0] = "exp(-x1 * x1 + x2) / cos(1.0 + x1 * x2 - x2)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the weights Point coefficients(2); coefficients[0] = 0.3; coefficients[1] = 2.9; // Third, build the function LinearCombinationFunction myFunction(functions, coefficients); Point inPoint(2); inPoint[0] = 1.2; inPoint[1] = 2.3; std::cout << "myFunction=" << myFunction << std::endl; std::cout << "Value at " << inPoint << "=" << myFunction(inPoint) << std::endl; std::cout << "Gradient at " << inPoint << "=" << myFunction.gradient(inPoint) << std::endl; std::cout << "Hessian at " << inPoint << "=" << myFunction.hessian(inPoint) << std::endl; for (UnsignedInteger i = 0; i < myFunction.getOutputDimension(); ++i) { std::cout << "Marginal " << i << "=" << myFunction.getMarginal(i) << std::endl; } Indices indices(2); indices[0] = 0; indices[1] = 1; std::cout << "Marginal (0,1)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 0; indices[1] = 2; std::cout << "Marginal (0,2)=" << myFunction.getMarginal(indices) << std::endl; indices[0] = 1; indices[1] = 2; std::cout << "Marginal (1,2)=" << myFunction.getMarginal(indices) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearCombinationFunction_std.expout000066400000000000000000000037461307543307100247300ustar00rootroot00000000000000myFunction=(0.3 * ([x1,x2]->[x1^3 * sin(x2 + 2.5 * x1) - (x1 + x2)^2 / (1.0 + x2^2),x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)]) + 2.9 * ([x1,x2]->[exp(-x1 * x1 + x2) / cos(1.0 + x1 * x2 - x2),x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)])) Value at [1.2,2.3]=[60.9648,-48.4694,-2.81213] Gradient at [1.2,2.3]=[[ 1131.92 60.5825 9.33388 ] [ 173.785 -29.862 11.8593 ]] Hessian at [1.2,2.3]=sheet #0 [[ 47396.4 6059.87 ] [ 6059.87 688.309 ]] sheet #1 [[ 200.043 157.8 ] [ 157.8 49.3346 ]] sheet #2 [[ 31.5381 20.194 ] [ 20.194 -21.8682 ]] Marginal 0=(0.3 * ([x1,x2]->[x1^3 * sin(x2 + 2.5 * x1) - (x1 + x2)^2 / (1.0 + x2^2)]) + 2.9 * ([x1,x2]->[exp(-x1 * x1 + x2) / cos(1.0 + x1 * x2 - x2)])) Marginal 1=(0.3 * ([x1,x2]->[x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2)]) + 2.9 * ([x1,x2]->[x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2)])) Marginal 2=(0.3 * ([x1,x2]->[x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)]) + 2.9 * ([x1,x2]->[x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)])) Marginal (0,1)=(0.3 * ([x1,x2]->[x1^3 * sin(x2 + 2.5 * x1) - (x1 + x2)^2 / (1.0 + x2^2),x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2)]) + 2.9 * ([x1,x2]->[exp(-x1 * x1 + x2) / cos(1.0 + x1 * x2 - x2),x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2)])) Marginal (0,2)=(0.3 * ([x1,x2]->[x1^3 * sin(x2 + 2.5 * x1) - (x1 + x2)^2 / (1.0 + x2^2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)]) + 2.9 * ([x1,x2]->[exp(-x1 * x1 + x2) / cos(1.0 + x1 * x2 - x2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)])) Marginal (1,2)=(0.3 * ([x1,x2]->[x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)]) + 2.9 * ([x1,x2]->[x2^3 * sin(x2 + 2.5 * x1) - (x2 + x1)^2 / (1.0 + x1^2),x1^3 * sin(x1 + 2.5 * x2) - (x2 + x1)^2 / (1.0 + x2^2)])) openturns-1.9/lib/test/t_LinearCombinationGradient_std.cxx000066400000000000000000000042131307543307100241440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearCombinationGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // First, build two functions from R^3->R Description inVar(3); inVar[0] = "x1"; inVar[1] = "x2"; inVar[2] = "x3"; Description outVar(1); outVar[0] = "y"; Description formula(1); formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)"; LinearCombinationEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the weights Point coefficients(2); coefficients[0] = 0.3; coefficients[1] = 2.9; LinearCombinationGradient myGradient(LinearCombinationEvaluation(functions, coefficients)); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myGradient=" << myGradient << std::endl; fullprint << "Value at " << inPoint << "=" << myGradient.gradient(inPoint) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearCombinationGradient_std.expout000066400000000000000000000034541307543307100246740ustar00rootroot00000000000000myGradient=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[0.3,2.9] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[-155.52,309.646,252.531] openturns-1.9/lib/test/t_LinearCombinationHessian_std.cxx000066400000000000000000000044201307543307100240010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearCombinationHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { PlatformInfo::SetNumericalPrecision(4); // First, build two functions from R^3->R Description inVar(3); inVar[0] = "x1"; inVar[1] = "x2"; inVar[2] = "x3"; Description formula(1); formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)"; LinearCombinationEvaluation::FunctionCollection functions(2); functions[0] = SymbolicFunction(inVar, formula); formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)"; functions[1] = SymbolicFunction(inVar, formula); // Second, build the weights Point coefficients(2); coefficients[0] = 0.3; coefficients[1] = 2.9; LinearCombinationHessian myHessian(LinearCombinationEvaluation(functions, coefficients)); Point inPoint(3); inPoint[0] = 1.2; inPoint[1] = 2.3; inPoint[2] = 3.4; fullprint << "myHessian=" << myHessian << std::endl; // Reduce the ouput precision because we use finite difference so only 5 digits are significant PlatformInfo::SetNumericalPrecision(5); fullprint << "Value at " << inPoint << "=" << myHessian.hessian(inPoint) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearCombinationHessian_std.expout000066400000000000000000000035451307543307100245320ustar00rootroot00000000000000myHessian=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3] outputVariablesNames=[y0] formulas=[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] coefficients=class=Point name=Unnamed dimension=2 values=[0.3,2.9] Value at class=Point name=Unnamed dimension=3 values=[1.2,2.3,3.4]=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[1440,-3537.4,-2656.4,-3537.4,9150.6,6852.2,-2656.4,6852.2,5027.8] openturns-1.9/lib/test/t_LinearEnumerateFunction_std.cxx000066400000000000000000000032521307543307100236610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearEnumerateFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger size = 10; for (UnsignedInteger dimension = 1; dimension < 4; ++dimension) { LinearEnumerateFunction f(dimension); fullprint << "First " << size << " values for dimension " << dimension << std::endl; for (UnsignedInteger index = 0; index < size; ++index) { Indices multiIndex(f(index)); fullprint << "index=" << index << ", multi-index=" << multiIndex << ", linear index=" << f.inverse(multiIndex) << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearEnumerateFunction_std.expout000066400000000000000000000025521307543307100244050ustar00rootroot00000000000000First 10 values for dimension 1 index=0, multi-index=[0], linear index=0 index=1, multi-index=[1], linear index=1 index=2, multi-index=[2], linear index=2 index=3, multi-index=[3], linear index=3 index=4, multi-index=[4], linear index=4 index=5, multi-index=[5], linear index=5 index=6, multi-index=[6], linear index=6 index=7, multi-index=[7], linear index=7 index=8, multi-index=[8], linear index=8 index=9, multi-index=[9], linear index=9 First 10 values for dimension 2 index=0, multi-index=[0,0], linear index=0 index=1, multi-index=[1,0], linear index=1 index=2, multi-index=[0,1], linear index=2 index=3, multi-index=[2,0], linear index=3 index=4, multi-index=[1,1], linear index=4 index=5, multi-index=[0,2], linear index=5 index=6, multi-index=[3,0], linear index=6 index=7, multi-index=[2,1], linear index=7 index=8, multi-index=[1,2], linear index=8 index=9, multi-index=[0,3], linear index=9 First 10 values for dimension 3 index=0, multi-index=[0,0,0], linear index=0 index=1, multi-index=[1,0,0], linear index=1 index=2, multi-index=[0,1,0], linear index=2 index=3, multi-index=[0,0,1], linear index=3 index=4, multi-index=[2,0,0], linear index=4 index=5, multi-index=[1,1,0], linear index=5 index=6, multi-index=[1,0,1], linear index=6 index=7, multi-index=[0,2,0], linear index=7 index=8, multi-index=[0,1,1], linear index=8 index=9, multi-index=[0,0,2], linear index=9 openturns-1.9/lib/test/t_LinearEvaluation_std.cxx000066400000000000000000000041021307543307100223300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Center Point center(inputDimension); center[0] = -1; center[1] = 0.5; center[2] = 1; // Constant term Point constant(outputDimension); constant[0] = -1.0; constant[1] = 2.0; // Linear term Matrix linear(inputDimension, outputDimension); linear(0, 0) = 1.0; linear(1, 0) = 2.0; linear(2, 0) = 3.0; linear(0, 1) = 4.0; linear(1, 1) = 5.0; linear(2, 1) = 6.0; LinearEvaluation myFunction(center, constant, linear); myFunction.setName("linearFunction"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearEvaluation_std.expout000066400000000000000000000006401307543307100230550ustar00rootroot00000000000000myFunction=class=LinearEvaluation name=linearFunction center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] linearFunction( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[46,119.5] openturns-1.9/lib/test/t_LinearFunction_std.cxx000066400000000000000000000044411307543307100220140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearFunctionImplementation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Center Point center(inputDimension); center[0] = -1; center[1] = 0.5; center[2] = 1; // Constant term Point constant(outputDimension); constant[0] = -1.0; constant[1] = 2.0; // Linear term Matrix linear(outputDimension, inputDimension); linear(0, 0) = 1.0; linear(1, 0) = 2.0; linear(0, 1) = 3.0; linear(1, 1) = 4.0; linear(0, 2) = 5.0; linear(1, 2) = 6.0; LinearFunction myFunction(center, constant, linear); myFunction.setName("linearFunction"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << myFunction(inPoint) << std::endl; fullprint << myFunction.getName() << ".gradient( " << inPoint << " ) = " << myFunction.gradient(inPoint) << std::endl; fullprint << myFunction.getName() << ".hessian( " << inPoint << " ) = " << myFunction.hessian(inPoint) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearFunction_std.expout000066400000000000000000000025321307543307100225350ustar00rootroot00000000000000myFunction=class=LinearFunction name=linearFunction implementation=class=FunctionImplementation name=linearFunction description=[x0,x1,x2,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] linearFunction( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[69.5,96] linearFunction.gradient( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] linearFunction.hessian( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] openturns-1.9/lib/test/t_LinearGradient_std.cxx000066400000000000000000000050741307543307100217670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Center Point center(inputDimension); center[0] = -1.0; center[1] = 0.5; center[2] = 1.0; // Constant term Matrix constant(inputDimension, outputDimension); constant(0, 0) = 1.0; constant(1, 0) = 2.0; constant(2, 0) = 5.0; constant(0, 1) = 7.0; constant(1, 1) = 9.0; constant(2, 1) = 3.0; // Linear term SymmetricTensor linear(inputDimension, outputDimension); linear(0, 0, 0) = 7.0; linear(0, 0, 1) = -7.0; linear(0, 1, 0) = 8.0; linear(0, 1, 1) = -8.0; linear(0, 2, 0) = 9.0; linear(0, 2, 1) = -9.0; linear(1, 0, 0) = 8.0; linear(1, 0, 1) = -8.0; linear(1, 1, 0) = 10.0; linear(1, 1, 1) = -10.0; linear(1, 2, 0) = 11.0; linear(1, 2, 1) = -11.0; linear(2, 0, 0) = 9.0; linear(2, 0, 1) = -9.0; linear(2, 1, 0) = 11.0; linear(2, 1, 1) = -11.0; linear(2, 2, 0) = 12.0; linear(2, 2, 1) = -12.0; LinearGradient myGradient(center, constant, linear); myGradient.setName("linearGradient"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; Matrix outMatrix = myGradient.gradient( inPoint ); fullprint << "myGradient=" << myGradient << std::endl; fullprint << myGradient.getName() << "( " << inPoint << " ) = " << outMatrix << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearGradient_std.expout000066400000000000000000000011211307543307100224760ustar00rootroot00000000000000myGradient=class=LinearGradient name=linearGradient center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] linearGradient( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[189,229,255.5,-181,-218,-247.5] openturns-1.9/lib/test/t_LinearLeastSquares_std.cxx000066400000000000000000000061441307543307100226450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearLeastSquares for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); Sample data(9, myFunc.getInputDimension()); Point point(myFunc.getInputDimension()); point[0] = 0.5; point[1] = 0.5; data[0] = point; point[0] = -0.5; point[1] = -0.5; data[1] = point; point[0] = -0.5; point[1] = 0.5; data[2] = point; point[0] = 0.5; point[1] = -0.5; data[3] = point; point[0] = 0.5; point[1] = 0.5; data[4] = point; point[0] = -0.25; point[1] = -0.25; data[5] = point; point[0] = -0.25; point[1] = 0.25; data[6] = point; point[0] = 0.25; point[1] = -0.25; data[7] = point; point[0] = 0.25; point[1] = 0.25; data[8] = point; { LinearLeastSquares myLeastSquares(data, myFunc); myLeastSquares.run(); Function responseSurface(myLeastSquares.getResponseSurface()); fullprint << "myLeastSquares=" << myLeastSquares << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; Point in(myFunc.getInputDimension(), 0.1); fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } { Sample dataOut(myFunc(data)); LinearLeastSquares myLeastSquares(data, dataOut); myLeastSquares.run(); Function responseSurface(myLeastSquares.getResponseSurface()); fullprint << "myLeastSquares=" << myLeastSquares << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; Point in(myFunc.getInputDimension(), 0.1); fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearLeastSquares_std.expout000066400000000000000000000155211307543307100233660ustar00rootroot00000000000000myLeastSquares=class=LinearLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5],[-0.25,-0.25],[-0.25,0.25],[0.25,-0.25],[0.25,0.25]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[y0,y1,y2] data=[[0.239713,0.540302,0.909796],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796],[0.061851,0.877583,0.963019],[-0.061851,1,0.590458],[-0.061851,1,1.58775],[0.061851,0.877583,0.973501]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc(class=Point name=Unnamed dimension=2 values=[0.1,0.1])=class=Point name=Unnamed dimension=3 values=[0.00998334,0.980067,0.995321] responseSurface(class=Point name=Unnamed dimension=2 values=[0.1,0.1])=class=Point name=Unnamed dimension=3 values=[0.0322237,0.812239,1.03617] myLeastSquares=class=LinearLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5],[-0.25,-0.25],[-0.25,0.25],[0.25,-0.25],[0.25,0.25]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[y0,y1,y2] data=[[0.239713,0.540302,0.909796],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796],[0.061851,0.877583,0.963019],[-0.061851,1,0.590458],[-0.061851,1,1.58775],[0.061851,0.877583,0.973501]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc(class=Point name=Unnamed dimension=2 values=[0.1,0.1])=class=Point name=Unnamed dimension=3 values=[0.00998334,0.980067,0.995321] responseSurface(class=Point name=Unnamed dimension=2 values=[0.1,0.1])=class=Point name=Unnamed dimension=3 values=[0.0322237,0.812239,1.03617] openturns-1.9/lib/test/t_LinearModelFactory_std.cxx000066400000000000000000000030451307543307100226160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearModelFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); /* Default constructor */ LinearModelFactory lmfact; /* lm build */ UnsignedInteger size = 20; Sample oneSample(size, 1); Sample twoSample(size, 1); for (UnsignedInteger i = 0; i < size; ++i) { oneSample[i][0] = 7.0 * sin(-3.5 + (6.5 * i) / (size - 1.0)) + 2.0; twoSample[i][0] = -2.0 * oneSample[i][0] + 3.0 + 0.05 * sin(oneSample[i][0]); } LinearModel test = lmfact.build(oneSample, twoSample); fullprint << "test = " << test << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_LinearModelFactory_std.expout000066400000000000000000000006261307543307100233420ustar00rootroot00000000000000test = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=2 values=[3.01168,-2.00025] confidence intervals=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[2.99572,-2.0033] upper bound=class=Point name=Unnamed dimension=2 values=[3.02763,-1.9972] finite lower bound=[1,1] finite upper bound=[1,1] p-Values=[2.07338e-35,3.81897e-45] openturns-1.9/lib/test/t_LinearModelTest_std.cxx000066400000000000000000000043671307543307100221360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); UnsignedInteger size = 100; UnsignedInteger dim = 10; CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = (i + j + 1.0) / (2.0 * dim); } } Point mean(dim, 2.0); Point sigma(dim, 3.0); Normal distribution(mean, sigma, R); Sample sample(distribution.getSample(size)); Sample sampleX(size, dim - 1); Sample sampleY(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleY[i][0] = sample[i][0]; for (UnsignedInteger j = 1; j < dim; j++) { sampleX[i][j - 1] = sample[i][j]; } } Sample sampleZ(size, 1); for (UnsignedInteger i = 0; i < size; i++) { sampleZ[i][0] = sampleY[i][0] * sampleY[i][0]; } fullprint << "LinearModelAdjustedRSquared=" << LinearModelTest::LinearModelAdjustedRSquared(sampleY, sampleZ) << std::endl; fullprint << "LinearModelFisher=" << LinearModelTest::LinearModelFisher(sampleY, sampleZ) << std::endl; fullprint << "LinearModelResidualMean=" << LinearModelTest::LinearModelResidualMean(sampleY, sampleZ) << std::endl; fullprint << "LinearModelRSquared=" << LinearModelTest::LinearModelRSquared(sampleY, sampleZ) << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_LinearModelTest_std.expout000066400000000000000000000011151307543307100226440ustar00rootroot00000000000000LinearModelAdjustedRSquared=class=TestResult name=Unnamed type=AdjustedRSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.251488 description=[] LinearModelFisher=class=TestResult name=Unnamed type=Fisher binaryQualityMeasure=false p-value threshold=0.05 p-value=1 description=[] LinearModelResidualMean=class=TestResult name=Unnamed type=ResidualMean binaryQualityMeasure=true p-value threshold=0.05 p-value=1 description=[] LinearModelRSquared=class=TestResult name=Unnamed type=RSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.259049 description=[] openturns-1.9/lib/test/t_LinearModel_std.cxx000066400000000000000000000054641307543307100212750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); /** TEST NUMBER ZERO : DEFAULT & COPY CONSTRUCTORs AND STRING CONVERTER */ fullprint << "test number zero : default & copy constructors and string converter" << std::endl; Point vectR(1, 12.0); Sample testSample(1, 1); Scalar begin = -1.0; Scalar end = 36.92; Interval testInterval(Point(1, begin), Point(1, end)); testInterval.setName("testInterval"); OT::Collection valColl; valColl.add(1.0); /* Default constructor */ LinearModel LM(vectR, testInterval, valColl); LinearModel LMcopy(LM); /* Constructor from Point */ LinearModel emptyLM(vectR); /* String converter */ fullprint << "LM = " << LM << std::endl; fullprint << "LMcopy = " << LMcopy << std::endl; fullprint << "emptyLM = " << emptyLM << std::endl; /** TEST NUMBER ONE : GET ELEMENTS */ fullprint << "test number one : get elements" << std::endl; fullprint << "LM.getRegression = " << LM.getRegression() << std::endl; fullprint << "LM.getConfidenceIntervals = " << LM.getConfidenceIntervals() << std::endl; fullprint << "LM.getPValues = " << LM.getPValues() << std::endl; /** TEST NUMBER TWO : GET PREDICT/RESIDUAL */ fullprint << "test number two : get predicted/residual" << std::endl; LinearModelFactory lmfact; UnsignedInteger size = 20; Sample oneSample(size, 1); Sample twoSample(size, 1); for (UnsignedInteger i = 0; i < size; ++i) { oneSample[i][0] = 7.0 * sin(-3.5 + (6.5 * i) / (size - 1.0)) + 2.0; twoSample[i][0] = -2.0 * oneSample[i][0] + 3.0 + 0.05 * sin(oneSample[i][0]); } LinearModel test(lmfact.build(oneSample, twoSample)); fullprint << "LM.getPredicted = " << test.getPredicted(oneSample) << std::endl; fullprint << "LM.getResidual = " << test.getResidual(oneSample, twoSample) << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_LinearModel_std.expout000066400000000000000000000042541307543307100220130ustar00rootroot00000000000000test number zero : default & copy constructors and string converter LM = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=1 values=[12] confidence intervals=class=Interval name=testInterval dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[36.92] finite lower bound=[1] finite upper bound=[1] p-Values=[1] LMcopy = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=1 values=[12] confidence intervals=class=Interval name=testInterval dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[36.92] finite lower bound=[1] finite upper bound=[1] p-Values=[1] emptyLM = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=1 values=[12] confidence intervals=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[12] upper bound=class=Point name=Unnamed dimension=1 values=[12] finite lower bound=[1] finite upper bound=[1] p-Values=[0] test number one : get elements LM.getRegression = class=Point name=Unnamed dimension=1 values=[12] LM.getConfidenceIntervals = class=Interval name=testInterval dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[36.92] finite lower bound=[1] finite upper bound=[1] LM.getPValues = [1] test number two : get predicted/residual LM.getPredicted = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=1 data=[[-5.90042],[-1.21708],[3.49272],[7.6831],[10.8684],[12.6795],[12.9064],[11.5229],[8.68929],[4.734],[0.115426],[-4.63113],[-8.95554],[-12.3566],[-14.4402],[-14.9647],[-13.8695],[-11.2814],[-7.50044],[-2.96476]] LM.getResidual = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=1 data=[[-0.0589069],[0.0316584],[-0.0236475],[-0.0483521],[0.0227129],[0.0367317],[0.0357011],[0.0321055],[-0.0273235],[-0.0498224],[0.0383126],[-0.0421222],[-0.0249526],[0.039543],[0.0227439],[0.0117943],[0.0321329],[0.0281066],[-0.0531531],[-0.00326265]] openturns-1.9/lib/test/t_LinearTaylor_std.cxx000066400000000000000000000045101307543307100214760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearTaylor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar eps = 0.2; /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description output(3); output[0] = "f1"; output[1] = "f2"; output[2] = "f3"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; Function myFunc(input, output, formula); Point center(myFunc.getInputDimension()); for(UnsignedInteger i = 0; i < center.getDimension(); i++) { center[i] = 1.0 + i; } LinearTaylor myTaylor(center, myFunc); myTaylor.run(); Function responseSurface(myTaylor.getResponseSurface()); fullprint << "myTaylor=" << myTaylor << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; fullprint << "myFunc(" << center << ")=" << myFunc(center) << std::endl; fullprint << "responseSurface(" << center << ")=" << responseSurface(center) << std::endl; Point in(center); in[0] += eps; in[1] -= eps / 2; fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LinearTaylor_std.expout000066400000000000000000000065631307543307100222320ustar00rootroot00000000000000myTaylor=class=LinearTaylor name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc(class=Point name=Unnamed dimension=2 values=[1,2])=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] responseSurface(class=Point name=Unnamed dimension=2 values=[1,2])=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] myFunc(class=Point name=Unnamed dimension=2 values=[1.2,1.9])=class=Point name=Unnamed dimension=3 values=[1.13556,-0.999135,0.215393] responseSurface(class=Point name=Unnamed dimension=2 values=[1.2,1.9])=class=Point name=Unnamed dimension=3 values=[1.13277,-1.0041,0.204127] openturns-1.9/lib/test/t_LogNormalFactory_std.cxx000066400000000000000000000047771307543307100223320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LogNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { LogNormal distribution(1.5, 2.5, -1.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); LogNormalFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; LogNormal estimatedLogNormal(factory.buildAsLogNormal(sample)); fullprint << "LogNormal =" << distribution << std::endl; fullprint << "Estimated logNormal=" << estimatedLogNormal << std::endl; estimatedLogNormal = factory.buildAsLogNormal(); fullprint << "Default logNormal=" << estimatedLogNormal << std::endl; estimatedLogNormal = factory.buildAsLogNormal(distribution.getParameter()); fullprint << "LogNormal from parameters=" << estimatedLogNormal << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LogNormalFactory_std.expout000066400000000000000000000014461307543307100230420ustar00rootroot00000000000000Distribution =class=LogNormal name=LogNormal dimension=1 muLog=1.5 sigmaLog=2.5 gamma=-1.5 Estimated distribution=class=LogNormal name=LogNormal dimension=1 muLog=1.46531 sigmaLog=2.50364 gamma=-1.49972 Default distribution=class=LogNormal name=LogNormal dimension=1 muLog=0 sigmaLog=1 gamma=0 Distribution from parameters=class=LogNormal name=LogNormal dimension=1 muLog=1.5 sigmaLog=2.5 gamma=-1.5 LogNormal =class=LogNormal name=LogNormal dimension=1 muLog=1.5 sigmaLog=2.5 gamma=-1.5 Estimated logNormal=class=LogNormal name=LogNormal dimension=1 muLog=1.46531 sigmaLog=2.50364 gamma=-1.49972 Default logNormal=class=LogNormal name=LogNormal dimension=1 muLog=0 sigmaLog=1 gamma=0 LogNormal from parameters=class=LogNormal name=LogNormal dimension=1 muLog=1.5 sigmaLog=2.5 gamma=-1.5 openturns-1.9/lib/test/t_LogNormal_std.cxx000066400000000000000000000220201307543307100207570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LogNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public LogNormal { public: TestObject() : LogNormal(-1.0, 1.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object LogNormal distribution(-1.0, 1.5, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { RandomGenerator::SetSeed(1); fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (LogNormal(distribution.getMuLog() + eps, distribution.getSigmaLog(), distribution.getGamma()).computePDF(point) - LogNormal(distribution.getMuLog() - eps, distribution.getSigmaLog(), distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog() + eps, distribution.getGamma()).computePDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() + eps).computePDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (LogNormal(distribution.getMuLog() + eps, distribution.getSigmaLog(), distribution.getGamma()).computeCDF(point) - LogNormal(distribution.getMuLog() - eps, distribution.getSigmaLog(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog() + eps, distribution.getGamma()).computeCDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() + eps).computeCDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; LogNormal::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LogNormal_std.expout000066400000000000000000000121721307543307100215100ustar00rootroot00000000000000Testing class LogNormal checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=LogNormal name=LogNormal dimension=1 muLog=-1 sigmaLog=1.5 gamma=-0.5 streamObject(const T & anObject) class=LogNormal name=LogNormal dimension=1 muLog=-1 sigmaLog=1.5 gamma=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=LogNormal name=LogNormal dimension=1 muLog=-1 sigmaLog=1.5 gamma=-0.5 Distribution LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.416038] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.444936] last=class=Point name=Unnamed dimension=1 values=[3.12047] mean=class=Point name=Unnamed dimension=1 values=[0.609446] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[8.23002] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.12381] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.12381] log pdf=-2.16883 pdf =0.114311 pdf (FD)=0.114311 cdf=0.825615 ccdf=0.174385 survival=0.174385 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.468798] Survival(inverse survival)=0.95 characteristic function=(0.740877,-0.0157786) log characteristic function=(-0.299694,-0.021294) pdf gradient =class=Point name=Unnamed dimension=3 values=[0.0714046,-0.00930299,0.12381] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.0714046,-0.00930299,0.12381] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.171467,-0.16066,-0.114311] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.171467,-0.16066,-0.114311] quantile=class=Point name=Unnamed dimension=1 values=[3.83742] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.499653] upper bound=class=Point name=Unnamed dimension=1 values=[3.83753] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5)) level=4.14451 beta=0.0158512 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.480551] upper bound=class=Point name=Unnamed dimension=1 values=[6.45838] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[3.83742] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.468798] upper bound=class=Point name=Unnamed dimension=1 values=[35451.8] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.633148] standard deviation=class=Point name=Unnamed dimension=1 values=[3.30128] skewness=class=Point name=Unnamed dimension=1 values=[33.468] kurtosis=class=Point name=Unnamed dimension=1 values=[10078.3] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10.8985] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[muLog : -1, sigmaLog : 1.5, gamma : -0.5]] parameters=[[muLog : -1, sigmaLog : 1.5, gamma : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.13315] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[12.1825] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1242.65] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[1.2026e+06] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1.10423e+10] Standard representative=LogNormal(muLog = -1, sigmaLog = 1.5, gamma = 0) openturns-1.9/lib/test/t_LogUniformFactory_std.cxx000066400000000000000000000053311307543307100225040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LogUniform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { LogUniform distribution(1.0, 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); LogUniformFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; LogUniform estimatedLogUniform(factory.buildAsLogUniform(sample)); fullprint << "LogUniform =" << distribution << std::endl; fullprint << "Estimated logUniform=" << estimatedLogUniform << std::endl; estimatedLogUniform = factory.buildAsLogUniform(); fullprint << "Default logUniform=" << estimatedLogUniform << std::endl; estimatedLogUniform = factory.buildAsLogUniform(distribution.getParameter()); fullprint << "LogUniform from parameters=" << estimatedLogUniform << std::endl; // Test for constant sample sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LogUniformFactory_std.expout000066400000000000000000000017131307543307100232260ustar00rootroot00000000000000Distribution =class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=2.5 a=2.71828 b=12.1825 Estimated distribution=class=LogUniform name=LogUniform dimension=1 aLog=1.00014 bLog=2.49994 a=2.71868 b=12.1818 Default distribution=class=LogUniform name=LogUniform dimension=1 aLog=-1 bLog=1 a=0.367879 b=2.71828 Distribution from parameters=class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=2.5 a=2.71828 b=12.1825 LogUniform =class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=2.5 a=2.71828 b=12.1825 Estimated logUniform=class=LogUniform name=LogUniform dimension=1 aLog=1.00014 bLog=2.49994 a=2.71868 b=12.1818 Default logUniform=class=LogUniform name=LogUniform dimension=1 aLog=-1 bLog=1 a=0.367879 b=2.71828 LogUniform from parameters=class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=2.5 a=2.71828 b=12.1825 Estimated distribution=class=LogUniform name=LogUniform dimension=1 aLog=-9.9985e-05 bLog=9.9975e-05 a=0.9999 b=1.0001 openturns-1.9/lib/test/t_LogUniform_std.cxx000066400000000000000000000202301307543307100211470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LogUniform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public LogUniform { public: TestObject() : LogUniform(-0.5, 1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object LogUniform distribution(-0.5, 1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (LogUniform(distribution.getALog() + eps, distribution.getBLog()).computePDF(point) - LogUniform(distribution.getALog() - eps, distribution.getBLog()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (LogUniform(distribution.getALog(), distribution.getBLog() + eps).computePDF(point) - LogUniform(distribution.getALog(), distribution.getBLog() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (LogUniform(distribution.getALog() + eps, distribution.getBLog()).computeCDF(point) - LogUniform(distribution.getALog() - eps, distribution.getBLog()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (LogUniform(distribution.getALog(), distribution.getBLog() + eps).computeCDF(point) - LogUniform(distribution.getALog(), distribution.getBLog() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; LogUniform::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LogUniform_std.expout000066400000000000000000000116131307543307100216760ustar00rootroot00000000000000Testing class LogUniform checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 streamObject(const T & anObject) class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 Distribution LogUniform(aLog = -0.5, bLog = 1.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.13775] oneSample first=class=Point name=Unnamed dimension=1 values=[3.54526] last=class=Point name=Unnamed dimension=1 values=[1.41828] mean=class=Point name=Unnamed dimension=1 values=[1.95442] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20332] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.5] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.5] log pdf=-0.693147 pdf =0.5 pdf (FD)=0.5 cdf=0.25 ccdf=0.75 survival=0.75 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.67032] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[0.25,-0.25] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.25,-0.25] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.375,-0.125] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.375,-0.125] characteristic function=(-0.0896196,0.531924) log characteristic function=(-0.61726,1.73771) quantile=class=Point name=Unnamed dimension=1 values=[4.0552] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.606531] upper bound=class=Point name=Unnamed dimension=1 values=[4.0552] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(LogUniform(aLog = -0.5, bLog = 1.5)) gradientImplementation=MinimumVolumeLevelSetGradient(LogUniform(aLog = -0.5, bLog = 1.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(LogUniform(aLog = -0.5, bLog = 1.5)) level=2.09315 beta=0.123298 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.637628] upper bound=class=Point name=Unnamed dimension=1 values=[4.26311] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.606531] upper bound=class=Point name=Unnamed dimension=1 values=[4.0552] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.67032] upper bound=class=Point name=Unnamed dimension=1 values=[4.48169] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.93758] standard deviation=class=Point name=Unnamed dimension=1 values=[1.08407] skewness=class=Point name=Unnamed dimension=1 values=[0.67539] kurtosis=class=Point name=Unnamed dimension=1 values=[0.623015] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.1752] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[aLog : -0.5, bLog : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.93758] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[4.92941] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[14.9657] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[50.4117] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[180.796] Standard representative=LogUniform(aLog = -0.5, bLog = 1.5) openturns-1.9/lib/test/t_Log_std.cxx000066400000000000000000000047611307543307100176220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Log for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OTtestcode.hxx" #include "openturns/OStream.hxx" #include "openturns/Log.hxx" using namespace OT; using namespace OT::Test; const int N = 100; void* printDebug(void*) { for(int i = 0; i < N; i++) LOGDEBUG(OSS() << "Debug #" << i); return NULL; } void* printInfo(void*) { for(int i = 0; i < N; i++) LOGINFO(OSS() << "Info #" << i); return NULL; } void* printUser(void*) { for(int i = 0; i < N; i++) LOGUSER(OSS() << "User #" << i); return NULL; } void* printWarn(void*) { for(int i = 0; i < N; i++) LOGWARN(OSS() << "Warn #" << i); return NULL; } void* printError(void*) { for(int i = 0; i < N; i++) LOGERROR(OSS() << "Error #" << i); return NULL; } void* printTrace(void*) { for(int i = 0; i < N; i++) LOGTRACE(OSS() << "Trace #" << i); return NULL; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); ExitCodeValue rc = ExitCode::Success; const int nbThreads = 128; pthread_t Threads[nbThreads]; const int nbFunctions = 6; typedef void * (*FUNC) (void *); FUNC Functions[nbFunctions] = { printDebug, printInfo, printUser, printWarn, printError, printTrace }; Log::Show( Log::ALL ); Log::SetFile("Log_check.log"); // Create a thread for messages of every level for (int i = 0; i < nbThreads; ++i) pthread_create( Threads + i, 0, Functions[i % nbFunctions], 0 ); // Wait for threads of messages for (int i = 0; i < nbThreads; ++i) pthread_join( Threads[i], 0 ); // const UnsignedInteger expectedLength = 4 * N; // UnsignedInteger actualLength = Log::GetInstance().getSize(); // if (actualLength != expectedLength) rc = ExitCode::Error; return rc; } openturns-1.9/lib/test/t_Log_std.expout000066400000000000000000000000001307543307100203220ustar00rootroot00000000000000openturns-1.9/lib/test/t_LogisticFactory_std.cxx000066400000000000000000000047471307543307100222120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Logistic for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Logistic distribution(2., 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); LogisticFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Logistic estimatedLogistic(factory.buildAsLogistic(sample)); fullprint << "Logistic =" << distribution << std::endl; fullprint << "Estimated logistic=" << estimatedLogistic << std::endl; estimatedLogistic = factory.buildAsLogistic(); fullprint << "Default logistic=" << estimatedLogistic << std::endl; estimatedLogistic = factory.buildAsLogistic(distribution.getParameter()); fullprint << "Logistic from parameters=" << estimatedLogistic << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LogisticFactory_std.expout000066400000000000000000000012201307543307100227130ustar00rootroot00000000000000Distribution =class=Logistic name=Logistic dimension=1 alpha=2 beta=2.5 Estimated distribution=class=Logistic name=Logistic dimension=1 alpha=2.04612 beta=2.51522 Default distribution=class=Logistic name=Logistic dimension=1 alpha=0 beta=1 Distribution from parameters=class=Logistic name=Logistic dimension=1 alpha=2 beta=2.5 Logistic =class=Logistic name=Logistic dimension=1 alpha=2 beta=2.5 Estimated logistic=class=Logistic name=Logistic dimension=1 alpha=2.04612 beta=2.51522 Default logistic=class=Logistic name=Logistic dimension=1 alpha=0 beta=1 Logistic from parameters=class=Logistic name=Logistic dimension=1 alpha=2 beta=2.5 openturns-1.9/lib/test/t_Logistic_std.cxx000066400000000000000000000202061307543307100206460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Logistic for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Logistic { public: TestObject() : Logistic(-0.5, 1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Logistic distribution(-0.5, 1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Logistic(distribution.getAlpha() + eps, distribution.getBeta()).computePDF(point) - Logistic(distribution.getAlpha() - eps, distribution.getBeta()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Logistic(distribution.getAlpha(), distribution.getBeta() + eps).computePDF(point) - Logistic(distribution.getAlpha(), distribution.getBeta() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Logistic(distribution.getAlpha() + eps, distribution.getBeta()).computeCDF(point) - Logistic(distribution.getAlpha() - eps, distribution.getBeta()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Logistic(distribution.getAlpha(), distribution.getBeta() + eps).computeCDF(point) - Logistic(distribution.getAlpha(), distribution.getBeta() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Logistic::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Logistic_std.expout000066400000000000000000000115341307543307100213740ustar00rootroot00000000000000Testing class Logistic checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Logistic name=Logistic dimension=1 alpha=-0.5 beta=1.5 streamObject(const T & anObject) class=Logistic name=Logistic dimension=1 alpha=-0.5 beta=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Logistic name=Logistic dimension=1 alpha=-0.5 beta=1.5 Distribution Logistic(alpha = -0.5, beta = 1.5) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.297531] oneSample first=class=Point name=Unnamed dimension=1 values=[2.5289] last=class=Point name=Unnamed dimension=1 values=[-0.955127] mean=class=Point name=Unnamed dimension=1 values=[-0.472451] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[7.49258] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.0403812] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0403812] log pdf=-2.03199 pdf =0.131075 pdf (FD)=0.131075 cdf=0.731059 ccdf=0.268941 survival=0.268941 Inverse survival=class=Point name=Unnamed dimension=1 values=[-4.91666] Survival(inverse survival)=0.95 characteristic function=(0.074307,-0.0405941) log characteristic function=(-2.46897,-0.5) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.0403812,-0.0470019] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.0403812,-0.0470019] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.131075,-0.131075] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.131075,-0.131075] quantile=class=Point name=Unnamed dimension=1 values=[3.91666] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-5.99534] upper bound=class=Point name=Unnamed dimension=1 values=[4.99534] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Logistic(alpha = -0.5, beta = 1.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Logistic(alpha = -0.5, beta = 1.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Logistic(alpha = -0.5, beta = 1.5)) level=4.11966 beta=0.01625 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-5.99534] upper bound=class=Point name=Unnamed dimension=1 values=[4.99534] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-48.8543] upper bound=class=Point name=Unnamed dimension=1 values=[3.91666] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-4.91666] upper bound=class=Point name=Unnamed dimension=1 values=[47.8543] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[-0.5] standard deviation=class=Point name=Unnamed dimension=1 values=[2.7207] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[4.2] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[7.4022] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[alpha : -0.5, beta : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[3.28987] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[45.4576] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Logistic(alpha = 0, beta = 1) openturns-1.9/lib/test/t_LowDiscrepancyExperiment_std.cxx000066400000000000000000000054021307543307100240610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LowDiscrepancyExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Normal distribution(4); distribution.setMean(Point(4, 5.0)); UnsignedInteger size = 10; LowDiscrepancyExperiment myPlane(HaltonSequence(), distribution, size); fullprint << "myPlane = " << myPlane << std::endl; // Test sampling with weights Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; // Test sampling with reinitialization each time the distribution is // set (default behaviour) // sample 2 != sample fullprint << "sample 2=" << myPlane.generate() << std::endl; myPlane.setDistribution(distribution); // sample 3 == sample fullprint << "sample 3=" << myPlane.generate() << std::endl; // Test sampling without reinitialization excepted when distribution // dimension changes myPlane = LowDiscrepancyExperiment(HaltonSequence(), distribution, size, false); fullprint << "sample =" << myPlane.generate() << std::endl; // sample 2 != sample fullprint << "sample 2=" << myPlane.generate() << std::endl; myPlane.setDistribution(distribution); // sample 3 != sample && sample 3 != sample 2 fullprint << "sample 3=" << myPlane.generate() << std::endl; // Test dimension change myPlane.setDistribution(Normal()); fullprint << "sample =" << myPlane.generate() << std::endl; // Test constructor with no distribution and dimension>1 myPlane = LowDiscrepancyExperiment(HaltonSequence(2), size); fullprint << "sample = " << myPlane.generate() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_LowDiscrepancyExperiment_std.expout000066400000000000000000000077571307543307100246220ustar00rootroot00000000000000myPlane = class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=HaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=4 base=[2,3,5,7] seed=1 distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[5,5,5,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 restart=true sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] sample 2=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.88715,5.53508,4.41716,5.23227],[4.11285,3.95559,4.94985,5.62707],[5.48878,4.95356,5.4677,6.16283],[4.84269,5.89578,6.17499,3.25871],[6.53412,4.35437,3.82501,4.09855],[3.13727,5.23422,4.5323,4.55049],[5.07841,6.4461,5.05015,4.92319],[4.42087,3.5539,5.58284,5.28517],[5.77642,4.76578,6.40507,5.69063],[3.99001,5.64563,4.00554,6.27001]] sample 3=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] sample 2=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.88715,5.53508,4.41716,5.23227],[4.11285,3.95559,4.94985,5.62707],[5.48878,4.95356,5.4677,6.16283],[4.84269,5.89578,6.17499,3.25871],[6.53412,4.35437,3.82501,4.09855],[3.13727,5.23422,4.5323,4.55049],[5.07841,6.4461,5.05015,4.92319],[4.42087,3.5539,5.58284,5.28517],[5.77642,4.76578,6.40507,5.69063],[3.99001,5.64563,4.00554,6.27001]] sample 3=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.40225,4.10422,4.64154,3.45542],[4.7628,5.04644,5.15097,4.17287],[6.31801,6.04441,5.7063,4.6064],[3.68199,4.46492,6.75069,4.97442],[5.2372,5.33087,2.59108,5.33889],[4.59775,6.78616,4.18662,5.75712],[6.00999,2.7538,4.76731,6.39417],[4.22358,4.60299,5.27411,3.60583],[5.57913,5.46494,5.87055,4.24288],[4.92159,3.84212,3.33544,4.66111]] sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[X0] data=[[0],[-0.67449],[0.67449],[-1.15035],[0.318639],[-0.318639],[1.15035],[-1.53412],[0.157311],[-0.488776]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 description=[X0,X1] data=[[0,-0.333333],[-0.5,0.333333],[0.5,-0.777778],[-0.75,-0.111111],[0.25,0.555556],[-0.25,-0.555556],[0.75,0.111111],[-0.875,0.777778],[0.125,-0.925926],[-0.375,-0.259259]] openturns-1.9/lib/test/t_MarginalDistribution_std.cxx000066400000000000000000000155731307543307100232360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MarginalDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::Set("Distribution-Parallel", "0"); try { // Test basic functionnalities //checkClassWithClassName(); UnsignedInteger dimension = 5; Indices indices; indices.add(2); indices.add(0); indices.add(1); Normal fullDistribution(dimension); MarginalDistribution distribution(fullDistribution, indices); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; //RandomGenerator::SetSeed(0); if (distribution.getDimension() == 1) { size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MarginalDistribution_std.expout000066400000000000000000000070021307543307100237440ustar00rootroot00000000000000Distribution class=MarginalDistribution name=MarginalDistribution dimension=3 distribution=class=Normal name=Normal dimension=5 mean=class=Point name=Unnamed dimension=5 values=[0,0,0,0,0] sigma=class=Point name=Unnamed dimension=5 values=[1,1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=5 implementation=class=MatrixImplementation name=Unnamed rows=5 columns=5 values=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1] indices=[2,0,1] Distribution MarginalDistribution(distribution=Normal(mu = [0,0,0,0,0], sigma = [1,1,1,1,1], R = 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]]), indices=[2,0,1]) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=3 values=[-0.438266,0.608202,-1.26617] oneSample first=class=Point name=Unnamed dimension=3 values=[1.43725,0.350042,-0.355007] last=class=Point name=Unnamed dimension=3 values=[0.859992,-2.2281,0.884963] mean=class=Point name=Unnamed dimension=3 values=[-0.000164216,0.00955544,0.000744822] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1.00735,0.0155386,-0.00400052,0.0155386,1.02164,-0.0214975,-0.00400052,-0.0214975,0.997907] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] ddf =class=Point name=Unnamed dimension=3 values=[-8.56912e-29,-8.56912e-29,-8.56912e-29] log pdf=-64.6268 pdf =8.56912e-29 cdf=0.595555 ccdf=0.404445 survival=3.99359e-31 quantile=class=Point name=Unnamed dimension=3 values=[2.1212,2.1212,2.1212] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=3 values=[-0.336086,-0.336086,-0.336086] cdf (tail)=0.95 pdf gradient =class=Point name=Unnamed dimension=10 values=[8.56912e-29,8.56912e-29,8.56912e-29,6.55591e-28,6.55591e-28,0,0,0,4.92999e-27,4.92999e-27] cdf gradient =class=Point name=Unnamed dimension=10 values=[0,0,0,0,0,0,0,0,0,0] mean=class=Point name=Unnamed dimension=3 values=[0,0,0] standard deviation=class=Point name=Unnamed dimension=3 values=[1,1,1] skewness=class=Point name=Unnamed dimension=3 values=[0,0,0] kurtosis=class=Point name=Unnamed dimension=3 values=[3,3,3] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] correlation=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] spearman=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] kendall=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] standard moment n=0, value=class=Point name=Unnamed dimension=3 values=[1,1,1] standard moment n=1, value=class=Point name=Unnamed dimension=3 values=[-7.93531e-68,-7.90057e-68,-7.90057e-68] standard moment n=2, value=class=Point name=Unnamed dimension=3 values=[3.65843e-53,3.65843e-53,3.65843e-53] standard moment n=3, value=class=Point name=Unnamed dimension=3 values=[1.19003e-67,1.23586e-67,1.23586e-67] standard moment n=4, value=class=Point name=Unnamed dimension=3 values=[1.09753e-52,1.09753e-52,1.09753e-52] standard moment n=5, value=class=Point name=Unnamed dimension=3 values=[1.77784e-67,1.87415e-67,1.87415e-67] Standard representative=MarginalDistribution(distribution=Normal(mu = [0,0,0,0,0], sigma = [1,1,1,1,1], R = 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]]), indices=[2,0,1]) openturns-1.9/lib/test/t_MarginalTransformationEvaluation_std.cxx000066400000000000000000000253231307543307100256070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MarginalTransformationEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { MarginalTransformationEvaluation::DistributionCollection coll1(0); coll1.add(Normal(1.0, 2.5)); coll1.add(Gamma(1.5, 3.0, 0.0)); Point pointLow(0); pointLow.add(coll1[0].computeQuantile(0.25)[0]); pointLow.add(coll1[1].computeQuantile(0.25)[0]); Point pointHigh(0); pointHigh.add(coll1[0].computeQuantile(0.75)[0]); pointHigh.add(coll1[1].computeQuantile(0.75)[0]); MarginalTransformationEvaluation::DistributionCollection coll2(0); coll2.add(Gamma(2.5, 2.0, 0.0)); coll2.add(Normal(3.0, 1.5)); // First, check the old constructor { MarginalTransformationEvaluation transformation(coll1); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation(" << pointLow << ")=" << transformation(pointLow) << std::endl; fullprint << "transformation(" << pointHigh << ")=" << transformation(pointHigh) << std::endl; // Validation using finite difference Scalar eps = 1e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradientLow(5, 2); Matrix gradientHigh(5, 2); Point dTdp; { // dT/dp0 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[0] = Normal(1.0 + eps, 2.5); MarginalTransformationEvaluation left(coll); coll[0] = Normal(1.0 - eps, 2.5); MarginalTransformationEvaluation right(coll); dTdp = (left(pointLow) - right(pointLow)) * factor; gradientLow(0, 0) = dTdp[0]; gradientLow(0, 1) = dTdp[1]; dTdp = (left(pointHigh) - right(pointHigh)) * factor; gradientHigh(0, 0) = dTdp[0]; gradientHigh(0, 1) = dTdp[1]; } { // dT/dp1 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[0] = Normal(1.0, 2.5 + eps); MarginalTransformationEvaluation left(coll); coll[0] = Normal(1.0, 2.5 - eps); MarginalTransformationEvaluation right(coll); dTdp = (left(pointLow) - right(pointLow)) * factor; gradientLow(1, 0) = dTdp[0]; gradientLow(1, 1) = dTdp[1]; dTdp = (left(pointHigh) - right(pointHigh)) * factor; gradientHigh(1, 0) = dTdp[0]; gradientHigh(1, 1) = dTdp[1]; } { // dT/dp2 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5 + eps, 3.0, 0.0); MarginalTransformationEvaluation left(coll); coll[1] = Gamma(1.5 - eps, 3.0, 0.0); MarginalTransformationEvaluation right(coll); dTdp = (left(pointLow) - right(pointLow)) * factor; gradientLow(2, 0) = dTdp[0]; gradientLow(2, 1) = dTdp[1]; dTdp = (left(pointHigh) - right(pointHigh)) * factor; gradientHigh(2, 0) = dTdp[0]; gradientHigh(2, 1) = dTdp[1]; } { // dT/dp3 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5, 3.0 + eps, 0.0); MarginalTransformationEvaluation left(coll); coll[1] = Gamma(1.5, 3.0 - eps, 0.0); MarginalTransformationEvaluation right(coll); dTdp = (left(pointLow) - right(pointLow)) * factor; gradientLow(3, 0) = dTdp[0]; gradientLow(3, 1) = dTdp[1]; dTdp = (left(pointHigh) - right(pointHigh)) * factor; gradientHigh(3, 0) = dTdp[0]; gradientHigh(3, 1) = dTdp[1]; } { // dT/dp4 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5, 3.0, 0.0 + eps); MarginalTransformationEvaluation left(coll); coll[1] = Gamma(1.5, 3.0, 0.0 - eps); MarginalTransformationEvaluation right(coll); dTdp = (left(pointLow) - right(pointLow)) * factor; gradientLow(4, 0) = dTdp[0]; gradientLow(4, 1) = dTdp[1]; dTdp = (left(pointHigh) - right(pointHigh)) * factor; gradientHigh(4, 0) = dTdp[0]; gradientHigh(4, 1) = dTdp[1]; } fullprint << "transformation parameters gradient=" << transformation.parameterGradient(pointLow) << std::endl; fullprint << "finite difference parameters gradient=" << gradientLow << std::endl; fullprint << "transformation parameters gradient=" << transformation.parameterGradient(pointHigh) << std::endl; fullprint << "finite difference parameters gradient=" << gradientHigh << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Second, check the constructor for old inverse transformation { MarginalTransformationEvaluation transformation(coll1, MarginalTransformationEvaluation::TO); fullprint << "transformation=" << transformation << std::endl; Point uLow(coll1.getSize(), 0.25); Point uHigh(coll1.getSize(), 0.75); fullprint << "transformation(" << uLow << ")=" << transformation(uLow) << std::endl; fullprint << "transformation(" << uHigh << ")=" << transformation(uHigh) << std::endl; // Validation using finite difference Scalar eps = 1e-5; Scalar factor = 1.0 / (2.0 * eps); Matrix gradientLow(5, 2); Matrix gradientHigh(5, 2); Point dTdp; { // dT/dp0 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[0] = Normal(1.0 + eps, 2.5); MarginalTransformationEvaluation left(coll, MarginalTransformationEvaluation::TO); coll[0] = Normal(1.0 - eps, 2.5); MarginalTransformationEvaluation right(coll, MarginalTransformationEvaluation::TO); dTdp = (left(uLow) - right(uLow)) * factor; gradientLow(0, 0) = dTdp[0]; gradientLow(0, 1) = dTdp[1]; dTdp = (left(uHigh) - right(uHigh)) * factor; gradientHigh(0, 0) = dTdp[0]; gradientHigh(0, 1) = dTdp[1]; } { // dT/dp1 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[0] = Normal(1.0, 2.5 + eps); MarginalTransformationEvaluation left(coll, MarginalTransformationEvaluation::TO); coll[0] = Normal(1.0, 2.5 - eps); MarginalTransformationEvaluation right(coll, MarginalTransformationEvaluation::TO); dTdp = (left(uLow) - right(uLow)) * factor; gradientLow(1, 0) = dTdp[0]; gradientLow(1, 1) = dTdp[1]; dTdp = (left(uHigh) - right(uHigh)) * factor; gradientHigh(1, 0) = dTdp[0]; gradientHigh(1, 1) = dTdp[1]; } { // dT/dp2 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5 + eps, 3.0, 0.0); MarginalTransformationEvaluation left(coll, MarginalTransformationEvaluation::TO); coll[1] = Gamma(1.5 - eps, 3.0, 0.0); MarginalTransformationEvaluation right(coll, MarginalTransformationEvaluation::TO); dTdp = (left(uLow) - right(uLow)) * factor; gradientLow(2, 0) = dTdp[0]; gradientLow(2, 1) = dTdp[1]; dTdp = (left(uHigh) - right(uHigh)) * factor; gradientHigh(2, 0) = dTdp[0]; gradientHigh(2, 1) = dTdp[1]; } { // dT/dp3 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5, 3.0 + eps, 0.0); MarginalTransformationEvaluation left(coll, MarginalTransformationEvaluation::TO); coll[1] = Gamma(1.5, 3.0 - eps, 0.0); MarginalTransformationEvaluation right(coll, MarginalTransformationEvaluation::TO); dTdp = (left(uLow) - right(uLow)) * factor; gradientLow(3, 0) = dTdp[0]; gradientLow(3, 1) = dTdp[1]; dTdp = (left(uHigh) - right(uHigh)) * factor; gradientHigh(3, 0) = dTdp[0]; gradientHigh(3, 1) = dTdp[1]; } { // dT/dp4 MarginalTransformationEvaluation::DistributionCollection coll(coll1); coll[1] = Gamma(1.5, 3.0, 0.0 + eps); MarginalTransformationEvaluation left(coll, MarginalTransformationEvaluation::TO); coll[1] = Gamma(1.5, 3.0, 0.0 - eps); MarginalTransformationEvaluation right(coll, MarginalTransformationEvaluation::TO); dTdp = (left(uLow) - right(uLow)) * factor; gradientLow(4, 0) = dTdp[0]; gradientLow(4, 1) = dTdp[1]; dTdp = (left(uHigh) - right(uHigh)) * factor; gradientHigh(4, 0) = dTdp[0]; gradientHigh(4, 1) = dTdp[1]; } fullprint << "transformation parameters gradient=" << transformation.parameterGradient(uLow) << std::endl; fullprint << "finite difference parameters gradient=" << gradientLow << std::endl; fullprint << "transformation parameters gradient=" << transformation.parameterGradient(uHigh) << std::endl; fullprint << "finite difference parameters gradient=" << gradientHigh << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Third, check the constructor for the new transformation { MarginalTransformationEvaluation transformation(coll1, coll2); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation(" << pointLow << ")=" << transformation(pointLow) << std::endl; fullprint << "transformation(" << pointHigh << ")=" << transformation(pointHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MarginalTransformationEvaluation_std.expout000066400000000000000000000135331307543307100263310ustar00rootroot00000000000000transformation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Point name=Unnamed dimension=2 values=[0.25,0.25] transformation(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Point name=Unnamed dimension=2 values=[0.75,0.75] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,0.0857348,0,0,0,0,0,-0.326405,0.0968347,-1.43751] finite difference parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,0.0857348,0,0,0,0,0,-0.326405,0.0968347,-1.43751] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,-0.0857348,0,0,0,0,0,-0.269753,0.141962,-0.621984] finite difference parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,-0.0857348,0,0,0,0,0,-0.269753,0.141962,-0.621984] input dimension=2 output dimension=2 transformation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation(class=Point name=Unnamed dimension=2 values=[0.25,0.25])=class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,-0.67449,0,0,0,0,0,0.227063,-0.0673629,1] finite difference parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,-0.67449,0,0,0,0,0,0.227063,-0.0673629,1] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,0.67449,0,0,0,0,0,0.433697,-0.228241,1] finite difference parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,0.67449,0,0,0,0,0,0.433697,-0.228241,1] input dimension=2 output dimension=2 transformation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Point name=Unnamed dimension=2 values=[0.668651,1.98827] transformation(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Point name=Unnamed dimension=2 values=[1.65642,4.01173] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_MarginalTransformationGradient_std.cxx000066400000000000000000000114611307543307100252330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MarginalTransformationGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { MarginalTransformationEvaluation::DistributionCollection coll1(0); coll1.add(Normal(1.0, 2.5)); coll1.add(Gamma(1.5, 3.0)); Point pointLow(0); pointLow.add(coll1[0].computeQuantile(0.25)[0]); pointLow.add(coll1[1].computeQuantile(0.25)[0]); Point pointHigh(0); pointHigh.add(coll1[0].computeQuantile(0.75)[0]); pointHigh.add(coll1[1].computeQuantile(0.75)[0]); MarginalTransformationEvaluation::DistributionCollection coll2(0); coll2.add(Gamma(2.5, 2.0)); coll2.add(Normal(3.0, 1.5)); // First, check the old constructor { MarginalTransformationEvaluation evaluation(coll1); MarginalTransformationGradient transformation(evaluation); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation.gradient(" << pointLow << ")=" << transformation.gradient(pointLow) << std::endl; fullprint << "finite difference gradient(" << pointLow << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(pointLow) << std::endl; fullprint << "transformation.gradient(" << pointHigh << ")=" << transformation.gradient(pointHigh) << std::endl; fullprint << "finite difference gradient(" << pointHigh << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(pointHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Second, check the constructor for old inverse transformation { MarginalTransformationEvaluation evaluation(coll1, MarginalTransformationEvaluation::TO); MarginalTransformationGradient transformation(evaluation); fullprint << "transformation=" << transformation << std::endl; Point uLow(coll1.getSize(), 0.25); Point uHigh(coll1.getSize(), 0.75); fullprint << "transformation.gradient(" << uLow << ")=" << transformation.gradient(uLow) << std::endl; fullprint << "finite difference gradient(" << uLow << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(uLow) << std::endl; fullprint << "transformation.gradient(" << uHigh << ")=" << transformation.gradient(uHigh) << std::endl; fullprint << "finite difference gradient(" << uHigh << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(uHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Third, check the constructor for the new transformation { MarginalTransformationEvaluation evaluation(coll1, coll2); MarginalTransformationGradient transformation(evaluation); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation.gradient(" << pointLow << ")=" << transformation.gradient(pointLow) << std::endl; fullprint << "finite difference gradient(" << pointLow << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(pointLow) << std::endl; fullprint << "transformation.gradient(" << pointHigh << ")=" << transformation.gradient(pointHigh) << std::endl; fullprint << "finite difference gradient(" << pointHigh << ")=" << CenteredFiniteDifferenceGradient(1.0e-5, evaluation.clone()).gradient(pointHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MarginalTransformationGradient_std.expout000066400000000000000000000141661307543307100257620ustar00rootroot00000000000000transformation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,1.43751] finite difference gradient(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,1.43751] transformation.gradient(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,0.621984] finite difference gradient(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,0.621984] input dimension=2 output dimension=2 transformation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient(class=Point name=Unnamed dimension=2 values=[0.25,0.25])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,0.695649] finite difference gradient(class=Point name=Unnamed dimension=2 values=[0.25,0.25])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,0.695649] transformation.gradient(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,1.60776] finite difference gradient(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,1.60776] input dimension=2 output dimension=2 transformation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.208078,0,0,6.78546] finite difference gradient(class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.208078,0,0,6.78546] transformation.gradient(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.3848,0,0,2.93595] finite difference gradient(class=Point name=Unnamed dimension=2 values=[2.68622,0.684724])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.3848,0,0,2.93595] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_MarginalTransformationHessian_std.cxx000066400000000000000000000115371307543307100250740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MarginalTransformationHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { PlatformInfo::SetNumericalPrecision(4); MarginalTransformationEvaluation::DistributionCollection coll1(0); coll1.add(Normal(1.0, 2.5)); coll1.add(Gamma(1.5, 3.0)); Point pointLow(0); pointLow.add(coll1[0].computeQuantile(0.25)[0]); pointLow.add(coll1[1].computeQuantile(0.25)[0]); Point pointHigh(0); pointHigh.add(coll1[0].computeQuantile(0.75)[0]); pointHigh.add(coll1[1].computeQuantile(0.75)[0]); MarginalTransformationEvaluation::DistributionCollection coll2(0); coll2.add(Gamma(2.5, 2.0)); coll2.add(Normal(3.0, 1.5)); // First, check the old constructor { MarginalTransformationEvaluation evaluation(coll1); MarginalTransformationHessian transformation(evaluation); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation.hessian(" << pointLow << ")=" << transformation.hessian(pointLow) << std::endl; fullprint << "finite difference hessian(" << pointLow << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(pointLow) << std::endl; fullprint << "transformation.hessian(" << pointHigh << ")=" << transformation.hessian(pointHigh) << std::endl; fullprint << "finite difference hessian(" << pointHigh << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(pointHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Second, check the constructor for old inverse transformation { MarginalTransformationEvaluation evaluation(coll1, MarginalTransformationEvaluation::TO); MarginalTransformationHessian transformation(evaluation); fullprint << "transformation=" << transformation << std::endl; Point uLow(coll1.getSize(), 0.25); Point uHigh(coll1.getSize(), 0.75); fullprint << "transformation.hessian(" << uLow << ")=" << transformation.hessian(uLow) << std::endl; fullprint << "finite difference hessian(" << uLow << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(uLow) << std::endl; fullprint << "transformation.hessian(" << uHigh << ")=" << transformation.hessian(uHigh) << std::endl; fullprint << "finite difference hessian(" << uHigh << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(uHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } // Third, check the constructor for the new transformation { MarginalTransformationEvaluation evaluation(coll1, coll2); MarginalTransformationHessian transformation(MarginalTransformationEvaluation(coll1, coll2)); fullprint << "transformation=" << transformation << std::endl; fullprint << "transformation.hessian(" << pointLow << ")=" << transformation.hessian(pointLow) << std::endl; fullprint << "finite difference hessian(" << pointLow << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(pointLow) << std::endl; fullprint << "transformation.hessian(" << pointHigh << ")=" << transformation.hessian(pointHigh) << std::endl; fullprint << "finite difference hessian(" << pointHigh << ")=" << CenteredFiniteDifferenceHessian(1.0e-4, evaluation.clone()).hessian(pointHigh) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MarginalTransformationHessian_std.expout000066400000000000000000000145411307543307100256140ustar00rootroot00000000000000transformation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian(class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.03429,0,0,0,0,0,0,-0.7559] finite difference hessian(class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.03429,0,0,0,0,0,0,-0.7559] transformation.hessian(class=Point name=Unnamed dimension=2 values=[2.686,0.6847])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.03429,0,0,0,0,0,0,-1.412] finite difference hessian(class=Point name=Unnamed dimension=2 values=[2.686,0.6847])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.03429,0,0,0,0,0,0,-1.412] input dimension=2 output dimension=2 transformation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian(class=Point name=Unnamed dimension=2 values=[0.25,0.25])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-16.7,0,0,0,0,0,0,0.2545] finite difference hessian(class=Point name=Unnamed dimension=2 values=[0.25,0.25])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-16.7,0,0,0,0,0,0,0.2545] transformation.hessian(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[16.7,0,0,0,0,0,0,5.867] finite difference hessian(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[16.7,0,0,0,0,0,0,5.867] input dimension=2 output dimension=2 transformation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian(class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.0456,0,0,0,0,0,0,-24.27] finite difference hessian(class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.0456,0,0,0,0,0,0,-24.27] transformation.hessian(class=Point name=Unnamed dimension=2 values=[2.686,0.6847])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.05824,0,0,0,0,0,0,-2.788] finite difference hessian(class=Point name=Unnamed dimension=2 values=[2.686,0.6847])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.05824,0,0,0,0,0,0,-2.788] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_Matrix_decomposition.cxx000066400000000000000000000074771307543307100224360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the singularValues method of the Matrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline Matrix quadM(UnsignedInteger m, UnsignedInteger n) { Matrix res(m, n); for (UnsignedInteger i = 0; i < m; ++i) for (UnsignedInteger j = 0; j < n; ++j) res(i, j) = pow(i + 1.0, j + 1.0); return res; } inline void testSVD(UnsignedInteger m, UnsignedInteger n) { OStream fullprint(std::cout); // Square case Matrix matrix1(quadM(m, n)); matrix1.setName("matrix1"); fullprint << "matrix1= " << matrix1.__str__() << std::endl; Point result1 ; result1 = matrix1.computeSingularValues(); fullprint << "svd (svd only)= " << result1 << std::endl; Matrix u; Matrix vT; // Matrix S; result1 = matrix1.computeSVD(u, vT, true); fullprint << "svd (svd + u, vT full)= " << result1 << std::endl; // S = Matrix(m, n); // for (UnsignedInteger i = 0; i < std::min(m,n); ++i) // S(i,i) = result1[i]; // fullprint << "u*vT= " << ((u*S)*vT).__str__() << std::endl; result1 = matrix1.computeSVD(u, vT, false); fullprint << "svd (svd + u, vT small)= " << result1 << std::endl << "u= " << u.__str__() << std::endl << "vT= " << vT.__str__() << std::endl; // S = Matrix(std::min(m,n), std::min(m,n)); // for (UnsignedInteger i = 0; i < std::min(m,n); ++i) // S(i,i) = result1[i]; // fullprint << "u*vT= " << ((u*S)*vT).__str__() << std::endl; fullprint << std::endl; } inline void testQR(UnsignedInteger m, UnsignedInteger n, Bool full, Bool keep) { OStream fullprint(std::cout); Matrix matrix1(quadM(m, n)); fullprint << "M= " << matrix1.__str__() << std::endl; Matrix R; Matrix Q(matrix1.computeQR(R, full, keep)); fullprint << "full= " << (full ? "true" : "false") << std::endl; fullprint << "keep= " << (keep ? "true" : "false") << std::endl; fullprint << "Q= " << Q.__str__() << std::endl; fullprint << "R=" << R.__str__() << std::endl; fullprint << "QR=" << (Q * R).__str__() << std::endl; if (keep) fullprint << "M2=" << matrix1.__str__() << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); fullprint << "-- SVD square case ------------------------------------------" << std::endl; testSVD(3, 3); fullprint << "-- SVD rectangular case, m < n ------------------------------" << std::endl; testSVD(3, 5); fullprint << "-- SVD rectangular case, m > n ------------------------------" << std::endl; testSVD(5, 3); for (int iFull = 0; iFull < 2; ++iFull) for (int iKeep = 0; iKeep < 2; ++iKeep) { fullprint << "-- QR square case ------------------------------------------" << std::endl; testQR(3, 3, iFull == 1, iKeep == 1); fullprint << "-- QR rectangular case, m < n-------------------------------" << std::endl; testQR(3, 5, iFull == 1, iKeep == 1); fullprint << "-- QR rectangular case, m > n-------------------------------" << std::endl; testQR(5, 3, iFull == 1, iKeep == 1); } return ExitCode::Success; } openturns-1.9/lib/test/t_Matrix_decomposition.expout000066400000000000000000000215241307543307100231450ustar00rootroot00000000000000-- SVD square case ------------------------------------------ matrix1= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] svd (svd only)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] svd (svd + u, vT full)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] svd (svd + u, vT small)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] u= [[ -0.0459872 -0.548195 -0.835085 ] [ -0.301051 -0.789498 0.534847 ] [ -0.952499 0.275999 -0.128728 ]] vT= [[ -0.116696 -0.326982 -0.937798 ] [ -0.691768 -0.650768 0.312984 ] [ -0.712629 0.685262 -0.150254 ]] -- SVD rectangular case, m < n ------------------------------ matrix1= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] svd (svd only)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] svd (svd + u, vT full)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] svd (svd + u, vT small)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] u= [[ -0.00543408 -0.205213 -0.978702 ] [ -0.139192 -0.969034 0.203958 ] [ -0.99025 0.137336 -0.0232982 ]] vT= 3x5 [[ -0.0125044 -0.0364019 -0.107025 -0.316754 -0.941664 ] [ -0.233793 -0.384235 -0.573844 -0.619233 0.291474 ] [ -0.754678 -0.438843 0.0281659 0.468196 -0.133706 ]] -- SVD rectangular case, m > n ------------------------------ matrix1= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] svd (svd only)= class=Point name=Unnamed dimension=3 values=[146.689,5.57511,0.603932] svd (svd + u, vT full)= class=Point name=Unnamed dimension=3 values=[146.689,5.57511,0.603932] svd (svd + u, vT small)= class=Point name=Unnamed dimension=3 values=[146.689,5.57511,0.603932] u= 5x3 [[ -0.0084125 0.203498 0.721867 ] [ -0.0596376 0.487761 0.453866 ] [ -0.193613 0.631308 -0.152421 ] [ -0.450275 0.412659 -0.445414 ] [ -0.869563 -0.389667 0.226469 ]] vT= [[ -0.0467483 -0.210875 -0.976395 ] [ 0.497792 0.842527 -0.205796 ] [ 0.866036 -0.495662 0.0655852 ]] -- QR square case ------------------------------------------ M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= false keep= false Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=[[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] QR=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] -- QR rectangular case, m < n------------------------------- M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= false keep= false Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] QR=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] -- QR rectangular case, m > n------------------------------- M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= false keep= false Q= 5x3 [[ -0.13484 -0.403961 0.61742 ] [ -0.26968 -0.546536 0.275741 ] [ -0.40452 -0.427724 -0.335685 ] [ -0.53936 -0.0475248 -0.527504 ] [ -0.6742 0.594061 0.389634 ]] R=[[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ]] QR=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] -- QR square case ------------------------------------------ M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= false keep= true Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=[[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] QR=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M2=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] -- QR rectangular case, m < n------------------------------- M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= false keep= true Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] QR=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M2=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] -- QR rectangular case, m > n------------------------------- M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= false keep= true Q= 5x3 [[ -0.13484 -0.403961 0.61742 ] [ -0.26968 -0.546536 0.275741 ] [ -0.40452 -0.427724 -0.335685 ] [ -0.53936 -0.0475248 -0.527504 ] [ -0.6742 0.594061 0.389634 ]] R=[[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ]] QR=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M2=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] -- QR square case ------------------------------------------ M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= true keep= false Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=[[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] QR=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] -- QR rectangular case, m < n------------------------------- M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= true keep= false Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] QR=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] -- QR rectangular case, m > n------------------------------- M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= true keep= false Q= 5x5 [[ -0.13484 -0.403961 0.61742 0.0097831 -0.66131 ] [ -0.26968 -0.546536 0.275741 0.35776 0.651572 ] [ -0.40452 -0.427724 -0.335685 -0.735087 0.0194756 ] [ -0.53936 -0.0475248 -0.527504 0.556207 -0.345262 ] [ -0.6742 0.594061 0.389634 -0.148974 0.136157 ]] R=5x3 [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ] [ 0 0 0 ] [ 0 0 0 ]] QR=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] -- QR square case ------------------------------------------ M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= true keep= true Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=[[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] QR=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M2=[[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] -- QR rectangular case, m < n------------------------------- M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= true keep= true Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R=3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] QR=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M2=3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] -- QR rectangular case, m > n------------------------------- M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= true keep= true Q= 5x5 [[ -0.13484 -0.403961 0.61742 0.0097831 -0.66131 ] [ -0.26968 -0.546536 0.275741 0.35776 0.651572 ] [ -0.40452 -0.427724 -0.335685 -0.735087 0.0194756 ] [ -0.53936 -0.0475248 -0.527504 0.556207 -0.345262 ] [ -0.6742 0.594061 0.389634 -0.148974 0.136157 ]] R=5x3 [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ] [ 0 0 0 ] [ 0 0 0 ]] QR=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M2=5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] openturns-1.9/lib/test/t_Matrix_solve.cxx000066400000000000000000000064471307543307100207060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the solveLinearSystem method of the Matrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // First an n by n case Matrix matrix1(2, 2); matrix1.setName("matrix1"); matrix1(0, 0) = 1.0; matrix1(1, 0) = 2.0; matrix1(0, 1) = 5.0; matrix1(1, 1) = 12.0; fullprint << "matrix1=" << matrix1 << std::endl; Point pt1 ; pt1.add(5.0) ; pt1.add(0.0) ; fullprint << "pt1=" << pt1 << std::endl; Point result1 ; result1 = matrix1.solveLinearSystem(pt1); fullprint << "result1=" << result1 << std::endl; // Second an n by p case, n < p Matrix matrix2(2, 3); matrix2.setName("matrix2"); matrix2(0, 0) = 1.0; matrix2(1, 0) = 2.0; matrix2(0, 1) = 5.0; matrix2(1, 1) = 12.0; matrix2(0, 2) = 3.0; matrix2(1, 2) = 4.0; fullprint << "matrix2=" << matrix2 << std::endl; Point pt2 ; pt2.add(5.0); pt2.add(0.0); fullprint << "pt2=" << pt2 << std::endl; Point result2 ; result2 = matrix2.solveLinearSystem(pt2); fullprint << "result2=" << result2 << std::endl; // Third an n by p case, n > p Matrix matrix3(3, 2); matrix3.setName("matrix3"); matrix3(0, 0) = 1.0; matrix3(1, 0) = 2.0; matrix3(2, 0) = 4.0; matrix3(0, 1) = 5.0; matrix3(1, 1) = 12.0; matrix3(2, 1) = 3.0; fullprint << "matrix3=" << matrix3 << std::endl; Point pt3 ; pt3.add(5.0) ; pt3.add(0.0) ; pt3.add(1.0) ; fullprint << "pt3=" << pt3 << std::endl; Point result3 ; result3 = matrix3.solveLinearSystem(pt3); fullprint << "result3=" << result3 << std::endl; Matrix b1(2, 4); b1(0, 0) = 5.0; b1(1, 0) = 1.0; b1(0, 1) = 10.0; b1(1, 1) = 2.0; b1(0, 2) = 15.0; b1(1, 2) = 3.0; b1(0, 3) = 20.0; b1(1, 3) = 4.0; fullprint << "b1=" << b1 << std::endl; Matrix result4; result4 = matrix1.solveLinearSystem(b1); fullprint << "result4=" << result4 << std::endl; Matrix result5; result5 = matrix2.solveLinearSystem(b1); fullprint << "result5=" << result5 << std::endl; Matrix b2(3, 4); b2(0, 0) = 5.0; b2(1, 0) = 1.0; b2(2, 0) = -2.0; b2(0, 1) = 10.0; b2(1, 1) = 2.0; b2(2, 1) = -4.0; b2(0, 2) = 15.0; b2(1, 2) = 3.0; b2(2, 2) = -6.0; b2(0, 3) = 20.0; b2(1, 3) = 4.0; b2(2, 3) = -8.0; fullprint << "b2=" << b2 << std::endl; Matrix result6; result6 = matrix3.solveLinearSystem(b2); fullprint << "result6=" << result6 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_Matrix_solve.expout000066400000000000000000000027011307543307100214150ustar00rootroot00000000000000matrix1=class=Matrix implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,2,5,12] pt1=class=Point name=Unnamed dimension=2 values=[5,0] result1=class=Point name=Unnamed dimension=2 values=[30,-5] matrix2=class=Matrix implementation=class=MatrixImplementation name=matrix2 rows=2 columns=3 values=[1,2,5,12,3,4] pt2=class=Point name=Unnamed dimension=2 values=[5,0] result2=class=Point name=Unnamed dimension=3 values=[0.30303,-1.28788,3.71212] matrix3=class=Matrix implementation=class=MatrixImplementation name=matrix3 rows=3 columns=2 values=[1,2,4,5,12,3] pt3=class=Point name=Unnamed dimension=3 values=[5,0,1] result3=class=Point name=Unnamed dimension=2 values=[0.22071,0.106466] b1=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[5,1,10,2,15,3,20,4] result4=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[27.5,-4.5,55,-9,82.5,-13.5,110,-18] result5=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0.287879,-1.09848,3.40152,0.575758,-2.19697,6.80303,0.863636,-3.29545,10.2045,1.15152,-4.39394,13.6061] b2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[5,1,-2,10,2,-4,15,3,-6,20,4,-8] result6=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[-0.704424,0.336412,-1.40885,0.672825,-2.11327,1.00924,-2.8177,1.34565] openturns-1.9/lib/test/t_Matrix_std.cxx000066400000000000000000000172401307543307100203410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Matrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ Matrix matrix0; /* String converter */ fullprint << "matrix0 = " << matrix0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ Matrix matrix1(2, 2); /* Check operator() methods */ matrix1(0, 0) = 1. ; matrix1(1, 0) = 2. ; matrix1(0, 1) = 3. ; matrix1(1, 1) = 4. ; /* String converter */ fullprint << "matrix1 = " << matrix1 << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ Matrix matrix2(matrix1); /* String converter */ fullprint << "matrix2 = " << matrix2 << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "matrix1's nbRows = " << matrix1.getNbRows() << std::endl << "matrix1's nbColumns = " << matrix1.getNbColumns() << std::endl; /** TEST NUMBER FOUR : CONSTRUCTOR WITH COLLECTION AND ARRAY */ fullprint << "test number four : constructor with collection and array method" << std::endl; /* Create the collection of values */ Collection elementsValues; elementsValues.add(1.); elementsValues.add(2.); elementsValues.add(3.); elementsValues.add(4.); elementsValues.add(5.); elementsValues.add(6.); /* Check the content of the collection */ fullprint << "elementsValues = " << elementsValues << std::endl; /* Check the constructor with collection */ Matrix matrix0bis = Matrix(2, 2, elementsValues); fullprint << "matrix0bis = " << matrix0bis << std::endl; #if 0 /* Create the array */ double tab[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}; /* Check the content of the array */ fullprint << tab[0] << ';' << tab[1] << ';' << tab[2] << ';' << tab[3] << ';' << tab[4] << ';' << tab[5] << ';' << std::endl; /* Check the constructor with array */ Matrix matrix0ter = Matrix(4, 4, tab, tab + 6); fullprint << "matrix0ter = " << matrix0ter << std::endl; #endif /** TEST NUMBER FIVE : ASSIGNMENT METHOD */ fullprint << "test number five : assignment method" << std::endl; /* Assignment method */ Matrix matrix3 ; matrix3 = matrix1 ; fullprint << "matrix3 = " << matrix3 << std::endl; /** TEST NUMBER SIX : TRANSPOSITION METHOD */ fullprint << "test number six : transposition method" << std::endl; /* Check transpose method */ Matrix matrix4 = matrix1.transpose(); fullprint << "matrix1 transposed = " << matrix4 << std::endl; /** TEST NUMBER SEVEN : ADDITION METHOD */ fullprint << "test number seven : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ Matrix sum1 = matrix1.operator + ( matrix4 ) ; Matrix sum2 = matrix4.operator + ( matrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** TEST NUMBER EIGHT : SUBSTRACTION METHOD */ fullprint << "test number eight : substraction method" << std::endl; /* Check substraction method */ Matrix diff = matrix1.operator - ( matrix4 ) ; fullprint << "diff = " << diff << std::endl; /** TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD */ fullprint << "test number nine : matrix multiplication method" << std::endl; /* Check multiplication method */ Matrix prod = matrix1.operator * ( matrix4 ) ; fullprint << "prod = " << prod << std::endl; /** TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test number ten : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ Point ptResult = matrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test number eleven : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ double s = 3.; Matrix scalprod1 = matrix1.operator * (s) ; Matrix scalprod2 = s * matrix1 ; Matrix scalprod3 = matrix1 * s ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod3 = " << scalprod3 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; fullprint << "scalprod1 equals scalprod3 = " << (scalprod1 == scalprod3) << std::endl; fullprint << "scalprod2 equals scalprod3 = " << (scalprod2 == scalprod3) << std::endl; /* Check the division method */ Matrix scaldiv1 = matrix1.operator / (s) ; Matrix scaldiv2 = matrix1.operator * (1 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** TEST NUMBER TWELVE : ISEMPTY METHOD */ fullprint << "test number twelve : isEmpty method" << std::endl; /* Check method isEmpty */ Matrix matrix5; Matrix matrix6; // matrix6.setDimensions(0,3); fullprint << "matrix1 is empty = " << matrix1.isEmpty() << std::endl << "matrix5 is empty = " << matrix5.isEmpty() << std::endl << "matrix6 is empty = " << matrix6.isEmpty() << std::endl << "matrix0 is empty = " << matrix0.isEmpty() << std::endl; /** TEST NUMBER FOURTEEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test number fourteen : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt_test ; pt_test.add(1.) ; pt_test.add(2.) ; fullprint << "pt_test = " << pt_test << std::endl; Matrix A(2, 2); A(0, 0) = 0.5 ; A(1, 0) = -(std::sqrt(3.) / 2) ; A(0, 1) = (std::sqrt(3.) / 2) ; A(1, 1) = 0.5 ; Matrix B = A.transpose(); Matrix id = B.operator * (A); /* Check the product method */ Point ptResult2 = id.operator * ( pt_test ) ; fullprint << "A = " << A << std::endl; fullprint << "B = " << B << std::endl; fullprint << "id = " << id << std::endl; fullprint << "ptResult2 = " << ptResult2 << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_Matrix_std.expout000066400000000000000000000065101307543307100210610ustar00rootroot00000000000000test number zero : default constructor and string converter matrix0 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter matrix1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number two : copy constructor and string converter matrix2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number three : get dimensions methods matrix1's nbRows = 2 matrix1's nbColumns = 2 test number four : constructor with collection and array method elementsValues = [1,2,3,4,5,6] matrix0bis = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number five : assignment method matrix3 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number six : transposition method matrix1 transposed = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] test number seven : addition method sum1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum1 equals sum2 = true test number eight : substraction method diff = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,-1,1,0] test number nine : matrix multiplication method prod = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,14,14,20] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,10] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod3 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod1 equals scalprod2 = true scalprod1 equals scalprod3 = true scalprod2 equals scalprod3 = true scaldiv1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv1 equals scaldiv2 = true test number twelve : isEmpty method matrix1 is empty = false matrix5 is empty = true matrix6 is empty = true matrix0 is empty = true test number fourteen : multiplication with a numerical point method pt_test = class=Point name=Unnamed dimension=2 values=[1,2] A = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,-0.866025,0.866025,0.5] B = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,0.866025,-0.866025,0.5] id = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] ptResult2 = class=Point name=Unnamed dimension=2 values=[1,2] openturns-1.9/lib/test/t_MaximumEntropyOrderStatisticsCopula_std.cxx000066400000000000000000000166701307543307100263140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MaximumEntropyOrderStatisticsCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public MaximumEntropyOrderStatisticsCopula { public: TestObject() : MaximumEntropyOrderStatisticsCopula() {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); PlatformInfo::SetNumericalPrecision(4); try { // Test basic functionnalities checkClassWithClassName(); ComposedDistribution::DistributionCollection coll; coll.add(Trapezoidal(-2.0, -1.1, -1.0, 1.0)); coll.add(LogUniform(1.0, 1.2)); coll.add(Triangular(3.0, 4.5, 5.0)); coll.add(Beta(2.5, 6.0, 4.7, 5.2)); // Instanciate one distribution object MaximumEntropyOrderStatisticsCopula distribution(coll); UnsignedInteger dim = distribution.getDimension(); fullprint << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; // Define a point Point point(distribution.getDimension()); point[0] = 0.35; point[1] = 0.15; point[2] = 0.02; point[3] = 0.33; fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point // Scalar eps(1e-5); Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; // fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; // Scalar Survival = distribution.computeSurvivalFunction( point ); // fullprint << "survival=" << Survival << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; // Point PDFgr = distribution.computePDFGradient( point ); // fullprint << "pdf gradient =" << PDFgr << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 20 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-4 ); CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 100 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-12 ); MaximumEntropyOrderStatisticsCopula::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; // for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; // fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; ++ i) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(point[i]) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(point[i]) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; fullprint << "margin range=" << margin.getRange() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[1] = 1; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "independent?=" << (margins.hasIndependentCopula() ? "true" : "false") << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.5)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.5)) << std::endl; quantile = margins.computeQuantile(0.5); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MaximumEntropyOrderStatisticsCopula_std.expout000066400000000000000000000142001307543307100270210ustar00rootroot00000000000000Testing class MaximumEntropyOrderStatisticsCopula checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=MaximumEntropyOrderStatisticsCopula name=MaximumEntropyOrderStatisticsCopula dimension=2 distribution=class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=2 collection=[class=Uniform name=Uniform dimension=1 a=-1 b=0.5,class=Uniform name=Uniform dimension=1 a=-0.5 b=1] streamObject(const T & anObject) class=MaximumEntropyOrderStatisticsCopula name=MaximumEntropyOrderStatisticsCopula dimension=2 distribution=class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=2 collection=[class=Uniform name=Uniform dimension=1 a=-1 b=0.5,class=Uniform name=Uniform dimension=1 a=-0.5 b=1] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=MaximumEntropyOrderStatisticsCopula name=MaximumEntropyOrderStatisticsCopula dimension=4 distribution=class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=4 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.6452,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.718 b=3.32,class=Triangular name=Triangular dimension=1 a=3 m=4.5 b=5,class=Beta name=Beta dimension=1 r=2.5 t=6 a=4.7 b=5.2] Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=4 values=[0.6299,0.8828,0.1515,0.03023] oneSample first=class=Point name=Unnamed dimension=4 values=[0.3471,0.9694,0.9231,0.4927] last=class=Point name=Unnamed dimension=4 values=[0.4504,0.6301,0.1376,0.7078] mean=class=Point name=Unnamed dimension=4 values=[0.499,0.4992,0.5056,0.4993] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.08496,-0.0001363,0.0001874,7.829e-05,-0.0001363,0.08313,0.00101,-1.895e-05,0.0001874,0.00101,0.08479,0.004461,7.829e-05,-1.895e-05,0.004461,0.08315] skewness=class=Point name=Unnamed dimension=4 values=[0.001185,0.00776,-0.01776,-0.004281] kurtosis=class=Point name=Unnamed dimension=4 values=[1.788,1.802,1.784,1.81] Point= class=Point name=Unnamed dimension=4 values=[0.35,0.15,0.02,0.33] ddf =class=Point name=Unnamed dimension=4 values=[0.3186,0.2275,-1.135,-0.2765] log pdf=-0.450551 pdf =0.637277 cdf=0.000481551 ccdf=0.999518 quantile=class=Point name=Unnamed dimension=4 values=[0.9873,0.9873,0.9873,0.9873] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=4 values=[0.01266,0.01266,0.01266,0.01266] cdf (tail)=1 mean=class=Point name=Unnamed dimension=4 values=[0.5,0.5,0.5,0.5] standard deviation=class=Point name=Unnamed dimension=4 values=[0.2887,0.2887,0.2887,0.2887] skewness=class=Point name=Unnamed dimension=4 values=[0,0,0,0] kurtosis=class=Point name=Unnamed dimension=4 values=[1.8,1.8,1.8,1.8] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.08333,0,0,0,0,0.08333,0.001405,0,0,0.001405,0.08333,0.004074,0,0,0.004074,0.08333] correlation=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.01685,0,0,0.01685,1,0.04888,0,0,0.04888,1] spearman=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.01685,0,0,0.01685,1,0.04888,0,0,0.04888,1] parameters=[[a_marginal_0 : -2, b_marginal_0 : -1.1, c_marginal_0 : -1, d_marginal_0 : 1],[aLog_marginal_1 : 1, bLog_marginal_1 : 1.2],[a_marginal_2 : 3, m_marginal_2 : 4.5, b_marginal_2 : 5],[r_marginal_3 : 2.5, t_marginal_3 : 6, a_marginal_3 : 4.7, b_marginal_3 : 5.2]] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.35 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.4812] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.15 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.06732] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.02 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.4181] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.33 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.2867] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] indices=[0,1] margins=class=MaximumEntropyOrderStatisticsCopula name=MaximumEntropyOrderStatisticsCopula dimension=2 distribution=class=MaximumEntropyOrderStatisticsDistribution name=Unnamed dimension=2 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.6452,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.718 b=3.32] independent?=true margins PDF=1 margins CDF=0.25 margins quantile=class=Point name=Unnamed dimension=2 values=[0.7071,0.7071] margins CDF(quantile)=0.5 margins realization=class=Point name=Unnamed dimension=2 values=[0.6999,0.2099] openturns-1.9/lib/test/t_MaximumEntropyOrderStatisticsDistribution_std.cxx000066400000000000000000000166371307543307100275530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MaximumEntropyOrderStatisticsDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public MaximumEntropyOrderStatisticsDistribution { public: TestObject() : MaximumEntropyOrderStatisticsDistribution() {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); PlatformInfo::SetNumericalPrecision(4); try { // Test basic functionnalities checkClassWithClassName(); ComposedDistribution::DistributionCollection coll; coll.add(Trapezoidal(-2.0, -1.1, -1.0, 1.0)); coll.add(LogUniform(1.0, 1.2)); coll.add(Triangular(3.0, 4.5, 5.0)); coll.add(Beta(2.5, 6.0, 4.7, 5.2)); // Instanciate one distribution object MaximumEntropyOrderStatisticsDistribution distribution(coll); UnsignedInteger dim = distribution.getDimension(); fullprint << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; // Define a point Point point(distribution.getDimension()); point[1] = 3.2; point[2] = 4.2; point[3] = 5.0; fullprint << "Point= " << point << std::endl; // // // Show PDF and CDF of point // Scalar eps(1e-5); Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; // fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; // point[0]=1.; point[1] = 3.31; point[2] = 5.; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; // Scalar Survival = distribution.computeSurvivalFunction( point ); // fullprint << "survival=" << Survival << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; // Point PDFgr = distribution.computePDFGradient( point ); // fullprint << "pdf gradient =" << PDFgr << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 20 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-4 ); CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 100 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-12 ); MaximumEntropyOrderStatisticsDistribution::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; // for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; // fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; ++ i) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(point[i]) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(point[i]) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; fullprint << "margin range=" << margin.getRange() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[1] = 1; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; // fullprint << "margins PDF=" << margins.computePDF(Point(2)) << std::endl; // fullprint << "margins CDF=" << margins.computeCDF(Point(2)) << std::endl; // quantile = margins.computeQuantile(0.5); // fullprint << "margins quantile=" << quantile << std::endl; // fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MaximumEntropyOrderStatisticsDistribution_std.expout000066400000000000000000000132111307543307100302560ustar00rootroot00000000000000Testing class MaximumEntropyOrderStatisticsDistribution checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=2 collection=[class=Uniform name=Uniform dimension=1 a=-1 b=0.5,class=Uniform name=Uniform dimension=1 a=-0.5 b=1] streamObject(const T & anObject) class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=2 collection=[class=Uniform name=Uniform dimension=1 a=-1 b=0.5,class=Uniform name=Uniform dimension=1 a=-0.5 b=1] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=MaximumEntropyOrderStatisticsDistribution name=MaximumEntropyOrderStatisticsDistribution dimension=4 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.6452,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.718 b=3.32,class=Triangular name=Triangular dimension=1 a=3 m=4.5 b=5,class=Beta name=Beta dimension=1 r=2.5 t=6 a=4.7 b=5.2] Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=4 values=[-0.5148,3.243,3.674,4.751] oneSample first=class=Point name=Unnamed dimension=4 values=[-1.012,3.3,4.723,4.902] last=class=Point name=Unnamed dimension=4 values=[-0.8459,3.083,3.642,4.961] mean=class=Point name=Unnamed dimension=4 values=[-0.6902,3.009,4.174,4.908] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.4039,-0.0003659,0.0009324,-5.81e-05,-0.0003659,0.03009,0.001298,-2.285e-05,0.0009324,0.001298,0.1836,0.002075,-5.81e-05,-2.285e-05,0.002075,0.008656] skewness=class=Point name=Unnamed dimension=4 values=[0.3364,0.07714,-0.4349,0.2198] kurtosis=class=Point name=Unnamed dimension=4 values=[2.384,1.809,2.408,2.405] Point= class=Point name=Unnamed dimension=4 values=[0,3.2,4.2,5] ddf =class=Point name=Unnamed dimension=4 values=[-0.6454,0.1072,0.5378,-4.841] log pdf=-0.437888 pdf =0.645398 cdf=0.27253 ccdf=0.72747 quantile=class=Point name=Unnamed dimension=4 values=[0.7199,3.312,4.887,5.115] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=4 values=[-0.8149,2.985,4.186,4.895] cdf (tail)=0.95 mean=class=Point name=Unnamed dimension=4 values=[-0.6892,3.009,4.167,4.908] standard deviation=class=Point name=Unnamed dimension=4 values=[0.6271,0.1737,0.4249,0.09317] skewness=class=Point name=Unnamed dimension=4 values=[0.3392,0.06926,-0.4224,0.2236] kurtosis=class=Point name=Unnamed dimension=4 values=[2.398,1.805,2.4,2.4] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.3933,0,0,0,0,0.03016,0.001766,0,0,0.001766,0.1806,0.001888,0,0,0.001888,0.008681] correlation=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.02392,0,0,0.02392,1,0.04769,0,0,0.04769,1] spearman=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.01685,0,0,0.01685,1,0.04888,0,0,0.04888,1] parameters=[[a_marginal_0 : -2, b_marginal_0 : -1.1, c_marginal_0 : -1, d_marginal_0 : 1],[aLog_marginal_1 : 1, bLog_marginal_1 : 1.2],[a_marginal_2 : 3, m_marginal_2 : 4.5, b_marginal_2 : 5],[r_marginal_3 : 2.5, t_marginal_3 : 6, a_marginal_3 : 4.7, b_marginal_3 : 5.2]] margin=class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.6452 margin PDF=0.322581 margin CDF=0.83871 margin quantile=class=Point name=Unnamed dimension=1 values=[0.4432] margin realization=class=Point name=Unnamed dimension=1 values=[-0.7934] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin=class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.718 b=3.32 margin PDF=1.5625 margin CDF=0.815754 margin quantile=class=Point name=Unnamed dimension=1 values=[3.287] margin realization=class=Point name=Unnamed dimension=1 values=[2.755] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[2.718] upper bound=class=Point name=Unnamed dimension=1 values=[3.32] finite lower bound=[1] finite upper bound=[1] margin=class=Triangular name=Triangular dimension=1 a=3 m=4.5 b=5 margin PDF=0.8 margin CDF=0.48 margin quantile=class=Point name=Unnamed dimension=1 values=[4.776] margin realization=class=Point name=Unnamed dimension=1 values=[4.12] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[3] upper bound=class=Point name=Unnamed dimension=1 values=[5] finite lower bound=[1] finite upper bound=[1] margin=class=Beta name=Beta dimension=1 r=2.5 t=6 a=4.7 b=5.2 margin PDF=2.55491 margin CDF=0.819685 margin quantile=class=Point name=Unnamed dimension=1 values=[5.07] margin realization=class=Point name=Unnamed dimension=1 values=[4.847] margin range=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[4.7] upper bound=class=Point name=Unnamed dimension=1 values=[5.2] finite lower bound=[1] finite upper bound=[1] indices=[0,1] margins=class=MaximumEntropyOrderStatisticsDistribution name=Unnamed dimension=2 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.6452,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.718 b=3.32] margins realization=class=Point name=Unnamed dimension=2 values=[-1.235,3.194] openturns-1.9/lib/test/t_MaximumLikelihoodFactory_std.cxx000066400000000000000000000055461307543307100240540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MaximumLikelihoodFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Uniform distribution(1.0, 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); UniformFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Uniform estimatedUniform(factory.buildAsUniform(sample)); fullprint << "Uniform =" << distribution << std::endl; fullprint << "Estimated uniform=" << estimatedUniform << std::endl; estimatedUniform = factory.buildAsUniform(); fullprint << "Default uniform=" << estimatedUniform << std::endl; estimatedUniform = factory.buildAsUniform(distribution.getParameter()); fullprint << "Uniform from parameters=" << estimatedUniform << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MaximumLikelihoodFactory_std.expout000066400000000000000000000013471307543307100245710ustar00rootroot00000000000000Distribution =class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated distribution=class=Uniform name=Uniform dimension=1 a=1.00014 b=2.50009 Default distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 Distribution from parameters=class=Uniform name=Uniform dimension=1 a=1 b=2.5 Uniform =class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated uniform=class=Uniform name=Uniform dimension=1 a=1.00014 b=2.50009 Default uniform=class=Uniform name=Uniform dimension=1 a=-1 b=1 Uniform from parameters=class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated distribution=class=Uniform name=Uniform dimension=1 a=-2.22045e-15 b=2.22045e-15 Estimated distribution=class=Uniform name=Uniform dimension=1 a=1 b=1 openturns-1.9/lib/test/t_MeixnerDistributionFactory_std.cxx000066400000000000000000000062641307543307100244400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MeixnerDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsUnsignedInteger( "MeixnerDistribution-CDFIntegrationNodesNumber", 8 ); ResourceMap::SetAsUnsignedInteger( "MeixnerDistribution-CDFDiscretization", 100 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumAbsoluteError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumRelativeError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumConstraintError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumObjectiveError", 1.0e-6 ); MeixnerDistribution distribution(1.5, 0.5, 2.5, -0.5); UnsignedInteger size = 1000; Sample sample(distribution.getSample(size)); MeixnerDistributionFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; MeixnerDistribution estimatedMeixnerDistribution(factory.buildAsMeixnerDistribution(sample)); fullprint << "MeixnerDistribution =" << distribution << std::endl; fullprint << "Estimated meixnerDistribution=" << estimatedMeixnerDistribution << std::endl; estimatedMeixnerDistribution = factory.buildAsMeixnerDistribution(); fullprint << "Default meixnerDistribution=" << estimatedMeixnerDistribution << std::endl; estimatedMeixnerDistribution = factory.buildAsMeixnerDistribution(distribution.getParameter()); fullprint << "MeixnerDistribution from parameters=" << estimatedMeixnerDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MeixnerDistributionFactory_std.expout000066400000000000000000000030361307543307100251540ustar00rootroot00000000000000Distribution =class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 Estimated distribution=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.77682 beta=0.316056 delta=1.77799 mu=-0.0428205 logNormalizationFactor=-1.25571 b=0.502433 c=-0.548031 dc=1.3423 Default distribution=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1 beta=0 delta=1 mu=0 logNormalizationFactor=-0.451583 b=0.797885 c=-0.416958 dc=0.833916 Distribution from parameters=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 MeixnerDistribution =class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 Estimated meixnerDistribution=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.77682 beta=0.316056 delta=1.77799 mu=-0.0428205 logNormalizationFactor=-1.25571 b=0.502433 c=-0.548031 dc=1.3423 Default meixnerDistribution=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1 beta=0 delta=1 mu=0 logNormalizationFactor=-0.451583 b=0.797885 c=-0.416958 dc=0.833916 MeixnerDistribution from parameters=class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 openturns-1.9/lib/test/t_MeixnerDistribution_std.cxx000066400000000000000000000162401307543307100231030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MeixnerDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ResourceMap::SetAsUnsignedInteger( "MeixnerDistribution-CDFIntegrationNodesNumber", 8 ); ResourceMap::SetAsUnsignedInteger( "MeixnerDistribution-CDFDiscretization", 100 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumAbsoluteError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumRelativeError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumConstraintError", 1.0e-6 ); ResourceMap::SetAsScalar( "MeixnerDistribution-MaximumObjectiveError", 1.0e-6 ); // Instanciate one distribution object MeixnerDistribution distribution(1.5, 0.5, 2.5, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar eps = 1.0e-5; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; MeixnerDistribution::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 3; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar mu = distribution.getMu(); fullprint << "mu=" << mu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MeixnerDistribution_std.expout000066400000000000000000000101331307543307100236200ustar00rootroot00000000000000Distribution class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 Distribution MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.06954] oneSample first=class=Point name=Unnamed dimension=1 values=[0.267624] last=class=Point name=Unnamed dimension=1 values=[-2.89629] mean=class=Point name=Unnamed dimension=1 values=[0.426758] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.89038] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] log pdf=-1.51735 pdf =0.219293 pdf (FD)=0.219283 cdf=0.640774 ccdf=0.359226 survival=0.359226 Inverse survival=class=Point name=Unnamed dimension=1 values=[-2.27095] Survival(inverse survival)=0.95 characteristic function=(0.0679463,-0.248507) log characteristic function=(-1.35624,-1.3039) quantile=class=Point name=Unnamed dimension=1 values=[3.39477] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.90577] upper bound=class=Point name=Unnamed dimension=1 values=[3.94843] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5)) level=3.50547 beta=0.0300325 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.80555] upper bound=class=Point name=Unnamed dimension=1 values=[4.06095] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-18.5819] upper bound=class=Point name=Unnamed dimension=1 values=[3.39477] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.27095] upper bound=class=Point name=Unnamed dimension=1 values=[24.6896] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.457532] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.99587] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[alpha : 1.5, beta : 0.5, mu : 2.5, : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.638355] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.739] Standard representative=MeixnerDistribution(alpha = 1, beta = 0.5, delta = 2.5, mu = 0) mu=-0.5 standard deviation=class=Point name=Unnamed dimension=1 values=[1.73086] skewness=class=Point name=Unnamed dimension=1 values=[0.221285] kurtosis=class=Point name=Unnamed dimension=1 values=[3.44897] openturns-1.9/lib/test/t_MeixnerFactory_std.cxx000066400000000000000000000032441307543307100220330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MeixnerFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { MeixnerFactory meixner(10, 0.3); fullprint << "meixner=" << meixner << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "meixner(" << i << ")=" << meixner.build(i).__str__() << std::endl; } Point roots(meixner.getRoots(10)); fullprint << "meixner(10) roots=" << roots << std::endl; Point weights; roots = meixner.getNodesAndWeights(10, weights); fullprint << "meixner(10) roots=" << roots << " and weights=" << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MeixnerFactory_std.expout000066400000000000000000000027521307543307100225600ustar00rootroot00000000000000meixner=class=MeixnerFactory r=10 p=0.3 measure=class=NegativeBinomial name=NegativeBinomial dimension=1 r=10 p=0.3 meixner(0)=1 meixner(1)=1.73205 - 0.404145 * X meixner(2)=2.22486 - 1.14839 * X + 0.110119 * X^2 meixner(3)=2.43721 - 2.11485 * X + 0.432256 * X^2 - 0.0234558 * X^3 meixner(4)=2.40655 - 3.17102 * X + 1.03833 * X^2 - 0.117585 * X^3 + 0.00415705 * X^4 meixner(5)=2.20564 - 4.21901 * X + 1.9698 * X^2 - 0.348796 * X^3 + 0.0254 * X^4 - 0.000635 * X^5 meixner(6)=1.91014 - 5.21408 * X + 3.25397 * X^2 - 0.799357 * X^3 + 0.0897602 * X^4 - 0.00458272 * X^5 + 8.55441e-05 * X^6 meixner(7)=1.58175 - 6.16341 * X + 4.92662 * X^2 - 1.56963 * X^3 + 0.241002 * X^4 - 0.0188088 * X^5 + 0.0007128 * X^6 - 1.03304e-05 * X^7 meixner(8)=1.26292 - 7.11717 * X + 7.05515 * X^2 - 2.78789 * X^3 + 0.547095 * X^4 - 0.0578824 * X^5 + 0.00333388 * X^6 - 9.76844e-05 * X^7 + 1.1321e-06 * X^8 meixner(9)=0.978257 - 8.15986 * X + 9.76169 * X^2 - 4.62899 * X^3 + 1.11071 * X^4 - 0.148959 * X^5 + 0.0115671 * X^6 - 0.000513056 * X^7 + 1.19846e-05 * X^8 - 1.13675e-07 * X^9 meixner(10) roots=class=Point name=Unnamed dimension=10 values=[0.0891767,1.50904,3.36334,5.65802,8.41605,11.6926,15.5849,20.2616,26.0516,33.8023] meixner(10) roots=class=Point name=Unnamed dimension=10 values=[0.0891767,1.50904,3.36334,5.65802,8.41605,11.6926,15.5849,20.2616,26.0516,33.8023] and weights=class=Point name=Unnamed dimension=10 values=[0.0395505,0.188007,0.351725,0.289769,0.110216,0.0192414,0.00144917,4.08107e-05,3.16436e-07,3.0345e-10] openturns-1.9/lib/test/t_Mesh_draw.cxx000066400000000000000000000110541307543307100201310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Mesh for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { { Sample vertices(0, 1); vertices.add(Point(1, 0.5)); vertices.add(Point(1, 1.5)); vertices.add(Point(1, 2.1)); vertices.add(Point(1, 2.7)); Mesh::IndicesCollection simplicies(3, Indices(2)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[1][0] = 1; simplicies[1][1] = 2; simplicies[2][0] = 2; simplicies[2][1] = 3; Mesh mesh1D(vertices, simplicies); mesh1D.draw().draw("mesh1D"); mesh1D.draw1D().draw("mesh1D"); fullprint << "mesh 1D ok" << std::endl; } { Sample vertices(0, 2); Point p(2); p[0] = 0.0; p[1] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; vertices.add(p); p[0] = 1.5; p[1] = 1.0; vertices.add(p); p[0] = 2.0; p[1] = 1.5; vertices.add(p); p[0] = 0.5; p[1] = 1.5; vertices.add(p); Mesh::IndicesCollection simplicies(5, Indices(3)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[0][2] = 2; simplicies[1][0] = 1; simplicies[1][1] = 2; simplicies[1][2] = 3; simplicies[2][0] = 2; simplicies[2][1] = 3; simplicies[2][2] = 4; simplicies[3][0] = 2; simplicies[3][1] = 4; simplicies[3][2] = 5; simplicies[4][0] = 0; simplicies[4][1] = 2; simplicies[4][2] = 5; Mesh mesh2D(vertices, simplicies); mesh2D.draw().draw("mesh2D"); mesh2D.draw2D().draw("mesh2D"); fullprint << "mesh 2D ok" << std::endl; } { Sample vertices(0, 3); Point p(3); p[0] = 0.0; p[1] = 0.0; p[2] = 0.0; vertices.add(p); p[0] = 0.0; p[1] = 0.0; p[2] = 1.0; vertices.add(p); p[0] = 0.0; p[1] = 1.0; p[2] = 0.0; vertices.add(p); p[0] = 0.0; p[1] = 1.0; p[2] = 1.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; p[2] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; p[2] = 1.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; p[2] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; p[2] = 1.0; vertices.add(p); Mesh::IndicesCollection simplicies(6, Indices(4)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[0][2] = 2; simplicies[0][3] = 4; simplicies[1][0] = 3; simplicies[1][1] = 5; simplicies[1][2] = 6; simplicies[1][3] = 7; simplicies[2][0] = 1; simplicies[2][1] = 2; simplicies[2][2] = 3; simplicies[2][3] = 6; simplicies[3][0] = 1; simplicies[3][1] = 2; simplicies[3][2] = 4; simplicies[3][3] = 6; simplicies[4][0] = 1; simplicies[4][1] = 3; simplicies[4][2] = 5; simplicies[4][3] = 6; simplicies[5][0] = 1; simplicies[5][1] = 4; simplicies[5][2] = 5; simplicies[5][3] = 6; Mesh mesh3D(vertices, simplicies); mesh3D.draw().draw("mesh3D"); SquareMatrix rotation(3); rotation(0, 0) = cos(M_PI / 3.0); rotation(0, 1) = sin(M_PI / 3.0); rotation(1, 0) = -sin(M_PI / 3.0); rotation(1, 1) = cos(M_PI / 3.0); rotation(2, 2) = 1.0; mesh3D.draw3D(true, rotation, true, 0.9).draw("mesh3D_2"); fullprint << "mesh 3D ok" << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Mesh_draw.expout000066400000000000000000000000411307543307100206450ustar00rootroot00000000000000mesh 1D ok mesh 2D ok mesh 3D ok openturns-1.9/lib/test/t_Mesh_std.cxx000066400000000000000000000151251307543307100177710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Mesh for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { { Mesh mesh1D; fullprint << "Default 1D mesh=" << mesh1D << std::endl; } { Sample vertices(0, 1); vertices.add(Point(1, 0.5)); vertices.add(Point(1, 1.5)); vertices.add(Point(1, 2.1)); vertices.add(Point(1, 2.7)); Mesh::IndicesCollection simplicies(3, Indices(2)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[1][0] = 1; simplicies[1][1] = 2; simplicies[2][0] = 2; simplicies[2][1] = 3; Mesh mesh1D(vertices, simplicies); fullprint << "1D mesh=" << mesh1D << std::endl; fullprint << "Is empty? " << mesh1D.isEmpty() << std::endl; fullprint << "vertices=" << mesh1D.getVertices() << std::endl; fullprint << "simplices=" << mesh1D.getSimplices() << std::endl; fullprint << "volume=" << mesh1D.getVolume() << std::endl; fullprint << "First simplex volume=" << mesh1D.computeSimplexVolume(0) << std::endl; Point p(1); p[0] = 1.3; fullprint << "is p=" << p << " in mesh? " << mesh1D.contains(p) << std::endl; { Point point(1, 1.8); fullprint << "Nearest index(" << point << ")=" << mesh1D.getNearestVertexIndex(point) << std::endl; Point coordinates; Indices vertexSimplexIndices = mesh1D.getNearestVertexAndSimplexIndicesWithCoordinates(point, coordinates); fullprint << "Nearest index(" << point << "), simplex and coordinates=" << vertexSimplexIndices << ", " << coordinates << std::endl; } { Point point(1, -1.8); fullprint << "Nearest index(" << point << ")=" << mesh1D.getNearestVertexIndex(point) << std::endl; Point coordinates; Indices vertexSimplexIndices = mesh1D.getNearestVertexAndSimplexIndicesWithCoordinates(point, coordinates); fullprint << "Nearest index(" << point << "), simplex and coordinates=" << vertexSimplexIndices << ", " << coordinates << std::endl; } Sample points(2, 1); points[0] = Point(1, -0.25); points[1] = Point(1, 2.25); fullprint << "Nearest index(" << points << ")=" << mesh1D.getNearestVertexIndex(points) << std::endl; fullprint << "P1 Gram=" << mesh1D.computeP1Gram() << std::endl; } { Sample vertices(0, 2); Point p(2); p[0] = 0.0; p[1] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; vertices.add(p); p[0] = 1.5; p[1] = 1.0; vertices.add(p); p[0] = 2.0; p[1] = 1.5; vertices.add(p); p[0] = 0.5; p[1] = 1.5; vertices.add(p); Mesh::IndicesCollection simplicies(5, Indices(3)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[0][2] = 2; simplicies[1][0] = 1; simplicies[1][1] = 2; simplicies[1][2] = 3; simplicies[2][0] = 2; simplicies[2][1] = 3; simplicies[2][2] = 4; simplicies[3][0] = 2; simplicies[3][1] = 4; simplicies[3][2] = 5; simplicies[4][0] = 0; simplicies[4][1] = 2; simplicies[4][2] = 5; Mesh mesh2D(vertices, simplicies); fullprint << "2D mesh=" << mesh2D << std::endl; Point point(2, 1.8); fullprint << "Nearest index(" << point << ")=" << mesh2D.getNearestVertexIndex(point) << std::endl; Sample points(2, 2); points[0] = Point(2, -0.25); points[1] = Point(2, 2.25); fullprint << "Nearest index(" << points << ")=" << mesh2D.getNearestVertexIndex(points) << std::endl; fullprint << "P1 Gram=" << mesh2D.computeP1Gram() << std::endl; } { Sample vertices(0, 3); Point p(3); p[0] = 0.0; p[1] = 0.0; p[2] = 0.0; vertices.add(p); p[0] = 0.0; p[1] = 0.0; p[2] = 1.0; vertices.add(p); p[0] = 0.0; p[1] = 1.0; p[2] = 0.0; vertices.add(p); p[0] = 0.0; p[1] = 1.0; p[2] = 1.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; p[2] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 0.0; p[2] = 1.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; p[2] = 0.0; vertices.add(p); p[0] = 1.0; p[1] = 1.0; p[2] = 1.0; vertices.add(p); Mesh::IndicesCollection simplicies(6, Indices(4)); simplicies[0][0] = 0; simplicies[0][1] = 1; simplicies[0][2] = 2; simplicies[0][3] = 4; simplicies[1][0] = 3; simplicies[1][1] = 5; simplicies[1][2] = 6; simplicies[1][3] = 7; simplicies[2][0] = 1; simplicies[2][1] = 2; simplicies[2][2] = 3; simplicies[2][3] = 6; simplicies[3][0] = 1; simplicies[3][1] = 2; simplicies[3][2] = 4; simplicies[3][3] = 6; simplicies[4][0] = 1; simplicies[4][1] = 3; simplicies[4][2] = 5; simplicies[4][3] = 6; simplicies[5][0] = 1; simplicies[5][1] = 4; simplicies[5][2] = 5; simplicies[5][3] = 6; Mesh mesh3D(vertices, simplicies); fullprint << "3D mesh=" << mesh3D << std::endl; Point point(3, 1.8); fullprint << "Nearest index(" << point << ")=" << mesh3D.getNearestVertexIndex(point) << std::endl; Sample points(2, 3); points[0] = Point(3, -0.25); points[1] = Point(3, 2.25); fullprint << "Nearest index(" << points << ")=" << mesh3D.getNearestVertexIndex(points) << std::endl; fullprint << "P1 Gram=" << mesh3D.computeP1Gram() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Mesh_std.expout000066400000000000000000000066771307543307100205270ustar00rootroot00000000000000Default 1D mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] simplices=[] 1D mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.5],[1.5],[2.1],[2.7]] simplices=[[0,1],[1,2],[2,3]] Is empty? false vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.5],[1.5],[2.1],[2.7]] simplices=[[0,1],[1,2],[2,3]] volume=2.2 First simplex volume=1 is p=class=Point name=Unnamed dimension=1 values=[1.3] in mesh? true Nearest index(class=Point name=Unnamed dimension=1 values=[1.8])=1 Nearest index(class=Point name=Unnamed dimension=1 values=[1.8]), simplex and coordinates=[1,1], class=Point name=Unnamed dimension=2 values=[0.5,0.5] Nearest index(class=Point name=Unnamed dimension=1 values=[-1.8])=0 Nearest index(class=Point name=Unnamed dimension=1 values=[-1.8]), simplex and coordinates=[0], class=Point name=Unnamed dimension=0 values=[] Nearest index(class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[-0.25],[2.25]])=[0,2] P1 Gram=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.333333,0.166667,0,0,0.166667,0.533333,0.1,0,0,0.1,0.4,0.1,0,0,0.1,0.2] 2D mesh=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[1,0],[1,1],[1.5,1],[2,1.5],[0.5,1.5]] simplices=[[0,1,2],[1,2,3],[2,3,4],[2,4,5],[0,2,5]] Nearest index(class=Point name=Unnamed dimension=2 values=[1.8,1.8])=4 Nearest index(class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-0.25,-0.25],[2.25,2.25]])=[0,4] P1 Gram=class=CovarianceMatrix dimension=6 implementation=class=MatrixImplementation name=Unnamed rows=6 columns=6 values=[0.125,0.0208333,0.0625,0,0,0.0416667,0.0208333,0.0625,0.03125,0.0104167,0,0,0.0625,0.03125,0.166667,0.015625,0.0104167,0.046875,0,0.0104167,0.015625,0.03125,0.00520833,0,0,0,0.0104167,0.00520833,0.0208333,0.00520833,0.0416667,0,0.046875,0,0.00520833,0.09375] 3D mesh=class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=3 data=[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] simplices=[[0,1,2,4],[3,5,6,7],[1,2,3,6],[1,2,4,6],[1,3,5,6],[1,4,5,6]] Nearest index(class=Point name=Unnamed dimension=3 values=[1.8,1.8,1.8])=7 Nearest index(class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=3 data=[[-0.25,-0.25,-0.25],[2.25,2.25,2.25]])=[0,7] P1 Gram=class=CovarianceMatrix dimension=8 implementation=class=MatrixImplementation name=Unnamed rows=8 columns=8 values=[0.00277778,0.00138889,0.00138889,0,0.00138889,0,0,0,0.00138889,0.0138889,0.00416667,0.00277778,0.00416667,0.00277778,0.00555556,0,0.00138889,0.00416667,0.00833333,0.00138889,0.00277778,0,0.00277778,0,0,0.00277778,0.00138889,0.00833333,0,0.00277778,0.00416667,0.00138889,0.00138889,0.00416667,0.00277778,0,0.00833333,0.00138889,0.00277778,0,0,0.00277778,0,0.00277778,0.00138889,0.00833333,0.00416667,0.00138889,0,0.00555556,0.00277778,0.00416667,0.00277778,0.00416667,0.0138889,0.00138889,0,0,0,0.00138889,0,0.00138889,0.00138889,0.00277778] openturns-1.9/lib/test/t_MetaModelValidation_std.cxx000066400000000000000000000121131307543307100227510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of FunctionalChaosAlgoritm class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { PlatformInfo::SetNumericalPrecision(3); // Problem parameters UnsignedInteger dimension = 3; Scalar a = 7.0; Scalar b = 0.1; // Create the Ishigami function Description inputVariables(dimension); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description outputVariables(1); outputVariables[0] = "y"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + (" << a << ") * (sin(xi2)) ^ 2 + (" << b << ") * xi3^4 * sin(xi1)"); Function model(inputVariables, outputVariables, formula); // Create the input distribution Collection marginals(dimension); marginals[0] = Uniform(-M_PI, M_PI); marginals[1] = Uniform(-M_PI, M_PI); marginals[2] = Uniform(-M_PI, M_PI); ComposedDistribution distribution(marginals); // Fix sampling size const UnsignedInteger samplingSize = 100; // Get input & output sample LHSExperiment lhs(distribution, samplingSize); Sample inputSample = lhs.generate(); Sample outputSample = model(inputSample); // Validation of results on independent samples const UnsignedInteger validationSize = 10; Sample inputValidation = distribution.getSample(validationSize); Sample outputValidation = model(inputValidation); // 1) SPC algorithm // Create the orthogonal basis Collection polynomialCollection(dimension, LegendreFactory()); EnumerateFunction enumerateFunction(dimension); OrthogonalProductPolynomialFactory productBasis(polynomialCollection, enumerateFunction); // Create the adaptive strategy UnsignedInteger degree = 8; UnsignedInteger basisSize = enumerateFunction.getStrataCumulatedCardinal(degree); AdaptiveStrategy adaptiveStrategy = FixedStrategy(productBasis, basisSize); // Select the fitting algorithm FittingAlgorithm fittingAlgorithm = KFold(); // LSMSF LeastSquaresMetaModelSelectionFactory leastSquaresFactory(LARS(), fittingAlgorithm); // Projection strategy LeastSquaresStrategy projectionStrategy(inputSample, outputSample, leastSquaresFactory); FunctionalChaosAlgorithm algo(inputSample, outputSample, distribution, adaptiveStrategy, projectionStrategy); // Reinitialize the RandomGenerator to see the effect of the sampling method only RandomGenerator::SetSeed(0); algo.run(); // Get the results FunctionalChaosResult result = algo.getResult(); // MetaModelValidation - SPC MetaModelValidation metaModelValidationSPC(inputValidation, outputValidation, result.getMetaModel()); fullprint << "Sparse chaos scoring" << std::endl; fullprint << "Q2 = " << std::setprecision(PlatformInfo::GetNumericalPrecision()) << std::fixed << metaModelValidationSPC.computePredictivityFactor() << std::endl; fullprint << "Residual sample = " << metaModelValidationSPC.getResidualSample() << std::endl; // 2) Kriging algorithm // KrigingAlgorithm Basis basis(QuadraticBasisFactory(dimension).build()); // model computed Point scale(3); scale[0] = 1.933; scale[1] = 1.18; scale[2] = 1.644; Point amplitude(1, 10.85); CovarianceModel covarianceModel = GeneralizedExponential(scale, amplitude, 2.0); KrigingAlgorithm algo2(inputSample, outputSample, covarianceModel, basis, true); algo2.setOptimizeParameters(false); algo2.run(); KrigingResult result2 = algo2.getResult(); // MetaModelValidation - KG MetaModelValidation metaModelValidationKG(inputValidation, outputValidation, result2.getMetaModel()); fullprint << "Kriging scoring" << std::endl; fullprint << "Q2 = " << std::setprecision(PlatformInfo::GetNumericalPrecision()) << std::fixed << metaModelValidationKG.computePredictivityFactor() << std::endl; PlatformInfo::SetNumericalPrecision(2); fullprint << "Residual sample = " << metaModelValidationKG.getResidualSample() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MetaModelValidation_std.expout000066400000000000000000000007741307543307100235050ustar00rootroot00000000000000Sparse chaos scoring Q2 = 1.000 Residual sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y] data=[[0.0413],[-0.0962],[0.0821],[0.0285],[-0.0101],[0.0476],[0.0148],[0.00718],[-0.0501],[0.114]] Kriging scoring Q2 = 0.956 Residual sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y] data=[[0.82],[-0.065],[-2.1],[0.31],[-0.066],[0.29],[0.64],[-1],[0.35],[0.31]] openturns-1.9/lib/test/t_MethodBoundEvaluation_std.cxx000066400000000000000000000027401307543307100233340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MethodBoundEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Normal distribution(0, 1.0); Function function = bindMethod ( distribution, &Normal::computeDDF, 1, 1 ); Point p(1, 1.0); fullprint << "Normal DDF=" << distribution.computeDDF(p) << std::endl; fullprint << "bind DDF =" << function(p)[0] << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MethodBoundEvaluation_std.expout000066400000000000000000000001301307543307100240450ustar00rootroot00000000000000Normal DDF=class=Point name=Unnamed dimension=1 values=[-0.241971] bind DDF =-0.241971 openturns-1.9/lib/test/t_MinCopula_std.cxx000066400000000000000000000125171307543307100207660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MinCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 3; MinCopula copula(dim); copula.setName("a min copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MinCopula_std.expout000066400000000000000000000061151307543307100215050ustar00rootroot00000000000000Copula class=MinCopula name=a min copula dimension=3 Copula MinCopula(dim = 3) Mean class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=3 values=[0.629877,0.629877,0.629877] oneSample=class=Sample name=a min copula implementation=class=SampleImplementation name=a min copula size=10 dimension=3 description=[X0,X1,X2] data=[[0.882805,0.882805,0.882805],[0.135276,0.135276,0.135276],[0.0325028,0.0325028,0.0325028],[0.347057,0.347057,0.347057],[0.969423,0.969423,0.969423],[0.92068,0.92068,0.92068],[0.50304,0.50304,0.50304],[0.0632061,0.0632061,0.0632061],[0.292757,0.292757,0.292757],[0.714382,0.714382,0.714382]] anotherSample mean=class=Point name=Unnamed dimension=3 values=[0.503282,0.503282,0.503282] anotherSample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0847362,0.0847362,0.0847362,0.0847362,0.0847362,0.0847362,0.0847362,0.0847362,0.0847362] point= class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] ddf=class=Point name=Unnamed dimension=3 values=[0,0,0] ddf (FD)=class=Point name=Unnamed dimension=3 values=[0,0,0] pdf=0.2 cdf=0.2 Survival =0.8 Survival (ref)=0.8 Inverse survival=class=Point name=Unnamed dimension=3 values=[0.05,0.05,0.05] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] CDF(quantile)=0.5 covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0833333,0.0833333,0.0833333,0.0833333,0.0833333,0.0833333,0.0833333,0.0833333] correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,1,1,1,1,1,1,1] spearman=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,1,1,1,1,1,1,1] kendall=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,1,1,1,1,1,1,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.876152] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.445759] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.492964] indices=[1,0] margins=class=MinCopula name=MinCopula dimension=2 margins PDF=0.25 margins CDF=0.25 margins quantile=class=Point name=Unnamed dimension=2 values=[0.95,0.95] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.746851,0.746851] openturns-1.9/lib/test/t_MinMax_computation.cxx000066400000000000000000000044341307543307100220370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Box for deterministic MinMax computation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Load the physical model Description inputVariables(4); inputVariables[0] = "E"; inputVariables[1] = "F"; inputVariables[2] = "L"; inputVariables[3] = "I"; Description outputVariables(1); outputVariables[0] = "d"; Description formula(1); formula[0] = "-F*L^3/(3*E*I)"; Function model(inputVariables, outputVariables, formula); UnsignedInteger inputDimension = model.getInputDimension(); Point levels(inputDimension); levels[0] = 5.; levels[1] = 5.; levels[2] = 5.; levels[3] = 5.; Box myPlane(levels); Sample sample(myPlane.generate()); // Then, scale and move the cube to sample around the point of interrest Point point(inputDimension); point[0] = 2.1e11; point[1] = 1e3; point[2] = 1.5; point[3] = 2.e-6; sample *= (0.2 * point); sample += (0.9 * point); // Compute the model over the sample Sample response(model(sample)); // Compute the min and max values taken by the model fullprint << "Min=" << response.getMin()[0] << std::endl; fullprint << "Max=" << response.getMax()[0] << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MinMax_computation.expout000066400000000000000000000000371307543307100225540ustar00rootroot00000000000000Min=-0.0048416 Max=-0.00145241 openturns-1.9/lib/test/t_MixtureClassifier_std.cxx000066400000000000000000000047771307543307100225520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MixtureClassifier for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Create a collection of distribution Mixture::DistributionCollection aCollection; aCollection.add( Normal(0., 4) ); aCollection.add( Uniform(5., 7.) ); aCollection.add( Triangular(7., 8., 9.) ); // Instanciate one distribution object Mixture distribution(aCollection, Point(aCollection.getSize(), 1.0)); fullprint << "mixture=" << distribution.__str__() << std::endl; Classifier classifier(MixtureClassifier(distribution).clone()); Sample inS; inS.add(Point(1, 2.)); inS.add(Point(1, 4.)); inS.add(Point(1, 6.)); inS.add(Point(1, 8.)); for (UnsignedInteger i = 0; i < inS.getSize(); ++ i) { fullprint << "inP=" << Point(inS[i]).__str__() << " class=" << classifier.classify(inS[i]) << std::endl; } fullprint << "classes=" << classifier.classify(inS) << std::endl; for (UnsignedInteger i = 0; i < inS.getSize(); ++ i) { for (UnsignedInteger j = 0; j < aCollection.getSize(); ++ j ) { fullprint << "inP=" << Point(inS[i]).__str__() << " grade|" << j << "=" << classifier.grade(inS[i], j) << std::endl; } } for (UnsignedInteger j = 0; j < aCollection.getSize(); ++ j ) { fullprint << "grades|" << j << "=" << Point(classifier.grade(inS, Indices(inS.getSize(), j))).__str__() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MixtureClassifier_std.expout000066400000000000000000000012521307543307100232550ustar00rootroot00000000000000mixture=Mixture((w = 0.333333, d = Normal(mu = 0, sigma = 4)), (w = 0.333333, d = Uniform(a = 5, b = 7)), (w = 0.333333, d = Triangular(a = 7, m = 8, b = 9))) inP=[2] class=0 inP=[4] class=0 inP=[6] class=1 inP=[8] class=2 classes=[0,0,1,2] inP=[2] grade|0=-3.52885 inP=[2] grade|1=-709.495 inP=[2] grade|2=-709.495 inP=[4] grade|0=-3.90385 inP=[4] grade|1=-709.495 inP=[4] grade|2=-709.495 inP=[6] grade|0=-4.52885 inP=[6] grade|1=-1.79176 inP=[6] grade|2=-709.495 inP=[8] grade|0=-5.40385 inP=[8] grade|1=-709.495 inP=[8] grade|2=-1.09861 grades|0=[-3.52885,-3.90385,-4.52885,-5.40385] grades|1=[-709.495,-709.495,-1.79176,-709.495] grades|2=[-709.495,-709.495,-709.495,-1.09861] openturns-1.9/lib/test/t_Mixture_std.cxx000066400000000000000000000217011307543307100205270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Mixture for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { ResourceMap::Set("Distribution-parallel", "1"); TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // First, 1D case { Mixture::DistributionCollection atoms(3); atoms[0] = Normal(-3.0, 1.0); atoms[0].setWeight(1.0); atoms[1] = Normal(1.0, 2.0); atoms[1].setWeight(2.0); atoms[2] = Normal(3.0, 3.0); atoms[2].setWeight(4.0); Mixture distribution(atoms); Mixture::PointWithDescriptionCollection parameters(distribution.getParametersCollection()); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // get weights used Point weights(distribution.getWeights()); fullprint << "weights=" << weights << std::endl; // Fix new weights weights[0] = 0.2; weights[1] = 0.5; //set item distribution.setWeights(weights); fullprint << "New weights=" << distribution.getWeights() << std::endl; } UnsignedInteger dimension = 3; Point meanPoint(dimension, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dimension, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dimension); for (UnsignedInteger i = 1; i < dimension; i++) { R(i, i - 1) = 0.5; } // Create a collection of distribution Mixture::DistributionCollection aCollection; aCollection.add( Normal(meanPoint, sigma, R) ); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, R) ); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, R) ); // Instanciate one distribution object Mixture distribution(aCollection, Point(aCollection.getSize(), 2.0)); fullprint << "Distribution " << distribution << std::endl; distribution = Mixture(aCollection); fullprint << "Distribution " << distribution.__str__() << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 1000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; if (distribution.getDimension() == 1) { size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } } // Define a point Point point( dimension, 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Point ddfFD(dimension); for (UnsignedInteger i = 0; i < dimension; i++) { Point left(point); left[i] += eps; Point right(point); right[i] -= eps; ddfFD[i] = (distribution.computePDF(left) - distribution.computePDF(right)) / (2.0 * eps); } fullprint << "ddf (FD)=" << ddfFD << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; if (dimension == 1) { fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; } Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival =" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; if (dimension == 1) { Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; } Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; if (distribution.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; // CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); // fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; Mixture::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; // Constructor with separate weights. Also check small weights removal Point weights; Mixture::DistributionCollection atoms; weights.add(1.0e-20); atoms.add(Normal(1.0, 1.0)); weights.add(2.5); atoms.add(Normal(2.0, 2.0)); weights.add(32.0); atoms.add(Normal(3.0, 3.0)); Mixture newMixture(atoms, weights); fullprint << "newMixture pdf=" << newMixture.computePDF(2.5) << std::endl; fullprint << "atoms kept in mixture=" << newMixture.getDistributionCollection() << std::endl; fullprint << "newMixture=" << newMixture.__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Mixture_std.expout000066400000000000000000000112371307543307100212540ustar00rootroot00000000000000parameters=[[w_0 : 0.142857, mean_0 : -3, standard_deviation_0 : 1, w_1 : 0.285714, mean_0 : 1, standard_deviation_0 : 2, w_2 : 0.571429, mean_0 : 3, standard_deviation_0 : 3]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.57143] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[13.1429] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[60.2857] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[503.429] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[3610.86] Standard representative=Mixture((w = 0.142857, d = Normal(mu = -3, sigma = 1)), (w = 0.285714, d = Normal(mu = 1, sigma = 2)), (w = 0.571429, d = Normal(mu = 3, sigma = 3))) weights=class=Point name=Unnamed dimension=3 values=[0.142857,0.285714,0.571429] New weights=class=Point name=Unnamed dimension=3 values=[0.157303,0.393258,0.449438] Distribution class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Distribution Mixture((w = 0.333333, d = Normal(mu = [0.5,-0.5,1], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]])), (w = 0.333333, d = Normal(mu = [1.5,0.5,2], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]])), (w = 0.333333, d = Normal(mu = [2.5,1.5,3], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]]))) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=3 values=[2.07328,-1.03125,2.18976] oneSample first=class=Point name=Unnamed dimension=3 values=[-1.86277,-0.862642,2.91223] last=class=Point name=Unnamed dimension=3 values=[1.56533,-1.10765,2.76013] mean=class=Point name=Unnamed dimension=3 values=[1.64038,0.699193,2.03941] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.88439,3.99293,0.644831,3.99293,9.41608,2.09091,0.644831,2.09091,1.58061] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] ddf =class=Point name=Unnamed dimension=3 values=[0.00119456,-0.00197254,0.00476249] ddf (FD)=class=Point name=Unnamed dimension=3 values=[0.00119456,-0.00197254,0.00476249] log pdf=-5.13516 pdf =0.00588609 cdf=0.11511 ccdf=0.88489 survival =0.316559 Inverse survival=class=Point name=Unnamed dimension=3 values=[-2.96551,-5.93727,-0.617253] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=3 values=[5.96551,6.93727,4.61725] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,3.66667,0.666667,3.66667,9.66667,2.16667,0.666667,2.16667,1.66667] correlation=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.545921,0.239046,0.545921,1,0.539796,0.239046,0.539796,1] parameters=[[mean_0 : 0.5, standard_deviation_0 : 2],[mean_0 : 1.5, standard_deviation_0 : 2],[mean_0 : 2.5, standard_deviation_0 : 2],[atom_0_R_1_0 : 0.5, atom_0_R_2_0 : 0, atom_0_R_2_1 : 0.5, atom_1_R_1_0 : 0.5, atom_1_R_2_0 : 0, atom_1_R_2_1 : 0.5, atom_2_R_1_0 : 0.5, atom_2_R_2_0 : 0, atom_2_R_2_1 : 0.5]] newMixture pdf=0.135653 atoms kept in mixture=[Normal(mu = 2, sigma = 2),Normal(mu = 3, sigma = 3)] newMixture=Mixture((w = 0.0724638, d = Normal(mu = 2, sigma = 2)), (w = 0.927536, d = Normal(mu = 3, sigma = 3))) openturns-1.9/lib/test/t_MonomialFunctionFactory_std.cxx000066400000000000000000000034001307543307100236770ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MonomialFunctionFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Define factory MonomialFunctionFactory factory; fullprint << "factory = " << factory << std::endl; fullprint << "Build functions for degrees in 1..9" << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "P_" << i << "=" << factory.build(i).__str__() << std::endl; } // Build as Monomial factory fullprint << "Build as MonomialFunction for degrees in 1..9" << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { fullprint << "P_" << i << "=" << factory.buildAsMonomialFunction(i) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonomialFunctionFactory_std.expout000066400000000000000000000011751307543307100244300ustar00rootroot00000000000000factory = class=MonomialFunctionFactory Build functions for degrees in 1..9 P_0=[x] -> 1 P_1=[x] --> x P_2=[x] --> x^2 P_3=[x] --> x^3 P_4=[x] --> x^4 P_5=[x] --> x^5 P_6=[x] --> x^6 P_7=[x] --> x^7 P_8=[x] --> x^8 P_9=[x] --> x^9 Build as MonomialFunction for degrees in 1..9 P_0=class=MonomialFunction degree=0 P_1=class=MonomialFunction degree=1 P_2=class=MonomialFunction degree=2 P_3=class=MonomialFunction degree=3 P_4=class=MonomialFunction degree=4 P_5=class=MonomialFunction degree=5 P_6=class=MonomialFunction degree=6 P_7=class=MonomialFunction degree=7 P_8=class=MonomialFunction degree=8 P_9=class=MonomialFunction degree=9 openturns-1.9/lib/test/t_MonomialFunction_std.cxx000066400000000000000000000035431307543307100223570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MonomialFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Default constructor: null polynomial MonomialFunction P0; Scalar point = 1.2; fullprint << "P0 :" << P0.__str__() << std::endl; fullprint << "P0(" << point << ")=" << P0(point) << std::endl; // Standard constructor : set degree/coefficients for (UnsignedInteger degree = 1; degree < 6; ++ degree) { fullprint << std::endl; MonomialFunction P(degree); // Print P + P operators fullprint << "P :" << P.__str__() << std::endl; fullprint << "P(1) = " << P(1.0) << ", dP(1) = " << P.gradient(1.0) << ", d^2P(1) = " << P.hessian(1.0) << std::endl; // Print Q + Q operators } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonomialFunction_std.expout000066400000000000000000000004141307543307100230730ustar00rootroot00000000000000P0 :[x] -> 1 P0(1.2)=1 P :[x] --> x P(1) = 1, dP(1) = 1, d^2P(1) = 0 P :[x] --> x^2 P(1) = 1, dP(1) = 2, d^2P(1) = 2 P :[x] --> x^3 P(1) = 1, dP(1) = 3, d^2P(1) = 6 P :[x] --> x^4 P(1) = 1, dP(1) = 4, d^2P(1) = 12 P :[x] --> x^5 P(1) = 1, dP(1) = 5, d^2P(1) = 20 openturns-1.9/lib/test/t_MonteCarloExperiment_std.cxx000066400000000000000000000030641307543307100232000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class MonteCarloExperiment for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Normal distribution(4); UnsignedInteger size = 10; MonteCarloExperiment myPlane(distribution, size); fullprint << "myPlane = " << myPlane << std::endl; Point weights(0); Sample sample(myPlane.generateWithWeights(weights)); fullprint << "sample = " << sample << std::endl; fullprint << "weights = " << weights << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonteCarloExperiment_std.expout000066400000000000000000000017731307543307100237270ustar00rootroot00000000000000myPlane = class=MonteCarloExperiment name=Unnamed distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 sample = class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=10 dimension=4 description=[X0,X1,X2,X3] data=[[0.608202,-1.26617,-0.438266,1.20548],[-2.18139,0.350042,-0.355007,1.43725],[0.810668,0.793156,-0.470526,0.261018],[-2.29006,-1.28289,-1.31178,-0.0907838],[0.995793,-0.139453,-0.560206,0.44549],[0.322925,0.445785,-1.03808,-0.856712],[0.473617,-0.125498,0.351418,1.78236],[0.0702074,-0.781366,-0.721533,-0.241223],[-1.78796,0.40136,1.36783,1.00434],[0.741548,-0.0436123,0.539345,0.29995]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] openturns-1.9/lib/test/t_MonteCarloLHS_std.cxx000066400000000000000000000060361307543307100215100ustar00rootroot00000000000000#include // OT includes #include using namespace OT; int main(int argc, char **argv) { const UnsignedInteger dimension = 3; const UnsignedInteger size = 25; ComposedDistribution::DistributionCollection coll(dimension, Uniform(0.0, 1.0)); ComposedDistribution distribution(coll); LHSExperiment lhs(distribution, size); lhs.setRandomShift(false); // centered lhs.setAlwaysShuffle(true); // randomized // print lhs std::cout << lhs << std::endl; std::cout << "Bounds of uniform distributions=" << distribution.getRange() << std::endl; // Generate design without optimization Sample design(lhs.generate()); std::cout << "design=" << design << std::endl; // Define space fillings SpaceFillingPhiP spaceFillingPhiP; SpaceFillingC2 spaceFillingC2; SpaceFillingMinDist spaceFillingMinDist; // Print the criteria on this design std::cout << "PhiP=" << spaceFillingPhiP.evaluate(design) << ", C2=" << spaceFillingC2.evaluate(design) << ", MinDist=" << spaceFillingMinDist.evaluate(design) << std::endl; // -------------------------------------------------- // ------------ MonteCarlo algorithm ------------- // -------------------------------------------------- // RandomBruteForce MonteCarlo with N designs const UnsignedInteger N = 1000; // 1) LHS with C2 optimization MonteCarloLHS optimalMC_C2(lhs, N, spaceFillingC2); // print lhs std::cout << "optimal lhs=" << optimalMC_C2 << std::endl; const Sample design_C2(optimalMC_C2.generate()); LHSResult result_C2(optimalMC_C2.getResult()); std::cout << "Best design with MonteCarlo and C2 space filling=" << design_C2 << std::endl; std::cout << "Final criteria: C2=" << result_C2.getC2() << ", PhiP=" << result_C2.getPhiP() << ", MinDist=" << result_C2.getMinDist() << std::endl; // 2) LHS with PhiP optimization MonteCarloLHS optimalMC_PhiP(lhs, N, spaceFillingPhiP); // print lhs std::cout << "optimal lhs=" << optimalMC_PhiP << std::endl; Sample design_PhiP(optimalMC_PhiP.generate()); LHSResult result_PhiP(optimalMC_PhiP.getResult()); std::cout << "Best design with MonteCarlo and PhiP space filling=" << design_PhiP << std::endl; std::cout << "Final criteria: C2=" << result_PhiP.getC2() << ", PhiP=" << result_PhiP.getPhiP() << ", MinDist=" << result_PhiP.getMinDist() << std::endl; // 3) LHS with MinDist optimization (=mindist optim) MonteCarloLHS optimalMC_MinDist(lhs, N, spaceFillingMinDist); // print lhs std::cout << "optimal lhs=" << optimalMC_MinDist << std::endl; Sample design_MinDist(optimalMC_MinDist.generate()); LHSResult result_MinDist(optimalMC_MinDist.getResult()); std::cout << "Best design with MonteCarlo and MinDist space filling=" << design_MinDist << std::endl; std::cout << "Final criteria: C2=" << result_MinDist.getC2() << ", PhiP=" << result_MinDist.getPhiP() << ", MinDist=" << result_MinDist.getMinDist() << std::endl; return 0; } openturns-1.9/lib/test/t_MonteCarloLHS_std.expout000066400000000000000000000115701307543307100222310ustar00rootroot00000000000000LHSExperiment(distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1, size25, always shuffle=true, random shift=false Bounds of uniform distributions=[0, 1] [0, 1] [0, 1] design= [ X0 X1 X2 ] 0 : [ 0.18 0.86 0.26 ] 1 : [ 0.66 0.22 0.62 ] 2 : [ 0.98 0.34 0.86 ] 3 : [ 0.7 0.26 0.74 ] 4 : [ 0.94 0.54 0.54 ] 5 : [ 0.22 0.66 0.5 ] 6 : [ 0.86 0.9 0.1 ] 7 : [ 0.74 0.1 0.38 ] 8 : [ 0.46 0.78 0.3 ] 9 : [ 0.82 0.7 0.82 ] 10 : [ 0.26 0.62 0.02 ] 11 : [ 0.54 0.06 0.34 ] 12 : [ 0.1 0.58 0.7 ] 13 : [ 0.9 0.74 0.14 ] 14 : [ 0.02 0.3 0.78 ] 15 : [ 0.58 0.14 0.46 ] 16 : [ 0.78 0.46 0.94 ] 17 : [ 0.3 0.42 0.9 ] 18 : [ 0.5 0.5 0.58 ] 19 : [ 0.38 0.82 0.06 ] 20 : [ 0.42 0.02 0.98 ] 21 : [ 0.14 0.98 0.42 ] 22 : [ 0.34 0.18 0.18 ] 23 : [ 0.06 0.94 0.22 ] 24 : [ 0.62 0.38 0.66 ] PhiP=7.53851, C2=0.0804948, MinDist=0.132665 optimal lhs=class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true simulation size=1000 Best design with MonteCarlo and C2 space filling= [ X0 X1 X2 ] 0 : [ 0.26 0.22 0.66 ] 1 : [ 0.78 0.74 0.58 ] 2 : [ 0.18 0.9 0.82 ] 3 : [ 0.5 0.7 0.22 ] 4 : [ 0.62 0.98 0.1 ] 5 : [ 0.7 0.46 0.54 ] 6 : [ 0.22 0.66 0.3 ] 7 : [ 0.54 0.58 0.7 ] 8 : [ 0.46 0.34 0.94 ] 9 : [ 0.9 0.62 0.9 ] 10 : [ 0.74 0.38 0.98 ] 11 : [ 0.94 0.06 0.78 ] 12 : [ 0.58 0.5 0.26 ] 13 : [ 0.34 0.54 0.06 ] 14 : [ 0.42 0.02 0.46 ] 15 : [ 0.66 0.82 0.86 ] 16 : [ 0.38 0.18 0.14 ] 17 : [ 0.82 0.26 0.34 ] 18 : [ 0.1 0.42 0.5 ] 19 : [ 0.02 0.3 0.18 ] 20 : [ 0.98 0.78 0.42 ] 21 : [ 0.06 0.94 0.62 ] 22 : [ 0.86 0.1 0.02 ] 23 : [ 0.14 0.14 0.74 ] 24 : [ 0.3 0.86 0.38 ] Final criteria: C2=0.0482619, PhiP=6.06339, MinDist=0.164924 optimal lhs=class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 simulation size=1000 Best design with MonteCarlo and PhiP space filling= [ X0 X1 X2 ] 0 : [ 0.7 0.5 0.42 ] 1 : [ 0.66 0.46 0.62 ] 2 : [ 0.46 0.94 0.02 ] 3 : [ 0.42 0.18 0.18 ] 4 : [ 0.3 0.14 0.46 ] 5 : [ 0.74 0.74 0.14 ] 6 : [ 0.22 0.86 0.3 ] 7 : [ 0.94 0.22 0.82 ] 8 : [ 0.98 0.1 0.38 ] 9 : [ 0.38 0.9 0.94 ] 10 : [ 0.5 0.62 0.7 ] 11 : [ 0.58 0.02 0.86 ] 12 : [ 0.14 0.26 0.66 ] 13 : [ 0.62 0.06 0.26 ] 14 : [ 0.86 0.98 0.58 ] 15 : [ 0.26 0.58 0.5 ] 16 : [ 0.54 0.38 0.78 ] 17 : [ 0.78 0.42 0.1 ] 18 : [ 0.1 0.3 0.9 ] 19 : [ 0.82 0.66 0.74 ] 20 : [ 0.18 0.82 0.98 ] 21 : [ 0.34 0.7 0.22 ] 22 : [ 0.02 0.78 0.34 ] 23 : [ 0.9 0.34 0.54 ] 24 : [ 0.06 0.54 0.06 ] Final criteria: C2=0.054637, PhiP=4.84912, MinDist=0.207846 optimal lhs=class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingMinDist minimization=false simulation size=1000 Best design with MonteCarlo and MinDist space filling= [ X0 X1 X2 ] 0 : [ 0.94 0.82 0.42 ] 1 : [ 0.98 0.06 0.82 ] 2 : [ 0.62 0.26 0.7 ] 3 : [ 0.82 0.1 0.38 ] 4 : [ 0.38 0.62 0.74 ] 5 : [ 0.86 0.22 0.66 ] 6 : [ 0.54 0.34 0.1 ] 7 : [ 0.3 0.9 0.02 ] 8 : [ 0.22 0.7 0.9 ] 9 : [ 0.78 0.42 0.86 ] 10 : [ 0.9 0.3 0.46 ] 11 : [ 0.06 0.46 0.94 ] 12 : [ 0.18 0.94 0.78 ] 13 : [ 0.42 0.58 0.18 ] 14 : [ 0.58 0.74 0.54 ] 15 : [ 0.34 0.78 0.34 ] 16 : [ 0.14 0.54 0.3 ] 17 : [ 0.74 0.66 0.14 ] 18 : [ 0.26 0.02 0.5 ] 19 : [ 0.02 0.86 0.22 ] 20 : [ 0.1 0.5 0.62 ] 21 : [ 0.7 0.98 0.06 ] 22 : [ 0.46 0.14 0.58 ] 23 : [ 0.66 0.18 0.26 ] 24 : [ 0.5 0.38 0.98 ] Final criteria: C2=0.0693607, PhiP=4.67981, MinDist=0.215407 openturns-1.9/lib/test/t_MonteCarlo_draw.cxx000066400000000000000000000051751307543307100213070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of MonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ MonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(500); myAlgo.setBlockSize(10); myAlgo.setMaximumCoefficientOfVariation(0.05); fullprint << "MonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ SimulationResult result(myAlgo.getResult()); fullprint << "MonteCarlo result=" << result << std::endl; /* Draw the convergence graph */ Graph convergenceGraph(myAlgo.drawProbabilityConvergence()); convergenceGraph.draw("convergenceMonteCarlo.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonteCarlo_draw.expout000066400000000000000000000027721307543307100220310ustar00rootroot00000000000000MonteCarlo=class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=500 maximumCoefficientOfVariation=0.05 maximumStandardDeviation=0 blockSize=10 MonteCarlo result=probabilityEstimate=1.415730e-01 varianceEstimate=5.008983e-05 standard deviation=7.08e-03 coefficient of variation=5.00e-02 confidenceLength(0.95)=2.77e-02 outerSampling=267 blockSize=10 openturns-1.9/lib/test/t_MonteCarlo_sensitivity.cxx000066400000000000000000000053041307543307100227360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of MonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); myFunction.enableHistory(); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ MonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(500); myAlgo.setBlockSize(10); myAlgo.setMaximumCoefficientOfVariation(0.05); fullprint << "MonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); SimulationResult result(myAlgo.getResult()); fullprint << "MonteCarlo result=" << result << std::endl; /* Compute sensitivity informations */ fullprint << "mean point in event domain=" << result.getMeanPointInEventDomain() << std::endl; fullprint << "importance factors=" << result.getImportanceFactors() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonteCarlo_sensitivity.expout000066400000000000000000000033601307543307100234600ustar00rootroot00000000000000MonteCarlo=class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=500 maximumCoefficientOfVariation=0.05 maximumStandardDeviation=0 blockSize=10 MonteCarlo result=probabilityEstimate=1.415730e-01 varianceEstimate=5.008983e-05 standard deviation=7.08e-03 coefficient of variation=5.00e-02 confidenceLength(0.95)=2.77e-02 outerSampling=267 blockSize=10 mean point in event domain=class=Point name=Unnamed dimension=4 values=[49.984,2.30321,10.6115,4.39049] importance factors=class=PointWithDescription name=Unnamed dimension=4 description=[X0,X1,X2,X3] values=[0.000105128,0.694893,0.153,0.152001] openturns-1.9/lib/test/t_MonteCarlo_std.cxx000066400000000000000000000066051307543307100211430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of MonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; static Bool stop(void * p) { std::cerr << "-- stop?" << std::endl; return false; } static void progress(Scalar percent, void * p) { std::cerr << "-- progress=" << percent << "%" << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ MonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.1); myAlgo.setProgressCallback(&progress); myAlgo.setStopCallback(&stop); fullprint << "MonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "MonteCarlo result=" << myAlgo.getResult() << std::endl; fullprint << "Confidence length at level 99%=" << myAlgo.getResult().getConfidenceLength(0.99) << std::endl; fullprint << "Confidence length at level 80%=" << myAlgo.getResult().getConfidenceLength(0.8) << std::endl; /* Use the standard deviation as a stoping rule */ myAlgo = MonteCarlo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.0); myAlgo.setMaximumStandardDeviation(0.1); fullprint << "MonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "MonteCarlo result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MonteCarlo_std.expout000066400000000000000000000060761307543307100216670ustar00rootroot00000000000000MonteCarlo=class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 MonteCarlo result=probabilityEstimate=1.465054e-01 varianceEstimate=2.109726e-04 standard deviation=1.45e-02 coefficient of variation=9.91e-02 confidenceLength(0.95)=5.69e-02 outerSampling=186 blockSize=4 Confidence length at level 99%=0.0748273 Confidence length at level 80%=0.0372288 MonteCarlo=class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0 maximumStandardDeviation=0.1 blockSize=4 MonteCarlo result=probabilityEstimate=1.500000e-01 varianceEstimate=8.250000e-03 standard deviation=9.08e-02 coefficient of variation=6.06e-01 confidenceLength(0.95)=3.56e-01 outerSampling=5 blockSize=4 openturns-1.9/lib/test/t_MultiStart_std.cxx000066400000000000000000000053031307543307100212020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NLopt for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inVars; inVars.add("x"); inVars.add("y"); Description outVar(1, "z"); Description formula(1, "3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3"); Function model(inVars, outVar, formula); UnsignedInteger dim = model.getInputDimension(); Point startingPoint(dim); Interval bounds(Point(dim, -3.0), Point(dim, 3.0)); // problem OptimizationProblem problem(model); problem.setBounds(bounds); // solver TNC solver(problem); solver.setStartingPoint(startingPoint); // run locally OptimizationAlgorithm algo = solver; algo.run(); OptimizationResult result(algo.getResult()); fullprint << "local search x*=" << result.getOptimalPoint() << " f(x*)=" << result.getOptimalValue() << std::endl; // multistart Normal distribution(dim); LHSExperiment experiment(distribution, 20); Sample startingPoints(experiment.generate()); algo = MultiStart(solver, startingPoints); algo.run(); result = algo.getResult(); fullprint << "multistart x*=" << result.getOptimalPoint() << " f(x*)=" << result.getOptimalValue() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MultiStart_std.expout000066400000000000000000000004321307543307100217220ustar00rootroot00000000000000local search x*=class=Point name=Unnamed dimension=2 values=[0.296446,0.320196] f(x*)=class=Point name=Unnamed dimension=1 values=[-0.0649359] multistart x*=class=Point name=Unnamed dimension=2 values=[0.228279,-1.62553] f(x*)=class=Point name=Unnamed dimension=1 values=[-6.55113] openturns-1.9/lib/test/t_MultinomialFactory_std.cxx000066400000000000000000000043321307543307100227150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Multinomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Multinomial distribution(5, Point(3, 0.25)); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); MultinomialFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; Multinomial estimatedMultinomial(factory.buildAsMultinomial(sample)); fullprint << "Multinomial =" << distribution << std::endl; fullprint << "Estimated multinomial=" << estimatedMultinomial << std::endl; estimatedMultinomial = factory.buildAsMultinomial(); fullprint << "Default multinomial=" << estimatedMultinomial << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_MultinomialFactory_std.expout000066400000000000000000000014511307543307100234360ustar00rootroot00000000000000Distribution =class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 Estimated distribution=class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.2527,0.24672,0.25122] n=5 Default distribution=class=Multinomial name=Multinomial dimension=1 p=class=Point name=Unnamed dimension=1 values=[0.5] n=1 Multinomial =class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 Estimated multinomial=class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.2527,0.24672,0.25122] n=5 Default multinomial=class=Multinomial name=Multinomial dimension=1 p=class=Point name=Unnamed dimension=1 values=[0.5] n=1 openturns-1.9/lib/test/t_Multinomial_std.cxx000066400000000000000000000111601307543307100213620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Multinomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Multinomial { public: TestObject() : Multinomial(5, Point(3, 0.25)) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); { // Instanciate one distribution object Multinomial distribution; } // Instanciate one distribution object Multinomial distribution(5, Point(3, 0.25)); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Support Sample support(distribution.getSupport()); fullprint << "support=" << support << std::endl; Interval interval(Point(distribution.getDimension(), 1.0), Point(distribution.getDimension(), 3.0)); Sample restrictedSupport(distribution.getSupport(interval)); fullprint << "support restricted to the interval=" << interval << " gives=" << restrictedSupport << std::endl; // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << std::setprecision(5) << CDF << std::setprecision(6) << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << std::setprecision(5) << CCDF << std::setprecision(6) << std::endl; // Scalar Survival = distribution.computeSurvivalFunction( point ); // fullprint << "survival=" << Survival << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; // CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); // fullprint << "spearman=" << spearman << std::endl; // CovarianceMatrix kendall = distribution.getKendallTau(); // fullprint << "kendall=" << kendall << std::endl; Multinomial::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Multinomial_std.expout000066400000000000000000000056611307543307100221150ustar00rootroot00000000000000Testing class Multinomial checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 streamObject(const T & anObject) class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 Distribution Multinomial(n = 5, p = [0.25,0.25,0.25]) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=3 values=[1,2,0] oneSample first=class=Point name=Unnamed dimension=3 values=[0,1,4] last=class=Point name=Unnamed dimension=3 values=[1,1,3] mean=class=Point name=Unnamed dimension=3 values=[1.2635,1.2335,1.2564] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.937762,-0.300457,-0.315593,-0.300457,0.930871,-0.314301,-0.315593,-0.314301,0.947554] support=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=56 dimension=3 data=[[0,0,0],[1,0,0],[0,1,0],[0,0,1],[2,0,0],[1,1,0],[1,0,1],[0,2,0],[0,1,1],[0,0,2],[3,0,0],[2,1,0],[2,0,1],[1,2,0],[1,1,1],[1,0,2],[0,3,0],[0,2,1],[0,1,2],[0,0,3],[4,0,0],[3,1,0],[3,0,1],[2,2,0],[2,1,1],[2,0,2],[1,3,0],[1,2,1],[1,1,2],[1,0,3],[0,4,0],[0,3,1],[0,2,2],[0,1,3],[0,0,4],[5,0,0],[4,1,0],[4,0,1],[3,2,0],[3,1,1],[3,0,2],[2,3,0],[2,2,1],[2,1,2],[2,0,3],[1,4,0],[1,3,1],[1,2,2],[1,1,3],[1,0,4],[0,5,0],[0,4,1],[0,3,2],[0,2,3],[0,1,4],[0,0,5]] support restricted to the interval=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[1,1,1] upper bound=class=Point name=Unnamed dimension=3 values=[3,3,3] finite lower bound=[1,1,1] finite upper bound=[1,1,1] gives=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[2,1,1],[1,2,1],[1,1,2],[3,1,1],[2,2,1],[2,1,2],[1,3,1],[1,2,2],[1,1,3]] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] log pdf=-2.83713 pdf =0.0585937 cdf=0.13281 ccdf=0.86719 quantile=class=Point name=Unnamed dimension=3 values=[3,3,3] cdf(quantile)=0.953125 mean=class=Point name=Unnamed dimension=3 values=[1.25,1.25,1.25] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.9375,-0.3125,-0.3125,-0.3125,0.9375,-0.3125,-0.3125,-0.3125,0.9375] correlation=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.333333,-0.333333,-0.333333,1,-0.333333,-0.333333,-0.333333,1] parameters=[[n : 5, p_0 : 0.25],[n : 5, p_1 : 0.25],[n : 5, p_2 : 0.25],[n : 5, p_0 : 0.25, p_1 : 0.25, p_2 : 0.25]] openturns-1.9/lib/test/t_NLopt_std.cxx000066400000000000000000000101051307543307100201220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NLopt for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // bounds Description inVars; inVars.add("x1"); inVars.add("x2"); inVars.add("x3"); inVars.add("x4"); Description outVar(1, "y1"); Description formula(1, "x1+2*x2-3*x3+4*x4"); Function linear(inVars, outVar, formula); UnsignedInteger dim = linear.getInputDimension(); Point startingPoint(dim); Interval bounds(Point(dim, -3.0), Point(dim, 5.0)); Description algoNames(NLopt::GetAlgorithmNames()); for (UnsignedInteger i = 0; i < algoNames.getSize(); ++i) { // STOGO might not be enabled // NEWUOA nan/-nan // COBYLA crashes on squeeze // ESCH not same results with 2.4.1 if ((algoNames[i] == "GD_STOGO") || (algoNames[i] == "GD_STOGO_RAND") || (algoNames[i] == "LN_NEWUOA") || (algoNames[i] == "LN_COBYLA") || (algoNames[i] == "GN_ESCH")) { fullprint << "-- Skipped: algo=" << algoNames[i] << std::endl; continue; } NLopt algo(algoNames[i]); for (UnsignedInteger minimization = 0; minimization < 2; ++minimization) for (UnsignedInteger inequality = 0; inequality < 2; ++inequality) for (UnsignedInteger equality = 0; equality < 2; ++equality) { OptimizationProblem problem(linear, SymbolicFunction(), SymbolicFunction(), bounds); problem.setMinimization(minimization == 0); if (inequality == 0) // x3 <= x1 problem.setInequalityConstraint(SymbolicFunction(inVars, Description(1, "x1-x3"))); if (equality == 0) // x4 = 2 problem.setEqualityConstraint(SymbolicFunction(inVars, Description(1, "x4-2"))); try { NLopt::SetSeed(0); algo.setProblem(problem); algo.setMaximumEvaluationNumber(5000); //algo.setInitialStep(Point(dim, 0.1)); NLopt localAlgo("LD_MMA"); algo.setLocalSolver(localAlgo); algo.setStartingPoint(startingPoint); fullprint << "algo=" << algo << std::endl; algo.run(); OptimizationResult result(algo.getResult()); fullprint << "x^=" << printPoint(result.getOptimalPoint(), 3) << std::endl; } catch (...) { fullprint << "-- Not supported: algo=" << algoNames[i] << " inequality=" << (inequality == 0 ? "true" : "false") << " equality=" << (equality == 0 ? "true" : "false") << std::endl; } } // equality } // algo } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NLopt_std.expout000066400000000000000000007405061307543307100206630ustar00rootroot00000000000000algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[0.000,0.000,0.000,0.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GD_MLSL inequality=true equality=true -- Not supported: algo=GD_MLSL inequality=true equality=false -- Not supported: algo=GD_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GD_MLSL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GD_MLSL inequality=true equality=true -- Not supported: algo=GD_MLSL inequality=true equality=false -- Not supported: algo=GD_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GD_MLSL x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GD_MLSL_LDS inequality=true equality=true -- Not supported: algo=GD_MLSL_LDS inequality=true equality=false -- Not supported: algo=GD_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GD_MLSL_LDS x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GD_MLSL_LDS inequality=true equality=true -- Not supported: algo=GD_MLSL_LDS inequality=true equality=false -- Not supported: algo=GD_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GD_MLSL_LDS x^=[5.000,5.000,-3.000,5.000] -- Skipped: algo=GD_STOGO -- Skipped: algo=GD_STOGO_RAND -- Not supported: algo=GN_CRS2_LM inequality=true equality=true -- Not supported: algo=GN_CRS2_LM inequality=true equality=false -- Not supported: algo=GN_CRS2_LM inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_CRS2_LM x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_CRS2_LM inequality=true equality=true -- Not supported: algo=GN_CRS2_LM inequality=true equality=false -- Not supported: algo=GN_CRS2_LM inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_CRS2_LM x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT inequality=true equality=true -- Not supported: algo=GN_DIRECT inequality=true equality=false -- Not supported: algo=GN_DIRECT inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT inequality=true equality=true -- Not supported: algo=GN_DIRECT inequality=true equality=false -- Not supported: algo=GN_DIRECT inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT_L inequality=true equality=true -- Not supported: algo=GN_DIRECT_L inequality=true equality=false -- Not supported: algo=GN_DIRECT_L inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT_L inequality=true equality=true -- Not supported: algo=GN_DIRECT_L inequality=true equality=false -- Not supported: algo=GN_DIRECT_L inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_NOSCAL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_NOSCAL x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT_L_RAND inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_RAND inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_RAND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_RAND x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT_L_RAND inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_RAND inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_RAND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_RAND x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_RAND_NOSCAL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_L_RAND_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_L_RAND_NOSCAL x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_DIRECT_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_NOSCAL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_DIRECT_NOSCAL inequality=true equality=true -- Not supported: algo=GN_DIRECT_NOSCAL inequality=true equality=false -- Not supported: algo=GN_DIRECT_NOSCAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_DIRECT_NOSCAL x^=[5.000,5.000,-3.000,5.000] -- Skipped: algo=GN_ESCH algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[4.743,-2.725,4.575,1.995] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[4.942,-2.770,4.868,-2.901] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[-2.400,-2.859,4.994,2.001] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[-2.621,-2.944,4.946,-2.900] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[4.942,4.443,-2.976,1.999] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[4.904,4.918,-2.999,4.900] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[3.870,4.167,-2.983,2.009] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ISRES x^=[4.996,4.830,-2.996,4.986] -- Not supported: algo=GN_MLSL inequality=true equality=true -- Not supported: algo=GN_MLSL inequality=true equality=false -- Not supported: algo=GN_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_MLSL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_MLSL inequality=true equality=true -- Not supported: algo=GN_MLSL inequality=true equality=false -- Not supported: algo=GN_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_MLSL x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_MLSL_LDS inequality=true equality=true -- Not supported: algo=GN_MLSL_LDS inequality=true equality=false -- Not supported: algo=GN_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_MLSL_LDS x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_MLSL_LDS inequality=true equality=true -- Not supported: algo=GN_MLSL_LDS inequality=true equality=false -- Not supported: algo=GN_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_MLSL_LDS x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_ORIG_DIRECT inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT x^=[4.951,-2.995,4.951,-2.998] -- Not supported: algo=GN_ORIG_DIRECT inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_ORIG_DIRECT inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_ORIG_DIRECT inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_ORIG_DIRECT_L inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT_L x^=[1.000,-3.000,1.000,-3.000] -- Not supported: algo=GN_ORIG_DIRECT_L inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT_L x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=GN_ORIG_DIRECT_L inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT_L x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=GN_ORIG_DIRECT_L inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=GN_ORIG_DIRECT_L x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=G_MLSL inequality=true equality=true -- Not supported: algo=G_MLSL inequality=true equality=false -- Not supported: algo=G_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=G_MLSL x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=G_MLSL inequality=true equality=true -- Not supported: algo=G_MLSL inequality=true equality=false -- Not supported: algo=G_MLSL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=G_MLSL x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=G_MLSL_LDS inequality=true equality=true -- Not supported: algo=G_MLSL_LDS inequality=true equality=false -- Not supported: algo=G_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=G_MLSL_LDS x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=G_MLSL_LDS inequality=true equality=true -- Not supported: algo=G_MLSL_LDS inequality=true equality=false -- Not supported: algo=G_MLSL_LDS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=G_MLSL_LDS x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[0.000,0.000,0.000,0.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_CCSAQ inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_CCSAQ x^=[5.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_CCSAQ inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_CCSAQ x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_CCSAQ inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_CCSAQ x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_CCSAQ inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_CCSAQ x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_LBFGS inequality=true equality=true -- Not supported: algo=LD_LBFGS inequality=true equality=false -- Not supported: algo=LD_LBFGS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_LBFGS x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_LBFGS inequality=true equality=true -- Not supported: algo=LD_LBFGS inequality=true equality=false -- Not supported: algo=LD_LBFGS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_LBFGS x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=true equality=true -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=true equality=false -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_LBFGS_NOCEDAL -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=false equality=false -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=true equality=true -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=true equality=false -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_LBFGS_NOCEDAL -- Not supported: algo=LD_LBFGS_NOCEDAL inequality=false equality=false -- Not supported: algo=LD_MMA inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_MMA x^=[5.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_MMA inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_MMA x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_MMA inequality=true equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_MMA x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_MMA inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_MMA x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_SLSQP x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_TNEWTON inequality=true equality=true -- Not supported: algo=LD_TNEWTON inequality=true equality=false -- Not supported: algo=LD_TNEWTON inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_TNEWTON inequality=true equality=true -- Not supported: algo=LD_TNEWTON inequality=true equality=false -- Not supported: algo=LD_TNEWTON inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_TNEWTON_PRECOND inequality=true equality=true -- Not supported: algo=LD_TNEWTON_PRECOND inequality=true equality=false -- Not supported: algo=LD_TNEWTON_PRECOND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_PRECOND x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_TNEWTON_PRECOND inequality=true equality=true -- Not supported: algo=LD_TNEWTON_PRECOND inequality=true equality=false -- Not supported: algo=LD_TNEWTON_PRECOND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_PRECOND x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=true equality=true -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=true equality=false -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_PRECOND_RESTART x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=true equality=true -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=true equality=false -- Not supported: algo=LD_TNEWTON_PRECOND_RESTART inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_PRECOND_RESTART x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_TNEWTON_RESTART inequality=true equality=true -- Not supported: algo=LD_TNEWTON_RESTART inequality=true equality=false -- Not supported: algo=LD_TNEWTON_RESTART inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_RESTART x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_TNEWTON_RESTART inequality=true equality=true -- Not supported: algo=LD_TNEWTON_RESTART inequality=true equality=false -- Not supported: algo=LD_TNEWTON_RESTART inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_TNEWTON_RESTART x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_VAR1 inequality=true equality=true -- Not supported: algo=LD_VAR1 inequality=true equality=false -- Not supported: algo=LD_VAR1 inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_VAR1 x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_VAR1 inequality=true equality=true -- Not supported: algo=LD_VAR1 inequality=true equality=false -- Not supported: algo=LD_VAR1 inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_VAR1 x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LD_VAR2 inequality=true equality=true -- Not supported: algo=LD_VAR2 inequality=true equality=false -- Not supported: algo=LD_VAR2 inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_VAR2 x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LD_VAR2 inequality=true equality=true -- Not supported: algo=LD_VAR2 inequality=true equality=false -- Not supported: algo=LD_VAR2 inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LD_VAR2 x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[0.000,0.000,0.000,0.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[-3.000,-3.000,5.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[-3.000,-3.000,5.000,-3.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x1-x3] bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0] formulas=[x4-2] inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,5.000,-3.000,2.000] algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_AUGLAG_EQ x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LN_BOBYQA inequality=true equality=true -- Not supported: algo=LN_BOBYQA inequality=true equality=false -- Not supported: algo=LN_BOBYQA inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_BOBYQA x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LN_BOBYQA inequality=true equality=true -- Not supported: algo=LN_BOBYQA inequality=true equality=false -- Not supported: algo=LN_BOBYQA inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_BOBYQA x^=[5.000,5.000,-3.000,5.000] -- Skipped: algo=LN_COBYLA -- Not supported: algo=LN_NELDERMEAD inequality=true equality=true -- Not supported: algo=LN_NELDERMEAD inequality=true equality=false -- Not supported: algo=LN_NELDERMEAD inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_NELDERMEAD x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LN_NELDERMEAD inequality=true equality=true -- Not supported: algo=LN_NELDERMEAD inequality=true equality=false -- Not supported: algo=LN_NELDERMEAD inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_NELDERMEAD x^=[5.000,5.000,-3.000,5.000] -- Skipped: algo=LN_NEWUOA -- Not supported: algo=LN_NEWUOA_BOUND inequality=true equality=true -- Not supported: algo=LN_NEWUOA_BOUND inequality=true equality=false -- Not supported: algo=LN_NEWUOA_BOUND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_NEWUOA_BOUND x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LN_NEWUOA_BOUND inequality=true equality=true -- Not supported: algo=LN_NEWUOA_BOUND inequality=true equality=false -- Not supported: algo=LN_NEWUOA_BOUND inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_NEWUOA_BOUND x^=[5.000,5.000,-3.000,5.000] -- Not supported: algo=LN_PRAXIS inequality=true equality=true -- Not supported: algo=LN_PRAXIS inequality=true equality=false -- Not supported: algo=LN_PRAXIS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_PRAXIS x^=[-3.000,-3.000,4.000,-2.000] -- Not supported: algo=LN_PRAXIS inequality=true equality=true -- Not supported: algo=LN_PRAXIS inequality=true equality=false -- Not supported: algo=LN_PRAXIS inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_PRAXIS x^=[5.000,4.000,-3.000,2.000] -- Not supported: algo=LN_SBPLX inequality=true equality=true -- Not supported: algo=LN_SBPLX inequality=true equality=false -- Not supported: algo=LN_SBPLX inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_SBPLX x^=[-3.000,-3.000,5.000,-3.000] -- Not supported: algo=LN_SBPLX inequality=true equality=true -- Not supported: algo=LN_SBPLX inequality=true equality=false -- Not supported: algo=LN_SBPLX inequality=false equality=true algo=class=NLopt class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=5000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false algorithm=LN_SBPLX x^=[5.000,5.000,-3.000,5.000] openturns-1.9/lib/test/t_NatafIndependentCopulaEvaluation_std.cxx000066400000000000000000000034211307543307100254740ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NatafIndependentCopulaEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; NatafIndependentCopulaEvaluation transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation(point) << std::endl; fullprint << "transformation parameters gradient=" << transformation.parameterGradient(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NatafIndependentCopulaEvaluation_std.expout000066400000000000000000000006111307543307100262140ustar00rootroot00000000000000transformation=class=NatafIndependentCopulaEvaluation description=[X0,X1,Y0,Y1] dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Point name=Unnamed dimension=2 values=[0.67449,0.67449] transformation parameters gradient=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=2 values=[] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_NatafIndependentCopulaGradient_std.cxx000066400000000000000000000032461307543307100251270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NatafIndependentCopulaGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; NatafIndependentCopulaGradient transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation.gradient(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NatafIndependentCopulaGradient_std.expout000066400000000000000000000004371307543307100256500ustar00rootroot00000000000000transformation=class=NatafIndependentCopulaGradient dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3.14687,0,0,3.14687] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_NatafIndependentCopulaHessian_std.cxx000066400000000000000000000032431307543307100247610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NatafIndependentCopulaHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 2; NatafIndependentCopulaHessian transformation(dim); fullprint << "transformation=" << transformation << std::endl; Point point(dim, 0.75); fullprint << "transformation(" << point << ")=" << transformation.hessian(point) << std::endl; fullprint << "input dimension=" << transformation.getInputDimension() << std::endl; fullprint << "output dimension=" << transformation.getOutputDimension() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NatafIndependentCopulaHessian_std.expout000066400000000000000000000004701307543307100255020ustar00rootroot00000000000000transformation=class=NatafIndependentCopulaHessian dimension=2 transformation(class=Point name=Unnamed dimension=2 values=[0.75,0.75])=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[6.67931,0,0,0,0,0,0,6.67931] input dimension=2 output dimension=2 openturns-1.9/lib/test/t_NearestPointChecker_std.cxx000066400000000000000000000050761307543307100230010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NearestPointChecker for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Function UnsignedInteger sampleSize = 20; Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1+2*x2-3*x3+4*x4")); LessOrEqual myOperator; Scalar threshold = 2.0; Sample mySample(0, levelFunction.getInputDimension()); Scalar random = 0.1; for(UnsignedInteger index = 0; index < sampleSize; index++) { Point point(levelFunction.getInputDimension()); Scalar norm = 0.0; for(UnsignedInteger coordinate = 0; coordinate < levelFunction.getInputDimension(); coordinate++) { point[coordinate] = sqrt(-2.0 * log(random)); random = fmod(random + sqrt(2.0), 1.0); point[coordinate] *= cos(2.0 * atan(1.0) * random); norm += point[coordinate] * point[coordinate]; } for(UnsignedInteger coordinate = 0; coordinate < levelFunction.getInputDimension(); coordinate++) { point[coordinate] /= sqrt(norm); } mySample.add(point); } NearestPointChecker myNearestPointChecker(levelFunction, myOperator, threshold, mySample); for(UnsignedInteger index = 0; index < sampleSize; index++) { fullprint << mySample[index] << std::endl; } myNearestPointChecker.run(); fullprint << "myNearestPointChecker = " << myNearestPointChecker << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NearestPointChecker_std.expout000066400000000000000000000076261307543307100235260ustar00rootroot00000000000000class=Point name=Unnamed dimension=4 values=[0.915675,0.0798852,0.204293,0.336783] class=Point name=Unnamed dimension=4 values=[0.533909,0.845333,0.000609217,0.0187757] class=Point name=Unnamed dimension=4 values=[0.248836,0.400249,0.60716,0.639718] class=Point name=Unnamed dimension=4 values=[0.9066,0.103423,0.221248,0.344135] class=Point name=Unnamed dimension=4 values=[0.517309,0.844412,0.0338737,0.134955] class=Point name=Unnamed dimension=4 values=[0.274264,0.403758,0.619934,0.614362] class=Point name=Unnamed dimension=4 values=[0.903505,0.120912,0.226003,0.343485] class=Point name=Unnamed dimension=4 values=[0.498705,0.846084,0.0630262,0.177375] class=Point name=Unnamed dimension=4 values=[0.29698,0.403973,0.632924,0.589929] class=Point name=Unnamed dimension=4 values=[0.914011,0.126829,0.212411,0.321529] class=Point name=Unnamed dimension=4 values=[0.477274,0.850716,0.0882053,0.201772] class=Point name=Unnamed dimension=4 values=[0.384718,0.486831,0.783978,0.0191391] class=Point name=Unnamed dimension=4 values=[0.129338,0.335358,0.511454,0.780526] class=Point name=Unnamed dimension=4 values=[0.450957,0.859521,0.108917,0.214475] class=Point name=Unnamed dimension=4 values=[0.398236,0.471059,0.785637,0.047814] class=Point name=Unnamed dimension=4 values=[0.192942,0.353077,0.49579,0.769612] class=Point name=Unnamed dimension=4 values=[0.412834,0.876648,0.122668,0.214496] class=Point name=Unnamed dimension=4 values=[0.40812,0.45275,0.7894,0.0728271] class=Point name=Unnamed dimension=4 values=[0.226497,0.368298,0.479888,0.763389] class=Point name=Unnamed dimension=4 values=[0.0131352,0.121964,0.530062,0.839039] myNearestPointChecker = class=NearestPointChecker LevelFunction=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] result=class=NearestPointCheckerResult violatingConstraintPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 data=[[0.477274,0.850716,0.0882053,0.201772],[0.129338,0.335358,0.511454,0.780526],[0.450957,0.859521,0.108917,0.214475],[0.498705,0.846084,0.0630262,0.177375],[0.192942,0.353077,0.49579,0.769612],[0.412834,0.876648,0.122668,0.214496],[0.517309,0.844412,0.0338737,0.134955],[0.226497,0.368298,0.479888,0.763389],[0.0131352,0.121964,0.530062,0.839039],[0.533909,0.845333,0.000609217,0.0187757]] violatingConstraintValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y1] data=[[2.72118],[2.3878],[2.70114],[2.7113],[2.49017],[2.65611],[2.64433],[2.57699],[2.02304],[2.29785]] verifyingConstraintPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 data=[[0.915675,0.0798852,0.204293,0.336783],[0.40812,0.45275,0.7894,0.0728271],[0.248836,0.400249,0.60716,0.639718],[0.9066,0.103423,0.221248,0.344135],[0.398236,0.471059,0.785637,0.047814],[0.274264,0.403758,0.619934,0.614362],[0.903505,0.120912,0.226003,0.343485],[0.384718,0.486831,0.783978,0.0191391],[0.29698,0.403973,0.632924,0.589929],[0.914011,0.126829,0.212411,0.321529]] verifyingConstraintValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y1] data=[[1.8097],[-0.763272],[1.78673],[1.82624],[-0.825302],[1.67943],[1.84126],[-0.916997],[1.56587],[1.81655]] operator=class=LessOrEqual name=Unnamed threshold=2 openturns-1.9/lib/test/t_NegativeBinomialFactory_std.cxx000066400000000000000000000051571307543307100236460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NegativeBinomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { NegativeBinomial distribution(15, 0.7); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); NegativeBinomialFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; NegativeBinomial estimatedNegativeBinomial(factory.buildAsNegativeBinomial(sample)); fullprint << "NegativeBinomial =" << distribution << std::endl; fullprint << "Estimated negativeBinomial=" << estimatedNegativeBinomial << std::endl; estimatedNegativeBinomial = factory.buildAsNegativeBinomial(); fullprint << "Default negativeBinomial=" << estimatedNegativeBinomial << std::endl; estimatedNegativeBinomial = factory.buildAsNegativeBinomial(distribution.getParameter()); fullprint << "NegativeBinomial from parameters=" << estimatedNegativeBinomial << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NegativeBinomialFactory_std.expout000066400000000000000000000014021307543307100243550ustar00rootroot00000000000000Distribution =class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 Estimated distribution=class=NegativeBinomial name=NegativeBinomial dimension=1 r=15.0803 p=0.699114 Default distribution=class=NegativeBinomial name=NegativeBinomial dimension=1 r=1 p=0.5 Distribution from parameters=class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 NegativeBinomial =class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 Estimated negativeBinomial=class=NegativeBinomial name=NegativeBinomial dimension=1 r=15.0803 p=0.699114 Default negativeBinomial=class=NegativeBinomial name=NegativeBinomial dimension=1 r=1 p=0.5 NegativeBinomial from parameters=class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 openturns-1.9/lib/test/t_NegativeBinomial_std.cxx000066400000000000000000000131761307543307100223160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NegativeBinomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public NegativeBinomial { public: TestObject() : NegativeBinomial(4.5, 0.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object NegativeBinomial distribution(4.5, 0.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 5.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; NegativeBinomial::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NegativeBinomial_std.expout000066400000000000000000000052401307543307100230310ustar00rootroot00000000000000Testing class NegativeBinomial checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=NegativeBinomial name=NegativeBinomial dimension=1 r=4.5 p=0.7 streamObject(const T & anObject) class=NegativeBinomial name=NegativeBinomial dimension=1 r=4.5 p=0.7 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=NegativeBinomial name=NegativeBinomial dimension=1 r=4.5 p=0.7 Distribution NegativeBinomial(r = 4.5, p = 0.7) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[7] oneSample first=class=Point name=Unnamed dimension=1 values=[10] last=class=Point name=Unnamed dimension=1 values=[6] mean=class=Point name=Unnamed dimension=1 values=[10.4746] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[35.6333] Point= class=Point name=Unnamed dimension=1 values=[5] log pdf=-2.75315 pdf =0.063727 pdf (FD)=0.063727 cdf=0.203394 ccdf=0.796606 survival=0.796606 characteristic function=(-0.00363296,-1.48315e-05) log characteristic function=(-5.6177,-3.13751) generating function=(-0.00492972,0.00369566) log generating function=(-5.08949,2.4983) quantile=class=Point name=Unnamed dimension=1 values=[22] cdf(quantile)=0.959829 mean=class=Point name=Unnamed dimension=1 values=[10.5] standard deviation=class=Point name=Unnamed dimension=1 values=[5.91608] skewness=class=Point name=Unnamed dimension=1 values=[0.957841] kurtosis=class=Point name=Unnamed dimension=1 values=[4.3619] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[35] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[r : 4.5, p : 0.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[10.5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[145.25] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[2458.46] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[48980.9] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[1.12011e+06] Standard representative=NegativeBinomial(r = 4.5, p = 0.7) openturns-1.9/lib/test/t_NonCenteredFiniteDifferenceGradient_std.cxx000066400000000000000000000042321307543307100260660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NonCenteredFiniteDifferenceGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar eps = 1e-4; /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); Point epsilon(myFunc.getInputDimension(), eps); Point in(epsilon.getDimension(), 1.0); NonCenteredFiniteDifferenceGradient myGradient(epsilon, myFunc.getEvaluation()); fullprint << "myGradient=" << myGradient << std::endl; fullprint << "myFunc.gradient(" << in << ")=" << myFunc.gradient(in).__repr__() << std::endl; fullprint << "myGradient.gradient(" << in << ")=" << myGradient.gradient(in).__repr__() << std::endl; /** Substitute the gradient */ myFunc.setGradient(new NonCenteredFiniteDifferenceGradient(myGradient)); fullprint << "myFunc.gradient(" << in << ")=" << myFunc.gradient(in).__repr__() << " (after substitution)" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NonCenteredFiniteDifferenceGradient_std.expout000066400000000000000000000017121307543307100266100ustar00rootroot00000000000000myGradient=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540302,-0.909297,-0.909297,0.735759,-1.10364] myGradient.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.54026,-0.909277,-0.909277,0.735796,-1.10356] myFunc.gradient(class=Point name=Unnamed dimension=2 values=[1,1])=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.54026,-0.909277,-0.909277,0.735796,-1.10356] (after substitution) openturns-1.9/lib/test/t_NonCentralChiSquare_std.cxx000066400000000000000000000206011307543307100227400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NonCentralChiSquare for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public NonCentralChiSquare { public: TestObject() : NonCentralChiSquare(1.5, 2.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object NonCentralChiSquare distribution(1.5, 2.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (NonCentralChiSquare(distribution.getNu() + eps, distribution.getLambda()).computePDF(point) - NonCentralChiSquare(distribution.getNu() - eps, distribution.getLambda()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (NonCentralChiSquare(distribution.getNu(), distribution.getLambda() + eps).computePDF(point) - NonCentralChiSquare(distribution.getNu(), distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (NonCentralChiSquare(distribution.getNu() + eps, distribution.getLambda()).computeCDF(point) - NonCentralChiSquare(distribution.getNu() - eps, distribution.getLambda()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (NonCentralChiSquare(distribution.getNu(), distribution.getLambda() + eps).computeCDF(point) - NonCentralChiSquare(distribution.getNu(), distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; NonCentralChiSquare::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar nu = distribution.getNu(); fullprint << "nu=" << nu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NonCentralChiSquare_std.expout000066400000000000000000000117151307543307100234700ustar00rootroot00000000000000Testing class NonCentralChiSquare checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=NonCentralChiSquare name=NonCentralChiSquare dimension=1 nu=1.5 lambda=2.5 streamObject(const T & anObject) class=NonCentralChiSquare name=NonCentralChiSquare dimension=1 nu=1.5 lambda=2.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=NonCentralChiSquare name=NonCentralChiSquare dimension=1 nu=1.5 lambda=2.5 Distribution NonCentralChiSquare(nu = 1.5, lambda = 2.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[5.14874] oneSample first=class=Point name=Unnamed dimension=1 values=[10.3181] last=class=Point name=Unnamed dimension=1 values=[3.44075] mean=class=Point name=Unnamed dimension=1 values=[4.01363] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[12.6416] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.0277166] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0277166] log pdf=-1.78305 pdf =0.168125 pdf (FD)=0.168125 cdf=0.205328 ccdf=0.794672 survival=0.794672 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.169073] Survival(inverse survival)=0.95 characteristic function=(0.0479067,0.195396) log characteristic function=(-1.60354,1.33036) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0269116,-0.0447116] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0269116,-0.0447116] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.127286,-0.0787015] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.127286,-0.0787015] quantile=class=Point name=Unnamed dimension=1 values=[11.1286] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[11.1286] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(NonCentralChiSquare(nu = 1.5, lambda = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(NonCentralChiSquare(nu = 1.5, lambda = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(NonCentralChiSquare(nu = 1.5, lambda = 2.5)) level=4.1499 beta=0.015766 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.068294] upper bound=class=Point name=Unnamed dimension=1 values=[13.2884] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[11.1286] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.169073] upper bound=class=Point name=Unnamed dimension=1 values=[127] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[4] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 1.5, lambda : 2.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[4] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[29] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[292] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3715] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[56780] Standard representative=NonCentralChiSquare(nu = 1.5, lambda = 2.5) nu=1.5 standard deviation=class=Point name=Unnamed dimension=1 values=[3.60555] skewness=class=Point name=Unnamed dimension=1 values=[1.53609] kurtosis=class=Point name=Unnamed dimension=1 values=[6.26627] openturns-1.9/lib/test/t_NonCentralStudent_std.cxx000066400000000000000000000213361307543307100225100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NonCentralStudent for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public NonCentralStudent { public: TestObject() : NonCentralStudent(7.2, 4.8, -3.7) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object NonCentralStudent distribution(7.2, 4.8, -3.7); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (NonCentralStudent(distribution.getNu() + eps, distribution.getDelta(), distribution.getGamma()).computePDF(point) - NonCentralStudent(distribution.getNu() - eps, distribution.getDelta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (NonCentralStudent(distribution.getNu(), distribution.getDelta() + eps, distribution.getGamma()).computePDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() + eps).computePDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (NonCentralStudent(distribution.getNu() + eps, distribution.getDelta(), distribution.getGamma()).computeCDF(point) - NonCentralStudent(distribution.getNu() - eps, distribution.getDelta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (NonCentralStudent(distribution.getNu(), distribution.getDelta() + eps, distribution.getGamma()).computeCDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() + eps).computeCDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; //fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; //fullprint << "beta=" << beta << std::endl; //fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; //fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; NonCentralStudent::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NonCentralStudent_std.expout000066400000000000000000000107571307543307100232370ustar00rootroot00000000000000Testing class NonCentralStudent checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=NonCentralStudent name=NonCentralStudent dimension=1 nu=7.2 delta=4.8 gamma=-3.7 streamObject(const T & anObject) class=NonCentralStudent name=NonCentralStudent dimension=1 nu=7.2 delta=4.8 gamma=-3.7 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=NonCentralStudent name=NonCentralStudent dimension=1 nu=7.2 delta=4.8 gamma=-3.7 Distribution NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[4.76055] oneSample first=class=Point name=Unnamed dimension=1 values=[3.3233] last=class=Point name=Unnamed dimension=1 values=[3.54549] mean=class=Point name=Unnamed dimension=1 values=[1.6744] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.22198] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.0278822] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0278822] log pdf=-1.4096 pdf =0.244242 pdf (FD)=0.244242 cdf=0.426086 ccdf=0.573914 survival=0.573914 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.864277] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=3 values=[0.0110231,-0.00328889,0.0278822] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.0110231,-0.00328889,0.0278822] cdf gradient =class=Point name=Unnamed dimension=3 values=[0.0041357,-0.246592,-0.244242] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.0041357,-0.246592,-0.244242] quantile=class=Point name=Unnamed dimension=1 values=[5.47724] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.61544] upper bound=class=Point name=Unnamed dimension=1 values=[5.7747] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7)) gradientImplementation=MinimumVolumeLevelSetGradient(NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7)) level=3.75705 beta=0.0233525 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.17995] upper bound=class=Point name=Unnamed dimension=1 values=[6.75359] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.68455] standard deviation=class=Point name=Unnamed dimension=1 values=[2.07189] skewness=class=Point name=Unnamed dimension=1 values=[1.67602] kurtosis=class=Point name=Unnamed dimension=1 values=[10.0582] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.29272] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 7.2, delta : 4.8, gamma : -3.7]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[5.38455] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[33.2862] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[240.367] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[2093.79] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[23449.8] Standard representative=NonCentralStudent(nu = 7.2, delta = 4.8, gamma = 0) openturns-1.9/lib/test/t_NonStationaryCovarianceModelFactory_std.cxx000066400000000000000000000051711307543307100262110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NonStationaryCovarianceModelFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include "openturns/UserDefinedCovarianceModel.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Dimension of the input model // Size of the TimeGrid UnsignedInteger size = 10; UnsignedInteger dimension = 1; UnsignedInteger spatialDimension = 1; RegularGrid timeGrid(0.0, 0.1, size); Point amplitude(dimension, 1.0); Point scale(spatialDimension, 1.0); ExponentialModel model(scale, amplitude); GaussianProcess myProcess(model, timeGrid); // Create a Process sample of size N UnsignedInteger N = 10000; ProcessSample sample(myProcess.getSample(N)); // Factory initiate - No arguments NonStationaryCovarianceModelFactory myFactory; // Build a UserDefinedCovarianceModel using the Welch method UserDefinedCovarianceModel myCovarianceModel(myFactory.buildAsUserDefinedCovarianceModel(sample)); // Get the frequency grid of the model RegularGrid myTimeGrid(myCovarianceModel.getTimeGrid()); for (UnsignedInteger i = 0 ; i < size ; ++i) { const Scalar t = timeGrid.getValue(i); for (UnsignedInteger j = 0 ; j < size ; ++j) { const Scalar s = timeGrid.getValue(j); const Scalar estimatedValue = myCovarianceModel(t, s)(0, 0); const Scalar modelValue = model(t, s)(0, 0); fullprint << "Covariance C(" << t << ", " << s << ") : "; fullprint << " evaluation = " << estimatedValue << " model = " << modelValue << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NonStationaryCovarianceModelFactory_std.expout000066400000000000000000000143221307543307100267310ustar00rootroot00000000000000Covariance C(0, 0) : evaluation = 1.00821 model = 1 Covariance C(0, 0.1) : evaluation = 0.90204 model = 0.904837 Covariance C(0, 0.2) : evaluation = 0.816878 model = 0.818731 Covariance C(0, 0.3) : evaluation = 0.737542 model = 0.740818 Covariance C(0, 0.4) : evaluation = 0.672768 model = 0.67032 Covariance C(0, 0.5) : evaluation = 0.606947 model = 0.606531 Covariance C(0, 0.6) : evaluation = 0.5532 model = 0.548812 Covariance C(0, 0.7) : evaluation = 0.50249 model = 0.496585 Covariance C(0, 0.8) : evaluation = 0.459609 model = 0.449329 Covariance C(0, 0.9) : evaluation = 0.407241 model = 0.40657 Covariance C(0.1, 0) : evaluation = 0.90204 model = 0.904837 Covariance C(0.1, 0.1) : evaluation = 0.989988 model = 1 Covariance C(0.1, 0.2) : evaluation = 0.894201 model = 0.904837 Covariance C(0.1, 0.3) : evaluation = 0.810409 model = 0.818731 Covariance C(0.1, 0.4) : evaluation = 0.737446 model = 0.740818 Covariance C(0.1, 0.5) : evaluation = 0.665085 model = 0.67032 Covariance C(0.1, 0.6) : evaluation = 0.606272 model = 0.606531 Covariance C(0.1, 0.7) : evaluation = 0.548287 model = 0.548812 Covariance C(0.1, 0.8) : evaluation = 0.500625 model = 0.496585 Covariance C(0.1, 0.9) : evaluation = 0.448074 model = 0.449329 Covariance C(0.2, 0) : evaluation = 0.816878 model = 0.818731 Covariance C(0.2, 0.1) : evaluation = 0.894201 model = 0.904837 Covariance C(0.2, 0.2) : evaluation = 0.990525 model = 1 Covariance C(0.2, 0.3) : evaluation = 0.897657 model = 0.904837 Covariance C(0.2, 0.4) : evaluation = 0.812456 model = 0.818731 Covariance C(0.2, 0.5) : evaluation = 0.729266 model = 0.740818 Covariance C(0.2, 0.6) : evaluation = 0.665659 model = 0.67032 Covariance C(0.2, 0.7) : evaluation = 0.600574 model = 0.606531 Covariance C(0.2, 0.8) : evaluation = 0.545544 model = 0.548812 Covariance C(0.2, 0.9) : evaluation = 0.490332 model = 0.496585 Covariance C(0.3, 0) : evaluation = 0.737542 model = 0.740818 Covariance C(0.3, 0.1) : evaluation = 0.810409 model = 0.818731 Covariance C(0.3, 0.2) : evaluation = 0.897657 model = 0.904837 Covariance C(0.3, 0.3) : evaluation = 0.995372 model = 1 Covariance C(0.3, 0.4) : evaluation = 0.899391 model = 0.904837 Covariance C(0.3, 0.5) : evaluation = 0.810492 model = 0.818731 Covariance C(0.3, 0.6) : evaluation = 0.738522 model = 0.740818 Covariance C(0.3, 0.7) : evaluation = 0.666768 model = 0.67032 Covariance C(0.3, 0.8) : evaluation = 0.606792 model = 0.606531 Covariance C(0.3, 0.9) : evaluation = 0.545949 model = 0.548812 Covariance C(0.4, 0) : evaluation = 0.672768 model = 0.67032 Covariance C(0.4, 0.1) : evaluation = 0.737446 model = 0.740818 Covariance C(0.4, 0.2) : evaluation = 0.812456 model = 0.818731 Covariance C(0.4, 0.3) : evaluation = 0.899391 model = 0.904837 Covariance C(0.4, 0.4) : evaluation = 0.996354 model = 1 Covariance C(0.4, 0.5) : evaluation = 0.90106 model = 0.904837 Covariance C(0.4, 0.6) : evaluation = 0.820803 model = 0.818731 Covariance C(0.4, 0.7) : evaluation = 0.741337 model = 0.740818 Covariance C(0.4, 0.8) : evaluation = 0.674105 model = 0.67032 Covariance C(0.4, 0.9) : evaluation = 0.606897 model = 0.606531 Covariance C(0.5, 0) : evaluation = 0.606947 model = 0.606531 Covariance C(0.5, 0.1) : evaluation = 0.665085 model = 0.67032 Covariance C(0.5, 0.2) : evaluation = 0.729266 model = 0.740818 Covariance C(0.5, 0.3) : evaluation = 0.810492 model = 0.818731 Covariance C(0.5, 0.4) : evaluation = 0.90106 model = 0.904837 Covariance C(0.5, 0.5) : evaluation = 1.00283 model = 1 Covariance C(0.5, 0.6) : evaluation = 0.91064 model = 0.904837 Covariance C(0.5, 0.7) : evaluation = 0.826031 model = 0.818731 Covariance C(0.5, 0.8) : evaluation = 0.74871 model = 0.740818 Covariance C(0.5, 0.9) : evaluation = 0.675382 model = 0.67032 Covariance C(0.6, 0) : evaluation = 0.5532 model = 0.548812 Covariance C(0.6, 0.1) : evaluation = 0.606272 model = 0.606531 Covariance C(0.6, 0.2) : evaluation = 0.665659 model = 0.67032 Covariance C(0.6, 0.3) : evaluation = 0.738522 model = 0.740818 Covariance C(0.6, 0.4) : evaluation = 0.820803 model = 0.818731 Covariance C(0.6, 0.5) : evaluation = 0.91064 model = 0.904837 Covariance C(0.6, 0.6) : evaluation = 1.00501 model = 1 Covariance C(0.6, 0.7) : evaluation = 0.91108 model = 0.904837 Covariance C(0.6, 0.8) : evaluation = 0.828014 model = 0.818731 Covariance C(0.6, 0.9) : evaluation = 0.746208 model = 0.740818 Covariance C(0.7, 0) : evaluation = 0.50249 model = 0.496585 Covariance C(0.7, 0.1) : evaluation = 0.548287 model = 0.548812 Covariance C(0.7, 0.2) : evaluation = 0.600574 model = 0.606531 Covariance C(0.7, 0.3) : evaluation = 0.666768 model = 0.67032 Covariance C(0.7, 0.4) : evaluation = 0.741337 model = 0.740818 Covariance C(0.7, 0.5) : evaluation = 0.826031 model = 0.818731 Covariance C(0.7, 0.6) : evaluation = 0.91108 model = 0.904837 Covariance C(0.7, 0.7) : evaluation = 1.00954 model = 1 Covariance C(0.7, 0.8) : evaluation = 0.915118 model = 0.904837 Covariance C(0.7, 0.9) : evaluation = 0.823575 model = 0.818731 Covariance C(0.8, 0) : evaluation = 0.459609 model = 0.449329 Covariance C(0.8, 0.1) : evaluation = 0.500625 model = 0.496585 Covariance C(0.8, 0.2) : evaluation = 0.545544 model = 0.548812 Covariance C(0.8, 0.3) : evaluation = 0.606792 model = 0.606531 Covariance C(0.8, 0.4) : evaluation = 0.674105 model = 0.67032 Covariance C(0.8, 0.5) : evaluation = 0.74871 model = 0.740818 Covariance C(0.8, 0.6) : evaluation = 0.828014 model = 0.818731 Covariance C(0.8, 0.7) : evaluation = 0.915118 model = 0.904837 Covariance C(0.8, 0.8) : evaluation = 1.00826 model = 1 Covariance C(0.8, 0.9) : evaluation = 0.911118 model = 0.904837 Covariance C(0.9, 0) : evaluation = 0.407241 model = 0.40657 Covariance C(0.9, 0.1) : evaluation = 0.448074 model = 0.449329 Covariance C(0.9, 0.2) : evaluation = 0.490332 model = 0.496585 Covariance C(0.9, 0.3) : evaluation = 0.545949 model = 0.548812 Covariance C(0.9, 0.4) : evaluation = 0.606897 model = 0.606531 Covariance C(0.9, 0.5) : evaluation = 0.675382 model = 0.67032 Covariance C(0.9, 0.6) : evaluation = 0.746208 model = 0.740818 Covariance C(0.9, 0.7) : evaluation = 0.823575 model = 0.818731 Covariance C(0.9, 0.8) : evaluation = 0.911118 model = 0.904837 Covariance C(0.9, 0.9) : evaluation = 1.00667 model = 1 openturns-1.9/lib/test/t_NormalCopulaFactory_std.cxx000066400000000000000000000046631307543307100230260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NormalCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 3; CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = 0.5 * (1.0 + i) / dim; } } NormalCopula distribution(R); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); NormalCopulaFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; NormalCopula estimatedNormalCopula(factory.buildAsNormalCopula(sample)); fullprint << "NormalCopula =" << distribution << std::endl; fullprint << "Estimated normalCopula=" << estimatedNormalCopula << std::endl; estimatedNormalCopula = factory.buildAsNormalCopula(); fullprint << "Default normalCopula=" << estimatedNormalCopula << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NormalCopulaFactory_std.expout000066400000000000000000000026121307543307100235400ustar00rootroot00000000000000Distribution =class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Estimated distribution=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.313268,0.490701,0.313268,1,0.487274,0.490701,0.487274,1] Default distribution=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] NormalCopula =class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Estimated normalCopula=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.313268,0.490701,0.313268,1,0.487274,0.490701,0.487274,1] Default normalCopula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] openturns-1.9/lib/test/t_NormalCopula_std.cxx000066400000000000000000000157741307543307100215030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class NormalCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 3; CorrelationMatrix R = IdentityMatrix(dim); for(UnsignedInteger i = 0; i < dim - 1; i++) { R(i, i + 1) = 0.25; } NormalCopula copula(R); copula.setName("a normal copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean " << copula.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 10000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; if (copula.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; // Creation of the correlation matrix from a Spearman correlation matrix spearman = CorrelationMatrix(dim); for (UnsignedInteger i = 1; i < dim; i++) { spearman(i, i - 1) = 0.25; } correlation = NormalCopula::GetCorrelationFromSpearmanCorrelation(spearman); fullprint << "Normal copula correlation=" << correlation << " from the Spearman correlation=" << spearman << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NormalCopula_std.expout000066400000000000000000000077521307543307100222220ustar00rootroot00000000000000Copula class=NormalCopula name=a normal copula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Copula NormalCopula(R = [[ 1 0.25 0 ] [ 0.25 1 0.25 ] [ 0 0.25 1 ]]) Mean class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Elliptical distribution= false Elliptical copula= true Independent copula= false oneRealization=class=Point name=Unnamed dimension=3 values=[0.728473,0.14143,0.226528] oneSample=class=Sample name=a normal copula implementation=class=SampleImplementation name=a normal copula size=10 dimension=3 description=[X0,X1,X2] data=[[0.885991,0.03509,0.410967],[0.361292,0.903689,0.875806],[0.786157,0.398475,0.551985],[0.0110089,0.0347878,0.0549614],[0.463832,0.82677,0.548704],[0.28767,0.614586,0.66531],[0.672124,0.18575,0.136607],[0.682113,0.49876,0.620616],[0.962655,0.696223,0.230639],[0.235291,0.339456,0.0367574]] anotherSample mean=class=Point name=Unnamed dimension=3 values=[0.495928,0.496401,0.501236] anotherSample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0829368,0.0183885,-0.000208548,0.0183885,0.0838067,0.0195431,-0.000208548,0.0195431,0.0843107] point= class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] ddf=class=Point name=Unnamed dimension=3 values=[-0.591263,-1.77379,-0.591263] ddf (FD)=class=Point name=Unnamed dimension=3 values=[-0.591263,-1.77379,-0.591263] pdf=1.37677 cdf=0.0176157 Survival =0.545177 Survival (ref)=0.545177 Inverse survival=class=Point name=Unnamed dimension=3 values=[0.0174781,0.0174781,0.0174781] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] CDF(quantile)=0.5 covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0199465,0,0.0199465,0.0833333,0.0199465,0,0.0199465,0.0833333] correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239359,0,0.239359,1,0.239359,0,0.239359,1] spearman=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239359,0,0.239359,1,0.239359,0,0.239359,1] kendall=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.160861,0,0.160861,1,0.160861,0,0.160861,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.98013] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.248011] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1 margin CDF=0.25 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.272373] indices=[1,0] margins=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.25,0.25,1] margins PDF=1.13117 margins CDF=0.0893097 margins quantile=class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.265472,0.397787] Normal copula correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.261052,0,0.261052,1,0.261052,0,0.261052,1] from the Spearman correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] openturns-1.9/lib/test/t_NormalFactory_std.cxx000066400000000000000000000054121307543307100216530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { UnsignedInteger dim = 3; Point mean(dim); Point sigma(dim); CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { mean[i] = i + 0.5; sigma[i] = 2 * i + 1.0; for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = 0.5 * (1.0 + i) / dim; } } Normal distribution(mean, sigma, R); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); NormalFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Normal estimatedNormal(factory.buildAsNormal(sample)); fullprint << "Normal =" << distribution << std::endl; fullprint << "Estimated normal=" << estimatedNormal << std::endl; estimatedNormal = factory.buildAsNormal(); fullprint << "Default normal=" << estimatedNormal << std::endl; estimatedNormal = factory.buildAsNormal(distribution.getParameter()); fullprint << "Normal from parameters=" << estimatedNormal << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_NormalFactory_std.expout000066400000000000000000000054141307543307100223770ustar00rootroot00000000000000Distribution =class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,1.5,2.5] sigma=class=Point name=Unnamed dimension=3 values=[1,3,5] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Estimated distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.4883,1.46562,2.46859] sigma=class=Point name=Unnamed dimension=3 values=[0.992448,3.00459,4.99434] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.312825,0.492695,0.312825,1,0.483693,0.492695,0.483693,1] Default distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution from parameters=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,1.5,2.5] sigma=class=Point name=Unnamed dimension=3 values=[1,3,5] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Normal =class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,1.5,2.5] sigma=class=Point name=Unnamed dimension=3 values=[1,3,5] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Estimated normal=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.4883,1.46562,2.46859] sigma=class=Point name=Unnamed dimension=3 values=[0.992448,3.00459,4.99434] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.312825,0.492695,0.312825,1,0.483693,0.492695,0.483693,1] Default normal=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Normal from parameters=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,1.5,2.5] sigma=class=Point name=Unnamed dimension=3 values=[1,3,5] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] openturns-1.9/lib/test/t_Normal_large.cxx000066400000000000000000000125521307543307100206260ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal for large dimension vector * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Big test case for correlated components // Instanciate one distribution object UnsignedInteger dim = 4; Point meanPoint(dim, 1.0); Point sigma(dim, 1.0); CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal distribution(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 1000; Sample oneSample = distribution.getSample( size ); fullprint << "sample of size " << size << " first=" << oneSample[0] << " last=" << oneSample[oneSample.getSize() - 1] << std::endl; Point mean(oneSample.computeMean()); fullprint << "mean error (relative)=" << (mean - meanPoint).norm() / meanPoint.norm() << std::endl; CovarianceMatrix covariance(oneSample.computeCovariance()); Scalar errorCovariance = 0.0; for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < dim; j++) { errorCovariance += std::abs(covariance(i, j) - sigma[i] * sigma[j] * R(i, j)); } } fullprint << "covariance error (absolute, normalized)=" << errorCovariance / (dim * dim) << std::endl; // Define a point Point zero(dim, 0.0); // Show PDF of zero point Scalar zeroPDF = distribution.computePDF( zero ); Scalar zeroCDF = distribution.computeCDF( zero ); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << " density generator=" << distribution.computeDensityGenerator(0.0) << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.5) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2)) << std::endl; Point quantile = margins.computeQuantile(0.5); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; // Very big test case for independent components dim = 200; meanPoint = Point(dim, 0.1); sigma = Point(dim, 1.0); distribution = Normal(meanPoint, sigma, IdentityMatrix(dim)); fullprint << "Has independent copula? " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for sampling oneSample = distribution.getSample( size / 10 ); fullprint << "sample of size " << size << " first=" << oneSample[0] << " last=" << oneSample[oneSample.getSize() - 1] << std::endl; mean = oneSample.computeMean(); fullprint << "mean error (relative)=" << (mean - meanPoint).norm() / meanPoint.norm() << std::endl; covariance = oneSample.computeCovariance(); errorCovariance = 0.0; for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < dim; j++) { errorCovariance += std::abs(covariance(i, j) - (i == j ? sigma[i] * sigma[j] : 0)); } } fullprint << "covariance error (absolute, normalized)=" << errorCovariance / (dim * dim) << std::endl; // Define a point zero = Point(dim, 0.0); // Show PDF and CDF of zero point zeroPDF = distribution.computePDF( zero ); zeroCDF = distribution.computeCDF( zero ); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << " density generator=" << distribution.computeDensityGenerator(0.0) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Normal_large.expout000066400000000000000000000160561307543307100213530ustar00rootroot00000000000000sample of size 1000 first=class=Point name=Unnamed dimension=4 values=[1.6082,0.207563,-0.0888678,1.68463] last=class=Point name=Unnamed dimension=4 values=[2.08213,3.06501,2.58937,-0.0516727] mean error (relative)=0.0414723 covariance error (absolute, normalized)=0.0144979 Zero point= class=Point name=Unnamed dimension=4 values=[0,0,0,0] pdf=0.0136478 cdf=0.00646508 density generator=0.0253303 margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile=class=Point name=Unnamed dimension=1 values=[1] margin realization=class=Point name=Unnamed dimension=1 values=[1.31049] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile=class=Point name=Unnamed dimension=1 values=[1] margin realization=class=Point name=Unnamed dimension=1 values=[1.8214] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile=class=Point name=Unnamed dimension=1 values=[1] margin realization=class=Point name=Unnamed dimension=1 values=[0.258164] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile=class=Point name=Unnamed dimension=1 values=[1] margin realization=class=Point name=Unnamed dimension=1 values=[1.64156] indices=[1,0] margins=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.0943539 margins CDF=0.0625141 margins quantile=class=Point name=Unnamed dimension=2 values=[1.39352,1.39352] margins CDF(quantile)=0.5 margins realization=class=Point name=Unnamed dimension=2 values=[0.591227,-0.167529] Has independent copula? true sample of size 1000 first=class=Point name=Unnamed dimension=200 values=[-1.1501,0.403327,1.47477,-0.35091,-0.267871,-1.14963,-1.11914,1.98403,-0.241304,1.46431,0.613122,0.892329,-0.0106239,0.118552,1.88662,0.0989573,0.0504324,1.23041,-1.12644,0.649389,0.196965,0.648015,1.5685,-2.59943,-0.558887,-2.35987,0.225587,1.06408,0.816502,1.93148,0.632228,0.20083,1.10128,0.273727,-0.78831,1.00228,0.548311,-1.70706,0.43934,2.02049,0.226454,-0.0947698,1.02129,-0.62555,-0.861517,-0.205614,2.11284,-2.15962,0.249033,0.737666,1.0845,0.083716,0.943283,-0.310263,0.931895,1.48718,0.33657,-0.199284,1.35591,-0.916426,-0.71568,-0.333754,0.376822,-1.13114,-1.44096,0.593294,0.697384,0.686686,-0.755152,-1.96256,-0.0189837,0.0185737,0.135045,0.168296,-0.340433,-0.0636069,-0.0889986,-1.77593,-0.054099,-0.168505,1.91193,-0.528254,-0.548141,-0.229999,-2.18417,1.29765,-0.360289,0.525318,2.23315,0.209252,0.243396,2.08658,-0.147462,0.135149,-0.725006,-0.798797,1.34664,1.24198,0.64236,1.12222,0.0401722,-1.24951,0.637595,-0.966001,0.264217,-0.462955,-0.715986,0.789577,1.6074,0.295437,1.16026,0.667815,-1.67669,0.414452,-1.15907,0.169751,-0.277983,-0.00873008,0.293749,0.727885,-0.607898,1.32303,-1.83188,-1.48107,0.360873,0.577074,-0.271964,1.78921,-1.22937,0.0989726,-0.467947,-0.0922083,-1.12891,-0.739846,0.0121345,-0.522069,-0.236476,1.25348,1.91609,0.249814,0.0792944,-0.710396,-0.861642,-1.27587,-1.17853,-0.665714,-0.16587,-1.48975,-0.0801062,-0.203341,1.33831,-0.336168,1.05683,1.86528,-0.366475,-0.94532,0.750909,2.40667,0.310049,-1.10724,-1.01355,-0.29067,0.273992,0.48738,0.0120011,-0.651962,1.01833,-0.507048,0.958048,0.502256,0.372363,0.304381,-0.506288,-0.525563,0.153626,-0.0182899,0.864303,-1.35688,0.571886,-0.625761,0.120072,0.0886974,0.364812,-1.73088,-0.98306,0.385076,-0.575987,-0.369786,0.522718,-0.32916,-2.54585,-0.624745,1.53553,0.769687,-0.603482,-1.02477,-0.718905,-0.0655556,-0.55849,-0.472014] last=class=Point name=Unnamed dimension=200 values=[0.13954,1.9581,0.0922706,0.491538,-0.320286,0.0835375,0.700305,-0.0735205,0.333354,0.59186,-0.628357,0.194963,-0.735206,1.84353,-0.106715,0.42359,1.60878,1.73368,-0.670801,-1.29848,0.445937,-1.6257,1.33983,-0.855399,0.441167,-0.572371,0.332801,-0.37484,0.0332814,-1.99718,-1.70265,0.0436143,-0.734618,2.02838,0.710772,-0.539924,0.739119,-1.94706,0.235118,0.204566,-1.67498,1.00636,-1.09417,1.16795,-0.0229323,1.92196,1.3142,-0.485167,0.0618486,-0.869981,-0.131949,0.0333078,0.555229,0.463152,-1.24999,-0.79441,-2.43042,0.687239,-1.03986,0.0296275,1.47503,0.673733,0.51614,-0.376395,-0.249593,-0.833331,1.55557,-1.82257,-2.30602,-1.1861,-0.0351426,1.69347,-0.00354013,0.236249,1.74938,0.803329,1.02098,-0.57176,0.981317,0.0169211,0.0318534,-0.327981,0.906673,-0.321252,0.642464,0.530424,0.158765,0.477101,0.304549,-0.615612,0.040652,-0.920223,-1.63003,0.357684,0.649401,0.694008,1.57737,0.490517,-0.448073,1.0005,0.810265,1.98491,-1.24464,-2.14452,-1.3238,0.943986,-0.310782,0.174831,0.97626,1.10243,1.21353,-1.94404,-0.994052,-1.86512,0.505481,1.12256,0.677826,-1.15725,-1.397,1.02297,-0.139832,-0.221172,1.47266,2.72802,-0.903231,0.560507,-0.84642,-0.048026,-1.18694,0.364841,1.30935,0.198992,-0.832509,-0.511336,0.00717079,0.383982,1.96614,0.340665,1.25672,1.39057,-0.175019,-2.17064,0.176446,0.0534574,0.778567,0.469072,-0.996058,1.11127,0.75052,-0.62477,-0.505945,1.59528,0.835833,-2.18023,-0.883523,0.605795,-1.09046,1.13622,0.606439,0.160394,-0.685948,0.587963,-1.14936,-1.03626,0.465891,0.515154,0.0208542,0.493445,1.3369,0.0066312,-0.0954374,-0.86058,-1.29481,0.854114,-0.718946,-2.01076,-0.809356,-0.696743,1.55153,-0.328021,0.111885,-1.86421,-0.248157,2.33908,-0.225724,-0.621094,1.45964,-0.206268,0.636798,-0.357281,0.252898,-0.217682,-1.8027,0.502832,-0.910924,0.26079,-1.25,0.0958104,0.689676,1.10179] mean error (relative)=0.95661 covariance error (absolute, normalized)=0.0803609 Zero point= class=Point name=Unnamed dimension=200 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] pdf=5.59395e-81 cdf=3.83768e-68 density generator=1.52059e-80 openturns-1.9/lib/test/t_Normal_std.cxx000066400000000000000000000344531307543307100203320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } inline Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object for (UnsignedInteger dim = 1; dim <= 4; dim++) { fullprint << "\n*** Case " << dim << " ***\n" << std::endl; Point meanPoint(dim, 0.0); Point sigma(dim); for (UnsignedInteger i = 0; i < dim; i++) { sigma[i] = i + 1.0; } CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal distribution(meanPoint, sigma, R); Description description(dim); for (UnsignedInteger j = 1; j <= dim; j++) { OSS oss; oss << "Marginal " << j; description[j - 1] = oss; } distribution.setDescription(description); fullprint << std::setprecision(5); fullprint << "Parameters collection=" << distribution.getParametersCollection() << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample(distribution.getSample( size )); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; if (distribution.getDimension() == 1) { size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { RandomGenerator::SetSeed(1); fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } } // Define a point Point point( distribution.getDimension(), 0.5 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-4; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << clean(DDF) << std::endl; Point ddfFD(distribution.ContinuousDistribution::computeDDF(point)); fullprint << "ddf (FD)=" << clean(ddfFD) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; if (dim == 1) { fullprint << "pdf (FD)=" << clean((distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps)) << std::endl; } Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; if (dim == 1) { Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; } Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << clean(PDFgr) << std::endl; Point PDFgrFD(2 * dim); for (UnsignedInteger i = 0; i < dim; i++) { meanPoint[i] += eps; Normal distributionLeft(meanPoint, sigma, R); meanPoint[i] -= 2.0 * eps; Normal distributionRight(meanPoint, sigma, R); PDFgrFD[i] = (distributionLeft.computePDF(point) - distributionRight.computePDF(point)) / (2.0 * eps); meanPoint[i] += eps; } for (UnsignedInteger i = 0; i < dim; i++) { sigma[i] += eps; Normal distributionLeft(meanPoint, sigma, R); sigma[i] -= 2.0 * eps; Normal distributionRight(meanPoint, sigma, R); PDFgrFD[dim + i] = (distributionLeft.computePDF(point) - distributionRight.computePDF(point)) / (2.0 * eps); sigma[i] += eps; } fullprint << "pdf gradient (FD)=" << clean(PDFgrFD) << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); int oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision( 4 ); fullprint << "quantile=" << quantile << std::endl; PlatformInfo::SetNumericalPrecision( oldPrecision ); fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; if (distribution.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Normal::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar beta = point.normSquare(); Scalar densityGenerator = distribution.computeDensityGenerator(beta); fullprint << "density generator=" << densityGenerator << std::endl; fullprint << "pdf via density generator=" << distribution.EllipticalDistribution::computePDF(point) << std::endl; Scalar densityGeneratorDerivative = distribution.computeDensityGeneratorDerivative(beta); fullprint << "density generator derivative =" << densityGeneratorDerivative << std::endl; fullprint << "density generator derivative (FD)=" << clean((distribution.computeDensityGenerator(beta + eps) - distribution.computeDensityGenerator(beta - eps)) / (2.0 * eps)) << std::endl; Scalar densityGeneratorSecondDerivative = distribution.computeDensityGeneratorSecondDerivative(beta); fullprint << "density generator second derivative =" << densityGeneratorSecondDerivative << std::endl; fullprint << "density generator second derivative (FD)=" << clean((distribution.computeDensityGeneratorDerivative(beta + eps) - distribution.computeDensityGeneratorDerivative(beta - eps)) / (2.0 * eps)) << std::endl; // Compute the radial CDF Scalar radius = 2.0; fullprint << "Radial CDF(" << radius << ")=" << distribution.computeRadialDistributionCDF(radius) << std::endl; // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Distribution margin(distribution.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1, 0.5)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1, 0.5)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } if (dim >= 2) { // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Distribution margins(distribution.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF=" << margins.computePDF(Point(2, 0.5)) << std::endl; fullprint << "margins CDF=" << margins.computeCDF(Point(2, 0.5)) << std::endl; quantile = margins.computeQuantile(0.95); fullprint << "margins quantile=" << quantile << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } Matrix chol(distribution.getCholesky()); Matrix invChol(distribution.getInverseCholesky()); fullprint << "chol=" << chol.clean(1.0e-6) << std::endl; fullprint << "invchol=" << invChol.clean(1.0e-6) << std::endl; fullprint << "chol*t(chol)=" << (chol * chol.transpose()).clean(1.0e-6) << std::endl; fullprint << "chol*invchol=" << (chol * invChol).clean(1.0e-6) << std::endl; { // Comparison with another elliptical distribution const Bool equal = distribution == Student(4.5, meanPoint, sigma, R); fullprint << "Comparison with a Student distribution " << std::boolalpha << equal << std::endl; } { // Comparison with a non-elliptical distribution const Bool equal = distribution == Exponential(); fullprint << "Comparison with an Exponential distribution " << std::boolalpha << equal << std::endl; } { // Comparison with itself const Bool equal = distribution == distribution; fullprint << "Comparison with itself " << std::boolalpha << equal << std::endl; } // { // // Comparison with itself, as a Distribution // const Bool equal = distribution == Distribution(distribution); // fullprint << "Comparison with itself as a distribution" << std::boolalpha << equal << std::endl; // } { // Comparison with a clone Normal other(distribution.getDimension()); other.setParameter(distribution.getParameter()); const Bool equal = distribution == other; fullprint << "Comparison with a clone " << std::boolalpha << equal << std::endl; } { // Comparison with another member of the same family Normal other(distribution.getDimension()); other.setParameter(distribution.getParameter() * 0.5); const Bool equal = distribution == other; fullprint << "Comparison with another member " << std::boolalpha << equal << std::endl; } } // dim } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Normal_std.expout000066400000000000000000000723311307543307100210510ustar00rootroot00000000000000 *** Case 1 *** Parameters collection=[[mean_0 : 0, standard_deviation_0 : 1]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) Distribution class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution Normal(mu = 0, sigma = 1) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.608202] oneSample first=class=Point name=Unnamed dimension=1 values=[-1.26617] last=class=Point name=Unnamed dimension=1 values=[1.5244] mean=class=Point name=Unnamed dimension=1 values=[-0.0132171] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.0005] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.176033] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.176033] log pdf=-1.0439 pdf =0.35207 pdf (FD)=0.35207 cdf=0.69146 ccdf=0.30854 survival=0.30854 Inverse survival=class=Point name=Unnamed dimension=1 values=[-1.64485] Survival(inverse survival)=0.95 characteristic function=(0.8825,0) log characteristic function=(-0.125,0) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.176033,-0.264049] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.176033,-0.264049] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.352065,-0.176033] quantile=class=Point name=Unnamed dimension=1 values=[1.645] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.95996] upper bound=class=Point name=Unnamed dimension=1 values=[1.95996] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Normal(mu = 0, sigma = 1)) gradientImplementation=MinimumVolumeLevelSetGradient(Normal(mu = 0, sigma = 1)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Normal(mu = 0, sigma = 1)) level=2.83967 beta=0.058445 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.95996] upper bound=class=Point name=Unnamed dimension=1 values=[1.95996] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-7.65063] upper bound=class=Point name=Unnamed dimension=1 values=[1.64485] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.64485] upper bound=class=Point name=Unnamed dimension=1 values=[7.65063] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0] standard deviation=class=Point name=Unnamed dimension=1 values=[1] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[3] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mean_0 : 0, standard_deviation_0 : 1]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) density generator=0.35207 pdf via density generator=0.35207 density generator derivative =-0.17603 density generator derivative (FD)=-0.17603 density generator second derivative =0.088016 density generator second derivative (FD)=0.088016 Radial CDF(2)=0.9545 margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.35207 margin CDF=0.69146 margin quantile=class=Point name=Unnamed dimension=1 values=[1.64485] margin realization=class=Point name=Unnamed dimension=1 values=[0.123969] chol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] chol*t(chol)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] chol*invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Comparison with a Student distribution false Comparison with an Exponential distribution false Comparison with itself true Comparison with a clone true Comparison with another member false *** Case 2 *** Parameters collection=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[R_1_0 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) Distribution class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,2] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] Distribution Normal(mu = [0,0], sigma = [1,2], R = [[ 1 0.5 ] [ 0.5 1 ]]) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=2 values=[1.08522,-1.04268] oneSample first=class=Point name=Unnamed dimension=2 values=[1.11121,-0.713628] last=class=Point name=Unnamed dimension=2 values=[-0.878534,-0.77061] mean=class=Point name=Unnamed dimension=2 values=[-0.00563385,0.027977] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.03867,1.02294,1.02294,3.97641] Point= class=Point name=Unnamed dimension=2 values=[0.5,0.5] ddf =class=Point name=Unnamed dimension=2 values=[-0.0405455,0] ddf (FD)=class=Point name=Unnamed dimension=2 values=[-0.0405455,0] log pdf=-2.5122 pdf =0.081091 cdf=0.48677 survival=0.1966 Inverse survival=class=Point name=Unnamed dimension=2 values=[-1.91633,-3.83266] Survival(inverse survival)=0.95 characteristic function=(0.41686,0) log characteristic function=(-0.875,0) pdf gradient =class=Point name=Unnamed dimension=4 values=[0.0405455,0,-0.0608183,-0.0405455] pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[0.0405455,0,-0.0608183,-0.0405455] cdf gradient =class=Point name=Unnamed dimension=4 values=[0,0,0,0] quantile=class=Point name=Unnamed dimension=2 values=[1.916,3.833] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-2.21213,-4.42426] upper bound=class=Point name=Unnamed dimension=2 values=[2.21213,4.42426] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.97304 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Normal(mu = [0,0], sigma = [1,2], R = [[ 1 0.5 ] [ 0.5 1 ]])) gradientImplementation=MinimumVolumeLevelSetGradient(Normal(mu = [0,0], sigma = [1,2], R = [[ 1 0.5 ] [ 0.5 1 ]])) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Normal(mu = [0,0], sigma = [1,2], R = [[ 1 0.5 ] [ 0.5 1 ]])) level=4.83361 beta=0.0079577 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-2.21213,-4.42426] upper bound=class=Point name=Unnamed dimension=2 values=[2.21213,4.42426] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.97304 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-7.65063,-15.3013] upper bound=class=Point name=Unnamed dimension=2 values=[1.91633,3.83266] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.97234 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1.91633,-3.83266] upper bound=class=Point name=Unnamed dimension=2 values=[7.65063,15.3013] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.97234 mean=class=Point name=Unnamed dimension=2 values=[0,0] standard deviation=class=Point name=Unnamed dimension=2 values=[1,2] skewness=class=Point name=Unnamed dimension=2 values=[0,0] kurtosis=class=Point name=Unnamed dimension=2 values=[3,3] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,1,4] correlation=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] spearman=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.482584,0.482584,1] kendall=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.333333,0.333333,1] parameters=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[R_1_0 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) density generator=0.12395 pdf via density generator=0.081091 density generator derivative =-0.061975 density generator derivative (FD)=-0.061975 density generator second derivative =0.030987 density generator second derivative (FD)=0.030987 Radial CDF(2)=0.86466 margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.35207 margin CDF=0.69146 margin quantile=class=Point name=Unnamed dimension=1 values=[1.64485] margin realization=class=Point name=Unnamed dimension=1 values=[0.7298] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.19333 margin CDF=0.59871 margin quantile=class=Point name=Unnamed dimension=1 values=[3.28971] margin realization=class=Point name=Unnamed dimension=1 values=[1.53929] indices=[1,0] margins=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[2,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.081091 margins CDF=0.48677 margins quantile=class=Point name=Unnamed dimension=2 values=[3.83266,1.91633] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[1.61626,0.404768] chol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,0,1.73205] invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,-0.57735,0,0.57735] chol*t(chol)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,1,4] chol*invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] Comparison with a Student distribution false Comparison with an Exponential distribution false Comparison with itself true Comparison with a clone true Comparison with another member false *** Case 3 *** Parameters collection=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[mean_2 : 0, standard_deviation_2 : 3],[R_1_0 : 0.5, R_2_0 : 0, R_2_1 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) Distribution class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,2,3] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] Distribution Normal(mu = [0,0,0], sigma = [1,2,3], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]]) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=3 values=[0.44941,1.98808,3.74507] oneSample first=class=Point name=Unnamed dimension=3 values=[-3.14211,-1.712,3.59688] last=class=Point name=Unnamed dimension=3 values=[-1.05624,1.82582,2.28642] mean=class=Point name=Unnamed dimension=3 values=[-0.0130959,-0.00581536,0.0113697] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.987829,0.982678,-0.0196036,0.982678,3.95061,2.96383,-0.0196036,2.96383,9.01984] Point= class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] ddf =class=Point name=Unnamed dimension=3 values=[-0.00754529,0.0010779,-0.0010779] ddf (FD)=class=Point name=Unnamed dimension=3 values=[-0.00754529,0.0010779,-0.0010779] log pdf=-4.3478 pdf =0.012935 cdf=0.32981 survival=0.11135 Inverse survival=class=Point name=Unnamed dimension=3 values=[-2.07982,-4.15964,-6.23946] Survival(inverse survival)=0.95 characteristic function=(0.063928,0) log characteristic function=(-2.75,0) pdf gradient =class=Point name=Unnamed dimension=6 values=[0.00754529,-0.0010779,0.0010779,-0.00916214,-0.00673687,-0.00413195] pdf gradient (FD)=class=Point name=Unnamed dimension=6 values=[0.00754529,-0.0010779,0.0010779,-0.00916214,-0.00673687,-0.00413195] cdf gradient =class=Point name=Unnamed dimension=6 values=[0,0,0,0,0,0] quantile=class=Point name=Unnamed dimension=3 values=[2.08,4.16,6.239] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] standard deviation=class=Point name=Unnamed dimension=3 values=[1,2,3] skewness=class=Point name=Unnamed dimension=3 values=[0,0,0] kurtosis=class=Point name=Unnamed dimension=3 values=[3,3,3] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,4,3,0,3,9] correlation=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] spearman=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.482584,0,0.482584,1,0.482584,0,0.482584,1] kendall=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0,0.333333,1,0.333333,0,0.333333,1] parameters=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[mean_2 : 0, standard_deviation_2 : 3],[R_1_0 : 0.5, R_2_0 : 0, R_2_1 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) density generator=0.043638 pdf via density generator=0.012935 density generator derivative =-0.021819 density generator derivative (FD)=-0.021819 density generator second derivative =0.01091 density generator second derivative (FD)=0.01091 Radial CDF(2)=0.73854 margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.35207 margin CDF=0.69146 margin quantile=class=Point name=Unnamed dimension=1 values=[1.64485] margin realization=class=Point name=Unnamed dimension=1 values=[0.217088] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.19333 margin CDF=0.59871 margin quantile=class=Point name=Unnamed dimension=1 values=[3.28971] margin realization=class=Point name=Unnamed dimension=1 values=[2.28236] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.13115 margin CDF=0.56618 margin quantile=class=Point name=Unnamed dimension=1 values=[4.93456] margin realization=class=Point name=Unnamed dimension=1 values=[-0.22004] indices=[1,0] margins=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[2,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.081091 margins CDF=0.48677 margins quantile=class=Point name=Unnamed dimension=2 values=[3.83266,1.91633] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[3.20622,0.887826] chol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,0,1.73205,1.73205,0,0,2.44949] invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,-0.57735,0.408248,0,0.57735,-0.408248,0,0,0.408248] chol*t(chol)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,0,1,4,3,0,3,9] chol*invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] Comparison with a Student distribution false Comparison with an Exponential distribution false Comparison with itself true Comparison with a clone true Comparison with another member false *** Case 4 *** Parameters collection=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[mean_2 : 0, standard_deviation_2 : 3],[mean_3 : 0, standard_deviation_3 : 4],[R_1_0 : 0.5, R_2_0 : 0, R_2_1 : 0.5, R_3_0 : 0, R_3_1 : 0, R_3_2 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) Distribution class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,2,3,4] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0.5,0,0,0.5,1,0.5,0,0,0.5,1] Distribution Normal(mu = [0,0,0,0], sigma = [1,2,3,4], R = [[ 1 0.5 0 0 ] [ 0.5 1 0.5 0 ] [ 0 0.5 1 0.5 ] [ 0 0 0.5 1 ]]) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=4 values=[1.51193,4.01795,5.56609,5.09529] oneSample first=class=Point name=Unnamed dimension=4 values=[-0.0306902,-0.814045,-3.73544,-2.08147] last=class=Point name=Unnamed dimension=4 values=[2.01573,1.43862,-4.03567,-7.64326] mean=class=Point name=Unnamed dimension=4 values=[-0.0117286,-0.0185541,-0.0100932,0.05681] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1.01522,1.00619,-0.0305626,-0.0841489,1.00619,3.9588,3.02894,-0.0262725,-0.0305626,3.02894,9.28878,6.14816,-0.0841489,-0.0262725,6.14816,16.0325] Point= class=Point name=Unnamed dimension=4 values=[0.5,0.5,0.5,0.5] ddf =class=Point name=Unnamed dimension=4 values=[-0.000951889,0.000135984,-0.000135984,0] ddf (FD)=class=Point name=Unnamed dimension=4 values=[-0.000951889,0.000135984,-0.000135984,0] log pdf=-6.4181 pdf =0.0016318 cdf=0.22145 survival=0.067873 Inverse survival=class=Point name=Unnamed dimension=4 values=[-2.1934,-4.38679,-6.58019,-8.77359] Survival(inverse survival)=0.95 characteristic function=(0.0019305,0) log characteristic function=(-6.25,0) pdf gradient =class=Point name=Unnamed dimension=8 values=[0.000951889,-0.000135984,0.000135984,0,-0.00115586,-0.000849901,-0.000521272,-0.000407952] pdf gradient (FD)=class=Point name=Unnamed dimension=8 values=[0.000951889,-0.000135984,0.000135984,0,-0.00115586,-0.000849901,-0.000521272,-0.000407952] cdf gradient =class=Point name=Unnamed dimension=8 values=[0,0,0,0,0,0,0,0] quantile=class=Point name=Unnamed dimension=4 values=[2.193,4.387,6.58,8.774] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] standard deviation=class=Point name=Unnamed dimension=4 values=[1,2,3,4] skewness=class=Point name=Unnamed dimension=4 values=[0,0,0,0] kurtosis=class=Point name=Unnamed dimension=4 values=[3,3,3,3] covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,1,0,0,1,4,3,0,0,3,9,6,0,0,6,16] correlation=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0.5,0,0,0.5,1,0.5,0,0,0.5,1] spearman=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.482584,0,0,0.482584,1,0.482584,0,0,0.482584,1,0.482584,0,0,0.482584,1] kendall=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.333333,0,0,0.333333,1,0.333333,0,0,0.333333,1,0.333333,0,0,0.333333,1] parameters=[[mean_0 : 0, standard_deviation_0 : 1],[mean_1 : 0, standard_deviation_1 : 2],[mean_2 : 0, standard_deviation_2 : 3],[mean_3 : 0, standard_deviation_3 : 4],[R_1_0 : 0.5, R_2_0 : 0, R_2_1 : 0.5, R_3_0 : 0, R_3_1 : 0, R_3_2 : 0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Normal(mu = 0, sigma = 1) density generator=0.015364 pdf via density generator=0.0016318 density generator derivative =-0.0076818 density generator derivative (FD)=-0.0076818 density generator second derivative =0.0038409 density generator second derivative (FD)=0.0038409 Radial CDF(2)=0.59399 margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.35207 margin CDF=0.69146 margin quantile=class=Point name=Unnamed dimension=1 values=[1.64485] margin realization=class=Point name=Unnamed dimension=1 values=[1.1002] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.19333 margin CDF=0.59871 margin quantile=class=Point name=Unnamed dimension=1 values=[3.28971] margin realization=class=Point name=Unnamed dimension=1 values=[1.68814] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.13115 margin CDF=0.56618 margin quantile=class=Point name=Unnamed dimension=1 values=[4.93456] margin realization=class=Point name=Unnamed dimension=1 values=[-5.45695] margin=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.098959 margin CDF=0.54974 margin quantile=class=Point name=Unnamed dimension=1 values=[6.57941] margin realization=class=Point name=Unnamed dimension=1 values=[2.64638] indices=[1,0] margins=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[2,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.081091 margins CDF=0.48677 margins quantile=class=Point name=Unnamed dimension=2 values=[3.83266,1.91633] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[1.01367,-1.06112] chol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,1,0,0,0,1.73205,1.73205,0,0,0,2.44949,2.44949,0,0,0,3.16228] invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,-0.57735,0.408248,-0.316228,0,0.57735,-0.408248,0.316228,0,0,0.408248,-0.316228,0,0,0,0.316228] chol*t(chol)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,1,0,0,1,4,3,0,0,3,9,6,0,0,6,16] chol*invchol=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] Comparison with a Student distribution false Comparison with an Exponential distribution false Comparison with itself true Comparison with a clone true Comparison with another member false openturns-1.9/lib/test/t_Normal_wrongarg.cxx000066400000000000000000000037521307543307100213640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Normal with wrong arguments * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Normal { public: TestObject() : Normal(Point(1), Point(1), CorrelationMatrix(1)) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { try { // Instanciate one distribution object Point meanPoint(1); meanPoint[0] = 1.0; Point sigma(1); sigma[0] = 1.0; CorrelationMatrix R(1); R(0, 0) = 1.0; Normal distribution(meanPoint, sigma, R); fullprint << "Distribution " << distribution << std::endl; // We try to set an erroneous covariance matrix (wrong dimension) into distribution CorrelationMatrix newR(2); distribution.setCorrelation(newR); // Normally, we should never go here throw TestFailed("Exception has NOT been thrown or catched !"); } catch (InvalidArgumentException & ex) { // Nothing to do } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Normal_wrongarg.expout000066400000000000000000000004461307543307100221030ustar00rootroot00000000000000Distribution class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] openturns-1.9/lib/test/t_NormalityTest_std.cxx000066400000000000000000000122771307543307100217200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Test * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); Collection continuousDistributionCollection; Collection discreteDistributionCollection; Collection distributionCollection; Beta beta(2., 3., 0., 1.); distributionCollection.add(beta); continuousDistributionCollection.add(beta); Gamma gamma(1., 2., 3.); distributionCollection.add(gamma); continuousDistributionCollection.add(gamma); Gumbel gumbel(1., 2.); distributionCollection.add(gumbel); continuousDistributionCollection.add(gumbel); LogNormal lognormal(1., 1., 2.); distributionCollection.add(lognormal); continuousDistributionCollection.add(lognormal); Logistic logistic(1., 1.); distributionCollection.add(logistic); continuousDistributionCollection.add(logistic); Normal normal(1., 2.); distributionCollection.add(normal); continuousDistributionCollection.add(normal); TruncatedNormal truncatednormal(1., 1., 0., 3.); distributionCollection.add(truncatednormal); continuousDistributionCollection.add(truncatednormal); Student student(4., 10.); distributionCollection.add(student); continuousDistributionCollection.add(student); Triangular triangular(-1., 2., 4.); distributionCollection.add(triangular); continuousDistributionCollection.add(triangular); Uniform uniform(1., 2.); distributionCollection.add(uniform); continuousDistributionCollection.add(uniform); Weibull weibull(1., 1., 2.); distributionCollection.add(weibull); continuousDistributionCollection.add(weibull); Geometric geometric(.5); distributionCollection.add(geometric); discreteDistributionCollection.add(geometric); Poisson poisson(2.); distributionCollection.add(poisson); discreteDistributionCollection.add(poisson); Sample x(3, 1); x[0][0] = 1.0; x[1][0] = 2.0; x[2][0] = 3.0; Point p(3); p[0] = 0.3; p[1] = 0.2; p[2] = 0.5; UserDefined userdefined(x, p); distributionCollection.add(userdefined); discreteDistributionCollection.add(userdefined); UnsignedInteger size = 10000; UnsignedInteger continuousDistributionNumber = continuousDistributionCollection.getSize(); UnsignedInteger discreteDistributionNumber = discreteDistributionCollection.getSize(); UnsignedInteger distributionNumber = continuousDistributionNumber + discreteDistributionNumber; Collection sampleCollection(distributionNumber); Collection continuousSampleCollection(continuousDistributionNumber); Collection discreteSampleCollection(discreteDistributionNumber); for (UnsignedInteger i = 0; i < continuousDistributionNumber; i++) { continuousSampleCollection[i] = continuousDistributionCollection[i].getSample(size); continuousSampleCollection[i].setName(continuousDistributionCollection[i].getName()); sampleCollection[i] = continuousSampleCollection[i]; } for (UnsignedInteger i = 0; i < discreteDistributionNumber; i++) { discreteSampleCollection[i] = discreteDistributionCollection[i].getSample(size); discreteSampleCollection[i].setName(discreteDistributionCollection[i].getName()); sampleCollection[continuousDistributionNumber + i] = discreteSampleCollection[i]; } // Test the normality of several samples using the Anderson Darling test Point andersonDarlingResult(distributionNumber); for (UnsignedInteger i = 0; i < distributionNumber; i++) { TestResult result(NormalityTest::AndersonDarlingNormal(sampleCollection[i])); andersonDarlingResult[i] = result.getBinaryQualityMeasure(); fullprint << "sample " << sampleCollection[i].getName() << " result=" << andersonDarlingResult[i] << std::endl; } fullprint << "andersonDarlingResult=" << andersonDarlingResult << std::endl; // Test the normality of several samples using the Cramer Von Mises test Point cramerVonMisesResult(distributionNumber); for (UnsignedInteger i = 0; i < distributionNumber; i++) { TestResult result(NormalityTest::CramerVonMisesNormal(sampleCollection[i])); cramerVonMisesResult[i] = result.getBinaryQualityMeasure(); fullprint << "sample " << sampleCollection[i].getName() << " result=" << cramerVonMisesResult[i] << std::endl; } fullprint << "cramerVonMisesResult=" << cramerVonMisesResult << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_NormalityTest_std.expout000066400000000000000000000015731307543307100224370ustar00rootroot00000000000000sample Beta result=0 sample Gamma result=0 sample Gumbel result=0 sample LogNormal result=0 sample Logistic result=0 sample Normal result=1 sample TruncatedNormal result=0 sample Student result=0 sample Triangular result=0 sample Uniform result=0 sample Weibull result=0 sample Geometric result=0 sample Poisson result=0 sample UserDefined result=0 andersonDarlingResult=class=Point name=Unnamed dimension=14 values=[0,0,0,0,0,1,0,0,0,0,0,0,0,0] sample Beta result=0 sample Gamma result=0 sample Gumbel result=0 sample LogNormal result=0 sample Logistic result=0 sample Normal result=1 sample TruncatedNormal result=0 sample Student result=0 sample Triangular result=0 sample Uniform result=0 sample Weibull result=0 sample Geometric result=0 sample Poisson result=0 sample UserDefined result=0 cramerVonMisesResult=class=Point name=Unnamed dimension=14 values=[0,0,0,0,0,1,0,0,0,0,0,0,0,0] openturns-1.9/lib/test/t_OStream_std.cxx000066400000000000000000000037671307543307100204600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OStream for pretty printing of Objects * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class MyTest : public Object { public: virtual String __repr__() const { return String("MyTest class"); } virtual String __str__(const String & offset) const { return String("What a beautiful print !"); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream prettyprint(std::cout); try { // Test basic functionnalities //checkClassWithClassName(); MyTest obj; std::cout << obj << "\n"; std::cout << true << "\n"; std::cout << 23 << "\n"; std::cout << 100.23 << "\n"; std::cout << 'z' << "\n"; std::cout << "ch" << "\n"; //std::cout << &obj << "\n"; OStream fullprint(std::cout); fullprint << obj << "\n"; fullprint << true << "\n"; fullprint << 23 << "\n"; fullprint << 100.23 << "\n"; fullprint << 'z' << "\n"; fullprint << "ch" << "\n"; //fullprint << &obj << "\n"; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OStream_std.expout000066400000000000000000000001131307543307100211600ustar00rootroot00000000000000What a beautiful print ! 1 23 100.23 z ch MyTest class true 23 100.23 z ch openturns-1.9/lib/test/t_Object_std.cxx000066400000000000000000000023751307543307100203060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Object for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities //checkClassWithClassName(); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Object_std.expout000066400000000000000000000000001307543307100210070ustar00rootroot00000000000000openturns-1.9/lib/test/t_OrderStatisticsMarginalChecker_std.cxx000066400000000000000000000035711307543307100251650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrderStatisticsMarginalChecker for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline void checkMarginals(const ComposedDistribution::DistributionCollection& coll) { OStream fullprint(std::cout); OrderStatisticsMarginalChecker osmc(coll); fullprint << "marginals=" << coll << std::endl; fullprint << "isCompatible=" << osmc.isCompatible() << std::endl; fullprint << "partition=" << osmc.buildPartition() << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { ComposedDistribution::DistributionCollection coll; coll.add(Uniform(-1.0, 1.0)); coll.add(LogUniform(1.0, 1.2)); coll.add(Triangular(3.0, 4.0, 5.)); coll.add(Uniform(5.0, 6.0)); coll.add(Uniform(5.5, 6.5)); checkMarginals(coll); coll.add(Uniform(0.0, 1.0)); checkMarginals(coll); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OrderStatisticsMarginalChecker_std.expout000066400000000000000000000006031307543307100257000ustar00rootroot00000000000000marginals=[Uniform(a = -1, b = 1),LogUniform(aLog = 1, bLog = 1.2),Triangular(a = 3, m = 4, b = 5),Uniform(a = 5, b = 6),Uniform(a = 5.5, b = 6.5)] isCompatible=true partition=[0,2] marginals=[Uniform(a = -1, b = 1),LogUniform(aLog = 1, bLog = 1.2),Triangular(a = 3, m = 4, b = 5),Uniform(a = 5, b = 6),Uniform(a = 5.5, b = 6.5),Uniform(a = 0, b = 1)] isCompatible=false partition=[0,2] openturns-1.9/lib/test/t_OrdinalSumCopula_std.cxx000066400000000000000000000141511307543307100223140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrdinalSumCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object CorrelationMatrix R(2); R(0, 1) = 0.5; OrdinalSumCopula::CopulaCollection collection(3); collection[0] = FrankCopula(3.0); collection[1] = NormalCopula(R); collection[2] = ClaytonCopula(2.0); Point bounds(2); bounds[0] = 0.2; bounds[1] = 0.7; OrdinalSumCopula copula(collection, bounds); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; // Is this copula elliptical ? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula continuous ? fullprint << "Continuous = " << (copula.isContinuous() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical = " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent = " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = copula.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; UnsignedInteger precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(5); fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; PlatformInfo::SetNumericalPrecision(precision); // Define a point Point point( copula.getDimension(), 0.6 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point //Scalar eps(1e-5); Point DDF = copula.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Point ddfFD(copula.getDimension()); fullprint << "ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << std::endl; Scalar PDF = copula.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = copula.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; if (copula.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } Point mean = copula.getMean(); fullprint << "mean=" << mean << std::endl; precision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision(5); // Covariance and correlation CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; PlatformInfo::SetNumericalPrecision(precision); OrdinalSumCopula::PointWithDescriptionCollection parameters = copula.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OrdinalSumCopula_std.expout000066400000000000000000000105651307543307100230430ustar00rootroot00000000000000Copula class=OrdinalSumCopula name=OrdinalSumCopula dimension=2 copula[0]=class=FrankCopula name=FrankCopula dimension=2 theta=3 copula[1]=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] copula[2]=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2bounds=class=Point name=Unnamed dimension=2 values=[0.2,0.7] Copula OrdinalSumCopula([0, 0.2], FrankCopula(theta = 3), [0.2, 0.7], NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]), [0.7, 1], ClaytonCopula(theta = 2)) Elliptical distribution= false Continuous = true Elliptical = false Independent = false oneRealization=class=Point name=Unnamed dimension=2 values=[0.592127,0.414861] oneSample first=class=Point name=Unnamed dimension=2 values=[0.976204,0.931082] last=class=Point name=Unnamed dimension=2 values=[0.24046,0.373754] mean=class=Point name=Unnamed dimension=2 values=[0.498249,0.498239] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.084355,0.077568,0.077568,0.08399] Point= class=Point name=Unnamed dimension=2 values=[0.6,0.6] ddf =class=Point name=Unnamed dimension=2 values=[0.25786,0.25786] ddf (FD)=class=Point name=Unnamed dimension=2 values=[5.86093,5.86093] pdf =2.92442 cdf=0.543575 Survival =0.343575 Survival (ref)=0.343575 Inverse survival=class=Point name=Unnamed dimension=2 values=[0.0299408,0.0299408] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=2 values=[0.567157,0.567157] CDF(quantile)=0.5 Minimum volume interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.160334,0.160334] upper bound=class=Point name=Unnamed dimension=2 values=[0.839666,0.839666] finite lower bound=[1,1] finite upper bound=[1,1] threshold=0.679332 Minimum volume level set=class=LevelSet name=Unnamed dimension=2 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(OrdinalSumCopula([0, 0.2], FrankCopula(theta = 3), [0.2, 0.7], NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]), [0.7, 1], ClaytonCopula(theta = 2))) gradientImplementation=MinimumVolumeLevelSetGradient(OrdinalSumCopula([0, 0.2], FrankCopula(theta = 3), [0.2, 0.7], NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]), [0.7, 1], ClaytonCopula(theta = 2))) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=MinimumVolumeLevelSetEvaluation(OrdinalSumCopula([0, 0.2], FrankCopula(theta = 3), [0.2, 0.7], NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]), [0.7, 1], ClaytonCopula(theta = 2))) level=-0.206042 beta=1.22881 Bilateral confidence interval=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.160334,0.160334] upper bound=class=Point name=Unnamed dimension=2 values=[0.839666,0.839666] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.679332 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[0.971607,0.971607] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.971607 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.0299408,0.0299408] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] beta=0.970059 mean=class=Point name=Unnamed dimension=2 values=[0.5,0.5] covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.083333,0.076861,0.076861,0.083333] correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.92233,0.92233,1] spearman=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.92233,0.92233,1] kendall=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.76062,0.76062,1] parameters=[[theta_copula_0 : 3, R_2_1_copula_1 : 0.5, theta_copula_2 : 2]] openturns-1.9/lib/test/t_OrthogonalBasis_std.cxx000066400000000000000000000034271307543307100221750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrthogonalBasis for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger dim = 3; OrthogonalProductPolynomialFactory::PolynomialFamilyCollection polynomCollection(dim); polynomCollection[0] = LaguerreFactory(2.5); polynomCollection[1] = LegendreFactory(); polynomCollection[2] = HermiteFactory(); OrthogonalProductPolynomialFactory basisFactory(polynomCollection); OrthogonalBasis basis(basisFactory); fullprint << "Basis=" << basis << std::endl; Point point(dim, 0.5); for (UnsignedInteger i = 0; i < 10; ++i) { Function f(basis.build(i)); fullprint << "i=" << i << " f(point)=" << f(point) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OrthogonalBasis_std.expout000066400000000000000000000037241307543307100227170ustar00rootroot00000000000000Basis=class=OrthogonalBasis implementation=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0,class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1,class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] measure=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] i=0 f(point)=class=Point name=Unnamed dimension=1 values=[1] i=1 f(point)=class=Point name=Unnamed dimension=1 values=[-1.60357] i=2 f(point)=class=Point name=Unnamed dimension=1 values=[0.866025] i=3 f(point)=class=Point name=Unnamed dimension=1 values=[0.5] i=4 f(point)=class=Point name=Unnamed dimension=1 values=[2.049] i=5 f(point)=class=Point name=Unnamed dimension=1 values=[-1.38873] i=6 f(point)=class=Point name=Unnamed dimension=1 values=[-0.801784] i=7 f(point)=class=Point name=Unnamed dimension=1 values=[-0.279508] i=8 f(point)=class=Point name=Unnamed dimension=1 values=[0.433013] i=9 f(point)=class=Point name=Unnamed dimension=1 values=[-0.53033] openturns-1.9/lib/test/t_OrthogonalUniVariatePolynomial_std.cxx000066400000000000000000000050141307543307100252410ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrthogonalUniVariatePolynomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Default constructor: null polynomial OrthogonalUniVariatePolynomial P; Scalar point = 1.2; fullprint << "P=" << P << std::endl; fullprint << "P(" << point << ")=" << P(point) << std::endl; // Construction from a collection of recurrence coefficients OrthogonalUniVariatePolynomial::CoefficientsCollection recurrenceCoefficients(3); recurrenceCoefficients[0] = OrthogonalUniVariatePolynomial::Coefficients(3); recurrenceCoefficients[0][0] = 1.1; recurrenceCoefficients[0][1] = 2.2; recurrenceCoefficients[0][2] = 3.3; recurrenceCoefficients[1] = OrthogonalUniVariatePolynomial::Coefficients(3); recurrenceCoefficients[1][0] = 0.111; recurrenceCoefficients[1][1] = 0.222; recurrenceCoefficients[1][2] = 0.333; recurrenceCoefficients[2] = OrthogonalUniVariatePolynomial::Coefficients(3); recurrenceCoefficients[2][0] = 0.01111; recurrenceCoefficients[2][1] = 0.02222; recurrenceCoefficients[2][2] = 0.03333; fullprint << "Recurrence coefficients=" << recurrenceCoefficients << std::endl; OrthogonalUniVariatePolynomial Q(recurrenceCoefficients); fullprint << "Q=" << Q << std::endl; fullprint << "Q(" << point << ")=" << Q(point) << std::endl; fullprint << "as an UniVariatePolynomial, Q(" << point << ")=" << UniVariatePolynomial(Q)(point) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OrthogonalUniVariatePolynomial_std.expout000066400000000000000000000006121307543307100257620ustar00rootroot00000000000000P=class=OrthogonalUniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[1] P(1.2)=1 Recurrence coefficients=[[1.1,2.2,3.3],[0.111,0.222,0.333],[0.01111,0.02222,0.03333]] Q=class=OrthogonalUniVariatePolynomial coefficients=class=Point name=Unnamed dimension=4 values=[0.0915775,0.056641,0.00813919,0.00135653] Q(1.2)=0.173611 as an UniVariatePolynomial, Q(1.2)=0.173611 openturns-1.9/lib/test/t_OrthonormalizationAlgorithm_std.cxx000066400000000000000000000030041307543307100246370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrthonormalizationAlgorithm for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Triangular distribution(-1.0, 0.3, 1.0); OrthonormalizationAlgorithm algo(distribution); fullprint << "algo=" << algo << std::endl; fullprint << "measure=" << algo.getMeasure() << std::endl; algo.setMeasure(Triangular(-1.0, -0.2, 1.0)); fullprint << "new measure=" << algo.getMeasure() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_OrthonormalizationAlgorithm_std.expout000066400000000000000000000007221307543307100253650ustar00rootroot00000000000000algo=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.1,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=false measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 new measure=class=Triangular name=Triangular dimension=1 a=-1 m=-0.2 b=1 openturns-1.9/lib/test/t_P1LagrangeEvaluation_std.cxx000066400000000000000000000031251307543307100230430ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class P1LagrangeEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RegularGrid mesh(0.0, 1.0, 4); Sample values(0, 1); values.add(Point(1, 0.5)); values.add(Point(1, 1.5)); values.add(Point(1, 1.0)); values.add(Point(1, -0.5)); P1LagrangeEvaluation evaluation(Field(mesh, values)); fullprint << "Evaluation=" << evaluation << std::endl; Point inPoint(1, 2.3); fullprint << "Value at " << inPoint << "=" << evaluation(inPoint) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_P1LagrangeEvaluation_std.expout000066400000000000000000000010051307543307100235600ustar00rootroot00000000000000Evaluation=class=P1LagrangeEvaluation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[0],[1],[2],[3]] simplices=[[0,1],[1,2],[2,3]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.5],[1.5],[1],[-0.5]] Value at class=Point name=Unnamed dimension=1 values=[2.3]=class=Point name=Unnamed dimension=1 values=[0.55] openturns-1.9/lib/test/t_Pairs_std.cxx000066400000000000000000000037641307543307100201610ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Pairs for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 5; Point meanPoint(dim, 0.0); Point sigma(dim, 5.0); CorrelationMatrix R(dim); Normal distribution(meanPoint, sigma, R); // Instanciate another distribution object for (UnsignedInteger i = 1; i < dim; i++) R(i, i - 1) = -0.25; // Test for sampling UnsignedInteger size = 1000; Sample sample(distribution.getSample( size )); // Create an empty graph Graph myGraph("Pairs", " ", " ", true, "topright"); // Create the first cloud Pairs myPairs(sample, "Pairs example", sample.getDescription(), "green", "bullet"); // Then, draw it myGraph.add(Drawable(myPairs)); myGraph.draw("Graph_Pairs_OT"); // Check that the correct files have been generated by computing their checksum } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Pairs_std.expout000066400000000000000000000000001307543307100206570ustar00rootroot00000000000000openturns-1.9/lib/test/t_ParametricFunction_std.cxx000066400000000000000000000047731307543307100227010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for parametric functions * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inVar(Description::BuildDefault(4, "x")); Description formulas(3); formulas[0] = "sin(x0) + x1 * cos(x2) / exp(x3)"; formulas[1] = "-2.0 * x0 + x1 * x2^2 + cos(x3)"; formulas[2] = "x0 / (abs(x1) * x2^2 + x3 + 1.0)"; SymbolicFunction f(inVar, formulas); Indices set(2); set[0] = 3; set[1] = 1; Bool parametersSet = true; Point x(set.getSize()); x[0] = 1.0; x[1] = 2.0; Point referencePoint(2, 0.85); ParametricFunction g2(f, set, referencePoint, parametersSet); g2.enableHistory(); fullprint << "g2=" << g2 << std::endl; fullprint << "g2(x)=" << g2(x) << std::endl; // point / parameter history fullprint << "point history=" << g2.getInputPointHistory() << std::endl; fullprint << "parameter history=" << g2.getInputParameterHistory() << std::endl; // marginal extraction Function g2_0(g2.getMarginal(0)); Point theta(2, 0.2); theta[1] = 50.0; fullprint << "g2_0(x, theta)=" << g2_0(x, theta) << std::endl; // gradient / parameters fullprint << "dg2_0/dtheta(x)=" << g2_0.parameterGradient(x) << std::endl; // single point, several parameters Sample thetas(3, 2); thetas[0] = theta; thetas[1] = Point(2, 0.3); thetas[1] = Point(2, 0.4); fullprint << "g2_0(x, thetas)=" << g2_0(x, thetas) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ParametricFunction_std.expout000066400000000000000000000102151307543307100234070ustar00rootroot00000000000000g2=class=FunctionImplementation name=Unnamed description=[x0,x2,y0,y1,y2] evaluationImplementation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] parameters positions=[3,1] parameters=class=PointWithDescription name=Unnamed dimension=2 description=[x3,x1] values=[0.85,0.85] input positions=[0,2] gradientImplementation=class=ParametricGradient evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] parameters positions=[3,1] parameters=class=PointWithDescription name=Unnamed dimension=2 description=[x3,x1] values=[0.85,0.85] input positions=[0,2] hessianImplementation=class=ParametricHessian evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,x3,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2,x3] outputVariablesNames=[y0,y1,y2] formulas=[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)] parameters positions=[3,1] parameters=class=PointWithDescription name=Unnamed dimension=2 description=[x3,x1] values=[0.85,0.85] input positions=[0,2] g2(x)=class=Point name=Unnamed dimension=3 values=[0.690284,2.05998,0.190476] point history=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[1,2]] parameter history=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0.85,0.85]] g2_0(x, theta)=class=Point name=Unnamed dimension=1 values=[-16.1941] dg2_0/dtheta(x)=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[17.0356,-0.340712] g2_0(x, thetas)=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[-16.1941],[0.72989],[0.841471]] openturns-1.9/lib/test/t_Path_std.cxx000066400000000000000000000047261307543307100177760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ResourceMap for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // As the result of these methods is installation dependent, don't check the output fullprint << "Installation directory=" << Path::GetInstallationDirectory() << std::endl; Path::DirectoryList configDirectoryList(Path::GetConfigDirectoryList()); for (UnsignedInteger i = 0; i < configDirectoryList.size(); ++i) fullprint << "configDirectoryList[" << i << "]=" << configDirectoryList[i] << std::endl; Path::DirectoryList list(2); FileName directory1(Path::CreateTemporaryDirectory("testDirectory1")); fullprint << "Directory 1=" << directory1 << std::endl; list[0] = directory1; FileName directory2(Path::CreateTemporaryDirectory("testDirectory2")); fullprint << "Directory 2=" << directory2 << std::endl; list[1] = directory2; // Create a file in dir2 std::ofstream testFile(FileName(directory2 + FileName("/testFile")).c_str()); testFile << "test" << std::endl; testFile.close(); FileName findName(Path::FindFileByNameInDirectoryList("testFile", list)); fullprint << "Find file=" << findName << std::endl; FileName fileName(Path::BuildTemporaryFileName("testFile")); fullprint << "Temporary file name=" << fileName << std::endl; Path::DeleteTemporaryDirectory(directory1); Path::DeleteTemporaryDirectory(directory2); } catch (FileOpenException & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PenalizedLeastSquaresAlgorithm_std.cxx000066400000000000000000000113061307543307100252110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PenalizedLeastSquaresAlgorithm for the standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger dimension = 2; // Reference function Description inVar(dimension); inVar[0] = "x1"; inVar[1] = "x2"; Description formula(1); formula[0] = "x1^3+1.5*x2^3-x1*x2"; SymbolicFunction model(inVar, formula); // Basis upon which we will project the model PenalizedLeastSquaresAlgorithm::FunctionCollection coll(4); formula[0] = "x1"; coll[0] = SymbolicFunction(inVar, formula); formula[0] = "x2"; coll[1] = SymbolicFunction(inVar, formula); formula[0] = "x1^2"; coll[2] = SymbolicFunction(inVar, formula); formula[0] = "x2^2"; coll[3] = SymbolicFunction(inVar, formula); Basis basis(coll); Indices indices(coll.getSize()); indices.fill(); // Input sample UnsignedInteger size = 5; Sample inputSample(size * size, dimension); Point weight(inputSample.getSize()); for (UnsignedInteger i = 0; i < inputSample.getSize(); ++i) { inputSample[i][0] = Scalar(i % size) / size; inputSample[i][1] = Scalar (i / size) / size; weight[i] = (i % size + 1) * (i / size + 1); } Scalar penalizationFactor = 0.25; // Uniform weight, no penalization { PenalizedLeastSquaresAlgorithm algo(inputSample, model(inputSample), Point(inputSample.getSize(), 1.0), basis, indices); fullprint << "Uniform weight, no penalization" << std::endl; fullprint << "Coefficients=" << algo.getCoefficients() << std::endl; fullprint << "Residual=" << algo.getResidual() << std::endl; fullprint << "Relative error=" << algo.getRelativeError() << std::endl; } // Uniform weight, spherical penalization { PenalizedLeastSquaresAlgorithm algo(inputSample, model(inputSample), Point(inputSample.getSize(), 1.0), basis, indices, penalizationFactor); fullprint << "Uniform weight, spherical penalization" << std::endl; fullprint << "Coefficients=" << algo.getCoefficients() << std::endl; fullprint << "Residual=" << algo.getResidual() << std::endl; } // Non uniform weight, no penalization { PenalizedLeastSquaresAlgorithm algo(inputSample, model(inputSample), weight, basis, indices); fullprint << "Non uniform weight, no penalization" << std::endl; fullprint << "Coefficients=" << algo.getCoefficients() << std::endl; fullprint << "Residual=" << algo.getResidual() << std::endl; } // Non uniform weight, spherical penalization { PenalizedLeastSquaresAlgorithm algo(inputSample, model(inputSample), weight, basis, indices, penalizationFactor); fullprint << "Non uniform weight, spherical penalization" << std::endl; fullprint << "Coefficients=" << algo.getCoefficients() << std::endl; fullprint << "Residual=" << algo.getResidual() << std::endl; } // Non uniform weight, non spherical penalization { CovarianceMatrix penalizationMatrix(4); for (UnsignedInteger i = 0; i < 4; ++i) penalizationMatrix(i, i) = 1.0; for (UnsignedInteger i = 0; i < 3; ++i) penalizationMatrix(i, i + 1) = 1.0 / 8.0; PenalizedLeastSquaresAlgorithm algo(inputSample, model(inputSample), weight, basis, indices, penalizationFactor, penalizationMatrix); fullprint << "Non uniform weight, non spherical penalization" << std::endl; fullprint << "Coefficients=" << algo.getCoefficients() << std::endl; fullprint << "Residual=" << algo.getResidual() << std::endl; } } catch (OT::NotSymmetricDefinitePositiveException & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PenalizedLeastSquaresAlgorithm_std.expout000066400000000000000000000014301307543307100257300ustar00rootroot00000000000000Uniform weight, no penalization Coefficients=class=Point name=Unnamed dimension=4 values=[-0.292364,-0.464364,0.781818,1.38182] Residual=0.0212678 Relative error=0.20229 Uniform weight, spherical penalization Coefficients=class=Point name=Unnamed dimension=4 values=[-0.0288004,0.0729819,0.334311,0.57618] Residual=0.0294134 Non uniform weight, no penalization Coefficients=class=Point name=Unnamed dimension=4 values=[-0.244662,-0.45609,0.657895,1.30075] Residual=0.0590532 Non uniform weight, spherical penalization Coefficients=class=Point name=Unnamed dimension=4 values=[-0.222214,-0.28088,0.59494,1.07289] Residual=0.065384 Non uniform weight, non spherical penalization Coefficients=class=Point name=Unnamed dimension=4 values=[-0.205926,-0.283995,0.575234,1.07306] Residual=0.0657827 openturns-1.9/lib/test/t_PersistentObject_std.cxx000066400000000000000000000036531307543307100223670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PersistentObject for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public PersistentObject { public: TestObject() : PersistentObject() {} virtual ~TestObject() {} virtual TestObject * clone() const { return new TestObject(*this); } }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities checkClassWithClassName(); // Identity comparison TestObject o1, o2; if (! o1.is(o1)) { OSS errorMessage; errorMessage << "OT::PersistentObject.is does NOT return the correct value. Says that object o1 IS NOT o1 !"; throw TestFailed(errorMessage); } if (o1.is(o2)) { OSS errorMessage; errorMessage << "OT::PersistentObject.is does NOT return the correct value. Says that object o1 IS object o2 !"; throw TestFailed(errorMessage); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PersistentObject_std.expout000066400000000000000000000005411307543307100231020ustar00rootroot00000000000000Testing class PersistentObject checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=PersistentObject name=Unnamed streamObject(const T & anObject) class=PersistentObject name=Unnamed areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) openturns-1.9/lib/test/t_Pie_std.cxx000066400000000000000000000047731307543307100176210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Pie for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Point data(0); Description palette; Description labels; data.add(5665855); labels.add("chirac"); palette.add("blue"); data.add(4804713); labels.add("lepen"); palette.add("white"); data.add(4610113); labels.add("jospin"); palette.add("pink"); data.add(1949170); labels.add("bayrou"); palette.add("yellow"); data.add(1630045); labels.add("laguiller"); palette.add("red"); data.add(1518528); labels.add("chevenement"); palette.add("ivory"); data.add(1495724); labels.add("mamere"); palette.add("green"); data.add(1210562); labels.add("besancenot"); palette.add("orange"); data.add(1204689); labels.add("saint-josse"); palette.add("maroon"); data.add(1113484); labels.add("madelin"); palette.add("violet"); data.add(3295588); labels.add("cumul candidats < 3.5% "); palette.add("purple"); // Create an empty graph Graph myGraph("Presidentielle 2002 - 1er tour", "", "", false, ""); // Create the first cloud #ifdef WIN32 OT:: // mingw defined a Pie(...) function #endif Pie myPie1(data, labels, Point(2), 1, palette); // Then, draw it myGraph.add(myPie1); myGraph.draw("Graph_Pie_OT.png"); // Check that the correct files have been generated by computing their checksum } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Pie_std.expout000066400000000000000000000000001307543307100203160ustar00rootroot00000000000000openturns-1.9/lib/test/t_PiecewiseHermiteEvaluation_std.cxx000066400000000000000000000040011307543307100243470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PiecewiseHermiteEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { SymbolicFunction ref("x", "sin(x)"); UnsignedInteger size = 12; Point locations(size); Point values(size); Point derivatives(size); // Build locations/values/derivatives with non-increasing locations for (UnsignedInteger i = 0; i < size; ++i) { locations[i] = 10.0 * i * i / (size - 1.0) / (size - 1.0); values[i] = ref(Point(1, locations[i]))[0]; derivatives[i] = ref.gradient(Point(1, locations[i]))(0, 0); } PiecewiseHermiteEvaluation evaluation(locations, values, derivatives); fullprint << "evaluation=" << evaluation << std::endl; // Check the values for (UnsignedInteger i = 0; i < 2 * size; ++i) { Point x(1, -1.0 + 12.0 * i / (2.0 * size - 1.0)); fullprint << "f(" << x[0] << ")=" << evaluation(x) << ", ref=" << ref(x) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PiecewiseHermiteEvaluation_std.expout000066400000000000000000000071731307543307100251060ustar00rootroot00000000000000evaluation=class=PiecewiseHermiteEvaluation locations=class=Point name=Unnamed dimension=12 values=[0,0.0826446,0.330579,0.743802,1.32231,2.06612,2.97521,4.04959,5.28926,6.69421,8.26446,10] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=12 dimension=1 data=[[0],[0.0825506],[0.32459],[0.67709],[0.969287],[0.879817],[0.165619],[-0.788271],[-0.838175],[0.399553],[0.916929],[-0.544021]] derivatives=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=12 dimension=1 data=[[1],[0.996587],[0.945855],[0.7359],[0.245933],[-0.475313],[-0.98619],[-0.615328],[0.545401],[0.91671],[-0.399051],[-0.839072]] f(-1)=class=Point name=Unnamed dimension=1 values=[0], ref=class=Point name=Unnamed dimension=1 values=[-0.841471] f(-0.478261)=class=Point name=Unnamed dimension=1 values=[0], ref=class=Point name=Unnamed dimension=1 values=[-0.460236] f(0.0434783)=class=Point name=Unnamed dimension=1 values=[0.0434646], ref=class=Point name=Unnamed dimension=1 values=[0.0434646] f(0.565217)=class=Point name=Unnamed dimension=1 values=[0.535562], ref=class=Point name=Unnamed dimension=1 values=[0.535599] f(1.08696)=class=Point name=Unnamed dimension=1 values=[0.884982], ref=class=Point name=Unnamed dimension=1 values=[0.885215] f(1.6087)=class=Point name=Unnamed dimension=1 values=[0.998578], ref=class=Point name=Unnamed dimension=1 values=[0.999282] f(2.13043)=class=Point name=Unnamed dimension=1 values=[0.847369], ref=class=Point name=Unnamed dimension=1 values=[0.847447] f(2.65217)=class=Point name=Unnamed dimension=1 values=[0.469288], ref=class=Point name=Unnamed dimension=1 values=[0.470113] f(3.17391)=class=Point name=Unnamed dimension=1 values=[-0.0319464], ref=class=Point name=Unnamed dimension=1 values=[-0.0323148] f(3.69565)=class=Point name=Unnamed dimension=1 values=[-0.525091], ref=class=Point name=Unnamed dimension=1 values=[-0.526144] f(4.21739)=class=Point name=Unnamed dimension=1 values=[-0.878671], ref=class=Point name=Unnamed dimension=1 values=[-0.87997] f(4.73913)=class=Point name=Unnamed dimension=1 values=[-0.993802], ref=class=Point name=Unnamed dimension=1 values=[-0.999642] f(5.26087)=class=Point name=Unnamed dimension=1 values=[-0.85327], ref=class=Point name=Unnamed dimension=1 values=[-0.853318] f(5.78261)=class=Point name=Unnamed dimension=1 values=[-0.477262], ref=class=Point name=Unnamed dimension=1 values=[-0.479931] f(6.30435)=class=Point name=Unnamed dimension=1 values=[0.0225884], ref=class=Point name=Unnamed dimension=1 values=[0.0211609] f(6.82609)=class=Point name=Unnamed dimension=1 values=[0.515372], ref=class=Point name=Unnamed dimension=1 values=[0.516623] f(7.34783)=class=Point name=Unnamed dimension=1 values=[0.861406], ref=class=Point name=Unnamed dimension=1 values=[0.874615] f(7.86957)=class=Point name=Unnamed dimension=1 values=[0.991656], ref=class=Point name=Unnamed dimension=1 values=[0.999879] f(8.3913)=class=Point name=Unnamed dimension=1 values=[0.858381], ref=class=Point name=Unnamed dimension=1 values=[0.859082] f(8.91304)=class=Point name=Unnamed dimension=1 values=[0.483184], ref=class=Point name=Unnamed dimension=1 values=[0.48969] f(9.43478)=class=Point name=Unnamed dimension=1 values=[-0.0139713], ref=class=Point name=Unnamed dimension=1 values=[-0.0100045] f(9.95652)=class=Point name=Unnamed dimension=1 values=[-0.507064], ref=class=Point name=Unnamed dimension=1 values=[-0.507037] f(10.4783)=class=Point name=Unnamed dimension=1 values=[-0.544021], ref=class=Point name=Unnamed dimension=1 values=[-0.869151] f(11)=class=Point name=Unnamed dimension=1 values=[-0.544021], ref=class=Point name=Unnamed dimension=1 values=[-0.99999] openturns-1.9/lib/test/t_PiecewiseLinearEvaluation_std.cxx000066400000000000000000000036061307543307100241760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PiecewiseLinearEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { SymbolicFunction ref("x", "sin(x)"); UnsignedInteger size = 12; Point locations(size); Point values(size); // Build locations/values with non-increasing locations for (UnsignedInteger i = 0; i < size; ++i) { locations[i] = 10.0 * i * i / (size - 1.0) / (size - 1.0); values[i] = ref(Point(1, locations[i]))[0]; } PiecewiseLinearEvaluation evaluation(locations, values); fullprint << "evaluation=" << evaluation << std::endl; // Check the values for (UnsignedInteger i = 0; i < 2 * size; ++i) { Point x(1, -1.0 + 12.0 * i / (2.0 * size - 1.0)); fullprint << "f(" << x[0] << ")=" << evaluation(x) << ", ref=" << ref(x) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PiecewiseLinearEvaluation_std.expout000066400000000000000000000066041307543307100247210ustar00rootroot00000000000000evaluation=class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=12 values=[0,0.0826446,0.330579,0.743802,1.32231,2.06612,2.97521,4.04959,5.28926,6.69421,8.26446,10] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=12 dimension=1 data=[[0],[0.0825506],[0.32459],[0.67709],[0.969287],[0.879817],[0.165619],[-0.788271],[-0.838175],[0.399553],[0.916929],[-0.544021]] f(-1)=class=Point name=Unnamed dimension=1 values=[0], ref=class=Point name=Unnamed dimension=1 values=[-0.841471] f(-0.478261)=class=Point name=Unnamed dimension=1 values=[0], ref=class=Point name=Unnamed dimension=1 values=[-0.460236] f(0.0434783)=class=Point name=Unnamed dimension=1 values=[0.0434288], ref=class=Point name=Unnamed dimension=1 values=[0.0434646] f(0.565217)=class=Point name=Unnamed dimension=1 values=[0.524749], ref=class=Point name=Unnamed dimension=1 values=[0.535599] f(1.08696)=class=Point name=Unnamed dimension=1 values=[0.850412], ref=class=Point name=Unnamed dimension=1 values=[0.885215] f(1.6087)=class=Point name=Unnamed dimension=1 values=[0.934839], ref=class=Point name=Unnamed dimension=1 values=[0.999282] f(2.13043)=class=Point name=Unnamed dimension=1 values=[0.829287], ref=class=Point name=Unnamed dimension=1 values=[0.847447] f(2.65217)=class=Point name=Unnamed dimension=1 values=[0.419399], ref=class=Point name=Unnamed dimension=1 values=[0.470113] f(3.17391)=class=Point name=Unnamed dimension=1 values=[-0.0108025], ref=class=Point name=Unnamed dimension=1 values=[-0.0323148] f(3.69565)=class=Point name=Unnamed dimension=1 values=[-0.47403], ref=class=Point name=Unnamed dimension=1 values=[-0.526144] f(4.21739)=class=Point name=Unnamed dimension=1 values=[-0.795026], ref=class=Point name=Unnamed dimension=1 values=[-0.87997] f(4.73913)=class=Point name=Unnamed dimension=1 values=[-0.816029], ref=class=Point name=Unnamed dimension=1 values=[-0.999642] f(5.26087)=class=Point name=Unnamed dimension=1 values=[-0.837033], ref=class=Point name=Unnamed dimension=1 values=[-0.853318] f(5.78261)=class=Point name=Unnamed dimension=1 values=[-0.403546], ref=class=Point name=Unnamed dimension=1 values=[-0.479931] f(6.30435)=class=Point name=Unnamed dimension=1 values=[0.0560915], ref=class=Point name=Unnamed dimension=1 values=[0.0211609] f(6.82609)=class=Point name=Unnamed dimension=1 values=[0.443003], ref=class=Point name=Unnamed dimension=1 values=[0.516623] f(7.34783)=class=Point name=Unnamed dimension=1 values=[0.614909], ref=class=Point name=Unnamed dimension=1 values=[0.874615] f(7.86957)=class=Point name=Unnamed dimension=1 values=[0.786815], ref=class=Point name=Unnamed dimension=1 values=[0.999879] f(8.3913)=class=Point name=Unnamed dimension=1 values=[0.810156], ref=class=Point name=Unnamed dimension=1 values=[0.859082] f(8.91304)=class=Point name=Unnamed dimension=1 values=[0.370963], ref=class=Point name=Unnamed dimension=1 values=[0.48969] f(9.43478)=class=Point name=Unnamed dimension=1 values=[-0.0682293], ref=class=Point name=Unnamed dimension=1 values=[-0.0100045] f(9.95652)=class=Point name=Unnamed dimension=1 values=[-0.507422], ref=class=Point name=Unnamed dimension=1 values=[-0.507037] f(10.4783)=class=Point name=Unnamed dimension=1 values=[-0.544021], ref=class=Point name=Unnamed dimension=1 values=[-0.869151] f(11)=class=Point name=Unnamed dimension=1 values=[-0.544021], ref=class=Point name=Unnamed dimension=1 values=[-0.99999] openturns-1.9/lib/test/t_Point_description.cxx000066400000000000000000000042031307543307100217120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Point for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); /* Constructor with size */ PointWithDescription point1(2); point1[0] = 100.; point1[1] = 101.; /* Copy constructor */ PointWithDescription point2(point1); { /* Description */ fullprint << "point1.getDescription() = " << point1.getDescription() << std::endl; fullprint << "point2.getDescription() = " << point2.getDescription() << std::endl; } Description description(2); description[0] = "point1_X"; description[1] = "point1_Y"; point1.setDescription(description); { fullprint << "point1.getDescription() = " << point1.getDescription() << std::endl; fullprint << "point2.getDescription() = " << point2.getDescription() << std::endl; } // Creation Collection coll1(5, PointWithDescription(4)); Collection coll2(5, Point(4)); Collection coll3(5, PointWithDescription(4)); Collection coll4(5, Point(4)); // Conversion //coll1 = coll3; //coll4 = coll2; return ExitCode::Success; } openturns-1.9/lib/test/t_Point_description.expout000066400000000000000000000002101307543307100224260ustar00rootroot00000000000000point1.getDescription() = [,] point2.getDescription() = [,] point1.getDescription() = [point1_X,point1_Y] point2.getDescription() = [,] openturns-1.9/lib/test/t_Point_std.cxx000066400000000000000000000115611307543307100201660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Point for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar val1, val2; /* Default constructor */ Point point1; const Point & ref_point1(point1); /* Check method add() */ point1.add(0.); point1.add(1.); UnsignedInteger size = ref_point1.getDimension(); fullprint << "size of point1 = " << size << std::endl; val1 = ref_point1[0]; val2 = ref_point1[1]; fullprint << "point1 = " << ref_point1 << std::endl; fullprint << "point1[0] = " << val1 << std::endl; fullprint << "point1[1] = " << val2 << std::endl; /* Constructor with size */ Point point2(2); const Point & ref_point2(point2); /* Check operator[] methods */ point2[0] = 10.; point2[1] = 11.; val1 = ref_point2[0]; val2 = ref_point2[1]; fullprint << "point2[0] = " << val1 << std::endl; fullprint << "point2[1] = " << val2 << std::endl; /* Copy constructor */ Point point3(ref_point1); const Point & ref_point3(point3); val1 = ref_point3[0]; val2 = ref_point3[1]; fullprint << "point3[0] = " << val1 << std::endl; fullprint << "point3[1] = " << val2 << std::endl; /* Assignment operator */ Point point4; const Point & ref_point4(point4); point4 = ref_point2; val1 = ref_point4[0]; val2 = ref_point4[1]; fullprint << "point4[0] = " << val1 << std::endl; fullprint << "point4[1] = " << val2 << std::endl; /* Comparison operator */ if (! (ref_point2 == ref_point2)) { OSS oss; oss << "OT::Point.operator == does NOT return the correct value. Says that point2 and point2 are DIFFERENT though they are equal."; throw TestFailed(oss); } if (! (ref_point2 == ref_point4)) { OSS oss; oss << "OT::Point.operator == does NOT return the correct value. Says that point2 and point4 are DIFFERENT though they are equal."; throw TestFailed(oss); } if (ref_point2 == ref_point3) { OSS oss; oss << "OT::Point.operator == does NOT return the correct value. Says that point2 and point3 are EQUAL though they are different."; throw TestFailed(oss); } /* Addition/Substraction/Product operators */ try { Point point5 = ref_point1 + ref_point2; const Point & ref_point5(point5); fullprint << "point5 = " << ref_point5 << std::endl; Point point6 = ref_point1 - ref_point2; const Point & ref_point6(point6); fullprint << "point6 = " << ref_point6 << std::endl; Point point7(ref_point5); point7 += ref_point1 + ref_point2; const Point & ref_point7(point7); fullprint << "point7 = " << ref_point7 << std::endl; Point point8(ref_point6); point8 -= ref_point1 - ref_point2; const Point & ref_point8(point8); fullprint << "point8 = " << ref_point8 << std::endl; // We create an orthonormal base (O,i,j) Point i(2); i[0] = 1; i[1] = 0; fullprint << "i = " << i << std::endl; Point j(2); j[0] = 0; j[1] = 1; fullprint << "j = " << j << std::endl; Point I(2. * i); fullprint << "I = " << I << std::endl; Point J(j * 3.); fullprint << "J = " << J << std::endl; Scalar dotProduct = dot(I, J); fullprint << "dotProduct = " << dotProduct << std::endl; } catch (InvalidArgumentException & ex) { throw TestFailed(ex.__repr__()); } /* sort method */ try { Point point9(3, 0); point9[1] = -1; point9[2] = -2; Point point10(point9); std::sort(point10.begin(), point10.end()); fullprint << "point9 " << point9 << std::endl; fullprint << "point10 " << point10 << std::endl; } catch (InvalidArgumentException & ex) { throw TestFailed(ex.__repr__()); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Point_std.expout000066400000000000000000000014301307543307100207020ustar00rootroot00000000000000size of point1 = 2 point1 = class=Point name=Unnamed dimension=2 values=[0,1] point1[0] = 0 point1[1] = 1 point2[0] = 10 point2[1] = 11 point3[0] = 0 point3[1] = 1 point4[0] = 10 point4[1] = 11 point5 = class=Point name=Unnamed dimension=2 values=[10,12] point6 = class=Point name=Unnamed dimension=2 values=[-10,-10] point7 = class=Point name=Unnamed dimension=2 values=[20,24] point8 = class=Point name=Unnamed dimension=2 values=[0,0] i = class=Point name=Unnamed dimension=2 values=[1,0] j = class=Point name=Unnamed dimension=2 values=[0,1] I = class=Point name=Unnamed dimension=2 values=[2,0] J = class=Point name=Unnamed dimension=2 values=[0,3] dotProduct = 0 point9 class=Point name=Unnamed dimension=3 values=[0,-1,-2] point10 class=Point name=Unnamed dimension=3 values=[-2,-1,0] openturns-1.9/lib/test/t_Pointer_cast.cxx000066400000000000000000000124131307543307100206520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Pointer for cast * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class BaseClass : public PersistentObject { public: BaseClass(const String & name) : PersistentObject() { OStream fullprint(std::cout); setName(name); fullprint << "BaseClass(const String & name) (" << getName() << ")" << std::endl; } BaseClass(const BaseClass & other) : PersistentObject(other) { OStream fullprint(std::cout); fullprint << "BaseClass(const BaseClass & other) (" << getName() << ")" << std::endl; } virtual ~BaseClass() { OStream fullprint(std::cout); fullprint << "~BaseClass (" << getName() << ")" << std::endl; } virtual void doit() const { OStream fullprint(std::cout); fullprint << "BaseClass::doit (" << getName() << ")" << std::endl; } virtual BaseClass * clone() const { return new BaseClass(*this); } }; class DerivedClass : public BaseClass { public: explicit DerivedClass(const String & name) : BaseClass(name) { OStream fullprint(std::cout); fullprint << "DerivedClass(const String & name) (" << getName() << ")" << std::endl; } explicit DerivedClass(const DerivedClass & other) : BaseClass(other) { OStream fullprint(std::cout); fullprint << "DerivedClass(const String & name) (" << getName() << ")" << std::endl; } virtual ~DerivedClass() { OStream fullprint(std::cout); fullprint << "~DerivedClass (" << getName() << ")" << std::endl; } virtual void doit() const { OStream fullprint(std::cout); fullprint << "DerivedClass::doit (" << getName() << ")" << std::endl; } virtual DerivedClass * clone() const { return new DerivedClass(*this); } }; class NotDerivedClass : public PersistentObject { public: explicit NotDerivedClass(const String & name) : PersistentObject() { setName(name); } explicit NotDerivedClass(const NotDerivedClass & other) : PersistentObject(other) { } virtual ~NotDerivedClass() { } virtual void doit() const { OStream fullprint(std::cout); fullprint << "NotDerivedClass::doit (" << getName() << ")" << std::endl; } virtual NotDerivedClass * clone() const { return new NotDerivedClass(*this); } }; void functionThatCastPointer(const Pointer & p_base) { OStream fullprint(std::cout); fullprint << "void functionThatCastPointer(const Pointer & p_base)" << std::endl; p_base->doit(); } Pointer functionThatReturnPointer(const Pointer & p_derived) { OStream fullprint(std::cout); fullprint << "Pointer functionThatReturnPointer(const Pointer & p_derived)" << std::endl; p_derived->doit(); return p_derived; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); { /** We create a pointer onto a BaseClass object */ Pointer p_base = new BaseClass("B1"); p_base->doit(); /** We create a pointer onto a DerivedClass object */ Pointer p_derived = new DerivedClass("D1"); p_derived->doit(); /** We create a pointer onto a BaseClass object but we put a DerivedClass object into it */ p_base = new DerivedClass("D2"); p_base->doit(); /** We try to pass a Derived Pointer to a function that except a Base Pointer */ functionThatCastPointer(p_derived); /** We try to get a Base Pointer from a function that except a Derived Pointer */ p_base = functionThatReturnPointer(p_derived); p_base->doit(); } /** Now we try to pass a NotDerived Pointer to a function that except a Base Pointer */ /** THIS SHOULD NOT WORK */ Pointer p_notderived = new NotDerivedClass("ND1"); // functionThatCastPointer(p_notderived); // ERROR : cannot convert `NotDerivedClass*' to `BaseClass*' /** We cast a Derived Pointer to a Base Pointer to a Derived Pointer again */ { /** We create a pointer onto a DerivedClass object */ Pointer p_derived = new DerivedClass("D3"); p_derived->doit(); /** Then the pointer to a Base class */ Pointer p_base(p_derived); p_base->doit(); /** Then again a pointer to a derived class */ Pointer p_rederived; p_rederived.assign(p_base); p_rederived->doit(); } /** At last, destructor */ return ExitCode::Success; } openturns-1.9/lib/test/t_Pointer_cast.expout000066400000000000000000000013511307543307100213730ustar00rootroot00000000000000BaseClass(const String & name) (B1) BaseClass::doit (B1) BaseClass(const String & name) (D1) DerivedClass(const String & name) (D1) DerivedClass::doit (D1) BaseClass(const String & name) (D2) DerivedClass(const String & name) (D2) ~BaseClass (B1) DerivedClass::doit (D2) void functionThatCastPointer(const Pointer & p_base) DerivedClass::doit (D1) Pointer functionThatReturnPointer(const Pointer & p_derived) DerivedClass::doit (D1) ~DerivedClass (D2) ~BaseClass (D2) DerivedClass::doit (D1) ~DerivedClass (D1) ~BaseClass (D1) BaseClass(const String & name) (D3) DerivedClass(const String & name) (D3) DerivedClass::doit (D3) DerivedClass::doit (D3) DerivedClass::doit (D3) ~DerivedClass (D3) ~BaseClass (D3) openturns-1.9/lib/test/t_Pointer_std.cxx000066400000000000000000000071021307543307100205110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Pointer for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestClass : public PersistentObject { public: explicit TestClass(const String & name) : PersistentObject() { setName(name); // fullprint << "TestClass(const String & name) (" // << getName() << ")" << std::endl; } explicit TestClass(const TestClass & other) : PersistentObject(other) { // fullprint << "TestClass(const String & name) (" // << getName() << ")" << std::endl; } virtual ~TestClass() { // fullprint << "~TestClass (" // << getName() << ")" << std::endl; } virtual TestClass * clone() const { return new TestClass(*this); } }; void printPointer(const Pointer & p) { OStream fullprint(std::cout); /** Check pointee accesssor through operator * */ fullprint << "Object name is : " << (*p).getName() << std::endl; /** Check pointee accesssor through operator -> */ fullprint << "Object name is : " << p->getName() << std::endl; /** Is Pointer object uniquely pointing to the pointee */ fullprint << "Unicity : " << p.unique() << std::endl; /** How many Pointer objects do share the pointee */ fullprint << "Count : " << p.use_count() << std::endl; } void printPointee(const Pointer & p) { OStream fullprint(std::cout); /** Check operator * */ fullprint << "p -> " << (*p) << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); String name1("One"); String name2("Two"); String name3("Three"); String name4("Four"); /** Check constructor */ Pointer p1(new TestClass(name1)); printPointee(p1); printPointer(p1); /** Check copy constructor */ Pointer p2(p1); printPointee(p2); printPointer(p2); /** Check operator = */ Pointer p3; p3 = p1; printPointee(p3); printPointer(p3); /** We try to access pointee by const methods */ String p3OldName = p3->getName(); /** Now we change the pointee object (copy-on-write strategy) */ p3->setName(name2); printPointee(p1); printPointer(p1); printPointee(p2); printPointer(p2); printPointee(p3); printPointer(p3); /** Now we reset one Pointer object */ p2.reset(new TestClass(name3)); printPointee(p1); printPointer(p1); printPointee(p2); printPointer(p2); printPointee(p3); printPointer(p3); /** Now we reset one Pointer object */ p2.reset(); // p2 should not be dereferenced until reaffected again printPointee(p1); printPointer(p1); // printPointee(p2); // printPointer(p2); printPointee(p3); printPointer(p3); /** At last, destructor */ return ExitCode::Success; } openturns-1.9/lib/test/t_Pointer_std.expout000066400000000000000000000022071307543307100212340ustar00rootroot00000000000000p -> class=PersistentObject name=One Object name is : One Object name is : One Unicity : true Count : 1 p -> class=PersistentObject name=One Object name is : One Object name is : One Unicity : false Count : 2 p -> class=PersistentObject name=One Object name is : One Object name is : One Unicity : false Count : 3 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 3 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 3 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 3 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 2 p -> class=PersistentObject name=Three Object name is : Three Object name is : Three Unicity : true Count : 1 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 2 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 2 p -> class=PersistentObject name=Two Object name is : Two Object name is : Two Unicity : false Count : 2 openturns-1.9/lib/test/t_PoissonFactory_std.cxx000066400000000000000000000047221307543307100220600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Poisson for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Poisson distribution(2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); PoissonFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Poisson estimatedPoisson(factory.buildAsPoisson(sample)); fullprint << "Poisson =" << distribution << std::endl; fullprint << "Estimated poisson=" << estimatedPoisson << std::endl; estimatedPoisson = factory.buildAsPoisson(); fullprint << "Default poisson=" << estimatedPoisson << std::endl; estimatedPoisson = factory.buildAsPoisson(distribution.getParameter()); fullprint << "Poisson from parameters=" << estimatedPoisson << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PoissonFactory_std.expout000066400000000000000000000010761307543307100226010ustar00rootroot00000000000000Distribution =class=Poisson name=Poisson dimension=1 lambda=2.5 Estimated distribution=class=Poisson name=Poisson dimension=1 lambda=2.5153 Default distribution=class=Poisson name=Poisson dimension=1 lambda=1 Distribution from parameters=class=Poisson name=Poisson dimension=1 lambda=2.5 Poisson =class=Poisson name=Poisson dimension=1 lambda=2.5 Estimated poisson=class=Poisson name=Poisson dimension=1 lambda=2.5153 Default poisson=class=Poisson name=Poisson dimension=1 lambda=1 Poisson from parameters=class=Poisson name=Poisson dimension=1 lambda=2.5 openturns-1.9/lib/test/t_Poisson_std.cxx000066400000000000000000000153241307543307100205300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Poisson for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Poisson { public: TestObject() : Poisson(10.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Poisson distribution(10.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 12.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(1); PDFgrFD[0] = (Poisson(distribution.getLambda() + eps).computePDF(point) - Poisson(distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (Poisson(distribution.getLambda() + eps).computeCDF(point) - Poisson(distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Poisson::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; fullprint << "probabilities=" << distribution.getProbabilities() << std::endl; // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Poisson_std.expout000066400000000000000000000066501307543307100212540ustar00rootroot00000000000000Testing class Poisson checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Poisson name=Poisson dimension=1 lambda=10 streamObject(const T & anObject) class=Poisson name=Poisson dimension=1 lambda=10 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Poisson name=Poisson dimension=1 lambda=10 Distribution Poisson(lambda = 10) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[14] oneSample first=class=Point name=Unnamed dimension=1 values=[10] last=class=Point name=Unnamed dimension=1 values=[10] mean=class=Point name=Unnamed dimension=1 values=[9.9873] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.93333] Point= class=Point name=Unnamed dimension=1 values=[12] log pdf=-2.35619 pdf =0.0947803 pdf (FD)=0.0947803 cdf=0.791556 ccdf=0.208444 survival=0.208444 characteristic function=(0.127543,0.166617) log characteristic function=(-1.56146,-5.36573) generating function=(0.00068747,0.000599094) log generating function=(-7,7) pdf gradient =class=Point name=Unnamed dimension=1 values=[0.0189561] pdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[0.0189561] cdf gradient =class=Point name=Unnamed dimension=1 values=[-0.0947803] cdf gradient (FD)=class=Point name=Unnamed dimension=1 values=[-0.0947803] quantile=class=Point name=Unnamed dimension=1 values=[15] cdf(quantile)=0.95126 quantile (tail)=class=Point name=Unnamed dimension=1 values=[5] cdf (tail)=0.932914 mean=class=Point name=Unnamed dimension=1 values=[10] standard deviation=class=Point name=Unnamed dimension=1 values=[3.16228] skewness=class=Point name=Unnamed dimension=1 values=[0.316228] kurtosis=class=Point name=Unnamed dimension=1 values=[3.1] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[lambda : 10]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[10] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[110] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[1310] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[16710] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[226510] Standard representative=Poisson(lambda = 10) probabilities=class=Point name=Unnamed dimension=43 values=[4.53999e-05,0.000453999,0.00227,0.00756665,0.0189166,0.0378333,0.0630555,0.0900792,0.112599,0.12511,0.12511,0.113736,0.0947803,0.0729079,0.0520771,0.0347181,0.0216988,0.012764,0.00709111,0.00373216,0.00186608,0.00088861,0.000403914,0.000175615,7.31728e-05,2.92691e-05,1.12573e-05,4.16939e-06,1.48907e-06,5.13472e-07,1.71157e-07,5.5212e-08,1.72537e-08,5.22841e-09,1.53777e-09,4.39362e-10,1.22045e-10,3.29851e-11,8.6803e-12,2.22572e-12,5.56429e-13,1.35715e-13,3.2313e-14] openturns-1.9/lib/test/t_PolygonArray_std.cxx000066400000000000000000000033101307543307100215140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PolygonArray for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Generate the data for the polygonArrays to be drawn Normal generator(2); UnsignedInteger size = 50; Collection array(size); Description palette(Drawable::BuildDefaultPalette(size)); for (UnsignedInteger i = 0; i < size; ++i) { Sample vertices(generator.getSample(3)); array[i] = OT::Polygon(vertices, palette[i], palette[size - i - 1]); } Graph graph("An array of polygons", "x", "y", true, ""); graph.add(PolygonArray(array)); graph.draw("polygon_array.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PolygonArray_std.expout000066400000000000000000000000001307543307100222270ustar00rootroot00000000000000openturns-1.9/lib/test/t_Polygon_std.cxx000066400000000000000000000050761307543307100205300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Polygon for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Generate the data for the polygons to be drawn UnsignedInteger size = 50; Point cursor(2); Sample data1(size, 2); //polygon y = 2x for x in [-2;5] Sample data2(size, 2); //polygon y = x*x for x in [-1;1] Scalar tmp; for(UnsignedInteger i = 0; i < size; i++) { tmp = 7.*i / size + 2; cursor[0] = tmp; cursor[1] = 2 * tmp; data1[i] = cursor; tmp = 9.*i / size + 1; cursor[0] = tmp; cursor[1] = tmp * tmp; data2[i] = cursor; } // Create an empty graph Graph myGraph("Some polygons", "x1", "x2", true, "topright", 1.0, GraphImplementation::NONE); // Create the first polygon // Must prefix by OT to avoid conflict with Windows API OT::Polygon myPolygon1(data1); myPolygon1.setColor("blue"); // Then, draw it myGraph.add(myPolygon1); myGraph.draw("Graph_Polygon_a_OT.png"); // Check that the correct files have been generated by computing their checksum // Create the second cloud // Must prefix by OT to avoid conflict with Windows API OT::Polygon myPolygon2(data2); myPolygon2.setColor("red"); // Add it to the graph and draw everything myGraph.add(myPolygon2); for (UnsignedInteger i = 0; i < 4; ++i) { myGraph.setLogScale(static_cast(i)); myGraph.draw(String(OSS() << "Graph_Polygon_b_OT_" << i << ".png")); } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Polygon_std.expout000066400000000000000000000000001307543307100212300ustar00rootroot00000000000000openturns-1.9/lib/test/t_PostAnalyticalControlledImportanceSampling_std.cxx000066400000000000000000000062221307543307100275650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of PostAnalyticalControlledImportanceSampling class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(400); FORM myAlgo(myCobyla, myEvent, mean); /* Perform the simulation */ myAlgo.run(); /* Create a PostAnalyticalControlledImportanceSampling algorithm based on the previous FORM result */ FORMResult formResult(myAlgo.getResult()); PostAnalyticalControlledImportanceSampling mySamplingAlgo(formResult); fullprint << "FORM probability=" << formResult.getEventProbability() << std::endl; mySamplingAlgo.setMaximumOuterSampling(250); mySamplingAlgo.setBlockSize(4); mySamplingAlgo.setMaximumCoefficientOfVariation(0.1); fullprint << "PostAnalyticalControlledImportanceSampling=" << mySamplingAlgo << std::endl; mySamplingAlgo.run(); /* Stream out the result */ fullprint << "PostAnalyticalControlledImportanceSampling result=" << mySamplingAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PostAnalyticalControlledImportanceSampling_std.expout000066400000000000000000000042661307543307100303150ustar00rootroot00000000000000FORM probability=0.156427 PostAnalyticalControlledImportanceSampling=class=PostAnalyticalControlledImportanceSampling derived from class=PostAnalyticalSimulation analyticalResult=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=4 values=[-0.0310309,0.841941,0.445397,-0.332234] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[49.969,1.84194,10.4454,4.66777] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.00925 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] controlProbability_=0.156427 PostAnalyticalControlledImportanceSampling result=probabilityEstimate=1.109273e-01 varianceEstimate=7.444407e-04 standard deviation=2.73e-02 coefficient of variation=2.46e-01 confidenceLength(0.95)=1.07e-01 outerSampling=250 blockSize=4 openturns-1.9/lib/test/t_PostAnalyticalImportanceSampling_std.cxx000066400000000000000000000061411307543307100255370ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of PostAnalyticalImportanceSampling class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a FORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ Cobyla myCobyla; myCobyla.setMaximumIterationNumber(400); FORM myAlgo(myCobyla, myEvent, mean); /* Perform the simulation */ myAlgo.run(); /* Create a PostAnalyticalImportanceSampling algorithm based on the previous FORM result */ FORMResult formResult(myAlgo.getResult()); PostAnalyticalImportanceSampling mySamplingAlgo(formResult); fullprint << "FORM probability=" << formResult.getEventProbability() << std::endl; mySamplingAlgo.setMaximumOuterSampling(250); mySamplingAlgo.setBlockSize(4); mySamplingAlgo.setMaximumCoefficientOfVariation(0.001); fullprint << "PostAnalyticalImportanceSampling=" << mySamplingAlgo << std::endl; mySamplingAlgo.run(); /* Stream out the result */ fullprint << "PostAnalyticalImportanceSampling result=" << mySamplingAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PostAnalyticalImportanceSampling_std.expout000066400000000000000000000042301307543307100262560ustar00rootroot00000000000000FORM probability=0.156427 PostAnalyticalImportanceSampling=class=PostAnalyticalImportanceSampling derived from class=PostAnalyticalSimulation analyticalResult=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=4 values=[-0.0310309,0.841941,0.445397,-0.332234] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[49.969,1.84194,10.4454,4.66777] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.00925 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] controlProbability_=0.156427 PostAnalyticalImportanceSampling result=probabilityEstimate=1.036267e-01 varianceEstimate=6.735270e-04 standard deviation=2.60e-02 coefficient of variation=2.50e-01 confidenceLength(0.95)=1.02e-01 outerSampling=250 blockSize=4 openturns-1.9/lib/test/t_PosteriorDistribution_std.cxx000066400000000000000000000127221307543307100234630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class PosteriorDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities //checkClassWithClassName(); UnsignedInteger observationsSize = 5; // Create a collection of distribution Normal conditionedDistribution; Collection< Distribution > conditioningDistributionCollection; // First conditioning distribution: continuous/continuous { Collection< Distribution > atoms; atoms.add(Uniform(0.0, 1.0)); atoms.add(Uniform(1.0, 2.0)); conditioningDistributionCollection.add(ComposedDistribution(atoms)); } // Second conditioning distribution: discrete/continuous { Collection< Distribution > atoms; atoms.add(Binomial(3, 0.5)); atoms.add(Uniform(1.0, 2.0)); // conditioningDistributionCollection.add(ComposedDistribution(atoms)); } // Third conditioning distribution: dirac/continuous { Collection< Distribution > atoms; atoms.add(Dirac(0.0)); atoms.add(Uniform(1.0, 2.0)); conditioningDistributionCollection.add(ComposedDistribution(atoms)); } for (UnsignedInteger i = 0; i < conditioningDistributionCollection.getSize(); ++i) { fullprint << "conditioning distribution=" << conditioningDistributionCollection[i].__str__() << std::endl; Distribution observationsDistribution(conditionedDistribution); observationsDistribution.setParameter(conditioningDistributionCollection[i].getMean()); Sample observations(observationsDistribution.getSample(observationsSize)); PosteriorDistribution distribution(ConditionalDistribution(conditionedDistribution, conditioningDistributionCollection[i]), observations); UnsignedInteger dim = distribution.getDimension(); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; fullprint << "range=" << distribution.getRange() << std::endl; Point mean(distribution.getMean()); fullprint << "Mean " << mean << std::endl; fullprint << "Covariance " << distribution.getCovariance() << std::endl; // Is this distribution an elliptical distribution? fullprint << "Elliptical distribution= " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Has this distribution an elliptical copula? fullprint << "Elliptical copula= " << (distribution.hasEllipticalCopula() ? "true" : "false") << std::endl; // Has this distribution an independent copula? fullprint << "Independent copula= " << (distribution.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = distribution.getSample(size); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling // size = 10000; // Sample anotherSample = distribution.getSample(size); // fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; // fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point zero(dim, 0.0); // Show PDF and CDF of zero point Scalar zeroPDF = distribution.computePDF(zero); Scalar zeroCDF = distribution.computeCDF(zero); fullprint << "Zero point= " << zero << " pdf=" << zeroPDF << " cdf=" << zeroCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile(0.95); fullprint << "Quantile=" << quantile << std::endl; fullprint << "CDF(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Extract the marginals for (UnsignedInteger j = 0; j < dim; ++ j) { Distribution margin(distribution.getMarginal(j)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF=" << margin.computePDF(Point(1)) << std::endl; fullprint << "margin CDF=" << margin.computeCDF(Point(1)) << std::endl; fullprint << "margin quantile=" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PosteriorDistribution_std.expout000066400000000000000000000324521307543307100242070ustar00rootroot00000000000000conditioning distribution=ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[1.4123],[-1.39926],[-0.157398],[2.30822],[-2.77208]] Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.4123 ] 1 : [ -1.39926 ] 2 : [ -0.157398 ] 3 : [ 2.30822 ] 4 : [ -2.77208 ]) range=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,1] upper bound=class=Point name=Unnamed dimension=2 values=[1,2] finite lower bound=[1,1] finite upper bound=[1,1] Mean class=Point name=Unnamed dimension=2 values=[0.366308,1.48584] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0677337,0.0116648,0.0116648,0.0730088] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0.714382,1.75489] oneSample=class=Sample name=PosteriorDistribution implementation=class=SampleImplementation name=PosteriorDistribution size=10 dimension=2 description=[X0,X1] data=[[0.373767,1.81486],[0.883503,1.78061],[0.92851,2],[0.684575,2],[0.359802,1.9376],[0.588615,1.49168],[0.085785,1.6759],[0.210442,1.5383],[0.0245595,1.52709],[0.981841,2]] Zero point= class=Point name=Unnamed dimension=2 values=[0,0] pdf=0 cdf=0 Quantile=class=Point name=Unnamed dimension=2 values=[0.974679,1.97468] CDF(quantile)=0.95 margin=class=MarginalDistribution name=MarginalDistribution dimension=1 distribution=class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[1.4123],[-1.39926],[-0.157398],[2.30822],[-2.77208]] indices=[0] margin PDF=0.5 margin CDF=0 margin quantile=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.955603] margin=class=MarginalDistribution name=MarginalDistribution dimension=1 distribution=class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[1.4123],[-1.39926],[-0.157398],[2.30822],[-2.77208]] indices=[1] margin PDF=0 margin CDF=0 margin quantile=class=Point name=Unnamed dimension=1 values=[1.95] margin realization=class=Point name=Unnamed dimension=1 values=[1.72256] conditioning distribution=ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[-0.030543],[-1.82832],[0.495255],[4.28437],[-1.55711]] Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ -0.030543 ] 1 : [ -1.82832 ] 2 : [ 0.495255 ] 3 : [ 4.28437 ] 4 : [ -1.55711 ]) range=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,1] upper bound=class=Point name=Unnamed dimension=2 values=[0,2] finite lower bound=[1,1] finite upper bound=[1,1] Mean class=Point name=Unnamed dimension=2 values=[0,1.37194] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0.129721] Elliptical distribution= false Elliptical copula= false Independent copula= false oneRealization=class=Point name=Unnamed dimension=2 values=[0,2] oneSample=class=Sample name=PosteriorDistribution implementation=class=SampleImplementation name=PosteriorDistribution size=10 dimension=2 description=[X0,X1] data=[[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2]] Zero point= class=Point name=Unnamed dimension=2 values=[0,0] pdf=0 cdf=0 Quantile=class=Point name=Unnamed dimension=2 values=[0,1.95] CDF(quantile)=0.95 margin=class=MarginalDistribution name=MarginalDistribution dimension=1 distribution=class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[-0.030543],[-1.82832],[0.495255],[4.28437],[-1.55711]] indices=[0] margin PDF=23207.9 margin CDF=1 margin quantile=class=Point name=Unnamed dimension=1 values=[0] margin realization=class=Point name=Unnamed dimension=1 values=[0] margin=class=MarginalDistribution name=MarginalDistribution dimension=1 distribution=class=PosteriorDistribution name=PosteriorDistribution dimension=2 conditional distribution=class=ConditionalDistribution name=ConditionalDistribution dimension=1 conditioned distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] conditioning distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=2 link function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[y0,y1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[y0,y1] outputVariablesNames=[y0,y1] formulas=[y0,y1] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[-0.030543],[-1.82832],[0.495255],[4.28437],[-1.55711]] indices=[1] margin PDF=0 margin CDF=0 margin quantile=class=Point name=Unnamed dimension=1 values=[1.95] margin realization=class=Point name=Unnamed dimension=1 values=[2] openturns-1.9/lib/test/t_PosteriorRandomVector_std.cxx000066400000000000000000000061721307543307100234110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomWalkMetropolisHastings * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef ComposedDistribution::DistributionCollection DistributionCollection; typedef RandomWalkMetropolisHastings::CalibrationStrategyCollection CalibrationStrategyCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // observations UnsignedInteger size = 10; Normal realDist(31.0, 1.2); Sample data(realDist.getSample(size)); // calibration parameters CalibrationStrategyCollection calibrationColl(2); // proposal distribution DistributionCollection proposalColl; Uniform mean_proposal(-2.0, 2.0); Uniform std_proposal(-2.0, 2.0); proposalColl.add(mean_proposal); proposalColl.add(std_proposal); // prior distribution Scalar mu0 = 25.; Scalar sigma0 = 0.1; Normal mean_prior(mu0, sigma0); Dirac std_prior(2.0); // standard dev is known DistributionCollection priorColl; priorColl.add(mean_prior); priorColl.add(std_prior); Distribution prior = ComposedDistribution( priorColl ); // choose the initial state within the prior Point initialState(prior.getRealization()); // conditional distribution Distribution conditional = Normal(); // create a metropolis-hastings sampler RandomWalkMetropolisHastings sampler(prior, conditional, data, initialState, proposalColl); sampler.setVerbose(true); sampler.setThinning(100); sampler.setBurnIn(1000); sampler.setCalibrationStrategyPerComponent(calibrationColl); // create a PosteriorRandomVector PosteriorRandomVector randomVector(sampler); std::cout << "randomVector=" << randomVector << std::endl; // get the dimension UnsignedInteger dimension = randomVector.getDimension(); std::cout << "dimension=" << dimension << std::endl; // get a realization Point realization(randomVector.getRealization()); std::cout << "realization=" << realization << std::endl; // get a sample Sample sample(randomVector.getSample(10)); std::cout << "sample=" << sample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_PosteriorRandomVector_std.expout000066400000000000000000000105711307543307100241310ustar00rootroot00000000000000randomVector=class=PosteriorRandomVector sampler=class=RandomWalkMetropolisHastings name=Unnamed derived from class=MCMC prior=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[25] sigma=class=Point name=Unnamed dimension=1 values=[0.1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[2] conditional=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] model=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] gradientImplementation=class=ParametricGradient evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] hessianImplementation=class=ParametricHessian evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] parameters=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=0 data=[[],[],[],[],[],[],[],[],[],[]] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=10 dimension=1 description=[X0] data=[[31.7298],[29.4806],[30.4741],[32.4466],[28.3823],[31.4201],[30.574],[32.7247],[31.9728],[31.9518]] burnIn=1000 thinning=100 proposal=[class=Uniform name=Uniform dimension=1 a=-2 b=2,class=Uniform name=Uniform dimension=1 a=-2 b=2] calibrationStrategy=[class=CalibrationStrategyImplementation name=Unnamed,class=CalibrationStrategyImplementation name=Unnamed] dimension=2 realization=[25.1464,2] sample=0 : [ 25.154 2 ] 1 : [ 25.225 2 ] 2 : [ 25.3727 2 ] 3 : [ 24.9898 2 ] 4 : [ 25.154 2 ] 5 : [ 25.2007 2 ] 6 : [ 25.0898 2 ] 7 : [ 25.0216 2 ] 8 : [ 25.0886 2 ] 9 : [ 25.0441 2 ] openturns-1.9/lib/test/t_ProcessSample_std.cxx000066400000000000000000000071431307543307100216560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ProcessSample for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection TimeSeriesCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // We create a sample and we fill it const UnsignedInteger size = 6; const UnsignedInteger dimension = 1; Sample sample(size, dimension); for (UnsignedInteger i = 0; i < size; ++i) for (UnsignedInteger j = 0; j < dimension; ++j) sample[i][j] = i + j + 1; // TimeGrid RegularGrid timeGrid(0.0, 1.0 / (size - 1.0), size); // TimeSeries TimeSeries timeSerie(timeGrid, sample); // We create an empty ProcessSample with default constructor ProcessSample psample0; psample0.setName("PSample0"); fullprint << "Default constructor" << std::endl; fullprint << "psample0=" << psample0 << std::endl; // We create an empty ProcessSample with timeGrid, size and dimension arguments ProcessSample psample1(timeGrid, 4, dimension); fullprint << "Constructor based on size, dimension and timeGrid" << std::endl; fullprint << "psample1=" << psample1 << std::endl; // change the first component using operator [] psample1.setField(timeSerie, 0); psample1.setName("PSample1"); fullprint << "changing psample1[0] with []" << std::endl; fullprint << "psample1[0]=" << psample1[0] << std::endl; // We create a ProcessSample with size and timeSerie arguments ProcessSample psample2(3, timeSerie); psample2.setName("PSample2"); fullprint << "Constructor based on size / timeSerie" << std::endl; fullprint << "psample2=" << psample2 << std::endl; // TimeSeriesCollection // TimeSeriesCollection collection; // collection.add(timeSerie); // sample.scale( Point( 1, 0.1 ) ); // TimeSeries newtimeSeries(timeGrid, sample); // collection.add( newtimeSeries ); // We create a ProcessSample with collection arguments arguments // ProcessSample psample3( collection ); // psample3.setName("PSample3"); // fullprint << "Constructor based on collection " << std::endl; // fullprint << "psample3=" << psample3 << std::endl; // TimeSeries ts = psample3[1]; // fullprint << "last element of psample3=" << ts << std::endl; // print mean twice for non-regression test #434 // fullprint << "psample 3 mean=" << psample3.computeMean() << std::endl; // fullprint << "psample 3 mean=" << psample3.computeMean() << std::endl; // fullprint << "psample 3 temporal mean=" << psample3.computeTemporalMean() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ProcessSample_std.expout000066400000000000000000000036741307543307100224050ustar00rootroot00000000000000Default constructor psample0=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] simplices=[] values=[] Constructor based on size, dimension and timeGrid psample1=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[0],[0],[0],[0],[0]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[0],[0],[0],[0],[0]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[0],[0],[0],[0],[0]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[0],[0],[0],[0],[0]]] changing psample1[0] with [] psample1[0]=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[2],[3],[4],[5],[6]] Constructor based on size / timeSerie psample2=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[2],[3],[4],[5],[6]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[2],[3],[4],[5],[6]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[2],[3],[4],[5],[6]]] openturns-1.9/lib/test/t_ProductDistribution_std.cxx000066400000000000000000000107461307543307100231210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ProductDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; static Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Uniform left(-1.0, 2.0); Normal right(1.0, 2.0); ProductDistribution distribution(left, right); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distribution.getDimension(), 2.5 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf =" << CDF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << clean(PDFgr) << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << clean(CDFgr) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile =" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean =" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation =" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness =" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis =" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance =" << covariance << std::endl; ProductDistribution::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters =" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution fullprint << "left=" << distribution.getLeft() << std::endl; fullprint << "right=" << distribution.getRight() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ProductDistribution_std.expout000066400000000000000000000053251307543307100236400ustar00rootroot00000000000000Distribution class=ProductDistribution name=ProductDistribution left=class=Uniform name=Uniform dimension=1 a=-1 b=2 right=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution ProductDistribution(Uniform(a = -1, b = 2) * Normal(mu = 1, sigma = 2)) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.28927] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.11143] last=class=Point name=Unnamed dimension=1 values=[2.03647] mean=class=Point name=Unnamed dimension=1 values=[0.48959] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.80714] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.032141] pdf =0.0680485 cdf =0.856594 pdf gradient =class=Point name=Unnamed dimension=4 values=[0.00830329,0.0103036,0.0171714,-0.00243373] cdf gradient =class=Point name=Unnamed dimension=4 values=[-0.034449,-0.102285,-0.0746378,-0.0477418] quantile =class=Point name=Unnamed dimension=1 values=[4.65046] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[0.5] standard deviation =class=Point name=Unnamed dimension=1 values=[2.17945] skewness =class=Point name=Unnamed dimension=1 values=[0.869365] kurtosis =class=Point name=Unnamed dimension=1 values=[6.00166] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.75] parameters =[[a : -1, b : 2, mean_0 : 1, standard_deviation_0 : 2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[5] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[16.25] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[160.6] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[983.5] Standard representative=ProductDistribution(Uniform(a = -1, b = 2) * Normal(mu = 1, sigma = 2)) left=class=Uniform name=Uniform dimension=1 a=-1 b=2 right=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] openturns-1.9/lib/test/t_QuadrantSampling_std.cxx000066400000000000000000000047001307543307100223440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class QuadrantSampling for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char **argv) { // Log::Show(Log::ALL); OStream fullprint(std::cout); for (UnsignedInteger d = 3; d < 4; ++ d) { RandomDirection rd(d); for (UnsignedInteger q = 0; q < static_cast(1 << d); ++ q) { QuadrantSampling qs(rd, q); fullprint << "quadrant=" << q << std::endl; for (UnsignedInteger i = 0; i < 10; ++ i) { fullprint << " sample=" << qs.generate()[0].getCollection() << std::endl; } } // lets chose (-1,...,-1) for first quadrant bisector Point bisector(d, -1.); for (UnsignedInteger q = 0; q < static_cast(1 << d); ++ q) { QuadrantSampling qs(rd, q, bisector); fullprint << "quadrant=" << q << " bisector=" << bisector.getCollection() << std::endl; for (UnsignedInteger i = 0; i < 10; ++ i) { fullprint << " sample=" << qs.generate()[0].getCollection() << std::endl; } } // let's stratify only the 2 last dims UnsignedInteger sDim = 2; Indices strataIndices(sDim); strataIndices.fill(); for (UnsignedInteger q = 0; q < static_cast(1 << sDim); ++ q) { QuadrantSampling qs(rd, q); qs.setStrataIndices(strataIndices); fullprint << "quadrant=" << q << " strataIndices=" << strataIndices << std::endl; for (UnsignedInteger i = 0; i < 10; ++ i) { fullprint << " sample=" << qs.generate()[0].getCollection() << std::endl; } } } return 0; } openturns-1.9/lib/test/t_QuadrantSampling_std.expout000066400000000000000000000202301307543307100230620ustar00rootroot00000000000000quadrant=0 sample=[0.413333,0.86049,0.297845] sample=[0.478978,0.866739,0.139084] sample=[0.210329,0.851518,0.480291] sample=[0.827543,0.490925,0.272334] sample=[0.780408,0.437182,0.447029] sample=[0.0899206,0.986324,0.138127] sample=[0.713437,0.567343,0.411254] sample=[0.314411,0.732151,0.604236] sample=[0.78549,0.208137,0.582824] sample=[0.915263,0.0360523,0.401241] quadrant=1 sample=[-0.371332,0.124144,0.920163] sample=[-0.230168,0.784406,0.57596] sample=[-0.807804,0.047509,0.587534] sample=[-0.42783,0.581542,0.691933] sample=[-0.433669,0.852429,0.292055] sample=[-0.706261,0.240815,0.665736] sample=[-0.048837,0.740098,0.670724] sample=[-0.434421,0.1077,0.894248] sample=[-0.338708,0.278231,0.898813] sample=[-0.916301,0.3612,0.172995] quadrant=2 sample=[0.836143,-0.519269,0.176705] sample=[0.610736,-0.390968,0.688583] sample=[0.081143,-0.69935,0.710158] sample=[0.373003,-0.538837,0.75533] sample=[0.821933,-0.514794,0.243748] sample=[0.573701,-0.7759,0.262384] sample=[0.406646,-0.504017,0.761975] sample=[0.444317,-0.665243,0.600028] sample=[0.109974,-0.981218,0.158483] sample=[0.412095,-0.864203,0.28867] quadrant=3 sample=[-0.271908,-0.815166,0.51144] sample=[-0.0585645,-0.557514,0.828099] sample=[-0.0948554,-0.528039,0.843906] sample=[-0.41141,-0.692222,0.592934] sample=[-0.0741711,-0.997236,0.00425955] sample=[-0.700212,-0.572319,0.426795] sample=[-0.194551,-0.934985,0.296568] sample=[-0.649327,-0.619105,0.441682] sample=[-0.0530621,-0.953082,0.298026] sample=[-0.346832,-0.346732,0.871484] quadrant=4 sample=[0.932421,0.256839,-0.254214] sample=[0.765418,0.446226,-0.463699] sample=[0.730459,0.0862714,-0.677486] sample=[0.518976,0.703627,-0.485359] sample=[0.958208,0.253014,-0.133498] sample=[0.933032,0.358369,-0.0319861] sample=[0.504002,0.843899,-0.18389] sample=[0.545666,0.184342,-0.817476] sample=[0.622183,0.782859,-0.00447836] sample=[0.804241,0.272494,-0.528151] quadrant=5 sample=[-0.277825,0.303593,-0.911397] sample=[-0.933247,0.236709,-0.270221] sample=[-0.369112,0.879572,-0.300181] sample=[-0.92867,0.281313,-0.241732] sample=[-0.745981,0.611666,-0.263394] sample=[-0.410469,0.0819961,-0.90818] sample=[-0.764946,0.605493,-0.219627] sample=[-0.358675,0.361012,-0.860826] sample=[-0.29338,0.912963,-0.283596] sample=[-0.323085,0.153269,-0.933876] quadrant=6 sample=[0.372442,-0.748595,-0.548537] sample=[0.202671,-0.634788,-0.745633] sample=[0.846941,-0.378534,-0.373367] sample=[0.911949,-0.0191579,-0.409857] sample=[0.143616,-0.861881,-0.48635] sample=[0.852803,-0.494162,-0.168908] sample=[0.330287,-0.658621,-0.676113] sample=[0.52206,-0.52796,-0.669859] sample=[0.40432,-0.656637,-0.636674] sample=[0.755705,-0.641439,-0.132157] quadrant=7 sample=[-0.463444,-0.566628,-0.681288] sample=[-0.29358,-0.863047,-0.411048] sample=[-0.788212,-0.44117,-0.429058] sample=[-0.730544,-0.5668,-0.380845] sample=[-0.0687671,-0.859392,-0.506673] sample=[-0.325787,-0.945208,-0.02109] sample=[-0.0351961,-0.970651,-0.237905] sample=[-0.686709,-0.480553,-0.545435] sample=[-0.207605,-0.959369,-0.191077] sample=[-0.216749,-0.297895,-0.929666] quadrant=0 bisector=[-1,-1,-1] sample=[-0.0442739,0.594666,0.802753] sample=[-0.936914,0.31312,0.155398] sample=[-0.021114,0.63079,0.775666] sample=[-0.480734,0.800669,0.357523] sample=[-0.579982,0.237156,0.779345] sample=[-0.631365,0.667203,0.395244] sample=[-0.235308,0.497041,0.835213] sample=[-0.275846,0.649246,0.708794] sample=[-0.0882413,0.538332,0.8381] sample=[-0.00726827,0.998592,0.0525453] quadrant=1 bisector=[-1,-1,-1] sample=[0.0534516,0.179122,0.982374] sample=[0.462252,0.77658,0.428074] sample=[0.300126,0.55292,0.777305] sample=[0.815759,0.326784,0.477231] sample=[0.680031,0.433548,0.591265] sample=[0.666376,0.609135,0.429998] sample=[0.259702,0.929427,0.262145] sample=[0.346662,0.914983,0.206474] sample=[0.709453,0.660325,0.246266] sample=[0.301873,0.375474,0.876294] quadrant=2 bisector=[-1,-1,-1] sample=[-0.739851,-0.398089,0.542352] sample=[-0.305651,-0.0118193,0.95207] sample=[-0.19634,-0.726324,0.658713] sample=[-0.369712,-0.688457,0.623971] sample=[-0.453281,-0.672775,0.58473] sample=[-0.0717805,-0.0741584,0.99466] sample=[-0.591614,-0.609892,0.52728] sample=[-0.903238,-0.318579,0.287522] sample=[-0.0599304,-0.621656,0.780995] sample=[-0.446133,-0.725898,0.523485] quadrant=3 bisector=[-1,-1,-1] sample=[0.890948,-0.0901904,0.445059] sample=[0.915283,-0.195065,0.35243] sample=[0.355102,-0.330827,0.874332] sample=[0.633099,-0.758076,0.156543] sample=[0.354451,-0.368265,0.859503] sample=[0.182744,-0.240414,0.953313] sample=[0.419563,-0.750686,0.510331] sample=[0.245123,-0.969391,0.0139923] sample=[0.850496,-0.0470062,0.523877] sample=[0.544354,-0.700193,0.461961] quadrant=4 bisector=[-1,-1,-1] sample=[-0.79794,0.568339,-0.200702] sample=[-0.170768,0.369335,-0.913472] sample=[-0.684784,0.281021,-0.672382] sample=[-0.653701,0.423352,-0.627254] sample=[-0.248346,0.125937,-0.96045] sample=[-0.39827,0.117596,-0.909699] sample=[-0.341576,0.814617,-0.468749] sample=[-0.784934,0.315094,-0.533474] sample=[-0.436251,0.874379,-0.212478] sample=[-0.295529,0.245114,-0.923354] quadrant=5 bisector=[-1,-1,-1] sample=[0.0229542,0.919296,-0.392897] sample=[0.977336,0.00482712,-0.211638] sample=[0.0719806,0.189175,-0.979302] sample=[0.790768,0.448903,-0.416139] sample=[0.650135,0.754965,-0.0857475] sample=[0.645007,0.193218,-0.739346] sample=[0.602808,0.682054,-0.414035] sample=[0.243774,0.957724,-0.152772] sample=[0.139731,0.816638,-0.55998] sample=[0.544614,0.276763,-0.791705] quadrant=6 bisector=[-1,-1,-1] sample=[-0.162055,-0.149748,-0.975353] sample=[-0.0190006,-0.905458,-0.42401] sample=[-0.669911,-0.725505,-0.157675] sample=[-0.829268,-0.115389,-0.546809] sample=[-0.349665,-0.204968,-0.914179] sample=[-0.858258,-0.204285,-0.470809] sample=[-0.739677,-0.471446,-0.480225] sample=[-0.384846,-0.880106,-0.27804] sample=[-0.97833,-0.192762,-0.0755868] sample=[-0.826015,-0.483716,-0.289342] quadrant=7 bisector=[-1,-1,-1] sample=[0.729555,-0.562355,-0.389239] sample=[0.263147,-0.844744,-0.466006] sample=[0.148906,-0.986398,-0.0696079] sample=[0.46419,-0.837274,-0.288963] sample=[0.0100726,-0.95302,-0.302741] sample=[0.817796,-0.19549,-0.541289] sample=[0.80549,-0.507511,-0.30597] sample=[0.105193,-0.768194,-0.631516] sample=[0.62689,-0.190964,-0.755342] sample=[0.752802,-0.474793,-0.455917] quadrant=0 strataIndices=[0,1] sample=[0.0175218,0.999398,-0.029933] sample=[0.543195,0.566683,0.619524] sample=[0.244118,0.83236,0.497577] sample=[0.223341,0.795661,0.563064] sample=[0.489552,0.835947,0.248056] sample=[0.395755,0.190202,-0.898444] sample=[0.470777,0.860296,0.195599] sample=[0.976606,0.088718,-0.195883] sample=[0.60616,0.722004,-0.333588] sample=[0.0759607,0.909648,-0.408375] quadrant=1 strataIndices=[0,1] sample=[-0.163594,0.986086,0.0295245] sample=[-0.439206,0.885699,0.150454] sample=[-0.495028,0.638323,0.589483] sample=[-0.316209,0.306675,-0.897754] sample=[-0.757525,0.462706,0.460498] sample=[-0.388631,0.750529,-0.534483] sample=[-0.931475,0.362357,-0.0324272] sample=[-0.0205535,0.73746,0.675078] sample=[-0.541091,0.791674,-0.283676] sample=[-0.336713,0.394509,0.854978] quadrant=2 strataIndices=[0,1] sample=[0.287241,-0.748751,-0.597381] sample=[0.560006,-0.294108,0.774528] sample=[0.516942,-0.712757,0.474077] sample=[0.278215,-0.954895,-0.103791] sample=[0.731867,-0.115894,-0.67152] sample=[0.425947,-0.331803,-0.84171] sample=[0.213719,-0.757002,0.617472] sample=[0.178793,-0.793144,-0.582199] sample=[0.950628,-0.0264014,-0.309208] sample=[0.327118,-0.866872,-0.376202] quadrant=3 strataIndices=[0,1] sample=[-0.479387,-0.0277055,0.877166] sample=[-0.265373,-0.128368,-0.955562] sample=[-0.068932,-0.885285,0.459912] sample=[-0.787597,-0.409627,0.460323] sample=[-0.608499,-0.365178,0.704538] sample=[-0.0349746,-0.993543,0.107927] sample=[-0.530114,-0.516394,0.672544] sample=[-0.22591,-0.734007,0.640467] sample=[-0.271936,-0.894507,0.354836] sample=[-0.411842,-0.551741,0.725237] openturns-1.9/lib/test/t_QuadraticEvaluation_std.cxx000066400000000000000000000050361307543307100230420ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class LinearEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 2; // Center Point center(inputDimension); center[0] = -1; center[1] = 0.5; center[2] = 1; // Constant term Point constant(outputDimension); constant[0] = -1.0; constant[1] = 2.0; // Linear term Matrix linear(inputDimension, outputDimension); linear(0, 0) = 1.0; linear(1, 0) = 2.0; linear(2, 0) = 3.0; linear(0, 1) = 4.0; linear(1, 1) = 5.0; linear(2, 1) = 6.0; // Quadratic term SymmetricTensor quadratic(inputDimension, outputDimension); quadratic(0, 0, 0) = 7.0; quadratic(0, 1, 0) = 8.0; quadratic(0, 2, 0) = 9.0; quadratic(1, 1, 0) = 10.0; quadratic(1, 2, 0) = 11.0; quadratic(2, 2, 0) = 12.0; quadratic(0, 0, 1) = -7.0; quadratic(0, 1, 1) = -8.0; quadratic(0, 2, 1) = -9.0; quadratic(1, 1, 1) = -10.0; quadratic(1, 2, 1) = -11.0; quadratic(2, 2, 1) = -12.0; QuadraticEvaluation myFunction(center, constant, linear, quadratic); myFunction.setName("quadraticFunction"); Point inPoint(inputDimension); inPoint[0] = 7.0; inPoint[1] = 8.0; inPoint[2] = 9.0; Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_QuadraticEvaluation_std.expout000066400000000000000000000011331307543307100235560ustar00rootroot00000000000000myFunction=class=QuadraticEvaluation name=quadraticFunction center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] quadraticFunction( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[2651.25,-2485.75] openturns-1.9/lib/test/t_QuadraticLeastSquares_std.cxx000066400000000000000000000061251307543307100233470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class QuadraticLeastSquares for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description input(2); input[0] = "x1"; input[1] = "x2"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; SymbolicFunction myFunc(input, formula); Sample data(9, myFunc.getInputDimension()); Point point(myFunc.getInputDimension()); point[0] = 0.5; point[1] = 0.5; data[0] = point; point[0] = -1; point[1] = -1; data[1] = point; point[0] = -1; point[1] = 1; data[2] = point; point[0] = 1; point[1] = -1; data[3] = point; point[0] = 1; point[1] = 1; data[4] = point; point[0] = -0.5; point[1] = -0.5; data[5] = point; point[0] = -0.5; point[1] = 0.5; data[6] = point; point[0] = 0.5; point[1] = -0.5; data[7] = point; point[0] = 0.5; point[1] = 0.5; data[8] = point; { QuadraticLeastSquares myLeastSquares(data, myFunc); myLeastSquares.run(); Function responseSurface(myLeastSquares.getResponseSurface()); fullprint << "myLeastSquares=" << myLeastSquares << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; Point in(myFunc.getInputDimension(), 0.2); fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } { Sample dataOut(myFunc(data)); QuadraticLeastSquares myLeastSquares(data, dataOut); myLeastSquares.run(); Function responseSurface(myLeastSquares.getResponseSurface()); fullprint << "myLeastSquares=" << myLeastSquares << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; Point in(myFunc.getInputDimension(), 0.2); fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_QuadraticLeastSquares_std.expout000066400000000000000000000227611307543307100240750ustar00rootroot00000000000000myLeastSquares=class=QuadraticLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-1,-1],[-1,1],[1,-1],[1,1],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[y0,y1,y2] data=[[0.239713,0.540302,0.909796],[0.841471,-0.416147,0],[-0.841471,1,0.0995741],[-0.841471,1,0],[0.841471,-0.416147,0.735759],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] myFunc(class=Point name=Unnamed dimension=2 values=[0.2,0.2])=class=Point name=Unnamed dimension=3 values=[0.0397339,0.921061,0.982477] responseSurface(class=Point name=Unnamed dimension=2 values=[0.2,0.2])=class=Point name=Unnamed dimension=3 values=[0.0412683,0.862032,1.29442] myLeastSquares=class=QuadraticLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-1,-1],[-1,1],[1,-1],[1,1],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[y0,y1,y2] data=[[0.239713,0.540302,0.909796],[0.841471,-0.416147,0],[-0.841471,1,0.0995741],[-0.841471,1,0],[0.841471,-0.416147,0.735759],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] myFunc(class=Point name=Unnamed dimension=2 values=[0.2,0.2])=class=Point name=Unnamed dimension=3 values=[0.0397339,0.921061,0.982477] responseSurface(class=Point name=Unnamed dimension=2 values=[0.2,0.2])=class=Point name=Unnamed dimension=3 values=[0.0412683,0.862032,1.29442] openturns-1.9/lib/test/t_QuadraticTaylor_std.cxx000066400000000000000000000045161307543307100222070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class QuadraticTaylor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Scalar eps = 0.4; /** Instance creation */ Description input(2); input[0] = "x1"; input[1] = "x2"; Description output(3); output[0] = "f1"; output[1] = "f2"; output[2] = "f3"; Description formula(3); formula[0] = "x1*sin(x2)"; formula[1] = "cos(x1+x2)"; formula[2] = "(x2+1)*exp(x1-2*x2)"; Function myFunc(input, output, formula); Point center(myFunc.getInputDimension()); for(UnsignedInteger i = 0; i < center.getDimension(); i++) { center[i] = 1.0 + i; } QuadraticTaylor myTaylor(center, myFunc); myTaylor.run(); Function responseSurface(myTaylor.getResponseSurface()); fullprint << "myTaylor=" << myTaylor << std::endl; fullprint << "responseSurface=" << responseSurface << std::endl; fullprint << "myFunc(" << center << ")=" << myFunc(center) << std::endl; fullprint << "responseSurface(" << center << ")=" << responseSurface(center) << std::endl; Point in(center); in[0] += eps; in[1] -= eps / 2; fullprint << "myFunc(" << in << ")=" << myFunc(in) << std::endl; fullprint << "responseSurface(" << in << ")=" << responseSurface(in) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_QuadraticTaylor_std.expout000066400000000000000000000106571307543307100227340ustar00rootroot00000000000000myTaylor=class=QuadraticTaylor name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] function=class=Function name=TestResponseSurface implementation=class=FunctionImplementation name=TestResponseSurface description=[x1,x2,y1,y2,y3] evaluationImplementation=class=ComputedEvaluationImplementation name=TestResponseSurface gradientImplementation=class=ComputedGradientImplementation name=TestResponseSurface hessianImplementation=class=ComputedHessianImplementation name=TestResponseSurface responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1,y2,y3] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1,y2,y3] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,-0.416147,-0.909297,0.989992,0.989992,0.989992,0.989992,0.149361,-0.248935,-0.248935,0.398297] myFunc(class=Point name=Unnamed dimension=2 values=[1,2])=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] responseSurface(class=Point name=Unnamed dimension=2 values=[1,2])=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] myFunc(class=Point name=Unnamed dimension=2 values=[1.4,1.8])=class=Point name=Unnamed dimension=3 values=[1.36339,-0.998295,0.310249] responseSurface(class=Point name=Unnamed dimension=2 values=[1.4,1.8])=class=Point name=Unnamed dimension=3 values=[1.37135,-0.998417,0.298722] openturns-1.9/lib/test/t_QuasiMonteCarlo_std.cxx000066400000000000000000000046661307543307100221530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of QuasiMonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; SymbolicFunction myFunction(input, Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ QuasiMonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); fullprint << "QuasiMonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result, though confidence length is not relevant*/ fullprint << "QuasiMonteCarlo result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_QuasiMonteCarlo_std.expout000066400000000000000000000026541307543307100226700ustar00rootroot00000000000000QuasiMonteCarlo=class=QuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 QuasiMonteCarlo result=probabilityEstimate=1.470000e-01 varianceEstimate=1.601410e-04 outerSampling=250 blockSize=4 openturns-1.9/lib/test/t_RandomGenerator_std.cxx000066400000000000000000000072751307543307100221730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomGenerator for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test the initialization method RandomGenerator::SetSeed(0); // Test the state accessor for reading RandomGeneratorState initialState(RandomGenerator::GetState()); fullprint << "state index=" << initialState.getIndex() << " state array=" << initialState.getBuffer() << std::endl; // Test the generation of one realization Scalar realization = RandomGenerator::Generate(); fullprint << "one realization=" << realization << std::endl; RandomGeneratorState state(RandomGenerator::GetState()); fullprint << "new state index=" << state.getIndex() << std::endl; // Test the generation of several realizations UnsignedInteger size = 10000; Point several(RandomGenerator::Generate(size)); fullprint << size << " realizations, first=" << several[0] << ", last=" << several[size - 1] << std::endl; // Test the state accessor for writing RandomGenerator::SetState(initialState); fullprint << "restoring initial state, one realization=" << RandomGenerator::Generate() << std::endl; // Test the uniformity of the random generator size = 100000; Point manyPoints(RandomGenerator::Generate(size)); UnsignedInteger slice = 10; Point frequencies(slice, 0.0); Scalar mean = 0.0; for (UnsignedInteger i = 0; i < size; i++) { frequencies[(UnsignedInteger)(slice * manyPoints[i])]++; mean += manyPoints[i]; } mean /= size; fullprint << "mean of " << size << " realizations=" << mean << std::endl; for (UnsignedInteger i = 0; i < slice; i++) { frequencies[i] /= size; fullprint << "frequency in slice [" << Scalar(i) / slice << ", " << Scalar(i + 1) / slice << "]=" << frequencies[i] << std::endl; } fullprint << "One integer generation in [[0, " << slice - 1 << "]]=" << RandomGenerator::IntegerGenerate(slice) << std::endl; fullprint << "Another integer generation in [[0, " << slice - 1 << "]]=" << RandomGenerator::IntegerGenerate(slice) << std::endl; Collection manyUnsignedInteger(RandomGenerator::IntegerGenerate(size, slice)); frequencies = Point(slice, 0.0); mean = 0.0; for (UnsignedInteger i = 0; i < size; i++) { frequencies[manyUnsignedInteger[i]]++; mean += manyUnsignedInteger[i]; } mean /= size; fullprint << "mean of " << size << " integer realizations=" << mean << std::endl; for (UnsignedInteger i = 0; i < slice; i++) { frequencies[i] /= size; fullprint << "frequency for value " << i << "=" << frequencies[i] << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomGenerator_std.expout000066400000000000000000000222241307543307100227040ustar00rootroot00000000000000state index=0 state array=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923] one realization=0.629877 new state index=1 10000 realizations, first=0.882805, last=0.424722 restoring initial state, one realization=0.629877 mean of 100000 realizations=0.500416 frequency in slice [0, 0.1]=0.10026 frequency in slice [0.1, 0.2]=0.09958 frequency in slice [0.2, 0.3]=0.10013 frequency in slice [0.3, 0.4]=0.09987 frequency in slice [0.4, 0.5]=0.10077 frequency in slice [0.5, 0.6]=0.09876 frequency in slice [0.6, 0.7]=0.09938 frequency in slice [0.7, 0.8]=0.09963 frequency in slice [0.8, 0.9]=0.09991 frequency in slice [0.9, 1]=0.10171 One integer generation in [[0, 9]]=3 Another integer generation in [[0, 9]]=9 mean of 100000 integer realizations=4.49773 frequency for value 0=0.10274 frequency for value 1=0.09951 frequency for value 2=0.09856 frequency for value 3=0.09951 frequency for value 4=0.09961 frequency for value 5=0.09898 frequency for value 6=0.10056 frequency for value 7=0.10003 frequency for value 8=0.09884 frequency for value 9=0.10166 openturns-1.9/lib/test/t_RandomMixture_grid1d.cxx000066400000000000000000000053401307543307100222510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomMixture for grid computatioons - 1D cases * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; PlatformInfo::SetNumericalPrecision( 6 ); OStream fullprint(std::cout); setRandomGenerator(); try { // Defining RandomMixture Point weights(0); Collection< Distribution > coll(0); coll.add(Gamma(0.5, 1.0)); weights.add(1.0); coll.add(Gamma(0.5, 1.0)); weights.add(1.0); coll.add(Gamma(0.5, 1.0)); weights.add(1.0); coll.add(Gamma(0.5, 1.0)); weights.add(1.0); coll.add(Gamma(1.0, 1.0)); weights.add(1.0); RandomMixture distribution(coll, weights); Gamma referenceDistribution(3.0, 1.0); // Compute PDF on regular grid const UnsignedInteger N = 256; Indices points(1, N); Point mean(distribution.getMean()); Point sigma(distribution.getStandardDeviation()); Point xMin(mean - 3.9 * sigma); Point xMax(mean + 3.9 * sigma); Sample grid; fullprint << "distribution = " << distribution << std::endl; fullprint << "distribution = " << distribution.__str__() << std::endl; fullprint << "range = " << distribution.getRange() << std::endl; fullprint << "mean = " << distribution.getMean() << std::endl; fullprint << "cov = " << distribution.getCovariance() << std::endl; fullprint << "sigma = " << distribution.getStandardDeviation() << std::endl; fullprint << "xMin = " << xMin << std::endl; fullprint << "xMax = " << xMax << std::endl; Sample result(distribution.computePDF(xMin, xMax, points, grid)); for (UnsignedInteger i = 0; i < grid.getSize(); ++i) fullprint << grid[i][0] << ";" << result[i][0] << ";" << referenceDistribution.computePDF(grid[i]) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomMixture_grid1d.expout000066400000000000000000000154261307543307100230010ustar00rootroot00000000000000distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Gamma name=Gamma dimension=1 k=3 lambda=1 gamma=0] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] distribution = RandomMixture(Gamma(k = 3, lambda = 1, gamma = 0)) range = class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[38.9173] finite lower bound=[1] finite upper bound=[0] mean = class=Point name=Unnamed dimension=1 values=[3] cov = class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] sigma = class=Point name=Unnamed dimension=1 values=[1.73205] xMin = class=Point name=Unnamed dimension=1 values=[-3.755] xMax = class=Point name=Unnamed dimension=1 values=[9.755] -3.755;0;0 -3.70202;0;0 -3.64904;0;0 -3.59606;0;0 -3.54308;0;0 -3.4901;0;0 -3.43712;0;0 -3.38414;0;0 -3.33116;0;0 -3.27817;0;0 -3.22519;0;0 -3.17221;0;0 -3.11923;0;0 -3.06625;0;0 -3.01327;0;0 -2.96029;0;0 -2.90731;0;0 -2.85433;0;0 -2.80135;0;0 -2.74837;0;0 -2.69539;0;0 -2.64241;0;0 -2.58943;0;0 -2.53645;0;0 -2.48347;0;0 -2.43049;0;0 -2.37751;0;0 -2.32453;0;0 -2.27155;0;0 -2.21857;0;0 -2.16559;0;0 -2.11261;0;0 -2.05963;0;0 -2.00665;0;0 -1.95367;0;0 -1.90068;0;0 -1.8477;0;0 -1.79472;0;0 -1.74174;0;0 -1.68876;0;0 -1.63578;0;0 -1.5828;0;0 -1.52982;0;0 -1.47684;0;0 -1.42386;0;0 -1.37088;0;0 -1.3179;0;0 -1.26492;0;0 -1.21194;0;0 -1.15896;0;0 -1.10598;0;0 -1.053;0;0 -1.00002;0;0 -0.947038;0;0 -0.894058;0;0 -0.841077;0;0 -0.788097;0;0 -0.735117;0;0 -0.682136;0;0 -0.629156;0;0 -0.576175;0;0 -0.523195;0;0 -0.470215;0;0 -0.417234;0;0 -0.364254;0;0 -0.311274;0;0 -0.258293;0;0 -0.205313;0;0 -0.152332;0;0 -0.0993521;0;0 -0.0463717;0;0 0.00660866;2.16934e-05;2.16934e-05 0.059589;0.00167272;0.00167272 0.112569;0.00566138;0.00566138 0.16555;0.0116126;0.0116126 0.21853;0.0191905;0.0191905 0.271511;0.0280949;0.0280949 0.324491;0.0380584;0.0380584 0.377471;0.0488432;0.0488432 0.430452;0.0602388;0.0602388 0.483432;0.0720591;0.0720591 0.536412;0.0841408;0.0841408 0.589393;0.0963407;0.0963407 0.642373;0.108534;0.108534 0.695354;0.120613;0.120613 0.748334;0.132484;0.132484 0.801314;0.144069;0.144069 0.854295;0.155299;0.155299 0.907275;0.166121;0.166121 0.960255;0.176486;0.176486 1.01324;0.186358;0.186358 1.06622;0.195708;0.195708 1.1192;0.204513;0.204513 1.17218;0.212758;0.212758 1.22516;0.220432;0.220432 1.27814;0.227529;0.227529 1.33112;0.234049;0.234049 1.3841;0.239992;0.239992 1.43708;0.245367;0.245367 1.49006;0.25018;0.25018 1.54304;0.254443;0.254443 1.59602;0.258169;0.258169 1.649;0.261372;0.261372 1.70198;0.26407;0.26407 1.75496;0.266278;0.266278 1.80794;0.268015;0.268015 1.86092;0.269301;0.269301 1.9139;0.270155;0.270155 1.96688;0.270596;0.270596 2.01986;0.270644;0.270644 2.07284;0.27032;0.27032 2.12582;0.269644;0.269644 2.1788;0.268636;0.268636 2.23178;0.267315;0.267315 2.28476;0.2657;0.2657 2.33775;0.263812;0.263812 2.39073;0.261668;0.261668 2.44371;0.259286;0.259286 2.49669;0.256685;0.256685 2.54967;0.253881;0.253881 2.60265;0.250891;0.250891 2.65563;0.247731;0.247731 2.70861;0.244416;0.244416 2.76159;0.24096;0.24096 2.81457;0.237379;0.237379 2.86755;0.233685;0.233685 2.92053;0.229892;0.229892 2.97351;0.226011;0.226011 3.02649;0.222055;0.222055 3.07947;0.218034;0.218034 3.13245;0.21396;0.21396 3.18543;0.209841;0.209841 3.23841;0.205688;0.205688 3.29139;0.20151;0.20151 3.34437;0.197313;0.197313 3.39735;0.193108;0.193108 3.45033;0.1889;0.1889 3.50331;0.184696;0.184696 3.55629;0.180504;0.180504 3.60927;0.176328;0.176328 3.66225;0.172175;0.172175 3.71524;0.168049;0.168049 3.76822;0.163956;0.163956 3.8212;0.159898;0.159898 3.87418;0.155882;0.155882 3.92716;0.151909;0.151909 3.98014;0.147984;0.147984 4.03312;0.144109;0.144109 4.0861;0.140287;0.140287 4.13908;0.136521;0.136521 4.19206;0.132812;0.132812 4.24504;0.129162;0.129162 4.29802;0.125574;0.125574 4.351;0.122049;0.122049 4.40398;0.118587;0.118587 4.45696;0.11519;0.11519 4.50994;0.111859;0.111859 4.56292;0.108594;0.108594 4.6159;0.105396;0.105396 4.66888;0.102265;0.102265 4.72186;0.0992014;0.0992014 4.77484;0.0962056;0.0962056 4.82782;0.0932773;0.0932773 4.8808;0.0904163;0.0904163 4.93378;0.0876224;0.0876224 4.98676;0.0848953;0.0848953 5.03974;0.0822345;0.0822345 5.09272;0.0796394;0.0796394 5.14571;0.0771096;0.0771096 5.19869;0.0746443;0.0746443 5.25167;0.0722428;0.0722428 5.30465;0.0699044;0.0699044 5.35763;0.0676281;0.0676281 5.41061;0.0654132;0.0654132 5.46359;0.0632586;0.0632586 5.51657;0.0611636;0.0611636 5.56955;0.059127;0.059127 5.62253;0.0571479;0.0571479 5.67551;0.0552252;0.0552252 5.72849;0.0533579;0.0533579 5.78147;0.0515449;0.0515449 5.83445;0.0497852;0.0497852 5.88743;0.0480776;0.0480776 5.94041;0.0464211;0.0464211 5.99339;0.0448145;0.0448145 6.04637;0.0432567;0.0432567 6.09935;0.0417467;0.0417467 6.15233;0.0402833;0.0402833 6.20531;0.0388655;0.0388655 6.25829;0.0374921;0.0374921 6.31127;0.036162;0.036162 6.36425;0.0348742;0.0348742 6.41723;0.0336276;0.0336276 6.47021;0.0324212;0.0324212 6.5232;0.0312538;0.0312538 6.57618;0.0301245;0.0301245 6.62916;0.0290322;0.0290322 6.68214;0.027976;0.027976 6.73512;0.0269548;0.0269548 6.7881;0.0259677;0.0259677 6.84108;0.0250136;0.0250136 6.89406;0.0240918;0.0240918 6.94704;0.0232011;0.0232011 7.00002;0.0223408;0.0223408 7.053;0.0215099;0.0215099 7.10598;0.0207076;0.0207076 7.15896;0.019933;0.019933 7.21194;0.0191853;0.0191853 7.26492;0.0184636;0.0184636 7.3179;0.0177672;0.0177672 7.37088;0.0170953;0.0170953 7.42386;0.016447;0.016447 7.47684;0.0158218;0.0158218 7.52982;0.0152188;0.0152188 7.5828;0.0146373;0.0146373 7.63578;0.0140766;0.0140766 7.68876;0.0135362;0.0135362 7.74174;0.0130152;0.0130152 7.79472;0.0125131;0.0125131 7.8477;0.0120293;0.0120293 7.90068;0.0115631;0.0115631 7.95367;0.011114;0.011114 8.00665;0.0106814;0.0106814 8.05963;0.0102648;0.0102648 8.11261;0.00986349;0.00986349 8.16559;0.0094771;0.0094771 8.21857;0.00910508;0.00910508 8.27155;0.00874694;0.00874694 8.32453;0.00840219;0.00840219 8.37751;0.00807038;0.00807038 8.43049;0.00775105;0.00775105 8.48347;0.00744377;0.00744377 8.53645;0.00714812;0.00714812 8.58943;0.00686367;0.00686367 8.64241;0.00659005;0.00659005 8.69539;0.00632686;0.00632686 8.74837;0.00607373;0.00607373 8.80135;0.00583029;0.00583029 8.85433;0.00559621;0.00559621 8.90731;0.00537114;0.00537114 8.96029;0.00515476;0.00515476 9.01327;0.00494675;0.00494675 9.06625;0.00474681;0.00474681 9.11923;0.00455464;0.00455464 9.17221;0.00436995;0.00436995 9.22519;0.00419247;0.00419247 9.27817;0.00402193;0.00402193 9.33116;0.00385808;0.00385808 9.38414;0.00370067;0.00370067 9.43712;0.00354945;0.00354945 9.4901;0.0034042;0.0034042 9.54308;0.00326469;0.00326469 9.59606;0.0031307;0.0031307 9.64904;0.00300202;0.00300202 9.70202;0.00287847;0.00287847 9.755;0.00275983;0.00275983 openturns-1.9/lib/test/t_RandomMixture_grid2d.cxx000066400000000000000000000074101307543307100222520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomMixture for grid computatioons - 2D cases * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; PlatformInfo::SetNumericalPrecision( 6 ); OStream fullprint(std::cout); setRandomGenerator(); try { // 2D test using FFT // Collection of distributions Collection< Distribution > coll(0); coll.add(Uniform(0, 1)); coll.add(Uniform(0, 1)); coll.add(Uniform(0, 1)); // Set weights Matrix weights(2, 3); weights(0, 0) = 1.0; weights(0, 1) = -2.0; weights(0, 2) = 1.0; weights(1, 0) = 1.0; weights(1, 1) = 1.0; weights(1, 2) = -3.0; // Build the RandomMixture RandomMixture dist_2D(coll, weights); // Defining RandomMixture const UnsignedInteger N = 16; Indices points(2, N); Point mean(dist_2D.getMean()); Point sigma(dist_2D.getStandardDeviation()); Point xMin(mean - 2.9 * sigma); Point xMax(mean + 2.9 * sigma); Sample grid; fullprint << "distribution = " << dist_2D << std::endl; fullprint << "distribution = " << dist_2D.__str__() << std::endl; fullprint << "range = " << dist_2D.getRange() << std::endl; fullprint << "mean = " << dist_2D.getMean() << std::endl; fullprint << "cov = " << dist_2D.getCovariance() << std::endl; fullprint << "sigma = " << dist_2D.getStandardDeviation() << std::endl; fullprint << "xMin = " << xMin << std::endl; fullprint << "xMax = " << xMax << std::endl; Sample result(dist_2D.computePDF(xMin, xMax, points, grid)); for (UnsignedInteger i = 0; i < grid.getSize(); ++i) fullprint << grid[i][0] << ";" << grid[i][1] << ";" << result[i][0] << std::endl; // Defining new case, involving Normal distributions Collection< Distribution > collection(0); collection.add(Normal(2.0, 3.0)); collection.add(Normal(1.0, 4.0)); weights = Matrix(2, 2); weights(0, 0) = 4.0; weights(0, 1) = 1.0; weights(1, 0) = 2.0; weights(1, 1) = 1.4; // Build the RandomMixture RandomMixture distribution2D(collection, weights); fullprint << "distribution = " << distribution2D << std::endl; fullprint << "range = " << distribution2D.getRange() << std::endl; fullprint << "mean = " << distribution2D.getMean() << std::endl; fullprint << "cov = " << distribution2D.getCovariance() << std::endl; fullprint << "sigma = " << distribution2D.getStandardDeviation() << std::endl; xMin = distribution2D.getMean() - 2.9 * distribution2D.getStandardDeviation(); xMax = distribution2D.getMean() + 2.9 * distribution2D.getStandardDeviation(); result = distribution2D.computePDF(xMin, xMax, points, grid); for (UnsignedInteger i = 0; i < grid.getSize(); ++i) fullprint << grid[i][0] << ";" << grid[i][1] << ";" << result[i][0] << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomMixture_grid2d.expout000066400000000000000000000402231307543307100227730ustar00rootroot00000000000000distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[1,1,-2,1,1,-3] constant=class=Point name=Unnamed dimension=2 values=[0,0] distribution = RandomMixture( Uniform(a = 0, b = 1) - 2 * Uniform(a = 0, b = 1) + Uniform(a = 0, b = 1) Uniform(a = 0, b = 1) + Uniform(a = 0, b = 1) - 3 * Uniform(a = 0, b = 1) ) range = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-2,-3] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] mean = class=Point name=Unnamed dimension=2 values=[0,-0.5] cov = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,-0.333333,-0.333333,0.916667] sigma = class=Point name=Unnamed dimension=2 values=[0.707107,0.957427] xMin = class=Point name=Unnamed dimension=2 values=[-2.05061,-3.27654] xMax = class=Point name=Unnamed dimension=2 values=[2.05061,2.27654] -1.98874;-3.19276;0 -1.72357;-3.19276;0 -1.45841;-3.19276;0.000146538 -1.19324;-3.19276;0 -0.928078;-3.19276;1.06241e-05 -0.662913;-3.19276;9.41458e-05 -0.397748;-3.19276;0 -0.132583;-3.19276;3.00567e-07 0.132583;-3.19276;0.000108059 0.397748;-3.19276;0 0.662913;-3.19276;0.000108241 0.928078;-3.19276;7.32996e-05 1.19324;-3.19276;0 1.45841;-3.19276;0.000217764 1.72357;-3.19276;0 1.98874;-3.19276;0 -1.98874;-2.83373;0 -1.72357;-2.83373;3.42567e-05 -1.45841;-2.83373;0.000151601 -1.19324;-2.83373;0 -0.928078;-2.83373;0 -0.662913;-2.83373;0.000229642 -0.397748;-2.83373;2.38608e-05 -0.132583;-2.83373;0 0.132583;-2.83373;0.000451838 0.397748;-2.83373;0 0.662913;-2.83373;0.00243717 0.928078;-2.83373;0.0157264 1.19324;-2.83373;0.0003015 1.45841;-2.83373;0.000299886 1.72357;-2.83373;0 1.98874;-2.83373;0 -1.98874;-2.47469;0 -1.72357;-2.47469;0 -1.45841;-2.47469;3.93557e-05 -1.19324;-2.47469;0 -0.928078;-2.47469;0 -0.662913;-2.47469;0.000336767 -0.397748;-2.47469;0 -0.132583;-2.47469;0.000242879 0.132583;-2.47469;0.0112854 0.397748;-2.47469;0.0300339 0.662913;-2.47469;0.0475649 0.928078;-2.47469;0.0500053 1.19324;-2.47469;0.0278951 1.45841;-2.47469;0.00543859 1.72357;-2.47469;0 1.98874;-2.47469;0 -1.98874;-2.11566;0 -1.72357;-2.11566;3.3638e-05 -1.45841;-2.11566;8.59056e-05 -1.19324;-2.11566;0 -0.928078;-2.11566;0 -0.662913;-2.11566;0.00711879 -0.397748;-2.11566;0.0246735 -0.132583;-2.11566;0.0428329 0.132583;-2.11566;0.059896 0.397748;-2.11566;0.0781739 0.662913;-2.11566;0.0957582 0.928078;-2.11566;0.0791185 1.19324;-2.11566;0.0575503 1.45841;-2.11566;0.0353942 1.72357;-2.11566;0.0126813 1.98874;-2.11566;6.89195e-05 -1.98874;-1.75662;0 -1.72357;-1.75662;0 -1.45841;-1.75662;0 -1.19324;-1.75662;0 -0.928078;-1.75662;0.0236811 -0.662913;-1.75662;0.0551255 -0.397748;-1.75662;0.0726184 -0.132583;-1.75662;0.0903174 0.132583;-1.75662;0.107638 0.397748;-1.75662;0.125545 0.662913;-1.75662;0.132658 0.928078;-1.75662;0.109497 1.19324;-1.75662;0.0882011 1.45841;-1.75662;0.0647683 1.72357;-1.75662;0.0304928 1.98874;-1.75662;0 -1.98874;-1.39759;8.63618e-05 -1.72357;-1.39759;0.00014311 -1.45841;-1.39759;0.000195678 -1.19324;-1.39759;0.00251644 -0.928078;-1.39759;0.0412826 -0.662913;-1.39759;0.0801858 -0.397748;-1.39759;0.119099 -0.132583;-1.39759;0.138085 0.132583;-1.39759;0.155676 0.397748;-1.39759;0.174278 0.662913;-1.39759;0.161481 0.928078;-1.39759;0.130803 1.19324;-1.39759;0.0905772 1.45841;-1.39759;0.0504916 1.72357;-1.39759;0.0108231 1.98874;-1.39759;0.000220076 -1.98874;-1.03855;0 -1.72357;-1.03855;1.196e-05 -1.45841;-1.03855;0 -1.19324;-1.03855;0.0186422 -0.928078;-1.03855;0.0590174 -0.662913;-1.03855;0.0982213 -0.397748;-1.03855;0.138449 -0.132583;-1.03855;0.178748 0.132583;-1.03855;0.198861 0.397748;-1.03855;0.193374 0.662913;-1.03855;0.152225 0.928078;-1.03855;0.113235 1.19324;-1.03855;0.0730682 1.45841;-1.03855;0.0334829 1.72357;-1.03855;0 1.98874;-1.03855;0 -1.98874;-0.679518;0 -1.72357;-0.679518;0.000105729 -1.45841;-0.679518;0.000900094 -1.19324;-0.679518;0.0372093 -0.928078;-0.679518;0.0772166 -0.662913;-0.679518;0.116451 -0.397748;-0.679518;0.156759 -0.132583;-0.679518;0.196129 0.132583;-0.679518;0.200527 0.397748;-0.679518;0.174213 0.662913;-0.679518;0.133944 0.928078;-0.679518;0.0947725 1.19324;-0.679518;0.054602 1.45841;-0.679518;0.0145068 1.72357;-0.679518;0.000204619 1.98874;-0.679518;2.30298e-05 -1.98874;-0.320482;2.30298e-05 -1.72357;-0.320482;0.000204619 -1.45841;-0.320482;0.0145068 -1.19324;-0.320482;0.054602 -0.928078;-0.320482;0.0947725 -0.662913;-0.320482;0.133944 -0.397748;-0.320482;0.174213 -0.132583;-0.320482;0.200527 0.132583;-0.320482;0.196129 0.397748;-0.320482;0.156759 0.662913;-0.320482;0.116451 0.928078;-0.320482;0.0772166 1.19324;-0.320482;0.0372093 1.45841;-0.320482;0.000900094 1.72357;-0.320482;0.000105729 1.98874;-0.320482;0 -1.98874;0.0385527;0 -1.72357;0.0385527;0 -1.45841;0.0385527;0.0334829 -1.19324;0.0385527;0.0730682 -0.928078;0.0385527;0.113235 -0.662913;0.0385527;0.152225 -0.397748;0.0385527;0.193374 -0.132583;0.0385527;0.198861 0.132583;0.0385527;0.178748 0.397748;0.0385527;0.138449 0.662913;0.0385527;0.0982213 0.928078;0.0385527;0.0590174 1.19324;0.0385527;0.0186422 1.45841;0.0385527;0 1.72357;0.0385527;1.196e-05 1.98874;0.0385527;0 -1.98874;0.397588;0.000220076 -1.72357;0.397588;0.0108231 -1.45841;0.397588;0.0504916 -1.19324;0.397588;0.0905772 -0.928078;0.397588;0.130803 -0.662913;0.397588;0.161481 -0.397748;0.397588;0.174278 -0.132583;0.397588;0.155676 0.132583;0.397588;0.138085 0.397748;0.397588;0.119099 0.662913;0.397588;0.0801858 0.928078;0.397588;0.0412826 1.19324;0.397588;0.00251644 1.45841;0.397588;0.000195678 1.72357;0.397588;0.00014311 1.98874;0.397588;8.63618e-05 -1.98874;0.756623;0 -1.72357;0.756623;0.0304928 -1.45841;0.756623;0.0647683 -1.19324;0.756623;0.0882011 -0.928078;0.756623;0.109497 -0.662913;0.756623;0.132658 -0.397748;0.756623;0.125545 -0.132583;0.756623;0.107638 0.132583;0.756623;0.0903174 0.397748;0.756623;0.0726184 0.662913;0.756623;0.0551255 0.928078;0.756623;0.0236811 1.19324;0.756623;0 1.45841;0.756623;0 1.72357;0.756623;0 1.98874;0.756623;0 -1.98874;1.11566;6.89195e-05 -1.72357;1.11566;0.0126813 -1.45841;1.11566;0.0353942 -1.19324;1.11566;0.0575503 -0.928078;1.11566;0.0791185 -0.662913;1.11566;0.0957582 -0.397748;1.11566;0.0781739 -0.132583;1.11566;0.059896 0.132583;1.11566;0.0428329 0.397748;1.11566;0.0246735 0.662913;1.11566;0.00711879 0.928078;1.11566;0 1.19324;1.11566;0 1.45841;1.11566;8.59056e-05 1.72357;1.11566;3.3638e-05 1.98874;1.11566;0 -1.98874;1.47469;0 -1.72357;1.47469;0 -1.45841;1.47469;0.00543859 -1.19324;1.47469;0.0278951 -0.928078;1.47469;0.0500053 -0.662913;1.47469;0.0475649 -0.397748;1.47469;0.0300339 -0.132583;1.47469;0.0112854 0.132583;1.47469;0.000242879 0.397748;1.47469;0 0.662913;1.47469;0.000336767 0.928078;1.47469;0 1.19324;1.47469;0 1.45841;1.47469;3.93557e-05 1.72357;1.47469;0 1.98874;1.47469;0 -1.98874;1.83373;0 -1.72357;1.83373;0 -1.45841;1.83373;0.000299886 -1.19324;1.83373;0.0003015 -0.928078;1.83373;0.0157264 -0.662913;1.83373;0.00243717 -0.397748;1.83373;0 -0.132583;1.83373;0.000451838 0.132583;1.83373;0 0.397748;1.83373;2.38608e-05 0.662913;1.83373;0.000229642 0.928078;1.83373;0 1.19324;1.83373;0 1.45841;1.83373;0.000151601 1.72357;1.83373;3.42567e-05 1.98874;1.83373;0 -1.98874;2.19276;0 -1.72357;2.19276;0 -1.45841;2.19276;0.000217764 -1.19324;2.19276;0 -0.928078;2.19276;7.32996e-05 -0.662913;2.19276;0.000108241 -0.397748;2.19276;0 -0.132583;2.19276;0.000108059 0.132583;2.19276;3.00567e-07 0.397748;2.19276;0 0.662913;2.19276;9.41458e-05 0.928078;2.19276;1.06241e-05 1.19324;2.19276;0 1.45841;2.19276;0.000146538 1.72357;2.19276;0 1.98874;2.19276;0 distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,2,1,1.4] constant=class=Point name=Unnamed dimension=2 values=[0,0] range = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-113.41,-83.3473] upper bound=class=Point name=Unnamed dimension=2 values=[131.41,94.1473] finite lower bound=[0,0] finite upper bound=[0,0] mean = class=Point name=Unnamed dimension=2 values=[9,5.4] cov = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[160,94.4,94.4,67.36] sigma = class=Point name=Unnamed dimension=2 values=[12.6491,8.20731] -26.5756;-17.6831;5.84896e-05 -21.8322;-17.6831;6.77066e-05 -17.0888;-17.6831;3.47926e-05 -12.3454;-17.6831;7.93682e-06 -7.60196;-17.6831;8.03728e-07 -2.85854;-17.6831;3.61306e-08 1.88488;-17.6831;7.21014e-10 6.62829;-17.6831;6.38729e-12 11.3717;-17.6831;2.51184e-14 16.1151;-17.6831;4.38501e-17 20.8585;-17.6831;3.39823e-20 25.602;-17.6831;1.16907e-23 30.3454;-17.6831;1.78537e-27 35.0888;-17.6831;1.21037e-31 39.8322;-17.6831;3.64263e-36 44.5756;-17.6831;4.86647e-41 -26.5756;-14.6053;6.77066e-05 -21.8322;-14.6053;0.000164019 -17.0888;-14.6053;0.000176384 -12.3454;-14.6053;8.42033e-05 -7.60196;-14.6053;1.78444e-05 -2.85854;-14.6053;1.67872e-06 1.88488;-14.6053;7.01061e-08 6.62829;-14.6053;1.29969e-09 11.3717;-14.6053;1.06961e-11 16.1151;-14.6053;3.90762e-14 20.8585;-14.6053;6.33731e-17 25.602;-14.6053;4.56247e-20 30.3454;-14.6053;1.45814e-23 35.0888;-14.6053;2.06872e-27 39.8322;-14.6053;1.30289e-31 44.5756;-14.6053;3.64263e-36 -26.5756;-11.5276;3.47926e-05 -21.8322;-11.5276;0.000176384 -17.0888;-11.5276;0.00039695 -12.3454;-11.5276;0.000396565 -7.60196;-11.5276;0.000175872 -2.85854;-11.5276;3.46244e-05 1.88488;-11.5276;3.02602e-06 6.62829;-11.5276;1.17399e-07 11.3717;-11.5276;2.0219e-09 16.1151;-11.5276;1.54582e-11 20.8585;-11.5276;5.24638e-14 25.602;-11.5276;7.90434e-17 30.3454;-11.5276;5.28657e-20 35.0888;-11.5276;1.56959e-23 39.8322;-11.5276;2.06872e-27 44.5756;-11.5276;1.21037e-31 -26.5756;-8.44984;7.93682e-06 -21.8322;-8.44984;8.42033e-05 -17.0888;-8.44984;0.000396565 -12.3454;-8.44984;0.000829094 -7.60196;-8.44984;0.000769477 -2.85854;-8.44984;0.000317023 1.88488;-8.44984;5.79816e-05 6.62829;-8.44984;4.70752e-06 11.3717;-8.44984;1.69667e-07 16.1151;-8.44984;2.7146e-09 20.8585;-8.44984;1.92805e-11 25.602;-8.44984;6.07902e-14 30.3454;-8.44984;8.50849e-17 35.0888;-8.44984;5.28657e-20 39.8322;-8.44984;1.45814e-23 44.5756;-8.44984;1.78537e-27 -26.5756;-5.3721;8.03728e-07 -21.8322;-5.3721;1.78444e-05 -17.0888;-5.3721;0.000175872 -12.3454;-5.3721;0.000769477 -7.60196;-5.3721;0.00149451 -2.85854;-5.3721;0.00128856 1.88488;-5.3721;0.000493188 6.62829;-5.3721;8.37962e-05 11.3717;-5.3721;6.32033e-06 16.1151;-5.3721;2.11621e-07 20.8585;-5.3721;3.14543e-09 25.602;-5.3721;2.07542e-11 30.3454;-5.3721;6.07902e-14 35.0888;-5.3721;7.90434e-17 39.8322;-5.3721;4.56247e-20 44.5756;-5.3721;1.16907e-23 -26.5756;-2.29436;3.61306e-08 -21.8322;-2.29436;1.67872e-06 -17.0888;-2.29436;3.46244e-05 -12.3454;-2.29436;0.000317023 -7.60196;-2.29436;0.00128856 -2.85854;-2.29436;0.00232498 1.88488;-2.29436;0.00186225 6.62829;-2.29436;0.000662155 11.3717;-2.29436;0.000104516 16.1151;-2.29436;7.32341e-06 20.8585;-2.29436;2.27795e-07 25.602;-2.29436;3.14543e-09 30.3454;-2.29436;1.92805e-11 35.0888;-2.29436;5.24638e-14 39.8322;-2.29436;6.33731e-17 44.5756;-2.29436;3.39823e-20 -26.5756;0.783386;7.21014e-10 -21.8322;0.783386;7.01061e-08 -17.0888;0.783386;3.02602e-06 -12.3454;0.783386;5.79816e-05 -7.60196;0.783386;0.000493188 -2.85854;0.783386;0.00186225 1.88488;0.783386;0.00312152 6.62829;0.783386;0.00232273 11.3717;0.783386;0.000767243 16.1151;0.783386;0.000112505 20.8585;0.783386;7.32341e-06 25.602;0.783386;2.11621e-07 30.3454;0.783386;2.7146e-09 35.0888;0.783386;1.54582e-11 39.8322;0.783386;3.90762e-14 44.5756;0.783386;4.38501e-17 -26.5756;3.86113;6.38729e-12 -21.8322;3.86113;1.29969e-09 -17.0888;3.86113;1.17399e-07 -12.3454;3.86113;4.70752e-06 -7.60196;3.86113;8.37962e-05 -2.85854;3.86113;0.000662155 1.88488;3.86113;0.00232273 6.62829;3.86113;0.00361693 11.3717;3.86113;0.00250026 16.1151;3.86113;0.000767243 20.8585;3.86113;0.000104516 25.602;3.86113;6.32033e-06 30.3454;3.86113;1.69667e-07 35.0888;3.86113;2.0219e-09 39.8322;3.86113;1.06961e-11 44.5756;3.86113;2.51184e-14 -26.5756;6.93887;2.51184e-14 -21.8322;6.93887;1.06961e-11 -17.0888;6.93887;2.0219e-09 -12.3454;6.93887;1.69667e-07 -7.60196;6.93887;6.32033e-06 -2.85854;6.93887;0.000104516 1.88488;6.93887;0.000767243 6.62829;6.93887;0.00250026 11.3717;6.93887;0.00361693 16.1151;6.93887;0.00232273 20.8585;6.93887;0.000662155 25.602;6.93887;8.37962e-05 30.3454;6.93887;4.70752e-06 35.0888;6.93887;1.17399e-07 39.8322;6.93887;1.29969e-09 44.5756;6.93887;6.38729e-12 -26.5756;10.0166;4.38501e-17 -21.8322;10.0166;3.90762e-14 -17.0888;10.0166;1.54582e-11 -12.3454;10.0166;2.7146e-09 -7.60196;10.0166;2.11621e-07 -2.85854;10.0166;7.32341e-06 1.88488;10.0166;0.000112505 6.62829;10.0166;0.000767243 11.3717;10.0166;0.00232273 16.1151;10.0166;0.00312152 20.8585;10.0166;0.00186225 25.602;10.0166;0.000493188 30.3454;10.0166;5.79816e-05 35.0888;10.0166;3.02602e-06 39.8322;10.0166;7.01061e-08 44.5756;10.0166;7.21014e-10 -26.5756;13.0944;3.39823e-20 -21.8322;13.0944;6.33731e-17 -17.0888;13.0944;5.24638e-14 -12.3454;13.0944;1.92805e-11 -7.60196;13.0944;3.14543e-09 -2.85854;13.0944;2.27795e-07 1.88488;13.0944;7.32341e-06 6.62829;13.0944;0.000104516 11.3717;13.0944;0.000662155 16.1151;13.0944;0.00186225 20.8585;13.0944;0.00232498 25.602;13.0944;0.00128856 30.3454;13.0944;0.000317023 35.0888;13.0944;3.46244e-05 39.8322;13.0944;1.67872e-06 44.5756;13.0944;3.61306e-08 -26.5756;16.1721;1.16907e-23 -21.8322;16.1721;4.56247e-20 -17.0888;16.1721;7.90434e-17 -12.3454;16.1721;6.07902e-14 -7.60196;16.1721;2.07542e-11 -2.85854;16.1721;3.14543e-09 1.88488;16.1721;2.11621e-07 6.62829;16.1721;6.32033e-06 11.3717;16.1721;8.37962e-05 16.1151;16.1721;0.000493188 20.8585;16.1721;0.00128856 25.602;16.1721;0.00149451 30.3454;16.1721;0.000769477 35.0888;16.1721;0.000175872 39.8322;16.1721;1.78444e-05 44.5756;16.1721;8.03728e-07 -26.5756;19.2498;1.78537e-27 -21.8322;19.2498;1.45814e-23 -17.0888;19.2498;5.28657e-20 -12.3454;19.2498;8.50849e-17 -7.60196;19.2498;6.07902e-14 -2.85854;19.2498;1.92805e-11 1.88488;19.2498;2.7146e-09 6.62829;19.2498;1.69667e-07 11.3717;19.2498;4.70752e-06 16.1151;19.2498;5.79816e-05 20.8585;19.2498;0.000317023 25.602;19.2498;0.000769477 30.3454;19.2498;0.000829094 35.0888;19.2498;0.000396565 39.8322;19.2498;8.42033e-05 44.5756;19.2498;7.93682e-06 -26.5756;22.3276;1.21037e-31 -21.8322;22.3276;2.06872e-27 -17.0888;22.3276;1.56959e-23 -12.3454;22.3276;5.28657e-20 -7.60196;22.3276;7.90434e-17 -2.85854;22.3276;5.24638e-14 1.88488;22.3276;1.54582e-11 6.62829;22.3276;2.0219e-09 11.3717;22.3276;1.17399e-07 16.1151;22.3276;3.02602e-06 20.8585;22.3276;3.46244e-05 25.602;22.3276;0.000175872 30.3454;22.3276;0.000396565 35.0888;22.3276;0.00039695 39.8322;22.3276;0.000176384 44.5756;22.3276;3.47926e-05 -26.5756;25.4053;3.64263e-36 -21.8322;25.4053;1.30289e-31 -17.0888;25.4053;2.06872e-27 -12.3454;25.4053;1.45814e-23 -7.60196;25.4053;4.56247e-20 -2.85854;25.4053;6.33731e-17 1.88488;25.4053;3.90762e-14 6.62829;25.4053;1.06961e-11 11.3717;25.4053;1.29969e-09 16.1151;25.4053;7.01061e-08 20.8585;25.4053;1.67872e-06 25.602;25.4053;1.78444e-05 30.3454;25.4053;8.42033e-05 35.0888;25.4053;0.000176384 39.8322;25.4053;0.000164019 44.5756;25.4053;6.77066e-05 -26.5756;28.4831;4.86647e-41 -21.8322;28.4831;3.64263e-36 -17.0888;28.4831;1.21037e-31 -12.3454;28.4831;1.78537e-27 -7.60196;28.4831;1.16907e-23 -2.85854;28.4831;3.39823e-20 1.88488;28.4831;4.38501e-17 6.62829;28.4831;2.51184e-14 11.3717;28.4831;6.38729e-12 16.1151;28.4831;7.21014e-10 20.8585;28.4831;3.61306e-08 25.602;28.4831;8.03728e-07 30.3454;28.4831;7.93682e-06 35.0888;28.4831;3.47926e-05 39.8322;28.4831;6.77066e-05 44.5756;28.4831;5.84896e-05 openturns-1.9/lib/test/t_RandomMixture_grid3d.cxx000066400000000000000000000103401307543307100222470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomMixture for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; PlatformInfo::SetNumericalPrecision( 6 ); OStream fullprint(std::cout); setRandomGenerator(); try { // 1) Analytical test ==> No FFT Collection coll(3); coll[0] = Normal(0.0, 1.0); coll[1] = Uniform(2.0, 5.0); coll[2] = Uniform(2.0, 5.0); Matrix weights(3, 3); weights(0, 0) = 1.0; weights(0, 1) = 2.0; weights(0, 2) = 4.0; weights(1, 0) = 3.0; weights(1, 1) = 4.0; weights(1, 2) = 5.0; weights(2, 0) = 6.0; weights(2, 1) = 0.0; weights(2, 2) = 1.0; RandomMixture distribution(coll, weights); fullprint << "distribution=" << distribution << std::endl; fullprint << "distribution=" << distribution.__str__() << std::endl; fullprint << "range = " << distribution.getRange() << std::endl; fullprint << "mean = " << distribution.getMean() << std::endl; fullprint << "cov = " << distribution.getCovariance() << std::endl; fullprint << "sigma = " << distribution.getStandardDeviation() << std::endl; const UnsignedInteger N = 4; Indices points(3, N); Point mean(distribution.getMean()); Point sigma(distribution.getStandardDeviation()); Point xMin(mean - 2.9 * sigma); Point xMax(mean + 2.9 * sigma); Sample grid; Sample result(distribution.computePDF(xMin, xMax, points, grid)); for (UnsignedInteger i = 0; i < grid.getSize(); ++i) fullprint << grid[i][0] << ";" << grid[i][1] << ";" << grid[i][2] << ";" << result[i][0] << std::endl; // 2) 3D test using FFT Collection collection(0); collection.add(Normal(2.0, 1.0)); collection.add(Normal(-2.0, 1.0)); const Mixture mixture(collection); Collection collection3D(0); collection3D.add(Normal(0.0, 1.0)); collection3D.add(mixture); collection3D.add(Uniform(0, 1)); collection3D.add(Uniform(0, 1)); // Set weights weights = Matrix(3, 4); weights(0, 0) = 1.0; weights(0, 1) = -0.05; weights(0, 2) = 1.0; weights(0, 3) = -0.5; weights(1, 0) = 0.5; weights(1, 1) = 1.0; weights(1, 2) = -0.05; weights(1, 3) = 0.3; weights(2, 0) = -0.5; weights(2, 1) = -0.1; weights(2, 2) = 1.2; weights(2, 3) = -0.8; // Defining RandomMixture RandomMixture dist_3D(collection3D, weights); mean = dist_3D.getMean(); sigma = dist_3D.getStandardDeviation(); fullprint << "distribution = " << dist_3D << std::endl; fullprint << "distribution = " << dist_3D.__str__() << std::endl; fullprint << "range = " << dist_3D.getRange() << std::endl; fullprint << "mean = " << dist_3D.getMean() << std::endl; fullprint << "cov = " << dist_3D.getCovariance() << std::endl; fullprint << "sigma = " << dist_3D.getStandardDeviation() << std::endl; xMin = mean - 2.9 * sigma; xMax = mean + 2.9 * sigma; fullprint << "xMin = " << xMin << std::endl; fullprint << "xMax = " << xMax << std::endl; result = dist_3D.computePDF(xMin, xMax, points, grid); for (UnsignedInteger i = 0; i < grid.getSize(); ++i) fullprint << grid[i][0] << ";" << grid[i][1] << ";" << grid[i][2] << ";" << result[i][0] << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomMixture_grid3d.expout000066400000000000000000000176121307543307100230020ustar00rootroot00000000000000distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=2 b=5,class=Uniform name=Uniform dimension=1 a=2 b=5] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,3,6,2,4,0,4,5,1] constant=class=Point name=Unnamed dimension=3 values=[0,0,0] distribution=RandomMixture( Normal(mu = 0, sigma = 1) + 2 * Uniform(a = 2, b = 5) + 4 * Uniform(a = 2, b = 5) 3 * Normal(mu = 0, sigma = 1) + 4 * Uniform(a = 2, b = 5) + 5 * Uniform(a = 2, b = 5) 6 * Normal(mu = 0, sigma = 1) - 0 * Uniform(a = 2, b = 5) + Uniform(a = 2, b = 5) ) range = class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[4.34937,-4.95188,-43.9038] upper bound=class=Point name=Unnamed dimension=3 values=[37.6506,67.9519,50.9038] finite lower bound=[0,0,0] finite upper bound=[0,0,0] mean = class=Point name=Unnamed dimension=3 values=[21,31.5,3.5] cov = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[16,24,9,24,39.75,21.75,9,21.75,36.75] sigma = class=Point name=Unnamed dimension=3 values=[4,6.30476,6.06218] 12;17.3143;-10.1399;0 18;17.3143;-10.1399;0 24;17.3143;-10.1399;0 30;17.3143;-10.1399;0 12;26.7714;-10.1399;0 18;26.7714;-10.1399;0 24;26.7714;-10.1399;0 30;26.7714;-10.1399;0 12;36.2286;-10.1399;0 18;36.2286;-10.1399;0 24;36.2286;-10.1399;0 30;36.2286;-10.1399;0 12;45.6857;-10.1399;0 18;45.6857;-10.1399;0 24;45.6857;-10.1399;0 30;45.6857;-10.1399;0 12;17.3143;-1.04663;0.0010205 18;17.3143;-1.04663;0 24;17.3143;-1.04663;0 30;17.3143;-1.04663;0 12;26.7714;-1.04663;0 18;26.7714;-1.04663;0.000943767 24;26.7714;-1.04663;0 30;26.7714;-1.04663;0 12;36.2286;-1.04663;0 18;36.2286;-1.04663;0 24;36.2286;-1.04663;0 30;36.2286;-1.04663;0 12;45.6857;-1.04663;0 18;45.6857;-1.04663;0 24;45.6857;-1.04663;0 30;45.6857;-1.04663;0 12;17.3143;8.04663;0 18;17.3143;8.04663;0 24;17.3143;8.04663;0 30;17.3143;8.04663;0 12;26.7714;8.04663;0 18;26.7714;8.04663;0 24;26.7714;8.04663;0 30;26.7714;8.04663;0 12;36.2286;8.04663;0 18;36.2286;8.04663;0 24;36.2286;8.04663;0.000943767 30;36.2286;8.04663;0 12;45.6857;8.04663;0 18;45.6857;8.04663;0 24;45.6857;8.04663;0 30;45.6857;8.04663;0.0010205 12;17.3143;17.1399;0 18;17.3143;17.1399;0 24;17.3143;17.1399;0 30;17.3143;17.1399;0 12;26.7714;17.1399;0 18;26.7714;17.1399;0 24;26.7714;17.1399;0 30;26.7714;17.1399;0 12;36.2286;17.1399;0 18;36.2286;17.1399;0 24;36.2286;17.1399;0 30;36.2286;17.1399;0 12;45.6857;17.1399;0 18;45.6857;17.1399;0 24;45.6857;17.1399;0 30;45.6857;17.1399;0 distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Mixture name=Mixture dimension=1 distributionCollection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5],class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[1,0.5,-0.5,-0.05,1,-0.1,1,-0.05,1.2,-0.5,0.3,-0.8] constant=class=Point name=Unnamed dimension=3 values=[0,0,0] distribution = RandomMixture( Normal(mu = 0, sigma = 1) - 0.05 * Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) + Uniform(a = 0, b = 1) - 0.5 * Uniform(a = 0, b = 1) 0.5 * Normal(mu = 0, sigma = 1) + Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) - 0.05 * Uniform(a = 0, b = 1) + 0.3 * Uniform(a = 0, b = 1) -0.5 * Normal(mu = 0, sigma = 1) - 0.1 * Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) + 1.2 * Uniform(a = 0, b = 1) - 0.8 * Uniform(a = 0, b = 1) ) range = class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[-8.63316,-13.5259,-5.59038] upper bound=class=Point name=Unnamed dimension=3 values=[9.13316,13.7759,5.99038] finite lower bound=[1,1,1] finite upper bound=[1,1,1] mean = class=Point name=Unnamed dimension=3 values=[0.25,0.125,0.2] cov = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1.11667,0.233333,-0.341667,0.233333,5.25771,-0.775,-0.341667,-0.775,0.473333] sigma = class=Point name=Unnamed dimension=3 values=[1.05672,2.29297,0.687992] xMin = class=Point name=Unnamed dimension=3 values=[-2.8145,-6.52461,-1.79518] xMax = class=Point name=Unnamed dimension=3 values=[3.3145,6.77461,2.19518] -2.12763;-5.03418;-1.34798;5.16744e-05 -0.542543;-5.03418;-1.34798;0 1.04254;-5.03418;-1.34798;0 2.62763;-5.03418;-1.34798;0 -2.12763;-1.59473;-1.34798;3.04929e-05 -0.542543;-1.59473;-1.34798;0.000197115 1.04254;-1.59473;-1.34798;0.000104477 2.62763;-1.59473;-1.34798;0.000465749 -2.12763;1.84473;-1.34798;0 -0.542543;1.84473;-1.34798;0 1.04254;1.84473;-1.34798;0.00338254 2.62763;1.84473;-1.34798;0.000611914 -2.12763;5.28418;-1.34798;7.88272e-06 -0.542543;5.28418;-1.34798;0.00010546 1.04254;5.28418;-1.34798;0.000601069 2.62763;5.28418;-1.34798;0.000340826 -2.12763;-5.03418;-0.315994;7.55594e-06 -0.542543;-5.03418;-0.315994;0.000860551 1.04254;-5.03418;-0.315994;0.000762193 2.62763;-5.03418;-0.315994;0.000119309 -2.12763;-1.59473;-0.315994;2.65522e-05 -0.542543;-1.59473;-0.315994;0.00993354 1.04254;-1.59473;-0.315994;0.028094 2.62763;-1.59473;-0.315994;0.00430418 -2.12763;1.84473;-0.315994;0.000413983 -0.542543;1.84473;-0.315994;0.0293772 1.04254;1.84473;-0.315994;0.0270409 2.62763;1.84473;-0.315994;0.00194826 -2.12763;5.28418;-0.315994;0 -0.542543;5.28418;-0.315994;0 1.04254;5.28418;-0.315994;0.000107197 2.62763;5.28418;-0.315994;0 -2.12763;-5.03418;0.715994;0 -0.542543;-5.03418;0.715994;0.000107197 1.04254;-5.03418;0.715994;0 2.62763;-5.03418;0.715994;0 -2.12763;-1.59473;0.715994;0.00194826 -0.542543;-1.59473;0.715994;0.0270409 1.04254;-1.59473;0.715994;0.0293772 2.62763;-1.59473;0.715994;0.000413983 -2.12763;1.84473;0.715994;0.00430418 -0.542543;1.84473;0.715994;0.028094 1.04254;1.84473;0.715994;0.00993354 2.62763;1.84473;0.715994;2.65522e-05 -2.12763;5.28418;0.715994;0.000119309 -0.542543;5.28418;0.715994;0.000762193 1.04254;5.28418;0.715994;0.000860551 2.62763;5.28418;0.715994;7.55594e-06 -2.12763;-5.03418;1.74798;0.000340826 -0.542543;-5.03418;1.74798;0.000601069 1.04254;-5.03418;1.74798;0.00010546 2.62763;-5.03418;1.74798;7.88272e-06 -2.12763;-1.59473;1.74798;0.000611914 -0.542543;-1.59473;1.74798;0.00338254 1.04254;-1.59473;1.74798;0 2.62763;-1.59473;1.74798;0 -2.12763;1.84473;1.74798;0.000465749 -0.542543;1.84473;1.74798;0.000104477 1.04254;1.84473;1.74798;0.000197115 2.62763;1.84473;1.74798;3.04929e-05 -2.12763;5.28418;1.74798;0 -0.542543;5.28418;1.74798;0 1.04254;5.28418;1.74798;0 2.62763;5.28418;1.74798;5.16744e-05 openturns-1.9/lib/test/t_RandomMixture_std.cxx000066400000000000000000000354361307543307100217020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomMixture for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); ResourceMap::SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000); try { // Create a collection of test-cases and the associated references UnsignedInteger numberOfTests = 3; Collection< Collection< Distribution > > testCases(numberOfTests); Collection< Distribution > references(numberOfTests); testCases[0] = Collection(2); testCases[0][0] = Uniform(-1.0, 3.0); testCases[0][1] = Uniform(-1.0, 3.0); references[0] = Triangular(-2.0, 2.0, 6.0); testCases[1] = Collection(3); testCases[1][0] = Normal(); testCases[1][1] = Normal(1.0, 2.0); testCases[1][2] = Normal(-2.0, 2.0); references[1] = Normal(-1.0, 3.0); testCases[2] = Collection(3); testCases[2][0] = Exponential(); testCases[2][1] = Exponential(); testCases[2][2] = Exponential(); references[2] = Gamma(3.0, 1.0, 0.0); fullprint << "testCases=" << testCases << std::endl; fullprint << "references=" << references << std::endl; for (UnsignedInteger testIndex = 0; testIndex < testCases.getSize(); ++testIndex) { // Instanciate one distribution object RandomMixture distribution(testCases[testIndex]); distribution.setBlockMin(5); distribution.setBlockMax(20); Distribution distributionReference(references[testIndex]); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point(distribution.getDimension(), 0.5); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF(point); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (ref)=" << distributionReference.computeDDF(point) << std::endl; Scalar PDF = distribution.computePDF(point); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; fullprint << "pdf (ref)=" << distributionReference.computePDF(point) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf =" << CDF << std::endl; fullprint << "cdf (ref)=" << distributionReference.computeCDF(point) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile =" << quantile << std::endl; fullprint << "quantile (ref)=" << distributionReference.computeQuantile(0.95) << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean =" << mean << std::endl; fullprint << "mean (ref)=" << distributionReference.getMean() << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation =" << standardDeviation << std::endl; fullprint << "standard deviation (ref)=" << distributionReference.getStandardDeviation() << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness =" << skewness << std::endl; fullprint << "skewness (ref)=" << distributionReference.getSkewness() << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis =" << kurtosis << std::endl; fullprint << "kurtosis (ref)=" << distributionReference.getKurtosis() << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance =" << covariance << std::endl; fullprint << "covariance (ref)=" << distributionReference.getCovariance() << std::endl; RandomMixture::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; /* distribution.setIntegrationNodesNumber(6); for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl;*/ fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; fullprint << "blockMin=" << distribution.getBlockMin() << std::endl; fullprint << "blockMax=" << distribution.getBlockMax() << std::endl; fullprint << "maxSize=" << distribution.getMaxSize() << std::endl; fullprint << "alpha=" << distribution.getAlpha() << std::endl; fullprint << "beta=" << distribution.getBeta() << std::endl; } // Tests of the simplification mechanism Point weights(0); Collection< Distribution > coll(0); // coll.add(Dirac(0.5)); // weights.add(1.0); coll.add(Normal(1.0, 2.0)); weights.add(1.0); coll.add(Normal(2.0, 1.0)); weights.add(1.0); coll.add(Uniform(-2.0, 2.0)); weights.add(1.0); coll.add(Exponential(2.0, 0.0)); weights.add(1.0); // RandomMixture rm(coll, weights); // coll.add(rm); // weights.add(-2.5); coll.add(Gamma(3.0, 4.0, 0.0)); weights.add(1.0); RandomMixture distribution(coll, weights); fullprint << "distribution=" << distribution << std::endl; fullprint << "distribution=" << distribution.__str__() << std::endl; for (UnsignedInteger i = 0; i < 30; ++i) { Scalar x = -12.0 + i; fullprint << "pdf(" << x << ")=" << distribution.computePDF(x) << std::endl; } Graph graph(distribution.drawPDF()); Distribution ks(KernelSmoothing().build(distribution.getSample(1000000))); graph.add(ks.drawPDF()); Description colors(2); colors[0] = "red"; colors[1] = "green"; graph.setColors(colors); // graph.draw("validation"); // Test for the projection Collection collFactories(0); collFactories.add(UniformFactory()); collFactories.add(NormalFactory()); collFactories.add(TriangularFactory()); collFactories.add(ExponentialFactory()); collFactories.add(GammaFactory()); // collFactories.add(TrapezoidalFactory()); Point norms; Collection< Distribution > result(distribution.project(collFactories, norms)); fullprint << "projections=" << result << std::endl; fullprint << "norms=" << norms << std::endl; //------------------------------ Multivariate tests ------------------------------// // 2D RandomMixture Collection< Distribution > collection(0); collection.add(Normal(0.0, 1.0)); collection.add(Normal(0.0, 1.0)); collection.add(Normal(0.0, 1.0)); Matrix weightMatrix(2, 3); weightMatrix(0, 0) = 1.0; weightMatrix(0, 1) = -2.0; weightMatrix(0, 2) = 1.0; weightMatrix(1, 0) = 1.0; weightMatrix(1, 1) = 1.0; weightMatrix(1, 2) = -3.0; // Build the RandomMixture RandomMixture distribution2D(collection, weightMatrix); fullprint << "distribution = " << distribution2D << std::endl; fullprint << "range = " << distribution2D.getRange() << std::endl; fullprint << "mean = " << distribution2D.getMean() << std::endl; fullprint << "cov = " << distribution2D.getCovariance() << std::endl; fullprint << "sigma = " << distribution2D.getStandardDeviation() << std::endl; distribution2D.setBlockMin(3); distribution2D.setBlockMax(10); // Build a grid for validation const Scalar xMin = distribution2D.getRange().getLowerBound()[0]; const Scalar xMax = distribution2D.getRange().getUpperBound()[0]; const Scalar yMin = distribution2D.getRange().getLowerBound()[1]; const Scalar yMax = distribution2D.getRange().getUpperBound()[1]; // Number of points of discretization const UnsignedInteger nx = 4; const UnsignedInteger ny = 4; Point boxParameters(2); boxParameters[0] = nx; boxParameters[1] = ny; Box boxGrid(boxParameters); Sample grid(boxGrid.generate()); // scaling box grid Point scaleFactor(2); scaleFactor[0] = 0.25 * (xMax - xMin); scaleFactor[1] = 0.25 * (yMax - yMin); grid *= scaleFactor; //translating Point translateFactor(2); translateFactor[0] = distribution2D.getMean()[0]; translateFactor[1] = distribution2D.getMean()[1]; grid += translateFactor; // Compute PDF // parameters for theoritical PDF, obtained thanks to Maple const Scalar factor = sqrt(2.0) / (20 * M_PI); for (UnsignedInteger index = 0; index < grid.getSize(); ++ index) { const Point point(grid[index]); const Scalar PDF = distribution2D.computePDF(point); // Very small values are not very accurate on x86, skip them if (PDF < 1.e-12) continue; fullprint << "pdf =" << PDF << std::endl; const Scalar y = point[1]; const Scalar x = point[0]; fullprint << "pdf (ref)=" << factor * exp(-3.0 / 50.0 * y * y - 2.0 / 25 * x * y - 11.0 / 100 * x * x) << std::endl; } // 2D test, but too much CPU consuming Collection< Distribution > collUniforme(0); collUniforme.add(Uniform(0, 1)); collUniforme.add(Uniform(0, 1)); collUniforme.add(Uniform(0, 1)); // Build the RandomMixture RandomMixture dist_2D(collUniforme, weightMatrix); dist_2D.setBlockMin(3); dist_2D.setBlockMax(8); fullprint << "new distribution = " << dist_2D << std::endl; fullprint << "range = " << dist_2D.getRange() << std::endl; fullprint << "mean = " << dist_2D.getMean() << std::endl; fullprint << "cov = " << dist_2D.getCovariance() << std::endl; fullprint << "sigma = " << dist_2D.getStandardDeviation() << std::endl; // Discretization on 2D grid [mu, mu+\sigma] Sample newGrid(boxGrid.generate()); // scaling box grid newGrid *= dist_2D.getStandardDeviation(); //translating newGrid += dist_2D.getMean(); // Compute PDF for (UnsignedInteger index = 0; index < newGrid.getSize(); ++ index) { const Point point(newGrid[index]); const Scalar PDF = dist_2D.computePDF(point); fullprint << "pdf =" << PDF << std::endl; } // 3D test ResourceMap::SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 8290688); Collection collectionMixture(0); collectionMixture.add(Normal(2.0, 1.0)); collectionMixture.add(Normal(-2.0, 1.0)); const Mixture mixture(collectionMixture); Collection collection3D(0); collection3D.add(Normal(0.0, 1.0)); collection3D.add(mixture); collection3D.add(Uniform(0, 1)); collection3D.add(Uniform(0, 1)); // Set weights weightMatrix = Matrix(3, 4); weightMatrix(0, 0) = 1.0; weightMatrix(0, 1) = -0.05; weightMatrix(0, 2) = 1.0; weightMatrix(0, 3) = -0.5; weightMatrix(1, 0) = 0.5; weightMatrix(1, 1) = 1.0; weightMatrix(1, 2) = -0.05; weightMatrix(1, 3) = 0.3; weightMatrix(2, 0) = -0.5; weightMatrix(2, 1) = -0.1; weightMatrix(2, 2) = 1.2; weightMatrix(2, 3) = -0.8; RandomMixture dist_3D(collection3D, weightMatrix); dist_3D.setBlockMin(3); dist_3D.setBlockMax(6); fullprint << "3D distribution = " << dist_3D << std::endl; fullprint << "range = " << dist_3D.getRange() << std::endl; fullprint << "mean = " << dist_3D.getMean() << std::endl; fullprint << "cov = " << dist_3D.getCovariance() << std::endl; fullprint << "sigma = " << dist_3D.getStandardDeviation() << std::endl; // Total number of points (is (2+2)**3) // Test is CPU consuming // Number of points of discretization const UnsignedInteger N = 2; Point box3DParameters(3, N); Box box3D(box3DParameters); // Grid ==> (mu, mu+sigma) Sample grid3D(box3D.generate()); //scaling grid3D *= dist_3D.getStandardDeviation(); // translating grid3D += dist_3D.getMean(); for (UnsignedInteger index = 0; index < grid3D.getSize(); ++ index) { const Point point(grid3D[index]); const Scalar PDF = dist_3D.computePDF(point); fullprint << "pdf =" << PDF << std::endl; } // Test for ticket 882 (only one Dirac) // The segfault was triggered during the construction... RandomMixture mixture2(Collection(1, Dirac())); // After what it was impossible to draw the PDF or the CDF due to a lack of support computation Graph graphPDF(mixture2.drawPDF()); Graph graphCDF(mixture2.drawCDF()); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomMixture_std.expout000066400000000000000000000443121307543307100224150ustar00rootroot00000000000000testCases=[[class=Uniform name=Uniform dimension=1 a=-1 b=3,class=Uniform name=Uniform dimension=1 a=-1 b=3],[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]],[class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0]] references=[Triangular(a = -2, m = 2, b = 6),Normal(mu = -1, sigma = 3),Gamma(k = 3, lambda = 1, gamma = 0)] Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Triangular name=Triangular dimension=1 a=-2 m=2 b=6] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Triangular(a = -2, m = 2, b = 6)) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.5585] oneSample first=class=Point name=Unnamed dimension=1 values=[4.06345] last=class=Point name=Unnamed dimension=1 values=[1.68661] mean=class=Point name=Unnamed dimension=1 values=[2.01813] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.72012] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf =class=Point name=Unnamed dimension=1 values=[0.0625] ddf (ref)=class=Point name=Unnamed dimension=1 values=[0.0625] pdf =0.15625 pdf (FD)=0.15625 pdf (ref)=0.15625 cdf =0.195312 cdf (ref)=0.195312 characteristic function=(0.382574,0.595823) log characteristic function=(-0.345207,1) quantile =class=Point name=Unnamed dimension=1 values=[4.73509] quantile (ref)=class=Point name=Unnamed dimension=1 values=[4.73509] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[2] mean (ref)=class=Point name=Unnamed dimension=1 values=[2] standard deviation =class=Point name=Unnamed dimension=1 values=[1.63299] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[1.63299] skewness =class=Point name=Unnamed dimension=1 values=[0] skewness (ref)=class=Point name=Unnamed dimension=1 values=[0] kurtosis =class=Point name=Unnamed dimension=1 values=[2.4] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[2.4] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.66667] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.66667] parameters=[[Triangular_a : -2, Triangular_m : 2, Triangular_b : 6]] Standard representative=RandomMixture(Triangular(a = -2, m = 2, b = 6)) blockMin=5 blockMax=20 maxSize=4000000 alpha=5 beta=8.5 Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Normal(mu = -1, sigma = 3)) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[-2.3693] oneSample first=class=Point name=Unnamed dimension=1 values=[-3.73534] last=class=Point name=Unnamed dimension=1 values=[-1.06758] mean=class=Point name=Unnamed dimension=1 values=[-1.01449] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[8.84831] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.0195592] ddf (ref)=class=Point name=Unnamed dimension=1 values=[-0.0195592] pdf =0.117355 pdf (FD)=0.117355 pdf (ref)=0.117355 cdf =0.691462 cdf (ref)=0.691462 characteristic function=(0.284909,-0.155647) log characteristic function=(-1.125,-0.5) quantile =class=Point name=Unnamed dimension=1 values=[3.93456] quantile (ref)=class=Point name=Unnamed dimension=1 values=[3.93456] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[-1] mean (ref)=class=Point name=Unnamed dimension=1 values=[-1] standard deviation =class=Point name=Unnamed dimension=1 values=[3] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[3] skewness =class=Point name=Unnamed dimension=1 values=[0] skewness (ref)=class=Point name=Unnamed dimension=1 values=[0] kurtosis =class=Point name=Unnamed dimension=1 values=[3] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[3] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9] parameters=[[Normal_mean_0 : -1, Normal_standard_deviation_0 : 3]] Standard representative=RandomMixture(Normal(mu = -1, sigma = 3)) blockMin=5 blockMax=20 maxSize=4000000 alpha=5 beta=8.5 Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Gamma name=Gamma dimension=1 k=3 lambda=1 gamma=0] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Gamma(k = 3, lambda = 1, gamma = 0)) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.5317] oneSample first=class=Point name=Unnamed dimension=1 values=[1.68201] last=class=Point name=Unnamed dimension=1 values=[3.04448] mean=class=Point name=Unnamed dimension=1 values=[3.0296] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.09676] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf =class=Point name=Unnamed dimension=1 values=[0.227449] ddf (ref)=class=Point name=Unnamed dimension=1 values=[0.227449] pdf =0.0758163 pdf (FD)=0.0758163 pdf (ref)=0.0758163 cdf =0.0143877 cdf (ref)=0.0143877 characteristic function=(0.128,0.704) log characteristic function=(-0.334715,1.39094) quantile =class=Point name=Unnamed dimension=1 values=[6.29579] quantile (ref)=class=Point name=Unnamed dimension=1 values=[6.29579] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[3] mean (ref)=class=Point name=Unnamed dimension=1 values=[3] standard deviation =class=Point name=Unnamed dimension=1 values=[1.73205] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[1.73205] skewness =class=Point name=Unnamed dimension=1 values=[1.1547] skewness (ref)=class=Point name=Unnamed dimension=1 values=[1.1547] kurtosis =class=Point name=Unnamed dimension=1 values=[5] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[5] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] parameters=[[Gamma_k : 3, Gamma_lambda : 1, Gamma_gamma : 0]] Standard representative=RandomMixture(Gamma(k = 3, lambda = 1, gamma = 0)) blockMin=5 blockMax=20 maxSize=4000000 alpha=5 beta=8.5 distribution=class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[2.23607] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-2 b=2,class=Exponential name=Exponential dimension=1 lambda=2 gamma=0,class=Gamma name=Gamma dimension=1 k=3 lambda=4 gamma=0] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=4 values=[1,1,1,1] constant=class=Point name=Unnamed dimension=1 values=[0] distribution=RandomMixture(Normal(mu = 3, sigma = 2.23607) + Uniform(a = -2, b = 2) + Exponential(lambda = 2, gamma = 0) + Gamma(k = 3, lambda = 4, gamma = 0)) pdf(-12)=6.67892e-11 pdf(-11)=9.97295e-10 pdf(-10)=1.2309e-08 pdf(-9)=1.25705e-07 pdf(-8)=1.06351e-06 pdf(-7)=7.46467e-06 pdf(-6)=4.35423e-05 pdf(-5)=0.000211517 pdf(-4)=0.000857832 pdf(-3)=0.00291333 pdf(-2)=0.00831531 pdf(-1)=0.0200311 pdf(0)=0.0409224 pdf(1)=0.0712706 pdf(2)=0.106373 pdf(3)=0.136703 pdf(4)=0.15182 pdf(5)=0.146004 pdf(6)=0.121625 pdf(7)=0.0876629 pdf(8)=0.0545612 pdf(9)=0.0292632 pdf(10)=0.0135043 pdf(11)=0.00536 pdf(12)=0.00183186 pdf(13)=0.000540711 pdf(14)=0.000138571 pdf(15)=3.10776e-05 pdf(16)=6.16681e-06 pdf(17)=1.09834e-06 projections=[Normal(mu = 4.24818, sigma = 4.37758),Gamma(k = 9.27664, lambda = 0.695762, gamma = -9.08487),Triangular(a = -9.08487, m = 3.92974, b = 17.8997),Uniform(a = -9.08487, b = 17.8997),Exponential(lambda = 0.0750016, gamma = -9.08487)] norms=class=Point name=Unnamed dimension=5 values=[0.122372,0.13956,0.186643,0.296697,0.44332] distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[1,1,-2,1,1,-3] constant=class=Point name=Unnamed dimension=2 values=[0,0] range = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-20.8207,-28.1913] upper bound=class=Point name=Unnamed dimension=2 values=[20.8207,28.1913] finite lower bound=[1,1] finite upper bound=[1,1] mean = class=Point name=Unnamed dimension=2 values=[0,0] cov = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[6,-4,-4,11] sigma = class=Point name=Unnamed dimension=2 values=[2.44949,3.31662] pdf =0.0225079 pdf (ref)=0.0225079 pdf =0.0139715 pdf (ref)=0.0139715 pdf =0.00334166 pdf (ref)=0.00334166 pdf =0.000307961 pdf (ref)=0.000307961 pdf =1.09356e-05 pdf (ref)=1.09356e-05 pdf =1.49624e-07 pdf (ref)=1.49624e-07 pdf =0.0139715 pdf (ref)=0.0139715 pdf =0.00542272 pdf (ref)=0.00542272 pdf =0.000810972 pdf (ref)=0.000810972 pdf =4.67313e-05 pdf (ref)=4.67313e-05 pdf =1.03758e-06 pdf (ref)=1.03758e-06 pdf =8.8767e-09 pdf (ref)=8.8767e-09 pdf =0.00334166 pdf (ref)=0.00334166 pdf =0.000810972 pdf (ref)=0.000810972 pdf =7.58338e-05 pdf (ref)=7.58338e-05 pdf =2.73233e-06 pdf (ref)=2.73233e-06 pdf =3.7933e-08 pdf (ref)=3.7933e-08 pdf =2.02915e-10 pdf (ref)=2.02915e-10 pdf =0.000307961 pdf (ref)=0.000307961 pdf =4.67313e-05 pdf (ref)=4.67313e-05 pdf =2.73233e-06 pdf (ref)=2.73233e-06 pdf =6.15563e-08 pdf (ref)=6.15563e-08 pdf =5.34349e-10 pdf (ref)=5.34349e-10 pdf =1.78727e-12 pdf (ref)=1.78727e-12 pdf =1.09356e-05 pdf (ref)=1.09356e-05 pdf =1.03758e-06 pdf (ref)=1.03758e-06 pdf =3.7933e-08 pdf (ref)=3.7933e-08 pdf =5.34349e-10 pdf (ref)=5.34349e-10 pdf =2.90032e-12 pdf (ref)=2.90032e-12 pdf =1.49624e-07 pdf (ref)=1.49624e-07 pdf =8.8767e-09 pdf (ref)=8.8767e-09 pdf =2.02915e-10 pdf (ref)=2.02915e-10 pdf =1.78727e-12 pdf (ref)=1.78727e-12 new distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[1,1,-2,1,1,-3] constant=class=Point name=Unnamed dimension=2 values=[0,0] range = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-2,-3] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] mean = class=Point name=Unnamed dimension=2 values=[0,-0.5] cov = class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,-0.333333,-0.333333,0.916667] sigma = class=Point name=Unnamed dimension=2 values=[0.707107,0.957427] pdf =0.200008 pdf =0.199953 pdf =0.18257 pdf =0.161365 pdf =0.140147 pdf =0.11893 pdf =0.200012 pdf =0.194237 pdf =0.172999 pdf =0.151788 pdf =0.130572 pdf =0.109357 pdf =0.200032 pdf =0.184647 pdf =0.163427 pdf =0.142211 pdf =0.120996 pdf =0.099784 pdf =0.190057 pdf =0.175051 pdf =0.153858 pdf =0.132633 pdf =0.111423 pdf =0.0902108 pdf =0.164538 pdf =0.155122 pdf =0.144316 pdf =0.123061 pdf =0.101846 pdf =0.0806394 pdf =0.13901 pdf =0.129584 pdf =0.120154 pdf =0.110695 pdf =0.0922665 pdf =0.0710676 3D distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Mixture name=Mixture dimension=1 distributionCollection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5],class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[1,0.5,-0.5,-0.05,1,-0.1,1,-0.05,1.2,-0.5,0.3,-0.8] constant=class=Point name=Unnamed dimension=3 values=[0,0,0] range = class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[-8.63316,-13.5259,-5.59038] upper bound=class=Point name=Unnamed dimension=3 values=[9.13316,13.7759,5.99038] finite lower bound=[1,1,1] finite upper bound=[1,1,1] mean = class=Point name=Unnamed dimension=3 values=[0.25,0.125,0.2] cov = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1.11667,0.233333,-0.341667,0.233333,5.25771,-0.775,-0.341667,-0.775,0.473333] sigma = class=Point name=Unnamed dimension=3 values=[1.05672,2.29297,0.687992] pdf =0.0128814 pdf =0.0128655 pdf =0.0122294 pdf =0.00984818 pdf =0.0234842 pdf =0.020225 pdf =0.0150424 pdf =0.00949663 pdf =0.0432697 pdf =0.0385232 pdf =0.0281784 pdf =0.0180749 pdf =0.044762 pdf =0.0406428 pdf =0.0308978 pdf =0.0210441 pdf =0.0129975 pdf =0.0121201 pdf =0.00968603 pdf =0.0071769 pdf =0.0247237 pdf =0.0192342 pdf =0.0131031 pdf =0.00795833 pdf =0.0400697 pdf =0.0318194 pdf =0.0226119 pdf =0.0136759 pdf =0.0348167 pdf =0.0294142 pdf =0.0218493 pdf =0.0134862 pdf =0.011291 pdf =0.0091266 pdf =0.00689789 pdf =0.00454873 pdf =0.0207392 pdf =0.0154986 pdf =0.00997757 pdf =0.00537413 pdf =0.0295955 pdf =0.0230235 pdf =0.0149557 pdf =0.00725254 pdf =0.0229623 pdf =0.0183174 pdf =0.0117906 pdf =0.00422686 pdf =0.00832467 pdf =0.00628249 pdf =0.00406557 pdf =0.00186481 pdf =0.0152402 pdf =0.0104641 pdf =0.00556431 pdf =0.00128214 pdf =0.0189734 pdf =0.0129675 pdf =0.00534378 pdf =0.000220278 pdf =0.0123168 pdf =0.00770527 pdf =0.00160947 pdf =0 openturns-1.9/lib/test/t_RandomVector_composite.cxx000066400000000000000000000065361307543307100227160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of composite RandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a Function */ Description input_r(4); input_r[0] = "x1"; input_r[1] = "x2"; input_r[2] = "x3"; input_r[3] = "x4"; Description output_r(2); output_r[0] = "y1"; output_r[1] = "y2"; Description formula_r(2); formula_r[0] = "(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)"; formula_r[1] = "cos(x2*x2+x4)/(x1*x1+1+x3^4)"; Function myFunction(input_r, output_r, formula_r); /* We create a distribution */ UnsignedInteger dim = myFunction.getInputDimension(); CorrelationMatrix R(dim); for (UnsignedInteger i = 0; i < dim; i++) { R(i, i) = 1.0; for (UnsignedInteger j = 0; j < i; j++) { R(i, j) = Scalar(j + 1) / dim; } } Point m(dim, 1.0); Point s(dim, 2.0); Normal distribution(m, s, R); const Normal & ref_distribution(distribution); fullprint << "distribution = " << ref_distribution << std::endl; /* We create a distribution-based RandomVector */ RandomVector X(distribution); fullprint << "X=" << X << std::endl; fullprint << "is composite? " << X.isComposite() << std::endl; /* Check standard methods of class RandomVector */ fullprint << "X dimension=" << X.getDimension() << std::endl; fullprint << "X realization (first )=" << X.getRealization() << std::endl; fullprint << "X realization (second)=" << X.getRealization() << std::endl; fullprint << "X realization (third )=" << X.getRealization() << std::endl; fullprint << "X sample =" << X.getSample(5) << std::endl; /* We create a composite RandomVector Y from X and myFunction */ RandomVector Y(CompositeRandomVector(myFunction, X)); fullprint << "Y=" << Y << std::endl; fullprint << "is composite? " << Y.isComposite() << std::endl; /* Check standard methods of class RandomVector */ fullprint << "Y dimension=" << Y.getDimension() << std::endl; fullprint << "Y realization (first )=" << Y.getRealization() << std::endl; fullprint << "Y realization (second)=" << Y.getRealization() << std::endl; fullprint << "Y realization (third )=" << Y.getRealization() << std::endl; fullprint << "Y sample =" << Y.getSample(5) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomVector_composite.expout000066400000000000000000000063301307543307100234300ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.25,0.25,0.25,0.25,1,0.5,0.5,0.25,0.5,1,0.75,0.25,0.5,0.75,1] X=class=RandomVector implementation=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.25,0.25,0.25,0.25,1,0.5,0.5,0.25,0.5,1,0.75,0.25,0.5,0.75,1] is composite? false X dimension=4 X realization (first )=class=Point name=Unnamed dimension=4 values=[2.2164,-1.14783,-0.590751,1.21787] X realization (second)=class=Point name=Unnamed dimension=4 values=[-3.36277,0.587161,-0.382381,1.67616] X realization (third )=class=Point name=Unnamed dimension=4 values=[2.62134,2.94127,1.31624,1.92717] X sample =class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=4 description=[X0,X1,X2,X3] data=[[-3.58012,-2.62933,-3.55105,-2.90207],[2.99159,1.22785,0.412411,1.31332],[1.64585,2.02472,-0.213594,-0.710983],[1.94723,0.993783,1.72527,3.81586],[1.14041,-0.478006,-0.906783,-0.796208]] Y=class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.25,0.25,0.25,0.25,1,0.5,0.5,0.25,0.5,1,0.75,0.25,0.5,0.75,1] is composite? true Y dimension=2 Y realization (first )=class=Point name=Unnamed dimension=2 values=[0.0356538,-0.00835553] Y realization (second)=class=Point name=Unnamed dimension=2 values=[0.282949,-0.020219] Y realization (third )=class=Point name=Unnamed dimension=2 values=[2.80213,0.196401] Y sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 description=[y1,y2] data=[[0.428415,-0.0602613],[0.786432,-0.00339685],[-1.74309,-0.0198032],[2.35963,0.0128567],[0.980094,-0.02506]] openturns-1.9/lib/test/t_RandomVector_conditional.cxx000066400000000000000000000051461307543307100232130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of distribution-based conditional RandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a distribution */ Normal distribution(0.0, 1.0); fullprint << "distribution = " << distribution << std::endl; // Create a collection of distribution ComposedDistribution::DistributionCollection aCollection; aCollection.add(Normal(0.0, 1.0)); aCollection.add(Uniform(1.0, 1.5)); ComposedDistribution distributionParameters(aCollection); RandomVector randomParameters(distributionParameters); fullprint << "random parameters=" << randomParameters << std::endl; /* We create a distribution-based RandomVector */ ConditionalRandomVector vect(distribution, randomParameters); fullprint << "vect=" << vect << std::endl; /* Check standard methods of class RandomVector */ fullprint << "vect dimension=" << vect.getDimension() << std::endl; Point p; Point r(vect.getRealization(p)); fullprint << "vect realization=" << r << std::endl; fullprint << "parameters value=" << p << std::endl; distribution.setParameter(p); RandomGenerator::SetSeed(0); /* Generate a parameter set to put the random generator into the proper state */ randomParameters.getRealization(); /* The realization of the distribution should be equal to the realization of the conditional vector */ fullprint << "dist realization=" << distribution.getRealization() << std::endl; fullprint << "vect sample =" << vect.getSample(5) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomVector_conditional.expout000066400000000000000000000042421307543307100237310ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] random parameters=class=RandomVector implementation=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=1.5 vect=class=ConditionalRandomVector distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] random parameters=class=RandomVector implementation=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=1.5 vect dimension=1 vect realization=class=Point name=Unnamed dimension=1 values=[-0.0949911] parameters value=class=Point name=Unnamed dimension=2 values=[0.608202,1.06764] dist realization=class=Point name=Unnamed dimension=1 values=[-0.0949911] vect sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[X0] data=[[-0.807169],[1.37866],[0.691015],[-2.39773],[-1.04373]] openturns-1.9/lib/test/t_RandomVector_constant.cxx000066400000000000000000000053211307543307100225340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of 'constant' RandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical point of dimension 4 */ Point point(4); const Point & ref_point(point); point[0] = 101.0; point[1] = 102.0; point[2] = 103.0; point[3] = 104.0; fullprint << "point = " << ref_point << std::endl; /* We create a 'constant' RandomVector from the Point */ RandomVector vect = ConstantRandomVector(point); fullprint << "vect=" << vect << std::endl; /* Check standard methods of class RandomVector */ fullprint << "vect dimension=" << vect.getDimension() << std::endl; fullprint << "vect realization (first )=" << vect.getRealization() << std::endl; fullprint << "vect realization (second)=" << vect.getRealization() << std::endl; fullprint << "vect realization (third )=" << vect.getRealization() << std::endl; fullprint << "vect sample =" << vect.getSample(5) << std::endl; /* We create a numerical point of dimension 4 */ PointWithDescription pointWithDescription(4); pointWithDescription[0] = 101.0; pointWithDescription[1] = 102.0; pointWithDescription[2] = 103.0; pointWithDescription[3] = 104.0; Description description(4); description[0] = "x0"; description[1] = "x1"; description[2] = "x2"; description[3] = "x3"; pointWithDescription.setDescription(description); fullprint << "point with description= " << pointWithDescription << std::endl; /* We create a 'constant' RandomVector from the Point */ RandomVector vect2 = ConstantRandomVector(pointWithDescription); fullprint << "vect2=" << vect2 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomVector_constant.expout000066400000000000000000000020131307543307100232510ustar00rootroot00000000000000point = class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect=class=RandomVector implementation=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect dimension=4 vect realization (first )=class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect realization (second)=class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect realization (third )=class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=4 description=[x0,x1,x2,x3] data=[[101,102,103,104],[101,102,103,104],[101,102,103,104],[101,102,103,104],[101,102,103,104]] point with description= class=PointWithDescription name=Unnamed dimension=4 description=[x0,x1,x2,x3] values=[101,102,103,104] vect2=class=RandomVector implementation=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,102,103,104] openturns-1.9/lib/test/t_RandomVector_distribution.cxx000066400000000000000000000042011307543307100234160ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of distribution-based RandomVector class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a distribution */ Point meanPoint(1); meanPoint[0] = 1.0; Point sigma(1); sigma[0] = 1.0; CorrelationMatrix R(1); R(0, 0) = 1.0; Normal distribution(meanPoint, sigma, R); const Normal & ref_distribution(distribution); fullprint << "distribution = " << ref_distribution << std::endl; /* We create a distribution-based RandomVector */ RandomVector vect = UsualRandomVector(distribution); fullprint << "vect=" << vect << std::endl; /* Check standard methods of class RandomVector */ fullprint << "vect dimension=" << vect.getDimension() << std::endl; fullprint << "vect realization (first )=" << vect.getRealization() << std::endl; fullprint << "vect realization (second)=" << vect.getRealization() << std::endl; fullprint << "vect realization (third )=" << vect.getRealization() << std::endl; fullprint << "vect sample =" << vect.getSample(5) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomVector_distribution.expout000066400000000000000000000021131307543307100241400ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] vect=class=RandomVector implementation=class=UsualRandomVector distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] vect dimension=1 vect realization (first )=class=Point name=Unnamed dimension=1 values=[1.6082] vect realization (second)=class=Point name=Unnamed dimension=1 values=[-0.266173] vect realization (third )=class=Point name=Unnamed dimension=1 values=[0.561734] vect sample =class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[2.20548],[-1.18139],[1.35004],[0.644993],[2.43725]] openturns-1.9/lib/test/t_RandomWalkMetropolisHastings_regression.cxx000066400000000000000000000142101307543307100262730ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomWalkMetropolisHastings * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef ComposedDistribution::DistributionCollection DistributionCollection; typedef RandomWalkMetropolisHastings::CalibrationStrategyCollection CalibrationStrategyCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // observations UnsignedInteger chainDim = 3; UnsignedInteger obsDim = 1; //UnsignedInteger outputDim = 1; UnsignedInteger obsSize = 10; Sample y_obs(obsSize, obsDim); y_obs[0][0] = -9.50794871493506; y_obs[1][0] = -3.83296694500105; y_obs[2][0] = -2.44545713047953; y_obs[3][0] = 0.0803625289211318; y_obs[4][0] = 1.01898069723583; y_obs[5][0] = 0.661725805623086; y_obs[6][0] = -1.57581204592385; y_obs[7][0] = -2.95308465670895; y_obs[8][0] = -8.8878164296758; y_obs[9][0] = -13.0812290405651; std::cout << "y_obs=" << y_obs << std::endl; Sample p(obsSize, chainDim); for (UnsignedInteger i = 0; i < obsSize; ++ i) { for (UnsignedInteger j = 0; j < chainDim; ++ j) { p[i][j] = pow(-2 + 5.*i / 9., 1.0 * j); } } std::cout << "p=" << p << std::endl; Description fullVariables(0); fullVariables.add("p1"); fullVariables.add("p2"); fullVariables.add("p3"); fullVariables.add("x1"); fullVariables.add("x2"); fullVariables.add("x3"); Description formulas(0); formulas.add("p1*x1+p2*x2+p3*x3"); formulas.add("1.0"); SymbolicFunction fullModel(fullVariables, formulas); Indices parametersPosition(chainDim); parametersPosition.fill(); Point parametersValue(parametersPosition.getSize(), 0.0); ParametricFunction model(fullModel, parametersPosition, parametersValue); // calibration parameters CalibrationStrategyCollection calibrationColl(chainDim); // proposal distribution DistributionCollection proposalColl; for (UnsignedInteger i = 0; i < chainDim; ++ i) { proposalColl.add(Uniform(-1.0, 1.0)); } // prior distribution Point sigma0(chainDim, 10.0);// sigma0= (10.,10.,10.) CorrelationMatrix Q0(chainDim);// precision matrix CorrelationMatrix Q0_inv(chainDim);// covariance matrix for ( UnsignedInteger i = 0; i < chainDim; ++ i ) { Q0_inv (i, i) = sigma0[i] * sigma0[i]; Q0(i, i) = 1.0 / Q0_inv (i, i); } std::cout << "Q0=" << Q0 << std::endl; Point mu0(chainDim, 0.0);// mu0 = (0.0, 0.0, 0.0) Distribution prior(Normal( mu0, Q0_inv ) );// x0 ~ N(mu0, sigma0) std::cout << "x~" << prior << std::endl; // start from te mean x0=(0.0, 0.0, 0.0) std::cout << "x0=" << mu0 << std::endl; // conditional distribution y~N(z, 1.0) Distribution conditional = Normal(); std::cout << "y~" << conditional << std::endl; // create a metropolis-hastings sampler // prior=a distribution of dimension chainDim, the a priori distribution of the parameter // conditional=a distribution of dimension 1, the observation error on the output // model=the link between the parameter and the output // y_obs=noisy observations of the output // mu0=starting point of the chain // proposalColl= RandomWalkMetropolisHastings sampler(prior, conditional, model, p, y_obs, mu0, proposalColl); sampler.setVerbose(true); sampler.setThinning(4); sampler.setBurnIn(2000); sampler.setCalibrationStrategyPerComponent(calibrationColl); // get a realization Point realization(sampler.getRealization()); std::cout << "y1=" << realization << std::endl; // try to generate a sample UnsignedInteger sampleSize = 1000; Sample sample(sampler.getSample(sampleSize)); Point x_mu(sample.computeMean()); Point x_sigma(sample.computeStandardDeviationPerComponent()); // print acceptance rate std::cout << "acceptance rate=" << sampler.getAcceptanceRate() << std::endl; // compute covariance CovarianceMatrix x_cov(sample.computeCovariance()); Matrix P(obsSize, chainDim); for (UnsignedInteger i = 0; i < obsSize; ++ i) { for (UnsignedInteger j = 0; j < chainDim; ++ j) { P(i, j) = p[i][j]; } } Matrix Qn(P.transpose()*P + Q0); SquareMatrix Qn_inv(chainDim); for ( UnsignedInteger j = 0; j < chainDim; ++j ) { Point I_j(chainDim); I_j[j] = 1.0; Point Qn_inv_j(Qn.solveLinearSystem(I_j)); for ( UnsignedInteger i = 0; i < chainDim; ++i ) { Qn_inv(i, j) = Qn_inv_j[i]; } } Point sigma_exp(chainDim); for ( UnsignedInteger i = 0; i < chainDim; ++i ) { sigma_exp[i] = sqrt(Qn_inv(i, i)); } Point y_vec(obsSize); for ( UnsignedInteger i = 0; i < obsSize; ++i ) { y_vec[i] = y_obs[i][0]; } Point x_emp(Qn.solveLinearSystem(P.transpose()*y_vec)); Point mu_exp(Qn.solveLinearSystem(P.transpose()*P * x_emp + Q0 * mu0)); std::cout << "sample mean=" << x_mu << std::endl; std::cout << "expected mean=" << mu_exp << std::endl; std::cout << "covariance=" << x_cov << std::endl; std::cout << "expected covariance=" << Qn_inv << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomWalkMetropolisHastings_regression.expout000066400000000000000000000023051307543307100270170ustar00rootroot00000000000000y_obs=0 : [ -9.50795 ] 1 : [ -3.83297 ] 2 : [ -2.44546 ] 3 : [ 0.0803625 ] 4 : [ 1.01898 ] 5 : [ 0.661726 ] 6 : [ -1.57581 ] 7 : [ -2.95308 ] 8 : [ -8.88782 ] 9 : [ -13.0812 ] p=0 : [ 1 -2 4 ] 1 : [ 1 -1.44444 2.08642 ] 2 : [ 1 -0.888889 0.790123 ] 3 : [ 1 -0.333333 0.111111 ] 4 : [ 1 0.222222 0.0493827 ] 5 : [ 1 0.777778 0.604938 ] 6 : [ 1 1.33333 1.77778 ] 7 : [ 1 1.88889 3.5679 ] 8 : [ 1 2.44444 5.97531 ] 9 : [ 1 3 9 ] Q0=[[ 0.01 0 0 ] [ 0 0.01 0 ] [ 0 0 0.01 ]] x~Normal(mu = [0,0,0], sigma = [10,10,10], R = [[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]]) x0=[0,0,0] y~Normal(mu = 0, sigma = 1) y1=[0.0455282,0.975733,-1.85454] acceptance rate=[0.444204,0.288807,0.141572] sample mean=[0.85929,1.12594,-1.95492] expected mean=[0.8007,1.11169,-1.93487] covariance=[[ 0.246193 0.0338515 -0.0552038 ] [ 0.0338515 0.0669395 -0.0238048 ] [ -0.0552038 -0.0238048 0.0240791 ]] expected covariance=[[ 0.214167 0.0259381 -0.0455426 ] [ 0.0259381 0.0591089 -0.0198543 ] [ -0.0455426 -0.0198543 0.0198531 ]] openturns-1.9/lib/test/t_RandomWalkMetropolisHastings_std.cxx000066400000000000000000000106751307543307100247200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomWalkMetropolisHastings * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef ComposedDistribution::DistributionCollection DistributionCollection; typedef RandomWalkMetropolisHastings::CalibrationStrategyCollection CalibrationStrategyCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // this analytical example is taken from "Bayesian Modeling Using WinBUGS" - Ioannis Ntzoufras // 1.5.3: Inference for the mean or normal data with known variance // Variable of interest: Y=N(mu, sigma) // Prior for mu: Normal(mu0, sigma0), sigma is known // Posterior for mu: E(mu|y)=w*y_mean+(1-w)*mu0, and Var(mu|y)=w*(sigmay^2)/n // => weighted average of the prior an the sample mean // with w = n*sigma0^2 / (n*sigma0^2 + sigma^2) // observations UnsignedInteger size = 10; Normal realDist(31.0, 1.2); Sample data(realDist.getSample(size)); // calibration parameters CalibrationStrategyCollection calibrationColl(2); // proposal distribution DistributionCollection proposalColl; Uniform mean_proposal(-2.0, 2.0); Uniform std_proposal(-2.0, 2.0); proposalColl.add(mean_proposal); proposalColl.add(std_proposal); // prior distribution Scalar mu0 = 25.0; Point sigma0s; sigma0s.add(0.1); sigma0s.add(1.0); //sigma0s.add(2.0); // play with the variance of the prior: // if the prior variance is low (information concerning the mu parameter is strong) // then the posterior mean will be equal to the prior mean // if large, the the posterior distribution is equivalent to the distribution of the sample mean for ( UnsignedInteger i = 0; i < sigma0s.getDimension(); ++ i ) { Scalar sigma0 = sigma0s[i]; Normal mean_prior(mu0, sigma0); Dirac std_prior(2.0); // standard dev is known DistributionCollection priorColl; priorColl.add(mean_prior); priorColl.add(std_prior); Distribution prior = ComposedDistribution( priorColl ); // choose the initial state within the prior Point initialState(prior.getRealization()); // conditional distribution Distribution conditional = Normal(); // create a metropolis-hastings sampler RandomWalkMetropolisHastings sampler(prior, conditional, data, initialState, proposalColl); sampler.setVerbose(true); sampler.setThinning(2); sampler.setBurnIn(500); sampler.setCalibrationStrategyPerComponent(calibrationColl); Scalar sigmay = ConditionalDistribution(Normal(), prior).getStandardDeviation()[0]; Scalar w = size * pow(sigma0, 2.) / (size * pow(sigma0, 2.) + pow(sigmay, 2.0)); std::cout << "prior variance=" << pow(sigma0, 2.) << std::endl; Point realization(sampler.getRealization()); std::cout << " realization=" << realization << std::endl; std::cout << " w=" << w << std::endl; // the posterior for mu is analytical std::cout << " expected posterior ~N(" << w*data.computeMean()[0] + (1. - w)*mu0 << ", " << sqrt(w * pow(sigmay, 2.0) / size) << ")" << std::endl; // try to generate a sample Sample sample(sampler.getSample(50)); std::cout << " obtained posterior ~N(" << sample.computeMean()[0] << ", " << sample.computeStandardDeviationPerComponent()[0] << ")" << std::endl; std::cout << " acceptance rate=" << sampler.getAcceptanceRate() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomWalkMetropolisHastings_std.expout000066400000000000000000000005321307543307100254310ustar00rootroot00000000000000prior variance=0.01 realization=[25.2184,2] w=0.0243309 expected posterior ~N(25.1488, 0.098776) obtained posterior ~N(25.2096, 0.1176) acceptance rate=[0.0946844,0] prior variance=1 realization=[29.8912,2] w=0.666667 expected posterior ~N(29.0771, 0.57735) obtained posterior ~N(29.4172, 0.4689) acceptance rate=[0.420266,0] openturns-1.9/lib/test/t_RandomWalk_std.cxx000066400000000000000000000042151307543307100211320ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RandomWalk * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { const Scalar Tmin = 0.0; const Scalar deltaT = 0.1; const UnsignedInteger N = 11; /* Initialization of the RegularGrid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, N); /* Distribution choice */ Distribution dist = Uniform(); fullprint << "dist = " << dist << std::endl; Point origin(dist.getDimension()); Process process = RandomWalk(origin, dist); /* Setting the timeGrid */ process.setTimeGrid(timeGrid); /* Print of the process */ fullprint << "process = " << process << std::endl; /* Initialization of the TimeSeries */ TimeSeries timeSerie = process.getRealization(); /* Full prints */ fullprint << "timeSerie = " << timeSerie << std::endl; // Some steps further UnsignedInteger stepNumber = 4; fullprint << "One future=" << process.getFuture(stepNumber) << std::endl; UnsignedInteger size = 3; fullprint << "Some futures=" << process.getFuture(stepNumber, size) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomWalk_std.expout000066400000000000000000000041431307543307100216540ustar00rootroot00000000000000dist = class=Uniform name=Uniform dimension=1 a=-1 b=1 process = class=Process implementation=class=RandomWalk, origin=class=Point name=Unnamed dimension=1 values=[0], distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 timeSerie = class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[X0] data=[[0],[0.259753],[1.02536],[0.295916],[-0.639078],[-0.944964],[-0.00611811],[0.835241],[0.841321],[-0.0322665],[-0.446753]] start=0 timeStep=0.1 n=11 One future=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[-0.0179887],[-0.251265],[-0.50373],[-0.0291936]] start=1.1 timeStep=0.1 n=4 Some futures=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=[class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.320254],[-0.0897576],[0.767263],[1.40888]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[-0.0776029],[0.578452],[0.298056],[1.20755]],class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[-0.269522],[-0.905444],[-1.73387],[-1.41242]]] openturns-1.9/lib/test/t_RandomizedLHS_std.cxx000066400000000000000000000046561307543307100215470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of LHS class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; SymbolicFunction myFunction(input, Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ RandomizedLHS myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); myAlgo.setMaximumCoefficientOfVariation(0.1); fullprint << "RandomizedLHS=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ fullprint << "RandomizedLHS result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomizedLHS_std.expout000066400000000000000000000030041307543307100222530ustar00rootroot00000000000000RandomizedLHS=class=RandomizedLHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y0] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 RandomizedLHS result=probabilityEstimate=1.360294e-01 varianceEstimate=1.844504e-04 standard deviation=1.36e-02 coefficient of variation=9.98e-02 confidenceLength(0.95)=5.32e-02 outerSampling=204 blockSize=4 openturns-1.9/lib/test/t_RandomizedQuasiMonteCarlo_std.cxx000066400000000000000000000047541307543307100241660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of RandomizedQuasiMonteCarlo class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a Monte Carlo algorithm */ RandomizedQuasiMonteCarlo myAlgo(myEvent); myAlgo.setMaximumOuterSampling(250); myAlgo.setBlockSize(4); fullprint << "RandomizedQuasiMonteCarlo=" << myAlgo << std::endl; /* Perform the simulation */ myAlgo.run(); /* Stream out the result, though confidence length is not relevant*/ fullprint << "RandomizedQuasiMonteCarlo result=" << myAlgo.getResult() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RandomizedQuasiMonteCarlo_std.expout000066400000000000000000000030441307543307100246770ustar00rootroot00000000000000RandomizedQuasiMonteCarlo=class=RandomizedQuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 RandomizedQuasiMonteCarlo result=probabilityEstimate=1.511299e-01 varianceEstimate=2.275829e-04 standard deviation=1.51e-02 coefficient of variation=9.98e-02 confidenceLength(0.95)=5.91e-02 outerSampling=177 blockSize=4 openturns-1.9/lib/test/t_RayleighFactory_std.cxx000066400000000000000000000055471307543307100222000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Rayleigh for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Rayleigh distribution(2.5, -1.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); RayleighFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Rayleigh estimatedRayleigh(factory.buildAsRayleigh(sample)); fullprint << "Rayleigh =" << distribution << std::endl; fullprint << "Estimated rayleigh=" << estimatedRayleigh << std::endl; estimatedRayleigh = factory.buildAsRayleigh(); fullprint << "Default rayleigh=" << estimatedRayleigh << std::endl; estimatedRayleigh = factory.buildAsRayleigh(distribution.getParameter()); fullprint << "Rayleigh from parameters=" << estimatedRayleigh << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RayleighFactory_std.expout000066400000000000000000000015311307543307100227070ustar00rootroot00000000000000Distribution =class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-1 Estimated distribution=class=Rayleigh name=Rayleigh dimension=1 sigma=2.47251 gamma=-0.964078 Default distribution=class=Rayleigh name=Rayleigh dimension=1 sigma=1 gamma=0 Distribution from parameters=class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-1 Rayleigh =class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-1 Estimated rayleigh=class=Rayleigh name=Rayleigh dimension=1 sigma=2.47251 gamma=-0.964078 Default rayleigh=class=Rayleigh name=Rayleigh dimension=1 sigma=1 gamma=0 Rayleigh from parameters=class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-1 Estimated distribution=class=Rayleigh name=Rayleigh dimension=1 sigma=4.93038e-30 gamma=0 Estimated distribution=class=Rayleigh name=Rayleigh dimension=1 sigma=7.06965e-05 gamma=0.9999 openturns-1.9/lib/test/t_Rayleigh_std.cxx000066400000000000000000000205551307543307100206440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Rayleigh for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Rayleigh { public: TestObject() : Rayleigh(2.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Rayleigh distribution(2.5, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Rayleigh(distribution.getSigma() + eps, distribution.getGamma()).computePDF(point) - Rayleigh(distribution.getSigma() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Rayleigh(distribution.getSigma(), distribution.getGamma() + eps).computePDF(point) - Rayleigh(distribution.getSigma(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Rayleigh(distribution.getSigma() + eps, distribution.getGamma()).computeCDF(point) - Rayleigh(distribution.getSigma() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Rayleigh(distribution.getSigma(), distribution.getGamma() + eps).computeCDF(point) - Rayleigh(distribution.getSigma(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Rayleigh::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar gamma = distribution.getGamma(); fullprint << "gamma=" << gamma << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; Scalar sigma = distribution.getSigma(); fullprint << "sigma=" << sigma << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Rayleigh_std.expout000066400000000000000000000116111307543307100213570ustar00rootroot00000000000000Testing class Rayleigh checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 streamObject(const T & anObject) class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 Distribution Rayleigh(sigma = 2.5, gamma = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.90372] oneSample first=class=Point name=Unnamed dimension=1 values=[0.748252] last=class=Point name=Unnamed dimension=1 values=[2.7717] mean=class=Point name=Unnamed dimension=1 values=[2.61902] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.72183] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0.0855317] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.0855317] log pdf=-1.60712 pdf =0.200465 pdf (FD)=0.200465 cdf=0.16473 ccdf=0.83527 survival=0.83527 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.300729] Survival(inverse survival)=0.95 characteristic function=(-0.157515,0.242922) log characteristic function=(-1.23953,2.14606) pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.131505,-0.0855317] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.131505,-0.0855317] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.120279,-0.200465] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.120279,-0.200465] quantile=class=Point name=Unnamed dimension=1 values=[5.61937] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.223821] upper bound=class=Point name=Unnamed dimension=1 values=[5.75046] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Rayleigh(sigma = 2.5, gamma = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Rayleigh(sigma = 2.5, gamma = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Rayleigh(sigma = 2.5, gamma = -0.5)) level=3.12539 beta=0.0439198 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.062559] upper bound=class=Point name=Unnamed dimension=1 values=[6.29051] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[5.61937] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.300729] upper bound=class=Point name=Unnamed dimension=1 values=[19.5737] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[2.63329] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68252] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[sigma : 2.5, gamma : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.25331] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[3.75994] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[8] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[18.7997] Standard representative=Rayleigh(sigma = 1, gamma = 0) gamma=-0.5 standard deviation=class=Point name=Unnamed dimension=1 values=[1.63784] skewness=class=Point name=Unnamed dimension=1 values=[0.631111] kurtosis=class=Point name=Unnamed dimension=1 values=[3.24509] sigma=2.5 openturns-1.9/lib/test/t_RegularGrid_std.cxx000066400000000000000000000031721307543307100213030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class RegularGrid * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /*Using deltaT constructor */ Scalar start = -2.0; Scalar step = 0.1; UnsignedInteger n = 10; RegularGrid regularGrid(start, step, n); fullprint << "regularGrid = " << regularGrid << std::endl; fullprint << "Start= " << regularGrid.getStart() << std::endl; fullprint << "End= " << regularGrid.getEnd() << std::endl; fullprint << "Step = " << regularGrid.getStep() << std::endl; fullprint << "N = " << regularGrid.getN() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RegularGrid_std.expout000066400000000000000000000001501307543307100220160ustar00rootroot00000000000000regularGrid = class=RegularGrid name=Unnamed start=-2 step=0.1 n=10 Start= -2 End= -1 Step = 0.1 N = 10 openturns-1.9/lib/test/t_ResourceMap_std.cxx000066400000000000000000000024331307543307100213200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ResourceMap for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); // Create a ResourceMap Object fullprint << ResourceMap::GetInstance() << std::endl; fullprint << "Extract from ResourceMap : R-executable-command -> " << ResourceMap::Get("R-executable-command") << std::endl; return ExitCode::Success; } openturns-1.9/lib/test/t_ReverseHaltonSequence_std.cxx000066400000000000000000000043611307543307100233470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the ReverseHalton' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a ReverseHalton sequence ReverseHaltonSequence sequence(15); fullprint << sequence << std::endl; // Create a numerical sample of the sequence Sample reverseHaltonSample(sequence.generate(10)); fullprint << reverseHaltonSample << std::endl; // Create another ReverseHalton' sequence of dimension 2 to estimate Pi in [0; 1)^2 UnsignedInteger dimension = 2; sequence = ReverseHaltonSequence(dimension); UnsignedInteger pointInsideCircle = 0; UnsignedInteger sampleSize = 1000; for(UnsignedInteger i = 0; i < sampleSize; ++i) { Point reverseHaltonPoint(sequence.generate()); fullprint << reverseHaltonPoint << std::endl; if(reverseHaltonPoint.norm() < 1.0) ++ pointInsideCircle; } Scalar probabilityEstimate = 1.0 * pointInsideCircle / sampleSize; Scalar probability = M_PI / 4.0; Scalar relativeError = std::abs(probability - probabilityEstimate) / probability; fullprint << "sample size=" << sampleSize << std::endl; fullprint << "relative error to Pi=" << relativeError << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ReverseHaltonSequence_std.expout000066400000000000000000002001001307543307100240560ustar00rootroot00000000000000class=ReverseHaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.5,0.666667,0.8,0.857143,0.909091,0.923077,0.941176,0.947368,0.956522,0.965517,0.967742,0.972973,0.97561,0.976744,0.978723],[0.25,0.333333,0.6,0.714286,0.818182,0.846154,0.882353,0.894737,0.913043,0.931034,0.935484,0.945946,0.95122,0.953488,0.957447],[0.75,0.222222,0.4,0.571429,0.727273,0.769231,0.823529,0.842105,0.869565,0.896552,0.903226,0.918919,0.926829,0.930233,0.93617],[0.125,0.888889,0.2,0.428571,0.636364,0.692308,0.764706,0.789474,0.826087,0.862069,0.870968,0.891892,0.902439,0.906977,0.914894],[0.625,0.555556,0.16,0.285714,0.545455,0.615385,0.705882,0.736842,0.782609,0.827586,0.83871,0.864865,0.878049,0.883721,0.893617],[0.375,0.111111,0.96,0.142857,0.454545,0.538462,0.647059,0.684211,0.73913,0.793103,0.806452,0.837838,0.853659,0.860465,0.87234],[0.875,0.777778,0.76,0.122449,0.363636,0.461538,0.588235,0.631579,0.695652,0.758621,0.774194,0.810811,0.829268,0.837209,0.851064],[0.0625,0.444444,0.56,0.979592,0.272727,0.384615,0.529412,0.578947,0.652174,0.724138,0.741935,0.783784,0.804878,0.813953,0.829787],[0.5625,0.0740741,0.36,0.836735,0.181818,0.307692,0.470588,0.526316,0.608696,0.689655,0.709677,0.756757,0.780488,0.790698,0.808511],[0.3125,0.740741,0.12,0.693878,0.0909091,0.230769,0.411765,0.473684,0.565217,0.655172,0.677419,0.72973,0.756098,0.767442,0.787234]] class=Point name=Unnamed dimension=2 values=[0.5,0.666667] class=Point name=Unnamed dimension=2 values=[0.25,0.333333] class=Point name=Unnamed dimension=2 values=[0.75,0.222222] class=Point name=Unnamed dimension=2 values=[0.125,0.888889] class=Point name=Unnamed dimension=2 values=[0.625,0.555556] class=Point name=Unnamed dimension=2 values=[0.375,0.111111] class=Point name=Unnamed dimension=2 values=[0.875,0.777778] class=Point name=Unnamed dimension=2 values=[0.0625,0.444444] class=Point name=Unnamed dimension=2 values=[0.5625,0.0740741] class=Point name=Unnamed dimension=2 values=[0.3125,0.740741] class=Point name=Unnamed dimension=2 values=[0.8125,0.407407] class=Point name=Unnamed dimension=2 values=[0.1875,0.296296] class=Point name=Unnamed dimension=2 values=[0.6875,0.962963] class=Point name=Unnamed dimension=2 values=[0.4375,0.62963] class=Point name=Unnamed dimension=2 values=[0.9375,0.185185] class=Point name=Unnamed dimension=2 values=[0.03125,0.851852] class=Point name=Unnamed dimension=2 values=[0.53125,0.518519] class=Point name=Unnamed dimension=2 values=[0.28125,0.037037] class=Point name=Unnamed dimension=2 values=[0.78125,0.703704] class=Point name=Unnamed dimension=2 values=[0.15625,0.37037] class=Point name=Unnamed dimension=2 values=[0.65625,0.259259] class=Point name=Unnamed dimension=2 values=[0.40625,0.925926] class=Point name=Unnamed dimension=2 values=[0.90625,0.592593] class=Point name=Unnamed dimension=2 values=[0.09375,0.148148] class=Point name=Unnamed dimension=2 values=[0.59375,0.814815] class=Point name=Unnamed dimension=2 values=[0.34375,0.481481] class=Point name=Unnamed dimension=2 values=[0.84375,0.0246914] class=Point name=Unnamed dimension=2 values=[0.21875,0.691358] class=Point name=Unnamed dimension=2 values=[0.71875,0.358025] class=Point name=Unnamed dimension=2 values=[0.46875,0.246914] class=Point name=Unnamed dimension=2 values=[0.96875,0.91358] class=Point name=Unnamed dimension=2 values=[0.015625,0.580247] class=Point name=Unnamed dimension=2 values=[0.515625,0.135802] class=Point name=Unnamed dimension=2 values=[0.265625,0.802469] class=Point name=Unnamed dimension=2 values=[0.765625,0.469136] class=Point name=Unnamed dimension=2 values=[0.140625,0.0987654] class=Point name=Unnamed dimension=2 values=[0.640625,0.765432] class=Point name=Unnamed dimension=2 values=[0.390625,0.432099] class=Point name=Unnamed dimension=2 values=[0.890625,0.320988] class=Point name=Unnamed dimension=2 values=[0.078125,0.987654] class=Point name=Unnamed dimension=2 values=[0.578125,0.654321] class=Point name=Unnamed dimension=2 values=[0.328125,0.209877] class=Point name=Unnamed dimension=2 values=[0.828125,0.876543] class=Point name=Unnamed dimension=2 values=[0.203125,0.54321] class=Point name=Unnamed dimension=2 values=[0.703125,0.0617284] class=Point name=Unnamed dimension=2 values=[0.453125,0.728395] class=Point name=Unnamed dimension=2 values=[0.953125,0.395062] class=Point name=Unnamed dimension=2 values=[0.046875,0.283951] class=Point name=Unnamed dimension=2 values=[0.546875,0.950617] class=Point name=Unnamed dimension=2 values=[0.296875,0.617284] class=Point name=Unnamed dimension=2 values=[0.796875,0.17284] class=Point name=Unnamed dimension=2 values=[0.171875,0.839506] class=Point name=Unnamed dimension=2 values=[0.671875,0.506173] class=Point name=Unnamed dimension=2 values=[0.421875,0.0123457] class=Point name=Unnamed dimension=2 values=[0.921875,0.679012] class=Point name=Unnamed dimension=2 values=[0.109375,0.345679] class=Point name=Unnamed dimension=2 values=[0.609375,0.234568] class=Point name=Unnamed dimension=2 values=[0.359375,0.901235] class=Point name=Unnamed dimension=2 values=[0.859375,0.567901] class=Point name=Unnamed dimension=2 values=[0.234375,0.123457] class=Point name=Unnamed dimension=2 values=[0.734375,0.790123] class=Point name=Unnamed dimension=2 values=[0.484375,0.45679] class=Point name=Unnamed dimension=2 values=[0.984375,0.0864198] class=Point name=Unnamed dimension=2 values=[0.0078125,0.753086] class=Point name=Unnamed dimension=2 values=[0.507812,0.419753] class=Point name=Unnamed dimension=2 values=[0.257812,0.308642] class=Point name=Unnamed dimension=2 values=[0.757812,0.975309] class=Point name=Unnamed dimension=2 values=[0.132812,0.641975] class=Point name=Unnamed dimension=2 values=[0.632812,0.197531] class=Point name=Unnamed dimension=2 values=[0.382812,0.864198] class=Point name=Unnamed dimension=2 values=[0.882812,0.530864] class=Point name=Unnamed dimension=2 values=[0.0703125,0.0493827] class=Point name=Unnamed dimension=2 values=[0.570312,0.716049] class=Point name=Unnamed dimension=2 values=[0.320312,0.382716] class=Point name=Unnamed dimension=2 values=[0.820312,0.271605] class=Point name=Unnamed dimension=2 values=[0.195312,0.938272] class=Point name=Unnamed dimension=2 values=[0.695312,0.604938] class=Point name=Unnamed dimension=2 values=[0.445312,0.160494] class=Point name=Unnamed dimension=2 values=[0.945312,0.82716] class=Point name=Unnamed dimension=2 values=[0.0390625,0.493827] class=Point name=Unnamed dimension=2 values=[0.539062,0.00823045] class=Point name=Unnamed dimension=2 values=[0.289062,0.674897] class=Point name=Unnamed dimension=2 values=[0.789062,0.341564] class=Point name=Unnamed dimension=2 values=[0.164062,0.230453] class=Point name=Unnamed dimension=2 values=[0.664062,0.897119] class=Point name=Unnamed dimension=2 values=[0.414062,0.563786] class=Point name=Unnamed dimension=2 values=[0.914062,0.119342] class=Point name=Unnamed dimension=2 values=[0.101562,0.786008] class=Point name=Unnamed dimension=2 values=[0.601562,0.452675] class=Point name=Unnamed dimension=2 values=[0.351562,0.0823045] class=Point name=Unnamed dimension=2 values=[0.851562,0.748971] class=Point name=Unnamed dimension=2 values=[0.226562,0.415638] class=Point name=Unnamed dimension=2 values=[0.726562,0.304527] class=Point name=Unnamed dimension=2 values=[0.476562,0.971193] class=Point name=Unnamed dimension=2 values=[0.976562,0.63786] class=Point name=Unnamed dimension=2 values=[0.0234375,0.193416] class=Point name=Unnamed dimension=2 values=[0.523438,0.860082] class=Point name=Unnamed dimension=2 values=[0.273438,0.526749] class=Point name=Unnamed dimension=2 values=[0.773438,0.0452675] class=Point name=Unnamed dimension=2 values=[0.148438,0.711934] class=Point name=Unnamed dimension=2 values=[0.648438,0.378601] class=Point name=Unnamed dimension=2 values=[0.398438,0.26749] class=Point name=Unnamed dimension=2 values=[0.898438,0.934156] class=Point name=Unnamed dimension=2 values=[0.0859375,0.600823] class=Point name=Unnamed dimension=2 values=[0.585938,0.156379] class=Point name=Unnamed dimension=2 values=[0.335938,0.823045] class=Point name=Unnamed dimension=2 values=[0.835938,0.489712] class=Point name=Unnamed dimension=2 values=[0.210938,0.0329218] class=Point name=Unnamed dimension=2 values=[0.710938,0.699588] class=Point name=Unnamed dimension=2 values=[0.460938,0.366255] class=Point name=Unnamed dimension=2 values=[0.960938,0.255144] class=Point name=Unnamed dimension=2 values=[0.0546875,0.921811] class=Point name=Unnamed dimension=2 values=[0.554688,0.588477] class=Point name=Unnamed dimension=2 values=[0.304688,0.144033] class=Point name=Unnamed dimension=2 values=[0.804688,0.8107] class=Point name=Unnamed dimension=2 values=[0.179688,0.477366] class=Point name=Unnamed dimension=2 values=[0.679688,0.106996] class=Point name=Unnamed dimension=2 values=[0.429688,0.773663] class=Point name=Unnamed dimension=2 values=[0.929688,0.440329] class=Point name=Unnamed dimension=2 values=[0.117188,0.329218] class=Point name=Unnamed dimension=2 values=[0.617188,0.995885] class=Point name=Unnamed dimension=2 values=[0.367188,0.662551] class=Point name=Unnamed dimension=2 values=[0.867188,0.218107] class=Point name=Unnamed dimension=2 values=[0.242188,0.884774] class=Point name=Unnamed dimension=2 values=[0.742188,0.55144] class=Point name=Unnamed dimension=2 values=[0.492188,0.0699588] class=Point name=Unnamed dimension=2 values=[0.992188,0.736626] class=Point name=Unnamed dimension=2 values=[0.00390625,0.403292] class=Point name=Unnamed dimension=2 values=[0.503906,0.292181] class=Point name=Unnamed dimension=2 values=[0.253906,0.958848] class=Point name=Unnamed dimension=2 values=[0.753906,0.625514] class=Point name=Unnamed dimension=2 values=[0.128906,0.18107] class=Point name=Unnamed dimension=2 values=[0.628906,0.847737] class=Point name=Unnamed dimension=2 values=[0.378906,0.514403] class=Point name=Unnamed dimension=2 values=[0.878906,0.0205761] class=Point name=Unnamed dimension=2 values=[0.0664062,0.687243] class=Point name=Unnamed dimension=2 values=[0.566406,0.353909] class=Point name=Unnamed dimension=2 values=[0.316406,0.242798] class=Point name=Unnamed dimension=2 values=[0.816406,0.909465] class=Point name=Unnamed dimension=2 values=[0.191406,0.576132] class=Point name=Unnamed dimension=2 values=[0.691406,0.131687] class=Point name=Unnamed dimension=2 values=[0.441406,0.798354] class=Point name=Unnamed dimension=2 values=[0.941406,0.465021] class=Point name=Unnamed dimension=2 values=[0.0351562,0.0946502] class=Point name=Unnamed dimension=2 values=[0.535156,0.761317] class=Point name=Unnamed dimension=2 values=[0.285156,0.427984] class=Point name=Unnamed dimension=2 values=[0.785156,0.316872] class=Point name=Unnamed dimension=2 values=[0.160156,0.983539] class=Point name=Unnamed dimension=2 values=[0.660156,0.650206] class=Point name=Unnamed dimension=2 values=[0.410156,0.205761] class=Point name=Unnamed dimension=2 values=[0.910156,0.872428] class=Point name=Unnamed dimension=2 values=[0.0976562,0.539095] class=Point name=Unnamed dimension=2 values=[0.597656,0.0576132] class=Point name=Unnamed dimension=2 values=[0.347656,0.72428] class=Point name=Unnamed dimension=2 values=[0.847656,0.390947] class=Point name=Unnamed dimension=2 values=[0.222656,0.279835] class=Point name=Unnamed dimension=2 values=[0.722656,0.946502] class=Point name=Unnamed dimension=2 values=[0.472656,0.613169] class=Point name=Unnamed dimension=2 values=[0.972656,0.168724] class=Point name=Unnamed dimension=2 values=[0.0195312,0.835391] class=Point name=Unnamed dimension=2 values=[0.519531,0.502058] class=Point name=Unnamed dimension=2 values=[0.269531,0.00411523] class=Point name=Unnamed dimension=2 values=[0.769531,0.670782] class=Point name=Unnamed dimension=2 values=[0.144531,0.337449] class=Point name=Unnamed dimension=2 values=[0.644531,0.226337] class=Point name=Unnamed dimension=2 values=[0.394531,0.893004] class=Point name=Unnamed dimension=2 values=[0.894531,0.559671] class=Point name=Unnamed dimension=2 values=[0.0820312,0.115226] class=Point name=Unnamed dimension=2 values=[0.582031,0.781893] class=Point name=Unnamed dimension=2 values=[0.332031,0.44856] class=Point name=Unnamed dimension=2 values=[0.832031,0.0781893] class=Point name=Unnamed dimension=2 values=[0.207031,0.744856] class=Point name=Unnamed dimension=2 values=[0.707031,0.411523] class=Point name=Unnamed dimension=2 values=[0.457031,0.300412] class=Point name=Unnamed dimension=2 values=[0.957031,0.967078] class=Point name=Unnamed dimension=2 values=[0.0507812,0.633745] class=Point name=Unnamed dimension=2 values=[0.550781,0.1893] class=Point name=Unnamed dimension=2 values=[0.300781,0.855967] class=Point name=Unnamed dimension=2 values=[0.800781,0.522634] class=Point name=Unnamed dimension=2 values=[0.175781,0.0411523] class=Point name=Unnamed dimension=2 values=[0.675781,0.707819] class=Point name=Unnamed dimension=2 values=[0.425781,0.374486] class=Point name=Unnamed dimension=2 values=[0.925781,0.263374] class=Point name=Unnamed dimension=2 values=[0.113281,0.930041] class=Point name=Unnamed dimension=2 values=[0.613281,0.596708] class=Point name=Unnamed dimension=2 values=[0.363281,0.152263] class=Point name=Unnamed dimension=2 values=[0.863281,0.81893] class=Point name=Unnamed dimension=2 values=[0.238281,0.485597] class=Point name=Unnamed dimension=2 values=[0.738281,0.0288066] class=Point name=Unnamed dimension=2 values=[0.488281,0.695473] class=Point name=Unnamed dimension=2 values=[0.988281,0.36214] class=Point name=Unnamed dimension=2 values=[0.0117188,0.251029] class=Point name=Unnamed dimension=2 values=[0.511719,0.917695] class=Point name=Unnamed dimension=2 values=[0.261719,0.584362] class=Point name=Unnamed dimension=2 values=[0.761719,0.139918] class=Point name=Unnamed dimension=2 values=[0.136719,0.806584] class=Point name=Unnamed dimension=2 values=[0.636719,0.473251] class=Point name=Unnamed dimension=2 values=[0.386719,0.102881] class=Point name=Unnamed dimension=2 values=[0.886719,0.769547] class=Point name=Unnamed dimension=2 values=[0.0742188,0.436214] class=Point name=Unnamed dimension=2 values=[0.574219,0.325103] class=Point name=Unnamed dimension=2 values=[0.324219,0.99177] class=Point name=Unnamed dimension=2 values=[0.824219,0.658436] class=Point name=Unnamed dimension=2 values=[0.199219,0.213992] class=Point name=Unnamed dimension=2 values=[0.699219,0.880658] class=Point name=Unnamed dimension=2 values=[0.449219,0.547325] class=Point name=Unnamed dimension=2 values=[0.949219,0.0658436] class=Point name=Unnamed dimension=2 values=[0.0429688,0.73251] class=Point name=Unnamed dimension=2 values=[0.542969,0.399177] class=Point name=Unnamed dimension=2 values=[0.292969,0.288066] class=Point name=Unnamed dimension=2 values=[0.792969,0.954733] class=Point name=Unnamed dimension=2 values=[0.167969,0.621399] class=Point name=Unnamed dimension=2 values=[0.667969,0.176955] class=Point name=Unnamed dimension=2 values=[0.417969,0.843621] class=Point name=Unnamed dimension=2 values=[0.917969,0.510288] class=Point name=Unnamed dimension=2 values=[0.105469,0.0164609] class=Point name=Unnamed dimension=2 values=[0.605469,0.683128] class=Point name=Unnamed dimension=2 values=[0.355469,0.349794] class=Point name=Unnamed dimension=2 values=[0.855469,0.238683] class=Point name=Unnamed dimension=2 values=[0.230469,0.90535] class=Point name=Unnamed dimension=2 values=[0.730469,0.572016] class=Point name=Unnamed dimension=2 values=[0.480469,0.127572] class=Point name=Unnamed dimension=2 values=[0.980469,0.794239] class=Point name=Unnamed dimension=2 values=[0.0273438,0.460905] class=Point name=Unnamed dimension=2 values=[0.527344,0.090535] class=Point name=Unnamed dimension=2 values=[0.277344,0.757202] class=Point name=Unnamed dimension=2 values=[0.777344,0.423868] class=Point name=Unnamed dimension=2 values=[0.152344,0.312757] class=Point name=Unnamed dimension=2 values=[0.652344,0.979424] class=Point name=Unnamed dimension=2 values=[0.402344,0.646091] class=Point name=Unnamed dimension=2 values=[0.902344,0.201646] class=Point name=Unnamed dimension=2 values=[0.0898438,0.868313] class=Point name=Unnamed dimension=2 values=[0.589844,0.534979] class=Point name=Unnamed dimension=2 values=[0.339844,0.0534979] class=Point name=Unnamed dimension=2 values=[0.839844,0.720165] class=Point name=Unnamed dimension=2 values=[0.214844,0.386831] class=Point name=Unnamed dimension=2 values=[0.714844,0.27572] class=Point name=Unnamed dimension=2 values=[0.464844,0.942387] class=Point name=Unnamed dimension=2 values=[0.964844,0.609053] class=Point name=Unnamed dimension=2 values=[0.0585938,0.164609] class=Point name=Unnamed dimension=2 values=[0.558594,0.831276] class=Point name=Unnamed dimension=2 values=[0.308594,0.497942] class=Point name=Unnamed dimension=2 values=[0.808594,0.00274348] class=Point name=Unnamed dimension=2 values=[0.183594,0.66941] class=Point name=Unnamed dimension=2 values=[0.683594,0.336077] class=Point name=Unnamed dimension=2 values=[0.433594,0.224966] class=Point name=Unnamed dimension=2 values=[0.933594,0.891632] class=Point name=Unnamed dimension=2 values=[0.121094,0.558299] class=Point name=Unnamed dimension=2 values=[0.621094,0.113855] class=Point name=Unnamed dimension=2 values=[0.371094,0.780521] class=Point name=Unnamed dimension=2 values=[0.871094,0.447188] class=Point name=Unnamed dimension=2 values=[0.246094,0.0768176] class=Point name=Unnamed dimension=2 values=[0.746094,0.743484] class=Point name=Unnamed dimension=2 values=[0.496094,0.410151] class=Point name=Unnamed dimension=2 values=[0.996094,0.29904] class=Point name=Unnamed dimension=2 values=[0.00195312,0.965706] class=Point name=Unnamed dimension=2 values=[0.501953,0.632373] class=Point name=Unnamed dimension=2 values=[0.251953,0.187929] class=Point name=Unnamed dimension=2 values=[0.751953,0.854595] class=Point name=Unnamed dimension=2 values=[0.126953,0.521262] class=Point name=Unnamed dimension=2 values=[0.626953,0.0397805] class=Point name=Unnamed dimension=2 values=[0.376953,0.706447] class=Point name=Unnamed dimension=2 values=[0.876953,0.373114] class=Point name=Unnamed dimension=2 values=[0.0644531,0.262003] class=Point name=Unnamed dimension=2 values=[0.564453,0.928669] class=Point name=Unnamed dimension=2 values=[0.314453,0.595336] class=Point name=Unnamed dimension=2 values=[0.814453,0.150892] class=Point name=Unnamed dimension=2 values=[0.189453,0.817558] class=Point name=Unnamed dimension=2 values=[0.689453,0.484225] class=Point name=Unnamed dimension=2 values=[0.439453,0.0274348] class=Point name=Unnamed dimension=2 values=[0.939453,0.694102] class=Point name=Unnamed dimension=2 values=[0.0332031,0.360768] class=Point name=Unnamed dimension=2 values=[0.533203,0.249657] class=Point name=Unnamed dimension=2 values=[0.283203,0.916324] class=Point name=Unnamed dimension=2 values=[0.783203,0.58299] class=Point name=Unnamed dimension=2 values=[0.158203,0.138546] class=Point name=Unnamed dimension=2 values=[0.658203,0.805213] class=Point name=Unnamed dimension=2 values=[0.408203,0.471879] class=Point name=Unnamed dimension=2 values=[0.908203,0.101509] class=Point name=Unnamed dimension=2 values=[0.0957031,0.768176] class=Point name=Unnamed dimension=2 values=[0.595703,0.434842] class=Point name=Unnamed dimension=2 values=[0.345703,0.323731] class=Point name=Unnamed dimension=2 values=[0.845703,0.990398] class=Point name=Unnamed dimension=2 values=[0.220703,0.657064] class=Point name=Unnamed dimension=2 values=[0.720703,0.21262] class=Point name=Unnamed dimension=2 values=[0.470703,0.879287] class=Point name=Unnamed dimension=2 values=[0.970703,0.545953] class=Point name=Unnamed dimension=2 values=[0.0175781,0.0644719] class=Point name=Unnamed dimension=2 values=[0.517578,0.731139] class=Point name=Unnamed dimension=2 values=[0.267578,0.397805] class=Point name=Unnamed dimension=2 values=[0.767578,0.286694] class=Point name=Unnamed dimension=2 values=[0.142578,0.953361] class=Point name=Unnamed dimension=2 values=[0.642578,0.620027] class=Point name=Unnamed dimension=2 values=[0.392578,0.175583] class=Point name=Unnamed dimension=2 values=[0.892578,0.84225] class=Point name=Unnamed dimension=2 values=[0.0800781,0.508916] class=Point name=Unnamed dimension=2 values=[0.580078,0.0150892] class=Point name=Unnamed dimension=2 values=[0.330078,0.681756] class=Point name=Unnamed dimension=2 values=[0.830078,0.348422] class=Point name=Unnamed dimension=2 values=[0.205078,0.237311] class=Point name=Unnamed dimension=2 values=[0.705078,0.903978] class=Point name=Unnamed dimension=2 values=[0.455078,0.570645] class=Point name=Unnamed dimension=2 values=[0.955078,0.1262] class=Point name=Unnamed dimension=2 values=[0.0488281,0.792867] class=Point name=Unnamed dimension=2 values=[0.548828,0.459534] class=Point name=Unnamed dimension=2 values=[0.298828,0.0891632] class=Point name=Unnamed dimension=2 values=[0.798828,0.75583] class=Point name=Unnamed dimension=2 values=[0.173828,0.422497] class=Point name=Unnamed dimension=2 values=[0.673828,0.311385] class=Point name=Unnamed dimension=2 values=[0.423828,0.978052] class=Point name=Unnamed dimension=2 values=[0.923828,0.644719] class=Point name=Unnamed dimension=2 values=[0.111328,0.200274] class=Point name=Unnamed dimension=2 values=[0.611328,0.866941] class=Point name=Unnamed dimension=2 values=[0.361328,0.533608] class=Point name=Unnamed dimension=2 values=[0.861328,0.0521262] class=Point name=Unnamed dimension=2 values=[0.236328,0.718793] class=Point name=Unnamed dimension=2 values=[0.736328,0.38546] class=Point name=Unnamed dimension=2 values=[0.486328,0.274348] class=Point name=Unnamed dimension=2 values=[0.986328,0.941015] class=Point name=Unnamed dimension=2 values=[0.00976562,0.607682] class=Point name=Unnamed dimension=2 values=[0.509766,0.163237] class=Point name=Unnamed dimension=2 values=[0.259766,0.829904] class=Point name=Unnamed dimension=2 values=[0.759766,0.496571] class=Point name=Unnamed dimension=2 values=[0.134766,0.0109739] class=Point name=Unnamed dimension=2 values=[0.634766,0.677641] class=Point name=Unnamed dimension=2 values=[0.384766,0.344307] class=Point name=Unnamed dimension=2 values=[0.884766,0.233196] class=Point name=Unnamed dimension=2 values=[0.0722656,0.899863] class=Point name=Unnamed dimension=2 values=[0.572266,0.566529] class=Point name=Unnamed dimension=2 values=[0.322266,0.122085] class=Point name=Unnamed dimension=2 values=[0.822266,0.788752] class=Point name=Unnamed dimension=2 values=[0.197266,0.455418] class=Point name=Unnamed dimension=2 values=[0.697266,0.085048] class=Point name=Unnamed dimension=2 values=[0.447266,0.751715] class=Point name=Unnamed dimension=2 values=[0.947266,0.418381] class=Point name=Unnamed dimension=2 values=[0.0410156,0.30727] class=Point name=Unnamed dimension=2 values=[0.541016,0.973937] class=Point name=Unnamed dimension=2 values=[0.291016,0.640604] class=Point name=Unnamed dimension=2 values=[0.791016,0.196159] class=Point name=Unnamed dimension=2 values=[0.166016,0.862826] class=Point name=Unnamed dimension=2 values=[0.666016,0.529492] class=Point name=Unnamed dimension=2 values=[0.416016,0.048011] class=Point name=Unnamed dimension=2 values=[0.916016,0.714678] class=Point name=Unnamed dimension=2 values=[0.103516,0.381344] class=Point name=Unnamed dimension=2 values=[0.603516,0.270233] class=Point name=Unnamed dimension=2 values=[0.353516,0.9369] class=Point name=Unnamed dimension=2 values=[0.853516,0.603567] class=Point name=Unnamed dimension=2 values=[0.228516,0.159122] class=Point name=Unnamed dimension=2 values=[0.728516,0.825789] class=Point name=Unnamed dimension=2 values=[0.478516,0.492455] class=Point name=Unnamed dimension=2 values=[0.978516,0.0356653] class=Point name=Unnamed dimension=2 values=[0.0253906,0.702332] class=Point name=Unnamed dimension=2 values=[0.525391,0.368999] class=Point name=Unnamed dimension=2 values=[0.275391,0.257888] class=Point name=Unnamed dimension=2 values=[0.775391,0.924554] class=Point name=Unnamed dimension=2 values=[0.150391,0.591221] class=Point name=Unnamed dimension=2 values=[0.650391,0.146776] class=Point name=Unnamed dimension=2 values=[0.400391,0.813443] class=Point name=Unnamed dimension=2 values=[0.900391,0.48011] class=Point name=Unnamed dimension=2 values=[0.0878906,0.109739] class=Point name=Unnamed dimension=2 values=[0.587891,0.776406] class=Point name=Unnamed dimension=2 values=[0.337891,0.443073] class=Point name=Unnamed dimension=2 values=[0.837891,0.331962] class=Point name=Unnamed dimension=2 values=[0.212891,0.998628] class=Point name=Unnamed dimension=2 values=[0.712891,0.665295] class=Point name=Unnamed dimension=2 values=[0.462891,0.22085] class=Point name=Unnamed dimension=2 values=[0.962891,0.887517] class=Point name=Unnamed dimension=2 values=[0.0566406,0.554184] class=Point name=Unnamed dimension=2 values=[0.556641,0.0727023] class=Point name=Unnamed dimension=2 values=[0.306641,0.739369] class=Point name=Unnamed dimension=2 values=[0.806641,0.406036] class=Point name=Unnamed dimension=2 values=[0.181641,0.294925] class=Point name=Unnamed dimension=2 values=[0.681641,0.961591] class=Point name=Unnamed dimension=2 values=[0.431641,0.628258] class=Point name=Unnamed dimension=2 values=[0.931641,0.183813] class=Point name=Unnamed dimension=2 values=[0.119141,0.85048] class=Point name=Unnamed dimension=2 values=[0.619141,0.517147] class=Point name=Unnamed dimension=2 values=[0.369141,0.0233196] class=Point name=Unnamed dimension=2 values=[0.869141,0.689986] class=Point name=Unnamed dimension=2 values=[0.244141,0.356653] class=Point name=Unnamed dimension=2 values=[0.744141,0.245542] class=Point name=Unnamed dimension=2 values=[0.494141,0.912209] class=Point name=Unnamed dimension=2 values=[0.994141,0.578875] class=Point name=Unnamed dimension=2 values=[0.00585938,0.134431] class=Point name=Unnamed dimension=2 values=[0.505859,0.801097] class=Point name=Unnamed dimension=2 values=[0.255859,0.467764] class=Point name=Unnamed dimension=2 values=[0.755859,0.0973937] class=Point name=Unnamed dimension=2 values=[0.130859,0.76406] class=Point name=Unnamed dimension=2 values=[0.630859,0.430727] class=Point name=Unnamed dimension=2 values=[0.380859,0.319616] class=Point name=Unnamed dimension=2 values=[0.880859,0.986283] class=Point name=Unnamed dimension=2 values=[0.0683594,0.652949] class=Point name=Unnamed dimension=2 values=[0.568359,0.208505] class=Point name=Unnamed dimension=2 values=[0.318359,0.875171] class=Point name=Unnamed dimension=2 values=[0.818359,0.541838] class=Point name=Unnamed dimension=2 values=[0.193359,0.0603567] class=Point name=Unnamed dimension=2 values=[0.693359,0.727023] class=Point name=Unnamed dimension=2 values=[0.443359,0.39369] class=Point name=Unnamed dimension=2 values=[0.943359,0.282579] class=Point name=Unnamed dimension=2 values=[0.0371094,0.949246] class=Point name=Unnamed dimension=2 values=[0.537109,0.615912] class=Point name=Unnamed dimension=2 values=[0.287109,0.171468] class=Point name=Unnamed dimension=2 values=[0.787109,0.838134] class=Point name=Unnamed dimension=2 values=[0.162109,0.504801] class=Point name=Unnamed dimension=2 values=[0.662109,0.00685871] class=Point name=Unnamed dimension=2 values=[0.412109,0.673525] class=Point name=Unnamed dimension=2 values=[0.912109,0.340192] class=Point name=Unnamed dimension=2 values=[0.0996094,0.229081] class=Point name=Unnamed dimension=2 values=[0.599609,0.895748] class=Point name=Unnamed dimension=2 values=[0.349609,0.562414] class=Point name=Unnamed dimension=2 values=[0.849609,0.11797] class=Point name=Unnamed dimension=2 values=[0.224609,0.784636] class=Point name=Unnamed dimension=2 values=[0.724609,0.451303] class=Point name=Unnamed dimension=2 values=[0.474609,0.0809328] class=Point name=Unnamed dimension=2 values=[0.974609,0.747599] class=Point name=Unnamed dimension=2 values=[0.0214844,0.414266] class=Point name=Unnamed dimension=2 values=[0.521484,0.303155] class=Point name=Unnamed dimension=2 values=[0.271484,0.969822] class=Point name=Unnamed dimension=2 values=[0.771484,0.636488] class=Point name=Unnamed dimension=2 values=[0.146484,0.192044] class=Point name=Unnamed dimension=2 values=[0.646484,0.858711] class=Point name=Unnamed dimension=2 values=[0.396484,0.525377] class=Point name=Unnamed dimension=2 values=[0.896484,0.0438957] class=Point name=Unnamed dimension=2 values=[0.0839844,0.710562] class=Point name=Unnamed dimension=2 values=[0.583984,0.377229] class=Point name=Unnamed dimension=2 values=[0.333984,0.266118] class=Point name=Unnamed dimension=2 values=[0.833984,0.932785] class=Point name=Unnamed dimension=2 values=[0.208984,0.599451] class=Point name=Unnamed dimension=2 values=[0.708984,0.155007] class=Point name=Unnamed dimension=2 values=[0.458984,0.821674] class=Point name=Unnamed dimension=2 values=[0.958984,0.48834] class=Point name=Unnamed dimension=2 values=[0.0527344,0.0315501] class=Point name=Unnamed dimension=2 values=[0.552734,0.698217] class=Point name=Unnamed dimension=2 values=[0.302734,0.364883] class=Point name=Unnamed dimension=2 values=[0.802734,0.253772] class=Point name=Unnamed dimension=2 values=[0.177734,0.920439] class=Point name=Unnamed dimension=2 values=[0.677734,0.587106] class=Point name=Unnamed dimension=2 values=[0.427734,0.142661] class=Point name=Unnamed dimension=2 values=[0.927734,0.809328] class=Point name=Unnamed dimension=2 values=[0.115234,0.475995] class=Point name=Unnamed dimension=2 values=[0.615234,0.105624] class=Point name=Unnamed dimension=2 values=[0.365234,0.772291] class=Point name=Unnamed dimension=2 values=[0.865234,0.438957] class=Point name=Unnamed dimension=2 values=[0.240234,0.327846] class=Point name=Unnamed dimension=2 values=[0.740234,0.994513] class=Point name=Unnamed dimension=2 values=[0.490234,0.66118] class=Point name=Unnamed dimension=2 values=[0.990234,0.216735] class=Point name=Unnamed dimension=2 values=[0.0136719,0.883402] class=Point name=Unnamed dimension=2 values=[0.513672,0.550069] class=Point name=Unnamed dimension=2 values=[0.263672,0.0685871] class=Point name=Unnamed dimension=2 values=[0.763672,0.735254] class=Point name=Unnamed dimension=2 values=[0.138672,0.40192] class=Point name=Unnamed dimension=2 values=[0.638672,0.290809] class=Point name=Unnamed dimension=2 values=[0.388672,0.957476] class=Point name=Unnamed dimension=2 values=[0.888672,0.624143] class=Point name=Unnamed dimension=2 values=[0.0761719,0.179698] class=Point name=Unnamed dimension=2 values=[0.576172,0.846365] class=Point name=Unnamed dimension=2 values=[0.326172,0.513032] class=Point name=Unnamed dimension=2 values=[0.826172,0.0192044] class=Point name=Unnamed dimension=2 values=[0.201172,0.685871] class=Point name=Unnamed dimension=2 values=[0.701172,0.352538] class=Point name=Unnamed dimension=2 values=[0.451172,0.241427] class=Point name=Unnamed dimension=2 values=[0.951172,0.908093] class=Point name=Unnamed dimension=2 values=[0.0449219,0.57476] class=Point name=Unnamed dimension=2 values=[0.544922,0.130316] class=Point name=Unnamed dimension=2 values=[0.294922,0.796982] class=Point name=Unnamed dimension=2 values=[0.794922,0.463649] class=Point name=Unnamed dimension=2 values=[0.169922,0.0932785] class=Point name=Unnamed dimension=2 values=[0.669922,0.759945] class=Point name=Unnamed dimension=2 values=[0.419922,0.426612] class=Point name=Unnamed dimension=2 values=[0.919922,0.315501] class=Point name=Unnamed dimension=2 values=[0.107422,0.982167] class=Point name=Unnamed dimension=2 values=[0.607422,0.648834] class=Point name=Unnamed dimension=2 values=[0.357422,0.20439] class=Point name=Unnamed dimension=2 values=[0.857422,0.871056] class=Point name=Unnamed dimension=2 values=[0.232422,0.537723] class=Point name=Unnamed dimension=2 values=[0.732422,0.0562414] class=Point name=Unnamed dimension=2 values=[0.482422,0.722908] class=Point name=Unnamed dimension=2 values=[0.982422,0.389575] class=Point name=Unnamed dimension=2 values=[0.0292969,0.278464] class=Point name=Unnamed dimension=2 values=[0.529297,0.94513] class=Point name=Unnamed dimension=2 values=[0.279297,0.611797] class=Point name=Unnamed dimension=2 values=[0.779297,0.167353] class=Point name=Unnamed dimension=2 values=[0.154297,0.834019] class=Point name=Unnamed dimension=2 values=[0.654297,0.500686] class=Point name=Unnamed dimension=2 values=[0.404297,0.00137174] class=Point name=Unnamed dimension=2 values=[0.904297,0.668038] class=Point name=Unnamed dimension=2 values=[0.0917969,0.334705] class=Point name=Unnamed dimension=2 values=[0.591797,0.223594] class=Point name=Unnamed dimension=2 values=[0.341797,0.890261] class=Point name=Unnamed dimension=2 values=[0.841797,0.556927] class=Point name=Unnamed dimension=2 values=[0.216797,0.112483] class=Point name=Unnamed dimension=2 values=[0.716797,0.77915] class=Point name=Unnamed dimension=2 values=[0.466797,0.445816] class=Point name=Unnamed dimension=2 values=[0.966797,0.0754458] class=Point name=Unnamed dimension=2 values=[0.0605469,0.742112] class=Point name=Unnamed dimension=2 values=[0.560547,0.408779] class=Point name=Unnamed dimension=2 values=[0.310547,0.297668] class=Point name=Unnamed dimension=2 values=[0.810547,0.964335] class=Point name=Unnamed dimension=2 values=[0.185547,0.631001] class=Point name=Unnamed dimension=2 values=[0.685547,0.186557] class=Point name=Unnamed dimension=2 values=[0.435547,0.853224] class=Point name=Unnamed dimension=2 values=[0.935547,0.51989] class=Point name=Unnamed dimension=2 values=[0.123047,0.0384088] class=Point name=Unnamed dimension=2 values=[0.623047,0.705075] class=Point name=Unnamed dimension=2 values=[0.373047,0.371742] class=Point name=Unnamed dimension=2 values=[0.873047,0.260631] class=Point name=Unnamed dimension=2 values=[0.248047,0.927298] class=Point name=Unnamed dimension=2 values=[0.748047,0.593964] class=Point name=Unnamed dimension=2 values=[0.498047,0.14952] class=Point name=Unnamed dimension=2 values=[0.998047,0.816187] class=Point name=Unnamed dimension=2 values=[0.000976562,0.482853] class=Point name=Unnamed dimension=2 values=[0.500977,0.0260631] class=Point name=Unnamed dimension=2 values=[0.250977,0.69273] class=Point name=Unnamed dimension=2 values=[0.750977,0.359396] class=Point name=Unnamed dimension=2 values=[0.125977,0.248285] class=Point name=Unnamed dimension=2 values=[0.625977,0.914952] class=Point name=Unnamed dimension=2 values=[0.375977,0.581619] class=Point name=Unnamed dimension=2 values=[0.875977,0.137174] class=Point name=Unnamed dimension=2 values=[0.0634766,0.803841] class=Point name=Unnamed dimension=2 values=[0.563477,0.470508] class=Point name=Unnamed dimension=2 values=[0.313477,0.100137] class=Point name=Unnamed dimension=2 values=[0.813477,0.766804] class=Point name=Unnamed dimension=2 values=[0.188477,0.433471] class=Point name=Unnamed dimension=2 values=[0.688477,0.322359] class=Point name=Unnamed dimension=2 values=[0.438477,0.989026] class=Point name=Unnamed dimension=2 values=[0.938477,0.655693] class=Point name=Unnamed dimension=2 values=[0.0322266,0.211248] class=Point name=Unnamed dimension=2 values=[0.532227,0.877915] class=Point name=Unnamed dimension=2 values=[0.282227,0.544582] class=Point name=Unnamed dimension=2 values=[0.782227,0.0631001] class=Point name=Unnamed dimension=2 values=[0.157227,0.729767] class=Point name=Unnamed dimension=2 values=[0.657227,0.396433] class=Point name=Unnamed dimension=2 values=[0.407227,0.285322] class=Point name=Unnamed dimension=2 values=[0.907227,0.951989] class=Point name=Unnamed dimension=2 values=[0.0947266,0.618656] class=Point name=Unnamed dimension=2 values=[0.594727,0.174211] class=Point name=Unnamed dimension=2 values=[0.344727,0.840878] class=Point name=Unnamed dimension=2 values=[0.844727,0.507545] class=Point name=Unnamed dimension=2 values=[0.219727,0.0137174] class=Point name=Unnamed dimension=2 values=[0.719727,0.680384] class=Point name=Unnamed dimension=2 values=[0.469727,0.347051] class=Point name=Unnamed dimension=2 values=[0.969727,0.23594] class=Point name=Unnamed dimension=2 values=[0.0166016,0.902606] class=Point name=Unnamed dimension=2 values=[0.516602,0.569273] class=Point name=Unnamed dimension=2 values=[0.266602,0.124829] class=Point name=Unnamed dimension=2 values=[0.766602,0.791495] class=Point name=Unnamed dimension=2 values=[0.141602,0.458162] class=Point name=Unnamed dimension=2 values=[0.641602,0.0877915] class=Point name=Unnamed dimension=2 values=[0.391602,0.754458] class=Point name=Unnamed dimension=2 values=[0.891602,0.421125] class=Point name=Unnamed dimension=2 values=[0.0791016,0.310014] class=Point name=Unnamed dimension=2 values=[0.579102,0.97668] class=Point name=Unnamed dimension=2 values=[0.329102,0.643347] class=Point name=Unnamed dimension=2 values=[0.829102,0.198903] class=Point name=Unnamed dimension=2 values=[0.204102,0.865569] class=Point name=Unnamed dimension=2 values=[0.704102,0.532236] class=Point name=Unnamed dimension=2 values=[0.454102,0.0507545] class=Point name=Unnamed dimension=2 values=[0.954102,0.717421] class=Point name=Unnamed dimension=2 values=[0.0478516,0.384088] class=Point name=Unnamed dimension=2 values=[0.547852,0.272977] class=Point name=Unnamed dimension=2 values=[0.297852,0.939643] class=Point name=Unnamed dimension=2 values=[0.797852,0.60631] class=Point name=Unnamed dimension=2 values=[0.172852,0.161866] class=Point name=Unnamed dimension=2 values=[0.672852,0.828532] class=Point name=Unnamed dimension=2 values=[0.422852,0.495199] class=Point name=Unnamed dimension=2 values=[0.922852,0.00960219] class=Point name=Unnamed dimension=2 values=[0.110352,0.676269] class=Point name=Unnamed dimension=2 values=[0.610352,0.342936] class=Point name=Unnamed dimension=2 values=[0.360352,0.231824] class=Point name=Unnamed dimension=2 values=[0.860352,0.898491] class=Point name=Unnamed dimension=2 values=[0.235352,0.565158] class=Point name=Unnamed dimension=2 values=[0.735352,0.120713] class=Point name=Unnamed dimension=2 values=[0.485352,0.78738] class=Point name=Unnamed dimension=2 values=[0.985352,0.454047] class=Point name=Unnamed dimension=2 values=[0.00878906,0.0836763] class=Point name=Unnamed dimension=2 values=[0.508789,0.750343] class=Point name=Unnamed dimension=2 values=[0.258789,0.41701] class=Point name=Unnamed dimension=2 values=[0.758789,0.305898] class=Point name=Unnamed dimension=2 values=[0.133789,0.972565] class=Point name=Unnamed dimension=2 values=[0.633789,0.639232] class=Point name=Unnamed dimension=2 values=[0.383789,0.194787] class=Point name=Unnamed dimension=2 values=[0.883789,0.861454] class=Point name=Unnamed dimension=2 values=[0.0712891,0.528121] class=Point name=Unnamed dimension=2 values=[0.571289,0.0466392] class=Point name=Unnamed dimension=2 values=[0.321289,0.713306] class=Point name=Unnamed dimension=2 values=[0.821289,0.379973] class=Point name=Unnamed dimension=2 values=[0.196289,0.268861] class=Point name=Unnamed dimension=2 values=[0.696289,0.935528] class=Point name=Unnamed dimension=2 values=[0.446289,0.602195] class=Point name=Unnamed dimension=2 values=[0.946289,0.15775] class=Point name=Unnamed dimension=2 values=[0.0400391,0.824417] class=Point name=Unnamed dimension=2 values=[0.540039,0.491084] class=Point name=Unnamed dimension=2 values=[0.290039,0.0342936] class=Point name=Unnamed dimension=2 values=[0.790039,0.70096] class=Point name=Unnamed dimension=2 values=[0.165039,0.367627] class=Point name=Unnamed dimension=2 values=[0.665039,0.256516] class=Point name=Unnamed dimension=2 values=[0.415039,0.923182] class=Point name=Unnamed dimension=2 values=[0.915039,0.589849] class=Point name=Unnamed dimension=2 values=[0.102539,0.145405] class=Point name=Unnamed dimension=2 values=[0.602539,0.812071] class=Point name=Unnamed dimension=2 values=[0.352539,0.478738] class=Point name=Unnamed dimension=2 values=[0.852539,0.108368] class=Point name=Unnamed dimension=2 values=[0.227539,0.775034] class=Point name=Unnamed dimension=2 values=[0.727539,0.441701] class=Point name=Unnamed dimension=2 values=[0.477539,0.33059] class=Point name=Unnamed dimension=2 values=[0.977539,0.997257] class=Point name=Unnamed dimension=2 values=[0.0244141,0.663923] class=Point name=Unnamed dimension=2 values=[0.524414,0.219479] class=Point name=Unnamed dimension=2 values=[0.274414,0.886145] class=Point name=Unnamed dimension=2 values=[0.774414,0.552812] class=Point name=Unnamed dimension=2 values=[0.149414,0.0713306] class=Point name=Unnamed dimension=2 values=[0.649414,0.737997] class=Point name=Unnamed dimension=2 values=[0.399414,0.404664] class=Point name=Unnamed dimension=2 values=[0.899414,0.293553] class=Point name=Unnamed dimension=2 values=[0.0869141,0.960219] class=Point name=Unnamed dimension=2 values=[0.586914,0.626886] class=Point name=Unnamed dimension=2 values=[0.336914,0.182442] class=Point name=Unnamed dimension=2 values=[0.836914,0.849108] class=Point name=Unnamed dimension=2 values=[0.211914,0.515775] class=Point name=Unnamed dimension=2 values=[0.711914,0.0219479] class=Point name=Unnamed dimension=2 values=[0.461914,0.688615] class=Point name=Unnamed dimension=2 values=[0.961914,0.355281] class=Point name=Unnamed dimension=2 values=[0.0556641,0.24417] class=Point name=Unnamed dimension=2 values=[0.555664,0.910837] class=Point name=Unnamed dimension=2 values=[0.305664,0.577503] class=Point name=Unnamed dimension=2 values=[0.805664,0.133059] class=Point name=Unnamed dimension=2 values=[0.180664,0.799726] class=Point name=Unnamed dimension=2 values=[0.680664,0.466392] class=Point name=Unnamed dimension=2 values=[0.430664,0.0960219] class=Point name=Unnamed dimension=2 values=[0.930664,0.762689] class=Point name=Unnamed dimension=2 values=[0.118164,0.429355] class=Point name=Unnamed dimension=2 values=[0.618164,0.318244] class=Point name=Unnamed dimension=2 values=[0.368164,0.984911] class=Point name=Unnamed dimension=2 values=[0.868164,0.651578] class=Point name=Unnamed dimension=2 values=[0.243164,0.207133] class=Point name=Unnamed dimension=2 values=[0.743164,0.8738] class=Point name=Unnamed dimension=2 values=[0.493164,0.540466] class=Point name=Unnamed dimension=2 values=[0.993164,0.0589849] class=Point name=Unnamed dimension=2 values=[0.00488281,0.725652] class=Point name=Unnamed dimension=2 values=[0.504883,0.392318] class=Point name=Unnamed dimension=2 values=[0.254883,0.281207] class=Point name=Unnamed dimension=2 values=[0.754883,0.947874] class=Point name=Unnamed dimension=2 values=[0.129883,0.61454] class=Point name=Unnamed dimension=2 values=[0.629883,0.170096] class=Point name=Unnamed dimension=2 values=[0.379883,0.836763] class=Point name=Unnamed dimension=2 values=[0.879883,0.503429] class=Point name=Unnamed dimension=2 values=[0.0673828,0.00548697] class=Point name=Unnamed dimension=2 values=[0.567383,0.672154] class=Point name=Unnamed dimension=2 values=[0.317383,0.33882] class=Point name=Unnamed dimension=2 values=[0.817383,0.227709] class=Point name=Unnamed dimension=2 values=[0.192383,0.894376] class=Point name=Unnamed dimension=2 values=[0.692383,0.561043] class=Point name=Unnamed dimension=2 values=[0.442383,0.116598] class=Point name=Unnamed dimension=2 values=[0.942383,0.783265] class=Point name=Unnamed dimension=2 values=[0.0361328,0.449931] class=Point name=Unnamed dimension=2 values=[0.536133,0.079561] class=Point name=Unnamed dimension=2 values=[0.286133,0.746228] class=Point name=Unnamed dimension=2 values=[0.786133,0.412894] class=Point name=Unnamed dimension=2 values=[0.161133,0.301783] class=Point name=Unnamed dimension=2 values=[0.661133,0.96845] class=Point name=Unnamed dimension=2 values=[0.411133,0.635117] class=Point name=Unnamed dimension=2 values=[0.911133,0.190672] class=Point name=Unnamed dimension=2 values=[0.0986328,0.857339] class=Point name=Unnamed dimension=2 values=[0.598633,0.524005] class=Point name=Unnamed dimension=2 values=[0.348633,0.042524] class=Point name=Unnamed dimension=2 values=[0.848633,0.709191] class=Point name=Unnamed dimension=2 values=[0.223633,0.375857] class=Point name=Unnamed dimension=2 values=[0.723633,0.264746] class=Point name=Unnamed dimension=2 values=[0.473633,0.931413] class=Point name=Unnamed dimension=2 values=[0.973633,0.59808] class=Point name=Unnamed dimension=2 values=[0.0205078,0.153635] class=Point name=Unnamed dimension=2 values=[0.520508,0.820302] class=Point name=Unnamed dimension=2 values=[0.270508,0.486968] class=Point name=Unnamed dimension=2 values=[0.770508,0.0301783] class=Point name=Unnamed dimension=2 values=[0.145508,0.696845] class=Point name=Unnamed dimension=2 values=[0.645508,0.363512] class=Point name=Unnamed dimension=2 values=[0.395508,0.252401] class=Point name=Unnamed dimension=2 values=[0.895508,0.919067] class=Point name=Unnamed dimension=2 values=[0.0830078,0.585734] class=Point name=Unnamed dimension=2 values=[0.583008,0.141289] class=Point name=Unnamed dimension=2 values=[0.333008,0.807956] class=Point name=Unnamed dimension=2 values=[0.833008,0.474623] class=Point name=Unnamed dimension=2 values=[0.208008,0.104252] class=Point name=Unnamed dimension=2 values=[0.708008,0.770919] class=Point name=Unnamed dimension=2 values=[0.458008,0.437586] class=Point name=Unnamed dimension=2 values=[0.958008,0.326475] class=Point name=Unnamed dimension=2 values=[0.0517578,0.993141] class=Point name=Unnamed dimension=2 values=[0.551758,0.659808] class=Point name=Unnamed dimension=2 values=[0.301758,0.215364] class=Point name=Unnamed dimension=2 values=[0.801758,0.88203] class=Point name=Unnamed dimension=2 values=[0.176758,0.548697] class=Point name=Unnamed dimension=2 values=[0.676758,0.0672154] class=Point name=Unnamed dimension=2 values=[0.426758,0.733882] class=Point name=Unnamed dimension=2 values=[0.926758,0.400549] class=Point name=Unnamed dimension=2 values=[0.114258,0.289438] class=Point name=Unnamed dimension=2 values=[0.614258,0.956104] class=Point name=Unnamed dimension=2 values=[0.364258,0.622771] class=Point name=Unnamed dimension=2 values=[0.864258,0.178326] class=Point name=Unnamed dimension=2 values=[0.239258,0.844993] class=Point name=Unnamed dimension=2 values=[0.739258,0.51166] class=Point name=Unnamed dimension=2 values=[0.489258,0.0178326] class=Point name=Unnamed dimension=2 values=[0.989258,0.684499] class=Point name=Unnamed dimension=2 values=[0.0126953,0.351166] class=Point name=Unnamed dimension=2 values=[0.512695,0.240055] class=Point name=Unnamed dimension=2 values=[0.262695,0.906722] class=Point name=Unnamed dimension=2 values=[0.762695,0.573388] class=Point name=Unnamed dimension=2 values=[0.137695,0.128944] class=Point name=Unnamed dimension=2 values=[0.637695,0.79561] class=Point name=Unnamed dimension=2 values=[0.387695,0.462277] class=Point name=Unnamed dimension=2 values=[0.887695,0.0919067] class=Point name=Unnamed dimension=2 values=[0.0751953,0.758573] class=Point name=Unnamed dimension=2 values=[0.575195,0.42524] class=Point name=Unnamed dimension=2 values=[0.325195,0.314129] class=Point name=Unnamed dimension=2 values=[0.825195,0.980796] class=Point name=Unnamed dimension=2 values=[0.200195,0.647462] class=Point name=Unnamed dimension=2 values=[0.700195,0.203018] class=Point name=Unnamed dimension=2 values=[0.450195,0.869684] class=Point name=Unnamed dimension=2 values=[0.950195,0.536351] class=Point name=Unnamed dimension=2 values=[0.0439453,0.0548697] class=Point name=Unnamed dimension=2 values=[0.543945,0.721536] class=Point name=Unnamed dimension=2 values=[0.293945,0.388203] class=Point name=Unnamed dimension=2 values=[0.793945,0.277092] class=Point name=Unnamed dimension=2 values=[0.168945,0.943759] class=Point name=Unnamed dimension=2 values=[0.668945,0.610425] class=Point name=Unnamed dimension=2 values=[0.418945,0.165981] class=Point name=Unnamed dimension=2 values=[0.918945,0.832647] class=Point name=Unnamed dimension=2 values=[0.106445,0.499314] class=Point name=Unnamed dimension=2 values=[0.606445,0.000914495] class=Point name=Unnamed dimension=2 values=[0.356445,0.667581] class=Point name=Unnamed dimension=2 values=[0.856445,0.334248] class=Point name=Unnamed dimension=2 values=[0.231445,0.223137] class=Point name=Unnamed dimension=2 values=[0.731445,0.889803] class=Point name=Unnamed dimension=2 values=[0.481445,0.55647] class=Point name=Unnamed dimension=2 values=[0.981445,0.112026] class=Point name=Unnamed dimension=2 values=[0.0283203,0.778692] class=Point name=Unnamed dimension=2 values=[0.52832,0.445359] class=Point name=Unnamed dimension=2 values=[0.27832,0.0749886] class=Point name=Unnamed dimension=2 values=[0.77832,0.741655] class=Point name=Unnamed dimension=2 values=[0.15332,0.408322] class=Point name=Unnamed dimension=2 values=[0.65332,0.297211] class=Point name=Unnamed dimension=2 values=[0.40332,0.963877] class=Point name=Unnamed dimension=2 values=[0.90332,0.630544] class=Point name=Unnamed dimension=2 values=[0.0908203,0.1861] class=Point name=Unnamed dimension=2 values=[0.59082,0.852766] class=Point name=Unnamed dimension=2 values=[0.34082,0.519433] class=Point name=Unnamed dimension=2 values=[0.84082,0.0379515] class=Point name=Unnamed dimension=2 values=[0.21582,0.704618] class=Point name=Unnamed dimension=2 values=[0.71582,0.371285] class=Point name=Unnamed dimension=2 values=[0.46582,0.260174] class=Point name=Unnamed dimension=2 values=[0.96582,0.92684] class=Point name=Unnamed dimension=2 values=[0.0595703,0.593507] class=Point name=Unnamed dimension=2 values=[0.55957,0.149063] class=Point name=Unnamed dimension=2 values=[0.30957,0.815729] class=Point name=Unnamed dimension=2 values=[0.80957,0.482396] class=Point name=Unnamed dimension=2 values=[0.18457,0.0256059] class=Point name=Unnamed dimension=2 values=[0.68457,0.692273] class=Point name=Unnamed dimension=2 values=[0.43457,0.358939] class=Point name=Unnamed dimension=2 values=[0.93457,0.247828] class=Point name=Unnamed dimension=2 values=[0.12207,0.914495] class=Point name=Unnamed dimension=2 values=[0.62207,0.581161] class=Point name=Unnamed dimension=2 values=[0.37207,0.136717] class=Point name=Unnamed dimension=2 values=[0.87207,0.803384] class=Point name=Unnamed dimension=2 values=[0.24707,0.47005] class=Point name=Unnamed dimension=2 values=[0.74707,0.0996799] class=Point name=Unnamed dimension=2 values=[0.49707,0.766347] class=Point name=Unnamed dimension=2 values=[0.99707,0.433013] class=Point name=Unnamed dimension=2 values=[0.00292969,0.321902] class=Point name=Unnamed dimension=2 values=[0.50293,0.988569] class=Point name=Unnamed dimension=2 values=[0.25293,0.655235] class=Point name=Unnamed dimension=2 values=[0.75293,0.210791] class=Point name=Unnamed dimension=2 values=[0.12793,0.877458] class=Point name=Unnamed dimension=2 values=[0.62793,0.544124] class=Point name=Unnamed dimension=2 values=[0.37793,0.0626429] class=Point name=Unnamed dimension=2 values=[0.87793,0.72931] class=Point name=Unnamed dimension=2 values=[0.0654297,0.395976] class=Point name=Unnamed dimension=2 values=[0.56543,0.284865] class=Point name=Unnamed dimension=2 values=[0.31543,0.951532] class=Point name=Unnamed dimension=2 values=[0.81543,0.618198] class=Point name=Unnamed dimension=2 values=[0.19043,0.173754] class=Point name=Unnamed dimension=2 values=[0.69043,0.840421] class=Point name=Unnamed dimension=2 values=[0.44043,0.507087] class=Point name=Unnamed dimension=2 values=[0.94043,0.0132602] class=Point name=Unnamed dimension=2 values=[0.0341797,0.679927] class=Point name=Unnamed dimension=2 values=[0.53418,0.346594] class=Point name=Unnamed dimension=2 values=[0.28418,0.235482] class=Point name=Unnamed dimension=2 values=[0.78418,0.902149] class=Point name=Unnamed dimension=2 values=[0.15918,0.568816] class=Point name=Unnamed dimension=2 values=[0.65918,0.124371] class=Point name=Unnamed dimension=2 values=[0.40918,0.791038] class=Point name=Unnamed dimension=2 values=[0.90918,0.457705] class=Point name=Unnamed dimension=2 values=[0.0966797,0.0873342] class=Point name=Unnamed dimension=2 values=[0.59668,0.754001] class=Point name=Unnamed dimension=2 values=[0.34668,0.420668] class=Point name=Unnamed dimension=2 values=[0.84668,0.309556] class=Point name=Unnamed dimension=2 values=[0.22168,0.976223] class=Point name=Unnamed dimension=2 values=[0.72168,0.64289] class=Point name=Unnamed dimension=2 values=[0.47168,0.198445] class=Point name=Unnamed dimension=2 values=[0.97168,0.865112] class=Point name=Unnamed dimension=2 values=[0.0185547,0.531779] class=Point name=Unnamed dimension=2 values=[0.518555,0.0502972] class=Point name=Unnamed dimension=2 values=[0.268555,0.716964] class=Point name=Unnamed dimension=2 values=[0.768555,0.383631] class=Point name=Unnamed dimension=2 values=[0.143555,0.272519] class=Point name=Unnamed dimension=2 values=[0.643555,0.939186] class=Point name=Unnamed dimension=2 values=[0.393555,0.605853] class=Point name=Unnamed dimension=2 values=[0.893555,0.161408] class=Point name=Unnamed dimension=2 values=[0.0810547,0.828075] class=Point name=Unnamed dimension=2 values=[0.581055,0.494742] class=Point name=Unnamed dimension=2 values=[0.331055,0.00914495] class=Point name=Unnamed dimension=2 values=[0.831055,0.675812] class=Point name=Unnamed dimension=2 values=[0.206055,0.342478] class=Point name=Unnamed dimension=2 values=[0.706055,0.231367] class=Point name=Unnamed dimension=2 values=[0.456055,0.898034] class=Point name=Unnamed dimension=2 values=[0.956055,0.564701] class=Point name=Unnamed dimension=2 values=[0.0498047,0.120256] class=Point name=Unnamed dimension=2 values=[0.549805,0.786923] class=Point name=Unnamed dimension=2 values=[0.299805,0.453589] class=Point name=Unnamed dimension=2 values=[0.799805,0.083219] class=Point name=Unnamed dimension=2 values=[0.174805,0.749886] class=Point name=Unnamed dimension=2 values=[0.674805,0.416552] class=Point name=Unnamed dimension=2 values=[0.424805,0.305441] class=Point name=Unnamed dimension=2 values=[0.924805,0.972108] class=Point name=Unnamed dimension=2 values=[0.112305,0.638775] class=Point name=Unnamed dimension=2 values=[0.612305,0.19433] class=Point name=Unnamed dimension=2 values=[0.362305,0.860997] class=Point name=Unnamed dimension=2 values=[0.862305,0.527663] class=Point name=Unnamed dimension=2 values=[0.237305,0.046182] class=Point name=Unnamed dimension=2 values=[0.737305,0.712849] class=Point name=Unnamed dimension=2 values=[0.487305,0.379515] class=Point name=Unnamed dimension=2 values=[0.987305,0.268404] class=Point name=Unnamed dimension=2 values=[0.0107422,0.935071] class=Point name=Unnamed dimension=2 values=[0.510742,0.601738] class=Point name=Unnamed dimension=2 values=[0.260742,0.157293] class=Point name=Unnamed dimension=2 values=[0.760742,0.82396] class=Point name=Unnamed dimension=2 values=[0.135742,0.490626] class=Point name=Unnamed dimension=2 values=[0.635742,0.0338363] class=Point name=Unnamed dimension=2 values=[0.385742,0.700503] class=Point name=Unnamed dimension=2 values=[0.885742,0.36717] class=Point name=Unnamed dimension=2 values=[0.0732422,0.256059] class=Point name=Unnamed dimension=2 values=[0.573242,0.922725] class=Point name=Unnamed dimension=2 values=[0.323242,0.589392] class=Point name=Unnamed dimension=2 values=[0.823242,0.144947] class=Point name=Unnamed dimension=2 values=[0.198242,0.811614] class=Point name=Unnamed dimension=2 values=[0.698242,0.478281] class=Point name=Unnamed dimension=2 values=[0.448242,0.10791] class=Point name=Unnamed dimension=2 values=[0.948242,0.774577] class=Point name=Unnamed dimension=2 values=[0.0419922,0.441244] class=Point name=Unnamed dimension=2 values=[0.541992,0.330133] class=Point name=Unnamed dimension=2 values=[0.291992,0.996799] class=Point name=Unnamed dimension=2 values=[0.791992,0.663466] class=Point name=Unnamed dimension=2 values=[0.166992,0.219021] class=Point name=Unnamed dimension=2 values=[0.666992,0.885688] class=Point name=Unnamed dimension=2 values=[0.416992,0.552355] class=Point name=Unnamed dimension=2 values=[0.916992,0.0708733] class=Point name=Unnamed dimension=2 values=[0.104492,0.73754] class=Point name=Unnamed dimension=2 values=[0.604492,0.404207] class=Point name=Unnamed dimension=2 values=[0.354492,0.293096] class=Point name=Unnamed dimension=2 values=[0.854492,0.959762] class=Point name=Unnamed dimension=2 values=[0.229492,0.626429] class=Point name=Unnamed dimension=2 values=[0.729492,0.181984] class=Point name=Unnamed dimension=2 values=[0.479492,0.848651] class=Point name=Unnamed dimension=2 values=[0.979492,0.515318] class=Point name=Unnamed dimension=2 values=[0.0263672,0.0214906] class=Point name=Unnamed dimension=2 values=[0.526367,0.688157] class=Point name=Unnamed dimension=2 values=[0.276367,0.354824] class=Point name=Unnamed dimension=2 values=[0.776367,0.243713] class=Point name=Unnamed dimension=2 values=[0.151367,0.91038] class=Point name=Unnamed dimension=2 values=[0.651367,0.577046] class=Point name=Unnamed dimension=2 values=[0.401367,0.132602] class=Point name=Unnamed dimension=2 values=[0.901367,0.799268] class=Point name=Unnamed dimension=2 values=[0.0888672,0.465935] class=Point name=Unnamed dimension=2 values=[0.588867,0.0955647] class=Point name=Unnamed dimension=2 values=[0.338867,0.762231] class=Point name=Unnamed dimension=2 values=[0.838867,0.428898] class=Point name=Unnamed dimension=2 values=[0.213867,0.317787] class=Point name=Unnamed dimension=2 values=[0.713867,0.984454] class=Point name=Unnamed dimension=2 values=[0.463867,0.65112] class=Point name=Unnamed dimension=2 values=[0.963867,0.206676] class=Point name=Unnamed dimension=2 values=[0.0576172,0.873342] class=Point name=Unnamed dimension=2 values=[0.557617,0.540009] class=Point name=Unnamed dimension=2 values=[0.307617,0.0585277] class=Point name=Unnamed dimension=2 values=[0.807617,0.725194] class=Point name=Unnamed dimension=2 values=[0.182617,0.391861] class=Point name=Unnamed dimension=2 values=[0.682617,0.28075] class=Point name=Unnamed dimension=2 values=[0.432617,0.947417] class=Point name=Unnamed dimension=2 values=[0.932617,0.614083] class=Point name=Unnamed dimension=2 values=[0.120117,0.169639] class=Point name=Unnamed dimension=2 values=[0.620117,0.836305] class=Point name=Unnamed dimension=2 values=[0.370117,0.502972] class=Point name=Unnamed dimension=2 values=[0.870117,0.00502972] class=Point name=Unnamed dimension=2 values=[0.245117,0.671696] class=Point name=Unnamed dimension=2 values=[0.745117,0.338363] class=Point name=Unnamed dimension=2 values=[0.495117,0.227252] class=Point name=Unnamed dimension=2 values=[0.995117,0.893919] class=Point name=Unnamed dimension=2 values=[0.00683594,0.560585] class=Point name=Unnamed dimension=2 values=[0.506836,0.116141] class=Point name=Unnamed dimension=2 values=[0.256836,0.782807] class=Point name=Unnamed dimension=2 values=[0.756836,0.449474] class=Point name=Unnamed dimension=2 values=[0.131836,0.0791038] class=Point name=Unnamed dimension=2 values=[0.631836,0.74577] class=Point name=Unnamed dimension=2 values=[0.381836,0.412437] class=Point name=Unnamed dimension=2 values=[0.881836,0.301326] class=Point name=Unnamed dimension=2 values=[0.0693359,0.967993] class=Point name=Unnamed dimension=2 values=[0.569336,0.634659] class=Point name=Unnamed dimension=2 values=[0.319336,0.190215] class=Point name=Unnamed dimension=2 values=[0.819336,0.856882] class=Point name=Unnamed dimension=2 values=[0.194336,0.523548] class=Point name=Unnamed dimension=2 values=[0.694336,0.0420668] class=Point name=Unnamed dimension=2 values=[0.444336,0.708733] class=Point name=Unnamed dimension=2 values=[0.944336,0.3754] class=Point name=Unnamed dimension=2 values=[0.0380859,0.264289] class=Point name=Unnamed dimension=2 values=[0.538086,0.930956] class=Point name=Unnamed dimension=2 values=[0.288086,0.597622] class=Point name=Unnamed dimension=2 values=[0.788086,0.153178] class=Point name=Unnamed dimension=2 values=[0.163086,0.819845] class=Point name=Unnamed dimension=2 values=[0.663086,0.486511] class=Point name=Unnamed dimension=2 values=[0.413086,0.0297211] class=Point name=Unnamed dimension=2 values=[0.913086,0.696388] class=Point name=Unnamed dimension=2 values=[0.100586,0.363054] class=Point name=Unnamed dimension=2 values=[0.600586,0.251943] class=Point name=Unnamed dimension=2 values=[0.350586,0.91861] class=Point name=Unnamed dimension=2 values=[0.850586,0.585277] class=Point name=Unnamed dimension=2 values=[0.225586,0.140832] class=Point name=Unnamed dimension=2 values=[0.725586,0.807499] class=Point name=Unnamed dimension=2 values=[0.475586,0.474166] class=Point name=Unnamed dimension=2 values=[0.975586,0.103795] class=Point name=Unnamed dimension=2 values=[0.0224609,0.770462] class=Point name=Unnamed dimension=2 values=[0.522461,0.437128] class=Point name=Unnamed dimension=2 values=[0.272461,0.326017] class=Point name=Unnamed dimension=2 values=[0.772461,0.992684] class=Point name=Unnamed dimension=2 values=[0.147461,0.659351] class=Point name=Unnamed dimension=2 values=[0.647461,0.214906] class=Point name=Unnamed dimension=2 values=[0.397461,0.881573] class=Point name=Unnamed dimension=2 values=[0.897461,0.54824] class=Point name=Unnamed dimension=2 values=[0.0849609,0.0667581] class=Point name=Unnamed dimension=2 values=[0.584961,0.733425] class=Point name=Unnamed dimension=2 values=[0.334961,0.400091] class=Point name=Unnamed dimension=2 values=[0.834961,0.28898] class=Point name=Unnamed dimension=2 values=[0.209961,0.955647] class=Point name=Unnamed dimension=2 values=[0.709961,0.622314] class=Point name=Unnamed dimension=2 values=[0.459961,0.177869] class=Point name=Unnamed dimension=2 values=[0.959961,0.844536] class=Point name=Unnamed dimension=2 values=[0.0537109,0.511203] class=Point name=Unnamed dimension=2 values=[0.553711,0.0173754] class=Point name=Unnamed dimension=2 values=[0.303711,0.684042] class=Point name=Unnamed dimension=2 values=[0.803711,0.350709] class=Point name=Unnamed dimension=2 values=[0.178711,0.239598] class=Point name=Unnamed dimension=2 values=[0.678711,0.906264] class=Point name=Unnamed dimension=2 values=[0.428711,0.572931] class=Point name=Unnamed dimension=2 values=[0.928711,0.128487] class=Point name=Unnamed dimension=2 values=[0.116211,0.795153] class=Point name=Unnamed dimension=2 values=[0.616211,0.46182] class=Point name=Unnamed dimension=2 values=[0.366211,0.0914495] class=Point name=Unnamed dimension=2 values=[0.866211,0.758116] class=Point name=Unnamed dimension=2 values=[0.241211,0.424783] class=Point name=Unnamed dimension=2 values=[0.741211,0.313672] class=Point name=Unnamed dimension=2 values=[0.491211,0.980338] class=Point name=Unnamed dimension=2 values=[0.991211,0.647005] class=Point name=Unnamed dimension=2 values=[0.0146484,0.202561] class=Point name=Unnamed dimension=2 values=[0.514648,0.869227] class=Point name=Unnamed dimension=2 values=[0.264648,0.535894] class=Point name=Unnamed dimension=2 values=[0.764648,0.0544124] class=Point name=Unnamed dimension=2 values=[0.139648,0.721079] class=Point name=Unnamed dimension=2 values=[0.639648,0.387746] class=Point name=Unnamed dimension=2 values=[0.389648,0.276635] class=Point name=Unnamed dimension=2 values=[0.889648,0.943301] class=Point name=Unnamed dimension=2 values=[0.0771484,0.609968] class=Point name=Unnamed dimension=2 values=[0.577148,0.165524] class=Point name=Unnamed dimension=2 values=[0.327148,0.83219] class=Point name=Unnamed dimension=2 values=[0.827148,0.498857] class=Point name=Unnamed dimension=2 values=[0.202148,0.00365798] class=Point name=Unnamed dimension=2 values=[0.702148,0.670325] class=Point name=Unnamed dimension=2 values=[0.452148,0.336991] class=Point name=Unnamed dimension=2 values=[0.952148,0.22588] class=Point name=Unnamed dimension=2 values=[0.0458984,0.892547] class=Point name=Unnamed dimension=2 values=[0.545898,0.559214] class=Point name=Unnamed dimension=2 values=[0.295898,0.114769] class=Point name=Unnamed dimension=2 values=[0.795898,0.781436] class=Point name=Unnamed dimension=2 values=[0.170898,0.448102] class=Point name=Unnamed dimension=2 values=[0.670898,0.0777321] class=Point name=Unnamed dimension=2 values=[0.420898,0.744399] class=Point name=Unnamed dimension=2 values=[0.920898,0.411065] class=Point name=Unnamed dimension=2 values=[0.108398,0.299954] class=Point name=Unnamed dimension=2 values=[0.608398,0.966621] class=Point name=Unnamed dimension=2 values=[0.358398,0.633288] class=Point name=Unnamed dimension=2 values=[0.858398,0.188843] class=Point name=Unnamed dimension=2 values=[0.233398,0.85551] class=Point name=Unnamed dimension=2 values=[0.733398,0.522176] class=Point name=Unnamed dimension=2 values=[0.483398,0.040695] class=Point name=Unnamed dimension=2 values=[0.983398,0.707362] class=Point name=Unnamed dimension=2 values=[0.0302734,0.374028] class=Point name=Unnamed dimension=2 values=[0.530273,0.262917] class=Point name=Unnamed dimension=2 values=[0.280273,0.929584] class=Point name=Unnamed dimension=2 values=[0.780273,0.596251] class=Point name=Unnamed dimension=2 values=[0.155273,0.151806] class=Point name=Unnamed dimension=2 values=[0.655273,0.818473] class=Point name=Unnamed dimension=2 values=[0.405273,0.485139] class=Point name=Unnamed dimension=2 values=[0.905273,0.0283493] class=Point name=Unnamed dimension=2 values=[0.0927734,0.695016] sample size=1000 relative error to Pi=0.00203952 openturns-1.9/lib/test/t_RiceFactory_std.cxx000066400000000000000000000046441307543307100213130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Rice for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Rice distribution(0.5, 1.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); RiceFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; Rice estimatedRice(factory.buildAsRice(sample)); fullprint << "Rice =" << distribution << std::endl; fullprint << "Estimated rice=" << estimatedRice << std::endl; estimatedRice = factory.buildAsRice(distribution.getParameter()); fullprint << "Rice from parameters=" << estimatedRice << std::endl; estimatedRice = factory.buildAsRice(); fullprint << "Default rice=" << estimatedRice << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RiceFactory_std.expout000066400000000000000000000010721307543307100220250ustar00rootroot00000000000000Distribution =class=Rice name=Rice dimension=1 sigma=0.5 nu=1.5 Estimated distribution=class=Rice name=Rice dimension=1 sigma=0.498532 nu=1.50235 Distribution from parameters=class=Rice name=Rice dimension=1 sigma=0.5 nu=1.5 Default distribution=class=Rice name=Rice dimension=1 sigma=1 nu=0 Rice =class=Rice name=Rice dimension=1 sigma=0.5 nu=1.5 Estimated rice=class=Rice name=Rice dimension=1 sigma=0.498532 nu=1.50235 Rice from parameters=class=Rice name=Rice dimension=1 sigma=0.5 nu=1.5 Default rice=class=Rice name=Rice dimension=1 sigma=1 nu=0 openturns-1.9/lib/test/t_Rice_std.cxx000066400000000000000000000176511307543307100177650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Rice for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Rice { public: TestObject() : Rice(5, 4) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Rice distribution(5.0, 4.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { RandomGenerator::SetSeed(0); fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 10.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << Point(1, (distribution.computePDF( point + Point(1, eps) ) - distribution.computePDF( point + Point(1, -eps) )) / (2.0 * eps)) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; // Complex CF = distribution.computeCharacteristicFunction( point[0] ); // fullprint << "characteristic function=" << CF << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Rice(distribution.getSigma() + eps, distribution.getNu()).computePDF(point) - Rice(distribution.getSigma() - eps, distribution.getNu()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Rice(distribution.getSigma(), distribution.getNu() + eps).computePDF(point) - Rice(distribution.getSigma(), distribution.getNu() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Rice(distribution.getSigma() + eps, distribution.getNu()).computeCDF(point) - Rice(distribution.getSigma() - eps, distribution.getNu()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Rice(distribution.getSigma(), distribution.getNu() + eps).computeCDF(point) - Rice(distribution.getSigma(), distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Rice::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar nu = distribution.getNu(); fullprint << "nu=" << nu << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Rice_std.expout000066400000000000000000000110001307543307100204650ustar00rootroot00000000000000Testing class Rice checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Rice name=Rice dimension=1 sigma=5 nu=4 streamObject(const T & anObject) class=Rice name=Rice dimension=1 sigma=5 nu=4 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Rice name=Rice dimension=1 sigma=5 nu=4 Distribution Rice(sigma = 5, nu = 4) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[9.46867] oneSample first=class=Point name=Unnamed dimension=1 values=[6.29291] last=class=Point name=Unnamed dimension=1 values=[2.16415] mean=class=Point name=Unnamed dimension=1 values=[7.26091] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13.4082] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[10] ddf =class=Point name=Unnamed dimension=1 values=[-0.0138143] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0138143] log pdf=-2.67669 pdf =0.0687907 pdf (FD)=0.0687907 cdf=0.778505 ccdf=0.221495 survival=0.221495 Inverse survival=class=Point name=Unnamed dimension=1 values=[1.87781] Survival(inverse survival)=0.95 pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.00902981,0.0060508] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.103467,-0.0426433] quantile=class=Point name=Unnamed dimension=1 values=[13.9273] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.68836] upper bound=class=Point name=Unnamed dimension=1 values=[14.2519] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Rice(sigma = 5, nu = 4)) gradientImplementation=MinimumVolumeLevelSetGradient(Rice(sigma = 5, nu = 4)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Rice(sigma = 5, nu = 4)) level=3.91877 beta=0.0198656 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1.31981] upper bound=class=Point name=Unnamed dimension=1 values=[15.3859] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[13.9273] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1.87781] upper bound=class=Point name=Unnamed dimension=1 values=[63] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[7.23115] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13.7104] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[sigma : 5, nu : 4]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[7.23115] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[66] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[704.457] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[8456] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[111488] Standard representative=Rice(sigma = 5, nu = 4) nu=4 standard deviation=class=Point name=Unnamed dimension=1 values=[3.70276] skewness=class=Point name=Unnamed dimension=1 values=[0.569607] kurtosis=class=Point name=Unnamed dimension=1 values=[3.10633] openturns-1.9/lib/test/t_RungeKutta_std.cxx000066400000000000000000000044721307543307100211710ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Secant for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inputVariables(3); inputVariables[0] = "t"; inputVariables[1] = "y0"; inputVariables[2] = "y1"; Description outputVariables(2); outputVariables[0] = "dy0"; outputVariables[1] = "dy1"; Description formulas(2); formulas[0] = "t - y0"; formulas[1] = "y1 + t^2"; Function f(inputVariables, outputVariables, formulas); VertexValueFunction phi(f); RungeKutta solver(phi); fullprint << "ODE solver=" << solver << std::endl; Point initialState(2); initialState[0] = 1.0; initialState[1] = -1.0; UnsignedInteger nt = 100; Point timeGrid(nt); for (UnsignedInteger i = 0; i < nt; ++i) { timeGrid[i] = pow(i, 2.0) / pow(nt - 1.0, 2.0); } fullprint << "time grid=" << timeGrid << std::endl; Sample result(solver.solve(initialState, timeGrid)); fullprint << "result=" << result << std::endl; fullprint << "last value=" << result[nt - 1] << std::endl; Point ref(2); Scalar t = timeGrid[nt - 1]; ref[0] = -1.0 + t + 2.0 * exp(-t); ref[1] = -2.0 + -2.0 * t - t * t + exp(t); fullprint << "ref. value=" << ref << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_RungeKutta_std.expout000066400000000000000000000062361307543307100217130ustar00rootroot00000000000000ODE solver=class=RungeKutta time grid=class=Point name=Unnamed dimension=100 values=[0,0.00010203,0.000408122,0.000918274,0.00163249,0.00255076,0.00367309,0.00499949,0.00652995,0.00826446,0.010203,0.0123457,0.0146924,0.0172431,0.019998,0.0229568,0.0261198,0.0294868,0.0330579,0.036833,0.0408122,0.0449954,0.0493827,0.0539741,0.0587695,0.063769,0.0689726,0.0743802,0.0799918,0.0858076,0.0918274,0.0980512,0.104479,0.111111,0.117947,0.124987,0.132231,0.13968,0.147332,0.155188,0.163249,0.171513,0.179982,0.188654,0.197531,0.206612,0.215896,0.225385,0.235078,0.244975,0.255076,0.265381,0.27589,0.286603,0.297521,0.308642,0.319967,0.331497,0.34323,0.355168,0.367309,0.379655,0.392205,0.404959,0.417917,0.431078,0.444444,0.458014,0.471789,0.485767,0.499949,0.514335,0.528926,0.54372,0.558718,0.573921,0.589328,0.604938,0.620753,0.636772,0.652995,0.669421,0.686052,0.702887,0.719927,0.73717,0.754617,0.772268,0.790123,0.808183,0.826446,0.844914,0.863585,0.882461,0.901541,0.920824,0.940312,0.960004,0.9799,1] result=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[1,-1],[0.999898,-1.0001],[0.999592,-1.00041],[0.999083,-1.00092],[0.99837,-1.00163],[0.997456,-1.00255],[0.99634,-1.00368],[0.995025,-1.00501],[0.993513,-1.00655],[0.991804,-1.0083],[0.989901,-1.01025],[0.987806,-1.01242],[0.985522,-1.0148],[0.983052,-1.01739],[0.980399,-1.0202],[0.977566,-1.02322],[0.974557,-1.02646],[0.971374,-1.02992],[0.968023,-1.0336],[0.964507,-1.0375],[0.960831,-1.04163],[0.956999,-1.04599],[0.953016,-1.05058],[0.948887,-1.0554],[0.944618,-1.06046],[0.940212,-1.06576],[0.935677,-1.0713],[0.931018,-1.07708],[0.92624,-1.0831],[0.921349,-1.08938],[0.916353,-1.09591],[0.911256,-1.1027],[0.906066,-1.10974],[0.90079,-1.11705],[0.895433,-1.12462],[0.890004,-1.13246],[0.884508,-1.14058],[0.878953,-1.14896],[0.873347,-1.15763],[0.867696,-1.16658],[0.862009,-1.17582],[0.856292,-1.18534],[0.850553,-1.19516],[0.8448,-1.20528],[0.83904,-1.21569],[0.833283,-1.22641],[0.827534,-1.23743],[0.821803,-1.24876],[0.816096,-1.26041],[0.810423,-1.27237],[0.804791,-1.28466],[0.799208,-1.29726],[0.793683,-1.31019],[0.788222,-1.32345],[0.782835,-1.33704],[0.777529,-1.35097],[0.772313,-1.36523],[0.767194,-1.37983],[0.76218,-1.39477],[0.757279,-1.41006],[0.7525,-1.42569],[0.74785,-1.44167],[0.743336,-1.45799],[0.738967,-1.47467],[0.734751,-1.49169],[0.730694,-1.50907],[0.726805,-1.5268],[0.723091,-1.54487],[0.719559,-1.5633],[0.716217,-1.58208],[0.713072,-1.60121],[0.710131,-1.62068],[0.707401,-1.64051],[0.704889,-1.66067],[0.702602,-1.68117],[0.700546,-1.70201],[0.698728,-1.72319],[0.697155,-1.74469],[0.695832,-1.76651],[0.694767,-1.78865],[0.693964,-1.81111],[0.693431,-1.83386],[0.693172,-1.85691],[0.693194,-1.88025],[0.693503,-1.90387],[0.694102,-1.92775],[0.694998,-1.95188],[0.696196,-1.97626],[0.697701,-2.00087],[0.699517,-2.0257],[0.70165,-2.05072],[0.704103,-2.07593],[0.706881,-2.1013],[0.709988,-2.12682],[0.713428,-2.15246],[0.717206,-2.17821],[0.721324,-2.20403],[0.725787,-2.22991],[0.730597,-2.25581],[0.735759,-2.28172]] last value=class=Point name=Unnamed dimension=2 values=[0.735759,-2.28172] ref. value=class=Point name=Unnamed dimension=2 values=[0.735759,-2.28172] openturns-1.9/lib/test/t_SORM_std.cxx000066400000000000000000000115541307543307100176570ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of SORM class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); mean[0] = 50.0; // E mean[1] = 1.0; // F mean[2] = 10.0; // L mean[3] = 5.0; // I Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create an Event from this RandomVector */ Event myEvent(output, Less(), -3.0); /* We create a NearestPoint algorithm */ AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); fullprint << "myAbdoRackwitz=" << myAbdoRackwitz << std::endl; /* We create a SORM algorithm */ /* The first parameter is an OptimizationAlgorithm */ /* The second parameter is an event */ /* The third parameter is a starting point for the design point research */ SORM myAlgo(myAbdoRackwitz, myEvent, mean); /* Perform the simulation */ myAlgo.run(); /* Stream out the result */ SORMResult result(myAlgo.getResult()); UnsignedInteger digits = 4; fullprint << "Breitung event probability=" << result.getEventProbabilityBreitung() << std::endl; fullprint << "Breitung generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndexBreitung() << std::endl; fullprint << "HohenBichler event probability=" << std::setprecision(digits) << result.getEventProbabilityHohenBichler() << std::endl; fullprint << "HohenBichler generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndexHohenBichler() << std::endl; fullprint << "Tvedt event probability=" << std::setprecision(digits) << result.getEventProbabilityTvedt() << std::endl; fullprint << "Tvedt generalized reliability index=" << std::setprecision(digits) << result.getGeneralisedReliabilityIndexTvedt() << std::endl; fullprint << "sorted curvatures=" << printPoint(result.getSortedCurvatures(), digits) << std::endl; fullprint << "standard space design point=" << printPoint(result.getStandardSpaceDesignPoint(), digits) << std::endl; fullprint << "physical space design point=" << printPoint(result.getPhysicalSpaceDesignPoint(), digits) << std::endl; fullprint << "is standard point origin in failure space? " << (result.getIsStandardPointOriginInFailureSpace() ? "true" : "false") << std::endl; fullprint << "importance factors=" << printPoint(result.getImportanceFactors(), digits) << std::endl; fullprint << "importance factors (classical)=" << printPoint(result.getImportanceFactors(AnalyticalResult::CLASSICAL), digits) << std::endl; fullprint << "Hasofer reliability index=" << std::setprecision(digits) << result.getHasoferReliabilityIndex() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SORM_std.expout000066400000000000000000000025771307543307100204060ustar00rootroot00000000000000myAbdoRackwitz=class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 Breitung event probability=0.148955 Breitung generalized reliability index=1.041 HohenBichler event probability=0.1458 HohenBichler generalized reliability index=1.055 Tvedt event probability=0.1451 Tvedt generalized reliability index=1.058 sorted curvatures=[-0.0416,-0.0004,0.0000,0.1503] standard space design point=[-0.0310,0.8419,0.4454,-0.3322] physical space design point=[49.9690,1.8419,10.4454,4.6678] is standard point origin in failure space? false importance factors=[0.0009,0.6959,0.1948,0.1084] importance factors (classical)=[0.0009,0.6959,0.1948,0.1084] Hasofer reliability index=1.009 openturns-1.9/lib/test/t_SQP_std.cxx000066400000000000000000000103111307543307100175300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SQP for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk(((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i])); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test function operator () Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1+2*x2-3*x3+4*x4")); // Add a finite difference gradient to the function, NonCenteredFiniteDifferenceGradient myGradient(1e-7, levelFunction.getEvaluation()); /** Substitute the gradient */ levelFunction.setGradient(new NonCenteredFiniteDifferenceGradient(myGradient)); Point startingPoint(4, 0.0); SQP mySQPAlgorithm(OptimizationProblem(levelFunction, 3.0)); mySQPAlgorithm.setStartingPoint(startingPoint); fullprint << "mySQPAlgorithm=" << mySQPAlgorithm << std::endl; mySQPAlgorithm.run(); fullprint << "result=" << printPoint(mySQPAlgorithm.getResult().getOptimalPoint(), 4) << std::endl; fullprint << "multipliers=" << printPoint(mySQPAlgorithm.getResult().getLagrangeMultipliers(), 4) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } try { Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4")); // Add a finite difference gradient to the function, as SQP algorithm // needs it CenteredFiniteDifferenceGradient myGradient(1e-7, levelFunction.getEvaluation()); /** Substitute the gradient */ levelFunction.setGradient(new CenteredFiniteDifferenceGradient(myGradient)); // Add a finite difference hessian to the function, as SQP algorithm // needs it CenteredFiniteDifferenceHessian myHessian(1e-3, levelFunction.getEvaluation()); /** Substitute the hessian */ levelFunction.setHessian(new CenteredFiniteDifferenceHessian(myHessian)); Point startingPoint(4, 0.0); SQP mySQPAlgorithm(OptimizationProblem(levelFunction, 3.0)); mySQPAlgorithm.setStartingPoint(startingPoint); fullprint << "mySQPAlgorithm=" << mySQPAlgorithm << std::endl; mySQPAlgorithm.run(); OptimizationResult result(mySQPAlgorithm.getResult()); fullprint << "result = " << printPoint(result.getOptimalPoint(), 4) << std::endl; fullprint << "multipliers = " << printPoint(result.getLagrangeMultipliers(), 4) << std::endl; Graph convergence(result.drawErrorHistory()); fullprint << "evaluation calls number=" << levelFunction.getEvaluationCallsNumber() << std::endl; fullprint << "gradient calls number=" << levelFunction.getGradientCallsNumber() << std::endl; fullprint << "hessian calls number=" << levelFunction.getHessianCallsNumber() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SQP_std.expout000066400000000000000000000054631307543307100202660ustar00rootroot00000000000000mySQPAlgorithm=class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result=[0.1000,0.2000,-0.3000,0.4000] multipliers=[-0.1000] mySQPAlgorithm=class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[0.001,0.001,0.001,0.001] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result = [0.1297,-0.1645,-0.6181,-0.3290] multipliers = [-0.1331] evaluation calls number=169 gradient calls number=0 hessian calls number=0 openturns-1.9/lib/test/t_Sample_computation.cxx000066400000000000000000000131631307543307100220660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Sample sample(4, 3); sample[0][0] = 1; sample[0][1] = 0; sample[0][2] = 9; sample[1][0] = 2; sample[1][1] = 3; sample[1][2] = 5; sample[2][0] = 5; sample[2][1] = 1; sample[2][2] = 8; sample[3][0] = 6; sample[3][1] = 7; sample[3][2] = 2; fullprint << "sample=" << sample << std::endl; fullprint << "min=" << sample.getMin() << std::endl; fullprint << "max=" << sample.getMax() << std::endl; fullprint << "mean=" << sample.computeMean() << std::endl; fullprint << "covariance=" << sample.computeCovariance() << std::endl; fullprint << "standard deviation=" << sample.computeStandardDeviation() << std::endl; fullprint << "standard deviation per component=" << sample.computeStandardDeviationPerComponent() << std::endl; fullprint << "Pearson correlation=" << sample.computePearsonCorrelation() << std::endl; fullprint << "Spearman correlation=" << sample.computeSpearmanCorrelation() << std::endl; fullprint << "Kendall tau=" << sample.computeKendallTau() << std::endl; fullprint << "range per component=" << sample.computeRange() << std::endl; fullprint << "median per component=" << sample.computeMedian() << std::endl; fullprint << "Variance=" << sample.computeVariance() << std::endl; fullprint << "Skewness=" << sample.computeSkewness() << std::endl; fullprint << "Kurtosis=" << sample.computeKurtosis() << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) fullprint << "Centered moment of order " << i << "=" << sample.computeCenteredMoment(i) << std::endl; fullprint << "Marginal 1=" << sample.getMarginal(1) << std::endl; Indices indices(2); indices[0] = 2; indices[1] = 0; fullprint << "Marginal [2, 0]=" << sample.getMarginal(indices) << std::endl; fullprint << "Rank=" << sample.rank() << std::endl; fullprint << "Sort=" << sample.sort() << std::endl; fullprint << "Sort according to component 0=" << sample.sortAccordingToAComponent(0) << std::endl; Scalar prob = 0.25; fullprint << "Quantile per component(" << prob << ")=" << sample.computeQuantilePerComponent(prob) << std::endl; // fullprint << "Quantile(" << prob << ")=" << sample.computeQuantile(prob) << std::endl; Point pointCDF(sample.getDimension(), 0.25); fullprint << "Empirical CDF(" << pointCDF << "=" << sample.computeEmpiricalCDF(pointCDF) << std::endl; UnsignedInteger dim = 3; CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.25; } CorrelationMatrix Rtmp(dim); for (UnsignedInteger i = 0; i < dim; i++) { for (UnsignedInteger j = 0; j < i; j++) { Rtmp(i, j) = 6.0 * asin(R(i, j) / 2.0) / M_PI; } } fullprint << "Pearson correlation (exact)=" << R << std::endl; fullprint << "Spearman correlation (exact)=" << Rtmp << std::endl; // Add some ties sample[0][0] = 1; sample[0][1] = 0; sample[0][2] = 9; sample[1][0] = 2; sample[1][1] = 3; sample[1][2] = 9; sample[2][0] = 5; sample[2][1] = 1; sample[2][2] = 9; sample[3][0] = 2; sample[3][1] = 2; sample[3][2] = 9; fullprint << "Rank=" << sample.rank() << std::endl; fullprint << "Sort=" << sample.sort() << std::endl; fullprint << "Rank component 0=" << sample.rank(0) << std::endl; fullprint << "Sort according to component 0=" << sample.sortAccordingToAComponent(0) << std::endl; fullprint << "Spearman correlation=" << sample.computeSpearmanCorrelation() << std::endl; fullprint << "Kendall tau=" << sample.computeKendallTau() << std::endl; UnsignedInteger size = 10000; Point p1(dim, 0.0); Point p2(dim, 1.0); Normal normal(Normal(p1, p2, R)); fullprint << "Normal=" << normal << std::endl; fullprint << "covariance=" << normal.getCovariance() << std::endl; Sample normalSample(normal.getSample(size)); fullprint << "Empirical covariance=" << normalSample.computeCovariance() << std::endl; CorrelationMatrix RPearson(normalSample.computePearsonCorrelation()); fullprint << "Pearson correlation=" << RPearson << std::endl; CorrelationMatrix RSpearman(normalSample.computeSpearmanCorrelation()); fullprint << "Spearman correlation=" << RSpearman << std::endl; // Check sortUnique() fullprint << "Unique=" << sample.sortUnique() << std::endl; sample[2][0] = 1; sample[2][1] = 0; sample[2][2] = 9; fullprint << "Unique=" << sample.sortUnique() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Sample_computation.expout000066400000000000000000000141231307543307100226050ustar00rootroot00000000000000sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] min=class=Point name=Unnamed dimension=3 values=[1,0,2] max=class=Point name=Unnamed dimension=3 values=[6,7,9] mean=class=Point name=Unnamed dimension=3 values=[3.5,2.75,6] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[5.66667,4.83333,-4.33333,4.83333,9.58333,-9.66667,-4.33333,-9.66667,10] standard deviation=class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2.38048,2.03041,-1.82036,0,2.33683,-2.55499,0,0,0.397855] standard deviation per component=class=Point name=Unnamed dimension=3 values=[2.38048,3.0957,3.16228] Pearson correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.65588,-0.57565,0.65588,1,-0.987458,-0.57565,-0.987458,1] Spearman correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.8,-0.8,0.8,1,-1,-0.8,-1,1] Kendall tau=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.666667,-0.666667,0.666667,1,-1,-0.666667,-1,1] range per component=class=Point name=Unnamed dimension=3 values=[5,7,7] median per component=class=Point name=Unnamed dimension=3 values=[3.5,2,6.5] Variance=class=Point name=Unnamed dimension=3 values=[5.66667,9.58333,10] Skewness=class=Point name=Unnamed dimension=3 values=[0,1.13762,-0.632456] Kurtosis=class=Point name=Unnamed dimension=3 values=[-1.3391,3.75766,1.3] Centered moment of order 0=class=Point name=Unnamed dimension=3 values=[1,1,1] Centered moment of order 1=class=Point name=Unnamed dimension=3 values=[0,0,0] Centered moment of order 2=class=Point name=Unnamed dimension=3 values=[4.25,7.1875,7.5] Centered moment of order 3=class=Point name=Unnamed dimension=3 values=[0,12.6562,-7.5] Centered moment of order 4=class=Point name=Unnamed dimension=3 values=[22.0625,98.207,88.5] Centered moment of order 5=class=Point name=Unnamed dimension=3 values=[0,303.223,-187.5] Centered moment of order 6=class=Point name=Unnamed dimension=3 values=[127.766,1588.55,1222.5] Centered moment of order 7=class=Point name=Unnamed dimension=3 values=[0,5951.35,-3517.5] Centered moment of order 8=class=Point name=Unnamed dimension=3 values=[775.754,27450.1,18088.5] Centered moment of order 9=class=Point name=Unnamed dimension=3 values=[0,110807,-60487.5] Marginal 1=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[3],[1],[7]] Marginal [2, 0]=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[9,1],[5,2],[8,5],[2,6]] Rank=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[0,0,3],[1,2,1],[2,1,2],[3,3,0]] Sort=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] Sort according to component 0=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] Quantile per component(0.25)=class=Point name=Unnamed dimension=3 values=[1.5,0.5,3.5] Empirical CDF(class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25]=0 Pearson correlation (exact)=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Spearman correlation (exact)=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239359,0,0.239359,1,0.239359,0,0.239359,1] Rank=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[0,0,1.5],[1.5,3,1.5],[3,1,1.5],[1.5,2,1.5]] Sort=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9],[5,1,9]] Rank component 0=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1.5],[3],[1.5]] Sort according to component 0=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,9],[2,2,9],[5,1,9]] Spearman correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.316228,0,0.316228,1,0,0,0,1] Kendall tau=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.182574,0,0.182574,1,0,0,0,1] Normal=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Empirical covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.984954,0.228389,-0.00175117,0.228389,1.00735,0.241997,-0.00175117,0.241997,1.01046] Pearson correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.229286,-0.00175534,0.229286,1,0.239862,-0.00175534,0.239862,1] Spearman correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.219846,-0.00317292,0.219846,1,0.23306,-0.00317292,0.23306,1] Unique=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9],[5,1,9]] Unique=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9]] openturns-1.9/lib/test/t_Sample_csv.cxx000066400000000000000000000116531307543307100203210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample for load and save methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Creation temp file with sample std::ofstream aTempFile; // 1st sample aTempFile.open("sample.csv", std::ofstream::out); aTempFile << "X1;X2;X3;X4\n"; aTempFile << "-1.2;2.3;3.4;-4.5\n"; aTempFile << "5.6;-6.7;7.8;8.9\n"; aTempFile << "-0.1;3.2;5.1;7.5\n"; aTempFile.close(); // Tests of ImportFromCSVFile Sample aSample = Sample::ImportFromCSVFile("sample.csv", ";"); aSample.setName("a good sample"); fullprint << "aSample=" << aSample << std::endl; // Tests of ImportFromTextFile aSample = Sample::ImportFromTextFile("sample.csv", ";"); aSample.setName("a good sample"); fullprint << "aSample=" << aSample << std::endl; // 2nd sample aTempFile.open("sample.csv", std::ofstream::out); aTempFile << "X1,X2,X3,X4\n"; aTempFile << "-1.2,2.3,3.4,-4.5\n"; aTempFile << "5.6,-6.7,7.8,8.9\n"; aTempFile << "-0.1,3.2,5.1,7.5\n"; aTempFile.close(); aSample = Sample::ImportFromCSVFile("sample.csv", ","); aSample.setName("a good coma separated sample"); fullprint << "aSample=" << aSample << std::endl; aSample = Sample::ImportFromTextFile("sample.csv", ","); aSample.setName("a good coma separated sample"); fullprint << "aSample=" << aSample << std::endl; // 3rd sample aTempFile.open("sample.csv", std::ofstream::out); aTempFile << "X1 X2 X3 X4\n"; aTempFile << "-1.2 2.3 3.4 -4.5\n"; aTempFile << "5.6 -6.7 7.8 8.9\n"; aTempFile << "-0.1 3.2 5.1 7.5\n"; aTempFile.close(); aSample = Sample::ImportFromTextFile("sample.csv"); aSample.setName("a good sample with spaces"); fullprint << "aSample=" << aSample << std::endl; // 4th sample aTempFile.open("sample.csv", std::ofstream::out); aTempFile << "-1.2;2.3;3.4;-4.5\n"; aTempFile << "5.6;-xxx;7.8;8.9\n"; aTempFile << "-0.1;3.2;5..1;7.5\n"; aTempFile << "0.9;9.8;8.4;5.4\n"; aTempFile.close(); aSample = Sample::ImportFromCSVFile("sample.csv", ";"); aSample.setName("a sample with bad entries"); fullprint << "aSample with bad entries (see log)=" << aSample << std::endl; aSample = Sample::ImportFromTextFile("sample.csv", ";"); aSample.setName("a sample with bad entries"); fullprint << "aSample with bad entries (see log)=" << aSample << std::endl; // 5th sample aTempFile.open("sample.csv", std::ofstream::out); aTempFile << "-1.2;2.3;3.4;-4.5\n"; aTempFile << "5.6;-6.7;7.8\n"; aTempFile << "-0.1;3.2;;7.5\n"; aTempFile << "6.5;9.0;7.3;-3.7\n"; aTempFile.close(); aSample = Sample::ImportFromCSVFile("sample.csv", ";"); aSample.setName("a sample with missing entries"); fullprint << "aSample with missing entries (see log)=" << aSample << std::endl; aSample = Sample::ImportFromTextFile("sample.csv", ";"); aSample.setName("a sample with missing entries"); fullprint << "aSample with missing entries (see log)=" << aSample << std::endl; // We export the sample to an CSV file and then read it again aSample.exportToCSVFile("sample.csv"); Sample sameSample = Sample::ImportFromCSVFile("sample.csv"); if (aSample != sameSample) throw TestFailed("Exported sample differs from imported sample"); // We export a sample with no description to a CSV file and then read it again aSample.exportToCSVFile("sample.csv"); sameSample = Sample::ImportFromCSVFile("sample.csv"); if (aSample != sameSample) throw TestFailed("Exported sample differs from imported sample"); Os::Remove("sample.csv"); try { aSample = Sample::ImportFromCSVFile("nosample.csv"); throw TestFailed( "ERROR: test should have failed. Found CSV file 'nosample.csv' though it should not have been there" ); } catch (FileNotFoundException & ex) { // Nothing to do } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Sample_csv.expout000066400000000000000000000042211307543307100210340ustar00rootroot00000000000000aSample=class=Sample name=a good sample implementation=class=SampleImplementation name=a good sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample=class=Sample name=a good sample implementation=class=SampleImplementation name=a good sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample=class=Sample name=a good coma separated sample implementation=class=SampleImplementation name=a good coma separated sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample=class=Sample name=a good coma separated sample implementation=class=SampleImplementation name=a good coma separated sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample=class=Sample name=a good sample with spaces implementation=class=SampleImplementation name=a good sample with spaces size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample with bad entries (see log)=class=Sample name=a sample with bad entries implementation=class=SampleImplementation name=a sample with bad entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[0.9,9.8,8.4,5.4]] aSample with bad entries (see log)=class=Sample name=a sample with bad entries implementation=class=SampleImplementation name=a sample with bad entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[0.9,9.8,8.4,5.4]] aSample with missing entries (see log)=class=Sample name=a sample with missing entries implementation=class=SampleImplementation name=a sample with missing entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[6.5,9,7.3,-3.7]] aSample with missing entries (see log)=class=Sample name=a sample with missing entries implementation=class=SampleImplementation name=a sample with missing entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[6.5,9,7.3,-3.7]] openturns-1.9/lib/test/t_Sample_large.cxx000066400000000000000000000066761307543307100206310ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample of big size * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { #ifdef DEBUG_MEMORY std::cerr << "Memory usage std=" << GetMemoryUsage() << " full=" << GetFullMemoryUsage() << std::endl; #endif { // We create an empty Sample Sample sample(0, 2); sample.setName("EmptySample"); fullprint << "sample=" << sample << std::endl; try { // We access the element of the sample Point p(sample.at(0)); fullprint << "p=" << p << std::endl; // We should NEVER go here throw TestFailed("Exception NOT thrown"); } catch (OutOfBoundException & ex) { // Nothing to do } } #ifdef DEBUG_MEMORY std::cerr << "Memory usage std=" << GetMemoryUsage() << " full=" << GetFullMemoryUsage() << std::endl; #endif { // We create an small Sample Sample sample(1, 2); sample.setName("SmallSample"); fullprint << "sample=" << sample << std::endl; // We access the element of the sample Point p(sample[0]); fullprint << "p=" << p << std::endl; try { // We try to access past the last element of the point Point err( sample.at(2) ); // We should NEVER go here throw TestFailed("Exception NOT thrown"); } catch (OutOfBoundException & ex) { // Nothing to do } } #ifdef DEBUG_MEMORY std::cerr << "Memory usage std=" << GetMemoryUsage() << " full=" << GetFullMemoryUsage() << std::endl; #endif { // We create a big Sample Sample sample(1000000, 2); sample.setName("BigSample"); #ifdef DEBUG_MEMORY std::cerr << "Memory usage std=" << GetMemoryUsage() << " full=" << GetFullMemoryUsage() << std::endl; printMemoryUsage(); #endif // We populate the sample UnsignedInteger size = sample.getSize(); for(UnsignedInteger i = 0; i < size; i++) { sample(i, 0) = i; sample(i, 1) = i; } Point mean = sample.computeMean(); fullprint << "sample first point=" << sample[0] << std::endl; fullprint << "sample last point=" << sample[size - 1] << std::endl; fullprint << "sample mean value=" << mean << std::endl; #ifdef DEBUG_MEMORY std::cerr << "Memory usage std=" << GetMemoryUsage() << " full=" << GetFullMemoryUsage() << std::endl; #endif } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Sample_large.expout000066400000000000000000000010221307543307100213270ustar00rootroot00000000000000sample=class=Sample name=EmptySample implementation=class=SampleImplementation name=EmptySample size=0 dimension=2 data=[] sample=class=Sample name=SmallSample implementation=class=SampleImplementation name=SmallSample size=1 dimension=2 data=[[0,0]] p=class=Point name=Unnamed dimension=2 values=[0,0] sample first point=class=Point name=Unnamed dimension=2 values=[0,0] sample last point=class=Point name=Unnamed dimension=2 values=[999999,999999] sample mean value=class=Point name=Unnamed dimension=2 values=[500000,500000] openturns-1.9/lib/test/t_Sample_operators.cxx000066400000000000000000000055641307543307100215500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // We create an empty Sample Sample sample1(0, 2); sample1.setName("Sample1"); // We populate the empty sample Point point1(2); point1[0] = 10.; point1[1] = 20.; Point point2(2); point2[0] = 11.; point2[1] = 21.; Point point3(2); point3[0] = 12.; point3[1] = 22.; sample1.add(point1); sample1.add(point2); sample1.add(point3); fullprint << "sample1=" << sample1 << std::endl; // We create a new empty Sample Sample sample2(0, 2); sample2.setName("Sample2"); // We populate the empty sample Point point4(2); point4[0] = 30.; point4[1] = 40.; Point point5(2); point5[0] = 31.; point5[1] = 41.; Point point6(2); point6[0] = 32.; point6[1] = 42.; sample2.add(point4); sample2.add(point5); sample2.add(point6); fullprint << "sample2=" << sample2 << std::endl; // Operator +/- const Sample sum(sample1 + sample2); const Sample diff(sample2 - sample1); fullprint << "sample1 + sample2=" << sum << std::endl; fullprint << "sample2 - sample1=" << diff << std::endl; // Operator +=/-= Sample sample3(sample2); Sample sample4(sample2); sample3 += sample1; sample4 -= sample1; fullprint << "sample3=" << sample3 << std::endl; fullprint << "sample4=" << sample4 << std::endl; // translation ==> += operator Point translation(2, 5.0); sample1 += translation; fullprint << "after a translation of vector=" << translation << " sample1=" << sample1 << std::endl; // scaling ==> *= operator Point scaling(2, 2.0); sample1 *= scaling; fullprint << "after a scaling of vector=" << scaling << " sample1=" << sample1 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Sample_operators.expout000066400000000000000000000024101307543307100222550ustar00rootroot00000000000000sample1=class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 data=[[10,20],[11,21],[12,22]] sample2=class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 data=[[30,40],[31,41],[32,42]] sample1 + sample2=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[40,60],[42,62],[44,64]] sample2 - sample1=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[20,20],[20,20],[20,20]] sample3=class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 data=[[40,60],[42,62],[44,64]] sample4=class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 data=[[20,20],[20,20],[20,20]] after a translation of vector=class=Point name=Unnamed dimension=2 values=[5,5] sample1=class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 data=[[15,25],[16,26],[17,27]] after a scaling of vector=class=Point name=Unnamed dimension=2 values=[2,2] sample1=class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 data=[[30,50],[32,52],[34,54]] openturns-1.9/lib/test/t_Sample_split.cxx000066400000000000000000000040141307543307100206520ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample for split method * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Sample { public: TestObject() : Sample(1, 1) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities checkClassWithClassName(); // We create an empty Sample const int N = 100; Sample sample(N, 2); fullprint << "Sample size=" << sample.getSize() << std::endl; // We populate the empty sample with numerous data for (int i = 0; i < N; i++) { Point point(2); point[0] = 1000 + i; point[1] = 2000 + i; sample[i] = point; } fullprint << "sample=" << sample << std::endl; // We try to split the sample Sample sample90 = sample.split(90); Sample sample10 = sample.split(10); fullprint << "sample =" << sample << std::endl; fullprint << "sample10=" << sample10 << std::endl; fullprint << "sample90=" << sample90 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Sample_split.expout000066400000000000000000000064601307543307100214030ustar00rootroot00000000000000Testing class Sample checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] streamObject(const T & anObject) class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Sample size=100 sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[1000,2000],[1001,2001],[1002,2002],[1003,2003],[1004,2004],[1005,2005],[1006,2006],[1007,2007],[1008,2008],[1009,2009],[1010,2010],[1011,2011],[1012,2012],[1013,2013],[1014,2014],[1015,2015],[1016,2016],[1017,2017],[1018,2018],[1019,2019],[1020,2020],[1021,2021],[1022,2022],[1023,2023],[1024,2024],[1025,2025],[1026,2026],[1027,2027],[1028,2028],[1029,2029],[1030,2030],[1031,2031],[1032,2032],[1033,2033],[1034,2034],[1035,2035],[1036,2036],[1037,2037],[1038,2038],[1039,2039],[1040,2040],[1041,2041],[1042,2042],[1043,2043],[1044,2044],[1045,2045],[1046,2046],[1047,2047],[1048,2048],[1049,2049],[1050,2050],[1051,2051],[1052,2052],[1053,2053],[1054,2054],[1055,2055],[1056,2056],[1057,2057],[1058,2058],[1059,2059],[1060,2060],[1061,2061],[1062,2062],[1063,2063],[1064,2064],[1065,2065],[1066,2066],[1067,2067],[1068,2068],[1069,2069],[1070,2070],[1071,2071],[1072,2072],[1073,2073],[1074,2074],[1075,2075],[1076,2076],[1077,2077],[1078,2078],[1079,2079],[1080,2080],[1081,2081],[1082,2082],[1083,2083],[1084,2084],[1085,2085],[1086,2086],[1087,2087],[1088,2088],[1089,2089],[1090,2090],[1091,2091],[1092,2092],[1093,2093],[1094,2094],[1095,2095],[1096,2096],[1097,2097],[1098,2098],[1099,2099]] sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1000,2000],[1001,2001],[1002,2002],[1003,2003],[1004,2004],[1005,2005],[1006,2006],[1007,2007],[1008,2008],[1009,2009]] sample10=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[1010,2010],[1011,2011],[1012,2012],[1013,2013],[1014,2014],[1015,2015],[1016,2016],[1017,2017],[1018,2018],[1019,2019],[1020,2020],[1021,2021],[1022,2022],[1023,2023],[1024,2024],[1025,2025],[1026,2026],[1027,2027],[1028,2028],[1029,2029],[1030,2030],[1031,2031],[1032,2032],[1033,2033],[1034,2034],[1035,2035],[1036,2036],[1037,2037],[1038,2038],[1039,2039],[1040,2040],[1041,2041],[1042,2042],[1043,2043],[1044,2044],[1045,2045],[1046,2046],[1047,2047],[1048,2048],[1049,2049],[1050,2050],[1051,2051],[1052,2052],[1053,2053],[1054,2054],[1055,2055],[1056,2056],[1057,2057],[1058,2058],[1059,2059],[1060,2060],[1061,2061],[1062,2062],[1063,2063],[1064,2064],[1065,2065],[1066,2066],[1067,2067],[1068,2068],[1069,2069],[1070,2070],[1071,2071],[1072,2072],[1073,2073],[1074,2074],[1075,2075],[1076,2076],[1077,2077],[1078,2078],[1079,2079],[1080,2080],[1081,2081],[1082,2082],[1083,2083],[1084,2084],[1085,2085],[1086,2086],[1087,2087],[1088,2088],[1089,2089]] sample90=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1090,2090],[1091,2091],[1092,2092],[1093,2093],[1094,2094],[1095,2095],[1096,2096],[1097,2097],[1098,2098],[1099,2099]] openturns-1.9/lib/test/t_Sample_std.cxx000066400000000000000000000103611307543307100203130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Sample for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Sample { public: TestObject() : Sample(1, 1) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities checkClassWithClassName(); // We create an empty Sample Sample sample1(0, 2); sample1.setName("Sample1"); // We populate the empty sample Point point1(2); point1[0] = 10.; point1[1] = 20.; Point point2(2); point2[0] = 11.; point2[1] = 21.; Point point3(2); point3[0] = 12.; point3[1] = 22.; sample1.add(point1); sample1.add(point2); sample1.add(point3); fullprint << "sample1=" << sample1 << std::endl; // We get the second element of the sample Point secondElement = sample1[1]; fullprint << "second element=" << secondElement << std::endl; // We set the third element to a valid new element Point newPoint(2); newPoint[0] = 1000; newPoint[1] = 2000; sample1[2] = newPoint; fullprint << "sample1=" << sample1 << std::endl; Point translation(2, 5.0); sample1 += translation; fullprint << "after a translation of vector=" << translation << " sample1=" << sample1 << std::endl; Point scaling(2, 2.0); sample1 *= scaling; fullprint << "after a scaling of vector=" << scaling << " sample1=" << sample1 << std::endl; Sample sample2(10, point1); fullprint << "sample2=" << sample2 << std::endl; sample2[5] = point2; fullprint << "sample2=" << sample2 << std::endl; try { // We get the tenth element of the sample // THIS SHOULD NORMALY FAIL Point tenthElement = sample1.at(9); // Normally, we should never go here throw TestFailed("Exception has NOT been thrown or catched !"); } catch (OutOfBoundException & ex) { // Nothing to do } // We try to create a sample with 5 times the same point Point samePoint(3); samePoint[0] = 1000.; samePoint[1] = 2000.; samePoint[2] = 3000.; Sample sample3(5, samePoint); fullprint << "sample3=" << sample3 << std::endl; // We append a new point to the sample... Point anotherNewPoint(3); anotherNewPoint[0] = -1000.; anotherNewPoint[1] = -2000.; anotherNewPoint[2] = -3000.; sample3.add(anotherNewPoint); fullprint << "sample3=" << sample3 << std::endl; // ... then the first point again sample3.add(samePoint); fullprint << "sample3=" << sample3 << std::endl; // We find the new point into the sample UnsignedInteger pos = sample3.find(anotherNewPoint); //fullprint << "pos=" << pos << std::endl; if (pos != 5) { OSS oss; oss << "Error in finding point into sample. Expected 5. Got " << pos; throw TestFailed(oss); } //for(UnsignedInteger i=0; i // OT includes #include using namespace OT; int main(int argc, char **argv) { const UnsignedInteger dimension = 3; const UnsignedInteger size = 25; ComposedDistribution::DistributionCollection coll(dimension, Uniform(0.0, 1.0)); ComposedDistribution distribution(coll); LHSExperiment lhs(distribution, size); lhs.setRandomShift(false); // centered lhs.setAlwaysShuffle(true); // randomized // print lhs std::cout << lhs << std::endl; std::cout << "Bounds of uniform distributions=" << distribution.getRange() << std::endl; // Generate design without optimization Sample design(lhs.generate()); std::cout << "design=" << design << std::endl; // Define space fillings SpaceFillingPhiP spaceFillingPhiP(10); SpaceFillingC2 spaceFillingC2; SpaceFillingMinDist spaceFillingMinDist; // Print the criteria on this design std::cout << "PhiP=" << spaceFillingPhiP.evaluate(design) << ", C2=" << spaceFillingC2.evaluate(design) << ", MinDist=" << spaceFillingMinDist.evaluate(design) << std::endl; // -------------------------------------------------- // ------------- Simulated annealing -------------- // -------------------------------------------------- // Geometric profile const Scalar T0(10.0); const UnsignedInteger iMax(2000); const Scalar c(0.95); const GeometricProfile geomProfile(T0, c, iMax); // 1) Simulated Annealing LHS with geometric temperature profile, C2 optimization SimulatedAnnealingLHS optimalSA_C2(lhs, geomProfile, spaceFillingC2); // print lhs std::cout << "optimal lhs=" << optimalSA_C2 << std::endl; Sample design_C2(optimalSA_C2.generate()); LHSResult result_C2(optimalSA_C2.getResult()); std::cout << "Best design using geometric temperature and C2 space filling=" << design_C2 << std::endl; std::cout << "Final criteria: C2=" << result_C2.getC2() << ", PhiP=" << result_C2.getPhiP() << ", MinDist=" << result_C2.getMinDist() << std::endl; // 2) Simulated Annealing LHS with linear temperature profile, PhiP optimization const LinearProfile linearProfile(T0, iMax); SimulatedAnnealingLHS optimalSA_PhiP(lhs, linearProfile, spaceFillingPhiP); // print lhs std::cout << "optimal lhs=" << optimalSA_PhiP << std::endl; Sample design_PhiP(optimalSA_PhiP.generate()); LHSResult result_PhiP(optimalSA_PhiP.getResult()); std::cout << "Best design using linear temperature profile and PhiP space filling=" << design_PhiP << std::endl; std::cout << "Final criteria: C2=" << result_PhiP.getC2() << ", PhiP=" << result_PhiP.getPhiP() << ", MinDist=" << result_PhiP.getMinDist() << std::endl; // 3) Simulated Annealing LHS with linear temperature profile, PhiP optimization and nStart > 0 const UnsignedInteger nStart = 10; Sample design_PhiP_restart(optimalSA_PhiP.generateWithRestart(nStart)); LHSResult result_PhiP_restart(optimalSA_PhiP.getResult()); std::cout << "Best design using linear temperature profile and PhiP space filling=" << design_PhiP_restart << std::endl; std::cout << "Final criteria: C2=" << result_PhiP_restart.getC2() << ", PhiP=" << result_PhiP_restart.getPhiP() << ", MinDist=" << result_PhiP_restart.getMinDist() << std::endl; for(UnsignedInteger i = 0; i < nStart; ++i) { Sample design_PhiP_i(result_PhiP_restart.getOptimalDesign(i)); std::cout << " Intermediate design for restart iteration number " << i << " " << design_PhiP_i << std::endl; std::cout << " Final criteria: C2=" << result_PhiP_restart.getC2(i) << ", PhiP=" << result_PhiP_restart.getPhiP(i) << ", MinDist=" << result_PhiP_restart.getMinDist() << std::endl; } return 0; } openturns-1.9/lib/test/t_SimulatedAnnealingLHS_std.expout000066400000000000000000000266541307543307100237430ustar00rootroot00000000000000LHSExperiment(distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1, size25, always shuffle=true, random shift=false Bounds of uniform distributions=[0, 1] [0, 1] [0, 1] design= [ X0 X1 X2 ] 0 : [ 0.18 0.86 0.26 ] 1 : [ 0.66 0.22 0.62 ] 2 : [ 0.98 0.34 0.86 ] 3 : [ 0.7 0.26 0.74 ] 4 : [ 0.94 0.54 0.54 ] 5 : [ 0.22 0.66 0.5 ] 6 : [ 0.86 0.9 0.1 ] 7 : [ 0.74 0.1 0.38 ] 8 : [ 0.46 0.78 0.3 ] 9 : [ 0.82 0.7 0.82 ] 10 : [ 0.26 0.62 0.02 ] 11 : [ 0.54 0.06 0.34 ] 12 : [ 0.1 0.58 0.7 ] 13 : [ 0.9 0.74 0.14 ] 14 : [ 0.02 0.3 0.78 ] 15 : [ 0.58 0.14 0.46 ] 16 : [ 0.78 0.46 0.94 ] 17 : [ 0.3 0.42 0.9 ] 18 : [ 0.5 0.5 0.58 ] 19 : [ 0.38 0.82 0.06 ] 20 : [ 0.42 0.02 0.98 ] 21 : [ 0.14 0.98 0.42 ] 22 : [ 0.34 0.18 0.18 ] 23 : [ 0.06 0.94 0.22 ] 24 : [ 0.62 0.38 0.66 ] PhiP=8.08648, C2=0.0804948, MinDist=0.132665 optimal lhs=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.95 iMax=2000 Best design using geometric temperature and C2 space filling= [ X0 X1 X2 ] 0 : [ 0.06 0.1 0.3 ] 1 : [ 0.26 0.82 0.26 ] 2 : [ 0.34 0.62 0.74 ] 3 : [ 0.3 0.22 0.42 ] 4 : [ 0.22 0.18 0.9 ] 5 : [ 0.86 0.66 0.38 ] 6 : [ 0.78 0.94 0.22 ] 7 : [ 0.98 0.38 0.18 ] 8 : [ 0.46 0.34 0.82 ] 9 : [ 0.94 0.78 0.94 ] 10 : [ 0.58 0.42 0.98 ] 11 : [ 0.38 0.3 0.06 ] 12 : [ 0.02 0.46 0.62 ] 13 : [ 0.14 0.58 0.14 ] 14 : [ 0.82 0.06 0.78 ] 15 : [ 0.42 0.98 0.46 ] 16 : [ 0.74 0.54 0.7 ] 17 : [ 0.1 0.9 0.86 ] 18 : [ 0.9 0.26 0.58 ] 19 : [ 0.18 0.74 0.54 ] 20 : [ 0.66 0.5 0.34 ] 21 : [ 0.7 0.14 0.1 ] 22 : [ 0.62 0.86 0.66 ] 23 : [ 0.5 0.02 0.5 ] 24 : [ 0.54 0.7 0.02 ] Final criteria: C2=0.0395567, PhiP=4.64239, MinDist=0.215407 optimal lhs=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=10 profile=class=TemperatureProfile implementation=class=LinearProfile name=Unnamed T0=10 iMax=2000 Best design using linear temperature profile and PhiP space filling= [ X0 X1 X2 ] 0 : [ 0.74 0.58 0.46 ] 1 : [ 0.82 0.42 0.22 ] 2 : [ 0.7 0.86 0.14 ] 3 : [ 0.94 0.06 0.86 ] 4 : [ 0.78 0.14 0.74 ] 5 : [ 0.62 0.7 0.1 ] 6 : [ 0.54 0.98 0.9 ] 7 : [ 0.18 0.18 0.54 ] 8 : [ 0.86 0.62 0.98 ] 9 : [ 0.14 0.54 0.62 ] 10 : [ 0.06 0.38 0.82 ] 11 : [ 0.46 0.82 0.02 ] 12 : [ 0.42 0.02 0.3 ] 13 : [ 0.5 0.3 0.18 ] 14 : [ 0.98 0.9 0.7 ] 15 : [ 0.38 0.46 0.58 ] 16 : [ 0.26 0.78 0.34 ] 17 : [ 0.3 0.26 0.06 ] 18 : [ 0.02 0.5 0.26 ] 19 : [ 0.34 0.22 0.38 ] 20 : [ 0.22 0.74 0.78 ] 21 : [ 0.9 0.1 0.5 ] 22 : [ 0.1 0.66 0.42 ] 23 : [ 0.58 0.34 0.94 ] 24 : [ 0.66 0.94 0.66 ] Final criteria: C2=0.0572591, PhiP=5.45555, MinDist=0.183303 Best design using linear temperature profile and PhiP space filling= [ X0 X1 X2 ] 0 : [ 0.94 0.22 0.7 ] 1 : [ 0.58 0.18 0.9 ] 2 : [ 0.7 0.5 0.5 ] 3 : [ 0.42 0.86 0.98 ] 4 : [ 0.66 0.1 0.3 ] 5 : [ 0.3 0.14 0.02 ] 6 : [ 0.54 0.62 0.94 ] 7 : [ 0.78 0.7 0.66 ] 8 : [ 0.38 0.02 0.38 ] 9 : [ 0.34 0.9 0.1 ] 10 : [ 0.98 0.34 0.34 ] 11 : [ 0.9 0.46 0.86 ] 12 : [ 0.26 0.66 0.46 ] 13 : [ 0.22 0.74 0.82 ] 14 : [ 0.1 0.54 0.78 ] 15 : [ 0.06 0.58 0.26 ] 16 : [ 0.18 0.3 0.74 ] 17 : [ 0.02 0.26 0.22 ] 18 : [ 0.74 0.06 0.54 ] 19 : [ 0.46 0.38 0.42 ] 20 : [ 0.86 0.94 0.06 ] 21 : [ 0.62 0.78 0.18 ] 22 : [ 0.82 0.42 0.14 ] 23 : [ 0.5 0.98 0.58 ] 24 : [ 0.14 0.82 0.62 ] Final criteria: C2=0.051441, PhiP=4.37099, MinDist=0.229783 Intermediate design for restart iteration number 0 [ X0 X1 X2 ] 0 : [ 0.9 0.1 0.22 ] 1 : [ 0.22 0.26 0.62 ] 2 : [ 0.54 0.14 0.5 ] 3 : [ 0.26 0.5 0.02 ] 4 : [ 0.66 0.22 0.94 ] 5 : [ 0.82 0.34 0.34 ] 6 : [ 0.1 0.54 0.58 ] 7 : [ 0.98 0.58 0.54 ] 8 : [ 0.38 0.42 0.86 ] 9 : [ 0.34 0.46 0.26 ] 10 : [ 0.78 0.66 0.06 ] 11 : [ 0.42 0.94 0.78 ] 12 : [ 0.86 0.62 0.9 ] 13 : [ 0.5 0.38 0.14 ] 14 : [ 0.58 0.78 0.3 ] 15 : [ 0.74 0.98 0.42 ] 16 : [ 0.18 0.82 0.1 ] 17 : [ 0.94 0.18 0.66 ] 18 : [ 0.7 0.9 0.74 ] 19 : [ 0.14 0.86 0.82 ] 20 : [ 0.3 0.7 0.98 ] 21 : [ 0.62 0.3 0.7 ] 22 : [ 0.46 0.74 0.46 ] 23 : [ 0.06 0.02 0.18 ] 24 : [ 0.02 0.06 0.38 ] Final criteria: C2=0.0523344, PhiP=4.93978, MinDist=0.229783 Intermediate design for restart iteration number 1 [ X0 X1 X2 ] 0 : [ 0.14 0.42 0.54 ] 1 : [ 0.02 0.9 0.74 ] 2 : [ 0.9 0.14 0.14 ] 3 : [ 0.26 0.94 0.06 ] 4 : [ 0.06 0.78 0.34 ] 5 : [ 0.78 0.86 0.18 ] 6 : [ 0.34 0.62 0.94 ] 7 : [ 0.5 0.3 0.86 ] 8 : [ 0.74 0.7 0.98 ] 9 : [ 0.58 0.22 0.3 ] 10 : [ 0.46 0.5 0.58 ] 11 : [ 0.98 0.66 0.78 ] 12 : [ 0.94 0.38 0.42 ] 13 : [ 0.7 0.34 0.7 ] 14 : [ 0.3 0.26 0.66 ] 15 : [ 0.18 0.06 0.9 ] 16 : [ 0.82 0.54 0.1 ] 17 : [ 0.54 0.98 0.02 ] 18 : [ 0.22 0.82 0.62 ] 19 : [ 0.66 0.18 0.82 ] 20 : [ 0.38 0.02 0.38 ] 21 : [ 0.62 0.58 0.46 ] 22 : [ 0.1 0.1 0.26 ] 23 : [ 0.42 0.46 0.22 ] 24 : [ 0.86 0.74 0.5 ] Final criteria: C2=0.0531481, PhiP=4.97454, MinDist=0.229783 Intermediate design for restart iteration number 2 [ X0 X1 X2 ] 0 : [ 0.94 0.74 0.98 ] 1 : [ 0.66 0.9 0.46 ] 2 : [ 0.46 0.1 0.5 ] 3 : [ 0.34 0.3 0.58 ] 4 : [ 0.98 0.78 0.26 ] 5 : [ 0.3 0.54 0.38 ] 6 : [ 0.58 0.22 0.7 ] 7 : [ 0.42 0.82 0.66 ] 8 : [ 0.86 0.62 0.54 ] 9 : [ 0.38 0.5 0.74 ] 10 : [ 0.9 0.94 0.1 ] 11 : [ 0.14 0.66 0.3 ] 12 : [ 0.06 0.14 0.94 ] 13 : [ 0.54 0.7 0.34 ] 14 : [ 0.5 0.98 0.22 ] 15 : [ 0.26 0.58 0.02 ] 16 : [ 0.18 0.06 0.62 ] 17 : [ 0.02 0.02 0.14 ] 18 : [ 0.74 0.46 0.82 ] 19 : [ 0.1 0.38 0.78 ] 20 : [ 0.22 0.42 0.18 ] 21 : [ 0.78 0.18 0.86 ] 22 : [ 0.82 0.34 0.42 ] 23 : [ 0.62 0.86 0.9 ] 24 : [ 0.7 0.26 0.06 ] Final criteria: C2=0.0653153, PhiP=4.64662, MinDist=0.229783 Intermediate design for restart iteration number 3 [ X0 X1 X2 ] 0 : [ 0.78 0.38 0.62 ] 1 : [ 0.38 0.42 0.42 ] 2 : [ 0.22 0.9 0.7 ] 3 : [ 0.98 0.62 0.58 ] 4 : [ 0.5 0.58 0.82 ] 5 : [ 0.14 0.78 0.94 ] 6 : [ 0.82 0.34 0.98 ] 7 : [ 0.3 0.54 0.14 ] 8 : [ 0.26 0.3 0.18 ] 9 : [ 0.7 0.22 0.46 ] 10 : [ 0.62 0.82 0.9 ] 11 : [ 0.9 0.86 0.78 ] 12 : [ 0.06 0.7 0.54 ] 13 : [ 0.42 0.18 0.34 ] 14 : [ 0.86 0.5 0.38 ] 15 : [ 0.02 0.74 0.3 ] 16 : [ 0.74 0.26 0.22 ] 17 : [ 0.18 0.1 0.26 ] 18 : [ 0.1 0.14 0.74 ] 19 : [ 0.66 0.98 0.02 ] 20 : [ 0.58 0.02 0.1 ] 21 : [ 0.94 0.66 0.06 ] 22 : [ 0.34 0.94 0.5 ] 23 : [ 0.54 0.06 0.86 ] 24 : [ 0.46 0.46 0.66 ] Final criteria: C2=0.0530663, PhiP=4.90327, MinDist=0.229783 Intermediate design for restart iteration number 4 [ X0 X1 X2 ] 0 : [ 0.38 0.9 0.78 ] 1 : [ 0.26 0.06 0.34 ] 2 : [ 0.1 0.58 0.38 ] 3 : [ 0.46 0.26 0.3 ] 4 : [ 0.7 0.5 0.46 ] 5 : [ 0.18 0.78 0.06 ] 6 : [ 0.78 0.94 0.18 ] 7 : [ 0.02 0.66 0.62 ] 8 : [ 0.3 0.54 0.1 ] 9 : [ 0.06 0.38 0.94 ] 10 : [ 0.98 0.18 0.22 ] 11 : [ 0.42 0.3 0.74 ] 12 : [ 0.86 0.82 0.98 ] 13 : [ 0.34 0.62 0.26 ] 14 : [ 0.54 0.46 0.14 ] 15 : [ 0.22 0.22 0.02 ] 16 : [ 0.82 0.42 0.9 ] 17 : [ 0.66 0.02 0.42 ] 18 : [ 0.14 0.14 0.86 ] 19 : [ 0.62 0.86 0.82 ] 20 : [ 0.5 0.7 0.5 ] 21 : [ 0.9 0.1 0.66 ] 22 : [ 0.94 0.34 0.54 ] 23 : [ 0.58 0.98 0.58 ] 24 : [ 0.74 0.74 0.7 ] Final criteria: C2=0.0550008, PhiP=5.45565, MinDist=0.229783 Intermediate design for restart iteration number 5 [ X0 X1 X2 ] 0 : [ 0.94 0.22 0.7 ] 1 : [ 0.58 0.18 0.9 ] 2 : [ 0.7 0.5 0.5 ] 3 : [ 0.42 0.86 0.98 ] 4 : [ 0.66 0.1 0.3 ] 5 : [ 0.3 0.14 0.02 ] 6 : [ 0.54 0.62 0.94 ] 7 : [ 0.78 0.7 0.66 ] 8 : [ 0.38 0.02 0.38 ] 9 : [ 0.34 0.9 0.1 ] 10 : [ 0.98 0.34 0.34 ] 11 : [ 0.9 0.46 0.86 ] 12 : [ 0.26 0.66 0.46 ] 13 : [ 0.22 0.74 0.82 ] 14 : [ 0.1 0.54 0.78 ] 15 : [ 0.06 0.58 0.26 ] 16 : [ 0.18 0.3 0.74 ] 17 : [ 0.02 0.26 0.22 ] 18 : [ 0.74 0.06 0.54 ] 19 : [ 0.46 0.38 0.42 ] 20 : [ 0.86 0.94 0.06 ] 21 : [ 0.62 0.78 0.18 ] 22 : [ 0.82 0.42 0.14 ] 23 : [ 0.5 0.98 0.58 ] 24 : [ 0.14 0.82 0.62 ] Final criteria: C2=0.051441, PhiP=4.37099, MinDist=0.229783 Intermediate design for restart iteration number 6 [ X0 X1 X2 ] 0 : [ 0.3 0.82 0.98 ] 1 : [ 0.78 0.66 0.18 ] 2 : [ 0.5 0.3 0.86 ] 3 : [ 0.7 0.5 0.5 ] 4 : [ 0.18 0.02 0.14 ] 5 : [ 0.98 0.86 0.02 ] 6 : [ 0.54 0.22 0.3 ] 7 : [ 0.1 0.62 0.58 ] 8 : [ 0.38 0.06 0.78 ] 9 : [ 0.06 0.94 0.74 ] 10 : [ 0.82 0.46 0.26 ] 11 : [ 0.94 0.38 0.9 ] 12 : [ 0.74 0.26 0.94 ] 13 : [ 0.62 0.14 0.7 ] 14 : [ 0.58 0.7 0.06 ] 15 : [ 0.66 0.1 0.42 ] 16 : [ 0.26 0.54 0.38 ] 17 : [ 0.14 0.34 0.34 ] 18 : [ 0.42 0.58 0.66 ] 19 : [ 0.34 0.98 0.82 ] 20 : [ 0.02 0.18 0.54 ] 21 : [ 0.86 0.78 0.62 ] 22 : [ 0.22 0.74 0.46 ] 23 : [ 0.46 0.9 0.22 ] 24 : [ 0.9 0.42 0.1 ] Final criteria: C2=0.0571081, PhiP=5.45589, MinDist=0.229783 Intermediate design for restart iteration number 7 [ X0 X1 X2 ] 0 : [ 0.98 0.1 0.58 ] 1 : [ 0.9 0.78 0.5 ] 2 : [ 0.18 0.9 0.78 ] 3 : [ 0.7 0.66 0.94 ] 4 : [ 0.14 0.62 0.54 ] 5 : [ 0.66 0.86 0.26 ] 6 : [ 0.46 0.06 0.62 ] 7 : [ 0.38 0.74 0.38 ] 8 : [ 0.62 0.58 0.42 ] 9 : [ 0.42 0.38 0.02 ] 10 : [ 0.74 0.46 0.14 ] 11 : [ 0.22 0.7 0.86 ] 12 : [ 0.06 0.42 0.06 ] 13 : [ 0.34 0.54 0.22 ] 14 : [ 0.3 0.34 0.74 ] 15 : [ 0.78 0.94 0.82 ] 16 : [ 0.5 0.26 0.34 ] 17 : [ 0.1 0.18 0.1 ] 18 : [ 0.54 0.3 0.7 ] 19 : [ 0.02 0.82 0.46 ] 20 : [ 0.58 0.14 0.9 ] 21 : [ 0.86 0.02 0.98 ] 22 : [ 0.26 0.98 0.3 ] 23 : [ 0.82 0.22 0.18 ] 24 : [ 0.94 0.5 0.66 ] Final criteria: C2=0.0604582, PhiP=4.56518, MinDist=0.229783 Intermediate design for restart iteration number 8 [ X0 X1 X2 ] 0 : [ 0.14 0.1 0.62 ] 1 : [ 0.62 0.06 0.06 ] 2 : [ 0.06 0.54 0.5 ] 3 : [ 0.1 0.34 0.26 ] 4 : [ 0.82 0.9 0.58 ] 5 : [ 0.94 0.94 0.1 ] 6 : [ 0.38 0.74 0.98 ] 7 : [ 0.34 0.7 0.7 ] 8 : [ 0.02 0.82 0.18 ] 9 : [ 0.86 0.62 0.86 ] 10 : [ 0.58 0.58 0.74 ] 11 : [ 0.7 0.3 0.34 ] 12 : [ 0.54 0.5 0.46 ] 13 : [ 0.9 0.02 0.02 ] 14 : [ 0.3 0.46 0.14 ] 15 : [ 0.22 0.42 0.78 ] 16 : [ 0.42 0.66 0.42 ] 17 : [ 0.98 0.22 0.9 ] 18 : [ 0.66 0.86 0.22 ] 19 : [ 0.74 0.14 0.66 ] 20 : [ 0.26 0.26 0.54 ] 21 : [ 0.18 0.98 0.82 ] 22 : [ 0.78 0.38 0.94 ] 23 : [ 0.5 0.78 0.3 ] 24 : [ 0.46 0.18 0.38 ] Final criteria: C2=0.0545108, PhiP=5.34306, MinDist=0.229783 Intermediate design for restart iteration number 9 [ X0 X1 X2 ] 0 : [ 0.1 0.9 0.34 ] 1 : [ 0.42 0.58 0.94 ] 2 : [ 0.94 0.42 0.98 ] 3 : [ 0.74 0.82 0.26 ] 4 : [ 0.98 0.06 0.82 ] 5 : [ 0.02 0.18 0.38 ] 6 : [ 0.14 0.78 0.62 ] 7 : [ 0.7 0.38 0.74 ] 8 : [ 0.86 0.14 0.22 ] 9 : [ 0.54 0.46 0.02 ] 10 : [ 0.26 0.26 0.1 ] 11 : [ 0.9 0.54 0.54 ] 12 : [ 0.18 0.98 0.18 ] 13 : [ 0.5 0.1 0.66 ] 14 : [ 0.78 0.74 0.86 ] 15 : [ 0.82 0.7 0.06 ] 16 : [ 0.62 0.66 0.46 ] 17 : [ 0.3 0.86 0.9 ] 18 : [ 0.34 0.94 0.58 ] 19 : [ 0.66 0.02 0.14 ] 20 : [ 0.46 0.22 0.3 ] 21 : [ 0.06 0.62 0.78 ] 22 : [ 0.58 0.3 0.5 ] 23 : [ 0.22 0.5 0.42 ] 24 : [ 0.38 0.34 0.7 ] Final criteria: C2=0.0582841, PhiP=5.10311, MinDist=0.229783 openturns-1.9/lib/test/t_SimulationSensitivityAnalysis_std.cxx000066400000000000000000000121461307543307100252000ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SimulationSensitivityAnalysis for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* Uncertain parameters*/ Normal distribution(Point(3, 1.0), Point(3, 2.0), CorrelationMatrix(3)); distribution.setName("Unnamed"); /* Model */ Description input(3); input[0] = "x"; input[1] = "y"; input[2] = "z"; Description formulas(1); formulas[0] = "x-1.5*y+2*z"; SymbolicFunction f(input, formulas); /* Must activate the history mechanism if one want to perform sensitivity analysis */ f.enableHistory(); /* Sampling */ UnsignedInteger size = 100; Sample inputSample(distribution.getSample(size)); Sample outputSample(f(inputSample)); Collection comparisonOperators(4); comparisonOperators[0] = Less(); comparisonOperators[1] = LessOrEqual(); comparisonOperators[2] = Greater(); comparisonOperators[3] = GreaterOrEqual(); ResourceMap::SetAsUnsignedInteger("SimulationSensitivityAnalysis-DefaultSampleMargin", 10); Scalar threshold = 3.0; for (UnsignedInteger i = 0; i < 4; ++i) { { SimulationSensitivityAnalysis algo(inputSample, outputSample, distribution.getIsoProbabilisticTransformation(), comparisonOperators[i], threshold); fullprint << "algo=" << algo << std::endl; /* Perform the analysis */ fullprint << "Mean point in event domain=" << algo.computeMeanPointInEventDomain() << std::endl; fullprint << "Importance factors at " << threshold << " =" << algo.computeImportanceFactors() << std::endl; fullprint << "Importance factors at " << threshold / 2 << " =" << algo.computeImportanceFactors(threshold / 2) << std::endl; Graph importanceFactorsGraph(algo.drawImportanceFactors()); fullprint << "importanceFactorsGraph=" << importanceFactorsGraph << std::endl; /* Importance factors evolution on probability scale */ Graph importanceFactorsRangeGraphProbability(algo.drawImportanceFactorsRange()); fullprint << "importanceFactorsRangeGraphProbability=" << importanceFactorsRangeGraphProbability << std::endl; /* Importance factors evolution on threshold scale */ Graph importanceFactorsRangeGraphThreshold(algo.drawImportanceFactorsRange(false)); fullprint << "importanceFactorsRangeGraphThreshold=" << importanceFactorsRangeGraphThreshold << std::endl; } /* Clear the history of the model */ f.clearHistory(); /* Analysis based on an event */ RandomVector X(distribution); RandomVector Y(f, X); Event event(Y, comparisonOperators[i], threshold); /* Get a sample of the event to simulate a Monte Carlo analysis. We don't care of the result as the interesting values are stored in the model history */ event.getSample(size); { SimulationSensitivityAnalysis algo(event); fullprint << "algo=" << algo << std::endl; /* Perform the analysis */ fullprint << "Mean point in event domain=" << algo.computeMeanPointInEventDomain() << std::endl; fullprint << "Importance factors at threshold " << threshold << " =" << algo.computeImportanceFactors() << std::endl; fullprint << "Importance factors at threshold/2 " << threshold / 2 << " =" << algo.computeImportanceFactors(threshold / 2) << std::endl; Graph importanceFactorsGraph(algo.drawImportanceFactors()); fullprint << "importanceFactorsGraph=" << importanceFactorsGraph << std::endl; /* Importance factors evolution on probability scale */ Graph importanceFactorsRangeGraphProbability(algo.drawImportanceFactorsRange()); fullprint << "importanceFactorsRangeGraphProbability=" << importanceFactorsRangeGraphProbability << std::endl; /* Importance factors evolution on threshold scale */ Graph importanceFactorsRangeGraphThreshold(algo.drawImportanceFactorsRange(false)); fullprint << "importanceFactorsRangeGraphThreshold=" << importanceFactorsRangeGraphThreshold << std::endl; } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SimulationSensitivityAnalysis_std.expout000066400000000000000000004130101307543307100257150ustar00rootroot00000000000000algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Less name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[0.609686,1.6494,0.21546] Importance factors at 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.128068,0.354514,0.517419] Importance factors at 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.215365,0.226243,0.558392] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 12.8%,X1 : 35.5%,X2 : 51.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.128068],[0.354514],[0.517419]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,33.0455],[0.11,34.6717],[0.12,30.491],[0.13,38.8489],[0.14,21.6304],[0.15,20.073],[0.16,23.9852],[0.17,25.2596],[0.18,21.4179],[0.19,20.0526],[0.2,17.0918],[0.21,23.534],[0.22,22.4666],[0.23,21.6594],[0.24,23.6049],[0.25,18.9406],[0.26,18.3071],[0.27,19.0503],[0.28,19.7914],[0.29,20.5208],[0.3,24.3662],[0.31,24.3851],[0.32,22.0299],[0.33,20.6752],[0.34,22.1577],[0.35,22.8756],[0.36,18.2841],[0.37,17.9786],[0.38,15.0368],[0.39,15.5422],[0.4,18.5603],[0.41,17.8078],[0.42,21.7413],[0.43,21.5245],[0.44,21.7411],[0.45,22.8073],[0.46,24.0631],[0.47,25.1721],[0.48,22.0509],[0.49,20.8489],[0.5,22.576],[0.51,23.4527],[0.52,21.5365],[0.53,20.6595],[0.54,19.9895],[0.55,20.0865],[0.56,16.2057],[0.57,16.6082],[0.58,16.7596],[0.59,15.8378],[0.6,15.8784],[0.61,15.1861],[0.62,14.7117],[0.63,14.8308],[0.64,13.5094],[0.65,15.7348],[0.66,12.8068],[0.67,16.2639],[0.68,17.6836],[0.69,16.1371],[0.7,18.3225],[0.71,19.7684],[0.72,19.1421],[0.73,19.2583],[0.74,18.3487],[0.75,17.2129],[0.76,19.1209],[0.77,20.8909],[0.78,19.5731],[0.79,18.4289],[0.8,18.5831],[0.81,17.0154],[0.82,13.0984],[0.83,12.0743],[0.84,15.9875],[0.85,18.9779],[0.86,23.2251],[0.87,18.1725],[0.88,19.2234],[0.89,21.0074]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,27.5291],[0.11,28.0499],[0.12,29.042],[0.13,18.684],[0.14,25.9848],[0.15,38.8321],[0.16,35.1422],[0.17,34.5962],[0.18,39.4493],[0.19,36.2533],[0.2,37.9764],[0.21,32.886],[0.22,33.1524],[0.23,35.5354],[0.24,35.1303],[0.25,32.393],[0.26,34.6821],[0.27,29.5455],[0.28,30.7185],[0.29,27.4871],[0.3,24.6397],[0.31,22.8436],[0.32,20.5764],[0.33,21.1681],[0.34,16.4838],[0.35,21.4516],[0.36,24.2366],[0.37,25.4071],[0.38,27.7357],[0.39,31.6021],[0.4,28.4427],[0.41,31.2027],[0.42,28.54],[0.43,29.9333],[0.44,30.9467],[0.45,31.7898],[0.46,27.8971],[0.47,25.5396],[0.48,23.4975],[0.49,20.8545],[0.5,19.106],[0.51,18.8331],[0.52,22.6243],[0.53,22.9717],[0.54,25.772],[0.55,24.6245],[0.56,24.9839],[0.57,26.3266],[0.58,26.3501],[0.59,23.6426],[0.6,25.9829],[0.61,30.1549],[0.62,31.9527],[0.63,34.2647],[0.64,36.8162],[0.65,31.1057],[0.66,35.4514],[0.67,33.8048],[0.68,32.8586],[0.69,30.8159],[0.7,29.8716],[0.71,28.2245],[0.72,28.72],[0.73,29.398],[0.74,26.3517],[0.75,27.4483],[0.76,21.4578],[0.77,27.0062],[0.78,26.7962],[0.79,27.3995],[0.8,27.344],[0.81,23.5608],[0.82,21.3038],[0.83,21.2733],[0.84,19.5937],[0.85,15.3306],[0.86,8.25913],[0.87,11.9417],[0.88,12.1025],[0.89,10.2991]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,39.4255],[0.11,37.2783],[0.12,40.467],[0.13,42.4671],[0.14,52.3848],[0.15,41.0949],[0.16,40.8727],[0.17,40.1443],[0.18,39.1327],[0.19,43.6941],[0.2,44.9318],[0.21,43.58],[0.22,44.3811],[0.23,42.8052],[0.24,41.2648],[0.25,48.6663],[0.26,47.0107],[0.27,51.4042],[0.28,49.4901],[0.29,51.9921],[0.3,50.9942],[0.31,52.7713],[0.32,57.3937],[0.33,58.1567],[0.34,61.3586],[0.35,55.6729],[0.36,57.4793],[0.37,56.6143],[0.38,57.2274],[0.39,52.8557],[0.4,52.997],[0.41,50.9896],[0.42,49.7187],[0.43,48.5422],[0.44,47.3121],[0.45,45.4029],[0.46,48.0398],[0.47,49.2883],[0.48,54.4516],[0.49,58.2966],[0.5,58.318],[0.51,57.7142],[0.52,55.8392],[0.53,56.3688],[0.54,54.2385],[0.55,55.2891],[0.56,58.8103],[0.57,57.0652],[0.58,56.8903],[0.59,60.5197],[0.6,58.1387],[0.61,54.6591],[0.62,53.3357],[0.63,50.9045],[0.64,49.6745],[0.65,53.1595],[0.66,51.7419],[0.67,49.9312],[0.68,49.4578],[0.69,53.047],[0.7,51.8059],[0.71,52.0071],[0.72,52.1379],[0.73,51.3438],[0.74,55.2996],[0.75,55.3388],[0.76,59.4213],[0.77,52.1029],[0.78,53.6307],[0.79,54.1716],[0.8,54.073],[0.81,59.4238],[0.82,65.5978],[0.83,66.6524],[0.84,64.4188],[0.85,65.6916],[0.86,68.5158],[0.87,69.8858],[0.88,68.6742],[0.89,68.6934]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66,0],[0.66,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,33.0455],[-4.5309,34.6717],[-4.47859,30.491],[-4.12148,38.8489],[-4.10517,21.6304],[-3.75041,20.073],[-3.13909,23.9852],[-3.0607,25.2596],[-2.81501,21.4179],[-2.79442,20.0526],[-2.48686,17.0918],[-2.4416,23.534],[-2.34887,22.4666],[-2.27523,21.6594],[-2.26291,23.6049],[-2.22676,18.9406],[-2.20558,18.3071],[-1.45566,19.0503],[-1.45062,19.7914],[-1.19895,20.5208],[-1.19137,24.3662],[-1.15069,24.3851],[-1.0637,22.0299],[-0.949787,20.6752],[-0.70966,22.1577],[-0.320802,22.8756],[-0.315157,18.2841],[-0.288348,17.9786],[-0.27909,15.0368],[-0.035681,15.5422],[0.1253,18.5603],[0.233188,17.8078],[0.246357,21.7413],[0.328182,21.5245],[0.33482,21.7411],[0.379378,22.8073],[0.59061,24.0631],[0.784601,25.1721],[0.984863,22.0509],[1.37923,20.8489],[1.46952,22.576],[1.48069,23.4527],[1.51924,21.5365],[1.6795,20.6595],[1.71187,19.9895],[1.72863,20.0865],[1.96847,16.2057],[1.98399,16.6082],[2.07895,16.7596],[2.09839,15.8378],[2.21662,15.8784],[2.53454,15.1861],[2.73875,14.7117],[2.8277,14.8308],[2.89812,13.5094],[2.9207,15.7348],[3.17236,12.8068],[3.24837,16.2639],[3.78926,17.6836],[3.94215,16.1371],[4.02417,18.3225],[4.2294,19.7684],[4.57202,19.1421],[4.76186,19.2583],[5.27131,18.3487],[5.34578,17.2129],[5.5233,19.1209],[5.54196,20.8909],[5.61784,19.5731],[6.33235,18.4289],[6.36116,18.5831],[6.5486,17.0154],[6.75573,13.0984],[7.09018,12.0743],[7.09831,15.9875],[7.14207,18.9779],[7.60731,23.2251],[7.73314,18.1725],[8.00481,19.2234],[8.14869,21.0074]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,27.5291],[-4.5309,28.0499],[-4.47859,29.042],[-4.12148,18.684],[-4.10517,25.9848],[-3.75041,38.8321],[-3.13909,35.1422],[-3.0607,34.5962],[-2.81501,39.4493],[-2.79442,36.2533],[-2.48686,37.9764],[-2.4416,32.886],[-2.34887,33.1524],[-2.27523,35.5354],[-2.26291,35.1303],[-2.22676,32.393],[-2.20558,34.6821],[-1.45566,29.5455],[-1.45062,30.7185],[-1.19895,27.4871],[-1.19137,24.6397],[-1.15069,22.8436],[-1.0637,20.5764],[-0.949787,21.1681],[-0.70966,16.4838],[-0.320802,21.4516],[-0.315157,24.2366],[-0.288348,25.4071],[-0.27909,27.7357],[-0.035681,31.6021],[0.1253,28.4427],[0.233188,31.2027],[0.246357,28.54],[0.328182,29.9333],[0.33482,30.9467],[0.379378,31.7898],[0.59061,27.8971],[0.784601,25.5396],[0.984863,23.4975],[1.37923,20.8545],[1.46952,19.106],[1.48069,18.8331],[1.51924,22.6243],[1.6795,22.9717],[1.71187,25.772],[1.72863,24.6245],[1.96847,24.9839],[1.98399,26.3266],[2.07895,26.3501],[2.09839,23.6426],[2.21662,25.9829],[2.53454,30.1549],[2.73875,31.9527],[2.8277,34.2647],[2.89812,36.8162],[2.9207,31.1057],[3.17236,35.4514],[3.24837,33.8048],[3.78926,32.8586],[3.94215,30.8159],[4.02417,29.8716],[4.2294,28.2245],[4.57202,28.72],[4.76186,29.398],[5.27131,26.3517],[5.34578,27.4483],[5.5233,21.4578],[5.54196,27.0062],[5.61784,26.7962],[6.33235,27.3995],[6.36116,27.344],[6.5486,23.5608],[6.75573,21.3038],[7.09018,21.2733],[7.09831,19.5937],[7.14207,15.3306],[7.60731,8.25913],[7.73314,11.9417],[8.00481,12.1025],[8.14869,10.2991]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,39.4255],[-4.5309,37.2783],[-4.47859,40.467],[-4.12148,42.4671],[-4.10517,52.3848],[-3.75041,41.0949],[-3.13909,40.8727],[-3.0607,40.1443],[-2.81501,39.1327],[-2.79442,43.6941],[-2.48686,44.9318],[-2.4416,43.58],[-2.34887,44.3811],[-2.27523,42.8052],[-2.26291,41.2648],[-2.22676,48.6663],[-2.20558,47.0107],[-1.45566,51.4042],[-1.45062,49.4901],[-1.19895,51.9921],[-1.19137,50.9942],[-1.15069,52.7713],[-1.0637,57.3937],[-0.949787,58.1567],[-0.70966,61.3586],[-0.320802,55.6729],[-0.315157,57.4793],[-0.288348,56.6143],[-0.27909,57.2274],[-0.035681,52.8557],[0.1253,52.997],[0.233188,50.9896],[0.246357,49.7187],[0.328182,48.5422],[0.33482,47.3121],[0.379378,45.4029],[0.59061,48.0398],[0.784601,49.2883],[0.984863,54.4516],[1.37923,58.2966],[1.46952,58.318],[1.48069,57.7142],[1.51924,55.8392],[1.6795,56.3688],[1.71187,54.2385],[1.72863,55.2891],[1.96847,58.8103],[1.98399,57.0652],[2.07895,56.8903],[2.09839,60.5197],[2.21662,58.1387],[2.53454,54.6591],[2.73875,53.3357],[2.8277,50.9045],[2.89812,49.6745],[2.9207,53.1595],[3.17236,51.7419],[3.24837,49.9312],[3.78926,49.4578],[3.94215,53.047],[4.02417,51.8059],[4.2294,52.0071],[4.57202,52.1379],[4.76186,51.3438],[5.27131,55.2996],[5.34578,55.3388],[5.5233,59.4213],[5.54196,52.1029],[5.61784,53.6307],[6.33235,54.1716],[6.36116,54.073],[6.5486,59.4238],[6.75573,65.5978],[7.09018,66.6524],[7.09831,64.4188],[7.14207,65.6916],[7.60731,68.5158],[7.73314,69.8858],[8.00481,68.6742],[8.14869,68.6934]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[4.4789,2.87188,3.55023],[-0.190007,0.953983,4.70675],[1.71238,-1.6353,-1.38999],[0.112632,-0.652409,-0.497633],[1.86807,-0.288417,-0.119804],[1.10934,0.887042,2.51507],[-0.326315,2.36729,2.18209],[-3.41744,-0.558063,-0.406172],[0.886609,2.1762,2.47768],[2.45426,-1.3662,2.7064],[3.06396,1.20893,2.03102],[-2.46502,1.73846,2.33421],[-0.0256198,0.0444923,3.52528],[4.15692,4.78011,1.78059],[1.47152,1.4899,2.14338],[0.158916,2.10651,-3.38764],[1.84256,2.50752,-0.0248387],[0.387549,-1.42206,1.03496],[-1.33003,1.12878,2.43522],[0.391464,0.21725,1.51643],[-1.98155,3.12364,1.74994],[0.669065,1.71574,2.77024],[4.4758,-0.426391,4.41285],[1.85727,0.44481,1.82259],[1.74089,1.37571,3.86531],[0.167744,0.754263,2.90098],[0.177744,-0.96098,2.12839],[-2.11333,2.24978,3.11595],[-0.539057,4.08473,1.7496],[2.01221,1.83954,4.16256],[1.01913,0.23396,1.3274],[3.51221,1.01241,1.54401],[0.692432,0.191668,5.18449],[2.35009,0.233583,0.289521],[-1.61059,-2.03153,1.34432],[2.15536,0.653901,2.32434],[2.39568,2.57916,1.95861],[0.101134,4.53141,1.56332],[1.25596,-0.495932,2.02578],[3.17226,-0.103903,4.15781],[0.555213,1.41101,3.67702],[1.09051,5.31299,3.0197],[3.37796,3.5753,0.440306],[-0.134684,1.15789,0.251803],[1.73782,0.567502,-0.928986],[3.28509,1.54391,-0.25352],[-1.49109,-0.587738,2.6173],[2.1038,3.52428,0.202539],[-3.2701,1.84134,0.670087],[-1.55578,-0.49667,1.89526],[4.21299,-1.47664,-0.714225],[-0.592025,6.11066,-1.81931],[1.32351,3.14305,0.84877],[0.22838,-0.391797,0.519658],[1.02807,-1.65566,0.15639],[-1.62914,0.371516,2.74019],[-1.10057,-0.323497,0.202086],[0.386261,5.48194,-2.68451],[-1.25257,0.313818,3.71413],[-1.28289,2.43982,2.38258],[1.03148,2.79571,0.946217],[-1.34506,-1.44645,3.67458],[0.175825,3.81015,2.67988],[0.656348,-0.224273,1.86638],[3.51978,-3.30271,2.27677],[3.39719,2.1521,-4.44212],[0.0867313,2.6689,1.37945],[-2.11979,1.28341,0.374247],[-1.19338,3.61256,-0.207086],[1.16894,-1.02313,0.0917397],[1.36865,3.22206,1.06653],[0.194547,2.62427,1.27592],[-0.104793,2.4246,2.3156],[0.405799,1.57628,-0.687002],[3.9628,2.80972,2.80108],[1.42276,1.81643,0.418583],[-1.07537,1.80735,0.927751],[0.912009,4.15713,3.89007],[-0.816687,-1.65801,0.0475713],[3.04477,-1.39575,6.19205],[1.29971,0.218748,0.376689],[0.0971018,1.47419,2.24877],[-0.1106,2.53129,2.01851],[1.83226,-1.85651,0.689515],[3.39729,0.620378,-1.19962],[2.45439,2.13294,-1.87401],[0.492815,2.79647,2.46535],[0.780903,0.0280615,0.286559],[-1.51877,1.06995,0.180725],[2.59103,-3.21629,-0.829769],[3.19004,0.87343,5.00726],[0.750237,1.12082,0.100649],[1.31818,-3.08635,3.12288],[-1.88831,2.5022,2.68812],[-1.47815,2.48721,3.86927],[1.154,-3.37477,1.47523],[2.61006,2.56839,3.04265],[0.281941,-1.33305,3.03573],[1.55168,2.81469,1.71986],[3.35656,4.15706,5.1498]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[7.27154],[7.79251],[1.38535],[0.095979],[2.06109],[4.80891],[0.486921],[-3.39268],[2.57766],[9.91636],[5.3126],[-0.404296],[6.9582],[0.547938],[3.52344],[-9.77613],[-1.96839],[4.59057],[1.84724],[3.09845],[-3.16713],[3.63593],[13.9411],[4.83524],[7.40795],[4.8383],[5.876],[0.743905],[-3.16695],[7.57803],[3.32298],[5.08161],[10.7739],[2.57875],[4.12534],[5.8232],[2.44417],[-3.56935],[6.05143],[11.6437],[5.79274],[-0.839581],[-1.10438],[-1.36791],[-0.971405],[0.462197],[4.62513],[-2.77754],[-4.69194],[2.97973],[4.9995],[-13.3966],[-1.69352],[1.85539],[3.82433],[3.29397],[-0.211155],[-13.2057],[5.70497],[-0.177466],[-1.26965],[8.17378],[-0.179641],[4.72551],[13.0274],[-8.71519],[-1.15773],[-3.29642],[-7.0264],[2.88712],[-1.33139],[-1.19003],[0.889504],[-3.33263],[5.35039],[-0.464728],[-1.93089],[2.45644],[1.76546],[17.5225],[1.72497],[2.38336],[0.129485],[5.99606],[0.0674878],[-4.49303],[1.2288],[1.31193],[-2.76225],[5.75593],[11.8944],[-0.729691],[12.1935],[-0.265379],[2.52958],[9.16661],[4.84278],[8.35299],[0.769358],[7.42057]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Less name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[0.339512,1.98322,0.750264] Importance factors at threshold 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.297712,0.659726,0.0425626] Importance factors at threshold/2 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.197376,0.710002,0.0926222] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 29.8%,X1 : 66.0%,X2 : 4.3%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.297712],[0.659726],[0.0425626]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,12.9187],[0.11,18.627],[0.12,23.9104],[0.13,25.102],[0.14,20.5508],[0.15,24.5146],[0.16,21.3221],[0.17,24.2244],[0.18,22.1203],[0.19,23.4127],[0.2,21.4298],[0.21,20.2654],[0.22,20.5734],[0.23,21.0085],[0.24,16.2897],[0.25,15.005],[0.26,13.6465],[0.27,13.6796],[0.28,12.7837],[0.29,16.6768],[0.3,19.7456],[0.31,22.7563],[0.32,22.5981],[0.33,24.7704],[0.34,21.6611],[0.35,23.1871],[0.36,23.8839],[0.37,20.6727],[0.38,21.732],[0.39,16.7691],[0.4,19.7678],[0.41,18.4892],[0.42,19.1428],[0.43,19.0277],[0.44,19.5882],[0.45,19.7376],[0.46,19.6935],[0.47,22.7441],[0.48,25.4997],[0.49,27.0677],[0.5,26.6141],[0.51,27.6507],[0.52,25.3684],[0.53,24.1975],[0.54,26.4034],[0.55,26.0252],[0.56,24.9795],[0.57,25.8767],[0.58,29.7712],[0.59,31.0799],[0.6,34.7392],[0.61,35.3773],[0.62,34.6557],[0.63,34.7025],[0.64,36.7169],[0.65,42.3946],[0.66,45.4221],[0.67,50.0608],[0.68,51.8769],[0.69,52.1112],[0.7,51.912],[0.71,53.2479],[0.72,49.867],[0.73,48.929],[0.74,45.905],[0.75,43.0842],[0.76,37.2184],[0.77,40.7653],[0.78,43.5825],[0.79,43.4467],[0.8,42.0606],[0.81,45.362],[0.82,47.9682],[0.83,49.3621],[0.84,51.2147],[0.85,42.5462],[0.86,39.6153],[0.87,30.9307],[0.88,27.3784],[0.89,27.3826]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,34.7978],[0.11,32.0604],[0.12,35.0508],[0.13,40.7637],[0.14,45.7129],[0.15,42.2422],[0.16,44.509],[0.17,43.7937],[0.18,47.4283],[0.19,45.7544],[0.2,49.557],[0.21,52.106],[0.22,53.8536],[0.23,55.5359],[0.24,60.2995],[0.25,58.3081],[0.26,65.2949],[0.27,64.248],[0.28,64.7892],[0.29,63.9273],[0.3,64.2499],[0.31,60.3079],[0.32,63.5584],[0.33,63.6352],[0.34,64.0169],[0.35,60.5124],[0.36,61.6939],[0.37,63.3249],[0.38,64.2349],[0.39,70.6233],[0.4,70.2512],[0.41,72.4583],[0.42,73.186],[0.43,74.6395],[0.44,73.4719],[0.45,71.0002],[0.46,70.3305],[0.47,66.0679],[0.48,64.8833],[0.49,62.7179],[0.5,61.743],[0.51,62.0563],[0.52,65.2838],[0.53,69.2052],[0.54,69.1558],[0.55,70.4271],[0.56,70.9662],[0.57,69.3348],[0.58,65.9726],[0.59,64.9162],[0.6,62.2515],[0.61,61.7173],[0.62,62.9651],[0.63,63.6612],[0.64,61.2086],[0.65,55.632],[0.66,52.5364],[0.67,48.5527],[0.68,47.0029],[0.69,47.1965],[0.7,47.5722],[0.71,46.5747],[0.72,50.1218],[0.73,50.9145],[0.74,53.9958],[0.75,56.8953],[0.76,62.7525],[0.77,58.8331],[0.78,56.2984],[0.79,55.8642],[0.8,56.7511],[0.81,52.8985],[0.82,50.2709],[0.83,48.1907],[0.84,44.5632],[0.85,50.731],[0.86,50.5558],[0.87,54.7106],[0.88,54.27],[0.89,49.8326]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,52.2836],[0.11,49.3126],[0.12,41.0389],[0.13,34.1343],[0.14,33.7362],[0.15,33.2432],[0.16,34.169],[0.17,31.9818],[0.18,30.4514],[0.19,30.8328],[0.2,29.0132],[0.21,27.6286],[0.22,25.573],[0.23,23.4556],[0.24,23.4108],[0.25,26.6869],[0.26,21.0586],[0.27,22.0724],[0.28,22.427],[0.29,19.3959],[0.3,16.0046],[0.31,16.9357],[0.32,13.8434],[0.33,11.5944],[0.34,14.322],[0.35,16.3004],[0.36,14.4223],[0.37,16.0023],[0.38,14.0331],[0.39,12.6076],[0.4,9.98102],[0.41,9.0525],[0.42,7.67117],[0.43,6.33283],[0.44,6.93996],[0.45,9.26222],[0.46,9.97599],[0.47,11.1881],[0.48,9.61701],[0.49,10.2144],[0.5,11.6429],[0.51,10.2929],[0.52,9.34775],[0.53,6.59723],[0.54,4.44077],[0.55,3.54774],[0.56,4.05429],[0.57,4.78856],[0.58,4.25626],[0.59,4.00395],[0.6,3.00938],[0.61,2.90542],[0.62,2.37925],[0.63,1.63637],[0.64,2.07448],[0.65,1.97342],[0.66,2.04152],[0.67,1.38657],[0.68,1.12022],[0.69,0.692307],[0.7,0.515795],[0.71,0.177396],[0.72,0.0112638],[0.73,0.156418],[0.74,0.099164],[0.75,0.0204638],[0.76,0.0290438],[0.77,0.401621],[0.78,0.119076],[0.79,0.68903],[0.8,1.18832],[0.81,1.73954],[0.82,1.76085],[0.83,2.44715],[0.84,4.22206],[0.85,6.72284],[0.86,9.82893],[0.87,14.3587],[0.88,18.3515],[0.89,22.7848]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.58,0],[0.58,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,12.9187],[-3.16713,18.627],[-3.16695,23.9104],[-2.77754,25.102],[-2.76225,20.5508],[-1.96839,24.5146],[-1.93089,21.3221],[-1.69352,24.2244],[-1.36791,22.1203],[-1.33139,23.4127],[-1.26965,21.4298],[-1.19003,20.2654],[-1.15773,20.5734],[-1.10438,21.0085],[-0.971405,16.2897],[-0.839581,15.005],[-0.729691,13.6465],[-0.464728,13.6796],[-0.404296,12.7837],[-0.265379,16.6768],[-0.211155,19.7456],[-0.179641,22.7563],[-0.177466,22.5981],[0.0674878,24.7704],[0.095979,21.6611],[0.129485,23.1871],[0.462197,23.8839],[0.486921,20.6727],[0.547938,21.732],[0.743905,16.7691],[0.769358,19.7678],[0.889504,18.4892],[1.2288,19.1428],[1.31193,19.0277],[1.38535,19.5882],[1.72497,19.7376],[1.76546,19.6935],[1.84724,22.7441],[1.85539,25.4997],[2.06109,27.0677],[2.38336,26.6141],[2.44417,27.6507],[2.45644,25.3684],[2.52958,24.1975],[2.57766,26.4034],[2.57875,26.0252],[2.88712,24.9795],[2.97973,25.8767],[3.09845,29.7712],[3.29397,31.0799],[3.32298,34.7392],[3.52344,35.3773],[3.63593,34.6557],[3.82433,34.7025],[4.12534,36.7169],[4.59057,42.3946],[4.62513,45.4221],[4.72551,50.0608],[4.80891,51.8769],[4.83524,52.1112],[4.8383,51.912],[4.84278,53.2479],[4.9995,49.867],[5.08161,48.929],[5.3126,45.905],[5.35039,43.0842],[5.70497,37.2184],[5.75593,40.7653],[5.79274,43.5825],[5.8232,43.4467],[5.876,42.0606],[5.99606,45.362],[6.05143,47.9682],[6.9582,49.3621],[7.27154,51.2147],[7.40795,42.5462],[7.42057,39.6153],[7.57803,30.9307],[7.79251,27.3784],[8.17378,27.3826]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,34.7978],[-3.16713,32.0604],[-3.16695,35.0508],[-2.77754,40.7637],[-2.76225,45.7129],[-1.96839,42.2422],[-1.93089,44.509],[-1.69352,43.7937],[-1.36791,47.4283],[-1.33139,45.7544],[-1.26965,49.557],[-1.19003,52.106],[-1.15773,53.8536],[-1.10438,55.5359],[-0.971405,60.2995],[-0.839581,58.3081],[-0.729691,65.2949],[-0.464728,64.248],[-0.404296,64.7892],[-0.265379,63.9273],[-0.211155,64.2499],[-0.179641,60.3079],[-0.177466,63.5584],[0.0674878,63.6352],[0.095979,64.0169],[0.129485,60.5124],[0.462197,61.6939],[0.486921,63.3249],[0.547938,64.2349],[0.743905,70.6233],[0.769358,70.2512],[0.889504,72.4583],[1.2288,73.186],[1.31193,74.6395],[1.38535,73.4719],[1.72497,71.0002],[1.76546,70.3305],[1.84724,66.0679],[1.85539,64.8833],[2.06109,62.7179],[2.38336,61.743],[2.44417,62.0563],[2.45644,65.2838],[2.52958,69.2052],[2.57766,69.1558],[2.57875,70.4271],[2.88712,70.9662],[2.97973,69.3348],[3.09845,65.9726],[3.29397,64.9162],[3.32298,62.2515],[3.52344,61.7173],[3.63593,62.9651],[3.82433,63.6612],[4.12534,61.2086],[4.59057,55.632],[4.62513,52.5364],[4.72551,48.5527],[4.80891,47.0029],[4.83524,47.1965],[4.8383,47.5722],[4.84278,46.5747],[4.9995,50.1218],[5.08161,50.9145],[5.3126,53.9958],[5.35039,56.8953],[5.70497,62.7525],[5.75593,58.8331],[5.79274,56.2984],[5.8232,55.8642],[5.876,56.7511],[5.99606,52.8985],[6.05143,50.2709],[6.9582,48.1907],[7.27154,44.5632],[7.40795,50.731],[7.42057,50.5558],[7.57803,54.7106],[7.79251,54.27],[8.17378,49.8326]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,52.2836],[-3.16713,49.3126],[-3.16695,41.0389],[-2.77754,34.1343],[-2.76225,33.7362],[-1.96839,33.2432],[-1.93089,34.169],[-1.69352,31.9818],[-1.36791,30.4514],[-1.33139,30.8328],[-1.26965,29.0132],[-1.19003,27.6286],[-1.15773,25.573],[-1.10438,23.4556],[-0.971405,23.4108],[-0.839581,26.6869],[-0.729691,21.0586],[-0.464728,22.0724],[-0.404296,22.427],[-0.265379,19.3959],[-0.211155,16.0046],[-0.179641,16.9357],[-0.177466,13.8434],[0.0674878,11.5944],[0.095979,14.322],[0.129485,16.3004],[0.462197,14.4223],[0.486921,16.0023],[0.547938,14.0331],[0.743905,12.6076],[0.769358,9.98102],[0.889504,9.0525],[1.2288,7.67117],[1.31193,6.33283],[1.38535,6.93996],[1.72497,9.26222],[1.76546,9.97599],[1.84724,11.1881],[1.85539,9.61701],[2.06109,10.2144],[2.38336,11.6429],[2.44417,10.2929],[2.45644,9.34775],[2.52958,6.59723],[2.57766,4.44077],[2.57875,3.54774],[2.88712,4.05429],[2.97973,4.78856],[3.09845,4.25626],[3.29397,4.00395],[3.32298,3.00938],[3.52344,2.90542],[3.63593,2.37925],[3.82433,1.63637],[4.12534,2.07448],[4.59057,1.97342],[4.62513,2.04152],[4.72551,1.38657],[4.80891,1.12022],[4.83524,0.692307],[4.8383,0.515795],[4.84278,0.177396],[4.9995,0.0112638],[5.08161,0.156418],[5.3126,0.099164],[5.35039,0.0204638],[5.70497,0.0290438],[5.75593,0.401621],[5.79274,0.119076],[5.8232,0.68903],[5.876,1.18832],[5.99606,1.73954],[6.05143,1.76085],[6.9582,2.44715],[7.27154,4.22206],[7.40795,6.72284],[7.42057,9.82893],[7.57803,14.3587],[7.79251,18.3515],[8.17378,22.7848]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=LessOrEqual name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[0.609686,1.6494,0.21546] Importance factors at 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.128068,0.354514,0.517419] Importance factors at 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.215365,0.226243,0.558392] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 12.8%,X1 : 35.5%,X2 : 51.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.128068],[0.354514],[0.517419]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,34.6717],[0.12,30.491],[0.13,38.8489],[0.14,21.6304],[0.15,20.073],[0.16,23.9852],[0.17,25.2596],[0.18,21.4179],[0.19,20.0526],[0.2,17.0918],[0.21,23.534],[0.22,22.4666],[0.23,21.6594],[0.24,23.6049],[0.25,18.9406],[0.26,18.3071],[0.27,19.0503],[0.28,19.7914],[0.29,20.5208],[0.3,24.3662],[0.31,24.3851],[0.32,22.0299],[0.33,20.6752],[0.34,22.1577],[0.35,22.8756],[0.36,18.2841],[0.37,17.9786],[0.38,15.0368],[0.39,15.5422],[0.4,18.5603],[0.41,17.8078],[0.42,21.7413],[0.43,21.5245],[0.44,21.7411],[0.45,22.8073],[0.46,24.0631],[0.47,25.1721],[0.48,22.0509],[0.49,20.8489],[0.5,22.576],[0.51,23.4527],[0.52,21.5365],[0.53,20.6595],[0.54,19.9895],[0.55,20.0865],[0.56,16.2057],[0.57,16.6082],[0.58,16.7596],[0.59,15.8378],[0.6,15.8784],[0.61,15.1861],[0.62,14.7117],[0.63,14.8308],[0.64,13.5094],[0.65,15.7348],[0.66,12.8068],[0.67,16.2639],[0.68,17.6836],[0.69,16.1371],[0.7,18.3225],[0.71,19.7684],[0.72,19.1421],[0.73,19.2583],[0.74,18.3487],[0.75,17.2129],[0.76,19.1209],[0.77,20.8909],[0.78,19.5731],[0.79,18.4289],[0.8,18.5831],[0.81,17.0154],[0.82,13.0984],[0.83,12.0743],[0.84,15.9875],[0.85,18.9779],[0.86,23.2251],[0.87,18.1725],[0.88,19.2234],[0.89,21.0074],[0.9,21.2549]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,28.0499],[0.12,29.042],[0.13,18.684],[0.14,25.9848],[0.15,38.8321],[0.16,35.1422],[0.17,34.5962],[0.18,39.4493],[0.19,36.2533],[0.2,37.9764],[0.21,32.886],[0.22,33.1524],[0.23,35.5354],[0.24,35.1303],[0.25,32.393],[0.26,34.6821],[0.27,29.5455],[0.28,30.7185],[0.29,27.4871],[0.3,24.6397],[0.31,22.8436],[0.32,20.5764],[0.33,21.1681],[0.34,16.4838],[0.35,21.4516],[0.36,24.2366],[0.37,25.4071],[0.38,27.7357],[0.39,31.6021],[0.4,28.4427],[0.41,31.2027],[0.42,28.54],[0.43,29.9333],[0.44,30.9467],[0.45,31.7898],[0.46,27.8971],[0.47,25.5396],[0.48,23.4975],[0.49,20.8545],[0.5,19.106],[0.51,18.8331],[0.52,22.6243],[0.53,22.9717],[0.54,25.772],[0.55,24.6245],[0.56,24.9839],[0.57,26.3266],[0.58,26.3501],[0.59,23.6426],[0.6,25.9829],[0.61,30.1549],[0.62,31.9527],[0.63,34.2647],[0.64,36.8162],[0.65,31.1057],[0.66,35.4514],[0.67,33.8048],[0.68,32.8586],[0.69,30.8159],[0.7,29.8716],[0.71,28.2245],[0.72,28.72],[0.73,29.398],[0.74,26.3517],[0.75,27.4483],[0.76,21.4578],[0.77,27.0062],[0.78,26.7962],[0.79,27.3995],[0.8,27.344],[0.81,23.5608],[0.82,21.3038],[0.83,21.2733],[0.84,19.5937],[0.85,15.3306],[0.86,8.25913],[0.87,11.9417],[0.88,12.1025],[0.89,10.2991],[0.9,14.4442]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,37.2783],[0.12,40.467],[0.13,42.4671],[0.14,52.3848],[0.15,41.0949],[0.16,40.8727],[0.17,40.1443],[0.18,39.1327],[0.19,43.6941],[0.2,44.9318],[0.21,43.58],[0.22,44.3811],[0.23,42.8052],[0.24,41.2648],[0.25,48.6663],[0.26,47.0107],[0.27,51.4042],[0.28,49.4901],[0.29,51.9921],[0.3,50.9942],[0.31,52.7713],[0.32,57.3937],[0.33,58.1567],[0.34,61.3586],[0.35,55.6729],[0.36,57.4793],[0.37,56.6143],[0.38,57.2274],[0.39,52.8557],[0.4,52.997],[0.41,50.9896],[0.42,49.7187],[0.43,48.5422],[0.44,47.3121],[0.45,45.4029],[0.46,48.0398],[0.47,49.2883],[0.48,54.4516],[0.49,58.2966],[0.5,58.318],[0.51,57.7142],[0.52,55.8392],[0.53,56.3688],[0.54,54.2385],[0.55,55.2891],[0.56,58.8103],[0.57,57.0652],[0.58,56.8903],[0.59,60.5197],[0.6,58.1387],[0.61,54.6591],[0.62,53.3357],[0.63,50.9045],[0.64,49.6745],[0.65,53.1595],[0.66,51.7419],[0.67,49.9312],[0.68,49.4578],[0.69,53.047],[0.7,51.8059],[0.71,52.0071],[0.72,52.1379],[0.73,51.3438],[0.74,55.2996],[0.75,55.3388],[0.76,59.4213],[0.77,52.1029],[0.78,53.6307],[0.79,54.1716],[0.8,54.073],[0.81,59.4238],[0.82,65.5978],[0.83,66.6524],[0.84,64.4188],[0.85,65.6916],[0.86,68.5158],[0.87,69.8858],[0.88,68.6742],[0.89,68.6934],[0.9,64.3009]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66,0],[0.66,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,34.6717],[-4.5309,30.491],[-4.47859,38.8489],[-4.12148,21.6304],[-4.10517,20.073],[-3.75041,23.9852],[-3.13909,25.2596],[-3.0607,21.4179],[-2.81501,20.0526],[-2.79442,17.0918],[-2.48686,23.534],[-2.4416,22.4666],[-2.34887,21.6594],[-2.27523,23.6049],[-2.26291,18.9406],[-2.22676,18.3071],[-2.20558,19.0503],[-1.45566,19.7914],[-1.45062,20.5208],[-1.19895,24.3662],[-1.19137,24.3851],[-1.15069,22.0299],[-1.0637,20.6752],[-0.949787,22.1577],[-0.70966,22.8756],[-0.320802,18.2841],[-0.315157,17.9786],[-0.288348,15.0368],[-0.27909,15.5422],[-0.035681,18.5603],[0.1253,17.8078],[0.233188,21.7413],[0.246357,21.5245],[0.328182,21.7411],[0.33482,22.8073],[0.379378,24.0631],[0.59061,25.1721],[0.784601,22.0509],[0.984863,20.8489],[1.37923,22.576],[1.46952,23.4527],[1.48069,21.5365],[1.51924,20.6595],[1.6795,19.9895],[1.71187,20.0865],[1.72863,16.2057],[1.96847,16.6082],[1.98399,16.7596],[2.07895,15.8378],[2.09839,15.8784],[2.21662,15.1861],[2.53454,14.7117],[2.73875,14.8308],[2.8277,13.5094],[2.89812,15.7348],[2.9207,12.8068],[3.17236,16.2639],[3.24837,17.6836],[3.78926,16.1371],[3.94215,18.3225],[4.02417,19.7684],[4.2294,19.1421],[4.57202,19.2583],[4.76186,18.3487],[5.27131,17.2129],[5.34578,19.1209],[5.5233,20.8909],[5.54196,19.5731],[5.61784,18.4289],[6.33235,18.5831],[6.36116,17.0154],[6.5486,13.0984],[6.75573,12.0743],[7.09018,15.9875],[7.09831,18.9779],[7.14207,23.2251],[7.60731,18.1725],[7.73314,19.2234],[8.00481,21.0074],[8.14869,21.2549]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,28.0499],[-4.5309,29.042],[-4.47859,18.684],[-4.12148,25.9848],[-4.10517,38.8321],[-3.75041,35.1422],[-3.13909,34.5962],[-3.0607,39.4493],[-2.81501,36.2533],[-2.79442,37.9764],[-2.48686,32.886],[-2.4416,33.1524],[-2.34887,35.5354],[-2.27523,35.1303],[-2.26291,32.393],[-2.22676,34.6821],[-2.20558,29.5455],[-1.45566,30.7185],[-1.45062,27.4871],[-1.19895,24.6397],[-1.19137,22.8436],[-1.15069,20.5764],[-1.0637,21.1681],[-0.949787,16.4838],[-0.70966,21.4516],[-0.320802,24.2366],[-0.315157,25.4071],[-0.288348,27.7357],[-0.27909,31.6021],[-0.035681,28.4427],[0.1253,31.2027],[0.233188,28.54],[0.246357,29.9333],[0.328182,30.9467],[0.33482,31.7898],[0.379378,27.8971],[0.59061,25.5396],[0.784601,23.4975],[0.984863,20.8545],[1.37923,19.106],[1.46952,18.8331],[1.48069,22.6243],[1.51924,22.9717],[1.6795,25.772],[1.71187,24.6245],[1.72863,24.9839],[1.96847,26.3266],[1.98399,26.3501],[2.07895,23.6426],[2.09839,25.9829],[2.21662,30.1549],[2.53454,31.9527],[2.73875,34.2647],[2.8277,36.8162],[2.89812,31.1057],[2.9207,35.4514],[3.17236,33.8048],[3.24837,32.8586],[3.78926,30.8159],[3.94215,29.8716],[4.02417,28.2245],[4.2294,28.72],[4.57202,29.398],[4.76186,26.3517],[5.27131,27.4483],[5.34578,21.4578],[5.5233,27.0062],[5.54196,26.7962],[5.61784,27.3995],[6.33235,27.344],[6.36116,23.5608],[6.5486,21.3038],[6.75573,21.2733],[7.09018,19.5937],[7.09831,15.3306],[7.14207,8.25913],[7.60731,11.9417],[7.73314,12.1025],[8.00481,10.2991],[8.14869,14.4442]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,37.2783],[-4.5309,40.467],[-4.47859,42.4671],[-4.12148,52.3848],[-4.10517,41.0949],[-3.75041,40.8727],[-3.13909,40.1443],[-3.0607,39.1327],[-2.81501,43.6941],[-2.79442,44.9318],[-2.48686,43.58],[-2.4416,44.3811],[-2.34887,42.8052],[-2.27523,41.2648],[-2.26291,48.6663],[-2.22676,47.0107],[-2.20558,51.4042],[-1.45566,49.4901],[-1.45062,51.9921],[-1.19895,50.9942],[-1.19137,52.7713],[-1.15069,57.3937],[-1.0637,58.1567],[-0.949787,61.3586],[-0.70966,55.6729],[-0.320802,57.4793],[-0.315157,56.6143],[-0.288348,57.2274],[-0.27909,52.8557],[-0.035681,52.997],[0.1253,50.9896],[0.233188,49.7187],[0.246357,48.5422],[0.328182,47.3121],[0.33482,45.4029],[0.379378,48.0398],[0.59061,49.2883],[0.784601,54.4516],[0.984863,58.2966],[1.37923,58.318],[1.46952,57.7142],[1.48069,55.8392],[1.51924,56.3688],[1.6795,54.2385],[1.71187,55.2891],[1.72863,58.8103],[1.96847,57.0652],[1.98399,56.8903],[2.07895,60.5197],[2.09839,58.1387],[2.21662,54.6591],[2.53454,53.3357],[2.73875,50.9045],[2.8277,49.6745],[2.89812,53.1595],[2.9207,51.7419],[3.17236,49.9312],[3.24837,49.4578],[3.78926,53.047],[3.94215,51.8059],[4.02417,52.0071],[4.2294,52.1379],[4.57202,51.3438],[4.76186,55.2996],[5.27131,55.3388],[5.34578,59.4213],[5.5233,52.1029],[5.54196,53.6307],[5.61784,54.1716],[6.33235,54.073],[6.36116,59.4238],[6.5486,65.5978],[6.75573,66.6524],[7.09018,64.4188],[7.09831,65.6916],[7.14207,68.5158],[7.60731,69.8858],[7.73314,68.6742],[8.00481,68.6934],[8.14869,64.3009]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.91317,-0.110719,1.06505],[1.28794,1.89919,1.47383],[2.08501,0.503423,3.43982],[2.23935,-4.32385,3.33727],[1.234,4.78542,0.719989],[3.50064,-0.336183,-1.45142],[-0.630501,2.1418,1.25805],[-2.45336,0.862952,0.985818],[1.18601,-0.952067,-0.0362525],[2.26934,-0.895221,-1.27649],[1.21943,2.6942,-1.54308],[-0.581161,4.17279,-0.224464],[4.67873,0.417293,-0.201367],[-0.234817,3.57293,1.92257],[1.74265,3.73461,-2.53147],[3.20234,1.96713,-1.73002],[1.55585,2.25189,3.09561],[0.0682857,-2.28397,0.985556],[-0.961249,-2.48094,-0.209828],[-0.104407,-0.231619,0.174068],[2.56781,1.93839,0.122275],[-0.332102,1.64599,4.38088],[0.632607,1.28824,0.178664],[1.51249,-1.60159,-0.411577],[-0.473549,-0.933038,1.89779],[7.31916,0.463827,4.11734],[-2.15823,2.19271,3.61927],[3.80213,3.29212,3.99904],[3.10563,1.73223,1.77573],[0.65691,2.45182,-1.22671],[-2.56237,1.55073,1.71766],[0.875437,5.35904,2.89315],[1.43984,0.862202,-0.358575],[2.76301,-1.56421,-2.78303],[1.04589,-1.08049,4.27581],[1.53173,1.23168,0.715899],[3.57058,0.577734,0.992697],[1.03531,1.04104,0.59975],[1.14645,-1.42447,2.28104],[-1.73534,-2.25314,1.30014],[2.55425,1.50984,1.80917],[2.53367,0.543523,-0.953988],[-0.470758,0.720007,0.639245],[-1.07314,-0.145007,-1.12389],[-0.639648,0.737415,-2.56723],[-1.85635,4.59439,2.59405],[-0.505387,0.390798,-4.9707],[0.11911,0.240733,-0.761493],[-0.568099,1.64466,-2.75668],[1.18641,-0.34667,-0.373187],[0.102107,1.07402,-1.76167],[-1.21156,0.832363,3.88913],[1.52728,3.74626,0.299455],[-0.432554,2.51157,3.22505],[0.830034,1.11935,-0.220175],[-2.56078,0.639792,-1.00444],[3.4933,2.76084,-2.11972],[-0.133359,1.00827,1.6899],[1.73224,1.36321,-2.5873],[0.149686,-0.0908521,3.53023],[-1.22909,-0.725009,-1.77288],[0.959441,3.70543,1.77511],[-1.00292,1.65481,-1.56802],[2.85235,3.61063,5.08196],[0.849862,-0.0600909,3.36915],[2.76496,1.52909,1.51679],[0.92653,1.79238,2.31364],[3.54421,4.8585,-0.368456],[0.138875,2.16669,1.60089],[-1.3516,2.85085,0.429532],[1.71844,3.90585,-1.28832],[3.33189,-2.36515,1.94089],[1.5439,0.14549,-0.0320811],[6.38797,4.53938,0.884756],[0.309125,1.21444,1.39354],[-0.216987,3.25555,3.74745],[0.744819,-2.04478,-0.558684],[-0.0522542,0.700735,1.2957],[3.6464,2.6031,0.907777],[-1.77659,0.666884,0.302492],[-2.99071,0.787796,-1.81848],[0.733252,0.20003,-0.670399],[1.71615,3.23959,0.619258],[-1.09564,0.861173,2.04707],[1.33693,-2.26741,1.73851],[2.87811,1.32029,2.45232],[0.719039,0.738519,2.30726],[0.0572024,3.90347,1.21145],[2.00576,-0.79575,1.42233],[-1.55112,-0.277042,2.30629],[-2.90481,0.240713,-0.270203],[-0.830914,2.00319,1.25869],[1.30981,3.2887,3.36589],[-1.10567,-1.13891,4.30473],[0.63667,0.606523,-1.3547],[-0.763052,-1.03839,-1.54836],[2.77344,1.83973,3.11602],[1.6063,3.86149,-0.0979818],[-2.16164,5.1424,-2.07746],[2.36019,-1.95768,0.627234]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[5.20935],[1.3868],[8.20951],[15.3997],[-4.50415],[1.10208],[-1.32709],[-1.77615],[2.5416],[1.05919],[-5.90802],[-7.28927],[3.65005],[-1.74907],[-8.92221],[-3.2084],[4.36923],[5.46535],[2.3405],[0.591158],[-0.0952245],[5.96067],[-0.942421],[3.09172],[4.7216],[14.8581],[1.79124],[6.86203],[4.05873],[-5.47425],[-1.45314],[-1.37682],[-0.570608],[-0.456735],[11.2182],[1.11601],[4.68937],[0.673257],[7.84523],[4.24465],[3.90784],[-0.18959],[-0.272278],[-3.1034],[-6.88023],[-3.55983],[-11.033],[-1.76498],[-8.54845],[0.960039],[-5.03225],[5.31815],[-3.4932],[2.25018],[-1.28933],[-5.52935],[-4.8874],[1.73405],[-5.48718],[7.34642],[-3.68735],[-1.04848],[-6.62117],[7.60032],[7.6783],[3.50491],[2.86524],[-4.48044],[0.0906129],[-4.7688],[-6.71696],[10.7614],[1.2615],[1.34842],[1.27453],[2.39459],[2.69462],[1.48804],[1.55731],[-2.17193],[-7.80936],[-0.907592],[-1.90472],[1.70673],[8.21508],[5.80232],[4.22577],[-3.37509],[6.04405],[3.47701],[-3.80629],[-1.31833],[3.10855],[9.21217],[-2.98252],[-2.30218],[6.24589],[-4.38191],[-14.0302],[6.55118]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=LessOrEqual name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[0.427001,1.63218,-0.049732] Importance factors at threshold 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.179423,0.218397,0.60218] Importance factors at threshold/2 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.103276,0.217728,0.678996] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 17.9%,X1 : 21.8%,X2 : 60.2%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.179423],[0.218397],[0.60218]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,18.5046],[0.12,14.8033],[0.13,13.75],[0.14,13.5712],[0.15,9.07706],[0.16,11.208],[0.17,10.2421],[0.18,6.90979],[0.19,5.89524],[0.2,9.01693],[0.21,10.5837],[0.22,13.1647],[0.23,11.9153],[0.24,12.2735],[0.25,9.55593],[0.26,10.9412],[0.27,10.7357],[0.28,11.8281],[0.29,13.9869],[0.3,12.9237],[0.31,15.819],[0.32,16.1399],[0.33,16.9956],[0.34,20.195],[0.35,19.9348],[0.36,21.1384],[0.37,22.5384],[0.38,22.2025],[0.39,21.7724],[0.4,21.7174],[0.41,21.5777],[0.42,20.7974],[0.43,18.759],[0.44,19.8518],[0.45,18.1446],[0.46,16.545],[0.47,17.1384],[0.48,17.9498],[0.49,17.7984],[0.5,17.501],[0.51,16.2435],[0.52,14.0452],[0.53,13.5884],[0.54,13.0875],[0.55,13.6139],[0.56,9.79187],[0.57,9.61606],[0.58,10.3276],[0.59,8.60715],[0.6,10.0131],[0.61,10.8299],[0.62,13.2599],[0.63,14.5246],[0.64,16.179],[0.65,17.4265],[0.66,17.3572],[0.67,17.6328],[0.68,17.9423],[0.69,17.5837],[0.7,17.6638],[0.71,20.3242],[0.72,18.9901],[0.73,15.8791],[0.74,14.8456],[0.75,13.3664],[0.76,13.9433],[0.77,16.7219],[0.78,16.6866],[0.79,14.688],[0.8,16.5129],[0.81,15.1435],[0.82,18.0275],[0.83,19.5806],[0.84,18.3411],[0.85,20.8266],[0.86,20.4815],[0.87,19.3871],[0.88,18.5904],[0.89,16.3646],[0.9,18.5948]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,12.9638],[0.12,11.8794],[0.13,12.7611],[0.14,11.4625],[0.15,12.7054],[0.16,14.3235],[0.17,19.0105],[0.18,23.735],[0.19,26.7917],[0.2,24.0508],[0.21,19.8867],[0.22,24.2417],[0.23,27.1315],[0.24,30.3076],[0.25,30.1824],[0.26,27.0545],[0.27,25.2037],[0.28,21.4893],[0.29,20.304],[0.3,22.4003],[0.31,21.5276],[0.32,19.9188],[0.33,22.3572],[0.34,22.314],[0.35,27.0714],[0.36,27.7477],[0.37,28.206],[0.38,27.6992],[0.39,30.4342],[0.4,30.1748],[0.41,28.625],[0.42,28.0236],[0.43,24.7042],[0.44,23.9819],[0.45,23.1923],[0.46,23.9382],[0.47,24.9377],[0.48,23.3812],[0.49,23.2678],[0.5,21.7377],[0.51,19.7203],[0.52,18.312],[0.53,18.4691],[0.54,17.5933],[0.55,17.7771],[0.56,21.1343],[0.57,22.0442],[0.58,21.7728],[0.59,23.3674],[0.6,23.3675],[0.61,23.4708],[0.62,24.9278],[0.63,26.8019],[0.64,23.1039],[0.65,25.7523],[0.66,23.7993],[0.67,20.7574],[0.68,21.8397],[0.69,19.398],[0.7,22.1124],[0.71,21.0349],[0.72,22.0292],[0.73,21.8458],[0.74,22.9062],[0.75,24.2931],[0.76,24.592],[0.77,21.317],[0.78,23.4028],[0.79,23.5993],[0.8,21.9226],[0.81,21.353],[0.82,21.9495],[0.83,18.7012],[0.84,19.9913],[0.85,21.7477],[0.86,20.4135],[0.87,22.7359],[0.88,19.8221],[0.89,24.6314],[0.9,24.5649]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,68.5316],[0.12,73.3174],[0.13,73.4889],[0.14,74.9663],[0.15,78.2175],[0.16,74.4685],[0.17,70.7475],[0.18,69.3552],[0.19,67.3131],[0.2,66.9323],[0.21,69.5295],[0.22,62.5936],[0.23,60.9532],[0.24,57.4189],[0.25,60.2617],[0.26,62.0043],[0.27,64.0605],[0.28,66.6826],[0.29,65.7092],[0.3,64.6759],[0.31,62.6534],[0.32,63.9412],[0.33,60.6472],[0.34,57.491],[0.35,52.9938],[0.36,51.1139],[0.37,49.2556],[0.38,50.0983],[0.39,47.7934],[0.4,48.1077],[0.41,49.7973],[0.42,51.179],[0.43,56.5367],[0.44,56.1663],[0.45,58.6631],[0.46,59.5168],[0.47,57.9239],[0.48,58.669],[0.49,58.9339],[0.5,60.7613],[0.51,64.0362],[0.52,67.6429],[0.53,67.9426],[0.54,69.3192],[0.55,68.609],[0.56,69.0738],[0.57,68.3397],[0.58,67.8996],[0.59,68.0254],[0.6,66.6194],[0.61,65.6993],[0.62,61.8124],[0.63,58.6735],[0.64,60.7171],[0.65,56.8213],[0.66,58.8435],[0.67,61.6098],[0.68,60.218],[0.69,63.0184],[0.7,60.2239],[0.71,58.6409],[0.72,58.9807],[0.73,62.2751],[0.74,62.2482],[0.75,62.3406],[0.76,61.4647],[0.77,61.9611],[0.78,59.9105],[0.79,61.7128],[0.8,61.5645],[0.81,63.5035],[0.82,60.023],[0.83,61.7182],[0.84,61.6676],[0.85,57.4257],[0.86,59.105],[0.87,57.877],[0.88,61.5874],[0.89,59.004],[0.9,56.8402]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.68,0],[0.68,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,18.5046],[-5.48718,14.8033],[-5.47425,13.75],[-5.03225,13.5712],[-4.8874,9.07706],[-4.7688,11.208],[-4.50415,10.2421],[-4.48044,6.90979],[-4.38191,5.89524],[-3.80629,9.01693],[-3.68735,10.5837],[-3.55983,13.1647],[-3.4932,11.9153],[-3.37509,12.2735],[-3.2084,9.55593],[-3.1034,10.9412],[-2.98252,10.7357],[-2.30218,11.8281],[-2.17193,13.9869],[-1.90472,12.9237],[-1.77615,15.819],[-1.76498,16.1399],[-1.74907,16.9956],[-1.45314,20.195],[-1.37682,19.9348],[-1.32709,21.1384],[-1.31833,22.5384],[-1.28933,22.2025],[-1.04848,21.7724],[-0.942421,21.7174],[-0.907592,21.5777],[-0.570608,20.7974],[-0.456735,18.759],[-0.272278,19.8518],[-0.18959,18.1446],[-0.0952245,16.545],[0.0906129,17.1384],[0.591158,17.9498],[0.673257,17.7984],[0.960039,17.501],[1.05919,16.2435],[1.10208,14.0452],[1.11601,13.5884],[1.2615,13.0875],[1.27453,13.6139],[1.34842,9.79187],[1.3868,9.61606],[1.48804,10.3276],[1.55731,8.60715],[1.70673,10.0131],[1.73405,10.8299],[1.79124,13.2599],[2.25018,14.5246],[2.3405,16.179],[2.39459,17.4265],[2.5416,17.3572],[2.69462,17.6328],[2.86524,17.9423],[3.09172,17.5837],[3.10855,17.6638],[3.47701,20.3242],[3.50491,18.9901],[3.65005,15.8791],[3.90784,14.8456],[4.05873,13.3664],[4.22577,13.9433],[4.24465,16.7219],[4.36923,16.6866],[4.68937,14.688],[4.7216,16.5129],[5.20935,15.1435],[5.31815,18.0275],[5.46535,19.5806],[5.80232,18.3411],[5.96067,20.8266],[6.04405,20.4815],[6.24589,19.3871],[6.55118,18.5904],[6.86203,16.3646],[7.34642,18.5948]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,12.9638],[-5.48718,11.8794],[-5.47425,12.7611],[-5.03225,11.4625],[-4.8874,12.7054],[-4.7688,14.3235],[-4.50415,19.0105],[-4.48044,23.735],[-4.38191,26.7917],[-3.80629,24.0508],[-3.68735,19.8867],[-3.55983,24.2417],[-3.4932,27.1315],[-3.37509,30.3076],[-3.2084,30.1824],[-3.1034,27.0545],[-2.98252,25.2037],[-2.30218,21.4893],[-2.17193,20.304],[-1.90472,22.4003],[-1.77615,21.5276],[-1.76498,19.9188],[-1.74907,22.3572],[-1.45314,22.314],[-1.37682,27.0714],[-1.32709,27.7477],[-1.31833,28.206],[-1.28933,27.6992],[-1.04848,30.4342],[-0.942421,30.1748],[-0.907592,28.625],[-0.570608,28.0236],[-0.456735,24.7042],[-0.272278,23.9819],[-0.18959,23.1923],[-0.0952245,23.9382],[0.0906129,24.9377],[0.591158,23.3812],[0.673257,23.2678],[0.960039,21.7377],[1.05919,19.7203],[1.10208,18.312],[1.11601,18.4691],[1.2615,17.5933],[1.27453,17.7771],[1.34842,21.1343],[1.3868,22.0442],[1.48804,21.7728],[1.55731,23.3674],[1.70673,23.3675],[1.73405,23.4708],[1.79124,24.9278],[2.25018,26.8019],[2.3405,23.1039],[2.39459,25.7523],[2.5416,23.7993],[2.69462,20.7574],[2.86524,21.8397],[3.09172,19.398],[3.10855,22.1124],[3.47701,21.0349],[3.50491,22.0292],[3.65005,21.8458],[3.90784,22.9062],[4.05873,24.2931],[4.22577,24.592],[4.24465,21.317],[4.36923,23.4028],[4.68937,23.5993],[4.7216,21.9226],[5.20935,21.353],[5.31815,21.9495],[5.46535,18.7012],[5.80232,19.9913],[5.96067,21.7477],[6.04405,20.4135],[6.24589,22.7359],[6.55118,19.8221],[6.86203,24.6314],[7.34642,24.5649]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,68.5316],[-5.48718,73.3174],[-5.47425,73.4889],[-5.03225,74.9663],[-4.8874,78.2175],[-4.7688,74.4685],[-4.50415,70.7475],[-4.48044,69.3552],[-4.38191,67.3131],[-3.80629,66.9323],[-3.68735,69.5295],[-3.55983,62.5936],[-3.4932,60.9532],[-3.37509,57.4189],[-3.2084,60.2617],[-3.1034,62.0043],[-2.98252,64.0605],[-2.30218,66.6826],[-2.17193,65.7092],[-1.90472,64.6759],[-1.77615,62.6534],[-1.76498,63.9412],[-1.74907,60.6472],[-1.45314,57.491],[-1.37682,52.9938],[-1.32709,51.1139],[-1.31833,49.2556],[-1.28933,50.0983],[-1.04848,47.7934],[-0.942421,48.1077],[-0.907592,49.7973],[-0.570608,51.179],[-0.456735,56.5367],[-0.272278,56.1663],[-0.18959,58.6631],[-0.0952245,59.5168],[0.0906129,57.9239],[0.591158,58.669],[0.673257,58.9339],[0.960039,60.7613],[1.05919,64.0362],[1.10208,67.6429],[1.11601,67.9426],[1.2615,69.3192],[1.27453,68.609],[1.34842,69.0738],[1.3868,68.3397],[1.48804,67.8996],[1.55731,68.0254],[1.70673,66.6194],[1.73405,65.6993],[1.79124,61.8124],[2.25018,58.6735],[2.3405,60.7171],[2.39459,56.8213],[2.5416,58.8435],[2.69462,61.6098],[2.86524,60.218],[3.09172,63.0184],[3.10855,60.2239],[3.47701,58.6409],[3.50491,58.9807],[3.65005,62.2751],[3.90784,62.2482],[4.05873,62.3406],[4.22577,61.4647],[4.24465,61.9611],[4.36923,59.9105],[4.68937,61.7128],[4.7216,61.5645],[5.20935,63.5035],[5.31815,60.023],[5.46535,61.7182],[5.80232,61.6676],[5.96067,57.4257],[6.04405,59.105],[6.24589,57.877],[6.55118,61.5874],[6.86203,59.004],[7.34642,56.8402]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Greater name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[1.54574,-0.546511,2.35839] Importance factors at 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.0656771,0.527414,0.406909] Importance factors at 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.143018,0.381311,0.475671] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 6.6%,X1 : 52.7%,X2 : 40.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0656771],[0.527414],[0.406909]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,7.09257],[0.11,8.26966],[0.12,7.5128],[0.13,7.38524],[0.14,12.3166],[0.15,8.59696],[0.16,6.59265],[0.17,4.29606],[0.18,5.18914],[0.19,8.03663],[0.2,9.26253],[0.21,9.4081],[0.22,10.5172],[0.23,11.7406],[0.24,10.8641],[0.25,9.2509],[0.26,10.3346],[0.27,11.0494],[0.28,11.1169],[0.29,11.751],[0.3,10.6311],[0.31,8.98826],[0.32,10.1977],[0.33,9.13187],[0.34,6.56771],[0.35,8.90574],[0.36,7.1326],[0.37,8.21234],[0.38,8.21788],[0.39,8.66401],[0.4,9.36874],[0.41,9.44638],[0.42,10.094],[0.43,9.9883],[0.44,9.73254],[0.45,12.9446],[0.46,12.812],[0.47,13.5324],[0.48,14.3018],[0.49,16.2322],[0.5,15.4387],[0.51,13.8168],[0.52,14.665],[0.53,17.206],[0.54,16.0676],[0.55,14.7594],[0.56,13.8655],[0.57,13.6885],[0.58,13.8888],[0.59,10.5294],[0.6,11.1886],[0.61,8.65621],[0.62,8.33403],[0.63,10.6711],[0.64,10.9057],[0.65,14.8119],[0.66,14.4957],[0.67,12.7801],[0.68,13.8414],[0.69,15.5354],[0.7,15.251],[0.71,11.8059],[0.72,10.9403],[0.73,10.2795],[0.74,9.34766],[0.75,9.70543],[0.76,12.8913],[0.77,11.1637],[0.78,11.6182],[0.79,12.1558],[0.8,7.16062],[0.81,8.91671],[0.82,9.42586],[0.83,11.9156],[0.84,10.5485],[0.85,7.37444],[0.86,8.36039],[0.87,21.4621],[0.88,12.6282],[0.89,14.5912]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,47.7404],[0.11,38.3646],[0.12,39.1561],[0.13,37.0008],[0.14,29.3615],[0.15,39.3988],[0.16,43.7724],[0.17,44.3424],[0.18,43.5918],[0.19,45.9172],[0.2,49.6649],[0.21,48.9968],[0.22,47.7976],[0.23,47.5533],[0.24,40.3748],[0.25,46.8775],[0.26,45.2581],[0.27,48.3607],[0.28,47.2735],[0.29,46.462],[0.3,47.963],[0.31,48.6294],[0.32,50.685],[0.33,51.4393],[0.34,52.7414],[0.35,48.2546],[0.36,53.9521],[0.37,51.3092],[0.38,48.7507],[0.39,46.7506],[0.4,42.0649],[0.41,39.2894],[0.42,42.4353],[0.43,42.3601],[0.44,40.7539],[0.45,40.4862],[0.46,41.7944],[0.47,38.5232],[0.48,38.1311],[0.49,33.5128],[0.5,33.8424],[0.51,35.9815],[0.52,39.2402],[0.53,41.7362],[0.54,44.4787],[0.55,48.8154],[0.56,47.99],[0.57,46.9869],[0.58,45.5681],[0.59,48.4569],[0.6,45.5907],[0.61,49.023],[0.62,44.9064],[0.63,42.5933],[0.64,41.4163],[0.65,38.4097],[0.66,32.255],[0.67,38.4707],[0.68,38.0519],[0.69,41.1861],[0.7,43.6347],[0.71,47.1234],[0.72,51.0178],[0.73,50.0772],[0.74,55.9485],[0.75,54.1163],[0.76,57.6299],[0.77,58.5422],[0.78,56.7596],[0.79,57.168],[0.8,62.5356],[0.81,61.8401],[0.82,65.7008],[0.83,62.1686],[0.84,63.6801],[0.85,68.0815],[0.86,56.8933],[0.87,49.9031],[0.88,64.0736],[0.89,65.1755]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,45.1671],[0.11,53.3657],[0.12,53.3311],[0.13,55.614],[0.14,58.3219],[0.15,52.0042],[0.16,49.6349],[0.17,51.3615],[0.18,51.2191],[0.19,46.0462],[0.2,41.0726],[0.21,41.5951],[0.22,41.6852],[0.23,40.7061],[0.24,48.7612],[0.25,43.8716],[0.26,44.4073],[0.27,40.5898],[0.28,41.6095],[0.29,41.7871],[0.3,41.4059],[0.31,42.3824],[0.32,39.1173],[0.33,39.4288],[0.34,40.6909],[0.35,42.8396],[0.36,38.9153],[0.37,40.4784],[0.38,43.0314],[0.39,44.5853],[0.4,48.5664],[0.41,51.2642],[0.42,47.4707],[0.43,47.6516],[0.44,49.5135],[0.45,46.5692],[0.46,45.3936],[0.47,47.9444],[0.48,47.5671],[0.49,50.255],[0.5,50.7189],[0.51,50.2017],[0.52,46.0949],[0.53,41.0578],[0.54,39.4537],[0.55,36.4253],[0.56,38.1444],[0.57,39.3246],[0.58,40.5431],[0.59,41.0137],[0.6,43.2206],[0.61,42.3208],[0.62,46.7596],[0.63,46.7356],[0.64,47.678],[0.65,46.7784],[0.66,53.2493],[0.67,48.7492],[0.68,48.1066],[0.69,43.2785],[0.7,41.1143],[0.71,41.0707],[0.72,38.0419],[0.73,39.6433],[0.74,34.7039],[0.75,36.1783],[0.76,29.4788],[0.77,30.2941],[0.78,31.6222],[0.79,30.6762],[0.8,30.3038],[0.81,29.2432],[0.82,24.8733],[0.83,25.9157],[0.84,25.7715],[0.85,24.544],[0.86,34.7463],[0.87,28.6349],[0.88,23.2982],[0.89,20.2333]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.34,0],[0.34,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,7.09257],[8.00481,8.26966],[7.73314,7.5128],[7.60731,7.38524],[7.14207,12.3166],[7.09831,8.59696],[7.09018,6.59265],[6.75573,4.29606],[6.5486,5.18914],[6.36116,8.03663],[6.33235,9.26253],[5.61784,9.4081],[5.54196,10.5172],[5.5233,11.7406],[5.34578,10.8641],[5.27131,9.2509],[4.76186,10.3346],[4.57202,11.0494],[4.2294,11.1169],[4.02417,11.751],[3.94215,10.6311],[3.78926,8.98826],[3.24837,10.1977],[3.17236,9.13187],[2.9207,6.56771],[2.89812,8.90574],[2.8277,7.1326],[2.73875,8.21234],[2.53454,8.21788],[2.21662,8.66401],[2.09839,9.36874],[2.07895,9.44638],[1.98399,10.094],[1.96847,9.9883],[1.72863,9.73254],[1.71187,12.9446],[1.6795,12.812],[1.51924,13.5324],[1.48069,14.3018],[1.46952,16.2322],[1.37923,15.4387],[0.984863,13.8168],[0.784601,14.665],[0.59061,17.206],[0.379378,16.0676],[0.33482,14.7594],[0.328182,13.8655],[0.246357,13.6885],[0.233188,13.8888],[0.1253,10.5294],[-0.035681,11.1886],[-0.27909,8.65621],[-0.288348,8.33403],[-0.315157,10.6711],[-0.320802,10.9057],[-0.70966,14.8119],[-0.949787,14.4957],[-1.0637,12.7801],[-1.15069,13.8414],[-1.19137,15.5354],[-1.19895,15.251],[-1.45062,11.8059],[-1.45566,10.9403],[-2.20558,10.2795],[-2.22676,9.34766],[-2.26291,9.70543],[-2.27523,12.8913],[-2.34887,11.1637],[-2.4416,11.6182],[-2.48686,12.1558],[-2.79442,7.16062],[-2.81501,8.91671],[-3.0607,9.42586],[-3.13909,11.9156],[-3.75041,10.5485],[-4.10517,7.37444],[-4.12148,8.36039],[-4.47859,21.4621],[-4.5309,12.6282],[-4.89021,14.5912]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,47.7404],[8.00481,38.3646],[7.73314,39.1561],[7.60731,37.0008],[7.14207,29.3615],[7.09831,39.3988],[7.09018,43.7724],[6.75573,44.3424],[6.5486,43.5918],[6.36116,45.9172],[6.33235,49.6649],[5.61784,48.9968],[5.54196,47.7976],[5.5233,47.5533],[5.34578,40.3748],[5.27131,46.8775],[4.76186,45.2581],[4.57202,48.3607],[4.2294,47.2735],[4.02417,46.462],[3.94215,47.963],[3.78926,48.6294],[3.24837,50.685],[3.17236,51.4393],[2.9207,52.7414],[2.89812,48.2546],[2.8277,53.9521],[2.73875,51.3092],[2.53454,48.7507],[2.21662,46.7506],[2.09839,42.0649],[2.07895,39.2894],[1.98399,42.4353],[1.96847,42.3601],[1.72863,40.7539],[1.71187,40.4862],[1.6795,41.7944],[1.51924,38.5232],[1.48069,38.1311],[1.46952,33.5128],[1.37923,33.8424],[0.984863,35.9815],[0.784601,39.2402],[0.59061,41.7362],[0.379378,44.4787],[0.33482,48.8154],[0.328182,47.99],[0.246357,46.9869],[0.233188,45.5681],[0.1253,48.4569],[-0.035681,45.5907],[-0.27909,49.023],[-0.288348,44.9064],[-0.315157,42.5933],[-0.320802,41.4163],[-0.70966,38.4097],[-0.949787,32.255],[-1.0637,38.4707],[-1.15069,38.0519],[-1.19137,41.1861],[-1.19895,43.6347],[-1.45062,47.1234],[-1.45566,51.0178],[-2.20558,50.0772],[-2.22676,55.9485],[-2.26291,54.1163],[-2.27523,57.6299],[-2.34887,58.5422],[-2.4416,56.7596],[-2.48686,57.168],[-2.79442,62.5356],[-2.81501,61.8401],[-3.0607,65.7008],[-3.13909,62.1686],[-3.75041,63.6801],[-4.10517,68.0815],[-4.12148,56.8933],[-4.47859,49.9031],[-4.5309,64.0736],[-4.89021,65.1755]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,45.1671],[8.00481,53.3657],[7.73314,53.3311],[7.60731,55.614],[7.14207,58.3219],[7.09831,52.0042],[7.09018,49.6349],[6.75573,51.3615],[6.5486,51.2191],[6.36116,46.0462],[6.33235,41.0726],[5.61784,41.5951],[5.54196,41.6852],[5.5233,40.7061],[5.34578,48.7612],[5.27131,43.8716],[4.76186,44.4073],[4.57202,40.5898],[4.2294,41.6095],[4.02417,41.7871],[3.94215,41.4059],[3.78926,42.3824],[3.24837,39.1173],[3.17236,39.4288],[2.9207,40.6909],[2.89812,42.8396],[2.8277,38.9153],[2.73875,40.4784],[2.53454,43.0314],[2.21662,44.5853],[2.09839,48.5664],[2.07895,51.2642],[1.98399,47.4707],[1.96847,47.6516],[1.72863,49.5135],[1.71187,46.5692],[1.6795,45.3936],[1.51924,47.9444],[1.48069,47.5671],[1.46952,50.255],[1.37923,50.7189],[0.984863,50.2017],[0.784601,46.0949],[0.59061,41.0578],[0.379378,39.4537],[0.33482,36.4253],[0.328182,38.1444],[0.246357,39.3246],[0.233188,40.5431],[0.1253,41.0137],[-0.035681,43.2206],[-0.27909,42.3208],[-0.288348,46.7596],[-0.315157,46.7356],[-0.320802,47.678],[-0.70966,46.7784],[-0.949787,53.2493],[-1.0637,48.7492],[-1.15069,48.1066],[-1.19137,43.2785],[-1.19895,41.1143],[-1.45062,41.0707],[-1.45566,38.0419],[-2.20558,39.6433],[-2.22676,34.7039],[-2.26291,36.1783],[-2.27523,29.4788],[-2.34887,30.2941],[-2.4416,31.6222],[-2.48686,30.6762],[-2.79442,30.3038],[-2.81501,29.2432],[-3.0607,24.8733],[-3.13909,25.9157],[-3.75041,25.7715],[-4.10517,24.544],[-4.12148,34.7463],[-4.47859,28.6349],[-4.5309,23.2982],[-4.89021,20.2333]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[5.63465,0.0602427,-0.603406],[0.978303,0.889217,-2.50961],[-0.789076,0.279502,-0.541955],[2.11766,4.2585,3.68097],[1.98963,0.963867,0.926941],[-1.02739,3.07176,0.754481],[0.645949,3.81159,1.19629],[3.03552,2.66644,5.24618],[-2.31782,4.82214,0.00129137],[-0.415984,-0.673385,0.83104],[0.845586,-0.508305,3.71438],[0.474924,1.86564,-2.76657],[3.3388,0.857649,-2.15845],[3.15921,2.63662,-0.538475],[-2.27918,-3.98396,1.78563],[4.09004,-0.184174,5.73799],[-0.63958,0.792352,-0.971021],[2.97463,0.307713,-1.69007],[3.14023,2.85458,0.689704],[0.0767714,4.36922,2.42493],[2.85998,0.0324442,0.651082],[2.32401,-0.397526,0.946109],[-1.56368,1.77385,1.30598],[0.0646295,-0.0283882,1.76892],[1.52227,-0.156423,-1.6649],[2.72995,2.88337,1.65906],[1.08244,1.28233,0.921285],[1.54236,0.233116,2.52191],[1.07027,0.409096,1.2797],[-0.727617,3.47317,3.81891],[2.36271,0.558869,3.50873],[-0.167472,-1.52782,0.528134],[-0.266958,5.01016,-1.12319],[-0.946931,1.36409,1.93206],[-3.808,-0.351608,0.134839],[2.23117,2.89253,1.50955],[0.652852,2.48376,0.833023],[-1.46072,-1.92357,-0.0384577],[4.81774,-1.30385,3.04655],[1.33997,0.804473,0.153316],[-0.277345,0.479692,-1.87155],[3.31468,-1.36896,0.515763],[-2.51967,1.44871,0.00434747],[2.78964,2.19046,0.502041],[1.18535,-0.649198,2.64985],[-2.29028,0.372972,3.14514],[0.437226,3.03081,0.312976],[4.47008,-2.09811,-0.140787],[-0.269837,1.79438,0.0868794],[-0.707117,1.08063,0.400903],[1.90165,1.06797,0.142799],[2.75428,1.5257,1.53934],[-0.73626,0.353477,-0.438173],[-2.34535,0.960574,-1.24071],[-0.195222,0.338541,0.926703],[0.809966,2.82489,3.26842],[1.31841,-0.235145,3.94377],[3.8347,0.699285,0.0737891],[-1.49972,-2.70277,3.43123],[0.232383,0.728034,-0.932428],[7.1576,-0.421654,0.567064],[0.547164,1.05173,2.84242],[1.08398,1.20717,1.49895],[-0.335868,1.2473,0.706039],[0.456662,1.97,1.40271],[0.480876,1.01007,-2.99264],[-0.471795,1.48897,-2.87638],[2.10799,-0.758226,3.20991],[2.0678,1.08712,-0.186513],[2.91041,3.89511,0.159573],[-1.04619,-0.135648,-0.264272],[-0.343404,-0.124782,1.10442],[2.13577,-0.608209,-1.0548],[1.04153,3.73942,2.45338],[3.49181,4.99089,0.17794],[1.53205,4.86247,2.97446],[1.81439,1.44751,-0.613744],[-0.760712,-1.77115,3.95306],[1.97459,-0.233206,0.459024],[5.44812,2.86809,3.16697],[1.82492,-1.10225,0.507005],[1.47266,2.76017,-0.246228],[-1.11526,0.349151,2.4513],[-1.43773,1.4407,5.03681],[2.51834,5.98997,2.60635],[-1.17615,0.357677,6.27642],[-0.32524,-0.290789,0.119343],[3.63033,1.76377,1.45285],[1.69211,2.4876,-1.79782],[1.24978,2.01532,0.794449],[1.38358,0.37941,1.12814],[-1.19273,0.39525,1.77498],[-1.88264,-0.147935,0.803808],[1.46083,-1.71739,-0.968027],[3.32882,-0.26805,1.07652],[2.34548,0.546559,2.00859],[-1.70487,0.837598,1.94412],[3.85449,1.22454,-0.741503],[0.504805,1.27921,3.08803],[1.06118,-0.690944,0.452225]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[4.33748],[-5.37474],[-2.29224],[3.09186],[2.39771],[-4.12606],[-2.67887],[9.52822],[-9.54844],[2.25617],[9.03681],[-7.85667],[-2.26457],[-1.87267],[7.26802],[15.8423],[-3.77015],[-0.867086],[0.237775],[-1.6272],[4.11348],[4.81252],[-1.6125],[3.64506],[-1.5729],[1.723],[1.00151],[6.2365],[3.01602],[1.70045],[8.54188],[3.18053],[-10.0286],[0.871059],[-3.01091],[0.911481],[-1.40675],[1.34771],[12.8666],[0.439897],[-4.73998],[6.39965],[-4.68403],[0.508032],[7.45885],[3.44055],[-3.48304],[7.33568],[-2.78765],[-1.52626],[0.585297],[3.5444],[-2.14282],[-6.26763],[1.15037],[3.10948],[9.55868],[2.93335],[9.41691],[-2.72452],[8.92421],[4.65441],[2.27112],[-0.794738],[0.307076],[-7.01952],[-8.458],[9.66516],[0.0640958],[-2.61311],[-1.37126],[2.05262],[0.938479],[0.339178],[-3.63865],[0.187272],[-1.58437],[9.80213],[3.24244],[7.47993],[4.4923],[-3.16005],[3.26362],[6.47484],[-1.25392],[10.8402],[0.349631],[3.89037],[-5.63493],[-0.184294],[3.07075],[1.76436],[-0.0531215],[2.10087],[5.88394],[5.54282],[0.926974],[0.53468],[4.76205],[3.00205]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Greater name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[1.71595,0.072233,2.36426] Importance factors at threshold 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.158471,0.266112,0.575417] Importance factors at threshold/2 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.142988,0.278352,0.57866] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 15.8%,X1 : 26.6%,X2 : 57.5%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.158471],[0.266112],[0.575417]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,8.45335],[0.11,9.36928],[0.12,15.7839],[0.13,14.6038],[0.14,19.9788],[0.15,12.8162],[0.16,8.37958],[0.17,10.7591],[0.18,10.7059],[0.19,13.1318],[0.2,14.2334],[0.21,15.4595],[0.22,14.1027],[0.23,12.9218],[0.24,13.5035],[0.25,19.1994],[0.26,21.2412],[0.27,24.4767],[0.28,22.5431],[0.29,24.5348],[0.3,19.4589],[0.31,16.3681],[0.32,17.2662],[0.33,15.5181],[0.34,15.0249],[0.35,15.9689],[0.36,16.1613],[0.37,15.9902],[0.38,15.8471],[0.39,18.9626],[0.4,19.999],[0.41,19.9356],[0.42,18.0961],[0.43,18.5145],[0.44,16.8272],[0.45,14.3483],[0.46,16.2447],[0.47,14.2988],[0.48,11.8003],[0.49,10.6847],[0.5,10.8215],[0.51,11.9743],[0.52,9.47294],[0.53,10.6981],[0.54,8.97347],[0.55,9.8864],[0.56,12.8345],[0.57,14.941],[0.58,15.4974],[0.59,14.1567],[0.6,14.4198],[0.61,13.9927],[0.62,16.7026],[0.63,17.4596],[0.64,19.1336],[0.65,15.8565],[0.66,16.4462],[0.67,15.2112],[0.68,18.2831],[0.69,20.6936],[0.7,18.6248],[0.71,18.7077],[0.72,17.0027],[0.73,18.599],[0.74,20.6329],[0.75,17.4387],[0.76,16.4915],[0.77,20.6529],[0.78,18.948],[0.79,24.3739],[0.8,22.4739],[0.81,27.4458],[0.82,27.9623],[0.83,28.3866],[0.84,27.4363],[0.85,19.0158],[0.86,21.6415],[0.87,22.0792],[0.88,29.8457],[0.89,28.8043]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,18.9097],[0.11,17.1846],[0.12,11.4878],[0.13,13.0887],[0.14,17.5433],[0.15,26.4563],[0.16,23.1041],[0.17,26.4634],[0.18,26.163],[0.19,27.1374],[0.2,26.493],[0.21,27.9801],[0.22,26.2269],[0.23,25.009],[0.24,27.8362],[0.25,28.4087],[0.26,29.0781],[0.27,26.691],[0.28,27.8744],[0.29,26.1816],[0.3,26.9309],[0.31,27.5507],[0.32,29.0104],[0.33,32.7653],[0.34,29.1347],[0.35,23.4621],[0.36,23.9705],[0.37,24.4474],[0.38,26.6112],[0.39,26.5644],[0.4,26.3111],[0.41,25.7835],[0.42,28.1766],[0.43,32.2038],[0.44,33.9004],[0.45,34.8729],[0.46,31.7235],[0.47,27.8352],[0.48,32.4502],[0.49,33.6022],[0.5,33.3228],[0.51,36.2068],[0.52,36.5914],[0.53,33.726],[0.54,33.2336],[0.55,33.5167],[0.56,33.59],[0.57,31.9571],[0.58,32.6361],[0.59,35.2544],[0.6,31.054],[0.61,29.8492],[0.62,27.1885],[0.63,21.5393],[0.64,21.7481],[0.65,24.0085],[0.66,22.8799],[0.67,23.144],[0.68,24.9372],[0.69,17.787],[0.7,20.2828],[0.71,18.7046],[0.72,19.3832],[0.73,22.1842],[0.74,22.2886],[0.75,21.9695],[0.76,17.0097],[0.77,15.1337],[0.78,17.1661],[0.79,18.3265],[0.8,21.0023],[0.81,16.4804],[0.82,12.5815],[0.83,14.0737],[0.84,13.7757],[0.85,18.2682],[0.86,15.8794],[0.87,13.0144],[0.88,6.63323],[0.89,7.94111]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,72.6369],[0.11,73.4461],[0.12,72.7283],[0.13,72.3075],[0.14,62.4779],[0.15,60.7275],[0.16,68.5163],[0.17,62.7775],[0.18,63.1312],[0.19,59.7308],[0.2,59.2736],[0.21,56.5605],[0.22,59.6704],[0.23,62.0692],[0.24,58.6602],[0.25,52.3919],[0.26,49.6807],[0.27,48.8322],[0.28,49.5825],[0.29,49.2836],[0.3,53.6102],[0.31,56.0812],[0.32,53.7234],[0.33,51.7166],[0.34,55.8403],[0.35,60.569],[0.36,59.8681],[0.37,59.5624],[0.38,57.5417],[0.39,54.473],[0.4,53.6898],[0.41,54.2809],[0.42,53.7274],[0.43,49.2817],[0.44,49.2724],[0.45,50.7789],[0.46,52.0317],[0.47,57.866],[0.48,55.7495],[0.49,55.7131],[0.5,55.8557],[0.51,51.8189],[0.52,53.9357],[0.53,55.5758],[0.54,57.7929],[0.55,56.5969],[0.56,53.5755],[0.57,53.1019],[0.58,51.8665],[0.59,50.589],[0.6,54.5262],[0.61,56.1582],[0.62,56.109],[0.63,61.0011],[0.64,59.1183],[0.65,60.135],[0.66,60.674],[0.67,61.6448],[0.68,56.7797],[0.69,61.5193],[0.7,61.0924],[0.71,62.5878],[0.72,63.6142],[0.73,59.2168],[0.74,57.0785],[0.75,60.5918],[0.76,66.4988],[0.77,64.2134],[0.78,63.8858],[0.79,57.2995],[0.8,56.5238],[0.81,56.0737],[0.82,59.4561],[0.83,57.5397],[0.84,58.788],[0.85,62.716],[0.86,62.479],[0.87,64.9064],[0.88,63.521],[0.89,63.2546]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.38,0],[0.38,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,8.45335],[7.47993,9.36928],[7.45885,15.7839],[7.33568,14.6038],[7.26802,19.9788],[6.47484,12.8162],[6.39965,8.37958],[6.2365,10.7591],[5.88394,10.7059],[5.54282,13.1318],[4.81252,14.2334],[4.76205,15.4595],[4.65441,14.1027],[4.4923,12.9218],[4.33748,13.5035],[4.11348,19.1994],[3.89037,21.2412],[3.64506,24.4767],[3.5444,22.5431],[3.44055,24.5348],[3.26362,19.4589],[3.24244,16.3681],[3.18053,17.2662],[3.10948,15.5181],[3.09186,15.0249],[3.07075,15.9689],[3.01602,16.1613],[3.00205,15.9902],[2.93335,15.8471],[2.39771,18.9626],[2.27112,19.999],[2.25617,19.9356],[2.10087,18.0961],[2.05262,18.5145],[1.76436,16.8272],[1.723,14.3483],[1.70045,16.2447],[1.34771,14.2988],[1.15037,11.8003],[1.00151,10.6847],[0.938479,10.8215],[0.926974,11.9743],[0.911481,9.47294],[0.871059,10.6981],[0.585297,8.97347],[0.53468,9.8864],[0.508032,12.8345],[0.439897,14.941],[0.349631,15.4974],[0.339178,14.1567],[0.307076,14.4198],[0.237775,13.9927],[0.187272,16.7026],[0.0640958,17.4596],[-0.0531215,19.1336],[-0.184294,15.8565],[-0.794738,16.4462],[-0.867086,15.2112],[-1.25392,18.2831],[-1.37126,20.6936],[-1.40675,18.6248],[-1.52626,18.7077],[-1.5729,17.0027],[-1.58437,18.599],[-1.6125,20.6329],[-1.6272,17.4387],[-1.87267,16.4915],[-2.14282,20.6529],[-2.26457,18.948],[-2.29224,24.3739],[-2.61311,22.4739],[-2.67887,27.4458],[-2.72452,27.9623],[-2.78765,28.3866],[-3.01091,27.4363],[-3.16005,19.0158],[-3.48304,21.6415],[-3.63865,22.0792],[-3.77015,29.8457],[-4.12606,28.8043]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,18.9097],[7.47993,17.1846],[7.45885,11.4878],[7.33568,13.0887],[7.26802,17.5433],[6.47484,26.4563],[6.39965,23.1041],[6.2365,26.4634],[5.88394,26.163],[5.54282,27.1374],[4.81252,26.493],[4.76205,27.9801],[4.65441,26.2269],[4.4923,25.009],[4.33748,27.8362],[4.11348,28.4087],[3.89037,29.0781],[3.64506,26.691],[3.5444,27.8744],[3.44055,26.1816],[3.26362,26.9309],[3.24244,27.5507],[3.18053,29.0104],[3.10948,32.7653],[3.09186,29.1347],[3.07075,23.4621],[3.01602,23.9705],[3.00205,24.4474],[2.93335,26.6112],[2.39771,26.5644],[2.27112,26.3111],[2.25617,25.7835],[2.10087,28.1766],[2.05262,32.2038],[1.76436,33.9004],[1.723,34.8729],[1.70045,31.7235],[1.34771,27.8352],[1.15037,32.4502],[1.00151,33.6022],[0.938479,33.3228],[0.926974,36.2068],[0.911481,36.5914],[0.871059,33.726],[0.585297,33.2336],[0.53468,33.5167],[0.508032,33.59],[0.439897,31.9571],[0.349631,32.6361],[0.339178,35.2544],[0.307076,31.054],[0.237775,29.8492],[0.187272,27.1885],[0.0640958,21.5393],[-0.0531215,21.7481],[-0.184294,24.0085],[-0.794738,22.8799],[-0.867086,23.144],[-1.25392,24.9372],[-1.37126,17.787],[-1.40675,20.2828],[-1.52626,18.7046],[-1.5729,19.3832],[-1.58437,22.1842],[-1.6125,22.2886],[-1.6272,21.9695],[-1.87267,17.0097],[-2.14282,15.1337],[-2.26457,17.1661],[-2.29224,18.3265],[-2.61311,21.0023],[-2.67887,16.4804],[-2.72452,12.5815],[-2.78765,14.0737],[-3.01091,13.7757],[-3.16005,18.2682],[-3.48304,15.8794],[-3.63865,13.0144],[-3.77015,6.63323],[-4.12606,7.94111]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,72.6369],[7.47993,73.4461],[7.45885,72.7283],[7.33568,72.3075],[7.26802,62.4779],[6.47484,60.7275],[6.39965,68.5163],[6.2365,62.7775],[5.88394,63.1312],[5.54282,59.7308],[4.81252,59.2736],[4.76205,56.5605],[4.65441,59.6704],[4.4923,62.0692],[4.33748,58.6602],[4.11348,52.3919],[3.89037,49.6807],[3.64506,48.8322],[3.5444,49.5825],[3.44055,49.2836],[3.26362,53.6102],[3.24244,56.0812],[3.18053,53.7234],[3.10948,51.7166],[3.09186,55.8403],[3.07075,60.569],[3.01602,59.8681],[3.00205,59.5624],[2.93335,57.5417],[2.39771,54.473],[2.27112,53.6898],[2.25617,54.2809],[2.10087,53.7274],[2.05262,49.2817],[1.76436,49.2724],[1.723,50.7789],[1.70045,52.0317],[1.34771,57.866],[1.15037,55.7495],[1.00151,55.7131],[0.938479,55.8557],[0.926974,51.8189],[0.911481,53.9357],[0.871059,55.5758],[0.585297,57.7929],[0.53468,56.5969],[0.508032,53.5755],[0.439897,53.1019],[0.349631,51.8665],[0.339178,50.589],[0.307076,54.5262],[0.237775,56.1582],[0.187272,56.109],[0.0640958,61.0011],[-0.0531215,59.1183],[-0.184294,60.135],[-0.794738,60.674],[-0.867086,61.6448],[-1.25392,56.7797],[-1.37126,61.5193],[-1.40675,61.0924],[-1.52626,62.5878],[-1.5729,63.6142],[-1.58437,59.2168],[-1.6125,57.0785],[-1.6272,60.5918],[-1.87267,66.4988],[-2.14282,64.2134],[-2.26457,63.8858],[-2.29224,57.2995],[-2.61311,56.5238],[-2.67887,56.0737],[-2.72452,59.4561],[-2.78765,57.5397],[-3.01091,58.788],[-3.16005,62.716],[-3.48304,62.479],[-3.63865,64.9064],[-3.77015,63.521],[-4.12606,63.2546]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=GreaterOrEqual name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[1.54574,-0.546511,2.35839] Importance factors at 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.0656771,0.527414,0.406909] Importance factors at 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.143018,0.381311,0.475671] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 6.6%,X1 : 52.7%,X2 : 40.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0656771],[0.527414],[0.406909]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,8.26966],[0.12,7.5128],[0.13,7.38524],[0.14,12.3166],[0.15,8.59696],[0.16,6.59265],[0.17,4.29606],[0.18,5.18914],[0.19,8.03663],[0.2,9.26253],[0.21,9.4081],[0.22,10.5172],[0.23,11.7406],[0.24,10.8641],[0.25,9.2509],[0.26,10.3346],[0.27,11.0494],[0.28,11.1169],[0.29,11.751],[0.3,10.6311],[0.31,8.98826],[0.32,10.1977],[0.33,9.13187],[0.34,6.56771],[0.35,8.90574],[0.36,7.1326],[0.37,8.21234],[0.38,8.21788],[0.39,8.66401],[0.4,9.36874],[0.41,9.44638],[0.42,10.094],[0.43,9.9883],[0.44,9.73254],[0.45,12.9446],[0.46,12.812],[0.47,13.5324],[0.48,14.3018],[0.49,16.2322],[0.5,15.4387],[0.51,13.8168],[0.52,14.665],[0.53,17.206],[0.54,16.0676],[0.55,14.7594],[0.56,13.8655],[0.57,13.6885],[0.58,13.8888],[0.59,10.5294],[0.6,11.1886],[0.61,8.65621],[0.62,8.33403],[0.63,10.6711],[0.64,10.9057],[0.65,14.8119],[0.66,14.4957],[0.67,12.7801],[0.68,13.8414],[0.69,15.5354],[0.7,15.251],[0.71,11.8059],[0.72,10.9403],[0.73,10.2795],[0.74,9.34766],[0.75,9.70543],[0.76,12.8913],[0.77,11.1637],[0.78,11.6182],[0.79,12.1558],[0.8,7.16062],[0.81,8.91671],[0.82,9.42586],[0.83,11.9156],[0.84,10.5485],[0.85,7.37444],[0.86,8.36039],[0.87,21.4621],[0.88,12.6282],[0.89,14.5912],[0.9,12.2164]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,38.3646],[0.12,39.1561],[0.13,37.0008],[0.14,29.3615],[0.15,39.3988],[0.16,43.7724],[0.17,44.3424],[0.18,43.5918],[0.19,45.9172],[0.2,49.6649],[0.21,48.9968],[0.22,47.7976],[0.23,47.5533],[0.24,40.3748],[0.25,46.8775],[0.26,45.2581],[0.27,48.3607],[0.28,47.2735],[0.29,46.462],[0.3,47.963],[0.31,48.6294],[0.32,50.685],[0.33,51.4393],[0.34,52.7414],[0.35,48.2546],[0.36,53.9521],[0.37,51.3092],[0.38,48.7507],[0.39,46.7506],[0.4,42.0649],[0.41,39.2894],[0.42,42.4353],[0.43,42.3601],[0.44,40.7539],[0.45,40.4862],[0.46,41.7944],[0.47,38.5232],[0.48,38.1311],[0.49,33.5128],[0.5,33.8424],[0.51,35.9815],[0.52,39.2402],[0.53,41.7362],[0.54,44.4787],[0.55,48.8154],[0.56,47.99],[0.57,46.9869],[0.58,45.5681],[0.59,48.4569],[0.6,45.5907],[0.61,49.023],[0.62,44.9064],[0.63,42.5933],[0.64,41.4163],[0.65,38.4097],[0.66,32.255],[0.67,38.4707],[0.68,38.0519],[0.69,41.1861],[0.7,43.6347],[0.71,47.1234],[0.72,51.0178],[0.73,50.0772],[0.74,55.9485],[0.75,54.1163],[0.76,57.6299],[0.77,58.5422],[0.78,56.7596],[0.79,57.168],[0.8,62.5356],[0.81,61.8401],[0.82,65.7008],[0.83,62.1686],[0.84,63.6801],[0.85,68.0815],[0.86,56.8933],[0.87,49.9031],[0.88,64.0736],[0.89,65.1755],[0.9,67.3667]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,53.3657],[0.12,53.3311],[0.13,55.614],[0.14,58.3219],[0.15,52.0042],[0.16,49.6349],[0.17,51.3615],[0.18,51.2191],[0.19,46.0462],[0.2,41.0726],[0.21,41.5951],[0.22,41.6852],[0.23,40.7061],[0.24,48.7612],[0.25,43.8716],[0.26,44.4073],[0.27,40.5898],[0.28,41.6095],[0.29,41.7871],[0.3,41.4059],[0.31,42.3824],[0.32,39.1173],[0.33,39.4288],[0.34,40.6909],[0.35,42.8396],[0.36,38.9153],[0.37,40.4784],[0.38,43.0314],[0.39,44.5853],[0.4,48.5664],[0.41,51.2642],[0.42,47.4707],[0.43,47.6516],[0.44,49.5135],[0.45,46.5692],[0.46,45.3936],[0.47,47.9444],[0.48,47.5671],[0.49,50.255],[0.5,50.7189],[0.51,50.2017],[0.52,46.0949],[0.53,41.0578],[0.54,39.4537],[0.55,36.4253],[0.56,38.1444],[0.57,39.3246],[0.58,40.5431],[0.59,41.0137],[0.6,43.2206],[0.61,42.3208],[0.62,46.7596],[0.63,46.7356],[0.64,47.678],[0.65,46.7784],[0.66,53.2493],[0.67,48.7492],[0.68,48.1066],[0.69,43.2785],[0.7,41.1143],[0.71,41.0707],[0.72,38.0419],[0.73,39.6433],[0.74,34.7039],[0.75,36.1783],[0.76,29.4788],[0.77,30.2941],[0.78,31.6222],[0.79,30.6762],[0.8,30.3038],[0.81,29.2432],[0.82,24.8733],[0.83,25.9157],[0.84,25.7715],[0.85,24.544],[0.86,34.7463],[0.87,28.6349],[0.88,23.2982],[0.89,20.2333],[0.9,20.4169]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.34,0],[0.34,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,8.26966],[8.00481,7.5128],[7.73314,7.38524],[7.60731,12.3166],[7.14207,8.59696],[7.09831,6.59265],[7.09018,4.29606],[6.75573,5.18914],[6.5486,8.03663],[6.36116,9.26253],[6.33235,9.4081],[5.61784,10.5172],[5.54196,11.7406],[5.5233,10.8641],[5.34578,9.2509],[5.27131,10.3346],[4.76186,11.0494],[4.57202,11.1169],[4.2294,11.751],[4.02417,10.6311],[3.94215,8.98826],[3.78926,10.1977],[3.24837,9.13187],[3.17236,6.56771],[2.9207,8.90574],[2.89812,7.1326],[2.8277,8.21234],[2.73875,8.21788],[2.53454,8.66401],[2.21662,9.36874],[2.09839,9.44638],[2.07895,10.094],[1.98399,9.9883],[1.96847,9.73254],[1.72863,12.9446],[1.71187,12.812],[1.6795,13.5324],[1.51924,14.3018],[1.48069,16.2322],[1.46952,15.4387],[1.37923,13.8168],[0.984863,14.665],[0.784601,17.206],[0.59061,16.0676],[0.379378,14.7594],[0.33482,13.8655],[0.328182,13.6885],[0.246357,13.8888],[0.233188,10.5294],[0.1253,11.1886],[-0.035681,8.65621],[-0.27909,8.33403],[-0.288348,10.6711],[-0.315157,10.9057],[-0.320802,14.8119],[-0.70966,14.4957],[-0.949787,12.7801],[-1.0637,13.8414],[-1.15069,15.5354],[-1.19137,15.251],[-1.19895,11.8059],[-1.45062,10.9403],[-1.45566,10.2795],[-2.20558,9.34766],[-2.22676,9.70543],[-2.26291,12.8913],[-2.27523,11.1637],[-2.34887,11.6182],[-2.4416,12.1558],[-2.48686,7.16062],[-2.79442,8.91671],[-2.81501,9.42586],[-3.0607,11.9156],[-3.13909,10.5485],[-3.75041,7.37444],[-4.10517,8.36039],[-4.12148,21.4621],[-4.47859,12.6282],[-4.5309,14.5912],[-4.89021,12.2164]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,38.3646],[8.00481,39.1561],[7.73314,37.0008],[7.60731,29.3615],[7.14207,39.3988],[7.09831,43.7724],[7.09018,44.3424],[6.75573,43.5918],[6.5486,45.9172],[6.36116,49.6649],[6.33235,48.9968],[5.61784,47.7976],[5.54196,47.5533],[5.5233,40.3748],[5.34578,46.8775],[5.27131,45.2581],[4.76186,48.3607],[4.57202,47.2735],[4.2294,46.462],[4.02417,47.963],[3.94215,48.6294],[3.78926,50.685],[3.24837,51.4393],[3.17236,52.7414],[2.9207,48.2546],[2.89812,53.9521],[2.8277,51.3092],[2.73875,48.7507],[2.53454,46.7506],[2.21662,42.0649],[2.09839,39.2894],[2.07895,42.4353],[1.98399,42.3601],[1.96847,40.7539],[1.72863,40.4862],[1.71187,41.7944],[1.6795,38.5232],[1.51924,38.1311],[1.48069,33.5128],[1.46952,33.8424],[1.37923,35.9815],[0.984863,39.2402],[0.784601,41.7362],[0.59061,44.4787],[0.379378,48.8154],[0.33482,47.99],[0.328182,46.9869],[0.246357,45.5681],[0.233188,48.4569],[0.1253,45.5907],[-0.035681,49.023],[-0.27909,44.9064],[-0.288348,42.5933],[-0.315157,41.4163],[-0.320802,38.4097],[-0.70966,32.255],[-0.949787,38.4707],[-1.0637,38.0519],[-1.15069,41.1861],[-1.19137,43.6347],[-1.19895,47.1234],[-1.45062,51.0178],[-1.45566,50.0772],[-2.20558,55.9485],[-2.22676,54.1163],[-2.26291,57.6299],[-2.27523,58.5422],[-2.34887,56.7596],[-2.4416,57.168],[-2.48686,62.5356],[-2.79442,61.8401],[-2.81501,65.7008],[-3.0607,62.1686],[-3.13909,63.6801],[-3.75041,68.0815],[-4.10517,56.8933],[-4.12148,49.9031],[-4.47859,64.0736],[-4.5309,65.1755],[-4.89021,67.3667]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,53.3657],[8.00481,53.3311],[7.73314,55.614],[7.60731,58.3219],[7.14207,52.0042],[7.09831,49.6349],[7.09018,51.3615],[6.75573,51.2191],[6.5486,46.0462],[6.36116,41.0726],[6.33235,41.5951],[5.61784,41.6852],[5.54196,40.7061],[5.5233,48.7612],[5.34578,43.8716],[5.27131,44.4073],[4.76186,40.5898],[4.57202,41.6095],[4.2294,41.7871],[4.02417,41.4059],[3.94215,42.3824],[3.78926,39.1173],[3.24837,39.4288],[3.17236,40.6909],[2.9207,42.8396],[2.89812,38.9153],[2.8277,40.4784],[2.73875,43.0314],[2.53454,44.5853],[2.21662,48.5664],[2.09839,51.2642],[2.07895,47.4707],[1.98399,47.6516],[1.96847,49.5135],[1.72863,46.5692],[1.71187,45.3936],[1.6795,47.9444],[1.51924,47.5671],[1.48069,50.255],[1.46952,50.7189],[1.37923,50.2017],[0.984863,46.0949],[0.784601,41.0578],[0.59061,39.4537],[0.379378,36.4253],[0.33482,38.1444],[0.328182,39.3246],[0.246357,40.5431],[0.233188,41.0137],[0.1253,43.2206],[-0.035681,42.3208],[-0.27909,46.7596],[-0.288348,46.7356],[-0.315157,47.678],[-0.320802,46.7784],[-0.70966,53.2493],[-0.949787,48.7492],[-1.0637,48.1066],[-1.15069,43.2785],[-1.19137,41.1143],[-1.19895,41.0707],[-1.45062,38.0419],[-1.45566,39.6433],[-2.20558,34.7039],[-2.22676,36.1783],[-2.26291,29.4788],[-2.27523,30.2941],[-2.34887,31.6222],[-2.4416,30.6762],[-2.48686,30.3038],[-2.79442,29.2432],[-2.81501,24.8733],[-3.0607,25.9157],[-3.13909,25.7715],[-3.75041,24.544],[-4.10517,34.7463],[-4.12148,28.6349],[-4.47859,23.2982],[-4.5309,20.2333],[-4.89021,20.4169]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo=class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[-0.76659,1.02413,0.955199],[2.07402,-0.237599,-0.564887],[2.83979,0.165144,-0.223561],[5.04589,-3.73433,1.79733],[3.86728,1.67142,2.88598],[1.54107,-0.163431,-0.34603],[-2.42036,5.17366,-0.782465],[0.739761,-5.49274,2.42864],[3.35295,2.07511,1.93341],[3.09188,2.71589,3.03904],[-2.57103,-0.447255,0.418262],[3.54553,1.20922,2.3312],[2.29581,-0.424354,-0.949287],[-0.60412,-2.87935,0.431504],[-0.525739,-0.763888,1.4012],[1.2487,2.66104,-0.265927],[1.33988,0.96831,2.00305],[0.554074,2.76295,2.12141],[-0.22398,3.35568,-0.71722],[-0.111075,-0.494206,3.90565],[1.55094,-0.906343,1.66737],[0.540286,-0.495296,-0.436894],[2.31418,-1.84824,3.53625],[-0.0552651,0.455564,5.35845],[0.546311,2.14108,2.10063],[-2.40012,-0.891979,0.460628],[1.89407,1.19384,6.0076],[0.0842579,-2.13035,-2.71747],[-3.57745,0.442287,0.716671],[-0.396348,3.72754,2.08429],[0.678045,0.649217,5.27437],[0.441514,-0.402572,-0.488853],[2.05453,0.891867,2.39629],[2.63152,-2.23392,0.569344],[1.78884,1.65532,1.09771],[0.787155,3.44106,-4.98427],[0.674359,-1.66983,0.935858],[0.67995,2.3672,1.24843],[-1.29078,-1.07088,0.69049],[-1.68015,1.29967,-2.17458],[0.972254,3.58574,-0.595173],[0.778862,-0.603328,3.50788],[3.97496,1.01119,0.310016],[4.77826,4.08191,-1.36588],[2.21775,3.624,2.42492],[-0.288325,0.687539,1.07585],[1.25216,4.33651,0.343447],[2.2758,0.557925,1.66454],[0.26219,-1.32492,2.35089],[1.48015,1.99557,1.05442],[5.58372,2.23563,-0.210575],[-0.0627019,-1.99297,2.02121],[-0.0539979,-0.714038,5.39547],[1.46072,-2.18971,3.07229],[0.19478,2.22852,-0.248643],[4.08312,1.18932,3.72334],[-3.03745,-0.351882,-2.703],[3.3948,0.751386,-2.29854],[-1.66871,-2.76204,0.97268],[0.888994,-0.414813,0.851624],[0.167797,-1.44429,-0.973224],[-3.20065,1.19864,1.57194],[2.781,-1.42168,3.86832],[0.674051,0.544874,3.07019],[1.11989,-2.97252,-2.10804],[5.09815,-1.46912,4.0089],[0.693653,1.89799,5.09289],[1.31305,3.22929,-1.18428],[2.27456,2.01573,0.693532],[1.90329,3.32492,2.39397],[3.20852,-1.02536,0.842116],[0.1378,0.24748,2.86212],[1.13309,2.23718,0.574203],[0.465329,2.04901,2.0632],[4.75205,-1.75757,2.58498],[-1.65656,3.34417,5.22273],[-0.595161,0.743947,2.74621],[1.89311,-0.827214,4.22082],[-1.34676,-1.2611,2.9855],[-0.00806769,-1.514,-2.68786],[2.75008,-1.30107,2.07475],[-0.190073,-1.10031,3.96264],[1.10557,5.56205,-1.94414],[0.860611,2.50929,4.26284],[-0.959471,0.844543,-0.903491],[1.40749,2.17747,-0.835543],[0.886599,-0.374074,5.34504],[-0.145188,0.941921,-2.12356],[-0.366098,-0.150601,1.62142],[-0.906543,0.567482,1.3403],[4.02691,2.26866,5.53043],[1.45382,3.92713,1.06002],[1.62941,3.43329,0.206599],[4.06884,-1.30036,-5.19667],[1.30511,0.254844,1.75137],[1.75601,0.289451,2.68443],[1.0963,1.52179,0.525386],[0.961,-5.04251,0.438343],[-0.598072,3.99355,1.78888],[-2.94737,4.82057,5.36213]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[-0.392392],[1.30065],[2.14495],[14.242],[7.13211],[1.09416],[-11.7458],[13.8362],[4.10709],[5.09613],[-1.06363],[6.39411],[1.03376],[4.57792],[3.4225],[-3.27472],[3.89351],[0.652457],[-6.69194],[8.44153],[6.24519],[0.409442],[12.159],[9.97829],[1.53594],[-0.140895],[12.1185],[-2.15515],[-2.80754],[-1.81908],[10.253],[0.0676661],[5.50932],[7.12108],[1.50129],[-14.343],[5.05082],[-0.373998],[1.69651],[-7.97881],[-5.5967],[8.69961],[3.07821],[-4.07635],[1.63158],[0.832057],[-4.56571],[4.768],[6.95135],[0.59564],[1.80913],[6.96917],[11.808],[10.8899],[-3.64529],[9.74582],[-7.91563],[-2.32935],[4.41971],[3.21446],[0.387785],[-1.85473],[12.6502],[5.99713],[1.36259],[15.3196],[8.03245],[-5.89943],[0.638032],[1.70385],[6.4308],[5.49083],[-1.07427],[1.51822],[12.5584],[3.77265],[3.78134],[11.5756],[6.5159],[-3.11279],[8.8512],[9.38567],[-11.1258],[5.62236],[-4.03327],[-3.5298],[12.1378],[-5.8052],[3.10265],[0.922837],[11.6848],[-2.31684],[-3.10733],[-4.37397],[4.42559],[6.6907],[-0.135607],[9.40145],[-3.01065],[0.546046]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=GreaterOrEqual name=Unnamed threshold=3 Mean point in event domain=class=Point name=Unnamed dimension=3 values=[1.48029,-0.397202,2.85309] Importance factors at threshold 3 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.0410691,0.347559,0.611372] Importance factors at threshold/2 1.5 =class=PointWithDescription name=Unnamed dimension=3 description=[X0,X1,X2] values=[0.0657106,0.288027,0.646263] importanceFactorsGraph=class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 4.1%,X1 : 34.8%,X2 : 61.1%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0410691],[0.347559],[0.611372]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,16.0151],[0.12,14.5392],[0.13,12.3635],[0.14,9.72532],[0.15,12.0916],[0.16,10.995],[0.17,8.85427],[0.18,9.71332],[0.19,8.77969],[0.2,7.28393],[0.21,6.5821],[0.22,8.24504],[0.23,9.04851],[0.24,7.82808],[0.25,6.953],[0.26,7.10977],[0.27,5.4344],[0.28,6.42502],[0.29,7.67596],[0.3,7.70745],[0.31,7.24118],[0.32,6.92992],[0.33,7.29991],[0.34,6.6061],[0.35,7.54509],[0.36,7.1778],[0.37,7.69435],[0.38,6.67955],[0.39,6.69065],[0.4,5.28638],[0.41,6.27166],[0.42,6.32837],[0.43,5.49912],[0.44,4.31421],[0.45,3.69457],[0.46,3.61257],[0.47,3.11622],[0.48,4.10691],[0.49,4.79422],[0.5,6.78953],[0.51,7.21617],[0.52,6.12942],[0.53,6.68281],[0.54,6.46417],[0.55,6.21145],[0.56,6.57106],[0.57,6.65151],[0.58,7.1758],[0.59,7.45941],[0.6,8.1333],[0.61,7.19834],[0.62,6.60843],[0.63,6.44627],[0.64,7.10012],[0.65,7.38648],[0.66,5.56385],[0.67,5.41034],[0.68,5.09561],[0.69,4.908],[0.7,5.00619],[0.71,3.71228],[0.72,3.64857],[0.73,3.07698],[0.74,2.03624],[0.75,2.1134],[0.76,1.787],[0.77,0.890209],[0.78,0.749258],[0.79,0.854182],[0.8,1.39176],[0.81,0.533508],[0.82,0.336913],[0.83,0.432135],[0.84,0.315474],[0.85,0.36013],[0.86,0.433245],[0.87,0.338903],[0.88,0.137738],[0.89,0.687946],[0.9,1.50587]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,30.0564],[0.12,32.9651],[0.13,29.7373],[0.14,27.3116],[0.15,24.2133],[0.16,32.2431],[0.17,32.869],[0.18,34.1804],[0.19,34.1666],[0.2,33.968],[0.21,30.35],[0.22,27.9458],[0.23,30.9906],[0.24,33.4644],[0.25,34.9378],[0.26,34.3678],[0.27,35.6145],[0.28,37.0219],[0.29,35.5001],[0.3,36.5774],[0.31,35.8206],[0.32,32.8394],[0.33,32.0121],[0.34,31.804],[0.35,29.168],[0.36,31.2716],[0.37,31.0749],[0.38,34.5003],[0.39,34.6153],[0.4,37.7877],[0.41,36.1464],[0.42,35.6067],[0.43,35.171],[0.44,31.8829],[0.45,33.0904],[0.46,34.1414],[0.47,34.7772],[0.48,34.7559],[0.49,35.6687],[0.5,34.7262],[0.51,32.3649],[0.52,34.2609],[0.53,31.6563],[0.54,30.471],[0.55,29.3863],[0.56,28.8027],[0.57,32.8095],[0.58,34.1986],[0.59,35.5315],[0.6,37.2063],[0.61,37.6832],[0.62,38.0851],[0.63,36.4023],[0.64,35.6415],[0.65,34.8474],[0.66,30.7977],[0.67,32.54],[0.68,35.2925],[0.69,37.095],[0.7,36.9605],[0.71,39.0519],[0.72,38.0086],[0.73,38.2424],[0.74,39.986],[0.75,39.3402],[0.76,36.9327],[0.77,36.81],[0.78,41.251],[0.79,39.058],[0.8,41.0228],[0.81,41.9726],[0.82,39.311],[0.83,37.8837],[0.84,42.2531],[0.85,41.7776],[0.86,42.0584],[0.87,41.9649],[0.88,43.5552],[0.89,42.4456],[0.9,49.028]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,53.9285],[0.12,52.4956],[0.13,57.8992],[0.14,62.9631],[0.15,63.695],[0.16,56.7619],[0.17,58.2768],[0.18,56.1063],[0.19,57.0538],[0.2,58.7481],[0.21,63.0679],[0.22,63.8092],[0.23,59.9609],[0.24,58.7075],[0.25,58.1092],[0.26,58.5225],[0.27,58.9511],[0.28,56.5531],[0.29,56.824],[0.3,55.7152],[0.31,56.9382],[0.32,60.2307],[0.33,60.688],[0.34,61.5899],[0.35,63.2869],[0.36,61.5506],[0.37,61.2307],[0.38,58.8201],[0.39,58.6941],[0.4,56.9259],[0.41,57.5819],[0.42,58.065],[0.43,59.3299],[0.44,63.8029],[0.45,63.2151],[0.46,62.246],[0.47,62.1066],[0.48,61.1372],[0.49,59.537],[0.5,58.4843],[0.51,60.4189],[0.52,59.6097],[0.53,61.6609],[0.54,63.0648],[0.55,64.4022],[0.56,64.6263],[0.57,60.539],[0.58,58.6256],[0.59,57.0091],[0.6,54.6604],[0.61,55.1184],[0.62,55.3065],[0.63,57.1515],[0.64,57.2584],[0.65,57.7661],[0.66,63.6384],[0.67,62.0496],[0.68,59.6119],[0.69,57.997],[0.7,58.0333],[0.71,57.2358],[0.72,58.3428],[0.73,58.6806],[0.74,57.9778],[0.75,58.5464],[0.76,61.2803],[0.77,62.2998],[0.78,57.9997],[0.79,60.0878],[0.8,57.5854],[0.81,57.4939],[0.82,60.3521],[0.83,61.6842],[0.84,57.4314],[0.85,57.8623],[0.86,57.5084],[0.87,57.6962],[0.88,56.307],[0.89,56.8664],[0.9,49.4662]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.48,0],[0.48,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold=class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,16.0151],[10.8899,14.5392],[10.253,12.3635],[9.97829,9.72532],[9.74582,12.0916],[9.40145,10.995],[9.38567,8.85427],[8.8512,9.71332],[8.69961,8.77969],[8.44153,7.28393],[8.03245,6.5821],[7.13211,8.24504],[7.12108,9.04851],[6.96917,7.82808],[6.95135,6.953],[6.6907,7.10977],[6.5159,5.4344],[6.4308,6.42502],[6.39411,7.67596],[6.24519,7.70745],[5.99713,7.24118],[5.62236,6.92992],[5.50932,7.29991],[5.49083,6.6061],[5.09613,7.54509],[5.05082,7.1778],[4.768,7.69435],[4.57792,6.67955],[4.42559,6.69065],[4.41971,5.28638],[4.10709,6.27166],[3.89351,6.32837],[3.78134,5.49912],[3.77265,4.31421],[3.4225,3.69457],[3.21446,3.61257],[3.10265,3.11622],[3.07821,4.10691],[2.14495,4.79422],[1.80913,6.78953],[1.70385,7.21617],[1.69651,6.12942],[1.63158,6.68281],[1.53594,6.46417],[1.51822,6.21145],[1.50129,6.57106],[1.36259,6.65151],[1.30065,7.1758],[1.09416,7.45941],[1.03376,8.1333],[0.922837,7.19834],[0.832057,6.60843],[0.652457,6.44627],[0.638032,7.10012],[0.59564,7.38648],[0.546046,5.56385],[0.409442,5.41034],[0.387785,5.09561],[0.0676661,4.908],[-0.135607,5.00619],[-0.140895,3.71228],[-0.373998,3.64857],[-0.392392,3.07698],[-1.06363,2.03624],[-1.07427,2.1134],[-1.81908,1.787],[-1.85473,0.890209],[-2.15515,0.749258],[-2.31684,0.854182],[-2.32935,1.39176],[-2.80754,0.533508],[-3.01065,0.336913],[-3.10733,0.432135],[-3.11279,0.315474],[-3.27472,0.36013],[-3.5298,0.433245],[-3.64529,0.338903],[-4.03327,0.137738],[-4.07635,0.687946],[-4.37397,1.50587]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,30.0564],[10.8899,32.9651],[10.253,29.7373],[9.97829,27.3116],[9.74582,24.2133],[9.40145,32.2431],[9.38567,32.869],[8.8512,34.1804],[8.69961,34.1666],[8.44153,33.968],[8.03245,30.35],[7.13211,27.9458],[7.12108,30.9906],[6.96917,33.4644],[6.95135,34.9378],[6.6907,34.3678],[6.5159,35.6145],[6.4308,37.0219],[6.39411,35.5001],[6.24519,36.5774],[5.99713,35.8206],[5.62236,32.8394],[5.50932,32.0121],[5.49083,31.804],[5.09613,29.168],[5.05082,31.2716],[4.768,31.0749],[4.57792,34.5003],[4.42559,34.6153],[4.41971,37.7877],[4.10709,36.1464],[3.89351,35.6067],[3.78134,35.171],[3.77265,31.8829],[3.4225,33.0904],[3.21446,34.1414],[3.10265,34.7772],[3.07821,34.7559],[2.14495,35.6687],[1.80913,34.7262],[1.70385,32.3649],[1.69651,34.2609],[1.63158,31.6563],[1.53594,30.471],[1.51822,29.3863],[1.50129,28.8027],[1.36259,32.8095],[1.30065,34.1986],[1.09416,35.5315],[1.03376,37.2063],[0.922837,37.6832],[0.832057,38.0851],[0.652457,36.4023],[0.638032,35.6415],[0.59564,34.8474],[0.546046,30.7977],[0.409442,32.54],[0.387785,35.2925],[0.0676661,37.095],[-0.135607,36.9605],[-0.140895,39.0519],[-0.373998,38.0086],[-0.392392,38.2424],[-1.06363,39.986],[-1.07427,39.3402],[-1.81908,36.9327],[-1.85473,36.81],[-2.15515,41.251],[-2.31684,39.058],[-2.32935,41.0228],[-2.80754,41.9726],[-3.01065,39.311],[-3.10733,37.8837],[-3.11279,42.2531],[-3.27472,41.7776],[-3.5298,42.0584],[-3.64529,41.9649],[-4.03327,43.5552],[-4.07635,42.4456],[-4.37397,49.028]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,53.9285],[10.8899,52.4956],[10.253,57.8992],[9.97829,62.9631],[9.74582,63.695],[9.40145,56.7619],[9.38567,58.2768],[8.8512,56.1063],[8.69961,57.0538],[8.44153,58.7481],[8.03245,63.0679],[7.13211,63.8092],[7.12108,59.9609],[6.96917,58.7075],[6.95135,58.1092],[6.6907,58.5225],[6.5159,58.9511],[6.4308,56.5531],[6.39411,56.824],[6.24519,55.7152],[5.99713,56.9382],[5.62236,60.2307],[5.50932,60.688],[5.49083,61.5899],[5.09613,63.2869],[5.05082,61.5506],[4.768,61.2307],[4.57792,58.8201],[4.42559,58.6941],[4.41971,56.9259],[4.10709,57.5819],[3.89351,58.065],[3.78134,59.3299],[3.77265,63.8029],[3.4225,63.2151],[3.21446,62.246],[3.10265,62.1066],[3.07821,61.1372],[2.14495,59.537],[1.80913,58.4843],[1.70385,60.4189],[1.69651,59.6097],[1.63158,61.6609],[1.53594,63.0648],[1.51822,64.4022],[1.50129,64.6263],[1.36259,60.539],[1.30065,58.6256],[1.09416,57.0091],[1.03376,54.6604],[0.922837,55.1184],[0.832057,55.3065],[0.652457,57.1515],[0.638032,57.2584],[0.59564,57.7661],[0.546046,63.6384],[0.409442,62.0496],[0.387785,59.6119],[0.0676661,57.997],[-0.135607,58.0333],[-0.140895,57.2358],[-0.373998,58.3428],[-0.392392,58.6806],[-1.06363,57.9778],[-1.07427,58.5464],[-1.81908,61.2803],[-1.85473,62.2998],[-2.15515,57.9997],[-2.31684,60.0878],[-2.32935,57.5854],[-2.80754,57.4939],[-3.01065,60.3521],[-3.10733,61.6842],[-3.11279,57.4314],[-3.27472,57.8623],[-3.5298,57.5084],[-3.64529,57.6962],[-4.03327,56.307],[-4.07635,56.8664],[-4.37397,49.4662]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] openturns-1.9/lib/test/t_SkellamFactory_std.cxx000066400000000000000000000047301307543307100220150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Skellam for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Skellam distribution(10.0, 5.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); SkellamFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Skellam estimatedSkellam(factory.buildAsSkellam(sample)); fullprint << "Skellam =" << distribution << std::endl; fullprint << "Estimated skellam=" << estimatedSkellam << std::endl; estimatedSkellam = factory.buildAsSkellam(); fullprint << "Default skellam=" << estimatedSkellam << std::endl; estimatedSkellam = factory.buildAsSkellam(distribution.getParameter()); fullprint << "Skellam from parameters=" << estimatedSkellam << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SkellamFactory_std.expout000066400000000000000000000012361307543307100225350ustar00rootroot00000000000000Distribution =class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Estimated distribution=class=Skellam name=Skellam dimension=1 lambda1=10.1554 lambda2=5.1667 Default distribution=class=Skellam name=Skellam dimension=1 lambda1=1 lambda2=1 Distribution from parameters=class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Skellam =class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Estimated skellam=class=Skellam name=Skellam dimension=1 lambda1=10.1554 lambda2=5.1667 Default skellam=class=Skellam name=Skellam dimension=1 lambda1=1 lambda2=1 Skellam from parameters=class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 openturns-1.9/lib/test/t_Skellam_std.cxx000066400000000000000000000136041307543307100204650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Skellam for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object Skellam distribution(10.0, 5.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distribution.getDimension(), 12.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point // Scalar eps(1e-5); Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; /* Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Skellam(distribution.getLambda() + eps).computePDF(point) - Skellam(distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(1); CDFgrFD[0] = (Skellam(distribution.getLambda() + eps).computeCDF(point) - Skellam(distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl;*/ Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Skellam::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Skellam_std.expout000066400000000000000000000043541307543307100212110ustar00rootroot00000000000000Distribution class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Distribution Skellam(lambda1 = 10, lambda2 = 5) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[11] oneSample first=class=Point name=Unnamed dimension=1 values=[11] last=class=Point name=Unnamed dimension=1 values=[7] mean=class=Point name=Unnamed dimension=1 values=[4.9883] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[15.3189] Point= class=Point name=Unnamed dimension=1 values=[12] log pdf=-3.91245 pdf =0.0199914 pdf (FD)=0.0199914 cdf=0.971361 ccdf=0.0286391 survival=0.0286391 characteristic function=(-0.08618,-0.0425613) log characteristic function=(-2.34219,-2.68286) generating function=(4.64245e-05,6.70957e-05) log generating function=(-9.41379,0.965517) quantile=class=Point name=Unnamed dimension=1 values=[11] cdf(quantile)=0.951369 mean=class=Point name=Unnamed dimension=1 values=[5] standard deviation=class=Point name=Unnamed dimension=1 values=[3.87298] skewness=class=Point name=Unnamed dimension=1 values=[0.0860663] kurtosis=class=Point name=Unnamed dimension=1 values=[3.06667] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[15] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[lambda1 : 10, lambda2 : 5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[5] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[40] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[355] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[3665] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[41130] Standard representative=Skellam(lambda1 = 10, lambda2 = 5) openturns-1.9/lib/test/t_SklarCopula_std.cxx000066400000000000000000000202661307543307100213170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SklarCopula for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 3; CorrelationMatrix R = IdentityMatrix(dim); for(UnsignedInteger i = 0; i < dim - 1; i++) R(i, i + 1) = 0.25; Point mean(dim); mean[0] = 1.0; mean[1] = 2.0; mean[2] = 3.0; Point sigma(dim); sigma[0] = 2.0; sigma[1] = 3.0; sigma[2] = 1.0; SklarCopula copula(Normal(mean, sigma, R)); NormalCopula copulaRef(R); copula.setName("a normal copula"); fullprint << "Copula " << copula << std::endl; std::cout << "Copula " << copula << std::endl; fullprint << "Mean =" << copula.getMean() << std::endl; fullprint << "Mean (ref)=" << copulaRef.getMean() << std::endl; // Is this copula an elliptical distribution? fullprint << "Elliptical distribution= " << (copula.isElliptical() ? "true" : "false") << std::endl; // Is this copula elliptical ? fullprint << "Elliptical copula= " << (copula.hasEllipticalCopula() ? "true" : "false") << std::endl; // Is this copula independent ? fullprint << "Independent copula= " << (copula.hasIndependentCopula() ? "true" : "false") << std::endl; // Test for realization of copula Point oneRealization = copula.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = copula.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Test for sampling size = 1000; Sample anotherSample = copula.getSample( size ); fullprint << "anotherSample mean=" << anotherSample.computeMean() << std::endl; fullprint << "anotherSample covariance=" << anotherSample.computeCovariance() << std::endl; // Define a point Point point(dim, 0.2); // Show DDF, PDF and CDF of point Point pointDDF = copula.computeDDF( point ); Scalar pointPDF = copula.computePDF( point ); Scalar pointCDF = copula.computeCDF( point ); Scalar pointPDFRef = copulaRef.computePDF( point ); Scalar pointCDFRef = copulaRef.computeCDF( point ); fullprint << "point= " << point << " ddf=" << pointDDF << " ddf (FD)=" << copula.ContinuousDistribution::computeDDF(point) << " pdf=" << pointPDF << " pdf (ref)=" << pointPDFRef << " cdf=" << pointCDF << " cdf (ref)=" << pointCDFRef << std::endl; Scalar Survival = copula.computeSurvivalFunction(point); fullprint << "Survival =" << Survival << std::endl; fullprint << "Survival (ref)=" << copula.computeSurvivalFunction(point) << std::endl; Point InverseSurvival = copula.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << copula.computeSurvivalFunction(InverseSurvival) << std::endl; // Get 50% quantile Point quantile = copula.computeQuantile( 0.5 ); Point quantileRef = copulaRef.computeQuantile( 0.5 ); fullprint << "Quantile=" << quantile << std::endl; fullprint << "QuantileRef=" << quantileRef << std::endl; fullprint << "CDF(quantile)=" << copula.computeCDF(quantile) << std::endl; if (copula.getDimension() <= 2) { // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << copula.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(copula.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << copula.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << copula.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; } // Covariance and correlation ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 20 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-4 ); CovarianceMatrix covariance = copula.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CorrelationMatrix correlation = copula.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CorrelationMatrix spearman = copula.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CorrelationMatrix kendall = copula.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; ResourceMap::SetAsUnsignedInteger( "GaussKronrod-MaximumSubIntervals", 100 ); ResourceMap::SetAsScalar( "GaussKronrod-MaximumError", 1.0e-12 ); // Extract the marginals for (UnsignedInteger i = 0; i < dim; i++) { Copula margin(copula.getMarginal(i)); Copula marginRef(copulaRef.getMarginal(i)); fullprint << "margin=" << margin << std::endl; fullprint << "margin PDF =" << margin.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin PDF (ref)=" << marginRef.computePDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF =" << margin.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin CDF (ref)=" << marginRef.computeCDF(Point(1, 0.25)) << std::endl; fullprint << "margin quantile =" << margin.computeQuantile(0.95) << std::endl; fullprint << "margin quantile (ref)=" << marginRef.computeQuantile(0.95) << std::endl; fullprint << "margin realization=" << margin.getRealization() << std::endl; } // Extract a 2-D marginal Indices indices(2, 0); indices[0] = 1; indices[1] = 0; fullprint << "indices=" << indices << std::endl; Copula margins(copula.getMarginal(indices)); Copula marginsRef(copulaRef.getMarginal(indices)); fullprint << "margins=" << margins << std::endl; fullprint << "margins PDF =" << margins.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins PDF (ref)=" << marginsRef.computePDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF =" << margins.computeCDF(Point(2, 0.25)) << std::endl; fullprint << "margins CDF (ref)=" << marginsRef.computeCDF(Point(2, 0.25)) << std::endl; quantile = margins.computeQuantile(0.95); quantileRef = marginsRef.computeQuantile(0.95); fullprint << "margins quantile =" << quantile << std::endl; fullprint << "margins quantile (ref)=" << quantileRef << std::endl; fullprint << "margins CDF(quantile)=" << margins.computeCDF(quantile) << std::endl; fullprint << "margins realization=" << margins.getRealization() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SklarCopula_std.expout000066400000000000000000000117461307543307100220440ustar00rootroot00000000000000Copula class=SklarCopula name=a normal copula dimension=3 distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1,2,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Copula class=SklarCopula name=a normal copula dimension=3 distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1,2,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Mean =class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Mean (ref)=class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Elliptical distribution= false Elliptical copula= true Independent copula= false oneRealization=class=Point name=Unnamed dimension=3 values=[0.728473,0.14143,0.226528] oneSample=class=Sample name=a normal copula implementation=class=SampleImplementation name=a normal copula size=10 dimension=3 description=[X0,X1,X2] data=[[0.885991,0.03509,0.410967],[0.361292,0.903689,0.875806],[0.786157,0.398475,0.551985],[0.0110089,0.0347878,0.0549614],[0.463832,0.82677,0.548704],[0.28767,0.614586,0.66531],[0.672124,0.18575,0.136607],[0.682113,0.49876,0.620616],[0.962655,0.696223,0.230639],[0.235291,0.339456,0.0367574]] anotherSample mean=class=Point name=Unnamed dimension=3 values=[0.500491,0.497339,0.510215] anotherSample covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0807623,0.0187494,0.00159833,0.0187494,0.0838893,0.0218797,0.00159833,0.0218797,0.08306] point= class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] ddf=class=Point name=Unnamed dimension=3 values=[-0.0827656,-0.165531,-0.165531] ddf (FD)=class=Point name=Unnamed dimension=3 values=[-0.591263,-1.77379,-0.591263] pdf=1.37677 pdf (ref)=1.37677 cdf=0.0176157 cdf (ref)=0.0176157 Survival =0.545177 Survival (ref)=0.545177 Inverse survival=class=Point name=Unnamed dimension=3 values=[0.0174781,0.0174781,0.0174781] Survival(inverse survival)=0.95 Quantile=class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] QuantileRef=class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] CDF(quantile)=0.5 covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0199415,0,0.0199415,0.0833333,0.0199415,0,0.0199415,0.0833333] correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239299,0,0.239299,1,0.239299,0,0.239299,1] spearman=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239299,0,0.239299,1,0.239299,0,0.239299,1] kendall=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.160861,0,0.160861,1,0.160861,0,0.160861,1] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1 margin PDF (ref)=1 margin CDF =0.25 margin CDF (ref)=0.25 margin quantile =class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.274671] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1 margin PDF (ref)=1 margin CDF =0.25 margin CDF (ref)=0.25 margin quantile =class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.418694] margin=class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1 margin PDF (ref)=1 margin CDF =0.25 margin CDF (ref)=0.25 margin quantile =class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)=class=Point name=Unnamed dimension=1 values=[0.95] margin realization=class=Point name=Unnamed dimension=1 values=[0.865595] indices=[1,0] margins=class=SklarCopula name=SklarCopula dimension=2 distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[2,1] sigma=class=Point name=Unnamed dimension=2 values=[3,2] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.25,0.25,1] margins PDF =1.13117 margins PDF (ref)=1.13117 margins CDF =0.0893097 margins CDF (ref)=0.0893097 margins quantile =class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margins quantile (ref)=class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margins CDF(quantile)=0.95 margins realization=class=Point name=Unnamed dimension=2 values=[0.0536055,0.320679] openturns-1.9/lib/test/t_SobolIndicesAlgorithm_std.cxx000066400000000000000000000217641307543307100233270ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SobolIndicesAlgorithm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RandomGenerator::SetSeed(0); UnsignedInteger inputDimension = 3; UnsignedInteger outputDimension = 1; Description inputName(inputDimension); inputName[0] = "X1"; inputName[1] = "X2"; inputName[2] = "X3"; Description formula(1); formula[0] = "sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)"; SymbolicFunction model(inputName, formula); ComposedDistribution::DistributionCollection marginals(inputDimension); marginals[0] = Uniform(-1.0, 1.0); // marginals[0].setDescription("Marginal 1"); marginals[1] = Uniform(-1.0, 1.0); // marginals[1].setDescription("Marginal 2"); marginals[2] = Uniform(-1.0, 1.0); // marginals[2].setDescription("Marginal 3"); ComposedDistribution maDistribution(ComposedDistribution(marginals, IndependentCopula(inputDimension))); const UnsignedInteger size = 10000; const UnsignedInteger nr_bootstrap = 100; const Scalar confidence_level = 0.95; const Sample inputDesign(SobolIndicesAlgorithmImplementation::Generate(maDistribution, size, true)); const Sample outputDesign(model(inputDesign)); { SaltelliSensitivityAlgorithm sensitivitySobol(inputDesign, outputDesign, size); const SymmetricMatrix secondOrderIndices( sensitivitySobol.getSecondOrderIndices() ); const Point firstOrderIndices(sensitivitySobol.getFirstOrderIndices()); const Point totalOrderIndices(sensitivitySobol.getTotalOrderIndices()); fullprint << "Method = " << sensitivitySobol.getClassName() << std::endl; fullprint << "First order Sobol indice of Y|X1 = " << firstOrderIndices[0] << std::endl; fullprint << "Total order Sobol indice of Y|X3 = " << totalOrderIndices[2] << std::endl; fullprint << "Second order Sobol indice of Y|X1,X3 = " << secondOrderIndices(0, 2) << std::endl; // Confidence interval sensitivitySobol.setBootstrapSize(nr_bootstrap); sensitivitySobol.setBootstrapConfidenceLevel(confidence_level); const Interval confidenceIntervalFirstOrder(sensitivitySobol.getFirstOrderIndicesInterval()); const Interval confidenceIntervalTotalOrder(sensitivitySobol.getTotalOrderIndicesInterval()); fullprint << "Confidence interval of first order Y|X1 = [" << confidenceIntervalFirstOrder.getLowerBound()[0] << ", " << confidenceIntervalFirstOrder.getUpperBound()[0] << "]" << std::endl; fullprint << "Confidence interval of total order Y|X3 = [" << confidenceIntervalTotalOrder.getLowerBound()[2] << ", " << confidenceIntervalTotalOrder.getUpperBound()[2] << "]" << std::endl; } { JansenSensitivityAlgorithm sensitivitySobol(inputDesign, outputDesign, size); const SymmetricMatrix secondOrderIndices( sensitivitySobol.getSecondOrderIndices() ); const Point firstOrderIndices(sensitivitySobol.getFirstOrderIndices()); const Point totalOrderIndices(sensitivitySobol.getTotalOrderIndices()); fullprint << "Method = " << sensitivitySobol.getClassName() << std::endl; fullprint << "First order Sobol indice of Y|X1 = " << firstOrderIndices[0] << std::endl; fullprint << "Total order Sobol indice of Y|X3 = " << totalOrderIndices[2] << std::endl; fullprint << "Second order Sobol indice of Y|X1,X3 = " << secondOrderIndices(0, 2) << std::endl; // Confidence interval sensitivitySobol.setBootstrapSize(nr_bootstrap); sensitivitySobol.setBootstrapConfidenceLevel(confidence_level); const Interval confidenceIntervalFirstOrder(sensitivitySobol.getFirstOrderIndicesInterval()); const Interval confidenceIntervalTotalOrder(sensitivitySobol.getTotalOrderIndicesInterval()); fullprint << "Confidence interval of first order Y|X1 = [" << confidenceIntervalFirstOrder.getLowerBound()[0] << ", " << confidenceIntervalFirstOrder.getUpperBound()[0] << "]" << std::endl; fullprint << "Confidence interval of total order Y|X3 = [" << confidenceIntervalTotalOrder.getLowerBound()[2] << ", " << confidenceIntervalTotalOrder.getUpperBound()[2] << "]" << std::endl; } { MauntzKucherenkoSensitivityAlgorithm sensitivitySobol(inputDesign, outputDesign, size); const SymmetricMatrix secondOrderIndices( sensitivitySobol.getSecondOrderIndices() ); const Point firstOrderIndices(sensitivitySobol.getFirstOrderIndices()); const Point totalOrderIndices(sensitivitySobol.getTotalOrderIndices()); fullprint << "Method = " << sensitivitySobol.getClassName() << std::endl; fullprint << "First order Sobol indice of Y|X1 = " << firstOrderIndices[0] << std::endl; fullprint << "Total order Sobol indice of Y|X3 = " << totalOrderIndices[2] << std::endl; fullprint << "Second order Sobol indice of Y|X1,X3 = " << secondOrderIndices(0, 2) << std::endl; // Confidence interval sensitivitySobol.setBootstrapSize(nr_bootstrap); sensitivitySobol.setBootstrapConfidenceLevel(confidence_level); const Interval confidenceIntervalFirstOrder(sensitivitySobol.getFirstOrderIndicesInterval()); const Interval confidenceIntervalTotalOrder(sensitivitySobol.getTotalOrderIndicesInterval()); fullprint << "Confidence interval of first order Y|X1 = [" << confidenceIntervalFirstOrder.getLowerBound()[0] << ", " << confidenceIntervalFirstOrder.getUpperBound()[0] << "]" << std::endl; fullprint << "Confidence interval of total order Y|X3 = [" << confidenceIntervalTotalOrder.getLowerBound()[2] << ", " << confidenceIntervalTotalOrder.getUpperBound()[2] << "]" << std::endl; } { MartinezSensitivityAlgorithm sensitivitySobol(inputDesign, outputDesign, size); const SymmetricMatrix secondOrderIndices( sensitivitySobol.getSecondOrderIndices() ); const Point firstOrderIndices(sensitivitySobol.getFirstOrderIndices()); const Point totalOrderIndices(sensitivitySobol.getTotalOrderIndices()); fullprint << "Method = " << sensitivitySobol.getClassName() << std::endl; fullprint << "First order Sobol indice of Y|X1 = " << firstOrderIndices[0] << std::endl; fullprint << "Total order Sobol indice of Y|X3 = " << totalOrderIndices[2] << std::endl; fullprint << "Second order Sobol indice of Y|X1,X3 = " << secondOrderIndices(0, 2) << std::endl; // Confidence interval sensitivitySobol.setBootstrapSize(nr_bootstrap); sensitivitySobol.setBootstrapConfidenceLevel(confidence_level); const Interval confidenceIntervalFirstOrder(sensitivitySobol.getFirstOrderIndicesInterval()); const Interval confidenceIntervalTotalOrder(sensitivitySobol.getTotalOrderIndicesInterval()); fullprint << "Confidence interval of first order Y|X1 = [" << confidenceIntervalFirstOrder.getLowerBound()[0] << ", " << confidenceIntervalFirstOrder.getUpperBound()[0] << "]" << std::endl; fullprint << "Confidence interval of total order Y|X3 = [" << confidenceIntervalTotalOrder.getLowerBound()[2] << ", " << confidenceIntervalTotalOrder.getUpperBound()[2] << "]" << std::endl; fullprint << "Asymptotic estimate" << std::endl; ResourceMap::SetAsBool("MartinezSensitivityAlgorithm-UseAsymptoticInterval", true); const Interval asymptoticConfidenceIntervalFirstOrder(sensitivitySobol.getFirstOrderIndicesInterval()); const Interval asymptoticConfidenceIntervalTotalOrder(sensitivitySobol.getTotalOrderIndicesInterval()); fullprint << "Confidence interval of first order Y|X1 = [" << asymptoticConfidenceIntervalFirstOrder.getLowerBound()[0] << ", " << asymptoticConfidenceIntervalFirstOrder.getUpperBound()[0] << "]" << std::endl; fullprint << "Confidence interval of total order Y|X3 = [" << asymptoticConfidenceIntervalTotalOrder.getLowerBound()[2] << ", " << asymptoticConfidenceIntervalTotalOrder.getUpperBound()[2] << "]" << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SobolIndicesAlgorithm_std.expout000066400000000000000000000025041307543307100240400ustar00rootroot00000000000000Method = SaltelliSensitivityAlgorithm First order Sobol indice of Y|X1 = 0.293134 Total order Sobol indice of Y|X3 = 0.256687 Second order Sobol indice of Y|X1,X3 = 0.24049 Confidence interval of first order Y|X1 = [0.272983, 0.309189] Confidence interval of total order Y|X3 = [0.227016, 0.281488] Method = JansenSensitivityAlgorithm First order Sobol indice of Y|X1 = 0.322419 Total order Sobol indice of Y|X3 = 0.240408 Second order Sobol indice of Y|X1,X3 = 0.18219 Confidence interval of first order Y|X1 = [0.304766, 0.349408] Confidence interval of total order Y|X3 = [0.23337, 0.251482] Method = MauntzKucherenkoSensitivityAlgorithm First order Sobol indice of Y|X1 = 0.293133 Total order Sobol indice of Y|X3 = 0.256687 Second order Sobol indice of Y|X1,X3 = 0.240492 Confidence interval of first order Y|X1 = [0.272701, 0.317057] Confidence interval of total order Y|X3 = [0.229661, 0.28614] Method = MartinezSensitivityAlgorithm First order Sobol indice of Y|X1 = 0.308902 Total order Sobol indice of Y|X3 = 0.244293 Second order Sobol indice of Y|X1,X3 = 0.214961 Confidence interval of first order Y|X1 = [0.289644, 0.326722] Confidence interval of total order Y|X3 = [0.211387, 0.272784] Asymptotic estimate Confidence interval of first order Y|X1 = [0.308335, 0.309469] Confidence interval of total order Y|X3 = [0.244024, 0.244562] openturns-1.9/lib/test/t_SobolSequence_std.cxx000066400000000000000000000043341307543307100216440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief Implementation of the Sobol' sequence * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Create a Sobol' sequence of maximum dimension SobolSequence sequence(SobolSequence::MaximumNumberOfDimension); fullprint << sequence << std::endl; // Create a numerical sample of the sequence Sample sobolSample(sequence.generate(10)); fullprint << sobolSample << std::endl; // Create another Sobol' sequence of dimension 2 to estimate Pi in [0; 1)^2 UnsignedInteger dimension = 2; sequence = SobolSequence(dimension); UnsignedInteger pointInsideCircle = 0; UnsignedInteger sampleSize = 1000; for(UnsignedInteger i = 0; i < sampleSize; ++i) { Point sobolPoint(sequence.generate()); fullprint << sobolPoint << std::endl; if(sobolPoint.norm() < 1.0) ++ pointInsideCircle; } Scalar probabilityEstimate = 1.0 * pointInsideCircle / sampleSize; Scalar probability = M_PI / 4.0; Scalar relativeError = std::abs(probability - probabilityEstimate) / probability; fullprint << "sample size=" << sampleSize << std::endl; fullprint << "relative error to Pi=" << relativeError << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SobolSequence_std.expout000066400000000000000000002035671307543307100223770ustar00rootroot00000000000000class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=40 coefficients=[2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=40 data=[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5],[0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25],[0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75],[0.375,0.375,0.625,0.125,0.875,0.875,0.125,0.625,0.125,0.875,0.375,0.625,0.125,0.375,0.625,0.125,0.625,0.375,0.375,0.875,0.875,0.625,0.125,0.875,0.125,0.875,0.875,0.125,0.625,0.625,0.375,0.375,0.375,0.375,0.625,0.125,0.875,0.875,0.125,0.625],[0.875,0.875,0.125,0.625,0.375,0.375,0.625,0.125,0.625,0.375,0.875,0.125,0.625,0.875,0.125,0.625,0.125,0.875,0.875,0.375,0.375,0.125,0.625,0.375,0.625,0.375,0.375,0.625,0.125,0.125,0.875,0.875,0.875,0.875,0.125,0.625,0.375,0.375,0.625,0.125],[0.625,0.125,0.375,0.375,0.125,0.625,0.875,0.875,0.375,0.125,0.125,0.375,0.375,0.625,0.875,0.875,0.375,0.125,0.625,0.625,0.125,0.875,0.875,0.625,0.375,0.125,0.625,0.875,0.875,0.375,0.125,0.625,0.625,0.125,0.375,0.375,0.125,0.625,0.875,0.875],[0.125,0.625,0.875,0.875,0.625,0.125,0.375,0.375,0.875,0.625,0.625,0.875,0.875,0.125,0.375,0.375,0.875,0.625,0.125,0.125,0.625,0.375,0.375,0.125,0.875,0.625,0.125,0.375,0.375,0.875,0.625,0.125,0.125,0.625,0.875,0.875,0.625,0.125,0.375,0.375],[0.1875,0.3125,0.3125,0.6875,0.5625,0.1875,0.0625,0.9375,0.1875,0.0625,0.6875,0.8125,0.5625,0.6875,0.1875,0.6875,0.1875,0.0625,0.0625,0.8125,0.9375,0.3125,0.5625,0.3125,0.4375,0.4375,0.6875,0.4375,0.8125,0.5625,0.9375,0.8125,0.1875,0.3125,0.3125,0.6875,0.5625,0.1875,0.0625,0.9375],[0.6875,0.8125,0.8125,0.1875,0.0625,0.6875,0.5625,0.4375,0.6875,0.5625,0.1875,0.3125,0.0625,0.1875,0.6875,0.1875,0.6875,0.5625,0.5625,0.3125,0.4375,0.8125,0.0625,0.8125,0.9375,0.9375,0.1875,0.9375,0.3125,0.0625,0.4375,0.3125,0.6875,0.8125,0.8125,0.1875,0.0625,0.6875,0.5625,0.4375],[0.9375,0.0625,0.5625,0.9375,0.3125,0.4375,0.8125,0.6875,0.4375,0.8125,0.9375,0.0625,0.8125,0.4375,0.4375,0.4375,0.9375,0.3125,0.8125,0.5625,0.1875,0.0625,0.3125,0.0625,0.1875,0.6875,0.9375,0.6875,0.5625,0.3125,0.6875,0.0625,0.9375,0.0625,0.5625,0.9375,0.3125,0.4375,0.8125,0.6875]] class=Point name=Unnamed dimension=2 values=[0.5,0.5] class=Point name=Unnamed dimension=2 values=[0.75,0.25] class=Point name=Unnamed dimension=2 values=[0.25,0.75] class=Point name=Unnamed dimension=2 values=[0.375,0.375] class=Point name=Unnamed dimension=2 values=[0.875,0.875] class=Point name=Unnamed dimension=2 values=[0.625,0.125] class=Point name=Unnamed dimension=2 values=[0.125,0.625] class=Point name=Unnamed dimension=2 values=[0.1875,0.3125] class=Point name=Unnamed dimension=2 values=[0.6875,0.8125] class=Point name=Unnamed dimension=2 values=[0.9375,0.0625] class=Point name=Unnamed dimension=2 values=[0.4375,0.5625] class=Point name=Unnamed dimension=2 values=[0.3125,0.1875] class=Point name=Unnamed dimension=2 values=[0.8125,0.6875] class=Point name=Unnamed dimension=2 values=[0.5625,0.4375] class=Point name=Unnamed dimension=2 values=[0.0625,0.9375] class=Point name=Unnamed dimension=2 values=[0.09375,0.46875] class=Point name=Unnamed dimension=2 values=[0.59375,0.96875] class=Point name=Unnamed dimension=2 values=[0.84375,0.21875] class=Point name=Unnamed dimension=2 values=[0.34375,0.71875] class=Point name=Unnamed dimension=2 values=[0.46875,0.09375] class=Point name=Unnamed dimension=2 values=[0.96875,0.59375] class=Point name=Unnamed dimension=2 values=[0.71875,0.34375] class=Point name=Unnamed dimension=2 values=[0.21875,0.84375] class=Point name=Unnamed dimension=2 values=[0.15625,0.15625] class=Point name=Unnamed dimension=2 values=[0.65625,0.65625] class=Point name=Unnamed dimension=2 values=[0.90625,0.40625] class=Point name=Unnamed dimension=2 values=[0.40625,0.90625] class=Point name=Unnamed dimension=2 values=[0.28125,0.28125] class=Point name=Unnamed dimension=2 values=[0.78125,0.78125] class=Point name=Unnamed dimension=2 values=[0.53125,0.03125] class=Point name=Unnamed dimension=2 values=[0.03125,0.53125] class=Point name=Unnamed dimension=2 values=[0.046875,0.265625] class=Point name=Unnamed dimension=2 values=[0.546875,0.765625] class=Point name=Unnamed dimension=2 values=[0.796875,0.015625] class=Point name=Unnamed dimension=2 values=[0.296875,0.515625] class=Point name=Unnamed dimension=2 values=[0.421875,0.140625] class=Point name=Unnamed dimension=2 values=[0.921875,0.640625] class=Point name=Unnamed dimension=2 values=[0.671875,0.390625] class=Point name=Unnamed dimension=2 values=[0.171875,0.890625] class=Point name=Unnamed dimension=2 values=[0.234375,0.078125] class=Point name=Unnamed dimension=2 values=[0.734375,0.578125] class=Point name=Unnamed dimension=2 values=[0.984375,0.328125] class=Point name=Unnamed dimension=2 values=[0.484375,0.828125] class=Point name=Unnamed dimension=2 values=[0.359375,0.453125] class=Point name=Unnamed dimension=2 values=[0.859375,0.953125] class=Point name=Unnamed dimension=2 values=[0.609375,0.203125] class=Point name=Unnamed dimension=2 values=[0.109375,0.703125] class=Point name=Unnamed dimension=2 values=[0.078125,0.234375] class=Point name=Unnamed dimension=2 values=[0.578125,0.734375] class=Point name=Unnamed dimension=2 values=[0.828125,0.484375] class=Point name=Unnamed dimension=2 values=[0.328125,0.984375] class=Point name=Unnamed dimension=2 values=[0.453125,0.359375] class=Point name=Unnamed dimension=2 values=[0.953125,0.859375] class=Point name=Unnamed dimension=2 values=[0.703125,0.109375] class=Point name=Unnamed dimension=2 values=[0.203125,0.609375] class=Point name=Unnamed dimension=2 values=[0.140625,0.421875] class=Point name=Unnamed dimension=2 values=[0.640625,0.921875] class=Point name=Unnamed dimension=2 values=[0.890625,0.171875] class=Point name=Unnamed dimension=2 values=[0.390625,0.671875] class=Point name=Unnamed dimension=2 values=[0.265625,0.046875] class=Point name=Unnamed dimension=2 values=[0.765625,0.546875] class=Point name=Unnamed dimension=2 values=[0.515625,0.296875] class=Point name=Unnamed dimension=2 values=[0.015625,0.796875] class=Point name=Unnamed dimension=2 values=[0.0234375,0.398438] class=Point name=Unnamed dimension=2 values=[0.523438,0.898438] class=Point name=Unnamed dimension=2 values=[0.773438,0.148438] class=Point name=Unnamed dimension=2 values=[0.273438,0.648438] class=Point name=Unnamed dimension=2 values=[0.398438,0.0234375] class=Point name=Unnamed dimension=2 values=[0.898438,0.523438] class=Point name=Unnamed dimension=2 values=[0.648438,0.273438] class=Point name=Unnamed dimension=2 values=[0.148438,0.773438] class=Point name=Unnamed dimension=2 values=[0.210938,0.210938] class=Point name=Unnamed dimension=2 values=[0.710938,0.710938] class=Point name=Unnamed dimension=2 values=[0.960938,0.460938] class=Point name=Unnamed dimension=2 values=[0.460938,0.960938] class=Point name=Unnamed dimension=2 values=[0.335938,0.335938] class=Point name=Unnamed dimension=2 values=[0.835938,0.835938] class=Point name=Unnamed dimension=2 values=[0.585938,0.0859375] class=Point name=Unnamed dimension=2 values=[0.0859375,0.585938] class=Point name=Unnamed dimension=2 values=[0.117188,0.117188] class=Point name=Unnamed dimension=2 values=[0.617188,0.617188] class=Point name=Unnamed dimension=2 values=[0.867188,0.367188] class=Point name=Unnamed dimension=2 values=[0.367188,0.867188] class=Point name=Unnamed dimension=2 values=[0.492188,0.492188] class=Point name=Unnamed dimension=2 values=[0.992188,0.992188] class=Point name=Unnamed dimension=2 values=[0.742188,0.242188] class=Point name=Unnamed dimension=2 values=[0.242188,0.742188] class=Point name=Unnamed dimension=2 values=[0.179688,0.304688] class=Point name=Unnamed dimension=2 values=[0.679688,0.804688] class=Point name=Unnamed dimension=2 values=[0.929688,0.0546875] class=Point name=Unnamed dimension=2 values=[0.429688,0.554688] class=Point name=Unnamed dimension=2 values=[0.304688,0.179688] class=Point name=Unnamed dimension=2 values=[0.804688,0.679688] class=Point name=Unnamed dimension=2 values=[0.554688,0.429688] class=Point name=Unnamed dimension=2 values=[0.0546875,0.929688] class=Point name=Unnamed dimension=2 values=[0.0390625,0.132812] class=Point name=Unnamed dimension=2 values=[0.539062,0.632812] class=Point name=Unnamed dimension=2 values=[0.789062,0.382812] class=Point name=Unnamed dimension=2 values=[0.289062,0.882812] class=Point name=Unnamed dimension=2 values=[0.414062,0.257812] class=Point name=Unnamed dimension=2 values=[0.914062,0.757812] class=Point name=Unnamed dimension=2 values=[0.664062,0.0078125] class=Point name=Unnamed dimension=2 values=[0.164062,0.507812] class=Point name=Unnamed dimension=2 values=[0.226562,0.445312] class=Point name=Unnamed dimension=2 values=[0.726562,0.945312] class=Point name=Unnamed dimension=2 values=[0.976562,0.195312] class=Point name=Unnamed dimension=2 values=[0.476562,0.695312] class=Point name=Unnamed dimension=2 values=[0.351562,0.0703125] class=Point name=Unnamed dimension=2 values=[0.851562,0.570312] class=Point name=Unnamed dimension=2 values=[0.601562,0.320312] class=Point name=Unnamed dimension=2 values=[0.101562,0.820312] class=Point name=Unnamed dimension=2 values=[0.0703125,0.351562] class=Point name=Unnamed dimension=2 values=[0.570312,0.851562] class=Point name=Unnamed dimension=2 values=[0.820312,0.101562] class=Point name=Unnamed dimension=2 values=[0.320312,0.601562] class=Point name=Unnamed dimension=2 values=[0.445312,0.226562] class=Point name=Unnamed dimension=2 values=[0.945312,0.726562] class=Point name=Unnamed dimension=2 values=[0.695312,0.476562] class=Point name=Unnamed dimension=2 values=[0.195312,0.976562] class=Point name=Unnamed dimension=2 values=[0.132812,0.0390625] class=Point name=Unnamed dimension=2 values=[0.632812,0.539062] class=Point name=Unnamed dimension=2 values=[0.882812,0.289062] class=Point name=Unnamed dimension=2 values=[0.382812,0.789062] class=Point name=Unnamed dimension=2 values=[0.257812,0.414062] class=Point name=Unnamed dimension=2 values=[0.757812,0.914062] class=Point name=Unnamed dimension=2 values=[0.507812,0.164062] class=Point name=Unnamed dimension=2 values=[0.0078125,0.664062] class=Point name=Unnamed dimension=2 values=[0.0117188,0.332031] class=Point name=Unnamed dimension=2 values=[0.511719,0.832031] class=Point name=Unnamed dimension=2 values=[0.761719,0.0820312] class=Point name=Unnamed dimension=2 values=[0.261719,0.582031] class=Point name=Unnamed dimension=2 values=[0.386719,0.207031] class=Point name=Unnamed dimension=2 values=[0.886719,0.707031] class=Point name=Unnamed dimension=2 values=[0.636719,0.457031] class=Point name=Unnamed dimension=2 values=[0.136719,0.957031] class=Point name=Unnamed dimension=2 values=[0.199219,0.0195312] class=Point name=Unnamed dimension=2 values=[0.699219,0.519531] class=Point name=Unnamed dimension=2 values=[0.949219,0.269531] class=Point name=Unnamed dimension=2 values=[0.449219,0.769531] class=Point name=Unnamed dimension=2 values=[0.324219,0.394531] class=Point name=Unnamed dimension=2 values=[0.824219,0.894531] class=Point name=Unnamed dimension=2 values=[0.574219,0.144531] class=Point name=Unnamed dimension=2 values=[0.0742188,0.644531] class=Point name=Unnamed dimension=2 values=[0.105469,0.175781] class=Point name=Unnamed dimension=2 values=[0.605469,0.675781] class=Point name=Unnamed dimension=2 values=[0.855469,0.425781] class=Point name=Unnamed dimension=2 values=[0.355469,0.925781] class=Point name=Unnamed dimension=2 values=[0.480469,0.300781] class=Point name=Unnamed dimension=2 values=[0.980469,0.800781] class=Point name=Unnamed dimension=2 values=[0.730469,0.0507812] class=Point name=Unnamed dimension=2 values=[0.230469,0.550781] class=Point name=Unnamed dimension=2 values=[0.167969,0.488281] class=Point name=Unnamed dimension=2 values=[0.667969,0.988281] class=Point name=Unnamed dimension=2 values=[0.917969,0.238281] class=Point name=Unnamed dimension=2 values=[0.417969,0.738281] class=Point name=Unnamed dimension=2 values=[0.292969,0.113281] class=Point name=Unnamed dimension=2 values=[0.792969,0.613281] class=Point name=Unnamed dimension=2 values=[0.542969,0.363281] class=Point name=Unnamed dimension=2 values=[0.0429688,0.863281] class=Point name=Unnamed dimension=2 values=[0.0585938,0.0664062] class=Point name=Unnamed dimension=2 values=[0.558594,0.566406] class=Point name=Unnamed dimension=2 values=[0.808594,0.316406] class=Point name=Unnamed dimension=2 values=[0.308594,0.816406] class=Point name=Unnamed dimension=2 values=[0.433594,0.441406] class=Point name=Unnamed dimension=2 values=[0.933594,0.941406] class=Point name=Unnamed dimension=2 values=[0.683594,0.191406] class=Point name=Unnamed dimension=2 values=[0.183594,0.691406] class=Point name=Unnamed dimension=2 values=[0.246094,0.253906] class=Point name=Unnamed dimension=2 values=[0.746094,0.753906] class=Point name=Unnamed dimension=2 values=[0.996094,0.00390625] class=Point name=Unnamed dimension=2 values=[0.496094,0.503906] class=Point name=Unnamed dimension=2 values=[0.371094,0.128906] class=Point name=Unnamed dimension=2 values=[0.871094,0.628906] class=Point name=Unnamed dimension=2 values=[0.621094,0.378906] class=Point name=Unnamed dimension=2 values=[0.121094,0.878906] class=Point name=Unnamed dimension=2 values=[0.0898438,0.410156] class=Point name=Unnamed dimension=2 values=[0.589844,0.910156] class=Point name=Unnamed dimension=2 values=[0.839844,0.160156] class=Point name=Unnamed dimension=2 values=[0.339844,0.660156] class=Point name=Unnamed dimension=2 values=[0.464844,0.0351562] class=Point name=Unnamed dimension=2 values=[0.964844,0.535156] class=Point name=Unnamed dimension=2 values=[0.714844,0.285156] class=Point name=Unnamed dimension=2 values=[0.214844,0.785156] class=Point name=Unnamed dimension=2 values=[0.152344,0.222656] class=Point name=Unnamed dimension=2 values=[0.652344,0.722656] class=Point name=Unnamed dimension=2 values=[0.902344,0.472656] class=Point name=Unnamed dimension=2 values=[0.402344,0.972656] class=Point name=Unnamed dimension=2 values=[0.277344,0.347656] class=Point name=Unnamed dimension=2 values=[0.777344,0.847656] class=Point name=Unnamed dimension=2 values=[0.527344,0.0976562] class=Point name=Unnamed dimension=2 values=[0.0273438,0.597656] class=Point name=Unnamed dimension=2 values=[0.0195312,0.199219] class=Point name=Unnamed dimension=2 values=[0.519531,0.699219] class=Point name=Unnamed dimension=2 values=[0.769531,0.449219] class=Point name=Unnamed dimension=2 values=[0.269531,0.949219] class=Point name=Unnamed dimension=2 values=[0.394531,0.324219] class=Point name=Unnamed dimension=2 values=[0.894531,0.824219] class=Point name=Unnamed dimension=2 values=[0.644531,0.0742188] class=Point name=Unnamed dimension=2 values=[0.144531,0.574219] class=Point name=Unnamed dimension=2 values=[0.207031,0.386719] class=Point name=Unnamed dimension=2 values=[0.707031,0.886719] class=Point name=Unnamed dimension=2 values=[0.957031,0.136719] class=Point name=Unnamed dimension=2 values=[0.457031,0.636719] class=Point name=Unnamed dimension=2 values=[0.332031,0.0117188] class=Point name=Unnamed dimension=2 values=[0.832031,0.511719] class=Point name=Unnamed dimension=2 values=[0.582031,0.261719] class=Point name=Unnamed dimension=2 values=[0.0820312,0.761719] class=Point name=Unnamed dimension=2 values=[0.113281,0.292969] class=Point name=Unnamed dimension=2 values=[0.613281,0.792969] class=Point name=Unnamed dimension=2 values=[0.863281,0.0429688] class=Point name=Unnamed dimension=2 values=[0.363281,0.542969] class=Point name=Unnamed dimension=2 values=[0.488281,0.167969] class=Point name=Unnamed dimension=2 values=[0.988281,0.667969] class=Point name=Unnamed dimension=2 values=[0.738281,0.417969] class=Point name=Unnamed dimension=2 values=[0.238281,0.917969] class=Point name=Unnamed dimension=2 values=[0.175781,0.105469] class=Point name=Unnamed dimension=2 values=[0.675781,0.605469] class=Point name=Unnamed dimension=2 values=[0.925781,0.355469] class=Point name=Unnamed dimension=2 values=[0.425781,0.855469] class=Point name=Unnamed dimension=2 values=[0.300781,0.480469] class=Point name=Unnamed dimension=2 values=[0.800781,0.980469] class=Point name=Unnamed dimension=2 values=[0.550781,0.230469] class=Point name=Unnamed dimension=2 values=[0.0507812,0.730469] class=Point name=Unnamed dimension=2 values=[0.0351562,0.464844] class=Point name=Unnamed dimension=2 values=[0.535156,0.964844] class=Point name=Unnamed dimension=2 values=[0.785156,0.214844] class=Point name=Unnamed dimension=2 values=[0.285156,0.714844] class=Point name=Unnamed dimension=2 values=[0.410156,0.0898438] class=Point name=Unnamed dimension=2 values=[0.910156,0.589844] class=Point name=Unnamed dimension=2 values=[0.660156,0.339844] class=Point name=Unnamed dimension=2 values=[0.160156,0.839844] class=Point name=Unnamed dimension=2 values=[0.222656,0.152344] class=Point name=Unnamed dimension=2 values=[0.722656,0.652344] class=Point name=Unnamed dimension=2 values=[0.972656,0.402344] class=Point name=Unnamed dimension=2 values=[0.472656,0.902344] class=Point name=Unnamed dimension=2 values=[0.347656,0.277344] class=Point name=Unnamed dimension=2 values=[0.847656,0.777344] class=Point name=Unnamed dimension=2 values=[0.597656,0.0273438] class=Point name=Unnamed dimension=2 values=[0.0976562,0.527344] class=Point name=Unnamed dimension=2 values=[0.0664062,0.0585938] class=Point name=Unnamed dimension=2 values=[0.566406,0.558594] class=Point name=Unnamed dimension=2 values=[0.816406,0.308594] class=Point name=Unnamed dimension=2 values=[0.316406,0.808594] class=Point name=Unnamed dimension=2 values=[0.441406,0.433594] class=Point name=Unnamed dimension=2 values=[0.941406,0.933594] class=Point name=Unnamed dimension=2 values=[0.691406,0.183594] class=Point name=Unnamed dimension=2 values=[0.191406,0.683594] class=Point name=Unnamed dimension=2 values=[0.128906,0.371094] class=Point name=Unnamed dimension=2 values=[0.628906,0.871094] class=Point name=Unnamed dimension=2 values=[0.878906,0.121094] class=Point name=Unnamed dimension=2 values=[0.378906,0.621094] class=Point name=Unnamed dimension=2 values=[0.253906,0.246094] class=Point name=Unnamed dimension=2 values=[0.753906,0.746094] class=Point name=Unnamed dimension=2 values=[0.503906,0.496094] class=Point name=Unnamed dimension=2 values=[0.00390625,0.996094] class=Point name=Unnamed dimension=2 values=[0.00585938,0.498047] class=Point name=Unnamed dimension=2 values=[0.505859,0.998047] class=Point name=Unnamed dimension=2 values=[0.755859,0.248047] class=Point name=Unnamed dimension=2 values=[0.255859,0.748047] class=Point name=Unnamed dimension=2 values=[0.380859,0.123047] class=Point name=Unnamed dimension=2 values=[0.880859,0.623047] class=Point name=Unnamed dimension=2 values=[0.630859,0.373047] class=Point name=Unnamed dimension=2 values=[0.130859,0.873047] class=Point name=Unnamed dimension=2 values=[0.193359,0.185547] class=Point name=Unnamed dimension=2 values=[0.693359,0.685547] class=Point name=Unnamed dimension=2 values=[0.943359,0.435547] class=Point name=Unnamed dimension=2 values=[0.443359,0.935547] class=Point name=Unnamed dimension=2 values=[0.318359,0.310547] class=Point name=Unnamed dimension=2 values=[0.818359,0.810547] class=Point name=Unnamed dimension=2 values=[0.568359,0.0605469] class=Point name=Unnamed dimension=2 values=[0.0683594,0.560547] class=Point name=Unnamed dimension=2 values=[0.0996094,0.0292969] class=Point name=Unnamed dimension=2 values=[0.599609,0.529297] class=Point name=Unnamed dimension=2 values=[0.849609,0.279297] class=Point name=Unnamed dimension=2 values=[0.349609,0.779297] class=Point name=Unnamed dimension=2 values=[0.474609,0.404297] class=Point name=Unnamed dimension=2 values=[0.974609,0.904297] class=Point name=Unnamed dimension=2 values=[0.724609,0.154297] class=Point name=Unnamed dimension=2 values=[0.224609,0.654297] class=Point name=Unnamed dimension=2 values=[0.162109,0.341797] class=Point name=Unnamed dimension=2 values=[0.662109,0.841797] class=Point name=Unnamed dimension=2 values=[0.912109,0.0917969] class=Point name=Unnamed dimension=2 values=[0.412109,0.591797] class=Point name=Unnamed dimension=2 values=[0.287109,0.216797] class=Point name=Unnamed dimension=2 values=[0.787109,0.716797] class=Point name=Unnamed dimension=2 values=[0.537109,0.466797] class=Point name=Unnamed dimension=2 values=[0.0371094,0.966797] class=Point name=Unnamed dimension=2 values=[0.0527344,0.232422] class=Point name=Unnamed dimension=2 values=[0.552734,0.732422] class=Point name=Unnamed dimension=2 values=[0.802734,0.482422] class=Point name=Unnamed dimension=2 values=[0.302734,0.982422] class=Point name=Unnamed dimension=2 values=[0.427734,0.357422] class=Point name=Unnamed dimension=2 values=[0.927734,0.857422] class=Point name=Unnamed dimension=2 values=[0.677734,0.107422] class=Point name=Unnamed dimension=2 values=[0.177734,0.607422] class=Point name=Unnamed dimension=2 values=[0.240234,0.419922] class=Point name=Unnamed dimension=2 values=[0.740234,0.919922] class=Point name=Unnamed dimension=2 values=[0.990234,0.169922] class=Point name=Unnamed dimension=2 values=[0.490234,0.669922] class=Point name=Unnamed dimension=2 values=[0.365234,0.0449219] class=Point name=Unnamed dimension=2 values=[0.865234,0.544922] class=Point name=Unnamed dimension=2 values=[0.615234,0.294922] class=Point name=Unnamed dimension=2 values=[0.115234,0.794922] class=Point name=Unnamed dimension=2 values=[0.0839844,0.263672] class=Point name=Unnamed dimension=2 values=[0.583984,0.763672] class=Point name=Unnamed dimension=2 values=[0.833984,0.0136719] class=Point name=Unnamed dimension=2 values=[0.333984,0.513672] class=Point name=Unnamed dimension=2 values=[0.458984,0.138672] class=Point name=Unnamed dimension=2 values=[0.958984,0.638672] class=Point name=Unnamed dimension=2 values=[0.708984,0.388672] class=Point name=Unnamed dimension=2 values=[0.208984,0.888672] class=Point name=Unnamed dimension=2 values=[0.146484,0.0761719] class=Point name=Unnamed dimension=2 values=[0.646484,0.576172] class=Point name=Unnamed dimension=2 values=[0.896484,0.326172] class=Point name=Unnamed dimension=2 values=[0.396484,0.826172] class=Point name=Unnamed dimension=2 values=[0.271484,0.451172] class=Point name=Unnamed dimension=2 values=[0.771484,0.951172] class=Point name=Unnamed dimension=2 values=[0.521484,0.201172] class=Point name=Unnamed dimension=2 values=[0.0214844,0.701172] class=Point name=Unnamed dimension=2 values=[0.0292969,0.0996094] class=Point name=Unnamed dimension=2 values=[0.529297,0.599609] class=Point name=Unnamed dimension=2 values=[0.779297,0.349609] class=Point name=Unnamed dimension=2 values=[0.279297,0.849609] class=Point name=Unnamed dimension=2 values=[0.404297,0.474609] class=Point name=Unnamed dimension=2 values=[0.904297,0.974609] class=Point name=Unnamed dimension=2 values=[0.654297,0.224609] class=Point name=Unnamed dimension=2 values=[0.154297,0.724609] class=Point name=Unnamed dimension=2 values=[0.216797,0.287109] class=Point name=Unnamed dimension=2 values=[0.716797,0.787109] class=Point name=Unnamed dimension=2 values=[0.966797,0.0371094] class=Point name=Unnamed dimension=2 values=[0.466797,0.537109] class=Point name=Unnamed dimension=2 values=[0.341797,0.162109] class=Point name=Unnamed dimension=2 values=[0.841797,0.662109] class=Point name=Unnamed dimension=2 values=[0.591797,0.412109] class=Point name=Unnamed dimension=2 values=[0.0917969,0.912109] class=Point name=Unnamed dimension=2 values=[0.123047,0.380859] class=Point name=Unnamed dimension=2 values=[0.623047,0.880859] class=Point name=Unnamed dimension=2 values=[0.873047,0.130859] class=Point name=Unnamed dimension=2 values=[0.373047,0.630859] class=Point name=Unnamed dimension=2 values=[0.498047,0.00585938] class=Point name=Unnamed dimension=2 values=[0.998047,0.505859] class=Point name=Unnamed dimension=2 values=[0.748047,0.255859] class=Point name=Unnamed dimension=2 values=[0.248047,0.755859] class=Point name=Unnamed dimension=2 values=[0.185547,0.193359] class=Point name=Unnamed dimension=2 values=[0.685547,0.693359] class=Point name=Unnamed dimension=2 values=[0.935547,0.443359] class=Point name=Unnamed dimension=2 values=[0.435547,0.943359] class=Point name=Unnamed dimension=2 values=[0.310547,0.318359] class=Point name=Unnamed dimension=2 values=[0.810547,0.818359] class=Point name=Unnamed dimension=2 values=[0.560547,0.0683594] class=Point name=Unnamed dimension=2 values=[0.0605469,0.568359] class=Point name=Unnamed dimension=2 values=[0.0449219,0.365234] class=Point name=Unnamed dimension=2 values=[0.544922,0.865234] class=Point name=Unnamed dimension=2 values=[0.794922,0.115234] class=Point name=Unnamed dimension=2 values=[0.294922,0.615234] class=Point name=Unnamed dimension=2 values=[0.419922,0.240234] class=Point name=Unnamed dimension=2 values=[0.919922,0.740234] class=Point name=Unnamed dimension=2 values=[0.669922,0.490234] class=Point name=Unnamed dimension=2 values=[0.169922,0.990234] class=Point name=Unnamed dimension=2 values=[0.232422,0.0527344] class=Point name=Unnamed dimension=2 values=[0.732422,0.552734] class=Point name=Unnamed dimension=2 values=[0.982422,0.302734] class=Point name=Unnamed dimension=2 values=[0.482422,0.802734] class=Point name=Unnamed dimension=2 values=[0.357422,0.427734] class=Point name=Unnamed dimension=2 values=[0.857422,0.927734] class=Point name=Unnamed dimension=2 values=[0.607422,0.177734] class=Point name=Unnamed dimension=2 values=[0.107422,0.677734] class=Point name=Unnamed dimension=2 values=[0.0761719,0.146484] class=Point name=Unnamed dimension=2 values=[0.576172,0.646484] class=Point name=Unnamed dimension=2 values=[0.826172,0.396484] class=Point name=Unnamed dimension=2 values=[0.326172,0.896484] class=Point name=Unnamed dimension=2 values=[0.451172,0.271484] class=Point name=Unnamed dimension=2 values=[0.951172,0.771484] class=Point name=Unnamed dimension=2 values=[0.701172,0.0214844] class=Point name=Unnamed dimension=2 values=[0.201172,0.521484] class=Point name=Unnamed dimension=2 values=[0.138672,0.458984] class=Point name=Unnamed dimension=2 values=[0.638672,0.958984] class=Point name=Unnamed dimension=2 values=[0.888672,0.208984] class=Point name=Unnamed dimension=2 values=[0.388672,0.708984] class=Point name=Unnamed dimension=2 values=[0.263672,0.0839844] class=Point name=Unnamed dimension=2 values=[0.763672,0.583984] class=Point name=Unnamed dimension=2 values=[0.513672,0.333984] class=Point name=Unnamed dimension=2 values=[0.0136719,0.833984] class=Point name=Unnamed dimension=2 values=[0.00976562,0.166016] class=Point name=Unnamed dimension=2 values=[0.509766,0.666016] class=Point name=Unnamed dimension=2 values=[0.759766,0.416016] class=Point name=Unnamed dimension=2 values=[0.259766,0.916016] class=Point name=Unnamed dimension=2 values=[0.384766,0.291016] class=Point name=Unnamed dimension=2 values=[0.884766,0.791016] class=Point name=Unnamed dimension=2 values=[0.634766,0.0410156] class=Point name=Unnamed dimension=2 values=[0.134766,0.541016] class=Point name=Unnamed dimension=2 values=[0.197266,0.478516] class=Point name=Unnamed dimension=2 values=[0.697266,0.978516] class=Point name=Unnamed dimension=2 values=[0.947266,0.228516] class=Point name=Unnamed dimension=2 values=[0.447266,0.728516] class=Point name=Unnamed dimension=2 values=[0.322266,0.103516] class=Point name=Unnamed dimension=2 values=[0.822266,0.603516] class=Point name=Unnamed dimension=2 values=[0.572266,0.353516] class=Point name=Unnamed dimension=2 values=[0.0722656,0.853516] class=Point name=Unnamed dimension=2 values=[0.103516,0.322266] class=Point name=Unnamed dimension=2 values=[0.603516,0.822266] class=Point name=Unnamed dimension=2 values=[0.853516,0.0722656] class=Point name=Unnamed dimension=2 values=[0.353516,0.572266] class=Point name=Unnamed dimension=2 values=[0.478516,0.197266] class=Point name=Unnamed dimension=2 values=[0.978516,0.697266] class=Point name=Unnamed dimension=2 values=[0.728516,0.447266] class=Point name=Unnamed dimension=2 values=[0.228516,0.947266] class=Point name=Unnamed dimension=2 values=[0.166016,0.00976562] class=Point name=Unnamed dimension=2 values=[0.666016,0.509766] class=Point name=Unnamed dimension=2 values=[0.916016,0.259766] class=Point name=Unnamed dimension=2 values=[0.416016,0.759766] class=Point name=Unnamed dimension=2 values=[0.291016,0.384766] class=Point name=Unnamed dimension=2 values=[0.791016,0.884766] class=Point name=Unnamed dimension=2 values=[0.541016,0.134766] class=Point name=Unnamed dimension=2 values=[0.0410156,0.634766] class=Point name=Unnamed dimension=2 values=[0.0566406,0.431641] class=Point name=Unnamed dimension=2 values=[0.556641,0.931641] class=Point name=Unnamed dimension=2 values=[0.806641,0.181641] class=Point name=Unnamed dimension=2 values=[0.306641,0.681641] class=Point name=Unnamed dimension=2 values=[0.431641,0.0566406] class=Point name=Unnamed dimension=2 values=[0.931641,0.556641] class=Point name=Unnamed dimension=2 values=[0.681641,0.306641] class=Point name=Unnamed dimension=2 values=[0.181641,0.806641] class=Point name=Unnamed dimension=2 values=[0.244141,0.244141] class=Point name=Unnamed dimension=2 values=[0.744141,0.744141] class=Point name=Unnamed dimension=2 values=[0.994141,0.494141] class=Point name=Unnamed dimension=2 values=[0.494141,0.994141] class=Point name=Unnamed dimension=2 values=[0.369141,0.369141] class=Point name=Unnamed dimension=2 values=[0.869141,0.869141] class=Point name=Unnamed dimension=2 values=[0.619141,0.119141] class=Point name=Unnamed dimension=2 values=[0.119141,0.619141] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0878906] class=Point name=Unnamed dimension=2 values=[0.587891,0.587891] class=Point name=Unnamed dimension=2 values=[0.837891,0.337891] class=Point name=Unnamed dimension=2 values=[0.337891,0.837891] class=Point name=Unnamed dimension=2 values=[0.462891,0.462891] class=Point name=Unnamed dimension=2 values=[0.962891,0.962891] class=Point name=Unnamed dimension=2 values=[0.712891,0.212891] class=Point name=Unnamed dimension=2 values=[0.212891,0.712891] class=Point name=Unnamed dimension=2 values=[0.150391,0.275391] class=Point name=Unnamed dimension=2 values=[0.650391,0.775391] class=Point name=Unnamed dimension=2 values=[0.900391,0.0253906] class=Point name=Unnamed dimension=2 values=[0.400391,0.525391] class=Point name=Unnamed dimension=2 values=[0.275391,0.150391] class=Point name=Unnamed dimension=2 values=[0.775391,0.650391] class=Point name=Unnamed dimension=2 values=[0.525391,0.400391] class=Point name=Unnamed dimension=2 values=[0.0253906,0.900391] class=Point name=Unnamed dimension=2 values=[0.0175781,0.298828] class=Point name=Unnamed dimension=2 values=[0.517578,0.798828] class=Point name=Unnamed dimension=2 values=[0.767578,0.0488281] class=Point name=Unnamed dimension=2 values=[0.267578,0.548828] class=Point name=Unnamed dimension=2 values=[0.392578,0.173828] class=Point name=Unnamed dimension=2 values=[0.892578,0.673828] class=Point name=Unnamed dimension=2 values=[0.642578,0.423828] class=Point name=Unnamed dimension=2 values=[0.142578,0.923828] class=Point name=Unnamed dimension=2 values=[0.205078,0.111328] class=Point name=Unnamed dimension=2 values=[0.705078,0.611328] class=Point name=Unnamed dimension=2 values=[0.955078,0.361328] class=Point name=Unnamed dimension=2 values=[0.455078,0.861328] class=Point name=Unnamed dimension=2 values=[0.330078,0.486328] class=Point name=Unnamed dimension=2 values=[0.830078,0.986328] class=Point name=Unnamed dimension=2 values=[0.580078,0.236328] class=Point name=Unnamed dimension=2 values=[0.0800781,0.736328] class=Point name=Unnamed dimension=2 values=[0.111328,0.205078] class=Point name=Unnamed dimension=2 values=[0.611328,0.705078] class=Point name=Unnamed dimension=2 values=[0.861328,0.455078] class=Point name=Unnamed dimension=2 values=[0.361328,0.955078] class=Point name=Unnamed dimension=2 values=[0.486328,0.330078] class=Point name=Unnamed dimension=2 values=[0.986328,0.830078] class=Point name=Unnamed dimension=2 values=[0.736328,0.0800781] class=Point name=Unnamed dimension=2 values=[0.236328,0.580078] class=Point name=Unnamed dimension=2 values=[0.173828,0.392578] class=Point name=Unnamed dimension=2 values=[0.673828,0.892578] class=Point name=Unnamed dimension=2 values=[0.923828,0.142578] class=Point name=Unnamed dimension=2 values=[0.423828,0.642578] class=Point name=Unnamed dimension=2 values=[0.298828,0.0175781] class=Point name=Unnamed dimension=2 values=[0.798828,0.517578] class=Point name=Unnamed dimension=2 values=[0.548828,0.267578] class=Point name=Unnamed dimension=2 values=[0.0488281,0.767578] class=Point name=Unnamed dimension=2 values=[0.0332031,0.0332031] class=Point name=Unnamed dimension=2 values=[0.533203,0.533203] class=Point name=Unnamed dimension=2 values=[0.783203,0.283203] class=Point name=Unnamed dimension=2 values=[0.283203,0.783203] class=Point name=Unnamed dimension=2 values=[0.408203,0.408203] class=Point name=Unnamed dimension=2 values=[0.908203,0.908203] class=Point name=Unnamed dimension=2 values=[0.658203,0.158203] class=Point name=Unnamed dimension=2 values=[0.158203,0.658203] class=Point name=Unnamed dimension=2 values=[0.220703,0.345703] class=Point name=Unnamed dimension=2 values=[0.720703,0.845703] class=Point name=Unnamed dimension=2 values=[0.970703,0.0957031] class=Point name=Unnamed dimension=2 values=[0.470703,0.595703] class=Point name=Unnamed dimension=2 values=[0.345703,0.220703] class=Point name=Unnamed dimension=2 values=[0.845703,0.720703] class=Point name=Unnamed dimension=2 values=[0.595703,0.470703] class=Point name=Unnamed dimension=2 values=[0.0957031,0.970703] class=Point name=Unnamed dimension=2 values=[0.0644531,0.439453] class=Point name=Unnamed dimension=2 values=[0.564453,0.939453] class=Point name=Unnamed dimension=2 values=[0.814453,0.189453] class=Point name=Unnamed dimension=2 values=[0.314453,0.689453] class=Point name=Unnamed dimension=2 values=[0.439453,0.0644531] class=Point name=Unnamed dimension=2 values=[0.939453,0.564453] class=Point name=Unnamed dimension=2 values=[0.689453,0.314453] class=Point name=Unnamed dimension=2 values=[0.189453,0.814453] class=Point name=Unnamed dimension=2 values=[0.126953,0.126953] class=Point name=Unnamed dimension=2 values=[0.626953,0.626953] class=Point name=Unnamed dimension=2 values=[0.876953,0.376953] class=Point name=Unnamed dimension=2 values=[0.376953,0.876953] class=Point name=Unnamed dimension=2 values=[0.251953,0.251953] class=Point name=Unnamed dimension=2 values=[0.751953,0.751953] class=Point name=Unnamed dimension=2 values=[0.501953,0.00195312] class=Point name=Unnamed dimension=2 values=[0.00195312,0.501953] class=Point name=Unnamed dimension=2 values=[0.00292969,0.250977] class=Point name=Unnamed dimension=2 values=[0.50293,0.750977] class=Point name=Unnamed dimension=2 values=[0.75293,0.000976562] class=Point name=Unnamed dimension=2 values=[0.25293,0.500977] class=Point name=Unnamed dimension=2 values=[0.37793,0.125977] class=Point name=Unnamed dimension=2 values=[0.87793,0.625977] class=Point name=Unnamed dimension=2 values=[0.62793,0.375977] class=Point name=Unnamed dimension=2 values=[0.12793,0.875977] class=Point name=Unnamed dimension=2 values=[0.19043,0.0634766] class=Point name=Unnamed dimension=2 values=[0.69043,0.563477] class=Point name=Unnamed dimension=2 values=[0.94043,0.313477] class=Point name=Unnamed dimension=2 values=[0.44043,0.813477] class=Point name=Unnamed dimension=2 values=[0.31543,0.438477] class=Point name=Unnamed dimension=2 values=[0.81543,0.938477] class=Point name=Unnamed dimension=2 values=[0.56543,0.188477] class=Point name=Unnamed dimension=2 values=[0.0654297,0.688477] class=Point name=Unnamed dimension=2 values=[0.0966797,0.219727] class=Point name=Unnamed dimension=2 values=[0.59668,0.719727] class=Point name=Unnamed dimension=2 values=[0.84668,0.469727] class=Point name=Unnamed dimension=2 values=[0.34668,0.969727] class=Point name=Unnamed dimension=2 values=[0.47168,0.344727] class=Point name=Unnamed dimension=2 values=[0.97168,0.844727] class=Point name=Unnamed dimension=2 values=[0.72168,0.0947266] class=Point name=Unnamed dimension=2 values=[0.22168,0.594727] class=Point name=Unnamed dimension=2 values=[0.15918,0.407227] class=Point name=Unnamed dimension=2 values=[0.65918,0.907227] class=Point name=Unnamed dimension=2 values=[0.90918,0.157227] class=Point name=Unnamed dimension=2 values=[0.40918,0.657227] class=Point name=Unnamed dimension=2 values=[0.28418,0.0322266] class=Point name=Unnamed dimension=2 values=[0.78418,0.532227] class=Point name=Unnamed dimension=2 values=[0.53418,0.282227] class=Point name=Unnamed dimension=2 values=[0.0341797,0.782227] class=Point name=Unnamed dimension=2 values=[0.0498047,0.0166016] class=Point name=Unnamed dimension=2 values=[0.549805,0.516602] class=Point name=Unnamed dimension=2 values=[0.799805,0.266602] class=Point name=Unnamed dimension=2 values=[0.299805,0.766602] class=Point name=Unnamed dimension=2 values=[0.424805,0.391602] class=Point name=Unnamed dimension=2 values=[0.924805,0.891602] class=Point name=Unnamed dimension=2 values=[0.674805,0.141602] class=Point name=Unnamed dimension=2 values=[0.174805,0.641602] class=Point name=Unnamed dimension=2 values=[0.237305,0.329102] class=Point name=Unnamed dimension=2 values=[0.737305,0.829102] class=Point name=Unnamed dimension=2 values=[0.987305,0.0791016] class=Point name=Unnamed dimension=2 values=[0.487305,0.579102] class=Point name=Unnamed dimension=2 values=[0.362305,0.204102] class=Point name=Unnamed dimension=2 values=[0.862305,0.704102] class=Point name=Unnamed dimension=2 values=[0.612305,0.454102] class=Point name=Unnamed dimension=2 values=[0.112305,0.954102] class=Point name=Unnamed dimension=2 values=[0.0810547,0.485352] class=Point name=Unnamed dimension=2 values=[0.581055,0.985352] class=Point name=Unnamed dimension=2 values=[0.831055,0.235352] class=Point name=Unnamed dimension=2 values=[0.331055,0.735352] class=Point name=Unnamed dimension=2 values=[0.456055,0.110352] class=Point name=Unnamed dimension=2 values=[0.956055,0.610352] class=Point name=Unnamed dimension=2 values=[0.706055,0.360352] class=Point name=Unnamed dimension=2 values=[0.206055,0.860352] class=Point name=Unnamed dimension=2 values=[0.143555,0.172852] class=Point name=Unnamed dimension=2 values=[0.643555,0.672852] class=Point name=Unnamed dimension=2 values=[0.893555,0.422852] class=Point name=Unnamed dimension=2 values=[0.393555,0.922852] class=Point name=Unnamed dimension=2 values=[0.268555,0.297852] class=Point name=Unnamed dimension=2 values=[0.768555,0.797852] class=Point name=Unnamed dimension=2 values=[0.518555,0.0478516] class=Point name=Unnamed dimension=2 values=[0.0185547,0.547852] class=Point name=Unnamed dimension=2 values=[0.0263672,0.149414] class=Point name=Unnamed dimension=2 values=[0.526367,0.649414] class=Point name=Unnamed dimension=2 values=[0.776367,0.399414] class=Point name=Unnamed dimension=2 values=[0.276367,0.899414] class=Point name=Unnamed dimension=2 values=[0.401367,0.274414] class=Point name=Unnamed dimension=2 values=[0.901367,0.774414] class=Point name=Unnamed dimension=2 values=[0.651367,0.0244141] class=Point name=Unnamed dimension=2 values=[0.151367,0.524414] class=Point name=Unnamed dimension=2 values=[0.213867,0.461914] class=Point name=Unnamed dimension=2 values=[0.713867,0.961914] class=Point name=Unnamed dimension=2 values=[0.963867,0.211914] class=Point name=Unnamed dimension=2 values=[0.463867,0.711914] class=Point name=Unnamed dimension=2 values=[0.338867,0.0869141] class=Point name=Unnamed dimension=2 values=[0.838867,0.586914] class=Point name=Unnamed dimension=2 values=[0.588867,0.336914] class=Point name=Unnamed dimension=2 values=[0.0888672,0.836914] class=Point name=Unnamed dimension=2 values=[0.120117,0.368164] class=Point name=Unnamed dimension=2 values=[0.620117,0.868164] class=Point name=Unnamed dimension=2 values=[0.870117,0.118164] class=Point name=Unnamed dimension=2 values=[0.370117,0.618164] class=Point name=Unnamed dimension=2 values=[0.495117,0.243164] class=Point name=Unnamed dimension=2 values=[0.995117,0.743164] class=Point name=Unnamed dimension=2 values=[0.745117,0.493164] class=Point name=Unnamed dimension=2 values=[0.245117,0.993164] class=Point name=Unnamed dimension=2 values=[0.182617,0.0556641] class=Point name=Unnamed dimension=2 values=[0.682617,0.555664] class=Point name=Unnamed dimension=2 values=[0.932617,0.305664] class=Point name=Unnamed dimension=2 values=[0.432617,0.805664] class=Point name=Unnamed dimension=2 values=[0.307617,0.430664] class=Point name=Unnamed dimension=2 values=[0.807617,0.930664] class=Point name=Unnamed dimension=2 values=[0.557617,0.180664] class=Point name=Unnamed dimension=2 values=[0.0576172,0.680664] class=Point name=Unnamed dimension=2 values=[0.0419922,0.383789] class=Point name=Unnamed dimension=2 values=[0.541992,0.883789] class=Point name=Unnamed dimension=2 values=[0.791992,0.133789] class=Point name=Unnamed dimension=2 values=[0.291992,0.633789] class=Point name=Unnamed dimension=2 values=[0.416992,0.00878906] class=Point name=Unnamed dimension=2 values=[0.916992,0.508789] class=Point name=Unnamed dimension=2 values=[0.666992,0.258789] class=Point name=Unnamed dimension=2 values=[0.166992,0.758789] class=Point name=Unnamed dimension=2 values=[0.229492,0.196289] class=Point name=Unnamed dimension=2 values=[0.729492,0.696289] class=Point name=Unnamed dimension=2 values=[0.979492,0.446289] class=Point name=Unnamed dimension=2 values=[0.479492,0.946289] class=Point name=Unnamed dimension=2 values=[0.354492,0.321289] class=Point name=Unnamed dimension=2 values=[0.854492,0.821289] class=Point name=Unnamed dimension=2 values=[0.604492,0.0712891] class=Point name=Unnamed dimension=2 values=[0.104492,0.571289] class=Point name=Unnamed dimension=2 values=[0.0732422,0.102539] class=Point name=Unnamed dimension=2 values=[0.573242,0.602539] class=Point name=Unnamed dimension=2 values=[0.823242,0.352539] class=Point name=Unnamed dimension=2 values=[0.323242,0.852539] class=Point name=Unnamed dimension=2 values=[0.448242,0.477539] class=Point name=Unnamed dimension=2 values=[0.948242,0.977539] class=Point name=Unnamed dimension=2 values=[0.698242,0.227539] class=Point name=Unnamed dimension=2 values=[0.198242,0.727539] class=Point name=Unnamed dimension=2 values=[0.135742,0.290039] class=Point name=Unnamed dimension=2 values=[0.635742,0.790039] class=Point name=Unnamed dimension=2 values=[0.885742,0.0400391] class=Point name=Unnamed dimension=2 values=[0.385742,0.540039] class=Point name=Unnamed dimension=2 values=[0.260742,0.165039] class=Point name=Unnamed dimension=2 values=[0.760742,0.665039] class=Point name=Unnamed dimension=2 values=[0.510742,0.415039] class=Point name=Unnamed dimension=2 values=[0.0107422,0.915039] class=Point name=Unnamed dimension=2 values=[0.0146484,0.0830078] class=Point name=Unnamed dimension=2 values=[0.514648,0.583008] class=Point name=Unnamed dimension=2 values=[0.764648,0.333008] class=Point name=Unnamed dimension=2 values=[0.264648,0.833008] class=Point name=Unnamed dimension=2 values=[0.389648,0.458008] class=Point name=Unnamed dimension=2 values=[0.889648,0.958008] class=Point name=Unnamed dimension=2 values=[0.639648,0.208008] class=Point name=Unnamed dimension=2 values=[0.139648,0.708008] class=Point name=Unnamed dimension=2 values=[0.202148,0.270508] class=Point name=Unnamed dimension=2 values=[0.702148,0.770508] class=Point name=Unnamed dimension=2 values=[0.952148,0.0205078] class=Point name=Unnamed dimension=2 values=[0.452148,0.520508] class=Point name=Unnamed dimension=2 values=[0.327148,0.145508] class=Point name=Unnamed dimension=2 values=[0.827148,0.645508] class=Point name=Unnamed dimension=2 values=[0.577148,0.395508] class=Point name=Unnamed dimension=2 values=[0.0771484,0.895508] class=Point name=Unnamed dimension=2 values=[0.108398,0.426758] class=Point name=Unnamed dimension=2 values=[0.608398,0.926758] class=Point name=Unnamed dimension=2 values=[0.858398,0.176758] class=Point name=Unnamed dimension=2 values=[0.358398,0.676758] class=Point name=Unnamed dimension=2 values=[0.483398,0.0517578] class=Point name=Unnamed dimension=2 values=[0.983398,0.551758] class=Point name=Unnamed dimension=2 values=[0.733398,0.301758] class=Point name=Unnamed dimension=2 values=[0.233398,0.801758] class=Point name=Unnamed dimension=2 values=[0.170898,0.239258] class=Point name=Unnamed dimension=2 values=[0.670898,0.739258] class=Point name=Unnamed dimension=2 values=[0.920898,0.489258] class=Point name=Unnamed dimension=2 values=[0.420898,0.989258] class=Point name=Unnamed dimension=2 values=[0.295898,0.364258] class=Point name=Unnamed dimension=2 values=[0.795898,0.864258] class=Point name=Unnamed dimension=2 values=[0.545898,0.114258] class=Point name=Unnamed dimension=2 values=[0.0458984,0.614258] class=Point name=Unnamed dimension=2 values=[0.0615234,0.317383] class=Point name=Unnamed dimension=2 values=[0.561523,0.817383] class=Point name=Unnamed dimension=2 values=[0.811523,0.0673828] class=Point name=Unnamed dimension=2 values=[0.311523,0.567383] class=Point name=Unnamed dimension=2 values=[0.436523,0.192383] class=Point name=Unnamed dimension=2 values=[0.936523,0.692383] class=Point name=Unnamed dimension=2 values=[0.686523,0.442383] class=Point name=Unnamed dimension=2 values=[0.186523,0.942383] class=Point name=Unnamed dimension=2 values=[0.249023,0.00488281] class=Point name=Unnamed dimension=2 values=[0.749023,0.504883] class=Point name=Unnamed dimension=2 values=[0.999023,0.254883] class=Point name=Unnamed dimension=2 values=[0.499023,0.754883] class=Point name=Unnamed dimension=2 values=[0.374023,0.379883] class=Point name=Unnamed dimension=2 values=[0.874023,0.879883] class=Point name=Unnamed dimension=2 values=[0.624023,0.129883] class=Point name=Unnamed dimension=2 values=[0.124023,0.629883] class=Point name=Unnamed dimension=2 values=[0.0927734,0.161133] class=Point name=Unnamed dimension=2 values=[0.592773,0.661133] class=Point name=Unnamed dimension=2 values=[0.842773,0.411133] class=Point name=Unnamed dimension=2 values=[0.342773,0.911133] class=Point name=Unnamed dimension=2 values=[0.467773,0.286133] class=Point name=Unnamed dimension=2 values=[0.967773,0.786133] class=Point name=Unnamed dimension=2 values=[0.717773,0.0361328] class=Point name=Unnamed dimension=2 values=[0.217773,0.536133] class=Point name=Unnamed dimension=2 values=[0.155273,0.473633] class=Point name=Unnamed dimension=2 values=[0.655273,0.973633] class=Point name=Unnamed dimension=2 values=[0.905273,0.223633] class=Point name=Unnamed dimension=2 values=[0.405273,0.723633] class=Point name=Unnamed dimension=2 values=[0.280273,0.0986328] class=Point name=Unnamed dimension=2 values=[0.780273,0.598633] class=Point name=Unnamed dimension=2 values=[0.530273,0.348633] class=Point name=Unnamed dimension=2 values=[0.0302734,0.848633] class=Point name=Unnamed dimension=2 values=[0.0224609,0.450195] class=Point name=Unnamed dimension=2 values=[0.522461,0.950195] class=Point name=Unnamed dimension=2 values=[0.772461,0.200195] class=Point name=Unnamed dimension=2 values=[0.272461,0.700195] class=Point name=Unnamed dimension=2 values=[0.397461,0.0751953] class=Point name=Unnamed dimension=2 values=[0.897461,0.575195] class=Point name=Unnamed dimension=2 values=[0.647461,0.325195] class=Point name=Unnamed dimension=2 values=[0.147461,0.825195] class=Point name=Unnamed dimension=2 values=[0.209961,0.137695] class=Point name=Unnamed dimension=2 values=[0.709961,0.637695] class=Point name=Unnamed dimension=2 values=[0.959961,0.387695] class=Point name=Unnamed dimension=2 values=[0.459961,0.887695] class=Point name=Unnamed dimension=2 values=[0.334961,0.262695] class=Point name=Unnamed dimension=2 values=[0.834961,0.762695] class=Point name=Unnamed dimension=2 values=[0.584961,0.0126953] class=Point name=Unnamed dimension=2 values=[0.0849609,0.512695] class=Point name=Unnamed dimension=2 values=[0.116211,0.0439453] class=Point name=Unnamed dimension=2 values=[0.616211,0.543945] class=Point name=Unnamed dimension=2 values=[0.866211,0.293945] class=Point name=Unnamed dimension=2 values=[0.366211,0.793945] class=Point name=Unnamed dimension=2 values=[0.491211,0.418945] class=Point name=Unnamed dimension=2 values=[0.991211,0.918945] class=Point name=Unnamed dimension=2 values=[0.741211,0.168945] class=Point name=Unnamed dimension=2 values=[0.241211,0.668945] class=Point name=Unnamed dimension=2 values=[0.178711,0.356445] class=Point name=Unnamed dimension=2 values=[0.678711,0.856445] class=Point name=Unnamed dimension=2 values=[0.928711,0.106445] class=Point name=Unnamed dimension=2 values=[0.428711,0.606445] class=Point name=Unnamed dimension=2 values=[0.303711,0.231445] class=Point name=Unnamed dimension=2 values=[0.803711,0.731445] class=Point name=Unnamed dimension=2 values=[0.553711,0.481445] class=Point name=Unnamed dimension=2 values=[0.0537109,0.981445] class=Point name=Unnamed dimension=2 values=[0.0380859,0.21582] class=Point name=Unnamed dimension=2 values=[0.538086,0.71582] class=Point name=Unnamed dimension=2 values=[0.788086,0.46582] class=Point name=Unnamed dimension=2 values=[0.288086,0.96582] class=Point name=Unnamed dimension=2 values=[0.413086,0.34082] class=Point name=Unnamed dimension=2 values=[0.913086,0.84082] class=Point name=Unnamed dimension=2 values=[0.663086,0.0908203] class=Point name=Unnamed dimension=2 values=[0.163086,0.59082] class=Point name=Unnamed dimension=2 values=[0.225586,0.40332] class=Point name=Unnamed dimension=2 values=[0.725586,0.90332] class=Point name=Unnamed dimension=2 values=[0.975586,0.15332] class=Point name=Unnamed dimension=2 values=[0.475586,0.65332] class=Point name=Unnamed dimension=2 values=[0.350586,0.0283203] class=Point name=Unnamed dimension=2 values=[0.850586,0.52832] class=Point name=Unnamed dimension=2 values=[0.600586,0.27832] class=Point name=Unnamed dimension=2 values=[0.100586,0.77832] class=Point name=Unnamed dimension=2 values=[0.0693359,0.30957] class=Point name=Unnamed dimension=2 values=[0.569336,0.80957] class=Point name=Unnamed dimension=2 values=[0.819336,0.0595703] class=Point name=Unnamed dimension=2 values=[0.319336,0.55957] class=Point name=Unnamed dimension=2 values=[0.444336,0.18457] class=Point name=Unnamed dimension=2 values=[0.944336,0.68457] class=Point name=Unnamed dimension=2 values=[0.694336,0.43457] class=Point name=Unnamed dimension=2 values=[0.194336,0.93457] class=Point name=Unnamed dimension=2 values=[0.131836,0.12207] class=Point name=Unnamed dimension=2 values=[0.631836,0.62207] class=Point name=Unnamed dimension=2 values=[0.881836,0.37207] class=Point name=Unnamed dimension=2 values=[0.381836,0.87207] class=Point name=Unnamed dimension=2 values=[0.256836,0.49707] class=Point name=Unnamed dimension=2 values=[0.756836,0.99707] class=Point name=Unnamed dimension=2 values=[0.506836,0.24707] class=Point name=Unnamed dimension=2 values=[0.00683594,0.74707] class=Point name=Unnamed dimension=2 values=[0.00488281,0.249023] class=Point name=Unnamed dimension=2 values=[0.504883,0.749023] class=Point name=Unnamed dimension=2 values=[0.754883,0.499023] class=Point name=Unnamed dimension=2 values=[0.254883,0.999023] class=Point name=Unnamed dimension=2 values=[0.379883,0.374023] class=Point name=Unnamed dimension=2 values=[0.879883,0.874023] class=Point name=Unnamed dimension=2 values=[0.629883,0.124023] class=Point name=Unnamed dimension=2 values=[0.129883,0.624023] class=Point name=Unnamed dimension=2 values=[0.192383,0.436523] class=Point name=Unnamed dimension=2 values=[0.692383,0.936523] class=Point name=Unnamed dimension=2 values=[0.942383,0.186523] class=Point name=Unnamed dimension=2 values=[0.442383,0.686523] class=Point name=Unnamed dimension=2 values=[0.317383,0.0615234] class=Point name=Unnamed dimension=2 values=[0.817383,0.561523] class=Point name=Unnamed dimension=2 values=[0.567383,0.311523] class=Point name=Unnamed dimension=2 values=[0.0673828,0.811523] class=Point name=Unnamed dimension=2 values=[0.0986328,0.280273] class=Point name=Unnamed dimension=2 values=[0.598633,0.780273] class=Point name=Unnamed dimension=2 values=[0.848633,0.0302734] class=Point name=Unnamed dimension=2 values=[0.348633,0.530273] class=Point name=Unnamed dimension=2 values=[0.473633,0.155273] class=Point name=Unnamed dimension=2 values=[0.973633,0.655273] class=Point name=Unnamed dimension=2 values=[0.723633,0.405273] class=Point name=Unnamed dimension=2 values=[0.223633,0.905273] class=Point name=Unnamed dimension=2 values=[0.161133,0.0927734] class=Point name=Unnamed dimension=2 values=[0.661133,0.592773] class=Point name=Unnamed dimension=2 values=[0.911133,0.342773] class=Point name=Unnamed dimension=2 values=[0.411133,0.842773] class=Point name=Unnamed dimension=2 values=[0.286133,0.467773] class=Point name=Unnamed dimension=2 values=[0.786133,0.967773] class=Point name=Unnamed dimension=2 values=[0.536133,0.217773] class=Point name=Unnamed dimension=2 values=[0.0361328,0.717773] class=Point name=Unnamed dimension=2 values=[0.0517578,0.483398] class=Point name=Unnamed dimension=2 values=[0.551758,0.983398] class=Point name=Unnamed dimension=2 values=[0.801758,0.233398] class=Point name=Unnamed dimension=2 values=[0.301758,0.733398] class=Point name=Unnamed dimension=2 values=[0.426758,0.108398] class=Point name=Unnamed dimension=2 values=[0.926758,0.608398] class=Point name=Unnamed dimension=2 values=[0.676758,0.358398] class=Point name=Unnamed dimension=2 values=[0.176758,0.858398] class=Point name=Unnamed dimension=2 values=[0.239258,0.170898] class=Point name=Unnamed dimension=2 values=[0.739258,0.670898] class=Point name=Unnamed dimension=2 values=[0.989258,0.420898] class=Point name=Unnamed dimension=2 values=[0.489258,0.920898] class=Point name=Unnamed dimension=2 values=[0.364258,0.295898] class=Point name=Unnamed dimension=2 values=[0.864258,0.795898] class=Point name=Unnamed dimension=2 values=[0.614258,0.0458984] class=Point name=Unnamed dimension=2 values=[0.114258,0.545898] class=Point name=Unnamed dimension=2 values=[0.0830078,0.0146484] class=Point name=Unnamed dimension=2 values=[0.583008,0.514648] class=Point name=Unnamed dimension=2 values=[0.833008,0.264648] class=Point name=Unnamed dimension=2 values=[0.333008,0.764648] class=Point name=Unnamed dimension=2 values=[0.458008,0.389648] class=Point name=Unnamed dimension=2 values=[0.958008,0.889648] class=Point name=Unnamed dimension=2 values=[0.708008,0.139648] class=Point name=Unnamed dimension=2 values=[0.208008,0.639648] class=Point name=Unnamed dimension=2 values=[0.145508,0.327148] class=Point name=Unnamed dimension=2 values=[0.645508,0.827148] class=Point name=Unnamed dimension=2 values=[0.895508,0.0771484] class=Point name=Unnamed dimension=2 values=[0.395508,0.577148] class=Point name=Unnamed dimension=2 values=[0.270508,0.202148] class=Point name=Unnamed dimension=2 values=[0.770508,0.702148] class=Point name=Unnamed dimension=2 values=[0.520508,0.452148] class=Point name=Unnamed dimension=2 values=[0.0205078,0.952148] class=Point name=Unnamed dimension=2 values=[0.0283203,0.350586] class=Point name=Unnamed dimension=2 values=[0.52832,0.850586] class=Point name=Unnamed dimension=2 values=[0.77832,0.100586] class=Point name=Unnamed dimension=2 values=[0.27832,0.600586] class=Point name=Unnamed dimension=2 values=[0.40332,0.225586] class=Point name=Unnamed dimension=2 values=[0.90332,0.725586] class=Point name=Unnamed dimension=2 values=[0.65332,0.475586] class=Point name=Unnamed dimension=2 values=[0.15332,0.975586] class=Point name=Unnamed dimension=2 values=[0.21582,0.0380859] class=Point name=Unnamed dimension=2 values=[0.71582,0.538086] class=Point name=Unnamed dimension=2 values=[0.96582,0.288086] class=Point name=Unnamed dimension=2 values=[0.46582,0.788086] class=Point name=Unnamed dimension=2 values=[0.34082,0.413086] class=Point name=Unnamed dimension=2 values=[0.84082,0.913086] class=Point name=Unnamed dimension=2 values=[0.59082,0.163086] class=Point name=Unnamed dimension=2 values=[0.0908203,0.663086] class=Point name=Unnamed dimension=2 values=[0.12207,0.131836] class=Point name=Unnamed dimension=2 values=[0.62207,0.631836] class=Point name=Unnamed dimension=2 values=[0.87207,0.381836] class=Point name=Unnamed dimension=2 values=[0.37207,0.881836] class=Point name=Unnamed dimension=2 values=[0.49707,0.256836] class=Point name=Unnamed dimension=2 values=[0.99707,0.756836] class=Point name=Unnamed dimension=2 values=[0.74707,0.00683594] class=Point name=Unnamed dimension=2 values=[0.24707,0.506836] class=Point name=Unnamed dimension=2 values=[0.18457,0.444336] class=Point name=Unnamed dimension=2 values=[0.68457,0.944336] class=Point name=Unnamed dimension=2 values=[0.93457,0.194336] class=Point name=Unnamed dimension=2 values=[0.43457,0.694336] class=Point name=Unnamed dimension=2 values=[0.30957,0.0693359] class=Point name=Unnamed dimension=2 values=[0.80957,0.569336] class=Point name=Unnamed dimension=2 values=[0.55957,0.319336] class=Point name=Unnamed dimension=2 values=[0.0595703,0.819336] class=Point name=Unnamed dimension=2 values=[0.0439453,0.116211] class=Point name=Unnamed dimension=2 values=[0.543945,0.616211] class=Point name=Unnamed dimension=2 values=[0.793945,0.366211] class=Point name=Unnamed dimension=2 values=[0.293945,0.866211] class=Point name=Unnamed dimension=2 values=[0.418945,0.491211] class=Point name=Unnamed dimension=2 values=[0.918945,0.991211] class=Point name=Unnamed dimension=2 values=[0.668945,0.241211] class=Point name=Unnamed dimension=2 values=[0.168945,0.741211] class=Point name=Unnamed dimension=2 values=[0.231445,0.303711] class=Point name=Unnamed dimension=2 values=[0.731445,0.803711] class=Point name=Unnamed dimension=2 values=[0.981445,0.0537109] class=Point name=Unnamed dimension=2 values=[0.481445,0.553711] class=Point name=Unnamed dimension=2 values=[0.356445,0.178711] class=Point name=Unnamed dimension=2 values=[0.856445,0.678711] class=Point name=Unnamed dimension=2 values=[0.606445,0.428711] class=Point name=Unnamed dimension=2 values=[0.106445,0.928711] class=Point name=Unnamed dimension=2 values=[0.0751953,0.397461] class=Point name=Unnamed dimension=2 values=[0.575195,0.897461] class=Point name=Unnamed dimension=2 values=[0.825195,0.147461] class=Point name=Unnamed dimension=2 values=[0.325195,0.647461] class=Point name=Unnamed dimension=2 values=[0.450195,0.0224609] class=Point name=Unnamed dimension=2 values=[0.950195,0.522461] class=Point name=Unnamed dimension=2 values=[0.700195,0.272461] class=Point name=Unnamed dimension=2 values=[0.200195,0.772461] class=Point name=Unnamed dimension=2 values=[0.137695,0.209961] class=Point name=Unnamed dimension=2 values=[0.637695,0.709961] class=Point name=Unnamed dimension=2 values=[0.887695,0.459961] class=Point name=Unnamed dimension=2 values=[0.387695,0.959961] class=Point name=Unnamed dimension=2 values=[0.262695,0.334961] class=Point name=Unnamed dimension=2 values=[0.762695,0.834961] class=Point name=Unnamed dimension=2 values=[0.512695,0.0849609] class=Point name=Unnamed dimension=2 values=[0.0126953,0.584961] class=Point name=Unnamed dimension=2 values=[0.00878906,0.416992] class=Point name=Unnamed dimension=2 values=[0.508789,0.916992] class=Point name=Unnamed dimension=2 values=[0.758789,0.166992] class=Point name=Unnamed dimension=2 values=[0.258789,0.666992] class=Point name=Unnamed dimension=2 values=[0.383789,0.0419922] class=Point name=Unnamed dimension=2 values=[0.883789,0.541992] class=Point name=Unnamed dimension=2 values=[0.633789,0.291992] class=Point name=Unnamed dimension=2 values=[0.133789,0.791992] class=Point name=Unnamed dimension=2 values=[0.196289,0.229492] class=Point name=Unnamed dimension=2 values=[0.696289,0.729492] class=Point name=Unnamed dimension=2 values=[0.946289,0.479492] class=Point name=Unnamed dimension=2 values=[0.446289,0.979492] class=Point name=Unnamed dimension=2 values=[0.321289,0.354492] class=Point name=Unnamed dimension=2 values=[0.821289,0.854492] class=Point name=Unnamed dimension=2 values=[0.571289,0.104492] class=Point name=Unnamed dimension=2 values=[0.0712891,0.604492] class=Point name=Unnamed dimension=2 values=[0.102539,0.0732422] class=Point name=Unnamed dimension=2 values=[0.602539,0.573242] class=Point name=Unnamed dimension=2 values=[0.852539,0.323242] class=Point name=Unnamed dimension=2 values=[0.352539,0.823242] class=Point name=Unnamed dimension=2 values=[0.477539,0.448242] class=Point name=Unnamed dimension=2 values=[0.977539,0.948242] class=Point name=Unnamed dimension=2 values=[0.727539,0.198242] class=Point name=Unnamed dimension=2 values=[0.227539,0.698242] class=Point name=Unnamed dimension=2 values=[0.165039,0.260742] class=Point name=Unnamed dimension=2 values=[0.665039,0.760742] class=Point name=Unnamed dimension=2 values=[0.915039,0.0107422] class=Point name=Unnamed dimension=2 values=[0.415039,0.510742] class=Point name=Unnamed dimension=2 values=[0.290039,0.135742] class=Point name=Unnamed dimension=2 values=[0.790039,0.635742] class=Point name=Unnamed dimension=2 values=[0.540039,0.385742] class=Point name=Unnamed dimension=2 values=[0.0400391,0.885742] class=Point name=Unnamed dimension=2 values=[0.0556641,0.182617] class=Point name=Unnamed dimension=2 values=[0.555664,0.682617] class=Point name=Unnamed dimension=2 values=[0.805664,0.432617] class=Point name=Unnamed dimension=2 values=[0.305664,0.932617] class=Point name=Unnamed dimension=2 values=[0.430664,0.307617] class=Point name=Unnamed dimension=2 values=[0.930664,0.807617] class=Point name=Unnamed dimension=2 values=[0.680664,0.0576172] class=Point name=Unnamed dimension=2 values=[0.180664,0.557617] class=Point name=Unnamed dimension=2 values=[0.243164,0.495117] class=Point name=Unnamed dimension=2 values=[0.743164,0.995117] class=Point name=Unnamed dimension=2 values=[0.993164,0.245117] class=Point name=Unnamed dimension=2 values=[0.493164,0.745117] class=Point name=Unnamed dimension=2 values=[0.368164,0.120117] class=Point name=Unnamed dimension=2 values=[0.868164,0.620117] class=Point name=Unnamed dimension=2 values=[0.618164,0.370117] class=Point name=Unnamed dimension=2 values=[0.118164,0.870117] class=Point name=Unnamed dimension=2 values=[0.0869141,0.338867] class=Point name=Unnamed dimension=2 values=[0.586914,0.838867] class=Point name=Unnamed dimension=2 values=[0.836914,0.0888672] class=Point name=Unnamed dimension=2 values=[0.336914,0.588867] class=Point name=Unnamed dimension=2 values=[0.461914,0.213867] class=Point name=Unnamed dimension=2 values=[0.961914,0.713867] class=Point name=Unnamed dimension=2 values=[0.711914,0.463867] class=Point name=Unnamed dimension=2 values=[0.211914,0.963867] class=Point name=Unnamed dimension=2 values=[0.149414,0.0263672] class=Point name=Unnamed dimension=2 values=[0.649414,0.526367] class=Point name=Unnamed dimension=2 values=[0.899414,0.276367] class=Point name=Unnamed dimension=2 values=[0.399414,0.776367] class=Point name=Unnamed dimension=2 values=[0.274414,0.401367] class=Point name=Unnamed dimension=2 values=[0.774414,0.901367] class=Point name=Unnamed dimension=2 values=[0.524414,0.151367] class=Point name=Unnamed dimension=2 values=[0.0244141,0.651367] class=Point name=Unnamed dimension=2 values=[0.0166016,0.0498047] class=Point name=Unnamed dimension=2 values=[0.516602,0.549805] class=Point name=Unnamed dimension=2 values=[0.766602,0.299805] class=Point name=Unnamed dimension=2 values=[0.266602,0.799805] class=Point name=Unnamed dimension=2 values=[0.391602,0.424805] class=Point name=Unnamed dimension=2 values=[0.891602,0.924805] class=Point name=Unnamed dimension=2 values=[0.641602,0.174805] class=Point name=Unnamed dimension=2 values=[0.141602,0.674805] class=Point name=Unnamed dimension=2 values=[0.204102,0.362305] class=Point name=Unnamed dimension=2 values=[0.704102,0.862305] class=Point name=Unnamed dimension=2 values=[0.954102,0.112305] class=Point name=Unnamed dimension=2 values=[0.454102,0.612305] class=Point name=Unnamed dimension=2 values=[0.329102,0.237305] class=Point name=Unnamed dimension=2 values=[0.829102,0.737305] class=Point name=Unnamed dimension=2 values=[0.579102,0.487305] class=Point name=Unnamed dimension=2 values=[0.0791016,0.987305] class=Point name=Unnamed dimension=2 values=[0.110352,0.456055] class=Point name=Unnamed dimension=2 values=[0.610352,0.956055] class=Point name=Unnamed dimension=2 values=[0.860352,0.206055] class=Point name=Unnamed dimension=2 values=[0.360352,0.706055] class=Point name=Unnamed dimension=2 values=[0.485352,0.0810547] class=Point name=Unnamed dimension=2 values=[0.985352,0.581055] class=Point name=Unnamed dimension=2 values=[0.735352,0.331055] class=Point name=Unnamed dimension=2 values=[0.235352,0.831055] class=Point name=Unnamed dimension=2 values=[0.172852,0.143555] class=Point name=Unnamed dimension=2 values=[0.672852,0.643555] class=Point name=Unnamed dimension=2 values=[0.922852,0.393555] class=Point name=Unnamed dimension=2 values=[0.422852,0.893555] class=Point name=Unnamed dimension=2 values=[0.297852,0.268555] class=Point name=Unnamed dimension=2 values=[0.797852,0.768555] class=Point name=Unnamed dimension=2 values=[0.547852,0.0185547] class=Point name=Unnamed dimension=2 values=[0.0478516,0.518555] class=Point name=Unnamed dimension=2 values=[0.0322266,0.28418] class=Point name=Unnamed dimension=2 values=[0.532227,0.78418] class=Point name=Unnamed dimension=2 values=[0.782227,0.0341797] class=Point name=Unnamed dimension=2 values=[0.282227,0.53418] class=Point name=Unnamed dimension=2 values=[0.407227,0.15918] class=Point name=Unnamed dimension=2 values=[0.907227,0.65918] class=Point name=Unnamed dimension=2 values=[0.657227,0.40918] class=Point name=Unnamed dimension=2 values=[0.157227,0.90918] class=Point name=Unnamed dimension=2 values=[0.219727,0.0966797] sample size=1000 relative error to Pi=0.000766282 openturns-1.9/lib/test/t_SoizeGhanemFactory_std.cxx000066400000000000000000000066361307543307100226450ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class HermiteFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; struct KernelWrapper { KernelWrapper(const Function & left, const Function & right, const Distribution & weight) : left_(left) , right_(right) , weight_(weight) {}; Point operator()(const Point & point) const { return left_(point) * (right_(point)[0] * weight_.computePDF(point)); }; const Function left_; const Function right_; const Distribution weight_; }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Collection marginals(2); marginals[0] = Normal(); marginals[1] = Uniform(); CorrelationMatrix R(2); R(0, 1) = 0.5; NormalCopula copula(R); Collection factories(3); factories[0] = SoizeGhanemFactory(ComposedDistribution(marginals)); factories[1] = SoizeGhanemFactory(ComposedDistribution(marginals, copula), false); factories[2] = SoizeGhanemFactory(ComposedDistribution(marginals, copula), true); Point x(2, 0.5); UnsignedInteger kMax = 5; ResourceMap::SetAsUnsignedInteger( "IteratedQuadrature-MaximumSubIntervals", 2048 ); ResourceMap::SetAsScalar( "IteratedQuadrature-MaximumError", 1.0e-6 ); for (UnsignedInteger i = 0; i < factories.getSize(); ++i) { SoizeGhanemFactory soize(factories[i]); Distribution distribution(soize.getMeasure()); fullprint << "SoizeGhanem=" << soize << std::endl; Collection functions(kMax); for (UnsignedInteger k = 0; k < kMax; ++k) { functions[k] = soize.build(k); fullprint << "SoizeGhanem(" << k << ")=" << functions[k].getEvaluation()->__str__() << std::endl; fullprint << "SoizeGhanem(" << k << ")(" << x.__str__() << "=" << functions[k](x).__str__() << std::endl; } SymmetricMatrix M(kMax); for (UnsignedInteger m = 0; m < kMax; ++m) for (UnsignedInteger n = 0; n <= m; ++n) { KernelWrapper wrapper(functions[m], functions[n], distribution); Function kernel(bindMethod(wrapper, &KernelWrapper::operator(), distribution.getDimension(), 1)); Scalar value = IteratedQuadrature().integrate(kernel, distribution.getRange())[0]; M(m, n) = (std::abs(value) < 1e-6 ? 0.0 : value); } fullprint << "M=\n" << M.__str__() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SoizeGhanemFactory_std.expout000066400000000000000000000402651307543307100233630ustar00rootroot00000000000000SoizeGhanem=class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=true SoizeGhanem(0)=1 SoizeGhanem(0)([0.5,0.5]=[1] SoizeGhanem(1)=x0 SoizeGhanem(1)([0.5,0.5]=[0.5] SoizeGhanem(2)=1.73205 * x1 SoizeGhanem(2)([0.5,0.5]=[0.866025] SoizeGhanem(3)=-0.707107 + 0.707107 * x0^2 SoizeGhanem(3)([0.5,0.5]=[-0.53033] SoizeGhanem(4)=(x0) * (1.73205 * x1) SoizeGhanem(4)([0.5,0.5]=[0.433013] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] SoizeGhanem=class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=false adaptationFactor=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false SoizeGhanem(0)=(1) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem(0)([0.5,0.5]=[0.881976] SoizeGhanem(1)=(x0) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem(1)([0.5,0.5]=[0.440988] SoizeGhanem(2)=(1.73205 * x1) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem(2)([0.5,0.5]=[0.763813] SoizeGhanem(3)=(-0.707107 + 0.707107 * x0^2) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem(3)([0.5,0.5]=[-0.467738] SoizeGhanem(4)=((x0) * (1.73205 * x1)) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem(4)([0.5,0.5]=[0.381907] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] SoizeGhanem=class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=false adaptationFactor=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] SoizeGhanem(0)=(1) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem(0)([0.5,0.5]=[0.881976] SoizeGhanem(1)=(x0) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem(1)([0.5,0.5]=[0.440988] SoizeGhanem(2)=(1.73205 * x1) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem(2)([0.5,0.5]=[0.763813] SoizeGhanem(3)=(-0.707107 + 0.707107 * x0^2) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem(3)([0.5,0.5]=[-0.467738] SoizeGhanem(4)=((x0) * (1.73205 * x1)) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem(4)([0.5,0.5]=[0.381907] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] openturns-1.9/lib/test/t_SpaceFilling_std.cxx000066400000000000000000000016631307543307100214370ustar00rootroot00000000000000#include // OT includes #include using namespace OT; int main(int argc, char **argv) { const UnsignedInteger dimension(5); const UnsignedInteger size(100); Collection distributions(dimension); for(UnsignedInteger i = 0; i < dimension; ++i) distributions[i] = Uniform(); LHSExperiment lhs(ComposedDistribution(distributions), size); Sample design(lhs.generate()); // Defining space fillings SpaceFillingC2 spaceFillingC2; SpaceFillingMinDist spaceFillingMinDist; SpaceFillingPhiP spaceFillingPhiP; SpaceFillingPhiP spaceFillingPhiP50(50); // Print the criteria on this design std::cout << "C2=" << spaceFillingC2.evaluate(design) << ", MinDist=" << spaceFillingMinDist.evaluate(design) << ", Phip=" << spaceFillingPhiP.evaluate(design) << ", Phip(50)=" << spaceFillingPhiP50.evaluate(design) << std::endl; return 0; } openturns-1.9/lib/test/t_SpaceFilling_std.expout000066400000000000000000000000771307543307100221570ustar00rootroot00000000000000C2=0.0646157, MinDist=0.168465, Phip=3.01154, Phip(50)=3.01154 openturns-1.9/lib/test/t_SpectralGaussianProcess_std.cxx000066400000000000000000000065351307543307100237110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Spectral Normal Process * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { RandomGenerator::SetSeed(0); /* Default dimension parameter to evaluate the model */ const UnsignedInteger defaultDimension = 1; /* Amplitude values */ Point amplitude(defaultDimension, 1.0); /* Scale values */ Point scale(defaultDimension, 1.0); /* Second order model with parameters */ ExponentialCauchy myModel(scale, amplitude); /* checking the copy-cast*/ SecondOrderModel mySecondOrderModel(myModel); const UnsignedInteger points = 8; const Scalar tMin = 0.0; const Scalar tStep = 1.0 / (points - 1); // RegularGrid --> Build list of frequencies using the RegularGrid RegularGrid myTimeGrid(tMin, tStep, points); SpectralGaussianProcess mySpectralProcess0(myModel, myTimeGrid); fullprint << "mySpectralProcess0 = " << mySpectralProcess0.__str__() << std::endl; fullprint << "Realization = " << mySpectralProcess0.getRealization().__str__() << std::endl; // Constructor using maximalFrequency value and size of discretization const Scalar maximalFrequency = 10.0; SpectralGaussianProcess mySpectralProcess1(myModel, maximalFrequency, points); RegularGrid tg(mySpectralProcess1.getTimeGrid()); fullprint << "mySpectralProcess1 = " << mySpectralProcess1.__str__() << std::endl; fullprint << "Realization = " << mySpectralProcess1.getRealization().__str__() << std::endl; /* Second order model with parameters */ const UnsignedInteger highDimension = 3; amplitude.resize(highDimension); for (UnsignedInteger k = 0; k < highDimension; ++k) amplitude[k] = 1.0; CauchyModel mySpecModel(scale, amplitude); fullprint << "mySpecModel = " << mySpecModel << std::endl; SpectralGaussianProcess mySpectralProcess2(mySpecModel, myTimeGrid); fullprint << "mySpectralProcess2 = " << mySpectralProcess2.__str__() << std::endl; fullprint << "Realization = " << mySpectralProcess2.getRealization().__str__() << std::endl; SpectralGaussianProcess mySpectralProcess3(mySpecModel, maximalFrequency, points); fullprint << "mySpectralProcess3 = " << mySpectralProcess3.__str__() << std::endl; fullprint << "Realization = " << mySpectralProcess3.getRealization().__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SpectralGaussianProcess_std.expout000066400000000000000000000065341307543307100244320ustar00rootroot00000000000000mySpectralProcess0 = SpectralGaussianProcess=SpectralGaussianProcess dimension=1 spectralModel=class=CauchyModel amplitude=[1] scale=[1] no spatial correlation maximal frequency=3.5 n frequency=4 Realization = [ t x0 ] 0 : [ 0 -0.541695 ] 1 : [ 0.142857 -0.17745 ] 2 : [ 0.285714 -0.0349748 ] 3 : [ 0.428571 0.787511 ] 4 : [ 0.571429 0.116564 ] 5 : [ 0.714286 -0.267239 ] 6 : [ 0.857143 -0.318985 ] 7 : [ 1 -0.442252 ] mySpectralProcess1 = SpectralGaussianProcess=SpectralGaussianProcess dimension=1 spectralModel=class=CauchyModel amplitude=[1] scale=[1] no spatial correlation maximal frequency=10 n frequency=8 Realization = [ t x0 ] 0 : [ 0 0.120989 ] 1 : [ 0.05 -0.00948819 ] 2 : [ 0.1 0.0601334 ] 3 : [ 0.15 0.1043 ] 4 : [ 0.2 0.0610709 ] 5 : [ 0.25 0.154619 ] 6 : [ 0.3 0.412502 ] 7 : [ 0.35 -0.250428 ] 8 : [ 0.4 -0.278895 ] 9 : [ 0.45 -0.497166 ] 10 : [ 0.5 -0.136631 ] 11 : [ 0.55 -0.212243 ] 12 : [ 0.6 -0.0581267 ] 13 : [ 0.65 -0.216907 ] 14 : [ 0.7 -0.178035 ] 15 : [ 0.75 -0.21869 ] mySpecModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=3 values=[1,1,1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true mySpectralProcess2 = SpectralGaussianProcess=SpectralGaussianProcess dimension=3 spectralModel=class=CauchyModel amplitude=[1,1,1] scale=[1] no spatial correlation maximal frequency=3.5 n frequency=4 Realization = [ t x0 x1 x2 ] 0 : [ 0 0.654415 0.327034 0.995509 ] 1 : [ 0.142857 0.391645 0.83302 0.963103 ] 2 : [ 0.285714 -0.0696653 0.74527 0.923086 ] 3 : [ 0.428571 0.0185515 0.700052 0.753238 ] 4 : [ 0.571429 0.0671541 0.101402 0.776123 ] 5 : [ 0.714286 -0.0868007 -0.182155 0.158721 ] 6 : [ 0.857143 -0.0743807 0.450592 -0.333411 ] 7 : [ 1 -0.357537 0.134426 -0.894867 ] mySpectralProcess3 = SpectralGaussianProcess=SpectralGaussianProcess dimension=3 spectralModel=class=CauchyModel amplitude=[1,1,1] scale=[1] no spatial correlation maximal frequency=10 n frequency=8 Realization = [ t x0 x1 x2 ] 0 : [ 0 0.375052 -0.406979 0.694822 ] 1 : [ 0.05 0.599149 -0.253222 0.973576 ] 2 : [ 0.1 0.940377 -0.376011 0.912676 ] 3 : [ 0.15 0.686041 0.0312133 0.803473 ] 4 : [ 0.2 0.145005 0.25063 0.650052 ] 5 : [ 0.25 0.165941 1.24729 0.590029 ] 6 : [ 0.3 0.00289084 1.98871 0.703721 ] 7 : [ 0.35 -0.0107257 1.97658 0.890105 ] 8 : [ 0.4 -0.333973 2.20943 0.569659 ] 9 : [ 0.45 -0.0979509 1.94076 0.762396 ] 10 : [ 0.5 -0.0178465 1.72497 0.579794 ] 11 : [ 0.55 -0.297363 1.58461 0.588862 ] 12 : [ 0.6 -0.804947 1.18118 0.55475 ] 13 : [ 0.65 -1.20212 1.07139 0.312167 ] 14 : [ 0.7 -0.923351 0.878606 -0.0436966 ] 15 : [ 0.75 -0.677219 0.610963 -0.170533 ] openturns-1.9/lib/test/t_SphereUnitNorm_std.cxx000066400000000000000000000036621307543307100220220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SphereUnitNorm * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger maxDistance = 4; for (UnsignedInteger symmetric = 0 ; symmetric < 2; ++symmetric) { for (UnsignedInteger dimension = 1 ; dimension <= 3; ++dimension) { // d- dimensional SphereUniformNorm const Point step(dimension, 1.0); // Create d-dimensional sphere using static constructor SphereUniformNorm sphereUnitNorm(SphereUniformNorm::GetFromGridSteps(step, symmetric)); fullprint << "sphereUnitNorm = " << sphereUnitNorm << std::endl; for (UnsignedInteger distance = 0 ; distance < maxDistance; ++distance) { const Sample points(sphereUnitNorm.getPoints(distance)); fullprint << "distance=" << distance << " - points = " << points << std::endl; } } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SphereUnitNorm_std.expout000066400000000000000000000216421307543307100225420ustar00rootroot00000000000000sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=1 values=[1] symmetric=false distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[1],[-1]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[2],[-2]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[3],[-3]] sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=2 values=[1,1] symmetric=false distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=2 data=[[-1,-1],[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16 dimension=2 data=[[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],[-1,2],[0,2],[1,2],[2,2],[2,1],[2,0],[2,-1],[2,-2],[1,-2],[0,-2],[-1,-2]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=24 dimension=2 data=[[-3,-3],[-3,-2],[-3,-1],[-3,0],[-3,1],[-3,2],[-3,3],[-2,3],[-1,3],[0,3],[1,3],[2,3],[3,3],[3,2],[3,1],[3,0],[3,-1],[3,-2],[3,-3],[2,-3],[1,-3],[0,-3],[-1,-3],[-2,-3]] sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=3 values=[1,1,1] symmetric=false distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=3 data=[[0,0,0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=26 dimension=3 data=[[-1,-1,-1],[0,-1,-1],[1,-1,-1],[1,0,-1],[1,1,-1],[0,1,-1],[-1,1,-1],[-1,0,-1],[-1,-1,0],[0,-1,0],[1,-1,0],[1,0,0],[1,1,0],[0,1,0],[-1,1,0],[-1,0,0],[-1,-1,1],[0,-1,1],[1,-1,1],[1,0,1],[1,1,1],[0,1,1],[-1,1,1],[-1,0,1],[0,0,-1],[0,0,1]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=98 dimension=3 data=[[-2,-2,-2],[-1,-2,-2],[0,-2,-2],[1,-2,-2],[2,-2,-2],[2,-1,-2],[2,0,-2],[2,1,-2],[2,2,-2],[1,2,-2],[0,2,-2],[-1,2,-2],[-2,2,-2],[-2,1,-2],[-2,0,-2],[-2,-1,-2],[-2,-2,-1],[-1,-2,-1],[0,-2,-1],[1,-2,-1],[2,-2,-1],[2,-1,-1],[2,0,-1],[2,1,-1],[2,2,-1],[1,2,-1],[0,2,-1],[-1,2,-1],[-2,2,-1],[-2,1,-1],[-2,0,-1],[-2,-1,-1],[-2,-2,0],[-1,-2,0],[0,-2,0],[1,-2,0],[2,-2,0],[2,-1,0],[2,0,0],[2,1,0],[2,2,0],[1,2,0],[0,2,0],[-1,2,0],[-2,2,0],[-2,1,0],[-2,0,0],[-2,-1,0],[-2,-2,1],[-1,-2,1],[0,-2,1],[1,-2,1],[2,-2,1],[2,-1,1],[2,0,1],[2,1,1],[2,2,1],[1,2,1],[0,2,1],[-1,2,1],[-2,2,1],[-2,1,1],[-2,0,1],[-2,-1,1],[-2,-2,2],[-1,-2,2],[0,-2,2],[1,-2,2],[2,-2,2],[2,-1,2],[2,0,2],[2,1,2],[2,2,2],[1,2,2],[0,2,2],[-1,2,2],[-2,2,2],[-2,1,2],[-2,0,2],[-2,-1,2],[-1,-1,-2],[-1,0,-2],[-1,1,-2],[0,-1,-2],[0,0,-2],[0,1,-2],[1,-1,-2],[1,0,-2],[1,1,-2],[-1,-1,2],[-1,0,2],[-1,1,2],[0,-1,2],[0,0,2],[0,1,2],[1,-1,2],[1,0,2],[1,1,2]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=218 dimension=3 data=[[-3,-3,-3],[-2,-3,-3],[-1,-3,-3],[0,-3,-3],[1,-3,-3],[2,-3,-3],[3,-3,-3],[3,-2,-3],[3,-1,-3],[3,0,-3],[3,1,-3],[3,2,-3],[3,3,-3],[2,3,-3],[1,3,-3],[0,3,-3],[-1,3,-3],[-2,3,-3],[-3,3,-3],[-3,2,-3],[-3,1,-3],[-3,0,-3],[-3,-1,-3],[-3,-2,-3],[-3,-3,-2],[-2,-3,-2],[-1,-3,-2],[0,-3,-2],[1,-3,-2],[2,-3,-2],[3,-3,-2],[3,-2,-2],[3,-1,-2],[3,0,-2],[3,1,-2],[3,2,-2],[3,3,-2],[2,3,-2],[1,3,-2],[0,3,-2],[-1,3,-2],[-2,3,-2],[-3,3,-2],[-3,2,-2],[-3,1,-2],[-3,0,-2],[-3,-1,-2],[-3,-2,-2],[-3,-3,-1],[-2,-3,-1],[-1,-3,-1],[0,-3,-1],[1,-3,-1],[2,-3,-1],[3,-3,-1],[3,-2,-1],[3,-1,-1],[3,0,-1],[3,1,-1],[3,2,-1],[3,3,-1],[2,3,-1],[1,3,-1],[0,3,-1],[-1,3,-1],[-2,3,-1],[-3,3,-1],[-3,2,-1],[-3,1,-1],[-3,0,-1],[-3,-1,-1],[-3,-2,-1],[-3,-3,0],[-2,-3,0],[-1,-3,0],[0,-3,0],[1,-3,0],[2,-3,0],[3,-3,0],[3,-2,0],[3,-1,0],[3,0,0],[3,1,0],[3,2,0],[3,3,0],[2,3,0],[1,3,0],[0,3,0],[-1,3,0],[-2,3,0],[-3,3,0],[-3,2,0],[-3,1,0],[-3,0,0],[-3,-1,0],[-3,-2,0],[-3,-3,1],[-2,-3,1],[-1,-3,1],[0,-3,1],[1,-3,1],[2,-3,1],[3,-3,1],[3,-2,1],[3,-1,1],[3,0,1],[3,1,1],[3,2,1],[3,3,1],[2,3,1],[1,3,1],[0,3,1],[-1,3,1],[-2,3,1],[-3,3,1],[-3,2,1],[-3,1,1],[-3,0,1],[-3,-1,1],[-3,-2,1],[-3,-3,2],[-2,-3,2],[-1,-3,2],[0,-3,2],[1,-3,2],[2,-3,2],[3,-3,2],[3,-2,2],[3,-1,2],[3,0,2],[3,1,2],[3,2,2],[3,3,2],[2,3,2],[1,3,2],[0,3,2],[-1,3,2],[-2,3,2],[-3,3,2],[-3,2,2],[-3,1,2],[-3,0,2],[-3,-1,2],[-3,-2,2],[-3,-3,3],[-2,-3,3],[-1,-3,3],[0,-3,3],[1,-3,3],[2,-3,3],[3,-3,3],[3,-2,3],[3,-1,3],[3,0,3],[3,1,3],[3,2,3],[3,3,3],[2,3,3],[1,3,3],[0,3,3],[-1,3,3],[-2,3,3],[-3,3,3],[-3,2,3],[-3,1,3],[-3,0,3],[-3,-1,3],[-3,-2,3],[-2,-2,-3],[-2,-1,-3],[-2,0,-3],[-2,1,-3],[-2,2,-3],[-1,-2,-3],[-1,-1,-3],[-1,0,-3],[-1,1,-3],[-1,2,-3],[0,-2,-3],[0,-1,-3],[0,0,-3],[0,1,-3],[0,2,-3],[1,-2,-3],[1,-1,-3],[1,0,-3],[1,1,-3],[1,2,-3],[2,-2,-3],[2,-1,-3],[2,0,-3],[2,1,-3],[2,2,-3],[-2,-2,3],[-2,-1,3],[-2,0,3],[-2,1,3],[-2,2,3],[-1,-2,3],[-1,-1,3],[-1,0,3],[-1,1,3],[-1,2,3],[0,-2,3],[0,-1,3],[0,0,3],[0,1,3],[0,2,3],[1,-2,3],[1,-1,3],[1,0,3],[1,1,3],[1,2,3],[2,-2,3],[2,-1,3],[2,0,3],[2,1,3],[2,2,3]] sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=1 values=[1] symmetric=true distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[1]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[2]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[3]] sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=2 values=[1,1] symmetric=true distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[-1,1],[0,1],[1,1],[1,0]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=2 data=[[-2,2],[-1,2],[0,2],[1,2],[2,2],[2,1],[2,0],[2,-1]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=12 dimension=2 data=[[-3,3],[-2,3],[-1,3],[0,3],[1,3],[2,3],[3,3],[3,2],[3,1],[3,0],[3,-1],[3,-2]] sphereUnitNorm = class=SphereUniformNormImplementation step=class=Point name=Unnamed dimension=3 values=[1,1,1] symmetric=true distance=0 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=3 data=[[0,0,0]] distance=1 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=13 dimension=3 data=[[1,-1,-1],[1,0,-1],[1,1,-1],[0,1,-1],[1,-1,0],[1,0,0],[1,1,0],[0,1,0],[1,-1,1],[1,0,1],[1,1,1],[0,1,1],[0,0,1]] distance=2 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=49 dimension=3 data=[[2,-2,-2],[2,-1,-2],[2,0,-2],[2,1,-2],[2,2,-2],[1,2,-2],[0,2,-2],[-1,2,-2],[2,-2,-1],[2,-1,-1],[2,0,-1],[2,1,-1],[2,2,-1],[1,2,-1],[0,2,-1],[-1,2,-1],[2,-2,0],[2,-1,0],[2,0,0],[2,1,0],[2,2,0],[1,2,0],[0,2,0],[-1,2,0],[2,-2,1],[2,-1,1],[2,0,1],[2,1,1],[2,2,1],[1,2,1],[0,2,1],[-1,2,1],[2,-2,2],[2,-1,2],[2,0,2],[2,1,2],[2,2,2],[1,2,2],[0,2,2],[-1,2,2],[-1,-1,2],[-1,0,2],[-1,1,2],[0,-1,2],[0,0,2],[0,1,2],[1,-1,2],[1,0,2],[1,1,2]] distance=3 - points = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=109 dimension=3 data=[[3,-3,-3],[3,-2,-3],[3,-1,-3],[3,0,-3],[3,1,-3],[3,2,-3],[3,3,-3],[2,3,-3],[1,3,-3],[0,3,-3],[-1,3,-3],[-2,3,-3],[3,-3,-2],[3,-2,-2],[3,-1,-2],[3,0,-2],[3,1,-2],[3,2,-2],[3,3,-2],[2,3,-2],[1,3,-2],[0,3,-2],[-1,3,-2],[-2,3,-2],[3,-3,-1],[3,-2,-1],[3,-1,-1],[3,0,-1],[3,1,-1],[3,2,-1],[3,3,-1],[2,3,-1],[1,3,-1],[0,3,-1],[-1,3,-1],[-2,3,-1],[3,-3,0],[3,-2,0],[3,-1,0],[3,0,0],[3,1,0],[3,2,0],[3,3,0],[2,3,0],[1,3,0],[0,3,0],[-1,3,0],[-2,3,0],[3,-3,1],[3,-2,1],[3,-1,1],[3,0,1],[3,1,1],[3,2,1],[3,3,1],[2,3,1],[1,3,1],[0,3,1],[-1,3,1],[-2,3,1],[3,-3,2],[3,-2,2],[3,-1,2],[3,0,2],[3,1,2],[3,2,2],[3,3,2],[2,3,2],[1,3,2],[0,3,2],[-1,3,2],[-2,3,2],[3,-3,3],[3,-2,3],[3,-1,3],[3,0,3],[3,1,3],[3,2,3],[3,3,3],[2,3,3],[1,3,3],[0,3,3],[-1,3,3],[-2,3,3],[-2,-2,3],[-2,-1,3],[-2,0,3],[-2,1,3],[-2,2,3],[-1,-2,3],[-1,-1,3],[-1,0,3],[-1,1,3],[-1,2,3],[0,-2,3],[0,-1,3],[0,0,3],[0,1,3],[0,2,3],[1,-2,3],[1,-1,3],[1,0,3],[1,1,3],[1,2,3],[2,-2,3],[2,-1,3],[2,0,3],[2,1,3],[2,2,3]] openturns-1.9/lib/test/t_SquareComplexMatrix_std.cxx000066400000000000000000000144311307543307100230510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SquareComplexMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 0 : default constructor and string converter" << std::endl; /* Default constructor */ SquareComplexMatrix squareComplexMatrix0; /* String converter */ fullprint << "squareComplexMatrix0 = " << squareComplexMatrix0 << std::endl; /** CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test 1: constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ SquareComplexMatrix squareComplexMatrix1(2); /* Check operator() methods */ squareComplexMatrix1(0, 0) = Complex(1.0, 1.0) ; squareComplexMatrix1(0, 1) = Complex(3.0, 1.0) ; squareComplexMatrix1(1, 0) = Complex(0.0, 1.0) ; squareComplexMatrix1(1, 1) = Complex(5.0, 1.0) ; /* String converter */ fullprint << "squareComplexMatrix1 = " << squareComplexMatrix1 << std::endl; /** COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 2 : copy constructor and string converter" << std::endl; /* Copy constructor */ SquareComplexMatrix squareComplexMatrix2(squareComplexMatrix1); /* String converter */ fullprint << "squareComplexMatrix2 = " << squareComplexMatrix2 << std::endl; /** GET DIMENSIONS METHODS */ fullprint << "test 3 : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "squareComplexMatrix1's dimension = " << squareComplexMatrix1.getDimension() << std::endl; /** ASSIGNMENT METHOD */ fullprint << "test 4 : assignment method" << std::endl; /* Assignment method */ SquareComplexMatrix squareComplexMatrix3 ; squareComplexMatrix3 = squareComplexMatrix1 ; fullprint << "squareComplexMatrix3 = " << squareComplexMatrix3 << std::endl; /** CONJUGATE METHOD */ fullprint << "test 5 : conjugate method" << std::endl; /* Check transpose method */ SquareComplexMatrix squareComplexMatrix4 = squareComplexMatrix1.conjugate(); fullprint << "squareComplexMatrix1 conjugate = " << squareComplexMatrix4 << std::endl; /** ADDITION METHOD */ fullprint << "test number 6 : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ SquareComplexMatrix sum1 = squareComplexMatrix1.operator + ( squareComplexMatrix4 ) ; SquareComplexMatrix sum2 = squareComplexMatrix4.operator + ( squareComplexMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** SUBSTRACTION METHOD */ fullprint << "test 7 : substraction method" << std::endl; /* Check substraction method */ SquareComplexMatrix diff = squareComplexMatrix1.operator - ( squareComplexMatrix4 ) ; fullprint << "diff = " << diff << std::endl; /** MATRIX MULTIPLICATION METHOD */ fullprint << "test 8 : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareComplexMatrix prod = squareComplexMatrix1.operator * ( squareComplexMatrix4 ) ; fullprint << "prod = " << prod << std::endl; /** MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 9 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ ComplexCollection pt(2) ; pt[0] = Complex(1.0, 1.0) ; pt[1] = Complex(0.0, 1.0) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ ComplexCollection ptResult = squareComplexMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test 10 : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ Complex s(2.0, 1.0); SquareComplexMatrix scalprod1 = squareComplexMatrix1.operator * (s) ; SquareComplexMatrix scalprod2 = s * squareComplexMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ SquareComplexMatrix scaldiv1 = squareComplexMatrix1.operator / (s) ; SquareComplexMatrix scaldiv2 = squareComplexMatrix1.operator * (1.0 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** ISEMPTY METHOD */ fullprint << "test number twelve : isEmpty method" << std::endl; /* Check method isEmpty */ SquareComplexMatrix squareComplexMatrix5; fullprint << "squareComplexMatrix0 is empty = " << squareComplexMatrix0.isEmpty() << std::endl << "squareComplexMatrix1 is empty = " << squareComplexMatrix1.isEmpty() << std::endl << "squareComplexMatrix5 is empty = " << squareComplexMatrix5.isEmpty() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SquareComplexMatrix_std.expout000066400000000000000000000056211307543307100235740ustar00rootroot00000000000000test 0 : default constructor and string converter squareComplexMatrix0 = class=SquareComplexMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test 1: constructor with size, operator() and string converter squareComplexMatrix1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] test 2 : copy constructor and string converter squareComplexMatrix2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] test 3 : get dimensions methods squareComplexMatrix1's dimension = 2 test 4 : assignment method squareComplexMatrix3 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] test 5 : conjugate method squareComplexMatrix1 conjugate = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(0,-1),(3,-1),(5,-1)] test number 6 : addition method sum1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(0,0),(6,0),(10,0)] sum2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(0,0),(6,0),(10,0)] sum1 equals sum2 = true test 7 : substraction method diff = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,2),(0,2),(0,2),(0,2)] test 8 : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,-3),(2,-4),(20,4),(27,3)] test 9 : multiplication with a numerical point method pt = [(1,1),(0,1)] ptResult = [(-1,5),(-2,6)] test 10 : multiplication and division by a numerical scalar methods scalprod1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,3),(-1,2),(5,5),(9,7)] scalprod2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,3),(-1,2),(5,5),(9,7)] scalprod1 equals scalprod2 = true scaldiv1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.6,0.2),(0.2,0.4),(1.4,-0.2),(2.2,-0.6)] scaldiv2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.6,0.2),(0.2,0.4),(1.4,-0.2),(2.2,-0.6)] scaldiv1 equals scaldiv2 = true test number twelve : isEmpty method squareComplexMatrix0 is empty = true squareComplexMatrix1 is empty = false squareComplexMatrix5 is empty = true openturns-1.9/lib/test/t_SquareMatrix_lapack.cxx000066400000000000000000000052721307543307100221650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the Lapack based methods of the SquareMatrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { SquareMatrix matrix1(2); matrix1.setName("matrix1"); matrix1(0, 0) = 1.0; matrix1(1, 0) = 2.0; matrix1(0, 1) = 5.0; matrix1(1, 1) = 12.0; fullprint << "matrix1 = " << matrix1 << std::endl; Point pt ; pt.add(5.0) ; pt.add(0.0) ; fullprint << "pt = " << pt << std::endl; Point result ; result = matrix1.solveLinearSystem(pt); fullprint << "result = " << result << std::endl; Scalar determinant ; determinant = matrix1.computeDeterminant(); fullprint << "determinant = " << determinant << std::endl; Collection ev(2); ev = matrix1.computeEigenValues(); fullprint << "ev = " << ev << std::endl; SquareComplexMatrix evect(2); ev = matrix1.computeEV(evect); fullprint << "ev=" << ev << std::endl; fullprint << "evect=" << evect << std::endl; fullprint << "evect=\n" << evect.__str__() << std::endl; // Check the high dimension determinant computation SquareMatrix matrix2(3); matrix2(0, 0) = 1.0; matrix2(0, 1) = 2.0; matrix2(0, 2) = 3.0; matrix2(1, 0) = -1.5; matrix2(1, 1) = 2.5; matrix2(1, 2) = -3.5; matrix2(2, 0) = 1.5; matrix2(2, 1) = -3.5; matrix2(2, 2) = 2.5; fullprint << "matrix2=\n" << matrix2.__str__() << std::endl; Scalar sign; Scalar value = matrix2.computeLogAbsoluteDeterminant(sign); fullprint << "log(|det|)=" << value << ", sign=" << sign << std::endl; value = matrix2.computeDeterminant(); fullprint << "det=" << value << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SquareMatrix_lapack.expout000066400000000000000000000012651307543307100227050ustar00rootroot00000000000000matrix1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,2,5,12] pt = class=Point name=Unnamed dimension=2 values=[5,0] result = class=Point name=Unnamed dimension=2 values=[30,-5] determinant = 2 ev = [(0.155711,0),(12.8443,0)] ev=[(0.155711,0),(12.8443,0)] evect=class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(-0.986041,0),(0.166501,0),(-0.388911,0),(-0.921275,0)] evect= [[ (-0.986041,0) (-0.388911,0) ] [ (0.166501,0) (-0.921275,0) ]] matrix2= [[ 1 2 3 ] [ -1.5 2.5 -3.5 ] [ 1.5 -3.5 2.5 ]] log(|det|)=1.50408, sign=-1 det=-4.5 openturns-1.9/lib/test/t_SquareMatrix_std.cxx000066400000000000000000000151311307543307100215170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SquareMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ SquareMatrix squareMatrix0; /* String converter */ fullprint << "squareMatrix0 = " << squareMatrix0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ SquareMatrix squareMatrix1(2); /* Check operator() methods */ squareMatrix1(0, 0) = 1. ; squareMatrix1(1, 0) = 2. ; squareMatrix1(0, 1) = 3. ; squareMatrix1(1, 1) = 4. ; /* String converter */ fullprint << "squareMatrix1 = " << squareMatrix1 << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ SquareMatrix squareMatrix2(squareMatrix1); /* String converter */ fullprint << "squareMatrix2 = " << squareMatrix2 << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "squareMatrix1's nbRows = " << squareMatrix1.getNbRows() << std::endl << "squareMatrix1's nbColumns = " << squareMatrix1.getNbColumns() << std::endl; #if 0 /** TEST NUMBER FOUR : SET DIMENSIONS METHOD */ fullprint << "test number four : set dimensions method" << std::endl; /* Set dimension methods */ squareMatrix0.setUniqueDimension(2); fullprint << "squareMatrix0's nbRows = " << squareMatrix0.getNbRows() << std::endl << "squareMatrix0's nbColumns = " << squareMatrix0.getNbColumns() << std::endl; #endif /** TEST NUMBER FIVE : ASSIGNMENT METHOD */ fullprint << "test number five : assignment method" << std::endl; /* Assignment method */ SquareMatrix squareMatrix3 ; squareMatrix3 = squareMatrix1 ; fullprint << "squareMatrix3 = " << squareMatrix3 << std::endl; /** TEST NUMBER SIX : TRANSPOSITION METHOD */ fullprint << "test number six : transposition method" << std::endl; /* Check transpose method */ SquareMatrix squareMatrix4 = squareMatrix1.transpose(); fullprint << "squareMatrix1 transposed = " << squareMatrix4 << std::endl; fullprint << "squareMatrix1 transposed = " << squareMatrix1.transpose() << std::endl; /** TEST NUMBER SEVEN : ADDITION METHOD */ fullprint << "test number seven : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ SquareMatrix sum1 = squareMatrix1.operator + ( squareMatrix4 ) ; SquareMatrix sum2 = squareMatrix4.operator + ( squareMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** TEST NUMBER EIGHT : SUBSTRACTION METHOD */ fullprint << "test number eight : substraction method" << std::endl; /* Check substraction method */ SquareMatrix diff = squareMatrix1.operator - ( squareMatrix4 ) ; fullprint << "diff = " << diff << std::endl; /** TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD */ fullprint << "test number nine : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareMatrix prod = squareMatrix1.operator * ( squareMatrix4 ) ; fullprint << "prod = " << prod << std::endl; /** TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test number ten : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ Point ptResult = squareMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test number eleven : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ double s = 3.; SquareMatrix scalprod1 = squareMatrix1.operator * (s) ; SquareMatrix scalprod2 = s * squareMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ SquareMatrix scaldiv1 = squareMatrix1.operator / (s) ; SquareMatrix scaldiv2 = squareMatrix1.operator * (1 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** TEST NUMBER TWELVE : ISEMPTY METHOD */ fullprint << "test number twelve : isEmpty method" << std::endl; /* Check method isEmpty */ SquareMatrix squareMatrix5; fullprint << "squareMatrix0 is empty = " << squareMatrix0.isEmpty() << std::endl << "squareMatrix1 is empty = " << squareMatrix1.isEmpty() << std::endl << "squareMatrix5 is empty = " << squareMatrix5.isEmpty() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SquareMatrix_std.expout000066400000000000000000000054751307543307100222530ustar00rootroot00000000000000test number zero : default constructor and string converter squareMatrix0 = class=SquareMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter squareMatrix1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number two : copy constructor and string converter squareMatrix2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number three : get dimensions methods squareMatrix1's nbRows = 2 squareMatrix1's nbColumns = 2 test number five : assignment method squareMatrix3 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number six : transposition method squareMatrix1 transposed = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] squareMatrix1 transposed = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] test number seven : addition method sum1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum1 equals sum2 = true test number eight : substraction method diff = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,-1,1,0] test number nine : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,14,14,20] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,10] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod1 equals scalprod2 = true scaldiv1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv1 equals scaldiv2 = true test number twelve : isEmpty method squareMatrix0 is empty = true squareMatrix1 is empty = false squareMatrix5 is empty = true openturns-1.9/lib/test/t_Staircase_std.cxx000066400000000000000000000063761307543307100210230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Staircase for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 1; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; CorrelationMatrix R = IdentityMatrix(dim); Normal distribution1(meanPoint, sigma, R); // Instanciate another distribution object meanPoint[0] = -1.5; sigma[0] = 4.0; Normal distribution2(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 2000; UnsignedInteger nPoints = 20; Sample sample1(distribution1.getSample( size )); Sample sample2(distribution2.getSample( size )); // Construct empirical CDF for each sample Sample data1(nPoints, 2), data2(nPoints, 2); Point cursor1(2); Point cursor2(2); Scalar count1; Scalar count2; for(UnsignedInteger i = 0; i < nPoints; i++) { cursor1[0] = 13.*i / nPoints - 6.5; count1 = 0; cursor2[0] = 24.*i / nPoints - 13.5; count2 = 0; for(UnsignedInteger j = 0; j < size; j++) { if(sample1[j][0] < cursor1[0]) count1++; if(sample2[j][0] < cursor2[0]) count2++; } cursor1[1] = count1 / size; cursor2[1] = count2 / size; data1[i] = cursor1; data2[i] = cursor2; } // Create an empty graph Graph myGraph("Some curves", "x1", "x2", true, "bottomright"); // Create the first staircase Staircase myStaircase1(data1, "blue", "solid", "s", ""); Staircase myStaircase1b(myStaircase1); myStaircase1b.setPattern("S"); myStaircase1b.setColor("green"); myStaircase1b.setLineStyle("dashed"); myStaircase1b.setLegend("eCDF1b, pat=S"); // Then, draw it myGraph.add(myStaircase1); myGraph.add(myStaircase1b); myGraph.draw("Graph_Staircase_a_OT.png"); // Check that the correct files have been generated by computing their checksum // Create the second staircase Staircase myStaircase2(data2, "red", "dashed", "S", "eCDF2, pat=S"); // Add it to the graph and draw everything myGraph.add(myStaircase2); myGraph.draw("Graph_Staircase_b_OT.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Staircase_std.expout000066400000000000000000000000001307543307100215170ustar00rootroot00000000000000openturns-1.9/lib/test/t_StandardDistributionPolynomialFactory_std.cxx000066400000000000000000000065501307543307100266330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class StandardDistributionPolynomialFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; UniVariatePolynomial clean(const UniVariatePolynomial & polynomial) { Point coefficients(polynomial.getCoefficients()); for (UnsignedInteger i = 0; i < coefficients.getDimension(); ++i) if (std::abs(coefficients[i]) < 1.0e-10) coefficients[i] = 0.0; return coefficients; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger iMax = 5; Collection distributionCollection; distributionCollection.add(Laplace(1.0, 0.0)); distributionCollection.add(Logistic(0.0, 1.0)); distributionCollection.add(Normal(0.0, 1.0)); distributionCollection.add(Normal(1.0, 1.0)); distributionCollection.add(Rayleigh(1.0)); distributionCollection.add(Student(22.0)); distributionCollection.add(Triangular(-1.0, 0.3, 1.0)); distributionCollection.add(Uniform(-1.0, 1.0)); distributionCollection.add(Uniform(-1.0, 3.0)); distributionCollection.add(Weibull(1.0, 3.0)); distributionCollection.add(Beta(1.0, 3.0, -1.0, 1.0)); distributionCollection.add(Beta(0.5, 1.0, -1.0, 1.0)); distributionCollection.add(Beta(0.5, 1.0, -2.0, 3.0)); distributionCollection.add(Gamma(1.0, 3.0)); distributionCollection.add(Arcsine()); for (UnsignedInteger n = 0; n < distributionCollection.getSize(); ++n) { const Distribution distribution(distributionCollection[n]); const String name(distribution.getImplementation()->getClassName()); // Must use this construction for some compilers StandardDistributionPolynomialFactory polynomialFactory = StandardDistributionPolynomialFactory(AdaptiveStieltjesAlgorithm(distribution)); fullprint << "polynomialFactory(" << name << "=" << polynomialFactory << std::endl; for (UnsignedInteger i = 0; i < iMax; ++i) fullprint << name << " polynomial(" << i << ")=" << clean(polynomialFactory.build(i)).__str__() << std::endl; Point roots(polynomialFactory.getRoots(iMax - 1)); fullprint << name << " polynomial(" << iMax - 1 << ") roots=" << roots << std::endl; Point weights; Point nodes(polynomialFactory.getNodesAndWeights(iMax - 1, weights)); fullprint << name << " polynomial(" << iMax - 1 << ") nodes=" << nodes << " and weights=" << weights << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StandardDistributionPolynomialFactory_std.expout000066400000000000000000000360621307543307100273560ustar00rootroot00000000000000polynomialFactory(Laplace=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Laplace name=Laplace dimension=1 lambda=1 mu=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-2]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,2] isElliptical=true Laplace polynomial(0)=1 Laplace polynomial(1)=0.707107 * X Laplace polynomial(2)=-0.447214 + 0.223607 * X^2 Laplace polynomial(3)=-0.57735 * X + 0.0481125 * X^3 Laplace polynomial(4)=0.329735 - 0.25646 * X^2 + 0.00763275 * X^4 Laplace polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-5.67987,-1.15719,1.15719,5.67987] Laplace polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-5.67987,-1.15719,1.15719,5.67987] and weights=class=Point name=Unnamed dimension=4 values=[0.0106869,0.489313,0.489313,0.0106869] polynomialFactory(Logistic=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Logistic name=Logistic dimension=1 alpha=0 beta=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-3.28987]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,3.28987] isElliptical=true Logistic polynomial(0)=1 Logistic polynomial(1)=0.551329 * X Logistic polynomial(2)=-0.559017 + 0.169921 * X^2 Logistic polynomial(3)=-0.491265 * X + 0.035554 * X^3 Logistic polynomial(4)=0.421875 - 0.205809 * X^2 + 0.00561421 * X^4 Logistic polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-5.87189,-1.47628,1.47628,5.87189] Logistic polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-5.87189,-1.47628,1.47628,5.87189] and weights=class=Point name=Unnamed dimension=4 values=[0.0171899,0.48281,0.48281,0.0171899] polynomialFactory(Normal=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Normal polynomial(0)=1 Normal polynomial(1)=X Normal polynomial(2)=-0.707107 + 0.707107 * X^2 Normal polynomial(3)=-1.22474 * X + 0.408248 * X^3 Normal polynomial(4)=0.612372 - 1.22474 * X^2 + 0.204124 * X^4 Normal polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-2.33441,-0.741964,0.741964,2.33441] Normal polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-2.33441,-0.741964,0.741964,2.33441] and weights=class=Point name=Unnamed dimension=4 values=[0.0458759,0.454124,0.454124,0.0458759] polynomialFactory(Normal=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1,0],class=Point name=Unnamed dimension=3 values=[1,-1,-1]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1] isElliptical=true Normal polynomial(0)=1 Normal polynomial(1)=-1 + X Normal polynomial(2)=-1.41421 * X + 0.707107 * X^2 Normal polynomial(3)=0.816497 - 1.22474 * X^2 + 0.408248 * X^3 Normal polynomial(4)=-0.408248 + 1.63299 * X + 4.02503e-10 * X^2 - 0.816497 * X^3 + 0.204124 * X^4 Normal polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-1.33441,0.258036,1.74196,3.33441] Normal polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-1.33441,0.258036,1.74196,3.33441] and weights=class=Point name=Unnamed dimension=4 values=[0.0458759,0.454124,0.454124,0.0458759] polynomialFactory(Rayleigh=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Rayleigh name=Rayleigh dimension=1 sigma=1 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1.25331,0],class=Point name=Unnamed dimension=3 values=[1,-1.66678,-0.429204]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.429204] isElliptical=false Rayleigh polynomial(0)=1 Rayleigh polynomial(1)=-1.91306 + 1.5264 * X Rayleigh polynomial(2)=2.84565 - 5.00639 * X + 1.71446 * X^2 Rayleigh polynomial(3)=-3.78384 + 10.859 * X - 7.93394 * X^2 + 1.60694 * X^3 Rayleigh polynomial(4)=4.72402 - 19.4426 * X + 22.5685 * X^2 - 9.59251 * X^3 + 1.32173 * X^4 Rayleigh polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[0.396121,1.17673,2.20107,3.48361] Rayleigh polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[0.396121,1.17673,2.20107,3.48361] and weights=class=Point name=Unnamed dimension=4 values=[0.227998,0.538465,0.221578,0.0119592] polynomialFactory(Student=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Student name=Student dimension=1 nu=22 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-1.1]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1.1] isElliptical=true Student polynomial(0)=1 Student polynomial(1)=0.953463 * X Student polynomial(2)=-0.654654 + 0.59514 * X^2 Student polynomial(3)=-1.01929 * X + 0.277989 * X^3 Student polynomial(4)=0.51299 - 0.839438 * X^2 + 0.10175 * X^4 Student polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-2.75415,-0.815266,0.815266,2.75415] Student polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-2.75415,-0.815266,0.815266,2.75415] and weights=class=Point name=Unnamed dimension=4 values=[0.0314522,0.468548,0.468548,0.0314522] polynomialFactory(Triangular=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.1,0],class=Point name=Unnamed dimension=3 values=[1,0.0153398,-0.171667]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.171667] isElliptical=false Triangular polynomial(0)=1 Triangular polynomial(1)=-0.241355 + 2.41355 * X Triangular polynomial(2)=-0.877334 - 0.428839 * X + 5.06542 * X^2 Triangular polynomial(3)=0.259575 - 4.13679 * X - 1.01753 * X^2 + 10.3656 * X^3 Triangular polynomial(4)=0.878133 + 0.925615 * X - 13.5192 * X^2 - 1.99648 * X^3 + 21.1809 * X^4 Triangular polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.742936,-0.235772,0.310364,0.762603] Triangular polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.742936,-0.235772,0.310364,0.762603] and weights=class=Point name=Unnamed dimension=4 values=[0.0810886,0.334646,0.456437,0.127828] polynomialFactory(Uniform=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 Uniform polynomial(0)=1 Uniform polynomial(1)=1.73205 * X Uniform polynomial(2)=-1.11803 + 3.3541 * X^2 Uniform polynomial(3)=-3.96863 * X + 6.61438 * X^3 Uniform polynomial(4)=1.125 - 11.25 * X^2 + 13.125 * X^4 Uniform polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.861136,-0.339981,0.339981,0.861136] Uniform polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.861136,-0.339981,0.339981,0.861136] and weights=class=Point name=Unnamed dimension=4 values=[0.173927,0.326073,0.326073,0.173927] polynomialFactory(Uniform=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Uniform name=Uniform dimension=1 a=-1 b=3 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1,0],class=Point name=Unnamed dimension=3 values=[1,-1,-1.33333]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1.33333] isElliptical=true Uniform polynomial(0)=1 Uniform polynomial(1)=-0.866025 + 0.866025 * X Uniform polynomial(2)=-0.279508 - 1.67705 * X + 0.838525 * X^2 Uniform polynomial(3)=1.15752 + 0.496078 * X - 2.48039 * X^2 + 0.826797 * X^3 Uniform polynomial(4)=-0.867188 + 2.34375 * X + 2.10938 * X^2 - 3.28125 * X^3 + 0.820313 * X^4 Uniform polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.722273,0.320038,1.67996,2.72227] Uniform polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.722273,0.320038,1.67996,2.72227] and weights=class=Point name=Unnamed dimension=4 values=[0.173927,0.326073,0.326073,0.173927] polynomialFactory(Weibull=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Weibull name=Weibull dimension=1 alpha=1 beta=3 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.89298,0],class=Point name=Unnamed dimension=3 values=[1,-0.947537,-0.105333]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.105333] isElliptical=false Weibull polynomial(0)=1 Weibull polynomial(1)=-2.75144 + 3.08119 * X Weibull polynomial(2)=5.3921 - 13.3967 * X + 7.27876 * X^2 Weibull polynomial(3)=-8.91794 + 36.5275 * X - 42.8504 * X^2 + 14.9827 * X^3 Weibull polynomial(4)=13.3264 - 79.2309 * X + 149.529 * X^2 - 111.023 * X^3 + 28.1044 * X^4 Weibull polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[0.315842,0.737023,1.19993,1.69759] Weibull polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[0.315842,0.737023,1.19993,1.69759] and weights=class=Point name=Unnamed dimension=4 values=[0.109605,0.491205,0.364361,0.03483] polynomialFactory(Beta=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=JacobiFactory alpha=1 beta=0 measure=class=Beta name=Beta dimension=1 r=1 t=3 a=-1 b=1 Beta polynomial(0)=1 Beta polynomial(1)=0.707107 + 2.12132 * X Beta polynomial(2)=-0.866025 + 1.73205 * X + 4.33013 * X^2 Beta polynomial(3)=-0.75 - 3.75 * X + 3.75 * X^2 + 8.75 * X^3 Beta polynomial(4)=0.838525 - 3.3541 * X - 11.7394 * X^2 + 7.82624 * X^3 + 17.609 * X^4 Beta polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.885792,-0.446314,0.167181,0.72048] Beta polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.885792,-0.446314,0.167181,0.72048] and weights=class=Point name=Unnamed dimension=4 values=[0.271014,0.406929,0.259695,0.0623619] polynomialFactory(Beta=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 Beta polynomial(0)=1 Beta polynomial(1)=1.41421 * X Beta polynomial(2)=-1.41421 + 2.82843 * X^2 Beta polynomial(3)=-4.24264 * X + 5.65685 * X^3 Beta polynomial(4)=1.41421 - 11.3137 * X^2 + 11.3137 * X^4 Beta polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.92388,-0.382683,0.382683,0.92388] Beta polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.92388,-0.382683,0.382683,0.92388] and weights=class=Point name=Unnamed dimension=4 values=[0.25,0.25,0.25,0.25] polynomialFactory(Beta=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Beta name=Beta dimension=1 r=0.5 t=1 a=-2 b=3 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.5,0],class=Point name=Unnamed dimension=3 values=[1,-0.5,-3.125]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,3.125] isElliptical=true Beta polynomial(0)=1 Beta polynomial(1)=-0.282843 + 0.565685 * X Beta polynomial(2)=-1.30108 - 0.452548 * X + 0.452548 * X^2 Beta polynomial(3)=0.803273 - 1.42553 * X - 0.543058 * X^2 + 0.362039 * X^3 Beta polynomial(4)=0.979767 + 1.66538 * X - 1.37575 * X^2 - 0.579262 * X^3 + 0.289631 * X^4 Beta polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-1.8097,-0.456709,1.45671,2.8097] Beta polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-1.8097,-0.456709,1.45671,2.8097] and weights=class=Point name=Unnamed dimension=4 values=[0.25,0.25,0.25,0.25] polynomialFactory(Gamma=class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Gamma name=Gamma dimension=1 k=1 lambda=3 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.333333,0],class=Point name=Unnamed dimension=3 values=[1,-1,-0.111111]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.111111] isElliptical=false Gamma polynomial(0)=1 Gamma polynomial(1)=-1 + 3 * X Gamma polynomial(2)=1 - 6 * X + 4.5 * X^2 Gamma polynomial(3)=-1 + 9 * X - 13.5 * X^2 + 4.5 * X^3 Gamma polynomial(4)=1 - 12 * X + 27.0001 * X^2 - 18.0001 * X^3 + 3.37502 * X^4 Gamma polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[0.107516,0.58192,1.51221,3.13169] Gamma polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[0.107516,0.58192,1.51221,3.13169] and weights=class=Point name=Unnamed dimension=4 values=[0.603154,0.357419,0.0388879,0.000539296] polynomialFactory(Arcsine=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 Arcsine polynomial(0)=1 Arcsine polynomial(1)=1.41421 * X Arcsine polynomial(2)=-1.41421 + 2.82843 * X^2 Arcsine polynomial(3)=-4.24264 * X + 5.65685 * X^3 Arcsine polynomial(4)=1.41421 - 11.3137 * X^2 + 11.3137 * X^4 Arcsine polynomial(4) roots=class=Point name=Unnamed dimension=4 values=[-0.92388,-0.382683,0.382683,0.92388] Arcsine polynomial(4) nodes=class=Point name=Unnamed dimension=4 values=[-0.92388,-0.382683,0.382683,0.92388] and weights=class=Point name=Unnamed dimension=4 values=[0.25,0.25,0.25,0.25] openturns-1.9/lib/test/t_StandardEvent_std.cxx000066400000000000000000000123401307543307100216330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of StandardEvent class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(4); input[0] = "E"; input[1] = "F"; input[2] = "L"; input[3] = "I"; Function myFunction(input, Description(1, "d"), Description(1, "-F*L^3/(3*E*I)")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension dim */ Point mean(dim, 0.0); Point sigma(dim, 1.0); Normal myDistribution(mean, sigma, IdentityMatrix(dim)); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create a StandardEvent from this RandomVector */ StandardEvent myStandardEvent(output, Less(), 1.0); fullprint << "myStandardEvent=" << myStandardEvent << std::endl; /* We compute one realization of the event */ fullprint << "myStandardEvent realization (as a RandomVector)=" << myStandardEvent.RandomVector::getRealization() << std::endl; fullprint << "myStandardEvent antecedent realization (as a RandomVector)=" << myStandardEvent.RandomVector::getImplementation()->getAntecedent()->getRealization() << std::endl; fullprint << "myStandardEvent realization=" << myStandardEvent.getRealization() << std::endl; fullprint << "myStandardEvent antecedent realization=" << myStandardEvent.getImplementation()->getAntecedent()->getRealization() << std::endl; fullprint << "myStandardEvent antecedent distribution cdf=" << myStandardEvent.getImplementation()->getAntecedent()->getDistribution().computeCDF(Point(dim, 1.0)) << std::endl; /* We compute a sample of the event */ fullprint << "myStandardEvent sample=" << myStandardEvent.getSample(10) << std::endl; // Build a standard event based on an event CorrelationMatrix R = IdentityMatrix(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal myDistribution2(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect2(myDistribution2); /* We create a composite random vector */ RandomVector output2(myFunction, vect2); /* We create an Event from this RandomVector */ Event myEvent(output2, Less(), 1.0); /* Create a StandardEvent based on this Event */ StandardEvent stdEvent(myEvent); /* Check if the StandardEvent is really a StandardEvent */ /* Get a sample from the second antecedent of the standard event */ UnsignedInteger size = 2000; Sample sample(stdEvent.getImplementation()->getAntecedent()->getSample(size)); /* Check if the sample mean is nearly the null vector */ fullprint << "sample mean=" << sample.computeMean() << std::endl; /* Check if the sample covariance is nearly the identity matrix */ fullprint << "sample covariance=" << sample.computeCovariance() << std::endl; /* Check if the failure probabilities are the same */ fullprint << "Failure probability (Event)=" << myEvent.getSample(size).computeMean() << std::endl; fullprint << "Failure probability (StandardEvent)=" << stdEvent.getSample(size).computeMean() << std::endl; Sample x(3, dim); Point point(dim); point[0] = 1.0; point[1] = 0.5; point[2] = 1.0; point[3] = 0.5; x[0] = point; point[0] = 2.0; point[1] = 1.0; point[2] = 2.0; point[3] = 1.0; x[1] = point; point[0] = 3.0; point[1] = 1.5; point[2] = 3.0; point[3] = 1.5; x[2] = point; Point p(3); p[0] = 0.0; p[1] = 0.3; p[2] = 0.325; UserDefined myDistribution3(x, p); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect3(myDistribution3); /* We create a composite random vector */ RandomVector output3(myFunction, vect3); /* We try to create a StandardEvent from this RandomVector */ try { StandardEvent myStandardEvent3(output3, Less(), 1.0); } catch(InvalidArgumentException &ex) { fullprint << "(This error is on purpose) Error trying to build myStandardEvent3" << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StandardEvent_std.expout000066400000000000000000000047231307543307100223630ustar00rootroot00000000000000myStandardEvent=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=1 myStandardEvent realization (as a RandomVector)=class=Point name=Unnamed dimension=1 values=[1] myStandardEvent antecedent realization (as a RandomVector)=class=Point name=Unnamed dimension=4 values=[-2.18139,0.350042,-0.355007,1.43725] myStandardEvent realization=class=Point name=Unnamed dimension=1 values=[1] myStandardEvent antecedent realization=class=Point name=Unnamed dimension=4 values=[-2.29006,-1.28289,-1.31178,-0.0907838] myStandardEvent antecedent distribution cdf=0.501067 myStandardEvent sample=class=Sample name=EventRandomVector sample implementation=class=SampleImplementation name=EventRandomVector sample size=10 dimension=1 description=[d] data=[[1],[1],[1],[0],[1],[1],[1],[1],[0],[0]] sample mean=class=Point name=Unnamed dimension=4 values=[0.0227422,-0.024877,-0.026565,-0.0219003] sample covariance=class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.986028,-0.018174,-0.0104775,0.00791811,-0.018174,1.01902,-0.0103922,0.00475431,-0.0104775,-0.0103922,0.974754,-0.0277212,0.00791811,0.00475431,-0.0277212,1.04267] Failure probability (Event)=class=Point name=Unnamed dimension=1 values=[0.864] Failure probability (StandardEvent)=class=Point name=Unnamed dimension=1 values=[0.8795] (This error is on purpose) Error trying to build myStandardEvent3 openturns-1.9/lib/test/t_StationaryCovarianceModelFactory_std.cxx000066400000000000000000000051241307543307100255340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class StationaryCovarianceModelFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" #include "openturns/CovarianceModel.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Dimension of the input model // Size of the TimeGrid const UnsignedInteger size = 128; const UnsignedInteger dimension = 1; const RegularGrid timeGrid(0.0, 0.1, size); const Point amplitude(dimension, 1.0); const Point scale(dimension, 1.0); ExponentialCauchy model(scale, amplitude); SpectralGaussianProcess myProcess(model, timeGrid); // Create a sample of time series const UnsignedInteger N = 1000; ProcessSample sample(myProcess.getSample(N)); // Create the spectral density factory WelchFactory spectralFactory; // Covariance Factory creation StationaryCovarianceModelFactory myFactory(spectralFactory); // Build a CovarianceModel using the Welch method UserDefinedStationaryCovarianceModel myCovarianceModel(myFactory.buildAsUserDefinedStationaryCovarianceModel(sample)); // Get the time grid of the model RegularGrid myTimeGrid(myCovarianceModel.getTimeGrid()); for (UnsignedInteger i = 0 ; i < myTimeGrid.getN() ; ++i) { const Scalar t = myTimeGrid.getValue(i); const Scalar estimatedValue = myCovarianceModel(t)(0, 0); const Scalar modelValue = model.computeCovariance(t)(0, 0); fullprint << "Covariance C(" << t << ") : "; fullprint << " evaluation = " << estimatedValue << " model = " << modelValue << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StationaryCovarianceModelFactory_std.expout000066400000000000000000000076451307543307100262700ustar00rootroot00000000000000Covariance C(0.05) : evaluation = 0.952813 model = 0.951229 Covariance C(0.15) : evaluation = 0.851701 model = 0.860708 Covariance C(0.25) : evaluation = 0.774636 model = 0.778801 Covariance C(0.35) : evaluation = 0.69505 model = 0.704688 Covariance C(0.45) : evaluation = 0.629322 model = 0.637628 Covariance C(0.55) : evaluation = 0.563779 model = 0.57695 Covariance C(0.65) : evaluation = 0.509125 model = 0.522046 Covariance C(0.75) : evaluation = 0.455973 model = 0.472367 Covariance C(0.85) : evaluation = 0.411085 model = 0.427415 Covariance C(0.95) : evaluation = 0.366338 model = 0.386741 Covariance C(1.05) : evaluation = 0.328287 model = 0.349938 Covariance C(1.15) : evaluation = 0.292459 model = 0.316637 Covariance C(1.25) : evaluation = 0.263724 model = 0.286505 Covariance C(1.35) : evaluation = 0.235846 model = 0.25924 Covariance C(1.45) : evaluation = 0.212404 model = 0.23457 Covariance C(1.55) : evaluation = 0.190039 model = 0.212248 Covariance C(1.65) : evaluation = 0.172422 model = 0.19205 Covariance C(1.75) : evaluation = 0.155391 model = 0.173774 Covariance C(1.85) : evaluation = 0.142235 model = 0.157237 Covariance C(1.95) : evaluation = 0.129403 model = 0.142274 Covariance C(2.05) : evaluation = 0.118796 model = 0.128735 Covariance C(2.15) : evaluation = 0.107692 model = 0.116484 Covariance C(2.25) : evaluation = 0.0995027 model = 0.105399 Covariance C(2.35) : evaluation = 0.0911084 model = 0.0953692 Covariance C(2.45) : evaluation = 0.0844851 model = 0.0862936 Covariance C(2.55) : evaluation = 0.0779474 model = 0.0780817 Covariance C(2.65) : evaluation = 0.0730345 model = 0.0706512 Covariance C(2.75) : evaluation = 0.0668881 model = 0.0639279 Covariance C(2.85) : evaluation = 0.0620959 model = 0.0578443 Covariance C(2.95) : evaluation = 0.0563529 model = 0.0523397 Covariance C(3.05) : evaluation = 0.052184 model = 0.0473589 Covariance C(3.15) : evaluation = 0.0479696 model = 0.0428521 Covariance C(3.25) : evaluation = 0.0455056 model = 0.0387742 Covariance C(3.35) : evaluation = 0.0420295 model = 0.0350844 Covariance C(3.45) : evaluation = 0.0390671 model = 0.0317456 Covariance C(3.55) : evaluation = 0.0356304 model = 0.0287246 Covariance C(3.65) : evaluation = 0.0338527 model = 0.0259911 Covariance C(3.75) : evaluation = 0.0316484 model = 0.0235177 Covariance C(3.85) : evaluation = 0.0299391 model = 0.0212797 Covariance C(3.95) : evaluation = 0.0270063 model = 0.0192547 Covariance C(4.05) : evaluation = 0.0248966 model = 0.0174224 Covariance C(4.15) : evaluation = 0.0224647 model = 0.0157644 Covariance C(4.25) : evaluation = 0.0209557 model = 0.0142642 Covariance C(4.35) : evaluation = 0.0184385 model = 0.0129068 Covariance C(4.45) : evaluation = 0.0164608 model = 0.0116786 Covariance C(4.55) : evaluation = 0.013993 model = 0.0105672 Covariance C(4.65) : evaluation = 0.0126192 model = 0.0095616 Covariance C(4.75) : evaluation = 0.011048 model = 0.0086517 Covariance C(4.85) : evaluation = 0.0100203 model = 0.00782838 Covariance C(4.95) : evaluation = 0.00859069 model = 0.00708341 Covariance C(5.05) : evaluation = 0.00806562 model = 0.00640933 Covariance C(5.15) : evaluation = 0.00721709 model = 0.0057994 Covariance C(5.25) : evaluation = 0.00722149 model = 0.00524752 Covariance C(5.35) : evaluation = 0.0066365 model = 0.00474815 Covariance C(5.45) : evaluation = 0.00684391 model = 0.0042963 Covariance C(5.55) : evaluation = 0.00640845 model = 0.00388746 Covariance C(5.65) : evaluation = 0.00657612 model = 0.00351752 Covariance C(5.75) : evaluation = 0.00607451 model = 0.00318278 Covariance C(5.85) : evaluation = 0.00621686 model = 0.0028799 Covariance C(5.95) : evaluation = 0.0056124 model = 0.00260584 Covariance C(6.05) : evaluation = 0.00513386 model = 0.00235786 Covariance C(6.15) : evaluation = 0.00374051 model = 0.00213348 Covariance C(6.25) : evaluation = 0.00241149 model = 0.00193045 Covariance C(6.35) : evaluation = 0.00056868 model = 0.00174675 openturns-1.9/lib/test/t_StrongMaximumTest_other.cxx000066400000000000000000000127541307543307100231030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of StrongMaximumTest class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; void printSample(String name, Sample sample) { OStream fullprint(std::cout); fullprint << name << "=[" ; for (UnsignedInteger counter = 0; counter < sample.getSize(); counter++) { if (counter != 0) fullprint << ";"; fullprint << "[" ; Point point(sample[counter]); for (UnsignedInteger coordinate = 0; coordinate < point.getDimension(); coordinate++) { if (coordinate != 0) fullprint << ","; fullprint << point[coordinate]; } fullprint << "]" ; } fullprint << "];" << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(2); input[0] = "x1"; input[1] = "x2"; Function myFunction(input, Description(1, "y1"), Description(1, "(x1-0.6)*(x1-0.6)-x2*x2")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create a StandardEvent from this RandomVector : RandomVector > 0.0 */ double seuil(40); StandardEvent myStandardEvent(output, Greater(), seuil); /* We create the design point */ Point designPoint(dim, 0.0); double C(0.6); designPoint[0] = - sqrt(seuil) + C; /* We create the "second" design point */ Point pseudoDesignPoint(dim, 0.0); pseudoDesignPoint[0] = sqrt(seuil) + C; Scalar importanceLevel = 0.01; Scalar accuracyLevel = 2; Scalar confidenceLevel = 0.999; StrongMaximumTest myTest(myStandardEvent, designPoint, importanceLevel, accuracyLevel, confidenceLevel); fullprint << "myTest=" << myTest << std::endl; myTest.run(); fullprint << "Beta = " << designPoint.norm() << std::endl; fullprint << "Discretised sphere radius = " << designPoint.norm() * (1 + myTest.getAccuracyLevel() * myTest.getDeltaEpsilon()) << std::endl; fullprint << "PointNumber = " << myTest.getPointNumber() << std::endl; fullprint << "DesignPointVicinity Angle (rad)= " << acos(myTest.getDesignPointVicinity()) << std::endl; fullprint << "DesignPointVicinity Angle (deg)= " << acos(myTest.getDesignPointVicinity()) * 180 / M_PI << std::endl; fullprint << "Near Design Point Verifying Event Points Number = " << (myTest.getNearDesignPointVerifyingEventPoints()).getSize() << std::endl; fullprint << "Near Design Point Violating Event Points Number = " << (myTest.getNearDesignPointViolatingEventPoints()).getSize() << std::endl; fullprint << "Far Design Point Verifying Event Points Number = " << (myTest.getFarDesignPointVerifyingEventPoints()).getSize() << std::endl; fullprint << "Far Design Point Violating Event Points Number = " << (myTest.getFarDesignPointViolatingEventPoints()).getSize() << std::endl; fullprint << "//////" << std::endl; // parameters of the test fullprint << "importanceLevel=" << myTest.getImportanceLevel() << std::endl; fullprint << "accuracyLevel=" << myTest.getAccuracyLevel() << std::endl; fullprint << "confidenceLevel=" << myTest.getConfidenceLevel() << std::endl; // design point coordinates fullprint << "standardSpaceDesignPoint=[" << myTest.getStandardSpaceDesignPoint()[0] << "," << myTest.getStandardSpaceDesignPoint()[1] << "]" << std::endl; // pseudo design point coordinates fullprint << "pseudoStandardSpaceDesignPoint=[" << pseudoDesignPoint[0] << "," << pseudoDesignPoint[1] << "]" << std::endl; // cout of the coordinates of the points of the 4 samples /* NearDesignPointVerifyingEventPoints */ printSample("NearDesignPointVerifyingEventPointsSample", myTest.getNearDesignPointVerifyingEventPoints()); /* NearDesignPointViolatingEventPoints */ printSample("NearDesignPointViolatingEventPoints", myTest.getNearDesignPointViolatingEventPoints()); /* FarDesignPointVerifyingEventPoints */ printSample("FarDesignPointVerifyingEventPoints", myTest.getFarDesignPointVerifyingEventPoints()); /* FarDesignPointViolatingEventPoints */ printSample("FarDesignPointViolatingEventPoints", myTest.getFarDesignPointViolatingEventPoints()); // fullprint << "myTest (after run())=" << myTest << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StrongMaximumTest_other.expout000066400000000000000000000077111307543307100236220ustar00rootroot00000000000000myTest=class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=40 standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[-5.72456,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999 designPointVicinity=0.791343 pointNumber=44 deltaEpsilon=0.131837 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Beta = 5.72456 Discretised sphere radius = 7.23397 PointNumber = 44 DesignPointVicinity Angle (rad)= 0.657794 DesignPointVicinity Angle (deg)= 37.6888 Near Design Point Verifying Event Points Number = 4 Near Design Point Violating Event Points Number = 3 Far Design Point Verifying Event Points Number = 2 Far Design Point Violating Event Points Number = 35 ////// importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999 standardSpaceDesignPoint=[-5.72456,0] pseudoStandardSpaceDesignPoint=[6.92456,0] NearDesignPointVerifyingEventPointsSample=[[-7.21671,-0.499444];[-7.05832,1.58444];[-7.1426,1.14616];[-6.86072,-2.29368]]; NearDesignPointViolatingEventPoints=[[-6.2889,3.57492];[-6.32583,3.50917];[-6.31116,-3.53549]]; FarDesignPointVerifyingEventPoints=[[7.16407,-1.00327];[7.2215,-0.424714]]; FarDesignPointViolatingEventPoints=[[3.1322,-6.52071];[-1.22002,-7.13035];[-5.66195,4.50252];[4.24379,5.85838];[-5.57931,-4.60453];[6.99265,-1.85289];[1.39934,7.09734];[0.647379,-7.20495];[5.17074,5.05904];[-1.73469,7.02291];[5.83093,4.28143];[-2.47171,6.7986];[6.32207,3.51594];[4.65433,-5.53783];[-3.28016,-6.44755];[0.93969,7.17268];[-2.46069,6.8026];[0.476314,7.21828];[5.01878,-5.20983];[0.864982,-7.18207];[5.58983,4.59176];[6.33436,-3.49375];[6.52428,-3.12477];[6.14534,-3.81643];[-2.023,6.94535];[-3.57177,-6.2907];[0.833737,-7.18577];[6.78515,2.50842];[-4.20113,5.88905];[6.13075,3.83982];[-2.11176,-6.91888];[6.85275,2.31738];[-4.54237,-5.63004];[-0.805734,7.18896];[5.37171,-4.84511]]; openturns-1.9/lib/test/t_StrongMaximumTest_std.cxx000066400000000000000000000126501307543307100225470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of StrongMaximumTest class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; void printSample(String name, Sample sample) { OStream fullprint(std::cout); fullprint << name << "=[" ; for (UnsignedInteger counter = 0; counter < sample.getSize(); counter++) { if (counter != 0) fullprint << ";"; fullprint << "[" ; Point point(sample[counter]); for (UnsignedInteger coordinate = 0; coordinate < point.getDimension(); coordinate++) { if (coordinate != 0) fullprint << ","; fullprint << point[coordinate]; } fullprint << "]" ; } fullprint << "];" << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* We create a numerical math function */ Description input(2); input[0] = "x1"; input[1] = "x2"; Function myFunction(input, Description(1, "y1"), Description(1, "(x1-0.3)*(x1-0.3)-x2*x2")); UnsignedInteger dim = myFunction.getInputDimension(); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create a StandardEvent from this RandomVector : RandomVector > 0.0 */ double seuil(10); StandardEvent myStandardEvent(output, Greater(), seuil); /* We create the design point */ Point designPoint(dim, 0.0); double C(0.3); designPoint[0] = - sqrt(seuil) + C; /* We create the "second" design point */ Point pseudoDesignPoint(dim, 0.0); pseudoDesignPoint[0] = sqrt(seuil) + C; Scalar importanceLevel = 0.01; Scalar accuracyLevel = 2; Scalar confidenceLevel = 0.999999; StrongMaximumTest myTest(myStandardEvent, designPoint, importanceLevel, accuracyLevel, confidenceLevel); fullprint << "myTest=" << myTest << std::endl; myTest.run(); fullprint << "Beta = " << designPoint.norm() << std::endl; fullprint << "Discretised sphere radius = " << designPoint.norm() * (1 + myTest.getAccuracyLevel() * myTest.getDeltaEpsilon()) << std::endl; fullprint << "PointNumber = " << myTest.getPointNumber() << std::endl; fullprint << "DesignPointVicinity Angle (rad)= " << acos(myTest.getDesignPointVicinity()) << std::endl; fullprint << "DesignPointVicinity Angle (deg)= " << acos(myTest.getDesignPointVicinity()) * 180 / M_PI << std::endl; fullprint << "Near Design Point Verifying Event Points Number = " << (myTest.getNearDesignPointVerifyingEventPoints()).getSize() << std::endl; fullprint << "Near Design Point Violating Event Points Number = " << (myTest.getNearDesignPointViolatingEventPoints()).getSize() << std::endl; fullprint << "Far Design Point Verifying Event Points Number = " << (myTest.getFarDesignPointVerifyingEventPoints()).getSize() << std::endl; fullprint << "Far Design Point Violating Event Points Number = " << (myTest.getFarDesignPointViolatingEventPoints()).getSize() << std::endl; fullprint << "//////" << std::endl; // parameters of the test fullprint << "importanceLevel=" << myTest.getImportanceLevel() << std::endl; fullprint << "accuracyLevel=" << myTest.getAccuracyLevel() << std::endl; fullprint << "confidenceLevel=" << myTest.getConfidenceLevel() << std::endl; // design point coordinates fullprint << "standardSpaceDesignPoint=[" << myTest.getStandardSpaceDesignPoint()[0] << "," << myTest.getStandardSpaceDesignPoint()[1] << "]" << std::endl; // pseudo design point coordinates fullprint << "pseudoStandardSpaceDesignPoint=[" << pseudoDesignPoint[0] << "," << pseudoDesignPoint[1] << "]" << std::endl; // cout of the coordinates of the points of the 4 samples /* NearDesignPointVerifyingEventPoints */ printSample("NearDesignPointVerifyingEventPointsSample", myTest.getNearDesignPointVerifyingEventPoints()); /* NearDesignPointViolatingEventPoints */ printSample("NearDesignPointViolatingEventPoints", myTest.getNearDesignPointViolatingEventPoints()); /* FarDesignPointVerifyingEventPoints */ printSample("FarDesignPointVerifyingEventPoints", myTest.getFarDesignPointVerifyingEventPoints()); /* FarDesignPointViolatingEventPoints */ printSample("FarDesignPointViolatingEventPoints", myTest.getFarDesignPointViolatingEventPoints()); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StrongMaximumTest_std.expout000066400000000000000000000102221307543307100232620ustar00rootroot00000000000000myTest=class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=10 standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[-2.86228,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999999 designPointVicinity=0.522209 pointNumber=54 deltaEpsilon=0.457471 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Beta = 2.86228 Discretised sphere radius = 5.4811 PointNumber = 54 DesignPointVicinity Angle (rad)= 1.02136 DesignPointVicinity Angle (deg)= 58.5195 Near Design Point Verifying Event Points Number = 8 Near Design Point Violating Event Points Number = 6 Far Design Point Verifying Event Points Number = 12 Far Design Point Violating Event Points Number = 28 ////// importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999999 standardSpaceDesignPoint=[-2.86228,0] pseudoStandardSpaceDesignPoint=[3.46228,0] NearDesignPointVerifyingEventPointsSample=[[-5.34801,1.20051];[-5.19828,-1.73789];[-5.41186,0.86843];[-5.19874,-1.73654];[-4.76503,2.70868];[-4.79301,2.65886];[-4.78189,-2.6788];[-5.46802,-0.378423]]; NearDesignPointViolatingEventPoints=[[-4.16275,-3.56566];[-3.06104,4.54669];[-4.28999,3.41151];[-3.4417,-4.26581];[-4.22737,-3.4888];[-3.18314,4.46206]]; FarDesignPointVerifyingEventPoints=[[5.19225,1.75585];[4.6452,2.90939];[5.14103,1.9006];[5.29825,-1.40392];[4.65625,-2.89166];[4.94337,-2.3676];[5.42813,-0.760166];[5.42733,-0.765821];[4.79947,-2.64718];[5.47164,-0.321801];[4.79015,2.66399];[5.04381,-2.14533]]; FarDesignPointViolatingEventPoints=[[-2.48534,-4.88523];[0.711992,5.43466];[-1.86443,5.15425];[0.360897,5.4692];[3.80267,-3.94742];[0.655387,-5.44177];[4.23535,3.47912];[3.52653,-4.19595];[4.41803,3.24399];[0.490512,-5.4591];[-1.5328,5.26241];[-2.70629,-4.76639];[0.631713,-5.44457];[1.06027,5.37757];[2.37323,-4.94067];[4.39387,-3.27663];[-1.60006,-5.24235];[3.21547,4.43883];[0.057666,-5.48079];[0.406543,-5.466];[4.07008,-3.67109];[-0.610495,5.44699];[-0.924392,-5.40258];[3.91781,3.83317];[1.73434,5.19947];[-1.31435,5.32117];[-1.87279,5.15122];[-0.969097,5.39474]]; openturns-1.9/lib/test/t_StrongMaximumTest_tabulatedValues.cxx000066400000000000000000000207671307543307100251120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of StrongMaximumTest class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* dimension n=2 */ Collection dimension(3); dimension[0] = 2; dimension[1] = 5; dimension[2] = 10; for (UnsignedInteger indexDimension = 0; indexDimension < dimension.getSize(); indexDimension++) { UnsignedInteger dim = dimension[indexDimension]; fullprint << "dimension = " << dim << std::endl; /* We create a numerical math function */ Description inputVar(dim); for (UnsignedInteger i = 0; i < dim; ++i) { OSS oss; oss << "x" << i + 1; inputVar[i] = oss; } Function myFunction(inputVar, Description(1, "y"), Description(1, "0")); /* We create a normal distribution point of dimension 1 */ Point mean(dim, 0.0); Point sigma(dim, 1.0); IdentityMatrix R(dim); Normal myDistribution(mean, sigma, R); /* We create a 'usual' RandomVector from the Distribution */ RandomVector vect(myDistribution); /* We create a composite random vector */ RandomVector output(myFunction, vect); /* We create a StandardEvent from this RandomVector */ StandardEvent myStandardEvent(output, Less(), 2.0); Normal std(Point(1, 0.0), Point(1, 1.0), IdentityMatrix(1)); Point beta(3); beta[0] = round(-std.computeQuantile(1e-3)[0]); beta[1] = round(-std.computeQuantile(1e-5)[0]); beta[2] = round(-std.computeQuantile(1e-7)[0]); Point importanceLevel(3); importanceLevel[0] = 0.01; importanceLevel[1] = 0.05; importanceLevel[2] = 0.10; Point accuracyLevel(3); accuracyLevel[0] = 1.5; accuracyLevel[1] = 2.0; accuracyLevel[2] = 4.0; Point confidenceLevel(3); confidenceLevel[0] = 0.90; confidenceLevel[1] = 0.95; confidenceLevel[2] = 0.99; Collection pointNumber(3); pointNumber[0] = 10; pointNumber[1] = 100; pointNumber[2] = 1000; /* TABLE 1 : we impose beta, the importance level, the accuracy level, tne confidence level and we calculate the corresponding deltaEpsilon and pointNumber N */ fullprint << std::right << std::setw(10) << "beta " << std::setw(16) << "importanceLevel " << std::setw(14) << "accuracyLevel " << std::setw(16) << "confidenceLevel " << std::setw(13) << "deltaEpsilon " << std::setw(11) << "pointNumber" << std::endl; /* loop on beta */ for (UnsignedInteger indexBeta = 0; indexBeta < beta.getDimension(); indexBeta++) { /* We create the design point */ Point designPoint(dim, 0.0); designPoint[0] = beta[indexBeta]; /* loop on the importance level epsilon */ for (UnsignedInteger indexImportanceLevel = 0; indexImportanceLevel < importanceLevel.getDimension(); indexImportanceLevel++) { /* loop on the accuracy level tau */ for (UnsignedInteger indexAccuracyLevel = 0; indexAccuracyLevel < accuracyLevel.getDimension(); indexAccuracyLevel++) { /* loop on the confidence level (1-q) */ for (UnsignedInteger indexConfidenceLevel = 0; indexConfidenceLevel < confidenceLevel.getDimension(); indexConfidenceLevel++) { /* we calculate the corresponding deltaEpsilon and pointNumber N */ StrongMaximumTest myTest(myStandardEvent, designPoint, importanceLevel[indexImportanceLevel], accuracyLevel[indexAccuracyLevel], confidenceLevel[indexConfidenceLevel]); fullprint << std::setprecision(3) //<< std::scientific << std::setw(7) << beta[indexBeta] << " " << std::setw(15) << importanceLevel[indexImportanceLevel] << " " << std::setw(13) << accuracyLevel[indexAccuracyLevel] << " " << std::setw(15) << confidenceLevel[indexConfidenceLevel] << " " << std::setw(12) << myTest.getDeltaEpsilon() << " " << std::setw(11) << std::right << myTest.getPointNumber() << std::endl; } } } } /* TABLE 2 : we impose beta, the importance level, the accuracy level, the pointNumber N and we calculate the corresponding deltaEpsilon and confidence level */ // fullprint << std::right // << std::setw(10) << "beta " // << std::setw(16) << "importanceLevel " // << "accuracyLevel " << "pointNumber " << "deltaEpsilon " << "confidenceLevel" << std::endl; fullprint << std::right << std::setw(10) << "beta " << std::setw(16) << "importanceLevel " << std::setw(14) << "accuracyLevel " << std::setw(12) << "pointNumber " << std::setw(13) << "deltaEpsilon " << std::setw(15) << "confidenceLevel" << std::endl; /* loop on beta */ for (UnsignedInteger indexBeta = 0; indexBeta < beta.getDimension(); indexBeta++) { /* We create the design point */ Point designPoint(dim, 0.0); designPoint[0] = beta[indexBeta]; /* loop on the importance level epsilon */ for (UnsignedInteger indexImportanceLevel = 0; indexImportanceLevel < importanceLevel.getDimension(); indexImportanceLevel++) { /* loop on the accuracy level tau */ for (UnsignedInteger indexAccuracyLevel = 0; indexAccuracyLevel < accuracyLevel.getDimension(); indexAccuracyLevel++) { /* loop on the pointNumber N */ for (UnsignedInteger indexPointNumber = 0; indexPointNumber < pointNumber.getSize(); indexPointNumber++) { /* we calculate the corresponding deltaEpsilon and confidenceLevel */ StrongMaximumTest myTest(myStandardEvent, designPoint, importanceLevel[indexImportanceLevel], accuracyLevel[indexAccuracyLevel], pointNumber[indexPointNumber]); // fullprint << std::setprecision(3) << std::scientific << std::right // << std::setw(7) << beta[indexBeta] << " " // << importanceLevel[indexImportanceLevel] << " " // << accuracyLevel[indexAccuracyLevel] << " " // << std::setw(8) // << pointNumber[indexPointNumber] << " " // << myTest.getDeltaEpsilon() << " " // << myTest.getConfidenceLevel() // << std::endl; fullprint << std::setprecision(3) //<< std::scientific << std::setw(7) << beta[indexBeta] << " " << std::setw(15) << importanceLevel[indexImportanceLevel] << " " << std::setw(13) << accuracyLevel[indexAccuracyLevel] << " " << std::setw(11) << std::right << pointNumber[indexPointNumber] << " " << std::setw(12) << myTest.getDeltaEpsilon() << " " << std::setw(15) << myTest.getConfidenceLevel() << std::endl; } } } } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StrongMaximumTest_tabulatedValues.expout000066400000000000000000001140131307543307100256200ustar00rootroot00000000000000dimension = 2 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3 0.01 1.5 0.9 0.422 13 3 0.01 1.5 0.95 0.422 17 3 0.01 1.5 0.99 0.422 26 3 0.01 2 0.9 0.422 9 3 0.01 2 0.95 0.422 12 3 0.01 2 0.99 0.422 19 3 0.01 4 0.9 0.422 6 3 0.01 4 0.95 0.422 8 3 0.01 4 0.99 0.422 12 3 0.05 1.5 0.9 0.291 15 3 0.05 1.5 0.95 0.291 19 3 0.05 1.5 0.99 0.291 30 3 0.05 2 0.9 0.291 11 3 0.05 2 0.95 0.291 14 3 0.05 2 0.99 0.291 21 3 0.05 4 0.9 0.291 7 3 0.05 4 0.95 0.291 9 3 0.05 4 0.99 0.291 13 3 0.1 1.5 0.9 0.23 16 3 0.1 1.5 0.95 0.23 21 3 0.1 1.5 0.99 0.23 32 3 0.1 2 0.9 0.23 12 3 0.1 2 0.95 0.23 15 3 0.1 2 0.99 0.23 23 3 0.1 4 0.9 0.23 7 3 0.1 4 0.95 0.23 9 3 0.1 4 0.99 0.23 14 4 0.01 1.5 0.9 0.255 16 4 0.01 1.5 0.95 0.255 20 4 0.01 1.5 0.99 0.255 31 4 0.01 2 0.9 0.255 11 4 0.01 2 0.95 0.255 14 4 0.01 2 0.99 0.255 22 4 0.01 4 0.9 0.255 7 4 0.01 4 0.95 0.255 9 4 0.01 4 0.99 0.255 14 4 0.05 1.5 0.9 0.172 18 4 0.05 1.5 0.95 0.172 24 4 0.05 1.5 0.99 0.172 37 4 0.05 2 0.9 0.172 13 4 0.05 2 0.95 0.172 17 4 0.05 2 0.99 0.172 26 4 0.05 4 0.9 0.172 8 4 0.05 4 0.95 0.172 10 4 0.05 4 0.99 0.172 16 4 0.1 1.5 0.9 0.135 20 4 0.1 1.5 0.95 0.135 26 4 0.1 1.5 0.99 0.135 41 4 0.1 2 0.9 0.135 14 4 0.1 2 0.95 0.135 19 4 0.1 2 0.99 0.135 29 4 0.1 4 0.9 0.135 9 4 0.1 4 0.95 0.135 11 4 0.1 4 0.99 0.135 17 5 0.01 1.5 0.9 0.17 18 5 0.01 1.5 0.95 0.17 24 5 0.01 1.5 0.99 0.17 37 5 0.01 2 0.9 0.17 13 5 0.01 2 0.95 0.17 17 5 0.01 2 0.99 0.17 26 5 0.01 4 0.9 0.17 8 5 0.01 4 0.95 0.17 10 5 0.01 4 0.99 0.17 16 5 0.05 1.5 0.9 0.113 22 5 0.05 1.5 0.95 0.113 29 5 0.05 1.5 0.99 0.113 44 5 0.05 2 0.9 0.113 16 5 0.05 2 0.95 0.113 20 5 0.05 2 0.99 0.113 31 5 0.05 4 0.9 0.113 9 5 0.05 4 0.95 0.113 12 5 0.05 4 0.99 0.113 18 5 0.1 1.5 0.9 0.0882 25 5 0.1 1.5 0.95 0.0882 32 5 0.1 1.5 0.99 0.0882 49 5 0.1 2 0.9 0.0882 17 5 0.1 2 0.95 0.0882 23 5 0.1 2 0.99 0.0882 35 5 0.1 4 0.9 0.0882 10 5 0.1 4 0.95 0.0882 13 5 0.1 4 0.99 0.0882 20 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3 0.01 1.5 10 0.422 0.833 3 0.01 1.5 100 0.422 1 3 0.01 1.5 1000 0.422 1 3 0.01 2 10 0.422 0.916 3 0.01 2 100 0.422 1 3 0.01 2 1000 0.422 1 3 0.01 4 10 0.422 0.98 3 0.01 4 100 0.422 1 3 0.01 4 1000 0.422 1 3 0.05 1.5 10 0.291 0.79 3 0.05 1.5 100 0.291 1 3 0.05 1.5 1000 0.291 1 3 0.05 2 10 0.291 0.887 3 0.05 2 100 0.291 1 3 0.05 2 1000 0.291 1 3 0.05 4 10 0.291 0.97 3 0.05 4 100 0.291 1 3 0.05 4 1000 0.291 1 3 0.1 1.5 10 0.23 0.759 3 0.1 1.5 100 0.23 1 3 0.1 1.5 1000 0.23 1 3 0.1 2 10 0.23 0.864 3 0.1 2 100 0.23 1 3 0.1 2 1000 0.23 1 3 0.1 4 10 0.23 0.962 3 0.1 4 100 0.23 1 3 0.1 4 1000 0.23 1 4 0.01 1.5 10 0.255 0.773 4 0.01 1.5 100 0.255 1 4 0.01 1.5 1000 0.255 1 4 0.01 2 10 0.255 0.875 4 0.01 2 100 0.255 1 4 0.01 2 1000 0.255 1 4 0.01 4 10 0.255 0.966 4 0.01 4 100 0.255 1 4 0.01 4 1000 0.255 1 4 0.05 1.5 10 0.172 0.717 4 0.05 1.5 100 0.172 1 4 0.05 1.5 1000 0.172 1 4 0.05 2 10 0.172 0.831 4 0.05 2 100 0.172 1 4 0.05 2 1000 0.172 1 4 0.05 4 10 0.172 0.948 4 0.05 4 100 0.172 1 4 0.05 4 1000 0.172 1 4 0.1 1.5 10 0.135 0.678 4 0.1 1.5 100 0.135 1 4 0.1 1.5 1000 0.135 1 4 0.1 2 10 0.135 0.798 4 0.1 2 100 0.135 1 4 0.1 2 1000 0.135 1 4 0.1 4 10 0.135 0.932 4 0.1 4 100 0.135 1 4 0.1 4 1000 0.135 1 5 0.01 1.5 10 0.17 0.714 5 0.01 1.5 100 0.17 1 5 0.01 1.5 1000 0.17 1 5 0.01 2 10 0.17 0.829 5 0.01 2 100 0.17 1 5 0.01 2 1000 0.17 1 5 0.01 4 10 0.17 0.947 5 0.01 4 100 0.17 1 5 0.01 4 1000 0.17 1 5 0.05 1.5 10 0.113 0.649 5 0.05 1.5 100 0.113 1 5 0.05 1.5 1000 0.113 1 5 0.05 2 10 0.113 0.773 5 0.05 2 100 0.113 1 5 0.05 2 1000 0.113 1 5 0.05 4 10 0.113 0.919 5 0.05 4 100 0.113 1 5 0.05 4 1000 0.113 1 5 0.1 1.5 10 0.0882 0.607 5 0.1 1.5 100 0.0882 1 5 0.1 1.5 1000 0.0882 1 5 0.1 2 10 0.0882 0.734 5 0.1 2 100 0.0882 1 5 0.1 2 1000 0.0882 1 5 0.1 4 10 0.0882 0.896 5 0.1 4 100 0.0882 1 5 0.1 4 1000 0.0882 1 dimension = 5 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3 0.01 1.5 0.9 0.422 191 3 0.01 1.5 0.95 0.422 248 3 0.01 1.5 0.99 0.422 382 3 0.01 2 0.9 0.422 62 3 0.01 2 0.95 0.422 81 3 0.01 2 0.99 0.422 124 3 0.01 4 0.9 0.422 15 3 0.01 4 0.95 0.422 20 3 0.01 4 0.99 0.422 30 3 0.05 1.5 0.9 0.291 309 3 0.05 1.5 0.95 0.291 402 3 0.05 1.5 0.99 0.291 618 3 0.05 2 0.9 0.291 96 3 0.05 2 0.95 0.291 124 3 0.05 2 0.99 0.291 191 3 0.05 4 0.9 0.291 21 3 0.05 4 0.95 0.291 27 3 0.05 4 0.99 0.291 41 3 0.1 1.5 0.9 0.23 432 3 0.1 1.5 0.95 0.23 563 3 0.1 1.5 0.99 0.23 865 3 0.1 2 0.9 0.23 130 3 0.1 2 0.95 0.23 169 3 0.1 2 0.99 0.23 260 3 0.1 4 0.9 0.23 26 3 0.1 4 0.95 0.23 34 3 0.1 4 0.99 0.23 52 4 0.01 1.5 0.9 0.255 371 4 0.01 1.5 0.95 0.255 482 4 0.01 1.5 0.99 0.255 741 4 0.01 2 0.9 0.255 113 4 0.01 2 0.95 0.255 147 4 0.01 2 0.99 0.255 226 4 0.01 4 0.9 0.255 23 4 0.01 4 0.95 0.255 30 4 0.01 4 0.99 0.255 47 4 0.05 1.5 0.9 0.172 669 4 0.05 1.5 0.95 0.172 870 4 0.05 1.5 0.99 0.172 1338 4 0.05 2 0.9 0.172 194 4 0.05 2 0.95 0.172 252 4 0.05 2 0.99 0.172 388 4 0.05 4 0.9 0.172 35 4 0.05 4 0.95 0.172 46 4 0.05 4 0.99 0.172 71 4 0.1 1.5 0.9 0.135 994 4 0.1 1.5 0.95 0.135 1293 4 0.1 1.5 0.99 0.135 1988 4 0.1 2 0.9 0.135 281 4 0.1 2 0.95 0.135 366 4 0.1 2 0.99 0.135 562 4 0.1 4 0.9 0.135 48 4 0.1 4 0.95 0.135 62 4 0.1 4 0.99 0.135 95 5 0.01 1.5 0.9 0.17 685 5 0.01 1.5 0.95 0.17 891 5 0.01 1.5 0.99 0.17 1370 5 0.01 2 0.9 0.17 198 5 0.01 2 0.95 0.17 258 5 0.01 2 0.99 0.17 397 5 0.01 4 0.9 0.17 36 5 0.01 4 0.95 0.17 47 5 0.01 4 0.99 0.17 72 5 0.05 1.5 0.9 0.113 1328 5 0.05 1.5 0.95 0.113 1728 5 0.05 1.5 0.99 0.113 2656 5 0.05 2 0.9 0.113 370 5 0.05 2 0.95 0.113 481 5 0.05 2 0.99 0.113 739 5 0.05 4 0.9 0.113 60 5 0.05 4 0.95 0.113 78 5 0.05 4 0.99 0.113 119 5 0.1 1.5 0.9 0.0882 2049 5 0.1 1.5 0.95 0.0882 2666 5 0.1 1.5 0.99 0.0882 4098 5 0.1 2 0.9 0.0882 559 5 0.1 2 0.95 0.0882 727 5 0.1 2 0.99 0.0882 1118 5 0.1 4 0.9 0.0882 85 5 0.1 4 0.95 0.0882 110 5 0.1 4 0.99 0.0882 169 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3 0.01 1.5 10 0.422 0.114 3 0.01 1.5 100 0.422 0.701 3 0.01 1.5 1000 0.422 1 3 0.01 2 10 0.422 0.309 3 0.01 2 100 0.422 0.975 3 0.01 2 1000 0.422 1 3 0.01 4 10 0.422 0.78 3 0.01 4 100 0.422 1 3 0.01 4 1000 0.422 1 3 0.05 1.5 10 0.291 0.0718 3 0.05 1.5 100 0.291 0.525 3 0.05 1.5 1000 0.291 0.999 3 0.05 2 10 0.291 0.214 3 0.05 2 100 0.291 0.91 3 0.05 2 1000 0.291 1 3 0.05 4 10 0.291 0.672 3 0.05 4 100 0.291 1 3 0.05 4 1000 0.291 1 3 0.1 1.5 10 0.23 0.0518 3 0.1 1.5 100 0.23 0.413 3 0.1 1.5 1000 0.23 0.995 3 0.1 2 10 0.23 0.163 3 0.1 2 100 0.23 0.83 3 0.1 2 1000 0.23 1 3 0.1 4 10 0.23 0.589 3 0.1 4 100 0.23 1 3 0.1 4 1000 0.23 1 4 0.01 1.5 10 0.255 0.0602 4 0.01 1.5 100 0.255 0.463 4 0.01 1.5 1000 0.255 0.998 4 0.01 2 10 0.255 0.185 4 0.01 2 100 0.255 0.87 4 0.01 2 1000 0.255 1 4 0.01 4 10 0.255 0.628 4 0.01 4 100 0.255 1 4 0.01 4 1000 0.255 1 4 0.05 1.5 10 0.172 0.0338 4 0.05 1.5 100 0.172 0.291 4 0.05 1.5 1000 0.172 0.968 4 0.05 2 10 0.172 0.112 4 0.05 2 100 0.172 0.695 4 0.05 2 1000 0.172 1 4 0.05 4 10 0.172 0.479 4 0.05 4 100 0.172 0.999 4 0.05 4 1000 0.172 1 4 0.1 1.5 10 0.135 0.0229 4 0.1 1.5 100 0.135 0.207 4 0.1 1.5 1000 0.135 0.901 4 0.1 2 10 0.135 0.0786 4 0.1 2 100 0.135 0.559 4 0.1 2 1000 0.135 1 4 0.1 4 10 0.135 0.384 4 0.1 4 100 0.135 0.992 4 0.1 4 1000 0.135 1 5 0.01 1.5 10 0.17 0.0331 5 0.01 1.5 100 0.17 0.286 5 0.01 1.5 1000 0.17 0.965 5 0.01 2 10 0.17 0.11 5 0.01 2 100 0.17 0.687 5 0.01 2 1000 0.17 1 5 0.01 4 10 0.17 0.473 5 0.01 4 100 0.17 0.998 5 0.01 4 1000 0.17 1 5 0.05 1.5 10 0.113 0.0172 5 0.05 1.5 100 0.113 0.159 5 0.05 1.5 1000 0.113 0.823 5 0.05 2 10 0.113 0.0604 5 0.05 2 100 0.113 0.464 5 0.05 2 1000 0.113 0.998 5 0.05 4 10 0.113 0.32 5 0.05 4 100 0.113 0.979 5 0.05 4 1000 0.113 1 5 0.1 1.5 10 0.0882 0.0112 5 0.1 1.5 100 0.0882 0.106 5 0.1 1.5 1000 0.0882 0.675 5 0.1 2 10 0.0882 0.0404 5 0.1 2 100 0.0882 0.338 5 0.1 2 1000 0.0882 0.984 5 0.1 4 10 0.0882 0.238 5 0.1 4 100 0.0882 0.934 5 0.1 4 1000 0.0882 1 dimension = 10 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3 0.01 1.5 0.9 0.422 9464 3 0.01 1.5 0.95 0.422 12313 3 0.01 1.5 0.99 0.422 18927 3 0.01 2 0.9 0.422 841 3 0.01 2 0.95 0.422 1094 3 0.01 2 0.99 0.422 1682 3 0.01 4 0.9 0.422 48 3 0.01 4 0.95 0.422 62 3 0.01 4 0.99 0.422 95 3 0.05 1.5 0.9 0.291 27334 3 0.05 1.5 0.95 0.291 35562 3 0.05 1.5 0.99 0.291 54667 3 0.05 2 0.9 0.291 2111 3 0.05 2 0.95 0.291 2746 3 0.05 2 0.99 0.291 4222 3 0.05 4 0.9 0.291 86 3 0.05 4 0.95 0.291 112 3 0.05 4 0.99 0.291 173 3 0.1 1.5 0.9 0.23 57412 3 0.1 1.5 0.95 0.23 74695 3 0.1 1.5 0.99 0.23 114824 3 0.1 2 0.9 0.23 4085 3 0.1 2 0.95 0.23 5315 3 0.1 2 0.99 0.23 8170 3 0.1 4 0.9 0.23 136 3 0.1 4 0.95 0.23 177 3 0.1 4 0.99 0.23 272 4 0.01 1.5 0.9 0.255 40836 4 0.01 1.5 0.95 0.255 53129 4 0.01 1.5 0.99 0.255 81672 4 0.01 2 0.9 0.255 3012 4 0.01 2 0.95 0.255 3919 4 0.01 2 0.99 0.255 6025 4 0.01 4 0.9 0.255 110 4 0.01 4 0.95 0.255 143 4 0.01 4 0.99 0.255 220 4 0.05 1.5 0.9 0.172 150970 4 0.05 1.5 0.95 0.172 196416 4 0.05 1.5 0.99 0.172 301939 4 0.05 2 0.9 0.172 9822 4 0.05 2 0.95 0.172 12779 4 0.05 2 0.99 0.172 19644 4 0.05 4 0.9 0.172 257 4 0.05 4 0.95 0.172 334 4 0.05 4 0.99 0.172 514 4 0.1 1.5 0.9 0.135 364516 4 0.1 1.5 0.95 0.135 474246 4 0.1 1.5 0.99 0.135 729032 4 0.1 2 0.9 0.135 22173 4 0.1 2 0.95 0.135 28847 4 0.1 2 0.99 0.135 44345 4 0.1 4 0.9 0.135 477 4 0.1 4 0.95 0.135 621 4 0.1 4 0.99 0.135 954 5 0.01 1.5 0.9 0.17 159170 5 0.01 1.5 0.95 0.17 207085 5 0.01 1.5 0.99 0.17 318339 5 0.01 2 0.9 0.17 10310 5 0.01 2 0.95 0.17 13414 5 0.01 2 0.99 0.17 20620 5 0.01 4 0.9 0.17 266 5 0.01 4 0.95 0.17 346 5 0.01 4 0.99 0.17 532 5 0.05 1.5 0.9 0.113 695225 5 0.05 1.5 0.95 0.113 904508 5 0.05 1.5 0.99 0.113 1390449 5 0.05 2 0.9 0.113 40555 5 0.05 2 0.95 0.113 52763 5 0.05 2 0.99 0.113 81110 5 0.05 4 0.9 0.113 768 5 0.05 4 0.95 0.113 1000 5 0.05 4 0.99 0.113 1537 5 0.1 1.5 0.9 0.0882 1831624 5 0.1 1.5 0.95 0.0882 2382998 5 0.1 1.5 0.99 0.0882 3663249 5 0.1 2 0.9 0.0882 101337 5 0.1 2 0.95 0.0882 131843 5 0.1 2 0.99 0.0882 202674 5 0.1 4 0.9 0.0882 1624 5 0.1 4 0.95 0.0882 2112 5 0.1 4 0.99 0.0882 3247 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3 0.01 1.5 10 0.422 0.00243 3 0.01 1.5 100 0.422 0.024 3 0.01 1.5 1000 0.422 0.216 3 0.01 2 10 0.422 0.027 3 0.01 2 100 0.422 0.239 3 0.01 2 1000 0.422 0.935 3 0.01 4 10 0.422 0.383 3 0.01 4 100 0.422 0.992 3 0.01 4 1000 0.422 1 3 0.05 1.5 10 0.291 0.000842 3 0.05 1.5 100 0.291 0.00839 3 0.05 1.5 1000 0.291 0.0808 3 0.05 2 10 0.291 0.0108 3 0.05 2 100 0.291 0.103 3 0.05 2 1000 0.291 0.664 3 0.05 4 10 0.291 0.234 3 0.05 4 100 0.291 0.93 3 0.05 4 1000 0.291 1 3 0.1 1.5 10 0.23 0.000401 3 0.1 1.5 100 0.23 0.004 3 0.1 1.5 1000 0.23 0.0393 3 0.1 2 10 0.23 0.00562 3 0.1 2 100 0.23 0.0548 3 0.1 2 1000 0.23 0.431 3 0.1 4 10 0.23 0.156 3 0.1 4 100 0.23 0.816 3 0.1 4 1000 0.23 1 4 0.01 1.5 10 0.255 0.000564 4 0.01 1.5 100 0.255 0.00562 4 0.01 1.5 1000 0.255 0.0548 4 0.01 2 10 0.255 0.00761 4 0.01 2 100 0.255 0.0736 4 0.01 2 1000 0.255 0.534 4 0.01 4 10 0.255 0.189 4 0.01 4 100 0.255 0.877 4 0.01 4 1000 0.255 1 4 0.05 1.5 10 0.172 0.000153 4 0.05 1.5 100 0.172 0.00152 4 0.05 1.5 1000 0.172 0.0151 4 0.05 2 10 0.172 0.00234 4 0.05 2 100 0.172 0.0232 4 0.05 2 1000 0.172 0.209 4 0.05 4 10 0.172 0.0858 4 0.05 4 100 0.172 0.592 4 0.05 4 1000 0.172 1 4 0.1 1.5 10 0.135 6.32e-05 4 0.1 1.5 100 0.135 0.000631 4 0.1 1.5 1000 0.135 0.0063 4 0.1 2 10 0.135 0.00104 4 0.1 2 100 0.135 0.0103 4 0.1 2 1000 0.135 0.0986 4 0.1 4 10 0.135 0.0471 4 0.1 4 100 0.135 0.383 4 0.1 4 1000 0.135 0.992 5 0.01 1.5 10 0.17 0.000145 5 0.01 1.5 100 0.17 0.00145 5 0.01 1.5 1000 0.17 0.0144 5 0.01 2 10 0.17 0.00223 5 0.01 2 100 0.17 0.0221 5 0.01 2 1000 0.17 0.2 5 0.01 4 10 0.17 0.0828 5 0.01 4 100 0.17 0.579 5 0.01 4 1000 0.17 1 5 0.05 1.5 10 0.113 3.31e-05 5 0.05 1.5 100 0.113 0.000331 5 0.05 1.5 1000 0.113 0.00331 5 0.05 2 10 0.113 0.000568 5 0.05 2 100 0.113 0.00566 5 0.05 2 1000 0.113 0.0552 5 0.05 4 10 0.113 0.0295 5 0.05 4 100 0.113 0.259 5 0.05 4 1000 0.113 0.95 5 0.1 1.5 10 0.0882 1.26e-05 5 0.1 1.5 100 0.0882 0.000126 5 0.1 1.5 1000 0.0882 0.00126 5 0.1 2 10 0.0882 0.000227 5 0.1 2 100 0.0882 0.00227 5 0.1 2 1000 0.0882 0.0225 5 0.1 4 10 0.0882 0.0141 5 0.1 4 100 0.0882 0.132 5 0.1 4 1000 0.0882 0.758 openturns-1.9/lib/test/t_StudentFactory_std.cxx000066400000000000000000000042351307543307100220530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Student for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Student distribution(3.5, 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); StudentFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; Student estimatedStudent(factory.buildAsStudent(sample)); fullprint << "Student =" << distribution << std::endl; fullprint << "Estimated student=" << estimatedStudent << std::endl; estimatedStudent = factory.buildAsStudent(); fullprint << "Default student=" << estimatedStudent << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_StudentFactory_std.expout000066400000000000000000000035271307543307100226000ustar00rootroot00000000000000Distribution =class=Student name=Student dimension=1 nu=3.5 mean=class=Point name=Unnamed dimension=1 values=[2.5] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Estimated distribution=class=Student name=Student dimension=1 nu=3.58491 mean=class=Point name=Unnamed dimension=1 values=[2.52108] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Default distribution=class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Student =class=Student name=Student dimension=1 nu=3.5 mean=class=Point name=Unnamed dimension=1 values=[2.5] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Estimated student=class=Student name=Student dimension=1 nu=3.58491 mean=class=Point name=Unnamed dimension=1 values=[2.52108] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Default student=class=Student name=Student dimension=1 nu=3 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] openturns-1.9/lib/test/t_Student_std.cxx000066400000000000000000000243321307543307100205230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Student for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Student { public: TestObject() : Student(5.0, -0.5, 2.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Student distribution(6.5, -0.5, 5.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << Point(1, (distribution.computePDF( point + Point(1, eps) ) - distribution.computePDF( point + Point(1, -eps) )) / (2.0 * eps)) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (Student(distribution.getNu() + eps, distribution.getMean(), distribution.getSigma(), distribution.getCorrelation()).computePDF(point) - Student(distribution.getNu() - eps, distribution.getMean(), distribution.getSigma(), distribution.getCorrelation()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Student(distribution.getNu(), distribution.getMean() + Point(1, eps), distribution.getSigma(), distribution.getCorrelation()).computePDF(point) - Student(distribution.getNu(), distribution.getMean() - Point(1, eps), distribution.getSigma(), distribution.getCorrelation()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Student(distribution.getNu(), distribution.getMean(), distribution.getSigma() + Point(1, eps), distribution.getCorrelation()).computePDF(point) - Student(distribution.getNu(), distribution.getMean(), distribution.getSigma() - Point(1, eps), distribution.getCorrelation()).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (Student(distribution.getNu() + eps, distribution.getMean(), distribution.getSigma(), distribution.getCorrelation()).computeCDF(point) - Student(distribution.getNu() - eps, distribution.getMean(), distribution.getSigma(), distribution.getCorrelation()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Student(distribution.getNu(), distribution.getMean() + Point(1, eps), distribution.getSigma(), distribution.getCorrelation()).computeCDF(point) - Student(distribution.getNu(), distribution.getMean() - Point(1, eps), distribution.getSigma(), distribution.getCorrelation()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Student(distribution.getNu(), distribution.getMean(), distribution.getSigma() + Point(1, eps), distribution.getCorrelation()).computeCDF(point) - Student(distribution.getNu(), distribution.getMean(), distribution.getSigma() - Point(1, eps), distribution.getCorrelation()).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Student::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; distribution.setParametersCollection(parameters); for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution beta = point.normSquare(); Scalar densityGenerator = distribution.computeDensityGenerator(beta); fullprint << "density generator=" << densityGenerator << std::endl; fullprint << "pdf via density generator=" << distribution.EllipticalDistribution::computePDF(point) << std::endl; Scalar densityGeneratorDerivative = distribution.computeDensityGeneratorDerivative(beta); fullprint << "density generator derivative =" << densityGeneratorDerivative << std::endl; fullprint << "density generator derivative (FD)=" << (distribution.computeDensityGenerator(beta + eps) - distribution.computeDensityGenerator(beta - eps)) / (2.0 * eps) << std::endl; Scalar densityGeneratorSecondDerivative = distribution.computeDensityGeneratorSecondDerivative(beta); fullprint << "density generator second derivative =" << densityGeneratorSecondDerivative << std::endl; fullprint << "density generator second derivative (FD)=" << (distribution.computeDensityGeneratorDerivative(beta + eps) - distribution.computeDensityGeneratorDerivative(beta - eps)) / (2.0 * eps) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Student_std.expout000066400000000000000000000134251307543307100212460ustar00rootroot00000000000000Testing class Student checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Student name=Student dimension=1 nu=5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] streamObject(const T & anObject) class=Student name=Student dimension=1 nu=5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Student name=Student dimension=1 nu=6.5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution Student(nu = 6.5, mu = -0.5, sigma = 5) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[4.41402] oneSample first=class=Point name=Unnamed dimension=1 values=[9.59681] last=class=Point name=Unnamed dimension=1 values=[-0.842336] mean=class=Point name=Unnamed dimension=1 values=[-0.543433] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[34.9875] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.00498004] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.00498004] log pdf=-2.61826 pdf =0.0729299 pdf (FD)=0.0729299 cdf=0.613229 ccdf=0.386771 survival=0.386771 Inverse survival=class=Point name=Unnamed dimension=1 values=[-10.0837] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=3 values=[0.000499835,0.00498004,-0.013092] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.000499835,0.00498004,-0.013092] cdf gradient =class=Point name=Unnamed dimension=3 values=[0.000700682,-0.0729299,-0.021879] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.000700682,-0.0729299,-0.021879] quantile=class=Point name=Unnamed dimension=1 values=[9.08368] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-12.51] upper bound=class=Point name=Unnamed dimension=1 values=[11.51] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Student(nu = 6.5, mu = -0.5, sigma = 5)) gradientImplementation=MinimumVolumeLevelSetGradient(Student(nu = 6.5, mu = -0.5, sigma = 5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Student(nu = 6.5, mu = -0.5, sigma = 5)) level=4.94915 beta=0.00708941 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-12.51] upper bound=class=Point name=Unnamed dimension=1 values=[11.51] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1358.08] upper bound=class=Point name=Unnamed dimension=1 values=[9.08368] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-10.0837] upper bound=class=Point name=Unnamed dimension=1 values=[1357.08] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[-0.5] standard deviation=class=Point name=Unnamed dimension=1 values=[6.00925] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[5.4] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[36.1111] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[nu : 6.5, mean_0 : -0.5, standard_deviation_0 : 5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.44444] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[11.2667] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Student(nu = 6.5, mu = 0, sigma = 1) density generator=0.2245 pdf via density generator=0.0729299 density generator derivative =-0.11225 density generator derivative (FD)=-0.11225 density generator second derivative =0.0710916 density generator second derivative (FD)=0.0710916 openturns-1.9/lib/test/t_Study_saveload.cxx000066400000000000000000001070211307543307100212060ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Study for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include #include "openturns/OTconfig.hxx" #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; template static inline void compare(const T & savedInstance, const Study & study, const String & tag = String("")) { OStream fullprint(std::cout); T loadedInstance; const String className = loadedInstance.getClassName(); String label = tag; if (label.empty()) { label = className; label[0] = tolower(label[0]); } study.fillObject(label, loadedInstance); fullprint << "saved " << className << " = " << savedInstance << std::endl; fullprint << "loaded " << className << " = " << loadedInstance << std::endl; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); const char fileName[] = "myStudy.xml"; try { // Create a Study Object Study study; study.setStorageManager(XMLStorageManager(fileName)); // Add a PersistentObject to the Study (here a Point) Point numericalPoint(3, 0.); numericalPoint[0] = 10.; numericalPoint[1] = 11.; numericalPoint[2] = 12.; numericalPoint.setName("point"); study.add("Good", numericalPoint); // Add another PersistentObject to the Study (here a Sample) Sample numericalSample(3, 2); Point p2(2, 0.); p2[0] = 100.; p2[1] = 200.; numericalSample[0] = p2; p2.setName("One"); Point p3(2, 0.); p3[0] = 101.; p3[1] = 201.; numericalSample[1] = p3; p3.setName("Two"); Point p4(2, 0.); p4[0] = 102.; p4[1] = 202.; numericalSample[2] = p4; p4.setName("Three"); study.add("mySample", numericalSample); // Create a Point that we will try to reinstaciate after reloading Point namedPoint(2, 1000.); namedPoint.setName("point"); study.add("namedPoint", namedPoint); // Add a point with a description PointWithDescription numericalPointWithDescription(numericalPoint); Description desc = numericalPointWithDescription.getDescription(); desc[0] = "x"; desc[1] = "y"; desc[2] = "z"; numericalPointWithDescription.setDescription(desc); study.add("pDesc", numericalPointWithDescription); // Add a matrix Matrix matrix(2, 3); matrix(0, 0) = 0; matrix(0, 1) = 1; matrix(0, 2) = 2; matrix(1, 0) = 3; matrix(1, 1) = 4; matrix(1, 2) = 5; study.add("m", matrix); // Add a Staircase Staircase staircase; { // Instanciate one distribution object UnsignedInteger dim = 1; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; CorrelationMatrix R = IdentityMatrix(dim); Normal distribution1(meanPoint, sigma, R); // Instanciate another distribution object meanPoint[0] = -1.5; sigma[0] = 4.0; Normal distribution2(meanPoint, sigma, R); // Test for sampling UnsignedInteger size = 2000; UnsignedInteger nPoints = 20; Sample sample1(distribution1.getSample( size )); Sample sample2(distribution2.getSample( size )); // Construct empirical CDF for each sample Sample data1(nPoints, 2), data2(nPoints, 2); Point cursor1(2); Point cursor2(2); Scalar count1; Scalar count2; for(UnsignedInteger i = 0; i < nPoints; i++) { cursor1[0] = 13.*i / nPoints - 6.5; count1 = 0; cursor2[0] = 24.*i / nPoints - 13.5; count2 = 0; for(UnsignedInteger j = 0; j < size; j++) { if(sample1[j][0] < cursor1[0]) count1++; if(sample2[j][0] < cursor2[0]) count2++; } cursor1[1] = count1 / size; cursor2[1] = count2 / size; data1[i] = cursor1; data2[i] = cursor2; } staircase = Staircase (data2, "red", "dashed", "S", "eCDF2, pat=S"); } study.add("staircase", staircase); // Create a Simulation::Result SimulationResult simulationResult(Event(), 0.5, 0.01, 150, 4); simulationResult.setName("simulationResult"); study.add("simulationResult", simulationResult); Arcsine arcsine(5.2, 11.6); study.add("arcsine", arcsine); Beta beta(3.0, 5.0, -1.0, 4.0); study.add("beta", beta); Chi chi(1.5); study.add("chi", chi); ChiSquare chiSquare(1.5); study.add("chiSquare", chiSquare); UnsignedInteger dim = 2; Point theta(dim + 1); for (UnsignedInteger i = 0; i <= dim; i++) theta[i] = 1.0 + (i + 1.0) / 4.0; Dirichlet dirichlet(theta); study.add("dirichlet", dirichlet); Exponential exponential(3.0, -2.0); study.add("exponential", exponential); FisherSnedecor fisherSnedecor(5.5, 10.5); study.add("fisherSnedecor", fisherSnedecor); Gamma gamma(1.5, 3.0, -2.0); study.add("gamma", gamma); GeneralizedPareto generalizedPareto(1.5, -0.2); study.add("generalizedPareto", generalizedPareto); Geometric geometric(0.15); study.add("geometric", geometric); Gumbel gumbel(2.0, -0.5); study.add("gumbel", gumbel); IndependentCopula independentCopula(5); study.add("independentCopula", independentCopula); InverseNormal inverseNormal(0.5, 2.0); study.add("inverseNormal", inverseNormal); KernelSmoothing kernelSmoothing; kernelSmoothing.build(independentCopula.getSample(20)); study.add("kernelSmoothing", kernelSmoothing); Laplace laplace(1.0 / 1.5, 0.5); study.add("laplace", laplace); Logistic logistic(0.5, 1.5); study.add("logistic", logistic); LogNormal logNormal(0.5, 1.5, -1.0); study.add("logNormal", logNormal); LogUniform logUniform(-0.5, 1.5); study.add("logUniform", logUniform); MeixnerDistribution meixnerDistribution(1.5, 0.5, 2.5, -0.5); study.add("meixnerDistribution", meixnerDistribution); Rayleigh rayleigh(2.5, -0.5); study.add("rayleigh", rayleigh); Rice rice(5.0, 4.0); study.add("rice", rice); Student student(5.0, -0.5, 2.0); study.add("student", student); Trapezoidal trapezoidal(1.0, 1.2, 3.0, 14.0); study.add("trapezoidal", trapezoidal); Triangular triangular(-0.5, 1.5, 2.5); study.add("triangular", triangular); TruncatedDistribution truncatedDistribution(Normal(2.0, 1.5), 1.0, 4.0); study.add("truncatedDistribution", truncatedDistribution); TruncatedNormal truncatedNormal(0.5, 3.0, -2.0, 2.0); study.add("truncatedNormal", truncatedNormal); // Create an UserDefined Sample x(3, 1); x[0][0] = 1.0; x[1][0] = 2.0; x[2][0] = 3.0; Point p(3); p[0] = 0.3; p[1] = 0.1; p[2] = 0.6; UserDefined userDefined(x, p); study.add("userDefined", userDefined); // Create a Weibull distribution Weibull weibull(2.0, 1.5, -0.5); study.add("weibull", weibull); // Create a NormalCopula distribution CorrelationMatrix R(3); R(0, 1) = 0.5; R(1, 2) = 0.5; NormalCopula normalCopula(R); study.add("normalCopula", normalCopula); // Create a Uniform distribution Uniform uniform(-1.5, 2.0); study.add("uniform", uniform); // Create a ComposedDistribution ComposedDistribution::DistributionCollection collection; collection.add(beta); collection.add(gamma); collection.add(logistic); ComposedDistribution composedDistribution(collection, normalCopula); study.add("composedDistribution", composedDistribution); // Create an analytical Function Description input(3); input[0] = "a"; input[1] = "b"; input[2] = "c"; Description output(3); output[0] = "squaresum"; output[1] = "prod"; output[2] = "complex"; Description formulas(output.getSize()); formulas[0] = "a+b+c"; formulas[1] = "a-b*c"; formulas[2] = "(a+2*b^2+3*c^3)/6"; SymbolicFunction analytical(input, formulas); analytical.setName("analytical"); study.add("analytical", analytical); // Create an Event Object Event event; { Point point(3); point[0] = 101; point[1] = 202; point[2] = 303; RandomVector vect(point); RandomVector output(analytical.getMarginal(0), vect); event = Event (output, Less(), 50); } study.add("event", event); // Create a StandardEvent Object StandardEvent standardEvent(event); study.add("standardEvent", standardEvent); // Create a TaylorExpansionMoments algorithm TaylorExpansionMoments taylorExpansionMoments; { RandomVector antecedent(IndependentCopula(analytical.getInputDimension())); antecedent.setName("antecedent"); RandomVector composite(analytical, antecedent); composite.setName("composite"); taylorExpansionMoments = TaylorExpansionMoments(composite); taylorExpansionMoments.setName("taylorExpansionMoments"); taylorExpansionMoments.getMeanFirstOrder(); taylorExpansionMoments.getMeanSecondOrder(); taylorExpansionMoments.getCovariance(); } study.add("taylorExpansionMoments", taylorExpansionMoments); // Create an AbdoRackwitz algorithm AbdoRackwitz abdoRackwitz; abdoRackwitz.setMaximumIterationNumber(100); abdoRackwitz.setMaximumAbsoluteError(1.0e-10); abdoRackwitz.setMaximumRelativeError(1.0e-10); abdoRackwitz.setMaximumResidualError(1.0e-10); abdoRackwitz.setMaximumConstraintError(1.0e-10); study.add("abdoRackwitz", abdoRackwitz); // Create a SQP algorithm SQP sqp; sqp.setMaximumIterationNumber(100); sqp.setMaximumAbsoluteError(1.0e-10); sqp.setMaximumRelativeError(1.0e-10); sqp.setMaximumResidualError(1.0e-10); sqp.setMaximumConstraintError(1.0e-10); study.add("sqp", sqp); // Create a Cobyla algorithm Cobyla cobyla; study.add("cobyla", cobyla); cobyla.setMaximumIterationNumber(100); cobyla.setMaximumAbsoluteError(1.0e-10); cobyla.setMaximumRelativeError(1.0e-10); cobyla.setMaximumResidualError(1.0e-10); cobyla.setMaximumConstraintError(1.0e-10); // Create a TNC algorithm OptimizationAlgorithm tnc(new TNC()); { Interval bounds(Point(3, -3.0), Point(3, 5.0)); Description input2(3); input2[0] = "x"; input2[1] = "y"; input2[2] = "z"; Description output2(1); output2[0] = "d"; Description formula2(output2.getSize()); formula2[0] = "(x+2*y^2+3*z^3)/6"; SymbolicFunction model(input2, formula2); model.setName("complex"); OptimizationProblem problem(model); problem.setBounds(bounds); problem.setMinimization(true); tnc.setProblem(problem); tnc.setStartingPoint(Point(3, 1.0)); } study.add("tnc", tnc); // Create a SORM algorithm SORM sorm(abdoRackwitz, event, Point(3, 4.)); study.add("sorm", sorm); // Create a FORMResult FORMResult formResult; // Create a SORMResult SORMResult sormResult; { Description input2(2); input2[0] = "x"; input2[1] = "y"; Description output2(1); output2[0] = "d"; Description formula2(1); formula2[0] = "y^2-x"; SymbolicFunction model(input2, formula2); model.setName("sum"); RandomVector input3(Normal(2)); input3.setName("input"); RandomVector output3(model, input3); output3.setName("output"); Event event(output3, Greater(), 1.0); event.setName("failureEvent"); Point designPoint(2, 0.0); designPoint[0] = 1.0; formResult = FORMResult(Point(2, 1.0), event, false); formResult.setName("formResult"); formResult.getImportanceFactors(); formResult.getImportanceFactors(AnalyticalResult::CLASSICAL); formResult.getImportanceFactors(AnalyticalResult::PHYSICAL); formResult.getEventProbabilitySensitivity(); sormResult = SORMResult (Point(2, 1.0), event, false); sormResult.setName("sormResult"); sormResult.getEventProbabilityBreitung(); sormResult.getEventProbabilityHohenBichler(); sormResult.getEventProbabilityTvedt(); sormResult.getGeneralisedReliabilityIndexBreitung(); sormResult.getGeneralisedReliabilityIndexHohenBichler(); sormResult.getGeneralisedReliabilityIndexTvedt(); } study.add("formResult", formResult); study.add("sormResult", sormResult); // Create an ARMACoefficients ARMACoefficients armaCoefficients; { const UnsignedInteger dim = 2; SquareMatrix squareMatrix1(dim); squareMatrix1(0, 0) = 1.; squareMatrix1(1, 0) = 2.; squareMatrix1(0, 1) = 3.; squareMatrix1(1, 1) = 4.; double s = 3.; SquareMatrix squareMatrix2 = squareMatrix1.operator * (s) ; double t = 1.5; SquareMatrix squareMatrix3 = squareMatrix1.operator / (t) ; const UnsignedInteger size = 3; armaCoefficients = ARMACoefficients(size, dim); armaCoefficients[0] = squareMatrix1 ; armaCoefficients[1] = squareMatrix2 ; armaCoefficients[2] = squareMatrix3 ; } study.add("armaCoefficients", armaCoefficients); // Create an ARMAState ARMAState armaState; { const UnsignedInteger dim = 1; const UnsignedInteger p = 6; const UnsignedInteger q = 4; Sample valuesX(p, dim); Sample valuesEpsilon(q, dim); for(UnsignedInteger j = 0 ; j < dim ; ++j) { for(UnsignedInteger i = 0 ; i < p ; ++i) { valuesX[i][j] = 2.0 * i + 3.0 * j + 1.0; } for(UnsignedInteger i = 0 ; i < q ; ++i) { valuesEpsilon[i][j] = RandomGenerator::Generate() ; } } armaState = ARMAState(valuesX, valuesEpsilon); } study.add("armaState", armaState); // Create a RegularGrid RegularGrid regularGrid; { const UnsignedInteger points = 8; const Scalar tMin = 0.0; const Scalar tStep = 1.0 / (points - 1); regularGrid = RegularGrid(tMin, tStep, points); } study.add("regularGrid", regularGrid); // Create a WhiteNoise WhiteNoise whiteNoise; { Distribution dist1 = Normal(0.0, 0.01); Distribution dist2 = Normal(0.0, 0.02); ComposedDistribution::DistributionCollection aCollection; aCollection.add( dist1 ); aCollection.add( dist2 ); Distribution dist = ComposedDistribution(aCollection); whiteNoise = WhiteNoise(dist); whiteNoise.setTimeGrid(regularGrid); } study.add("whiteNoise", whiteNoise); // Create an WhittleFactory WhittleFactory whittleFactory; { const UnsignedInteger p = 1; const UnsignedInteger q = 2; whittleFactory = WhittleFactory( p, q ); } study.add("whittleFactory", whittleFactory); // Create an ARMA ARMA arma; { const UnsignedInteger dim = 2; SquareMatrix squareMatrix1(dim); squareMatrix1(0, 0) = 0.2 ; squareMatrix1(1, 0) = 0.3 ; squareMatrix1(0, 1) = 0.7 ; squareMatrix1(1, 1) = 0.4 ; SquareMatrix squareMatrix2(dim) ; squareMatrix2(0, 0) = 0.1; squareMatrix2(1, 0) = 0.0; squareMatrix2(0, 1) = 0.0; squareMatrix2(1, 1) = 0.5; const UnsignedInteger p = 1; const UnsignedInteger q = 1; ARMACoefficients coefficientsP(p, dim); coefficientsP[0] = squareMatrix1 ; ARMACoefficients coefficientsQ(q, dim); coefficientsQ[0] = squareMatrix2 ; arma = ARMA(coefficientsP, coefficientsQ, whiteNoise); } study.add("arma", arma); // Create a Basis, BasisSequence Basis basis; BasisSequence basisSequence; { const UnsignedInteger dimension = 3; Description input; Description output[dimension]; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { OSS oss; oss << "x" << j; String in(oss); input.add(in); output[j].add(in); } Collection coll; Indices cumulBasis; Indices partialBasis[dimension]; for ( UnsignedInteger j = 0; j < dimension; ++ j ) { SymbolicFunction ei(input, output[j]); coll.add(ei); cumulBasis.add(j); partialBasis[j] = cumulBasis; } basis = Basis(coll); basisSequence = BasisSequence(basis); for ( UnsignedInteger j = 0; j < dimension; ++ j ) { basisSequence.add(partialBasis[j]); } } study.add("basis", basis); study.add("basisSequence", basisSequence); // Create an UniVariatePolynomial UniVariatePolynomial uniVariatePolynomial; { UniVariatePolynomial::Coefficients coefficients(3); coefficients[0] = -2.5; coefficients[1] = 3.5; coefficients[2] = -1.2; uniVariatePolynomial = UniVariatePolynomial(coefficients); } study.add("uniVariatePolynomial", uniVariatePolynomial); // Create a Burr Burr burr(1.5, 4.5); study.add("burr", burr); // Create a CauchyModel CauchyModel cauchyModel; // Create an ExponentialCauchy ExponentialCauchy exponentialCauchy; // Create an AbsoluteExponential AbsoluteExponential absoluteExponential; { const UnsignedInteger defaultDimension = 1; const UnsignedInteger spatialDimension = 1; Point amplitude(defaultDimension, 1.0); Point scale(spatialDimension, 1.0); cauchyModel = CauchyModel (scale, amplitude); exponentialCauchy = ExponentialCauchy (scale, amplitude); absoluteExponential = AbsoluteExponential(scale, amplitude); } study.add("cauchyModel", cauchyModel); study.add("exponentialCauchy", exponentialCauchy); study.add("absoluteExponential", absoluteExponential); // Create a second order model SecondOrderModel secondOrderModel(absoluteExponential, cauchyModel); study.add("secondOrderModel", secondOrderModel); // Create a SpectralGaussianProcess SpectralGaussianProcess spectralGaussianProcess(exponentialCauchy, regularGrid); study.add("spectralGaussianProcess", spectralGaussianProcess); // Create an UserDefinedSpectralModel UserDefinedSpectralModel userDefinedSpectralModel; { UnsignedInteger size = 5; UserDefinedSpectralModel::HermitianMatrixCollection dspCollection(size); RegularGrid frequencyGrid(0.0, 2.0 / size, size); for (UnsignedInteger i = 0; i < size; ++i) dspCollection[i] = cauchyModel(frequencyGrid.getValue(i)); userDefinedSpectralModel = UserDefinedSpectralModel(frequencyGrid, dspCollection); } study.add("userDefinedSpectralModel", userDefinedSpectralModel); // Create a GaussianProcess GaussianProcess gaussianProcess(exponentialCauchy, regularGrid); study.add("gaussianProcess", gaussianProcess); // Create a CompositeProcess Object CompositeProcess compositeProcess; { Scalar Tmin = 0.0; Scalar deltaT = 0.1; UnsignedInteger steps = 11; RegularGrid timeGrid(Tmin, deltaT, steps); ARMA myARMAProcess; myARMAProcess.setTimeGrid(timeGrid); Description inputDescription(1, "x"); Description formula(1, "2 * x + 5"); SymbolicFunction myOneDimensionalFunction(inputDescription, formula); ValueFunction myFunction(myOneDimensionalFunction); compositeProcess = CompositeProcess (myFunction, myARMAProcess); } study.add("compositeProcess", compositeProcess); // Create a Domain Object Domain domain; { UnsignedInteger dim = 2; Point a(dim, -1.0); Point b(dim, 2.0); domain = Interval(a, b); } study.add("domain", domain); // Create an EventDomain EventDomain eventDomain; { UnsignedInteger dim = 2; Normal distribution(dim); RandomVector X(distribution); Description inVars(dim); for (UnsignedInteger i = 0; i < dim; ++i) inVars[i] = OSS() << "x" << i; SymbolicFunction model(inVars, inVars); CompositeRandomVector Y(model, X); Interval domain(dim); eventDomain = EventDomain(Y, domain); } study.add("eventDomain", eventDomain); // Create an EventProcess EventProcess eventProcess; { UnsignedInteger dim = 2; Normal distribution(dim); WhiteNoise X(distribution); Interval domain(dim); eventProcess = EventProcess(X, domain); } study.add("eventProcess", eventProcess); // Create a ConstantStep ConstantStep constantStep; // Create a BlendedStep BlendedStep blendedStep; { UnsignedInteger dimension = 2; Point epsilon( dimension, 1e-5 ); constantStep = ConstantStep(epsilon); Point eta( dimension, 1.0 ); blendedStep = BlendedStep(epsilon, eta); } study.add("constantStep", constantStep); study.add("blendedStep", blendedStep); // Create a FunctionalBasisProcess FunctionalBasisProcess functionalBasisProcess; { UnsignedInteger basisDimension = 10; Basis basis(basisDimension); Collection coefficients(basisDimension); for (UnsignedInteger i = 0; i < basisDimension; ++i) { basis[i] = SymbolicFunction("x", String(OSS() << "sin(" << i << "*x)")); coefficients[i] = Normal(0.0, (1.0 + i)); } functionalBasisProcess = FunctionalBasisProcess(ComposedDistribution(coefficients), basis); } study.add("functionalBasisProcess", functionalBasisProcess); // Create a SquareMatrix SquareMatrix squareMatrix(2); squareMatrix(0, 0) = 1. ; squareMatrix(1, 0) = 2. ; squareMatrix(0, 1) = 3. ; squareMatrix(1, 1) = 4. ; study.add("squareMatrix", squareMatrix); // Create a SymmetricMatrix SymmetricMatrix symmetricMatrix(2); symmetricMatrix(0, 0) = 1. ; symmetricMatrix(1, 0) = 2. ; symmetricMatrix(0, 1) = 3. ; symmetricMatrix(1, 1) = 4. ; study.add("symmetricMatrix", symmetricMatrix); // Create a Tensor Tensor tensor(2, 2, 3); tensor.setName("tensor1"); tensor(0, 0, 0) = 1. ; tensor(1, 0, 0) = 2. ; tensor(0, 1, 0) = 3. ; tensor(1, 1, 0) = 4. ; tensor(0, 0, 1) = 5. ; tensor(1, 0, 1) = 6. ; tensor(0, 1, 1) = 7. ; tensor(1, 1, 1) = 8. ; tensor(0, 0, 2) = 9. ; tensor(1, 0, 2) = 10. ; tensor(0, 1, 2) = 11. ; tensor(1, 1, 2) = 12. ; study.add("tensor", tensor); // Create a SymmetricTensor SymmetricTensor symmetricTensor(2, 3); symmetricTensor.setName("symtensor1"); symmetricTensor(0, 0, 0) = 1. ; symmetricTensor(1, 0, 0) = 2. ; symmetricTensor(1, 1, 0) = 3. ; symmetricTensor(0, 0, 1) = 4. ; symmetricTensor(1, 0, 1) = 5. ; symmetricTensor(1, 1, 1) = 6. ; symmetricTensor(0, 0, 2) = 7. ; symmetricTensor(1, 0, 2) = 8. ; symmetricTensor(1, 1, 2) = 9. ; study.add("symmetricTensor", symmetricTensor); // Create a SquareComplexMatrix SquareComplexMatrix squareComplexMatrix(2); squareComplexMatrix(0, 0) = Complex(1.0, 1.0) ; squareComplexMatrix(0, 1) = Complex(3.0, 1.0) ; squareComplexMatrix(1, 0) = Complex(0.0, 1.0) ; squareComplexMatrix(1, 1) = Complex(5.0, 1.0) ; study.add("squareComplexMatrix", squareComplexMatrix); // Create a TriangularComplexMatrix TriangularComplexMatrix triangularComplexMatrix(2); triangularComplexMatrix(0, 0) = 1. ; triangularComplexMatrix(1, 0) = Complex(3., 1.0) ; triangularComplexMatrix(1, 1) = 4. ; study.add("triangularComplexMatrix", triangularComplexMatrix); // Create an HermitianMatrix HermitianMatrix hermitianMatrix(2); study.add("hermitianMatrix", hermitianMatrix); // Create a LHS LHS lhs(event); lhs.setMaximumOuterSampling(250); lhs.setBlockSize(4); lhs.setMaximumCoefficientOfVariation(0.1); study.add("lhs", lhs); // Create a Mixture Mixture mixture; { UnsignedInteger dimension = 3; Point meanPoint(dimension, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dimension, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dimension); for (UnsignedInteger i = 1; i < dimension; i++) { R(i, i - 1) = 0.5; } // Create a collection of distribution Mixture::DistributionCollection aCollection; aCollection.add( Normal(meanPoint, sigma, R) ); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, R) ); meanPoint += Point(dimension, 1.0); aCollection.add( Normal(meanPoint, sigma, R) ); mixture = Mixture(aCollection, Point(aCollection.getSize(), 2.0)); } study.add("mixture", mixture); // Create a MixtureClassifier MixtureClassifier mixtureClassifier(mixture); study.add("mixtureClassifier", mixtureClassifier); // Create a MonteCarlo MonteCarlo monteCarlo(event); monteCarlo.setMaximumOuterSampling(250); monteCarlo.setBlockSize(4); monteCarlo.setMaximumCoefficientOfVariation(0.1); study.add("monteCarlo", monteCarlo); // Create a QuasiMonteCarlo QuasiMonteCarlo quasiMonteCarlo(event); study.add("quasiMonteCarlo", quasiMonteCarlo); // Create a RandomizedLHS RandomizedLHS randomizedLHS(event); study.add("randomizedLHS", randomizedLHS); // Create a RandomizedLHS RandomizedQuasiMonteCarlo randomizedQuasiMonteCarlo(event); study.add("randomizedQuasiMonteCarlo", randomizedQuasiMonteCarlo); // Create a RandomWalk RandomWalk randomWalk; { Distribution dist = Uniform(); Point origin(dist.getDimension()); randomWalk = RandomWalk(origin, dist); } study.add("randomWalk", randomWalk); // Create a TestResult TestResult testResult; { String type = "testResult"; Bool testBool = 1; Scalar testVal = 0.372; Scalar testThres = 0.42; testResult = TestResult(type, testBool, testVal, testThres); } study.add("testResult", testResult); // Create a StrongMaximumTest StrongMaximumTest strongMaximumTest; { UnsignedInteger dim = analytical.getInputDimension(); double seuil(10); Point designPoint(dim, 0.0); double C(0.3); designPoint[0] = - sqrt(seuil) + C; Point pseudoDesignPoint(dim, 0.0); pseudoDesignPoint[0] = sqrt(seuil) + C; Scalar importanceLevel = 0.01; Scalar accuracyLevel = 2; Scalar confidenceLevel = 0.999999; strongMaximumTest = StrongMaximumTest(standardEvent, designPoint, importanceLevel, accuracyLevel, confidenceLevel); } study.add("strongMaximumTest", strongMaximumTest); // Create an ExpertMixture ExpertMixture expertMixture; { Mixture::DistributionCollection aCollection; CorrelationMatrix R(2); R(0, 1) = -0.99; Point mean(2); mean[0] = -1.0; mean[1] = 1.0; aCollection.add( Normal(mean, Point(2, 1.0), R) ); R(0, 1) = 0.99; mean[0] = 1.0; aCollection.add( Normal(mean, Point(2, 1.0), R) ); Mixture distribution(aCollection, Point(aCollection.getSize(), 1.0)); MixtureClassifier classifier(distribution); Basis experts(0); experts.add(SymbolicFunction("x", "-x")); experts.add(SymbolicFunction("x", "x")); expertMixture = ExpertMixture(experts, classifier); } study.add("expertMixture", expertMixture); // Create a CovarianceModel UserDefinedCovarianceModel userDefinedCovarianceModel; UserDefinedStationaryCovarianceModel userDefinedStationaryCovarianceModel; { const UnsignedInteger dimension = 1; const UnsignedInteger spatialDimension = 1; Point amplitude(dimension); Point scale(spatialDimension); CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { amplitude[index] = 1.0 ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } for (UnsignedInteger index = 0 ; index < spatialDimension; ++index) scale[index] = (index + 1.0) / dimension ; ExponentialModel referenceModel(scale, amplitude, spatialCorrelation); UnsignedInteger size = 20; RegularGrid timeGrid(0.0, 0.1, size); { const UnsignedInteger collectionSize = size * (size + 1) / 2; UserDefinedCovarianceModel::CovarianceMatrixCollection covarianceCollection(collectionSize); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < timeGrid.getN(); ++i) { const Scalar t = timeGrid.getValue(i); for (UnsignedInteger j = i; j < timeGrid.getN(); ++j) { const Scalar s = timeGrid.getValue(j); covarianceCollection[k] = referenceModel(t, s); k++; } } userDefinedCovarianceModel = UserDefinedCovarianceModel(timeGrid, covarianceCollection); } { UserDefinedStationaryCovarianceModel::CovarianceMatrixCollection covarianceCollection(size); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar t = timeGrid.getValue(i); covarianceCollection[i] = referenceModel(0, t); } userDefinedStationaryCovarianceModel = UserDefinedStationaryCovarianceModel(timeGrid, covarianceCollection); } } study.add("userDefinedCovarianceModel", userDefinedCovarianceModel); study.add("userDefinedStationaryCovarianceModel", userDefinedStationaryCovarianceModel); // Create a RandomGeneratorState RandomGenerator::SetSeed(0); RandomGeneratorState randomGeneratorState(RandomGenerator::GetState()); study.add("randomGeneratorState", randomGeneratorState); fullprint << "Save the study..." << std::endl; study.save(); // Create a Study Object Study study2; study2.setStorageManager(XMLStorageManager(fileName)); study2.load(); // fullprint << "saved Study = " << study << std::endl; // fullprint << "loaded Study = " << study2 << std::endl; Point namedPoint2; study2.fillObjectByName( namedPoint2, "point" ); fullprint << "saved Point = " << namedPoint << std::endl; fullprint << "loaded Point = " << namedPoint2 << std::endl; // Type compare( numericalPoint, study2, "Good"); compare( numericalPointWithDescription, study2, "pDesc"); compare( matrix, study2, "m"); compare(squareMatrix, study2 ); compare(symmetricMatrix, study2 ); compare(tensor, study2 ); compare(symmetricTensor, study2 ); compare(squareComplexMatrix, study2 ); compare(triangularComplexMatrix, study2 ); compare(hermitianMatrix, study2 ); // Graph compare( staircase, study2 ); // Stat compare( numericalSample, study2, "mySample"); compare( randomGeneratorState, study2 ); // Func compare( analytical, study2 , "analytical"); // Optim compare( abdoRackwitz, study2 ); compare( sqp, study2, "sqp" ); compare( cobyla, study2, "cobyla" ); compare( tnc, study2, "tnc" ); // Model compare( event, study2 ); compare( standardEvent, study2 ); // Distribution compare( arcsine, study2 ); compare( beta, study2 ); compare( burr, study2 ); compare( chi, study2 ); compare( chiSquare, study2 ); compare( dirichlet, study2 ); compare( composedDistribution, study2 ); compare( exponential, study2 ); compare( fisherSnedecor, study2 ); compare( gamma, study2 ); compare( generalizedPareto, study2 ); compare( geometric, study2 ); compare( gumbel, study2 ); compare( independentCopula, study2 ); compare(inverseNormal, study2 ); compare( kernelSmoothing, study2 ); compare( laplace, study2 ); compare( logistic, study2 ); compare( logNormal, study2 ); compare(logUniform, study2 ); compare(meixnerDistribution, study2 ); compare(mixture, study2 ); compare( normalCopula, study2 ); compare(rayleigh, study2 ); compare(rice, study2 ); compare(student, study2 ); compare(trapezoidal, study2 ); compare(triangular, study2 ); compare(truncatedDistribution, study2 ); compare(truncatedNormal, study2 ); compare( uniform, study2 ); compare(userDefined, study2 ); compare(weibull, study2 ); // Simulation compare(monteCarlo, study2 ); compare(lhs, study2, "lhs"); compare(quasiMonteCarlo, study2 ); compare(randomizedLHS, study2 ); compare(randomizedQuasiMonteCarlo, study2 ); compare( simulationResult, study2 ); // Analytical compare( sorm, study2, "sorm"); compare( formResult, study2 , "formResult"); compare( sormResult, study2, "sormResult"); compare( taylorExpansionMoments, study2 ); // Process compare( armaCoefficients, study2 , "armaCoefficients"); compare( armaState, study2, "armaState"); compare( whiteNoise, study2 ); compare( whittleFactory, study2 ); compare( arma, study2, "arma"); compare( basis, study2 ); compare( basisSequence, study2 ); compare( uniVariatePolynomial, study2 ); compare( cauchyModel, study2 ); compare( exponentialCauchy, study2 ); compare( absoluteExponential, study2 ); compare( secondOrderModel, study2 ); compare( compositeProcess, study2 ); compare( spectralGaussianProcess, study2 ); compare( gaussianProcess, study2 ); compare( domain, study2 ); compare( eventDomain, study2 ); compare( eventProcess, study2 ); compare( constantStep, study2 ); compare( blendedStep, study2 ); compare( functionalBasisProcess, study2 ); compare(randomWalk, study2 ); compare(regularGrid, study2 ); compare(mixtureClassifier, study2 ); // StatTest compare( testResult, study2 ); compare( strongMaximumTest, study2 ); // ExpertMixture compare( expertMixture, study2 ); // CovarianceModel compare( userDefinedCovarianceModel, study2 ); compare( userDefinedStationaryCovarianceModel, study2 ); // cleanup Os::Remove(fileName); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Study_saveload.expout000066400000000000000000006133261307543307100217420ustar00rootroot00000000000000Save the study... saved Point = class=Point name=point dimension=2 values=[1000,1000] loaded Point = class=Point name=point dimension=3 values=[10,11,12] saved Point = class=Point name=point dimension=3 values=[10,11,12] loaded Point = class=Point name=point dimension=3 values=[10,11,12] saved PointWithDescription = class=PointWithDescription name=Unnamed dimension=3 description=[x,y,z] values=[10,11,12] loaded PointWithDescription = class=PointWithDescription name=Unnamed dimension=3 description=[x,y,z] values=[10,11,12] saved Matrix = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0,3,1,4,2,5] loaded Matrix = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0,3,1,4,2,5] saved SquareMatrix = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] loaded SquareMatrix = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] saved SymmetricMatrix = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] loaded SymmetricMatrix = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] saved Tensor = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] loaded Tensor = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] saved SymmetricTensor = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] loaded SymmetricTensor = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] saved SquareComplexMatrix = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] loaded SquareComplexMatrix = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] saved TriangularComplexMatrix = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] loaded TriangularComplexMatrix = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] saved HermitianMatrix = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(0,0),(0,0),(0,0)] loaded HermitianMatrix = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(0,0),(0,0),(0,0)] saved Staircase = class=Staircase name=eCDF2, pat=S pattern=S derived from class=DrawableImplementation name=eCDF2, pat=S legend=eCDF2, pat=S data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[-13.5,0.002],[-12.3,0.004],[-11.1,0.009],[-9.9,0.0205],[-8.7,0.039],[-7.5,0.0665],[-6.3,0.1215],[-5.1,0.1915],[-3.9,0.285],[-2.7,0.39],[-1.5,0.4985],[-0.3,0.6095],[0.9,0.7095],[2.1,0.814],[3.3,0.881],[4.5,0.9365],[5.7,0.9675],[6.9,0.985],[8.1,0.9915],[9.3,0.9965]] color=red fillStyle=solid lineStyle=dashed pointStyle=plus lineWidth=1 loaded Staircase = class=Staircase name=eCDF2, pat=S pattern=S derived from class=DrawableImplementation name=eCDF2, pat=S legend=eCDF2, pat=S data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[-13.5,0.002],[-12.3,0.004],[-11.1,0.009],[-9.9,0.0205],[-8.7,0.039],[-7.5,0.0665],[-6.3,0.1215],[-5.1,0.1915],[-3.9,0.285],[-2.7,0.39],[-1.5,0.4985],[-0.3,0.6095],[0.9,0.7095],[2.1,0.814],[3.3,0.881],[4.5,0.9365],[5.7,0.9675],[6.9,0.985],[8.1,0.9915],[9.3,0.9965]] color=red fillStyle=solid lineStyle=dashed pointStyle=plus lineWidth=1 saved Sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[100,200],[101,201],[102,202]] loaded Sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[100,200],[101,201],[102,202]] saved RandomGeneratorState = RandomGeneratorState(buffer=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923], index=0) loaded RandomGeneratorState = RandomGeneratorState(buffer=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923], index=0) saved Function = class=SymbolicFunction name=analytical implementation=class=FunctionImplementation name=analytical description=[a,b,c,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] loaded Function = class=Function name=analytical implementation=class=FunctionImplementation name=analytical description=[a,b,c,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] saved AbdoRackwitz = class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 loaded AbdoRackwitz = class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 saved SQP = class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 loaded SQP = class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 saved Cobyla = class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 loaded Cobyla = class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false rhoBeg=0.1 saved OptimizationAlgorithm = class=OptimizationAlgorithm implementation=class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=complex implementation=class=FunctionImplementation name=complex description=[x,y,z,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[-3,-3,-3] upper bound=class=Point name=Unnamed dimension=3 values=[5,5,5] finite lower bound=[1,1,1] finite upper bound=[1,1,1] minimization=true dimension=3 startingPoint=class=Point name=Unnamed dimension=3 values=[1,1,1] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 loaded OptimizationAlgorithm = class=OptimizationAlgorithm implementation=class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=complex implementation=class=FunctionImplementation name=complex description=[x,y,z,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y,z] outputVariablesNames=[y0] formulas=[(x+2*y^2+3*z^3)/6] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[-3,-3,-3] upper bound=class=Point name=Unnamed dimension=3 values=[5,5,5] finite lower bound=[1,1,1] finite upper bound=[1,1,1] minimization=true dimension=3 startingPoint=class=Point name=Unnamed dimension=3 values=[1,1,1] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 saved Event = class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 loaded Event = class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 saved StandardEvent = class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[X0,X1,X2,y0] left function=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] right function=class=FunctionImplementation name=Unnamed description=[X0,X1,X2,X0,X1,X2] evaluationImplementation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[1e-05,1e-05,1e-05] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[0.0001,0.0001,0.0001] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] operator=class=Less name=Unnamed threshold=50 loaded StandardEvent = class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[X0,X1,X2,y0] left function=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] right function=class=FunctionImplementation name=Unnamed description=[X0,X1,X2,X0,X1,X2] evaluationImplementation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[1e-05,1e-05,1e-05] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[0.0001,0.0001,0.0001] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] operator=class=Less name=Unnamed threshold=50 saved Arcsine = class=Arcsine name=Arcsine dimension=1 a=5.2 b=11.6 loaded Arcsine = class=Arcsine name=Arcsine dimension=1 a=5.2 b=11.6 saved Beta = class=Beta name=Beta dimension=1 r=3 t=5 a=-1 b=4 loaded Beta = class=Beta name=Beta dimension=1 r=3 t=5 a=-1 b=4 saved Burr = class=Burr name=Burr dimension=1 c=1.5 k=4.5 loaded Burr = class=Burr name=Burr dimension=1 c=1.5 k=4.5 saved Chi = class=Chi name=Chi dimension=1 nu=1.5 loaded Chi = class=Chi name=Chi dimension=1 nu=1.5 saved ChiSquare = class=ChiSquare name=ChiSquare dimension=1 nu=1.5 loaded ChiSquare = class=ChiSquare name=ChiSquare dimension=1 nu=1.5 saved Dirichlet = class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.25,1.5,1.75] loaded Dirichlet = class=Dirichlet name=Dirichlet dimension=2 theta=class=Point name=Unnamed dimension=3 values=[1.25,1.5,1.75] saved ComposedDistribution = class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] marginal[0]=class=Beta name=Beta dimension=1 r=3 t=5 a=-1 b=4 marginal[1]=class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=-2 marginal[2]=class=Logistic name=Logistic dimension=1 alpha=0.5 beta=1.5 loaded ComposedDistribution = class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] marginal[0]=class=Beta name=Beta dimension=1 r=3 t=5 a=-1 b=4 marginal[1]=class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=-2 marginal[2]=class=Logistic name=Logistic dimension=1 alpha=0.5 beta=1.5 saved Exponential = class=Exponential name=Exponential dimension=1 lambda=3 gamma=-2 loaded Exponential = class=Exponential name=Exponential dimension=1 lambda=3 gamma=-2 saved FisherSnedecor = class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 loaded FisherSnedecor = class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 saved Gamma = class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=-2 loaded Gamma = class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=-2 saved GeneralizedPareto = class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=-0.2 loaded GeneralizedPareto = class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=-0.2 saved Geometric = class=Geometric name=Geometric dimension=1 p=0.15 loaded Geometric = class=Geometric name=Geometric dimension=1 p=0.15 saved Gumbel = class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 loaded Gumbel = class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 saved IndependentCopula = class=IndependentCopula name=IndependentCopula dimension=5 loaded IndependentCopula = class=IndependentCopula name=IndependentCopula dimension=5 saved InverseNormal = class=InverseNormal name=InverseNormal dimension=1 lambda=0.5 mu=2 loaded InverseNormal = class=InverseNormal name=InverseNormal dimension=1 lambda=0.5 mu=2 saved KernelSmoothing = class=KernelSmoothing loaded KernelSmoothing = class=KernelSmoothing saved Laplace = class=Laplace name=Laplace dimension=1 lambda=0.666667 mu=0.5 loaded Laplace = class=Laplace name=Laplace dimension=1 lambda=0.666667 mu=0.5 saved Logistic = class=Logistic name=Logistic dimension=1 alpha=0.5 beta=1.5 loaded Logistic = class=Logistic name=Logistic dimension=1 alpha=0.5 beta=1.5 saved LogNormal = class=LogNormal name=LogNormal dimension=1 muLog=0.5 sigmaLog=1.5 gamma=-1 loaded LogNormal = class=LogNormal name=LogNormal dimension=1 muLog=0.5 sigmaLog=1.5 gamma=-1 saved LogUniform = class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 loaded LogUniform = class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 saved MeixnerDistribution = class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 loaded MeixnerDistribution = class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 saved Mixture = class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] loaded Mixture = class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] saved NormalCopula = class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] loaded NormalCopula = class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] saved Rayleigh = class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 loaded Rayleigh = class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 saved Rice = class=Rice name=Rice dimension=1 sigma=5 nu=4 loaded Rice = class=Rice name=Rice dimension=1 sigma=5 nu=4 saved Student = class=Student name=Student dimension=1 nu=5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] loaded Student = class=Student name=Student dimension=1 nu=5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] saved Trapezoidal = class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1.2 c=3 d=14 h=0.135135 loaded Trapezoidal = class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1.2 c=3 d=14 h=0.135135 saved Triangular = class=Triangular name=Triangular dimension=1 a=-0.5 m=1.5 b=2.5 loaded Triangular = class=Triangular name=Triangular dimension=1 a=-0.5 m=1.5 b=2.5 saved TruncatedDistribution = class=TruncatedDistribution name=TruncatedDistribution distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] lowerBound=1 finiteLowerBound=true upperBound=4 finiteUpperBound=true thresholdRealization=0.5 loaded TruncatedDistribution = class=TruncatedDistribution name=TruncatedDistribution distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] lowerBound=1 finiteLowerBound=true upperBound=4 finiteUpperBound=true thresholdRealization=0.5 saved TruncatedNormal = class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.5 sigma=3 a=-2 b=2 loaded TruncatedNormal = class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.5 sigma=3 a=-2 b=2 saved Uniform = class=Uniform name=Uniform dimension=1 a=-1.5 b=2 loaded Uniform = class=Uniform name=Uniform dimension=1 a=-1.5 b=2 saved UserDefined = class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[1],[2],[3]] probabilities=class=Point name=Unnamed dimension=3 values=[0.3,0.1,0.6] loaded UserDefined = class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[1],[2],[3]] probabilities=class=Point name=Unnamed dimension=3 values=[0.3,0.1,0.6] saved Weibull = class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 loaded Weibull = class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 saved MonteCarlo = class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 loaded MonteCarlo = class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 saved LHS = class=LHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 loaded LHS = class=LHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 saved QuasiMonteCarlo = class=QuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 loaded QuasiMonteCarlo = class=QuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 saved RandomizedLHS = class=RandomizedLHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 loaded RandomizedLHS = class=RandomizedLHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 saved RandomizedQuasiMonteCarlo = class=RandomizedQuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 loaded RandomizedQuasiMonteCarlo = class=RandomizedQuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 maximumOuterSampling=1000 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=1 saved SimulationResult = probabilityEstimate=5.000000e-01 varianceEstimate=1.000000e-02 standard deviation=1.00e-01 coefficient of variation=2.00e-01 confidenceLength(0.95)=3.92e-01 outerSampling=150 blockSize=4 loaded SimulationResult = probabilityEstimate=5.000000e-01 varianceEstimate=1.000000e-02 standard deviation=1.00e-01 coefficient of variation=2.00e-01 confidenceLength(0.95)=3.92e-01 outerSampling=150 blockSize=4 saved SORM = class=SORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] level value=50 bounds=none minimization=true dimension=3 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 physicalstartingPoint=class=Point name=Unnamed dimension=3 values=[4,4,4] result=class=SORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] sortedCurvatures=class=Point name=Unnamed dimension=0 values=[] eventProbabilityBreitung=-1 eventProbabilityHohenBichler=-1 eventProbabilityTvedt=-1 generalisedReliabilityIndexBreitung=1.79769e+308 generalisedReliabilityIndexHohenBichler=1.79769e+308 generalisedReliabilityIndexTvedt=1.79769e+308 gradientLimitStateFunction_=class=Point name=Unnamed dimension=0 values=[] hessianLimitStateFunction_=class=SquareMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] loaded SORM = class=SORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[0,0,0] constant=class=Point name=Unnamed dimension=1 values=[0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[1,0,0,0,1,0,0,0,1] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=3 values=[0,0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[1,0,0,0,1,0,0,0,1] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[1,0,0,0,1,0,0,0,1] equality constraint=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[0,0,0] constant=class=Point name=Unnamed dimension=1 values=[50] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] gradientImplementation=class=LinearCombinationGradient evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[0,0,0] constant=class=Point name=Unnamed dimension=1 values=[50] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] hessianImplementation=class=LinearCombinationHessian evaluation=class=LinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[0,0,0] constant=class=Point name=Unnamed dimension=1 values=[50] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[0,0,0] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[0,0,0,0,0,0,0,0,0]] coefficients=class=Point name=Unnamed dimension=2 values=[1,-1] inequality constraint=none bounds=none minimization=true dimension=3 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] antecedent=class=ConstantRandomVector description=[x0,x1,x2] point=class=Point name=Unnamed dimension=3 values=[101,202,303] operator=class=Less name=Unnamed threshold=50 physicalstartingPoint=class=Point name=Unnamed dimension=3 values=[4,4,4] result=class=SORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] sortedCurvatures=class=Point name=Unnamed dimension=0 values=[] eventProbabilityBreitung=-1 eventProbabilityHohenBichler=-1 eventProbabilityTvedt=-1 generalisedReliabilityIndexBreitung=1.79769e+308 generalisedReliabilityIndexHohenBichler=1.79769e+308 generalisedReliabilityIndexTvedt=1.79769e+308 gradientLimitStateFunction_=class=Point name=Unnamed dimension=0 values=[] hessianLimitStateFunction_=class=SquareMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] saved FORMResult = class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[1,1] limitStateVariable=class=Event name=failureEvent implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=sum implementation=class=FunctionImplementation name=sum description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=1 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.41421 importanceFactors=class=PointWithDescription name=Importance Factors dimension=2 description=[X0,X1] values=[0.5,0.5] classicalImportanceFactors=class=PointWithDescription name=Classical Importance Factors dimension=2 description=[X0,X1] values=[0.5,0.5] hasoferReliabilityIndexSensitivity=[[mean_0 : 0.447214, standard_deviation_0 : 0.447214],[mean_1 : -0.894427, standard_deviation_1 : -0.894427],[R_1_0 : 0]] eventProbability=0.0786496 generalisedReliabilityIndex=1.41421 eventProbabilitySensitivity=[[mean_0 : -0.0656343, standard_deviation_0 : -0.0656343],[mean_1 : 0.131269, standard_deviation_1 : 0.131269],[R_1_0 : -0]] loaded FORMResult = class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[1,1] limitStateVariable=class=Event name=failureEvent implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=sum implementation=class=FunctionImplementation name=sum description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=1 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.41421 importanceFactors=class=PointWithDescription name=Importance Factors dimension=2 description=[X0,X1] values=[0.5,0.5] classicalImportanceFactors=class=PointWithDescription name=Classical Importance Factors dimension=2 description=[X0,X1] values=[0.5,0.5] hasoferReliabilityIndexSensitivity=[[mean_0 : 0.447214, standard_deviation_0 : 0.447214],[mean_1 : -0.894427, standard_deviation_1 : -0.894427],[R_1_0 : 0]] eventProbability=0.0786496 generalisedReliabilityIndex=1.41421 eventProbabilitySensitivity=[[mean_0 : -0.0656343, standard_deviation_0 : -0.0656343],[mean_1 : 0.131269, standard_deviation_1 : 0.131269],[R_1_0 : -0]] saved SORMResult = class=SORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[1,1] limitStateVariable=class=Event name=failureEvent implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=sum implementation=class=FunctionImplementation name=sum description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=1 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.41421 importanceFactors=class=PointWithDescription name=Unnamed dimension=2 description=[,] values=[0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=2 description=[,] values=[0,0] hasoferReliabilityIndexSensitivity=[] sortedCurvatures=class=Point name=Unnamed dimension=2 values=[-0.178885,0] eventProbabilityBreitung=0.0909978 eventProbabilityHohenBichler=0.0963599 eventProbabilityTvedt=0.0949791 generalisedReliabilityIndexBreitung=1.33464 generalisedReliabilityIndexHohenBichler=1.30258 generalisedReliabilityIndexTvedt=1.3107 gradientLimitStateFunction_=class=Point name=Unnamed dimension=2 values=[-1,2] hessianLimitStateFunction_=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,2] loaded SORMResult = class=SORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[1,1] limitStateVariable=class=Event name=failureEvent implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=sum implementation=class=FunctionImplementation name=sum description=[x,y,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[y0] formulas=[y^2-x] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=1 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.41421 importanceFactors=class=PointWithDescription name=Unnamed dimension=2 description=[,] values=[0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=2 description=[,] values=[0,0] hasoferReliabilityIndexSensitivity=[] sortedCurvatures=class=Point name=Unnamed dimension=2 values=[-0.178885,0] eventProbabilityBreitung=0.0909978 eventProbabilityHohenBichler=0.0963599 eventProbabilityTvedt=0.0949791 generalisedReliabilityIndexBreitung=1.33464 generalisedReliabilityIndexHohenBichler=1.30258 generalisedReliabilityIndexTvedt=1.3107 gradientLimitStateFunction_=class=Point name=Unnamed dimension=2 values=[-1,2] hessianLimitStateFunction_=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,2] saved TaylorExpansionMoments = limitStateVariable=class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=analytical implementation=class=FunctionImplementation name=analytical description=[a,b,c,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] antecedent=class=UsualRandomVector distribution=class=IndependentCopula name=IndependentCopula dimension=3 meanInputVector=class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] hessianAtMean=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0.666667,0,0,0,1.5] gradientAtMean=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,1,1,-0.5,-0.5,0.166667,0.333334,0.375] valueAtMean=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.229167] meanFirstOrder=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.229167] meanSecondOrder=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.319444] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.25,0,0.0729167,0,0.125,-0.015625,0.0729167,-0.015625,0.0232928] inputCovariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0,0,0,0.0833333,0,0,0,0.0833333] importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] loaded TaylorExpansionMoments = limitStateVariable=class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=analytical implementation=class=FunctionImplementation name=analytical description=[a,b,c,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0,y1,y2] formulas=[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] antecedent=class=UsualRandomVector distribution=class=IndependentCopula name=IndependentCopula dimension=3 meanInputVector=class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] hessianAtMean=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0.666667,0,0,0,1.5] gradientAtMean=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,1,1,1,-0.5,-0.5,0.166667,0.333334,0.375] valueAtMean=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.229167] meanFirstOrder=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.229167] meanSecondOrder=class=Point name=Unnamed dimension=3 values=[1.5,0.25,0.319444] covariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.25,0,0.0729167,0,0.125,-0.015625,0.0729167,-0.015625,0.0232928] inputCovariance=class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0,0,0,0.0833333,0,0,0,0.0833333] importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] saved ARMACoefficients = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] loaded ARMACoefficients = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] saved ARMAState = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.843891],[0.657449],[0.13564],[0.666778]] loaded ARMAState = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.843891],[0.657449],[0.13564],[0.666778]] saved WhiteNoise = class=WhiteNoise distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] loaded WhiteNoise = class=WhiteNoise distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] saved WhittleFactory = class= WhittleFactory p = [1] q = [2] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 loaded WhittleFactory = class= WhittleFactory p = [1] q = [2] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 saved ARMA = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] noiseDistribution= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0167467,0.0333059]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0183088,0.0329982]] loaded ARMA = class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 coefficients AR=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficients MA=class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] noiseDistribution= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.01] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[0.02] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0167467,0.0333059]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[-0.0183088,0.0329982]] saved Basis = class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2]] loaded Basis = class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2]] saved BasisSequence = class=BasisSequence implementation=class=BasisSequenceImplementation collection=[[0],[0,1],[0,1,2]] masterBasis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2]] loaded BasisSequence = class=BasisSequence implementation=class=BasisSequenceImplementation collection=[[0],[0,1],[0,1,2]] masterBasis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x2]] saved UniVariatePolynomial = class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-2.5,3.5,-1.2] loaded UniVariatePolynomial = class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-2.5,3.5,-1.2] saved CauchyModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true loaded CauchyModel = class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true saved ExponentialCauchy = class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true loaded ExponentialCauchy = class=ExponentialCauchy derived from class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true saved AbsoluteExponential = class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] loaded AbsoluteExponential = class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] saved SecondOrderModel = class=SecondOrderModel implementation=class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true loaded SecondOrderModel = class=SecondOrderModel implementation=class= SecondOrderModelImplementation covariance model=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] spectral model=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true saved CompositeProcess = class=CompositeProcess function=class=FieldFunction name=Unnamed implementation=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[2 * x + 5] antecedent=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] loaded CompositeProcess = class=CompositeProcess function=class=FieldFunction name=Unnamed implementation=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[2 * x + 5] antecedent=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] saved SpectralGaussianProcess = class=SpectralGaussianProcess timeGrid=class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 spectralModel=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true maximal frequency=3.5 n frequency=4 cholesky cache=[] loaded SpectralGaussianProcess = class=SpectralGaussianProcess timeGrid=class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 spectralModel=class=CauchyModel amplitude=class=Point name=Unnamed dimension=1 values=[1] scale=class=Point name=Unnamed dimension=1 values=[1] spatial correlation=class=CorrelationMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isDiagonal=true maximal frequency=3.5 n frequency=4 cholesky cache=[] saved GaussianProcess = class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 description=[t] data=[[0],[0.142857],[0.285714],[0.428571],[0.571429],[0.714286],[0.857143],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false loaded GaussianProcess = class=GaussianProcess mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 description=[t] data=[[0],[0.142857],[0.285714],[0.428571],[0.571429],[0.714286],[0.857143],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] trend=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0] outputVariablesNames=[y0] formulas=[0.0] covarianceModel=class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1] covarianceCholeskyFactor=class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] isInitialized=false hasStationaryTrend=true checkedStationaryTrend=false saved Domain = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] loaded Domain = class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] saved EventDomain = class=EventDomain antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] domain=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] loaded EventDomain = class=EventDomain antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] domain=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] saved EventProcess = class=EventProcess domain=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] process=class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] loaded EventProcess = class=EventProcess domain=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] process=class=Process implementation=class=WhiteNoise distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] saved ConstantStep = class=ConstantStep derived from class=FiniteDifferenceStepImplementation epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] loaded ConstantStep = class=ConstantStep derived from class=FiniteDifferenceStepImplementation epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] saved BlendedStep = class=BlendedStep derived from class=FiniteDifferenceStepImplementation epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] eta=class=Point name=Unnamed dimension=2 values=[1,1] loaded BlendedStep = class=BlendedStep derived from class=FiniteDifferenceStepImplementation epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] eta=class=Point name=Unnamed dimension=0 values=[] saved FunctionalBasisProcess = class=FunctionalBasisProcess distribution=class=ComposedDistribution name=ComposedDistribution dimension=10 copula=class=IndependentCopula name=IndependentCopula dimension=10 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[3]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[4]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[5]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[6] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[6]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[7] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[7]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[8] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[8]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[9] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[9]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[10] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] basis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)]] loaded FunctionalBasisProcess = class=FunctionalBasisProcess distribution=class=ComposedDistribution name=ComposedDistribution dimension=10 copula=class=IndependentCopula name=IndependentCopula dimension=10 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[3]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[4]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[5]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[6] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[6]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[7] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[7]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[8] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[8]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[9] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[9]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[10] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] basis=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(0*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(1*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(2*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(3*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(4*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(5*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(6*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(7*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(8*x)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[sin(9*x)]] saved RandomWalk = class=RandomWalk, origin=class=Point name=Unnamed dimension=1 values=[0], distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 loaded RandomWalk = class=RandomWalk, origin=class=Point name=Unnamed dimension=1 values=[0], distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 saved RegularGrid = class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 loaded RegularGrid = class=RegularGrid name=Unnamed start=0 step=0.142857 n=8 saved MixtureClassifier = class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] loaded MixtureClassifier = class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] saved TestResult = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] loaded TestResult = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] saved StrongMaximumTest = class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[X0,X1,X2,y0] left function=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] right function=class=FunctionImplementation name=Unnamed description=[X0,X1,X2,X0,X1,X2] evaluationImplementation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[1e-05,1e-05,1e-05] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[0.0001,0.0001,0.0001] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] operator=class=Less name=Unnamed threshold=50 standardSpaceDesignPoint=class=Point name=Unnamed dimension=3 values=[-2.86228,0,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999999 designPointVicinity=0.522209 pointNumber=109 deltaEpsilon=0.457471 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] loaded StrongMaximumTest = class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[X0,X1,X2,y0] left function=class=FunctionImplementation name=Unnamed description=[a,b,c,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[a,b,c] outputVariablesNames=[y0] formulas=[a+b+c] right function=class=FunctionImplementation name=Unnamed description=[X0,X1,X2,X0,X1,X2] evaluationImplementation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[1e-05,1e-05,1e-05] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=3 values=[0.0001,0.0001,0.0001] evaluation=class=InverseRosenblattEvaluation description=[X0,X1,X2,X0,X1,X2] distribution=class=Dirac name=Dirac dimension=3 point=class=Point name=Unnamed dimension=3 values=[101,202,303] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] operator=class=Less name=Unnamed threshold=50 standardSpaceDesignPoint=class=Point name=Unnamed dimension=3 values=[-2.86228,0,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999999 designPointVicinity=0.522209 pointNumber=109 deltaEpsilon=0.457471 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=3 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] saved ExpertMixture = class=ExpertMixture, experts=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x]], classifier=class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[-1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,-0.99,-0.99,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.99,0.99,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5] loaded ExpertMixture = class=ExpertMixture, experts=class=Basis coll=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[-x],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x]], classifier=class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[-1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,-0.99,-0.99,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.99,0.99,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5] saved UserDefinedCovarianceModel = class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] loaded UserDefinedCovarianceModel = class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] saved UserDefinedStationaryCovarianceModel = class=UserDefinedStationaryCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569]] loaded UserDefinedStationaryCovarianceModel = class=UserDefinedStationaryCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569]] openturns-1.9/lib/test/t_SymbolicEvaluation_std.cxx000066400000000000000000000036661307543307100227150ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SymbolicEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inputNames(3); inputNames[0] = "x0"; inputNames[1] = "x1"; inputNames[2] = "x2"; Description outputNames(2); outputNames[0] = "y0"; outputNames[1] = "y1"; Description formulas(2); formulas[0] = "x0^2+2*x1+3*x2^3"; formulas[1] = "cos(x0-sin(x1 * x2))"; SymbolicEvaluation evaluation(inputNames, outputNames, formulas); fullprint << "evaluation=" << evaluation << std::endl; Point point(3); point[0] = -1.0; point[1] = 4.0; point[2] = -4.0; fullprint << "value at " << point << "=" << evaluation(point) << std::endl; for (UnsignedInteger i = 0; i < evaluation.getOutputDimension(); ++i) fullprint << "Marginal " << i << "=" << evaluation.getMarginal(i)->__repr__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymbolicEvaluation_std.expout000066400000000000000000000010511307543307100234210ustar00rootroot00000000000000evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0,y1] formulas=[x0^2+2*x1+3*x2^3,cos(x0-sin(x1 * x2))] value at class=Point name=Unnamed dimension=3 values=[-1,4,-4]=class=Point name=Unnamed dimension=2 values=[-183,0.279135] Marginal 0=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3] Marginal 1=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y1] formulas=[cos(x0-sin(x1 * x2))] openturns-1.9/lib/test/t_SymbolicFunction_std.cxx000066400000000000000000000137271307543307100223720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Function for analytical * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { /* Check the elementary functions */ Collection elementaryFunctions(0); elementaryFunctions.add("sin"); elementaryFunctions.add("cos"); elementaryFunctions.add("tan"); elementaryFunctions.add("asin"); elementaryFunctions.add("acos"); elementaryFunctions.add("atan"); elementaryFunctions.add("sinh"); elementaryFunctions.add("cosh"); elementaryFunctions.add("tanh"); elementaryFunctions.add("asinh"); elementaryFunctions.add("acosh"); elementaryFunctions.add("atanh"); elementaryFunctions.add("log2"); elementaryFunctions.add("log10"); elementaryFunctions.add("log"); elementaryFunctions.add("ln"); elementaryFunctions.add("lngamma"); elementaryFunctions.add("gamma"); elementaryFunctions.add("exp"); elementaryFunctions.add("erf"); elementaryFunctions.add("erfc"); elementaryFunctions.add("sqrt"); elementaryFunctions.add("cbrt"); elementaryFunctions.add("besselJ0"); elementaryFunctions.add("besselJ1"); elementaryFunctions.add("besselY0"); elementaryFunctions.add("besselY1"); elementaryFunctions.add("sign"); elementaryFunctions.add("rint"); elementaryFunctions.add("abs"); /* Check the creation of the elementary functions */ for (UnsignedInteger i = 0; i < elementaryFunctions.getSize(); ++i) { Point x(1, 0.4 / 3); // acosh only defined for 1 <= x <= pi if ( elementaryFunctions[i] == String("acosh") ) { x[0] = 1.4 / 3; } SymbolicFunction f("x", "2*" + elementaryFunctions[i] + "(3*x)"); fullprint << "f=" << f.__str__() << std::endl; fullprint << "f(" << x[0] << ")=" << std::scientific << std::setprecision(4) << f(x)[0] << std::endl; Scalar df = CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), f.getEvaluation()).gradient(x)(0, 0); Scalar grad_f = 0.0; try { grad_f = f.gradient(x)(0, 0); } catch(...) { fullprint << "finite difference" << std::endl; f.setGradient(new CenteredFiniteDifferenceGradient(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon" ), f.getEvaluation())); grad_f = f.gradient(x)(0, 0); } fullprint << "df(" << x[0] << ")=" << std::scientific << std::setprecision(4) << grad_f << std::endl; Scalar error = std::abs(grad_f) > 1.0e-5 ? std::abs(df / grad_f - 1.0) : std::abs(df - grad_f); if (error > 1e-5) std::cout << "GRADIENT ERROR! error=" << error << ", check " + elementaryFunctions[i] << std::endl; Scalar d2f = CenteredFiniteDifferenceHessian(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon" ), f.getEvaluation()).hessian(x)(0, 0, 0); Scalar hess_f = 0.0; try { hess_f = f.hessian(x)(0, 0, 0); } catch(...) { f.setHessian(new CenteredFiniteDifferenceHessian(ResourceMap::GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon" ), f.getEvaluation())); hess_f = f.hessian(x)(0, 0, 0); } std::cout << "d2f(" << x[0] << ")=" << std::scientific << std::setprecision(4) << hess_f << std::endl; error = (std::abs(hess_f) > 1.0e-5 ? std::abs(d2f / hess_f - 1.0) : std::abs(d2f - hess_f)); if (error > 1e-4) std::cout << "HESSIAN ERROR! error=" << error << ", check " + elementaryFunctions[i] << std::endl; } Description inp(2); inp[0] = "x0"; inp[1] = "x1"; Description form(2); form[0] = "x0+x1"; form[1] = "x0-x1"; SymbolicFunction nmf(inp, form); Function marginal0(nmf.getMarginal(0)); Function marginal1(nmf.getMarginal(1)); fullprint << "marginal 0=" << marginal0.__str__() << std::endl; fullprint << "marginal 1=" << marginal1.__str__() << std::endl; // test sample as input of a function Description inputVariables(3); inputVariables[0] = "xi1"; inputVariables[1] = "xi2"; inputVariables[2] = "xi3"; Description formula(1); formula[0] = (OSS() << "sin(xi1) + 7. * (sin(xi2)) ^ 2 + 0.1 * xi3^4 * sin(xi1)"); SymbolicFunction model(inputVariables, formula); // Create an input distribution to calculate reference values Collection marginals(3); marginals[0] = Uniform(-M_PI, M_PI); marginals[1] = Uniform(-M_PI, M_PI); marginals[2] = Uniform(-M_PI, M_PI); ComposedDistribution distribution(marginals); Sample inputsSample(distribution.getSample(100)); Point refResultValues(100, 0.); for (UnsignedInteger i = 0; i < 100; ++ i) { refResultValues[i] = model(inputsSample[i])[0]; } Sample resultSample(model(inputsSample)); fullprint << "First reference value : " << refResultValues[0] << std::endl; fullprint << "First result calculated : " << resultSample[0][0] << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymbolicFunction_std.expout000066400000000000000000000061051307543307100231040ustar00rootroot00000000000000f=[x]->[2*sin(3*x)] f(0.133333)=7.7884e-01 df(1.3333e-01)=5.5264e+00 d2f(1.3333e-01)=-7.0095e+00 f=[x]->[2*cos(3*x)] f(1.3333e-01)=1.8421e+00 df(1.3333e-01)=-2.3365e+00 d2f(1.3333e-01)=-1.6579e+01 f=[x]->[2*tan(3*x)] f(1.3333e-01)=8.4559e-01 df(1.3333e-01)=7.0725e+00 d2f(1.3333e-01)=1.7941e+01 f=[x]->[2*asin(3*x)] f(1.3333e-01)=8.2303e-01 df(1.3333e-01)=6.5465e+00 d2f(1.3333e-01)=9.3522e+00 f=[x]->[2*acos(3*x)] f(1.3333e-01)=2.3186e+00 df(1.3333e-01)=-6.5465e+00 d2f(1.3333e-01)=-9.3522e+00 f=[x]->[2*atan(3*x)] f(1.3333e-01)=7.6101e-01 df(1.3333e-01)=5.1724e+00 d2f(1.3333e-01)=-1.0702e+01 f=[x]->[2*sinh(3*x)] f(1.3333e-01)=8.2150e-01 df(1.3333e-01)=6.4864e+00 d2f(1.3333e-01)=7.3935e+00 f=[x]->[2*cosh(3*x)] f(1.3333e-01)=2.1621e+00 df(1.3333e-01)=2.4645e+00 d2f(1.3333e-01)=1.9459e+01 f=[x]->[2*tanh(3*x)] f(1.3333e-01)=7.5990e-01 df(1.3333e-01)=5.1338e+00 d2f(1.3333e-01)=-1.1704e+01 f=[x]->[2*asinh(3*x)] f(1.3333e-01)=7.8007e-01 df(1.3333e-01)=5.5709e+00 d2f(1.3333e-01)=-5.7630e+00 f=[x]->[2*acosh(3*x)] f(4.6667e-01)=1.7340e+00 df(4.6667e-01)=6.1237e+00 d2f(4.6667e-01)=-2.6791e+01 f=[x]->[2*atanh(3*x)] f(1.3333e-01)=8.4730e-01 df(1.3333e-01)=7.1429e+00 d2f(1.3333e-01)=2.0408e+01 f=[x]->[2*log2(3*x)] f(1.3333e-01)=-2.6439e+00 df(1.3333e-01)=2.1640e+01 d2f(1.3333e-01)=-1.6230e+02 f=[x]->[2*log10(3*x)] f(1.3333e-01)=-7.9588e-01 df(1.3333e-01)=6.5144e+00 d2f(1.3333e-01)=-4.8858e+01 f=[x]->[2*log(3*x)] f(1.3333e-01)=-1.8326e+00 df(1.3333e-01)=1.5000e+01 d2f(1.3333e-01)=-1.1250e+02 f=[x]->[2*ln(3*x)] f(1.3333e-01)=-1.8326e+00 df(1.3333e-01)=1.5000e+01 d2f(1.3333e-01)=-1.1250e+02 f=[x]->[2*lngamma(3*x)] f(1.3333e-01)=1.5934e+00 df(1.3333e-01)=-1.5368e+01 d2f(1.3333e-01)=1.3096e+02 f=[x]->[2*gamma(3*x)] f(1.3333e-01)=4.4363e+00 df(1.3333e-01)=-3.4089e+01 d2f(1.3333e-01)=5.5243e+02 f=[x]->[2*exp(3*x)] f(1.3333e-01)=2.9836e+00 df(1.3333e-01)=8.9509e+00 d2f(1.3333e-01)=2.6853e+01 f=[x]->[2*erf(3*x)] f(1.3333e-01)=8.5678e-01 df(1.3333e-01)=5.7693e+00 d2f(1.3333e-01)=-1.3846e+01 f=[x]->[2*erfc(3*x)] f(1.3333e-01)=1.1432e+00 df(1.3333e-01)=-5.7693e+00 d2f(1.3333e-01)=1.3846e+01 f=[x]->[2*sqrt(3*x)] f(1.3333e-01)=1.2649e+00 df(1.3333e-01)=4.7434e+00 d2f(1.3333e-01)=-1.7788e+01 f=[x]->[2*cbrt(3*x)] f(1.3333e-01)=1.4736e+00 df(1.3333e-01)=3.6840e+00 d2f(1.3333e-01)=-1.8420e+01 f=[x]->[2*besselJ0(3*x)] f(1.3333e-01)=1.9208e+00 df(1.3333e-01)=-1.1762e+00 d2f(1.3333e-01)=-8.4660e+00 f=[x]->[2*besselJ1(3*x)] f(1.3333e-01)=3.9205e-01 df(1.3333e-01)=2.8220e+00 d2f(1.3333e-01)=-2.6404e+00 f=[x]->[2*besselY0(3*x)] f(1.3333e-01)=-1.2120e+00 df(1.3333e-01)=1.0685e+01 d2f(1.3333e-01)=-6.9231e+01 f=[x]->[2*besselY1(3*x)] f(1.3333e-01)=-3.5617e+00 df(1.3333e-01)=2.3077e+01 d2f(1.3333e-01)=-3.4137e+02 f=[x]->[2*sign(3*x)] f(1.3333e-01)=2.0000e+00 df(1.3333e-01)=0.0000e+00 d2f(1.3333e-01)=0.0000e+00 f=[x]->[2*rint(3*x)] f(1.3333e-01)=0.0000e+00 df(1.3333e-01)=0.0000e+00 d2f(1.3333e-01)=0.0000e+00 f=[x]->[2*abs(3*x)] f(1.3333e-01)=8.0000e-01 df(1.3333e-01)=6.0000e+00 d2f(1.3333e-01)=0.0000e+00 marginal 0=[x0,x1]->[x0+x1] marginal 1=[x0,x1]->[x0-x1] First reference value : 2.8794e+00 First result calculated : 2.8794e+00 openturns-1.9/lib/test/t_SymbolicGradient_std.cxx000066400000000000000000000033611307543307100223330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SymbolicGradient for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inputNames(3); inputNames[0] = "x0"; inputNames[1] = "x1"; inputNames[2] = "x2"; Description outputNames(1); outputNames[0] = "y0"; Description formulas(1); formulas[0] = "x0^2+2*x1+3*x2^3"; SymbolicEvaluation evaluation(inputNames, outputNames, formulas); SymbolicGradient gradient(evaluation); fullprint << "gradient=" << gradient << std::endl; Point point(3); point[0] = -1.0; point[0] = 4.0; point[1] = -4.0; fullprint << "value at " << point << "=" << gradient.gradient(point) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymbolicGradient_std.expout000066400000000000000000000005251307543307100230540ustar00rootroot00000000000000gradient=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3] value at class=Point name=Unnamed dimension=3 values=[4,-4,0]=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=1 values=[8,2,0] openturns-1.9/lib/test/t_SymbolicHessian_std.cxx000066400000000000000000000033521307543307100221700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SymbolicHessian for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Description inputNames(3); inputNames[0] = "x0"; inputNames[1] = "x1"; inputNames[2] = "x2"; Description outputNames(1); outputNames[0] = "y0"; Description formulas(1); formulas[0] = "x0^2+2*x1+3*x2^3"; SymbolicEvaluation evaluation(inputNames, outputNames, formulas); SymbolicHessian hessian(evaluation); fullprint << "hessian=" << hessian << std::endl; Point point(3); point[0] = -1.0; point[1] = 4.0; point[2] = -4.0; fullprint << "value at " << point << "=" << hessian.hessian(point) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymbolicHessian_std.expout000066400000000000000000000005641307543307100227140ustar00rootroot00000000000000hessian=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1,x2] outputVariablesNames=[y0] formulas=[x0^2+2*x1+3*x2^3] value at class=Point name=Unnamed dimension=3 values=[-1,4,-4]=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=1 values=[2,0,0,0,0,0,0,0,-72] openturns-1.9/lib/test/t_SymmetricMatrix_lapack.cxx000066400000000000000000000060251307543307100226760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for the Lapack based methods of the SquareMatrix class * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { SymmetricMatrix matrix1(2); matrix1.setName("matrix1"); matrix1(0, 0) = 1.0; matrix1(1, 0) = 5.0; matrix1(1, 1) = 12.0; fullprint << "matrix1=" << matrix1 << std::endl; fullprint << "matrix1=\n" << matrix1.__str__() << std::endl; Point pt ; pt.add(5.0); pt.add(0.0); fullprint << "pt=" << pt << std::endl; Point result ; result = matrix1.solveLinearSystem(pt); fullprint << "result=" << result << std::endl; // fullprint << "verif. " << matrix1 * result - pt << std::endl; Scalar determinant ; determinant = matrix1.computeDeterminant(); fullprint << "determinant=" << determinant << std::endl; Matrix b(2, 3); b(0, 0) = 5.0; b(1, 0) = 0.0; b(0, 1) = 10.0; b(1, 1) = 1.0; b(0, 2) = 15.0; b(1, 2) = 2.0; Matrix result2 ; result2 = matrix1.solveLinearSystem(b); fullprint << "result2=" << result2 << std::endl; fullprint << "result2=\n" << result2.__str__() << std::endl; Collection ev(2); ev = matrix1.computeEigenValues(); fullprint << "ev=" << ev << std::endl; SquareMatrix evect(2); ev = matrix1.computeEV(evect); fullprint << "ev=" << ev << std::endl; fullprint << "evect=" << evect << std::endl; fullprint << "evect=\n" << evect.__str__() << std::endl; // Check the high dimension determinant computation SymmetricMatrix matrix3(3); matrix3(0, 0) = 1.0; matrix3(0, 1) = 2.0; matrix3(0, 2) = 3.0; matrix3(1, 1) = 2.5; matrix3(1, 2) = -3.5; matrix3(2, 2) = 2.5; fullprint << "matrix3=\n" << matrix3.__str__() << std::endl; Scalar sign; Scalar value = matrix3.computeLogAbsoluteDeterminant(sign); fullprint << "log(|det|)=" << value << ", sign=" << sign << std::endl; value = matrix3.computeDeterminant(); fullprint << "det=" << value << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymmetricMatrix_lapack.expout000066400000000000000000000016051307543307100234170ustar00rootroot00000000000000matrix1=class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,5,0,12] matrix1= [[ 1 5 ] [ 5 12 ]] pt=class=Point name=Unnamed dimension=2 values=[5,0] result=class=Point name=Unnamed dimension=2 values=[-4.61538,1.92308] determinant=-13 result2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[-4.61538,1.92308,-8.84615,3.76923,-13.0769,5.61538] result2= [[ -4.61538 -8.84615 -13.0769 ] [ 1.92308 3.76923 5.61538 ]] ev=[-0.933034,13.933] ev=[-0.933034,13.933] evect=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[-0.932722,0.360597,0.360597,0.932722] evect= [[ -0.932722 0.360597 ] [ 0.360597 0.932722 ]] matrix3= [[ 1 2 3 ] [ 2 2.5 -3.5 ] [ 3 -3.5 2.5 ]] log(|det|)=4.38826, sign=-1 det=-80.5 openturns-1.9/lib/test/t_SymmetricMatrix_std.cxx000066400000000000000000000206311307543307100222340ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SymmetricMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ SymmetricMatrix SymmetricMatrix0; /* String converter */ fullprint << "SymmetricMatrix0 = " << SymmetricMatrix0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ SymmetricMatrix SymmetricMatrix1(2); /* Check operator() methods */ SymmetricMatrix1(0, 0) = 1. ; SymmetricMatrix1(1, 0) = 2. ; SymmetricMatrix1(0, 1) = 3. ; SymmetricMatrix1(1, 1) = 4. ; /* String converter */ fullprint << "SymmetricMatrix1 = " << SymmetricMatrix1 << std::endl; fullprint << "SymmetricMatrix1 = " << SymmetricMatrix1.__str__() << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ SymmetricMatrix SymmetricMatrix2(SymmetricMatrix1); /* String converter */ fullprint << "SymmetricMatrix2 = " << SymmetricMatrix2 << std::endl; fullprint << "SymmetricMatrix2 = " << SymmetricMatrix2.__str__() << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "SymmetricMatrix1's nbRows = " << SymmetricMatrix1.getNbRows() << std::endl << "SymmetricMatrix1's nbColumns = " << SymmetricMatrix1.getNbColumns() << std::endl; #if 0 /** TEST NUMBER FOUR : SET DIMENSIONS METHOD */ fullprint << "test number four : set dimensions method" << std::endl; /* Set dimension methods */ SymmetricMatrix0.setUniqueDimension(2); fullprint << "SymmetricMatrix0's nbRows = " << SymmetricMatrix0.getNbRows() << std::endl << "SymmetricMatrix0's nbColumns = " << SymmetricMatrix0.getNbColumns() << std::endl; #endif /** TEST NUMBER FIVE : ASSIGNMENT METHOD */ fullprint << "test number five : assignment method" << std::endl; /* Assignment method */ SymmetricMatrix SymmetricMatrix3 ; SymmetricMatrix3 = SymmetricMatrix1 ; fullprint << "SymmetricMatrix3 = " << SymmetricMatrix3 << std::endl; fullprint << "SymmetricMatrix3 = " << SymmetricMatrix3.__str__() << std::endl; /** TEST NUMBER SIX : TRANSPOSITION METHOD */ fullprint << "test number six : transposition method" << std::endl; /* Check transpose method */ SymmetricMatrix SymmetricMatrix4 = SymmetricMatrix1.transpose(); fullprint << "SymmetricMatrix1 transposed = " << SymmetricMatrix4 << std::endl; fullprint << "SymmetricMatrix1 transposed = " << SymmetricMatrix4.__str__() << std::endl; fullprint << "SymmetricMatrix1 transposed = " << SymmetricMatrix1.transpose() << std::endl; /** TEST NUMBER SEVEN : ADDITION METHOD */ fullprint << "test number seven : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ SymmetricMatrix sum1 = SymmetricMatrix1.operator + ( SymmetricMatrix4 ) ; SymmetricMatrix sum2 = SymmetricMatrix4.operator + ( SymmetricMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum1 = " << sum1.__str__() << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum2 = " << sum2.__str__() << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** TEST NUMBER EIGHT : SUBSTRACTION METHOD */ fullprint << "test number eight : substraction method" << std::endl; /* Check substraction method */ SymmetricMatrix diff = SymmetricMatrix1.operator - ( SymmetricMatrix4 ) ; fullprint << "diff = " << diff << std::endl; fullprint << "diff = " << diff.__str__() << std::endl; /** TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD */ fullprint << "test number nine : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareMatrix prod = SymmetricMatrix1.operator * ( SymmetricMatrix4 ) ; fullprint << "prod = " << prod << std::endl; fullprint << "prod = " << prod.__str__() << std::endl; /** TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test number ten : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ Point ptResult = SymmetricMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test number eleven : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ double s = 3.; SymmetricMatrix scalprod1 = SymmetricMatrix1.operator * (s) ; SymmetricMatrix scalprod2 = s * SymmetricMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod1 = " << scalprod1.__str__() << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod2 = " << scalprod2.__str__() << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ SymmetricMatrix scaldiv1 = SymmetricMatrix1.operator / (s) ; SymmetricMatrix scaldiv2 = SymmetricMatrix1.operator * (1 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv1 = " << scaldiv1.__str__() << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv2 = " << scaldiv2.__str__() << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** TEST NUMBER TWELVE : ISEMPTY METHOD */ fullprint << "test number twelve : isEmpty method" << std::endl; /* Check method isEmpty */ SymmetricMatrix SymmetricMatrix5; fullprint << "SymmetricMatrix0 is empty = " << SymmetricMatrix0.isEmpty() << std::endl << "SymmetricMatrix1 is empty = " << SymmetricMatrix1.isEmpty() << std::endl << "SymmetricMatrix5 is empty = " << SymmetricMatrix5.isEmpty() << std::endl; SquareMatrix L(2); L(0, 0) = 2.4; L(1, 0) = 4.0; L(0, 1) = 3.0; L(1, 1) = 1.0; SymmetricMatrix SM(2); SM(0, 0) = 1.5; SM(1, 0) = 1.1; SM(1, 1) = 3.0; SquareMatrix M(2); M(0, 0) = 1.5; M(1, 0) = 1.1; M(0, 1) = 1.1; M(1, 1) = 3.0; Matrix M2(2, 2); M2(0, 0) = 1.5; M2(1, 0) = 1.1; M2(0, 1) = 1.1; M2(1, 1) = 3.0; fullprint << "L * SM = " << L * SM << std::endl; fullprint << "L * M = " << L * M << std::endl; fullprint << "M2 * SM = " << M2 * SM << std::endl; fullprint << "M * SM = " << M * SM << std::endl; Matrix M3(2, 3); M3(0, 0) = 1.5; M3(1, 0) = 1.1; M3(0, 1) = 1.1; M3(1, 1) = 3.0; M3(0, 2) = 7.1; M3(1, 2) = 9.0; fullprint << "SM * M3 = " << SM * M3 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymmetricMatrix_std.expout000066400000000000000000000077501307543307100227650ustar00rootroot00000000000000test number zero : default constructor and string converter SymmetricMatrix0 = class=SymmetricMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter SymmetricMatrix1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] SymmetricMatrix1 = [[ 1 3 ] [ 3 4 ]] test number two : copy constructor and string converter SymmetricMatrix2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,3,4] SymmetricMatrix2 = [[ 1 3 ] [ 3 4 ]] test number three : get dimensions methods SymmetricMatrix1's nbRows = 2 SymmetricMatrix1's nbColumns = 2 test number five : assignment method SymmetricMatrix3 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,3,4] SymmetricMatrix3 = [[ 1 3 ] [ 3 4 ]] test number six : transposition method SymmetricMatrix1 transposed = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,3,4] SymmetricMatrix1 transposed = [[ 1 3 ] [ 3 4 ]] SymmetricMatrix1 transposed = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,3,4] test number seven : addition method sum1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,6,6,8] sum1 = [[ 2 6 ] [ 6 8 ]] sum2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,6,6,8] sum2 = [[ 2 6 ] [ 6 8 ]] sum1 equals sum2 = true test number eight : substraction method diff = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0] diff = [[ 0 0 ] [ 0 0 ]] test number nine : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,15,15,25] prod = [[ 10 15 ] [ 15 25 ]] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,11] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,9,9,12] scalprod1 = [[ 3 9 ] [ 9 12 ]] scalprod2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,9,9,12] scalprod2 = [[ 3 9 ] [ 9 12 ]] scalprod1 equals scalprod2 = true scaldiv1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,1,1.33333] scaldiv1 = [[ 0.333333 1 ] [ 1 1.33333 ]] scaldiv2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,1,1.33333] scaldiv2 = [[ 0.333333 1 ] [ 1 1.33333 ]] scaldiv1 equals scaldiv2 = true test number twelve : isEmpty method SymmetricMatrix0 is empty = true SymmetricMatrix1 is empty = false SymmetricMatrix5 is empty = true L * SM = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[6.9,7.1,11.64,7.4] L * M = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[6.9,7.1,11.64,7.4] M2 * SM = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3.46,4.95,4.95,10.21] M * SM = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3.46,4.95,4.95,10.21] SM * M3 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[3.46,4.95,4.95,10.21,20.55,34.81] openturns-1.9/lib/test/t_SymmetricTensor_std.cxx000066400000000000000000000117161307543307100222460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class SymmetricTensor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ SymmetricTensor symtensor0; /* String converter */ fullprint << "symtensor0 = " << symtensor0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ SymmetricTensor symtensor1(2, 3); symtensor1.setName("symtensor1"); /* Check operator() methods */ symtensor1(0, 0, 0) = 1. ; symtensor1(1, 0, 0) = 2. ; symtensor1(1, 1, 0) = 3. ; symtensor1(0, 0, 1) = 4. ; symtensor1(1, 0, 1) = 5. ; symtensor1(1, 1, 1) = 6. ; symtensor1(0, 0, 2) = 7. ; symtensor1(1, 0, 2) = 8. ; symtensor1(1, 1, 2) = 9. ; /* String converter */ fullprint << "symtensor1 = " << symtensor1 << std::endl; fullprint << "symtensor1 = " << symtensor1.__str__() << std::endl; /* Reading all the values */ fullprint << "symtensor1's values = " << symtensor1(0, 0, 0) << "," << symtensor1(0, 1, 0) << "," << symtensor1(1, 0, 0) << "," << symtensor1(1, 1, 0) << "," << symtensor1(0, 0, 1) << "," << symtensor1(0, 1, 1) << "," << symtensor1(1, 0, 1) << "," << symtensor1(1, 1, 1) << "," << symtensor1(0, 0, 2) << "," << symtensor1(0, 1, 2) << "," << symtensor1(1, 0, 2) << "," << symtensor1(1, 1, 2) << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ SymmetricTensor symtensor2(symtensor1); /* String converter */ fullprint << "symtensor2 = " << symtensor2 << std::endl; fullprint << "symtensor2 = " << symtensor2.__str__() << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "symtensor1's nbRows = " << symtensor1.getNbRows() << std::endl << "symtensor1's nbColumns = " << symtensor1.getNbColumns() << std::endl << "symtensor1's nbSheets = " << symtensor1.getNbSheets() << std::endl; /** TEST NUMBER FOUR : ASSIGNMENT METHOD */ fullprint << "test number four : assignment method" << std::endl; /* Assignment method */ SymmetricTensor symtensor3 ; symtensor3 = symtensor1 ; fullprint << "symtensor3 = " << symtensor3 << std::endl; fullprint << "symtensor3 = " << symtensor3.__str__() << std::endl; /** TEST NUMBER FIVE : ISEMPTY METHOD */ fullprint << "test number five : isEmpty method" << std::endl; /* Check method isEmpty */ SymmetricTensor symtensor5; SymmetricTensor symtensor6; fullprint << "symtensor1 is empty = " << symtensor1.isEmpty() << std::endl << "symtensor0 is empty = " << symtensor0.isEmpty() << std::endl << "symtensor5 is empty = " << symtensor5.isEmpty() << std::endl << "symtensor6 is empty = " << symtensor6.isEmpty() << std::endl; /** TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS */ fullprint << "symtensor1 = " << symtensor1 << std::endl; SymmetricMatrix sheet1 = symtensor1.getSheet(1); fullprint << "symtensor1.getSheet(1) = " << sheet1 << std::endl; SymmetricMatrix sheet2(2); sheet2(0, 0) = 0.4; sheet2(1, 0) = 0.5; sheet2(1, 1) = 0.6; fullprint << "sheet2 = " << sheet2 << std::endl; symtensor1.setSheet(1, sheet2); fullprint << "symtensor1 = " << symtensor1 << std::endl; fullprint << "symtensor1 = " << symtensor1.__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_SymmetricTensor_std.expout000066400000000000000000000041171307543307100227650ustar00rootroot00000000000000test number zero : default constructor and string converter symtensor0 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter symtensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] symtensor1 = sheet #0 [[ 1 2 ] [ 2 3 ]] sheet #1 [[ 4 5 ] [ 5 6 ]] sheet #2 [[ 7 8 ] [ 8 9 ]] symtensor1's values = 1,2,2,3,4,5,5,6,7,8,8,9 test number two : copy constructor and string converter symtensor2 = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,2,3,4,5,5,6,7,8,8,9] symtensor2 = sheet #0 [[ 1 2 ] [ 2 3 ]] sheet #1 [[ 4 5 ] [ 5 6 ]] sheet #2 [[ 7 8 ] [ 8 9 ]] test number three : get dimensions methods symtensor1's nbRows = 2 symtensor1's nbColumns = 2 symtensor1's nbSheets = 3 test number four : assignment method symtensor3 = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,2,3,4,5,5,6,7,8,8,9] symtensor3 = sheet #0 [[ 1 2 ] [ 2 3 ]] sheet #1 [[ 4 5 ] [ 5 6 ]] sheet #2 [[ 7 8 ] [ 8 9 ]] test number five : isEmpty method symtensor1 is empty = false symtensor0 is empty = true symtensor5 is empty = true symtensor6 is empty = true symtensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,2,3,4,5,5,6,7,8,8,9] symtensor1.getSheet(1) = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,5,5,6] sheet2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.4,0.5,0,0.6] symtensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=symtensor1 rows=2 columns=2 sheets=3 values=[1,2,2,3,0.4,0.5,0.5,0.6,7,8,8,9] symtensor1 = sheet #0 [[ 1 2 ] [ 2 3 ]] sheet #1 [[ 0.4 0.5 ] [ 0.5 0.6 ]] sheet #2 [[ 7 8 ] [ 8 9 ]] openturns-1.9/lib/test/t_TNC_std.cxx000066400000000000000000000116001307543307100175130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Tnc for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; inline String printPoint(const Point & point, const UnsignedInteger digits) { OSS oss; oss << "["; Scalar eps = pow(0.1, 1.0 * digits); for (UnsignedInteger i = 0; i < point.getDimension(); i++) { oss << std::fixed << std::setprecision(digits) << (i == 0 ? "" : ",") << Bulk((std::abs(point[i]) < eps) ? std::abs(point[i]) : point[i]); } oss << "]"; return oss; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test function operator () Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1+2*x2-3*x3+4*x4")); Point startingPoint(4, 0.0); Interval bounds(Point(4, -3.0), Point(4, 5.0)); // Define Optimization Solver : OptimizationAlgorithm solver(new TNC()); solver.setStartingPoint(startingPoint); // Define Optimization Problem : minimization OptimizationProblem problem(levelFunction); problem.setBounds(bounds); problem.setMinimization(true); solver.setProblem(problem); solver.run(); fullprint << "minimizer = " << printPoint(solver.getResult().getOptimalPoint(), 4) << " value=" << solver.getResult().getOptimalValue()[0] << std::endl; fullprint << "multipliers = " << printPoint(solver.getResult().getLagrangeMultipliers(), 4) << std::endl; // Define Optimization Problem : maximization problem.setMinimization(false); solver.setProblem(problem); solver.run(); fullprint << "maximizer = " << printPoint(solver.getResult().getOptimalPoint(), 4) << " value=" << solver.getResult().getOptimalValue()[0] << std::endl; fullprint << "multipliers = " << printPoint(solver.getResult().getLagrangeMultipliers(), 4) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } try { // Test function operator () Description input(4); input[0] = "x1"; input[1] = "x2"; input[2] = "x3"; input[3] = "x4"; Function levelFunction(input, Description(1, "y1"), Description(1, "x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4")); Point startingPointNearMinimizationCorner(4); startingPointNearMinimizationCorner[0] = 3.0; startingPointNearMinimizationCorner[0] = -2.5; startingPointNearMinimizationCorner[0] = 4.5; startingPointNearMinimizationCorner[0] = -2.5; Point startingPointNearMaximizationCorner(4); startingPointNearMaximizationCorner[0] = -2.5; startingPointNearMaximizationCorner[1] = 4.5; startingPointNearMaximizationCorner[2] = 4.5; startingPointNearMaximizationCorner[3] = 4.5; Interval bounds(Point(4, -3.0), Point(4, 5.0)); // Define Optimization Solver : OptimizationAlgorithm solver(new TNC()); OptimizationProblem problem(levelFunction); problem.setBounds(bounds); { // Define Optimization Problem : minimization problem.setMinimization(true); solver.setProblem(problem); solver.setStartingPoint(startingPointNearMinimizationCorner); solver.run(); fullprint << "minimizer = " << printPoint(solver.getResult().getOptimalPoint(), 4) << " value=" << solver.getResult().getOptimalValue()[0] << std::endl; fullprint << "multipliers = " << printPoint(solver.getResult().getLagrangeMultipliers(), 4) << std::endl; } { // Define Optimization Problem : maximization problem.setMinimization(false); solver.setProblem(problem); solver.setStartingPoint(startingPointNearMaximizationCorner); solver.run(); fullprint << "maximizer = " << printPoint(solver.getResult().getOptimalPoint(), 4) << " value=" << solver.getResult().getOptimalValue()[0] << std::endl; fullprint << "multipliers = " << printPoint(solver.getResult().getLagrangeMultipliers(), 4) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TNC_std.expout000066400000000000000000000010131307543307100202320ustar00rootroot00000000000000minimizer = [-3.0000,-3.0000,5.0000,-3.0000] value=-36 multipliers = [-1.0000,-2.0000,0.0000,-4.0000,0.0000,0.0000,-3.0000,0.0000] maximizer = [5.0000,5.0000,-3.0000,5.0000] value=44 multipliers = [0.0000,0.0000,3.0000,0.0000,1.0000,2.0000,0.0000,4.0000] minimizer = [3.4256,-3.0000,5.0000,-3.0000] value=-108.288 multipliers = [0.0000,-10.0000,0.0000,-20.0000,0.0000,0.0000,-21.0000,0.0000] maximizer = [-3.0000,5.0000,5.0000,5.0000] value=137.97 multipliers = [1.4134,0.0000,0.0000,0.0000,0.0000,10.0000,27.0000,20.0000] openturns-1.9/lib/test/t_TaylorExpansionMoments_std.cxx000066400000000000000000000063461307543307100236040ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TaylorExpansionMoments for the standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* We create a Function */ Description input_r(4); input_r[0] = "x1"; input_r[1] = "x2"; input_r[2] = "x3"; input_r[3] = "x4"; Description output_r(2); output_r[0] = "y1"; output_r[1] = "y2"; Description formula_r(2); formula_r[0] = "(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)"; formula_r[1] = "cos(x2*x2+x4)/(x1*x1+1+x3^4)"; Function myFunc(input_r, output_r, formula_r); /* We create a distribution */ UnsignedInteger dim = myFunc.getInputDimension(); Point meanPoint(dim, 0.2); Point sigma(dim); for (UnsignedInteger i = 0; i < dim; i++) { sigma[i] = 0.1 * (i + 1); } CorrelationMatrix R = IdentityMatrix(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.25; } Normal distribution(meanPoint, sigma, R); /* We create a distribution-based RandomVector */ RandomVector X(distribution); /* We create a composite RandomVector Y from X and myFunction */ RandomVector Y(myFunc, X); // We create a quadraticCumul algorithm TaylorExpansionMoments myTaylorExpansionMoments(Y); // We compute the several elements provided by the quadratic cumul algorithm fullprint << "First order mean=" << myTaylorExpansionMoments.getMeanFirstOrder() << std::endl; fullprint << "Second order mean=" << myTaylorExpansionMoments.getMeanSecondOrder() << std::endl; fullprint << "Covariance=" << myTaylorExpansionMoments.getCovariance() << std::endl; fullprint << "Value at mean=" << myTaylorExpansionMoments.getValueAtMean() << std::endl; fullprint << "Gradient at mean=" << myTaylorExpansionMoments.getGradientAtMean() << std::endl; fullprint << "Hessian at mean=" << myTaylorExpansionMoments.getHessianAtMean() << std::endl; TaylorExpansionMoments myTaylorExpansionMoments_1(Y.getMarginal(0)); fullprint << "Importance factors=" << myTaylorExpansionMoments_1.getImportanceFactors() << std::endl; } catch (OT::NotSymmetricDefinitePositiveException & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TaylorExpansionMoments_std.expout000066400000000000000000000021261307543307100243160ustar00rootroot00000000000000First order mean=class=Point name=Unnamed dimension=2 values=[0.0384615,0.932544] Second order mean=class=Point name=Unnamed dimension=2 values=[0.0466369,0.819419] Covariance=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.00158239,-0.00130376,-0.00130376,0.01082] Value at mean=class=Point name=Unnamed dimension=2 values=[0.0384615,0.932544] Gradient at mean=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0.377219,0.0221893,-0.0284479,-0.00113792,-0.35812,-0.0912837,-0.0286496,-0.228209] Hessian at mean=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=2 values=[1.84911,0.110947,-0.279008,-0.0111603,0,0.221893,-0.0164122,-0.00065649,0,0,-0.100157,0.00168331,0,0,0,-0.0170014,-1.51555,0.0350552,0.0220043,0.0876379,0,-0.605625,0.00280441,-0.373018,0,0,-0.427983,0.00701103,0,0,0,-0.932544] Importance factors=class=PointWithDescription name=Unnamed dimension=4 description=[X0,X1,X2,X3] values=[0.925686,0.0329106,0.0406588,0.000744644] openturns-1.9/lib/test/t_TensorApproximationAlgorithm_std.cxx000066400000000000000000000051131307543307100247650ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TensorApproximationAlgorithm for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); Log::Show(Log::ALL); try { UnsignedInteger dim = 3; Description input(dim); input[0] = "x0"; input[1] = "x1"; input[2] = "x2"; SymbolicFunction model(input, Description(1, "sin(x0)*cos(x1)*exp(x2)")); ComposedDistribution distribution(ComposedDistribution::DistributionCollection(dim, Uniform())); Collection factoryCollection(dim, OrthogonalUniVariatePolynomialFunctionFactory(LegendreFactory())); // factoryCollection = [ot.OrthogonalUniVariateFunctionFamily(ot.OrthogonalUniVariatePolynomialFunctionFactory(ot.LegendreFactory()))] * dim // #factoryCollection = [ot.FourierSeriesFactory()] * dim OrthogonalProductFunctionFactory functionFactory(factoryCollection); UnsignedInteger size = 1000; Sample X = distribution.getSample(size); Sample Y = model(X); Indices nk(dim, 10); UnsignedInteger maxRank = 5; TensorApproximationAlgorithm algo(X, Y, distribution, functionFactory, nk, maxRank); algo.run(); TensorApproximationResult result(algo.getResult()); fullprint << "residuals=" << result.getResiduals() << std::endl; Function metamodel = result.getMetaModel(); Point x(dim, 0.4); fullprint << "x=" << x << " f(x)=" << model(x).__str__() << " f^(x)=" << metamodel(x).__str__() << std::endl; fullprint << "rank=" << result.getTensor(0).getRank() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TensorApproximationAlgorithm_std.expout000066400000000000000000000002501307543307100255040ustar00rootroot00000000000000residuals=class=Point name=Unnamed dimension=1 values=[2.63737e-11] x=class=Point name=Unnamed dimension=3 values=[0.4,0.4,0.4] f(x)=[0.535085] f^(x)=[0.535086] rank=1 openturns-1.9/lib/test/t_Tensor_std.cxx000066400000000000000000000111371307543307100203460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Tensor for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ Tensor tensor0; /* String converter */ fullprint << "tensor0 = " << tensor0 << std::endl; /** TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test number one : constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ Tensor tensor1(2, 2, 3); tensor1.setName("tensor1"); /* Check operator() methods */ tensor1(0, 0, 0) = 1. ; tensor1(1, 0, 0) = 2. ; tensor1(0, 1, 0) = 3. ; tensor1(1, 1, 0) = 4. ; tensor1(0, 0, 1) = 5. ; tensor1(1, 0, 1) = 6. ; tensor1(0, 1, 1) = 7. ; tensor1(1, 1, 1) = 8. ; tensor1(0, 0, 2) = 9. ; tensor1(1, 0, 2) = 10. ; tensor1(0, 1, 2) = 11. ; tensor1(1, 1, 2) = 12. ; /* String converter */ fullprint << "tensor1 = " << tensor1 << std::endl; fullprint << "values = " << tensor1(0, 0, 0) << " ; " << tensor1(1, 0, 0) << " ; " << tensor1(0, 1, 0) << " ; " << tensor1(1, 1, 0) << " ; " << tensor1(0, 0, 1) << " ; " << tensor1(1, 0, 1) << " ; " << tensor1(0, 1, 1) << " ; " << tensor1(1, 1, 1) << " ; " << tensor1(0, 0, 2) << " ; " << tensor1(1, 0, 2) << " ; " << tensor1(0, 1, 2) << " ; " << tensor1(1, 1, 2) << std::endl; /** TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number two : copy constructor and string converter" << std::endl; /* Copy constructor */ Tensor tensor2(tensor1); /* String converter */ fullprint << "tensor2 = " << tensor2 << std::endl; /** TEST NUMBER THREE : GET DIMENSIONS METHODS */ fullprint << "test number three : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "tensor1's nbRows = " << tensor1.getNbRows() << std::endl << "tensor1's nbColumns = " << tensor1.getNbColumns() << std::endl << "tensor1's nbSheets = " << tensor1.getNbSheets() << std::endl; /** TEST NUMBER FOUR : ASSIGNMENT METHOD */ fullprint << "test number four : assignment method" << std::endl; /* Assignment method */ Tensor tensor3 ; tensor3 = tensor1 ; fullprint << "tensor3 = " << tensor3 << std::endl; /** TEST NUMBER FIVE : ISEMPTY METHOD */ fullprint << "test number five : isEmpty method" << std::endl; /* Check method isEmpty */ Tensor tensor5; Tensor tensor6; fullprint << "tensor1 is empty = " << tensor1.isEmpty() << std::endl << "tensor0 is empty = " << tensor0.isEmpty() << std::endl << "tensor5 is empty = " << tensor5.isEmpty() << std::endl << "tensor6 is empty = " << tensor6.isEmpty() << std::endl; /** TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS */ fullprint << "tensor1 = " << tensor1 << std::endl; // Matrix sheet1(tensor1.getSheet(1)); fullprint << "tensor1.getSheet(1) = " << tensor1.getSheet(1) << std::endl; Matrix sheet2(2, 2); sheet2(0, 0) = 0.5; sheet2(1, 0) = 0.6; sheet2(0, 1) = 0.7; sheet2(1, 1) = 0.8; fullprint << "sheet2 = " << sheet2 << std::endl; tensor1.setSheet(1, sheet2); fullprint << "tensor1 = " << tensor1 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Tensor_std.expout000066400000000000000000000030671307543307100210730ustar00rootroot00000000000000test number zero : default constructor and string converter tensor0 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter tensor1 = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] values = 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 ; 11 ; 12 test number two : copy constructor and string converter tensor2 = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] test number three : get dimensions methods tensor1's nbRows = 2 tensor1's nbColumns = 2 tensor1's nbSheets = 3 test number four : assignment method tensor3 = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] test number five : isEmpty method tensor1 is empty = false tensor0 is empty = true tensor5 is empty = true tensor6 is empty = true tensor1 = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] tensor1.getSheet(1) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[5,6,7,8] sheet2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,0.6,0.7,0.8] tensor1 = class=Tensor implementation=class=TensorImplementation name=tensor1 rows=2 columns=2 sheets=3 values=[1,2,3,4,0.5,0.6,0.7,0.8,9,10,11,12] openturns-1.9/lib/test/t_TensorizedUniVariateFunctionFactory_std.cxx000066400000000000000000000035711307543307100262530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class OrthogonalBasis for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { UnsignedInteger dim = 3; TensorizedUniVariateFunctionFactory::FunctionFamilyCollection polynomCollection(dim); polynomCollection[0] = MonomialFunctionFactory(); polynomCollection[1] = MonomialFunctionFactory(); polynomCollection[2] = MonomialFunctionFactory(); TensorizedUniVariateFunctionFactory factory(polynomCollection); fullprint << "Factory=" << factory << std::endl; Point point(dim, 0.5); for (UnsignedInteger i = 0; i < dim; ++i) point[i] *= (i + 1); fullprint << "point=" << point << std::endl; for (UnsignedInteger i = 0; i < 10; ++i) { Function f(factory.build(i)); fullprint << "i=" << i << " f(point)=" << f(point) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TensorizedUniVariateFunctionFactory_std.expout000066400000000000000000000020451307543307100267700ustar00rootroot00000000000000Factory=class=TensorizedUniVariateFunctionFactory univariate function collection=[class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory,class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory,class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory] enumerate function=class=LinearEnumerateFunction dimension=3 point=class=Point name=Unnamed dimension=3 values=[0.5,1,1.5] i=0 f(point)=class=Point name=Unnamed dimension=1 values=[1] i=1 f(point)=class=Point name=Unnamed dimension=1 values=[0.5] i=2 f(point)=class=Point name=Unnamed dimension=1 values=[1] i=3 f(point)=class=Point name=Unnamed dimension=1 values=[1.5] i=4 f(point)=class=Point name=Unnamed dimension=1 values=[0.25] i=5 f(point)=class=Point name=Unnamed dimension=1 values=[0.5] i=6 f(point)=class=Point name=Unnamed dimension=1 values=[0.75] i=7 f(point)=class=Point name=Unnamed dimension=1 values=[1] i=8 f(point)=class=Point name=Unnamed dimension=1 values=[1.5] i=9 f(point)=class=Point name=Unnamed dimension=1 values=[2.25] openturns-1.9/lib/test/t_TestResult_std.cxx000066400000000000000000000056541307543307100212210ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TestResult * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number zero : default constructor and string converter" << std::endl; /* Default constructor */ String type = "testResult"; Bool testBool = 1; Scalar testVal = 0.372; Scalar testThres = 0.42; TestResult testResultTest(type, testBool, testVal, testThres); /* String converter */ fullprint << "testResultTest = " << testResultTest << std::endl; /** TEST NUMBER ONE : COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test number one : copy constructor and string converter" << std::endl; /* Copy constructor */ TestResult testResultTest2(testResultTest); /* String converter */ fullprint << "testResultTest2 = " << testResultTest2 << std::endl; /** TEST NUMBER TWO : ELEMENTS ACCESSORS */ fullprint << "test number two : elements accessors" << std::endl; fullprint << "testResultTest2 binary quality measure = " << testResultTest2.getBinaryQualityMeasure() << std::endl; fullprint << "testResultTest2 p value = " << testResultTest2.getPValue() << std::endl; fullprint << "testResultTest2 p value threshold = " << testResultTest2.getThreshold() << std::endl; fullprint << "testResultTest2 test type = " << testResultTest2.getTestType() << std::endl; /** TEST NUMBER THREE : EQUALITY */ fullprint << "testResultTest2 = testResultTest " << (testResultTest2 == testResultTest) << std::endl; String typeDiff = "testResult2"; Bool testBoolDiff = 0; Scalar testValDiff = 0.02; Scalar testThresDiff = 0.12; TestResult testResultTestDiff(typeDiff, testBoolDiff, testValDiff, testThresDiff); fullprint << "testResultTestDiff = testResultTest " << (testResultTestDiff == testResultTest) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TestResult_std.expout000066400000000000000000000012421307543307100217300ustar00rootroot00000000000000test number zero : default constructor and string converter testResultTest = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] test number one : copy constructor and string converter testResultTest2 = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] test number two : elements accessors testResultTest2 binary quality measure = true testResultTest2 p value = 0.372 testResultTest2 p value threshold = 0.42 testResultTest2 test type = testResult testResultTest2 = testResultTest true testResultTestDiff = testResultTest false openturns-1.9/lib/test/t_Text_std.cxx000066400000000000000000000055611307543307100200240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Text for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object UnsignedInteger dim = 2; Point meanPoint(dim, 1.0); meanPoint[0] = 0.5; meanPoint[1] = -0.5; Point sigma(dim, 1.0); sigma[0] = 2.0; sigma[1] = 3.0; CorrelationMatrix R(dim); for (UnsignedInteger i = 1; i < dim; i++) { R(i, i - 1) = 0.5; } Normal distribution(meanPoint, sigma, R); // Test for sampling Sample sample(distribution.getSample( 30 )); // Create an empty graph Graph myGraph("Normal sample", "x1", "x2", true, "topright"); // Display extrema indices Scalar x1min(sample[0][0]); Scalar x1max(x1min); Scalar x2min(sample[0][1]); Scalar x2max(x2min); Indices idx(4); for (UnsignedInteger i = 1; i < sample.getSize(); ++i) { const Scalar v1 = sample[i][0]; const Scalar v2 = sample[i][1]; if (v1 < x1min) { x1min = v1; idx[0] = i; } if (v1 > x1max) { x1max = v1; idx[1] = i; } if (v2 < x2min) { x2min = v2; idx[2] = i; } if (v2 > x2max) { x2max = v2; idx[3] = i; } } Description labels(sample.getSize(), "."); for (UnsignedInteger i = 0; i < 4; ++i) { labels[idx[i]] = (OSS() << idx[i]); } Description position(sample.getSize(), "top"); position[idx[0]] = "right"; position[idx[1]] = "left"; position[idx[2]] = "top"; position[idx[3]] = "bottom"; Text myText(sample, labels); myText.setColor("red"); myText.setTextPositions(position); // Add it to the graph and draw everything myGraph.add(myText); myGraph.draw("Graph_Text_c_OT.png"); } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Text_std.expout000066400000000000000000000000001307543307100205250ustar00rootroot00000000000000openturns-1.9/lib/test/t_TimeSeries_std.cxx000066400000000000000000000107041307543307100211440ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TimeSeries for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public TimeSeries { public: TestObject() : TimeSeries(1, 1) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Test basic functionnalities checkClassWithClassName(); const UnsignedInteger DIM = 2; // We create an empty TimeSeries TimeSeries ts1(0, DIM); ts1.setName("Ts1"); // We populate the empty ts for (UnsignedInteger p = 0; p < 3; ++p) { Point pt(DIM); for (UnsignedInteger i = 0; i < DIM; ++i) pt[i] = 10. * (p + 1) + i; ts1.add( pt ); } fullprint << "ts1=" << ts1 << std::endl; // We get the second element of the ts Point secondElement = ts1[1]; fullprint << "second element=" << secondElement << std::endl; // We set the third element to a valid new element Point newPoint(DIM + 1); for (UnsignedInteger i = 0; i < DIM; ++i) newPoint[i + 1] = 1000. * (i + 1); ts1[2] = newPoint; fullprint << "ts1=" << ts1 << std::endl; // We get the values of the second element of the ts Point values1 = ts1.getValueAtIndex(1); fullprint << "values of the second element=" << values1 << std::endl; // We set new values for the second element of the ts Point newValues = values1 * 2.; ts1.setValueAtIndex(1, newValues); Point values2 = ts1.getValueAtIndex(1); fullprint << "ts1=" << ts1 << std::endl; fullprint << "modified values of the second element=" << values2 << " should be " << newValues << std::endl; // We get the values of the second element of the ts Point values3 = ts1.getValueAtNearestTime( -1.0 ); fullprint << "values at t=-1.0 =" << values3 << std::endl; Point values4 = ts1.getValueAtNearestTime( 1.45 ); fullprint << "values at t=1.45 =" << values4 << std::endl; Point values5 = ts1.getValueAtNearestTime( 1.54 ); fullprint << "values at t=1.54 =" << values5 << std::endl; Point values6 = ts1.getValueAtNearestTime( 14.5 ); fullprint << "values at t=14.5 =" << values6 << std::endl; // We set new values for the third element of the ts ts1.setValueAtNearestTime( 1.54, values6 * -1.0 ); fullprint << "ts1=" << ts1 << std::endl; TimeSeries ts2(10, DIM); fullprint << "ts2=" << ts2 << std::endl; // try // { // // We get the tenth element of the ts // // THIS SHOULD NORMALY FAIL // Point tenthElement = ts1.at(9); // // Normally, we should never go here // throw TestFailed("Exception has NOT been thrown or catched !"); // } // catch (OutOfBoundException & ex) // { // // Nothing to do // } RegularGrid tg1( 0.0, 0.1, 11 ); TimeSeries ts3( tg1, DIM ); fullprint << "ts3=" << ts3 << std::endl; RegularGrid tg2( 0.0, 0.2, 6 ); TimeSeries ts4( tg2, DIM ); fullprint << "ts4=" << ts4 << std::endl; // We append a sample to a time series TimeSeries ts5(3, DIM); Sample ns1(3, Point(DIM, 99.9)); fullprint << "ts5=" << ts5 << std::endl; ts5.add( ns1 ); fullprint << "ts5=" << ts5 << std::endl; // We retrieve the values of the time series as a sample Sample ns2 = ts5.getSample(); fullprint << "ns2=" << ns2 << std::endl; // We build a time series from a time grid and a sample Sample ns3 = ts4.getSample(); TimeSeries ts6( tg2, ns3 ); fullprint << "ts6=" << ts6 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TimeSeries_std.expout000066400000000000000000000152531307543307100216720ustar00rootroot00000000000000Testing class TimeSeries checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 description=[t] data=[[0]] simplices=[] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] start=0 timeStep=1 n=1 streamObject(const T & anObject) class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 description=[t] data=[[0]] simplices=[] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] start=0 timeStep=1 n=1 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) ts1=class=TimeSeries name=Ts1 derived from=class=FieldImplementation name=Ts1 mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[0],[0],[1],[2]] simplices=[[0,1],[1,2]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[0,0],[10,11],[20,21],[30,31]] start=0 timeStep=1 n=3 second element=class=Point name=Unnamed dimension=2 values=[10,11] ts1=class=TimeSeries name=Ts1 derived from=class=FieldImplementation name=Ts1 mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[0],[0],[1],[2]] simplices=[[0,1],[1,2]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[0,0],[10,11],[20,21],[30,31]] start=0 timeStep=1 n=3 values of the second element=class=Point name=Unnamed dimension=2 values=[10,11] ts1=class=TimeSeries name=Ts1 derived from=class=FieldImplementation name=Ts1 mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[0],[0],[1],[2]] simplices=[[0,1],[1,2]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[0,0],[20,22],[20,21],[30,31]] start=0 timeStep=1 n=3 modified values of the second element=class=Point name=Unnamed dimension=2 values=[20,22] should be class=Point name=Unnamed dimension=2 values=[20,22] values at t=-1.0 =class=Point name=Unnamed dimension=2 values=[0,0] values at t=1.45 =class=Point name=Unnamed dimension=2 values=[20,21] values at t=1.54 =class=Point name=Unnamed dimension=2 values=[30,31] values at t=14.5 =class=Point name=Unnamed dimension=2 values=[30,31] ts1=class=TimeSeries name=Ts1 derived from=class=FieldImplementation name=Ts1 mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[0],[0],[1],[2]] simplices=[[0,1],[1,2]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[0,0],[20,22],[20,21],[-30,-31]] start=0 timeStep=1 n=3 ts2=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[t] data=[[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]] start=0 timeStep=1 n=10 ts3=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]] start=0 timeStep=0.1 n=11 ts4=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]] start=0 timeStep=0.2 n=6 ts5=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 description=[t] data=[[0],[1],[2]] simplices=[[0,1],[1,2]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[0,0],[0,0],[0,0]] start=0 timeStep=1 n=3 ts5=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[1],[2],[3],[4],[5]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[0,0],[0,0],[99.9,99.9],[99.9,99.9],[99.9,99.9]] start=0 timeStep=1 n=6 ns2=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[0,0],[0,0],[99.9,99.9],[99.9,99.9],[99.9,99.9]] ts6=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]] start=0 timeStep=0.2 n=6 openturns-1.9/lib/test/t_TrapezoidalFactory_std.cxx000066400000000000000000000060761307543307100227100ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Trapezoidal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Trapezoidal distribution( 1.0, 2.3, 4.5, 5.0 ); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); TrapezoidalFactory factory; Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; int oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision( 4 ); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; PlatformInfo::SetNumericalPrecision( oldPrecision ); estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Trapezoidal estimatedTrapezoidal(factory.buildAsTrapezoidal(sample)); fullprint << "Trapezoidal =" << distribution << std::endl; oldPrecision = PlatformInfo::GetNumericalPrecision(); PlatformInfo::SetNumericalPrecision( 4 ); fullprint << "Estimated trapezoidal=" << estimatedTrapezoidal << std::endl; PlatformInfo::SetNumericalPrecision( oldPrecision ); estimatedTrapezoidal = factory.buildAsTrapezoidal(); fullprint << "Default trapezoidal=" << estimatedTrapezoidal << std::endl; estimatedTrapezoidal = factory.buildAsTrapezoidal(distribution.getParameter()); fullprint << "Trapezoidal from parameters=" << estimatedTrapezoidal << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TrapezoidalFactory_std.expout000066400000000000000000000020251307543307100234200ustar00rootroot00000000000000Distribution =class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Estimated distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 Default distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1 c=1 d=2 h=0.333333 Distribution from parameters=class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Trapezoidal =class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Estimated trapezoidal=class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 Default trapezoidal=class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1 c=1 d=2 h=0.333333 Trapezoidal from parameters=class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Estimated distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=-2.22045e-15 b=0 c=0 d=2.22045e-15 h=4.5036e+14 Estimated distribution=class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1 c=1 d=1 h=4.5036e+14 openturns-1.9/lib/test/t_Trapezoidal_std.cxx000066400000000000000000000264361307543307100213620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Trapezoidal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Trapezoidal { public: TestObject() : Trapezoidal(1.0, 2.0, 3.0, 4.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Trapezoidal distribution(1.0, 1.2, 3.0, 14.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point(distribution.getDimension(), 1.1); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(4); PDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computePDF(point)) / (2.0 * eps); PDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point logPDFgr = distribution.computeLogPDFGradient( point ); fullprint << "log-pdf gradient =" << logPDFgr << std::endl; Point logPDFgrFD(4); logPDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computeLogPDF(point)) / (2.0 * eps); fullprint << "log-pdf gradient (FD)=" << logPDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(4); CDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computeCDF(point)) / (2.0 * eps); CDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Trapezoidal::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; Scalar roughness = distribution.getRoughness(); fullprint << "roughness=" << roughness << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Trapezoidal_std.expout000066400000000000000000000126401307543307100220740ustar00rootroot00000000000000Testing class Trapezoidal checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2 c=3 d=4 h=0.5 streamObject(const T & anObject) class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2 c=3 d=4 h=0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1.2 c=3 d=14 h=0.135135 Distribution Trapezoidal(a = 1, b = 1.2, c = 3, d = 14) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[6.23752] oneSample first=class=Point name=Unnamed dimension=1 values=[9.63201] last=class=Point name=Unnamed dimension=1 values=[4.32244] mean=class=Point name=Unnamed dimension=1 values=[5.52363] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.34744] skewness=class=Point name=Unnamed dimension=1 values=[0.526327] kurtosis=class=Point name=Unnamed dimension=1 values=[2.33181] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1.1] ddf =class=Point name=Unnamed dimension=1 values=[0.675676] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.675676] log pdf=-2.69463 pdf =0.0675676 pdf (FD)=0.0675676 cdf=0.00337838 ccdf=0.996622 survival=0.996622 Inverse survival=class=Point name=Unnamed dimension=1 values=[1.47] Survival(inverse survival)=0.95 characteristic function=(-0.115059,0.038602) log characteristic function=(-2.10898,2.8179) pdf gradient =class=Point name=Unnamed dimension=4 values=[-0.333272,-0.333272,-0.00456538,-0.00456538] pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[-0.333272,-0.333272,-0.00456538,-0.00456538] log-pdf gradient =class=Point name=Unnamed dimension=4 values=[-4.93243,-4.93243,-0.0675676,-0.0675676] log-pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[-4.93243,-4.93243,-0.0675676,-0.0675676] cdf gradient =class=Point name=Unnamed dimension=4 values=[-0.0504474,-0.0166636,-0.000228269,-0.000228269] cdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[-0.0504474,-0.0166636,-0.000228269,-0.000228269] quantile=class=Point name=Unnamed dimension=1 values=[11.1469] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1.05141] upper bound=class=Point name=Unnamed dimension=1 values=[11.1725] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Trapezoidal(a = 1, b = 1.2, c = 3, d = 14)) gradientImplementation=MinimumVolumeLevelSetGradient(Trapezoidal(a = 1, b = 1.2, c = 3, d = 14)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Trapezoidal(a = 1, b = 1.2, c = 3, d = 14)) level=3.35999 beta=0.0347356 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1.285] upper bound=class=Point name=Unnamed dimension=1 values=[11.9826] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1] upper bound=class=Point name=Unnamed dimension=1 values=[11.1469] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1.47] upper bound=class=Point name=Unnamed dimension=1 values=[14] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[5.48108] standard deviation=class=Point name=Unnamed dimension=1 values=[3.02371] skewness=class=Point name=Unnamed dimension=1 values=[0.548305] kurtosis=class=Point name=Unnamed dimension=1 values=[2.39403] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.1428] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[a : 1, b : 1.2, c : 3, d : 14]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[-0.310603] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.312872] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[-0.176411] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.1781] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[-0.120255] Standard representative=Trapezoidal(a = -1, b = -0.969231, c = -0.692308, d = 1) roughness=0.101047 openturns-1.9/lib/test/t_TrendEvaluation_std.cxx000066400000000000000000000037731307543307100222070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TrendEvaluation for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { const UnsignedInteger dimension = 2; // Function SymbolicFunction f("t", "sin(t)"); TrendEvaluation myFunction(f); myFunction.setName("TrendFunction"); Point inPoint(dimension, 3.0); // result of the function Point outPoint = myFunction( inPoint ); fullprint << "myFunction=" << myFunction << std::endl; fullprint << myFunction.getName() << "( " << inPoint << " ) = " << outPoint << std::endl; // Creation of a Sample const UnsignedInteger size = 10; Sample inSample(size, dimension); for (UnsignedInteger index = 0 ; index < size; ++index) { inSample[index] = Point(dimension, index + 1); } // result of the function Sample outSample = myFunction( inSample ); fullprint << myFunction.getName() << "( " << inSample << " ) = " << outSample << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TrendEvaluation_std.expout000066400000000000000000000022351307543307100227210ustar00rootroot00000000000000myFunction=class=TrendEvaluation name=TrendFunction function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(t)] TrendFunction( class=Point name=Unnamed dimension=2 values=[3,3] ) = class=Point name=Unnamed dimension=1 values=[3.14112] TrendFunction( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[1.84147],[2.9093],[3.14112],[3.2432],[4.04108],[5.72058],[7.65699],[8.98936],[9.41212],[9.45598]] openturns-1.9/lib/test/t_TrendFactory_std.cxx000066400000000000000000000071061307543307100215010ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TrendFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inVar(1); inVar[0] = "t"; Description outVar(1); outVar[0] = "y"; Description formula(1); Collection functions(3); formula[0] = "1"; functions[0] = SymbolicFunction(inVar, formula); formula[0] = "cos(2 * t)"; functions[1] = SymbolicFunction(inVar, formula); formula[0] = "sin(2 * t)"; functions[2] = SymbolicFunction(inVar, formula); // We build the weights Sample coefficients(0, 2); Point p(2); p[0] = 1.5; p[1] = 2.5; coefficients.add(p); p[0] = -0.5; p[1] = 0.5; coefficients.add(p); p[0] = 1.; p[1] = 1.; coefficients.add(p); // Third, build the function DualLinearCombinationFunction myFunction(functions, coefficients); // Fourth : we build a time series for estimation // it issued from a white noise const UnsignedInteger dimension = 2; // Fix the realization as a Normal Normal noiseDistribution(Point(dimension, 0.), Point(dimension, 1.), CorrelationMatrix(dimension)); // TimeGrid parameters const UnsignedInteger N = 1000; const Scalar timeStart = 0.; const Scalar timeStep = 0.1; RegularGrid timeGrid(timeStart, timeStep, N); // White noise const WhiteNoise myWhiteNoise(noiseDistribution, timeGrid); TimeSeries realization(myWhiteNoise.getRealization()); fullprint << "White noise realization = " << realization << std::endl; // We make a trend transform to the time series // We get a time series which contains values of time TrendTransform myTransformFunction(myFunction); TimeSeries myTimeSeries(myTransformFunction(realization)); fullprint << "myTimeSeries = " << myTimeSeries << std::endl; // We wants to get the coefficients using a factory // Build a factory using default constructor TrendFactory myDefaultFactory; fullprint << "myDefaultFactory = " << myDefaultFactory << std::endl; TrendTransform myEstimateTrend(myDefaultFactory.build(myTimeSeries, functions)); fullprint << "myEstimateTrend = " << myEstimateTrend << std::endl; // We fix a new fitting algorithm myDefaultFactory.setFittingAlgorithm(KFold()); fullprint << "myDefaultFactory = " << myDefaultFactory << std::endl; TrendTransform myNewEstimateTrend(myDefaultFactory.build(myTimeSeries, functions)); fullprint << "myNewEstimateTrend = " << myNewEstimateTrend << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TrendFactory_std.expout000066400000000000000000001130041307543307100222160ustar00rootroot00000000000000White noise realization = class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1000 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5],[5.1],[5.2],[5.3],[5.4],[5.5],[5.6],[5.7],[5.8],[5.9],[6],[6.1],[6.2],[6.3],[6.4],[6.5],[6.6],[6.7],[6.8],[6.9],[7],[7.1],[7.2],[7.3],[7.4],[7.5],[7.6],[7.7],[7.8],[7.9],[8],[8.1],[8.2],[8.3],[8.4],[8.5],[8.6],[8.7],[8.8],[8.9],[9],[9.1],[9.2],[9.3],[9.4],[9.5],[9.6],[9.7],[9.8],[9.9],[10],[10.1],[10.2],[10.3],[10.4],[10.5],[10.6],[10.7],[10.8],[10.9],[11],[11.1],[11.2],[11.3],[11.4],[11.5],[11.6],[11.7],[11.8],[11.9],[12],[12.1],[12.2],[12.3],[12.4],[12.5],[12.6],[12.7],[12.8],[12.9],[13],[13.1],[13.2],[13.3],[13.4],[13.5],[13.6],[13.7],[13.8],[13.9],[14],[14.1],[14.2],[14.3],[14.4],[14.5],[14.6],[14.7],[14.8],[14.9],[15],[15.1],[15.2],[15.3],[15.4],[15.5],[15.6],[15.7],[15.8],[15.9],[16],[16.1],[16.2],[16.3],[16.4],[16.5],[16.6],[16.7],[16.8],[16.9],[17],[17.1],[17.2],[17.3],[17.4],[17.5],[17.6],[17.7],[17.8],[17.9],[18],[18.1],[18.2],[18.3],[18.4],[18.5],[18.6],[18.7],[18.8],[18.9],[19],[19.1],[19.2],[19.3],[19.4],[19.5],[19.6],[19.7],[19.8],[19.9],[20],[20.1],[20.2],[20.3],[20.4],[20.5],[20.6],[20.7],[20.8],[20.9],[21],[21.1],[21.2],[21.3],[21.4],[21.5],[21.6],[21.7],[21.8],[21.9],[22],[22.1],[22.2],[22.3],[22.4],[22.5],[22.6],[22.7],[22.8],[22.9],[23],[23.1],[23.2],[23.3],[23.4],[23.5],[23.6],[23.7],[23.8],[23.9],[24],[24.1],[24.2],[24.3],[24.4],[24.5],[24.6],[24.7],[24.8],[24.9],[25],[25.1],[25.2],[25.3],[25.4],[25.5],[25.6],[25.7],[25.8],[25.9],[26],[26.1],[26.2],[26.3],[26.4],[26.5],[26.6],[26.7],[26.8],[26.9],[27],[27.1],[27.2],[27.3],[27.4],[27.5],[27.6],[27.7],[27.8],[27.9],[28],[28.1],[28.2],[28.3],[28.4],[28.5],[28.6],[28.7],[28.8],[28.9],[29],[29.1],[29.2],[29.3],[29.4],[29.5],[29.6],[29.7],[29.8],[29.9],[30],[30.1],[30.2],[30.3],[30.4],[30.5],[30.6],[30.7],[30.8],[30.9],[31],[31.1],[31.2],[31.3],[31.4],[31.5],[31.6],[31.7],[31.8],[31.9],[32],[32.1],[32.2],[32.3],[32.4],[32.5],[32.6],[32.7],[32.8],[32.9],[33],[33.1],[33.2],[33.3],[33.4],[33.5],[33.6],[33.7],[33.8],[33.9],[34],[34.1],[34.2],[34.3],[34.4],[34.5],[34.6],[34.7],[34.8],[34.9],[35],[35.1],[35.2],[35.3],[35.4],[35.5],[35.6],[35.7],[35.8],[35.9],[36],[36.1],[36.2],[36.3],[36.4],[36.5],[36.6],[36.7],[36.8],[36.9],[37],[37.1],[37.2],[37.3],[37.4],[37.5],[37.6],[37.7],[37.8],[37.9],[38],[38.1],[38.2],[38.3],[38.4],[38.5],[38.6],[38.7],[38.8],[38.9],[39],[39.1],[39.2],[39.3],[39.4],[39.5],[39.6],[39.7],[39.8],[39.9],[40],[40.1],[40.2],[40.3],[40.4],[40.5],[40.6],[40.7],[40.8],[40.9],[41],[41.1],[41.2],[41.3],[41.4],[41.5],[41.6],[41.7],[41.8],[41.9],[42],[42.1],[42.2],[42.3],[42.4],[42.5],[42.6],[42.7],[42.8],[42.9],[43],[43.1],[43.2],[43.3],[43.4],[43.5],[43.6],[43.7],[43.8],[43.9],[44],[44.1],[44.2],[44.3],[44.4],[44.5],[44.6],[44.7],[44.8],[44.9],[45],[45.1],[45.2],[45.3],[45.4],[45.5],[45.6],[45.7],[45.8],[45.9],[46],[46.1],[46.2],[46.3],[46.4],[46.5],[46.6],[46.7],[46.8],[46.9],[47],[47.1],[47.2],[47.3],[47.4],[47.5],[47.6],[47.7],[47.8],[47.9],[48],[48.1],[48.2],[48.3],[48.4],[48.5],[48.6],[48.7],[48.8],[48.9],[49],[49.1],[49.2],[49.3],[49.4],[49.5],[49.6],[49.7],[49.8],[49.9],[50],[50.1],[50.2],[50.3],[50.4],[50.5],[50.6],[50.7],[50.8],[50.9],[51],[51.1],[51.2],[51.3],[51.4],[51.5],[51.6],[51.7],[51.8],[51.9],[52],[52.1],[52.2],[52.3],[52.4],[52.5],[52.6],[52.7],[52.8],[52.9],[53],[53.1],[53.2],[53.3],[53.4],[53.5],[53.6],[53.7],[53.8],[53.9],[54],[54.1],[54.2],[54.3],[54.4],[54.5],[54.6],[54.7],[54.8],[54.9],[55],[55.1],[55.2],[55.3],[55.4],[55.5],[55.6],[55.7],[55.8],[55.9],[56],[56.1],[56.2],[56.3],[56.4],[56.5],[56.6],[56.7],[56.8],[56.9],[57],[57.1],[57.2],[57.3],[57.4],[57.5],[57.6],[57.7],[57.8],[57.9],[58],[58.1],[58.2],[58.3],[58.4],[58.5],[58.6],[58.7],[58.8],[58.9],[59],[59.1],[59.2],[59.3],[59.4],[59.5],[59.6],[59.7],[59.8],[59.9],[60],[60.1],[60.2],[60.3],[60.4],[60.5],[60.6],[60.7],[60.8],[60.9],[61],[61.1],[61.2],[61.3],[61.4],[61.5],[61.6],[61.7],[61.8],[61.9],[62],[62.1],[62.2],[62.3],[62.4],[62.5],[62.6],[62.7],[62.8],[62.9],[63],[63.1],[63.2],[63.3],[63.4],[63.5],[63.6],[63.7],[63.8],[63.9],[64],[64.1],[64.2],[64.3],[64.4],[64.5],[64.6],[64.7],[64.8],[64.9],[65],[65.1],[65.2],[65.3],[65.4],[65.5],[65.6],[65.7],[65.8],[65.9],[66],[66.1],[66.2],[66.3],[66.4],[66.5],[66.6],[66.7],[66.8],[66.9],[67],[67.1],[67.2],[67.3],[67.4],[67.5],[67.6],[67.7],[67.8],[67.9],[68],[68.1],[68.2],[68.3],[68.4],[68.5],[68.6],[68.7],[68.8],[68.9],[69],[69.1],[69.2],[69.3],[69.4],[69.5],[69.6],[69.7],[69.8],[69.9],[70],[70.1],[70.2],[70.3],[70.4],[70.5],[70.6],[70.7],[70.8],[70.9],[71],[71.1],[71.2],[71.3],[71.4],[71.5],[71.6],[71.7],[71.8],[71.9],[72],[72.1],[72.2],[72.3],[72.4],[72.5],[72.6],[72.7],[72.8],[72.9],[73],[73.1],[73.2],[73.3],[73.4],[73.5],[73.6],[73.7],[73.8],[73.9],[74],[74.1],[74.2],[74.3],[74.4],[74.5],[74.6],[74.7],[74.8],[74.9],[75],[75.1],[75.2],[75.3],[75.4],[75.5],[75.6],[75.7],[75.8],[75.9],[76],[76.1],[76.2],[76.3],[76.4],[76.5],[76.6],[76.7],[76.8],[76.9],[77],[77.1],[77.2],[77.3],[77.4],[77.5],[77.6],[77.7],[77.8],[77.9],[78],[78.1],[78.2],[78.3],[78.4],[78.5],[78.6],[78.7],[78.8],[78.9],[79],[79.1],[79.2],[79.3],[79.4],[79.5],[79.6],[79.7],[79.8],[79.9],[80],[80.1],[80.2],[80.3],[80.4],[80.5],[80.6],[80.7],[80.8],[80.9],[81],[81.1],[81.2],[81.3],[81.4],[81.5],[81.6],[81.7],[81.8],[81.9],[82],[82.1],[82.2],[82.3],[82.4],[82.5],[82.6],[82.7],[82.8],[82.9],[83],[83.1],[83.2],[83.3],[83.4],[83.5],[83.6],[83.7],[83.8],[83.9],[84],[84.1],[84.2],[84.3],[84.4],[84.5],[84.6],[84.7],[84.8],[84.9],[85],[85.1],[85.2],[85.3],[85.4],[85.5],[85.6],[85.7],[85.8],[85.9],[86],[86.1],[86.2],[86.3],[86.4],[86.5],[86.6],[86.7],[86.8],[86.9],[87],[87.1],[87.2],[87.3],[87.4],[87.5],[87.6],[87.7],[87.8],[87.9],[88],[88.1],[88.2],[88.3],[88.4],[88.5],[88.6],[88.7],[88.8],[88.9],[89],[89.1],[89.2],[89.3],[89.4],[89.5],[89.6],[89.7],[89.8],[89.9],[90],[90.1],[90.2],[90.3],[90.4],[90.5],[90.6],[90.7],[90.8],[90.9],[91],[91.1],[91.2],[91.3],[91.4],[91.5],[91.6],[91.7],[91.8],[91.9],[92],[92.1],[92.2],[92.3],[92.4],[92.5],[92.6],[92.7],[92.8],[92.9],[93],[93.1],[93.2],[93.3],[93.4],[93.5],[93.6],[93.7],[93.8],[93.9],[94],[94.1],[94.2],[94.3],[94.4],[94.5],[94.6],[94.7],[94.8],[94.9],[95],[95.1],[95.2],[95.3],[95.4],[95.5],[95.6],[95.7],[95.8],[95.9],[96],[96.1],[96.2],[96.3],[96.4],[96.5],[96.6],[96.7],[96.8],[96.9],[97],[97.1],[97.2],[97.3],[97.4],[97.5],[97.6],[97.7],[97.8],[97.9],[98],[98.1],[98.2],[98.3],[98.4],[98.5],[98.6],[98.7],[98.8],[98.9],[99],[99.1],[99.2],[99.3],[99.4],[99.5],[99.6],[99.7],[99.8],[99.9]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,53],[53,54],[54,55],[55,56],[56,57],[57,58],[58,59],[59,60],[60,61],[61,62],[62,63],[63,64],[64,65],[65,66],[66,67],[67,68],[68,69],[69,70],[70,71],[71,72],[72,73],[73,74],[74,75],[75,76],[76,77],[77,78],[78,79],[79,80],[80,81],[81,82],[82,83],[83,84],[84,85],[85,86],[86,87],[87,88],[88,89],[89,90],[90,91],[91,92],[92,93],[93,94],[94,95],[95,96],[96,97],[97,98],[98,99],[99,100],[100,101],[101,102],[102,103],[103,104],[104,105],[105,106],[106,107],[107,108],[108,109],[109,110],[110,111],[111,112],[112,113],[113,114],[114,115],[115,116],[116,117],[117,118],[118,119],[119,120],[120,121],[121,122],[122,123],[123,124],[124,125],[125,126],[126,127],[127,128],[128,129],[129,130],[130,131],[131,132],[132,133],[133,134],[134,135],[135,136],[136,137],[137,138],[138,139],[139,140],[140,141],[141,142],[142,143],[143,144],[144,145],[145,146],[146,147],[147,148],[148,149],[149,150],[150,151],[151,152],[152,153],[153,154],[154,155],[155,156],[156,157],[157,158],[158,159],[159,160],[160,161],[161,162],[162,163],[163,164],[164,165],[165,166],[166,167],[167,168],[168,169],[169,170],[170,171],[171,172],[172,173],[173,174],[174,175],[175,176],[176,177],[177,178],[178,179],[179,180],[180,181],[181,182],[182,183],[183,184],[184,185],[185,186],[186,187],[187,188],[188,189],[189,190],[190,191],[191,192],[192,193],[193,194],[194,195],[195,196],[196,197],[197,198],[198,199],[199,200],[200,201],[201,202],[202,203],[203,204],[204,205],[205,206],[206,207],[207,208],[208,209],[209,210],[210,211],[211,212],[212,213],[213,214],[214,215],[215,216],[216,217],[217,218],[218,219],[219,220],[220,221],[221,222],[222,223],[223,224],[224,225],[225,226],[226,227],[227,228],[228,229],[229,230],[230,231],[231,232],[232,233],[233,234],[234,235],[235,236],[236,237],[237,238],[238,239],[239,240],[240,241],[241,242],[242,243],[243,244],[244,245],[245,246],[246,247],[247,248],[248,249],[249,250],[250,251],[251,252],[252,253],[253,254],[254,255],[255,256],[256,257],[257,258],[258,259],[259,260],[260,261],[261,262],[262,263],[263,264],[264,265],[265,266],[266,267],[267,268],[268,269],[269,270],[270,271],[271,272],[272,273],[273,274],[274,275],[275,276],[276,277],[277,278],[278,279],[279,280],[280,281],[281,282],[282,283],[283,284],[284,285],[285,286],[286,287],[287,288],[288,289],[289,290],[290,291],[291,292],[292,293],[293,294],[294,295],[295,296],[296,297],[297,298],[298,299],[299,300],[300,301],[301,302],[302,303],[303,304],[304,305],[305,306],[306,307],[307,308],[308,309],[309,310],[310,311],[311,312],[312,313],[313,314],[314,315],[315,316],[316,317],[317,318],[318,319],[319,320],[320,321],[321,322],[322,323],[323,324],[324,325],[325,326],[326,327],[327,328],[328,329],[329,330],[330,331],[331,332],[332,333],[333,334],[334,335],[335,336],[336,337],[337,338],[338,339],[339,340],[340,341],[341,342],[342,343],[343,344],[344,345],[345,346],[346,347],[347,348],[348,349],[349,350],[350,351],[351,352],[352,353],[353,354],[354,355],[355,356],[356,357],[357,358],[358,359],[359,360],[360,361],[361,362],[362,363],[363,364],[364,365],[365,366],[366,367],[367,368],[368,369],[369,370],[370,371],[371,372],[372,373],[373,374],[374,375],[375,376],[376,377],[377,378],[378,379],[379,380],[380,381],[381,382],[382,383],[383,384],[384,385],[385,386],[386,387],[387,388],[388,389],[389,390],[390,391],[391,392],[392,393],[393,394],[394,395],[395,396],[396,397],[397,398],[398,399],[399,400],[400,401],[401,402],[402,403],[403,404],[404,405],[405,406],[406,407],[407,408],[408,409],[409,410],[410,411],[411,412],[412,413],[413,414],[414,415],[415,416],[416,417],[417,418],[418,419],[419,420],[420,421],[421,422],[422,423],[423,424],[424,425],[425,426],[426,427],[427,428],[428,429],[429,430],[430,431],[431,432],[432,433],[433,434],[434,435],[435,436],[436,437],[437,438],[438,439],[439,440],[440,441],[441,442],[442,443],[443,444],[444,445],[445,446],[446,447],[447,448],[448,449],[449,450],[450,451],[451,452],[452,453],[453,454],[454,455],[455,456],[456,457],[457,458],[458,459],[459,460],[460,461],[461,462],[462,463],[463,464],[464,465],[465,466],[466,467],[467,468],[468,469],[469,470],[470,471],[471,472],[472,473],[473,474],[474,475],[475,476],[476,477],[477,478],[478,479],[479,480],[480,481],[481,482],[482,483],[483,484],[484,485],[485,486],[486,487],[487,488],[488,489],[489,490],[490,491],[491,492],[492,493],[493,494],[494,495],[495,496],[496,497],[497,498],[498,499],[499,500],[500,501],[501,502],[502,503],[503,504],[504,505],[505,506],[506,507],[507,508],[508,509],[509,510],[510,511],[511,512],[512,513],[513,514],[514,515],[515,516],[516,517],[517,518],[518,519],[519,520],[520,521],[521,522],[522,523],[523,524],[524,525],[525,526],[526,527],[527,528],[528,529],[529,530],[530,531],[531,532],[532,533],[533,534],[534,535],[535,536],[536,537],[537,538],[538,539],[539,540],[540,541],[541,542],[542,543],[543,544],[544,545],[545,546],[546,547],[547,548],[548,549],[549,550],[550,551],[551,552],[552,553],[553,554],[554,555],[555,556],[556,557],[557,558],[558,559],[559,560],[560,561],[561,562],[562,563],[563,564],[564,565],[565,566],[566,567],[567,568],[568,569],[569,570],[570,571],[571,572],[572,573],[573,574],[574,575],[575,576],[576,577],[577,578],[578,579],[579,580],[580,581],[581,582],[582,583],[583,584],[584,585],[585,586],[586,587],[587,588],[588,589],[589,590],[590,591],[591,592],[592,593],[593,594],[594,595],[595,596],[596,597],[597,598],[598,599],[599,600],[600,601],[601,602],[602,603],[603,604],[604,605],[605,606],[606,607],[607,608],[608,609],[609,610],[610,611],[611,612],[612,613],[613,614],[614,615],[615,616],[616,617],[617,618],[618,619],[619,620],[620,621],[621,622],[622,623],[623,624],[624,625],[625,626],[626,627],[627,628],[628,629],[629,630],[630,631],[631,632],[632,633],[633,634],[634,635],[635,636],[636,637],[637,638],[638,639],[639,640],[640,641],[641,642],[642,643],[643,644],[644,645],[645,646],[646,647],[647,648],[648,649],[649,650],[650,651],[651,652],[652,653],[653,654],[654,655],[655,656],[656,657],[657,658],[658,659],[659,660],[660,661],[661,662],[662,663],[663,664],[664,665],[665,666],[666,667],[667,668],[668,669],[669,670],[670,671],[671,672],[672,673],[673,674],[674,675],[675,676],[676,677],[677,678],[678,679],[679,680],[680,681],[681,682],[682,683],[683,684],[684,685],[685,686],[686,687],[687,688],[688,689],[689,690],[690,691],[691,692],[692,693],[693,694],[694,695],[695,696],[696,697],[697,698],[698,699],[699,700],[700,701],[701,702],[702,703],[703,704],[704,705],[705,706],[706,707],[707,708],[708,709],[709,710],[710,711],[711,712],[712,713],[713,714],[714,715],[715,716],[716,717],[717,718],[718,719],[719,720],[720,721],[721,722],[722,723],[723,724],[724,725],[725,726],[726,727],[727,728],[728,729],[729,730],[730,731],[731,732],[732,733],[733,734],[734,735],[735,736],[736,737],[737,738],[738,739],[739,740],[740,741],[741,742],[742,743],[743,744],[744,745],[745,746],[746,747],[747,748],[748,749],[749,750],[750,751],[751,752],[752,753],[753,754],[754,755],[755,756],[756,757],[757,758],[758,759],[759,760],[760,761],[761,762],[762,763],[763,764],[764,765],[765,766],[766,767],[767,768],[768,769],[769,770],[770,771],[771,772],[772,773],[773,774],[774,775],[775,776],[776,777],[777,778],[778,779],[779,780],[780,781],[781,782],[782,783],[783,784],[784,785],[785,786],[786,787],[787,788],[788,789],[789,790],[790,791],[791,792],[792,793],[793,794],[794,795],[795,796],[796,797],[797,798],[798,799],[799,800],[800,801],[801,802],[802,803],[803,804],[804,805],[805,806],[806,807],[807,808],[808,809],[809,810],[810,811],[811,812],[812,813],[813,814],[814,815],[815,816],[816,817],[817,818],[818,819],[819,820],[820,821],[821,822],[822,823],[823,824],[824,825],[825,826],[826,827],[827,828],[828,829],[829,830],[830,831],[831,832],[832,833],[833,834],[834,835],[835,836],[836,837],[837,838],[838,839],[839,840],[840,841],[841,842],[842,843],[843,844],[844,845],[845,846],[846,847],[847,848],[848,849],[849,850],[850,851],[851,852],[852,853],[853,854],[854,855],[855,856],[856,857],[857,858],[858,859],[859,860],[860,861],[861,862],[862,863],[863,864],[864,865],[865,866],[866,867],[867,868],[868,869],[869,870],[870,871],[871,872],[872,873],[873,874],[874,875],[875,876],[876,877],[877,878],[878,879],[879,880],[880,881],[881,882],[882,883],[883,884],[884,885],[885,886],[886,887],[887,888],[888,889],[889,890],[890,891],[891,892],[892,893],[893,894],[894,895],[895,896],[896,897],[897,898],[898,899],[899,900],[900,901],[901,902],[902,903],[903,904],[904,905],[905,906],[906,907],[907,908],[908,909],[909,910],[910,911],[911,912],[912,913],[913,914],[914,915],[915,916],[916,917],[917,918],[918,919],[919,920],[920,921],[921,922],[922,923],[923,924],[924,925],[925,926],[926,927],[927,928],[928,929],[929,930],[930,931],[931,932],[932,933],[933,934],[934,935],[935,936],[936,937],[937,938],[938,939],[939,940],[940,941],[941,942],[942,943],[943,944],[944,945],[945,946],[946,947],[947,948],[948,949],[949,950],[950,951],[951,952],[952,953],[953,954],[954,955],[955,956],[956,957],[957,958],[958,959],[959,960],[960,961],[961,962],[962,963],[963,964],[964,965],[965,966],[966,967],[967,968],[968,969],[969,970],[970,971],[971,972],[972,973],[973,974],[974,975],[975,976],[976,977],[977,978],[978,979],[979,980],[980,981],[981,982],[982,983],[983,984],[984,985],[985,986],[986,987],[987,988],[988,989],[989,990],[990,991],[991,992],[992,993],[993,994],[994,995],[995,996],[996,997],[997,998],[998,999]] values=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=1000 dimension=2 description=[X0,X1] data=[[0.608202,-1.26617],[-0.438266,1.20548],[-2.18139,0.350042],...,[-0.560957,0.476333],[0.259183,-0.591989],[-0.773031,0.711512]] start=0 timeStep=0.1 n=1000 myTimeSeries = class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1000 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2],[2.1],[2.2],[2.3],[2.4],[2.5],[2.6],[2.7],[2.8],[2.9],[3],[3.1],[3.2],[3.3],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[4],[4.1],[4.2],[4.3],[4.4],[4.5],[4.6],[4.7],[4.8],[4.9],[5],[5.1],[5.2],[5.3],[5.4],[5.5],[5.6],[5.7],[5.8],[5.9],[6],[6.1],[6.2],[6.3],[6.4],[6.5],[6.6],[6.7],[6.8],[6.9],[7],[7.1],[7.2],[7.3],[7.4],[7.5],[7.6],[7.7],[7.8],[7.9],[8],[8.1],[8.2],[8.3],[8.4],[8.5],[8.6],[8.7],[8.8],[8.9],[9],[9.1],[9.2],[9.3],[9.4],[9.5],[9.6],[9.7],[9.8],[9.9],[10],[10.1],[10.2],[10.3],[10.4],[10.5],[10.6],[10.7],[10.8],[10.9],[11],[11.1],[11.2],[11.3],[11.4],[11.5],[11.6],[11.7],[11.8],[11.9],[12],[12.1],[12.2],[12.3],[12.4],[12.5],[12.6],[12.7],[12.8],[12.9],[13],[13.1],[13.2],[13.3],[13.4],[13.5],[13.6],[13.7],[13.8],[13.9],[14],[14.1],[14.2],[14.3],[14.4],[14.5],[14.6],[14.7],[14.8],[14.9],[15],[15.1],[15.2],[15.3],[15.4],[15.5],[15.6],[15.7],[15.8],[15.9],[16],[16.1],[16.2],[16.3],[16.4],[16.5],[16.6],[16.7],[16.8],[16.9],[17],[17.1],[17.2],[17.3],[17.4],[17.5],[17.6],[17.7],[17.8],[17.9],[18],[18.1],[18.2],[18.3],[18.4],[18.5],[18.6],[18.7],[18.8],[18.9],[19],[19.1],[19.2],[19.3],[19.4],[19.5],[19.6],[19.7],[19.8],[19.9],[20],[20.1],[20.2],[20.3],[20.4],[20.5],[20.6],[20.7],[20.8],[20.9],[21],[21.1],[21.2],[21.3],[21.4],[21.5],[21.6],[21.7],[21.8],[21.9],[22],[22.1],[22.2],[22.3],[22.4],[22.5],[22.6],[22.7],[22.8],[22.9],[23],[23.1],[23.2],[23.3],[23.4],[23.5],[23.6],[23.7],[23.8],[23.9],[24],[24.1],[24.2],[24.3],[24.4],[24.5],[24.6],[24.7],[24.8],[24.9],[25],[25.1],[25.2],[25.3],[25.4],[25.5],[25.6],[25.7],[25.8],[25.9],[26],[26.1],[26.2],[26.3],[26.4],[26.5],[26.6],[26.7],[26.8],[26.9],[27],[27.1],[27.2],[27.3],[27.4],[27.5],[27.6],[27.7],[27.8],[27.9],[28],[28.1],[28.2],[28.3],[28.4],[28.5],[28.6],[28.7],[28.8],[28.9],[29],[29.1],[29.2],[29.3],[29.4],[29.5],[29.6],[29.7],[29.8],[29.9],[30],[30.1],[30.2],[30.3],[30.4],[30.5],[30.6],[30.7],[30.8],[30.9],[31],[31.1],[31.2],[31.3],[31.4],[31.5],[31.6],[31.7],[31.8],[31.9],[32],[32.1],[32.2],[32.3],[32.4],[32.5],[32.6],[32.7],[32.8],[32.9],[33],[33.1],[33.2],[33.3],[33.4],[33.5],[33.6],[33.7],[33.8],[33.9],[34],[34.1],[34.2],[34.3],[34.4],[34.5],[34.6],[34.7],[34.8],[34.9],[35],[35.1],[35.2],[35.3],[35.4],[35.5],[35.6],[35.7],[35.8],[35.9],[36],[36.1],[36.2],[36.3],[36.4],[36.5],[36.6],[36.7],[36.8],[36.9],[37],[37.1],[37.2],[37.3],[37.4],[37.5],[37.6],[37.7],[37.8],[37.9],[38],[38.1],[38.2],[38.3],[38.4],[38.5],[38.6],[38.7],[38.8],[38.9],[39],[39.1],[39.2],[39.3],[39.4],[39.5],[39.6],[39.7],[39.8],[39.9],[40],[40.1],[40.2],[40.3],[40.4],[40.5],[40.6],[40.7],[40.8],[40.9],[41],[41.1],[41.2],[41.3],[41.4],[41.5],[41.6],[41.7],[41.8],[41.9],[42],[42.1],[42.2],[42.3],[42.4],[42.5],[42.6],[42.7],[42.8],[42.9],[43],[43.1],[43.2],[43.3],[43.4],[43.5],[43.6],[43.7],[43.8],[43.9],[44],[44.1],[44.2],[44.3],[44.4],[44.5],[44.6],[44.7],[44.8],[44.9],[45],[45.1],[45.2],[45.3],[45.4],[45.5],[45.6],[45.7],[45.8],[45.9],[46],[46.1],[46.2],[46.3],[46.4],[46.5],[46.6],[46.7],[46.8],[46.9],[47],[47.1],[47.2],[47.3],[47.4],[47.5],[47.6],[47.7],[47.8],[47.9],[48],[48.1],[48.2],[48.3],[48.4],[48.5],[48.6],[48.7],[48.8],[48.9],[49],[49.1],[49.2],[49.3],[49.4],[49.5],[49.6],[49.7],[49.8],[49.9],[50],[50.1],[50.2],[50.3],[50.4],[50.5],[50.6],[50.7],[50.8],[50.9],[51],[51.1],[51.2],[51.3],[51.4],[51.5],[51.6],[51.7],[51.8],[51.9],[52],[52.1],[52.2],[52.3],[52.4],[52.5],[52.6],[52.7],[52.8],[52.9],[53],[53.1],[53.2],[53.3],[53.4],[53.5],[53.6],[53.7],[53.8],[53.9],[54],[54.1],[54.2],[54.3],[54.4],[54.5],[54.6],[54.7],[54.8],[54.9],[55],[55.1],[55.2],[55.3],[55.4],[55.5],[55.6],[55.7],[55.8],[55.9],[56],[56.1],[56.2],[56.3],[56.4],[56.5],[56.6],[56.7],[56.8],[56.9],[57],[57.1],[57.2],[57.3],[57.4],[57.5],[57.6],[57.7],[57.8],[57.9],[58],[58.1],[58.2],[58.3],[58.4],[58.5],[58.6],[58.7],[58.8],[58.9],[59],[59.1],[59.2],[59.3],[59.4],[59.5],[59.6],[59.7],[59.8],[59.9],[60],[60.1],[60.2],[60.3],[60.4],[60.5],[60.6],[60.7],[60.8],[60.9],[61],[61.1],[61.2],[61.3],[61.4],[61.5],[61.6],[61.7],[61.8],[61.9],[62],[62.1],[62.2],[62.3],[62.4],[62.5],[62.6],[62.7],[62.8],[62.9],[63],[63.1],[63.2],[63.3],[63.4],[63.5],[63.6],[63.7],[63.8],[63.9],[64],[64.1],[64.2],[64.3],[64.4],[64.5],[64.6],[64.7],[64.8],[64.9],[65],[65.1],[65.2],[65.3],[65.4],[65.5],[65.6],[65.7],[65.8],[65.9],[66],[66.1],[66.2],[66.3],[66.4],[66.5],[66.6],[66.7],[66.8],[66.9],[67],[67.1],[67.2],[67.3],[67.4],[67.5],[67.6],[67.7],[67.8],[67.9],[68],[68.1],[68.2],[68.3],[68.4],[68.5],[68.6],[68.7],[68.8],[68.9],[69],[69.1],[69.2],[69.3],[69.4],[69.5],[69.6],[69.7],[69.8],[69.9],[70],[70.1],[70.2],[70.3],[70.4],[70.5],[70.6],[70.7],[70.8],[70.9],[71],[71.1],[71.2],[71.3],[71.4],[71.5],[71.6],[71.7],[71.8],[71.9],[72],[72.1],[72.2],[72.3],[72.4],[72.5],[72.6],[72.7],[72.8],[72.9],[73],[73.1],[73.2],[73.3],[73.4],[73.5],[73.6],[73.7],[73.8],[73.9],[74],[74.1],[74.2],[74.3],[74.4],[74.5],[74.6],[74.7],[74.8],[74.9],[75],[75.1],[75.2],[75.3],[75.4],[75.5],[75.6],[75.7],[75.8],[75.9],[76],[76.1],[76.2],[76.3],[76.4],[76.5],[76.6],[76.7],[76.8],[76.9],[77],[77.1],[77.2],[77.3],[77.4],[77.5],[77.6],[77.7],[77.8],[77.9],[78],[78.1],[78.2],[78.3],[78.4],[78.5],[78.6],[78.7],[78.8],[78.9],[79],[79.1],[79.2],[79.3],[79.4],[79.5],[79.6],[79.7],[79.8],[79.9],[80],[80.1],[80.2],[80.3],[80.4],[80.5],[80.6],[80.7],[80.8],[80.9],[81],[81.1],[81.2],[81.3],[81.4],[81.5],[81.6],[81.7],[81.8],[81.9],[82],[82.1],[82.2],[82.3],[82.4],[82.5],[82.6],[82.7],[82.8],[82.9],[83],[83.1],[83.2],[83.3],[83.4],[83.5],[83.6],[83.7],[83.8],[83.9],[84],[84.1],[84.2],[84.3],[84.4],[84.5],[84.6],[84.7],[84.8],[84.9],[85],[85.1],[85.2],[85.3],[85.4],[85.5],[85.6],[85.7],[85.8],[85.9],[86],[86.1],[86.2],[86.3],[86.4],[86.5],[86.6],[86.7],[86.8],[86.9],[87],[87.1],[87.2],[87.3],[87.4],[87.5],[87.6],[87.7],[87.8],[87.9],[88],[88.1],[88.2],[88.3],[88.4],[88.5],[88.6],[88.7],[88.8],[88.9],[89],[89.1],[89.2],[89.3],[89.4],[89.5],[89.6],[89.7],[89.8],[89.9],[90],[90.1],[90.2],[90.3],[90.4],[90.5],[90.6],[90.7],[90.8],[90.9],[91],[91.1],[91.2],[91.3],[91.4],[91.5],[91.6],[91.7],[91.8],[91.9],[92],[92.1],[92.2],[92.3],[92.4],[92.5],[92.6],[92.7],[92.8],[92.9],[93],[93.1],[93.2],[93.3],[93.4],[93.5],[93.6],[93.7],[93.8],[93.9],[94],[94.1],[94.2],[94.3],[94.4],[94.5],[94.6],[94.7],[94.8],[94.9],[95],[95.1],[95.2],[95.3],[95.4],[95.5],[95.6],[95.7],[95.8],[95.9],[96],[96.1],[96.2],[96.3],[96.4],[96.5],[96.6],[96.7],[96.8],[96.9],[97],[97.1],[97.2],[97.3],[97.4],[97.5],[97.6],[97.7],[97.8],[97.9],[98],[98.1],[98.2],[98.3],[98.4],[98.5],[98.6],[98.7],[98.8],[98.9],[99],[99.1],[99.2],[99.3],[99.4],[99.5],[99.6],[99.7],[99.8],[99.9]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,53],[53,54],[54,55],[55,56],[56,57],[57,58],[58,59],[59,60],[60,61],[61,62],[62,63],[63,64],[64,65],[65,66],[66,67],[67,68],[68,69],[69,70],[70,71],[71,72],[72,73],[73,74],[74,75],[75,76],[76,77],[77,78],[78,79],[79,80],[80,81],[81,82],[82,83],[83,84],[84,85],[85,86],[86,87],[87,88],[88,89],[89,90],[90,91],[91,92],[92,93],[93,94],[94,95],[95,96],[96,97],[97,98],[98,99],[99,100],[100,101],[101,102],[102,103],[103,104],[104,105],[105,106],[106,107],[107,108],[108,109],[109,110],[110,111],[111,112],[112,113],[113,114],[114,115],[115,116],[116,117],[117,118],[118,119],[119,120],[120,121],[121,122],[122,123],[123,124],[124,125],[125,126],[126,127],[127,128],[128,129],[129,130],[130,131],[131,132],[132,133],[133,134],[134,135],[135,136],[136,137],[137,138],[138,139],[139,140],[140,141],[141,142],[142,143],[143,144],[144,145],[145,146],[146,147],[147,148],[148,149],[149,150],[150,151],[151,152],[152,153],[153,154],[154,155],[155,156],[156,157],[157,158],[158,159],[159,160],[160,161],[161,162],[162,163],[163,164],[164,165],[165,166],[166,167],[167,168],[168,169],[169,170],[170,171],[171,172],[172,173],[173,174],[174,175],[175,176],[176,177],[177,178],[178,179],[179,180],[180,181],[181,182],[182,183],[183,184],[184,185],[185,186],[186,187],[187,188],[188,189],[189,190],[190,191],[191,192],[192,193],[193,194],[194,195],[195,196],[196,197],[197,198],[198,199],[199,200],[200,201],[201,202],[202,203],[203,204],[204,205],[205,206],[206,207],[207,208],[208,209],[209,210],[210,211],[211,212],[212,213],[213,214],[214,215],[215,216],[216,217],[217,218],[218,219],[219,220],[220,221],[221,222],[222,223],[223,224],[224,225],[225,226],[226,227],[227,228],[228,229],[229,230],[230,231],[231,232],[232,233],[233,234],[234,235],[235,236],[236,237],[237,238],[238,239],[239,240],[240,241],[241,242],[242,243],[243,244],[244,245],[245,246],[246,247],[247,248],[248,249],[249,250],[250,251],[251,252],[252,253],[253,254],[254,255],[255,256],[256,257],[257,258],[258,259],[259,260],[260,261],[261,262],[262,263],[263,264],[264,265],[265,266],[266,267],[267,268],[268,269],[269,270],[270,271],[271,272],[272,273],[273,274],[274,275],[275,276],[276,277],[277,278],[278,279],[279,280],[280,281],[281,282],[282,283],[283,284],[284,285],[285,286],[286,287],[287,288],[288,289],[289,290],[290,291],[291,292],[292,293],[293,294],[294,295],[295,296],[296,297],[297,298],[298,299],[299,300],[300,301],[301,302],[302,303],[303,304],[304,305],[305,306],[306,307],[307,308],[308,309],[309,310],[310,311],[311,312],[312,313],[313,314],[314,315],[315,316],[316,317],[317,318],[318,319],[319,320],[320,321],[321,322],[322,323],[323,324],[324,325],[325,326],[326,327],[327,328],[328,329],[329,330],[330,331],[331,332],[332,333],[333,334],[334,335],[335,336],[336,337],[337,338],[338,339],[339,340],[340,341],[341,342],[342,343],[343,344],[344,345],[345,346],[346,347],[347,348],[348,349],[349,350],[350,351],[351,352],[352,353],[353,354],[354,355],[355,356],[356,357],[357,358],[358,359],[359,360],[360,361],[361,362],[362,363],[363,364],[364,365],[365,366],[366,367],[367,368],[368,369],[369,370],[370,371],[371,372],[372,373],[373,374],[374,375],[375,376],[376,377],[377,378],[378,379],[379,380],[380,381],[381,382],[382,383],[383,384],[384,385],[385,386],[386,387],[387,388],[388,389],[389,390],[390,391],[391,392],[392,393],[393,394],[394,395],[395,396],[396,397],[397,398],[398,399],[399,400],[400,401],[401,402],[402,403],[403,404],[404,405],[405,406],[406,407],[407,408],[408,409],[409,410],[410,411],[411,412],[412,413],[413,414],[414,415],[415,416],[416,417],[417,418],[418,419],[419,420],[420,421],[421,422],[422,423],[423,424],[424,425],[425,426],[426,427],[427,428],[428,429],[429,430],[430,431],[431,432],[432,433],[433,434],[434,435],[435,436],[436,437],[437,438],[438,439],[439,440],[440,441],[441,442],[442,443],[443,444],[444,445],[445,446],[446,447],[447,448],[448,449],[449,450],[450,451],[451,452],[452,453],[453,454],[454,455],[455,456],[456,457],[457,458],[458,459],[459,460],[460,461],[461,462],[462,463],[463,464],[464,465],[465,466],[466,467],[467,468],[468,469],[469,470],[470,471],[471,472],[472,473],[473,474],[474,475],[475,476],[476,477],[477,478],[478,479],[479,480],[480,481],[481,482],[482,483],[483,484],[484,485],[485,486],[486,487],[487,488],[488,489],[489,490],[490,491],[491,492],[492,493],[493,494],[494,495],[495,496],[496,497],[497,498],[498,499],[499,500],[500,501],[501,502],[502,503],[503,504],[504,505],[505,506],[506,507],[507,508],[508,509],[509,510],[510,511],[511,512],[512,513],[513,514],[514,515],[515,516],[516,517],[517,518],[518,519],[519,520],[520,521],[521,522],[522,523],[523,524],[524,525],[525,526],[526,527],[527,528],[528,529],[529,530],[530,531],[531,532],[532,533],[533,534],[534,535],[535,536],[536,537],[537,538],[538,539],[539,540],[540,541],[541,542],[542,543],[543,544],[544,545],[545,546],[546,547],[547,548],[548,549],[549,550],[550,551],[551,552],[552,553],[553,554],[554,555],[555,556],[556,557],[557,558],[558,559],[559,560],[560,561],[561,562],[562,563],[563,564],[564,565],[565,566],[566,567],[567,568],[568,569],[569,570],[570,571],[571,572],[572,573],[573,574],[574,575],[575,576],[576,577],[577,578],[578,579],[579,580],[580,581],[581,582],[582,583],[583,584],[584,585],[585,586],[586,587],[587,588],[588,589],[589,590],[590,591],[591,592],[592,593],[593,594],[594,595],[595,596],[596,597],[597,598],[598,599],[599,600],[600,601],[601,602],[602,603],[603,604],[604,605],[605,606],[606,607],[607,608],[608,609],[609,610],[610,611],[611,612],[612,613],[613,614],[614,615],[615,616],[616,617],[617,618],[618,619],[619,620],[620,621],[621,622],[622,623],[623,624],[624,625],[625,626],[626,627],[627,628],[628,629],[629,630],[630,631],[631,632],[632,633],[633,634],[634,635],[635,636],[636,637],[637,638],[638,639],[639,640],[640,641],[641,642],[642,643],[643,644],[644,645],[645,646],[646,647],[647,648],[648,649],[649,650],[650,651],[651,652],[652,653],[653,654],[654,655],[655,656],[656,657],[657,658],[658,659],[659,660],[660,661],[661,662],[662,663],[663,664],[664,665],[665,666],[666,667],[667,668],[668,669],[669,670],[670,671],[671,672],[672,673],[673,674],[674,675],[675,676],[676,677],[677,678],[678,679],[679,680],[680,681],[681,682],[682,683],[683,684],[684,685],[685,686],[686,687],[687,688],[688,689],[689,690],[690,691],[691,692],[692,693],[693,694],[694,695],[695,696],[696,697],[697,698],[698,699],[699,700],[700,701],[701,702],[702,703],[703,704],[704,705],[705,706],[706,707],[707,708],[708,709],[709,710],[710,711],[711,712],[712,713],[713,714],[714,715],[715,716],[716,717],[717,718],[718,719],[719,720],[720,721],[721,722],[722,723],[723,724],[724,725],[725,726],[726,727],[727,728],[728,729],[729,730],[730,731],[731,732],[732,733],[733,734],[734,735],[735,736],[736,737],[737,738],[738,739],[739,740],[740,741],[741,742],[742,743],[743,744],[744,745],[745,746],[746,747],[747,748],[748,749],[749,750],[750,751],[751,752],[752,753],[753,754],[754,755],[755,756],[756,757],[757,758],[758,759],[759,760],[760,761],[761,762],[762,763],[763,764],[764,765],[765,766],[766,767],[767,768],[768,769],[769,770],[770,771],[771,772],[772,773],[773,774],[774,775],[775,776],[776,777],[777,778],[778,779],[779,780],[780,781],[781,782],[782,783],[783,784],[784,785],[785,786],[786,787],[787,788],[788,789],[789,790],[790,791],[791,792],[792,793],[793,794],[794,795],[795,796],[796,797],[797,798],[798,799],[799,800],[800,801],[801,802],[802,803],[803,804],[804,805],[805,806],[806,807],[807,808],[808,809],[809,810],[810,811],[811,812],[812,813],[813,814],[814,815],[815,816],[816,817],[817,818],[818,819],[819,820],[820,821],[821,822],[822,823],[823,824],[824,825],[825,826],[826,827],[827,828],[828,829],[829,830],[830,831],[831,832],[832,833],[833,834],[834,835],[835,836],[836,837],[837,838],[838,839],[839,840],[840,841],[841,842],[842,843],[843,844],[844,845],[845,846],[846,847],[847,848],[848,849],[849,850],[850,851],[851,852],[852,853],[853,854],[854,855],[855,856],[856,857],[857,858],[858,859],[859,860],[860,861],[861,862],[862,863],[863,864],[864,865],[865,866],[866,867],[867,868],[868,869],[869,870],[870,871],[871,872],[872,873],[873,874],[874,875],[875,876],[876,877],[877,878],[878,879],[879,880],[880,881],[881,882],[882,883],[883,884],[884,885],[885,886],[886,887],[887,888],[888,889],[889,890],[890,891],[891,892],[892,893],[893,894],[894,895],[895,896],[896,897],[897,898],[898,899],[899,900],[900,901],[901,902],[902,903],[903,904],[904,905],[905,906],[906,907],[907,908],[908,909],[909,910],[910,911],[911,912],[912,913],[913,914],[914,915],[915,916],[916,917],[917,918],[918,919],[919,920],[920,921],[921,922],[922,923],[923,924],[924,925],[925,926],[926,927],[927,928],[928,929],[929,930],[930,931],[931,932],[932,933],[933,934],[934,935],[935,936],[936,937],[937,938],[938,939],[939,940],[940,941],[941,942],[942,943],[943,944],[944,945],[945,946],[946,947],[947,948],[948,949],[949,950],[950,951],[951,952],[952,953],[953,954],[954,955],[955,956],[956,957],[957,958],[958,959],[959,960],[960,961],[961,962],[962,963],[963,964],[964,965],[965,966],[966,967],[967,968],[968,969],[969,970],[970,971],[971,972],[972,973],[973,974],[974,975],[975,976],[976,977],[977,978],[978,979],[979,980],[980,981],[981,982],[982,983],[983,984],[984,985],[985,986],[986,987],[987,988],[988,989],[989,990],[990,991],[991,992],[992,993],[993,994],[994,995],[995,996],[996,997],[997,998],[998,999]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1000 dimension=2 description=[v0,v1] data=[[1.6082,1.73383],[0.77037,4.39418],[-0.752497,3.69999],...,[-0.0113032,1.93498],[0.710777,0.968257],[-0.377699,2.41082]] start=0 timeStep=0.1 n=1000 myDefaultFactory = class=TrendFactory fittingAlgorithm = class=CorrectedLeaveOneOut basisSequenceFactory = class=LARS myEstimateTrend = class=TrendTransform evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1.47317,2.50233],[-0.49061,0.441109],[1.0026,0.964772]] myDefaultFactory = class=TrendFactory fittingAlgorithm = class=KFold basisSequenceFactory = class=LARS myNewEstimateTrend = class=TrendTransform evaluation=class=DualLinearCombinationEvaluation functions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[1],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[cos(2 * t)],class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[t,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0] formulas=[sin(2 * t)]] coefficients=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1.47317,2.50233],[-0.49061,0.441109],[1.0026,0.964772]] openturns-1.9/lib/test/t_TrendTransform_std.cxx000066400000000000000000000046351307543307100220510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TrendTransform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Create an intance */ Description inputVars; inputVars.add("t"); Description formula; formula.add("sin(t)"); formula.add("cos(t)"); SymbolicFunction myFunc(inputVars, formula); TrendTransform myTrendFunc(myFunc); fullprint << "myTrendFunc=" << myTrendFunc << std::endl; fullprint << "myTrendFunc input description=" << myTrendFunc.getInputDescription() << std::endl; fullprint << "myTrendFunc input dimension=" << myTrendFunc.getInputDimension() << std::endl; fullprint << "myTrendFunc output description=" << myTrendFunc.getOutputDescription() << std::endl; fullprint << "myTrendFunc output dimension=" << myTrendFunc.getOutputDimension() << std::endl; /* Create a TimeSeries */ RegularGrid tg(0.0, 0.1, 11); Sample data(tg.getN(), 2); for (UnsignedInteger i = 0; i < data.getSize(); ++i) for (UnsignedInteger j = 0; j < data.getDimension(); ++j) data(i, j) = i * data.getDimension() + j; TimeSeries ts(tg, data); fullprint << "input time series=" << ts << std::endl; fullprint << "output time series=" << myTrendFunc(ts) << std::endl; /* Get the number of calls */ fullprint << "called " << myTrendFunc.getCallsNumber() << " times" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TrendTransform_std.expout000066400000000000000000000032311307543307100225620ustar00rootroot00000000000000myTrendFunc=class=TrendTransform evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t] outputVariablesNames=[y0,y1] formulas=[sin(t),cos(t)] myTrendFunc input description=[y0,y1] myTrendFunc input dimension=2 myTrendFunc output description=[y0,y1] myTrendFunc output dimension=2 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19],[20,21]] start=0 timeStep=0.1 n=11 output time series=class=Field name=Unnamed description=[t,y0,y1] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 description=[y0,y1] data=[[0,2],[2.09983,3.995],[4.19867,5.98007],[6.29552,7.95534],[8.38942,9.92106],[10.4794,11.8776],[12.5646,13.8253],[14.6442,15.7648],[16.7174,17.6967],[18.7833,19.6216],[20.8415,21.5403]] called 1 times openturns-1.9/lib/test/t_TriangularComplexMatrix_std.cxx000066400000000000000000000165711307543307100237300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TriangularComplexMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ComplexCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 0 : default constructor and string converter" << std::endl; /* Default constructor */ TriangularComplexMatrix triangularMatrix0; /* String converter */ fullprint << "triangularMatrix0 = " << triangularMatrix0 << std::endl; /** CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test 1: constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ TriangularComplexMatrix triangularMatrix1(2); /* Check operator() methods */ triangularMatrix1(0, 0) = 1. ; triangularMatrix1(1, 0) = Complex(3., 1.0) ; triangularMatrix1(1, 1) = 4. ; /* String converter */ fullprint << "triangularMatrix1 = " << triangularMatrix1 << std::endl; fullprint << "is triangular lower ? " << triangularMatrix1.isLowerTriangular() << std::endl; /** COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 2 : copy constructor and string converter" << std::endl; /* Copy constructor */ TriangularComplexMatrix triangularMatrix2(triangularMatrix1); /* String converter */ fullprint << "triangularMatrix2 = " << triangularMatrix2 << std::endl; /** GET DIMENSIONS METHODS */ fullprint << "test 3 : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "triangularMatrix1's nbRows = " << triangularMatrix1.getNbRows() << std::endl << "triangularMatrix1's nbColumns = " << triangularMatrix1.getNbColumns() << std::endl; /** ASSIGNMENT METHOD */ fullprint << "test 4 : assignment method" << std::endl; /* Assignment method */ TriangularComplexMatrix triangularMatrix3 ; triangularMatrix3 = triangularMatrix1 ; fullprint << "triangularMatrix3 = " << triangularMatrix3 << std::endl; /** TRANSPOSE AND CONJUGATE METHOD */ fullprint << "test 5 : transpose and conjugate method" << std::endl; /* Check transpose method */ fullprint << "triangularMatrix1 transpose = " << triangularMatrix1.transpose() << std::endl; fullprint << "is transpose triangular lower ? " << triangularMatrix1.transpose().isLowerTriangular() << std::endl; fullprint << "triangularMatrix1 conjugate = " << triangularMatrix1.conjugate() << std::endl; fullprint << "is conjugate triangular lower ? " << triangularMatrix1.conjugate().isLowerTriangular() << std::endl; TriangularComplexMatrix triangularMatrix4 = triangularMatrix1.conjugateTranspose(); fullprint << "triangularMatrix1 conjugate transpose = " << triangularMatrix4 << std::endl; fullprint << "is conjugate/transpose triangular lower ? " << triangularMatrix4.isLowerTriangular() << std::endl; /** ADDITION METHOD */ fullprint << "test number 6 : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ SquareComplexMatrix sum1 = triangularMatrix1.operator + ( triangularMatrix4 ) ; SquareComplexMatrix sum2 = triangularMatrix4.operator + ( triangularMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** SUBSTRACTION METHOD */ fullprint << "test 7 : substraction method" << std::endl; /* Check substraction method */ SquareComplexMatrix diff = triangularMatrix1.operator - ( triangularMatrix4 ) ; fullprint << "diff = " << diff << std::endl; /** MATRIX MULTIPLICATION METHOD */ fullprint << "test 8 : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareComplexMatrix prod = triangularMatrix1.operator * ( triangularMatrix4 ) ; fullprint << "prod = " << prod << std::endl; /** MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 9 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ ComplexCollection ptResult = triangularMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** MULTIPLICATION WITH A NUMERICAL COMPLEX COLLECTION METHOD */ fullprint << "test 10 : multiplication with a numerical complex collection method" << std::endl; /* Create the numerical point */ ComplexCollection ptComplexe ; ptComplexe.add(Complex(1., 5)) ; ptComplexe.add(Complex(0., 1)) ; fullprint << "ptComplexe = " << ptComplexe << std::endl; /* Check the product method */ ComplexCollection ptResult2 = triangularMatrix1.operator * ( ptComplexe ) ; fullprint << "ptResult2 = " << ptResult2 << std::endl; /** MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test 11 : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ Complex s(3.0, 2.0); TriangularComplexMatrix scalprod1 = triangularMatrix1.operator * (s) ; TriangularComplexMatrix scalprod2 = s * triangularMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ TriangularComplexMatrix scaldiv1 = triangularMatrix1.operator / (s) ; TriangularComplexMatrix scaldiv2 = triangularMatrix1.operator * (1.0 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** ISEMPTY METHOD */ fullprint << "test 12 : isEmpty method" << std::endl; /* Check method isEmpty */ TriangularComplexMatrix triangularMatrix5; fullprint << "triangularMatrix0 is empty = " << triangularMatrix0.isEmpty() << std::endl << "triangularMatrix1 is empty = " << triangularMatrix1.isEmpty() << std::endl << "triangularMatrix5 is empty = " << triangularMatrix5.isEmpty() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TriangularComplexMatrix_std.expout000066400000000000000000000072471307543307100244520ustar00rootroot00000000000000test 0 : default constructor and string converter triangularMatrix0 = class=TriangularComplexMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test 1: constructor with size, operator() and string converter triangularMatrix1 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] is triangular lower ? true test 2 : copy constructor and string converter triangularMatrix2 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test 3 : get dimensions methods triangularMatrix1's nbRows = 2 triangularMatrix1's nbColumns = 2 test 4 : assignment method triangularMatrix3 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test 5 : transpose and conjugate method triangularMatrix1 transpose = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(0,0),(3,1),(4,0)] is transpose triangular lower ? false triangularMatrix1 conjugate = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(3,-1),(0,-0),(4,-0)] is conjugate triangular lower ? true triangularMatrix1 conjugate transpose = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(0,-0),(3,-1),(4,-0)] is conjugate/transpose triangular lower ? false test number 6 : addition method sum1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(3,1),(3,-1),(8,0)] sum2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(3,1),(3,-1),(8,0)] sum1 equals sum2 = true test 7 : substraction method diff = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(3,1),(-3,1),(0,0)] test 8 : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(3,-1),(26,0)] test 9 : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(1,0),(11,1)] test 10 : multiplication with a numerical complex collection method ptComplexe = [(1,5),(0,1)] ptResult2 = [(1,5),(-2,20)] test 11 : multiplication and division by a numerical scalar methods scalprod1 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(7,9),(0,0),(12,8)] scalprod2 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(7,9),(0,0),(12,8)] scalprod1 equals scalprod2 = true scaldiv1 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv2 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv1 equals scaldiv2 = true test 12 : isEmpty method triangularMatrix0 is empty = true triangularMatrix1 is empty = false triangularMatrix5 is empty = true openturns-1.9/lib/test/t_TriangularFactory_std.cxx000066400000000000000000000057121307543307100225360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Triangular for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Triangular distribution(1., 2.5, 4.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); TriangularFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Triangular estimatedTriangular(factory.buildAsTriangular(sample)); fullprint << "Triangular =" << distribution << std::endl; fullprint << "Estimated triangular=" << estimatedTriangular << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedTriangular = factory.buildAsTriangular(); fullprint << "Default triangular=" << estimatedTriangular << std::endl; estimatedTriangular = factory.buildAsTriangular(distribution.getParameter()); fullprint << "Triangular from parameters=" << estimatedTriangular << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TriangularFactory_std.expout000066400000000000000000000015431307543307100232560ustar00rootroot00000000000000Distribution =class=Triangular name=Triangular dimension=1 a=1 m=2.5 b=4 Estimated distribution=class=Triangular name=Triangular dimension=1 a=1.02699 m=2.51471 b=3.97879 Default distribution=class=Triangular name=Triangular dimension=1 a=-1 m=0 b=1 Distribution from parameters=class=Triangular name=Triangular dimension=1 a=1 m=2.5 b=4 Triangular =class=Triangular name=Triangular dimension=1 a=1 m=2.5 b=4 Estimated triangular=class=Triangular name=Triangular dimension=1 a=1.02699 m=2.51471 b=3.97879 Default triangular=class=Triangular name=Triangular dimension=1 a=-1 m=0 b=1 Triangular from parameters=class=Triangular name=Triangular dimension=1 a=1 m=2.5 b=4 Estimated distribution=class=Triangular name=Triangular dimension=1 a=-2.22045e-15 m=0 b=2.22045e-15 Estimated distribution=class=Triangular name=Triangular dimension=1 a=1 m=1 b=1 openturns-1.9/lib/test/t_TriangularMatrix_std.cxx000066400000000000000000000154161307543307100223750ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TriangularMatrix for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection ScalarCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /** DEFAULT CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 0 : default constructor and string converter" << std::endl; /* Default constructor */ TriangularMatrix triangularMatrix0; /* String converter */ fullprint << "triangularMatrix0 = " << triangularMatrix0 << std::endl; /** CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER */ fullprint << "test 1: constructor with size, operator() and string converter" << std::endl; /* Constructor with size */ TriangularMatrix triangularMatrix1(2); /* Check operator() methods */ triangularMatrix1(0, 0) = 1. ; triangularMatrix1(1, 0) = 1. ; triangularMatrix1(1, 1) = 4. ; /* String converter */ fullprint << "triangularMatrix1 = " << triangularMatrix1 << std::endl; fullprint << "is triangular lower ? " << triangularMatrix1.isLowerTriangular() << std::endl; /** COPY CONSTRUCTOR AND STRING CONVERTER */ fullprint << "test 2 : copy constructor and string converter" << std::endl; /* Copy constructor */ TriangularMatrix triangularMatrix2(triangularMatrix1); /* String converter */ fullprint << "triangularMatrix2 = " << triangularMatrix2 << std::endl; /** GET DIMENSIONS METHODS */ fullprint << "test 3 : get dimensions methods" << std::endl; /* Get dimension methods */ fullprint << "triangularMatrix1's nbRows = " << triangularMatrix1.getNbRows() << std::endl << "triangularMatrix1's nbColumns = " << triangularMatrix1.getNbColumns() << std::endl; /** ASSIGNMENT METHOD */ fullprint << "test 4 : assignment method" << std::endl; /* Assignment method */ TriangularMatrix triangularMatrix3 ; triangularMatrix3 = triangularMatrix1 ; fullprint << "triangularMatrix3 = " << triangularMatrix3 << std::endl; /** TRANSPOSE AND CONJUGATE METHOD */ fullprint << "test 5 : transpose method" << std::endl; /* Check transpose method */ fullprint << "triangularMatrix1 transpose = " << triangularMatrix1.transpose() << std::endl; fullprint << "is transpose triangular lower ? " << triangularMatrix1.transpose().isLowerTriangular() << std::endl; TriangularMatrix triangularMatrix4 = triangularMatrix1.transpose(); /** ADDITION METHOD */ fullprint << "test number 6 : addition method" << std::endl; /* Check addition method : we check the operator and the symmetry of the operator, thus testing the comparison operator */ SquareMatrix sum1 = triangularMatrix1.operator + ( triangularMatrix4 ) ; SquareMatrix sum2 = triangularMatrix4.operator + ( triangularMatrix1 ) ; fullprint << "sum1 = " << sum1 << std::endl; fullprint << "sum2 = " << sum2 << std::endl; fullprint << "sum1 equals sum2 = " << (sum1 == sum2) << std::endl; /** SUBSTRACTION METHOD */ fullprint << "test 7 : substraction method" << std::endl; /* Check substraction method */ SquareMatrix diff = triangularMatrix1.operator - ( triangularMatrix4 ) ; fullprint << "diff = " << diff << std::endl; /** MATRIX MULTIPLICATION METHOD */ fullprint << "test 8 : matrix multiplication method" << std::endl; /* Check multiplication method */ SquareMatrix prod = triangularMatrix1.operator * ( triangularMatrix4 ) ; fullprint << "prod = " << prod << std::endl; /** MULTIPLICATION WITH A NUMERICAL POINT METHOD */ fullprint << "test 9 : multiplication with a numerical point method" << std::endl; /* Create the numerical point */ Point pt ; pt.add(1.) ; pt.add(2.) ; fullprint << "pt = " << pt << std::endl; /* Check the product method */ ScalarCollection ptResult = triangularMatrix1.operator * ( pt ) ; fullprint << "ptResult = " << ptResult << std::endl; /** MULTIPLICATION WITH A NUMERICAL COMPLEX COLLECTION METHOD */ fullprint << "test 10 : multiplication with a numerical scalar collection method" << std::endl; /* Create the numerical point */ ScalarCollection ptScalar ; ptScalar.add(1.) ; ptScalar.add(0.) ; fullprint << "ptScalar = " << ptScalar << std::endl; /* Check the product method */ ScalarCollection ptResult2 = triangularMatrix1.operator * ( ptScalar ) ; fullprint << "ptResult2 = " << ptResult2 << std::endl; /** MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS */ fullprint << "test 11 : multiplication and division by a numerical scalar methods" << std::endl; /* Check the multiplication method */ Scalar s = 3.0; TriangularMatrix scalprod1 = triangularMatrix1.operator * (s) ; TriangularMatrix scalprod2 = s * triangularMatrix1 ; fullprint << "scalprod1 = " << scalprod1 << std::endl; fullprint << "scalprod2 = " << scalprod2 << std::endl; fullprint << "scalprod1 equals scalprod2 = " << (scalprod1 == scalprod2) << std::endl; /* Check the division method */ TriangularMatrix scaldiv1 = triangularMatrix1.operator / (s) ; TriangularMatrix scaldiv2 = triangularMatrix1.operator * (1.0 / s) ; fullprint << "scaldiv1 = " << scaldiv1 << std::endl; fullprint << "scaldiv2 = " << scaldiv2 << std::endl; fullprint << "scaldiv1 equals scaldiv2 = " << (scaldiv1 == scaldiv2) << std::endl; /** ISEMPTY METHOD */ fullprint << "test 12 : isEmpty method" << std::endl; /* Check method isEmpty */ TriangularMatrix triangularMatrix5; fullprint << "triangularMatrix0 is empty = " << triangularMatrix0.isEmpty() << std::endl << "triangularMatrix1 is empty = " << triangularMatrix1.isEmpty() << std::endl << "triangularMatrix5 is empty = " << triangularMatrix5.isEmpty() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TriangularMatrix_std.expout000066400000000000000000000053671307543307100231230ustar00rootroot00000000000000test 0 : default constructor and string converter triangularMatrix0 = class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test 1: constructor with size, operator() and string converter triangularMatrix1 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,0,4] is triangular lower ? true test 2 : copy constructor and string converter triangularMatrix2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,0,4] test 3 : get dimensions methods triangularMatrix1's nbRows = 2 triangularMatrix1's nbColumns = 2 test 4 : assignment method triangularMatrix3 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,0,4] test 5 : transpose method triangularMatrix1 transpose = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,1,4] is transpose triangular lower ? false test number 6 : addition method sum1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,1,1,8] sum2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,1,1,8] sum1 equals sum2 = true test 7 : substraction method diff = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,1,-1,0] test 8 : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,1,1,17] test 9 : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [1,9] test 10 : multiplication with a numerical scalar collection method ptScalar = [1,0] ptResult2 = [1,1] test 11 : multiplication and division by a numerical scalar methods scalprod1 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,3,0,12] scalprod2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,3,0,12] scalprod1 equals scalprod2 = true scaldiv1 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.333333,0,1.33333] scaldiv2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.333333,0,1.33333] scaldiv1 equals scaldiv2 = true test 12 : isEmpty method triangularMatrix0 is empty = true triangularMatrix1 is empty = false triangularMatrix5 is empty = true openturns-1.9/lib/test/t_Triangular_std.cxx000066400000000000000000000271331307543307100212070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Triangular for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Triangular { public: TestObject() : Triangular(-0.5, 1.5, 2.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Triangular distribution(-0.5, 1.5, 2.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point, left part of the support Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computePDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computePDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computePDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computeCDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computeCDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computeCDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.25 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; // Define a point, right part of the support point = Point( distribution.getDimension(), 2.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << Point(1, (distribution.computePDF( point + Point(1, eps) ) - distribution.computePDF( point + Point(1, -eps) )) / (2.0 * eps)) << std::endl; PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; PDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computePDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computePDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computePDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; CDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computeCDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computeCDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computeCDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Moments Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Triangular::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Triangular_std.expout000066400000000000000000000131201307543307100217200ustar00rootroot00000000000000Testing class Triangular checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Triangular name=Triangular dimension=1 a=-0.5 m=1.5 b=2.5 streamObject(const T & anObject) class=Triangular name=Triangular dimension=1 a=-0.5 m=1.5 b=2.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Triangular name=Triangular dimension=1 a=-0.5 m=1.5 b=2.5 Distribution Triangular(a = -0.5, m = 1.5, b = 2.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.44403] oneSample first=class=Point name=Unnamed dimension=1 values=[1.90705] last=class=Point name=Unnamed dimension=1 values=[1.09635] mean=class=Point name=Unnamed dimension=1 values=[1.17256] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.39567] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0.333333] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0.333333] log pdf=-0.693147 pdf =0.5 pdf (FD)=0.5 cdf=0.375 ccdf=0.625 survival=0.625 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.0477226] Survival(inverse survival)=0.95 characteristic function=(0.312305,0.758322) log characteristic function=(-0.198312,1.18013) pdf gradient =class=Point name=Unnamed dimension=3 values=[0.0833333,-0.25,-0.166667] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.0833333,-0.25,-0.166667] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.1875,-0.1875,-0.5] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.1875,-0.1875,-0.125] quantile=class=Point name=Unnamed dimension=1 values=[0.724745] cdf(quantile)=0.25 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.0527864] upper bound=class=Point name=Unnamed dimension=1 values=[2.27639] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Triangular(a = -0.5, m = 1.5, b = 2.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Triangular(a = -0.5, m = 1.5, b = 2.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Triangular(a = -0.5, m = 1.5, b = 2.5)) level=1.90333 beta=0.149071 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.112702] upper bound=class=Point name=Unnamed dimension=1 values=[2.22614] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[2.1127] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.0477226] upper bound=class=Point name=Unnamed dimension=1 values=[2.5] finite lower bound=[1] finite upper bound=[1] beta=0.95 Point= class=Point name=Unnamed dimension=1 values=[2] ddf =class=Point name=Unnamed dimension=1 values=[-0.666667] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.666667] pdf =0.333333 pdf (FD)=0.333333 cdf=0.916667 pdf gradient =class=Point name=Unnamed dimension=3 values=[0.111111,0.333333,0.222222] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[0.111111,0.333333,0.222222] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0277778,-0.0833333,-0.222222] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.0277778,-0.0833333,-0.222222] quantile=class=Point name=Unnamed dimension=1 values=[2.1127] cdf(quantile)=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.16667] standard deviation=class=Point name=Unnamed dimension=1 values=[0.62361] skewness=class=Point name=Unnamed dimension=1 values=[-0.305441] kurtosis=class=Point name=Unnamed dimension=1 values=[2.4] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.388889] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[a : -0.5, m : 1.5, b : 2.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.111111] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.185185] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.037037] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.0748971] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.0178326] Standard representative=Triangular(a = -1, m = 0.333333, b = 1) openturns-1.9/lib/test/t_TruncatedDistribution_std.cxx000066400000000000000000000161401307543307100234240ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TruncatedDistribution for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; static Point clean(Point in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) if (std::abs(in[i]) < 1.e-10) in[i] = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Collection referenceDistribution(3); referenceDistribution[0] = TruncatedNormal(2.0, 1.5, 1.0, 4.0); referenceDistribution[1] = TruncatedNormal(2.0, 1.5, 1.0, 200.0); referenceDistribution[2] = TruncatedNormal(2.0, 1.5, -200.0, 4.0); Collection distribution(3); distribution[0] = TruncatedDistribution(Normal(2.0, 1.5), 1.0, 4.0); distribution[1] = TruncatedDistribution(Normal(2.0, 1.5), 1.0, TruncatedDistribution::LOWER); distribution[2] = TruncatedDistribution(Normal(2.0, 1.5), 4.0, TruncatedDistribution::UPPER); for (UnsignedInteger testCase = 0; testCase < 3; ++testCase) { TruncatedDistribution distributionTestCase(distribution[testCase]); fullprint << "Distribution " << distributionTestCase << std::endl; std::cout << "Distribution " << distributionTestCase << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distributionTestCase.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distributionTestCase.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distributionTestCase.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distributionTestCase.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; // Define a point Point point( distributionTestCase.getDimension(), 2.5 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Point DDF = distributionTestCase.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (ref)=" << referenceDistribution[testCase].computeDDF(point) << std::endl; Scalar PDF = distributionTestCase.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (ref)=" << referenceDistribution[testCase].computePDF(point) << std::endl; Scalar CDF = distributionTestCase.computeCDF( point ); fullprint << "cdf =" << CDF << std::endl; fullprint << "cdf (ref)=" << referenceDistribution[testCase].computeCDF(point) << std::endl; Point PDFgr = distributionTestCase.computePDFGradient( point ); fullprint << "pdf gradient =" << clean(PDFgr) << std::endl; fullprint << "pdf gradient (ref)=" << clean(referenceDistribution[testCase].computePDFGradient(point)) << std::endl; Point CDFgr = distributionTestCase.computeCDFGradient( point ); fullprint << "cdf gradient =" << clean(CDFgr) << std::endl; fullprint << "cdf gradient (ref)=" << clean(referenceDistribution[testCase].computeCDFGradient(point)) << std::endl; Point quantile = distributionTestCase.computeQuantile( 0.95 ); fullprint << "quantile =" << quantile << std::endl; fullprint << "quantile (ref)=" << referenceDistribution[testCase].computeQuantile( 0.95 ) << std::endl; fullprint << "cdf(quantile)=" << distributionTestCase.computeCDF(quantile) << std::endl; Point mean = distributionTestCase.getMean(); fullprint << "mean =" << mean << std::endl; fullprint << "mean (ref)=" << referenceDistribution[testCase].getMean() << std::endl; Point standardDeviation = distributionTestCase.getStandardDeviation(); fullprint << "standard deviation =" << standardDeviation << std::endl; fullprint << "standard deviation (ref)=" << referenceDistribution[testCase].getStandardDeviation() << std::endl; Point skewness = distributionTestCase.getSkewness(); fullprint << "skewness =" << skewness << std::endl; fullprint << "skewness (ref)=" << referenceDistribution[testCase].getSkewness() << std::endl; Point kurtosis = distributionTestCase.getKurtosis(); fullprint << "kurtosis =" << kurtosis << std::endl; fullprint << "kurtosis (ref)=" << referenceDistribution[testCase].getKurtosis() << std::endl; CovarianceMatrix covariance = distributionTestCase.getCovariance(); fullprint << "covariance =" << covariance << std::endl; fullprint << "covariance (ref)=" << referenceDistribution[testCase].getCovariance() << std::endl; TruncatedDistribution::PointWithDescriptionCollection parameters = distributionTestCase.getParametersCollection(); fullprint << "parameters =" << parameters << std::endl; fullprint << "parameters (ref)=" << referenceDistribution[testCase].getParametersCollection() << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distributionTestCase.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distributionTestCase.getStandardRepresentative()->__str__() << std::endl; // Specific to this distribution Scalar lowerBound = distributionTestCase.getLowerBound(); fullprint << "lowerBound=" << lowerBound << std::endl; Scalar upperBound = distributionTestCase.getUpperBound(); fullprint << "upperBound=" << upperBound << std::endl; // Get/Set parameter Point parameter(distributionTestCase.getParameter()); fullprint << "Distribution parameters =" << parameter.__str__() << std::endl; parameter[0] = 1.0; distributionTestCase.setParameter(parameter); fullprint << "Distribution after setParameter =" << distributionTestCase.getParameter().__str__() << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TruncatedDistribution_std.expout000066400000000000000000000246051307543307100241530ustar00rootroot00000000000000Distribution class=TruncatedDistribution name=TruncatedDistribution distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] lowerBound=1 finiteLowerBound=true upperBound=4 finiteUpperBound=true thresholdRealization=0.5 Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.9123] oneSample first=class=Point name=Unnamed dimension=1 values=[1.3426] last=class=Point name=Unnamed dimension=1 values=[3.87446] mean=class=Point name=Unnamed dimension=1 values=[2.34616] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.63794] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.0851881] ddf (ref)=class=Point name=Unnamed dimension=1 values=[-0.0851881] pdf =0.383346 pdf (ref)=0.383346 cdf =0.57606 cdf (ref)=0.57606 pdf gradient =class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] pdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] cdf gradient =class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] cdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] quantile =class=Point name=Unnamed dimension=1 values=[3.73264] quantile (ref)=class=Point name=Unnamed dimension=1 values=[3.73264] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[2.35526] mean (ref)=class=Point name=Unnamed dimension=1 values=[2.35526] standard deviation =class=Point name=Unnamed dimension=1 values=[0.802475] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[0.802475] skewness =class=Point name=Unnamed dimension=1 values=[0.190048] skewness (ref)=class=Point name=Unnamed dimension=1 values=[0.190048] kurtosis =class=Point name=Unnamed dimension=1 values=[1.9933] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[1.9933] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] parameters =[[mean_0 : 2, standard_deviation_0 : 1.5, finiteLowerBound : 1, lowerBound : 1, finiteUpperBound : 1, upperBound : 4]] parameters (ref)=[[mu : 2, sigma : 1.5, a : 1, b : 4]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[2.35526] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[6.19122] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[17.7136] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[53.9574] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[172.105] Standard representative=TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4) lowerBound=1 upperBound=4 Distribution parameters =[2,1.5,1,1,1,4] Distribution after setParameter =[1,1.5,1,1,1,4] Distribution class=TruncatedDistribution name=TruncatedDistribution distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] lowerBound=1 finiteLowerBound=true upperBound=13.4759 finiteUpperBound=false thresholdRealization=0.5 Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = +inf) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.69199] oneSample first=class=Point name=Unnamed dimension=1 values=[2.79367] last=class=Point name=Unnamed dimension=1 values=[1.76978] mean=class=Point name=Unnamed dimension=1 values=[2.64435] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.23607] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.0747934] ddf (ref)=class=Point name=Unnamed dimension=1 values=[-0.0747934] pdf =0.33657 pdf (ref)=0.33657 cdf =0.505769 cdf (ref)=0.505769 pdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0210957,-0.135523,0.0958891] pdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[-0.0210957,-0.135523,0.0958891,0] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.195764,-0.206061,-0.140807] cdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[-0.195764,-0.206061,-0.140807,0] quantile =class=Point name=Unnamed dimension=1 values=[4.67299] quantile (ref)=class=Point name=Unnamed dimension=1 values=[4.67299] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[2.64103] mean (ref)=class=Point name=Unnamed dimension=1 values=[2.64103] standard deviation =class=Point name=Unnamed dimension=1 values=[1.09456] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[1.09456] skewness =class=Point name=Unnamed dimension=1 values=[0.730758] skewness (ref)=class=Point name=Unnamed dimension=1 values=[0.730758] kurtosis =class=Point name=Unnamed dimension=1 values=[3.23251] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[3.23251] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19806] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19806] parameters =[[mean_0 : 2, standard_deviation_0 : 1.5, finiteLowerBound : 1, lowerBound : 1, finiteUpperBound : 0, upperBound : 13.4759]] parameters (ref)=[[mu : 2, sigma : 1.5, a : 1, b : 200]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[2.64103] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[8.17308] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[28.8718] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[113.553] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[487.593] Standard representative=TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = +inf) lowerBound=1 upperBound=13.4759 Distribution parameters =[2,1.5,1,1,0,13.4759] Distribution after setParameter =[1,1.5,1,1,0,12.4759] Distribution class=TruncatedDistribution name=TruncatedDistribution distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] lowerBound=-9.47594 finiteLowerBound=false upperBound=4 finiteUpperBound=true thresholdRealization=0.5 Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = -inf, b = 4) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[2.38239] oneSample first=class=Point name=Unnamed dimension=1 values=[1.09659] last=class=Point name=Unnamed dimension=1 values=[0.440643] mean=class=Point name=Unnamed dimension=1 values=[1.72507] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.64216] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf =class=Point name=Unnamed dimension=1 values=[-0.0615199] ddf (ref)=class=Point name=Unnamed dimension=1 values=[-0.0615199] pdf =0.27684 pdf (ref)=0.27684 cdf =0.693845 cdf (ref)=0.693845 pdf gradient =class=Point name=Unnamed dimension=3 values=[0.0948276,-0.119643,-0.0333077] pdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[0.0948276,-0.119643,0,-0.0333077] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.19336,0.0190258,-0.0834793] cdf gradient (ref)=class=Point name=Unnamed dimension=4 values=[-0.19336,0.0190258,0,-0.0834793] quantile =class=Point name=Unnamed dimension=1 values=[3.64324] quantile (ref)=class=Point name=Unnamed dimension=1 values=[3.64324] cdf(quantile)=0.95 mean =class=Point name=Unnamed dimension=1 values=[1.72929] mean (ref)=class=Point name=Unnamed dimension=1 values=[1.72929] standard deviation =class=Point name=Unnamed dimension=1 values=[1.27879] standard deviation (ref)=class=Point name=Unnamed dimension=1 values=[1.27879] skewness =class=Point name=Unnamed dimension=1 values=[-0.455767] skewness (ref)=class=Point name=Unnamed dimension=1 values=[-0.455767] kurtosis =class=Point name=Unnamed dimension=1 values=[2.84601] kurtosis (ref)=class=Point name=Unnamed dimension=1 values=[2.84601] covariance =class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.6353] covariance (ref)=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.6353] parameters =[[mean_0 : 2, standard_deviation_0 : 1.5, finiteLowerBound : 0, lowerBound : -9.47594, finiteUpperBound : 1, upperBound : 4]] parameters (ref)=[[mu : 2, sigma : 1.5, a : -200, b : 4]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[1.72929] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[4.62576] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[12.702] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[39.3027] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[123.623] Standard representative=TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = -inf, b = 4) lowerBound=-9.47594 upperBound=4 Distribution parameters =[2,1.5,0,-9.47594,1,4] Distribution after setParameter =[1,1.5,0,-10.4759,1,4] openturns-1.9/lib/test/t_TruncatedNormalFactory_std.cxx000066400000000000000000000067701307543307100235350ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TruncatedNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Point mu(4, 0.0); Point sigma(4, 1.0); Point a(4); Point b(4); a[0] = -4.0; b[0] = 4.0; a[1] = -1.0; b[1] = 4.0; a[2] = 1.0; b[2] = 2.0; a[3] = 3.0; b[3] = 6.0; for (UnsignedInteger i = 0; i < 4; i++) { PlatformInfo::SetNumericalPrecision(i == 2 ? 1 : 2); TruncatedNormal distribution(mu[i], sigma[i], a[i], b[i]); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); TruncatedNormalFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; TruncatedNormal estimatedTruncatedNormal(factory.buildAsTruncatedNormal(sample)); fullprint << "TruncatedNormal =" << distribution << std::endl; fullprint << "Estimated TruncatedNormal=" << estimatedTruncatedNormal << std::endl; estimatedTruncatedNormal = factory.buildAsTruncatedNormal(); fullprint << "Default TruncatedNormal=" << estimatedTruncatedNormal << std::endl; estimatedTruncatedNormal = factory.buildAsTruncatedNormal(distribution.getParameter()); fullprint << "TruncatedNormal from parameters=" << estimatedTruncatedNormal << std::endl; } // Test for constant sample TruncatedNormalFactory factory; UnsignedInteger size = 10000; Sample sample(size, Point(1, 0.0)); // Test for constant sample sample = Sample(size, Point(1, 0.0)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TruncatedNormalFactory_std.expout000066400000000000000000000067111307543307100242520ustar00rootroot00000000000000Distribution =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-4 b=4 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.013 sigma=1 a=-3.6 b=3.6 Default distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 Distribution from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-4 b=4 TruncatedNormal =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-4 b=4 Estimated TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.013 sigma=1 a=-3.6 b=3.6 Default TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 TruncatedNormal from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-4 b=4 Distribution =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=4 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.0092 sigma=1 a=-1 b=3.3 Default distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 Distribution from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=4 TruncatedNormal =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=4 Estimated TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.0092 sigma=1 a=-1 b=3.3 Default TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 TruncatedNormal from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=4 Distribution =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=1 b=2 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.09 sigma=1 a=1 b=2 Default distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 Distribution from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=1 b=2 TruncatedNormal =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=1 b=2 Estimated TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.09 sigma=1 a=1 b=2 Default TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 TruncatedNormal from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=1 b=2 Distribution =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=3 b=6 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.072 sigma=1 a=3 b=5 Default distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 Distribution from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=3 b=6 TruncatedNormal =class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=3 b=6 Estimated TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.072 sigma=1 a=3 b=5 Default TruncatedNormal=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=1 TruncatedNormal from parameters=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=3 b=6 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-2.2e-15 b=2.2e-15 Estimated distribution=class=TruncatedNormal name=TruncatedNormal dimension=1 mu=1 sigma=1 a=1 b=1 openturns-1.9/lib/test/t_TruncatedNormal_std.cxx000066400000000000000000000264421307543307100222030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class TruncatedNormal for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public TruncatedNormal { public: TestObject() : TruncatedNormal(0.5, 3.0, -2.0, 2.0) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object TruncatedNormal distribution(0.5, 3.0, -2.0, 2.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(4); PDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; // log-pdf gradient Point logPDFgr = distribution.computeLogPDFGradient( point ); fullprint << "log-pdf gradient =" << logPDFgr << std::endl; Point logPDFgrFD(4); logPDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computeLogPDF(point)) / (2.0 * eps); logPDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computeLogPDF(point)) / (2.0 * eps); fullprint << "log-pdf gradient (FD)=" << logPDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(4); CDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; TruncatedNormal::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_TruncatedNormal_std.expout000066400000000000000000000125201307543307100227150ustar00rootroot00000000000000Testing class TruncatedNormal checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.5 sigma=3 a=-2 b=2 streamObject(const T & anObject) class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.5 sigma=3 a=-2 b=2 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.5 sigma=3 a=-2 b=2 Distribution TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[-0.814797] oneSample first=class=Point name=Unnamed dimension=1 values=[1.55013] last=class=Point name=Unnamed dimension=1 values=[-0.505664] mean=class=Point name=Unnamed dimension=1 values=[0.0635542] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.25177] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.0148955] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.0148955] log pdf=-1.31632 pdf =0.26812 pdf (FD)=0.26812 cdf=0.743877 ccdf=0.256123 survival=0.256123 Inverse survival=class=Point name=Unnamed dimension=1 values=[-1.74843] Survival(inverse survival)=0.95 characteristic function=(0.482702,0.0461049) log characteristic function=(-0.723814,0.0952254) pdf gradient =class=Point name=Unnamed dimension=4 values=[0.0277138,-0.0118013,0.0515102,-0.0643285] pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[0.0277138,-0.0118013,0.0515102,-0.0643285] log-pdf gradient =class=Point name=Unnamed dimension=4 values=[0.103363,-0.0440151,0.192116,-0.239924] log-pdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[0.103363,-0.0440151,0.192116,-0.239924] cdf gradient =class=Point name=Unnamed dimension=4 values=[-0.0404404,0.00354582,-0.0492055,-0.178474] cdf gradient (FD)=class=Point name=Unnamed dimension=4 values=[-0.0404404,0.00354582,-0.0492055,-0.178474] quantile=class=Point name=Unnamed dimension=1 values=[1.79498] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.74843] upper bound=class=Point name=Unnamed dimension=1 values=[2] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2)) gradientImplementation=MinimumVolumeLevelSetGradient(TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2)) level=1.58329 beta=0.205299 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.87213] upper bound=class=Point name=Unnamed dimension=1 values=[1.89667] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2] upper bound=class=Point name=Unnamed dimension=1 values=[1.79498] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1.74843] upper bound=class=Point name=Unnamed dimension=1 values=[2] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.0697287] standard deviation=class=Point name=Unnamed dimension=1 values=[1.1195] skewness=class=Point name=Unnamed dimension=1 values=[-0.0708515] kurtosis=class=Point name=Unnamed dimension=1 values=[1.86887] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.25327] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mu : 0.5, sigma : 3, a : -2, b : 2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.0348644] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.314534] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0.0203874] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.184018] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0.0143554] Standard representative=TruncatedNormal(mu = 0.25, sigma = 1.5, a = -1, b = 1) openturns-1.9/lib/test/t_Tuples_std.cxx000066400000000000000000000026731307543307100203550ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Tuples for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { Indices bounds(2); bounds[0] = 6; bounds[1] = 10; Tuples myGenerator(bounds); fullprint << "myGenerator = " << myGenerator << std::endl; Tuples::IndicesCollection tuples(myGenerator.generate()); fullprint << "tuples = " << tuples << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Tuples_std.expout000066400000000000000000000006541307543307100210740ustar00rootroot00000000000000myGenerator = class=Tuples name=Unnamed bounds=[6,10] tuples = [[0,0],[1,0],[2,0],[3,0],[4,0],[5,0],[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[0,2],[1,2],[2,2],[3,2],[4,2],[5,2],[0,3],[1,3],[2,3],[3,3],[4,3],[5,3],[0,4],[1,4],[2,4],[3,4],[4,4],[5,4],[0,5],[1,5],[2,5],[3,5],[4,5],[5,5],[0,6],[1,6],[2,6],[3,6],[4,6],[5,6],[0,7],[1,7],[2,7],[3,7],[4,7],[5,7],[0,8],[1,8],[2,8],[3,8],[4,8],[5,8],[0,9],[1,9],[2,9],[3,9],[4,9],[5,9]]#60 openturns-1.9/lib/test/t_UniVariatePolynomial_std.cxx000066400000000000000000000064621307543307100232140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UniVariatePolynomial for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { // Default constructor: null polynomial UniVariatePolynomial P; Scalar point = 1.2; fullprint << "P=" << P << std::endl; fullprint << "P(" << point << ")=" << P(point) << std::endl; // Constructor: construct the 1D polynomial with a vector of Coefficients e.g. UniVariatePolynomial P1 ( coefficients ) UniVariatePolynomial::Coefficients coefficients(6); coefficients[0] = 1.3; coefficients[1] = 2.4; coefficients[2] = 2.0; coefficients[3] = -0.5; coefficients[4] = 4.0; coefficients[5] = 0.0; fullprint << "Initial coefficients=" << coefficients << std::endl; UniVariatePolynomial P1(coefficients); fullprint << "P1=" << P1 << std::endl; fullprint << "P1=" << P1.__str__() << std::endl; fullprint << "P1=" << P1.__str__("Y", "") << std::endl; fullprint << "P1 degree=" << P1.getDegree() << std::endl; fullprint << "P1 roots=" << P1.getRoots() << std::endl; fullprint << "P1(" << point << ")=" << P1(point) << std::endl; // Multiplication by a scalar (postfix only) fullprint << "P1*2.0 =" << P1 * 2.0 << std::endl; // P1.incrementDegree(incDeg) : multiply P1 by X^incDeg fullprint << "P1.incrementDegree(3)=" << P1.incrementDegree(3) << std::endl; fullprint << "P1.incrementDegree(0)=" << P1.incrementDegree(0) << std::endl; fullprint << "P1.incrementDegree(1)=" << P1.incrementDegree(1) << std::endl; fullprint << "P1.incrementDegree()=" << P1.incrementDegree() << std::endl; // Sum of two polynomials coefficients = UniVariatePolynomial::Coefficients(3); coefficients[0] = -2.5; coefficients[1] = 3.5; coefficients[2] = -1.2; UniVariatePolynomial P2(coefficients); fullprint << "P2=" << P2 << std::endl; fullprint << "P1+P2=" << P1 + P2 << std::endl; // Substraction of two polynomials fullprint << "P1-P2=" << P1 - P2 << std::endl; // Multiplication of two polynomials fullprint << "P1*P2=" << P1 * P2 << std::endl; // Multiplication of two polynomials using FFT ResourceMap::SetAsUnsignedInteger("UniVariatePolynomial-LargeDegree", 0); fullprint << "P1*P2=" << P1 * P2 << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UniVariatePolynomial_std.expout000066400000000000000000000032651307543307100237340ustar00rootroot00000000000000P=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=1 values=[0] P(1.2)=0 Initial coefficients=class=Point name=Unnamed dimension=6 values=[1.3,2.4,2,-0.5,4,0] P1=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.3,2.4,2,-0.5,4] P1=1.3 + 2.4 * X + 2 * X^2 - 0.5 * X^3 + 4 * X^4 P1=1.3 + 2.4 * Y + 2 * Y^2 - 0.5 * Y^3 + 4 * Y^4 P1 degree=4 P1 roots=[(0.495448,0.89576),(0.495448,-0.89576),(-0.432948,0.350305),(-0.432948,-0.350305)] P1(1.2)=14.4904 P1*2.0 =class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[2.6,4.8,4,-1,8] P1.incrementDegree(3)=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=8 values=[0,0,0,1.3,2.4,2,-0.5,4] P1.incrementDegree(0)=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.3,2.4,2,-0.5,4] P1.incrementDegree(1)=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,1.3,2.4,2,-0.5,4] P1.incrementDegree()=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=6 values=[0,1.3,2.4,2,-0.5,4] P2=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=3 values=[-2.5,3.5,-1.2] P1+P2=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[-1.2,5.9,0.8,-0.5,4] P1-P2=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[3.8,-1.1,3.2,-0.5,4] P1*P2=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-3.25,-1.45,1.84,5.37,-14.15,14.6,-4.8] P1*P2=class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=7 values=[-3.25,-1.45,1.84,5.37,-14.15,14.6,-4.8] openturns-1.9/lib/test/t_UniformFactory_std.cxx000066400000000000000000000055331307543307100220460ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UniformFactory for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Uniform distribution(1., 2.5); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); UniformFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; Uniform estimatedUniform(factory.buildAsUniform(sample)); fullprint << "Uniform =" << distribution << std::endl; fullprint << "Estimated uniform=" << estimatedUniform << std::endl; estimatedUniform = factory.buildAsUniform(); fullprint << "Default uniform=" << estimatedUniform << std::endl; estimatedUniform = factory.buildAsUniform(distribution.getParameter()); fullprint << "Uniform from parameters=" << estimatedUniform << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UniformFactory_std.expout000066400000000000000000000013471307543307100225670ustar00rootroot00000000000000Distribution =class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated distribution=class=Uniform name=Uniform dimension=1 a=1.00014 b=2.50009 Default distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 Distribution from parameters=class=Uniform name=Uniform dimension=1 a=1 b=2.5 Uniform =class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated uniform=class=Uniform name=Uniform dimension=1 a=1.00014 b=2.50009 Default uniform=class=Uniform name=Uniform dimension=1 a=-1 b=1 Uniform from parameters=class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated distribution=class=Uniform name=Uniform dimension=1 a=-2.22045e-15 b=2.22045e-15 Estimated distribution=class=Uniform name=Uniform dimension=1 a=1 b=1 openturns-1.9/lib/test/t_Uniform_std.cxx000066400000000000000000000201011307543307100205020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Uniform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Uniform { public: TestObject() : Uniform(-0.5, 1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Uniform distribution(-0.5, 1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (Uniform(distribution.getA() + eps, distribution.getB()).computePDF(point) - Uniform(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Uniform(distribution.getA(), distribution.getB() + eps).computePDF(point) - Uniform(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (Uniform(distribution.getA() + eps, distribution.getB()).computeCDF(point) - Uniform(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Uniform(distribution.getA(), distribution.getB() + eps).computeCDF(point) - Uniform(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Uniform::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Uniform_std.expout000066400000000000000000000114561307543307100212410ustar00rootroot00000000000000Testing class Uniform checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Uniform name=Uniform dimension=1 a=-0.5 b=1.5 streamObject(const T & anObject) class=Uniform name=Uniform dimension=1 a=-0.5 b=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Uniform name=Uniform dimension=1 a=-0.5 b=1.5 Distribution Uniform(a = -0.5, b = 1.5) Elliptical = true Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.759753] oneSample first=class=Point name=Unnamed dimension=1 values=[1.26561] last=class=Point name=Unnamed dimension=1 values=[0.349444] mean=class=Point name=Unnamed dimension=1 values=[0.506426] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.339061] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[0] ddf (FD)=class=Point name=Unnamed dimension=1 values=[0] log pdf=-0.693147 pdf =0.5 pdf (FD)=0.5 cdf=0.75 ccdf=0.25 survival=0.25 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.4] Survival(inverse survival)=0.95 characteristic function=(0.73846,0.403423) log characteristic function=(-0.172604,0.5) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.25,-0.25] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.25,-0.25] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.125,-0.375] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.125,-0.375] quantile=class=Point name=Unnamed dimension=1 values=[1.4] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.45] upper bound=class=Point name=Unnamed dimension=1 values=[1.45] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1 * abs(x - (0.5))] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1 * abs(x - (0.5))] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[1 * abs(x - (0.5))] level=0.95 beta=0.95 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.45] upper bound=class=Point name=Unnamed dimension=1 values=[1.45] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[1.4] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.4] upper bound=class=Point name=Unnamed dimension=1 values=[1.5] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[0.5] standard deviation=class=Point name=Unnamed dimension=1 values=[0.57735] skewness=class=Point name=Unnamed dimension=1 values=[0] kurtosis=class=Point name=Unnamed dimension=1 values=[1.8] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.333333] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[a : -0.5, b : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[0.333333] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[0] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[0.2] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[0] Standard representative=Uniform(a = -1, b = 1) openturns-1.9/lib/test/t_UserDefinedCovarianceModel_std.cxx000066400000000000000000000073731307543307100242540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UserDefinedCovarianceModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default constructor */ UserDefinedCovarianceModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; // Default dimension parameter to evaluate the model const UnsignedInteger dimension = 1; // Spatial dimension of the model UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(dimension); /* Scale values */ Point scale(spatialDimension, 1.0); /* Spatial correclation */ CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { // constant amplitude amplitude[index] = (index + 1.0) / dimension ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } /* Sample a CauchyModel */ ExponentialModel referenceModel(scale, amplitude, spatialCorrelation); UnsignedInteger size = 20; RegularGrid timeGrid(0.0, 0.1, size); const UnsignedInteger collectionSize = size * (size + 1) / 2; UserDefinedCovarianceModel::CovarianceMatrixCollection covarianceCollection(collectionSize); UnsignedInteger k = 0; for (UnsignedInteger i = 0; i < timeGrid.getN(); ++i) { const Scalar t = timeGrid.getValue(i); for (UnsignedInteger j = 0; j <= i; ++j) { const Scalar s = timeGrid.getValue(j); covarianceCollection[k] = referenceModel(t, s); ++k; } } /* Create a UserDefinedCovarianceModel */ UserDefinedCovarianceModel myModel(timeGrid, covarianceCollection); fullprint << "myModel= " << myModel << std::endl; /* Sample the UserDefinedCovarianceModel */ for (UnsignedInteger i = 0; i < timeGrid.getN(); ++i) { const Scalar t = timeGrid.getValue(i); for (UnsignedInteger j = i; j < timeGrid.getN(); ++j) { const Scalar s = timeGrid.getValue(j); // We look for cov(s,t) ==> when adding to the collection, we compute cov(t,s) // Because of symmetry, we check the right index computation fullprint << "myModel = " << myModel(s, t)(0, 0) << ", referenceModel = " << referenceModel(s, t)(0 , 0) << std::endl; } } fullprint << "myModel.discretize()=" << myModel.discretize(timeGrid) << std::endl; // Test the drawing method as a nonstationary model, in the covariance range Graph graph = myModel.draw(0, 0, 0.0, 2.0, 21, false, false); fullprint << graph << std::endl; // Test the drawing method as a nonstationary model, in the correlation range graph = myModel.draw(0, 0, 0.0, 2.0, 21, false, true); fullprint << graph << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UserDefinedCovarianceModel_std.expout000066400000000000000000004455141307543307100250010ustar00rootroot00000000000000myDefautModel = class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=1 n=0 covarianceCollection=[] myModel= class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 0.201897, referenceModel = 0.201897 myModel = 0.182684, referenceModel = 0.182684 myModel = 0.165299, referenceModel = 0.165299 myModel = 0.149569, referenceModel = 0.149569 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 0.201897, referenceModel = 0.201897 myModel = 0.182684, referenceModel = 0.182684 myModel = 0.165299, referenceModel = 0.165299 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 0.201897, referenceModel = 0.201897 myModel = 0.182684, referenceModel = 0.182684 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 0.201897, referenceModel = 0.201897 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 1, referenceModel = 1 myModel.discretize()=class=CovarianceMatrix dimension=20 implementation=class=MatrixImplementation name=Unnamed rows=20 columns=20 values=[1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.22313,0.201897,0.182684,0.165299,0.149569,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.22313,0.201897,0.182684,0.165299,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.22313,0.201897,0.182684,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.22313,0.201897,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.22313,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.246597,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.272532,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.301194,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.332871,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.367879,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.40657,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.449329,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.496585,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.548812,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.606531,0.22313,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.67032,0.201897,0.22313,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.740818,0.182684,0.201897,0.22313,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.818731,0.165299,0.182684,0.201897,0.22313,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1,0.904837,0.149569,0.165299,0.182684,0.201897,0.22313,0.246597,0.272532,0.301194,0.332871,0.367879,0.40657,0.449329,0.496585,0.548812,0.606531,0.67032,0.740818,0.818731,0.904837,1] class=Graph name=Unnamed covariance implementation=class=GraphImplementation name=Unnamed covariance title=Unnamed covariance xTitle=s yTitle=t axes=ON grid=ON legendposition=bottomright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.201897] labels=[0.201897] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.201897 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.272532] labels=[0.272532] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.272532 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.367879] labels=[0.367879] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.367879 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.449329] labels=[0.449329] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.449329 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.496585] labels=[0.496585] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.496585 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.606531] labels=[0.606531] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.606531 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.67032] labels=[0.67032] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.67032 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.740818] labels=[0.740818] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.740818 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.818731] labels=[0.818731] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.818731 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1] labels=[1] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] class=Graph name=Unnamed correlation implementation=class=GraphImplementation name=Unnamed correlation title=Unnamed correlation xTitle=s yTitle=t axes=ON grid=ON legendposition=bottomright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.201897] labels=[0.201897] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.201897 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.272532] labels=[0.272532] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.272532 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.367879] labels=[0.367879] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.367879 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.449329] labels=[0.449329] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.449329 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.496585] labels=[0.496585] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.496585 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.606531] labels=[0.606531] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.606531 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.67032] labels=[0.67032] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.67032 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.740818] labels=[0.740818] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.740818 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.818731] labels=[0.818731] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.818731 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1] labels=[1] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] openturns-1.9/lib/test/t_UserDefinedFactory_std.cxx000066400000000000000000000046401307543307100226220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Uniform for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Sample sample(3, 2); sample[0][0] = 1.0; sample[0][1] = 1.5; sample[1][0] = 2.0; sample[1][1] = 2.5; sample[2][0] = 3.0; sample[2][1] = 3.5; UserDefinedFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Sample =" << sample << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; UserDefined estimatedUserDefined(factory.buildAsUserDefined(sample)); fullprint << "Sample =" << sample << std::endl; fullprint << "Estimated UserDefined=" << estimatedUserDefined << std::endl; estimatedUserDefined = factory.buildAsUserDefined(); fullprint << "Default UserDefined=" << estimatedUserDefined << std::endl; // For ticket 784 estimatedDistribution = factory.build(Sample(2000, Point(1, 0.0))); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UserDefinedFactory_std.expout000066400000000000000000000031521307543307100233410ustar00rootroot00000000000000Sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] Estimated distribution=class=UserDefined name=UserDefined dimension=2 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Default distribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] probabilities=class=Point name=Unnamed dimension=1 values=[1] Sample =class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] Estimated UserDefined=class=UserDefined name=UserDefined dimension=2 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Default UserDefined=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] probabilities=class=Point name=Unnamed dimension=1 values=[1] Estimated distribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] probabilities=class=Point name=Unnamed dimension=1 values=[1] openturns-1.9/lib/test/t_UserDefinedSpectralModel_std.cxx000066400000000000000000000063551307543307100237560ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UserDefinedSpectralModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { // For -0.0 trouble if (std::abs(in) < 1.e-6) return 0.0; return in; //return 1.e-6*round(1.e6*in); } HermitianMatrix clean(HermitianMatrix in) { UnsignedInteger dim = in.getDimension(); for(UnsignedInteger i = 0; i < dim; i++) for(UnsignedInteger j = 0; j <= i; j++) { Scalar realIJ = clean(real(in(i, j))); Scalar imagIJ = clean(imag(in(i, j))); in(i, j) = Complex(realIJ, imagIJ); } return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default constructor */ UserDefinedSpectralModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; /* Default dimension parameter to evaluate the model */ const UnsignedInteger dimension = 2; /* Amplitude values */ Point amplitude(dimension); /* Scale values */ Point scale(dimension); /* Spatial correclation */ CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { // constant amplitude amplitude[index] = 1.0 ; scale[index] = (index + 1.0) / dimension ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } /* Sample a CauchyModel */ CauchyModel referenceModel(scale, amplitude, spatialCorrelation); UnsignedInteger size = 5; UserDefinedSpectralModel::HermitianMatrixCollection dspCollection(size); RegularGrid frequencyGrid(0.0, 2.0 / size, size); for (UnsignedInteger i = 0; i < size; ++i) dspCollection[i] = referenceModel(frequencyGrid.getValue(i)); /* Create a UserDefinedSpectralModel */ UserDefinedSpectralModel myModel(frequencyGrid, dspCollection); fullprint << "myModel=" << myModel << std::endl; /* Sample the UserDefinedSpectralModel */ RegularGrid samplingGrid(-0.4, 1.0 / 16, 5 * size); for (UnsignedInteger i = 0; i < samplingGrid.getN(); ++i) { Scalar frequency = samplingGrid.getValue(i); fullprint << "frequency=" << clean(frequency) << ", myModel=\n" << clean(myModel(frequency)) << ", referenceModel=\n" << clean(referenceModel(frequency)) << std::endl; } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UserDefinedSpectralModel_std.expout000066400000000000000000000244721307543307100245000ustar00rootroot00000000000000myDefautModel = class=UserDefinedSpectralModel DSPCollection=[] frequencyGrid=class=RegularGrid name=Unnamed start=0 step=1 n=0 myModel=class=UserDefinedSpectralModel DSPCollection=[class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(2,0),(2,0)],class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)],class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)],class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0022727,0),(0.0022727,0),(0.0022727,0),(0.0022727,0)],class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.000746032,0),(0.000746032,0),(0.000746032,0),(0.000746032,0)]] frequencyGrid=class=RegularGrid name=Unnamed start=0 step=0.4 n=5 frequency=-0.4, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0,0),(0.105986,0)] frequency=-0.3375, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.171285,0),(0.171285,0),(0,0),(0.171285,0)] frequency=-0.275, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.287343,0),(0.287343,0),(0,0),(0.287343,0)] frequency=-0.2125, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.497157,0),(0.497157,0),(0,0),(0.497157,0)] frequency=-0.15, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(0,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.866707,0),(0.866707,0),(0,0),(0.866707,0)] frequency=-0.0875, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(0,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1.4279,0),(1.4279,0),(0,0),(1.4279,0)] frequency=-0.025, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(0,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1.93987,0),(1.93987,0),(0,0),(1.93987,0)] frequency=0.0375, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(2,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1.86887,0),(1.86887,0),(0,0),(1.86887,0)] frequency=0.1, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(2,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1.3051,0),(1.3051,0),(0,0),(1.3051,0)] frequency=0.1625, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(2,0),(2,0),(2,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.776764,0),(0.776764,0),(0,0),(0.776764,0)] frequency=0.225, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.444757,0),(0.444757,0),(0,0),(0.444757,0)] frequency=0.2875, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.258367,0),(0.258367,0),(0,0),(0.258367,0)] frequency=0.35, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.155134,0),(0.155134,0),(0,0),(0.155134,0)] frequency=0.4125, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0967208,0),(0.0967208,0),(0,0),(0.0967208,0)] frequency=0.475, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0625602,0),(0.0625602,0),(0,0),(0.0625602,0)] frequency=0.5375, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0418597,0),(0.0418597,0),(0,0),(0.0418597,0)] frequency=0.6, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.105986,0),(0.105986,0),(0.105986,0),(0.105986,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0288758,0),(0.0288758,0),(0,0),(0.0288758,0)] frequency=0.6625, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.020467,0),(0.020467,0),(0,0),(0.020467,0)] frequency=0.725, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0148602,0),(0.0148602,0),(0,0),(0.0148602,0)] frequency=0.7875, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.011022,0),(0.011022,0),(0,0),(0.011022,0)] frequency=0.85, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.00833172,0),(0.00833172,0),(0,0),(0.00833172,0)] frequency=0.9125, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.00640551,0),(0.00640551,0),(0,0),(0.00640551,0)] frequency=0.975, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.010407,0),(0.010407,0),(0.010407,0),(0.010407,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.00499974,0),(0.00499974,0),(0,0),(0.00499974,0)] frequency=1.0375, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0022727,0),(0.0022727,0),(0.0022727,0),(0.0022727,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.00395592,0),(0.00395592,0),(0,0),(0.00395592,0)] frequency=1.1, myModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.0022727,0),(0.0022727,0),(0.0022727,0),(0.0022727,0)], referenceModel= class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.00316868,0),(0.00316868,0),(0,0),(0.00316868,0)] openturns-1.9/lib/test/t_UserDefinedStationaryCovarianceModel_std.cxx000066400000000000000000000064531307543307100263300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UserDefinedStationaryCovarianceModel * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Default constructor */ UserDefinedStationaryCovarianceModel myDefautModel; fullprint << "myDefautModel = " << myDefautModel << std::endl; // Default dimension parameter to evaluate the model const UnsignedInteger dimension = 1; // Spatial dimension of the model const UnsignedInteger spatialDimension = 1; /* Amplitude values */ Point amplitude(dimension); /* Scale values */ Point scale(spatialDimension, 1.0); /* Spatial correclation */ CorrelationMatrix spatialCorrelation(dimension); for (UnsignedInteger index = 0 ; index < dimension; ++index) { // constant amplitude amplitude[index] = (index + 1.0) / dimension ; if (index > 0) spatialCorrelation(index, index - 1) = 1.0 / index; } /* Sample a CauchyModel */ ExponentialModel referenceModel(scale, amplitude, spatialCorrelation); UnsignedInteger size = 20; RegularGrid timeGrid(0.0, 0.1, size); UserDefinedStationaryCovarianceModel::CovarianceMatrixCollection covarianceCollection(size); for (UnsignedInteger i = 0; i < size; ++i) { const Scalar t = timeGrid.getValue(i); covarianceCollection[i] = referenceModel(0, t); } /* Create a UserDefinedStationaryCovarianceModel */ UserDefinedStationaryCovarianceModel myModel(timeGrid, covarianceCollection); fullprint << "myModel= " << myModel << std::endl; /* Sample the UserDefinedStationaryCovarianceModel */ for (UnsignedInteger i = 0; i < timeGrid.getN(); ++i) { const Scalar t = timeGrid.getValue(i); // We look for cov(t) ==> when adding to the collection, we compute cov(t) fullprint << "myModel = " << myModel(t)(0, 0) << ", referenceModel = " << referenceModel(t)(0 , 0) << std::endl; } // Test the drawing method as a nonstationary model, in the covariance range Graph graph = myModel.draw(0, 0, -2.0, 2.0, 21, true, false); fullprint << graph << std::endl; // Test the drawing method as a nonstationary model, in the correlation range graph = myModel.draw(0, 0, -2.0, 2.0, 21, true, true); fullprint << graph << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UserDefinedStationaryCovarianceModel_std.expout000066400000000000000000000124331307543307100270450ustar00rootroot00000000000000myDefautModel = class=UserDefinedStationaryCovarianceModel mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] simplices=[] covarianceCollection=[] myModel= class=UserDefinedStationaryCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.904837],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.818731],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.740818],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.67032],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.606531],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.548812],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.496585],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.449329],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40657],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.367879],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.332871],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.301194],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.272532],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.246597],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.22313],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.201897],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.182684],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.165299],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.149569]] myModel = 1, referenceModel = 1 myModel = 0.904837, referenceModel = 0.904837 myModel = 0.818731, referenceModel = 0.818731 myModel = 0.740818, referenceModel = 0.740818 myModel = 0.67032, referenceModel = 0.67032 myModel = 0.606531, referenceModel = 0.606531 myModel = 0.548812, referenceModel = 0.548812 myModel = 0.496585, referenceModel = 0.496585 myModel = 0.449329, referenceModel = 0.449329 myModel = 0.40657, referenceModel = 0.40657 myModel = 0.367879, referenceModel = 0.367879 myModel = 0.332871, referenceModel = 0.332871 myModel = 0.301194, referenceModel = 0.301194 myModel = 0.272532, referenceModel = 0.272532 myModel = 0.246597, referenceModel = 0.246597 myModel = 0.22313, referenceModel = 0.22313 myModel = 0.201897, referenceModel = 0.201897 myModel = 0.182684, referenceModel = 0.182684 myModel = 0.165299, referenceModel = 0.165299 myModel = 0.149569, referenceModel = 0.149569 class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Unnamed xTitle=tau yTitle=covariance axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=2 data=[[2,0.149569],[1.8,0.165299],[1.6,0.201897],[1.4,0.246597],[1.2,0.301194],[1,0.367879],[0.8,0.449329],[0.6,0.548812],[0.4,0.67032],[0.2,0.818731],[0,1],[-0.2,0.818731],[-0.4,0.67032],[-0.6,0.548812],[-0.8,0.449329],[-1,0.367879],[-1.2,0.301194],[-1.4,0.246597],[-1.6,0.201897],[-1.8,0.165299],[-2,0.149569]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Unnamed xTitle=tau yTitle=correlation axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=2 data=[[2,0.149569],[1.8,0.165299],[1.6,0.201897],[1.4,0.246597],[1.2,0.301194],[1,0.367879],[0.8,0.449329],[0.6,0.548812],[0.4,0.67032],[0.2,0.818731],[0,1],[-0.2,0.818731],[-0.4,0.67032],[-0.6,0.548812],[-0.8,0.449329],[-1,0.367879],[-1.2,0.301194],[-1.4,0.246597],[-1.6,0.201897],[-1.8,0.165299],[-2,0.149569]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] openturns-1.9/lib/test/t_UserDefined_std.cxx000066400000000000000000000074571307543307100213030ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class UserDefined for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object Sample x(4, 1); x[0][0] = 1.0; x[1][0] = 2.0; x[2][0] = 3.0; x[3][0] = 3.0; Point p(4); p[0] = 0.3; p[1] = 0.1; p[2] = 0.6; p[3] = 0.6; UserDefined distribution(x, p); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample=" << oneSample << std::endl; // Define a point Point point(distribution.getDimension(), 2.0); // Show PDF and CDF of a point Scalar pointPDF = distribution.computePDF( point ); Scalar pointCDF = distribution.computeCDF( point ); fullprint << "point= " << point << " pdf=" << pointPDF << " cdf=" << pointCDF << std::endl; // Get 95% quantile Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "Quantile=" << quantile << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; // To prevent automatic compaction ResourceMap::SetAsUnsignedInteger("UserDefined-SmallSize", 5); Sample sample(40, 3); for (UnsignedInteger i = 0; i < 4; ++i) { for (UnsignedInteger j = 0; j < 3; ++j) { sample[i][j] = 10 * (i / 3 + 1) + 0.1 * (j + 1); } } UserDefined multivariateUserDefined(sample); multivariateUserDefined.setName("Unnamed"); fullprint << "Multivariate UserDefined=" << multivariateUserDefined << std::endl; multivariateUserDefined.compactSupport(); fullprint << "Multivariate UserDefined=" << multivariateUserDefined << std::endl; fullprint << "Marginal 0=" << Distribution(multivariateUserDefined.getMarginal(0)) << std::endl; Indices indices(2); indices[0] = 2; indices[1] = 0; fullprint << "Marginal (2, 0)=" << Distribution(multivariateUserDefined.getMarginal(indices)) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_UserDefined_std.expout000066400000000000000000000057431307543307100220210ustar00rootroot00000000000000Distribution class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[1],[2],[3]] probabilities=class=Point name=Unnamed dimension=3 values=[0.1875,0.0625,0.75] Distribution UserDefined({x = [1], p = 0.1875}, {x = [2], p = 0.0625}, {x = [3], p = 0.75}) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[3] oneSample=class=Sample name=UserDefined implementation=class=SampleImplementation name=UserDefined size=10 dimension=1 description=[v0] data=[[3],[1],[1],[3],[3],[3],[3],[1],[3],[3]] point= class=Point name=Unnamed dimension=1 values=[2] pdf=0.0625 cdf=0.25 Quantile=class=Point name=Unnamed dimension=1 values=[3] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[2.5625] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[7.1875] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[20.9375] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[61.9375] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[184.438] Standard representative=UserDefined({x = [1], p = 0.1875}, {x = [2], p = 0.0625}, {x = [3], p = 0.75}) Multivariate UserDefined=class=UserDefined name=Unnamed dimension=3 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=40 dimension=3 data=[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[10.1,10.2,10.3],[10.1,10.2,10.3],[10.1,10.2,10.3],[20.1,20.2,20.3]] probabilities=class=Point name=Unnamed dimension=40 values=[0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025] Multivariate UserDefined=class=UserDefined name=Unnamed dimension=3 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=3 data=[[0,0,0],[10.1,10.2,10.3],[20.1,20.2,20.3]] probabilities=class=Point name=Unnamed dimension=3 values=[0.9,0.075,0.025] Marginal 0=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[10.1],[20.1]] probabilities=class=Point name=Unnamed dimension=3 values=[0.9,0.075,0.025] Marginal (2, 0)=class=UserDefined name=UserDefined dimension=2 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[0,0],[10.3,10.1],[20.3,20.1]] probabilities=class=Point name=Unnamed dimension=3 values=[0.9,0.075,0.025] openturns-1.9/lib/test/t_ValueFunction_std.cxx000066400000000000000000000046621307543307100216630ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ValueFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Create an intance */ SymbolicFunction myFunc("x", "x^2"); ValueFunction mySpatialFunc(myFunc); fullprint << "mySpatialFunc=" << mySpatialFunc << std::endl; /* Get the input and output description */ fullprint << "mySpatialFunc input description=" << mySpatialFunc.getInputDescription() << std::endl; fullprint << "mySpatialFunc output description=" << mySpatialFunc.getOutputDescription() << std::endl; /* Get the input and output dimension, based on description */ fullprint << "mySpatialFunc input dimension=" << mySpatialFunc.getInputDimension() << std::endl; fullprint << "mySpatialFunc output dimension=" << mySpatialFunc.getOutputDimension() << std::endl; /* Create a TimeSeries */ RegularGrid tg(0.0, 0.2, 6); Sample data(tg.getN(), myFunc.getInputDimension()); for (UnsignedInteger i = 0; i < data.getSize(); ++i) for (UnsignedInteger j = 0; j < data.getDimension(); ++j) data(i, j) = i * data.getDimension() + j; TimeSeries ts(tg, data); fullprint << "input time series=" << ts << std::endl; fullprint << "output time series=" << mySpatialFunc(ts) << std::endl; /* Get the number of calls */ fullprint << "called " << mySpatialFunc.getCallsNumber() << " times" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ValueFunction_std.expout000066400000000000000000000024651307543307100224040ustar00rootroot00000000000000mySpatialFunc=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2] mySpatialFunc input description=[x] mySpatialFunc output description=[y0] mySpatialFunc input dimension=1 mySpatialFunc output dimension=1 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[1],[2],[3],[4],[5]] start=0 timeStep=0.2 n=6 output time series=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[y0] data=[[0],[1],[4],[9],[16],[25]] called 1 times openturns-1.9/lib/test/t_VertexValueFunction_std.cxx000066400000000000000000000051111307543307100230470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class VertexValueFunction for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { /* Create an intance */ Description inputVars; inputVars.add("t"); inputVars.add("x"); Description formula(1, "x + t^2"); SymbolicFunction myFunc(inputVars, formula); VertexValueFunction myTemporalFunc(myFunc); fullprint << "myTemporalFunc=" << myTemporalFunc << std::endl; /* Get the input and output description */ fullprint << "myTemporalFunc input description=" << myTemporalFunc.getInputDescription() << std::endl; fullprint << "myTemporalFunc output description=" << myTemporalFunc.getOutputDescription() << std::endl; /* Get the input and output dimension, based on description */ fullprint << "myTemporalFunc input dimension=" << myTemporalFunc.getInputDimension() << std::endl; fullprint << "myTemporalFunc output dimension=" << myTemporalFunc.getOutputDimension() << std::endl; /* Create a TimeSeries */ RegularGrid tg(0.0, 0.2, 6); Sample data(tg.getN(), myFunc.getInputDimension() - 1); for (UnsignedInteger i = 0; i < data.getSize(); ++i) for (UnsignedInteger j = 0; j < data.getDimension(); ++j) data(i, j) = i * data.getDimension() + j; TimeSeries ts(tg, data); fullprint << "input time series=" << ts << std::endl; fullprint << "output time series=" << myTemporalFunc(ts) << std::endl; /* Get the number of calls */ fullprint << "called " << myTemporalFunc.getCallsNumber() << " times" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_VertexValueFunction_std.expout000066400000000000000000000025201307543307100235720ustar00rootroot00000000000000myTemporalFunc=class=VertexValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[t,x] outputVariablesNames=[y0] formulas=[x + t^2] myTemporalFunc input description=[x] myTemporalFunc output description=[y0] myTemporalFunc input dimension=1 myTemporalFunc output dimension=1 input time series=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[0],[1],[2],[3],[4],[5]] start=0 timeStep=0.2 n=6 output time series=class=Field name=Unnamed description=[t,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[t] data=[[0],[0.2],[0.4],[0.6],[0.8],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 description=[y0] data=[[0],[1.04],[2.16],[3.36],[4.64],[6]] called 1 times openturns-1.9/lib/test/t_VisualTest_std.cxx000066400000000000000000000135661307543307100212070ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class VisualTest * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); /* EmpiricalCDF tests */ { /* Generate a Normal sample */ Normal normal(1); UnsignedInteger size = 100; Sample sample(normal.getSample(size)); Graph sampleCDF(VisualTest::DrawEmpiricalCDF(sample, sample.getMin()[0] - 1.0, sample.getMax()[0] + 1.0)); fullprint << "sampleCDF = " << sampleCDF << std::endl; sampleCDF = VisualTest::DrawEmpiricalCDF(sample, -0.5, 0.5); fullprint << "EmpiricalCDF graph = " << sampleCDF << std::endl; } /* Histogram tests */ { Normal normal(1); UnsignedInteger size = 100; Sample sample(normal.getSample(size)); Graph sampleHist(VisualTest::DrawHistogram(sample, 10)); fullprint << "sampleHist = " << sampleHist << std::endl; sampleHist = VisualTest::DrawHistogram(sample); fullprint << "Histogram graph = " << sampleHist << std::endl; } /* QQPlot tests */ { UnsignedInteger size = 100; Normal normal(1); Sample sample(normal.getSample(size)); Sample sample2(Gamma(3.0, 4.0, 0.0).getSample(size)); Graph twoSamplesQQPlot(VisualTest::DrawQQplot(sample, sample2, 100)); fullprint << "twoSamplesQQPlot = " << twoSamplesQQPlot << std::endl; Graph sampleDistributionQQPlot(VisualTest::DrawQQplot(sample, normal)); fullprint << "sampleDistributionQQPlot = " << sampleDistributionQQPlot << std::endl; } /* HenryLine test */ { UnsignedInteger size = 100; Normal normal(1); Sample sample(normal.getSample(size)); Graph henryPlot(VisualTest::DrawHenryLine(sample)); fullprint << "Henry graph = " << henryPlot << std::endl; } /* Clouds tests */ { UnsignedInteger dimension = 2; CorrelationMatrix R(dimension); R(0, 1) = 0.8; Normal distribution(Point(dimension, 3.0), Point(dimension, 2.0), R); UnsignedInteger size = 100; Sample sample2D(distribution.getSample(size)); Sample firstSample(size, 1); Sample secondSample(size, 1); for (UnsignedInteger i = 0; i < size; i++) { firstSample[i][0] = sample2D[i][0]; secondSample[i][0] = sample2D[i][1]; } Graph sampleSampleClouds(VisualTest::DrawClouds(sample2D, Normal(Point(dimension, 2.0), Point(dimension, 3.0), R).getSample(size / 2))); fullprint << "sampleSampleClouds = " << sampleSampleClouds << std::endl; Graph sampleDistributionClouds(VisualTest::DrawClouds(sample2D, Normal(Point(dimension, 2.5), Point(dimension, 1.0), R))); fullprint << "sampleDistributionClouds = " << sampleDistributionClouds << std::endl; } /* LinearModel tests */ { UnsignedInteger dimension = 2; CorrelationMatrix R(dimension); R(0, 1) = 0.8; Normal distribution(Point(dimension, 3.0), Point(dimension, 2.0), R); UnsignedInteger size = 100; Sample sample2D(distribution.getSample(size)); Sample firstSample(size, 1); Sample secondSample(size, 1); for (UnsignedInteger i = 0; i < size; i++) { firstSample[i][0] = sample2D[i][0]; secondSample[i][0] = sample2D[i][1]; } LinearModel lmtest(LinearModelFactory().build(firstSample, secondSample)); Graph drawLinearModelVTest(VisualTest::DrawLinearModel(firstSample, secondSample, lmtest)); fullprint << "LinearModelV = " << drawLinearModelVTest << std::endl; Graph drawLinearModelResidualTest(VisualTest::DrawLinearModelResidual(firstSample, secondSample, lmtest)); fullprint << "LinearModelR = " << drawLinearModelResidualTest << std::endl; } /* CobWeb tests */ { UnsignedInteger size = 100; UnsignedInteger inputDimension = 6; Sample inputSample(Normal(inputDimension).getSample(size)); Description inputVar(inputDimension); for (UnsignedInteger i = 0; i < inputDimension; ++i) inputVar[i] = (OSS() << "X" << i); Description formula(1); OSS oss; for (UnsignedInteger i = 0; i < inputDimension; ++i) oss << (i > 0 ? "+" : "") << "cos(" << i + 1 << "*" << inputVar[i] << ")"; formula[0] = oss; SymbolicFunction model(inputVar, formula); Sample outputSample(model(inputSample)); Graph cobwebValue(VisualTest::DrawCobWeb(inputSample, outputSample, 2.5, 3.0, "red", false)); fullprint << "cobwebValue = " << cobwebValue << std::endl; Graph cobwebQuantile(VisualTest::DrawCobWeb(inputSample, outputSample, 0.7, 0.9, "red", false)); fullprint << "cobwebQuantile = " << cobwebQuantile << std::endl; } /* KendallPlot tests */ { UnsignedInteger size = 100; FrankCopula copula1(1.5); GumbelCopula copula2(4.5); Sample sample1(copula1.getSample(size)); sample1.setName("data 1"); Sample sample2(copula2.getSample(size)); sample2.setName("data 2"); Graph kendallPlot1(VisualTest::DrawKendallPlot(sample1, copula2)); fullprint << "KendallPlot1 = " << kendallPlot1 << std::endl; Graph kendallPlot2(VisualTest::DrawKendallPlot(sample2, sample1)); fullprint << "KendallPlot2 = " << kendallPlot2 << std::endl; } return ExitCode::Success; } openturns-1.9/lib/test/t_VisualTest_std.expout000066400000000000000000003360751307543307100217340ustar00rootroot00000000000000sampleCDF = class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=102 dimension=2 data=[[-3.29006,0],[-2.29006,0.01],[-2.18139,0.02],[-1.96869,0.03],[-1.78796,0.04],[-1.66086,0.05],[-1.53073,0.06],[-1.36853,0.07],[-1.31178,0.08],[-1.28289,0.09],[-1.26617,0.1],[-1.03896,0.11],[-1.03808,0.12],[-0.958722,0.13],[-0.957072,0.14],[-0.938771,0.15],[-0.901581,0.16],[-0.89182,0.17],[-0.856712,0.18],[-0.855886,0.19],[-0.781366,0.2],[-0.777033,0.21],[-0.752817,0.22],[-0.743622,0.23],[-0.734708,0.24],[-0.721533,0.25],[-0.671291,0.26],[-0.657603,0.27],[-0.633066,0.28],[-0.560206,0.29],[-0.510764,0.3],[-0.506925,0.31],[-0.485112,0.32],[-0.483642,0.33],[-0.470526,0.34],[-0.438266,0.35],[-0.382992,0.36],[-0.355007,0.37],[-0.353552,0.38],[-0.241223,0.39],[-0.238253,0.4],[-0.181004,0.41],[-0.160625,0.42],[-0.139453,0.43],[-0.125498,0.44],[-0.111461,0.45],[-0.0907838,0.46],[-0.0899071,0.47],[-0.0436123,0.48],[0.0521593,0.49],[0.0702074,0.5],[0.103474,0.51],[0.184356,0.52],[0.257926,0.53],[0.261018,0.54],[0.29995,0.55],[0.322925,0.56],[0.334794,0.57],[0.338751,0.58],[0.350042,0.59],[0.351418,0.6],[0.377922,0.61],[0.40136,0.62],[0.407717,0.63],[0.44549,0.64],[0.445785,0.65],[0.473617,0.66],[0.538071,0.67],[0.539345,0.68],[0.544047,0.69],[0.608202,0.7],[0.637167,0.71],[0.655027,0.72],[0.677958,0.73],[0.716353,0.74],[0.741548,0.75],[0.759602,0.76],[0.790446,0.77],[0.793156,0.78],[0.810668,0.79],[0.814561,0.8],[0.905602,0.81],[0.994482,0.82],[0.995793,0.83],[1.00434,0.84],[1.01556,0.85],[1.07062,0.86],[1.20548,0.87],[1.21381,0.88],[1.27128,0.89],[1.3263,0.9],[1.36783,0.91],[1.43725,0.92],[1.67297,0.93],[1.70938,0.94],[1.73821,0.95],[1.78236,0.96],[1.85579,0.97],[1.96876,0.98],[2.11968,0.99],[2.24623,1],[3.24623,1]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2] EmpiricalCDF graph = class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=37 dimension=2 data=[[-0.5,0.31],[-0.485112,0.32],[-0.483642,0.33],[-0.470526,0.34],[-0.438266,0.35],[-0.382992,0.36],[-0.355007,0.37],[-0.353552,0.38],[-0.241223,0.39],[-0.238253,0.4],[-0.181004,0.41],[-0.160625,0.42],[-0.139453,0.43],[-0.125498,0.44],[-0.111461,0.45],[-0.0907838,0.46],[-0.0899071,0.47],[-0.0436123,0.48],[0.0521593,0.49],[0.0702074,0.5],[0.103474,0.51],[0.184356,0.52],[0.257926,0.53],[0.261018,0.54],[0.29995,0.55],[0.322925,0.56],[0.334794,0.57],[0.338751,0.58],[0.350042,0.59],[0.351418,0.6],[0.377922,0.61],[0.40136,0.62],[0.407717,0.63],[0.44549,0.64],[0.445785,0.65],[0.473617,0.66],[0.5,0.66]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2] sampleHist = class=Graph name=sample histogram implementation=class=GraphImplementation name=sample histogram title=sample histogram xTitle=realizations yTitle=frequency axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Normal histogram data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=44 dimension=2 data=[[-3.40287,0],[-3.09737,0],[-3.09737,0],[-3.09737,0.0163666],[-2.48637,0.0163666],[-2.48637,0],[-2.48637,0],[-2.48637,0.0490998],[-1.87537,0.0490998],[-1.87537,0],[-1.87537,0],[-1.87537,0.180033],[-1.26437,0.180033],[-1.26437,0],[-1.26437,0],[-1.26437,0.196399],[-0.653374,0.196399],[-0.653374,0],[-0.653374,0],[-0.653374,0.425532],[-0.0423737,0.425532],[-0.0423737,0],[-0.0423737,0],[-0.0423737,0.409165],[0.568626,0.409165],[0.568626,0],[0.568626,0],[0.568626,0.245499],[1.17963,0.245499],[1.17963,0],[1.17963,0],[1.17963,0.0654664],[1.79063,0.0654664],[1.79063,0],[1.79063,0],[1.79063,0.0327332],[2.40163,0.0327332],[2.40163,0],[2.40163,0],[2.40163,0.0163666],[3.01263,0.0163666],[3.01263,0],[3.01263,0],[3.31813,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] Histogram graph = class=Graph name=sample histogram implementation=class=GraphImplementation name=sample histogram title=sample histogram xTitle=realizations yTitle=frequency axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Normal histogram data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=48 dimension=2 data=[[-3.3751,0],[-3.09737,0],[-3.09737,0],[-3.09737,0.0180033],[-2.54192,0.0180033],[-2.54192,0],[-2.54192,0],[-2.54192,0.0360065],[-1.98646,0.0360065],[-1.98646,0],[-1.98646,0],[-1.98646,0.162029],[-1.43101,0.162029],[-1.43101,0],[-1.43101,0],[-1.43101,0.10802],[-0.875556,0.10802],[-0.875556,0],[-0.875556,0],[-0.875556,0.432078],[-0.320101,0.432078],[-0.320101,0],[-0.320101,0],[-0.320101,0.450082],[0.235354,0.450082],[0.235354,0],[0.235354,0],[0.235354,0.342062],[0.790808,0.342062],[0.790808,0],[0.790808,0],[0.790808,0.162029],[1.34626,0.162029],[1.34626,0],[1.34626,0],[1.34626,0.0540098],[1.90172,0.0540098],[1.90172,0],[1.90172,0],[1.90172,0.0180033],[2.45717,0.0180033],[2.45717,0],[2.45717,0],[2.45717,0.0180033],[3.01263,0.0180033],[3.01263,0],[3.01263,0],[3.29035,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] twoSamplesQQPlot = class=Graph name=Two sample QQ-plot implementation=class=GraphImplementation name=Two sample QQ-plot title=Two sample QQ-plot xTitle=X0 yTitle=X0 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Test line implementation=class=Curve name=Test line derived from class=DrawableImplementation name=Test line legend=Test line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.53986,-2.53986],[3.02799,3.02799]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-2.53986,0.130531],[-2.26608,0.146424],[-2.17211,0.206196],[-1.73218,0.219573],[-1.71131,0.220182],[-1.64827,0.241745],[-1.62506,0.261449],[-1.40457,0.278144],[-1.39796,0.284411],[-1.29031,0.290922],[-1.18784,0.307315],[-1.08751,0.33419],[-1.05502,0.341152],[-1.01864,0.392253],[-0.999111,0.396522],[-0.996469,0.405451],[-0.996141,0.405559],[-0.971531,0.407048],[-0.91681,0.415836],[-0.907348,0.438541],[-0.906566,0.452065],[-0.875419,0.456528],[-0.790757,0.461176],[-0.788704,0.4631],[-0.74536,0.463789],[-0.669449,0.465767],[-0.638434,0.467035],[-0.622424,0.467421],[-0.58923,0.469077],[-0.543099,0.475924],[-0.542319,0.490027],[-0.537503,0.501443],[-0.521596,0.501947],[-0.519476,0.514905],[-0.485259,0.519313],[-0.470039,0.522141],[-0.453386,0.522206],[-0.439866,0.524463],[-0.432617,0.559639],[-0.411565,0.560109],[-0.40773,0.574588],[-0.36799,0.582223],[-0.338823,0.584266],[-0.327249,0.598486],[-0.272407,0.617753],[-0.269535,0.635587],[-0.259332,0.641983],[-0.23527,0.650878],[-0.137928,0.666076],[-0.0566709,0.669203],[-0.0351973,0.682451],[-0.0343283,0.689235],[-0.029616,0.692934],[-0.0217279,0.693301],[-0.00409659,0.699417],[0.0208818,0.707193],[0.0702065,0.710231],[0.11108,0.711527],[0.146868,0.74568],[0.26775,0.746336],[0.301918,0.748084],[0.423232,0.752576],[0.461082,0.754132],[0.465919,0.771749],[0.475425,0.783952],[0.490331,0.783968],[0.549439,0.807648],[0.562833,0.822909],[0.576125,0.823158],[0.59202,0.823699],[0.59922,0.829051],[0.618319,0.853139],[0.623854,0.853574],[0.660021,0.860023],[0.661002,0.919],[0.677663,0.927065],[0.711148,0.936733],[0.722044,0.9557],[0.767137,0.971449],[0.773121,0.986523],[0.779572,1.02416],[0.824993,1.04375],[0.858269,1.08303],[0.858611,1.11744],[0.888798,1.19091],[0.943326,1.20089],[1.13848,1.20887],[1.14842,1.27098],[1.16322,1.27366],[1.30115,1.32608],[1.34856,1.34262],[1.40895,1.34762],[1.4282,1.37169],[1.45019,1.46146],[1.45919,1.51538],[1.48031,1.65878],[1.6948,1.67854],[1.89326,1.73505],[1.94606,1.77425],[3.02799,2.34863]] color=blue fillStyle=solid lineStyle=solid pointStyle=bullet lineWidth=1] sampleDistributionQQPlot = class=Graph name=Sample versus model QQ-plot implementation=class=GraphImplementation name=Sample versus model QQ-plot title=Sample versus model QQ-plot xTitle=X0 yTitle=Normal(mu = 0, sigma = 1) axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Test line implementation=class=Curve name=Test line derived from class=DrawableImplementation name=Test line legend=Test line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.53986,-2.53986],[3.02799,3.02799]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-2.53986,-2.57583],[-2.26608,-2.17009],[-2.17211,-1.95996],[-1.73218,-1.81191],[-1.71131,-1.6954],[-1.64827,-1.59819],[-1.62506,-1.5141],[-1.40457,-1.43953],[-1.39796,-1.3722],[-1.29031,-1.31058],[-1.18784,-1.25357],[-1.08751,-1.20036],[-1.05502,-1.15035],[-1.01864,-1.10306],[-0.999111,-1.05812],[-0.996469,-1.01522],[-0.996141,-0.974114],[-0.971531,-0.934589],[-0.91681,-0.896473],[-0.907348,-0.859617],[-0.906566,-0.823894],[-0.875419,-0.789192],[-0.790757,-0.755415],[-0.788704,-0.722479],[-0.74536,-0.690309],[-0.669449,-0.658838],[-0.638434,-0.628006],[-0.622424,-0.59776],[-0.58923,-0.568051],[-0.543099,-0.538836],[-0.542319,-0.510073],[-0.537503,-0.481727],[-0.521596,-0.453762],[-0.519476,-0.426148],[-0.485259,-0.398855],[-0.470039,-0.371856],[-0.453386,-0.345126],[-0.439866,-0.318639],[-0.432617,-0.292375],[-0.411565,-0.266311],[-0.40773,-0.240426],[-0.36799,-0.214702],[-0.338823,-0.189118],[-0.327249,-0.163658],[-0.272407,-0.138304],[-0.269535,-0.113039],[-0.259332,-0.0878448],[-0.23527,-0.0627068],[-0.137928,-0.0376083],[-0.0566709,-0.0125335],[-0.0351973,0.0125335],[-0.0343283,0.0376083],[-0.029616,0.0627068],[-0.0217279,0.0878448],[-0.00409659,0.113039],[0.0208818,0.138304],[0.0702065,0.163658],[0.11108,0.189118],[0.146868,0.214702],[0.26775,0.240426],[0.301918,0.266311],[0.423232,0.292375],[0.461082,0.318639],[0.465919,0.345126],[0.475425,0.371856],[0.490331,0.398855],[0.549439,0.426148],[0.562833,0.453762],[0.576125,0.481727],[0.59202,0.510073],[0.59922,0.538836],[0.618319,0.568051],[0.623854,0.59776],[0.660021,0.628006],[0.661002,0.658838],[0.677663,0.690309],[0.711148,0.722479],[0.722044,0.755415],[0.767137,0.789192],[0.773121,0.823894],[0.779572,0.859617],[0.824993,0.896473],[0.858269,0.934589],[0.858611,0.974114],[0.888798,1.01522],[0.943326,1.05812],[1.13848,1.10306],[1.14842,1.15035],[1.16322,1.20036],[1.30115,1.25357],[1.34856,1.31058],[1.40895,1.3722],[1.4282,1.43953],[1.45019,1.5141],[1.45919,1.59819],[1.48031,1.6954],[1.6948,1.81191],[1.89326,1.95996],[1.94606,2.17009],[3.02799,2.57583]] color=blue fillStyle=solid lineStyle=solid pointStyle=bullet lineWidth=1] Henry graph = class=Graph name=Henry plot implementation=class=GraphImplementation name=Henry plot title=Henry plot xTitle=Sample yTitle=Standard normal quantiles axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Henry line implementation=class=Curve name=Henry line derived from class=DrawableImplementation name=Henry line legend=Henry line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.72106,-2.71811],[2.59603,2.63247]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-2.72106,-2.57583],[-2.26914,-2.17009],[-2.15135,-1.95996],[-1.98318,-1.81191],[-1.84225,-1.6954],[-1.5599,-1.59819],[-1.42826,-1.5141],[-1.329,-1.43953],[-1.32783,-1.3722],[-1.31457,-1.31058],[-1.22323,-1.25357],[-1.19788,-1.20036],[-1.17253,-1.15035],[-1.14144,-1.10306],[-1.12629,-1.05812],[-1.09981,-1.01522],[-1.09669,-0.974114],[-1.05029,-0.934589],[-1.03768,-0.896473],[-1.01157,-0.859617],[-0.908343,-0.823894],[-0.843501,-0.789192],[-0.661749,-0.755415],[-0.612136,-0.722479],[-0.603543,-0.690309],[-0.5553,-0.658838],[-0.552396,-0.628006],[-0.476214,-0.59776],[-0.456634,-0.568051],[-0.45413,-0.538836],[-0.451449,-0.510073],[-0.421805,-0.481727],[-0.412087,-0.453762],[-0.402727,-0.426148],[-0.398957,-0.398855],[-0.390626,-0.371856],[-0.343091,-0.345126],[-0.314242,-0.318639],[-0.312877,-0.292375],[-0.311655,-0.266311],[-0.306869,-0.240426],[-0.2971,-0.214702],[-0.290709,-0.189118],[-0.240171,-0.163658],[-0.189811,-0.138304],[-0.171826,-0.113039],[-0.155242,-0.0878448],[-0.0439957,-0.0627068],[-0.0361247,-0.0376083],[-0.0268917,-0.0125335],[0.0140339,0.0125335],[0.0157415,0.0376083],[0.0332655,0.0627068],[0.0844715,0.0878448],[0.137958,0.113039],[0.141706,0.138304],[0.149855,0.163658],[0.184323,0.189118],[0.189723,0.214702],[0.211378,0.240426],[0.237096,0.266311],[0.288142,0.292375],[0.371376,0.318639],[0.403674,0.345126],[0.408217,0.371856],[0.416132,0.398855],[0.43319,0.426148],[0.509255,0.453762],[0.566469,0.481727],[0.576051,0.510073],[0.624386,0.538836],[0.638385,0.568051],[0.657798,0.59776],[0.691288,0.628006],[0.712298,0.658838],[0.719911,0.690309],[0.727195,0.722479],[0.765645,0.755415],[0.812135,0.789192],[0.834452,0.823894],[0.839941,0.859617],[0.870097,0.896473],[0.897854,0.934589],[0.90054,0.974114],[0.904859,1.01522],[1.02238,1.05812],[1.11103,1.10306],[1.1986,1.15035],[1.19865,1.20036],[1.22242,1.25357],[1.25989,1.31058],[1.30628,1.3722],[1.33729,1.43953],[1.35707,1.5141],[1.40508,1.59819],[1.44503,1.6954],[1.4814,1.81191],[1.57857,1.95996],[2.24097,2.17009],[2.59603,2.57583]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] sampleSampleClouds = class=Graph name=two samples clouds implementation=class=GraphImplementation name=two samples clouds title=two samples clouds xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Sample1 Cloud implementation=class=Cloud name=Sample1 Cloud derived from class=DrawableImplementation name=Sample1 Cloud legend=Sample1 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[0.125995,0.396485],[4.79647,5.31639],[2.7809,2.24156],[2.28656,0.917983],[3.06995,2.5644],[4.59103,1.74305],[1.17023,2.85021],[2.87343,5.3031],[2.75024,2.87268],[2.10065,2.47143],[-1.08635,1.00465],[0.111691,1.59067],[4.68812,2.8636],[4.48721,5.91133],[3.154,0.498338],[3.47523,4.34622],[4.56839,5.48031],[2.28194,1.02572],[5.03573,4.95959],[4.81469,4.88366],[5.35656,6.77948],[7.1498,7.46774],[1.88928,2.15046],[3.28794,3.76987],[3.47383,4.03007],[2.50342,4.06663],[4.23935,0.797167],[5.33727,5.01021],[6.78542,5.86033],[5.50064,4.1988],[0.548584,0.0605662],[4.1418,4.06827],[-0.453363,0.15508],[2.98582,3.10026],[1.04793,0.816595],[4.26934,2.87834],[0.723509,1.31047],[4.6942,2.82951],[1.41884,3.63874],[1.77554,4.22767],[2.41729,1.81301],[1.76518,3.5559],[3.92257,4.18364],[5.73461,3.06881],[5.20234,5.34215],[0.269983,1.14949],[4.25189,5.25888],[2.06829,0.284247],[2.98556,1.8117],[-0.480938,-0.510648],[1.89559,1.3775],[2.17407,3.27994],[3.93839,3.22408],[1.6679,2.32191],[6.38088,5.48427],[3.28824,2.73779],[3.51249,1.84904],[1.58842,0.986609],[1.06696,1.99225],[9.31916,7.73362],[6.11734,3.59893],[4.19271,5.52573],[5.80213,6.61698],[5.99904,6.66261],[3.73223,4.05122],[2.65691,3.59662],[0.773285,-0.918796],[3.55073,3.87118],[2.87544,5.51578],[4.89315,4.77843],[2.8622,2.07462],[4.76301,2.87188],[-0.783026,0.00111393],[0.919508,3.30109],[3.53173,3.56439],[2.7159,4.31507],[2.57773,2.65781],[3.03531,3.05287],[2.59975,2.76767],[0.575533,1.82905],[0.26466,-1.14015],[3.30014,4.17267],[3.50984,3.89338],[4.53367,3.95305],[1.04601,0.554355],[2.72001,2.55955],[0.926859,0.654482],[0.876114,0.317103],[2.73742,0.649595],[0.143648,2.87155],[4.59405,3.37201],[2.3908,-1.06978],[2.11911,1.83973],[1.23851,0.649946],[3.64466,1.26172],[3.18641,2.34112],[1.62681,1.36271],[3.07402,1.40221],[0.788444,1.13017],[5.88913,5.62767]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Sample2 Cloud implementation=class=Cloud name=Sample2 Cloud derived from class=DrawableImplementation name=Sample2 Cloud legend=Sample2 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=50 dimension=2 description=[X0,X1] data=[[6.11939,4.66502],[-0.14883,1.64135],[5.33757,4.51709],[2.17902,1.04506],[-3.34117,-2.59713],[-1.00666,1.83865],[4.64126,1.30526],[0.299961,0.647409],[3.03486,3.4869],[2.54481,-0.792723],[0.724529,-0.00214369],[5.79534,3.03009],[-0.587514,-2.56561],[1.93916,4.38621],[3.16266,1.1275],[2.98221,0.474553],[4.77853,6.5724],[8.12294,6.76323],[0.409864,2.86013],[4.64744,4.59414],[2.77519,2.55403],[3.18857,4.13313],[5.81632,8.5257],[-0.0526846,-0.41716],[3.75004,3.94083],[-1.5274,0.843844],[1.1443,1.96204],[6.35878,3.42754],[5.49784,1.76964],[3.41134,3.61858],[0.718236,0.0457155],[10.082,11.651],[1.82713,1.23992],[2.32166,2.61151],[0.174519,2.56961],[6.12118,5.06728],[-2.56717,-3.05655],[0.421619,0.467957],[2.44355,4.7366],[4.40465,3.84072],[-2.16488,-1.63171],[0.953737,-2.42865],[1.68169,-0.791276],[1.59988,0.95993],[-0.505599,0.640056],[5.35939,4.34485],[-1.14346,-0.639716],[3.5706,3.55972],[-2.90112,-1.25623],[4.81717,4.542]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] sampleDistributionClouds = class=Graph name=two samples clouds implementation=class=GraphImplementation name=two samples clouds title=two samples clouds xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Sample Cloud implementation=class=Cloud name=Sample Cloud derived from class=DrawableImplementation name=Sample Cloud legend=Sample Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[0.125995,0.396485],[4.79647,5.31639],[2.7809,2.24156],[2.28656,0.917983],[3.06995,2.5644],[4.59103,1.74305],[1.17023,2.85021],[2.87343,5.3031],[2.75024,2.87268],[2.10065,2.47143],[-1.08635,1.00465],[0.111691,1.59067],[4.68812,2.8636],[4.48721,5.91133],[3.154,0.498338],[3.47523,4.34622],[4.56839,5.48031],[2.28194,1.02572],[5.03573,4.95959],[4.81469,4.88366],[5.35656,6.77948],[7.1498,7.46774],[1.88928,2.15046],[3.28794,3.76987],[3.47383,4.03007],[2.50342,4.06663],[4.23935,0.797167],[5.33727,5.01021],[6.78542,5.86033],[5.50064,4.1988],[0.548584,0.0605662],[4.1418,4.06827],[-0.453363,0.15508],[2.98582,3.10026],[1.04793,0.816595],[4.26934,2.87834],[0.723509,1.31047],[4.6942,2.82951],[1.41884,3.63874],[1.77554,4.22767],[2.41729,1.81301],[1.76518,3.5559],[3.92257,4.18364],[5.73461,3.06881],[5.20234,5.34215],[0.269983,1.14949],[4.25189,5.25888],[2.06829,0.284247],[2.98556,1.8117],[-0.480938,-0.510648],[1.89559,1.3775],[2.17407,3.27994],[3.93839,3.22408],[1.6679,2.32191],[6.38088,5.48427],[3.28824,2.73779],[3.51249,1.84904],[1.58842,0.986609],[1.06696,1.99225],[9.31916,7.73362],[6.11734,3.59893],[4.19271,5.52573],[5.80213,6.61698],[5.99904,6.66261],[3.73223,4.05122],[2.65691,3.59662],[0.773285,-0.918796],[3.55073,3.87118],[2.87544,5.51578],[4.89315,4.77843],[2.8622,2.07462],[4.76301,2.87188],[-0.783026,0.00111393],[0.919508,3.30109],[3.53173,3.56439],[2.7159,4.31507],[2.57773,2.65781],[3.03531,3.05287],[2.59975,2.76767],[0.575533,1.82905],[0.26466,-1.14015],[3.30014,4.17267],[3.50984,3.89338],[4.53367,3.95305],[1.04601,0.554355],[2.72001,2.55955],[0.926859,0.654482],[0.876114,0.317103],[2.73742,0.649595],[0.143648,2.87155],[4.59405,3.37201],[2.3908,-1.06978],[2.11911,1.83973],[1.23851,0.649946],[3.64466,1.26172],[3.18641,2.34112],[1.62681,1.36271],[3.07402,1.40221],[0.788444,1.13017],[5.88913,5.62767]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Model Cloud implementation=class=Cloud name=Model Cloud derived from class=DrawableImplementation name=Model Cloud legend=Model Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[3.22616,2.99664],[2.36926,2.78758],[2.0286,2.99392],[2.60573,2.88631],[1.60212,1.9084],[1.22444,1.09644],[3.15314,1.85107],[2.12036,1.81522],[1.58454,2.06859],[2.62934,2.69642],[3.64435,4.12525],[1.44717,1.01606],[4.15237,3.71289],[2.30326,1.6362],[1.61847,1.18326],[1.22582,2.01269],[2.91986,3.4707],[2.80315,3.60097],[1.95101,1.11232],[4.5712,3.23372],[3.18009,2.15677],[2.31362,3.74129],[2.03012,1.64308],[2.48915,2.45809],[0.745196,0.559434],[2.13975,1.74921],[3.05883,3.92461],[3.84049,3.86928],[2.48193,2.46363],[1.48631,2.31057],[2.37724,2.29558],[3.9058,3.68352],[3.51776,3.81414],[4.62309,3.20313],[4.41107,3.72924],[1.79201,1.43159],[2.41552,2.38609],[1.74585,2.71099],[2.23746,2.54966],[0.616716,1.69501],[2.42882,1.49552],[3.57961,3.85467],[1.73076,0.900856],[0.00801832,0.742103],[4.04502,3.38076],[4.86899,3.90332],[2.39618,1.82563],[3.48731,3.08216],[1.15496,2.06604],[3.42729,3.14874],[2.03839,3.14147],[3.21246,3.62797],[2.01622,2.0083],[3.16201,2.61035],[2.47305,1.70934],[2.88692,2.90133],[2.03231,1.81734],[2.88446,2.96425],[1.92179,1.23796],[3.36497,3.75699],[2.82953,2.78835],[2.64117,2.58932],[2.77118,2.48688],[3.26095,3.12984],[2.20455,2.34755],[1.63619,2.5509],[3.90946,4.03638],[2.27943,3.07617],[1.91626,1.27466],[2.26407,1.93117],[4.50508,3.46711],[1.52653,1.83045],[2.96603,1.43042],[1.8242,1.69981],[3.11558,3.56023],[2.75478,2.59968],[3.24188,3.04341],[1.26964,0.638641],[1.98077,3.22994],[1.34807,2.19242],[2.66999,2.57733],[2.07666,1.77812],[2.23985,1.43041],[3.65734,2.71519],[2.25788,1.25041],[2.72435,2.38079],[3.39482,3.573],[2.25102,2.35642],[1.6754,2.33528],[0.854861,0.99578],[3.57257,3.18922],[3.51541,3.10622],[4.23504,2.9586],[1.92961,1.66273],[2.89719,2.54382],[1.64644,1.84134],[2.20045,2.53086],[2.53398,2.27003],[3.37714,3.35942],[2.76967,2.19486]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] LinearModelV = class=Graph name=original sample versus Linear Model one implementation=class=GraphImplementation name=original sample versus Linear Model one title=original sample versus Linear Model one xTitle=x yTitle=y axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Original Sample data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[2.35348,1.61988],[-0.345352,0.300063],[0.759291,0.4903],[2.33854,2.42685],[2.80997,3.9429],[5.26842,5.00578],[1.76486,3.77815],[5.8347,5.08733],[2.07379,0.759202],[-0.702773,1.49652],[2.23238,2.22273],[1.06757,5.14862],[1.57835,1.60292],[2.54716,2.66877],[4.84242,4.52432],[3.20717,3.46511],[1.66413,2.07969],[2.70604,2.43883],[3.97,4.01763],[2.48088,2.59074],[-0.992644,-1.07719],[3.48897,1.06535],[4.10799,2.83146],[5.20991,5.40861],[3.08712,2.35779],[4.91041,6.26539],[2.15957,1.09995],[1.86435,1.33292],[1.6566,1.25041],[3.10442,3.765],[1.39179,0.480552],[3.04153,4.67688],[4.45338,5.65779],[6.99089,5.69948],[3.53205,5.74312],[4.97446,5.0682],[3.44751,2.38976],[1.23929,-0.0712617],[5.95306,5.9472],[1.76679,1.68885],[7.44812,7.67935],[5.16697,5.22853],[0.897754,1.02241],[3.47266,4.43423],[1.75377,0.733864],[2.34915,3.3501],[0.562274,1.31424],[7.03681,7.14045],[7.98997,7.95578],[0.823848,0.873685],[8.27642,6.42599],[1.70921,1.43897],[5.63033,5.56252],[3.45285,3.77754],[4.4876,2.51139],[3.24978,3.80901],[2.79445,3.06571],[2.37941,2.58041],[0.807274,0.882969],[3.77498,1.8904],[1.85207,1.96394],[3.46083,1.73823],[1.03197,2.82287],[1.73195,2.03147],[4.34548,3.80432],[4.00859,2.18395],[2.8376,3.43655],[5.85449,5.41832],[1.2585,1.30968],[3.27921,4.47618],[3.06118,2.03438],[2.45223,1.50183],[3.02413,2.99243],[4.07402,3.11666],[1.43511,2.85196],[2.16514,1.59798],[7.04589,3.39612],[3.79733,5.35823],[3.67142,4.66872],[3.54107,2.7348],[1.65397,-0.12904],[7.17366,5.26945],[2.73976,-1.10383],[4.42864,5.55468],[4.07511,4.42013],[5.09188,5.70304],[5.03904,2.48861],[1.55275,1.49315],[5.54553,5.16195],[4.3312,4.84245],[1.57565,0.690944],[1.39588,-0.610908],[2.4315,1.62976],[1.23611,1.82961],[3.2487,4.19558],[1.73407,2.19119],[2.96831,3.57648],[2.55407,3.70103],[4.12141,3.16274],[5.35568,3.85421]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Unnamed LinearModel visualTest data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-0.992644,-0.397841],[-0.702773,-0.158624],[-0.345352,0.136339],[0.562274,0.88536],[0.759291,1.04795],[0.807274,1.08755],[0.823848,1.10122],[0.897754,1.16222],[1.03197,1.27298],[1.06757,1.30236],[1.23611,1.44145],[1.23929,1.44407],[1.2585,1.45992],[1.39179,1.56992],[1.39588,1.5733],[1.43511,1.60567],[1.55275,1.70275],[1.57565,1.72165],[1.57835,1.72388],[1.65397,1.78629],[1.6566,1.78845],[1.66413,1.79467],[1.70921,1.83187],[1.73195,1.85064],[1.73407,1.85239],[1.75377,1.86865],[1.76486,1.87779],[1.76679,1.87939],[1.85207,1.94977],[1.86435,1.9599],[2.07379,2.13274],[2.15957,2.20354],[2.16514,2.20813],[2.23238,2.26362],[2.33854,2.35123],[2.34915,2.35999],[2.35348,2.36356],[2.37941,2.38496],[2.4315,2.42795],[2.45223,2.44505],[2.48088,2.46869],[2.54716,2.5234],[2.55407,2.5291],[2.70604,2.65451],[2.73976,2.68234],[2.79445,2.72747],[2.80997,2.74028],[2.8376,2.76308],[2.96831,2.87095],[3.02413,2.91702],[3.04153,2.93138],[3.06118,2.94759],[3.08712,2.96899],[3.10442,2.98328],[3.20717,3.06807],[3.2487,3.10234],[3.24978,3.10323],[3.27921,3.12752],[3.44751,3.26641],[3.45285,3.27082],[3.46083,3.27741],[3.47266,3.28716],[3.48897,3.30062],[3.53205,3.33618],[3.54107,3.34363],[3.67142,3.45119],[3.77498,3.53666],[3.79733,3.5551],[3.97,3.6976],[4.00859,3.72944],[4.07402,3.78344],[4.07511,3.78434],[4.10799,3.81148],[4.12141,3.82255],[4.3312,3.99568],[4.34548,4.00746],[4.42864,4.07609],[4.45338,4.09651],[4.4876,4.12475],[4.84242,4.41756],[4.91041,4.47367],[4.97446,4.52653],[5.03904,4.57983],[5.09188,4.62344],[5.16697,4.68541],[5.20991,4.72084],[5.26842,4.76913],[5.35568,4.84113],[5.54553,4.99781],[5.63033,5.06779],[5.8347,5.23645],[5.85449,5.25278],[5.95306,5.33412],[6.99089,6.1906],[7.03681,6.22849],[7.04589,6.23599],[7.17366,6.34143],[7.44812,6.56793],[7.98997,7.01509],[8.27642,7.25149]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] LinearModelR = class=Graph name=residual(i) versus residual(i-1) implementation=class=GraphImplementation name=residual(i) versus residual(i-1) title=residual(i) versus residual(i-1) xTitle=redidual(i-1) yTitle=residual(i) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed LinearModel residual Test implementation=class=Cloud name=Unnamed LinearModel residual Test derived from class=DrawableImplementation name=Unnamed LinearModel residual Test legend=Unnamed LinearModel residual Test data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=99 dimension=2 data=[[-0.743679,0.163724],[0.163724,-0.55765],[-0.55765,0.0756241],[0.0756241,1.20263],[1.20263,0.236659],[0.236659,1.90035],[1.90035,-0.149117],[-0.149117,-1.37354],[-1.37354,1.65515],[1.65515,-0.0408969],[-0.0408969,3.84626],[3.84626,-0.120962],[-0.120962,0.14537],[0.14537,0.106759],[0.106759,0.397036],[0.397036,0.285013],[0.285013,-0.215681],[-0.215681,0.320028],[0.320028,0.12205],[0.12205,-0.679351],[-0.679351,-2.23528],[-2.23528,-0.980018],[-0.980018,0.687767],[0.687767,-0.61121],[-0.61121,1.79172],[1.79172,-1.10359],[-1.10359,-0.626986],[-0.626986,-0.538046],[-0.538046,0.781724],[0.781724,-1.08937],[-1.08937,1.7455],[1.7455,1.56128],[1.56128,-0.491122],[-0.491122,2.40694],[2.40694,0.541672],[0.541672,-0.87665],[-0.87665,-1.51533],[-1.51533,0.613076],[0.613076,-0.190545],[-0.190545,1.11142],[1.11142,0.543129],[0.543129,-0.13981],[-0.13981,1.14706],[1.14706,-1.13478],[-1.13478,0.990114],[0.990114,0.428881],[0.428881,0.911957],[0.911957,0.940693],[0.940693,-0.22754],[-0.22754,-0.825494],[-0.825494,-0.392899],[-0.392899,0.494734],[0.494734,0.506727],[0.506727,-1.61336],[-1.61336,0.705779],[0.705779,0.338239],[0.338239,0.195454],[0.195454,-0.204578],[-0.204578,-1.64626],[-1.64626,0.014172],[0.014172,-1.53917],[-1.53917,1.54989],[1.54989,0.180833],[0.180833,-0.203144],[-0.203144,-1.5455],[-1.5455,0.673472],[0.673472,0.165535],[0.165535,-0.15024],[-0.15024,1.34866],[1.34866,-0.913214],[-0.913214,-0.943223],[-0.943223,0.0754082],[0.0754082,-0.666784],[-0.666784,1.24629],[1.24629,-0.610156],[-0.610156,-2.83987],[-2.83987,1.80313],[1.80313,1.21753],[1.21753,-0.608824],[-0.608824,-1.91533],[-1.91533,-1.07198],[-1.07198,-3.78617],[-3.78617,1.47859],[1.47859,0.635792],[0.635792,1.0796],[1.0796,-2.09121],[-2.09121,-0.209597],[-0.209597,0.164144],[0.164144,0.846765],[0.846765,-1.0307],[-1.0307,-2.1842],[-2.1842,-0.798189],[-0.798189,0.388164],[0.388164,1.09324],[1.09324,0.338797],[0.338797,0.705525],[0.705525,1.17193],[1.17193,-0.659809],[-0.659809,-0.986923]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] cobwebValue = class=Graph name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] implementation=class=GraphImplementation name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] title=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] xTitle= yTitle= axes=OFF grid=OFF legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,27],[1,27],[2,89],[3,64],[4,19],[5,65],[6,47]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,41],[1,26],[2,27],[3,76],[4,5],[5,90],[6,42]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,31],[1,43],[2,98],[3,33],[4,78],[5,74],[6,58]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,5],[1,21],[2,34],[3,70],[4,58],[5,99],[6,34]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,33],[1,9],[2,4],[3,0],[4,42],[5,46],[6,41]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,21],[1,92],[2,69],[3,36],[4,44],[5,94],[6,80]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,39],[1,29],[2,24],[3,73],[4,50],[5,79],[6,38]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,81],[1,7],[2,37],[3,68],[4,67],[5,56],[6,59]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,48],[1,89],[2,1],[3,35],[4,8],[5,51],[6,74]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,11],[1,64],[2,8],[3,42],[4,92],[5,18],[6,97]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,47],[1,24],[2,86],[3,91],[4,52],[5,33],[6,66]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,92],[1,95],[2,18],[3,74],[4,93],[5,80],[6,3]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,62],[1,69],[2,47],[3,98],[4,81],[5,25],[6,22]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,29],[1,10],[2,67],[3,27],[4,23],[5,97],[6,30]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,61],[1,8],[2,81],[3,29],[4,80],[5,24],[6,1]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,89],[1,61],[2,87],[3,1],[4,28],[5,2],[6,17]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,86],[1,51],[2,6],[3,5],[4,1],[5,52],[6,78]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,51],[1,28],[2,44],[3,28],[4,10],[5,11],[6,98]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,0],[1,62],[2,58],[3,83],[4,11],[5,91],[6,40]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,45],[1,45],[2,80],[3,48],[4,0],[5,3],[6,31]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,93],[1,15],[2,92],[3,37],[4,70],[5,93],[6,24]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,57],[1,84],[2,19],[3,75],[4,73],[5,45],[6,5]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,69],[1,85],[2,70],[3,86],[4,18],[5,48],[6,46]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,37],[1,41],[2,79],[3,49],[4,82],[5,40],[6,53]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,13],[1,87],[2,97],[3,19],[4,46],[5,84],[6,51]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,32],[1,14],[2,5],[3,82],[4,14],[5,73],[6,25]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,24],[1,19],[2,91],[3,46],[4,99],[5,5],[6,44]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,50],[1,78],[2,95],[3,15],[4,47],[5,13],[6,82]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,59],[1,73],[2,22],[3,39],[4,27],[5,95],[6,57]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,26],[1,55],[2,9],[3,22],[4,33],[5,63],[6,20]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,60],[1,94],[2,48],[3,65],[4,91],[5,31],[6,65]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,88],[1,17],[2,0],[3,56],[4,39],[5,68],[6,4]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,65],[1,42],[2,76],[3,45],[4,63],[5,38],[6,81]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,52],[1,0],[2,33],[3,18],[4,96],[5,70],[6,56]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,3],[1,97],[2,99],[3,78],[4,34],[5,55],[6,13]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,98],[1,58],[2,3],[3,2],[4,97],[5,41],[6,69]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,77],[1,4],[2,56],[3,69],[4,68],[5,20],[6,39]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,25],[1,68],[2,64],[3,11],[4,55],[5,29],[6,60]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,2],[1,54],[2,93],[3,62],[4,65],[5,32],[6,43]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,90],[1,93],[2,60],[3,13],[4,76],[5,61],[6,7]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,91],[1,66],[2,83],[3,38],[4,86],[5,57],[6,33]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,73],[1,86],[2,65],[3,99],[4,66],[5,7],[6,45]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,79],[1,88],[2,88],[3,14],[4,72],[5,47],[6,12]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,20],[1,18],[2,40],[3,63],[4,24],[5,88],[6,68]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,82],[1,5],[2,51],[3,61],[4,95],[5,53],[6,96]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,74],[1,80],[2,28],[3,32],[4,16],[5,17],[6,67]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,78],[1,67],[2,72],[3,87],[4,22],[5,6],[6,21]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,18],[1,31],[2,74],[3,43],[4,9],[5,78],[6,63]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,96],[1,48],[2,45],[3,47],[4,74],[5,62],[6,54]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,36],[1,13],[2,26],[3,8],[4,56],[5,16],[6,55]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,1],[1,33],[2,75],[3,34],[4,59],[5,30],[6,29]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,84],[1,83],[2,35],[3,95],[4,36],[5,86],[6,61]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,44],[1,96],[2,23],[3,59],[4,71],[5,58],[6,28]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,54],[1,79],[2,85],[3,44],[4,4],[5,4],[6,48]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,56],[1,11],[2,38],[3,93],[4,12],[5,69],[6,77]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,34],[1,81],[2,63],[3,72],[4,87],[5,37],[6,27]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,87],[1,12],[2,17],[3,97],[4,35],[5,14],[6,9]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,10],[1,38],[2,66],[3,67],[4,84],[5,92],[6,14]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,15],[1,34],[2,96],[3,85],[4,79],[5,67],[6,16]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,19],[1,16],[2,16],[3,90],[4,89],[5,1],[6,49]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,66],[1,35],[2,15],[3,84],[4,31],[5,34],[6,10]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,97],[1,99],[2,53],[3,17],[4,57],[5,21],[6,32]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,14],[1,3],[2,42],[3,26],[4,85],[5,50],[6,26]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,22],[1,30],[2,73],[3,50],[4,40],[5,89],[6,72]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,12],[1,82],[2,29],[3,55],[4,41],[5,42],[6,52]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,7],[1,57],[2,14],[3,41],[4,7],[5,49],[6,95]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,70],[1,53],[2,90],[3,81],[4,29],[5,76],[6,11]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,63],[1,36],[2,52],[3,51],[4,69],[5,27],[6,73]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,55],[1,1],[2,11],[3,71],[4,43],[5,9],[6,70]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,43],[1,56],[2,77],[3,25],[4,30],[5,0],[6,18]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,28],[1,50],[2,25],[3,77],[4,21],[5,64],[6,19]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,30],[1,37],[2,78],[3,40],[4,64],[5,81],[6,64]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,80],[1,22],[2,7],[3,79],[4,53],[5,12],[6,62]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,9],[1,90],[2,30],[3,89],[4,75],[5,22],[6,6]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,16],[1,63],[2,39],[3,57],[4,54],[5,19],[6,99]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,71],[1,25],[2,20],[3,4],[4,90],[5,96],[6,76]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,35],[1,75],[2,82],[3,80],[4,26],[5,75],[6,2]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,38],[1,40],[2,57],[3,21],[4,77],[5,28],[6,23]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,99],[1,77],[2,21],[3,24],[4,88],[5,71],[6,0]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,67],[1,72],[2,31],[3,53],[4,20],[5,36],[6,75]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,83],[1,20],[2,43],[3,16],[4,3],[5,85],[6,36]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,58],[1,59],[2,32],[3,20],[4,32],[5,39],[6,50]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,94],[1,52],[2,12],[3,58],[4,51],[5,10],[6,79]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,53],[1,76],[2,41],[3,66],[4,25],[5,83],[6,71]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,42],[1,60],[2,62],[3,12],[4,94],[5,66],[6,83]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,8],[1,6],[2,46],[3,52],[4,38],[5,8],[6,35]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,85],[1,91],[2,71],[3,88],[4,45],[5,72],[6,15]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,4],[1,2],[2,36],[3,94],[4,37],[5,15],[6,37]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,95],[1,65],[2,84],[3,23],[4,2],[5,54],[6,8]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,46],[1,74],[2,54],[3,10],[4,17],[5,43],[6,94]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,23],[1,49],[2,49],[3,54],[4,98],[5,35],[6,90]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,75],[1,46],[2,61],[3,30],[4,13],[5,77],[6,87]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,40],[1,70],[2,68],[3,96],[4,6],[5,82],[6,88]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,68],[1,23],[2,94],[3,9],[4,15],[5,87],[6,84]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,17],[1,47],[2,55],[3,92],[4,83],[5,98],[6,93]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,6],[1,71],[2,50],[3,7],[4,62],[5,59],[6,85]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,64],[1,98],[2,59],[3,3],[4,60],[5,26],[6,86]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,72],[1,32],[2,10],[3,6],[4,49],[5,44],[6,91]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,76],[1,39],[2,2],[3,60],[4,48],[5,23],[6,89]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,49],[1,44],[2,13],[3,31],[4,61],[5,60],[6,92]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[0,100]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0],[1,100]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0],[2,100]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X3 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4,0],[4,100]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X5 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[5,0],[5,100]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[6,0],[6,100]] color=black fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3] cobwebQuantile = class=Graph name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] implementation=class=GraphImplementation name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] title=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] xTitle= yTitle= axes=OFF grid=OFF legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,27],[1,27],[2,89],[3,64],[4,19],[5,65],[6,47]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,41],[1,26],[2,27],[3,76],[4,5],[5,90],[6,42]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,31],[1,43],[2,98],[3,33],[4,78],[5,74],[6,58]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,5],[1,21],[2,34],[3,70],[4,58],[5,99],[6,34]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,33],[1,9],[2,4],[3,0],[4,42],[5,46],[6,41]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,21],[1,92],[2,69],[3,36],[4,44],[5,94],[6,80]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,39],[1,29],[2,24],[3,73],[4,50],[5,79],[6,38]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,81],[1,7],[2,37],[3,68],[4,67],[5,56],[6,59]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,48],[1,89],[2,1],[3,35],[4,8],[5,51],[6,74]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,46],[1,74],[2,54],[3,10],[4,17],[5,43],[6,94]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,11],[1,64],[2,8],[3,42],[4,92],[5,18],[6,97]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,47],[1,24],[2,86],[3,91],[4,52],[5,33],[6,66]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,92],[1,95],[2,18],[3,74],[4,93],[5,80],[6,3]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,23],[1,49],[2,49],[3,54],[4,98],[5,35],[6,90]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,75],[1,46],[2,61],[3,30],[4,13],[5,77],[6,87]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,62],[1,69],[2,47],[3,98],[4,81],[5,25],[6,22]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,29],[1,10],[2,67],[3,27],[4,23],[5,97],[6,30]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,61],[1,8],[2,81],[3,29],[4,80],[5,24],[6,1]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,89],[1,61],[2,87],[3,1],[4,28],[5,2],[6,17]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,86],[1,51],[2,6],[3,5],[4,1],[5,52],[6,78]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,51],[1,28],[2,44],[3,28],[4,10],[5,11],[6,98]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,0],[1,62],[2,58],[3,83],[4,11],[5,91],[6,40]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,45],[1,45],[2,80],[3,48],[4,0],[5,3],[6,31]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,93],[1,15],[2,92],[3,37],[4,70],[5,93],[6,24]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,57],[1,84],[2,19],[3,75],[4,73],[5,45],[6,5]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,69],[1,85],[2,70],[3,86],[4,18],[5,48],[6,46]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,40],[1,70],[2,68],[3,96],[4,6],[5,82],[6,88]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,68],[1,23],[2,94],[3,9],[4,15],[5,87],[6,84]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,32],[1,14],[2,5],[3,82],[4,14],[5,73],[6,25]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,24],[1,19],[2,91],[3,46],[4,99],[5,5],[6,44]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,50],[1,78],[2,95],[3,15],[4,47],[5,13],[6,82]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,59],[1,73],[2,22],[3,39],[4,27],[5,95],[6,57]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,26],[1,55],[2,9],[3,22],[4,33],[5,63],[6,20]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,17],[1,47],[2,55],[3,92],[4,83],[5,98],[6,93]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,60],[1,94],[2,48],[3,65],[4,91],[5,31],[6,65]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,88],[1,17],[2,0],[3,56],[4,39],[5,68],[6,4]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,65],[1,42],[2,76],[3,45],[4,63],[5,38],[6,81]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,52],[1,0],[2,33],[3,18],[4,96],[5,70],[6,56]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,3],[1,97],[2,99],[3,78],[4,34],[5,55],[6,13]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,98],[1,58],[2,3],[3,2],[4,97],[5,41],[6,69]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,77],[1,4],[2,56],[3,69],[4,68],[5,20],[6,39]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,25],[1,68],[2,64],[3,11],[4,55],[5,29],[6,60]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,2],[1,54],[2,93],[3,62],[4,65],[5,32],[6,43]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,90],[1,93],[2,60],[3,13],[4,76],[5,61],[6,7]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,6],[1,71],[2,50],[3,7],[4,62],[5,59],[6,85]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,64],[1,98],[2,59],[3,3],[4,60],[5,26],[6,86]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,91],[1,66],[2,83],[3,38],[4,86],[5,57],[6,33]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,73],[1,86],[2,65],[3,99],[4,66],[5,7],[6,45]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,79],[1,88],[2,88],[3,14],[4,72],[5,47],[6,12]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,20],[1,18],[2,40],[3,63],[4,24],[5,88],[6,68]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,82],[1,5],[2,51],[3,61],[4,95],[5,53],[6,96]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,74],[1,80],[2,28],[3,32],[4,16],[5,17],[6,67]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,78],[1,67],[2,72],[3,87],[4,22],[5,6],[6,21]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,18],[1,31],[2,74],[3,43],[4,9],[5,78],[6,63]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,96],[1,48],[2,45],[3,47],[4,74],[5,62],[6,54]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,36],[1,13],[2,26],[3,8],[4,56],[5,16],[6,55]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,1],[1,33],[2,75],[3,34],[4,59],[5,30],[6,29]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,84],[1,83],[2,35],[3,95],[4,36],[5,86],[6,61]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,44],[1,96],[2,23],[3,59],[4,71],[5,58],[6,28]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,54],[1,79],[2,85],[3,44],[4,4],[5,4],[6,48]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,56],[1,11],[2,38],[3,93],[4,12],[5,69],[6,77]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,34],[1,81],[2,63],[3,72],[4,87],[5,37],[6,27]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,87],[1,12],[2,17],[3,97],[4,35],[5,14],[6,9]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,10],[1,38],[2,66],[3,67],[4,84],[5,92],[6,14]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,72],[1,32],[2,10],[3,6],[4,49],[5,44],[6,91]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,15],[1,34],[2,96],[3,85],[4,79],[5,67],[6,16]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,19],[1,16],[2,16],[3,90],[4,89],[5,1],[6,49]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,66],[1,35],[2,15],[3,84],[4,31],[5,34],[6,10]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,97],[1,99],[2,53],[3,17],[4,57],[5,21],[6,32]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,14],[1,3],[2,42],[3,26],[4,85],[5,50],[6,26]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,22],[1,30],[2,73],[3,50],[4,40],[5,89],[6,72]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,7],[1,57],[2,14],[3,41],[4,7],[5,49],[6,95]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,70],[1,53],[2,90],[3,81],[4,29],[5,76],[6,11]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,63],[1,36],[2,52],[3,51],[4,69],[5,27],[6,73]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,55],[1,1],[2,11],[3,71],[4,43],[5,9],[6,70]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,43],[1,56],[2,77],[3,25],[4,30],[5,0],[6,18]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,28],[1,50],[2,25],[3,77],[4,21],[5,64],[6,19]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,30],[1,37],[2,78],[3,40],[4,64],[5,81],[6,64]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,80],[1,22],[2,7],[3,79],[4,53],[5,12],[6,62]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,9],[1,90],[2,30],[3,89],[4,75],[5,22],[6,6]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,76],[1,39],[2,2],[3,60],[4,48],[5,23],[6,89]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,16],[1,63],[2,39],[3,57],[4,54],[5,19],[6,99]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,71],[1,25],[2,20],[3,4],[4,90],[5,96],[6,76]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,35],[1,75],[2,82],[3,80],[4,26],[5,75],[6,2]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,38],[1,40],[2,57],[3,21],[4,77],[5,28],[6,23]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,99],[1,77],[2,21],[3,24],[4,88],[5,71],[6,0]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,67],[1,72],[2,31],[3,53],[4,20],[5,36],[6,75]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,83],[1,20],[2,43],[3,16],[4,3],[5,85],[6,36]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,94],[1,52],[2,12],[3,58],[4,51],[5,10],[6,79]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,53],[1,76],[2,41],[3,66],[4,25],[5,83],[6,71]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,42],[1,60],[2,62],[3,12],[4,94],[5,66],[6,83]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,8],[1,6],[2,46],[3,52],[4,38],[5,8],[6,35]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,85],[1,91],[2,71],[3,88],[4,45],[5,72],[6,15]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,4],[1,2],[2,36],[3,94],[4,37],[5,15],[6,37]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,49],[1,44],[2,13],[3,31],[4,61],[5,60],[6,92]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,95],[1,65],[2,84],[3,23],[4,2],[5,54],[6,8]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,37],[1,41],[2,79],[3,49],[4,82],[5,40],[6,53]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,13],[1,87],[2,97],[3,19],[4,46],[5,84],[6,51]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,12],[1,82],[2,29],[3,55],[4,41],[5,42],[6,52]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,58],[1,59],[2,32],[3,20],[4,32],[5,39],[6,50]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[0,100]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0],[1,100]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0],[2,100]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X3 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4,0],[4,100]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X5 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[5,0],[5,100]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[6,0],[6,100]] color=black fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3] KendallPlot1 = class=Graph name=Kendall Plot implementation=class=GraphImplementation name=Kendall Plot title=Kendall Plot xTitle=GumbelCopula yTitle=data 1 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[1,1]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0,0],[0.00444444,0],[0.00949495,0],[0.0153535,0],[0.0211111,0.010101],[0.0270707,0.010101],[0.0340404,0.010101],[0.0408081,0.020202],[0.0479798,0.020202],[0.0548485,0.020202],[0.0626263,0.020202],[0.07,0.030303],[0.0777778,0.030303],[0.0848485,0.040404],[0.0932323,0.040404],[0.100505,0.040404],[0.108586,0.040404],[0.114747,0.040404],[0.122727,0.0505051],[0.130202,0.0505051],[0.140505,0.0505051],[0.148889,0.0606061],[0.158081,0.0707071],[0.16596,0.0707071],[0.173939,0.0808081],[0.182323,0.0808081],[0.190808,0.0808081],[0.199091,0.0808081],[0.207879,0.0909091],[0.217071,0.0909091],[0.225354,0.0909091],[0.233636,0.111111],[0.24303,0.111111],[0.252323,0.121212],[0.261313,0.121212],[0.27202,0.121212],[0.282727,0.141414],[0.293636,0.141414],[0.30303,0.141414],[0.310404,0.151515],[0.319091,0.151515],[0.330404,0.161616],[0.340808,0.171717],[0.350404,0.171717],[0.359394,0.181818],[0.369596,0.181818],[0.38,0.181818],[0.391111,0.191919],[0.402626,0.191919],[0.413232,0.212121],[0.423737,0.222222],[0.433838,0.222222],[0.446465,0.232323],[0.45798,0.252525],[0.46697,0.272727],[0.479293,0.272727],[0.489697,0.272727],[0.500303,0.272727],[0.51101,0.282828],[0.520707,0.292929],[0.53,0.30303],[0.540808,0.323232],[0.551212,0.323232],[0.561717,0.333333],[0.574949,0.333333],[0.586566,0.343434],[0.597475,0.353535],[0.608889,0.353535],[0.620606,0.373737],[0.631515,0.393939],[0.642323,0.40404],[0.65303,0.40404],[0.664242,0.40404],[0.676566,0.414141],[0.687677,0.424242],[0.699697,0.464646],[0.710808,0.464646],[0.721919,0.474747],[0.733535,0.494949],[0.745657,0.505051],[0.759293,0.515152],[0.768788,0.535354],[0.779192,0.535354],[0.793434,0.555556],[0.807172,0.555556],[0.821818,0.555556],[0.835758,0.565657],[0.846768,0.59596],[0.859293,0.606061],[0.873737,0.636364],[0.884646,0.636364],[0.897475,0.656566],[0.91,0.717172],[0.921818,0.727273],[0.933939,0.727273],[0.946667,0.747475],[0.959091,0.858586],[0.972222,0.878788],[0.983838,0.878788],[0.997576,0.909091]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] KendallPlot2 = class=Graph name=Kendall Plot implementation=class=GraphImplementation name=Kendall Plot title=Kendall Plot xTitle=data 2 yTitle=data 1 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[1,1]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0,0],[0,0],[0.010101,0],[0.020202,0],[0.020202,0.010101],[0.020202,0.010101],[0.030303,0.010101],[0.030303,0.020202],[0.040404,0.020202],[0.040404,0.020202],[0.0505051,0.020202],[0.0606061,0.030303],[0.0707071,0.030303],[0.0707071,0.040404],[0.0808081,0.040404],[0.10101,0.040404],[0.10101,0.040404],[0.10101,0.040404],[0.111111,0.0505051],[0.111111,0.0505051],[0.121212,0.0505051],[0.141414,0.0606061],[0.141414,0.0707071],[0.171717,0.0707071],[0.171717,0.0808081],[0.181818,0.0808081],[0.181818,0.0808081],[0.191919,0.0808081],[0.20202,0.0909091],[0.212121,0.0909091],[0.222222,0.0909091],[0.222222,0.111111],[0.232323,0.111111],[0.242424,0.121212],[0.242424,0.121212],[0.262626,0.121212],[0.30303,0.141414],[0.323232,0.141414],[0.333333,0.141414],[0.333333,0.151515],[0.353535,0.151515],[0.353535,0.161616],[0.363636,0.171717],[0.363636,0.171717],[0.373737,0.181818],[0.373737,0.181818],[0.393939,0.181818],[0.40404,0.191919],[0.414141,0.191919],[0.414141,0.212121],[0.424242,0.222222],[0.424242,0.222222],[0.434343,0.232323],[0.454545,0.252525],[0.464646,0.272727],[0.464646,0.272727],[0.464646,0.272727],[0.494949,0.272727],[0.515152,0.282828],[0.525253,0.292929],[0.525253,0.30303],[0.525253,0.323232],[0.535354,0.323232],[0.555556,0.333333],[0.565657,0.333333],[0.575758,0.343434],[0.606061,0.353535],[0.616162,0.353535],[0.626263,0.373737],[0.636364,0.393939],[0.636364,0.40404],[0.646465,0.40404],[0.666667,0.40404],[0.69697,0.414141],[0.707071,0.424242],[0.717172,0.464646],[0.727273,0.464646],[0.727273,0.474747],[0.737374,0.494949],[0.757576,0.505051],[0.757576,0.515152],[0.767677,0.535354],[0.777778,0.535354],[0.79798,0.555556],[0.828283,0.555556],[0.838384,0.555556],[0.838384,0.565657],[0.848485,0.59596],[0.848485,0.606061],[0.858586,0.636364],[0.868687,0.636364],[0.888889,0.656566],[0.888889,0.717172],[0.919192,0.727273],[0.939394,0.727273],[0.949495,0.747475],[0.949495,0.858586],[0.959596,0.878788],[0.989899,0.878788],[1,0.909091]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] openturns-1.9/lib/test/t_VonMises_std.cxx000066400000000000000000000205021307543307100206330ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class VonMises for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public VonMises { public: TestObject() : VonMises(-0.5, 1.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object VonMises distribution(-0.5, 1.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; RandomGenerator::SetSeed(0); for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(2); PDFgrFD[0] = (VonMises(distribution.getMu() + eps, distribution.getKappa()).computePDF(point) - VonMises(distribution.getMu() - eps, distribution.getKappa()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (VonMises(distribution.getMu(), distribution.getKappa() + eps).computePDF(point) - VonMises(distribution.getMu(), distribution.getKappa() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(2); CDFgrFD[0] = (VonMises(distribution.getMu() + eps, distribution.getKappa()).computeCDF(point) - VonMises(distribution.getMu() - eps, distribution.getKappa()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (VonMises(distribution.getMu(), distribution.getKappa() + eps).computeCDF(point) - VonMises(distribution.getMu(), distribution.getKappa() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; VonMises::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; fullprint << "Circular mean=" << distribution.getCircularMean() << std::endl; fullprint << "Circular variance=" << distribution.getCircularVariance() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_VonMises_std.expout000066400000000000000000000116341307543307100213630ustar00rootroot00000000000000Testing class VonMises checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=VonMises name=VonMises dimension=1 mu=-0.5 kappa=1.5 streamObject(const T & anObject) class=VonMises name=VonMises dimension=1 mu=-0.5 kappa=1.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=VonMises name=VonMises dimension=1 mu=-0.5 kappa=1.5 Distribution VonMises(mu = -0.5, kappa=1.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[0.492446] oneSample first=class=Point name=Unnamed dimension=1 values=[-0.494608] last=class=Point name=Unnamed dimension=1 values=[0.388969] mean=class=Point name=Unnamed dimension=1 values=[-0.474891] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986948] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.160799] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.160799] log pdf=-2.23056 pdf =0.107468 pdf (FD)=0.107468 cdf=0.915928 ccdf=0.0840718 survival=0.0840718 Inverse survival=class=Point name=Unnamed dimension=1 values=[-2.1122] Survival(inverse survival)=0.95 characteristic function=(0.523156,-0.285801) log characteristic function=(-0.517291,-0.5) pdf gradient =class=Point name=Unnamed dimension=2 values=[0.160799,-0.0564635] pdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[0.160799,-0.0564635] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0815561,0.0925495] cdf gradient (FD)=class=Point name=Unnamed dimension=2 values=[-0.0815561,0.0925495] quantile=class=Point name=Unnamed dimension=1 values=[1.42908] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.71399] upper bound=class=Point name=Unnamed dimension=1 values=[1.71399] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(VonMises(mu = -0.5, kappa=1.5)) gradientImplementation=MinimumVolumeLevelSetGradient(VonMises(mu = -0.5, kappa=1.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(VonMises(mu = -0.5, kappa=1.5)) level=3.2363 beta=0.0393091 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.46547] upper bound=class=Point name=Unnamed dimension=1 values=[2.0656] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-3.14159] upper bound=class=Point name=Unnamed dimension=1 values=[1.42908] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2.1122] upper bound=class=Point name=Unnamed dimension=1 values=[3.14159] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[-0.427827] standard deviation=class=Point name=Unnamed dimension=1 values=[1.05959] skewness=class=Point name=Unnamed dimension=1 values=[0.410037] kurtosis=class=Point name=Unnamed dimension=1 values=[3.70254] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.12273] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[mu : -0.5, kappa : 1.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[-0.427827] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.30577] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[-1.03152] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[5.0989] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[-4.03982] Standard representative=VonMises(mu = -0.5, kappa=1.5) Circular mean=-0.5 Circular variance=0.403867 openturns-1.9/lib/test/t_Waarts_25_quadratic_terms.cxx000066400000000000000000000570671307543307100232540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts 25 quadratic terms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(26); inputFunction[0] = "R"; inputFunction[1] = "S01"; inputFunction[2] = "S02"; inputFunction[3] = "S03"; inputFunction[4] = "S04"; inputFunction[5] = "S05"; inputFunction[6] = "S06"; inputFunction[7] = "S07"; inputFunction[8] = "S08"; inputFunction[9] = "S09"; inputFunction[10] = "S10"; inputFunction[11] = "S11"; inputFunction[12] = "S12"; inputFunction[13] = "S13"; inputFunction[14] = "S14"; inputFunction[15] = "S15"; inputFunction[16] = "S16"; inputFunction[17] = "S17"; inputFunction[18] = "S18"; inputFunction[19] = "S19"; inputFunction[20] = "S20"; inputFunction[21] = "S21"; inputFunction[22] = "S22"; inputFunction[23] = "S23"; inputFunction[24] = "S24"; inputFunction[25] = "S25"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "R-(S01^2.0)/1.0-(S02^2.0)/2.0-(S03^2.0)/3.0-(S04^2.0)/4.0-(S05^2.0)/5.0-(S06^2.0)/6.0-(S07^2.0)/7.0-(S08^2.0)/8.0-(S09^2.0)/9.0-(S10^2.0)/10.0-(S11^2.0)/11.0-(S12^2.0)/12.0-(S13^2.0)/13.0-(S14^2.0)/14.0-(S15^2.0)/15.0-(S16^2.0)/16.0-(S17^2.0)/17.0-(S18^2.0)/18.0-(S19^2.0)/19.0-(S20^2.0)/20.0-(S21^2.0)/21.0-(S22^2.0)/22.0-(S23^2.0)/23.0-(S24^2.0)/24.0-(S25^2.0)/25.0"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.5; mean[1] = 0.2; mean[2] = 0.2; mean[3] = 0.2; mean[4] = 0.2; mean[5] = 0.2; mean[6] = 0.2; mean[7] = 0.2; mean[8] = 0.2; mean[9] = 0.2; mean[10] = 0.2; mean[11] = 0.2; mean[12] = 0.2; mean[13] = 0.2; mean[14] = 0.2; mean[15] = 0.2; mean[16] = 0.2; mean[17] = 0.2; mean[18] = 0.2; mean[19] = 0.2; mean[20] = 0.2; mean[21] = 0.2; mean[22] = 0.2; mean[23] = 0.2; mean[24] = 0.2; mean[25] = 0.2; Point sigma(dim, 0.0); sigma[0] = 0.1; sigma[1] = 0.1; sigma[2] = 0.1; sigma[3] = 0.1; sigma[4] = 0.1; sigma[5] = 0.1; sigma[6] = 0.1; sigma[7] = 0.1; sigma[8] = 0.1; sigma[9] = 0.1; sigma[10] = 0.1; sigma[11] = 0.1; sigma[12] = 0.1; sigma[13] = 0.1; sigma[14] = 0.1; sigma[15] = 0.1; sigma[16] = 0.1; sigma[17] = 0.1; sigma[18] = 0.1; sigma[19] = 0.1; sigma[20] = 0.1; sigma[21] = 0.1; sigma[22] = 0.1; sigma[23] = 0.1; sigma[24] = 0.1; sigma[25] = 0.1; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(8000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(8000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvAR2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_25_quadratic_terms.expout000066400000000000000000000527721307543307100237740ustar00rootroot0000000000000026 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.00176092 generalized reliability index =2.91809 ************************************************************************************************ standard space design point =-2.25858 standard space design point =1.64774 standard space design point =0.583504 standard space design point =0.354525 standard space design point =0.254611 standard space design point =0.198631 standard space design point =0.162831 standard space design point =0.137964 standard space design point =0.119687 standard space design point =0.105686 standard space design point =0.094617 standard space design point =0.0856472 standard space design point =0.0782307 standard space design point =0.0719963 standard space design point =0.0666823 standard space design point =0.0620987 standard space design point =0.0581048 standard space design point =0.0545937 standard space design point =0.0514825 standard space design point =0.048707 standard space design point =0.0462153 standard space design point =0.0439663 standard space design point =0.0419259 standard space design point =0.0400665 standard space design point =0.0383651 standard space design point =0.0368022 ************************************************************************************************ physical space design point =0.274142 physical space design point =0.364774 physical space design point =0.25835 physical space design point =0.235452 physical space design point =0.225461 physical space design point =0.219863 physical space design point =0.216283 physical space design point =0.213796 physical space design point =0.211969 physical space design point =0.210569 physical space design point =0.209462 physical space design point =0.208565 physical space design point =0.207823 physical space design point =0.2072 physical space design point =0.206668 physical space design point =0.20621 physical space design point =0.20581 physical space design point =0.205459 physical space design point =0.205148 physical space design point =0.204871 physical space design point =0.204622 physical space design point =0.204397 physical space design point =0.204193 physical space design point =0.204007 physical space design point =0.203837 physical space design point =0.20368 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.599064 importance factors =0.318846 importance factors =0.0399845 importance factors =0.0147604 importance factors =0.007613 importance factors =0.00463337 importance factors =0.00311369 importance factors =0.00223531 importance factors =0.00168227 importance factors =0.0013117 importance factors =0.00105134 importance factors =0.000861448 importance factors =0.000718717 importance factors =0.000608729 importance factors =0.000522186 importance factors =0.000452865 importance factors =0.000396486 importance factors =0.000350016 importance factors =0.00031126 importance factors =0.000278603 importance factors =0.000250828 importance factors =0.000227009 importance factors =0.000206427 importance factors =0.000188524 importance factors =0.000172852 importance factors =0.000159056 ************************************************************************************************ Hasofer reliability index =2.91809 ************************************************************************************************ Pf sensitivity =00-0.0437105 Pf sensitivity =010.0987236 Pf sensitivity =100.0318889 Pf sensitivity =110.0525447 Pf sensitivity =200.0112926 Pf sensitivity =210.0065893 Pf sensitivity =300.00686117 Pf sensitivity =310.00243246 Pf sensitivity =400.00492751 Pf sensitivity =410.0012546 Pf sensitivity =500.00384413 Pf sensitivity =510.000763564 Pf sensitivity =600.00315128 Pf sensitivity =610.000513125 Pf sensitivity =700.00267005 Pf sensitivity =710.000368371 Pf sensitivity =800.00231632 Pf sensitivity =810.000277233 Pf sensitivity =900.00204535 Pf sensitivity =910.000216164 Pf sensitivity =1000.00183114 Pf sensitivity =1010.000173257 Pf sensitivity =1100.00165754 Pf sensitivity =1110.000141964 Pf sensitivity =1200.00151401 Pf sensitivity =1210.000118442 Pf sensitivity =1300.00139335 Pf sensitivity =1310.000100316 Pf sensitivity =1400.00129051 Pf sensitivity =1418.60543e-05 Pf sensitivity =1500.00120181 Pf sensitivity =1517.46306e-05 Pf sensitivity =1600.00112451 Pf sensitivity =1616.53395e-05 Pf sensitivity =1700.00105656 Pf sensitivity =1715.76814e-05 Pf sensitivity =1800.000996349 Pf sensitivity =1815.12946e-05 Pf sensitivity =1900.000942632 Pf sensitivity =1914.59128e-05 Pf sensitivity =2000.000894412 Pf sensitivity =2014.13355e-05 Pf sensitivity =2100.000850884 Pf sensitivity =2113.74102e-05 Pf sensitivity =2200.000811397 Pf sensitivity =2213.40185e-05 Pf sensitivity =2300.000775412 Pf sensitivity =2313.10681e-05 Pf sensitivity =2400.000742484 Pf sensitivity =2412.84854e-05 Pf sensitivity =2500.000712238 Pf sensitivity =2512.62119e-05 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.00176092 generalized reliability index =2.91809 ************************************************************************************************ standard space design point =-2.25859 standard space design point =1.64772 standard space design point =0.583514 standard space design point =0.354528 standard space design point =0.254613 standard space design point =0.198632 standard space design point =0.162832 standard space design point =0.137965 standard space design point =0.119688 standard space design point =0.105686 standard space design point =0.0946176 standard space design point =0.0856477 standard space design point =0.0782312 standard space design point =0.0719968 standard space design point =0.0666827 standard space design point =0.0620991 standard space design point =0.0581052 standard space design point =0.0545939 standard space design point =0.0514828 standard space design point =0.0487072 standard space design point =0.0462156 standard space design point =0.0439665 standard space design point =0.0419261 standard space design point =0.0400667 standard space design point =0.0383652 standard space design point =0.0368024 ************************************************************************************************ physical space design point =0.274141 physical space design point =0.364772 physical space design point =0.258351 physical space design point =0.235453 physical space design point =0.225461 physical space design point =0.219863 physical space design point =0.216283 physical space design point =0.213797 physical space design point =0.211969 physical space design point =0.210569 physical space design point =0.209462 physical space design point =0.208565 physical space design point =0.207823 physical space design point =0.2072 physical space design point =0.206668 physical space design point =0.20621 physical space design point =0.205811 physical space design point =0.205459 physical space design point =0.205148 physical space design point =0.204871 physical space design point =0.204622 physical space design point =0.204397 physical space design point =0.204193 physical space design point =0.204007 physical space design point =0.203837 physical space design point =0.20368 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.59907 importance factors =0.318838 importance factors =0.0399858 importance factors =0.0147606 importance factors =0.00761312 importance factors =0.00463344 importance factors =0.00311373 importance factors =0.00223534 importance factors =0.00168229 importance factors =0.00131172 importance factors =0.00105135 importance factors =0.000861458 importance factors =0.000718725 importance factors =0.000608736 importance factors =0.000522191 importance factors =0.000452871 importance factors =0.00039649 importance factors =0.000350019 importance factors =0.000311264 importance factors =0.000278606 importance factors =0.00025083 importance factors =0.000227011 importance factors =0.00020643 importance factors =0.000188526 importance factors =0.000172854 importance factors =0.000159058 ************************************************************************************************ Hasofer reliability index =2.91809 ************************************************************************************************ Pf sensitivity =00-0.0437106 Pf sensitivity =010.0987243 Pf sensitivity =100.0318888 Pf sensitivity =110.0525438 Pf sensitivity =200.0112927 Pf sensitivity =210.00658944 Pf sensitivity =300.00686119 Pf sensitivity =310.00243249 Pf sensitivity =400.00492752 Pf sensitivity =410.00125461 Pf sensitivity =500.00384414 Pf sensitivity =510.000763572 Pf sensitivity =600.00315129 Pf sensitivity =610.00051313 Pf sensitivity =700.00267005 Pf sensitivity =710.000368374 Pf sensitivity =800.00231632 Pf sensitivity =810.000277235 Pf sensitivity =900.00204535 Pf sensitivity =910.000216166 Pf sensitivity =1000.00183114 Pf sensitivity =1010.000173258 Pf sensitivity =1100.00165754 Pf sensitivity =1110.000141965 Pf sensitivity =1200.00151401 Pf sensitivity =1210.000118443 Pf sensitivity =1300.00139336 Pf sensitivity =1310.000100317 Pf sensitivity =1400.00129051 Pf sensitivity =1418.60549e-05 Pf sensitivity =1500.00120181 Pf sensitivity =1517.46312e-05 Pf sensitivity =1600.00112451 Pf sensitivity =1616.534e-05 Pf sensitivity =1700.00105656 Pf sensitivity =1715.76817e-05 Pf sensitivity =1800.000996351 Pf sensitivity =1815.1295e-05 Pf sensitivity =1900.000942634 Pf sensitivity =1914.59131e-05 Pf sensitivity =2000.000894413 Pf sensitivity =2014.13358e-05 Pf sensitivity =2100.000850886 Pf sensitivity =2113.74105e-05 Pf sensitivity =2200.000811398 Pf sensitivity =2213.40188e-05 Pf sensitivity =2300.000775414 Pf sensitivity =2313.10683e-05 Pf sensitivity =2400.000742485 Pf sensitivity =2412.84856e-05 Pf sensitivity =2500.000712239 Pf sensitivity =2512.62121e-05 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.00411118 Breitung generalized reliability index =2.6428 HohenBichler event probability =0.00451026 HohenBichler generalized reliability index =2.61128 Tvedt event probability =0.00429501 Tvedt generalized reliability index =2.62795 ************************************************************************************************ sorted curvatures =-0.110536 sorted curvatures =-0.0708128 sorted curvatures =-0.0499409 sorted curvatures =-0.0380827 sorted curvatures =-0.0306693 sorted curvatures =-0.0256412 sorted curvatures =-0.0220184 sorted curvatures =-0.0192877 sorted curvatures =-0.0171573 sorted curvatures =-0.0154495 sorted curvatures =-0.0140501 sorted curvatures =-0.0128828 sorted curvatures =-0.0118943 sorted curvatures =-0.0110465 sorted curvatures =-0.0103114 sorted curvatures =-0.00966797 sorted curvatures =-0.00910005 sorted curvatures =-0.00859511 sorted curvatures =-0.00814322 sorted curvatures =-0.00773645 sorted curvatures =-0.00736836 sorted curvatures =-0.0070337 sorted curvatures =-0.0067281 sorted curvatures =-0.00644794 sorted curvatures =-0.00619017 sorted curvatures =4.13483e-17 ************************************************************************************************ standard space design point =-2.25858 standard space design point =1.64774 standard space design point =0.583504 standard space design point =0.354525 standard space design point =0.254611 standard space design point =0.198631 standard space design point =0.162831 standard space design point =0.137964 standard space design point =0.119687 standard space design point =0.105686 standard space design point =0.094617 standard space design point =0.0856472 standard space design point =0.0782307 standard space design point =0.0719963 standard space design point =0.0666823 standard space design point =0.0620987 standard space design point =0.0581048 standard space design point =0.0545937 standard space design point =0.0514825 standard space design point =0.048707 standard space design point =0.0462153 standard space design point =0.0439663 standard space design point =0.0419259 standard space design point =0.0400665 standard space design point =0.0383651 standard space design point =0.0368022 ************************************************************************************************ physical space design point =0.274142 physical space design point =0.364774 physical space design point =0.25835 physical space design point =0.235452 physical space design point =0.225461 physical space design point =0.219863 physical space design point =0.216283 physical space design point =0.213796 physical space design point =0.211969 physical space design point =0.210569 physical space design point =0.209462 physical space design point =0.208565 physical space design point =0.207823 physical space design point =0.2072 physical space design point =0.206668 physical space design point =0.20621 physical space design point =0.20581 physical space design point =0.205459 physical space design point =0.205148 physical space design point =0.204871 physical space design point =0.204622 physical space design point =0.204397 physical space design point =0.204193 physical space design point =0.204007 physical space design point =0.203837 physical space design point =0.20368 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.599064 importance factors =0.318846 importance factors =0.0399845 importance factors =0.0147604 importance factors =0.007613 importance factors =0.00463337 importance factors =0.00311369 importance factors =0.00223531 importance factors =0.00168227 importance factors =0.0013117 importance factors =0.00105134 importance factors =0.000861448 importance factors =0.000718717 importance factors =0.000608729 importance factors =0.000522186 importance factors =0.000452865 importance factors =0.000396486 importance factors =0.000350016 importance factors =0.00031126 importance factors =0.000278603 importance factors =0.000250828 importance factors =0.000227009 importance factors =0.000206427 importance factors =0.000188524 importance factors =0.000172852 importance factors =0.000159056 ************************************************************************************************ Hasofer reliability index =2.91809 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =0.00411119 Breitung generalized reliability index =2.6428 HohenBichler event probability =0.00451027 HohenBichler generalized reliability index =2.61127 Tvedt event probability =0.00429502 Tvedt generalized reliability index =2.62795 ************************************************************************************************ sorted curvatures =-0.110537 sorted curvatures =-0.070813 sorted curvatures =-0.049941 sorted curvatures =-0.0380828 sorted curvatures =-0.0306694 sorted curvatures =-0.0256413 sorted curvatures =-0.0220184 sorted curvatures =-0.0192878 sorted curvatures =-0.0171574 sorted curvatures =-0.0154495 sorted curvatures =-0.0140502 sorted curvatures =-0.0128828 sorted curvatures =-0.0118943 sorted curvatures =-0.0110465 sorted curvatures =-0.0103114 sorted curvatures =-0.00966799 sorted curvatures =-0.00910007 sorted curvatures =-0.00859512 sorted curvatures =-0.00814323 sorted curvatures =-0.00773646 sorted curvatures =-0.00736838 sorted curvatures =-0.00703371 sorted curvatures =-0.00672811 sorted curvatures =-0.00644795 sorted curvatures =-0.00619018 sorted curvatures =-0 ************************************************************************************************ standard space design point =-2.25859 standard space design point =1.64772 standard space design point =0.583514 standard space design point =0.354528 standard space design point =0.254613 standard space design point =0.198632 standard space design point =0.162832 standard space design point =0.137965 standard space design point =0.119688 standard space design point =0.105686 standard space design point =0.0946176 standard space design point =0.0856477 standard space design point =0.0782312 standard space design point =0.0719968 standard space design point =0.0666827 standard space design point =0.0620991 standard space design point =0.0581052 standard space design point =0.0545939 standard space design point =0.0514828 standard space design point =0.0487072 standard space design point =0.0462156 standard space design point =0.0439665 standard space design point =0.0419261 standard space design point =0.0400667 standard space design point =0.0383652 standard space design point =0.0368024 ************************************************************************************************ physical space design point =0.274141 physical space design point =0.364772 physical space design point =0.258351 physical space design point =0.235453 physical space design point =0.225461 physical space design point =0.219863 physical space design point =0.216283 physical space design point =0.213797 physical space design point =0.211969 physical space design point =0.210569 physical space design point =0.209462 physical space design point =0.208565 physical space design point =0.207823 physical space design point =0.2072 physical space design point =0.206668 physical space design point =0.20621 physical space design point =0.205811 physical space design point =0.205459 physical space design point =0.205148 physical space design point =0.204871 physical space design point =0.204622 physical space design point =0.204397 physical space design point =0.204193 physical space design point =0.204007 physical space design point =0.203837 physical space design point =0.20368 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.59907 importance factors =0.318838 importance factors =0.0399858 importance factors =0.0147606 importance factors =0.00761312 importance factors =0.00463344 importance factors =0.00311373 importance factors =0.00223534 importance factors =0.00168229 importance factors =0.00131172 importance factors =0.00105135 importance factors =0.000861458 importance factors =0.000718725 importance factors =0.000608736 importance factors =0.000522191 importance factors =0.000452871 importance factors =0.00039649 importance factors =0.000350019 importance factors =0.000311264 importance factors =0.000278606 importance factors =0.00025083 importance factors =0.000227011 importance factors =0.00020643 importance factors =0.000188526 importance factors =0.000172854 importance factors =0.000159058 ************************************************************************************************ Hasofer reliability index =2.91809 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.00337553 Pf Variance estimation =2.83893e-06 CoV =0.499155 90% Confidence Interval =0.00554287 CI at 90% =[0.000604093;0.00614696] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.004625 Pf Variance estimation =5.75451e-07 CoV =0.164018 90% Confidence Interval =0.00249552 CI at 90% =[0.00337724;0.00587276] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_RS2.cxx000066400000000000000000000530311307543307100201500ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts R-S^2 * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "R"; inputFunction[1] = "S"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "R-(S^2)"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 11.0; mean[1] = 1.5; Point sigma(dim, 0.0); sigma[0] = 1; sigma[1] = 0.5; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(1000 * dim); myCobyla.setMaximumAbsoluteError(1.0e-4); myCobyla.setMaximumRelativeError(1.0e-4); myCobyla.setMaximumResidualError(1.0e-4); myCobyla.setMaximumConstraintError(1.0e-4); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(1000 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-4); myAbdoRackwitz.setMaximumRelativeError(1.0e-4); myAbdoRackwitz.setMaximumResidualError(1.0e-4); myAbdoRackwitz.setMaximumConstraintError(1.0e-4); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(1000000); myMC.setBlockSize(1000); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(1000000); myLHS.setBlockSize(100); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvAR2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_RS2.expout000066400000000000000000000162221307543307100206730ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.00025897 generalized reliability index =3.4713 ************************************************************************************************ standard space design point =-1.04883 standard space design point =3.30906 ************************************************************************************************ physical space design point =9.95117 physical space design point =3.15453 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.0912909 importance factors =0.908709 ************************************************************************************************ Hasofer reliability index =3.4713 ************************************************************************************************ Pf sensitivity =00-0.000291454 Pf sensitivity =010.000305686 Pf sensitivity =100.0018388 Pf sensitivity =110.0060847 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.00025894 generalized reliability index =3.47133 ************************************************************************************************ standard space design point =-1.0486 standard space design point =3.30917 ************************************************************************************************ physical space design point =9.9514 physical space design point =3.15458 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.0912485 importance factors =0.908751 ************************************************************************************************ Hasofer reliability index =3.47133 ************************************************************************************************ Pf sensitivity =00-0.000291418 Pf sensitivity =010.000305581 Pf sensitivity =100.00183861 Pf sensitivity =110.00608426 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.000265403 Breitung generalized reliability index =3.46471 HohenBichler event probability =0.000265891 HohenBichler generalized reliability index =3.46421 Tvedt event probability =0.000265871 Tvedt generalized reliability index =3.46423 ************************************************************************************************ sorted curvatures =-0.013797 sorted curvatures =-0 ************************************************************************************************ standard space design point =-1.04883 standard space design point =3.30906 ************************************************************************************************ physical space design point =9.95117 physical space design point =3.15453 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.0912909 importance factors =0.908709 ************************************************************************************************ Hasofer reliability index =3.4713 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =0.000265373 Breitung generalized reliability index =3.46474 HohenBichler event probability =0.00026586 HohenBichler generalized reliability index =3.46425 Tvedt event probability =0.000265841 Tvedt generalized reliability index =3.46427 ************************************************************************************************ sorted curvatures =-0.0137964 sorted curvatures =-0 ************************************************************************************************ standard space design point =-1.0486 standard space design point =3.30917 ************************************************************************************************ physical space design point =9.9514 physical space design point =3.15458 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.0912485 importance factors =0.908751 ************************************************************************************************ Hasofer reliability index =3.47133 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.000178571 Pf Variance estimation =6.38279e-09 CoV =0.447397 90% Confidence Interval =0.000262822 CI at 90% =[4.71602e-05;0.000309983] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.000251119 Pf Variance estimation =6.3045e-10 CoV =0.0999876 90% Confidence Interval =8.26005e-05 CI at 90% =[0.000209819;0.000292419] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_concave.cxx000066400000000000000000000464061307543307100211700ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts concave limit state function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "X1"; inputFunction[1] = "X2"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "-0.5*(X1-X2)*(X1-X2) - (X1+X2)/(sqrt(2)) + 3"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.0; mean[1] = 0.0; Point sigma(dim, 0.0); sigma[0] = 1.0; sigma[1] = 1.0; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); //myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); //SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(100000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(100000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); // Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); // Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); // Scalar PFHBAR2=resultAR2.getEventProbabilityHohenBichler(); // Scalar BetaHBAR2=resultAR2.getGeneralisedReliabilityIndexHohenBichler(); // Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); // Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); // Point CurvAR2 = resultAR2.getSortedCurvatures(); // Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); // Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); // Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace() ; // Point gammaAR2 = resultAR2.getImportanceFactors(); // Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "convergence error" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_concave.expout000066400000000000000000000134221307543307100217020ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.0486272 generalized reliability index =1.65831 ************************************************************************************************ standard space design point =1.47159 standard space design point =-0.764481 ************************************************************************************************ physical space design point =1.47159 physical space design point =-0.764481 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.78748 importance factors =0.21252 ************************************************************************************************ Hasofer reliability index =1.65831 ************************************************************************************************ Pf sensitivity =000.0895107 Pf sensitivity =010.131723 Pf sensitivity =10-0.0465002 Pf sensitivity =110.0355485 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.0013499 generalized reliability index =3 ************************************************************************************************ standard space design point =2.12132 standard space design point =2.12132 ************************************************************************************************ physical space design point =2.12132 physical space design point =2.12132 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =3 ************************************************************************************************ Pf sensitivity =000.00313379 Pf sensitivity =010.00664777 Pf sensitivity =100.00313379 Pf sensitivity =110.00664777 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.0510007 Breitung generalized reliability index =1.63523 HohenBichler event probability =0.0516527 HohenBichler generalized reliability index =1.62904 Tvedt event probability =0.0515941 Tvedt generalized reliability index =1.62959 ************************************************************************************************ sorted curvatures =-0.0548202 sorted curvatures =-3.34745e-17 ************************************************************************************************ standard space design point =1.47159 standard space design point =-0.764481 ************************************************************************************************ physical space design point =1.47159 physical space design point =-0.764481 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.78748 importance factors =0.21252 ************************************************************************************************ Hasofer reliability index =1.65831 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ convergence error ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.129032 Pf Variance estimation =0.00362526 CoV =0.466628 90% Confidence Interval =0.198074 CI at 90% =[0.0299955;0.228069] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.107271 Pf Variance estimation =0.00011414 CoV =0.0995953 90% Confidence Interval =0.035146 CI at 90% =[0.0896975;0.124844] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_convex.cxx000066400000000000000000000527551307543307100210600ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts 25 quadratic terms * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "X1"; inputFunction[1] = "X2"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "2.5 + 0.1*(X1-X2)^2.0 - (X1+X2)/sqrt(2.0)"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.0; mean[1] = 0.0; Point sigma(dim, 0.0); sigma[0] = 1.0; sigma[1] = 1.0; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(100000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(100000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << CurvC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << CurvAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_convex.expout000066400000000000000000000160701307543307100215700ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.00620967 generalized reliability index =2.5 ************************************************************************************************ standard space design point =1.76777 standard space design point =1.76777 ************************************************************************************************ physical space design point =1.76777 physical space design point =1.76777 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.5 ************************************************************************************************ Pf sensitivity =000.0123944 Pf sensitivity =010.0219104 Pf sensitivity =100.0123944 Pf sensitivity =110.0219104 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.00620967 generalized reliability index =2.5 ************************************************************************************************ standard space design point =1.76777 standard space design point =1.76777 ************************************************************************************************ physical space design point =1.76777 physical space design point =1.76777 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.5 ************************************************************************************************ Pf sensitivity =000.0123944 Pf sensitivity =010.0219104 Pf sensitivity =100.0123944 Pf sensitivity =110.0219104 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.0043909 Breitung generalized reliability index =2.62043 HohenBichler event probability =0.00425569 HohenBichler generalized reliability index =2.63108 Tvedt event probability =0.00419512 Tvedt generalized reliability index =2.63595 ************************************************************************************************ sorted curvatures =2.77556e-17 sorted curvatures =0.4 ************************************************************************************************ standard space design point =1.76777 standard space design point =1.76777 ************************************************************************************************ physical space design point =1.76777 physical space design point =1.76777 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.5 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =0.0043909 Breitung generalized reliability index =2.62043 HohenBichler event probability =0.00425569 HohenBichler generalized reliability index =2.63108 Tvedt event probability =0.00419512 Tvedt generalized reliability index =2.63595 ************************************************************************************************ sorted curvatures =2.77556e-17 sorted curvatures =0.4 ************************************************************************************************ standard space design point =1.76777 standard space design point =1.76777 ************************************************************************************************ physical space design point =1.76777 physical space design point =1.76777 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.5 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.0042735 Pf Variance estimation =4.5462e-06 CoV =0.49893 90% Confidence Interval =0.00701425 CI at 90% =[0.000766378;0.00778063] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.00486027 Pf Variance estimation =2.35074e-07 CoV =0.0997567 90% Confidence Interval =0.001595 CI at 90% =[0.00406277;0.00565777] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_discontinuous_lsf.cxx000066400000000000000000000531361307543307100233220ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts discontinuous limit state function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "x1"; inputFunction[1] = "x2"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "if( x2 <= x1,-0.5+sqrt(x1-x2),-0.5 )"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 15.0; mean[1] = 5.0; Point sigma(dim, 0.0); sigma[0] = 2.5; sigma[1] = 0.5; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(1000 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(10000000); myMC.setBlockSize(1000); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(100000); myLHS.setBlockSize(100); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvAR2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_discontinuous_lsf.expout000066400000000000000000000162071307543307100240420ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =6.55815e-05 generalized reliability index =3.82426 ************************************************************************************************ standard space design point =-3.75 standard space design point =0.75 ************************************************************************************************ physical space design point =5.625 physical space design point =5.375 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.961538 importance factors =0.0384615 ************************************************************************************************ Hasofer reliability index =3.82426 ************************************************************************************************ Pf sensitivity =00-0.000104394 Pf sensitivity =010.000391477 Pf sensitivity =100.000104394 Pf sensitivity =117.82954e-05 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =6.55815e-05 generalized reliability index =3.82426 ************************************************************************************************ standard space design point =-3.75 standard space design point =0.75 ************************************************************************************************ physical space design point =5.625 physical space design point =5.375 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.961538 importance factors =0.0384615 ************************************************************************************************ Hasofer reliability index =3.82426 ************************************************************************************************ Pf sensitivity =00-0.000104394 Pf sensitivity =010.000391477 Pf sensitivity =100.000104394 Pf sensitivity =117.82954e-05 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =6.55815e-05 Breitung generalized reliability index =3.82426 HohenBichler event probability =6.55815e-05 HohenBichler generalized reliability index =3.82426 Tvedt event probability =6.55815e-05 Tvedt generalized reliability index =3.82426 ************************************************************************************************ sorted curvatures =-0 sorted curvatures =7.40291e-16 ************************************************************************************************ standard space design point =-3.75 standard space design point =0.75 ************************************************************************************************ physical space design point =5.625 physical space design point =5.375 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.961538 importance factors =0.0384615 ************************************************************************************************ Hasofer reliability index =3.82426 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =6.55815e-05 Breitung generalized reliability index =3.82426 HohenBichler event probability =6.55815e-05 HohenBichler generalized reliability index =3.82426 Tvedt event probability =6.55815e-05 Tvedt generalized reliability index =3.82426 ************************************************************************************************ sorted curvatures =-4.57246e-16 sorted curvatures =1.34035e-17 ************************************************************************************************ standard space design point =-3.75 standard space design point =0.75 ************************************************************************************************ physical space design point =5.625 physical space design point =5.375 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.961538 importance factors =0.0384615 ************************************************************************************************ Hasofer reliability index =3.82426 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =5.49451e-05 Pf Variance estimation =6.04362e-10 CoV =0.447425 90% Confidence Interval =8.08735e-05 CI at 90% =[1.45083e-05;9.53818e-05] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =6.84328e-05 Pf Variance estimation =4.68273e-11 CoV =0.0999966 90% Confidence Interval =2.25116e-05 CI at 90% =[5.7177e-05;7.96886e-05] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_noisy_lsf.cxx000066400000000000000000000576371307543307100215670ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts noisy limit state function * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; typedef Collection DistributionCollection; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(6); inputFunction[0] = "X1"; inputFunction[1] = "X2"; inputFunction[2] = "X3"; inputFunction[3] = "X4"; inputFunction[4] = "X5"; inputFunction[5] = "X6"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "X1 + 2*X2 + 2*X3 + X4 - 5*X5 - 5*X6 +0.001*(sin(100*X1)+sin(100*X2)+sin(100*X3)+sin(100*X4)+sin(100*X5)+sin(100*X6))"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 120.0; mean[1] = 120.0; mean[2] = 120.0; mean[3] = 120.0; mean[4] = 50.0; mean[5] = 40.0; Point sigma(dim, 0.0); sigma[0] = 12.0; sigma[1] = 12.0; sigma[2] = 12.0; sigma[3] = 12.0; sigma[4] = 15.0; sigma[5] = 12.0; Scalar BorneInf = 0.0; Description component(1); DistributionCollection aCollection; { LogNormal marginal(mean[0], sigma[0], BorneInf, LogNormal::MUSIGMA); marginal.setName("First"); component[0] = "One"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a second marginal : distribution 1D { LogNormal marginal(mean[1], sigma[1], BorneInf, LogNormal::MUSIGMA); marginal.setName("Second"); component[0] = "Two"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a third marginal : distribution 1D { LogNormal marginal(mean[2], sigma[2], BorneInf, LogNormal::MUSIGMA); marginal.setName("Third"); component[0] = "Three"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a forth marginal : distribution 1D { LogNormal marginal(mean[3], sigma[3], BorneInf, LogNormal::MUSIGMA); marginal.setName("Forth"); component[0] = "Four"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a fifth marginal : distribution 1D { LogNormal marginal(mean[4], sigma[4], BorneInf, LogNormal::MUSIGMA); marginal.setName("Fifth"); component[0] = "Five"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a sixth marginal : distribution 1D { LogNormal marginal(mean[5], sigma[5], BorneInf, LogNormal::MUSIGMA); marginal.setName("Sixth"); component[0] = "Six"; marginal.setDescription(component); // Fill the first marginal of aCollection aCollection.add( marginal ); } // Create a copula : IndependentCopula (pas de correlation IndependentCopula aCopula(aCollection.getSize()); aCopula.setName("Independent copula"); // Instanciate one distribution object ComposedDistribution myDistribution(aCollection, Copula(aCopula)); myDistribution.setName("myDist"); Point start(myDistribution.getMean()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-4); myCobyla.setMaximumRelativeError(1.0e-4); myCobyla.setMaximumResidualError(1.0e-4); myCobyla.setMaximumConstraintError(1.0e-4); FORM myAlgoC(myCobyla, myEvent, start); myAlgoC.run(); FORMResult resultC(myAlgoC.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(1000 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-6); myAbdoRackwitz.setMaximumRelativeError(1.0e-6); myAbdoRackwitz.setMaximumResidualError(1.0e-6); myAbdoRackwitz.setMaximumConstraintError(1.0e-6); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); FORMResult resultAR(myAlgoAR.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(1000); myMC.setBlockSize(100); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(1000); myLHS.setBlockSize(10); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); // ######################################################################################################### // # Directional Sampling Scalar CoV_DS = 0.1; DirectionalSampling myDS1(myEvent, RootStrategy(RiskyAndFast()), SamplingStrategy(RandomDirection())); myDS1.setMaximumOuterSampling(1000); myDS1.setBlockSize(10); myDS1.setMaximumCoefficientOfVariation(CoV_DS); myDS1.run(); DirectionalSampling myDS2(myEvent, RootStrategy(MediumSafe()), SamplingStrategy(RandomDirection())); myDS2.setMaximumOuterSampling(1000); myDS2.setBlockSize(10); myDS2.setMaximumCoefficientOfVariation(CoV_DS); myDS2.run(); DirectionalSampling myDS3(myEvent, RootStrategy(SafeAndSlow()), SamplingStrategy(RandomDirection())); myDS3.setMaximumOuterSampling(1000); myDS3.setBlockSize(10); myDS3.setMaximumCoefficientOfVariation(CoV_DS); myDS3.run(); /* ########################################################################################################## ##Importance Sampling avec Standard Event*/ Point meanSE(dim, 0.0); for (UnsignedInteger i = 0; i < resultAR.getStandardSpaceDesignPoint().getDimension(); ++i) meanSE[i] = resultAR.getStandardSpaceDesignPoint()[i]; Point sigmaSE(dim, 1.0); IdentityMatrix CorrSE(dim); Normal myImportanceSE(meanSE, sigmaSE, CorrSE); StandardEvent myStandardEvent(myEvent); ImportanceSampling myISS(myStandardEvent, Distribution(myImportanceSE)); myISS.setMaximumOuterSampling(1000); myISS.setBlockSize(10); myISS.setMaximumCoefficientOfVariation(0.1); myISS.run(); // # Importance Sampling avec Event Point meanE(dim, 0.0); for (UnsignedInteger i = 0; i < resultC.getPhysicalSpaceDesignPoint().getDimension(); ++i) meanE[i] = resultAR.getPhysicalSpaceDesignPoint()[i]; Point sigmaE(dim, 0.0); for (UnsignedInteger i = 0; i < resultC.getPhysicalSpaceDesignPoint().getDimension(); ++i) sigmaE[i] = std::sqrt(Covariance(i, i)); IdentityMatrix CorrE(dim); Normal myImportanceE(meanE, sigmaE, CorrE); ImportanceSampling myIS(myEvent, Distribution(myImportanceE)); myIS.setMaximumOuterSampling(1000); myIS.setBlockSize(10); myIS.setMaximumCoefficientOfVariation(0.1); myIS.run(); /*#########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/ Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); // #########################################################################################################; // // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // ########################################################################################################### // ### Directional Sampling SimulationResult ResultDS1 = myDS1.getResult(); Scalar PFDS1 = ResultDS1.getProbabilityEstimate(); Scalar CVDS1 = ResultDS1.getCoefficientOfVariation(); Scalar Variance_PF_DS1 = ResultDS1.getVarianceEstimate(); Scalar length90DS1 = ResultDS1.getConfidenceLength(0.90); SimulationResult ResultDS2 = myDS2.getResult(); Scalar PFDS2 = ResultDS2.getProbabilityEstimate(); Scalar CVDS2 = ResultDS2.getCoefficientOfVariation(); Scalar Variance_PF_DS2 = ResultDS2.getVarianceEstimate(); Scalar length90DS2 = ResultDS2.getConfidenceLength(0.90); SimulationResult ResultDS3 = myDS3.getResult(); Scalar PFDS3 = ResultDS3.getProbabilityEstimate(); Scalar CVDS3 = ResultDS3.getCoefficientOfVariation(); Scalar Variance_PF_DS3 = ResultDS3.getVarianceEstimate(); Scalar length90DS3 = ResultDS3.getConfidenceLength(0.90); // ########################################################################################################## // ##Importance Sampling SimulationResult ResultISS = myISS.getResult(); Scalar PFISS = ResultISS.getProbabilityEstimate(); Scalar CVISS = ResultISS.getCoefficientOfVariation(); Scalar Variance_PF_ISS = ResultISS.getVarianceEstimate(); Scalar length90ISS = ResultISS.getConfidenceLength(0.90); SimulationResult ResultIS = myIS.getResult(); Scalar PFIS = ResultIS.getProbabilityEstimate(); Scalar CVIS = ResultIS.getCoefficientOfVariation(); Scalar Variance_PF_IS = ResultIS.getVarianceEstimate(); Scalar length90IS = ResultIS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityC.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityC[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* D S ************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFDS1 << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_DS1 << std::endl; fullprint << "CoV =" << CVDS1 << std::endl; fullprint << "90% Confidence Interval =" << length90DS1 << std::endl; fullprint << "CI at 90% =[" << PFDS1 - 0.5 * length90DS1 << ";" << PFDS1 + 0.5 * length90DS1 << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFDS2 << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_DS2 << std::endl; fullprint << "CoV =" << CVDS2 << std::endl; fullprint << "90% Confidence Interval =" << length90DS2 << std::endl; fullprint << "CI at 90% =[" << PFDS2 - 0.5 * length90DS2 << ";" << PFDS2 + 0.5 * length90DS2 << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFDS3 << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_DS3 << std::endl; fullprint << "CoV =" << CVDS3 << std::endl; fullprint << "90% Confidence Interval =" << length90DS3 << std::endl; fullprint << "CI at 90% =[" << PFDS3 - 0.5 * length90DS3 << ";" << PFDS3 + 0.5 * length90DS3 << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* I S ************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFISS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_ISS << std::endl; fullprint << "CoV =" << CVISS << std::endl; fullprint << "90% Confidence Interval =" << length90ISS << std::endl; fullprint << "CI at 90% =[" << PFISS - 0.5 * length90ISS << ";" << PFISS + 0.5 * length90ISS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "Pf estimation =" << PFIS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_IS << std::endl; fullprint << "CoV =" << CVIS << std::endl; fullprint << "90% Confidence Interval =" << length90IS << std::endl; fullprint << "CI at 90% =[" << PFIS - 0.5 * length90IS << ";" << PFIS + 0.5 * length90IS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_noisy_lsf.expout000066400000000000000000000162511307543307100222740ustar00rootroot000000000000006 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.00943254 generalized reliability index =2.34819 ************************************************************************************************ standard space design point =-0.189253 standard space design point =-0.352286 standard space design point =-0.362847 standard space design point =-0.178977 standard space design point =1.89047 standard space design point =1.27141 ************************************************************************************************ physical space design point =117.171 physical space design point =115.281 physical space design point =115.16 physical space design point =117.292 physical space design point =83.4211 physical space design point =55.6469 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.0064956 importance factors =0.0225074 importance factors =0.0238771 importance factors =0.0058094 importance factors =0.64815 importance factors =0.293161 ************************************************************************************************ Hasofer reliability index =2.34819 ************************************************************************************************ Pf sensitivity =-0.020445 Pf sensitivity =0.00386928 Pf sensitivity =-0.000174488 Pf sensitivity =-0.0382649 Pf sensitivity =0.0134802 Pf sensitivity =-0.000331926 Pf sensitivity =-0.0390039 Pf sensitivity =0.0141524 Pf sensitivity =-0.000338693 Pf sensitivity =-0.0194588 Pf sensitivity =0.00348269 Pf sensitivity =-0.000165901 Pf sensitivity =0.0695365 Pf sensitivity =0.131457 Pf sensitivity =0.000833559 Pf sensitivity =0.0465914 Pf sensitivity =0.0592367 Pf sensitivity =0.000837268 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.00943257 generalized reliability index =2.34819 ************************************************************************************************ standard space design point =-0.174028 standard space design point =-0.347433 standard space design point =-0.347433 standard space design point =-0.174028 standard space design point =1.90098 standard space design point =1.26422 ************************************************************************************************ physical space design point =117.35 physical space design point =115.337 physical space design point =115.337 physical space design point =117.35 physical space design point =83.6789 physical space design point =55.5296 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.00549256 importance factors =0.0218916 importance factors =0.0218916 importance factors =0.00549256 importance factors =0.655377 importance factors =0.289855 ************************************************************************************************ Hasofer reliability index =2.34819 ************************************************************************************************ Pf sensitivity =-0.0188118 Pf sensitivity =0.00327379 Pf sensitivity =-0.000160306 Pf sensitivity =-0.0375568 Pf sensitivity =0.0130485 Pf sensitivity =-0.000325627 Pf sensitivity =-0.0375568 Pf sensitivity =0.0130485 Pf sensitivity =-0.000325627 Pf sensitivity =-0.0188118 Pf sensitivity =0.00327379 Pf sensitivity =-0.000160306 Pf sensitivity =0.0698599 Pf sensitivity =0.132802 Pf sensitivity =0.000834857 Pf sensitivity =0.0464215 Pf sensitivity =0.058687 Pf sensitivity =0.000835978 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.00833333 Pf Variance estimation =1.3912e-05 CoV =0.447586 90% Confidence Interval =0.0122702 CI at 90% =[0.00219822;0.0144684] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.011066 Pf Variance estimation =1.22199e-06 CoV =0.0998949 90% Confidence Interval =0.00363656 CI at 90% =[0.00924771;0.0128843] ************************************************************************************************ ************************************************************************************************ ******************************************* D S ************************************************ ************************************************************************************************ Pf estimation =0.0101672 Pf Variance estimation =1.03011e-06 CoV =0.0998253 90% Confidence Interval =0.00333887 CI at 90% =[0.00849777;0.0118366] ************************************************************************************************ Pf estimation =0.0111345 Pf Variance estimation =1.23126e-06 CoV =0.099656 90% Confidence Interval =0.00365033 CI at 90% =[0.00930937;0.0129597] ************************************************************************************************ Pf estimation =0.011978 Pf Variance estimation =1.43244e-06 CoV =0.0999204 90% Confidence Interval =0.00393727 CI at 90% =[0.0100094;0.0139466] ************************************************************************************************ ************************************************************************************************ ******************************************* I S ************************************************ ************************************************************************************************ Pf estimation =0.013092 Pf Variance estimation =1.70126e-06 CoV =0.0996279 90% Confidence Interval =0.00429084 CI at 90% =[0.0109465;0.0152374] ************************************************************************************************ Pf estimation =0.0135191 Pf Variance estimation =1.82672e-06 CoV =0.0999741 90% Confidence Interval =0.00444625 CI at 90% =[0.011296;0.0157422] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_oblate.cxx000066400000000000000000000431471307543307100210170ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts oblate surface limit state * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(10); inputFunction[0] = "S01"; inputFunction[1] = "S02"; inputFunction[2] = "S03"; inputFunction[3] = "S04"; inputFunction[4] = "S05"; inputFunction[5] = "S06"; inputFunction[6] = "S07"; inputFunction[7] = "S08"; inputFunction[8] = "S09"; inputFunction[9] = "S10"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "10 - (S01^2/(1.0+1.0/10.0) + S02^2/(1.0+2.0/10.0) + S03^2/(1.0+3.0/10.0) + S04^2/(1.0+4.0/10.0) + S05^2/(1.0+5.0/10.0) + S06^2/(1.0+6.0/10.0) + S07^2/(1.0+7.0/10.0) + S08^2/(1.0+8.0/10.0) + S09^2/(1.0+9.0/10.0) + S10^2/(1.0+10.0/10.0))"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.0; mean[1] = 0.0; mean[2] = 0.0; mean[3] = 0.0; mean[4] = 0.0; mean[5] = 0.0; mean[6] = 0.0; mean[7] = 0.0; mean[8] = 0.0; mean[9] = 0.0; Point sigma(dim, 0.0); sigma[0] = 1.0; sigma[1] = 1.0; sigma[2] = 1.0; sigma[3] = 1.0; sigma[4] = 1.0; sigma[5] = 1.0; sigma[6] = 1.0; sigma[7] = 1.0; sigma[8] = 1.0; sigma[9] = 1.0; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getSigma()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-4); myCobyla.setMaximumRelativeError(1.0e-4); myCobyla.setMaximumResidualError(1.0e-4); myCobyla.setMaximumConstraintError(1.0e-4); FORM myAlgoC(myCobyla, myEvent, start); //SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); //myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); //SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-4); myAbdoRackwitz.setMaximumRelativeError(1.0e-4); myAbdoRackwitz.setMaximumResidualError(1.0e-4); myAbdoRackwitz.setMaximumConstraintError(1.0e-4); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); // SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); // myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); // SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(1000000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(1000000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); // Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); // Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); // Scalar PFHBC2=resultC2.getEventProbabilityHohenBichler(); // Scalar BetaHBC2=resultC2.getGeneralisedReliabilityIndexHohenBichler(); // Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); // Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); // Point CurvC2 = resultC2.getSortedCurvatures(); // Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); // Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); // Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); // Point gammaC2 = resultC2.getImportanceFactors(); // Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); // Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); // Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); // Scalar PFHBAR2=resultAR2.getEventProbabilityHohenBichler(); // Scalar BetaHBAR2=resultAR2.getGeneralisedReliabilityIndexHohenBichler(); // Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); // Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); // Point CurvAR2 = resultAR2.getSortedCurvatures(); // Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); // Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); // Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace() ; // Point gammaAR2 = resultAR2.getImportanceFactors(); // Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Convergence error" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Convergence error" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_oblate.expout000066400000000000000000000162761307543307100215440ustar00rootroot0000000000000010 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.000455586 generalized reliability index =3.31661 ************************************************************************************************ standard space design point =3.31661 standard space design point =0.00102491 standard space design point =4.28007e-05 standard space design point =4.34337e-05 standard space design point =2.69323e-05 standard space design point =1.87922e-05 standard space design point =4.66593e-05 standard space design point =9.84035e-06 standard space design point =-7.60552e-06 standard space design point =5.40262e-06 ************************************************************************************************ physical space design point =3.31661 physical space design point =0.00102491 physical space design point =4.28007e-05 physical space design point =4.34337e-05 physical space design point =2.69323e-05 physical space design point =1.87922e-05 physical space design point =4.66593e-05 physical space design point =9.84035e-06 physical space design point =-7.60552e-06 physical space design point =5.40262e-06 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =1 importance factors =9.54955e-08 importance factors =1.66538e-10 importance factors =1.71501e-10 importance factors =6.59416e-11 importance factors =3.21046e-11 importance factors =1.97919e-10 importance factors =8.80304e-12 importance factors =5.25859e-12 importance factors =2.65351e-12 ************************************************************************************************ Hasofer reliability index =3.31661 ************************************************************************************************ Pf sensitivity =000.00163048 Pf sensitivity =010.00540765 Pf sensitivity =104.61867e-07 Pf sensitivity =114.73372e-10 Pf sensitivity =201.78041e-08 Pf sensitivity =217.62027e-13 Pf sensitivity =301.67769e-08 Pf sensitivity =317.28683e-13 Pf sensitivity =409.70947e-09 Pf sensitivity =412.61499e-13 Pf sensitivity =506.35142e-09 Pf sensitivity =511.19357e-13 Pf sensitivity =601.48423e-08 Pf sensitivity =616.92533e-13 Pf sensitivity =702.95632e-09 Pf sensitivity =712.90912e-14 Pf sensitivity =80-2.16464e-09 Pf sensitivity =811.64632e-14 Pf sensitivity =901.46079e-09 Pf sensitivity =917.89207e-15 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.000455281 generalized reliability index =3.3168 ************************************************************************************************ standard space design point =3.31492 standard space design point =0.111357 standard space design point =0.00490905 standard space design point =0.000272769 standard space design point =1.85024e-05 standard space design point =1.49314e-06 standard space design point =1.40359e-07 standard space design point =1.51449e-08 standard space design point =1.80762e-09 standard space design point =2.44273e-10 ************************************************************************************************ physical space design point =3.31492 physical space design point =0.111357 physical space design point =0.00490905 physical space design point =0.000272769 physical space design point =1.85024e-05 physical space design point =1.49314e-06 physical space design point =1.40359e-07 physical space design point =1.51449e-08 physical space design point =1.80762e-09 physical space design point =2.44273e-10 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.998871 importance factors =0.0011272 importance factors =2.19057e-06 importance factors =6.76319e-09 importance factors =3.11185e-11 importance factors =2.02659e-13 importance factors =1.79079e-15 importance factors =2.08496e-17 importance factors =2.97014e-19 importance factors =5.42392e-21 ************************************************************************************************ Hasofer reliability index =3.3168 ************************************************************************************************ Pf sensitivity =000.00162869 Pf sensitivity =010.00539898 Pf sensitivity =105.01529e-05 Pf sensitivity =115.5849e-06 Pf sensitivity =202.04085e-06 Pf sensitivity =211.00186e-08 Pf sensitivity =301.05299e-07 Pf sensitivity =312.87223e-11 Pf sensitivity =406.66645e-09 Pf sensitivity =411.23345e-13 Pf sensitivity =505.04356e-10 Pf sensitivity =517.53075e-16 Pf sensitivity =604.46177e-11 Pf sensitivity =616.26251e-18 Pf sensitivity =704.56018e-12 Pf sensitivity =716.90635e-20 Pf sensitivity =805.28021e-13 Pf sensitivity =819.5446e-22 Pf sensitivity =907.20028e-14 Pf sensitivity =911.75883e-23 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Convergence error ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Convergence error ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.0869565 Pf Variance estimation =0.00172598 CoV =0.477767 90% Confidence Interval =0.136671 CI at 90% =[0.0186212;0.155292] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.130435 Pf Variance estimation =0.000170047 CoV =0.099975 90% Confidence Interval =0.0428985 CI at 90% =[0.108986;0.151884] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_saddle.cxx000066400000000000000000000530221307543307100207760ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts saddle surface * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "U1"; inputFunction[1] = "U2"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "3.0-U1*U2"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.0; mean[1] = 0.0; Point sigma(dim, 0.0); sigma[0] = 1.0; sigma[1] = 1.0; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(dim, 1.0); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(8000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(8000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvAR2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_saddle.expout000066400000000000000000000161201307543307100215160ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.00715294 generalized reliability index =2.44949 ************************************************************************************************ standard space design point =1.73205 standard space design point =1.73205 ************************************************************************************************ physical space design point =1.73205 physical space design point =1.73205 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.44949 ************************************************************************************************ Pf sensitivity =000.0140447 Pf sensitivity =010.0243261 Pf sensitivity =100.0140447 Pf sensitivity =110.0243261 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.00715294 generalized reliability index =2.44949 ************************************************************************************************ standard space design point =1.73205 standard space design point =1.73205 ************************************************************************************************ physical space design point =1.73205 physical space design point =1.73205 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.44949 ************************************************************************************************ Pf sensitivity =000.0140447 Pf sensitivity =010.0243261 Pf sensitivity =100.0140447 Pf sensitivity =110.0243261 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.00505789 Breitung generalized reliability index =2.57185 HohenBichler event probability =0.00489696 HohenBichler generalized reliability index =2.58302 Tvedt event probability =0.00482446 Tvedt generalized reliability index =2.58816 ************************************************************************************************ sorted curvatures =-0 sorted curvatures =0.408248 ************************************************************************************************ standard space design point =1.73205 standard space design point =1.73205 ************************************************************************************************ physical space design point =1.73205 physical space design point =1.73205 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.44949 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =0.00505789 Breitung generalized reliability index =2.57185 HohenBichler event probability =0.00489696 HohenBichler generalized reliability index =2.58302 Tvedt event probability =0.00482446 Tvedt generalized reliability index =2.58816 ************************************************************************************************ sorted curvatures =6.7987e-17 sorted curvatures =0.408248 ************************************************************************************************ standard space design point =1.73205 standard space design point =1.73205 ************************************************************************************************ physical space design point =1.73205 physical space design point =1.73205 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =2.44949 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.00539811 Pf Variance estimation =7.24557e-06 CoV =0.498649 90% Confidence Interval =0.0088551 CI at 90% =[0.000970559;0.00982566] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.008375 Pf Variance estimation =1.03811e-06 CoV =0.121657 90% Confidence Interval =0.0033518 CI at 90% =[0.0066991;0.0100509] ************************************************************************************************ openturns-1.9/lib/test/t_Waarts_system_series.cxx000066400000000000000000000532541307543307100224470ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file for Waarts system series * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; Scalar clean(Scalar in) { if (std::abs(in) < 1.e-10) in = 0.0; return in; } int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Description inputFunction(2); inputFunction[0] = "U1"; inputFunction[1] = "U2"; Description outputFunction(1); outputFunction[0] = "G"; Description formulas(outputFunction.getSize()); formulas[0] = "min(0.1*(U1-U2)^2.0 - (U1+U2)/sqrt(2.0) + 3.0, 0.1*(U1-U2)^2.0 + (U1+U2)/sqrt(2.0) + 3.0 , U1 - U2 + 3.5*sqrt(2.0),-U1 + U2 + 3.5*sqrt(2.0) )"; Function EtatLimite(inputFunction, outputFunction, formulas); UnsignedInteger dim = EtatLimite.getInputDimension(); fullprint << dim << std::endl; // #########################################################################################################; // # Probabilistic model; // #########################################################################################################; Point mean(dim, 0.0); mean[0] = 0.0; mean[1] = 0.0; Point sigma(dim, 0.0); sigma[0] = 1.0; sigma[1] = 1.0; CorrelationMatrix CORR(dim); Normal myDistribution(mean, sigma, CORR); Point start(myDistribution.getSigma()); CovarianceMatrix Covariance = myDistribution.getCovariance(); // #########################################################################################################; // # Limit state; // #########################################################################################################; RandomVector vect(myDistribution); RandomVector output(EtatLimite, vect); Event myEvent(output, Less(), 0.0); // #########################################################################################################; // # Calculs; // #########################################################################################################; // ; // #########################################################################################################; // # FORM/SORM Cobyla; Cobyla myCobyla; myCobyla.setMaximumIterationNumber(100 * dim); myCobyla.setMaximumAbsoluteError(1.0e-10); myCobyla.setMaximumRelativeError(1.0e-10); myCobyla.setMaximumResidualError(1.0e-10); myCobyla.setMaximumConstraintError(1.0e-10); FORM myAlgoC(myCobyla, myEvent, start); SORM myAlgoC2(myCobyla, myEvent, start); myAlgoC.run(); myAlgoC2.run(); FORMResult resultC(myAlgoC.getResult()); SORMResult resultC2(myAlgoC2.getResult()); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; AbdoRackwitz myAbdoRackwitz; myAbdoRackwitz.setMaximumIterationNumber(100 * dim); myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10); myAbdoRackwitz.setMaximumRelativeError(1.0e-10); myAbdoRackwitz.setMaximumResidualError(1.0e-10); myAbdoRackwitz.setMaximumConstraintError(1.0e-10); FORM myAlgoAR(myAbdoRackwitz, myEvent, start); SORM myAlgoAR2(myAbdoRackwitz, myEvent, start); myAlgoAR.run(); myAlgoAR2.run(); FORMResult resultAR(myAlgoAR.getResult()); SORMResult resultAR2(myAlgoAR2.getResult()); // #########################################################################################################; // # Monte Carlo; Scalar CoV_MC = 0.5; MonteCarlo myMC(myEvent); myMC.setMaximumOuterSampling(1000000); myMC.setBlockSize(1); myMC.setMaximumCoefficientOfVariation(CoV_MC); myMC.run(); // #########################################################################################################; // # LHS; Scalar CoV_LHS = 0.1; LHS myLHS(myEvent); myLHS.setMaximumOuterSampling(1000000); myLHS.setBlockSize(1); myLHS.setMaximumCoefficientOfVariation(CoV_LHS); myLHS.run(); /* ; #########################################################################################################; #########################################################################################################; # Results; #########################################################################################################; #########################################################################################################; # FORM/SORM Cobyla*/; Scalar PfC = resultC.getEventProbability(); Scalar Beta_generalizedC = resultC.getGeneralisedReliabilityIndex(); Point u_starC = resultC.getStandardSpaceDesignPoint(); Point x_starC = resultC.getPhysicalSpaceDesignPoint(); Bool PtC = resultC.getIsStandardPointOriginInFailureSpace(); Point gammaC = resultC.getImportanceFactors(); Point gammaCC = resultC.getImportanceFactors(true); Scalar beta_hasoferC = resultC.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityC = resultC.getEventProbabilitySensitivity(); Scalar PFBreitC2 = resultC2.getEventProbabilityBreitung(); Scalar BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBC2 = resultC2.getEventProbabilityHohenBichler(); Scalar BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtC2 = resultC2.getEventProbabilityTvedt(); Scalar BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt(); Point CurvC2 = resultC2.getSortedCurvatures(); Point u_starC2 = resultC2.getStandardSpaceDesignPoint(); Point x_starC2 = resultC2.getPhysicalSpaceDesignPoint(); Bool PtC2 = resultC2.getIsStandardPointOriginInFailureSpace(); Point gammaC2 = resultC2.getImportanceFactors(); Point gammaCC2 = resultC2.getImportanceFactors(true); Scalar beta_hasoferC2 = resultC2.getHasoferReliabilityIndex(); // #########################################################################################################; // # FORM/SORM Abdo Rackwitz; Scalar PfAR = resultAR.getEventProbability(); Scalar Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex(); Point u_starAR = resultAR.getStandardSpaceDesignPoint(); Point x_starAR = resultAR.getPhysicalSpaceDesignPoint(); Bool PtAR = resultAR.getIsStandardPointOriginInFailureSpace(); Point gammaAR = resultAR.getImportanceFactors(); Point gammaCAR = resultAR.getImportanceFactors(true); Scalar beta_hasoferAR = resultAR.getHasoferReliabilityIndex(); Analytical::Sensitivity SensitivityAR = resultAR.getEventProbabilitySensitivity(); Scalar PFBreitAR2 = resultAR2.getEventProbabilityBreitung(); Scalar BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung(); Scalar PFHBAR2 = resultAR2.getEventProbabilityHohenBichler(); Scalar BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler(); Scalar PFTvedtAR2 = resultAR2.getEventProbabilityTvedt(); Scalar BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt(); Point CurvAR2 = resultAR2.getSortedCurvatures(); Point u_starAR2 = resultAR2.getStandardSpaceDesignPoint(); Point x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint(); Bool PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace(); Point gammaAR2 = resultAR2.getImportanceFactors(); Point gammaCAR2 = resultAR2.getImportanceFactors(true); Scalar beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex(); // ######################################/*###################################################################; // # Monte Carlo*/; SimulationResult ResultMC = myMC.getResult(); Scalar PFMC = ResultMC.getProbabilityEstimate(); Scalar CVMC = ResultMC.getCoefficientOfVariation(); Scalar Variance_PF_MC = ResultMC.getVarianceEstimate(); Scalar length90MC = ResultMC.getConfidenceLength(0.90); // #########################################################################################################; // # LHS; SimulationResult ResultLHS = myLHS.getResult(); Scalar PFLHS = ResultLHS.getProbabilityEstimate(); Scalar CVLHS = ResultLHS.getCoefficientOfVariation(); Scalar Variance_PF_LHS = ResultLHS.getVarianceEstimate(); Scalar length90LHS = ResultLHS.getConfidenceLength(0.90); // #########################################################################################################; // # Printting; // #########################################################################################################; fullprint << "" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** FORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfC << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC.getDimension(); i++) fullprint << "standard space design point =" << u_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC.getDimension(); i++) fullprint << "physical space design point =" << x_starC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC.getDimension(); i++) fullprint << "importance factors =" << gammaC[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityC[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** FORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "event probability =" << PfAR << std::endl; fullprint << "generalized reliability index =" << Beta_generalizedAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR.getDimension(); i++) fullprint << "standard space design point =" << u_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR.getDimension(); i++) fullprint << "physical space design point =" << x_starAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR.getDimension(); i++) fullprint << "importance factors =" << gammaAR[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < SensitivityAR.getSize(); ++i) for (UnsignedInteger j = 0; j < SensitivityAR[i].getDimension(); ++j) fullprint << "Pf sensitivity =" << i << j << SensitivityAR[i][j] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "***************************************** SORM COBYLA *****************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitC2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitC2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBC2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBC2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtC2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvC2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvC2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starC2.getDimension(); i++) fullprint << "standard space design point =" << u_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starC2.getDimension(); i++) fullprint << "physical space design point =" << x_starC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaC2.getDimension(); i++) fullprint << "importance factors =" << gammaC2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCC2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCC2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferC2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************** SORM ABDO RACKWITZ **************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Breitung event probability =" << PFBreitAR2 << std::endl; fullprint << "Breitung generalized reliability index =" << BetaBreitAR2 << std::endl; fullprint << "HohenBichler event probability =" << PFHBAR2 << std::endl; fullprint << "HohenBichler generalized reliability index =" << BetaHBAR2 << std::endl; fullprint << "Tvedt event probability =" << PFTvedtAR2 << std::endl; fullprint << "Tvedt generalized reliability index =" << BetaTvedtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < CurvAR2.getDimension(); i++) fullprint << "sorted curvatures =" << clean(CurvAR2[i]) << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < u_starAR2.getDimension(); i++) fullprint << "standard space design point =" << u_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < x_starAR2.getDimension(); i++) fullprint << "physical space design point =" << x_starAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "is standard point origin in failure space? " << PtAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; for (UnsignedInteger i = 0; i < gammaAR2.getDimension(); i++) fullprint << "importance factors =" << gammaAR2[i] << std::endl; for (UnsignedInteger i = 0; i < gammaCAR2.getDimension(); i++) fullprint << "importance factors (classical)=" << gammaCAR2[i] << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Hasofer reliability index =" << beta_hasoferAR2 << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "**************************************** MONTE CARLO *******************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFMC << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_MC << std::endl; fullprint << "CoV =" << CVMC << std::endl; fullprint << "90% Confidence Interval =" << length90MC << std::endl; fullprint << "CI at 90% =[" << PFMC - 0.5 * length90MC << ";" << PFMC + 0.5 * length90MC << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "******************************************* L H S **********************************************" << std::endl; fullprint << "************************************************************************************************" << std::endl; fullprint << "Pf estimation =" << PFLHS << std::endl; fullprint << "Pf Variance estimation =" << Variance_PF_LHS << std::endl; fullprint << "CoV =" << CVLHS << std::endl; fullprint << "90% Confidence Interval =" << length90LHS << std::endl; fullprint << "CI at 90% =[" << PFLHS - 0.5 * length90LHS << ";" << PFLHS + 0.5 * length90LHS << "]" << std::endl; fullprint << "************************************************************************************************" << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Waarts_system_series.expout000066400000000000000000000160661307543307100231710ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability =0.0013499 generalized reliability index =3 ************************************************************************************************ standard space design point =2.12132 standard space design point =2.12132 ************************************************************************************************ physical space design point =2.12132 physical space design point =2.12132 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =3 ************************************************************************************************ Pf sensitivity =000.00313379 Pf sensitivity =010.00664777 Pf sensitivity =100.00313379 Pf sensitivity =110.00664777 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability =0.0013499 generalized reliability index =3 ************************************************************************************************ standard space design point =2.12132 standard space design point =2.12132 ************************************************************************************************ physical space design point =2.12132 physical space design point =2.12132 ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =3 ************************************************************************************************ Pf sensitivity =000.00313379 Pf sensitivity =010.00664777 Pf sensitivity =100.00313379 Pf sensitivity =110.00664777 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability =0.000910101 Breitung generalized reliability index =3.1181 HohenBichler event probability =0.000887546 HohenBichler generalized reliability index =3.12549 Tvedt event probability =0.000876979 Tvedt generalized reliability index =3.12901 ************************************************************************************************ sorted curvatures =-5.55112e-17 sorted curvatures =0.4 ************************************************************************************************ standard space design point =2.12132 standard space design point =2.12132 ************************************************************************************************ physical space design point =2.12132 physical space design point =2.12132 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =3 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability =0.000910101 Breitung generalized reliability index =3.1181 HohenBichler event probability =0.000887546 HohenBichler generalized reliability index =3.12549 Tvedt event probability =0.000876979 Tvedt generalized reliability index =3.12901 ************************************************************************************************ sorted curvatures =-0 sorted curvatures =0.4 ************************************************************************************************ standard space design point =2.12132 standard space design point =2.12132 ************************************************************************************************ physical space design point =2.12132 physical space design point =2.12132 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? 0 ************************************************************************************************ importance factors =0.5 importance factors =0.5 ************************************************************************************************ Hasofer reliability index =3 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation =0.000979432 Pf Variance estimation =2.39587e-07 CoV =0.499755 90% Confidence Interval =0.00161023 CI at 90% =[0.000174315;0.00178455] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation =0.00242277 Pf Variance estimation =5.85561e-08 CoV =0.0998788 90% Confidence Interval =0.000796056 CI at 90% =[0.00202475;0.0028208] ************************************************************************************************ openturns-1.9/lib/test/t_WeibullFactory_std.cxx000066400000000000000000000054741307543307100220360ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Weibull for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Weibull distribution(1., 2.5, -1.0); UnsignedInteger size = 10000; Sample sample(distribution.getSample(size)); WeibullFactory factory; CovarianceMatrix covariance; // Distribution estimatedDistribution(factory.build(sample, covariance)); Distribution estimatedDistribution(factory.build(sample)); fullprint << "Distribution =" << distribution << std::endl; fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; // fullprint << "Covariance=" << covariance << std::endl; estimatedDistribution = factory.build(); fullprint << "Default distribution=" << estimatedDistribution << std::endl; estimatedDistribution = factory.build(distribution.getParameter()); fullprint << "Distribution from parameters=" << estimatedDistribution << std::endl; // Test the specific build method Weibull estimatedWeibull(factory.buildAsWeibull(sample)); fullprint << "Estimated weibull=" << estimatedWeibull << std::endl; estimatedWeibull = factory.buildAsWeibull(); fullprint << "Default weibull=" << estimatedWeibull << std::endl; estimatedWeibull = factory.buildAsWeibull(distribution.getParameter()); fullprint << "Weibull from parameters=" << estimatedWeibull << std::endl; // Test for constant sample sample = Sample(size, Point(1, 0.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; sample = Sample(size, Point(1, 1.0)); estimatedDistribution = factory.build(sample); fullprint << "Estimated distribution=" << estimatedDistribution << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_WeibullFactory_std.expout000066400000000000000000000015141307543307100225470ustar00rootroot00000000000000Distribution =class=Weibull name=Weibull dimension=1 alpha=1 beta=2.5 gamma=-1 Estimated distribution=class=Weibull name=Weibull dimension=1 alpha=0.971656 beta=2.39412 gamma=-0.969546 Default distribution=class=Weibull name=Weibull dimension=1 alpha=1 beta=1 gamma=0 Distribution from parameters=class=Weibull name=Weibull dimension=1 alpha=1 beta=2.5 gamma=-1 Estimated weibull=class=Weibull name=Weibull dimension=1 alpha=0.971656 beta=2.39412 gamma=-0.969546 Default weibull=class=Weibull name=Weibull dimension=1 alpha=1 beta=1 gamma=0 Weibull from parameters=class=Weibull name=Weibull dimension=1 alpha=1 beta=2.5 gamma=-1 Estimated distribution=class=Weibull name=Weibull dimension=1 alpha=4.93038e-30 beta=1 gamma=2.22045e-16 Estimated distribution=class=Weibull name=Weibull dimension=1 alpha=2.22022e-14 beta=1 gamma=0.9999 openturns-1.9/lib/test/t_Weibull_std.cxx000066400000000000000000000211041307543307100204720ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Weibull for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public Weibull { public: TestObject() : Weibull(2.0, 1.5, -0.5) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object Weibull distribution(2.0, 1.5, -0.5); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point( distribution.getDimension(), 1.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; Point PDFgrFD(3); PDFgrFD[0] = (Weibull(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computePDF(point) - Weibull(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[1] = (Weibull(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computePDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps); PDFgrFD[2] = (Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computePDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps); fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; Point CDFgrFD(3); CDFgrFD[0] = (Weibull(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point) - Weibull(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[1] = (Weibull(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computeCDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps); CDFgrFD[2] = (Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computeCDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps); fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Weibull::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Weibull_std.expout000066400000000000000000000116201307543307100212160ustar00rootroot00000000000000Testing class Weibull checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 streamObject(const T & anObject) class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 Distribution Weibull(alpha = 2, beta = 1.5, gamma = -0.5) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[1.49188] oneSample first=class=Point name=Unnamed dimension=1 values=[2.82534] last=class=Point name=Unnamed dimension=1 values=[0.847293] mean=class=Point name=Unnamed dimension=1 values=[1.32223] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.52908] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf =class=Point name=Unnamed dimension=1 values=[-0.107263] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.107263] log pdf=-1.08104 pdf =0.339242 pdf (FD)=0.339242 cdf=0.477703 ccdf=0.522297 survival=0.522297 Inverse survival=class=Point name=Unnamed dimension=1 values=[-0.223897] Survival(inverse survival)=0.95 pdf gradient =class=Point name=Unnamed dimension=3 values=[-0.0891733,0.191956,0.107263] pdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.0891733,0.191956,0.107263] cdf gradient =class=Point name=Unnamed dimension=3 values=[-0.254431,-0.0975938,-0.339242] cdf gradient (FD)=class=Point name=Unnamed dimension=3 values=[-0.254431,-0.0975938,-0.339242] quantile=class=Point name=Unnamed dimension=1 values=[3.65622] cdf(quantile)=0.95 Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.489737] upper bound=class=Point name=Unnamed dimension=1 values=[3.66304] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Weibull(alpha = 2, beta = 1.5, gamma = -0.5)) gradientImplementation=MinimumVolumeLevelSetGradient(Weibull(alpha = 2, beta = 1.5, gamma = -0.5)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Weibull(alpha = 2, beta = 1.5, gamma = -0.5)) level=2.92424 beta=0.0537054 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.327556] upper bound=class=Point name=Unnamed dimension=1 values=[4.27485] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.5] upper bound=class=Point name=Unnamed dimension=1 values=[3.65622] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-0.223897] upper bound=class=Point name=Unnamed dimension=1 values=[19.7578] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[1.30549] standard deviation=class=Point name=Unnamed dimension=1 values=[1.22587] skewness=class=Point name=Unnamed dimension=1 values=[1.07199] kurtosis=class=Point name=Unnamed dimension=1 values=[4.3904] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.50276] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[alpha : 2, beta : 1.5, gamma : -0.5]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[0.902745] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[1.19064] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[2] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[4.0122] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[9.26053] Standard representative=Weibull(alpha = 1, beta = 1.5, gamma = 0) openturns-1.9/lib/test/t_WelchFactory_std.cxx000066400000000000000000000073101307543307100214640ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class WelchFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Dimension of the input model // Size of the TimeGrid UnsignedInteger size = 64; UnsignedInteger dimension = 1; RegularGrid timeGrid(0.0, 0.1, size); Point amplitude(dimension, 2.0); Point scale(dimension, 1.0); ExponentialCauchy model(scale, amplitude); SpectralGaussianProcess myProcess(model, timeGrid); // Create a Process sample UnsignedInteger N = 100; ProcessSample sample(myProcess.getSample(N)); // Filtering Windows WelchFactory myFactory; // Build a UserDefinedSpectralModel using the Welch method UserDefinedSpectralModel mySpectralModel(myFactory.buildAsUserDefinedSpectralModel(sample)); // Get the frequency grid of the model RegularGrid myFrequencyGrid(mySpectralModel.getFrequencyGrid()); for (UnsignedInteger i = 0 ; i < dimension ; ++i) { for (UnsignedInteger j = 0 ; j < dimension ; ++j) { fullprint << "Spectre " << i << "-" << j << std::endl; for (UnsignedInteger k = 0; k < myFrequencyGrid.getN(); ++k) { const Scalar frequency = myFrequencyGrid.getStart() + k * myFrequencyGrid.getStep(); const Scalar estimatedValue = std::real(mySpectralModel(frequency)(i, j)); const Scalar modelValue = std::real(model.computeSpectralDensity(frequency)(i, j)); fullprint << "Frequency = " << frequency ; fullprint << ", evaluation = " << estimatedValue << " model = " << modelValue << std::endl; } } } // Create a Time Series TimeSeries timeSeries(myProcess.getRealization()); // Build a UserDefinedSpectralModel using the Welch method UserDefinedSpectralModel mySpectralModel2(myFactory.buildAsUserDefinedSpectralModel(timeSeries)); // Get the frequency grid of the model myFrequencyGrid = mySpectralModel2.getFrequencyGrid(); for (UnsignedInteger i = 0 ; i < dimension ; ++i) { for (UnsignedInteger j = 0 ; j < dimension ; ++j) { fullprint << "Spectre " << i << "-" << j << std::endl; for (UnsignedInteger k = 0; k < myFrequencyGrid.getN(); ++k) { const Scalar frequency = myFrequencyGrid.getStart() + k * myFrequencyGrid.getStep(); const Scalar estimatedValue = std::real(mySpectralModel2(frequency)(i, j)); const Scalar modelValue = std::real(model.computeSpectralDensity(frequency)(i, j)); fullprint << "Frequency = " << frequency ; fullprint << ", evaluation = " << estimatedValue << " model = " << modelValue << std::endl; } } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_WelchFactory_std.expout000066400000000000000000000076731307543307100222220ustar00rootroot00000000000000Spectre 0-0 Frequency = 0.078125, evaluation = 7.22073 model = 6.44664 Frequency = 0.234375, evaluation = 2.73056 model = 2.52476 Frequency = 0.390625, evaluation = 1.17632 model = 1.13896 Frequency = 0.546875, evaluation = 0.676661 model = 0.624663 Frequency = 0.703125, evaluation = 0.432207 model = 0.389911 Frequency = 0.859375, evaluation = 0.234318 model = 0.265289 Frequency = 1.01562, evaluation = 0.179721 model = 0.191746 Frequency = 1.17188, evaluation = 0.137444 model = 0.144887 Frequency = 1.32812, evaluation = 0.113888 model = 0.113256 Frequency = 1.48438, evaluation = 0.092162 model = 0.090924 Frequency = 1.64062, evaluation = 0.0655292 model = 0.0745837 Frequency = 1.79688, evaluation = 0.0649662 model = 0.0622731 Frequency = 1.95312, evaluation = 0.0532085 model = 0.0527711 Frequency = 2.10938, evaluation = 0.0443833 model = 0.0452853 Frequency = 2.26562, evaluation = 0.0366886 model = 0.0392841 Frequency = 2.42188, evaluation = 0.0378065 model = 0.0343998 Frequency = 2.57812, evaluation = 0.0336541 model = 0.0303718 Frequency = 2.73438, evaluation = 0.0290632 model = 0.0270113 Frequency = 2.89062, evaluation = 0.0278925 model = 0.0241787 Frequency = 3.04688, evaluation = 0.0211869 model = 0.021769 Frequency = 3.20312, evaluation = 0.0181101 model = 0.0197021 Frequency = 3.35938, evaluation = 0.0180237 model = 0.0179159 Frequency = 3.51562, evaluation = 0.0167975 model = 0.016362 Frequency = 3.67188, evaluation = 0.0146681 model = 0.0150017 Frequency = 3.82812, evaluation = 0.0141786 model = 0.0138041 Frequency = 3.98438, evaluation = 0.0133818 model = 0.0127443 Frequency = 4.14062, evaluation = 0.0100163 model = 0.011802 Frequency = 4.29688, evaluation = 0.00921753 model = 0.0109605 Frequency = 4.45312, evaluation = 0.00909719 model = 0.0102058 Frequency = 4.60938, evaluation = 0.00861848 model = 0.0095264 Frequency = 4.76562, evaluation = 0.00894934 model = 0.00891264 Frequency = 4.92188, evaluation = 0.00940174 model = 0.00835632 Spectre 0-0 Frequency = 0.078125, evaluation = 9.22383 model = 6.44664 Frequency = 0.234375, evaluation = 1.27341 model = 2.52476 Frequency = 0.390625, evaluation = 0.705277 model = 1.13896 Frequency = 0.546875, evaluation = 1.00014 model = 0.624663 Frequency = 0.703125, evaluation = 0.31149 model = 0.389911 Frequency = 0.859375, evaluation = 0.238593 model = 0.265289 Frequency = 1.01562, evaluation = 0.0835495 model = 0.191746 Frequency = 1.17188, evaluation = 0.138069 model = 0.144887 Frequency = 1.32812, evaluation = 0.0865921 model = 0.113256 Frequency = 1.48438, evaluation = 0.0494301 model = 0.090924 Frequency = 1.64062, evaluation = 0.0239831 model = 0.0745837 Frequency = 1.79688, evaluation = 0.00755319 model = 0.0622731 Frequency = 1.95312, evaluation = 0.0184125 model = 0.0527711 Frequency = 2.10938, evaluation = 0.0445598 model = 0.0452853 Frequency = 2.26562, evaluation = 0.00997343 model = 0.0392841 Frequency = 2.42188, evaluation = 0.038891 model = 0.0343998 Frequency = 2.57812, evaluation = 0.0228616 model = 0.0303718 Frequency = 2.73438, evaluation = 0.00183134 model = 0.0270113 Frequency = 2.89062, evaluation = 0.00755024 model = 0.0241787 Frequency = 3.04688, evaluation = 0.0207192 model = 0.021769 Frequency = 3.20312, evaluation = 0.0167041 model = 0.0197021 Frequency = 3.35938, evaluation = 0.0412352 model = 0.0179159 Frequency = 3.51562, evaluation = 0.0136757 model = 0.016362 Frequency = 3.67188, evaluation = 0.0222966 model = 0.0150017 Frequency = 3.82812, evaluation = 0.0173335 model = 0.0138041 Frequency = 3.98438, evaluation = 0.00557949 model = 0.0127443 Frequency = 4.14062, evaluation = 0.00396908 model = 0.011802 Frequency = 4.29688, evaluation = 0.00799104 model = 0.0109605 Frequency = 4.45312, evaluation = 0.024389 model = 0.0102058 Frequency = 4.60938, evaluation = 0.0277712 model = 0.0095264 Frequency = 4.76562, evaluation = 0.00349674 model = 0.00891264 Frequency = 4.92188, evaluation = 0.0112243 model = 0.00835632 openturns-1.9/lib/test/t_WhiteNoise_std.cxx000066400000000000000000000041361307543307100211530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class WhiteNoise * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { const Scalar Tmin = 0.0; const Scalar deltaT = 0.1; const UnsignedInteger N = 11; /* Initialization of the RegularGrid timeGrid1*/ RegularGrid timeGrid(Tmin, deltaT, N); /* Distribution choice */ Distribution dist = Uniform(); fullprint << "dist = " << dist << std::endl; Process process = WhiteNoise(dist); /* Setting the timeGrid */ process.setTimeGrid(timeGrid); /* Print of the process */ fullprint << "process = " << process << std::endl; /* Initialization of the TimeSeries */ TimeSeries timeSerie = process.getRealization(); /* Full prints */ fullprint << "timeSerie = " << timeSerie << std::endl; // Some steps further UnsignedInteger stepNumber = 4; fullprint << "One future=" << process.getFuture(stepNumber) << std::endl; UnsignedInteger size = 3; fullprint << "Some futures=" << process.getFuture(stepNumber, size) << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_WhiteNoise_std.expout000066400000000000000000000041571307543307100217000ustar00rootroot00000000000000dist = class=Uniform name=Uniform dimension=1 a=-1 b=1 process = class=Process implementation=class=WhiteNoise distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 timeSerie = class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] values=class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=11 dimension=1 description=[X0] data=[[0.259753],[0.76561],[-0.729447],[-0.934994],[-0.305886],[0.938846],[0.841359],[0.0060803],[-0.873588],[-0.414486],[0.428764]] start=0 timeStep=0.1 n=11 One future=class=TimeSeries name=Unnamed derived from=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=4 dimension=1 description=[X0] data=[[-0.233276],[-0.252465],[0.474536],[0.767007]] start=1.1 timeStep=0.1 n=4 Some futures=class=ProcessSample mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 description=[t] data=[[1.1],[1.2],[1.3],[1.4]] simplices=[[0,1],[1,2],[2,3]] values=[class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=4 dimension=1 description=[X0] data=[[-0.410012],[0.857021],[0.641622],[0.36915]],class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=4 dimension=1 description=[X0] data=[[0.656054],[-0.280396],[0.909492],[0.177231]],class=Sample name=Uniform implementation=class=SampleImplementation name=Uniform size=4 dimension=1 description=[X0] data=[[-0.635922],[-0.82843],[0.321455],[-0.579116]]] openturns-1.9/lib/test/t_WhittleFactory_std.cxx000066400000000000000000000075261307543307100220530ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class WhittleFactory * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); try { ResourceMap::SetAsUnsignedInteger("WhittleFactory-DefaultMaxFun", 2000); /* Reduce the precision output as the estimation is based on a lazy optimizer */ PlatformInfo::SetNumericalPrecision(4); /* ARMA(p, q) */ const UnsignedInteger p = 1; const UnsignedInteger q = 2; /* ARMACoefficients intializing */ Point arCoefficients(p, 0.80); Point maCoefficients(q, 0.50); /* ARMA creation */ ARMA myARMA(ARMACoefficients(arCoefficients), ARMACoefficients(maCoefficients), WhiteNoise(Normal(0.0, 0.05))); myARMA.setTimeGrid(RegularGrid(0.0, 0.1, 256)); fullprint << "myARMA process = " << myARMA.__str__() << std::endl; /* Create a realization */ TimeSeries timeSeries(myARMA.getRealization()); /* Create a sample */ ProcessSample sample(myARMA.getSample(100)); /* First, build an ARMA based on a given order using the WhittleFactory */ { WhittleFactory factory(p, q); // factory.setVerbose(true); fullprint << "factory=" << factory << std::endl; Point informationCriteria; Process result(factory.build(timeSeries, informationCriteria)); // Commented due to a bug in the cobyla algorithm //fullprint << "Estimated ARMA=" << result.__str__() << std::endl; //fullprint << "Information criteria=" << informationCriteria.__str__() << std::endl; Process result2(factory.build(sample, informationCriteria)); // Commented due to a bug in the cobyla algorithm //fullprint << "Estimated ARMA=" << result2.__str__() << std::endl; //fullprint << "Information criteria=" << informationCriteria.__str__() << std::endl; } /* Second, build the best ARMA based on a given range of order using the WhittleFactory */ Indices pIndices(p + 1); pIndices.fill(); Indices qIndices(q + 1); qIndices.fill(); WhittleFactory factory(pIndices, qIndices); // factory.setVerbose(true); fullprint << "factory=" << factory << std::endl; Point informationCriteria; Process result(factory.build(timeSeries, informationCriteria)); // Commented due to a bug in the cobyla algorithm //fullprint << "Estimated ARMA=" << result.__str__() << std::endl; //fullprint << "Information criteria=" << informationCriteria.__str__() << std::endl; //fullprint << "History=" << factory.getHistory().__str__() << std::endl; Process result2(factory.build(sample, informationCriteria)); // Commented due to a bug in the cobyla algorithm //fullprint << "Estimated ARMA=" << result2.__str__() << std::endl; //fullprint << "Information criteria=" << informationCriteria.__str__() << std::endl; //fullprint << "History=" << factory.getHistory().__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_WhittleFactory_std.expout000066400000000000000000000007451307543307100225710ustar00rootroot00000000000000myARMA process = ARMA(X_{0,t} + 0.8 X_{0,t-1} = E_{0,t} + 0.5 E_{0,t-1} + 0.5 E_{0,t-2}, E_t ~ Normal(mu = 0, sigma = 0.05)) factory=class= WhittleFactory p = [1] q = [2] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 factory=class= WhittleFactory p = [0,1] q = [0,1,2] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 openturns-1.9/lib/test/t_Wilks_std.cxx000066400000000000000000000044151307543307100201660ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Wilks for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { Distribution distribution(Normal(0.0, 1.0)); std::cout << "distribution=" << distribution << std::endl; RandomVector vector(distribution); std::cout << "vector=" << vector << std::endl; Wilks algo(vector); Point alpha(2); alpha[0] = 0.9; alpha[1] = 0.95; Point beta(2); beta[0] = 0.9; beta[1] = 0.95; for (UnsignedInteger a = 0; a < 2; a++) { fullprint << "alpha=" << alpha[a] << std::endl; for (UnsignedInteger b = 0; b < 2; b++) { fullprint << "beta=" << beta[b] << std::endl; for (UnsignedInteger i = 0; i < 5; i++) { // Sample size for various parameters set fullprint << "n(" << alpha[a] << ", " << beta[b] << ", " << i << ")=" << Wilks::ComputeSampleSize(alpha[a], beta[b], i) << std::endl; // Quantile estimation using Wilks method fullprint << "Quantile of level=" << alpha[a] << " with confidence=" << beta[b] << " using upper statistics=" << i << " gives estimate=" << algo.computeQuantileBound(alpha[a], beta[b], i) << std::endl; } } } } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Wilks_std.expout000066400000000000000000000067731307543307100207210ustar00rootroot00000000000000distribution=Normal(mu = 0, sigma = 1) vector=class=RandomVector implementation=class=UsualRandomVector distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] alpha=0.9 beta=0.9 n(0.9, 0.9, 0)=22 Quantile of level=0.9 with confidence=0.9 using upper statistics=0 gives estimate=class=Point name=Unnamed dimension=1 values=[1.43725] n(0.9, 0.9, 1)=38 Quantile of level=0.9 with confidence=0.9 using upper statistics=1 gives estimate=class=Point name=Unnamed dimension=1 values=[1.85579] n(0.9, 0.9, 2)=52 Quantile of level=0.9 with confidence=0.9 using upper statistics=2 gives estimate=class=Point name=Unnamed dimension=1 values=[1.70938] n(0.9, 0.9, 3)=65 Quantile of level=0.9 with confidence=0.9 using upper statistics=3 gives estimate=class=Point name=Unnamed dimension=1 values=[1.49156] n(0.9, 0.9, 4)=78 Quantile of level=0.9 with confidence=0.9 using upper statistics=4 gives estimate=class=Point name=Unnamed dimension=1 values=[1.48031] beta=0.95 n(0.9, 0.95, 0)=29 Quantile of level=0.9 with confidence=0.95 using upper statistics=0 gives estimate=class=Point name=Unnamed dimension=1 values=[1.94606] n(0.9, 0.95, 1)=46 Quantile of level=0.9 with confidence=0.95 using upper statistics=1 gives estimate=class=Point name=Unnamed dimension=1 values=[1.73945] n(0.9, 0.95, 2)=61 Quantile of level=0.9 with confidence=0.95 using upper statistics=2 gives estimate=class=Point name=Unnamed dimension=1 values=[1.70642] n(0.9, 0.95, 3)=76 Quantile of level=0.9 with confidence=0.95 using upper statistics=3 gives estimate=class=Point name=Unnamed dimension=1 values=[1.7657] n(0.9, 0.95, 4)=89 Quantile of level=0.9 with confidence=0.95 using upper statistics=4 gives estimate=class=Point name=Unnamed dimension=1 values=[1.44503] alpha=0.95 beta=0.9 n(0.95, 0.9, 0)=45 Quantile of level=0.95 with confidence=0.9 using upper statistics=0 gives estimate=class=Point name=Unnamed dimension=1 values=[2.0749] n(0.95, 0.9, 1)=77 Quantile of level=0.95 with confidence=0.9 using upper statistics=1 gives estimate=class=Point name=Unnamed dimension=1 values=[1.89271] n(0.95, 0.9, 2)=105 Quantile of level=0.95 with confidence=0.9 using upper statistics=2 gives estimate=class=Point name=Unnamed dimension=1 values=[1.6379] n(0.95, 0.9, 3)=132 Quantile of level=0.95 with confidence=0.9 using upper statistics=3 gives estimate=class=Point name=Unnamed dimension=1 values=[2.04098] n(0.95, 0.9, 4)=158 Quantile of level=0.95 with confidence=0.9 using upper statistics=4 gives estimate=class=Point name=Unnamed dimension=1 values=[1.90887] beta=0.95 n(0.95, 0.95, 0)=59 Quantile of level=0.95 with confidence=0.95 using upper statistics=0 gives estimate=class=Point name=Unnamed dimension=1 values=[3.0788] n(0.95, 0.95, 1)=93 Quantile of level=0.95 with confidence=0.95 using upper statistics=1 gives estimate=class=Point name=Unnamed dimension=1 values=[2.49498] n(0.95, 0.95, 2)=124 Quantile of level=0.95 with confidence=0.95 using upper statistics=2 gives estimate=class=Point name=Unnamed dimension=1 values=[2.13718] n(0.95, 0.95, 3)=153 Quantile of level=0.95 with confidence=0.95 using upper statistics=3 gives estimate=class=Point name=Unnamed dimension=1 values=[2.19774] n(0.95, 0.95, 4)=181 Quantile of level=0.95 with confidence=0.95 using upper statistics=4 gives estimate=class=Point name=Unnamed dimension=1 values=[2.45554] openturns-1.9/lib/test/t_Wishart_std.cxx000066400000000000000000000200771307543307100205200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class Arcsine for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Instanciate one distribution object CovarianceMatrix cov(1); Wishart distribution(cov, 3.0); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test for sampling UnsignedInteger size = 10000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; fullprint << "skewness=" << oneSample.computeSkewness() << std::endl; fullprint << "kurtosis=" << oneSample.computeKurtosis() << std::endl; size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "Kolmogorov test for the generator, sample size=" << size << " is " << (FittingTest::Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } // Define a point Point point(distribution.getDimension(), 9.1); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar eps = 1e-5; Point DDF = distribution.computeDDF( point ); fullprint << "ddf =" << DDF << std::endl; fullprint << "ddf (FD)=" << distribution.ContinuousDistribution::computeDDF(point) << std::endl; Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, eps) ) - distribution.computeCDF( point + Point(1, -eps) )) / (2.0 * eps) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95); fullprint << "Inverse survival=" << InverseSurvival << std::endl; fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point quantileTail = distribution.computeQuantile( 0.95, true ); fullprint << "quantile (tail)=" << quantileTail << std::endl; Scalar CDFTail = distribution.computeComplementaryCDF( quantileTail ); fullprint << "cdf (tail)=" << CDFTail << std::endl; Point PDFgr = distribution.computePDFGradient( point ); fullprint << "pdf gradient =" << PDFgr << std::endl; // Point PDFgrFD(2); // PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - // Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps); // PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - // Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps); // fullprint << "pdf gradient (FD)=" << PDFgrFD << std::endl; Point CDFgr = distribution.computeCDFGradient( point ); fullprint << "cdf gradient =" << CDFgr << std::endl; // Point CDFgrFD(2); // CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - // Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps); // CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - // Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps); // fullprint << "cdf gradient (FD)=" << CDFgrFD << std::endl; // Confidence regions Scalar threshold; fullprint << "Minimum volume interval=" << distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95, threshold) << std::endl; fullprint << "threshold=" << threshold << std::endl; Scalar beta; LevelSet levelSet(distribution.computeMinimumVolumeLevelSetWithThreshold(0.95, beta)); fullprint << "Minimum volume level set=" << levelSet << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Bilateral confidence interval=" << distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (lower tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, false, beta) << std::endl; fullprint << "beta=" << beta << std::endl; fullprint << "Unilateral confidence interval (upper tail)=" << distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, true, beta) << std::endl; fullprint << "beta=" << beta << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; Arcsine::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_Wishart_std.expout000066400000000000000000000107431307543307100212410ustar00rootroot00000000000000Distribution class=Wishart name=Wishart dimension=1 cholesky=class=TriangularMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] nu=3 Distribution Wishart(V = [[ 1 ]], nu = 3) Elliptical = false Continuous = true oneRealization=class=Point name=Unnamed dimension=1 values=[3.90923] oneSample first=class=Point name=Unnamed dimension=1 values=[1.18011] last=class=Point name=Unnamed dimension=1 values=[0.622293] mean=class=Point name=Unnamed dimension=1 values=[3.00811] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.19866] skewness=class=Point name=Unnamed dimension=1 values=[1.68374] kurtosis=class=Point name=Unnamed dimension=1 values=[7.27045] Kolmogorov test for the generator, sample size=100 is accepted Kolmogorov test for the generator, sample size=1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf =class=Point name=Unnamed dimension=1 values=[-0.00565984] ddf (FD)=class=Point name=Unnamed dimension=1 values=[-0.00565984] log pdf=-4.3648 pdf =0.0127172 pdf (FD)=0.0127172 cdf=0.97201 ccdf=0.0279905 survival=0.0279905 Inverse survival=class=Point name=Unnamed dimension=1 values=[0.351846] Survival(inverse survival)=0.95 quantile=class=Point name=Unnamed dimension=1 values=[7.81473] cdf(quantile)=0.95 quantile (tail)=class=Point name=Unnamed dimension=1 values=[0.351846] cdf (tail)=0.95 pdf gradient =class=Point name=Unnamed dimension=2 values=[-0.00474156,-0.144349] cdf gradient =class=Point name=Unnamed dimension=2 values=[-0.0581774,-1.33806] Minimum volume interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.00315933] upper bound=class=Point name=Unnamed dimension=1 values=[7.81683] finite lower bound=[1] finite upper bound=[1] threshold=0.95 Minimum volume level set=class=LevelSet name=Unnamed dimension=1 function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,y0] evaluationImplementation=MinimumVolumeLevelSetEvaluation(Wishart(V = [[ 1 ]], nu = 3)) gradientImplementation=MinimumVolumeLevelSetGradient(Wishart(V = [[ 1 ]], nu = 3)) hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=1 values=[0.0001] evaluation=MinimumVolumeLevelSetEvaluation(Wishart(V = [[ 1 ]], nu = 3)) level=3.79922 beta=0.0223883 Bilateral confidence interval=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.215795] upper bound=class=Point name=Unnamed dimension=1 values=[9.3484] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (lower tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[7.81473] finite lower bound=[1] finite upper bound=[1] beta=0.95 Unilateral confidence interval (upper tail)=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0.351846] upper bound=class=Point name=Unnamed dimension=1 values=[59.8961] finite lower bound=[1] finite upper bound=[1] beta=0.95 mean=class=Point name=Unnamed dimension=1 values=[3] standard deviation=class=Point name=Unnamed dimension=1 values=[2.44949] skewness=class=Point name=Unnamed dimension=1 values=[1.63299] kurtosis=class=Point name=Unnamed dimension=1 values=[7] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[],[]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[3] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[15] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[105] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[945] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[10395] Standard representative=Wishart(V = [[ 1 ]], nu = 3) openturns-1.9/lib/test/t_ZipfMandelbrot_std.cxx000066400000000000000000000133231307543307100220130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief The test file of class ZipfMandelbrot for standard methods * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/OT.hxx" #include "openturns/OTtestcode.hxx" using namespace OT; using namespace OT::Test; class TestObject : public ZipfMandelbrot { public: TestObject() : ZipfMandelbrot(15, 1.2, 2.) {} virtual ~TestObject() {} }; int main(int argc, char *argv[]) { TESTPREAMBLE; OStream fullprint(std::cout); setRandomGenerator(); try { // Test basic functionnalities checkClassWithClassName(); // Instanciate one distribution object ZipfMandelbrot distribution(15, 1.2, 2.); fullprint << "Distribution " << distribution << std::endl; std::cout << "Distribution " << distribution << std::endl; // Is this distribution elliptical ? fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl; // Is this distribution continuous ? fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl; // Test for realization of distribution Point oneRealization = distribution.getRealization(); fullprint << "oneRealization=" << oneRealization << std::endl; // Test range fullprint << "getRange=" << distribution.getRange() << std::endl; // Test for sampling UnsignedInteger size = 1000; Sample oneSample = distribution.getSample( size ); fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl; fullprint << "mean=" << oneSample.computeMean() << std::endl; fullprint << "covariance=" << oneSample.computeCovariance() << std::endl; #if 0 size = 100; for (UnsignedInteger i = 0; i < 2; ++i) { fullprint << "ChiSquare test for the generator, sample size=" << size << " is " << (FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure() ? "accepted" : "rejected") << std::endl; size *= 10; } #endif // Define a point Point point( distribution.getDimension(), 5.0 ); fullprint << "Point= " << point << std::endl; // Show PDF and CDF of point Scalar LPDF = distribution.computeLogPDF( point ); fullprint << "log pdf=" << LPDF << std::endl; Scalar PDF = distribution.computePDF( point ); fullprint << "pdf =" << PDF << std::endl; fullprint << "pdf (FD)=" << (distribution.computeCDF( point + Point(1, 0) ) - distribution.computeCDF( point + Point(1, -1) )) << std::endl; Scalar CDF = distribution.computeCDF( point ); fullprint << "cdf=" << CDF << std::endl; Scalar CCDF = distribution.computeComplementaryCDF( point ); fullprint << "ccdf=" << CCDF << std::endl; Scalar Survival = distribution.computeSurvivalFunction( point ); fullprint << "survival=" << Survival << std::endl; Complex CF = distribution.computeCharacteristicFunction( point[0] ); fullprint << "characteristic function=" << CF << std::endl; Complex LCF = distribution.computeLogCharacteristicFunction( point[0] ); fullprint << "log characteristic function=" << LCF << std::endl; Complex GF = distribution.computeGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "generating function=" << GF << std::endl; Complex LGF = distribution.computeLogGeneratingFunction( Complex(0.3, 0.7) ); fullprint << "log generating function=" << LGF << std::endl; Point quantile = distribution.computeQuantile( 0.95 ); fullprint << "quantile=" << quantile << std::endl; fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl; Point mean = distribution.getMean(); fullprint << "mean=" << mean << std::endl; Point standardDeviation = distribution.getStandardDeviation(); fullprint << "standard deviation=" << standardDeviation << std::endl; Point skewness = distribution.getSkewness(); fullprint << "skewness=" << skewness << std::endl; Point kurtosis = distribution.getKurtosis(); fullprint << "kurtosis=" << kurtosis << std::endl; CovarianceMatrix covariance = distribution.getCovariance(); fullprint << "covariance=" << covariance << std::endl; CovarianceMatrix correlation = distribution.getCorrelation(); fullprint << "correlation=" << correlation << std::endl; CovarianceMatrix spearman = distribution.getSpearmanCorrelation(); fullprint << "spearman=" << spearman << std::endl; CovarianceMatrix kendall = distribution.getKendallTau(); fullprint << "kendall=" << kendall << std::endl; ZipfMandelbrot::PointWithDescriptionCollection parameters = distribution.getParametersCollection(); fullprint << "parameters=" << parameters << std::endl; for (UnsignedInteger i = 0; i < 6; ++i) fullprint << "standard moment n=" << i << ", value=" << distribution.getStandardMoment(i) << std::endl; fullprint << "Standard representative=" << distribution.getStandardRepresentative()->__str__() << std::endl; } catch (TestFailed & ex) { std::cerr << ex << std::endl; return ExitCode::Error; } return ExitCode::Success; } openturns-1.9/lib/test/t_ZipfMandelbrot_std.expout000066400000000000000000000056021307543307100225360ustar00rootroot00000000000000Testing class ZipfMandelbrot checkConstructorAndDestructor() checkCopyConstructor() streamObject(const T & anObject) class=ZipfMandelbrot name=ZipfMandelbrot dimension=1 n=15 q=1.2 s=2 streamObject(const T & anObject) class=ZipfMandelbrot name=ZipfMandelbrot dimension=1 n=15 q=1.2 s=2 areSameObjects(const T & firstObject, const T & secondObject) areDifferentObjects(const T & firstObject, const T & secondObject) Distribution class=ZipfMandelbrot name=ZipfMandelbrot dimension=1 n=15 q=1.2 s=2 Distribution ZipfMandelbrot(n = 15, q = 1.2, s = 2) Elliptical = false Continuous = false oneRealization=class=Point name=Unnamed dimension=1 values=[1] getRange=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1] upper bound=class=Point name=Unnamed dimension=1 values=[15] finite lower bound=[1] finite upper bound=[1] oneSample first=class=Point name=Unnamed dimension=1 values=[1] last=class=Point name=Unnamed dimension=1 values=[1] mean=class=Point name=Unnamed dimension=1 values=[3.256] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10.2227] Point= class=Point name=Unnamed dimension=1 values=[5] log pdf=-2.98176 pdf =0.0507037 pdf (FD)=0.0507037 cdf=0.826308 ccdf=0.173692 survival=0.173692 characteristic function=(-0.0642737,-0.384155) log characteristic function=(-0.942905,-1.73657) generating function=(0.394858,0.153137) log generating function=(-0.859168,0.36997) quantile=class=Point name=Unnamed dimension=1 values=[10] cdf(quantile)=0.95019 mean=class=Point name=Unnamed dimension=1 values=[3.22681] standard deviation=class=Point name=Unnamed dimension=1 values=[3.10469] skewness=class=Point name=Unnamed dimension=1 values=[1.81133] kurtosis=class=Point name=Unnamed dimension=1 values=[5.84423] covariance=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.63912] correlation=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] spearman=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] kendall=class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters=[[n : 15, q : 1.2, s : 2]] standard moment n=0, value=class=Point name=Unnamed dimension=1 values=[1] standard moment n=1, value=class=Point name=Unnamed dimension=1 values=[3.22681] standard moment n=2, value=class=Point name=Unnamed dimension=1 values=[20.0514] standard moment n=3, value=class=Point name=Unnamed dimension=1 values=[181.116] standard moment n=4, value=class=Point name=Unnamed dimension=1 values=[1953.27] standard moment n=5, value=class=Point name=Unnamed dimension=1 values=[23117.7] Standard representative=ZipfMandelbrot(n = 15, q = 1.2, s = 2) openturns-1.9/python/000077500000000000000000000000001307543307100147445ustar00rootroot00000000000000openturns-1.9/python/CMakeLists.txt000066400000000000000000000002711307543307100175040ustar00rootroot00000000000000# -*- cmake -*- include_directories (${PYTHON_INCLUDE_DIRS}) # Recurse in subdirectories add_subdirectory (src) add_subdirectory (test) openturns-1.9/python/doc/000077500000000000000000000000001307543307100155115ustar00rootroot00000000000000openturns-1.9/python/doc/_templates/000077500000000000000000000000001307543307100176465ustar00rootroot00000000000000openturns-1.9/python/doc/_templates/Copula.rst_t000066400000000000000000000020611307543307100221450ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if (ot.{{ objname }}().__class__.__name__=='SklarCopula'): myStudent = ot.Student(3.0, [1.0]*2, [3.0]*2, ot.CorrelationMatrix(2)) copula = ot.SklarCopula(myStudent) else: copula = ot.{{ objname }}() if copula.getDimension() == 1: copula = ot.{{ objname }}(2) copula.setDescription(['$u_1$', '$u_2$']) pdf_graph = copula.drawPDF() cdf_graph = copula.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(copula)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) pdf_axis.set_aspect('equal') cdf_axis.set_aspect('equal') .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/CovarianceModel.rst_t000066400000000000000000000026461307543307100237660ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View covarianceModel = ot.{{ objname }}() if covarianceModel.getSpatialDimension() == 1: scale = covarianceModel.getScale()[0] if covarianceModel.isStationary(): def f(x): return [covarianceModel(x)[0, 0]] func = ot.PythonFunction(1,1,f) func.setDescription(['$tau$', '$cov$']) cov_graph = func.draw(-3.0 * scale, 3.0 * scale, 129) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(covarianceModel)) cov_axis = fig.add_subplot(111) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) else: def f(x): return [covarianceModel([x[0]], [x[1]])[0, 0]] func = ot.PythonFunction(2,1,f) func.setDescription(['$s$', '$t$', '$cov$']) cov_graph = func.draw([-3.0 * scale]*2, [3.0 * scale]*2, [129]*2) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(covarianceModel)) cov_axis = fig.add_subplot(111) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/Distribution.rst_t000066400000000000000000000034711307543307100234070ustar00rootroot00000000000000{{ objname }} distribution {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if (ot.{{ objname }}().__class__.__name__=='ComposedDistribution'): correlation = ot.CorrelationMatrix(2) correlation[1, 0] = 0.25 aCopula = ot.NormalCopula(correlation) marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] distribution = ot.ComposedDistribution(marginals, aCopula) elif (ot.{{ objname }}().__class__.__name__=='CumulativeDistributionNetwork'): distribution = ot.CumulativeDistributionNetwork([ot.Normal(2),ot.Dirichlet([0.5, 1.0, 1.5])], ot.BipartiteGraph([[0,1], [0,1]])) else: distribution = ot.{{ objname }}() dimension = distribution.getDimension() if dimension <= 2: if distribution.getDimension() == 1: distribution.setDescription(['$x$']) pdf_graph = distribution.drawPDF() cdf_graph = distribution.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) else: distribution.setDescription(['$x_1$', '$x_2$']) pdf_graph = distribution.drawPDF() fig = plt.figure(figsize=(10, 5)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(111) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/DistributionFactory.rst_t000066400000000000000000000030621307543307100247330ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) factory = ot.{{ objname }}() ref = factory.build() dimension = ref.getDimension() if dimension <= 2: sample = ref.getSample(50) distribution = factory.build(sample) if dimension == 1: distribution.setDescription(['$t$']) pdf_graph = distribution.drawPDF(256) cloud = ot.Cloud(sample, ot.Sample(sample.getSize(), 1)) cloud.setColor('blue') cloud.setPointStyle('fcircle') pdf_graph.add(cloud) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(111) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) else: sample = ref.getSample(500) distribution.setDescription(['$t_0$', '$t_1$']) pdf_graph = distribution.drawPDF([256]*2) cloud = ot.Cloud(sample) cloud.setColor('red') cloud.setPointStyle('fcircle') pdf_graph.add(cloud) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(111) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/FilteringWindow.rst_t000066400000000000000000000015761307543307100240470ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View filteringWindow = ot.{{ objname }}() numPoints = 512 data = ot.Sample(numPoints, 2) for i in range(numPoints): x = -0.1 + (1.2 * i) / (numPoints - 1.0) data[i, 0] = x data[i, 1] = filteringWindow(x) graph = ot.Graph() graph.setXTitle('$tau$') graph.setYTitle('W') graph.add(ot.Curve(data)) graph.setColors(['red']) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(filteringWindow)) filtering_axis = fig.add_subplot(111) View(graph, figure=fig, axes=[filtering_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/LowDiscrepancySequence.rst_t000066400000000000000000000014031307543307100253400ustar00rootroot00000000000000{{ objname }} {{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Generate points with the given sequence sequence = ot.{{ objname }}(2) sample = sequence.generate(1000) # Create the graph graph = ot.Graph("", "x1", "x2", True, "") cloud = ot.Cloud(sample) graph.add(cloud) # Draw the graph fig = plt.figure(figsize=(4, 4)) plt.suptitle("Sequence of 1000 points") axis = fig.add_subplot(111) View(graph, figure=fig, axes=[axis], add_legend=False) axis.set_xlim(auto=True) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/OrthogonalUniVariateFunctionFamily.rst_t000066400000000000000000000025771307543307100277120ustar00rootroot00000000000000{{ objname }} {{ underline }} .. plot:: :include-source: False import openturns as ot import numpy as np from matplotlib import pyplot as plt n_functions = 8 function_factory = ot.{{ objname }}() if function_factory.getClassName() == 'KrawtchoukFactory': function_factory = ot.{{ objname }}(n_functions, .5) functions = [function_factory.build(i) for i in range(n_functions)] measure = function_factory.getMeasure() if hasattr(measure, 'getA') and hasattr(measure, 'getB'): x_min = measure.getA() x_max = measure.getB() else: x_min = measure.computeQuantile(1e-3)[0] x_max = measure.computeQuantile(1. - 1e-3)[0] n_points = 200 meshed_support = np.linspace(x_min, x_max, n_points) fig = plt.figure() ax = fig.add_subplot(111) for i in range(n_functions): plt.plot(meshed_support, [functions[i](x) for x in meshed_support], lw=1.5, label='$\phi_{' + str(i) + '}(x)$') plt.xlabel('$x$') plt.ylabel('$\phi_i(x)$') plt.xlim(x_min, x_max) plt.grid() box = ax.get_position() ax.set_position([box.x0, box.y0, box.width, box.height * 0.9]) plt.legend(loc='upper center', bbox_to_anchor=(.5, 1.25), ncol=4) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/Process.rst_t000066400000000000000000000013001307543307100223330ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View process = ot.{{ objname }}() process.setTimeGrid(ot.RegularGrid(0.0, 0.02, 50)) process.setDescription(['$x$']) sample = process.getSample(6) sample_graph = sample.drawMarginal(0) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(process)) sample_axis = fig.add_subplot(111) View(sample_graph, figure=fig, axes=[sample_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/SecondOrderModel.rst_t000066400000000000000000000023371307543307100241200ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View secondOrderModel = ot.{{ objname }}() if secondOrderModel.getSpatialDimension() == 1: scale = secondOrderModel.getCovarianceModel().getScale()[0] def f(x): return [secondOrderModel.computeCovariance(x)[0, 0]] func = ot.PythonFunction(1,1,f) func.setDescription(['$tau$', '$cov$']) cov_graph = func.draw(-3.0 * scale, 3.0 * scale, 129) # Sepctral density def g(x): return [secondOrderModel.computeSpectralDensity(x)[0, 0]] func2 = ot.PythonFunction(1,1,f) func2.setDescription(['$f$', '$spd$']) spec_graph = func2.draw(1, 10, 129) fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(secondOrderModel)) cov_axis = fig.add_subplot(121) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) spec_axis = fig.add_subplot(122) View(spec_graph, figure=fig, axes=[spec_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/SpectralModel.rst_t000066400000000000000000000013461307543307100234650ustar00rootroot00000000000000{{ objname }} {{ underline }}{{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View spectralModel = ot.{{ objname }}() if spectralModel.getSpatialDimension() == 1: spec_graph = spectralModel.draw(0, 0, True) spec_graph.setXTitle('f') spec_graph.setYTitle('Spectral Density') fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(spectralModel)) spec_axis = fig.add_subplot(111) View(spec_graph, figure=fig, axes=[spec_axis], add_legend=False) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/StratifiedExperiment.rst_t000066400000000000000000000015061307543307100250640ustar00rootroot00000000000000{{ objname }} {{ underline }} .. plot:: :include-source: False import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Generate sample with the given plane center = [0.5, 1.5] levels = [4, 8, 16] myPlane = ot.{{ objname }}(center, levels) sample = myPlane.generate() # Create the graph graph = ot.Graph("", "x1", "x2", True, "") cloud = ot.Cloud(sample, "blue", "fsquare", "") graph.add(cloud) # Draw the graph fig = plt.figure(figsize=(4, 4)) plt.suptitle(sample.getName()) axis = fig.add_subplot(111) View(graph, figure=fig, axes=[axis], add_legend=False) axis.set_xlim(auto=True) .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/class.rst_t000066400000000000000000000002451307543307100220310ustar00rootroot00000000000000{{ objname }} {{ underline }} .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/classWithPlot.rst_t000066400000000000000000000003421307543307100235220ustar00rootroot00000000000000{{ objname }} {{ underline }} .. plot:: pyplots/{{ objname }}.py :include-source: False .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} openturns-1.9/python/doc/_templates/function.rst_t000066400000000000000000000001401307543307100225430ustar00rootroot00000000000000{{ objname }} {{ underline }} .. currentmodule:: {{ module }} .. autofunction:: {{ objname }} openturns-1.9/python/doc/_templates/functionWithPlot.rst_t000066400000000000000000000002371307543307100242450ustar00rootroot00000000000000{{ objname }} {{ underline }} .. plot:: pyplots/{{ objname }}.py :include-source: False .. currentmodule:: {{ module }} .. autofunction:: {{ objname }} openturns-1.9/python/doc/about.rst000066400000000000000000000030201307543307100173500ustar00rootroot00000000000000.. _about: About us ======== History ------- Since the beginning of 2005, a partnership of three companies has been working on building together a tool designed to perform uncertainty treatment and reliability analysis. The first release 0.9.0 dates back from 2007. Since then, the project published bi-yearly releases. People ------ - Anne Dutfoy - Antoine Dumas - Aurelie Ladier - Denis Barbier - Felipe Aguirre Martinez - Ivan Dutka-Malen - Julien Schueller - Mathieu Couplet - Mathieu Lapointe - Mathieu Souchaud - Regis Lebrun - Romuald Conty - Sofiane Haddad - Vincent Dubourg Meetings -------- Each year a users day event is planned at the beginning of the summer allowing users to exchange on their use of the library and keep up with the new features. The 2017 edition is held at EDF R&D Chatou (France) on the 6th of June. Citing OpenTURNS ---------------- If you use OpenTURNS in a scientific publication, we would appreciate citations to the following paper: .. code-block:: bash @article{OpenTURNS, title={OpenTURNS: An industrial software for uncertainty quantification in simulation}, author={Michaël Baudin, Anne Dutfoy, Bertrand Iooss, Anne-Laure Popelin}, year={2015} } Funding ------- `Airbus Group `_ funds work since the beginning. `EDF Research and Development `_ funds work since the beginning. `IMACS `_ joined the partnership in 2014. `Phimeca Engineering `_ funds work since the beginning. openturns-1.9/python/doc/bibliography.rst000066400000000000000000000157661307543307100207350ustar00rootroot00000000000000.. _bibliography: ============ Bibliography ============ .. [Au2001] Au, S. K. *Estimation of small failure probabilities in high dimensions by subset simulation*. Prob. Eng. Mech., 2001, 16(4), 263-277. `pdf `__ .. [Blatman2009] Blatman, G. *Adaptive sparse polynomial chaos expansions for uncertainty propagation and sensitivity analysis.*, PhD thesis. Blaise Pascal University-Clermont II, France, 2009. `pdf `__ .. [Caniou2012] Caniou, Y. *Global sensitivity analysis for nested and multiscale modelling.* PhD thesis. Blaise Pascal University-Clermont II, France, 2012. `pdf `__ .. [Damblin2013] G. Damblin, M. Couplet and B. Iooss. *Numerical studies of space filling designs: optimization of Latin hypercube samples and subprojection properties.* Journal of Simulation, 7:276-289, 2013. `pdf `__ .. [Fang2006] K-T. Fang, R. Li, and A. Sudjianto. *Design and modeling for computer experiments.* Chapman & Hall CRC, 2006. .. [Gamboa2013] Gamboa, F., Janon, A., Klein, T. & Lagnoux, A. *Sensitivity analysis for multidimensional and functional outputs.* 2013 `pdf `__ .. [Jansen1999] Jansen, M.J.W. *Analysis of variance designs for model output*, Computer Physics Communication, 1999, 117, 35-43. `pdf `__ .. [Jin2005] R. Jin, W. Chen, and A. Sudjianto. *An efficient algorithm for constructing optimal design of computer experiments.* Journal of Statistical Planning and Inference, 134 :268-287, 2005. `pdf `__ .. [Johnson1990] Johnson M, Moore L and Ylvisaker D (1990). *Minimax and maximin distance design.* Journal of Statistical Planning and Inference 26(2): 131-148. .. [Jones1998] Donald R. Jones, Matthias Schonlau and William J Welch. *Global optimization of expensive black-box functions*, Journal of Global Optimization, 13(4), 455-492, 1998. `pdf `__ .. [Knight1966] Knight, W. R. *A Computer Method for Calculating Kendall's Tau with Ungrouped Data.* Journal of the American Statistical Association, 1966, 61(314, Part 1), 436-439. `pdf `__ .. [Koehler1996] J.R. Koehler and A.B. Owen. *Computer experiments. In S. Ghosh and C.R. Rao, editors, Design and analysis of experiments, volume 13 of Handbook of statistics.* Elsevier, 1996. .. [Lebrun2009a] Lebrun, R. & Dutfoy, A. *An innovating analysis of the Nataf transformation from the copula viewpoint.* Prob. Eng. Mech., 2009, 24, 312-320. `pdf `__ .. [Lebrun2009b] Lebrun, R. & Dutfoy, A. *A generalization of the Nataf transformation to distributions with elliptical copula.* Prob. Eng. Mech., 2009, 24, 172-178. `pdf `__ .. [Lebrun2009c] Lebrun, R. & Dutfoy, A. *Do Rosenblatt and Nataf isoprobabilistic transformations really differ?* Prob. Eng. Mech., 2009, 24, 577-584. `pdf `__ .. [Martinez2011] Martinez, J-M., *Analyse de sensibilite globale par decomposition de la variance*, Presentation in the meeting of GdR Ondes and GdR MASCOT-NUM, January, 13th, 2011, Institut Henri Poincare, Paris, France .. [McKay1979] McKay M, Beckman R and Conover W (1979). *A comparison of three methods for selecting values of input variables in the analysis of output from a computer code.* Technometrics 21(2): 239-245. `pdf `__ .. [Minka2012] Thomas P. Minka, *Estimating a Dirichlet distribution*, Microsoft Research report, 2000 (revised 2003, 2009, 2012). `pdf `__ .. [Morris1995] D. Morris and J. Mitchell. *Exploratory designs for computational experiments.* Journal of Statistical Planning and Inference, 43 :381-402, 1995. `pdf `__ .. [Munoz2011] M. Munoz Zuniga, J. Garnier, E. Remy and E. de Rocquigny, *Adaptative Directional Stratification for controlled estimation of the probability of a rare event*, Reliability Engineering and System Safety, 2011. `pdf `__ .. [Nataf1962] Nataf, A. *Determination des distributions dont les marges sont donnees.* C. R. Acad. Sci. Paris, 1962, 225, 42-43. `pdf `__ .. [NLopt] Steven G. Johnson, The NLopt nonlinear-optimization package, http://ab-initio.mit.edu/nlopt .. [Pronzato2012] Pronzato L and Muller W (2012). *Design of computer experiments: Space filling and beyond.* Statistics and Computing 22(3): 681-701. `pdf `__ .. [Rai2015] Rai, P. *Sparse Low Rank Approximation of Multivariate Functions - Applications in Uncertainty Quantification.*, PhD thesis. Ecole Centrale de Nantes, France, 2015. `pdf `__ .. [Rosenblatt1952] Rosenblatt, M. *Remarks on a multivariate transformation.* Ann. Math. Stat., 1952, 23, 470-472. `pdf `__ .. [Saltelli1999] Saltelli, A., Tarantola, S. & Chan, K. *A quantitative, model independent method for global sensitivity analysis of model output.* Technometrics, 1999, 41(1), 39-56. `pdf `__ .. [Saltelli2002] Saltelli, A. *Making best use of model evaluations to compute sensitivity indices.* Computer Physics Communication, 2002, 145, 580-297. `pdf `__ .. [Simard2011] Simard, R. & L'Ecuyer, P. *Computing the Two-Sided Kolmogorov- Smirnov Distribution.* Journal of Statistical Software, 2011, 39(11), 1-18. `pdf `__ .. [Sobol1993] Sobol, I. M. *Sensitivity analysis for non-linear mathematical model* Math. Modelling Comput. Exp., 1993, 1, 407-414. `pdf `__ .. [Sobol2007] Sobol, I.M., Tarantola, S., Gatelli, D., Kucherenko, S.S. and Mauntz, W. *Estimating the approximation errors when fixing unessential factors in global sensitivity analysis*, Reliability Engineering and System Safety, 2007, 92, 957-960. `pdf `__ .. [SoizeGhanem2004] Soize, C., Ghanem, R. *Physical systems with random uncertainties: Chaos representations with arbitrary probability measure*, SIAM Journal on Scientific Computing, Society for Industrial and Applied Mathematics, 2004, 26 (2), 395-410. `pdf `__ openturns-1.9/python/doc/conf.py.in000066400000000000000000000236141307543307100174230ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # OpenTURNS documentation build configuration file, created by # sphinx-quickstart on Wed Mar 12 14:11:36 2014. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os import subprocess # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('sphinxext')) sys.path.insert(0, '@OPENTURNS_PYTHON_BUILD_MODULE_PATH@') # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [] extensions.append('sphinx.ext.autodoc') autodoc_default_flags = ['members', 'inherited-members'] extensions.append('sphinx.ext.autosummary') autosummary_generate = True extensions.append('execforresourcemap_directive') extensions.append('numpydoc') numpydoc_show_class_members = True numpydoc_class_members_toctree = False extensions.append('nbsphinx') nbsphinx_execute = 'never' # dont add .txt suffix to notebook html_sourcelink_suffix = '' extensions.append('IPython.sphinxext.ipython_console_highlighting') extensions.append('sphinx.ext.doctest') extensions.append('sphinx.ext.todo') todo_include_todos = True extensions.append('sphinx.ext.coverage') try: import sphinx.ext.imgmath extensions.append('sphinx.ext.imgmath') imgmath_latex_preamble = "\usepackage{%smath_notations}" % ( os.path.dirname(__file__) + os.sep) imgmath_use_preview = True if subprocess.call('dvisvgm -V', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0: imgmath_image_format = 'svg' except ImportError: extensions.append('sphinx.ext.pngmath') pngmath_latex_preamble = "\usepackage{%smath_notations}" % ( os.path.dirname(__file__) + os.sep) # The next option is used for smart-alignment of math images on the text. # It only works when the preview-latex package is installed. # See http://sphinx-doc.org/latest/ext/math.html#confval-pngmath_use_preview pngmath_use_preview = True extensions.append('matplotlib.sphinxext.plot_directive') # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'OpenTURNS' copyright = u'2005-2017 Airbus-EDF-IMACS-Phimeca' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '@OPENTURNS_VERSION_MAJOR@.@OPENTURNS_VERSION_MINOR@' # The full version, including alpha/beta/rc tags. release = '@OPENTURNS_VERSION@' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build', 'themes', 'sphinxext', '**.ipynb_checkpoints'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = False # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'friendly' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'openturns' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['themes'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = 'themes/openturns/static/favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'OpenTURNSdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). 'papersize': 'a4paper', # The font size ('10pt', '11pt' or '12pt'). 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. 'preamble': '\usepackage{math_notations}', } latex_additional_files = ['math_notations.sty'] # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('contents', 'OpenTURNS.tex', u'OpenTURNS Documentation', u'Airbus Group - EDF - IMACS - Phimeca Engineering', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'openturns', u'OpenTURNS Documentation', [u'Airbus Group - EDF - IMACS - Phimeca Engineering'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'OpenTURNS', u'OpenTURNS Documentation', u'Airbus Group - EDF - IMACS - Phimeca Engineering', 'OpenTURNS', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False openturns-1.9/python/doc/contents.rst000066400000000000000000000004551307543307100201040ustar00rootroot00000000000000.. _contents: Contents ======== .. toctree:: :maxdepth: 2 install user_manual/user_manual examples/examples theory/theory developer_guide/developer_guide bibliography about Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` openturns-1.9/python/doc/developer_guide/000077500000000000000000000000001307543307100206535ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/000077500000000000000000000000001307543307100222575ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/BrowseSource.png000077500000000000000000003717651307543307100254350ustar00rootroot00000000000000PNG  IHDRwDsBIT|d pHYs f IDATxw|e}gf;)$л;z6,`YNT,`rzV,wgY~; (EEJ!!-SI$&HOv'3.w]FtѮGwbHJG QS:DP"""""""ծ!O{+;Q[4KaI"MuQ{hبF~VіI} tQG/i*ixN@'^oQKk,&i5m+i,!"""""""jœ?c?(5 G`'^HCDDDDDDD6ϦA wj~52j~: xȚP&lj<VhXX#GzԚ"""""""jC&)5PaO~݀aobo$ĸI@ *Q`'Q[5NO)Uu#P vӦOK& vdH[FC$ v vQ[v*P@7g[ȣ95#y zV xZ207yrPG@#mJ)JyGQB TJ:ѠGJg[#ӵ$jhPG_9R)%#QsP- "pGHGCBU @T:mOs4?IehK[rIv$[!"""""""j#u" DX:GHͮySYTs#ipG`ǧ#בqk14vqI !TOr!B$@(!!8",!M[Ȱ-ҩҁx=:DԨF֔ckehnДakJRHCJiQB a;02Y}JeB05;,M[DL[H͖DoO xٸ&.uT_nXzuk4G3tҥ#](fQcV;.HM"Bs$6@ (J* U); XZdΝ w [4 M\f:a.[]J ФfK5)a&%4)R€pZ[ R.qlqe;8.KmS}Ti 'Ԓ#wJqDtd-]}*5k{tGp ÐR5ДR꺮tee;²4q숮k²l%D,\qA!b)u?WNUiWnNR7ZhsNv>S}:Kɓ]vG;e(.e(Cup9aHMR5$GQs G9e ۱mJ͔2b*!v8CDn[K(e QP~UOJqFzCOk 5jgX^T v&5G\KnC. tRw5 2 T:"""""""ju"YB8lH)+"#&)G嶄8B+(gA;uGب8ceZ@@(e ؚr 4[SRҕRsKwknWwܚvKn4tC MP}r8ep#aikk•la+%GlB)a:J:"r RoӳZ"i8NTϵ+%G֤4Gjp41 ].% C蚡^.W|>n˥kBs =17QLlX *Q%5DuT8.Dtlq t,enGj%դ?q*UpH w%TՕWJ(H(GVRi.MIGRRBWRhztnWu II.ׯ{|g3~ĀeI4wDDDDDDDDi⬜-SB.ݮ4R˲4 ]Hغc)GjFHa::QjԩY;6q&O3CC58>tv 5 v4#nI>OS  x [f$iiDDDDDDDD.C&UukTWeኢܬ V  "rp WFH ´LEnAV4ź T8?ko| qמJnIq!‘BӤД&\!4å}^)gio++[;F)s;Ѯ5l;h! Wu'{cf(ͰSh.̈fKneȈR)MUDTQ;N1-:rKMP8ζӳʭRJe;RWJBIRt4\.H|#HD"-TsPQ(@(8V7""""""֚^v$=2']nzrIK]JJ %T#2?ԶӱvZ$j EeQJ C( MR]Ӥ!Ru]!.l*^4,:EP!=]Ul 4MWTbȰ!lGAJ)lúk-0]>QG֚P8)|^/쮬At]4&tMiMMPlj\PImB6lɓ[~|c?w}+:nⰅ 1Яb-2EX$AIY98@膁p$cmHMK>ݒ矐 ˵s &"""""" Z_ܙʶL!Ӵy;iӲڅ>߼>]އ'.)*b]^%~XU\}PmckVP ÈD"n0B 9y[`&"FneJq~|zфx˻mmvÏ¿҉vcOD]Sk۲`UU̲UU]?ߩÝ0KlLwOqhp)r Ӂ-]T A CRs,ҡB*H[ n 9;+*ڠDD-YG9M&o)c-kI9 +B8nvv(sGS\\ `W8Ӱlٲz˖-[Cvri8S݂`Bņ^ fDԩfrs[vy!Dh_|WO.ӟP՗GP.rs\5 J·+yxwnymhjAE:BD(XH$-TU^{,x <6W{wcu[;H><^o۴G;D_{IOO9?[6{t޽ed[RXf-V]*?// Da^N׋株^_8XUٛ/n7_Oc}ɘL<أCx߷u_ӌt|wk(Pa2O O^ Q5J$!Sd6r K$/[V/3#!xw\DD͑]~.Jlܸ1|̳ƍSb˖-٘>1#g3fgkƑ$"j]< ~뭨6mzaDMSo <4>fc##of͚)'wz RN8p,@@q_ᝲؼŹQ9 fA.T^N=c@4δ,(p3W^AyeEe4Q eY+L'W_.߰a~e!N>TL^~NL7ì,g;k0~^{zCսʕ3w>c!Ï?kOի`РA)JnHo/8{/ /N"n;V_y5,Z=(rtۺO7x,\+`޼8SbӰ =̬,]~̟?|v-񚉧a /Sʫ}~ⵯzc?!c41f|7ǎxᅰkW^őG|sWWaVjZ\j?~[ŋo. qG;P ᮻByE9lذN2*{E._O?f|֬>w v8䓱lr{HKKEA.՟WjJ0 `@U>{O0RWf~OA e-BecH7NV81av^yulXf$]&@8Fduv+W!~(Mq>|ժ՘x%]'h ͭ*@n!T<8K-! f@Wi׋/,?Vg7>/^lihֻn-[W^}6drl(,/nCDGOsP8?3fj_z㺣>k&z5kD 葞V/܉[|)>Lޜ5k+\JUo?/\Q@>< nQ[h/x ǤЭ[2zmTUÌD/nXM9x'pAbͪmPt̘.{|gxWqۭ7_< O;ȝ"P8[~[S\fZU,h%¹[a.n:<^rvYwBz\xzˈE(+EEYv8KK oUJaj:,}em  ! t]GN^8NшU| BJtѲ7߾]]񂝔TDoGzzzv؇8(92&^ c+¯` -9Eaa!VZ]ב]9{zjOcumH8۶aYV~M-IT$AiI1QjsQ^"Ǹ5SqpШQx0QM߼y1h &'%ꞒOSXb#Cufo╵C/.).D^&3 0YXe_1*Xn "06f!CcM7t~!>S1boۘ7o>^.՟1pT`uC*`7}+KlFbc\xEBMYH=HwnVt-i;*Qk/..*DΦ OQQV*{Xz `v쌌x{fr8Vo.إ:I=PQ+}#8o N虏{lwf#s@VAr-S)]~Y+^"Hܛ/,Fjj 4٩)Q\{uxww貛ok֮y_{7Փv9nλp㍘>%0lذfy9\x!Xt)LĆkj{6%!gO Rc0 a0{s]u3V{kSeƻ{DJjwf1DD5ŝlMѻo?ȇoK %őHyiTTT(3! ,nj`8lS)R-HiTBx;5?kj>ܩFo./ԀP`ð9G7DM1MsrǺ(++!Cp( Ǎ-XHIJ!Cѧw/k9ScN]~ŕxz\3kWsIx0зOo>lٲ[b `СDjJvWI "ڕZII;/7Ĝ?Ԯ]YٛǞv1Ѯ5ŝ쎪ӷ@4 2}AɸPXT (ہÐTt>ߴ꺎4$''_~\:<|> ]7DD td ۙڵYfU{W1&"5fupFff&233[\!\Wr2ܢeut/ew4cCDDDDDDDԉupٓDNKt9wjGQ J9ir{FJ @ )bۍ:N0ǁe;2B،l:!jMJhp B$ y:].ܩ uLBIiJKa)̴4 >Ѝ.Q3-e*X P螜 ]gCDDDDDIRR e%0tkOdgʁc;p8"p{W6>_3{b/(Q\VuQ˄;l-@AQF{i IDAT]=6S;m8zyqAؔKV2%>jN""""""i)-(-GwF:B ljue! WF<|*+%ڄDDDDDDvpq:@ C,˂0DAI9 Ky8"""""eu|8,"3b8܆*Qǁ0>ñe}CDDDDDAu9wG!'={IpϿϿ? t8~8tYmvi-y߻8Qӥq`I(رmwy'f|vdo܈чqcqwC׻!]m>l q2ӻCJO<לws^Ww75kKDDDDDk+PPT{\߶mLt">y*0/0҉<߇QX\S+S9b4 |VN ֐h֥vPX\3˖,>#GW^矏 }oaȑXt);v+ egg3ܥڼS@ޙ/.e; ձt)TR i,Bzjr/7|ACc} >C|ч~淸pcА/~UҔN8– `Ԩ h}eb9Ceꕫpιb+]֔)atlP@Ķw """"""^ wPZV$H]kr{hN~|>! @ Ǝޯm{((,l}-X|H-K3;08z3VW[o8 GjRPZV'm,DY e7.%ˆ;Q(DZR24t!%RRR\oVox֭[>g}6֭[]~#%^ pc0gΜw='|r@QaRĉp13΀R*n/2Fu:趖e~Хڵ7x#Fu.B(ⶽa[7Ϗތo >}#=p:ҒQZQ 4]es1e (2P0mUfA+mb19lL=< Ɗm..^vUTO ]'@}FZz:n6{ OOk׮YG5G{]{.~B`ݺu7oxr?o^tPIK.oRNekxze._C Rkأ6{H}<#8`nTVV4ni=z[n}>-^p- =##r$6vh<0c8sJs Il nc)u@ae)6!;,nLyfoDDDDDD.9rG)ǶP {rXWq4q6˗裏1e˖iŋYt)|.p6nٛGnI~.8C=]];F1aEѣ'ްޭEuIITCplQFeX-T2\P*4+W7|6e;\7"""""]Y w!0ڦgf& XUgjrY  z ()g1 \.: !l뚆H$p / 1qG˞'r]]dlݺ58wu>vOh{k)}>|gd =#޲5UPU_fcβQPH!fs)D@@% !"""""j.VT{j&SR((*߀,_aڴiAhg}^{g^{Uwٛ6/İaâF7/0{T]EEe?4>G)LWԜSQQ0|.ծ~ax'PXTb<8# f8k(m{Kya`[nUج4MCԤyww2x<~;',;W,;W,: %`634c<3M%"""""j%:]2ܱm%HIJL4ÌXR´mvYuѢ:>K'MBQQQt_=Ѳz 4/N'O\{x1NŲK0pÍSHO0_~W_}5zas{<矱BӶe]]@;rup8p_׋k}Lz#V\+R*7GSqIs=Nmȳ{ಉUHIJFqI.e.mB t~ODDDDDD;fG{Tu5E&lipxuC3\f8^KKnq%'R)Դ]6²*B$`!Guϴi7W?}MC~K-ùWܿNM^@SF|v7\6JTٰ| gyFjWm*jKSnX=z[ 0k/8⠑p\ͪψ r1Qz鋓`iqa8RRX)/-B eCP0X G"mJ6e8bUʠ)m6PQtj~ޯB]jYR()t&6r;n_}QHNN~'~=#qӍ7&TvNp Z;RFce6\履~ƅ\>jwv[DT@jj2 h I (4dj=v%],lBduK7v,N<tʩRg~`fd&\}d: D|%.jMЯWOL(NK vZHBĴ3Nr!n+3g͂۵v=0;~N׷3 ͩkgj5 g|@$L,#>=Zy 0!"""""jA?IL3,1tK n/\|$-҉l,DƜdoɇm;;N849w+.Y?u^w{WKz<3OXd6nipCDDDDDD-㟖ՀR*zmXcFc`ް.ND;F)}{c#ws1 C0iZjiFDDDDD:McYAĴ PVQrT >~`-ضOƬ`o+"%~x= RJz4=~1zgL23z1۲u8u/X:TUUwvʟBB:Ms`Y&lˮ9-ˁc۰l`GRJ! BJ>z_~BBI pIDDDDDly[rڻ 4NIQa{WU!"""""ڥteQarJpڌc].ӜL–غu+JKQUU3R=r!%%=zDf^ukLDDDDDDuYRlSQ^U~GvFO~:t7$uKvpeeukpO۷?vcOڹDDDDDDD]8].˅;maŲeXa r&^Ou^2d{@8ŠK1/1h05|oHMku]<-u9wT3֭(w~PN8TwqX^; ;TTUV` _i"""""""ɲ.3r?='9}4-] eALDDDy^A;:ן ۰fD-+:ю;-K;qcA-T#A[7,Y-T6uF6/? N΢_qNBۮbD-,:Ojm[7۞-l3p` 4~>lHDDK?` UU V1ءN/:u>Y|%%a#B$vֈrvDDDDM2f<{{Ì`:!4Mi o+wt}cMDQuӲ*˱~:pH|)>1c4y6f#ُguq˗/^{ "'VM ˶0cXY:wc Zֶ/4)+.xB!ܹ<,;1imEApȟ1#Ǎ= 59|5S;V!CvkFR )%^>,vhՔN<Me[NlM͛pg$XNu/`8`,6>묄J>|8ȣrbo²,!## (,,D~~>.\BH)q6_Gh|[{F\ ]vhoxƢE@e!''B,lkgRP5}Nhnu%ť5 )I6ۧ٣'{fF7KӴz_}u|;s&vLZoÏa )9@hҥX`cpݵ螖Cp0^>3fOMscՉI8(UJ! b0K[Ӧ[r7#9%n';Ϛ>{񠴴]v gz acn6,^Xf p"99Pܧl\)ϊ.{w/NvJ<4vwII {=L4)XxI16wm툺j:`(V9GL$лg:Fip'++ -DZL-[PTrܑ!j=sX" EU9Zά-HJIӎ; IM.Ć,\};֭_A M0<(t'%W^;z¬9sg4Mt 0eU8[-HVAUA$67RP/4{E^VL*!nߎVO)k>nVؖCbqc߾G ֭X"|شiz#BDZ|t3?4iּ֥<75c;ee8餓p'"$߾}acm`6| >Z*rʳpP1۠‹sMqK{k;_[/WP{s{큱7UŹjDЧ 6`q7TYYqcW_lij- j:9yj/*)CQIVYi.] ={Fgff²,$=e3^<SI . m8]!R <5jipP( 8 .`HBJ.hRl0 )_;9Ɏ4 ٛ7㮻nv̛W}o=0nzNۧOQJmc츱¿B2MX58~X;n,^{u|WxWku;\hq\xwh{4[VG wJ1tMUT}!Oqc&eR P*X׸{4 mC&ÝEcx+v~&|5:al^|e 1s[!\x̅pi /h2+XJCM'ѲR\o: Osqxa ( `^G`ѯa'7sPW'^6lPoц=a~UEQT#mp?^HI |1 mV|zN-]q`O[nv?8MO(3߲G_Aqi9>b6N{$ x4Mìs?!7w 6@)d!pܘ14}?oUW_!^2qQ8#v.@ǵ^w} ,']v¡2]0 G3>[ ׂ0_ɧ#*D,i~iX|9xѳ'2o7ol޼xq܂ګ)%[ᨣ%&  n7Am۰mB\2a*wa98jVg1~<b]YGԩ߲ANK/]֬}o@zPVA~>22zDcF0#V)NEE]GJ_xA޽it]#g}p8f, CSO>̤d펆;pmq:0I.QTnitB`qaСNW^AII 222pI'!%%0<,X@N>l1geeaW`8p {!зw/dF?Ufm]Rǟ]v`G XUO~]] 00gl <_} VZVKco5YYY8՗_¶mu=83bNCzzzǶ|10v8 2dz<1属|MaҤIqˌvvu$sY`q._)M9iX#߲֔a)ʕ+czGa>|8zkoMB~~>;vm.o)'+W"-- s/G}O=$2{œ~ܮݑ ^N;|,/gq%2AӞy9^x}>v#33#F@T gq/^~ IDAT\aaX;~]8ڿQ9;XU-}(DUeEpQNt"e[ ׃o?6fm_{ u vmIH@6ZڐɧA)'xmG?'੧¤Iw߃ɓ'c;#Oۍ;/fSR `w͛?: :b(]Sbg(fd-ދT("VD,zxb= ==(pQDzO$!l-3?]R6ɦ+/3<3>k@Qxh /+9Q!j4{2u*m)?wyDdLJ.]xjs* {+9S*7.,+֬YCBBA:F(BC1nR^SW9"##%88ܲ>e7v-, 3}ֲI̻S}f^ aM4;wZbJsQ.~>*pH! 1m;ޓ[HqG+>|MsC)Q̀/n}/[ͭ3$֯[W,S4Sִ f< ;k׬a؂-[ۊ%[x1&>qQQ|'`Եײ}62J^l<7EO?[φ xg>|{_2>#6m9sbR'<mڶao(<5L>9O=ŧEQسg[_zXlg\wE)k׮eEWڷk׬!C`gCA|K_N? QYe:uO9ָ_;ץiӦ?~Rwٹs'3~oRNُqc^̆-*:09}'䃏>BQf!<,iϰaWyf?ܹPQֵa֭-uYeuV} 7ZruC3f057d=,XFAC) ̖R-w0L/?믧u_@K aaL& kN x׏y< <θqj%ϙ3W@uB###V ܹ|о=3\.Nb:p|Z_:8 TC3曙C,|dCnj3jHLL XɄv֮)OZ`;p8c ,vB4 B`%M8]8|]UǓEdddM322-ݿj+2ߟf=J|%hJv|YçΦGxk EGv坹yb/8!nEAuSX3T9'"̿򽗾_d0sߥ 0%Y,ڴi˗WF=z0@¯[r%x]_d%r|y&^_"'"2+ {W۴iCLL szkװqsAk8+>/|PPCBvv6-ZItt,%\wubeڷǏ(}cd4u,R*m%D}bCbb/']ץ{?~~!Cx6hp߽ҩcȉ鋢(3O? ܹOʕe~_j=iX-21˴Gt端$:KM zΥ_@0Gv/rG oJ;rO+NZ0Lpz.&Ѽys0Vd2h?O?޿QkU&#T =7#lH !!Xg^Y™T\~93 JӦM^_{N寏G kG^\{4,􊻒"#Gb bϸh} 6 S(6gf67rY؛gWO䣉U e4Ku4((&qhw&9rEp| XϷPEd"??/4MId6rJ"%{}e&0XpUXK$@53Dߕlْ^zoW_f;yf4iBT7ա*nsil+Ct뀯kFE׆JղeK3ׯ/Ut-k{Riy6;YDrè+ .Nn]r{ͪo`kXk_H&OLN*5Iy4Mn( .nY֪U+ "<"EQx׸xYA76ޢiӦDDFb4ͣm۶|Ry]_g KDC;jh4zhv+̽>V3mm  CBCPUӅi d2b |ڌ#ߎVyټy3YYDWQ̬,;Nk5TZ2aߎ .>C `Wt8߯_=99}\x4MӘ4q"fQ=rݤ<!! v/СcGrs7nֿoyw;f >CxXx7oAˌ:vUa˝vlz2[9}3Ŧ+E~.SӡŴ\XU)ov;.,c4/_'77ԂPz⛕+Ybzp5&&߾bc/t:FqU[6i2f톭>;υ~1l0bcc8NbccKX,vkN>]aYW>̒/ӵ[7﴾[ns u(M׹i$''_e烜<>]  R{|EA^ EU FcR EXX8_|z^PcEQ0L<<,F>7`4j[4]y%\4Md2A\\ }-ZĿz-ZdDt\5lX 0S^߄ TUɄj[o]3QMS  (jW_^#/7EQ0͈b3h@>R•iA611.1(pvx1VºNw]b]'B`3:nVsr;vLv<|rUi쉘BBCQ~,\qyNi>{Fz9r$_&H-jӦM۷TLw2iK8C |.7ܿ7-Z+Jugxq؜$DtNO oÃGA#Jࠅ(BZ>P tԑmZ7(>]:sga#[,xDGw9; `SIz 6 f]8ȵA4ztFϞ=o,xM2ٌiUpwݫ=ufIa7Hj^t`7\d]g!]{WiyV+z&Nu˖3PM$TU~Ӂïj z+>RwD h!X 4jff2nI 0UY5X̖@b CBBshx9":: "220<2zMHMI&Dk$:FT\YEh2x#(0kc)ǘ`t{(b͚5s=F/R_ݵI ?ĜfvzMK޴_ֲ%/9-}~eʾ+u8*{>|ϗ}Y1lIkQ:,xE]?_,^3*w{iobTu^mg}?KWT]_36{'cѲUD0qH s{(EQ*`00p8shV= tC`_aܹ~ݓ޳Νʾ7 4CݎvIQU4Mg%%9Đ+.O>hQp=IMM_ekȳѪUkQUt^T~BoOy(d2q:+5@E 7| X %n' >JFrrW\d;y*?+3ӑu#=Z3+ҜՖpNvWjsnpJĜ={Ti"m~na)$O ; [ ri>E6'5 w}$&&2n8N<ɖ-[HOOgԩ~ETMɋ.S>aSiw^G^ 2﫤ov/db GG_f%_{_ؽk <;oƥ Ly+ZiyoYk[ƺ]BGl$s&JB\ cӻGbɖZTT\s7Tnpsru,+5VE;N^}1͚Vϝds˥kqmZM{# s}GѹY9 xxF?^ڤk]ӈ!je{Z'(ba4&t]-Fg;v=L;@;1v6oق}q\{`;&v^}U'3)]݃i~[ڹ:՝d2qsaVf4h-[QkֆONwV`P]J |{c:aֲ4-uBju] x<\p9v"^뵬>v̅JxX>"PUj;oϞ.eiʝwºؿOB!,,.]:seif;ݟ xqA\] 6Sszȗ՛k+jpzmRU7JDdM4a8q"ӨJXX8;u/!<,vN]e<594McM7qۭV=r tԙ~TPۣ߳)p]8ly;zWIxb` N<q|Ztp'8$m-\6r $躎`upsٶgIXxD-ʷ#-Dá:|G]ݍ>0;)mbWqn5vQ*Cu\_nDחP̟|QǕ9,B!IG#gGQA$=|j$D.hݲ<, ^:~Z5'n{P\/:;{t:x7jB!hS@{oWb< B$>BQez5@XX8W\1M~ zOHpHʲZ- >K@(BƣEL,#!B[atkݲX, taa| 3v6۶̷+AWH`G!B!AFc 4厇tڝm۳wN^Hhڤaa8dg~2cǒ$!%C'؏ՅB!BQ9䳭q.hгwAj Nt<+NGAVsDpPkہ1-0Mu\s!B!2Qh;FD*B!B!yhlsNeB!B!8g[V͓B!B!ܩqB!B!(S ˾X B!BȰFu`;WUB!B!Dr9!ݲB!B!0 !B!⼢:zϧ !B!⼲{n6nݻ*5wGM!B!@RR2ILRRr]WpG!B!dr)IJ{nOuժE;B!B; IDAT!hd}G0|H%aG}dɪ*VwB!B9r̨ѣIO;"=Fl6sѺbB!B!튡WԂLt 6[Oq-F;B!B!h2tpvXժfHpV+7ofÆ ;v I&s3`BBBjlcvXB!*`0L`` uuB!%:k$SEZ AFFٳիWc2>|8'O&::lv10Qf!crZqB!F;:->n>Yz5wq&LV=rss l6wh?!!w*!!!9sF;B!i>gxL&Ta;%Op8xXzu˰l߿3gVl6c4%S$#uMB!D=i;Ύ;y.?4,zйk-O~4olٲFa޼y *}B]9!fN\zTF@bBQSqo۶׭hpEEQNNvތa+O;~z7vڴiCZZ~H||<`ͼ[w}U'X<(%B(͏B!D52g88A9QԂp2>smL-hnlpMسwҪm"㮿–(**gX RٷݺwoP_Ip7ofz EQXn .$--P6mJPPv fʔ) :رc/}auyB!B!)n<ՂV.GE!G 5`1^9j zr<M).:ۖp:NLf#F_ȡ\.2Fаp5tP5z\4ze˖( Æ c:uROOO'$$`ﴶm۲uV~~U{B!Bo1baaa|~)'N>/Ju 5@5(y5*B@T z?Fz]?Wl N{u3Y4mрdVYicTG֬YáCM/bW(4o޼X`(]v6@!B!#yyy+T*ף@Y1bˆ ::y[S0GDŽF̊0԰9R;um͚5eeeiZ[xd\ϐ!Cj4gëJzz:P_EL6Yf\gyꛆTW!5I&̚5"|#+;wdΜ98q(xڹs'ٳg׮nq5%4b W/qтg)#G!"` U4l`KUuJ;(}cB裏/v\nI3fc֬Y<"E`%EpB:Qqdq:f;g]?'BԌ;Ws0}tZhw|'(RuCuVuַ쳲8N-ZIJJ"""^zqm]2\!8p_KIKKG_{uT:&H!bT UWP ;P lP 3a)MK_1mt˪P.XM4/VUVֳgϞjK`NeFs1bDץ g߾}Jӧ۷'77#GuՄrUW1d"""ذa/:]K)oz衇u'N0sZߞưʢi< .ٓ@V\<@FFwaÆqeUx/qB@l޼yev̛7TBb"@)blh6\h6\=@1aA&-w*k׮5 TΝ9|piOvqF~g8p P/ªUp :K.T9fbX3fW_q!hժ#G$44ԻYnM6e„ DFF˽CŷoߞQFPf=G Z!@-8Ϗ bơ;S/ý0+FEg~tu'C{-U#kx4[xFɪRӊ~;v8N|ALªU'߲\)Sp}k.NRRSN/{̚5iӦ]l(y];[f,_̙39s&F+VTXO]o6EaUݺucΝ@Ν; kPU Gzz%b}RSSq8у]MJJ o>իZѣn{SRRhӦ V3gеkW:wLVV7aZѣ[.U~s\ڵb~t]_'00;wSOѴiS&OLpp0fbE_e 0w\oΘ1cѣWf,ZEQHHHJZ6ƾ.O)SxqTU[naNe#m~]6nX+}]˛0h ?|AfT rgSN6b;34Âc­kuaHp/. ؘ+`,j{jCyǤĂB$-w*)''FgeeV͖=ŕߪU+[z͝wYfYW^y%:tݻwSrİ}*]v/{T8UW]+RzSV6i҄EaZINN&66ƆKTnݺAff&(Bf͈IOOK.FF# $%%O=0(]v{#,,ÇӪU+h׮]cDFF*GQ?%''3x`k]k<IN?X^yo@8n7]agϞM^8y$7x#̲۷oϙ3g0 1i$*BBBm 孫꾨.Of͚-<Ǐ'9r$3gά~u|y9p@4i'N,6>fҤIL:ؼ;JA:P0j@fǢpn ꭓKw;1(*Vz{o mI%J<)ʩs뭷~nʖ-[LXdX1c7p8l>ߣ( yo"K}@E.5 tԉ]vqAz]n:ѴiS6mXVRRRΦK.@AΥm۶{`@QvS,dzd@ v kl'2!3Mj̀[ju͛7'66EQ]=AΝ;дiSIKKk= #.-\ Ҽy2 Y[WUQ2bccٻw/Gs o"݇}9\!*r!KNNry)_s]28RA&B(&XR4dPހ(#=,mhC(nMYA܆Ѹ$SI'Nk׮eZ_}SN]ʆٳQUk{ —lM[WEu}Q߿?k׮7d޼yDEE'l2^~*!8?Nvv_˺\.>)ɠH9Mn@/L{]/d&O{®;1c>P+WlG;1L8b.\ȼy% jEb6|7 7@UU ꪫXl=ӥKRs̝;כPkeٲe̛7EQI+S;/2}r*}|g,5`0HLL$ Fjje@TT)))lšC&11MӼ-<)}uyhҤ )))X,4Mȑ#DGGض!Nyzq>dffW1bK,W^aРA_?^z#GqF|I֭[Ku-~ݯ_?^uN:ŨQ-[7o(fYz5W^yeִU޼1|pV^֭[8q":uԩS$''Ӵi*G!jӊ+*bʕ2qgG SQ@)訥IQ0@l6v"--ek8־EQ+0qA5kc=nK/~(y|;]W*w^7o^lc~WzA߾}km=4 Ʀ;p. GODAqn|2EW khN{n4MW^n7,bc4hߡFUU ?ʷvm܎|tv\viV\n[5E5֜KCQtUl:gceE?J[+m V w4ChFd0`6&j -`1-!psDtt@Ddd`xd'K!UlgYzʛ2 ;wvի7/l߾ŋw^̙3X̊5{ۢ>>>f͚*33X! \]lGVr%SkYyp7ĺu|Wk~YVVYUUQ2EM(oEWe[ܹ۷W}]tgϞPj:qsU ?n7<1W_C@@FqzE323YN9rΜqsժ;ͮ.PmTnp6 4M Q,ݲ*0h bcc9v{_o߾̝;sϡ( C ',yߖINHH~+v>馛Ic,]1c4(q\YDwIYIU-VUU,&TQB]ҵkbӶoΦM P_y"Ǫ Ϧ* V͎Kw-˪ #e-װ;ei,  f̘>JJJ O>$Ǐw "\sO0ou<ϡ t֍nݺu5B!5 00?˅hdȐ!u]:F#OGՕbA<=w#2k1)U̡[_?j߿?cƌaɒ%߿[o /ÇC=|711ܲǎ[}0B'J!:۷ӳgZͭ8mL1<5#oFAxo8 #(T$￟$nʂ  K.)wxmn>  !uF:B!ꃎ;ұcǺFT#I05d"|݁S/?A7StID14Nc$?F͛3<Ï??Nhh(|J2{Lr!B!UAʼn< (s9 gܩfϞ|@vv6@rj, 'Ooַ˅`԰fɾBxB!D(EU N;*&L`РA|Ǭ^˅,l6:C[o%66&++(L&4#UQuIff&u]!BQi w(&&3gr=pq,K.Xf͚Yc  ==w9Q233 Bz`0=7 !BQ|Lk$SMᄇLm$R jl!B!1S LHF$!B!BLZ!B!R<B!B!uHZ!B!⼢kci#B!BQ?B!B!y PiR2 !B!⼠qs~lGe !B!B4drG!B!];\GQ"5w wVVVC!B!DѾX ?S;6mZUB!B!Dv,pN4B!B!DMh\v$#B!Big_ uW"!B!BWF0yQB!B!ыպK B!B! ;E?o x~xJ!B!4B!B!y!l*C;B!B!84wB!Bq^pYB!B!yH>FA* !B!B4`rG!B! %o$#B!B'ՎRjZC&!B!BWY !B!"e !B!B4`J#.K;B!B!84 .B!Bр5N'B!BQ[B!5LuӱZhVX,5R` $$P{D]}_s>֩:$#B!D ;}4nVZa4-w}o>ڴiS#e\.222!,,̯u&}YrLΉQ-K!B%;;f͚w3H&MZ~G>'5GScr.4d)B!\.F#z#6Xh4v}7 IDAT^^>'5KScr.=wB!(!%%?lJ.]>B!BRSSiѢE]Wۻw/;={cǎN\4M#11֭[\RRܩOf< >Iqu6B!8vw&--&MХKjv$//iӦ\:_z%ƍNj/#K.eժU,]}:}eɒ%7Ar·; Qvv66W4忤SMdTIl5Zpiho 7#cwI8aU woµkM3|1EUKB(7_@gNy7OyoZo/;cVBM ݜǒkwq 9 i5Z׻z((ŧ-~B^[veˏ g7pLn:NIV&af:'r%i!MBZz5svӮ];z)Zl靟?Ξ={3g{[ 2p@m|7sQ֯_Z:/$$$zUb۶m|'9ӧOŋ0jpB6l@ff&111\z~X,rǮ<#ŦuСN>#}aΜ9L06mЦMzI@{馛TstRv?i|W8?(8w[Hpk6({堠1.)W$Iw;_Fi;/ #D>[H l.iuwGH6g\t +2̻a}v AFz 㮫ZjfxFTd%[b{ th1d #G2D‚Le? .U-1l=Ul:è [5'd]/<2gr4Mzp) ,G9 E${I&h޼|}#}~!"nܸ7|K.&~jd\v<]x1Ґ {Ozj#,, aaaxgV?ZhN:̙3q ,XӧOw+<C\\ׯUVAVW_gqo.ò+WUi%xS8u%vaBqJ:Ri9^(>@ kV_~iҪS8x>:+bƗp!P*xCtS""Jl3YxoS"D'u@yes@Neʦ/r mIK "՘0!Z`X*ɓԩS)v:4Úi]N*vbǑtgNA*|8?!~mөL[%:|* "0W8yDkGP_S:bʰ&Ҵ='3V`{v rl< GQ!k2녎<3.T3`ԻwxļyP\\ޣo߾R`^/L2/^DHHz ())QTTduȅc?~*勺ѣFQF͛ +8p ñ{nY(b͚5عs'0r*^zx뭷0sL'::(b޽xg1d?7n^}M~s΅Nsɓ7; QSOa„ dk]P*(J?iwj[DΝuQ5A0qP#xJߟ,-}t Ƕ}#%I7X:_RYPwjI1haKJ66N!hKx8}-@p"Oeyᡐ:XUm_ȆZ[㑾xk  /O&$nBZZ,1x(ix2Fo=G@mĝ{Of෋9/*%e t;s= e2)ZE`aVۍ TP\ URY{z%ވk40Z]'NNP33\,!X6=Mj'DDDw#9PU-?Xĉ` #99vEQDrr2~wmX|9DQDnݠp?("???`0+W_~A˖-/w߅(ظq#A@Æ ~z:tDQD\\1gIu~:>M"99|A7k׮E+YvmRzz:6l؀7xCbccpB_<<s9r A@hh(x DGGWX~СVVźu GM/ТE ZMraaaXlO'NHmE۷o(?>:t耇~?0mۆcJבe_rϜ9r-GM{ \.w^;DΝ2(!3Pd2^Jd(w{NzN)D9%(0y D,)Q=oh| aBtm/x 9৓P*d< m" tԩ WaZ}%Co\<`͜=wj[ /[u0!Btv!y(,l:IC㑿DTDDDSBFFZlO>D+آE dffOOO,X^TBpp0j5A@@@{TkjΝ^GN?@V///|Gy&ZjBQin޼ җ=z@=* 1zg@ ;5طo>C|I&}nժ?zZYFTT/^ dݻ_5}|͞o8p/B5p9Wa 6W_}e> HE<ի _Yj гgj˿y&hlZ-$͢ *]A!}qDyEZ ~ "t 0 @^#JE|FoqjV ٱkkAJL /, |T)S;Wؗ\vM0J`5.(CzN2MB̶SXTM "oΚ !kF@hzVj7AzL "g- Mq-{~C7 %:} {nڴ)x ,^Ř;w.~ml-[Pu(..L&o͛[F`` PXX"++ !!!6>(JΝ;Q,#G0a>Cjj*Ka̘14Fbb"ѥK=zǨQЦM*ci0駟|T櫯T{NIkt*s\x;w~eeeXf 4i &`M&]Y&ݓc]v02mfۡtѾ}{@ ,,fzyya޼y={6V\.]Hu!88: rp:W;ٛk8l*b,$\A/Dk@ۆM BMy||(c?dn޼~ EEEPTVYyfL4 -Z@bb"1z uL֭<hӦ <==н{w)_54ZC.ػw/bbbpa,_}={p֭ AG;@yž媣I&kM=5h/]$ӳgO5 ;v@BB44Ҿ}{cĉСQ\\aÆIu2=v֎su/_(5F9)) Ǐٳ}v$%%ٝm5 … t:)gRUFPP1|pر۷oرcG"33۷oGQQƎg}n^q{wd&W~z`#>6%blNJ)S$D=X7nQhbzaT4os0ѣ|<8t>W20ex맸M]c?\,w W_f!9^m#??w{ "|pJ>%ҋɓ ̈qlW?p;ޘ¤i9ٲHfK7?_~Mq|6q8AH?ʨf5b1ps=(.Gs@l8R)prc{f7L""fh޼9VZ۷O'wSyݻwȑ#hРLq]h///4j*Jzoi3e{HHHtI9rzC=͛7c˖-׿iӦI5jYf!44rc`'&&m۶xйsg޽{ɓ/h^z ~~~ؿ?~W`رxeL+RqƏ'xnc̘18p w5::s7|͛7#$$SNu(HSOaϞ=Xv-jק2GP~ ɓ'KJm9.qg3c C*%Ю]*  ハOCK| A~P }Cz ICo|& Ez4 mѦOz/\!2 rCЦ/?s>BEMV}"Ԁjr-L mH:~>b(24Uct0iS:~^ 99} B/ $՛Qh:eC)<c{{}>?, Ee\L-R!@Q"! s"24I1bGRLiפŽH*F^J4ƣ"ѮaFDDΪӋ!22-7p%ܼyAAAhݺ5"##!]*Jxf\޽fu5}ʔ(aaafEQD˖-_M3}saҤIҴѣG=t[q{ušER;wƊ+hLJevTb$T* ꇅ#vŎy9ܜ\ /OWrPԖt%:LV\ZV&keZVVZ%+A&#O4zbn66r8Ğ;R֜*֍$jMtU Vlr*$g6lNCu#Ǝe򶖩6u*:uU"""66ڏsU7o.ux\0㠐uXX=ݖDDDDDDD5o ?/۝tDDDDu'{>>Ph4HJJB@@|||]]%")4^LZ]+8 ## BԠl\r5b#/_FII ̦kZ:u=;DDDDU}w*wHѣG,)L9s&M6M6֭[cӦM7nvڅ3gbҥVOd :SL9sT*{n<زe zP\;\.7 -[Daa!H򨈢Yf@yocxWm\,j_\\l߫V2-;wZ7ofhݺ]j/--GFF0p@ 8(bڴiSBw~)A?O߿2(_c=Va޼y^sAJJ ߏ;w~G} عs'6n܈oBo7n_Ν;qA51^Gjj*݋p[fo (Oe˖طorrr0sLHLLD||<݋K.I7w{ket:]111Xh 6@Eo6ArYK:´֭[wݻ7Q^=۔Vu kZZZnܸtX#99>}iiiHKKCAAj<֎qmQXXh!"]ݻWקO1lY5k֠qXp!ƍN %"8_~/2.]={He%%%aܹxǥ#R,3N/++CJJ 2VիWΆ( 1 [;,?G,{9;v 3fѣ޻w/._ӧ_O?$WԎ|v… ѡC&pB|}L^^au[O?I͚5 3f̀VҥKѪU+i>*alݺ Ŝ9s`̝;-/X@z- &v-Z~7L6M4j(lݺ7n4h1bVZeW:t(DQDAAr9~;k^osY`Ϟ= +K|]tIz<ի-ZkPXX(-[U8lc5@%%%f=L,{sw-Yf f{!000zhl޼{ 6 B {Mo˓;V8]ԫWի1 sQ>}[nRD޽1`jϿ~IXkMR 6 xᇥ V\ &""""Iw \;իO_Ÿq'euiWt(?"q!9hҤ4qHMM`@ӦMQQQfe$''WNOYptܻ$Z뜜̞=[z/"j5ZrmV^~e㏈Gf0| (aU}cHC&j÷aaa R/F!,, HNN꼯V[;Ƣ(M<==% 5zLt|Wjhܸ1h:44T@ʙdږ\[N/";;999f`NNe˖Rؒ(xЫW/ \zt钔7Ws 88Xzo6"""r}ο;7j}p] ֭ȑ#qi`m۶XnÒ ի@ׯ'JBrrCڵk(r 7ozYAAAغuϯOҲ 7 }1 ɩv`B&3ӦMn4q-XR/33X+fʔ)())/իWGC*[o+k"9sVP~k&#[o׆IƞS? N̙37^[z_~%&NCСC|h4)!t۵5 |P(̙3  !wUyobWd26mX\R Z;j4hy8{0.`Ν7nDDDҐңñqF)ɥ5֬Ywy.\˗l2_/r9ƍ9s ==W^ŋ1n87qU,]5j,Y xDZzjFӦMy%%%UηqXDZcPZZn ;vO~t۷oGFF4 viw])V\s(jP)c{52 VvZmAk:r9Zn]7G1vGFBBBvڅ c׮]8qut:Z-J%t:vQj;6mBnn.Ұm6DGGWYG gHII^7o?͛7>-T*ڵkk")) yyyp{tQlkmٳ'v!By8{M~An"""qF BdRf͚!>>o6֯_2j | <4w\ qqqRwl >?>&N(=k,̚5 {L&È#`[PT*h4CS˱k.;Ǐ뺏96m¢E :w1c@E>cd.ʔ?~<[#44&L C1w\,]e-)J0Rٺ7o^a&U<֎qmヰ0iU k-[`߾}@oThRkBT"&&]vŧ~_еkW,[ eee֭ ReG g@QQ6l ZbM6 HNN4I&!>>6lF:w#GJX; 犽bbbPXX%K111qMv`p3p'ɴ_' 6 +=rAPȔ2S)(U>>> Oo_ U@`?0h+LrWNff&ÝZKi,6߲e[:ƍ6o6l9}45jd4nX'vF*1eX{mvL˭l\̝;,ySfe+_U˚***49rUm!*<655yY.g̙3fQc3SYTuU>={6VX!MVu?`)畣vu?{Ξ=`ԯ_ ŋo'>S7""""{=;۲:NЦ6aXn-TJ 1*  1_;6hJssrr5<]ɭ²BQ[ZRVR\bЕ 2YqiY\iZYiXL<QiȀ;LoPĞ;.@q' F *ٻ_=Yn:9ilmn˴)Z" ܓ15n<)]*ڏ?W*6;U׀ӮhdZ?6L;Z{={RRكI&`0~@npvꑚkw>=Ab7dPռ9sC&v& YCDDDDDDDu gp!"""""""r]`w-~[jڋ"""""""cs) }___nߕ:U w̱e;ήUcDDDDDD W`Be""""""""S;"""""""S!"""""""r]L*(wNܫ;DDDDDDDTWC!"""""":ƴ|!""""""vG w\{q;29h򵫪"""""""$3y`pbMj;DDDDDDDTǸ׳!"""""":4;^j+!"""""":<}hgS*@pjc pQ 1 2!"""""""raCDDDDDDDu{eap!;!"""""":ƽ;̹CDDDDDDDsrs*R!"""""":E4I,\P;DDDDDDDT7#>. ~x>zVtEMTey,L߻ù標3g⭷޲c-222̖9s&222GՉVM~\{8 dm>}4ZjJe:թuSmm],NE߿`;nfwy4k wWQ"""""դ;{wb7' ;;ۡuA|;5~mݖ-֥:4oڵQ .DHH~ݺuͭQ-^vsLxzz: dMͪ ȉ  w_|3f? cƌAݥeDQq ""qqqh޼4طo4 ׯA|\v (b…UV!-- [nErr2nݺ` >=z0yfWy_yq;69s`ʔ)ԩS7}9s]mpƍ*ڶ^u㏸|21~xz|wq裏JC9۪Ul+<67"%%A^3gδN׶m[]rwFzz:j5m̙3k!44T:ǖ-[A5̋`pE7nD޽1h /Xv-ڷo/ؿ?oߎѣGGe0{lDFF"!!ðaK.᫯VE~lذѣZj3f` ^LJ~ooo1~~~8{,֬YvK*Ǒ/Yl;n®]p5DEE]A/2jNgsmkƍ2dxX/v܉o/ vG|1F1׿"&&ϟW_}JnݺUz^NqW z*>SoqqqΝڵk͖7mYfaѢExQnyLܹz!􇇇#!!999 (0~x)ѥK|HMMEdd$~'L:UҮ];t:$$$H@VCm(**B~ЩS'4jвeK8pyyyM7&5n8v "@xYom_lAYYÇKѣGO Tݪ+66{t 2 {Dz-9,#^ ИZd A={н{w<Ҽ;b8rHBx{{׷MDDDDDIyP;]0sWܺu hӦ4M ̝;l=QQ^;vZ///9III矑/ѣߏzHKKÔ)Slgr_l_xxZRADDDTfo]:naN]tCeَ׻}LajӧO7Klʸ|ZZ\a~.]wq; 8BVyPWhe8{xx7ިCB|||ڵkqUt]vEll,|*ױU[nşǏiӦfyba/Au25qShƍÒ%K.]yyy8~8RRR0k,111믑=z8q"`Xĉ0u*˖d?jڵ ݻ!]jN1ݎ1K=JR Z9%[miٳ-[{<߶ܹhРΟ?ӦMd#^|2233+gL,6mڄÇI&xqlذ-Z@PPPr; [noѽ{JU~elRkٖ-=:QSk.cʔ)f,N8r\m۶YgLܸqc ؽ{7;jl&L+ߧO޽r ,'""""ݞU~HnL^ˁ ur roZaPy( JC/W*L!S<=<՞R R<4l.wfnMV5ʹʲ62++t]r쭿eYYY3gO-ZT?ַ/ok~eTնWu=)Zl}:چ\DDDDDNMw[6CSpJ@Kr@㨦Xn-TJ 1* !0r499eMYA^VaYaa--)+).1JKtmLʴzLwKVLGBh (0d{T=7-cmIko =1*Uֶmʹ{YʫqI ı'"""""n3C5&## .7{9X*W"""""ro׮1ǒ%K#uk#JDDDDDݾfpj #}ۨ+^ Qn=wdήѽ|^59 ˅ 0Ar]j,"""""""rKJ Aį?~#,<i8PʕP*P*Ϊr0CDDDDDDDnI&Csv Ȅ ( 2k tbpܖR7<: 2ApǸRAzw!"""""""Z dR`Q9x\;DDDDDDDd2rR X^Vk "#""""""""3 0w\;DDDDDDDD.wD5sU{?CDDDDDDDDV1CDDDDDDD!"""""""ra 0w\ w,""""""""k\ CDDDDDDDD0CDDDDDDDήE999(((^wvuj-\___BgW1c!"" N,^zή,; 88""""""" QPP I3CDDDDDDd'BiM\ 0w\;DDDDDDDD."""""""" cpȅ1CDDDDDDD!"""""""ra gWꆬ,\|999(++7"""мys(JgWBii):qήQIIIhڴ)JKKqA\|_>  Go߾rv;#::?BCCV]-"?~999E ^z֭|||]=""";tO={HOOGYYbccѠAeZ-;}E6mT["%%% 'PVVZ2$$$ //۷G&M]U"]k׮ҴtܹÆ C@@kGDDDagΞ=J;T*ѫW/Dvvv|ѣϸq yZ+WĈ#0x`̞=zkD^^z-,YU"R?bϞ=ѣGAɓ3 Xf ЧOp_ִתUl{m}AΤՙ?iq[Q*̴}ݛ޽{ZAڴiСCٸq#Ch4O?־}{FA.]طo']v%88+ORbE ߻w/=z ((vmq.4k N:Aʲh\шh$==EQh׮c(+Ǐ'))lo޼9mڴСC&88={RB*UD\\7oԩjLJ1cгgO|||o5{AQ&t:5jd>ѣ~~~ѭ[7;&eV\?nwWxEaܹ,]s]wT===mlh=zպQٔ2-n7III|ᇴmۖ-ZXfV[Le˫6{m3I)~NRmAn" *T ,,:11~ ޽{_g6yd.^իY&Z"qZiwff&yyy !55<cjLG_ʾxzz2d6mڵkY&<իWwx!Jۉ'ؿ?$''ms~_|Az㏩\ pe1<<FիWˣJ*E1T쥤ج LLTRRRcf7Rfҥ +V@PvmEEEѪU+lB=9}tnʘ1c9s&SL:k*`\fk?EQlS)vb m 7'ֶRf/ΤDwD~#++ q#zl{aljZL Bо}{V\/VDV^MddyQՂWog}ƺu눊bʔ)v=`0زe >>>׏_|jZ;uDvv6| F&M~-[ƌ3h4}tرrʾjժŴiӘ]CVjrbNJrrnJbbT}vFznzzmdy\!Og34Yz4:$7ksd(U5jԠo߾_޽`LrSpU݊ʹp^侶,4mڔ(N = Q^_Q^=ve-L wRגE{^(dpG:ڷoO۶mͫY]F~*UDϞ=2?)Cq{OB!D ;h4u2ᓮKB!ʩr,!B!Ba !B!BT.;B!B!nLwB!B!ܘ !B!B1B!B!pc2#B!BdpG!B!B!B!!B!B7&;B!B!nLW p'MS!B!@rYj+x>cx:qB!­e{PU9JnB!B!pcpGB!B!l*;B!B!&B!B!pc2$VR;!B!BVV-ddpIRGxB!B{Z-uR(t' $à7urB!X(e-FQJ ͤ@ppp/')BHH!!!e!B!B3-K!B!B!B!!B!B7&;B!B!nLwB!B!ܘ e!B!Br wB!B!-2#B!BdpG!B!B!B!!B!B7&;B!B!nLwB!B!ܘ !B!B1]Y']ŋ~:F#JF!00ʕ+(l}l~IGi4j4-kR/ lmwb.$Q.dggYܶ$W܉;*Z8OwtUz=5j@l]z\իWXOLJ^Y^ gɞ)m6 -R/Zw1իWɸ#I[gmcLj qSU2/mI/wUp'RjUڱGE!܃N,ZFV%wڪ\q'_$>k<) Nt:TU-뤈Rj˼1V%77QIhIّZv'aN';gϖeٷV'N~y23ya 9 IDAT&^֭LF vǿ oL uIqoߞs){]vZ~moߞzg׷]͗<Gi)kOi׮]޼f~]zz:3f̠O>ҿ>%/-gΜO>t҅[Ү];lh>3\IHH0離*k֬a̘1???ׯȑ#QUE{bcc8`X_+¦Mڵ+?ӃɼKЯ_?D^|Ebbb6lW\gCՋzjz)~gXٶm[nJǎի9\v^xm2tPRSSuܙΝ;ӵkW6lT^Ol2bcci߾=:o˖-Ӈ6mЯ_?W$_F# =|) uԡjժ;v_jhذaY {^… ehNjk׮k֬Ǹq|r]<W 88x +ÇeOi07.GК1cƠ*/^_w-rrzgԢxh4GVj.No/<|t^7R%UUI>E\%}xyS$ޤ4tZrxz 3qR/c3R-Мn|j׶"+- 6 '=Tw;J 2Sr@o~!ތ |+1̋Q8j*_|ӦMCQ{UOM0۷N׮] HSI8RWTh/_Gue____ڷoo~͚5QUȹ'-=\ cÆ ԭ[f͚q͛ŋ$3g$++/ٹs'oΝ;6ϴQ 6Э[7/LfHHHӧYd 7o棏>}/ `>S>>5j0uTONQO>ڵkoW_'ohx"#F`ĉL67|>}Xg`/̜v˙?>| ~!GQvm}]̙g}Ƹqh4q)-Z͛ԩga+ٳgYn , |N{G غu+|~EZ||/>?g[˖-СC׭[b@g޼ydddh4ri6o?+ŔMKYM6xٰaF___N|>|[_nJE96Z===ˋ-[cz=>>|x{{ȑ#x9g)|^Qփ;g„ O믿9o?rgꫯ2c Rpذaйsg|M]UUz)ݻ7O=S,X???bbbI?(2w\߿EҶm[ mڴ!33Hػv*„ ~~~bfΝ;婧gEUU%7{yf+`TX}{m6ر#:tS׳l2f͚RX =z 4h@rr2}XFٳgO?h"ot⨭0Vݻw{~!F.]p[/o<8pkQܖUL fffgUf1پ};ݺu#22KRR%Jll,6m2LpaѱcGݻwO~x9{,… 8]Z]^UUΟ?ϑ#G[.Ge\vzqq>3TUO?^zS-Z`޳gӧO'--XonV[Q.]Ŀ/OylvXM_]wE||<~aȻ[!<<,Nڵkr }ә}Ν;Gmt||hKm/,==C.\@~߿?{8nѢE'^TNZ%*xRŧ&Ujr,|{CTT&GQmؘlU5j]޸Uvk zޱ$e_g6+ҿ:̄˳Q5~'~`:yFCp 6COqСC5j;v^f:t<"##IHH0wEEcm@A(-<3Mٸq#=\_.]L4&Mзo_˯J޽K,AUU&OL͹vO<zީsV:zb`voa֬YxyyѫW/E+5e̙î]QƎkqfNGʕͯM34|}} ((qxxxhѣ\|DZl(%#<<))dHIIq-88$"""nKMM%44$쎛(TBBBHNN au'PdƑ5kob0Xl'Ndٲe(Bvv66l`E+N^Rv8vqK.?$::bٯZ䖭pmi իvNW!ڊi)6{Ϟ=̚50|M{bcc#;hСF%//-[p)z!>_:E!))UVzc =ׯ_na5W,,, ///_2sL\Btƌ×_~ɗ_~W_}EŊyWgҥK\:""H3p@s'Yr"'M6-{h$; 󳜦[BJ>A*N"'~\\I EjVi)JZv2|B-O 1՜"myKjB򿛧b0@JV!/>{a4yGČk|L-Õ2״iSZlɜ9s,:`0ЬY39|0~.ݺc3uPiש2 %((EQ !!!jXE4֭ _Є?W_!'44tζ%jժ|wm2,, EB ?VY&SNh47o?8@ʕ-駟;{4hJ>};w.Hpp0*UҥK5_~ի3o<>Rϑ0lBVꫯ|G /Rd}b￟y1l0v_~i^s'::3x`͛gr` … i֬6m0|Ȇ X|9}鱖׎8 QEGE9fڑPso>f̘ܹӼFSO=UgшmgF\j+ m2e ZzcahժwxdprhZ EӦM7o/զ K.gϞԬY},E.x)|___RRR̕IJJiӦVT.✷ן9.\`ܹT\^zYoV~믿fܹ4oܼԩCNNW\!00FqȨkYqvcyӪFJJ^"S֍jn!)ZTq C5s<IVjNSq0Fv{]èJ-B I;@OHm^FJju>}*Zo Tn g~gʍ*d_OT_͞{9lQ+:͛))(c8~87&99D*W찾6{Q6mJbb"NSI䯽ً9¯:˕c @nn._55j駟f…deeqf⦧4F ;w.C X$$UUͳ [o1diذ!7ndȐ!׼阒Q9>|8ӦM`ܸq\^VӓuC;cu-Fĉܹ3ժU_7 /0qDuF&MGa6lؐ|f̘aSL[nTTǻ4a-mge\1x`}^}U0aΎ;'-CӤIwβeˬގՠARq33wTUeѢE]wm釸v܊6;==^{T&NHÆ ma+WlEٓ6*YYYl۶UZ-V`0}v ƏJaÆl۶ *Tҭ*N: g*&.4o<0'|Bbb"=z0O[5-.ɵkX~=]ve|GĘWw A: (Fsiޮ+ѾjO5[іZ l[MǑiqgҏcȢS_GS9L'1Ś=Wx֤kS7_s,w,g8bnv^&ьh;][hyZEk9ʳ #_EW/j)y Kݺu9~8YYY{Zk{i+Gnݚ_~H:={)Gb+($$|8>(W:u4i|dee1iҤ긖U5:*+|Q՛9w$_|4/|#IF$T\8G|q3iG{yR T kXؼcs-#qkY,έp vtxٴفqQ}wh&3ӹ[-`oPU#-GQ4uعPA;-?%^FQV 40.ߎP ³>vˋCZWJͷ>VË_' È#ݻ7`nݺ5/_&M"^[Qޕu /O>$yfRRRݻ7#Gti*33qѡC:uy׊<)5կ_I&1c :u_͐!CO)L oe/ ֶV8 u5>{(-k=WqڙtJ_Iގedrq](=ڼˮ]زeK]R233Yf ֭#11v6DT֬Ycwb_/-xB5Z?3zh=< ZNyy{zx+^ޞ:o?π ^}Cx+WߨM9tUT)4jQSy]x[&ֶYgory_Ϟ)PO2)HA1-l^;j=)o\N/ھJm~m<*>r`U^HNacKai|؆!\ [تי0gll,UT17(_l}mko6ynewnۊ۷q& c[S~}4S.8הt|w*UU%PUռi~wVZv\Q>Ha k%WWl s%q3uI8/+W.rx8:OO FAcePTo0p:tzȟA) IDATA٫~JMNIINMIL̽HMOOWrsl1/W5i y\}&KFc UgD#`zҋ ӿM\"e \UޯFs6lg(mxlwZ88?o 'g녒+\94g,|tt3ڕ>[wJqʝmἠQ5#i^oǞʕ+ӣG["Lko3YI%8.eʽ ; hJc_6%u/ߎIFK;^(po_BX!iYU=n'7篥.[_ЄB!u2!n%;eG5_Bܹܽ{(i~pYV^GՖuRD)3 h4(_ ո˒ԋIH[gm˰|O(r`Nrŝ\Ny@jj*AAAR Z_+>'ȳnsbSP>k^=j2,p(r`NrŝXdpI+Wի$%%:9t:xS8|ie:q+xzzҸjS^w]R/vҥNK([m۝Xϝ;WI(V;rG%Y EbŊTX"ʀ֗-.7 ҥaԋB7)Bw%ENSr_!B!D#+ !B!B1B!B!pc2#B!BdpG!B!B!B!!B!B7&;B!B!nLwB!B!ܘu dM&)[X>$B!BG:B(JYWwʉ׳3R#|3B!B[*s9{=e۞ܖ夤,==e`G!B!pCPߓ,}Y' ;NUB!B!QdY[DwB!B!ܘ !B!B1B!B!pc2#B!Ba1 e QB!B!Vٽe dB!B!]RvNC2#B!BaEJr2e ,!B!B+,)-yyx@x[rIaO9geexc]YYkdm%%-'7y[έRw5KW'郧d2)WYsC١YnŶ)oM'za?bo[AڗKwJx(:BTChР媪+͍[hQAO6OfEԹ[m *NZKkp%bK_tTH hTIIMq#ҨW5ը-j*\ݟpr;?Q >قFՃx#o3OeӍ=Fϖ(oZu:kcGҹq<nȖwsY7kqYQ#0,ZoA0v ~j>6/\|&|+NlVs (kiz*eO?b1]_Vb՚5lO}wOeǮ<Y#.q{5wJEVQUtdn"KE^5pݘ#xEz V_j%UVaQS'OɌ8r0s_4/M`PW, TV=OtTU/>gETW^mT?( {gذE 7k.^١i~ޱxx?7@VFwg~DEk6?k~`0zF݇ {w3= V˸Sxnx)=rl<ۏ7qcO=yb?TUe7Orz2hָ=v&=30f~튂=zuj[M \ˋ:E=yl>z֓L x(+0LxyմSsS9x6USV+?PO?Γ[ǞcIN0_Pq_姻7g?Ss eYz EҬqcuNǸSxO֬H^nqcI;Doȣkl'Zwogfg4oEf l_{ҴQ#Gok7n"77N1h׺ugMq4WWRb8~k7ƵDiکt9vn  רy  |Ol3:s___*f]o)=';Dz:ߟS&9w3lW ziƽ>ȶ_|(\6EQض}#ӯ讆0l(l; 2yo.Ģ( Y9aV_mRg? ; R XNZc V`S2sx*̽GI$ysSh`;`DpO{U!OՓY{2ƒ 8i %-pN<^sʚ6e#IflXOg}[xoTTHG_cϟgԪUg;n{o9p&M$,|8n߈x6&^: =뭣ve?VDrz.+v^Ve?| jBB M}U0w0{m^K(?dp-4f+-}_s.jĠ@5o#b{!f>%YNHMI<>gɾ 1$L$R6RVkmkzۻP݊hEWD@e'1ŀICJdf2d#q&5$$3<Ü|9@&!$4)<͟~A> ƕL@z1:$K/#:&jksǶ-v\M|6 {+vuJ^ٌƊxM V*vטj\14=3QE-~3f(r)L;/{._+ǶT(81L!TJ0^u^{ ~z\ :q;Znތ3F3 qqB|udRף QdiniFss ?'"#"n4w6>soc0\OzpQ@7Vu8 I,h(`lI.e d) /[+XWkDbxWww%oBB"BBC!HFW "Y@P[[s*?y{FR>qPuƇNClL/&:r[)ܸ(6&nomZƴ-c[>GǦྼ$l[/==\hʧg1 9KH_oV81hllRZx*{_^_}oRGfGE 7ohKR\v[r٤v3g񧛐ҷ-\HXVHf0̀Y~׺_UΟ?/=uK]3v|͎Sy71G?˜| NXVl2a?[\)スJ3 @">on<Ϻ܍ۼ}+9\Ɣmyrk!LObp bd+$ *rH( 4?2=C0 f d 6/R/2ě+^oD9}gΜư#Ձt'ad՟Fv; _&.OHxmj ȀdBݕ_?W*obМ\l^ ǿ9&Mz#PxE\}[ 7.^Db>͆w>s~(ffjWjظi f>: +r}P޸ۺ.DD}9.9{ܬ/M<:kۛ{Ҡig+ DE}?^K5 8wKmV~/[myZ玻3wvySAs`?/& e_,{O=065|vAJbqӰ$~Sa?ٝ7OlQ+Wa>tBn48r%doؐVZ V+Wag`:YzoǎSj\.fÎ]X-шF`Hn8ٌ`Su5_0Mhi1y;.98[b~+vww]Rew_ ]MMMU*XRヒ ^_}L 6m VO>یQ#Giygȹ?΁zIqNC)0#ƌ {H$ǣV1O 3~Dz׭T*آqxj :::>? H1sƗ~]L>\T _xxWү~nwٗ;7םw?G]oxlܲrH$ 4S&Mhn\45ﯼp3][.@@ ol\/\&M'[aG.=8rC ؂e+@hH܍K[oPRS2 ӧ>mF^X̘0 2<i蟨cpj&{vDGt[ ï4R oNckas.6~L7}Id6W!0tp. /m⢱0Lx+alD:Fsf>~g#罎Usz9WOm|;O_GZt'[8^ˀ8)20{ܮR Bi)!*\PJ*R(Tjexx\RFũcbBb-,=f)X[[ਰ[_y__ODzp;\ k?zb?7Kk!0[b@0/C{h2ۿ/K^^Wظ  ^`,q6jX-Dt3䪪*<Ø:u*.]r }Q<bh Pl޼zQXX={l6cƌ28r0g<#oQYYٮ=˗裏bԩAuu~0 5ky\|ڏܹsbӧO#55*J,w0ae˗1}t>UHMS_bKIQ06'3 Bb84lTe? \-CZ fU,獝5:,y$7;5,P9ԘWgt(ѣG#""qqq(((ɓ'qi#&&IR̞=cƌR%5;v,BBB|\x]'N //ŤI5u);ሊB~~>N:IIIZvԩStwȑ۷/ oA~~>QFkȑ#!ɐκcQ x ÇB@FF`ԨQy8 2JY?o}63pUwMgFbR|߿w([ctr{5sވo<ՎIa3Z0o8Q'I_ՙߎ֩c6KTT,:: ::Z\F*BbΝZHLLZ^ʕ+])J"## k>22Rl~HRٳP*tHKKs׹!,I655JDDD'5$ǥm:?`3Noc!J=;=\l؈ &;,GNWVb#q׀hXmvl;|%og ~ Cz@Rd57 }nd`CsT*477#<<\\f0 HV/:N!N:N,nc֭{ ͆Ǐ{lZƴi@lFss`0u^|Z999PTz01޽{!0`vׂ A׋mqw@:|Q x/oc@oc!J=//΄k-xyE蚬3aa!Iaήd/B^rW"oۍ1xw׷5Ym>HD ##|2ql߾] p8"hhh޽{L۷Z:˵lZdlؿ?bi_hnnV'|GkoVV 466hii:@@EE_ ++k? 99zǎCVV_ι-z_~e ޥκcQx:Hm,tm[nƘ$d /V:~+rJK?>| J͉~pYƄ'C!gˏWo@/In_ uc"%%Xjmۆ^zeedd`ݺuXnq]wᮻBRR֮]7bb cƌ-[zjDDD ##6mBXXrP~~>d2֬Yk"66{]wW^Xv-># ûヒu֡o߾1b~\./ri7#F@^O>gmx+uoi㍯7k,ԑҭ+kIo8qRDYeea]2&SCTJTUj:D-Qp:,\SEĄD}Խ3]CVNMv;w{񝨍GAvr<880m?02;X+6Q܌+W<;ӏ]vA*bر~yyDEE!66p%6d]=rxPl W*!H H J!6͆:+刋O#l}E7i5ެ&`0ll1ڭ&n1K[LffZllmX!ڠۀz;ZO7uvENx0[ޠKQx ]yk|/[?l6p)L:2;sYr-?8=Ipř(J=qӼ#99 . LB{fFDDD8=DDDDDDDDA""""""" Qcp(1CDDDDDDD!""""""" b 1wLL&Sw7;& FMAeYDDDDDDDDA"""""""  tw|bp(1CDDDDDDD!""""""" b 1wp;zpw3J[ """""""m1{E ˲\G5;DDDDDDDԩU5wYf4[!i^*pe_ә0si%vW7~Z"^oΒ%KdGII RRRU|r,Yv޶:իW㩧VyfPVV3gd2!-- 'NDHH*++qaF&MBLL29nN0m0m׹sJ_%_*l~ah0CtZ`"""UUUذayH|}QG/i{L466vs+++åK0c T*ر۷oGNN Llbի MMMx嗱pBDGG{n'OZýsҥ9s&lق'"--SuY޽P5jF ҥK1}t(//ǡR0n8_/wWFnn. X'Náhb ,^?\ }ӟ0m4h4b(..T*N&߿TUUa޽0LBqq1Fz-˱h"3)//FATTJJJ?Q':{,  =z4֬YHdffO>aÆv[j:4ٱcwN+VgZX_cOc?ᄞg=겋8^ӈٝj[E)722 ˟ 5O#[;/`,ܙع30|}AwkneW&v񯱱D~T*_~%z=,X9s栶w_p?O0blڴ & .ȑ#Q^^.+++^r*++SNN] xgL2)))/Պ#)) -„ PVVj̛7ǏGYYfߏZ̝;3f<3-- 55ŵP*ԠO> q&} G30sLԠ:oĝǏc֬Y5k.]{7o͆ 6 ///СCuVۊ̞=DGGsA^DZcǐ oo㐬,>}Z""pyl۶ III;w8c믱vZ?mwCq-JSNATBb;Vz؏zwzHoAʍ@̷ -nYlvHanf>{*mDze/P9 )qGb(ໆE! Rr!$ BBB0{ll2Pjr:qqqV+1q( dddT~F#r4Ol9Xظq#z!fѣ{jwát:pq(_5l6z%ulo}qh4HHH_{]ξ]mˍzYL6 _}>c,^k>""vIܹ<'.wT`ذa(//lv"""|X<.+mlkG=gpsقůAx?߭9.\&lӧ~a{x;v?䓐߿?jjj*ȱ[:663Io8qRDYeea]2&SCTJTUj:D-Qp:,\SEĄD}Խ3]EV`weΝ;W_xP?RTp֑IWk_n'G!|Q:s x"v؁'xnjj²e>v:"""^;vT*uyXFgI ]#ؼ3$%$@TB"@"@*Bzlh͆:+刍ǣn{E7i5ެ&`0ll1ڭ&n1K[LffZllmX!ڠۀz;ZO7uvF~5u0V7(R^8[2m4wS:""\/_Fee%~av۷%u;. tu{5 IDAT'NtlbPap FQTPPm۶_\.Gff&[RBXuDDD=.] 6Fbbbѝc<=>_vP(pwK*}r#""g}KαIPEDDDDDDD!""""""" b 1w;DDDDDDDDA""""""" Qcp(ɻDtw\0nQ$[e1w;DDDDDDDDA""""""" Qcp(1CDDDDDDD!""""""" bnώC/ H """"""";] W {,u\30CDDDDDDD.PU+zeFvQHM o΄K+pkzBDbҥ.e2QRRnjUt:^}UΝ>}tl^˗cɒ%m}ut3ҥK @t+WD}}}.WSO=uryS"~6 eee8s L&0qDzw+N0m0m׹sJH60V 渻~,X' UUUذay,22?]P(i._C޽eW^^4/יQ+++åK0c T*ر۷o?MwzHlV4m(ESCueSRTPT|TVVb@Tnc׮]梨RK.QZZf`ȑgbݨZƨQuK.Ń> XVAðX,(**w ^wH$bSv8q"Y+V34hP@w96?}߇nٳ)Atttt{ŷ~9s`bq! ou߿;w.f̘u-wܢw 4} ZW_ŋ/_| ۇqcPRRPƢΝ>JZJX`]~w>y5j q9U)99VuuuZ@mOْ(..FDDQXXj1MAARRRus8q"~z!** ēq!22 (**ھ>A9r$.\ء~vXDGG/"""qqqY~vsǟp?nHrXVݻɓۥ;q :z\[UUU(,,Dtt40zh1_g[?< 76D|/! zs~ Nh"~V֭[hƻl2<Ηh2)Tlڴ Vlj#_6IRdddԩSP*j0`@2F#V/k.pLvp޾"''Gu9wR^k\ f͚cHIIѣѷo߀y3梪  @uuxHG[/];!D=Ο?m۶!)) su]k0\S;z\[:G] w7#1FA.c8x AD"AHHfϞ-M&쇴ѭwIܹ<1]DD4hrG |_x#<<:NlNuw$u-^^tWu&\kk[c^_ZhjjBCC֮]k6 V2 6 {X,ӑ;ҦT466n/gZOQZZ V xd2Zg6lڴ qaqcCii)qucРA޾|Ν;A ę7@ A~go߾ ݹDZ=헧];!D=A@yy9N'5h ڵ jػwDž@/Ց t:466b߾}.utw$u- ry-& ?M""44* & عs'^uH$dffbܸq^P((..ƍP(bݺux'jOGHr9z,x7'?yLrJ˗,Y" 6 cǎ͛1oZZZfT*?ׯB ?>ZZZj*#//׮]vw$uNp'^ZIenCvRnWJLaQ)RR*WDR+peDT2:.Ngfj_CV9wߏ|CHArScܮ1kǭ8cՎ; J]n(]lٲv<"o<.9sшz;v'9 _͟!)!rR/lø L8<[tzV1kzjl2 `1j2Zd6lf&iR : T~_k̙;]WSlNxR.EZq^3CDf`0ĉ9sfw709Dž˗/?0v;ۇvI]* t0aQ't6l؀Ӡn DDV m6~bpnxg.T*U-D?L܇٭8.( ]Zu=>-(1CDDDDDDD!""""""" b 1w;DDDDDDDDA""""""" QwwF&`p'111""""""IF\%twz ' 1w;DDDDDDDDA""""""" QOB'"""""""H qAJ[ """""""m1{E ˲\G5;DDDDDDDԩU5wYf4[!i^*NkCތ%wC΄K+ tZ5DC,]qqqX`$NAʕ+Q__%Ktc |r,Yu01 Xz5z)c̙xPRRDU裏"""%q5$$${A^?,l6̙30LHKKĉR ظq#.\{:}3:$Ak0pI,Zs:'Zy8q7Uq߾}Jx'!_NcďzO-;qv^@ɊƧbd@Ɇ?;޽EuֽB "hBj>D/m=ɜ={C3O_mhzNGtPA. D!PP]TQRyxk]VjO\lR!âFc3qP+R3ξ:uZ#cڴiرcjjj0m4TUU RTWWf̘lr ??~)rssW_999(,,ʧ7Ӊ7|˗/GII f3.o[~ꩧlN%%%F… 'x\uuu())`@XX{uVC[o_ 곏jE[[Ν NsɓZh4CVV""" ,Ν;*߶my &W\B@rr2T*QPP^xeeeFGGΟ?͆l<}k6w^'PSSӉ$@}Ʊc`X{RyꩧfDGG;z(ZZZjW9ŋo} :(,,ĢE$9)""Kmv ,[mlsxmC}[{$JJJ||w{LC#w9Aq(x1rC*׷ϥxbFմ@&.Ym%FbT[42Czªn0bߥOס*-ߛ ׌sIW;??7ڏ>}[ӧO֭ի؈Gۏ;%Kƍhll++WԩS ^Xr%Ѐܱ>vI\~Vw>}}p8{nddd`HMMŁk֬ɑ1yyyǚ5kb =yyyP*xg3G`̘18w:;;q93j*$&&|eqq1:::vZ޽ݵkꫯbΜ9طo, 6n܈4{^ߩSЀ_~v.\SS6l؀{ŰZn >g_5ƍ(,,DLL 6mڄ'|ŰX,ut80LDFFd2AmR)""KuN׾Jq9ƍنzjN<)统҃0'|{1VAlx&a\nrQr||4d\^IP+X0=Nn;ŕå -=5G>-Z6 <5g=S}ND^Ǘ_~ ~:BCCy.UUUCpp0"""zq{ff&bccqedeeA#,, ,(A9995jjg٪Hz<~+OAt: HKKƍwܹdhkkɓ1w~{gq lٲ'Ns='n5jJ%v;?'Om\T*"77Bmm6==*J RR篪 O<QQQ}ʪP(0uj(V{7}z.^$\.Ǻu됛 F# BfR~fmDDv46[;&+վJq9J>T{T]]we㨆9a9#f #q!nFFR?byW;Ą]l1&"FfO䨞 L4͘1HHH@mm-f̘'hĖ-[^s5anDy~+_>.;n)p[lv-]2W_yT*K8y$=X,XǏ܂ FQL۷3gΞ={bݺu/DLL ^y啀u# }کjy>|MLn^K)8Nr9Z[[o>vi~/Xl64 l6羿mDD?v46[;Omp1A#>_ e0ocB_5w!bY)QJ!3UIw}CPa0cUov#2L#aHhdHNNFii):::p#g\j*X,>t:`h ( `;;4r&;l| X' }Wip˗/fÙ3gk.l޼2S{|M7nH~ hX܌+WTTTb@ҥK8ryL8rxrKV R (kkksvK]^hmmEjjTP'k)߿ƺaϞ=xÁJ:*J`0`رߓkmDD?v46[;O*7r9A#>߃ ബaNx:6ZpV'~K<Nǝ63vW|}76\&Ccu_Z:j]x'b޽?~gΜ.%%eee0hooGyy=ƩhnnFII O.|;%WْPZZV_Y|)N ( Ox7Q)TjzgΜA{{;Ξ=pjq茌 h4?dHNNFQQL&PVV&.<_`ss3:ok)} qJP(p88v#k|똔gfٳnǔFDDҤT+վ7"ID_\Ӳ=oì)wENJ_'?]q~t [>\E:'o{h͘1w?u{VV9m۶A&!11999}edd۷oNCFFܹp>NRR}l6$''cP*AQQ?Eŋ}f6chZ͛z&Re\.ŋq!L&DDD`ɒ%z Ŗ-[ky-kSSbccVםd2-[ܹsƲe ݍ69rGq/л= >w~:χb;p8~k).?wA`2&R={@R!##III㏱a4͒1++ G[( IDAT| ~mƊwLq6""&?񀵱@FRm'hڵ} ׁ\#̮ (B Q+Bv(TBFrFie*V:4,LÃ#Z1-e}V繀vffL΂dŷ~Esԯ r9~tٙN,w?"z\zz^\8|0֯_P>زe=۽z;1P}>_,=j/|"&:J2 2 ro>gw8p-> P(Ċ{nf0XZZFiL&b͂b 6b*6a[NyrFh8[K Qr ö́.j!Zm^xSlV|Vy\X}={dhlُ>MMMe iz,L۷o2 bpghUŽ Rˑ5Ru͈~ɊEB "b۶mP*HLLļyGR~pjllā8h> -w>mp\JҥK;Fu- 44SX?b7GCcG8vm ` ` ` ` ` ` `ʡ.Hb0DDDDDDDDn @xxPhx(I8C]~qZWNY;DDDDDDDD#;DDDDDDDD#r 08Z<7 1| 1nڌ;&wh@qZ n0`gW~5;'5}~ۦaŪNwc)ND+((p/۷q u1 #<[nt& ΠhlئQo3VVmlǤѺ#Nl3,-FigO@&ѣeݺu WWWcя~ k:NNT"""IQ~2Ǟ?r X )W;UrR!w* Sp LɕJR)JZ+jFUhڠ 6(x)3]=[9pҖV8!w/q|7w2d2k4?} hn[_9;]z+-;kuqAp9hx:~8ϟ`(Jcܸq8z(ӡP( JJJw^:u ]]]4id2 ]vɓF]]>CbرłÇO?ř3g`2?---4iկVQYY Z/ .S;v@Ġo ٳ|p pyd2?No&ƌ]vv,Yqơ111شi|Ib??+WD~~>PQQ!͟:~ll[T>b͚5XhaZ9u/#??׮]Å 6m\"x"jcĉk'ODcc#^y\NSަ&lذ=X5k6m<8޽ؼy3RSSq~%""nCr)omϟ6M.wF0o_h3 ˰bGD#~;[x뭷;yyy*!88B}}===* L(JӉZ"44zYYYԩSֆ=gΜ/^,DFF"<<YYY>8N|W3gt:Ѐx1mff&bcchn:B@V+A`ԨQFvv6jjj$s>]w\T>̞=j3fϪ*< CTTyDEERc„ uXӧ[jdeeA#,, ,ZBS'A[7HKKƍ;_""zr}_?OO&U؟5wF{mU+oSAY#tK̜5ONFD޹ai&qݎr8pwܝ*ӛa ~v |fv]zh4˗1c ܾ}ӦM:nwn$5l7&& x饗PYY F):vq84qIcFDDCrT}w}u~vhmmEjj|$&& ӦMRVN(h4S<9=7/X|9l6Μ9]va/=ZX;OZHNBJ@UނM}F 2?VV8J)VskiHVaZa|.++Cgg'Z[[G̙3)ɐ"L& )))ܹsnS?}tmmm8~dp9L00qD;wqqq^;7v ǎl6q4JQQ܌L>]r@;RRRPVVшf:tH JI]ǤIގOYQ^^P]l6F|.N ¯imDDDI!G"oY#wykl<[(/*o"CHc/NR!oI͞+hbBT~"vrh4X,PT‘#Gm6d2$&&"'''|PTTw} 3&!!_}¹|_&;wFEPXXqqql'Nfs[o7J\ٳ* HJJ_~6 ɘ?qM>?~@hχb;p8tqP*2e ;'##ؾ};t:222pΝ~tŖ-[k݋M6ARA.c8t8 nɒ%*""zI!6lp_yK|K.k׮l塞v t(H9 "DR RP)TjB%iJJ-WjjmVh:N ѩCH><<(,{[$@P@FC`X;Fd5LNl5wllVyjU8lr&Xn;rJ"pӹocG ;#k&vP+Ѫ$xiܶylyہ*Q$u>L&.^|ljjBEE-[AP^^(.ÁAU!d ADDRT7o^ER㫯ݻ1o<=<333qAl۶ Jɑ(:&MJҥKdDDDt??x,"""""""lwo>CDDDDDDDD1CDDDDDDD41CDDDDDDD41CDDDDDDD41CDDDDDDD41CDDDDDDD4)#`"ap'C]""""""$ N""""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""C]o⹱H DDDDDDDD-wAPd&q{f411CDDDDDDDAP`@V;ˀ'ah݀т y6>|[Kõ,(((M:E/غu+x>L&v؁}Xx---())͛7aZLL2@{P?999 ƥsN8L2'Ov8Nٳ׮]zMSPPYf駟P> 7DDp:a61n8<3< s7u74@5J?{g2O63 ?O"t:>xhĎ;0w\@Pիؽ{71~xu A`4QUU?OxW1j(4uA,Z!!!裏n:僷p& .]k&… HNNFll*ի8{,/_H=zի<í#?>41w ?nB8?0οVཿKǸ-N|т퇯 :ɊŊ=rju_J 4HeǻM}-_+O28ޫ8qJ A#J;iˋ&)#  (++nGvv6:::pyl6dggěo˗fIIIͅB@AA駟⩧„ P\\+W@P 99YYY(,,Ę1co7BC0c dggCҥKj={:{[bӦM8v, 233>eeeDRRrrrT4kJ倜箮.ozCR*..ٳpB~sEgg'^*w4 4 ((cǎfñcǰx>i<}p:b~QQQr Mv_Gz}]7~qg۶mn4|8pk׮Sz_yѣGVt]HLLĸqfLH+V]]]bh{WWW !//^m%%%FANN žT=hݲFXM)j.g"qB(f` xg_L\QЎ_qbLǎÒ%Kbttt`ڵXz5QQQd\|YҥK0az=u=Ǐ믿իb 7k֬>a>/^ߟ$U@{N*_4sLt:K?ϣnGaa!bbbi&<(..b,+ѣ(77O?4N':::PUU M|mm-֬YEmX ݻ͛7#55Zfɓhll++WԩSnWLčV3tJ.ƳsB@!aNAh!ڞi3L&EcBd='ks6 Kp:Q\y?\QbSqbPjqV+ԬMݾHD#==* L(JA`ԨQFvv6jjj|233 JZ"44zYYYԩSֆŋ݂ UUUCpp0"""z\xYYYDxx8"P(:u*uuLOUUUx'(<󈊊U>U/rt:a[o?\~]2ΓT|v[ 9d2}Y={w 8ߟZ>/_ƌ3pm):F[lq+Fnw :]ze2E|S{{[ƌ{C: yL닯z~)гrcc8L$@r>u1ͰZb=s狷/uݜN9?ÑW^ (kyhmmž}`1v؀KD(9s&p|Gקobǻ0֬ީT*K8y$=X,X@6ݛTxB| RAWЪX`w8Z5E ɼGiuK7bz:_v%? VBɣ7Z0C4gΜQZZVfU7_2F477СCb0:K<:bLRQZZfĉDzzk Www7nݺÇn 1KtnAV(S?/uy z4/Ʊc%v; xLv% eee0 X,8uMw~!t:P(|jz։GZ#Qsz7-N*Vf"h{UTy^4.6s肔s;kO!5N8O~ڷåS:(2,J9рqf!99>//EEExwŻ%ddd 'geeȑ#ضmd2Lnܹ-Baact:b˖-~Zꘞϟł;vp ))-"UgIgRXh8:K+<<WFII *++p8oۘ4iX?P7k׮u%ehmmb}鋯)ʀu='Oww}|3f f͚'OU{R={@R!##III㏑_y=l\?CtuuaܸqXlـ}/︾88tL&"""diچkע۷oNCFF:qV^Xolmwx}R\;33&I5 y#Ht~vǞHmsu^#ى-[˗/ Bdd$̙3%#""@]zz^qa_~@`9ߋh(jd2d2rȿy *Á[n!'I=|m4X k[Kh;MVYVsY[vfw[V&9lr)C.wt-z>> v=vg[73[3aZ)GVo:_;[LTj[~{)2ɟa{i`1CDDDDDDD41CDDDDDDD4)z ܞy=ÊAlیF#v }cpghZDDDxc۶m!""""""FM @AASZZ*nq!\payhA?Z:XUpR|FD/^Lсd;sy>NwƯ~+e&""s[0P4p IMMEbb\պm Ԅ{l@5J?{2 Nl3eۈdqEš::I{{mÍd¥Kke%""yuu5چ,}("13H$FvÉǑ Rbó58l4[_P#??p|!yTw&WN+^^4 +NtZx{UBEgVʑOxTKBҦF`/qM <={,?&pg{L&t:="\t ZgI999(,,oɄ[7{غu+6mM*۳+V]]]DZZbW\B@rr2T*QPP||xꩧRTWWf̘lV]eݶm[z?y&>6͸|2VZ5mAA^xn#;;8? S݉HZUUf͚0L0HOO?~_5V^ \={ImtI466W^L&'|5ݚ5ktJɣk֬_|O?P(..FGG֮] Á={ .;v K,1cpittt`ݺu0ػw/=TY='LeeeHOOFڵkxWqY۷ƍq)-;%MMMذaPXXT( ޽>,PYYxvb̙Xr%{n&"F|Sn_N܍09`-rDVU\3f L&]R]ш-[+-?#O"""1gΜ~PS<[w|q]6J^z 'OѣG `}hmmž}`1vXqT̟zOڃsA<WDd7[͘Di0J+Vq`݈ ӈ;(w V6b|Dq:-vL6yѽs:ҥKQ޽{71f`0 Ih4iFc'o*V R шH@[[;GAAAXjX, FDDD4V+xϟ~K kzKp8˗/fÙ3gk.l޼OZAg⋈@ee%龙?ӲIee%?x9}t@y> fkM,uiNz 4LFc:tXqՌ?'5`0% _C[_5w'۫+LDqF#N \.L6 ӧOGii)Z[[ֆǏKm󔒒2F\l6pdHNNFQQL&PVV&NE󔘘2tvv}Μ9ױ|Zs&ˆ,Fi2;_3&2T8=V>BWN{g˰(u4VLvqU? L'R缯ND }|駨ݍ;wB`ѢE(,,m222ݍ۷C!##wN!66[lo1h塨x ipl۶ 2 8 FDDD4.] & h[\Pr9/^C,Y5JBnn.J $%%?ڵk%fRzuL?C D@A""""""B'"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""C]`0 u0.шAe` ` """"""""""""""""""""""""""""L9x[̛7V dgg{f4sN`g㚺 TԊ *V Fh[oί[iocvn?g:m]+nET EoH[[ H4$$\A9s; wfY J`˂\ QpΝAR^^Ñ}ᣏ>)69:Û:#2 !HF:ϛǻヒ^mkkCNNN<6m<˃P+ H^wWbAaa!^yصknݺ5$e~=5Ş;$>>*iyxx8QWW3gz*CW0@ Pbd;DaCE444ɓؽ{7{_V^s uQ(hmmb8Ÿ~:VZRB۷w,S_13H16W@-$2~x/=߼w.l+k VgLjK&&|߉ )_B"><׈{.4*d/S{5>^6YOAGɐÃѪXmMd-Vv})f #s}DԓRRL0J:_}lق^xsÇa41uT;֩AII  DFF:WVVш$$$$,hDqq1.^Ad2`ʕ(**­[\SXXxtmuV<3=۷o";;@WիW> &L<˖-Cii)f3RSSֆSN5kznMM :FT*$&&ne{ݬV+<*ӑ Tڣޓ'OQfW\..uw V+JKKqA&9mߛs?jjjbZ#99>Ojw\qu=_{kujEII Μ9R4ܹT>8,ktn<3o_k#WʩY xvY^ɯhA1(;`uL;*{>ioUcujyX߼PL#|mZł9s ??F6mBBBJJJ3o5عs'Ñ F~wUǏ 6lСC.튧s¶]w嶼6cp5|իqʕC=suq5h4m 㮭M{Sѣڵkj*;viA̯ظq˿(?I ߹O?<~2VuYnHϚ vkhG7hθyY""ТT*'&6@tPv;ϛX0kSڕDO.`~|H\ER#R)L .@PQQQn銭7Blo֕JhjjB~~>f3ƍg_~wyfl9z霰멼6akk~;v2/_޽{kzlSys=6#WD_ݯɎ  *;r5TہEߪOSC`X3{ax:T DžbNXɂǯU%콓 àaD_QVRzDzf X,+ى'Ndz>kOrJLNpKKm>()) :ucm*o3جV+vڅ˗#22cdF5&=u=1=z4Z[[Z455!>>zDDDؿ?y}@q<]zVdNS=hxZ"7 IDATARYY[;~Oydqzs bŶW k7ڱ:,WR@G7AL C{yfGfy"#=α֨_;pZ[[Ѐ{aW$ v؁K.AEvh'(**^GKK JKKS>'NDkk+N:(OX,fł2@ggW8::hooGSS}]o O$..thhh}춳DD%"JJJjNg)zڶm{ڊ#G X=aϝA2=w~9GjRW ~+!{Q)d//ޮ(UHn۟OJ!`^l\mE|Id{4um&LVطXPȤӗZpdQ(HKKCQQ>ٳNiOz~OLLte[*bɒ%طoz=}QFFꫯj}C&aɸv&Nاr dyC.#==v\.VELL {=lܸ~WՈ͛zOII Dhy]W焯ug޼y0xaX2""d0҂cN*}iSK{zm۠Vjq~Ճwv\OzHh` ~2R!"ȭ~JL*WHeJB姒ȕ*ZF MHRƌխ͘7UK.\w'9p CiEpg)Cf4p>hݟTvn<=h4 ^Bdee H|  <, 2Rۏ-#-}@j*]shj̆vI׋Fa$0LSiMviR:h۶co;Ğ;رc=n`@fffi LfLBjQdggH㩧NEl۶ >Dz'N¢E DDDW__}͛ C=cIYڰe CR9$񈎎?WTNÑ:;N+TĜ 쭨G18,DnDQ!ז0rs5By޼?U`ټxr$}l6ʾNFc 7AH z?~6aic~w^  (g… qF>}UUU׾A2̟? MDDD_q("//SNQQQ> //-BTT*++g1ٌ;wbƌXj]<̜9ڵk!HiA;,G݇hՈ3WuXaGi-S j0h1'(qd`F:Ny\&ş](:ue KA 2)&c0ZS!")) 2 qqq8t@ ! b$%%qRRRPXXh'%%!""b@{ :Yg߿K.E}v|'xczoX(ڎ={6 OFLJJ 2e 4* (ٳg\_*bÆ P2L‚ t͍wyz|5v7ARYY9`=wUԣh$_[>LQ\|_1='TV)1:67tFɠv8e⍒ ؒ=(bh8,o+8]SsVH)J]>`d-88mmm0 0 =h4@;b;vmCbΜ98y$>lذmzoX޴juܱuC.c͚58z(:$''c=֗JhjjB~~>f3ƍg_ڣԃw@Ů!Y?z QXQofrUjT"A(.ի2 0kLvZ?I㴮c^*uŮ`?+ÛbF A"ظh./Nss3j5T*d2t:BBB---]cW (S 8шZ j(//h847޴|UZ[[iŊĉ'gjb׮]X|9"##aXPYY +p?R4< |tٺu˿Ǐ{V|l@P/uF(GWaîMm&m/wCaH {/[z='?GÓ=aiB6:G5jO*Bk)**Bkk+PRRiӦA" 66EEEhiiAii)٧r9sixݻhiiAqq1M|\DDD4 4 N8V "$qgpX6;Ph u^z%XV0w;X""""""""bpgDEE!552N7x!""""""~cpgT*\,`gϹ3B#''wApdeea߾}裏[kUX?ҟ-p|}yE<׈mWpJOpڦ(un¯?EDws@=Y 'A&GCsʱHue5u`F쥓1wj0\_c}[M8q /nr;D_VDUU`HMMT*EMM :FT*$&&"!!fEEE8^r%p-:ue˖fhkkéSىT̚5 `4Q\\/B"%%;wZ#GwuC[lAvvrd=;mn _Ċ+PRRC>unkksWݟwt[/O%QЀ0ݺpH$nWc'Mr@ii)Μ9Q4d2%mɓ[q֭xgzGDWMM RRRSk$''In oo6m!w>Պ9sJiiiعs֗+ $݇eQNմ`q=m\8 Y 'ٟ/w *odS*cbVjDO?ųˢJ~ F67 .~ ]GCN{Qyū:@يUթaiB8~<3o+)mwM+ЁwjGBHz%2Z=?~mmmذaqСC0عs'Ñ FƧ~+Wa-O2,]N[-ۆbA^^Z-}YcϞ=󪫫ƍxbd2yll,.\`_0a4W̙3Xf ֬Yׯý6n:̟?^'w\'|sA~~>F#6mڄ ׯo7rW<s_m/~OƪUzj\v^W_76߃駟⮻r_އ\'|=_n;v ׮]7 ^W\˹d pE>{,"##!a{1Q׮]_\ƗzWm_>=]=Z]V±cǜJCA7s+zza^F]* +(DD({A*AwO U][=_`uc};{N~NFh9"BpozUUZJ%XyDH)i.ײ)(:}?~ Y #1Nr3^z%?G12220j(#%%.]T*ņ R d2ٳHIIAHH=6z&)) P(}mXVv@BB6m1$)S%SL4666c ]zz:T;w|zٳP(0}t{ILL\.Gll}d2EHOO?4 RRRP]]yoy:M[p5--队9setoo拾g"&&e}y:r|q@`` BCC# 44e~ޜKmFFFl6޾MuhxL&lÇqQ,^m^Om|wՆ3ӵ )))h4 Drr}=_4؏jTVVj*;+sՈPa^nGux81Cފ1/6нcTڛ9VD"Nu<(>o1`ȈRy ~Kk˘qO -qw++Aj9;?GzH4egg5 t:6o\TB* 07zAAANݝ}nrk֬ѣGq!DDD 99ǏwZ<,SJ%"##qL>7nԩS{-;/88Oo۰P0G/ݟ`lvRѠH IDATl6{n7Gb1e[c0wj+O|do9s"*$p]AvN{tZ8L?~ (ɧlO@T_FkD_U~~~xgш[njb׮]X|9"##aXPYY GssUssWyr[,]IWXN8q>}YyS 66ǎ\.ǔ)Sz!V477# |zۆyKRA&A!$$boTe;ϣxSc>۴~mjZ!J{,tҵkz v]o=aZ}:_nرK|;O>Z Ngt>Ճ$غu˿ǏWÓO2Է-qvR"wq& H<ldB&HaXm"`bn?j,ޅw]/mDžb[p~c}v?GHݿU&" IR Ni &Wi Ov_jy|#n1wPw$::hooGSS}]8qf b ىiӦhjjBKK}H$رc.]Q!By?DEENC<͝ ())wϝǎ$ bccQTT^ԗy[v̽i^*EEEN6d?VN[Oj{/<Ν;vHVozS>W/k\\JKKЀ}\'N,HE@"00:~t5ɗkgdkk+92`;?- Co_\Fi➱ٓ{N\T K1J.`Ujf?oZvkwRK,}ǖ.]sqFrDEE=~ӧO[oeoH%&&ϝeddZmy_D"xZFDD6oތ{r;6mDll,͛q_RgB4Ø?>Ξ=S}/YVz.=!bOh믿ł?d2L<׮]ĉ*' ---ؿ?]<}g$w|i y۶mj5Z-n޼ٯzНﶎIo?8<)VaOfU*dV WXOI LRTRP2h?0P QjB!}uSf*s%uTPPq.`0x@q(v y<ۏ]~t_ז+m)WKe}\vR{{;6o/42B*"##cBDO>>իWQXXߗ҃ؽAP@"@"@*Bz7łz/@ ]shj̆vI׋Fa$0LSiMviR:h뫩co[dǞ;رckzb0u݇`M޽s¹EzrzΠ 6Wӗb^ٳgz.QաZ8r!4<13y۩P(8ї\.ܹs4Ȯ_<̝;cD42%%%a޽ͅL&Ctt4a#;""6R9s#Л8q"ou1E.bP?nYDDDDDDDD#;DDDDDDDD#;DDDDDDDD#;DDDDDDDD#;DDDDDDDD#;DDDDDDDD#;DDDDDDDD#;DDDDDDDD#l q ࠹y@DDDDDDDwpL6;IPPPh`';òF0wF0wF0wF0wF0wF0wF0P襗^ju<-- sν%"""""""/+wATTRSS].tx7"""""""7wJBppeBnn.x$8xV x0s^vZp 篷ɂ{ƌfLܩ_7tpZ+ 6"GbB=MBwReS{XG+xiL̚AbLҞ#w;˧8{.je|2GcUJ]È;999Άl__SO=1(ضm}QeE'NӧEA.tщ+͛7zcǎtoSa˖-x<4r03HmR#99uuuw>o6-"y<EB.HFgxLڛ ,7O.Q|[FD} PBpF;?\_^4 _K nb?OUXY4|"?:ns?~ kߍSeU g5Z{ QqٳgqܸqN>*|k_ GYYϟ?&""8QSb娨@^^6mD2$Ԧ!"d13H1`ټĂ{=<NkKX '|sq$sXJC?cb *r D>:Y8s'>GC9<v7~l9PzވO`UjVD_[   ,[ 0HMME[[N:Nb֬YE/"VX  == h4/^ EJJ d2rrrzj@lقX,sɓx衇ADDDDL&ZZZp}AVѣGa2T*{vʕ+QTT[n!)) ؾ};m*h4@MM JJJ܌@ddd 22e]kjjp!466BR!11 Z())3gT*;w{ y <,GCz#d-rD8}Lpb8RQl$U*B{sF⇍"򮋘4n4z,JcY7/$eVQV<={81ܛ]AD>r |ICO<17m,Q{mG͞= ӧOGAAFm&%%AL5ǩhJ(hoo$$$`.חJذaj5AL&`h4]Sp$''w4<03H*++Z%h 7[up-|tY S 3bulnAPZq I1Dg?D^{{0J)S?O\юM<6; @s;AAAׂlFq 主3`> F `ǎ-"""|hZ̙3'O| 6MM˛vZ;S{rYGšCd?RMMMχlƸqZ[[{ӗz ; 0@>yջeqň]>Zgq#!0coo}iV+vڅ˗#22G:cm.EoA̯sM< A*Yc H%8XՀ'>KO΄7D"O R P*@@奈"1Bdg֜w& ; <c+2simQ@`;)Lio6{Vǥi̙3縏{Xcplr ')2O ÝЧO.JMӮyy=pp&k nT- """"""RwH%|/"um+q׏~#Fbǯ/Y|^w%|NwUoXfM &dyP\\z yyyKZ=ރx⥏gը ,ߘ>G͎P O1=у{c8i{xHw(V߾ ~cѿw<;nWi < ,+{ 8 =W n8QMǽI_?GjI1nD_41B؁J-=>`y㵟OvSxOJTB+I7A^;cuk8.879{8IwM\v dٲeXd z)߿>,o8ND7|s6n܈-[wf͚hDDDD' *gdΡ&WZy~ajĠ|uxON\i%ӴيϿ_:|_7qaA(F ~_`5Cմng9|Na`aK=Gŷoz4l2\x7`ɓQ]]͛7# CL<^z)D?0n&^tF´iy|ǪUk.xѣGcҤID"Xl͛^z UUXb,YrL=Zw;#3f32̙{AJ\qW\ 6 c{,[믣'NرcO8=֭[vZ wիQQQL>Çywƛor$ 7cǎsWƶm1eovlig8{9XktxgXlY[Z6ˎh0`'v\1cW-+uX'N`I 3pV<,5.Lɗ?]7@~+]233zܪOD]zf\3c?VT-5 v౿|U>x_{{s` f^ܸ+'u ?(V{2|kxݨ lR-x*Hºny?׎-/!^?N.{w܁//|ŋ1vX^}˖-;w.͛{bUV ,m݆>Xv-Z@`"fΜ3gZsFYY~GŚ5kзo7NF<ǀi&$Ilڴ  ;X@oߎcԩXj -ٳcXr%&L;cƌ/fc yaɒ%꫱j* 6~;Ν~s[;l虈LvPU'ˇ;jƌEէǣ&mP6ֿi:emvMQXԤMvmo5o-+|-}8s I`M0_}}Eo;z]i?9zkǼm(̏5(-O5Du8M`5Cږ9[n09 ק A"q 6|̗7Ga7 ̟>$O-_6c"͎xA?;ރ?";YB| 7Lm?o._}h~ڞL'xX~Ϝ+G5_P4-kK8UY'pTքZ/~4 Ggb1mܸqF=z4`ĉD" ׹SLA޽ѿL<۶m`6mzBL4 ۷o~'bbmVw:z+,Xd2^{;QYfaݺuX|9֭[ٳg8xc. X ]tdĉy?XDdرcxZc…6mx6 [nŤIPXX\uUytgT1Ӯ!Î՜gu_=FE\<qQ/^cH<K%T4G=c b +'W3O6ڐu"|VvuOUUAeyyP]UeɚFB?SigqaS~x6ԡ NhmQ@`vWw_ wH]$ (yDDZi=(_iZ_yXPZZ v6 Wer -" ^#Vnƺִ,8D_>X@e'WFDDDDDDD_` EEvL8(XU>~ʺh孕[Y 4XsJĉ XcB pq_b[8D";lЀ$7uIΐCw׷|˄ bB$c3@  -5xXRJ#J%DY%9g8mA #O{Zi}>|=⳪6((? Mh56Yk|?m7A :q99GA4oo(R|%*DPT"&6Usb"ɔI:*8DٵCDDDDDDDNLhL* k5&L~2%bCqA(֙LNh VJF;ZkN[%E6X$H $P)_E]L9eSqN; Pi?PKHuD51Zx;DDDDDDD16 JɰԦS63AhXSZ;g};BQ*iYBq}Cf x+4-ة-QJt ,)PBE=9aOM~h>N[ HIR) rȲ`+QKRʂү*KEyC x:4ihԱՊPGJR;^S0!""""""TE> E)!&F4e`R5:* $ "BHEJ-)] GQR(A"tNEУboȣZ y5I\N=:)T)"]Ne@:`CDDDDDDD-G +JXeᎢ %H (~U-Ӑ w$jhR Ui!TH(iCDDDDDDDBG넕U%"UKCUE(Dk<5qk)TM C:J)T*(]h4Z(E** EQEX% Eڊ**:aO"ܩkԎZthRؚ4 ! M&J] jHC!)5QP(@TQ%Z:%˲mE %a5j+vOMxWϋEǜՃK/ vtM&4C7 UѡPMHSEcKˀԅiòVDф 8R RA$P~$% Dl$&YsgݖJ'}*V;M[ׄRU4CS5[ ]S5*4UR*4;DDDDDDD,RQLiBضX-4ChTJETմt%b@A4($$'59J-թ)G&Re!œ]*ҩXkRtCwB! SPU]LERUU]ץkM],QMaB,Ž躦X-UUKՍh!1!t z_ʦ])s!Dv wbSqXңJi.lC)v4iHE7L4fB3 USuU5)U!""""""fg*B ˲[XJ5ѢJEq@Q6)HH Yj wb=nTab;TU;RS5LTuꦩhuE5 ՄJ5;XRD`KʈeiV$, +@JŎD!uM EKHT e,(N;M6jhpX) ,T"HakҡR5*4M]jCs]tháCs8MT/QZQ; =VmMtMCدR*#EJ%**"&P då R ٦g5ES}4MG#R. [SBӄ4ak4MKu݆6nt5E3MCDVMDDDDDDDeKV$ P TMJ4>a 5! +*,ij TO("l bb*:=NMӣ_eiR*R RvUj&Uꪢ*t*jn:Tӥ㼦7>t<|m%IXjE,fa@4zGz_ZtÌ@SEH) -,T芪[V6zGUB-A@5Ꚛըk԰x2Խ_S4$Yl[pkn ԥ2 SwxLUw8LMw*.p&x ˭qoD7qhA'@&FDDDDDDDTnuj|g~_qؗ_h%@0 d0VHXGTH FUԀ MQ@ @4)Z~+)Tގ(}\>%KHMuHMBPhhRSUU3 E E3Lv.p{=N ƑRBJ EQ(\ۙ./>ڶtH0 Dj(Zଉ;GU۵k.*Y}Wc;?Ɵ3˖-;ѡP6 pg3\?gB[0݂Ec)8 pۤXxq#5R sNMx."Ɖ>u.bڵkλ^O>t^vmmk׮Yw]*^h{.Ygg,v6?МhҶxg +|71udvӟov W~<% GBns`"+.Bˆ&Wڤy蜚PЇH$\-K.DDmeYp{g*/YA'vl ?.YLu;;n7N۰i36nRvkhPW3fƊ_~_yΘ~jڑR(12߱jZC^<‹p8gw|sϿ['M/W|nuwXeۢŋѡCrRʊX~k{.++ }F^V~EDD'V8##J_8c] ?~<>_sjɓ ҋ/ w>wuHϷpǵyDDn_JH8 |FQvBH%Mm"۶QR\4 I$׭][%F"Cp:().iCF ;`Μ4y>CϮ.`ڵv: { ]| nΊ)%z[n lz$H){nL2W]uu#mZ_[~vk܇}Yr'ࢋ/-֨Q=WxGѿOdމ}ࡿB`̘18R<_ǷgWٳ1} DDTů|`=}9Dzks{7Ş"dAɞf@fL@ك\jN㢖 !s{wQU.KZV?¢"|*Ļ3g3ŜPTT%KSNN>K+y뭷1ðd V9qXj`ժU8eh(#xw;D_M_|!j=^? |טRyB}>F/b9?ߩ^S;v~Cy3fdR²,ddcko~O<$|>/{[o{W_ þ(ƌyKΛ7njUwߝISɓ7lڌ;#GVwg_|Tdž XtWu+b_y+WեVC?\HDD_F £>_ xIl߾{1Dhű^Hwu33<^ړ/+㩲ouaU^(@(Vaeoرco@J EQjs8lСhTXA9έ?CsC?;'cx3O=*NOǬ~mpslڴ H[mGU ii8裡( z≽gU_r š5U5kbРA%EUMv]CUBX[8;';vy̘ ۲ʪC ׿ ovŲص}"?~,]k*@8qÆacaUW\_qQ6-[>} )!kP /[nV?,VyJVMӴ>u>u#c.~Q3/.,CV.;=t꜊Yᅦ|4_['OGm[6! c玭׿/v~_>C {~e˖c{ﵫ|w'_D'benVn#)B(ؽ ᡵjf蚱Ϛ;maHO[P"":~$$&;(OH@8m1񦛫7t~\pܰa HNNƎ;PcW4ɧg +Z:ZȣkV~hƪnYNmNjUqu#'gQd\sux7fB!w書?Au]uɘ1s& QTT3fbɧTy_޻gwt _}u8/ ^eU@ %R:uR5 }?p UCl2,]CU\p(mÁ]vU@`?{g5V}DZ'})%&| xG 83qU<c-+oԈX@NfN1#N8ΘQb]+Q#:<(. xѿbë>3~ۚL:^o<&OI 11'OÍ7ވzcC!\z٥e#J-\So]~̙ǟxרG|)SVl_\uUĩn}?`0Xq^z .իA֦߯X3qɥsJ vŗ\7|j#"Rrtdef4_P( s&Liع}"wB$Dž_ܮ kשeJ5 YEA#\p04ô5C;T z5dGbR+!)ο4c׎W]^B|'pTCBsy6g_S !u#!> F46TUiMW]Bmo"<.={}aعs'>S7*{vUp:ڵ;vl 0йK7nD(oބd$tF49BϾsBAaH N JzݕǪor2k<^{0QXL47.;uaF"΂LAU5dޅP|^]4 )dgeVL%Fn=u}S=#kwx⠪*¡33*jLjtk2v3Ǻ;uFbRlݴ: 12ґܩLÄҘSWMӹk7:t!+cO%OsRۚk8/? "yy"+E|>CP0$pш G"UvT G,6tl~(Z~\SϏ~ CG 0]mMy rC.~Uh4=غe3ѷ_?" t 3#nEb||Ɵ3!bDDD<_Vn+N]-DSib"DēCCNA||4 ݻuFff&r}6@U!z1")1џZBDD#IJ~ƖԺ߲~FV*IlܼE{i5g}jginɦ IDATݻpX#烴\7%%Cp M蘜Pm CD"6WR ƺj^ vZ^sj6s:HMMEjjj( LÀ$$4iDDDDDDDն4\ cCDDDDDDDԆpD56K5wl) !! !D'jkTU(*TE*P7""""""j[LJBBG#m [r*Qp<0dò,!""""":@5wHʃAN5B  (مYZx]HMq0uG WNԺHI8oIzqXu9Fձh";O{XxQq ;3iKmwMENA,#w~ұh dXn)%(!tLJs/B87UEgFI0`1ckAQm۶oѣ/k B/^cVT.bBz]ǰë~58͛?^vFp.̟?ɏI)19XۚZچK nKÈF9*l(FADDDDDDj᎐E%HLku kr' %"ERŽFQ/HK_9[W ˎv0D~*/Xr K0`@!ɜ9s1vX̛?v@vO>鬳ޚ,_ +/rw54 ⥗^]wމys⮻‹/ŋ7qb]#EQb~Zb4cO>!}>lc6lĽ!{zנjQT\QT3ґtő CD-}m#DϏhjNfz6vBWW=çG@cH K >ǖX|GX}%amW~뮫׾|~?VZiӦaժ3?wsF|2ꪊ{(OR‹.BFF ##]|1ؾ}. ;c\CQ*/oZʽ[xmtxk;`'‹.jT(2k{0l0x^ 6}7f̜QW\F7܀ݻwW:/r5 g_kZѽGx}ipޣzק:PC⥘n`_8#-BQܸrX:1s,yX\{55k`IM{S,52k,T;uz O0qM35ӡp ;ԫNӉO<=԰O~ju}{ l R^_˲5otSPm40@$y[P "ɌCO_mk: ~]s5Xs~ݳvv.UUu\4aձ@pBBѹsg@Ff&j99xS1R|[CG8MtMG 1[Ժ,@ ]i8 xLKwáp~CDDDDDpr)K)tOj9l\>V\:n y : .%g]{*R'^WJ'xNN~CrrN9spUWa+sP:h̙tHJ͛_1 ]ǩxO=fY6dP|Gʪw͕ŪN ]NmNjU^{5˦UV>ʧ򭺫>~W/xp5V]3g. 4u9K/#/?xp‰'547~"y+ܜ[ jK4tH/]wGgcS-Up ,gCA=?sDDDDDDͤg^4T wlFA P0ES5$ǥS|g$y: m#gfm\ =+ P;0v2'־sŸq㪄g~:̙ )%lܰ RJ\{[11< u{`ڽb1fX}Ͻ:r':Gu^~/Vw}7.J\tō DFiO?N; O?46 'tR.;2yrqu]0L_~9.2\.qԊo*nq" :")y :78Am麎`̕jl!P *>Q4GUujc} HV`iB.. 0m.t94^x͸319ّJHJ.صeի0)%";F:uJn)*COwC..iG(~?gby]wa۷>V*n݊_y/<|5Mrǿʏj7V;Ǖۨڎjo,\_:-dE遰Xsvv..'7i6!ơHX8G:DDDDDt@ ]u/`QA^ R))*B~_h8 C ,p$Q5jGpA jH<FiP}-_ow#w(,Ct$&:TMq8f y._wb oտ^k~aFl„sp-3z[oŹNg{M4W%b=ڦ6շmVu.U\M7X,ߐǭ%))ѠD=]P|[IV#]-,mYE.;f`@A']WåHD%&v#.}GQ>1+s0Qc?a`izt錬fzw ۮǦQH)ѫ{W>f$ѿOwMkDDDDDD4LcYD-C!(,,A/x\yxx\N`+/KUu!11^\N'LC6O Qfz\?.YRqvsT r(R:r! 1!jaee0A`=ضu @kGDDDDD_N;.^Ls aYQؖ]6-K@6,F(lZRJAn]GP@TH8e5XVfzkP/m&)kRD.?-ڎ(Tir wnڝ63-̌=FQa? ۍ$t]@׍V, hWm+)ƍ`HLJBn=п@ph8bdaMןн{Or xq|DDDDDDD-DkpǶ-_۶oA~q9rr"DJN8!CX~ |7} i-|DDDDDDDe5~ـ}}|8 8ck vbq80 }X{BMDDDDDDD1YÝnF`ɏ?`Au"ƲÝ.?.;ziV rqqX7\z5p{c :Zٱm!8rڕ6JJmyٳk:N?},DæcaopQgn:~-r,""!cb[vpfya!oT]X!QPU=(x`wg x*Z0iꩮλ3{v;_|+?{T6l؀pJ鯿9s(,*%_\gxѧo_,]cN?#B!!==%%%8trG=k&""bǎXf :uI'%3^8 [qV)U6QPTiiv:H)if_K3gaJCkUUʫb( )%N}*n2°K@-. #J|z)5|`mAQŠ*Eks`ӦM((($%%a8c8 2Rz (h`fƠ X`x xTUśooZM7n[iNl={vaNiobEݫ,G}.^-v|/94Y~;wիѫW/tݺuC @߾}`aѣG=k'""|za~+Wx^Xt(Ỵ@mIȲegv UUDGU/йSgg>4G7KӴ*g̜-Xe?o\]ea4uhK,ɓ}--L heQ,\U5kTUE8SO?a-is/ 6v0 '$(}Y+V!9TXqǝ6{6jl<ǿ6̛zYTJ`( nh [Owb؃$8\7aBtEE馛j1p\OHĖM1!1ٹs'6oތc#33֭eYΆibٲe ),,g}'v)T-DD`(+ct#Q${ѵsG ;Pc VΎ;rJx<=Lx^@HGA) ,@zW{w}wEU}lذݺw(?e6ݻIG^h+V.])v /hq^/Lo CRCZ f&;J|W,%dɮ v4 YY٘t\sPFa+;vHqcOfayxߟiVY`\g PB\u啸h4p(U8lS\\cSwۍp8;cnjeEYIJ@tU~\ZZtR12++ ʆ|VFQ\\ ˅4 {Pmm)hkox}\KZZϟߠ`1#ط?p${Q 9 QToZrrrz;t]DZRemӲ*/pq8p @4,\?222'=RJ$$$@Q3bc4v(n]KT 6 #O:i:銢;Jfʼn7݄p(5D0™gÆwxwf{I@&E! { xzW(?A!X+" (HSP O IDAT@BBHilHv$nzóg̖9s!=FAz{u`b9RT*wиI̚9+V@JJ yi,\|I<|5El зo_(Z$u\p\{/ m6czki[ĭ\w܁ mpA+?K cp:@Nҥ@BB@HAY̌ ȐѨQ82vv[lkłrEKÏ;vYӦ0PTPXxwQh)/FӉ֭Za |n344 yޛEC8{,222pINNСCsJw_<>gO>LFL6 ,]L&mXPP}$DDDɓKl:~KCT\ӧѩS',|]ȟ'Obz4dddy0dP@ٳ+LfESΧ}\2GǏ#** ;wz[o6bbc㧟|p:OJJ-Z`˶$!9 6k]_t k׬AAA ֭[/[l4j#FDxx8_|5`ر]otYۇzH$"sV+ڷ[oT_V/QѮ];;,BvVf3H/[0xx,upiDFE"!h7oAѾ}%+;h0`4"** z111ҥ "#"8< m6l8z?޷RkcZ ~/ZQoܑdIYAr:b6h t6 ,.  1t*&ARZnm\ =z,X˥|w… 1mT[ ^xE<øOՂ_V]&y xeV+4 v/~}V{(-vqrNF؜9HںVܹh3hR;q'හ`_}m.9<>^~.9SЩS'{jnEQ{Kbo+0m&ToNo(bkuV4oFIiVА/F˅s)ݯFG|:u 4 ԩBBBPX_7nSS#@*>FicJpg-ȑ#a# ߳g8ͷ,7h4z}uLܳbXжuu{<""#.tz֭?`t:6_w2331Gqlۺ(m?lߎqIKoy.U;'L(: יH. 7_UZ/KF .i ֝z;SVba*MѫmAhU%A?vlܴӅ.]ǵBElڴAիw& ))XWJp\9ɧ_7~pV;ʃ>g`˖- _y,^. z] {dYTE 6G `8xjz*Q/:=v(BBBвE ĚmRjXd 5=o/\#3gtXpQQC( 2-w'iU*|j-ǏG˖-…0  FSth`EpѤI6w.221nܸMd4$efM5Cfffí|,kN,>tzĵkmېy`h 8 gwߍKLDdd$0@AAfϞ]c7oA||s*b۶z5RwaP QR`0_$I¥*+##d͡eyyyhٲeqHNN۷#33* 6kgΜhZPۻ/ gUb^]wo2mϞ=z{Q?%e00h`<l6X6#""{x|^Q1yn]Xp!L&SezɷYwUڵ+v 8cǎPl]oʲ@e/Z/K.]-[`J… زe , 5kqCYW՘XL|/F!9|#?.IZ.Òu ϜV[b`@۶mWB(\.\ݱ>K$br8q]J T9عk7 z=zAth*v7(?/ x饗݆ >>0cF  $I Y3quȧ!ˀaǾoGtT}ѽDq뼚 2nz Zi2-wFhaH C5cYr0aDsd8NL.4iji4jBVcO5[EQC\iHq:ٌaQPl A@NZCxů?|3j . x|{ <>gΝ;ʼnhݺu_þ7?#3IW% 6htءRy K' ;'<$K>pl(j#U8zffYn aaaEwFll,N> ł¢ S%ɲܰ~=mp JW(r^ޞ$#Jet%Z; Pj6 z暵k1owm㏕~Ѻ\2*( ַ&,Ghw׮(]W:Z򑕓r״ ݻwff\.Xo>vލhDɄ!Cb0r(ȲSի1dm}rLZnGNW{Kۍ!""Ç S k}7oFxx~tСJBk!A鬠[V߹h0  xx`t] m]xhԨ#"VP_֭[XI:X GhފxhZ|7WB}`ٔ\>Dapm]((P4E͆Wn۪'Qz忯(5;}vjղetKao+"ᅬ$o111 Z%!зC$i1cv]4o/D dY5 MlL5ZV{| ~ 3vFdwΆ$I><d˗xݚ $bc̙8hZ\wv ,aܗ_BPEQ}Z8q|ᇸgdoR#,2o 6 hwnYt8,I|'O9$ `%ƀzSJϼȨhڵk'N̙3hӦ<7<<͛7Gvv6v;A@~~>$IRggϞ^&!2 <[lAvv6T*"".l -BHHL/tm>zOƗlF=8:/d_BE {ڵԢE ]kcbb79t Ҍきah A92dHEfZ E=ͭJ+,ka!&Ȓ;kw0mThZA8icѽ;v\c#܆y'Һw!YFGgwa'5eS,=OWj ~iLtZ^urkvFwBop1C:re<<(aN$Ie jIUKFRi$N5ZQkfY7!aa(]xD!,"jݣc'KFHhXKN©Ġ*. @xN`%߂s)1p@ߜ6m܀=CNONNO?͛,. [n@XX233ѣGr>[Ә&e!^sDy~E(o>=)4?_x~7Fk믗I\oT@?O'pii5sP7 zO9՗+/]xz_-xjRE׺?T*3ml޼ЩC^^W^zɯǎG{T*<4sLfwQ<~,' kAƂ @0D^^ F}Riւ< UOQ\>-mQ ^C|0BαȵqgϜ@k:$"$I˯sh4пZ}a޽ؼe+ hѢ%A;@ wʀ v^}Bi4Z8 0PJw͛7xpY v<>Z,k$//M0WZs.ڲ/rrbB{Pr .Zmv.h;EB\Psw?w `[4ž}j5<!' Kc<ZF붾[:+9f͚n#99 &&)))vꚯ>_+Vz~eQ6]״cGy|<^yU3g_sSY͛ၿߎԙdZмY bG׎%-׵H9R $%%1C %/QQQrWlhѢf<|+!##C: Uj/;NK,sH7n+Ke*XG8&5%Ѯ;7h~A>t5w2\.W廒$ ƙtXwaE\sQFtl{3$YR Kbccg`_*I,d1|0L0#F+v%oE~[zѸqc8q ,f34  cݐO |FXMVUgje!"R1o<{;nݺuqDOKSt:{+ƌ Y5_ 4iR--Tw>Zܢ(",4&/*EQJT)k*ei)H>w?N.],ԩ#z⛣jO@Q[3#]`ttJ!o,dff*+^DQΝpDGGO8> YY "BCбC{u3BCPhJ੮Nm$ &N{L\u[lB`4U˛gguU*9v[őFłN„I]H:]tA.]*^pe#olCACRp};v BCa+,&LañpyBp\ҹ3V@C%mUj,IIF{$Jiu"$ v5^xuLo p9u/J* -NIyy|j|ׯ/ڶm *~/(nfG*͟OC EBk8>S% :c2e6ػI!$2v;ƌYe+:]a'ʷCDDT_񳑨eqqqru7ѵôiSQh`W _ T鄵HW7Y$r\>t_oBCC!KE^5Aik0}v5꫻ h=wÇ-V0,C\.X a;S^2erP`Zz5BPiQqS8u$Μڷ));^~LIgO%g'kDD5ßk-M[nO?K^:wʏ&q8v,M\TE%""`4 r:|Xg:sU[U@hh]~¥q0̕ږ%߂[a!fE$""Gb[*atkݲg` +M7Q.hٺ-8;YB##$4ېt$#7; €Cachu""""""" |.;nvEZyd_@rYXe5h50GZS%'"""""" ^*1: AqS5G\\|]芧V}(1\FDDDDDDDݲ;DDDDDDDTk4lS!"""""""`e\YE """"""+!~i0gϩ"QrЁ.B`,""""""""""""""Ȳ\rϧwr1ܵ ǎT IIHJNNCRr2HUV;DDDDDDDD ==ǎCllSL*bccHOϨU ;DDDDDDDsq!cHI:Æ#,,BvNv]!""""""wYhZ3t"y3ZgΜ"V @DDDDDDDTN\IwVk.eq)+""""""" zY΂(1n:*U`p^頎!"""""""jr$IpBG@fw(hIÇð!O IDAT@ A(^P3vWw00CDDDDDDDAk}سw$IJU2GD;yyn8]Nt֭K8w((I(h:߉pȒTl^ 璒qܥK%VQcp_t*˨ja1X\8t:,y`}JQjR`0 YV+l63s@dҁbp(}믑W^yGA-b w A0k,9ү1ǎwAܹsqرӳ~߿۶mc=PG-(dEүpŋx">W^y͚5+Nnn.~G 86srr#%%>rrrp8pÌ3>V""""""sO> V'|zk9s@VW_EϞ=jB;v ׿0dt:;v ֭@nn.^z%/򐗗xqI8p z}}˼x뭷vJ;t,XPK%jV+VZsmJbŊ2Ҷmۆ;vTDDDDDDT= 5k'/ ݎ3g`̙1cRSSaZvZ<=z4}YX,(jChh(?"$$ZRyo߾tVk #e˝~ T[0zh ==| oػw/8k@nEo>c?~(=S$Iظq#lق4DFF⦛nmV"%K`ժUػw/rrrШQ# 4ÇWS\1yV]۔evTÐe~RRRpAtvۧ<7nNKK{g?yfr-ѕhݺ5BCCaPPP-Z`„  Y`<֭, Ə_gUVذa&NK.!22RYF. Kzw+[ !Rvܩ<ׯf͚-Z@#>>> z,?(=3ؿ?V+}vKDzeːݎ4^/B<3`ƍ̄@jj*>ClڴIY^Oͫ,DQ^ǐ!Cmz]d2lӯ_?DEEA">><3gTqQ-[ Ĝ9s裏y|駸"44SNܹs1|pu]hڴm>غu+iӦՋG0ʖ;|ذa^9r$vYq -Sf3{9s"55O#Fয়~®]Cń W_aڵ8u6l؀cǖٷ^ܹsѸqcX[llڴ +,jbJ466#F_|Ç#))Deݻ_B>}Э[7k͚5+Bvּy`Xt:!F#:v?VN&L1c`ٔU*_Evv6m>@~~>$Ib)LS]!TUAQz,۶mS=z4F#ƎuAeܹcƌ)sM2-Z?[n,HKK `Ʉ J$nРA^_@ÇǷ~<_kR'N@FFvZ]jڵM7݄CTA]!BBBLh4e A@DDDijaaa%|y, (eyvl^'жm[y ܹsg*z!y睘2eHpᨰLu{v\~0`u 2\O?5W_}cƌ)bu:8z(.]'|gAJQ+| 2i YPwBCC,C7g0-0+Xhl3\x=,lܸmڴ)71j(|'%B%$$(r^{5h͛73gBe +łm۶M6th4PJ ʐe|7ӧ~EC;v,qy^ZI^ޛGwSN)x%s9o߾&\7V;K,P޴iS(hܸ1̙'xرcF#LR{ծ];w} bև#""""ę3g؂̝&::;vDy=op[ݺuCnpAҥKѩSɟK}лwr/_|˗/Ǒ#GjѫW/L4IRSOÏ?T tƍC|||m.4 }YlܸwFJJ V+Z-bbbгgO >qaH<,]=Z-ƌe˖yVǎi&:u thҤ w#G6>DDDDDD;;xhZ\zjͳV^rC\O,[xD9U$I2%V-iTK :ZhENFךfdֆiãtLr:uҁ38yʲh_|*l|ͯqz+bU?,rA$%n;]|[|z6Y߻G`Ňˠh1|H%OLf5JkNE[vV=E{^N0bX,Vh/JN[SrEnWmvghuB]QK.O,R[T5V ?VLycY2eq3γk>U_;nw7,\pųg`wKr)Q ~nPU^Z,5(N)+WT7 ȍ3x.9P}N)؉[=0w \wlvĊ!"""""""256>lCDDDDDDDW ;DDDDDDDte ;DDDDDDDtEl,!""""J;~x]Fq4֛XOuO.?[B. ;DDDDDDDtEp =-DR՛,U``YUPz@e66oƎͱlfݺY,wJS4FMsuU冽m{~#rd]FF]e{[F֫ϯt+SJ][Z~cެRa(z}5.۶s'p_^^3Jxwt:!ԃ/\ -B蛙 "k6=7pj(gN t0*w]ד,cӉ>6 'MT]z!eӧOLj#7%tפ޽{?~Zbޜ:u Xvme}Q\8pZ.!!SLANN}:g}y+g鲉 Q'_:9~8:tP2YXo57#WA~lX lƭs孷Ynhs=_qYR-$.:T* ˔y7h|94v~j]?^9ʫ^zsY,Y3i*}RR )Qj)uQr\Io ѣpfeA*,@I*Sr}h0 j tXfͼkƖ-n5V޶R-CJb"d ͦLA3療/j*8?m:/]?"S#ei>b$t:j54m׮d]egeٳ/^8 -v";lBk:%]v!:\fwV'Dх (phus Np#"""t1V+VX.](Zlu֡?sʛ׭[7|G˃RкukYV?ztDESbƌطovYb;wDbb"z)-e|-׾}{\\-::;v@^^W^=RuKcHV+Vѷlu "uQzhdW^.'ш?ރSݺG_^\Gl xqQ@aRԡDDXO o^Hv;K%-<ZF5Vdz R@})/&zH\,cKITXse~tT͘;Kԇ}{\ 빲:oJ`Ǜ@W,[j(o[M܉8S'OW;DDDDP$&&>@F*`E7ƼyRʛ|r|gChh(n%8h" Ebbbyב;o}\s50L7nϟ30kŋ㭷ނlF.]*,E0qDi۷o/|yKe֩ oݗ:%&"CFH] Կ7FҼy<;et=Bj eS,r(YeHM6Ǒ#Ge*[9|=(X}N nݲԁPfDDDDZ#==Z‚ J,S<ȼW۲Bh IDATO)[euT2Tb~==V~;?֫̾ݶ<̵?*U?v(GZy_}^/?9e Qu @w!"""Ξ=f":* Ϝʹ#˲ """JѾ}{۲eKߺqy;8ߗZz/S]_Zu[ (rLDDDDDDTj*x_vKɺXsPQ̹S' 0XCDDDDDDT7'7wj<ՙ@;_mܩ$Tu> o=x-.;2NQCkH`&W*;l)u\wXa?x.*+%ۯ?`ՠ;v!;$AD_ϕt̵u\wXa?x.*+܁1ZN9:;> .Tshsy++DQJFNl^/(ej'Vo@TW"AZ:aF8NtB`( Oeb; A x @~~>!,t";;u]ZnECՏu\wXT:. q8zK|o[`X_Eap8 ^_"4P5Y: ;;\;QQQuQ,+ՎDaa!6m FSŪU^Qr ún3%XX9.@jjRI [s`;ID ;ߎd~UAq\AúnL&c*"DA뱎rXoa}]f2p8t:y+{lQja=. N(s+-U[Xuu<£7V-0"x݁*ݳEP}1CT]$IWovTzTU[u`V 8yIW} Ap۸ x{h07d׷z/ד/u]_~;|,hҭv/ѕ੉_ڷo/ݺuCff&?{E75=!^B) J@.D"(-@H R <:iu#0ٞM幹bwffg;Ԭhٲ%_`:N(&^vuH$uzRԥu`vn+gUdY.qsϹ<keuUYm/SLqyc̙8<ڵk_biN㲴}>>Xr)ڶ} Ӧ$ `s\n:,g4ǐaIbkϮ&Hb L˖-äI,.W'K\~:ó84*c$IBֿٳZ'x{Aq)OYV}ǒ3]< csu'/ˡV:qҺYjӪPm Kj5t:~7L4 42>%%ݻw/\-gXlz7n?F\\\,L/ծ  ɓ'>Eiw\[_g0LmV;1]Qv -Žt!,,LU+iΔƪΩTe\sE||<Əo.Ե~Uspu"Qq!8u}]:t<ٳ߿P(|7h4?K,[2\4hY\\8UVزe F5kb믿t]"**J2e/ԩSu;N:c!''F.\h ::.\0ߤInݺW\A>}(Αe-\_~aaah֬>V àQQQFr9nz!??PXXz n:ԯ_~~~h۶0ݑyddd7oM6 ǡr2]|L;w|I<_VQQ1U.{w/jmۧTzC!“QO"<<?AQ#(_0múMh(*l>[ey[7[7%%jJף:=&ίv_Jry=Z=}}|d)z*3Ҁҁ_~E}ؿ ;˔WI*BSL㑖8L:ը~(((]e0`Ʒ8LtO>Λo͛78{o7oތD4hݻwǯ*̳V.kFL7uTArrP:Tj5^s롃y}}o#\k5*'̙8[iHI[nbwKݒoqJ*RR.[@C ={}vhѢ8 6'ge,ˢ}hӦ Nʫ0_n:<Db񳟟t$Rҷ^yUFp1ؿ?>>>ʂ70 {bѢEx"rssR}}} ooo!g<阖*y1n8ܸqLaܹ Ÿyaݺu7oڵk^'bԩ~kO?aʔ)HKK0Vexsi *Zx1;.^,wb͚5/F0x7r΀atG7t:!Cp@``] #GD^GӦMyfh4*9*BJeJrrrRfTܾ}<OFN^1))ٸ1???\\rݺuhǟ| 6ܮT*jԯW1lL21 -RQǣi en|nV>ooo\xUߍ־swx_Ei&_襥h0p@l޼zWP~{s 4ݻQTTcǎUhYM/(ܟw!EBWbbbpe 0ǡcǎ믿Я_2E'мys[n5+_7şW^[~ BΝ~@8ܡkf‚ i˗/ڵkuaҧ-XӦMCV`a:qXd >#ԩSF^bXt|wh{\___̚5 +Woжm[ԨQm۶EZZ|Iaz x_ 8:ӧOGHH>#ZJHZ,Y1c!Y.]ŋ# QQQzlH\ڵ{'BCC;w`0h[81^_xCǞl*#f.c{;n"8p|,s kQWj{F׽>h[81^ l_e,ooCq o"SB!Kl@NCwL_4{;tJ!B!T>gix*{Gyܱ,EhlB!B;J[zuM. 2-gofL#>>8զ S锇Q[T$ǽx$EEሿ?x9+J+;{WT68Sm 31u o=`ܪ玁<斣!B!][ >VFKFc>0vgm9{0рo8q"B @(#O{-\+WEB|۴AQJ #w:_Wp/>O^ -QtR^}F ۔1pdRB!B;*HNy|;bΏ)8?f \){d${{x:{a!+=>,ǏѐѬ5~ɵkHGԦ ztyy?zc ur= f.\~UnŲ b? IDAT-4Ct.O8t@oAV;$ᰯ/Y;vBϣV\޼Fs"ׅyNE螞8\6h=mVCo`hoV7gA:=^1o֖0m#gse2VC AT4[ ƍC蒚ヒsYN%nE i>-[BfWmG0G4D!j5xf&y^xy-˔].!B!T6}a!2lWz E/Hߴ ǎ`߻w/B N2{[` SM=rǍ+.XuVcp7!7VP^ tp\>]W!bŕ2Z/_?XVqw˨=umd5vm_N,Sq cLvVk0ǡ/ ݡζ%o/L+t Mon;GINB zyl]{[1En!B!"}f >Z-t!d o 둾iL.\$_<MC3g zZG}.8 ]FEtm)Z Feː+ZR߻N+ߡãZFڦMJJq3ookM'Nʕ:knj8g.*:NFх e!!=v dlf2znF^?ih8g;ODFӦY,S (s=w1ОՊB!xO?G5~<͞ړ&AxEFHWOX_ԩ!o_aXFqj*ڶEի^\)R^{ N!)fcG4qsҠi%뇒7߾=?r%.M+o V晊s٭EL$=SS@oqmY&L<4ƏM(j2wр^7jm͖ɴuM+ (v F'6b;Or9{@C.7xM߻)g[I3#z/Y$8%r)'zRȥLJJKJT+ +w6xdf=4mѪU%B!7/ Ҧ˙t˛{oksIZ,A3:ݣZY>fE._͛\fL۳em#[bEDtf_31cp8Ү6$;N˓"+t ^/,#yxXhx6_ LAP@*",[gkI~n:/7W)ש 5VҨJTNqZ [h$z-kYFWĖzK@6@G݇]VssB!Bܚ nt{w]Gr$ GҴ7ܴÑvtf{pfz ͟s=^C\6'ʕ{7tivyQ4wFB!B!n1ĬXDms2Ҷ Q*B!B8x o_,*ohͤ[Q <%NHcB!B!#p{4 p07szB!B!1sB!B!! B!B!)cPpB!B!l;, B!B!q}pC۝B!B!UE[hA`w!B!B\Dߡ!B!B38aB!B!ysB!B!;{ ..!!!H$f7ޢE H0_*"$$GFNN `YVx9;NVVVt 22} `S/km`!qa`ƍ`jfrG7nQ\\xAFF~Yv e\uܼyeB!B]xlpҥK2oߎ:uL#$$@ŷ=ķ^ 6 `ĈB A<omڴApp0 ՞15JgG<ȑ#֭w{OoT{oj„ B,X_|h=2%n 8\;V.3H#)) ]vEVVׯ)S/Ç}C pQTELu III'!B!%t? nq3;٘;w.xG޽̷{9s ==aJǗ2d`P(;5@@ 6ġCЫW/(ֻwopkPGX699Yx_~},|/_v8G8[-[ &LPf~yO ?Sԭ[ݻw7|}DDD7^z ׇT*EVPHMMņ aܺu 6mڄUVݻflڴ Bm6lذo6իذaCt5 8ua­7oĪUj*p1!B!Ӳ@XXvލP|No?PV-=YN8!<}I!$$," @&==; ??_X0.H$x饗ܿ'N J²<ޛ{Ը1w\Wlkh۶Yx7ѨQr=̜ׯ#22۷ocݺu-lRhv^ff&Fh9sx饗3rF6m0n8t'OД)Sp)4k }[q>G.ӧѮ];ƢQF8{,ڵ+&Nmݢׯ;rB!RY .R)r0 eҴiX i pkZ_-$% j֬i Wrgi&@i ƴGIyՠA>}f̘͛(ݞJ~ѰaCH$4il+-- M6Exx8FY&TZ&ݛ7o"007niUܻw3J/88lO$B!B!ν{0ba޼yN_GСCe5(sN4,%L?ڵkݻQӧNYӱcG'ȲeuEn݌kڴ… erU]ѣG ?ШM쭗6eY={ŋqE$%% n_rF# ǎ:ueY"--999PhР:n 4RpY8pfi}KKJJj*#!!A}Իwojņ 9rܡB!BHр_xx8͛anqԯ ,9sntI|W2s ={cǎooo_: y]zUx%F%^;0qDaڇ~L|H$`YzN:o߾ 6Rv ,˂eYlٲh%q ٧aZ-<ōB!B*?zy @ƍ@YYY'xr[ e:tSƏ.^(`P(τ۷o/ռysL PልqW_}Uw&L`w aq ao,… 1vXxyyaСBO?uiYbb"233q233zdddرcڵ+$IAQfM^?%%%ב[ڕnz ^K. o۶ ׯ_0P*FeeeY B!Bc;[]eC@&Y]nǎ{SL 6hye}v,ZQQQP(СCqaE-]zB"K7o.ҬY3 R)ك m۶j֬^xǏ88RsѳgO?(Oco,i׮]q 3ՃL&C@@틃bРA.m  GڵkN: os֬YxVzq!l۶ 5j(S-[cǎx"K:v3g`Æ tz!䗜5kxgunܸF>B!b3< .XW^JT*M`GƧ~ BafNՅB!2.,xGvvKh[˲BpɆ`0@:nN9M8JwEaիSwQF/D޽m۶ N3 L:HRSS%%%Xh&OdPz70zhlٲ2 OƜ9s0n80 c܆zd2tIIIܹ3 ??hٲ%`ɒ%ERR$ f͚ٳgcҥc+_6.QFEvRֶ%IIIؼy3BCC|r̝;| bcc1o<\v ׯɓB瑞F3gΝEa@HٺB!T@/⾲ Y,K7 qBNN!^GԱ;1;g[B3#z/Y$8%r)'zRȥLJJKJT+ +w42+= M[*gU]e.\zz,Zi#WV-̝;/Jǚ"BрatM4 ܼySAg.3g`ݺuXd ѣGZhy IDAT'Nb߿mVm+_[e7,͛[XΞ26U|DEEƍ` .ĝ;wxb0 3g"((HؓfZZt"ɲY4iBBBwvom !BHE1<\Rh֬8Ipv"##)S8իWQ^M~巈????@TB&A*eY::$;N˓Jl {]6_ LAP@*"f~֒lu^n&/;[SSj yZQ8ZDHZVײj-сeȗl8<H]H1+*k׮Kߴi֯_0DEE᧟~r*;w`ƌxꩧٕihGOڵŋt݋#Foݺ`, ew:U1{# (S2w!==]>61;v,P\\b$$$ 66֡ҶVz|:!Bz*^wem M!rzyFPǀ;.=zAv_J$tǽpz@̙37n4Jܹ1bBBB֭Ì3>} ##ùڑ֌3,t@L<:ur(..Fff&6lh4o̙P*իjԨ~=Ͷ=e7Xx1-[ŋ]&sƦ$ >cI&z*/_nN͚5ѧOjm̙3]}Gvv67nƍxwZҶVB!w6}T,Ya} $$;Fc] A>1w&Axx=ؑ.]Jjkw(1u+x|wچ>}zA"ؕiLt 7RަnLCnW_?};ga ƍNdž sn 64˗ѠA[4jHL9 h@e\^o1 c-ծWmTGWk;-Irq&Os3ӰGyz;9w͛7ѥKҵٻO;:Z]DI!wT*;Æ^Ri4 Xt9nܸGW^-[qL2>p]ĿRRR1`sPfݻ(ѣ6/zbҤ fmӦZ-222i}>a.-KmCPa-o{}RF~1`=nn~ QN)KmYx%K`ƌB!:u"30ye͟>c8qвe+ؼU=00WM4?$,ܷ7ҥ1g·ž}Ѥɣmk,M͚a8},.^lyTCY`C'{4VU !B; ?\3{g=:ݺu(?6n܌? X`!a-_Oys K|3fb̘qlv)W\CHH0/{;AttoTjZhlHg5ٳ /SO5S:[Ҫuk9=Zliq<:;xիTB!8KӧNXr%1;BB!BDtI9 ˹6&G A?uMKyv8yOM#՗m# B!Bq [=q*:7ST̅+BUN: $Ӫw)su+gu+%-ԓB!X;[eM\8TzOgGO#w_եu;7 x{{_~^/ݥխխ>ʢq,xWuQ<ݖHNNF:uШQ#˧gżyb ? +PW>ʻߚOB!RjEvv^JbY>> ꢔzx!kpSNǎCdd$z&M7ްyQ'W^)S???Si4ۨUjժz jlzH$زe Zl Ba|?Gdd$jԨQF!77h&Mҥ Oa!C <<Jzºuߺu+: 99j[+l.]A* SSSѲeKh߾}ҥ 1rHgΜAϞ=燺ubB~ژ8|hذ!,v_|97n@5 eoqOgI,˂yZ Æ +ÇG||B!b 0 Gz5ѠA\W&@(SN'NDff&xqXh>lu_#G,3]-?>BCCq\r5jn6=[j:+=- !7xpޢ'*~"⢬^+HAP9-rRJN;G$L3gz>IIN&=|N Aw^QJo :XׯGJJZy睇Çk&*++ A"))IGeuZ娬Djj*Vֲ[_ҥK1a\tEXt)6l؀?ϸѷo_qp-O>?CVVΝS"999w[lqx vwycРAj K}Iyj/#GW_ 9s&RRRkQɲp8`P]]Js΁$Yz1tkcǎHJJBbb"ТE #&&fF(ԁ?o ݎ[oG[zIvX޻̸aX`4ު5&ʥ⢚b[IQQ]Ya5նjk䨩vHvh NhwR: N@39&\;\[CBB:w\s_HIIAaaq;HNNƱcB7{:TQVΑ#G0c DZZ: Qz\`||}_g vwWn1,;}JKKQ^^>wuWQtSͥO&wFV@mI0rH >K,9N6mb)..F6m=/8|0NK_veHNN… cU۴i@wСxW0f'F=_EE2220j(_OߏnM=`qff&~ 鍺Lj@bb"nFxw0i$uQbr{~K/m0g5i̙1b:ٳQTTN:SN8u~aח3gOjٲ%f͚'˴pB̘1-ZE]g̘QէL~ e d}/o^mE5bdgg0 xꩧ.]`x7C^^d̙3/VyoA֭1zhddd_9s 55}op,ܹsqUW!---aӪU+\tEիW"!""""@4۲ءr܉<+ξvT,eRn7lކִ!в]2wce@>k_[nߎ^DDDD14C ߡohdN@o'5WG'6}0RqC}e@GyYmeرc8x  DDDDDz9۲ߑ-NgCm M'wd?o^Ì3"$ADDDD<%R2L,K$ )Qδa0 g<u~&gz"jtO4Ϗe#""""YtJp:.Oٕq"r]n0&t L&L&# # 1b#)` (JŎNA׿I)? Yl![+!""""""jb 'vR ˀjE Ap)l~&z{V=[(t""""""&VۧQ4f".{bb":*Xհe)rסW3Qe@$ˈMxa2`aZat:!I"u5Ws۲"tO """""" קdYM vLr'24r):WPFՠ I:tH}|{v""""""L"dn{%%%F]d$ɐ{lY2p|gLE@",ɓ'cȐ!kk.@nn..RL8QmMsW`РA˰b @ii) Cel߾W]uƎk9KE""""""" ġC_b͚5xg_ƃ>,x~k. K.Euu5V+r[l 8x f̘0ZO\;(ͣQi׮V^j,_۷W⧟~Bff&N':t耵k׺*h"<3OG[,;v cܹXr%-ZZ%L̜9srJ=+V? 朿xp}h4G~#G"++ pĤI:u*.~$ >(>C\qxGZu K),"""""""ݻ7}TUUth4">>{`0УG,YUUU$ (bQ]] 61c vmFyy9w{VHJJju&!""""""xW&I3"X6d xf=F/_px[QGBdӦMMXEA9<(y) "dY91"RRR¼tvL&SD Ce=`r Q`0t:pa^vlذ999X00 HLv, P_h]*""""""&&  ?~;waժUHL& 330g;"".L5,;ɞ2 4mÉ_Id@>=ѹsXVt:!IRS/(`8d2Az]75*$u>ӳf$+=F / `؆_(8Q$oY X`;"2mmd2a6Ţޚʵx\7jWHVdY$Ig\avĪYNg]gp/c0lj…ʏ}a6~f4tt<[go0g:Q6ytǢ}rǵRIk_H4ҫTt/@ځ L0U0>NDDDnB<-KLgn2B$H5XΔ2=_t83u٥|fNh*O(dYnw E)^Qa4a2L L(el+}(\[ I6YRЉg0 p'v-Z$Z$&$,i "xp8l0LՅ,˨AII ,z`0 4m f'"""o j7dDV@װ,flR] |G_Av >YmP=UȨ(/d0tb=urG)vL& TWW7{CE ??999ζxPne$ 0!_Qp_mH5v,k>&w ^Z(i IDAT0Loӥ @@81HOOC}]'wӔ\bbbXY֠ꓗ4 FϾv_ƶa $IDDDTN%c0t: "^Сhݺz -NBB&Bht-9;{k ՕbXVffL&HxW|Z0>NDDDJеZVVdH*DMI$lۖΝ;nwslFIrw-h0@ྍ|}rǵEC=[7Wl68y>- *ۆ>NDDDZO4(*:dΦ^L"툋Ce gZѸ?$[ @>jt,HN}~ouJ' bܸq+y(v;N'35d<6vl8Qޒ<JJ@D8x06mڂVZb &&Fm$wD:">JT1`_}iUPRRՊɓ'@TCY X377ӦMÐ!Cp*m-1h 6 ӧOGnnn@)//{}(\[( ;,Y_~M$ [/ $#66111X,jGIԷNtPmYP*o,cQRRbcc111jYkrR 67oƼyW^QUUˉ$nc e_=qVZJx'caС~7Hٗi}<;SVZĠ CA^^n݁޽{]$&٬G,fGYY9:m^znw ..qqqALLfl;-[t,//gφbq87nTߏ3iӦ:;m݆#%%˗/ǡC0{l>}>(kqtO>$;~aȲ^x:u,r4~3f@ш8N뢵W_}5,Xv?ٳd*DQDv퐓łz \pL&<W\@ʋ@DDDWߎ,00n?0u.l3vX[еkWL6MWe ՏVm۶aŊp8(++/3gBE(`2m]}Ĉop-oQP^^D]ĶJ 4>,V+L&5zR^$o!""Ơ\<-V=m y 9Q4l&$&&4*ޒڡ2[xJΝ;1oUi4 p:Y9*;$I㏑[8NGd;NX,Pٮ_H8 t۷oWoo]uѣuVLX,2%Z6oތ.]8ZHyhDDDD5(n&{kb}R4rM(w\O>Xz5:㤤(ݻ7-[{eeen?}[ng={={m9w܁yE߿?l68;x 6l,XqƩ_z_{l, 7oK/ٳgl6СChٲqWL@DDDP~L(Q׎$IrKIZm\5\q})&vl;<fϞh߾tr |Am-`9z?8ƌvڹMcp`޼yj3f͂ xg4ow e9C^ñcW^>EkGO>zJc ːΝ;c޼yڵ+bbbx 7܀x+V:z7ѰRc+2(ʾZZZUyĦkBD+PUU͆dhq#};={'""" DkGIxvE$kԳָع7|LOlvo5IDAAF дV/ZKjJm%EERGueBT۪Ւ!mf38iklJ(:QjtE'j3FҙA厯<*Ellײ=;d*SWs|ϵM˓ֺu}ԩ0xʸ4[Aso1C\\q۸mہڵ'30W PQs䎒pm T f3l6$IʲNjhlbQ_p LU m3CDDDDD͑; ʝ^0+h0vk4a4a2`2Huxl| e'"""""jNEr8[Iv<+(h0>z[Ue<J| u'"""""j.t+Ƶ^YvoDj(Qg<L|ۆ6 """""jn"?@=WIH( Ȳ +Z9 \0elF8QsɝVޔYx֏81$""""hl;X /Ƴ0DDDDDDT_bS/""""""""crHǘ!"""""""1&wt""""""""crHǘ!"""""""1&wtL(b CDDDDDDDD0CDDDDDDDcL;DDDDDDDD:1CDDDDDDDcL阱Ȳԋ@DDDDDDD @^Ҭ;:Lg2ǵDO3Ix&n'"""""""eNGy9ɣkF[3Ͽ(&q8G]'w<7D;DDDDDDD$m< &w;/aަ'""""""ȡQ^Z] wG&wZII|&{(i%s(^Ǐ6LhqMH7o"""""""۰kbG+#Bݞ'a2xDDDDDDD "'wZHĤQ3t:޻&yK.1k7g;ݶ!q:j?< AAw-w\iݚEDDDDDDD͛;C (%+sLxKD$""""""6hO2ƊG\\\P[#F@˖-LJey֮]cFݎHDDDDDD(o <.CoǡC !%\¾|P𼋧VI4#Gvލ vPrSY-rj* 8)))ׯVZ9իѯ_?/ajݻ#55-Z;|4hѪU+\r%ؿZ*FDDDDDD <^wGr'L֭[)S`֭F^^LRg'ؾ};N߿F3ދ/͆ŋK.kYQYYނUYY*w^xv7p9> `ݺujYZj߾}Uߗ⣏>/>X'Ny>Z6owETvnn.ҴDDDDDDDMTi& жm[7߸Q7t, A_O<0aTVV)ӳPTTT`Νy?~555ףo߾ѣGn:\}!Ν;ѯ_Xr% """"""ҋJ(:/??@{|o:uLZZ:,0kCa0IIIӟ0i$uVZh-Z޽{cΝ8pi*UVV3oVZ@orQut Xws˲͛7^JIIe]͛7#''Ç?614f;[npƍѿ 8PM(2220l0M6aذa:t[6m+8zhH!""""""jN">.ۄf͚#G5kV6J駟VIHH}vro?@m>%%%Xlqy*-h;j"&&8qKyARRdYFvv6էcƍ`4///G6mb@ʰzj|W_x(--ŲepI@LL  Q3ɝpza27ߠ[nܹ3֬YSgFo&p뭷B$<>[hĿodeeᦛn$I[r[ƺv;3'fƢ'NoEnSk׮];j${,_mD 7n&M뮻N~ҤIBll&""""""Qٳ'>& ݻwǒ%K$/ >{lFǎNOӧ,Y^zd2!''O<^'|;vbAiiiڶm[-_'OĊ+hѢ\ 6 ,[ 0`~|׿[}ku-Y'Nv25':xH0@ RQ`2; &)b6&hĘcbc%Ɯ`O0HJ2'ZSRbRR?k Эg/}(/I IN'.kkAIij5]8}.r%ʕ+1zh>-( h4d2h4h4`0@E>z/٬~."3ֻN' 0rh]gjVRTd+/-uTWV***d{MZ-9j&Zkl6.ڝvF'P$pߊoቪ; cz{xZ)?ѢE t?seDݻwgb(5ӧ4o29֭[S/B4hPS/5!5[pE_wD#]&w\7-LѺg.3'm]&w """""""j<;NP7S'"V+NgS/jU; hLͰCe͆Blj{8DDDDDDDt<[$&&b%v; %e<[#&&$tBeHI ˲:-;DDDDDDDiXJ_N4%}tQxfDQ3YLg5u;V4ߚɝ12zJ+DKBDDDDDDDs&yojJy߾}fS,ND8x0?ןo~X 55cw`VB'-xr[[bGCx[Qg'-vz-K-wj\eE6]&w\5#""""""HR'9xT[]NCmY1% Zyh_DDDDтUMHQa#j%'/6 jc|C݊Go$c|KYVA I$YlwoEuֿUce:Rt" ~LĶ/I(z hk3Eʚ{-t v (ӵ?}Z;?{o}@ΣU_7Qc+\)W}1`|%N.$zMp },$ e`) ~ ۨIQ}vLӵ\Շcm!;h :^@O~9()R[? LMvxj%x;6TPξ|cBd ؾ~JnͽܱKXܜ.?ci8GKOlHom]m;j2,`LM!uߝ]e3Swll }?fO}\_.=SL2_)/_o㗾>1%[bcnjj ;ԩ~KA4DD⯾.C IDAT$  Sz:buEWGq1.fwFnvg.8C=Vlh_ B厝PZs!s'9M?|&=.Я/z~,blRlHo iY󼳱6$)c/FU.4SpQT6{so5wBW) H4p+}[bkYoGcS,cהc\ ?@+#j|O|OM㯞x)]kxr 6ta57bCF[6\@%ztq²<(N3NC[t7cU_|N~h8oWlC.NWm1ט%1JtfVPpvϬiW]ɓsh=Ft 'Oix|SrN:>svl#yp {AN}W-?-GҰ! J""7ֽvzCYKp8#/ό~jn_+o:GƵS>]eYFuS:83DԌ8}c~:{|7=خ]o&:GSq }@y~v0 I##;e6$$t}lp g=._̽X M׹ \ӚӑpnOTlݎU_& p:qzװ8”VV}c=-g!sP0&`;JURVؤ')cj*:ù_}vh\W`z2˯^˴d& Or,9٨ؼ|ݑzX@D.;vO&߿{|l̉q9Lszi–Htbڷ;;B1QpEuM^SSuC~{!O MAg0ډV qPS.JZVܤ4tDRu5l$k ~O4 Zsn*5 )~³]p{o I#G4hReB]s3 @$dblLi0IQ4E%#,1愄cL|ER995Ւݗ\St$tP,Ce8pg_ u(}_P5G"]N/}:PtU ޱ U]?op`>ڵk&sW޻s dh6DQxoפDAAF 0HMUoZj--.)).KKՕ ^SmVKjdഋv]9*ED Ig'_[^1M-jmxfDDM!㫿a/σ9SsX}g.sZ}Y$` ;g|w>۔pF/TO!ԕj?P׍:tQDt.)gj/7Ek1V'?"C".<Q?|^4Z]k6R4h_"㫾qc/^Ը L߾}տقVK=< Ϗ'"j(<_0EM`7"Dfw[VǎzDD W} R_q c8ƪfq.ڳxѾDD W} R_q c2âfqYh_"㫾qc/^Ը \bbb#&q"?Y,;ў'"j(<_0EM`y܉:er'ڳѾe}Boi8sG.#Fc0۫>ǽ`㫞ֽMPرzwP^^r]%&&6hz,;f;¦NYF՞=ܣG u.<[#7=ml33C~Vy^UO-Z`˹o|!@?rOsi}h}BϘQpUyy5e r33!5y& [@٥ gE?$~RSs?}: yLܚ5kr⻹ fa7n\-iN,'Ԡljв;7ވm 7+ ;'OF)10X|;^z SNE]o~FSoI\41>a8p`K0qD,X6M_ѣ1qD̛7N, E~j^ZZ.<ƍ}.'_}Df 4Yv- [C݆9S ko av-G>p_~"ut(_Ӛb.bs= P;]oCj* gnf$;w_^?o6j7bHII/UVȑ#1|\hcCZt), }]_b… < O>/FVVz)c n5k~P_Z1v-}\p! O?K,A0o޼/q,;d'$`(SR~~|}_yΚɓaLJS?|9ZOKN,99hum8nTڅ<}8&Ǎc|_>e{Ul[#o$¢*/;'OƦ!%;ƍCpf\s5K1ow9Z-N1/Vk֬Ѻukn&LyM<z+RRR믿- Պ*TBr'x <HHH5\Zr]'wBR^KNߺKKaDݻN%}ogd`ה)nanV}oB{ɓ8׫W+@3ݎGԩ4ى߆oڄ {,NyH0}0xKM"Lii};ncJ 6mB 1!Ov}֮E]`LNsV۶o}<=[l7)}i]u"sg$o9ۨvu vY@yxw6 |oFCk*Xڵ X+Agї^B…? M;u Zlo?F||@JJ n|Acg}${XbN1W)v Z?_\k l}boQQPPߺu+:vX+W/@y >O~nٰe ̖;">@2Շaݿ Kv v(ҧLA~Cݻ߳'{z2 ǫqqg@_G\Ϟa\;mSrr-YW/1- b\K-H8xf3Z ^+W.\oxymn VTmp#+-[vsie'alm5OO %frh\W MۇF? uw9jc>>im_e<1.Y /ly=8Nߏ]bcNqj h޾?}WAB߾ ^} 6m'5lHLLtQ.bbbpW/Әf\uUXl:|ٲe8q",Kݜ衟@ُ>aLJBYp/aMy zYQ{At"sgd?:Li9O ʖ_Gůb8̙~1}_=;6lP[K.ŵ^dĠO>^ˮBQQ$IBvv6n馀r_СCa8p:lӦM袋0rHftE .md=|?c1X,8sܖ7ZG˫2v ~{ l}bo_;(r$GzBHBh_BQCA:$R ("h%*PBzHow+?,++;;yfvggfcT \N;;;Sb ̘1VOΆ?tի {: ˕PǼy8+2s ` ؼ[Z2@= g^:;C[^Jg {0mR5Uߠs"d GsC^eҔPzu͍:vps2-..lŖ<9Iv#yH^d5sEh㏴0sHӧ)zb:I] .@uA%innh|9._ui)AΘ1x)eEJJUuB prrB.S=++ ۷oǍ7YfEDD`񈎎P(ĉ'glbMlJj9hǕ{:5o118@xK&_}YhH[wǍC7)m?##aaaóRXd ~^ 4iйsgC.+_P^^NQ3>} ''jq<<?++1*1|[dߘ|\ef:a#J*BRT.C,WnΝw,X֭[0`>}@ņɿ,Y-[PtrIbob VCV:wӍ]poti~Ѹ3v,< 4(mʴ485kJ$or_z 'OTWҖiu[G/=’ߠ*+|ǍO>b14r9:'G__hr8ZbCMq1mχrm*?b_%huH4LStΧ;aw֑kn޵ N]Ag7 wx8m?..s3Am[8h5kXf~~ДtސJӧ8...߿?:HݻcOXk3EEԵ>>zDPKJt^$NYeWz&+N7u*pؿƔիWӖiflxxx@Trz PVV'OO?šC8g+>\WGGG(Jg5!//pqqA~~>hfP{yyAP3EUKܸ17&WY&tVG\aU`` PrF|VV|}}i;v ;vDTTT?tKUbرck\ pwwLj#V rYF3pPx\ŗ:Q7?zB+ IDAT{gH*{Pdl Un.Ȍ{ͪ|hGըөuιukdnRY!Ӧ{ ÇQ(P￸3v,YPBTe1XKK.-EFl,|F+NݻQ RYQѣ沦 x/8{W^* ϑ4w.-up!\uP)ԥ(8}7 h=qՙ*;n=zysKKKdmez:j5ԅ޾>z)o3<9CP@Z s7oDyy9ˑ;#$$AAA刋1oÇ~HE>Ͱ钋(rBd#\t¬ɦ~=J$т3u7vuQxb_{5Sqq磼ŋ߭[7;wJǒ%K {AFFb1֭[a}VڤI:tx!֬Yn۶-V۷8pεkh~`uӧOCT";;6mc& u? b6&1dOe=a¦P߿ơCо}{gr j5QPP@tIo;sL\v JEEEGΝpC;ʕ+P().qЩ.k:ݺѣ3^^gO\i %ׯ#裏PJp0|-^\oǹ+͚]4]*Kk"_)SP}{L >yǎ!aCܟ1~&@0PzokTϘAK7p-![h(73[BC矸ڪpqZ\ul&$͝[A4x}iPp4w ־=YYhz5lLyOA# $4laap?O1uP["<<FBJJ }q>CZ ǜ9s8/3@HH5j@٤n0 Ftfce˖%1GIII>}:._(XlFIM>?::/_FDD̙O Ih"7&UiL鄭¦(bȑtK??5>W3P|su'/8a(P,QOq {ڹ3XntyStB ?`14]MCgaȐ!6AxSc7]\-U 3>>}?s|ƂL<1֟C 1uTܹZŖӵ3cN k[QQQ Eݺu!8PY Ik阫ޙc.lѝyCײYL l ސM ŋDh׮t gKme:φnY6x?=z|| BBAϺjdffg"}0|ñey9/*5… Yg^>ڬ5uoTl=wJ玽 y1 bX!:#l[/oVMV0W]|X7o{vhس\yQ_[h/l,:ҹc7s _h틭CrKb+j/1Em;(csb mCr]5 i!sNtػ'kAWۆԟ -H}jCt2s 8wx/Qm)5%*ݾ:,ѥmAPӐ6+;tl{v$SkQ\*4-aʗO ݾ:,ѥmAPӐ6+;tjs޽fAQci SıC [ԟ -H}jCt2sNtػM~FUpE \iY1׮FMoW[^/!Ņv]ֶ-λS矸KP0tXU5J%.Zƍи1.\BAK]֡.xyzn(~ a!g9.m R_A]qܡS+;d?c&8z{+W!9 bb^t+w'L@YhVIԵUˠkq1mUK^^y=gMhOhwdǟ|Y9 Ƙ"eJ8z{h{DHkZz hu+:<~ Hܟ9C b!g9.m R_A]qܡS+;d?mZxEDBm ^..Fyf&V饗PV9UjK~ DJ_҆ o9M8|޹~&..7e w9o% (q{]b!g9.m R_A]qܡS+;d_SZccm.ZwnP&p YeZܨc77(Ңe {/?Ati["4 r;dZܱwo'b??h8ֳ'ڜ8m$NN_İ/b||cX \n<KbcU~>f@ ݾ:,ѥmAPӐ6+;tjs޽l{#g~h (RScQ~=J$Ã.CٳXR RG߾Tsܲo#-_(B]Z ui)2bc3j@0 {/?Ati["4 r;dZܱwo'A# $4laap5(u 7zf?H6q{(\ w4h]Է-YGF@8ɩ-Y_nýU[>E\[u ̝;CŘ1c_ ''1"ԩS* k׮ň#0f]qRGƸquVjtʫ _;JfЩӧޭ۳ݻ{PP!gkWz"Zmn 11AmߨQVhk8HtAH|<b|wXjb1~Wڟ~ 7Ɩ-[rJ`Ϟ=MUbG:ҹyJ"hdكH|d3-@@KYAUHӻ7PodgC%eM';wHzU~]zY\hwM-9I۸59oo;tJ7 @O>gk5J%ϟAA8|Bx-23qJ"AΝHh]\Z+Wb8[![^M/\gTf mڠ"=R=$iX>C@.+v1b??UL{4^l[r2 aձrpk׊6f TFkΛ\s2VAW_bӦ8ͣ+Wwň#b Ю=uM!CPLaÆaذaxwq=q'T+'|qk\8r/\rr2֭[˗ۍSM\l[sA{dȎqm?[^|m.U/0ulV_|_Ǐǚ5kG?ѣ1d̟?-ӧ1c :fBRRƴJFݻ1yd99Yebg_% lm #6mRRR|Eǻw=7-C/0^x6==rēVɓ-.[U^ڞ?N#ib*6+.UKx}|e6 gr3<(wDcY ./kZ3fzs2?Qx"5/G6U۷Gb12oƍ?kz:/_Nfy?ع{..\m۶iӦYǑj\67oƾ}ctWՏӫW/sQa7nD׮]{bĉܹ `ǎx7*}t`ޥ{'P[7dكsZMmPo#wL G4%%(̄VK/K@ڰ!Dnn?9}^Сppq@,kx%.QG۷ĉppq 3DO?UM4o rwG?FΑ#fHz> SOF?6=~5 ^t4J* !< p0iܱ{ B/ .\W@c}.^ iÆTyr2ZsF^O֬T:YkaΞcƌ/0p@\t6PSdp)~ Ͼ}! Xh;Spn YvAPeKM@ @P../u[}l:֧%hJhJ<\M7א!޷<\lc>ܹJJW"$$%??/2P(pqN#""p1uݱf |mLv`K/ oL[ׁ GGG9Æ É'PZZ Jw"a6!7ncǎAR!996lC 3gJ$,_5]Sjs_.ݭ[7ٳ]tt{EΝycVZk׮A 33YPgϞE=ڵ+>Bdggѣh۶m5{VVVc1bklcGc]NϾ}+~KqqiSjf6;3f )<#(!W~'ڵʾ~=N>SfH)w͛H^ 99i~ɕt) /\7N6of;[7=S&\#qysod$)nn8{66n?}@ NPWgj,pb7r$B!I2vi3ӽGH :܌o*Δ)QQxCm X}) Ο;NE3Y4ʫ̙?w.}}8cPԷiB+nݺLAa̙F̝;֭Cff&|||8Os/<.W14-6T|f |l!Yv/t 8U9Ц-ѣGطo ѰaC,XjC #G"33~~~ٳ''`֬YXz5n݊ >uW6l9#;;͛7ߙP3;K}7ohݺ5uAY㶂j'OT'&&"@Çcݺu4ib1ڷoӧӮ6lB!tR:e+9;tLզnCכ*n:'.񸔁* ؐl|۞yGx`_Z- `!?ѽVnCj* 0{{}dr٘޹kҰcJ-6vΜngYA^"?/O,*(PKr\)/kT JS)Ju\].T(U%2B5 Dj G@ @ @S7 NJСV.z_|í=wʥ{¸^t'_>eRN.5|7UCi񸔁y6avl|ܼ #P_?P<8O>EFFZepug=DE\s|\>2Ƿrg~|>p.}O#<|'9vʖƋ)*1эϖ.lVkBEV:w,ޖw ZBzDDDB D/BMC w7|Ӧe,ɢc{fjZ~BmW.L2b g+K2VxOiHwȞ;tjs'))@ @ nLΝƍA @ J;:=wk5O ւ ?Ati["4 r;ıCV:wիWEQ]~@mHYKۂ!m;DW!_ˢS+;w Zն!g9.m R_A]qܡS+;w Zն!g9.m R_A]qܡS+;)e2@ evLW{p\E??ܖĖ&"pPhkY[#%!-Y_tӯ}@ 6gwtLMEt,-ձV춠g;yMczx3|d\OTƍ0`|CCCѣGjt7˶ ((pTV!Y_n6c }ƋT*+ 8ꫯT*//<}1"ԩSf̘>} ""h#GuѣG?> ~q:ҹYp ܺv= nhw'Lkh{ݼ YHG7߄{^hwB^A$FGS|XW.]˧OC([}*VEE蒗O7̙ï\b\8Hdi SVv@k;v,R)C6}vmlj/BAjΝH$زe 6nD[R[nEݱw^ر5BLL |h׮vލm۶˖-ʕ+ؼynqۚ سg AfЩ.x OGξ}8g#_hoyJu'N "̜ GT3f h"8@G+T~ĉAS Q˫'ϸ@#$AAFo2njQQȌMX kލk:w높ש0R!qc$4n BPP2e0>Z)VJ닛ʣ[׮FMoW[f/UmqݝF7?P\WwǏ1sm dP NZW[E\={UP:咷18kmRC#qI;VM. ڶE;eFԡõm9SZ)_Zᢿ?Nu~>gֿC d>EU }8x _RAt=q&N>}7r[CСCn:uq ri7_x=Æ ŋ9h믿bȑ߿?{=lL -h4ؾ};0h Ġب,UpUK@@ۻw/Ǝ9¦K.nƦMڲe0*inž_KKWˋԥkQs~665[}ݽ{3gD1|p|TXRRϟfQ6fW?z"4f{xTy/gϞ'O0~xil:u??? 2|6l@.]L(ܩkRVVRx{{Fɓ'3fLx>իW_sVِm_0vX 2$3wSnB.EE!ut)(^=sf`/\F֭P!}FMHx1;VcR(yqJ'g(_yR.E 5 9L„4ߺ?Od$ϜI pRV7޸7n@ၔ)h|&26m7^r &>@҉{w̚IIh4h@]kP&.yySt2ݻ٫'< Ƙz3oE,txތea+#L:吷1ܼqqhz5Q|:ڜ9F_~G~XM~. ^C9@ѣppvFJ_|| ߾ ;-]YoZ999Xz5v WWWl޼Я_?ܽ{iiiy&b#A.]o߾/(m6xzzbǎرc\]]/e,!YvZ{Xl?`֬Y8~᧟~1uTlL0T={?v|+E.Ic x :udR|[M\Lp~/ZiÆp7e r1ZfFz3o#۷YE0W0%oc2.: Z"ooxV Z"77xa{CQp4"-YCE/+"ܙ;"OO8ҥfnp_'Md2?ΝVX,ñg={ "" h֬YhԨ$0899 ?hPbĉpwwGe'NL&C׮]9]v!44NNNH$ǚ!:1c2 SNŅ 8 {Edd<@.?҆ !rsCy@F˘93665[}"''㩰;wP#Zj5kڹ)K\M>vqOp#ٳ'ohZ#::gϞVō7УGfit%!JcT \^PǼyhAyy9Osvv~cŊ1c/Ă h}e#++ }۱{n4nܘTdQM)Z-λZ-j5e2۝{hWo_kqw8wM\֡N.y388t܈ւM~B?cONkڡ%P={-s8@2- nnhPgBBsyl,©ys4y 2YςXCoL(RRj /\2#hU*x&UO6"#[;JR)m-J {嗡HIehkRt(RS!{r˓q1 h~hgp_uqwwGnn.u#::B'N犓mSvv6d:L&Cvv6lb K,CVs?++ NF|@XXIqr9oVIEM|]pߘ쾑L{h:6Շ,Y~WF 0m4t@ טob=mN_@x[}7mYYY(++Crr2>3ܹO>EVV5kfV'lJPTp|Ɣծ;y$ ~|Xbuaܹ h{#>>:ZFml,]CPΥ(=wJ[ѵOGv;cs M37o)8b~Sdھ}"`֬jFUKP=끧L!ҙ&)ˍ`zcaGM *UV̻ v`-rWpiwoBx -[s6$0. yCi5:JKKN8tD"wN *9ZכfQiѦl[P(houqttRf0W&}YsN\\ D k;l懲k o ]Q;hؔ PVV'OO?šC ヲ2l9}cn˥[nݻw}ppp@np!4jȦx[:Pwww1ou^ՖNcбcGDEEU ;}4844ZN.k<}AAA*^ qurYzg{w{uVvᅦ'N@VC1T9979C"cfrsHMEfl,{NՀ@G?c2nEƍ9ub??=˫\>QQHRdVMbFgQ(HMErLC DIP=<̖ Q*Q*_ۗ sn[@Tm$~k 1Ά[pjRd+xlzfUk^a+"Wërp}mvب;q"wFyv64J%JwF&{X.۷T*QRRuִAoÇ~ȑ# Jc IDAT߾}qArrU 2K.n+(P"3}bb ;h ƦR_{AFFb1֭K{XD\\JJJP^^[nadM s_.;v{3^ݱk.jiP߿ơCо}{;r  qqPO<> W\ZFzz: h? {Xl;wDzz:J%N8>}pZnwV[r=Nף \iWZByV^;j`mv?:U|!(<<(#?{6Ÿ:w*?&o&}}ֳ'İaVЇQyP8oTڲ%l UN5A# $4laap5ߒ[po_\W11h㏴kMI+[4[*ݗ֮E֯"! SNǖ5DM4wnצ 23jͼ`k!۽D! [o! =pLR7`.ѢE{)[Ki& <+79]h-!!!hԨfsN4 -BXX燔qơDAAƎ)%`?::/_FDD̙Oy|;0,[ -[4Wdd$$ f͚0|w֭f~eLusyT[`}̡}@\tFDd_ecuR}[665[}%%%wyf,]@z `c{ڜ1K}nݺxW*|}}ѦM~ް*** 9r$&O"DGGSU <&MBbb",X@cɓ'#22ݻ7籈tuԨQpuu1bܻwΆ {1Ӎ'<vpS9@qp84H(V;8j$bQ,IbT(e2H"qs{yI=<Ð!C^\|`IJmp?Hbt8cLqukoϙ3cKrg~|>S7Υ1vIx svjDl!=]x"ڵ3Gc6*X;0DUoGDb1u^(B(FZL 7F| /GQ%bmB5*\)W J\X.*a B"5_"*ۙ; /arsU~PA1th<ݴ.񍕃i.'McX|7>e5G\5oCGƎ8+LZ\o|g)dgg#==Li:Zc至˟))=C3[LC4b\l8|젡g~|o>PAvX;eKE볬)իW :`M璮c2sNtXbM-c ֯G" ^/,ѿٳ#FcKBti["4 rǚzm*]6Ȟ;tkYKp2J p+[Z)Pc[,>>$kq1;#jCt,:dN-" rl+bcKb.ɽ\!mPӐ6+ZܱwoO ւ ?Ati["4 r;d:ҹcN{@ _mRҶ EiHw:ҹcN{?^&3)Z/ń ?Ati["4 r;dgã(>{5$ 䀀!r!"rȱ+x+ʩ9 @HBB{2? ӓ#L}'O~GuU}2N_ v?2NtRVQjkXΤBS\l=?xhg}_k_ ?Am]PQ< P[Cg_A|Nk7cGݸ3 nhc0@[R?CʿݬgKQ5|GG!f.tJ ŭ\gPjKih$ڊ,6t¥*+ Stb"~ˑ(۵˔njqq:9qcj5S T?c G'a޿?toe[y3ΥTL ̝ }]+2b[v[+C7FD 3d8Ț4 **Yc4wqOŕsaHIn^U_|&;@܊5 oցkg{~ft:\;r,*;HW_ ¯aav}o_H\3sʮ\0'p&%ז.eo/?w_s=ūۡsԖ:H94';Ƌ/B1q"eeaxY^{n!K0%r YYwar,g$_y6@WVÇ1e""P`[lpRy;`a~àiھC 9m-[f:4# y4!~*0],[VɿCm-3@^shCn'@Y'!h 49c:P_}ESS0P^?55vM.^r -(O%Kܹ[Co IH`o7?w_3{Jo}P[z_OC 9V5wdpߣ\7;ţB '#xp9|ts\o΅@&@&Ct[ˆ?00!4]*/W ML04]WBW_+z1%wػ7AA2oT.ҊOt}9#" DwTʶnEו+!  4 ꯿&Rt*J>QsW }E7uw \~z TgگDΜiDĵkU\ؙgASN J%tee=׿:_{_W|OvwAE4CmEÆpoll (ͷ-BCMPhoݲ_*eR)f٢rwc&@&Q5k ;,ua!N9剠 BHd /{ .]XYs#码+`zD"T ػהN+?"7hKKa[֭(x \_z!7 ӟϝYS _?Am]PQ< P[Ca(¨Tn- FDƺE6CC)_0>eQagEEVC 9vJvEÇڋ#V`]Cmp@V?ǏGcCXlJsVWK&OF#Ƃ/7BnjAѣahlDg!wb x<#Ų.{P:7޿x;һxZɡ"vkY~1p|9쁾F g {T Qu+ * *JnENߤ*ϞQ[ dSZ`߾(۶ FB׉Ѩ*?꯾QAŋ- /uj+r;l|2)rKcTL -Y!CL7]Wp.- *t]iy xvCO|(߳;>KV rf]QNxu|-N'&ڒ%;<(peJ8_n^'pKd> {(D.Igqt4 *&&ܥk͛r%NFE!-+wcv6.11(| ܲT3^5|O\{PjKih$ڊ:sw[yf@G^Q 3(  "1_(RH" qph8LrŁTV %5T rfu[,I hJL|U #K9 zײmۓ}u5.seeqx+VYt*1$2`ϖߖDRloM6{{ BP( uuu emm;7;_b"#!M|[yfv2>@ DxD~ݾ*MmMJPWW7*JiZuڨרFߤj_g5Z}#I>߀:20`[ni:s!ޫ@i{2ݞ<ʰu7}] |Ӵ.'t /Iq5?$ge"m/?w_W}O:vwAE4CmE';oƙ{0(HxUzMP .(Ar5w::>hggnSQ|-ch~>Rm~)B1_J3ǡsԖ:H9t {SYnI^?P,ubAj_)C>- /uj+rײ=-9wEP( BP( ҎzZNw RO AP( BP( ݨ/-fᓯe<-Gw) wC>- /uj+rh`Ow=-Gw) wC>- /uj+r:r,7;w) wC>- /uj+r6>hOP(m_?Am]PQ< P[C';AWDD_ГB<վƥZGtr>>p'ݖ\@d"o~W{Ob[/t63Ѷ߳gQxMЙ;l|2Cr\0\+ɬVWTiӐP ;<'B{)pkR䄅rL n-Yɔ^9Y'}ڀKL|>2\A`T*ʰ:(@^x^;ԡؖB#Yyܥ?Δ"eVr`ηߢmyLG\ .@ ș/@'z3wdp4x8ds{{(V3 6 =5 iLr'Dž ~$x wS͹s4~z=jt?yH/Y\%mu,P(m舧ih?He K(z͛8'sJe__AgMP< W}t"DNÓ'C,`ùsVٕYD} P(pzL|(Q9h-\b?Vahg@yPbZ;v/^|BC!GĊ޸aʣO>>D %$ |"4|)]|9^}¨( D^ӧݯDq<-B32P8yrU)IOpIZ cõC@4FEɪU˱(y0fS2k|k9`\GSOY{2hc4bzpܜ1ƚr]MK&'+)APhjZ-B׸t{kv<}(ZǗ/c߷ {niZgYyjuuS$mق>UU4ш7NĀݻ1`nq$tfOmu~>Fߏ;kwۇwHa!qF.`=u+>l%[_Ο]׵ؘ ȁA%l:d~f ICK#+IIFLZd ,fp%_G寋u+cϦ/svBBF;tη>q]^\絶{GBF {^?jm-LBt~^]F5uվ꫼<̼t Bנ IMmWPj $:?׮ar HƲin.g\³#ahg\4XgMÍzUT632/.F ||S\u37wy ֓Ɵ~_?7hhG#^BϞ չs^nJAu$fp5>z}i˪'gR6s&/6 `*֭02=^EϫW!Gf0vϷ.3f qGI ()$4Vq#55~zA W2e  N0?ϒt\]/&N[#GbcȪ7S#IwdgC!#k\M4h'TOEE8^Tw֭xP,aWCK?Hdf"]zu &Y!?#.)) ݺ"m/;UZ?%%yMpʫC\Pi?Z&͆6|3︃VLB|u:sOwS,(ݡz<9Pc?(GB6|8@ĪUc U~+Ӗc6l$- .SZ7| | Qkke|.J% %%^IJ ^~(tD" aav-{N)hGaP֮E'2ezm)J@Ҿ0x0#D,MK@}`Kfi053szT p{cmƈ%C&bVj*̞h~v*f@B!fyf|[N(R<e?D,ƄVK`RBH,rr̀K$XXĤ=ip'+<3p ҥ1В 2e 2xR) aseӅ+.:.5P`0g4]4]b>tfQδ/8{MʰaK$^sSːNJ‰[2p&%V탫}U^@д u(шF$G/_GV NKJBFznۆidJ IDATZˬ+.6BCU^݋4Ֆa% `@@z:TA i lPėMv;=,v"~nol$?LB[P얙MHM|D?ݭ[!;KP(}5G!,?;5c!<:(/TPz!-@XF`D `=*R HD\=JnԹ{ k?ݯ~[1!77{l3x•?|6{/>}/80:No\7t/^ӮͰW'"Jz\Ŷ х (UP؈.jqWܣ6lr 7SSR:F+WR#kѶY˗ 4/ļ#+ S9t p] }z͛Cx1 !<ڑY签t >}9B!—,Ao={B[XItz]QjwDЄ xKd! $ٳQD4 uʲ:`剭8{/Ouh|<4X F=3Rx$9VVGD{!裨Ȁwo8a[ 18:RtP-b1`x 1xhH #N%:1f3K6LKD|>4i=be2Ę٫=f$CC4f._U[ CaL &lPIʟK_#ccqh$z|y:;~ͯf(u:Nu};{MP:W 1kWy<<=99H]*qVɡ(R*MRIc#+c`\my1rϮ^5} ^$Q.`^>Ăz1'_|Ok:֘1s,:y٘1ڴ ƆkkQv-ϔc#+*Buz:*|ѼyP|*+;dњ;Sm l˗:#5|ŊmĘ֔!%l,Tm JJ͛\jFh H JH!&՛7jFɳϲ^ _uA_^FyNʹMȔ)xux<Ow5R(}ZZ-v`Xt4+}A߾8'۳_67"]MXJ vIG^99ڳgpD˃`@Ic#>s5(MF`ͯ|T5T65Ag0  ,Tm w|rqة))64@k0˼]X7lçhj3{y9~-\׷״+mq C<вE)1ѫdWmPr2vfgFFIc#v`L׮y@sQ77na&ʗ_~_o݂`@F p_Bѹ4/g@<⎖mތ+peB\z؈+Q3 DD{koӳtw<v邠q/)G6Q|VTz5JWFn3n˲B UUv䲗G(^e/ q^Xb T!n mAdw݅9sg qb)(=xW-BHglY¥RTF8TH2(Y9x0=<%.8o:{&聿 Fpj`n'Xz3j^';}°JЫ}bGv6;tEJ%EEq@Z7_-Z3xA0 l{OXdL@FJ.EsAХ K'+.:.]Ƈ.FApl7TYYxA64 )4vN|u};{MP:W `X C-tv\/ @qݺ#Flup[@cHt4?fʗKީ={qr$&bȑD2<>nغ-|02c( "Hl/X $RqPPP*  I\*WX|J dZ?Qmu[,#ϝ[>Yz*:{=$Ÿz #F`uʚ}2|k2i鶦[C5Ittƶ j_cM_lw?'RS1K魭y@2/,{4`/GʷL꙽t[*$X빹l<ތSc GpwkGn[s׎p<'(S\m-W_ vbXѾG%u y<x-mL|WP,6o晵zeeeso[;rj455ڪ*mC]^ݨ*JFQkMj^uZ~Ft|Ah&=|Т='_r;/t4/>G8|u|'slQY-'-]lCdR(vY70F`<}k*Z$;[e:$Hm<ތSc Gfcp_;w;;hGHî/\?iΞG<,W=ʣ㮾Z/n ;Z9kYl|2ww_q#˖Busf&NoһxZiO[6|W}%߮˸Cߦ B}5_k`=Ί wAE4CmE]s ヸEءP(6pP[z_OC 9V {P( .(ArȡkG;] Bi/hPjKih$ڊ:sM==mg 9(:J{m+ .(Arȡ3wt3{DK(4 9r9?a6m@@ܔ0:] L>ߡH}ηF.iݍJ%^}W{DV` tyP2hb/.(Arȡ3wdpߣ\k\A~A +WϽ&a`E[׍q7aoΜ q׮H>}|&L@Ν|MP܎/.(Arȡ3wdpߣ\&KBp!#tfjQj.rl,J^xFc#S @jZr"#QgW{•84>:۽;rps X=z ;<7g̀@l޽Mr0:$'v+W7Y&"WjMIAvPw]h:s%3kO@{q5- Y0 |fX9`\GSOɞ:Fh9s9rZ !C۲K+E̙'AiӐ<32P8yr L1gg[KGwC>- /uj+r6>h'G"d fu DϫWUQ~c[Ǐ#v&͙H>}6oP3 Hf0xPKKJdIzwCRì׍c0ܶ ày$3[!,+ߜ1?;JJtDII&98O$B!P:ePWCy9ii6Iكr͜ŋMǐc'l/=U|Ǜggo|lΝuS6/'6{6mN]>(^/.(Arȡ3wdpߣ\*+!1w#| 0 ֬ 4!'B/!NJ 4WAV#!P(  CkQ)=br4; P;.o Je2D׭Ԅ+2Yx</0瞃&+fv9APX}%K>V kJJJD)?͙?6ك9sn*8l16@~P B}){>A[CU~ݺ!'* E tI$X U72>// ζ.\o}P[z_OC 9VЙ;l|2N.r9 vf燅AW\lXT *R0zͼЗZM [@&L>9QQЛ!QC3DmP,] t(|q苋xq[nDɲev睸2 |ε{ݨٱ9QQֿ?'` M5>3s,mVK\O,$ C虝Ժ:$> qB T'A`lh@'@Ӧ<ҹۡsԖ:H9t {KQPwcDqq5D 55ŹE>c}=ˍGB1X7[믣rz0C^20' Cۑ޵m,f\9|'N gE&yO@PgfBڧxb)"XeV _&C!xE/]2% BB =5޺!&AaJggSlF|{PjKih$ڊ:sOw=ɥԚ5(_U}E*&nbfB0T0T޼y'o^NPWtFz\۷r0Z-ϣpT\UI~#`pT]k5t):-ZAcB Jڝ;#AO?9'|,\q#I$%$@ OYl…l.!% BΝݺ`;v bM)@@bK{v׃C>- /uj+r6>h'~wh{聜pXѣM7WPUݑ۽; |Ee*[9 m@b R;(]yLTf?jvر6I$V};n-[`}YYc^{ =v"XPYQ5kkRP^qR+͞[iZ rH|&ϥK- /uj+r6މom zF 4JBH "cD,|D*Hy"T$ʂ0B&?)ioŰ 77x?7}uf9&-Z>ʱ-9aO}{?t&ai3.pc-Ŀ\vj'S1mΙzjmBP( B8Fi)BBBk[[_Hb|>m\o0 c !W(JS[S6ՍJRdtVݤ65jQ7iZAt|Vo҃7Nh Ɩۭ8J +_Lwf^9&-fK&{rpJ"=?W:.W-[ki$}q1t.'זۡsԖ:H9t {?bIƍP,[F*wC>- /uj+r;l|2Φ?D6BLǠsԖ:H9tp7jj5f;] Bi/hPjKih$ڊx yyy?Ogw) wC>- /uj+bBT*OЩײ( BP( B.t6HOP(m_?Am]PQ< P[C_b_P( .(Ar3wfpߣ?B}nwAE4CmE 7;w) wC>- /uj+b6hg'?O 6;rsqk čP7dѾئxN?z%ԖE;qNhAN꽳gQxMЙ;l|3C .`h/_Far2C_TiPP ?<'B+F 䇄XaƆ@K(4 r9ndmԾr靬w$ϊFܹHFRm-g]eRg^2zh_͵]<+S<Ih0\i)oJ䷔t>'˝8U_ʔN[F/};څWk-[0|.8v e6j5x|oEmЗK] v{noJ/1A'#2=MP:m=kIm\A]>_&CotiT,˰f?Ov,aˡ9sCYwJZ[P܉%Km[粫+SO#;0|[/^cǰیM`zji$#RE}Cދ x Egۙ;y*̓Qd ;vh/^DȂB+qO^d~k|K"dB F#Q|VUPXTiuyEQ!CS:c4wP`ff+*My֯GaGٌ0 o+VJ,cZ$΍4GFBg7{Ba\T(LIA~Pp뮻9sƶy<@$0!Ave_{J'NDAt4nH(; ۷Xsn`ǣ⩧L6f [uli|cm-Bֱc 3[lWW@= NF)SАnSG~y<۷#GPղ=t:ؿwddλw>ݺ}nԃq9._o3pz/'q]}.\fYt  ,6vq{w䇅5uuhϹ5屬|-j;e9ڎC44dlj|LؿwġkpÈݻca!XkWgi4߰޵{7oۆy|^73++1/oVxl!o~})Ҷl?GVU)0oܾ=::V[ (W3=ݴ=uÒ? IDATV;@\P₂0#5 M B*\"byy|Tz=Z-~IHGX2p JNFܱ7;d„_$XtguW_Eo>#b}BggQGпQȦOo`GuDF"U_ ~x8jׯ},àItٳ 9f-!蚙 NV^j31;ey6nqN[^r9_y\^H ~hծ$2ϟG?#YnΟat Ǐ#b&ϙ;}6Yv薛Ć$#ᇉ^BaW.ɓ:?]m\6cBJJ{II&K: 6 ?9zDP++Iv@М;yyМ<ٳmixhxo85 }"#YֱٕY49:}:.Λs`lBVf)))Ȭ@@f}=ΗcRϞh{5H ȯØnݜ%Ia(-E#VPad$_{OjH沘o[p;nH58ȭމȑXyrppm}ͶUz6ZFUSOga0˳G`Am|#T_QVƍs11%k̂x;23Qɓq|LH$ӧM'%[cD88[ZIISg8luAAh E fZ8p2q7>t4"ܵ{7m݊}g52K:t9]A0vիv`e>Gw ]`ND(?˗Va87TV6jݻ2o22B.d@Ć  pVadS/'B2dZig< {E v-rXް u6PR┌u P(Xz_}H}`׬?4mk+@>tYY z=t}ϛ*R.5gϚl#{9l(0z=D))2QUlWd :.l`qJRx –-Cƍ|!iš B|p0dB!h~>ÆA.?O틫f3, ۧgfҷgfbfސ NS;0_?﹁p[QR]oў5t ʲ׎{EǦu;DT `ZbKH@qkWgTJ bHt4+]ףBhDbH H3@P׌Trf H"c8VP`J ) 'ohAVZRLHJj [zo" 6{ P$2m-(?g]:wspę|KJ<ң~6 ?=zo6v  }An(7Lխ3'">n@(6͡N9`@Fnyy=e rͦ[P\ ^XiCq1 _&c65R&xfeWqU]A *?*u>VjGGe'IYCyU˖;Q-@< 11[Ʈ,\3Je[e.waGE(\UK2YlWZ G=6'x"4<c](?O?mSN Dx*UT'00|. ޱzcFj*~qZ-u:|'zv>A;Фb<ؽ{ѩథ###a(-5sk.aSvu+3:P%J"`4:$'IgNRЖW{ŧW`ΝxOYQ@:zWTbE܉FSz(P^[ii(klDJFEDMvVRz3ۨzH<ɸx_ǛGcP./rs19%=/È8DK$߯~k]sow8z=EĿ$'#rǎ6%i~."x1YZ  < t-FAwcqq`̞jj #Ai&O|<`9"oegCn/, ۷kf&9Д7^Eq,% .ٔOKl,^Ğ8j>,7^MWd')twS٭pϞ o ٤Iwf~t:(8f(K$xgX|8䓜3BbLJI'/+T}vEn.ag{Uథ톡H>W{N6'Q n;niȲX`7X4 /K߾޳~ `LΚ-k\ˠhlxt >؟rwͨURh(n)FX<"7vŻދqolkk3<}2oVN"7;\aXc?Qt1cPikkQv-ﻏX[GC`jW=85kPn{ U*%&#fnfU*U*oތٳ%&Ag`4苊PfVaL ?d3Uy,r>hО?SM29"/χwQlWeX^c!NMRaN'88?ܵ z0Z-ԧNtu7BWPDaBrl{iVg\V8]eU۳n._ BW|kY̏?ˡ33sQF=J]Nϭf99ؕy)ncmaX<<֫{ $i74Oh`CCz:#G>='Z. 7jFϺ<-,g;=6/kR |шk55x_YDχ`@vU9JߑH|Q:.SSյkjj`@Ne%Z|D`Br2}i}ȸx]*ؓZؗ]/00 PVfA}?ClSRlh`yyxG 7;nyy<JK!rGn ͅ (LJBaJ eeHOg L̿`EYP~=  Sy_ܯbGa(G}F~jp{wJ"o? :%AT]^{ =,W ]/<凇jժAZdrT^ر}2r};*-Í`cYY [w݅0T>$ÆecmVnaaYQvٔJqE[y]eU۳n tAqQnɳ]qɣæs0xܻo {\; n݊Y_}*IuD@Fš\:aC࿔)v+|ߛ7qO׮-Iڍ5kPP@Զm} >Bî](GِcJ;no M_D26^Pj>jŝ۷(V!v??ٌ՘};q 1n \{.y}B"CpxIOLdՃQQ11a110b NN{>CFZD\z|݋!;w"v**0 *j\}tg]п?BRL=x#?YXa(-6ζq{m#T/(FXh Db@d |/H)O$RY884TPHPbVU"%5T cbn,o,;Ok76 e|OnzY;ޖSͿVa<[Ǹ*59*;d$'ZY%ߖ \*| \yZ;:d%Wm+{sH="KO" 1^^9dfyNqLOMŝSYwscM_L+{2#G:2>szmo5YcٞYת՘q ӱ\S[^]UͶwMzpb#l&KG8薵x<x-mL|WP,6o晵zeeesoH@yNa_S]MF[[UmӫZR4jImkzNoh3ߤo@TZ6oݶg6bޓL[aχ䮻( h_yvg97 H;m!-}ei;?$c G$yXnX[9a%hma8cE(Zk4s:+J':h7zƕGlj^1ݺe3c\tWAgrt{ŝןBx 7"d2o<231Oж7^?һ+(?ϞEPQݺ5I1 `mzpʗ  P( +Pv  '~{|#}Z;( 4cw}vBP( BP(1vX\p>uuuBP( BP(J;Ag<-Gw) wC>- /uj+rh`Ow E(?B}nwAE4CmENG~-{ {P( .(Arȡ3wdpߣ?B}nwAE4CmENG|2Nw楗M>SWT qoùW_2:nP(3G}a'jKrZm+OevRZGp r d9s {-_ |},}/Ν;ǩShiiA3~x.]J{D,odpUxϕ/\f7nf/xyU>yԯ+n2Qgz)(\_Oܹcn -N…'Ob 2|ә䓨u:&].ѴoWpgiin~DŽ5kt=h ߽;pD~gYY_~Qy T&,Bߣr)>o2s&y݇墱 oojӹۈjRSSÞ={7o!-u֡s9DT;>|oYNb$h/vYf j2v.[xsw8#7˅J N'ǎy͐ilM?S_L4((}@Y]{!qX,$N¤B-_J.> Vqi6\6;7j /4SXZ[s R+WpZfg6>iI7Y+VPs'sJvd܍7r壏-desNH~_O2/`pBKH e,Rf?_"S.r︃={p$JS2. ,%NJԩA1\5۶v)g3[$W">JtF6⧟&:#Ks3g9ґn2***X,dffzw::t .0yd-Z$= mkkСC455aȠH5W_}5kpazzzXlzp8X|9'NX,rrrX|9~ꫯj*;h$99oQAӻrl6K:IOOγrzm0\xʣ/r7㏥~Y=Jgg'e#e&绕~ט"7n8-TSC͘ $wjЫ_N9 ~[4nrKKkW ó*i.\W 9?j>saŊ^?+g~h4gկDII UUU׿u6mDJJb(෿-9Jڠ?+_ ɘL&x ~`ǎRZGNWr>nwyg>&͐Q Ǵ3g2> `Μ9VT͵ %?O /Pc9sL'$Hwe𬖡PEƻ)x! 4:D3{i>f3ӟ|ZM֭lF]w)aOJ"(Sh*-/ۍ~mt4^ᇤΝKR0R} V7KPRBd,]JǩSػX+[z{]E~^..6(h|'.'4t>/}8(|111nNϟgUA'Tލ.>W@gQ{7V yL*+ȠiZ-'OAwUIţ)~D"_O>^*ҥK˗Cğ.2e ;"??FuC}}]N?Jڠ?5??:._… >;rwJJJvN'&+8d<~6oLGGlrͅ/g B0[ǯ}_Ae{W1Mt{,TČCo|F#!-Hlr7} XQh4?1 |Aww7'NV+ofl1>ɘp4v-t)2wuNUlM`-1KoEwM׾Fgq/Hf@ھ$ж<@:!1P===`2|%~"_ ԏ\]pڵk9qfp#+qWA.>&&&Mblnis8 K%͓{ct1En =8.r.sy&py`nlJ&cjw;2Զ,/B_QRϕ`0sU{zzt-P7T,FRǩSHNNR#DANQQQ@zb09s&'UΝ;Gvv6th73a*v7_9;oI;Cpv&u\s߽3H*.3GTVA/r5//JiZTL:SNp8p8>} ׬Y8{,6 Icc#۶mriN'mmm{6mϟl6t:iiiaǎDb0aW-,'rz P7ɓX,L&N";;orvtĿCK"7Cci)vTZ-%]!c~iܷՊڝ;I2Eў;P۲OڬӉʕ+(._@0a? l6'cCۏƍ'}O0 &CmJB~~>'N`QVVFuᵆw<_h?p`Zڋk|صk555nX,f゘3p$2f3g+[)..ɓlڴ.=VX={8tIII?ɓl޼HVVV.X۷R7 M7g}h$..gPW:O,JG_oȬY(--7Dѐ_ 9;#H#K%͟u1En FKJpĎO(N+o[? 4{C{%N$okC%mrb~JRqQ̘1k3f|ٳge&Lŋ9uH~;' A%m!##8nܸq)^s `O>1QjHJNNLN}۫w2eڗΨ-z`/"i N#Y` D@[PFN>>$LEqǤ 5pP33{Fa1T]仇2V+:ʕ_cg!vm?<8w`֬YZ=6Z6˗jL0!,O)J%-ܩ n¸tzZFso&7>ph4$r>ynhmuuv:,n[wwn,=jq6uf8jӮ&uI .I\W<嚟 8\#t3PH?94=Ti sLXև~΂=6y)ąix#:BK%>r(c{c\Yu SN%=='Nb6QTCxCBA XdI+͘ Dzd8/9 A Q oBex!>$''r#6p`F#bϝy~tD^{Ì፰_.YD6 *GJ9FqEx[ԵL_a"kx#:KGhR͘ Dz3/Å፰_ /hR͘ Dz3/Å፰_ /hR͘ Dz3?qp!g,\Y%ǗpG/t]^FA])GF-k "WF6&wsgFx&PH~ٸ?LM&r54z=Wle{=$:X[pPmm'N2{6oVH3lxWR sgCի:ϝ㏱47FCUH_a!t^{ F#tfLw"3Sy8_SoIPPh\:VᇤΝKR0R}tۍ~mt4T44䓨jjnf6)ۍCCAK^w3v8߻KK Rj zCr2͇QLdeN;O>ڊOֶ6LWPC/!?!*- GӴoz78>hL55t=efFx&P(ݘ)w1^ſV1<{> f`m%Wݻ 4|w3ajEz\ށ`\ԑ2|1ǟUL<0X_պB[% Bᅰ`mP9BW3w*G_lyٰNM1Sm-3gPiRc^omLt| VD&* k~WVaHNFc0r%W 7(45yɞnљz-A:OfVKXZ*XZJŨuAWC8L&~F[oaΑw޽[ ]||\&E^Ջ2a*$M*VBc04mۡ[k+z;F…u::zb=J6W_-~:z5F'?"}| wBex!%mDTЕrD`1sg Lhcc}ޘ< 5۷sy&22x-$Mc?npLq[g' wUU ł<^ᐾɜx1_"֬ARVVFO&*[o%[ql45y4r$P@WZ9Wt].黜\=]]^K5ػq0m1ǟPPp7F uG/Ꮀ_ /hR͘ D:`|3f<_PeV^Υwa3eb0 II=ؗ73Mb ^#%$8|95i|*Bz='Iݞ= \XtA".3@:9 5`u0.>"0{H=UCmr wG@x % Bᅰ`mP9BWo䲬H J۱47s壏h9rq7RZɽKZGqZ9~M_DZwwr:1s71r8pZ,4:D|~ti20y2QޥH̙˖|0My yرe+.N?'ulQڅbH[oy+:+Çq946R^Ǖu(zijҸo2Pb@m%WԹsi:tݎnaR Hn]\]UUe( w'CիuWWr8p9t=w'C+>;~C26 *GJ9FqE3w JdFTj5X{_ܞFKJpĎOH2-N v ɤ̞nXۉr>joe11d,YB}I˛6amoGHyr*._̺x&OETZ<;ϟfV&8.$;{ڵ\)ω0 VyI2z=jo'*-+#DCы\zV+iJlsʕlF /_)&^_GH[n VgOW9j>KFEdɠ$DBK0ڈ6+则;3R$:4\XWek]:N\Vӫ(}TtJgibTCRrrtbr^)Ӿ\2{Z^c[xq+WAńki?uJ:ٰNMB BJ/Ꮀ_ /hRs1sg "W[g' wUU łшZ4}ĉ\#.*ӧ)xQl6yY9ӟ^}fv.oDTFoiO H_a!t^{ F#t1sǛ1܉ WFJq1ףKH@q]:p#s0$'Z)qlh|7$%Qc/(`Zi+/U-v IDAT;0gO H_a!t^{ F#tsGˣG1,+wd"adq;ONrq1_|IW =eh>|ŋ-+krZir8议K.qݸN\x xci)vTZ-d11^;H FH_a!t^{ F#t1s1sg "WMX'&^_΄5ksǓtUyplvcHIeh| |rn7l۶{ghdpGIdtpPT{iN'MGHWjv${G>0d-܁ޛΞ= @aa!˖-~ldee1}tSh^~en6ߏloDga۹˓d=z(0i$nfz-‘#G %%իW7CyDO^uf3\ >3guV)3{l-Z$?|^{XV2Ƴ9s8| fLwD%<,3x1$%Ic3M&le4e '߇!1K{;܄*2n_ǐD-f݋db*7ojf oHev;Gڵ%VG{ett{Wޞ Rv}i)8ǨT* xA}uu1oF:W~l}'v۩ݳۗOʔ*\4 GOn)#+'Q"|%z_Fr"~)jjFGnLuu\St;Ǚ?kq U| wjvDJJٹSrv._,rhyj5oo|'NKa{[nFCcc#;Jhii{ʕ+lݺŋ~z)--;7L݄۷Rn&)z֮]KBBܹj-y诟|'n7v'@M֭ToJ]w ?Tg2eyuɓuurrExf W>TRO/GIoA; DΟ1?3m4:Dgg'};;;  PSSCJJ z*++III\UggKdkkk}>8y$At:rOY+__;ތ 0JMZ;cpuv>ob33nzK:P#Plp`F*~+zX;yBzw&*%K0K@ z5ژvC0f0ԽJ7l`~ GӫP{7fQt3$O絻v}hccQ$-)TJZg@XGGpa@2B,A _%o:11Yml,)ŠR~"e z<!k4z=qKt䈔]=~8t:4ԻӧO3c t::3gr#@$WՌ74j,Z()h" yyytttH},\``ҥ\t++VNdj̞=ր)XHB.>@ڵDfմKǔ}P/?,͆htWҕn@7R\Lٳjj8_|8oY6] m~+Wo"OC?h={6'?O<17O0ٵkؗmn$f>}kCHOs31o&RRt 4=?t{h2-m_Z\v;/2 v `r8 |URgdcHJBnި`O>3g0$'3nPdEQo A_,pZ,h];ޥ}25_3XǭV+Q}5qqql6 O4 #$O|~ZFy"`ok rqZ,^X!>|~?Laֆ 8-ZNܛoeEsc#}7*e˨!﹣K0FΟ*|gY|`'OR!JѰA ˑ ߿͆f2,5_3ׂ.\ MK޿iӦ_`۱TTT0cܘ;w.Ojt:ihh?QQQ餵R\\ٳg18NٲeK@yR[[l&;;l6U˩K牜%c$m9]}݈pa~|~?JJ0 ٵkĂKKqZ,8{zޱ)S玒~;}KΟ*r%>gΜ9TTTP^^ΜA^"_%mhʔ)=zT_cǎՒ,Ք)S(//b_|Annt?ۍhbx͂:b'L`su+n茌AX/T1H*,zŔ9qJK]߾wl9_*yM1nz@ȹV.{Tro i>}K[$YJ~}BNM*2ɢ$ߜ5k8kVT5F /GR~&ZE|ϛЕk0f8/fݔu]u|۷_,̚5ryF#JWZ'|IJJb޼yAeΜ9c47n\ŋKwXf w6|t)X74᎜.>@Ֆ-tUUa3cP}_>?jva6;~6 f/k)<~3eˑ~;7rT?5(9111dggc2 DI$>>'0anƦΝ˞={ӟZ&//+VHgΜJ?.5440uTyϊ8r Yp1sǛ`+xS}Wy|@DKֺ zK+ڠתuzR Q8mTl>>1QjHJNNLN}Wlocʴ/wYcX ܜ/G=s-w9<,wlJ>2݀&'^|J AP2p sC/_.A2+70Hߗ9qgU2t\WLӡ'13gμj \tZV̘WPTK_ϝ`-KOGKj}=o:NU@2ηz:[V[WgbuwwVcq9nSXm6Ӯ;jaR8Ptjg.eY!ܚ10|ȹ;@KYJlPjwaz6YO~BCuk~HJ[02)wo[ oBb]9'߂-kJi剶?t#mP9éa Wr;ތeY6.Dz2m_|Amu:MZ( "_a!t^{ 'NvhN] |%mYތN #?b*(#lk_#йG[FA])Gv˲"3Dz<#OaEF/t Y‡( F#t,odp'tFz`5 Bᅰ`mP9BW3wHvFz`5 Bᅰ`mP9BW3wHv*OS%_8qWq B~1T ײl'>;~C26 *GJ9b7EzSI/6QjGm{ \K>D }|slj`G #"}| wBex!%mDTЕrD`Ǜk~N0DzS6EO#-}iy;iiaً/r:ڼcH;Ig7-[uwSp=u:>I>ݿnw|-걟o}LlF#SGdf^c.ïrM0֢")< gwwEpK7l{Sf3IEEL^mTU2njwa>==$2DGʬOLOwt/J7lG'ɔ v7xyqZ,撱p! %6ؖE`K*"}| wBex!%mDTЕrodp.;\%u njjFGJEΝћoI 5;wvmoFn7:{):Ν̟Lڵ8s>):kM IDAT.I[E/ &3ce%)]'!+μ:ywIغh9qn\v;{pocοkuv?hnzV*a21?˛7Sy3'+sᣏzYRr:on7ƪ* u II4:.# ^Arȱw* {\_W#35bP(paYtuua%H* [=Vgh}}!1ufNgfʘbfkZXdfaB! X6֑x/MeYb ͯaY %|ep3w_{0zVVHPHY(1KC/tP]F(c P]CߖNTw&:ʼn^ B ԾF6BedAۋ2>H9tI;QܙΉ^Š?"P j_#~2Ekh$:sǝP˛( BP( BD;ow Ԅ.ʘ7OP(Ȇ_蠺,h{Qɡ"-˝\5/^ B ԾF6BedAۋ2>H94NTwƺcD?B j_#~2Ekh$;QܙΉ^ B ԾF6BedAۋ2>H9t;QܙΉ^ B ԾF6BedAۋ2>H9t;QܙPֿbࡐAᇱy?9*ː?ҵ({S.%0ѿڵk0jDcTW{fPB䌶.]1r]ՙ;0e;4\m/0ݍ^sZ曀@Ʈ.9xoV+7δptyC!;BO8d{"u"$bqiAiKҶw;&oh"!i?eݍ^ f?A@e"Z?nePXe5khk 56 >/96@^ArteZQVVH${X|7p)>|dDrI}\mYDepp 56";ݾZ[qJ7 /B3@$#3AU8pсaTN >Cݷ;oJ&"t`ِ߻hxBʟZoܳIg#`ZUV[wc+=/"ڋ>Hjjj eJ,Yv\xѯ:%rI ď;Q! WXT[ ϭvMUWY28;NĤ$͝dU;0g~0,z=r{ "wlFH>y㩗 VC$A9m|ʨر[B}LIKC͈4^8 gΠł\ ޺_>or3*v)͆R\hyO<QL Qpg'&ⲳp!R.ts7aٸq's>abdڢ7߄evIaCgSu+|c_j~(==PNM 9s"PkC$Θ%Kj3ǹσ1vؓe_mMGT؟n=A6|80d }lr jjj`X;w_tWWW0ʕ+!J؟\ PTXz3O+++j }иb MOcpI2ݸN16sfFr.{GbSxxzy)\8:Ʌ!Sʕ*+;?̚3ڊK.A ''Vkvu׍o\p`'||* zwƖ-[R000#G8.]566b͚5P(b=z-ߏ3gG~U00͈%K#=咞t;Q!qvD͛ob/BR7PK&$xuf^$ΘUtm}=m5PX'F8oс?!oBI%%(Oym8;7Ǎ{ GPX \!Js{rfAڊm SS^{QK `0W!ɠsڛ7VgΝ>{_@(Dh;tO @}{;v dOga>:N$>^gΠId]lZ?!11~omEB~r{1M߹mۂn!Q(0? wv-8a_tTدn=AX6+_$}0z)H$twwՙ^[[ ɄM6A … pV\< %%%HHH@]]JKK5@r~oo/6n < 蚚JCPPThiiD"Ass3T*:;;.]iZg t#V`0> |ʹ~:f޻r%Sn8wr㦁f,) ^E"HJαYd85t s?0{U&HURq\Y%%dH1^ l, yJ &=Q'96 &=BK`ә_gi)2W8.|##s2Xrd_M]Y}􆾽ٳ!HeH$ȸ>uW:꣯ C(@( mUUCrwRI d*4׮U(#c ʐt) Q}ig;b(u tD_9vw}Q˾`޼yDtK! Jxb|r$%%A,-O.]J$aΜ9h4|5 $c߾}[>.]+dȸ~hjki$ϯ=fϧT؁/X\q 2Vt*}vF"`xxx"sJ,jB$e{p3 XW :u*/$xKB~q';ZhN4})H[> h8J,Zi}˒`j!1&"⸸z[+񅅘j2S_qAԵOKd\t+KL_$>cIE7$nθr4k n$!BľUR$`F{ vAE Md2,XrD"fr $ l ˞US7BVB7\H!˾ĀeYoxRw,ҕRNR`㺜V}"Fm8rK.Q;Q,pnoݾNfCu) iae {V7v@ CR٧,!iLhjkaejڽhDKeXt:XY<2{鍌+[Y dakmEÇ:Y S@ bR')磻VV=/"y|r[ +@{3җ/Gŋ>wLf͂UXfG;j{>@ŋ2 Ww+P#%0k~~>n߾ eׇGϘ1 0 `Y8rqo4DX,m?zn_BVaL&477#777|;\$W6Xшry$/yñ1t= vxǏCYT=wHLWWX˲srrr8~:XE?Ξ=K\Jt%v.GMM <ވ}gΜRĢEk`Μ9vۇAddd`ڴir<3g`pp "t xNcƴipejrm<p^> ]K ıH[ .SCT[̗`@7tz6oF_fdr ؐTVVR3gV©SP^^D7Rƞ`OH_ZZ &.33 A}ܹsQVV={@$!''+V ݍ)S$ן%`(NsE]||B(VQ5FlIVH"eEkL*JBL.\P(84^&&'U*YuPAь {w|JjVk9uwo|M:To^`q,z[Pq|ئO>Aڒ%PV@l_&A(_فO 9F{Ŷ7Q(;}nsASYC BᠥbYYY!  @Gfj*RwPgeX]]]X@ Re [a4јCZ-c:f1a1,6"" BZ1 Yo0lҨ\5w笿 wo  u> d3< c7z\#^%vzkY#=ۗIv!ΗDv S8!/55500Lt:eԘP2](R+Beo)c SWj:,p傾-˝\#Hkh?r" S"wƱ.%t9tSG)}mnnFEE$ yMH Ȃe}pjٲe% $˝ mHNCb~x@ }}F4DOK}e(a}XC 9TW=w܉eYbBD} AQ}XC 9TW;Q7si@P( BP( % Q)((hbP( BP( B V DT.Rc]1eןBP mAuY5CuE}[;Qܙ4iXaLP(pAkdC/tP]F(c P]Cd3;6LhD?B j_#~2Ekh$ꊜќ@XbΉ^ B ԾF6BedAۋ2>H9t;QܙPԿlv6wHk]@O՗2D8E5 Ȃ؁d3( rF[W.\d=w܉eNc?j,yuqm.,կnW@n@CeA 򔔀F; IDATWD(H9|oAXY}]FN\ڎ5v8z/_I86i{([u2:牷> WG`G}/]pOYY(xIefuЧi I,.|W"nv._$ B@>d2 twڮ]X曜e tl Enh$KWVN͛7!QXX+WB,ڵk8~Od2N7n+WTɓ'cʕ+Q:sǝ j"mhu )SWn߇ZZp+Ƈ"u<= `A]Z|{?'ٰa`hv Wz so$>~h d_Y0 "MMPMpǕpdzz`s3=^^^˗w?o^W^ٳ9rK.ņ   QYYÇcӦM~d5?:88H<.DeppmX8꫰,9)L.)tCg'җ,H.d^R`#7DS P*Elz:baXz z Ӯ1z{{ @<{aMCі-j5ZPk+XH[K8fl(GVA}詪Ο  ;u1 "6=EO?,g5/:,: 6#O> Ev]hhwTD= {܎'lvв?: 7oP"AW_51eV$;-ܼ|`@防u+#-|fCSh;qV yygssM_|}{;Dr9Tӧ}v#oOE_~Ijn@0ue #}OwǦ.\~R7\f˨04iZZZ/;+++Q[[aa͚5JOz!TTT```IIIXv-RFʓ_^^K?iiiax?:t8,p~>sq1O٫˸p<(t@ǖ|n 477… h4Ś5kO١?wݸe(W ޽?0{CRR4 ߏ{. \Ǻu?P~8x[p'Oƍgr, L&s yaȽ,\\ |v܉Idx_$\1WK8G{z4sWys֭Ýo<9I讨@ҥa1 $2hjG:Ol6 aO~bAQZ FǼвosnR.Ĵ~B64 Xv8 X_UZǑ~fLϬp yoN KfbASh߽>RY"&5Rҫʳ٠W1'?@}=nYsS ܸ毾rw`28Y?111h=x'ԣ-չY`%܁uE?D#q[]M|n >vjn}Xt;g׭ OǮt_dRJ;.zU 7l86֩γgv-ı GW[ ڐܟ$~ _xyʶoG+\,б%Obg.]jlltKg|Q">+**B[[Xt_jL~c<å+D.H`X߿]o`eYt:(]hsuԄǏKJ ~vܙ3wK쫯V+l6^yml@}=ryī<_wcʓOBM>u 7&.y2iD 55 D.QL #'od2i`ǏCa;O111?X 语w>#O( ބ l~K 2#K~V뜲ӟ@lz:ryl@,o i>uՏ9t΄˾ ;CD"ҿ(See%a0`2`HAf8L&Q?3K|}$N%e3jhcK>}JeQ"KMM, aTUUACERd.]I$XVD"fMMMhjjr;DZnܸӧ렪 ())ANjF%!P?Jg%Yyク yl-\vWT }R':J7tu!fĐBd,_֣GǞ;t#e+.dݽ|i^RucBhxd&c0@@kv!ylL}Y!Hr ɠFLz:Np1Py$F)aHaekʢ"ݾшjكoSBVp祏mdr!OoA_Ą˾Ƃa'_cӦM^,AB W(,,to{IL&üyPYY|\= }__bؒOkgf3b8,D"0 F21I&ͅ@ @aa!jkkTޣ J%8cNBL`߿3=rׯ#''Ͽ\wrYZ۱oͺ UUνb+ QVh;<#GXT4*{`X0ݍ_} nq˖ V^>pg^ 0F# Խ iBQeW-Bǹs`ff3:ϟGڢEetH:`ftpO/ ZجV0x;ۋ<tw0`y%TH5 W0зۄϫKKaP",) 8eD2 hڻ7y#$0+0qþבzpceo].ZXX&,^8p-}֬Yy& XEOOO  dgg#)) f׹bH?<7a`2Ԅpć|H~|}'C;tlɧؙN, eSRRP[[ eׇRP`/I,**BeesBTUUEԒ,[WEEEr F#t:^\b (**-ѣhmmf F*_rƏ/9Idxѯ~757n@5c} F޽`_']3$U ҷ BH $ϙ9b_E(+? F yyH[+.+Õ?~$'##›n z2R,@ކ em? ~wW}V@}=x/[' H cXdX!ŸhS4''#_[K|m'N17i=㋶nE OI?}:dy#\  zo߆X&C^7Hءe_-['NɓP*Xl{W\޽{188L̘18@_nN<(O~t xNcƌ3p%C.mhK$>ܟ$~C[;]qo|:3kCVC*bΜ9}ǎùs琘 ;s#>>'OdeeAPDF\?>N:/ wМNL$\á7n}k0~q' G \>d!V(#ʤbD$"5F& %RX&cL.U(byBTJe*UR khP4]\;>;vFW~asM :W`=uX_u߸e&s'_-տ-3\$2+?O;WeBwшRQHo ĺa9`̇ o%̏}XC 9۷!r@BBsoLojq~dB,: |v[aYtuua%KKU7k5}__ 1u(ľ655_Wf,]tJF!AuY5N]y|΄s'/yY 2>!i?eݍ^ ?A@e"ZaePXe{"ڋ>H罜Պ2444@" //{/ooܸSNIL&㔫qYf!33˗/`q p@ R1؈&gvtkmŝq$͞jEWYnލ<}^}]7~}Pカ{ / DF>{-iO'"̟lﴏFg4!iw}7 $"?9`5ED%}.]@$a˖-Xz/^+Dr;^6 W^ѣGyfr2w2CرZ!p6[U圙y#UVw~7tvb?3#̕+UVfLr[BH]w=U[(ܶ B IH@ܹH;ycRŎTc no`7\yMXt:@lFr6nDNY[B}LIKC͈4ɞ͆3gYZ bA|n.o/@ fCgi)z.\c4BYT'(&Ʒ8dZ܍yiӐy3D#55>okC}0dPN'Y+à!WWv}bdzUno߼@[_Gaܴ "ܙO\z>SQ:}n5|!gp^0ىCsɄl,\ W,nfny6}121}knK.r]z\}׵:VpW͆+Ws^|Egzuu5_ш\{k. PTXz3O+++j }иb MOcpI2盂a1fz97/ǃDG9{zzzpYB&!;;W0HKK1m4nivuMo\vC| |AT*z޽J9 Zwt؈5k@PqQN?Μ9Gy~W9 l6#66Hn__~aHFV̝;W\ Ϸ̝ :;$E;w71!SP(~%H:GV co/gpURɓ%%!qtVV"ub^g`dJ%L '9(rr OIhNZ?!11 l ӧq0kv9VnJr4݋^t_NY L;޼,Kٳ` 2B!DۡC} uh=!L{Ecc~0ڏAΣ:g=yQ$<8~/Е'! 'v6^t7[[Q쳐šys%z,h?v >uS?wp6nk$ϟg@ m;"ⲳki"7`t:Ĥ ^ڨK'\ڌDޮձ˾axxO=$ Ld¦M p\p+WtՅ$$$xbD$bƍΩ3Oɓ'SOD'}r:tIrmM0㘻p͛ȋwM{;˗#++ zδgbԩXv-B!qE?] j5T*ZZZ H JN燵~KWZBU0 (--Ń>$r_.\r.\*$$$ ''nNw"s^<$; ${{! U*}:gd1C{;\AƪUt:6 Vpտp60z=Eo'>fۃz4~!cc֕@Dmab!Jd ;;靥\dS־ IDAT 8b(d\86"YCSW緎\2ǤT*d2d?4nlep6<%xox1  Җ,A_U[99u\g.2u\vw{?_(#c Sʐt߽P͞ Db/>2ӂT>yk| 8q6 u\: f$y\̓\.H$Bff[z]]ϟLTŋ˗#)) bnytR72"śFS!o @/p钏曂a||'lNbTgn,{^jRi===χX,P(DFFuy[\ص@g) I@VZZZxb477:::"*Cr#cb~;,B׻G塽؈yq%%?Jߖ΄X^{ ZaPy]bX0xZtRw,ҕRNR`㺜W}"Fӧ $0k,TVVr_?JߖNT.4۱to#S_]g•t= vxǏCYT䔓4{6ϟc0բJႫWUeBl5{sӁDtFz=L<5V>Sᤙ3a`PqknS/F˰t, ch=mm2 X=wa]ee0i4ŐT)~H?Z,Z,x.Ӥ$yZ[aeXڛ7bIt|R|s"ϝC}qX`M&XV4|3=mt=ԠE.]>LWt|}۷,pQ3f,ˢG!?F#łzPv<7/V0 L&3.]\|S(l7ae wu~_ƞjWbhhBΝ7ol6eYtuuСCuHNN,qY@b2kIڻ%XAxKWvF#z=ꐝM,ѫNfeeիX,0͸t&,ŗ\.4NpI"sG~Ki로6͛רr1y.oGH__~;!>7oꟾ|9 h;x)#ݎZ ~HwI-h 4HJDHZ-nΜu0ಮ>}7k@v0t--"m2v?ՅR0&MBO=>v&o4|͕@(o0t6r9Җ-sHK\⫏J0e ,CCΙsH_]oä@R!e q(Blvx 2ġ`;e? ŋqi9sJ-r9sڵkطo))̙3Bht@2>p xNcƴipejrsn pBacMaSRx׿ xyO\cO_pW?a45k8f͚k׮/QTTD\UVԩS(//Gbb"溼.kO)K3wH;-- Fd B>pjܹ(++Þ={ +VƔ)Sx]jΝ;>999η Q:sǝ@犺'.p,P2"X8k*Dʊ$T,Hb\* $2TPq iR)MLN%T1JU_x`ftf+T*uc8;w<?9#1z=z s\pq]2sO&,/> *7i|Ͼ/h-YE^^`u @ۙ@>TF#݋m~FLD8}+ذpP}oH] “bdeeE\. Flu8xp?2SS!J BG> \l-32Kq%K>ӀFc3iQ3t:d4Vddpd6XZ&33 Yh,g>:Y.Q,+oQvʼU6tǻӧL`>v ŁTf :P{+>g2A5e{NCVPM}Ozr|!55500Lt釔0LtIrcgBf)c SWj:,p傾-˝Xşpn Db]C#dH:5$!t9tS#G܌ H$dgg*M /+Tm/XC 9ղe"J.tI;Q 0;X?aȧZ"R ?cJACdqD=^xa?̀tnD &.h;{{W(!.3 +Vܘ *@޿D:BC24*GJ9sǗ1i+˖f /$t^y{n171/$͟~Ndu7°#{!BK0҈:!+ݲ|Ɲ0(*JJ#zD'NpP'd>US3dmNݧbmm%? 4\Xj%1;<&:KC5aFو6<Fĉغɓ=,yEF#1L>bN ΫWzz=Rnn/P|y}oN?ZObu::W){oBIz&Xa`zokS2f=NwO90c⛲aX)61H7kKϽ7l` h/-+*sC~>̙֡cG #t‡ed!%iDTra3 NmlbCS=73nG8})iqtw{Ztz흝48@wEn$$MKŴ/~i_".KS.pL|jǐp\Udl1]]q % BЗ`uP9BV;IxB)sq1 (ߐDΓO~s ]|<.MTTx$8?.,\Ȭ%$8ʆSNJIq讨4ԥKi**pr8h>~ԥKQ2H= p9=Svv?ZOՅBZi9qŋ=`SӉd\TDY!Gʂr:1dy% BЗ`uP9BV,*DIyZ66 {ASƤ[o1.amo'>3ӳX2իi; nf>J^||,ܶގ>1ԛo\%OO^lt9pV?|k_`0 @V̙3Y|9qqq70ֈX]W^aՋ/A{y n q,f?QiiEcQ#'+tZ,֮]Vjt:9z(/^DV3o}Sny {bccTfL9j*NT* 8qcٱc2)ŋ8N.^M77IWWׯ_f۶mx"`,q_k1abep«_5`З`L#rdu)4 >縨իWp1RSS׾l'Olٲq;wӿ{q/_ڵkqݔo>n0^_~Yܡ]]]Ř4(i< v Jő-I4YS{ S7l7>MZ#*56pW};7DθernV33|9VsqĤ/7m#O3i?L)N*v)&,]ʌ-[PZ v{:)}LhH!e$J^z~'K vSg49b!y\mCP`!׾Kvm;`̙wݜ:ugbZIOOVA`Fɓ')--b0c zeCNEEE,]Eyeff)h[o2VKJJ )))HDaa!~{i~YVgmJ4Iahd`%cc <#,--(xiɍE!/rb^9MYCVKמw***(,,LW{gvsiN`رcn:͛GQQ$&&I}}={?^!}ݗ@ii)g8qXx Μ9É'Xծ ?---|K_{rJoNUU=KJJCVʛo)+K}y>r r b#/^iii h)=9Y8Xoj^e `Ơc y˗{aƍhcbFGyݴF@ ,ؿrJ0 ,[k׮hXx1g^Ξ=ˢE<n:RSSt,\2p,XNCӑ˅ +Vy[b3gѡ8ӧONC0qDٴܹs,_`[nf4EI^zi_0וSVV8ͥL6_X,$'Kپy3Q))hq#%%kJc e ژp 4)ع8"eB:.]TSÙOOfwȆSv)}֬Y3`]kp)򈊊B2+Ádvwz`tljjjaV\驃uuuhFNV]sNpxNʕ+WvjjjPk%Ih4z>6)^z_~ѯR~_{vEaaǗq7% O˅੧Nv:._&+}s)}T Is Y_=^!\Y~3nI6붎j麟{w7♶T|Յk@;( vT͵w!f$2]%WiӸ].Tj5ϓ{[9@0 v̀hfx…fʕT*.]NCjL&ϋ^d2)/GV*(~wwiSJⷿmHag00LAœCA.` *+rquVZxY}損Yr Ll,7 ' 4~#0$˯/}әӧX<ŋowlϖ-[ƫ>fqY#<"Nx2&;Jd]~ g [?ļ<nSq1V @ȼo|s'_-7>mL o>i[r-}b"nBjn.s}CRjg0OH@Zi6OH9%fgsΝHV+-gp/aO *r̟Oŋ`HJ"[B_h48NELMff&*,JKKIII 9ݑ@NVtwwh1wE^ˍ(JETT/l`0Xx1'fWBv|ӲdU^5kn7-NGf9?5䥗zÁlyRݲ_OSq1NIwe%eh$ib&MB{ܨ8ie=d#4;~:eֆZÐc\땯rLˣ) IBU4:h%IC,@ d L$ ƹsYd dɒccc *_ܹs8̛7/8\YYY\z}Qiii"I… tfIhnnf݊)˗siN>dtܬ(… s=رw=p:N9|0ϟgt`X]ip( ^cp14;@yh,2T#1+$b꣏H˚;CI$*fixVVHDKK {~h4$$$P렒?;;'OzYYY:u*d)))jb49w߅v;׮]osʕ+dgg_Wq:X,.^ȴ w+oMMM NFyyOˌKe>mNEC=ȗT*f$_el5yژ-!Y{']K]A%ֶ6SSI[s}#paHJY&Lݰ]8LffxAς~{P?sC5}l&vd>xP'$ ~=կ0cFe!" %_=J}}=QQQ,Z;zLLgQоcެ\3`GEȑ#kU(_rE<&&g7*q!O8z(III>,Y}]PlȒ_ZZ> GH; ǖ{hǎX,jkk뮻|M>?y~饗PDGGC=Kbn+*Đf s\KdoΕ7ߤrz>:T 4cl~ڻR=kd˲ J:z=-Y\_j} 11UVQekmmBY^9 *i'MD||,# /H#r#n> s璽mhO9=FGaiia~FO{2Q{7UUHV+L\I+VxvqĤ/7m«Tj ɤ^͉yT*\N'v|.eƖ-Z2y1?KK 1&N?=۾'$`ii!z&s =>=h~ʮ뉙4Ip9TGC)ҕT[&*~@VOrz.ع[Sf3I99޾mTԠ YG1yZo#䜜ύl `Vys2 BЗ`uP9BV;Ix H5Mynbcюt\?7sGŋT|ǸSNTTEŮ]n755,ڱmtt+τ<>jcM ww~cpq9<ȕ7dɿܒ6&s\?~#ٿ7AWEs II4r孷X L1`Rϧ5'Lp}:XFGU^NA;-K/;UMNW_{Oػi9sFdۍ6hj^f=@r{šDdql '[9݈ "!dY} FQ#daeLNlJi6QProڄ66 A9"e,͞Ά#Gq#ژd}7>/3l1bb!Zg ^anh8uraij!&Z8ŤZFGדq-4Ϭ'&=MTV\_y}egI7ΫW{;qsA"y|uR &XNWݎ n'L`ƍJH7o&*%mt4S7n}(_ 9M&5#}VV~7y`+ BЗ`uP9BVe"y)>=!'[E }X@/|YFB_FAY)G˘5`T*f=~|LF ǎr:174P!OH_Sp$ S]^}Uq)T\jt]YI~0I3Ii(`Ze˨?znGi8v˖)k t8<>Wy%K|OXkCܹ!ūÁ|@ca!6m\U]~>ֶ6:tYI j\N'NGIѕ\6Q0v:\7rrU".@>7 BЗ`uP9BV_$ز'ΞMI=粷oʛoRgQiiL8t(_O}A~+$̘˕_J~ mmDtGocmkÐTavqpز%oąj | &x mR*%yvd╣oJ..EXS@^Wj> L>ݻ鮨@Cƚ5y䑠=TNBE=T݋[8jrU".@ܷ‡ed!%iDTr/{S~k UMS˥uEk]֥F6j^5D飢T:C>..NOL'Sۍd[I^jXqki{췒ci>*Qd4"8U?o(rCsSOl$n{*Pj t^U~_ǃHG/|YFB_FAY)ջΫJB;rY){&czZF[5vJ}D~[V[G{鴚vvجvrڬNîvP;$fw'jDVV ѳ>63&ewW6`9 [ɱ4B /@W0;72*WI~?Cѳ;uMRGWrF_1؊l‡ed!%iDTrnYDq'u^1ލ[@0\5 BЗ`uP9BVQ:%K m5PÍ` @w 2Y_/G_,#RR&4#MFʭ{w@ @ *h5!ůjRawf͚Eyy9#@ @ ÀݲTj5qqp\ŢREDʭBƻau cѾF6BC24*GJ9Awy\u\ح6 Co,cszleD_,#RRLv,# /H#rsz6,b͝1)Ãh_#!dY} FQ#dkƤqg?#a*~p>Nz67s᷿,7Z67:N7X"%aW^yeX?D2m`mrnN8+^ovՅ{, /KSn<흝Tt_1[`tb? 1%>: 0m:]iiW ]l,)1_DBu{ nSLXo|V룗gX >J7R &7B>eOtO$سg7Naa!uuun"HxE@H(#%ۈ:U/_z='O[n!&&f@<} 7/^?@) +WrׇݸȸRR'%1aJJ^xmg!kv>kk+y?).If>Μ ebuWWL//SXI;>&*j@n| qZ$fg3DG=~!ދFzn\v;[3ht[녵e^nj.uuh e旾ynO]g_-{ɋ/0IOg};ujPemNgakk#zDflJ}a33zA viv.$-moEm=i"{~WQAdihf>LH6ӦGZ^^He#mR>#%pinfHBN.Sͼ>i6nE;R2V*/#8JƦPvmڴǏcXXz5zGt:Yv-{7lɓ'ĉ3}t֭[1vʵnΞ= ##j|I9r--- ML0:PR;n3gpV+ӧOgڵ:L7j_K^X`ɒ%Opnxmmm>|ロ~ %P հ̅Ș̖g DEE1qℰF2&;Je/_$'1$'s?ew>!9Nٰ0CɓLXܷ БZ[Z<Cb"vx=v|'S]9&hP?p]|#0NUWWc(**n3e֮]KlllMRIfO{ _>@ie rxchiiLhjjbƍDGGSZZJqq1WVT2, =:&]W`/I[I )·@嵾JtWPL#ku)&,_ZC1q ZO 3y ɨz&XA~m.,$Ġbʹ3e$͟*S6l@c04o֖}:)2wݎ $o/]v NGbmjoBIYj/J+P_3>C.TI#**cCדIggϽ+W1i3_\gϞeDEEht:1L\.Yt%u0PSVVҥK1 z/_Neez}hf}|V\s$IL #_>a'xo?k.::: %Jz=[z$z{/zJHF)so\.n7oE};mwÇ?p>Jr]puNNKSf e8=h݃z! &vN=Dܫ|A^K g}|!OĉL.B\˕IÁtWTFZ= CE2@ڻmP}NJ=s}2 6|2 RfnVԯN>},2k6}^z=fsht͛9s fĄ !g$2\ʦLM7 K: 9Y| ZiW> }ulLhZ\At:EFqț 6PTTDAAIIIXǓH0 tuuꫯzPFgºuHOOv̙T|>5|UߴPo(--?桇 6CsCa@r:lkˏ+y.,yY~'eBfmߎ.!N׳0c| !=ml,nI(B֋:/_ƐLtz:Pd< ~֞yCC}h48NYL 222dĉLb(GLL 6f쌑ٳg6m*3gRVVFrrr$cDF#IӰZGc9YJVkDŽaiEjÁ: _ܞ:6;9@mFAO<իW9pO~~.ƪ*\N'.K]g崞>h%I J7`koGբONqBGwPL&f&j\G{?W`Nuu=eUNJ֋%Kh?{ǙT1kr$͆XUŕ^r#\ʅ $69tr%K̙CYYNɅ |=5kgΜϜ9g2ncp_ 2;;gݍ$I\v!3ڑ}\N'JsQϮhE4?H yW-(- GcaillD$$Iӧm9s&ׯ_G$Z[[};wnj5€:j7oW\l6#I---|G>>nϨvݍjvڰ$xQWWfQQQ3+Îkw'%?{flJ^yoOgGIkRqPk$y}K1u&ۨٷ_>ZMݧ}:ڨ(&Z5袰ncǸ_LÅ\"wKc#8fb'Ofq#W^{ F3mOLPӛy3jƔMP&L(Z/ Hvg -o(C ?ij/ckoǐLş_gA04uqAHJJL)Wf߾}tww+{%K(**7>-˛']~222=VQ?zoc{=r￶XDNJݚ?XY6&V1?hƃR;|!Qii=Մ`FDq$0dlQTH - 4H֍[pZI݉a_ǟDAw䳗/~+;̣| OOg/?aGD~(|l>H&{XGXy۲7{O~C/~u)DR2Sq7C6 ٳǵ-K5ED43#E$2?>cA?SЋ>mcqmY5E4hʳx"C#B3#[mIO/O~E=)y[rtȿ|a?V1j)SV1$2S44}΅jT=IuM k^jm־cǡ[-WY/?䷷?{|Vy[-Wm/J^jy9 9sv ,%BD4E5uԙfz2EzR3 ˙YFfZ1.[mm^ eƵu׌RӣM;՛7ՔnǵN+\,r KQͥj:Sg9,,Y¢ER[XT_)fᵵa'ּj\uy[ k/cihzZY8]Cjͥy-+'eS;",)yYEHɢ}3WP7eWsŠ]df pFx8.WuqZh4{Hs/¤4SKyS'cqg,TE,uSf-V3:K-Y`sS""ZI3.=ZC 롶a2mVZkVyPК!]^L\mϺ̝kMzɝcK8յc>y66EֆjF[dhm-au)q\zzx8 CmZlM-BR:o羰ma'E,U^niB{Ԥ*sQNGת\Ͼi!^cIVUӫg^jmBk-DdyO!DS1 e"l5USPRED:3T 9uVT51̈h^V鑭Y+SKiis-t.lznܹܝϾ:ֹe&:橽2fV=s5k-LSpx)Q=BZfk^jUOo>45bZڦK}ujGgߏB靕 "*EDH1S->]M=M:5DR;8)hNqxD6iO[b ;͛T;a^om};!y'Tb{,2ttӌP{ Ӧ#*iv#۲[zHFKk-$mIDATZnLlŽv,ՐW"ۼU;7-_t!︈.uegr:rx撋ZEiǴ2SEz¶,p)RUӚE-,k6mڄu. Q qG,ѝu=Dm"nDtgvaq2[Σ[r93ԜNw5ZZCh X3NXۓ;MqBϾbmgu=diwa,,2$疋EM$53UpDESUSDs:ZPPBK[a箩g0:g3ɳxl 93E0Ʌ"UISGM1U/r։ŤÎa Py7L"L2ZT9M|v,8OVI1l5&vDyٽ;wLg"w."ȟ;w)rף{u[9Ԏ= R)UHYQ|Sba[Q$P1ucf*4eQ#҄ /* $ 5XxBWtRATt*CDDDDDDD5(TD"|Kb_!F& DW$E*DQ| z)/X5V UJHCEm@*vEY!"""""""$PQQTxBQVT-?Fԧs@`_|IQ/2VRP4H*Bb}aBTz)~ R_(fbT,(@&Z_bX)TvM CvڅMR|r^ ,Q%EQ$~TTU Og)UU@-(T/T: 0u~QQKE8&mf& KPiB5y`(HQXE@Ge)J@(K,E,(D SQE1_1mU/zyEפiB3tU*:t]2$""""""" *Œ ~E*bHg E81Z$KBQ~NLmvT1KH0tkBWu*ꆮT ]TJ) 0DDDDDDD0aIEI%e iZB3TMUm (#ʿ:@a |}5HԔ#`URJp]J#kRtCwB! )MJUUu]5uDDDDDDDԺ)´b!uM1MK. )SXOtKZFh!h/@ 0~wKd*U>M|KeE Ͱu]3lB3 USuU5)U!"""""""MRXT@@PU@* HM2HHeR5(p7(J~wӡJK _jB UͰ6]mvͦj3T4U,@(~XRoI|+RH]BQT_(NUz}2x)K(&4]&¥G$ ,q"IJҤfhfӥf6ݮcf4]5lvnn6QDDDDDDD i 0ߧZf[KT-a*J@HU-MJ))e_TArR(TRsHJCviBTCh0 ]SmM1 E lvns8՘ccm6]S4yQ+fZ҂|eL)S5)p K0”e旪NM[V[ Q}`Ihѥ#bZt)R,O^JEJB |JͦIU ]Nblq 63Vw8^zѸ#u@&""""""N7 (&V;Gn"ij*tEU S M**@* AŘΩa]~wАlj, "Fql4tæ; ¦cmn4ݡ8Ñg8cx{\$#6.}.f~HѤ`Q+ 5kJ]*(Je%=>2Lۯ '̀2nB-i u ȵY*WTwq)'6(#T 5.5U]iIMUUf(f(a1Ncž8u̅favnTFJ )%Ep>`"""""":4g@myL c.>/ST@l~M**! >. /UUJM~-+GA&M:oSMj~R$)iRP.T]JRUUfNj;l111Gt7Q'ESH10D !DFDDDDDD4o@qDfwhvC5l6f誮RUUHUեT.T EV( K5ԓ*a Ti(*麮ꆡm3cY"na7Nx*bGG\S@ݷ:tEQ` MU DNv62lAB| èw|""""""jξkk-0J36gwTah[jjIR"e5&mIx iYuMk+Gmlr 9EClr/m }&V܈mk :h W~E%8c|~? u))82>+Ilk0Q=4gߵ56x+E(RgyGx:g~MEEPZ.2yc>uMTq-BNn?pH x=}>}?>8l@ddò蠱p"<1kVŻbDH|7gν>~\vjQR7v:l u=O̚nj>-y5֨93,llOYYsLY6,Lv/pg 2{7awA1n=CR|,&B ^O~OY @bR;\Dƥ]˅KƏ_0aD\1ab7>_z&NK. .5^Yax0wk0q`1cqc0yxilF5ܛ=^/F|zz^=~49E뭷_-8Zco*MݦοGsjc^Oj2οw^U{pι̝º'axŋ)Sq`ɒ% Ix~C]]X=4f8lڴ)c׮][n />x^vmek׮ w]j{ݮnz<&DQ[М}bgge5iO?$>_09bڔ)(sLU`c%bdWS Pu׸;$#nw.lE+ŇKﴠB iiz\}ux (ܼSOEx%;111錸N]E676^lgM=jkד\f.^+&Nij=?#X)%6lނ[2?Fֽ{w :x| z+Ƽy 1MMgsz[QEe{C{1qqxg>O̚¢}gp7?g_~kyo\e%KЮ]zjs6y۠Cڅfee])sc]/p9Ӡ~q7L= |>/^5|rmݪ 0- H`Q_w"]4" =QdRI7{3j7Dz,f֨[JU.aw"jj>SNúk1u4lwSg.]3PVR*ڵkq1`РfopW#G OYYpuFX~&_s ֯7\233;wSU~ 1aD,_c\{s)SaqtUoڴ W^5pcp;B <06w*T;¸.\ ˲n+͛7WHԘ6 !0bu9R .UPG)~m{NiWL/ƄpxqOoƈ\{u؛ 0M_2>~nn.*CwƔpWTiS4KQq1;"t-R6S݄ njw܁{7Ԇ{;cbi?| zRyQA{~*ݴ~m뮿999)AHDpY]RCP)s3+W6hO? x}z;ѧWOw')Oe57b捐Z_>۔3B9N'l2PVZ.?B;YYYHMMҩ::J%9I4P<1N̞2Z ,/cOp}ח^z }7.Wy_̙3OEw/ǟ̇qǝw^^~q;ǻ?E1u|xУG6nW a2P0|P {rQ{v Olb0MH~oR2_EOHi6o=އ&_{&M ~Bx{qm; ~\TׇgÏ>\^PPMUa nomڥsՅR صk{i~8QXe˖s n'SJ xov oÍS)SƼ7ر~ V؎o7݄_Se;~gwީNްK.'~ח_L N1myok`k-TQ~?RڼtůÏ`O1G{h#όx`ݺUVƚVZSN\?ܱ307;PsExu}׈6o߾;s_{=؆s0gk8gyXoرcGvE]}XCד`l)+To^ȨaÇ㯿_8up(1AΉPγΥ"Gؾ}{U[d{(s Bݰe˾$Rn9EJL~E;xאѫwo|539spw?]@#F}#F yu`-xy2ths6h? yncs9asUX?}<n$jq?<^<(uG;30Q]^x!}Q<쳘0q^^|%|z.(ȇݦsڵ0|p$#//MoAЁ\_L6ⰴA ک%΃Du'׋?3oTU烿 W'jk6_͛6[ؼi#:w/f )) /o<8cߛe˖⨣!}7gePDo+--kU;.~ƴ94ڵkƼyؾ}l6[T?BU5sR[v@}PZZ Oi ;rOwNepqcůK. Xܸq&_y%@׫^j*wػ{'TMk6ھ~:^}*c.R֯__ܵ3"Ů> zenwnؼ%,Hp}РA7 ~Xl&]yU{=~8"5ܷ)OU[Vʉʭ1S$ >/x~SOC坊B|-qܱUy\rB~ /iSֈ](/v͛7c>J&uk#c#DuUڞ?\{ssOkG~F.AÛo ]'_D7>ܥVgW&}ywܱؼq=Ι ltlxyKpwGI(Js0hQrXrY.Ɖq[`c@r(=}p8ڛ K5{7^Oe؛7mDsG?OΚ?6n]בݷ, ~ʛSon5iJGOw߃λ9EOqGqQ!'])$!~~4͡yY\wÍcjpQTsaU5sR[EE˲`fvuJ ի/\s5Xj233~z7ncQJ+~-Xx^( RJUYc.Rpzx}ap'Z =9j۶n[}*FIԖo׃hϹY]kPpm)..Fbbbn>c͚y͚߿?Bp5|9h_v>MX UV?Ņx_œsMT/scXtYQeBA01A|UCׁe˖gϞHNLuk~]Iexnw(wBu躎ݻɱ w-*Gv.蘚y%(ϭW5\܈>26a玭ݧFOg_wGߛe˖㭷nS}V]1 w)7*q'XB?dÛ1 %T5 IXQc22UӰUHLH ~zHD6lނ_/o;u]%K#%%%yĄpTuܠAXt~Y &oCu*6_cMʄiy=8SKq3RRRc׈]MbٲeXt)8f'7qG}4JvnIW"7wߧq7|+>=z+pG1m(*LF#v;v hLFzN1+tUO: <cO!C!Dmu8K/4}^/ f|>.D}ENCŢŋS}X)IhL˅K9s0y5F\&~}8cH  IDATq4*kPVV>:vCI'Te9u?&VVDu5DB~<øqf67/ܵ~\%Eͩw5\M*}﵍ݡCG7>bؼaû|{>w.$8 %z<\% ŏ{0*5w?]i{?H֯֘"99 +Sȫ81;HNNզkgnw07w}7‹xٸs7w?-\;#<5_~9>K|Wno!XpQ;餓}v|҉eW_{}fx77r !L6-mV۱h\2*z0qM}}`a?os_ŗGߐuoLC=0A 'vc! .ĵ]o<?^1w)%#?{,i)S)S)Sn ɓgؖŗ\\1rܢŋ1qK7G7jUZ:` vUFEzXo\~2 }n+ou=>" מ/.q]W^}r#jn] tޛՠk^7l6:Gfع}~?2wƘqT8o%H45 .6]a4C86]5lnwNb8gOL%ؓ)_zYvD|)/=x4P\%g# u6N̬L[ 8aU`٠lXj\.7;l;G|Ht0ӯ?nވ^}aMañqH(@vV&ׄ׿Je`cѹ[=;w|cq12z^,_+/Y>`ҋtHEǎ[Jv]Aڽ3i`Clvu{Ͱ{ʯ=zab]qHMOjؑ%isOMͰAJ-5AHJn7k^5GcގԷ_f.[^x ݺc維zʐ.ؽc;*&ٌfCZzg8N8vC醁NOi9u렪vsnȣ1'O'v}*>^}AuXB ?72wTi;Nt;fԚovNӐs)!tF[֯_G} ?E̫.q h1͆ߏlB뉔[CΧkpJ7_11Թ+nX>EQЭg`i]UUz7+{yuRm{[7oDYHر/=-+CqQW'&Dv֞%QKkξkk:һtYO2S\+*,KMw\20}^SkV@ X7ݪDŽZ(- _P>]yR+rh{ ؜, ~GNJ ]dfakWHKKaެ,lٺI ջ:wa ܝDTTU_[oU< z1Rp0o;:줟M[oۑ/vHA5xxgp9`@Cj%r#":4gߵn-;{MӁNJ蔙d%5I(7]' 3 ]:#66{EnNo* зO!9)oL GASO9Y{vG\E!@]_NTm㖌:Gz4?v9YYQBt`iSOr*U"֜}@[iz]:h/(@i 8cc;9ڵCLLL?uSR]-^u8u~rBt)).MS6D:;fP4xTX|!95`*9v!--I*a*D""""""֜}@c 0DDDDDDDD͌"""""""fj怑u!$R@kZE(PU^+(4_Ez=pp{, Ka @SUhaCÁ8'tM,Q<& 0M0MPP\ S*HKIAΝD3ЍN,D .yر7".1Iq0t"""""&tP`0M E.`6~XthR@ Gk锉\eQ%8EAn^6mچ’ROIBR\t]c 4!,K 3'y%8?wB ieA풒0+3V;ɃiU\DDDDDDD wPŗ(.uaɃޡ=,liS 9yJndͅef`qP`/,F^Q)ca7 ,e&;X"FDDDDDHm#i/G 0ؙ$v?󆈈0BHdfEj#_(!8 9E~9v)9Q˒BCJ;%`Ov.w!""""Qk4MwD,@ 7}@.${es^:HB=[רQ0KKp+pS܄Y)% JС];:k-xm1 .'~r7>[ vCkӻthHOkHƥ&oyU>&֦̒G@~a9i[*" :g!矏=a'.Gt$wM5Fjoi͝{}|8cH>oS$%= 0#7 S5b Qh)%J<^ONs8⨷_T= ۋT3pyJ ԇU8%>`~Ĩ™Fo ?g6b:lOw^/v -ۍ~cƌ(8p8qyGqqq\,_VV+Pc7)Z/f̘wy4:^]6m؈.P벺oLJ@ Q@X(߲j!%KJU\_Jz;_{3 %%R P.Įؔ;r3_ DOff&RS'f=Yf vn1q߽⩧.cޛpѸq[a_cGv/Z_~#ibKmbbbчpD\Q/޽{qAkth|!p; شa#n~'#QSTMCRbKJ!|Li =(!`ZKDDDDDִ.7Ru`f`w_hCk|m>lj ;ee-./M#t V_>ne>w?\v{\vشy?H)׋NѩScƎۣo>0}E+ǩCOaðra;K,3Ϫҩ4 !-- \=V¸.Ν;[m% tU5 : / .c1fXddd_2~< 9K, _֭[睇q}:r ƌ[c&O/R*1ࢋ/¹GcݺuaS}CoLO ƾpI'ayp°ifB]; O1ҵ+~ɨ #%!.7d) G8',:C~%Pcz|L1wdX쌲(qsz:h;7=/Ɖ#1l4#t} 7ՏKFkfdCNul?)LĈ/[?@NN6:vLEfV&n([o7|3:uJWL>$&'CQޖ ߿i"';.=P 8K~Æ ngePJ>ʕ+ /`!P>,&MxܳBQddd`…Xl8kt I8C !o&~M8*5?@JEQj|bV'5֩~7c?h׮֮[3f`萡M:Cǎwt!'Pcg}+/ʕ+1sL8v<0cF@ >CUҮ !+nҒR컿rov퐛5kVCQt=x2lf*jyU̙3_ϟ,^Dʯ6B*tM^R-7ߌN>>C `M%/7?rs#^*wf(xak?7S30t6M #fҝa:tmn s^~!""""`]nKN93Ss0,f`wv^jbruICv]ę῍epW 55k׬iHJJ>_t:Wu%9ذ>{cÆqI'ѡ( |2}qq%'c˖h߾#ڵKFmv.,uǑ/qG\GHK/ .O~|>>3ye]v?!CWYis(˲p:*JLΫs/N̫s:ihbIGU8\klet:{(!"""""j%HeȅDBS5cRx, xZy8 pt* Jj( 2ߕŎn3~<n w/|`'M|?&\v{Ƃ_G 7CEFF\6qD\wvӴ:c4m*6sŴ)S5j[n_᧝_tmaaqzF~[n)gڴix0lp+~]P f!C0lpte6nʶ;k&_ v,(|uuI (,rbR%Vq?Q[^OԊ" +tah tհas8awtGl->1іbOJNv&&|yg 4JLJ ߏ%Cǎ) lbBw>mtZriېı@Z~ o{qYyIKK[*;ҡ˫wvqǟ?qdi<`i#m#4Fx~׶pm-H1j.7͑Զ{âcqaC!>k3wcщ?BDDDDD:ud0WTX/^rd{=^aU׬oU UP[@`DەDzMEn&M#r].|ş~"`{6wU˪>JZ}@dz >#y_|% ;C*,Unyi7DDDDDti3)%LĦm;ѳ[g'5i|nGjRRҚ4.Qk;c֝8^0 #b /DDDDDtj߂$e ޛy8##j& 9;3{o.,KDLDDDDDDV_B `OVVވN9N{KEԦ9Xz#d @QR$)eDz,lٶqƈ9WVQH)ѽK:1KЧg AQLŕ iBEˍR!1^ST2Kx$ |8iІJDDDmL@x޹K"ɖc۝iaCGt QZ9AazhC6bۖڔV]qb۶ :k4E*j蚎38ίRpԱ/񏣎Al\\#3κupam5_xZ\ف{^Ćeo.l3$jUU1G@ܽFW_^cIk&P -X5MQk|k~V.X#Gg=&f?g86DA IG)JE$$$$@LEq2idH̜z3.բh49r}*G6mڠV8|OXz5P3Kh4zmV^Tm@UU/Mdm/t4/Nz6S}/b8ii9L2E s EQسw߭XѣG9wk׎!sy.Zkjeˌi|9,c;ճF0Y`"Ç %iҤG`q82bğ*Fq$l]ȭcTj ;weE`0].%%ݻwӲeKi޼9֭[n:9u]G|||%.Bg}CӬY3zꅪlܸtGBCC;/eqز=w~~v @HHNtEa饸_*(*6qSQjRH( _~5M4/J .Zm} k׭k׭wX.f7DVUZpO>ujJvM9Q О/]ſ`ێFffo~Μ9+A% 84Z-gϜ^СCfz=a@h޽lݺ;3h;63C0VE|s&M@ƍDswޝGpHh5Z .sgya4th4TUe;rݵ^~ˣjQPpnln7:A eTT'E!(ȀVESFO) h}O+p}oTVdZ<nU'Oʫx駉k%2륗p\ <EÁ_tH OXr^zW_rm}዇o{޻nuwń{[KUw&//:TTfGq͛c2l| 0qA'A ZJ&ڵyG!66[eӬ;_uҗ //đ#Gڵ4|]WԺ.99ۉd78iRc[kp-vl dʕf֭\}UU[0h-~%<m~)'HKKO<{'.]FѰfZN>M>}p=Ytrp\(„{Rhaa}n) q͗[&]˕.( B#kLt:aKT}eeezdgeҸq8 86v[@]rh7lyffZ-:E6t:iӺ5sz6/zaZZ;vĉdeew; oIʉw))Дt^ 0 9oq52r|M\.@{ܜ9s_hSζKKٷoϟO|'SSDΝyWjyhxo-Z:'J'u@hXͷ[xޚ.:54ċrq2dpiVXXȱc)ds΄Rt)Tz:=tma68ue˖yuk(*Çc+ճ[f„ Z %v˽6_v}UqƤs jdff~3˦E)J'،ofD)%3VVZsUWhXj%d4h"os]&884}79v>7or O*bʔ)ONfڵ2=3;&]э ܋8NoC3rE?`=tZ.MѠhx0ӭ])8w*!]TV ΛCӧˌ5m\nMC̙vqР\ةpi j`L5CW_G3fZj[s`2 C/3ṷ4mڔf&++&w.ssri֬fS.UU%$LA ];f8>?}eĵoOd^07jq*f̘]wŌϧQF;w 3f,4\f--Zc2 oϤ R0v1L%Z-& L%nΞJtӪU+@jj*?|=hZl߫%''39) P;o( O=dyF;3wڶmXwkqL& Ȕ)^_ BBBJ,[6##{ytcenc-ysK m~§ߕwn݊b/|p./?Lb~u˖:9rXZn]Ɩ$9 !Ϣ U0 pk׵W*ҵkWYv-0Ofڵмysnijz:e{(,,dddd0|Nߟ~9{1t ~ߎ1ut CFv_  N7o>.WVTSO?e-F2B?eQF?_x˗xIDx8nHhh(^͌Ӹ꫙>m* N;wAtTFZm*7>t tAh4zA %1mߋ 8mtuӃ/b;8Ny'M6d6^0^GhX:>|Sx>tznJAJqFrG aC aȲe8,r<3܌ KïVnݚ7$9W_yGgɓ;>mڴװ?cn6R0jԨzWhUԃl:ÎV[vv㎱ѣλVTDT w9lvt~ +Fa˖-rq8/((8&UU>9/[Fbb"mڶp֛oXbh4\.sٳoaiAAA%j )rAuz=6_Z%Kx啗aC_.NtS*by9Z4neX_ܘKLB?. #'' G[ Dc2WPȹ<"ojh-[{ܹo\.V [l!::F` ̛o#PUGYsE4hڷpnO-SbNwIFnK˸{x[}}k4Z/Y5kd„ tرJXvSd-BQNgMQBB̈́GD( w{7ڴy3syƍNRhM6pTk jhBP]T1/ H"+"+Zmq'!!h4'E+&zmh"<-[p.' E\Ni\wu r,8GqXV  OO9su\ó=ϓ[n^ZSn7wǽS6 !//\N1^}5\yt&gϞpth8@LL7iЊ5W3pРJ\n7SMb2wL:u7,wl6Ν#YTt>}ѣlذ^zмys jRze#444nwr\uՄ(Wx>i *c R2} 6-}A? M`Dg@khܸ1v"߬Y3ZnͶm(**bҥ >~#:* sp0"$x6oDnb~bAo0(ܟ -駍ʰm\uewᅫ6mbNϞnm5ӹfMnvMZj cx㭷AxDDqOJj [ALL atZ\.7 80`Աx`UhcQU# ޻)WL%vz [(iӈ@4#EUn͖-[裏3p~COM> l8m~7xkK|DZ DVs_EV+GC|=~<7<KA`GʓNxLxxYY/MKUUߗļqBBCQw#''~}}FQeh߾=G!99mz >>hnoSѣWvZrrrjDF׿?+V&44&_2fz&v<|ם؊{|q3e:ҦMVY[qͣiѲ%VAQ<6QOJnud&LߟQ9<}Iy{HʉŕX_9hۮ:7Dnrޞ3F`GYHLLdʕZ"ڿo;ogdу/1fS!D5kwhe˖ 0UVrQ}UWue#:z/w+i݈Sٸu'0o2𕐐Pf3Ԙ.]ZfϞz(&M2j( ʷ~+/LTTIaXwCҨQ2%W^!,<wY!r:8}FC-P;w( WvN\|ә WY4?/O[M h*m۶cc6c0l^OU#$4xhlFǎhӦut@{ Bxop!<-:.*Jpq0н/P\KZTd-*"ңvsy.\qع9s2y$ Ov;>wݹKUZѽ;{TN vR}WUvhxk z-<'cܝjْ+\J Ԡ;;zZvk&;ȠszKw :ޠ FQ !!!:cp!4<i Z'S +K+"CG0v2 &п_bߜV\N+c &!7n$>>}zw\[Axx8\y6yڿwKɣYL :-:gJ7)kmmE IDAT^e{chO7ܳϰYz5M4_WB4j0-Tz{s^[ƌ;/2u9{71 #DM]Z>wv;7Ś5k9t0;v$_"1Rߛ:D;j<8m:!Lw0Ϗ|=_Z,֛ EA^d6{t\jZ4Bhh(a9yim' o[DKnÂkBlѲ8?o(eNt0h4*/"'SSKUW]ELLGFF۷oguXZ'DQvT'o*zۭϚrKeuB_Vwx>TS#y_f5[ιs3g΢{AAًEnv5Vݮu94Cc; 5V'\ θŹU~0McbٱV s_d>z0Tޝ.4[)j%/76/?3yvRSSQ* _j>V4lmVu]ӦLyߢ/Κ($85V+B4¤H#AA~>QQQ|m6/3N˯&"<,ȑ5h2x|_;i2e4A IURUV}>}lF{;g'Yh)Ηq=q\%Uq,bDZ7+Kf:5 ዇gT+튦vjQnbcc/(`ɲe/|5&Cp;PݮּPz/!Lc~U_.Ɵn-[b/gdಸ\.F)Ez9x`ݯ=!LI}>1z;ȁ{iӦ]miҤ Ga֭oc^g%3/Ne4w+Vzo{*!R])d2qW`8IN.B¾"OJnj8BT(D>71jHTU߲uދ̬,b6wO>0_OѠhguGϙ4q"'OÏ?p诜={U0:wD^i""6‡[s3 Ȧt$pʒ_P@vvvEIѰif222 ::޽{qTΝENB)Z/ɹJSS˥vwjp8޺cN];WjDf%hZF VqXPPoǏ1v\HAAAtڕ]Vp=cBTEr5jHjzKp8СG"<, [Q( ƎeȐ,kN:L E.]x׫4Lf+0#TMs׸qh4Zo ra۱,&Qk KaA)?Y 7@߾}h׮n{9\Nv;VK`Ge*2!L} _uZdP+J=+^0!jݖ۶릾TKUUq9U3/JxDuE!y&Dݥ*qqq|ǸMk|/F fcɓ'QdbK\ Ӊ;i `ǿrvN_ʜBu_Ѭ)z=_"xK,$?74^]vYW, {zvمa7UB! //.VK!yy_W@s\X Z q:k&0 E)O48>h4\߳ǎ%9c=;B!ꏔ1ѧ/Lʉ㗨DBԌ<B hob(ϧK˩*{C8v&*BKd6sU_yլ^ Ũs[!MjԸ8͛7rL6W^s!!VAaيb pwB!]1:ldmC!3iR}$_FnJ$,,U-c)V"~fŲńD _B!BtԴSCjӎtׄEDO&7#3+Trߢ%&Z !B! F@q .0\qUtr22NyԔZ p؋{CmƠkB!B!DjT:0:ŵ!B!NKN"-!B!B Mj0B!B!(A/5`j0B!B!Vo"\XEB!B!D3p.Bԛfꌙ]!B!B԰{v]6(GI$!B!BF!B!u塪~K$B!B!DsA6mk(5B!B!B)))DJj*))]&B!B!,:Hll3ODll3:HffVmH#B!B:!'7{!CIKIf𐡄G{rrsYF!B!uBr #F")\N'O1b( 'jզ!B!B$d&+8|p9=˸;jlVf-z$B!B!Dss8vORj0B!B!J/WH0B!B!&5`B!BQ'nth4.I`HRB!B!n{vw^ -(((r~CBtϼ0B!B!hvpU.AQL~^>[~ނnjU'B!B!j#h mZp˘ @uP@haѢ8ʑҥkzI!B!BÁ@o1bhɿ. gQ,xo.APPP-jOT$B!BIoУj1堪y9.rI !B!B {Nv}7!B!Np8~ov;F!B!# 6D B!BQJ.>Oͯk|EQPDx֭O2$B!B!jovve"O( xVUUj B!BQ+|UUq\n\.(@u'l.ZV _|kT&LC!B!BQTUtrp88NwZ}`Z-:N^Gף*:ڵ_Z `B!‡deeYG\uN#<<2/v Fc B!BKtJ"j^/9ίGHHXVl6w@\U!B!4<_Ng×H!B!y!5 VxRzR|k$B!B!jo֭cĈՋӧٳg컦"͎.xi(B!BԢg駟UVQXXHHHH@v/^ W`n7ׯgӦMxZwٳΎ>vJ?Q.\w]~…}8{,Vh A=Su w޿9r$111dfftR{oή]+Mh^ys!4 \s w}wun+WvZ222hԨ_=7|sdw㫯bҸqc СCM.\XjQͨaR#i&}2}t0hт)SгgO2?oGA=;wjRXX?n.on'##EϖXwO<+W$;;Azz:1V.(J?_ͫ.϶4 FAy]TTT:,]v}kۗ( -Z#99FC!B!?~裏?='|0&Mٳ2dƍYf~SOn:äIİ؊_C kC )sÇyfTUȑ#e 駟F0{l9~8Wfذalܸ͛70x`Ǝ_ŋ9v˗/gd21{l4i§~ڵkXjZ bZYl7݌-saÆ石w^RRRJtѽ{w~'|IzMnh߾=͛7/QGj!B!D^}U p:(lSN|XVN';QFaټ?kZ~grrrl۶-|n J,SzԵg]S/ k~]ww ͛:t(ׯ.;rHf3Gfɒ%ʦM5jO'1cXnQ!cǎ-q߷jـ| :|-[VfGwuG!++/^ŋtoߞ믿Dz}B!BUmݠ( L\[L2Qt:%y)kWӭ6ɷًf+s\k{C'ɓ'8qw>ĉᅿg= @DDᨰL{ׯuL&w7FEE1k,FUt:9p , !B!DCP VFkhA0aaaBT oJ.zBޣ /*z],ޯ}OI^ ))D҆ BXXUV)SXXwy'.*IIIp 󛚚G}Tr !Bh:Y (ZLQ5]} FӡjxA' R6mocǎ,|roXжm2yyyDEE%;|ᇘ Qv4B۶m233}Gp3g0w\8sXr%m۶-711>D'III-/ ӿ2336m{n#- !Bq)ALLLAFF=hZ+M6{VW~zڶmKPPzN S|ԥk&{f֭@0G&::SNh"oǰrzcǼ~-PosI:t*W&M̼yiѢ|޲7k֬'FI&̜9{,6l؀lfĉ{,[&H۷w!))-ZPPPիjh/,!BQEGGMrrԄӯJtt|^Ovv6OfÆ Bi/88md"(([ bBA0W_}5_~9{`|ݺu+,s;hѢ&O>;n_~۷?zݻw3g:wO?]u]ĉ<y;vYIJJ'+WSNȑ#K#AyǏ-W)B!EQhܸ17ӿ' SNlՊftr..-N#((Ʉlւ4Co A `E_@5,:w̌3>=X۷oO߾}ѣׯgϞ=ݻɓ'{3͌?Ə͟Cc/9>k xٰa6l~b`6iժ{W^>{9>#ۇ`gϞ7T+V?dSNr-hR.zz+WeҰZ bbbѣCtٻw/n|,X#1UUrvK}`|.V^N #/PeXD$~!AzC 5,o|К{-9{Ι3\gQa@u؊E"Vt;n׺ˡٝEg܀}_m*? Lis_u+Z5,[2_qVfB!BQ6C\+y fGu5| X]4u?B!NE.cǎHpp0ݺuCyV4oҥK6oѣG۷/tҥ/ҾjL>Xbccꫯ=֭[c4i֬?C0t-{nZf3_~wC=TfJ_yuZ-;vq@)ط_zd}HIszY̖nXy/>[tm}/Uc8l҅\?QQԶmqr\V+xﴓsy|BLWm"s FVV+W,tf8z?)Ͳ;v ŋK,pB ٵk[.))'ݻt}w)oUU$###(&OٽrSf&Ə@R@RC'++/Fy^n{j~xj8TmMX|`$bロzAf}77g84}w_|A1cJz8;ܿo}6>YY\re}Tpr|O 'O&mn6aRSi:ĥ~U{f&32x W,^Asr0)'77whmWAg"woexu>ܮg^a?%u> I,,Ǯ]z~o幭( N-n6mҹ :^7z)Ƞ ]`4}3B QQAȨ{:$;wCB!h4\.E!88,f3&M(l`慆RXXݟVnW^y*Zz˖-^;w|?lKoF/ 5t"E4b.+_hëR5ȋ3}6mtv숾}kkkX*cKyoLiq8&ڪ*~ss!0+##>3k+&dlךlںZFz۸iiZ̙3S{ewZCEY)Ԡ6ˍ0~DxyyA" 2:o잲LU~BVUWWsjB+XRa*\RjZ)U\H B+-[W^H'Հ!Bie͛7C.믿F>}q:u®]P(p1,KHHW_}*hZ>@]tΝ;!qXL sł pY?~`YfHKKÒ%K817]\\ӡ{ZpTUU3gqdg7Q3ޝ:x. ʍ KIPvUU(4*'/jsr&,F矐_}0ZPU(~.@q6$Lqu"TX 5FZ*!.]Ps'XeF!{n-[6~A_+a' =F Vݴ4_Ys"v >{7(83}vhVW#a>b=۫I5f<,=k?iid&(C!ʤ/@xx8_CCvZ,]x!,۴in݊Xb|cڵx7&dʕHMME=;,#11~~~x'f sӭ_W?c5k׮ԩSѵkW:t`zKd#4:=ҐGƍ虖ߐXח.EFDn>~am?Nr\wũC,7x7mB֭885p}!jE? -[9uj۶SʕCm“Oe6Pڵ8ՠ=yݴ4̚R5_>#!sDj۶ǧ۽ʕJM=;cz^qOc^M5DÅ'@5NB!8Vxo|aqX޽{+ŋ4 [eʧ<pD8Z) knmKlmJaMp29ˢt^\y xL.K8MiL-"ASg kr-Ngm 62&&ƑeXYN/G\ZڷL}o wbPA{f jj RLr&H{gpW*B!G2޾}{s 43R֘mɟ=ysd}-#G`eFÎoUQ|:wF܇Jlϑe5mzٛpML/# 9kW:6QymLY:#=SY 5jq6osgNkoyXFήw !Bcnݺſ74^ɂ$QF\m0M!B!B,[f'pB!B1T`AOww#F{'cHb7*Ceh^cZT֚Jn7BB,(β,Xƭџ Z:77*Ceh^cӚKѯH$_ƁG0Vn'qT*jjjR<~'^˲Dh4Pj={* B&AѴnNT-޳̿Byy>0:6:>D"b1R)ooo@ Yv/6sKrAAA B, VRTVV" d<ƏZƭ[Y8T-޳ X,F^^Myy{9<okJryjvϣR* b1$ J%J4Cf\^,BR 555@0[`L_T*r9"""0:6:>T^/4 h wOnޏ}MM (BAѠR-fӱ[gn_X¹!aj>$:6:>T^:PTPըAĀA[|m8̝A!s}/--B\FB@tt4RiKgYO"Zխs2n9TM})Rj,}[Cf*z!!!B1A._ؙo湹ect[{2B,V 'VK71MʸP{6??a}[Cf*z~~~Ph4VG[{ BO9"6iZh4]VHxj.T-޳ I܄& i9tlt }tOY_/"y@ !!,Rn{mƸ;x q LSDm6$$$m۶Ņ ЫW/ܸqƍCvv6X,F s.Xlxj!H. e娦,ce2t邷z 'Ovr,헮RSS g8~8^|E\x̙31{V~hTNK{|gIIaݺv<2ySv٦ov4]/Yan[1jggX~=}Y3=9z msYS[穦.7ϱ`[s5;+O9ծYBinv !ӷOuqa׮]ݻ7?=z`׮]ǩS0vX}R488 621}sv-ɠT*ubY֩"dL[BS1;+Jh4ӦMúu0rHܼyo&RRR\22޾T:/{O8a"='O=5i.gλ;n ~}`=C~\^Ɵ"ɐHԩSѶm[<#8<#88 ͑1_x"66۷o;=W0 XEii) ]t  Brr2.]d0[nCv7ï^QF!00 =2d2fϞСCN,0 jjj`0\&!338vh߾=***h߾=_ޛ6mB$~=-q(,,cRd2Y.N … p-8 z]_け㇝ػgهї\Bj_p.\իW78OZ-}9>:˟;' Joc`|a/s;8wjkkh"TVVKuN]; Y:]~GF`` :{w r=Lm4w98,ٳ?~<4 ݻ˗/cjL:={9ӹ3y`ݺu9s&{1`;v,?}jj*f̘Z ? 9Crr2yf,\\L&C@@6n܈۷z3g"??)))7o]rUUU e?~< φ#^qf̘7obٲexݲ e8EEE0Cbb"0x`b$&&زe *++qY~;سnٲ~-:vYʗ7o<̞=׹[ jiʊ2?ݺ1GaCcp-o/*KoJ.^@˲xWQ+[º?իWmqza-zu|}{bX`L7\\&ba/-oЁ| /@*bg1xLTJUQ~$ddd /ZCo>eT*]? ks,,/s=׻ 6`֬YD3g6lsF9XynxQPPYj5'p&OT"i`Y#adV*ʴb)%2[Heo?Y@P,84+8$'($ORn=zE߫2#&&"ij, J*\~n<4ivڅK,AϞ=o᫯O"*)п6l08 k*tY8bPSSç# SsiZJRze]ȑ#x饗w^P\\ ___"""UUU`wƪU2( Sjח_#2筱9ѣG3͛ -[>}˗/ǦM|r0 7"-- ZsyV}O?!55`b'loj0^?nY嬬F+wWJa /#''~ `~8t>>8p\}!C"5u>zꍐ`UUUX~ _ 8a0zP(q!g5O1X#'aΜgr|FlCR$AAAxw2dH4 >pB|Ҿhg˲L 3}tn u7w̱/KjrFLL aE@@ɶXttTtI"662 bؠ6sgNaQ1y(W0P>$4 _^RO///H$5MWSSUUTh5ժjNTrQ*4Z%+U*V-Rk"JS#k iQ!XZ; #G4 !jMzᇱrJ$''eY 0V Av6l?O? ȫ}nSLoco߾شiˡR 4C d] ,B_}_wsb޼y8}4=ߘiZt;v@uu54ȑeip`ݺu߿[Wըhni-mCzz:}0%%Gdh4I&ҥK6+,, (//Ƿ~kvj޽;lJ"߭2r%tW\۷1bd2.F.]‚ ';Qu/  ƽo=MS(P*о`OcOBja盤ES}ϟLfӾhg˲L 3}̟-YYYN/<6Z:XZWk k4M~M͛1n8J„ eh;':>-:v숝;wGiҼӹM|9#;;Ǐ˲8p Ο?c6x$}=c"==t|5eKx-M/_ ==۷Gpp0 dp7}KC ׯ^{5;cƍh۶-6mڄ׃tOZb͛^zwᇳ,>obbbf0Ξei0vXaΝXnxw({T ???,YĠii;$%%M6HJJB~~>܏ IDAT'xVg}G1|XG}iӦ{8t}`ݺuXf ѷo_hfnÈq#,, ;vl È 7Pro8'NM!IbseZ᰷~jo8~ ߦI=]?T"؇Y߇!ٶw[n׺wW˯S^7˱{xϖEK?{)a; 99N4նṯ֎9M\n6l@JJ C)))ذaZɶ^zyӵl/qڰ RI>ŒBݶ [=v~IEuAl׉d:Rfұ'}[٣؞Z֑r-8ms@1)cxGen#4wK__oMO$ 20L G}oi^{Ӷ7}{±ўsfqsFp޽;ѱcG|8i)0&3xB!JXtiU.!(D"d2ep9!8_NN}^MqM"!C!7|^T$WBQQQ83OL2nOTeYTUTB׀'j_‰m*7zy5Haa!'5fy VR HR( tVqI/(,,D~~~7I_΋cT-޳/{kmsDDjXE>:6:>T^@nn.r9 J[m96}K/*++E#GEaa!@H$nsXp0`YR?A2n9TM}Z- qU"ZVr*7h4@AAjkkѦM_ 0_R F$gn$ QTT x{{Ss$BD"""" JQVVlj0W:RAAĀ\.Z6x3q qˡlWbܸJ/xvW1V V ///>:6:>?AXX]r0aŨFYY]b8Pj,',938Aj4EbnNT-޳oӧ,Z:h[8>뭯aD"}ZYnv+lqR)$dz5? qGqFFR穵_Zkͨ[g^h{rOk)/aD5$ 1Qp~`? ɖxҗ=RA@o-ܨ[g^h{r-SA|F%=kkV!Ssl jD;$eq.*Ceh^cieKǹ %_۸ m[1/&L6B!Ḇ֏s-B/q^, 5B7B!Bia 3. jy`̱Z !B!b;FZЇ] Zqym[`L[̽| !B!b[0̳"0nl|!B!BRsckx I\ jgS=5B!BHSqFKgUrg[>zo e'p0zjX,$|4a!B!ͅ?Z,=5bl=26KQ7g-BAB!BHK{AӒg&&`v8!B!rP&J%Є}_<~=[7*K.EۨB!B;(T=NO9~֯8z>̣׏!!۰qّƮGT߾8S}oN%ɐg]-lk߭ܭjY gjָ !B A ښ~)fӧS*UJſ? .al0UU龤n{d~KC{ŋ#9#95/,K˼sM8־=TR_7Xga>ΟǙu%&ǪT30s$Մah`]qGccQ7p{IzXVYO>A!p@ĭ]˗}͕~:>q#-Zd5@ qgժRJ P/ė}W{n{9m^!BqW~)N>j;uAvj*RRpa!^+ 3P~0%%ДaD>4^y9 *%׏7|Ke FVUaٳz/H/g|DϞeeɧ)SmfTZZR2`YT=k0nիY]?_/{IzXVFngOa~zA_?5W`(P@S^3'#Pa0RX[gq{jt}m,͸r|i|gݏ۸8p˿/"j d2co_Ol0-9 Qj58Cѣ? q`ލ;W:+ 2 dam[ yo˗ؿ??evnV}0z\nV@YZ-O{jjp Xʟ]z 3g 6[Vݻi6+VR4+k}ݑ{DFZ/B!)))d`YӦM{Q_-<'$ v}y.XӇ' Cّ#>c0_Y9UQIMmTm8#gDݰA [ڜ;j2X>>BaP a:3^KXC_{Ed/XNTƢfĥn5ƈq7-ͦ*n._^6?;!} & ~7ذaLbr|+3pF߻)nd 5'"B!ٔ)S86qfڴ 8C8=p T§cGt xoorii۸Ñizˌ_N]uM@?~~'fMį_;k?N/˯W/qPnzw}]:œ~}|pmMvv[SSqGZ`y1Ο 5s&2BBpz .X'ϟk|d2nt6xEwW꫸N7\a} /ξ,ܙ%#OT"i`Y#adV*ʴb)%2[Heo?Y@P,84+8$'($t{ލ\UB!BUg>ajD35tҶ4=K`)oqF-5!,-|[['snL8Ү~- 34-m{e_>^~6]n~k)泶o2O;~Fg硤jiu}"/7K* DQјtyE=eyY=UUEFQSJJ!WBêU"Rk"V-R45""-p.#쀆dxG5A"B!40S;[Y Gg棱]~&O`dYMl;wBSQ8fGc+sӸJ, !B!&5cO'r~4vu>`< !BqiNkM`\ N?0Mtiuӯ;\&M)ʧ>`!B!OdrE$1LDT4&x0_B!B!QB!B!Q'B!Bq9N(C!B!^0ZFM!B!BԀq(!B!BlTx'4Gr !!B!BL;dBS^ f2wnN5A"/B!B<@\>\^^ ي& Ӹ6_k59q'x? AB!1"7n@~:@UXK )v'-76_8q]֍0ĭB!vXqg:7lj˗9v,"sX^̏_s&pL Nj8aaJdP6(ؼח.kd͝MDІ5P%OB!DO= (E=xIL/#1UDN_'W^}a?kא`jÌ(.$(.{vT8VgΠ)h ]S8 ^VqP;!B(b1 mNş3f GdX_dg#'x{#?\_Wu۶0uq@~HڳmJ~>aCsr .X`0\XE$7kaٲev53r !jfKZD B!f.@a>mwRi8d %Mi[D\ TU]@HHg B!$otBUM}& #xy "<% oB!Bl~$#/OkAܞ#fY5B!B`Yo拐# SxVWz&B!6kA'싿.zAB!e*cmZҺxV `B!/[Q`5p`/0wFB!B!ʸ R}c/{05QG[B!>zZ!kDLhK!V4Il1ju?Wv>*@ B!s8w+G--TD7Pu ]; nR<0ȶ馾qai{`H'MC !Bk#GGXX$JJqϐHh߾KKgϪ_Bб(~\|%먾Nf2f(=p2įYP~ r[A?w)B*sKʐk(w ~ꏋȚ'34(6 He. irӄB!M"#c EFCii(L2=zʼnǏGNݑ #G'ĉ6w`ƌ=Qu5Ύ?<Kۏ@|a钯ă\Y6zz2v p@я{?Y!!$X\W^} >c0<zozVϓNw#x}yMm:e횟Z/'0-9 X[^Z /XF$88\;.vE7r]bw0|p`e8u~>[WTA㍈{2N}:{U @~=1 ju'BE.+8s(?v  zЮ]T4ߝ;7Ss!J![Ww eΣ }7iĽ=1$Wg0-\_ 'CYP VΏ>ᅥV~oD.n6ҿa @?6*;;z}.āhp0cBo4 XO@$%o!G@bOoSB Lf2qntt{{d8ۋ' oN;u,~F񏿡p0`,+ 2/[V!,˶t @.w18W~_eg2,mf9 /B~o8g!رϿF8vl?z`0]ee9423O 63?<&.]:R*>ǦZ/"" VpFt| Qm7:6h`r?mU {> IDAT`!#A8.^anaD7^˶~`>{hkQð WȈfյi܀&E܄8'xyCZ⛹-V_{>;F/x !(+[qt{acpn0Sh ypnaef]Ob_qEg6GOx"D^Pj-ac/O\4 ;EcX7} q(+@6*{1a_yi3_M[T7=ǘSF8@1|sUm..?K}o ]B0񉈏O8?cr/Fdr\jb-'e1fЯ7~_n|~~BĭYOf<ʏbAZv# 0}m)}qrgp,QuϻC4ڦexjnD   Vg7u6HF |CQUTo0=6A)+^078/ W;&y@/d|C S}0',5"B<=726X7I>~J=6t!C*P>jVpfoӵ/1jb_Χk`a7OW&0"`6uq(k8vR,K7tc1O~"mey LjYuTϖM( AhHLW,i"m( gq*WT 0 M`w Am0`Xt诫65- .YOι+8uA, S4{/#mk`s(B!dimC/msHp,NxIOxz ,:&śϺ_W|ҿUQv`[ػK)VFB}o3 .߬_~?[[سb@]@%]2`$B!Mg߾a>7Z!C)CN{Ega; HdR":eu?@,]KV@Wӥc64Q"ד|V+pv}#ur<܉Uz*^1X t}ܾ|sƫ'Oo pv10ӧ4;հ4&ze8Ņt kouwӲ>>|ȿ|oLB!-kέ'' G,/Ox5A"=O@ye 6 Mw|mLU7_]ZoFɍ<@pt8&:ӠD&Zks̈9GOK6e-ip}P j|3. 8e_Ds qr<жk;^c΅àCb<]{3ldΜm/}a o]>NEWԵ2j+]|Z>0`E=u0-B!ơ_-=b0;᭻F^~ |_>>;FTD4};vo2+ !P~W$]7?4`:7QXQ*6OrT`ݓ˯.M*$.o?;FF.^;^^L B{:K)A *X}Yڲ*PTR_8̧'з~Z Bi6!`Hc^3UkuMj`u%,u p`2ly}Tu}X"&.m1Am۠PU\n,*> g.l.ňH GuI۶>FAxiY쌶#W}ptEe M՗jKHٰށF' 'k[ GUQj˪o1!B!yX`!_?Aʇ CA憃aP[QͧUk dZ%KGeM_ c}g.yIDtmE9OP*p)?˺ K .>;$]WJ߸ˠaDv3Jĵ65l_zYBU /{ͳ!B!M:0a pu#@Ht8Jӊ/0S! eyVЦ]$ё_>nzQ f1k]=G8Qqݳ3nd~nC] Cz2we :6`v}C$P݇=9 pDbu+(7/l޼_|AqL<}B i ti87y$  xF B;6lcD+1i\/^EeMexb«3 Iſ~{cԦnCmHB}>yzb F|pS%vGDTzcfLMd@z>7mGcd~;9]a'7qԟ)oP:aOODPTC@4-ʋ|XX-yqd !**ۡIqqK:6ݏϼolq &1 Viᶕ7F'HsÅ .аf7e{{0K'sB!4-[֣>>4hv~2~T*%ڵQ&tM6IK[^ƍl0 }o_CF.=55U8th7__Z:3n#8Me.]>?: An_c5}cB YD|8(b__ӪK5(;pԀ9y$TyF["I ~Rgr c'0(L W MyBǍ@oV^4 YϾ}׫Qla[ًQq2AkӻX&8ՀifUU[t/t!BH 6m>%%̑#{#S8 nm./#9y yy8rd9v7DEC=Oر3QQ&C.Azo$M ({Cee,~BqO@"*(*Qe2K((PZBg~\4-MGw}w>Wj=_РA$}ׯ_ƞ=`Ĉv/_Opxx ٷO-^y=x6_χ:-{#~n u$<0 <B>~Hq7~jx4^7ZZރG07 SᯨI$Ohq1 $?Z}קtw&]*cR*Ji)@DDTܺm~k+qYDEuh͛J厰DDEJ:u"#Mz -ZtZuDjҸKΣ]hߩw9ر _~96#3S˿74]&>55EZ/o3FOAFƏF>⟘1P_-IO#/QM;<~ig8;cyL}b:-?㷒ty6mh4_71}QǑ}ATA>Ձ׀!rկ_Dv])-͛ATT{tyҸ!C…Ӹp N8ux2`%M1dˆ"0n4xx~dȑ姮܈F_>m;+"ՒBT]οǣGxP v8ep<#ʊ je@i\mkpǭHq+.- `vk SOjUR}:썬CDDDDDB5BCAT…3FݏzC};K7CCPTTc"44V$%EQ))IN-?,N˻ݻ8|pyy<4yj~ZʗBs;7l6Wy 1ōJ;g^#or E~%붶|-b#49yHq1pq*hrp/7<#QOuT+|\Ųe} :6oG|gHOj4}vv&֭[MEno`eNStt\zk,µk`\?$'źu5˅tY_MQVIò,p_+#|-k}&g"uY'4Y8<1m /U$p` 51w? <& ޴nko2&./Ǟݐi;%>; 2Dl:S8= 瓡d@ ~rhr/BR*nr7FP)27LrW{ n*w[ Tx87"2E*"s%]}˫ѯDDDDDw#o[wey8AAT6A͚pގU7]! 2ʌΜͣPDϯ5Z3?Fzzy}xT?ry H0tOEԧy8>l-wlذ-[7lΪ4e.L3it<56gPvo;h]! *ʎΜͣhpVK».F"99<>T0\(|>Dd ;d=ZSV43R3lQx`ιswV@Ev]x 4gw#F<ÇRV)$""gUQր{FsZY=xqҸ-[v#==Q!83M $T}BU_4pe੧f!,,QhfVl~׷bbয়1>{z:MCxx7CӦ1 Wzz&&O~AA? II)S("!7\h|+bb߿ ܚ (]62DE wK 8(Z\'$'&ۻ%:`Ҥבeqo&siԯ\'u9Wrych4^n ??޽0tԭ *USBǎCafyg=i)޴:݇ 9z>}ÇOo+Ԫ˖vڏ=Gӳ9{`Ѣ,ޘ 7n,5& 5B~㌶A=!5BPP}C&k&MMoo,h4Xp5Z(4jo199yHףsnЮ:t 8jv8y y& bm)Sf (||Zat]]XYc|mm$|psNbqqXTT$jZ,,, s>ESADQQ=k4.;4^RZYI m}ڳFӄFqٲF˞9)A{1l~m{Bl"ԼV~-^'d2_R۶}]*>R~̮4[j*枰+ϭ-Z:Oe+Kjϊ۷Uf \PNsyLZVe9L'8zQ.Jqf1r@ZLyAWQ<'>c"]%E񜘒h'OnEXPpJ>;(Ƣѣt~uZO,X՞Gb6O<==={)s,]fukⶰs[ǫm\PpJl߾Ei6mhp4|mkQ<'sRZ|mǞ}2??Q%挴-__ov4Mko<6qˏϹsbnn'bAAtV={'x%O'wnCܹ1ߤ~S_}sx>śbϷVEz鰧7v| n`={4/U[͚Ԍh^ߣF0/Z?? te*:Е}85`(.kx㍹үDkLd_:3??=+rr㥗&DQĒ%keڵgQ  IDATQǏ'azEqq 죘[ÇO7o8GI[ECX;_c!_7>|xK ڊy* ?8zȑSHK 6*o?{Υe9w8rpv=e=^=V{%"g)%,b ZJeԫܴnuC0`@e[j@VM剗_~B 4-]ؼh"QQ/Bh">deO?} m67fxZZa!Vm9s^FӦ sf׍%n݋l;T`nsfΜ fn4iQ*ũFI8Wҵwhg ?/ޔo\^:V{y[T {j"6v7w/_3])w7;LLgxyyos({(ؾ/ooOt6Z=hժdWH LL9V.Y'BVM?|zu;(-2_Fh$ o k7lm"gh޼Q˚܇Ls`qx'nj_Nw7G;9yxuX-}NXCǥjW^i./I=}ټ4ެU__o3T֘R)ѷo4`۶ؽi]Q{bѿj KKǙ3ѣIf֠Al5z./+3Iݺ'&5;}EO,i޽}"!SeخVY9OUʳ? Q{ @PP MgϹ,GήǫjyDDXCtB!75k^ވicL;d֭="nE F}%%7Xo,UF 0MVfrs~}y>{m6h4 s=۞ȀazMn|^3 :ooOذZ]AK(/k`߾~/rdի ,xui:[YÆ6 _Uke@zzj'K mݺR=GG{2FZaW;{b%uU+]=zu?7m簰N12nLպu3cRsѧXYrWfܹO?x$-[69u0|?"uGkr|mJ"## o6ȑmvtԩ55 +ttfϞsiY㱽牊ss7'U1|U| `\ɰa_7x5jcذ4)=FGM8J:Ϝ1 )fXHyqvC ٙ3?󗐜3>뢨[7E_3"\vCox1S^HȍqY\p(\xϑ'N2M'K6'y<2s}7Gtlq$?+;zîwk PG bb:iS{g^pXo 2vOR{?Rn7Nc>(ɸy3 v̿7G~5jS1c^lp)=fGJE;7ޘgwG>dJ"AA0uLdgjB4iGy>9f%j_W+K IoK9OTTܷŞc՜gȘ`WA&?~$~}5T*4͓Ołиq})R =6Hf>Y2ih,^fATQpKعs]n#YisfvSڵԦDZR aQӥKӧP/Gom(xxvxAo ɰqb̟?[7JDHH- ;wC]o0dHoxxfՁ&P,_W,V+z(*B&wSjnZR!sS*wrWz{{+ܽ>~~J@@_@ӆNvQs'Za~îUW: FR9DE(M(>se~/AVz-Y[,[Je[S433yȾo{l~:Ʋ՞u8zYǞ92Ҵk#m3 {(|ր!BP(CǠuw= Kw}T"{=n ۶mFF {w]Mc="pY!",YVXj1ZjWEE;u{$`x'W`͚QnBU$%DQDnn|}`Xru̟Oqq/ %4nXrq̘1 O'JRS/ggb3zhKǔ) "N-[[gZƯi!.kx 99s _;qi?= Fn2埻V}5ao>}@ oۇObWPG@KUO7Lvt.HnrDwɶm1n7J"6 l۶YW2yiԩ/</<_Z6c+uFͱ`)>z : o5H {>3g x`֭-K>"5rqitS7+qkdHzM #ҟh~d(BPBۤz@薜>).#CAvM:uq-kdS'\("22 qq 0qXvs]ϽV '/0&FrWi8k%>:cusQ%!% ٰdz;oYhܥK)X$V\ Q! %V/_-VE4-b^M# @;}>m|/-1WXCz\+##jWл}4Fxx{:ufײs] APBoIw85$=&<Vc->[;Xٝ~9(_ZKЪ Mi=TJM)Sܕ]pV)U~?<=x$E*"s]}˫ѯgO>MIuO2 }`4`.%̭daOk-q02d$Nj21nzYnncJDU(s>qzs1Z5ؒyk y `~îiaTu{p?;a¤'pyFߩuX~Y*7% JB1lѯٙYꬌ uNNXTX./kԲBZ)id\Y~1d2  C @Ń% h pkYao <HP,-tInl-d -mSkSUyxCMfb%`Gg8oQc Q 'n[wdsIUK kVJJ_CMTAj UQi㉈'Cۀ!""""6`6`.iPzan5`*ۀ!"""""""Sj6 Qc s23u"""""rb\E)ib st..._O$T| ѽoA"sJ)ՖtH&W?ʾMU `{b*c0DDDDDDDD5`eH^ uaXCDDDDDDD.="""""""r9խm=eZO5"+N)SFaGGq~=\ǛrD1Sҥ󌆭ZS2_g"BLv?`_AG7~JK${`(bɒP {V,_ fB%!8Q2k8/OW_BE\~iiWQVnTgc;د8` IDAT{6ץÎZ:!kAxE<З%"*W0D6ww @Z5dѸt<^xq'#KxxX|L^gi>/Z77[ٓ` 81y ꀿ u?gf;q>rh?#za{3k_$-Ҝq0!n!i>|:>QEg ns{xmƍ?L(^@JJɱ_;+S0mXKJjQmxxv[?/|WO>vFc4.E(v-C߇K~&C`wH}EQvY#0fo--RWnĞ:ZzW|4g*Di@WٱU%M@Q߅0U{RuQXX~75rV6]A.W^nza޼5k,~o4%KѥK NNDQyy8w4:w)U("聾vv-}'b_Dv4xu 5@~nDSQ~18u}t8'Q Q:-=/Tmu'O͛7йs7/bKycԨX ߮c55CBX-͘8Y]\Ju[K3jhpt zII'aqM4/GGtKN@uH5 @LӸna;h}rOˑMy@_أ/P; zYũI#8 c8R8m$"N 77%5kةF㢢ZҞz;RB.=qWŒsA"tJR^OUS w@QF4];pq $Eqf6&ys, !< 30j ]…sЩSw(J3t)+Vʕ!"d2~x<6lX VD}гgR۶ Aиq3ܶk|eWzwAԔ[G8"@Yk@] @}>&Lh2N4FFc ߉ؘgP pdtOs jRXCdNG.CCa=ҥ'ۃzv](*v0@׮ s'?g4O)6 _CEo[{^M]w&O7M**D.Wعs zo~~J@@_@O~D(W%Wd2fPQ˗W!"_҅ӊ5-OgW/X!CF"883RnMıO۹%NggvR<4npZ4fMcXxZGcu3λ q5AMtd&nK⺣˱un0܍u:l;RR< ֆQP\T )VF.=kVMA@RAPf` [k|~vfFaVf:+#C};; 7G# Ņ",PkdE"Y8W_ Ll@WFvt5`-b0Į*?z*|6rq6;΀{yOp_jR$BC"--GDm*;i7.BdVϞ}Zg6P/YPPճݳ.݁ .ȤQ"+L oS>ԩ/OMq@hh_M;tFbQx{b8r O~6eM::uSe:bb}1cG۶7n\_/Å gQFM"""Χw> :u4oBQ1B E/ۡE9+7"7  YDQW @?@q}oBrNƩo X[5EԲj)Scg.cGV"f>?%涿۹5~>m\gޙ 85 d8 unfu7.w-]ĩ3pE׵]3N֭ll>}>:f|9w1oo̚!O>9FcxѪE_VK3A""33!!u,_z)uykY*(MxO1v$X)ڵwY?~[m""{cΜŸ~rl#22 qq 0qXvի"::-ǨQv6,Y^*|OOH;/A÷E3q("d0dmAn!{!*H+>+|/=:[rZIO)l$NzG &Boz̥3聾vv-}'b_Dv4xu k{׍h*u[HK; 17ɂ7)*;ڵ}v{ڵwwq֭l̝ oWapE?t9TEÅ(X\DQU0DVڵ+_ѹs(*t7~Q,^k׮ A@FZwS-+22 mNw.u˱m;C4n 99]+NbŊELfs>} F.]M6$л > 9&Ƶo~GB^2@A@@PeHs%!!@8{F49g'@EPi:o8CG82wq/HۊHg݁ZKcÆj޽/zWj=cq^qŨړBDDf ڵq9!52>ci|hh=߿EEj۷aa^sV97W=+&{VGH8z0a. K~c0RTal^WoǖF &ԙ4\遼 3CMp럠/5?»etZѰ~J6V3{Bs;7lzMbGsgWԭ[u :^}]>_k69[nn EY5%\kY޾Xb!ǹ?w+}_}6|к g}\`622SʼF|_VڵCٜwĈ3gr _oZT S! r%CY+P@H29bne8 ~~6[D-X[gqH*D!}nZ-1f}ŪH6A,i:0$ٳ֬Yq&Co2nH?ƌ`,1q YL;P)oy^'`/e+C{i=ZRu)5r7J)e ]pS+^J??`? / NO&Q-U 5̼aW*DD"^ T\4.c8L>[@(0ړ6jnY#fMGCOëiCߴ-KmؚRڳ{i:\̍|s{XeOYtjc>U ,'KÈ`ػ~îiaTu$;͛7!$( Rd2dw Xѫ~PPfxs|~vfFaVf:+#C};; 7G# Ņ",PkdE"Y8W_ Ll@؛NW߯+Cd]0{e뱣ǹu;RYhO (ξ &1oN:Y=Y>,*b}qb>Kn`ِ>lY.\({HK{uY+3uַmOOT^o:Ke~]eҵ"jv؆)Sfફ\}u{L ze Gw 7ȑCС |kRS3P\|;v︣][>"z>8>k.ǟ8` =;'PYYx<"-Ξqi+_ANпP=;蠟߈c~Fhh8F8~(=F֭vx7VH®]E~CR !صk}4տW@Ra!oj@g]ppXb z*ҥk]T*Y8N0gBuPg}_6?WA IDAT-9+6"q_A@ⴻ"RXxqq ǷFIEg͆o"36n\s_ 3f̙?Kp 7mڵѽ{ f_3vk ^7L&#L&N=Lw͆={cĩɩSgaҤ{KK/: DDk!r`ݨkac'!00ХKg^jV:))}Reuo3g;w߄f TwTu_:T_9n_FM6| KY9 $/a!Qyyh۶cZ^^""k-סCT*܀W::vй|=zْƁ9ŋ!PTHM~exٲ{rޑ]l0DnڵcLuٯ`|?&=5kbƷ s.VرOAx*wߐ622ށjEV xT?qTX2_-H\>79+6"ycS']}/"q]QuàVko<1p4Z˽s(,,@۶1yCrqҰvrw8ݵ-VjĩXv֭{ ;w ︘?8,#1a9JѠC==9xr8o&"" /P9f5Vu5Hci5u֢!@+ht@U.P ՆEDh#cbtQQAQ1[10?vRS$v̼>սŇA.84R;?K+ԣL{Ŧ;w,as=n=]Xl#HZH;(k_Im6+;͛?yI4Fm\Uv8%*Z^yGIJm6VMvvMPQHq4j>Ķm#>6QAP3 1ppAFؖ􋌪BCqQXVRbWm&ި[j2 UQm1 &I0B`AZXPZ3y!r]#^$bĴĉS!uۄ*ˋŠt%DDM2WS1o:ƽGѣ |BoojHDӔ;_K78lCDԀmՐj""v;`0DDDDDDDD~U9C9C9CDw^OrW1"jXkƪjE` i5BVA]644T F""bL‚tڭJMMߌ;O;99Ѯ|!;{;&@&5>x9t3J EEBcYIY_Qn,// zJo5f(TF$,&`4WUf% Ph```~G5EV,>DDDDDDDD֐[]C;`*.*BeEyc! QG A""""""""3>DDDf:; """""#HD'`1# /8wl/З' omďoBaO!(b """"j0d$" V/g~5H||,߀u*g';4"""""v(--JjSسg'Ξqi+_ANпP߈c~Fhh8F8~(=F֭P} 7܄#G!88'C._-@^^֮} gϞFbb[=֎ti_~ҍPT Wpŕ~ 산]󷫓iPPC0͇&: q}w3NY'_5 @7com %""""">D$aڴcc9} +L&#*++pd{fgx1i4>xp뭣d|-6 78?&ƍ#KnIJePTXf9ŋW"5u֭[qsڽl6 .s{)7܉+O;1:>\WQ{\>DDDDDԈx v:`'aZqOx+!l6_Aj/T*:zJ С T*RRn+aqgJr={}VC߾yښe=ީCC_N83fνu'NʏsQ zc/?ǞbEw" y-P5 """"";`$B; A☗:Gā1p-vruz_d®]_mveZ :KH }Ɉ{GbUCQxL#j \VfC':nSA\{6pEi" ]ֽӧ@||"Lh4С+rsO#,,<^}9mdVz6qqbvDC݅e6PoKIb8lز+MC,M"""qq~^jy:.5c3m爏FuA Ԍ;cł| \}P &%,"P\Td,.,4rɠ7VAoBhT[Lb FsPe XPVTtZ3y6!^_UA!r@~K.S647"/q=z^ieDDDDDDWʴ}{v ڮQDDDDDCDDDDDDDg!"""""""3v;`STTGDDDDD4CW?҉C9C9C9T>_Or\*q5# ¬ժi:Z V#h.P jCCC5!ڰmdL.2**("*f/,(@Ǯ깩l6iq}<'g5ڵQ/dgoG\$JJwKMLl9ccju@5l ??WTk4ic}QURTh(.*2JJrcyydUz٠7[MF`4-&d1 B2C,(XB+ k>nWˬ CDDDDDDDg!"""""""3v;`0DDDDDDDD~"""""""jw,^8.g(Ǜo.~|s*+k1gLp=z%KmKTwl6`֬Pպf!+,X Ǎ;r^OGgM=ZSޠwQ]!rDj?щGf"+uKBRC-zb.=6rE1b,Cз=Goߛ^Rqju1:]P;{%Dn':>j[o-o<&<2m۶CYY N< |`TT):]0@բ4aơC!n 3ϼab%,,>F=x,Z#a6j^RDEŠaan P0*T""""""j`|՝/:M$=XXi2oޣ@ $$qʵ^c0L`޼GOgNy=T*j5JKE5{AK/IDDDDDDM+VzxǸ 6m6RRnpL5j"֬YA˖q2e=Ww^Gw܅kcʗ S !? :vZг 3g^}uMΕQ&w'd}ur*q5# ¬ժi:Z V#h.P jCCC5!ڰmdL.2**("*fs__<_]sS)<uhYv,_wwl6Tro=u֩&²eiDP:Ml""""qqT_گQƝRӨ8v8۶}XhZGB͸>6[, bZb/3J EEBcYIY_Qn,// zJo5f(TF$,&`4WUf% Ph`A ֚}3;`I~YRrRPzd$/""""""j80w*5)8;:ib޾JDADDDDDD }GDɓt|mJ*c1ͥu"]>560` awS֭G()m7cmuC^ ] e(oGFQLVl6!?غun/ ŋeСCW|> ӹvؽ"..NV7MԜH ՊEVk ,Z 6Ijb·4a„Y(**qWQ\\ &Q6n =zDppW= 8}IN q8p2 РmD<l%`ժM=:Ѿ_ۜ&<$$"!!>VJ2s?v-ڴiӞ(6cVts]HMȞ?~KE&}H%uӺmq\Yd2Z'ɓѣYJa$+cXܥ+u̹mrΝcpc1ҵw;IJskw\Ç~]#6zl>t;:vuZ.[BddOL0 %%/>ٱc&N?DF# @8uH|&>U>*F%Qe~?Jl6^ziR#FLA@@G5+o|UN Z={Iۺus?[Ra."#c;>d+pUon"\pyZ{k 'nQyDDuH²eG`c.T^{m Jo߇QQ;N_쿮TZ'P͆{aÆWPP'ގ\r񹓕eeQP6Ӧ=/Nf118x(N<혟}{f"-mr_8qbN؁H,\\q+3u'LG7q5˺&͆cصk#_sط/6ի}b{DJ,_; ]oz[8n"Wb Рwnط/ӱ|II ѵk}L4m\QR9%&w&O]K7}(W~buOs2;Ώ·no'bO_s}Z:=bckuμOb ovΞwLw>%m?PPPފxtXz-1^/5ԹULL8pqde].-- &L@``0L hhc`gɓg yKxx0Bq)DGGA`yD$Vy=i\ 0aCANu5HZA tPM`H6,"B ٜ~ бkzn*5Er_/CxNjk7!IB )iau2w HIӧp뚏#Y IDATgAH|P=11PUuLQr)QQQ]ǞbEvif0wL/ę3gsRg?H< ɸ?9y0~q Z"EVE>uOHHܹp]#\I*}Y#߉Gn+z#u՛2q#\YXz ^{xZl=""0q wMn[啴}r'1.MwmXF : $IW.w}(W~bu\ %'e,UzBB90_ Wqm7ILqq),X>'N1? w,ZwD^^Ka6eSѨqU 9^oiy>8ݺ݊gCVcӦm筊|DF^|%I)IKl}+w̉􅹫WoͼQߥRe\\JiiY;(\ZU Fעkd,^1ߗ}qP7ǏZ;Gv)R~9wz<V}lj;] Zĺ_uUϱ/A#nD@UT.qqDD0DF-[`DN9̙֯SSމ?C~ F:t cN3r'4(:GEE֬XgμV7\ٳԹpoQ&ʕBeeV@Zz]LzRfVm]Sɛmc7M0M]y=ztʕ`4p5k^GշxSWǍX)k%ƤIw`Ӧj]z/ꓒĶmXrǜz?~}ıHoٗ:9ϛСihٲESàAw#::<q0=*\|bV^32d ujC܈n: )msرhzDO<"o?… Ex'e/'ps,uKj[oIVg@lHN?e;][CZ#'N}VzM]+c7b񦬕-QYGAA!u=rIIZb틶O,]cju2ïŐ!i?_3o(RWoK2aΜ%=F}w6*)%O7Aޣ^;xy|>*ۛ6<=~^ =#غu'`ڴ'q}V{_?LڴsHϷXΜxJJkӆ/Դ5NW/FX/u,+v[Tz;v6$iד^e.{,kKm$Mۘ.Moz}܈R= pWJ]^֕rM}S *μI]|%]jy>@.:=]~ɒ1u]Z7՚Zݲh>DD>kbƌɼ!""|7HL: Cii9{<ywO¿x1FDDPܵ}<vzܵyyh:8>ge]oU\JTٻrɕ/=mjG[ߔ^xR;JbuM rJmjŢE+p5v- "j4쀡+#<ѣɝ(-={}8!?2ƶ;pDGGbm623a׮JkkPTT}>Dv ǿؑ\_,X,'$hz #S#f=#w,ξ}ذF^0w˰g'tHv#x?<_~ ?z U~$Ҵۻ6lx1qx9픫'弎'eM J-_ۋ'Hbq̗eeQP6Ӧ=!,':)5O.a}>][-u<ťK!WH1cnw|7O~5jedȕ+z+\9ؓ6vM5._Xy -[8z ? <,X#˓zBgӸaVjUX4VVc Ph-kNF TPmXD62&F9cTjN֮'uYvzoTT s""je?!''Ə?nAQ :YY;R I0O@. bӺtݻGTTDM:HIӧJÞoOHHܹp]#^'=|W؝-))C#߉%'d_N7 $BP7 iu11PUu *JxX+k_*)i~q bcES)0s/INW}Qc\._%m X\Tr)F:t /!~q3N}ӧOB^Cz+\9SmJoꛧ,J]IrǬTy+-o~ZZ>,T7 @]wwKMLl9ccju@5l ??WTk4iq˿ʨ*)*4 e%%f}Ef2*lЛ&Pe0`\!T!h,@ fhBH 5Gdudd8rs]Sr8Ǵ<}Q<-+}z$}tGO=3f8-z F J¨QKj>CqRV.?oY/M}Q|y"/WΨQCeW099s%DhCW3&CTHMȞ6Iq(,,Bо \P|fϞ@ ;9ΝcѢ_0/'ps,uK/}됖I33WU`ҤQqj<Ƀ藺l|bO9#Wϓ|U<ә\=e^hH3`֝iӞ}ZmGy+իaƌ ,; Bxx[92oYo%qշ˕v>O8/`>h&7t}rySb͗)r|̛Сihٲ裉DD y=X/"z}E)ǓR2Zb<9we…ol K!Zҟz4nt|NvJ\=4/O]70'Ot{ǻ|oU}|=Rۡ$%{Zu;-I=VR_pcOɶJ\$6OwiO1MDCD~kѷo} oDNPZZy% }0XDDԔ4C͗d5_;̺9o<˙ L | Q}KW }0XDDԔ$""""""""?c ɍNʗ)/Mu5F\M,:DDDD;`芤V'C)"%_! ju2by{X\&p **aa;g`ŊZ9rF=w7+_%l |E1/l _c"l6YXNSe_1b-s<ʋ_<믿cذ>|v̙0uظSGY?a&cĈA"??_}+~\ODDDD0tRTu쒓#4;BC#5u8g~NJ:A۶x ؼKU0zCu@[C*ѣHwEޣp/yF = HHHţ.`7~v}1V A&BQQI4v:]'GܮӔ漎sYș?u̚u/Oш -7߬wԇg}?X[cǎ$;Hb/܅Աgֶ9G2=r8n} 03 Wo!Fi]rʥoZh \s]a&;Ur,Sl!՜9/9˕ԶQ"YY;PVvqm0m/ABw8 ZSf118x(N<혟}{f"-ml\{† `?&N=tΚ_8qbN؁H,\ܱf\_kAQQ "**b:6 ǰkFBRNS:JܹVgsرGv1r}ذF^0w˰n6gZVLyY='ODia<ܣXCEVҺ,bKٲѣ_X1GJ1]OX U7oj>@V:k:@kQXtZ4@m`P*@ j""11Ȩ>ytڽJM/tCxNjk7ԫ|!4w_J+**7|AH뺞:٧ܹ3/gΜū΅J̞ "3ᜇ $l>AP9⊉酪cPTHN܂-.!5u,v8Z_L.ñ{I))#qi l6/ZmG@eʎ@ʦLI =z|'Z4** anAI#U\r'% < bJ_:t :Cppⲑv"".;{;&tGܸu\j5gb۶ V @ybl ??WT5nQURTh(.*2JJrcyydUz٠7[MF`4-&d1 B2C,(XB+ k>n/zQS3yXhv>*s IDATl6˦zdh4j\uUfμ[cރN@nbPشi~ytG!!0/= K_"#Ñx}1N"&M4KӔ#j?d/u8Eiz;w|2-/Dhhpi^xZ]U.3gl J○OIY/\_juFjۉ#Htr#GddV^G@qqf/WGf)YOٜ78 fμp EZ(Z F渻B*.9PTt#EE%HLlQڴ{cl>Xg)nli{{yy%Zq;_L[B2&uY.V[Sr,+)~ömb߾ZFnۉb B ΝPYڵY&>%nr6sX}:̞=rbqə4iV@ee*+reF6ΩSDF(((hBf7a;MKx^{m ,yyy08|:<2ʻ8"*+s^ ~dJb߻FF;>:k[BzH"P|E))QEE HQO9A# x = H (A@H/[ΰ͒lz><)6w>3q+ tʔrG())bŮ]96ݖ#nºua6[ptfZP95U~-u} =5˖}>ڤnJNj0Dn_FVֳܹ7{vF҅մi 胎nQ˗3'[gu \P3+=6aaȸqq0m< >렎yZŗ_.ǖ-Ѷ@4i3 O<G]u7f/Joy챹ˣws!1RSX9TӬquHO11]0a“+e}ZeΜ)شizᦛƢIj rjZZo+[Sh);/DDDDZU[U{Hsq]i9-ij P{tL0}tS̻R]ZD̻Oׇ/6oO.rͣRޕWUeFLLj;TNW˿mY򢶏i<ߛ>|reѺݾ>!DZ--PZ49s~]5G[>OXpf͛y3/u_fѥK{Qۙ|ey3Z_f@,ey`'`…ː5`XbbO!-|y(0CD^zjP! .x} 0DA.ڰ(-HDDDDDDDD Q1CԀ 4d:Wڧnܹs.§n D-G~w!<TrO}݆H0Ԡ!& k;+WŞr_ +yj0BOޘ4i**M m-?ӧdϹ+W~K~{Gcժ_P7W}ٖN&N{ /CQQ3|l\i_`A[TTT`Ok;+ r)l\TU;!11?ٌ6my>쳯]T|m_ŊiYt4kSlԖ֭oO]TTZ:RʏїrQpaɘ2~=_} Z]-(- q-0aE 9[CU/tXp9 kz; bcSHQʗ\ZoGexywWq]CGOū`޼i.#6~_!<<m1b :lQqF4xthӡEH-`~"l\sM>/]Xd5$kf1{dy͈z WRz} l#/Oo~0o еP< :N1_z}Jeܧ O9QYy:N|rRR2w'X.zt?x/k Æ=ǚ5bǎp3cн{Gv;e>@XX(fϞ,+:KSyVnĞ=!!!V6E8z+I\gUwUUfDEuv}SScǎuR9.\(Dz(nNSm˚ﴮ[-ߞCJrc6#)i ˣ>;Y7 ~o@rb"!!6롗=nq9z`0".!/ٸ\TXh)*(۪,eee\erU6բ4[,Uo[f\_i^oG8/~y=\#`Aذk} O6fI,_4鉴ذAy4éSg5ݺ Crro$$pY'NJ' >&Mz̙s>68qpX,oP+S"""\s2Jѵk{:uߐ5qqO[.3R7<M0k֣;Dܟ|;HH#zLXXK03,,6]K;̙s.刉rYZ[rSZZ 5H}5QQiSGO/_a+1t}Dv8xވ"Ed<LJ*+$Ą*t:_ϙeyINn*hin3zÇoS>@f˅+ &^^a_ ))%%eW\\& v}7o{aa17o*}Wk@wJV˷Vޖs'`A|˅租.Ev:gd8qhٲ9bc_tk*XާXf `X nMJKkKbС~jmؿW;6mZi[Z3f.]JTTTb5;vTojmNij~@2j0?۶nzm8"矏oшY`c/#+YDFv€cp\|>x"#nuôi0|@)m|-Y2+W~n;v zꪘٳ0jD$$.rr~Aii9ƌW-9s`ӦmHJꅛn&MTZڣW.Я_o7Bp =4ř0`,+mh$^c=Ucjf-KΜ9h:[g…B̘4]-)[-Z"""LJR {Q{޴\rS:j[rRʃ\z翉Çw^jiSk:Z˥iͿtfOK[W]2̙se(rr6y$kP//K^ZD\ZL-䶡(SھMy!"" |/ɩ%_!Duڽcrۉr o!.RʃM2.ZjԚr-iY_m:* v1,,xZ1"ֲ)/9:=e 6Rηɏ񤒈(k;DTlڴ{{F"66/~( +׉1CD.|]Æl1DDDDDx `xg0DDDDDDDD Q1CDDDDDDD` 0DDDDDDDD Q1CDDDDDDD` 0DDDDDDDD Q1CDDDDDDD` 0DDDDDDDD3@DDDDDDD 7`j A}.w@ttu%V΃R"@mS-&X>2v5SM_RK^CC(`H^wP_iltg{nŋPTtҒ#։ޘ4i**JC"+;4-Z? Nsǽn֧%묉2ʥM}q%r©}2jcѪCt%.\D+ku@櫉cZ?<͛.}^ۡ?1oG"} Pd͓mgطgsm N x>A~fصk=1q^,ƉlڴZ@߾ql47u 5r֕mϓqD]q[yMB?>'p#p88Z{}ێw )0R~Ft0=zhf7>Zbbڴyh,͚cy0tÁ_~ Z݈8pˉ梢J9qp80HI@\\7dfNFaa洔 >u6~{-F|:nm"zkKſ9ϻf Exx9?z3R{z\^ԨQڶmi&{osϽ.;T|ރ/Ѣ0jACCڶZ{_lEz(tѓQTT"۶r)+~zrm8lVVTqOue$5?"":!"oǞ=ijR W_}͚#:: 7<&SMgOioެGi^Ն>}ZMwR_T~hɓ/m~a 6IIw#;{rҲD__Vڏe}ūкubb 3s2K]Ij9@yrgojZM5`r7aѢg1nw^{3f$b$&&ȑ-8rd b0i]BbbΟ߃yED-W vDZc 66 O=4ZZZl6Ǝ{NJӏ;;s0vy#V'w㮻ᡇfi7A3nH'y33'cʔq|*juWOe99u{Z{]9X8}z;wٳ_8\^}@m:uj̔ ˖}Q 3ViJ<Ց˓-(- q-0a}R~,YΞ݉3'n+}Fm# {yM&#z]rK_R5Z*Օ\Y~SS<#߾FIOxᅩXrǶS3_˩Jz#?|}'{j_-/sc8q;$&Uk>I8(oS]M&y9uN @6CcG##40L!v(4Ĩ7荡a!atаcX㈐萘ИFѱ?8htQϢR]v~)l\sM>ק9SUeF*3:l:c:$$.\(Dz(nNCJJёwϏcgZEu(Nܦ)-;v˖}P̞= ,ũS_ x챹3d)קf;oCMmy4-+:ӬY:fϞ;11Q <]qq)҆o=Q<2 `xY1%,Z4&yJKl_j+˯oIJI되ZEKq߆MwAdg…oU]w VZ_-TZ@yllWVmNMe3_˩֞j'SvLOvo_}ʗ~@s9{6鷻{8uS;#uی1.'M~q|$'&"mz??;nǹsЯAx/T -Eb[UyL,UUZf`vl+m(6ځ;"CQXXKp(,,6v9s11Ocbp9Sg^#y9q KwkҤGe0"<=ny<`֬Gi>>ڄc1qݚ|@+_ڼy(--4ZSN:r~[WJ>OVSRR2ZL9m\5D0D5d̘Xt ***QQQK`ؑAsĈnF>Y|ww`͚ /bEN/G8Ӂ~Ҥǿ=6|M*ZiUUe0}KxӏʎZYp9N8Pl1~tObbƍ[1dȍҴvXt-,+:ɓTktk}믯@޽`ci(}/@FF:ڵKAEEVX2]m?}r0-9;Ҵ._7?21ñv,[x eSk+-֕hKOrV%%eXص+Æ= ZSNTZV$'ƢE+T(B>O\>g0-(..[o 7P_qN8o=aި|Q 5Ho̙QPP֭3кu.\(ČI̙M!)ni,4Ig=6aaȸqq0m< >P:Iɴ5mckd8 IDATҲٳ0jD$$\j0`,+m*GзhtY r;_`00w"$&@jj=z?'wɒXCuرSЫWjtkŒ%1f̥N0+V|^q'juo__FVֳܹ8ߊ~2w|HJ Ľ!!&|Yy h*J uZYY됞~;bb`„'ѫWljuO9Siٜ_PZZ.\~rZڎ}ePڧ|d3kwGZPe/+.vr7Ϟ\HM盈_f^Ym=}ȱ|տOt.:{Z9RVOw:&L>}y\s~<[k-/ y3\-7+m𵞴|+SNmRZ\3]r9]7~>#w4ƍs/u!6lz!,22Fv:iԺΔao?fEkի?XCiyO׺󉣺nQkOupBV7"23Rf_r-m+rۑZx*WQQ kriWݷqO[q=J}\~AiyO(D\9bȇ-m[k4盈| 5H /<6o^'Cbbf~ 9[CU/txHLL#[p`%.ݵ+WOoG]l(,,Ʈ]q7SO" r7aѢg1nw^{3fɘ2~=_} Z]@P_K9/ju(W&[PZw[20aLiO;D~nu0<,xʗdDϞkW4oqq) СC*v.Lkɧtg~;:z} l#/oꩩc:$$.\(Dz(nq^gqq)҆S޾`l>bc\Wv'Uʌƍ;J'bUUfDEuǓd5Kٓq7#&&Jnגozs΋uoYܕW &+,_}^\q wGe!wAdg…]:]w ԅخ~AߛTێZA0~ ,̘-7j۷juju{?qI~Tkki[-Qj/e<}VҲoZm}rZ}{ qMK(oj,ũS_ty챹3d摨;IIc\U̙s|23gy\gddj8qݥ6iB]RaajE,_4鉴ذA%[m[S"+kuHH\b<_-_ݻwġCG>k5D5M9eew+yӞnrH:S܇s_ǣS hMoC?[ըZ:uZ||k/9ju2iiZ-ۭRߧZO}O(Ս/}kMIZ==`&>hKPZZk?ĉw.c@II)i޼) /_XX͛zMNk"'O~˿@DOŋ0yp}F+o0$Ą*seq |!7bӦm8x0;^i/%Mw͛7Eiito o(Zg;vZ"oC?Dm™ZK5яAMlַyVZԾK?Rc>!:%OjT;o1b@it0`޽fťx53KAEE%***t;DkaXaXqV rYXH@..\' 44-[6Gllo:LKkKbСx.BMcY >;҆-{Ydt̉(((Dh:.bƌs.Bbbѣ'xs| EF݈iaK?A߾f-ʕ Q|%sr凈놱cW.,/#+YDFv€cp\ov}oT-_*U\Zt5z#& &LxzI騵J?x0KƘ1&9ahX!I[o'm߳ggaԨHH!=pΜ)شizᦛƢI@dMruv^j}'juUM#5I>=r_VN-MӦ 0:v))-]1BD8|/ժ|`Hs <=hRbt.'4eѲNaƞU^=KnY[>:[?ey*|9_xJKk~It ۱/Ͷ>Z |*?P˟۷7|xʧ6T[N)?jRvy׺OxZ͓ZZNDŽ ѧO74>4zdBz}'v&;)n{sp]MU;U*/֚\ՃzMy3?< кOh϶5O\@noMOz}vj?P˟r|IKk{{UK~je}ٛy3g =Oy"""$""""de` 0 CD'QCKOѕ0 bn}54j0DDDDDDD܂-n QhTj(!"""""+AjΚ~>g 0DDDDDDDD ]q݈`V1C!""""""" 8`(02NDDDDܜyO0 5, J쌉GPC 9jCP; #QLUt^on Hf !}N-^D FPQqADDDDDGXX<=+23 f\V6[ !""cKf#\A^`"өv6Mz(pλyᨾjxFdR6{tR𭪪 `0Hq""""x4(1Cu9^i> ÇGϞ=qoqɏ/#GDϞ=1f. cǎ_n<zχ^Gll,6mڄݻW{O\\ U QphejhzS ?IJepa@f_ 3f $$[njpM;⫰=PRRr߿f͂n ؾ};̙gϢk֬Avvq}?0:Jx@ܹsĉ:u*}]ĉxp8c<8vpaݻo8z(~̝;W*\ٟz)|())Aqq1n݊ӧD?Nll,Gp˖-qqM>xncЅ2`^{?ĺu߳gpu!11x"~ľ}gθ|rOطoVZ!A%K`Zcʕp8X~4C n_5y8)-yO+Vp 77?8}]8=z 7߄jżyk.,XV˗/BzoO?4 Gٲt:;v vT٪A<4m:͛7`sΩA"""/ rUw.AT/ŋXdddUVxQa00p@lٲ_}zz)?`˖-ؾ};f8p qA)">FL2:t(fΜj1#GqA񓛛 A0c 9p@QCO<bcc1b̙3fmVӛ8sFMd2Dym۶0Lӧ-[Xt)Kgy񈊊_WLp#,, !!!3f!""""?߀DCB\S2/ְ8w `0;ڴ\TXh)*(۪,eee\erU6բ4[,Uo[f\_i^oG8/~y ނDA):Nz;\A7|Oxʋo~;2_T*sHJJnG~~>6m2M\!Uۜo<""""" QvquaϞ={nz. :ⅶPͅ-Zફ ACJl)l.#`!""""WG6и˜[DSVV 0DDDDD ׏dn{}R< "@P;W Ujg Qlq"""_=NTxc{`OD1CA$p@zLZՖmHl6X,2<ҊWDua U 1p8W~Nd^Gyy9Cy@DDp|˴%1<&/O.cpyઈ;`0d2 뉅.g?ώ+/a\IVJa.cxێ(BCCQRRr2ADD snnfpH;q8\"WΣ\$(6n?b1C dn˜BjHȍ"""R"|.bfjJiAyhhd>0C CwE< v? yC."], V+"##ШQ#bెKA݆h4"$$!!!0Lx;7]Af_E.A""bF|lh@RRStaa L@NXԩS(--Chh(BCC'i 3ϧacR9zFDDpnjlFxx7`ayA :v h#/+z PtA믿b޽=.{W{h۶y.^ `(..FJJ ~a4Ojj*A#G ){[]va…xwk>N>~  BNNrssQUUx/Ν;ѹsg\uU'Wj_F7 XpD/;;q:i{`.aEq۶mw^e/ѣG:,,\7|6&1xv#|=77W=鞍3F a۷/{L&r- Enn.+[nEf\Np /_/"лw9r-[^v$^kd^4hbccebРA˿8z(:v> ;v@߾}!^jϞaо}{=4ɓ?~{sb~W>|ov;n6ܹÇ믿.Dwq~mmmj>J}lQ"b[U  H d&ɬ?\f&sg&|ޯW^3s=sdsC? ]KdҥNlHIIDpeL>sţ>B|/6SLG}J7]^LǏCz0߮ ~Qk4aZ!T*r9ry7~av?;Iv4 [* >`z~!d287˖-ÓO> FÇOkn/ÇCP <<K.n7DVVL+b/g}PThnnFFF#GB@RR?#%%?vr{mhTUUc裏,qeKnbASSah @ Mp0YЌ&w $glӞG=`\ 4Ns/KJJ`X.]M4 /AP\\ ͆ 8uG.))puڊ?&L_ gK,qKv\!ܵ._ҩM۱`!Iwy'.\ޖ;Gɓ5X2l0`w_$gϞ=EDDԝwhD]]pЦoEc}Co ?ja4Q]]nnww><𣨭EMڴ7`DAUr{/'sϑ"uǮ cXػa/1c`7n~il6dddt* bY~-kHk[ zY,TWWݯ fCTT0`/""{i2QUUX,TWAh4l6h4BkAMu, bQUU 5/܂ԩŤIS_T~__\DPPx4((۶8- 3վ M}?Cb\… h 8駟)(q9s&Ca>t߿_}߾}HOOw#12PoDDԷXV!,l mz47yO mz=B8?3Xmy{N'ODfdkaK'j*>}N7:k w߫8nx7o>a׮]o~9z( sAR|0dqȓ; .D\\/f٩ 0DDz=vT~hn(hiij?vzɼ_yx0yr*0yr* {4?cLtZw>L!CG\~>|4b>6 aZ C@@S>ahiщ=3{h#弻Ҧ|mSXlܸ MM͝IUbhq{lKD߫8W{#؇o;ܟ4pպ's0DDtu\7#$XK/#GbҥX.,[ ǎ  AsS 0j(eGŋn/o;r |x?܄QO? KػwS N8dNlŐd]ۗ6K?_|Rm25551#r7eo+=A^ԭL&`xADD7lFcSPfeTV^fåJ`Z6hhljlv!Cp)eNBllO.mGXXXwqfϞ3gJ寿 yy̜u>4G~7/K3yyjSoF.ë)!V))eV$% U0aX}7 MqrUAP__N@ ]ٌFTTT@.CTv (6 m6rXج6ج6Zt|iJZt6Jm6OӟD[/ϻ΋} q |ԊiWxyy[o^ˡjQ\\r]msyK/IhNm)V'NucS}7 5tl6ff#9nQ(P*P*PTb""l6bꐑ š\vH|<dзaZ!u*Kjj(++C\\^ypgKcʔ4zW?|II␕[o+$~YnfCEkּ'>رcZ&NLAXX8&M?///Zs W^ˁpV<꯰V\ȕV?BPZW˔~jUPPB hTp?mh&4.kj1㮳+E fq0+Վ8:'DDj46 hmmEKK Fk>& 'N!8X@P؈>1th~? ,T#@Kk t&s JuX8OZ/?ך7MMMߕ6"U'4}}5HLLFAHH4 Z-:Q &2+7Ⰿ~L `XPUU9sr0,}7{S[SC]{cCd6:fj7 m`B[($ͭB`AYXX<ڟu=`8Ѫ$ *~90C8iA|/هqA e1q$⺄vt:PW[qZƉubzOqRGWu\ xnSo|iS_[}m˾ؾD`bu1jnhv`'G6DDD7\.VٳhllZ폶[ 76Co 50PV+NJ)u'`E+  uq/DDԛ4 ̜9~~j io3ഽ2A2z4(vMaQwcnJK2BS\""IRap`4萝 &#,46&X6B$~7><CRv)6`z ]+\h41" (~HHH@lL,*?s`$h4PlS"M P‹h"""/A@XX(FVK.R;v& J!!XD#88۔z0DDDDD} h4Gt  B! Cd|6% QRR"x}5lS"!""""Ip(LcэO""""""" Q$"""">fh4d2zVTARr">"""">h4B_0mhhhBPCD @DDDDtL&6 6&uhjlFT!,"*+RyJ?Ac!"QlGHuh7`Y Epi{c䩈EjTop-""N !fu B{6vCP[[6w֮}Sg񷿭Łl"00ϖ+!""""CV.^6+6X[XOHK L07oaĈHNotaXxbb?w߽#GCN.mw>L!C)ʕ?@l0lܸI\fZPl6_1OwT}8ZcWϋy>cX_W}~""""'z~\x cƌqZ8O k 2 O? L͆'1~/pR<D``{G뮅bGyO=wwK9b/?)NҩuݥXшv#);ǀ&`ɓHKvٳ3gd2ΜQn IDAT)uZ7stjŬY3MM]bq=Aܦx= yyX,Z yxގSxGĴÐ;0|N{H56|vZZբD|bŃۊ~=:wzغ5XjvDD]0DDDDD}TOYt FH _@LL4VCfڵf~7zSx(fʺ6 g1eLEDD8^y%i* ii8~"##DD0CDDDDG&NLC{׎ >}zD.C A ڧ Gф@.vUhc3!""""Cr9"#Qu[ق0x`.^ *2 P`H0DDDDD=z.DC<" r'`ǎ>֮]ۣeVRjkkCNN>C_0 וͨ;k݈{8b{`hGzz?Q[[E'h4Ƈ~R$''EjjA{=`8^Ǘ_~tdeeA!''2 G~yyyHLLĜ9sǂ z`DDD0jVV P]]GOAT*%ahlllA``  aa:`_uÇq- 99Yfa7eχ\qdٳKEDD4p~?lP(PTN ` a2`6VM-m6 #P(V0J4 kD 0y:q)//;$** -_9swhܹsƞ={PWWJt1@ǰ3gȑ#tN ЀTܹVhD~~>.^Xddd@T:Ŕ)S$3g )) 2 t<=mӦMXp!܌-[!;;@G0k鈎oOKcDll,̙???Cnn.%nR<OZv-Nb,^k׮b_j*""99^ڃ0dd2`2`X`X:`zk.{W.RR:M0D P?ԕVxAuu5xGt IKKC||<Μ91XdItGBBϟݻw"55YYY(..ƁȾ}n)3f?G~~>@P`n… 3f .\x1]vv6MѣGܹsòe:SRco8deenj3رc{QYY鴝Ktl< r9.\uR""_* eaIFffY lTdb>בJB Ny>'hn lrbZ/wRSSP(t^bnҤIn]pz+T*RSSQ\\ Ȕ)S _.\ B'ԩSn˺w^L8cǎfñcǰ~̝;ӶT8a̘1(//u(//FA||<ݖSRc_w}AT"11q;|*OӾ`ذaP^!~!"B<5 c|q ^0z9 0D Lpp0t:Zl6>|8Hq1 (**B]]jkk;wM_; 1?4.^Lc?,T۷`0111Ll۶ _5Awߍ_}IU*=mmmmaO+˝T~)}WnGDD7{/ bqr^v䩯q lGĻahc=Oܹs8q… 8quVDEEaȑHKK͛}*O@@ۡVj<8 rJ>޽OyzJBxx8:A9WV㮻bAII lق˗wڷǞhL&dp b Ktl<_oNDD7/wAk jRt=`d6z0B$N^Ǝ/!!!:t(jkkQPPӧ{ͳӦMCHHH4'Ob̘18t萸<>> j(..Fqq1СCQTTT>|X2D?~ɐIV8 NmR<or4w\dggCT"--ͧ}5nkVww;bkopL'\y-sx.hrX@RXr"WZT A~j_-SUAAA u`*XQiMe-knh1㮳4P\j8No1 ؼy3VXE^ K,Tܨr Hta*׀d0ațWALd$*\Cn{fUUU\.Fljkjkolh06[̆VQL`5VQhk7`vUh3C,hRX:+ : dhnu5J4lذsALL 9$}l}%t-z}zDDD8xq|z UUw=^p!rl̙صkZ[[1h CV 6 "" ,{}zDDD@u U!"~>ѩSz4RRRݖoEEzqԩ@iii'"")))@yybԩnkw"""*11rd:08]MhT>DDDDDFG9^ܽʇ!'\{8vh eOU Ѐn;w_rpĻD] kA^/ I6r"wMӝADDDDS3ϭ΃JɵG"""""Gf 5)` 4wΡynM"""""x$k [n? -H/_u k"IbwzD5 Pi>GRwN""""""+ Ic^/!""""4w ЀK | 4DDDDD u'` u' @DDDԛ"  h" $!Bplggv1amob8)=M{1ߞ:=U``7OݝٳQeKoWr_oDDDԻ!aMMMjh4hjj^*ғAOһRss3tGB;c (Yh9r{'Mr677AŒ9377C4BS|3]<Vj߾73w0;ZL=zϖss3ZBY]^z?:@0< pdwEss3vZ/ $=+Ɂv4~~=\Su+w^ɓ{D t,>ϣ+vDZw`sJ 6 P* żypqq˗qw`̙2dwNO0n8 ==r* O0~xjbiɓ';kjjs$''#00Xz5ZZZ:qFVWu[/65|P&AwSߏ/XZ[q׿ΡCT"?* q$ʕ8boj*aWr2m87ȢEN/F# &NC/~^C\C6nzYۃpreAC_\,??aخ;Ƣ̳bgBrgXo` ㏣Wt 9zȏѣq|wQ (Z;gXq==mGO/\ٳѸc|Exy\{'MrtqyFD^h(PawbG|<6mu[177g?Îx`_z: }s篟~e$''#((AAA:u* V+^uz޼yNcא0<hhh9== ͛7s/^r|gz,l6b@&I.+--Ess3Z[[yfO_z%|ט:u*G'""Z W^ˁpV<꯰V\ȕV?BPZW˔~jUPPB hTp?mh&4G46`qYUk'jz<ykk+Z-F#d2ph4qAĀr vڅP@mm-&N .fRt0?BL& + 0's.^!P,{/gS[SC]{cCd6:fj7 m`B[($ͭB`AYX1+ʣ] Qq- ##3fq_s?׿'N7B&K@G-B P_s*/;_Aמ/=%U^^իWcҤIADDf =?<9ǢpEQ Qy7`PTT$cr|u@G_\^3. N(Z@\0V˿Jߕv7nDwss8js!.mP_i/qE j W.ht G@r23g:mB32LcM T9ZH:Ji;{Æ9-߶M5?!f][֭'tN"YnT|z|{?GܹYQ~ _|~mXuz/xS{"s-i'OJ֯;쪪/].5Hj{Xp!Z->?~Nq111hkkLm!Cpsg߇DDD0C{O*pi| BCCx F?8}4 11sN<9{nz]^c͚5;vlO8/ׯNo IDATñcǰb 1K#ш VpgQc32lF#tGj4/ce%'L_lֆ|qU_n{limEΝ0VWcM WnWc9hڷo4scS xiavE8077T[^@cسj2ihok!7W:!7j0i^B5^ E>ZdECk\#vDZڷc{}yxjgY<֓'S,YXf |IYqqq5ksuiRwԴkZ-z yZ- NԜ(##~%5BO sCCW2qaljQA ̙n/jCI(-ED`xXzB-n BqoCw݅'6vB N@bC1x0vsPFDtOIr02<ܧ;8?"Oa Mv!pH( 5 ǖ-÷11iny} `w ?rvDZڷc{}yxjgh9p~{;8h#"pjjC;}:??m=y8-p(CCֱi.!ט߇GB^XꩧV0?=#n-=$D=q[o ]]q?y+{*CW>ߕ|$/,ܵ޶qX_L=~N?GD܏~qU71nFa$2׻Lvk\yKvTw~˻jG_>?zaxtzYS.wXpl?ú6]?͢{&b{}z^MZH[ޕm=-wЃ×2Zήԧo#ף/д{7F&h&QEFB"'?񘿩/(ޕ2֗m|H^._z{-;.їcmeu|㽎^%z}-+鉈`3gy>(BB>)84fVed2ZW檑r'?A/~i^nEͪ;ݹO7صVkױ1""""w8 Բ7Aƍu2sr>:{Nx!+bu[=[}[;&'$@=__81?"""Z*sL9` 9`1CDDDDDDD7j`z0DDDDDDDD=""""""" Qc1CDDDDDDD]n{IQc}GDDDD$zDM!~ y"1C /DDDDD~~@ w ЀK"""""i, y {O_ """"1m6ϫ$.HԯW Qqwsp"~]4ޝFlٲ>>֮]ۣeVRjkkCNN>C_0 וͨ7v̯?#"""[l"}z7@!H4 H}z|HOOGVVt:rrr 0z\뗗D̙3P\\|,Xw FDDDD}څ ./++CAAzC83`_5~ar-HNNb֬Yؽ{M!سgO/Z[[˗/#$$gF@@oߎj 4sA`` ֮]YfaϞ=[aX~dff"!!z^}:;SRؾ};*++9smꐛ@deey*#Ou1CEExRǓמ;_v-Nb,^X2"""vڅ0̛7GHH صkϟBnn.Ґl<^޽#GĂ p9ر`X|tq<_=dq}$8 ;]oڊTWW.Ν+^}Ə~iii(((pJW__%KtJ~$$$`ҥ"55+V@||<8 ۷obcc|r4f̘ݻwcݺuxsN̚5T8 /ƴi'ND^^}{_}m˗#!!lcǎ{Ÿq㜶T~Gw^$%%GIV=㉧-r,\Ч}эsEL8JXd *++1aT*ҥK#F@DD1tP$$$jŋu됛* P(:u<s.~S;o_:n~ 6 rɝ&4it.\#R*./++V HHH@YYS#GBP`ĉeݻw/&N+W{RRR$T8?@G!CbccQ^^K.!>>˖-soOK}]rrxb/;4SyA'wI-6 jڧ}э#B"窮ڇӺfaŊXjVZ+W^]ZveDt р 88:ZV\f6qy >$ M&~:-׎_A1/"33 EǿرcK_*OOua0PSSq]ff&mۆ FDD}K/>@Ǥ* P(&ri;Ow.Alcw3x:ײzWLL 9\prZv 4[Kn+`0y6y0 uùsz\p'N0Rn݊(9iii'&svjj5x T*/2L2P)OOuSTǡC0h ju]X,())-[|NT7d0 bA@@OwݗT]:U=<ue{"""O|lذZC^^6l؀dddt۾~zq_}m 7bʕuC$g4 HaƎǏٳ0͸|2 0ay#)) 8reIHHɓ'a4q!qy||<`XpIuCEQQ, >,wbb"?vf$Oyz[\\N8ig}Rd2NA_j{l6ܹsÇ0ͨa|*u:t(.]łgd>A@YYfۺIw= ;rJw}GPPN\w}78Ow} X!J/d8ȳy桠ɓ1tPigϞ\L&?rM4 ۶mÉ'0e>}.F8򑞞lڴ SNEQQۼQPP (6l]w|$Rt0?BG @}dXPUU9?rhX.wS[SC]{cCd6:fj7 m`B[($ͭB`AYX1)ʣ]|q al6ȑ#UfǏеӷ 3gĮ]ڊAtCG-XG [2<0N8KIIw[ǩS=^SJKK݉D9숨3CcqsO!""""h\(x{-2 {PuvNDDDD>)sh"i Ѐlvha*we<&,R^p!""""m(D0︛|uԗ1DDDDDy x:5U P #I #u KR`<]!""""&594ϭ1C;1BDDDDD}U ~x5I%k~P$@ 6 ---0LX,]$\.RD`` f](?ETT+x/ޢUeiu-EqA6 X*$@& Yg2sG20kHH"1dl9d+9]$"""(N':m*-- yyyp:A,V~&:%PDzQS__G端j:|ɄOOOGJJ ų/ma…0MK, ;L䌌 K"""v#;;;g}EFFFyz)n$''#GDIIIux<8p{{L!+++澸nTVV{Fn"wA͛v?s̉h%1!""""05q\:u* @yy9VZ;x7z1n8/F}}=rss1~x%K%??o~v)))u=}9z(+GBaaayL~߾}PJ/?yCа&RD^DDDDDD]cSJ>}iWƨQ0bƱcp 7p&й瞋7 EEE8p oYe(++ 30PǾ}bЀmZ+Ň Q|AE#)S+ѣGؽ{7N((:M-/SNeXjnw. 8s;.mߎ3gعs'M֮?ׯeDD^ff&^?+Qp#555jcرزe l6ƍ;v`ժUذaN;4{gK;O~TTTvr"333}4 9Ӊ}aƍ|-[vW_a… wȐ!xw/MZ(> ` *B|/DQXX_n˖-6m,X#- #ںٱcƍ"8 >j<+WĠA /uq@FFm۶պbŊ+OGѣ .D~I&ƿO>$L92fv:(:~=z}Af7QPP˗wg^:jk֬Qwޠ>suGŭފݻ#33F w܁g}_|10ai4\tEbMߛ#۷dž 0zho߾:u*~@;=n&vi8s9r$rssp8p6 &L@~~>:,Kik׮EϞ=1~xddd`ҤIABDDmOݻ.*..yg뇛oUUU(..ƌ3_GÇ/pu!##yyyq-t0 dee!-- III:q\B݃!ᄂ㢋.~3\tE:to_| .CѣfΜ_׸aB<(((={gb…Aaǎذa^xx(--֭[bΜ9Q~ڵ+0p@m63ǎðaPTT;w / IDAT}{GEEn\~PJcǎE~gtbĉA'=y1w\7mܹ}Opwb߾}رck׮Euu5p]wٳN; z򯳠{ƢEo˲vQQQj 9D^^rssܾ>|я~>}{/Z(Ɩi-E6 OCitj)vdKJlI25%ٮ%%kG#!RvGzFrfVVrv^^JvNNjVN/XW3w"]n Sٹs'nv|y9OSߏz -ٳxbu]:u*?B߶o[[{-))ܑ#GPRR={ba9쳱k.=zݻwGyy9z믿>M)_4 MkΌ].v. kc-߯_?lڴ Awgcƍ.UUU8pAyPG:Oh@sϞM6?HUUUaСؽ{|x_~g\yy|Ir-{R?޿ѣGu31bĈwN/(֭[Gr~HBt*%HDfa5\ŋCVz_غu+b4hL[NDU())yǂhƌlعsgw޽;<O={aYV÷w 8%%%ADɑ(Gz70`!PYY|.]B{mԨQB ǵI4%Zsv0aF2|Gx뭷PRRѣG9s&>_~w}wG zC"""S8X)qh'R_5J)BtM1{F]]h"(0f4u|I23g΄< ^ok{/-[z躎-[`ܸqqt:1|puYpӟz(--ń =}t\N4ho^/8'OҥKvvtRL2Mo@fM7݄ѣG{ C=7|`6mڄaÆWJ2d,Xjx<_7xc\iM{,Xvn ӉUVaĉzظq#~rv A`v؁y>7ߌRF@s͛7g?YP|ѩ QDuh}] 8W]ul2y]|!CիW{xwsa֬YmZٳil̘1C ;dxW1{ldff/GEEEBGzjaƌ6mZХ#sLq5?>֭["1mT͝;۷/틪*̙3׻>0aK/a۶m())Yg}qF'?_())_+`0`rss1w\ 6,7oZߛiQFaΜ9曑!C/ MO?{nKȖ,Y#??gơC˭ '+W+!6n܈A'O|N-^wމӧ#|^*nہ5NgZkj$Z貁]]tujpk?CXVGEXOtX]_bQx 5;UevO˲/C)[o5೭}-X5fZkJHۏlxgP__Z̟?cǎXۏ$ ]we]gv.KT담\6m"""":0!`}v <~GszwQRR 3ކvm9s&eYm> 9ۍN=N $EDDDDD퉗 30DDDDDDDD Q;cCDDDDDDDQצ:30DDDDDDDD Q;cCDDDDDDD30DDDDDDDD 0]^RDDDDDDD*6.Q@CDDDDDDD?Tv[낔.QQm'u:4dddBJRJgCitj8wƥ^4deeA4(qc'l~gQKg+Nb1uJ 8:YEJ ENRqm Q;ڱcƏ+ /Ц۸0uT;v , B6F"xr]V'-OíLGynMQgsiuagO3vut Z#u!| F~/"ӱi&<;,$/n:hyܖ~36&"" iYAާo"bYt]G]MMܗ,u/zGqw[nAQQ2331j(_躎=z@=p}aٰb 4iii _Mn_z_qDJJo˗/;#3<%%%XzRJ,\Cnn.&MO>$L9U'9.RdffgϞ1c=mz"pµozBq@FFm۶w/-ki[ޣ V\hn+kiWJ駟F=ѣG#)))N_ObMOdNUOݻwNcǎ :.=ȺD}?'vcX4Zp:ؾ};9soM3Z[lQVV . )t""""j"p9i2mҖ.S2%.lIɖ-I$۵d͞Hv:DR#9##HHJKI[~u8sOpWNd444 %%%W\?i|8:,nO:nb| m#q$ܶZ XZs, KBu_]w4cz(--ń ݚzg>Ro޼5k+Lhz[ގ5J.ԛv{Wtv `ɹ瞋5k`ڵs=K'[sEuu5틾} sʿw=p`ߏk_n:aĈ(,, :,--ECC&Ou;_5 lQ[tv_NJX ݎ uO Z koEQbDnZ1B"=?[ScuG=6wHOZ[S[ԓ]olxkDC"4V< O)%ϟcǶy'Ds[FDjj*r4Qwa 8V*[ QYn~ӟvtD @}}=ϟπ֠H9t{Qq5swxԕA[sw'""N%ajZW Q^"" ǿ_D. E}1!"QkD"\ `:D5DDDDx1DK0 ?:RQA.~|UXohģO=x(. \Wx/w0]J<#}kDDDD9Pq\H=^:&sC=~3 .~uK@=""""a Z|ρP%DUC}.v1v? n\>bTWE\+u7"Q[՛=C""""‡/^B0Φ w:~s󖗗^O^q7| 7-s"""":5D \#5|/> 9y' w&:1V:ip:x< Z(ip8(((n _/ e345Ŝ粑WwjN@`,V\k.ӳMptt)DqimgIG[e R---kSB)%iB4&4mGlӳDyy?|Q#+f5g iJ@SJ -ﺼvL"P RRJ;ټYQ ]q+__!wC6g ;x  -](~?لBJ)4Le&aJCץ:YsFۧGN=_ҫwolr'o+ ]liB5g J](Zr ऄ5mf(" !`*!JXBYRJK*t0uð^zln[4#'9PV%QXiFr^ҽ^S7 K7 iZҒJZRJa }3lQ!_CoMi R B(J$ tC G2-Jф%M*KJR)u5J) Cؓ4LpMezMդe(ʒfs/2-҄PJdA`4]{U+2`MBPiI)"I&kR)4&5, SBBؚiJI0M  5L2tjjr{nnh4ݞ&Kn K*K M M+RC a(/A:.Qh/@i)R&W!K(QCJ@҅&f aI k6e5e3<ޤ$G4[;KDDDDDDD]2 zfp]$MWW)a ˒0-KԠ+(!4 PMF4gmjm8K[ EkhI4))&-i(iӔՔiJhɚ heݛ0$@I˒i#=Mx{1uSkH S*%eJaiRJ¦K^=`a4MA)LM+2YYfG05îILOKaf0Me4)f6ReZ,C^4=ӣ{5442MД)JK aJ!tv !T/—Vk / j2$є&E&kP&e6A7 $Ch&D2 ݮ6D^7DDDDDDDt R)aZa2 M]^C(˰iXae KYԤ0%4M&MB^~^~B'{TJ O@$.4R)Rjv+<0]IDATP&R6aWRezTIdmJ ڡ^"""""""ꊤB))iaCYRfW7Ds/S嵙ri6 Mk~@dLq` F),Г 5%LK ;tC!Ja)d35TAl=`%RJe iXRT4-0,B,],f D_Z̴mü ƍt S :d;`Z^ ve MXJMh(4MecCDDDDDDD-ݒR0=VeG9|1-S)<^%V/'DX`ZVKYR@ C<)LҲkv50P6l^^DDDDDDDDaiR KPR* ))-CS-c|i _GBHh _"9 -ǀ WHu6, .ґ$CB)aHSڥVWi.5:/A"""""""B(TBԅ)eJM05鵙͗/nfA$&Qgq fcE!Bi5@, Y)mPZtؔlPɚJ$)A)=_"""""""j!aB(! ) Mz!Y#MB$4j_lң0e c*Ј„>C44[JM)A%k*Ej)2YPJ $3|!""""""PBt)ХG&M&-!/zpO 5 aZzĄ0RKWaKKH *E%0DDDDDDDJ( «hTB{0ዯK/@0QzHAJ J F)4%J͗1!""""""P7I}oEAZT=_N/p,(a4@ 40 1_Q$cP@ ^E _v}X!Lˣ7ALJ B Xc[Oh!LkP A |mdiaIMK}89Lx́{JZB%R)t \LnB­(Jh)p9i prBpAL%W"""""""X/_OJckϕH4H DDDDDDDDbB:an[z#"""""""jHF ^"NV@*BDDDDDDD֫Â`0DDDDDDDv XNzї$:D”љBT 0t+k:sљk#""""""ΩS.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD™~(5IENDB`openturns-1.9/python/doc/developer_guide/Figures/Timeline.png000077500000000000000000003731101307543307100245430ustar00rootroot00000000000000PNG  IHDRwDsBIT|d pHYs f IDATxw|e}lɦދgNEl VγygSzz6< rS()RHlG l$g?ٝy } """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""nNtv/׍?+˾Ku!"""""""j> ʾP"""""""թ!Og+T`\)!Og% nv^us--{34X"""""""ڗ4앐go'M;BšXja7’z w {:CSa?c?+# G`p5A0;lib=ґNSCvqڟ"""""""6)ڹNֆ<tTh\\#jGfڟ"""""""ڋdmS&jCjžaOS~5N[@A v~M6ة {JyjޡI[YSǖRJ;>W0!""""""&ةB~!nΎGsj{g`M:pY8(*GUB(! SHyS;\AB:tTӊ`NMdrRJ([>K("""""""{DX(j! 9BU-Q@ʚێ^ZVDvFDDDDDDDԈnu2!]_je_ZnU@0 UU0Vȱa+\"+Q+*d(m&Yw='Tiqݐ,Pt)M:# &4)fBj Swy=5g[0.X]ݎU=J)( ۙ/.ޗʶ{33o DZh(섣a!#QE#-f(CXNX!#JJ4"Zqvi׉kgqv RJ(J)JwRI).ui4LSsytM;WzH$Nl;q PrLP# qNQGv^v$i땦˭<<p=,ʫkFM{KlND@ d@eUHP" @fve6*`&~.ϯ_C i͛%<8TUVmHٵ33""j׬jtoǘ1cχqL6 GUf۶mQQ^3g`ر8N2q~i~v;m9rmxK/{%;;_n˭76Ӓ7_>T8~ k{-[?Ӧg_nS e!//O>8TQ&`Axv9s?뮻.w%h&ME.\&M3gO3fy뗯ݰ>?GMX´\hy&9m884\k咯@aoXnW`Ŋ۲?[omi$"N][oE ߎ*lْ;Q+vq?3s=xqEc3ǟ oS;V٥%p:N>TZwRSQ\\ح]N0 0t P )QFoȨEIV"EVΟͻ 8-dZPHV4翀-6 /R #wqQ5Æ FUUU:x _n=]r @[{{1yy;δTNS4! zMH-`xz\( hvӦ^aA85*pWӧCk]rB^|%{c?+gܥ솽kv F3= 6l@$/ Gjpg8!w߽^{ w}wժUx~@u(m+[uLDDb#0hϿ"pӨ(EeE\vm*Wq6o7܈MQ￿_ʿ_y}s6.=,s$H@O:nx+:K)Y# }f˔Ą$q%t@4it TWLjV Iw!νQ~uAxrXg].nڪ2+5v‹.ܧʕ+ ⧟0q%6꽓O? #Fo Axј7>QQQyc4 -޿oodw}~>;\b[HKOoRL8}18F`1믱d3~M; _V$M~Ff][z5w=g2z~}5[&%a\/"H7Nj. IкKDDq,lظ K/ōf# Q9mqѸSsqy㩧ѣh_v^ ?J| 1J\1c&0c1׭1m4λ+ sϩqT/ w>>Cum⤥bMYèW]}5^}u0+뗯Y3~i]w7G-:lׯMmNk_XSOsCϴ4deYgO?nu#"\Ky.Uv(B{\iS4tlٌH$m[ U̳V}b},׀TDKhqGw\aښx\. S.r>OwD3)5ՕILN}ߜ57^ 'ABB\< HCAsXA_ ~u \9ܼ\^ 5zhcCJ iB7MX~58`$2DDqըGǭo&2z  A={")9lXGv9mO@0LHŅWU?iSՐRC޶^q7UX5MCZL|j ~Ny}׋^}ˆu<'@둑qR" 0?>b-w @޶:CG_?hzHCRr r0BԊb UiP 2@br n \QvqW*[udz`EYI,R^RBWp( +hDÑfGeԎpĪA Rڨm`PړjpN_q6qt68>ߠ$b{n~ٴ8h222r 42anN""ӦƜllwJug q1Xfp/]b$PIT%jHp Z]a+ qq^磨[6o>CFFFZ}""nMMICDDD]GGj.aРջʧLFIi)~(ہ'΋AHIIm7Gj*ѧOB5Wun^I""u.e|Sr!##ZaLL۵l""""""}]GjKDDDDDDDԅ1!"""""""º@IG%̜;JuTJGQ J9iq{FJ @ )bǍ.0ǁe;CF` Su7 &%4Mesv{kRJi1HZ>eD"-%%eUl;_剷c-_ݺe;()+G﬌g@\(96Ԕ]pW#DEE9(ws7o!}#Lĝ܍oIMCRb**񸡵b_+vP B@ jͮKDDDDDD}{8 j&$B-;ؖ#z8_~e}*SOm~ki /믻cǎøpݵby?1ᨣpɥb۶m-?V}:w: @,\veX|ys^z)c2 )0Miii=ztN>@>}ounE>}s:RQᯆrZa\kQ_M@vBQLxfd睇Ec͞.~ۆ;/ ٚ7{{>֌0_<D9o.B Νtn2/7N r>šm_^ 6mf4 =n&<<<W_u5<0{lڴ ~jѲC9ƍhBwqxhΜT}eY(,,ѯ_姜r 22owݍ'x^: o߰tŠ7*~uk<}Ο-!{i>\r_j!%%f?rJ\1  n7BDDDDDDrXR5$'hd61:MLu!F; TrW' w2_#/'->ݑ=f ^~_(((_n&6oٲԩۦmg~@ w}? .Foۺ|! 8##eeexGpđǍGff&曻3x=ѲoD"ϐ[uW3ͤTWRr'19k8'okN!JPJ!~!=}z^U/bQom1w*A,2 ͝NTܯ{\'VY{ZN[5Wq]Z.e@ՇojYsϵw110MMg1<#iX t@f8eۯ+JeeHUEG~CP0XD#2D4;*vT#V ZFn%5-Zg:mqByU5#)u)7'CxwpаHsTUb}f6LyQKc=yV-԰S\%''Bj:ʫ#ŀsחmee("JzOUmY+,F̞=5΄sDžXɛdR:~pH;Ծ{+lѾM4쉂$&@)0mixx07 '^;DDDDDDۅ;mI )\p@y6HK_fO0鞤:hZIVĀACpQⰬϹڰ_O?^@(N9`'Ǎ9 SN@)BP+MDDDDDDD1YÝmzşa5f e|0Z~>,˂Rm;r{<8Ð:yyyX[X3՚:;[;*,3r8?J5@e8 ፋk+ނE2Okr˾)o{bD5u"n۶:tD;;;?ƻo6` :`uyyѾYz0j6m'jpcDyY)YGLU%"""jR aQ3=GdfДS0)c 9eBHY85kbỳsh=[Ꮏ 7oI'OER k:N8a2/&pСcAϷ5oիW+""" ƈc Xq3=Sz:DCJ;74{ v{~/ګOPkwnݴG@QYg/ bנh2G><.w/ly]:Yg 4 s;O>5|!r}Y-<8 %_}I'B֯_\TUU㑕aÆrDDD]dggcʕ(,,c„ j6U~W?+¦({fgU])~ZJ)lظ j=qM3o p"5!Ea}DDDQY|reYͅK ރm# `[ so3 :YEg=oM4FtD3KӴF ~O]Fudo0pѦ(j 1j%_Zm](X4G"jj@II)fϺ.k HMCiI 0֮] 0}rJ,]ÇǵW_T8*A,jZE6^jρم>B>}v[* 'bvp ;OwbێĤd<#++ . ln IشaF0::999ظq#&Ojcհ, pi믿<]Hyy9x L>COW\ѡ "ڟCa|| ~E8ERY={`ñMXzC;X|9pq!##χv8SGkPr;~yq͵v{RbKv6֮]^{C6oƀ۵煦ifRQ4 o\M#633%F0s?n\뮿vCnR6Nr. `Ejە=Rq '`0ÅwX^`NÀ稹OQ\K.xF\}Gm1VVV`a-x(V^zqg`I.2)(JZt1[~=233Z. EQTVV`=:v/)jlR?0M\:mZ#$"ڟBa|R :I >Tzե>QSGu~ ?-m~X֯Oom[N2CE @EEEQhϿ~-=7J)$&&Bɓ&A$>Sy BWV2330nX5a5҅᪫ λ /4.C8E0I'qc'DAa!^Os=RS1+òexE\';e9N'5MêիqϽ!gO\9s&^|El۾}v|MxqYi,: xQPP>\tB.ڶ ۶!%]@u~)K=qbH?,4 ? sqe9> \vYUTT B:EEPPHKKoE4F4.~$$$4s'Kʂ녦iu|I_F˲0h@ 99F].̳b𚩸;hl޼#GcO4MC||<x7P)Cxqa S=(,*B\3f^jbHIMe'| ۍKP~牧Ejj*.2220zh$'Po~+V //ppkeĄ#ܣc5҇AM;r(B!`[o9'Im`EŁ7Ћ8U/*^ *lP2d,--tMQrHK&m&~jzss27}"M&Dx'1s,>u$18 ˈ4p(&ArZn 7=tr#Yft">>@{ٳ1q,_^~<裸{;v@ѣ=vɲ[wx(-vsO@O ]͘V}l] IDAT|9~OI?w}cߏhL? ))С~nEQć `0qx&T6j7`Qذa6mQiV2/FӉ3g*ܯFK";v yyy4 С"##QR_\7.g32CxLws"""y,VXw6_ظ8 <V]^~i|*__|/$>x^!^zi^zDGEcco~_O`xute:%xwoe<8q$֯_䥗^ܹ7 d{p,dYPE C hGسg/j{jQʫze[whެBRj1w<<>1tjcT7{?6NsJ M_rZ_r Q7~>ƈ#мys7{6 z"єj4 1{=n4lo̘, >< 9xѸqc# > dYM '''pz [T{.Nb۴AƍȹT0OĩS"66SN X@rHJj gBlܸ ƍ HAw|a P QR`0_$I…UUvvv]ɚ 2 ѼysVM7s␖6mBNNT*KMN<))hصs'/ _(3OwyWcl0}O.3ݟ_ L&Se=m^X0O=mTtL߶m+f͞ XfSnv|hмysXVF4k֬L2 |W|VhѢ~XZ!"!2Lӻx-xmSNѫW/%s9_fM46Oom-jBFxQTTuk"33 A3O\L' jG=~}l Zmz[w}[3BatФI7/6݁]fZRʎ?[nA#?vmGNLOA(ϫOVɓ:&&:$Ao#221S<.7܀)= Yvvލ{w&7K%. Yq +a5jDcƝ.k#DG VicYr:1r(Fw6lCDKhԈZƢEɓa[EQC~iJH9+q&D Ʉ+V^\< A@~f&{@IS/iѢf͞RROSO?3g`nj*ZlYװ7#ǯ[~n+Æ vRUKw vT*dI0jH㯣Gdi@%֒r-wJG[mP{d2!bp[nAtt4DQĶmШQ#8q@f%%%A*eŹr -[n{fY:DQ鸴=Iž}ˤʴvᲲ5XV"P~K-ow݅M?\ɓ\ʊER)<~DُZVvAC]qW@ꪫйsg޽K.drc۶mG_R}a4ѯ̚.YSOL~۴nǛ3=jVF`бx1zՋ1²?`uqơCv~ vRIPb) p8t [f͐ccb yw&4 ݻvC۲u+`.ׯzVP\T-[,$^6L^^{TD k#FAnv30}D\@ϲX`-@*Mm4AE\| hPEZK`s&6IĶmېJA@n^23pM74q1?bN"ȑUN'\M=8Ϟ 5~^v 7u邗^~/6{8cr׾C|t~2j"77_E&MqK׮X,J)Z#..Z!"ҵ v=lဦG#ҥ ׯ+ 4n-Z;PRR~4sq!hġC`2ش)nقߎbD_hAnUͮ¯nݺj*|f:?o¯[BHL 6]oAkaLT_P-k=zբytK}`{)蘘"ti\DEGCV`.*B}66.uZL^cMS QYhćDc@Tf*roUd6c{Acx](6vE&T.d;1> geMJq"#!Λ<ï7s8M68rN}b˃JBz^zƪU0gDFFb o0b^ċɇ?ؕkI }2?Oۡe˖Xn}MyIW]5kA{4+VOä3{r)$&&YE޽ʕ3{6⁋۹ɓ+B!"r}';p7?CCX=_~ۍs9[ЦUVf͚y曐~޽{ѣhР!9 0`@,]=zM!e$ 4~yyEbcx@,_o#Vt8yDQDRRv sg$6M(:Q|6Wb* ğ:ysޛAc8ݍot-ň0nXL8% ~vf@Mu8Xj0tMe&q7 |=ރ,WyWo8 v:&WwBqq1z6羁݆^DDDDDp0R\I<߈tR\sAρ)D Kq F TQqKn8v(N<^?q?wP#""+S'`ÝӧNR×kGHwr/?\XAGywo8|vΩQ3DDJrvJX,g&rU[ո@TT4z십[9M0MUږȌkI ."QHh b-Zb.B[;^ohqv܎充K,ڱV,Cdd$ޓ""""""VVp'MQNh޲5?,Q1 2* `YQXP, /MBaahu"""""""|5.;.^w=:^s 23";NBQv[iVsVc 111hղ %@qɉ—J NDA!l;.jIHLL]E:ˈְ[Vcpj-wj;DDDDDDDD^`!.u]"""""""7 <:.{" v"""""""" a Ee@?/!""""""+eV! \\od t6/40CDDDDDDDak]رs$IJU2GD.w m68\\%;DDDDDDD$I¡G "L":&$. "?/K|3p_ةSHubp’niFƐawap8ej5"1x0,pN;v;t:]?ADDDDDDD4Z T* ByuPUj4u]d=ݦ<0}~apž~+졛P@A53Lyxԅ ;DDDDDDDa|@G2ӂ= )߁׺u w{D$%z^~` QkrY B LDDDDDDT{܃7,tB$8Nk^x\W0GRAR)ءVѰaC_6=׎nZj @,8raZaۃ[Ymbp8vFi4]\vN2? & EEEX,ZJ ɤw""""""0 S~'WQNʹÖ;DDDDDDDa5+ׯJ#}RkKJ[@wŒ{# 6l!CЭ[7L2%`ݖ.\1WPeܻbUk #[Q71c L6 ͛7Gzz:`2R6I^AIqFlٲOV.͛{ڵOCՅ#G|.^FR_xe=|oPՈB˖-q= ))v"##+Cyۏjʕ+c={%%%0h޼9zeW} IDAT쉛oُ!"""""@$ qqqhذ!$I¾}K/l6Gw}7Q^=L4 C3'N@ll,{^ѬY3|{ `ʔ)?@=0yd駟Ƴ> Vg}]vo~j:nfhZ| /~AX|9v; 0}tӧOGaa! ѣGow?@j[G2};ݻfͪ&ło+VTؔO?,Sƍy*jF>}tR郁*ݩ/^\WtԮ`|幷{}yw?Fo غu+7*:;|rȲ-[`ذa]|ǏGf#F  2233?2r27ӧ?+VǑ#G<,[ ˖-ZF6mp-gϞh45PDDDDDDW8{|˦k4 A@zLSՈ.3͵+*_uz(ei,,ewZ%кuky۶m ̙3SN)y{?~HnLUvws_wիu 2\/1_Æ +bu88p,Xg}kt@RAj #ep'**Jy-VZ)󲲲#}/qy8prsszjjժ^ǐ!C矗I풒y7ЬY34m{FVV{1Ȳ={x(\DGG#33 >JnGff AsT*v;/4l}a2ظq#ZjNFZ Y Xnݤ{u;D||<Ξ=%K(I~]{rt p1%AwΜ9m*ԠA%3o<#7x񋢈 駟3D~뭷zk<سgfϞ СMVM7ݤv)_RF?`h߾}t: :LO 8qk:wV;DDDDA@Q~. 9W.WpGӡ}ꪫ`X`Zp8t:/K1 ˯V`0quͪʽ{pAO7āxuSNz!v<3eoӦ z曱qFݻĉ"""y3p@ڵ ,S^wm۶EϞ=+Vrr2g СC2ɟ۷/~\pN:aȐ!X|rcѕ*'BE%8kjp8$);.w\FSՎ< Peڴiؼy36oތǏh޼9wnݺUx+XhV]bJXJ{V?  oÇGRRRm.4 ^|E^۶mCzz:, Z-p7c>'p}A$bx'.j1l0,\ڷo5kرc(..NCÆ ѹsg <8|;WTW(jp:AjŽVQ+IU'^_p{DD;T$Q2%V-iTS :ZhENFךL&hFFGkct1-:l3hӡcԗ{UꫯgeU:T//lUm~uS疑eN$)AWPrtwvoݒo1n$\.p]koO?^F+}7[s[rsmy %Efl[DrXK&Z6iNh9DD 8/A-wjNu+[5,[2W8}ODDDDDD5u w { 2p)‚?CDDDDDDD~sE=0*򁜪7 ;DDDDDDDa=Q%O ;,^Xy qWYr*S f Ë()n.[MbĺH!"""j @AEe F ͺ`arxڞ9˖!FTqcGl]̙U.sUT] `V^yJuQ׬l##gOW1WgGak^9w!"""+_hCRv|97gRSq}Tz;t^]ד,Á0FR]=>}x @,K5-1CDDDD5fڵ+L&v+;={h4"99jZiERټ}"22;v֭[m=z=zhDǎ+lMJ)SQFhԨ Ehܸ1>3e… $''{ݿكok?Dzo}EMET*ڵ hkkWl4{׮(rf,ǎagϞ`4b[r2֫ʍmEoomʰ;]}bcd$v|/eJ?|?VJ5ϟbiSeڙGTDpĈD^w,Qn޽sGGl0c2Z(ܽb4?G`Sl,~my?LyKrSPk~__Y-Aύ#plFlkKD(>rZRi6cZE=l乌3hӡc5AE8NшlDDD 4@aa!AdBVV""".[y(**RR`*]r?e*z+V;# 77%%%$ `…HMM1i$um9TeE(UOގu*r!k׮e`(z`4lp M&ܞbo։b zr_[9u\9S}lӭ l Xe;4kk?DurE~}긢Wޜf3~nBedBt"#˔AXSJ]_9+V;|JJ[.+[e@4ק͙]&e/uh[ "=5Ӊ&ǣS7|[8v8 f@\ 5Ƨ/NAVѰq l%?5/7זw0?QRdfn-XJ$!mjvVH8 N䫝y hm :ug}łO?:uR5o˗/GII ~2U4/99| t:lK.bn]7QYb„ d Oarf͛#{rH%%+w]T&>7YXsIÇk ܻ?Sr2:~ zYapĚsm> uT4Y3ϠpNH6%ڭZDҥ,{ Svd~,&~`d.^,cMOTR3Ke~`$NwB-[ԇm[d.^ 빪z;i6#y%?+ ˖>*VceOM `?)OusH>WZso4ho6T*^E-Z/7ިG̙_~5Bjjj@rüHIIA>ZF >3gܹsd2SNΜ95jZjM6Yz*TKRSG~}d,\^9spO oCp.*[oߨQk6m*sz l?J_bsb"6FEa7z﮾})6Ys/@¨Q875 |njX1-Mܵ3_~?7jtY(3h2vli &c*DƦXk7O9>m|RR}{lܹ8h2akN5sS<Wu>*ֶk{G3-bXY nYCGHg,""" %r{p|CeH5k੧e*݋myڷ/ruwGnn߮pySy33cTeZWUV[Vtmyzz^ݲ23ҽ.иIvRB /DDDDW:oߵOOJJBVVZhYfYyϟy%'e}]ߗSoU*edJ[V -ZYw<>W}]>w2p1Wr_C9UeMlÇu}yM.o}Tr%qmp"""s)y/ͣ+mnEi^2+|kl7>s*,ʃOECφ۰Wmw@JVg;^qy:_zSjriwO!,,r* QTϹs6 C7jȜ;u 5DDDDDDDu{r_A^-?C6nDDDDDDDTg͋(B2SI|"""""""4z*\LϧЏ\p*@2CTw ΄Õ [J~c}x -<_jXoRSʺaUXu{*0ΐ a2KI\>W16qa݇77ͰX,F\\oj$Ip:p hZepjdۡRz:J3 UZ/,%).)kyQ!KV+ڵkjܯSNm۶u]$A<+x\T ?Wr}I͆\)GEE๜\oĂ>SOł $Qq}#77FVVp,tjBVCS#-L]+Z V ͆.f݇sQ57.1p8ʈW!NV;(dt:p8PCFHւjZxEհ*q=jvs'h1CT\]$I t6-e Η|=A] Pں.kJ;TM-+_<_s\ނz+uQա૖O9vJ m믿Frr2rrrаaCݻW_}5?СC* C}PՎa+}*ak=ea+ Bn_++4JYjѲeKk6lX梨2X_߁{Ʉz )))5e<ؿ?z<7n\]y~tW_}SY/~7}/v]K8JWgMT6^sĉy< @N`=?ݴ-R*?NQri ѱcGlٲ۷Ѯ];l߾S#[2opܕ_:\9ܷg\p߀>5A@Z6eu^[eFf :eV7nĄ 0hР|v]w ֭ƍ3zh;p L>cƌ ʲ*w?>zӇ~C}/J]Z-V__Wק{rz=fffٳhРA[8u6 ͛iӦ!55>`Rc.o38wȕ7;ѕeXr%dY6l,صk tl6|A̚5KiRTT{Yǥ}\ǵXj,+֬ZcǵXט{X*b5~4i%{]eO}-ZDOqq/_\]nbĆ@ Ipԯ_̼?vqm?,3u0hڴ)>seѣGѫW/DEE!99uj1f$$$cǎ/1j(4lC ={|ڇVŸqРAm6mZ ekZ޽ e󐔔|lFRRRߋ-UW]HtY~1111HNNƶmۼQe;wЮ];|g{OE?{E;%"҃T. ""^AAE*( (H *"E iBPBHo3qlK6ey3gΙ3FczW>?]"((۷,n屢6lۇd@RRۇ!C;OGukIiuԋgiB{^40 e-&M~H+SyGgGή90evm۰m۶2c8u1m4[}z;85xg}]t {/Y-/e7VyřgϞ8s qI& )))гgOuYkBff& bvܼ<Ka9MQl~S-[byxaT4iK. /"BBs0edH{#5k(b̘1Xfǿm\^`K&L~!11yj*Vl8 vP+zߟ: \DIIH~zǨ :Ѭ3H~>Fh0z_`5}A!!pjBCG;ZgG!Qnb$IGFF.]]v ~;v~ӧe˖~zYE(ر#ڶm5kX}[.WRetRK~;sj9vA@.w?iGs CVV{Nz%#"|}}onݺ(={0L8pNo$''٨Q222 K,YgΜAjj*rssu;Ǩ^et:m2ۼTYJ˲'ĕ+Wf͚jժ3g֭[9s@]11103f Ə BVVNOsNDGG#!! 8̗c&hp7(qij 7nDdd$p4v(۲wTYʾL4 +VP5J~ػ8WW/k漣*rDݺuN D||<}:L&f3ڶmu֭[GNN5_U[ի#66n͛f͛7ƍNs'~۶m@k B6m4~:[GǕiZe p?9sF] e `4+eyC]88Wg۰WƥG}x@m|7ndW׫ߕ`Gs 6_|,8pTj˕xAe5".(_~8{,IйsgO۷o"Z;ТE 6m\Γ/ J奕4>Ϟ37Rn`ƌ p n(Y\1rJ,]!!!h׮f[y+IƎ9s`̘1v~:[wrVY;pGY&f2͛gu uh_}_Xn^ך5k0rHz9r$֬Yd{ュt]v=7k,Ԯ]ot:]d`y,մEKuZݱ7n`,r I4xԾ4ȲmiwnqIR;233j*K.^쑴mi=%@k~d I6RecJ8s*wysvLk}JE${}ڵbሳsTΝsWw Wϝ<,W욭|u,zvw{yLIXPG%UVNihmÕ[Uf/ZaNv{ӛ p;(Ivލӧĉ|CBBe)y Ӊݲ^)\Az ym,z:U|J\q%JF<\?||둴(񁯯(w g˺z9;'"kװ lWKISu*uvv6Yݖd{jx>:*pmtgל:ˢܽn;ٝ"gg͑ -=y=Ac7cp>999^: CA+ J5]#==>>>U'*J,^`dgg@ڵ k.9"$I`lFNv.rr$Qa%FfW>_8XrsOU./Ʉ4$&&";;aaa`Ő*Al{;ERRBBB.ZDeDzF0 HMMٳgQPPWћS`PP,)?lf3f3|||~%ϳ=CBBX׻*ESUKDZ2ޢW02Պr/t:233*2$˲zm2 ^шB,˲՗@-ʺeɶM&8c.}.uQ<,7TR[Z DQ;(Hr<^xepGa9xe,Ya05WZ%";e& &ImmQY[(,VEf㏀Xe_~ `]=U,2>۶\jv=W\fM 䙝)^ܱ7|'fޞtBYu:U*[E˾rczW({\ hx%JzZoB``023!i#@@PP0n/Ww,irUEDS_@ťժF#HYǶ^]޼2ȱQ`A""""""ÕmΠwl[d6(+;"""""""o(c-y*" u֨DDDDDDD|rygk97w Z8fV[% iSUyApe{飌})v=&Ν't6ć.W_mƭ[7Ke;ٽ}U; G-x bEQ!˸'?,į^3#FN[|唇$yc-wrss??+ɶǎ}Sطo'|mBqoWө^rGNŲyx+ tAA;aϟW'1q$Ԭ 2r.]B\߾ Ѷmv0 wqzPzua`2OƉݻ#imY|nկ}8鸅}wt5. O Ѷm=BU8}xWnغu-Rn_$$\{キH`0;#--եm"ܸq6,ܼ?ƺuoczC/܄u`ֵ4Uk;XwEDDDDDT^V^Nj\e ң?e_ lt4jׯoI,ֈ? n܀-ߏZO<8;~#t4cǾeMAA>~(jպͥm@^^x"i< O<47ovYͫ_ xbx`pu]ONNĹs?^*nY t1m4L6 2x51 !r?W Z#Rccq®:NA D#GP'PS*e3jF矷$.n[|b\|Ef3- {b/,<;;v@. j=GiYҸq np } EQѥ˿g1h(t:{qm=6ind4m z͚‘#{o0z= %ܸqn(t=?*EpGl""""""o0rHFH(SPO@ p`vmxD uz ??thqf:m ᣏ A6 Muzu8po֫ΨQ'u޾8ʻ#פ 5}i%h5L˖Shٲ=6l`$qA ۇ}(xznݺ07ntGt$,,.Ffq¯ Phذ9Q~ԯDsŋg~h hTK`yC"! C.6VkܳɐM&hNG ״)kmx\x9n;bbX5oQG##}<|jo8vQqWocSOTpiIܫ׃8th7$IBhh8 8rd/ڶڵ/G]w ҥbAȑʃm:ңG?8 ًOwaqз_[Qԩgs\SR\O`^1 IO/Ag0uǨ FQk >@o@1($Z_H/&?44)/4oٺJDDDDDTȲ<|e4elsu=g;Ξ=-Z8\ϙO᫯vvDF:>(55͸~:zS@QYcSNZjJޭ[))iiܬL /7?7'W2嚤|1'/?_g. b^)K1AHӛ  @^vTҶ!"""""̭ IDATlws5}O䙨eUu U"wRkdQE1wR*ccpȋ1CDDDDDDD!"""""""b y q{h""""""""OD} y1w;DDDDDDDD^L_( :ڈGf XL+K"""""""2#˲I/w0J凈*J9l$I28bo^NSGt:Qqy 4Qbbbٳ'ѠAXB3/˖-C6m燦M233m~X4i4h___hK,)ڧ'"""""""P)[8j"|Gݢ.2220aݻ[lQ[ct:޽{}"""""""*} |wUFIzT[ϔ1Sz=v؁z C͚51x`\پ(;U+ eZQ%>y'v""""""""b y1w;DDDDDDDD^wQU%EDDDDDTQ2MU9 gAyP:y}Q)U>ۛNTo϶Ay\Q) Xt'A { !"""""09JFeHdW%=TXhl9(Z]Vex/jDDDDD=tl_,l6[-g>Qec:N (/em+ x""""""`ر ffL&Hl#IR9Qlsz=t:e*cp;J@G L&yܡʲŎBGAC`0yq;DDDDDDQ:(((@PP W7T/fӑ^dࡢ!"""""*!dB~~>PVM IfHR> otRAQZ5Võkא -5,Z` y8;f˃/ I*Q9RŋvlpG; wV;zA|2;DHK]E^^.\[Me{?!"""""vvUO"];ŋjp'//O|vq*"""""풥v `"'ڷol婃+xcpCl<c(MVHIIQ;ݲlY&k VQԁO"rMqzbG9vr>w<@iY)|y dddjQ1h `p5FE:Z0}yg4,(]F!o 2RR2Iz|r,nܸRˣ݇ YMSOMF`$RMVx}7UXf:Nmc9ߪk;Zm-emmpd2Y L~aƌW@VV6KEMYp= Ν; س/gN9,[ؾ,+Q|k;F}.ZDDDDDiۗ3:?6oނm^_xx=T\6~xq;w!!B۶qҙ"7?|O=5g&MرC2cL7|7ߜ:MDjj* cv2dpcc`Õ+Wqaׯg[hڴ1=h瀀0HpdeD``8ڋڵػ7&< Yf*S]_GoΝ;,C>ݪ㸸8~۷ F'|B?)S&cР6l:…_qtƍV[Fh-K/cѢyn4hiMm6[>(33Ū[,HJJ￟{X|e<4ΝΝ/?GDDuuխ ٳҌf̙=}]51ڹc;VY^|: `\@[?} M52 N^^^W[XvRTrT;Zϱ|=[ԩS~BHH$I7\ܹi߾[4mѮ][3g *j( Cy=z OP]+W•+WtsK^p>O ٌQF`XgD$>K.W/^̟$Iٳ; --~;s_зoՋ/fϚWg[Y@kWĶ[5њ֛aCƢ7ѿ_)+XUkWGBl[yѣGaXc}zܹ_oo]̙V#ۮ/BUvꫳ̤ItX|E X8 RU[(>cۂٻq &8ZYYw!Wh oG~~>xuݢ\ V' {'8ҡÝ8r lݽ8>ދO;iUWwl+*W$QEp9+,ս8hWѓ,/k%vʟ#,ko~8xx5[XebQq#99Xc'HS;/(TiZ8c8<իӧcС ŋcݺu?Qn]1|uH,HI@vv,"{ " U"\~uQ[(k{1=zǎC:u0h DGG/L&ٳoÑhw[i9xlٲ{޽{O>=ZNDDDDDTyd`0iӺEnUy͛*U8}(220sLc…e;vPxHII 5k /?8]ٶlrsLPtiADDv–;.UH`ر1jժ  ON5k֠VZ>}:dYɓ!Փ8\~ܸqe3'O^ѣGy,#** EDDDDD$I(^߽T3݁xk֬Af6m`ի16l@-VZ!&&SLP4~9Zٶlrk׮OѮ]; 4l3gĬY,""""*. J\<><OÇW[E18p }Q?[;ږVZ {O۷/~,""""m].JGR;.eww)nzDDDDDDD1ʬJt""""""Ț6mڈy_ѣǣNFظq:=64iV"c׮oЬIck<Èl,#.$v.:߹2\lw1cLuQש4aaѹvx(Ԯ6lt-FNwI? /LgK70cRwXDDDDD.\ǎŒ7,cԨصk'f͚N饗x8pbؾ筟~s_GB̙=/͘_z sfϮGb[QQCp!#==ATiӱaHI G[Ư2[l F.g0j\;d?7|Xf*MpJDDDDDh.t|wG}q7Znuڹsѯ +6Xiu֛p D {N _-ʊr*_^QFϷc۶1bp.gG>jk-m۶Fx̙3 Puذ<)bԔ2cr/V$+ 1o\:OvZZ5q؏\lӌǞ} ,Yě앋1" ~=mѣ#GǾ}bʥxWXy&n5kt[͚5Ö-[a6dBL<YHE7AM,+V"yE#*j$X,Z^~% v䱮R4 !ڂu6v.%3Zj&{b|F#:uOuz.q%T_ӼE{EZZ:>`mX'N³>&Mu z))71u Xz%k]؂wS*SEdggCh4wz䑇 jVMQQC1lؐ"˗ī3&Aa̜CeZ8+{ G/L;VǎwرCE+=ƍe\ ??:(iSUympGȲlEHOO/Q ˲20L(((@nn.rrr\NYw,OHTsdU:܉#ǎ{l{e^>Ѽy3puw਎.j& yyȳ/  BCCW$S[xmp%"dYFpp0`6!If3dY$IVmpGiU3"s%`Toz? xR0 񁯯/~6 ttj<6SxepBirv9eY0CDDDDDay{H^NWyE$OV/U5Pщozz>)nYUn2mfy I; )$'$7) Ɉ$IHNNF@ygʀ (/eWj:P;J$W Xv; QIw,; DJJ.^I5/%%"QZ`ygʀr/jUZ!zJ r; QIiwfzYA@5DmcقreEV%^<Jep(d2U;Dr\]@X;U9xyp@<Erbpȋ1CDDDDDTbcIh*Ҫe͞=мyk4k WaS6nܤN?zڵzbv7xpjn 6֯3fT=j8:%&wK/ŋ[=hڴX| V\iӦY1jڵfQ? X-l۶ 3gζWf`˖?!dYFT8pHOG5w [;w@[ IDAT.]F^=!.^l5G V8m(((@bu^ǨQ#ۑ##FDe-w.Nk,[رs-lXI/zϣW^GHHH/o,swϊĕ|UԼ[HyЬYlݺȸQd͛=h֬:mĈ(|ضsDG^QYbW-rkwPJ9)]~Ԙfd VIt:s*}7z'ΝC\~=ݻ!2BwïiXڪU8ys-\umHyyHG=zi;alٲ_|վ)壔7(i:[߲-u8:nYߝtĉOoO(2/kΎϊze[ZQgffb…شiOG׮]p{Q˓-uU/G}>|x*.'Aeļ\_l1&MßDӦq"눢޽"--|Zo4ѩӝ8}WDDDx~'T1NdKgrNJdRP[o=2lj11f\[?.?N?$ mAȑsn5— s,򣻢 *{eNi7(ɓ6.kU۲Աرc@RR<˗cܸq NO嫤ןYzr `Ŋر#Ԯ]ci}QQC1l?c(u>q/V +}.q"Xȸaw#0} n'B玡y4ȹR+ٌD|vtbbbSHNNƶm`Νt K3`_~?Zj{ƺu+%IoM",, Æ Cjjjt:ngFFҖ-h٧B‡bNb2uǎ>$0429Wiԟ<g΄F ht;f{M&k6b><Wt`ى'ЫW/^z7nxPNԩS?<n[aժUhҤ BCC1l0YOЪU+@e7ߠ[n СCq-͚5C`` ѭ[7?~7%9nk[@Y]vGNwn݂^Wδm6j ظq#oߎouŗ_~rR^ث8\)c[ZoHHH^W??Zr؅Qڹi>TBCCa0Pn] 2P]Կe($I… ѨQ#Zޕut̸,/hpJ{W͛7-Kk|9*ogLjz^]{8p`4 50k.˘:u*֬YleΜ9gŚ5kΛ8q"?ٳg/dYe9MYgΜ94i͛k׮_~[NQ:Ѽywh;4 tKᅬ۷[ÇhGǎOq8ticbԩ8p .]tذa揧 6 F,[ 8z(._jժҢd2m^ s'?>uիV3gʂ=ʕ;fFٳ6lzCr`(ÇaÆaԩHHH={ШQ#u#"".\ 7xaz,#11w̚5 N A\ѣGqF矸; o<322Xwޖ㦸ǭQe dYƑ#GqF$%%!** &LP绻L+,_~}b 9N±cǰd.ש+eJc_t?_+VBDDN>d̛7*]W,/hܽ.Rq>~Ɲk|9*ogLjz^]1'NKe/_#G`ĈN={ ++ ӧOk|gV\|X`4h`ե[e\v ?F_?_k BB>ժT Co\O-[pW]s"euX;EcXc;v]w݅۷oNLL A^G5pw#44@X/Jtl۶ G6(?-WV W^EHH:_eueٸ8hr-[ġCPZ57?|\z+Ⱦpqnv E>wމ;`Q_ cEKޱv޽ݢR F^zyWN̚5 C QPѬY3>|XMƍ֭Ο?o|lOHH@npQa28ێmiiih׮,"??ߥ-{靖v{ږ+e`NVVÑSslhFnn.\#//ϥ:uͣmReq|[wv +I@\\,XM6F>}i&>|cǎSO=;S,\9V])[na޼yرczݿ̙3׷[Lkڴ)N8au[gy9qgo;eusθxru+rTΎgY],Z׮]ҥK!Ljժa̙ j*W_}ӦMSeeeaΜ9X`AZrrr0g50e;6}isaY/e,CeHɄ|"++ hѢ$)yB^?iӦ8$Ix"ׯYYr4n!!!FHH___FuVj3?W_DFuQ! E[f\~@ר+ܔw+55VJJ~FZ)7+3?33S.ɕLy& _י sosLE3f E` Wg?oك rd ( | M;o3BnPV-Ƹqڵkcݻc߾}Xv-/LZMo/*j:::"%%L1bb,]\#b ?#''yyyسg&O,X^FFf̘I&aҤIMn'5yyyj9֢c8"Ϟ=N/Lt:<{ JaJ>P{DÝgtЬ? ;H\ wcmm͛4ooox{{RSS+,c<<<ǹxѹsg/С 鞞8~8D" o)*;>rssyr VZFO A Vp}!p 7B-BǣX>wlp!=B|^6/g|#$`|7۷/R) -[ߟб* R@`ʕ  YǾ4 wEWl1GϗBV}gƈ~eü/jժ0lٲr!!!;sPT6mZ߰[QQ8eZYY BJeR###> <RJ˷HNzn;H ][Lv4a۲ߑܸq+77дirfΌ3\hZb&#<<۶m?lH{nAڵk6lI]7773'8H{w@3ߔevܽ;֭Ci^Jx1\z6?RZ ͓'(NO_4mdk">>2l5ѣGXPP͛7#,,… (**BNN6mڄ`HB@B~C~ yiiiѣ5kDEEU_\~Ǎq˄(\KdžP7eaeȐ!@HH$ BBBj*w6Nڵk($''999kժ6o V;w࣏>2MHH8"$&&b&_~Ř6/譨9x4i҄gƈ~5/L:[l1}tQ>ܹ3.^<"11IǏ%%%}68uxxxܹs())AJJ v]qBD"AڵРA]4lFj_u޾Yӡ;,^<<@П'Lv^,ZJ,u_DGG#==]^ \֭[q14mڔ^C**1qD1Y6l5kӧO7ECRa̙4hIEaС]6Jp\͚ >} ˔߼yׯ㜷7Af6R"#};b۴y__S'mlLn:.T b򙍞={2>H&۷ok׮prr‚ mǜ9s___"==~ʿ`UVm۶q$dXd \]]燇p888W^HMM-nB?nČ[cG>}X:6"=|,_6FH +/AAAhذ!X֭<==yN.>CsWz:uWcw|;ЧO~c7ӯzĀuW^h޼95j${\.ǪU0}t߿[6KR;v | ,X45Sѣ3f`֭eBP^m,=35=P;qΣŚeضw3H癗S<.Oz岝-11[ƵkP~}#1em~B+|s4]\ϙmzѸ,g60gSB2fkqyK|Ĥϼ>c^ќ޺#46;Lo܈WL-BlEKd2'Toy`RRx&.1s.<>=Ly|c^x7n&N7xULR_/Oc z2R*;f0.\$K_ɧ³Mte/.yBt~XjqA Q41lu%!6p6 l bX"-}-#F[9+2 劚)Ćh:g+#TVL9իW ~VOy YR"IIIx :u[M&os( jCwpke$1cK. BPD_`ر8p`UR]BP(`#KۆR HՋrпs1pSZZJ(啅o 1|/C j3( B]ܡ(zxUUn _ʫ  *BP(5 CP( BP( R; BP( BP(5CP( BP( RoˢP( BP(j !Zm1er 9}nAwP*s'W -vU/O+5WUaoei],[6 NBP(ejʁT{Th A Ձ.T扽\.=b32N4g$?BH\T\DZN:-…p S/G|e/s/{N;Ç矯KmUFuBPHOς|$'irvEzz+RE%2e,]lլH=L8MK7>ϝ;٤^Um_}YAEw܂aL?~wp=PB:^LotVS]P(!thEi {GdffN:UT`׮(C|τD"RZDR ՍRŝהyNΝƍ+h޼ bbNѣ{5;7ǧ :v Pakk76m8($%ɩ6.<_"I;rdO@F3v$$< ÆA\l .\tֲ\_'~ i2a7x4D!55y`0ԭꓽ{᯿nNaރAOgd<ÁQHL|ii)>C.d 0 ܨQStЅ_\>(_2].s'-ȨS<ԓ B$pu#gcn\/ƫvr;l3WۇM!bə;w2t:͛RnΝ;-[wTڣW}=Oφo0[Xc\eBPj2%%%HO@]TGégУ[75iR ˔%Çx!557n29Fvʋ"BmY)AoƘ9s~mێxh CkυKxZ!~iΚѬYK,X  kY6o2oGEؿGk,XAy~: |@Ycۏ݋ѣŋײ.y  V]N8p ;w9hдi ,X c:_O@۶w%%h mLXK&ܥK7.!5׮]峱a _ls69CBZc֬/0dhZhY{~ؼy5]vŸBdt:|M!f͚8~$tD 9` bҤ&{{s h*pQCzT6J:RNR;;gBp)4n~~8uꌡR;wH9J ׮]G FMnܸP & G@@sR)Н;@m H퇂5 ki+Wb Ѷmrk_ٳǑ&%%%:1n\8rr̯?.`0n ! س IDAT HRB 6>eG} D`umgjj2ڴ \@۶q~N~H$oMʲ3O''U r!T.~"KVV o%Ʒ 34SAw[`Wz<1Nءi7WC6/!VNE=m!Hаa#H$@ 5s]Bb\EBP^!Xrܺu пArCCAD*$$$ȑ8{$&O;mLY J&NDY=ԩ#&:drs_ƞ382vlO!Ccw HDcMZ3F\ccH$Ï0vlƌ +++bl={>V^.]:~}_AC/E͗y@|\kkN4P4l]l6ܹHL|R`!*ce={)w\WzرZC.W01ڽv@JJ"~%\nݺz5mtĕ+1psԝ ;;{\p^vvwwOܿۤϜ]p BR߂Lv:a׮((P#4߆t.q K|Ɇ\@zz\]2拙1`PT!JakkǪVy,/;>X҇\:G v^#ԇ\X:wӄĸB*͛C-[r<#0|w} @s,Dii)Ǝ cѣ8tGLdwII)cO^lmh wAh軌޽ׯ/mPK_ܡT).]R)Ta(@d < Eh֬eܞqAyv1bލCvj׮.k7,FF388 A#-jС(9cذXJ$:ddÇ5䅄bǎM hѢIP%)ɬO&/.c/x͡X~9R.\ fhD#9owᲕk[:;͝ٱt\GP2c\E9Il) &@AZSO[n7;v ;w\.Ǻrv>7aOdx{7n_0aXH$899hҤ1OD"wY>Kl_<} <ѶmG~طF LfŅ ib)ד.1,\p,A)uV:kN.+JerJ*WHm66FipptT8X;9;::piOĿy9J16᷎/%"[1egNsG&]exBҗ2\? NG;3f|fS!ݵk z~ x4.?YK9Ì0m/}鵤L:0ɳt>'ޘY`\C>{*2|&|Q(yPRRVB#//M6NdFQ7nDvA; ~Xj}UWpvvիW1g\cҥޣ; 5uyz5˱hٲe9ފe>^@xt<|F| UG]s~c>$&>ɓ0yr8!شizƩ[>v`uL:w~~YH$t2&OÇqŋZ䛝;wOc@Sʲr񁣣#jժGGG888@T VVVJ&;ظs~(\]aPHRH_|6QRZTt`eeub_vkr2ڼ|VVBmPWRTX+J5EZXZ\Z,-ҖK5%JKcU dɣg=w>Н;)ƃo=^yeeIO)MW߾8e n?.\2눑e?e梠 . -S~: v a/ 7l/îW<6gaI;t ;g>F>䳧Rl,x8.} s:e`2$ĐޫWܻwSn%kР1p[e۷o ΗIkkh9^{)K; b]f oVUmBP((A&a[d$ƍa֬OA#+3CLKiI!SH=1Dt( }:B)-@EP( RYBPRRM"#ѸIBкM,Z ܡP( BP(jDmKOSR`mmB JKJCtv8y={@nNVx&I5BT BP( Bfd28:raOnN&ztlرn݀c-7>>ppUFR(j]ܡP( BP(jT*kmuJ8;;ޞBy; BP( RMH$pppRN-/J!GR(5`qƏBP( BE  BP( BP(5CP( BP( ReQ( BP( !Zm1er 9}2Aw( BP( jV*de %XHPtqBP( BP!HOς[}dg ';B+Sꪂ\.۔JW~PeSҗ:;Vd221e_u9%KT妼}W8seIܿݻwmjŌT'+2Td9rBdUwjj>BZNHOGxHO#233DZR3!Jw.2)VfeuWsnj'Ua癕dIuRZZ D 2L>͓'ع3&&"=\}M?z_ASp0^ FOw@ƍȻrVP X{xt芊{99\DGGc߾}8tI&P>oeŌq#Uɓ1f믰r{˦?,]V#""wFbb"T*틎;7>KK[ʞGHHrss1jԨ YѼqX]_9قy8u zt&wBTw g]Rvq!JBw0ަX_M],JKKQZZZq`Y=:u ]kW#G)(Cj7yx֘1pOӭ[i{ϐ'pK ))) 1֭[W[b|4n*ʕ+3f lllة,Sa_>.\_LtTaNEUS^H֭Ì3Rar+:)F#((Ѐ"O)ĬY"OPPN7L] sƍ[ o?3g1^@VlÇx ;!_fPСCgƹ})4n~~8u!]TaĈP5Ddd!I;w-Y# gi..nشi+.!2|6]aƾ&iV SZZO~`-#lڴWZÇm69rjڐc֭ػw/9ett͛71p@ԫW666ѣ"##Y/Xb 4j* #GDV? d2HRr\&Ý㑶oN(k#dx}X9:BRkth?6h0u*|.N]\=gr/\0ӻKK]v4IgZ,|2wxzzbĉvkZ̜9pww'|"N2 7n/0rHڵ ~~=+:u'''6GNpEvsmܔg5!uZj;;;ի|egg`_1(pA;wÇѤIxxxرcTυ>GH csp]@JJ ߿[bݻEĉ r9<<<;ٳ%}Ot7ЧOB5fCl4uB砧'={Lo8'`-[`ed 2n:u*N/mɸx"/^p,[ ۷f¬Yo>ÏH|ϝ; 6gÆ 8{իWg?ŋqu,\~)nݺ%scʕ裏0{lDEEquoaGaq-4B˭Oχ~cÐ7.\8orN1߱|Ci3f*< ~BaǎZLH$̚5? ##g͚oׯY, B0oٳ+V43֗;6 v--?{|^gϞ\@6.\8s"|>agyH9ZigNvlݺ69l'F N< 3:u©S8Ϙ1ƣGK"::hӦM9r$Ǝ Xv-88;;c޼y-C|wI lƽ{O,,\_~-[P1aA矛,d> -MI$vGFGiUɓ6[|9\]] &&;wDZZBCC1i$CܼyNºu{ڵkpk|駂Tυ1Q[_ cs ӧOx.;;;íΝCHH/pN>֭֯_SN!99ِtW3ٹqF֭[x-[f"W#gKE9hظ(+c5 ;ዱLo8'`믰0\|=2CLL 8e.^k֬ʕ+ѲeKE B0qD|WСon_QV-,YK,=~WA;v숄<{P>==?FPP~RR>9[nEBBΝ#F`l18m˖-۷/VX3fՕo;|;7o;ZXn{Ɲ;w.W9=L:VVw>|su냇ةs,D.uk$Gн{Wt KO˖ѱcqӥKg4oG~}Rl۶(:#?@.>\ ?FO`@ 8 .Jeu:Sz6 pj7S݀=ӿA>Gk:i--\8u]?ܕ,u&yY<>Ae'!EߗIj$%%1<-::h4B!DGG=J.^H4 y 9q`$ tNNN$;;$߸˗I~~If͚LgϞ3B䬗!:ɿw&Ĭn$Crwdr~}Ӷ-)JMev09FϞeC")# gϞ1晷͍|w$++LFyiԨ'''///CD"!6iZ&VVV}4q\s:jX[[[>!}fn FCRw\.Ol2OkOeo|VBȕ+WȈ#N#oIPPtdҥK2V8++̜94mڔd2JƌC4__2P#gKE9(fܱyYs0==pUȹ?#4{&+""O6|(,,$'O6Lt?А6|V yyyd޼yod׮]={#GjdҤI&ߍmky̙3ə3gʜ7Dt:)--%DѐJIQQhEeg3gN|5w6r1^A._%6^A<ꑆ |4oo(#HHRRٳg;iٲ!Mq{?nH~p<4lY:\*\֗g ?ƪ[d ٱc9z(9s ~:#$''h4R\\LJKKo_JZlI"wEvo'?aۿ3+rUrUrM,t,rW׵pIN=z\ӿn@ξZQz6 pg]׫RY.\8<_/͋:hoߎG.Ο?N:^zP(PXXhk߾=pi?[.mjۛ&X3I R)R)ԩ$8.Ἇ qBy,{hf _ǏQwq;VB={8[dOIP۷D:uЪU+=III&rDO>5I3/zLd&$$ <<m۶j׮ͺC$!V uRV5|>!}>_MmllLۧaO2Ʒ1bbhӦ  HNNFrr2Ѷm[LVX;w ''ǎF!.CccF-XK"5y#$ƚoKB ?#''yyyسg&O)#++ v_|Yf?6< kkkggg6U]vסhPXXK.{urtb΄ O>ŋqMu_G!8u VZMCff!r ֮gQ#;vnXnj@Ld'`ƌkWcѢQ' ~z! ;˿`LÔ)SܤLppOL606l?6yg4-UW_-Gh{y-D&|RobAl5~U6m2y+g Zzq :666Pm3yyy;w/:?~80}L)BH{2m^6FH +/f IDAToзo_HR 4[l?g=cUzJʕ+yl`nnnh4_~Ř!;>_ [Qs0''nnne,|mi+0Zj!,, [l\.GHHj׮)cڵhݺ5ƍ'''( ɤptt\AAA8{,d2ZnmOl22ѤI|(,,˗+Wg@AqQܿw3gĔ)xbc)ӷrE,?-}vp!O/Oĉ: 6\CƐ!!eʘӫWܻw̭[W<3Mq{? }#GiߠAoc"\>agyHEwsxOEm7|nnn}6q]?(--ENNҊ3f ::jMVym۶6ؽ{7Ҡjq5 6̤H$ߎW3g),9wuPl-^ ޽ ǏGB ӡ`=M6]v-amm ///8;;F͛7ؼy3x PTTlڴ <;艉VVo~УG4k B/.?FȸeBx.gcC(Bʲeocİ2dDDD $$!!!Xj;c'ڵCTT Ǒ.VZajs>#߄(**Bbb",X`_>[)oakRފW\A&M8Xc8'WL'N-[`>}:j56mzA"&&FX/m:w:v({sԩSmtn$>[<<|7dFFF"<<իRSS˴1m9 io*Ɨ=KPP6lh=[n];qI-[DZZ֯_;;DGGCR!,,^zݻ7ԩc_>[)oaoRފ;v@>}8ߖ!>b^8Qn] ͛7GF8رcsN|GXz5xӯ_?j̟?χZIZдiSxxxQ+ƖѣG#&&3f֭[cR?99_}MCa„ BJJJ)Px!hݦ -Ž2Y~amDX:#ICe%2t2JgerELVXI F"Q[( 'k'gg[GgnzZ*7/gS!dFOywTضw3(ˊk_af,WöDn׮]CĔmWLHRDqIfGH˲}jS}6; D.lGL=eY^ͩ]O;Bjиƍq$?!tVdD&}Bw&%%gBnw|uwy岕ggܸq8q"x VYB(xZ?22]t/gY1w\}7VkE~1EӡZG^^6m N#ZV͛^>tR>!P'N@=m<$-x2+FQ(Ց+QV-8::J666P(T*D¿΍k嗣psuBa#J!ݽTRZTt|w\Ődeegei32y99%jZ&EBMDWjZYiXZ-ɗjJ "Ǫ(t/?BKcƫ`#.BE%O.ԯ_VBxx8^u=|x˖…S_vrA}@P(BPռEEZzP^CjMܹ1g$,\uʕ6 ت>`7g$V[Ɗ/ z՗u}h\Nˈc1||*{Gy}V^( RuhZde@W*OW*CVVZmUNP^"ʯ),]E8|xJJѡC6vѾt̝;Kn[yeɭ}QU/o/{.ff׷Imy}V^( R5#== n,: ڮHNI r"J ju=p`#/JUCw^c$ mwݻC`dd}o͛7̜;vck6{u:͛bЗk~;w Zl@G^p5&LqkQ( fBAff&j98!#=ZmzEBdS㱃[#wI<0|̞=ӐRQ 1=6PU3;rr2A ` >~i>hK$WuH$ @ł_ia1dAۻ1AHJJмyk8#ѦM\ј2SLc݋qѠO/6жmG?~jHR<~ÇO0.8x0͚S`ٲٌۗB Pkl0k [С]q'700C;7;MMW=! W:DC`o2|skP{oBZ#$$))U }CFJJ6o^ Wq3n{b1lr9\BP(5g}d V3ѭ4 qPwll7~pC|2Bj1ĒWy¸m.ҼyܡT:)prr~'''`Ϟ`A86oɆ ͛峱qcD_!0-LƻdLm`mm oo?6m +жmG$5G}X~9bcψ0ldBam~"ڶ \n OUbe$&ƣSU l})+0ǧ1rk4oOrk67 Ahm;2.p7_Zbs}macc A"Zh;4lM=l*OS( fh@b֬وX'NBGt((@c>|Z| l[[[j{49L0 عsIFMҔJƏLӧ-Z8{Zӳ>j(͠RCΜJt:JAaolvf!(*\vnR#Bц'Oq SײS6&߰2=qm!+W׺ed_ԭ뎫WcѦMG\77֋v@voU% ?_o]ٳms7z 2rm:ѐ'.PjΝo']L_i1lm36 //vv9OO/ֲ|rr.\07 AhRŢb'H \Iy[5Gl3',>-m By5p&`q-4Bye&%%# $3vlO!Ccw F\cc񆝭LgϞZ.]:˫Ai3f*(v8q2~{$ f͚S&61W3Lvpg'0Y=C|}H$vB0o>Ę1_g.kCbcqS6f02?bRuTWy̝;2uCL0b8>!:Ԯ]s QƍE;6E&yo9/T*{\v}Dȑ}WÆZo##jaР_Lw|cg`pggԮ]RNN*C:Wc/l>#cQط/@f-9./Ŵ6edeeË,\D~X4{b_]&aq})r$lΙ3g!-]Ʈ{.c'_1!ZkK[, >&Yc7BPPRRVB#//M6N'~AH7n} $|NFn`ooo(w1Zr[_j /ǢeVg~|DD,Ec,]%oD;;ggܸqs[ 4D۶n֬lh߾!=((}}L&+s̼q{ O8˻{74iҘ1l6Flt`m3ܹ?t ĜD"Av|?, M4g6Y6OʕUR ( XYYA*,^q5QJ0ԑJl,޳7 .u0dwkr2ڼ|VVBmPWRTX+J5EZXZ\Z,-ҖK5%JKcU d g{ܡT'EI4%L.Wy'oAeVN,}Rк0Nofar]>WY!>fK|X,Bˊgil&,~g(?F$RBP}QRDD@t!£ E TTD@& (HB+?.{۽~\Y""RDQĦ[0kl|9c&w^̙.^C QT/#ix8y_СOh~'̜}ছ:geܸWѻwpCksȑ/_hܸ{i?SPTTE. 1c Q`^Iɽn+((D:mbמQw!"""""d3"!3#5á~||Y_s]>r:7HII?Ï1o|?~:tݻߍ u:{ 0/e1#cLĠA1d@w 5Ǖ.WCDDDDDT\[.v֭[e˖b`y5$!!K?aW;>; yy7iVXmx| fss5k&?頹̙w^ye*zѣǸЙ3g6&MzjEvڵopXaYDDDDDDTn(wcu8|^~e1'Onǰ#pg;s4n5p|K#??S~/: ԬY 4ѣai%""""p8p!3#5á(-?bIX=uH2A xyf<طo qa <?`0a9"=z3f]Noݺuڵkѯ_?۷8qz- FNN&{EݱqR:t]vņ gwԩSyUQ PWPGEaW1FB{|\wݵٸq6MĦM[7oވX{i-[,߱c'Zju㫯(  (oܸbc`hԨ9bbѶM_8ﮫ*:χ x'>}@E{E[lAxx8,X,[~K:| w9s@K8<>C |ӦMٳg=IJ`0SNzHfϞ\<HMMŚ5k[T{Qՠӓ~ԫ_w}tbpͷC>uFw/{G;^}u^W^Add$&O+V`J-@If!33pidgg㯿B!"##s!<<\nHI9_JTͣoGr k֬DAAfvmc/yq>}={އS\WOzqAZDZwZn 8q"rrr0c ?Jzddd`… _͛7Gdd$Νwމ 6+R*OFUz힖m`4Ґ."""""DQ|xqIq rspO2d0.dgAG45r 2u5h {?Ǝ}c/oyxz^{*+QT!~"3d ,]u Æ `1c`2pBԩScƔ`0< x 8P2nBhhRD9_5-->,f3X(o߾,""""NPX'xDQ[cҤIH/ĉC8s8 wY#"ϪEp… ѤIkʕ+ѹsg%c,YAAAhٲ%,X oЭ[79/B~ވzKҾ}{^ZbA 0qDL4O""""" 'I"(((p0?K|iӧC΅R$AAA8w,F#* {UflO~.@鮆?zꥺ|߾}.91t]>wOۺerOQ2LGB8\Dη"7'bCmnEzCe(T6@6NԗtʺmY!""""zL&bq6n=4Gĕ.%%vFX2`m-)=kesiʥRyyzyTQUQM6lāϛ4FuѰaCDDԨBHQ!"N'DQ ;/qpq(& F OE߯3&JxU8ш FBB .NMhX^ov(p:8v8΋?Ne!c&SI@d2bb1d2d2VyȀJ,U% h?h4hͩRMIN0Mq[r̙S rB`&S Lp*mvER`0 ==;Zj!f0Y.(tJDDDDDDdNvF 6- ;@IkԨ'O"?EEd~zA$"""""& p:.O vlp:ѽ.@pPmDAAl6ە.nʧdbveQPPp\R=xsGH5ep999WxDDDDDT HKq8JpTTT+]< #퉳nÏ?XaAt>=O ** !!!;չOw!YFQ&ws:#Z6"""""܃;v6- Е9Ӷm[رC/vInn.]jw܁~\A'0ͰX, Bpp0BCC&X,ץx{ {C㾞2bFAy!{ tGH(BLLC"55uŤIмysl߾'ObiiiSO==z… h۶-`Νؿ?^{5aܸq[tR* \; Qyww" 8fs`2УG;(((@JJ :ԨQC^/+ t@'Nȑ# *,,,^^ꝣcGUlpG9[ (?c"""""*/o<*J~zt")) [lAu>c̜9}QL&DFFAxGѶm[\pGQQ~$`;zG9bQERw =wM0SNł P~}+0Kn_|E8N;fcǎĉ1sL$$$郗^z 6 5k<#>|8b 7SLArr2r˲oyu=jsT29xϔTV0*+u]O>p:0 |Grp144-ZQPP Og2l0 8EEEr#GO<"y裏PXXÁ\DFF*y9tה9v5mʧgQCDDDDDO'e|oX,(uCBBYhh(BCC]X,d4^:Q =!WK\"""""y/B|A;w";;O(M|r=7zZ+Qe;J] lEgPw  oJK/w@M<(Km6;V ;eGG&Iwtؗukbʔ)Oese9*L~Etatr?yU%WxHɗaʔ)XvmrЪ;M_֭<2tCSs*P~"''0ryTUs5'i7\A%X޾̝N'  _&ɧ On-O#!t:z}8ڰ("S'4=!Җ.ũg̑641A%c#mRCBPt,CBkɒ%XjK}"jB޽1}t~*Crr s:g|})wY >tUT/B=_iW\mV{--X,U>;W]uU4I߭T1|9Ə^z!''RyU/qfUlwñJ 1t`0|O9"lNupifepGOsGEBk@ %̸,J\4~gmڄo[\٧ڵMǎ#GP?<\gNt:qGp?`Y0ZhoncPM"/W_|s-up8PTT۷#..#Fr'j^s}Ϟ=8p u/-s@ZZIII[Z* ;I 92?.QgpDXkՂ%6Ic gNyի_#񩧐nr-_w}7֭[j`bASOaE/<|ϊ+ЪU+M6ػwf_FBBK/إޗ/_q{5 `ƌHJJBDDN(ϙݻwsΈ@ݺuOfORZl yeׯGG}٪}-_uEԛdBvv6fKM4Axx8å^ IDATѡCڵhիTOQ5j(.\pY^GDQĬYHs=X,j/O<塡h޼9^~e 4'Ov)ƽgݎ;`S;[۠FMjku*9uEnݰrJuխVZm'W*ǏǨQpBsA$''… QXX(/>|8vڅ_O?4DQTʥLf9r$MSN*?H׼4-?Q!f? 0ͰX,<;\6g| Բ,t Bvyfm۶R8pwksԨQqQ`ԩXd ,@>}0h 9s;vرcƸqmn:.;ׯv A tp:aY 'NӑhSRpj<$>F_͛~uÇ\>81'Nx-׏?~n ߿?vލGˏ;۷}v,[ ΝC߾}1l0^bbboۊu{5G\\ߏcڴiIGƍ$iDQ-[Tyv؁e˖Ӹ1i$S6"SFnn.Ν;{SzUZ>jz?ĦM0w\ 0;v܉xWJkE< k׮Ehhb̘1rROj/=' P HqX,hӦ v!;w-[TkxkhIZm_%Ǿ_~uխՋs^+]O߫emw6n܈|3oBCC矻s1 :ӧOG]SNᥗ^{FkU(رcx'1sLm|򖗲ǎnPO:R@sĿعs7bbb Q^_ VQngޠxmbt 0!,Y͂d:M!$j6ZFsP58$` ­֨ؠû=yω3ڮ^avG` :Tu 8~896vk׮EǎW_,[z5:u:u*RXA8q"##Ҽu݋e>-Z`֭uKm"-:~4q[q1 N'6v%$ڵ 5kTGӉcǎ?Dpp0&M9s&N:wy/1qDcph,#660 hҤ m&'==:tÇj7nݻwʲ)_'$$`ҤIxGU*-=-}UV8~r|֩zR~~>`J/{>jzPZaaaLQQjԨRVݻӧONJ+УG~Xbmۆ!C`ĈU}ڲZmkE%PғC~~;۶mC\\<Ԕ )OZ9l6jԨ!viq޽{7/^9s`0`D߾}hiԸ j|is< mG)5V{jvi6^-K;l0̟?F-]ɓ'c0 .@aa!&O,ܗbxw+fPEnfCaa! Ō~؀vn_5IT {ѢEs#,,  Cxx8BCC"| Rs75Ju88{,:vd6#f~Eᅬ,[vF-GQ~-//Oي GqCی6i7ڝvc͑o,tht d(\X[z-y|nL|Iï^;@IϝH?͹h"Ƣk׮^ۺu+:tŶmېt 4K //._Ho&z]j'OjS/y(GEN'6L.=w y5ڵC9s?y7n99krEߗ;` h`eKKKzg3<#/{ꩧp5`0LXr%ۧ> ,, 6M~R(^ͩSJ|'?~jzP`Pku8u/ٳq>}7pӖznhU>wbbb.K^e^IKK+>VuoF=_5֬Y#/,풷6ɗy=sVem;F{`Tf-AAA\n/ηcX`Zm}Z~zQ#V岔2ɓ? $$M4A^^ v#ts3wÇ={DQm݆9s6mkp'11^+wM7oA۶mѮ];ubÆ H$*yrÁ#m[\5lxaww '®0`0qՈ8.i~1b G*'iS/B6P tԩXF -bA^J[?JʒCU*>>x۰uVO?O<4zu塖7jEQQB%slHh;tM^֪U+,\Æ Ñ#GT˧oEԛsΡK.h޼9gN^+2oyPuuyеkWYzߏkT&=mVΝ;qף ,@'EE\?Zz/> /L6M8eɷKEEE8y$>\v*8?cxWQfM<.unm&qU[{Afͼ_S/jV|G+y^Jn&ڵ ۷Ghh(RSS_cذa:ǏG8p-[Gbb"~r-8<6o\ZE If3VC^?ZL~O?47nɓ'LIY\UV-KOsQPPs!))e,m6m;o篒Xt)N?zS/jV|GKW;7oƬY CrшGEHHnk=,Y/jB׮]O?T<` ![vv]=CTոnF!Y sdz֊r*7^Ux^=˶v)*mr>}_=~w\uUd %xOcǎS]>FZeu?m_{ʻKjӛoE՛5.}=eӛtٗ:^,Z׊m엧37PRRRp f.u-#<<.KZ+M^YS^'efQgԡ/es%~뺾篺ޗ'=u?{l 2 _5zY3y%~#m_MiN|9_szGٳgê,uk_-˾w_}m*iXʛI卬2àUUt]HGZhcpȏhL:Ǐ׽ݜ9s0rH6VDxkbҤI Cnoxeo`РA&&ulw}c0J:~+offܣ}AeA X:ie`:w(lذwqM=|qltRvNRԝLT/v,<{eGzZܡJ~A}vfU9w=P>ںDU{Ft北nYcΝؚx8QuރG3:T]oyy =<֭y 5ߊ~XQ{6={ݻ?Xl!7(bڵ+U)- ֬gϞA:x];օ/BY+K 66??Q,q#3chۘ8-4O?GhhzheV'7njҺo[:z_ZgϦz/wʰ}f=z Pr7l ˦vjiOffzr'կ9{R'j׵ A&-#bh۶ҏ9޽/cw9Ϥ(ҮQygKмu5t9vLr0aLR6m:? J|uUގt?֕?Y<՗;Oeذa`4q=@Վji폷zrR;q'…L" "ڶzV_5"""">!N> =ę3rO?(03kZ`0 ) *oiz+?Υ0~;fM4C܄Fkw3݁6mnlq?Otn7֭v'Or,a[ (MNhǤIQRRpc%.eVVևZՃֱqΪU_z`Ɂłnh%HW=*ySj^Zٳu9>IywzvMڮQySC.S'ߊ-R?{K[Yܭ^1z !'yk9{Hn/ywbEz9ܧڵwn{lG||j=i՝ƎƎHM= jrs;nrBCqQ$$\-Ճc랎//us=OU` F߾OGo[S=OO׵f+ƿڵ[gXcnڮQN5ӰUϖy\=E5kȑcU&oiz+6m9Ɍ "-- Kh87g>8k|kWN=ѻo=Q={tK "#wA^bEkop[_ėǗ9랧/ ѱYF#bm֣- )k{oOQ=x Ќ;&kǣsne1Ti7}9<&""")3^|oP6FD:LSbfbX&d5-V9(l[aֈHkTllPTttHdt<Z^[]%%/^b0reڞ{[-M}eq]y]W+;E\\髥3=锔,e^{.^vwpSmoF׭zW=ΟqzݷDzo_IF:z꤬׼˳ŭ4MOYd`bpȃ-ZEVWDDDDDDD^t!""""""" ` 0wX([KDDDDDDDtHHw3w;DDDDDDDD"""""""Qcp(1CDDDDDDD!""""""" ` 0w;DDDDDDDD"""""""Qcp(1CDDDDDDD!""""""" ` 0.@EEJ*`E4LpG- Q"u=S%;*v0CDDDDDDQ@Ou|p=)CDDDDDDD=㾬:x:)\}["""""""\܃4GL TOw; k;DDDDDDD2@1^WOwAT_sQ`qFF(ATWq~%|d2]? vQ.I$ ;jH)CDDDDDDDU(p:{XmhV@w$v8䊈꓂;A#SPG\Ԟ%.U4i])UQbpٻs`-Dd[]+j4EtM+l-1/m *mffZj%K8!ȝafifzk9s^CDuhZQꪜ>1CDDDDDDD*wO`W>DDDDDDD] 8C1;DDDDDDD]g4`ܹC ͛7lzj 0߿?RSSQWWgƅ pwinnرciXP(ie<>G;~8{1t{Ƌ/Z}c1iԏBw1uT ϟ?gyAAAʕ+tR×"??Vŋ{{n3wa8xI_㏛,;;wGFMM o<<⍈6wTcfffB!>>6m$I?OH@T"++ ! vvލcB<hhhhW]] ŋ IH[fgJ¶m۠T*BRQWĠ;| iiiǎ!..(իqڨ?!C{1|駭f`xT*Y?<8p(bҥ>r_ uq]"\@<ǫjXgDGGťJM6f:1sLmiKRK,w܁ K.FL!^EDDDDDD5upG?E&Zպyyyŋd/0\FnRSS{<BCCMҖ$I矑JOXb/^ IL)"""""""zDSVV;<&MB=pe 66k.F޽{1zhܳg#/mmK?Ə??3>cM69<"""""""꼺Ds=,YjZ $aРAN \xyy}~嗐$ w5x`@mm-DQ\.%]DDDDDDDԵupg̙|={6A@rr2d2dHyA'[9d}[ۚ7o\\\3&L$Ix'iYDDDDDDD]]wو\.ǀe<Zflذo!,̟?@K 3f̘6Y\\ 5Yֶ [bpuuE޽diYDDDDDDD.smϓO>iĉcĉVgYlORY\ߞ?ܣǸ6DDDDDDD58AcVOWZںM{jo{DDDDDDD"E."""""""΃NuZtp'k0<JDDDDDDh1骹S; '+g edzV:ZFL&(ftU}#Yy $$EuIDDDDDDD7 򂻻{p+[O($ ݺuBVNV$It'EĈn A0ؑdd&e]yS;Y;j^O_Wﱫݯwl]B wOy#t:a"""""""b:.jS;z 'Vә\; ynO9!i*Azk3vݞ]fe>Kҍb`91^K:|{WVy"""""""dk&:]Ӈ;ӳg!"""""""forGW),~r:+E wQW!Q1!"""""""rb w""""""""'pȉ1!"""""""rb w˭hѢE$bٲe ¯<"+aFXQdh4V핷ǜ9sn:lK]""""";Hd$I1cǙdEdCsEEߖ`'W&:ZkoxrE_8?C؈II8=zDž !57whE&uߎ6ng[ } """""pdž?HFi4܌g-0~BZ>sc]Y{ 8CPTE%P.^ĠTRW_;ݦ?BGբNV/[l/..֭[o㣏>Baa@>޽"Iå_F^߾NMMe/J WƁ;>oo|ϖ>v >0yy`XǷ_o\ e6?Z.w85i=1==7? -ͤN^D)اThTĉDl,J?Di=<ѧz/XՆ 6ǩS0~xX~\&aӦM\.$Itxѷo_aڴi4>RRDTT^}$A&AEߎvu:VZpxyyGq/DTT|||0uTTUUrrr0qVmӓ$ {Elכ9s VXDdggP6g=z/Ν I0gΜVc2^&-- HOOGQQC%""""Ώ 3w-Zt;BxgAX,5kk݋?xO z22#G@A\}}…РQ'N! ɐ_4:>MC$~Fg K{՞%!ӧʮ]&놝?Ԟ{Xl<==}v:5kV\^zaǎ2IPTT^xo&Au$xW0x`lܸѡQp;)))HNNFJJ RRRn^hw}v2.г4Z}A@!,,̡I ?.\+ DIVz/XWδ4\ٹӰ] p  íZ3"OC]LB{@Ċpo%`Ҟ>mn!!h./7]y}EOOLLDQ.Gτax=fφ}a}4UUjn"66 nnn:t(rssMB+V߰.++ ,?|||fFOOO$&&Зѳkf;~p(J̚5r$$$ ##={6<S{<1c@P1118yI3n8Çlj'L'NBѦ.O2!!!6KJJxӲl1LFC&>}#Fh\CCM7-(F ;b˃e}>JKMgHIpbK=zy(3;wR)Ҟ>#`xwc"pD_yh(dJ% q !qq(Ɂv>b'U7Nجg,,, 5;6hر0a֯_P(V3aG ACC < 4,w qqqɁ+bbbV,&xyylpsssxDDDDD+q,{#|WFɓ'bRn~Y Z׮](:pj_7r$n݊~e7BgDPCVq<0Wv쀮l_ 4Bޫ\}}M!!ܿd-qn<Ԟ< ]CjOr3[ciO hy\ys⋸_0rEGCѯP~{Λ]ZoߎK/ aTWWCVȑ#?~K|fΜ͛7jǏɓ ۔#::C}}=޷!!!ovm۶ XxC">|jj{i5m޼yڵk16]5l0=z555j(..[oeRŋh4h48}4"##mCA@Raͼ䊈ƙ;6tFY?#'00_|6[c~tt4p!b86x0+|h|=Gqf&EG>QQ>ܹt)Νs³oߖ4XӸhaI'5'&M x@oITUh,.<4wc94iore2..p D t܌fD_ hχ{Ϟ-q ȑPT۷U^La[޻@BB֭[(\x}?n3|?>233BDEEam֯_gϞna?RSS1i$+W@( ̝;n#ɰtRgFffvAAA9r$T*Z85 իqUQQQrQk.> |Im>Sذa>Sbطo_EDDDDD]\m};`YȠ:E*su\ur7Mt{ rw7RPyy{}|}=}?znԪqWU-\6뤧cmۊePVכ=ֻU+*2+GqY;XV{f^8ҟ~NϘ:a<3{l~#X*Ԏmڮӛ1c11f[ Xc#Q3'c77C^DQxWkZ2 |mnVYTUYP\iUJMƆFQkV MjL,6k&Nl@*t$zmϙ;V!\~Zǚ5k:s&$/dz#axieFTl.hvHilm)T#h8xҥK&3nڦ}}ّvkace\s' RS!S(?f ?4u?ed ,!Ƕedd !! Q*[ersso}ݾB_i+Wdnڞ,[r%bcco0:=wS{s3w""""""""'pȉ1!"""""""rb w""""""""+a w""""""""'pȉ1!"""""""rb wHp_j"""""""[Vvh"HVBe˖A_yDD#ɠh~g핷ǜ9sn:lK]""""""s Hd$I1cǙdgEY[k'W\aa8h,.>t88أ~\RssQd2Y|q3mi3-j wl /<ߪ$h]Y{ 8CPTE%P.^ĠTRW_;Wpdž?O(6H:.2ſpj4h*+ d(۴ r9 I6DOO(C w(HK3}J%)8G%9981qbpDl,J?Di=<ѧz/XՆ 6SNa;~zCL&æM \I/o߾ôiPitl ""JJQQQ8z}?mJLQ 3{t:Z #~ 6۳$dt>5Z7y3wCAZѷ/ƀ>4_ I1m$<شi\]]bx!$IqA먬đ#G ɐ bڵ{˜ xO IDAT @ј GMFFv3332 N_m<9r~!T@\\Ґ׏iAA>S{݋:$''Cl߾۷oǓO>iSPPYfAPرcN %*** /OOO17gN$ >>8t6n܈dLDDDDDln;;)))HNNFJJ RRRnc֬Y6ClصkaƄ*kmm-*$7,^piis+Vj4 ;} 虐22 3qx=fφ}a}4UUjnp [BP CEnn WXú,,XAZZv}hD2:z} cuwwosRSSRYfaǎ\ddd“7xgφcj1f( xzz"&&'O4 cƍc8qIĉP(t)S $$fII /u#""""N3wl0LFC&>}ӿ?LK tD8a(]v6/8~#FGP[[ Ri[B86EEEXjRPUU~XHcm+///{9iiidزe NS{***p}wwwԴir/bcCG8r߿Տfk3~շWfRGԟ?E~uu#<ܰ;b˃e}>JKA{Xͅ<4Դa+lg0~ac8a"ׯ<42{ft놐8@puE`L \weCC1O ˪[.!44555YXXXrssjvl!رc1a_P*f/?2 xjkkhX֭␓WWWĠ1Y8MMM٦ 8:[iYO_}hpI_e87ojON_+MPXQ.{^p5l:s&J7o:5Ǐ6oNl==]c#ϝÅ_FE4/:~[msH}СCh4PTؼy3/""""".3wl舙;O~/ me~[ ?*<ŐTt1CӧqW\QCs|gfXt4 m%Z%-0&`СCp3E~=&$!?={g-(~#GBRMU( d6 ߺ{2]v!??xMnlSO= 6O?E`` F}i\DDDDDDo};`YȠ:E*su\ur7Mt{ rw7RPyy{}|}=}zd굫+r .\h:X|yf1ܖEnR%mYyH9=cz{Pksn~#X*Ԏmڮӛ1c11f[ Xc#Quq9Bfxp(6jQVVG>~ *+*+Uk4uZQШ45jtjIifmؤԉ \@-Ϗ]k cEzz¯^G~ [cierSI /]vj3 RfnGi/p$())KLfܴM{rj#9;;,[̡zx)#a q $$$NDDDDDt -O˲rV=bJ֭]ۓe+WDllY{QUÙ;DDDDDDDDNcCDDDDDDD91;DDDDDDDDNcCDDDDDDD91;DDDDDDDDNcCDDDDDDDdt`˭hѢE$'oٲeW9LFAL>߬>Ssuj-ucp$!99%If̘a3q&2"" 57H}7rE+ٳ[+~o&y":{clKo0ܱ?6 88<MU._o|v4]|IBsy9m30""""""m1ܱO VEii)yVeYYY^تokzltMMu-C 0 'tj5o8p8p8 &d(۴ r9 It:\zeԴiTVwJ?Fcq|Od$~ФR!Ű\<i÷?}^^836$N_~}MJu:VZpxyyG1>dEѰF/DTT|||0uTTUUrrr0qVmI={`ѢEHJJBvv6M9s+V@bb"`(3g=^z s΅$I3gN1oȡu wl0h"wqx&o> +ƬYL^XoKhp9'pФRϛԻb0 p~~˿T$T?A`dc# (Ȁpŏ *6 řgXTyN<=qe@աC1uj4JJƒ*ۻ& TVVȑ#(((/.\h8+W ==dK4 Zލa͑#GwRSS!Ip1È.ݻuuuHNNƲe۷)((YrJ ;q)** /7| X[2^'I W^yƍ/QWp;)))HNNFJJ RRRn^hw}v2̰г4Z}G!c2^xW.E_L0ڸ<BBfAaIPb\ IIVz/XWδ4\ٹ-BћoBR*F`l,*$ Wvl)S@PXxPT4xFD 9‚ aQ߯bccP(j[@Fp#0p(J̚5r$$$ ##={6<<<j3f  <=='O1ƍ?1|p8q¤|ĉP(m)Sbh]ǧe٠cN֍҇1MMM8}4rss1ys89e JJcVuJJcXvASIi% ]uC^ 7lhS^܃Ƣ"hPw,~) ׬Ah,.F{5q#~\g}/Gq㬶]XX}AT?[~>PZZjX~пA&a˖-8qUTT ))iӘmFDDDDD1ܱB{r9G8귇~΅ p? yh(4p 4WVBj]0ܗۺw<,33[fᴱ OG 0%99Pw&򠭫CGRf!77f}gElÒZu놸8111޽!11>Fa555f...hnn """""_,c~W_'ODHHIeYWsq瞳XS(Άzdg#$.=kBgDPCVq> Z Z={`̘1&CNN֮]aÆѣVEqq1z-:/^FFӧiP:t* 7o%WDDDDDDm;6tFY?#'00_|ÇlV}[#D%V{''dy' x4]f=Gqf&EG>QQ>j  E~;sMmx?C=, ><`~Ӹh-ϟLDGGQQQ>}!?)11AAA;w#55&M(r A>'s-]yyyٳi]PPF J}lܨQ~^W^E>}e(EvB~~><<<'SO= 6O?E`` F}f:ve ᭑A)t.:UꦕR{z3f@||<j-6۲/OVnGѯؽsQ!^lBբ }0%+wsõʊJuUE5Mc]VjnjT7644M]ZlhRefY,65ub5-P ]k cEzzey)-umm;le˖V{hk[z%%%tɌio_nt_{,:5˖-s`3@BBDDDDDDol~Z{WrJaQ=wS{aJ}!"""""""rb w;Np[j"""""""[ """"""""ui'NŶmdz\ >V}8M;pK;z֬y KÚ5/!/_J$'϶$ ))s 6^~Ѣ`͚p̉Vu=dq|f:,I? 6ϡmkl4_hMGاTȑh'w*++W;0~18⋈AtM `ͨ""""""Vno9#G`ʔ?#((ee*aFޔ>/_g2˗3h=~ 嵵5Re`8W"7w' fs))s,:c ?ψ4#<Ӥo֬ȑ87onnc;G 7n7J1 #VM{_Ǧs/lcE<5N}==zƤIoaذw?'&O>}~70yrz%2!<_@L4!:{ZKW7CwnĶڶ$ ӦtMT I8:l$2Fi @S] Q.#pmr"V>: ֏ض}]Fpp(&MCP팃7e[mTغ}p(J9OG~9Ƙ1@oY;.==yp |/a˖wGB$hU?S'<<Mpss466>-_عs aǎM&zgINa深x+8MOd5lBpgO\PFcRnX[+++{\]pC[MΟ Z*{Cɽ{ gXnh7ݾ/%T==!\IߞYjWp;tS 6|'>;PVVm6`G`xTSÇ ,Grpp( ywWbt[~Tu' #G|N6?cc`ڴ:4|sа~Z; ~~!"<en1r8!p1eA=`ضm._ !xg`iNZ hj_&MnӖF?<8SRZ+Ǝ[7gL4۶;?Fp&6& |A$9Sc&`GkW@eXU~8{I۵kqfL3ǍᇓFDDDDDdI{)x;`YȠ:E*su\ur7Mt{ rw7RPyy{}|}=}ďz*pJִ\g#==Y!%0g}:6[eՑ.kTجtyKuC3:~SZlIGcUVV ;{ ^g3>yV Im?\gNݟ#$ .nn6geeexx(L&dnnVYTUYP\iUJMƆFQkV Mj>`d IDATL,6k&Nl@*tha|u)-_d/1+{IM/ײ<{#د#9YgT~/S3mұ2[۟6=vl3__1-f/>[ZkV?T,hf1p7)N;Z7zx:gx7CDDDDDDDRGs;DDDDDDDDt0!"""""""rb w""""""""'pȉ1!"""""""rb w""""""""'pȉ1!"""""""rb wmHzDDDDDDDD>!""""""""91;DDDDDDDDNcCDDDDDDD91;DDDDDDDDNVf$Vn"Ann&ܱ0!""""""\otp?; zqx#Ia8Ӈ;a񻵠yc^֕w:/:<1v_u`DDDDDDDDN5r`e߿SN5?3yh4k&_6}[ @CCűY555xgRm6(J >DDDDDDD5tpo,XHKK 8v qqqEW^7FUU~ 2İZ-PEt pmc=O?,@E,]>>>xGQ^^_}7U$iN:(P([lPԂx@XA(K2|EA=EFiKKt4Iq=ޤߞ{"aɝ;w۷o$1ҲeK=Xdq?nݺn}C 4x!-˺`֭{JJ 1w\~?>Z-i,"""""" B$w #[d2GXs!ڵk6mqxbbb /FHvi]&fA;wn:dddƍx0g`"""""""B$w bnݺ;7DjpMT* 07Z-ߏ~a}J˗qM,X=u9bqǎsvD[GqQ!;-[̝;x!۫z=ӱh"dgg#..ѰaC:gϞR ݋l̛7z;wZ#m۶jHR(J0EDDDDDDD[HːH$Xĉ!H0sLd2!((3g΄ opS(˥R)^Oku:ܺu ]#zEJ*? Yo[^VFzAfF&3=]Ϳ֨j _ki^F#J u4O T,7 ?mxlbh[奵a1CDDDDDDEܖEDDDDDDD&t=VX""""""yrGfٺr+be;rފEDDDDDDxLX.3]Ѹtr@ĎeS&w\;DDDDDDDD."""""""" cr&p""""""""$ 2άۻw/ϟ_u:ǵϟ{J]eGeq&M,i#f""""(okv"y]Lt:H$hZH$QL&9^8ک$%ޥK8s| `$Ȉ PuK£Ncd;>nYYm@fB-!xhԞ7n\7oƎ;g2Z۶mCRRO}0auԿ+={6l >DueQ#m2CDDDDT_|uY޽| vڅ$/b֭V۲$H?֞{Μ9>} ((֭6l`9sz=/^:u(ҎL&T*u艗p~8؁} .*R6nDLfLԨOF/rԘ:y׮CElĎA-jHټj"`֭xgf|߾}6lT*r9BCC1ddXv-j׮ JHdeeճm64ohӦ N8Q nju3gΠQF(((VZزesn݊ƍCT2Fӧ#$$!!!x뭷qتЫW/l߾f}{:寿B׮]ヰ0?xSTGR0tPdff֭[c[c(,\fsɓ1yd,Z=Hx1e,[,G%crdžf/F.[>|Wf#e ߏvaС~u[n3f ZlXv9\p{ƸqSL/Mʕ+Ƃ yfcĘ1c+V@FF9Woq[è!Vk%̞Z-k@K]2$_7KԚ;-Bu(HNF}%$({1s +o> >HO=V^_~7o4iA@jj*㑐@DGGÇeaذa8qֺM6+bL _DddrtAɓ'qAC"X]{!00/_˗ŋm?ڽwuKdd$M߿xڵkgXpUG-[֭[ȑ#_ʕ+u^Çcȑvz*Ə>m۶g}fV˗cɒ%h֬6md,;p|||%K`f:*/iDDDDD ɝbja3a֭[jEF|XWgϞL&C`` J… С*UTqرc0`P(бcGh=~8FFnj3JIr-G9d6 wcy|| gFTT6l ?,+I&L&&Q*f#322G:Bә+ )/IDDDDD$G>vCAMQ?񈈈3Kt IDAT[wDpIٳ՘ͮ]жmgz))ѢE[,X,$HsFm$ƌy W嗟cʔ9DDDDDDD.'wHJJرQJUժUMݟ]RЪU{ŋgHKKA^=hZ0cH͛ؾS|zTM""""""ɝ ߿2Ο?FZ )HOOo$$\AHH\<99Va% *N:V:@*?ΝЯ0ԬYYX]rw!0* ((?ƍ[@.W;DDDDDDD0SA?;vlݟaffe BM[vݺHGhh 4a[gVbh=;wnԫlի߃T*ܹK0xX|6ٳ GU5{ODDDDDD(KLˀ)|22/^perN&{(nRBtW{KJwW P<|14'+7-RQ(9F똗͜9 _b1zt=kMmòZDDDDDDD?}~5PJ>xlzp-tdOoH/dkrZ-kڂ|P#+hdBiPZޓi!tѫه9rB)0deⶱ@DDDDDDD ײpZ!""""""*G!0CDDDDDDT0CDDDDDDD˜!"""""""raL0&w\;DDDDDDDD.""""""""@&w\;DDDDDDDD."""""""" crȅ1CDDDDDDD˜!d2Aܗ9n޽?~?>[a<W$&Mza_T}%"""í(okv"y](t:H$hZH$QCL&sqS'tIJ½KpII7A.G::>v '}ݲ>?̚-[ qsCѨ=o$rݸ6oތ;v`Ϟ=ej>mۆ$駟F1aQ;W2{l>|xYc-ø4i֬YΝG^i(͘v23==?Ν;,#<<={Dzu}}\EDDD+BZZO9!GhZcˋSߏ3~~O>.]DFjh ACU8=d;fL+s»Itv ))%KPsL1%''7ıcnذax iii߰rJ?Tq@/Hj*<@pppYT+_d>]Jk^JѸ>[yYlܸO=L???ظq#z;>h]~GDDT,Noc 2բFt:O?-R[Z ׯ޽{Vs/ ?֞{Μ9>} ((֭6l`9sz=/^:u(ҎL&T*ux1/qH۱ \|Ul܈x̘Q>З_/1u*]3V:و-[ |xz)^ n޼i T#!!6Çc˖-HKKða>ě'u6mW^yx~z 86'ODbu{g@\|/_?/^l6ÇǏ?h9j~G7rrrǏwx:wڵ ٳgqm,\P#G`˖-HJJB֭ȑ#_ʕ+u^ÇcȑZ_./ЪU+j &&˗/ǒ%KЬY3lڴIt< 11oVZD޽{9s&}]xzz/4ի?~<>m}p˚5kvZQ(11W͛#&&v]?;DDDzoѠA|2dA}YOVQ\Qb299o"##' 11fsNQV;h֬>cYHŠ/>S^(io1?hذ!r95jcYaa!~g=رc0`P(бcGh9~8FFnj3JIr-G9 ƍ0a„" Bk@֭q%1QosΙ#ϖ-[fmڴo7WNJQQQXb?W\'CTκqZl R 777ԪU ӦM+Q~T(޽;RRR-ӿxyyů^z ׯN>mV www}5ktrtR*yykرchժr9Œ5n/_e޽͛C"wpwwGf͐hl\.G.]Md553/ιc+SQ;;%Lِ)((sA\???JP(o,;t:t耠dZ2ˋŋ_J[ @ tF5 /GvP X g AE%xo@WfwTT"U*/^ŋ#77ϟ_?zTeyyyA،޺ӦM;sdQTE.2l]@%3sZ>woxq! 33(>>f+&M &&2 ۷o,Qioy NW:ӝJ(JQך N:B(VJڿԟLWR%"پۙf\^/mk;O]vXj}]NLDDbrD5yj]`;wp(y{J3ܟdΆF#GЧOPvQQQX~-E/2mۆ4h4uUɁ63Wcb-k tj5ҾG?~4h`uD֭i&ܼy:YYYظq#jޟdee!66;wv.^V\f͚۷GLL[?1Fa477qqq9rǏ~vs:oiii֭6l\y6 ׯvڅ$%%aΜ9h4h4ЫW/ɓ'cݺuXz5NZ PojHIImbѣ>|hZ\v W.v{j 4@PP4 >l֞xԩ=t:$%%?v*.___?׫VqBӧOcܹ_m\)6)+gqI@z?#774t%ԫW9(Y5bZjZ͛ѵkW_{5߿3g۷qaf͙3;*W'bճg⣏>2^H? 4@.]н{wۈ9~b̜93gDڵxDm矣gϞvto6l@TT\իcԨQEv: DoV^{ad2̟?JĉL[jU| uԱ[I,[v-F͛7T~?qnݺXhQreQsjo̘1СCucM=p|ᇸ{.jժU^Gz5k@&aɒ%SXX^{5$$$૯w} ٮ4^g_4h k׮T12}*j/lbHL[ha„ QFb&""WI<<Rjee^z7Rᦗ LP*ܤrMppȕ ooo7w/oBTyly)b:+7-ᮊ#fdҸ%<5r &m̶奖аmYئ똖))) -Zɓ'gü>JR7/Y+՟e;Zֈ=INN6۸6Μb굵 Ǝǣcǎ6U[;۞ؾ{[b\v s]?9;vgϞhժ!ɜ~߱WqcۗbCq^:QEvI| BHRH<6p-tL&/"?y[^VFzAfF&3=]Ϳ֨j _ki^F#J u4O T,7Y~8=L#w,<. ghmuVlWr ժUÇ~(޽|XX[-{ba'bʢtRf#99ׯ_=@yhCKz;*{,Kdzqk>v!,, ?.]lH$T*̟?TƔ$F{KzJ<,gbbar=~~~X`fϞ]Ḽw}cƌA>}:b DEE~ ѣER#"""qBer)=}q:xcٳq¢E0`D f$""""sdc5=*ʜ;CDDDDDDD˜!"""""""raL0&wlqzG*s sN.Tf͚ЎɩSGkRX_~9\sb&"""ɝ *! VZsGرCoى_wY^!a&Pތt3lyݻ8t\0#qys=2}A2ϕ*mh޽᫯!;;ө}9s"fΜhsv<{&v{m""""z|1SAmٲ<K1p(\|ᑶԮ]B&v`5l-/Vێ.*'nrly?n]mB!gOv=Z@LVN{@ÆͰu"b[%=`׮MHJ@QqZ,߶:rsV:6ļ "6ǬYоS8}8_H4iҲ{֬WE͆Z O<@lkQY/""""r]LTPÇG|曝DϞ}PnC]ѦMglǏƮ]3OZ9s> 1{.Ջ W0x"m/X,I!HjӒ hܸ$|6e 8))Ɉ[s?DVEguΞ=={ܹm>1c^GB|2eZjqR׮_eѾ[e_`(T^fZ_ mvOt$I`OѺuG4n¸־ZkRVVei#t7a#nfy&xllgHUFffA(%=wڄ b(ܻƢEuϝɒ 琽sV:׽ר5A^<ɉX4iҢۙ?^@JJ">ChVk~<+HpzZ7n2A `۶!6IDATOnD˖ +ЪU{|Nu]K$@vOԩ(,ԢMNpsSitᱳmZjҤ$ j֬hڴy^^.J3U$ 4iݻ?͛ؾS|zT AP(VrZ\,Ҏ}x=ڴvkSii)hժYb"8Yb޾:jǚZ1)#yP_WGcǠR9NT~|$՚-]i*9c +RY>/NLd`w)[粣xż%bԤIKH$EnA%ŋgHKKA^=hXstrDDDD.GV \ $waذa5zʐJ4U'e8~0CE_n[~\5 :irė OOo>|aa5lB-ر6lX-I}FBϙguhݺ/AvOrIC``"eUqQjRSp <矿ݶfo_~{7M$gh|9.MK&qHR 屰Xfs22@3~+W.j3紟_.\8F#9q.I[VLld\׽3h⾇9}Moj֬,X/nٻs"""MVrM®]q cȐq0\8 vm޽;AFW&sCZ ooەMg8ߺuˑv>Сk:a~Ar \||Ӧ+Rl*?אH޹\"[}({1҈h^_b+^Z"""җp kx)PokJ>xl9ESXܼ\tx9dOޖ^LOdei5jZ(,Z}FWtB]@'B*!Mpocȝ އp)MkWLd\l|ŋG"z g뵵%uX.W}_yj(CEuvoى>};}T5[[p,f/ V}n\yc+&.Ž.Jz}cZ:)Xa]m1_h԰._<72%zԫX:it;ܡLaT PZ\yHW凄>#)2rM@QwB׻(',*L<|e2Q)O^yHyy{;,&w豗 h ͖k4\FQ&wg[ 8 crȅ1CDDDDDDD}rG """""" >w"ow ==jYzz:߱Z&^'wtz= 9eӦ!rpUŭ6MNNB q䎘Tb>Ap85s-fA* gNu(DDDDDDDB{NGjJ qR= AO @@!Y A"H D*HR$RT&;M{1Q둜n#usNI:`<1&"y/YA0',8t#U?Y%QI=-JDQdxϛG&zUSUpOXX𺞖Z""ZUY"U_ ?vt~/6-t >/^oR=%%MK~JLݳ}:_]şJ_Ο5o}&ZKǐtiph ""G%zQZzyv۝67럯.V?{+}w۝mL ސS'S0f%"%ҋuyؘ镭Wmz۽OەYeUu\1ή^4cW^Lha%s+=;;fgyXrȣCDRDu*]լ\ۛTԍeyކ67a7cdUFwv;F8pZy7W#+R-,u^sΩKVǺݖSS;"9,w%~PUMeH[FIn1Cjre*UUcӼZ]ll8z}cgovߧs6kЈhiJTJRvZbW%:ӥ?,TEPV: ffV6ԺUdq\] pv޽SN4IgɛggyW԰^)C^OnϺ̝;?1k=m1+Z^J9khOn}|:,WR{ ӾtP8 E +9#U=U[muLQvv>S=-u)+yW7[tfeლe-j5h,>:3w]m2cPM <)*Vѻ7os׊=Z+,uo)z%Nd드yrw)YJnr6iRjF."2XZ>e֪UmJΰ^R2ӣG+vuqyPԩֆ%z#srsw^ҺJ=JGhd-Un֣j5I *C1/D433+4{dWG]crfz˃=#xԏB靝DrV]GJyXQ&"efq<%h-qEfV\Žk:MsluL"\oϒ\Nv\M-cl;R0- eiTfzF:s9X),E~vI)ܹo!wWzH,Dt;{+,7g-qҞcrL*U۲3P-/U-s˦VVC(?;OK}fGM$L> Aꭽ 1H9ljeJZTieb;vOQ-՞-gBV,KmY,agvɝy)w OL*yT.K'}v(ꔘO;"$0^c8/uD!71^zӇKaPb))ϫmk^*bP+` IENDB`openturns-1.9/python/doc/developer_guide/Figures/architecture.png000066400000000000000000001006411307543307100254510ustar00rootroot00000000000000PNG  IHDRYz%sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxwxTUI/# ( {/uWWm튽 *wB '3?Hb@܄~s=L93&Ig0LvDV駺zǔQ|<=ןg6r1]ݏb̋%nWu5EG/JxEVv6OycVM}}WX^qғ_~tN}6LNK}g^Spd]3sWw@DDDp%"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDD͙ESsSWEp`nw`Sl2G}t_Ȣa~]dwlr> ~{Yrζb[Nw-K/(ZA.>_z [Y5;%[ć_4_6wz>subt_-Xms700.! Fߛ:/H/ UT_^k U6_q]ݿtksb6dWWT}<ˇF=$"ALݯ]߮ˍ^$ޡi'$5ǎ~u>>% 7rJ|^c&y\8~lv H}Xe-9\AUKz<5t&3,Ƽ90dt>a=v<}ḍm*r{{Z[!+{TY%߶X]ژSFWv!6mU+"Z7[>m`xӛآʣ%gVgR;*yȚZ#6Qћp5W׮>q5@jNR#\-]VYSɥ90$i:0<׵>Syq[k}Vy^GDv;gLn[X^SV]kdw~_cm٣F9%g>qg96Og ^'.ztsۘ]QSaLJ=5Q~.}K|R?4!< ǭk=SR;?/ߖQ]kM&Ȭ/.zi򰍭VsyḾ'N 痍}&W[^!y_7GlȮ Vv\=Ս 74&rJ*xXѽ+RdƘZ 31"`ls{o=ktK@ùC vTUfg^]Һ.7KK|i[59/0>³yZq뿎L/,;ީZhKfß/ߞ#5ط+]}ʰ%%dhUzi4fܣCњ01 ;m>BSp\% 6Կl69|ʜ!=u;C'oxU<!vٶd:G&lTz~{}v蔉O|1aݮۀ ]me V\} Ǧ/Ւ^/~yd1_5me$G??iҪa>u{zMCgDož"E!@; "<QR}@EĽr[ wɖeյfy#]4ιcX%yȚvghNq1!~{ +\5a@Jc𰘝LNݜY>[9=:)1`5sQ[g?{ݮz#'=Fݙ]d )Swt rwޏ(k;IC6]3(d( k*<*--ʪ<k=2JsJkΖO(+k=+j2J,-=yZYݘSVz_^ޯyRiI+֮^P Z̎16|ӘQMcl⸰ҥ[Vzv ؽ ^g\P\xi!E&T6F$v/j]۳>6,lsfaR^݃iw{.>ƆݙYTXk^uu۔UVUQ٣3)d(Z P^c[iU饱}2{g+6/,a?7/uT{kﶜԺ^!)NMZyYjJ]+{{Y,vwߙ6xcCM&>WgɼMѷ6|{vq粭cBʎ~u%Pp6u$ *V@2 [,l>Rjv8{_ث{P@NI qƿ_/GܞxZ{Ͱ{^;$B₽Kkmz!Evq}sbK p2ZUWqj~UȎª1 A}=-# ȣ"gQRr_{N@U]ekm]qiw[mcv.9xYڻf5{]Vn?1pOsFEO5@Ay #I݃l-}B*rK*mYE}Z8_PP^(@ZxG"{ea> *jfO{\>*j;bԢq{fLLxhRe/ª뎉Iaۯ9U qcNyn ֧:Eu>nI_= qVKMo]ף=}_~W~-3 &G)!~ucDe.؜'pq{?/Ieuvs%DUvLH- 4GpA|wAqETtꝇė58bR{W}ZQ^[*w:aWQu0@P_MًK7KTڎlv_ٻIVՒ--F1sMBYu績V!#3f>s_ֳ/v[; 64kZO/(fGlrN=gݗ#F d2ͦIWe\<"rgzOmS&lͅ食hͿ>4/,ӕYC,IؔSڇ3 *bwV+3E0$>OTHh{bߘԄ]e0 Oq#uDWNe[{Ǟ5:i{xO͢-aQ$:įsƬ|%C>wE +HXe8 ʪduۚ]aZ|ɗ/Ǿ~w O(-z{\EMǔMi,,ۘe[9չ1?1)ܷ0&л,ƶ*hcNEzӲJ6W޾:p>rH` jÚUZc[$ _Pi%&gu7L#ħl.[$l29ol:t^4^0$&Կt\hx謣W~0'ךዶdFyyX`뿮X;2KƯ w;)L7w'\onޑxWyIIC{kp|x6_-<5ҭM_dsQk8~cW29;d2]Ч/k-y~}xj~ex4n1Ccӯ9:zð= 37(Le홓 ՚h;'E;C^6,:&3*Ы!.,}&'C +L&ywM_Ssj>dIG&[ŕ/F FOخGg]y\?iO2bn4iڜU_Z90.PPV!ˣ>)22dz]7gJ*j}C*"}o8W{䗣jn *U@P ˡ?Zt¶J΢j}:M9>leE~jSzgt,=.=B}*{s=|+zRͣv\bpkHs 7gOvgTEMǭ_%rP9D}2c 16oCv\8ofWID%"rћn8y>Qڕ\࣐%"rEch3R(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDDμXy yyMQj~eP0ZjvMu]wu1F&92&zY/M=vsVqWW(>yX"jYյ)]ݏi!KDDDHQ%(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""bXWwBDDDt:Ӎ p+@R5\iNsїNH0g\JsDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD `5~'2يH'Vju;S$9e<**yͺ6`n I9'BnoQL5V2$4mk }2~us.+1 8聓Pb>ܧBDD`das:TǏd59Dr3,YDoS+C%u;?)!DYI4}I-]M!)ZXsɔsͯƙD /ZW0vNʟoIfӱgMޑcd?5\R2 2c'_q@U7!2,Ү뿄7{x 0D8?4OO\G]g;f6<Sx_gYR* hוj8"`,f'kH9@5\㸮2~Jj۬,`7ka<@-9 쐾:.d'&ZFj0 /q.xj!gf׼"6X?snjI<4_ }J+7}LʟX Y*LœOWx;jnblf)YxbTy,z8JDDq!+BabvE.NfK٩ efs'>IhZ-r Ov/,"]` NpLGO^ϾZxdUÄ=`.c< ~8 iN pɕb"6Fこp܌n/? N^v5a< ٲJ9Sy lfcWF>r*?#C]ʾm(v6[}0e`̎vYt\ȥ:' v_6̝=L>ml1&I`ܶ$7[2f>n*NOv_ ]U>|O7,voe?C$Ѫ?MD:kuNN'Tsb 5Sp35DtJ-ࠄ˱3+̦[Xg!7l5Q8Fu} f؆f""".݅HR-75h&7Գs:x)޵,rлa|±-|"B&Ìs۟N{H>} Fyj#%hd^9=9Q'ݧp2=s~vrv>7n7=(,a ;rrKUkٰ)cF# Cx*c[㏝K"b<D@8|+Q,#^q ~FN9!SoL&b|A c\.{"4r)De)itgى'mVbG"XBwa<ٜ@A}(DnEg='lL.~bBK)ok ҝLD>I7j}@pP.=3ze[=#'8}<|z4L|M8f\~ ||z{왱|?c*w3ʺx Kd)*rӳGU3xϸ E9e5qE\ڼp qg-#|4ZˍPLj>0>E?!)kkrA>q U6;f%Yq6^!|F$K3Zf9o&vû ˖`-p3;:~}JY&79Fru,K{eA ;f>&AxX5 < |oKȪ13w1xyU+yqDbfYΗr>b47{Lf;=xo- l4X9q,9dұcB73doĉ\A1bw0@x!| EQeq-3f'.⸁S b 8M'9% "rJ. 5Ls43pǎl xV37Wba Nf7Z̼ќpЎc 8\2bӸ\R#-}'$wy5L_B!3wqX=CK[c{vSV7#^nQwr;CY|,S~OR7j _rNK=^+`ȚcO>? =OC~\"b&#1dV1bқYA!4& ŋ #1܏c-f3</=ٽr!A }7՟oO=әč| z0KoڽO7>`I? )9ߛbC6gq+B֭L.b5+OդГc$7&#("q,~n&2V1]sD3yhv푔Ћ$Va})dGaqQKRG^o{Ǽ$sm-/6OӒdjFv±L=1_G(ੇ[;e̘u ~ԏC[>;{5Hᄘl9Ij9dn6s\:9|<_v;[sO'by /G]$Y|,\nd0o0Ez81s&KI,#)dlxDx=?/8V!ˌEY"UDA:1Ɵ6'l5wi܌foL%o)lxhRǿZeU~z B ~{\e`ȚPrsHrI!KPj"̠}>7د'e{o =yl7t)ڰbUe޽1 v s9:!+oNfǮ$]ܼ5ZK+&$hc-仟N㧙!!l֟mszNG-pCX6 K[Lme dԏJ)&R4H dN ;mwȲQAX aH 3U;Vt#]đaԑNI6 fy`ɉn Lu1OG!3.t˱Q䐤1,[bokr[d-\Ĝ2'o.>IXH-_v?8}SiǍs#x{ ]^VXKȝތW2 ӳ/RW纟Wۣb3j֮?pyrVB3Yz$>6@FX#F@5#YC&Q #,p9 >kXܗD6G9 Ya6;y0|YzZv55fν|"g^|os=3p8zkYa!YwdžvXig(?P?O9i>޼Ԟnlz8=ݣ33| '<Oc7X\BEÉB!MkcΣ^p''3fP}Np{!잎16z7m 34~!x*NbۓggoRf:t "$ܼnEa{rxOMaSJbE>[!yP;>=9<%:{$ iƓAXn~ٗgP[Mlt*gM=ȡ"ҹt2jG*~x>4~)&}ڗ)|f)'3f|a-)"!$~L /_&Л[L x~ŕbۋs$2fFz̬`Hai16yl'Sz2eds ?S- d3QPلJ!L!k_qc 4z[őEZF"EǦ2E<7,#>6nݗlr]{티cSm1>6z~,^>Z/SxoBTw_/=ɔWŻƎIG^kQTDtdm3cSckɛ2Tm 'N<ퟟx11ê6'D>_*f4QW=EUFv"ZM9 0Ù,-ӓ{vNN<ژHD21h:V$>W2?|ƒZ&R]ڙɏ<~`$sE27Hh:vA\sZ oila&Fwj XUh!8yPd(Rvû^39&[):;u$q8f26>xX"ue8:q̓A0)zs )^ 7:S7=}}wku\|wuW9NoY`uw:^{ TVs?VK_/D =Ū. Xa~_c#_u&z\(q'GVN;v%XrpcYGI“Zt ,9IR1sMs:[~AQ a#|FDr Yrx)K OAWwAD9Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1BDDDD %"""b,(d@!KDDD Y""""P1;Х|poUCpP#;w]EDDPudMQKgbKFWwrDDDDž]W}?S@^~>9{&"""#{$^ivg @FVHS}KDVNU~8fHL?ɉ4],Ħ>a߿4| ,k{CDZGt5}oꤻըď~`sJWn*wtJߗbxzVS[En/yL9 g>ɰӴ n$ j**Ήc9M!/e0Ax?V/3n_DDD:BV9 &0ge ߿#f=Wo&2i\{$f~26zrsByADUCVRd'8p#3+o~9Z!A!G Zj뼰=x`+\/%AdQVKUWSY3@\p 'À~L:a'GS}SaF<Qdf%P_o峯pq }X YN=i&~ ng }|!%<4\sXN **lxy92i6s&>w"υW߄;;5z"7/oƷ?{߬M!5?[=O=}r>N](-g4c]osδ,\g}ش%zRXAfvO4w^O`@iSI'JT"vF 4~E#&1 e]'HD䠧^oȃ xF* 9F]GAyMsn{$̼^On~+SO uIß4xy?`>`m>]%6f|fgLe!Ney|n mߋqle9(d5qKvϡTApP.E/"=V])p?J ߯֫G}e.=h,G@`QZ@n^LPl܍r&`"x{5kg2/vqpq9h3L&~~$mkoZ{d)+;݃gݥ /O'ҨcǮ>0¢:ƌg ?1#a1۩ `æg$b29%}J]h%@0,mD4YO&ҩc*CI 쑬_lV%q-,y\HN«6u+gϨ΢eAdf'1x7G=#:^}:w*f##"r8Cq0v U k"e&=0+KmW> gLD䐦Dž"G:f0'_Ku2""&dN 7y_uXDD9y{1G~N\f݈H3 Y"GH 허!N!KHLďu@_j9P=CB/oPCe^jlM 3kXb{("rIg\zёypt/pyx'<,% N;QCN""G4q(6[ qۻ+"AY/81XHA0z VB=B""#^("=ⶳUȡb[9q:`IQ料MDq{ee+It=:GclN0+8<`݆-Yz ~p9#?Zc$ Is5 ho"8ߑO-0x+`f&1 }GGQooI I HRD" "(bC`ATT b,X M)" oҀY9̝{?pɝ;pgUG4(`B#mjn(zv/x #uX3f??_"@}E8w<)걒[Z?e9ۉ gVc!VZa'ټD ,SrpH\$xm-Jj|̔b͒۳ko+c{&2r9+O";NjgF s"""T Y%%9Wl=;m䳎xz3%֪qN%}nX? w7`}A;߲- eђP$j${#ϹNq^ܺ t5ĶЮMYum7\Ljr}5XJO)s|P`*m.ХbϺ>Bq5w?yɴF!fMҙrr&mh =$#?}NMf3^;q'%"""gUYr+whw'9g Yo1S13ʧgl׮MjOCdT}22K~Q9|~ 3Q;nXOtLnٿmzQ{?A:vc?Uy vnry2rW:yhVD)dU[|uj`YgOnɑ}k.nΦ~[ְؗ׹Ŏ rJprΏ1:ڲ9\KBViI.%>n{5#j$ح[n/o罬Xӝput-ʨkΩ~&҄\ 0xCSS*n݆:_bch&=̆JIÒêQY`:O@jZٱxs/4$ ={ ֽ2xY=px tf"",Qiկ[pr}hVߍ]"%|u vZU%."RaZn{Ot-Ɣ3svt}\3\;GӢV-'{4c̺E}jf;:4sTOs-a˹ɥUm>&g-p2`Y1:ED.2r|{a3ͶrͿΩeᮇWEm238eNՈZRjj-b)M._gZZ|Y]C2QؙDqH^Lc1 >xkCǺؤY&Yrl#.dӹC"~b]== SR)c-dyδ{Fvj|YC9i23m`É{Dt]G,vv)؀v}ąg[c*O[/^:kg*u<|^#pe5ެ&-)NODu<}2cȿp#kù&""BZAD8-F*۶ÇEKBY$K0ry2fm󹝏U*"rɸgF܆W] @[yk?E^zj~ 7uΤ;Ƴj$&C1/b.|1]غݗx7Lh$Xid쟀4g ۉ` fd$YFwҙ7X \EY c uUhdjEW.5b})X# wZ-`o NENm3&6{o]o8)x-Xd".tBw."rqCgBtrڴJur5HTġrrF"8P/%X"ED.= Yg^g|͛;mG hx7?^P96/]/'!1ԪyW &eƖ|8{nˡH @y螭n_O ط~Q`xi"&Njfh.ݚ?yp\f?AzN;된@VGQ]#mc5oq#!10|5@8R_B[Ym)A\ە}xoڣ4k.#HI .%)9P22]d69ZUk$l]4Ɠ,_3wbHT+Urv_2ގ)FOl/w/ٜڒo)xOw, X~ @j{Ѷ'kxo~uQ]c)L0hJvS;[5>>IzjosWXGط)V1vX"" d>=ˏ0gAnff_ڶNeEmXVtwiǩp,&4/l֓A;&6n2ZX3Q^ -J [Ծnx#E|q!&k%@7wn=)g#r=ب(ޢ+WS,`d)=zPD+;d Y%r/]q:9W猌5.>h۰vN^R;ِoXMBbhmfsO>ѯi`ݟYªER-O~?J>~vvbX~tĊ?Hb6f!-=smoKF/ <;iF[~a~dg{w]s?FP҂y9Bc6wMS~7ʎ_V-Ǯ"3ˏ`6瓐Pҽk$gn`M^/cE0]]yIN?vخPy9JX<W]]r:9]zKL1 .%%AK?~;O>x{`9x6!==ҹþ Ѥl_-Aka'ISΤ-,_T9)`+;j•EDD` Y-hZt|;>B^wrzK6oAM;|uΪazsN˷sϮ\Tfzsa!""rEQ:mٌ]IH dv7Qj6ygF-ѾV 7J_1xȳY#hZW a7޼I$-9vlK. ߛ_bſw3ӇˆG_8St2c^,""fO8/ O Mhai>- -6pwxN${3?݁^fNi>&>STRo !0h}Ce7rcۨrիz(qYs 4j8kRLNw,kn*5vL+]{ApWW|)/慱|xsm&AcM[ g ""|rٴoks7͛fNdT}O0s?V5<@X(Q%OwyUgF?jkp/w$*Ȩzoڝ;ʓ_D(y&ɩDFxg=OBz' >NС1"B/gƗ tgY_ z㧬ШW!.Oe}j7{OW 5m.:i~5,raiI.%~·gnﮃL<;f&5.3 ,*y- 6~]^G[\%=m$1*)~%>7Դ'"" Yŭ@P?sվmlg3z{ q}@ժR⳯LbbI-[KZ]r;+7E3""rk$ָAŗ[(f3mGSswk~_YNֲ nnYttEDD.Y\X-6f7z na|<- Fo`6sMdiu'ϾÏsw%)م9?Uw%0 qc n> Σflz _oUޯ?GzQ c[5غݷ1'_[6=U!};mMU(\j4y4U>A<<2MJ`?hS=;` $1fg /9,-ײ|u3ߋTA?ݼ>A@H1177[Q2;qjV?2GK51dL>6gFb`4Z})Z~N瑕MP`™83 FБx,0b|3p @daU>Dq-ku5|uesuʻgjEzӽk<>- =c1=xpv)q D~^:60^n\6y.ED=temPv l _h&ٌF;wH.ܽIm[}گ877[vV-iBirDD䒡%Ivv"""gEDDD@!KDDDDDDD@!KDDDDDDD@OWǷ`k>{V-umSNs\4u>vW`qqj,Xܗ7Τi ]8BVe|?vOfwob8mXC 4{n|'ۊ;aH8&6uאLP@=oו3bo`ݦV$&M|;k> gp,ƍ6$#×*RF?_Q?[2lThHv7ԪɲP-4}weŚHM GpqF Oߣ%N!S1AdT}{~,z޸w|:|7tktWlhCԱ ~[;>ξMmoٌ^4Il+-:Hn;׶xY{ƌNN>z() >MMHIqZh9?M7JX,F69{)dUuxwu$%Ҵ\\F%qKG,=j]nb lںvmRyu| 콚Q??JB'_l$%2/'nfQ|Y_^l#QǮg+g?v_\lJfDDD8'd?ѽkҹכ,^֛:3hӺeWayM% ytV `&xxd X%mلࣸX$IˆwF3CF'g~ڶKZ:- йH4Uܺ t5ĶЮMi{ ?6-v}b6;X ڶ* >,oiONBN'Sfde6n)W'fƗ1s}4mV2&8XٕzEޫy-YN[U\&L0Ķ 2xwk!wwkU'͛fm*a .BBRiLA=l_79N>m|ޜ_~GҨk%jy,_U=~fξDo~-"""%raq~F(k[`׍Kl&tj_i#ݼ+a"4PGn"S䏅Ѭ6%3f?˺mFDDDNM!Y=~5#ۘ4!QnS~XЇwrL{w=~I 1&Nmȱ76mg:ikSSYB>]-]ӌn~t}El+7:s IDAT֏2MR S>c=0M<=dASK_m9h*|ШhOaS/\[)߫EB s>cاy~,oYX{^^|)^|w2@v)||> }XWڷp6vnʠ;`lxOIDsQ{vE}{` ugyVVd Y,'YOlZEDbL"Q8t$/^&1աc]j"ٸ%풨Y1^LpuN*bClHhHI۫`x_?<<,oLhp^.lHZ -_ vg go|L"?/.\6y.ED=temP٥`b6gn|~4u1]35خZh;mل>u3hԳPA+}ifrr=3*""rSȒ>Pq,Pq,Pq,Pq,Pq,Pq,Pq 9h0v.CDnj:gPY`7:9o.B!kÂ."|7 e\yDDՅY)_qE.'g ""grB8&l<˙6g ""wB(r 6i Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,0vl.FDDDġ,tz t """"v{1vG!"""r=Y""""%""" Y""""%""" Y""""%""" Y""""%""" Y""""%""" Y""""`vv""b6Zg!"-f: M!KD.ZFcϧOZDlɩRlkήDo2evJvv"rnRl6g,]pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,Pq,PȒC:DDD.ufgpyjM'vgsF5aU\cÛtm ~L օۍ q7agc(hVy>w3 i\pɪd/jήYChU޾Hh7 ynJmq}0}-aFDDh&K1xgX  H` ;h* !xt0VqN"""K3YN^/x օWOv-aPmxy,If틷%/{9 `f*=P+ &x.?̺n:] ,4o$Մv0E- 60:ʠ,'Xs|[w@Cps_h IЪ%̭ C}xf6lXu::6^P/; L`G2RAt`hO`#IP @ھ#5G#""R+LOuޥ0n wCm\X kB0d#ڮph5"4z/x@t<±˫S0l 쪬󷁫=q~>X KO~_|TV=" C|+yyk 1sҪV7;yzl~/29].tq jC@cPx;d} ?{ ,K&pnn 7aGn;C氰X*Wih"<^ 氠9,hs8h4ܟ]ߤr[bX5ٓVBBC:EG7/-MLl9(:UE<=a ?<~A%M.d9}Fo8 G̐3x[7/|X(@H3 Wτ `Cppy-9j@̙ꋁ.6p/J:"n96}Fŗ0B^°am,\X_}'!a {J 978Lm빺nnvB%RB|Ì:$ n+6|KoK;ZA w ; %T}LՁ_l`^coa9j=+Q+ gX_AX]DtήA\ YNV &CCx8Xm\ =  րU kx?A/tw `4x'X}[!_B[wMN~`bb {F/Zo^lʺ1fFӃG>c41dx;4}}t9|yyvM1vԭiyݿnnYsIK32?HL~~c1/skX~>߻Hi Yr pX<_o@0R е=L)lS VDBv#<\0cißCl 5¯ۺ}?Ln /{e|7v0.C ;nai¶YmfH^I\nkX_vbl6desiRmWNN~QQ]u~\xVWmjz`~~խٝ^{'dD@]]moWu9K6@laZјq {{921^yս<33`ѣS [ %T3<=7zO]LZu\b62Xŷv=ǎmM^^Wge]CZQQ5kyZ\)d9~{?]z{2tz .ǟn$3KQn[cfX)a4\ pq!*J+OnkcTLoKm9,>.ߝB\ 8|9okma!=ZD.Wv{'nsWffנ&uBVtcu(?9%){z{'{Kvz{o)~OVnȵ}Q䈡11SiIZwddl]60/Ukt֜:4常|}l\gl`㏥j|b""fdg 1OہH)dUa燥 -! aL_A~pPOAp,YO5:V"`gPxAF\1; ڬO%{ qQ "R`SJ@49pͅ ۮyyoiQNqq OZ`p7R .3VC"_;'79e-2?i-۸guqtbiV1*UJ{~JOYcɕK!I<4h{ç?TxEۊȥh2kii[mLIV+@jnvKc1&d:e4\[$N%dJ,hLJ٪L-4eg&S¾e}"gK^"rE[,&{=8h)=qKLlcKef7/yKvOzU|TcL,)Vp[n82d*Z`ε}b>HL,Qꬬة9[ Y3:D1O+5`{NOii79 L6A=_k6-))4)6 &gNw60`xz:[E2t-VcLU`ZT^ˁBV%;~= M =aV8 CSaG8$Mm`knu{ͥT#j\\UpqR '~_x劧 #f,<zz=Ot}?Ǐ+cЙ[3,˗èZUlA q0 0-n 5\X3Ux_q6 +:C@r}>*kPtYlCa430yarvM`h="4 nw,7X/=.'^lB {Ӽ3ZBBx, &5oRnsUx7{@\Q< &}46zm@"""=] 1P}4M8\_V=F6}w(g{X0oo3,^% 3>Cf6> $B™x>+Zt +^x"""%, ?G ,6UV@mׁOjpʵK\ eSyl_b.hU  ] mW4r\ﮅ}aN4t9YW +x)p з> x|bu_߉ql05߃᎜q,qNSBa%TuԘyHeR/p7tޝaFS @r=rv @7`pXED䲤uLuxQcAU9 1poYF3W09/s֧sglvz8х%3ۏCb^L~ xu:uaLv@:WS7Aβݙ2T`>Yf+ןj kk]?to9/DT]Voӷ5gЋ[fkW>Wu01+RPvXDS,_Yڊ!2ۏ3ky8i}5c#""bMׅ%ZmC+x5f1ayTˌ8qQ؋^ uN?ɺy},2'5_Qu3+Pu+Mf\v˹wq|X* Bްսdλk*o j1KMt %{[&m^ڗNnbLf/ؾP(YzJ_o l2ܵDW_QECuZôe\^4 ToydGDVIDATeMdΑKGDD|%d}OmɢuDDD|We{DDDD $dEDDD@BVDDDD $dEDDD@BVDDDD $dEDDD@BVDDDD $dEDDD@BVDDDD $dEDDD@BVDDDD $dEDDD@BVDDDD *M_,ǽ#vKw+Y/zԷ#[^r>ihhoX:"bL[hrP.B5DD4%^:"bTْB{ &x[IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/000077500000000000000000000000001307543307100235305ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/design/Collection.png000066400000000000000000000232251307543307100263350ustar00rootroot00000000000000PNG  IHDR:C IDATxgXW3Xz/%;j, vP(Xb- "JXE#%(D1 /lnt$}{sgvwvf$IKG$Ʈ/8_:T#`@!:BI !hBI !hBI !hBI !hBI )7Ŏ_.A I꿈 !!$b4LRVyYN Mmj@:`9bŴfϝكS_KKLbG9z{б}nxpߋɮ^"*|v]6Z0!B"MHw}7%wjK#]^{!|y~a|ZpVa"{u@])qN-nas {IJiչfW[{ rf-%.@?@ KOI]x5sϣ:朙=L*dIŮ?ܺ'K⮿ \'QR~⊥S|_Bn?h "[ML\s_;A&mL?B—!IrU:Z&-,S=zvaw%B<8M.+cwmhiֱ~)H\O{yƢ"Nr<&÷UҼbsIa;򼭲ˌ>z7$I6&K\._2GjE`oK=OP$Kv}R\zK8+Fec@BY:ڪbu/.Lԉzz i<.DGW g欷F>O^NBVvn_w3jF=4J*.` 8ٶFI>T5d[W)6~#zgg\ ֱ]H,s夵sJx\m YҐ529U!YҐoMkT`Nq)>'cl`|T7xQ,])A\Y[Zrg m۬3 U`3g48ZgL{߿NՌ{ueäTDT& i6?6A\]!<95qcͷ k1ACFK߽W79l |x69$hnd:Pwu=+^Zj%{M\rvB IuW$6J 84񏂢rmSz֭"OuTFv} *Дυmٺw_ 'NJvC5َ_70I#&2LR ! B0I! B0I! B0I! B0I! B0I! B ”LiƮ/pfz!%3ڄ{VQ t`B1&)T{'z8B%rEaBB0IڠPm$b4LRhn1LRfuLR!F iH#=TJ~w* :,9x]"At‰iEAfDJPoeC۳ bux9έnPRAAWxBIZ;).fq\\CQOWu?bqt:jANBubq ~񲖈K}g@QڙBzsLO=еEj7ʾRok][^ut@JD}43Ԕse KsߴW gt_ُ©D?uݾHx\w@.-tEŅ?=ԿҫT$+mt6A$,G@-YZ1*>C4Яȫ?wj&4Sd 7F@괠7RFMf.U_eDun]fG5ߤg`בqym\N J,@ bj[gLp$ײv>9Y2f `w~fv3~yEv ʢ~kظDXraS XtJ<,*$kPم[9;mv [O„SUsOyY/% sQi> k䝳-,%SPn! &A vvOkgD6j0`i)'%q +>7MĄb6n$lՍ腞?t48<-}\JkGtVb[v|!\ir-@IkTXjxd7U~ kCMjxӫ{MIkuX$ L@ o^S!o@E?i}FTfC|.62UP=ux# GR&Q]O t.?O=xpǤ >֎ǩ[z}Q 1眻/$N17mkk5.LRI˻0ش?5#()']ɉ><\'#˱c:_"OCUlh{sYR-Mwt0VkB=;v@/$dW`_ h7v: }>$*+<gL-r ~+GCTy}˟/ڿ54նG71UkjwOj3i;8E4>\S熮*f'^PGo;X}jw &u?,M;p|W αI ^\7teʲ;bDz&,t*Fނڛ9 ¡sc\ΥSͼǷ,kE]>5AiT=e{@^~E%3;D )UA*-é0עE4lQYuzE5Uќ Yk)B3^{1 ȍ Yvٺ&Z7soAАD7tV<{ݯ[s6)V!qǒ ޗ۸L Ɋ/&_3 XG=G3Г>5j1 fi{ ]ue&GDDYJfif\IFiHnI9 ݙkX^TW+䨼!Kol7WLŸq"UDr$%TU7}έ|ѧ-oUhB'Iq1R|zijhK~b B4LRO.]g/ \ͦ3kj^]:1lK?(mЫ'%9^4l6ZQ 5 }S"[RZ h%_Eҧy)iMɕ >oj&)7sE;UfaI3iy"qYZmX<5org3GG_R8MPU\x[v\^i>8_G`sߔIR(H}kb!'׼GC~!qw܀SU 9 E[oja'+]mت(lTw0I}&f7;rC#fcNX,Gfz+ނ`co5c:jrvӗRU FeW :f.2sGי- jX 1fݒaS\n#\Y$M̋[|i|sQ-Y+ dL>ǹKiUe^SSjygp\wW`1;?7A)Woy;%kt Sa=HaQ`LP&zw{+ [P[4cG/ 49_:"|aWxOBI !hBI !hBI !hBI !hBw<ԀSGP-=T OT{0I! ==LڃI 0OZI !hPmPzES6`B1&)Tc47F` &)T3U޺y &)wP Tk4yj! B0I! B0I! B0I! B0I! B0I! B0I! B0I! B0I! B0I! B0I! B0I! B0I! !F=?Y҇ b =An8n꒰ʗV86ظt!sNvw>]ΡpzC{ ۞T(R/&)ItXGG%G{05%}TY=c2Oo(%_6tB,&5+ b{yޜL@6NyurЕ)ˎ,.xҩtiK`uYŗcd Mbb$(G" d0:\/a\ p2fZr0vTy.o} \ә GGn`Hg=eRZޟZԇFW  f~5~-Oæ9|ٿj)-ZOؤ՘X,[Ơ6J2HJ3pbab b$>x.~7.W87WnwFŚ]rԵZ l5ޔ\^Nr@ *4W nJ3KWQsM }l-Y=B_87=٘ }#,n"WuJE{17R]?Hx+/=~(|yGCwor$'$]EU p>_D*֨vVwq$#ds&ڷ2i~Įl~hFsi⒊Bq-In|yl=I67ksS-6qCW8 ;2>CM G_;j:ix +nݣGʞϬi?w#8\B̧G7K@EPIPed 9_O9S^{e|;}c#aK'>ܛ"z?N*/:kFxlf]oӓe¸ē`㺬A5\o/-z8j<]GZ΃{ÓKR>}8<1A8Mզ]"K{آˮΆRs^f ADWr9ZU;UyřkZ Qj$@QnWq;V @ٯ1[(]3`Wޚ@YW6PT~dsWgR}i yG" ZYR(;O;uOdf"AW{iϒ@i3b[ ,'HkV"*hi0rnrlင"v^L}#fG֍ֻ)noN)QO]7)ޙ36od3`[ΆRMHQ!; /-+ !21ҽ%QU;Uq߆23* 2ͺ/Ζ\<ЯOPIDAT$[ẍ́uW ~uӏ9>vP~u:57+kb>*ߖje<+*~8u@6/r}ue-3w -&)f(U 79.InلɮٗV -+еEiaK`§Rl(5?jCGgސg?!*tW}TeoIץњ5~5F~NIj).|*͹|^EX䈕nBɛOAK.*;@H.SO\~ ME« u)ۚlHX| >[ѯbJ@7}n_ZmMjtj RgC$#t,LZnG珟Ee}k`\HaנUYh@x݄U6HxF2|_ oN-LӢ܇\ϫ|?-6V6>+TeRFMf~SMz1(x'v 5dqaw:sbC|pQ~ ]OjPUespqp0JJǪͯ2 :7 .}lVЧ=ƅz%R"U˲kѿR5k~uSFORmBo(^2`+n?D5t))K$s#_9K6v8/?s/M(HMY]1S^lVKf¬\eI_`XcH.A8-(~0Aje%oW]W %G\&xttN}OWa+ag.a[`JQZLAi"9Nn 3Q,|Hg.ٵ_~KҳX{Z77?#AjP")p\g5i~uSfGQn}pڶ_/v̀&X:{Xs fy줵Ftlhbq[ <[Zq/sp+#>6j0`ibe!O*/e˸_6*UK%xR۰vΣsz4NUϣ\cy-u._'tllfX"Jilik[X|b/LE -yLȺjTΡ7Keڸ钰ʗ.ghǦ|6G߼K{w[w#INZeкK69꺧 jQi>6+/  .n~ Dh!>iwtI/B_1^fr<+G9ZEO4v\9NDiq L}e^w:&$YWwŲҤK׷ؽrQc^f!iTTZo^ʗ(  xmCuz3#8nE]||GCcR:u\(Ut4m 6LD"]ğvQj-߉QcZ4Ď&3dCߑϿ{oWiF۱lO[QŲ)M\RqYC4iE]!'FvlbSӷ;i>UNAoϖy,o" f=fzk|TGm"]^";/U=H~&vvt W(a&247 ᷎y+R{xp`>fb'Qdž. B3O_<5k|9[wl1Kb*r4TvdSdގKS `Ҵ#<Ǘuk͡k]y3^ݼ~."QruƬ9~EJvUi<ȋDܱiuOٶYN|J.ܽeG?w\ҸkLϩ(Xbf%Oh8Iҗ; 6uaszrѤV#c tyѾ-&S[/hjʅ&"pjՑqgίjRg򘧧ԛxUքI8Z>)NKoHxJM3gwr؎CgY|Ib]HJڅͭq𼒣J!{C9׉hwq-V&w֤ؖKf*v}gkgb>nu=|f]O|esc]]~~mZܶ,PD?y&*ղo*m4MsxqMo:` iA۱3&e;I jugxpl%+sQy. ٧ķM 9~!OҶQv-ʺj\G-wsN{o +kJN=9. aX6|H*>컽I_cuxG|ǵ̬*&AXkcD~ŌyPa<;_hv"ˊR:hqBm}KLuaxͫ1y'똩D^}< (=%T(-jm"}l u0+exN$io*VWݬ4U|"Y3؛1皚˗JN[zlp탿{I_6Z a'w_>qCDz̴rľFD˹:U. Mxmc[YdSL qO5Ma^ tBYz_؉NF^,U p14H1ڏFVjޱ+owwo>z&Ri(8֟a2%eW½3AwҰau-1 %3GOC~ۈ`S>CD_gYU3k]X?/qx^jg+ׯd'4'"V.M"MaDe^>$&x/,ӽ#Ks2<'"|6J ~o'&:ND nI, P1߳,=㔘tYە3,Yu[h2)Q(!D7T]J#IQ7 jibAD%jf& abƆ/cIJwCoG#zq;"-IǩPޒ""",w):%M>QيvKZ3&=}>%ޢ^2verک<㘲;ߩ19yL,n14(_d%"QYWQU\"r/%+%"*+%HYe"biத2C s{i"z,Y̽HAsMq jPZ<@dZui(oY +;0ogD&M5キy7*ok'6jh]t k+1w;ƒI}Fi+V<*KpN}gm҄k8tY]byKSec;Q.T`gb7~R"_\}DT.T.v0QHLa)5o"20KhxI#ђcunǰd"Zۯ$CPa -/e@PdU@(_Xl5?^U\O3+.b"R<0E>UAZ7٤9:H~D0_ 6ʓHuX6Lj'FQ|hƪ9&8ʺ&%uC˒86JpaX$*=#]O 2Nʽ: E]<>. aqjlHwk"[aِ5gbWs̒OIZB ۯ|kkbN#"qR,>K,>w_ oˬcwB%2W'=ߔeߤRɷN:ңUoh5D9@D4'Iҷ7j]zX"R(;QTu2 9N}҄=݅ 3;UdJR䧹޻?z|n 225)l]梡(GYu,ynՠXy3M38"L⛘ZY99&>,<"%9l] ܡ!!#C_ ;ޠߨ#}4FiRD4|_WoR^{u{ F!Vl~&v h=-n tZwHzsWdV}D"*Sן p Gy.vvvRkCW|O*=fb5%~̅m%.B==J >-dVv#oS˅ٺUjwh(":>uN:{" vN]-{.u~PlrWmi̶_im\lq6,Zt鵇7CűQ8V0ar1SV=jL_].R"J1qᷢ(<+]+Nwz O4ȡ; O  iMU<^'Yuz|x4Ey:%84XP6@?6X(HxWP˟Dg\ r싫W}xXNG9{0+Vȝ|@Qm(ۦX|Kcez"| .qeٌJ-{iKM+`!ߣL=]1:'4h_l W} IMP=,=vyFf;tMBBeԍ8<"$~(2<l~Z<ݛuܬDEvΥ%~rkmZTi}ULc0q/ؔK>v9L\Ґ/C5Z5]Y;qH͓)2@ʟ3vO61n[~2ͭYVn0~ɁD6u NŊ5d,#a+7կ@خL1;i5OCKS/|\W*8V<}Sz&jd64NyJYڤdt0Kcȵ_DWqaxݵ`uLI_^T9ԓc29Z8u?K7֯Uw*^wٷЪT)n?"Y ~gV#זښZPhk qsWC^FBGCN-~.ҩT󻲹}5kgdnѬH۾G/߷ElQn(qi/+ XṘ2S@ʟÝv"+jtyAO?I?~vKψWp]0+cݟ_ޖ3sއۯ&%G0N;7]ܙxbmIo#:-x5Ƅs3cIbxU"׉U|UeӴ/<̣K0jwBD1<:~'^BD 6jLHD;_%2S+D$=2y#;}>s7gڀaIyI{<\OXc/O;)NA d~aJHcp9p[j/Eڳ#WSkL]ZrԼmц{Uh+P9ee?Ar;ƾ<ǵpNJ>a`b&ΈHS/1YcCDBǠ MUB[UoXPVʤ򚜏 jo!$"i7 bo L|ӎg* niq|]s)*+]=ҿa[*KKMD|u2/w3n.zԳTvYD4ޕ^K~{S[^[rT. zI%gg *Hą*Smj1Ճr7ѯdT =%lͅR.5gy9=mݗۢ 6rWI {/)D]jk29O7ab(Okb*W~zF<['mvn٪iV5Jf5o[mHYe&b; _dMD2J%1&0Q_İD~b"%F^kWN_ !"EejLl9MZޜ|9qN~]L|_D[{z'E$>rvEc^P@c9wSwS(2!"){Qr{ں/E E 祗}rC x ' ߳%&mnjcn5ob.'N&uㆧG5+opպz].eq|PzzT,]a,sF%9zFnV!˷uu3z>xs<]J/lƕuŪ&}]}t׆3dM7bU*ʫ?3hR =.hV{+˗mSC3 ͧڥN:FTo)ci&[/.Zў+o{P)b1X$^6#lnXއj>Ec/F$j5*%qUZ[51mjbr{ں/Em̗ E/+hQU:|S ՛+{ܢIn(}pUN.]:ZuN&^U^.b-_EiqRQ~~|YqOXx_E~ΨؽTN];"qvE':rNbծB"Ckbz 1%Dqx"umLGLDW ~.MMsEm<'b+,$'>vݯVi}ˤvϖsDט:1ϐX09] ʓ:)c}VL1a^Sn*N輱ݯK"߽Z8(c$kʚk9yKLލ~\!(I& r\߶}1mM2][/43l c5^ON>u_eE]SԞ:[/ um!-}ʽD6ws i>n6-R_w^}lG^=nE;oܺx-c\_+eI~-zL;w/gb^[uUZWzb Wanʦϱۤ?XLuڱMMlV?ʲ!K?=RII7 y|f|֕LD<&\Ͽ;'A[9ˆ4kJ|ظÖ3; k|KD[Y4yz2>NȲ!QpiTrrİDt$ˆ$E%a3O[f,>!mjy*M-Vz-_lWn-Q(mJvsZ,UaAm,J cÐڽ:6ujajZ y u XX#xMDv|̎ XAɑKMKk*[4h|[F/jrhgZ[J[L v٣嵉ΤʅLHD-Wa(_?4ܵI9SCPlo{6(kc, Ԫb+S;T0򄆕[g*nҮqY3C s+|[="bu>}$稒aG1"~׎*Vw>L Ox.*eCRIez<3ƭYyS@Mםޣ. j5fXl cm(NDU!˚1x%z>w46T6 Q1E tiIfِQَ8vlkGi薲y2X}+k=S$roAm>]*U>UpߞrpF!\Xyqџ3jZe.ow:7>m3YOy-2i\fwAqW;R}S&Kƶ K%|uQ>*(_[t9v,sv٬\wc(*uW%Ysr[CۨW/6.Z?&"\m-iUR%3wfp|NK޽\}n._y5GU{c_>awm˲(bfѫoz𼖖D2Nmz^=9Ȏy?P;Q}RcvkLJu2r[?$0ԡLrDWcl{GڦqEi[.ZhMCLX˪Nh?>'xnLizs\(-._?cb}K^noj*, (\ea$vʴ%aO*%p w\HEYlD/4OO;uQʧn[yRD$E]@&DD{~M<qڀSBbI)?Pz5`cChDIDAT I $#ܕT +Knuib>y ͘se%\^vtꗨVBGEݗOznD)1%3-Ƭ/r+>NU,KCر<O`"V6x5(zw~<7}?2;LvcYmwKrw1&])b)|7.+Areo_0&vS]W"m;^jxa[Z] vO; ͉eԿM"MaDe^~ PܛRn+m!Jr pY+ז94E*'0Lܞv=KDmV8s/Rm{SaܳDZ8m7P:J ""#[ w/ϻQy[<ٷqWF븣e;b%9^smk@D{STIputPry%vn4jֿ/ӺY.C#/srPS|79Nk'U!"ϕ -GD't#̅DyM mtc"Z4ehnGd"Zۯ$CPa -/e@PdU@(_Xl5?^U\O3W)EbE"2sXRLDȧ*P>>#p!"rY"uX6Lj'FQ|as4ʺE&%o $Qlb%奸WݒƯlFD+Gh͉s8>y~jUr[w^9ḋ4eS޻{qtNM1K[iƛ_$i ѧ6o}c"9hϞ>Ie,%vsG}-u. Ȥ__=_񸟱Gy{,T*]Gz>gq.nHD$}[{c.6PcX"R(;Qlȩv&.dށ"S"?0ѻSpcfΗIg{R^6 B_ ;ޠߨ#}4.ۏ12objkiHDf;'il],<"%9l] ܑP,-&[JȾz~RܫnIngnR孇*Z"G~z⌏s @mi!Q0| 7,e]%&6l}6tԗ7{*j^GoN{2‚5'FUeq_ݟߧ%3m}NG58٧UȵB/\-`ڐ_Sh@a_+se[FPOn ~)7ROK98|;rn/0򝯼l.JhdѵEעK=~`w퓿6wW^"Kn{_=T>Ic qfl~U0-1&L.f֪g@˕^wKfeS*jcjlY߾8>y3 ?B+h|ɼwB>zpH__+m$Ps# r= y'Mt=NFV?$vW6V{ .foՊ: C#ѣX`(4~rH􄀈(@Hs]a/-  $v?_$|@O QvE`Xyr{pv*X=@(F;=@O yRzl,$v?o1~~:Zyy>]ƭ?2vϊb[aزắcFτܼuL:_ƎϛݏhC7vkTPȷ(]c]˂7.sUZltcKKѿM ;!_hW& 78׫d$ ]/z=7 n(l*àoH>Y\}s)+gUA4MoEI|Ru"cR]'"b%ԢXhlݹ'1sάZXX2)D;8YM%fOxm̻ط_pe"rLm|jD!GgF[DTO"vҾyw<ҒyUS|1O!6Bj '+Mu ]Kr~g"-wDTo $_hY_JsR~/mc|A kbj"5v_(1ғ1Ш"Nz{q{jϕ݊ԟ3\(1-ۉ>PDTWm)Kf |/zKy@D,uuvnӯn}vgfϨkնAL?V -9󌙑Imiyy6cʤ;)-8损ea[a,²!IDtދ[b.$gQ1t?Xl7{XtuODݪp7}@D ԫls)gon!T]+XL"aήUqg/w)׎()"RcWϕјvoYY:1ĨvbE e!R+"6)QиZV%W'"]qލJ}f]ޥzI;78rϹs{2 x ȿʃcLݷ~93EÃq)˥/22mGc(XW7jGD ҸtYSD4ٌfu{o{oZr)D4}:lGeZX 61kZ;bDKRHȷ*_eqD㋽l 0 ի%h>)ZR"3f7*i(> Q ђ#تZi/\ȫD$n\J|IfFўR\P~]_;q0"sY #NrlhcSD4gEs+'%{2{2 ,_D #mdKPTYy+~e{OF',KDbk{Ev1Sc2Zߓkgǿ;5WlW`f$</oc._FCJ|LLdZ BD6;g.(= mxM̡_p7ZrDHT&j^BU#Rlk%KwFbg!"ǣ_t7[Ţn}%"%k_:񳞛{E0tئMylgχd"b(IwDh\kH ꘙ&"h$"fz)0,$ggԌn*KzDD7x(RsbjD=;82Y FtȄD4%n'U*םލ'ʈ2Fs)v݂s߼\J>JD{#:sCJѻ)>$1Meܸq"r׊t7"屹[3{T2*}xeCdgLP3+^g( JN,k]֘X.շg1$^V؅yX/?gˆ<Ч'Tiд1<"zI=w=5gِȧ]ah(.Vjl*$\֐ODw/)J~_e_P327b U3񄆆U;v GD'\ʶ(8&Hc Y6$4U- ofeUiMe[?E^i\ϳ(Qgq{]ת%Mx OljV^y IVGe,ò/- C9y /NBd:;U}o~) og"M5y uXjGx OȻbҍ-;cM6?ΡRRP$0 🂡X=o $vz@b' $vz@b'~_3GJDh2.f˛1fIAi2EH.)"])Kuʞqj 3~gg?kZ{sh:3v'}5۱_ %n_u  "H?e)JYܺu%޳'RƇ{Sӧ}G$6w64ퟙOJj\'~ͧy!CRw%d}rc2<01oܼy,:ȿ<4RXYٕ$,Zi6xNL r`P^^ukXH[wlmmmwQQ~/_"O"=۷ɓW] 2};^rN"$%e"Iw^zU{6LKG4 O6+LڵT^OP(4lsvߣ[+=xD"s/qZ () K"#[[;;-=7o;ۗ/ˍtcbTUEFΜ%%kGGh14}}Ʋ/zRxoύ,痗Wya2,ܹD25mttԨjj#UTF̞I"ik>|55eIAA޽+JK#ϼxq*8x[f~AWץnjj# `:O*G XXLch~/^իZ~P{7!ogK$2'*|YNF޽HدkWm]]Mj+)+RVV 9 66Tnݻjk'&ftgܰgOP(pvW8=fJoHbbj.LM@$2wt6|Nrݻ뻹9ٙ i܂h Kwss$c%`޶D~s g54i:u8\pWVVc2LҲwoTYYY/J/"2^9,!អ"&MZ,Oo9o, g[EE5EQO! @KKmDfn]^YYep[äHAcggeed Le;]=;իwɾgn]II(+ 7Xx{?w~}ZHI틊JH{c<åKۂ_zx2-;hv cd]ׯTP|ǏÏ_yÇ1ԇIM-F;{fl EAFkӸt$EE1 f2`M^}+WN#>/^L***4Mcw,+됇Smm][}#-yyzbl@d$\AsB@XkׂxAZLkkbOJ|Fg&`mxMcMo<0R#-'`kkUE,sssRb75;p ,lݺ#b'Fhh4Y 9-}Qm߾V˖M&v>Gz 3 K$]"<t$bI{áHTIIY tVIֶ~kWVV*i֭iågS-## :3[t6@QQÇ?,x=@0[PM/MRT-^|XڢU)eZ|߾VE4}Hc(+((xh ׍pY%ِ̰"--5P m߾lmbDz=CCW2{1}X.Z4^UU^5 Xv[(C?]ݽ VLM=}%>s<[ M`ZT{ee}稩 &L6>> M?**#Ik)ω%%!̙І 񆕗W3iL F9f;^a1b)c?VuwL}dߝÇ/YgC~ ??r$رΛ7Ni^҆cbH$4C{Hmn˖7ڭ[wDلx77ǿ4%.Q5rW%*))|Ydatv}-DZ\QU}rD"Y0055 NTUEWUE 9kίŋ =Gl&/M-,]n 36ml/^Lb*93dBuuw.c͚__=8WEe@"޿lSnjnFL-\Ki%vqYBƍt[[~z$%e~< 6%%A}EE"s33}v-zGY#..e[IS’ˤ,EFFJ0q򪠠dӦ0uFվznjih|ݻ, ZGJgoP2||.OVϳ5MO >մTvdz{/**9yXӯի?HIxJ?oxP|901qצMs 8xIfݲeADzҙnm~Կɰaܧ׮̙mH#Gܿ׻HBNmN{c> :С0|xyyǙF'șU( Zz/Y3SM){2%Ɗ"쀀EECRRgК&NO!''{ߴr8;..nUǤlتs{ ۉv-2ƯFE MLKqqgd3NSS8v=2f{6O^^@QHio]O|GRŋ'\pҥ;FD41f@R*Oz2uusl¬Y`ٲI_q#ea rݻ7 _O34L4)%ϽS8GF^:]UFÆ=z@DDڵTk)̺apf vvfBqqyΚmh▐3Z v32ҵ0HMNJlZy3H$DL/7{0jCX"* }}`u7k  R@Ȕ7,tu5Ν5dG̙mf,꫟~&;F]?33׮Ki6> -[6لnƏ><N~]"V;w~trq upo_۔~VҒeڴDz BBNI4=lmMǍKt^loHן`nqFF}e_=s=KKgϊ3tu5Nuiɡ!9pp3K$˃ӏX]Jۗi`tUvu@+VO -`lϸML&ܬp"O&9>|_~/((p7Tڬ!|袢RcDj@?Hyuuo*++~"SS=Rqj)rqqOwp͆цț׹fBBE"sP@t׮Nqq;eR\܎ >55r|7x\MΥuZ5hPO};U`66ogsrW | o'\Յ}kjwS'2l6OBgfu%"/ؘl8'4t%)ݽ{ٜ9hh\TVV~F!BSSܖ3IkXMM-$dСZZjazY3]h-- %3;S\UT22t3+rU}gՅPVpbР"'&z'ѣ1aagJ W1K4MϚ5j*W?U![T WPPPPPP555PPPPP};M;[uIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Description.png000066400000000000000000000307531307543307100265310ustar00rootroot00000000000000PNG  IHDR76| IDATxy\LLi.Ye~$JI)Q,ٳ%dM*p-W%Jڧfcl};y9@  PC$@5jXsZ!PM s~_j B x!C㟾MYVÜoXdJ J۝ $Wz}VjŨ%*W;ܼ6;Ga4mשKkj8 1&504PFfg73}^>=>v氳/ޞO&*MYWz%YIsk$u 5kE3N=qcEEYo>8dm#A5 !PF: ?Kn.Ϻ.MUTxs;>tUATB%(J|$1xA{'AQ1?ňI#n&~(T342kZoD/X:.ըS3V:wukn`Gk%:Rѳa.# -qRFsk{x Oo=za /^Rzm{tΰl䥶Bv /X{*/M:trqƥ.%6+7Gf􎺓CrxUSX pBx Znd₸`_hk/*M~EJ?;\'Yc~☏ 5?r1(Ah;mwx=~{u4oՄY.R J V>|3$;'\1}CEzPaO68o˚ۙCm8rb u?|:;jbܐ C`OZqtWFn}_q0/1B¥tUXXM@:#acz:WBg9|xj_]jǢ[g ⳣMUd}Os YN9j[cNИn]^פI>M|b}q&H?gk&\UMP(LPeW&THBuRTgɏzK򗌎$??l7G_ÆJDP,B.LY 8ϑhqsO/&Tct+,gd/oTځIM¹r^.dSU&‰,!Y1R `ޯ}\vU#ѰP Hl Bk1Rfxaa]`jUq Cy xB[s8ݮln ثJI~ޛ/C鵇\D^70L~?>?!lA%/k(=XqdYvEbT??HY !T-; n (҂b߼,*QoY{r\42l}S:~ v/3,qc܂ۜ+w|ɧj#U]M&F.Zpz*2<.;bQ |wo}MZ79's 3>s )V VO|a3C%eqo7G HVX2N$ep 2>w7mXlz&nԣnmѻzZzz*kB_'՛Z~k` @d1þdyvOyqs= NR]w_;weиӈGG̳UĸU,ujg쐦6 ◊#y?w)a0TZg~J귀9! {v6,[j?ޱYZ#Xa,T8ʧ~`p\iLPiC}p =W5oC֣ e}7|ꄹe[_CZr]{7#0>7}zLldEgd?%zneGƲͶG )zX0pS6(zTV=|cB"f_Ǚ=~y^,_7> .›dPޛ;#c&fwjW$o8C]/cz_>6Η6 t"GiYUn&w%jSa_ƛ q[NQdq~|. ^:ꭀ'Iik6HKQ.C$.:rК~ ~&a`9'/fDK%W|7%c9N*+دm#R2.%ݛ;o80WXy4;yXAq\{7iNVfj"fyуJAETz: oDC^ lȥ@=k@*rʶdAc]yGƢ*Sg&lukjq¡ߦUSTlB_է _ 9|n1͌6)K;6чՃ'Ht7a.-K EL `K:"G|)ѧLOm=9f /"*W"TܦC~) I,͆F6uO~C< a4jWrvFv_k(4ӑ (闇j13+urUV_Jw)Q8GbaG~ S7گcOeՏ~ aNV4^VF5xeFZ|aK&w{6U1l<@7$J*ip"u[یD7h2Dۿּ9jQjVKUa OI>oN=~q*Ue֭p_5iv,l+f@B/?k!AP7/iqٯqiL=ޏlxܹ# ZcI]ŊBDZ&Ꝕ]]Ϣ6db5(5NPM%KOs@ +dW1M'~YDh >l5۰, yFT]-a8lp_>e#_o/<[;ܱ";24S/U.q؅ˮQ0σlEeT䍚|"ԍ= ^L Jr#T/aiPS;՗ȢsQx !鴣Yz3|͛e} c>>`xCIyvfa9o%»Z[_H梂[)jպNgsGܼRfel˾+_;͉{r+A'>_tnu'N찫C,~zR#*e쒢—nc{aí=f7 i.~'WOlv%K@ÌbvƱ>v|joR;n?|:Y+byiz=/5dc~IwG\w18(䱿ٷhL/:<\gR쿹w`MxN\/Ľ_wqiRvܱ";Cy3i.J[Iv5x]r!c{6k|i[ȭ<C51 35@ ɀsC ;P:KiusHˈc[V)hTkR5&`bK E~2lXlI6PO m8<.kFݗA&L16'>ʦ8%]'ݾh #osG5Ĩߕ ܤ12[l v&KvF6qagv)9`nffcIɥq\ "7"ͬ@ #zZ,GG U {U5i2'uA=׿U8 [AEިS9hA]X֦'Mp{y7@"5C=:өfqn ņ UiyrM/Etk4a%PvIZҶWnTpMǕP2S[|(դtx7Rn®bxOt;+aɯ $]^,v &yٍJ-O Y+IlpRg%/p*]{-%܏Yf+{&1}^<_xJ6els fR:J›2LYGUĥT,,~;gid0AVjXg;Sqo KxEDRj\^+fRn_c]ĸ}"f n.ܳ╣p]ou eȅgO0=ct[#s:6vN>oG~7ﲎJV eZ[t4vvaZwikJnڿZ-MVDi " .k"٣oO\F-Sv,P5T-zmXϱc`I +% .}Y6B5xݗ%S,k)lGyާδ pRmGՋBc6Q30wymyV 3~U3Cp!P݇Y !P݅Y !P݅Y !P݅Y !PEgX!BCk6<^8!0_=!{OO#*Y!-B{zMx!A^8refU@x,UU2&Bo!ircSy_S[ UyT 4KXaLReqA\*9,ػB+J18 BPu¼H?l)Nx mUmF.|q@sH0B5NZk;aޗw;ƚꧾ~s}w5b$\lf?I,4n$Zaf(hH_tʠ fխVƤ[jxApf CA5~BHw 7Z!PP )G x;*Ik5~!j%3m&?yf`h26eB5HB5 /E@3~IB ծI@_p!y5n=O>"x 6fm[ sa*=%( O2NcnzT-FG.Q dijviQj, cQw0K!T 73}^>=>v氳/ޞO&*ўKYWz%YIsk$u u`8_%6b)oYóF:чQkU_pI)?j]KguYci6Qڽs?Vq wpIT ) uGI>p7`+HM\׎Noԭ/>߈v䪩bEeش`Wǭ-Ad'F[W9F| @Ubmӱzws|3$;'\Jb\]rJd Em8rb u?|:;jxGv ٝYxMڑ U⭸ۇ:}&?Ef y]3x}Ҋ2r#/Z~o"$I5ARa\W]˧tb&ʞTpi*]U#(4VSnqP aؘz_n+JPIYZ {ɍD Jj>7IPh|5/O ̥= :BʿE~$Eԓ_dt$Yd96T b fOvk2b|XQUZG:LidolA)0AuS.L_Hf)j.efY%0y'!d{5^ DqͱWK]7O_k<0L~?>?!lA%/k(=X+CAZ (Z*Қ 8|cj'UtRm`ˎD‡B1طj#);3J~Y{r\42l}S:~ v/3,qc܂ۜ+w|ɧj#U]M&F.Zpz*2<.;bQ |wo}M|69's 3>s )V&^}Bª 3"zN1"yg\({֜'}KJV͗#qE!HR zcAw̱\]w})jAU1q(0`OEE@7lz2O!Ԋ `ihYw}@xei>] '.[ 1 E\XgQi3 Uu;7\!rtikb3quk{ իSY:=޼^kW8 łTl׹oDd&c(wH{y|YJ; H@F/!j0qy)?$-B MZˊ$lukjqTo] |,mz[=>`xaq1]>v/EyƧ&˿=$ח* =ńpz>7&?D?5韕 ]NGW~}~E<\|TR[_H"Y~()ߵJ ωI CnvY{~6'~+iV+WNcsdJb+;l.rFo!Id~ N"IЕxHXҮ])Gqo+ MELףq^eH2Z[Ta.xٌgFŹʆ'uPըmO}q'veN SmNI9PYǪPK_!V.Q֯hW6vHZC6+ZV)2? *jVTlxe >WRfՋW#R-ioa})in;@ @ B8h̦A)*4 2^)-V񅌰s3T;@ÅY "82׉m!kE7iu[=gKpؖ7n\GN5`m~*9l*LE߆FY/d7UvKmm,P5RSkЄ b`dljqW'D<*q nv1\Tܛ^Q?ѷw!?dՉ9\~ǤMS?oy;Z |Dl_5ھ~f?|k ᝱C8qۋgKEJiWOlj5||rW r^ߙ88d)rÐۯƨ'i%|^OmdRV&KvS^aG-yoC7E6RUr/L5t:t0|GތSss_ f׾g,ZE.:9[evdyAus[:ez#CJWV^4f֟9͌zjK9~@ >ii4fTcfJla*/r{i:]}SdCF j;y9nYƿL+z+6L2~/iZ-Vn2^f c<f'MqV,^as2YTF/!Iē;<6,f15]nA|epv5>!Tt_^()G x;*IB 6ST?od6Q30wymyڎH!4*3~I f8B0K!0K!0K!0K!0K!0K!0K!0K!IBH{ BHHV>IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Distribution.png000066400000000000000000001215231307543307100267210ustar00rootroot00000000000000PNG  IHDRi IDATxwTKo *"E v "6(S6b{((6PD+֧OJI !cCB};p{x<É ~^J1[ @ (.R%"yp8 ~?t>Ŝ,zG&sV@LCg+qjPtSΓH*V%$Ig''".HqdhER4_ͱSq8ʈpcK駦x`JdoӊVxTZI&j{ T Mg9:EW| }۳6D[Zq\TOc-: ڭܧ>=2A/KeV!k${sIZeGyu h˙_Q \kS@B,ɹ@7]s'e Kjx\nreQ/^q=#|W1 m, K@DP+hd\[Q:}suc2We^dٱŬz{( z1F1GQPG5cf/dM5߸ogL,)FjM<[((qf4A8Z@p8JT)tr(*:Awm}cFE~s\6] 4IT4=% _Cܫf dGѳh,01|hEfpm0b.ɶ>J&=y qNЅ@5t~ ttvד4UfK]UM])v/+&l1,%d^i{'<ޮ}y>ks%^@LCn6>z%~^ֲ] T<uy8!5/÷*ѦV2mx\J HT5bógo2i@CO F qxN(xї¼}KWc9똭l9_W{ڡ{pC]gO^yuuMrOp!*ORa@u*+:goWa8ߺ1l@IsLizJ=*m`~yv$:ǔ.ʊ:._FlȬS/bv/f<Οo3uwhu]Bfچ>w7s5NK4pHx1 {jwU7õq|~I/Ys-/X'PW *Aff P mk._o[ TA8es Ey\6@YdܭJ.&J.wM|T }1*_Aӓ[û+;tx!Po|yƺ\wP#(QMK~{~qE]<6lP!L^b1DO/oB]\v3'++UGLATW>Q/*SY`vQLeKG۔Gw2M۟|vұπע!UGrУh.T _o[ A8eOu-k\%MK;,J|5"z0֋z NY y5`*Wۺ(+CH+vh `7Tj3fD|OÖUƓMdhh`_ꬻU _Y֩̌ko]7$W/%* sa_;y"+cGnCjtBe@ Ԋ#Zf9j ;v?ȩb3ݿ7@.ܳ_@[*_FgsY ^ϝLC+@JFv30w7ORYM T5pk+J\M 9]uLA ۉg 3|St*ʔD0nr{(;7$ ,cccONW?+9+V,J(s{ _>>he! V-:J;AUmaa~=@>]oڀQcG(fQzXs?:P|J%iw}G|6zV.2O }Go*kX@i| P|پm1∖;9NEOURs3u1Ϊb9d` nsB^1cg4?e*\1žzL9`#Ԟ_Qg_rL8shHZ~]屦&RgHhIlĬ5&1 ؐ OwS^=ôߪkMxu 5WL@go$-K \1񝬢E"cS&sS.¾na׾> 珷Ϲk՜GzW硦_v)*fJxNn I\{V ބ 61Zw%E~.\I(W/@L5oY~6N[6[sZچP(+`tLm@58ɫ6E" '+ꫡ8C0j"VmP@ )k!6^{lR[U[w¢'0@QG ⇀F@G v_\sq4@ D"2Uk#ypmG*[; @ ?sq o:v #҆8wG  Њ?9ql+olC)7Dkl"S'v߯lp8ʣӔ~*$5aecjsϴUWr2`L1ѱL%M,974af{OUqu\ <&7HPl^%Cm@gVs¾d\8Lc|t~H6=s"txߑ\7o*kE14g١yG=88\gјQϬz#ܣn ne擋mC{(볂NU'}z4CrzLNj[]6d:Hg&<,dK6@ |/ƎJ݊= GpFBe8 xɷ$iwʫnLyETָ<QH"/ &N5P]]}Fћ{ Edb:9u{xˀ"Y{TN`닔:lX_[\2F ϡ f}XOQ=kit8>{0uVQKn۴}pmhü:bd<|06yW-v_HΪgs7+ixh>7^_G([]K=UO}?o7WzlޑƆ=+䟼߳eIm@^|o+nۺI>$'oisC^22i>sZ<6l725b:,u>`g5X! o܌{MǪL gZl>nYLGSvSN[$6{V&:<+:~S?Z0+*S]e\j#B~KB_#ؾs_V \f^gk$4@ #Zq@ ~WP+@ lYm=o-|p{m&Gc M ?Z]{IΦl&V c[g~w<}y0`{ !w 5o kQMaa;ob΍3DsU\hgѱL]xfPiJ?Oh0׿^ײJ[it懚pMT"5?^̩I;A )2}xE]9o;S8ZWP?XbMA"ѡl1ݖŗ&qgEPT 붷2\jwʔALy@`'{*>Sf7WֲVtdP :VU&ӌSp/M7\nGCsZN]wC5hJ[iM2{zktk|#c8'RNѯo[]v‚^p)bS N{s-}jX1k$2/ :&MYZ^DUY G ď{g}I444mqvyoF;gڇ%ONN^2 aY5ڣQQ=1zs/2:!r4ѭ%6D^n*zWX+~:az'w/*Y*i(+M%N6SU.%NUhĽt6RS9\V5Iӯ~F}V =KƼ+]cpa@eq ^k1:<924om7ֺX+nVWe'^sȋ3CM"ܾSfSW&ǷlO@ V?2088 gq&\VHǴfK;Z?9M_s#mR[M5Ϭ>@P5|JɓkZ]CګQ{fA~ZkFn'f/MʌWv{BH4ki`>d3bh9*G="kXV}qEsaJйZjv*:AeUhk sPOWr0 |*18b?OxxRc:KklP/Kh *͊t|+֎ /BGrDO/LEnPΔ0%|Uѳˡ-d*K,Wl} GW^<蹪Eo=DAGk/1m]tӶRʞ^Sq|wUbr;ք^Gh_q l4f4>|4uMh_r]iR5F4t;[T{_NE:hac̪W$X4<ʈh- /Y鵬vH0cQ~f 2=dWS m}cToώ pE'İhFph>ioO?{nx (>Eph^LUp o0wσC)GԲCnKW zs֡Z2.7`9q#C]м,#g ߐ³12L1KL'm~+a.O.4kL5~~,4q7G  !6*Ƙ,C^OWUrp_t ט Zl;Y)*cv9!F4Jsf":2$` \NiN:wY4#W~7 mJs:2('7y,p&^࿺̮/pywtYQ]9}=Mݾ /H1%f`C/9L6p Do>Y8>Tˋ#Cj1[7 םB"/ORRps !k_h|@BǔXLi);;Sr&-w!KilS*]a7:V08]y BA@ q+fӄod;$cJzc'6e0R+95i^u*%S9%t@ A}q07kDUg'yV '. P&:XN8(@y%rʘ8>\Ų$u41^.f,qBX3nuq0vOm?don*FJfMȤ-E&ן4((2ls6 Zam zDiX~,x&ܪ{zE]LgO)7ͯkN{0L*p1|eԜ|XWEFk6*6P.ai ʈ̅I)֦$ͩsth467 cε]}^_0eilA.fl}KǮ6 M@ eeҚOQzUuk-3ox)8v(8hwz!6xGGH]a!E^493ܡn?Q1s4CPPQoop~&NQE޵F į #Ch8z8@  j]A8@ +j[^l凨cmrvpWpCJ~LYBx:[N2W !˵I(,{̞?74/kЩ "kqx~l椱˫)jGhiaT%j3Լ[}^3#Jvnzj]7ʬg Qɾߦ3X(M;$KbOkLˢRX- FX}"9Q-@|3؊]o&YMnm5u#J3fʌV|I)IԳNos_[r޴/uT5dCM;qnj ^ 1IgXbә&]x=bk?(bM&''|Y--h4~I~KnU2TMmJת״aW^jIAOI>j 䯅iþ8U{Y8%V;Ss [];8zܘZXQo*c#G09؊zXͺ:sM3F1AC'Mλ:KCVU=iة .QU>Hp.Lu:WKNE')jbܾ}=HctL=K-EJVA/kjGMŹ8 zR>JxmcS`%o6ZY~D[Þ?ITC2^" x*cq8KmU 2]_!K#i,-_Njޑ;KLLN7oMU[v"l !VE&u@=u;o}BIgw=b&PuAd7OoA?.P䫜eUO<k0" ]Ex^pV4[U )2dM/CPV:iui-b#$>Ĝ͌Bϩ-f8~W,`v}+aW]uyIjW* n[v³=QAk2ʁS1F3%/x?,>ZweS6xwGLG}85koUlcT 53Vs{+h /.(ҟ^ G<\I]_sԿpK4 ўֲKΓ&A~NCsxyhګ]QԐn;%z@9;)K{:>͍8}>-KܲL|1 'T7>Ne0؄8S]eiQa!*C,>)růb,fC_h啢b}/j]9mEdd0\%U99'b~;er]mє,=$J['-'yzQi-b<J H)f~V-hob7 ^xw ةk>KvDdS#tHtrnЀ@{jpL+6XzJ7*o[r' Vfc!eo܊#Dk .[^#ce+dQ:oɉx| (?\jUq 24H7?yz]`{M/]%iwTB qdqոܲ}D0>u15d' f&慙٢2BTXDsnd ‹&'jn`KYd٘SKrT%uvCZKA."M4YsD~'0v$޹[59%솫]IJ0VdZr8EzI+ lKSj^HS@vNT ZϝU.^typlٓwVXz')>x-]FE{c`A5kBJI,7Gڃ*ҩFc}8f+@,QFҲƶe[[ +ҩږ&DKXwOvi- J}#eE=O#wTnɠ~%oԇ s*q8|s5d~$l_spA'8R\{)6skLjNoQ&QMFqf2*( Sa!*C ƒYxo9,v g޿tk`ߦeO$p\:0fWΔ3%&*b5bUlrGK8YR?g޿bxgf>gAUK lKSOd( S(T Z"_ъ[-g,k˯Q"J w$82Ptm55N5+6ga{&O)MNp:;Ix{]2- Uz~xaj_񚿑1듕϶{HUfD3Z^m=j>hdPl u)qNؾ~Uշol_Zg}J%c~+4K!{-3aKIZȗʆ:Dєt0p:˿4]TXF+âScaCm.]M@BzYd$=;l[24v7̰n^ /~^w cJz}c6ATqdV쟒X}"%S(T Z"mՊ'觞2Ph<_&y_mM s#JTu}g>qap8J 8_?׬I=tROG>jjv>߫5\Ųzog04d\RjmLҜxz,ӰSk]آ2”XǡsTt0"qFc2oɷJ̦&1z9 [8HN.{38Yf㭩jsUdHNe/O$zX(VE\bmcU?B<[w_?܆#j JxS_u!ĮmiP$u-^31%܅k2)->"fѨ奭?Q樣Щ ИյWw0i"ш otjRfuESó1%}gtqK?l t޸^prÕU1G;רIYinl]sL>pi4m IDAT(sO+j8䝾&́_Uޞ=ZS% *NѣSTQLIs@ 17lV]ū 'z{ohQ~ã֬)UWQ(Z [%<&NR&ͥZyX˺ZWyί{[xEل8S]2Se7YCU?=V\@D+x^ơa N;uͰvɎyjn\N" hOM~hE |c8\v7NssnG FI,vUZ8&;?\iG_-ۇca}85+w.ld_DI}NJ.lLp8EzIU'mHu5ITEpDF}gߥK>0 @ "m/aA}mmadڹe.}2cH[;x:/!QE˖q.AكÊ G%'?YŻ-g8@AW-LA+? daSK4rT%uvCXuyG12Kj^2Qaɬ9\?(V'5m0W8Ex8'm &ԗT7zE3hћCi(Q1d|hnckϊ8y7lzHexaEF2Ċm ?v怜FnSxȵSXOu,.82p{O2i ru1%/!wvY5ŀr&-w!Ki(S*]a$Vaq( Ɣ ICiNX0&$,#!Ea36VshEGW-{gkҼtqUZK Nv}۔k$vP_&VmA[I! ;Z,WIf^WI}HmUmgY'7qoz4; 5N x[{ݍK'AƗ`bʼgjkQ]4~d`mf1M?9Ƕd媸)&5yx Y&p1]mަ.O\Ltp=jQ@K Zam zD7, 7Gn:1 n?W,%Ll)ӧ \ |{r55g;UQњ"e);{.ai hFT¤ݔTkSg9B?v1Pi;ڮ>/j4 F DKt s>_rqBX3nk9XBQ~O6h-~ʤ܆az3|s!qY_otؿzhBɍÒF\Z(_^muCbLʢ].㲙O95cݯЄj"Nt@ !w.אE," L}(?5BP"h FH۞ i<]xX6- NQE^DHCAF}{7DDjXE#F@6#@ ~G w@<&gw_[Gcױt:6_"Z_OrF9_$a ii>U82`\.vE{-Q v6wF?K(#i 't}ZبG~33p!*wt&Ki'im3h[۔uk]XDՙ={,TD@qoV]QADnqՉ^UֽuuYV ldB~Gr{wr䛝$eoo`I*5;Q twC{p2%lEajω+bxoNvoj~*KY|Nu'ħy9`/65]qD9^6]{?'KZv:w|)WTUOʔDgRLVjy\-_jq*eG̪3"SxJ8ne`_i.O ;{IBvSxQ*;io躃ӥkǨ -;X-ы|"}JyҲ+lob{Ik7JyҀMj}774&(Ѳ. fUdl89pU)e&Yr M^îH\٩`?,[)D*e:w~ 3!wA]4;wExޥ?4~ז-3:(k+6{a47K ;l]r;xЬVlcnQWdxpJ†`j4zGbZAgEߞt8=~UXzrMFd&D$4-5IZ)N09|s/:WAgi]EQoPiQ\XzUz=G+|7XzdYǬ{ƣ[kOw̹_/`OCT{Nsɓ +av\uY Xe싧N;K~%L:1PwLK<}ь}T4*f7D76Vv}[Gjw:1uzXX8zș8ӣr/,鶉ͷf~wщϫۨ=,+khX[a׵6-*lFBYߦњ~&/W$}dXc۟KXR]z4+鶉UmV>uEƗH_IuL׮u ħk[߆"#S R|ccU賂RG6[^=KζaZ;?W~cj >aZrYEPE8CDoD[gUI9'cpXꔛu 9)9G nFDλ'9ۉU ¯÷GZ561%qrnu?IMQ,,˲T97n~yɈHV '̸fmT8N}?Mٞړqj",F7]쌑q1Z򨙽{޾1N'ՌkJI|߲Mv\ߓTYXLjaר;7rvԹw4z/6ݓ~% ;'.u:mBb"p0j{)u2bCM6]arGbInSѳ1mHpԶqaeUC[v U{_Wipgƅ*lqEyڣ[D$V5rG8>{3@VU ܇;NpUZX(UX%@E^&<=bަcw=#nP[lE O"Rv0>Zc}#}Qof!4 ?7]F,l+Ո,;ՙK;B|Fio4VbGA.= f" Rsi=.=˪Js.[o4ɫ]Q.=Ǻ{e6~ɻ0Vd=gKTd$şشIV.jӻ_Ѓ7O}%EuZt{sflj֞Ҳ gvkZǿ먮9S/wI|?N?[ n:}_I"̸ |Oei{Ϟdo'h1v7x.n37ي/[n;HdF<cٽTJEӇ3{8͹s}2CL \Buߓf׭+w A:qK7`!z@Lm͛_|ed[G`١,2c"n'ʋ Yn%>\97] o]ۗ,L0"&x1!UDtwELq38xTFڟ[91u{ܮЄLEZ›S}PpݣkRbvgN.݃Mc0V !B9Zz=>?ߺ:Tt]LﵮYbu*vS`:ר4ֹ5;ΟUugcD澆sNXyGr=|cy3]_""?낢()}ɿ|ުRGK[޾1V=[VMW갴 ޸`M h[.ͫ^ЏgƌJvZjDGi"ӒNˇO;֚pmg Vw쭝/jmx#2VwTM/+6kh93":۹-,|=v 3!Q/.$m2;=F6 b`4?h9"d[|h 6?LtFڟ[-Z?U 8{+ض=MknLcT>x▱?Ɓ߶h:/ei+Ww _U|++ 8_,Dn.l2Ϗ>n JfJx.c5 _bC|{{wUztD3j}?$y#yv}^gMDۛyyD׾Mv}\ P%#^2ʶOpĬg3άQbYaV6̺7ScNݝk10r:ſ7{n'7\%*ai:z}eKtd!"5⸥sMn~<)jO}liQ\.Y+gʈR;q1BJc5>yc{Z[{]"L J^-6=\-Ofjq**Y=5U(aaqܮ8 sdG7 ]t|2kˬE5|EvUM yrӟI7SȢ^Qw"jSr+dQ"nOvi=ݢTABAߣe3]e g{b*QM'. [īwsCc4 輿5̄F/;v֤g.Pk]W3vnM~7?Jz6x{kRThFBoţZx&Dc+7´m !37Z8j܅'ǴD$+[ae>HɆ6ӪPjL;uRCwm2Ck{mKs)'cN)1Rf]{P-r2^M\D{i N̍ԥ@Q2%w IDAT8]=oWz=%N5z:h1Yhk+DȎe%Ħ>;xЬV팜'8ܝq˼;xQztTYmoOoqz]bڹ̤* u_߬B:KSNogдLj$i{M5 #,cMK""eoZ7  3il.mWoҫe;b.-q3q! iWQ{4YVаW79 ׈_jڴ dMAC+҂>2,1㍟n4f%L:="e) us Xo2bi.yqŁ5s .7o}tЉsg1Ojz|~4#aߢ6MJTԥ_+gOSH`EvS,5S5iXZ1zMtĪ6H:YKd$Fkgtd>"K>uA7z\7|kk>;;Fq=O>CD 86OXBȊX ROћ?~;3jv„ umЋXڴBɎ.mkm*҅.Jo;|o')\<:ZDS#r{Sg-v5\M'wH"w\pzVSB~Ԉa*\tOs6yuraVo))lF"=hj]UZ%MT߿dCiU#Kb]!(+e uʄޒoEV尜#%S\?!8VRUsL1B;֭]yRLԥs[ ZfsͪpSq+r()A0vXT +1)s">.:~R5]"+rhN1tG՗wFMS3QFݧD]i==]ar[b~6bmZĦrĺ.&Vp5CD-/wќ7V]CGqf\¶]D˲,ˊL>>ݳTқ-iQ8sqVK klZFHnSnM1mHpԶ1x~YPo<we"i+.0BJ8nw / #T;OB+uȫKU:F^yhG&l5ȩиɔM(E?ozK6Vu?ǎznHK:.RoӴc9%J ~٤ٹȤi~D Ŭ{܎M2?ԉZ&RpBVg[vϞc{DGXZݎya>j=.A0N8n[?I7we3{ݣt}ų)nc2!?|TLEV &;⎁;[IE* VqnU&_r=-+$VJ-D,=f[W#RξO]F,l+Ռ7By5}#BˠH΅flsk|f"-$4 %L:DZZULW'q?zɛ3W܌] ?'bj>|Ыak_]T}Emmt] ד-z_b߈cv|a~౓o-/ϻyoG/cXY|R ^C3o㎮ШIi)7DPXR俱YJAUSϳاgqsgދ Yn%ޕ_ظ |:. YrgA՜pM~Aޤ+s>\>iz/;ɑbֶ}4.Q2e֙=ʾ o횞MhڅKF"&/`6Ȧ۸c/di|u3*kbR9=kJ1_ʹKCީShm&[:|u{]u+A uG:)΁Z}eFˏ^{!WGsh1XhF;Q.b;9'|f-Ɍ `4^wiQMvzaUwb~sHKxqԱj{Ÿ>ǝr}GjޕRͦwܪ;cog0Raό'x5:ȉ Uox/$m^6cTnJ VgC-E^~fy{wme]{ s/.( icDs_wf -gfj1*sc[cd W#1eYڸ7?2:H㫛Q(0zյ|%澭zm4_UU;];B`~VN>MW갴 @D#25aOn9ҼB$uZv)RwZNwLn{㝨PlyYq6}.77*ut%cug_}1G{MnG/HpLzu`M\VM?{]KRf/?FaةAbÃ@单zh;z7?k\G}\ Os*KK/?Jek~(1nux4+77%~;U|,=FH7ei+Ww}[l] Z]Q}+8|p{} }Z7/|;+xCBA YXS_b [ŋ/p"(fп Yŋ)|-пPh|,^S/пxSoDDk Y:;IGxC»C w7opE Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YsGu10P0BDDĆ~(Ca>w:_!8_!8_!8_!8_!1 ,b7!n)O0n"nOV!-er!?Z1,8f^J]M%m̬;5\vyGc\އa&osù{p+o.9T!2'}L ;LDV.݌jūɏ/e Yø ~Z޶6^ba[;g7~~쀎eKEe,FDyRqsۮ?H6s'MՉd=2"ZPއaJL%r?޵69ؓtu!"eS_Sj3ۥd"G`7;t[)c"ط=ߺJD 6S[Kj9}h)[/K *2X\éXQҹw{!J=7=CD9&=dz>"GJC8*Safջd3XKUqDN^6%xCvuPHzG1[ jC=&^M!"55rPtna^)NSgqXHD)G|1]^y|Wt_$r]dIZv}qd‰G _9f ɟتC/#zHٯۤ#?L8{yC{•Tdn{Sv՝}9>d$,$K:!9,Xz[gjP]ͷeS_&V2'0>aDKtm;bٸ3Jn$;,t6jtW$i5̤X~?.<ò+sIsT"RxaiDHDrmƱͲ EZF"2+%+o"2mXCD5{QADhn IH;ft BzdQc_ Y`SDdFY-_'=:i>e9DĐW&w=tS{u99zV\x#$%CDb7ΎkQH(*S:L(ʆsV;Xn=z\>9?{Sל9jEvID ʔXTyhH}+u1C3=YI3˖=JLfMu!&54›s"~8%Gijgn+m$~nI[uaWMeݏu##̈uk-=>ڛV?̚ED]ADϙw6Esz6 K2{8"Ko4V);0~Mu+h_oFmiPRAÅ;W-ix>KTqD=D~U-4̉H2C!,cF@.$"jjKL>bo kjwn#Nz̄KD$-Js!H0€rfP,UYZs! k?'i­h"rj3*3Ddfߖ8ND5*s[D$hv''6rei5T/kBȹceZlyyڽ=g5uUbWILCq-lDsEDG˗4%'?""^.y4,Pz gfNRUN ZY# !l%-gZDdf^B,qfuS"ziVY*$"u ?LD]v'" U}N}wk"rTp$\FH#0-_1/veQܫ"cNhod]@珇k"GϼDOyO[tPH1'}w"j9kj젹G |PkէI9Y._"ݷH">\Vٜ/g??>]L">>^xND-ZѪND{'2EV zED;;ш瓲 1iJ^e*(#!K-vΜ)Dȧd^`%M44‰}DtSDd^S-j.2W#~k IֶՈ2ioM028 |KvD4d74$"WwD")-`5ءqJD/e "yAz2-!zøqRDf'1Znm+CDB%|37r2C!,cF@..G/zn`kjwn#Rlrg^B"*T?ar,(&Xwܧčw YZ5O8<fWo_I*$ϳl2Ԇ`+J;M(Ȳ U7 D%~?G'%pe>H?ؙڙ2 CDgob'{V DbJO  sSo,{5Lm\4J,Dtn;_(g*$[K-ZX`fmU߭}kgm]B"ToBvFg!& I!z#,#o-۵Bis!#.]/eX6ƪ𥳐0Uz8yT _+aCYǦnkU.3;fr!M֡ARb].#Ee4^X8X(NС`~t㐧=X%Ao•O$7b?O0P0(d);&/"rރ7!G OvBrJv9j~hpExbW(|J+dqB+dqB+dqB+dqB+ P৾v%7bW|,W|,W|,W|,W|,W|,W|,W|,W|,W|,W|Ű,cw0;|}|I|T IDATW|,W|,W|,W|,W|, ø1jCöfid"#h֍I$eTwKjC' VskһH}b}Fͩk@('㹝ՐTR 4ra_ JjԭkP!OY>"ÿyi u29j!UOJ G,}Zl|Jr꧇nR|13Jm^P3U*2oy( \><; m62wՇoP |bMY{m Ko`%1? 1׏xx1] Mm%fx,7Hzp}d.>bG:W=ݭ;sīr v=*ݞFdm0nAR=l~!Snf$Hby3ߕ!e7 ur"z{sHHĢ6OOi6ʴش}ͦSW|7Y"rw>r5PQNa[M2s6(5eDm|9{M^^WU +vHڹ|"8|je:%4rqf|׶nmRDn_YV!41Tk"51^)CKwކR-i|fЁD;Dd୹P?h.v8;;Ddҙ[b}Cw!oѯ*Pqh'^إYl>W f;%};AjhK"o0^$G"jjoU}" =ۉڬٮYle?1ÔnCXlpZqMlF8!nm䅞)ݴ{X\pZqMm5-LCD,Km+"qڡ̉hŹmovУS O^瞝=mDTڹgz斥uys\S[L<P^ƻCDdI}TJG`3 cUchb|0p>*1s h/^R&ALιh-8tG(>W7*˹o hJDJyPҙsD4aS[V+"@ܙn%M(G)h.vgLp_{*A[I띂*VRݪ˳lUB"eSki쵤M,zG!?jn刅>dHF%-!n.vry%k"OtQZaKV.=_'.>"ת-LCjm ? MmZVqVS#Cf2L*L7Qbk"b9ӉhJMK]ֿ$<+bi"%ܦG)S5=gPК%"썡 E ᫂,^t,!!MiE(P,`HU#w䝯VSܳ W^ip|YNے4Vy\R2&Ä sc "zZn|jgZSX7Y6?) ,/LCaYBT0n_)r"sF՗KhX<'=^]U*L< ǢNݑBDfmuW!boѵ@/OBD i.x7՟Խ0%hef-&ФsPV?Ddb]0`NDYΌ\rrc>am$kKLf/xvk[$u[Plm܍_/#k="X=Z]')Q݂},|H((:Z7Tؔl?y,AwJ鎁_0RzosNs/3>Z A/j,jI^Mg=fN/Bf7$~AHQ( -&vsFf1؊kPA&7U<;V|HKX6x?'Uf^Od 01;{pkoff^ߟ$deĽ}PDlZC]51vn KY͟K! UBΔw4hۖ8Yf럻`fV=ٗ ,{f2 F*w OD4bt2}u{?`gJde 5Hl*M퀅Ӓs.nӼrI+S!#0ۼm+l$ނ];0DN5jZ^ss_6ѳ{ 2ۭe희%x+-lUsǺKtePVZsPƩwލ],$DZݵA_BСr[Vk[Ȇ|y "VTϻQY6qݾ-W\KvFYUWSy=_Jv"Dӷ3ذFaԡwmWXY_rTJw ǟg֦BiՆ h|~,Qu~:|@ 7ļRR)U}nw{ԿJxYQR]I""ש3>;t@;*k?KڔgzPOZpET|,W|,W|,W|,W|n㧢΋ _:? `\Q+dqB+dqB+dqB+dqB+dqB+dql(0ާ49 8 #pA:_!8_!8_!8_!8_!80n o˳5yP_:|"#h֍I$eTwKj&ClVskһH}b}Fͩk@:GYooڱCFELڹ|H~bEB5OˆrzR,>ၛ_̬\V,{@oSx[g;XIL:>;B#+^~#rc>}?+i[Y B"e \}XQNaUCOwk=C(\]{kkU_+a[2@ƺT_Ȕ RXr w%A}ćkaFg!~8'S} 2m+6m_'_k{ *uܝ}}4T M]m1u%9\gC*0[z_RZ||}-_NDtwɁw\9O-!d>ҭznyUM~IiS7 M;*m_U=;ogfF ZyNz],̅ߝ;[ (xUϾBDug4T_jJhD"KɶX4Ss+~u2F/ 7J"vD}"M-LCQ`lj_ӣyʋ=vFѓH~uk;C4f]p \`KJ$ȕ9yWV.9GF}YMCMH)OJ:3RqV9,uʽc *yzE_^;ӭ ">2 koZ؀Y#h+:3vSZ*sR[uy-~zTHljy#tXo(G]4Чܘ iըĵ%mN.$<}M鑎R"J>}˨5D4._eQRܥWohnӣ_3K(hB]"YmTd>CDim MX-F־͔e?ى7EfQҪQZ 7D/Z4ƦIZ3"J.Tgq|Ϻ|}u,!!ٚ 3""͋PXBs "F/INzNz?XqgԷױlRy> z?2٬mmIJ*Q.˗ YIUh0ͅ&[ܬDwJL1̉hTU#˙Ѣ SNnlw{d&_[*d2,|QƋ5kX*ސ$"bUmKn_iB8IhWꦿDd=TFJDA֪&ܔXT&V3~[baۏsT"t: hK'[{-6M՞_ػv:P.ݐ/"ET&D<[ෘYb+uf\}6?j,΁g+W've#4Qț{6%-BKD~XV9>XCNOU/atWM*fy=?Me$c'՛ay;4-BCSlj^-~KU({[Ծ "ӿl%kAR"n\ ub!bfkm aUR-JhX'ZfH1nR;j:?,m+Pmkuzzg^MŞv\%l%v{׬2ZHN]}:EFJ6ZKseTz2OEbKk%o VCAV?WYqlvZ'Q7u:S޻RfCi[*ǜ{"*;iB-؛&}ꜞm*0һem5/-.Qwu-Zocy-R|dp:',ܕ$"r:) EX[YԦD'=ӫ@Q:38_!8_!8_!8_!~ ޝάlQw@+|,W|,W|,W|,W|,W|,W|,W|,<.sgAH|I3L72E1%qLB0̍|]R\4Q̲r3˕2^HMSEeut0˝ak?{y=s+dqB+dqB+dqB+n?w ߐ{[xaE Y Y Y Y Yx1W}B7OޛWGʲI}9A#LsV~ocWSdpc$.Rrڪ7ptSa ]aĶ'gW;θ,NfYZʲ^\0wHJOw|d:k.V~ͭ[r&)!8Mڲ"bܝDBF. ՉԞ;tRRvAb_'IӜ^@+im7v>~];ZlʪVqhFP WMQj̝X.6>KO);puzMvPlNjB~Q=㥯ɩ^AWaJDT 2&nj+/^# ˄JhF{*nQpE?d3 ij_Q[i6 e>DT:6ǸQl"EcSVe*Jz(P]M &Y9T6k?"*_n)'wjQpO L݋[0ܸ;ܥ՚X2z :_v,ˆt 1ꃤW{eØ*aEz n"&*3DdۤEڛX%1*)MdbdJj]/?cTԕ-眭.ZV8ƪ#"AFj\8Q0҉?}?ATGii/677r騚b,SY}Pc՚r3G(l\dH +JĔ~pG39]eh8L,59E̴D8>K{㹥ۉ`s"<8("O/+FD =̉ղ!-\_nGDK~{hN'mӽ%ʉh!SCquAZtsGFbVPhO';S]aJ"[;Q0MBDiO=BDn^Q*wF,bVȯ͡4Wo]81~ji<+"[2\εӚ7r?*}jO*#ƤTb/zYZdgO0㒂}_qsȁ\>KVRʻu}QR"7?œQ߆7'Bw-kaxh7cԡqG.>P*IDATnJOzxQ (#!.DɡlEك-8Aa(l˪bvn'w5MlBf2=]7D $Z,/{~6Fm Q$3 xռGeo NѮkAG4&mTwbdS= 5Qi|$…١#v=PCͻW&wpv%"iA"(hs}yy^a%U=uЫւڭ;5.ִj:оLyDst!9C)wٛrք=[SkC 7?VԿ5B+~NA ^'T,sڃapD3{ siS'h0,xFq]\fYd .GuQ_lBu}ԥnd&6sUgV=څ/ЮkAGjWO;[ƛ_cL w'D@m^(hz_a{gw?һ]X4ߐaG2'O7%o:Nd+}_Po:U<P>ЅEySܰUaf Vyg=YHD3# ϕցK$ " |uu 8_!8_!8_!8_!> XUj|\S'IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/DistributionFactory.png000066400000000000000000002772611307543307100302640ustar00rootroot00000000000000PNG  IHDR IDATxw\'t  H"EQS(={{rb/?5P*Hǜ{k~cwv͛7oy;%4>Z)@'~1hE4 C[+O ~zz@_b;b?_bV~ /Ï'xZ4iKZ ~|= mK<Ӧq uÐTU^" ^^ 2ZV@[[֭ĩWV#''KGGG zz=`%,b„%00%|޸}6-/zswpz\\To+񩞞`>/JkQŜ<ek;IAr޽~nҤ}C<:o5 :m`𻜜۷? [=kvݻJXy>TFFTTo_ǝ;gy>..2s>hjq?= 1hW>3f|l,{pUH''ݹ(++n bB!!-ڷeݚ%qC7VW^fs,ts?eʔ?kk׬ W^}r\.F-_~[ W뮭&[6FNED~~H }~|{|}݉sbbΞuv6uwa q6J^^m-]EEoh쿍ĉryk[h#U"pv ]9HJq}L !t6m6>'$hk%&")W)yyzJٵ6/ZZv&6mPf˸dЁ{xW魧i~xm՛-BVbV_|o%R54Dw{s\|./87$//{//~dŶ22͢ԩmND44p9e@UG ν|y~UY&|~|c*rrdeeBU#uuFP4ήM'UT莎&svjjQQ wIKKxE픔0޽de6ʝ1cȅ wVSSЏ|IFFҲE? Weypr)&&._jׯ?[de\J))^l9hBwocnz{;KKS}VWg+##z%Kkh0vry%MOOS__;..9'HUUIIIQAA.0o˖ tܬ⒃N/\/n%B_?'==E[MMY;ʴ ?A~ RZZnk;Κ[[{ wo;__wxz_G?s6yHdd)Ν`ٵ’%MtAM>+ aaM~6m-;PT}{U-Y;ERRR'Xԩb[ "(T~=h"=sZD`_w&%'~y@0 **>?|zh_S[ h5|YA?9|!}k z~ko<ey|k A4ڷ>!// |OO q{b?zx&nSW[FXKyB-lvAy9)IYCr$+d~"BhE~8_ |Ϟׯ?.olVwo+t!TWנܟ剼KYY$)G9TUݐEEE"кuVz㷜:?4ɖڲXY!/$_BؒBB.Owj䄄L| a[d |L5o7|Q8|Sŀ9׆2deEEuǎ:;*+#'MA_nqPnfuuQO__!Ծrr(ͣo߅d:qb;dooNsw8;`R[Iߔ);x#_Mlh8J^ޯ[%m;yii 7n7%Blp9o% |#=B(6>u䯨WVֳ}{)Sv_CQP裨7**ZKGD<":tNyL](̈۷YX΄ A!xv"2qV}rr^ []Hu+iB#QW<_׮DCaU"nm"'L_WU\|СEJJC߻,lw*gݹH99/>!DZ8%%W [- \WWsMjj iӂɐO`!"咋< X[&?.*ztt֬ !_sjlHIIϖ^li4Z6 ۶MWBRRR r r558ֲ7) r22x ߸N8E QCNڴ?x0"66!oi9a߾k%]ij$$djh ndL:r$NW򲯮;y2jRB˗LHTWWnNP'w7¢s\\rJJn.fccTT U͛#gbj TUl,hf3/Bm6WNNQ@@?<4&O>~'n .ުY!]]Ͷm?Bkې\XX ?x+B=!$"zH'#G|s\./**~BBEg:]!(Am](<ޜ9!s;E)\O1sr(|ɁOJh)_ ̬cDDu )##mmm(aӿ7лw8P("q׮YS> (:<q`Peb/~}xwUb)]; zHUC0@rw蜜k6m:}C$7#nΝۙt2HI[ZfdO,6L*-,: Nӹsw++? :B@V%Nreee@4~H6 4d UU%sN}:,Z4EXXL[h=DuM+VVHIpsi}M Ejˣ#uۗ9[df :t&6zaპ=mBU>8E%%"pX+yyٹsӥh;bq?[.gںi4C]\,. Crp/Z[B!>⽽{ BB.I vFOIɭ1c Ј^ɓt|`ooq |lOEEy U?gf?ǏDue/`d--;wv:Ui|>Z6ȶIhޭΐS`egS<!RWgt܎!=m6 ]V[B=a *DcF͛6pB߿w]AZj *Mv"S~f_{,ܼӝ;hjnH+DOXXtRP#7t B;sB|>TUU%)))aNfKq{"-BB ,؋qH@T"#:jh0޾ ) >ױ֭S!6z!kIO/,=B;x/} WE^J L[|׮uu ee7o2׬9Z]]'##}YY#ggXZ"44546rĵȶIhY>BiZt?6W@@?Pnn1Π? &BήK"-O|9["P(3"Rꉡa$b?beeرU..3dq!4lX/腜^QQ}->oaY\ Bh C5XXHKK]ITT'O i11B]ۑ#7xBFY]NWرcz(ۙaڬBD8jzgbF B^^xq`> MkjɷȪ-Rرǎ$*r2OO;aÇ).~kkۅhAAAn̘>,,5ܽ{ɝ:6Uv6M¿f3̟ĉ[₰e$)Ԟ#nI-E)jHO Eks={:9)))x<]]͡C{DD]^AAS\ HSB!!s.ed'''+--md7cƐ#?/ef)n}6%%ŌډVz^ͪfgwܸuŨ*͝맢BoLH -069|8RGG!d`6V| 2Zb,͉f$Ƭp_ i?{^^.m͌?{odrX뀮&BhKRSS.((+&6$nЪ-R{vAAS22Nz{; kkE]]K{W5d)"-,5ի+*;:Xh觬ܦm0lrqԖqKm1.JTEz S~N/[vKGIz> |/<9Ӳ`ތ[2G,N3> Imm=m4'G|q?~p ^~~h @"``'@s<b?~~ b?mwɀvG~@9??>+/bZq55_D3i|ew]۵>_NUUgF@l+I;Jd9Fhh PR>AÑ~~)cn/Q>eʎ3gV _Bd]z ^I:a!||'L"z=r$ F4oV.XhW6Y[Oܰ$!(3`IYsTr! }޼|;eoo)!!>thK\Մ rJII9qOIRij#%Ջvpeߵ}T%qW+֨j >L9rʃ_H+>b||uTSS?rGX[/ǍOufs,۶qwܼcb!s}oNZO6 g23{]^;۶UbwNNӴTsIǏ_ {-ʌb234/] '++zUYYYKk45qedG!,V3jΪ_B j<=۳oO(>=Ō =y !d \)&3cذ7NUlz%''UX^l?AmR>Ai~ܯ1b_ߕJJڵrq#FŗJK˧OnON"ڵ!{R^PP}MVV۞=*)ӭtb3f4ǎg5GMN66r,r"@N΋Ngg79%%ͧ]1H]}ͧ^~7f&==?:ٻqN.G۽B@@{ƌ\.O3IM6lu@@?v55ѣ+:ujr!{qj`K-.#TT|̘<Cm Ӊlf9x0֭&fX1VSL\f-l[qb||jP{iDz_I'$$drn>ҙ njOE:*EJh[9zٚꛙutq\dԥK3NMhGa5D+?p8MyGoTQv1,_\(J!t+*z+/mVRRNo >7pಶm}>ri~DZmgQ7Y `lӧc"#ͥ3_ߚqbp?5yyRRRnX|>_dWW׸m۴Q>| NWSS۶iN !T_vuѢkBB..X௨(s^޶LPДÓϙ3LGG<Y|W>nEEΜYzG/jkwطCZڱaaW!tc׉4gNH킃ged{XS^^S$l7ӄLlOsύѫcGj;3nVr.](HZW/[Xdft쨣bt_xII9ث%w `!NE_?2ĉ8ή nS?;p`ang! b YU d5Ͼ.+pa2t{{c)))$Q)UBbx<sllK#22 jkq_rg0 %%%uzJJlvjF騨E؝(,fg3:ujKmUj d5(Ÿi/2P<!&3Θt̩SSqJѬ6>>CNNFp>(^ Aw6;F?u<:EDBȜ6-ԩޠ)?~ifgʜ;C!_v@̀>*._~pz`0!;;㲲r'ȷ*!,==M<Ƃa23ll+2eu+MS!YjjJ/BAAk1ٍa9;3'ﰱc W?EA,VVָO,PWg fd pvt4%z긾Xqq!Clֽ6҈PTD!\LرeFNDģU〻vi:ꆦT?3'%İmDyb™#qׯ?ug֬ ,B)6;M<&3Pru$`lm`{>sḈE^>UjPW!+--eh(z~2Ӂ>#WgY%-nmm D|YZSS[hGj5ܕ𱛛y ~URHd)XfaaYttBlN⽭Dn?鉡E~DD=+1[ƈ8š29IM`$%ph<4!fg o"?99W`PM,؞7HLryݻ ܬH~''h+"#Xi}w߽,((˦hTR4e23w:zvƆNrrqs*~?&'h4kk!'.XY**tqQ:?c?--Ub==-:]8%ύ$ȫiCg+τ/YPrryTII˗±߭[ǎ-2---xDz[OϘ1NWPQ{W|nL_OYWנ$ @70tM.o'&fvxɹ ĥC#iq`QQ/JL,0!2f|KyyUyy*jHE466jh0P+& |˖_,1735\Erg0 B*Y,4EZ](~i''Ao"#O_UjB"iڳJ߾jDR4Ş#htt¦MV6H]dee|})j$|W"|>ǎ9iir8Mii`O #:{89)(-_~ŋ!CV WWKuuƸqzt=][&@IIQC=A $ Fo~INNf˖qъ4ѣ1c6!!3P !ӑźX*͞;%%$2w-@Ha/d5b۶G{Om͛O23_İ||=g*m稪*gd$%\7f̦[dũ!MfttBaaٞ=,Be65W ٽʲesrsnjٔJK{Gҙ |o^/*O7/xU%KFݹg^1?/5QWWłds2HN>cCWa)uvR~Ӧ UT55ӧ&/q7o꺃#CCǎ(TQz</%%w!6;KE~3w>ܼ311/8::a {x~EE9kk-[LocH r"dd4zzvg:…{aaW߿QQ;8\(!Ԟ Y hi~MܴT7oz͛O1"3PE@@ ֭ 9;x&&[NnVNNBQ/oVزpaX@@Pee}B~M9*EJh F)+vuzdvWjk&Oޞ[liW)jD]bDDP``E _?x'n_B.7wGﶮн{l|*?l}QO^RVvU`{/{쬻wᷰtr.>l׮Yo:s>k[0,4t!ݭ;=bllDtUkh0vފ*ԴΜς҅ )*;8\˾U$",ցP OL +|ɭ _d'u|3@Ϸ˫XV\xxE@MM=uvUGsnWNhQCp÷B;KRUUg[M/L?XY&ee=ML99~YVdҤDm!k`TT Y,{{c|LnquoV`޾\`(996m~a |E :0/Sӱmԯ{_kjⶬg>n^Mž׬I,I С=BB.5[8&SJJi4cn~L Dz1Sl戮XdlmZp)g}{\ *jҀʴ3&g[zA55#G?'h"nx○[7;gt(--߶팻؝nnVᜋ+.~sJ|`iV8{PEEʕ&Oܶ'+R> yR\XG팏̌C{l4=ztƌJJ/ O ޽tr3ML:TW=~j|E V|=Ō =y !d E3lX'Sn=sEjZjI+W/OP[ox3͏566Q[RI_vCCB.qĈRiiyYX\!TT|c/]ß J޿*ttlϞˎSm:1&п3vXcǎt͚SM'9KO\o Ajj 3vrpS_3fo]B6n<٧{Ĉ83TV,Zfh8JNKGw=ԍy4wǵٳEI|z욘s 6+))VQV38ڶURR-2 B²[v::8̚bXq !ROh#Fw؝C03dbgώO]x!;:N>=n>nq>eʀ/5і-&vvR3uI>8QGKK!fg)+ҥ=rsq8Mo͚zu'(*p̪8P 9u*j'N,)vv]\\f>~Ϟ]Ct5ևۍ98u/))@;:Npn1]]~ᵬds 5th5zm[ l Inge;pҥB=:tUp̱cRB $LWPdKII!Jk'FY >~ՈT,i~Cg߾Ç{<{v|qt)F`~Nx? N-݋ 8 ͊vm@hR ty<'@g((YZv.bB|СC]ȑUWg"߾7w*B'OF)))y Ο?7B:rd Bh$񇏰V44pڶUqStn dd.56r),oU@["\˛3g؟hJn1tWEPkBQWWˣGo44peKKW] /_~pժq*Q?7sTqE[g*ۛ$%e:}Ή+&vnj۶MqsV>}0q/"I||A1vv'$dN:UWuC?rr66Kx<Ix5ZfI6;F?u<:EDBȤ~[s<ѱ߮]i!Z>x*ׯodѷ3.+8.#`TUBlv&066Fx²ߺ_\O)@7oxS7?5#p*&l OD/D3JyyٸpG{w K̊( 2ݺ; !ȉxjՑ>}pJ'ﰱc W?2uPkBQWWFNbbEv5=$쟣 Ǚ_םZ&CYE lvv6 x܀G2uuFiFFB@Z=+ՒZYY1/nQ4E`t.! uϜY\XXxTTww&pf]] %|#<2!SS̓O߻_׻mLL0 g(7!!!f%Q{Q׮F/_VV0m(*Ϟ=Y(f%Q=Dm_ 48))ɨ/ox"}>h257U/[6zɒQdRRr EOQx@Їw䔜*H_E>?8Қzl(h%Y,77+W +RLj?xC|9zWb!pqPm^Zjj#))54DiߠA!6;[x ]ӫj#"TWٛ(N]QUU;yzyy͛̒w'y^vїK+D~ZZV zzZtqJ VWӆ޽W?|ȂsȓIJJ_,nb=vlFGmzzƌt ݻs3ghskkC#֪E=QQ/JL,VdKAiiyAA a IDAT*mmUԜB~w0{ll"ju$A\\\,*'&fvP !ۙ,ocC2>ޅegsNxKCw8ۯ*Y)-9Y=\G%71#C$//@B AXZ ncc镕5ҋBk3Ҟ/]z|`fգ~o"o[z _UC`Oܸ$).~x„"ۈFPc#\=Wu NشԪU44a5ZjI.5YY__w+_~[R!~>Zg''3xQ=dȊWj7n'酅e 7w'4)/zL5_tT!̗u 117paXX|55eawaHE,-;lݻ/<}cY)ΜYMwRXX[GG ɧLfBgd<{_ŪJӦ FQX)8܉rr^,=u*:..ϯgC u˗U-^5'kmB|7'99-[63WRRD)*hG"JKnjTT􆼣uhjLbb6P( RUUi))%ϟKXdv>%dwTY`NNQrr1CCHK{%Ettuu2KxdF޸bš;w33_>zt=][&{@CP[\sNcYII9O_pҤE^[gN<z/67R8-pcWFFnb3o-3uՊxy-v޾}z`0EEyB۶w=zx@4mml|2&㳴l988_xQsRܘ1_8 h%[@-dz7 e{\^d PH\)X&S!~>Z'T9}zգGOL}Do ( =&OyyY/;6lujjɿ_?1..YWwX^ЇoUVV/JqXe:e7yܯ~ؾ# ~M23RQ8|֬]]=sfȑEj%@^^qtte+Wݷ^^p˖);?!2V8ŷ l\׮̚(!ިJu[miХ;χ(ZZ*`|fɚghi{6^RRNDZZ7O^HvC [=p YLA;S x))B=!)**[_g5k*))>yo۶i+NY8_#Gn\םFԥP9Gﶮн{l|*?l|QO^RVvo86;] /ĉ[ss`ODEpwֺswdk׬o <tZ7ׯufx½+> BΞ?Bβt_{@r\۷/_b fY=s!bժ;kE֊ J.[XX(`rf//V܊OL e5%yy-ԩ3:/ٿ\U͛'k?ȜO N|@~??>+/bvU[{9%<<"FUٳoZ+ \;~z}wpjrʄ AiFFD;ɹ_G%+ޘ8e2ӧLq*:]#$' j@޽W]4`2> E ''S||TT77GJ.**ԏ~ֆ8ҥO]_cƦzIdTR׮АGo1b-TZZ>}zp~rr^׮=Dx<Kh4ͣ.#ѴaҤ3g:|x޽e)D!8rr^7g=bFYYs.kWIٻ m)<}Omtdč*?%Mj/B,*z6K]bytLdcNBB&SVnӭt+:0bD/qByNөSQO>!4iv++G}\XQlvԅ w@)))Y2έ!]er:E?3~od˫BhLCm[ugW #2u׮ 慒Sh4|jA@˗\Dp AGU?<EEUU !fgijiLf\JJn}} Q,Veg"rw.]7+EcbX r\ii)qeBD^joh/|11GS%%Ex,55O__GCdod7z4e͚g ֭ZJQY{ ǁ8eTT膆11,j98+륋@'..m(,Uu=SKKi ĩ4E v64pCA|ȂsllMM7?{bM<\HQNSjj9pޝEQϲ\X _DQޚVf^T~J3c{>;gg._ro[rWe;XQQIzW~ߟ91Ln{5e׮̙^vq.] 腆>[x̼[ l=z4=ѥKܸq}Q-99ڶmND.Se+h+%%e!!~BIKK*>}%ԯ_G̒%;==x뽕+yjdl>oo"Qhh >ѾGM{ϝט=pܷM׺vBD))Y͛?}{;>^j4ԯfש=+to<~=w K ξ&u`I:SѥK)UXOD|e]v[\٥VYe;v/Nu뀓Ν#ڵ_|u};y)0e3͛7##c{/j=QAv~/I]HT#۳{˻ئG 'a~ *s>B{@@=oT :c@Mz}e{G1_jKRU%2$NI/syr(0S/FoS Jj 2)U{LJZe?sU%7N9Pxr,]J5LV<-R/͑Tc$I4=9UWT:ԙeRs<6YVlL"J;V^_DiH*,MFM2T}G 5 B5~%SQ5|rwыW+:e>6orْZ9|T)ŨJQLۢ5J`ЬEJ5{ڲNJ5/jk) ٚjӹ!,G۴QSCF^ N~$⃂<+dP?_LaȪ$ާ3 3ki^yBZT3ÞfK2v^he656JIo +[WDOC 6~rR?Y0Sg? ɪLKV~$#<)wYoif酪 K YALgIT ᰞNGnJV]l6 (3T P_0v~`)9:Ӥ*[f?~ϖC={"jMV/sY ɿʑCHf +3'3REwKff%$#Hb$=$+* (QiA֨'ɞ~?$^ 7I5%IQF1uH@I` 5'>})5>8'qYoeA&I>֐g3`Rm[qؓ<)&qaj \$kmxʖH"E>[0 er@OmYosq?۲1@ی7*rf;e$&I Y.RFسYҳYY ~~Y*VHϖffOy6a6IOژgKC;h/*/Y 1$10Dj/ X<&&*&`/ k?6c6Hqg0)m@Nd_AT@SF*vyIA<k=k=k$=k1k1  ~ՖhfTi /ixflf`fTfH&61P!Us֘ j)igV-ųCl$ Hri`kVgRfMerh j\A,?,8햊|ܳTس`ҳv3) `O,@ˎpςO>R9ӔEڱv63) !)Z0*Y˦5D,BE$ x )dR!R PVLi~3?Ohx8By,r@\Alf6˦59͖!̄A<nj0h?3SMffT33y>o' s+IrHl3',Y6Y;ajB_OL}6|&=žeӚQzhNq3m[&?l, ? x ~}!hgVo&0=cÞ Iς0` d?isAMKilIؼgfسl846aB@4B ϨƍܨgT~jx3?یxx3 ^ zgT3*,'=ͨ؆ \fl,ų ANkUWHA-uT?YWv419JXBƫ0ʅ2f`hƿ aC d<y0߸kg&FCIiW{x-r!AuAu鄌~O P#.@@@@@@@@@@@@@@@@O-u`5'uRy+&O4RW`}xopP>d?ZG=z,!:M8M6cԾS|4+Dn6^S K*@q>,^h{vc^tp98,lnRRB/sF珫k[6l.{H^-$#2[2vl*3g}w{UTQcPS׭L>Ev =Y'8xTj.ó Pv:…+DRyyvIXj3@-Ǐ&<0>~V˫T8ťoǟ^?~Ѱa=tl^PdcRj~5˸qX?آGW6lXON+DMQQ\QQܗ_5-s'n ?~Py IDAT”4i2G`_~IVع3KuSyy hCۏsu3$d_X/juw{og֮ݗ4|DD1-[[]77CC'ޝ ӭg^;Q=s4h0Fz>uzݘ޽NE ؅6Suťt4E[/Nط"uvי3938xT|iay9Nӳ4vDv+obӦ۵ٹWPۑ1Bh7|ۓ`.*KN^zLqQa==sWZ zzvpQaͩ"ʽjקriJU_";M8&۴cb  w߿84Z2ͅ:wZ]"zX9:;99899?V۱%̙ٳ74RΟ2hМh aas; EE%ǎey#%'gyw"-[o-?Kf32.O~:<[ުU_":yÇšϿ u3 6 i'ODDoۻ(kǎG/K{|ڱc %$*v֟/<ĉ OO_kvHݥ<{߾ϝT~Nש oW0uQdխ3O;wiڴ ʯP1J"^NFD~efqz晧n@Dii9V Vws*s$?* G.)}V}uɃr& jDԱc𑎈:wb7.\*uׯSOַD B%%e7xʮ7fd|[Ox/b_?m۶ZlBlB{l3mfUn?0ihoY'O'ѣӍv½/Fg?ĉՅ߽KDHղM?xP…'N8lҘ+jhxի7W됛sΑ#SStv~3Г>>;;b?fmd X\\ڭ۔]U*նmߵSv81qZm'9<r;߄#\_hUg";1= @ |k4prʍ _uWoɓ#GҳrccyoР+{ta;9 {v֭Ѵ2epM.F{۶m癕[9|&99=aaTD~ S.iVZms眠oܸKD~Fn˯Ɨy?9::*07$VDvZc @AT*VjG̥lRrqqf7{рVWWnODpo$ށ4kyn'{]=џQhh1/ժ4e꼼[OFo Ьŋy_~{H: y<&*u %%+''?))3))RKV]DddlV+N*׮fd7o>xdo]poYc&T.H6yM;IWls Ǥ5^M5 | O?6`@'"ɏXؑ#3f'"J5bD_1$$F3ict. e7VS\\A5˯Mo>Y_oΟV7Za?3gǧDٍ9sFڵݻ"'"&N|6lStəa4`EE%*xrsc>d>[ii"ξED))Y׈U'N"rٻXS^۶Yz֭ܵO%o_eadqq)Nr!C>)--kժJڽ;!*@G]w"JJdɐ9v$ U ᆛ2jYifb`fy53ڵveeHRZ51 Fnai!!nyZA``%KnQ&*\M}٨֭}KDj޼-3 U}7rdAj#ʦ ZuiZYPcq&|Y@8p0Wq'H]͇FXTԪ$u9`N&8⛚Zw&D8Li0Zv߳H\\*ED D0^MÜOkIKٳpjЫr̃9Y@ 9, je \&rоS|4sNbUC+sp~P3UwE'7-ޮX7zxz )PGV w-ȸ̖iT1swnڥkj_Fs/AݻO][3r(R-O?|U|88E؜3%!(k)첊*AwkU&Z42ZLU*Y/O[whذYN]6wYubXW 1?/cӝ7+F֬8n2Əunn.ǎtas/!bfNzO+#\sŋ%Ǐ?vl 0uL}|v_4hÇD4s憰ǎeJ;Q#G.JN СEZŷZ8fd\6m-Qu|}=+j,$ǃN$c hZɓ=ڱg"#˫hҾ=vHD g~ ݺ/=>̫-˻3Om[rV۩ ԭT.HUAuQ] P9 Xl $;;u(|%Ν؍ uׯSOַD B%%e7xʮ7fd|[Ox/b_?m۶ZlBlB{l3mfUn?0ihoY'O'ѣӍv½/ =c'N.,w_""E쮖-une.l>qb5qeKƔ_ATCe^b7Dԯ_ܘ˗wٗo?-uyٹ5k#[8oިnݦRm^:cljkj;aͩ\,&}&X 6e))3&R1/{ȑ}gbvhhFVtlcǕ˸s~&ZipF}ETcN̙N8'ҥٴi /\z99]>u  ]K~~~۷~ܹK;dHW&or'ao&q>^=))ipj ҵq\\wߝtrr2klBEԼyl`Ph4s]]=.@1]|BB|oڵKݺ#*4MTԁݻhӦ>lT־ťC~" 5ox˖ld¾S G^5LP G$gXڭry#թr7j9I]G^K*OEi \]igϑT"|ȃ ={<;g#`'(|VyAPq9{;`@@xPj}sd?R |~ʇ|~ʇ|~ʇ|~3(R|'uP].D?:T |~ʇ9ʅ`e@1lh|@i@R=b'!@j=zciiڴc-E|⋬ЦQ]!rf< T@aE۵COaas24:\]ʰasCn%ْc#-WU9w믢jԾЍ*UWg^wnݷ%%e)R-O>}QG-  efrx.@*@RPPص JrpPڹ3>&&aժ <?֚eZ-R <Ͽzݺ?EÆuKս?I}7QjEFj(jq㖱7~EEqGlذV8qW(?/|=**j*[rN,m8~[1In˗idC&sg|.Vw]чڷɩgHȘr1^^C/]/i "#cZUn?;nnn/Nؽ;Ah[)ν:v_e*?zian}vMc1'g{O8 >lا:댋Kiۋju_ o1}E3gr*)ص+?ѱgp͇sgi'숾VĦM߷k7ťs##cnP16mIbj(Q:c n_ Uκ}Νo::iBv5ւMWTNdS:_; cwM1m'd?Ν'"F+WFQAKDk "GG{''''{'Sj;U93{FFjW a1͜!,lcg=zдر!5r̠ Z]|뭅o)lFirկ_gb[jAD'O84^zݽnbbƐ!C4Ƀ{{ew3^rtwssiϞO;v $3[ng8޿ ~~.tՐ8wsʯ: N]3jԒu]ys.M6<|Au*98ygf^][jQYY#F,{~QQ5I>{e'NdepUR4ﵣ0v'OL;fj+ IDAT\VKD; "s v…bhЯ_~:9޽}Z%;uk߼oػtx"ͽfOL\ˆh޼ 4[RRyWqcoFWo;]GLM/.^ܶm۬e&.dl3mfUn?0iŌܛ'O'ѣӍv½/bg?ĉՅ߽KDHղM?xP…'N8lҘ+ixի7W됛sΑ#SStv~דGs|PΎzȻwc۶mND_n,k!-bAA!tνϬYBMx|.L7ayhMFlxWϓ}nY𯂂L6,"b`zHRՒX7y)));wrhh =<7q' `Vo߱>rʍ _uWoɓ#GҳrccyoР+{ta;9 {v֭Ѵ2epM.F{۶m癕[9|&99=aaTD~ S.iVFd_zcllܹMAgG4bkѢIJJ"u3x@SIIz_;:㆏m'd?ϯJjZV;z\-,-gv޽ HfquuNID< VJ8Kf=}¸5\ٳ9RZNS˻e_͚y\嗱G̚7|ll"ܬryIIQQQRRrr22)_4lEDNf{jO=y0;f:OcTJ^z_@@ckQu기TkעrS4y7x#kvW@dSƞGǨƱ ֆ95O Љrr#"V0vHHRWL; gѿ vKBB|ٍ+>xPf;rkfr۵gj-Z4̜F``SF[Sgd\f7޻kVwWl885"ڰӧNӍ$'g4ͯhNT/͍Dtoe/;JIb/iIdʕlicUvNym6gq׮_X [> پՓD9~GgX*Yx3ܔz.Lq6@5ߋ֮S/98h&ݼYRVs[:x{$aw..}jsg<yعMxzo%'gzx nfLF&N\ID^^ 'Mzx;whY@~~ٍ6mt0n˖?!O_g[v\\\*fE~9oݺsvhh |FL7 ||^S_5ZޱeܹsIa# W>b_ hd)RZ:EhVhlҞ=ŋymڼ۪Ç9&MHDiӰfވ>DDCvcߠ3̨d>r` Uf)\m'd?ݽ^J DŽ8<ߨQC%&\]Lsj9Bİ پ}vNљ39jpNKi^zƁsrti9}Z2D޻NIIai!!nyZA``%KnQW^m6(j,xUٔ׎´Ա 4y8Ӿ, ;G8+8.hC#F,Sojruls9?}vez]9JD@1pl[8ia'sw?{vX m[y8L œOP 2 aΧ*L{{9Z]]Eh*i‰!!U\ƴ-E|⋬ЦQ]!rf<:DGG'c=|XhvƺspXܤLa_8W>"k6l.{H^-$#2[2vlig3޾}w.]#UB7T]{yx }uߖɧHn<'y_X8hF5 ʂ.qi.,`+((u JrpPڹ3>&&aժ=L<ք/jyJ!y4?v~/6Gu ]ǔ~H۷0 (8*/7n2Əunn.ǎs>ؔEcЎѝ;?ND>>Vpss!Ν/~?FG@DNNNNOV۱%,X֙39goiV۝?eР9̙;vcβ~ȑ3;thvΟ|M[qT~__OJZ5 '?|XK/^711cȐO~!jVnADt{vzjhl/9:ڻogϧ;QB™_jn3Ot?iij:]j _q;ܹKWt{vS5jIJJVݺ<ԹsM[:샂33_i5쨬#޽{dͤ_wҲ'2X &7 !`'(;tٹlc@:wb7.\*f  Я_oxZ-Ç###ݻSS]+Xdn훗;=}{.OD7##w቉kV|A͛fKJ6oʕ]7nꭷ|ѕ_~8"Z~ŋ۶mlل؅-qVm۬6޽5{D4zt?s_`.V?Wg?ĉՅ߽KDHղM?xP…'N8lҘ+ixի7W됛sΑ#SStv~דGs|PΎzȻwc۶mND_n,k!-bAA!tIs>d-G h /10A]~~3tӦϲ%d/ED W6T*ZrrK}=oB;%%e] dzzY w϶\rou[y?|ȑD4+^1hXNh^]uyj4L\eSbǧ޶myfeVINdiXXw62߯Y_oΟ}vsh3sM}|kIn.3qݘ3gDxx][ݽ_1/}"8n׈hÆNM$q(())ArrAsQ&XdAQQJ-^n|ܘO>ADOVZZH񲳯AkDԪՓϕ+7޽Ǫڶm]n}2}{* 3'seeΜɱT Uf'yFEM̼yuQQjGDRVs["3зd^1996|q<ϳ! ;W OO>[p[rr`__?H/&lCY͛7.((LMnذޛoנ_cvM1 ƏeHV;}̘_KED#G={#١YӍڲW.ΝM kǧSB" h)RZ:Ex{?󼽽ZMڳg̋ڴygq*ۤ3WO5m'CofTO2_ݽ{R5T)$ςǛ `@6D^/%e…cBB|]\xoԨСX~Ήk&Lx9A{CY!rl>̙N8'ҥٴi /\z99]>u  ]K~~~۷~ܹK;dHW&or'ao&q>^=))ipj ҵq\\wߝtrr2klBEԼylbP̜fxxoWWk>?Pv/~[v 0%cnȨ ūW6Y =l3mB-?P%`.9[ڭry#թr7j9I]TCo h|4RW`avs$.."""A59bsw?{vs>A)02 I1I R=b@@xP4]@pn=|(!(!(!(q< q9(I]X?m=0 œOCP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>d?CP>pXK]Uh|X 9ʇ|~ʇ|~ʇ|~ʇ|U]۝lR K]HGD|ի4q5|0|rj d@7ٯFB''ßid @xI(d @0W!Aj=zciiڴc-E|⋬ЦQ]!rf ٦%| (0?zཝ^S~5_aE۵COaas24:\]ʰasCn%ْc#-WU9w믢jԾЍ*UWg^wnݷ%%e)R-iy_X8hF^lI(Op(3óX⦀⽽vK{D\?\f(((uʅ WHR98njgZkMx`|2Wd狋Koߎ?n݁azd:Yw`eս)?Էo{3aOZmgbxoOVo>xo?cܯ4')ƍ[>jaalQQѣ+6j'N\y"((/cʖܹKD[v9B%b/ӤP#~%MXa.]&֩O5Oo?յSϐ1_cf##c/^[v_ EFƴl9n~vv^ {wNnS{u8jGUn9NӠ+qWq;nW4sr߻wԩQzÆ}θN&Vw_ W:s&B]{?-,o|8iz& ?ӸډYYϦN |}yyx&LPR򮪪ڵq$`0$)JY)n/7>>Ag 5m10vFn.q1`noǹ]X _K$E~QSI>^g.3uFP:#3| ÇO%)G[[c#lԔMOg+!!!͛E[VPp"#c˗o:={r<_ߕcrذVVVGFx˗߿`ʔ/w$'ȑ#m>{6ˇ54#GV on?pw@ IDATa<{꯿׈iF ^߾Sg/KOov-#@d"P?~HHakATUUo]{|KyՎ`gϢ?>6m0-XLdl7HM?{** Oٙ, joߖ5v"wǏWysOoޜJ};u$94Eќ"r#*>q Fݝ!0 5psano#k>|ԥ?Ё+Œo-, d ,+t&)n^8lxV<Qg ;SSJKˊ2Q *KKˢ>lppÆr*+{,H::C E:bbR6n<?/_uъ[g\|gg^'IRCCeh;j$HO55UJhbWoQ4ռ}t71z&q2}1d.M5״$uu5IwwGjIN"GߍG6v"wU=޼3f ++#A hj6HTgH8YN-s;`n.}vf>|Y^9pҥXr^sUU-X&jq5u{2 >}>/:F56)سlRRLjƌ-to9ԽP+ԡw{-\`'u&%e:u$$&qvwv- rJݨ;vb׮gԻ S=`׮ӂ>T}Rɑ˕ E\9\HK\l6LXvzyAKX>p`sn&I3 TVV1--u-5dz4@yy%Al<;!a۳gM[䲳˓7ofQw 6K"￧8ӝz>~*U_ƴؘXC[t^ܓ'|~M ȑ4t3wJvL_Y r*N|[s;`n Rr}n9vÇOΟYiP k ޳g}ϔfmbکǎVWR"}UTT )+>s槊*/-f| ٸΝ mm{zUʕO*ƌY5sѣk8̧VilS!|33ff>aa,30_~Y(򂖰oDqS&O[w IdcaaP&tt4/ <=[7/ޘ^qѢmv""bZZVEE;N$@]ꅵ,mmR3|_xjjftՊ*I/a'iӆ>ٙwIQhB-- ]#vuCH$!1u.H RB $f#SS3sr g$yPvv`Νㆾ +7Əw薔eWT\ĉ|u7$?|D̚5S{潴jW޽Mu$EsVܸӜ5ߊ܎]8H ano/,,{nnbzumNX1q„A'NtuktTWW>ptŊjj55ul2mn>}۷<>VNNAiiYYYQv] MKJChj޼8wn $Ǐw~}tJQQ]c XLVn:KOJ!~`oel:ӗo7477ee’Ն] ?6T.\rntAʲ;wY.JM-xZm\ۀꚸspd=Hw׍rA{V9DQQ.;;s6y^QnwnolsE8޻wcUU޽+sp0;)J%y7x$[Y)r/7:k* s;v 7k#I_wڮgD}חig7h--u ~sAu^ז߽䝂Ԑu릳{qI|꺆 'vJb|޾=_\ظ%HH6`@q֞9s~GGݾ[HJ۩ xm~9yza_}"8uj9-j/^(RHtw_}f|4]jio[uަ.>=6.TVV'RS߻p׹0uoi%I*'N};7Zr 3WANLK \A[k޼m=\w+WNjZ%od8Yg*++89Yo6~B!jUY/h7^jVanGB!B !B!P}?B!jB!BB!BþB!BC!B~^^Ͷ9ɹqw_Q B!PB!BþB!BM;t(W//IIi˗o,pB.w諂Y8q8NݻO7"#/ZXLuRW5cƖo]EXhhxiEqFD\G'O&_* !B!Z~;w :(L?ի'paKv3W5yf֙3?%%,**5g8ǍX%DD\:oǎ4!!B!PK!HO(yq55| ٸqFY^^/_>w.Hx-ggccmۼ K]^Y^@~ǎcBB{zde=35su]sn^VAQQWN */c2vqiASpZ(|FGgk]\ӄdlMI #x@0rѶo  PS6>vPĤGt''gy| --uW YֿE~#G6ׯO8eJ`  %r,- t^]\YYA\0mڰ~XS`l}eeegCj}?|B}܎jx IÇ17*+/d555'~v-t>66sLB ES0&)$}]"#/@dʼnddB!B-B}?}ΪJqq4-\Hf96Y  n`EUU)&&Eܶ% 8 :uCq7ofݿxԡzCB!B'1,s͚)~~:pG'%e f.XFMbggG>zTس>dg=ƋSRLg6yy{PqwwyS/hL2dgo4XBEaP#1#D =J>>\'9>}?d1OXCSswc:Pw)(pӳUVVpr޶m>t;wtܭ[|s?U$D'EWc[_ąP hȳB#x-A뀹!TdQDm>!δ*܎&Yzlg B!jfC!B~!B!a!B!?!B!P}?B!jB!B~|>מ}7B!BHByzHXB!Bc>B!Br+ȑ˱Gݻfp\_$yb3}[&[}p8'GG__ఀ.+da1]0k|LKUAaĉ?}ff6UV֩_yyB!P"!n[ܾ}**>>3g~2k.lИֶܹǫWk\ SOcƬ95LfSXQQ;ʈ k&mhkۃ{RܥK^8nܺ~c^^3g"y!BM$tHCA7R|+&NTSuws[njꙓS`l]{ҲQ `ر>>W? ihݻ ssIBCc^]]]/4icUU5ɔ0 B&G!j!.]ԫ?})S^NKKK!CoѯȑMY99~~o| I.`o;vT֠:~ЩZM ÇB!L @5ӳ^Lf)$IR?B %\‰?^:xplBc27nUV^&kjjmɬ[߆j|5?Կ gm=ʗ<:e6)$W ZO':ZV (v@'D}?&KtRLL%[[,[~|}@qE\lܾЀBmݧOAAQ}r >55S(qMC%܊zjbj)sʹ+WcPfd0 v8pg*+[OvR94TjW{[!ކ.Ac>uu53rs UT8f17mޡ(++S_^gG㝝xuJ]SS=PSjjĤٙߠ%vt߇a;/ JI 'Vq$Ɋ’’[w^sǎ 8j正4oTx,VAHvɵSs{sjS͝;ZOcϞ44FGD\wGΟaeeb2i*‹)(pӳF\:pΝ;> X,._Ncb2ŋ׵Ҡ% v`mԇǖ-/KNٱ*_pOTyy\yyܞ=KSS^> _=j)vؾd׮edOz`c_q"QP~ 򽼂 1Zp744 xLӧڌQޝq#ť?ddoW`]۶.]edX-Ysj2IZzAH7$G--%2N ظH$١g(Lg%ٕ7mZPi=-#1v 4s>BAv3F >ç1b-)"9>PKKݻ̝l}[vVUU%>cxUH \~:ټ9jÆ p TՑ+<=$sM@o䝊r2KԸoߖ~aIɻCh>ȑT u8[g<<>{꯿׈iF ~>ܾS/K}tڡ)DnNJ? 3y3fnUU֭D.W;v#lccb2ӧo>pBT_q;l-u@7$Gvu{\AµI8IHM E_`~~3Q䞕pW 83}!ϑs;v.9v\x<+ϊ~ ި3D;SSJKˊ21! *KKˢ>lppÆr*+{lggN9\#&&eCO=U}|JJzvu$54TFJҌL_SSo9**&&:<^/_q%IsiQۧOwgxHii>H=sȁƍ[B-"#|6 "wwGv&9| !I"dJR`j3Q$ weKs;vh/]$vw]_COZWPr ݻ:W YkW _-uq_G8)ܵ{#/`35k<7B}uaklSg٤ 0z$I={zmee,^jjXXX͛Y/bm."xwb?3" jFi  F^G-yJ矠dž":5řNH^0T IDAT÷%Lj :tc ް2`L:Lr8;;;S9E0^eǎU?V,z7accJe]NH޷)Ɇ˕ E\9\HK\l6LXvzyAKX>p`sn&I3 TVV1--u-5dz3(+ b ۞=^n*ܺOUU %fܼz}O.~5ӝz<~*Uq,zkPK6-zS;y2Cjo@iE҈iDg+ϔo5SsP1!m |_OŲX`0~eYWI )((>O7e!!ѹ{ۿ$x..?WGGsr#iiu~⍩+!zz-߶m'"".eu[TTݱIN 41ѥ^X[֘?,9fFG_?y`6mX@~꣘94IQmZ`iix0^~ߵ{zFFZ$ w̬+uAZ\_`h%7$I6%qdS`m=$ɻw$i];-Xs?!#-;[5%woF-::':|ٳutHSePZ4@3J3[A1 )!2!mTy3<0pV8$Ijix.뻼va22nt.C1?43**޾'ܹb1-غuo}ӧ/cc-oMinn5]A# ew܁dz ]S'5Ÿ\y75qqȸ 8{6>H uO?0<>Hpʕ<=(*egwa&+J۽×ݭm~~-si hٻwcUU޽+spKM^7#iD4g=۸])3=0cn8C3 !@CxN RVVx$FϋUTO$If^]Mѵ)mJ*0Q풥Ƕ:5[AMTW˗ B8~<ɤtX?|oֶ͛+n^NN\9 ;~| k/B5R[ !a&yˡCqzyq8NJJ}_|$IEx 20>&vqs[lY8Eš./fw8u>9:*xy9r96A{W5;:wvQPZ^^- DuXHbUW:.\HupXuNՈ!B!?sS˖ 9z5IIwq\@HH=K{ܝ5kOkN֊acƬ5 |T1f̪3]df>~Fc߾eU_^[z'kjjdebQB**|}YY{mҤMmm{,B!B}=)jjE,[x5D?ovbŊ& ^[j23˗{͚7o~iiYYYQv]@KK~놆]uIqU~co||\\I?~<ֶGC+B!Bϼ祥K~S^s_ccm,55nu粲r--uW Yd[77 [1U.''%@]}1 xx54!B!$ڵg OS1I~CW:Sc27nUV^&kjj ,B!BIN}?}ΪJf`YQQ.99C0%))CIIKeZ[,[~|}SL_ϣlTT߾-s *-\Hf9YYB!JRߏbY3/Cv55al-r |ҧG{w݅ 'E).HbQ:X,뼽whjQVVptnXjh(MeB!B+vG0]vUIvmwB!B B!BþB!BC!B~!B!I7BkBIvP` BvPc|>/`ggzWp!B!A}?Pq7<=]\jO34ȺA9!Ҋ!B!I|jj^\{JnMf0mڰFUՕDedͼQDKGBůvclQoߖY866s lW5$ :p/_Nmݻv$7o>gقbmmsG/]: j-ر66=""ut4-FF^ܺ5:;;_IInh[穨(Ҭ|e -3gW˗ϝ  RpFƣjի' W?t(.$$:3)ӧ{TTo ԩéSI%%{{oıc SGkj6vߢLlB9%_s;BRӧOEEQQ^o>|?uu;>zUXxU:tyugXƍ7n{dÆE_Ykk*yyG_!5gjzhh_Փsr_%;5Yk߾e':mG$8gΨ:Uwξӧ4iSƲҬs)/ɓ?xݱ/2 ZCɓޝ8qyI07<رC!B$d"kyy: EEOӪU ]ԩ?H>f۶+VL0aL蔗"8تUY,&u]lּyc`ݺ!!/tu;۷3'X[ZLf==c}|\\I?~<ֶG-sHK55u"-s_؍kb#2aheکӇ{wdg'&޹zu;}B!BR|里zY>>[npfؘ^ҐwfFFn^ދ-SR}9sYY/^~?eJi+PPPLV)pq PW` 7?-I jҬ?Q07ׯ93`ϞݻxVn!B!4~ׯ߻d2ՙsM"x&I]G$_~C$IgeetF^G6gA @Vo4?;kNÆݳ眍MȋVMB!BmEI?q\ u̪jG K,, :+*Q\Q2 lRLLJC#d2|N`qE\lܾ#y4wVUUK7FƼycNL ?cԩC%!B!Ԟ4~5w֞ҵk'ş>Dg&ٳZ[t޶ӷ㴏 11>܆f-Zx}䌠KSi wwGYY:ruu53rs UT8,55jLL9O_QaϞ4F:\f_xѣjjIIÆhi :ƲeUU$!B!4I߯W/S]qʽԃL.xmݍaTkp[cc-;oߖxVQQ/ԭ_?M^^vŊ=%~~0w[FE|##-g~rgiUo*fX'y{رpuW.W~~~L>G'29yŊ=g0TB!PC{! W5,ر5/hѢ_ddg9׶l vM_jv0#^5}zlP+mكO?ұ B!Z3[۹==t,!BZ|Oax"Zv0#^5}zlx@!Bt~!~!BIA`!B!Ԛ BIB!Z!$mwdAZ: P?FU gm=ʗ<:e6)$WmmW&ӑ x{Z0т. @0i}?P"((o9\pA::<<֧f PWE<C%܊zjbj)sHVYr=XVVކ4#1@Nnw>SYYzlۭMEe4qS^FRWAjYYb[Al(6T>vii!m)**0'`0ddXǎ%DG'yƴtGdM +&$lIU\n'I$!ݱ.ܱ*H;Ny%Q'̧ԋci54Y,4Cl!.msZU⾵..\HupXu}U0uۺett)*8pq~~51ZQqR !sn>̟?lyy\rΎU|…;}f͍za.. #㑻"㌋iogGyĤ Rdsݹ[LLM=eef$$L}2A𜜖v"+~o9 C[XL |?T瀬С-nl< x'O&IXlk;xey!cǮ.)ywXBndeęEqii39흆z^5Xx1v1JnoUTTsg_VӇOƍ44T|C0kի}feهj>zΝ \ppؼy6#".,Ñpd/CX,&5EV- odb1VM shhՓnjR;wvR !@~悏`Ax$hkka;b)? r%$$d>y>==;?h˖w Ndd[gBBN@@w,_6|OLn{~y./9rmۼϞ RCq ȑ四5k g׷oԙ RtDӛ] --=7{H沴4+=|yZ(AUU[F^@ R>}c)1ٳǏM6 g "Mdev\x̙jIRcŕ+!oޜӧ;$ nnssYY˗oR sYxVShFY&&:TLM)--+*ʤT,Xࢪ Z,--a  ʩwﱝ9 Bp=yKW]t+))#+ٳIP\ے 7jQQi߾sTTMLtx^-J22ҢO&&:YYτ?4NZZ&O=<2 rq㡵 oRZUFFZT=zty3 fVVF45U9SSŞMR ю uOZ0v퍪Bvrߏ$nfY俹"ed!4}:LLt Ͽ~>\NN2ަG=im\AAzGmm xKUTUVZQs]\׾MM} vvf?&>:F56)سlRRL)6Nm}t>a?~*/llL z}eLs6Ӹ1s;`n Rrilno Rq55UcbR']{ѣzbYݴгg =={߾ !D 55_=6RFfիR/ ̺JRHAA7Ο!xC2y`zs C;..nBGG#--S[{,--ׅ w^E̦kt8vjgDR/g=t(wos_ƍ 𩨨O;m0E}Μj|$(`d4AYy\G]O3fѫg̺R)!yyY{=zL&If F99Y@NN^\[ڵӂ.7='R IDATǏwn d _`9@it]hv0S=vAJs;MA}?yĺ˗55ǘLzرM^c:3J!Ty3<0pV8$Ijix.뻼va22nt.C1?43**޾'ܹb1-غuo}ӧ/cc-oMinn5]A# ew܁dz ][ڸ\y75qqȸ 8{6>H uO0<>Hpʕ<=(*egwa&+J۽×ݭm~~-s^ՠi|YzfIi\]u$61zF jYm/K<[ȋS)++<~J^ Ԅ$:M:`nGBM'`p1<ѷvvIBQn=y2$ə3<[:ہG;jp'W[c>jM܎P{C!B~!B!a!B!?!B!PM^,R/!B!N}?P๺=hҥaRV#P3'qEyzH7<B!j M̩S))w,]HUU [Q hj^,W]])B骆B!B"5ɘO=?@$ >**|}YY{mҤMmm{H0;wZlw`ѣ?IJSS߷oYEEUY٧ӧ75jA\728jnxc45U!B!$VS;[rq<`zumNX1q„A0qS^ދcVMf`hҗQ*{.%\$И/~j._1iFjر^~xȾ_aa A12zM ݺe/v暘般rC6}{Q};Wno@#B!Ě9+WN=1/EYYy)?`'Mss:XZAQM[[Cp^Nj55 '%@]}1 xx45Uo'դY=/yioC6gΨ سlrd?;wtJݞ=UTT-3gTC`0ft^b85Z5B!N`nG5 QO LlXIx'#cK@@rkDm;~B!Ry' iXB!BZb[:B!P;c>ѿpgc"PkIq0#5Yzj Bu§| cM7B!BC!B~!B!a{E=rD0EM BW^2ԏ~4RKJ* MQѼD7\PGDw~^pX^gs̙=;@a0}>t~c?݇@q-,Z '~ ׍ c?_a\.OdE'Lk8YFU>e]-؀A @@n'vh ڝ7l4hK|%Х35}QVO}6[ϖ̟jHp}}&XJz-k{Li!܎4@`Vvqpᤊ說CuffQIWUU1UU1{>-s'`x1D afȶm{f`0eֹs GĎS'?fڇFoED0xSF{x;pr!!Q66ӤR_}}ߍ#ٻ;8ĉQHHss?==3;'x̰a }rs~q]_qdzz>6"ʕɓGѵkN8cb_dfTӥ/E'O^PJK˫WX'@Csbc qѣ NuU7h|Ǹ+$$JTU}{>}Xu44*MEe;OMʪb$5}J1מ4TrCnGn'v c?vΝN]$"{A&و7IDO#"'"CC}####}R[bh֬goS*,2(8xo@G.\mUUͅ G}7l IIYvCKM}}XlFF8t`ݽ{g>VDtrÇ^^/PKK >:;*d"*+wy?ѨQ66[Kff&;?a.DϿ[&_amm9~PG^l5A.u1dg8k~7nezo+pM5oWl9s6%'gv9=w~<[Qi*u@4J$1qSꎑ8zɒԨ6Ϧ26=r;!+Uru9HNN\.'a\E"1•qPL9VV]Q-O./^f{ OIɱia"0-ryzz>r֬ ѪU{6n\@PdvCD55;0p,?YsvPSScNxΝ}PQG#G..+1 nTf1+wO?] : ˗3h\FƏADnEGD8/ "RRwxy$'gѣ-[""V +yLa۷ED~~CNDOOm##.]:QC֨ttID¹v̘={viQi*u@< Uxr6#MRu}J1gs`6OJ܎ܮ+a:A{Vd2w] G[nnvDdkۃ-xPZŦIMHDͮr֮=v|//OkkDqp'/|{]W,OWegEG'<ߵ+xwTfʕlkiiQZZ1h|ssSGGkҥS,JLud;p`_GG\jŎi@~Dt ᔩU@ֶ?gF%(֡;8)DYhnDO[ Uv-tHc/D"2rp{6hk&&uݫJDwezwML +s6o7 NAsZNsvMܨ]r"v #=g6qp"+ e'kVD"5krƏ_5~*hK*۷~TYYsɿrlp;s+BVAN̬Æ _pk..=_wnE^+fEOD-^O"ڻWO~S+Ly/M "۸حEEQ|0^ѣZuAs399srnQu(:QA-vĉ lpeWGc%<<ةU*inTMh*SЧH1jZ<4)ەv~KXҬ¬]NJjkD"νR\|oѪU[2s昐{ٷ;ٝ-WWɓG4 kk+֯?ee5?ʝz=bcu뱈UZZӭŌ؋geuI W OL̊:W]H,1D4{5kK1//'}SwƝ;{ޯ}O4"rvnH R {>/y}}0hhĬbO7y~o hp{w w] 00Ѵi>5&Uܨ<<T4Y 4ǩOcԴ85y<ۑە v~틥Err<<LLxٳ˴i> ;@'$\hRwo91Oވ\3| D' -ز?_9tsaӧ/啌rJɤ,11:2r鿅ԫ\>[nbb$;w|8PGd2;NL-<`MY'11)|s;:z E۷WD*6o7 88'fϭ[7Wbmۢo߽yvӦרFՄ@46>5-NmK}ۑۑUҁܮ]\sL9g ,Nֶ/'< 迭?̚S'Cىjmӂ[vh.͙1={x|LL Mt~c?݇@a0}>t~c?݇@I[:hN#mCn&@w|KGچM9c?݇9Z:YGtOUG}>t~c?݇@a0}>t~ǵt0h5x8#@h&<_7*Z|چ r'?qs^3-d2U"eSj |@a 73{`Ԁtq2/fK22ْCW Um|%oc1VVS|}uMMm n\~/nn}MM_tq5ojl[oMl'OM`lVHZv竫^ݽ3u mɪ3&L>w.@)3 3@"xx,{6aTR8Cn=~˂[…**bΟB./^Y@D%%_UUTUTX2Νh":xGvt1!۶{(YB'#GbG\ܩTcc3#""~Gs?8Y׮qw8q2==?y}{J#ڵ_OPe11Ç/23{I*eע'/ Reu+SphShw9W}8˅'숺*oϿ4hɋc\]%\in*bjrP}1?GƱcu4!CaI90prrn6aeUlVU$%YHAy9Os#]l #r{~ȝ;OHD=CCLh׍$'O~T-14zTiiyk쳷)efLÇD7 ?~ٶ…#6{,WW!CuT,6##]G]trp޽3[޿{{+"|9j/^~yyBBhm_d ;q<{ៈh(n%CC}33p0"KSr /]ʰ?~c\ UVsk2=78Uצ+Xl9Mw?Q\G]Siݻ2zx.:z ¢q'MVfZ_^~ԩ2ۯޣG.e|Ԅ%ϪDT,JjlbcPr;!+UruZMn0hGrrr9 "\;шōbʱ7oH-O./^qlHHB"*/sfMhc׮uĖ- ϐcDfM`Bθ+Vڵ߯ݿGo:Д=7/ 幹ZuN$С廸 Yؗ/gܹ~OSǍ?NMͭn~VtDĪS]7|TTn:6v/]qܣG[D)r2n )*?2{8"<#U[%YYi>> xNRPYY}lHyy}(3 $dayy4 855+laWk0f HAykA8Nz IDATە*A[gn{?!x ڳ"dh8rtf'$[lIEŃ,6'$(hEG"H$llvv큵kԦ{yZ[[%"ㄛ Js4rq>vE튐[n0y9Q^^IPP(;a_[*$ɬYĔ6~WG \^l~QeeΝ'z˱M ;wf rb̬Æ _pk..=_wnE^+fEOD-^O"ڻWυS+Ly/܅JTUH$ƍon-*YDt/ժ Rgrr6-{u(DXPp=qBh sf `` ֤k&/{ء?)n{i::(M; 9<=z5ygMLsorLcۉ)23][$&&o.{GGH}XΩv~AXp997{xnݺm/p}͛..6?xFEI\{߹\.766tu[hҥK;HAnЉTm5r#>E:ۛZ#>-˱%(Bma֬ :W:t8'L: <9cbR((h2.@C;fm|4Լykt8ڇF=] iq0S/m,z g@a0}>t~c?݇@a0}>tZ:6vhtϷtmT 0} 8#xt~J$r;4 cj'AAnd9~c?݇@a0}>t~c?݇@q-,Z '~ ׍ c?_a\.OdE'Lk8YFU>e-KZ:B#@5 ]{CnyzÆA曙d`0zj@GY ]L8?SEneGo%l!߫G_W_6TP+)vj+ؾ8+Wn%GIJ%K`K8Z$Hu6``0JMDqc1ϞY[[QswŶ⦀"۵ Z/Z o7nD"10>r$6**ĖPxDބnyUnyQIIYIIYlݻO9[7 v?^ť ҏΝKkI݋˗3UL`-6jkozl˖v۶r-5HTi4CnGnW=v|о,X],\8"*n,ršDTRUUULUU̞=O-cK܉&dw.^Lg+(/Cm޽rq%$n":r$vŝ:I>66>0Bx+"hd4cށg &nq&N|BB昛ر8c [`s˟;Supwǎ'),՘y޷WM<]uU<|"3R.]&xy-:y UVWZZ^2G:9vw{UX޷L\8pŽۮ&>A曘hl<_!!Q…`M?{Ό. ΝK8ܹp1i~HD"}":p̭[円VФcb%o Z[O8٘1ˋd*&)iw {Uzw9OsW͐l_(G=vvBnGnWEsS޾ghh qD<"{"24722022ׯ %饥Y޾TY0eVQpހ.\gg۪ n\] 闚׭R،wqu{ly}<<̇^x塖 |}bcuvU.ɒ)DTVvĉÇ"Q.))-vs{<ǧ_=zFژVG$}}=v:%7o>JD3f&=f+ޓU`ݻw>x=Dŀ\sOQUz1ZA.Y2Օ r@n'vJP.u1 ܎@;Sn 梘Fpe/n(SUW?!~~C:wnxr9⎳gCBBQy7K7m:LD8vm߭['lYHDEE#5kvm_"֮=p~PlMM.(8z։/^,χټy/=t[EGg/ilV.w¾|9{j8nujjnw`#"V:ҥ߼D2Hfrӕձ[o=ݲ%Jqd4o),soHQQT~ٳQdٔa5ޔ;IIR@&sg ϝK}:))$i~c1~uH/0a(zhnkr~XDrjKK _56V`C/X+6^+nXNJ\]9 {?!x ڳ"כ7DѨ5;!`K**f9!AA-,:D"a%%ek]{@(6==˅20p,q' eA-Ņ^~UGn%KkE ?2EVGwbVTVM嗛ʛy밍*[ + F}튐!Ր Ў<ĉÉ(/$((㯭ZNDd֬qbʉK?~أT.p`/o?^]zΓ&vb瀝;O 31X9+36cTW~]E^+fEOD-^O"ڻWRS+Ly/܅JTUH$ƍon-*YDt/Ƨ ɹMD997 NLzą+G}s릲 ``"kϟ)u3xykkKjjkr3)_lp$hI߿_GH$ǎŅnpUIաoڱܕtI rR!܎ڗYYYYv ;->&"Dg{)^!U^Sd1!!Qyy%{~ow<ϳmv'hp֖+V_())j;9:{6Ʀosc?$%e۫"%%[73F+ѱ{9ʪ…9@.\uY̙chqkcb^^.NN.*SΝ{O޾'S\\9;f7)RÇ=W󼾾Tq4zgbbVnn<_7޽M HJh46ȚH,Q*<ǧ=lLVim(pܤ~M[DmtxٲÆh`*9M;j$Ovv EBnoW/p011yg.Ӧ$$ejjsѢIvvKzRwޙ]ĘO>y#2r/QZZT'<`˖>|С΅NW2rʕj(_8S'Ĭ2GGvvϧS&rlp?xM.8CC=wx;1q5EffkkĤ|e##o^ةo7cMMsrnܺus?(f۶- _pݛ7K]\l7m{P3 'o#F҄6M:,4G+--->x΀ՏM@w  ]UoڱVWjDݧEv G|vwZ)Nֶ/NuؿY6td_u`UR[?: CɈ1={x|LL M@Ӡ+A m|4Լykt8m*hva'ϓOe޴sx>t~c?݇@a0}>t~c?݇@I[:hN#mCn&@w|KGچM9c?݇9Z:g]MDn1i|\KGO@ 9c?݇@a0}>t~c?݇ถt~ac?քFZ@/@0vA.?~'?2|"yzkE|⃬WfBv̖biV[/ @@n'vic?v " of(k%&f +t2d*LM_?b).͖dd%h}}_}}PB5J$c.۽뚚dݮ`\9˖,Y-~dd4dgoh ڀ(7ƍB<{)Y}S[ކGn &jDhJK+޸Q@D@Z\|ȑب>[[[:@yy>U.%VqG%%e%%eWw>}n,Hqz,ۻ?{6dH?":w.%u/._dW]2{Hۨ}u-["mێ5BTie4kUi 7h_,..TQ]Us|hnr|"*)**fϞwا–%wD?;R/!aضx F79;rNRi~! LM_4213ņDLJ}}7ndv8d'GD!!Qnns|^ZtXPRc1Æ-l0Zw9ϝ)ɺv}EcIjˋw+W&OID׮:}*㌉I>|KRO.&]p'ζUU5.\gyݰٳ7$%e /55ׯ[b˗8ҥuxx8[˙V{yC--2?Fl\%Sމ[DDFytkl-ꛙ tÆQ\\?Ro۷N|RC{TŐ]8]uܸ)6ռ]e;ٔmnnڽ{ߖ/:J8cw|/]J}\RR[fKyOlm{Սĵ1ԏHzTuJ.o|f#泍7@sP=O IDATn1W.Y2}جr@n'vJP.u1 .)D4lpGD#F7n)ʪ?!;wTD|XMM ƴR?BC:r$_n0j7cB CCTyE_Fk4wԍ ] v{?!x ڳ"כ7DѨ5;!`K**f9!AA-,:D"a%%ek]{@(6==˅20p,q' eA-Ņ^~UGn%KkE ::vw^bbXX켼ĬĬL=mHó7،*k#phTdӽ{[D"9ܴÔGϱU6V3+ΜI~x~Y`ݼyuRػݚoFݧ7CnWܮ>sJ Ў<ĉÉ(/$((㯭ZNDd֬qbʉK?~أT.p`/o?^]zΓ&vblSL VAN̬Æ _pk..=_GQgd?+0pw}q_3Tʤ)Sgd2wUU5 q㛱[>`] 2Hrrn&'gQrrvNM"߿S'"*(n8qQ4p`_v=z+Y;5ȚdnonnJ ޿"{ڒƚ\? `wʗ-*웃ޡ{ݴ㫹 'yփNJA~r;{?&,liVVaVV]NKzH"|bgb ).Whժ-9sLHHT^^޽v#܄JJʲ`NNΞ ܺXDII}*-HIbƌ tt^xzγp$v+W'&fEE~$fE?s"={ܚ5إFts;|øs~FDν iuAԡAvvy#2r/QZZT'<`˖>|С΅NW2rʕj(_8S'Ĭ2GGvvϧS&rlp?xM.8CC=wx;1q5EffkkĤ|e##o^ةo7? 88'fϭ[7Wbmۢo߽yvӦר5 H?z/m!##r\C9g ,Nֶ/NuؿY6td_u`%O[?5r{mRzĜOrh11)D4@ m|4Լykt8m Zhva'ϙOeWc!HJ>t~c?݇@a0}>t~c?݇@I[:hN#mCn&@w|KGچM9c?݇9Z:۳"0i|\KGl @p2}>t~c?݇@a0}>t~ǵt0h5x8#@h&<_7*Z|چ r'?qs^3-d2U"erOwT9-5t Fj r3c?v " of(k%&f +t2d*LM_?b).͖dd%h}}_}}PB5J$c.۽뚚dn=r_|n&2k޼?K F% F 6nٳ?kk+sVr6qS@PZ(R\ii7 H"Ho9gzkbK}xP5aBs޺ؖ-oQMMm[:gITii!#62{?e`IUU1χvf!/, bby}*,l[rN4<#ub:[Aymێ=`,!ё##G.O*[? E#8\lHH4W_wHnǎ8N6q{D6OO%/Eǎ ,563luw\ܹrkW;v8Oa៍Ƽ{r%lDtگӧ2Θ$t2kɓ)8z4)pث}grlvDv7 4Ec1 .4715xq([w@Zھˣnر "2dNޑ#3 G('#mX%D"}":p̭[円VЪcb%o Z[O8٘1ˋd*&)iw ե[}w69OsoMl_/G=vvBnGnט69%w?u" 233!#\7n|> xRO{X gφGؗ23 BBGSSsKK+1mX[-4#GbFy[Gs^vKu#GJ$CV[ZZ(`oz[U}[M(ͽ]8ucBvBnWBnWB%|ng{?!x ڳ"dh8rtf'$[lIEŃ,6'$(hEG"H$llvv큵kԦ{yZ[[%"ㄛ>ΣG;v,㭷>%ŋ'tjhq]"?6 Ѭ\hH'uMu܆|8ڎnc?0 ʨ}z9H$RT*'Oη۱Vnii=BDl";YY?J3}0+/ φ &m{^Q@׌/[X-Xd뎶z]Rukbj"11=\s8##O(s3efMKT֦L9n@4¡AW(aǎeկ gl.ӽ8Zq>vUPEnE[ |!:YZ )vjX"H$SNJHvkK\كTTT=|Xy7}ʭU >6o>$̔`jŪU3ҥoxy9֠qmnEs=)ᣇs_b6_dDqܼy'mێ;+=9EML?LO7C6H&,(/Hիg&'+(HXl ;kUU /dWC32=Aa׮d<kW<< Loo#ƍۯ>JOJtoE#hX03lX_v|y^}eUU}H$wCt7h%M{q[dOPՂZum~mKL̂빹?PLaԨ$ƍ<={iѣg(2 mK&OPovdxgüCBkim/[rwzzxWW?pDcwu~HOsww())ڵäI#5ϰ2gXVJ%rynBOUb6_d'"SDEmgb^.&UgϿøs~Ϟ{vtqr<={ ڂ4009ycc0hH<ʕ"<_}]oϞ""B6l:9Hb"0anb2aCBQtLNRRO56<_{[2ָ>,Ȉ^=}'~ֶ?Y6a͚= n4Kzq߸ݭh24 ڎڮH ժk;h[lm;ddĮ\9Ҍ=:O0,-msPVViiTjdb"uu EN'Rp߂kgŒ^~ç!C|,y]Gk66ŷnn8;?{l췡C=<喖fӃ>qݻw|7mzG."`MEhIIGlff:41q ErwwdG>T.> ~c?Ça`00|> ~c?ÇᓶtМ8YKGM c?-45vh,0|>0\<+mg&$j;4Jy)-@kk>Am, `00|> ~c?Ça`00|>ǵt`0vӮ];PS W^YOY&&b#׺PQj 0w?t4ذ!ڒ^z&=~LMLLkHFlz1zz+J.]6n܇Uҥ>:ubMcOOS.^ԩs읕u7WXSٜ}qԹ}n>}z?_z" _~ֶ}ZZNhᅲ74ZOO'GDos&',:/֖11}ccС!RhҤQb2РI$mG=.fS 61-P ]- j;`І(J"4K8#ك˗iήKP;ӶD>WaEr˗w9㸪kT_q.2ׯ~D4 սS!4&_c,ͽF0lX_ssS":p U5T:ޭPM‰w&ND.]sn" 8+JIIiهձm޽ɿZط~:^_o..b|-q8B5qXGPqFڮtk|! Y~`@pgE&|u/ѱ7%JJrٜD"a/KOcg9˗|WB;W?mGqE:ڵ oܸ}5Gs xҥgŤQ7${z:v())VVnn2Y ۔t`>/@qs> nd$!_~=={ߍL[gRXǎ\^yܻ҃wό<"6%"uB XcDau>>ΣG;v,㭷>%ŋ'j* \H.uAm"wS@m'vvCiVFA"(ʴR)\>yvMގMrKKs졝]"bىW상x]~Nx6$dH^O0aglmߦOfxlMEEt&[wu ʕ[SS/ɣLLjni챯o/򘘘y E\+?/[u7[oHǍ7\6ee+4~ J*GԨqrrVEEɰa}33Nb KeHҮ̓T I[Da/;v,ѣqdu~M+,ώS7н8Zq>vUPEnvu ІtdkDPGDl`ة"#cH"L2FL;))烃##٭4.se֯?PQQa)zW1`+d7fJ`bժo7\\zhkظR ɹ|C{/1/}"8n޼ѶmGΝ&&!_$ IWJ$3$,[6ΝZ[y}ԞOknK79sgZصvvրVo&۷z㍑DtW_}zRYweq}6/Xpxþ9>@ti7n> IujZ⡶7TmY{=79,UWD"ٸqgO1:z,EFmɣmێlZsH`- a+WNOϵjw=<Nvt;_n\y%%]v4ivv]jR\$V.MHJlQD4u꘨T, WŤQ?}|zwsbގ..=xRRgOvAZ["YXF8;?P>*0y":^! -Xv_,yo>|Z(2gɒu* mccY\|[.-.fsٿ~:á۫>[nii&\>=sgjjܽ{'wӦw- TY[[~yff&CWR$wwH|*]KN mee_ؽ{+Qz?lnl"??[xy9Y3k׮֖))m{o>;Z+JssSoosǞ9YV45?c :P{qD}PQQQqħ ~c?Ça`00|> ~O@sd-45vh ϷtP0a`0pq\KGm #>~G @<3ޔG0|> ~c?Ça`00|> ~zZ:0X '~kGM c?/amRy\SX[rF3T)>:m6("m>{Mg$4 @@m'jSybժgY[db2~|XGryΝ_8?+Eeď[n%99WْY~t36nl^D afgs/)?%`!CI'qSqq? Ջff#f|1f'HÍ^]{]1'{(::gZAFFì_ ΰa G 4h}}?}''U:Mph64 E|YѳgcBBх Moq&%eε~I*ֹ+s收 5yE6%{x|NX>d#G.v!֫/Y/Gttpb]ljϧ_}ѱgcm>xxu݃cU2;˓ӷ{)i9L]d?Cw7NlPvvBmڮW0hCܹi"rqaC% zL"zX=N JSS&yETvRѥKƍѣ "Zt[XGN]yT^^yEދ:uUzz+v6suѢ9:wqu֭#[ާO/??W;"KUHN^w3g6qWUUvm 4Nѽ^?ׯ$\w1D"33_xk̛ C(?0(([ݻLD"pg󯴴R61B=\\^77>`;[8L4]dU;oݍ8mCJvBmWKzP[ nd2%:FSwAII.ҡC;"H$ey,g/Jh:;j@mxh"8N]7ߜv^vSuohx?x.5B^^Abb]4ꦞdOO'[%%j^&`z.,4Nzz.ۧaaÍ$D>/'g/iKLΝ;eǎ.ܼyw_z6GennʽcW77K5htfQ=VT.zh$2u:n ;ԵlBڎڮIs\le>=$RLKQ*'kHMҜ=(+{hgׅݫ2f` "^eW_n ҫ3L[#x?!3^0[`SQ-ݷmAA{rh D4y([|bb{K=<<&&pFFBQ,ǏgV֛.، 6eeZϙt~ J'ʣ>ˊCNTW?X$DTX,%Н:91%nԇڮ ]j;Ӳ]`'@ҩkBQ}`^%"D2e1 dиϕ=X@EEÇ7ߧ]ŀn|H;߃X[[Z5-]Km ~ ɹ|C{/1/}"8n޼ѶmGΝ)'&!_$ IWJ$3$,[6ΝZ[fdQFF^~~!S{bccID׮dAָ:ҔYw7f}gڮx4{?%&fAn~(&TjT]]CDdy=4RTtѳD%'NP(m;}w2oo琐vⰕ+wٍwu㏻'ND;:v}睿[?.(6yTj$ܷ`_|<_yix%Ktg>66ŷnn8;?{l췡C=<喖fyL֭{%^^NkڵEÊo ˎֶk:}v\ʮOƧшKu&޸<7U7QDݧ ZOmoA\=j9g ,Nֺ/>,A_cSqk 4 {Lkff=iDu9ZVA_jޔGh.%8ID!89za'@sR8[oGEt8n P h0Kon$T9Z:zSa`D瓓5{Мǯi`'a`00|> ~c?Çxo:s@: FQ-42ДP0a`0p7!$0PV10h|JKG'k@ j;>hs> ~c?Ça`00|> ~c?Çถ ~z0怱> @@ @hj@T*kj<'L7qN J>eX _ @@m'+*~mΣGV?%>st 4YY(r-'~RTt-ɹʖ̚[UKpc4J$CGٍ>|-VVVOz^UB&Y2_n~żFwSlD##VOPV>j{SytiT=IDATLkD$HLLEEMNHHٸqٯtMǏxcr:Hr;Uŷo''۲cvځ:Ng-^77{Dr/JD 1,RH]_Hvϙ3(ϧ<}Irrx>xyyRyy֭,dK**|ΝNmdͪ/0a[RX--9$ \׭X39y=ڐRIDy^1<؛=|v $i["Rɟ>y˖o~;NN׬CD}8CvJ2;*?Du˿a'=DTYYc?G<_S8*ի VV5:vwAi_UC̻}lΤ1c4(ݻ?`1i?x.6۰%">=iq\p ii9DuU٫W`?ϝ塤1]Waӛ22 xzڄH'^/sMDAAHO,X0MG iP&7 h˖M:M\\^/YU3tD[Żv%蜠8vv"NϼRmОW&սDި󔛛=w!\+-}PR~ҡC;"&米˿Z+l ۆ&"ㄋu|ͩgpqMϟ?ϥ^+HLLyKFԓdkۡY[d}AL\\zfWuE|:}6HBD᣿{":{p~- ʤTjtƝҿ22vaPF1˵v~Df.9AC]ܽ+j;?]miVFA"(ʴR)\>yvMގMrKgeeѽ{uZZ상x]~Qx6$dH^O0a?nalmߦOfxlMEEtYwu ʕ[SS/ɣLLjni챯o/򘘘y E\+?/[u7[oHA، 6eeZϙtܠ J6'NDu6lKNNJ|),7KН:9:'4=q>vUPٳQ[) H(>SS/DFD"2evRRGG{i\"WY@EEÇ7ߧ]ŀ3`C?d Y{3kkUfKrrq顭Ac6>99Wك?>z>w%fEOD͛w"ڶȹsғsĤQPYY}q>dd2:R"V aٲ)DtܯUUڂ/?0##22 OK"v&zz_?wvoO]SxX2)`55KK۩~ί1eOw&y8 Fm'v Cmf?z-11 rs^C11R"H$7)[G%7-Pd:Z ,.-vscc Uo-4O9355޽Li;rd-BCVW?NJ˾}&%eQDDN@s4h0de)Hy[:Ah4>za' TyAZ&'Zay~c?Ça`00|> ~c?Ça`00|-@S8BgZ:0z@(mٴzCmœOÇÜOÅ߄AjQ@#~Oi'kj;Q1a`00|> ~c?Ça`00| k`a7x8#@h4) JqMco q2~S ٠T\S#h^jNAmW@QŪUϲ~d\;q2VV/\ĉbKrr%fE7Vgglf$99qeS6f՗L0-),ϖdgɖ̜ [ED~~utjl,왜NvϞ mmmid$qpl/Ըo_;)<%4vl )kvH$Y 䕐LzqVoڴ "ن%S6n|$ɵkF"ٳ1|5y'^YI:u4ڂԘXm۾wLL}|1Zȕ='8aC]s0333y];&YLWi\rbii$Խ Is<,lx\\${߯o32buw<[v|ɩk޺uxϞegbbS/ùڐ;w:t\\zlammID{^=?V}ODff&ff&ƵSR#Ըɣ:^ťTjtҵq>|.ѩSkj{z:W:ubN]s&',#ΞuHظToA ?hG vBmWKzŀnx]hC J% zt`obڱ4:vlmxJ%&-[}wgf;9u_fz)DTPgt~" Qdի/*""Qee |M㨨/V''7XY.޽UTT 2;ƌРhwPo†ϗhI#q/QV??Wg^\$.._?wR"ti\ÇOo 0kkDqF2ׯ~D4Ꮝ$/>>Ăt$eu͙}RC3{lmǟ _*~HW_o!>|XO =p쌌K[7wq,+%%4f`ɒWA:mc#R!:[kW8vv"NmY|e2_Kt:OٳNNْ%%!:#"abXzz;Y˿کξ&Wmxh"8N]7ߜv^vSuohx?x.5B^^Abb]4ꦞdOO'[%%j^&`z.,de]l 72Qx/Ξ,hKgR]C3{ly'g'MΎE]\zݻgFFM>@NJrc#R!:[`iء㻌&N 0CڧD"Q*ii9JR<|d|޽j喖u!{j?G\4cX$"^eo_n ҫ3L؏[[#x?!3^0[`SQ-7wmAA{rh D4y([|bb{K=<<&&pFFBQ,ǏgV֛."t6#HMEYs&݄;7hCMa~!wڅ i|Y3{SW"M!lIڵ uwJН:]9C nԇڮ ]j !:YZ )vjX"H$SNJHvO9K*zbo[0}l|l!kV-V.}ťk?ۄ7\e>pJxCܽ>q7o߉h۶#JOaFAeesǍ/|L "J[zfr򺂂e˦ѹsVUUk RBv1##/?=AaQ׮dG8kW{]eRfR&Ӌ={@R|X{zch.8b>Tݹsgω{;yJI9OD=imAdaaBQ󼱱T'3r\{JL/^|>gn!6|wgLL E1M0CeRFdR&ƈ]'&ۇ<_ϭ hW`l\*q9 ڎڮHZ5~mmؕ+gZZ<ߣG mn<-mܹcJLL;!5uȉ1V||T`DtB*5[v/X ׯ<|BQ[nii&\>=sgjjܽ{'wӦw-TY[[~yff&CWR$wwH6)U.> ~c?Ça`00|> ~c?Çq<Ϸt <8#hm<< |ٹIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/DistributionFactoryPolicy.png000066400000000000000000000201751307543307100314320ustar00rootroot00000000000000PNG  IHDR~We1 IDATxwxU{wH@D D: ]"(@@ EP(҅遐E J(@ =feid7W./wv39sٙIDQ9.A( iő;*11# "#wT" BTc955!L2PW͕zƌ"TFw |0$aYPܿ2{=ͻgm:bt[#!ltQPvIҔTd{='aVgokNrm-U^/8A= ]3f jNnuttKxGԳxʴcq)A SR*=@SgG UfPѤoUXWNNvT÷O|KZG<;Z^vjЭ`daQTεJCU@0?rKDxDDux [n(lgHb4 q%պ6.tT}LuƤ\r]ƾMĦ .fclϕqRe6nH],CʏoJ(وO1.DY]1i?GK/(Ehx/H93<[L|tB7 &$ d,wkt 3k#bDhCA(żèO_z2-&S<88^-Pxaf\v4^(jӗ76! @JO vM>v@pq5c)^n|>r3iscέTJoK]j|pF]57ދ/l4۽BB=G'64"ظMkqZlfn $)^kVHDvXFVDB9'5Ϸ5:'GZy_vu׏#7sRpsWI˼չ=di)BK`GV}~H'7jh_>@߃5Oo@vY%B ¼> ӻNMXP{C~[&$v#˂ E#"ʂyj/L~տcmB"䤞_F^:)!@^E JU\L\}3 WI 0ԑ Bl2ḟ۝‡yeNwv14[M+qZlܣz??"v,휾+t^)Gpoջ 5P{7F~}+TɯN̊BrgNf67xlryl\7*NnZj-W̤A)BGFWwGy0N֯ G~s+?z 3k#b6EX02P9727W`u׌.-bIk;eAeA2e3 K4ig̽tӄk^{@Ֆ=1ME 9clmxjnRUJjS&wY+7l^ oPkpFzi-N J{}݂=PqVsYѻ .=N.m Ҫ`a}W%,_\V> UhڼzjkjEXK&[ٟgsfk3 SI;uww2Z,vi|;4jߋ7Qng?ڌ j?]Fڗϭ{ް),fFŀm$2Pq1+m)|[GI&A˂ e#=y=:tQUc! <#B m^\&‰c/ =^e-H? nt`Q/n<8,`[q)9[q[wͧ p:S #9۰Do'%}w?DD:i-N90v?Ezi5o^["%<]=otb(A'gj\bʔWcڌw _Z?~:X6Q $]vf~]=!$c_M|wYٛ9lާWKX˕.3iPy^h5l9b@g rmҒo.4 +6jh_>@O7fFŀm|[GT%2-&)rlpLGE1w>RIRթ;8zCI݊1+o`}Ք!ky 'WM:lZn%Sq*L]o|Z 1w5D1A6/:JJGGŝQj8~ح Z|Bm0URWWoԛ}T 'R7"E1!T).%ɯ}DҒ>lZ"I[rxBR+^_BC >%V&Bpru YmgQ6L2xluݕ;Z#/=g+]fPpڛZ6wQ+}<%VP WO揾4eWb˭ރ 2 |[R{ZY~[&d2;%sDCeGvs 7=Lu zjV/Yzf\!VtL] B 1ŦU긕 CDe]Ce7o"]Mǚx 'j O+8>D "a&, """=DDDDzX"""cY@DDDz, He, """=DDDDzX"""cY@DDDz( wDDT Ff۸8c;yt(Q%ƲĤ O3vB v|6fB`Y@Dk8bY@d3k'f|e@DV"gZH"YYp79&g֞=4\H`aY@dor0>Ӱ&p8.3 X **_Vdq@d(HT_a" Q^-JʣHp`P%Ʋ*]ʆUJ@ 'zo+PIJ*NT<,aY@P`q@8Scq@XxyXPEi&TA, ǩ pX,aY@/!T!, dXcY@,9X}J9 dx* PXIr, >U8,OTF;?TNw, 1dOXCĉdXP"8Ʋg7b`q@e^ *9TXPFTXŲJ -T2_@а8DzsQ`q@ee/T6X8TX 83TzXu_@@XPi`Y@pf!rP,dX^ XPq, >*"Tt, *=ND* U*,6, * D* ˂JH‬cYP '"s,x" bYP~ òbQMD=Od_p:6\"NbB9GAD!#Qe );%aх=x͇t;:A%6Ɓ;Hk<̽- ڌu V~_ngfzϜS) ie,.|h%iV (\=4EZ~#;xVlLwA_^qxhϱP=Mڌ视xs{uڅ~ /Joybce0wJuo09֒C}-v^= {QdFYҳqKw]3~o[RW?$P%MJ_.oQSZN\se١z5xbږY.(R6*Ӭp-I79 %6L¼ϕQ;n 5Ke&1?`׎ kkgSԼZL)LAQ!/ /ؐxaz;܃cq6991q_vUTU+pd}&e k$W!]9i[xk7[E/glȟOn $ݢimlX\u햬KZ(& ijfoϝIIKZ; (=nb AlyvLZIm}?kKdIk}3}:Ha㴱 lɑ$ݤD;YDf k9j`pvU^u$k-ז cv'rR u_5$^.)ȴ,V{x.wڻ1KmΏJz9#?fwo&MzU7VLP5Hf \U 뙌8QL6^jAAh5Zz*CחN$k⍛};e{&rJw %Q2}Wؤ5cJ^nO' vR8mۃ/jr(I7ydyp,QYB&78+n!$ uS\bn^[fK6#i(BruE~EH\*SDxypsM6Ǟȝ6dL6lmf~}5 KM22}8y7xa_Tyʖ1VƋD-AQ`;w2+. &{oOK5hI e }s'Ӌw踠GBG}StWM/԰3<:+mITYǦ*0C?dKw/9ֺɁp,Qs|g/gNlŖĔh4_vd.5O\IZISiY0|rxyx#G'¼2}ڄ:j֫!n-fՉo2d{Sͺ危)OW%*>K:lYA.}[i`Wo:IGpj,*lW͏7*ӬE%&Y*,!c:NɣᱟVR:[Q?_lfܴ#_D]81tJ5}K2Y#˥2M&Oޘ4MNڽ˖v_x)ukc| @%_0k<fj'0WX%jtڤg>-#=ufV՝kZh:|ܷI^}(;* <{Od0ɩGӗI|v\V}5۩[pC8az {l0^﷋:_xVk 'wNx\k^_کihw;rh{kƟ-FJ16ە$N]Pْt,Q |Õ'칕8rU !ߘ+#鷎{[|{L 0xU>)IÏʏZZv0,*˥2 "v^F5;g<ƕfl!nFM>A,QF8K}ΈPvY<ډg CM*􎾐So -pp ěD7&ńrϫDT9D EˇQeDDDdX"""cY@DDDz, He, """=DDDDzXw%8IDAT"""cY@DDDz, He byG@DwP ByG@Di"k>YIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Exception.png000066400000000000000000000100461307543307100261750ustar00rootroot00000000000000PNG  IHDRtbIDATxy\Minսu"Dc1e-f"kQ%XDM&$4bF0 R*y8n\c~Ot$fZ b9I C }EH}EH}EH}EH}EH}EH}EH}EH}EHꫫ9J[ Ol8o I׻ Q~H]_랥,3 c/7l)j,Ư 2o[fcyHK{Z_^jn]F$Τ_jNy w2}õ])}L16~uYJ<{PT| ze`;a=9PxfVm9?u3ܫXb2vŖ=t?, j~sÑh+&ݿyC"/ 7sM?6Y]~Tdٴk)n!mn8 3bYP7qSPhHK)K+X|]M1Ym48YS-EX[XZS G^l:XTZ]W}s=EqɜzzybFv.aof&{6KM٪;t7) \9y嘂5{,x4(g&_%egWW ,u=,JŢM-S[Е8o)kȎ۔,}@6c7Ojp.*8BnN̜8-"~OXF-\sI]_&+B'_Zp}EH}EH}EH}EH}EH}EH}EH}EH}EH]>t.8@)EEOw#+!W$WU# @_UJm+*jW$W9\bU "p%VuoPY"$A-Z8qrhiRA~݀$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$W$(Ap(eBQVeڴ:f~V ƭbS lnj/rLY :P̟Ϧ^+xmr1a]h@`i }%CQ$dYt29:kc\|fe/FYY@ǔ:4qi .]q)t~YZzc߮C+w·ETX+v_+7xP!O]73٧Sa!egl5( K̊ZJQV,HmCs~|T+eҫ n-v13GO=-KZORG lټ]. \.e9s@W}56Gh`P7s{1+)Pɧ=ck,e斉-my#ykߗeɗijFMtu8X|bU?L't$*(#yy\h$+9'ΑG>Io&sjKLrfd]L9;]Wgagdm5`"|zi6-*x֥(vcwQPuNV{pnhڷ2=M͊K:n Z^KGLK) MMfpY|Ϗ֊ Ce30naRճޖZvHsȧ`m\|Q~ZRس+hbq{^aQZB9XGϸVo|Tuώj jLR]qܑebi-h5*,/qq[ ̋j"0υJ/p$y/9R#mUIezKrkRQ7bqsL/:"5׺wXmǁۻ=$3RfUurSa.qg;\sAS>ȧ`͝Pd뉠~Rqɧ'ػfFP,kֿiϧi nZ<}guLVp2cD7-2f3/&2/AX;ZRZ*jmIezզ>Z*V0&] AOU5xࢬj񒣡 Vjܔ2s+> bQ7u>'< C K,aj(ä Y[+Ehy=.8}KFqUۙwG=1{Cls{9rfzKcQ{dolcS (W$yH+`;W__@}EH}EH}EH}EH}EH}EH}EH}EH}EH}EH}EH}EH}EH}EHFHkpIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/FORM.png000066400000000000000000000231551307543307100250070ustar00rootroot00000000000000PNG  IHDRc z IDATxy\Lgi6-*Iɚ]*[BY[N&.g˒H҂VQMD2ܹӔMEg;|(qq&;r$Żjťr\sܧOظ8$6^HSfdffz4M _8 1Q27|zx^ƦREE22^ ]'u[JUyY]"‘</_t ZZ*[nnd+''[/6`FƩ{iiHH 155%w>ڞ?YT5HeeՕ`L{&4Njܹs.HJtnݴU;ݑz3tQ C16II96}0 L&CQQvܸ~#Жqʙ3dʫW/utfK+9!'ܤIv22R 67 81Cu7 `?}} IVEEWHK9~|5Iٷo aN@MMܼyb1뮢Ҏ E^]JJ 1#N*t:$Njvm8j } +.TVRQKUan׻aMMD@ǎ#Ph5P -|L8@yy鼼"v#yy[u &F/+NnVE:|Ki3L̟?䧺N^^Pl۱OׄvP_Kjɱ۵oLRFF];*F{9960F:FW9 _ $eٙ󧗗=tӯ_N==gxq2"bW})O FEIR޿XGXWx/n$/O\eyyi2_ $cb-'w$}ϞdC*vqx]WHMדY醆ZWli8`#s{!)a#IEر02{33=8~<_)%ZXoB`11) //M}5q.ee/cGEQ}@mn`cĉҍv=wѻ݄'`ǎݻ|LeWJӷ>~,OpȨӗ>:/Ғk:~Rwo 5sRζP^^^^3h4h,G4j#G(ᡰ,},L:?CdF{jVƍп)~|o%ť×{]Z3-NӴTbɐ؊ wbSVhkl> S$T9d4\[ xo]bbT[Cܶm.ƦAoˀ,}||ҥ~$|QZ[.ɖ1"o 5o=M :B]KJ0))>RKK&]'B[ZsBRHDF}&?/ߙSG6GP;uvu EE'.>HYyy?_@J|uΎ?|(9rzHȣR`ԨP^^id`..))c;̌fPrI'mD/ccW##Ν02e9663s;v+[EI}yy%^7oninݡɓ߳lf[k+|h:UII9-cѻ1/hݺC0a̿<JVCX-04t9Wr/+5t&M# MMJJutuB[ʗG\n|?#V`&3J[o]msԧSݻPZZ媪*ʕ-y+eZ=ƦaAՠn ,XrQ;wLB!𯪪DfORR;8mdrr֧Oe3f g%`/oVQQ 66kWidԹnErr슊K4*+Үo_cV%r:tPjmOXz*An\|qq)ɠ.dZ6!@%]뢠 K4~++c`ggջ!{ⵎښ5Scb*uR*UZOm8 mxchl9tuSe׹NEEըQã;tPx$qdjt#iMPX/99(&qЊ`Ŋwe@?~]d`{4#avt#Ca ++ CFFmMt7UUE&qc11V 8˖9ki4îQsj!BxB)EEbbR[j]j~L5 02r--T^ŋZi!CWɓ)ӧo(#'g?r䯯_~ĤR8[J5kǩSkl YYq||V4˾_ bbRSl>{Knz:f{ݚV8;{.Yhb҅ htѻk=MCz()+/ߎFZzhǎ||O*/houur#w%%Y#G10424q@ssO^E72reff / 11F㤦fS٬</_ lxzŊԶZ^[Ъd'99 11Nq#r$Wdi9&$dkr 832o*)\.>.ufK@~AOooBW5MFdxpQ<uժ)G&sU am$ A%jk>}rtrBW!'q8dĉ7b^I^JKKO;(][˭ gu7M{d1z׮=2f5ť7PԌ9.:{…</>=ɓdm11:Ʀh^_MRS5ի5m_z |PYYT)K_MM-~~Id$޾}/tG馦:˼wݻ2v͛1_- U.t3bDci׮Hʠ;$.TW$&fPN5!۵OyGӧ hUMC h&U33=}6fꌌXAAeIoGGltiꚌss ?@TT2wÆq#ᢼ=z===';;;w8F{9M1'Ĉ_WVV ()Qض-PCv|| ]ժ4PIIɵ>ӛ}ƌ4XY,ƍL;%;;.11C__l9ΝxU,'OeedK_YY>$aEo|UWw]g}}N:7mr_PǎƏ_7rd_GbtLL[[К~J?$'gwwsXx-t5 !$`5m݄W_`rml[XB5zCTT߽+z}fٲ}~866&zzOGڵewҕB}MsTxe޼ɗSvvMP;j4>!}!Զ124KZy _恡!0V:5CԼ0VC`!jF BC!j%^5C\0"B4p#!fP} Bh<'Ԃp*n?j 5;kH 5vݹs.TVV}Q97olQQpyy؝;>**\>ϟaa,#[۷ Ǐ{I)Ϊv>שeglzS*C``D~  [--~ V=GZz sYG^[--'c 9p֓d03fj>ӽLyy{11[YVVgFR.ܷOtfܶheѕd#&fNn&rs /_~P_VTTyxQT%#3l$#GBIQTCZXfJJ61}uqq ~`l*.>C=~<\[{ԐcFMdm푒]_'40OY^'Ie{<4tCJ빹ނ]x̗e֭Zn@5gJH$$Xԡ!FRK_!keejĉw&u./{7l/OdbҲӧiӦm޸ϞZԏF%%9==Hzz:: +n#Gi^g]{52\E8(YuM3R];m߻BaG99ݻ dXd̙۞NȃvdȂ::)8"ݱ4L2?ֶj0%%@߾d66&dŋLQQWWTP/Et\.=7@amNޛ7g9y{k]<guR#G~}tnnгgM| =zѳ>&J 2~|?09::ju]vz$Hd75ա2oNniZ0@ݻ ';`rkP__Nsq\;Ν']j5վlIP\\ d%#N q ˨۷o /ܶY#$/}&b{{K]]7߾Sfa )͚ q~` ݊ۦQB/(}꣬ɱ׊edˉ-4ؓ>KF<;,utqFF`ׯ?)+Vup)d 13Moǯ\t0Qʉ1b+ss=gϹҊ{/|Y]mHb޽^R!߲R["VM66V_L'u ȳg..C QXIX>h T;;& *`'=z xm.[[=q"?C^$ӷH9Ǐ d&$j@+t:[ϺlmQ%o6~-64? #Y,;gwEt:?u7oCBxio*|`.]T 1l{D}23s/]ӯ_+&5P#e;'㤜}}'t颚eGnoI:-A 2IIqjzřFhrSο7e޼ؘl8Yؽcz;o6 Zz4z]B\DDkdJFj׮re(%#@عj}P$ٴӣ;KWȴC.d.ڱ (2p/8:Cj0hZ^ XɾLG/P2.Q/{"zqݙ]꿛^ ~\eX6 )z5lGSHŎP).dlJ + -89Z鹾ʆb?$"FћA\c荭} DdVm&QЩDTإ~DdSƥwjtj7Tݮ<;(;ڕ\MCf.gt,3eX':}OU?#:C6$]U^y8X 2zc#ge%#h%O m];ytqt0 \wEJ?({J%E= KW5*_]!"3ri08 NY֢~ba |6Rl"bUxIDYQ.Fb'ˎ^ǧ4aֳM+Wĩ@ՑV2㾯R"0'Ezx "2S[Oh0WT]ћa ٙ>zEDz&׉Hޥ~VDT³rǎvrhk*6hUҐ˯+ղ-SU]lzu_o"*ݵN#Bȡg5F d߲۩|sPl]GGoψ '\qBDD -{Qi=sș2O}}0ۮ;7"z/6: ױDֺR'++rNm9:\iH@D!Ȥ{kk }@*󊈌 ("1Y|M͞k[!M3Vh] w o/7$*۫6NQtr0tDYDْ(N&6)B|- I+(Cm2DCu6T#DJD2EH_\Lj&QNʖ<dܸ[8~:7x;A :ZSKio%-m6Yڈ9M.0oKDEZ!z_ʵ/ۂDԻpZ9KD&ZBuZ`?(הӢ^^!"qNIbY?@DW 21jmp[oo(k֞kmYI 5g]{R#NȪc\@*H V`ݗtO`BݽgHӌ+t/&; jH c"Z_Ew頺׉ȦvA]HT Jz#wci':? #b !3Dt;V,BLd2yH;,:h0`cHDƿ Ji`S[3Bco{#Uݽtqcj%m+qAbYHڗ2FB"ܘhDa'qջ;?Q /{NDD:ИR&Da&NQ.Lh'߯}=,TњFV y Nm9jäDTaWvÜNԬ֫ls=v{O[ϐO_Vd|6 .&*%)+NTte:r$L- V{'.3#q_֍3?֎f6"$e^w\P9[vڝDT]1'U#.(lt˂?Y)z;9"z/6: ױU{VnX˻\{?䬻uZKcA#_'ʼQLYĴi߭ ieP>En/aـ[Ӽ\*XJ"q Qݡ/>RJ#7^ϡH \a.qKK (0rFB"ze)g6Ln]X 0+kO2e oZP .Z^^]|I-[2djIJ(WH )]$"=><5gـ?0rY[/qh\ /\?Kيy KbiEDTvmsoYY-'[Xĝ&V,檱7/tJ, 7n״ {CO~Xo∎5v[ 5/\jڶP|keRl~vC=<:Y[7n]9ݻZ(E#mӻ[Y?>}GDVX{ƺo:{I~u~m}^v럍3 ulzc5v_nQc+U4itbZՠY_|;ʓ?ѤӇZզimqS_6n9=Dܽ)O%K'ұR&FM<<*۹ӱpbrڵƪU4Y>zL? Ibo埰8sU8 Opo  +e\ӼT/[-%#գk3&󌽳(XD&ծjtSt-ntc߿^P'W*C$TDPB?l"dS;B4h:6icm}al 80XxA\٤гPes~[Ӈ0&IaBfy:܃)//˻_S t%\!zI'?[_NL@2iԱ6nf[ul&yyIde߿oUߡK7-4]"cT{ִ3b z|jdWS\MMZ;dcBc .oCy?@nӠWL@i^NLqp&81 'A* + qO/Ń>Sw_ #z~3(JFЛ44fP2~>ˆwxd=hJ~(JFF8{@:޸U#o%#vC}"[5*!'JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFxd(JFg,j_È؀\%13qd~ٷ]T K!@vKn{0)I-ƫ1.fB[A[j:vέHccIϛܶ #LB\c||9f:l8йO/-P2B7n3U]عGU?/hN*& hM<9Cχ:'!/{U K ͭ8t̍ZHv$UPO"U\9lL\25G޽eal-Q p{{"j:Lvxq7qu-BkѴNa*7%}/LbZFm7g7mnBlغROV]`׶ڥKDE+ jLӧToOêڷf~7#-!2Yѥ134?JFȻ-yMDǕWm3ދ.>y֛;9}ny:5ZϵG,[c+On}h`ܙEawk躼濯IGCz R fI+"/lpDtq+KozvnN3dV&s+7|0UU[= وo$x4Bmf}wO]ȶ_K\^_ ;zyuR̦է2A~SbF /LDF\Qq.gL=gcXӐGH"d´<^ r-Rωi2ro :׿!)dQBI{F R/ mgo5sȓK/x(|'"JY7L +\&A ,aOT H`m80T9#!Eq써5\vUW?`T.8rIvk-bDDqAG͊0/5D4ҏKQ:>I7 #R(.W]Sm<}zriyHQj&"Y+sA2أ}b9y㈛7xN-b "b)hB%HDTUv5$?>hob,KDr闌&F 2۾ٺ#NR$.UEM,v/VqNbRMp:bSP"KMPKqAі/Dǥm(4VH4|GKӧ'4,M _G w@[WHlV>=c9?NLCa-!Sɪ7кQ& UX91'IZ-exϝ(~K?<;_p3^'gOsI7wanO:ED/V!fKuoRzfU)q Z騌PiҷW3oʍOGD%SP2B3,.yxo^"9Sj8Z( *>H~DD56 -z~DQ>q^J$U12JwXC/J|{P\`U +k:Ddky "rY=B M*(>ڻs6"!?,Uҿ#&fV!LIlC/^25Ĝr29ήaR#ƓKd1&YL셒 Գ|d7ɒ㾝\ղ;퐉Kg!~v?#W(">k5TGR$X2 B˹sFm&n?rYvܤhD%r.vD4gYBk3QM,hWiF#%/rlɞQ0sx!M<.Յ[Սa9^G$%}SuLtL[ߢFD4dx ow,d.X0wID5WzY  d{w7*m{A'1,ݡ/}T9D\oQȹxU%n_q|DI}69=3#[X%tJ-wzssg^MzH$eM\}6㼅:mbo!ii<2`bv+LưDdWox o$\dB>;5f"nE]qbǜ&VR{a(|bA m&:W&mY]ʜ3[n+M^»>sGF? L7@ho F@&,I3ZUXHטϒ3ؔص}` r2qɞzzhdy/OSuJDWzlzqji'R _]m$XE=&h p8=sRփ땀<ei&bܲjRk<=Be]s%Ʀs_h'EK/ھr|Gkgv^i~kS!.oyzyJ+k O_Tot%Ȇ ӀMw\t1՚]˞Co,?rD<]>"#~r秞8}PZal מ 0.-_PМkyzhoj] - yy?5RޙtPE;=M07wpe,v24hDZ)ʬTa;iE>>On J0ݺwn:Mw+վUG828Y;qTؾ|9]ڤl1:reSR%"gR}VW},X®Tk=;xy4,V{ݨQإd烥Dn,swՋĴOI}6+O4{qםڌFGK,D\Ԁ[uIɢ~yW6²A+ gԼ};C@d}wg6f-Eej,R$ͨ' '*;XIDBeM޴f^gӷzR4cOu{;#L}XAnm"):o}%-BgSKDmV6ntT+?)e툟\%c)-&M|R Cڶ\A-N>>$W\&+uYT xzAJd\ʷB+ʖ/XqPUcPnߌZ iJ̃gohnڷ?ci'׽ Q.~Hck{7-~݅mWvuw9LD͆fUݳԲX{@wh;=Fwof\'={`;SF<1hŻ7S uL동~9{̆na,'Im3j|ֵT߿{>[icmJѸ>IԱjtU<9˦kVF6> O~HԘjc?{~}6CD?:j" U֖bnV3E-Ty\Hjڣk{G5'Nějj;„'Һƒn1c.}^2jKY[=3T'/Bm3ҝe-qz"RH{$НD-׽z"CƗ )kBz31FN~{eAWvjҤnJU:6)k,HLԱx H<U~ʛӿ _V{>V>jlO~0SD( N{n]m`UXeUjLî:ގPLdD$2ˢxDjt,Q_;esd.a[Җ/okkOu2HLK JGpkm{u%S"J]r Kz_%-*ºp[Z_"r.Pܴ]W|L.nqaExDǾҝ^PR[|H7" %cZՑiy ظdߎ]7Bz d&^J-$==wr]x' ne{=?k%Gi`U[*_7;G2}5Ʉb[t{X"gL~]MMbRRr2(<jwۂڵB&sҫg&.ZHOV!I-j}uo\J -X,|ʴp31l*|4iiՕ>OG/lɬ^aXZ?,=M[mϵkύh`pχ[IvHB.Z5\WJe$ʝW~qk.1gbd㻍>lTȡ.KVɶ>Sٛ?YEmϿYMnRDP'͟Xoi/İ+Xhͤ6$b.y?da1{14f.HOǔYMV-xcF(q^kۍ9L~[8o+fky"c "rs/C/6YHٮOڸg==T%2pI! ]j諙{j=i0Nazmsgf%Iaˆ_ſsС#>>-s_)1'Ze&?ODam&sYFEּY3?dloc0bEZlӱ>'>|KR$uf9v_ ,;[\fbЭ[/2u}g%TsѺ_o\pC*cz$ؕI,y/lo}WO)Q"2(PcY͔S?ѯpeuY'(] +l9Ľ`NJhPp" Ҧ>Ѷj㞡4n..YDTuoU-*B`cݺpq{L$ 3: /=**1EU˪YID65o2y׷>]Kf+E>f$Q ?}n&2.u|I?{]6n;5ar˔dQ,φ{yԫ[k;ڵk9å~^/d<* 0j/ʥ7ڭk;|=[3x\L Cy].vRT,WnhmKv(v]۬X(w]swb.\EՇʏ&=UBn^[[IÞ% 3d\zFڵz+l81 yw1ʇvZV>>V{6mr49 JFȣzs?t¿σ y' b|/C'] "Wȿ^8d۔*@G;Z G[.EK/|B1QfveY;].~=g`X`|NLCwx$@4dP81 9 Gs v @?(s 13ecG.8]SaE9VP2B%G?rN %N귚w^ `?ppg1-Bj.rr>9۲386)ŽPaӡݸF*.r]3>عj{P"/X׼f+Skҽ=\V K&yJFȘՊ==y҈ .MW?Mb7 `ـD$2M!;BDԻ)1, V0_PSt"jhw*xCDo6q79,4YKDAQaJkM:&/ޝd9 ݠd xr֭Y͙Yf=(q_oxED^UI~DdR "%QU$-ڱ((ԛ[C}X9rSʶX\s'bD{uwyʴ W74oc&\LuȻ}EY}r.WĦ|5"bs#3,UDF'B{36I@D73^j6D47ײ %kݵʷ>kz}^2w*sY[??npȀIDjiژql6 #.n;Qٮvܧ{E !"{a Ry| O̥ b.s^Nk4L^!DT@?(IDE=ʨ>,61qM=e11x14y3D5c;9W|#{q7V&6vhf!)N=Mu*'(ە0BbVLD#;m̈(ELDk#ѓӪWDddh"`twZbX@\adݰO K"Vfu]A"Ň&"B%Dj7r'Ҩ@A;C"/AWD"l,#+Wn{ѵ'mCKFNeb24-2 /7$*۫6NQ6s0c?&gYeKrl8ؤd3 ׀("*& KD DZ׎)iݰl@B\nijLj[z@D;*[w8p [N*?GDA :ZSKio%$]z#$g*#41pbԾ-iنRZ[?\-XJD uHDdR}/;X/QrMy;-"2+RU`#Yv{jτ|LDV5SnNẅ́Ddlג/AWD"ڿ ֒^rdx e7-CKFNeb24tݠd R˜lŽA*F:u":}p4R)B"È"*raDTCA"21D8> !۱.fFjg"ȳDaG|7C"6V"-H ՘{bĈO^})ڶ2ta*U<T})c$$"ʍv>JDzW˿Erl`= "bJhpP1c"Z2N㶺RQG?OF8U5K;=ra"jہ]mx۞_O>lŴD_F%ûS:4ME}v0~7(!|6 .&*%)+NTtez [=(4E펥z.|OVj]wa 5hze7r'ljh{[`W}Kmq5B+֯Ѧ6vǡ}T&&~ MSQLz JF\^K L=ZnMJeUKtb"-,ڷkk^RXHDQ2"jQ p)u1$6o? Y?axעDnEÛZecԲdk·XvLMw.feػb;q55kFt+YcD"[0}bJbhYȠxjk_JdcKsKsbsHڵ/DpxPŮM XssCiާ r+̴mnZw3 1uw)pi&`[{H$F5.OV?v竔z Hx:}lȠN|'fHaFcIg\ku5:ѿn̟ǡ}T&&~ MSQTa9aӠFJb6=qsH?rwB%˝0?QF!ۄzQ*m4E˝| 7ZEXٴ:l /wrk'Qr _‰霂y NL G72߳ ~Yy n81 9iv?@7^ٗϊEjXYV2F&SlrёǵYC^HLzV9Y.v|ps&vʇh]q-!1"gQ|9; _? \"/[vHHq\U{"$OsYyJ<$+9~!׶tAO%ʎv~kkzw?څA5cibl=%޳n+6ptv@hWٲ i{[X#>zU]Z=,Aߕ,/+1lKF2-:Hm߹#c -ݎ}hSG6V@$*Vdo%C}E$8]k g12맇gdPv%_b#6 Zat/z/4C9@^g`s ?tXyz}/׿XB^8֗F=`Ҧ3[=7$96Kw2ŭrNvCCc-Hjy4yv]dĨCKtǵ3QM}!!—>Mݱ{tt2%%73=m_ e'1~Has~= Ƈ3V9'gPVFE4FJ^yQ,uؔPiڟ^UYPjweܝ޳cḰ};Ӹ&NU@HӘAޣ0cΞ-c_nS78>;o_ xV7p)=)'("?Xo/"%F(CQ74Vs.le/r)M($cs9:;F܂;'w %-撗L=s4}>Ub&D^0;Wq+?][d[tھG~e \n 4EI1?Az ٹnW)wcq+o(c.S~ޜC5_|g?9+|(+R`+%E=2}%"i5CoV75"3~&Vv`ռ̍ƑadO`U "cOTֵnUp9gS,UӋrCㅤV䟊fOeArΦ\6^_Ͼ$B Eѻ]WV'δ*s|pR"l72Zv-|Ra< e,c5G?0֠Ug/91LrŚWIIK {C ?^8exUEnCMm4",$Mz7٩ӹ|VI~ eV^Ǫoƥ*G^T"ai;]7q3~n{boYvl㹚OV)lx>"c?^3j()Ly8/nrq"qdg^ޫ5X~^[L2]GDTk箴u8󋫎7MNDDL8>kfpATi鍿^Q3*S=?VgϹ˻]*\>3s-&[4>׮YЙp}h{ PXjTMq":φshoiW uo:sTw*Z{d}%〡m~xSpGLLV?r-ۺ!-mRr,i'9^:o3rMG vmOk&ݟ_|MV*rd_=~쨓MC6rz:ݯ9-ıQU~&Y<gYjO.{S#w7ᰞ~Ƭ;ދzF݌OR/[g2ek ehLput<w;ӹXw?Xּ+G}ӈVx͚Zv78铃ytӟS_ZQŝjɉ+s쉞[|2rG_IQ/=F0 2gDK~*OWofa]]5^wFV6yC_ N btnE$=˚_t_7x,4[r'6c֏{xkCZ>8⶙OiwcnQtp?NzS7[%% zj3[QD>WCU-XQ/uݢyDXgAgQ/="7T[X_Pˠ/75pN^TKݾT{s߬Ճ;_jw MN\ 82+oN~pYmќ?E7l;C/|9oEPti2Kq4}!^2foϦu(||K7g6YEϵ7Ձ:us!x'KoGFR78xSH#ȏ˺ w1 DFh 2@@d"#4 Ң(e KK@Vc(C? ?<(gXl9^ŇȈ5j;ހ.gPdY bBdDxYW8q1H`yyJ&CdDLQN+;ml=]/"'^W eD y6 kF؛Gr<;RDdDs+qt<^קFp xNBdDi)~~7͑> (yDFby/);WypQ9);I"7Ǐ /a)>ee>x>0pGS~eя)pLL.h wF)>}v*Fb 73"(#P*|j w#ɯ'QFTSؾ3ȭ|(u3#ّIj"4cv KƲݵFSSRۣ'?-PH2d$R+ IadX^om$,gDFo柢)X&ӱTLLQ) @Nv,R_FKg' FSBS%K(5\BXP0zOɍ;ŭ7@(#;])*!)(ex.qG_ `1;$/Jo<;p n+EQFErS7>XԄEQFŭhEˎEHED[^$^qǒ"(#vcޯ 0tyvF"#S#a 4_a Cv E(#_kvP{ QF~5AfGQ-F!7A:fG(#iG85'"#r%IU&E""#4 DFh 2@@d"#4 DFh 2@@d"#4 DFh*Ju T[mDFt6W4ƽ:]PPݍVVv*r~oZ۶[~bs߈`¬-ZjEY&F 섶}ForMOxILdzXnAut_h~>6"#_fN6"VAۇ?],=&Fqa!lʵ{W3S!SVڋlH|J1zc-NXyЩ=Vuz6ͽk_zKq+Lvnx>g밨}sl|߶,KPtvV"u %"wٻWNjZ̓HrBeW8kIs~6[IRw뼭-7Պ9pjcW2֛*,urgky%3v5_p垢雌֋y;_ZtAzCxޕu7{4eд5vXzcwEdwv{;҈'Tb'7U\!OH6&ګ]qzkߚ6X(A!악jSּaOb8xic{2[5y]T?TغCAbƬdZN`+~z]RXݸ㡶f"|ؽjȻ[M3Z[a׬:vPQiHעW4(ʸ^f E^V:lqEQ\r(rco\m:J:oӟe+֬,"av,!2@@Sߝtb^+xzȂ^8.C_޸s/7OOUPa_nP}o6zAep:{vW#c{fL{sk4vj5rӓxm1G#;椌آnq "jEVTCȓ[fe{ߴ%?6%_6j/YܷmҠ-BG9 =yS7ݻrM{1X١דYOL;4 ϷxwcBOL h%7cǮt:yc5Q#!U?0M7 ӎOabO0t 2.oC"{옘O](sLL@@d"#4 DFh 2@@d"#4 e(a"Snynt "#4 DFh 2@@d"#4 DFh*Ju rAU˺GM)~N.6&Qhos,+t0P-I3/XCgsxKۺ>mܫ1S}Y IDATF+m+;]X Jh7Rm[E-?oDmaȉU-rŢO -@ 섶}}ķ<{oܾ|SC&^]Cl/J~Tj﫾[cl_h Ļk:YLL@@ey{. m#ŒaK}X~%ϒأmoߚ:Xk ɦ\ ~;z5c A1u2euxʖW7vjr脕ݳjUǨgC:8$:*.(:]\jZmB.+;)JtuBʆS^0 '5Vnkc no쁑s7w,ݷbIݍA48vm=tTy3=խkзRNW'4\Of;.[tmݍAj7~q%]"#M~iqښow^>;-cYۑܣ|K 2s7Y|ٶ߯j~ז_4‡;/ŭ09VuiLRbrYD>_>ν۲,)B5ҵs[֡_77vfj^9j5J+" Sr\Ԯ%ͺA۔~lA'I-n̮;T+_Xo[o:<}}}~?ڵ'o ,s!dhv}k{`բDWNZ2=q्C";Two?,uQzS᫣ci|vj_5v_Y ""u"ZGKzQ߇MW?꽫{S)y(pZؚ=nYDz EV u!|m\2:~0U7_M:Cw?P5U+XDzܜ}njyE8@ՊHhUfՙ܈"߰LSՔ DAQZv8-7;;V(~^a(2Ci{rmQmܫ1S}F+m+;]X Jh7Rm[E-?oDmaȉU-r. @섶}}ķ<{oܾ|SC&^]Cl*<.UU߭1k/ |X01 #pg'3U{,aaOi?Kb}k>|\XH{cŮb&$r+Ռ5ԽsȔթ)[z<_RةaˡVtvϪU 84hDtk?ryhk u(Jtܮ4.(ѕ#& -*'Oz,"/||X:7m/,!sFtܱtߊ%t7ut%QEw٢{nn PcîK s"#M~iqښow^>;-cYۑܣ|K 2s7Y|ٶ߯j~ז_4‡;/ŭ09VuiLRb-sYD>_>ν۲,)B5ҵs[֡_77vfj^9j5J+" Sr\Ԯ%ͺA۔~lA'I-n̮;T+_Xo[o:L;ޏt""~#󃷜VP<>})ό@IQ^!b֋y;׿UK.(Voϻ.Ѣ5qy/煦EjN+ e۴۩F_?0G;鏬5g !}B>7^[ Eѵ 4g,T#e4 {KEwܓNrmX뢪1WG'y վ~k촿7mX;DD2MkC$}Ez3:ڷ<܇Ij eֱ(ъdږweVj|Ng՚g,,urDgIOCH=q^5]7tu|oؗ#tQtEĒ{t _Ւ3hi46\I׼IxҴyۍHϳ>2jArDo d6>.:#"/<.>a"Y>#2@zQD607"\m*48.R-"'&jee#9;|{ ڌY2͟D#2@6LpU"rxOojpz!: ")C?H6~%%עu+Ȕ.zSϵ9Gels \mp6e:9qsܱC}<֬^DO\W`ywqs}V+"q U:lUgr#4j60MUS6<ZjғEkZ(+zJ-(ʸK]>{-BGiz""/-1l=s@B:KG @)NZ:zAΕk<=do/LyhP/o9x⛧}Χ*u{i/M\77W?2? y=}=39q5;59w S<Զݘp㣑cisRFvlQkfZ]Fm"R+*pÁi D٭V]ăq=oZV͍/P5[id,[kvif|qن=Nn{*]f;KG46F1?on =cQHy)Ĵo+5%̒cWD|E,` E7Q#!U?0M76LL×11@F 0e*&ۼ{8 @d"#4 DFh 2@@d"#4 DFh 2@jYJDDQʺGwÂʺ1bb@d"#4 DFh 2@@d"#4!(-R-@U˺@d@u ]-(&NQ~}t>TKvҌ V\1趮OwjLvA_rJNEnTkVQtOll[u29[?$U\'Hwʺ}TKvB>qַ9䦋'W̌o<ԤF&^\JUSl~,7JT:Wk/ mjޤ̳ӇWrCuo^ۦ_Xp{CpfcKZ5n PK8m롣;-cYۑܣ|K 2s7Y|ٶ߯j~ז_4‡;/ŭ09VuiLRâu>_>ν۲,)B5ҵs[֡_77vfj^9j5J+" Sr\Ԯ%ͺA۔~lA'I-n̮;T+_Xo[o:ʭo,"O\ӱ٣>w{ {0װӆv?DD́S}Fo9x|טQT_(2(OLdlf^pחj yW4ZnҼB"b5]ղCDmK#|WSͣoG֚zTADrM>!dhv}k{`բDWNZ2=q्C";Two?,uQzS᫣ci|vj_5v_Y ""u"ZGKzQn<*Anncu~G/ܛݛk@5ED2XvA=(ъdpMj({_ 7."51Y"2Y&HW`(ބlٌVUK6҉.(~AOoU;Ӵ s6 Ov/й݈`~oZaX1K7;{ZsxgHGQ_+ʞQE9Et7VDd)GsM~Byβװq"Rp;S͎ u~jF"2yzGbN]%"- "~KşDBx oj\LkEdOZۜ32Syy^9Uy6Z2\nԤ7Ty}k+bV ;*]0!"էNmʑ""IyQNm{e}"2K[yܵ'pov56(j5ϻ)Np,-kg @1dKQU;}+v4_ɼgQ3Cn-B3ƶqI?ͰXiGL*"3Л_5H^̘ߙV˙élEC/TK>qsܱC}<֬^DO\W`ywqs}V+"q U:lUgr#4j60MUS6<ZjғEkZ(+zJ-(ʸK]>{-BG4qj&fubٚwjnyܵ'bE=\yiYf:ӱX1ߥ@:Y6-ܣ]7W2Կɣ.tZ-bY|lۆ7]Ű?~i-TE|ߍ857cJb_euaq &IDATeZU˩'7]̾{Բn|/GsWNhf X .m|Ɗ][LH6WHہ=իk{))[z<_RةaˡVtvϪU 84hDtk?ryhk u(Jtܮ4.(ѕ#& -*'Oz,"/||X:7m/,!sFtܱtߊ%t7ut%Q.zc4{)ݛfu\ٛ=NPβ7DžbDd5s!9֯?-"?N[Srgel:};{o[~pC}iaAf=ko[%EYFV;|n+:k]P+'5WA {E$9!U}p[+ڵY9?Hcҏ-$ōuVzb{㖛j81Q mMG5EIQk:7{tnOPaϲfSQD) /CMvifża/Q-YX!<ʺF֝g2~^h_;XDt ZvȻMzi symZsv[*H^'zsծ8o`oZ]HsB5ҩZk^FӰ'\1q^@x=-ż.Zs*|utrl!OW^N+}ӖCD$Ӵ6NbX|QD^;s}[o:mT1g`Y%m=Ϟe{S۽;tn44Vj|_:C/Cd5lx#<=#{{zSӳ II7ۗ\ToMmW^r-XL7\ksXf96+9*Wk3yXƟͳ*ﵯqmeATBWj!"1sG+ >ujT}|I:rj+Y}X ={=YDduǐ)/EU}&|%†vGͨ7ZD%|4b=2!n<@o6I| {1c~g2[-gO OP.Y,sǎn\SP[zI>qq^EݭWt[-VU밉kVɍh;(Ҩx4UMLkѫIOe\erӎke+(z.9v9챷{.wܶecpǩ]Ktnבfkޕ۫=zsמ,rQ:}w'-נF5&<{hЗ7D{?11 01m4+&K(#8 yq/#w (ܽ2ŋih 2@@d"#4 DFh 2@@d"#4AQU(R-J y?@Ẍg)IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/FamilyPolicy.png000066400000000000000000000202151307543307100266370ustar00rootroot00000000000000PNG  IHDRG IDATxwXY3i$6AA ‚XPt] b]"b("uuH'H I?B aL,߳>Ν3&'sg !',GB3u}='>oq+೸^Һcս(ƀ[)Kڰ(X? <mWM1Wxʪ,/8zK̺Ʉ5˖Xf(:R@ˠCmlvZ :Οݱ]ٵT0i&ElnSM: 8gϦ{,q7d2/eYxqFs^z%+m׬ X'n4T:bg"3l:k?ID/4c ^\р$n'k|u8,VwG.Jsu'HA%F-,…䤆6uZyeay<7pc-Lr@&>yW>}`w'*{|qR쎷BjOYg,]cwG#"P-cf34|\! 79JC oʏ^ѥ ΃@:AIu= } 2iIXJțao:ydŲ=W?Yg<2װS BpO}ڎ'ߖ`p1]C7>~w s3N|̈eȮ-2IMc \.9XU.)*v1ݖCMX IIChNIcQ~{Qv +-x 2HZ(-=#wApu1 #]APS~%kpR4mYRGi/J1]#'W2>{,)U*`jYd2̈gk7<Ȥ٥A._kO!Pqʚ=0v7(o'2}-ȇe@!>=**M^G*mNy ?]2 R*]Ą30dwս(Š"Ir/Q4 NF27y[VR[yV#6)zr#ɫm+^$):o!ZG9 JC.yL hG\bziN@=xi _-2<08: h],/~E.*f^0{7IaےFi d'tE@+}Ϗ,/)W6-8،H+àh{P+Y+(Sw͘1):aU6_+ |)=~mED2u0HSq0&;1?LyؓC(ܞ Q NB09$5{ޑM~ߖ9}54ΐz\sK]|<<ƍ}ڹ.6S&f>b] u6ۑԯg"˨Ew<-נk^G%Q d'iV E`@E@L0'ӇTv lZ>2`HT^ϕ[Oo.;E {s7qoʽ(0h_.nWzآ@ M]TDE,L;OMdf4ڤH1EE$kؽ o3r~Y[h;R G?B9-16y__Ap;n%V"W[RpPZ Nz~Z;oa?SqµQUWH z 5b_bynB^#5jlZLwCܶ޻6+ꇧ|ەVZֈPh6APp'1Yz?rk1F&s 䯑XZέlF/ߖJ5~슟%ąuq 9( /n3 z74{ͯ8nv[$J1w7@ș^侞9,QonddRh#"Wf C}I' ne񬧋6I+ڻ5GgbOyÔzF A[sgk9<.ߺOa&,nь>yzŨ?Yj تVZZ{>>A惢|5zix&=ȵ VW]K˻Z$?_ޕ#V{bOPmEeW3Bg_ ɧlsEckG7;1w$wT,N mw+lQΑ/\͕b wwW?ogthw2nñj^]UUw׉~6;]ɒGt6/LVriU,A>c4߉K =X]'(.'cd8Xsd@'Γ Jz+VP!<ꚶ\M+KZ&T;/AOSo2)~3UTRPzWշKJZr )H@~~L;m▂Z"/_'~WE|1UIIUc wFja,Xɇl0<9yd~VՅ~;Mdo~X2ӥGy1>Od F ;(-!وLR JVCf;@rTHL|f^9X2Ȁ\|ـI g GwqϾiz*5oj*_W"m&%Uw{AqXޏTzTkƊ%k)"؆9 [[9L wx&mܭw=L$xnҵm]?m!_] NQI?\D\#;yWNfaT$GRހ M׿;I>eq[D7@Lnk/#X =U 6˷ c*^VqVĨw 4>zrsLj;{S;-W_MpH)WNPX&ʷGEU|q| ~lLSg#g~Y.έ-yG!|+Y 3hU4Gn>O|7pƪ~bF+_(GJ>(,Zm^cȌ˭Z1U7AʇO ˜a]ʋցaڍ:Gs/ ;T&C 5 8|rETtKs7RIEc% xVq7Lo 4)+zmӹ초ջ,{UYy/+ uϜӞ?7ru@wtU`^yy7KC7cYA EJ(.fWSxsK>(906N(J3_>R"WxȈ穅2Mί\[o"IIџѓ絜..& )n{sfHJ_?~4yNשA5o':=O7M$SCήbR?~+S864>MGVls0ߒYli#Cv3.~tG_ӓM7z._*X1 UX w0F/~pfFpr׵iuYE +T? W6 >oqw? pP]'Lώk5yW㖖_RtѨz\`vOje{;+w{a{\\پ-SWpd# pPtP?\ w%MO#]85cg6 x?ޯ B1!hG=B B0!h B0!h B0!h B0!h B0!h =BX "jp"2}#"-LpkON$}-Wt s*0!h {*I{B 1/IcP]z1ǡ !D[ 7Ff:Du@2goQWSTmaC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC&8maC["o}a"[G]W=Yܷ!J[G)*BO|ܡx.(b=G2K-s_1QY>)Su&Xf{-<քS둫QuC1_T5à5LpjI{ p%'Fu3?< 2_E:7;M>vnWSTl۬S}QwNU-~36R7r5I[հq0a43 |\G{+EO&y72wc3Z srTV.{ُ3qdrwpȕ ׵ i̛``7JU_,u[lKsG}?EF'Q<2SBwwn )hKt[ lmBy ukA0TNKZ6mx sgR,?QƥEa y'n=;)* |]7`xsҿ!OLB0xVʹ Qw o[omቬ+^ZP&JaLzel$J[y]ʎ/ؒ0pz ͽ]Mߚ|yJS5آ'/i1T:vzϭ vلn w\T_a_־y&7?=œftN[Zd{yUwcHKX,g)Jb;Y1ujA0K&Dj[2YL')tnUiYQdyGc&[:3cHD e2OW{O> |*4͜Y7D947J*)r>)g狍ZQ|kWSt,0510Vԕ ]"؛R #,>WE:>f\b!<2,ȑf ꄡ:Cԁ N-&SXXs&j8=h|S83 ű2uho:ǦNYaAϏ h|XŷTz B]+ ̻/^~bж{yȦgҫ>K}V"Tב(Pt>ۂ:aT狇)Y- dCbuG,ouZP+N)uT{(ξXC۲ o3J97 ROMj kɫA=W+dn`X!<]D0*sa =FX8Ί3>ݗGAZ >;H.hD[fMy7S(.~cӦ涃/5aRqхn4YcEr5c$ z\o<|jکzLFeK$OgE志/IW8)5ŊKe,Qp \Ң3" bWQ2CzˎH E'QRvZaE/hϋ_W}yw/͑g4,-7\R~uk\N-Zt_ڛtrgOtzuowb>#8s_Njfaǀ=07gOo>`ɼ};7;<F5P,.{墸ŖW1#RB_jCԁwQ]MOV0,7?1!wQ?jQ۹`;w{85?B*lZ34tt~ojA)j5p8E5BaU'Ӎ5>4Wf_.6=luS_|c0W:rgM( 4;d~^4hcib.HBݱ\pjN#_YE4/*`SGJQA^]ZHx" ZeG Z>`L[0;Qf}DOW)u1; hN"ˊ| Fc{{A}kDJ6VeT䯛ܱl׮,UWrjB=BTӞhquu} S_DbRT=p=Yؾ L;TRQ3i9PG{-9V|}f.&m(d;>"@kGK+_c~f7cs&k19߬{NSGjyۗ&ѧ88(esVw3G$L,/z:x]4m <A]:b dG"1/r`s'$V?aPɎ@K.PWV;v=&_I6>}gGr{xܴT=O-*9:h tj$e2 {> ǮT&GFT,^L*ėp`X[6jW~w3B[ݍar̍{ȀL v1n,3=AD15b &jxFDۈ:E0SwK︶\Jz}w,K7|)M Yƻ]ZHx0)kJjUy.]8w)vME T#-nI1o\:"kg5+WtK<1/v}Fn8< #n+w>Z4pG(s92kFuGwvU/@ kvbfv_=۶oaΤ+`<%yxNd1׆c>8KE ve @  AUv@ UJv@ UJv@ UJv@ Un?mQHүG MA g @OA {:6'mi~?:_b6U{i*bn!o-i͒Ƭo @ dUyԙN%h}/5լhvXW{TR5pYEhuŒ)Stl&O*n]W?\e{(;6u=:㳆*T}:[ŷy_5}TRս=@蠒[̕Na36Tf_0v=2XojwW})1[i}veuBaPPω:wE_H-%>lVFEczn|TYbea%w? woN'L'E$ 9=; {fȽa`kWf_0>و@ O*[|N>6 κwGKV0Iux\k\F LfT5OX ]J 5[-cKvm=sҝ )*oH(b(3Tufc;2:mU'z *fVAa :Mm'vĵV9,XY[-sMt(4'ki5WV96u$ "EDHd8wvW$9A 83_2C)oLךI(ؖ 1kr莡XoZ*x]ul3FE}㎄G2(eah7u7 :鉧x\OYR ҖVHAA%{~J n wK(ֈ|YǣUk֬"qtldjVj>SUX׮lSjκ0tEuK$3,e_\gW:4vD6shʕwjJ`%UO)'_9L]<}<#L< mg!񓁞>id JօϽ*24v[G59yGkoWeO+aHlr#1?*~pVOaknw_a&uenW8w5;ֵ[=C<|;5w4FLQ9; 8J7=k;_\뵓zϛ1F`xl\;SAcy"B(ی@Te9|/kTS[6 MD!O˓*PGORd]얻 #X{+ ޝ_wpnVH#<~3=>d*vPrx* )@ ?(dH-et, m#[?vNCPͫzohàŚ/*BjƖӺYo:.n?.Ա5g ~N6٠%mwF~29 B BL\N}Hg( /v(=L\K c2Ũ[Wy';5L[,YW"k~n>3u ŐɠHY[7RVl3U۷̍E&"Dz8t|O뻌c}\6TDzτLG^299V'%Ȅ#} ޖ$|Z޷h* rC '|MF"1,L`1mC'IW1l<֮̾Ԩ^ӣB^xaT;TB97&j8JĖg2:hI{*:(-*D*٣$]{IH-69Rv]N 9rLbX8K֞ŕY {W-}JK۽l]bd+$fԚڇ[=?%ߍVf_.mϱUEwKgld6 љ1_U"hQ~4V'=O" zMb(./ i3J٬OQjBj*9.DMVDzx^]gK)O_MQc}N} BO`wuwKj5Gid2!5ql.]Z|+[IYT*r@ ~nPclm8]m'ͮ٩]}݂i9Wm twuug;߈k*HbCk}p{Opf4lZJ{a}V]LߥTA/6żi%vX_ LPC|$ӍvBnkk鍲~I1ĮO8ea߾WMݣd;AGڨ9X;?+D4/"4hTJ@`9@ ?7$PUfB"z[ 5S^,E-ozt,+7mk.7ͷ~~\ׅT ~FZe@hvpj(&:݊u^{5zn_I3M[CT?@|912؍fXnиk> F5r@ 1EAc1V=@ *@ V *@ V *5 U{i*bn!o-i#K]+YF@ ?dyuŒP<{L2y NY7KfEsڼ7W() 8EPHbf3aGxRq躲p*#Dٱ5W#ՙw?X*EzTŨK}A Jo[˼Zn;HK|X}]ʴc975׼ q:i}veuBaPPω:wEPVFEczn|TYbea%w? woN^i:%?.$Ԗ&tIuf__6;E X2F@ ~ Pol@9YMcT5Oe| k(+ٜdqV:HLqȊ|k<5^]#qGB#k8eah7u7 :鉧x\OYR ҖVHh!WϵW~jMyolobYѪ CNU4etAzpy<,ю5kVLxTtld=E~*s}9&V+{6ڻn< gz0Aݒa> "kU?!)re~SZ|8<[RkXE3VݭeGt,r)ʥ~Yϭٛ nxw6!Q\q񩑿!/8EWbmVv>ڄ:I*Uɏ.ѷm%> IDAT?; 3z:&gFՔDlhC)G@_i}<ޛ+u3t XLwofwǿn}zYٮf!aTh<@0oHu޴წt\(R⻀JVǛ1FQFQexl\[vu/MoHE6͎rBk}:PNz#U DqJibHWQ1c*|Bt>9㌰5/aLG]9)x%L}h$L&M[Tܺo/KOL1oyv0vj=ƈ>ʕEV 8J]OEڬڟ nx"n/bCVusb)! |D/O㖥R:1[m@2!O-fR4GO,Hֵan1;]:ijVc[tq2u A>£2d*;IFi¸ᵗl<%!A2(^Uof osYLDo1eql wle -Lest_s-ŋ.O#K G`-SMI4##L+@`\@ @wtC up!d&.I|"'0VUkGv#)_rnM+WjF|2:>SzM yYmr U6pcŇei]Eg 8uKm]cjcco:^{ΰﮯI'n5s낝b?4FvҌIR ^6txW1l<֖CC9wF>Zb4xQ]oSٝ E@Li]*'.]}\ụK7;]ʑ&O£5۫%ȄSw&o*2ku+BԳ{d'pɁ@TVJ5C<Ùlǰ\S7c-xQU2~J0P$^rώ?3sDcM:3*~!D욑s/qkJ0(|S7#-CҊ2M9 hIbvszi1)B2W+]zt$}bD>o9ƋT%bsndN&K |!6x+-C4JnTd\嚄@ -]&}ޒ 5@%{ciJjU%y+g2* 3^-r e7N'JIyמ>|#R˱MK6;%ΒGqeVcD무<<^U yv/[X!ي@&Ij%uZ_Pskѕʬ ߥv9xha#n1bL3K{zPP]^AҪAg> 4vfFwuv \!׷*86VKRL,hشە¦x PM~*;^]4{7k]w1 ө׏hH7|0AkM ]ʻ\/}FXLdg֪ݘi4ܐJ hePX>⼘7mXUݙJdюqڻVhm {-Q/)Uu 5^J{4:LXz'qH5qgSfK2reU$͞J),G _ÎPBaW! }4%vgů,oy[ggA]i+_siiZ@ 6nL֝3CΜhLm=P""^ e][QΫ~#FPM+iټiǵ@|_kK_=ZrT#Z1BnF y,Jhܵd㋆|oŏk9kqZ߾:;;I)T#'hcL6 Q1A@ V *@ V *@ V *-m յZYBF5 U[k?^"T#<_Y8p}@ g|Ww2tطl:?BOre=^2ΤǼXΘf|Z^gO~NYfEsITR5pYEhNNyILP6/K@ Z!dִ 嶃XVqptU]mq*?$wZ_o;ី"F!g Ba|?E#~4=2vW5}ָ cOmkY*kQv,N%@O[ʏMk샵+-bXω:wE&T7K HA%{k_WeNd7cߨ>8gMjks5Q^΀ f^7$p~esn|vAgCVq0 {V|NIg#d'DVP1M=Tk:9eamYE^5x40Ѧ)]ǻs; d9YoS@(Y>7 Zn;Bcarj)Eֶ9g; G4ik\F y cxjN>'BwɴIYnP2 <~Da#(Ј+Ԕl䋚gn*[ˎ ki躃%,Kde|H uԓxDWaMYE^ EQ;~;Z]&dyif?,;@((no5r; 3z:&gFՔDlhCm^#t)UtZuKYOxj8`͚S$-5W͊Vm8T B>gڗob^oOo:С{foᰟO ޒWG^#?\Jr!v[;).;UE7A2cل[zxGqǧFR\EsU"*H$&_ҴCKn0n`|.KE÷)h!U ˵^XSWxwY%r ɉOr)P\w?㫔͛|c+ H=1D6?}%KdȚ mYD_O&aB!&YDg( /v)U]]Jr?o(>U)JMk)TSSMxv5ԭfn]SIqmcLxQ]oM;iYݙ`ٳ^H|ʂ~+vշqhKQ2n6Yeǂj/gQD5Q_L?/ڪK<#R(mA_#I{2X, ;Y=w2~8t\*:>pI\qKhlJ5C<Ùlzǰ\S7ϟE2PZ/ YrMLĮ9NxY)%}^.'I=ۨ]yϭ:]j7coNjjXuwDV&8PP_:9:J,RHA|#GnWǯ/ulIRBqkώgL IdAiط²wNj08n5{;z'. 9?Ttc"Hȶ;<[i]VqXϗSqHʻYZn>Y J.sŒWrfCU_e,:&)p=+Ӧ9';BW$s֤>pܚ/ ⏝J[:`ص>M!HfviZIJN$ǃrP\E{w׳BN>Lzxj#ݓ<~sJLJ6cn4pgQJIMLx_-ܰDG޸ } /xc΁WsNLJ<7oD쭎wbGz]F=yE&;-d좡?xI_ ە¦x PM6*˳c.S,1/Аnn!Za!SH$fi/6żiЕ=K셔1 .VMkG'tjcxz^$@hvm4ːM<ؓ8ndюqڻVhm {-Q/)xFPd[)g;o4{:S;s^82%vUUZ ͳՒ > 7?'2b'Xwti/ػY;uřޠT5 dktK_$QrKfr\\̎)wmLQ~K^vp눞FeQ[M) ?4*+i:gˮ+ģCfj~.Y°kofH(:m&ۋWG=1Eic5z->)WT|/;/~e~˛$?3Z ֟'} l]?¥d?UDksssEW8Y~ {)Zʢs!jKJrX[V5nY&RSSQ>lY3kzqz-lF/=1H[:`g/}34;s0q϶r/ZSƻD< eP"Z'2sn?m!21ܳof\Z7 RSr-7K}& s57?.?%%n1Ч&@Dk*Av:Sz413*imDOrmGߟj+SGk)rsեVf ? *cj(`sx n~9 rCld_W K|6biy|?/Ap_=~5s>Uo%l["9SKe[S._Pd׮2}X/fҗ @c@G1]xo+]fYw`3ᖾ_建 Už}ogӱZv$SOreވO)LzzYko[«zCU3S]sʒU4ޯD5+Z({񓨤lk3 D:9IZ/D\,1KSVUkd~UuA(ONm-ir_z@b TkJ ;_Bj -|+i{s:Yۉ6混N'QٱBaP-OQ눵+F7XWf_ꏝT^aLim-Keu c>*ӎ75;=|IǦcڕuc1De;"etK~\Zrx{zˏn+N^e=uͤ0}A9Oؚ0 rMoF APػfX+ Qesn|vAg FVq0 -7U4ޒbAg7=sɴI8];68STz ߐP itRUo<,WV96u$ pf8-|SUelós6? IDATԨF=_Ph`R?Mc?jlm*jHx9ӯ0:M&x\oM 8CE Zn;Bcarj)q"kL}|ϳ#fE5se/WHny,t=USS66{3l </cة mDJ9}GuW5? :Mm'vĵV9,XY[-sMt(4'ki5|GR5'3S+*.R:q܍ m~W!+te liLj#H`$q^y%.J Ck: |n 8do}+m{s8bsnVFIJd1F\_~d+$_!&QY#!+r_P4P E_A;~;Z]&dyif>,;@((no5Ⳋ0crfTMIĶ>$\dmsNӺW]>,ю5kVL?:|^5+ZdҐؼ_rMkW6m)wwMgx:tM#Rr~oIUӫs#.Wϭ[ȯkj՚:{Dk]3@,a-ɕ3]3Ov|[sv]} L鿟9闩:/1lmvt "\"u`tv9:&1RO[k=G%@Paf(0v5T/zcMݳ3 6eh]YY DF0n\m\=}wM6ڨ>l>4^sV:M&TZ[8O e03#B5a=PvK"%Q$KP_h}gW=ӂh6-GOŏG*oԂPE͹S]3,;w !/b$QXɩF_̑>X£e)$c!zOġ_O&PBP(iV!]w(x.ԭ廙b z/f0PA" Bч'RTl%cաFtEyUo g@X}~<7WeCu,;LotdzUCiaڢdɪYSjȍE6€rr1v:NQ5{#\):]vJ LxOԨ^ӣB^xa;T;97&n+L`8J<#y,OT|˭}Y]zhv#vMi$狸 hÚXU=;YퟕMuP(Wg)h=p@xc퉠(8S}?c 88- ,ʽb6é7K jC-zzKmdsIѯ|\nD/u͉ς:9u2W}~XN!GmbB(lxW`S#0+@^L!*oJ0m >7uI8x4Z&0mB:9FkC\ l&!'Fڋ{b3nȷFN}ćuP$;  $~}̉m%,l[WH䞳 ֆLYo{;I?c: .stD5[$hR*L%L6~cXqs'*>PZ/ YrMLĮ9<7rYY)fw8]E>P*HYE@1.Ur*"Mn LiI`kό]zIIm;^Z }5q_{+uc]-* X:jT=Wu+V~BN2!Hr |x]| ys܅iē:kkmH548HoPc֊Cҽ&Th( &fIʔf&۴A,10/[&}`ր{1Roc}oŖ]u>)+w9NփD.ˑz`ٴ9>H9W?3tbr^K|,Ukdr܊}ӚZ J̔;vCA8#`ZrDxkG'h - ]>ءO S $240d݈ζNuX( N` kXn19F߽Alo|wj${W|5nj vy2rz UaT7!wTuۘS˾1ӽI?VӀB͈hGB~kF_qn9ߥʺ7DsѾ_?U÷Ԋ6$/T_Z}7]hiָ#O|uL斚@D_d len/ϿQ8|ml ͧKi}7ZNتuzA[羖{ult \X@_w)}fdss/fʧyǺq&sdp9Bϼ9vԜ&Ϯ/רjXÎ~~lz7p8[3"Pn]׬K&I~^UNr(l$2lusG/W7&Wꮚz[u/U ̑HTSJ{66 Sq|;ͣshb†=(;Ɣ0S$.~?>9N}W%0lRWwDC_{?}:2ovc1)&ksb i)\<|/^][c@#I2d9Y1׮;,׉Ȳ@qjQp-fc Ak_D^gz>OcX&5G4&ٰȩ[&j !/^tЄnQؕ[Cc #A?ĘUc01(U( JvIcEfw\2k,]AO#PO;d7Df; Na}ۥe_qlugիWdVE1]Y |$b_ZEGtdĬ4*[\rrL[J#ͪ"RYJC4>q1v\5F*䱬1\]eD=R Ck Z_2pݎ*PDwYc]|zS_;N{͟ߺ/0&|Q6XMN^iț$8sfbģ#c+Y_־G60byjq^eC!؛՜s>8jxRïH&I?f o]59fn$Q"E\5F*e7DO$T~imM}6=UIC5%4ro Y򜌗AkndM 7co̞7vwtimb^u􈗊Wea~ۻ)p{߮\Mi>x:}٪G@&ymwmgZ6"SKyԘV|8|_~Ĭs_w1j6}!5ګij~ݬiZ!˿Փi,I"2X( T&]7Wk0 OЮ~I ؚ!#__w%E:4:q'c6PtjUYF-N#ΛvPF&]Wȸ`TXcr4#\-\8 Hp"W9b0@*W)i#-E}=29IފGH%LjqLs1ۻn)M狾IOQMʻR0%>p'5dOyzPDmSלHDf߻5-ůE߳[sf۩n7u4#:ۯ̕J,FdR,Qoiڿ덏ܶFc׭TOö}W;njlW~i5kB+t;;Ͻ2)ި'[ ^ǸDDrۉ'G;?g7Nw^Ӂu_zGd9¾ o jm> Js0,ݓM96A'@'H9Xmr.Y}aj|ՒUMr8&kJB J Ԫ_e9姪E@ R+'^'"qeu?I.rqi]m;:8qѯ9_¤k5/ٷtӪK{8ZQf.c7Ba '{ZL[\#oKarٮuML߬cZhgM]_+Mߘ }hi璴8;Hޕn4]kՎ闺l[,'r%w7wLx@=GZkzNtCp+ˌQ7Չ퐻5{qk=+cvlNDK6u Usl]_c"5 Rl.I{x㣤+BF  Pol矕 ,նΑj3 0!WK(W9qT;+kL*Jf,{jEOSmո8:l{O=8jJփZQߋ( q|UjcY&xy0){=GU)بrO(`{C}tUcs/|{!zqU}OӔzHX96e>o=\[5ɏ |WՍO3FڻΑS` >ֿQ=pG#T0W* e78]o pdˉi#˘_Yo|xÇզҐWtlجNf "KP.HfY28uY"zGKwf3 8vܸ_Ʒp5βכ i@}QMNvm{-YOc"=16Lf|.n܃Ƈ:瞟EPS`VˑSrLu{Wg@-E܌G8m3Ku4VMW7NSBT{un8҃ *@E\?3ߥ{s :]#yis.}d(+IHE:r8,;6;Ǚc?eX}P<9IC R[(/T->jGoOڤBb'7pB.gjT2U;}##4}󅢳H v %;Ttyo4xMo?*_uЪЏcrԠd Ev]PȧP+RflWr@ABP1JvhJJYk}WВJԪ%=tE}jPPCTDӥWAѱjw?%~Oy0c'*|K㸚SfH>]VK ˕ U!fOvb|C`P,T&VB`.HW4f_Tv/t (+| JvUJYJNDe:%;@yE|E54^Ld0</THT*$%;@E`Tm^AP1 ŒbǩtJvJpffn :t("ZY=*˽v/S(dq_.{~JJvPQ6E|w/8%;T2Yڵ{bGe %;KieҐϻLJNIͨ)]S(0dҤg_v/j\z׏ABexE<4&T:<Pt/4a;tPPѽT(B"^m2*P1i*ez|)@CLwP;d0h( Jvd0h( Jvd0h( Jvd0h( Jv ;#PCI;%3*L0h( Jvd0h( Jvd0h( !  w3>5syGPa`bLe0L bP6 ?!@e%X'fD,ݺq=~'&Q<y͟jϝ[l|֡ZG.t7QPKUN>Je<G[ˬivJpeh`;0'مor9ߢKgowմCZQ=eAteIZʓ7{gqb̽3^Ki9%tE@Km߀'pPgz72s=?=Xe"8x=X.ψ3{rm{!u~U.>̕/rof]'KǷIOg;ׅQqbƩ\C(p2pMf}0gf 2F94D 0$ŒkaQ8GG6PLj\'y`X 3Wz50t 9;kw9 2q;#^=mm.|$2EBDY)GE7(ڽi"8F-'ztfiShܻY*@1ji,ٗ>&+/l?}ٯgs[Vuþg﴾x8Թ_}]>cкoMݳ&-;ٝ=k4vջ\rYLJ){~g;'.scW$}83Q]ֳSm:hEي'> M;IyxrmQ6쾠Ef߳|Ա!g;TH眷Wri:OZd.&ƨN ̶wIMRS`(EDb9ӶZ$ǯO;]ňrqB&v3u @383@&;GMqjLcx kKw,ܒ_y:z5w]QM q "ZY·&<>x HZJ/,IyдsZ[Cp@8G&Ge9¾Dt$鴗dYȤQٙgo\=J;z4"2LI^k'Aj4M9BMG쳗;[y&&DwТfehK& ;HBE(mLcJnI;i։ rҧ?.O=kw>;IDRqaLro;_WVڻlvDSՍ ^h2״U-}Z= H.aND3i-I2re6Dq|'Ka;941D ̂ϋ|nT*I|Xo .j<#j؍%w V>x=N"Y0*@u{#ma?GȺ?!!*\.[Cܣ̔ODQ߸#7MDenokm{s_WfBnmPS}<*|*'"1ֆ8jNݬwC6Q˷surtWGGtoZm }C gyKpXI)e/w]G;665XaؑPKcB??OD5wP@Sj?JDN3^ X}'a((m & ZegXXV e(zӁ1 %;AC`P4 %;AC`P4 %;AC`P4 %;AC`\)HSwP␱ VTJ`P4M}C@"pQb@? |J&qf*c-J{d  ?B0(8PҌ[7$հ S\-34I՝Wޘ/:TeNv\-Ѫ T?>qiRjuF?6;}n;N1 / ?cva(+`\N:xc[Hjh78zÝNFy}7W~!ChUojQᔘH \4/HWᛤ<9| hP$PbZJ)+8X-m?==s|#3ѓc1[&23êoae;'׶{XW>(췿^+^Il\"m&.~}|k_[zs]'Vlz8u=-Qp+thdgXVs;Ğ8yqOqff>PHohSHԫa7 n\S(հÌҕuMEzH9V8F[1&FFZǢ.O)^u9; v?vvsjerGSSjm.|$2EBDY)GE7(ڽi["@MJ#FX!i\@e, }LD35V^~ "_ϝ˲3mYID *SyrGyvA~5uϚgwNOUnnsei?ǟ+FH̍ _xDywY.O}pae+nL+aD4y]/MM_sMr~y%?-_.M Wqm-›ʥ QLrקmBGP=_wʻ&M:g$"fqfLvFmǛ"G0&"$/2"뗘3Y%GF#5G$9o+P_EM<}Mq5L(-E0:?#29F(%#IlE$e@&Rl5SZ[m1Q>"osZ[CpڡCKu cgBچt=ST5T䰓L^,=!äћvDޔ#Ԕeؚ"dƚ۝3nȥ,Jβϰ=3':qxa[YN鯢{`ugx=H*Ν1\.m+2jj^{ͮZ2| M8Cy<e9Ӱ҉hF).6dЋ)oZHDA[5羳$C[?0uhjoӄY]><>ƝfWmJDyGDDB$9W'^ل̈hZ-/Q&D+O?MD,<~ѥ.ص•PiVH?!A 9 C-ɑj1[coZg+’McP恋::m+o$i)G׬v[uܹLq4$;cV3&y$K-y75&"˺쪉"(J_8~nψ&D4vtmuvlU^Ȥocc Pe=YoHcvߌMd^<|e(B#6IjNO[zoy'LzO80#~K+)^b`[F2*/(3%8&Gjhd\~GU{Sb+掰d*%%ᛮ=ƆU6:(p3_hrʰeY`1h ׁgO1f兙n-prO/9s]]*VޱO$ro4sɸ 5shpjtk>nokm{s_WfBnmP_17{bFhF.5~nT]uĽcJnSeI1mQ}_ACwq.Uticmh%H¶ϾsG#Ecoc[llC;ƀޘ 6T6eL;@Ņ/ wVk|)@I_OJvJe+,[vhPTE%j *%Pٔ`*x (w;!C;XS]Ǘ٪].:4+n?t%'%v|tCGXyc*G箚vh|Sv\4/HWᛤ.d IDAT|ҧ.]zoŌRZN ]Rdli7`ɟ%\='왞M\GO&O)l0<^}m~*3\Ca]mzxի '5sp׃b0΅N^*/aڿ&=E\Fʼn޿:gr{v{ci֕[h-nG:Kzؘ{lo֮~?fqsUm.O)^u7O$Uf7)jaƁGnNCL\ΈhqeͅDH(+w")GiRi6B Ş8yqOqff>P d_fNkADt;dMʲ3mYID *SyrGyvA~5uϚgwNOUnnsei?ǟ+FH ]Hp8ڰuЎG7O\}ډ4#R9$.>fڹD݃nBqT.x=ϯWn~ij[uI;Xm$Zcq._{gboO{(wl=$34nvDXrsǎp(k L2> ²d #ҔoJ<9"d_sMr~y\`:P=m-›ʥ QLrקmBHP=_wʻ&M:g$"fqfLvFmǛ"G0&"$/2"뗘3Y%GU##n5M(-E0ھ1x5mkBy3Zc5q'IsZ[CpJk̑Qn6BY/I:e+"Y@.c2i L7VېNXN޷3zȣ Fo {oXSu=B:?ѼHdW)aRu CYvVj=W':qxa[YN鯢{`ugx=H*Ν2\.m+2jj^{ͮZ2| M8C}<e9Ӱ҉hF3}gls@zQcʸvL"R@H*x {GY-B" r+Hwψ2.A|ǮHcXE|.IcFjl~7|cNo$"wLy.ԗ}DDt,9[yafDdlE&ES(bnrOX&9'%"y_W|׵7Iw ~OdS._dzGr2Q~-*Z(u ]V<_#5fAa=US Q;E=Gq~xndbzN0_X}/'OkHDB \Id7~9.T^#.Vmag2TԡժOg}8t8"w]5)- F.$䖠 gW633"Zr>s/K?MD5x&T@s&DQ0$: `1$Hy>{Zq;F`syk"r]`i䋭Ҙ+Q&D+`r:z4B}/_黉R$c6iBDc7N p[k'1F[:8L66f@#Z%83/> ÌmQh)^ʃ{l'o0|m2޽'\S tKHYS 2=i= /⨺H#_lN/d;bIdz P_3|5W"{ذ~Un|8:x+-TN"=,0@߳rLՖyWk89'CM|D|rhv]+ؿgt'7td\Uz485eEn7 6Ϳ9߯+3wB}W{d#M: ݏ.wR9>J]:pm_7y]moh" 2=i=ER/RJcwlB[mj1Ið#;wճ/P;1D1c ; NyMPDr*TL`Д.?({S=)fcʉG4C`P4Au& ( Jv2:N:( JviS|*d0h(ʃ̊ P4 %;@9Q Y1#gG\F0~P"i@3AM`01p 8d0h( Jvd0h( Jvd0h( a; %;#P?#rd0h( Jvd0h( Jv PE#0h""r>YsyG`01J83?ᏤGPTɥKn}߉ITa=A^Zs'?hz;[1_(uѹˬ#DzѪ T?>qiRjuF?6Єvo{Rj@b^~7QVRtoQR8p.ftF_`Miw}ރ_ dvś6Ҭ[ҕ% ('c&pӨ{.}^*+%)_HeԢ)42A. /ҕ}zp&i)O.;@+<1ފk"Ҷoӓ?KzO3=LDS,2ayVU} T,cg=ú@AaZWNzwek7h3qňG}%[ҤԳ¨8bWLc!nxoV7o;=']4C#;#Jx۩&A,{ {74sWB~CzD^u> |afpBQfx啭[h-nGtPp'l2nζcDAejW]F^.snNCL\Un jLUͅDH(+w"Q7M#ODIi 55{PVd_fNkADt;dɲ3mYID *SyrGyvA~5uϚgwNOUnnsei?ǟ+FH[̍ _xDywY.O}pae+nL+aD4y]/MM_sMr~yx\5׻bæY=KZ9j:tYL yF0AԔvB.&,vojG)x>sD%{P`T1UD=$9-ri:OZd.b&ƨN ̶wIMRS`(EDb9ӶZ2$ǯO;]ňrqB&v3u @383@&;GMqjLcx kKw,ܒDd#쑚#K/y&&DwТfeQf#| ё^"e 2F F)\JX;|(yj/ ǬsZ[CpjNk0t;Hv?;"6A,J%logbG &$ ?+|!DhK& GBEm1o͞f8,'}zW=~pv3D$~VT.{5n5n[fWID>U؏݅&H|MkJ]סs=ЊiD4Y LID~r2sEDiqǔi-$" rH. 8w?+ӹyL"R0fQSi#Ԭ.]%|#3UV!rz#'[A"퍥)XϺd/w_@%{_;KV^7uѷ1 "J'yM8civոڦDz@D$dL[y'^ل̈hZ-/Q&D+O?MD,<~arwVu4 nBDRӬ~C3AL孉uVƒɱ7uWjaf/UdoxͿ&6MrtjeO흾>XWd!Ddqķ1͋|%H\2eM]m9ˤ 1YdWM}/DTűv\xF4!oKdoce#r}zD&}`T-Z}GBflD&.C D2|I⌤Ws}w2 Nߢv{K;qfҫ_|[]:̔ODQ? [0 3g㤬w/ 75RTy>#LL8I!rCUWqMu䋭;’^PpM\ucêU{WLP9w;ijc}Ϟʽc 3ZW[__rѻ»6]ŷkUvc!ӿHiq..jTԔ} ,(T4:|̄> ]d'bFoXuČz>]-\lk ܨ>ڡ{&ݦF4 ;c~7ۢvHN,xc]\Dp׶xs}m }C g #3co#_llZ*$1 ڨc MP@J g  ^S!c@G[Tz`P41k׎}p β'AQW7oD (SwmA}]:8ڵo;tt;hʯ=;_NNN_~Sb\K~ܡ}2T^(wI v~`9g_+Nh헮^ڱh5cB$˓nn݃a"Bk<6bmū^^č TR(rwmH5|cK~{vk}Q:6j:# "g6q.jY긲0lqL0\. 3z>=9sus8@>()ڧDDIJ,˲ ,sj@-'8#N෺4,:}Q #4B!0Z46I>$6#?&_$r?}т);hs}U֨W6lnNv[Qii>|+;6܂i)G/=.SWqIJ7aa hn[f^;aGW:C;.c%Dr_k-˶|g #wyط4`Te7أcX"bO4uR1ְXm2 &HuYnܱP,0kX`*zLraa pc67`ΰ!e0kHv| q Z4<YhgSG-4d;3Z̲4C8eeg~dOwxrFMkh^X*utu9SKs(.I+Lylj;O(̝a>@bYMS!܏{&mQxsv.~X\Y3/!Yqk"ˬGG8s{Gedb+[Dz0gLR W^|rx`tGg?ث[>u[{֭9ze]z\[=⩾xC⮝#ˇlx/Rj+?z.<(g?ĻKQrxճVB@֪^Cn}#ԻPnIGvuBnH3I;w~gA}[sw NE>@cBܬFDt-;w]Z5Ƿ%.@cbXL ô=Fwǘ2|Qw:KXR$K*U=Փj[Q}ZQ$Mswr TũDd#ZRڅ.z9fLgϮ+w=8֊*JRxX!hcfOh4G ~"35iTŲ1HQ%E|dK_龶jcS7u,wS$"Xu(3l"Jv[rPx{9)uGWEܐ\ koAF-ܹe8[W4!>ÁYv0 _DDJ2-魩P{+W޺0okk_h(#FD/aY6OU@WOO~PtpDTZ]k/ OUfZ" ?D4IRV(5af%UFyqZ[%DR٬"*RRBe+1!wKp*t^ !k!e—y}ldD^P[XRpٸHf?;NJ.ؖqo͊"qVs;ܷm\ݑ<:s!~ IDATnJ32 Jffr\y=:q ehn͆3)bv#[󯝙iijoo;\c}z uq. P< ػR==;J`AJBdR]QM.gmm7j[ۺ ?͋8d09kO^"a\y=:q`0v07Lc,ERf );Y4uYFYvOhxo4! aa @uM];9eǜ \@βc6_%l~2q?!@KP쬺8eeg~dOwx np&bե砏WOp mMXr5Ҳso1RYk'ڷ|~۰akۤE'fK S #Jj*d9ŪYh|);.4~yed'&kMEGS߈,mk]N/.Sۺgg* sgԣքI;f|y#:mâ{&ޭ5mǶ]P)Ƅe51Odzs?EmM"}0B\Y3/!Yqk"ˬGG8s{Gedb+[Dz0gLR W^|rx`tGg?ث[>u[{֭9ze]z\[=⩾@⮝#ˇlx/Rj+?z.<(g?ĻKQr ^effyV&mkl@wu+@>7$Ý; !}ۿdxxVj $B{u#x̿?)l{yP 1Ofg+魬噅*"*+1,끬U:[i䉈^)nQ](7cä#:[zԣ/P+)kD4N7¾sѥ BS^||Z"j>Z[xrϓWv>CI)q_m(*ʙpw]-Ak{K =G!B+S($|0suGmvgLI͚J3w[` e">Eݚ"ZS,H/(9ZJD$ɼl}"-u3Vjuۦi-o `gk<4{:w ~42gVPnP oOkzb4fmILYFx,&Ge)H|5DΪ5ZDRfZ1RթK:F˻)Hpzt#^j[V'?棿ޫk)$Zxluo;ߕV=vN`dkT۽$nѺ}js܉hi\')/,AD iAϕ@N!3%yְq}e]Z{a_8=Qw!e??2""")ðUAEewgmh'u @;c"KkmG仕O)!VO_M~JND)U[3ՏWqNy;FИdxƓf3m_ݓ Lj]}.nQDz}'P?BSMh9'_*/*m);@B8@K,I5"of0RvsŞh;Ƴ#@ȉh&Ɠ1 #俴Q5 >T4/e 8eeg~dOwx򝩦<54[[Y,:)N  դ0(vF5WfY!p-\몢OG'jHls6`)XV]1hOvMך$YڞNGqY6puec[WLyLEa Sjb& ~3iĿo.7sXDhQ֛gtjfl{,amGPGX`]Ҭ5\e#f~޹2qh"zt=][u&xD^GMz+/{9<0T-q_=։CCm2.f.IT_P}];G^(V~x\xP3~RwǗ\g+魬噅*"*+1,끬U:gOle](7cä#:[zE3o5%'f ?T_ynL2W|T`1XUq׈hn}#K+vٸֵD}'.-?||kR<񛋳PT3;~Ѓ;[~5{BnW#$u$|0suGmvgLI͚J3w[zՌ D_a/X yߚbk.Dȹ{k" 7>ٗr"B.ؗ߾'._=OU</Xԯcd띂'CQ}ck.!W2ߊˉHǮC3o>Z/JD_ओym]| _gVo\{in.1fvBp!`e >_M^2-魩P{+W޺0okk_h(#FD/aY6OU@WOO~Ptp DTZ]k/ OU>0*:~SID !e˚^VhQREkl&E T6k:ujJ?Xٿ߿  [oU?8]Ќ edD^P[XRpٸHf?;NJ.ؖqo͊"qVs;ܷm\ݑ<:ߒ)FsUU/.lNjݦNw}:&,Ě."ؓa<񈳏UuɴͷtnTu es܉hi\')/,AD iAn֕ON!3%yְq}e]Z{a_8=Qw!e??2""")ðUAEeFwgmh'#۾'yA Eυ3Y" sQ1wQ+7?Y0cYf$ sQ*km.@C9l@Ũe<'n gʋ lX꺳Ql\*>"OJ]hQ-Uq _^u7ŭȾ?wh7Ģ1G~SUy7o'~c3mTiQ߆y/BQ4,ֳNY'VPtQ؁D]pVX),N/-ο0x;È#zł+_d;Z-j{ v?~x1E'bfqЗˊ$(YL0b gR|sFj7.jSc_;3Ӯpe<Sb7n ﷂ1f>=]VG|{]HM|L_Ãɞrz%0삠~%CBd2_w).YVר~XWó涶5mc℟sZ2ԧubSv=;1/8zn6auke.@9l61,U1L;" xa5LClQ e-!e0kx,a6qÛ`3x8R`)qT#i1Ԍޠq`a X );0!e.2!e0kHh0%ВX f );4 P);C-& e<4@`95p,kڲ );YcXm4sxdY\,.`hy$M7h6 @j  cdEv0{H! hPH401a-;XZ"j5@yC=4GIP-.`hI0La< "xfR┕wڃR=\Yv554zbե砏WOp5x`& aDɷ3B\B,X5 kAx̍FXזHf-wtv|ߚ]B`Zhs,.4~yed'&kMEGS߈,mk] OԸ:2屭}<}0wPsMe51Odzs?EmiܰWרJ-'qe;89B [!h Xʚy م/͊[1^fm8:bƑg;*/#[zO&Gӵ9[g2H.x/j⻗;:I^]ڳn884[,kOU%w9 ^>Lf{IT[sA8I%_ZsgǰV] xt֘]6ޅr3 ho=Lj=@}[Y?%?r61>(UwwF2申Sa<:ԋj:RvH9t GDV2qMykhm=O^]Z~%x~Ǖ?f7g<+gw9ܡwtu--j'L ݮGHLm91k\ѬAptRҌ]ei'F5#eEėi>֫cp(,{Bo<rڟ̓onȀ t˄Moё_]"8-zY"-<İuX1+_yTĎU+E?ԡ|_S=U$! w IDAT}Z_U3a8lCKYJE/njuZQEB*/wX+$m 0qoQd&"X6I4DOr̻<׶Vp TbuRw ^dpEq揭\S\N~+VnP o/'"ϼEeH Ru+K؏/H~te[{*}=DZ 4K\c1CYv` knU]oIoMr؃\օI~][EC0"RV.Q ˲}e>~zbrЦ%D·[ '҂Z~tNxQԁXMcJ"N$)+^TB3tՇ*S C۲;ѵR 6<;2ϭekKD˯>#۾'yA Eυ3Y" sQG3wQ+7?֕4k"^FCNsR͈qJm SVoU?3mDuv#1Q#2V0rKo- 0u\]VL8xC !:\d" `>sk5x`>i9Al8-6k7UqQ;ڙv&,0+q+ox|p1kO* =0CSBjdbJG{՞md#|Ü&2'_I:۫(狼'-("M4zkwm)ilMϿe-b U"udG[acBT1webaCYvX);r_# e>l`! `: X94@0` Fo)7]mF5X,w]FRv@LCA/@!e7 e0kHqY\E );YC`֐@%Ks(.kf“Lylj;O(̝a>@bYMS!܏{&mQxqvδ_ވN۰^ eAnGߜZX`]Ҭ5\e#f~޹2qh"zt=][u&xD^GMz+/{9<0T-q_=։CCm2.f.IT_[}qΑBd6}d)J^=Tei9Ole](7cä#:[ztљi "9[ȶM[)mΙ$Ý; myM7Oww -m0Rv˰*͟MqDti.#הߺZݥ减ozPRgw\c6~sqWʳro?zp~GaP¯fxQȴzԶa1k\ѬAptRҌ]ei'F5#eEėi>֫cp(S,{Bo:<rڟ̓onȀ \LCDg[^[kwl*v2/C\>ޜy\yM7Ow R Jjk{dMV敯<^O&Ī"XPQ꩞TۯIl\*fD$r7Uq*وv!-^R]"RT>^48/VHژƓa$Q=ߢ koMDCl #hGhkfVG6OkyhFv ~4j{!ǖH%k_s jeT(=ȕ+o]7ݵX4 #"uiꗉO۰,'X*+'f?(mYBDA|uRx"*-Ȯ5NWk넧*S4ԁXMcJ"N$)+^TB3tՇ*o㗫;G]⒴MI5cFGz쟄@jXnSa'}ʾI EMc]~"Ekq(}KDTp% 2ԝ`5V ֗ HH,Cw"ZWI wQ9ABZteN(!zLI5l\_Yw{NDOGCmhϏH0FUPQȠQ"%Wm_ݓ Ox™|ɉ(^SʻGKwD$:r? Nݪ}j# &py^23+@`^Z6ͣ漟p~>;{5+bȹD$ŚeR-[[|3Xњ;sf~3N,J{mXh=?*TܜO"j=,{n Ew1enALeg2[ 38r{v7QVˊED]CfΒ9JKo}07rLdM2VC`͆3)bv#[󯝙iWmb2 )[W|.B]ܣ >=eG.&~>H&cdO9{vAP!!2c,kTq?,|ӫYs[ۍֶ1qm?-DzZ{:W);ضA6i.G:xުڏoN=~!B.:}7 |Nr߸ſLMw)W;OH yn05X;;eÎ1`̲5f );YC`)j=, 4uP3l(dX`֐5f );YC`֐5l );YC(XP?HRvƂvf );@#D;RvqaaYcC&] C@0IS59.Ђaa @ f );X7-z&OY@l ;@shhgSG`0x2束0J<┕wڃR=\Yv%45%zbե砏WOp5x`& aDɷ3B\B,X5 kAx̍FXWWgm:}MW=.ߥ/0Lԣ!efUG 22]#ɩoD}Q\֮9 \u>w>SQ;T}9&IJB2Lڢ6r]̩_~5lW'b^~Ρ0lMl 0+k%d4+nM W{Gwnl\le=5]Ol0"CQ^ʋ^'{vyw\קnkϺuP0G[o̷KKRG<՗%p_ܵsP{0%YRmWυE?'xw|)jYZϵzZY"òZuѫcp(ѭ[cv`z7p0_^5]ϝ~~gݯXb_Ƿ o{u#x̿?)l{yP<8@dsw$;P'._=OU</Xԯcd띂'CQ}ck.!W2ߊˉHǮC3o>Z/FBQb3 |H5D?H4ehYښkoAVUxkQ_s:̲@[s3게}Kzk*sʕ.LW,ʈrEħmX ,ks6,!v>j|<dKuSDj*TѼvG@$qHY񲦢h׼>tT%xqZ[%DR٬"*Rk-%"oȊX`>(*;{5+bȹD$ŚeR-_Anbq+;gGk"D;(eL_jUɻ2L 'i/)UFl~nam$u Piss> SVoU?3mDu1Q#2V0rKo- 0B.9MSnJy侃'xuK<(-ɿIP20r{UF x efl8-6k7UqQ;ڙv&,0+q+ox|p1kO* =0CSBjdbJG{՞md#|K&2'_I:۫(狼'-(1 AC;;(bV5D"yu;N|zx[!WWurF1;LObC0`֐5IS ò@0`)4 741d`a 4X h1f );YC`֐5f );YC`֐5f );YC`֐5f );YC`e:1LSG i5!=Z `a EaYZA`֐XL0X\ kiHDSG &0 Q1nMSt,;@ŪSV&nqkJI{gqgyۉ+TԔUfu+RGW>^=Id0Z4%q wb,+$17~a][6f 6ؘ7@M!.4~yed'&kMEGS߈,mk]d9:2屭}<}0wPsMe51Odzs?Em]қ {u^B56xX<]Y3/!Yqk"ˬGG8s{Gedb+[Dz0gLR W^|rx`tGg?ث[>u[{֭9ze]z\[=⩾ʇvj/&$KQg/E-KVV[Y3 UDTVcXY.zu J #ԻPnIGvuK/BP$&x>P&IHyn/k!ehV]#s;.ed[Qkc{MJJ +o.jCQy_WsC:l^_[ZO> ]QڶO07&yMベ_<8hW=cNj\Tݢ5<~փըfD\ 2 ;xzu veO[#w'B_v_y\y;tZ%$TΘMENe?h1h'%"kAF6.ώ!S e\[Hu#"oFl[|/Ww$$軎;f-9j4nj XU2?yNMJ+;'u;35MwY]@L`ڦVyNDK{Z 46z%d0V QyF/k RvŨe<'n gʋ lX꺳Ql\*>"OJ]hQ-Uq _^u7ŭȾ?wh7Ģ1G~SUy7o'~c3mTiQ߆y/BQ4,ֳNY'.48szl^y&d%.dJm%m^QfXv7ҼDC nRnpȮ4\hCb.P:{6ڿs{:s?C1X2-H$~y ̈i6ݪΉTWR=QlItٺ߿ 鎢htf̏5#M ;EilzqcMӃyeQv͵gWJ=kb/,>Sz]&7YjT ?,DMɷ܍ū/PzfU?9sݢMgU\r=sg-4j?%g-u#G1<]Q4#w}58-9{_m\9lł_j)k.u;֭͟SWΗω{LgX34c [91g5LI]dXl[vO [dn7c df 01'@DvA h";Md4&@DvA h";MdECCC] Q4mLfd?IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/FunctionalDistribution.png000066400000000000000000000153331307543307100307450ustar00rootroot00000000000000PNG  IHDR*kTIDATxw\SW7[b]:@ hAҖDѺ']XWE붮*Be(Sf $y1$\"+=$g\=R2 @ k@ !@ :"jBU|)J첎 \(52uJѵ u32핯f\ORzUVsM8;;ݻ[M§a:"D޽}?D7lES= {T9?4n>]5oUm)7t .O5]"*-Zէ_&bx|mZ;xOɩ53Wz -w'F?8 74tiѿ3Ÿj.L:;jY1;$uan[.$NR$z8~zmնl^%qTwѴ=WNl}0(:*fW\5QO: vtT¢#2 /d?GD8'Z{铔T;}3+_p @ʓoi+T(ԻzA\7^+7% n t.¨0ת8aݏ>:8RtLՕQ.av61*JrY\o@">r>H1~Uf pҟ׿93NvjGq:ٹRV";k%Ԝ鏪/Y\c2i 5E>[7e_~2W0(1|俽;;~lV/DJ J ' /i1s&+'-}vך9f2ّT Z@=>N_w%lmZWZQݑJĔf'0w\I22{חd<mG~vZ1 OWrۓOU6FսJ UGu:cp2̸Yy߼k%:("*sm敎FUC>=>/SXJ^=KXG^Vdҋ^ì2?|ͦ۳Nx4ݙ4j!7IQc4 8eV]12wZ^'o[jխ%!.VJs{l`V-QA Z|@ӑ)ӛX*^MF*91j#mbzV^`Q7tOR!Z Taڋb7벤QΫl$6dCoˏ:s ֶq1[U8[}KS0/ZV*O7u%3KSwj<ʇ!QP*}gˇW۴SE9\? 7I ݔ޲!6IeJ ڣ:i[W?WM4xd)#oIbƅUYу+]"y}rG2Hk\/ߚ`ٷ#7W@b!ɤS^du-5jLvėUSp)jgQŞONIQ"2 ۫ܶvn/WH-ڷeFO*`vBU@R$z܀CNk?j¡ !cٮ_~Q6020r@W1b]iŒR5v|]yqvv(> HFt;64o`9"tL1P'6=Ze\zݡ~866M[|voQ@7jx>o{ l7˼ﳛa~ Gw5uLҐE.5̾mxn:%{N% (kHwc_+Υrtx5R4EZ[nhrs+]~Hm%U!skrn C#[^}[jf'TO: X,7}/e{{hiݜxl5]l&tad5jO׺[ЕWk{eѵ::~5"FQBߗ)@u@w C5QEjP<\vS^9Ʉ+ulg*j;k?$d;NYR ay )!mٰ7K56vg:7kCFNܽ(.tЩ(Nl bM2r8e}qy/ks1Rhi>C=cw:^#ㆁٯՏIՕDM$A%﬩9$ ײΜA".+ucʒ$S%mwD.>sFtv [qG`[T?8 MB2|钌,Z,]:vNdS qy>7i:QI*^8Sb ML(Tlg{̡KR$9z KoFYvnxZ]ILfgr67 -z~v>( LG2ǥ/$6.:qlvv$i0jZOQŸދ,v(LEG\%̰/fl3r†:F%5/G}݃,Mq6lץJaW 'K~5Bovгuc^r+GnAqiC9);@ˑ L"~=KN5w~ۇgz9axW"6 uc񝢢S7~,1n<@dh鿸ϙQpnRe [%E3i@}LZ,|ϊng%%=}s^Y?  )v ~k'8YiFdR_#_ޙ%;rh%|y뻼f}lZTRlzTAq\o^{yv1Dp|~F&wU;ݹif\8@a8LSow7iG'_(X(ӑ&g~~mLλ-Sg$Tgw\кÅ殞2W#mU @K&s3p(d> I+Gaڟm2xd{=NN8|[׶ XxaW  5cl3}˝ &9Z3hv+&МÒEƜWdG O@8s>jۑq\APT"%S[j6FFnNFcdm7wGI gwq5PK;qjl~Z]I=r?<ĮK _{kmngWTXBˉ ZŒ+= em)x]ш8ɝ\1o]TxI 6[F*\mỏ_t9f;ݺ[/׀alj;gRѥj޷L+D׾9`+EI:ȸ ;: ?>x]W@}O3m}̂s/I% \ 8Zks @~)l%RAfТ REf׿bTa&u՛+g\6[f(yW8тO4ސ>OysMļ>Rn疛_]4?d;HG`ġ<נX _.J9?IĘ_^+UBТk(,/,.H%޷v-[5 ??3o gb~ Ko9 )MʥlNbAɲl"`)c(*W2!ՊʒUJg"RZog%E_E/8v.w({$N90K~>L~Ko V\]w32͜g^ Cm4m}8/ f og_.fx؁˘hy+@Աy&O# 4Qe飫1a-ccދ$E/^X<Z+0#3PZIj\|sws  *t-eqrbo2hYdzRéo7OܥLedxR(PQP"IՕTeJғL|}AfҽKzw־RϮj6oWW@ T:;;kLNEԲ:%$wGB,ɔ_w~'w ڡs7S=-(R#vءjMP@U%Zn3#ߎ;aHaVxyL ?2!Չ򜣼ՄG @ #Mqi8mZ NȮ1BmC#A57~ᔜ"(+aipS^\"kؚ֓@ (d:B tNٱs Ӧ˄{YڣsAA D @Ð4hjN@Ҡu@ !;k¿jnc@F:|@ C kBU.#PE(@@5O,e%cfzIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Kernel.png000066400000000000000000003643721307543307100254750ustar00rootroot00000000000000PNG  IHDR;p'< IDATxw\^,Q"E *VLk{ņb޻Ƃ~REE@E~c.pא?{̭8.O(R5Uvu~W*zeP1A|x@¯ʄT@ (**.**x+WDD}Qej T JEzhn145=4&11ޙeKX[,;N55= ٖPVȲe{+bj .?H*<@ x77 ;ўD}ҥ{MӠ)s[GDy#,#Gޠ@MM:uo7tFDWn=N[3gnysK.%Ъ\>;Y[8;eaaz9뷨kF*2U3u悂B>NZx<]]mqݨD"ښښ99y,Cpqf[5޽ȾvvR"9wcկ_Դ& Ç\]];/FQ@@ÈmΥjҤ~:aak!NNwᄄc?0_,D4oΰZj|MmKzlu6vnތq&f={qrJK{syv(UAB_/]~ϞmXMڸdjjտm4 8th7""XҼ{0Yץ>YY&ԩ~; G9+44NKK~iiL"jV[?Sd NٳMDNnMF5#Sd,*ӗn= Ν[4k֘ۮ^j/6 /xzzzvު-"׷o>})ZW3+nظ}33߽}ӧ<;;ă11{=;MOO͛~Z/={>܉as.[6իO}ĉ}Ƌ q^8uu~=|xC#"zhx"Uю;tp37o׬9Ȣ266'wRM,--[0Zkv??2_|6{uBU+Ϗ%%\XXT[5իSn-Y-**:Uˀms7oOA*0XǢBʚS:`,.\X#y +S]]Ѳ-N={!ovKz66Llذ.ξ?p MڹΝDOz֭fĶkjj>7"v8uYn7Eɯʌ^OD:4;xjRR9+W>Yƿ>F1o֬_, sVDړkG}CCaaѱcAQzDX[cnWy?2?Y cQ!>997l8^ Mt" S܄[vZ8{NDm'/_(**MreO͢Ҙ:uv>gaaz%&,7o'Ǜ4ovii3gQMDc\ъ-P(bĚwZ.^]vߗ/>ziӆׯG.mQD[`q=l}CmmM.Ϲz5˫362gݢ ~477!"Px##}>_X"/NDfƿDDmo4fʶAVlDdggQ7Sl/%e3{A.ξ,,Ld'p)m>۵o"T |?=y Yv/UE![YonSBe=s=Q kd,*Y=친] ѯ_G֏ye߽wPhoߨ-D|{{o55>[#nh|Y$cMD}9P}K`Р˗ )115+ . i߾Y~~aTTҋow.gڳrXX|v[LyDhǏӏ d;;;7)]hŖOD<}fg1WOO{25cuDz AlˇRId,yÇO 9<<\c"v٪m@@hNN2[i_] {^633^bOA+Uͮ]lں@ WN߾/\Xs2mmM=ZvVpsBD6M3gU}MM 555+}elH|| ::8^ç#{iQN-Ν[վ}DD$4mjb(W.Q,cd?ujCCx6m kk].l΁7Wf r*mъ-aÈhaff25#7,(Qԩm GZY_`XxzO?u3gp͚5RR^%'ϙ3R*k &"SӚ/ԩcHD+W߱OA*px}J߯$[ܹ;41{/nBxTT Ԍ[R\ P߽{6Մ1}g`ЋQcP*HWW(a=j:+ U :,<ʎZ0P]X@u!cՅT2P]X@u!cՅ'H([ PyI$ @u!cV 12|ieGLgMM(rɏJ X$6leJoߺLjNCKf#1b >zx_mHH1k^m`׷oMN]Z%V,zӦ k͛3ZY 8r}J)kXn=ӭLi kڶƜǃx~Myy- O`կ_ԩEl˓'/23ߵnm'SEE2ퟓO˦Ohɶt|M (k=,w!Dmvn~n݄w߼i̘|o,=Y?_ט}Wn$$jU2cӾ~}ĉ}ڴkgP( #sRWpJ(?44'-S>ZZ]۷ĶjjzXk\¶Zu[k_wVxС+ﯧcҤ\T+W/((={"3ݓ'/hr+A2瞐;mi~\E ;##kx_3ݖg~!;;--kjz>} ۾eVڦX;/f^lmli3qb)^JH+5f,R  3nތ&"" :t=r$gaajllDDZ-,,r叇ԫWGrr¢-}q߾ylwysn>Z/N>4"޿ٴ^::Z\`zzDȭzy-VHQCI3@ Jb ҇kAAo''Kh g&D] =ڱcLJ]lkۀE[3.6v߽{[MMkmpk"z*811t,DkTݍ!44N[[}_2eiZaԨkk˫ȑhr3ƍur:p`>#5kXZwQ. |>ĉe: Ǐ/533&.]\/7{om~ǃ hlYYH4_Xn-OOײ."INNV}SK)۷ok,VȒ%~~nzиq=alldnnTWW Xjgnn 9Ӌ0774on3 555""j2hذ.݅ w[kiY}{GOO׾};/Yn%j$Z2 N9K޿Lpssu˯!!!qNNVe6ц 'ݱtY{H5t }O {Qjjիa빎>WZxxhб#Q||JZ={aťQڵpWצjwc55e=kiiܼIED$܈HfRb62/5ZhBDvXjje{\ MOԫWGSSgֶA|7] Zڹsk|/Yn%jZ2!C-f5?BڵG{hmllTXXArٖcgX#22E&|>rsk"JO}#zRRT윦MrsOb>l6t[X@D>8ʕ7{m֬FFFօ wY!Dl} 4j6Prwd,bKubbp??öp}}D\!1>>GM (ݺܴطʭǻ{!edd 2-5Mj2>|UppljjfXXUm $FvFF&mqJʫԬYC(ӧ/[c.+D!CV̟}8}m-^쭯`R2A"X]جٳW wRp홙!F--U׹pai]PS㇆ng Q 7 Ė@ 1M|h8..(990 $Whժ_-7}[wB! F ][1Q[AMr[Pʕ?޿quzܹ;k%][Θջ܆ ~y5Dz#[y3_EM9'&xR2 ʎAx<Uv_?kvfYmmbAZ۰abeUS Py0Rthmm~h -\vmkWvPJ1 RaT2P]X@u!cՅT2ԴOȑ@{{##GVJCVևYTUiڹV ZBƢ M;fÇiqӦSj„ Rf^fDznߎ4ms%_CͰݻ/*޼ɞ1c`MM]#/ڵb,GO_Nvnw}m}b* JJީTэAAQJx i}cٺ̙3~dSTTV)klݗ,f[:mږ3xR6m&Nkccs8 ,0p}Ͳ><{9kֶ,`6n\Or͚5f{q?_JK;Qn-۷٭Z366;wǏ=zÈhРeE'O.(v& U+IY|0__UB%^yyYY޾=϶::/|E5rJT_KAAѧOy왝o55=LMLmOK{ԴV'FE%f. [;~/u˖ӭZյMPC~~NJva`k%lٳ%Wwͭ[~I6|FFff55=ϝrٳq[lm-23=yBAr~{\lmt̙ ]O"Yy䅛[3rӕsRtqm`kյСA~~F#MN{kjzpv嶌;w^HMͼre-c˖6'?@ 048pɠA]΢uk=z+*e1Eիlilͥ+ҷ]߸͊ 4(טH)+Cv{cǏ=ֶ%'j5ʕ?>S^=~#ͭbbp%|(knnϸ}m559`b¢-}q߾ylsFG?.**>v5c_<}b?ӬgVVYqq pqrr:i3tt*iQf滲ZzRoMQo|}'nTWWԩEUYYZ\aaյ)daa*N^f̓'GwMԴ䖑ɫWYʼn%'|ABaPeV;}ukMx55I*e{߾MMk,!ṏϑgDD$^Bҷu͙}طB_ Æu#R+;5efuuonnDD:9Y80׬ci9޽G]87onm9vxNN޼y;.^!2s{ann2iRnfjjjDD$'984""}}cc#ssrP?vl v܂޾͖)۷ok,V%~~nzиqǃ h#de} "FT~~aݺ<=]K}l 5EQD%~DT\,(.Loݺ_j+WBZv]+셄ɘ1]pUڷwt۷#?22Q p}zɁYy^_~D--ҍO* 32ҷbnǯ9g$'^BҷsU׬و+[p?ms _KƲaÉiDx셛í[~%|wе'謧f^bP{ysqN IDAT3s ||hMԗ;pٲWf իAD nnĄ'hѤ#":tpdA"K!&M >3AłsZڵpWצjuc559ZZZ7on(ڶ/1..%vѲo(Ķicg\"*((p…vm:Oi߻e-#9[co܈v-ki-]%q;K4K,aaDԾ}31M_ҐXkb@lӧ߻D^YrՈֶ.5wٳms8_K2dzZ_a?22Xжmٚ--I<ѱ1=&Ik=th!${u|.64hCD ;;%""Evm`hgiY0GE% 󯲨JHHxޮC/k砫]z HCvRpbbUn kѢL˝CB&ͧΝ*FtӧY|߆ L/e\]6={i~6x악iDDf~;KOe}U4$$n.DԲ͟}v̖-S BCj6`,jÇOϜ΍Dc166Vuׯo U\, OKlg]sٯBpڣ=zf_ٚתedΜMvJHz={6kXKK###…ld1u$DggkWV7b(77fM}-/^7bDOM+? TtgƌYگ_GqHJYYLLHb1כ2P޽FRy-#"--ڵ (::Ɋ{Kr`%v%ggPJ޲-liś-m p'и-mhgU#]gsٲ+Vg$KZ2Yk`d?ixADԶ}:sLJJ~>GM (uiIo984ݻO߲m۹ŋ]aaQr/߲e+6mpЮs#QQI>=wLU>wvԫWG( xwVlhh<ΒcF^1~ʔ~::ZܓvA"ޕ+йsw֨KD:.y8޻kjjmΝ#{L׮-g{nÆ^?뷅5n  FD$X\,.+xkiiixxLo~=xlcybM|s.~~Sʚ(~j9u޽s,m9g_:uzի\D%~e=nx&NdWB}zA&M_o 铄Iֶ7oF뷨iӟ==<9}zܹCػ˖y3^~:MX%kβe#hWg_O"&OK* 31-ᤧNO]B2yݭLg&۷ "%Kl9A ?kvfYmmbAZ۰abeP J1CGkkGh]k];X c,J1P]X@u!cՅT2P]X@u!cUMPUʣ^T+p**0EJVia Rg'}A_Q[Rc+.*)ڨUnjB>|}͊)(ŖnL92PVK'0r?Wي$BKV؊. + ,hFE;#($ &w+/XE_U3*Tm<d, H,R"eu;KE`%SVƒt+E2^yL4RnTnOF'{,RF%\M+U2)[`RtR%=J+'ap- :QH\/S/ !cQE:PvٕQV0 iKӉ]#4'SVz !7JCl).m(Z_ T)X>Pc TÔQcPd⒖/&ih N$!%U<)k+EFfT*d,i䞔|ſVz3tE\I>D)ג8 4t BƢ0D0^lR}5;4H"M[ɑ(>VMldMD)B)TAX`Ϙ*쁒$nICť vY$wQbK&y?A3ҤjRHQW ]EoS6Vb{w;smJ1wvjZ%aLDˑry* 2ȱDXt.24949rgUV΋'D7BV-bVtE\E)g~g%HSȗ 0+b{bWEYƗU Qbդ90RdWl,~.)A0_q? .@^X*ؗLZd"؉H \ r|QҟH)20+:=LGZVxrNTIi=xc1k1/MQ)ϫA;˗ۂ@U1/k[xWXgY|H8VdCcn^*c,_VE'-Ҕ 1($u"GQ*X3 (Pa˒AU|9`LrNō(%KW|5|q8i;]\T1=rl"G"QA3ʸ_1d,AEVEK}eiI>JqYΒ).bW @yTr{,Q,9)s&*r?ȴNF`8d,*LE)=*$*,E4) ^aU [KW(=P@(`WHHRRJ#zR 87L5\I@2>#LUr2 cQ ӒJIZH?z Nr#9WiIQ-ʀEe:{ixe=0^CۚIRZR^H^e*LR.nRO/!QYbrQ R 1#a (%]!/+:OaHQ* 2#93$:uY "WR.Y.YaJ]_{n"LOS/<P2Ebl Y#e-\b`V 0="IY_p$(6}*K@5`E5:Qy|#Jy#XֱT2R M{FHCY nPe!c"pRn[ɚ8w(\6d,ULI)^2MI)r?^̋jTSXy_u|^L qi~qkܣ'iJ'T}X@ ܛ ]% Y ҟU fU}YZ5W)\d\_1T}"G1($d/W=  2*LO/GRb[4R.DK9$,z-\4E)+ Z!cXn ԯD3?/}"a,e*BR&-ǒt9w*5DRbD,<d@1%i bo,D%g$^z ˬ+1"yIn\ :HYaaebzKO cFD O_)Hyd)PT/n.\zI~n=u,Վ47bd␱TGץȔ 3{Z]I?kTֱT_,d,՚h҂ d,_*Pea=.d,B  .d,B  .d,B  .d,B  .d,B  .d,B  .d,BK(ǫ*PXTmy!c$ ^T6m91+ T2&?}<{˖c*|e>N,QLM!y,oUT<< T>Ysuq45= ,88ۡNy_SS=55ȑcǂ6o?Vv' r^ *U(NK{m+W֚$eɚ ]PbΞ0 e޹7.$uu5#e T ǯgʄ }ܼԴ@ OYAmer iT``v޵ *RyKb[롣q1.Ք|ڒb  Z$lp>ܻu)SZu|G+9Iw%KyɕnUWxYFteҤ.EE%)R}P:d,Py}-"i$="Qq`ϞKDuS-- Gp.+j>OyD4oAb{Fso#F uttumϫW/ZlL̓3xTyݺ-X[Yݻ?}sskwmML܉8pɥKFkoߨtS'ׯߟ:uuTV00kĉ9QPPTxxB23}۷cMznkc 22&6HUV qq)ÇxB0:qϞ}˨Q>qFFuz yƌÇݧKEn|>uk5{ ";wGlקf֭[l"LڼT͌J]ȥJWP+]{E"ZtĦMUwJ>(2SkuňCGѣgҔcffZVHO ޺w횯"z6;,, uj]/_Zn=ND sgKPYsb ї/OϟWܼ),lڵh\~W>F{;84řo?¾{!H3x޽۲ב%}ٳgΙ3+oʺ0vwD$6HռSh~<pݺc;$̳g6n(ֱWI 8+񖍍94j ے1##ͫ4o͚5BBX޵|q>x́jnn2|xw"xeM?}+?}Rtcz벫.>ڲv:uqFt\\wB?wiFJ7}#Y[32ҷ1wwo1mڀrm<..t$XEMODÇwKDtޣ-mne5-vbGǑ/_%st,901)"gdHu%tɕ ٳ]4<ȿ;EJ|>_ ܹ#a7?϶jBYa/޿133&w>wu6{:|D$yuwؤf°茉yhh?'->LzDKS8Ze9ѣY |Ԧ]ڒyy쇻)BvvK [h?+zTbb{(883D.ߕ)U'Nyd{hΜ!em6ﱤ;/uJѲod֬AW 53`mm[;׮ZXNo{\ mojZsЮehcӀhr }XI ̞=88رyyT_ FD#F\pKՌ4ȱ,k文/*ƛ7 ԴU}޾!)+H)jo?Ҳ^RRP(Pu288611e˱B/ ֝4M'/^ר MM4"ܪmݒZZyyWh?MLj^n1ӧoi΁[SX݉"w%smU!C֬Yodw<̙]8+mi V1LLjn_zP(_W;w(a,:wl8e=uu5MMukk3n(崨U~9tha͈(**I]]Cu=m[g^={+))cgPÇw74KK{С:3||80_w&&5WlW嵄m<6RJل IDATD.Ǖ)U{rzuǏOHb)kœc:5T%<U#aPeweo5z'uu+;Moߎqq +g-|9eRW2AV32/ʿ>}[P zijz4hYpp,C:xb{Hy~ZIMd[bb-*V7O .]i{e5#IGY.]ov*ŵ菓ӨʊGqݪX*^Tj^Y:Mc ꩩG;yd REBl-W`z@XĕB(NK{m+Wֲ*7N\_*ռՆ[W{eSk*"O!UQ&+o{)ǯgʄ }Vm`? XUɛ޾aZIv_ƌYKDӽ{{W [IDYipw:ۆ X[msYYߴiucXg%"5zp.+j>OyD4oA}֓~1bMHHkğ^r~bcb̘ǣ:u ͹'Shʌ}S[kkbbtNK.] 5Z{F˟:?~ԩÇGD.^6v'N,m΁J얙ݾcnnһw[l7AmbK>|5 я{ZK>/g-F׭[3Jt.|"֭كhƏ_Yn(22iS7366*QwE"J+]A9oºxR$Q|| mh΁GISkZ5"=@xߵk찰3||uj]/_Zn=ND sgKPYsb ї/OϟWܼ),lڵh\~WF{;84řo?¾{!q y<^m>y-qٳgΙ3+oʺ0vwD$6H=}ۏ[wLt$yƍ'5%ؓ'GFID] vbMBKZY ~,6._>!/siGڽ{/sgWwE"J+r\ ⸤ swwrwwEBX-sEn%+cFF,[|2iRߚ5kgık}˗/|܄ͮx`Q ObO_nLO]vG[S"n܈K9P(46674(YFodbR3##uqFF66-MPnQ4U}ּZؘťN>ATÇwKDtޣ-mne5-vbGǑ/_%sNbf#c66>euW$ d.M<(UƦwnϳ6Pֹt؋šݻ,}}GDBOܻ}vl?3aJtHr?="rss3;]]iRS3%Wr%xz6ibc7hذn ^(?vrjR:`qIIiWsrz>7vK f 25~Y??.^<,!yw žWܵ `V@'ծm())mҤM,q#zΜD{JSNPPTszb^lx"/ ''o˖eS)ڴc-[p3dX[۱\@w͚1g޼!U6w+ؘ'Çwԩ۷Ǜ<y!""Dt/ 1]52'77))ǖ,&²^|8" ND-Z|N ӗlԩmQZٲ묄>\jƮdmɼ$:;;g%-Z4Ǐ=*11޽GDVwE"J۪ ^cl_$1ibcmzZaa͛'7̿GDs )k˰a|}%%ya׮7ʎ}v(&f Z`HHkk/5vtʔ~߳rHHmxSӚCv-@E˖č'L`ǎ]+R?lX7"1…Xr`gX4#j͛[>tod7lSӦVVB ""{l` վ$KzIIiBPCCoֵkԖ- "6lXwҤ6x^F45Փ҈˫sV&wKjii]%ѣHNN71yϺu||O];nIַNau'"D.ߕ)U]\l1Wb- ׯΝ-}Ν;[&NciYO]]MSS|L76J9-jժ_ZnM!`ݺ_wݶg/ϞֱcٳK(m@ûꥥMK{mcc~Kz$o~nNvv ov==mn\er4ߔmܭDة8 …ښv:~ dk`Ϟ9lN: >N|orh9 ob F>>/S?{x=Ĥ p FQJ]帒9嶪W8O)wP*W-_róT޽ꥧծp@6CQJsy {A[gCbI%"_(W0w_ZZ#,~G[ kp=[2X@vbمd*]1$ Ȣ^:O  .T, PB  .T, PbX<0x #=i 3߇0* d*]c8 vw[ybƵucmvw@[<1* d*& _}VYa)~k>O铬Y]!r0G;Dibvŋ>}fTP?}ERRhm1 #:\ʥLגyk=;ת)K"/$/Ye;/FϡCzzNN_ovFv%]]6k~~֭;9pyUۦca[)(<yܯ >ekk-16vPx2q+˲UU/KKccovܹu]hQku[XsRΜI1:ϗkv"rww N^yl@6 sloqѕ1/u% ʺGDG++c*+co+$kh"ڷ<+7 HC4d#ݺMTPbeyRhc1w44|y議}QUlk;sϞs FN֬US0c#{9JNQ]}q8 :t:`whgt|Hpq9=(h-56֍v  B dͽu@8zzG7jTkP^|B``7U޿_'EE32v>xplzo"*,|x=m[w"ZrOEsQ;ӦV!Ѕyy~Q޽1vƷ2rr‡ED^^ޤqqϽNK˫ݻqtGEz5ԬYHlbgOc~*6ví[W3 eu';Kr97m:JDF+,{#("Bjjh2/I!nev?y9ϫ.\,+ۜzEsJJʩEqVt4Qc lv]u,l-qV-33}XCYII67wx&?ŋ3rr YYOwFvVIIy>55U^ Lh24ebuoff99 KIN>Sww'99yx ۽ ]vΌoVO:9}2z+[؎21ףG"1c$ؘj&vfd'.Ͷ߂FqRv  ff<O(&&f Bi˗_ðҁ{s=D$I[U?T^pDylßE?{/DhJƍ^^?̙,.*z$濒gԨ~ݻmADSUPxu,FG'rml7L/))$$DJJN~~qRRvRR]r&$\ U _wӧVq.{fu9{698e 44T\ԔHcYeM^@n}{{uf(e@h0* ځNǎHDžA\ xq(xw!%%W%w~wc윺z6jC.q{=Vo_&kVOؚWCZۻw /WTh _#hٷ@V2X} Y]]ukTH >_x͛ɹGO_#ŋ?oeԡ;vڹWяjr:~zl= zUfaapBay>۰pXss.]Lqn,n^goq!P( MJʎTUR՗2ԩCh;ފ#M7LϞ=X0Ǐ+uԣ.R\\:YZvN456_̲<_4.));/n˲7n&ۭヂ5##w~~~1M]"Yzt={b*Z+&ښx{sg--5WeW8:.ZI k α@zL[[S%euu'NtLLҺcQU퐘gqW>_NAoj77I9,꧟8c"JODwX],(xpĕ{MM1LCC4))L?"{c7o =`aamkWQQWriq|a?@` #/o-)}b6+\|ZbjEU@@D>G*( ן"))[4SU.R&MZRTk̼˵̞kՔ%K~wwjM*y<:9}mIRf['_$jtu]ڬX@&1¾M;8,@EEۼyn RF,+1M  O&XzY\\Z\\{}۶έںyrֽܹ3gFq{ɻs6e7l8D AJ8̙+WJB =|X>wncci٭(w_ӽ{cf\GD!!_{z'":u%$l,߰E\ikk:eЍcSS͛98&8x0v֨ϟWv˖yro 9uիZKKy>V/C6m:ZT{+GMm}}TԪsREE??u7.Njvȸ]/Ν5(*Qpq_M<Ν]Ս;kdg]{ر'MZ~ƆyĤX~Ɲ/45U fq&񪴊 IDATaw%%̟nLCb!Ν,, ?ͧ2[b[/m"ڵmNfe ݻyz7ϕ{HM…[P||6&%eښΟ?a] {ǎE.t鮂{gfOD7YQanNoYq?BD&&AA*D4h5Vv啔_q-ܑwJOibeesu]E-Y}EB &NHͲhQHK˛6mU{̼pV!mm SS}ѓznkkjbGDEǣGLLts̙fkii0DTZر[\$!Cl 4U8rdVDԛѣ'c,z5S__ťAZZ7$vWc9zxfeٌ#Fݼ3Jk-3fMIT7oYpOuilSqvvAhɖ rr ==WUTVVGE]M˗5Wfrh{kCX=LIm!7;0`Swo*&^QկcGZ'W_MDee]{>ĴpF_MDGb▸M~ND+Wx. []]ݽ{<8{ڴ*\}ݺ9D0/oo;ݻ7}VVFNNwp\X߲Hu#0..iiy޽{/QQ^ ./?5kh"=ϫbc7ܺ~j00/_֬_YwC$/SPpӦD4jTȻwN>"".&bd]l'Z؎z…޽͉(+^`wYY4!--Z! hivH l$HIef}ȵ?+).>FD<,99VܳrQꚛ7[qƉ1 #:YT ?޽uUmcϟ?99щ,vܻtd ;HGGOٚffA &4J21康wos33†%S$'gs7cgڵ[vvfdu~zѣDG'Xނv.=ь#DV 6#Pff<O(&&f Bi˗_ðҁ{s=D$I[U?|\0:CßE?{/DhJƍ^^?̙,.*z$濒gԨ~ݻmADS}[س,Ƚ0))9IIIIϧ"" Ws]iUd{$YB:_u=|Ҳ[ssQ* xjjD$,۲ aTa[ԩر(?7+!3/%"9B8qq..]\sm5^ltU[[fM.o_ t˖(X/.x>܁r@LoɒϭLLt (/h[t̻܋e<=<98*+[՗2>1 3wgDcǩ:CHnx꺌]&؈:Yc֬0>㌍r |SSoIaQ?eD?wk|>_Ntڵ˯˂'N\/|-Qa PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, PB  .T, Pu 0L[gfX3=ط@ybƵu-:Y};H@vbiBիWje@>z1R. cde<=w *h7^ gH!W$%e&0å\ʤI+Yq-wٳ[d/NNϞUn:tm'kd'I]n] 7V<|"Qf}_ަ]n!ρ[ϫ6=:hJJܺux<q7꫱m`cYV؂cc7,',[U46m'Ν[ץv\wumΥ94bD7}|\d$?еkSxw-g oX}3gWx{+/|9K-P8wnPV="*.>ZYSY}7\!!_s-GѾ}h\MаE 7m++KD<;x\ Q|Dowp%%g[ۙ{k600p"$/fMDٳ MQrr#}qt\СfF^^?3sOEC3@Nαas1??׮?22nO\l11)?Xb+==^LCb-,<mlf^OeB'ZƖpvڧl: "00RTjJT|說>>:u6bgg&7pIvu?~p#wea}_ZXS)"HޒS[+1c-W߿{QҬWzz~e AQQWD7(W]] ^f ϗZ[=|&&|\V=We/^Tђ%;W$$xҨ:!7ˢE!ӧ$'g[[#--oڴիV63…[5LM?#ޫWw[[S="/?=fbbg$57[KKw%ҧǎ]:p" bkhإ(ҷő# "d=3fի:.. &)!'c50,fd1;u'`tUrEzˌkSRr45U?͛w.SiTސE{ye Ab(([[gglډrr ==WUTVVGE]M˗5Wf&kLDSkׯD|/Qcc4-@@nnP($xmYs/n*&^QկcGZ'W_MDeep?~iQጌ[ޛ &"-qq֝VSQ\&<{=xp,3si(|9(5uus(4ta^߰':z5wwoLsݿ񭬌>!"oeר7Fa\\s{_)QQ^ ./?5kh"X좟?pVի ü|Y~}d \NAMѨQ #=8}"+Ll77Hɋ.,|qSPYPpJl!.ev?yk'#x…޽͉(+^`wYY4!--Z%wjKN5%V$e@x p GFrG{L;12k)/VR͍FD<,99VܳrQꚛ7(u<<0 ?~<޻n6ml'\x=>>#'0::eΝ5?Ԟ{Wna'[Zh3[SSL_ `&CI]&&\mnfSذdjl3uwwǰݻѵk̸7Iɋ60aY&Mrޝ2Yx0"rrdщ+V`~&&܊-%%fID66&j,vfd'.Ͷ߯FRgж x~+23r-˖y:;=~\QV4/e|"bf|}7qhHI׍"5sr ׬9.llmMQYY1܅ID|y?]˗5 b^n޽SRrk{z]2q=*c윺z6.9tҔ)<o߾#h2dUK50w2řei215qZ&xKFEE =sfm-~I0*=`P,..غ5*$/WSx}N36Gn11\={8aWt6GC]t"Ɲi,I))++kl5?eYyyh]RRv^^,eoM.[|}kFF b"8ё~C|Uyɋ!NwcY_HNfi{ĔU5֬[;ki.{qAT*'OZe_X7v+Zc::Z))Wϴ5UQQbYVWW{D-0U[||w|31>~â~ˈ?&|>_Ntڵ˯˂'N\/ F3- `g==44T󨲲R[_55UeIVDF^?xpcG]'y_*noybTXaV:{H|LL*G]x6C]]ƍ;yyEDd+m pCޠh_ZZ#jj_~@KtgeeߕͬYc&Mrlc7Qa24J^{,o0rڵzh* }%~}^ʹ5MMm-ZS$lVWH7 ғՍ齿}~6BҸ/">RAawII٢ 0@쟪p)2i nG\Kf]e_,Y򋼼w_ԍ>.^Dkׯ۶ʺ' w>oM7H z7!\|fÆ 3gާ^ :;ۉ-6YƤl[[',]azر…ߗ.UPwo;H2&8IRE`k,o9@•+ԢݠhbǏ+nP  df,"!"EEy%%%%y?r\ wݺwrYY\]xQEDKpw_pI*+np,Z2}z@rrq~=M[j޺a33.\aH[[T_d^ښoexQeo IDATut43~8s&ZZ5?+>=v2ցh[C.%EEyuu}-Y>`ť&{ɘ1K^qqoffM&6IX99aY6#~7o)ZrEzˌkSRr45U?͛w.SiTސE{ye Ab(([[gglډrr ==WUTVVGE]M˗5Wfre!hKnҿ^xyⲸk,;oG3`ݺC u "Wץ&hq;L5-0詻nHGOQFױZc- +W/\ &K֮=@D|bZTt8#c֯&‡#1qK\ܦou'+TT< ޽C=m+ ._JMݾn" ]7l^)la|++#'O;-,|oYD$zXp˺a봴z޽wKX⨨UW5k4MRlw[Un z5a/k֯;!^)(xiQ"5_aaݻOADRSsE|&)yх#".} " [0el'O`~ϟW]XVݻ9ee .+"啔S&ڨ~ѵg55vԚx6Z[7|Zg^DEj%'[!6[$T23ό>Z˟dsR#"M]+WYr(Nuu͛wE:81aD'9~<޻n6ml'\x=>>#'0::eΝ5?Ԟ{Wna'[Zh3[SSL_ `&CI]&&\mnfSذdjl3uwwJyx ۽ ]vΌhnIܻS8=,6'GN\"k'#01VGn))9D4cH"1V &ZŲoyee%ݻ| KDw6xpV p  x?ۋ?~p_]є~&"{{3G+++-X\TիZ%)zF׽^^^D4uP7YDzltt"Ʀ{BBBN'%e'%e?MA"Dƃq0&O$#Ahр7 \nٳ--5wb? rr<55e"}yYmٖܤVr/]44d >0e">]AaG+fZ_VV!p^^?ĉܻ۶o^pqCÉJJNN_߿_"j?km3֊vX/^gKM - kS'cQ~~ok||šD<=GH'..eb"~-܋MTU|j˖}ˬEkn%ǂ;\SWW-Y򹕕nc_mny{l0^eeKR'"av8uTgHI׍"5ϓ]]qQ'TVVx̚5bc7F']˗5%)))9W%w`}d±c MvN]{s%CԷE5'^r5ݫWw#GBamp215[S*==֮I%9W3oݺwtҥΟO:w",[;00ro8!̙_ZRZ*ʡ_~YTUᨰEE'zvugά%?'(hn~=>,_ u /^T_~rR%%Q,-*xa?,..غ5*$/WSx۰pXss.]Lqn,n^goq\# B##/UUf?uP">}N8Y,iQdri|҆i<~\ѭۤ= MLtY҉Ҳwb$8pqbefvIIyyEvvXqW7n>t_+(hDG ZܓUU%/χw>::Q_ߍeٿ~!9KSVVZk$[[VܒEZKH ::9h556l8wO<;/^ mmM=zr~ڵfe2c"oqZZjO>4_6--5ԖxC%0,/JK鹞<w^%))޻ RWW~~S^ו{|A/ϼܽ۶l M9Wץ >g\\'ON?z{-npp5a²'0j܅Gfif?;A?ԵǧL?rhݎ-`ťzz.mlNX{mKøB ?ا$v\]޸q''g# 1rr 6QD4}z]LDO8th%ԽLZ#hy 2@cd^#G~;=tB/_(+eY"rss "]]mW h`F`gg&ݿ?6mi/*zK,bi̕+DԵvMͫg*54T˓O+]o߾*..% @+Y9ONwZHuy8ѱ{W;55o9;% B"x1e98!99IJs >~~|)@+jvbdZLLi=z_>:w֜4QQQ!+ѣwY'!OδiÖ-=k={.Rjngx F=I};%γ ͟类q?P%%޽G|Ç٤3VCCqqW(愆,)ylav"3Nׯ  &&..$"% yr 8:x:w-Hc)Ai #h v;WȖw^a mڙ&ƀ};4$ϼiBիWje@>z1R. cdZ޽5hP@EU@@D>G*( ן"))[4SU.R&MZRTk̼˵̞kՔ%K~wwzu#СP==W'm;Y]]#;IrEZen~׭;90`EϟWmzv:a[)(<yܯ >ekk-16vPx2q+˲UU/KKccovܹu]hQku[XwzZ'b?еkSxw=ϯ{q8Ü9r{\yyteeA]h ¹sQqʘʘۿ ky8;^{Mn- ٸHnXYy^&jh '._&z+,l߾sTU+)9ܳ\ð|'yy5k"wF0`#Ȟ=ghjsTWiosp(d663a;*:|arrۍOv-dDq{ҤbI8G]}$鶴=އ$vWzz~"ZXx(*:̈.j770g煢N"-"vO**;tjmE``P[dO6IK VUԩ5' ?˥wlrH HIu[[+1c-W߿{QҬTzz~_ Mbv㊨+Ddb䫮BDYY3jkaagHQQ^IIAIIAt(q-UzzN]>_.+랫/hɒ+nzUkiiTYYpeѢ둖7mU yw­ C|Бkի[֋U_GG3113gQQic.so8p 54^RTWWWȑXQ\\QoGL}}ffiiydb]吓Sᱚae32nw杺0n*y"_eƌ))9|; n4m*Mr l-e-*44TnSl,eʔw/4W~\ei[Qa B"0_=h5֭iu5uXBʕ=m;9gN`YYEjjч|bzz--5Px]"*,|x=V/޾fMʕ{|}seUWׄy|jnnD~UWWqq E55Lܹĵk<{V\ŋMWwM9)&n||zVV~TTM Ǜ4#PKEE9 N߅ '5JQ%ۯ_}}{rϖL7utcȃ;KS-IoA{KO`Ajdų" A2_+SXjh|5&>D! c!_Ou٭`'NY^գb\nRRe/zնddJBMM޽rd,yAGuf"r':?mssYJKK-\\XX_6`m=@WW-'pϞtpv!!U#hJ"u[yZ_>wZE\x^̍+<'KhQ O#̐yżh (`&Mkƍdz ݣ7h}xVY!3acqqy*5cG @nnv҅O:Z8qqmlmlM>SttT (.h`7#)y2rذo~xPoH֌*RR22Ǹ0f fG\ w]SST.HMԬKI^^=+&'bΞMlqׯ9d?yph4Ydfflb-jI|ҷ.\.{صo@Qea K P>S|< B!Qa03yf]·Dbb1а A K/]S*qv[w/3]{ֶ&U-s?6IOO˷ׯjjvZSaadQRRݩUS5 SYjjM$U\.+4993"FUU 0>}~9477" A3}h?b7usSSGG!.>v#vJR@Ғ{hkw-iZ\͌72MN)45M#vv3/r`nZԒ11zoQWW:uѣעiSu72!NRTlog ϯI}HB}k-رkw_`Ԝ,%eei)?t޽gHJZ))9s#3Ʀϑ9")r%y91V{`nMNȌ:uOU ]%% iIEE155MӪJ'[$%XdeY IDAT%%twݕ`/Y29>~â֯5 `o?@C6Oed*nn6Bǧ(JRRKqp\INx񶔔(I G0o2woK 2RV]vvA.׭sFAu{hbw%FFZ79ze|޲wy&**|Ȑޛ6%IPc vmlyyי3 B|ylR5B P4q-zӺOϯcJV;vТEUU5nnԔ\֮=}zzUpa SUNf޼RR) ΝKiX[˖NH>`@Oݘ򳧧ݫWe7]M\\mb@PC mEtD¡C˼xqFZZA7 BӴꈈ:ȵvvm ocWᾍE B5{( "$S]]+W go? 44:۷%'MeeƙkkwUU%fĉ?'cI]BQUp/ϒI-strZ[SS+&&&`!8y24VL~ 0y99ݕ!P["K> N]*~./,-}͇iMraai#G.:AFcb&) MHH#t<2tAMMyFX?V}0 ܻ{t|ҿjVfdc4c<{8ǁVBHD{14Mf ?ÆmԩUn/--l~d/11֝;!h:nd vy*N!0>|gϒ v{w.["(ri+.sY<؝8Q|QU?GNnpuI3Ƒ~ʎp+[ KIIFSR2gN+O\R\RI[+>ӌ,ְvFYZ.ڽBuumIn!]FQa* 鹹E $[}ģGOϜIؿY5 d6TTϝK477rի=yRԫV*)p8BkaX, vaaq;vTmM<5۬ .nxVAtUUMQ뢢ױwwzu3yЪh$ަ ';7Eܹ5&$dќ9ܱܖ-\.WGGfPddҲBC/2 lةS+ݷLi!B<.Z4O׃ِ@CVFqxaߺߥm-/sʼyׯwIL|0i߫WeogcCnEEg#Gg !!\]Gk 1qYq vu+Di֭^xcf vOORQQյ={vU--}^_=qIlrwqJtzѣB{ά@:]ƢE;N@׮J/_;Y]E#/A @UU)1ŋyɳD?({BHDȡ|jnnD~UWW!(bά7p\ڵG=+_릫;ۦVs7>>=++?**ieeRAƍlhXRRֿY}}u… %Hs訒ׯzVV3񔒒Idȃ;KS-IoA{KƤ98X99YHL=BHԘ-&kX,.r, _F[)m|9}2{ȾYv/z%Կ{Ygfy#w** 3|&0775k…OH϶kj99{Dǧ󈯜ž騨$Xqz!!!YEəə׮מF>woLĶ7ً㏙#d -j|!i2cnUD?("{ B!q5cG @nnv҅O:Z8qqmlmlM (LZ BkZH癙w:f~c|Cn),,tx{OmyD``Dnn޽L49޻f7lL5Izzj/_50и~=PSӂ 3%%GN A^RSS7o"p\/̈UU5T_#`ѾI܈EV]RNw]l1 % 8,j_}Ԯb [vϟGF-:>9..#e^''gW_ü 4o\FFf#t|$%Żt/HNݹsƫINx񶔔(I G0o2woK=2RV]vvA.׭sFAu{hbw%FFZ79ze|޲wy&**|Ȑޛ6%IP}#8͜eQo //AE>/_QP%VGDgA{g,Qad\QX7Moz j_ !c8B8y24VL~ 0y99 y}FWv+!Bmʽ{OǷo/6.j5jFFZ))?VIs8Ƴgsphi=jjjr>>MEB!"v$%l,ZF1WGD&%eվh o退%$wi f^j;+. QW$+;rQAA Ys9RRVRRV=z8GD7Mǎ]EQ}[K[QO`&'bl >I RB!Bg.?Ow000bϞ%JL|0k֖O\ɻ"#oY3#/xuu ̚ʕ>UMǯ?BJJ"39"z߾UU5GEFZٳuuuL ! D"B!K]wʰK-'%P[9(O2e8LjrӦLJjhm2Gguuܲq̵kkw__w$ cDB!B"eeG0mTr>L?S^ 򫮮C啪Jvv?jl[72${0Uh&B!B-=d"rԪ7_5kf6G bD E!B 5-.duEV]BB:S޾t]ijtåKSD X\n3wʙ_BHX8* !B!va!B!v0PTkg‘K~#/<\~'յ˗;#bb@nW,B!߃kݎпҷRUUp$cc"#o994`@O&L_m_!%%*!B },'ڽ{W-.v#F< eeƙkkwUUU>'Q' :2x;EqLMg}"x' fB~eq«VىYP{O+*~ B!az,99JJXaŹt΋o@UU#ZY-;-lڧOUϑ#!1\]}Lf%q#+;J88&o),,%%OIɜ9Us||[[W@fdk7BMrkNmv|v-mʰ}LjշHq6o>I}['BGQa4MelsNf'qqϟ?NJK˾q^\kL]fsFE%%eÆ-|X, vaaq;v 4]W⍱A\.b14MWU.*z{wȫW7wΓ4w{j^A4H839yq℟jKvfń+thy-7 Kiܢ ttT{r`jtåKS$LܹA2oIJ脄:)r?z TVFWVFٳ+$d)y& F޼иD̨[Ow6YBbN:t5m9yժ0fQX؟ffseeGIIY:|j㰁lKqq GSg„? 00O bbrrcOcXX,lnĠAxfnn(<|8bbϟji3憿Ν[ۡa?ttTo!Czo0aaW@RR\JJBJJ9 bHȳ?w*-3;;Og?jUVV'&> oY4d􀔔޽ y^δi6#Ż( ;w@51Q۷}Tenk؁** II+\IniZ{zϞM M45;$%d N^5h믿VZn8[2UllkܻCV$j*|hNO2zÇyW9G2-9s,Ν;<|x.ijW-AB^DCTg;ge建}΂)Sּ~֭ G j3EU$ BH{,lةS+]KSQ囉E22RiiYcjgiKG!Qvv>AXi M^<~\8jjtоq͛ׯo?eS?WXx*=}q-[@~S뒔3.n۲ef*յMrNB=799ǎ[Oniǎ-oH̙z}#psf(f y,<}\ >~ݭ[eeg <\}htEEUllLJn (v˖+篶m;#>=1}h^F>ϳDC6Xgٓ.OKۣ*HxsEEoF=z8(޽['gX1)s$D!fvCY;utTI={vKM3b-]2RCsgP!~ {`X\.7))2YSdedڑW)w_desM)]O3Kmmc|PQQO6ѬYc. .,,?/lSgOT||:8;u4MGE%ƺKN LM-JNLNμv-{>wiI\xC|>xNТo^_,//C^co/ 'A^^S6n<]`n * !Dٍ:v0a0yxl'Glޡb\]G '.7gym骪;o~033 O;wg#999退Yg)ſm3fd<%/\]\FۏT_@Q޽ Q]]CEJJ]3̨f fG\ w]SST. WRS}~2cgϊYgmA<'O 26̠ľ٬BO$$ ,kǎ RXXzTܢ{/9eۻf7lL5Izzj/_50и~=PSӂ 3%%GN A^RSS7o"9 r^^ə7jG}}ΡQY4iFΔ}iy[7=5utTia7ra$$--9xv"x3++̜BS4M?x;nn=Q[+-&!S_dr|6E_kx\6[!`˖8țEC'=eLQ̢˵>|z~mH1UlOQx.9ɻ ꓓV[[vm)) {aQQPaad\ڗ.0n8m]ХKuQnD]AAƍsD8Uh`̘׮mQP-/:s&A"|n-B!mP4qC) }-8tOWyy/HKKv:}{QI_Fm;fG C5tdia~ȳ?!oB ݻ{t'/NS

ztS'1ܹ3_Ჳ:!*2pw*u@q\Z!Z}8̝D+M\MNN&1I~^͟矍 !!:r$z֬uCG9;df%<֭ ='[z⍞ڎ KV8q"v׮O***UUgJϟ ,edS ߶Laaiۏϟ_qϋ?~իݤIB'-mlg?i_IIaKJJ򅅧%% 86w\SS177\YY>33g&?qpXuyFG^}Od5,ڵ-踚T}+6H{Gq\]]5WQ ؑDUY?Q^Jޥ;NZeg U[3ML<='Xqȑ]z_+VxU~{ X}, 'O>|ݷ}^ț< /*:-''3j2@?k^vfn5kf\zzﺥwEs^^˗;recvv>y׾}KN?ޜh:nΜq PUUpee1c:>ΜI\<""be?{vK+C G|8!} 3i:Λ7Ο ::۷{!7l uuܰ+ )).%%!%%!.4+-FJȿQѺ?w*-3;;OgORYYeҐRR2{0{9Ӧ[w~،(PRSgLշܾӧ*s^cTQQHJʰ_yJrK54j^~lYtx n٩$)).''cffpA ._`wܺbc3P__޽$y6WS9de廸SEtzѣ>S)^]ke,Zs̍Y ;wx0o]..Ԯ"ZlEOO9ݫWw R휕or8 LY[2HRTXRR޿ -hŊGD8Wf?pbXI/˗kk?S 4u-["; -[(.Ζmobbq+Wܸq0 NطoYLݜB>j^'ڽ{W-.v#F<sWWΝ;>(ȝfl61m~~RU!7AI^vv>0hQSw?~.H55ek:thT\۷Ҳ J6n<?WXx*=}q-[@~S뒔3.n۲ef*յMrNB=799ǎ[O"niǎ-oH' @Ҿ}0 )H^߻`ӧ/-.aaϯu+cg|jnnD~UWW!(b.5p\ڵG=+_릫;ۦVs7>>=++?**ieeRAƍlhXRRֿY}}u… %Hs訒ׯzVV~.pRR2ђrqys籩>Y;utTI={vKM3s?HYYb9(c!޼a+;;ɑ!aj|Qig d, .iz/cc;wB45;V;I ŋS>|y h616a WABoF__bqܤ .\fIH2ڪgOMQmKFy}2{OV?\r<~h|ڞYjk;)Er':?mssYJKK-\\XX_6`m=@WW-'pϞtpv4D^6N/99$$$255+7(99399ڵjff &N/M}<1sxiQ7zhvfvfco/ 'E BӴ_>;X,@yݷ&7,11#/m;]UUSQQs-ovffxqX/r$'''0L523emf݌䅟a}Q (?ػݻC!a X32k?|HIɴ#8c,aؠ+]ݿ $]@feg@߾_LٳbrM5~z>ɓ7HGk0zC6+ y%ݺuVPݼdBBzZ}}ufbjOw@eeW^QQ9gN1f uu^ KL?-n6ee IIG92kh$$)(ʶ|r**%qՇ<)ի X/[qUB6BBff>|kH6[`X;v74&HKԦJGF{q4MĽ{kiv*˖9KITS[55;-XKPЩ?SRz())KKIɪ䅩,55y& MNΌQUU#H<O뻟t͍ * љR>}19Л7usSSGG!.>v#vJR@Ғ{hkw-iZ\͌72MN)45M#vv3/r`٬B$5}gۏ||޽zdCۯd>rc U57׿99?Dvի8/Bz͝;qK;-[[Yksԫteaa_f:ڵ4 N/_8 w__i *B-߀bjj,=)UU&OHJ)ڇʶKJ>Q[+-&!S_dr|6E_kx/\6[!`˖8țEC'=eLQ̢˵>|z~mH1UlOQx.9ɻ ꓓV[[vm)) {aQQPaad\ڗ.08m]ХKuQnD]AAƍsE;du3 ;l6 EM8͜#Bp_?gm //iiN+4{8ՄзBfG_ӧ㣣+";B!Pt^4MKkP |Qa }!} iݎпշk,!B {,!B {,!B {,!Bf7>}:~$?oC<!By,-¹zB!0B!P%Lʕ!C>'WIi58.y TWWyݡ\mʼCaB!/hq1cXwTW_ɓ-(jB\\)iB!Bhq]nnтv::lw/wuEFF*= Sr~nK7B!iqC9si|w͛nݑWo%aE!Bxh-vJwm**e,,~8q-6ֹq~HuP9#BDqZ;Isքs!B5|=B!B B!B)Qhlp0}/O챠6 B;vž' C!B]cAMr?}\'[v(o_TS$lQSݯ;"{,SU@@xsHH WW:99YAIiEqxʎp+[ KIIFSR2gNk}?P|YaڍPS\{ڶdn}LK))+WTTVJiڼ$58F-᪃B{涩ŋ@K_lذ?%!.,,=q"6""nǎ6=B166˥Y6q+MUU5EE^ݽ;͝:)$Z+''>Tde[w$55MiC6[Lay ݸ88:Z:x}TB:axzSnEB)K(fZZnzzNOhŬW;7tW͛XVUYS'E.;G@Qљ={w,"%oDѣYޛ7Oun&KH 72rq‰CΗf-45'Z, l())+Y_m600BSs2m).naC8YھhLF3SAZLBNnSqL ڍ4h^lmEq3CQGLW-m/ݹbk;ӟ88gttrrcl %q%6$?ALɓ.V3cc2=z8Sj1c*voϑծ݈޽gF0]MJZѣ/U#UT,SUxaS,;sF]=vl9]iѧf' B¤$ΜIHL|5ۮf|Hۻ ܛ7Ο ::۷{Cްa6q®sfIIqgu~~U6[ѣgvv~>U^GՉ>34ԪfǓ& IDAT>)KLٻ=˙6ݺ#fd<]xEzHy߾&&z::jpO{;PEE!))~+-Pq|OO;xٳ d10|fӫ 2wJKߍsV@}}{rj<\M吕OQMOFz0 IWohΙ37f)(vüŋwNSFGߩU!?*j3OG[$ B=MNvv?{z7 4Mw(!1{wMN0٭[K[Qvv+VotBUNFfԩk?}eh*)i5hм/F\I2CNnU3""nO2))cߌubb;vcwVJJf]9W.]>IVv墂f r0h;!ɋǏ GMMz7U"8.y3y퇴삂r O/.>e<x |}]vm[֬9CСߟ=;Y\|6#i_IH؞g8'رc˃ܣۑ#-رiYZHڷo?77iFll4XKrI',un]={,LgssUAu+-["sϟڶ X[Ϗx U/w~d]]9}jlW7zUjҤ55xm11PUUp$cc"#o994`@O9vΜq[V78ڵo?`@W. [qz`SEFZfF^ 5k+&ǘ1_g 뫓c&-.$ UTl,E]k^0çFWuu@QTSϝK\ȳg _xtygʞbbǧgeGE%40~9Y*H3׸ TTKJ{S?sݴ(ʽv-%Y6"UjYKHܢl)](6"nlj.~cz|gsF,SRr5xWj68U#>| x:=` w>25Ś*~*IHJr~JRƺMm/ϝk}%[h(V@BBG,\\f5'''ʹ־9ΝM|o,Iޏ^&ꨨ(<(CC'{,-pz̘1YBG,ϟnZk;M{{5M>ƹ'q8jΜdTtԾ\M%bcS3ynՠAZ.99ի uu`|d]'{oጝ?3Μ9A?!gJ3|%K~33CG/deW/}_6`e5j£S`ImYGtxx,yll~0-ߐyL24ngf*s>=U9}|N??sG_ b^xBSVaa140JK@v/.d.o6V=jk߾~]lԾzR꫱8;!Dtt[X,ĉJvv#' m11#vڻͮbH}۴wo31Bd?wyںjMp 즦f7:O67ZZ8/f|(jʯ xedTWזWǧl$xCLrSH~?{V6$uFo6UR(ѝ]Eƍe898v̝͖/7Ι5tBu6]XAA_Zo[JvÕJHH|gql4Wccݻwp89s6}V*$%.x͝e„5aa[ɤ| 01sk|J.MAuzznzz}alڷbYi`_ /7yM,X0;/8x¡CktfDih_oy">>]]}gׯ{kiYkӁW3,**KLGyMr5SSGuu+f]1@rF3`Ѣ̐NSFsOȋ4HKWW!** ;M%)&YYcut> hp|MҳMM4g7:;=s]mm;II6_g[ >ZTIDw*nK7[߼y{l|b5nŧՕiE@Bw\xڀnnN~27o0-)=z~y .XqK>`*]]52}YLt))NHȦYxVVǼ3e:OUU9!!DONNi5޳g[mߛur-!)Xnvtn1EAAcd>-\!`v= 7|~C\]犈fk˳(WPP^PPjmښkz{'rrq%KZDEIIq\>Y[[w.ܑ5 t#St.^bNvwoo?Y^^&3I~n]Rw.&&z/<)24޾}?(öѩZUDӦvmוVVglŧCvg!jo tT^wJ\FF5"##OVJb r- uǎ|fuf"f: Z.uAJ67w).>$f3; Gn=WcCC7Ç7mtq ׬waW㨿y'7.3BJJ2--̙'7LY%%yq:DOf(}} G\qpRT{􌬬t/@ {UjW}ښ)mv罅Ű/1L͋de~@AA]fK>iWrf٫E8)+Xի '˗OKa/ @fm=W興Dpvt߀Bk1ԅ1ض-G9s,V*au3BWJw;By >=^^4U^~u8\AuUWPo߾}UƎu(G^S$lQ)\oc G,!PpyS4b2i44fms޽d%|{X7eΜ%}RSI˲epgwp,9]3eded&XZٿڮd]o}L%?i6ꬔv8G:;NEEe X,$;?ԩȐ={V }Y>ĝ骪zu=kIYUP򊌌[%$d\[P͔4{ΦflT{< !y(޿]-jߥ]-0˗ʊ3~uܭ[fyʕA3B;ǎE8:5S=ӎ`Vuk|qjb7]N?}BOO}ϞUCNEwEE7Lݸс<x|ZZ۷ W~rsNؽL~~1ѣT>,,lwȑ#Wss RNNz]\lf%-,V8Dgkl8%{V:tbފRR;켛b=~|RKO(m~ٛ))ϙyyS$j[7{ƌqB ڸ\qq..{dGn3}}Mo]\dkv7n3']B m8|ZeC(ii*ϟ眕PPP[tUְ\ƍ08+?Li/8!ԑ/.y<,6:Ǎ3ڶm){' RRiiIiiIr76`%H n_|CjlDZZ7o[[|E^FF:F JJZscæf]woE== TC01U;w޼23UUbcSmm7]l wqWg$O<'L`էU((ȍ1|_ +.~11֣\ͤ,$22=)i:%S]>.ozk]x{BB|߾=>|v>{_/TWiݩ*k(m<ƂB5Bv z+Nuu+QгgZ'зo ˗{'&fjk۾$ wNel{}<<7o_nq˖30 k~2Mo߾8m[ܼ+//C X۳˗?~eIɫc"N٢lO@rhr؟2/;i,ue(ztll*$%e6;9%0mEEeTB%tUo&$dvΐ@7fSD}{uo^=Ԕ+iQ%O4\MwJRiMmXoǀ#B 4't}<1g,EDOqCv?RV(|}Z ϶]\f蔌XUTO7#ϊSF@[UUlĈeJJ\7tY͆\jÇr522򒒲VtYQ2ܽىo-$HJr~JRƺMm#BiqK;r5Y,@ Ma7f[ ^뒓)ի uuxnrru%{oጝ?3Μ9~3 UU%>x%ҫWl5`zVV)`6^žXx@'$dqqqq׮%޻wQ4[.q*9&ԕիV[3Hz)O&>ѝJ̮Rm B!gbzR꫱8;!Dtt[X,ĉJvv#' maf+ZUUSQQwOq]ȑdGmް HOZ ^^䟻PrpzS@22k+ml6e|   Olb-P;U+7a B!$$W禧͖} ,kϞ _|]psT˂C/:ti ̙]v'g?{VyVU9x%>>c@͢>}ϟT@.W<05uTWWYbIqq!!7j|1/X0 -q  =%Ns9dɓ?5Nŋ F Ɂر::4Ms8lfĉqqYYKi~3]o}gt鮶$/ٳ-I BT&&ܖvoD71BHlx]*'$xz:I4{lؽ{3yyؽNN3tt>c%$%zz͎-洨_6(ȃ\69fK0WعÇ]G6-<6_0~W׹"'+*ťpAAtt>{q@I4s\eVǧ(JJӯ_/oU\~\)(ښ־HpᎴyx$4pf` eds9O|ү_[8ݵ) `^q'O o_v-ʰ-DtVtoDo8(k槾x@un-PotG\qpRT{􌬬tg>! C],3@ Hg8\A C!%%CCi[kNYaܧ:+ $B|̉ iݎЧc~y1B!Pׅ#B!Pׅ#B!Pׅ#B!PׅW7F]^]!BXPWWA!B0B!Pׅ#B!Pׅ#B!Pׅ#B!Pׅ#B!Pׅ#B!Pׅ#B!Pׅ#B!PׅwD!PxB[ B!>> B C!Bu]8bA!Bu]8+ u= cpRv>=#%QB?O0ݎЧ}fp8S wܻW'fլ;Y,sM}EEU禇BXPPTTfnѣ`XS"CBYw_uv폦wxad@@X]$Wj J J"#}(C{I}/oH"JJrhrrX,ɚI\]o? vvG';B]cA>dbŌʈ7}Q+W@Aʈʈ֑W!-/^ȏo?$ 4n3d׮gKJN04t`)ԩW**ZZZ9y*0ȑHKO41qıX-#3i̘fklq%K~(tx9IHX>oiW.޽?sxHI{Μ0v46ۢw/̜ΝTB˕oo/%5xqd}}ś8q-1zK#F,"#3of)Sɕ+}ÒUUETT\)- ti2èQIǏ_s;Y3fl()yuT|)c:ef>i¢xNxv2\qvyfҢCr2ُ!/nŋ묠 m۶޽^))$?fK))Ng8fKl| mu۷ ++oz@^k IDATyǧ5())kBϭ[v>޽4Iڇ`bwySef6/F*Ʀn|9h7b%%ΞI:yO0DKOK$%QP9R?41c  **t_~jm=LJ" MRh!##ޓ(SR:]tUzk]x{BB|߾=>|v>{_/TWi˗~z{CRUV1u3Ƒy啕aayUsn))yUSSjg Kϋ|}W2nǡz!Pw# df 3ƐӎgD| x{(- ' '%eta1!9^O V|Wh= B;XgnqOqdJ[i)+{]TNf9;TV,,A][ݲ(l33C򧆆d(c99>-izӅg..~ttJFF^xx,M**Jӧg)hl`\TT6b2%%y.WzfCS.]]5RryLNS;;K Op#SS.Y_Ib={01.,--g?ꪑȃOHŋ.rnQ? _DD'TUDgKff_J^헟_,⿢mjԀYYGG$%4Xx@'$dqqqq׮%޻w@tf"N&3Rz(N4KhQb%޾}TUU#--ia1,1[OF?(*ʑ=d4OIso?)"b bD!0 Wc/pv%C7`XSʼnlmfmFNbbGZUUSQQwOq]ȑd/j0f. >b>SPr$j5éf.Ml`o?|hi?l+/ܿԛ║Q]][^^nc."3*+Y,j۶>yy!69623 CLd<'<fSɘ'8pxݜ#MJ*)ϛ7>->G ourq;-_Ol* I:X1 W׀UU5l,M8DffwqB22tus'jƋ4HKWW!** ;M%)&YYcut> hp|MҳMM4g7:;=s]mm;II6_g[3@D|~~LLjDD86Mcp۱?E7or/^[X ji9ZB!-1=*'$xz:I4{lؽ{3yyؽNN3tt>c%$%zz͎-洨_6(cg%+îG?/?~\lmy J J\ ::=|8 [[s}}Voo]NN9duS%%ׯg*.n?sdmmkkED$^pGZZ<~Lf~zmݺ Y]NkML_>yRdh}lQ"((EE>x{s={*)##'11{}ZiF]SIIJ++3gn ZSB}d tTgZ ]Ea २(YYNF)t/.4~pVB興DpvAO C5 io=<;;:Ep! rKkE~ WG#޾}' DQSF\Ff:Iv6 6e}p,:8:wN̪XPD:; aWX,IIv~~S!!Q{lKAv4M l"#};MUU5%%?r͓u_߸D4夥X,5F7#f/]dz^!ԁ(^SV:;S#>dbŌ_] wփY6>^rgl`п /ֱc; p=~ڂ[֭=[1vSLLv: ==={V% :o_XJjj*|3uFT`iio߾30^k{ Ν;a3䆳DS`t!G\-J99?wq5GXM$&└[С{+JIqnI->-*#}ɳgo=g7njgDDG|i?rSV!7Uĩʕdbi9lFFSUVݻ{[F-K71sqO K'O~ׯùχ:jta,8+?p/8!Qt+̟];EyXmUuVPq㌶m[ /GZZRZZé͖ -dϻ}%'=<ꪱii966߼wvvoz@$շn= /{EӍtFp֭MM^vEAފzz̝`bwySef6/F*Ʀn|9h7b%%ΞI:yO0DKOK$%QP9R?41c  **t_~jm=LJ" MRh!##ޓ(SR:L Z^/c͚oOHPR۷Ç׮goke*zcЯ_p!CtH=N9cFy啕aayUsn))yUSSJi-]!zw@yhØ1,ֿ;$]w='(+Q={hE|}+<11ɓOazSRݹs=> {v_o[-/`VW9CNNpa.;M;v,YY'NIvɮm=qbCږ ;i,ue(z4yg@11~ee.&)\=yHLEQ55;w_@/%rs}FdgZh*]OLdZ|ukВK&##Yly8u@ZZppRRVQQYKnE?8+ !z3E6x HKY뢢trLebbdܵe-[2qk>633$jhybE18w/)iIӛ.<ۦvqS22ciVQQ>݌<+NEk\dmUU墢#))s<իg5Jrꪑ>k}}-6[wIUU5Ғ̟ĉkd1y@!!COSYu0B$Wc/pv%C7`XSʼnlmfmFNbbGZUUSQQwOq]ȑdt0f >b>SPr$j5éf.Ml`o?|hi?l+/ܿԛ║Q]][^^nc."3*+Y,j۶>yy!69623 O`к!5)$JΞlq>|  5r~5[I%%y&ӧ%ӧHz@P46 BMIb}ϳobٳ8A/^ nnjY`w_pC.4M~{62ҙ9s\P]D||,==gJ5_j>>g YTT٧ j*+V #@rfT+4`$Xh!28433(8edέ!:'O8/3hMCTT2'vJRLRc:|4ᰙf'ťge囚.iovuv{ҥvl>f϶ g&N%}}Ԉq8l01c_gYx!jlTU<=MLiVS={ElLl^'::l==ufGGsZԯ~A.Mg%+îG?/?~\lmy J J\ ::=|8 [[s}}Voo]NN9duS%%ׯg*.n?sdmmkkED$^pGZZ<~Lf~zmݺ Y]NkML_>yRdh}lQ"((EE>x{s={*)##'11{}:k͢h{_tg_d[=PvߓEFWp/EEOJwv:;kv/0%jC:;:BppdhhtDD"8; FpVB!Ч/)MZ{xwv: >Ya'B'6w;Bc,!B G,!B G,!B G,!B n$(B!/ڃB!Ya!B G,!B G,!B G,!B G,!B G,!B G,!B G,!B BA:;P#B}|4 +B!pĂB!pVz(3@?>- BC8bA] P“B-Gg!B!2 ԥ o߽}NDQׯk0ر#2(ޔ)WTT1>BcACQQGrbIJO ڳgw} ?߽⅑>bu\i)(()((Ww ')Wl{G|(y>wkw xru ؾ$Y9ӲH/b%>Nv!Z ar2\YbFYYxee͛}( +}rLeeDeeāȫא/k۷kWh%%':0pT+l -?<xeS'8=zqXo-l%cm[yG;dȐJJV ̜NbXX4f̊f56^8%QOEe:s<E$$,rs|~ЫW9s<=gBH;IAamѻffNj*IJN7׷hl82>>pMy ijWq#Mddw3U*7n$Q/? oDvb|ZXX*%i.@NY?(7i:!wŋኳ'60Õ}蒓~ED!1u/^]]5__g97h۶ 02HIq%%=6[4Cjd!]]56["--f7U~n[޾}g`]YY}_+>>HgԨAIIY znz~kQѷoO>t=]]us'͛*3_|1ZUU)66vq-@q|()yuMɓ &ZZ}ZZ%))ȑ?cQQ`_~jm=LJ" MRh!##ޓ(SR:]tUzk]x{BB|߾=>|v>{_/TWiEQILڷ%YYCL6dx?bcR1q8_W&v'5XLD4iÁ}y,ֿ͟×drn野il]kEBXP7G~L3ư>ʸqFGQWWee5gMO o~{'&f>yRD~6L/?tJʡ³;wާ>6voT`˖L#G~ .,<…ugܼ雘x`ǎ6+ĉ||=nֱc-ĉ j[Z?Hw%Vm)#EQ֣㤤fg?#t¶]X r #tU>(vΐ %%zDnݻըSM뉉bB/n[ȑ 28IIoTg)abvHgN'ÆM``]z˖ffUU5#Y,։TUG }<=i!؊Ӌk0B6X`b IDATg`&7x ;7HKY뢢t2#yr`Xd 2ڲ-G8յf?54T'EQM?w/)iIӛ.<ۦvqS22ciVQQ>݌<+NEk\dmUU墢#))s<իg5Jrꪑ>ktBߵU!P0 Wc/pv%C7`XSʼnlmfmFNbbGZUUSQQwOq]ȑdf0f >b>k)(zy9 uu՚ M2MM&6ntln>q6_@Qʕ_ M Ȩ-/OHfxL,mHMI/3IBB$$ddf>CLrSH~8?{Vũod>8pxD#MLJ͛)όuA#Gg>b9f,fhKWn:t:}:| NN3sg%Ǎs&[ԺBuzznzz}alڷbYi`_ /7yM,X0;/8x¡C_Utf*44Tׯ<>KOOٳR}}׽Z+j%&f<Ħr䁩ʊ3>@ pu K QUU#IhTCdphffH~&)#CWwn? 9yixQ޿Atuh?9Tb;YG3>i784..=++t)M|py߿L_3.ֶd0{MLJ=u*p`.fa1p5>-S&&\]zɒ?~|;Co?f1c 4oDe66_(XrX+ "B*B TU<=MLiVS={ElLl^'::l==ufGGsZԯ~1v`HNvaѣ rs ϟ?uh<{Ɋr%qq%\FP>|fq|.''WYĺ)׋3[W} 浵""/\#--ikk):I1 Fvt.^btO|ү_[8ݵ) `^q'O o_v-P4fnbn>VS_ZZ]"K'vUUUÆUU̞iF]SIIJ++3gn {l! h:; ZDOf( dWp/EEOJwv:usX}]~#ZM0PC<+}\%@8+ !PR?44ottQWBY8bA5HQXƋ#c*8\Oo߾}UƎu(G^S$lQ)\ocvOFk/8bA!:Uy+hĈe $%'hh̲,лO^~k3g3yI~~1iIM&-˖yV58KDzumLY,sI6k$eؽ;GԩHGZj'Ro"NI)L|`۶ yv_/ǂ$ G_8þ%WX,IIv~~S!!Q{lKAv4M l"#};MUU5%%?r͓#\2**yԨApFwq`A6SFm[;w~յv~?e6uWl8ׯC}r(޿_wr;~7|X1_((ݺ`֬ϟ\/(8CuX_05`Vuk|qjb7]N?}BOO}ϞUS]QQ7S7nt O^?;U ܹv>_LnJ1O7 r~L__{0>p'&\qvvɆ89i×#--G  0e*r\]Jy^ /^߸6nH(JEE/^a'5NbX,p{%%GJIqmѥ#"LYOӴMY?FFOhzvr(NZ{#sDkK:8B}Nq^( j r0nѶmK;A`eHKKJKKr8u?yd!]]56["--f7U~n[bee[K"t##Q%%e-\uaSS׮GQлsgC;ioT ѪJ._kiڍ㻸@IɫgoN&L0*IIqF yCJwKT Uk\fRRYLhBTyE4ԩ~p[JZzk]x{BB|߾=>|v>{_/TWiEQILڷ%YYCL6dxE[fK}Hښ~]o_@ ر#oxsg]zҤᮮvs//۷?6XBCNG6cXGQWWee5gMO o~{'&f>yR}I6L/?tJʡ³;wާ>6voT`˖L#G~ .,<…ugܼ雘x`ǎ6+ĉ||=c-ĉ j[Z?Hws֕(kqRRVg¶]X r1m*2ѣ#11~ERD}{}jѢt=11YLh֭q 9rRQQA'<1iq#͛ x?%L>.̩Sd0 L,#Koٲ̰bupp$:qb0Bc1<x<s$6x HKY뢢trLebbdܵe-[2qk>633$jh9<E18w/)iIӛ.<ۦvqS22ciVQQ>݌<+NEk\dmUU墢#))s<իg5Jrꪑ>kĐ!:'z5owslĩS),,~ǔ1 Bp,K Ʀ 0͛u juɐ^U˗u{2.Yw\ t7̳3g0ELtBUUIt{\L8יfKVҖڮ7eY|Vʶ۲VE.)_6TB6,)](fugL)}μz>,^+XZ|(f͞r7m c- K -iJ MMp699[ (ILJL̺|9 ^f˕im$Jųg$c f J~ Z*-$=3qСaaWjò~Kɵ}4ޞdllU55=xP$a[8+ !"$޽U>|<%nn aC p8glꉍM`g\/Bص+~3.osGҽ{#y8Q H_KEEq6񥑑*^M27#/6ntvrjeeVYgY?Prp;w@)a.ꚤ,{dvo$QWP۷/+, ߴy@^NNQrr6$'g٫.SϞJ_J&Nfr9r9 Jj8vDѣ e&IoڵMMuUUAÇ/@MMuhp~س6'#Nkfm6tuuæ&3؀m XB.O XUUo_d@Y.Wp8ݻWaSIqq`Æ/[+Y`o@Pr/4M66֙5kBT_xRRl==40|劯VU;|1)){ذeeU))9͟? #Fhh]b&9+ YW>, NRWWx'ڵ{Ǎ3{ B]ClQWWKNrSRizР>sX'$܇(++$$uu3˕i~͜],E˒Or״4+!Cǎ5,((={@P2q< 98𝜦TRRURR{`e`0+Z?)WRgU/pE ٳ*1q?sTT^FG;wS^^**Kr, 688x9769~s1iBNNрn]lsk`: EEeFFˎ]JRCW̘[x5m,t@Y2!wuu^dnW_8g&c_ yrF}ѸsQoHÇ/:;oSѣS]Bm@8+ I%zP}b""⢣SmvWP7B!8,tpjͽ°M"3m{xlGu1B! B!BHza!B!$ǂB!^xwc$6!Bǂ~;B! C!BI/ B!XB!B {,!B!=B! B!BHza!B!$ǂB!^IB#@uKcA!G]BYa!B!=B!YaHPTWGBB1؎b'XTc:zcxy xlG!rYa!B!=P(|/ٿexW,dd:ە }:Vk{Bau۶LEYI7'&f1+3bܹ[IIFF)Y̷-x6ϟu4r8V S44ml{CC)eAx}RCJVCJ'Sm]dk6 +;4!ʕoR3SaEMsv!XPPVVee|p8ИݻW~]`iKa'T\Jt}}cIIEIIEL̝^_?58IZYic WS-yLM۬KFS ?>>_@CCΝ{ pt9|;}Hre:iBar?]YbfUUT]]k •+33T]]t]]tP7]kIɓ'Qpe %l0@v2d$##gTBCc&N\ٳ-k5租EG^t=y2z”qV"/}~ƌs22ۛF ٳn̚5;'qFG'甆 kݧ KK3gt Z 10plj(&S>lO1;vE7qЅQ))MSPbl?_p)ɏ?wohQz5(uuw>yR|ӽ:1?re>}G\*-X}mKEޤ6J>hii6(BBoXP7Iud 廉&o߾^rr= N {ccw_[amhh:|}ի+p]OI ڱc9=~~~QQ^F{iؘ@`$73`b7I#EQvvcK&C:"#頻:t 6H21隚(' b'#I.QPx׮S`k;0hLŎe!P'X7m1_D·-kmyYY6KMp8ZRR6wmrd˖#L= MYZ_55՝EQ?s?/m^QE.>V^zމK.Jio_>$K٤Q2$jULUUY__7[fvUI ޑ#kfgv:&))Mmdd84[OVk-l2immN^\7XY둒&còCL:ҥ%KvsY>Se c<2oA IDATkCݑ"DcA݀`# 2B!3rګVÇkuֶȋgj44 )O^SU~-,5kС/"Wꪒ#{ŋKK#O׬S\\.濒mvСAAQqq`Y7YGtTTymj:T4ĀAIbbVbb)oIt<"U*=k's؛%+-h߫X8ĉ&Cjdf懅]%~6;.%@{{~ˮ$h3oOYZFG00Ђ7bDzB0 @ (qs'] 8;OgSOll; "~%zŮ]55{w~=ڀ!e@Z**۶/uuV!lnFFyqT++>+ݹM vid444UW$%eo$|S&Ɍھ}iL_aaMp2 6Hrr 99;'^uzTR%LNs#G#aaWI ǎ7zA$\2;rEmc{diLg͹\KWwMCll!;ɒn::y<.3lY#F,i׮8osCws…[ڎ\̱9rX̤Yhh CcnfmmE WkcO$'v|d5<^ƼIcYE!ԉpujɁ^^.zJJ4Mg넄0ee3utr2\==o崨_~Y9~&re;|}رgJ&N4qw'6Ԟ=JJ*JJ*5CB~x wxE'JJ̸v(99ހ|={V%&gn՜USsn:8XEEyIao ':oc4UYY!'h[.nF6ݹ50p^yӢ2##moeǎ}߮%cz)+VVf̭_ҁ6HO>suN]@$ _bCEa yB9qsbbB>3(/GYy˭̝dd䑒e|;< gӱwUL9+)66kIz2v iu>) !%W!%)p. 5L|`yN.^ǂB|hWطGYY"#+-.. ݽ{e RJ4-Qm iw KJ*JJ*bbҥ䙪'I;w^ic WS-yLl~7tIhjzwkhhhڹ3=@?ڱmvV=C(ACi;&w]~b_~Ytٳ7>~\rCJJNb=:;Orc./X_M,/ZzOٹGO4v^Ŝ_WMMݠA}7:EffxP{ժ/v޼Iv*..'d%z}f7KS$^m?{6imԓ$9ZSEOՃӳ8BN{qsp><կ]iB확U}k͝ի;E㌎N޼ݻkkUU͜3' 22rhVݼNFXX̦Mm`0w9)6lANNѤI/?f#;nEpЅ Cj8;O[ʞ<WrSi3Q*OT_a<z5}U}Iu*Li~ژh p(OO'UU#G.VZomoMX{#$t-ꦘc4K'O##o 7%0x08xfreH 9\iiOσ\|{qqwb]]w[6`mIIY:c OM+[66##oݺ}}dLef6BOWWn̬OǪ&$d88lFkh-ZPQkdщIZZڛ%99?gio?hZy3<345NM% RlZ!;ɋ(>޽מrKZK.cڽy''g*޽sr:56QEFN55()-614Mť.X%O}"Ba0>;w,ocA!&rOSHFƍ3p;!a{~z44ڎӫWJ 7\*+SRrʼO^q􃥥}|V@ac_ߓ锐76veˑچÇ+-=W_5;@`ǏEN֏noǏ Z9N¾y3w,Eٍ%SSs[,|!2rk|sK~ b.晶-ݿ8>~EQM>>W;Ivǻv[1yy N+))9jb/6o%dT>))tN|SRxjjmm}RR6;%eGb?AޤIlZ$Ya!tZp$-H0XINeeY7Yjj=ՒIk˖#[aihhw/҈NP p>_ڼѣw]|z?]@t߾}fIIdI64VWW++5j&of6b.]A$#G.2uLRR::ڐi`NNSud֒&WS++3ss=RvlX^~SG^dX~.c[-{,!;Ac_9P(LH 0˵kf[ YRRR /= O:IRVVx}W%@7c~-,5kС/"Wꪒ#{ŋKK#O׬S\\.濒mvСAAQqq`7=MQQ 䵩P&'g %YY/ܾ$RkLp2-"Wxb{$YB߂VJK+ILh|<%nn aC p8glꉍM`g\/Bص+~3.osG{#y8Q H_KEEq6񥑑*^M27#/6ntvrjeeVYgY?Prp;w@)a.ꚤ,{dvo$QWP۷/+, ߴy@^NNQrr6$'g٫.SϞJ_J&Nfr9r9 Jj8vܼѣ e&IoڵMMuUUAÇ/@MMuhp~س6'#Nkfo BN5YYYYEre^ٽ{6? 6l %;xMk]ccY& MM'%eihJWji[ ? \VVӯ[P_0y1bF+fRP~)ptOσshiid`(42tu5DĉExzȐÇkiMC!d` YRT?MGg@PB4eM<"11+7xĈ4M߽mnwȐnnO]pK[QV+9#Gk302 !chͲ͂H!cmi]p! 8ba$OA}̱NH۹cQVVHH:SGg +#+9qqXN%!!ޯii.WCׇkXPPz dDwyjsp;9MS"11B__3$= `pW~R$ό,^l) Л7ݳgUb~\ͩ(:8X55N9wUT Y6lpprrols6}NNSrr uodݝ;]YX蕗?-**32^vPer2cnҗG:Q4/3s)ˇ!^vG෇|C>|y[ϞJRTpGg!B psԍ0B_j ""%K<=:gus0l@ B,v2d$##gBCc&N\ٳ-k5租EG^t=y2z”qV"/}~ƌs22ۛF ٳn̚5;'qFG'甆 kݧ KK3gt Z 10plj(&S>lO1;vE7qЅQ))MSPbl?_p)ʕd}󴴃55++.\>u6ƌYNb8vG9**N9󇊊g1zz&S2c p\O#JK+x-VЪɘ TU9S|#׫Rh7鮸:~Ү]Zx{BM`uOTGF]An**J0aKKap 'ǓeNS\R"zzuuq2kk〣xP-~pᶤ,cc1c~֭GWn>>}ziߋ 73kk--?ӱ #jֿz=TT<;}Ytğ0iVfIN4zADO@llt3fxghjٍKVtCvvEQ4M5}{@2֮ݻhwrrr{n>'_ZSiӧϏzGEyPzL>z mE$8;{UVV5DFW͛YccS||+16mO}"Ba0IhStww *Xܯ^ǎ}_l?%~pHB7= oRǍ3j~2a1yq~z44ڎӫWJ 7\*+SRrWz'Y}}OSB];-Gkj.??tFo_} kSRvXrs?kT9"D72Ҷ1I7ofŶoFƒש-Mt7DFnSUunO@lbeb#v5511~CQTccOxN]]vLaax^^… $JJJ[rݿDD1WpmE$\[Y5r0]QYENM-+j3c,۰(И&MhVe"KKFk5aa1՚@Ɣ\~+;!u8 !: cA>ߔ7\"{5əRRU,rs8Y-))l9e{,-ȯNNS֦9s矏6/|]mk+^=?ťggFE%4ݷgYl(h ʪFZ盭Y3ͪؤKWwIȑ5 ELE622pro[G'|d2֫W v;<|lX05eBb:eeeb3uK,}Vʄn46_ii%|ݗbǼy6|]+&!Pau9P(LH 0˵kf[ YRRR /= d=(++UT_fOqqJ[1CjEťSdehfMQQ 䵩P&'g %YY/ܾ$6&Wx^d̅+boЮ7g`ʼx2&&Q^^<%%hǏ_n^D^lpzP<2Ʋ ~Kɵ}4ޞ+`ת?bnA o}"KKZcې$ !:gnwo?A?Bťoy:zbc6m -#/v튨o߻̿fHf|(rvm H[WwPkxfd7:;9M2(Z 8pܝ;ٔ0`FFCCSuuMRRO IDATF27ękpۗo wvqZ\嗓zo|zMdV7Y&!P Ւ\,,i4Ϝ9 {;a, {]]g redezz|3'.niQ$$s -M0w!c JϞ!Lh>OBm|'={*T$&fTk3޽;8X Oʕqŋ:\?EQrrz{JL܀9E)ݔup$KÆ @uΟƜzxwrS4`@[7#BiQQcǾoW(:p[++^TBl$dm ɭ: ,Ev萻?/27׫o3g'|GUU:[[Suzo) HB}(خu)Ea_tvֳңG:?GlWvGl؎B-DDEG, uoB]YaRSq4M/Yb ^( dcAm MVW_ ojjWʇG(xR][?ޕ#F; 8٢vv߰N){'  B!a__۶LEYI7'&f1+3bܹ[IIFF)Y̷-x6i{WϤñRPaocv'Hn BرӦ}ۯLFYyˎ۷taTl0@VvC+;wx J#@㽿¾=ʪ֐q8YYnqqyhhLxx+;VRimSLPH>K4]_XRRQRRsg. Q8I>^7cիWYYMCff~ff>ñXnxCMM/N| M;wFma2EqvUB#QQQڎɝxl|鮬X1_(]~w썏W\ᐒSXGF<ر lw;ˋ1~k||Sv<==ݻWYYBCcLOnРɢg33^xihjNNS[T;oޤ]N=zL>~𥂂SRV=Oִ^CII ZߧY\!'={θp8׮4 !}*>q՝qFG'o|݇f̙U4]Wn^'#,,fӦ60ڜ 'h$˗}q3Wםb"l8tgf ¡C5ZeO+ʕbcc#u>4* {1~c,OL̲[z?*-:u^r<9RAw}}M6܆p8餪|ȥJ99^7 :::yڴ4M^m_U'Oq7yV zO~:w\BC\>&wR=OTGF]An**J0aKKap 'Ǔ^}ʐrݹuuq2kk〣󹺺|m…ےuƌW^[m^mFF޺u( 驧>CSSn\ Ŧ (i:={2֮ݻhwrrr{n>'_ZSiӧϏzGEyPzL>zW-v/'٫!2j޼-3HʭeMnǓqpzn߾HPcG̟Z)# /+..߿ױc߷XBw"rr høqFOP޿_ clmգBƍ=Wꔔ2o`nW\|2=`iiPX$xz:%$썍ݵ~#lrJKOgdWv?%%hǎ.7?FEyurjۮhA~##ms }f&0 X)K^X7=8xCd=UU.)6]l[p|||› vw:c B.!!WRRr&_lZde ""˵ns/'ʨ#@ff(pjjnYYUcنEOl͚mV&]HzG](e꘤,7ut!p#j%}&B//]"5>$99-LMu@kcنEL:ҥ%KvsEg[5+w_6XB@}G(&$dBfڵWm)))ϞhhO_+++gSUuDfΚ5q+ uuU޽ſ˧k)..|_Ѷ`k;fP⠠tX`ž騨thxgĬĬ˗Sn5m \TBT<{j/N2 boЮ7g`ʼx2&&Q^^<%%hǏ_n^D^lpzP<2Ʋ ~Kɵ}4ޞdllZU55f=xPچpVB!u>Ib{|xJI"..}Æ@p8fgn_lykWD}}cMM޽g]&F6 g{F2dHFCm\ȏǗFFںZ{u`7##ظiYe?lve@Qʕ_yͦ42k7e|)dF]]Cm߾4&Ư0|&gsAccSkASDFsrU痒ӧFFz aaWI ǎ4zAIUU/ U|O/ [\#y/:u diLύfqpdf6<pVp!j$5YYYYEre^ٽ{6? 6l %;xM{eccY&R45ׯw:1[OO+ _⫥oժ/N_LJ6lpYYUJJN~jOnB}ň.}WIB{`bbVxUQ ZS`鞞IQ,6idkΉ?I!sDCNkA(7~@i7>'֮;nK8ƂBIrE]]-99BOIIA̙csƢu@.WFV7sv/KBB<ɭi\ sr;ְAĉ&$wrڳRIIEbbVIIfH::{h\IIWYخS%'07ogϪ SQQtpjjzrMyyY(/A4l ,Xmi|' 99E޺uq7Ν,,˟i{{/;vvE(Rl2KE(*(븺Όf/:@B:ІِܪΒYd"ss9s6Q4/3r!vNDQx! 켭gOGN)*wu8@qVJ_ !]DDEG,쮠ng!BRSq4M/Yb 8+{_gaDNA]`7Sʽ޽ۻubu!$ǂmBFZ$MَAQ|?Xne-$##,[{lx3,-]ϜZbӕ&hQ'#,,INn题;La (?y:HkġCFZ4MAa|}Ù&+WmlG\paԩ# 3f9ر}䨨8u**͗<~kNNˌ6,re>}G\*-X}mKEޤ6J>kii6G!Yǂ'O##o 7%0x082,\ )==zsiiOσ\|{qqw_xih]Wp]o Xp[RRΘ1SSsk֣ͫ[nEA>=4ĔZXj͛XuuՄ Mh E_**>},:qO4BK_{$'SQQ= "q 66Mt:Sy3<345NM% RlZ!;ɋ(>޽WtUvk];99[UU^=\n/iGFLLtHjj=O=s6y*+"#oRQ񬱱)>>qs[6'`yݾ}Bpǎ0? >tBLYksqB{,) 0n_0M=}mmڎիGk% {\]))9EEe^ssKKOǾ')!aol`˖#5L MVZz:#㷯zuεk))A;v,uǏ5*ʋoSvE{iؘ@`$73`b7I#EQvvcK&C:"#頻:t 6H21隚(' bg"I.QPx׮S`k;0m|[Kdng@rLLz%UU/˅dDP@N7p8diiBzy)(pgojҒ>Lƺwfgg^X6jfևܯqzz̚9ښ1!0+K6Ҁc8;>g:Xdg*lgOw34l.kRYqB{, 9X,NMe˗G[gQRWW%/? d=hh yAUnr7Lj}_DD'eGxٳ NN~~_n)-=hqwҷ~AAY=ZIF4J^m@y"==O$*7v.t; "1ϟKܸ"q6%)KK#.W͛**J22v̘jm:yAM !I6,ђ%^ΥzU}:y2W2k䟐҈}-KB;O>ќ8D҅HN ;M9IIƏ?>/q9yiӑ/_nzoZ݄%9ٺ5.B <ؒjjK613#@EcGfݜBb2_1..>MYE͟yͻdHK#eZpedto$QSSPk|$vr_y҂d/?Gn18D㋊3ǎw IDAT,HoСK}9:ZXQa !_X,nv/Z EE0w?iޥ\Bii$wS/!P55DF Bamq'\7p6ooee̦Ҋӧ@pҖx{v}zLꚚcƢ\&'ob9,j911!-~w:ԪщWD#MQ'gzYY@ ,+ bb~254;~TIOOKKv׷ed s]e.(ee޽?mlY lg&jJSSӥ!!!ԩk**J.񡲃d0::ؘ>ft 1zdժM?f7GE-3xAڵsO"ASS=)iΝ? ]S,*ؘOzu+Z >/^Ը=zg+.s7B tRgڋ rMʃ={ R𨚚JgP${/M*]n/>oGG!;t(ȑ䄄  BxF !: C5):r$9sƇtv8}p( +!XBͅtRu;~xIBoa*]7odJߌ?E; 8٬6v߱L9{wTbǂBWիڰjj~4` @ȬУǗŗ1VM[A>RZZA%sw|ZtSTtSTtkߤU>FEUud7E۷ v͈}ΏcϞ44Z[qn'F F2PfM y(ǂB|TwطEyyK yQR▖V<y RN4-QJL -O)h}]VVYVVxsέ#T8ICsz_˥.e_irsrs8ݢ;a uu7iNG%{,VlO}SmvT9!>=!];po ݕy&^=[SS=%)???lʎbݛ"#}{{dfKpvz5|ƌ7~ \\Lܶ-.+˗5}~e|[DF-|d||4+v6-- {%u&8ŭ ݳ\qQWW_ N2Otu $dd{C{׮=zhQVV-[lp802٦4D1ZBaڵuoڴ_.]2΄+ܾ}իZmm N4\bqqZK \ps2%._}\]F;~=⼼Vofago?[$`d\MM&Ϗ 7AϳEQUU]~yƚZ8;2{@hggpᔟ1cv…?o׮ πMda8C⣭=zv+c[> dv|=B][}Iu\03Ç۬Y44biV.W,!G-QH.3>\Bnn^KwzyHIMjjRRnc̙aiiB!Cef|MU{Sx6= 'S L]}ɩ_ NM\~ZY,PYر.ȑvFF=ۚ%eeEMMuGG#G~6nTQ/^c`7~P03&1HC^^O(EQ4Mge7.(;RֲXhYk5zꞝ}m>>#ٳ{&@ޟLJ`JB6nIo=Zb-&7Ꚛ+|WVV>ii(**xzxQm[X,^̘HXB9d'E-?\m6̚y;luw>{nҖ'Wlp!<<|<}ZAڵ` YY=:~<()y~BB|RS&%mZ V%Sl]]=WTtѣc99}M8/GddX{Z\P6l%жMSM@TIk<,}i(juffAw $gܣV]w}. ͼ|YΝ=Wn(c q$ŏ7m: CJJb Μ9bb.dd3ILļ5["]]*# \kh Ÿ>wpܢyOƓ33 ˫Z6Y-"w>4|H;뷚:pTB!^0ܡ|[>VfoxĤ7YRU\Hn> G]+WrL9uuمNNW=2Ɔ(bQ3ǏޢGM>|X)꒣…S.^WJӴ N]6ieLt˫Zt!up JZv'-MHS//72 gojҒ>Lƺwfgg^X6jfևܯqzz̚9ښ1!0+K6Ҁc8;>g:Xd}[-=B}!ϱ>2< 22DzzHT&7nhQ[ZMp "#T<Ѱ4 'KhS򛲴4r޼iHL̬}:(#cnj?ߦZhi$ nkjl-Yu\Wק'N>ю0BAb'':HTAYQp|}DZ)')%.3'/6m:R[ڭ[-^pt$V[1dH[CMM0?t&ff}xLSH^,[3eӧ>;Oݼy vidWWLKN.m$3jj8j͚7._ 7o}^Z? W]&r_T\:8v,4`Az ]"%86ѲZͤ_+'Lbq{9dעe}mpuD.:-Z4~ B!p@ddPX,oyUgVVl )-8}:-mXlSviӵ1.-Y?-M?\?ZZ^nds6l8GZZayyUFF~Ϟ:3fV gH^Λ75⠠(@{3Z=ft--& 3M0[I~4$%++craGZ,);;~*4eƛe/ Jiouƽ<""9sKI+ԩvd2""@$*z5'!!\]O]vaFzz;^cA!:GEOO'==*4\]]>}zLꚚcƢ\&'ob9,j911!dj[D\3C޽;hPG'N\F4]Fi|1ZZee3QQ'==],- ]ߖ*uٳǷ|{Ϸݲe@)MM5OOS(yzLJ% `roccztsҥ3||hh?Uf7 nμك&kݷ?mPMMM;w2{wMXlcc?խlj22֎6Q4/29#u?xCoÇGT:;xG!B С#G2 + Qa!BLё#4Mϙ3>$ħA pTX 60x!;OƂB!_cA!B/ B!XB!B g7Fr E!B=$p^B!?8* !B!$ǂB!_cA!B/ B!XB!B {,!B!=B! B!BH~$B!^PΎ!%a!B<B] C!B/ B! uū >8]qg};B]|<ǂ > x÷};B]NA6+M`w,؜ȳj! 2^ //z&8xz  ZxymBA.WC!55|]7oRUU|MM={#rshMMBMMŽ?OEF."K<}ΓSWdZ.a|qcJJ#}/]dV8x0qĈZZ\_~fފ{ **~\bcrnnk4MmE'N0K[]AUSs''Çr\]UUG6hmmg,R_Wws=d˖WPp-.~4D1ϟ~=cdeݛ6q&$;;kj~񥓓)҂[Dd:hi飬3x\uml e Lw>lW_7oRfz>)JJ#ձ̓b Y֒J@?1ݕ65[DB XPIu\03Ç۬Y44s*%ʊխ[]ff}\ܢɓzU KZr͛++#?9sfXZtȐ~|jަ.^G-ss^373kr_urCSSs<==+hkVV&-_p2TV>?v2y0rQ϶fIYYQSSȑ_ [7nmZEų/\zjCy< %KZ yy%>>E4uoܸMW$MP!{EΚ6==O[[W/㳺:Қ ãGO/_zJYYrΜVm|ٹ:&-B6-fu3/3#"3lkxB}`ǂX ÆYs87mȋ;wٔ>}Hݤ-aO,\rBxx<x:##rry YY=:~<()y~BB|RS&%mZ V%Sl]]=WTtѣc99}M8/GddX{Z\P6l%z{&5jY :I¾v-fv4R5~P:3ٻK:qq^RUuAJL׀7emb;w\ׯׯm!RK?޴())-,<8s8Ϭ&1rɢE=WI{{̘{"p#95u+вIerE(4矿a3;ƃBo^"c:foxĤ7YRU\HFxtCVKK#+_wB''k򫁁(JڝǏޢGM>|X)꒣…S.^WJӴ N]6ieLt˫Zt!up JZv'-MHS//7p{{YMZdٞ=MYE͟U@;O}!a.yy%k |[;;faq81 ~%z7~](1H98X?LZZPTKi59M98Xc4c(o_ܴ O ޽Vۍ}ԿoXiigϮuph_xB}`ǂ@X(,޶-.2P_8󭬌RZZquZo"QΝv:Üٵ1& , ݟ&ןbnO-- /\72`W6#--°*##gO3FI+3$/u͛E KTeޣ`q!!%''릧٤af$8s0<66֯Y[`eeL.H %55egSOE2xQaAAw4M߾nظW@GD3gx))qE2:d嬝;OLx2i[QMM:@:[Z_6y'O]]V jGxB}H{5餧Gٙ4ݧOS]SSvX44TSSO25UPR⚛M,E^='&& uK*03_ݻ*.~tlĈAA^VV)*yY\W=TQ IDATػ'|- \Mijyz7$$d:uMEE%>>Tv,YXFGQs66O1wx/]:gj~޽?YjvƍQQ+*=xPnmmv}ӦeXj[߾==SR67pޥ6fu|mj>/^Ը=z i37!T tRgڋ rMʃ={ R𨚚Jg$svz5<#{~>jwv]rZ=|_pTBCINH쮠YW<Bj.3StH2Ms pgPvWBK B0?N>c81]pHX0}쮠N"߼i=+}3ŷ(dd2۔ }2߿͉ B U̫Waa1\Ii/YG/)/GCc,˭L|,)$K Zf覨Ff*3ip\TUGOvs[}ɺz Rn۔X,ްTUG+*9?,,x K#@}p{S^^xNp8%%niiI7ة 3My[%&n閏'4M־.+,+LL}s֑gvl$]9?+4t?p855U/^sCj|ZQ_PQ?r$ 2oޤիgkjܞ2eUG|qYQ\{@d"_߱@Qw{l&3˷\3ތ7n<ss͛ $+uYna᝟`Hד/kFm6}fEbo_}_߱ LVPTdr߾gN PuKtcDdǏ3jZf7V[|Qa2AO;>Aw[>-ɓ길+`f'""@SSY;hhGGeeE%%T"rrݱn23*MիZXt׊.%6ȏ?FΜ&12_ff7߄Zi99o(C܀y2}ڵWjP==Og I. ϏL:p"iNl(++jj;:Z9˰atƍVxK^10?~(gY@VtI!/'(S)I]ke,Zu֬yzuξx6MבTrѣ/g=~\h9gNef6o>_WW[be!+oǂB@Ir#?\m6̚y;luw>{nҖ'Wlp!<<|<}ZAڵ` YY=:~<()y~BB|RS&%mZ V%Sl]]=WTtѣc99}M8/GddX{Z\P6l%{&5jY :I¾v-/E?,hnaุUWn:w_ %Kp_MLpΞWPuMW8DJvǛ6w!%%g1122$&_bZ.Y5wo3V5T~NM*l#db C!1a:-xEC6{3 &&ɒBrI@N7p8diiBzya`>>c~,\~ޞGV|6dkkg%=ݿѣ7o4bV 0#3ݤJ8H}ĉ D.DrrVppp8_qlIJ5~|&~KɋM־~v{&-1֭qRG~.̬ vsr ɋe|}|Ƹ |/6gY>P5Ws穛7B!a.iiɓe|-dFMMCY]b→}ͻ_K yl2ii@Q#r1رVӔ:to_3{E)++ oe`;3WSj. N]SQQt$KdԜa=KwOVlqTb;;g[[];w߾)BVַ>KGOOgD甔m0ܻw)Ӭ-Q4/2yAtB ?<`Ϟ?|}ô>< ɘ4{q\jD;;:ߡCG$'$d@@vWPB!>|#Gi3g|HOgPਰ.Cm!ԁf`G u9rk,!B!=B! B!BH~qpB!4{!By,Ha/!BǂB!_cA!B/ B!XB!B {,!B!=B! B!BH~a!B!$(a(| #BGQB0yB| "!B+ B!BH~0$p3B%܅!vcArNBrwvpߎ<;OsZ!B+ BrM,yM8;S*}lS*Xn|:(]+! cA]ƫWaa1\Ii/YG/)/GCc,˭L|,)$K Zf覨EM*I#㢪:Z_ۢOOrݦLdjj~noaajGZ [wq(ر?|YΚ B%Ν"p8JJҊcc6oO;M v|01qXLs8r1 eeee7o?qܺ=u$zux7޸qE]{?EŶ DB裀XPHwe޼IUU55 /G#Ϗ-55 55 ;v@>,y$;ON_MVh fƍG*)t)Y#kisFFS%y+:G54ƪs- 52)*YCmE'N0K[]AUSs''Çr\]UUG6hmmg,R_Wws=d˖WPp-.~4D1ϟ~=cdeݛ6q&$;;kj~񥓓)҂[Dd:hi飬3x\uml eJ2yB;{ӣȯ/`ޒ֨UAva44gZK+tWԌo'#@B{, x:. Tm֬g@YYQEEIEE9ree-QH.3>\Bnn^KwzyHIMIMM]Jm93,-Mhcc:dĤo ]jobsr /FQУA^ٙk^:9⋡zzک9Ϟ5Z++/\8*+;vuE9Ȩg[hy/ÆY@R-rg_~xd5AJLJ||B)i:+޸qA@IBvm5kmzzF^ݳ/^guu5iymbқѨUe1ݻ/̌d͸<)! G. ?D,amȋ;wٔ>w&m {b1}ʖLo?OVgd䛘& 2paN7X]%%@Hϊ@p5kbV= t~ϞC7 !!i˗#44T:QQw|EU_G_Y|ބq?6śQQ'JJ_ gK)?~hjjdfٙ7}OrI'::䡼 )1]7e+[~`fCdo(.~iQpwrjη߮11d$Ĉmʤc |LhQICOgȃq/6"a}D|[>VA7{30zQ^.$#>i]] Ȼl([$[Y锗W ƍm5] o2I,nLR{q17H,Mɗ…p}}7WdEe٨b~]{ ?B:KK#xf,1B XP'':;vY$* XjFrrVppp8_qlIJnAXvn~ٙu6m:1Auqq;;^ptTP44n8љis_?-IKSS-,/OL53#@Eƣ/jH)',Yw('O>MYE͟U@;OYq!a.yy%k |fCáȍI/˗G߼yz%%EA =="==/? eRG'|XJisХ3Fq8}[֦L2!7 UU/ZmT~'oVZZ1|xٳk,׌eB}xǂ@X(,޶-.2P_8󭬌RZZquZo"QΝv:Ü1& , ݟ&ןbnO-- /\72`W6#--°*##gO3FI+3$/u͛E KTeޣ`q!!%''kr~`F`z-xxZ~Fff}hn1#-HԔLM?hVT2F4}[w䷺]c^GϜnb⥤`TWr7lmȑQa$9Wod7wl?_=JG˞Y\W={|˧(JYYwO|-[ۙ٫TtoHH8uꚊK|| Y0&llLO#wSҥ3||hh?Uf7 nμك&kݷ?mE/^dHFχ?^[[ŋwG/Eƭi!éQWBQb:@gaZZUSSpjڿJ~pߎK8* !ܡCG$'$d@@vWPO G!9L9CB|:;ڂB 3;v#0} '߼i=+}3ŷ(dd2۔ }2߳N~; XBu}W^ A!hWwa92y:. Tm֬g@YYQEEIEEIQ4+@#u($dY.W!7he^ҥ;V&55u))G~1r̰4!23 &tժM)\xEAZ̓kggnf׮zU/ixz.?{VhLZpd|~eց`H;#m͒# f II%**}ҫWs Əff$)1]b+ (鬬{eg`JRZvm5kmzzF^ݳ/^guu5iymbқѨU k,: >ld/uA%jðaߧP޹Ș}}]w!н{7iK+W `}:##Ĥڵ` tمPR8<0X-X&fߖϷD@foxBUU/˅擀npjiiyߵr+WΔSWW]dM~50#Cz(b.5sxʯeNVJhpᔋo&'gǧ4=ayMekd++==jkkx|@6iIY^  /$3}2 wFp"-m$g*<|={Xȓej  Bs5xG,b2ˍ3m7~.<{xd,z3sɡ*4i{]}5܉Niˎ{gPSS RZZ!{[6>o_;ⓓ{;NaOt||*ymk۷exAdd88H  m"#Op ol<ʘM!O_௥-+yj׮34MDSn@oiiB})…p# |a?,, ˫22{ԙ1cy)vP/OX@-;Dw;4—'td5T鳧OC9NԿ~[Q=NՃlfRz_͗edQO#0[(sҗ_FfEG4h3FD9I(Z:54qw7ED;[CMw~8'ks!C4}q]ߑټlj44< oi%]9~p"Kq&$ ldP٥%+ Rn^4jSfDm..Ȧ=D#G.m8YG*v8>p,}1? 5*mC`&w.8xCobŮX.],^{ޯ_/WW;[[s"tړ'5ff&))9_8!niM۟??8x[.8>>ڕhiNN^^oQTԏ,KQP8uFFA7nft>͕Gg|)7]}]uUUMb_~yf׮mz*e ߰y{޸oڴDs:==_͛LN~VdRy~9MDc ,,-,$w6*hUU&knFD̩gddU6\w &c%OnW ױ_H"(vЍf[CklJe㲲\VN2Ԑ[,55/~eggߐZX&":yNÉn+h-<3g$%eǧ<ߵ;︳QIvt633-+8pHo6Jlm{"/鐩uRSs6Q@;AD/ҿ=[LQ_*5F,[ T#JeYΟ^mէO϶Z.{AyW"a/ؑ ul/;~^P_ĮDgLG[PWD4c[zz: l.)ʣmۭW/󂂒oOJ$SGiiPe)쵋KőG$R8W,=u*矿Ul""%Y"y*>KErڱ6UUlr迳]ŠAg˖òPHoժ/4=''k[|~-mN b**}'"'mvʕ_AIFRSs'LXʪD"Yeknꙉ늊b"\^Q/f?᧥{>db7oa?V|h^*c4--*<|=zt43%eK>@7%eKp8ׅB --ŢE6Xr11aC^;]юv,,stOVҚ( `~iiX[ZZnooף~ppluϦΫ}㴵5w,lzTmd'̜g{q CU؟]Ga5*lX|7 J}Օ~C/^quKOofkA6jEPq/22T ÕmZ `-T@C ce ZW@q;WR5k޽_ "[7ѰaΫW$gϤ'H[[SGGKGGKSϬBŽի=BknNɓ" ,99Ik[>$rڴU6nn}22 ?|Ŋ] ɹp7G]YȞLկ_/WW;[[s"tړ'5ff&))9_8!niM۟??8x`wߝ9`$-ʤJOmi&w$ $X IDAT&43UGKNLmFB]Ç;}wuϟ((+433U a-H"(,{{}mں;RY,]|2Ԑ[,55/~eggpwwb0cubN5rP; '޺UUϜW|׮&檒F&̴rY&&"Q &6۔*鲵;`@o{{գU"55mS/VC0N˿F,lTKK3ViN2RцPe:ۧUZZM&ز*+cd'[-T*MIɑJ,?ӧg[K_OTw%7]_3sّ5|DӟesǏޫؕ茙~ ݝfxKOOg%%waP%Fz2/((L":u U<^jXy$--O")sS6.Rz'_VnKD()'Gܛ%(vH"jxEJu.ʻ +Sx .jl"@CC="}[`\ҰK8R?Ν}w(I$!!"))sɒ("cUiܹ>>K||NU+mWSSWUUeˡβov9-[?|X&t`bFFzV`99YPԠmhsrnKWQH>q7w?h۶WJ JH4?|X;aRV]&4* #Z[zfb⺢/$+W~WOiiyDԯ!;hy;p`rihP~ݻجA ETQK3 bs⒤Rg={N5C-s,/\[[7##OH l4JFJJ;v,yOєSGEDJ$۶ݾ8^gg5 O?ߓkn> ӧ#z6o?׭!:djj^ޖeeݺN2RQE3ͻΙ3|RQbqnlٚ:UbS"iƆmgCww'R%2fϛqC++>}zy:w*9:Z;TС!66K$yoYlYMM;;u2zpfx8#ux MHIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Matrix.png000066400000000000000000001455301307543307100255120ustar00rootroot00000000000000PNG  IHDRu2 IDATx{\ g]PBTH!$?#"RG!8D¡An%EJKI%{msmjK#S oTTFFfٿz 1UQZQzZr)_5dIA 8s.A P¼߼ x̏|GNx{_4AJj#.EPK>36^!!1N7ld(jR11 \_SwYM{wܔ*9*Afd|(+2uw9&&<X9miirNeG͚or=qaKL q.X[q Ο7jԯtSd- jgh]eUՙBBf:: ߏ3+B _44X)!#?gL !CHP3:],lz9·޽{'W ݻK=z`cE'DG'(+w4ifT {=}4pS߱mi>uNN˷+W"ɹ΅=Y[jj``}VܸCVVN?G ׮m),/ݣG""X~6xx*..knl;v0]'Wq"8:NFO;ѣCt@u5kދm^RRy !T?ŒL8<3-ٰd[;]}/|OW]Ϸ <{tϞ- <|~-n2 Ͽ"~ &&&&K(t@nnAaaɳgoB֬W<=OSZRnݽt^^aK45MLȳO%E8qZ{##f 'M"W1{Xٍ?y2~, [yL9A`:ÂPЎ7[7 +++W"rV|7N`jF<*?dgߺ6lmbfmmU555_LLŋ++E UUgﯢ@D rA!!AUw?ӷ+M;׼5ϢR02Ҫۭ=zBZZ 6 ii 11BB55l6[SSAUʕ'{1̜i:th?;< fDǎ3FOFFVR9vҰW7?(++OG]KΜO۾}ٳŋ4:]n$3'KLLRNΗ&BpLJ;Jb! xIJ2sseP+v0B ] 44VƝ\Q׃!N._~p-j LJ*p|&!PП"jFQ;_!PB=̯!PB=̯!PB=̯`cN& ӛfkjjge4doomשּ߿~\x[fWVV!cj:xӦ+*-{}>J))g bԨ_^Akժ鶶ٖ若[׮E%$LJJl0իgwthAaaAuuǯ[7 6_]\\ dw9sWJJmIc ~6ղ ;_!x9s< 쬬kע?>EZcNad2TU{TTT>{vmÇk+4slj3f#h""B_|}jίALFU͛~+6j op8:]ɦȌ5xp߶J3 6 Ks[jA /:qq)VVJUTWQZ\||,oeZ_^$G:sdܸTuJRRKK+`LӄwΘaB"޿8~:Uՙ""*)Y/^۷2ׯ+Wѻ,!!3\]}̙SJIrpإ2SHLNn/_5I|?yrCqҐ~~Vp^lde'O%55C&ar荙3PVqRDn[[O ݺMޱ#yX={.LABb{'67[ݪ^Nz"}K}qg ӧoqލe0EDƅ>qL\$ w9WLXៜ m$!1aojv5|ҥs͙L yl5BGh`u5Fݸc5eڵ[E*h4C 33?~_TTTJ?xpJ GkKMMAWW"#_zNG}bc)(H?t Nu|ٳg7KKҊ/޾$ y:mkEEO{gl+WQVVI͛; uBŋ ))1 Ť+W"?NLI9#&&B}]K UU.Z[BY\\VZZp6m:>wrfUs6>υǎݴcf߬*?p޷T..$$22<U___1固»wз.ݛ`41Y䛟{/YsH^^]RRw]CCqڙܫ&ۼ }6ukyy%.\RRܭdcABӧ7ZBEECN`ժ%??o#._~0cW>=|LM09Q\_(`'?~hc%wвeDMmvzzFpNLlK~߻wٹs[ttz@b{Ώ| k{_r gjѢIoܾsG >|'Ǔ;JܨUde]z&`Ӧyd;n9ztׯ7L1of[XxsF[p8d5W_܃#&f!.n矷`~M[*[~|Ç vv;RT}EEYyyit_VF.rأOL`YYy|tsjj`b?z䪕wӾ~-9J-- Ϟa2 I 3213Қ"//M&Wpq{5:35u  sO-2NN>JJޟP:r&7XR翳%~zٜ ?OWf=z Lٳ Y+MRRb7dݺYpL(9|cnr/p(WW bb"Jbj5zYLuXHy 55fUg&&k19Z'G1b%'g@߾J-{o4 o~ꐽyX ȣ`oq }qݻ3g@N&!%%`]CyyզE&;JJʨuAteeot2\1~M{l|ȑwzMǛţGzxJ[xGk8`Haar!!A37}( ܕ 324 áŨ_B ~(hh(nW5Gdd$X ~1=cYY%Eu.le{ =cii(#u~1 -2< X MF#8GUVVe_4E0E/"wN{D44l)66!!O]\l=<oWlپ] ))Yýngo+ .e =~|…Sl/zURSS+$dkX[t:uTDċ1c ocԼ199_yϞQ>jg:`yy9glm=|._ξ\#G$K"#_*9t߾ʍs!P1W#6n<:x"Cg ''A)*1 ec \n֭[^6!a\GXXܲe~N$ իQ 9`Zrrf¤ ӲJBz4wjmݻx(*n =֓d|MH4ZO11q^nhL"y`~E-ֲwrG Ct ՗ԨWUrr+͞=:]`6Çn HI|]R99_MRdK99z$x:Op8ӧ>x̠  P~2ޚm\n|ĉۗ.En/_>u۶cc$uŋ4?Xzǎs³zy]z-B" @+/QtL"II}שqoe/Rs.ҭ޽βl I zz}QK[?$::jjj NNL^^f5y:mٜwTUU?l˖\clf]d299Y+󫧬K[ڋ ox4'狒&chY? ޶d{t)9mme֬wWTf2-lm=+ .OOϥ 8pd]EET#[VgiLEEEUaӧC sqqKS՟>}#WJHL68pŋGf_vr7o\[8k[]gI~!akuvZ> Nssirr֝;_l w+'N8?~|zѢ=d5~7KM=+99{D:((ZNNÇ ߾Oowϛ7.11 6Yl^zƋ߾=pᄹs=yNl4{wgyy#oMMVE! LZs iiq##II&:{trrl &rrRǎ%BGܹ>>W?~"++ Ϟ;׳% ~{KZZv}(O*e[7kDSS:u$U:,,…{Çɓ޳tMMe]]cϙc&""yWklHE@Cmc\\lkk^^j| u()ɑzeTxEXZZvO`鹅%5pSjjii1ar֓܂Əy1,l…Y˗:߾e"~!~2LOO{/ff~.' f_ epEý91c:tzFL9΄ 'O|r83g6|ᴐ1zkμ|y;{?9ʖ{0"Џ?0O rJIQ"wkիQ]w⡡urVP@||*? l0"PWdl&kh}?/' U8n[W&>|۶9>uk@JJVF۷88g-[}~߾K鹩Ǐ"##ѽիQvݻ[00X'O$'gݻ|֬'eh7!PWPXX[?MMTɢE޼0tC_^:ưtn$ufkh(NdςNN_vvc0/tK+Vѽ$tԩ#qĉ/^~BJJlذ~Vme !#Gu!q|!jkx0B!=`~Ew-_BYB+k9+!G!P[Bͮi܌Wɐ!!*N;>:\mfee'ZdY .d2JKCYˬY[/\GN!&&ҷ5ѡgd+j ))ɑ;w[{^33&rq9sY() n!w~0aK1%_Q+3f7F ѳϟwb.[fkThKKիgZ$f߾K{.*Z޻h?v*WB%8>:ҥ|lHL99UTVT=\w YRPpΜK>cd%07o=#_Ǒ r( `*!1hťKRόWHHLMee'~6R11 \_SwYM{wܔ*9*Afd|q(+2uw9&&< FA>Yԩ;>}(iQWׁ%AXYmo**3/^gh7Ɍ^XX< Lƍ[[i0VPP|CP t;?8·޽{'W ݻK=z`cE'DG'(+w4ifT {=}4pS߱mi>uNN˷+W"ɹ΅}54aaݔq:;&%e,]/;;G3g6hŅ:F-99pQ9x&v&N22⍕P >=9DQQiaaIeeQ~PKK?G C*V^^!df~v[. yʕ$$͊>cw}챙?NGljh4_sY{^ж_?ٰRU푒5xp_33?]n L"#9ZU hg7Կ!*UttOhݻK7`~E.2.[PXXۀ5kl(OT{w.W8l))1MMe=ӧo<J+oĉQJM>zƃ/`޼qBBgjn֯}γJ55kkS;ݥxWNIjAu<[nVVr™^n4mK~ډx1i҆I6J5XR{jjj Kޓnn Ək UF#v߽{23//SYÆiHHzy-&\\lutzkh(86nAt8v)PopRS}ۯ_dyys͛-]]$02Ҫۭ=zBZZ uu}zt{?VXw|fuuׯ،E-"!!jc3Ū y1!dc3ƍܽ{8Bj8P-/*Cx޻llLKJ2sr$4}^|}ȁ'wtWBu+BN370BuFϧp|!j{_B!j{_B!j{_B!j{x B3K jGx BVal6wGݓ&m৵*u9!!O"v6fժvvyίNN>a]Y@ L""^4قݎi\y1213O<^OXgfN!aymmGIɺi/?Kiu!,+O_vah&k!mfLLYr ?>j%?Yo{,kzۈ_?4ғ'}- B55Ԕd،9r$|bŋ3rJ .x>Y;0nPP4Aɑ#z+siQQQE =ދ\jSn&_M4ZY}^Qњɴ,/ ^ ,lnh<==U[ll׭UV!&f1v욬|}-''~ӧJ+M޽;ԭde]\<1%匥M >>W6oz&8xWrrݑ͛9rرugƎߴx񻹝<鐖ր&cy X}xhǡ14ԩb=zЌ5LJe>}BV Zh;NIM;9Y^po56Lk-[/--ШTBMMի{rrRǎ%BGܹ>>W?~"++ Ϟ;ד${ῴUׯ eˬfZ[.,,--|mEdGabll2ٳ2^nc3z?~|]jjj[̷2K<}#xf߾K7Ιcw>i<:]l6[{nt@jjyiF1]er LVN^%n}0i\ee'hc֭'k֚jAALr񼼺C-PqVTSS[]]`Q%D;d+t#"^xzvqphlSx:s@P $7mc[mineȈr LRCC⢶OYdJYEii9VYkh(  >>+ @c5pHy9{65`Zhi$$$Ch[7- ?~޽{0 3aSSSz5Y=L˗晴/ҚjHdKjj }OzU{_HHp2yqn'n_dtmm'@P|mNgf~:Ū}"Vޱ#ܹ𬬼^^gWAk 33?\y~iC/693>.XGVLSSƬ.jj_5% z8嘿MMeXvfD 'O| !=>zz}\]ZsaaItt·oe USSa~m6;Ӧr89 PLƜk}l\42Zq6!^Ftq{򃸸falMBt#4213Ǎ99()YzB]L̯_7nm{ȨW-XV^^:)TRҩ]SlJKizV`j/.[fFwm{{K''sΪk&Ԯ]++;YLzo a@@ ee';8***G݁w'gykNN><~OyZAaȸ [t~zx֭ kjjp8/jjf}l?2%6zrVQQih3>lÜ0oŋaaqyyEӪ)ӧv--mzu3,Ǝ]Gj,HaGGAZD% IDATOc;1P5+\\<1%匥7by33ښObDp87ߵkIb; '))YQQ]%Xx#XA͛9rرugƎߴx7v,x;rPWknn'M 0q rVm-]Kll%?thׇ?OM`=fk (&& R m1䬜/t)n*-=Gݻ'}6n3ǬW/y[[ {VHHpaaqxу~9bpaaiiiF ffmSS{^'Bnt@c(--nd#){ץ~lAAȲeVkk<8RTU{()ɽ| ]SXXB=}:=ciiŨQFFTRRN>#vXkرcꇇ?'_OUT=~:sN&S픗W1:!*(/jp >i#Qed$X ARx)-8 X]>d.|z6sؿﱱGDuk@JJVF۷88"/_UVViF۷{99_KK+v{ջ9s499?66ӧQQlgii$EF.#&&x ]xÙ>ofE/X5`CyARx)xDAASm;M^\'X/^qcјEp l߾̟za[wv#gȽ{/zye&R^ `_YY뻆b_~1~=p„ FFˋJMLt7 6ҥSvܳ}+n޸hN%%9WW;gTͱc+< ff΅S/LFl[?yyELs!-'gjGfooI K}+kpBd7Sn...0`E 8R<8۶9C0 nNNnn' ʺX4e#|뿜BB|Sڵ˗,y4..dUZYyyiHuj3?_kzzljG!!OgҎXY߻<::=MHuBS_߽˝9=))c)kشY:꼑#4ן:"jo?M~yF!̯!PB=̯!Pll6-̚m~JJ^k_k׮= nkd0+2*ȑ`QQѫ>}acBBo|[ І sSmŪg2D^^zdݻϟ?ǂ޲C@fQSSvd11 k-A܃{!.6ఫw &)zuh'''<0]Dd܄ `:>=~|hC4H}aa Z:6[HLMmld{t)9MM}^Qњɴ,/ ^ ,lnh˿u|gY&++|ذ% 9aޯ߼aaqyyE&fQ׮E5kA<87ֲ䦐 }_}<)xWB?_r`))g,- \]+Ugg͛祦 ޕI?|#'Éྐྵ]Kip]o?IIɊ:oeYܹyYv󔧧CZZBww[w;rkŪ9=+  H7AYK-bbDUP(7 B CP" +fhxY(,"ZZ@ $Ϙ_99'd&×҂ӯVU!\./)dffڵK ?}u##_+ mUQ18L^jyoؘ/ì ;wlqmhhߵkyiǏGc0KKc__W:: &fo2ܹcbq[Nry_yx8,VfpXUħx2$Qbz\Ld g V\ |ԩb1KS9xE- Y~Kt _[;:lڴ`ahn~%>8.n2f10 VWKӻ]xuwwмY[`01D00 "+@GEwpOO믷ēUUuhށ$0Rod-ݣm%b"y2 KS9H)Hv_}|\(17KJB_b^~S~'tߪJKݹ8%L\Ϟ=AMG.K " o)0wppDolIJOdd1O&UP?jAд#;D)OESS卍ux% djAAar<{_ff;vZχ/_DAA{37~wmmd]eeʻwUUG~Xq`Gw+/0߾ݻ(}ǎ 99EyuuB%kk_ZX=}Q| 1'by2ɺxRu5]#}:!\3֭+--'N\p æ>\E˗\Zjh]SP_io +''i\nyaÞ>3R}3k/ HNWVVܹn`@]?"7;%%9s k/㕪=zS]EVV֌(C3%Du{|VV2YēV~-DR҂%%&IAbz\ 1O gg+͌%&Dwlk{mk$邔}:!C4-.~P] 0 / ;f!>|B#4';5ɦoO!ә>mhh68C줦+ݾ&ҥJK<\oO!I-%6͞m񇅦7sɜ~+A}2{0A}8p| W xp| I~(xLL6?@#" t}d.^;զG}IowJ=>8N?WǏ'¡CH$Mwb\ŋw>|pttq1ID]\ TRrMI93lǜ8EF hB`_)B"# aj!:d4}duKUU}ypB‰ I$/q˗ݸ_rTE<Vt=ᘑW e"R||SS*@II,+/WV =d>ݿ?t߂p~|~zz^AL^~FKJزe7JE~[le誥FK]oԨVVϗ"%2LdJQdlE.)y։Lr|]̡֮MھȬYkTTܗ.Ԇlu? ()*)ΙQh2#ZZ**4Z‘#%D1[%=^ Ϛ7~_b2/F22"h##"Bq8g4=o䌌|}}_XȜ;wCҿn=[Μak䪪9 xk w 32q_2t&~nY#} ds|Rbɔ))={N%'[ <碚=`N/={Fk5 ^Y*,dvHQQ0*j9ϟVT HOKKYXihr``Hˊ`0{jzL"Q`0`˖+w-Z4ٳ\6,9s}⎟kvuuvtٴi/ )iii,xyx--9% Cd;0U(++Jcooq}l#644ӧE-/1dUUZ߾wpD>~_d1-/l'/E 1}Bry ńPH"2tt\.[\!%Q -_wx,k_56/)> :88v,jIW  ͒'O c8<\D.#ߨu+s{pS66GH8o1$#@ { ձ͟sIk …UUՕ>sqJʙ8={GutŴ|]]@^ }bv싏jjC$ :,E-hT- K.Yb {Bnnv,hk$dH԰1Exhj?<2]sn2,VV!ʄLT-((&W:94SS}yy#޽LHGȼy人F/|x΄FO'x[XI_o]Tcdž":x|`,d]<^y^Rѵx2'"} qLp z/nzdlzFz-bX[޼g1'Iuq{gjjjc0nEEA> c[JᰩA&'xWVyAM[[sēl6jh]SP_ioe9veeDI~eeE55 "nٲ{y߽[yca!sy_-=/))TUU#VyÀ֭+--'N\pĄŴ<.,lUj着:dhq`T-M捍bB$''iGWGת,1Qn혐)##?+BCC ՜SᴋmdozŊ_nq,}O>9_YYqcN1>/6v=J]hfC# 9Sϧx:xi164ܿlb[\СKNvRR[SRFC,ɬq6s~ IDATJ&}AS<mZN_lv˺uICg넆z_›ƐyIC*5BO >N>W8BA'3~CAЇW xp| W x~JT l(.~,FDK|i7I*AGI~~{W,>C.H Ÿ8ߋ>|bl"# Ew^u`(w<Avttq0Aд ×ܢqhhh83֭+5$cFFc?oE;/##Ҹ!,26!!&lýe07 t4Z~PWw57pZW_}FUTt 8@%]}Y֨/] t,QRrURr3g#啰e~ccoa :秧\W [le誥壤a[['24rXFE]vBdqhhlY!X}%ekׇ;;{ӑV=!>>_ӑϿ @2D~;U(?OP}}S+*~A2D^-[z{WܵhѼgrtz̙34$yE55{ 2lbɔ))={N%'犏Fݽ{#ӵkiTi# # *;8X o ޽1q\)2+**P\R6GCCܹļ[O_E'  31KL @jWHZIIչs. f11[Wz{'sׯ{zz<<MLZtv`03f(::^R.a ǵ5##׮Nff]`hHɉc XfCCm,V855U-b/皙GDЎ) ^.4Wڂ,߿ٺ5s̍CBo 2_E\PE#"{F."}L khz_|a6`0c--Y1srF-^lpf믭o6mڻi^_QVVYq{{ iZ)$СK_|FIDFnyϞs :dˣG9_t:Stԩ޽Tj,+WQqd`&g:g.@GJ].ɤUUۇ 9<,\Od4.ne"W\ѿ%Kl=Bq\^ww/*]K 4ѩIGxSSӀ5'gOvW"Q'J袩]X9OLzY_ω/̷o.*J߱cCNN3npڭLd]eehwUUdE#45U E}<1%ϟ7,eDRUUq%$ShB|_VR{=/d>BIM _hAIFFyDSG.$ݼYܷC㕪XS_t6]ݙ? J.43wt [ DMM8CAAs12y?%%m-4  ssߘl"Qdkkfkk`霏(_&tGn&iW[iN$%ݿ,.xv6sYuNNk&I30CMp׏cN~򽰰lvJD}}A$V\dۮA|?CGGL >50AA_! h &_! hux<7? >I@g/"␟_5X/8N?W:tDtw_AI`(A+_u`(w<Apttq18ߋ>|BbIT] ds|=|[G gfߺuDZtͱc22"MHp"#i Hc>ԩ Aӗlý<2y >##60啰e~ccoacnnUG`t/-!^u h."W0JT|..Z>|CCkOO5fb^ AkiϚ]]]믭o6mڋ47BJZZ j^:^KCNn C)*hi|"KS<^I@"Ddp\^ww-ݣK=$=d> m5DVYHd$zϞii0RoW] dDžBA37KJTTf!0Wp8|֭LgEýkR>OؘVT12"㼽ǐPd ]} նN8X,ϋԾ113;:mkUYHGǛ,VQh%T\S)9%5llL?}}".,O&모(+Fܽ[L&!蝺lv neeB&ijKҫW< ݊xF2?뵪kE/!!BF|?4A$37z^ޟf}%7EA4%;h""h{2Ξ`LOϋZ| f:x[8B4da}~Nᣊ^7)@ACA4fp| W xp| I_3(}}&&L`Aӣq/m A2oСK$ 9Rd$ |,ܹXbi*h"bj9!qq/}Ē"M@$cds|=|[ q" gfߺu: 獕cedDHEF$&4=<32|Sdlý<2y >##60啰e~ccoacnnUG`t/-!pVօ;}6lp64fdڵHg._ 3c"˿LJ:v!)''j633%&n V%2VRRu 2|" a VǏGc0KKc__W:: &fo2) MMUGGKuu˹ff#G MV#}bj`֭Y3gn|7òXͮ">^u Ht %*d>E- Y]xuww/z gҮ֎76E[X_!%--b5^!'Ut_b>osFz{x%U Ddp\^wwL-ݣK<$=d> m#k7Rd$zϞii0RoXd윿P(6cfICʛʌ1 ."/cܺȽpwMXӊ#FF$yyw8ScMMU) ۩kLL̎7aG[qڍ񦦦k{ 1Wd Y";D)OESSd]ee蚻wUUd=dSnpڭLd=MMՂriRzA35՗=b[X9&1AxҜ92ۼyzZQKHЦQU\">F d^t/|3TH] %3<."w/[MMm 5ȇ}lv˓'SgQ8655/^Պ}"A ikk|.x[ kj9]o2{}̷ ](Abm|BGUqGٿ\YYIMjj7|EHԘ?3 A_qq;w#c|_Rft+L1l55 VPϳg㋊*ll}cbD q8 I7oVik47mmS&4Ȉ4o?yT|ij55c0&|n&iW1GmŸY\m뜜׮MB3IӴ.8h4ZO\tʸ|^X6;OIIasH>|AD!!дr"//'&S7AeRi飃+AS? ~Nᣊ^7)@CA> AAИ &_! h &_' C~xb l(.~0'4GgN/"␟_5Xd_'իe[{{C.H YH:C \X3CsTEĬsB|/^ %ERu Hfze7CD~GLUUu))gCCÙn]-HGycee-ر&$8z"#i Hc>ԩ A2C6~|~zz^AL^~FKJزe7Jml17*@QUK#0p_gg~PWw57pZW_}FUTt 8)`,,d"fg_`d;;󮮷nnэmaa~R@Iö˿DS32ixOJooa!s͊ac@]vBdqhhlY!XfTz5ccotd+Uvr|[ɝ>AlUJ'SRN3 HJ:n-,ghHb8jjxwd X: 6Y]WWH%$\WW|`TԚǏs??@MӑϿ "w54TWa[Z[;LL,,44Ty3\Iq5kK'N޿"CwFLx;W(((WTTR #[r\b^ޭӧvw,oѿ 9Altqhh8+Ν>6||\Z32wڈL gdk/1CNYuj_&% [v Аcab5LL7εI+):w…C>ycѨ5K$%okk={YfCCmD וN/hmY288L $HSSR]/ rAnnqDȑBH_}P Zf֬zΙ37 ӛaYfWWqN@$d: Eg2,dYغ^jmm`ZZfiWWkkGǛM-,ͯƂGaW[P*ZZ:D/166og[ 3ʕPO@o$Y"$ Ž{t󖇄x=̧TWdG99Ys:--BpQVV AAv_}|\(1q!zMEes-Ene:;.r/]|*5ƴ∑I^<<</ U)Rd쌯%/8{VSSq3==/*j a'o ` {TsYT=MM :|099ŋ/z"0pCjښ|>%&d9VCC횚zN{{W|l=>[UV% IDAT.Z^S dv6>|ģ$ &55o ZVVM$j̟  鎯d8ߝ;w1>/)i3J]hf`ArqqrPhٳEE66A11D8…7Wv#idD7ϟHҰ55c0&|n&iW1GmŸY\m뜜׮MB3IӴ.8h4ZO\t|^X6;OIIasH>|ADH A_ijE^^NLoʤG~ WٹBwGnS CA> AAИ &_! h &_' C'H@}}&&LVcuRv>Ȗ86CO5ӷ/ hu]:~A\\w 9tC'I`(sLM7DGsqrttq1? C44J>yžF|\ŋw>|1la_! 7 ds|=|[ !"_ѣWUUu))gCCÙn]-DII,+/q'"#iDҬ=][{Ky#ǜᘑ?L}1&Ac poob|>?==L^B&G L%xy%lٲ؛@XA66[le誥݋FK?wv򫯾US**ZY?_ `0n2wW$#μ뭛[tcc[X؁C._PR򰭭s/TW F[I-j %"2.Ѭ32ixOJooa!s͊aSHBϜak䪪9 x_a13.++ M h k&m~d֬5**Knkjj^^N/}+y+ 9J)1dJ锔zƞ=IIsѭ IlvsQM LKݽ{#ӵk2D~;U(?OP}}S+*~lqtwBB<]d Uvvs֎x?=@i# #tvX1 ޽1mo_ȳg^m_+Wny͚$:҉08x?RlT-q۳gUUǼ\}="2.rf&2D^-[t=r``Ö/P/ hB|844uaN \>> vmD32ٵ̘HG謺zr/Nff]`hHɉc &&zgYT;w{¿!w<ޱhTԚ%Klmɞ=,VPdtDx1eu##_+))H8~<XZ11}}SXZNmmZd 2Y MZZړs,%vsgĬn]FoӛaYfWW¾@| !;O.7ADEљ̧E#7499Yk/EY[`0䱖YfӦhp ?@s+QXի㵴<`0KG0Y91r%-4;0UdE5=I|\^z:C""DCry}mmTCCnn"*{iq8g}}ڳg'$v dAjCC==}k ; r+싏4!dDžBA37KJ_D/4!dg|-yy\Dm^ٳyQQkOn-O7nL57EpԠÇ s_hzW+<YPP\^bI6n54Ԯi紷wJG˖s8BDVdd#UV.Z^S rrrYYa9vt]Q}$Ç/K_ĨZ[hDŽMYYZX朜"]|HcBId˗U&r#} !;ׇ 9_YYqcN1>/6v=J]hfC+(BC=gTy<Trq8 IW㝝?_+Thgyy!>iښښ1%~TD(h_w3O$|W057;%%9s +>QUDFԔ{TIInΊ{DJ&-`/H/ hB_Ep8\~~SyJJ `:W %>DҜ\ BʕL_G~ W%aYMv DG `0AA_! h &_! hux<}}&&Lx)Ehzяq/m4On${:i^? ..ۻ:tDtw_0Ȃ"# EpO#xQqttq1%EG={RUepbB"J\ŋw>|1ݑ> \X3Cs 8wy_RPP̕$1%OH1ͮr\b^ޭӧvw3.C>Gʺsφ .׆֌]6"[`fP#ttV]Z|II'33֮]04$XXXffV}12VRRu 2|#߹xǎQQk,IJ߶&{X͆&|}x1-fl&.5<^ILI!D וN/hmY288bGհ(.tjvm"kg!l'wlڔen>t7lp1CqY#=8jvu4}s rs#"hG/G'D-X`ukV}=̙7vY:=p"ri DEљ̧E#7499Yk/E/WZ[`0䱖YfӦhp ?@s+QXի㵴<`0KG0Y91r%-4; 8khzKL -s1I 99Ys:--B|bW y`,)y^RQ1\E0rKѭ[Ο {פ|>J18bdDy{'!艂"@OO @ u uߪJKݹ8%L\Ϟ=cKOI 8\p=:|"b(珪a1WP_v[ݻJO?psOdFֈuw__טlt]ݙoF 񦦦kO$dH԰1Exhj?<2]sn2,VV֢-N ZPP.MJ^us""h8G,t++㽻WHb>"m쮬u\E˗\ZO!5mm͂r>OtvMMC}=Pb>X̞iG/)5%%>z*/baa$rEkj$BNN.++,?6ӎts+*U 혐)##?+BCC ՜Sᴋo|A\x{M^8'*+&5LV(;{eRzBJ<ʪϟOPlRS/$Aٹ><ʊ;wp ~ѭTB33}Gǰ &//^AA9sߟOOx˗;a/\H ?R]U_o ,/2o#BB<# [[3[[3$>+UU=?zJ[[:0;~d>z+Q?_&&8x/fg0gwy8hVHd$MMMGX  ϟ/MJ:ݧ`۷Ν='b0J ݑU4'P?;~䞯uw<^6−˜3 YFKp N1/ ;fJD}}9ٹ@Ї+yy91C MY$3>òJ燠":zdADׇ!^  h AAA4 AA N8 l(.~01 _?"rD!? Gz<?\Aۻzu8_|ywq13h/-hEZa,IdH˕B\uYs+Y %Rܾ"PiADmjwskLZ|/̜CO c+BHSslCqMNkX>p4 #GlvF 5w͋/_NzE'3ׯ b#119E_J;Ѕ1473)КR' ̖C"X)tNNIy2a+bgBiiOp34ܒ]$9)*XY'WKH܉_|' EkssK}}#b8/6SW_84s4h, !!ED䬜?ckv_tFƄ $%-DDuuGD!J:; FxӦfЧOuII&,-ǓA&$<3fnNlmm'yzp|TX@~ M1/X}p%%[1;ӆ [&"bndNA6i ts k?"ٱXk<=m,:t@}}ͥK5s/qWΝ;1**-GRRbvv&2-OǸ'$"SݠA tul\b3Νvt*, ݱco!TUUŢ˒bӧo$~6 ગWЖ-K .ܸ/?}4::M^^իK?Lj׮񩼼s˗[,^+=9Bԩ gx"'RϿjFSSS$~Ν,5wa01YHQŀϾ}8nHMᲡ[ː7oskv=77 ʙ3^C6){GɒϞdfXfgGPdTTT{jY ojb޽+.]C]rjX~Bx(r.%;w!Wmm=[RiEf!{{w'b  Xӯai9CvvBNmq(((RFih YB@iyqv"65#Rg6!>*UW5XYkh @))}k;H㲭 9o1\J!//}z Æxy@wI!6n\xfP6)aÂu)o 7ٳK)#-2Gk^ ЗJ*((57p}4~0--吐5kl]\,ⷂ$wo+W?r@=Ç/\X6 -)ģ}wuu 'S&Mҫ'-40 #>I(dg|f=d::DI7I*((3g211oVqg5s/~0 7q\S>ъVAAJҞ:9Yt.r.A8Qoǎsw}zOތ'>ފHYD--_a1C#9.Eo8na᥯HQ,҉`ԌJHxH  'JTT|b/gff;Yw|TXXfFEees(,֬ IDATOQQfkgQ7lXԩ~bBKKDiiq^$PQvСMnР22qqms\i jj꿳Nq=T$$DӟX1C!9yqad|aa6UɯEQ׬ݳ'ń7o*BCo];؉jhhZ|_Q'O,٥ba1JڵرC^x7i&de%d^MqsS\XXVYgtxOP7;z ȯ]0 x_/,gI cWн7BRBXLEe…32rrrVO\|:,X\B,)i1jd[ kCX,H==>}hSmLL<º:o"Yir޽a䶍OU7ѦhS~X믠(bV>+PY q q'N' \GLp)IM! B?yȃAׄC"g JJZ{DF&K=01񐔴RM䬌=^M!ǎ&.>N774t=w&9gly?1g751W1!$d{6,{yfNo?b_ 4I7mJΒhюXD!C`wkxm&oyrPSONyJ( *tOB,/("BkSKN{~KH0 tm>S܉Ba "WWת0ԩY,W]TUDE"45Y%))0AwB!.L h_G_T!bJ%?p|de9-xmmլڰ!\]]qfe,]g׮|}<=mB\I&^233TSS$+*}0 IR4人cǢX,ցBOa'K3024M:k!BhӦKK?'{ {3E~~ 缑p΄ ć_S̙BߚBRQhqC}}AAJ~TW]]wo؎V#))֡>|Д)#][pJI{!gP@55ׯkj.jnf<-֭[73gz#2p GYZޅaܳqlyLS3$d4Njq_)r9^x3r`33ӧcl=4t Q3B(9xCjԎN))OҞ-/HPBC((p׀ zC>B }[U]]A^HHuvWSv &F)+3-kSSs-^Zy?Bx,QQڵ~=##000²܌[2>XSڵJaW]ꯓ'!i38*((MO>nЌ\Tn`Hx*#"--NӧBH__0#"ۛc+줤B^E]--ϕbgj:r(u ɳuuu mƇbg40.L vs ' ss_;M 1-! raSIi釘t֑aoii%N^^AwEj\0tĂ4555kG޿7djEEuff[glzxx^ȤIk44!h4*1|-𒓳O!D Ϣ 66Bf.܊IWQaXM͗6ᙛ-((57ǟ<)&gjs\6{ٺ*a(Weeyww%K!ő 2طu12⠇@7 AО=8+)͟oz~ï7Ϟk8[bECc@NNqP5;::"vvָG M~}1gx?²l:;[/0d󛉫11~y۵e)ZZUFkk 'OnXZFF拉ɈG״a߿],[[yngpp&%%VVV[V,B(00>sKAAfN#766ϟ ݰ.a a{.['%%ߢtrGZSC'00~N$.ݾ|9)..!j V`|$+$]\,nupà+0p/W@ 7= k7.1: 00> W@ <ȯA~+ x~ | { x"~ ڃK"0> W#bqvoiOm Mbc "~/'a?fQ?Q% ahS$$fmۙ !<=0a`>BBHL|̳=sl^x(~9z􊢢c)̿7k3N7߹|3@Y'4y˗>|] رԸ܋98NK{zŸsjnf ӸO6/$##wXbʉ_|'gSl9t(OJ\2VVoXW577r/b]K]dС5.~jbnk++H^~sF# OT)ƍ VIJZ.Cfk爉MohhB.1rrSY^JJnW&WY朝ފN011r(ӧA8:744.B|XQr!9).[K &O6<!`p! ؿE>㸅fzz"F]`{KK YJY*!ᐩiێŋ7n@FF!IHۛ?_bvYܛXHx8;8얕?r3,,5bz+(::jOdO\utY|( y{/:u*A/Rs~!"rDžj/.'99-!!>R<#} +Ǝu;|rz7o?ZOjeeLQmo~۷'N\drSG#23"J*(\xk+lQQٷRvr>v,z/޼~Mwr׾p<̰tͩ*UV~nll)`o_xC̚1clYY%9!&&99纺Z8>w֤켼eFP6m4jgf旗*HIy>% Vϐm3L0Bv/)yoԙǏ !֬ݳ'ń7o*BCo];J:''gK:GaЃ͜9."⎯ii1cܾ?l@Ю],ѯpǎ\\,?5z :]xիwRB)(XKIemv߾FX,MM%KK#ޜ씔'#F8666#o!޽g7 VA_??1񱝝ozz .l`e`ukҞ~\uG||l(ka1vn!$&F VQIJJ|{bwXҥ{MmR/ 1s/Q1z 11}==m}|Β VTTy%ț7۷;ltRYY~V/[Y`;2YRb(WHQ d~(ԧTm_XWͧh)4ڔAIEf{{->aWz: zϟBQ(aajiG^Z-jkP(/=|k d˖{"(He犊꺺oE]qu?S(ul!ΝY^QDP(1AdZyƘ:u=B &**!t*II1Є {jme@ta:]F:|B SڟWA{V_hlq#!'+iiOUT,-kkfe}_І ~j74+`=v3ki|J21"YIVVѣWLLFKgg͘ᕓS,xB߿bI3¼e|X`YhGeffZӅ ga.6lؠ~dbZ55>}0 I_͛O.\=%IKKaRRф&5;bZxjzQo^^ B6}_Z_? PtB8/--8O/*8gzO>Ν3g9sܳgߚ2iyܸ׈UUp<ϟ xbFF QD[%%8%⼶u1kBHDs q_)SF"&M#0 !K56R^㉯^]"ҥѣk7Z~٧pXb;w=zg_߿ڡ)$mm*U۪BBb׭C]sy_Kx!4l 1cVHKkk0Uq;q\xxbs^B£켼8.//={q":jj*Ϟ*Tx6!!w>/)/zᅮ=:gJDC| !d$ TW)(_8'q٤** BVBhժ922! Ѧ==iF߼BhrDq%<*#Bh&{Sӑ<=W 0ڪ bݽb\_Ux񇔕Sӵ9^^A˖M/-!dl>GUU|XKlhhP00B?}}=z3FARR55_]azU:yYgm?7nhFF.q50B $|V;vDY[<259jvffu!ev܏NGos3@+;(22100m65n +ss_;M 1-! raSIi釘t֑aoii%N^^AwEj\0tĂ4555kG޿7djEEuff[glz[x8kd'**2i e!J _ $'AQB8çbbt G(pj_ =CCm.GTC9;/.~ }.[#AARPy hWCbbtǕ7{??WP~g^5 u֭[1 V ۢ1 '8(蚝dUrIIQ;Lfk\\?ܣӅ&_{3gƏuyttjaaĉz+!&F'{Ζ zfzFLyvrYp2q-PAA$%(<#aXYYeFFnY ݻ]¶RB&v46GT &ϜRPٹi{*z ݀ l۷&&iiO gfз#]c80> Ou˗2BV醩G@TYY/'8buCWAƇAg0? @0~"8W4p0> ρ1:a0> W@ <ȯA~+ x~ Y~ ~&8W4~ ~Ƈ W@ <ȯ󯠳W~&8W4oIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Mixture.png000066400000000000000000000210701307543307100256730ustar00rootroot00000000000000PNG  IHDR`<TN IDATxgXY3iJ,vX@,+Z`CbTP V((*+ֵb7(RG 4B}#3̝;9ܙ!(B!TDry)C`B! nȚVA!B?LB!P% "B j2P&!BLB!P% "B 9uBՅD!;aMx#B&B!T*5& 7SwB!T7b4=M{:kݺPDM۝,_gzoZvsx7)~A^t44[Xx?˯&H$_RI]TW)nM h6{ 3h}~?W}hANC/c>9*|rN.Rݓ x0/Dڱpm˞. ^R?kNQh5B~*<!P}2g-X(A Si1&`kfϹ_ Y7yhas{zmzCǗ$Xzp@+7ۖ1xnŐU. {3s>_s.wmi}/&FGöJ=S0Nc0wEjr)́ ݮg7"  Zg4V uw>nTضۂ?.}s,]6<+Teۄ;>v,AX4 ($߽#AX6ΗS\*zk/!P}U/nmOt֐B휮/7k烕 z'ߜ"T nx -2o< 8\حH^s?$;!(zqŢdЩ]yEgO;$Xv7 ~+O}?*wnQ\Ѱ6p ,LsgGJ];.bj5R2ܭŠ_y$s^v`yO@뙂)vtu?tmaNhtUMhܞmM4sޝvs'󉪞=5!k~%#=QJ^(lAK7/S[{< 9XRK2AAMb6`dKzřtNiJ#A$CJ:ܳ&@謡A`eeIŬw9@i^' zv ͖6V#’9m8)aȍmŦt'Q7⬴o NZ9?,Tqw՗}0&q Ўd[`_jٳ;__ FTHRm}P+<=˃WdE2K2!)}o5H)b=gua@Q۠E]`,© v>[>0wVoy臨mr&Jܸ Lrc$3>YVx(R.~;\Shtޡ~矦Oc#5ZNtOxDXV+HJ nEV԰)jRE]>5TrÙ5"9 ({G 9e₴O\"E*QjY>gP.+reSmÃ{I~gFla>Գ*}A!^- Dp?;47e8g˩~ ^ߜ-wHso+3nؚPcؙd4]|ҫ"u IjLOa:mDɷt-t5r85D _iog:@8NƁNn-};O-={0A],԰g޿nu2qL XKOnFb/~3rh}*ѺJtryǥu ̜n)vϸ8Kn˦Źh;vц*7QkBk)fBLX<+g7çQxmHuO1$\0;D!P%6GQZJHK'7yC<}/j]uplqĪB%_Č3?jB?^D!ŠZBK~8ʈBgK)E_VrB$䕔$OI2Jjh͡ǯrCJGau4L{W5 h}kEE !#z岗<g4t͟W_7oo?@Cm@}H.C ޟ^ :/Tΰ/l lagl/D;G1$ בa}+2bF]kpArK/ҎQ Xtnv;τWS'tpUg605j^LY1*yT/GÉ +W_ !TJ5 HkOgXiKL݉kxz|bzzwl}mOr{{p/CN<~괼k)(wdIKo/>{۽ '` q}ƚģbnVuFLzr8ę#ӎma0pHljΩG%W'8Wxh>&!R !k2>ɀoju׫K_- *Uz)> ~]ϒ:S34BoULMU^ ܺ[,A缷g(.|~HKszVĸ֚ͰZrAVvdNcG. 64d:loP+_VUNӢ+1m3wa}$p5a=Q̺eypƓ]MJr>yJm~GӰE\uΌҒô\tA.jTwAV7N4QOj_ d> Pd5_Zw9e]Ì)FSe'FIo:H=6яrFZNjv/+x/RW3|es3dvHGhk? m$&o'ֳ={YeguYI-VK^﷑_GxVU"w0)%x/_H740aJXEQAF:|ݗzMnBg%:e*r,m'mt }tnf.A<{.,f.V]sXᰐm/zukvySV)j>@ZJB)x_ZzϿH(2I^Y^$)KZؐ:WQ"gxk"h?.rq;(uuH 6kar\]2땨7~[;gLAOrL2a}-YwZ\hڪ(^C^$4u\ֽp|rA! xQw 1iEӵ]\lkV+FEgI]$v_ iNˁPz{iQCzѵ떣7lo~Mv k/Q:j-,fW"|hL%5EuugeA]fo%A['m5MWJQulsϝ8lv l K}iq}͜u/DNM~qâ}Xu]_;]s1W>pCB-}xfRu7[sK)wƈ~ǜHI7'߿~t"nl1DŖwx⫬R~qkjnok-%t?6fAN:.1Io "+r]a>o][l=Ta:W"xB>0ѵC& :|83qUY:~ؕN/\}l2'܄ev=ws_윹B6J <{v[}Fҗ_[Xe\9D/ )t'T;EQʯ7Ḥ׎ϱ~7yȔ 7VmW]dj4vֽ4yOVQGZP_~||kTeOZf&su|c{?֧HS;_'!3JkwJ;=ZY->MPe5_2]aKb=ּa䝡6u:ND{pFC+ڠ{%.^U[%8l[ƠkiYo{66rd2}3 |]OӞТ5^Mo9Nm'^1<CW+,#YEj#%z9V3_Vu:B9wj!Nsmv[gѥtn>Űkcbut"j-:ڹVX>d|}kfȤ409`Tk)R6v3,̪`kJ΃&I\9u#AnJ_9(b"~~PO1ךyK]7l_l 9 >s+Cke[w8 ?9ݽsT_ZHǼ 4Vk6t2rUkI> 붳?yê)ZX CZvTao\FɯBiw>`|sLf\侈°OpjKݘpih.·|V#~Yd5ξ J\GJ%glKv^[Zz_ѣ6".pz}YH=+''BڒA9^SR.՘ITڒ!ޛn}UdM!(/帶iɐ\,6v1?8!|i/&8r>q<:];Ōxw l ,!H)$JnN=MnK) ӈ-] l$+< "Y[vI%޹ H X6<2v)~>Hgꔖ\T rϺˢ4Om%N%w9@i^' zvJA -m+Ok7R,,YӆVl:Mbu3+J)z ծ}\h]n%3Di# ;cm86qk7 4+4qGºt "UKc:Z|^ Ewwc8U͟쯙kP 2H2AN]Yiu6Yd .HHWiy8%OUw!^KizۊrFڟ b\_4Pdo`~[m*;>a2&{4e&j(sZ1&8h`֗H )=ޔzŤ@n ١HҼ6JɾcT:Ɇr `qY4LBޔ)IWN͵91s.s_qv6:XN텙@]4*MD@UʖX{)'~Y CxSxQtJ5PiUeݗyǻH=d",WODXx h'JI-9/8Nh$u9yTTFRpӵK#WGDE~*(^k]*@6RUܨW17Eҗ!~ .^z[ӻC,/#(7[8ՎnVVnwvߴDUmH- *tm:LUq /t,TE&0HKvςB<=N_Q/##zS*F\`ϼt!J԰jMQoE {x>i@QO5\4{p&ArH(*5 QaAr: 2HѺJt~qGy:q^GHiovSF]KHO8M IEqޝVTyK$AӉ0}|-goN~OuɎ)b6}?;$s3]=yn\M?@r?nOkD!n ssKsÁZ|v͙~]>so+3nؚPcؙd4]|ҫ"u IjLOa:mΎo-XIDATuZk 5傭qkˉTtpl-܌[~w;(5,[za> Ã(Yaωbd1k`݌İ1&_fмj Uu(Q4}oåcw/gݾ˟\O*X$qt{LQq_ɮlz 7Vey z ohh-ߓU!f_tV3AyM?@r?rOkbFHY3R'\3RGkX,~l*解쩊 R!/4$\0;D) "BRt|n?guj^bFHYxx!$NB!TDB!T #B1DB!D%fB!T &!BLB!P% "BJ0AD!B>ŌB?; +2u2[IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/MonteCarlo.png000066400000000000000000000310301307543307100262760ustar00rootroot00000000000000PNG  IHDRy> IDATxg\I'!^DT)"ċbCE ذYX9Da{,t^x{91"UdK2KBu nd3!Mo* PPé~ѣWhlUՑT~J6& ђFwB,,8ij\s17FɵXRlDEщ ''E}4q8{/\[HգJ@mv`ccsuG?.61ў9sxn\pp8l2SBBkW*ثWJ|)pȨ?}ukLPYYUw>-%yz4;w$P$..PZZ2kLh4F#g8!FW9|%%eEqq)oȋ x:tbbhhjGDDf_޼yGSMZ1śNӴTbɐĦMǗ- hs挰2[h7K$T9d-\3\aT]͙={'ym3u-&&j]yk#g4w䅅>߮|[JUѱIM:'/Sff.ښv)lMntJ; .9'Cppĸqv{^ӷ`۾}'Q\]]];y)S6}4Xjr])߿/xm.ozF Kx;uxxxԘ1bIKUUճf h\.޽rrRt:vP^^ zzTWwo#?paI'bT95-PKQQ/Wcf ߍvK%gr]3@ 5%%{wwΞff:?ѳa||aKKK&]W I!wiVV^nn3'ϱ.6G_;LL'O_f++;#G=th)oZgǟ>>|-,QIIy])dFF [[EEG+Tɾ8wm5Ɠ&wB}^jj}I}ii9CZZ1ki}uΝIfss-FTEE,-wcnn5{\ymYYEZ{o߹ |:ّ܊JutԂu5'>p8;Wi?|$ڵ6GN]<ۿɮ]z0p8J#FO;eZ-$aAՠv ]t(SDDDGGmaqqjUU%r$111zu3m&%%kԩ,8}U\ &&Kku],!''5o,"**|ٳPOOr**VVJnTQo- g1|]!qɒϟLu ERkT+'*(4== z1yaggq욞= \outVWUU - vN]msԅEظ1?꪿xq:/k$o߾lGw*GoB8~1 5~ّCc j $$d\d8q܉4hPJJ"4tU͈]PJJ!#N7 t"ɸr屈]KQE\T`Ө)5G #<!Q!Bm8?Bd_Hnn !߆G2Zq(7ϟ\Zz˗5v'N0b&Bl(lzԏ||#Wl:tyJJv3!J':;{;;{ϞC,րr8|T11{%%i6Yƍ=fۋL8yV֞1040gjUU5u:Ub=V `آopp =9Rϣ ++˾}{0119/+&$'resbb7 OW(+V^}B{ݜ>8pdPn*۷՞znN¯jûΝUY]YmF*-14%))^TTdMfUSSK[[ m1;;UWsTUnީS򶑪%9*~)aK)j _ ޼yI6P71 '@VVo~UyԳ{&&uePQ|Tݻ~s'%9*6yyM=;jW$,qc56Sxֳk]̕z6c0DHP63)-- tqV_j<71P稐'" 4G @!'6OBpB!!Z,օ_kw_hn42\\\Kܠׯ6iK!_&3 RLH(#+;hȐ?߾}H[N8]x$~-ǏdedX#F;[͵!(5^ xS˗Ypֳ9sv6kפgѦIJgީZNB +*JJʄ)+55gRR:twuѫɢBm΢vFF/^GVvPhͳgEE C60428vl VE12,*jb 07wK/h4vRR&zP^^[ =5uVTTzy50;a:4;AgLtt͛CB"._~DDrs {YQQ)!ȨQlgUii9t:=' Nz՗̏p<>u &[(?yyܑ** $--NJp8ϟxVYYenǷ&?YpLK>zznjE-iw~FF[L&@]lСɵ*OϿ1ٿ ɹzdV},ᘛR<}a@nl΢]{ң!VdyY5-kBBFII11I 2;59u*rҤyYXx# wiiBpǎ:Y]9z:*rrRD"<0GyyS6 BpQÇ۸o13duu/&&2YLL&DG'QvM""{ꢠ ûT:y.Jmbb;w.jQMC?ڱfuppxDDK[))qu^HTQT 攗2k\ɴid~ +W=lXxM05@LLRu$))ʸV._~lee,))ί۾4 !Tkrff:OMMRgg-/ 8O"#YbcStv7ep7˾[hkzz:GF<͛ 33˗.]: g!qŋ4ЩFMHfyy)ޔ˗M2 Тana(..lYPzgϒ [[Z[+(LQJK{}AAx$LM}=+#"m#Gdgf;~No !!F>|ǯ'1ի|kJJTp'6ohjWW?88,;wQjB JJ!!+>|7wTG @FULigS'#_H$+Ls'VUud~OXZ++˅=\TQQ Ɠuu]o?9a(+˭_}C#GzbrINeikw[OL{* w_{ ii9Q|/ !jh ί_ HÖܔލst˻ ..Z]ͱӣ^P1lvrѢZuS=='nʕelhJ!E>}{Ѣ< /`ggC&@c6[(D\ pX&"$ NBPZ QPZ1&!0]c<0DMC!Ba(D-/!j Qs1Ƈ!_8fC{8VQi"T|59t誏T&)F麖UVVm~j֙P^^c|Zu VBBӧן;V,ZQvg^Xx;~**g\W@v륥]Dڽ{I;N>x];Ea;v#*jgl<֭gTЛ}Ε`jiQڳqq{ G\]m'06i4a`۶]N$"b+#hm=ԩH[VV[[3iwsC+"s4[D6=XQQIZ׳!_p⃺b읊NǍ[sURիO<\c5@Btm']y o?m)o.]z`l3ꄺFNg0DS9r11fnBVV3ǏsIIJJ?x[<jQ3j5/5?922,1ݴ:tĘԡ!BRyʕut W:;*))e˂Ǝ{7ȨSiiݻqdŋwOɓxSνzuy,yҤ -7 h$ѾIMBOGG>|URRfmm2dHv=gMo.]t:}”|ृ/%w`XX;w.+(..۵?ճ!vN{I=zɍe\;U ퟓV˗oȋU&O{~ |!6wH ;&& xΎAn:t*Uş?#w>^TIn$>}TWsu+p-Rαc=z 3xښC FQMXONNrrGXU\r?4ĨkHZM(ݻj@@y!vlt:uGaaX;efHK G&44ڑK0Oī}ܹ~9jd4yHo9**W'@}}M{zy=zBi/k7B Y>y;e@99)dmmL:n7^p\>;zt9I7O44ڹK44Fkhq˵cs˗u4VWו1cliiCfti 9kڋ~ɵ7\r屡D11{qq6Ϗى5v> ܰa%rԔƌ}`W~PJJ]gYei,Z4B!_Ox<nl:޽_p/%%o߮^^6z4{eeYggkYŋG34Ԭw{kOY,qHmInHHQ@LdׯG/wųf = 1bǎف -,>efwڼyƱcAhu&m'#Ê_n 2ղɭu? ~81_}[ZZ}ʕ`ƝFEE77ڲ +*JJʄyn\ƍ!cEERwҝ]\||}CԜYkKJ.\od4YLjVZZsHӷt䢠0+#ۣly:d0l788…4Fcsd8|T11{%%i6S]YY@VVV6}ͬ+W̑q75z-jggѣW/^[CcԀdfCΝU/xQUUZp4xpoޢF{b8BZCθNᨨ..ԫV\ڵRR׬z!Z׮=IL̼vׯ?5j>UVVy=MMԐ22TVV Ͼ}]]&Ü1 yyX1!9ؕ+3yך1ĉ[$X;wWLLѱ'o%U̟?} GNu?~ݣGy_YY.-h4>} h?p:u* V\\><]pP[jI淲2./|%jr(^}hb Fw1}55ʪOqv*KۺdUU5YQYY.(hqǏ~={-Y2$Vt 1Ϥ˗x%n}fΟSX{wEE}vR~ׯ%ԙo׮i|[EEA]]YIIm^kiJJbcS~Qo޼ˤINw IKK?zzƌp)%%YGGdgB6D{Ϟtthuu&h'&fHOr&&BV՚Bb0D'n~*--'99k߾|&aC723s7n ?'CJK˧Nݜ:a:}} rC2,!9㎊J 8Oŋee Ⱥun||'%e|ѴikokϞ\nEfULvr՜Uf : 'O2M8gvv>us'VYYBO#CZ r=̛,##ci/@qqQKK!Cg؟WWW^rzKWWz֧OElYHJQQ&~ qqQ͹sG\18)eew/1c֭'7n p8::j[P5*9uj;۵&+˲5>F 8YyeeՔ)D u5[7nt#xC1e@ޛE5<3Mٛ`z?+ߛ5kGjj(DG'ٞ))!**]5Ԅ6ȑ}ܺl9QOQ+7zhјf j#!" 2B51 !!0"`(lz4ӷiB<zz0Fcorp|CaӫDŽONnW\\lƍ:{¿8{>BzCaۙ_EE>>H|'Wgf˗z#//ݷoW99)11&ΞZCaۙП1040tpܾ}v~;w"bFo=EEB gGhMGmsBCظQG8݁5ϟY /=!5Mϋd̚5|ݺuTT}aT/gGhM' Onñb*ΛjAjB#D|kL菳 +DM gG~d$ =!`T!DLAD|ö90ݍHYӮV'_H־ ͫ&ƿz}7JI?x&_^-t@9 "ǘ[25*qnX(2y_h*;If Rj=1il an9CD/6%kS(!C\g""5/wYuHF soX2mP$G^OUkO;yx" =4y{Vt}c .e'x1fק >HڞM3fmݹg!&\t+y-׮noۦy}{]5FzȰӛ zH~ gWMz-ȩ17>9;zhXr0TpvßWfΤZz<Qfnh|r5,Tsytswv$Q|n7-3=Klxfv]IKz'wQuuPbA"b&U4P.t+v8oͬ 0awYe D)qAWcDBD"2۽IK'^k\Tl+0OY(L nu>DsYyowBjPثnj/#=Tzu !E'_J=o%o")kZMfX~0$cطWYk/ضǺֈj=xk#]7Ͷsʚ8;<$򗎽iKsV&GN|OCu(JN@d&~ś)[VF&E_tl^z|[Bʹ[#+^fIpwiMD?[W|q6'8<΢9ÎYjr"Qԯ}6sS-joTKо@vۓ4֐u'N:/k:yӝ }dgI̮ڵM3NO|Se8.:gj'݌|}rP!P5MJNf%ĭO?>z(͉ZPC=eo 9He:ːg+&"HH"H$aǵ|,X/JϽŁp$QԟjV31U*]9]W^$O$'u5T˒1C 4t дdPլ?S<`fˣYӌv{sF$XcmR~<;elxe!ҩv%[ HEy0i=Lӧoy߄bQ:&͡~z>,JON|U#Zr.6.:}P,zZ6:CP>e7`qz]G(KbjW_ӏ *:(whڽ\zmbS+;N;7[Q|M^^ug,bҔW323|QP1󤇼8${ɹ5ش꽫{/ S@ &?GFPNݻF6${^¯x5TR߯v=&?:o1Mtkn} ]n: p F7a)iPa%@Pįƍo$E,+fg0Ӕ\Geu㧛/|c:ڔ%jmNdؽqG;,`PmشΗ- uVx.>M,""L#}%9ߧK;]xִ㇤P._FiPAūgXc=xkZqؠ9."""C(dxye7FW?,(^ @9.{sFa0u vs˹jF:Wog7ԕOl!a"0 )E*B96p5o{$QG Q|h{,g/l/R^gleT^,͜ZS/#{nPbx"'<|>,@E9b PC@ yv'<'Ǎ|K:kB[}lOZN d dV?O=~~X&+d2Ą/ϏgfhMmq򉣟ѫEke [@m]w7\(}{?_Lba˛w\K&wyZFY&ٖT`y54mdrWYWrj:vsѬdR~j{sm,j<_i̬]oJnD76K]"l1 z@0L7w{:+#+ṋ]ҕ?H[KџR`@MQΆ!R-@~*C*]: djk| )_3 S.+u^PVZ%-|4 @C$/DBd ZC0B| @q !6%`PV!%`!Pk@!{@0%(C @I@( CP 2A0 (CJCuFP5@!f!PJX e` e`!0%]u`@!`!(2#U`!Pkh T!Pk@!">2P@!†f!P)@!` @ `!Q zG*5C @!A&C ZC04kG* 5C C2C ZC0}d ZC0j C0j T@0j 5CP #5C @ JCJ@I@0j ȠtA0j 5C#R`:B0j ( }dP!`!P ȠB0j 5CA`! TC0j 5C+Ai`!Pk g#5`!6`r>2P@!`>2P@!P S5P%%](% @%G)A( Jp71}{,N{=~UŽݟv}OǸzꞕ_zƥ!B{I5>g4}Տ^mQxlI1+׾;xͶmq;awƍ{Smn.,;o{f\6׬`Ֆ~qUMeD|㍥9WI,!}ODr}eDD$H$ d/[פ{u^}ڡJܫrlS=, ,}dyޫ<%tͪl&2l枏$?MBn2B*POMWó=uwĽ5a(N6ÈK`>^no! (z?EPܠCn.t?.U$LMxu?õ5eߤ4=Qc҈6oY쏌sX  @2h4?8MкMkXxwKD{vk>}xއiռyJ&mlWw댁,Vkg ]B()Zbr,@bJHY?NDBťgIBJ&AIDw7Ps%M0Az^iZF@DI&Qi+&-mRg׽UG'`AN'ȔŶ2>rᑰb"qz[;5hPƆ˷XcsVz1-K  "][m( ( S`(Gu^pKzq4ID8f"I#kH,Mē߿Y9|n\QR=\6jqhȏMm"X<E޲ω\&;㈨O2(#.(^J Rui|Õ}Uyul &X1/On/ +"2sh ۣ_˂،~ 2ZXzČ|]4ҭIWƤN|JIֶ jr-{Y;o{(̶tqzSSQdSC+g2F4wOpmo\&Y:X'/vo- KM{^UEKO|0sg^/K:Ndܕ˱hǑO70"Z^+ gg@i!DBNgߌKohqK_өHDqOeJz+"܈ru7"j0tS"J ND:;axؤۺݾԿ&[ޙXЋ'W4QI.aAzmo),mL\{y<9GOZ׹<%{D$ p\=8poNHci>J`kJ]u?B7L e_&'Lyq*pm]Jfttf|yέe{N$ş?]3h0)V["m&maJrPv%!Dǘv5gcl8= ~fUSWgW+{Եi'ZKĩ|]: 2^|I ,2;F˵oAD$Ne؝YlM0a@ͺl-`@9~֣VW_51b"N2SwD=[n W 9,Q7/ð#Rc]5tn"|%V\vշQ*i(-y$]}HqךD$Ʊl #a/Ro쓚ֿ>$7 >L5y>ɜgF>Ra5 J)r|#SNDu4:Mfʙy /nǧs&G8-&v:4(q<,ƅF-7b߈K]{lWF:دv^f|~N":JD] 4=z%">o IDAT.CD”Du;L-rXDODv1Q— DUJz^+Ri$DD_˟.O,9"$A$fT("ӤoQՁ(wP?"ZM֚| &5(ZVUDdhGD ߙtPiܱFn.M BD_/ѣx'_x%Uψ kȋqj6DD{S(]kԶD,+BDC+jSIrw&!1DdXz(C"2h*n_%"vJP&ʟ*żBDuG2އD]FyUuiKyBa6l7&Q'㬇M #Y J ED?$'Nl#ʧrwɚ{iD]'"MöD4W":¾v|ADUWm~oxoKD?![Y޲JZD2!۔55D"w7B'Dz;*Ye\DT_FTUY.h~\"|/P,P1y_7I)"3r"zѳiDԻJn-J"!,2 F` Q`2l*S{fSq*QÈʹg(=]oHm(# Kh"*eg/|GD-6C^k*FgD4-8&M-9u=6Hͬ]v7X۽kx/=ir"bT(!i|=mO7"JD3zQ󯓈]RJrD@޲(*?ҟvxWe/(9rH7h%}/ry73#"_O& Z"YDDIQ9#{"`S?ϔ]0 L\]F9٦a-_zc3HBr[@C?/*D" i._ԪWK>H" |sj&lgRq)%QU.f8+=9ř* ;w\54lbls?^gMu\n3A۵G6Ng`$D"T&G A͊l"z\)7D" .0Ϸi.͚`^ۘei7kE/WQH7sy³ݺ4etM*qsN$=t~m%>0DlWUιuMu9iguue_$ҿ)a4u˶>_" z3gE>ӷ!1$\𴄝Dbktk^|M.ܾύ8g6 LVYC%Mjmw|ljE[fAQC,5iV왖f+"h]eq}U/9qnD;<` Kn:yqKs˷/,dE+w#vDnr3E=Sk^vOjjxm"M.9Wt8?j8Ѽ)c ̨$ 2v7jaȓ{Y*F@$}v+lXYYJcnQҘMK/Dԟ౸_C-.۰jEX\vMvi;bb$iǘуut=t]x6®+9Nfѷ{ݑsO QԃEiQ |VdZh}˺S(>dcݻ跦uV)e;&^m~ՕIEDm#%z-h謧mbub;%|=.ѷQQ羳v4Ͽ>i/3H~ ]ٝ5D寽XU?zz'=MdaAO6t4->Dtk:na~K!f$[~@yu/cÀJ~"r%HN\^K?ׅ?,qRDebK!":/NXCG.GkP" Ǝ~`K SD$U)9&-}嵺G#akM6ӔH}֮xժtry#"S|#ӈίuwz{OR` l澢/2(P)4o,"Z`tHmi㲾DMjX-/aѰDdwF%",.<MUyfU4o?d1zQgS"QqnW?L@TϴJ]: ?HjysdgID Wܥc{Ap#]#U"4[uoa' "~u }f~]AM_yXqh ˺" cN]ݏeM+tk2ٲNn7e F !q. EQP]z+h"~]:7 i-Y5T :tADGx p/? %=fHahP\gQvw'=;5~8vӫl`rժ MVC;~$$)c.>W3""벿6e{}Il?:c>D"琧BZ'}vĭOw(͉ZgP#9]o)o딑*[u (1 373fKRv_f?EzXWM| "v]1.zu)_Vyr HBdgjl?5~YUͺOZ3sÈ,&| ͘G,?\P0ҘaPV{C. v}#Y߫.G(~zNӸjw\ЈDX äZr'7VjCeg|Eo|2b<&+Az_36Y穋uFN/g1iK/!7nb̴y^+Woܿ|˯q醦n{JyqoIb`+;N;e?%VDHM-vHCD$Igε!^Fbkd}m~? T Gjk3 "gؤW7"z)CD~' \p:`[u'"o%"~fFcz m"Z8.z?a8kNN  "(T¢}hz笟CW4QI.aAÿ.U޾ވt1~3*x^a"R-C?U2TUJa՛QSp,g9cȂ44)5 Xl͸ڬ>%T>.ቅ&s^֟>Ll.Ϫ[fDkgU1 &3p۲\"DzyFwGw@W-ĩ 3),J on2cg/4hr/ Z@Ŕ!tA\_(zc7h[n7!ffv T4iHXb$ĝK{}D|PTӨ4h"k8`~WrlG.Ͼ{YQ羳v$QAsI#u*N#"ilF6?l^\VzwGV(/ @IA7YnP?p1XҩET(>Dtk:na~K!r7"݁|4~P?s-H4ͷIDTXvn~ӗ1ae%EIwI$ '.m%/:I- O!tq]~[C"u^y|\.Dc0)P$]Xc\"//pP4v?]Nx"&" gQZ>Qg3"x+Za_ՈODg *HN#Ud7=֚l)](UFD$FQ#_w=|ʽ'q"ӕ8v^ve`7~CJ:]mboȓn -<%UAߨijhQk"Q(*&DT"";Qi Q^8Zt5"YDDIQ󛞈8ѩQgHzi5>#BDb"λ(=Cͬu6%"h[pL8>[峽/iAmO (^ )׎qMtxW>z|`}\&3O'%3b)[^Uly;Oͣ \ յ "bq٤ =f}`WW2:ߩ٥6?jӜվ3/Z專hx4c +0.@z"1 _1mH1/~]g'mijt4Y.CD}U.m4ҴtW_M yDm都?%Mj᧳ ;7ͦGw:,:5EzVc|ԴBJr$kβ p F7aY~os!]赊\`z _,-=Og4 ?wۮtqCl m}{V")njTeh S.Wy[/NC\UbE?ڜKVDvT Wq[=D_o3xzڹ%چHoU3"qgZ\6gp[:ede!ʘ %9h"$D"a<"=)͠~?ZA!6T\gQvwBDL5KnFl{8eOEzXWN>:kB[_diqOx:\T 9X5P~M6؄"A芚ngg{aDb_Wn?Z{~hMmKKE?9WKKAP4N[6t^v7Xz:`WOG?Eɉ}Pk]߳4}&~wÅb;`Ië'>;QMUR?idQxP*v0TqڹzsmZ;cX鵜Š^ݸaዂ'=䵾a\VLQK%Kj5ϵ賫r!3kW[ތ0%)YڹEH">/x!RAy@W7~[3룓r bq۷.*?:&5d{{? }=ّC&z<{k.t6|⒱Fq[Z_rNq=/;enhׯ϶9dDG]86}eߣmЅ[/߸yg/K;ݯ>7 {iY6=ݍILl[[?eW]־> HDHrZ,911IUS JT@=^EMfnn:躥~Oݾ)XӺ[ҍֺ<"o㋘!IDATaeKȍV:9KOСݍ3M!L~v(T^}xϙc?FQQvĤ{!\iYR!$;ϵc I , ԘVi=\w؇<-|V^[xVn'xFDw!I刨ίMD$'w.ȡ} ln١e5$_6a觇r 7"xdKFȨc0)`~#_Lf圦(c.})l*K"f5X":o5hbK*POPo6-ƒK,ʕfIR[}׿XBǮެ1݌4k fBnec謹+(B@)\Wý[qRa=cfTZx6Jw)*_sYyowBjPثnj/ȉ8xey}mCI}s&EW%~51E(JM{j(=Z_MD_Rr"?ud1̢F&~b}C j=xk#]7ޕ;رq_>תIb =迉s_&gsָOvkm5v1Qa6mmVo mo߿ǢkSʶDty,)kZMfX~0'd:lV'5Fpc^ASg-%c_^%!(q^Hzwm=}Њ!7 *&گ( S-{:my1fBzt3=]aVwpglB""bu(R`u6^/=-!-ߑV ~K]1Ɂ.@gtuSoQ1WQf՜O=:Mxey_ڛxr@w'n;1Ԇ>l|s~8|Yb_g^Ӈ`mM_hr^ =DKۯx3eĠ?Pszh^;VNTMa_nkֻ"!\P6 6y" =" l2wd;g?aֽ}fFlI*D\Rs-V((- O,_uEޞjuŸ٦s"nV9^ Rt\7ЩoI@Y(W0_M/Vy׭ GWt;^aQQR=˖Ut{olǤu o sК^l;D?9WK~WͺOZy.\^^ROѸ TjjCeg|Eo|סC. v}#Y߫.GHl]]T{!=4&z,{pNʵ9WCY&K("?tazXhs~y(l*EʎͯckӲWvrxujZ}/ j=?f{CKFt&i$DDS}0R@=V]iE!c,*xy+Ud9B7䠤!b`Sdr*KPXT~ڑFBhT($@!R)24C#P!C5C*"dhc@!R,,!?`H"!?`Zޛ &W&"d!"""rhLȡ1""""d >{FDTq)@>( :""BPy>ɂDX\GDDDz2Tx?uV^sv2|Y ҽs.h#w;-7!Yeb=tR# >_6Vz#V!x!7j=Qsp+c#"J2u!a vߟ~ifΡfMW+mn#ZQ_@nW\Xs;Nɸ<O~c~cW\S{Lh )MஏIߥӮr?q6@Ptiifg;b#"D|a t[Z* _}{-EQ{TGbJx@wWK ]*i3ew;)A4/>S[5WsLʞ0:^yi h[o6quR:F6[9:(Iu%qn]re`f הy/@$" d2tnsB,4 Sa54sк&qyWMJ yCk-ͦ}JUCɧLE1qnAѦ幅G~OVG? ^66@ A7tP-@U(j$OEmn A{H?b86v|t}]g:[=%<\=Aƣ3luڥƞASl7EA+niO6tF*rKMAZ@Oaw}4Q/[!"=Cp,ƻeh]/Υs3}΅j?}E" qVI8Uh7N2Y<(=Bݛ8Eаᨾ×@\f_Xɣ6)dvcƭ+.ti2L^ }\Dz:ٷ5gꯍdMK wTI%%Lh[~3K=n =[-ݡ='jm(Wyl[4Bi3yS:{\j/U.%!~=NiY~QӾKw374C`{#gVuw6uxnuMYB|F^)=-2]@o|ywX @,GmH\Mm.ɽu8 m.>R՝b~(Oӧ5kܮ~+[fH.U秞kwbz.4Pg}ZvofN^]a};Dͺ-FT/ .͝rDF)c#"ʥd33)y}Υ~ :72e[ nYSاn <ز.Wkv5smo5 S.շԲfI{~W3^qޮ bՖ5r:cqIܨz l5Z%>@(g]we$ ^z[|.gďp\Iv+QnuM_q {*^2' {N7/e6m@4)E_F͵R[:6""\J&C\E.[䬢߾ WN/ knh4~v@ALۢfҹ 2FU?Y>%]B{)qwmZH=~4 XPV ȅO^s߷E^r Icqbf!U&s0I_tp,@[ӵ?gxii$r6ͪHOk{~<Ï=W@|Tִv |̂' Оԑ{R.ޠȅW}Czo 7 FgK Შ_ =2;FYQ%SjQԦݩWLSI|)eܘl2?cn[Zjp9C_L Wo1 3sEs 27j݇N%֠ߵhl:.r+ã^[V}:4pQ rWVnxXcIF>j58-+;Q$E(8g@'9GO2V4^zs% [qTZ^qYDQ0jA\gg6t/VQ~ }JOoou5ߗ>gEL|R&s 4}=1j"JDg#:knaB; >e\%Mp3ȉdΎ>UF^ NV~ /=eLFDTqe=u\""/=M*rLMV *>8Tu#E~vV^cRWG]"ʫ7\p1sScC9 q,"""rXv vN }φc:=gL?8oBZXDDD2ٕͷ3=PxwkxE(]Zv4)`nsS[]7Xu/H~ֶ1F5U ƴyQs~vEc+[KWuX"rGDDD̮]PfѨsSM.$74u2 ݩȢ3VUE>(L~MRGJ97Z]E&XRMWnSy\΃$zDD[+%,<^u >*µ߲tݲ]x+LY3o?B 2!sXx3aGh&CDDDg Yf<]ʺk]ӢΦ;WS2;v:b/7w(2N//U}\ټՍ1o- |8罤 я;8"""){R7߬UCz"]}Ecョuޏt!]5 CNx4}C "(7Z-b a%kR.+dԑ{/EzIg?[oɼvwkkT-FW Q>t+K I1#~5ygf(F>cv_.+dtY٭u<^?~ݠLsWnٺcD UDˋڿ39@ӼT54k]"ZX?|J6ؿZ۠0Uqi u^998Mel}OM3|j72~bQ%db 94&CDDDИ Cc2DDDD9J ݢZMW*2MVa?fuNxjl{X<*7>/~|}/s@Gk#"""ʭ|.ݘ>hJ H:EIiPAU8EL9[*JO9ESv~~ި$fVPnJ&fioF[i,J4KDDD'Z:sO]ݕe:&/{9G򳶭72lT)-0Nl;ݖuf}iVUv]#"" Ůq<2YUk'7y`ScUU>3{- p%Wei]\hȕz znhtusj6'z8"̕A-ktb^ϗk{ˡClbʉDm<~r]'fRM>׷Fѐ7|?/S8"DQEQ7:9wz7vԋf2DDDDYv7]vd4N9<!?Ե]9%0>ҲQ g;4r6bHTUAaޫ@46AdDDDgN;2fT§=CDD[eJ*%&CDDVȡ1""""d!"""rhLȡ1""""d!"""rhLȡ1""""dg&=u|6QA,ֶIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Point.png000066400000000000000000000674351307543307100253460ustar00rootroot00000000000000PNG  IHDR IDATxy9kOد,Bs[B5a \kx#jzw{p_VRxVƹy׃@Uߖ_x-ۭW =ldw,_gŞSO)`X+RmcugYf0PRyY'\Zp_djdޜ[3LI8e>1I=G7i͝tK!n+Boqw\aE>4zį8#-+>OF+9T"Td~PMq2'BU H*BS1ܩpU䛰uC[ޠz֛?冥\Ӕ"V]Q^_^gF-jLXI%%9s`YY(tq{ sP)[ \L/,OLlPx=;L[zw:{ vվWˆE>pм.r9gCu2%q*Tx">X,mP*)yGFɟ)8!T0Er[[ >: ݗV,pBoR'y*` o# s ; ivsW%(TI9L$*]u`ʼncnhȪ1bd&pǟjb-9x1U٢“8V,"TOuuڋmKad\m-+8wLk3`T/Ͷ}GmP -Dye*NMr`؁)Ȉy? RXi_׎9HA~o4 6ֹ'IdEG b}h|+/!;d/9r1;F2[s$63>n+X0!T%pz)spہ}Z-J)z6fx_lD+)Hxϋ>)H$U}w\?-kZM3M]i.]4p,rC>F}lZش \D;z m=5U~B_g2U-sfb f5`D1KP 5w)^Igj ֟d>wܹ%G.9k.g5.QvsV!FfDM)X0!T%p^SۧjbFT>ܠmpM7#%ǴwZd >P+*8 ִA0T:Z{"pX7 VѢ֫Wo&O|o>K4P;/ȥ5}tI+g6<^VzcMZ؟a}ɏ'(r\z6!'l`a5S^{Sh:WYYz[D^}2{z6[QɫWh# wʿCYR슟-ZPLu$yl2?썉4TFQOjwkt:-a^ږ2wJ7m4ԋlni;O2XDǁF,D#e}>޸~{ĵ{:;=e'+Hv+q,U9x#j~yRs[rN}Cgx::/y5-hPqpƑ+~]c圿ᕫm?3zp[rt괼+ v"vk6K@C5rCƝ :rȚW|Q0/m4a;_ JA=5gs>b]$k[e~"֮7͐'ZbNޑaE"numb|خߦUSTdX!$;Ag4=KZL~!^ܩ&`Ysk.no foLҕwj T0l- *tl Z^.<ո'lyw[@P-(TyN[<6[2KozɻЈVn +i=m ^oh[^ Sƴ'JDʥ'L579N_\9.]凴(PJNywWBڕa $qݽZ_\µ}ZWXe'+]JB5xeFq-+|K7(e)3r8>tk ܢ,*ݖ*Y \|zǺJ0ξFO\/0(~P0- \vf 4JSF' 2QUf &Zedmʇ`a~-,XOͅHA윷46w(D]䰳Cװ2B(j<M]vyEa)8T S)2c)0T]NVi7`^Ӓ"E0РQ 79uj0 PhhBW2!wuu~'̳>B+{YJV .^e'+wo"|N5 CnPj~P;W||4ZN)3€`O׿tlTez*9%]ŕL@a9w֍ 7X%j_.BpJA+ iœq]ANQԱW0䍜@8} +؄ \/QW?<#\',kk7&-Nj@S6 '?ɍJrE M)b@2Jh (N>UYoMApwA.b%SOoys^cNn(ZȪP"/;YjpCה* [Ai>q@KߏOņf3r`h72#ܝ4DtxLM%sen[ǑUB/ŽbϤj;8,=-wՋA^G*  5@7f6?bGlvg{`L\v=?ŸT˹h68+WrcWk?sbr}^e^+@MŕH0EI4aH8 JAM8*mK:n_#emBC2#T+bk0'u*cQ}6r>B3SM[AFk޹̏x#?'7u,؈zaދ^:‰gͩW뼰 %F0[~é9.7Y 7NaE;1ƕ ѧͶq\wѺSN%BHn&7R,}g俾}kdiM>Χݜ@Ni{ 湫N"vt:4S QZaNڡk_d@okMk4wɅtM:0kŵBnvڏk睇6QJ0G>&nDn=-دIgѢٗ~N_b 7 `VﵧYw`qGy0k\7T"4Hmq8*M9m> -ݠ4@E÷9엗‡n`to6TC~%Gk\pp>'S V(2`{@q5S3 rǤ܇j¤QTZw|ӫ rEXтҹ0uF|{Ո~-E ;֧< Mj: eãv4+|}]{emF ]wQ#w5z>4sBH]﮴6X&N!ʖcFR;.&B%NEvQ$:qzcM8([D 5쟽V mtFV-]sT\lРM@t' w,q|;&ă|OonESFvn|m¡1p2(B-Rm;Vf%oH2kq;єw~bNy) @r!$ Y1VdgyRNačOkdKBf3ovKPϊn'O-ݠKd>R=+iuȏJ78TQOMDҍjҊirqwtgk5HB7MFse .*&;oPmSO3~~Zq;qJy\Vh٫%NǷK>qVNaˌL@`zS?E68bЋ,UEh.\@B`IsWMf-<34mJ8_'m3^^ؘol Z"RB&aӦc4qͧTE?wEn˩ ?bLB5fB勏27yF>{GTtgY`ȥmxUq7 ljiy.&!YobN2=l\3Z`g1ُ".'}GSe wqns O5?-e;;;.P!Tp,j&;y~sb3 gE y}K6E,\s fg,rn \vF5si5q5%y#0xGEu3{21Güi;f_@Lٞ .c"W/z Y-t'.ڣv7Bj&;ey϶abw6;(rGhu'n5bUa!TX.k!Tp,I'#T9(*'[~BU3AQ`(BjBUAQ`(B v"栨*`(Bv"* sPT[ HBRUEa)BH"AQunQ HBU?E .R栨Fa(B4\z sPT[!$#To`EICi EB.RAnQsP$c[!T^EP-9(U-"E6EUv"$0Ev"* H%ZEBUGN-B8dPf-r8dP -&EP!-VEPEݢ+Kdv~b)B@!TDIƃd@5.Rʂ!PU.Rʂ9(B!T.RD!T@#!_C!8d!Uxji,x?E#$wZۑoS,\E0 IDAT+޳~d(b8qHvABwKmi3ȷꈰ\*d%+QSY\[mszS?˵*]%/dZT/َוlEjB :Ytwn[K&٬2|BF ~̤viqW&?scoq>U.B:v3Mi+Y>BSn"ة&JfRr9\NꗏKNdeVLYM`Bfӝ {6F:De`CÉOkXuWX%yFC?o2y6F$\]siG:s֕ھOf4n޾ԁ1ѣ*fP]:xP&v^<8/6»HQa?(BNϋ#0}U΋G!PD{T~"B%)sPPV=ϋGU 05pm|$b- "$;p T<ՅBUp^s;/~e_W~%΃}sඛ`ei::ƮbQ?2}͎K_|bx7'#^ب}9+g/V;%DX5˩tae%go0wպS~|rJȻ_Y|},2kخT!:Fx?(*=/i+Xk<d¼~o/֫pV{E6A/bϩ'FY0KM)1c WMt(,.-/yt]5_2boNȭÙ&n2s pyOEn%ʺƥo/"vPZ6..у)G5l[Қ;2\"wDžV䃰9;[ŽS0U{@ake=G7i͝tqzį8#-+>OF n! NQMq2$%qr)4k*]`eAQh?;5|vPaczh eg+7 Kl)E$FT2#[NyԇBmܾ*rx1QJt_bܦtFNf7߇8n#{Udחң-ܢ,*Χ]QgF4.'̨v4!SַY,.;%;tiKk\ٍ.iq>NP%L3\V;P}S'sEUDˊSynSnQdyGSZR)C pXM)x<6mvAJ!iob>Ѳ gRQQhLn=rbbDיԨ8]S1o)zq^"6jJ'c&_Z1(r㲥^ b :cU;%NnJ_0X8, J ^ҤZ_| ]x"GD:%aJj0bz`a~=`jd°+ YqoMH+9<5oj߫eCŢw_ 8hk>_'S[{!lA%/[Hc*͎AAgP?t>,]Lhj9K@4Q Cdw42VҞ4kӚkC;FI2 BAnK`˶8G^G1Ҵ *yHhR>M$O%Sum~Dd{n6d']!7n[DŘ<;)g}>D2p0E~|4d }W{aBN<.;[|WEZ6Qi"x.I;U?M˜=4#?Mg"0E%::@Ŷ% b~ s2.`xlλ L&K쵙Wv^c`f[>KLˣ6PjM NMVR2a&~x0|@NJEdq<Îdۄw&V~׵cl%c Sy l{*v.2N(֜/JnNIot`Ka ٗ TƪX!Tҳ6y"9(*APcx<ܷZt@Z'_&gln[tqw˰Y)U98լר#3j8_swحMB_c~W]\T3J!Jt4x}G ).'G_%}*<ɭ!Yl|Ixz┈J8/V37| A)}=b֎I7~{]b`6[;Y[JXi635ir{m='t ~)Z ؾ;:=n|תK'Fҩ&z.Hs^FEٟN=~m9^t,!̽?~'jᯧ8/4kd7NaE;1F :qo @9h=Wv4 'u}c/I_D6XDJJNTN}- l)}vfoy73? o X$#n1܂K;=Z|ʩ2r]P sn-TFk{xA!{`L)LYi#f^]޺tc YEҥ8wL{Ѐ2A]JP0&gw%#L\rW%qr5EJ<.)MXfWz* /WRuoi&sc&@ǫ ;PK'hVJǽ/Sѵ&9VEH)Ύ|YhU[ٷgϞ:fPKKH2}Z;8ZSՒ^˥Yf<~@vM :4b Ax)e6-Ws<x<M)$O1/e<$[;)/ ob<}u/sPi =T*ׂdD@aKR{U3+roFx_DK*TGhpx2;ȤtWBQdkW'm3^pS[+2/IyQEhՐ H[/|N^4{NPRQg5>#UʥhLo*"эJo*%:{@}-2XN2g罢˷c.8',4mqqrݱ+ܔNwD.}opg$Iܜ [ =M=$y<6MIm5Lh ígexbIT5ur R.E+W'ٵSW\Ac]f"7It0Y~ve5cf1if}h2X6`nbv+K]/ # XEj?XOrKmּ5j=a{}e7E]ьʰl}#o*ks+0r/I@F t 1h 1P嘭uth;I5ɗ"cZ4̚w/(0zp$yS2ݔpBuJ gMVfЙC;u񕿉$PC'ey|fXAQf)ZTKF2m}I[^KwX%]U}[~n^ /_;(* |a{N=Y|?0sςaO\BnJyx]Nߟee[lj,CI(ْ=҂'@U%#:|`N)3\O&W5 "n+Boqw\aE>C@ö%93=M'ȯc=G7i͝t:+HˊϓvJyqj CBX=CQ7X?5ilGYS*ED)L^*CPLhMyG@:Ń㏎- =͟rR.i@+.(//ճHeS&by*Ń^Lf5<$QjSY卡yE րþXfk.v6k㲗Ş?E蠇~\А)Tl,`Җ IQ bܯ35.4fIe (4.طJE!$d|YKV(4NAM=EKGG_MjI !(&a2On{3ش:q)3&- r̗.半BSgr.'t~[C'~9|x.,5 b\XAI܁쵄"D J7`~ EҴ\`BHsMqv2j[OL dPx=+~[5!wx簯?} r=}4y]&}ȿN?.ZB28J_~0T+CޏhPhh"Mk.IB:?h%O{%aBH6u|#ɨ}ز-NQDN[ӧ&ߤNT"?_ :]wGDAٻf@vr ٯJPϳrљ!IT.- YWA#*!tI0:V$\y:SC ?.Mȏ?mb]0j#Aʬ[ǍXFYT+rv6#"e*JuuڋmKad\m-+8wLk3`T/Ͷ}GmP -Dye*NMr`؁)Ȉy? b]p\ +?1 p?21p XccWMǤHӚK1ﴋl͙\.:}q'A X"Ztx4 6؇ƧҾz"C:tm9hu!#v; J0_B3j6qlnٻIײK.J-z IDAT;~ÇѸBYV3[|*z[*7TRzBRfU?p}Zi m0? O1 -_r>__\+kO86.׎- 5EN]>7C/1=j#D^-+͵ʮ:?/̉)˞TMӻzPl,;1k׌:x8/Θ||sWsJo*W7v7RnެOct{_^ҫ".Ly\>mR=͝=' ̴Itl3*Y^^/;H:D[egt`Q71m;b -d?b9Mβu7UB\T+x%j빸z\ɒĽe 8^Ie/K@\`ձ_@#7FJz"ae] K1@RK5b(i3Nywt =06sl{=7hNId~Ϗ792`s~ 3\ po6fP7'lLɉ~{c}d~_2.:/fuC#n1܂K;=Z|ʩլ<lNͽ8^煥##uTB:S|(>o|i1TxZdT71rٺNaE=wyy4Jx˾^3^f=9{'<۸$| 9l~*DZ 뉩L з+ _;ump,^nбNW.G[SJmZRKQYpoi&sع t S.֔jyq k#T%eb-(H_esz:aՐ H[/|N^]H>$m=qR-h*-sfz*p%7U.9UBtxq@F^Dž9Z֟zp; {)EǾ %w9hsVٴôuR$8h5I 4sZ\2ChMw1n2 Eqc& .o27yF>{wY2<|ձ[YlnMS@)7wl~G\T~l ?u}/r>=;.wL'QJ,ods"NAQ:lDܜ [ =M=$y<6MImˌ.0GũOU[8lDž(]vaG.}oC9*/IRYJͭtJFA{ݻw^ p(GnZ30U[v1dys).mUdF`V~a|tH ǣCa9NѳFEvm\EqN|u^}'~%]h] `QWe_4h;sB|EoTڤuD0t,?d̬Q Y-t'#A;GN#x7qH`9k=NP6˥o;^;}@oѡ cmn(޹#&huXe6+-kf0z٣$\E~x7+v%Josƚe6S4p awqʐN ыWw߲ӎ.1Ե5;t`3n\`qUŏIj|5kZOYE݅8/^ 8<:,zkR=UYF~r//e|abw6;($Z>/{@9;/e<.fPcLHn0+` ܂vj刬=q?Rb?ы9*xRU W/kԣZw>C&I|tپ^ '툤".1E5c*z$w쒻'z:_3էYwOonuGn;oS7EW17Jœ'z ғE_ח}M"tƍGYutr[c]bH!"!"#atmw@w iCi+gT|tHX4r fmvڈWIf۳da{ wى6F} ?zi}@}vpYkNo?oױ/}Ě@a,966֯xI5  q1ۍwq145EEmŲnvmX+]HhCi[XDRrV\źl"r[k-vs[%Rm'Q3gN?:Ϝ93_]eQZTKLQv\,x߻lNa.o74sݹh'm͊d_;we|O_W_C6?X:DkjԨ7Xʭ-LST/RiӇN7o3pV~W= U*SlKBZtH\]:i˧6# tg=?vr? >o?[s[GW֜ė)[iݔ3mflZvo@ÄC4!/TSʭ-LX+8pX7'KvȫNUU*Sk.160|lY.\w8ܮBaBX_p)rjP"o>? E5~teu4K/}2]CGV +Pxrj ˭TXD'hW*S560>{WQ{]b%wXRnWgvhTW:JS7Bĥ OIqjRix;胤,݇{7vkKv;'~.PԨ[Ę\,r 9cRr DݸPXua=Mm7Oy4OaM*rN.Xw$ܷOӚɲ \Lw7X+${jֈ'-xU{RLqu.Ul.qOFo5jGm8BnҸ2vkd۷7!]I,;p-5A5.WlV*WV,[[˥߿mF>5SeA5\,r+rznz CO6X a+U'VjnUWs[-u;,slLfuȴ毪n? E5}tǖoOߎA-)ed Th+ɉun6󀍙.-ItL1Cy5yF= ٪U7I.S:A~ogڲ)a` M!yP54HU@@Cu$!B!ke_bP{ߕkء6QAJI S o8ز+#~)3HM$\口wVf$GU 1݅T$"] _ϪT_g#XЛ ۈnBs9*@BAffhi3%=|&^^J]j+$-Z94BĒCV!$+Oof2Hgwdg^ -N v]Z $2y6Eٝ}6-Ic+E+MQڌ,mnYq!ݻzz]mH/_mݯ^5..Io`w @w!Ք N!ZP|{1/e]Aܢ7[UXޣgotX!lCFON{XmLt磿|~)=76i͎Ƌ%*uţe xm'٣}rpKm7zCY̫.aDz%<}]gctG)]Me16,aPG.ԨW1gv19躗>*ЎMj)_ 5Z[jrO$ĢD)O2\~+áCD|ޤE>9aSSԣ_H.o3Xm9$)nmO3-.E}<9yYʊ33J!&YgQLRIq4T[Р4PQrUudh׋ǝ3M:&d/s󢼶.S JT*JUI[W1uz(ϯ~߱wʳE{Vja(=KŅw#CK%Odhw.CHɤS}A+(+EMJ1:9(WJO9RW~F<">O4RiW#6M3ܽkIa3WZsr{o|%To?53-o20\]>D̽yjkI/OQb~fy)/fM[ =ȊqrKUw8];i:-3{cg6܋3n,?j}l뿎uRP娿w @w!Ք(W$~Q&ߺ=PK=5> 7EbQ0~L_cϗrJbJo%$86Ү]ܢ2qZMs&j}$9O6FL4hٱYe<6=_oret'/g zq%ٖyw.!wgs]הsokFŇ^A!'/QsqO{/]L6gBTLp!;<'0fY?ek&_y"20ٿ N5o{ٍ[[O_Z.n?wDz^6֓C׭qi(ZǂA#ߚh=nqQVJ1+1gP BHks?oJ]xMlra 5W K!d~ˋ:jj; @x 7iǹb8[ӝ}?#zoPBȜ3u1.0A˦;'ϴek O/#0cP/`, 9(hrP6mA@ې!mC چ $)@Q +?( ] /@ mC P/0x 9(5PP!mC ΅ǣPې!e,A(0:KiEzPW!mzZ8ku ֋MrJ:cmA@ې!mC چ 9(hrP6mA@ې!mC چMzj; I@  =_heW(; sP=Rq;^0`3kN&ahE TZٝy|v8#Zj9ͅ!{FǷl)ޑYy'#䠠cB~[~4~MHݿ*Ƚgi(spOA}%31?⥲7fi䝚jT"WsZO[2c8Z]XґQ0: 󣮾6w~VSsWY_\Ip|ZyBg̡(;=={.XBfphb(grWߟ3G=;>py#'GYK u( siQej5y7$}iۏ [|îko3ޞxIDATH=ȑy(оM|.}7%>{-,7rm&XٱxN05r00ieJf1yԊ{:9(蘈u !Ad?E_%gc6BtpeϤғg~k9˅[ ܷ4i9^DglG?aB}NؓYx6"r3"!o?_؛sի>Ӄξa ;"lg ᇋTФ!4Yc !-ܽ!my:ŽV"T*=Gu %E1P/f9"I^9S^7bP߬c#ʆn>!o㟃UU*Z !KI8,+}qUO'ݛBʊ3FF} _)D6ZIۏMG>.h#Dld[>ƌY!GLZGKU9M=ݱx%+#y톆 7g&h)އ=^b__164^Z?GgR@rynD|Z- sPIjI?*$3IpިD]ЙVMyz)=B|}bcTӠN=fxq5~ikF!ģ`zoM)~}Qgb+h#Wފv53謍bo뢫 ϩݘDޑˁՍɱ=Q% ;jYU.ˀ x-q{_PѠ(tL@PBue%|n3T]EWal㧸uO^$MSK3BΫA}ú}+LOew؝UL :Ei 1dcĞbpL0&הVF_^^Џ%3Yc3U*䠠c>Ʒwӻ.,9y'-z4] ; BZ|9nBBO<Z%sg1 3r yMZ !/94ф-_bѫ}ptoբm'Jc_[_ە1r-MQԤU#ԵT{G)jG9Ņ9ϖy({<\rMŘGIy^\@0' Ms!RpϺcH}]B;w8HvһXH))+NQFM,9;Dgjgc!$oQgdX?sDlJL:YNI_r4? =x⣗oE-,w׭EN'"|f_7gu'fmm-rRg81pQ=L:2'4­"bءgKfZVتȶ\Xz&3\9IՁM9hrj }c1([T:qs !W̋Ӣ: {\`vR~.X<aX<@u`` AAP,9  X<4@x/n$+u_+E=T.BH{ߕyFPHVOwlfܷDu,)z.黎Y2<#>Ϊl5vAA]`sjz#{$<9öNs9g<IuM=o/&=Sہ|A{vW:3-wctXzy;Z()BQvkwj97n9)S|͔7vNmt[{h[FEG1 4E]޽ˮ1^صۆ2f-Z[< }C> Xw_w"(C/Ol^~L̲҄hoUz^ymηOy}zv.Q):/s.&'V|R.?]*ob{y9w7tX*oX&H%#eJCQ:P 4S=M|T$|>pߏePBH󢼶.S JT*JU8963Hޅc ~ҏ`R"BXBd|+IMi*Jyw(~ܩ1٤hB*9aͻ|KH,K]Qa@]4N6T"z3IɑK_)2 kg:No?5ӛ#6M3ܽkIa3WZތ|ԄWqR=<彐ߣ]/;3 uT=7F ^rfLs{{q4tC2?j}>bfЄÏ3!0*P_q9--`6ss*h^LUt^{Wv_uܬ@@ uή3m*}ߞqΛ"HEo&s~oDvKU;T˟/v]/οļugKג7lMn'$-_cBT**NxǽNRF9l"28_*{iӠend1+n;{I]^M:gdWDvzF{*|1mbX{,H;2eňt3ED*JϷr 0J<€fLDd`ҳWp'$A7x̽%aN ÖOl@m:7Yn߹fX|hr2pnYދ6.)f:pʳ2VJv__s}3@xP7y ~R<;QہT/f@G6 ./꨽c^<@u`,@zo҉ߤ7犥⌿nMwڎEa9sP (TBMwOi֮^QmGĉ uX<4L!mC چ 9(hrP6mA@ېa$P7j p{̅rIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/RandomVector.png000066400000000000000000001174301307543307100266470ustar00rootroot00000000000000PNG  IHDR 8 IDATxuXwhPP^;``+; ډ"?;PQ1,|?<왙3gΙ}wYeY} YKa@`Ը`0΄7V1n D ?K!BJ D ?!CyDv_KdWcdnژ:M^7eYZnZWŸ  g::?PY*WK7̜ح  H#O}\wR|e!{W{w/ƙ{pZB6|^Sao\TblޮaeXTվt?|/{AGU Py˹S,=N<<(^R}^-OpNpj1 gntư8y&hQ5ë] GƵVRιq9Stq>vs!# |N) !ƖCшӒ&ʻ5f <

];־~onR}K;ߥ^%fZ9dÃZV2NAlPPo_M XaUB^LnvL-=Cc[`ʯ)W _OV6'm1: d^=yaDHXɧ rPkT/9p=W7NԲo#-m3IJy"͐yarbq.d@1ppE0c?A`@?@:bLߥ>z4÷m{pJv-ݲqGHT\6mgvৄ8>Vٗ3Bk .[F-W*C60#nfeddekjes@ dx[^·Һ~<}+ #w'e/6dg˽צw R<.v|][zҺA/KfBVOXsl7[4i&21wr@DʥIqAWQrdVPBҹپW>uٻ6&)å#gXnR؝=-&WG~S/zJ>;CүQkk3Q)J:vyWD?46GԦ+"(W}'6$up@+j$dڮ?/:Cte3lCnf=sөO[ҋm}])?דv:uvy=ײs s \"̨%\,LdO[`%Ϛ )J.`9BFD"4fb <-o49e7Ig'˛Z܊aGg!_̰&DrĢJ^g W&GmystŬmJWvJ[~ӷYd\֋?Į 93ܲ%|?H6g@~EH*:0ŕ~ۻP- IRUz3eYKd޶B!݆nMZ)E{NLdR{ٚoQիܵI6<^(4n!ݿG-:=waf_Ƿ+7Qkҽ"i\Bn"46._⪃#y!65]Q8p W8tJ"~Um[Y;$eg;4d(r Ua3j^W{O>ȬLDfߧrn z$D]ADu&3z/MI#Ny]CU0d8`(% Ûc0 PJ_^0HOfe:b%9$["e. 5"~H0Ch¾xm.}_3J^-)m[.GY; rp̣\Xp Zs,̲Iq'\e$s&Z^Ͷ&ՙ d `(8kLQ:T)4Oф_?ܧ17IaQbF"o١G%؇WMz遠ɒg•޿'_.?B{}C`ݝ>~_8~kT.Xq-γ*_]TUrwz\!N̲gׯtvQи1VsoRɇ78NR;Rc6z.Ue{7G fWfC [ Rq-_ m{ܳw]O[rVqM? |'YTo\[MZw|aEK :JcO)3sp;kBw;<`ez'eYĤR9Ӈ(zLƵ8Yyz oFZ*{Q't}-%*U6i^E5.qۍ>e})Q{sckVHs8kÐ:rN4blA4,U섟G>2}RHc%]pC^=B{ e lg.[~=e[F\؜nH7{E3.nL.-z CVS'ыpaDHXɧ rPkTnVT5{C{i'j߷EtabټnV Y= zrz CV!C`2D ?!C`2D ?!o 0@>&@6A@cY= ?!C`2D ?!C`2D999u~s@׽9i溃/>G(Zs~ne4."r޽n:EGsv`ܼ0[l5.u=A⿣k۹֭]׭}'Wu4qk?y)˕Dž\:K5l=h۹E^5ػ}ú{> ӭ2sӴeEūX<涙W3]C]_ܪN{)rOt͒FK5pW>~r+XOqI?&T4+m!➊M*fKO w~]'{5WCU-XR.=Oȩ5A&pmMFDe,v = ògj|?Q)LD* yC&ss]D%Jc^>^77wE'&Kb\$LσCF&)YY}2ݰF};X"ؙ{Mo$*w7܁+w Qs1V-r˶gٜ_o]orUu1S2D x&YhYFA/l-¶fb_֣߄kV >iC"+z ޯE/po5] ?@^ce Y= %Jo9 Y=yJiJg0d "~<*u)=M2Dy-|새!0dt|Rz [!0dtwj' u @O`W2?@nand@cgF_wȢ9űY`!ͅfe]8LRygW+XbjվnFEZJJ+^58~++a 8W3ͻ0strqsY6?MVͳ+Whd9(s HDf-5z[o#"m3Q-|GD*ik3"*Tҩ]{v|Ė桏3װft-Xv(l=ߺ޻h]! /8'0rsk -IVu翕8\x8˹HPچݤɱS;T9",CDdQ)_V2Yl&I0<~5۾@K!uQ /e3tWl[ nŪX+gL.f;z _ƙ/h5sEۛ\ ^*q=l0Φ6Éi_U:-+D`YNUTV?\ܩًz1]{DT{+"qI~xȚJxV|[ Z4xk/JXI)pl'*m_v;FD%{8o+Q}؁g{pPR-ޮW#IÈ O-^xQK=vPf ]zd51fyOS#M<7nn%/Ud-† 6IXƘlDUiϨz9hl@U2\D)xYYP|xBKB ڷ՜I\qK"*X~|A%ւ1_r/8È/*yrZCô=ٗIq'/ܴnO ۮ7gMl҅{S?nY%x\{q-Yݻ".&ƞߞDdjXVBڙMUӕӄK-<lt&}/iID=.k c% (ID.5%OssnR\Gx8U诩kY6^ܖMۻ&6w[rzV}lp/{c"Zt=PW=Zh*$c=oIDddUY$; IDAT@e5ta\s_N>=ߏ'FD|aY \kDDv5J^|K 8zFAf+Rro5cD"m? ~VPtB+7q̈h˓#џ./cAD}čf%?&qee z+1M7Q RJ$爈7ru}O _ DdSiJ%D<*0NNUTZ5t-DTm!$5 т~(+>o+ѝ ,Lk"*::Hd^eB65>|31K;M*9k1 kN#Mhci+E-GDUeb4FG~"Y6812oG"j0u]9۬-*CIJ axg_+ >LqOwi& gj=5=~ծي/GSu@#ܝ HD- Ƈ_&"BM YI솯 QT}OND/2{8 %"GŌRb#"SfDX@eѫ]]FQ&l^$5'mWV~+6ڰg¢Y%"BudXpSU;V^]#}iO?'ܱ=M7r1D%X S_SZoAH0TdQDDֻ.(9+sFM(LlxN HMl8(b"jkc=:G,{ s֤݈LO%6eQ'c:&X,PP߹:o# C x؇㚕,dn[vUb\0M*کr"~]|0ak V60}KQm&'I+=A$w֯ Dԫpj~9CDf-N6 "i/.E W%ӈUJdYԅ?@D:TXh*zMD]4W#4;6jÔRs]%C"Hn""≺[07?ՍT )cjv@V@\”־c^v[֨@K5"**}% .]m(^ID<ч;QDT^j#aDTY "zx_BBnE+s:6R(?3eeMD wG]Q'O">|I~iR;>Q oG͝7yP͈hHE#*^v+W{MQl:ԡrõ SոjV?L 5J4}e " 1D)9rgHMӿ?@;˜[rɉO\Xc[A=wO{."8:5#AK&KIoYG KD6\iгX"jT͜VHD} I]hY"Rvf|h/>OiEռ10DTcF׽ O ,RL߉# xDt?BJԷSi,#kE%_RKե|}.W:mhYlY*\]t?Ggut =DyONB-n#ʖR~4죠I徜n|T.sMSC7^4Քe$s&ywh~/]x>3&>*dqG 5u[ED6l7l5QS߱J"}o V'H/oOV]>r*1 ]Y3vu6hG;'@`8g(B*4.Ɣh-={Y *Pu1枊c_;,J5c Zro,7} -.Ix ^]PypI *{iۖZncjTͫfm1fu5&%'[MN:JDڗ6[",N[T݊u㣿qآ$I?FHyjdޏ<ZOcBS>EtwhYEMwP;vsU YB,o&!k'"V u$# .<0z99oJ#㸯 8yux&/o[_UyRXeeUјJڕWVm[ѝZ`Z`|vy!j"D$0v#&ߊJrjXW֕ȏ{ڼ/*DDR*7/oƕF7xٮ&$5j,o^;U hTOgFUlZRaZ;d YBB~x|ͺ{4YJαRT]N\сAITzeTJsBɌ:kSfkZ[BDۍg&ns#WMR*jKpO0jL\Ze#"ߨÍvkXiKU͐aK>uUvDdB^NNNyiCǸm53鄬o"ϯ|@QIZg1>gВ_0*k8 y8g;eɻ +iQd[~8Ztj5|}-~-?ԶYFY㘄s˿r^\MǪ ^PT5#rշ}_YmkTBZ7;ZnǕ찪]o!);Y=?{9fΈT;[a}ZbgyЭ^-U'͕M*92< zn>eώt}#W֐/TӱBW3<͐?܁ hnV{nMT!kOy{#.4脿4( +5Y]Ic+Q0#iFѰR1ga_no,%" n.>'[[6Mýzr{ 2m|:`V42yݐz߻3NNNo)O9Jowv07{Wh4[;7>K޽Jc:4n170PIفWs_pȇOXyB^7ȋFuz"rrrE KY:xfIt3f[.r&#dR/ȎzݸPu7Ys5Tj#:ܴc!@ C&^~E"|yvy}{(< *QABIfE|jI&Tc`G 3U@k@;C(Yd``p*"| ?Y|]\ qHr' om@f!ԇMvTas >do+v]R>3@|rWih۞߶ CZPD).l ?AZPb߶Ww1o&o@s1[Lp?~P &|.GYЏ 0J:l`RVQwV(sLVF핧fq "~HKQ;-7C> "~p9C{o>@Z\Џ z=0(~07D3!z1@f?9D} Af?-d?HQd~B X"dAV@~p [  "~|>@Bf? d@!}!i݆p w t"~Åp !C = N-\ :Y=A;@g?@"~  B ~kt y ?C/yY=z yz'D ;d@.Bo d@@V@Af? D:@\ Y݀7rL9~/@{8 Om2; pN"~@/ gE9d' @r^|Y=Y7Kkw'@>s/0d?C)xk~ÅC 0P2>6ddh w@>~Â@;xY=Z@2 "~M@>~=u6 ? xcP~e(~= !@ @2"~Q "~>@!a _Fdd*D>@: Y=_ ޝ:!9 't "~gk }\{wDo +S|)9dD`; vrmr!`N r>R% "b!s.owr?p`gFowqכбE_M8l^4t!D$n5{[.[}E%p)WZoV\v& c xMu>G-D"2nXg6rtٸ髒c"7=::^-Q[1ʏq o0EѥY\Gv6PqnVqhg⠭G$ηa7ǝ }Tם_?q~F+eo3,=>5Q,+Hc7g U5"w.R,U^7,X6e/E~ݽ?5nv$[ٸEъa=FD m ~4 F#'+Ue ,EƖ|+QsbciLdmn`H)7xk-2bIx4gm,[cgO:=L\? +|2~y$w^˽צw idj}3p*~>ggs:sࢳDv0yYy^>ҺA/KfBVOXs;: 8dUQj?kیУvy#K6;vj*#p_qBK-WEirCcfcc "~wGVVh7(A$j^ꈕg?l0B6BQrDz<ع IDATzKD:>Y*k%t1/\߹0W~Tu6˿u/d8dXAF6-[U \JۮNr#jq!z/[& _Xk7=X|0:+£N]^@g'Utʼn1 osz7)Ξ]߫ =`!նY2mʟҟsaO%$ Zי=.eƉΎ&[DTmWfaw(wemp WVjչTħ->Ӯ~ώ{BO21* ͲtRnߺfP*5FDNZwkc?\:M&%eQ?LZx|Ӭ4 6=?#[,|S8.D7.ߴDooؽٵXZů14WҎҦ/ Y12r4x>f][;{ؠڬEQ]ҡXࠍn`X[1ɗ,b%U[13,JG">VAѕ ZgROq%[/6̐"&DrĢJGDDcJ^QqlYm:JiD$KŗoU;͔4}wyִW=ä(>Kj_YY!Ц lQP(M mE$MZJTHD,%4Hriռw6mVx}79;=g+F7q4ɖ6nU +*WOq5EˣzԾ[pVڥ?hg2Ny?, VDJ+JY)f͉(&$tx"v69[Qi,%2o[ڐnC KR"äp]afӥϒ&\(+R?tTB" R- xFDJ\ar=}:"^<#Ħr Zͫ)=mڬYqGcy9pdݛRϗSڬ%CGuyt ᠝>og#"?ӼJ "cPc(E^(mMπ܏]ƲR4kn`ڶOZX#bUS}#ՙ30&$NQwF aX#{U:RtR쌈h׷oN[rsWvfɱ/=㿣yժ*8LMJ`8-q=_eE ej*i͟XED jf3tFE__8h,-Gc2;CGuyZpڹF#~hw!c=A:g+!G?HkSRfDitIC#ww!Dge>WZc*[F!^-/,^EJbDf_~&D>6<;)lBD;qSe(-ODˆ|7R*L޷ݷSQGBD!7#ۆ)}U2<؟U]\R@ [fiE +&<&ҲG? gxFkMU?j^M;* q&hU#m k5GإZv psz9b:/;qR̯k״XήN#Jf¥3jQ_]>FIo,"3hVM;r;D,|bN?_ný,]D"4J|" zޘf,%J_-8o=si7]̲'z84zWg!:vǵ6R)gk6 ض2y^]iT6 *_kVxl[ylX)m/gfwo wo,lQjKnSi}wZ3a͙sm,7G+Qsǖs''n}9_m'gbVKDu|[ [:eyrrxME-?).ٍCom^?4coߘVwz|л|,\6RwwhTSwiWrq PYY!JGߙ> #"4׮k5mL8p4Ζ&{[f&宅YcnApzF>ȬLDf0`t^=p4֒67}IH!Ip5L71d;Y /MI#Ny8@N@VBV*I2F?gs@9Bʎl:9~zf3AQub}Y_?!'ǩz@^tKw,F22s_ee`tp"7@:ט]l,V0)MsOY6uÕ=49r*x]L-n6sٻ(7l! vgy!aXyv뉁ݝXgNlQAew ư, ~/}؉Z -W<微 dO߃t5k7 ittwFD9+)wvPe?TTt'y>iQm܀rgT ~q{sV[M=.cPWneʸēv=mB}X9#~;nm5;YwMǾO?K9x|M?շ׻NĨ녶lseP>2>}z]~vT4zHrA"Ei<(dQIq[[Vk!B˕gmM/YyURe:T.?'#<ȤA)/M,}c?(XIlh `?oRČƗ,wu_¦(Y\e1khtqOžmKj'?a;%4鬅wp*?\[#)/k/qyNG)%Ii6DbU؛n%n\]}']-N^|ƾɞRE{{2ɞKLY"[v TBu)RO Ccp-rr%ZErR~w?H$my'}'xU pgkD4;j.>ޜ>E_n^a;y?WCj]=SqRז3-K!QsgwˎNgѥ똟2@WxLu!go]%T_Uoߨ-> lD$2u"ٿA>;5hXBC: jm<}^ä~deM+(,y-$D1TeVL]T4ɗrB(q "7ԗ\Ev?y[?%DnVT*h}JxUM5ᵲ71hUK\h"tnL]R훵vɦ{{<ևm=M=F_'4zmue/cKHVQJb?ԧ񇡵cr<;ǻ|\ڴOʧ='}'ރx p'<KW*6=0u\<ܷ irvxN.wt*cX93J#NaeV'J/!W*9ZGF}^3,1kjɡ0yxmfjv\)1]>R* yBjo-i_ۈe0}eax_r&,7r_ݸr%= JN>'S(+ 2"JT:_N%T60>]=e%LX?6^7i]-=ѣEmUR#{]b;yOC -#١RGŹ-{Vvc7Iя$VeSFg <*p pG:'"ҝ.۲=oEVGc>,L-kϕ4t4j#t 0L{,8^jKvoI ]iDC\sދw ̚1oٰX~ !C1hiEZ F()QƆ3ϝj߳§Ovr U%ڎSܷek/b6W-l6ApT^2x6־Ǔa=9eϲ7ڬl` ו=i㬗c&>K=ډ@BŌm@;'fWxtԦl Ȧ*]{ZwsZg/I$3't 6^aBVvgÎz%O!GTlIݕvOCnȓ,O`o %ݿtٷu_vԨLqTU] OtoubBiz] l1RjWװWk [kIz 2ᵾ9ov ){M,vxezyՙQgYiDւ6/\S1#fҾؽnU&F M; x1¿@Ǻܿ]s}2`2;P7V[;̭z)%Z*a$nɥx 2jEZ'vǃuM5iaҬbYܻ7A=K p+_{voJk{<_eo?Ms﩮rϟ{9(hAݐE[Z5ـ0tu9v(N&w(9j Ȏ]{OvsZ^'Ow'*Fv$bm::0`ݵ28gZ8Y8. (2iVߴU{~|"[s,x yrQ=]<@{|[`}PoI7SV別v̹6\N Y=o-L- 8S(IN:vVgJtg 9SؔH #)ghF?w*j-O,9MܞSL(Y"6ff_/-_Nz;R\EfNm RYErtvOc3)iz#Vy5D]+eu_ɥ< 7+9"^5;wq+CN .lFD![v .Xn^} $HÈ3Zsk6 FuFƦ]tjx@d)U\Xwz(VZMÉETֽXwّ9]5~ҹx zJ)tb"R*ٗh\E+YVH "Mf݈HqCuNM5gTvo!m +ɥ2^N y_(6hY5}Yl.Hm2.2Yx$;Qr"0$ `Q ņe_@Dӎ(a_M'c3 T)Ig۫RTIJe Y#,t+ʺ::.͡KByU+{ HS$D\#"S4(0D$W#HSJR-֪p^%SGi^Wo=.S*A3kanL8JDϖ'R:Vgq&֕v.u먺n<'Qi3`(ޱ 56C@U "2wtNJ8Z$żxd{&nw՗͑cTW)KD=Wx{v">KԾl#& %Hb="2OkJZт'13'iGlʦ"Z֣IM7kjWoN%;"el m1G3"-T#"l 8Ѷ/)ߘ =MDN>̈hkhc T"Se}Ѹ7F7m$d`ӀD>(U\˱W &W tٜv[`_oʪCy1#~%~?rE%o>> .V}\jvDd`}f'H}ꁛ!2kY>zY [9\.{;6ZEs!}J}HD4GY XAQ@gR7g҂:I/]T^8IsԨ 3Ӧpi|靶0pؖNX 2<1>^U5 QSČ_L5oU˳Mfßh7'J_߿?{/5z e>o{ㅖVvDd];5yy4!^>ȩ=TW1BWn֚7ugyuƅg}T6M>¯Vh"r+VpxY -~o|gwfG?Sq ]RCMгDҬl+N=3ܝl$MqW]ߴZ%-{($VPkDToCkZ)ؠjȮU/a]QYYÛf6c: ޻S9z7g$*]LRԨV l8qlS'!32 |mZp{e{V^kwxr67%jͭS7WǾfvvqs`oʪóz4gd ]=].Y"/]=`|P3T ?1C`P3T ?1C`of< @WwYJ7fn BYO)߲`Ej]m,M,ХHRz}}=pݲߴC:)3n>(Qm<Ȥ@l-O:Ox)I x[ϘUbl3FݴG -YƏ):خD{onӃ'n^}?=ԡjvx#eMtQX{_ʎ +<(ctݘރzn QmŢ[#h~(Ms~JN[Ħg(HfǬID'G\f;2U򶹕 PD럨P6?Eu*Xvp,f|X˞S/Gc?_]B>4!:0ͼ$J/J9 ڦ)E>;#|Fo" h EH]W[F]r?-:^O̪]1Ù5jӁZp2-8KL|ZN  ;жl&_ #ȗ[~9>ix9ݮ *~b%Dt4"Iu`B5"2o@bCDi#HSJRdhy(J8}uXPM޻՛cϥ ce甊D) dѳeljn;8Yu]hRBp}C =ٞR֧:t6ecEirگ; N(MD ハQՉYIKOnW?d11ehޢo/NDxӂڳ mDt!R IGD&6imXI "Z$FsbD4^>M@DzT22 ӿ)fMͩdvgP쟍!Br?&vVgpՖ 6B}̈hۗ'xƅ&"K'OeBfD=ߓ?QbE"[?IJL?Z5͐ K|{5B8#0Yѿ(7?-<OssgaP@}Au=\4fdկGVhcLJ0jQߞ[+_L O=p3D ~>Ǘ5b_/+`k9}e>?yodžxZh.$OOTf([+Y"T*UZP'IGr}*tw5jk{1)8\qz- #;o036 Ofy HVbK'~gpD_ӌlY~qM[Erl ZCjZV=Zx:˜4,W^ݺqN[k2k 3VQy؜6T ZȭXe%gm?4d3u aLMkZ.tI)v6իvBφIuƯ8~|6pw4qj]^va|jY XAQ: mď%Kk2`>!Vu~GeeoЎ6zŸOQ,s(]<޻(㏖M3}3}8FD|?-<Ossgmj4Ut sLH,$?,.Xb#4qH5,Ϙjl"I ۳ YqW~IQ Yt{SM?u;RuɰZim eϸ69ѫ ;zaQņ%"ҝ2.$Yh`UP p11p*٣e^i<*%‚ +u]=tS q˟D>;WO7.nQH̛#[Mհ;|+p2{A4))1~EMŦ/R"U0.f:-/g}͔Km\U#DBoy /WYh"'*4Y" 9 WLwAOȡڔ+E~v~s*~ yeMm \7ckyֱEkNvYj͔{|NY_'FT.*_\ zqJʥEf]MyU"LZ2;gsI;yNI)ۿ.}&gse>-DDĶ)M[k۱Ƙi¾~%M]qF<^ťw'&7m}w{^Q)6v Q EҷN-v ŶfV++FwwG+ .{VPbц_l Ww?QΎDē4"z ^Pvd#tjknݺw|_QmOA-clf.t$[w2"&d& ^A6BvW\[ߊ-z ⷳ'ǿ[%жR>On]i:fdYX&Yҡ엙#o`Je}TNw\U6Ώ""Ԧ|Z؏ADdQ(]%oQ1ȻDT$.iAH냿[6l;屿'u\cl\?Ws0ۤ)/ipvNvm* ?ueK|ҹ׾v QLm+ mDş>gԟ5bj[CM]qjk|D0m!v3hA-?~g"7o3aܗS ѡלI㉨#;!Ck} {/xc""oxNT痧Wo޳"jWޒ?iDy,5iu;#BQ]#M|:cWw{wnXB&lj &PZϞ8NDa81.бiϓt;*TRo;ywcOVz60ZK kZV!4U6/'6iZX-g/vW&*kg3~9@繐7KRLD t50ÁDTiՁ7"j҈{D$(q򋄢B*ԉB/i1Ji)PRlfܩӹ}^>2]OR\,a06ζ),{sO\_}#"սPbnհD$D1W]M]qjmNDto{vɊ(boIIɱmkΪۑ7~QbDyӶ̺ԩDt"z{a̟޹Xh_m#H 4oŸ4B[0 g9KՁ)#׾3гFPRfy[ϫh5WZ7ZlDp҉*ZHL KD_om&=""ۊ{BC"2kϟt;@0NeIDATh @VѳtcpȓN>87ۜ 4fI-C <6t%r$!DUO/һUsJ+ /kCdkuTt><}^Of{ihDeBE"2s+ |N`bdW"*۹@NfBeHQ2))"2wt%^Ghzjm.u^nvZؔLWn4su5F([*eՉ!"">JDE9rj_(>nP@.N+1?l 70Ӂ,܅f/&9ebMպ]L-[oQDtc]`Rm$"|yK ] n+VU/DܤhnEoƺ;K곔JZ,A͕~-Z:pt2uxEj.]-$._~R{Ox/._PИтvJB}.<_+\yűļ޽@&"fej\kj᩾;"zc~=U]#`~487 O~xC/Ooxr9]ji#DTidϸb?JVI: DUւ^LlQ/ DTEs(2D]<W)TJD2t}aر)mz8uU<[3K<wD8D")5/M:ڸe6vbA|`|^@RYĭ֩Kq/Z:$MZQr|[~zn,%^RYlJ?GO}vw9"-(ݤE>HDVU]- T"~^#[{Tļ}s>_qejЕ+LA6|| KRHJDDtj$UQYc߈ٖ\MBRY}￟J=^h6QsGw&.6kv2IO^+=qmW{&q;SvKqڶ8_N^ tb% Ao,t[>_Bųbg~} t͝ o#hCpO%1ɘ/ۮ6gi6>t,15]/ZxZ ; Vz^7'v2??]Q/O蛊 iըQO~ƖhڟvDA\7 :nv&":f,DDJ[\eFb?NܛΦQ-cOYyEhoTkբ&r+WZ7Zl.zL.{troۣʉhˡ'qI5#G^ېt-k?vU M?:еp O?a}绽rrggurB7ʑNd$"P芩<7oKriܮR&R %DfkܲH(CB!?)1E(tK,}dqu&WK<x˅texmׅA>C֮rg)ܺK-~`a?.+jL,u&\{nnv-&[|)~mZW5El xt֤YYl_],KI*%"o'-k'Zh_-VKQEoVЭZ|z]>+WZ7ZlFX3ڬinw3ѱ%\kd~65s60DM t;*F7w~Ey nM'{hb?v]tqrGCKz~25,DFؔXen%8Ï[)V(˛v"%6"l嫝cmjoݣZ|savztP'|s]^,WR5_qqoQ3rY1w"T ޾uw9~Θy{TlAKqK:m erȬ\vTk simM Im[r{w1YU׬YΝ;FG Y U"sbfZn#8?"PRj Wgޟ;5:oٰX~ !C1YtX'OwdQ<ր_miڶ_lZg[l("?^e,?'4S%vWUsLZn59mtEۉ*7&]ո/QZn xΰ׭G.~LD{uv6 {CK7OD<\Ķڒ|#_AFu_d; W:6ύhYioFuX'4q\&h9vmdQ;G|ߒ'e q/]m򃠣6h2yŷR"m)\i-Zu+W-J]M7 =Dށ_'&V_ss/"q7O\2WYk4ܔMu;2q67ׄJOd*rk}s6OzjniXޗkbn߱ϴ3ULfGjzk|٘s_o ;<пͲVłlixNn~6'<ȤYZ~oW=iwkHmbu֨7&hɥx 2jE?v7(hAݐE[Z5,7lI#nx`!)߹+ݪ6 &6D<\ܰ_(u/>>Za :qZ8m^wq}i6ܛ"诏gr:nk].sM*Ӂd}>~[s/teT|1[Dzaq鴩]G}j&eWS*/k @bnT"/qv!RJn]{T|ǿϨhk!P&֬򻳖)?u6r؎'#Bpχr 4l7sCD_l{;&.=;_To~}c9شPɒ+^mM(WD3}jQ 84ZQRg^+ѥa P^&yu0hC Q$):$]Inr(LPo@;v9(~+Q  H@ Y ?d#9?>3?2]do3T Lc׆S9}iWm0pW1C`P3T ?1C`P3T ?1C`P3T ?1C`P3T ?1C`P3T ?1C`P3T ?1C`P3TLz&#=`3rJeNGg 9@^8ty 0f*~c0f*~c0f*~-ƙas: |jy:MD9Ruۯ>x&%IѲZtm9sa'U)4:'ȦfYv^ltܻ);0sRipYBxrT9L)mխaQۖbOoqܝ<-Ǹ ^JbbK'ٗz~n<`x鸀+ZԷ~Ak]+ߡJ~~mv,]6s>;(DM`/⎞b{|΍xD>vBI2GT۷7̍VF0@bGH٬o1qy9[Dq,8OWY?-8]FDoI,˨M|g^֦bGձwlYDVi˓(7U53 Ssq{-ze>8[Yn`To^Ú<8߄T:`z"'=-w oZV(G)}{WM1ͽ;  l2@_ѡIZ5T-R| R=5/ۂ}ʢ67J|aۆ}[JkVիuّg×\5(`X'f~.nXhrK23nFwh~򞠗lm!SB[d*""(ݪΓ)jˌūW+hj٨+=i2'l*v*v]NJhF#"sS?6n=Zj>--x<+kХ:V] ʯf[2|`"WxvyDP}V%eu'lf{omqx.Љ6 m=dcJ\h""r!j`/l,=ӷ2h jJzzw,LQ_vI蝜]p!|yV(`HIZ ?A.'gKq`/b_׺mlF.%Qr(o3Y3tfsKzL MDDN`OX~ɲT&=oCeʻ-]cyPkrF/%s.rԕV wKe;On*7W_+dhƏ+wYA+gz˭(lUsAsͽ 7J f^3鉒~MySQԗV0)Uh{{8&M:(YYwtf}7~˜pIuxRpOCZ}ގU+C~"xhN\2y1bɕѩϙ,exc2%oL .͏5uM;^rY){5w^Fو֥n `k6hRlk'.߷cӌC;n0 ̋)*U\+HSoº0AXaŝ`9։DDƴVL^]t>6CC`沅38d1RIQBX50Ah씈پ+4kʚRf\>>իΎg)ǧΉVrl@7<鞰mq ouhyQ}q^˔}^t"yċ݇XK=lbѲ v0ļ'{šA~K#E7,~ފik [˹f-DO0|}`y|Lr]=[=Q<˱N$.'~l?nb~ofwIJ;DM%s{SB3o_Nv-AYW-ixDԵSw7ͮ pS~`rj2 =U7fv}$6u(mWaXB)_ܿ;p_];QOhȲWFm::60Bϯj T.\٩_ `ؑ[=m+\f_;ɲz0|9.yǖ~|d{I1ϯ(OCfgȬi{u~EǟI]pUJs"І+2YoN~FV_|z}"@YÉ iP+ӓ­ *#*4L4 2)~R0L1.=$M tUt_hwB{ӯk..[FB'/Z:*W,Q0"U~kaL%{YdwuR҇{*{e'X:I\|5z38LoU^ ߬ȲAnEM.,Ŀd/)s ;2(76̪<}lLBZ?0˼gf5^>ꂗc>mxzʽXaH(iFg\Wa\O\a?HJ.[3eډR9!aA5uC6Eփ {e>JENr~M@k / bŶM,l`Q?Gz Bf{0m_agw/.SHo$p:^ K<ٷ@VyNݸ^+1vx0͋PR.޻:㪫yv6<.ū0ft/o-!NEoN$kz+fY83D_%D82x'E=ߎ=R]zvuhq F̧l?:aZ+Q@*r7B{Q;WӜpב[{pc8v(u٨z{UUMx=а:pTIXR h !˗n?V(^̦IsƇ]вGBYsnA. ľ=Xܳ rr|ս  ?}cjX7g= \I {@ bodƺ`_$pX}x F߂Z_^/ټxs8gSi1 K*#* (B*->ƤZL~"沚E pU+XfqQw&exfFpl)˒=㻻>u#hȇyn޻WK{2d~z#Y6{+^N0 sc\u5m+e\VaTA3 !+:ӞA3 !RP'BLyB!dQ'BLM#7)=!)DAy7B@3I+ۏň,2Ym&V62yB%ZTs񛲼cWw W3AgJ QU4-5ka6!Apg.m B xR^9sGϮ[̧?3 R ̧߰IIi[ۡe/+"ff5R pc21pzsu J>А ?0s)vi ) yB8u}Hː5|=U^pǑ׭? pNڡ^};*؆U2e)׍?ò*5nm>rnJy1S6H8ήkQ'PRQP'V%?yŏ'tn+6rrw/QȜsQ^,X57-(UE!a+{q ljrB*(e22Wr`:E`0|( ,[2[cLrd/-Ho$ڵr7]=: B\zUbAɦ,oGBŽ B* J;3piїm?fi'*5؝$ ^%.~ v[e/i 92ɣIɑi.@ Ջe޶ϺeNhE{B)oa~)u=|[LfuZZ Ȩƺn<ݛ6Uh+`TB^> o{D[Aab _LUPx[\[~SE1:'qўי<}D!, Bɢ0O!, yϬʨ"Ib6e]N"h=!h,}SO);vug0X~y5yBH%w'j^ՋWڅg>0֯i!o yBP)RWoXOhӤȤ+ q3}t \27Ϧ:U:%J;Љ[Ū 9s>"kw7DabTyG^$9ize[#O*]Lٴ"%;;pG?iNYY>﴾ -+l餩G_tJnC)oF?=WoΎ"E}U0\ZJ79x"Ji1!3{UVkygoၚgʥWʺb3'SBH}b; B`YeYؙ[%9ҫPy֝//UBxbdk ;V7W/ޖ{ [pZԎ B}7O1,p;+_nmՋO& ,d^&.M)\ /V7y-'䝢0O1sm܏/VO{%C$pG-v0acH~C]!oʹ' ڌ_{)]s~ZE!3#f3)B[E D<}4%BLyB!dQ'BLyB!dQ'BLyByb6e]ޭ!DӞB񛲼cWw wsEaR rxe]+3nzwE !@)Odž4ӦЩ=:(1pƁ8M演%cfհ}[^BK'z~"uef>M:͏LUª 9s>"kP'y-V)&<ɚYUsWty\NV)}%֗oB=pegLH?-] U^pǑ׭? pNڡ^};R˖NF(pffnKh/ȥu&W*?/诓[qB >=b\`W&UwE1s+7zgGnU*ec}Sׇk=V."{O* -}$TP Qb/XX.M[lےmk H!O`]Β[_oΣ,XeYV vV#m\رIBaRAiR#ӪGR/l]`q4ON`^M:͏L*}vnr M|w.;z2vJ>А ?0s%vR& !@vUʻ,iEJƹwv]3vN:U^pǑ׭? pNڡ^};XSTͱTyq'7ZvVf $mY6e#cGXyUeKO'M2@H]4a5?ON#rՅc21pzs.#Q>ۭ'xXm{a>M6:4;6tǹi vt q NoJ>А ?0sKڽ!qV/.vfōyp]˲, Jo$zB&0 >6EփYvOymggJzu-mxpض[l0M1Yގ)qa¼0OcygrԵ,~̧z~f>"ڋy<=wILsW~nϽjzUS~z}٪NcSSW u{il][l0۲|o[VpZԎ@;A*nb Y櫊M+ZX DEnm4<ݛ6DjM]}/dFZS׿i|? sX-6aț-T  !`'6'W*Wf_ tKwVUgP\Ns.(zPŹ6CCTQQͽQ%i+S[w^'b^dWy8wڮ_Lku^Os[+o|D?K <tl] yB)*ֵ6N3jn#. }9kj86lu_.E~~bv**dWR0g1_0&G,'[Z̪IDATӾ7N\ΝϪ_- 9#]4';_ 0acH~C]پ'ʹ/7맲ܗCW7vDr3Ωň,GG*6:wiz3{tSk/kO?^#$͙L{x҂[i4 :nj2ǔ'2u [ =_;0w=hk$u΀A7[VeŅp.PU}JVݺw/x]%j5gA~jT`AYGeoq/񸔮Ii xT븿%?RIY$O[[[Y&ƛ.= #L}4<=uw3y{)䦯 *HZT^&22S۶v׃h =_Nµe>;1b*鷟>?7RS|Rŝ@5ƥLVz*2 j޿ |P"Ń ?L[9cFXzY6e#9}w|^M `ϋĴLJI ,~_K~#R)XenRK(/^2H͡U;9-8+un_rJfN2*) {fu֟WU:K+xh`4coltD¶gY\|Aycf7G"jSg]cZ 2n`nUb9`ykZ7 u8(u ?p16%˶홒Jm@?T!nüks[k~7YfoNd~!Z.jEd>f<V ;o8k^0k.ᄅmIr.{r>ZD6JO?=gf VzX]ϊRF/NQd=쉙MӃji e^+%@bodu#_ p[S"!LtWf:gSi.?L<➵vLmeN3| W ˪Z|'Ch^Ey ڽMgsKawshͿ'k1dq}7>q) 5d nw85m:S/4Tz{ 3:%'sMۯooR;_06jäSrdn(r\q4y=~UM. ( Ɔ{#֘f"Tda>pK>oϪ1i9ﻹfѳ6h4fug`__UǷn|>E׷pI ("JG~ pāGren BX YiyLiR#,UɱW(ds7yY=g|w7'9iYR;GN|qNJ|pĚf90WM|#R5n]PC(R7N2.4);-wrg]ɴ\wOR;T)d*I':x[|˿|U*<ZFHIWc < 7?p%pW&жcG:8u8ͷ+e,YRp3wVL7?7̲wa;|~o] 뢳|Ij`VXuXw_|ף"h| kۦͳzXyIvnȞ0:>{6,)O]8dfoa 95?0{ $_wT_m<#7p;ȏbVGhNup>SVV)mw-ʀ7WZo[U+l\үӠm,<ޱpLgz .c퀉Vf]EvkC>1nD^FScGh=̩7ݣܢN wa*Z2{ąOhJ.+NNH~ `|܆{#ָfYB*2z(2sЗĤnI-y+ӗsVB;ݙm~!-Ρϸ?-Fו8 BDyV COLBН  !EaB*3z:'P'JK+y Bɢ0O!tBO0O!, R <- !)f8I!nDykFl1q@AoTuNyBTFn NJ@B!&3gro-Mz[GIܶ<^אD:QpARO{p"nC,&ikX,['=>R}՛VEw=o| Tb2{Bfl9j|t™=G54sIkՑe#zM)Uz[Y,ɲ.d}lΎݎwJ7}yk&~~ ,6 8]h j6e 흭Db+&tkS[h3JMdޫע qS۴9 ^5-;^"\.,"z-Z7J?vZi)zW〞÷+WfŋP'x "UWa<, -/.,} /EtĜ=nPܣqμ^{kώuEζ:8s$ܭN5upk )WM[}64v #ejb/=?J$9/Ɔ 6fL=J:JmXgK(m ,!:gϝ%i'ʒ`S;ټzh'rmx]>+7nS[˄/trO{ԭ}#5-=fL  ,ñm\k KgiT" =AUP_k~L*eC+g]˰fqB`}b$q`V $콯HbU>Fen dkSEv1Rߚ% R7 ^wEl}ܹq.YqǫT_k60XS|W=]֘'ګS.;bz?:ɘ+ r%^3NJى|T@ .;̝ʒpM pq$E>9-K^3.u8ްZO3 ϥ?VZ`U'2_7R|Ms8zshX`!ًw0nmjpW2g$Yqǯe(l~^"`U .Ѧ^fcd9"ط]Ҙn1pgLK=~# LaJ<Ĝۗ@!Pdr6<擅zrny}EQ /R{iXyYVHÍp ay& Gu"x 3jzzR*!ݘ2e# adkۜRpwڂJ -O=E-̬ `Ӹ?w GF75[^Ҵ̥pl֑ 0OH%<>+o.ŴcJЙa-P ̺1Mm`4tc)l[׮?|TgrR~1(Ŋ-nj4;B9f&FPexi-pޤYl,]}$?֪Q%'h6^Dy,]g4$1qVIye᙭]Cp8xe8 [o0yb$hٗwWN,E^֫Syɽ٠ZeVF ,CRI=^4l9clP)c*|^(N>iJklp!^3{@U1/)o(-, ^|x_ܹDWQ F`SC]O0 슑ʳ/ 0I{pk0̂/[{2t^BkZ_9W)ޠ ^-ji5dFFʩ^~6/ Cf`8z)R,`sߍ?ua3Ubh6i/F5^S3gf'\{bbmc6m'C:0z~!zG~ׂw[>'aD>g;o2j->g!rwU2bTuZϊ-iU՜;wzNJ[rⴢړtֺz!. a8nۖJsm{G>?7:í5^迡Ab+>oa [o0ʹ'aС>EgړͿ}(]Bg@4L{B*<'oH)ϸx% )'RQqg\K)҆~gIlL?ay7.EhO1AgT5|ByMt6OSSrE9R TOtўb$iOH}7O !'b7@ax IDATxwTY;izkYbר ,bAEWwW^.ػ(+uu`@ HMJx<7w{;2d$"!PUIbTwFFWw!&ZuP凃¬(uM/ 8 JǬiuߢsP5nemh"Q ԑE?ȓ!|F)MC~ V ]N?0̇e0|Q%]KRDn=WT rSoy֭(c.U 3p_X8^+_*7@_u ܼ,?]Fl}#Y$I2V`mDd4ퟢ"S0R[2 =:W$6d1Qs};U Kˍؽ{ǝJk@{9KʹEk&GYG7 $hzua뽥|Q~e2J'H~wvԩdCw!."M_2UJxNTڿӪ"˿4e1,!zRfgvv-~[%3]6oq\&NǛ j`>pn:hM[RpZy}t8', ~2ApK&.jV0觭 4>h4 8:!wq1u!K1ptY~=ORCktTTusK2ƴp8$_Kq'O#@û .Fgt7a;;i+SŶJOHQkd:u$P]ix*4eZy1KYʚTĥĬ|%%ZѾ0>l^v[S /6?b$vt1KWDW7ePRÖ韥O+!rB47pg0a/b~[!TnkXr?G.t!S2S ȉ?/]oke%Dw㷟%@a'@ 7!\Ƚ{JVbQk^oMJk;Ex~ ^.xǘs97qzQo $5{8(*TSF|jx]_o.Dtx/n%h.SY _l f=O㓩u6z-_L^wVQ@aʼn@4_7m'x27ncƯ1|ʯo,%or^Ouy@a;RY|fP XzM%+IM\J̪WRD|z8}Աt?0/=iw|I>ϒ9G2l}eiRGaWT֯J [L.woᅽNL2)OfJ r_mI@8^ =_&J|9]K72ڸ3SѿgvonΠ37 5p]hndq} _ۅ&>Ka2gG©2YzM hgk ;5*t#?ހMgɢ$h.SY 2m&\#]-_K o ¼-QGotqT>Lh mmV6e /^  O,Yv=E%ޭttFMC=\Kub"-$vP}z0=P͚TVucVͬtަO/а)r"I?c= _le]QaӫlTLd}@z :ˮ[V0_Cju2 XKzfzI$E]AjΤ@Sz3;FٰRO`SC^5б ^ ]e8!?B)e܁z}V&3Ard&Dz/.ݵOB'fBLH,N7z @_M1 )7sLF 6¨:ru+] f7wc7`N7 `[#4(94BuGlӮ"w~-Z5TǼ@R%[hʠ/2Zo :=Y,i_fFmw1:^u3)럪ÓROYIq!_Cܰ'tZп?"!=3/WmޫV)z$5Օ)ʍy'`6eL%g)Q{WS cH˩eYȼ|j.sjĄ K/F<(ߌ?9I W8ga¤߈V#"VӖ0(2EN a{(d>*^UеtogT%nOVDQVZ[o+"4i+,Y7gwv7C5TǬzKP\<\|,HR|0%r/]kB+W+l:< aGF77e~~ԑ8lUZPya&9w#|2j>IYu[7r04qsAgC҄ <ՓseS2w3%ٖ TL; W52?[ےBJ,Nt 6IlX"܊{#k{Kбpjd|mkt HׄMEt<4LɊrcFJ[_+x"4j"BkԤenۺEKYʪNu̪W丰46 nR(&[NZ>[ T]?ʺ"(jzu–Ó}TLŗlܼdTZ%P`fGup76[XX[Qأ5 +6,̉Mt`vQSNwr_ۮ\[r+2Y2\D{σ ~{8ϻ{^m-dĠ|`TX8^h;XrI-nOŕcl`l@#ޛRrt]ǙÄv7tdҞ'·Ot1k{O>zt|eՕv #m܇(Ϯ$ZtqԤ5)SucVߗLMH *i3 Rg# sQAQӫlTL5Z?+Nm0E7ŵ]y!T>D?* A;zb+~PFpY>Us] `Gi*?)\LEf uMO ܿ>D: BT8_5!,!PVTMU1~ U"/QZ+uڢfHQk-ꎢ*eޝg]qh~4R0ԥ@5J O#*ض`pVmA9]X]O~G佡~e 8tsvsc*7^5]KS[=Bɷ[u;Vկ.Nܙrg `[޴Րfdi)HV8S#|>Ocn-w=U"Lq)5Q!7L +E}VnT[9G:ƗCx~C9?|_]R9]ͨ+*EoCT畜>jz Lac60̣LDd:)En1G 9̫r뙵:65a2 -]F @QQƪ 2t9&_T<wGO?C]'#Q{?feagH)Ųt< ?ڻ.ɦ3J냖[3\[\Z#q'5,~b,]KoP"^jdi%C1}og;ϰ0e` }gz#ƯDEeUtn0*S<]<*t_cW6>z}MmIg';n }2vu9W9gӤvۋ+ W\^,^* zՋOLX'PF͍U6s"q|u1:k )j]Vn*:%aojr.@cvrĉ\<&*Lҟ ,@i)#w ba9h PLHpbvG|LÚE??A$C!=Ѓ$E<:S,FM:8oL݀ (峐KӶAb}Vܢk}"/LcQXϸ+ŏ!KL1q^nұ9n?t>Mn$)soR&=Tbf$$I$Cz-<0tc[1)߰gˡ;/ާeF6N,Ee;Zb򭅒IR6҈ʪ4бp*A ^y5Ӳԝ10ܷ2ե"HXAzrg,oKyuBy Oda$^;c[r?u3KK7sl9%@أKc}{lkZtowLb2+܏t6C=۷&X<4?-RYQ+}ih7P2s˰iy>Ǭ%rZZ~YwP*?u4~'eűZ487~)k54`3n"G%C{:E4j6+ h,^YEnGVEIR{ )H2ե"Hp5yB*j Jo91ʗ4~l>Q7fړe'%4lXrew)E؄?5^o^W$erxŅ/f2rY4@M=/dO1+9[s^r/*˱GKb3EyaC'w>H#%BABL9wrԢ'S[xC7x3EbQZl"o{+[RX](J r'rt2Jhj_g}:|;h |Qa KE'qS e(UoT7aaAg~4 ~o /ք-p2b16o4ϘdryJ@>߼n^i=3ol\돞Ѡ9^\Y4~>oe?Sc - ~e7Hrܾ ;1_tm=XNc wmtCOW'Ό6}&0xה`kvCx0pe!Ww: nҒEmQ+MPkZ-YFT Nݵ mT racvIL*jMU#E+g F.\MϿNg͗jT݁|ܢt&}үkoSfvx{ŏ]>Q7~&n|>ZjC6l/6"8"BUBu #p̿ju?B!Y0#Bs?B!Y0BٯR(~@uGQH2w38긺ܑH@SM+M'RT0a^[Ϭֱahn2bP2VM\ԕ=Ӡ1dи={:=EY +,cȑ9KVXHw 6w{t% ke{S=2p g8׫>ަ\HjU/> D8m ˽#wA5y m]ѥGN :sЊ5&lЙf)5717+oaOKx(d`ԀzPH˫-0Hz6L 8v+bww_{cnڀ%OaGŎܑϽm]IhmQ7O*e.' Yć5)`\r8XSt7W7GK &I?{oR&zcY̌+$4Fɑ0iu>.'_a 2RaϖCw^O @˰M%"{0WY25$rmbׂo-, 94ڨoͷ iw@;IVֱp*A ^y5ӒZ0II$I2-z{RDK[y:Q$ =3z ]ƪw ;hpG ω/L}ӣHo̴'NK=iԹ@0{z8M;_n_@ U3},|IoE_'zK A(֩aB%eJ6 hd;XCzof)Z7Y,SHwߟEcjwomnE6!"!/dM[FTRCҗP$zחd+Ct9Ѯ$˒dj"$!S(/S'*1J{#wk-n L]d- ?Sz~#%BABL9wrŋ: y/*Raw&s.;hjG|tFDU~o /ք-p2b16o4ϘdryJ@>߼n^i=3ol\돞Ѡ {q/O46gd OBK S XjAf'Ό6}&0xה`kvC%+,dw|F M7tJpz]M̾bxu+-Y_ K.L Z\jɊ62FO罛{tݝ'OɈ]hx؀ DE w6lǑdɤޥ&Ht)pu/S@ r>h{?I^_A)3_;ƫ3Ͽj`G!TSaxVBi!f܏Bi!f܏BiP+Pur_kTRݻ̿; M];Pe_i"ݽ8IIA3KkZs~+ɷ[u;Ve꤬Nܙrgcr@\i6~uJpW.FMgR2)M軵"KʹE%8ֱ4Rz}!+PN$>ь @T-l *B5SjXτ"~2C{(5Se L3;>(Sz?Ng Ap m@w <dB%Je(C1j>Uf܍˞t}"y0e` }gz#ƯDE񢢌U40uej4hsLH@~NFV~(3Y7$,QR~2+麐Qʹ@,\ʝڲBգv_Sۀ_)eAҙ7ϻugc?Ȱ?Е5-*6Z Gp\+7|{J@׶M6B]Y~'Sz<ȄT Nŏg?!E+cg\s}6MZ\qa` H|嵁ϲ=&;tݹcSqr,]` ܺ<%e-7꼡τ)%zՋOLX'qѬ ;F:Y}"9׳AɚF͍U6s"q|1:k )j]Vn*H1lGvu7} z>zohkZ' !2b\@~NdKWH;}Kޒt7`),dᴭ'&4TX?Uu8NK Di,=?Xϸ+ŏK"Aq?/!̪Sjnb5oWÞPo?a,O|gSXԉ c"x7{8톯-*6ZUn\IO熆,SǚL~qC3SLstlGGϣ%]nG.{0WY25$ɆoسНrB2l#٨$*{혻kɷJ툀mѥDzVH܇)MV`a3mTnISaF b:|ԢxqHH$Imۓ"Xrԉ `ɝ.OtU@&~l X[@3v;f^9̜]ѥ1~*~hZtaowLb2+܏t.yxnE7 hmҀH{޻d%dރz} A?ilXzaCH"u,%Z}cn6-zGd 4&fY&NP*?dM,xc'?_NT ,> ]Ԅmk r?}KEV}?G"ޘiOp̏{ӨsŁ`p4wݷۿ<.'ǝ|Wpe4vWɋRs&yh\v E3TRd&zPE$bAִl} CP2,vjjX;P#kJ;<;]fN+ɲ$ڧVLolgu36+ĢؘE{01+s+S?SuP Ei1A._DN&ԢLF.II up/ؿdZon2N..3?Vj ~vՒmt>hҵ{7`;O:zw7(ݩཱ։ AZsَ#ɪHMP E+g F.\TFu>T|>n~:w>¿)3_;kT]>!PMjzylz+T/|smg-)T}Fʫ(SYeϗ9u2_EBLHoV}̑ZzR>s2s=;3r^,3Ld,¾?wo7ī{{891k )LcOt''(p S-=I_M I I$IblU%Uж UuzV&BUeU_tݭLfxoz7۷ 2qn\2p')GT. P3]:YH]Q0*79|uYEsg*g,wxj҄W,+XB)S|!rO״_C9c~P =fhhK' Ek0i; o)[sB}+ijl; |E&{^T0EwWqVCl8.@(*=z[˸ ] ;fZ?/S>536B\VXXѽ)[3ѳ6zU ߾3ui(%̻Wz&T&\ 2!P4=˃lvU8eMO,Y#_;_f==4I:kvZN-7YXsrΉ dz*ekZt;[676c:/_&.,٫o0&' WuQ컍,×/s*R:42fǬ7"P9lԁn @jM}Yoͪ;_50#0W G!4 ~BH`G!4 ~BH`G!4 ~BH`G!4 ~BH`G!4 ~BH`G!4K=BuXNR5:nP)<GbjyGIH~8e= T1Q!&?.PY`G5| !TQ V`xLGe7v`G\0 Cʆx(+*/6: s?=(O%$"TVx? o钼4|K?v ԀUwDR):wmK4o7T[>;xd#:eVYjmǝQs^L${'&_mԶ⛫-zӼf~n,mAS]89͟"ttvp^Xr)fZ `2ZV(!&tkv3V)c\GTռ7:64r_, 勝Ѝ 8cp%ȌN=*3!rmD DȬ{쀮c 2r'`b8o>%W2UQQjҳhlxaJpqRoCY '/>ݙG8b8Y7x+uQa˼h6z!M/W7HG(,Ht#49JfC)ϧ bǨd)wMPȀG u:{Lb%hsDܮV~M;;' FACb!}r^g@.u2V2e</wZsp NI2z6K&=t-ݤgʟ+pkY, IDATηޞ-*/zPKmƤX=s(_m᨟Ei&iea//1F:*]Ywޞ f۴^*D>:5 XT e|Xt%9n9~^oiM|WdE_tɷ0 ^o"lLEPKiQ˰yigv1~:VۉAcaqRo1K?<1AЂo*-n¼ï1i)&5MFN=XRmK&4 od%z4ȫn&:4A?"ȀG%NgPaW^LM5x伿> z6Lvz73a$}_=Q'i,AcNݻ=oʤWMbe3 .I&EE@*,y/ȗ<.L/6*]Ԉ2, zWL"l~$I21ɉTV?"LCnV#ߜ+.v.lKJM&759SQ]w5hUI//mUj[P;1 57EiQ~:*kw@ǢϷo5%.oM#.VYѪL܏G<23PoWaW^GdFRFM^^'hRtNYfgoְ4}BѾp%z9%#]|]>4!b!5#З/0܅`G?_u̵Uoh܀@K#W:7A "~RYAck#L yguWeaxd/ba^>3a|4{ `dt-@^%jr_R~:U*^#7@25:N&].ބvϚMMY}[Y4QQMӢV S|iEM74I^XzmozQeEXj'Dxd(S2ؑAΠîwÀt5fдߔf3i90dG(( }Ufvsp_O:^eЪ?U~? Z_2Vds S\ni7u E}Y%HARx# ;nuY]zuy(T~+ 9.H'_7\^T?Qe*|\}먾FWRT qAo'X^z.>J/S#5ZN[5vNLmLP+z94r߽CTVvJG<2HTzgP}]JLnGiv{C/wM g n$,{HHmLB'CxԂl5)^Vz棵ݜa8L¯@˰:Mo k˕_4yUr&[ ѭt oR]Iו r>Ef ~?HgmkmeA07`7:Rjϊ J_Q cR>۾CMuCǩgU|-[ ,K*T囦Ѫ`?1M#on|ar4im@:mz0S 7jV0JGrG;ov?0}4~jv%Ms;}~vdBɍ5 [hr .n+A,TچPsE|H,X1f-[2EO?`̠mq^|A@,J}<`*ht_eD/cZ 2i҈A~˱ 1{8$)4ei6F:8F~#C`,MXu {QKgw#bٰ?s ӿo!MuCMp7A~ϸŨhsCf!/-nGx¦)S*07t0  -;1}}-L@䣭` PW wevLL]@mc6a݌Q&ab=E/ddAvȁwm3gĕ!З;TG+>Њ{oZ g]6^~`iyqNLwti?h O'ܴX0H˵c֫CVQQځ6~6s?C\>^YYc 0dZlr(_^_^O;k7M7_8 )#lfuN2(Ni.&߻w'3jL|tpUnM4 ( LѪ6d;\K{*[Ž|yk'ʯ&m#,xd(zdP3(`Of6̀ ̜; Xr)?=HQ.~p H_*WLhK.;g=_o:fئ3VT<:@G G*_uDdcܺwEH-3/nTkp &P Mݧ~ct|}o@=h޸z۶\ba D&#!p: B ?B!i&BT!TG1p#Bu#Bs?B!Y0#Bs?B!Y0#Bs?B!Y0#Bs?B!Y0#Bs?B!Y0#Bs?B!Y0#Bs?B!Y0#B ;PU!+&ʋ!T PڨIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/SORM_Breitung.png000066400000000000000000000244411307543307100266620ustar00rootroot00000000000000PNG  IHDR/ IDATxy\LgTV%$*٥ g/N&.D,T6*JhS}Νn%{y{3g:CBo ho0 pfVEeb* [Ⱦ" tffsGkh8LOCVU0v4?]Bvb4}MM) !lrb3g`2+*rJKss6j_xϨ]o-dBC7xat F3nz2ubr8“'C^葏g ^.d9ӧ`dԍbB7ZjkDEd4M|y2"TnABo8@=O~| ffR 84Rg1\.7_lQQQ&hj*GDpVT9W9;q UUOCC;\n bNW|@ՙ8q)ϿF%O`)%%fjh 33͛7FKKET)!!faa},JM=={H e&ѩ̌CET-1!JH8yn>bb j'wQ>^qAA;n++o)9M` ogw=EaaՑ=}XUR/IM==kuu%& =a€3M ݨQxA&$qĚ9syw͛#GV89 b/\؜wiT{)) yyݛD9t* t:=18UXRD֧[:);֊)_zjS%gά#%/^صkgPUD1eKYY< F޾GBB  Cît:<ˍuk8 4G+&& 5b1e55tQ]ꪛkP_緦sgy{{m CZȑ'$S mPVVF}{6mr]j ++o;w~ջw\ns筬:d2hR:YYIM.]>}%p6mrꆌ [NNNʭ[琧RRrrRTMuu%60FɹZFWׯH[fUUwo۷-[f|y2"bS%˖M"99::$%7or#^F=벲$_ ⎒-#wQE䅤&]pr55a{Œ䝖y.=Ȩ ؋{[r۟6mvkH5\Yy=YˣG>dI҉4,-{|xˍ3>oD"xݺۛ:qp".7'7Κ<=wn#9vyjڵg}1Z+~ R)ffzMc 66U`;/!m2"\ZHɈ}#)]P2ySS]8s&|}o])%ZXOBeť$p 񹖓SH. ݣƪ@ƦXFF^YYŶm*zZ`x~ݻ@\ի_II]8Ǐelr8`h1[gKJVozA:},^<鬿' 5yTU֭i4h, Z#~Hp*&**xH̘1C5G h%%_~G=g2ԪIX,ҥxt2, )Wp'v:v/F[hBFyyE+W2EBCb lll^|*xy-N 䱛n7eth4M>}ɃǏ_84ޡO$ffzon)Ս#-IIB+jp>)ikr{wr! .h60r(SOS3,..ۺԥKn^IWSSTR-5kgQч>}7mrm }~~˗Y=zt{)[66=]; а(aavWfJ) ǩ+} IVVN7njjRSs@WW*|fd䙛ݿ&&B]KN 99ر`9RSS&C7|ƻ͛VNc.cF@;zru_b QTu&N緆 'O~\YYT j ] ;;eU22ӧבQT ɾqqFMе[$LOBMMǏ_?rjUUu"ा_H>[4HHظih4rۻwXXXqq4ɖw̿xU]]׫a,3.+:SړvvLMML˫U}}W65t|p8o),MvvNbt5F׏9MiرU-0p8**&LpK+ekO#aAq xy-^f(SDDD[[uqҿJ'2{C춵5OIrl =kǧs 5n\QF]]]J>~}zMMݱc77--rjsg/V`9uf:9V)+`2e8L7$&뤣 \t:5oeeDۛn׀|~**:URSQ-m> `t1#)4.:;QyYP";յcƬ Yի#??94+|RRrnߎf2Ǐn<WJGF=y򲠠TRR< `H֍p`**+aݻ9d2nz""Bn0aC;!nm*k~\rSn햖;v]FF7B;ՒTq.]&ëjc,֐N̙ ܉'&6DLl b }} }} k[̮o N|mlm,]M< [k$G~7!ڵ?eΗXLo+WY~Fz[v8:nqY[|W缽*(h/L&64mw #kBV {wn lhl|s PU.o$$˫ƌ"wUUUk2jnyy)"bn]6B?IQahh aG[!?@~3g.b7EӐ!+6m:A_H}>׶l9]p9sv@jj~%O߿H.0;vI2kN222GFkKnqظ'9W@RRtXXlC<鍯̙3ܦL֭'7ƍg2ij쑶&AA\u<,qr j11)Z""tO<جoķ7o$!!&hؾlBBEEYm򧪪fQO3^ P^^E\%,z%$dhSO Ksr zdx;w**hi,YypԨ~O 7NJ= UU5Q$/'%eRN|=!$yK޾-yY#@3:Ԧ!e 11ѵk} >M7n]f;򶴲2vqI7E۷~>3]~~IIGNcnĈ55uq7yԩyg΄EE%::qqF{N-//jj:u;{wҴiMС+. \ԡ6 !ħuRaN2gnx腮tw=gX,n&O1))SOOp˖QQ ** Z11)l2O飧(˫v72rљEo%3f EE7n<ޥ˄7ݟ*#"'`fTRRrD9,df 86 !ħMWsu3YY m=ݿ8rꢢkbb Ex|~!Z[kݎ!::? Jsr <=/\y{wXWWذᘂ޽uBmu /]rϛ7E,ssufۛBBlTB?6p1FðD߯ yD}`*D!LCN/L"lBT:WL!u| QT/~!j{ Bh\' }*j3 #BTB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!S!BBL! B0"`*D!TB!цmhm8oAr}m ٶ#~p4ViOBSa{p8 ¿ڃF57FdBC7E=zγGګO2e˓'TNh$% ɓySDJ?MJlk`23˫SSs]G[#) ^戋e2++ع,o/9D)fKaf6Kܿ& T$]g5UUHK47Enk̯a{m_쭉ɜlԑEWh4[ᇱl]߾_ræ㠂)Sn=y24M9~<6{PcٞCY8R=42reJK3g´HH ?~}qqY@@tkGjjnS UVӭۏ^p< a׋~!o"O9R:`=C9:u;?b6 |dLΝfpa vȐdQ@@6&Z]?^UIKx׮@CXL11Q11QЃ!%_YƆ ǴU /7UVVڵSl?а[UU%?tx֬--{<}>smN6+|h4IFWWsgyR޻|֭'_[Cn_Ȣsx ymϡCWJJ>ȰO\ȋ"++ٹ|RR>..ۛ: RjijjqKjkxw%꺣cUUիlmL?OE1!M%QQ ,o_wQdqޘy[d89 */p=ӧ'u»o̅p=BkKQMEm]SajjWmccL|-L;jjRM>xJJ>Ʀ}LMu߼p,??p߾Sy6lpyPdU֭>~;y第ϟ9,gTWlѽ{#+Dӡ_[726x)9rtѣU{͙3bwg`p 筬x+dg}[b+qncHSyUt:}dO]Iyy]HK55յ7k >N4z`icYKy\NNJ'#͟D /FQiVakkbkk|I3F|,--/,L&gmM t:TN!u멭[OQ%%v0hMͬ]r_O󥕷otmҥ܉w/!%%'(!UT;֊,f32i#`ƌkm= 'ۉ`!'5dLL* ;q<~\TfP8qXX4mmUu=ztIMLJJr x'C>|_vx_M;Lb@JJbРb|z>lX۷cU:!O11)'ONӧD'0?|BvMzzt:<|PQQO<{hI feejj@Y@RR5?wླྀcZ:aee9걒l=LL|-!!l7E)qpQKOshн{ 0cPQѯdA_ئM'|B8q_f55N55jrP/]S?PS6RPqUU{Z[*O 6zf <7"qrIygUܾSYYh;,pO55źz;e$^}u4Y;BFxH p8*+-0bv=AVP722-"޽5kNwu!L;FZ3j23-L<8xRuumEECWZUk@vϡCWҸ nii;璿kuVmA&ɃM\]\ Ի0/d@/7Ӏƺz?ٲ r '{tihVGT8.i̙ϳL ]s )qq$)gAK\CCرt:Z{ vvyITh:GOVV>сÇ3EEmm~[lhUF޼) ~KfJv 6{Ԉ06>aWDG&UUu\ 45,~~!'nY<~?iPOO<07ki9P33=pWӃ-fl<5k$Q++#ӷ/kӧq䯺:\h|D]]i4{ z>~׮-7o>m4jݿ"LtEE%̚SSәb/YbŹaWrИbbpgoUYy<UIKKښc&OkU~;{oExAdƅ=zh*) U+ c*D}ϾTBm;lG67Gւ!0"BL! B0"WB=5BG_Fւ!0"BL! B{^k$ }pIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Sample.png000066400000000000000000000530401307543307100254610ustar00rootroot00000000000000PNG  IHDR~ IDATxw\e[uZDW+Jw⬭Uŭu/@Zgօ⪢( 8 1r$|/^/幻=']RI`+s ODE]+eDQW, (FƓD_@ML)Oٱd]E=A;2g)fӸM}/sôg_=]6d!:y}i[vUZ l+P__#X]vc쏣孽{:4okVb{NXtj'&tc"9ĵCO,#KJe΃L|i73jʶe魳a-r P1`+%^2Eby[a r@'ef|VO24}j@d4*匠Ȫ,e'Y ۤ))FhnHRo3D- rj7`%*2?~a cխDv>גN6+)fۇ<9%G,YvmsZ+!S/;(}>9ں*||FaG&M}d~][]>O1O .mID YPҍj+ Tp 4TdJ'v?N1oPІ%"yZH܀rJ2#@Rsz#Gn>e*paVDZNlPF!Ou-%GQPc`bU~,ظ'ֆT"qcOD4Vɂ(F-)9] @`8I S<.\ 4~ bږ-J+Hu0{չA*dJݹkVOw|Φ1G8*dk?#!'%̘]-h[' r}̇{FIvR @l0[őo,ED &~wzSJD!j[ Ը?[X[]:<ϰO(oMD ICY,[̭myhX-B. dei"*Qc.j^ڜ"o?_W?k -޿]? k֨W33ܕs" i)"gbe-$׺~m0[zo^nEq$.[йgo_R 0VN޽u%]Hvl?SX,G~itY?DO-.UC٧G]q8k_V}}ٺ5l:p΂$݉?'i<{>{,|~;sj`[Uօ*u|\ vtuY:Ws3PK%j.?2jT+GʹkpkMf2Jb/Yi,nε/K]10#_IW<ݞ3/$6U>nt =\IFL(px),g/&Qp72 KU j$[;u {J 3$&Tc|A:58 0/(0Mt` nn/*?K[y5Mh B {GgެX"G љgMI (;vjpJT4JRbȲtF.}_hZ[So?Ҡ_jEvMjԹ.}9lσlf" SwBTRT* ٹE,e nַiOjP=ѓhrlǵX;]Mv4αv`Jl/`{b֫Rem׵Ϝ=7hߠ},F&餐2oM}Kx-}Ve1S" o~UI'dV[_ P1ƽC~auol>RS~իռ_OtM_uQ+sQsj\Iw23pRPO5))JJцX $gG[ryY^K,5(HGlJx^$Nٸ$>ӿfU~~w~Taw+HdUFι/N(9T R;ݳy i0>%VʁA"-"dm,[8k/lWv"5o>}8nDc~W{|^oW8srTIب 7b34gh"2TMq֌Y N: %hcm׭#Y1xJ%7?ۭ!| "Re+Cvޗf. Y)w";A?\G桃톸8-|*>KOkgOg9 ug.kZ+JUҵ<׻mt :G>d"s"̡Sj%񲯼R_EU.TcOk|з:d["m!v>b Z$4azQ==f@\"ruF/wcMVm% )OuO : x]4YcߝtߝrY~>9IxůS]ln/H)/kAyߢۆ>LW}\&qn+~u,LԍœԙtR>KiFh1mJiٛ{`kRۨ#Q1#s]"j=uRfKU|}r|6M(ܗq>=ܽuE |O=?1}ȧyM*vBMC/u7kX;>L_X¦یoDȢRݺ_1j-R*#.^[@Zʘ3B ^2Һ^ \` QTb)(;  `4Z7;ߝ}B(t23>ToKG~Vkb}=I$v5w"tK(2O+IμNsgzgzg͈G yaΨ2VNT[_ZT_qB IIq2LRkDy[eǞ$IOela[;-q%1m*>Ğrtvjv=|4L'Ǭ; ~|jWiKQW'O5W{~Zvc;r4#;)ҩĸ{ nP4[Id%GW%"EG93m=\Tsݪ-w1וjZiyitvmJ"Na_:׃5Ջ(ݤoԽ; ə,W^NDhVK׽IeG,$Muv^K+hDx3>DdࡳݱDQ~8ODֶ˞Ĉ(3 _!^CD"'"wN"J~}]BQc>-5Ruiu{O?m+vEylceћDTKUUK>eplPSc# aWP>& aԮ"`%KZhvmlf"1[fj9h' rݿyk4v@QWċ `4o@~~~QDT{l7o$f*]*ZpĞlYH 4~8%}N4n_!{[Mp{bۊΖ/OM,/Yy"tG?>Q3w{֘4")"DI!.ܿ2۫@>/Ԅ DҒW_Dd><(:Է5X)DڵY*s&ږ.ۥ?F6ѲLf^V=ϾbE(pS {~KDr;d@AZe"rjID!s;Vt$Q^ؖ;}W.ڞ> #"g1CD״t05-LٲԾTtǰDDG"*,6t/BQ;KD9jѫͮõVEHK>r+|zF]Qٖvuv{Vv͈ "Q!0$28W{|^/vG]c%V!""molÈZVmgkb/mQR?&Z6IӌM .z 4TTv׍??h"bdyj/X)~p'w9#5\"x#>#9~HDh詫"dlZK'"*9vs'S%d(ߞwdP J,k??o3o>ٺd]gWADSq׌7ԻfCmFDӉէ͝#5ou"^y]9jQ=\Gß+vE]>YU9[p7#r"JOQ۫@>/Կξ'?\vԾ 6龯_Y"J#Itlʾ+\]"=(4yzʭsgR_m`4cS=K?UzݵAO]b Vh225; a]t<юDuApj_Uc, WsÀk$~G"do tgm1;֕v:l-%{V]Yי}6o X߯] R=@!Bl2M8! 8) Al2Y;z8h0G< 62|SMǕAlr¯} 3;)J=<sOL;Tz ̂jB~9&s:=OB~9&3+xCl2/=O 6琟@l=> ?bF~Bxb r7b r wP 6A!?@ b'0GMP 6A@~Ӈ Lb'05MPԐD 6qCl/o w`d!?q@lӁE L&0eOP, ?@Cl 7&0w8&(6pq&(f0xb{Ob'O @ Al r Cl|Al|@l(Bl(Of !? &‚` iBl(:O&  ?&c` 67|y @l00M& 6&'B(0}xv:4SzClS0o`. 0 M 6)QmP 6 bEz|WaC]xW> a<j|p`&M5˿{w}]7RޭwGRJ/XRt'ƺӮaoSAa'~|`0Goķ~'e"F(.W _^xv ۺU<~-[teV^%vRx?ݡ3fcDORљΝ^27ߚ"=hX]6Kל,) Ƕsڣɛ&=k;Gg+WW_웈 dvlr󓬯cW}8-b:w _}̌{4ԕ7f4pvsƬ'=b}/}}2Q%| ?=apN_銌~unj6ꍵR013Dg>yg=(183MWA-eҨ ӓֳK{ƒWS߹=(dAUdF?~|=ʁ/J]Xߎ=5:&֘}ߺdՓmi; xp(pn3t$+OjpD1qb?B3~(%:5|!DJ%)JR08Yh/v'm5bІceDOjReu[։Mbӟ^c^D2,˨B/Cəg*l#b`Dn޼i1@@l˞+=zwxp>dɕt7) +%h:bjIyq*vDKz߯aX߶N'oSd %bӒ*<!@[f?04TkG *Mz{!Rjʉw9V$jO_ʖʻJzy4Gb~.m.b'-Ӗv_A"hz-3s|BlSC)|n(|xqod=]#/>+2#^w ^·T,UzϋA]eܖ4"yԜݜ-FmxysTƤC8rMBƥ涢5)༒n\T]JbQ3\pxfa:tΤy9]kby%N=8[w/ܳj3&Y9/0v^,]ҢݗGQzt*z y7/s7ww?B  SemĪb/e`p%WA༒yF׮[ H)q2{xxp0Z8$q~J|W*S=[}Q58&g=~5V06۪=o >uL.{ȳLJ-p0-oc)1 8m?Κ>xZt]/~jM '0B8%8 6| K8o`pn*>͖=K.P0BCMP,h/jf}S﯅_ٴG[fphTMç|m')#zh] իZ]MQM3}:N:Ou3#uo٤>xYPKw[cQg+zy\{h0%>;q x ^v.׸\O,w{|UI6mߪ @JDŽFјn5m$gw>:1⣳$}U)޿I:Uu *wHW;z&ϭQXҾZIIkv4ggՎ]ƪ_#X]7gi12"Wm6ʈ^UF? qvؿϳڈ.ՠ}6Nj_ýX,FeC]޴Q;JզmYy:UoXb˪gƧzfQfb ŏhMMD/w*2R7}.n׿po_ZOncNYݫ3ž^2S?O`zۅ x|(͒~3h+MWy44zƭI^y2B`Β5vzMpEu>tqSw=<o*D<u@{i;O=]mƒOzAI>{5p*FV[.H=na㴋0 ~S~p0 YY/S$ff+RO(8dhG@d4*匠Ȫ,e'Y ۤ))FhnAcJeyϤ{cO;[QfZ*ʩEJ\u FhѬS[Fz؋ o%x2H85Kއ8.Dt$LgG )E"_#R oOqԹY_t4umm sFe˓ZQreۖH|1\^\`G#44TdJ'v?N1oPІ%"yZH܀rJ2#@Rsz#Gn>e*paVDU !2smRB)OrgR9JM0'l| er;t<ݶb"H`ADJEVL.R"TKW<7W .6 Dv19z=)Bl#IBDgOL},ZquS(<bږ-J+Hu vչA*dJݹkVOIj8✾2BF^o[c!&vo}ot0R=Myz(W+O _[9zBl#9}=q&0Rőo,ED &NP~7zwJD!j[ Ը?[X[]:<ϰO(oMD Iy SH(vX3\pݘc]ͧ.nbQ*d3N=kVø{+IOql~-&4 (QM{1cZBN!6rM]oMK56am&af<)ħG72o߲n"UG)1F3+MT3 c+lBLn"t!(b0mŭ]@kqgT}׌j[ B{>}tiTF)[K-ը1tƤdy\_ҡD}X׿Ĥ}UR(ި{ΐouDej֞sW?w\C7mTQ$8U:e\FO6lP䘻sFlѴQ P*S}tun޸QmϋƏ6׬qLY/UP-IahȳCϐ}T9f^6iԤ]^Kv_U\\9W|z͛ӽ9eZp/+Y(nvדk%+1}dZ)1GV̦EZ?_(dۼܐn:ϋzի6r~{};忴Yc~>]\Alؔ;|҃"3׃]:_t*PRNAZĦ&wl=>xr86H r4.P[`VO\3%ߎ3GYt 8.][t- %xP:x1>@C+W@923FP|f2~fuu8A{:,,=˾Fӭ|_-8@"X#ܮŴ72oLZLjލ-:o)KKu~!- 2ӡIkU%Q`>p%&(Ml0C*_xAl &^xAl &^xAl &^xaJeQ@DD S uLÈO^S:&'1] 6 GS*a D" Al0x08%+6 ZL tAl0 r] 9`ph$A q 66<R] p%)`߿uR¡ޟ"Bl0vo|nF9Re"<a֪ Ocv@D8`px91;b_ `|xC¡P<|Kޏ]Tp@q`4pȴ~kbq Ӆ&"w\31;b `|ǜ`@l( 82a0f` H7/&Bcv P 0O0/M3&7K`!<&L'<8& '<,&|Ccv `rcv ?Lb@hLb@}Cl-db@x4`rdPh0f`|xø >&b!cvF @?EAx(RMm Nx("MZn&'<:&5xӂ1;… 2˜@aAlu0 (xMP3: 0&(f cv %&0{(MPS8oMP!'2Aqb Oyf 0fM`0r >I1;Bla '`;O 6A&< O 6Gd|ClS;@AM`0P0f L>AlSϾ cv 6^a LoM``1&0b/-'(X  OP 6Wӂ@lc=/˜M`4pab|B0'E LL!6A.!ԽXeRth/mt]oG? 8y g?ҧN[r_\w3qn_ҳ\[czeIE]&/)yn$oL{7Gg CmTF՝>%'jthQd "F`D0[gꔪ{7,b#ծ7:Ҿqy[K<}o[8zmYRXW/W[cMbI:ܺvR%DbIFMF_ƖjZ_/qԗ>ȶ_bȥR[1R/}Fv7!Z8:Vi6W 7*4ݒv;>Q"qsF~:_"rC`ըK׃Me)oCDnI<ͮ;G*>!VƽU;3Vm۩rB"r }M9$;-{yR_73[N%>y@}_z_>oOIcm0in 3Fl7!Z8:Vg ,FgWLyV}}R.b̌ßI`l6=׿fSY$"ka4%MR)==lADib@+)qs xsCQ{AUТY+ބK2bLE켣Hչ+-z!]}rDi+"J>Xr %>ZSK[B tc",ȤI̯kXvoOqK¯}:B"}N0'ÈU%S|Ċ̏Bq":")a3)+4TdJ'v?N1oPІ%"yk嬕JeGDFt-6}jT"^ $tfG5o.JyÇ|=CQRmN%>nY6(9z~Hd.*%IJ[x9aK(wءcn^LDQ֎ABD$ "Bƿ -UK</ ᳍,/:ev19%Fp7!Z8:3,g BĦ.N":?Wҩe.Xw?cn1mˉ{~%•sD:ƶܠF]m2Iߵz[F+اؿ' +Z5jxNwQADmw3I :?o^ڽɟkmPʴi|xV,Wa>e !%YFrK4؍n$^Zst,7gk~&Ml P/Txc."j0%D֯vkt*m%dRPoa^oEgo>55-Gu|'L%"ScͿ k+xis"Z:Bmp+"i(9CD%kJ6D> L pW|n;NQ(fB>S>=kVG/q/BIDATf|j!mePv}tiTF)[K-ը1t$եחt(c'Q$:{I6fk!$e|ݱGGwlZD X}ѤiQ+9:3!6(d-Ԭ=wZ2{I{[rԫJeľ'&;vBeF(9*/qf/nۨH pXuF͋xpnXw#~rc76`?WQ]I-zl W`7b۠bn Sd_$"VM`JKEEuh /i~BlcqxIOxJ8"?Ub"{K&0]o Y(0c+xmʞ6azx"a6i+ yP 6+R 6 b/M 6 b/M 6 ,/yQ}"B(F^g )# coP`&0>&̂Al &p# b/M`L4;q:0&M 6yKp b/M`4th 6 bq:Ё1Al &02q:ЁAl &0>8F 6 b/M 6 b/M 6 b/M 6 b/M 6 b/M 6 b/M 6 b/M 6 b/M 6:ҭ]Fu!ƂQ*E]_7DJEz!w(?7o,p Se "Lzܼy bP*=<3G? ̅2+NgQWW &^xAl &^xAl &0 ;d(Y+$z׳?bs^/kM}칑ހ}K4YC6a[ʃ..a<-G WUĦo"k 7vX!Q1͗}kTߪmыsO0Zo*.ߵvPfva˒N-&=7Ͻ_;-F w-DVeSvr|L(9T z؟sy<3`Kn [R^NLZ\Ӗ ;IIڔy:7aȹq#!ɌQ*QGi7B <]s÷HD_{:jȥyw]$?6tS<+HD5;ȔNfF˄ȃDd[{ob#"*Kj͈H贬P6vݚ>X>%O{3cJn~"[C~92UADmMVb/z/_Jfs[Vb0ϒm:W,lXGOϟet9?Ȼ\ D+MBDN|UQsFiXm{8sYZVG<^a%u9tj]$^WEkֹ]'Qž\O"~qBb_96c0wiD4xZ;MVbcI=pԊEYy!.b B7½^fGY3؉USJBD;GDTw{ĕ; # ykխjZ.TVZkǢUh}aQXE$D+jR $?&LWHY֜rސgOQ#%\II#iz {r/OM휕O׷e]q—uؚjm7i ΰ1!m"/iytxXS+/7Wr}Y}Eَ7*]fOj>StSrQS3%ۣ73&= KEM ]}m_5^Rk5e2+2 i ʆ_Bx2SY5'SrIL GkbϬxR!x㧆Z>q+mz۩nXVŲ*:"-*ݽjナ=ɫd x/_1.k8)q53>і~ K!v>#5%F)bGWa!˪RxΙN;v;Zd̑F=uq1ʠֹ `hBĘ@$m|IŲғ\{+bU<~zs-8fYU7չq^R),[0T颍aHZ,jg`ѹ\U!:8M  )W><{jc^™2/fKYՐwpy90L\OGٿpHT l)6t7 u ;#VY~Zsk6BS'S2"XXӪt #~JSZ[t%zAwC_bɬyY7Kktm,)&s/,:lșc͘7UlK.Pr]氥#(3hu=z?o_RwAE|B9o/4Wp `lnb%}xGK|e|XrlMLMDa @sYET!>8\SEX>·{S^VfJWM2)E1w vuYWߏqj[LVٯ{7:H6.y}F di;}F+,T~fy:Y0WId!\p|~bӒʲM>a>d^0CtNƁw&ew hk?'ۣ76cl75 V+`g@JLjAI6v sHe|Hҁ/jァTuH' YsL×_6\^_&n}'HD~u ;*=Eޖ6Wo kghDOi[5womt:9fw}-_wOzU2VpjcDB `Qdpm@3gt5ֶh>Fz@$WeEqv_n&ȧk.)/+3UU)F6V(?2gJ > \:D~u7Av ^}V{^Z6B\,𗆶O\~q_|wiF,EwBosXQ}RvFh"/G7w`Rސ7Rݩ6|zl Cl;o0^j=1 pOopOF]rV!yZnY*L{J8YQR7ho_p70z9e~ A-w]#g3_)!:8\S=;܄50Ň쐲y_6SXUgGYP63Ъ[PƼh#LOksyR3j*$'/PLbrz^3l"ء_ DSf IxOBg hbİ7e!2 M@ `e:=RsM{o?'FyG$Pj|{ `I9>'}[ =Rŝh٬>^)0NiJHu'.\zaVp0?w频1 2~} _Y{d|Ėym_>?0h7[3w]Kv;kgn!<|cB:j!BMhD!bZ6B!؄MB!6e!BMhD!bZ6B!؄MB!6e!BMhD!bZ6B!؄MB!6K Bl: h8IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/SampleFactory.png000066400000000000000000000477421307543307100270250ustar00rootroot00000000000000PNG  IHDR2 IDATxgXY3i$b7 7ņ^W,(***6(}uX B |?&2AA<ÏdΝs ͝ !!eB@u.%?Bfƈ AefFW B@!BF!B!̌Q9p*EM#B1B!B#B!DQ)6"u߽al7A!~Fu~%)Halp _ڷ UtAgԩc3ya*vJaf*@:WL궡 #Gԭ[d%"C?>T]Oo-݂Z&8Q1wf.I,ȯ.%rӾ~kߐvof5Ɠl~m=L]oB[H׳3m;zk {D.|T} ;:˱ZDЙ[tjӇ=wv̤ۘXNފENsZ4;p}rvrcG %"$QnvY:9=~/W䳇|m2ehtˉˏ$'\fH'c'Y0s0E-/i2KcT׏ŹJM{jeRspӣ@Q^HӒ غ3_P Z3cT=ZX%aW mu씎tߢR'w"gG|@g36[ъOwKj86GڭcN]?:nԨٲY/6{nɢ18Ö̸uXidg-4B.4Oܪ!Lˮ}""f.?zZhSʼ{B}߶ބ yCfľM#v=")C~( GFߟ>2OdMZ?~iч}M7z=J9_̽Fsp68 Wr˓M~a|qe]z t&?LHOK(Y*z"!T`f(Ukrޮh]F/v] {=&2[ݲx80cds'ÚN4'I\ XG{mifeGVt֠"C}[o-\oO2>YߺN# 3o>Ĩ,L Z? V 4X fEr>)S87 h[S&| f[I5 2-)PKtƀ s7ti9\KݎqʄD}ȟA WW'ƿgϸN6sd9X6J͎au-/וc ʸ!q"T`f^a:7t#("xWZ/ WEl+\ouRaH#)G٩Oal[_VÔ,2w/~%4nC]'?@|E$]ٱ@.9H쾼+.wc/{@e2nmpgm,.{_+­+ bNH;~-Y,o5+v/`v O !)+&@jLa nh%٤8>v^} CS/EkG]( -)UoU EpaI|r![dQ˗4YѴܣg3ͩp]n'SS% V3KT.w(rNRŀ#t΃ 'TQɍC[_Tɡ5|~C'Ɩ DFwqT+{W*ʼV:',QM&'<}a>FtSWN/#%O?? W7Q}sA(>fןowB@9wB"}2soҙk>}is,u>#Y4(jAwh u -_$cc+Z3ݧ@G;j C})> 4IoB i fm hggzԽ&wNO`MH-T@Io\zq[:Lg "J>ʄJ'+B-%'KYQ;wfO[nʇTI"sZGϯTTN}%b|<.𱹓_ܟk08Ö-[(;4=ߓ5Kbz303F*1O X [v=ܲ:~ɟʼnnwlxhm> E܇_4z8v/~vPmEO'P _y/T(x{awzW={f({S "9S} 8}iEA5W_n>6E_v컇'xu4h4CPJnJ. 65q#"6. 4tP,9LjZW(+-tK/Y\K7"$J\I`z}8y{JYZ;k2 Tb,*Vw1Pz(0u`n,HdUuM6Y8PObkOPCQfB@&9E'SS%Zd0ȇD-1brKO2.AE'IW`^۲BJyiM}K4!TcafYq+mHN=5SL),\_ z9΀Ưvԛ?ޞ|plZ/)~kl[m7Ba4XtvIe nrF%pǤo?D$sܤE 9FQ9iH X#&O^r0Pxc)N&F77`{rgƝwt iMae1L^z1-q  [ d uH6Y @^!&ӫo.w#ZIzV uŻȼ[Oc8 qUNe)d׽J.!lPCn5в((: ,G3N u{E|\A(:1`l܏@ͺnLZa$`à`Hz>L@WS׃++ %]dϹ{/pC6Χmݵ czm>)VqH;nfΠC~sɒfcf`[i^~W)~ߨ>>tɏ1a򕐟I#B^Tסt^ g:'= / ˨Þy1wuq3 Dn{)fڴMBp .E7uH6̹po x7vE|fש"AʄlhE~uȵ`1܄|\&:LdUz(XCPA|.\~7ojcPB~LU-%'K@77F͆!!-Z˯XY_1@(5 ¦!tu_3wya[=Tvm99pQ˚MSc5M[I--.za;zoc@9SG\$H}1 L.)>/Z.ݝ2E;@-["t%"r 7|քEm$^ 0X"$6h䄊w'qK̹V,] }}ʃ/Уx7U!nI> FLo(^sx޿ryuX u?ܹRr&W (u"iguC((:1v6E{Ν}PeIjlL6/OVPmc=% ?0LMfLÔ!_%v%.:)C^tr'zCrþo]emC75,հ 2h0\ ˻qѱp5m{P׉cwA7-8Ӑc߰1#7( ګ4JcSgӅ6P_R2-UǕCRX^a'4g s jZGs9FnmXqhX >6ٴ#<iLPSY0Puo|%[<@ӭ8[L_3u?`GNG%{${Q{}߳ msdBk)VWf-gӱ3i<5>{7Ph4XA?W-49mLϽɝ7]بc/YZ`!~~#J4xo ~Yd^X;x_-NhZ7ZD3c"dukm}rK5 M?D"DB!Φ@}~C5  B? !T30B 3c2I"Z_G[%%Z gS * ?Qp8ϘAXIƫK4uTTih8ǝKEkO>QӞӣ,nz郈VUj?bj ڙY38\5MB*- xBV#~ ؽ<kȿR&Fi}p#=7jC>~yp3~xex;WM Zp9j4]}T?03FB~+Pis›1B!?gfu\jJT ^@:oAXX@ɗl e_Ծ덅G3>5KcdxI3WѰխ3j_s_3ֱ4O UA<@g^=s?Yt#wKmc`1Oȥi#ج؃/ead9„|f~qUwO%(׉?}׍|LY8n~| o yWRPiG)L$*޿ǔ['.5pOC.ߞا7Z"|mߛ]`$ݸԘӺM\ d.=03])Ee| UF~C\qPjѳ魃6WCx%W4h Fntg(yYEZ>6F[pTֽxrbƹ\6ڒ)HȭT彊i4Pk:MO)G=qFBԢ4˟?iOMjs64ޘ\xMrtݺ/b~s5ިS^GsaP!A)@fsCV`A~u  oէs3go}[AS H{d mQߕIfZQ*BB/53Ҏ+|N <,(UUh:oL|:z.%OH=r#/qoG38U/{~Y 舷Ţd۷KF K^|L0R_tY*R|G_=4_z0DTcbFW3.%"J$Cp|ZduaP]AHiC̶p^} Gz B:X$(5b̢Ng$E6E$* φ7pC}U%.N6sKӖE?F3eʝ.CǨB~~"Ty5/]$(ͺxpEW]Qa>rϟo>*DO~j=Ba6+&\?~/QEz:X(xtojku5ʰlzlvg0,7`e~:Wtu6'(.=1)7%BAF'x圎 @Pբ=XXZ ;-UPHh+) _bQZ_ K( =H$wx"͌n_xs[2f]}f5tSJa7^,L MV4ؿğ Nw37vfҭuMN]v+ Oװwse; ZhhzC]®&WI^Xeu< 5Xl'WmҍŲh]:,&]Fd=u:ZcK/g{Y;3vm|7'R7_ERWzɒ7ܝŰ5Ke}j1߸ u[=>r| rԘmC7wci؎/:+S$6s@qZy$x:Dsa|;( IDAT]紸VY u+i'̚a9vyu9:Cy7ytVf., ~^AjN3u5بkƝoܯ鸐n|}Qn K ֹcC >dM1tь/#5k4L | s=K # @6Svk\PgK/ ܀ˡSe~;toD#yE`^c딄̛7mчe&9&X`Ծ]=;:ض5դS7AYH嶗,xoqmJXTf+"B(0q#/r ids O:FG5͜?/z ;8 ؽ]nG7ig^۰Ns^۵՛OݫVJɒF]\0ٜ^>P&~_d2uҨnN3[ *Yϗwnj`Ɯ/E:?&¼ҫRD.Lgꔖfc3ci47cPFf :?O=:|y[wC5(29#8= H'^}Cպ3tF']fM6$3c(~NhˌBeM$su 2;EbQH0r{l;Zeyb‡ږ]RSjF䎔K3q Vmsϼi2t>g W̘}mARFW>XiyvP9$F lU݁A|mGUM*├*(xnmGa)w(r9ýq3Lu<񔉱E"g'OKvG;S|ޔ"0r pgrF/G$1)13UsGu57R o;h,TTF[7OST0f@D9kCqH(DUO#6( [*xTԽZn%$N >FSV N짶-4\&6wk'?WG!lfL~x!{GAefh,@ѯЋOo.NjW@ߖ[|<;70(|h!;Udn(^rH ^Q_lwˡM.n9Of!Nݴ%-2&HU o3gקAfyoJSjFU|@ASeyrvtiq̻'7JDkd_AH&aK{@ԨM "15NeOi[~*rs ?5\5\6f/:Ska7O SnQ܆I"!_rˊ6-ukVC L 4(l~W%JYIL%{!B$8-(|>{ö]]|!u`m,ӄ ? 6.nCR Zln Sc0uO~V "p siW*(.qImN-n8f]->^-oQyyz%zdob$6ӡN83h4^UU[x4Eik(_B!D7B5D3^\U]B|mGU oB!f!BBU< B!1B!B#B!DA!"B?fﻄ(!gS ȴB!afB!f!j.< 6F#dcr03F!B}mG~x ЏZ ?B!*gSRx#Я=!~$̌B$~߅1B̸6!BU!©$-B5\>+B1;B+BZlEΩ@!Rf!B`f\}B!*3sB!T9#B!q-8lB!fƵ3;!B)1B!B#B!D!B!̌B!"afB!f!B03F!B3cB!H#B!qm?wB!T#B!1B!B$̌B!!B!f!B`f\DuGB!+!B!̌B!"afB!f!B03F!B3cB!H#B!1B!B$̌B!!B!f!B`fB! 3cB!03F!BĨBU ;~細#hr°EY:~rYlL3@ύ%K^<5;{T=jU@_PPm1Bt۟ݲݧ633֯[gUr?{{A01d6AXh:FNcz Nw37vfҭuMNQՇK'kY;^{乲On-4X4 =C.aW$}2_+ IYaio97GuijFghXx(p4:׀IKUPZaL:S{:jOPWI/!_ۻeo7 :yfu2YM,xUzn=uǖ_f׹nM0vf2n O^E]m$Kؿ{swrҲ/#)7Q4Va);͒.q9VmdhW*cDVcgK<$+M *Џ1B׳m+Lza`JV.,)M\% GH@l3~P ^GG\oܓ1jPKerFp zfA3OCW>pt7ېm:TͿPR^O{ |yaYMqۑQi,Š Bee@tNSXtX} G! aßGhUs FnhʭD6%w\Ygh{%O Fސ J$6N.?4pޜݝziz]P-罛 Ks!K/4=tnn^%ׁaL8fUUn0Ask; K F˹saH'h6 L.<;y4]>bۙ%䪽)Ea@~^mn1bRbf+jn&\ Xp!DzaQM`d4y ?qJsYŧ7E+ m˭u>kr_>zv4}*_uQt."^Q_lwˡM.n9Of!k}Q ~Q#;6\~-,nҒw?N/Lf8@0BzRtTFU|(7 EC]Xpt]3N];.@8??kB7Ɂ7lIVަa*5v)"15FeOiv޻kP`~j,\nuu׫`4Ka0:Skaٙo!ٗ߶o~eֹW 4Y05GY ڮncf}CF-^$S*gmEPcM Ptr](v(7ӌXЬ$_{"N.?&q$s|⑳)ġ9S욭s]km'qBCSLݝ6F }`#p!iqZW[ Q/)|~.mo۠ 7nc%&lX_i7FrB>٧jianbd E 3BNt_#4.TP\x3$49\RqFy)B/,sm#zߤ|0?;ڹ1U Ͷv ThyF'M,]=$n80-/HzGY*fǠ[vN*_(HJ\3ч\EѽҨ;JJT=$1Wa! &_{"N.? ejσIټ+=}aO꽏 ~Ni´U3<BFX:v62ib:W7fkѿ9A)v$;72Ƥg%қDޑC{v{{ ʠ{e]b96Rе{S=hر{~4e{kCWٙ%QQ$_XS|rqe=cl9H`HC %&~kI/֍c.rr)TꑽYNL;ⴏ{Qwƣ,+O[C2qRtif{ :ov]w~ȃ%>}tO6U ~,7EEx7B,F_B8x]uݛ#l BUo C!P5l󺀣k0foЏ)j/M{oB5Φ@!B)uޑ!BT03FoB! gS wF#fG'@ ,1ݭn9r5!~#UtU 1Bp}Rp+!ŗS_^{9;9yryv+^>wvg(!~0tw?scg&Z;tjbk>}Ł';ްB{!>zԡhdK'*;^{Cffc4~O>:.'=j87qj|]6M4Taa䆶A J u}JM"2c SLzaZZ7!fSQG? xk}Ҹe&V}/YKV2bR3JKo='5ݒ/ax Bgɿ!I }bp9tUOovүcosܨ f̥fy3(r&yB.1|6|bztȼ{Ԣ{N/uJB͛CG2# fnMu ~yiIm|ˍ{+1h>F[4s0_*n+̌k/̌OɌL}"g>ݛڲ86`Y #"HD40*o$*gp Pv ד I0ûm}x3a&KPuENwHfo9yZ=]/˼H2_]6-/t+f!~oIF^y"ф-n,N4. Rh 2 \rSHcdbKo'3c ,Z'c08f²;:'AI2@dv> `qRobrW*RHfO3y D]lrǕ BU(L^ž9ʞ,4 F$JVIgTi1pLeats{ID ~(E^OE"g'OKvG;DY!`8a0W ӈ-toJx9eL&r?zv|`wEfxuQ%[_e)55&$h62"&\1B[OĿ-*s\[M |ޱᱣE<\$q}gVW7T(x O# #T)vXmƞ܅}wدV*0;Ui+ ɉkz;}[|_F3+.d?-fuiՖ@'crs]SIDAThٶn:c*+u֟|mmF<vX@B#B8Yi8Z{oB03FoB! gS ~#}ްJT+F3kV{CPQnm=׾X*f!YҼ[;70յuYr4?C;!j k-}w[\Mi~'ivm@Vd~dMG@#J¨\կOUa~IU3GWe+#UfFTy~eԱOu#.gXUC^ )(rMV.qK} 'ohtǪlw͘@M %HUw88ȧ5$*53Jv/۠6iW+S B!G^ Yt^}Cɵ2oPIiz : #|Q$SZ. wf.I* !K]{:XVcor7Lc~Pɣz6& " "I Q6;N/ggv`Y\%Tvtc{ KebS۪ +`r *C" Gftˉvߗ>Ld/H%4,}7uބ|(Z 56'RB;$akb9o kJZ Jj>u$*]C{3ٚܶ?:oulXvU]6aEF`fƦ7*[۔C?\$27@kԨ#[3c_dXZ-ί4tr8)z{6p$cj{bpv ㏰ ˤ_ ZܢwnHy$5LsIti ]&$ݺ& Յ-,98tx{z[UZkV,]}b%sfEg삺Ja{ңo#ֻL\zl78f{+;.ӷ"Q†cϖ-'q^S@wbkmt_3lQg/](o;0?h k_:Z_>}4n٦U&4qɂgL;?+H4uq̌z KF4iM4JzUtN%Y 5qvjKK7N&7s4M75Dd 5Tyԑmu)BcpKoH۪ Z0rC[q8SɗST&c-9к4= ?mna? ? -m2ѵuZ +_HR>:.'V9GRv*\NjQe](ȰQ ˍJZHSBeqR.JP#|*#fxy)/=lo='5<ˠuN` ֮G:/}P_F֓I*|~n2rG[gn?x,1d3zӃ翏8G fckץі'&-`*Nc,C-{*璏?;M@$D"(B@MڐE+,L?}|I|VV-^.-Ux@Ed,~+5zDaTҷFa;͹9/V mpv6E!Zn8~g>ݛRIaeT<4JK[8ZۓTPԧGgIYS$-L҃xl@03F)wŀY% D$?9Y {.͟NftQ1Aw/(U"OH-UE*@QBoi3:"Ť'[݂7 j1+dw?7;QXuK۩_77XQI7T)Q89=;E/CJYɗ',)ZBXkq*nh;$ix1~fM 6UgW?]yϤ%nTy1OY|1BLY(O~y9}̍4䧜/6?/_{*&5l:Ͽ s[29 MLl۵9JUf5J+;Upky&Q@*=bFY@*Afէsʩ:r|v?:PNϏuْZlޑ V|o[&8tj;^6Ў6)F!02`xіC ~y{/~Q0`.E x]TQ0P@;`eh6kOyHEbTX!M6Ȼ(nqcmW=;x!XW};zbraQ GSO&fL5x(L:((Zp6婰"3ab\͙iHX]'CwX2ֱ=(:&0:61TZq"֞Ss[xaLzkj=>S<46nI=p_1yo-z˾].zv]8ʶVmpÉ#{EXzuZpڳ~K3Va!?lZ2˝'Siʼn@E|r`TAfS*x`R dVȜ%\xPv)쟨,"gy5)dT@\"dM^;sݩ@IF"c^6{&E!C dlQz˲D6uPV1e6׳_DG%~SU+wRemyET h/8bD5gA3WcuLxSS-R2ѧ.(jni቙:\N?š?xeL殫z:>/J rSN1z:aqֺx^PY^'~U<6\H{hPGr1ՌHobKpc~Eil5fk9!f1i;}'.rfՀTvu ØZ<`i#s9 y/1–]IÏd 9|}#Vdz Ois,{ =;BѕU<6c/5' id{PvPvPvpw1B]>ooܼp)歭1s탳r,O]/-|U۹hM5aIg^^`HKn,^Unme݄ t͚>//_yRSoH[>_׮w>VRDD~;rN<\y {TzG m`o޺u۷^?UٶB+qh]?זFtÆ銊Z1`>q"%((~}LVwn}6n<`//z>z`twDdwճU;':]n33ﻻhȚ۷mx@DZĄ;;;SOu?"RXh\|ԫg`ok`,)otrM*Lvv>KB鐐[&͛wyiww!Cn}EMTD^=>ܥK޽;?~O,{D֭jg~|=<;9~~S>TٳUf"һwٳ_TŽv5kތy\k~ժxt'n7{ϊȕ+76ȬYc>ڳӧȜ9+׹s"rFD&L\t5^wPg .\oM -mɓӿZp/bb\n Wwo߯Cty"2gx?ι">|^_M7&5aut-{`~vfs+VlS_Uj{["ҩS7&={= 2sJ\3g9+ O׹BWGulޓ]ټ9d25k=tPJ#Gsoo3g.?~RM2kW+%$9Jz5kv|c> Z*3)霈?HDvRVR9+:cهV)uww;vt:9Y\XhM4^_<0ۓ&N@DO]|Y免Q vֽեKwD7u/w`CȚozh4&$6j}vYvaݹ3UfAA7&/"~~žm1"ô-iccc7%%KIcǑGGۮ]/Լeݮ]Ӗ.ݼwIy3x ?ǖ*qE$++'*j[o}`J4ƍJQ"^70gK\\CoO}G{.^by7ndK…e 6 o }))c}wKý{OΘ'"z~ܸgϞ|ND,xcG̬ӧ/) zkO}ޝ;5srz2TDg/?vƒ={vPⲳsy~{|MWJVN:o<=-"/:twJ֭Xԭusqi~zWhq0++afWvvBGm6_C|W*({G6mÃ~GU<CBf?x߭['aÞM&=#k’bc#SS,`/^xNo ~wMn߾9cG/&sBã_ ˗o;|c$';ot %Z߾>R8a+5j6PkjwV`t:1"lՊƍ׸_6h.ri_G, Q3tg5D:P>|_썏?""#0YB:PO⋽&i!frJ`l},ЁjC:E&B&*KWͱXlsPCP@%ч5&BVȚ YZ!k@+Ž܁g5ĽQ͢Z!k@+dMh 5&5QY_N|VM_7鸈чIJФq1&BMȚ@0M&@KdMh %%=i&B2nI&@dMn(MȚ j3`9:P=tCVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh j,+@qT@5Q=5]Pj*&P݌FcAAaAAX'):]@a5]e]jفȚy ~#CCNLLVWpuag|ѣVdیFctn|y֪+̜/{`{ବ3YMTe˶Evu:`}57Cתo;\# K 8{zCZuv_g⩯2/] G^ yes^ߠA[~ʙ1_كE8pJk͊OJMM JL&SaqhѤ[Ŝ ""yy}ūX@u]4iR4'O9''~߾͛ƩScΜ,"׮}t_bc)Kn,"WPږԄT|jΨgW$%)ݵ樨>>]\9;au$)΃ Wס~~Szz԰3O\]}ʜV!"?okvCb'O<۵mlhN0l.M)&<jqTzQC)AAg9IâE_xzrp׹;n}6n<`/7"*z`twDdwճhJ\r<>>Ity}Nп_F@Bքܾ}o"2&&IDzB[E^={GGGG{_ ;eIozsL˗ӕmVygs'\N޺5QDn޼;t̃O w/*m"/8.]w]e~=ٷa!ʳ:iѢ[vZ]piݬ5kv#~՜vZ)=dٳ)L ι4lѢS?ڒc{~曃ʫVŋ_=ˮYu^[Ӊk'RfZ`;ssϽ+"3g~?v&''oM̹v!!YY9Kl4|<|+,q?*"o499uҤ贴-Z4]oz=ja1_QZe\+󩧺(ΞM5g?Z5<4mڨ%*wqqq5m|nVf}NuUuOyy"|'xLD322EʕQQDd֬o̘ts dNmӦ-N>K"f͛>Ed߾ [pi[Lrr2m%(CSzRDi{vv^[׮1G=9jU|HHի{ˠe׬D^^o;d2CcFӁ?4)Ν{Go |&"ݻ߹sa&FS̹ꞧO]vgL̗-.\ڽ{~|-bf]s|Μp頠;z~͚7ܚF`Ț:]Dn0]~;3~Rҹ+M""_wV흊oHNmܚdddKCoon(Ç)qyΜsT7?u꒟_gsj2ex׮^+VlKH8s;k˽ǎ}ܡGiG]F9Q%:|8Y9`;;;OȡCg{8qȑ#oOu5kvLƍF 0fwwcNS[+t>>mHuffVFF>IF"ʽ<}{ĉ飋O-u1 u;"cOEdMXwk^o4NFis߾_{6;v,5iUΝQZ5/ 8pTddܸqϤݜ0}lTccc7%%KIcǑGG87@HVVNT47ƍJ˚?2 < ݻ>(iS䶢Ӧ}/^:^DƌyAGkvss)E܃@I"RngT"N}{Rvv>sEG_a8pōdM\'2|݉ڵRF鹹56͕BBƎиӵk]Uv%nbf1N{_ ִsaaaN_'Q-Z4%.5_7o޽z5s6 z=U"Rn{oڵ 'N v,_D3+uݤtI[w߽{Fj5 lN'=5]Ph6vMh 5& T{h<>8*`:)]@MWUE:BVȚ YZ!k@+dMh p/wTrlrGp/w@SZ!k@+dMh 5&5QY_|Dq_W鸈чIJФq1&BMȚ@0M&@KdMh %%=i&B2nI&@dMn(MȚ j3`9:P=tCVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh RS IDAT5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚ YZ!k@+dMh 5&BVȚЊ jTL5]TYU`Su.+Z!kSt=Yh4VzզRKdő5aaٹegAG:T (OÆϘ*Gn:;#,:zYVXh\lKPPP{`WסgjR͜/{`{ବ-TϟV|;wR0^qe^~S_ye_]_ѣ "#-*كE8pJk͊OJMM L&Sa`+wm4zKNo/ްp+"hܹJ9?ZVvMXҤIJМrvrk+&Lx_ hyyʳ~N`gzCjwv{\D$<'"nWg~|=<;9~dٳ)L ι4lѢS?ڒc+ӧ/N\]Bq:ujӢESenjU|}DʬY˼Z vg\~sgBBr,h4?sy*ēPy㍥ɩ&ElѢ`CŜ?Eiӧs/ȧ<8{6՜jl"ҴiҖc޻wٳ_TŽִݻYss;֭W8ץK?)͊˗xD$//?##SD\ADf/ȌK_;gNΝwߵX\7W3"2aࢫCb=< _|FKNNUustt(^ajK>mo&Msޑ#Q3}zڵ;cblqlZIS͙3~<~GׯY[ 5 kKT33'%[b۴i!"ygީ~tͭIFFfϞ/4v覌<|Y9gJuüS.uPm%zՑvۻsW6oN0L͚~̙Ǐ_NV^"44N/"cӭ"rY5;@Dt:ڂ[t.-zYloowR;33~||I'~ "ӧ.>٬ҥxTݺuouRzy1AA:xndMXwk^o4NFis߾;zXEwjժY~~APPā"#ƍ{&- _簰g4p0-Ҙ䘘))\Jʵ;=T>bD_YռeZݮ]Ӗ.ݼwIy3x ?U/Cp㹹JlT#EBʸ^RvNN%S5}zIٹ>s[RKtG[PPFF%&&_]nu۷yz˫${P6tph!:z>c3229߼yΚL~~;txAz_ڶ}$%嚈.~v[nMtp/((4sl>"&P6Qf*Ԣ|}˸^"ZyУGXV&O 3eRe+WRK3a?xͭɶm .\`gӦ}ԧOgl횰$7&IIqswrr4L-[7篞9s9++ӳEXس;v,tk׾ٶ#NMHH`MBB7oЁj绿bo| Q4hPЇTSbd8qȬYckE:*>tчЮ ЮjNCMan>tj&BVȚ YZ!k@+dMh{;P#`S;{Ռ{5@+dMh 5&BV&*k5m6kl h,:M,vm4&jA 6ksL&KJeWkjY9-6ԂmrZNXY9RN):~՚+Ջy-NVPj+~-L_tV=0wȚ)4kSY9dM" ՝LcYڻZPCڥ!wlΪũBE'i5vM.J,&CcVٶPȚ-䘢Y& jkw RB%%qCG`[96oGT6}PEѫaJK063Hl-R`; 4F&lY>Ʊqh:pqЇ7l@DȚ%%N7"q QrI]Sn>D uYVS iC$a`ʬ\wХ]VUԩMFPЮ DORG =6NuY֧͸)$N}2u3pYLTP{5aMHZuaAj#aCt]j&@()$NjBũPq*T$N6vMDrmK`|w1O!L`Ț 4Ҡ\͇kCl5Q%ⴔR"ƟD5 &dMTP  $NT7[ndMhL@DUŴ!֊>thi&N.uVvMh iL !kBMXq|$NV>tX]x+^uV{âI(X%pa9|V.u5>tXtNW]jYUƷ>qH5Q5|W'*8{UD=5Q|66Ncn*_5/YL&!R@DќiALKLZ],0@@] NEքyh75HG`!ׄciC[EDoBTsP:R8j.uxM/la'%!hv۫5q5h@-j@'0^E\m8Հ\mHJG:_*JG76B-Ef PkyLb ܬf P 56kqkЮY @;qfŧ?zkT(_|NaPb:P5ZwPgujՁ:Au}XV_8ր#.af+ N. h*zҭ:+jdڎ t"`YtnmW k9OU@ 4m"&֍iS7FjQt֊A6N"lvi XkL  }V T?zmAִnM7k'`i5M\J0^*6T T/ЭA&t5vMk+aLT5_fRJ$N@{:%w6jV$N@KӞ*@5R{ՉaPƴ!@d3nbo^ m;\X.G2֩6CeW7IjfDu@fy ~#CCNLLVWpu6|̗=mu+>yPaaƒh3~͛2oZu3eoloc>+B=Qii7+a%Sd%D=~Eb{`Σ q#qU=222#Ξ,"zvsݺYx+ xzҥpiW7\6w Իu猌̬3XՈݻF^oO ""yy}Q}g2 ,@­ )]sҤh%hN<<3ssNN}1͛71SƜ9sYD]2''>''~ҿ*[NSܾYDVޡ4V8pJYΝQgϮHJSkׯ[QQ}|ƻ rv7eÆ=VIS AC|~˷5ag [r9^CD~;rN<\yk٨@.`ذ]piTD)rsLig58f;o\|2_Y^ OQ:ww(2((~}L.m 5}^^ԇ~P_Z vKn{7KDVܞ~^=iT**j(!ĉe':]n33ﻻh,<%i6n< "^^-cbD䩧̟g),4._UDճwttpttq`S0L/+۴dg=O$$ ukܼywЙvww2IoǏ_TDEc_|q]ݻᄏz ;IOo72ճիĉCg;ujӢESqn|}{y*6 _dcf V0OH5kWK̙=Vvv9EΫ>'"nW>l\.$$0++gɒF>KT4>}זt}DddInht \F75qϟ4ӹwSOuQ=jή[j6xpoiڴQiKT1ݻ/*^kݬzϫVҥ&gTt_Yh48OIܹwҊ,uu,.+Wn|0aCOvΘ/==[\p{.[:8+;vd*>yhΜp頠;z~͚7ܚ?F `bP 5:P)Fe@@׀e/Qy{ vׯ̼tnŊmӦ_Uj{["ҩS7&={= 2sJ\3g9+ OٜڦL޵׊Μ?%=Κ5;rcwQQQEN8̝ V_njW4k{_}|JV̬2,׫ܵ޽'ϝysdj{h5<}{ĉ飋nW4*Ǝ ":NmqW vֽեKwD7uA T\ Yۻ^7 FڴoʃKMZsgTV "87n3ii7'Lx_D:=۠cDćii7*''MIIRR%&&'&&qѥ4#k?]͛WqE$++'*j[o}`e~O[ï^=<|''G偝 +gڵx1m{^P€CoO}G{.\itss){72%Wy|U (Mu7ÆHJʵe޽'g̈^?n@svgω!Cf 2CfT┸SPPu%e[o;v@``;wk{w+g'"ǎ]x gJDvvn0o^g1;jifmaa,_ʕ"R~=)w.M*qvt""S~J,Ҝut:ԩ?ر RR"({"2mH5*wq/!!<֭^߰aOl x, )=66"99599uɒ OӜ]ܲ合̘1%~}"ҩ磏PiaKLL^&oݱWKI9l`/Ct˷>|Zgdd9ry&?w㏿N899wkAaZ5mv^ۺn^ᗭ"\ΚL_2(׻ nnMm[p >6>}:+c ,:ͺ6N<%Ousk7wno{''GԲQA iqsM93r<=[=cBNvm>rԏqq߄vZٹAHH`~~a|o) IDAT!$$pʳ 'O>)55}Ӧ))1}wbhhpvannM ߿::$$`;]v+11ڵ[e\&;]˖M.. 9sN|h9Eږ9aF16vY'nnMyg|ss5{£hݬ㘨NgӞ.NJƍ׸_6hXT.rA\t @ 4w#">V&P9CRJ-a1Ǐ|^4qYt95Qgы ӆ"Cb:Y hDG:Wu7>P5QP"CJ:%PN@hD P" a&ՋAKhmдƉ !n\$NvdMr∛0ڋ #CL4p6bnViCu;P}Ӈ2@E8Q+p/w˝$r&A%8a Յ&Ƒ5zLT"k@5".*h "k8Qiy`A4p*1^j7aA U"k@"n²H2 aPhڄFh kUXq-QȚ`H !n`'j`5hD5`'r+T8=5кjC'Gnc:D? 5bP{ 5A(5ZѺ NXYq5 ^UF&P) Ci5&X=a RG57a ĉc&q"hA& m0r*AA`hDC$:X( Ӟ0^l 7&PA5 nŠ}:]NmasV_D2C)U~&&+ٹegAG:T4l2zVz}=¢7>]\9;au$)΃ Wס~~Szz԰3O\]}> 5}^^~ސ"キ}C]}!W /Pfx5kTf/Vhu<+>q"ąekU7j4P 6o"Q~>}&WOB vKn{7KDVܞ~^=Z)Z||(#uj4* Tu!e=o۸xy wvvޝՔmQi7زDI!f%i2ː%_bf{,0,11Q -EIQ *YRi1{n[Jz>9s׽o眈FqJADʊ**J**J\f+%5e!ݻnGJII& ъOD/>W?L 0LNNgDhY6$$,99/֯[_`nɒ)DTP^vw(K##]$۷K7uv\v߈h͚Y?\ƍ o=&&|)SV]NVWpRG@Jy]{8,,v|o^lf9{4--u=Nog.[ܹpٲ] C;kVXN"szzjmb_ ][FuR(nr\\F+T=z3Z=NN^5ZN7{Ďd n!53bD_vlYΣѪSp x#'LXEDVVf>>eaaa/ʽ)tm+vvTTjV~㏿գG5k,yVag7Pyk@<O( ˷ 33#_?}.vvK\INNf";wҥ;rrف155SiQQIׯsO;KՕ0NVz駧ID3gVR⁊* Mݻzad>}d G,һBYn=HקPYY\VV.qhŭt6hI/W'7E [bWb%%e=zt2ŶBƄ*=}Z=ǵUC &1q32r=<֭sRrex<7'&Ɩ-hӦyffKjbz++y^0篹oy<]EJDkք!C鲆 ՛ӧLL586q ,Zow}L t"JOϹvY||*=`@/"ox NnnrrG4xiaD"ѥKɟ>nbI]R1!4\^^~~ LM +**""}}gl^ȑK..<wSC*$C'׫Eni/..UWPr $HJ9KIjm^zS^^1`@7=xjjD ?G m\˥KSSSSw:xW$"}"sscYN5"ZrFm%Q<9t"277*6] O TVVRXxI7bbn*)).^o!!LM =+JJPj3kXo=-쀢8UU?^ܳg׌\"RTSro mS.,|egu_B CCOgss x<&"pHy]sꝈx%%*P(66o]YI޴iv~:;^- ٍAwY`̙eG^a2Pk933OGGܹM[ots5Wv 6NL Z~eo55Hԭ[iv65޽))YťzsN0@`p={v};3(贓>} C44TFVTTEF&**JNN#ϜYݺ{ 3~rԕ܏>cVSS2׬`jj2}{=ږ{xYEEmR/..utˍĞ=+TKKҥׯKׯ#WR' w^>rN445Ym-읟g7mw7_%{"''[W1j񩹹G+ljM{tt׮=p`ﲲi|j>ij`\Z~2 bmZh97 jyyp66 ^ci;))?smK'9r$ر$",hmC i'nBMǎŊD9s{{t8sA Ni1cl1 Fat 55j-W $J5}BCaL:(mMh95  kBMh!5kH7!g5i[#Px;TH4i,wa&4Mh5 kBۆMhz51ĐkoH7):z#1@ P $Ю Msth*5n@@ M&$X6@ސk W5n n \@@ @ \jt&4Ś`h&&4rMMhTkbM)0 \dt &MPOH7@f5Ś\C Frͬ}P~K4D1-mKGrMP;̡@SA ,dARY(VVVUVV5 FbpjGfIIن  1NIiTgS ;0?*ӧ7h\-.V.kRBh~;th;f [:fRU%ܳ笝Ν?UT1c:t_hh_\\)))7n<Ƚu/\> H7@6^gϊF\znx<%%~NN1۷/꫉r@`>ׯ'K*mɷY>x_y.uɸq^WfAŋ'=EBǓgQQQt֯ۊmێ" 7e\s|6\`RQљ˗tuBE))YDKiidiidp٣=ْ3Dt@;5K8.ݽz?~fki9*(ih^xh wTddB q|]ΟZ[/at߾_WU /PzU#E޸ݐsǎcvoni_P% g^(&}?y\YYJ##y cfEE 2 uT.rW'O^!"njD4bDߍCDUU"RVVTQQRQQRT|7+%5d!ݻnGJII& ъOD/>W?L 0LNNgDhY6$$,99/֯[_`nɒ)DTP^vv(K##]$۷K7uv\c!'O_|"eešC̙3Z 9w<\lPΚ\aZ#7ϟ*-}{[ş[P𲼼;~72tRRLY]RREqXXuq^6Ǎ=sٛӴ:ݾl.W Za^&)-27ﮧ׉6`@/K&&5 K۫4t׮Bp˖#D2Z^J4уhժsr:8 .>9 3 !b^6uxF;ƍ/l/]hhR[ɴiv5;ʬ4[HSTkf桻wCo8gg{(&>>l岲GE#כ+s"RVV|򬌱Io@"~!pv YYGD#lj+w^3nE}zB3 s(&0Г=66Ǹ춋C.iVNL -w{e:ܱ߫DuD׈=aK{HWW;,["8C߱562T@EEVy<ŋ~^6A` ^S.lm^ |¢׉i<=ĉ׮ύw ܼgECR lm<i;_}߾}Ebhɒ/{3-љ3q"K>(vHW 0HIJNNWx N$4\\\ʽ{?O~=nj||9[hŊ568T^ݷO<'Uf n?\S 0xB0.P(._n~t]৯ߥn+>wwLDsNPUUYtGNN>455SiQQIׯ<#v-zOO >{fU͇66Qqq_?-zݜ_R̡3m rMx hCk&@[\ rMx/ahM@ +rMx!hk@SA 7 mf5ཇtB M &H7Z!Tk@끡M&*H7Z h=k@SA 6Z :!h k@tཇ\ rMh0 ~tæ"QKzpٹ([Q7XC1"@0ˢ@5s MhF5 f# \}hz5s&4L߇y5[@v5,0?F jpTz+~qw73|,_>Ӊ- &@;S}::?q?:D3ywΟx#kyy!d߅[婧שJu@޽Ǘ/$3|o׭۔ÇWuq>%|}MyEEGp@.0 D/DyorZ"+++ JTP>%q%%Xo!jzofվpa UJ*Cokd/22r/bbMQODW_M_Q љfg7pҤҧ͙3~ժg|,UUUss x{zy9K?dɒ)۶ RQQ-]:UWi?B|{d8+WnvEqddbv%ʝSQQt֯mY6ivלXY9m<(HxJ-/~Y̖5-:DsIEEgJK#/_ dQn/e dK сQ c0\QsݻA/^g7娠`1zѣ1Q66 54v;jmĉ߹!!}sMz73m.}[ݱ*(eg?%~8``0UIiTorcq 42!B;:>|W>ZM[&LcDZ c;q7_`jj:5 }HoGرC?PRr,*.nK4mȐyjjt0o/«.'7ndH,F5RWaovx( Kcx|Bp/h߾OۓÆg9{4--u=Nog.[yl.Ν5k+WJy_'2}Fn|BJJ֔)KJʸ NN#Kw:) l9BD..XNCiѣ{y9ѪUu:pBЦH#suxFPƍ/wkv^.^~6GG+GGJM1heeVPpPXxZ$)*53ݻ췦HOH?rYYԣG"QLv+ە9)++|yVؤ~ }q?rpv YYGD# _|"$vXZb= WP??#TUE߸GDu:EAD4~0llcCBVٖ]\؟w;:ZUVFD1feIL "!U"QPxBŒһZdf@Ovolk. }J4**.%l.^!-i^[p>_!/ubbZh9OO'":qks㝬"27ﮣYѐ![*τ4v*w>o+n~hmmQ$ZdŋLK{tLH$EϬ542 RRӛ'>5>>5**`ؓ'rtuU^9gbco̙xJ|{Z==wySvpD4c ՖΝ5|ʪ䲲r.t6hI/W޺@^nx+ϟO,))ѣ)ˑNiћ7\ @ -_Ҙ8ֹki\2x>!ybȐ>laû z8n M0ݻ-..%"wwjus]kee~Ћ!;Nng5v,m1!4\^^~~ LM +**""}}gl0H$:r䒋csY6lXg⤿dyMDvv $%ʥr 6^qr)/0͛ <5g Z)ffu20PQQID<oEƲ$''kDrJ8FyrsDdnnܣUl~ _O73321&QL @%%E##ŋ4$\BBgEIItu]\fڢOýgϮDg'<Ίׇ%$O[cx lAwY`̙oO!9ssM4 o–ٖWDDGD+))VVV Bw䀀_~ZJJ|M} C44TFVTTEF&**JNN#ϜYݺ{ 3~rԕ܏>H!jj*XLM ]׷oϳg7p_~s𠷍͇DtF0bD_vMM܂\ =mnPShh{#tQUUfo?p͚Ylm-읟g7mw7m]*}%c+ljM{tt׮=p`ﲲi|Azhۘ9o17Xh97 jyyY66 ^ci;))h,Qo{0 9}XlddyxLO4gCh3Dsvmpd9th^C`-¸&4k@b|oh97@"ƶ#:4Tk@SA M&4Tk@SyY Ғ6rfgDx{[9th*5 \ rMh*5м|MiI֙:IENDB`openturns-1.9/python/doc/developer_guide/Figures/design/Tensor.png000066400000000000000000000366661307543307100255310ustar00rootroot00000000000000PNG  IHDRh\ IDATxwTY;i^킊kU,(DPl( bo*6kbED+;XX ( (@| I p̛7o )IBATuHcŪB"W:YQ |aO|OU 4) ۴gẅ́|oj׻ߊYz̢,E߂3@ҕlEgnɄSUh+ 1w^25#W6ɕsK~pO~|j!Ey~|vȑBN_qөFw$UGTWG~MVY oPI3&2n Z76(yڽ}AG"90A8,46 լYs~.[}}mr6uoI Bg=``*Kܝt0?$Kz޳8c]g&ǵI%_7u=SR%1 kY#57œr2d Uw7;f٘h1Y;(}ҽ>בӢK@P{U6>緧 ohf97h5}]DHʢ 0HQڎWŦUU 4MƗ0taǹhCd9Ņnæm=;/aW8po79Ԭ{6o)óms<`jYbfܐ<\z,&)3wߵ#,3V4'.CoE]ۢw]!~\B?} Yg]xݹ;r7I**8-K^p`s淨:?m'}!VpPGwKr2l}f-⤈`3%e#/yat>6lURD0Yuy@ًOB!-dV_` /2lmmyF"XA ى9l.7걩[ߝVOrSOۢ+;erYc0b;d ř+,7m!=:Rj8,$ȥa/Lʙfmk}]!]J0!1p@,br XtIjx+xgnB}C$D^^,E>ЕE0@/{CW/N~LNz!5k|b֛"ak˝F`[W,ʟv䦞M`l[Rgdm. ~(!0¢R-,-y0^e#HkA?-LnBÄJ\nl;{d>J.}\A) 3o\Wy<)0:TA' r_|!i4 vs҂jOL)ܟ[Gfcf[7 qz ^fMig#"\㮫[{%k_*mLvjvS#.8Ea56Tr]u郧+]X[tW}xTugnԂ FJY.]NsrTar.B_XM647f@HᰔZ8B#'*KUgx!BBGBar8,*K!B?&Xu~uR:xv]b*rnO.arBB,Z*$r59%rvšqT;LnB<߬y]j\`vk?755 lś|%S+> 伾{Iz.,-&EtSQo,$2gk/.{Uޛ*ObEطVX%>;77t#ƭf>T)NYNJ6s9:;^u~tc%a0-y$mXeߚڍ0k1Ft:MPU!wJvUjJ?еS!=Tzcuiu7*OCVȹ2ۋ[R("iNP'ʼnWHXGǺ-,S^2m68@xSKQ2mQvU:KAd+龜ao\zcמ^)3˭䛤u`-v]6翳`OR'o׌Ayi}'Y,%|{6'TZOW,9gݝOWhS=+jT16̻iY-*SlUQߦEʆ+66了i/,A&!R _3hڧLQyhI|{{Z۸*oH n࿹ɬI,%Ĩ-E.):c0Sg^\:n;lx܄E'Hvtkv59Oٞm\4d΍,:~/m%IO fFl [L ={Umh9h9dw͝[xis̽lMWVq:vmaf:MqmKMLn }_Q+b,ئ^mun*K+ڗg[ g>jN:&h{6OucP Zm>~Llm/+Prcz}3w6˹~$)*}ѸYBQZTX<1sgSه]x,kHϋ_,-ϻ)]9znBFEXgi)yooo`ǭWF?$R}\i@w;,; M(c me%=y+@QC"5<˝tZ*](F/]HW-S.>x;)9pqS4*6zࡋ./w1fm3o/&8oDyΐd*:SkIx҃#8k5&TQx{ӓ>E ^z,NWs?Ρ>ZML_tɬc`0نT;ezkOb@xiŻLpXZ}%YQߞ_\nSu͝Ij$y5N7 R0moUZp*28 ʶP?5k'44BznI7A5#ù¼sW"&q{n 1L-S!˯Mmyy }iwն;%/8t~dURUZ=_=8Ц1ʬUHTbxTuRXF/?h.$E] 9l"Mk!.GTp>.U$6?m[z:3ޅbkԉZW&Ill& m;"gaE2{QN/>/Z0 LT\D@DxiQkDŽ.yz*޺S%>^^\^[}lI>ҕ9dv"۩W_GIMU  AO+39F~E} Bj29< TaYXk/jDe60-6WY"RIλ:TRMF? ^Yޒg҅d :JZW]~J 0>1`1 ͙?ױ)]}X}G=o_D=tG@ R_9~ԝ@ײ7|uͨY=5v1̺}Jk!JzqiT i:h1luUъev;Uވ~<$5w-ݠ*Ԭk`˸:O_kLM| }+0(%9W:6T%6 '~:[N=Q.ͯf5 HxLn }a#4 0 v {‹uN?&hti'?nLwpxCf~'~>V.Y, SjKn@`RܚMz_ؤ0(xm̕+t:Tr OXt sG.&E ~[0g3 ~fan>N鋷_}Vؼs[` \*d~|̘knQLb? O_ߴuoAӛןq܌;f͚v¬},Jf}G]ѩ /{TLD{K+jE=J (L",(S4[AU>w/}sO <9gkNƝO }ۆ1/?Ey/_ZNQl!T0&mU5tTsׂ>q [SBU [J-?UGv_wfZU4n)TRA$G>2X+Gk΃B r'Ԫ3Ufk8K!OoG)7RXy-)BiLnB!Q0A!FknBBP#QA`w!R!TcP ocBBiLnBf H0A@RoFg U6<4UHsarj+xG&ⱗ^֡cTk!K^ ʏ}`U$-Ldp6>R$"ǫ!ieznWE[;q G'6lJPn_BPz EBF_>2tKIϊۈ ůΆEZ O@@#wR xɵ,Z8~aL˳ hH9bA6ЯwPza[;M&-Z5k(zm "qIDATT^bBHe#SJhapΏv>.y.(ňMaHE!?$I0)~VtyLJSƄ+y?MG;=pƓ&w1*O4wK!B? _uݙ^DNRD$<͉E)ʼn.Ι:uMud]e#ɍ|'P6i*( A!~^V W|Q1K&ӯ D."chI.]_޾v t;+9fYW BePTy*KƆ}]`baA#{nY\ه]x,kHϋ_?ekoqUcZ ş:-MG理DbQXt]6VwK!B?mLN]oۡ~_GGZ[Smvfm[]tLYzE5ήh;د:*qiVʖzZN:og6lô;m*P-BNRgABHen) A BH`rB! B!j X@DB:`B!a)BHex-mڳ;ft>p7o,g=fѸG*zǯw&mliپv2Txr)Z !T3$HQ_7xl3`o{OvtI~C鿡 xC=a_U6IUb@H\kHJ.ƭ%8,<Wi% (Lw{wiʋ~%W~u $H% _@f҅z l\\ zH /ǷB{$of;?}x{naM368p5+^v{ylۜE#&:Zxu7$%^6IJw-,+mˌ'͉˨TliY3EXn;r^JE߭wQYvBF-EپSm O&!pX !08d +R#P`3ҕU`y}lT}m٪`8 C[rQ1X'o5mǖY_r?DUl *6% 6R,&iz)$5FX?t^f 0Aq5ZU~3Q?be5Br" ?nTYcP)NqY"% BR4&7vctnUZN?(U?5l$3']CDzͶo>E|;uIH͚@=.GE]W6"6K׾T&ptiE.@n}Shzi\]m8duX B!uɝl33\Aa׳ۃz1?zzr6.ݰ;R%^\X^'Xrs絡c37~Ԭ}/>;wP;bObՑݦ8 MJgs Z1)^6M+'g2/:H?z!B‡!Sg0ۍ{wxVz4:`lܔY64q^ oTe !vd3~ :|||=S3'OfLe:wQv#>[t9Os4m̴ivjDn)jU.zm-T|B5- "K׳S\m< 4 K!T7*WФ )_!B!j0B!!BL4 BJgoV#;,ίѪB%?Եzz3uFj&7TDxj V PݴjuU{g{AuS"g'Y.u!$7J_zWzfs3Ta  p/ 4x/pMl[&_ɬ@*}XIdx^\3y⢫ցmuZlRr^$S=k"_gx)(@6z%anS:}^EOz{%hG;Zl-ztpm3O.٪} ^5K:zY4͂N;!T?M(l5zB^Pe/ЬB^ ֵ8^Drk!K^ ʏ}`U$sV'^{W׳T(ۥC&~*9kxMTck<%->Ws+bGO6H Mk/O(<ީI=x;u>Y]xyw964Kc:,L\ztG.#\{XQad^@"i*d/|z!%#{O1uԤ\r}AniQTTa)0f;~AOɓыXրx-??ڱ MZc9^eb6b0ykaѤVqzUvB5Kznz"VZ}yI0tnZQk[5۴M[AÊ [u*ʴhVsT)ǽh/b>3P$d4!~r^ 4ɲ|n6$$I$ \,n] =t|Vc{uΩSE7Rc[(:{V1'Ize=_Y-ɤaaJ}i-4n1 &rV}؊(jM +{RBNΰT^#,"iNP'ʼnWHXtcuiu7*OCV4J&Ǻ]de2f9I.)LԊvlWTɒ-V^fF{4 ?^(׼֌*VL  69B#־HprRpֆ9:_G9]ܷnȓojW&Z)y%ޞ6ʲrKb7\dVJQ ~}Aߔ=,M 5VoEp/ȠsM(m!T~>F)鰗`-.y[~{g{aշTuPwKi컥U̦ۘ^eHѻ&98ӷ#R'ߩ~f\> B?[Q`':l:T/jwWeE?jܨ V @MNfy@,wnDUWUwd8*"{_KV\\?) XzAaCWUuPH(InԸ~n&jkb؊7JܹjTy?^or4xpT>TFHeR]ss|HFCs .ؾ`XӨeF*ͥvLG q?v9,'s Bz޳hh=L,nS:}^]$IƺLk[r=~\:} oѓm#鷮E%[A:߾ہ[ˣۀ9Eo/y}ޓL\XZMH*pXN=̢i3 io]ܠiz&EaHT}JKx}9oV] }Qoһ&J*{JЎv.[N>f\U ET< K#Nu9& J ͈sX[+#6oj4հrL樀ͱ5˒+1IzL^v48Q߻ gN] _"`O`V~+u Yj%"v8?࿯ tM7 $R?JÐnpo2o\<{r:yF ޥ̔-G.5:6CTAΩ]OlY]f/Wߙ?ظk,M?0q󷎌~r!ТaEЇ]&?_>go, *dHpd0Ge&^4HQyS#XzLqq/wzP1dWC~{wӹ*{ĖfaRYpʘsד3s ]M0j%_%EHlwnFv!oO9z-m#*"T50x{b̴.FEi6p 9C%U)Ѧgdv`Fݺ꼾g5V48eeР)E$ET9bk[61hN읰WM gHT57ʹ6<ϑL~}c(ܐ+Kb+z U:o]3]&9JY!}e}|<&]9}-oJ^e}.C->1yߪR_aKpo9 x3f3_ڦdu$d.WtViharY֕"Wͼ-=,=sP,zsPۼ%s\}&>|bĮT.<5_$sݯX0՚'>_(?q>kǽϒ?h0/oy}M ]WQ4W.EXgi)yoo tt4EVPT{-V2f;n2'XOJ~YwoJV=2]}^}nnS'Mܙ( EtOol8з % IZ $ݾ9Yb־._{3&G+:bK\|~J:O$e:oElSiTT@rc5d e9w{[JYx\so v3mvfm[]tLYzErqiVʖzZN:oTReVlF/p@NO2 I3tv:ʝ[VMG/=`ir#K#t#S]wdc 粝; eRUNs}me;z*%KnWU ;Q#/-(}zJ\ߺ۵kZ{O$pG=69>"65Clm> ~@k]w3v_uU-q.j3vi;L٦ QrTy[Wf*x_؞/͎GVZh#wO1ʬUHH;zMb=BÐDIlc:ili]71a)3փ?D4Y-_2PJ/BH-**bIDپݼwh֣5 T}B 4o66vg=|^kxk2.8?]Ƅ ;u>dyvBdO?+s7&bc~%cu,g:FY.+}hDxv>ݷe[ÿIK[vjpT]W7d95<;^I[Gvaiwt\/fW(;ی28HOרOhP{_zj"V`{?la ˸pq^vTf0l!-ۭW'yv?:Y>;N>}d[V^3ܭN-CV%?:ܴ;7ߟ%sI>}lT tl ObYr;E͘[&/OE>>4{&go/iKUztX&nFx??mjXE/ JɹJmwv9o2B̿ 2K=`P5C튮 q>wGcљ¼a]*E zAdmzo `!w'†nk>'_4!?f\]tFL4+nP|C\k qm&@ViA(DJS,̠3=J?cs 1"KR#fXFg h jYn_P/=1œ]m[xͮJRA{`?%ܐHnr/]A,N=m ֛?zīK_vyGV͜ZL7Snl90"cYd1dONhZ  JRGʯ1 @"n][vzR쯐90J!T\0a<œ{6VƅXY(YgdWn6d $k =w ׫8uBVO?ȉ"!O,Sos-M,{ rg_"U~~^p_$1 X~sڀ@9UYjOQ9t"Mږ|J 8sdȌBVMuU_`W8:8+nVcE?Dm)טZM(R!ZM_7E&e Roܦe\X}~j0}4Ye?{ڐ3Ͼrzlзv'fGX}OH N ᭰ӆ^;Ƿ;s'8tl(ALX?~[u zqe)T~޶o+A+}Nj=BJEе ݷߣ][5>} 翿;C^SCm/ü]οWpοYho,w~|@YtN9x `Ye3ޒs|z`\z)~Ъu:kˋ&<GOՖǼ0^ڮ]4 :ERl*GQo[Uaʃ=#jܵJ+1|PUTQ "Ty^Aj| B!̀ !fBH3`B! @HaGju^IJcQ4!$sEv*@Y BHUjĪa$BJSyWɳ5K3{6\i6`StfsaHYanctZoýz} -{.[~7&usX̘wh8ph8oi9,׶noḅ!3 + B(i uuk~rv|r^'\58}\$ 햼'0-' >9٬> I~lmBQd,=#?,x]Ycec۳pir B(^Ataw2@3-rRȏgO)Ti@#A؝H<4j[ӻ'+(Z-ׅX6\ֶ}۴# E+y_}eHj4| B5ǒ`i[(z0) n:@"D"H"|4c/܎f @Z/t -fb/a)FB5JG,ًuul]^fF6Ћ6g9e%ݙ,@|fo(0HBF)OY!**V7̯_X7ɒN+v%M#AR/ugx$.U3 2/ mULc곷`ݎ[ >=3锴J, ^FHBFԈ4`ǟLZB.#_q{KPc'm!c^m;a1YꬸzZ7YNY*Mg3 v*iYF't\\ P9{;/BTUOU1b)fY"~'®*>#{Bb ŽṩNKo,u_pd-Y{9B8,k*צߪ)^ J@7Q7f2:9nĂG>1SHc١׹=}+F;x cᬖY8riW KN#bUFuo6jǢ]&?=&%adXxe>Dq(r$Ko.\f̢e^*ve ;[E$v]6G}qFROVBוzw|f]۫el>@-ǖAwoGQkڹSHg}G56LinWwX]-x_ZiЯI7;JZbԤ /A ZwxL&: Xe<s_ԿMriL2Mרk_c[(8F鞿-a|3~]wL'gNz/iْڍ7bn43iyҳq\ٻ{0P*aū/^Hժ;QʶH"_w-55j-S[%u:kRV݁i}7/5`ؤ 3^~FCͩg$Iӽ3ORDv{OnǐZ_%~UKJ)ֱ?Vl C%,ɁޗlL_ W$=+rV]zx>97Pg~;Е]Y"v{tnkɪNB.>?~nc㢶}9"nwuv$̮WNKKV䇫"M鏠6}ĜI;n sߢK^?)HĹk~fڭ\Od%={5Vߍ%^?95>nyY8y,v?3wZ H,;>y/oWqk ٸ:=;")7׾tw49 4eƧ䳑;E_ps([ґ_fID-rOə9Bc1Ԇ6^iӉn}tm3bއ'B :2pGs ԝE}'0hKK&,~󕨱*ֱB+,;{QvGN,m؞ Wq](Z~L޼k0sas\ycfC#(f$Igm18OZ1%?UAPS_\ETnj%ߺ6i۠ңa+fyh=sla֏sB1ǬՑBDzű3x?ϱ\΋׿\QMX߅1q?qgZW*D k~_KgH?B%ߋɄ+q`ֽ19Y*n!M ;{QvGZ-гv+XH;*7K'`L&iOA5[?cX TԒ2xo,olB7P.u2fI6\y@llςw>j>:Zwe?]v.t{8&`pv)} '[Z&{AN*L<(rQ&,-sy'ti}0=z] %, $_&@5.QteWlwA %#!;@vKX)u=/͈:34hVË?<2O3k' J C:vTհRuׯ)N@µ7 ҷ$1}`׾{ijf :( +M6#e5+gP5S^!5m% oun(!BC47\Rekt1,wABŸ;[?s%qh+w{c]rg,׹P˧S9\jݢ9SW6k0 Sߢ|U5PI6kɢ\ V}si/z᧹!sҍ4i^H}uϠYOd4Ol$DrdQSĂ©u)+5o&"X_ܵYke +m< (Ou3`$ֿR7=ʨ/]$5by2W] 㷪QjJD,ԺԔ-5S"M$pڞ< u6=Yia_Ex*&W,Nzj\ݯvkgZp6vVN&I7cn.0O-#VI/CԺTLPu$d]l&cPsWֵ9։]WgsÒ m:Jt&pIz?1Dz ~3#UR]cJW!fߴcI:\+xkQ"T侻QeoTAΪ'`۔k{?Qҟ?\mwUv 6ete1\c*QMW垊0fb[Ef vY Sߢ*H6,uؑ"JU'i`=ѪX7w..5W,̍wT %50-Xt REIGvxpͼ5%5S"VyU"-ث|%׆dm;dJP4i id׷^ڜY1B3x!)\X"mC&5&;m gKyܺUBber.SH7&8Y.9/ O9FL:Map7Bv= T(vA#'91\w[S[42#ַ,=#?\\ 햚CIDAT'0-' >Lj,X"irݔC/Q](S. \X{,%rn 'wbM9q9E#"]‹6e|m09W٥%ݚ=9v~8/Vr}nn͉˃L -`2ٿ{['Fb1 sI|PA*v-deiI!??EwFnx+"K,HgRom&٣G-4D:RQc}dʕzU>|KB5CnHd'1%߷ԕN p^[Ͽ!H$Qp(Mjllu #~?JT龣H,sbE<<&Xn[ɈiG^xyjHËow@cXr,__-Q }DbEjM#'Dgo,ʷX^˷{E?| cO>cǣ$iQpfcQr\Kj)B2Ό\x6ӱː=mVQ#62չ50v62fն+ɟ ֗T+ꬸzZ7YNY*b#mb2ZtȁdUpЀ2ilr(v)M-[WItST6B!tlᳵȜśx_}oQrUWG,>sއtci"X UaDvt-gwcB!MW#V9`U!*;yB#B!̀ !fE`oF!BW #*6bU(0ounō!P%P9V^ -ӟI6QVvM+6 #|jX,68& 7ɮgf =3Ay*^RѴ%/BHS{f˹^ [h eIR/aVГ,6y+f!*s0UxW=[.Bj@9 H>egI̠im&O5ߜH|mr՛_!PQ i0NA#k.5VN)˖+%6F!T}՞q[α~C>j>VY\)%/BHSTUM+xr<-ʲJɥͭ:Bѱ0p͂gB5 F,j*qU!*F,B< "vxUO㑢7#B " BiX!4F,B#B!̀ !fBH3`B!0b! BiX!4F,B#B!̀ !fBH3`B!0b! L@B*BH3`B!0b! BiX!4F* =BiX!4F,B#B!̀ !fBH3`B!0b! BiX!4F,B#B!̀r[|=.BrI$*"GB#B!̀{'X!F,uZBH XU(RF,5Qx'X!F,B#ȝf BQˆVҠ ! !f =BxF`Hnya TW3#w8VoQH"ݸg'UICVrԣئ0$Qt&ۘd[ZnlLXe| 3փ?D4Y-_2PJ/H"mi[؃YehbPYd-*DBՉ|Ē}yxěQ !ʁCC ;dВ,T?vmDk!8O9z05vj9u'Θ+ؿXضAn*GTR 8nԽ_¶-RD۳0W_mAjY|YS5H5s;k8NO1!3ŽF70rO|1Y=܍I72<ؿߥs}qɳXcG:˥qQǣ'슶ry7xd&Zt@Qmb/vdmuo*֭7b9o;=("nj3YNM:;WҖѾ]|9}XWEKٕ-6 85mlӃ{;6b8m>yޗsZh:F^?(x;RظG_$X`f6/cg쨐`CZx-[N.Gyiu| w|:ȶg[Z4J~tiwDo?O=2K|+4>pR6{[o~6}1,"f-'F "zF_u݌=s3?*=:,]x`7#<ߟ^Sm◄\%ϊݶ;;p|p!:v7}n3%dUB9Ž5& !Y WДeӅGcљ¼fVJT/Zh =O7Z h{%8lp †nk>'_4!?f\]tFL4+nP|Pk!-Ȋ?W7HHt6bt^gq."&bQdZcp|l !]-v; E#FKm 6~_) ?TAZ]n7!SuT1AC,*["mCݎFP|`'l'?r/]A,N=m ֛?zīK_vyGV͜ɋ?L7Snl90"cYd1dONhZ  JRGʯ1 @"n][vzR쯐90JI|ѵFXiIDΞq S6fS~E,ÄR IIvvB?%.r۴!K%_ɯOWzu62=}xN[*!' ?N͵ 4?c˝1M|6W%u˨-"A)d3KVWJ#VQ A,oNX#[xah?g*KT)<5N)B۲ݖOg WȪVY* 3[~4^ЭV*^Yz臜-S VJ 3BQtT1 $bA0?\ ]>EBijI6F/~7)Kz~VO6/N.cgbA dG|d\]kC<ͦ@ڝqr:`?E"ϯ_.81Nz&\@ωĦ Lnҭ>B1 bX.?mAO;UƕP=zR/=A=77;߃Zw|G~BQn'Zj {y0EGEI I/}wȶEBiɯ/ . ֶ.dsm=}tufrwm)+ m#Sa^yڴeοY0h4V7#;=;Xנ?Hp{kKC6F7<􏰛zyqO ,4K˼n^§^_E8m~|>zuN޲D=RR}(-Hn<;FllqVZ/Nm2giUY Kem[ǀ%۞3lj؀Mghv>lH ! D{^AB#B!̀ !fBH3`b01BsN"! B!̀ !fBH3`B!0b! BiX!4F,B#B!̀ !fBH3`B!0b! BiX!4ftD3:"#+fBIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/UncertaintyAlgorithm.png000066400000000000000000000745201307543307100304220ustar00rootroot00000000000000PNG  IHDR+y IDATxw\I'! DEEơg/]Sl{;v=ņbǂD%yoB}?#ݝ]3]H$*+TpUKʺeA\%x.e]ʀ_r"0yC o !7D` @"0yC o !7D`EobdԧL~Kυsٶ,Yڲ P|añӧ̮QCյ̙3&,MNyyB֫gYҦ<OCC~}  ^R[>~zX؛4 GGI9uJ,޽DԴ|Mhh8{#c,mVgos*)++ ·owrw}/_Τd@dw.]fjOIM_{>s""b٢go͛<=kht41{pw.\Z%Kcex1er]kiu8bJP(Kŋ<LjLM }}WT]<nWyV>}H?1?qŀoQ#s@͹HWV#W[JJ! ZjHD|>m\bRRk%++O=ӓOigLq$(uQݺFE;רЫWkcl6mQ͚պwwvumegg=\UU:ujDD-[^mǻysVvamm6YׯgE`?a,ESSMWWV71X11we]dKQRRlӦ.x*+..]:+&ϟۻܹ>ҏCV}--uss#eeEEEK͹jjYXTcWoyHxU/ R>0"7ng;ϜYl/DAEGrk-m -m߾=Ι3|؆\l<%))Gg"JII߿]rHD"Ⱦ=~|իku%$|H?![`hRRP@d,㱨Mr*HԬYoEFt%AC)v۶i{>Ϋ `d_^ #4.S ?3fҭNZ*=m_T(EGLO {s~P(ܼ9h11ŷYܞ=gh4hP}ED{\`POo+d)W&M$Ov7TCClljE,D`O\(##U\+d_yǎžSD-ed9(Z ae7on=~|"H<z,С+RC|P/ôԉήxoΕMF?Iuuu/_| ,"O(%3ٛ 5k7O"57 Q#{6Q||rss6m:l3y<޸q[K2e5n\ t\Ye˩'O^|&Ѽy>Hʊ'#333l9ǏW(X۷7V ߾'"W&,H"jڎMKg777V7)˛7觟ųe ؼΝXʣGO<ŽC995`o2/}s͛[##XH7 O(D`DD޽ pk&11oב#Wӕ;ˤAC,MHܬYs}$p^p`bRo?KD-Z'ɓ73""eKgg["ȪV{FFTܼ1czD"эOtt4ؼ"hD"с<=*))%?~qz-[ڲiDyLϟGoz:wv233}Hƪ>NݹH$SX q͐L6FMM &G"ջ/4GD}}Sddd( NDo~6/OؤVfe<|GX6ssxo>>K{h7vwudeeiTvvE)T`U菟>}#ZYZQ^CK?* =H?f_p7--ǥoΕGk{gj{+@l:uÆBHw6N-=rdJ6_7)…OF%z{w{F̉?'[ZdelzP͈[׈Zqzzzׯ?>zzRמ=[] NmŭZ5 ef cq,e#E|Y栧㑺u؄'77G7DϞEYXԚ5k{鳟"+˸_6*<<)meÚ/^"4"C:}]]͘_>}xS9W'*ڠA={frsħYT(=*7ߖ#QpYPU(7D` @"0yC o !7D` @"0yC o !7H$*2W%ڗ@)ua Pΰ ]P!7D`PpJ ! !A "0yC倔 *#D`P֊*0t[{.$+չs*\H(W$Ux.$Tv7D` @"0yC o !7D` @"0yC o !7D` @"0yC o !7D` @"0yC olX==-Cy24 `r~mU wd7MM5==ŋKi]8E$B#Vxľ欬LWNL<{pOON>ҧMPXʞ=3YʦMr֮]jg,QRRlӦ.x*(jj*D$(655Dg*YNUTeK|*++蘙֬Y܈%ZZ88X6on{yǎ5j蹹9՚|aWt) ,1N/~(jܚ&&յYy<^L!]%uvU3EE}q 6nذ.ξX]87 xS.N]8uЬnHHJA<7.^6 ` 9)鋧Lkkaa;޽ʧO_gdd ٳg,[" cs.X0cQQۛ%9,4t?lRPwÇZ5z9u7ūUK]vĈnoڎBCÉӧ/Ke20Б5pڴQ^ѣWld_^Rҗ_~Y% =hP\(pMײ۷=9s`+WHl3Ca5C&s#Szp&%'D$SpvU@<0U!¾ [[:Tz S P`R\\;ujNDII_XL5kƲ "jĒ칐FDOT$q::ZHII}hp ͛6n<Q<5O^hiKxDԺuý{/FFƥ-Z;%%aúG_wE"ZrrF&ɩX!-+_тCY燍MJjh.4]vPSN!"nҿ~+eddQjZ~~Cy<tP#.* 9,==IKO_0{3xp{CD&&չҗ.co~ɞyHDFҿkV*eeʼn<33C.[v%˷2˖1#׻eK۸)S6.QK+1"b"诿nx+(z<رk{_徾˹ݿA&SsǫY?<#"UUe6lT޾qptAbMbtRXG kokkڎMIds͍el]$™Suπ{IwZILLuU"tmӦVccuӇ YYs¾?|Hz,AW<`M[nH^ H;uVQQ⮬/zzQ\\7fLOD$nx fKDYY9oҘKܾ,ha?&Oٿ\>>J,ڬZ5OL.++^fܰƌXDC#v]Ob߽qMZ]kDdoo.OҞ?i[OQNff\#tAbM ^Y kKccr8>i(e"aú>>(9k˖c zED}ٱcʟ>}H ?NݹgBDݻ$,uRjj3d[IfD'dKwZ~>66>uxAlIzyZZmڌwHiFFP($;5k˘1kѣGsl8pڵGM+J̟x<Cjjʕdo9sQ߾.Ⓥ=<~"O23CGMݺn}] pco\]'5i2755¢V`š._Ě/( =[o(<:O_B*X=PN:εu &::Zkh B##޽ۜ:ȑ7_¦߿]/)D?~,,jm52g3cc )nܹ../^|>thguu"j۶ɓ[jr .fcS`ĉꙙ١?liiuCCݖ-mn]#+yEVb *"3،S)* 1lKnnǯٳ|ڵ&ζ썛ѣ~͛[DgϢ,,j͚5޽FF5]]H)TELZ'Rή?PNDra}^='Os_$*ꃩiuֻݽCk{j__BPRgW=sx.T (x<|%{|Lŋ(* mVMpڣfx۷}z܊}IJ™PRL6Ʀ#|fdTMQQpmY}]L233îAJ™PR0 U^B>|ʕ+7nNNNb)cladffL:u*UVוO:{h555I&ijjѝ;w֯_AD5k5j+ "⹔q)@LppSBl2uԆ ~iժUSNݴiSffɓ{xb%%7opU B@QH#F|KP( _YV5̙ӧO~ؘW^QHٷoߪUS؛Fm۶VKII;wܹs7oڴۘ1c4ibggצM r d >>v["|N:q!ٳgܹUjjjj .?5kV0e˖={,44444t֭C5jTaĉy<<̙_o%{ϖÎյWUTT&&&7166ҺrJay6hرcVv(I?egH9P]ϟ:{vZ3##ʰ<%NAAa̘1 ~͛7,X@DϞ=SxxԩS'1gص5kVWED;w쮯}ذ?Hw:Tq (ԯoZiV ,T|o\\&Lk=ػ7Y۟,Hxׯ߿wk׮%"gϞM8cǎ#G_paYdRy`'Nܜ5kpTsTT?_J;wSׯ+^ޟ?nvFQQ=|eo٩Ǐ/}+k P0} pڵ%[*bF`Fsb^p޼Wׯ-n2;""VMM%55{wgss#"UKZ IDATl^ qq*/OhdudKHPB1([BP(@PLVco sp \*dBbMP@G( wW3flm?͛>}%ܼxkko"MUK~sw|54tM&'vQi *?۫+fmzzҥGjiuVRr31ۿ۷s+wW44:XB/lUA3flQTl.55;^!Ni,sjjvrpv|q)$9;7 jJL /{kk>>mIϞEWR&8pСuƏݳ ZD|_P(> ߼9{cǹ **>SO;q_*ѭ UM u̢n]#]]cǮBӦVulr[QzTdbIGGOD^u-@}Z\XEyI2j,3WrrPFƅk uBOFQ\_22.l}wDqq;25ȸĔl٫HCXl *ӧ/Ǐ " Z㴴ԉuke~!<gHYYQEEIEEhXbFΞ¢@iL"1#ׯ?ͳucom2d;̝$egJŋ%II_222aĔ윛7_ { ի0Rΐݻϸy3Ĥz׮-Lw:vt>}V|kED]8z!h߾KśQ#s$֔[qмē[yꤤfӧQWIJ bex ">>YfaZgfٱT>}3͛WrǎǏ/ys}r_~إ,CқS#G$De?<gllS<;: j5c׬+Q-@n݄u&p)>ٲ7.H?8?v+EUJ\\]\쥧H8++vgs'lhlܸެyH?]~~|r/ CB„B! vڷѽ ctMJJqsp54T {b"E[nimQ'F|Zs:K+_Dl;bD755I&IӥSz7]n#Xfm;w;t)& ZaE&~IBMWo\[T#G0㗌o ͻ}ȑml8;J?CUn޴iӉw_DFݾ/޻m:n"xJJᵌ๐^v!Z` PJ4(EjZ={"ȸqYHtt%]Nu:/1uڵG2327l8""wѼ5 q6l8΍-5[KKm5c@[: PQ[L8 , {3wwm'%}2OD<u ~XqUP'ܻ ͚g+sZghk֬-R22eo64j V:=mZ…۶#*?8dH' vvvZxM65j"Q0{ef^d?(8ĤnDbbĤo_ծ]cܸDt?uWo <=]ܬiIƦ6 p3ӧ/k{9GlƘMm7ޔ""b6qcKI),MQCի޽dKuuHTkHȆjHȆc{  JJKK)S<^]+0Xa@b`ժ۶Mk&:É7"#ڴi4m?qsxD++}f=y: d~mM]߂tuu׷w૪*sSLjHYY{DtB(7m̘^))[ۭXmn2{f؀ ߾|\a5-[g{=6V+ RׯmNNޅ NRQQׯmPό;hhYZvdi ^%XEed̏ǣrs9Ŧ?hxK$yy-8t芢ÇzzZk" "@s)@s#G^JD.895R{uDD,͘1WYo!#Gjj ulo9^=c[:w<5CKK_{ya ODeOclӦsn?.$\uΟyyyBB6[sT x.⹔L[xxO2d)`sm.ݺ.%޽\\R$Dt#V?[]]EKKw6GrU5(+EG`7o~J޽&M7s OOw_\y0n\i݃^|K_}{BvMxC#\gJջ^fihtY_.o[| 뜜&M,%$%%ɓ={пHH\X;XZ/qQZq2- 66llƌA=zd&LXתUí[5YO5z B(6iRˇ=Ĥ/ --MnظqRhVqt֭%[=H{{ IX/^Ĥg0zzZk %9|88++;W39+ݿ.5tqT ʖl͚#l0~9ζ7nϷ~Bcn>؃4LH|pp^0-ut4jIwJ||nn=<++g, c޽$qGE[pcb>6j^Z""u&L^۵k˗۷_q:z Grrr|Сys O<=,^<|Μm5kgNn-E" V[ĒUxoE̦M'֯ q^~wbQV5([T/^'*@P9;wpBEE)/Oغ8GG5kƖuD g%T;w03KBT$@ξE`U\LDU{6CI&C[T@%\H EXd ГP1!(Tj%s7 ]5 e&ޒ"СEhI"0ya(@%vĥT * ^x!Ȏe(T.JGaWM.qRztls`]b CVjСa⊌'Z^\Tp?2.첊 rC@4yDuʲfn|T=x.dQ# UUe*)\\b:87* D` %h* X8*x"@Ն0\+J!5"  AVA B A3H  b d9~J XE8 09Q ,09l{ D0(Y&U: ÎP,*)L+mq 09 àdBK@I@V5`PD J0(Ylh7(Q J~/D`U0aJ"* ä@x Xa!*R 0()r U*[q( ࿪䰪V_(k@39TD`P0(/(#@U@ dP&!rȬLA$T|{TAɊXfpqAU!&U0D`cr@ ~X9,W(ryd JTNð#TrBACҎ"0(}19 Td@^JprCrヒJ]0t}@e wMCT.L99 TFIİ#TR<pP~8*)AyR~YA o !7D` @"0y=ʷ|Oj* {.KYJF! TB077/77OMZ4m:/UمĚʡek>yTHKstYIĤo n~έߝs(^MbcXJX2r꒯UQfآNQ]jjF?<-w~}s]J%e]JJn FD˖ҥ{?U6/OuiWIw0P'm;ٳ("JJ؄.:nѣ{uKH$c˗ E|~a ,(o`t ëV&5kuΝݸ}TUU9…o }`ϨQk̘^A]74 ?}EDqqed\ȸyզMOhϞL7f͑ڵ=lm}\yp6mkkw\<-ڱ\44:;8ص|lW>df)STll>TSҳL"ZPFtt((jiuvv{p0$U-[) 뻂s10葕_sQPp({3fg5onMD>$<RXfffZ ۹ܹ;:۶qtQUիqMax;HxBlm}(=֡WY)\ު5Bag6o9v:Cbf2VQ7n?+gN_ܓ~>3bH/oN!AU 7¢8--u"jnٲ_(/OcY"RVVTQQRQQ:Z">={E-@(D4cF` _gcS'##l~4d;wٙ;95x 矗,Z[<۰7'oH__ҤF =޸q=K c"uizzsnZT֯߼gooimlD"JLL9z[ơ eoG'&4Mwņ ǒhk_x8|+aÖ߽BGGF 'O^O{qaMos5喆sևI9⇒y"gIRҗoL0/11%;;Ͱ&B~mSS36n<. WLDg{l^;uj"KmVVΝGEhX65+W"{c{*mvQ@IV[ojSDdgg޴հaШq߾KDԱctζ+DG\/")&Л7 DD] t ԌC%&?8ҴKV'%5kV>ZzLRR+Ãɲ7 _\~m&nnŨUy4XEE1":)@Ay`U)ͷʄ]cԩRS㟳Qqzjgݹő~~vqde .>xstc+x{wؾ,ϳMj4D}!"GG낍caQծAw "P[p+W+Kp52Сw_IDSzUJ?d-'Y'X#T0VV|>_( Bڵo{ ԾUٛ4cc"buHCCk7rBD"hKw6lch˽^]Gz ?~뻂mG覦2i^|tqW8""v栫W핔c$70֬sn'"n~v!ĭx3$qPMWoCf\G[[]|_SSPJKJ1uj獵g֭k">J*~X~Bnn23 vxr*7BT0ժiي"#ƍg!իO ">I|v:klRKf#ii6wQ7onͮ6Y掎욭t1cm Ze-&n+;ۻC۶R}'"7~|" {|b]$%յ ׾\*OGGc@w"z.w/^QNNnHH[$κ9P!x6mdmmFD7릤2d>nxڲdp?O]< ܞC;jjv:p2ٙݺ]TgkynlܷijyODff&!;3uqf"%C++SiNNv`.Ӧ,\mۉٲT_!C:h뷳-k|f0qRnKU+#(0 P\ʺP*0 o !7D` @ *wd|%VF#+@;Te#k% %t@y`P.Dx}{U^BP(u)J]`&YΝ>N{ D`P6=[ƕ'N\4n+QAs ~X =g6l8`(wɥ|֭;jh۱#8cƠ#G޻R҆ b۸xSʺPދ1o?R6o233,=3,͛a≏}Q=JoLNNՇFɥvbŁ5"0-;;7==S5wиf'WI>$H$Zt_ݺbsXqV-u.LOm& @?}34tk^ݾpᮅ EF:oގ vr[?'<+N\|ݾ}_t۶inm>|%7LM _wDKKcǩ99Rʳeo<nBReIY"D͌0„a,$35 %K,)kEHDڻ̝֛ɭx=s>sιy9~cO!Dp'p{[qQC;b , gu{vM4`ܸ.ܑy͇fdc xoLV;Ç)S rU)J*|5KKcMM5]Z'W'|%%%Ky͛ZXzx oTTTnǎHo>Y6I^ƍuyE;[vb\녅E,qf޿__Vy:942رsO+ss;֭L,a#F05mjbd,G}NsZY5;E^^ŭ[JYy|E&^n%'m~4==S^^0s!{JM}rrٳGeՒW0iҪݼ`lCǣGfӚ I[12ҽuaJJzffv~~@ |-v޿ɋ0y9bqL6eYQ ZƉ;>JJ ;<+(Ο-==@0۷9BaP_y"2eН;;vTRRhhƌCNwuk­[xz:uhÆk׆\* ZjTT@ 7k@޾R6YTT֟K;&oo޾yHH+WTHH[@=œ3@Fx/TW3"@PZA]r_(UU ERu԰aF=̙k6x#2`ڸqk&P0 uf!%ՇYH0 ,$!5D` @@DO &gܤ=Y 7s%aM?xD`P;\]W+eYx]zq4qȑ<<֘8kk0lP8s֬aa{"rw_r֯av<ަ$E> |H ~WR;СvbqX9.\8>9yϱc::&UT.G~HJӫ͏?nUT`Xآ[4ln`s5KKcMM5ɳtj]PPX+DdI?8ϙR,, xݺ37Wx@tt4x& 8Fܹ.-+,,RP'"c?8)++lx_]:Ԯԓoki障fnn ٳL?]Z\h°a݈hԡ. >^(99HTbӦ >}lo4p Y>[>{vnݦ7o;8#>|ףG[.b۶y<60a5n]R"z>lF޸RF=zw&biJDiiXL^ w}qXƍkB;) [T*㩨(T!=0gB8#$dt;汗jj5x"99,7hD22O]Nw(7Vt?P14*yꩠ @I/_-XR"z>W[[ v؏Ll~&ZZQQ MM)={KbjڴUx.[EDŭ[JS@  rMX:lݺ>KNN۾hzz`L+B=2$ʕgb%/`ҤUy}# e+Lt=Z41co쐩Sl-?p9CNڰڵ+WD"33AVyE"QǎJM65q),}{CB}}]Đh7|>Rq<aXrx<v%H Сs^^<URR +W 3SRBjju EvDDÆu9u̵ ~gYH6nmZ |0 uf!%ՇYH0 Bu"0I~|%,$@݆O^/V"0YC kd !5D` @"0YC kd !5D` @"0YC kd !5D`& @xڮJ, @'|}xڮ|0 kD%%ҭtOhkʯժdܖʠAP/\کކ\\.^ehh',GMgqvcb)Xͷ* l%/+''ޕʽos4%Ӯd.CT!|~Ou666DˠЛD/܁WddIXP|gw<&"> HK{v:<ݺMOJJ*]))ldE]+KfK};Ç-f/ϟOm"߾!]Nddd)*W"0zw#"3354T{6-wE c)szoffۏтA..~qq7KL nC~aKiӼKV׮%Obݒ&&>-<5jԠE ƍYz66- oٵ<]]D'%ǎ]nmLʖ?k#eff8pڻmcl'}8MDZjF%V͛fek@5.RI=RgrNN=srl9$֬GD9Ꙥ"vf+{6lΝ'Ҕc`3p`hkW"=H|\@teeKHHJM}j^"СEZ7~8v=}QIDAT?o0w -]ݻ\E;wx_FƁ&|\vƄmkL%CBB[7=2r 8vnmCB-ڤWDxUojucPПDԦMs[[ɓɓ gӧ/BC_NO?yZ2Ó'/6liGann(44:!!ܮk۶d 嶔ۛ$3O?q!?:?++cǖDtcHVkג_|#}0ffc…' ݽG7;;ϙ3T66n#,:ۦl ց|vBaS*yl]2ob҄y]65=ݜ,ۥK%v]K)((us꺺%"WѪ-]*y,⦗_ۊ2Ϛ5ԩ7{/ut4c{Ɣt67iR"?a޼mEEAA._^tׯUrr|"7KwY׹b\]q.\ckkIu229udYsYZjv="bevf\f]]-ifq@]]g**J2mۼoߎ'N\2e ͝BBPXX|H(;g~kʸΥ6?[FCDjjb"K\.ѣԄYy o|=<(͞'JT^Rbnnm[dl "?AA3AA.mD;@ WQU[Uw캊|*&9 J㫫fҞHj~680SSD"'%/2)uu9qrnniSGGzA,$@=Ӱưa݈(%%{# bcơHD|>Ҕs}РycMi66l/!eQ):wd!͇EVxN첪rY`~E g($&>bOtu۳g4_͘1z>ILAXTT|+6;CvvבoobXHTR" 9)cǖ,þ}gX9{|re?5HUOFFzbܹ`o߁#3g| AgٖDe!m ™/^6Ͱj&M!iip.d)2~TU?,4i|ĈUP-t鮁([[}}36̙#(8đ#u7|haa6lm=t{w||-ݳBi/e쥛[MM5YgÇϳQw(ǰluyc&xCC'CQ<جYcoD_LL\Dzoh{6뿴H3*iʪBO\6ˁbqOk@ BPj]bM UU%Xhh50055ӧo޼@ hGnr矧v֚_OkNwoz$s))=zSIiNNBW׾ g^x7==04taMozxɩ'l,]UU>Ze5ʊ1"RT2+EE%Zkiggtf䕕iԗ&Vy#I<}}]=B6 Pg>a*\낝;OAg(ʻf=ZSS[b/< #〶g=5'|VXP}NGDFE%~ѩSWM[ץK+ 7&'т~|ITڵXuu)S&.}>OCCE(lCepjBB݃YHI +d =0I<>+|u`P'!쐄YH kCu a!5D` @"0YYY%iD9y`u {x"+|f5D` @"0YC kx=x$< >'< n5KYHYC kd !5D` @"0YC kd ?sm<^mbqmૃ v v F5D`PoDm:'L׈jUFNQnKeP H @rehNzrqx.Q!<5~Rُ$&>b)5ߪ,X]^|zW~RR*̟˯ݓDov|/=ݺM_2T2O$F)'{ذ!BM\H&_~ RIUKBCcǺu5v.# cXP|gw<&"> HK{v:<O>a22ΞEEΝ-LJ9RgrNN=srl9$֬GD9H_aF,?~MLH*ҌpwW#i*իrACP$%=DDԵ5ϯpmƝ;O)@g.vV(Ez"ܹh/"zrժDԡC7nq`Z/"z~"ua\"Zt׻wb v񾌌;&Lٍ ֬JD%',\nzd v۽; YX|kk^:Q`VMDՍAAQ6mm-&O@D'O&prIO &~:=y>;;k Oذ"8ӧ'脄rm%RnoNN^x#?uÇhȎ[ۏ"Y]K~2g%%8qM7n͛Oݻ{o.wv3 c7vZmS-(>KVKIs--uiF8S;RLeQuց|vBaS*ۻ. Cv y]65=ݙ,ۥKu]K)((uw04uuKD<US-[T4YfM/e5kԩSWccoܻ422^,hjJӍ))lnhҤD4~üyۊ\ܽ_Oa뻝D4n\əKsq2ݱ]pւeed7rd"ɲl瘙ֵj{Dv̸̺Zt۵3۹x|Y!!'# KKc+ƀJϞUTJeh۶y߾O_$'D"ٳgZWTUFv"bkhHMM9?^=I~M#z-uu5+͛W`ٳ^Uk[] ӶmAD;((Tc&7(OV…-^X`cDZ~rh67TQո_~GʮYKbӠ^99 qZ_֭un(''?|4q_$99-x񮧧I@g\'.曚6utJ.FtNQQsnNO[[s)Gx>] fnT9aiPcذnDD7 $">?qbiʉ>hмAش`6D~y;[͇VxN욪rY`~E o'&>bOtu۳g4_͘1z>ILAXTT|+6;Cvvwבooή"DrR2Cǎ-Y}ΰr8ʖrKk4cMpO_KWVVOFFzbܹ`o߁&3g|`Tt#wŻg78)W(@ul6Me!m ™/^6Ͱj&M!iip.d)2~ZO]Xi"jӦݫ<.[r]Q3fl$"cc3GQpq+#G.[Oo…+)ˆmzt2u( v \lwϞ i峗nn55إZrn<|<[{bq ?ɖ]oh;vlo"74t24Uꫩ͚5ADu|,FgkKKk4nn+GRT=s&"RUU>qneՌ͢'FE].@8FK{D=싖VVLM#wO["JNN}{Z&Qu"0GWW+}xM9A?:6vp?<%4ԗ4]"q+׮>|cIRR{h3Ҝ}4PMOϼxnzzah͛޺00SOKKOnoYw}PdkcD(?dHW"J`O!?xy R޽eCD~llZz65ɪU{HR|^lְa6q_2q9z㜜f{x >yrm%_T/Y`k_55夤&M]5X*G:^ >fxX.عĉ+4P}쏲Kk55ؕR,;;ddTz'ħa%>@e;@D#>wEDN]6m].44Tn|FD Cq_4$^P07dڵXuu)S&.}>OCCE(lCepꯜV9S{.QTaBJ,$\/تϏ0 YA݃L"0D`P T鿄ԕ9: a$ϊ'|A݃?$!ቬ @"0YC kd Od4 2yx"+|Vx"km,$!5D` @"0Y6< d?p4SڤIENDB`openturns-1.9/python/doc/developer_guide/Figures/design/UsualDistribution.png000066400000000000000000002540301307543307100277330ustar00rootroot00000000000000PNG  IHDRc; IDATxg\Gg;8iR, "HDjN645b7Xc4J4^^`EEADT:* r~Xyeo>ggfGanvB)M RlZBN#x]BX]B!T \ |~eeUeeC YJMUSA*Ak&Z@mZT%n]BHa2ܷo/:QOOSӻy!cƬIK&^d#ck;a%v xee䖈de*6nbOxYa\\*t`WM x @$L(O>W rll a R-Rbu57}`$!4_k *!+4.^>|y~~!hiq|˗{^:u;[,>LK;(ϏO''+--|'fDU+459۷%Ol ėF())s n%$p+Lp\֭[,932_c@(JKsr伿r%琻_n&ךu1Z)vk"BuܸZZEEm()(( >}*׽PRA4on&Ԗ}Bz8A|}gSEfP\ܗ)CWW;r%T[Htu{L^?{zPkZZ>::='ge/ZZ61O.*lhQ?yzz~ZZ>KJzQQȽe<{h1T[ۗnn?qO8\oD}ڞ8qC|,r5JɄՖjDT_-"ySY3c33Cz_`% hn~.**"";93YYo[jflҨ>\t%h׮ ::\oo’#[ | bd԰IFMɍV7n$|(8qO'sÇz{~&3^pzU,+ӳM~~arrpI |\L&jd,}U[׎\&MkƫW/I֎VNl}̙޽smg6n<.2K~ C!Ԝ% ϟu+ڵiӒڮEhЀ+\^b_ի-B_ҝ ?#Ԋ=O{cС:8X^[TMgMLϟiѢ1vٲqsQ^^e3…ߨDo_ѣ{}gO<P:.')..ߥsx2`͚pV&&v9v]?ŘMNX[79a[<<._^pΕ+~xOO] GF3z}..WSiSƍT5ݸ[|goJG iSXYڊM,MS1iZ1bHn׮y߿|kePUŏ?{P&Os^cO1 !ړ,ԣvso!cBn\zt M W o8nῩ"Oo?}9ᓒcGs559[.>eijIFJǥ3@.mï|TrOڴiOw#y Yiѣ %`ǎ|՟T,_>ѱYkzz:RJ];--în-|};̙@4>>>xF w#æjrT \k)Nڵ`aa]PPb2L^cdaBHINpKEE%7nDA%~jVZZY,Ҍ KE}zv($d;AӦ py7{Vh׮p܂@. -`ӦB&[Nv}(x.dJa&~bbv+V#_wԚ|AO"0U0cՍ;vKLLM;}ۏXtLZZ6@dd,YY5Y:IL^W{^KK3ooWMS1t%:T9d/20B!$'gxx}?~ڵpyrPxرk޽ws_d-S޼֭[\OfxͻtiBSԛ19؂դ+Wb::\] US0@pV. ee))/֜ڸ{E;M~YlCh_%Vb|pplHÇ7U E>a7ܤս{Уf#uu;̨Œ^y:YZ_*SγgBwPd1%%e-))+/WdCÆp棋@d^;RضuIIٻw.[dwaa s<-ri*&ZKu"1Zt?yƌ!%OA?.$a@!ԞMcسR^g)= g|>x3{^VҶ@߾;v/))st"oٿ -*>9D&%?u|}e#}vXUo~Bm*>LCBN񰤒2>={.Ʀt xuHY'DVb| s6OGpׯ,W7$?.NM&>/vvOkJOJJʸ\͑#}X 2s]u+aŠ]={.s޽t^IGj\Т2rʕAZl2ҏ1B?9?;vtMܹ5Ǐ/ővكL[`ӦncLSac짟?zKM&SRo.Η.\tu>.7Ώ[vgάܹMiiٳ8ӧkj* :Bܝ;//2vG1ԯYڷfjKz^ĉZ8M'nC!gd'[]}5Ki|޽\qss6wln__Q'N A$'gٗ2eΝslš ee+V񙥧7dr{h>}~ixnijKɓʕ+Fhoo]gukB!P% 99;wjd=*j.%g ss:uߒ _bzźti@pM ּYll oذ丸 FEZ(HL̬

}smv۶u˖M.֭DO۷ܿ AAڴiyf_EjRY,˾tu֮=laa:bi?w[B!%$.s牭 ֍Gzz:kiqgZY 811ή9yenHhtPn3d]]m{/{ZyuӇKiٲ URTU3ɌyWWT䬭[OM?dfr%V*5lB!PD@pMAl9jՁϏ\n|7ݻ\fUKi;:l8념!x v%B/T3{^ҙ3oee =:{ְພ@.ζGDE;5[~rmW !BQ gޒN[[C Fy{}3p!:% o &! oJ!!`+}E%sTdV-A(Vc)rut`(oF Ml2*\+oDcB:N71%TcAX@VLS,$Ry+H +@5PbdcyǞʯ85ՑG*3c4"BjCW"r% '3!W|0 ҺIΧLReB!Ԟ nM&|]SJ&v6YimQGPZU&'(|,B!TU {+Iw|n^IxM\ ,ӤQ3W~)a֊~Vɪ_iO0E! PE[M9Gu|ƪu շWy\cNa Q|iFY!6<[MT2]<Iܥ@zX=d29&s*D:VeCE,4Ve'"f(6\5̓V|ŸC5O3KHH4&OB!G ʭsizR) dkq!R'WJr gf~UǓ\8YB%(?|^dv[cf L2<'kB!~ .IU,ǭybOLjL^<[ZBPfZWc%[NǪ 5,S(vB5NpIʬXPS1nuMBuO @B!5 .I TTX٧bLYMy'q!GH JL2ex/y-@!RcJ'mUHLd {dkkB!T_`+ĩ\&9V2S[ZLjB!T`ˀĜR$U`W$yJKmN IDATEciR1E!P .c+k $L S[ZB}) y3JRhj(xB!-\I%UrHJ%/,N'tBfP*N\&9i]IYk]B$W5@* eT:+-7'm D~B!y*JsARj+E:]iDJZUUy*A:tXMUy=WR$\]JD*^0Uj*JU'q2+ hR[,"銋K׬9ر$==?MMo Æ-I %] <$;gIBU*YBBvp89%u(>Ս,V7mm_ssgי ڞWՓ?..k>S^E5#<*2)K+>+-2Brsus`XwG=zmmWPAU_6K-ng99srGE=ӗ/733UדhZuo\pWDnbd-vʔyygKJ"ndffyӓ' '矒MuLrˇg+ح[d-LPnxENNc^ >յl/Kˡڵg%wɺ=\W׉]zr(ݝoɽ $^ 4h۶ zihxyzN=vkuq/?(hALLQaa' [y1=O:p`WHHUb=#"wLI9r$!PKe|Tj(̢.i?Ů]:vC[y\hQ/"oO$޽cob0A|}g|ԫV-vejF2!'ޫ#! n5J? d݂I-RȇNf6M.]Gs8\&| hiqT^-icӌx乿R >lز7UVV9:Zݼ}$I^zddP|[aSǂؔ/s׮=fgKH͉YYoCCEoysQa*#oޜxx_V߸)6'mn0dn _(ɪ{mw<^t#A{GOkrxϞN;}@b%%vW۶O]TTӽaAWQ??/ŋ)+gǎ FƦP$v~Iھ…;ɍ˗t*--qH _hjj(ܴw:?l ԜHf>;_7V3ZLg\x<-4@첳 3*+&䖼$Ci6Ew/Lӗ/߷|>*NYYEb3OO'W  j*Zɓ7W፯^tɵV88x>~=!99Ġ_?Or/n'ɎVy;N20е͘1Xf(&ecӌ^77{;;, [1%tذ, apb:_d5^<͛/#  --,c>OM޸֭-Uu.mŧOE&]YWW\wO R{ڪW˒7]LM kQFP:t8O3²?E"zԪyZZ~=FTj@ 8{6ťxbbnz+Wb+֐\Of`" y9 E}WTeCjKU_S9Ñp}SpB UF 9Ӧm"3,k̘L\w{'WՖ|KKˋJd݁|;Sǵd\O5ɟNNV66ͤp$g3?~FXdL`ݺ33A ؾ܃ >u#޽$%RυdJIIEۏQQ.]:>`„ދvuB}(\.Q@!T[pB3!B^ܚ3|SB!TÛ̐Z% !j % !B^!B+"Bz\B!T`B!LpB!P .B!Wj ~sE!j_}EH-= E&5'&B!A0A|> o Z׻|+))~=08 `Ǐ_'y%{XHӧo \ P[a{im׋.A87033ѣꪦFKXxٳVL̞EN {o?a]*,Ǐ_KS#p{l9uԭ2K^NxyիzSC***CC_SuGMpsG]8nM+459 \&iWEG?^~myyeBBz gd \ËeBgpQS^^Y\\ʤ$b#Ӡ7?*`5d2gq,$_8FKcJf+P+VotpwUUfbOWwZ^fI| 7=88(6K6\ASѤ@%%e"+h.iذ׌7o>2l>?s&:8(֭[،cӦL_LE0hPSn1GB\10=rdwNݻ>}ys99tz[QQ K^bߊ×/te mbby͛'~` ;9o޶ GxqmJJGڱcΈ>y k&iBii>ܑo8#WJ\zqj~r򽔔/;sfUDصkޝ;O ysݻ[?}*kuf9))ww]`K֭D{IkNz޽iHİ G>}:i?AAF}dol^UU|gXsskLd[TVVqcy{!j .Q@YN{kбoOsysphixAhkkMox 1~~6Ç{>׭;`(6[[̝; 8O?XFK 2dH7hlǎii٭ZK;JCC_t^GF9թSkbii͛*`A89Yv0w#W_Νs96/lr]aa'/ݿg<߽{I{\`hI__7 >x0OGKSR6jhh_AkK۪*ҥ{ 9sB=UM pq޽ZG/&ޢMii>>Y^B gpQݰqqF3¢SvC dg9Jfoeظ/Ս x}x2>p'4nlTUK=Zhlnn"\?;֦ܺMK QU_&&my$|WBFȰ?u42q+LOEG/&" 4Il)B!EuÈ<ޗ )|(HL`d쪬]&B9|׿zyg~<wZZq8쀀e*id077_|; '| " lyϜΊO_r]~zz66ȩ4%۴i)D^x.nBBUtZ~ZϟF]0x%v _A+& #"bE+mX T )@ 9B\TUTT=|.C;q#ѥ<ʕA?{jKꨒqfdz(cԨvv~~{tի+k1c0W6[cʠ-[N/[75o/\;~Z5o4113==O»LM O)KȑgO"O<7L%×ښ5eʀ+UMٱIyjbbjX >vbcSl9%olţ׭;añWii;vyϼ7n<~ӔQQ~p}z*YKF-C!uKP}׮]C[Zl߳g>ykC]{8dһwrשUfS y<wS-[6A_~;'罹ɢE Yɓ5jG׬9ml䨛7i3|֙R`5[:uuE₁vZk*<gDS[&Ls7I\}hNy`=77ofߧѫK@cG -;'":P- ɍ Kh"\/fNݚ2ecFA2wGH^qq߿A] HAW4nBu .Q@+5{ڮB (\\.Q@!M% .Q@!B &!B^!B+"Bz\|~q@2&%N<&%KJʬ_tO%QZ=W՘>}s`OQ˧&LpJ` o 37(`ff=ztȧ($d(.W3ϝC*,,!*aTaMMo U$(,,={kC9 l~Ż]\KllϞytP4&BBF?~=..U!|.{l9uԭ]uTQQztj"sjQQҥc[:o߾!+Wˈ w%>L;v;}!mڴ$2㛙^:uk?ݣZ$Q`Ovu-/LHHW8?7n|ԥs͜Q MMر=U{!33þ}=׭;W$>djf .{+Ke={q_]n=-޽ii?~m~~! rt49_gh_ӥ4==?--gqG^v ֭;ܬN#V>8FKcJf+P+Vot߼ƪ*yLL.ɩ##rs{:vp>*AO*Ȩp2g__ukq~-qӦ-`Y, cc Z20fk7obtf͌>LҺz|>̙`Q|[nb3ztk8$aa'_>als9rΝs96/lr؅ 1~~aa'/ݿg<߽{I{\y괴Myy%}zZ[7f͌U^K $B[[+,lz.\S zz:˗ťs pmm-d^ y`wٲT?5ٽ{ѫ4dggbӽ{ý$6`e$8xpHy::\Ja2444YY[7]d |LTU.3gN̙C-vvrM JӦll KWiuP˧|dbZ Euƍǩf~LڹT򙙯J=<-g^P0zj*C dgJii.26bu#w_@m֚ 򵙙 UU?.!us'[hѢIBBzfjޅɩ˄53Zdwll/\X4!!]n ΪHps>|Ý;mvM!wIi]G?~knYYG##7ίbʔnn?~T$QH Yμo`JbWyy}}%} {Wkll>A p%_7uL_LZP3n1›ᅇ_۽ 0]]mBWP/ G sq{wXVYO-54ICCIkDp8frj#A566kX?$dUXH\@ܤAn||ԗޮG%_ig6m ĮSrhjruk׭[;~=Ǜ~@Ĕ)Dɼ@Yb'L-JH" c2dv -ۍ\= W rͯ\ldPfi|SM2"T .LL 53u$ʪWxe˦ O)D,>_v]~zz66W/fgsvnٲ7!!*FE6mZ~ߡݜ9ϯ?U[ uFƫrE +"++5W+,,?ri AlW(hxV[xQĎAnjbh0""VdC՚2B ( Ʒs«(LpQܹ;^ߵ±c]lʕA[^loj/^pwM3s޿TZZNnz0]a'OUU%Kvgd(V’fdz(c嶶~~{ʔ+W's2##=S鞓3:%ҥ{bcS޼v#KARRR6nܗ]XLLRS3%YvRF;O۽'}ϛ/޵bx&I .~ʪǏua {fk􃴮?5qwqwz+2{b6lrpTN{jwae)}.[\xu7l8*--{ǎ99QiZ\foH011pu_o)YWQ8EU&ѣWCŋGϛ5yrF~5|M޽=]7o>jflii֭3[ssڵ cǖNi}}/ta@_'k릞S y<}-+W|7I::ܦM/Yl Skת]Vᑋ766y۶3:>>6l"3oժUI|d^֛l]/^r5]]mO^٧:?۷yB V&ƌreC_^:=zuݟ?vhѱHx4HվO3g-&~$.W޾?~C4B/8_Oƍj|jMr懇GۓŒb6RTozzA33CV U&5\\/h@!TH 2 nKP 3]U^^ѢEɓQSD3AP]35gp% !l8[/`[S0eg:"B5 ߯>\ςB!%spB!P .B!W0E!B Eo2C!0Ej B!<\B!LpB~UUy*A:tXMUy=WR$\]JƬCP!TYscIzz~ [D06K~wpѣ6ovUO TU80*j/`FO@PZZ>'}Tԃ:}z33CPu=V^|Ř=ݕCvZ!Tp!TMnLw$ƍMff|>7=yrr))()Q[$|pBNݺHƍ[4xQ]ߋ{]{\rwۃquoe񰡡G--9v۰aOBCm;cǮQqfhkzxLY[Ĥ5v x^/^~tݭv_%3"~Sl/c㾞SO)t#G|\\GE=ۏ",Q v^SucI::=}Dž2*YH[թdrWZ֠,|Q#|:w@?>" N666m]8ۏPU߳"hiq\M.WAn⨼V/ZƦs%ť}ذe7o>rt*))yyȜ9[ǎ]s^uNF^r~ᰏ?5k AEFvZؘ;OK==󝩩ۏ Yzbut:qСL^鸻;?\0..Uػw}DG?0;;id1]ꐜ @ѳLҟ2sǯ?@qcY.#m0qvNJzm ƌYcAII٩SxÇ/SyyEtaÖo&,%%tq&_<}Iss^:Ȩ-["#CCCǏ)/_]{ڷ>͛>ކEoڵ?˗+((–UG޼9ѣqcSlOmf/ܰaٳɔeykP>Mdg ={:2::,/܏?]mZK~yfyΙÍ JJ{؝sN1vLg϶CyzNHH} >w_]n¨)GAoBtҔeb_xK-hYL4@޽g_/DyxKJvi8s܀=wKk/_οwo/q<Ӆ" @Ov^9(P lٲ;'MLD)(`oI#&`0:W e{Oj*/Yd~pxؼy)'+ij~5Sپ=y׮?ː&,-N̮]X#Fcyy+$TG__[v'U=ެ[7s¸qg,!D".ڷ?IKKY[/W^^`0$$;ayyee/ [`0<30ϒ%w\ْЬY6بVbe6? +5b}@ p ԔލߴiСed( CCCe,[v !nڵx4=~d$y@+f]k7%'Z[Fp[.:x0x(_,/;vHp\\djjkj ae|iqڝ_22S'HRR}Rcc&`&//2###˸3g6'##CVcΝ q +۫o62vm[С߾X]]kjyѣkJJrA :7DBj>Ht^by"d^KZdHT@hv=##!dt @h/OK`0BC=u8 Q)0D0DF\ R nO3#=(^&3]! D tpH.)":@@?S?.z%t1F99ljjӛs+t:ޝRzxuK@pG'|Z`NOύB;\ bI$*n ghA)*N]~mlV}}Djo .3ols+vBwAúgee:~0|'9:?xP!^ՅE iŊfIHM,D'Zcc G}de(}E,!6a—yomH$jVV3➖v޽'}KJ--){_W]/\]SWWrvJII Okk{cc3?KNi! #22YWwx]QQ)b4Zx}845haQQ)479&&F|{Bޘ1K̼SSq-3^mG'Q-lƌ*+Ovt zJJٳ@B\իw7ov410jɎK#"׮_PP.&&fn5B~'ōihƕ+OQ(vFF̳/yKI٩8l8]HJLؽ_>%媔]m=흋G\Xxd=5 < rȑ _ NNnͲׯ#.b:cb}q"lSha..+Wii͔u]^]]:UJD t9AA4AϝcR@p Gmʸg^߾kٲÇ 7{mffDĽ:tW/OrҮKHؾy8óxEñ q{c8pn(cW$zSSi1cS |} D=ML>kݺ_S^""9 Ϟ霔Bҥ;՗.E>1#̙ᱱ<|V?(77.[6`IaooGw ٷ~}cojkWT$Ԥ88jkk߿ݔ)V F^ŋwH$͛g\uwVg|L))#G2x搥pmuts^z?vl466OzGbczVV=eeG/\\ZZ_?f4U^^ǟ6m'Ǵw=GϚFTq;vaQb~^WW:겐B!^mYzzbeׯOHh-!~zRF]?=f8.LݶcǮxxc.$բ3dW0B]] < AscE֊7"Vw>~=y2[JJђxn({+_B-^˗Ƅ=ڴ֭"$`q::}f9*#CĜXmΜ!77WQQ)kz`W[7!п H:v'_[EE!jlwi[ ef?~uA,VcؿkI$R^R}L;>o+$geequumcc3%iiZ%%Uξ: !>“->79;[Cih`tt\\!_elYV@g$IIIx{;wvٲꬬk׶ pLӨ.F­OM'qL>r.CC- U˗uRRGlSLLZ5!$!A^hkDG]\3\l,kAA%$;wc߾3 mm3g|^RwJAچ" kb%/]{:~xȱ"86"c-9jfb@Z\\W^fHk#F -)/9r$#;{')~zee/zz8rπ3ǰm[~[Ʋe99E֋ qGF&1OMW IDAT|U_߄5A/_ :, GPWWTžDB}(wtп|iB>=TEYLlD=w.wQ56wz7VXXNwKK7cQR8Օ |o76[644Th_'LXigۺu Ozܹklz-?p\ZZ}F!Bh3FFT9>cڅ Ǻ?58<ĩc*+_~ޞWU!TSSG&ې6GGgb#xf#>& h2 WUffnvlmm 6|1dZ5֭G/+(ࣼxȱrkD<[%9>LIIUNN@#5PPm!yxF?|/D"IKS[V\cpsH.gf/"^W^^fz~~NoLfm_!`0qKH]]#WV2kByijJKS/cIC l@!~`ݢ,"Ɖ^v?+`#!!n=ʕh_n>'ػċkz0vD­>GSx^_uBJ$I^^ZKB?Hl?X']S5IIq,ƍ@]^H=0e11MMU >X cƘKL~ObE77;<5+ TQ<vVtvݷow=y&n}~R\\CG˗Fee9hpTU{844Ted(,7yq40\z/>EWl/B99iaaycyyM` M__CBb WeDUT33C5kѣBEGhii\::<1lʕE^=gs!]~JJr'Of =Eeǟnhh79]X=,'tt*)edL"dqSS̽[Tuai̐!zϟہ L&))j{HƳgYf~ E$i<#G2-)*z7dj/έȭy,rsO(A[ܨ,x)99ynqsM1A$zu1155u r` mӦcǮTW&%]L^lf),td6蠯[PQQqɉ-kjX65x{oxACC-mm+k>57WlmJڼٿOek% =zxaaׯoٷQRRURRUTwrE&d:g3pprqJJ_vaE^BϝݻO ̈#^1,lnTTJL̉ʗee/?WSSF(mWU=UN&\m[ZnWquCBlq`?jݼyQoO/-,8v͝;vCYX`;]{;"Fܳg9~5@<۲T l}{FСy! =~:ǵeѧOS""֬[SS<[!O_xT_M񒖅ARRfh'>qUǏTyrr(vn)jnn[~w_rr SQQˋL޴)7С7Lla߾*4ФI#SS'|Ҥ(;bի1&&AP=&ޮ|^ޞԃ/YN5c؅ ^H[[ʕbbӵ+rlDǂ"`v}n[bVVVKxnn"JJr(!uz \~H N VQ}had2Y*(,+ iEF&'&^,*:Թg,ݻJ ,/O&HT:zƌ99"Ǐ99EÞ~ W[zѵko_"[ Q~7t#VW=ӳ[:D͊u(f(\ R D tpH._|}Vw=9/JHgT{ taQ % :|sSbI$/߈ېHԬcԵ{O9roݱE;w0%D?734P'.?{66Dr{wU%)93&DM+V 0KBVNn/f^-?4W?gŊ8 .++ (~'BBҮ߻%v.h#81 a G7\ٽԩS732Q.)+4Ʀ{O_u.2'XXXW_ݴQ\[[{tt-{Cg+ ,-}pg |׬q?dAAW!bS_'!zw)+͝}{đƜ-[:+P(u#;1f=EnZ[$%%& oU>+9;[EEtWDut}N b:UUo~mdyyUOpxZ[y.ޱbEN"Q񹉉̼TT}|6XJJcgilaq{c8pn,[X&B…1c;JIٙy^W\\WҚ)+`k!do?LO_|iOlE\&3*50((3%*l3{FK^ψbgdox\]#R44h22nnsLLIIٍPY_rƌ*+Ovt zqw\իw7ov410jɎK#"׮_PP.&&fn5B~'ōihN?}:'(a?hsss X{ƭ_F5(( * -4Zx}845\WLOQUUq" DnhhNJsNE]ol_QQyԵփ=J8Ի?vҝKNޘqwؿ }{WssojkWT$Ԥ88jkkg;$͇SRkk3O_|đ#<R8::9^;vqRGHԔ22b_8^nq\ lK<ɂ@ocQxO礤$߱/_(Gtt 2 I~(""ZChjkk߽ƍ~iHIq!mmW{00VQ&iqq~~NbbH\ic%hǏ_9r6dUBEFttż&HLlLбcW8ಲj>79;[CihೈPUUܷoD25qw=** Uf.!v;DK*66OiMb`յg)jT K۪PBx/|[OIBs7;P\9s%q'<343$d̙T Ϭ mSOߺuB}mA?r.CC-2@D ömiebsr?/_Yy>}s7%{"^xKs|"GYe>=TEYLlD=w.w̽jee&FG)ǟNX gߖRAm;fq8 WUffnvlmm 6|O8@g0!!n$s <ۦ++_~ޞC d*9'HҔIA߹ƍB޽gTs|.ǣ#HD jjd2FCѳu}(WVoO#~uȗ/c*pܾx()rf潄(#WD"ЊvVtvݷowEP&pt 67͍_]BߥISy…S/geKng ǟBeeڏSN#?ڵYY qOa/;q|1MMUiie,<?~Ɯa-*zzpɒ!}$$\xYnKw\އ;Y gV{{GIIUIIUQӃ8pi,Nn#?q$ mK}\ZZ}?HHgk^^yf'&&rȭ8-+͍J9QYjjܲړ߸Q8t@Caʕ{\\))}u"V$^ 6mJ:vJuumRef 6oa 6nsnjii0aDXxl…Szߺ5522Nk89geg?<ث5.n9pr+L?q"|jjSdll~6m bqmmOL??Ǐ OHi/]:A,, ,, 2CC=B22ӵdt}ט9:40а J5ONa×"nMUT"#7mJz "9t ''ٷlX߾s[a#4idj/_eG0z5dT{ <3ɓG>O!l#H miF'濊d'+9'%ezyMd֬ٻ`CaE"b@DԚ5{kj45UCC=g SfA |"#K_xPOөS7UT$S(ݽ--L&w^{B'+ 1M`ά/A$*tp{ tpe$;E\x9kVxqqUkkۀ}.?|W yPɿ9##귳g08:" 8˿ OQ":@@\BY~rrZmjjӛs❞44*wXW 鹱U:,(~ܹ]._4}z( :P(v{Kτdee:~;VWWrpϟBBzP(vlm={U_D"Q;K olsw+ %!a+'7_b8V`nZh?gŊ8 .!~'BBҮ߻%@ց~o [X2O| D*Y?yܮspgSN3__~zk?;p"zntkk-[VVYZر+!6Y&--u~lɂr/ÇCŦkJYYBͭN\|ܹݷGyzn)ڲeС[[ ˻"_7c3[FfOJVQQ){b+ns~S Q.)+4Ʀ{O_u?fwX,+@ť3"ZbE33o));g?#|}.`!9Z2ٳ׷oZlFC͞m=!`0"#uugKJ՝=[Сz3.yZu 7o> .\3fwj5|1-F [x{߾edZreLYY[յ#G2,,|);966^~OPfڏNN\g ŎB327MkDTTMFm}ccszz<))ѣ*+_KΘ6WeɎUUoxbv+Wy͛;MLec҈kc/}} &>dq##m##mssy*<-u'@O yx4\\;".[`uנXPRb?SR6{+AZ[R  ?Y%.;*9A1cS ?As~S d\\ٓ~'3'G<Ǐ::^^MM-ffӦ@} Zщ-CCؓQVv…ͥUUWMb`d1Ymmǎ]RBhݺ_S^""B3gRdǯ:ta;ͭ˖,(_Rr}Cnc|UUgώtNJJy|/D IDATXYy$?ߓ;vaQb~^WW:AB׮76(C2DD"aՕ55U/~P>/_ؗTQQR+,,gπ͛@b)}[J ܿ?>͛Sv -RGH&L^U۱- ` r2#>@fAL?yrk9;YJsI$4cuuo s|"GaGk رCƍ~_v?7^+V27xɶN z*g'+9/.~`0:qZ~SrsO(A? FeeKəܖ.MMijgo|Yw'Yd wGD$>yRs}|6cs>,/܊ڼyQoO/-,8v !A mڔtؕڤˑ˖3w gaaMTVWSS:y2`tt׭Kg:",67**%&De˲#ĉ55u ॥K_~~Yvc]vMM-ޛ+*^>xPP6L^^+9y>K..-zW?$$V 381155uD{ƪM~~ݧxqZWXܲړ߸Q8t@C@߮uY`d?TxLl˖7nS6.Xɓj{ij,~P7錹s7N0",lnpp<6k){oݚL5F㳲 YYY>/oOtt֬GԚ1c…SB^Rk쭩T Ǡnccq?11 &O_xT_MCp+奷mK P$7~R͓Ct,>|SmDB^^\ddMIϟP$_X g֛7gb}7a_DnC'dҤ|iRT1S&8@ 3_&O}t>gÇS(FFK`~z Bc=翊d'+9'%ezyMd}s~S8<u}n[bVVVKxnn"ɲ0sDBj>H%R/^SX(Oԩ**?8F #ɝ{|=?W{P3\)[1X΋0DX+.**^Κ^\\6`@ 8 DTrz)p3D?s?G('.\ R D tpH.)":@@\ R D tpH.)"@$H:w.Bc$귎 Q":@@\ R D tpH.)":@@\ R D tpH.@tz{{G{{X[/&Æ8LRvX&tpF͑#F;JJҚ9{vD^^13Dus+*/^Ŧ=ŦG x /!a+!a[_QLl\^4[{nii~nˌB dD-Lu-{BHLLLR۔Y;w.]hP FG+^C3HB FsskMM]MMիٓ~uu%$8tWK^7qe,.8ۃH$x싓 cm@45eܸC]]N/]ѣg22]ѣSV7o>`mi̒oj:ڵ))Wǎ]0Lg:trb7tÇ/ڿ,2VBKM$SEEG⣨8I\F^jYx966z=:g>FHTU)ؓ$U\7<ӧsqӧEV1Ό֋dg+'Ofs c Y?~SJFF$7;m8x22zٛyGGWWHM77.^wog9sx+;nn#@;C0rBlѣuugKKO6O))Wt^\ZZ@\ ^"bSn"5vX"//3[:t!$%%AHR(^N!ű)RRB塡5dGhB!!fώ~abԒ[e8/;wFt~ܹ6l8\lQ~M"!QƦ[X :P__!tf+'RSSu%…d^*/EE>}>ݞVUxӾQv|Lv%Kvp,DRRLy|CPRR5oަ?75:uJ 3ϺOm99EgG`u&ztpUt:!4z m3)GSSuҤ&TV6t:Kk7o>嗁/^(,<[ DG@z޺++kUByؖ5Ϟs yƎ[,DVV{L3g6a#G26)wMMulmAa=7o?BNJI$(e,s>}0>thSrrb?|8`d 9k=nhhz5ĜXڶuk*oBM4*/R|17+$񦫪$'g"F<q++SHjݺ;wACCsffg7B=z,::3X ~@cpQT9.C$824¾utbS>|-..Y2]II!$&&-vN My/çxCKKsBD"᧢Y<~g^3O|sAA3\’3gn1 UU)S{MLtԔjk?ᯨ(khEZ,[6gQK__KFZ%%U=ιs;gۊ!<='$$\@>6[[IMkk1 6ݎ/'>sVDDb'!vdРw ||BxԔ:Q=:t CCm111:~VNO޸A k[227>5hj"Z^B 'ӧ50b7vFMM8*|}BVVO,[[hGbҤee/=sz!B^RK< ƙ3ť߽[R^^WW|r{{.mO:T|ĵO @/M/7e‹ƞ41 &8 |qq199ix Fj2ESZ#k,ف8_/\:!$&&6oD~*prZ_㔡CbooOknnmhh޵2 KKck)|Vطtd|fj@ ;gbo֭9a8|"HK@w 4ZZ>nsF[ uR$㚚ZH߂WcR!Ikk WZZD{6{5v￳y&FXkX G{yҘg`f{ovNwtГ.D2pV@ԶraO­gp.qqˊ?߽T\\:,֎۹s)N^x{\.Bhj7nS<<죣Sk;{yl33ӛ>} MhiZ5{Ӧ;w55g{ccgĜ8t;%FFڵKՕhh6lj@4LӃSS57|az_s?!C cݻ___@YY!icnAIZZz^!!A? +.+{1lW7},c_̖$ fͲƞt&$/omѣϜ`0|i$&,l4tk2\ݻ6:t `hh̚es.>WV׭[/׏L$bŬ׷y~FPkr2YnEe5c CP sLMM]^^qMMVrzz>?2X^>6]Fut$IJJoTyll`^]\Ƶudd={Btqw& dd}j·޹sP!!de{V{_m:t۷kMMu6o?zt@v[0MIIӧ1c̢CW/)))a'D &Iêǀ2C##[Pby"d^KZyꝢ,֝e0$$ȯ_,210D v=##!dt\gѢ#K?xPYV!. [@ς.@ܿ_v]NN)4[:@TΝ/_奩T ]]mu\G<tO( ` Q BD"q&3OC@}\ \q ~>.tpDDž. L}\%3тY?/OA@&AW8_('`0w*+O&[v@ .Dė/hkkwoy!|?;wLW/)! 8z4_? -򥒒رCe$[8:@Dť9-\8%>4C[ FddlI񺺳RB\]#,gJ"Q_x a! 1l[99E?;w.RZv|{n]Btt޽+gg??kccuRR¨T_Ww\'x |ҝFii!\\ť mkk9fۜ9BnnvR֮ Ż+h=`~xuuҲ-h3gn_BecS~uȗ//+~p? --m}g}7\C``R`0.OLMown_Y^7ncM~PNNZW_ tp_Ӟ_Qػx3 cKʖ%(nҪ;m榢[iQ.MVm*um*BІKhAd͜|-cȒyAp \ /PUUqȕׯ?E+`5""Ԏ+Ç Yf>/))_AQq<۳KZz[qvV>z*YΦ^}ɴg2*Pnl%$Fq{ ._NWB$u77H2v 9#dYXNQ@z=yh4#/ԩ?X;;G$u6bbvx$FyH@deeu~~Q~~QL{]MEE:N:`߿:P`OP;i} 72ߩ N DVv,a9u0ңX,3G^klPPTÞɴ߲%Z*#3 8'yrrct;6{Ǚ3v$$F hMM5lmAp&G[# C۽xݘ^Zz)11daycqFG'[[{c ;EVV MhwkWqqSy11$rߑp]2d( s"L*d0 haee=Ȍ6mӑ#W^lBBFRw_6ډÇ99EEj2t={/]8oVzaCXJJ۷ũ  4Lp;IKd_ [kb6[ lll jkyaaW@\bXbL) *g1{PWW?~]_^^ WwqKHxKVEEUBj+C w/XҲjjY6ѳ(*@LOWW }\^^ie5`ܸyʕFkhհ}OO.;O-:y& n^gRgn:bcz ?Gʎ?kfS j*̗A$thsV Y%x|˖7okrrtϞ ._׺u:T%!-9Zmݑee,^8E"ڃMM()M l'}/]J45uןj^%%9bd*~Y^=_#x%EVKj СF+Ƙz aQSS;d*G޺lbww))YZZn= ݸ]^^=| ^|t|}]Ͼ-[7m:xd*k#G~quI/q]T JJ>UVVرѣ-Zkoo?\\_|wcps-Hw<l33K={C  ܏ꇂh*FM\yVQrr{uuaa> ]ʋvƎN͝+7 aL -FاO0jԐ $;և?v[!D޽ccw-9{ᘒun=dK.55 ljLpq8CQ뫛V/ :=xdyyhT{24}Ӧ6SUU3++#OuueWב@ܮȄ͛=nEMz6Us͛33_^x$I%% t` ;PKYYdȐrr@/)6%LwR;xp?}}̗G+{gbOuW 1 ?m');A?|ȡnlG݌&B&a>PP }} y_OVے:PWZYMM ۩7'%ŢP@G4/kꪒ$Ʀajظ $))nmXGwNN>IL&?<))#;;'$<Ϛn>=/kן/'ji1rr`T;j&`-13oѢ<}ǯ_xG]݉$O܁m Bs.BEYY>994 `$IUUũSݶ7sg$ ]LbԸB --/۾CŋQQrr 3&5''HYY"}}::> dk`m>U.%ں9} řzpL&%ߚ.6[ɶ6::寿XbNN/RHiPu.] 3\]GJKKdeի[{.73+,U֭ WwoUْO?wvPqs{wENQ(8EA5PC\phoQLp=K !BLpB!%;=p #3z\IYfw067͛ Yb9X/jjl)S8 ~ aaWF"ޡk>~֬\=p`&Xd,I.\8^p0B6NQ@!P({7F_~>{v`m-NMdïɽq#KRR,.#G-X0޾-v-P[۰pP"''[P9p`kvv^߾jY:8B.DJ(woŚ/ee7yx͖ 8.%~6g;wegeeg޼q֬jAp \ /[fQ.B!$:^$I$nj65ML Ta2~_|*kk>r:}~ݼdg7 fQ.B!DGaᇜKL&RSK ={Աcə=={U[^^&22AM4OǵYԆ0E!PP`++GF&$Y[[ӧu+̚5ի~nb3p`_w_xy6 ssrJ++ӢfQ!B9e3޼y_3P={Nt)M_ƪU{݄MM()M *8Em - Y8 A&E;L8q!BLpB!H!BLpB!H!BLpB!H!x<ޗ/_ ApSmE8^- !mvoƥ㳯cCu "Ԏ+Ç Yf>/))_AQqLSS$.d,, Ξ8tƦϿ~?~ۏՕHMͦ5dT /]] I2=֭@4Jv-=oL99=>]|u4u-aL0@LOAAF]h33_ΞP\[i6VWܾů7r`7U~Jb6{\~9p뜝m;ʕ5}ʨۆ]_ȑsϛÇC 0E]dex0tll7O55c-ǎTPiDx<yVAAAcJJ֫W[AΤ|wAAgΝݱ;WrM~lUU͑#<~s5]))~BCgg8qb/P9DZc-ĉ 72Ҳ} nnc ptz]ogo0o.)맟@A6]&&:nʘO}; #VhtR^xs0v˗Ϟ3g4HIWk6? ٵkɲeN ~MI٧*.4ϟ?W޸T\|q~ERS JZSWNzG>=٣_2^^Sdf;w̌O+^v/+յk.\5::yʔ {wweeQՂ#C׮}ʕYY/up.B5ǔ1\FSkiJJJ 2sOFUw/J7m:iQ~;UU5>2TWWvu A뉌Lؼo~]7mS==ܼy?..=3ŋwHTR0Z*L7 ְ J Y('' lSt*սW|0n{2ŞNÇ@bss}ZSd[BJEۿL7o PVo6JJ*Ə E&{zroH9}:Ҳ?U$ fp|{*36WW -rr VfgYvAx<ޝ;x<7>5j[RRԛjjJ?&--5Y*-'N]tEQVOܶт$%Y^^yy%8zƎW-;;o߾qq0s1oAŋw}qz?4sf \EMNvEii+Og6z]`:ms@6K.4ϲRt$(ԉTUG\9lСF O/.D}TJ11QQQPSSObSSEIɧ?Κ0kV@ݍbUE '']qq>>@f-L;i>>jQov<[YYsݑ]&,, bTCPْ Ӎ\d~Mwzfٮ#mmflX?_ u'p#qY6 IDATWUU{2Tǔ|U4eO11;^ذa6ܿouuMSA /+5I]4p Jў?Kb;l5xp?ӧZ8~D fY߸ Hd9#dYX$nji!UUI2vT-MϯG+>$ &/Mس缂81wJh4,14#L#yy.%^̜9J7KJjSbXgdZSWWf޻6|*wɒ]t ,쪡gbIkР|cffTy1[[jav_?-''M%vVVFTSF>]ic-,ܩKLLtNldq62=q P PM)$IIqkϲ Id'?88@vvOݸ0קOŋ'ˉZZ.}N SQRY߸ H\|Rϴ.@aᇜKԔVL-//CuQ"^哓CIIHTUU:Νm{\ii;wv{xL`zz+VL)9_km=r :b>t _xu+''0oiZsr⸺/JJ/W_ NN߆SRR,c'B\٫W48xiR^ b%lkjjS.%d{b ԯFX5Xҥ@eRWpu)--WnuWfLëWFFZ[.<~|M"f._V֫ RR޾-NMNHx@UP`++GF&P?^ӧ-mw_xy~B|BL 2@pٳee^SR @pۻ#[4/poAYY);;߼y/++eg7Ig`:L``|{tllgaa5+7"#>xC4&\ц ng;}:ٸ蔏?];sӦy#|-a!SB 558$wupBu&(8+p!Q=:~vqH.B!)"B! .B!)"B! .B!)"B5xhmOobtv!B)W׀ۻY++m \B֨cISsnv( BK:v,z@7AFf۷@d``pmmmNisrڰreiQ^*ݼyȐ,Я̈mۉףn 8{^ryxkԨ*gg0?Sb ;A6l) T"Bٵϕ+̟0˗ڸZ_8((b߾,XrZQQ7m{f5 vʉ̟x:K,#ApSn];ӵFp fZ ڛ"\Bu1 Vt^̉*W/;vӦ rslvj͚  ZL&':;JJ*Ə 馠충 k.xN`w B}]Rio* 3ɧO幹?U/RP`|)+PUUr9rd ޺ַZمm;!B5.jz3o1bpJJA0s^q[1 \Bu1ZZeSkkOťHjknMss+/] v%Nxͤrr>| 7-p.Bmtv!]0ufy{0>zҥ܀ڽǧX1ڔW'OttAMM͛  4E99rr,XGnݡڽSR9le2T&<=BӓfKYoPKl~ ?9/?HMMEpSRR dewXD-rw`9!!.pxBK_?%KßTm.zAs Bqdlg=\B!$RpBm5!Q "FB" "EK) !BH`B!D &!BH`B!D &!BH`B!D &!BH`Bʕ$lqqcݼyȐ,Я̺P7z@!PSYY5T 3fkhXZ//8q'Oc22^\Bu=&{zroH9}:ҲIIYYYV::@UUbD\Bu=yޡşH''[PUUr9raC7\E "B!Iro:RUu$cN9#dYXhQ!B]LaᇜKL&RSV07_ҥ@i\0Q!B][YY>22$Z>ͧeeڰ!,%%섄-x8!B] A?sfNe割Rvv&MfJIRR2CC/|rp0߱cQgNj:A `W02^x<.*o?23KI>zm+7~/0`) !CcĆOqqKJWPTOF_ң܊J^^!U3d ߫^}ɴg2*Pnl%$Fq{ n]^,ڵ?쬐B NQ@z=yh4#/ԩ?X;;GMkŊ11;x~<[d ?ϊ芊}VPk,J޿Ǐ_nzHUhX" kk/}Lnd4SN6lXNSsƍaEaaW-,ܥGXff ְ٠Mͩ =ieK8TFf4Ap&N\AA&&vl++3gbyIH:tQњkؾ6()MGN{]K1''Rbb =F㌎N`0v㭬<"# JK˩&1bbI#Mm&TZԓ^z6o_5E*J};0@$/}5o],-[~Z^XgXb,u`0T8͏_߃ \JXz_Bƒ/_j **P\2gN{:SSg ?VG-_ @QQVOOgO|ffzjpJ+,w#' W$4ZCC{zrܹxjɓ7`p3MM8͖08{vСF?֫VXaշo?RWWvtA__#55hvWS1dftu $G{?|[B]evϛ599SNNgOs/k:M*J0J>At"8EvСF41/__W?o˖M.^<ȑ_\]G$K!j1>~U'4tÇOÆ-)**=v,zhE{Z*zy~h/ݽ~K7Ý; 55LgPaa> jtӟ?W޺leeia^]]}{DXB oŻ;c-~isn9|Jx /)>5Æ'g?Y1bb0J>sqS7l BKc .ibD#MLt@KURRRVPA]x h4ڽ{TiM۩y𙕕H ?]OddǞ?[뢦wh9qq陙//^C܄ VRaQlh,_PP2dB99i}}ugהftuU|s1<))qAAɓQ((r#|ਜ਼62Z`$+8/KagX˾}ղ3gi$I^xzojڷaxII!!!Qə99IIIIׯO3j@Ũ ԽjꀬKA%R :`gBPу=q5/^8}|BF͞=Zvbc}}-:߹leeϕwGw~0_߽ǏB!C Ԝ͖ \@VndTLGQo֯:v`q'av_ %KuPg~׍|UU5?~w/]OMupLO*ز姘/_Fl0 *993^_3lYY)x-56y\B鿩YX4XzQV*>oYǣI>7m>Moi5#/9`kjF%}i$/ҥDT̙#"rr$IRO:'4 uuU\Nܻ6EOO͛b745U.ώg®޻ٯFAAIJJM5A17_h$*xޡIIWVV B?s3gA귄Q݇s Ӎ|ibs了aO5uuUIbcа5lTB^;''$I&`gnIgnOO޵˗\990u5UdTff-=T|߸;szw)񴈫k@YY++ϝ\ڋ|rrh@33=))ISݹmo+--qnI:: COO}Ŋqq;{66/ eq8@EEN#Iу}zJigK{.P$l9ożB55%w +VLfph4ʩS1%%,,+S[3e%Kŋ'cvP%''}D<fXpB[+ x 0t7JJrvb?W \CC9>>=''_NNZZZ/RP`++GF&XYxߑO jm'uS"BK*((8n}:MMիSccӜ6$&Py1}ZY-1 n7GRR_)z{4=۷Gx<]]UGǡ¬`9m 3<+>qQߢ\:qT#'.spB!H!BQph) qV3h3"B! .B!)"B! .B!)"B:{6 8j{"B!EB!} )Bߕ+W~xzӪ}}kg:9Ru4MSSԩO|ՕzC.WTT5ެSwBkJZځ̣s玙1?1 iTm%%ܓoF,XUv큽{/߿2+븽ٚ5:)|ԾIfdB5囟dӷڎ}s~jѹs~<OAaܺuVt͙vVQO2) Bm$]Zvvwh||zq'j?EUWP`|)+xb04 ڑa .Bm[ $Icx&&hj0 gg/_+ L:PL !фspB!~_d2 55ٵ{IIӟKr1Jy0E!PVVL I~O]d,Z4˗ %%K,82B.9cDYY);A&sݼwݻ++ZkJZځ̣s玙1?1I,&!CcĆOqqKJWPTOF_ң܊J^^!U3d ߫^}ɴg2*Pnl%$Fq{5/ۻ>jJIL(# ?vbTH$iizϟ+|ٱ/L6m>>Ӷo~lqq$F+͘|: AVrK&3Ld3y0mZZ<=#F>;ctv[['OFc:K~ybgHbŘ<ImR+$YYY__sިk~SQ޲Ww*$?hff:& }^=+'6m/}SVV1l M֭;ZOOcbC_())*RP[Gfvvwh||zq'j΃m j@/}5}.Z4bEEt|.ydɮǏ@~ YFN +޺аDԿ~ObbÍfS8u*fذ%c ;Mͩ7]pb9-8zZf"452L-R8q E̓K۱c<Μcg%!1bEFkj:ann4?I:ŋw-ƜK!'3::ڃ`)*Lh*F+--^|O;΋/o&Ap?84݆8t! FIH06e"P',Eշv2/_2r`ҝ.#'MZ[TTzT qqkkW,xb6o}{˗_?G9I$IMCdԩv0c n"I|쫁?? tuUwZfK-?@m-/, 3Y,1KU`ЩjNXJK=`?~//ի%$./0nrw]|u4u4ÇcǢW/eF4Ɇ&rUpNG..~܊u WgD[D||:$..]FFR[lCNNҥ\]]U{;55[D\EVKCQ(66ԛ'O^ӎرcZ*(4U"<u+ƍEP\1%%ի[OAzyyg}{nE廠3z؝VMG?~oȑ_??GϚup|}˳O8v܎ʄZkO͙ Tw>7ҍA8:@oسgo0o{wU{v\@DA-A_dX>K%%BSD- AeIPQ@(@Gdӹ?݇`d?.9{˹ O,X ) Ri-*66= 8ݼ9J>/SP֭s͛yysL өaJ4o Z23 Gw::ZD/,JٻUOE:]X\VNK)))o HGDL;S׭ϷnKNJ5TwZnFGcK>_-j+65O5I.wR %llXEeaћ?()du!"DKNbe5{׬+S]]{j=g<q'LE7p?6?~ۥM_h:wYY7y\^uҨZ$YPL.tfR']VV}Xz`ccuf3ٿ3o~ bk*gRXn] {VV}XKI"s_&"''+!$cc܊q_yew%-}6GWWBJMM{^rE*8t_߭Ɠvsw[[sTѣDZiUU5ښSSCg\O5C׮zleCCCҥ. MCR֍CxjmK[H$3g6~oTg[Vz}ժׅ/r'cۣG;^ҐՍ( &Mr%"? Vq_^*$'..}U'bϫ)mqvfUUTTTm~]6͞bp[Vl~LXx:6̖g/7-4աLVW T6>xx7AeeU쟈8[_Dk׉KnP ^յW$'gN1[ ; ITVVK$܆ bcoތDt ABJT_v-6 4f\~~1=r\ɩoD>x a߾Ç6X44㍱Dtvk} E%m;Y\43 3`ǎcǥRGD$Hj]?u:),sE"ZꍦZf[k׉ݻg)=ON45fmme}O077y 199k%%婩&&F3gmClcȐ=/ eBreHRRfd䙪u._gGDsLXz7[sQ`ez/-?j8ʪS\\:cM&]]-WW?Krsxɤ⇱c$%e+WYׯߔ[SS[DDӧիɠ „^#Iy?KlӆA}u^xh/F))!wvyOӧ'&noIL;9TCSSjmm{㷪y/ _Jp7+_|ѮEG;\޼>>v+**MJ,**1 W ֶoq]OO[7ob8NKKֻwwi۶wv MP[m㘘'.hkkzyEGS 'OG3^__';V׮WwߐwyVƍ E``u׮ufP(tt,}}''$l'@2p8kyt={~={}׮zopvOlm,Q18x06**>&&xaAZZnTTZZc^ qc p…4uƧ [8D *f݀յgΤqglltowޯKU6G"H=U\\%kp!"qU53qqS(Z  xݻ;ODVV} h( NJHKK)NJ5XK_O.==wVV}RkN*"ٹsW=zlggQYY}3g}rrr|sڵ6##oG=zt6իk4)]p*^yEcc /O~!Y4wQi#Gβ]LDc84KZZ2m>9ҞFW2̌'N|ƦoZZ;LiJT YY7}|q˿N)Jy˖m;wcJJ~^ݮ^m>>_?,ؼlBGEE99/,X(N^P"]4v}MՌi_WڨQlu159sDn]jQB?退DTVv?55֭օ._]\|dDthjqq[W&5k޿_!t[]]gdd|uϞ JM ݴi,ٿGXm1-vooo1BBca_p|4r7ql;--޼لqXتc&$l+/?`+D4HrtTzꊊ$$l8v(eLA[&"O7oFE̙3Of )MҼ5naUY˝X3iV%'g_cmGD޸qk`1czHY3ž}d$*P::m;9o^RRpp񔔬ܢ̤̟~JP6."J5n+uwɢ_5aѭ[lm{V\\ \D2z~׮xx7AeeU쟈8[_Dk׉KnP ^յW$'gN1[ ; ITVVK$܆ bcoތDt 6=4HegJI"[D4hP]ݵ#G5Jϰ>|mIV={9/w''+CC}kvϞ933cjku~>g/[6M+>4D"9t(.8x"V .@{ ^YYcDZRFm#"H$_}ή:9y"ZFS-f -ڵ=OwOL޶wsRoU_"JOϕJ56o~W]AAssFv\uyy}|wWTTYTTjccsW򝗗mV_oY0k;oVqwrӶm$%>>]//11'N\r^:H5 7,l,O\/F3}|dgݻڵQnΝ?o*ظq}(BՄ}ح /mku~ڊ!|-iF>w`몪?Yé )0) #>ڳٳwwa]]9hy6F(<JD~~SP<˰D --7**ޚzOg K: (n@+<7ՂuQA D. \ *(p@TPQA D. \ *@,8ygGD(pwvPK@TP`@[Ύ9 h#|\Sw IDATgGx a \ *(p@TPQA D. \ *(p@TPQA ژBxG/ɇ NT?}(j \m6UC Ў>Z>|ذ/kj13YRRp@r\K_%52cg-wXKFFkY09UgLLR{=z +==Acmm}:9͍$0c. i꼍OPO%q2Q=T /<߽իkϜI8ʕ޽_P cmRD"J5BC{LKK0-t<w;vѨQ6, Ǐaa?L[[S[[S&"jƿP\zzջH׮OÇUDshPggk++S"pÇU../ʋƆ^^CRKhN%{Geƌq677iidzÇFE}:r=ťˍݹ端'$dOMߴv n8˗0aի?Sg ->wƔ,CC^];||LSCYDZyلJsr -_~y8Wkaѻo_RoI~$ixy=xPc1BiA"9s:mumh7 i/m(qz:9[.MOϟvt@@b"*+}Vƍh`C/..>yb"y󏀀CDzOb+Vxњ5{߯ݳG22yͺgnڴBB߿@uۘFGLD!!߱/\FDy>I98E`o^l8,lձckX"Rt9:Z*=uEEUll{qWSSysdW}^[爛7#"̙@DSSÔ&_iyي,VN̙ j6ɏX AA#"boܸ5x1꼱@\\`bsU vؘ¢7k)/PRnOM12BD5kYW觺<{x"8Nnsm~~q۷Kt6uNK񗳲nFG'<߳kQI066*))6l\>hivN:,+f u3ٿ||Dt!ClaM%_LfgΤNDnnf- 55Wk8:Z?ԩDD+VPvF Zh?(pڅM_DP(3 0{lݭ\zz:l޽ SӞDߏf!"Ɠ^)SF+PuW:oޗDb?+Kn+,STGۀMsr CC/ѬY45hщlɩ𒒂d%%e&%eS/tT.v]KŽ{EJ lQ5ի[qq+p%ю^v+c t@~V>u*ênTy%*Ocܶ$+^Ϟ>5egϏDdi1v:?sw泗-&TO\43 3`ǎcǥRGD$Hj]?u:),sE"ZꍦZf[k׉ݻyM98XN2SXnLSi֦^fksswW`ࡰ [RRmbb4sئ:6 ojsɬQ(+W$%eFFQ֬qD4g΄իw%\\mm7GNVVkݻ1pUt"Ǧ RMZ~~|nnю+W7//]J2Jml?|BBrm?kfm͛9Ғ].wڶ흤Gg`V[8&&ĉ ښ^^nTbɓgξջwk:ݲ7$d;޺Ubooq}>lQ E-[7A‡_ۊ13qJ?L D㈏ q]ݾ}XWWPׁ)a% FEĤT2,Q1HKˍy&^@g% ↛kgqhy6F fp@TPQA D. \ *(p@TPQA D. N \ *X8#,qhk(p?OhXD. \ *(p@TPQA D. \ *(p@TP6P(=zcq!CSmE8A-J}>rOxuN3 .@;zja9lgII=zqr/}<ˌa-ye€G&<</Q"qgj:cΝUW>=A>m@PK/ob2Y&~~F'FahjhÆp{_:1BPr7ׯD"Ԕމ%o=l{`,\.6>_?lB=tt98; RDPQ'K=<ﮪ,7?٫ #uuOQi齈XkZZc]]}o1R9H$RFhh> {OiibTĤH$n'gqy̦q|ܸ-<^}5rcU ?="5aÆD","ҒikkjkkduSR KO]zUTڵS?~wy{vܕGYTVV;wY`9b7\v[|Q]z lmeeJD.\{W^y011~HjivvݩDTZzȑlׁ?ј1&-͒@opۨOG'W2̌'N|ƦoZZ;LiJT YY7}|q˿N)Jy˖m;wcJJ~^ݮ^m>>_?Ҭ?|1DԻwu,T#.& 5ʁm\^N?===Gxz֭KS-S(緝>fߺUq"<غ˻l޼n# ^퓘=.nDf+nk ?`q񑌌o|nٳA6-"99(07:zX%Ԣhq($; ׈h<'I#q'ȶrM:vlmB¶ BDJT.GGK ~}OB6jjj7oua"qfd^^Ĝ9(PV=t"v-? `qYY4 8--ٌ9cqc878F^f}UU҃c%8)xNr` vؘ¢7k)/PRnOM12BD5kYW觺<{x"8Nnsm~~q۷Kt6uNK񗳲nFG'<߳kQI066*))6l\>hivN:,+f u3ٿ||Dt!ClaM%_L ֭u^^qYjeՇ[OfEDRFSm}.5Y&,U\`_TشmmMw3gݿ]E׮zleCCCҥ. MCj*cjaV>u*ênTyUި򊊺7n4\4 KE&Qnn_8/ZBDd >q⪉WՔ8;[[j**o?.fO1|-+bo?&ܴefˊ 糗VV}P&+5Ocd ^W Meucqw̦-&fG^^_":| /Ԅ\43 3`ǎcǥRGD$Hj]?u:),sE"ZꍦZf[k׉ݻyZ98XN2x u''gN62[۾Oο5`@ߒl36աM_1d|SӞOfEBX2$))32LUU:ff#9s&^-bok9ru(z_0޽߯ߌͭ<ť]?6mTjru|.7yL*,~;vHRRfNN! xro5{~zM :-,55ED4};[ꪚ: -LHȈIy92Xư %%]6Gy_mccܸysƍ->r}S  aOO>}zLm?W__'1qdKR MM{Mߪ=/x+<| D+jm_|Er*zU4)),<#K^-$;//7[۾v==mav޼8--YrmIJ)|4A}^^ncbRONuj0oX*V:8X<^gξջwk:ݲ7$d;޺Ubooq}>lQ*mݵ}7Aݺ( -K_ չVPVauْ^ills>?8˪Iq8:;={~={}׮zopہ?E;г1DبT"Y% iiQQ<Ͽի}:;LXQDAps Zٸ_<0Ɛ . \ *(p@TPQA D. \ *(p@TPQvvb;; B 6x#:XDKuvuM .@:;3 K@TPQA D. \ *(p@TPQA D. \ ţG=z[\]}9N>dv꿭A6EPOS I.hGV_>lB55ǘM,))S8GW9Ng13;%##,\Wd2ǃ4J$n::LMzx,۹ڧ'ȧ (}~zML&d/Ϟ?/Ĩ! M17m.|o>K'FvvURR|"H$;q_}'uvmǏxcllBK$\2 IDAT xPgΤ/55e|Kc{qӥRcÆpK '4C" ttkh詡n`𲋋CqB?Kutƍh6޼/9N޳klmG9N^PGKӘ~ɋLMD/:cƧJ㌉Iqu50xY*uUߣG5t6Sp`X'fq|?p!M)a齤3_&:\$18=}wUULEŏeea^ŰoO?ﭫ;~JKEDZ[ꛝ}K͌1D"J5BC{LKK0-t0w;vѨQ6, Ǐaa?L[[S[[S&"jƿM\zzջH׮OÇUDshPggk++S"pÇU../ʋƆ^^CRKhN%{Geƌq677iidzÇFE}:r=ť7~ΟꟐaffrVD{4|5W48vvF%%Æ-44Է1-]:ٮIUޡCؘeel\aNrr&7Аo.^>d ;䫟I!cݺuqv+.+ߢP엒EDsLDNNVBHFJ3nrN&"Zb[5Jh@;A .llJ$BP(IܳgnhVaU$"pu~6` ~i7NN2f]1Ɔ#ry$"_^t[a՟:<=GoSfDu*ênTyU*:uІD]tn0i+3>U!D$HfϞN?qq'8q{^Mi5غ5jiÇ۲۷nڲ· eń {{ +>Mu(Օ'Ued䱍?3mPYչ|5'",uҥTo}FAuuəS~̖:NB aÂ7#?d6]t ՗}Yd Yٗ_&&9lr:t+.[L&?;$))3'pȐ<_Ϛ=o~ޚ"">ݝ-uUML&$dĤL|zW MeucX@(%%dݺzz'jhjJ{oz|V5[]]_ \TCxn淿z/?~>7hhǕ+_Wћg|׮zEEIIEE66fYZ>wo!!yym6i Mluiiz.;mNRN 30r}zmmM//uTӀ}Vh3}|dgݻڵQnΝ?o*ظq}(B ۠n  䄄\E+X+0qXA8NIHpqО=?ΞkW۷jwv8M~vgcaQQ11D7- K@ ry뭉Wtv8ЙD`ٸG2)a\ *(p@TPQA D. \ *(p@TPQA "Ăwv@m|gGuDD. (尸@P>#% *(p@TPQA D. \ *(p@TPQA D. \hc ѣǏ=V-'2d~;VԏS ٢Ty'mN=|X~}a ^cf6L=^8җKjeƌ[ ﰖ<ֲpa@_Us#ydT(35l磌k ֧P(9:'yLvu]>gr7ׯD"Ԕމ%o=l{U0ہ8/ѾY(UO./9{6HP,YtZ> }+8xk{7M+?иEM-[9~3iG/S*u77a®_Xg{jm@@tC&ذnK '4C" ttkh詡n`wqM]iP+AP@AQA'@EjժUqm+Ôv׊UuZ[ hEJZZ\'C! ܛs{o_!C曛0`VzyMԩpc7478ѐ7ilUc.D "+W~?_Z…YF6+VJǚ su><=#^(p#KztY"rr~}Xz:Ԩcc)bk155n1x*"bSWڵ1c?}ZND[CB&'_qss(+HN>ѓ'JMpׯgFFo\|gnn,\QΝ۱^zx{;;9מ>-{ڤd/9~\h?o"w3lӞ=h0n:56KVV__5`;%&^x:ݽϝ˒Jmdyl7AjMrr <ʏF-V?ƂLYcccٹs̟.LXQ{]Cbݹ̙+RbjjuvPmpՎm~"4dhj pm@cg1 _@@vj1Z͟=ԩYD[׬CD{;re۝;"#gQA/QQ("B)1q݇Ѳe_WI.muuM&n:dku:A#.@E"ZNIR՚I3g]ٳO7Dbޔ>HD>+--{*"k?)4G\f7]16#zǩS?!"??i^0?ca]Omz+ܲHR"8qZ#)콗W)чrT"2[>y2-m0]߫Z jT,,z_`_eQQo//w߳g7'&kڈ .@Kmr4oogČ];7$%eS><%e٣_LLk+V)_47EFEݼy*UѠA{ip\im-)*Tfݓɤqq9:SL]]|gfvԺ8SS.]^7U*7kMPEpપ'ҏ=off<ȑ4}ll[x*h湹ti|4丟~:;&fݻo*vwwXfƮ]lTz,_nH= c[۶o韜-\\w guhˆ >L Ol vvҤU֒۷0kp@;ey{;7^eqrX~sr|,Q!ػ7a'҉(44- K@22T'<Z(# DX. \ ((p@PPA/'|P@k K@PPAA .43Z]]]S]]cGgsgZ \ ٨Txs֊/ \iUq}ΰ0tlHR2[Cs\/e#wYKV 2cFTUCxǏ@k( 67ag7f7]QQ6M&Y23m}aρzN\R\\2xH$ ~eB|| sf|l~<Ԩj5/qR<_^^YTt^B¥͛:ujK'Ks8JL&D7n|/@D}1K/:Ao٬YKK|3Ydd$ʊee'Nl>9:zk)/?;w''o`o7nkukkZOڵudl,vs랐V=ae%12wZdfa}J$fƽ{;&M3;DZ. 'FFpD6m, p_Rt)Dԡ5K'n0D"Q~ƦQ+-=vB˽wicad$jj Rkbt_~bobbxt&W2 |qiNmO 333W_SdCJf4kpP:7/5D9yG%"'ׇZYIh@իQM:68?"SSf/""99u]3fӧD5$dir77#|=yl~zfdw6+…qu`,ܹkի?r?W_{MJJVpǕ͡~!{J86s gIDAT ֭Scdjjle%uݿ_Qbe6Yݻ_=ܹ,60Lfvt!'@XqW8jԢ̟jqZcWcMSIK˱ܹ]fO ~PXu*m6j:3""KCDaa[V[ VQEEՎP(F<_]]qDtzKKsOLv>|\RkyyAs+ݹĨQvX u:ӗbb ZP׈hԀߓFdQFFs7n̖ƆP\\BDԚ.~ٍ~~ii9UVVEFƆivк@q7Y+" w ##;޾x\ܩ$ FeR*߂~z.Y2TN ^f(p^hr\E\M2]̥<..f gCCڶmCD"햚e˾X M?U7صl"JmDqf*<{O]{v7oӗ9|ǎ6oǶF'ֶmqqI߾3ll,e2\ː5ɩ+Ko>.24' ##hHMfiHP##)#o?ND.\ߨLdR%%:0~eEd"HVdj$3.٭%<*-}bgב>|V֙ÓHV_k}EIA֠A=zb7[LNܧM{lw? Ju./p˖#IIWh&&kG^^=ꇧTFGGNKQl2tXlk[V?KEi΢_?Z lTu9u*ήcUU!Ϟ\(fҤ8jk|ӟTLJCD"hҤQx900,00=Aku+<)ߴ7<++b6m::וVVVMcYqySV fI {=x!o`Dqܜ9#[^Z@Qѣ'c,fKr:B$V ~ɒIDtU4\n"JKͽEDz=%D̓8`rjDž{~zص``ʤ+jkJJ78Zz3-%:z~v웟}v(:XlTUUMD"hÆ9nn 餰c(,-]-'Wn=m7R"p !R? YrwjjXgg~jTTnڵbcMMqq/..IOԩ uu(ٳ7>>:Κ54jzѢ2;>JCN'NAD'-9rCҨt<u>gnNN]y/[w6m+HYX::RG+իv944h悃CX*"qㆰ5*Æ-,Q`ӟpPfpZm۴+y{;K$fAiii{K˗OAC駳cbz{;߽֭bww5kfFEh[׮?~\ֽ{i^;y2MT-=~e5aY4i}AI%oeaa@ka XBwoI'NQhh[(ddOyw#"&,Qx^DAذD% \ ((p@PPAA . \ ((p@PPAA <18j֎ ?l^z@ % ((p@PD9` .%L \f'vK@PPAA . \ ((p@PPAA . \juuuMuuqri-s1O ͚5'9IFFXO,/?YVvĖ-ﳝs?ݻG;c??߳KKȯztY"rr~}Xz:Ԩcc)bk155nax*"bSWڵ1c?}ZND[CB&'_qss(+HN>ѓ'JMpׯgFFo\|gnn,\QΝ۱^zx{;;9מ>-{ڤd/9~\h?o"w3lӞ=h0n:56KVV__5`;%&^x:ݽϝ˒Jmdyl7AjMrr <ʏF-eSq5,4eʚΝefpg Ŋ*RQQU^^^<ӄL?S?ٴ%WCCk=n/!S0iU:tV./wܹM,Qhj p=9p{sMCЏڵkpj5FOO͛~ィ:8tYf|Td۶mjuf "*(%*jED(.}¶^lAj';Py&"ի̙lY=|AܻWsQ|?thӧ/|2ԩ'OI" KFEEգGORSnjY̖:^u'QYYHĭ^==!amAA%ҥ*+ti[l0--'7f5V~6y@rɩOV=a׮lJFe@ͤSիۺZQ}w@ .@K}3;g>,UUUH$ڰa[wC:),{" {KWĉ#U[n <<6xCVܝmg7ڟ:խ[svoSSs\\싋Ks;uj;ap]d썏4;ffZ^(F̎Ґ7Gɣ""Koܐ4jY9yRAm?}|Ϟݜ<%&^&"7lXW0ut|E*yXd?|RW3WsY޽shh_}JUDD a_kT& ԄL?k#GR`i1x{˚q@ .@Kmr4oogČ];7$%eS><%e٣_LLk+V*]47EFEݼy*UѠAy(8XPS*dҸ_)&M>vL3k;uj`8ԸKrƍs͚k\UUsDѣL9Rrq c=<[y`Vxbyn.]/_> 9ΎY|[֬k?a3jB&֭̚5m6Xw@`pЎNZrWfoccYǏ_ΝY=h8UbD`ބNH' T/ӧ/͜_VVWWHDZV #CR6hp5aeVVr鯏?K(VXp \ ((p@PPAA . \ ((p@PPAxo8#~sگ~ڴhѢ*K""" 'CGDr̬30"݇Szmt-N;(?_)~sDٯ W}^?8̋)e؞7#NX[\N}^R?FteA%@+=?oJx}+NtGhft 'ε$>b['-0)vl}\/SΡ~kC\Fy|CC\?~|>5DD̈~EDDDD$q9I "" f$Dz%'&HTI_*qQI!""""RWYO`z"$G鉈kzQ5~6?p/"g^Q"""HTf1JfG'H:fK2_2<7 ڏ&ia[P`K1Tc1e76r(MDDD~^ 2p\AintGvl&3]aD2O=&41Vmawd<"R{ЖVeZQDwgb`O `_f3``n2 ""5 8'4@*I~L&kfMiecÉzhp]oL/""iQHt3`YHefKrjTڙY*x>O1pךYE+""IrE',_$/YDO33afVr5fkfr=Hvw_TI/;( k[])Th;(;p=TF߄וWJz:03̬OH'D9vzwGRfv&p?{3/~UΗ6f$+& Tp#FD,Yf',#xc~ lXϖuz5?6ZH]UɆ""MQj R$ {6j\#~lj: H:_JOQ>1]Kkj\'~lU2DD3l3fI#"KQ Rڏ^RwU:c5чH.,VK)-'eiת6o^REᷯx? /̮ISJ[3+3'8̄zpZl׫9pne0D,}ED[M""Ւ\6@8rbO'(J~^nfD65H[} jf.>'3۠u}M>gD}bf;>55's ]DDbflPXJ:_rܽ[AGw;mR3Ӏ'fKI'dH EDꙜp`4*Bw~ ?/,qs&j""R$ǀ1al{`+`O)0.>5. w̚9h@?WV1Cfk xV㽴z1}EDDD04>=;k8#FWq$vl]N=1  v1[t^ͳt_Dwt""umn<?mVoV@8مzwU -tNLa}/J4:̲^'cjHCѳ0v64\l"ݗa}V %",`\X~p,""ud}hp9[wam[{_@jJ:َ[s/瀪Ԓâ^poKC6ir}|Afv+ +lJ7I$",32,&H, Fkp\7:P3kWͮt#HD%%_'H:M7äaIұH}F 'U DYܰJ8ĘV=``vұȆe~Y>fs&'CD6{ypIqH/_ Mw4ޭGz_oIED$'DDlàNc78  oz$K }Sޚ 䍄BuO`;h):t0悟 33ǪŁ5a}}"(Fz$\|Zc rʨ#.`E`ڳCt J{^kIn߂C7YpE^7X0@v@G%" QpPX`""0]4T2P"8u=d75ajONMp֧Tm`a7ZˡB L*Nk^{ l+wWdL%oSDˆqpw:S=pG?= LfG@a7g’GCe^wD) l3: >gf>!HAԶvp%09k-'CY v-|wl+ q7Zf*&@!oZUFIy>ӠiU?4phSp'ͪ'"Re9fZEF#"RZBmaR:ue b! ~:;K#:xTư s^  {dƩ,X%<F .c`lfME+`mEmͫj॰^g!"R,U ""RAnε-vyo=p;7 _p/7 4eC 90}kY ?B#`kqX3|k~ |;d`RUGAw}En+Yݗ{hjy͖n{pl#lgx&*~ G =_ 3R i˕u9?@|r 䴁u~/Þ`\X& >8ڹӷJ} mA^hx9ATt8g!O*ȖQ9-(uMtN cmiv< ¯E^б-±YSPm @2b5̻T :ms?'Sc;Caʸ-$ :ْzND6wY>",ӓFDuRd9T(<0 z.^jvUNرb6L< #@?]ք&g̮TزtMYD\FߖH5eYlt0"",'Z4e[>aZU:b+2Q` |kB]0,8rf[=s;ow t,XUy(LPrH±4h`Iy:Ca0)7r X0c GÂ!pG_YSpyaEv- 6rcM%"*תY]A5U![LyMg Ją0uoTxq[l`iGB-~,k^ÁYTDlۆ婄ciЖA۵.jic+Wex΂Z=XF}9 mvBȷռvq{8>Dd3jE.q%Ohll4H歃ܛ`q-`iCd'ޮ%TȆu7}=/gE*K y/eM {V,"iYf6,,V~x0x0:98xDDR *=5U}au/N ʸ; gO^'TEY&C0 =mA=ۮR[_CGZBh$v`>=,cjx.' ""ҠrHxg9l*] -.)ه|p'L~h `cyHg8F?K!75 _\ q``>4~oS} ¨}`"h?}JTφ:հpED:r(+}~4ta?`k`y= n~sa˯aa1`UZ5c8w;>߼ o7'j. }FM)"wt"" tw 8'v` |+~ &MOC`(:f ߷,WK`%p]sUdweÌUw0y ;`X̍ ^yC&P5,:u,"% #߄ބm-Z`0[(u-(t7YDA Toܲ]Sj lk.ɗnSn|7X^PtQ9)MRҿ Q2ʊ)-&DIw_@ȟ`:@2W8c_m֌;?̻ey9aųrGz8>;t·ÇGOlv۽*4jҗ^f_?N[8z»gOF= 6H7IIίKj"ҵ/ɑ#ܺgSOr~pI6wug / M :.[F_cesoY9,N̟rs3?͌6sLrHׇA}mْڊvVJΝiˑe2rs 81/DV;~ pɉgbo\(';XwQ\틈lESMHdYH:L7wnXyM|53؃S}\My$g />Z曹u::l q>/ɒCrԳyFT`R EEQ۶2&?  ΰN8ga9>X2CO>ɫ͛Gu >lۗoݹsڵ1pfAAtWys>}//Cl뭣֑wubO+-[ /0|߰fݗ[CD,1mhZ䃡C7*n-Ku>-;yE >((~8몫mtdgd ;gͣx-G b~` @N +ssSIHTKX^M8hݺ41>>[w\n.~\B3W˝l>}ʮZ* /(GyT.BYGo<TKф-%dM2fXUڞaf3b??mchڶ凊wP2;X6W?^N;xuJ~:s}?=ܒ2fm2t=$mi3;7h`5J۴{/7VdOR+y!=#=ի 'y#FDSH- zځhFUΆ]vp_X@ɴRSO6qȑɐ3h""h<E2+W'4(݁ [v^.m3OjPXȶFSDW䬳Ӛ5Ё?8?n6ujv0d٘u㐆g,3C*UUgI|9O? 7n=s p=Ԩ,O3`͛1J& v͍*n̝igE / 彄Ñ f"*mJfd|N32GE5{ л7;K͢q7tSn0t)Z(Li}YҚc'i}uX*ID, τez=kbƭEE֍nJw5Lу_O D.% `k6RjJ6Æqʕ Ct3f6<,G2B9Ȓ QIGTYТc{;vHlՊZEOԾOTiVKՋw#7f:l%鯄(Ų 3jw'3fajw_TΡD76]l}~:݇'HeCqLNRb%x.qiNc(~(o@ydɰTr&iPi WiI"әh`:_Y7 wvua0U:mTf7*W٣D) 6@N*oL`|r^;%*7/ñWu!QU<p,"""%!z_ASSMq8:~vxE-`_*xٳ[[Aih(Ud 1TO1wÈbf庯&9'R@ )u(j׍7&H:|wG/:UpoxM5N=':5ޭRVpL;,IDDDJ`丗&'[n`}1%um6S g:DDDڙ٨Y3a^2^DI@S[wS3홡nlGƝD)_P AWk_t$"""i8(@\ Pﯲ.n7D}d9؂Fؗ:5A6T^t"""*౰^WTj&s%ǫU&? D!j<@vua{G4t:?$dHZRqHd`?ʚ:Rw)gbfG`K#Qɴb] LTtlG5nv!ƺry+D): !""f$VRV꧌AM N Uˈh&;w VᘯƳg> Ǽ_quSSVWHSߐF%dH]AFoi LEDDDjU]A6 ;(}a=уzRO Y` pJXd AT}?zY ?PEDD#C2*c95p'tR#9M*;RDDi ^TsAWhs9fѺG'EEmfxY~o'"2.2DKISs+A>)4h,r3ppN0hKpw泠IVrAr7BÜb$'8]sY+ධyON2I? K& '""4 #  K& 44ذ,@$c, Y*GI,42adwd<~AL(Ava """nل\BA4>xDDDf!Xd AL _f Hk>n,A FDD$̬N2 K& wK8tk   K&AihK$PdBqr&HzC^H$?#􆇆^BD[z +:u!Xو$!AL(A]hh,"X,KPz*DK=:Ȓ ,`tXDD6;uqHLaveǙY 3mk#6]f6ͬqGTM7'HRÿýg¬c =ÓU8:0-sQIBTY2!AN: $m^6BU^ | 2$G9Ȓ ]R줤#IBG=Irqʎu{X>vtվIq|w"GI=dbv18b}I!ur%R7y1$.ǯ^I"e{:L^fƇeL'LtO)RNy@^N:-qz+S)-үv ) -2$O9Ȓ Qd3=4rwS" Q#N}~}Y5uU(iTY2!^y\X~hD"" [>~: ?O: ۽N?w/p+âo r%9"",v}vL:+i(-TeY4D|8 K&yYay9xDDꆅ W~d0{tMSXHotRGt(YҬ %'H]d5;o"0*6e&? ,X'oX6ALH ٕUw:DD63f^sO:+hy8_H Ou#2@I8i , |@dIuaؽ:?B~`BO9ݽU 4F9Ȓ^y S_QJ.+̺n mN>'`a n\>.]6IauMI dBT;'Uly,K͜ɶI w nfm&o>x{X K{ʤcKfCqf >v?ºRV5hXK-icf]swSNN@Kp@9/5/ X\_3kl6OAL(AN0W`o1[LJI!0/3k5 [nՠEuXK`V|f}y/@*/^73WNmf&Cy?n |B1fRK1=ؕ( G}[m]OD$Bx X.6I: w_GGڵH4݊lL>\ .nಃoJZhf/ )lw7锃шiI[r(%;%T ]mJǫ-}/wM '`hZt7QGۍfS9<8?l,} 'qk+`h؜\^MAT0N5ΤC]25xDDDZو98/}i"PF*w_ enfc̬9eYv!%"v^Pw/%=ܽX>H:(4IU8hV:- ߸ws)F_> gUpE9apo~6sU{M 3wE"2&aɮHx), *QK{PՎnכ.fv00V:= pε 0$OTk3Qr%,U#""囤㩂_uLUcQr#TT-J¹ZVԊHo,.uhEl˪jTI[қRiW_EVţ1 7CؚY4Zl8-tI̛f̺RR7x/N3؋rjޭ^bf^%zXpL\4]X܊G):z3'UZf,G3~p<ٽ[^NsPgyM)cx3Y*`*,N4?>akJw5e# t/ 93k_ZƊw"xj"/pu6cR1%z`/ mi6FInf-b~^P*6XJafmcH}ͳWt/ڇ w_nfY-rX eLפ~Y2w_if@rbH hV5sMsmL4@Z?:߫\W{0!}~ s-3 $P:Mz.ǭD]uw'r#sMR+:RitMXKXGS'ؕ 85Ќ,bV%q3bl-iwa*K2vb<%1؆ x!ьF̧#d=tMzq4sɧ hӅb!1 I.V5Y=ciB++ƿq ߤBd:^=SǍ m6~Bɱ&mx;׌ve{hc^mcm~'#bmmB۰=&obh>lw KbFա>8vnmp؞7> ۝cmSm~#B뱶%mP-}s  s헉ϵud\4M\K}6)k qXEdr ^u\1 Rw4d}`Rs+L,wiDUVБрӖ6:/ k8?ox.&7C7WȾ4g*g _pP9|Zj&xl}+ُ˷]xp08n8{DxE Պ%+Mp$"" `xX> #B ar- ьl eg'J>O+SR)%g2wҒ 8Y +⒴ rT.Dw*V: " z~dGRPAIM] CMI}^_$Dw!sЧkK=,p?]x)LՀ*jh[wC8_|Kգ*vT#D? }}9#l/,kKXqD_bz]|~\S\>xbC\ iWڟh_SW]t5$g&j3{ѣrpqD% O!*񺐃ҍ6Js{fYE6.}7i܂Yt]~'M>V=*YI͸c-ҩ; ͙Cſ6ԇgxXXSiivH"z$llQj͠!}4 5p}F8`_]T\XY;56< 9fv2ЛyʝZ nb/o/aМ)(gޥ\?Oc?nY:.Mx5q7N+,dzsy~,Z-Pۋ 尔xU|BVltv\4Nd `הyΫ-<8,r<p2݇W_9R9JIdJj5w %EH;l@4!DSQ\Ys}KR2H{JM amLrSN &7蘢.4ۅ5Vm+]Ѿ|Ľ>rX:Z3cy[97[}F8>YuEDD$!}vlD4sS+P('sMjJ\M4' cSԂp pw9q5dGqk9 Ne;g:ݘq Wؠ_V lMW=bҊZB%7k5ۜZGMEpOAX]S|BVluk\FQ^3&eܛlc_b߭V/e A0_ IDATÌ~m߃kXAv,i,3~|wH1u]7X"5cɮ3>F+żWvk8w1b90% |R["9^Գ+xsxSϯ؉ٽ#xS,8d/Ue2DV+ uK[#MM߱8p(DBH6 )bP7 D $IJ k Kt $IJ k7N%IRM$ ra`iԨ4(I&SIhgu!oƾR-PY$N?ka &!B!&>HNqY[MK !, !4wwuy|p58;C&{Y$7ppBRCT!mc n/C./o`}aZZxuFYrWMQQ\zׯ]{);;˦}UYmNiiKcnnc˗bk(-?{„g>7es}:;>P_--.mociE&aҥ4M¥Ky}0k_{3+Vƃf{ۊC/]zļ9{-m֬z+VCjKB Mdi j+Ȓ4 [[VUoZQOYY]1|yuuo1sN]pΒ}JKXtOK.XB=mѢ>|_jm1xի_Y:yϿ֦i=QC.-Z'6nܣ"xq/o,Upe e^/tMG-koie?ik޴i{)O4tvVqC?|]s^;D)Sh\|A]Ks䯭^}Ңyɱcl16 84մ$ ֮=S򚚗Vvt1ok訸}֬NX Ȇ U/\x6;q滪kg߶~!3K;;ްh){'YUuCF[S+V1Ʋe̿]j>_XMKq^.i7Mxu͓?.)i~%o5'XYYREŪ%-]?Nwy„ͫ,)tmmQWk֬9Ċo\%KhI>j`ƯYIApƄ 'S?i?^nmɓ^^tBEųw__]类~0?9d:n5ՙmm;mժ۾j+'M/.^ur ɓ;f =}eժ^lmY49{N攖oҤE]{{uҋ&N- ,9cMGGə}_fڴ{ιUU4o1{3Vvt]WwB}{{!ƽ|mm$d%a*0 $ [^ƭ?tڳt @}{sb,lk ɓyLE&qbe?ްasfІ Θ0B ĉ{e&&<9NOeeԷ4;miw_Ϝy{o\[[ƽ}CǼ'.6qk̚ LAj K 6nVk\\ P4Wd2=O,*,ܣ7VuBf|&qfII?^R}R{\ q¶,-бWr[u&mJt^[[OcnXTmJ:;mg8Q + 6ȒJCm[m=ho/( +U]&ՙLkc̟sbQQs%L;1x yg$ KphJtSGGEo)/nk-.|xZܸܶjcQR`AkmU[ᭋY>xuk%/YrF_'ή{c޵dM^Q + 6Ȓ4fld6t@uZ f얛kxxÆ3:=JKWܿaìw%Ǽ:s̹qEv>nno\tQm4kvI̹qKۧu:nY6J $VV>Uy7߯[7QBe55N;=y-->aC 755}iժ/^֮O<3.lذ5Ikgtĸ64s2[gce&r|}9=ACìBg}U&~.*i/wYC o K0fڴ+36nΚ5~ݺ/[s!9a#sDyy+*ią +_IYfC?׻i54wW5_ܕٞCwfݺ'jnY||EŒ7O"7`~uooxuS16mǡ + 6Ȓ$)ldIZ6J $IJ3d%Y$ `,IYIA$Ie$ K4AVl%IRj + 6Ȓ$)ldIZ6J $IJ3d%Y$ `,IYIA$Ie$ K4AVl%IRj + 6Ȓ$)ldIZ6J $IJ3d%Y$ `,IYIA$Ie$ K4AVl%IRj + 6Ȓ$)ldIZVtPmb,IlC /aO!;}W6Ȓ$)10%Ct6(l%IR: uVc|<' g{ 4!q!wƨBCaclǢ#{YRZ !\B3܃ },eӝj'ȒR)gB?¤a(wd I$'Ȓ[@~-ԣ![Bg4J799P16M,$W*O{<]XBv>8IAVl%Om ph'B3vи$%YIA4*< , !B8`% 0 d')1!&2%?eS}Z/8qW JB~d'Ȓ?p,(؞ym5ƒeb̔9dBٿU;YP^9AIo1/n1>B88QIJZ5l5&dIo~̋1PHY`,)B;{< lBc + 6ȒFr%;)Yn$iAVl%WٮaYIAj886U( 6ȒR-Ƹ~ i + 6Ȓ$)ldIZ6J $IJ' %Y$ `,IYIA$Ie$ Kt2Pl%IRj + 6Ȓ$)ldIZ6J $IJ' %Y$ `,IYIA$Ie$ Kt2Pl%IRj + 6Ȓ$)ldIZ6J $IJ' %Y$ `,I \Sɍk{ ldI  mi_) `,)q@_rٍ=IgV$ KԲAVl%IR + 6Ȓ$)ldINfJ $IJ-d%Y$ `,IRYI908u^_S=I5YEapPS;C1WD#A޵pw4@V1c>>c$] 4G3w+,  yD4'}w!IAޕy[|JqQ?g; Sёl5$I.6JY/18p?pI$ K) #A$IAVFD,I4H$Y$:6Ji,ɓiHeV$U+$I]ld9!}9`Y_1 _1J!pu1}C3rx!ع;n6ٻ@M%'z`>sIJ d%a4[˼K{KbMǀrk8x=u} DOǟ`M[\{x!ߍ1.c?IJ d%a4v'_$IOl7CjGrc+@CCp8[&s1<} !< \Gq xkYI/4ד$ƸɱZ!0&&B'W~\ c<087Ƹ٫ï~+pyEz37=ׅW~ }WPa0p@z`72xh$8p'I#M!1PNmtl+1Ɵpcm1ƿLV8Ǽ.wm?${w"ppCa]B)p ~1c b1Ɨb_v's"K l2lL4}_cg[;[ <٫M;^}}n r [yWepAIq!Oy_B2הYI(1 k̚0]P{~n/z%A .?ٟqW1ƕxMIQlFr !_}.&{O2AC￁lGo{4x@YIAXpW{ pgB 3'|CdW1' XIMl2 F5gCBx{aR?3^nq@qH=u4 ; ?+8^FjBC(CzbBG[sO}}h!|)^γ)p˭瑝 L}*Ƹ#B.㜮i~DDR'@6vBb1"ddxww.<[qeNvUra<+א.wƾZ=דy^vYcS Lv.+PRభ: . <{jW6e=B=㼞!m |{$r$C]ˮrK^ ߛ_93A_@]׆^4Z_9Wu6 M_]WX>< TW'P \{5YI(bq\z5?'sLyB'w*E ]8{~@9iz?6sC|a;'ݒ6@qŃTUL̦ |WOb.uOZv;\C6W;Ub!&!ppS&܏G2 czl{cm{轋1eˇ?<Bx]2!Su%i$ r7AN$>^TrGqC>|iE5T,3x6&4fNnqU~L s(eiA+5\õ, DJ餌Wq%uJ^dPtP󼗙|qWr;X\i&RaP FjL';xI%ZKDe6~c_7Cd×d37{x=Ii}<ǛYο1."C+ؕ!ؙ+C=%br.ѻwou7p +8@+'q>u|&.\N 4jnǵOx&,9 ws&|߮]Y h,4r1im$޲9]Sidj[⬂缜}hf\ T IDATk|ۧ (KeK|}_ {{4c-iT1~ V 8l 3by>bCǒ5Я߿kS6cq ~h`*dd=< <c\$)}FN\F=_Fy~ΟY4IgE|s*Ld/wݹne?~̳|ykoxZCVst]DϡE 9E>q+FL RLWHvmCJ?wcIE#_ 5>yw{uۿ uL++?0(I͈,69ۙY dsW2_'nb*es?MT5rj~[ngLnu 求V7[ >v~Wy+؟Gy&^9|n>iƱ8_m׸S?L,$IRꌈ9og|~ c1%ĭO@.pw*e d:ޝZ0*a@27ۏ[xGfaN Ʊxdƶl%IRŸ_ b}e e::j(cE߾*?ܪrB&?JXYpt8ƒw5$FqrS'x {(ʜ K4GD<&҈-* T&~w}6o׸tn6GK|n]E"߮q r $IJB3P#4dd1mӌ+O 6"aL }l&pϖ;wSɮzlŜƋrCyS9ٮq A$I5!\BB$c[N\qIk= tRtr*/o~~ZnecxR1w)N)5KXyjwy *i,t K4Wc|Cw !62(sSmK| &ZٙpswFM}g03o9ǹ2scN>_*\A;)c 7PwdI4 d俑yldאE2C?ϛt>O`7^b!,{E!O @$N,&zkr_YCQLچj|v ; 3\3]W$WY}p<,t2:4qO/(f=C\<6Qɳ_.F ]I33ŜEOvYy 8DZLidYHRGc ;bC\˕7ټ>^ĿJ1*pXY\Gًُb2K8P["G_^ԳxxKfj˸.w<ģ{?9sy؟giJOŹƺ{9U !8Apƍ=IB(PǶ2ܾ(&Df^>rwM t~?b*pu)\J}s7=H5xss=QN%IR: A~]K?1>2 [}tPI9 9 pzA$IcԟB'w{O 88Hc.8FЇdIb!KUoc L11#SAs/喝 ts'b,IҬ ?c3\ēahs;/&3Xi<6Ȓ$)boA{9KGdI$)/ {iI:!!BJLjW%I,dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id K$Iy6Ȓ$)ldI$;dIN6J $Ig,IRYIA$IA$Id$XH$I8A$Ic$~dI$ dI:6J $ITdI:6J $IT $IJd%Y$I* $IJd%Y$I*Y$ `,I$Y$ `,I$`,IRYIA$I p,IRYI7ÚX46 'ppA|93=I"8چ{ ,ӆP/Nŵ1>:܃$ivqhP14' $I4 KԱAV\Y$I*B$I+Ȓ$IRN%IR + 6Ȓ$IR6Ȓ$IR^A$Ip,IRYI7=IAؘn+!g,I$uab!IR'Pf^8A$Iilpd,IYA$I0$Ic$9A$Iid!o K4lbϛŸcas $IR's(Eb!?@y(ēIENDB`openturns-1.9/python/doc/developer_guide/Figures/latex2html.dia000066400000000000000000000036601307543307100250270ustar00rootroot00000000000000]ݎ8S6`ci:S+n+:"I3>ϾǾtB-+Gj>}~]Ei#̑b? xq=+:zsuzV<#NշRD'pR6ۋ"o"MF7/ c:V|#{+v={O6q0[$JqEףg4)yﵷ`sμ]M^3jl"MjQ)ZQẏTxj bEHD!!i Rtmr>ܼ__8/\  !|av)"~6u|YRt-(QpկٴiMֿcEoj\ ȟZ_VR(R(@)GtT%0rrUlv/NAG:n YPJM$ommA VDo"׆TJ"J^B%w z w !p.P*1I ИҦ{~3ΜY]#a,S9] i*xq08O|]"/9⨌A:@f12 I@8HŹ8՞{:3?+5yAn8:')mHyF>ZyPT$uHQ?W" iH7W6P:g \3s;-d0|!LV! fF9Qsmvb٦Q pva~ +eJ0M괩LRCd)ڞ\n[`,ҩ$+2L *?ԤCI)Pr?Frlopenturns-1.9/python/doc/developer_guide/Figures/latex2html.png000066400000000000000000000442351307543307100250610ustar00rootroot00000000000000PNG  IHDRNitsBITO IDATx{XW?3pfD#(E@*YuY.Rkq][iZWy"RԂ[\JE$ bRH$$?fy$ܒLLNΜ3圙d(BA\Q5MG'`7@=)b1 9GQ>0pQQF!`u`v:0jH;8D; LQiA)AA? ``d+:0F=%zr:)((ptt ƺuvء@uCCCmllRRRtUsNNMIISo=z4CQǖ-[ܽ{2劊07qĢ"-Q[v ӧOO8ѿ=W򲲲ꫯzիWGEE%=G5r믿nggWYYyzϟ?={e m ={VTTIݳgOggJ%KBX\]]o߾'jo5yYCCP($UܱcGzzz}}}AAo^rn5 Qj|wUUUSN?BL&͝7oWrr2= jkkuvv3f/z\Cf̘pfBñp8rMr'O *//׌1bҤI.bx|>?$$dܸq{:;;MF d_S󣣣w8}EQ(qvv>zd?p߾}&L S%{FFF%%%666[neD" 3gd^oIIIΝRI[[㳳2k׮] @>~( kjjZZZ!/^\RVVv#GB?~7o>}:++~L&pܹEG.ߺu… AAAgϞmݺu*˗/_f͵kRyq܋/B{HqFM ---٤0H$-[wرM6UWW>|X$ %{(i |GzBHUU=[?2^{#iiiӟ˩K.Uܹs8@/S...7˵:~8b ",,,''_7n'|եe\KZ[[ !AKἼѣG+o*000##Cjv˥ׄ9rܹLUUU={/^\[LL7zY*r8Jarro޽[eC+IMM NNNNi9X:P֖@##F2׏Z\Hdk0dȐGtxN9;v,,,ҒYI߶mۚ5kNj'>>>>>իqqqMMM۷ok ]\\z_Xza9XV[[ӧOݻ{L<BrQ&s}'h$!!aΝaaaF*B!@'DaÆB~'WWW;;;LFH$Z@pJKKk&rhȑ------>d4}p gϞ^ܹssssG]ʵH Wb7xbذa/_^p!W‚ǏkiEQuuu^vS*r\?PwG{%III7n(..fiN%x @3gzzz&&&J$[n}6l`MKKkkkΎINNH$wnjiӦƊ_]̚5k8}m۶}rsss~~~MMM{{ݻwsrrf̘ћ(Wާ0-&&&55ƍRRS=7nܰaCIIIKKrM0@.kٜUhhhjjT*ǏM˕rqq}v{{;!>9r/XreccDsxfgfNh D`kkÇ{/zdo߾q ><))I&)gϞmܸq̘1/7|ԯ:BqW_}eƍzooz޾35k}~7o#uuuMIIJZʵ:-Ož={?j999Zd7o9rK.))y嗇:}>|Ŋ//P(>|0k֬4\+ѣGYFƌs)-<|_NP(_,X]cX`8JdL&rbM"Gu8 AqƷ PXPP`? >>۶m={Ҽmmmwڥ>~ 477[nԩ;888;;ܹSdt׮]ۼyҥKEEEW\sι͟?{Śj[l۷mmmݻ߼y_ +лx:!o&+\xQSݿܹs΄'+n޼9rH{{S zGghΜ9nnnYYY ^%ZBرc=zA@0gΜWl1GʜғH$o̘۫[{{D"QYy/Z?T#D Z[[ !&M(ǎRϸqBBBbcc%B(//H$w޽tT*qrrб{/77122R)//۷LJh*??ԨQB>&&[l1bİa:tIhK(|EFur:`9DXQ,C!ur:`9D?&Q,C! 'L XQ,zL?p΄ u}k/MXQ[ҙ(DW03]:t& Q[ҙ(D@03u:mÐt!z3i:p%;X v`0 Aa H n`T ƈNc~lcD)&i v9VB2p! QF`ic1D;ru`vE!XQAir9Caa0gVu`Jvy{b:01L;M!IK3#YJ6Qi)U֫}O0.LQH$I/x{{lݺ$44Ϝ9yw6~laDDڵk !f LOOKLLN A4DQ^^>~ÇBaMMMKK !ŋ?Õ+W._|BHBB߿ӧOgee/d.\~;wc}[n]p!((^ٳ[޽[eqk֬v@*#.{RB/6nܨ0SsaaVZ}{O?ڵk6Z]]]WWק9YfUVV.YDye\\'OrsstS;vئM>,JJJ^xQUUUZZ_J7X-`=f 0c>}Q@@󰾾RUUEL^{D"zeZZڟ'rjjҥK2w=Tqq r-,,?N>|B )..~駺233}}}Ǎ'tuuij+ңVBD"ajR8//oʛǾ Piz]r5#G;w.SyUUgϞŋ+^J~oho&B_~8p`ժU "**ȑ# K/^{n24}zqeP֖@##F2׏Z\Hdk0dȐGtN9;v,,,ҒYI߶mۚ5kNj'>>>>>իqqqMMM۷ok ]\\z_Xza9XV[[ӧOݻ{L<BrQ&s}';w1W BLObB(O4ESϼ!@'DaÆB~'WWW;;;LFH$Z@pJKKk&dȑ#[ZZZZZk=>|mi<o)))ʁ Ξ=۽ιs&''jk VbqoyŰa._pB>|E?B'''lmm ! T*r$%%߸qw5$:pՁZ3gLLLH$n6l D"رcRRRTXXX޽{ΝP6o޼I&r>>>EEE:\]S ) #\t!Cv=؍:m=zTXXH?\p_zy;wT~ܹ~zwwBϖ-[^}UPX^^Nٶmٳ}||_.HF1zvXssuNZYYٛƧy{{ںڵKSZZZ֮];f''K666j>{l>jժׯ3[|ܹs:mڴ_~EӮطoٳmllkkkSSSG䔖֏Bo ӧ3g,,,<<֭[Z4ߗ?ȑ#OŅ^xϟ?dj套^yڪS*MAWWWttoyڵSN1###/_8E)77Bd2Yuu5 52G~HbjnnnO͖H$o۫*Օ_S___-'l޼9''իnnn=7MFD@>#G:th555w^tI*899urR \mee-N<+L4"1??ԨQB>&&Y>BCBB4-//9 vƌ%%%Z:|cC@->omRkk7Bu}44'555""`[Fur:`9L`92& "`^!LaHg>u`^0uiu`F0uiu`v037:0ҙ-D t QfC: XS6crC:sB Q서X9u69PVAAw:`e1 /!@LBzS^BQ/hS~@%LBQߖB`tQ!:b76}7L:z0 EBԁ92(K;$#N#_`uAP Q`2L4p0uĄ Q`b|c~ןPQQ1w\:!cmmM(kr5 f2 Y,w_oaaI/?~Y%-RiPLJJ qFqq_bbbRSSoܸ!Jkjj*++&L(((Ly۷oBGc`ʕ?ȑ#_|ʕ+ ' QKLL(--gff8qNNNfGEE9sYOQx̚GGFFZJKK-ZW\\L_B:c~Fur:`9DXQ,C  FuP fIV~s7Dv9@ onX<3 Dy̻@;aXCCDʐ:`Z-`r`5avff:` L'Ds}`p+LfLr0 Q Gj `u`p!L`=DuCd`7D`[!d`aH;`%D R  _!cćM0ㅙAQF 9L&0jT0 :0:9L0]SLH-( 9g w`XuP(:;; w}+^ r!L)EݣG ._B/߿yΝʯZ~;w֯_Cٲe˫* >>>۶m={%ITTԈ#FNknn^nԩS+++YmG^}B. Lr!4(Lʙ3g,,,<<֭[Zaj%jWjjJ/4aTLxTg4%%e„ <666'Nhiiait桋˹sʻwB/^_ !ZMچin<^hj~R]1ݿL)M`ݻ+kƎ{у 9s\zJrmm-L/ͭ]"c jEmTzћӿ]:p89[ԮL,>#G:th555w^tI*899q\W G>۷owvvرf޼y*/1cFRRR[[[]]֭[cbb8θqBBBbcc%B(//Zj/RSzنǏgggdr} vxmZuuuHHäI233y<^2^.--eʴ]v̘1NNNK.efnz!vt@[Z B?stt>}?O=tʕ;88,^XPx{{޽b_5G>|Q֮]FojjZf-)` T`/QRSTz111o@vigzi]P(׮]Q[[K/땛7rk׮?#Sf-jhhhoo}zC4]+ˌ9nT !g&Fеii{uߧ(iNQTsss;Dhu&6 CL6vذaCWWuBb1EQB}ҤIL;\VfZu`9sەumKSSSkk+Çjvtt 9WWWӧO}}}{C}Y1Ǩ{nDD`\g-=qD/0L4oo)S{R{Q[lڴiO&ttt|JzCo6]CCɓ'駴_YL9F 9M/fdd8qjѢEoֲed2Ϸl2bĈaÆ:tɓ*{rss###5k׮]z5?ӧTEQɓ'=<<^yI&O5J(0(*,,wވ#BBBt!$55͛'N ;w.>//9 vƌU|MQQڪ}o!9` |||RSS ?Gݼy@/sLO& >x`׮]K.#nCP2GEFFK.ݸq` 9Cԁ iC¹: O `098|@0 #&3A0~B΁na2Q}C}@AH 0 n!꠷s``ȁ g tQ=҂Cԁ690(@+.`<5s@ Lq'Q0#(&0A&30L=D,}, =¹:d`O3k9`BkU@ L`$9`%jaTg8"r2#?s3;حLz%ά XK23Sw XKp`&ԞƉj3Qy90+2h:vj3 Lv?0w077gՙ)9èzax|X vp .!zxb:vZAVJ8W`0ύ_6 D苑0Q5iܴC! b!@+u`8v:0(ç i}I!@/zKL`ؠ1,,l֭ۢ۱cڧ#""t-D"+p႗ujjNZC:SrP''.]՜CuSRRoGM/Peiie%wޥ(Ly???z",,M8HKcV]BB'NoՁ<<<޼dQQQnX=zfܻwonR?2?1+:ܓj_ήEEEUoϟ?>{N<{(???33^ikkgϞNK, bz߾}'NkٳPH롫cǎ޼GS<\re67p ᆱtuu:u~'Bd2Unny󼼼aP[[[ll1c}\Nr:4c  677B85ñ{l˝pŋ/vpp!!!ƍG{4m4BH@@'k.777>+BB8x𠯯ѣG5mT&} 0a]R6ܻwodd$\RRmccuVfoH$P>?sLFM-ﮭmÈk2~L7𤤤syzzzzzB222bccg͚痘9tu DizU^^>~ÇBaMMMKK !ŋ?Õ+W._|BHBB߿ӧOgee/d.\~;wc}[n]p!((^ٳ[޽[eqk֬v@*#.{RB/6nܨ0SsaaVZ}{O?ڵk6Z]]]WWקiYfUVV.YDye\\'OrsstS;vئM>,Ҙg=zS|>ٳIIIaaa"H$-[.\VVVRRŋ/R*/ejmmU>sF/׻BVXA:teˊVXs=z|]XXOvC !̙3y뭷 Ő!C=ʜΑdB3??ȑLጌxT;$$$p8^T*# 6lӦMV>y9sBz\#!$,,ʕ+}/^8sLEE;v%K] !D(DEEK.0Om޼DߺuK{{SBήiԨQ}!!tFPУ:艭-3FGA?dR@zL&&!Ct?p8f\Oǎ dVm۶f"Ézj\\\SS۵t{{B{aV>|}Vm=677{`-z\d@ Osΰ0!so =M(JWHNvW'NDMMMÆ #Ovvv2"H<== !ٙᔖ20el9rdKKKKK }ÇUrx۷oOII W@puΝ;799977W{u\{T谰},{Sϋ/ v |q*?B'''lmm ! T*r$%%߸qw%hd .K19sgbbD"u|aٴ숈kk똘dDQQQqΝnq̘16mjllHKK{UʬY(۶mN/777Դ߽{7''gƌir} bbbRSSoܸ!Jkjj*++5ciiq 6(Gڄ  ryyyy~~YYYJRX|޴] ,_YSXXx#G|+WlllMB۷ !F>tQ{H;qرAAAٳL2uԈ+WB222\\\O~l@$;6888,,,%%Eݻw 5h͛4i,?ɓ';88N>{oRyz„h{{Mlٲeɒ%#FسgkFcv9[)ɸ\X,vssgt`G-3oBvC@''u Nv`thRW .tI`u``X(7NXldQ>ydܹӟ vlTŹ:-U~7g̘o.>eQB{t]''E9s.0Picon;v؀9lThS{t]F/vf@:wUvфsv@N{bnK?TRT7U^ E;ffN{t]-(l4] ;@-A!ur:`9DXN?Q.Gu0B!ur:`9DXQ,C!ur:`9DXQ,YiENt̓~TG3 sEgFuz@3C D! N/vQ/H;##1@`!i0uD:A }0BD.ӗB&Eݺuvءn(H4J.\emmV>Qԭ^:**b/_5kK/q7ѣGi!$$$޽{ ,y@\Oq)))/--8{lOOO6ʕ+tTP(}zB?{lRRRXXH$D˖- x񢪪/J!`<|̙͛C7n/^8sLEE;v%KT"d+Wܸq@ RP(LIIŗ.]aڼy!$<<֭[[G vvvMMMF0 :{cr&KYll=IDAT+6%$$TTT̝;+ѣ.٩KKKBñ&P՛3h9;;ޔtrr(~Р $ɱc8KR\&)))88ƍ뻿oyA.&&&55ƍRRSI++TT*?<ꫯ:;;:::˙5ϟ?r_|rrvBn,`ШKLL(--GGG:u*++/>>%+ydWW׮];'''[[[[[[`(xy$77)߼yYYYwرM6UWW>|X$ijeee=z)>٤0H$-[F)+++))yEUUUii_~)Ju@7ׯ2d!dΜ9eee/^8sLEE;v%K聝T*ɹwutttaaa||LSaG1Kc"TXYYJRX|qzuLLLrrD"訨sTaa9_\^./_\Zܾ}i1\EGG:u*++Ϗ>ǦIVVX,+Vxw...ӧOwttz!!&..ѣVSx<SZDEE9sFKEWf&%%X9տt1z_A=1|q@ur:`9DXQ,=gx`T,Q~ Fur:`9DXQ,C! ^loX $U3RIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/000077500000000000000000000000001307543307100256265ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/bridge.png000066400000000000000000000403551307543307100275770ustar00rootroot00000000000000PNG  IHDR;sBITO pHYs+ IDATxw|u׆B! ]PTAE("P zx"AQP)*Az'!n&M#a~>c]voDDDD .;"""S#"""~Nᎈ9;"""S#"""~Nᎈ9;"""3Xp\ӐGO/J蚒Q$9N&q*D ,)j));'!"ѣy}5mcμ>7d3x04nNT*x+4iBѢtv_V"#ywP(O~kgо=Eҥ fCV*Ey|&~%',:u93F'WpzNgZ:ΝAϝ#$|8Do;G,I`Y.LTM2hӮO~k'O2t(>Ht4SfT\e;н;uy|&p0qb%/%ɮ kKԩʭE;2*2r-lؐ3MN_?d&RND޽}=\Zz~JeNv.y_,_sxȬ[o/,YBp̞My$ yt p{SDn >+1O~k>ҥZ=pL$ʓ+rpgp*WyvbB0ӿ!C7Y#F\+Yҭ%;y}"7nc ]qVoHIzG?\̙WsP9ɷ䊜hdVnó?a8={gZMÇa|% B4a`=8ll>̄ tB-J` eж-PmN!} re <ر]=rķ޲mLaX3q`+jJjŴifQr$O^vJLh(U2`!ۗ'䥗X͛6W]Vp[ۼ=&)]uyq֮9V߾zLpYߟ)^@s`x4ɏ?s VpaʔᡇX\ObGGԩVŋd|ڷT) jUkmCx8,wg咭d>iޜ( paj䥗8_RB{]6?yޣgOקdIA^~پchzNfϦm["# vm^|S<< PAA-JӦ|1))̛GDFR5k⋜?osÇjUBB(]X$>.yӭkSAA(w0nIIx"cqMP>ʊyo_S'n(V>SʺlgsIwgvϵ>hu5 Ț^˖- 6m23:xW餷 Pgg:=r|&gjcƘk_H ۶+ۼysX+WvVLLߝnX/%[C\I]{(_4wŊ REDwVN/}w\GlP۶tnIΟw;?w<\? /y]Vz/l-v;cה|T֐![mxm0j9QNV6<{=z5[G<}ҿO;t>}|' Z %%'S&M{ge+V;4tnUx7w.s8rĦ:۵3sx!o8!|MtnEHjѣ?sgΝ9fTf?ҪUӗ/ρqk5ym>Ч?3qNf]޽r##9;ذٳy Ś5Rg>^|%Ed$o|eʘɢEoܹyv-СOeK>ۊg϶BO.)WLٽ[Y/RwRaU￳e K2d}OxH …LDl, t̛4nl\{mz:O;vP c$LIJo٪F f/J(N?wlhߞ3=s…LLFf_JwU0k˖ѹm}$2>UeA̞ͳZ\߀_ g#_6G#Mנ3}:}ҥ&_~i߿$׮1xg~LʠA2t(.l,X֥,kfq6YN'QQPoUgW+QyG{oJ:\LZc@N듔dՎVP*z',Ykr:ng~;oY)oa {Uac+ŋx 1v홤U9g֩Upٖ(-2J̰1UڻJ4fQJ/]jpLr#pX"]zu3GozQksWvB̲#ѧMcG?, Dw[ٲ~Il?Kħ2f^͇dFnՊ?nųۭӖ-kr'_NVV r==6>>OP$s5x-mjִJCЁepI|g\e:|,mΜ1(I5cDݐ1RRX[fכhQ∋A+Hz9U#G<9}`ZyeK(qqԪee#MN)iLfԍ ɫ?$pe*-gfV[ϕ+|Bǎ4垊sI;WmZ5fHHȩa WQu/mVu*j&'y&'uwLRכݻkqu]r]s g68_JʄP*=8]pb+GX_u-7gyt >J`"5?spFu,cUC}g^ Ynml{ܚcWWE \ڤuL34f\I])Q2u ?]hЀ9pyn<)\4]sjSLO` #F0x0~jg0|8`e'^GNQJ㩦~Hr=֟iDD<,Zį*ӵ+;3ggY g< ҥ=a}O"fYϳ|y$'[cAv&uM^ɒkS@e˚ޖ*Ovvf-k~,gz/yboO&6mLYNvn]σIisO=ec>m /0hM5I !G|p+Wz+O] l@M 4o>/]j O¯E X|Iiѳ'={|)@|<'NPO8l̲ezJq8+ݺ|UyhU'N;6GӐzFSh&Ѱ%^~z/yZ&3 w%q7[K?BΟkOktoa8:tfMʖIמk k`In DBl:r/ 0UF0^~kרUݻmv:O`.^ti%:~+hQyYnՋcy(Rĉ$%q?`@TȣΝ];:vAʗ5'MѢDF#VLbE1Μ`>:pvfhUԄq-m… D۶$&rͮ*W6vO:ve֭Kw8Oy<O0g5"ysȑS0g[ BC0/:gӨ>Jr/ 1ƨnhڔpNd~Νs:ʖm[shҥԫGTDb"ǎi{犨v__ %iۖn2'3._Y>33ѥKQvesxg6OD76SsWcΪBޖk zJ 116z6loMw>hLoTOqРH&d@ѢVikOu0XcᦛBϞW6.Y{p=pV]wVV6Y6bW8pgf5׼{/3:;p[5}LVQ߶Vk.c۩F6m6رYH_Mp@H_ϙmFy9,_n%Λ3ה|UX1sBI} Y+WU?hb۶lby RƍR7t8LY 7$lW kْ͛9ғ^QS0}d9bMׄCrex,^eg@|^]w٤{/m}]mCBs6y.6֭-[xH4m۬Q,Y\FR4kF~V9u[r٦JTFft‹Q~]*Vuk{m~Jذ_o9rbb~YcSDFa;wr DDptOxV x1'2s&۷s<٘Һ5W;^͉VƂ,ZĔ)[ljRL3(WDD;G,AE+5fS#"""~NODNXTRLz" *D$}j̒LX?bʼ;w/Z^w"/4h޽{R>={rb^^Mǎ4lȩSѢ˗iIp'$%o_^D1}Rhhbb8x_,s:ٳ>l;pIHg(YpaI$P+>E7vkCP.)Bt;gfn]p8p8lY6ets7o63.je>|1cp8?&L ㉋˱w*"/NӦ*]]ȤIsф73`7Zyb&0Rhܘ]9~2jb+ktΩSt+=wKpzNL/o вe*%C LOw6mܢw{&5ke:S'ϝte}eTYZ )Wξ$ NvH _mϞʨ'ÆtNY lߞ]|hV_?L(W~v9|ի;6m<-5j̙3lʂ̟ϪU4h?Ш!3ۧR3 |1SOyf0/1,Kk4k6/A߾lI?ƍLNv[ ? '9'Xcپ_&,mNWfko 0q"%JXy Z5mcvj)r?([=:KNZ;uyϵII>mvUդYҥ7XfXdU))T 0mZfޚjw$gv'Kr2E,[Lh#mr!.^4_p]y._8~J7|y;ڬ>wO[K.>\Srի;әj,ڶD BCgOFӹ.'< 3$ϝ|}Ұ!JBh(u2a/зٜ\zyv4rߧ{wԡX1Em[M#%-ڵf)Sl:?<|]ۗ  re~ކ$^=1 ԂLLE % x(-h쵓[yDn kpРA&6ٹ瞣V- vme"ڷ禛 fMz˳ٳLB>z+ŊB,]JJ _~IǎDEQ03{/^d w)^Pc8ϒj }-I ڽL.\h*$9ɓiْҥ)\u3}n͒%)yVQUӢgP>K3J7;v&m_[o٬5JA g2”{5իtfsJKxa MR8Ԭi6I,]mMiƭN3<;;^}ʰx1ʗg>+f%~_Uct)YҪvR%ɓΜ ÑH&dv5رxl?\{}cmQMܹnێg'!`hDㆤT)+U1~Q7ɐ(##9q"yfi" k<Ԩw~ ΅Zn:dֈf+I>,[,]sfaØ;Y >֯>7};?L7R olqFf 7hYl}=O<7x$$Xkv\ݻ-r%̙Cɒ9ɽf\NNeC9S̩o>ϑ#9A__kwFb`\;+o;3k!!w}y4-[] ZŎ,\HTWe m۲p!۶1{65V< 7r65&~'!<8nӦVq֧UF%& .p}^MrL̞=SЈ8,x%J[tʕ<=.ΙO?mRp=Sjw7 ov:-}T׬ڝ?Ȓ#Gm>d@JVvǣc3}z3%;1:FEq挕5Sڶh:~wZ73̘&*F\ϐb޷XE;TcԂZq΍͡ڱ6=\R@[II- 0jh\]?CQʗwiaan70sr * n3@p0nkY)5j|y[ouG7Zbb?G k]^Vt3jGgkѤg0z++_-7rjw|Z̥sg+ZYrHssZgDxEӧ{;…iҍ&yvT0cF93%%lY;w6K4SAs5<鹪MݖԍX IDATFMX}poKH~s*A@ey0iْ1clz=~,a AAz+`uˋ7o%8}ZO֭$%Qf(dzt)Wf> C" *]ڼ2FDmbV'?%lYbbr!lFGmpФ[Źfϳ:dvzu^֭ 0MfۿԜNpi).\`v:=J֭FU={mp wƎ5]<8͚1f`|Y[FUIփ1)-1x$/`+ANq_.J.WDFgqӶO9594k30[ݺYսF528_\IJ QQ6YwyM-J 4`>m&u5wl+c(O̶NZVP:v.$4D+R%ƍ;?zbqع^wߙ\֩çzf6ZGͫ@zq MH'PvÝԣ`>MZeT]\S1{p]}ٳrWo,eQ7q*֤9o;7ֺBI|() <˜˗&Mz~tls-N2 m;mi)R#61i]z6$=1PDLl;S/Oٲr [ӹUl~ƱJLw{DG[uE&mxmTT7FV[)lVeKm˸O2y0}&9{U]KCDTmhۺN>'gZ=K,#69oAT7#tZΝg,j3EF̈́QP;ʔ1kH"G`tx3tb̊[V{#$J]d-Kz͛a X1ΟV{omX` ?cf&ɖq!pUe5M+Vc*7lpK|yv$,k\kv!ݨ)Wnaz QݺVoѣ.mnTAǻY,\O;o?2ҼJ;oc򡴌3t觜¤Inٳ+̙8UZU{LoNɓvZ|L-A5fU€LȑG>lnzue27`HΟW/BBksJGcd2s*޽>IkW"#tfX*Db"]KDD* W_qMs4jDh(Oq#*M>t(??2e ?DԫGx8gϲe SJ$&b>"t<hQ-ʸwfX5kx!o$D3#eZw!>|ӫs̙4jĽr8G3w.'Qp2~S Z}V]#G8zoeXNHf϶nBHH`@w]cLF6׺*˔!0k:Ԝc2jצsgzS5Bx!c.'"¬2ر3XAN.߲vYnY̶m\B|0!1sD ܘ%!9 =eysΞuUiiSD05x-&&6x1ݾ/t:mflZ`C$pCX._mMs%h]{!ШZ-Dj92%H&d2.7x3)ϟi ⣏vbTzLg4x  }flVm7ݔZmᚒQ\~pJ 3fЦ %KHT1o[3iْb(R y=^O;ѡP:/T˅ jQ0(A<4N'WkԨAHaa4mرnc jԠHX?Uߟj(RP*VxM]ѠUD4nLl,+WpQsԘ1L,bܟ*f) DEhْE bEz`jkm|f(_p T)jצS'&NaCҀ;21 U~\В_)k'XuQ`۷{]Ō d<iܘp^_xsh:N"e wc<>pl`z}6D&LHf0߽)\DSEe̩7<0 f"⢾; &P ]ΛǁYjRY* $W_%6|e|5^ )>;"A T"\vNHA;""" JG Q#"Rx4`)Fᎈ9;""ζo*x Q#"""~Nᎈ_2\6lq1KDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDsy}""3ȗdәg pGDJ.ހԘ%"""~Nᎈ9;"""ܐ.^ZR%"# &8%_'dٲy&bciݚҥ˱Cr8r| Aᎈ C/ff)TL>D;""7jո~ڷgOƏ*u<;8̞M۶DFJڼ"Ns;L<}^஻(_BCwolɕw'}fPD߄[^'%ѳ'_}el|9˖q;?1QR∋c,|"Eᎈ eINiVwF >L.lDpO+WP<ӯ\ (( oB$)} |͌֟;v*UxMJ`ضGϝ̝kr r8у5QHc,>Uzg"9Cᎈ 1j02VVfvX&i~ gY[F Z0O;飼ڴa O׋5{p1lС9~"K;"vz_9qlKr8 LY.1e q/Ozw=FHm:zի9}PԡG}\x1~֭=Jb"EP5jР]RN<ڝ_~HQsRc9;"""S#"""~N _s Qk8DDD)?pGDDDs wDDD)?pGDDDs wDDD)?pGDDDszD5=]r:{cR#"~M'QckpC\wg#חԽ)C;b|[n9~*Uػ&M(RmKF;""))}$rԈG*DGDGr\ wDDS(}wb%""E\?s qqԭKX-KӦ ܼlԪaƌ`x0Ə'..ީ[ wDD$%̮N^zڵ=y8p%Kxxv,Wr8{hwgONc^cG67INfl\n%""_?L(W~v9|ի;6m<-5j̙3lʂ̟ϪU4h?Ш!3ۧR+\z# [iӆ֭93O_Ll::1}:EZzd.^ܤR%+viԈ޽YΝ9qd6"#=7U˳…m3LL)Ǝ5/]<8͚1fvm KM7g$HǔV".$/@L cdWr*`Mly'NqK\5uz'zk30)R6&Y74.\)[l=.و?\9]-*Y%& rP˗o89PjUL;Io3vnuwGD$ӌ.)hl `$FEy9|Rq wUh62q#6Gꟓ'笿iJAmh;-P3f$L3fY> cxuV\wT`غ5 zmVլi]*tDD+d ,xLKs4cl:eNXr6NQ=;""ֵ+gϚf%FtK6|e?c ؾG̔%<ƃ0:Dg! 0V7[o+VЯ6y~}5ݺtq~*dgSjw.7ɴ*U09}Ӈn)nzue27`HΟW/BBksJGPt`Nrtl9avC ΤIӵ+\d3Fys "1.]x%""70`0Ch҄瞣Q#BC9}PG3t(??2e ?DԫGx8gϲe SJ$&b>"thSlfH)͛sۮN3iSD05x-&&6x1ݾ/t:yi Xk,ycȶ\n>Wrڕ ]4jdE Q2K HѬHV.̘̂A6,I` QQkG˖f@fΤeKH6'SK7$$yE6m?KԪER 㞭rckԨAHaa4mJڎٶAQ"EbE~& e VUHBC͇UIب JqcbcY+V-L.a[xOVP!J)Kg6[^Ǜo6Ջ34ȬqyyƌKٛc@jwDDL6>q&M֊S#""~qcڷ^xJ|Νuk#L5fRcO\uꐐΝTfϤ-[̇fn@."r37IxIDATyʔ1{=WW_q@c1vGDWN=[ă.75IDuUpGDDDs wDDD)?pGDDDs wDDD)?VcC*QIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/bridge.xmi000066400000000000000000000327551307543307100276150ustar00rootroot00000000000000 umbrello uml modeller http://uml.sf.net 1.5.8 UnicodeUTF8 openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/class.png000066400000000000000000000304131307543307100274420ustar00rootroot00000000000000PNG  IHDR0 IDATx{\L?m*tRY.lHV6Z"UY.YeOE.5)=:|g9.Ǚ\ޟsfuC$HqF nPTtlnzFu C /}[|ѣ4o^`rrA e$`@eg[[̙Z[۟ztLJJ<>L[tMM%#FH!uu䠠ZGGg`utܼE >^}_EȑhrOTWWy )ljbXyբN=**().$%%koMMg{xun %#"-XcݦN355!7%%詧OnrjLc7oL&_Txy$$0hKJ*S4&Kb0ěoϚ*⩩de &2OUc ʺ8]D,ɓ߻W_%jM;VSxVM FhOS** yyx/`xH{4}?c_;`j"Q.ݯtֳ6ȑu񯌌|7M<^%%דx,..!/o|.> mݺd53fl 6FOmKb0ě_7n75ż|ŋq݆P'YOoyhމ2Bb=c?_a@(" BPyjʃPT?RTt! (oǎBC̟M#һ[ohltwӦ^xb;omryC<kju~~,U ϓg-.?ᖖV WЙLm~~ٌ&MZE0dl3 7ʰk}q۷+*:2 -c,4iEqgEE%KaOLdݽKJM\v}=|zmaaJE/ef  s䦼?O pu \9FMM3egKKkvvdc]rr2$r܅ wVWߌ%"@MMq>wPo qygdt%"NTTPMMtދ#Y/? żΝYR]ӧ޿82>A"GBB9ɴ56<}ɿf1T_sѣWIT(p$$-\8LO2/4jj.&,{I+/3L[vW&Z[o277P56\|'SYnҥ2ItBC7;.)&_ w%%CC'Wfb>|(v %KfC@O2 n <5@A*B }n%`8y鉏LVjJ+ (_.t@z<.Yx=/xE>z#@FkJJ[[90 EJb<5'Y_^Dݶ[2/c9hfKKKr`@Η0dx>jbw1NEDQ^d^TU.]`ۮ^M9ELҗKCLGM-½}ޅ q>>:]߭oo~=I]]OX(_qIZBt&!&xdͮ|p\KK}.~71mn^@~~파|X<yƍd[)ANq9nƃcWtŋ;*+o0#f(--㵿ڻuk8򛙘6]L=w.u|-^Nc@jj ^&8lf2LY ˑc&'yPv ꎒqwfo۶N37N`qiik_9rjk 9n!>ٳPߠ /@VVњ5GN"x.S<0䭶BٕUUii)UUZ.--!MշL{{Q mS[0[y PUULș{yʮL MOy`dw]blÉ z>',r^^+C`%&pb4ۛH<~rp |ЦwI^^ەϦK'Li XxV~~YnGeFFAee%z%}>}#%݅ nn{͈a "k8͟o:vh5j8 > .K6=@O2K BPyjʃPT<}46Ӎv I :}AO*3046 E7KIy7mŋȁp\<~=,Dp8ii_)(YH.4+L&39hlwsEEGñe̘œ&(.d>.04+L&ٖ3 46st4w.uuf9vTTfnsLg&LkKmY"1kr.&J6Lƙז3 46 nz5O/X0CS 02ü x q>>:]`n|x{ܿI_,@QQVRYBBs&@GCyM8:pt4=Ⱥx}Pp€F.)DNqtDmu !))>'$rBB55i40ahSuttZX4x }Yoy6FۺuԩkfjmmV&R ( 풂da=tA<(@O2 'BPyjʃPTVy66ΝէCx򏈸[Z{7++/uEE,傂2##*'sзc򌌴IV;wKze^ s"\.͛/ϕ+͛֋;G$ItD͛|mm vrUcǎ4#OW7.qph]~jhh14"S妤Ô)Aea 痱mhc~~YS`hed|11_g,- o~x1FylvB wkjJK}rהiicǎ<}Ryy-[‘ҪETTƏHIyWUU?zMMߣaݻ)K7n|1cq/xC\}+oEZ v%0WYY'..v>&&$@ZZ}j)55y7+]*ʘQa^Ԝ*gg˧OO]/WN۟oyyY1"֭mkcݰ ?WW7Α+-{wٳ;%c:x+Wn޼x݈}?<<&<<#7Ԕ!9sܹSylv`+0d:ϚPXX3Θ#RZZ qC7,V޲evV9XZff>|(onld kdކ`Ɩ N\v2Fc0FXY v%Hzzų6ntciiiihÂ&6Mo\w$55Y)q\LTU\ncc˖-hᄈTWWF#an .il#))!&Fmܹ|t##mc__ߜWмcǹ?خ;Fyy}щ(޽NNy,I.bbEX{ƌQCY9sV}:wqƍs='--wɒh ŋ?~;vD+7ii3HHH;w*_<|] b幹B_5ihw}[}jj.b' ii ʝ{6v$i>/== nzv)SJH_xS\\jjJO]MȮ.NUUijjW_OT alY7''gv%۷\.?㻺8?VzxDCC45o?#J›7vH$`& M5l<:_&1z7ߌ*;>5⤥_,8G+﫯Tիl+3/_ܻrߎY1ϟgqܨG~04~W>}yhI_Syxa0={11Zʳ7WUb…3ow<|:sFyy 1rGm޼x32 ![⠬췓&HOJ0`+oLi::Z Ǵi66>d2&"~aF%o.Nݜ:UGy)99Xy/uu]O?g n;-3POo :{{3+fWwv.MNJKK<@"egG?+.ŵkħG%IDATͰSU/Ku ÛǴ.P_a Xu1<Ȁz!T<5@Aa`)+%@$$Es_)daj=ɮ܋s3Es_yI֓ʽH?1 Y(zIJMmhh{LJd^23 >}{f`0/.ی-- qq]<[ZZ L,ۆy֬9t)>mmӦEMN%EE:̙詽{/&!1[Nnϕ+ˇ$~FVUUsu ?b 66&ښu> ,NN;rr"Kkj&&|m>ۛiiiED;iggIO?]dyq8ܴOǰPؕ+AV݇w>$$ķm[z*:xͷm[gw[[WV]XUk1))3mnn55c! +z `k;JzzĹssL WK6NDtVZZ*((#30:NNn^|k@cc ϢEV>de寢tH4Ac(ʕmm&ZxTRXS522 fe;Ls;# MMl+att‰GE%%>c|II[SY8|1,v[~YYIFԔ&ML<>%ݏ?KLd={SmH߿/YȚNض`ϳƎu:z?ܔ/ߣ>}e˩3UT޼0 pY~{99_wvvۛ=xpXF8}zVFFALL҆ ۷ÇB}7okh_<>GNN++-x.Y2{Jή+y8v2zjH%:]^ؘDE!(zи<_bm!͆10\<@*B PyjʃPwHo= d@*B PyjʃPT I2$C(~ P<=11TދM7*qӓKy#ܹ[ccX<=ZWٶm)m>cWgF^ymv Hy%I$y&Ab>(BW}ųƏ߆9>e0F|x䥕QggÇ#m99%uqp"YYEff~ ozz>R9j"QCcah_߽+ްḮQ~/^+tUe] ~9sߴikLg4aOrrL<^xw[8|8_FfYYվ}UUSTt ԩi VQqf0,s-ΘAZ}4b **ξ[ZZSlƌ &HIBCq#v oSnqVWwTR҉;w7KHDĝX'NN;:tvNN9 ,__ɓ<}z3{ pqҚx72r fW$&%%MH`sAej^t73gn_ݺ535SPp55%O`wϝ mf6qݺc.JE/ef/\Xf\/wxRSsFhhU6Cf2LY ˑc&~sL-- qq]<[ZZY22R] FFx1]` "3ӷgnQQQSSS"9ի#9%<<:;Y'WS6lX;JNN}ݾmR:]t8u+/+ɓ7N0#tP_6bvqiikFodf=NFx]odednvR[`v`y[IPߠ /@VVњ5GN"#*JJ>KH5ۛƌ}jyyN={vˑ#ў&&!!Ƙ10(-RVGȑ<)W^MRUUDL.˶J ** 55JJ]KNNS—ZZlv[}}OL&C^^){ @ijbE)++(+@UU=rj~Pp€F.)DW  IVlݲevlv[X5WUU74R5Y[X[ M).FKutt"ͼ1' ^T""!!zNV?9+6644#+**3#Օ:::h##mccY$&6&LM>}N=STTp/66&%]22t%%yqqqB^^PCjM;VSx'7.ξ}ee66&ɓ߻C<##i!]uuzCf:' <^UUkyw9:::O@fzh{{3ǏYf]og`0n%S1cO(cWI:]pREYAܹ[_;l3!bb~_ +ի/]_Y֭gH`#Gǿ224yx\̨Dƍ=49h7KJ>LLOoz5zdYeh:ggKт-[Ŋ@"OHIywv^{{3oydovK +Yf-:thj"w5|c?_a@$E PE撂  <5@A*B PyjʃPT`H?#$>bIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/collaboration.png000066400000000000000000000113641307543307100311710ustar00rootroot00000000000000PNG  IHDRCA!bKGD pHYs  tIMEIDATxy\羇!1@di-8"hD܊[R,R=nVPhZVbOkpY"D $ bj! e23w&@P{dC( c)0 !DP_(!=64Ht0h0 dLdL&`N$qR!JMvs ޽ k\bONN lzGGׄ +o#g,Jbkc@tA[Pە+Z_$Q=>N+UkgەA誮'vʼn~!.zOǏoh22 ϞeDrNhuN4ȑ -H:(,M–yP*zGǀm۾3#on߳[KKocEi/޽ !c} XXxFFV[ellƘ-54t<ê!OWcjx'O'Om_@gְreLB;;n9>^$(J7oN`v+Ql[o٧FL2NnIe]}e  ơC[Ϝ68eEbff\Sś'O^TxW Q6OE/30Џ9qcb~[*0Ύ!$)isnnΝ+]'[}W NNc|}+['!v}kjjTZZm`Orͪc}+VʊWm_ffIkMsZnqNFF^xOƒ{uu ~~B>++lTFJJs|gk'NdxkY$ IM1cT Q6:]~)=^͠g,\,n34dxv !r!kk{A9{#NN+ ]\!YY?%%e޼yiii2b8**jܹs })!$!!޽{qqqnLL dmm5k|eG s~/^轰@ X|yIII&m߾}ҤIFFFSLYp۷1o2!$333::~!駟?~L >KLLLF[[ۈgn۶^չs"##^bccݲe٥KΜ9SYY@988| I}KGok3gЏ/\;iҥW^tqqtcsso,|||.^{U?t2ťn_|D")++:uj[[~9smۡC,YB:d3áXDŽ]]N:{ڍbQUlvWW!hȑt;hmmmhhx7l6nee%#G\p᫯RBq5jLKK/Najj*h>|k```jj"HL&!/_bnn>d\zϻ% +wvvinn&477_v'kkk]RRRggg8`0{BHWWWzzzSsrr8`bbIg;LOJL@ yԩS`ǎ.}l޼yaaat{BBBvvڵky<|KKH$Yt)~~~22 B9v=edfϱqD0sUAAwdffZj̙/F, p|}}׭[96&#J;::NnYf ѣGzL{Ԧ ٬ XF dyϸښf/X#00bM>喕UUU~,+((ƍbX٪lllX,ݻwxEE֭[uuu9ΦM~򪪪 &9jԨW ·wP0 Mg!*L~] 0p<kT'nT)Hd2Ygg|'A *LVxsnBӧ|~ttG|P(TlY;NiCp/P05{U0nw0jd0N(LF,Ffܥ `m`2d ^G}ZkkCci<| gndd2&c#a2&#&Cf@ dX0 LF, 3&`2b `20 LZ%3&`2PXF df@ `2@ X0@f2Ld&@AMFM^Bu L }ܰW1d`2&`2&VN$q@3˻,f;:DGkous (7rc0fybi T$#P*L,.>YH'w ΫGFcRRPx+W G`2菬ErRt椈of}jjĔ)䖌k`322{|kiml366Fťd2lޛmg#P>ܸq'##/<ܧwcIɽ??Tp[}W NNc|}ߺUww)vvܖՏ! _͛e?:{ cEEr̈́7.׌ sr !,\,n34dxv 2701Y2mpӝ`2xě !O4tI fyjvBá{Μ[~EEOS`2xex<[KKrr< ٷo׮]w?yܒ%3"iTY-s;v, ;&<:::'Mkho(*X&bE)z1==n/+{pzDҭ2 eʐJIwW_q}8+!W4Ҍ-[{gϷ11'?ﰳyǏ齌MXԩ5r뤮nBH[[{HHryyL&7*=}Fe|O>9NQc`MSC3DM4B&o4tew<@ |={\cH!!M]̮k׮ vkjdb0qsIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/composite.png000066400000000000000000000276541307543307100303540ustar00rootroot00000000000000PNG  IHDRik IDATxgXҤREQDQ;*@CDD&1v["vcc,^%vEwQP.}?ٗas_|؝9݇3;g8|>XpDha КRxXc 2`l ; d6@v`l ; d6@v`l ; d6@v`l ; d6@v`l ; d6u狺b@l_#qh!"@Dq+ñu ĆؾFw`@v  s]]g%%{SS36]qïuC&d*..3f˗m3thϊݻ*(ȋi͆߹YTTҵ5!;$ӧrUׅqҺM\*?~ϾQSsPWw9/<<ȑk]6cD]]C$&>{e!]۶cfh.q UL! ??MMݔGՅ sRU^5͛_wA @vH40 lMDWeIC;wn#{yDI,.ONΟ={_޽LOQFƻr_߱ee;waj^^k_>|DiQDD$qѣRTT6iiq?gx. dDx>x(&&mɒ}Dtܚ}~8}zyA=yGDQQkN:*/Yq8"z4i~z^Dat loJJӞW;h׮y}Ն Qttjj߿[DԿMfo4X>l0{r5:}vUUI[f "PWW ugDdhp$WHDݻwWv̶HGה.ԽizzE'oUTTرK7UEE(,,z, !:v4 ʪ}.L6|ի |?(e]>1ή'IJzQޝ321wF 5Z}o"bF";ƍVTTi5={@D֦-Տ mui>>vED$ׯO89ٮZu0>>eɓAAA9ֹ66PMD$''7caz9OeeɟߍX8S`~D4bDUz"^eݺ|:"""?PW |3 u>0ܼӈnK:^p?$$/ܽ9`ۅDF&ѿwNȑ}ƍrX?_ د_"2ufo߅ta^vv=ފ/޸ljahOb|N&tpy0_ ?_gRd"-1|>q8bqN*%b ! "jߗťcD*WV^U A>zܡ9ñ;wn<14qGddڵBCff樫eZU_o.ﵴmwFN:zQ B̸*Lrb~ⲨU<{II͛ϝ[#;\YGEܿ`HG@0BN,kKKHNzu23ON8ƚY23s׶i3FIɾsg]Xm=zLa};,-.]zHD+Vp񩣁]fUqދwDz4mmUìRܹ… gذ}lv_.ikcdmbΜnnuc%##ajjRΟ|bVzz|iݺY\,Xxݻ}M||zA~p KItpY듟O١HL|ijSS3} i:33 scvQudmW}}파wxWMMu"*,,OoH\cVN,++`j)@j#;ZRܻw1K{ѡk߾*<={l}dknnz#=z996\68p)7pKWךceK'dN77{uu7'h5ztJQVV lv/4Zyݻ|vW>Cyy瓓ƍ~;?<|x'Ob{2g߸/>rdia￟0vK(,,.-퍣͛[?߷pLLyfȾVť|,'@WYWyйIIm]]g^M/f\཯?q^GCC%,,؞<ի,Z'(hUG혗W "Owf.%"tK|g[ԩSCR]t'x<}[2utxW>{֭']KyCB¸\Ց#X9,,>,,n g"~=H{Wi+,,ӢYE"sv||z9߽矈k뚨$ CRik󴵉ڵk]ߚׯ?2SVvMJJ DΠ [̓[ C\j}G3}}휜LDqLfYDJɮ]gw(H4Hgڷ3K99ssYDDի|~^^3[eeUVV"'ڵ "IFѥK,ؽ~," k׮u֚na:uj`޾ b6)~0ZNÌll,f~/wgD$// NSsTxxbX 8;/r/#(hs#,,Np0?uta"f-O 0yY|!aA)q̨ Q - !0- c }P>U'@(2=jD|HdvbxxC6RM  =$Czmp0l ;:zH2d4` >$@vH t00L`!]$nC!;!iCZHDAv !&8 6N =$CIep0bl ;$:z7dLR?``!ƐHFW`!idjC,!; dDAC2 ćAv !! 6b0`!0b! @|@v+ :H!; dX 0dAp|ć ; d =D!N!>l ;CBv n?..zR܆;Dvu ZNHI}O6Jh]- g6.#ȑ~**#9usd(ܹnBv4?KK/nmRƍǮ\y0f)S"#=UpE\KJn|~݁Dݴ\Y/r~#0omڌQRc׮32[ѭΝs5"ھcr_izs(--^[ZZޯErrիnޖyraDuɫ\.Yِ}}NWQ8?==kڴumێW?׍Ϙ(|ŊƮ ަj,^.=dp_Jفr;9wlp36l~y4>͊ޓ'J9sÕ+hx;ss#"63g(çwEF;"Zz6YaVZZng7.iN2dʿO__}jH+M[S Xm߾ nncL325P͛ϖ/_^^tĎ ^hŜ9~)eY{ѩjjʇ-VQi7֭ 5˅_ߨXVV^^^q+Wg1oƦ }Ӧ٢~$##ajjP Ʀ)(ȇljZeџ^ !e\yʢE{V>X^^qoJJjjIugVGy\n~u CC /**!"UV')h?d:8,_ED'Oj॔!IM$'&'gTTT|AA33sA+[s#1񕱱~hZ,-M秧dG^Dܹ=FDJJ %%e傢LL^zzVz >CN5m:"jJqժWjTPgA!$FFzD;B^îbYY[а?s'B~hkU__;#ݢE{.^USS әՈL""chZB>ZYرKJ^n}+**;"/(**%8@쐓#*n/e@vE26o577M[ȑ}=Ԝloʪ*/>][PV{3fɽ{/:tp۷sYYœ'g]ܫSvqq/ 0[D1R0hѩ*W?D̛::HWWvDt,r`}/DҖ(/22IYY)4tCllڲeɢ/@D'2eTEE)޸l^n{Kqr}pʍ=RH&wYYywb WϞ%XXt8sfu۶: ަVVJ]Xpϕ+z.]yݻ|vWHY;! 'ܞWtѣ ކ[HcB`l ; +)+id1! +/quHazW7b"+ŸYE8'%HHВ5hIL |l`DMAvK=:Q@8 o])fرO4ҥKoW>d ӳs¯QT_KГIIIY~-[>#FېWUU˳ Q ƺ$%%򼼼 6ܺuhݺuD)Sxf&Myebcc \\.ձc<8,,`ٲe&&&nݪ۷EՆٳ|"T'b/))9y[~gf3g,Yr ++k6P377 ٶm۩Sۉ'*++Ϟ={UmmK V{-[=X:d'0:͏ qqY9;.#=raÆ 6l^7oQBB-ZAD@&Nhll4nܸKLLUPPhݺGGǏNDaaa ,PWWWRRw3`VSUU%֮,4yjooǡC{2w_ϞUYY`pڥK=M[7ztIVO~ӦM#UVٳYIDo޼x<^s BDUU YYY'ڵkWg9D)xHCC#??"RTT]#Ĥ}ݶ ~i?Oܝ0a(Ξ& hUQQy{ޟ =)\996mTTOO/??_fGGGBAA\u VVyaFa#Ʀ5κun,+ ;;s3سWsnJlf6sH;55syNfIsn<…_ps5k#ɓ8 4y(n \~ܗ_~9hР%Kl ' ˓&M6mUW ߰a¸q 4iҤG5 4'ĉDTYY^WיY +3ae}DHH}DDҝ;oߞbڭq5>tV**V:jԂۿc.;6c e|~f hhUƋd ;w>}tZZZVĉƏ?fnKzыӧuk++^߼xZBGG"JO .ܨׯeĤmqqi^^S\–ָ eaa>&ȎikYYyrڵo͔LO5!!pw%"CCݜr)/b**~ZYuq!&&ڬOR(Г;Saa1CF젠fMי37{ODo/>>v9֦],))[x}Ivt }Z}ɍOl zR!;Sn~~>h!C:R^^̝uXUTTBDn~srw_Ys괴7zz.擺tyoUO04!sg" O|6YR/t'$;v?jDˡͨ=(dc%,##="JM42ҫ(1MF!;d$ !4R8l`_q 'l'0z%E#ΞL-wo*|!!aRWeeՂ-b.]9N ,e„-W Rٳw44z8Ъڵ'?L0`6ZZKJʈ(55s}9 C?~`WaJ|>yNfIsn-;vYv_Pgffnm), |99rY\il [Ή?c5j=O/\%<77Y62 !;$X֚NN6\&ңGC==?'#"6lҪukUK̠sr ?|83TTZkW0w33sjfYiiǒM04))>#6=5XYu1bbҬ !׬96y찶6gIIYVV{ohmmjjjci"*++ߺڅs8dnnp^ a[Zt9swDMkӔh7:94g!;$Õ+ n׮59:-퍞.]:l[c+sʣGC2dm%wf7oz{2ZЩS+ܹ\GUEE%D4ox<'w5j=5L04!U\Knxx۷>oq{`v8}~ u%38vςȎZӳ(55H)b ف@v`l ;۷ۮDGͲc  /]&d4N╗WOI[Q7d C:tEKktTTDQd C:Ӯ]mN- [OYY޾wtt! ***D -i 'T diZZZ.ꆀ AvHt&0o-l ; d6)-M~3\GEjC.Nn ^vu𶬵D$ N~N__4!ٳmb !22ujU _^L0T$۶\u>  ٵ댙WRS3G^98_¬֥[ۙ<^»w'q5f7or;m;vɒfg{zur{Y>h++Ok76ow !ՠAm.?{oEҰ=__o7֭ )4dڽ﫯Ow?nP__'3dt􁈈s ּvɥK}eƍ[ZYYx͛SzzZ'f޺0?w5fˢKbb\"$$""܉ܵku3bq]WVV1ް|"y͚i ~~M385V$ |h;hrO6)7;r_gkiqyabҶ4/T>եpv`ݻ--n`͛QP-tt!,mm6vQUjzOPWWUevh %%E4LPNh;E !sr HNPQiU{Q'*W_&$dc8DdhSt7N__;7BQQ23sX%,RڴkWc%%eYYyqsoU~,fܘODg!b͍8AA!&66]g]>EF& 55|ֿ?6n˗nxc,R9:-퍞.]:lVORTT:ob߾ ^;d`SV˙sJ<V'O~1^||zu}g6O/q㩓M5q!;dKNu3galww=YkO-S݉U9rCw~lܯd`UU4UL|||VRRRҖ,Y罹ٳg6lͭTƟ0O>:u_|1w܈$:K.M>}֭7?cu޼yLO 'NP=X3!1(Z@YfHq m\HOU%X3$BV|^/&}vkB:_)9 >ZՈlM`dI&jX]"'}~ WwY6-z(kߥ4>ccc̙Cˍ7޽}6m4~y_>nݺꏿF*WÇ ;<}9.]prSJ 5_blZ(b8J -]=Wb4lM(q24' ZBTΎ_ c8W]Mj?;{]zuذaeʔy7Ο?D?a/_F{!%%СC}~~>tqvNY#PWv=Id9~1If*qۇ$W@JNx[*5?D[ڧI=~ɮ&sSZk׮9̍5)88ҥKyzv7|}_ϲʏE>=-33/Ν;}||?~|常8K#j^A<=i"#`_~"WXpwאn*/.=MK ;vA9L <"G`c[S vtx=!$>ae}\C;OT(׿];~?m.nYH|Iٲe=7?GDD_?8="/,;w.00PB ۷o/_6i$aÆl}]{=}Lb -]Yt/ɟjWiOp~Ϭ,=MRi [s K&L+OٳqƵk޺uҥK۷k4S|||͛r{Wc Ř1cZ~333Oz65=Wh.@{θ߿O }۾}8c7`k.]:iҤ˗/ ©ع#F^z?jժgviݺuߺuknn.ApppHHȩS{Co߾2|m۶u֍b k2?aZrʭ[hΝ;sI޽ӧoRR [ڵ'LJGcA>Jc1n2eرkO>tDw޵|߆lƞRo{QLb78E֯_z̦{l%€bŋ=q-4mڔ6d=dL\R.~Yo\eg~vxQl 3,˗g Pgmo!DUwbV/KgIaF dlv-tFkz*͆5MuO38uKݧgt=KIGyEW\˗Ir HY<{ݳcfc|os֭[;^zYYY2Ϳlٲ'=6Şj׮݁$I͖߿ю;*L[C?jժV~ ͛4im`cȲkH6Ec:S=G}n-ůgc7_[ -Or±1Ҩ@,J K$i$HݓlSZg\zTY$¹=pG]sjJB5$-fM5x*BS~iX#ch~mbP0s4=@'pX0vjHoR#_{V- źgۅ{?/B:MRJ-ZԧO7ͭXAKO~֭_}ҥNÄfׯoswҤIɤsc AN:d(lG<&i~R>ٳ6=V/|m_? ~L7ʼՓ]= &e|/ 2L7go:1rT:K>L "mJf-Nc6 KExExU xU*@ "ï:K>{~ &x(U`eO$yz޴IUc/aVaN!b,V*fûU e6{Fg6maZeF DȹX {kx`UŦb̧z߽?+4x=Zu v8/]՝X5xV}ٚힾ_Vx~jVV̱U&]y4C<@ 9sZcڼdߚ5k_pɓ'nt,=zUֱ߇ߦMG}s]xUn ;wnʔ)+V̤N߿7uo3$?Ӝ9sز{ {忕H'oطoĉ+WJ*hW^m[W\ٿ?Κ5k쨩ۮNcpǎޣ53f^Lhn|bI"00ݻf(NW\F]v6ԩSQQ /Э[7+x___{R} [TS*eO&&{kqAnݻFh-./K){!ԙy ?v^+xެpL,Ux J>8o^ŗɬwO7 *q9b演i4[ JvO_ Y3%bݓ5k^[%#*~*`O{ջy69E&4&v❚ eܸڤ3BVJiͷ YErHxv=ZxP ݳz9L%I教fy\}+EU=Qd}"G)VR9l)(XiRInα6Efgբt1js68O'=|jLzmժUvݟ Vhܹ]haذa}6ɣ/Ǎwȑ6mhO>dʔ)\tb{OIIa 4'J7o^tt47< ӧ6 ?g-[*..?u>[_485j% ^Gۀzf͚; 3,((h߾C .W^MٰaE0 `ƍleZGaw)&L:ܹsEEEk׮ݻ½ҥ v۶mݺu0`+ƎGz[7nm{Q9/ |b^֯_oQ!>ٔa40|76Ջ߀t=ه_unB!7W6^k*'<g2'iԩTj~|Co\6>GkwtoǠܓb6VtϪi _J"PanwzɃvŞVovkfNZ0 w!B{G! gy&##qaaa'Olذ2}|M|urK7 ʿe'==M6]vVZrrrbbѣi}uСt/^|}vv=z6@~c޽{GDD϶oN $g}FUTOb>}FFF… J_ҥŋ-PfA9ӧ)v{-Sƍ={6<?5+;Vڰa[*zK/Y]ԯ_ѢEwپ-Pft *3??L2ߏ?ޤI{P-pU2|T̝'#ۗ[M@,e l?:b˖-lTMfۂNA}T[N) \HKKS,A~e<=Ht%uu,*@~mKŇꄻ-ȯ &XJll ? ݞ^*C"QU?#^G! ?``!fC, w;/g>}6oPo8!\ 7uf3## "h$ųD8=W`atHE":pYaSG-F ǵpU\_Q_ï33zPYh^c՚0E O+Xaϸy櫯* {swܹv˖-c_XLNu%Ywkժu!ܖڵ=zti\rϟZ*1Æ 3gyOO>eoŋ'ӦM & ɓ'>>>wД~'AqF)&&&/?3:|+T@ҚVZ7&l[M1 2A7o&& Y~}˖-5QoǏݻw/~DN5Ç_v-6\C׮]9r$9:yyy5j`e˖գ4;w^z/^[.[#tf{ laʔ)lO?]p!m)ld͚5 ,8qp+VX|9[piv;OƌC&w}/]4m3Ϝ={V&%%{KQj(jǏ~mZ``:ucŊ<e˖T&JVb?%Ѭyg̘1i$u֭c'&QfA  駟ШQLZh֬%-3Ѷm[Jhe\\' ` /q>w ן9s6ܹs+IҝfrPF(Y-* ~+HX -Zlb;v^ɓ'ZotMYex-{z]@{~,wz`yo3ڿ^=ԑy_T*WS=ڷ.kKq G'uᩪ[O0B*9Na=ل@~Oca6!3!s%I~p^zM ䷹ #y-t@~/~ưJu3[ x;/mu@~<*i(__/2a=NQJvH% zAH2toՂ`@6e2fu#zrTƪrNOjz<mPs80>/iր'18·AF)tU׎k׉?$j&SmiҤ篂T~F wW_}Uaݘ0a_|/h5k^rAO~䉒^_tIt *//F]|9 w^``/x7noܸ1##{{/+-Z4jԨ;vdgg׭[gzs=m۶6mL8|jҝn1"))K.;wɩ\rbb޽{l^z_#6/e֩SUXXvb ۸iӦ =ىW4IؙΝK'#={Of_|reLL 3 sbׁ}͛7y%''O:u͚5WlEW毉"Q+W ,h?f̘3fp0`gd][Rv_Q~ݺuVd墢"Z6;ʧ0 IsH̙CFQ޽{ӧO$o%B=zѕYL /PI ]v%6lЦ/.]Y6X8?5je2oKHH7n)ccc˧tl׮]˟S$ Cv,&l!'')9r/B3.2 qe]<أ Y`R78SX<#=r\Z3MӀgj{ '9曅9o͒xn `YjugBդ*7y0@0DߎLD{?=:v^z z|M5k{ٳg+ֱz 2cJ|?۷iyȑyyy_~~~~;~}]hQժUrrr2l&$n֬پ}ԩC1ԩSժU#;^z[Q oڵkveaÆC2( /̙3Q,k6#իccc>|H@@@ڂz ?~Qzu,]tQQѨQ̗.] /曫VO^~e7k3''hOahӦM?[oթS'Qˆ7M'OhN2NBݧOʦX,=""ù… )q½{(RX's$;((aжm۔޹5;D2eʰ5Z̴Ăܦ_u7n|lr | 3f &..nҤI*UpBHHܦ"a ӦMY G:;guңJ*T{+//h=zuSSSO<ٱc o5vN ?`9sbĥKh]穝ѣG;)0|`>!g>|xbZ{.; _f͂/*yJTvjڴ8cǎ۷İPB/e,RdeeݻwΝGfb0 g}}}Ǎ'?#񻠐N9i!S10d/2mhd/ȯG`>)-z)ɯ}.`> %-zx-h2_⯋`^aw[vB.boW]0P.|@9p~kDu//]߆ڕ9i.qlB5w/R`>`> ea;`>`.ې߂s~`>` e?(|d>~0Q{9 |SxF9`Y`YutGjr38R}0tD}0߰8 ?o~j k` xX7H1/2+z`Ud9zs1 ]}_@ Z9ɦM?ֵ*CE~0 sY~l"}}yZɋk?]u`YϢLD`>8o| LD?uuK0UZ]xf#jy&r0^+ʃྺ߼nUw_XwTt|cTzjt|@~gBԬYʕ+ 48}'O$`ppKtZjaaann5k飤nݺ5xM6` չs].[}8paþ;%˗/WBEEE^^^|6*iO]CJJ Sˆ#tsNrʕ+'&&ݻٳ[^֯_ϼ?44{ǏPl:ueeeB2=M6B5X→رc?ܖI+[jEiTZN<5շo_ zIվ}hݻw=|cǎEXBjj*mн{[ڵ_dQfƌnRE5*22rǎuu/H<ƍʒ~ӡC Z}6 @κr [@~Lk 0 FA͜9sܸqrȑ-[jJk׮ݰap}WXAFr]~,__9sph xRhY{ŋl_'Nܿ?ў +>>>62335kƖrNl$Gd gf _} x--[3f֬YvKOIիG kA]OKK;p[%A0a+316ȥ/_Nlݺu||'|"/Ņ2e0`k8wQŋF.Ν;Q [`UDkԨ!$3UeT42իWd/(:k׮9JXooo*8$`FO>2ϻwﲯ7&󬜦N=(7|JEprb PZ!d~BB[ozjS@}sT{kPQM5}ݶmq{=bkbbbAAAM]z} U5EjժQ*?Ab>Y+ٳ͛7"4/*%R0r8Z݄gߛ6mj` * g;m۶ePjXIeQXXXbEPϧßyv IIIVkNBKXf$l!++|lSNqSFeTO)ּ<7YF|';BGٞZ-tf{a PΜ9í!'ӸAmܹ•;o!,,ƞ+Wn}HH( \:e<fp\ȯLL`yKE5SI5_^8g^kVJSuJ~$J r\ݑ}B~̼`3kxf'8%FBN|U@R]M`~ɎkѮ:A*pZ+'^ K7;OAuUT8=1 \ubJJM(*o=w,1͓sx¿| ߛ|5|6tw/b5B{,͛H|M|+D='^q<7,fڻI_lH{ޜ'$?3m0dQ6h:PWz6i#]c`=m׍c`=iC! TXOR_h"Ⱦ} @g>z T3_Qzb@X h[YϪ+~_\ zgw<4E[Czd̗6['aa[USXs*&BZ B.tm@XO!kYSAh| f=P.h6X ֓J~n3u_]XϢ4n@DO`MQ5/Y.@N]I=H~io뙐V"G;z?Ib=b ʻ1.E~c|W_v{0a_|a΢lI&iiiyUYO>t,..^z7mdPkՂdѸyN{ΐzB/**R6m}޼y3''ǐ#9-Z4jԨ;vdgg׭[gzs=m۶6mL<"zbbbtt4^7j{_|ųg޸q#??ƍLcǎ8s>ieVN>]V'Or!o߾ɓ'mvÎ;Қ;wvYBjj*mн{[ڵK >vl2R~'[  -oʔ)fϞ=KNN:u* T7 4sqrHHȑ#Gܹ%F^wH1]vÆ ۷_bEi\rׯ_rks'ڳ>}ZT)ZЫW/ xbb>ĉO`C5˔)Cr_9f6oѣ@՝b:u\~=1a(7߿/\vKĐ窒;r? p/2I0Q g z t:UI`=iim+hke`>ڛ`>&W`>͟^Flj &x(B. ߜӍ ɯ'|@lR/FU}0|6i`>`>[2al:r<8j>H{<)&B~0'Q YU\sz%VrَyfbUW\8 z`>P~^3u侢!|@>çSd֥4Rg=0:Źt-ھWs70R9`.]'[뾰^t=|^nKŞң#nW-z6A{߅CCڃxMIm5i7--MqQ׬Yʕ+ 48}'OX\\\z |%7Zّaȇ:wܵke˖6lw}M._OeeWF~{gϞqF~~ƍFqΪj~7ˆ#tsΜʕ+'&&ݻęBkPj*//ѣG?BٲeԩCUXXH$/]4߶6c AfΜ9n8Z 9rȝ;w۴iŝ={5 b_ժUhC ۷dVZ\(.PAAk 0 f[Xld i-SI"F^8oe˝:uߟ-̞=-|Wd-Z[ /UԘ1cf͚%r,|@Fn؈yv?n䫦ݨ,o9ŋqiG1+WO֬Yc}@.$$$[We___JY:k.R\cD7G ޽˾6nܘVZϟgQcŊ]уzZx7҄-P4 pзo PZ!f,o`I!0Ƿmۖ<\̙3$J2ȕ'm2yd*ijl///Z ~̟?5Boڴ6TDFF8p~±2-==544TDZ16+P9di9-[;l/lɓ'Pu4;y@I;z*J3b6XAg A{Yƀ`>zBf$E'jcYϹ|ӑŌIW-Z}^ eY}@/򥗙6m޺d=0W߃m9 |+:%1cR1Sa=I8U什f`1gp6B*z}Z? +v{ 󺬞wLLN$>`j7 DxH&RzS\y_xT\Sz虘<z{yߒ8P}؛4a-@@zA)V05@zH>TTj/c8=$_;>h?x`޽\BUV-_͛7sss髷c2dȭ[6mڢEM6AƔ|ھK.)))韗۷СC;mZ1ӧO/_>`X;$>7o w}7))[j ٳrlѣGSf͚ۓڵ+''J*nݺnݺÇ?ݻ_ڪUWvI˖-yΝ;Cjjjddd^^3}TR۷o9Տ\t׿hW~m-Zظqjժfwܩ]6uO45Yv-}4Hiii+V߿?ƍ!!!UVr }rI]6lI,eQQC$$۷oEUx6mtTLzE=?SJ/80`ݻϙ3VZ\BϬYƍǭ|ɳ>J@˖-;7r|||b6$m֬_n AAA3fXlل :uodSegꫯ_T~Ea寿:NL=!'.[HP@_LB?իW_~{TAtttLLɓkwsΑȱZϏɡ]ry%awهǏ׮]۳g߳gOoo5j ڒʕ+>qx̘1>4iR`` _m֣GK}*i @k +VHLLUQ=Zzuĉo&-POp:ut\ժU۷o>}'t|'$$P>[oZٳ͛7+WPn NT܇wM8>/zmSCOqqqKfk/^LKBȿ۟襤ÇKr8oѢ׹5$>wr>Ԯ];++[n֬٩S4h iŊׯN޽-[he||A(c(UgSB |>h'M,IϜ9|bج[ L_رk<y#q`$v TAAP}-Z y_b߂_|ڏi^@3j?zT0C{(_=*L5 פ]RzX W%C F-T!i|B7Jy# P}_q_" PbMtcF":msQt(7$f]jꪯ>V&Z;` PTi?@zP}p @JnGq_tS={6o^P}@( <%=`bf:Tб#Wf1@P}@N?>`hmr:18@K>"5RėPTМ#.%~J^ >F T%̩J|^őuI@SBi-~1"C%=@ujut^xxO>W̫~=@UH Zp?$.Ea0y~=a-O @D[E0/OuC @pp~fq C|TCӎaNo k'a8q?T!>®r޽ofƍw ֭[tt4-\qqqӧO de= NP}cK>{l6m(cō7f볳gΜVL~aÆX~7o޺ukZyf*U{4oNP}#WZ.a:tT݀OTc-Z(&&fժU۶m.+VO).g„ GÇ3f8s iӦLm_~9sTVAޭ[M|/vyʔ)M4pر>,%%vGO86ذaC||<[@U&9x {[l6۷oJh:ux ?Y ^8ߣZW^r6P}]Q믿4h@Qzj*S*Wyf*h۷) 믿NĉLBgvʖ-}sJ -Z\RzuZCa{ԩYYYJzرc)^׬YE^سgW\_lBbѣZZsݺu?yi;v]P95b}֫WO~r]|[YB ,ٓ}BBB25ͣ;2<<<22r֭,첨ڷo_Lqv…G$TN-SxP d׮]J*ڨ{kמ5kz+5[p?E۶m甔f͚9>3f((("jJ8PQB%Kff&pᦊf hyIϟMUӧAAAK,yXƍT1pXSoxrJ:uԭ[n<hW//GRYF11b?YfQ5fl)~8@yJZvݻ37|p Uے TvPD.,,ܱc tTPP,6;[ ە7mڴo>]6mj8@LA*()(S涉+[Z uٰaC˖-Yإgee1''NU)q<=>ՇU-*Ffv/LB>S*1Gm7bv*''`-<P} k&=F6ZtNl1W/~7A}^E7m(!U/)Ep\ $'P}^0y~0 JN*0ȼs`(M5U|AU,1|.~ptė"*{.a=j*DXbؤS߮S]߳8@̀PP}0FP{p?T8=XuWr$!{j5NP}=%8@p=C `/\~Tĺ|OoikitT ЎL^#-RPr?Kp iE}{߄P}..% R\ wT_J:TI9$#P}[%w'; %~u/b@;A. ߃[;H-W=BKp>Ld{p?B9E#rxQCY:?Be'wM0A#A֨gvO38mY93*\=>;s vӄ~ B0^S6Ԯ#JN_D[M?L#)S'\EVCЧ#*r)~=>>^#ל@#aS}\,8#3~S} :Ç۴iSjk׮)ӌ?==u6,sNF߽{曍7ݽ{'44[nѴ`HsM>2dOߵ>ܢ&MԨQ#//Oy\Ӳ>~gϞG/nܸ1[=s̰2eo 64׼ysJLi͛UTy~zR}}}穩zשS7+UmpΝ/Rrj~~~PPP?裶m۲ iʕ+^^^͚5#"*Yfq?W.a:t!&D%EbbbVZm6NɌ+Vhd(-ӧτ &&&=Çg̘qaӦMi= -9C{|̙SZ5WDDDFFƭ[M|/vyʔ)G e}8vg}B;'Nslذ!>>j}Z 5~v}˖-IzѣG[jEiu~'ZÇW\cǎ{\dɻKq\ӧOccc)E5jԂ h eDҥKv8M~|4dA}IshР.uT"Wl޼M6ۤ$''믓68qIzI۵kWl۷ϝ;R|%E?իW5%x{{O:TRO<;v, 5k֤5_}xiϟrJ6t2**_~9FR}R \뚫]v-**\vڳf͢b#2pgBx%,3WI~r]|P8={r'$$ߟ-Tϛ7j:ᑑ[neDo߾ld~….EGG'%%,ɥD Őp?q%NoK5(ɥ4QF}<m۶?sJJJfߌ3 ƥR-bnHm-!VSm]vyIϟӧO ,YkIH &VJҥK5kD%[lC K6$$u  ۴ʻN:111uֵ+'O6m )S7*Uv…~VZE ]tp'MdI@nt5j,M{nݺ޽{KB ʪ&6J(ɏ[h9rH9ZO|~:}'iKn:dbŊ=:}tdԩS^J7h1OUV޿_~$W^f۶m7n$CӇt~Ao֬m?b__f*((Xf ֞w)!!o% =rȌ3nݺ5tPC}ɥϟ[^ܿoꫯ:F(8~x U )P\s¯WnZLOh}8qVZrlٲ%//2eʴknΝt'VPfP3+D4x aדWTkZ/޽;~~~Ç'O;vR6I*HJ,6;[ 7mDH{ߵkWӦM]Áh:ڀ-WTZfÆ -[d/ʪoJS1m-<=^ +--8:R`хMkpUJW B:W0b^V V+35gXBaFD{mOJ ]9:V`$io|U_*&TfJqPSՙ3I+~ 4#(Cp?ͫz/KPCPCQCPܛXQC~ NC -qD]p&/@0Hz=J G0W@б;Z 7[@lF߹YGQ>6C'>{3|(J!(хL%P}'y@$<@u<) >o,TP(=H~rixdN{ F6@㵾x-| Z㨻$p$ ˼M-s?> BQ~JSG[ZQQ \ZO=e|sb.i. q5q j= P{zI= 2iw4Ts!S8"P}@̕nӦMժU]N322֭[߿_So`ݻ7lܸݻ>>>ݺu+..n!C=>@u&MԨQ#//O)<) 'wYJ I{xƍ3g +SoְaC#Y_~͛7Ĕ}yf*U{4~+MP}0(SSSSoWTΝ;_~%AAA۷裏ڶm6믿+Wxyy5k֌B;bSH;t@LJEĬZj۶m.VXA?PZЧO &sMLL=zΘ1̙3ɦMzZ+j3''/ϙ3Zj[nM6m/^ ܹ)S(pر>,%%vGO8gnذ!>>z"~v}˖-y6`G=zUVTҭ[~5<>|xʕ;vg:%K$Xl}ill,GFZ`Jzҥ) gee1q~IshР.uT%cl޼M6ۤ$''믓68qIzI۵kWl۷ϝ;R|1E?իW5%x{{O:TRO<;v, 5k֤5_}xoϟrJQʨ_~)['I'Tuk׮EEETZQ8c+6ZvYfQEE>iD3z٘$.W˗I *3ٳ'/}BBB2i*IyС[u\L˖I.\Hy`tttRR>P]β j=>:Í7aqى0o/UlQF}l_mNIIi֬#1cFAAոTRW9@51U̙-uĎ n5ڵϓ'Os_=}mdɒ^{MB^@VJM!ҥK5kDe lLJJ.m@TyשS'&&nݺvpӦM#A2e GJ.\ VZE ]tKɓ&M$xxxx} O^ti5fۦ{={\n]޽%TL :bݟڋbh-###GIS~:}ЖToݺuȐ!$+Vm۶7R}!_i|iܛ5kF.Aۏ1Y ֬YCGߒ9rdƌn:t(>ϏW^nn7ڌ|WeI?~B * >:ʇ֭[錿VVmo߾'NԪU.UK6[lˣ`JR2eڵksN:، ҆ߧL96o7>PTkZ/޽;~~~Ç'O;vRBI*HJ,6;[ 7mDH{ߵkWӦM]Áh:ڀKLm_R%j 6lْ^xr 捼Nphx1p?*Tܮ{1d:[6@@DCNF/8 [[%G^ ^ӲA ׂY޵]c{O7~=T|m⯙Hh ~XFS =TUjLgC> #+m{p?I|CsAo'9 j3$ T 3' Y%39GCr,r"ȼF|H5߃N HPdAh<τP%2;)0 ܧNS={%/r^=cGHqKg7n<(I޵j -=9@ "m{ϯÃ_p3$ݻ !23t 4tkvvΈ=uky!Đ!Amǎ}# [ff_~\y^Owߝ?_UFL4Hfn۰"(U0o{ݻH~|c} *T0,+++ƍ{{ؽoۏ?ȑoׯ&B|a@Tɛ7zh+mt[ffQQ T׶o)?s޼8:kyセ/? v-[ߺO!İa=uGezPƎ}cњ-YYٓ&}/!!IݘDq=!\ !] prRãBR?Ps]>$OpVEJJz%+;,Iŋ7<}li-iCԪUUqޣksBܨ5ɉBs !$I^zE fggkױ%K6! +ʏAqʑ&U=zرzrw}IJZS!bժuѧO j\rS1:xntH1dHw\x;YZV07(7;>Wu9Wvvȑ_8pǧ) v/ܶkױz\&Lشi۷,Yq+VZ蛘;+}q?L,d!!}u* ʙ2ԟ\WrrzdWN7? Q^jd7v߭[K]8 qϩT7۷On>}sPw'?wƐ!3298cgbE`""O…5G`\ڢE l>>|w۷nsvewVޝ޹sƍk|ٳ,o+Wx饚|28--cԨo-g\o9k;|3ƲysٳŋqVV׬R% gキpO_\[4+izzS!EjN'MdeUQ0d1zNo~X/;zj>UסB=Affj POvƽ7.wqq\vNmk)>>-x㕍\!̙oO0P[{L|P>1oBԩB5~'XnںuU ܝ|W\NÆ5/_5k[ed<;~UϞ^'0 ܯԿ:_֭_z,;:ѯk^BWՏ97a·;7st=}ɮv`0F~s?Z5wgg'Lxs/YɓB깊+߿OBw?Xzx2{:v9ss)kJ;z湁A]<~ޑ#֭O;Z¢?nKJJn>wnH!`BpcnbP"C%c 9eP6p#+FƠb(߇(#(bx{ ݚGIo(U\vs͛ q}JeбT{Y,!9(ݻO\js']|s˖Vܫo)gcbb==kȐ}t,y2zd̷k׮ڡGBB㗊4JUr/Iy3A$ym{RNִiٔYtSV=,-_ĭ Kn޼A '9Fҥ[={~X…dg,* b=wJX_=*1q ll,_yelJJ))O<<10зv%Շ~Y߿<~Ϣ/ʕrտ=o?jooӪKEիw24B#y,gz޽Mk[!/9##}(#yNyCѶ=_Bۏ֫/n|d !֭۬Hku8,_ZZ}_ziΝDŽ5k曟m)SV\zgE>>-,-+:NJM}o'O^]{o„e\ǸSw%ߨx1.,YV9:>nҸ<'N\nРF./\B&%빕+wxx Ѹc ?11u뺮\^*V}睹o]Wg\}[[[W zuʏ11-,̵XB7ޘok۳AG/hk˚5}o!Dt7:uj}aaO&n_pL`!Ӈqںw'pr??M֋]ǧE'$$-^GY[WRwb j9߾@{C{{5/]|m !NmM^[oT^}ݖ[׫WML{?~i +[ooٲa˖ K7VXU5 wΜMKK>~_=`b"]?mtV![˔ŋ7|Uf ߾*B1ݽݻRREF~V][#?yNNNN]~?2H)SS?i!IUǎB+ÆxMoy X1m[wIpu!Dժ}tXY@@'bO}U8]*T0kJuCWWG!DLLoĤY:x+m̭%k(^ !vwk?{\ѵkܨ<ĉK-Z4l򥘘;wj͒%cOԢEIRLYg=IKNN$&J`¼Yf&&R!]ٻJo/ sE"m/͛SS3rt9ojrĄu2ϔQQ'ml,wo+wVO6j4DKKː"#t>Nu uZ'O^iѢa߽jU{S={NF^ȠA]O7}Y ͚ܾ@}366ܹ믾:++͚/dG/paiOLLlUq;!ZhPyuznd7|Uӝ;[B/&&v6Bm/Vdƍԯ_-++'99MM,+oi}޼#XZڴSbE[7YYpv;~fBnvvAݺ?v좉$1&ʕ{9sMVV_=1mڽ?(@qUYZmK.pJ36hȞ;7˿/ϟ9&;q^R7Yh֬7߼?ֵk=\zڶ.ϫcm]Ik❊}۵{S],}Uۋwot5l8oV犎΃0؟0aYZZO(\7ҥ+Vlݱ~<|@0T2sBH0 OZ~wߓP iÆ5k١sBP[' ^(u$-{ fseTr$bujO3gTB45ʑsKsJCH2/@N*տv\xRD@ڎ}A=WBO>R(` epQ<ϽFMYڹ@O<] ~xSz^ lT(PQh#_xQ MwBrF+a;I3;sZ(c+@H? D)NY݋G=W(=BbӼ_%]SҖw2ezN uӫ O{W@W$UJBnԷ \A4CQz !l?)N^r5 \[@є ߽j | Lvzx(7CBFi$;(P4R~30k9CLv2otRb&;rCot`#GƌbNAH(1 >ߑ#dQ2F\ϑ$BQҡ3|G$7DFqe=gl cKnb12|g /(^sF^6T(2c:J`02#iȌC1g(P4FSϑd`֌yE`YO05BA=Gˏ(iQ(Czڐ"-63zW8R85#Gކ[ϑ% fY R֠FF>Zϡ Cn!s$E^9 "uCs$!/B #y74<BH| 9 EDIéH| r^I*H$tH>*(JH  (#Pf(#pczWnH@"LÍ9_9#elr@7JH:A:J nUϑtt"9)@13hʩȀ:G.JT".sd@=A.JT#(%sd@B.T=A7Dz_ϑxQ2Ҹz @ёʠHE92 @*ޢ3 J? PxBGJbz7A9?>ȟv8FBoTe=ǨHbP_=GT$"+sA" 2dXTϑ(I N#*)F$A>W ȃE!+sACB " E9R  \9t]ϑ )F G>WsBESsBFð`THzOG0Td0!R~E=G*4?  Fʽ# #GJW[ϑ @)]O StސTbB!:Fyo%CP"rP(ze!wEb"sV8FBxEG蚤B/BMxD>oQE5:o=a (N s+$[,X[s@uGΝ1{c+iO:v,3e˖?& 7/Lׅ*,%s<.:o~ƼO1L~ ]Q܎;%33ƲsO>;x֭i=m_իw͞lffZv Px!z}Qv Qp533kٙYmڸ߸~Ϟo^iРy6lv͚oV·Ia}EԌ+hfںu.XjgvvN5lm8 Psu޽GBYqpml,7w3elm?3f  ~͐ov>.8x+rM:qz]~vO?mBto/me(c\aqd {(?_Z3۷&N0`1>>-r=TaiiQok~Bڅu…B E}фRLsn 2SupݣǤÇϔ<>-xk܎G;:??vqukjk;;UvƢw˖^;99s禍ז,zz{]6m={}ܸ(N9y3C۶[b…G^}A1+@đnPyy5vqqBL41--#&&Vsŋ7<}li-iCW:E> iixxmaᛜ. ,􍮮Bt=DyOo8_-O>ܿnn=nRٍJwZrssKa`6GU[-,&7׮=u뗞=ˎ^…ۿɓLJ%͐V|8C>}:6hPʕ۝:sӦCB!C򰴬8thŋ7yҲ/aC2 uN9s+,G앝3rP(S_I'+v>| iW;soXX߿{]ի*?5aM߾`ɒwXBT@am]ab! #?ׯՋZd`12H,Vj' ;AANo__:vJ%ZlCwo],' Jޫ܏>aÆN6wZ;E.:tY|zz\zg*U(Fko,޽tڢ,}C{{)!I͚UƎ},UPO2Y&wҭ=?,T*Uvv΋uՇS;YD=?ׯۿݽ! [>Sßq|. x.Ud;;+!cG윽{þ:ujzOo],Fߞ+33kժ͚_X> A+eԩAYY{SS-\8fҤ@?Zok(SFF˷ ÔCrr{巯]#hhȤI˽B݃£G)AAzIs箯_?ںST*!ĸqK/\3f[@H7Bg3fч~ʕmmF:5h%YYϟѶm]VO*7jֱW7i+||Zn\;;w}ѣN' Qe&hẉ$5kuoru}}쵅4 !6m:djj|RDLZZV۷czʨj,P"}NyKSS^u%};]KOɽvmAAiܪ:8-mǮ]BC[WphwZK]|x!D9s4;蛐+7,l=ݻ}gff鼶ߨ^Ksiu5kvi<{z||b`o KN]3gݡC|yu^^e[Ү]5eWNB#5}#/%n(SR+$R_(WXy7B䦤}4>xp K*UΉdgkkYOQ`;QQ'g|[-4tqo>Fy8;aoz I+DG6[[>~6rd'HHx$Ed IB*U֪UU~`jjRF{eɅl&[['-ii)*W.|RÆ5~AA7wW^iV`bŊzy5Bv9۾G! ,F8qJvsƎ՗FO:N88:8!DbbMYSRRm6 YQܹK<=i@>a| I ֔$݇QYmcc dѢg^SR!^=s>.[qƽYXX{{7/JǴmf~~m\1={04kױ dɒg3gm||bFFfLLȑ_GG_ќL^tgs*U155yÔ -_G 8fgdee_qx-#|/"KSS7@!Cf??3݃llZ :)hҤĉZ~S1ÇVBL0pٲ[۞_j]ѿȯ~uj]]ˮмrhpg޴PdWE阶ӫ\zʕ,g\{౿ȹޑ_Nv͋:٤P;^ͨU˹qښhK-qt5<3m[ QA1j͚=Z^Rq$Ϣq$U>:nڴҥcGW$U+0B+tHw'[ 裀7./|腕+?B 8ϯa=JXb"J8*Ֆr=WC5o#[Bq47;jRɗ&_NT"..fMޡ+6RV/۷S??,?UB@GT lsF=lsF=ݑ$]C@=eO/7J|O*z@٨z@٨z@٨z@٨z@٨z@٨z@٨z@٨Lq"MRsFrg9?,H*^Q%|+Q(Q(Q@+%h"P69eP69eP69eP69eP69eP69eP69eP69eP6IR(>z@٨z@٨zʞ$GQ(Q(Q(Q(I*J}LEDZFETh[7 ~]J y Iӊ8s=/8 ({ D%RhQ%PBڃzP^(DsrDIPAAD=(_t@ "9@JAD=J:4z#t@ q?a@ٓ?ŭ"(4e?((@ |+=ҪUt ehhHD5o)'FF)ŢGEg0qD=@:7 5j4dƌe㿕$} './4+*dQܷ/Kq=zt]Ǟ;olٰ>liӆN|{$yKi:u.X_mSG{UnqD=EDЩS3g~zx?fY+33kժ͚_'Xv̙dff !v>>j7/|J:}Ç)ϝ,"pϞЭO)30K5^K{y3;;gb򌣩Sn[p̤I:"z@=zo}5XZVl-,lr L9w{>ujYWήg-Qi!SSox˫߮_ 3Ç)C~oco_vGѨѐI{yGRf9: لq^7f"7oΞ;f̢? x+[Z?ujرK?m;^Z:uUnRsWܼ3S(G&&&ffX^U#q8PΞ蛧]w 7-NK۱k׼ЭB:uuΜu-NNսzyikn8KvMjt]aGmUslַ'O^:5u՟Z[W޹sŋoѿkݿl4MXp{%KƮ]|Ϝ~n MHHmiEݾwM:*:{-ͥyx=~R}Wqv֭i'tG|@z YQsׯӳ^`oTɀn*UΉdgkkYOQ`;QQ'g|[-4tqoYKt W1ujкu{۶uW?{#G=x`+hҤQ쬄8xÇ[Ξ蟔jooS&逶..GWO,ٸ̫~mT;;k;;B9(8B̛6?{qڔ)5cDF<+'';!I+[>-֭ffB4lX'̟4ys ~f6 !VZWc!D``?ȑ{h׷"..qvvVFk>`#<9޺@W)GGGRm ܄<.宅GQD$RNoZU&5jTwaQ\FiLM}ْPyƑbԨ>'TT׮1bرhDiSnqD=\yz֭^iڽӧlWTnL:5$iҤn=|OzzƸqKmm{n L[chxxuqqF𳳳Zf 6"KSS7@!Cf??3݃llZ >m& \,ֶg`fB92__ZWk/4>o7m:yQ:mj.W޹r<˙3 !jժZ&gG(.P*#PB(Q(QЍw~o̟JEAЍ >{u PldЍ5pJ8znLLHA@G&YYqn]W]wP0jsۚ5_p!nҤA T4Q(o[jԨt&]P*@Ŋukyb;(q59ann^FAF=@7LL$Jם8zn8;_ FAF=@7X~ ;E@GI*j$ ~]w'y c>G(9ɛ9eP69eP69e]j*x}l uR׽xaloZ 52cʌ2ZJ}e|c%[MM֩3p*JRs={ՇSJki#"ⰯN9[ׯ,.7b]YVl֬QIL75u…c&MZFL+=/dpU,-+6o6Ey:0w{>uj~f^ ;^Ϟg9BIDATF!ĦMLMM/qAmW6o>H 8*8211133طozX5UQ#{F9_ڷZNNkߏpv %Xp{%KƮ]||ї&ؿ?f۶9g?YP,NS`OvmqTG)B{OԮ]С3J}|Zh.񉁁y%IR7-NK۱k׼ЭB:uuΜu-NNսzyikn8KvMjt]nW JGjǏ_KhݺQ*Q쬄8xߎ0=;x׮II[֕zy8qY,y֓*U*7iR7**̬̈́{PTQQ'}|Zj.d!Dժp~UsBxz /oTBvvNttKOzWމ:M-4tk+ѣͤI(qT8B̛ťC6mFM4m[+ҫ82uIַn=$~ѣT{{b,Mfgg-?Pٳg?M!=igt>>-={===#OwrBܿTu^~ߢEݺu4?B k~Ãf5oWҬF!Ċ[sj, ?9rVV JGBQL8PR]vwĈ9NNvcǾQ}sQjffѡS#?CLLl?%%YF!G윬""7hP#FUQS7477swk*X} .[ak30K!ٳ縧W^ne6mܫW(i޵k_Nv͋:٤P;^ͨU˹qښ4iRgA[۩Әggֶghϴ5n0G]o?;;5kO\\BJ{?AGr{H},,|;tݴiK^ő/IqQQ riyy1#ң8! 9%$ys@٨z@٨z@٨z@y[vO͚onիwt@#hPݺ_WWǕ+/RGD=@7jժq{(q01rsW@AF=@7u=~RFF;(q5?3Cu@#tFj9 lmt@#/uؔPdst#''T׽8znT*I׽8z;wjU{]wP0jsۚ5dff:l(qMJ}$ ~]w'y c>G(9ɛ9eP69eP69eP69eP69eP69eP69eP63]w&yP<9tGu`$$#I G"d KS}^IENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/iterator.png000066400000000000000000000425601307543307100301740ustar00rootroot00000000000000PNG  IHDRw IDATxw\ϱ=U X!.@Q(źu[-..:EY\RQl0D g͗Ir#I>Lx.w8 U2]]HݮZB9Juu ) қ/?@?\‽WBsBdJH|$!'mN di}3B֭')q_BU2wnd9}6ȑUUS֭'ml|de=z?MNnln,,̧缼b/ړdeqcpmm]k=U#@͞t)3eggnooa`][[,11kH1c;ve] MSF9vFF=_շoq4﹦qyrrE)SF׽~-'ĉu-D>Hk=""b33Y..v[xB.^|(nڪ|gǎ7[Jrruuu oGߺ5nܐ{NNΖأj7i_HCCy]"TTTL>__ ##M?=z }pH,V wJ>=kjhiB,-!'7ܞ"$!~MQR[?V[['%ee?bHHľ}(?wokDFsm碢ҢRMMW !Eռ.t]]uBȩS7޿g;8XN8_?O;;JTVVtsoޖ獍'O^?{ȿgSS#88X]2{3w_D}LVͰS[풜y/VTTObۙ3o޽NNs\QQ鯿^Co=]I (\V0ƾ `D># P.@pľh `D># |F@0P<" CPa(фx"pM7fWM^MKmI ZGzKK{ke573?Ç#"Qʱ+`# +**e.5[:;5kC6j„~kCCCC$**iȐ:pQ$%el=l>3p8kyaa{ebSSOzRxc[tτ }& wee7SS'OJUӦm61s'&11+8쩑۹ )4qzr(իXq]]@('&XjٲAѓbb33Y#GZ,VɵkOlmS CBHBB' 99B?_@MMwMMѣ55"BI4Ȕ~>&&e4Gaff~iiEyy!@CC:p)7N0tSSNYHqoSn7)++X%W/u7pcǮ{*TUS֭'ml|de=zb̝3YNng>r /?MNnln,,ƍg[OR!>/ Dqqqq!! qqcn>sLL27ccS[)SߥNe|~BHjjweC'NB<<ƺ'pO us[iqρM׬9mgߟӚ>}㲓'wb.uPGIMquۺusBB߮[!g;B̗-clmm]k/ \zzZzzZjR}==-ngM߿ggd=;==oP3lvv?Zu߶+@}#G¬mm;cFkǏ_'$dBf{',V͛rr ""n;V|&q}ͤ}B.^|(nڪ|gǎMkȿ};֭qㆬ]rq۲śK|Тd'ֿ{Ty"ӷoRu_BHCCcQQ)}?T//ƄRX>00t" D~F}RQQ,-8uꆿ̼bB:=I\Gde!ӹS32SWW8$odyyeK%dd۸J2559ϻd;1 *+]~䑁~ii+BJz`Ç/]]!q5j@W,@MeeuHH!$>>ĉpɣEE%j/^g}}mBR?*-Ǘ:))O?!!x޽֮=Ͻj!/u Գ|fPRA_jƪU3'ٳxϞ͛O[u;~Jmmݏ? a"m^YYEQ& OyYBBGƍ]޾?|&5f߯~rrTUFE%*++獍'O^?{'Wԩ߳,'NKomt%SS=Ƃ wu9] }ބ /]-4tۍ;rM^^[[L˗io22|&5yywx{$'go|':ГZg1>>||~w﹓ >Wam7'p nEy HS2%!ct eeE~PХEv]?IX/\#;>>Hb>sG?Gސ<#v ن yÆYX%PwW$a :J|!ںի_*++ӿD$`@>Yb;A"{"Gb>ر-~$!y(G>l௹Ǚǫb7]cvFUF@wX=lm6l1ŠwC+Ԕ*+Vx_Ο߹>-ϟvWEF>.|a>bO~Ikjꔔe]]]{+W5[vvkEuh'a}yY㼼U&|_X%QQIC|ֵE~Jر͈[SSS7wn@MMyF۷w=|xź8s&ssGzuS>|IZVd9}wERR6ty$ʘڵG? @`y*~KB䃤nӿ/֩7<~:?!dՕ'ӗ9i x^q"qwu<|w#斗W]aff@qq۳gʕ[:%fccS \]/'O^OJ&_]:{,xSnťN55Uv\dmmz65ӠÇ/;;56[b؟ BD}'-m>4Z%Ú:&7…ƲJMݟ8n„MfMY}̘Auu%BU^^jաs6ٙB&NtUOrr۶_Hc#C'u@Sn7n>{R@${1Aw%{֯?jB]ھ}A}WkE§ G, wӦ9ׯ3,~y 3ӑO:SNNo^W<^Ilv"ؘϚ&sRRrJK+1D[ǎ%dfBHXXbee75/ßҥll|&L2&suu){*/?fh>&skͣT toҤ0 8y򺥥Ksލk7ǎ.+X=/Q[@[h ̙[?jFFԩBbb33Y#GZژ̥s渤+/:uo !̭5JGI,`?~s+Oyoo_!x%D+}}5555G^Ot l2gyy%~['AE(җߎIv\d>~Μ(̄dee<<ƖW̧yt/,`,|!!);׵voۍOSnj| 31BYYD t50GD*)u^>+66eyZ9,,r o5܁ydn9ÉIY|M&`mmݗUcc#=d:8v.0byܺvWEF:D"_q5=;==oP3<-1>>?`o_JJo}Xc2<))gM&`ťJJ N랍zh;:99GŶGM BB7SS=Oϱ+VLrgB׆::P?Hv n۷9NiiÇ/ !11ɼ36&o rW4QQ::j4)Lǧ?{HqٺuGF;ͮZ:(3{"D <k<^4[JaRWw'7~9x0Z)!>Jkٙ͛S_X[{<2hP?rZPXXШQKut&+xRgB + 0v4M$wu:m~{"-$d3!/mm6nMLRP^PRR֕+&))9z<ں=[,-Ys8'O_Ә1X=O~~pMN\[[˗#=<^*K{}wBXK]JSSԳR _Dgc B23KK+˫!ff!\I4z^[[iA) {Օ!RR?J sl60Ц;̼w))9?|?ē0:s'>O ru:SNNo^ܓf7II- MO/u>Hz<<+Zu #ޭݻصiA%%噙,$))NJuL(ф|;*7oBJK{TTZmm]vv# [4sӂbcSxO vIID3 ](Ǯ$Plȿs'f]eeݻO<20Џ\PP"+ԭ'sO b,-BB6=4;-(::w9+/{wykkgBѿ9J}8@DHv <rDD@mYcǎAO"d(. 1e 輧"K1|'|>t"mFX| VVs33Y?|7gF䋪dž>@grv^} >QUOQܛD/llLXYMM+B꺆;#G.Bßҥll|&LCBȹsw hfhCnAF-љ;!EEi6xܹĤ}%ťv&KKЕXq`o45ׯ?+W5Ͳ-Vn>ZzHMb @r9s7畖^:s811ØLȑqq?7y|uꠣGWٳ2WWxɓד55Uv\dmmz65Ӡ$MjT~k/mCds6C/\ORoJJwegƽUUP|7PS]S}}MM&sW.Y_urDQVؔ?vͮ8&&e4GzU?oggNQĉto 3D!W!DG'=yWuuy?u8ή]Qp:^ލO'LλMMG"&F "_ĴHwgRTT*--ڜHHȒ32I?v1=;==oP3& fq&gf3Att!$66e99啮vM-**-w߳32DW 6*55w~O:RMA#aƶuرb۷9NiiÇ/ !Սlv!ǿvd==---UmFE%ݾEMV)ƢR=BHTTJޚյ> ..PGMMK"$ IDAThj]ƦpwQ<FSSE__BLMCv\"@Tٙ͛S_X[{<bkk>~0 oGe*t79áCv7PQE[{ʕMfNJKK\9}̘_LN.**UPpނ.=vK|x+rJ`yWW;+!d>>nF z)>qAQs`W5IIr?^Zf<||E9b># ;vؠ" Hmta>@+輗]|F@K_R64 _"R|Q⿡`D>>'>"_xGSpوQxV. "`D># |F@0"`D># |F@0"`D># |F@0"`D># |F@0"`D># |F@0"`D># |F@0" Q|BnWWr v0"$<_ʘ={49\\>|ٵ%Xq78q=E9RAWcIr_tOUZZ1ju￸rQgn}} O$ Urc7wB}ȯ;7<#ۻ>}fl\[[G7TUOQg; J|}{JFfylzGVѣW,Vܹ::Lii}3B֭')q_BHk3NQ_`jb~ey2ί[q?v 'ͮ?Ij@>m_F$6?~}JJmlLjjMmmU?ۂ;y8p,99{BHMM+R_0oر߼yOiM>ZVVqɓ?LfU :t(2{!|ٲ<<ֵ63ĉpBXwᄐ_~F?_]]cYsۄϤ6U˿WW[zy9'$du+}G4Mo2…Bdd B9!E]p(BndAk/@JM=KSWwC7Yd oYY^:xp9!O]z_ %l-̏ x˗e_p^'/s1zp>T-~jjnǎLَeMd $菌1}NbB45UT !F[a1!DI;.33޷o/IinGEEtԌ&M>:3Moiidnnطo/ҊSn+&hisgRO]]ᐐY_+:F}]]wYU!ͮJM&jjzN(wo-nsi?yBߥ56EiXV&ݿR?NJ"HIIB?:seeuHH!$>>pĉpziKQPP |&Z>DzZHdd'EG?c 6lNO6̂*[zG' %8?lWgލcJzP5۰kN)R0+Vx_Ο?3[ZzzlW{,nkΫbںի_*++ӿD$<_:i:%FYWWcvv?-'Ů=wmUӠcvt7gF~;[[+߼ykccWvן9{ƍ^rrUkz\L#ko %6_z`LJdz߻_ȵkOJJʍz\9mwV;EEeJZV~[6*8ڝ;,V EQ&&,paU}tى5#c_zArjWPj#~xHXmUcRG!A =~OGiˁڼ玴mXEk\Gڶuv$=sזmޢ'k0>_ /1I΃ϗcЩq/p9Su<~&l"rD>#{ٳW/Y2e„]]p*y: ^^#"b?:-[Np hqݺ7{7mf6#jKwY@p .OJvs[ۑ8N}}C[[x񦸸S/}E(hJ?9bU}}Ý;1:7o Z'_UU9s~tWRr8p~Z[Bl {{?ssO޽+ڮᮢ2~ .jc}=zpsƍ,kb緋Zs.4)LX_~NYMC7.]z40'.=lҮ_cy>kUDGD,#_&NJ:]^~=܉q#01-NИv T[[k;=Io Aݴi! v>x~5ssՕoB[[]HQޏ;ICCݻr55޻ٮvӼ7Fb55%e)hdԳ^)+w//mfW!>[UK$(~|uueuuB)**jm޽5KJos!##s{wy33Ys{0 IϾ֚7ю&^RR^VVAgdFFBʸɡIIAė aTQ%N/8KK#;~~ZUJD++c[[s?ݻv}\\\?ap6H~EDpV͐;{I{?HKKx*)Ξ<.m17RRr2ė>A¢3]0r䒹s>|wUf:Ck͛hG (ړeffwW߼yC?|2𽻻C9##_W,gKO$<2cVWW;oo.JHx.ޢٟGD>#466kBXڔĜÆ)-:y ))): !:][ t -xV>NQ-xrsdoY}"[># |F@0"`D># |F@0"`D8p{|F@0"`D8"`D># |F@0"`D># |F@0" @!|F@0"•{|F@0"`D># |F@0"`D># |F@+`D># |F@ @!yh?Cq!]]( A}pI0|V @ Z  1H}| @!1RęLW xZDaG|fGÎ}IWEvm=I˶l9I+[||ABG,j+qݺ7{7mfaZH"lx񦸸L9N}}C'vm~#ܺp.hmikh+-,,REEq@S#܉B$$d-Yo!ݻ2/**'OPPPBif6?ӄ;ѣKϞS6n 7.un-ƭcʕϟś={7)lΜ55ݕ\yo-5\VڥK4ҥ7Bٳ`egVBNИv T[[k;w;wbnLLmpKc߼xؕs4ḻb]LL<|{>Y\\DCCW/ͧO?ӤIWVV'%./?}zC {kmbnn[QTTR (.H p/))WSS",\N?On ݶm?~CVH7+&&INN7z;wΜ;5>>=2Uaa2!¢w7> H׀HrmUT G~vv!E{{?3}H/mm5w22߳]]W!zVUՔVhh(7kܸ!,V** N-RWW no|AuJSV^^^ۖͮj- $p"W/ 阘cݻiɚ3LjÆYP]ؼ7]] :22 I:5wo͒rܭ-5 DaYY''g>=` @L } \nzpqqYzUEӧ(*/8$$ ۿյEE6KnKK#;~~߽+#zغA\\]ލ}޽87NZ5СPee7O!.m17RRr2ķ-,^=s#G.;7EQ/o.֞ԯ,33ý{tLL<\gVQQ|A\ҦO۔˗i_ .( т.=yp:BȌ[]]](F9b}G|kll-&de)\,?D>'D>@!@<:`D># F-jcں?p27(V~i)[OO y :)) :uuȨN?s斚ڗ Y3XtG縢zzZ\bA:c_^^nYª:IGJ)y:RR# :jY55uB:IG#Ҥ}oe¹eʑ,C8`D># GLIffCC6~ӧ갰H Ѻ,򽼶GDvիۃ/\]ר})'7l֭'j>q :Ge[lSDCCuG7onS'k̰iӜ5ksptbs8֦x񦸸LX}Ǎ[5r˗'޿r欬ׯ3B]uhwaa**Ga;wbffͽ>Mxkɓ7B/?d^?]MM_=<|RSӽfQZY͵b-b%!!Kϰ`N9ՄcǮŋY}7KOO{wy5BX_~NYMC7O1es鮤:p^u-K&M ر|߾=z9e`zKyo|K:9 n$Bț7#G.ǻxwo~wTT9% ,w_[i<3uV;17n&&6|ԩjkyym'ٳ`egV !ݸk~zEvؤyZd̘Aϟ{WFs'P:9 3>>=7s\ע(ḻb]LL<|L:)tyyzPhkq6^mj[Io =~=wQTTR󷁽}_%.\订Hy:ŗ%%jjJU7od*R02䳚K޹<$""vɼ}BttԚ܋iSP覠m۶ǯ;thtǧGF*, UWW&XXik߄wmOJݾUVV4io`||;: IDATzEE9o*UզW!یzVUՔVhh(XLnn-k޵}{] ##=ծyo7e啭U;s g?rdΝ!^^mlL~Г*/ТN|^4ddcbu.dEQuV|JXq$+?5@VVQޚgٲśy^RR^VVA'_FFB7>!ԻfII9mqW:$35gΏ (?(;yo/qrrv% h֬qfٳϩS7]OJ00M瞤geelkk緛Z\\=ZCC955;A7n<#:)+5:==ʕH'ARRRFYg !RRR/ 8OgssjR}|~I0o}WWnpc,gEFvvvz;Wx ]EQ_?}CB"ZMewu{7NnjjJ}{Zxuy.m17RRr2ė{*U3 UVvs۷~2OVRw[[޽z 89 .+3iB&Oyf`DD3gn50ߐ˗gghkOo޽K**/ɪkm6^hbagC.9rܹܽMz|٧O۔Kkh++;v%$d3˗i7b5Dq!]]0BPХ'ON\'>gj|Rs""xeP#Bçؘ[->X82 m0"`D>#?Ϟ?mo޼bAcSp!; t޿g <|))ÒFQϨTp{MM;CRt?yz}}uQYYQ(@gV~bbֈ{ohhJ)y:GJ^ڥCUN?s斑LiooW!B8w A9+0"`D># |F@0"`D>#  f|n@?%~'oIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/singleton.png000066400000000000000000000143511307543307100303420ustar00rootroot00000000000000PNG  IHDR螘IDATxy\gsZOm="p`x"zCU|)xT*jU[Q^3$쳃8i`ThW*}xm aL_zjżvnȤsYlO]n@`p&?e[ſXYrInVwq<qG$>hBh^PgKމ;HߕSwS wbcŲgmFQ4{(ۥӜ_e3tס׼U4!T~2c ۋe@Wr PI\ A>?,uߩ{bW,ݿ]ڹ{1c]DzIfB 99%g\zm2 ewן+,rY>)tʁ"!{(e;iU/￙"W`ڟ44H PȈJa;t3÷ cDUBm뤢s3\! h "Bh yqX j m>!Wx}@x)e8!DEL;zԽ]'`IM/xb-:iY㫟i+CqLtҐjGb?o{&\va!cz" $Ʃ|ÆJߵgrD*e[:E4HLnH"%?"Emb@cXgʐu0/nh0y_?!IښFDV<,U)X"E,v=_jVcԧZ,hz"8!Dg:[r9BqX[rVYιm-BW+|kp5Gzx+r PÏ 'jYK?p(c'lKлtL04յ2@  T$W/V1$A]+ ~@" { Bfvc:[W\\~ӓhɏxy;#؎>;_ڑ&80B?5NωL.*p`ЖQR7~M>n~Ƃmwd+7L/V'.I*jyw8Y2:^cq"`xeޜ9DPOdWf!1-Y\Ƕ!Q 9n^q=J(6"5s@]oy_$Np;-չey+w֟~l5Jsd)Y$jw\?_(i6eOq_i<=8MPs*=aBىDhn + b~/׊Y0M;w[ԐgT㖖 T7$B*Ve[ZJzeͯV: Y;0ieWԲ<{S^GGX7'FV.YַBHP9ED10LTIue=BP*B!]cs7aQݳ%%gV!inRn]?/HT&:/*&٤VE>}WS*w`d,/:2qTB>/jV+9ғ*H,<{ލH`y~ '|^{X^wG<Jʟ /7 7Br6:H1& b,ߕ!%ѽ(OL᳏EƪUNѣg>/=L- _ ^NcaWmhck4q7~$ғ⃶Nc҆:yq5f]}8$cY7vy$Gښ{wyъWw7o-4(c/&~fT\E\5[l .gFE TbDQQ~-"$L1F5T {H*5j4{L-Z ̡$-;{=*z3eR;Ҕgl;'mM0MeU '[V5Y#Kr|DƐWEmsNvJֲۘ)pbTZJRQ?yt0P T2OACtth$P8@q@$P8@q@$P8@q@$P8@q@$ $P8@q@$HH8 q(H8 q(H8 q(H8 q(H8 Q10]a]#LCPQ*3!$#P9H1V9H=U9H S9HR9H#P9H/zW9C0 T|JpWn2:;cma1FLUzDm`;x|" iVfޭ:9 ?jI)AܔE91eB=ȠcWozo!y \. Ss~YA)W=ߑEx  $+N=c<ǷSY ʲ+o ΜٺkRU۔ƹD &m80hKvx d0{1C!޽̛0҇*,#<{%6$*!GrxHql]Iǎ.] lpˊn z4edb BhfeJG x$j_O+#-b ι~~)+m jN'L(;qw%6<+HGa5t^ǜ5濯8&:&i'nH'm Ƥ %& w^\"~wW-a+Xn=t֍] ᑶޝ8usOݿ{:)k[!+/vx{mⰾ]\' OքGd yX1Ǹ/dhL =ΨC``(H8 qh"]F0hC hM$>#L $ hM“Պ;ӛG^\oTP[⸤ix75%Su hh3UQ^/.g8w0tn6J"ЕGǀ1i1pP.dҐ@br5<0 4xҺ#Cp ` @``rL 8@q@$n ѫ?61g;7͆Ђ1a.#tk?6UoӴB,ȖkRA,w3l#[\E]vlQ/ڞNK.#4ݚM|4kչey+w֟~l5ȘU+ڍj#91X&q~+;?کqmt}dmجGaqY,$:8,-26F}h)z\၎vI*W#q0M6zӬ]]#tY$۫zyݿKkZJ I:UP^+DVbJ1"Q*E;gCyK v-x! ZQ;~ vʹuaOVDGtMX}\,#g^6F-LϨ(|KFs&=+-boʫV>:JƲ]~aztNYI$}VIu{{Ējlc4ڗ]rYvHklja-4(gwJEn{e%Qmc$5.7/qmѽ(OL᳏Eƶl??#SYl{Kגd0mdzli-p*t8`<|0 V-`r3*I5 WG;J q(Ѹ'x o@h0/.yqd' ]q 0>z6_l,Nqxp'`hxɤa p3-@q@$P8@q@$P8@q@$P8@q@$P8@q@$P }=Dș=*{IENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/strategy.png000066400000000000000000000350751307543307100302100ustar00rootroot00000000000000PNG  IHDR*P IDATxw\SWGPu-EPĢju"}ܣ.ԢuQQܠ Cd2do4e@˗䎓!~sɽ46MڍFk:R0@KMHvvY:~@"XhI9tA®[ =zL,._~1@[t WMRVFی5DOIW駽>_X2u'ii+kCCS\\5ޖvۏNNTU$%'ؙ^Vu@ sWUW2UUܽwc 7JJ|(ڤ@ED<[YUU#''cj:TFFիݻ}Tk`gz]]}[ {UϞQQQ~΋ロJhKJJm1] =Z/##˻0kF[rw*yz -m5xm|aüTGGxBȆ A4ȑ]xQMM檪#gdܽ;"b[vOKܖ6l6KJƇE[))9Q]~͚#ҊgR!w rޞK7z/@L8ps<#tIÇ LYheeh4 _߽fߥ,slhh謚"&ÇBC~0v1(+W.+?}{d!))ٞW$LggN<* ĜBH@w\Tw?z41!!JAn^RR4$8ƩSiio4x+!hp^ݻϱX !!kQ ++6ڝG{B?|(RWW{r..V~~oxBaИ 22RG,spXabNF I- idOL½{qtm>HEE;w N?zOzQ֯+ݔ7o>1*''Ch̚5kJ]]yaiF^VVʕѣ237o-Έ4ꁃ8&SuSY0 hVJѪtLII9'ؿ?l999{$&fDDl|hI9b2|I:G޼3F?/ҥNԪ%%eoԁ* еDnh##+W^XJJr>>ӼPyٰa:ǎ-F0!FЅn*N7p 8chUZhý 64 AG^)%`0Bt ] 1#0j]a(2@ ]A :. ઎"suk׮}iFC r:ܻ_芦m۶޽-~r6 !!E{A֖D =#ȗ\=99yٲeaaa=z̙3[n={,ɔ355]bǏZnݺ/^={P^^a4^%%%[nw^}}QVZLZ~}jjj>}߿',]ٳg^^^VVV-?~|!EEEBHaa#G|||hmmtK]tIZZz˖-k׮ݻw/^tY```qqEmmmw͛BBCC+0]9;$vǂHΜ_E=|$%%%33GBBBYYyL&Ғu떽= 8zjwOOoh虙_ ff10t۲e7bĠhſho|aCyPO׮u_@kѢEN:uT@@ƩBjժI&yzz>{rqJxxԩSCCC+++nGqww>}=<L&dB>}D{h[[[[['Oݾ}Bk999֭;x𠑑F۹s'4KMMMRRɓܻWWWSCnn.gՈ# :z Ҫpcُ%<Β9sl]?44Բ3\`Hd :w:%%6%UU 禧o@aa5aE!C\W84~"CCOCC!{.ܥ㳝…{/>.w*4sG7ur&VE{kEEH!aa--XZ eoh|y}} b}]***h4Zi4Z~~78߼ysqq1!4hP~____XXx <+[ NҪTULwv gtҥhsL[%?7?XS?ee:[b]{>(躁СQQ9?~QϞ}ZU֑#WrvK%-@<ao*99ZpjEE9Ϙ!=ԇJnnUQQϯ^5>Ղ;!;woϞN߿,0ӄ1c55[0ݝfVjh]xxB_߽<"!Ĥ.`RVVVnݺu„ ƍpB@@|gΜ7nܪU~#Ɋ}vII3f7n%Pxb| 2Nk G-ݭO^1cVj[7nS\|%#_m[`dv2-W11)_}yqǎ?Skʮ-^8}Alljvww M9pɣzs"3 Z? Uǎ-[3-DG1TYIČw .X oR%%!d|;*՘2tfKx}ddMs !V}}g~i7wٴi)IRRHJY,EBX,F%]lME9dȐ_s]` Z݋dYf͚56߿cǨ׮]SUUbX  !gOi>8;[8pRZZp_BX,c !iQBBHLLC!EEV~p!f޼miiccSͳF3:F x#w$ o&L ?]^֝1o޶{PUTA|._YA[F#>%**d,--USSl _ej:bq ff_!$'@Id*POUYY]\\N`0܅URy$%%)++3//رc?׼t钢wb !ҥ={Sc ! ɣmʝpƦΟoG};VSSHZ^VVРDm3o|%11SZZJ[7!$-Z’J; pOԬb z߾j-m٧jQQ)޽U$%%bbe[ݘ XWWtTCÁ60𲙙AKaԋ\TTZRRNe rr2Z\[bx⪪*IIɓ'{zzRǏqFtB[۷cP:;% !ֹS?}*ȥ: Fϝ3lHٳatϣrr2]dd5z^@Xr@>>; K!/_fpf/6eh5zK09.].((yGtLTIIyKapX{~~jW>lEDƄ3Ors[[w'NvZdddDDݻ׮]5A^xݯN|WFL16IHxs36]\\~~b@d[Է66˒|g7JHu𚇖t444{NT<> ЪZhn1Et:+Bk|-Ea&}eЅлBf!1 L1ji@:uAtx#4 =zJs6ovj bc W@v-|! pV$H͐.p|qI>Cː.·ޮĹrphJ06-CB+BAB( oH  AIaB NH c@ANnMtcH#06]!]m1 :!E/B!W+l? л]„t2K& ipV45 90= b _&4 WZ M '81@SH0 7Lh}Hcp6„Qt M?|)M, .Tv؄B__ /06!R.@q؄@mc$HDh q ܐ.Oh+aBB-@  t @R@ d.a&4 7| BB& @&DAЍQ @tBj=E "ЀFwAMt! pA`lK ]6% ~lɐ.thF;DgB I ΁t@|ńn  BC t@} ]#hÐ. > t@;@aBC ]q06.,4vK ]AhAw @OHD:&ZtB_w&@ ` & Bw(!iჶ @`Bӽ$ս'4 ]ݸ% xl¿Dl}DULh@s> ZcC4ԯ$vY^ bE͢M~EW,; )?t! 7^puݤii+eoߏlH?+mۏNNTU$%'ؙ^nG9 ݦM[EYhKQ|  <,14ܵ,_˗0ڧo>"G.88|xC߽w~ݺzk2=Jzc[_uL$N1th;w^>>yyEW>O;~Fj͛g7z7{#"p/hHD0c =Z/##˻0kDBHNNNkvc f|aüv>y{ogDuu5kpaCаa^RR+ Ӂ*ԖO!6h#GzBZڸٳBȝ;÷ܻƍ-4 ˁ$}}!$>>GFfs/S)*]]7h{ΟKY@9~<^W/W߆+%LՁ#"tBț79_1jo~#H Q>L-$̤2ÆTWZX u^^S˫~yqwykkѣd{zBk'L)0r]]9VV#^~ϽƍUst %%iacP5W]VV9}B !I11ǙV55-m փ2ceVfilZ[ <&'%el}QUU5??~kpep^k{BȉTc}]B7رkgg+;;3BѣWQT۷c>iҒMMo5CA>~7bfG_!l$7!V?_BćlvTh&BFϿfGX ׋͎* B$$ii'rjkoQ].]lV֙~͗2`oFB֭h7on0@Xrv4 ͎/+lkIDATne57K DxNy6;*0Џ 5|.!?7TWG0 lvԃxџ >7B;PBV5ƌ,W ǛߴrqUGh cPB!,*70Ha}TQJjB yiuumff.!DCCY[7PRR s_^^կ#gmFFn]]}]ZS:}͛=};/ٽxS@QS롡y8||y{o=zLIINw_@=ڽY,fA ~)?8sll=xrŊCǏl)/`{Om7tx^\E2SӡʹVv=z(B*ijBUUY/_!h>}8KH4ׯ'!$70==գبg0sZ:F:r97>uꖃ8##m##v%6-iOG}R Yۧ?N[[z>|(RWW{r..V~~oxBaC:}:t5~ _o#={*MMIn}P_o~ +2m%##u25&4j~~nԷ-477p!u2IlmM'%e}ogg^QQfOX얃idOvԩcde##wL/늊r+V:wi22RQQ;ΝBӏz-^n)++:%%{ݺcvj4sj%NFFo~ܳ|D3_W))oo|VWWoccUNNi9MØ5kהz/ݹ+mCVVʕѣ237oJ|3F=ppG R,,lShM[^P>NxD ~9xRL/`7&]t3g"m:aߧOmȑK΢~Rmi:,^ێ޺}įZڱ;I}}˹sy(ݖiB Fh|)))#-XCCC9'7=} ,,,qsWQc88!C\W84~"CCOCC!{.ܥ㳝…{/>.w*4sG7 !$,쾥2KaaXednݱzz[sss@خ]g 9uj~BNv.X-[v %%{ MB_wr(++fV9$/BYYi|}6jbӧ7?~^KۯPNNVQa|(#3~JVVzѢnnׯoVEE=ئ(y vDGsQQW͜5NNƌT3[ 9FBI]h:w!Oh:ܹSm~.3 +:~ٻ3gݿ!ť'$پ}ZMG4 v\\zbbIII*ᖐ&:KՕZ &11ݸ~eddoxZTTJ?ߎJ5L1##cm9;[qn EazFRTTb)rb)4(]ιpឆ2%%g*+˹S\U]l#++38פ-;#FLM}8KTTJJ Bd,--Źx#_ej:bq ff_i𛍄ɔot9J_"Qy'W~ESӅ)SLFE=pk\TTʙ+''䧡SYmmu XqZTTZT[*11m {䦮>(zQQgm`e33hi-߈V $'g7wnjWD~͢]tvڼDddtX{~~jW>ljڽ#siML(,,!|ؔz>>;>V/]LK{G=t)Cϟә3Q%%-{Ck1zνΝ綶&JLuDӯ6%9i4ŋ =dH]6ڋF]˙3#Gz-],4 a꺩G$aa$ ###cyGdӾ}L/' P͙cb)8q0woth~#^~z';;s{tLdGB6ؘxxX :2MGxC1khhx.qHVVN' +ƺ:N {( ]smB/]WD2> +:r&&:.|iE}ܶ4_f7+o3g"WQ'O^G~#:.;w6;OMĉ?EB-#[A=]}ٲla͠~ꗏ:.&D-99g>~⎎tuKY,ucߺÇ( ԯxC l: @XTVV7gS[hk;+*Z5}͚#%UU 禧ݛp.gߝYYyS.g2mUT켽VT|ɐ!+V?~i##v/P +:t{+.޽eeoxԩ[r{UUׂW+*^={~LK;bBlJ ^OHx뻗6*իsvZ`0&&UOw!>MvP +(ONPR7VUU;UU |߼ɥ5;a\ުCC-IfB›.QQaB+xŸ7۷/QSizjvr)SL=KX܅X =ԯxC_weҌ_޽֯_H_, {ZwBHbbƼyC-ڎFBBnu6;ħOe66&wl߬%%@=8Weeuqq9fEZZzdʗVpRVVb)|vC_ LՈ/3 @;)+3 !$?XB޷ZK[ff湻o1f>F۟ҧjQQiQQ{jh(S-NFF PѸlrrN[C7ԯH,E))ɺ:*i42h&F)8}:Zn`0dώB˗>BTTiicl=t?UU5ūWvv66&QQϹܹքo_q t:;DKg5oܸ_mY]GDžquT^^EYi߾P&rh4ŋ =dH]~iG _OM}K=O񓝝9[C7ԯuSAA׷l [P <S"{=J ZNqr`cca-蠺P[P +hM>}*ssEqaG1t޽T'deijwK[O@!]>Iwc#% p.j˷O]_ա./__YV ]V ]\Km3g"WQ'O^ W:[ nn}ú`/je7bĠU_߰|u}fXSzp7))k]::>> !C75s{8i˖mmgEE^Yst77;kj"Է?0^;wc !ds>݋SVi+VuV{͘!=ԇJnn6LҍP建N~uRR&ȑVMc>rdف?sP bo*99ZpjEEffVjh]xxB_߽QQϯ^5>Ղ;11zz 10irC052M5.IĤ3Z-m9zV%jLjvBbbݻqb)Hx߸񴨨ŋ))o7n#))ѳJJ3>z*!(//f#&  9rJ՝mkWY;#FLM} q2u̘**B uwMuuOG&],h4 Y_ǥ Kˌr{PVf)PRb03{UVV~ NZ --USSK=f2KK+ )+X]Wu={ٓ*+w<;cƚswc}?;#{޽U$%%bbew/-(((2U_mb)^ѫs|Znzќ3g"CBn9СQRx}*)1jH54JKJʩ!##WNNP+%%{Irr]:{ߏQRbHHHPUT-M$,+ȠA4-'H* FAP!06vѺo?]ܹS֭;bR+W4+\rr8xxcY  QXXBy2ґk:@UUM~~Շ$%%x66&QQϹܹ֤閘Byy;&60K8dںh}K5j޸q ==ژ^aa$ #94W&->eƴicy̘BBٙKI5n^h/tuSyy#h/ggPW4h!wZttԷ?ٙ72++oxBHyDD@cӺ޽g8zҤ }{()(h9!iIӑBС;{5ײ!]x,E]zv[۟gs%Çɔ`'YCCûwͬ 7̝6meeeĬYWpXS Wh@zS@% Љл#% ɓ7553jԼׯ1 6OK%(a~z~TƗP@8u4]i ]>8h0p`O++  UW(+mi¦ ^WWwTK@ l:ڻUرFXGӅII ©ͦEJ^|ӳ!tĉgIJJxx1 646!%0@X,pGJhhhhhhhhhh V"H[umJQIENDB`openturns-1.9/python/doc/developer_guide/Figures/modeling_notions/visitor.png000066400000000000000000000610221307543307100300340ustar00rootroot00000000000000PNG  IHDR= IDATxg\S+!{*KAnp" b Ui:ۺRn*XZ@ U(DEAdN͓(~xܹ}N.;#aq8h<K#!#Dz X|)QDa,X,ˡLch?|Y,99WLaݺ y! PUUrAQ %%utIz:g8Y;O^:yɓ ;9#{;Unni۷/'صZb1MX,1h#( `/_{EE_>ckii?HD啮;SVVƼVVV98, h)%%ego߳\K.`2DbIA|p M]kj'N\~ҽl騨 uggq m;wJKKEGh8΄EDKJRVV8vlyA[;w(@6ly()srH[[MGG#"]] m"5㛪cGnokdd[hyBX޼q;vSkFFDWWi&Xt (?ҋoRQQ:}z?s¡Nh-Z>p[\\ SS_`@goȑ}:tXw3SubqQ'>ee11I.."X*DT]‹EAA.**kd^^ahhdv+Vx8#"kqzΝgL;Utt蔔kcԏ!q>jy, 0@ |> qi"h l4& Wh,ŋwnpp 6aso FF_9jjp>}ZYjh|hzC">{ ?mF>ZqUTT( bS^^ydڵ&&1G5q> 'C֯ݻKL!/.|&jG>? q{y6n$(aV$忓>g^Sݿϟ?];ſJ6msj1oo{Ͽxkggio߽cG&/7y/Ac`A4o37LM 9\{rU}:`~Ev~@sY d==-FFq^[GgyA忹}MHEE[QQ)̟dxem=ŋ\Qrs /AJ0`gO0獵ID}w{1ؒ&^;2rk_Dfs/ HInϽeęӲ#GpܰafN2[4ixb9}[<~nb0}~%&&Y^~dBB&͘2zt?c@܂O Na //{:udȐzzOQ$忋?nxg۶ d`Rȑ+  w 9"!99ۖQq8QƷ6qwoUSS_vkbbtuu5?'O2#"}p,iܱVVD4}ɹj1{Zq$Ugb>OOvѓ'Yӿ}K'ؘ|n׮߯]{ ͇9FԸ=l}+'LXm`0QAad׮W<>~g.cz'hnf㡁;Ny**:MWhdEII_53~=6))+88bƙDT]]0$f__sQQŻ㟼>L16֟>h%&&O!!VVʣum߳眱~~z0\66aW?~4"|Ӟ7i--wUUssy;^ &&_-\Gnn+H__+--G ⮱?amcczت>Dy[__uΊ1)ݻw~(CfWCPXX:uWKKK]{oۋaDtصe=jEE<ɨ188b͚ÿC~.!+딖j||ڻw6`Ҥs7o>wŻe̾}-ر?*f7昘;|{w4i?+))$ыytǎ:88҄ _LӧA׮F8NllJ>DTPPwZ[XiӜ KrJW8xr3,kQUU=z X.[[C?pDۉ@llj^,ڋo Kˈ¢*_PI|}Gw12 S P˧blcG]v||cڝ89-yrΓ9ԗg}_›+))SWoGDi'D__RD<)L" EvTΊ66۷- s/uJ[IC7n<:jTNkkQ~~"3aM>8q⺭""99ٮ]2O>} l%ϟnY^˗,ٳtއ%YEDؘg5{_G;v0JJJŻE0[ֶf 2?XgcϞ11f԰RLs55/yy𥾾sYNN;ssׯwmlLrrii٩KJʖ-[ 11I&&/3vbdbbi1fqή[BB&sjʕ˗ KD]v|$޽g3g[iOݿӹ):La~!3 s޽m[H6(//G5v>K}(ط)+dϲ2D6jT?"vokf+XZZjÿVWwe?;;殮k1}=66%00w;a &Mbkk}Qk C͜ C @B<~!$4HÞ a0BD9ps0O$^_# x y  qx/¼Yj͆%Ņ `~:nj`f⠤@|5X8&Cq &qƼwö  8q=%D_$$B}y oPZ! @R$4H ]R-,#$w{Y+2 @9WJy†01W;WeQC8/,#?GbK  @<  CH>h2$A4+HH!s! @L  yaII! >>Z7$gC@@+$h"4Z+$P q*! y0I thZ$A3A@hM yC@$hZ$AA@] ZjA! Dy0Bx @t"<! @Da$hU0@Bȃ6a- Ij!6 $A+y 9Y<tH<DH@! S @8C@! A0A@#!Iy $|䁸A@Hl0! a@P $!BԂ$Cz/$4A0HhVȃV aB@ @V "$ A0$8A0h ȃVaж! @   C!Z A[$Vy: $$*ȃVa B A@<)A[$Vy :6Iby "Iby 6IbyIb yв Ib yЂ IyRXy@/q/l34HE.#y'Z#ց v0 X,ˡLc&6@]L8vwS,[ʗrsLOŴa֭ idkfSRem=~{-DR^^t.cn=zCUUʕ㩡i&"kk~,2/}Z m!Bߵkwoyz:2wWb9,^7Y,=l67||-7`ڴۏs{ OwȕssCUU܂GJJj|deGt}͛UBB"v5ZrJII9ǝ×}3'AD{+*U]]3\KKW@"*/tu]߉:2杶@MD7nΞ}ȥl6Hmm!BiWx*f+w4Ê^+WN9~|Uψ{IIY ǎ?wM![O2{&O1._[{w(<oKRRed[r7Dz%?ڵRAGܲş;@%f$"աTQQz TuGXĔkokťd=AKSRR:uΝg\ymaڵS4iJ.F))7urSVVboX,7̏U^ 1ݻO;UC 05 >{y{;ii٧C휜<uNN}w<;U}ib@͝9g…;DdoߝjAm 9cVUU}hi=JtF}}- _))k糥cO 8~ùsΝpVfidMM+x[䢢FFkbׁˈHQQ>"bK߾ׯyfʔS7a6s <œ6nYIQB!Y?T'>ҽgϯ] ttʹo3h& XCuSϼP-DED-ܹ۷n=NL|aiiĈ^Р w?avr~$j[0H"&'" d=.q/l34'j`Jg p3: a0B! 3X^بghtV/|IH<| aк:5nwѽ{]?{>}Nє rrZ~)szn<3@||6FEq԰/?voఈrDnkdM3˷-l6苽{7|ջwv[fo'9'ꙹ-V 99[QEܻwԔ{4̵T eVu5kɓ7JK˹-W[45lnի_4u&mmw=gfd"ZZjjǯz_2dݜ~f?zNDNLZ'339sG粱AA?;۷hh)/sd[sq_\W퇲rnjYꢥ_ @Ufϸ\.7JJNEqGxx8)7n<ڡ$55W} 7gjga~8bDoJ03/ԳP0h 3n,)zuOδǏG/=];'N\SS89]] ܙGG_.Z4mEEEUP|Kˎv-JK;w"Mr|09yp91߻رku.Қ5S/?PSmp8+rs&%IH\x7>aj[[ ĝ咑}Pݻ.ܙ5k 0=J߲ĭ[; #RRu[ qz+ے~0cb\|@=?6mmwmmagfankkyfDdmm59ꗐyjiQuu5l|͛y~W335kyy=b5vmu#GQYYũSS=ɺu-[uuMppo ۷UTQ߰aѣתk?xMdee -\3g{iRR9rܐi^r5EE**J&VGgvgjjʟ?.PϨ#Y3ef5kѳgoŴ3E?[v[J(''OSSES?l~bn*DԾ&]WW͛PUU*.Ƚx~~Z IDAT-==l7~Hn*~YYEaaj**JLAejj0lXC"m|ϭt1ڿi``=6m:Vjv.))_xgs0T$"+24ԩSnѿw7;u]PP\PF-؃JJ 矙QSzED~ڄ@߶+unF5ĉCömzzEEL>FQQ^MMYOOÇjYY"-hr͚5fnn22^y{;9)SFN2"(跉W]^sNNζ5kwgsDWRRbQ.F,#YYu3gEDo l6rΜ̎^~~=22^԰>TIIiip8;nxz:nt,**ǧWqZm:g۶0:[[n:+/+\ꐧAʪ]0/li'LRirrOk54Tk] Ex;6Qϟ a;/[e߾/6m3߹s?JKKy8{{o`>|Vgdee,-}TTYcMMo%K'sNUG"*5%w*_׮ j[6;OCC#/V#GbX 6fgץ N?i?{S:t X.yyYQgά=erWUu9xbX}xC}ëɓw>m$ZoXXxo?nܠ{{Đ-0*q7yzgg;_u}NQ޽g-?8u*jܸ5&.i}+iYx~zn6|U]D= A||6FEq԰/?v/sa߉ꮑ q..l#/=OXE֬7Z׏-A0fnn(Qqz~~nx55=͹-ZZof9yFii9ʕ{z:R#V oeiéiLAk_m%AIBֿ\۷hh)/$1chimRKO5xUU?)n=ijٮh} Ws;?hM**={xU_E>>\Ǐ_m3 ﯿ=dB;9~(/ޝ`Offsl'oћwH/.\h[α PR?u*-88AMMonxCIjj6o>ηk/K}óko?҇w#QKD#F>vB=A= I//LJSRR'WPp8+rs&%IH\x7ߴg„նf"#|Χ03pΒȫWz*9{f݉| U^ ccR _VSQQb9'o?pRΓ#JJʈ(''OSSESSgX,camaݿ\--i^SWW͛PUU*.(++iڵyַ- ֓٘ T{3t1ڿi``ބ:W`w5ꜪחQRRVMܡy2${~~ۢCCpcVOOy?(Ϸ4?|(!܂3"wMQQ;bfg# 54Tl40В=P{55쬬zzZD7M&NmI%s[Rc5k…;ddv݁L9eȲ&N\w4Eחmkk&xrz]"sː=YYOOMEErmmMu2/pժC22Ҽښ0/ڵL홗Xԥz:?,sPVVvv}=}ۂ:M3g_i={eda}C"RMKqvswnm[T}K]ߒ li'L(}EEy ii}x1/Jmu?wq63@4Tϒs>00xÐ! 'z,Mz$Q-=sfeeUviBGghIgPXXbh ghIl6GJJ23$)zbl/Zc44$&f|)4Zȼ :wX -OB€{38wghaD$++S]]-QZDU+@S%ITj$%eq/ PВ$* ƍdjjХ|}$Z.nP\$ .n B@ 8ԩq㾫! sn3:9- #@}Pϭ Q||6FE5̗,rq# o6md޽oݻvyM {khcfX5k~;1e_3ճ"ˁr޹;N3g0 "z5SWTT9rСnYcNQZZmrŞD1Pژi c#z^ڧzq񥠠{MԳX0 ܻo?S^^Yvдڏ.^;11k<پs{9GozwnN~=Jg_QK]MuUop'?{޽K~&()ɟ:ᠦLݸh\'l|iv9?{Ĉu.Ә3xfX3шϟg|ݺ=fgzVRR7ng/,&$9 >LIIfFN<\AAvo[n]~wZv|%N'&wKFG_.Z4m2'agdxF8yUQFFw4w_ݻ.ܙ5k ߰=J߲ĭ[; #RRu9ƦZZvQ":|>Du;wG8&&mokd] |>g䬬ܾ}-,&$9 tt]\JDeeNEO:ΞRRRÆ:kee"Y]]7b55eyy͛^)((&WQQqβ9sݻO9rp+(*UWƦ(Y[4N pD rg?|gTSSٌ_DmI=nΒiG=~D|Us-==QHH$sKA?dmlL{0|yQQi5k̯^ 277$5uu߼~b o ji_LD]41ѷFD^^Ϟ=s'`ذTpڛQDԥK& 0?5BTU? 蠫hN2>Ӑ[v:O1OFh^~~ۢCCp7|}GuSQ'OHM}9iÁaX̣Cm]t_.MPfkFM ;+뭞tlA%%ޞ5!!zzrEӬYc.6 #㕷S 8e)SFU6q꼼 |Fnmm=Pƨmm>unIZs=3ڵS$"}}-E&1[9 3tܴXTTODr.]ܽl ׯ߷oɐ!w.nL׵kťzy9s.#UM CzX[g9gf3?sxߞ=_:|?~0͞6m CTk;99'5*ҵ.::^r &3ŎFN\ 6]]]SUUum[9 "}ZС:8qWgN\>PVK'sNUGeQO>;vz֬1_}ŋw7dee,-}TTc> }EaVVzzjjǎJ^^gTf3]viiŻUU]{x KOg|$ݻYYC6fZm=3~ሬyη1ݽ{!s+|ǎ9{fqp` ڻ!!˅8ɓ;;qVt65**}{ !>yzs'$$RMMѱƌ/yn:H{ٳPW۬gPSsUQQs22۵mm=ĉ$>VVW<`zX} 03!=z̐qS!Gh AD{+*U]]3\KKW@"*/tu]߉:2杶aQHHd׮F+WN)))={=HIIaaDIDl6رkD4m3S߼hݺ5k.[Afk>N:'";;E&yz: 014 uлwך_t/%%[FF:**HGGnܸBCl6ΝRAss#"%%e)++;JQQ^WW}޼[OΝ;Ow9x_%ddɓ7r"RR70жeo{"whu|[ XKKj޼q;w.JVaа f9ssJJƬ\"VQ'"++c"p899rrHWW@lm*--у}7KN/BC#33]|1פICsbY^^vÆKN az~0hyv8-%GVt(/0/P[[L"bX:hQ~~QqG/MtziVYY%%׳Ms}!!ӿʜ>41EdׇÑaf78`97eE (Vy>|Çnaj h}-"vR9O99y뜜yw.]RR7n<ԧ2&&IUUŞ3jʃ/_#"]]1c̝;O.y[--ǏӉH[[v7==M":rʇ%Z; qE dFT]‹EAA.**kd^^ahhdv+Vx8#"kqzΝgL;Utt蔔kcr;o oo:?پ/\Zеk1=N㓯KN1}ݮ]_PX/ IDAT Mr5 a N C•Π}=hY4t& 8L@! @ t- _:f&×ΠeKg tҙ00 `r;ddEn3 MlHI +.X_J0`^KmBqrZvȕf̙[Y,dnK&ody D4c̐KJVn0S='X֬Y+ᨫ*)*--gZ22^Xo4~諨(a@0"99[}8&1Nw 4wX++c">@[<jo[[yx ++ZVv5"blQ%ڵMmmuԗ;FDeZbbtuu5?'O2z0g@+S@3A@kQVV-C^^%%e_|ڍs'y@8C;v63TTt:uSM vu[ڍ66ܹܙym1 _ͽIhi{ݿہoׯ&%eGl8<]BB"|Gw65::۾g9c/ǧa.xZii9 ĆZ`\iiǝ$ѐ3](>>ݻRG;w[Dl_ Zc~~3C^/^<{wc='O2%%e˗ز_UUbcSz<4}KN_)*̬ok߾ NN}ML R:;ݼ_BB"s1&&y3\9R-rbb{2iKXmaݱ-OXSRry V3}9gϹk߽;q f@*X\r3Cmvv6lqf涶{xڝz4޵A2\y0(h=z1l‰RJI..tC,Y,ر4V<~4%%;?~X5KK˩"~8bb<ګ?yMaaiqqYXtR7+Wvs\Ç""MM">Pm-r>LӧA׮F8NllJ>DTPPwZ[XiӜ KrJW8xr3,kQUU=z %$dֹ ,͛v܎vt]s\\*wcyK" ~6lXO=>>man>kEEŕn o毤CӦ9Q*iuDD/rv}MTLM}٩С+v0g:;1={!''kjju}Qfk3-r8Nll*;2iӧr KLq#HƔy26ڷӞ_fh#`W¨Q}B3Kg bDDyyR::ť];{޾[j˸={d+*45U=J=_x߼o)\TPa"Uָ;l׮F 'O^>݅{Çp7,/_ǏKY{u9)*37 _n?|ܣHrr+'%eqGfؓ& ݸQ};ujFD**9gfzzo:q⺭)y66&Y6~gv^^,E__Pg5nMO39԰_|c@Z={$C6]SÎKMJp84~ɣG}ZO?v~?L6Ʀ0o|w_QUUMaa 9ۡ _gnť;?URRla1[`$hhQ.F&&6㞷떐\`sk׎OdܻlL abCZZjÿVWwԵVZZj7[||ڨQH[۽_ٮM}-oMYy%K~ j߾zz?ښ$oǼ1-!C8w2EM:OxfG>LˈM wYWÇ)&Mbkk}e֬1ܖEv)(m/'ԗ$'n 21]9\_߾o`-CuM=cwe93f6ǧ=o Ҏ7kw?{f]K bbGXbfu|Z?N怕5a"& @ @SJgM+3q3]5dd[Xx_|yW:rp3I0BW:cؕqw{2{v!\L$ Z ^uv22**p3+W:$wd6Wy3!\L$ D5\54tÆq3+W:$1_錹b?ҥ-G^㏇̴mJgVt&aCu b"Yrrvqk*?&0k]Bj. b*[J7M{EPoF+,M1pE\@@<5wdp}~txgsy|G@D: ;wvꓗ/d+)T:32 k"T:*)δ 30`[ ΔJgڄ`PK @P 4DdZ/<2,;dfp/Jlp/ Td%8ij"kDj0:H-L >`zX{$9d y4A2x6K6A2x~zIB2x6>989hj¤4!<o:-.L vlvf4Jҗ&Sc}4$8!Pp4nX52)ϤǔHK~SCJ0^H`p{^HD`p^k#$0U8Ј I„@-N0 L NX LSZU#Cd&mªaB2T]A2ㅋSªAՁB&;\!=$0.-7$08}dFÂ$0p4\O aHo aØ`H Y(aH daܰj;H`80!0H d څdzS ڂdz g i +L@V4 Yj1HgpaH3 @o ê!~Fd73Fjd: Rʐ @GÍ .  mdڅw)hVׄR 85j]u@`D8RuFL]C209:8Qfqhv Holj|s9N pU6og֭ߪҫc?8lj,HRAYY'^lKR>ڎzv R:yI,#KƘ'rr -/l>5 L:=Q RXxԩKDHDOA Q'3KOڲJB¿(7dJʷD􎓓}QHf„avv6uuOvc[sãAg}֣GۏW߱HxzN9Zr8"s~Tj'P>߿G%KRy ͽ~S'Ms<̟~:ʭ۷nUF6kVSSGD.{z__/5{)Dgϑ漼;v=;4ęB{֬Y{_XTt\}OU:;>/{xt'쌌\"=ٹ& +)vȐBauZeD(رyz@DMMMnoϯ1"|ãȑXCDׯ%"骽9O-r#"|fOpGD6f%!uݺ9gz,]A20Nlzg&^3|у߼lٔ+3䛙Qcc#Ϯ]QE#"p8ܹكں]RYX g7[7g"{AIkvPYtk!+M-:nҤUW%!52<Oq}e"5"샂ɷ9v_ [(;{*9: 䛹8QFFÇ9v^\k<؋##G?TUp~@''?~!0ã{Qu_Y!!kk뛚vX,аץ Qbb֖Wz{{|aÇ"bxEţ?b˖-v]۷jU{Y˦ةYÇČ133KM=֩Ń: eˁXn9Q>qWog>! ~Ne_uDJPMe" $ $ @VԜC3:|@P#T:çp_:S|_:×_5—@3 3f۹67ؽ;/4C ːv0Fq#8pL;:թuH:/W w8ߟn |/>~lƮ]/)i` \"i\h˲eSTp]g*mH4D?\$ҡØ{K'?txQ' QGHv9{U8z}}CFFN=nV166hkj[rrN>xP@D'E>e4}{gKv~~}- gV^v p %KtMy!@?/.yn̙ggGup{BDoiзg 8̙̓UQQ`̸q+O߳KJzo~}-vΓ6KIvD@`COW޹`LNo$$m6hs"ڷ憎?n#СoyyMZPpEggvf--۱ffc۵kap$7ʂ !qqݮ^ks_y%ĉBi{oQCQkC!=|͚e˾]s羽 ^qG5wwtZnn쁂?f$ꂨcum:|L#**xf]tTИ{ۤÆge姦fEG{ 4޸Q"tuNNm)KҲ++]\I) zσ}KJnGFhc& 4i=~{xZufJLⲋCeeuUU {g^vB qqqx1oNDee,>̥K7{~Q: tO(r얘1˖}믗#"do޼DҸbEHm@3>cSؚ߯:ujpw>\UUv5nkS&PNW.%Iƍa 뵫b Qd{m޼.0"ce.\;vSoؠ7\y5|"ڷooek;8̉<=_pqq`G 6;v?ە?*jdi靘RSx޼Ba]`rr]Zĉ~W޾|7_cӳoOZ= qy)&w߰a۾gǻw7l\Jbܹ{ ~׮F:ۓiD~Ne_%wX<|xFwȄ!=z%%;q(-ma#+,ѣL8R?TNI QZZ@`}?}4H0v]t݋"ꔤ8 @0*#L8Yݺ9 O1E)IqaHeI245>Mddd͠Py!TJg@C5X$x&=jNѳ d!@t[sjɒ磌֯paSL攊u QGHۚSfffNd2X}L2P؇7pgIENDB`openturns-1.9/python/doc/developer_guide/Figures/src/000077500000000000000000000000001307543307100230465ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/src/architecture.svg000066400000000000000000000324241307543307100262560ustar00rootroot00000000000000 image/svg+xml C++ library Python module SWIG OpenTURNS Lapack TBBR LibXml2Bison/Flex matplotlib C++ GUI Python GUI Base - Type, - Func, ...Uncertainty - Distribution, - Process, ... openturns-1.9/python/doc/developer_guide/Figures/src/swig.svg000066400000000000000000000465751307543307100245610ustar00rootroot00000000000000 image/svg+xml .hxx .i libOT.so mod.cxx mod.py SWIG CXX mod.so Python libOT openturns-1.9/python/doc/developer_guide/Figures/win_native/000077500000000000000000000000001307543307100244225ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/Figures/win_native/cmake-gui-compiler.png000066400000000000000000001412401307543307100306040ustar00rootroot00000000000000PNG  IHDRDs#T@wWgҿZy>?'r揅|O$ޏ~K1\nkOG|KU"΁(сuLϾ OC9$x}&8y|9d7:~v|񜯼 ^=˸9!=r0<MM>y˾O|OOʁṙ6_d(߅e#??^ ?-7_N&0iTQG5or!~4`Vzjj* Uݐ:oE'֤YeԚĠQp똚>z~zossH{^M;yuqi/!˨kKTbbS~T[H强@IԸ7292GA9P*vřIͤ/͠]SEy๩T)*?;2INT8njK>9ni?nv mGیߵ<1|$]j]˹tM<FWcMi5\(hW?h1<չ 'ۭFȕ-GIq5Aq0%MŏK#CU.jEM\M7T4z#4x]{k7лFqF#i]cFn!#93LM?Rd0Cg=nd>pm ٺH?Y^t=ik>#8i3d6!m"`-٠#1.1uG= tܶ-6ann!W{A_Θ31꜖ 9؀% rf 9syѠ+9 ܦs`^SES s }L{$|"4ct Msg̯{\Cשbg(]ٜ)c>-Ga૷Qy ҈_ɏ_.穋ejqf &rB\4Hyɹ y$ạΊ4P/46ݍ@G,ꯪ*sy>07 uid=T*c W}.Qnaw;`pguv3j1H>؟6jj:@ר.yZ Mw9[_m]|{^>C^*ü ܶ<<?7z{&h3]uOl@ .r*j[cU:L z ft͇܏zkd7DD{; pQrڢo'anb aSq:tC6\w bѝs2 z̥+ם9Cn1P;wQWa>IA;s>neof\wzv[́UfU'ᾼ)CxZ7Tfx:.gԑ+Znèc };q/0n/Q9yUt國 E@% y d`xsρz=u8+iБuq*jxq:bQw ѨWf^2 7ʌy嚀٘*cKl2ԁOET_ݺ] 7f؁z*v ? ؑ ] ;P}r БZOLn`z ۩k QҨ[휕ۂ*N~aʻ?OZEkH>n޴e@of{@8&}Z?RO7l7cgү7l3HQWT z40$ntc`ZC]_Ǿ=Da7h۩Dsrqwż}wuy kmwn1o#j]a>b1 g0נdMgΩ#?7}VCc>QA3w1Xs !v+:rrtsG\7s=*2bPWct֗2b]7_f:pwhvmbqWnrD>,x63Ob>@A]o?73P GF) t3n\c5*MХWVѐW ā¨0&g3:@SkR Ӛy ;n=9][W7⎝QWc:~5~#u亦ؾQwၺͭ4귙n[:ik<u\CQuz$@}B {>)7%n6Ef M!ӗn fÎjͻhe+h5gK.g+gg'ӽ8zvղmp/tuuuv]NYKζ3/Iަd>V{3g'_:JPW[=u*Fnc17aBB5uXԱ zvu{;<œc@Wy70ocЛ;stt.H}.y~c>n*c>.N9'57rW~[k1n]RW#o 5#M\ S7qd]¸_t nqݑݕ_Ur=GЕ-r!!my)BPA/e=Kυ=NŽNG1'~6\!7Ĉ# մR Fw1+m4(ԫ:u;ԯ0Azctu\zޅc:PQG}x u {uS'Q7|nlDZ}1ce*#grR*5sUVnCu#mtyqsziz٧h ghg#gshsON[IzYKnc9,P7[y_5.i-rΦ\4&G_AПO-лG]An B]CG1ni;Dgwy 9`x=;7;si9hysΛbЁPnC37y9.@6Km/|*c>Ec9o{j-qg>!͐Qtw(G(ȃ9C! yU"!ۼbʸ_XÎ`{Uޱ(Ԇ@N( s0H$~0<ÎTn`7c91zv 5۝,oE.Lg\q0]HOt|Ya_F/,LdϳYzu*1F>̧ ]p4 sm(ȯ}1[ё_]_ΜsQC^Amus$Tpcנ0j6ƚs>nm\av~¼q?9#łncpr}YIKqWg%-t ;P7[U:Ug,n㡮;?Vis=ܱ?Ȱs;ǰnݞ&UǮAW36u,~nafEn rpXnA2yۇӛj>SZөF߿_14_ͫyw\zC^W^HrqF]}"ęƙuͅ43 iuВ/eןDQxuwpr~. i1O:sfgrq&ssrF_}! 7M΢e.ŃnϮV(v\Nr.=9bύnV9Hv`nvQ׷5mTgD=ԜK3ݝ/aȁ]ż~O3s200zb>2\Mc~) 7[c̱CTd *p*2*uu*W@ &@ ]Uq a<6>HtB=r71ک+]' z\GC=N:r=v"yF}nRC,ٰwyNîa89M Oz(>٭cjz07ۺ{1czh 9BcgG FOaiH"uaۍ;&NQNJ'ۣFnQ1qI58BfԼfqrԹչչս̑Uuo6w#ϻ,s3&_f~i6g:gH;hiW4蜜wt0AW#QAר{ qn[Pנ{]z6)qNtLXF{+cu۩1Bu^n3ObftF}+7iȝ9 Ws:ܝ+̻͡Z95b>] 3OO[:NH7v@73gt'Е( :U.r9B~>:s@W2u!7q My/_FWz5ĸ<8V1Pۉn ÇwS|Iߑ|.Hduꈏz q7)̑$襆;Wkѩs'y'F=c\3э+̻9ѐqZ3yY|@˚ՠkJE Z'k-UHhy3֤ŜLLkфFuW&g4zcts :b(FǠC>r]{GPOn@ak==[3ж;Yؓs GWѕkțXJ_`|=љe-fgȁygu6z{'G\w׷Gש|œc!EQ9 Ptr )E܇L!gb^-I0P{b= FB==y:|'հ'QXz+qA< sݙ$1_AμI_`ްBB^Nݗ1s œ{{Nw?31fsgΘ[o0 sgގ;sƝO1j( w18;s@~^t]J BEs=ZqND] ÿ * *QWF<4Xo!t$1C533tY\a>5M6 sݙkpgavVUtWsbWs"̛rR]ѝcwEr;Ouh2 ;J] t Y3IЋz4與w(AwWP:\% x(aO ð]] G;YmB:@]9C|0O)wNLVoQOîîa_)dCq;A]:6::kvӆn6(K*{y0NBlI6'Ew tN&s3DAO{'0 nLnC&э,21;Q|3)198U+Б$~+s #j=x;qz\AΩɐ_͘R+̹3A>nSO UW0GgAs|Ҥհ^ns`x0cs.bnAܦ |] ꌟ]=C61~Rat$:aUHA#Y{ u1a5>"sݥǰu_t;=F®n8ߙDP^o`wuvݭ Ĩ[ςݢ`o ر\jn1cm~{k&٭'wPavuąyїe5ǭ;{$^Žƺͣ4Ҭ$'/O?BҲ n1ĝ90Gg>!5Ǫμ:c~9919_Ȑ+?1w rƪAWBgΉ!Qe8W7/g#Nz] žKO 9ɋ:SazawBn=9ܦ4AG nhÝޞoSq>]uw#z;zuΩ;W#y^ܱg)`f.axƅ]fan_w/ӚuӜۭax[7;?DVx/\@QwaK2a[~"7AGb~VԲi3v[ ܍E]Q- :➄% {u,-u501k#.8%kԱ31qq@l'u}5ʠswc @WWΘw˘VAw}~w3+03w望f#' ON:s_m0-Gѥ-F\ _ 5kMC? {䌮 @/EhOwP?zȏz&nɉz ɋzᰧhDƺ0~vm-.{r=Iޝwr7t]EAA4//+iuC~.Oϯav㜁={>F=ۜnx{ၺ;cc؁=MLJl9!@B]:t\+M<Уmwuo;7i`B=9(՘/H_ zϰ#Z:ÐC]R9P /V# rt`!yॹܙ\udgj̻L939@1=w׷ع3#ѝRy#s\K#5 :!t>3378kܝW1 i#>p9Fo50ՠVaONtta|uݥt7[#sbn戀/t$ M@GLБ46a ]0IГ@]p;L5DtաǨhs4 vvG<'un/^ntn-!j>W ul[׸kƆP/n& EABk3`WŠ#@= ty:2nG@= ]anFrMjЛӠ<"*18hı[+w0o0_r$؛SAטsgvν9.`9 3٧1S7rg1D׷g9׶μ8 f09:sj&3\P{76^>0]n7nA?~L5S2s gptFEZ% KF3 A&u) D.u"QѠk+:tݩgu:ePg]~ P?vw];n`7X_f_sj`9=ivҸvm=FnE]îOH㢎(ԹKGQנY1 D-ݹ|j z&5n=Nzԥ'QwAo =Ё zv/ ]~\®_ojܛ7rBޘGyދ0;+ Qgns@\acw6-.> rutEӨ3a |B>;Wb  !aA=pQO0.$an@@݅G݂~sNW|nΐ+.+ :AbǶw+>z ;5E]k}z|Vodih0vw3uP7n=zDPC#>6 zFA2stz|5=:nχ9c5t M4궚*ڣ <1厼W9w -0Ծ;E s5cA9kat@g~~c>!\a>nN SƎS膧&339+cT ;E31Q۝3`f1t ::s7Im"hc;n`g>u7~B{t$舃c֥# x0օ.tu:بSttsa@[cmb&11)q=ֻkHv8\[Uam[ y|.}KgtQװc\iӘ$.s砮@qsKOύnAaq:gM1WC:1MMx.aȿʠspVG.øo5w?av@07+R헁9 -泹+Gg>@>;s9r:s`a2c>k?QuWΜJQ T3Gγ+ANe5ԮAxhuTw9-.;Q$л~=KȠWJ~ԇ:}wPG<ȓ A]L #ݩ1GBkԣx'aϏ::unf={۳h)؟(vݜJ60hxrFAG؎aao3`n!]y sW>Oau߉Μ1ۺ`̧ՕsfDՕ#r/3ј;ɐ|c>!\a#UʌٌM%K@01q,ʧ<;;.E:z95=\.ѠۓĠu;t$yqP;_=ua B=9^㍡ -{utu5n]':3 Ӱ?4v}݁^QO̓>ljޜq=\VuwB><:OHS(`/9sB#Iy9u: CjQ#Өݹ]c–F'}1wmv;bG:pyCpf>+=y㛅 ;]9 טk0ːQ`o;MƘOqg~=@g̯(MgEWRl7\ 1Ϡ;w #UA*2&dwnAQ9Bns wNjH>z?^5tuB= z.<#A=9MsƻP a c]H<{y@='S$.NPwWag,T8=s^ؽC5[װn:ΨC1n=bz&##akۡ4rwAA_AOґvӥBk}-٘ ̱-\o#O`"k55?Jbނ6n!u]`{"+CC\||Ɲ-unb-wܙ3ܝ_ŝ¼xtcT /Bgι|\Cs:X}-gb8-S1$#u@k-Q^/ҋzF= :z1YБ#-I^l^[Б 4ºt-Em: 1WM'=N6ݭa.sz'O%-M^Ow麦nn[Qǰgur1%:QנCI%,Acà]a@wnQ6@wsub8ӝ;ۡCw0uٝ9}k;0WgcgQ5KkZ.qcaz}.wu^q 3<܀,tkܙ3杦+:s~m{`>ID[cй;ZKt}4U0;"Muwv ctCT|T 1Ԯt s|Өv,F}CCQ71g;֛MP4٨\a.èztuKXSDžԃc{{G1`XObG]n{K%Yu,0 M^-Oy;ܞ$o'0GN=~D7p(t#\sN;_ N<sUzu@+a.mʱgx``@!ksν/S͝^11L5n!#i 4g}2]Ý s O`'eOטb[1 : ڜ1o>14e:Б~N0KX:@~qnQGκ_n;D@;w-Aݏ߭>]E=A=c-ku\MFz {x vtu58$a.>f=s#`נ#D4 9R`O`t$'wݠ{G{s9Cq]m;7QwPǩXYܚz;C j=gG]=$qQ?gT}tɮn_OηR'wMn]w:ujza:8wض@]nQB/t%Fx {A#x̉c@ 9G#i#CsWMx"z[$~dvo᝺ :< C 'ʃed@GҨ'Aw;s z.->IГ+=O%]u&. */ҙwwUѸwU#.E_$[ڶQCnu=oODcOubg\Nh3@ט[5Ҡ֯/4-ͥ&=&SG F /s56:_@8E= s՝cnAY3s@aα;YmfgStjvyW?{qJhsTETs7x +R]9vܝۮ\An0d')5+ȑK[jЫrg-4c:>9¨Wn<vQGgkDw.짨cu"|_(~9UW]ʠH郎d^RPw@?LuX:= { 9.zܥۜuKCtzgM" ..dQ{z {T^Ǟ܅ֳaQvi.ݭ[mn=KEn=u#-Jnz>)ۭ[mF_|u‡ѹǨ'`/w{>zu z!˩kԸxr`>!N?!Itr9牉 KTgn@o\c uȇ*9 wmCW\>Xm?Yb&/ @QY\G7 pJnÈq0)M@źda ]y|$=Bs]P6өg [Às$iu"Ա'E;vk*quݵ[UܒWrsu칇9ܱ'aLwzeQwm+uXKԭA rCޢ-_c$_A止w?҇_A'=aԼ\F}.=ƨc;z+$o1p`n;p>us I*9jz 3T}!W`g]܉ysa*r1gl}ؚ1. tujSAGr~Y]zK3s{N#>YIbNP dn@a+u#%ޞ0]'<t=wСsN'Pװۮǻ.= v4iؽE_Bg9sM=zVP7ѝ ރ=..>I5G u vn2qҠMc/'^_LwEm~eGr6E|E/w8>AStƼ?Q?=9[;Ř`Ugnrsqƀ#渤]p7N:];E{ur`>3^ ۣ3ʐsgavbW3\gȝc"јfGqW< 9 Wј븠Wd,u;ǂAQ~|Գ`Oݢ E#9,Ы4Lޏ#'x(!݄' t;uF(mȂ&KםvO ޞ3Qg A= {uEcCz7[ר_.!xƝ[H>ѭ+E^PҭB]u%E?|G˅@=ȵfrjs2 ּmle"~Nvorn1-j_D3|}8zKlGvv? 0f7볽rym5>'^!{ё?ˈq`~G:OLS3U4nϹ4?]MnѸ+n<Ŷ룮\Cr`>;s0j\cιU-:w09Q1GNqJn7<ǂOg41%C=KQ7#Ig3٠#>~B܉;_ ~#bPgC "ႎ0yQ{AGw`t]ӝrzר'`nQA]m_׶Ѱҭ!z/ {h[0Bu['q]kSwawQG Ec @=Dשۄ#cm Ùݖo,ӊ Oih.SZz![zrǴr'*j1- 31@ePzyoP 7Ry8NZcZYj3>Ziaws.}h֏h gYCb5|a迈_Hjwsf9.6vbm7ɐX̑8vǒ^z79 9 GGg:NV).k9>!mWn:r !v՝3O&rr:>~107WEα΁=<@o s401>gaB=Aҳ`ե+dg8߻>F=ѹ07X 1!8D܏ҏ{z& {6N=F'QOzAqQװa|ݺF݅G}C5[ǶuwzSbQCIԣn!xu9CY'Gu zPנ& zԩw 6Cޢ@X !ķ9SVwm2q>q@2 iƺ9=G3踆"{Y s$œ;tr9s\4Q\7~Ycr9vxsr F\A97tpO=1%G)Z4SsVurWŘm^m:2r92Aa^%CιН9!98UХc=Y]z s\pW=> s G.R8x aC ` !> p Jq7:hzS]=-{S;vPG;Ũ㶋ۭ ֻq4u7mݢanuMODo`zu]3P/41!}]]SwkA7]:)F n*jweЧO8^.D=&Κ>aҸU{]&GI&#QtF}jvӝ+йKObu{/0GpQ 3浻n :'80^܉#7>5!'\n]˹FM'VǑ=q<9Om{4n:syDAWsW\|Js hF :s'21 ":@?Y5.:N6ݠw٠إ#YCz'9u\]9ޙ.$)ԑn켨;;P6.tzbh6.1=C]CyNG=Kr?1:tzcsun in=[wQw|zvvK<.~O[=M5u :0#Pۥҭ̣8:ltu TCϏSV$yg<hwh/hTֽzg4bz<{51mYo`Nhʽ43nzu[TP<՝+̗Rcl7r\\_`l7 s@07ǗО*ѕ+5ȵmqmU&h cȯBlr ¡i]y}]؂!G u tt1`$ zKAG*0nHy0Ӱ'@7zp~"ck-Qݽ~\SgCXs>!PGLu{QGPA/uԃ#{v BP?6 yN=B $QװkK֭ku>\!xmQG\mnQ: PGЏBu&:.¹7e^-K}n#iO{fݧ{Qf};iކnPͥhҝꤕtG{clCOl77?̛pwr;o9@Gp9S: zjgyr9:s 9:kڎWWo=G~%߾ .gΕ)b'7{''3'&gvۜ#.:1IzUd :݇==9 ;#mPy @,{W4B=v~\Cc&xE=݁= u1as$ snQCv{ztoneyZRmR:+qSaǮgÎNݽxG[?7Kn]!0RWmKvԽg^|B3AOtr?99옷㈕hq܅okѴ쥩LY'JKKYtc 8@u<Ɯc1oܗAGw0N1}ff19#̹3[q0Gqӑ[9-W<>VrTyʰW)ZeNq<9w2v]aΩ8:I#`90oc1p眣`׸AcqPݢ~@;ș䒠cw3٠kOFBQZ;ts|:OzuMߞt r:b / ԃ#i5%E.!;]1IГ ۥcuag yMPؓDZ㲬qQ{]w#|ԡmzPW{QOţ䂽ib07domܕ>:_I8/6.Fs$v24xzjXj9`>~cyc)==pݕa8:bǘ7r1Gwہ|]g0ǹi[]ֹ3s 9r`~tccҖ9cUpzV#8w04Lz4A>G˜_Л%1OwA9g؆E[ z6. AS4E]':gcc G#>nA ^؅ ͱC=;n 51a!w9= vx82 qC}nݢ߭kѭ!O cziB02YP#'>|'ғqZ[:QMmI+vqvVC]Te0<4zq453ھڗzޢvۛVW.n1o:vP$s@n1Mx ag0Ǚ\qLØkc̫҈_hh2Jݶq]eM1q:b;rus|" isA3zܠ^(t6:tեp55y@σ:<t FG]nQw; H#%#!0Gu$6臉 zܩR@/D?~a4?vu\w=yz n͉hޮ~{{ @ݺ;_zQOγ}]؃s@a\G!xnw >uu:v3'ɋG= ޠ=3P`gKmĂ{tNHFniDHόYCO\MOӖ}N7yTG^HOȓގqKn|H]ݰժK#G#K5Fܝ[^:sbȑZ1s* Gn7_EuZ=b~u[쭮wzSZrW%G*/EM9:g WW'QguCp8POb_b= ?!InPOn0Aυ\ЋߞB&uw$:ǝΝ:ELu #>nJХAGBasžݦTPG#IK;c]Y;z.un鉡@]^{z9[O@=yznWsKvݸ[Pwuv~ :uv:mS]͢R=F]'a IsvvS7 ޥLOMo,N zg@ɋCiwh03yɦ_Űt[Iv݇M #Г#pw"\u9:t U!̹;0`Up99T?|ǔ'07;%1G7.|o:B}d ?vpեL;`נpC)[ IC~Σ:i]F}H_'u N={c؝\@QN{!mGn{:r|^&wVPnP]HPOv>cžһz!ol`O?L21.,nt=}xۭk!xz!x]&{: ئΠcPG,[/u:rDPgC#.|yfF:yn~~hmkFf;sމUF!}zyBjP'ӣVS#6Y]*zy&]:ʻeqZj3d5!ǞUn0oo)=wI9tDaαǘkcb~dz3"* ?Ӵns9հ[9wxSuQO=>+PLW{HEtNs7P?`Ct@υңf~[c̝s>\.= v9/舏~#zt$HPCދ@®;t449[cۥ]Q9BPuu!x\u{UM !caO ;PWc:LJPς=u(CSzz_G/MLݦnD7הzB]ƼC.c2kk#ͰN}5c.M\1jߟ]fb@W{k^z+kr,_`n:s랜D״DWqgpfc/vE>n080€#@=Qۈ>\gr ]vtf]w cq2@:s [гt z*YǠǨۤ@@®v@Sѥ;u@/=Cp YazG켠#auIޓ]\IQąݢaנ۩=<ߕήRChЭ_ոPuŶQ}u;x'a/u$;anF=َuyF1}ѽ>As7ǯNձSΌ?gOwmIۆ!_te r9:%9@e>`ݹ#w=AŜ:j-2W@vvOvڋtc8]!C+!g?H6rvr쐆mgЁ Pưc}m2@眧09\m",5ܨp(zin<zz:CC.C3@GB)AБ0ܙ#;u'AwQwO ==/ Ǩ;g@n^>{=-:Q?3=!x /v>ڮ`CuERe;u5 ,D) !Бvs$5n1W+s7Q8[m[[U>`zqF{wkrL ov}x3]usm^zqFa zAG9ݹn_j0_:su#љc~@agҝ Nm7Uι1Gg+]ǐ_ZN faر;stWSX1EF#8jUn@?5ר[Aԓ`=.NDݖ?@@`9Ag+;4: zs2PWC&AB=;/ v^CxgΉ: :Hi0k̋ߞ~=z9uoOwA`&<{rǰkcӨ`!ovzrkm^ԡmof:.è͠ߍQ#P/[QwoS$&F'KgmWi4w,_G-ESoy>+ߧw v鸷Ѭ%[=zS)<7WCس1Dݾ<91_Ęc۹] ;73W;ac'gug~KZjhs]axjƩ8rsmjHt! 7C xW|*t[#{ct t6H Գ@OΠWj{]zagTsstzA]zwܠ#!0Ţ=wV쒢;+ uV @=u!aB=E]AO|I-ɡd3u :>!4]CIFCI_SutI1aχY΅H.왠?\uNI;}Z'E7 w5:W^HN=_@=2]{}p t{'űo+ӶP53Ǟ&?f#̹;{q9b;s [ѝmh4fy$30o>! {PɁ  0e^;_-jzu I}goR/=A=RMq}gzu6=s+=7azs΁#f1[F;o`^Eܙ3=pg>;s`>1s#NpffMwܝ3*Npјp3Օz/vz9? q9r[#|z [OcQW{'̢]zл {.].Pgs=:F=Jn=9F]_ g .]Jq7{>?舁Hnuҙ nݡwtkGq}nTޠO;}R᠎|kꥁzmWnwK\ǂkUr0+ӷ2]4GNflnS6Sȶ6xc @]bX*З2Kt 53^Ҡ|6cݹ1QgV.q<9Me88g#9g=oW ;wP{e`ns, zuz;{akԓduYC31KawA~J` Б3BS+C #&ҋEhwV2@O~;0H:=z0q>=z﹣ ~=uYݺ]=y>)ԯ6_YnB1m^PG|ԑNihy;t k#m؎i@a@_܂̓CF}ŝ9ދE8p~;ܙ0vsmT[obȯ\m'ܝh"*IqB=ċs`ĘĠ[xе!xDmWGW HS'AWC sn@I/t'խkԃGgmO}c؋]C=q6m.Ez®Kܥ'`;H!s.ӨgoOntqۡwu([۞әA/Slrnnϵ,Ϻ!vvXs~Csݭ>:{BD݁=:~}t z u5cncwD#mQwM8t@aα뵘0Z=*w0E;1eݠ0FS06s`~yktTRagةmxqܝq0wc0݂xE=YΠꌮE"my=S'P]w=z@:QCi#Csԝ(y 臉:;WP X@Gbԋ. t4ꡡwnQ/l;KKυ:NZJ u$?E$gQGA=]v>Ձ:*BPok.:B'zVk!xA'P7{#9~cf;n@7ryױ*Gst眆ܡsK31_>?7nS)t bμV 91AwiZ50`[\9nQg4)p5t u]zv/f=;w{z.%=;{$@G4:a`k룎:b #]Q;4;Ԫ=W' ;?AБuć=>v-Hh;??ݮoBUWa-ԑ#:'݁&9}mv6.Mr}9 29u3G|ȇ{Υ7tNcЯcЯvS_b/z K;Sb-56I#sz{-Ma]z>1y@G2P/SOѥݢP!ǃ tz4dE.=yӥ#!.u{@wX Б ~B:PO^b\G[x|ÈIn竸uD|u$?sÞuh[fg9kѭ{#@]@z!KSw`tg;yIp9ODC: uނc1t́yoÜFb̗3˨>:sگ;_0}w{cܝl3ړ_ŘWo?li3.o=!Ɯ3j=nΘ0l Y 5!O{ z ߥuл8:17ҩW{srmO/@On|/|ia9 ԹK:|${C@wQ/0Q/z{@Ы(K ~bp Jq7NEb,}cԓC{3!xc/)aБ[רh),ԯy/밶bQwa/ !wǘ=O@FAn` 00{Nsz9&w5 n/Qlՙ9gУ)WHXsN1t~p;0WsRB3>g>dAq1OΘ;]zFM=z.y]$?69ua@wSwAwQ;$Գ !IRIΏ2z\CHA8'P/ wkCX~ NήX#A0С!ɵ\/֓]ߩ'ށ9CsnpEAQGQPς] Q/tg!\G6Յ]D=k;ʹ;ug\'`܂n1av5`0 5-:wj9X@C }&0GjXĘ/Ԙs]]ҝ/̍0YL5w 󫞜LWb$ :sql7aљ .ՙ`۹~:gGsz u:Y^ΖDCI]{;ݣ Q,\ӨAקu}}#stI{wH.Ήz臃zP2@S 6AБpQܭ;ۥ[cԟ?:&&F=={s FqzrEzXuz6{6Fvg9}Qz`]Bhgzϗ8v+Jdg2+v~3Zn]gٶOU,b΢,|#>y?T˙ FY̵UfpYM[>M]>MY3y>ę= +kYg4fg襻hQNF.I#'3bde<>2J۾^[e}yLL|x0ώ5R`~_&$WFgMf;\6PgD"[,٢2|Q+y;¯o(h7 ّ% 8K9RG'[ead3 o586Qe\ 4b99rfa6E:km:3K!xMa|p~8#tFlP=f#3vF,D9Tޥ6śid3MY,BSe[igm*3ҙb;ZfYSeqޥ2Y٭'k=d%뼬߫L~O ?VnSE[>=)kIssE1om.?}J\r)r\Rl9);?U /sa10rK\sQMq/&7gsC Ϲ%J%mP1:Ա/Nv=mT)tz t9v; RRRRRReB# d#u.KIIIII'nCT(z t 9N@*S@_GnQGrTY* {&Aw1ХVA7^@*CeA֖Y%KIIIII8U6#tt)))))S]FGAp[ RRRRRRe,jm1)`r.%%%%%UV jmv@= z|\.%%%%%UFJ[nQGҠA<.KIIIII踶z#q]ܥJY2@ \GKIIIIIC0MCUP.]^۬FJJJJJJXV ` Gmaw]JJJJJrnCQOmV# ]JJJJJTz'(]B1GC*;vvOw$ !>J.%%%%%Uʂ^ѥaM\r*MyTzo|~w+%%%Yq>JcCCɝL~Q?zRiO@NE}N||~Du4ߣ_e:c3vϣ2InrMyEc}p(w׉ݞ(]HIIيA:8l-\VzCٔV;y1rջP^owCO׮ޥZWǩ23Zw{>f&g.s[cE zj7&q=O)))R.:g:tS\\vz+α}!5?Ώ0~T ̏~16 ~#9걬㖆 znLs}-y6*o}Yy2s/l|(xYU1';BEKIII@g)GS}Nzt3C?mb{?LHۮHx?7HPr=4~b}.򗵏SX[GcW[r[ U:t705_JJJJ;fJjkmFnR{eMPfH kcS~`:lS[kw;V(x::2`.w'eRRRRTCGwv4=I@]n ЫqkQOwE0וS=Y-}rZۻՓzbr}rw}~%?unigDe3c߽T)o8rƤAo;;ty|FGtwǢĎ^<?x8X+}-/e7'˄|/޴i3'֗_%YW6ZFV?X!ߔ]__|{*Ҡp{0U,+!wS.(h^7JJ㿕c߂T+п@o7feà>z謎nǜ :VeAYܤczzoY.%%%%%%@_n/>;Ԉ1qܡ .ǂQ~.%%%%%U&*ѡ3 @X1o RRRRRRetΠ?7}5:> 1UQ RRRRRReu{qEo.}3=51:@_Wu著&@ߢQa_+]JJJJJ3 h'n'-þckF;v6mH$DrB /5Q̑f''> >A꜎ Gzр諯/D"u0RttMMRI/̤ԅtkСe;t@| H$ y7S7}21[PcΠ+̧A:}0m;þc?@?ly!|zH5Te/oɽ|*SQy|?zohjbY:. }?S'Sc%\D")gƼMW?AԍA/2c:v8{j}3ns6wjպfX)%)԰p]p{sjSSS{ߐX9E) u{ְa?D"Ժ Nm_AͤϾv@m6c4};mc~cm?ҍ6mXsemJ>n_o'Sr hrbUgڶ|-u;z-g>z-'轷cq&70OwL5om2ރD"&_XWmOΠ fQsw)_ɰ3!a|5nOfpLy5 1nfY}>߿ocכ8^K}浣g5՝F῎У:XgnFڼYG{t/}!YYnK$D -W,ooٯ0O @f'A?S9F;þicgڿpS ߿\)[օ. -SK2buuBo~q3I,o{ |;ucu8ߣ}e%D =b@_uB997?&A3o7zM=w!|A/.2éjp1{ruq]n:CI,7cnrkSz.||{RS{%D0ͷ)5+;K]^Ew+0}c/B3Bj5tU;,:WJGcP%R9zNkM޷]{sPo~<z~ ]s֮ϋGܯj3^o;7|D"W l?`0Kϼ1uO긷/2a}cпeG:@WQ*iG^zQ~?WH$Dr4aAo`cT>֨9} MY!MY!MV}.%%%%%UF7vZ2|:9{}1?036|L|Dkt)))))P}/iԜ4z16з?hOTfmfr']JJJJJoλ4~8 7w.?27F62s+]JJJJJ@W4yfDgʒ-O-dgWХH>-eђ_|N}N}-KIIIII?fخ2{vA#|痜/h ? RRRRRReܷw{{[~ T)w,Zӟ#O {à.%%%%%UVʂx^Z䧟7*kTϿХJOmx/.?39_t)))))2R?|O+}?JOo7&z]))))))cY U?Py{~? o=t)))))R[Ӛm@|[Ѩ%KIIIIIÈI?3жii4`@<<&%%%%%Vo~;?L?toܿ6{}?Ѹiҥ~ۘǰ1zͬM\r*MyTk*N wjv8l~c7K~uAG=v8Zf }tZ(o^=ervƠ-S|GjG<^ޯ(>7Vqj#5-[DW?訃!ut_szKg҈nm4]v_S::wx:j,YƠarM|=:߻a@1{qst]ϫڵ$՟YDWvYDWtYHw^H}ЧLB%+ޡ 7>D殣?jz7j[2X6B?μGrx{.׵ޏTwߘYq;{եKZ?<}UuUoJM{h0~?sǓ3ߥ>kgSnBi?K;}Я8X߰WߤhH|Am=H_ZOV7|ZfoEkaSvCzLa:V/cwZξ*c zԝBr\UJ;|վm}׷~RY.. cЯbL:w?귎~nM~^4<+PS N Q:\ =]>?kvk6u:^w*y?O,4g)))0t;Ǡ_v@4y2n|[z\W|Ϩ2[n˖ѷ~GCMSMv;ttߞx .6cİj\Z#s]`I 'x_~ܕ:J>Ր"=l{ޣДG :l wяdzᕹSjyd=۩CW3).z-T.S?+x(h@n{I=k))),'3.;?~؀]8N&?`vce2R_)lYOstΤw><&}cH{ۯ Sü[Tft0Cv ;t))))))tYc@Gv]@*sZT+t$kT+t>Oa.KIIIII #KIIIII*H RRRRRRebлE]@*;@U6T٩$1yA(KIIIII*t)))))2\m19Aӱk߶}:Up\RRRRReAMsL+?,]#yxL]m͹j%[** t@ns,@GmwӺ[hҕ*J}}^jN mW#zm <^ޯqP.69@Q?cH]yߢV [vƭhʹto2X6|hhV#X3T@2;9jkc:y~=u{g:Ǵk{{ .VӔV;y1[UB]x \M+z~]V|ny OL8H~?~qA̳Bc 0H4,QgdV O#ז.CގMEwyj=~㘆W,%%%%ݦ̂>id:x m۱a?/B=w_eleUjy.w^q y {}LN75G >Qey_ڠ'35_G`r}֭t2hmɧOt!c,Ym`CTG͏5<^Wpzy{ߛװkڴZYí"O}x_~~9RRRR^jNOg|[hûCB͏w3 s?ϩcNqf~o^s-M '<9lgSjJIIIu\]8N&혇J|b G)%%%%C8k~Tp=L: w;QK@:jU8O3H]JJJJJJ*YŃnPХN t.%%%%%Uv+RRRRRRe t)))))2Y PŁ.KIIIIIХNХNХN*t.%%%%%Uvk߶}:Up\RRRRRRiwJjƏ%Knc+֎DjrG,.r$~֒HII>п{Zq -XReû[/z\q4p vmď.ߝq:\-vE:ϢW))JnSFwÐ:9DEo^O줍[w ikзߪelvp#⇷\S^{u8?ֹ{}b_3q]4k6һ֝ў}Ӯ={2X6zٔV;y1rջP^owGj?w^[$^yϡԙgVh^4z}t\~7ԅߗy~4/ s;׫f;߃yߡy^+|_MsBϜ4o<.%%uTrz_|@o^>[e^ڵ#/믿ةjtuR?6j{.~aPAvW?Fa}va[h(b u'c~WJ>wqaSgnx͜a޶W?wOw~&u|))KЗXM}p>3?@?#Oܝkg)i`Oᇑ`ΨQq~hҪyiEV~us}|糹w6hHSR/xB{^YG?]))+~'ouyax/8;řR?Y0eNqY6ڟSiS=>߷= mN<'CNsByм@{zR˚b{nJq:!(/>Ơ6Fɠ;Gg;X<JI:RΌ X9"A7+Q1ӽOa^䪣zpRRߟ;BHIIЇ\[Q1RRRRRRRɲb@RRRRRRe"oL.KIIIIIG傮P}q"je@7]z q:2 RRRRRRe|}F= :#RRRRRRe4Ġ.==`.KIIIIIAdQ!KIIIII?UKt)))))2ZA z.%%%%%Uv* F05)))))2Qa;{qm۷s8P1.%%%%%uVkq<WR7~<-YT]m ?GpXv$ʹqQ鳔v+IIII娂Aǡ['SCi-`J nsd^Jzڹ}~E(|wORRRRGXW=FcH]yߢV [vƭhʹto2X6|h9~/]y9x.\JJWOk̏4k6һ֝ў}Ӯ={2X6z'ܔV;y1rջP^owGSg^.]bT2ӟ;ʶgѼr)]wX>^5;rg[kb=.9Ss2߻TU8E& tE[v]{???kꫯij,WK:Ȫm PG}wcmgvoGXk=zMj}Bן*|z﯐z͜ac:(oq~6RRRRWn1YtLA_b5A?A RRRRRReaAпХt+ QOI@*.KIIIIIG%KIIIII~2>{ ^@]@*;eA?g6t)))))]}uϘd]JJJJJxߜSoo{Va u]JJJJJ۟̕S[/VRRRRRRe.qT>Ǩ RRRRRReN2z*0N>~.%%%%%UVv2.;t))))),sz "5T) E۞Х~ qC_,KIIIII;Kd~\@*[@Nc#ԹSF@*;eA? u]JJJJJ*>Ҁ~A]@:ʂ~=]#б.%%%%%uL9.F].%%%%%u}F tD@:J@: bϺ%Mtu]JJJJJ E ~@@:nʂ^nt&@7Х:tХYT~_\З$PХNeK@:~E]@: )ݢ.KIIIIIGeAp t))))) ]JJJJJ .%%%%%u}~ E]@:ʂ^FAG@*+ Ҡq.%%%%%UE]@:*qTJh.KIIIII : F}.%%%%%Uf* :{ЗRRRRRRe\c=ЯХBk-'c]JJJJJ舀.%%%%%uUCRRRRRReb_TYZI.]@:D#rؚT٩$1qTi]JJJJJ*]JJJJJ0=t)))))t)))))t)))))~s.%%%%%uW?-KIIIIIХN*|:@wPХN RRRRRR'@S.%%%%%U&Kr:J@@:d?-KIIIII@ɐ#٠/I.KIIIIIJnP=F]@*; n.t.%%%%%Uv*:G@:JXЗRRRRRRe \]JJJJJVQ RRRRRReݢ>nT^Z%Ѡ7:%KIIIII%KIIIII%KIIIII=F]@:J@:J@: )sZ,KIIIIIR/4.T٩4Lmt)))))SkR ^1Xuq]JJJJJ,Tzm F=zt)))))2Za{AwQХN .%%%%%Uv*z OzХJeUtu]JJJJJT z\nQХN@7@?B.%%%%%UvJ@:* z<R RRRRRRe lݢ.KIIIII*Co;_nQХN RRRRRR'@Ad^A]@*;Umso(KIIIII* m RRRRRRe Bk܀RRRRRReA]@*;U$f؝#KIIIII* tKХN:#nQz.^uP@*#UBйCХL zy>H"H$1NsbPD"HqJ:"K$DRvRbG%D")+)qĢ>J:tD"HLJ:G@H$D@H$HѠ[tD"HN  :@N@H$,D@H$.H$+vS~KHL}{ }_ߟ:vHmڴ"K$I 3r.6p5]tOb +Ѐ諯/|^PtD")aj]Bl=C)1O{sӡCo|?-]"HJ /#]w?Kl}{`xi{B%qAO!1)~Iߋ.H$G!_ak bA=]"HRBCsζ^T^1X)b@ly.ez0"K$Q}W|˕r4I R b@`}]eJwpJxTZwz0$WGE@H$.gR^t) =Vufb@oK%UcdgMn)a䨁>R@H$屠gϥ-=ߞ.k(BOM>oWjQ Q,*lnժQFfn d ZѼ:6zw9*)K$&v~]eMwȁD!vƙ5rv~8/oƃ湡eJ3> g:xgųtq4"u\9gҊ+ً*#~<i\n :0%D~C|G?]tI75<52=h@eb}{)~uaXвcWߋ c?_ -[ )5? n1%$}h'ߖ^F0gd2ݯi@-[zQ,|A)d8.w1uYxl)0v}Fx˅滏r?Dr2\?D>%%5ܟ`]Rڍx_Pڷo_dILmZ/LUv%r_BC7`quRl=O@H$'"kohK/+^/~gO͟D9?!N~)b@߻woeq'rCj֪wŋ;}{W.RJ@R(1D"k}_R(?3޽[ߋ.H$G!Bk螯h_JL}{);wJDr@4d}_HL}{)?Oc|/%BA%_{ps@5RbKCOՙѶm&1 DRtF.Ex};R|/~BߛW^yGH%:> }o$AQ ]"H~av}}e|/+_~Yu^R"%D")S@kAר D"G)t F@H$$z^e8D"HNJ:tD"HNnG%D");) t.H$Iي.H$ A?.H$IYMa&K$DRݠ>Q*y\)z꒦nv*,͛:T?ک]\YLj+ɇY5J!XOl.<`)wR/nmN~:`Ԥ<߷z.UlQyQ*rvT2_JB*\9:~]7ΨB|TH uC܍Ɂ:·}Uu{=tWF|U)Б6ڌ& :]=0HA":Rr @)u F=MI]5uGdkC+Hbmu:@GΨZ^-=z>.{'PߢqQa/Ms ]-W2ԫa',F۳WA1~]^8B|k]z<uzuxfn=t$& ZG]7Mr<% K>\Б Y a& um'aN=٨]= z@Owt s?(9Tdm^璀҈aw@ר z.]={EzѨ;۸]z14GK/.C˯NϿ_R{yc utwY# zu B@ר'Aa:H{K&:9M~БkncQe. ԃpg%x nt$٨gMt0wtvq`?P ut L,3F}0Uö80?;]n07]#B&zl~]SOvz s u+0 B= OU90_T~U7?QN] UǦBmYɞP\߱eUp%#OJ2;Cϡ74rTv$ ,U5??G(R}-~6{Jľ_/Yğ9#%f͗G4 U*.~bρj]uߔr p{k/kDs=K {?(N _yd/G:gbrz}i9%SN$98oK:99_BoT90s?EڷMIENDB`openturns-1.9/python/doc/developer_guide/Figures/win_native/cmake-gui-error.png000066400000000000000000002270521307543307100301310ustar00rootroot00000000000000PNG  IHDR=k2sRGBgAMA a pHYsodIDATx^G3vwv1;̚V[$ B C[-ZNRtKj $7waPE7_ȸ-@OfFFF*y*n&~-KSoHͧ7g]6Z)u;n^Gi#ExIY)3s:&2vOnA27ocE.n- hrK~hӲ_T8M< _J>,NBXT(JF?^[x\ 10,\l"pEx}Pc닅i:L ^@PY6`A wd%ّ.>5r3#޶۰{3j_#H|ݽfCL&pDm)V쌘 Vյ4cnf rn~B,O1 ~=>ivRw>jχӿy3%K?\ 5{{w_C.nGozmLޛ4}*7m[o BJwoCa#^Cm#ixe;͈JgX{C3kNL0Xs'sstí oxy#/oWE7JBBLWzn+{V_UЕ ^D`x;/c.e.龑.r#]@y]\qs.sg@yYO7(tlaۖ->-gL?jicA&FjG˦k34 ORa+<:EB8S#|(zK/x^Zx)/)vO>f#8TXj~1's:AtL>H@*XA'9%s?Xk:MN&Kvr˩Ef4ku-IsZZӂ(g0vZtrn *:330X2guwvpv\N؎9r:9 3Msnץ\7|lwYubXM˻;ѣy'8s;/bj:-}eyDi~̻Gҹ̧,yr[q.⮋nn/+>Xt#z7:b#]ኼ#Qm%@/3,tJގxOsE7_bf]5\eak|j:wӨ t˨#"HM*As2Z@޶XofnaQXȂ5x+yÂ~t߰,YSGP<F%yPSPxp)_f~oޜ'AɄp`=Ds;m; [WomQw3n賙归%j XzKE2~#˻]}]l2t/bW#V|17 1䰑o g̀ TDU> W g2s 3Yx>0--OFƧE>MCi }\D`r|Cqь4SYOҗu_3Ļ.IwE=Y' ԩ7A#:yX-,׾xeKփnaNyHҵ[hnW@$\חV) u9ke݊+V`V֭GD]VW3~.܈tF-QN,ky?d=$d=tX_VI{ro%݊t+]O!7Z7 ygHuW!.'%=H֙l~it 9#Gjq*Jύ, -71VoWILw[A*mvxjjzdţcvccwv Ƕ6cfG<ڏFP)7w J/ChG)`PLf[(&T;] T'[2*_zY6L2\ӵ +奄o \ ߰":oxy W o8oR>`ya?Μ `Y*'sY)_SuW t`/Tԕ[32uԗtt3z:J&颞pg\|Y?e'뫳zsy$ȢXΛ;.턨Y֍IFeر4jY?'Z$= oP] ȬUOgӝ:sK]%dHz4tXԯx]S_{'ҒJ#Q/@]Q}c*g:Ɩ8:Drt]߇/ &s]{^%ib0bn%] ȤCMAڱ=PY5=:j;c ,;ĝ¤]ɻL)!n0[I"|xo |n |7 ,ϲ?cxzNœIrx7O&Nzdd5expVzpa[ml6{Y! ´fowpw% LW`=5 +APBClA\#/P7Ӫg ;n ׂ`'7C7l_҈a=޾oDc ϝts?0 %͍7%}KlROq%=_̱(tG^sz>e Xʹ˵4k uvP-be)cE=UYcedD=$jɜdd\<"( Gл̦9uHͤy QW[s=)mR%d!ڌ:D2gA{3M:^H?.+MG#ItLY@_|UK:b%6boHUĽu gapxaug]t.LŻ{ּ+ |&L#t 3Tfo2-wGm|3q <77LL0k@$Wй?Uz:/kYOvHs᷑8B)̺ 3*XeJDtLIYut$ݢ%;(. Y<%u-ktۜ>7+Y'e}ɬиQ7~V WIwJzB֗*\Qn%ဤecQ:YtIJzHZGgL:l'$=d'BE&,!飓FFMIcNO1`ր,VȰ>2r :KޘK !;X2w77YߚVKoMޝytx'x,c^o:zD7|3~Ցvu4ixuT/ХJby ?WY_n? ,vm,cyCg-, #޽&W 'y<{4FⴃdᛃPIFwoib,WuMD &(tNV-knB?y}f~dkqWӵM]~?Aٽ~x}ktV_ 0ΰgyCv{;~]&%ʲK蚳zQۑU\^Axbu6Q/_]L53lz$\E_W?ϟ8g%OS 7|$?-XD߷&폵@m87~tQi^M-lwL~2*cC2oR75X-ww,w}_~$eIkKt9 |O5VXm5,2{m],,Ȫ?Խ8+;>, QIvL}s%NW^IQO guT]+YC&t]BnW uwR֓dJRFPw[XCB-FYt2D!\aWvGԭ7cAZ56jɢn,Iԗ+펨+X}YǺFzIIneJ:$4@]9we{%B7nܨzw?$=)ꋕ?jDO%闳([IOLQwd 5$݊znYעg#Ib%Uᒮ褀Od.ym ˒vfz>ES] ,twCwdRWfQ⫄#pe:`ONwI:{: F*_Ŗ}$K"}^t\뙼nf=C4Eg@kΔ4t qZ;[ a3j>|KaV:oWRЯ]|e_,;K],|{M,zY@f]:K:DE/ X_7.g:=gDYB#;,=9~xRǵSm+5ߙϟvy]Kvk#j-ܭ~w$j:-:B6n7nd: -|9qp<`oj7 qӣy#/.[Jg^7U\L)_vI7>y$d}6* Uj?ӻVi/*'ӯrt|qէOu+,,Ŗ<%bd=H%C]Bu`Ig MT< ʺ'v^)|XSH l >n ɺz[IW@yi9SQfu#:YPfunẒ캙st,dA?2%Z֓neGIਕtKU&$2n%ɤG\Qgpڵku/@:K:xHC7/S~Eu'1жueG+)7%ᙾ{޺uK`Ik7oER+7n`>:>B;H1Mzbz-d-uaQ4^a#oDzs9wY̞~-Z [Fձ8.ڷ0D}fc@jZzht\7w7љX3P7&osGQzmɧl7E`o1, o ô7q%Z/gIG]fΒK{>N@'.qs^zϛ\E>x*DSIQ?x-p}5Ƃ:,qMRuܶT]|w':GXԞuX:WK&=T?WjzMVz o.L7q9}|>AW<8}GqZGnkv>ո^{CZr;,'F`𾎼2>_;=}Oi)_=*kGLǚcf7mڔ z$,mRa::]wRW\)0!QF7jI7~yƴ$mf/w_ԭ[Q :%}SBґM-鎘[,elo 2^Œ|I7Lz uxZjr^?zi.4}'u^˒^>TR8Vq1{c,MY_2wv>߶ں6PEG?2mBvulF^aDb;jgJz_@QOkGnjLGz%籤M?8Ǿn$/w[j:+)SYYmfÓe^6w\LIig,//[d'х$fU6^IkԆr7l Xu@ֹGy1Z_j_uD}z3,w{}B\hXP1 p#~^6ا OIDZx㍤@m}M%[l9$s!QOMPhY`o,X!jzױ7ZuQ?b=O@$4j9lxǩ{`\7 uSm w[|#-F_@ςQZ1H{?kib;m}A?zT=۫i2>>H:Zzt>nՔ%#Ϛc̱',;$zdxLI7]ڢ$/*\_p&> Qw܅eXY=@8 XC1QY/Jy;ED'+u;d,cbQOuz-nf=!W(YWŽ'(sn%=Q}t^e r΢dLyQv%ES_BZ?8]K:o[Qwe"sM!ԇI(CέCﱚNkrRGY!^zee~uwڋͪ_zZjzOg’~y 'a)wOtkZv҅ZnI:W1HIz{`IWnrko0BFgGf(>5R=.Zo\i1';s^wA:Е2k 3>"2Gb:]/1;ן^T9Zizd&欿eä_9~^`d_)>,lPӫ%3FTjOyVn.W2j5:3~ZMRi-Jbtx]jG>)/WmRӧ`sLZ^ARݩ#q;ĆY.ضb"Y}IOwulU})72f=~--{n7J#0+ Z>NyQuA}y=th*.@[fFY<4=7;džyF?o];t2|,K3 gܭ$5EL /xf,W_97'y3Yz cO0'RK5d<AQ9zR φ+鱬$ݒ"na Sy+1X-GtP^\ϕu+)6!E]ogʺμ'd G[3+둨c}Qv=%,gC-pu-u%4YHն}$cR1v6QOuԗXm;=5%nx,c, Q7)yȺ^cͨ_2z2jvG I!q}"؉ԵkW4iA2l7y4YGemr 7lufI]-=ĵz?YCA\Km8v5mreޫqw|zjr@zy,ѱގV}Desp7v/HoYK>8 gimw`ɶy]Ktco >t5֓2$"g^2lؙ0}5>?7Rx<Zz |ޤ JwᄅMy {uj?sd<.bW'k,I.7bLq,JPf~8ivÞj$%xd7UfzF5j9>m\<ǯ9m7@:0,JmC/DO5U6~vOYp~LX2uy=,2i/1\>g f_æˌ/Gq6׌\OsX8Mبun}|!UQՇP64U0XX|]%?b~ ??1E^C]h^nQfN·.7'KY/2a\d"_񏗐uWґM`W9鏏ҒMyOxa{<1oY摇Yr#"&32V͇BvޢM#ot=˞uY24z7"IK7Q'g?ݜ'D<1^9 >3F7:\5K#o3g2Է.Fmx?|'- _yog^WO[Ewc^L󷖩&)1FY s6"1(;|MlO64XCqJzζ~!ZB7(7D '%MhjxHNX$B3,Jh6k$!mђ1c"%>JCΓY>tV#lر<ףiıgss[~x=NO)W̴GᮏFOLǼQFm|I|H :Ԝ5뼕这ng>4ګG7b>z%ȢCOv9cb^BOb[[7d;oYE=M֭g#8G}BnQz;e;#!Bd zn}#LHòn2B-j SYҁ'C,ާu0ce]%*GzNKX~Ѻ+q=c=o=={f|ZR.ӸkZ{δWe#NyuIM\>\'W#GyXՆ5JһylOYGO]GO{?(&glP<;Pܠ)`_cxt )/\O\Dmv XNm\&wI0DLj΢3V/7V,3tߏ)/x 5J Φ1}qMEoO^.31|H[އ$; ۾@!yuV.xjJ4Eq>T<w1rt-o2FY_7_5eXWZsSvLI/MA/2/MoȞ?sLO@:˒<aߥױGd'Y8&q,Y#-wm%T1Y1O:o2{ˆe@^%cd5= /{Yü]wmˌ,1t͛o^WxmU˷W<~g_`w'ov wvROYPT^*e Ҹ-,BI-Q aFێNcjr_VЦG߂qhCh_P}[,ov;=Qy$Auq|cD&Gl 3<aU*nVj3x+3_b,VńWEJ+՟!OX+TLuaYKz'd%ǭsTIOql@+ec#φD9tKP]Xv=$.)4.6Nf e=)Vyi~'C!F!ꑬ[YWS`IJQ ZMo7FVyjɼ|;#7Ң혷1fF.s o:`H!,myYI zwLuc+3Y2~ۄ"qܖOeOG?hz,JHM,_՟E_.W- ^g:2ꑌjww7eYgQt,Ì,;[HJs&;oHt=CGd7CH7y X6"lD3qP{ȂyܤZųk陉;YwpFc&e  BYa<;(]TC25zSkx<0zڎImjHfaRr.q ; .e H!ܚ ږm|l6}_:B}Cu*Ķ$ U M/ X}lB70"<Y+7V%1s>d|#`A?ď$K2$T+ /IUH;: 1>FE IDg#![Q?9/Eb.'ʬ{Ud]XUFȹFuSRzwE4>]#,`tpW|u,VYޓu?~w_Y7n'$dEJz$&W/-꫔'G֙ Jʓ\}쒮E=!7狵%<"QXQef .eYu=C2mY4L'`Yԇzci ; Y湉fs0"":)8bhG5ܬLGp8w9ˀz,#,(QגNa)new 7zswedv,-X֭~uW#YϨD, Xx|IE]˺/ ^_{ su# C?Hȹ'YE=MOz\b̨x/x"~'Ev{YY/1o۩=K#cvУcv3cwvicJBes`1cN8M{2.R?3FsC;C[ȱ=,Ѡ5]e1w:1Bs60\snGPlwṱwE2l'8d8x]?PMߦT]r #Wt(xr^˘K{mKY,.ɢ:p.)-2gݸEF V_WU*"nN\d/[ Sْ\F,tB'`cfK2BG)<*LL?n?DdOh -|#ˍkAI5IW2S>p+iuCϰ[ns}t{XHR+v~aJ%Id:c5tAtAj:6:*:+-gJX^Y /*YF-F uFMWɺz* IQSӠ3Ģz(~;Ȧw$(Rjn¸Ȫ{ɺ'wDe댺eԙmWcBnD^ܧĒ^7QOHuWҳ{njOaL/ W1fx<}4 ݯr@1f}=BuQci1ZM51ó0luC,22A޶8Fef?r? +C`/_{Nw,bqmA=Yu !yFҁV$K t\ =K0Jץ`ama,+] j >Ӳ0B>':n= |sQ?ؕykYubv֝99<< z1`=Dƾ^]ۡvosF}ͺBmkxs4SPu\uT\e\P4ϲ]1x>! jhh0 ezL+e={馁[3.nx Oc@YHBmPb "tl>'.?QK>uJE)Ә_А^14- r4g]Hg>?V^  BlIUSGS%f%&V{uicYJ1 [_cn> -Ez;g31Pn|1|I\7k6&6^?[Ǭg s  1/鑨3eIy0˹Cj-KV` K3OI:3c,XKߗ>b]T3hvƾrˢ?>^qvm׃)~ )ǡ2_S\  {lY>/]#Z-V+0yl]K:;3ǾxLի35h\93S|9+ ro{lf;kAA8ھ?HHҗݙ4 8[xDR/ݰr y*F@[1cpgufQ뷓rAAj2%ݒ)C#VSbh$[ѩ[J2̩}KfR_Ql2_ӼK7Tϋu|>.okJ:ƛ_:$ p-ϒnB]I_~W/ф%ʽ:J eKJqsژ5h=$r1 /?]٫W/AAAJ/dӕ7Hb@IRٸق   v$ݙKΝ;AAA(1钾3$55EAAJFkV0\Sv?D$]AAHl>%9E$]AA% wЕF-9  BIǫ[YOH1Zҟ 6(  BHH#Z/soe1wQ~H   xII7I".  GX\Hm,tAAA_/GU,閠K&]AA(ΒXme;Vt>Xp! 4HAzﵡ`c'Р#iBy 4]QW ,vm#wD\'.\<6nH6l2bM2vґ#G:!"Iݒ!YҁHPAn rIaeT[>L{J'+o輇J:Q,錒[E҅". "cj2!+o輇MJHP BIo8tdүb1AI%e[;bIA!p+x6+ꑤgIeK܎ԬYG4-9(.Νhuh_}P}7knh^8ӎ1A(HzQcU,W[FeHzB {MQǹv?jݤ5;XHnݣ$t>;u!~ess&/}f~NlumKj*|mQ?9lSǻt_wzm!)t~qu pL[Ggϣ7ΣEed,浊 Hp>c3fԺo寱Hzt-iSgf,s&7 HѢ_^uq&uūngڲP]sUSΞSm&;v,wCQ8Ҏk,Kc DAy4[9ԃF;=8/J:)/Fֵ_l$}nEݠܖkgfaךuu#[7&M4 7eMl>Q&nl?M2s.ulfiB͞~%J+q3~w,v,UoƓXrP%˙؝~TyZtdm$%!pR,mT{ܴk)2-cz縜fa[ǶkL~inY>;fbb< {L2Y8XZ{x<'ƃ=N!EK2lG>E'=4^/^ݺ-W-tۖGqfxm{AOђѪ+Iǂ^칒r=E#|X<]Q]KcC=+nzv-SuՍ[}ݶe}iQ)o/xon"mXR +ҏg %] IAS=)犍[JӮ{2˘ٗUб}[˷/pNG9K#2|2,ӎsm))cYO}?s}nsٸj+8lҖ~=-3v;6b;{%(I<g\S>NPy>Ö2#Yүpʠ'Z˗tLy^ t}ضs܊`6)ti!2dunZ_j/vZO>a[ r3YqDŽ&4I!XgZ?Ki+k[\?4)m݇hN ^hK1q>}Aj ӟmA<@-6엇Ȫ >N7\X3F~3̇,6޴rVV"W~@#%FDZG[I yKFS!0iRh69EoR8)k+ί̾%87 ܌7ZsO[ tDc֏ 0:MRLa@pd+zZҢe1ο,sDS(l;?5#rRҶsS%Z' du%_CԯE2q&cx&[q3 hIG:$F3`V,=zDfzDOe#l+m5q`iʃ#mKxvsn3EIÕ Qw$9vK /2%t"n UM[/Q|y|p4zybnƍ gU1X9.{oʣڈQ奕tdD$+)-q 4DDŽGdL96ѷߎ'yc<5+njq9ZȘҶmNJ]=N#~;Cy'kUgT7j|k+u̾vm_!Ihp%.sp' :IAAÕ[z٢,&%2jK"  Pрytat{,,`+wOܧΌIAAzJݖ$DHz[,w9~ɤlPAA$}.Kzץt{KB>|Q+:~^LH   VD,Ȩ_I!j͂tAAAO n%$I3"  PX+ݓXFodIS$]AAaj:b%AYԇ%%}.0\$](1򍣂 PQ0r4|dKyy 4r !魍[D҅7Dx [~Wmmy VD:/-d'MI\8$$$$$$$/rI:v7>|#OWyI7gʢtz$wlPŕ~AAR%阚oH4:!b1DCj=Ys7#." T!p#T9!K#.Psф# HP_ BRHzQI?'߭`IgJ.s;Rfinh_CRҎ˧z󤤒:w.ա}MCݐ9V^{L;.T?A* t|mMבb$tC,IrPJ'٤ukMZS%Sl)/OB-RBVIٝ:t}ffesagوvt<Ǭ-[}Ұ:'_[Ose~g*[8qjH v\ rl# MҵpvNmYg#MBJHoE=T,|%^L}V _[kj_wwUwʱݤ%n(Gq|ȧ% gQ JΒʫP;z GYtn(D3ZkM:ˎP&ț&6 onBP1:6F7::.$v_}Q{Oc>n[,5P۸eٶe,vuK:Y 8c S6z={'n5ǔ!;h$x"sQR 562aضso7m-gԁZ;xDnV2Ϋ?VŞ?Oz`=qBկ~<#BxLڷ$szPs=pAsl~SFw[׶ՙF]+*p.!ut+ꑤO칒r֐~,Z)I4(˻<3ƶg%ѯVnq'eoG^z!n۲lMml[Ps׏sM_+Q"hj' VB`˼vufޓD]_c;l}Gڲcv ys+fL~mC&V畩AQx XxqY?~}yǫ1zi%'_cTg]9u"AO7 Pgr+P<Ծ%'FMy%Cqen+Z gq6cʱPy1XzcmUi;[}c7%s%*/>$y *h'p!k8^>~wb?Y0=1a鶟v[oKI1zkWsSjѹl\y S _ziKy.ҎO[[S>!B'r :ΒMz3=h%(HqܿmBƕQOwt3/Hү`I̒-K tuZs4tiiBm*~_nӎI;%t;~[fgP%J)ϊ3= Q> 0rXgZ?Ki+k[\?msژv}Xe9ݽ,Жc㜻}853)˧?SyӖ~Ĺ u&&舒Jrm#*>d496nqd=+m׳%8IbTQ$2IFŽhnz ً[de)|p\$cR8DuL+~bpxޱQ=絑s; H~HABYA!JKniĩ?8g6k2Z;>qFuܶ'[z}iyqo @I͒L$>;E`$А~pMk^<~ 1c\`2m[淓RWHN$gIy\?W~Q1R۱S~zc?Fƶ^[vA( :K.hJm+I!:oE>߬}?%ܦ3 $7׋"vV*"Io$}K}Skd _ 邐$=_9}MC]PǙ<sވ_C P*$B(V6nE=C)/cD҅zhOG~+Iosh_C p4(U7IvjՙpNetI[нӽLzkt.!!!!!!QIo8,gwZ!Q-߫L:$D]D҅ ƍeDBBBBBB\>pXÇES(OWya%,tWԇOi"BpBuA~{m=2l4M2v֙_4|{+gk%]Τ_%#tt :J$]AcQ*㋩Biy 4 }T+IwE]I0ކ%y,H   :KD>dEAAP,靖&D=)tdEAAޱ~ƻt2$v4y;M71,  B}JȦ3Ȥ+IJP΂V~OIAAzApttGcI@dlIAABgY;-gI_z2Βn"  PoDtD&lM[ttAAA?d1o2I)AǴMW~'o㿡~ p'tM##NAGFH:!6@BQϔt:0cp\JUz'IHHH5gպ5I~l 1J}uW IpWMrnB~V=fIotQג~b2m dzKHHHI :v7>|# -t>]6,,d$9˹u,L:DXI?Q$]BBB$!.L @1$9.=Pz?ppB%saÆ`9(// O=B}fװ//WOzI_N&]eE%$$$JDzwҥ`Bo^w.B(D-Z!^wI_r%Ӈڽ{wb髯%K$ʅ(JP s% D]e>WI}"c]CoFi߾}j"΋HQIzhy4[@B! ȑ#iɑO6L'N}ׁb$ʤP2$~#ȤF)s;Rfinh_KHH4D>p fΞODϽُVD{=dl >Oc'LV|^JX20'4sMd~x=z4}TQQN9cge~;t-Ȧ'XIWΌZ?k&Ьp".!!q"-=)mE7?]p{4z|M&s;6+J y-%WӪ5hoU>:6smǹC} ~JzPYL)@ b PWISNUbswь3hСQ :X(׃=h[1p ,LuOҿaIuHIyJz&ͨ\ݏZ_2D%$$8$}΂~C% 5.dAo״yU/MF',tPq^.YIW5=gM>#yQ1S#/$|tg<蠖>ȘabV8S>}&o:ԃ.C=RtQ>|:XG>v܂2Hzע͒.1'>/kOgSe WVW[DIװocIǒnh&魩_\'2&'I1?|(GP:WA$]BB!x%+к *K\{ėtи)Kiժ^XFq=OFCܴ[(gv=/s,WeT|F-[9s W~|]S8z;&:?,la̗25#ܐ+OվrmˌE)usٺ=GbݣT:/d[Oأ,uulʞ`%Ϋ*On23Dci?+tQN+%dH^㢢&2ECmD~q?|m}"3Iv9o 8ИKһ>6~>pc >0o>\-10ԏ=޶ᶙVnGge%]IςIPF#q+|C|@$]BB!xїȉK\k֪z%̿m˕Pq{"K;a˨ԖMTUUE;vڈ$7cw2q:bޯs:Evҝ3M}PbaQXOԔIK+ierw;mA (-tLt&Mo 1s``O4 r|)V;lz[A t O.%tOKHH4D>gZ[.t*A穯Cj:icXIOq=/&~C7U'h s1G9tST4jKqF ^-B_rw[*OD ٳ'[MʓhZdd\|r" ]MP In9@98_5M0!FŠs0#c=y;n4IgZ?@t;'݊;WǒnWŒ&?Io-g4wV'lgOqIh8$}ڌ飯z'X{>DHThqO$@Mh:Gx~1<囩"AG9p>,K.1qbuvy A/Tң?[*19L3\`B[W$]BBq ͚M+Wuһt۶j*U/Mҁ;s{MG"3{Le%jjZ_^N7Sնm:y vWS62yQrB$>?~e ut|r)CRd!X.X x)J+JZI_?`YKKHH4Dn4daQ;% %󒋣~^)HOޱN!ZJ! =IAO?+K$WPu=ep3xt ű.jh@I/P;?6t!T֯_u˅)Vқ#΢nȤC#拤KHHH2eIR2pXÇ%GH:.rnB~V3-Yғ,:$ǧoi6%$$$?pI͐4i4ڽ[g<|ἅΧۆŕtWԕLOA8& #Fl#y rnBV $ )鋌o;>%]AAw^A iI  Bc%Et<IYCȨ3"  P/$2驒bn=v"  PE:JeԃޞLIAAzCK,竩e,W&ƒ>%] tAAA?\I)HH   />s޼'Y] 駊  B$ɤ[Qג~%,W;vAArfIoeM%%}*K#,H%]BBBB~֬IHHHH4:oIXKzK]C^Ò4tI/`HDHD㏢%D&QH!ʤ/.!!!XB$]BBBG11wE}BHD]v5 V&;yOwytY,"+D%$$$,vRnXײk-K%&.!!!hB$]BBBG1tH+8n3VE%$$$Wz+!!!!Ѹúi]bI*N&2Iu2jפ 5iWfm%u]e6%$$$$ \o(kׄZԲvk KHHHgX7v]9 _ҭg,U[R˖M(^!oĎ;̚!:\%$$$5p_$TIjK~PI zgH'jޢ-˗uAl9=m޲5ZM XwG V+V 2 CƱoA!t/ 5gIF9 ŀ$ ~|{Eﴈ1zMdApᯨ.k&fkpz-VA$}ޮ&,~~Sh.->v$j۾ax KN`<kw̶O 9)V[v[)?9*Dٝ@yIysȶ O***z!W {.F[vE]KZa1wX:L{p0EvI)_7hPͲhC_7nbIϸsA(*VARbՅHzﹻttEԬ:C'[Ba\5KtF]MFSSZ7<82ބA8.h3;ѵ0M61rmA(b$˷F5äJґ5g1%:I?o{wn~Zvs~>-ͱ#{z XaSZkPA:u^;\[A^ /I暈j9~!ڽg P¿|\kA1Z]ILK(jtAƂH B`IhHCT{ P9r֭ ZAFV$vO:U$$,x},.c Ү= B=p/kו˵VcJu-7װ/e9wIAh< 4~'m7/@җ,Y"  ?zt#1Lz!~aA9tP\AhfvG6  pQ$}u$  B*?zutAAA(1HsIrJ0%E%o={x&WTC Z/v>bfU@]oJ:muMǡ  H:8޳gOݻ7UWW,ZPK_b2E<ko]1IIȷlqSp   ,o'D]Kh GI?Oi&SYk-N`Qp "Y=Fvu2>&qOdEAA*?;.̸K/dһvJ+WTp_ʢ@enY+X ܕk[*nS}'.  P+Qu%?3~?K}J:b+PMM)}"3D8O9®Q7myOAAA1RΆWHJsHzz۷S&=)Sbʻ/Q&  1ut&(KҷmVosҵ<8$;ʖfS7"  BvK3%D KszOw >2θ7ɶT=(  I8Kz-Kƀ’%}˹:?']M{qߩ gTdz P[  b$]3!?7 K}HzAx  )Xߵ3"  Pb s|IߐVS ;~3DAA tG{݈%]BBBBBBBBBJsHDQQӦG>%ast £IKHHHHHHHHHC+l$玤t G!cޞe"K"E􊄨+I/kE%$$$$$$$$$|% sY;C+ x .!!!!!!!!!QxVY]D%$$$$$$$$$ J͠[&KHHHHHHHHHHz{]7KHHHHHHHHHg^L䲳I($J',鎠KHHHHHHHHHbIaHDQ[2$=rHDQoIzAI(.t/鎠[I?[$]BBBBBBBBBoɔD%$$$$$$$$$ $}LI_7tWE%2A %[@ŒH1Žh9r>, Z^C  |%]IwI8&#t2nСCҁA\uJ%M%$+ _~r2%}˹ fHD# ꊹͤR~ڷob޽={ݻA\^qwݾ?dv RGd$z_W!.JIh^L}99.ܠVرCA8pzoiž&$}OOcIR$]{ʹ+ȬڵK^i۶m*ںub˖- 1nڏlv_E%+JIIh^<]As+6[JuuXyfM6)6lQ^^A=z\q{ lfa3"yKe2$".½hfϑ-Ad\+++#!_~=]V^XreĊ+ۂ ±Zkw= x{UQ(Dҿwc9%?eV" !Aǟ)gLrqFu^fx/_.]J/E… iyE ±鸶k==xOpex{KҦHH5J*OmdA7]]Νx#Y{+KgD};KoD%0E2c!2$[j*uQ={6}4a5j >LP~o߾ԧOAӠAhذa?qDa_KaFd1 x&"B%UŢn?8*.×t\D1t\ϟ)GVBޣGO飏>uF]vΝ;SNwAap-ҥ_(y7N'̚5K?`* 9H긢aRtRF~UBs,HDC/.|wΕtISZ5/wЁMA۷_~Y%fzDQ{>b:CbZ$f~T$]Q["IΒMt WgH|1[Ȉ 9 #s; ~u _ރӾC?d0+.{?9ٓ{QH ؗޮ8 Ygg+sos  ~؝ هHn01#?7Ək=?S*޽{w2dʨc BZQGr!u1xA"$Xt@<~§}| gN?OIUh4w>q?t@ -C33 w!foʏ90tA#thAa 8\SlV *fT]L-;iuPvڭaE1*M-L%hƴްe|-鋶h*vlF??^M}_^-[%$HQp_,V=rnIhYt\(CYtd@ c.|PVܺ QKTREg[1_kJ=fUǣ=}_ܭLz]e.ADݕt%,,oc$}2K:2<$ sW#ȹK>r<ut_ԑYJ֭gˬY%]zQbzd=$>!!FH!$~9g3hUh-)g662~=U6f;کNr mnڴŰdưdzތm5{g&$ 믿~m`̙3_`1fb2ETQL:$}$v4%JRD%qtVm7"L>Gn}ԴiS5/qi>%VԭDN{qE}ut ʳr+ثAamǡwӯvWԫXv z1˹KH-+*5ZҿV ߱CfCГfIS]?-{nJv$7aྀ&쾤ɺ+JY}YfY}Y6H3e=IEPY:8b IgSҊ*SZìcʿ6*VfOTdvEvVVv0caDZY x|+M0rfi3٦x/{`>FAhYϬeV3x< F/m3V3x/{³>KxT##F)K&=Kkԛc]$]•tϱş#gIyT|`3qAƓ\\AO{E^AՔô%} mG3ۿgQH])/g"0ǃ;n)0ˬ!!9'$ $ 9F-VҭbL:BtXCjI_jC-\)-J3\H x]wu^dx QGu5)0YDY:(FCBFHŕ֌I:EbfI׎YMZŬau{ t}ɠmq8 zfV2˹B36q-<5 ?8ꘛlرcUN0;>3]$]QχoKY]$]!×twݻ7!S&VCt+KC*E\I-%GYsdod@mvDqYE<%#VԧK4PGT\PZ_5$}V@sz&Mg K!ôHJH:Y(snV+XAZ~7ʺͮ%F]Qztlr%]w(A%T,X+Iw3Vh'ds#d#'|<‘slgy,龘+]оL !1ዹ4?YVK.6z$NVݕuW3dKWҁ/GCCBFH ~%. lx4ʔ]v,wř44ʖU-i&3gxJ1ĂmpQ$].QRIErHDCDHqŅT<> 5jo|Eޤ )IG6}񖃴t!XWUi.JYw%`IɄC5[X3Z#Ig3Jҙ(IG6fӋs<‚n2GX+3)F'Cҙ,L6><ʢ3ȹrb=EjbBB[\Q*Js(s {@֣TG [| $4ݷͩi3v4iEhEċO)Jә,f.3kQBkʱh]~&pc_?13qbܐx:#6ަMzգ?)/+g'K$]Q2IΑt+ߊK4PO>C⹷_=CsxQ ҭhV-eY!4댤}3]8ɕMW|&FC/.9<-, Gh:$bŢ%Ny *4HX#ȹE;.V=IOMܓsKfX]B"/HŗtYAHԁ#YЁȪ;DDݗ[utKH x>(ID3:łޒ_ؒ^Ԓ3.jA#/nAc.>_܌&^ڌ\֌31<7V8&ZBۨ8=o,1!С!3p@(F|iãK%tWE%*\Iw ).x֟gzׂ&nUVj閭hI_ɬ~ęt&!Juf| ymc'D`ԉH_yo:p_tQcђ]: ?e1tHCܒ''2HrdGbB&b3cAw+AW!JY-ñD*fa. ]-n[2{/BB&Vح,,AYz5Cwɗ:8D]IwU@f3sh5Hf,3La_wdf]ߊ2?;dE 7Qǣv>Aq`<3xw/+=[GK0`*˗/x‹HD)0IG9&H" H: > ꫯJŗt7yY q,hEaGҏBwBԿs_Ƣ s5|%]w6_[0Ŝ|Kt{e8΂SM6}qsKBYAN9gBbn=(猕sWg0U&ufC4e 2L:>`8a%$}_.גW_IW^=wܒS+`۔3!1\DrcD<u4Y Yu+%gCIof}  cF0#o0o&~ }s%-3uf.3nUnvroBh?;`<Ù`f6ㆤ/%b$=W֭R!VIkYO4YoQ!A<@ү, /=Mcz@1SomG3;Yf m^d^jCK9AG;M~O2cŸL#AID%vLg$}$ tV̹$_/% 3>N|Dڵzn.>M^{̢OђOҲ㴪x.G?c*qa|x/JX瞄3L(M#.Q(l$݊HDCE}Iu6De%dݕtdӻG+)/)/V˕Wd>'4%]g+UfL<ݕJco]Ӓ>'Ew$=eF[Aw$=$.:w>rCCtK"OfA,'C0 bKhtI+|RGIvqr>x&M}|Aw)T]Q*램zY[zH]YQOu% MYAByYuWCn9ڢBp}[^裗YÇҺqh(^2`P;6lem%=6A۱qa 7(vN"."IZaeI‚ .PQ/΂t{ j+#"~XzMco3nhR_ I:9$ffdљG]"9,޹\ :wH΁/讜yB9Ls6@ҙk i 1v>|/6D)[l$]M_)L-9w>9O+뾤4˺Ud4YOdQϖU&dutI:X\ʫvS{nMFW*kNgJz_;M)|OOPf9`M9(h]~EƇqn.qWE%C.*XΒ~HDD%ʢjjy !9w Iy$"0j@=|9E= 1MQ!.JzKE$]1D%}َCLtt+癒[YҕReֵcE}f-,[ђY(Y}*lRs\BbnJ(Jҍ<FrθrOfeIgAtHhQf $݊IOrT1 HwXO`;BX;oA%s`ļsȹbKZd5t+JБI7:>hXQ!2/&U-.e.@u4rI%_YwE=C|Qz&A.ÄmݛtL/"= Pu%$$$$Jo{WJHDG%}'sHDCE-r =K.+V}^~wN&M+WRj(>A]c%$$$$װvXp@$]D$}G,Y]Ae?-.qXIDžyUՁ5{K'۶mS.]hĉTV,M^i>oEs2-|]ZK*0X̫18m- К D%C]I?Љ_".QI_`%|!E~Q*BЖ>=FwAʯ]}5b^s-ͻZqݴ/iy&BeԮIjЮ쪏XՕZ6iI]W톊vJrL|/Q3waZoW>?5<".QI?H:ҙe" J:.j&ص`ֵ+-Zϧu}Rum[d BʫiW:f5+heK/_L.\~9ܙ̞Bh~XR^s=ߌƏ|+gwX6ֱ;Ək{i# K4(CAZ/}F$]G sŎ vQґLӆ#hS^T\0r᪫ Ze|%E^H yO;fjEzمTh~2ǒ`*5~6klXǚ︊?{ͻ'Ih QH,Y!y\vHDD~/[k%b%qaG[ ӆvS5,]D+:V_pss/,X.hْ=dri43i796(7=]ޮ]KjҤoҡi2Qf2wum+2Fy\?.s΁fK9o4Dw[]O5dqYoaꕹcz|ιR۴WioΛfƬ˓Ǫ7RM{7j57$M?c9&{$w_{(aY9s_sǡ`)0" J0{8CI:'CK?6"JZuTyWt]qVZ}m˸gE3>9$y%f$Z[SMYp# ;~)4Si7>Wi!{=) qZw_>lRQmZQq8(hFfyjzk2SPYjhnݬc \dkmnc~h;:KK:Ɣ1K}G@$]8IxA^Ktų"G?"NpHI3'L@ͤUϿ@뮸B o&2LlBn4ۖ-iI3.| ܸ/YBV_Lߩ/~IOiJ˿Z=}.ro; :Rw_>lRQ7fblFѯ ܝz_`rvzOG,3J4nn>w;>Ml#ptusp>XRǞ.JO-G"! OX"I_Ȓ9̇K4P+xʭ+ <'/˕zѪ֭i3Ϥ7BTI8[̢>h/~N^z)76fPuCx_SQ7ߨ>Kͤioz~yhۑěo7Rw_>lhȔBƐo6T}8r`JgB+^=n6Rj#<< KRۭ6l-tN13>N2-Q;Gܓ/e{r\Yƈb1I_]}8<']1DLIg!WrAh+E% t|hv^eס%_o Z=0-Zz=TZզ ю#Gh߾};7k眣}yy9-YXW :}w_%u뿦/Ϙ>'D[,=zKM0}p39ԛgkDn<1&-1Я9cImSIx︢^\R1!PK; vJ_ZY"3jTƪ"ڒ?71y:>NBא1~yH=_6qggi9wu#4PD%>J"Y^EK~HDD]${l.Bο|xwMsiaV4}Y4翤EwEmC\׮]T};m 3iCE:_,=?3E~J'OV}KP(5QqcUH??ް>wӡ"!J&Y?d9G+ωK(VHһtL+YSs4iYgwg8jZ;,J^]V^MV9sЌ3 : >2_D_awۿI?D*+6h̒MK4L$pSc~)!.јpIߕ)-aI_h+D%.:ҋ/߽L='-fhR42Z;k-]-\HsYgΜI6P- z΋݂l:WEϿ@%#?+lclQqG4^?ן=D%s'鱨+Ioi$]eY?5K4TEgHc>pg(Azi$ x zpORẐ`Ѣ(>eT=Q˯X{WO-!!!!;D%s/YҗBmGK gt 9Si/ǝt ۿ,YI9,gւ|CYg J %@O>:$.!!!gK4[ү4GȹFI,Kf?ۯ]$"Z1d[6oh"KzhNYALYgE~֬Y4ctI6&OHǏq<ιFшLc!_Ҡ/2EBBB"IhQC-Jτ!sɤs%"J& t|xsOh,K:/od2f-]JfϦ,6Q i2&L.[=n?:9&ц*ڶmEiՀj])C:$ Ȓ~cq%]nsQVtPTUҵRo\)2~xڹ};m_VNs|Fyi-څ;h j])@ՀB~ԑR>QtBA PI7]IzI!?(i.k׮\R"D4'Ȳ~frs $I%]+mBVj*Irid˧tùtuP3}zV-[?5}TE4'/@nkH,:tP D&~sҒwH:~H_$}ڃ*38Q7uKp m+YҏzrFH:IIpI7MH:AK4c5l{'rmߺf?AH:(J/Z :Gjd~ K1j'= DA[Ud|IUUH:I"K F)Aϐt-op^́"~%t%}Oiڊlsxid' rm-5T"*}$$q%_ D~tp%M][e2'wS&wKp {'e< &#=RuG:&K\Ij$~ڹ)Idg* ;QtKp M{=9p &I.鎨T$W׫WZ /IWf/ϼ@>ѧ]4?rs.,i6ٰ Zv- rE򯥓JEUlO䲟U tMҟoֿj_}JSշG郤/Q56g.=#H.#vR7oVJKKiΜ9jdԧOziӦt9WЄm*ݬgI߬AAjoھqW9MZKEH ק{^xz뭷uԥK߿?5LBgV}9kϑG lE\#mQ~9K|CE!HM& =Q#鍞nAݕ":IGjI"I9qArH܇.IK!O  7]?ow#!%JI,|a%]ʺQH: ȉ-Sq܉($ I,鿅#5H%X]_wmAI:$#*UIO :FAN=vr4utԒ@ґZDx]O0ڶ zcj f| 8XS ]ڒXETHg;?8n [ht[ǭAAjonZ\/jԳ IGjE Ha_C***Ri/s~I? hߡ4zяk[> Av离5[?9ۤ,%WyvȜ%A녕+n)@O}:iHl#Ba?rYӏ]A- NIљӧhLj>kaO 5UvWP1mEO[NL_ ~xy^I&:[t|zYʸFjEK; *\ oy-@ЯaY>\$~.=pN^B,AS=mڼGض R]8zo j>zY%FCEna{hg;aTJS^t_tHA#醨+IOT>i؝ޢ1z4ve٦;Z\^?#Nljs[7=B=O9_3_.MҒ>'WG{eNuYO>lڳ;߄R`/;dAsK9/҆O n=]}lkoOKln#fQQs{<ڳtr靏M}Fu|.p_]Dύu%}ڿ' L G=/lA}e`}|\!鮨gJ+7~2}+rj46}Z,B#cx{ˑы˳I:/MS=^Y%'_{.cS i冝tEȭW/Tb~DGCEnahq&}A IoF]Oot[.9k:S}[e$/ź5կ'1[0es~XdII%޸˩țչ8xo]M3/;l.cn~[> owyuAAFTf'";@hI_w?݇H{$PJWn&S'-æ{atԥΓ^P}8~/ѿ~mn+#A}2'=n7hxnw1c>~HzQ}Jg."7K'nuq]K_{)(I_RAvc~2OOȽ 7.I$%6Sg%3 MU_}2$*z2uKreLGK^uoe1߼yɌ`rz۱zM˯dH:^1ߴ٦7e\7vz3ۦqD=\'=q/Q$}6R.VHiОwB[KheT_wA"5;=Քr]is9Ku_'.I$w77ekRQ%s\5vQO38ʒ[U/r=hsiWsOľՙgW4l謫.._WeZ^,:t&=TԠw`U?8e9 }>VmK77xĺA#Gi=cwu^M,z׎\f‚yO_ii$Mt~Y~w$q)dtuH:Rg\cw G32sg5 ^Gk/"RQ(ھ惘~őy"˳y7ˌeii$~S2<U_ }$ >BIG %IѩgX)%hDF93o~nku; _,,y5ՐK/'ɘ7]ZDu;Tq^W=]H<bF٨#nk& *蔳~ IGjEҒ~"fJTI9Ҿ `+y\8H7~ºAHU QI:Zjm3j1o"=wexyމ%weꍴKI5~4_G/Nc8c9+UIGjCR^$=-IsH:RI"駝{0-Aczu;QnA%}ʵlM5d"5no>y%mt{ѥt,?oW_=J kҝNvEtV$SQOKQH:R8I&Õ|Ţ3kwvA+"?_pf._MWTS9ajZ.~nRzf3sR%ӈKIiݩLH_ 7t6.Ӓ83jdH鮤Ez4V.Z HGI4ci-Z^i[B[ۚӭ,ONOk] K-H{H$zM , IԮx$~K+ IߟuH:RI."GE.ڒJҟnA"Zgd ZёvI4Β.#ry#)zs HM}H:$AieiĒ~{GcK8u~$-I~I܋uH:RSI.A#R( r~p.EH{H$yFnT~-J:'%ꋣ,:-XgCґJU%] H: [Z+;I n=]}l[?Fw 7ER%s;H#ᒮGѫ"3?v-#NAFҀ!??x4zD=nQϾ"I]*ዣF:++ߙD?~6w!"ckQ*۱-XYGA s.knfjР=JإO~^S}{핼ٓ$~РA4x`2dάY֟J WҏOIN\Io';C>;v q#!"ck73ISӾe}^RQQAGvYa bqoשkO0}Q;i# vcџn@H{H+[Z}//W S~~xt7=OC=b~{#ߣS;Py=i4l0u M3J3Ϡٕi94,ͤY4o( nԝzCǏx% '-E]F'O=رC ~Lĉ :9@JP?vnܾ}jUVSC$cFJ ݎ?f r"evSmZRJ-݇υj&魨h=o1%I7E=˭2 TC)fZ7mڤ}`I?Ǒ Vo;*Aڝ_lAgϧQ%*;}6 TBO?E=O{ӇRY]>4l0 0FmGLҔ4 byQ_9i3iR4]>^eHWjU./㜵EKzZ9毻]vP޷o⋴ $=zI Vl!sںn/{# +7lD6oϤOw?JMBu&ҟ?ߐaz'?LGEoM-iG-JzQǶA{w8?9~#$|?6s 1JvWi!MݻGKEHny$=^qF7~َX2p:*ۼnihF[# ;mАoDS&ۓkFSIh}3N_ ?mM=OS>?B/Mx^>\Ж[މ>\ӍnEN,\]v{!vK'gV7[8PNǍ}*niO-Ӌ_=zX[Dһ~Q['c)I${"@%H?l1DL{e1_CQ)eԗbsG2AݹTa=:~$4~(=?v cڼo/}o5]MtwPWѽCퟤ{5gLϏ(浦wVu6tP]ȉfXKKvrvpsqr8,7HPu}ͺ.*oohC7M/|Ub'DKw_J^ˋ寔_ /H[׏nI>l*-G.M-[yDO9%;yz_B6좛z(Aڝ_ׯO֭F#Гû;OwN=o*kTt7oSѳCE//>u?FENgPьhT4**EN,r#y{rJ893\Ιʙ|&Mc,g+9Ct PkΥsJPǎ?~+T+곏>_EԠrj>xݠ|vs4۳|$ߒ#itrԘ_@{XE{]L,ђu;;d5 Rw֣ka!/}@2IGR~Q[-%s_n7E;gFud lJ\lK6#ҜawsEzt{QFsy9Ƚ>8hYɒ0 z)B2ju9N7k H/NSW/w~D+}ߦ{їBnJc!>̕)UjTiyK;\wބK u3o:2Eu:eAtyK$hȵ#՞e]qNnH|u{P~Guy>fI>fuf94buVB6hkAvn)Q~R^o=_ջҗ~H9-ȹMO*eeeOzkی%?ׯQ{TX:>I7F #NX_G]^c.gct?sϥ$]nq}.ZBVm~_F[# ;uBʖ?[=^VB_!Ko}ޔ%UII->וW$UI_re5=-KGײZ%}~UmhQɵ9:6Ac$_tEȒn-,f5 R#>%q^o-^>ϒJKz#H:bImWVD]Ic%СC|dstIݶח;v, 0>#?ѮG2}²>rj*YJlE9YiyYn/JWnqI<5+e2#.X%lw˒8[?@led㋚2syLsoL#Kd[\2YFލ~YG):OU퓴N*]JwӒ {$<,'lnwn/y-Dʓr|ٖlw%z:l_Em پl[l^ZyʲMת.R7iT=:vrY_HKhen몢Jj7Ro~'[Њ-UY;z[՟[PAfd)K<8x|nlu^*ݴmL֮1{SGZݽ[ҭݛӟHKw/=׳:[tߡ}Nzt;'I~H'WFrN6tOzʗGMߘ>k.ld{zD=/Z03iim^#ISwءFѷnJm;vyi4h j߾=5oޜa.4vf3ezL\A/㖲/N,F-#9y)uڏZBG/Ke*u;^툅fBhP23tiqJԆ#*jbj3r c~ZO K M Egz3`zc_q2:2M'G~- ?ZUUBuOr;>:YNƭ.VQ5U'r2:[Ncq/U8jjsyণj{wceJwzLYC=^֩xzIx2ۗ:tp=[uzuI]U_2l{ _ݸ|~ϩ'*}oS)kU=s=Nxjw=Aw&yC/!GEN\FMT{s2&>3P[UrN}gmS{Bxԃ7}1׉lmKk֜mG9R5}gH~svNIfKet;f5s=uO]BgҫPaow{Cw|>-h]L'o*]ߠO??>G9c,]_`  K_`y K>K8,/)sa6g&g|~LL803ϛ,/gWSA_q&}qYigYȾ}wƏ%W{-iI/w#q4D%xZIꩧhÆ 귭E'.>v33pTYYiKٳGIڵ}nCHIhԳgOzwGιE+[h3)#2bKODɣBRQȈ+fIk iN:Od2lLO]ވ2aubȢȻ#仏J3es]y.79͢-q%U#Y\-W缟ݸ]DTRicCDz^kiL?7eTHȥ)Kvdęˈ|:;r*B3m}=R4W^t~RZ+z%%bRsʔ_eYr+Qױ-Vb -^LUl'6AI&JH=k#:ZOGoJE6bQlPWZ2Z~ ߢz;ŧo)u>΢cz.}uyW_@_[cZgՅ5 9e圥|,ry133|LkΣoL==|1pt+w<[LI}:/Qt1kԪU+u#N=]}lff4it^QF>=z>p˖4d(ܽ}hgG<ڦMzWqф|Ibѓ~J %2o>  OSR>^>Pz\[ȹ|0}t}*HkK<:l*GD˪5D])dn=͑fYZf֤ڶGEC1;HMJTetiTz::r:e:Z#8"OkIϕۄt'EmIwܖLJ\26đ;JI3k~N)Uo̢>>:f]Em?|[_W.}_8Jj}Y?Cs}w3L[p!}oEW_J'N^ـ㫳d98+9+8/^L'/,,䰌J} ^Q~{7,YL]vURϽξbCW{A'{Ǩmˁ89Z:Gb\eۮc!K)Ͼ 3u1Ge݌b֥* ,9^*uY/#?r`'bl?{`Aimzm[:3N .~_е^KO~T~}{O3<~L_~Y hт^uz7Uz-edy?)IrRNZYIwnyI*ݻWsNu/2j*ZlHny8q"1Be˖b{}ѭʲ~1 Rsڹr9)~tóΣu.|9t5Пgzᇕ|KJ__QM+ 4c ՗,]T-H_#}={Q}B\7/H_VitvH:R3 _7nHk֬QJ2eu{B,`_|E/raÆt]wwAnݺ* HGF4hr'YfW?/ɯϐCKOE-~G!H.HzeJ%I#HbtSYYE~QFB 2B"#%"2r"=(?k>cz!|Aq?Jz/*{ڶmKݺu~B ;D[AґY{_։\/IIs $hI_Ǒ?h$4.}tȐ!ԧO%ER8EZ/|JӦMSTIA}q}/2z.@wo>B (1H%7!H$}IIQ.HMF.rO\0ghuȇGMcԢ.&ϛ rR_ؑ˗$"Ak\.x5_H_]+K_"}EF܏Tglܓn|qRG+VRK/O%R-Ϛr#r oaj]o#ȵ\rmk\/~/Ђ.}gH!} 5S/uҎ_w1%]2\LI˷W^D]|eD9S/_{S~E.r+\%2Һuk Ԟ\.x5_H_ } GH_os>D(:$XRKX^8ʒW1`ER?. J#?e3ܣ._ -2һwoի?\_GAj_.r˵]rr.}']C/[] HuEI ؕs/!q$}4v7`(,}Qo013z@{P.CԶ]jQzTNkz{⵷oK__z+‹^5{_ H-\Z.t5^r͗kH }WH!}!җH"}1~'!HԈbufRr~+$MWL4I߰qk>3ǏӱcǨ=JҾ}Ԩ3Gk׮UT$D6ˈiӦo# /r k\.x5_H_ }CEWH!}!җH"}1~Uwһ;dHtH:(?K?U}VB|s_iS S E\~#W"u~ Ԏȵ\rmb.|KoiA+π VЅ,*I=iI@A!/A~!uѕP߻`*._ ȷB.Yl~ Ԏȵ\rmks/{ͥB0A "Kc-?5%tuH:(̋_ԏ9BQu93l"\<%:Os R;릘˵_ OУWHAA"Iw=SQyYIy5E"5uMA?(oE\я ȵ\ns3 :-Ju 頖a^LɺTKBpKdtAu}}t'/żJd]IS vYrAvF]_گok&A$I"+.d-:ZA/Zut?$IIV#^VLTTQqf͜ux^2aZ&hB)hIe,YF 穋1][/voK&^A#w;6lK.|!˳"Lje+zzٚLj7L=YiU>Q/Cg~HR?UGnSk]d>Zu_njQ7%*肶)"d=Z@XSZ%j :HQbW"S(A46E iXADi81e3ۿr?arI>:~NW1J\Y]obk\M}ߦ@oX>$ts4@%]:CPS./b:D53ng"Rی6|uB/Il"ݐ}_SrqNsLPY?/l0}(`K1%Sc.GKf'F{8樯.'l)-tIXLGE]QtW!'/h:$@(0r& IעI >ƙ.*I:#C29tS@MlIor.JGҵCO|I?,o.~AVI7D@|IzZԕ_iH9I >UtNJEF%NQ&IH%A}-+vWSȬZ82nq1ifUm\ؘUSji1^We?zQnm8?y=7:>F\ ,ԆkAN\IEX:b`!.qV\ B&r7:uNRIfKrlme|2J~bkb<]V|8KL{I\^Gd4èzosّۆKz,C>CM 97kk4G2F>Q$$;E9;.lJ)r7/IJlЈc=MXGt mTclǿAI^Д }Ymթ_N1ʶ$-nP{!ȶ>"\e=㜃?hl: Ms4 ۓ0ebS 4= z0d=կe K6>~q"ͶQuqOE+6"_5[['݇T=C<{X.{rLTI?Ētbo39NFӄIB<aueT,TGeiC>Qc+1Bt'Ze&PFsV?~e趑iR/MPł 5_Wن!D1_0CбCr =!2x$`~1%G|[{:>$9Qc/ H11חB/+Q [!IB<AudCm#Tޮ=󸪸sT{2a! m䃔/<_= 6mγ -H8 :)<SI\z@!W /.?f~̑Z(3`] TH/@"'H:*?fI o$[%]:$ĕ J!"#tDS9t;:%G!%H:$<\QϐtS!'=~I &GҒ%QH#-%]I >tB%];I >9:>Iע.H:țK @WI nҤj2}#l^R-ʊ =pI).s(8'AzV|uxu6)W&):/LT:Gk uB: "l^.Wؼrk#"$Û㞔rjչM϶< y|ЧM>7gF<9oʌGSe9RY^k䍜Jz+sCk67f'阝_<=BfԈeFʏ4O:Wٞ[D}􏺙D:l=OMF8AI.61ԓBïy=LqӅ}[ow㞍օ'S9'\ׂluIRocd`n\e^64ae0>Ao.j̲NF[%iF=Ե lηپm?FPFiC]/۱”}[Ǡv1u*>v!X;D3;>sCmjG,d#[]4>- B ['.QSow}!ɱ+AmSוjbM v=K]&:ͳ`>#?v} W؞EVPKɋKNXIׯ): @~,򈏬k$N:L5z3UuFID.j]r.ʶ-ۍ^J|ȺAD !Vs=5hó\Fc+ȭ7z=i﫠[7T}o !|a!kkdKfpyY|ٜ^ߌY13c{zy\%~y ;'2%hk]Sʷ.c 29< n_s9qK}0)|T' z?qm{ڍ3 ,f]Fǿ%aLMnZ@I[kHzΑN׉EA:ʠ'8]7sL'ĕJdO.(kh@p|I$醨{%QH:U$^rI >I$]/Xȋw+RI UtGIw.$D$tW%EJ"8 !'~Mrs7@HDU$\S rnd!O @,bK+VIpf9YPQ I &9_hI?RuII.#ۖ圓!KLI{!&gkA_wO0J+=wGGlI9gI?uGEE?fI I%]zJҝIwɡ I 69t"T^̂.I"WҵDzJ븒NW*AגH:KҒB.^@2&H:#]A;q%]>:$X/uLXjw)W=i?|Y%ݳ=COAU2Î{<~5t=1N8! =~..ǿt$E]F%8.M7;]層ݻ˲$RvP{Wew<LP#XS˱wLBrCU].S(^׾=#HpI}F-Lt>I+ef>إپ8SBXaX/UvjΖ2)B&rQf[/  ;yaX>rm/츇c~jsߜ8G߶i@Tҵ[%]=%tFFɔTX$ܽ}$:v]g!{G¤D D>dKbmOBc^4);ry$=l_\?KB2ÎuԞ.aeDyt%EyJ#;Pĕ[z%=3gyJ 4vsMO[*>YBLϘ'=[zBmH爏^Izw#uusvrэsTBf_]G!z$ ,3q7*t^gH#L6/GYv ;~yMX1C3?JI7EHkAϙ*Gꠐʂ#8$}AZҵJz+MJ?W+TQG|JTIitsĔtOU$]I?∺zc4@lIzKAgHtH:H*Z3nwђ@"IzZ3IWS~=$Xđ ҩkIwDQH:Uޣ(̼ܼ݅@<, I74qH: H"駾@ED]IW?$AG$H{O.tIȩ$#/./tI Tҋ|t%v$ݐ!$!.yې "gА@MN$kA@"r&鋎C29IK4H:/?fdJt5I 6F4$-H:ȭ+Q(Ix^a+ IW#醤@,bK%]$@IttRCG$}(IXАtWԽn:nw UtvH:U&E⊴&$DĖiI?Ŕ,"Qt-}@r.Z!$#o$DTE=kAH $ /.I 9 IׂI 9tS_IzW%s &aPEbKIϐt$TEеI 9s_ I $!?1$]]g6$$t)#馠VI y\I.'璮@2r*馠Kp əI7$DĖt%6Ig!7@2r*ZMI@, 9 H:$#o!!/.I 9t-ZүJ)"I 6ttH:H.鎨+I'"tsIׂI 9W TؒaI79$Dl$ݔttH:ɀP`\ҵǕt{AAsnNz.$AAAx#  H%#  H[_i@AA$/*/r.iQH@AA$$"i#  H^*闹.b78%tAAW2%gI10ћ8"鿃#  H^*?aI_BmNK\g!  %ܑ]IWr~O*^8cQȨ#/^t3+0ƫr76+[-ϓK[z~Q]#?y<8u1{̒OuF<-'OtQ(yȞKc撨y0Z.6@\%M2sa>s3q4vrA4|>{ ˽sn4ѹ'Fxsv$w]9ӖrFٌNJHӂR/ͩqs{bmՔ[Q.rKПɟ\)Jz_@obI0-hIQǒ\#2OF%r LIb죟,#38t_>9lLfZqә2r()Q3౬t ,4Q Od19LW,%:!ct:7{23ʍm=TǽS|2S#Zǜ%6ئy_Fٝ(_Fr2—Fgh숗!Q=3dۼ|8([ zm1sm>FSLedSlP6TDN?gٲVHeM:ezz鿎C^Ɇ*U>Ƞ(̋ٲ>~%}fMYm'%Sc,+P.YM7Y^ߖtwYZ%%*c) N*қEyB'SD!G2%}1*IW%2.#r̛J勥-ܟj| Qs^~'t¾t|M3H) ȳ<븓Nq cw7On'ї'xzFV,y|KEF<(= &'yxs GSyH;LɃ:1J4~3ܡIh7wjʛ{@Rݒ=iB9ih*i _u]uq/f!j$nk#WȒtV9iF6WfJ'A*+ihN,#]D9wr[.v74YgQ:20iA8?3MǶzcTJ`:rc*QI䷟T\;(]3՟#t-SL>o$2<_K&xTOg\f~9V=cŸ tܖfyj~#nx?Fc91Gcf\]=WI׌?FN8ۉyIDL(Ւ_W-/"(#L!U~6O?>FW T|`]6(]%}U.}SN:D?vsAσ%ݹ fys^t͒n*v H'u=r-]B99NNΎޜO{#*<9Lsrn2yrԛf6ޜpf><"WazD*ۺ]ݸ :t-圣t-a#Ig WQdH:x=Uҟ6bʹz=%$] _t?B.Ѣ$馨n)聒H[%ns$u~D}z)̑t1%ݕX.1D\?%P}n6GMQIu-鷹Q8Sҕr!-޾REƭMҳI_#I!)Qw%Ēnz>%ItslrQ%\NKzJGr]I:KzׄKlr#$UtS֭.ɱKE,ZԵkQIW'O.~j.ɹN_%61dJyPr!\E9ɐ3$]'L2n 9=%W%I$]/<ߔt-Q$?e=+Q瘂U}$}OҗgJWԝhI7E݉zQHN$IIx@|%s3a.IDK_H9%6t-馠GtIUm e*~6c.^V$#6AIu3ҢFC%(KE諿lLEPJ׷.,Y3nm zJ AWKՏS=,IQcQM&?38_Jd/KaןQU錨lf?ێ2l뱌 ݒ-9b~PKl Yg y4˯zpV l<Ə~S*x 51^H6T-uqԬ]鬕WFrL=GInVUoU+ZY=ĺr7|ϊJoZZ0KӓgDW{*=ozFH:yuw=0$P=x"IENDB`openturns-1.9/python/doc/developer_guide/Figures/win_native/cmake-gui-start.png000066400000000000000000001472521307543307100301400ustar00rootroot00000000000000PNG  IHDR>/sRGBgAMA a pHYsod?IDATx^Ǖ ݻwvxH"HIЉHJt"E hD=@CxKhxhxo{K4 @#&32+ >UV *>3CJ~ј}r/c.=pɟK/@NBEK|#nw?}M_JeV>nom/_KtON,g}|d|%HypO28jyc:rF8p8\NG9pr*d_<=8ٝ7z/Yȵp_ %x_KcϏ|e'_',%(U4mV|k|y_d}߉'x;{]l;{d>{p! r/=-&ͿO%uz?T]RSۚ_;;;MmVxÄuvzj;icWlMaJ5u:MLn.Ә[ی6>Scv+vЫye6q8=fq9bt?K34Mت85M)[B&o7дL i5Qr&j4wh:n؍2Ҙ "<쨵kόXMO [IO[A,'kTȀ%T<15꿈귈xs!=> a*j]Iߘ1{}>|n>Wns](n̡;VeN7t yǙ[:̤V1m݌ ngt/W ?M+xE5\:δS?BFP7_CRyV2Y(LO\ZHi¡T/?ZLJPTZ궜TҖmgfPmC-6nPeO k| ިF>٨'3 *#(>Gx1^  #J\A[hwiٮ(=ۚ-ޡ&mwΚtyLn* ՇhYdЛO>Lo1c[ǎm4;]Ѵp9EG WOʎ0iѴel3l3G=V}i3m#yD9ҿّWXҧ=tYZ]YoDzD0y#udQȢij5Kz5uA2k’*sv(ޘzE}.Iswq.?$X"(r|hCŊkF-S-,,B{,"@'iZ1-X[LHƋo`_O/YG/^G/ca-a5U4Pe/-DŽKX◰/V;|_- E>X==$-^DwJJ-2,B(,bh ~f޾-"|#a #|y[}ȁ9.;r( WE>Ԝ7Ĭ6K@^0?Df3D~̦:S /*F}@baÈ ?Zijx%I+xsH=C\}j?!C!0kiɺuA%Cx8|DD]8n$BQ { \7@s, eqa.&V֭`PΈ'XԍvaQWD]yMCi>O !Ɗuu#쮬G2#𮰋K V]Aug:.~9,RFC)φ+˜+Q-}oDnolaNf sprv̞|^fm0Tv-ZJܠE%eȺYoHetI K 1Yo+>i}0.i&2m3uzJF>g;zI}7+wS_C=Qƶso }r@o^ , å %Qς/tEw_ޛp^F7Q%{ٸԔ ˣҋoFG**Èg-YѓJhi2D^.agg/=KžJK7ӫJрSТȾAɾw.;Yjx5vmϏW[ s\&5Gab6J{Mϋ__lqt )}寻zV%x|b Xt굝EWvW}.x< ϸzFc$uAඓp8vD^3E%ۺv;N\Caw=vwtvYZYOf\ee~ͼ]3K;ce";y.^a..o2z8ޫ!YT3[ 6f'k 313F #y {q^F%g2[jfUꈨ kvP`9HI;oWCp:5޾bKF<%’ԋ 뛕? {iТ4x ]-O×iz )1t_sxl>Z,30_w7_C./SJ-=Dʹ#e:"/te:Le5Dm&md-ǯ4]KMǬagFf_M/^dyZfr%|LSnX-X-WpX 4Yb>$. \6p"~}7_XXMMRɏ^Joˢܛ^ SR_Hz.{7 é|Paq<KFv,1a˺H9g!.QQ mtD}A'+-un\Ⱥ!ZI+kaײv l V{Ǚjiݎ[djO֭}N 9YչԐauͼ{0"e "R.#3Vqafd}AYYgv}ߣټc뭻7΋6\w޺>PQlv-_EzT3[m]̾s9l,rnV.H>nsi')~p6ھMkms]\!꽧nPsg*;_l;!a e<;Jҭ}32k+ `oN,{Y`XG.?@oFXe2|~h|Xn~`d_x?)HBDմ sejCd~V5mԙ?xuL,LE~&ny,w5fFX#o$_Ad_ e!C@JpfJzf芀3a~PxRBј/SG7!@[N֨[`?>dcp4J <'cಔ#dyd_eav)H]߱%2.~LC2®hGCaDꇄB W3E=e9S}ZX:[Ӿ'I wV-n[Ҟ6#.YawH{\]g9SbDֵ¢n)1;®sX0"_SaRh6 ҮGCoӣ2.v.nE]zm4ivFfl2mdLuOȽhI%]O{t5r'#"n>wPhK0,Wk$a cqIH٘Ư C ˏ+g9ze&o3|Hp~#VaXK+"3%%^>Lɇ*A.W×l_zL]ʇMYD̨*w*]4/!Lд#kJ"cC@H1M,-a/2 /m ,D^(%bȔfx #:=o2UM>e#gy)pC wxoIaUj]#$QQsWU).cp9.93+cx''/d;Wp;!:WzLT5>Y.V3]DbGv(;+ޖȺv򮅝q~ԎvP9+QvFɺ 3]z躰nӰ v{1g=XgɌlO~ߜ;A#q;z3rl[Q;nmi1YʬԖVvjCZf#sklgv(Z.ëO?r7 ד;iCڒ6jFγWvlC+s%mh hA-ꮬx|;Ҩ f7(Aa ]O7牤v0qՊui4uQ8y2mct<7S]6ƙbeҺ8j `˿? S/\";g/ Y,X! |_Nb'SBegy^azߋ!+YEw"S6R'N+_dԨp]XdiкZ%E#FgBeM_ƭϓ|rX'Sٚٗ #Vkid,}:wn{JwDz>m?GɺL`Ҍ ~Qw %=.Bϓ[څ6,qi-Ly=FGΗD],M㲝ԉ 'NTصcyvGeN|5Qy[e17,VHu55 ;c]pGح]s/utz8%&u%Hz0Β݌[QnЀZYIxgZ|U=NCxۇ+Fև\1k-%aI~q e9Y릴%Y,`֏H\ZԇgCvNXKeee_JX;L\Y R8% wp%i KYDdi i4'^.f%EsLC>ldO~`*.Z菨#wa?˼0e,_Hm2};;g5|^j(P,AUh ȻlW`~mԛ5g'.-[ȿ>kⵙyٶr)TH~f},BAo~(o/fSAlNEǜ^u+K bJ? h]a_][=<`=w)\;_Y_FIF5dd}6]z3u2tF-qᎊ+pq9?Qdʳ*cTxtԑs$<_[dzvivR!Cօ1IJ{̾Lab&Jڍ 7,%nuuWE==>~@y)]Dalʒt_w]KLE.ֈ {e!4};뚾!ovlviޚ]t_iîj[+Qޏ>H!K|+ha0l>8cv5ylEE%S,j"-i<-eV2?Ok-ffa[?퇔Җ)+qXc|ԍBu[_EQW^L,!7 l=",7л~w+@ػjd02=*z{(NCftZSnE}to!TP/KA7Q2mf`a{BF4cfz0 kCm6N>u)knX@|yTa="tAvz<Tz?aW_SɌf^S&\W*EӮf]94Y,fzp>~HyFZHt>T>_ŵhµiյi-3:CGG%2/ݕ,vŖgHzFe4UuA!_S[FhuiDcc4Hme)Z04h;o;Lx:HyUE}iCG>p7<=F9^U]_ҦS6Lyܲdo-d0+6i˷/_=CI(|]g.GY/ko /t,K>!S~<ߩSԲCޤ߉뻬Us؟B[=.PTwfӕmdD}&:˷3"[< I ›@id"'G|Ycz|WBK=G!_D2C؅P]aw { ".K5Efrv3Wm]&%,F#JS<|r^9u~D#qR9m[gjD}YDֳz\wucv%$z(OMjBzڎW2+ ^TlR^EOyWDE}@3&UfaQ"X̅1YoŢ~=rMװ_ ~L)>f>=xtJ3uQ͆p|D:D]$3]OaDW(Q^E bCRuF׍QϿ{ P-.>],}Xe]D]³ JEͶ`EޢXBWϿJQًkIYe~/&C1:e Yz/iTF_K:aǵ2i+޿)svt?w`Q _1 8V9D"zL>xT*-4_d} u?0oV7t[F2k5=~cyNWEuEhW-< /h ,|PFOs`yg p6aE )ۉsxeI®=J.awj.}[YT_a {xe.#s}ك0f*;®u#y[dݎVev#2.@ԧ,;DΛRl^DB?ü4ߒe cXԧ-2jejii1DСJ|7',?~h`i034iѸ.IW!ͼ4fMoX~vꌕxyoOou-3FJ*wAUXaϐy#rs'uf~;KR/F@q2 f5uWsg,%aQnEN,{i!T^ϲN runi0jLw?y*{E+OG4?vuU2?~]^WoFsfLj}YS~ΝOwg?.}dĞIuaWSqScs5i:' =O:.˷MErY/>}"f?]S'nځlO:qN=վ=n}ؾԢccǨ:vߎ :u=6}{͝[PCf[.U2eeͨ [tosr_zr?-{b/n:_O&4uo7YǷ{Ιu].NzMh^Dqs n's=)z;,7fMYF>Sde.{4~~}=(׫˒/,_d::KK,>Q\[إ< ^ V#낧W5,ʺ퇢Rm"}2ď$yǩe񺹄]y]#"ل]I;.ۿz˺.遰[txvw׼TiauS]gAz]+aeqW>'""zL>ExohtW!;=͇F=qD^HZ hj(è縅TF4}}9~߾}y!ub)(o3NZBMAh?סa_ԡ $f*3UZFoi@_wz1|nSڕsLg0rqF# a*t?EDzDOZQktM{"Ov#U"h-E k^,zFh|h/^:v-ڹE|"|!ޠ"-݆Hv-zd>s~sP'wuoac̩Qg"e5f{|3n`fi0et2re3ceK[z[עây~L`Vͦo_}@u5$ 7&#뻃i0m6F2%,1׋Ž|%ev'f =s]،QGރx#-~zg9Ck$3wTKI>'QoHز1"ZEnl$שms\ƺoZf\23.YK a=s=uO aW뎬륌P"7]xv=.⮹K`t쨰v%sYO*Q6c o=m5hm ?T h>Ue[CO}OSm葎o+4ZX1j:O Z6| ion̸[~N)_OS︖f2s;BfC{[ iKmff0So&v=MK?bF2#BWe,qIt2_n7L:˗ \FɈJԏ˗H#"܁X# a9]ɼXQWۡ/LqqDG3ޝ$iZc/_Nբ>$H5}7E$=P^d17ՙ@+GDӒ|Ԋ˥xs!ПBMg,2E]WV/NkzB\iTwB͈3; FEփs-}K”ENbF;+IDPBuG⍄[nXGc> 2OCTƅJ&x">84 u3m?ƕx=3IOyd"_`GY_&*\QW/:ύEcTy gn+~.dz{l.n rv;r\&u]$1uKLع,.q|n e=Nt+X]v4.\H{]C@اۄsuvˍ,vv􈬫i1"xi˒q]FYW®®篳uQkK#gcY:;idGxcty0y]hʝx. F(4O2OuxĀ!VS_b4hԽhf,3s44h&3m[iCō~CKy,LMals>$f"elip]__/\,>AhFKz^<uUp~ԗI̗I'A,3i Y`ExeꋞJ"",ᨸo;=NM}sY7|",Oq[v޺LootŖ˲ˤ"JEҫY`Ad$}bo"(9L F|+{˘.`6'A}.寲|?`# z`ͩ ;;yJoY U,7n&z0B5Fze䄑n9=",Tv*L(L]a5OOmQcHb`$,@u5bꄢ$16U%Z'i[kD=8s^{9-V>#rOc6-fj"?«FNPԭ g#Tw]T}r2ŔulYLaپLNic:&>NsMQY;,JYmFԛ}x_LĿx kxg!uv zRbE;W.w~/]_DEݒC֭kY\]=Cmdfgq#">.dpYwveُO-%!qxsO'_Bv"e%tugؔ5Jpbe|C"oJ:e7 +KkhLqQ\Sg?7 ^rǗehVZR%{i=$ *#vR:7,V(Jd f =gU/FsR" ˔݄c__(5mtj1,Q2F/#?h7i[d˗3Kn|ҿ-}2)srB=~#}/1GړkA?HFH~3|lLI6_&Bs2>Z#ׁMZv0?ٗ%Us [m_3/cO3_B +mE\5lGDj8L*xv]zx]{ݖ!浙\/eQs5Rl6ЋSSeR}z I/WCVPK}7,R_&t2l̙;1O"A-9dm%|AH p[^">Olxe=[XD3<+J3IBEW?vO|sqa+H#LIFׯgI` LI [aWb:0ҮeVw[Բ(;F؍+X൴V>y>NmiMrzCY 4ng ^қjޞ~YZn`zSC~sv[L4Ԧ?کisДi/Fs1s{wi'~M~~lz}{E-xmFD̶Eɜ^J.YfE&8⨶xZn}aa c֗@ZY9X":ug;j2zE*\2u{G}=ܟi_o+iosϲo }r-oGw%}b ikm]m)!_L8u n2n;&tԵ\n؅Ec&{[h比/.ʹ"mTꋤj~lBnzo}t+"3hz WnLD-Ҏ!*!yr|?n?)gn'3u[9v.RJ3ϓz ~ |@xWص' { 4\Q 4%뮰Z_*q/w®Fy[d]T mg*Yeմwv3>K{Q+hkn{lN篢9kд{#L̈1ì n˴4rooIڐk__ޑh;uEŒaFQ[? ~ [OCy9dfrE{h=4_[gW,̕ƷmnM;E.ՙ [(N?RL$f [G-Cm;ӪK )Ebm}rD⫓%M9Yn @"K?xnF |zzyMgI[3ꋂ{k/2? fNQ˺ L\+H[_5sQG-|ԨL^t= YE=쏑]؅P}r'[X. Qg}\_[1+Qaw]˺#|-Hy[Ũy".n]/cSbx)[dZL-v[ao2l nsnD߿˦.rU$˿ĩӟg7N_2? _t?|_]Wk=5Ot#ˀ{2>#ߧN>o;onu.ZZXN-@֕;_&Mu+j4]5caWvZYک b[YMaYKwܶqfgE.I&>f$8zCVYݹ Wp t2\Xv@Io-C6,f_.K "㊽Էj][f.-E7X0S^c1Wb+vB`VM]m?8^QO7kBVMj1fL=(nS7ĴW *|ENez-Ej?eS2.FD~]G/ZCR?%KX?t$_"HztC9t-Kz@Etbu;]a z]u f#\#=r\6t=ʺ 1 [~dʺ gWֳJ{>.Iح+kJ{\q(J5-&vgJLY®e] ZW>~]M1n]o*uR[W8rw8rvbdž0q_Io9MՖ»໴Cgh년Ϲ`,XV1i#kOaxDa r'0E4 LnWI%!5jAMCv|a5acB>mpȕ ͈. QgOk JYEYDқ> vkz9d)c.zWWfSws=:c u: jBrgډ$h;iC8,qp m -YԯC/zؾl/mլG8,|urK=w1UV6f2!Z&1".8ǭ&cKoFߏXEO]A ^Nb%w^+IK׶$6,,#"ԵYEeKP$B6bdLQce<|LJx< ~ v1$ 3 e=ki E:QFYS#Nyy2~,%Qa7~s{g-V֭u!#/e:Ѐ]Ft:mK̃1ϥ M\*96Kў yyq`)YoVL%LaAzTح ՝C-[˅j0.poDs11ϩZvF`D[jȈʶ7jpke2ef^aVtgƈX+tXӷSi1mhZOBeɴL-+dZLL'V+NHMom2,Yϱd<;j aj= ϰ <2 <%R 4'NH8zy"++. +S;>a\_SV. XYT I`ΟG#xdYF҃,j^ w=-o1n6~yi6]A}&]Ɉ˟)SeE$'$uLGp!h{Em3>`>dA$\\]𵷢e=,FؽRD BT!*{= |ҩuzYWӔ+qo;|5Mݎ&&jt]}{f}uu`tu+zʺv#Z5jt=[ɺg EX[Qi҈[Qe}UId=F3D]K+ Q.wqe] 2AުI4'#r Y|wND,Ar?Y%>O/89q4/ 2OBMqZ˵Uޣm#FpR[K3-ҭF-f4 #َh(XY[3""-YX3M&Wˆmrm 1ώ3#*zk-5Jȣ, Ya)h2ˀ%[A8}C`2DX9E)qIhW0KJ):o.'F97; d)c!eFo{<\ ;΢kϤ۱ab)Hm=99KZe(>YDݒ Z֓{L\I||"E uKϏj^uW+>* !"K"*xmdRWFםԘ_{z-i$"j]֧ji7.vᦈvefuv*Y.;%V5v*vYa+Y7e=uAFsO->a/D_YwF՛ #5Y zdt=A+뱩/Dݝʺ5׳JneZ᫳[ɝAnGU^wRora7K, #kw=}P[zVjd ]#!T=mDGwP7FNY(77#j{K7wkFfxˈ6K7 w3#/l<5E枋uf5,Π++X&nţ6 T1WK.ȹQDž=C]ʺ_3 C_ B\\ߋnP寿vr B4®e=Oa[2˓PD%ŕnz[~% jd]$]z2ϡ@[NZ~/ag˦Vet]..0ka7#FEe]z|tFd]/ "zD{Y]QWYo2Eز<d=stF"2^Fs}F]Iv#_&8EO;I)2mzڦxE03~m@" 3J5z-G툶sQ(w'm +jjI0⽍ZOҽZj>i 5S0/ yq|p9ٱE#O1Od ZYDŽkQGx)(i<Ȣ0?  ~߀_Nw],;,^Lws[X@~Y``~}%󋮳CdrӖЅ%/Ƀ|lHAyy"u זK|0?OenѸ>uX3pmkϢCgU,Z̧i1XB~l ]nL-YͺeFD {H-BYw} BօdYB኷{]!/YJ; G֕s_걠Qwd] uAd]Mav.SbBae8%_gYW>bJgSa2F2 vu^ecye]cF{Syi'ɺUʘi0]\1ۅzn1bESW⮥}}N ,zYMX;m֦oaRgaV2sue)_r_t,e2#Kw94;EMga9r+&?jRA?n̏)c.cQdE%IԅPEgE%C)g)cD[6[vbǠ\/obe;c?E%ot8J}vT؅ ;& Oօ@ ET{G$nQv=%j+댚"_/ ]a[i][:t-J֕T~/뼴M[aʺvXYwG]iz ,ꮬ{)01Yo>Bz.𱾑9롨[NЪJ{j* 4b, gkXSSz]q0{&t٫Yx[K Kݚ%ӴdiZHy|GQ%xX/_Rgzn=Is-!fkfTk|}-V궖GQT&?Lĵh+qƭޟc4m// kVVbec,# ٧Y?Tge~ӆ,|α `| _$^f |, /,mЌ~}Fx,&q[I.SE~/S S2g-ӅY{\wf9̶?HshΆC4api0Ul:\ -d]ʎТxA][GK1Z*l,S-'hdʝ%'gzNQIos(Li]Ž.o|(bQ~Y  w_˛qC|8!sbӀqM2U,sޅ t\YL~ZetLQĂri%Ȉz(>qbQѿȿ[QW3Do?EL}_ȗ_[D]Yu#qQ?"_g%oQ?{ @iD}e!:g9NQϺl_]I:v4kC/)}-B_ȵH\ 3|FO/EFE +'|i U}|bwH{mԡzmz^. I̧ߔ󟄢BВ"[IwE}r0-Cͫ|,)8W.{ʫOn y=kBR?71?󈺖 Qw%=*` U]l:UXHS{L1v.cn> - E\k6,OZo4aMt3ޯr[Ǭg\ s<7 uHJ]Qo-;|P uŢlVz(e,Fgֹ"s9Wn47cFj!#i%Onz\ܦ}/ %}|LkBQo9rPE}#/j Le]`gij8[X$+&m 'Ŏ s`geTx}j)WcQ*D-V/DrHn1~!"x#r<ʶuD5VO>gqfQo'|C8a3u=Q*KT+zjW-&jgphP/۾Ǵ]rb{>!~]bYn{\mM}_3ϗN1|x/&TȹLVBziXݩ6W0q5%۹bL紡)abi[ݯ~=?~sv>X?ʽnt-icTJjܷ]|)D~ԠDEa*5d9m·]|x/BQdD> (h9m·]M-Q?rS@9{@[*W3"鮨=)|uW3DU(">Q/Qp#|ʸkY"V?#@I%-DԿQ$E}UeD!"}uJzd D+DuW! ,~3DRU\?S_YVA("w}qEdtCK#wDȐ<)Rh5Yj߻uJD8Zrdta%DGQբT1e{=إwԼysz@)w#VԭD3-!D;~}#BAOy߃-{>}ӧ믿EB\W#’΂ne="'~JkIEao:  K.Qoڴ)9sK:<(r=]w[D3D]KV Q  M.Qi2MP3]wVԛ9.92jJ5.#D: 6W_}EΝEFk!GF]QגRQGA&_Q5`Q#9SYЅRzuw[;U]l.](.5(Mfbb>拝oc/I}(ٳgA)HwDE?%%GO.u+*.9[I%^QۘB5;߻k:Sb.vrr:oo]Ksd?}ly]sYFף[f_}Rh?T ߸+ButO jTVwMp_$;NR35zOJva3yzEy8^Q^QNuWv݈`QDMY7|Ȧ|`)j^׶SFu4I׷H[ 6cUa7ɣ/ ?TEoߝGTe6D$N"b,2l2cz72-cU;wh:) ^2{o[G]u]ꄯi-urm+F~fym{|5oן)DԗQwe=CLߪ#[h5Ĝ\deH_˧+k14Scl{Rʫ[?vԱa]'ϕovۖeK˲mO|yEv;~~A"KqG$11ʍ-GcB&y-[g畘s6%'q>ݶ}n[ξ,|2tĉ}1}UndFůkVukpbǫ>zI>ƠD7g}FP.>7^ܶ65npSְaCSkŪ_;ǨԵۆ MylyB?mDZv/r] +g#WeT]$=QSԕYU((gNI I>WWw4mwl}sKzL]Ƕ뇯 pk/vRY|4})2ѩ/F6gOb2MDrUy;$r^s}%I}29%'A9D"}㚻ƹd;"\|_j!|E}- }aԠ /h] Ժ6keBڕ`Oy_Tnj@ԈK(3#3XeTݰ@QK\$14e \,UR |\v~SX>.:%.A_GS_8zӑ:N0CDӈdJk052EQ汲ԋc$PyԶy^iSm{>57;~`I>͌<܉"L q;֍} yFޗq]yX?qjx"&77AN>駟ҞVTV+ܳCPl Q`ޮlU nZVJ%AjUi={*kUmˋ߶oU!Y؇8sgOݜی\Ԣ]FWdY3DݕBD==Sۦn_RT/_iٴ 1doLwl=E¹"-3ܞ{>K:K>Dž}QsMyOyTyqE]=_DHACp~ I6c#玷׼c;v"#5-D]8ǎMQpQ(:w~D"\s: ߒ+۶mE&CXˤj[2u+WRPuAAr'Qi֭uM-Xԇ.ע>E=cDQo˂VCA QK  ŌMұc_ܼy3(r=]wV_ [NM/O}i;]0uP >tݳ(^{уzE'NP#8*w}|*-/YJ/7,Z.,Xu|;֭i8IhQ?F/71MpE͗I+<ޣ@)Q_*>T Qo?kf6uJ;DSLM;@#/YȺS?#X;[dD} D`%,Kɰet".gPtɲ@(ut!6G8EQ#GjF8X˝_DӜYP:I툺 scS_H簤3Dԙ5 ;p!NfD]X{=[!꠸ڽ-)Pd=Vk}.{͛{p( r]};uu5ei8>E #kAA9v G  H#[A}ӧO_ \Or}}׈NuP"DA)]r3gЗ_~IϟEB\WCD=G,LcQK3WuPt  Ru!#>5C\_uaE]楿ļ +gϞ{S7ڔoy )DԗogQ*Oעlr:~lD=ԍ%]YW~ۣFDQD.u+*.`=O˧<9]Ҟ7-j'>14kvw=׺_bJ,29<[גuܶ8OE[pl\(cؽqۺI[?8Oy~=|]y_#r?L6v:kDO M~I:]i]&폗Gԏa6#{jd}yq^ݽ.^]*0XҞ~%Oyjr%@klLmݎgnc*t$H=_8 <'T+Rc>wqe$~=}זڟט׋ɻ/we;v!cOL+#8Oy~>E=OdGL"hsIsL{n兞W;_YdD>͜[&KAfy|Z)q5{XuS_zIKS-^kt|T 3G8hxඁ H>߿?,*TnGx}}u,y[r0O_ oW2^nԢ^E} jn4͜[9ljH7iKE5ws]}mvF;E~/4բq-OZja{{N#rM%}2YvAP65ar߶kSa|ڿZa UHziG~%-v(T[X(2Dj>zu^UߐJN _d;_p\Fv #).;? NO?ٓIe+UU! L{(n0DoWEe m4Uj4X4Vf)߳ZqVѶd S78N!Փbm΂\ׂFY[ŲV#=}˺L60g7G0w'sd^ˤ~iS=&S^\>x8r'lA̗I:n[Y-u{~!xϥ>h VQ(Qpڎ XT("_Ty0"hG~t;NL^:8Iz/GlflK|X]O#v yvHL)_l?Ϡ?[!/^'ؕpx;v[<[p~kA.+vd~KR`[^%Ok)S},X_|O[Ls d6u- vk; ,"+X҅t2.o,O-ܫxEh:Q z ^\s:L.5G䛓|DO>;v"#5dQo}ͨU>QG/ǢG7LE]FF= ArΝ*Q~wAoRm۶"SyE%}Jjʹy{+Bﲨ\tPȺǼP(QGA$9L[nEFk!#"Hz۷Wbgj o<QGD?2/% 3Kԛ6mJǎSIs͠H*w}u;Uv'9^vz-9GՕQ>@Z{GԫW/:qA\WÊt#Zu7>KYYԅMuo%ݺuS#2Mr]}; +"Fc46wA[AuJ]'Q0:âo!zSUC("YE;]C 1Q8D}YQt}RK8-x!WfY?̢G7@Т~ʈZ%ǯϢ.+Q@).ԇ1Q( 0' ,Ʋ_FӻLXQ/h꣊+-, Q$(Qs_$u;D}QĢ>HPBD)QgAIgM\)CS#VԷ<Ǣo2E˩b, k^.һwoj޼ƀ(rzyUiy4ep.sIB;z$]I:>IDSkDֿ~zABE^s>}MF=O>tiA:滞.3̧+Vӹm"]|?߫W}GMwƂ.^Q eYDڷ}EABF3g/,6 ;rzu]O1W_}E| u/?LJz6P %^vE}p1%O R@t}Igwf]@\7tR'cǎy˅GzACD}þ1E}qG֏CAo+5vmw.||ᔑseE|2 m_r!'?[f 3v)騉6E:O,oay!DA( _|A}iu_QݝN_$!"SLm۶Ѽyhٲe^ONK,I&Ak@!qiMMs&%Nkbv^^'DAoOU[hԼ[8|>oޒf/ٕj2URŊٳgu_d6QeTVmg6u+2n/B]ɩ'T}]=zt̙JEFE'Oh瓣ԳE jГ*\ d31=+o_ 7VI36ӻ b t Q'[{^M# ͷE7lq.sߤ%[Ԩz6!^ב_^a=s0-[J.]Ie~|D] D3`Χs>acWSazNѳ?ӕ6ST7AWMGW\\$}vZ9sf0n%]Fe=>5FYn16u.̇BPo.^MoVGDtFJ!{ݮQGooں;EoYҟh>y紪$J#,嗀xQl۹?DzڬEPNu2Q#x6=zmcuoe}:TzШL-}PbY.>[{\)6 S:aY_r5 f+LFeuzR QDgϞFe]FEҫrK!h+?>M{ћRe;δι| >6啣aS:z_}!JߜBfm3}F>Euݧ?N!T)WOd *=d_|#*<黗Km?WFouLY{,/p: #Q߹ >vRj(~p.Ry=OxG?2WZ&7rrm7Oinڲc/ؽ_=vN:qӦ,E# | "*swﯚgL{E0j)mc f])^EEMuZ%m[>~AX|n;zn 1%ªU"S]DezEEEvIxhjl{]Jwձr\(G+{R9E9ccm/6n;zWd=Fa~:3{+g=?,~%MM|J1F /jۼPd<+q | n3:rmS탨#ri muk?vo ǛU_(ݹsҤ/n+nv;/ '}(~־e^.#G+9QP;maG뢐;}-K?}7^_3ASHjDEMzF2岴;UxUvT}euUN*Ierw;i=@v a}}!r%2>uԈ˔&SPKy ˺[cDMzy ͤrw;i= Qr Jy9p6GJ' "hݼ0D>y'|urQGb ꇎOR#w'[[Ҽ%;H8xH-f>v-ITΐEv^UK4'O?L#_{_[^!r~wg$OG+ʝ)R}R?xxE`E]B"虎mX{ eTڷ@[n'2_0A565a}b+2E$]\u)[7.]4/kd;^['A2DY}m$Tw._ kA(DԷ~D}TU¾'E]a>'=Ջ@E;>:9#r1mMҡүOyxG^C!:j}BE=RnHjǭ,\8!#"R.w}]U4jK~ʇ&XmO/wezy )fϞ=YoRzRjȶ^&ԪlH*Պ* a!E*uyeZ9ʝ6*[Qxݖu!zUj;[I( 岜0a;/^ߗIe;1q-wYiSy\L*>lþdRocQ92; AØeQ‚d})SL#ur B/5wV/POqe=& ȷAW]Og^\E<vԗ]3]"b~s /eW/-Y[H`"r>| U~X7"!b\ߴ䓞~ e-ӷ}Lٵ"2']}Ŋ4~x7n#d=cL`X_USQ R=&zp\lZΓm9lˈԵ_&~X3i u+CyOT)wh{OԃT>yRsڙ"{!oLbcB4m6Ҿ}w Et}{e$DAX&:ŤiӦt1u ͛7u%w=]ΚKL_}W"Ai._~]>ыw+,dtHoGA:=zP^ĉjddG\/n2cn%-]#"]|?"Y,CcqcQ U|;EOH= y&][njXsu廎>ϙFteu$!4~^ń?z"hQomP3D&اX)gQϿ}ӂ}iXԏ|).:@D}b~%y)uEg,5-?!-~֏C(߻bQp O sA$]8!%ќi/UG*VNcQDR ~s4(ߤs,.")ꝺ|GDȹeO=R#  rF^ӊzՖc2D}я":9DA DAOZQ?z-rn=N,?cEx rI r'{B2D}h= ]BA.;wά! j:/v"Ͼ E/E8} r) r'cZdCQW%'&: ȥ: ȥ~iΓ>c'Ɓ#>z \ڱnr"'YW:b穨Ƣybw?ϥeeTxٶz{DA3qՋmyk0 H)cu$U -XEQze} H!9{YsrDOk0 HI#iE}5˹'qQrn)DԿk_:̤ʮfAW^툗t_sڝ[8M5ݎ`(:bQ_Eo{cwX_Կ7 z ^M|mgFl˾2"#<6#Zg=: UAݰ=fGXLޠl9|KWԯj{kiW}=k+¾V?{OGюӟ0''_MԳ1Xui7\m7X{/"- Y }9= 58m^[ ';~JO>**՗I|\LQgQOy0bm;2cFۿщ^y}k+ZF=f~ˤaQiяhՑg乔S_>snuʷc4-oǏͲi|/Og S o^_ ľVǙcTY}3>"S翠΋QE!}TdQg ّ鏩-Jo۲^FWoEsOZ@mc S/v\etǡ3{춀{9K%_'a:_IlsH[_lz$^=z-c{k|;yG:4s c_ӈe+?~a]r p c_ӊ gD} ìﱨ?m4t揟A|/k-\EEݕ Q˹{ p)QKD}udsN%"zT=QG ,ԗW_(!_~V>'nd:nEV QGAA҉RWԵGD]1YC   >iEGOVXa#  H RSQ2i0   5MMD]Q=l:  Nne#; QGAA4 YD]QGAAI'EQEF@AAD'̔,>a:  Ma>   L*Q_抺Uj QGAAI-/jQ8C?A} QGAATxt:  OQâ~K"E   R]볜@AA$} u#롨=,X   >D|D}WuAAIBD]3MP!  RX u-ހe.O!  *D}Yy   EOQD/!  RԔF'   RP uW3EJa^:  MސE` V#~E>s:  Oޢ~&3!  R,?i:+Ye DAAAjDUQgƁ#  N D}7 zܽ@AA$e u@[0G] zC   *5&YDI, DAAAҧrDDAAAҤpQuAA)IRCQv   ND]s!  *Eu+ +4sAAA$mҊzfst:  BDݒ {"@AA$}   r    `j"®YD~fDAAAR'WE-uAAI+uAA),iEPmtK?0   SQGAA4I/ss^y>dQ8uAAI%+uW!  >iE"Iuz:  J:Q?Dݕբ   %!N E]#  HU[Qwd}>DAAAR'% :c=CIj!  6PADszJ:DAAA NMD]FSY>:  Sa#  H!)("V!  >ErugT   S|Q_^ QGAA)aQdu%FBAA$U.ꏲ Y#  H/ӸUYD5K .T#  HڤVG3(Q   :zGԟE:DAAAҧf>E\LggdQa?~EF@AAD'\*ꍙ'f<@UYBAA$M*GYԟ4ne   S|Q}0" !  : QJDݑu:  Oޢ~֡ uAA)A҈x:3,F3DitWEԯ#  H&y'ꮬ/#  HLqQs(uY.:QGAA)?gXԟaA   RXJ#ꎬCAA$}.Iks   )S|QgAVQGAA)v#  H!_->B  JQGAA4I'Grt:  NzQSg:  OjQo#ʺ_ԍ[Q   R;)ꎤkQ?QGAA)XԍGEIn:  %͇#  H!3Q%yf)DAAARJ:DAAA Ky#uAA),iE.˹!}-ꮤ`D*:  JQDgQzRzQGAABEzA#  HI-ms   :y,EDd#GI#  Ha).^   R3EyiQDAAAҧ`Q7,/ /-8XQGAA)8"Z֏BAAHԙ QS^,ˏ!  *E^łμlТ8uAA)[ATS~̓uAAIДYQGAA)Ly   RtQA|qZ)F@AAD$n%1:  M:Q?73rqZŢ~DAAAR%W|~ %j4} uAA) PtEݕVE?!  *5P҈t֊ZDDAAAҤ`QoJe$͒ 5QGAATI-FEHz[:  +Vԯ#  HDԯ0D;IPO)ˤ  *%Cԭk̈:DAAAR%Q&˴/eAXIIAA$]J#Fe:DAAA'/_0+#  H&aQrOukzh:  -?gQ_z)jeF[Q   iZ۳;>y^G=ut3|DAAA IMDOԭ`Io8-?z#  HU/)/2t!DAAA IEJMobDDAAARhFe4Mע~   )SQ2DBt32   StQo*nF_^x   ~Eݎ$TAAAC<ҢE /CAAyD=*6   :E0$}ta)DAAAR&=c(ꡤ`D*:  J!.nuw4   %HzcQw$   %9NDۅDD BIDDT@i Dݑ<#_t:%DKD]QQ$.G :(2EygTnwXӧR|5x }\Q߹ =qڋW^.o$5OZM9UCQ^ᯗ */KݫyB\绔TH.)5z<:{޷WݽnunjoSu&,JB. m;~qy+Ӟ|#?IE/VE?T!AÅr_9߷OoɷnoOnEK5u/H]+B.ϠV,&D#7'|')^.F扭v$|*iWg9s?=E]v]firNi? a1D!˩i/i1GGlrݽme^s/ϸcs =on#c>v~s~yzhsu7Kc=RϛAwIΙwWy\k~\>IO^~Ro|DSr5*+3Io ĞWG۾D֣Dkyv[ζ:®="2pm>y>}J.#s 1'[TIw}r9s\KFr{;R.5u2k['um$z8J>K ~݊# cɳ~9nEО1ṼW:߀ǫg~dyr54۶,.R'^nǗ#^m#d\GS\DD}6Q_'|Z /v4D+sm:/+ծ'OSy =F_5 ?<"qux['[ehs NA]VD-㶧7@dg =N۷t =F!}yԮ;g>mp%!BϙQ;Zy}ն3*eIn[ֳݺIqϥڈ#۪|5oqnݤv|?\ȵ?Ҿi/Wvl2^n}my.I>jD=u/_zmgOq7 Vz0NRN­k#ؓ/(IU1!֓Hj+~lr+K:sOžt9&Y7?!j$]SE̸]g^RΝTs\f+OǭFR[I| ]˄kn//~|z6#ǜh||;Mb>^L:ΖڟyIj+ާ`;O"Gy^wye??V5WԖuvuʹ_,;]HdprY~$ru,:dYK\o8S?Mq-}-c)G/<υ,Ǩ3H8ס_3Ԯ]OR2} w#q= c>/8o/ H'nrĔOmiǠ^LzD< w;i]޼M{޺"VRo߶9>o\Ֆ<1ŎuGPyrLr&vB6u6<#I9oǜ$Wl%~ޠ^/AFNgzcys:{,?> p?Gy#y_qut+녈zӦM̙3_ft\.r}|OkfL:U OF?<=∨S_&"GcJӊLQD뻎\>kL@ͨ>>C]>s#|'/Q?E}AaQꫯܹs \|EO@͘0aPǎ/Z1t% dDS6;Kp^[<􋉜_٩)n{q٧2ݦ>_ pA"ꮬ*vJ"qog`[V%ͷǻIG7ykկ۷myAZQurqg/OמN{ 3s,JEiS8Nhxn_P'yؾeR=]/QgssnG3%@n.?5@D O>DeTv@"%_QE"kf :THǒ%Khٲeb ZjY֭[G7n;< y~D/<|ϯ8\ԷmvI1gTSjҊ:u0 8P$]FERN#y>d]?<=uW ?X}Q+긆~jF~W~_$<=(Q_âޞ/,V>Jԛ6mJǎSEr C\us5}۷{%]^EBv wy''u,7dQѣՋN8F?F\>k'5P3FdtQ5Prq:y$;ti:s iy y^C'|<y{~ E}1 b}ExDI#u[njS(\.0@ܱ_<y{~ű.r!OBD"QkuuJY;. *D77Q%=CԏH#uJ(?Qôx־@1GPԵ }QDds>JԍC(-J՗ICIWeRQb־`T]@(VrYJu%,]RբT1eYĉ>u8"/,u5~%W)ǎ!AAA(oQT z;-鉢CAA$}RHb4[   >D}utmQGAAI/Fҳz(   $QGAAˆz#:  I:Q?u   %HW$QQGAAR3QeR:  #uAAIz uAA)(5u&6@-uAAI.w{*WS^BQ_ QGAA)g   RHQEBAA$e uWֽѲQGAA)#  H)U#  H_燢.ˤ  >uAAS[I   RuW!  R]ݩ/@AAY?CAAD}!:  0iD} m!  R]/BAADԵ#  HI;G=oQ   RXRE]d {WBAA YE]hQh:  "ꮬ&DAAAҧ䢾   FǬ:FѢne]#uAAIQ   RQE:DAAAҧQ͢@]_:DAAAҧPQ(V֗#  H&zVQ? QGAA4)#  H Sk2L܂-uAAI#  H#  %"[YuAAI|4[Y_rDAAAR   `>#uAAaJ"uAA)(5u}!  RTe DAAAҧ# DAAAҧ|   '_QGAAҧCAA]_`QJFE؏R   *%[#  HDԅ QqѐcE_6   :E΢~܈K+uAAIKUGec   S\Q?E M uAAIzc:  Ԣ:7]x\QGAAS; ǨA:   R3?z(/]_<#  H]ԕIWg_&EAAԩ3.n%]nո   S|Q_x\I,k!  *5u/ /#uAAIHKQGAA[o!)~NUuAAI҈|D]$   QGAAK0iEǭ%1u;   '͗IG Q#uAA)<uAAVraDֳ9  >+;O$u:  OIE]#  H*V3D!  Rä e#"}eRwaWT6m֪IE1jDpAc `=*I֥UFm(I\P>VAEą6,?sf33.3'>rgssLPn5L|Pon cPKP_u=^6M:@v u?:X_ӱ-cu%Cݍ#]PL͡~t&4E9ԯ Bj_mֱN${U&T u:@~zO փDQ[AIP>v~)Ե ;yBDcj/jNd$kĺ,u{wD>PEP1Nb]X6Ե:@>zqsj 1:@nzYPoOQ#] uLڊ%'Ի "fK2GY>]>ԍ :B C}|ĺX5h: Ǥ:@Vr6 U'~L3>PAP6nN񆺞Ǥ6W%= u=NdP6vPņ, uc;hqQ':@Fcl5#PGK[ u:P?PD}tm;CS6w}aD +zpB  :sԵ: u|cuhxH'P_HdPb}+GƇBC}>\bPNPo -ꞩ/ uLǤG]hRB q=:@68BPNd>v[QkY?ԷyFԣX$rPx3G ;ńz zIePN} u顄:@v Rh7 u|2GP̡>>Cs| uB]G:bB=PGCFUB C=uB + u\:ңP?PB!n#PG}>'n_9PCCC utB ńz:@>a_JdPNP钩/(,m/ 2Sh_NЩ/:@> ~LJdF:B`P:sӘPw9(,_u|̈́:@ u:@>|L;!""""~-(ԃHꈈʡܞPGDDDD:kucRkxztXCPB8kunE#""""a͡>Z|[jQۧWz/YǤ%H@PGDDDD,̚C8B Oa:""""b!V n}|hӦOĻXȳ0?6[9Z3/?1~?A,[8qDy>O ʞwz=bշQ`xQ&{`W” U^PrXǡ۽'8|WݾͮY=/7uwܪzlў8 \ro?2fZrդ Cu@zX#ƶOͼȌM#[nOl8o˶2>c㳛J1,9͏nL۴CQ/Osji}>cO%]d>~I'>^ދ|cs_}y('i? -틿 QϯYyM|O3fm_}?_eQϾjs]]PwNI*lގ}o}%+1؞(gGmW[_j/vp}y]|f%#F,~}n\&l|?+ٴEM,9A|Y gjRaN5myG!cBOwY9J655jRlץ{V@ ;7mߕ:9nQ/)1uutwlB;PM5H,mv=%F_?8w9Pӟ ء./y6bg" Ō5^9[Z#ϗޢsfQmMuo6e_w3XN"]w-j8l:yש SNjߛN}wZqB<6r]$?\-ǭVeS3o|^r2l_Էs:E~.T_@,P}}~,΋s}WYJr3l'y%:O?9mk_DFw/]c%g71KOkyXk<:R'"ZBmPuCbH'Xa{B=uX!XĺnP&Եuq*quO[} u R6u[QЃX_"GK/2u̡.8qqƅzR'Bk3ĺ7(QVKwIKܦL#Z1^VۻsxP/EwMn ߙB}f$DWPv;2˱R p{EJt<`R9[]UrϏC}9v_nj7aIO/Czo]f7z-y>}_kLo߫ ;3׾.h3oc짪\Ƿ~_s~hG>ig'ߍvfדÖҷgdsi׾u>5vm}uZ鱆*!vD^s=fI;Lv%j!.MϙnF*}od;l}_Fɿq_?e59)^;|=+ W1c(žtȁ ?YFedoj>g _Z 'Ȕ^j%%8V/Ow};68N|/ zOk y ;ʪ+ }MwV6倉ݱ0~ǡ. rć%ig?x٫7,+{hA?w?V} ӝ-!`cOK!wNh6~]@|Z(ZN-'oVH) 1u3N oӷAmivdt-2{]mn<]b 2@gM'cxgFi7.h;=4IiBnS"i>edrHI7CA mnwwl7G7F6| :t2t%^$ya2.\Pxxbxקz-VB/'{.?}!T@*b|&**><1܀e"PC?0OX+̱@I`_t%qHeܯLmdt܄(nQ0@Uqf3d-"n5 kL mx3qHr[%E[:rzذ+>n,/ٍ(88_>;C~dbC}2f [jv׌MvIs  [gһO[wtPRMYo.Di3uEQon-Б}v茒u芒 ey =1PI\Y'NPZ؎ۇmO}>,QG(~a~# mkY~B;BҞN砨+am-ON.5ICi>_ YDuu%즬[PxSIԯ D]K)m@hZtTJyY6)^m-#GlCv"nd90Zr98ZJPT~dHlم9ې-=KwJQo4H0e^L.fkC܅f}n#-I'ofIM flNAۡ %y;G.ȟz- BEEl;po*} O&b7Ox .&$ nsW+!6^G'EƜj>l&hxFh4~4DyouΨ5~JPe~9,dH2P"!e>((ER5HEH'IB"$GQ'rGL6E=HǼYC-Y:A>8mAw∺ΗGE$zŕPMiݜ]7^ x:ͰZAyBۣ#Z5$뮰?ۏ6 ]棤kj" i/dizvC`|0kk mCQ]a\˹-Vդ3.%tꛕΨ[YlF ۆd7g@؇P> )|G?>DL)6o}M|숖 umoEmnr ZLބdM'l&~[ƭcע#c֠ԯFwQAe+o GkBre_32|Ub?] ϫ Q x.JKڶQ g0>K)EK",Kt,Rkdl8Ke/b5.&bxC@`!^.t^|#B~s+vGNRqՏWpuYrv 5^A7AA⨝Da1nΰ>:e]̰-^v -!aɺ': .=ϒZ 6BN {0.^IAׯZ:tZ`lk{B9kz{'\ܗS5ꥢ板~?r@/* xQaϊհo/Xl d[^CG9?"#wYm~RQVG)ޏ}F\qF:cgIo2ʨD4}1\<ʰe,EApqF B rdEB^, ZOK.$󳶋eKglxՎ3=V6gd^/K3l4N/[+h>|%B$R5oaUڐ# ^, W+p[_8xtO A[/ {T\7_1(W)V‹e uyY| tkr҃0~!:eLx fn>N$23%36S3d4Tx]E` ^(\/! P $?7G߇>^Y}Q=]k>-e /ʈ{/醟(DYIq~FKh;'~-PѽZ8DYI6=HKB,_^/ _}uMW>MK˄2`ib룥l B}y/8FJ@CaT,ybx"9a>zzuZ d3NE$tWԉ ,D+͙E]g oxʎ h;)IvZ _jv)Ր@fn;iQcIR5~nWGy.fڕ1Z-9îd:/֮kHI%1 aGH҃Yvt)jv]Vm= ˠXa?ph @q'y_.](Pw z|Y1>ۄ0gl@k*$?d+ʾ?J?^(P5@ɡ9zQ˝J֬hzk"%[^#%tB x/Sa_-[=9nj>G<:""΀$]mx n[M)DX)D]g)я4P ۋȺ<سvcu)'즴 {5BE]/xG؅+Q'}zD]A$린1r; n@d]; :^l.o: ׯ.]G$뮰Sx~ȟG"@W3獀*A]-XZ9<=|ZPർȃ:x6H |EQQŝ3%x#B/I/ `?8H{t[kwpt*nt$ |w^ļ/N.ed_՗, Zm<9~z,/b:{5pa_Go)l34vY.s?̻]~  vxSޏBe1űkaNi"dϡ ]Lx~nc]հTϓ6Bat}3 &xEQևW:4޻HάHd+.(|c-X>Ku?.d$N۳Qg܉wYK%(wЛ^fvxGI %"rZn˺\zxi`]ͮkQN78mXZzpoLaXUb3}SuPX /g%Pԧ/0\0 _70ʯaZ_~Bd1ԡZP< Tc;S=j]70oa(i0R? ZJԗ[(ꮜfmO'q!/,$%4*צ/?X,ץ̄c0g1e>Jm᎓(٧PC}uj(ߋv.zVE}NhQHeۇE [o-(6XfUu:bbN"~(Yx4܂z!IqfwYxxa\J3}1p%zv}=^QcBҍdr Bz4CTFN\޽EJ҅%{rv/캒u%3̰;⮙ aۏBQmu1 "NY'Wy\z ^H<~V-06BBK[UCg}<ZS#=NSz.Pðiϼ&J xvco]H'yW䶠p#[CG!SO؏?m!jAl۽u<~'y}feڣ}1ь=юzcQRP\3jNhGkނm6߶/ͷ _Ib\OlQedǠo%ڵCu诌+}};'eJm8iE9eD+Bv]αɱY0M[/!ZWςeaYqk 0Wۏmb_z`?>xܽ<ɋE@ICx$ț`G2mv{̛ju\O~<4B܏|n6K9xI۷ЅJNjN:y܅i%Q^o,`cYi SGQGn*E:avja Zu“߇)`ENeCQ7A)6֩>)rG5($ݥƹy3 ;yv$aҎePDYkuf <ݜa_##d]pJ(~]β˙v!*fI܅ϳd=]'Yw}*i+ƃO' =yd*(ofCj7kcbt|i?p@*((DVu[@FBE;,8z#  E#P &"ld.RpW%Xx׍a7֏` &Qo>Ҏ6IKAy] o NM Yu jaz͡47XӲ>Q ˅WPD Ž] ݴp'%s#)n˃ 헪Yw%{0D"x[*x^"y{nO),vK /,T i{ [贱$RIn 6ڵW5'}2KmaZ?e,3>l-O&nqf/z:>6ĶG78)C{Ib[iBmo.{"N_ T 'yQ兊ua{Eʰ2c}][|o}lj>;>Q{=E\$m,#wN .!'6{X~߇[%{(] :3 M;_3d]Q +B5R#®'wh"fi]7^5QYw܇OMaGѶv}OWiR""쁴Gg3 ;~o4)3#. Y4>K̮WWzv=IjI\#g,;1®гB؅>tZ|$Xf/.4zz+,D#K Z?6'K(" S&aԏcpda׮Po:"D(_Nt3_w(EHB-#1(z4E}(tpF;k;`s-BЅuJ]c=fߍ! m<Ƽּ9U#lIz(衤Wb֫#K/%=TRd9<}\x/sHuQ.gIŌzәP/Z>jiOͨ6aPrN̜KQ35&*u<o/$9IܕhYwN\ Y- QW<jQ;)zP}XuXoE]J(E)Fqu%JEh2sD]K `!uC╄Syq,Ae_)42Ndu!Z%ӾqqQ`B(eK D~)r9Xg\$,FϨ;j-MQ窓ړX.h˷ |F,b1':u]679VU~oR%@,G1tkBYwJE$a'4L:q!3섔v!a}!끰τ;Z~:a nvB{[=n;J%bY |U1f֟ Y..ׯuQG`5PDx͸:vگoB E|5y ?u%ȋ0onxxzm"zN;O cqH`z`SldagueȊ,:(xAڛL'#/j<c}-7RԇeE={BݺuQY_.K7.R7*QO7aP(go9&,@%ᥥ/rn-IIQYq)zYN,}6`\um+PK"(b]z:-otSfYu3) zxC)Is4C37+I_ P#b֑˧1u %) '隨 $;$=e|N4lnBzlYG8@Ѳ~^KPv-a.Qt4d].a׳JD^#n@Io$]P?}>T~1 ᱩ8!z_LfB9>C8`C%:?n{*-zj$dUAD[F-snOKS7Smč/HfRj]sOOVe]1_pq3~S]h)7e ]T}0n&O}竷8^LqMO}^гԗS_CQKLJt3\ف'(1#F5QYw|I-d0/ B:­|kʺ %Ѩse!D9O}T7tO@رWثb~ !ǔhvvۚfڵtWiv] Xfv)? }ufu1îd]/]ή:W7[°項vyF9o 4 m:[~ᮚo⍇~*-}$&Kχq[EugԷ^i3ީޭsC!A}Xڨ>,k*h*j*i`}aC)X#x|V`˱l!mWf ߄y-A|hc Y (szE9'kӋ O_IMQY׺ O 9n(%QiApƀ QO>@ȴŒFva(G,g=QA/ܹX֛̄è֩d=|$c>Wz9hCqPУO@O%ӝgk3ы$u(xt|(HƠ;CURgy͡C0B̞Ȱk;rySQ/r*v\}>R ͤ3b%UsnC 86(9E)S u-؈[:xq4+Q'IJD"QB˹(:Bt{r&jmۖ~*H+[ }(dxE)xc}%}$mj_#dΨzK@7?Ճc;o!b_FN֠ER_iE neXe0/U@>VR?DyE=m^e(x?+7x{Ru݌u !_ ]:gDk4sxLSyu:;Y(4MSRy#rxJ-{IZ(֧Ip=!ZI5#hӶ)~Q`~Ēt գ8lqPz&|? ţx(HfCD |/%4cV֣NNf Xv)H;*nq?CȺ)r?ͦbW%O.o<`Bmz bY ; Z^騕0h+ꖇWäa޺0c~ՒY=Ys@ACϽN|sq;`-yٰ.`]1Wt[سa+06NyVd;cdq}~Ł@Pdl٢> wPv -uf-QgD]$鈖t_k<.%3\mUl?>/ G`c0{YF7ucC%%%@?\"唱~<#1;O}%Δ;)j 2ZBWFiPG"i^ >.;|\$D:|}0`>[WkZWLkV&& mb)-vd#E!_=C}I u=~ =֧@(~Y'a'hq h@u!~)m|!l'kD9U+>>-DPC4%+Yנ<NLDԑ zx-Un )R aDZ#3w>-Iqd] |u+Ͳke1mg>ɺO}"[]{oׂn65II\I~p^nJ.x*#u~y_oxg?G/?gxߐ_ Ϡo~5 /B Djx'?g(<~p*{/όt h.Dݸ4NԵo7%fw&Ѳhx*^e}0 e}ƣ($9[WC5rw<ǡO]xpk#d H t.[3X~PHo)CV,E_r, $g>pw'쁞wÇ(% Q(ghfl36GQ_yOq"E U RQi uOߚ%/QKKx7O@/[LMxlJ zIc1a4#I^J>?%>E(K:H#IPwW $dYJw-~Y7=fȼkͬc>s,FP$d>3eH%QFu"u OIT $PMYOY.Nص KlYj/F:"n,0%ZإKaBg}OŒ)ZfWuaSbݺئø3}w@O!gӁh& l&5A l59t:r,l`۱ACa+kBQOQo:@i,@Y܈&%BY>`QV¾V TMGB ۄO?I LWH!!S6H2XBmxqk#0V1| hpUJ+, |(ᄐomE$}(ᒞ=P?>@1@ҭ`t Qima6h$-JF iErA K ̟NSn%NJW壹 ʤ/O&%_dMD6EqLФ A".eܥ`:xoZxkx}jxeJxq x%K?p&]HzzZHPWDQ$IߣP SZI_2QQw2_ǁdu%>1#[aOAAu2o (ZI5rFDD0NN7+ivnzE f®ARڵka׳DHG|0DMwtt.<}xJ3ݑ Yu:ϩW / y y9_RWaJ^W{B}k} Sxb; T!^ H]WBM5WQq+Q [ u-R7AlO!Q`R X5i4c:*fU5Z!ٸ,NO tIgG@zB|޷^hAc&:\@Hk:o\FEЬD6!$ۈ0dHhE$[6 v>ҳ@V|`/;Q͓t[e.^; tDО%i;sZO߆lӶB˩[4Cl4Qhh"@4NRصf̚X5y22:w,֦`3ƁJ[Wick|/ʂa$ٰ&d7P_ ^^B9arӯ[5{-?\t/.{:͇?/;΃[P8I+gI̥F}u!Y #Xh\1w1zr?]r!d&#>f%D d] Y'mEE=1!Dݞam9.Bw靸MfiM]OIm33"N;JY'i n8Ү=x#ʺwvu+)/kY]Y7ݔQwuu7-)RWQz%ۢn PW7~%P%u7NjYR=@KfnZ#LFvaG_+2w 2z=.p\omq $˙uDmJbm"fl9]hYmEhV!FYmn)ݡlfl#$HWm!HgNْH;h3s'#RvHۡmМ^fS![zM&oƓN &low!(Yod9j-1j ~5(ī_(D=⤇eˉ_b~[OiX]"^2/`UNyR38Kvz^@1PX_Ϡs'{.?X$@PS~n.چ}6TAHO߀T@Y!I=JE]:J#Wωz'mu&i ]/I+&T.8Zԥ'+qN2[ g\ {,&4nt*d !B[P7~waS%f9BII؃u%Zʙ-BؕKauu!掰kdkCQ"u/Z̒u-ꡬ.Ynf="RMYA:w~*)rv].U V̰ tͰS3IgD(셁?q,F r͵-&|b!R%}YDY}-=M|d[ 7pK6fILFf#mh&w@  6Jvsd`1uCkDń-= 7;؍7QuWGzV y+$(uPE _$xJAߥj yDX=}2mDŽ@,QY3jR79wHC/y2;'zS3v+Tr>X@Al z /PD*QQb+ʊ| E'끨kR:!e=^ؽe2`J:Wt k ̲ 7^9SY'Pk- xDLF94*hYd(vڞ.] ;+=vefuvGKa'Yv-F?] ;ͬgP+a7g]YO3Nz=ɺ'%I֍YFzig [MAfcDв,}N͵kc>-즴ka4 &GO)=菪=|pB&F_csD/jMB -!rF;$\J"gr{{t2e$n;[r|#4-fgtx7Gl67htp7R>7dX#`PK&6(ւ5> *ʈP^WKuBnJ" ^\ O\ Z,d9X>@Eh#.E})`!BqP:HK+亾 E\mܟ] i cKr/rObY ='1́[PΫUP&nހQfx:!1F$$F=\ {DMDe/5W)O2-^|y-HCv鯿P= l]zJa/kŽq2-P, {bf$]z4Îߡ@֛N]a_6 ;ͮ]aGfS-4NveWNaJ7GX 6“&+uL,du"oxW&"yՐuc9I8.R =wD>%F!S-R u,ѳB1^. ^%1Jp:ʺ9g>'X ]RKIՕu)/uYG9WS4"(q.f-Y_Ⱥ\@Ωns_rQ { %M&MMiw]JI (u AyoKY YۡX(ot$5uLƒlv;DpYnmKbM7-5Yod VKOh-pD %[(4̀#"2* 8 "°($9Y!k-鮍Bɮ_Ry*x 2O}HWcD_!,?\ ~XPb"cBCBBAY:Zقf TNU UDMj0kS1' |xKj빂*YS+/l?aN teI?O<( (gQf9t;h@XRf˵%LmCF~Cq 1 z (*qNNR>tآv_8DtY< m;`8e]َc/#$!vu ;QfŽ8a:ȺnDO%uβ%17kYG7givvvS^]K{tvHa Y>[ce=]W=^n4U]J1v-$SD˺9nJ+ꁬ]8x:e}3떬5롨kR'a`}c 81=pF^u5r_n 9bNެgWwүUqA~~Qqp҃?悧/ rϩy*;,{)-w]ΩCrs&5.5qK<+nvyPRDiՒxvT%sShuu]7=*Q VX 0 0 u]E]r| 꿈Ef~?3 0 0 CM]X⊺ZE?2 0 0 C-Q7e=*J]Qaa!~cD5E/caa&|m6>yL_Lx6/ n> n̫69`yYW12 0 dϙ=.e="ꦤۢi&PUFJw,B|2 -c#olYjo"7аoIŇɫ59̛UiNJ+t:6z;ǩs,!zL`a8I(MG&bzoE, o&s L(MM&KIi=)[ܶ #}P<1,CZnOےдgT"-1g,C$^`u?aa+ƈ:Q#g` DjnAV[$V*MI _RZ~B#qqgrݗ8m/!uL 0 0WQd%^T!T͗%;yu(^RJKR[N?cӌ:Pu"oV^,H9mҗvc0 0E9!GO}0 0 0LQo2buQ~ 0 0 Q7e="bE"0 0 09't#iV371 0 0 c~Zu) IE?gaa&d%M H΢0 0 0e_WϨkV3 0 0LA2[Q3XaaТ8[K_XaaiQxEݔtuaa)[|ND::0 0 Ô7BNEaaaʎԢnJ:Ϩ3 0 0L"D})h4Q>.U*_XzˊH2+^=$N:;St0&OAEt14@ N=12.X"Uג'Rom f98pHҊRן;爉u XwC:0(.8?qHWCJr{}J9ʫB!_OeLHu]aW8Dݺ|ԙOzJ&'DݔO&DJ],s${(J|0 C4FG}3N 3aw7"mIY ;%Z^ pHїr8a} ~Pԅ$HHwT˞)7:8^9C2 Iml}V!] MQ1^T$}R|uif]FZJhω'Ǡ#F.!쫐p'/(W7yK1~NyG/=+> !_x-m PZ.=ۇaP_ڲ"k0Wvm+Na0P^V[Ic֡#DZZV4tI kE+}utxFGԛ͐.u4 "*$dO< ~H,˧:FM}m%MxwL_qWέ;S_2S "D/(-r\iU!mQN՗ė] FV:ţ8Rlv3SqjW%p=5VN9^-ht\}uyKE!/jR9q~^-CkU)PNC8gʼaYj %z}ŧ9M2PRQo hNrF|<9J?WS3u2$f#'Aͼqmi3hW_&984h?{&b,IL$ΐ8鉕!Ovvb'+8pHҊR\8Cf^M)n/l^jr"}!4Ckb+z; Jo\ޏ+uUK`BQKQ?uti,֦~V=N 5tĐͺ]1YAymڌe "^>KXd.g/} %KR;9\A~R!XAb%.Qi C`za!%{RԌZ@Ywvľ]S}ݞX,?ɲOj7a#mNJO,옙*gCЮܱ/ ̀iq3a`L0rIj/(goOrCFԿkW *Th>bpMȣ}7~`!5f `ykV45YJSB3׬Ю ?1t*m;?N׬E} xEݔQ7%Xʨ@n|n ~^ISMĴes\K3XٞiWcƾ)EWA_E*d_f'٧G;ye?Llԗ\sw* P='HiϭG/18p!}H+{4E4[y5`О=2BSX@+'5*@jP d]+4] qڳPf1X\WQC?qAAѸ?"8LHID}喬GD]/}_hFY:ä'iC^2vVxK>Wq iD]v19Ƶ${tC""P -FE5%ugQ/]\mgU%aY9ppc&d/O@юB" 3/,L)͌:8p!sH#_~%l߾14YeYۡ Pn*/LY@~T8peLްaC8~K[ner'+o}hQk@C>hԐt}3):k8q3aakt={'O`&7xҸOoCQԒu)lQGI:0 0JN/-`r'o Q_ :@u[UQ.3BgQgaa@&I"x%֫GE}&:A3:0 0 ÔR:I֋/<>CaQgaaC[n)F}{SgQgaaD} k}[~3nJ::0 0 Ô-BԷOJzFQxJaa)ZY$dQ/g턦3w5, 0 0 SHQ?*Eb(QoNJYaa0uDdKsu%Zu&ٻ-YSaa&o,~Mq?Ô OWxAxQx"f_GiQY( zT#:S?qΜ8p[|7XӹKի|?29Ɠƕ7>~ZI)}[3$b E)#H9pe2:g_|#hTj<c/i?)cPҊg}vzS'؜6xFBx(z6Qo.8HU[tW\*̶+&>6Mm7[rUO ^PB(ί՚7KL Gж_$CC>ve.6 Ő_>1W+5Ҭ~ujخxC;mI}ƠHuA~#78Ǡ`W/^K:~؟Hy;=?XeNE_8iܐVϝ;ezbȫ31PڬuޠF./UС^ߡR<+tXOe z _Aw_uZІv)zo9.XH:I:->3;QBQH뒸MA7P@HQ䩥1>-n|zOeQ;%ߕPݾYw_6R  ƂˤyI;v;8p(`~/5F/^%Tڨ-àeEȫ=L׆a*v*Wl KE=2 aFW븸~yFq-˥/rzdF]QK_ZVԅi"L3$pU1Q 32|:̧yp~ܫOkc5K"QwR~7"/LcXQ'zA#W1H=*$-ʩҴKhJx:Z*Mn} :^ʙݺc ]IQ-ht\}uyKeq*[X^L޷`2/.(6E~\W Z"z}5TkP%/e:O6{uW#Q?#b zfҹ(sg%꟫)uy ƛ'fWG{u}_|\&f}:ޜNߌP2a/}Q"X*HO}HqfYOhWy+.9Oj7>gѶ+|F9zD>s 7qEzr0~is_U6cW>Ue 3Ǟ3[,$I:~( . Bͼ0ԍS>^ؼ"DBh^8W@Sl9ĢgQޥ/{lZڝ֩M~V=NK/":.& .h'c$g)*`8F_W.)RWLԱS.} g?M9@=>HL1AIa .r|BJ62-KF>苮;};bxخUԾnϻv8X~end?ØG﫷*ԑq?ג+$BkbF=r3)t5GU!zB qt7Q8&_.]x2G|~_f YWBt_x%>Ǽ+S`m -͂"(ȃA-NtZm8ħhWwːlv#|x'c@IR߶@`R;VIgd RtTX MxB"4EVjԐ5Mpuϴ@D]eR!(r#摨/uIC .WY{ %r<~ρ+' vג̨rjł-qר-Hs1V:bQgrLEfF= Ij;v*Q c^nr~9pp%c&ǔTьM_,2pF:9>w/:ͪ JbF8p҈_~ ۷ogr k~T̨g1GIM̨~EMy{\=΢3?W8pC.f _ܺu+#h:BDauaa) uobEn*3, 0 0 S&5rF}))>`_N$Ƣ0 0 0eBEͤ]aQ1[.D:0 0 ÔzF=\B^dG$ /k|+#Gâ%+`ʴ9 0:йwNbk|hܸ064N4^qc{"utߌbdf:Ep*9i9a5:wz?~G&4N4^4n4ᱽd^i~Z,~^//Yo_X|U:8\03gϞ &4N4^4n4ᱽd^iHԗ>H,y!I+D}AU'Y:8"3OtLϿ~4/ߵoQYuuErdQѳgw&|\kp…DHG.J+Ica hE0o͘< Z6/H^iu7.ΨwN3ƒE,8ppW_}˷~ }\xQ_+Bi\\X%Z&}i&>Q+[:CʝaKDK#Io\ft}Ə}H1qo"|ۤm w?kyn:BJs*AM OGؔ&>.o%)+Ɩ4nL6_3t3ׅ͞?7x ^'= ?>Z{<L2JC^& :IQ:ͨwꇔZUJ-z ԭ;J,8pB&꛷OÌ[n>8QH[pӺ@:g:#]o>QQcQgb8.[T}"ΨlNOJ#D} 1NpܗkzץE.Lċ/:h/}gTTwKq> _mQqS̶Np u8\pSb/:+@ BJso~q}J۠xĬ7%l޾YcOӧs7mޜQwwa ~8wVg}R|edЄĻ͐^Z[+wYb"'ҽ^ē`p|른W:<~ٞYO31퐭L"Yo"<]/zF ,/+'p%2(n^q{anد ,=teiG8iJE]H:B^BQo( Q?,e I_VB'1LzxDRO+˩@x #n*i,8p(j7`uɧ:F wҸf<}!w¬Cm?qCv}K@ŅˁGBifMWqOݵ~ }-1#HbhTq1^x7؍Gӫ-u,j+6Eb(ʫ~\ޏśqԷZ0ʃZCʹ\:x/ 0axpo9~uLe3.GIZWkZx}θxs?n; D}: 0Dt/: ݐz6 N8`ƉHw~}'4y2΁Q?|zAߺ8drf鋙ܧmG:.GD}ͺ p}"afO,sxo~XK_HUߏ`iGy{WJX&t8Mx~֭iw!v|/e7f={$Bb+zҾ/_MQ+~@o.*Ԩ捋P*=?W<"@ o4I_n54|6|_nf%&| pCxoՄUE킦(zl1f\ 9$ {!Q_$KCW #$Eaͨ?Nԃ8WAqτҐuR,w!A'Xe%=`6`Q\+]ԳWOqE=[|\k|BtxLcp<ضm7mx&=i+S\:6zc!at:8(\ɢ0aÆpq˭[2qq %JEՂ&HQ(udɫWϜ\trC:簨3K.гgO8y}dqq %JCr)sQhbV=1![RQoęa.)tZSNb֑08x#ТNN4-9y+[{:&WHQ答aaaAj)hrN4'ƬSEQ8^No=u~:0 0 Ô$f(4Nb,'%E#8:0 0 Ô!Z[Y+kC5'b۩/Xaa5`jz:h=~=vE}0` OogQgaa2D}L@LQks(Q ubiuaa)+~zsM!$mv֟;)}:0 0 Ô$ &m~Gԇl8 CP+#?3 0 0LY@EMaF|pOVO(_6؉ޮs>0 0 0 3o81t:Mل Z~E}ĦSQw}eV΁6|j8@lD}c:} t 0Wb7:8΁?d+PԻM g(P#>ziQ{X9p\u8p(![Q|,|mm>vG0v ^EQp5й:Qr,]8)(z%sC ,8pPC9=gd>a(!βsCy ,8pPC֢~)^&n?c(x+uaQt;h76]9mGA}tE{cɶa""gK#P//}(]8p* {B-9`8p(ˠt8HԷSNg,˅Wj 8p(IԖ*U?]nn3/0 ď?;|v7c^Ac}>3 Ô\2 Ôc:Q/>L[{ +-oXDUo.ԙo.|0 S'GaթEZ(Ìu->EGXvS}Ea<0 S)pD0KW߅%ß@N|޽aaay/܍Gs_;Nrp${Qa23 0:Wg#ꇅ0_mQGXy3(^baa+lDzcԅoYaa&Kg­' 녈܂Eaaac[.W^kd;77R'KjTjW1 0 ÔcgEN*N.\tD}-ZԋK.jE=Ɔaa![Q_d"mQ_G$O/Y~_/K 3 0 \d#} Kv '.X|EوZjPv!ժ:j\~iA^f~uA;N/]'>rB өۿR/aaFVԗcvgQ}naa&5و eN[DD}˩/,|[Qw%='i`kٕ\e:HQΚV'$m|Rۡ3 0 0iFO VHbo.Ӎ$&:uR`0-0E:^rQFBQ$$m|R3?0 0 L6~ E}J:+[OZԳ0KK~4#]3ԒXCi_,5frNZ@R|i4_sϬ3 0 ä#+QDޏ Q5\߅o;e/HݛMi(Be9ͤa9DHnI3ɻ:Gެ)ӭhN*k+q7eE^c2_?XfaaE|ADԷٯʛk;W"0 0 \d'_Ú}gkO%4Eaad#??#Aa'[wjDY2S&8XaaIX E_KlEŋ 2 0 0LF?BQ_ଔuW||pb ua+={fad#5lJNcQgb ꫯboCgQg);QP|VqN`:LzxZQ5uq:X.nH[?sȽDLj#o?_^}O1eɏdE}7maANS_3 Ô!و~jMxF%_}#9~\9u۫\ "W6͸m7Q<#m>6aNBu:W7l/h?1cw0 S7ni PapSh8'3 Ôو3_@S`IɖpkSїA-6pzH&ĻB}ld6_%Q7ǐ.7; d'꛷OÌ[n>0 Ô1وzu}O&H?vD1)fh% 2 *[^ _P[䵄8mDcT/ا\&0)#O}/:+@, 0eL6>~!AņdωCQ?^s篡5,O6Dӗ7.>z0ehÒsC}uXWX|e41`&ZW 1'~ 7޽EaI/a, {3aZ(&W;k+h&卋w9-pо "Wry irXco`0Т~1xd1uqxx_[ :̢0 SƤ[7͢ 9SQKn3dBNm-iWd<4uy̱/6IB3p IwߋcǏ3 Ô1و87/ugVW}Ea)QuQQ[˕)̳+RtkcʵW/B'I"V cfl:äFb8r |0h![_|y ;wΜ9ˢ0 SƔEA)O}ZEaB͢ m, 0eGID]"e=Q^[A~#zu>s5\]xgaJ$z(:0 0 dOEDz9haa)\i::0 0 Ô YÖ_&eQgaaQfNӃ59իW l1q~Q GP]f^fCն" 0 0̵FE] z)ĉ*&!-0#oAj?oI~rԋE~F+ 0 0 cWh47+A+3Q?{, 2Nu 4`MOzNhz5xSu#h۶-|* Gd%hZ̼3]S޸a0 0 csE'|RF3mHx(]%.*oujx#͊caa҈:d?/#Q?w\QfIYs3YqwvKۭ uaa&lD}|ZQ'Aה/BYa?%hJ,1/lWaa&JEݔR?G],1fc?n?n1$\qu#aaklE" &"OOEA7( Q*xaaa;%uSӉz-uaaɆE GAS׽3 0 0$+Q_RMYV/^S|0 0 0lEXB.u z%uaaɊDuSmQL3 uaa)Yz ̴Pԉr)G#N4}bt*_+#%鯮2 0 0W9#Z Y_PƢ`ܹ7[S)Q#Od|_=5;eų=T;Pޟ\/y:M 0 0̕N~CStD {Dԟ%Ie'_ ~_x Ϳj( ⫓P4lz%t@5HuTaaje= jI/cQג^V@Fx/&%K}3USaa҈::(Ye"ꦤ׮];;Q@34Gk5fm_Y7gB#NuFaabɹ?7^=Jz֢jF=[vr3#f.wJE}, 0 0W 9Xe=עN7tћ؜97>^xݎǗxw+ 0 0GE.1kQϖAO}Ij'^pOqQ,j~Faar/3(M ! =ÞIrc1mɸY׾15$9wl:0 0UCNE(󳤨 YW^:0 0 Ôsr./+YgQgaaI/O (Q% Q' 3 0 0Ld-'K Q׳ r<0 0 0DgKQײ΢0 0 0S:Q~9YPIRuaad+7^yy6 샰z\ԝ=ڏT@)>qc&|~я9ZJ"x{jAqfj yq$s2̕B3:_M!V#f.2E{x7]Kh3 {Bme|w~ JrD'=62#8s0%y/}ɩCQE^#'%J rZ ?:eŗ._WE(Oz?qXuD_D ڈ/>vNxNqȦ.']0@b_\I߲wp+]qSҹ+=6AIv2 }֗sΟd⼧,JڗK>^^d}U- N܏X5[T6M}bdi-^bc* ϾxOfz'M]nlaFn$^_D>X2G"n|2[c2B9}=C| g~cLYI'X$8K99=W%u-QDݐZcOPq0>)&fN%9'qY.$lKlcJg_0G6u9yarF-/Qwnjߣ2ѮrLq1e}0HB{UiVWϹ);T쟯I 11Ty8j;2&x-ˬ''JztogiuA'$8yV*f&Kg[=Y+}IS^71 ۔7E`QʙPG?b/} ?RҶ3~!/x}T۱c/>=;q䒦.]209"3"t1⬉O:cP Q%!\Aiw7)>=/e.8~կ.mDV3VA]f=q5ָ:}2ˣFo1oAiV_{IDWIY_=V=&޸mZ۾pg60lD}z t%Qn:M:~(&NT_f%1KR;V>G6ua9~#?q~U\xnD"繘D>ߴYp!e] |M䍌ǩ_1Nؿ1mtL;pε]4SlL (OudzO kL4"ʘ iiU4=ǞuEY16~f>)KfQNRfb}I\14|)/a Ō>S9'>l@ seiNfJ99Oz91ci>̼ .R;]WɟtzߍmRbsΟiާQ}u3&+NK_͢+ZFBjĥy<9yDzLj}a$POA/fiy%?E~-GfFɦ._޴0L9$i;OR&_sLw)(;~Ӵgi~ t8}֘Emq^pz_#i \ۙާ<ӏϖYuvIJ OXcl3?q.\ui'7-Z7cQy(ꯡN\N%$] অ}òf~t}!DK }Gĉ"Mb,A_9I$ՕZ}c+!9qu4m/8-OY2 4Yv~(]g` u1N9H3/oO&zl|ieFq` c2m䪞2'eGθZ[u%Zԫ\͢9)~sƽq2uʊ/z|o9?F#YQsaϤ1-0Lq9;rMRh%𒈖s@y"Ϡv\2{l~~e@?l:/}d⼧,WW6rUϥ eGθ(uCҥ_E>D9i8_f+ʦWȎ4,3͠ĵQ>Fg֬C0sYt [?.du..C~] 'øe:&/m\Z#Zj|6^cLYI'X$8K91Օ\sIHGYѬ3n;;J,JmQ%o?zu:}X'̤4o\oZBW/a9r 'a6JEB~& `2 c{.SDJ|`bdhWe9).,9 x*Mُرf|MWXg٦ަcwAUۑ1mQ]f=q8y|pU}eyEM{Sa Ҍ7{BJu9X}~F6}4gb?3E/f02ED;cQ)y~?޲D>ğ6=߹8m?R.&G'10չPW^El}c"T.8Tk\Xo>Q#Oзtڷ4w\c/x =Pe"ˤ/^ڎk_veF֯E~'}ǵeS*QG<J2Q! 8ŌwyB*߇Pg{>z1e⋚aGq?:w>pI3cy.,ƹ8m{~c ~|~_}8y#c"qWW<sV/><#5z\WMLL*1 ձ~;+b~'{칀Z{+=B) z;/Ǔ=sM$|\ ik>^>(冦꧿ yɀ0;ew>i:e $=S߇"M{־m?"C7~=?.b;fG4477ѾY|bk]K,ӭ%3?V1E~\iȓfRO"~ ),;J]XQg&G.=DyQr%Sq2;rٸT>+AgQZ/3 0 sb[x<]D] , 0 \XOԢ~;{Dh %A3 0 0LyLDݔuj, 0 0 %u$V#-<&`Qgaa)+YD({ V#Qi~O\0 0 o-Q~Et͛M; d&9}_//4SsJb#f,#} ̾ж;AR^#{jX=44yrf.-%K

  • $4+ӼմK*oߤxu |mm 5Ve#Nixֶ/-NL9x2E}qzQ':Ϩ~BEN>DԑжNIqdSɚlWr:Y#|+KqNI۞"o,oR'Oo~84ʧ_eޘx)'XW)6qvd':qtw.bӐĺq) m`.;%uG[tz:-Ͼ)͇?M}&Va<2ǒM]v^Džaғa9Odd8n/CdGXFg|3/VDqUu'wuŮ:yXH{ܾqyRZI3.'n9%M{澛&I"_֘E-β?> !Ab'${i7SCaw.nc2z!sܑ4f_8y>yyߎ렞7bTyóħ6߾GP΢0 0 0% ~E]ϤG,E=x\|$a&JMqi>(&| I^"ROX'B;GFߑR?Z<.1>Qxf_7t6#j>{l5Ls>O&zl"iI}IϠn#d[>oLNȅ?x$E@EIE=uć\?$)GܗŒϢ=q"uڣsg~ӏ[a+}v Ia~}(_\Iz%&8>q4"/ 2O.W{l#uX_Rα~"\ϓ>[q}IϤ5}$J7&WxFuBoz+uEOJΤ4>YGOeYuGa+O3i@|ߣ\ԇR#~Če/qa26fܩ5? !/1ɓC4gbݚS> J7&gLVR҉e,rߒؤ4i,YgwqvNKC0LI9gew2!AuˎS缔^~U{L66o3"ڎI4n2]QG']ƛYZƼw1u8RaYYK|3Ms6nn9裕}crGiDz|Y^*8I~L"b$8? \!XQ{U;2GsN-KPf ڠz2i;f__⣐E:?W*1ҶoLdjU=ce_cS '|)[͓8Nޞ: 6b"GD|(̺@`L4: }Q=qQlXwܶ$}=,ן\$=*P IgQ7ٔ4EOJ9Fjܶt21,!0DLEI'VYo<6RgG܏?xf^__j'U⮫O:n6) 1X+iާ}}}vP3֏-GS_[̣ͨJ7<3 瓠syY'Gm/ܷqy8v)&9#/VPV!!-cvI%cY9%V!GQga(遨?k'I_7?}AS'_D2g!fP<_6.NeCa D=73-NYBN3~|OY΁4Yv~(f+ g` u1NK9H3/oiKgaa\~q߿?uaaP:Q_ryD=|0 0 au;}n{P&e$NҴᴭ/ ҈ZA_4Z`$91!d$ sy֭_~UV~2+'ݼLTKm|ŕBhbG!757\`>`80cl}،4!HL+eQ3TB!BbԽi浯}uΑjv@_j+SFvc$O+i;F!_bG!L3vWhQ.Ȏ^я~ԾO cM>hǵκ T=!BiM2;9ͨiԅO|5q |UyWיv^ |)}x@%Ŏ:B M6/:n (cԟqYӨ3Yێ6ڴk.^5Mm໴B!B^zk֓F]u}GSھ !vuN?tyMx\BmR#jF=GOD`ַ/4ffԗ@ɧH2^Iw1!B卺1ެ˨uc(-;?nI/q]y-IӤBuu:bl3iQ?i:RF!Bh۵Q]|5o_sԧB⺈BC{O65^۰oJ//B/bԵYFGϨDuoևFQβFue1YŨnw:v5g9LV вQowԵY6:T7g]L1uy,k?uoEy:D7?qc:F`:cYǨLŨkQ$>c_d Rڨ>Q*FtQ{uk1n/7g/on1_0OqfuL5bεF)rs`1әb[3Fݛu1a&3ըsƠF]QNQbŨ&}`OQte1ө7g]cwάufԣF5n,F`"z~5Τc1ɨLڛtk/ʎݮ|0FƜ=rouk֍Q0)F2iCnw;~5¨L֨_&gZ5zW0F]La%Q$^oԍI0k{QtLzɨf}W_B!BR97I_QG!BMjFL:B!BPkoF!B}WvsFݛt:B!BUڨ'~B!i?st:B!BިJۍQʟ| B!І4ɨIB!ڌb:F.<9r腉âkk8T~O{Ǽx:|M5\R}rcG6ꢤQf}ԝ6CautQ]=rFs޵/:6iN6=uk]Dj]{uM[ :>`j=>\Ľrj@(>jE-T|yI!AưZմw[y<}V0kTX{s4`K{ܶV¨?5ok79ip'ns"]#wbۓ$OxJ573j"yw7qWO><^2vւ2QTlhsT}'ȕw|{.׷a]ZH+9AL4ozH1>pvL6ϥk.ry]kv-q>]VwcVQ@<|RmV?Vjƕe1u5u, khy>VFa h[x3YG6k^8Oq#ߖm_D|}ק+u/h5ͨ;QRȞ5'eGP]1+)oGGz㙾g}ua_ 3$okЧqhlR1S&{,d.ݏ9֝K*>qǣmYs<ї }mo3g/5(SCb}tlJfԌW_~t:_[A2Ro+yxm}v> (}P3h7WVbc1[F|scA>eSuTh+UIF]v1[:~)7>9̌V+ɉsRucϵ1u[wd}rueǎcz$T $=7f֠Kx K}6]׬K>r͵;>>>Vo*o)Ox._,/WG\R+L|}ϵ?sK*kqz~J%k3WK/-ʗʓS(w^mDޛu愶jONQn}/fY雛ioظ?}utSj7O =~w Ǒ>%+S>'joj2:}Юc:-kc5]{1fkK#]7r}+]j7GX.>ǖO~.X^}:ycڗ)繨P="ɣ00^8cۮd>9u>6Dd1& )K$}'|vR'?޴ST=Nbu7w!^[vc%}]]ںdAE,~W.*7}q)Qbɺ>:y:k$ni9seUKn/ufX\k/۶;r^zUTkvD֠ϤڌVu"צb9_KGoTZ]SOTO\߰Lz?}M~ƛϱ~ꍎ{C[էeQ~Jޱ6D:y갲Kq̬6OŨm\E[$}Ũ߂QG!Bh6?qV:B!BRI_(F7Iw1!BOڨ?ԚQfcB!ZQQG!BhK4nQG!Bhӊz+eIdԽY?~1!BI5{{{YzrxH\RJ55!ꪫ??Fh$kShjJF]4ը5|+O~9I<$.TܴaZSbBG?s\s=?Y6en>wݠӧ$O*nZ0)1D!t$!~I֤MYΨau._Q֩.'7-bWm B~]xg>ӟt'y/g?k%;K~uEYK6eIRkԉaZ1D!tu4wuWs[+F׼ dkM/?Yb1zמwFп3λ6oZڐ껶93hvr}㩘/3ՅѠyhsa(nǎZGʛrQ?.8:#K3L}I&=ޥ/gayAhQG3ά5ԧ*uUOo^|U**1~'p̘iμ@_М5z|W 1U]B jSu%cUǚm\|vN#/jjbEy˨v->oWUkĬPFNMyR ScO#=k2i5uH샾1fF Mfht{EcF} z]x`c'qԚ&0hYn~K>Ǩ_^N.asڑ'6K׵/i͑'Ε'6GN{as밞myǸ\$.F}R E>eceXR^G^Y&~3Q9Ѧnj+6ъNerǭS?O6K}}9k%_>{,cUNrз֐}Py{/_o&~s[g Ϥw ډiUga1\8k7z5BXuޙz I]z1m6֤#?ܜ:ߧ^O9H?|zTY}94O?TS㜒ߗ|ΛOS*3 9Ѧ'u\`i^! MYR=ծ'=+%eXulx*]XAyuur~9cGmY8}@` [KuyKѨ?~70iUSK^Ps~Bu5O1Hר|OxMs%/h4}Dj:~̕ĥ֨O??x%2~-!2QW,qhz|y1?k|}ԖV׮?֕Ό~KZϰ>r v:ߣDa*%;_"9?>F},dxmebHo4I}?vq5qDS0.F֜Q&YW$Wi?>ͫ>ؗs_~w\?J+4ըSLJ>6-x}M~W?/J}HէUm 9cwO(NkxT}w;Ӥ/4Vvju63Oۨ6_[c bWGkxq'O;՟W;¾12} mkG걹6Sxu,2sG [d]}nQҗdz5G~U5JRkԷ>":zk_k͐++w]{}{_sUW5\s Bk1Ykd(kR֦ڍ6Iު5s>үa`$O*nZ0)1D!tW&]bz&YcRf]֦ڍUo/h&}^ʯJswOJ!qE ӚCB_o|!ۚonq]w|h>O6w}7Bk1Ykd(kR֦ڍ1.zK_jw=+ C⒊WJp1D!t%8TmdmMXڨ{4O_#B!䍺6uB!YF],:B!BkUQ`7B!zU~ѭuB!6$1e_QG!BhkTm&Ũ#B!^M2YB!К忣^mES 7~; !BO|mOzX&5F]̺7C~|~hV2ꢢQFYJcaZum֯/uF`:k7W`&3Ũ{N6OQf2u,nԟ0߈Q*F]7άc3Ǩ??}KlԵYǨLgQf=kԽYjF潝ȑ#kcz1/fkkmvnv[0mlh6g1žkv=m堶g1sW_NcΥK]9Ē[ym5UA_fZJ楕Ƨc=1cQwՋF]dW3 P)Mmܸ95#,YO2/N+BB?c@~1y19?Kҩ籌+c?\!cϕ+Y*WOsoY7k0'5=Q f7ޑ )3fLooט٥~1;M>q}op!.m^_Kk\,S/xӕ Y=o'<'qgoϝnu ץ:muɑZud.UuF<ꬩ<%0ߨggvְߨcѻc0\k5>WߐMvEGqi ]lGbVq "rq3mrFsN?mX~1. ` 9\>{θ'B!'5OpRFXð2G3WΓ_[Okt,n3olG=ZiIəՌ}R{<9ӔK<=Bw̨;<]*0Q6SV s^/uqIRlOCQcsmpNAccs ÍO1Zl`DJuʕ\?b*hԽYQ?[ wFw8PW_y :Ũw¨b5z:F`ej/uwG0ōzI2s]ňs ~_JJǼ)gY\>o<ۊ1,AmcoKj5S1K{\R|{Sr`)`/e{zn;_SxSuSJ+L1ͳKkcvl9ӖMqcopЗ0m^_Kk\,S/_?u遁DiR_||{yZU_TַUc :R]luɑZud.UuF<ꬩ<%i,nԟe.]u1'wMk5 nui] enP$f\hv7x :Mk_YقO q7dt}Q<[C7e=$ؼ5!8a ǎxu7~},l Rq{0.=zP@́j!5OpRFXð2G3WΓ_[OktsWѨ{u n@71͐C Y/QQ:K*QW&;H130[ 3җQ,JvfPnX gN?KPKɸDsQ׎LاpTׄuMEb]YgTΓ<`u{]z䳓ZԨȊ:0LJH.a:s҆ǤQgl3h/6i/a?L,t^]V^Gs-2٨Kۥ9|Qu,q MMX bi*cԟu$͓TKKxl#=جIʤL2~9Ep0ۨ=0m{y#:7֠;nϸ/:dԍF] 7w,a?=?e[lg0 -}R1v;zfrf޷L\TLornSvkP?[ׁfMkI^CX;^a iW%} &lcEG߸Q ɹ񤍒Y- 7Eƾ,y?h $_ îh-/p{MɇfuRxReКAxU(m/sFJF\dKL.]7a¯3Е7Ү|Q(Z_Зm9^'|l/v.8sm۲kÛf7Ѯ/wdҼ)m2.nwonjz.}1V4 A_56gM>/}Z)s̍C1֙%D&o/?X?X˯!}*%I4GYL?Xm5cY1ɹ=l ࠰Q.z1U\K7ykhUZnnaot¬[HM{y#7wM#Kܾ!IvWib:5>8<%#0H"L^ *.4ElbnΡȈر>mB{E ֊ŋǑqkcOۏZ0Fj~֬Sӗ]ӰӮPws4T{5h|)/|TNQOĨ5g_QT0M([)SQZMO'zb q)uc^7R]_?CÝ9,-EK9QW ܼ%קc(Bf*Qzr1Hƺ0R\drd{՘TX~篐XiW2N弻q1˭A!5X)߬1bҵV6rQfaM!{:7# H &ṉcʎW l91MUګi4UŴu-dQ/ zѨ:tum֯3cԽYǨLgF]Q\?;73{%w-{E峆`T1ϐ$*lrnSvkP?[ q׾ǐRM*v"9әKX%c T\3ը6xAoF] zT.F&n⾖_6f^p+}Y~W+I9к4SOOv95%v:ם񤮍ˌ5k{<z bQo>a67"[2grM rvxvϧOweů+_gN+uc-g]{}[>6/^aŶm5Mh̗;2@~iދ63c`MM>}uM/&]VDA\->kn} ceFFC^TA֟fa}*%I4GYL?Xm5cY1ɹ=lkڦS}aQ~{o֓FIg֗1rA+E_/|".L:^ů;XG%nܤk}Tt;W1 KzMSs{ܖbG۶%A]}Q\& C؎w{3nbnΡȈر>mB{E ֊ŋǑqkcOۏZ0Fj~֬Sӗ]ӰӮPws4T{5hX0cObzDsJ_'2i%\4^לL2j7벫5֬mbG=[ht "ic*X8~۫{Fah7#4r K9QW ܼ%קc(Bf*Qzr1Hƺ0R\drd{՘TX~篐XiW2N弻q1˭A!5dw2Eq}vkTu|*F]6~W} .dor<ąor֑&yLܘ oB\|qXOF`MQUL013]dG}$9*MXS܎c<6/O)'xIiC`P^i}3> iO?ubwu$H#k_T{5(x)&دgjԿyf;\~F #3wEnĥ.olFӼ2Qy/~AZp}uci#W{3}+ܠl̼\\ܸ6kg|{ccYK1&gg\ʪ1:Ռaչ".Ƴ0>C>.5adF/K\<~}c,3H3a-gZ0zקY雗~-0nEk}tk= 9Jť+X^ppb茺6Y.&]tFrCǛ.(kEuCb^*'iiW:gj6yv=? ~0a7mXj/L5>:u2Z 4gHvv%D6ݥLۿ#e)ύOw;;f ^,}1z5q$ paͱ>XKX134쨏!i *c}q}2S>lX̨ss,oԭ9r՗UzjgUkljS,hSM)Jo+eǘ*nԝ,Q_zǹ5}njŵwc9XK1&g(Untj .<4eAyp%)olM S})&^l̺ѨQ7꾣)Z5 w`5vW=kԻLz;F}۫v zw7P,.rF;>g+꾟wbf0ը뜋_F].Z?j5ެ_ٗAwF]v1YŨ9azQڌ՜mt/fGiuggWZ]ikm[قO F3S(. יԳT/L5Ik1XB_lp|UY u>}#}Ɏ/.c5xtټ=u1r 1c(˕ҦL"ch1>,^.\7Xω&51#6/>l&TVQjʻA_v951q% K8Fܿ;ǜC+ĥf3s*7:v5~wsύ2RUΒ7&U`kLˤ5@bF廓Ĥ/~J`k1ƨOD僂 ԰QQXw`&6ޚcfV|`:u:*f/ެ/bԃQ4{{/"vvٖ=e\SP*nbCϼ̻ʌ~_JJ2O~/5Bvݻ~Ο P;;>*y\<.~ :Dմa'+O{B%c0FbQO|eg%.fur7ވ"*mj,0ewikY߇ĺ]/V2u4vðk>:87׽Àt3Np>oFT'uM]f ^oZp~v.t̟LV+iŲd"=_n]sSbWwfZ |Зm9^'1|lff^a]¶mͯh̗;2@~i~ǖJi%Jk|ގ+76]n_czwWf5iksZ vY} t܂/}Zך5̍C1֙%D&o/?X?X TKrד{i~رkPcs{YΨ;6w5rg\ŨŴt_m&/.:^ ܺ7rcxwJ^m nq*ƞq|~Cσ|7yRZš(Ӧelr|*.YqXKF`EG񜼖 a;ekbܛJq1 +*X+/GrıNA?m?:kYNM_vM2OC<8ReנfaV>LRlF9&vhtR7V\enx{/ICo?ӻqJ]{gW1 QpoF里?&JTtcMU24S¹ Qzr1Hƺ0R\drd{՘yXX~罐XiW2N弻q1˭A!5X)X {V3rq={:Cx͍D%ncWl91?Uګb4TŴ4ao)ˬR&elR̚Ƕyl8_R=:O6.<$P^ng|:Sb8u].]67:$^v :oIs0Itn7 i K7({i@֡$ 0&WMoZ^ar(qs n%2ׯߗFɮ\<]6Tty1 ,̺Na0G]Y5F1&|zqs  $քM,r81ٖx3{ AmV!u_KA![|]Rk0/$v;~2FbNsZݨu8]]Y3|95cԝI_/"k2Ik:tV3Q& 05ޤcW_IǨc-Q_ܨk\{n˶ i fqОQ1v;K ggg'$ŏ!]g46U:87׽Àt3Np>+Ɠ.3ְfܚ<1˨{^2b1bY2ZrM rujvϧOweE+_w;3>K϶ic3v m̖?3sm۲Û_7Ѯ/wdҼ3Jքӧx3vWnmݾ6Sͮk$} 朵q_5Ӌk "5b3K0z SM^n=Z"~_TKrד{i~رkPcs{ُ֦Ms%|ͳQ Sfm/F#ui"<0%/b:/qf[A\n\>_n6zcl-=&Jik%Ak֒}Q<'%C؎w0g*.&yĚ#8&3?R\'>mB{E ֊ŋǑqkcOۏ2Fj~֬Sӗ]ӰӮPws4T{5hX0cObzDsJ_'2i%\4ל97ޤ{Q5*}]ZyV$zb qXԵۏ}v{cOu}< w&;`d~~Ji9JkOU.c&*A[^\N_KHLF(}=$c]_).2\9OjL{<,\?^Hip+orݸDGR֠@w;M>5*Xup>mԝY_Q Ub_<~eoRg7D`eH%n4{A-pL2`ɸm^'y*ylxKi%\fM҆ǤpWte綀6)csf8cbyq!a:h u6o߷l?ؚaN]W.vWG4vMI]!b{{:;aԟQ7EE}ƫg=Q{!vA\areoX:(s1"¨ `W'_a<66!k]l^{9ǹb̍&Y{\~_J%&rtr<&;{kswBC>.5adF/K\<.Fz~if>w%#^CF}lA1qHykP_ڨfG׾ӐT\gmF]LzgdE1Mo)38@=k1ޤcԡEt"R1jFQ&Yc氨Q?1uyǨ;QFt¨Lg-Fݛt:<ߨmת{폮'$u %3[jBgY[;Pd#_}y;< |]:Eg{<6k&5Ϯ/P~0a7M5kcmFݛ+7ewe;ʕiͶ:s"`\eR4ض71RZ\\[O~nnjv9]&m۾9 mˌ)YgSܵTOl+k5\Q8*#"Ib;]5:)Sf/ vF/FbR47m@)-I!.Kik%Afޒ}Q<[p.j0<۷'1abF4G,nԵI_ĨvHF3Hή)r6udbTVjʻA_vɪ2ꆸMW_\~_Jsk6ff>=c!4Tq1ybf<ܸ-#5}^p}&)ol- S})loO5 p7ZV2FF}~Ԯ>":3/ 0uy F`51sXQ&0ōz:*ɨ&}>L>YK=V;{-nvw`ezu-;ޗఱQeү_ڨ]mk_k˥wjru*R/_N%^Ĥhkj}Ғb_T^־>1[Ph-AZyų5Sn07խ SgZr !yU/S\8*,+^׾dig9Ũ 2r#8C\g,ݐ6Wc piEFݛ0YJi9JN3UAw,1D])7p.͸p1˴%%OҨh 2җ*0Q]35+M.ϖU0U:Uky~ml PfXJ+Q!##6<&uvsQgTݾݸ>%&%G|XJsT~Y2җ*0Q?ۘDs/dF=nh顱ޠX.Ѧ.SLߪ5}[m]yW8ˎ1Yf$nׯߗF)%qff>=Z!4Tq1ybf<ܸ-#5}^p}&)ol- S}):aטl'חIpY?3aA1qzFT#މ< weq 9w~ǗGaGPjgw㯊,f3ޠ? 0ō7?Q΢FNcԽAw|05֠W_ϤXQ_,nԭAw&]rʿLg@{gE_6{{ =9ˎ GGEvHÆ`3T3'hQ>S}O.j:X/χ(S[u|[Dz̦4隼lpqsO??Su8>u8ҏop0Y?I.R=Zݨ f ._MnNn.~BF}7~~ sӰV[gs}t6M`SL~| ǿa]ջX{k&_15kۊ=Xȇl}XN%ᜟmq 'LڈCF5P,wŌ@3^< v]tWMwiªGEuE0ZgB;梲׏QWz7UǴ5~q],;ؗ.~]zw&$v:][.F>1.{4bnRj-XTA$Tݿ2]O}yY{m޺2f>~y Ca6~:1?IOM*R,ne] '0FKuQ'^'ISe Ou2 9q''cm_H)n'cU#w-א1`13gᅽ_ͬ3E4H>oV1TmQm .&,{1$bl}/2\/=RS+ލ߾ά=ўZb+j_}\]WuM¾*kH_T\c_,"}{?FPݦK[MC1{7[.{"֋ ,f/zL3m"o]S7L;E':.qBdًj~laL93(%4HٮF]=|u|3LQZ 43vV DMb߰v1I5Je kBꊋ}J7<Ϝ%[KUQn: CͻG ,lOKk 렞Eà#qɍ} c OZ¹u1Sr5yZɢF1ޤ?Øt5~;'i!'6 İ'| 67{MnsEE\מ9Kv \9JMmt1H3]+{=z}z<bumҟQe8huQ= qsE돷'NL gXN':nz7">/}uFUS!5>>iJ1+i}Ydy8>?4`DM_ANDc!}C¹{F_//p>3Tk"gxWol.pkirDLRepnx۷.ji7P8oG=e0GѼvL8WE'*;,7vnŽ3Ua oc@`qMӏ/A.T7u(˺HMmn] l+ïM`uN93Ft/:ѻ8Hv`z弅F]t:<6bLݨ_~;F`*0`&V˖0gN_ޗ 7Nc\߶Cc&xV]CV_pZMkK3v?6xh#27n.gb_{Δi1H_NsBl\hG,$E1avݲ'|cr<p `׵pse֯U땛Sۥ~V`nlkA5ެs.ֵ.̚Zd䔝̯oSc|(^/1~k3겛QOܐBOy<yLA՗'HL'{J}cj}鎹{s+ĵ]69`%׏Gb̙XS1g1m3UG|Uy1ˌ]n`vfͬ%N:jc?WsL|hRGj,Y(:Ϩ(hPg1.R0:2f#g[G?p՜A{L\ܘRb$~mn~ sTYrkGh,.~Tw3KU86ufe5!}q>$޻=/*-Pj/66}ZnFݟB#؋^'F{3؋JN{A.<)l\?ʬO*]{k0.*#s&r`' nb߈1+=-_91w^[ǣ~qII7x񎭥X ± Kܞ]0q1{?CE\r3z Z|wwަD}NMcnw }-_x .NDc: J’e.#ho ҷdy{P1Yavc̓M΃:Vƴo破SJgd-e2>֞ŨN!`7y>}Jdz. ڏ_..Bek/IEA?&QZKi/?{..v4En*w\66ˬ5QIuAknO}iY6p0YܨzDD'g0;\a/L'%ʧO|_L悧z8{H]@FbV_v^R7!Rv8&7أyיS73^N=f#RI X'qKS}~T)bKWrk_x>r ζk>dyTSm(5#l#Gr*'ONxۋ?n.#w]6(gύ]<ʴҦ2i`Fyx<]}(Eiz%x >`l%\r<(b&3Vi{Lm󘸺8>mdsi69JkɐulG)tkhvǧJ`9Ǻm/Ŗ]C ߶%qkOy^masT_ƬԽ! A_}?{sͻow,.q7rJD&8,jo_Q0ܑmaᰱx2%\ 1iN7uX:QF`)0[F` YQ?'aPoϸN.)O<u6w2n>v@`LG9ӾQ/1 umcmF]LY.`ԏ잻_^ƻ1 y_ ~lwu`g _|y\{cceܱШόgXg*QzdRF] b֨.[;/I%_;if͍g\.Lg덺ˬQOi8O5 aFӜ61%Gj]s{ eu1YnMRF] addgJٹ\6Ku۞Cʇ;}{qQKhGݾ;s:L3'èZe&ۯn ӬqZ}'ݥM>npsmiWKPhol ʙ]ٹ <uo7gԷxwz?٦L7ꗜF]wWAm ,F3֨yF7u50ߨf=oԍIǨc5~Iƨ;QTMzڨ+~֥w`fQZsQ@:D6dԟ4FeQQkԟv .?!FJcaZ6cLǨLdQQ?75Fd0- 6&;]q3ƨDXu9~ӭnFuI٨`QjXuZUӌQJFw?ҩϤu),lۧh3^">G'u,l֘ˤmԍI[~Ơzӟd0-k0'Ag&+QhnԍA/^z10ـQ0卺2uy`:2٨AǨ:Q01˨QXZ~F`2u-dQ&ih/4~F``u/:,3F`:u-ڨ kԿQF` YQKNbfQBbԽIǨ,nԵIƨ߆Q3u٬ϨQF` n/0Τc1Ϩ{aF1Xި+QjF"::XQŨ`u1uy`uo1XĨF`Q7ڤcQB5'0QQwu)lQC!BJF uB!4FtQ¨#B!^2?~F!Bu3ΠSިQG!BhFݛt:B!B,oԵIugEbB!ZQƨ+cQFRB!j¨#B!¨#B!zdࣟk7Y^üNi?<.6IZE?.<01D?W?O_ovTO o7UO꾫{ʺwKzW%scc{}u/PV1_rD2TޢշH_Lѷttq1}zro)cKz~yE-[??4//?z5^'bD7nU [?@֛>(OS:yARwa}+麴~} y.o86#uO+м^h֡[@&.}Ĭ~ׅn~y%?;zE$ӵRyWdZצ~՟z5W+74DwX$fw |~o6~o8.[<  s1w2yDhs,om۽mJ8]^ }-_[YWaͯL[o5EZѣ_;^o:_gcp}XkFu@ߥ{cZ2urǿ+vJ.Sozk׉>|56^gwLLL?d^78=*П/C$YZ^;Vht_[} }յ^gB=_jVy/~i)6 V罻y@K<%i=W*#J/sA?E^?끁.xՋz=`K?+u7m_n`ӟ>Ԍa/}Wp_ G>|/jW5;˯n?_&9&#I|y>RŲ#^63)z@/yo_xCެ3kg͚{YC?syo7?^pi~>>ϻO]ս]/Vdu{NZA2垝Uԓ*ۛһカC#_?|\~➬QMx`ޤwF=eIײiƌoڤR]4fғ\+aҫD.tQΨ_h HؤFШ;ugEI>P`ԍ)ͺu/k!+1^FmmԽIؤFݙؠF]LzoS|פz`cyJިסQ̺5b?ЙGnͺ0 d2zԛIMz''mнIͺcĨkY4L.>01 L5C|I̺3bcc&}Qo%fO{n7Aՙt1 aOtу&Ku>RҤ{ L2Zb\+mEQf]7맙fY7F]M75F=09 w^a>gҕQ36y&+a֍Qz3b[n֠1Ƭ+ͺ7֤5-}iܨ1"ks%impI7JiΈ}c5R@Qwhɿ{=׾yuQf=oԭdEoE]1Uf}Ia/c.ʘuM;B~cΤfZtmԿs5bŨ;uFUoҭQw L7ƌkF]$FןȤ/mԽR|(cW2"e_;ޛunQϚY׻鋭IJu1VxbSXj1.Rmk)U(iy\׼WoWާ@s?Kͽfͺ{>9jm&]2颬I]2OvJMsA h>4^ޜ?kAC50FC~Z~S 1'_y1Fuc̿oLN%._{q&]uoҽA zhԭIRݛAz]Ad5^)L5FU&]w Mnd_fv۾i7Ukޛuk؝:.՘Zo wFMhM=9Y3͹?2^I2k)gŨ?:cŨ7ު7Q7ZHڤf]sIO3"3SzdcU֬_ݜˡY&AJFݛȬO6Ȥ{M7Qw3颁A ͹ά+Þ i/6f%Y?ݘ3LŨ?k0iW\=7]wkkRi;.jԍ ͹1k0ب n֮3%~?#1/SͺtDШ{A׵M{IZʨ'MtFP]l9}W[O#~̓~Is'>`~oO9鶃iM[n\uRK3tgj\G֧B}$_MTV8$t|vdLˎ=QNnuF/Bx`Ou'b}q>߳=+u:`e 2̉MIQ0w'=<i>i>|ϯQRmzjiʬ_+_w;buVȣ^?_~'{} P?4 Aj3_-< ϾɓOMnʏ>1,`qUvsMsSaΛzpK$ #ȳ A %u{:==@VUFJu.Ov^:-QxPc#)Ǯ8a$ Yv1 S|0=^M8?sdVYυPL˱$L{F1y$!L:$ GYI8uP^(1{DaiFAPVJV((S\ Cqߡ+r7 m7 \a3` i7AA=PB=e tC||2x:E (JE 3 x>33UǖO2zc|">>A@yeL<'+ƖHx"m: C4K^pZ!!$(%CAP<(%'PcQ"Уm%|#GIv(")!PN˄HB53ܒ6-!KBRD(fCFZD(p ("%IH1E%h-X!"b%ODmO#%J L }lȐ%E d$WD $EdKȟt'%DZҳ \8t"H>rr]Xg֭(B.)m<+@N#=NA>(ID)I&$1$I'`^IE $,L9 h^1 $;MʳIs:I$|fLf,Pb3Qb36Mb#qm )d LRL< !a"b)bfJa֒0t ɨ?BH l( xNs1 $|BQ(HhOX1S]' ţAa&ʇ*S]V( !E5B| Eȧ8 %T1%!;A߆"zF![B"Zo!! ^CJGX"$)";$f"" /!!fHHD$.p!n E䖐 HLQ6LJP єˡuh׾nH@;تpE5+Ěpr 8ӂܚP(Kep\Z.#Wz!uQ `EhJr A͢4R DPF#b{C}RPBjrSiK1ҏTDys%d!ͫcP>|0D- D Ahy+Y!zX!u{x|:02H OPQ2##Ɩ)7n {B$DT WLAZBv%!HBij}0"a2lLh""NI0"%LEDS#2E޸Mf9!!P f9:Lr(hsSB~PnLKH D'eI){|_m^ǘ䜽ھYp9G͂g O 'Ӹ\0o&C#fX-8s}< rR0 ˑr"9o.LuqAԥo~FєN@TB4 h#ӶxH:igas(s6EU/@ ^1݅v/$Y됈LEFg,ґM;`&`5Lj Jd2RF8]H,Q.LZb)ч1(f9jOR lOʧt~>&yoVVxgVK>oM3L> OlvS|XЍЄ4F4 $H>B@X7^p!HV͖Jx*Tx%xܘr z\vh Q RBOvvJv3 4S"B 4TZBZDRF(Hh"ld!-"וYMLFn' y4Y"P,22EDLD9Ŝ>kyN(89\tN"L G#;7qFv!HΦ8x~m7n~%b$D(ă6y-t&(8E%UNJ:R:P:H(a"شY7`EB=&-6 1YD:$[U dXOĈ>k4kQ^M$1) QFPD!(ق:VDq¨pVQs;J@]gB'%(yē 1fHԳMI)B:ěQ<||^+yifDpʧBGˇo=D$^|H-XKH>2j$ N$eB>a*L@&PLh -!JC$>%T %TZ$'i[2"{D(#oL/B "j1(RH-"h%"HBbQD\j",$d!CBkNC+ "2%D%>B$ P "Hź- nb?G-aw9y8}d)Bv!Ǎ "ANsIi^g{Zҫ7TpRAsGqC0rp0؋AvH&݀ߨS)q]k>xf|P H (ϑɧC<;##R"Cg%WxDA^$Gģ|!dJC> 2nP !j O(Մ|4$P H4!S:^h "2SPCB5#!j z("S@>nRB(#}!"LG~D䝈("4Gi[DZBZDRF4D"Mr(#4EH_4$D%$E D7Vm{<:n?s Z^ǬIأyl$(PugN&僩g/J<(C`A:X*l=vs6o߉qS6GCo==tALItF ]K"H:8(IǏ.rr"HRsCXŠ%i)ܢRDeQ)%PI,W%犎Ssj[FG_c( G$PY;e/7C&1IB>lrɇ|%Iɐ "lj8 -Ń3僐|`4VDm& Fw|JۂDT ^ǏE1HC1y#iLyIPu%0 $rquhE!OTF(!3IBDYD$h"D势?dC2E$;+"rH3% i$4`rQ@P@I{Nl@k4߮Xxr_* ;aYV4 5Ԅpd=L ذlj$<[ 4)$D]L~-L!bٍZd!HIAs6?[6=[6<$D6x<kXVկ;ƏF+F@$ ڃ6~k2XN-eXm!aA98 ץ $(s܏x^-m&"(bM M4% ]DxЖOG3Ѐ,$QsM( %"PB@gCSJBLGMqkRON t?H$ O 0& %0B H4-?B0މ'>H=R<ě|ޘ"3^'Y'Sa˧xx4$Cco⡦7 L(PDGC CDhU gC@jO(XCm0 B@B)!E%'TIq; S@f9Gp38"j$+"9SDD-$ &#SDV,zR<16i:BBt'KBcE%!HBJJCnuB/+z82vd N=aҥ(ڰѰ6D"Q kF Q Hh4y 6yRt$6;\rknR]#;H ظ:ln$I؀|D<[ u _2CC<VY`,ʠ{?AvS϶"%KxX6uAYN^C0)mGw䤶5_tFSEPD[I/^ PA 6(!(yBLc>>h E)Ag! %-лYf&8p@<:t-;!ȇP v;~P>~cI[ J=kVIWbA|H|| uBՈPӛO%L?V!8&y%)VB$n =aU'"" Q z TIh J@zF"ҸE$~)#_"RuV@HD4ƨ ~EӐSD-i iHJHHKHȾ7DBJ)hNCZ@ V ]mu/UEEE6n>,ۘ# nJXӼi‘$ Gdsa !zb=~}ŋ-l{s<d4I@RHl@Ȗ E=CV#;MF[>G2EP 7kC@I@ Ou>؇.CRDDXBMiwBP07 =4rъdr;QXH@$')!)K!!"LFۏ) ݁R>$^Đp!E: %1-QD1/A JE(!LDB@tEyE.5s@4˭#Vp{5gE3޸klR4 %䈇]Š#陠b,P6X,(QgHGۈI>zWOJ>B<ύ܌g3 TOA(L@$gM(OEoJ@:+J&B"Toձ&QX)$oG#CG+ _ ㅒ)!C@g GB( "D-pD$(YD8m6E: "r"|("w!"hxUKH$$E䔐[D˶PoH HKH (z!>1)O1/\ #,zMAhjˆ [ a=?(d$n)vd;M!D &j%>_Cŭ'ix lC o6o4M5 Hk- Y#gB? D'C@fNu нvC]pJeHlˇt!$8wC&LHF6|hDs8!$зkB m!1N%iN H%P4Bo94 ,  h$X[DsJ% j# (ItP.G獄aƤW (8V<43:40Ϡ4@>/G>h3;#+ܦxi-F|0#i6,NT$XOxڽ֡x()LObe\TT% IYR XJ@$)^BJK@^z xIH!6aJHŋ=')NDϓt"B)yHKMLECNA+B"iHH!?$Ґn23IH-"A]~}E;7=F2I~c`1"F0@V{DEBd A6"moAݛَu|;^쎯ndo)g#+x;ڿھ)H" C6}ĴB9m߁%{dGH?{)ŋCpp% JAf:ഀDe? F$X H7 h=XEcNUXE&8)8 ELI)h ;P'dRZ,:&w‘GIGG;!PX:v% =M֥S/~~MNߝOl~3F^W `:`. ew:͑C~&LhX /RAxR4ԃ#$R@|x`?ZG ACш7S"|kPBk, Q Jyh)p X Y/Z̓>)G]}%$#&P8NBBBx HBAA<7%D)ND%!-"!!-"6F 5EH"%n"sfr'"YNHKlP@\]SB=lE%B;洃0aI هaK SZrzlM:B]ԣlA"{}Cէ-dk {D6pdHٻ-#iȶm!{;HTuk/H׆[U4?P<|( N?|ԅPػw舠6@B( jtBȦN!{@e"u޶:HѬ6LMN2eS$}^piibYtDH]-BbL?(HrvqԼ]S !Jv^ɆhN6-[v8(IѤlBnp)E>*XY I KRadL>;xvXG1 \ }fAO;\v-G8xo###P:"xDs|H"HlHX!Bߟ'RǤVB%H- KB:$ j~#!<%d WDRBn=xSG% KBm- + i ;%DȮڶlI $"odȒ$-$#"uH:+D4D( "VG:EiEdd!YzU!n4%DxI#"bBh7`*t<6ka0fVc2,p:a6M;XR2$ I–!eHo؆ HްkDo3 Dzh98(GȞ= [v ;bX_>v8Y ͚#})!OyGb+;NID( YK1n [SA6Badk&-\DP$ :J:,1:( $(e ITWl?I;3BC`%Vݰ'C0Âzt5' j9!xpX]g*QO$ L#NPݯaxD>tj!Q =#=gC0h {jp=Z##϶|XNIɅEKNhP"\Y |f@7L>B{J>3h`|G&ɤc!HhIH>C lԃ'yCoH^0֡tH>cHvBX$%85)xIMq|<ŏJCBn Uf1KBO!"f0"ҽ贄"B "(!IZ -QHn8$JH)"%BB$?%$xKD$PdI3#ghPPK UA3oB^Qtz?{O U<T}>0zQhcQ ЦЮVhWGhj=i뱎o]*Y>|>^GjUuVA30/*!͍ߔ^@"<HDĽ =Dd CAW $KF\u&p<6P('g'ޑvK6\cB09.\NI&"C FIN+Q:4H=[/ 5.x;G LCvx*ɧtOo6mgnV(Ј(04ARJyqGBmB r|@ ,90ǦE!ٸc @&H,HT$ȲYQϠX$ѳiD)XE"B.f@C,ߚ{lLҡ9wYЇR'lx{Yw t'tf63‡SKq4~+ce,4|ʤHܦ[HQB>z(N]%պ^pUD﷕@& /' 6e_:/ |$S;ka|uߖhZDE,.{HK絈t"^P( [8% itI"!VO ш BBW\CD$!+ ytPlE!!8՝(.t@Xr4)acH3`Xhw%6CC[4 ݦi, %m Y"pd$O<K&$b! o #ci'䠤jD9ɧyRPD}!*@E)B{D4uB54|t.JY -:or$ D4kQ"Ě6;$ d|wr l+ ZLRCQ&@b#4b0O̎C&V')zx8u ]Dd@OOyL=1?9#;z;zhԂ琖#ENi.Ȧ6o#RO<4&xd##_bGʇH8%'!!"LyIpƿIH3D[B$*JK4QeMݳQBS69%4^͐"J/+]ij+^F0Q09EaK|E/SvҀ6+ӜH=;$P$N 774~xjUԹ fZ#FF6 zoZojo^=)ZqL:ԻMY 1[ C1Ay)d;ZOO$;_Q/#T h~)1HP3!Eq(8x'֒P -! !uR>)5T$R WK>rJ[@⒐OSI[BD[B50|[BwH%$d+#!"% _IHBZD?d' TH!f9HCK+ 41$dJGDɕMBNɐhIlL <% SBР2 IȔ%"/%J $lFKHh:h|MJn3x{"Z.3rCMxA&o;:Yr[`^R>MIUHhOSldV\JD2c1(LxD0U1ljLDLP+QzA1#\QbȪ]~1hN(-HEi=J[i[IքDLJ)߻3f(ˠXh k0 3j7 B \AdC˲,i%bI;`™ ]0tDtIg6h:Jgj2;) F1~3:v3<:^@$cã$K@%ۿl!% d >WS9HA$ -!zNHtNސDʼn- B3E!!_D˞" sQEEfU" Uj#" XKDֽ!%R!CBݵerIqKKD%IhJ:{h^aJhqqqHJ%b zh- !I(-  ةLn4)%%db"QuK3f0->Kw2eq_P*7`†GqGc#[YO(QvQȈ0^o^U[NdAoL.d zX 1 (ǘf:!`BC{ Ar#A[)TJ9Τdx{L:FB:%\IѨ {,6GCRS=MLx^ҩ'$Z:nًҏyT)j V Jh) *H@ wGg;ⴀ0 b;[Bzd8;0Acϭ ?D\QB$"-!,g!!"LCHBLHr8mKr* -!§[B!~$xI4id IX"$dbJ) SB$,xH%!!RPCn wf8) )DUBb;G)Ȕ"d$SB|D˄Dd!CPDRBVL"$TR", ш JDZB!)!!"?M*. %)"ZҩWB򐐐)!)HJC|@ )d_)8(x .?/8x ;3:sS6Nހl$uʗd C{Ur*\H͹,qlh#Edaej9g|CzPܞۉzl9oAv vbw矬ܮٰ'Rl~8Qeo5صڵ8,49CD [kvy~ ۞0HCɇui XD$NBd:qJa$ xm' Y&g`C6䌃l', q ^f3HP$j$Es-6[6C1-iGGmҏAINx:%vk`we{! >߾xn%O9-W 3qQ<Լ]p4#zM4--ėI@hU:C_y,xxn4/v7ʛw^QAnS?S,^uͨi=%!Q!q|w 0 SfHB$Iq, a|h [*a1 0PCB>Ga1 0PaK@RB, a<B:)0 Ôm5F@aS0 S|-"_Qk-'eaʵ%䑀d0 Sx / %C, aXMpP<urba ztD `n@֮aAs^?īI\*7>_p¥2ߊ~Y_#)O88*$ .\p̥zMa$ɍ*W_`*JDŽT6X@\p%E Ah<4-r[,2…Ke/h_%x ],Y+鉧,…Ke/h? hDV$n|)oI$S QP4 ɷ@F!oSYaq¥t%RBC@_f%L>%8VCpF (7-z`(4FI뚅BZ!kk.Wt Byfc9seb]):dN58F?; ,T)8-Uq}Gk6p.w*Q˶`nPȖ30{i&!:C@!v\!ּ:/>Zo,Ƹ$+`j&7.ʩ7nfTb]3gw?6s})~cBU)c=-yx;AoUYJY? K( (%m.@tbdvb;|z;R8X@8MV񗀴L:s^A3uPuQJV`2;YPGiϪhjVfeܕQKԥӛ};F-uJwR<;巔]>\ƭLn~ V UrRD# d^Ǜ !p* U I/;*C`TbݕìJ vUH =VБWatNg_}o ~E;:Ȼr\N4d"=9A& UŬPh*,zqAW <&JQ<>s[͆9oU]sM~%|VU9J!R S3WazXL KGsBS9/^/+Fr J- 7ruVv' Z/Jc5'9T"y>GO@ߣ,Lj5)wҼ9}Y%~2}*z}Rv.\b D@ ÌLE:,5[?C~bato% '[@g;tAg, a&pH@g܄;+rs (uH0, a&`H@ބy\l ۟ )o܀K_a!^N8w?v*ɓ\0 0$_AҞ[@ܮ@P8v:!Q1 phQƄ6' >jMI[&>(h֛GW_ ⺨H^gqL 㘿e<}F8c< 0%_G_RP ȐJBJ:ds1 !_~}.k4h0e7{ͻ,a NPPB+ݗJnh8Wx.L)Le7n94 ~ek&P9H< +)r|!ݧ_ cbaFh/+gsCMpbDd32}7PXX~r^/]^zmw[u[f K0pV Som}'wf HtF0䡄d>}s>="s!0øtZHRq(:.Yi k<=-J^'?t{_aT@r-ou/i \@^X G-{Jކa~'(((`tPK.^@|Vz]%ӧa*P߹$!)" &(IE ԩS 0Pq)>sOi  S~ ։'a* TQH@}x,}0P. ̅,21gXx1|/akTQ=UC 7>s|( 9t+ c/ 0ר~M 0 SGe\^O ! ku<)0 ÔPϐD|4Xbau^8n( B <.SbaD5L Z0 ÔP汋C HK߸tx4 `1 0}V"J(A@.PH˻eC I 0ߨa HJHG@|E䰀H/o .\*cmñO2CdiBrBu$"2i}O )Be(wVvՂ, .\v*zP%@D N Ag{˜ >]@E'ŘXhK@6Y@\p%.NS8KB]C6cQ D@8N2)S,z_NP :鸛J+ s=O! Ծ# .X T@'!, ]q '&) 8D3V%q? MdcmIʣ  %p.\RB; HKg.u_Yu9 ]q\o^lB TpN v:V>VI7:!P޽{C3! JI .N:L+nI>G#I?YK@B2&4YH JPc2.\v<mH@HIBBW>[R@B>+ lx .\v)J!!Q y!*, .\TZ>Q6!}dȧӲCvTpnt|8nCB>"|OGP! pRYK@/Cm# 8 tXzTF>ykaJ s^?O]"tX*i bauYxot4|"HB]|H>mCarAJA3*JHH$1C@_hɧ0 Ô-GFF ȔGQ@y, a&pH@[FDB|dʧ0 Ô-7G:$t۶.LZ0 u߀ HCχ 6Pzd Ia*TQ=UC 赡aRB2|PY-w-.\p\귢{ %)WsHG@FyT&H@\pRK JD2x" QsC@nϻ,…Ke/  ]t 胅|ޙR`.\*{ L@gŁ ]~ޝ/=T&X@\p% >/ $D| L?ooA]@Wh# ޞ s_NX@\p%%> / I rμ}(&&dVTI ] ."ͻN( [BpWz䃼+ BtB>!d־(o`yt$DB@ 4/HNJ)XrH%1/Ŧ#{~:y, .\P|ihz?X+ Utatl 9o^ٗΧdan?-^8oɰpRKjwHA$CY!"׾/ .\T X@}ֈD"QyynH!Sa3 Lt\p%ґ!\"$,2O'_~0 SizΫ3V8$)O)Yba hcIhm_iN:baG ~r*Df d0 S>/D a)/\ )w a ІPhW@ͦH4iəR@ϱae-!LAN} a "]5t^(CMpY@ 0LbҥL S@Z>0 SMqC>'N, a&@X HKȯH>=GX@ 0Lh!NM{@$F2a' ahBPS!lP a)7>F!OSꕀ,(b1 0c Ȕ|3!0 Ô\^%)gY@ 0L9-qHS@:aBG@fȔ3X@ 0LpȐ&fIY@ 0LI HIG@|a(|! SBCi0>0 Ô -B:{- %0 SHp+ ba{h0.K0 Ô "a) [BW@Y@ 0L9_ X@ 0L9))X@ 0Ly`1 0 2;!x4aD=߼pDeazL +zc1arTca- -!_@, aX"񠄴|T)0 TYP]S a)^" . . a)'b1 0w) a;2 00 &( 0 S.& %0 S^l-e1 0wr_0  aM( a-!0 sG)X@ 0Ly aao-P& a0jaI`BX@ 0Ly(%b1 00 &/$%ba aM2W@&, ]mgB)[].^ˋP3f :QuJ0>-퇗rWQB뺙̙K,7o7FA׃ ]V, ; xw?2 t]x]7QF[/ ]>^׭8X@ w57zVhzuuLޡBG ܣX{FCף,_ =ギo Ξ'e|~hzU@^a1 `_9o ].eз~{75 y^]0Z@n}ș,ʕrgCÆ!GUlo{7Q Pۢk~E, k[9b`_>gñ !+cֺxB _ȊPl03>nA׃KYt !OP3uq.W893τm h aU o݆[_ P6 a1cw'8Ut.\ ٶaFۃ@׃KYTTTT~&&@6[}esp}+0~:y2/D@[̸,,) =u@P~w eŋ+pq-aleFy7[_NX@ *ؖX w( Zm/,VmY0Zo{wAץ矡B_SI;Xk[3~Z_h-gx~),\sC !Uc1=Љ 8s:*YZ +zXZ 9i{7Aץ,:w\>Am׈kmTo.Ӽqk|y(Bl!<:hzu)~'(((`\u)l t98q,QV>}qqwdH0T6: ].Џ?Nb\ua1 ف[1+8t Aץqxĉ]n HJ0zg%{[,{F!^ҼuΜ9xbO_]>^׭8X@ wBXipAzu^^̞=[OM]U:aC@<Tba*  a)Zf Hba*Uzba*)!!0 S. %, a&pl-/0 SRb1 0wO!% 1 0W@RBX@ 0LEba~ L XQ-SiqG#w %ѡ4yDڗfwvԤ <@il]u4G;CC/>|<[ޯp'q^9yWAٸ;_^ޮ@EE 4K@˝:[@}q!!́zm+* m+q?v8/;۲OsK et mR zm{p"2˃̳~YQ`3t'%;K i'=8KM}qx>NO`d=T%-Y/.p>xZNkᑎk-iU+a+|xrd^U]àZp8TOv_O!5z3i1~=YSaջZU?^U;+J,kW'y+9~wCق e'|<\΃GZ͇G[/Nt%c SB.yF@( ’!DxK@pQ$IňH ȐSB) 9$%T$ ȖPqZ%Tj ( KBB@+sm dI1%$T -!) SBB@ 9䔐PI!PLni , ?"z":H=QKFJȹY?,cYϢLJP.MB?,![0n&!|LjqD + BI)!)!L U Pq$$)"- BєJ@䐐! )[yRQ""2$ETF =ᖐDU@ ,!/%Dz?D)SB(&ًV?!P@oL?4[HPGQ*eM1<=ڷ)"D& B˥($($p)wE@)ȧΐ-"[B>"i) CBNyI,<,/ JBҸSMq3JBS@feMOBn=N%"OYZ) 0D((d ٘r) q"|;`S(?:%]$!jxwO{wǺŷF-5ߔ)uV}8cr$rp7*S, gz|p*}/K_:妓KЍz/Og;ICzrKΚw1m2&ɧp_/[ %0PP8'UK݋Tqϥ?E({n#呲ߚ42%9v~;o0Q_~&_׋;^8̗|hqV3|m};=S^8I+̃N9n)S8&8 㨃#>vY̡|W障8[_@={_QM5~ȾcJ׿ܙ@r'embOÄ#2mۮ@noD_|`2g҆:g'm5KtQv |_sJN2>9%>SjΘ|=9C;> w$ڣ7\rcW tk2{,^-Wí㡁蟛Lzt03, -CX6ucDnȄ2/1͙䅉x #΄ JG3@m\z3gw]caR&[lq0%151s5cJg2c[Lq c*`\4gl& DqFG(yĊ2b# [ Y1 \1 |= ]BkWX\辨-, WC4:"qA9nv!E*f3Z"-[4A.15:|J4m,xٌg‹2/]/YϏ^ ώZ MFO K'$ビAȠ b1jqm>v7=<;1Elc'øp;#q[({-ݼl`_D_{hCOk ~>݊۹'~ n녟^1;sip'~f{wxF И{pYpD7ЅAIs  N7:$"alCӍ]ICX_Nm¨^ǐD v} FM N~7}c>7Q GͻWw0 n䶮K=t7S7u U!&wvHɍ7]Do`MBNp+v|wt[wk _x-ao}x]h /Cd ;-7J}66|=65k%nn7u܄Ix ,Yhrcpc+;7iFo,sK܌纥bƭp{`K5w_X \Z^ D#}L pxr 2ԠXӃc8xf١aa <.0<h:"LF%1^xut6 ͐R7'›SᭉibR&C)+MN]HDt<3uvI}nIyӠ<轀g!(ߤbNp!cpH!:.kṗa1-v2zFك p}އ ù>g&6Xc1FA;%/5q!p<-q9H3Yug-"N!'ٹB4CPG+/c!8}l6,Ľ]xX YBB40"72 L6rtJ'325nL'*`z3MJvMoL3p[Iic_v:M0=f$Uq`fr5cVr 'eA-c&.bL@1&Ii`" &$&8c+810.DE&ADZpA (g [^CeaRb Z?ZF5^kGjNbh5K9%E621 ^/τHNY /NGs#ّ̈hB OǣIF'$0l>ytX8>?XcQ aL?^cKƆ@YFDDHL0`2y5q$J8' ^7 .8m uKBg ?{L@9 \e܅׻s+hlpπ{. X-PB%A\/h |؄OI(/u\ | ݘx`Ϙ TBXfPB%cB Y,ăM@ Ԟ\>`x/ %,, C- L@(w܉]>$Z>p|X kCB`%B& H>qGs(ݖ@N8B@)"3ds]%(. <%ɇT,!H@b2mX e$ ,!ȵI)!aHS>!lfJ I, B>6}]@,BBO8^ v'ěE'p9MISi38G!GD~>޸ 7}ɇ{`aX[CqWk6Ԃ*xEx  ija!f%UlLTjOZzt)UubNr7dal} R~26üZOle,m  shr ˟[`LgvZ-cV͌)Ldl6g2IxU&*a\l%1 1 QQÑ+`r.).)8$*UkORV3HZbI N0%^e*-f3ʂUXPUŔxcr6>) Ōfk3 ʸƥh:&Ƌl0:/x'?Fzxy~T<7*&#S) x6brG"¬dCJ{ ‘Ė\2&Cuzo,|Dc:>0j@ڠu0I1<僴 rǐN? bO1Z,8Xx0T}}A!G@6 a7 @" n$a s &upBQ%!TA x.O<%@b @HS>X4e6 a ˼oW@6 a $wlp u %U?$ ˫ |`H@ LBxTB gVB*!8IƦ0, !!D%BBTBt#p aUAx YB*!!vuC>gI@Ҳa9f僌JBXr|sٖw '߃%њ-=* ٍ썉}~r86ƮVir8ۊuu?C\OkGTAC0Ǡt'!4Zp>.aFB%LvLI0,H WBPF-gl-؇m{&Ą$Tf>9m2 4{;;NYED N 2```Lfp[I'&/f"WZLILN0IȄ*8 `i aCU0 lI:Vq!U$7hxHo ^  !"T! 2:/s Ü0;c mfrZ1i5=ۤ45-eyI&*!H]@p  p '7l0%:J@XU)(僌$ W?0X 8N^kAP !!g]>pזsᆖc7q{Ps(i 05 H. E#$$!D5II@P%V cp^mb8D B%s()!fg1P Y@؇bxJ A񓯱*CfNÜZz`=ށaf©ZC_: w-GŞnpE5. vbYBv#{~ÌP8_'SiQmzڠcG:!t~NE~/Ym}C>9 o7C#[ޓ`\d/6X7.^!VLaVj!(i' ny;`EN( Q ҅|'ؖLϱ@vvu7#hx\gH)e"brlX&(, Kw1,r9$2BH^dsH`p0 ҂-0U]iL" !%YL%y 14沨 0a!lh9gH&Qnê(c #a0,bXZ>!;x5 *Ō L/(naj߫Jow>wfA뙹b:͑ MʄƓHgF“ÓQaРq?F1ɣ1?ѽb6LRL>֮ l;OV]S:쉽l <@չ})8 zq,1{q{H`4l* *~J> `؆B%xC~vhp &W  φZBp cH3*W A௄|O(d<DrI>ث,Ap__& C@N|`R>N Qw``T@0NaU?c.ݖ=4, Jc85$#.!"$,"pH1UB8惘fHD>D ) dCWJBB@|`7&9e{ Wb' 3B 1Ĺ E=#}*2 8t;Cˡ&hlFj sv!}~`|8<"ǐsM8xz8yُy݉P?I}~+(VO>!FwݝS:A`dAH}d5 VPbVsW(QHd1a+0rKwCM`UcJ,CZb>/g>Ĩ 0..ʂWZ,ڂ漘lx4c0ma$$7h DFbUgTUlX ZBc9Ũrg&laeu&C5&|`7 |Nk a'd53]AynN>IZ1+i8>00ۇb`BΪ s*H*0dd{'n:xj_=>x5pA>d }! `"@;S>8\Wg -&P'>U0# ?u&q| p@`rޘ:&|x֮j. ᦎBtp* 8lB@@4_My;z} !KGJ aY>0 J@nFOB]@x~u . ™9 r6!  0d*!9!3\B `UcUP7pD,!*!`, ’$ A A>g^0cՌs j05*`r( 5'령8l4^ NgF0)>JzcGw"$, ,09)*+vPܯدu]=w*=oB~U@(/A $CR $ TضX0\J9%N @p;Gd  $՝Kz$/@;{r &d]>xwLnkOU@k!T1B$b^ O@x yR>90 W@?^$B>pAC00 _ p5|>a eKnKqepop~fy~?Cw1'BDWBxV a31',!AJ. 21C )OJqWeJe'2$068 =}߁Ăjj[BO*ăEI*F"bXƋd58)G*&c)c`;s؍:X4`v8m27_TQ?\o<]>z$ $zSfvCVa;Db.%BF!t%6Ѻ:B9ȴ:(=dLp*$*B-Ȭ8 M*LZ .)`$)7p9!E^J Va$0**$'ULT >,D ¨BB k FՅ!3La[\feF:sNZ-Vf)t%U0=QPɘ$VԄM6yoPݡ8S:LЭ]˸X‡[ğ4g9MFqK)$n؃ O@` T[Zx&Tv=% q9lEo?7gċ) |h8 PKDx TĂppC[(gNܟ6)P oIv! ]0S Ao›|09%7q &1ᇈTB,| =]C@Gf T” *!. 8f"Pn"MB*!1!eonjKy & dp~>}u !!gC@0|IS ^ 0$!K! , a aV 1[aOHi;x1Q_j#' (a@Xr$*"xή [C= 9N"&AI_~ɠX\ǡ}6ylu6n= ^{# Hi0@jq`+}0؉A`QA>~zy?qdVbP<7rl>2u} yA."8渍\jkSemr 2+-LY(hc`WRX0A 7jϭuyyQA#XDtm"C1WQ( bˊ+aI ^Id@kd9 zr0+hHUXs[Xs\ !a*0l S`drĝHûQn)&sj$Asq0'by0E<Q]a6Ww6`6 F$Nw'U$|ܨk2JPɪCb "t I=鶩jF.1%^ϏN1L?vVL2 xnFOOAà1.<'|6\&n˸Oa4D{%yS>$0XZvA%dԲA)d)D NlB+[AS$8}v]eIz& |v7@x* !dPIM32,AC= 0I@8d!& !P !!|aBB"S>&LBDpK{!:^JB<Y@0 !KBp!!Ӳo a ǐ$ ABRh$0%,. AR"@ !>:[9]&0k,Kcqsr$e7bzhz7X]zOu ƅ 3ev:ӳH\&ߡr ~ACzT$ ~or/?s/<{/E6" f޹&d#Y yMOH$"?3Z>Xw @UlIݞ,^$&fIPRxoVx7 1I$M?4 !7\3`GM19nRWBB MQiYQ=I>UG9JSF bB)ȃ.FCC9HDec!GSJp)aYHF#,)~&[j2r0ߨUb !, O%lJ BUX}¢-0eKPVnf0I-`򄦸LNǸH T$yRB~ X~L [ jg2ROw$jC, I߁xM[dp?~kkbI_௅S@7qW% ,D K*8&zl ;*@E;vcwUA.% |Hڗrń$ EB>0o3A$;QB~&"  !p~&!L avTA& 5(&蔰cM@`@@H’Y C”GBC !Bw[pZB$ $ = d!K!"$)"$ !%!!1Bø5gɞ-|TA|!!*w>*DgCQ6H[~%>hA&KuMm'tˠex x,K_bRx1D#14x$ IynXݐ]PPPG6"Onco/CiY"EHCcyd~$`tx\0韹ƕјl\Zoi 6k5L&= )maҼlvɥ;<Eꁆ[Uꁪjz~}|8 I&A8-;!bwH0X,C Ĕ H:UFث"C7ʇxbɇ#(7kO"Ő]|$$rS>|.}cO0C#xxfUQ<7zf9,aΡ]>0D>G ă< lUM4nkBI>Y[!(s+LD! flE ` U1&ד ŦPcOȲCbxwVS^/o3- 7o.2bI44&U h1DϠV@PfT0& (i FR>h{=sԺ :1fQKZqN~|6 0X~N=q Ϣ) '0hU@H30NapjBǹA=?@އ B!MC3% ܏eZ.LI{ ~<$! X>${H@8hɮ]@A%!dT=& TPS<BX! 1&0I-8kYDB* H@ 6 %& -8=0xH! BU 'd*!^$D]cAPcb]B1P .!rbNHIb.L@RK$ ۙ*(!NXX֔&F +:̙3~A 7o\ {!Y OEOOkFq'cozM~2d=)E'7~4DO %K+ BdSb93.́ir`ρ w&048قn?CC.hI!b&1"Im$ ɰ8%{&d3q)!C_S9(:ET \KGqb:1X–'AC1$9>cl rQRP ϘmÂUdo2,=KFRp (c\gSxz'0!4/ȋK"0kL=q,bGXC2d 㮱$"r |]9#1|I"šԒiDTApAtɇWalrSmGSWq0t֫x/,i-G)kAȄܶXayr>Cd9)]2Qa 0IHy"h gq2 CZT 3PQSMq y?o[Lh0f۾ű~>1axn=0e1Y8(hS/lVZ }L^PWG<Dndw ݶTВ^L͆WH>/6pt |G>`bc_Ub.c$ƾޑdѦ:9~|˅%,<φJ2x_h|84߃, H> _B)Lp6$TA @qۆ o| d()P ƆF%gAB@3OHY Ch;ލ .L9A% |&!PRo&"R@}QiR;(gAb$$BA|8]Oxwk**! N 䃅Z:zbM@P~!$ $|(UB)!d)!9!Lb1J+&;cc(%1 Lho!Kg%!rapc@Lv̤Q{/ =QlzxyW(➓zg'O ڷ1C xv 1< 1= > H .?0d YHR /> _|66}ʛ>hG(ٲr=O둵^)RCP"YJ$ Iy!/_ n x?AL$)!1!b 406&h{XҲ")LPz\PU}1}&JC\nh ,Dֈ11Rh=R_LgYdDm-|)P‡]x)Kq, >pd7 š0PP'IHO1KaǙ\p9.ԇ2GH1'D-L<ِطc!dWr@cqM`iC a!ae9H>lW>!3>c@W:!, yET a.x0Eb慘&̄63 *'jx'˕aP'èh Pa|  ${+`>'3ɈT%TLO*0L_BZ8+c vj7kq4eb*$) l:"'n~վ6U;5{DB3kIjIۼB83bA-O a$Đ<>C"J@$P 7D\ lPcWa'. l÷|PI1ٲw. l! ă) (wM:8! ! yI1$_Z@WA('֝~" tL@k0$|)7{9B)!Aom A 0w |]0$ HJm:MMB C=B6<)T!$DG ¼+T;pc@B~5tDC :ѢCq,NAq[fZA"27z}gz<ߌx:p]o<ƃqUo3TBkAB ItdkB3PFֽ4G6"3۶r]O! Jx JB$ y|3HA ?ч|O.FỳZLױxth7. '^JWAKavJ L(ea[`ĈdI>A &x$p'M ՐR Xm)SmU ~)|h )FY>\sM~BR  I"ٰ  Y% ` ܯ "ǒ"&+p*xhҨ9L+,xmVarˆƝ36Eb 6 4"]v C>8+dhTH"R Rl 0qˆ|Fdiel]$̐9fa!r|p ;dߗL`R  `}z _0dgF6|mDm-hԐx1 M C6L05 &C:L0|pS%vd Xk,?' {kwyv!$x}|\<7f7-ox W؇ <﯉'F!T. ,) |@$|PIY>$J>P_' p|p _6U@)|L>x|S>xt.!?" ps{p+~;S݂ӗx-;$wJ%!l2mNP . TAKQ H>RX }f$Cϩ H"4NIG/G?Ha 8I*dW³-zúaМ4Cs`˂aeJ|_&5۽)Hjtx򐂎͡Ywi]^BReFey].1J;7| 27!-c ظl <_ @>c"Q!ո|ѸBxS6޿ObNҬb*vI0&9ca)vtWb9ɇ M6I$`,1"f!!0y c! q [̆^qAZ&` ư L$KC"/@1C^a,4a $ Gw a5!|죐3a,|RPCDAU,pI6Њ8 G 1̂yxB/ V\$s>ĭ&MJ h`s> 0,U*p(|ɄB^f!ذ .;i&8zA.|HaI.Xbȇ V8&vxw` [DhX1 0a 1Ԃ;2_N孈%kX,ɇi|^STH.q28m3t2MCG6b-R ӣRC;pD>"ٕ!AZoL5!_C?Pg~aω'>x%* Px%D "B%dJ=Nq|p`75*\>/nA%!L@m9僫@›M>!\@Ītp |  z)S>:xMT¿S(* ]:Mѓ0Bwp* $cM !e7CH^Ɲ1P YB![2JaLH. 3g% #L ac؂L/̄ `"A6c.д(zFe{0&30ZϷm[3 OW] og(@`N)w!63KFBbO1=8####է3#wXow&Fx_بrƘH&&*rL!ɐؼz$DcNa X[I$H6DC.m:帒nJχ^د^ n,%8jRur4ddC>Lpam,*7j 爡\0Yn*!eC} ̃` jKD 4d+hRr12!1$Yb I VNH 7>OC&N$Yu=aKL# 1|ҸF2xC"&Ǵ2mc xz̢ (ټaLvFfL<gmc"M>iM8&t>Q'XbNȈ 5^D1'*,K&>HL䱭-YJ7Gw6$ r#6JS+aR|}1`N87& ͧf3ƄÒk#Z)V' 3e.dvH5&{C,\@| Hq PKJ:(0ampQ'OCXIR4xC!dCW|ɾQ7|P Y>xĒJ-<`CWLx /"P@/ ,vO4U?~jp_?* 0|ثl&,H:xrMxMkM@O4 x]NVm8|0CCKIVASr^'+b(&D .UΡ$ CӠɐX FQ!q`> Fc;ذ$ƇLXRH/ u;OD'-+`Ĕ#Sq2 !o 9 F")=! blj&ډ&6zf\/e6BՄ~P9#c1aPV,q-[AJăC>01) zsW 3^s4;}!^~G(ʬ,'z!nv?E;&d ?j &M)97(]"HcR 4́nqh746 J9NޔcO L>rQFb.b ' .D?ZTn9Ys}Ր]y`=ycLy9o A>B*D{D, ^Qe|nƠ|Hp$yȁ*gEC[&@ Vq[f>(pdy!'4*&gp e(}s3. nyoeCXoܟd&bʇDNgOx)`"ϩ5d_COa~dgn]i#r6j[gZ0ooi/Äo =#167z|-Bm#m:-27}3Z ~# /rjsq toj)t*xvL<1"?색K !zC .%"qFTA`%q5PWӦy.PD7zcI!N` A^n::x$K+ TR!P &ؾJ0Bsd N? 8h(D-ᯀ Aq:,!) Ą" U@܂:q+  ;ixV?a ˗P=Զa!U@X͒E@X9^D* & r! \c|H>wPK&"p[ ~Q\D0Y Awp `4)7 arJ((<: 9kj`͖cPXu b#&7;9(rc1 NČTl֯  3VU+aWF:Dy/ٟ9838rR]mGS|i?# ϟ}1ɂii>sqϝs*S>12|1<|5 E@)10,Erʆ`8ݚ04g;, + vmƕP~HY7Ue jJ YDD[IUny8,$k r/B u^l0¶سAF9A,"1-*8b 8$DD!`B2؆J!K& 4A y`9g@ ?ť'Y`n{&؃mvYd " 2b-0yܕYNIaZ t k bbz! >;6U01߄7cȲtear!n9*И`2٠`L(hppbO-3Lj ц j[ HB.ΒKJRBJ0yT"/K>J&ʃȻA Z j+x' K`*Zlp2 LXrA%!d!!;03QHY>8%J>pJ:LD) ni~  KZV@Htn|p .JB8LBpa5 o/dq7~N}>"!dV !KKDDR% *!A AC1L p CB !a CB_Q ՠ˝^aDĝ#̖_5Wn'Oh2xgyQX7B;nw }fhVp۠}z6ZtT#si|+BZy7?Dm[ƭ 8&\>ջ|t? 10)TRj`nfVMՅeq|EK30' "2._F%|!$CʍJm~[Hpz 4!7hdªpzN\G#$0B~]B B(V`8m4$ #V%Ò|dał Jݠ}|1o+ ҷ`f0 ?LLi) JiID;S+wFާ^~^Ŕ*_c7h4d5dYylxmR9#R!IŨ.C,uN>>.IS4a%戳_UR[_ || `w| $lbC>`[rLTt< Z'KS s} . Tϡ ru%L|LD(%In_L - J-<\MD(& ?l>(y:D0%* pJM> B>%<^䃛02v !ˇ@Dc`s@8nÉS$o74eVÈ< "0.Go xLä)fbe-elm$aISRYq'C^ @!h@r¤}!)"v k JyėelRLE<Ǖe<6t?n3 1d } W#%T@bac>XNC0cEdIb0&8D.U59IdRZFUvbBoc0;]{533LO´͌I5)jLIwQ 1Lۄ8~/) s Q~kqBb,~GEt>!kP. xȃ7I/z˅Hy{EyoQAAAD  -f c0< /1d5cRdIKeVض2^iR2> +`IO1a!!>aRA@/C>9,)66Dd9TfM/&bb29Č~17oETA0@* 1%{dy xߍXyQA.&v{@e " i &RhH gyƲ|LKqǫ?z4Cl9Kg<АCҀ*4X̄UI .-韕FI~*&x$c"n$JJYb$nƄbRbE9UsX?`2c1Qd"a~7 C1_ǒKy0h"8m?,⹩ʡowpϸ_/+ 0s ސ$&`PlJ:<A} Nbw&>s1傄cd)!PAHS)dTT>\@pc僇 @܌$!BG%!ˇ;"%I !IOAAƇ YBD-4N qS{?|XdPH|O^)~ 6$ bJ@o bQ!KB!I~Nw V KBAIcyRRᭉ\Bᬂ`˜ BH9LDpJ> !ij71ċ`! d !Dx$|P S8Ȅ\@  7`N6s>&_1 "$DRN1$A 嘐(Jq_Ov1(ar/'1~zdS?2B%B* 㖆Z"y*/w"( 2hBb39䁣RIT. ab 0 "%xRo&Lģ*aˌ L9# Gn3` !+=Y^,s`|c`K607X}Aw( -\ Z =0;<3%4da"y:NncmP@z]Dׅ¡BVfV>AC,rY\:[ώNF#> @x`*(EERY_"؄ GJbYNyɽ`8mujø9|L\>>%&tP ' S>H< P/2J'crSrŽ3c }L<J E|=ϔZ>X<{xE>䃿M> .T>܄ɥ Dp^}ɺ 0 k|4%ÒwS -8=Ǫ*|$1),z6@@D%Z'dg5mrJ‡ !$"| b h66C\@dxLHު H@p Q` KY@ BpaH;\>p^a| ),Р\I>"\$J>N #ɇQF%9BPr QchM0%W*TS6lB+)!'MNIIs<0Ac}@P'!(1 Oh% uj~g+ +PmkuvHYu;~NwgA D) &3b!T@BeoɃ3%Ld P )僌3!'PmS6B)x-$GB?MBDcL, |܊ / @I},dw| J p^?, ᨀ@TpW!Ix0! & }\@0 ۘ ~$\ c pJshB5aV% 烰 TC10 焔b)!XD6D *@U1`BHC@ `hŞITe@ |& d AI|G@xC@0J$11OHw<& U"b&&ٳ)Yyu%v63>5\$M;^6;:/OX/MXh8/M`45*hƮgF],Ir 0~&ۯQM:>C@rrm0ap75b6\^0ϥ@ ձ ['Pm5 k?s(0 cT`ȇ)p!0u*N  cpPq$,dAJ! uA)!6ߤ,T2| onz䍨܂ ]BW M | ~D\SOI= sdSAx?šҒLD(H0 zK򷶋9%!,C:|*  V`KBWBX"¨)!L0Q b¼=BBpB b]B_\P ; !8%S>pBBC@b8>W@y%ʶY!0Q .D!#&WML=Oy/~mSmTiL>!"2?Y@!H0i_b=c|g: [1d _J%R@\Oׇeg/t-B/;Jy%*nriA)tYP eA@R`!h=J16&oI$\0͢9&D&Mɗȃ0q'^uۜ2%3xy- 0~Ʌs ٌ3,x~|&<7. C˟4  OH$<K :*@}q)vb[$Xp*sxaGҁl!j,9 *h?L%L0@ɱ% (E6Xu,a;FLkqmlr䶘t 6q7~މ'$Aw cL8P * ـɽ |QqI?GO- ڸe7x]#;y]0w sK@&dhE7A&0@x7br& d !ê~&$$aJ~ᠢa$% , ! d. } pJ!lAD|pp {}XD. n|o/zGrA.#D=e\' &!,%a>{\ӭab2J[ D7%s ") U$ ÐHj!x ǭ&4Ń$ lg|0 _yZv.$,غard-:כTD0*<& "<B _f1l)Cc 1`L@<@ ?d5op ;z-\T =1/qi>[.aci }ׅRL ij2eB; ,N\gK2a4S9ͦ19`&cm&딌c"N8cŋ/?cRA )?ȽnQŠe" ?` dxhܗW8܅ɛ]6`RK=:vǺLR-n'LX6mS%3xN_s>8' C>/ Lݸ{ OSTA.x! ),N"!T2xo(%?wK$&d|~xD7)]!tĭBC00 ; O@% ) ~ hW!P.—|| X@X"VA8Gh|vp3 .!.!,! !dxsBxLJ)I;cU|jUBB[! oI M@`D- A W@DR]>pL@20ăwP]!K5;NCՁwjT;%(6x'<c9{VM&geoC.ӌ ;9yd;k#-n=:X-)1(&rb[8PPɷq6 NOrjMCVYu,0 T@F(BptV (n&x9\7XW*k=)&~XN2c4.(޷@),sD*Q~9i$Ŧ)&5+qH#m NzT9ϡ:1X{vUϬ ~`f:_MCrR7o>HYod^$7Q$ȔrTQ:|=ext{4 D;ސ߇T Dn6vYm'aN5%*vFjv.K}LHQE?D:^b%~O:k*e @fA,ٛ  q_%8՜BSdP(`5SjfqX8%u'`'=؈9̠|ݜMO3*\ZϷUSi1/w6S2OZ2ITzaJ*؄0iaX+xqm'4umyJ>Du'Oa"44꿵*Zč;Z5 O\gN_ߦ-msE@xTֵ#n󰿼+_T*<7ń9K`uMJ@$v:h4Fh4F )EWC!8h4Fh4F㊐<AˇL>lVh4Fh4Y>Q*]P僧|زFh4Fh4+N pB@0x+Fh4Fh4+4eb5>yA95PS m&}rCynqn}aX:xIprp^:W?޶g=>J }:~ zͯ.W:^ɵRŶ6czku?}6+Fh4AnS>dW>jlĝj@Po'٧۶~ 7㇢n ?0uט5;|dyw5iπ|,tA1O 6o6/1.z:;-ǁs-V>ӷkh4FL>> Â\al4aU;Ox!  tŪm+_x K>f%iںu}`|Zxn}o{h4& aB>p!C^Ȃ.z>EIf;.PΏHyyE?цЏKLHǪWߜHr̾_:]gG]g\F\?'uP^;?U6k^ 瘯C:d`%^g]Q~=F8׹uk޶m9kbO_{~5oΏ {,`Oy,9-äϥX|ݐ^L}8.}f\>O=.V5F\Kx. |ȇJS>lv A~D`\e$z"<3/ 'BI?(O=s:׏7ϴ5ڒۭsk,V>;=U]^Ƕ LnOؿyb|:>'u_b^;qΘװAN&v5F\K9!M>y,P23mO??Be: yJr?zb8M?^ߐ~o[[u/s"ضI۩?C(Ǿ^xNC]gUE<,K]~P!nNq;qU^@іkq[%Cb8K06_}Q]Gmr[{̌ sWqM nWjbqGeqq7Gmg\'^u;򚩏nX|֌ο=6}S][XvlFh4k>Р\g) ac/d@]aLr^4i<myAr? 4ö"Xq?QF6EG^HǾnyC 8ۡǾ.F]P!_"c[/>ϴʸ.觿}sݯ蟁]MV,i}_q|vI)Cy)~7|69 +`<Ѻ~aϝgI\ܟO1^]pW^7}<ڡ>6]h4MC"axÆG`(޹lأh4Fh4F㊧|.hE% |EHȩh4Fh4FqE-(ۜvY*vŽh4Fh4Fr<>.<9}'um@0$(U>!q)HPU5F!t De‚ei@pTV)=@4WFS:t^)TA@a.y6a?cMF|8' P ]/W^cF<Џ? *@vkO5]~־o A*ѠB!/&` | pꈪطn 9>= Άɽᰫlr1ݴr F<9UɉT9C?~|X1J&_Bi߅ǞW{&8tϪw 3KO؟3?aTKa^XM68cY:ʇyL@p x0ÓPNpn#_»5y)] Tnž Rq'YRaQd$lRdoK.BAW9~ qBĊ`I9Xm3$Lz&?GPU+߆ԓ{= !a67 cZRךg|=qٶ|i.FYl3ڧܿ>۴J7@2(ݴG/obljBy~\cρsҹ7쇲yYoB*Unr@?YΩJL4 U_ͯϥjՄΩ{}4CZ @Ԇ+te)32Iioah0 "<<ߦ;`e"/PjGφd*X0f90bzBȑ_Cq;, m> Uۏ|.= Uݘ?1eCͼٌIcc>}T'Zxgɇxszxaɒ&$?{! g,K9<. &(ᇋQy3ϟNj//Ȟ h+$lļjϩجMQ+7@DzXNՠHZŅͯ1wY,Gx+Cҡbԏ﾿ ov.AAuo/]EGa4ѻii>JUY|-) KHɇ(.ۥ<V5LVçaߑað,:R2 =R3 aM[i;kd}5b"y5E1v:νzf_]קau{=wg.T(W뜁~ztsM}_ksZ'Mmz,Ω{}4M$S?<}xcƻ ]ن 48#'#M~l|J7 H@aBGCϰtxuG p!wW'6{Q~;mkm$}/FhC#&Ʋt r!* -DέNe;B!_w' 7_&_S(*!o6SO0h5dr ?K&0z mãrmV0a3+J,e@Hȁ2yο =2 j9;GLTnqiuЉwsVZ &gcB$2-#8|v!3-DƥsH,<6^8q)# VƾpE=jĹՖOO|^ΩJL4 U_ͯϥj=zFH L(mQ(PA>}RSr 1b6d1ZrgǟK?W\Ͼ >uar mAw¥:gބ7 i]^Se#U5$y**3?@fÖdÒulގ? 6- H0x{o敟~w/|}3,vkSɉ>md U,Kl*F" $X + bL 7^#o.]/bO~?o>Sҗ>π˟$CNj]Y톆CA+10gxp/aꔳЮ$7N*#$&cSu$>ڶIW!TENI%DA͎#P]!FS·mؼ:p A dlfT=*O–]rNzV^Oy~s JˡzŪ8eQ I<R3 fۦs,lvnaY2]U@P_F%۸ \ϕ]#Bz :=))A#yvṭ`jy]m'^mkRH 3~(zcWn0|Xf S?-;5XItTm5?c^-5__0y53Ϛl𫒀蹨|/$WÈ1Ŭ| {=QAaLg&W~"F z.~*}P1<nZO Y S> ߶m2|,B>pK>xC[!|w=1pvG3=\< 7 0hnΏz 1x *r3m 1pL ؅1d)?a`~[u ,5&Y>e Ŗ~oJ F>\7.Ti8{< O.|Cd6D֩%NW Oaoe&߿0Yo>dw 1'$>#G2[76̈́AvCqʶd*o4m: :ςkexؽx(ܰ&\=yd}Kamy-` s8]%"he{L&{W>г^՞q2 ?/>_==fsA?j]~UzÕ\B,|sf&\<"lH k o>ZF/L{Y^uú_1L<-7LuҢѻ ;GƘ'//s'×`ǁ^CF=': =F-+W~u;a>93>YKr`rJ( Oa3b wjs/UNH>A~ˋ/1 K}h$ M<-%{>*(Dj,>/HߑsͤUl{*&?KB3\]>_|=%8%Lֽ@*a1\ Braub(L_9 #nF΂e!6|*DL)"/;$IPM;߁x&7 /r@mVd@w`9Fh .`oL4>:-2>ޠj,;SP"zMX ;%ʾ*(m!&I ~JFi8Dbz.$e=?׈ڤSٹkxQ ">5J˶ڎu#dr!xY<;X_0=7#ubsԥ/6#$,97iUdY_'REߙE=xxnރp߸/s:=)QT>eyQ8FOEШgߗk9åkZ'{{_ן_ S4koT5, 5bӵGI}?Dܲg>̄|& eeeЦMx f|,_7EAIX@PǦp`"BW?d~ߖ ?cNC냽P~|7}껟 }<" '{k`0BOx,޻  wh ߞ; ֖L\vk??`@@nfbY;Dͧ |%xka}_UA]8*H<#{U}g2/3jv4٥;ࣴx8ׯ~%dGg}Fz/dpЅ/LSP-(”\< Y]੠>$H:m\>B7! %K,b2~v\4ߏ/A _9>XϏx~cL/'.1Fg'6n;`}H[_ 8S;23sͷs׽= x@vG]!g `Z` {ֲZ4 .}ǍЬe[2CI%?vL<%:!-?C^~x ൖmZC(R.H|w$ pH\Vx(;nzy`Uw+$R ^'p A -ce854OW`n;. -+d`ЋfO3p{jH@<Op[Y#˼F|h=|A^WǸa.{={Y< ja p@/VAa\0,cc19>)* (tLzЬbOq?YA6>z7j>$G΃N·BqVlNU/D C !qY'|-W 5t[VTeK@yx`mSNHl,>lug޾M.xk;gGx{_=?b\'^ :g=Z>hܩR ?q> ZV es1o+q`?#2ws)kOeÓIx8.'p|PDԸ`=~C @|e&|<{x RW7?$, _̀Psp/pe[KT|4a3?c=ӎAN6@JeX-m}'B3xhUM}T(Դ!&][r .8 cjr6xȄ/΁&Ogxc*3!tT1NZ '[}gOpyeT=|qr_Sg僨q|@A䃿? Y}ROS\5`R&OpI3t3;] և)2?; X:|1(1Y[!p=CJ2߲gX) ^~g_J矟lKjA!|ixEog!gŃ?'`՚DPX]y8rafJ 5LJ(PR?%$3AcUm#~!_[@wPs5HHcO>Pԋ LV<&I *Tm]Q,QH@$<0?%:=)q&r^(Zgl6?l̕aqk4sZO,]4 ~8=b`p+:w+5o¥/Wŏ×y?X9Ÿac_ЏME0-y 3`>cTo?;fT>\X\> g>\>Н-h;͵? <= sm.ek[ޏ+EwipUIVar9cӇco`DZO!=Ilma+R7, _Sbä cx)x^|AXLx{%O;Z­oE1hx{q> RWahpa$n,Z>\8I~Wb%A!tg #C<`a둯!$uO!2x* +NG wk߂o˛—OrSnáكn.])r2zvP1Ԃ܇_YKKis 3m4Í Uka۾м 6CgU iyg k1MZ1B@\$HH$H̜イ[J*,Ԯ\@NmLT\M|$At*_E`CaHɠ!}&wxېRIsN4$3E@hNձD?%:=)LdYUMH j>| =Em(T+0گ?FBX]vJɠ&p|}.USԖِpalW_K럆n3KSU%C>}s#6NaBL B'5Ϗ-!DՕ| p;p9y,;>L,鍣px?B-͡|1<| O6جMlA6~{Od#xwGb~w_cas x⍁uxFh7ZOb|ՏL@ x8-8_h~Okh OP@.GYP0ͺ@a߉` P=(|퐱$Cl, -4ͰrPj-:£'%OOU%3lX[xU6kwSPv<SǺ~ }sk`#txa~:q@ TOC-(I%0c;wnQ8 xU*| êWYTۮ6HI=󂖙)ZgO}!_? כx /| p T>8|wfh_8: %-oGeǶ,46= e߆՛OCۉ?a@͏c; \ݼ7\ wu(;3vyQ4Ԝѐ߆'r1ظ0M}P}E^,?i#;-OWm&o??vTe7C9ЮJh*ZcӤZ4U;$|b-=Ыjҹ:tȆ֭S7"UlfT ]j8x0{Yrk_% !Tۯ%_@T%&R7 Bg ``vЩGwˍgOv9C?~~aͦЪU }/yqÛo[onoj o!f67ͳL<b ă70aA2oU?CQ\r;!* %*P_T'L#&⁖mt|o)hv!h?g5Sɯ @:*14W}5>W:~K}H@L?b+_K}+'v'* ,}iR;ly S>l6YRѸkxF<Ed'LN4﫾___o4\?w}h|pCOð|nI]T8Y{j4Cza,Z4<39Ly }5>r-~4]`6"& \ۜv=oú#j4Fh4FmAaw`ɖoۤ6Btɇw>hJ!sf8yq"=W.xdxA:ֱucX:ֱXpM:Fư760$ˇI.^s4늗;LT~tcX:ֱuczeŃTHiy|p7{hKTX:ֱucX:c.ކ4߃|`wUr僛xlD}бucX:ֱu9&U>w.|i4z|p3\3=A:ֱucX:ֱ)[E] C Ds>4>"$XDަvgP0S 3u93^/z4 yY)`s TX:ֱucX:c6biJ= vqj,p463Ixcٕ"PmwP_~j|A@^coH^4\G˴ TX:ֱucX:<؜W>ra.p7a&cTpa+3h7ڦ: +/˱/dK<ucX:ֱuc_ϱ)B\w 0(#\Ns><|3 a6FZg0} G3ǎ8d}sYyc_羾_{?s1A?۸}sZm֯>õ' c_cj9ў֩UArB@G>X:ֱucX: 0ķ|A .!| ī]KD;b:J%ٔm@yk X' !cg>>ų/zM4f;~m'UAryqG>X:ֱucX:!Ā]М氋[|a|x+ cxtOŧě/c.mgl̓iݾ*aBGx<_ 2sjBPdvx&Wij_B}бucX:ֱu96]wB:ʇhHNӔ ])xyxPi[^1\Sț\`b_.x{s(Pq@ؗ_8Pw#(W<гu2ucX:ֱuc_ϱm؅ v &dC.8B>3⑐& )w[-'r_ls&ro؟Ԗxk||?%iO/o6A:ֱucX:ֱY0@9`ِpqOk۔ZLSȝ"#1Ǎ}m[^uoxrIF}~ a- 1ؾc=Fn.r D}бucX:ֱu9|B@xȇ!t hE>|p]_XB@]s-@A!Q}tcX:ֱuczI> FvQ=*İ dv}·;Lg!gjzB}бucX:ֱu9H< Pf7By6cX:ֱucXsxvqGUsY#*M rMhKTX:ֱucX:caph Azզ!"+N4ϵ\:ֱucX:ֱu|=VC1 .4BY>m5A:ֱucX:ֱɇ]aPp1CK>v!*D\ *)hTX:ֱucX:c򁤃1R> f|֜pUR\:ֱucX:ֱu|=yu&#ELTC.I1P%ecX:ֱucXslɇv ~ժ~~UW|FUIf4ɯqN͵cX:ֱucXs,@c 'eP6ոUI`}-,O$X+R ,!&Ai1Mdee=TϪ%yZ.\ @͞k~:ֱucX:ֱu|=L> 'mù.FTH.xCNáJp r`ϴIJ5V,R((߭llj7rJD adH,X6,6~k [F(6Q}tcX:ֱucz|Tda$\P i8TIB<.ABՎ*~g駟t >S ڊ]v"ʁɇs\>l]_D}бucX:ֱu9&P)F!.6$}VTrL|$M^)ai\,'$r,O IP~-*H8\|~GE|E_SlK&u*oG_~|TA&l0䃛P%e N ʶd|?Kŋ\>=|k wغ=۪)T'D>T< ]:/gχ'̆'k~:ֱucX:ֱu|=L><k|+{B0 UR&J Tσ]lKƟʇK_믡j}|+Ìx 忕 2O^G}бucX:ֱu9&q)跸 . <htDh qUR&rU?1d|ظ]XlpR Ka)RXo A:ֱucX:ֱɇ_U>ꇁ!!ذ|p3L ]TPO $czd6:P ?-/﯂6|$WAUU MAѣ>X:ֱucX:ʇ ?E0(ԣ"6t~lH bUR&]U [ !b* bU,KYa 81?"f/̈́i0iaMŸʇgسXz6z^ gcٰzɇ{rƈn5{f$} 4 S(vP}tcX:ֱuczʇ"!C5􉨂ޒ| ˄*),MA".HK?/3>G8ps%S{N^۟=JXx xs(|N\: Nϫ|Ro6ԂAK\\bU>|ʇ}_[>,C<\ Gxpgǰ}qx qnx;gΓzJpxbxl~M*IwH*Cέhio(oA:ֱucX:ֱؚp AqM yhi8TId /.^?wD/a/B2 W<9O5EyS1KHoݹ5,"Ky`{oHY:ZyG}бucX:ֱu9L>C|a$h؅UpheBAw /6DYyppOęsp ;}{}87*T: [?g?b^у[+\:ֱucX:ֱu|=$60 D|ɇƄ$zQmQ/Pv_xS0X:ֱucX:*݌&&V"V%eWkSsm>X:ֱucX:ۇ]|Uë"9. pUR\:ֱucX:ֱu|=N'T -䃨|P%ecX:ֱucXs1d0M8t 6}@|p3LP}tcX:ֱucz=|pv1 Ћ(~Njư 7áJ4A:ֱucX:ֱX${]mj>s̆C?z}:ֱucX:ֱu|=Dz|UC=U>!W>Hi8C?ׇcX:ֱucXsLl)\,g'Q$cp>iȸ`X/:x4dЏk>X:ֱucX:sp[.*Gof1 ٰj 06q"pB/|dڪK0HÐ~5Z6ucX:ֱuc_ϱNc7Cg !f4e"Axh+U;P~\A:ֱucX:ֱ/eW<|qa@f&hF|p@ _\K%g>Ex c@hԨ@XkvSFRhR\؏&K/xm:ֱucX:ֱu|=$w!%A%0H>rhh0q nK_|!H@"Xr( &uLX~ZjkކcX:ֱucXsL< ](C-~ A|Fj\ā<$|0z|xѫcZ>Bx6TX:ֱucX:c!f (àZ .xCNë|U }%*dUb8F#hVDI3)1ovpe_ڳ'@|y&Fn,mbmPuyVǹ=|ԱucX:ֱu[, .Ja!mEj Z(7*DcNM>x\r s>Hɬ=abN(}椐(~'$\_ A1^cގ=Qwiw=OmˇAX:ֱucX:$61P CKP|vȇo`h0KW>@ɇKpf"ڮUӶ->&P <['k={+'m3^3_[|}~|g>~^܆kÿmYcX:ֱucXΘɇ=gX5 |$ɇ~08!B>x8,> _Xw : 7a\UU0hF?HSK%W+=6qW}DC}_?=6 Q_{?-ٳ{ 6`M025^6$1`dB& #P$Ps3#4Qh$=_=o]UvO(uu}wnQ^ꦪ888d4< ;: ?{˝=ۺy~| Ңa+3wtNirM{Dß1jƇߧ/W,Wl~S-So\ӮL]5X]3RF3GB١LiuqGW du&>d+L*> ^gt 姏͔ۙs:oPң!z/x$ߑNߵ=888'5>J!rGF|)r wv,p2V\'j,,mz6o_x׌,QP7G8ćC=>SqqqNjm|/7p|X/v"w+&]6> GsG~>_{yo#WJsáZRqqqNjm|У~KՎqWI2f:9Gs͇tx\Bv]?>pqqǓƘGKȇzC=LNŇla:qqqвbk|7%>6qqq<~3 `/ztanپc{9բ{dߪ#w{FEu0Rw1;/ =Y^qkK'=񨬉Ň~8K?C (Ňx(dʤ>捉 f9Jׁe>={DΆ"ˮ7>[jfsc4Uw}&sssJ[sM=7ߙ<)̑6>|?Nu˓f_̔'<p-Y/uЧOׯlܸ1xdFAݶmwƽq ;H[5d; C}s^ss_#^:줿8>?Pn vgEޗqkKnԃ+i`Ȳȋ&xMai`1Mk{qqqOk|0\}wǙ^G7s_Tm!}:G$͔X|B*yeӦM# o߾]jkk }`CefaXp3|̭kwʒ`v>#LNѝs9<7]yޒqkKncӟ;Ā,+Xc^;?_ߔPظqq$Ƈ+]T9t S![(dl|НݖH1,ZQ)u;H}W{Jnəz3Ȓ`b\aL^PaӖ~y>ϓ'VԘ`/Ƈ.d rGʼy erz_;_+>{o弗0͘9[8_d2OFSCapqqǓ,gz: oxeǠy2}e4> G!SVVfon]7m+Z =C9vs{G^s`-8ڃqm888IgxxvTՆÆ-;j6RX?гrJ3֭NlcgL]V^=!B4>l), L|8[XeEyY޺u+[o-qq$Ƈiʋ}"LJׇ.2=`Z살hI^b9MZǵ=888'5>L_V^71MPu9lQٱ/ qm888Iv3WO`Ñn=|qe?>d+{NzD!z0ʅC!Rrj3HJs)g|f`k{qqqO_̥#lLJwF.zN5~-, ?R.~t\29%u r't,)L)iq4ofk{qqqOk|JєPSS$R S4QGj|ad)9zPRI pqqǓ&>,?aH|%^ǼX|=}K{Eۋ^^<(՛w˺)ޕ#>J) Ѿ4xabpqqǓf/7?15Eu<>?fDzpdswS-w8Ij+o?r~M|aTT7H9+>N]Iڔm}sXk{qqqOa4yTCq.:vY1d~ƇkBLk:p'gHC>ٰWdٵgKm]lnLj~ćb888d0gzteZf|>n|bAfⅣӧO6nCnkCCk!^8 ҥK mټ{NuTPU[*kvX\C D|)sV`b 9 3pqqǓ ]͌vI +R.[)p2tȇN:ҥKd1Ą6nGP>M>W"m"P pqqǓ_; j?xVYACe+d-vt駟M64o|1ʺ2f S3*ygl[Q-%;e2gy}a!8e"`ujc#>øqq$ƇkdPKNZa-i7W jkk[ȇE+*n6vqGʼy erz_;_+>{o弗0͘9[8_d2OpqqǓ9lGSWGXޏ G!SVV&vmrS ~(gw\Cyso} ô渶qq$Ƈ5g4#Km](>l OYx8(Ͼ3"xaϸqq$Ƈ%6 (/ qm888Iv>0BF|lFyA|V8&pqqǓVl.4 'ʖ ̊+6Ե5Ƶ=888'5>,.2|i[$>A*#pmjAqīGD8\8TJ"%J1>gi鸶qq$6GÎ2xveRU6>[)}`_)?\.x`s~9w̓|d8{fk{qqqOk|Xv|6aIH|غc 6ŗsʪm^B pԯW/&ꞑNI%% >01qqq<ɮaMĥ)R+]au=}K{Eۋ^^<(՛w˺)ޕ#>J6iY c\88x]udФe2ðykCKŇ3(Z4}`O'۽{ŜjѽIoU[yo= AJ~4qqq֙}"{44 {E]+o}5Ji">06qqq<ɮaUf2eyPsXP%#CoO]ጟޔz!ӧOׯlܸ1xnQҸw445~x빆la4J;I)h*ϵ/Y֩}c}y,,JˤSǘ1qqqTUUO?-6m ib uĕҧcgU2Z)KwʂUe"AOȶ S=zٿpqqǓ0c+>l i*j5tjkk[ȇE+*n6o"#f3moLJFxCM~|V8 555z͇c=N6ok+gvqGʼy erz_;_+>{o弗0͘9[8_d2OpqqǓ_FZ!v5ʄCp2eeeR__Xon&W<@{r}E>:60Lkk{qqqOk|*cfP#w5eL|Y\a;׏=.W?8P}gD(qm888Iv5[eaҲ6![`k{qqqO0~nyw|Xx`k{qqqOk|X[SgÄy)2LJx`k{qqqOl~0eUw|8r+HɩRr )ϥ=aZ:qqq_ ^IA|`Zc\88x]úu2)~$>lohiaw?`O=o(6?!^"+n;Oj6JݲAʫwҾtZ]I[}^&ڔHIOR888d6pñ0}um4![8v^1Ztp[V~ty`Oènұs$J;?eqm888IvUdʢu20G>d+LYY:uxٻOd}aȲk卻ϖںFܘ: c]v|L5Ƶ=888'm|h]0mUmCⅣӧO6n=]I]dINYzY]f.mI|6aN6:"[l {~0qqq<ɮ׈rz)θ,\1UmKk"AFxᅌƇVñ'5 o3{)u(W>Y%'uIqFcdȤ5A73>N^pd"r{_]~sCq\88x]CvEX&0BaD*>d+Ƈ.?<_4 0I888dćPȌ/dƇo. +Gȿ^:LrP)9kZ*% \J+pqqǓ~:@x^p~~y0S4 ?R.~t\29%u r't,)L)iq4;pqm888I}סMLJi~|0E#P{G=aՋɾg{ARrCI')Lkk{qqqOq ^LLJl`O=o(6?!^"+n;Oj6JݲAʫwP*KJ$E,x)qm888Iv?>?@J.`O'۽{ŜjѽIoU[yo= AJ~aY6RҦk\88xF!^8 2uwȞ=" dg^ooZyQj67NX~Aøqq${k6>!BO>ү_?ٸqcHq>ihkC=s NHPIL/ \M Ci)5gltj~]eN'^@k{qqqOB![(d4>TWWK.]2xeva;{dSsCUnٕ:bq0tv۩H7;`<ßO|~E=J;^>^怌k{qqqOC8@Ë>{ԂⅣG>tI.]j%F!&7\ey9!0b\88x=lȈҌ%/:UUUO˦MG7}`CefaXp3|̭kwʒ`vƇs1="{)1Dqm888IvW|P4>_aT BƇV;aъJ۱G#/Z_SuLKETb\ښ&C z4}.G S0LLh= r^6qqq<ɞ]Axxhܜz!񡦦Upmr[}̞Ge;ʕOVIo3z\&#?2iaиŭTCOoz.W ]HlG>DN?.ڸqq${*>ܢ! 2C,S] FC ]y2oB7yߥ^~ʅO~*[9+s3fΖ#֙?Mxj}(uma888dwLJMŇzZ?(Ͼ3"xaϸqq${F|DF|8Q ?x9I긶qq${1^evA0I888dw=b_r-HѢa+ qm888I-Z?s#"}KW.*%g SKARoK?{|3ôt\88x=pދ#e&>d+{48\Jr䜻Ⱦץ['Q/Gf峤'3Ӽuoa?qqq<ɞ|xiA~|8ނ6..MS4B ?ӷtzpϛ/ʾOWȊΓڭRym]UƵ=888''.![8v^1Ztp[V~ty`OènұsPҾtZ(s؍k{qqqO}Q|%cCQȔI}}}`3]Dih';,V޸lk͍0VE|`Zm\88x=N.𠘿"tEp2}~ƍGZ>%{IC^wkvF))6o.^SC1"ζ\eҩMzgZ{\88xkg_ćnY׃&<ۅƇb_)d4>TWWK.]2xeva;{dSsCUnٕ:bq0tvG з޻ `=&{rt`ȱ\Oq8 pqqǓ`=Q~ AH/z!AG|ԩ,]xKCLxnöF(UAVߕ:bs,LPq6F@DSA!s:|m.22qqq<29 /^!k(dl|Щ~Z6m<Ҽ*6˘ 3OrτenE,_S˜!>rE\4,뤧h`Z}\88xݏ ;B=ᥑr#S/B.(^8 jkk[ȇE+*n6NֻCMMM^c冷ʙ=:v+:$gLFL[#~12dàqso'2w>G*<;QךBozmS!e8`Zk\88x=G>h|BFCkmGy̛PM-wA9rᓟʹV{ ܌#E(?3I888d;>H![(dʤ>֙?Mxj}(umi踶qq${ꂓt|0}Hx8(Ͼ3"xDǵ=888'/0h| O5Ƶ=888'm|8M\/AÃvѷ04qqq</O]A t)qm888Iv= >pć4>]Pp9r+HɩRr )ϥ=aZ:qqq<ɞ~iNLJx8أWŏ. X&ܵD5.:A|97.%%?)%m<Ξ}vpqqǓ6>|~qpͩFJikL|0Eoz8W}uH'KуHOR888d7a"3>0Kڧ~o7_}YHn+n;Oj6JݲAʫwe:Lڗz_}<Д<&￯stjZvN#:MW^888d3>t|0]\~cjA~HO6{9բ{dߪ#w{FEu0y`A{owH;xc89!hѰBLk:p'gHC>ٰۑV޸lk͍0VU@|Нz>;:aCCAf?(2&RϺd{M6Gdaǵ=888'5>tə>-Z/d#7|?Jƽ&<#o=א4|Cw>;ӧ0d \ 8ϺdyMs\88xćavG\zaCQh|.]Heeehdw*<앭Ȧ=戇RYX\C t|0;w)]#!{<,t9&>>;u ǃ-`{\88xƇSo v } N G!AG|ԩ,]xKCLxnöF(UAVߕ:bs,0y)wI~<~TASsP˱s{qqqO|x{i>" vaQSUU%O?lڴ)xy &=]I]dINK9+̥MŇl;:"#>8`CQh|ik>{qy[V_9rYǎrUrRocdȤ5AgJ 2w3v؃}Kbc}fjBlL6 "c\88xkag]Pp2Zo8#e޼2nlK/ʉ TνrWf̜-G/2xD' qm888Ivu㻑>h?>T|8#Ⅳ)++Zg?xs;`6rs?3N.j<׹yξЛ̣3qqq<ɮйr 0b:>d+ҼS:[~rwF2888d79rD~zPծ04qqq<z #4s/Z SLpqqǓ~9Gs$@_#>uV_4 $u\88xć!|; eƇ'#NCz&pqqǓ2[q?vNG|&Q5zO[mC0I888d?@h|d?>|MKyW&pqqǓ&>Βy+t#>S.ii`Fh qm888I? &> >j37e- qm888Ix|blTla:qqq-HѢa+ qm888I5Bb 9#P qm888IH|.ۑ/!E&pqqǓ1wEȇWF8ćrmS FC&pqqǓYC괋c,Ffćx`k{qqqOzeT@:>d+ qm888IC:0Lqm888IT|Ƈ7imAh\-0:$u\88xݏŇ>3B|-:$u\88xE="#>C:>K-(^8&pqqǓ1weujf|I긶qq$ LJWQ!Ua:qqq<ɞo5BWǘpүe- qm888Iw`4<1⅃a:qqqk897 ~5&>qqq<ɞSBɈ6O-3LRǵ=888'#!t3>ht#p qm888Ivw|A0I888dqć`S4B gk{qqqO,>\\!P qm888IvΕo^ 9A|8ʛhȄa: d 翡am$>E#`I긶qq${:>;>8|&HX|0Id Rp0LRǵ=888'~4>qk{H2Yx / qm888Iv݆Γo sWՄC69M |`lL0/Wo h|V8&pqqǓMƇ$>L5Axpøǵ=$p|8Cʤeprk{qqqO⃒.0G-ak{H2^plx0t.p0LRǵ=888'm|8'l|/8 $u\@ LJpȌAtP.pćx`k{qqqO p,røƵ=$ e.xù8Ƶ=888'ُ>&>xSHȌAt𙔊ak{H2жpS0)Ņ6>k>0L|\88x=#>"k|`éa: ɘ0|w|<1![`k{qqqOv""#>\L|hYpI긶$cIzc(>˅Ï!^8&pqqǓGaÿÏ1睉a: =~ $u\88x=^~>|đ d4>t+>AƇǵ=888'm|8 6@8FG!$u\@.L|V8&pqqǓ&>LJ.)&>|#&c\@?>0I888dOŇ[$ 0LRǵ=$NiA7'C0I888dcBC8>a: %3>Oޛ5&˸qq${FsøƵ=$Ng]~q888d?@Nh|Xo9a;>ŇSrooM-(^8&pqqǓG_cd:>q͇pxa: a|^ Ae`I긶qq${6n ^pI긶$=!8/ qm888Ix|~t#&۸$ >DF|HK>awk>0L|\88xƇn /6>[\Cxa&L8>D`ƒX|I긶qq${<>.`\} mak{H2dƇ~| $u\88xݏsćoegɑ e\@9~|Ο6fe}.wC!^8&pqqǓÂb0qmI&"#>ƒ/z̔On0![`k{qqqO%/z^pI긶$w|Eϙ>.(^8&pqqǓ&>^,߽_P]~s,\!$u\@) >JŇ_{\a2Ƶ=888' ^pI긶$w|,WL|SjA0I888d;>ïzΈq&+>(⃆Up0LRǵ=888'5>DwP)3>^pI긶$w;׽`LJx`k{qqqOk|͑ d{w3>--C0I888d 2O;'ů̑σ^pI긶$J:>o|m~u߹rG<> $u\88xƇ->:Bpe?5r:G>0LƸ^IDAT$ww]AÕ}_![`k{qqqO6C;|`$_+>/ qm888Ix| Of7Jy09Ƶ=$h|=>ht\qk{qqqOݏ%#>\h|X!8 qmI&;>htkƒ0I888d;>VÇsLJ8 qmI? 1?~p0LRǵ=888'4{|T|o/.!0 qmI&3>"vƒOf|I긶qq${}4pǠL|`qmI&4hxh|V8&pqqǓz^LJAC|`$,dOECN-(^8&pqqǓ6>~G j#!$u\@I\F0pgY $u\88x=u͇&Ƈ?GCxa&߽HȈ6<!^8&pqqǓ5,6 |`$LJ;G~HŇ#pͧ2C0I888dcb9~&>|N?@dćk?]DVϑ 1 ?3G?|&@dLoɗ7ECp0LRǵ=888'񡯜e>K䏟.Έq&Ƈ#ɩo>_ju6>d+ qm888IvF,Sn-z{_s Ƃ5Ye{0tƇ;" 0Id4>|0b|k/9%W|pKϗxpv(> $u\88x=N W毩 Ň;Mp ćk8ajSN>eܠrF+p0LRǵ=888'5>t@N rŇ]~xq2ć0LRǵ=$-n.'CuKO9ޙAvPԋ=0I888du9rB;?@ ȇh|0IdzձpӠe{ $u\88xć7uy܄4>$pdk{H2:_qcHzc<>,!/ qm888Ip|gƇ8 qmIƇnx?{|Xm`?\  >{-|`qq${<>h0aXq&L*>274j|`Ǹ$c1׿+lxK?>5&c\88x=,pېrۗ~xPFpgda&L > Yan!^8&pqqǓOU0YƵ=$W|P2⃍p0LRǵ=888'0 6 ⅃a:qqq<ɞw|}TxPF]a: TLJPxLJla:qqq<6@Ň0LRǵ=$W|P 6>G0qm888I w [0LRǵ=$ ѫp0LRǵ=888'kP`ƒwm|/8 $u\@ƇtȌWƒ+> $u\88xhh|#>I|`L*>]&>9|Mp|V8&pqqǓ6>wS7C:>lZF*?]ak{H2&> -0I888dψ#&˸$s[ !ćla:qqq<-l|C8>a: h|-⅃a:qqq<ɞw|{l|#&> 4qqq<ɞw|ទ>c^pI긶$c7~D|r#> $u\88x="k|LJ:|`Ǹ$SP|ޑp0LRǵ=888'6:X8aL^ćtxpŇx`k{qqqO7+>q&m5>hxo|`lpqqǓ= G|! 0Id|2C8<(L|;x`k{qqqO0V ;CI긶$LJv= M 4ݝp0LRǵ=888' 6<0qmI&Ό0I888dKf|GG|0Id#!I긶qq${A|`L!\!^8&pqqǓ _(3:CI긶$Sp|`CEJaa:qqq<ɞ6<<8Ə|H/:$u\88x=`e|*> I긶qq$#B!.hѰ=&pqqǓ6>pKHȈ4hxL|0E#P qm888Ivw|zצY3LRǵ=888'S}<>FFK8>iѰI긶qq${8># 0I888dψz-XG<&^uI긶qq$ƇF,o#>l۝r888dH|PL|NC8<<2v]*> $u\88xm~WH|X"⅃a:qqq<H|T|HT|k>0L|\88xҏ $u\88xć92øt|8 ~+ qm888Ivu[H(8>E#pI긶qq${&[|N Ňla:qqq<^X|C:>ܓp0LRǵ=888'6:]Pp0LRǵ=888']Ai2>UGCp0LRǵ=888'ٛ $u\88xƇd|h\-,:$u\88x=GDF|˸U&>HOdFp_ak{qqqOD|LJx`k{qqqOk|>jLƧ![`k{qqqOg?@_)BP|V8&pqqǓ6>s aøǵ=888'W|XG|I긶qq$;>?>Euv(t\88xć-~H/ܺʕ+Ŋ+RYFƏ/{7|[oE8_FK܊qm888Ix|0a7#hѰY]VVVJ}}l۶ aLϭXn]ׯj-[H]]gSqm888IFR6hSUU,;zCo۽[?>Eٺ/wWl*6m,?̟FMMMV6nܘB~Wx|o888IvNc@`a~|͇Blذ!AunV50׹sgoNn5;}Auպs^+]t1nŀil[͛7,fqqq<LJ&>D8>G*>Ã21 +&`W_mn㯳=ᆆi#oyoO?m{8j[lAg ć| 88x{<><<vA¡ f7Myd-naЮm[~z ղv]w8÷-lh*>888k|¡ 6<{roZEw5>Q;tg>yԨQ뽇UIeZgVn|0 PВ"888^lnéw~d!xHPtgs9裏6Tkdp1u_wp`2k\YtiQƇSN9ڿ裏L88x=k|(3>d+:`|kC2dȐ+VɢEKdkTzdϧ\` ӧuC|{qqqO7+>5Ct^FW|Zoz7o̜9cNdȑ&M2]=6}L888`3>ht0%Q:6<4]8qq$+>(AC5B 6>(6@m5atPCyE/eeSNFŋrwp`ܸ2zx;o~ 6<88xݏ˚.ެC!tP0f5j9%FG˰adΜE)8886>|&n/io_ٸqcI;z SΘ1\M&N,=z0nJ<i*>![|OK888Ƈl#yj}.7muʯK=T!?qqq?xݭ"K|bb\ϯ_yw޼}|ydy{=^CY6ᦎk/jk888~<N{!i|GKsrHk7 g>iؽO+[vkߴ[*_$mKեq{o;Ǘ)Ŧ睯?F!aפ~2κ?/oY;\3 Azqqqpd]}pRt ƽ}^ٺ}5ʆMAJV*g6YL|J'Ǘl!fADUW)+˽;oy:o;Hz~888ss暈Ň͸C7?KM,-+eR6kZ\%65 fAz8U)#}z~=ud߾}gᆲe䤅{C?6>C#J{պrvܺgx)ٞqqq'A|8!3><=`YB-⚷;Edٱ_eekE2kc䣑^Jҙ&<,_3{|0!DvsT=DڥLJxh0=Ի<޽"ΆR}l__vJ,kԹ+Ǘ2V.#d-x.rƔTxX}pxN,gto;nR);`'W럗^S6sqqq<?:B^,-ᅻg};P7F2"Y<IR^zYcR~2vf,)!tʫgCMp⿇Gϊ'{>ٹkWnyWd@>"뾐mkˬEkdS 寎{9kAGk\ۚn|dFC tD߱$#"⬎RqqqǛG<{|?9Ok>u-)nmSV}|h_峁]eIeo^ScL+ -=>\!=V6[|&8 ƈ⿇va}]5<4{O|1]䔻ǿ8^*V-+'KL"ۈz>rC0wsoa]{]-Wr՗ WT_lo~nYu]KN.~;|Y~-%Z=7a>+[ʷﻲbgGM//~MoyQҞ烝g#f9V=\~ƇSL4]Q/3ˬ)LxN99eB~>tC[w>!xuo06qqqǛ,ȈScM-ྒh^IVYA/o'N6[v)2fP~_A#B #Ou '=uzIwݸQ~ȸkE)~U>^6D.}L~oHSX^55~s_Gy)0P9"`f~6>hxЋj ջdeNsjƇKem2~V)Y+vYuyx k>x*u]ݷ7CQw8880/cˈ 2r|A^RUc76~d4G=1>ۥka|p׿b.uGD-_zٷYY)MRfVO?=Iv!Ռ]+ApĀseBp@qEnϊ"?sy)Gy^A_Gxl?ǣGXqqq/`ュn~N888^Dw|Z>>Ӓ"\xbwxqqq/KA![(:? Ow8888TOLJϛ6@<;ُ?q͇?=QVWə 5=pqqq<׸dćQvAYDpqqq/{ lx|h"888xx!5 888G0G|T7s6Lo5>,5pqqqǕp|87Fngf_48888/Lćqqqq/NaZCzxR6yȞ:(bf͞#m|W|gƇlm5 ^6iH&HLq %>leA| ! AƇV.j .iwu0S446>ᕩl|0E#P벫20ZWP! 6>Q>o)))IqK#3_ aư_5Bs%ôLo! {_K|_RRyu}lzV뜼+"m.BÞ{=m^;n[>υ_kqë3bAFx}A@ Z][~IgiWr:\!r >z) s׆)>yA>zpEf|!\ECo~Ϝ`)W €}κަO(srS8^"|c_p2l h`\u{>|}k,>DC(@yuڦ3L]!pR;gڭrR)ɫgH~zYiWr\\]ϕH].?k=pxwl|5WPZ.u͇}|&Q.H[OQ^=xyuHڕqkJ]^>Åϻz.6p>θ11kWPψA::Ckdq D$J ^~!H˰m¸g<0`3>htv)GVER9AC@Tc¼>[471 Y@r($> s%­W>f ~"@Os?"x^N=EN!񡹸f_o">ŏpD r x|"{|# \+:E\}@!*zZցp([\ECo]+ŋ(08 vA# \+ŋ6G5FLZ gfŇRg[J@JF|3>htpϼyW\++oHO87 <>"a=hZ 8PUUnpH뽜hp=?9BqW[J _%r#;r "_(#&б3FsvCg`zG|8=g|F]+/8ȵώqc;ʇtEsvCg`\ʇ<ߧZA^xJv\'aJJCW\&.>8>E#! @׿JYgYp+e3 ځo{u[l4维\81tOWG: nW>-h'{{.c6Ùp.ZWṖrćMpja# \+/8ȵѓ;_ _x-qÞm?1h8lh9 ,^~.]{}$WGwyNޔɹ8>%ٷOd}иOv6=SB>g>4ルhk%"t~H~W^+ 6iפ _%r,3;~tsylٚ 2jtC;|f 2D|4Hz|ɳ >? ]0.-%gv8>H g߾} {tD|vov,/+ɼ%kλzBv؇kːmk|M߮G3Z\G>x/!z˫ot^,ϽF^G?w ȟߪ_=^ν{|r˷ٳOJJJ v!>@\}@?>؜&hѰJćC7t>D|BCǚu=uAw4 5/A#~VMCo*>4~}Qӝˉwq# \izE]#4>lF|8z-ᅻV"_юǽzdJF5 {ƏRGrs~λ~s!,+sߺ_7̵,'skǂEZs= /{mF/;vIoEYgYwWG (s2GLH.^-3-k;zٗ_XEOT|hv z?뻸RbX|Z:eIҹk 9U>)YV\봋{ɨQ䡇J.6nM|8zGZwDrߥd`kzvuv'޻KMdw$`r,gDlυַ hȵ/p:=S~\;O4;Li0yByշdY2uV6t ;;\>"<.gƒ~SJep u;ӮB׉H;ү^˿q ZVuOh<7/8ht%j>;Ϻþqk#&5hh}6neyYr}۽!== ٨iCg>8>ŏpD6i\;9wmd^kCQ¾ǰ4kg5s̎AHG<𗿙ֈqCc s޳gV/4LĄ="tzY"~=A,6V##{ne*~M1d,s ~GG@"gcHS-v7O?T9(5[A*d]s,[nNLJHkgY۝lN9"vo~qʅkYaNUC|B54{9a\u罁s vVy֝{=Ak;뺣hw?Nddy;'"~2!@?KcC|F09izCgBq}r.S]\|#5$0GB{ȹy|1~| ?>޺Vp"B/vV yG hxku35@QA>A) w{&z/E CWP*5&j;z:z]. L  E~9-  $/Y̼䌎O!ig[LM)V/^zl}Cߨ_o3(-hnݵpx1̿hxpfŇN`?µPzAÃ+>ďp/>LJU͏ fli[l1\#}6:Xfߕԏ0>37DCJ@LJ :ルhk%xqEr>4;> ]PJ@G@VWPoV|{(>޺VWP4!qc 뮕 `VWP;>C8>-HѢa+ԣ! Z0 Z (^\}@;>t⃫hk%xq`G*>oAhJ@#b`Fhᮕ6<(oÃ΢-2;T|x8K|8:4:(oܚ:.(~k%xq Ň#! ! W[J@rŇSoJW[J@JAAÛ0g.k>@Yup/}ŵP;>FCƇPxHŇZw/>s(>޺VWPyv̩]PJ@\!~k%xq&1-\|\}@;>Ãv/oJ!.(~k%xqh|z F<>ďp/>^X|evLѸ[`uJ@J! /5B Z (^\}@;>[]PJ@ŇڴMG|Z (^\}@=o*{,]+ŋ(ćtxx#|EקZ (^\}@i2>ćpx h?ĵP3>xdƇPxxG@VWP;>C8>޺VWP`C8>޺VWPvA# \+ŋZ|Z (^\}@U4ֵPj3W|p u/>(>k>@Z|Z (^\}@U4ֵPRp|x#W[J@3>xdćj #oޏ3W\+ŋ\]h|0E#P뮕fU4ֵPRP|}P]ďp/>0k>@WP/肓N*zZ (^\}@)8>hxW[J@JAp| Z (^\}@=?µPzk,]+ŋ(&>/ >hx-[w/>Cy.(~k%xqH|H|X}tŐ->ďp/>_o">޺VWPaC$>l]+ŋ(0$ 2ë6aV~| FC\+ŋGC:@dSh|R Z (^\}@=a&ë7l|0EGVWP2 Q^ 34­VWP/OWnJ1}NTO?µPz^񡪾Q^ZC<>ďp/>d|Z^\#/jZkU4ֵPw|x~R0y)2j\Ҏk>(yŇuىՑa]PJ@yćeݶLzynR52uH|Z (^\}@ ćg'n0h΢w|Pe37U4ֵPw|xjHv{  Z (^\}@Ƈ3bpƇ&T`Ĕ @Rqx|"#><9~]*@ルhk%xq`OW[J@;> `?µP+>`,?µPzቱ1r[fZ (^\}@/>5_5>x<`nݵPw|xbLE$@`?µPzT|T|W\+ŋ]hjݵPCJXQC0źk%xq%_Tl| Z (^\}@=P6@CJ@yLJZ 6>޺VWPLJMLJKR|&uJ@J*>[:B W[J@J8>Ozvq8޺VWPaH!ⓓ*қ\)}ŵPzA3c*MxxcbV$L-ܵPz*><J'5<<'TĊ:͇ӼYVWP![`M  )+p)[w/>lxx|R.e[O-(~k%xqںsF!~k%xqu_ `_Fルhk%xqƇ=5>LJ1(?<ルhk%xq%"#><6".(~k%xqV# \+ŋk>@WP5>5 (͈z\}@P.G@VWPOLJ!MŇt|^)VWPR<%z͇­VWP! vA# \+ŋk>dćz 0E#VWPό~ҔץZuJ@[\ECo]+ŋ(:"`?µPzŇa|pU4ֵP5 \}@={|5 \}@U4ֵPd|8ӥA2"Ƈk>|[źk%xqƇ>8kvg Z4}ŵPz<>LJ~ >$WP7a\4>(yW[J@J1*zZ (^\}@)(>X.(~k%xq # \+ŋs5͈4>lyqqqq ƇFW⃫h8888-imyqqqqnw(5d->Z8888z!Ƈ( 8888}ZZ8888^6@t@6\AŇX|пjM=>lLJ V`P`|g| Np_񡳌}>ˮںCcc4<B"2Sx]s >nЪpLJU1>j|A?ÛO ҙ9XVk |P;#9pP(fLyAg]!4k>z>Y62\ݷʳ9 ekhkK@s\Y>2#͊z[VǑ樅 ѣ\Na.ۻQ$G_pMgbŶNУRG7c%RO|H/;p jy~QzX(_띧]V̔6V%|Ei=> BcN/ i&Bc/8^Pep(Á Mj?C5!@Tl]j|ipC4> S-2N0 !>@n9"㴋 MŇWJ ͣYqI$>Da:ys m>ܗM>?)Z2zӽn[;wɣ\friOn\tx\x݆ n3iS?pw|σ8) sWsZrM6>(ͯ)y,^kq>`6\̭ ?k}*73dƺ6'}-iSirRW?ow?s|~z^xG6x^ycs=@C;K\h%{f:;gnOaJV&WH/eRT&YGY6V;pp(&XVg~oui>hz/}sYz΅}}e2at-`tn}1J[gw cQ zĂz._4y_Tʣ* d\5>#ȃYx jy`}Vepo_4<p0]u* {<2f\uzy oek噲 y&.&-'͗&͒'M'OW&zW'{ SkS'{L.N!L-c8L4U8S.'ONX$OLX*J븵~X// }po{F+QaqeR3R83"1< +?5mCsskS|I|iJWVɰJnbAύ{Ÿ)WǮn-dZ˵51h#~7`NoC\ G[/-o. ŕ5_~ۻ¯ 办R{O+\/1// s}9\lC 9̕_vַ~=x}^ _{W^d> D~g{MU~K3Jkw>* im|˞ s.~rϻ\ ]'x/E!~޼4]sQw.s}޵ d.$?zkV ߜi m ?x}j{tM6oL༎ݼZ&Z:bBx9/x)xq\eL&g!xYcecyLW'J7{]t*v&?t3 17gyxE˾<{n~NMsarkkrӱiy5t9T9)){Ir΋ ~x9q36VNz|'GבӞۏ2,kNUFdž)s3"cyeX&"xqR6e;-o3=vr_ '^Iw8)od9o{F `Op=gox. 6<Ͼ'%?c[igȔh?>%K|=>DC:>"-@(i|F߯xs*[:yRX!M\%OZ&/LZ(/N1S^4ţL^4N^4ct-_  mARqcATYDxx嚏C*>X 6Bh|HG&WxHPGl&lXȠy L6b@!\kq!ޖlA7}R! ~KBK ` ƒᡕ!pxC&潎s:B4,ؐ ʁC<8xhlH?>hzM6E.x- lH6 3rgpӱiZ;>dgaCWt >x#C HŇD&2>' 2hY|ߺbCtxhy|pÐ4Ni. MQ@xh| ŇTPB%@h|!T1W$3@ς}'})?Nk.oC>]%#:X\dCe:B1Ufzz#<4<MO,k h;@x{O8Ȑo|?anA'>أyl׽EJOl! Je%"\*A|C8@4>BC"#8C8ұi2ƒp|b x;MP\h|ƒrO,&C8@c~pz a"LAo{x߻O+꿽"y1&@LgԘ|ƒoab1iF˽5{Q>Zm'H˪wX3bܙ;2,-ʓrc5*'cܢBi﹏O?v1rǍ_0q&!|h|0»M;C:@hxX"g|׌8ć޹AiA|B rz.[|GA A|06)OC]<z.?\'Gt8C3i\c gt|vC%;HD0zXxΜwK8C40Þ6 m\B#?T0hn|P"8P`hTEx|pQh|P! #bD4B8 l|P vF_ݶ0>!ax;>7ao/A|p "!Ň/8CwlX`F8.~ z{섻}CDWˤτ~xCɗWλMJ??N~6szcm]TfА7M5ؕ*3ø.1 1vy ݣPmG]Vztke[}^߯I N>lǚ6FY%)vȒXR]Geц%lkU,luLhB)0g$ޟ_ z?<T S S' nZМdୣ\q0@Pu)?T؜sM3NQֲ΂4^oaN0GݧgFy {fxFx:xV<]m)sl}>X컙..ciߪ-oaLXuXۡg1V9D]q\!_?א⚸e}2іQFul1:hS ĢVNFY}uX.7aٟkQ[ޡrVcqR}qhkl|-/pS g}m_{9?ϑu!Ym}q[>Xa|}g=1_ h߳Dr[Vu̹/:]jfԎ(1yU'1T1um1U8&m繎I<]y"CU0J#Oᾊ?`=;t*?w;fCh0<婾U9TG <֡}TQ~Ѿ|v>>BN1V^~,)!bQ, D;ߗ( xNѶ2kQ>m>Ǩzs?(KrhFR#8bW=K1#גY]w%ߗplwŭe^6CwžQ; d<6E=:@NA2G_ aY0 -2jKُQLYHu`?:f g+ =ף(=:žOY T7d'U`[mMNTBՆ&kyʹϏPE7oJ*?\rg?NDŽ7QQAM·MyYܣ5uL)yQPL2%޼u98{% )_뮇?\ Px9WȑX9չFb=T8 qNkB|i)HŖ eMIPmLņW/am52D{$&*+2Va< ,|nv)m `qB?<: |5eo|kцRluUe Ӿk-*V- Vd ~mVfU;㈪6' o_@ϓN'RX䀊oK&}\0Y,>KfAކ ꃊK.P,"=],ܓfw "b⽜%.hcއex_{"P8Yu^Ĺ_c3&9 @[;발1>>؀d| =π'iWMvL†(gP=:;v] _6xL+&;eR9rFYcS?3!r98 ?v ~gV?\~vs>:iT_ OZ)E&ӠPjn (-3̢̰D(;<!卭د0"Q1 z%ޔ70SqTTu*9cC)Pu\*ƧB i1Qb13jTx SQ UT,3ޱ/QiQHXN91c@R8%GYLe@ O3)jPdx*T(h@ *mp&u$g7$TF5Nr@aCjA M\DV|РX}fvX; 4xWzoWUR=O99vb].^?;nwiϵbٶ-61IojkYKחx*àP=^lby]f;{k}-B-.|sg{Z|`!N(ЛSd)wƭL;Eevpb J}r$Cl@۝;LJ(#;2f!|q*˚eHemc"·Kl}63ZL5}'A1b62(cz(}tGyS˰ZS#nxJ< $٫^$M{2xds*L>Y~Z)xpaI!ʙI<&&G*WmUAL`=>UDdPcPsb Ԛ 'AGuzQoqFݩzN}* BGVPk18Ԕ!JAĐ Q4ޢ"D/?rc@Y2$-&+FKBH/(nPl- Oz  p: <H|!/~QeK{/~Y{/joZ/[otw!$$^!a'n` NT#PJ.=q?B TIhH@ Ur̠:hd0R;k"U:CQ&|tW+8X& BD"C !@eZ Q=PDZυI?{ &%h_^h`HKDe/6 $!>qLBB""J  ?2:9%hKX'0E(" ZOO%\@F! $!"&!%D>$!@<,!,0y Q,L + 7s㙄AW'*6 F>łS8,H:TF 0 %5'C-Lk#u b_A 1/-L踁\D1Ѣ$#moSTh0%3v>v"O?f7f`4u L\|<Ӣ̓6>qIh$AS Q}1$1: QyQD҂䅁)32Nf4&!&tm1tEmP_45Fcb:~XϠ#tQh8h>8sZ2N@zIh=i~VZJ{Fsiat)MfV1pGH'lԟgPw:S9uh;SˁsFu!Cej$>֢$LpdRqFqiP~l*);:ʌ:(=2J OÒ( IB 8xA w[2B$!Ly s d՞)%0siX< WJ̀Ih(drBzX{&yA ֆ긁ܟ`'Tu|6B!/ar%x.YBڗxx p:!KsbRnpIG}f߁($I?SJA% 켉 BіI$dj!{b]p9 ^& jw2nS@8% p A` -"|p0H"舉}'LDPc@%dĒv) npGC8]BH2"K!, A喀<< '* uf"$)"QE1bDD!dDn;Ld!C6"= !bDCB""ЈYBFD%NSBX. \:v ApL,H`*GB:|QH(NS1t$#rZN9h 7#\B?bkWl>I:pJp N`*ȽCiL,\BfpQFz0YЈx0Fԟ¤Ɇ&ӏ@G&-gVs'sB2ڄfkO">fЖ<柄 NAn;v!qqQ:nq{F⬋hȴ]x9htv><LҠAyLrؘǷMe"NCS FI aАFw#?CpEvԙGs0AG#iPu|*8&ʏN2.5" J{( x!"r#"^hmŸXxQ  .0isJ N0PI'*[b#q~L]ɽU |=T(B(8% +}B@L>')ɉ KK>8:.ו՟.eP[jTmp n eE($2C8G-8 ppb !IDh*Pb4Z@֍}ӄD?1A#!yL-2! LDX@b+7{Ex柳K@XG@"B%!dxmϵ$ E?4[ m%!B`Is-0$D+KB·@`"BaJ"MM""0GC[D4|4a! \5,!pJ[B(GC2D) x+FCQFC $ $b37$Q:/!TB {l[O_{ & 6$_| 򁎕 KÓ-9[ 00P!8¤C٘cO{i 48tmvEBu\dqhwqn'"ΧSi$!ݗJ,;5D38guOf.Kt^ඓAgM:IDvȀDD' m̷ 0 E1LsN3a246y`1?(#PgJԞ'@d(?ȈBÁlFvX ?~m1#\X0PI%J@̩e'*L2=TY )rF0DY>;pB%<7FdmPypd aN&!xxت],ɿG-dgú pmJ:8qK@`. Ad-p @iaC)B%ΎBЃZ1, A!ZMDIZ2bPbd,Ti.dE@8!(GN!Z3)LNBi\<̡Qt+&ݗHϥrE/ 9KNY!}dZ~zYnp]u0u.m>W{gU`zKNң󌮸u9T@CsyYF''K8%Hj@ۅ쐅4  &"OCKNBf'ٜ߯g3BG4k}^4*p>=x`@ 7r6$Dj~ڇ_,1>;z ld >G2e'*QDu܉\q$/J_;tŃ B!{u@UOOE>x' (YB!K&"|# X_u,8!@`"$ۖNԂ +xs@.$P l"Q/ٚ)$[D@/c셼@%! $O!Y@*A%R< !KK@H }!?:C@8UBH@0 y,!dx)!x 8E]@pҔFBŃ,!0$qFȁe ApaI !~1#-gDsDĻ]e\D4"OːE%!""D& hDp/L$b@䤞U6& 5}濎aGBba*A&b- ú(L@xx(=< ʐ|qOe|m:b4mD}π0(83 6 N'OBHN˹'yqhDh09)MHcCP?4BH<_/Q ǧE]*s>n  ( &k~pUO)8/]yLCx&޲P'q^KUǞsv:'[,_'/z:0)Լ-!H>Ļ$M@HS04 LMB"707pxoăZ c>ڳ+dBj-!xP@DxW{ Y@N a LK?:7C% T d-!Hܹ h_&B:ȼ@D(%O$ %]Dx   MP4z1 BoIm7Av//;%D'yZB," vѕK!"1マ;=FDH@@%!T"5A;C@Q ,!L& *S ׯ3h_u. , Ak@m2."!Bz)B@͹}P)lAI X@@<]~)W0q|CPaT2Tf.|=/2TkE9Ǡ| AF!B"r:hBA%ɇ(m!FobHL=uN T}2JA:'nyCAFU'0 nlB~T%2}826 EJ@BiJ0!VFC`bs[ҁSD8Ÿ`B I/!$X(S)!54 (%'0ßIY@D%!xdR4"WZ!!bnZBp!O1h$Ie Zš!$!ă) : naMϰIhwM"-!DćaDBDB}Ŷ딨ڤKPi?CB/h%l /-!W2h7P," s2Kc! DD? Ÿѹ 1eGpQPm| zQw_h M)42`Lb?wƙtDw,1!#b!%MK  mc>tAga01 Ў2y|38/ 7`:Pܗe ^{1mHr}Wֆh_ fSP}W'A=9K9Ahl޸EOJ;Xa(\$@aE&..F΃O yѨQ1*&7|6FK@%yZVN#!Av NB'#!4%֔T>ca(7?+#D(4 !b/bea?~Y2 b=EBfIc'!*90qpT3IL胁ɹȲA`5~uyt_W Y@$D8u l O ) FP ̓ uAVD,r `B 3. $N9 7CDA>B)$^e2,H8 1[Dx ;/h% da| TP NTb&!B$ |K !2'x//IY@| o%D 9&!eSB2JDNe|*d%!ՈoAA!! !$_BB!%~T> xL%!˗/3h_|4,~$ _I.av!$M@0S0e< Oj:. zZp *L3ė `Q~Ahq2_sG&ALQ~!hmz> +/L? -fVsW"N4~8F?HQȐ(!QgҋD9:9cAJD BBGC?ߩ*1oՕ,!\0%t~FF/mIӸ(Jf!|@H.8}IlON| ?0Q I8Ȕ bw[MV@TPfPg {* cksUEЬ"g #C;LܬBIJZ8Bb`H |l6C+j7ԜU'@q4bùpPfEFAt2r&X_R6xa S.AH +$Nq Ҡ`%9zH@8$!\T`O-Tu P՗d>Yz]i&!4 PIP0ɿ_l!X[X";oȰ:6%d/ P9P^>+eC@JK<0%_D@!&$[@09~!! Y6x!FD@g?'Ai*hM_ `! JBdf$ y]BKB$C@(EӜƢb=&S@p ! HBX"˜!a*"$!,a`2 !$D0\bS! d APbg:"̔!!t_P]Y:0TP$,"Xp h$]@2# uow_ Y+T?/bxT~sߑPyPjj0 ,*m3IM'S}:& zCЍF3<4<ǧ( מ zz}/0z1y= ðɃ5\X!U8>(. J} /FKBF4^> s !!σv+v~IZ(+@Y>9hj̤Q\@aP`dN4cojO=&B)Pft5byqA0r-/uP /ʰŔ5B02eǨg1QOxL&ŞhpK@($CQXr!KBu$_H%9"JD> $ ! gDu K º dAظM@xDhxIl? H&!!$^J@lCBGC84xd'aY!&"$, L DB%dda\BN a\BB@0 GHgmN!LBj A%9 !RNט%L !r˶|pw!*-BB8EWW  *MQz-Rzz"|) TJQvUTi=C)Z!~3. DYp_BAF:te8˳"!k@PKBɌ.e¡v&+{\(o&*65'Ba{Ri o'& KȉѯH ;rDsfށ4*C'8 خU׀ xhl 1j) 'l,^Xu`ߞ10|>=p 4z(8zxH,pLJv1NX?h#FA`n4-DInU:vx=C>`n sLِM>xH@(@% n@uB2$LDJBqLe"J`` OHBE, I! TB) D xm i̋wY@(H|x\0DÇJDdNB0GBDf$=PEVS88K"cDĻk}%"$!H@Qs տ!$iJ!/R)W2TմGP.IB`KD#!8S>i )ч}Dq&!6C!(/m=u\J<%x a~x<’ 'oX92BPr!(7>ㇹ`' $& jNbC~%|. # J<D0s0 !@; LP<>5p AO\ؑGC`̤ow1`kR 64ʆ0dD-@"b=&LJpd/\oU E$ l00pzͷ4]  C@| !րPư9?u@%CL}04a(`Xq4b Miaƛp?ј=MV~THٸuϱb6 Z?tŏՐ3Т{y{4ZpZ; M0t4% MLJRPbD2d wùx׺8_p!!M6@/l#TbA&kف ~P'8fU2B 1d(s*;yPW:JU{б l% ^o2MO4y_dw xHeUo; $ dI@8!@r;pk9Aɽؗ˂3P%rᗀK>%AM$aLF< `~RS@%!"B ?B\Blu,IC0Az$%#.OO %%",a\)!)!L9"LB4ͬ$񳜄JB%+9I"p;m5sbyvSH(E%!dD "!!Cz#X(3p7P9%,"8\"3(-0e]BϦ`X0GA d`}!!\"BF!wÛ+XwXto1r6ڡ(s%ɇ1qERq$Yu.4j&5ZZcL. ;柄lJc  \L1*ȹxTf@Ocs0(?,o۔iupF-E( OJ=tK1A*W/~0ld\/b&*oaAcas\@4Zpؔ c=~/"X>HH5[kc9EKM6C&(" S,J?i[hr ̐ \,&$X`?byu_V&+@Y0Pl,B;[D1z-\n+K5D5 BiOrNB9k)#Peb*ToPd!?8o2/LK*Y`瀄KJD) T2!&D:%G` y^ID) H@8%ij-B%!\IDT z㓍61[R= ╎L AQ. Al-"|A˭2kDp GD)GH"_ !"d F@v+(;h7 BBHqKD:)B@D0@[c<[BlvH $dC%!AA|l^h1lm3]ZR! 8. $_LBp" 7ꏄ]WC^;!_Ph$(UbA鎑4h:(s >a?I Nױt2͎\"ƈ>%fYg8#zXN oɶtNq qg8s9;_}\t}bat30`n LO>>lm5 Z/ɔf`>f&7 C"C0RYM&zM#2<ȅN}+ὌN>4Us~тUC>9b%lQH6NML(q8\sF1u񓚘t]aVSO1Z\'>Ƹ䫍UC:P;cf.+< _mkj]/vԙvjL>ǧBa(6v8E_ze)B+mrR6pJBF¯B%U]L|\!da$Q$. aK 2n[;FY:Y&1J{yX  n A%D2&2j8dK1iWB mzlmE% !\7Ix*w(wPpPJP. HW{w/cB,$!L!P ~ӉJ@~-!EJ>-(YB EkAdNBk$* n !!db=T X2 ^KK@(%DNoKDPYD'"opKDX2BLȋBBx!!j#@7g!:I63mgb6X7 :11aI&w2$Ns$lqA֝,:tf&g18șkv8mpbNhJۡaV>k>?r! , a*l8R<4(6 ^/B<^n$2" Jo"@KڈPoJ4~:V4 $t0aҡϊt' ĄdYL摁 1%خ&CO~QeQ L4 Q&fS$>zYaraIs1-ha 6xQf O ɲs1 ypյIGÒ3vQ:|0ZDsOdzO@ǡcP}4>ʍMRCP`H?0OK~zGDP`( Lee~CT"@. |_xܾ :+{"퓇"9fN{b5,!ȇl+$ɇD(C@8%)"0C@""~es& Dnd JC([/~  !"'<'`Ž.\Bce- /NiHD$* #5כb0 ϕKO$H*t)* %SD6GAp!)B% %!"D` ɔ$!xdD'ID$Q+qKܴ̊"!!pZsB! Qy^  vXfRЯd';mԴq?wZnv JrkQ\8oTeQ'#g^ENM(Vު3 AaL \2 JẍL@ ʘU5&BiPx'y'i)SBXzz-? }Xn%&z> +MHXnPS6<$(w@E@fD\U g2d Yn5@pP!$D&/臗 #!l?$ZM2`žpcJ ,\-P /@̛؆BBv$dM< l"[cر 2DJ@n ATB s$&Ⱦ%1yPKAhBH獶=׃$! \DxS<(n3BȇLa zv{1DJB'!S@0T5­[@$S@p !$``PJ!DDfGD$/MhBBBTuz,L!'@p,'FDy32vF(#v3F DYr#W8#V#VTi0Va B![ش)lD G$Cّ}Kq)P}B*Ԕ$DǠɬb6 AA"bI4t_GD„^Ӂ|lSYAw'Ke$O8]|NI]z>n0/?kc9I`ϧ4pA @QrztaV$@yq)hI7$ԞvO>'ӠT(B9ppO7!&/|0P5cԞvhL2!*8GYЇK|1 6C"V.I–Dcbmy\ଗ͘IދP`u`X$<4!zdiaܢI"w ') dce.)9,aڲPInAs2B`PK'\  !PI. )e!,"Tp *A$aK@8$PBGB0=B"KWHB` "Z) $ p Z@l1\kQl$%"T o Mmr vmD$" 7l SD Ȼ]nDǯe/PY_?)P ! QӖA|]]_x.NIօH SR5 _/JQ(-Li¹0%tMq\’+S>PYBīPqa4&OҠ43ԟv>~8 MgDD hy/8dDE$$NAg:2>-h1:iI ~4_pͷc+:b۞>vXx(:.9cp:bB3d6,oD;ŤL:X@`oierHN J4$i"EcFY@!x(|<'>}:ugZN@ cPqQ(;. JN#S~>rL<-Z  ,'BFtc_! L8BH`hK,S8\I!AՑ$K@I}1T*I1B~aM !~ 5" r:D s%x{$ dѐy@QT Uׅ[D(C(P `a `2"B-"įdyh$IPJ_d:dvKB"dMB(DC<8 EB0!6 !"h$@\@%) $Tp P IDa9o/!B@%CD1/T"s""W x  Cжv PN )""mSBH%. .tN0 $"(cK@P$ n:tT8 G@YLʍ> Ƥ@ű)Pe\*T 5&A-ifsCˈj.FKDd|2πqzb2#a1 vZ 4c5ǠOaڜmOBy\DithЖ>DЂd\-ٟkјIvcFdS`69]4/Qo7uU^Am_1*1ۘԚ~ jN? էSN@ǡcPvQ(=Eh2?70 /toї4&K~)$`l(eY-J*AŃ &YN9AQ@F$`B*Y%P=+Aj$f39z'xц {YZ6Ei_!BA5 8| $!dBBw xnP$ y'CI6~yM_hE8x1)&repY6PQ \'J}@ cI IK&ĂL@H%13v&VxA D!iB."}@)B;qԳڣxs~aׁ8dIL)!T;'#&.<Pxp%"Lɀr <^w =oG@hIFP-%.,!DS@6m1jA%t#FJȣ HB17S@ @2& "B26a Y@xGZBXLe!¾&, D_ a @uI@ A"xFB0&@d%zdDE'IHebӝlo}!!T!pI״FC)v !Y"cJB%!hkHR$! X, PB 6 b]@˔"c+(=2oaXd[D6DiPmBȈړeb{A՝׷סu*dj>٩5)-ɠ}T¨>Q:x꓎pD)GPs _ܰnkN= %5­&Ր-HTd4bYIv* 9UL(;M*Q"oJ ƇF)2M%cG>(4CS!ÐľIǛ }xxK>4QСv,S!lC #@cDt&&  {l۔UsMX?\{AaE͑$D$)!H>$3^^`'C@]׳ 'J&^$8xy$0} ]BR!T 9c`4xXw !CD)dL~- .!4 n9DK@< !FDr! d S߸_ŠHKy[>q!$]h{$DbsEBaIh2 cB@QA谕&$!f} EAx& avďݒ*AT*EMBdhCD`9aS2\B&n a@% T`]yHJAȲd%|8%%"R1:#ƤBűP <.DUc cTwX(C9`H=l2粭D1f$ZB,q/#o )ܸ4`<-rx΄=&HL c\z {?kc;FhL)*QdH!)"=&[?y#4FސTxwp _¤!wC+ ^g!bmL,0lPI>Ч=ɡ7J! &ؤAzJK}H_r@-xԸγ%V ~uV{ &B-":zI `b܃RLzR}< eIDa !Ds}wI@)"<%D)|3{p#!6. hf0bN}t#wuaIZDxVSDئf`Lx-T)$ۗE!#T!HB"B=b'+$c4DP@[DxJ$D sABы$ׯbB1 ĺxL. RңR-0&0oJD;I'ApO /]\ U _(Y,s2Vak &+J" * 2,5"cK~\␃Uث`WL2G 7wXϛ<@9=kBunUq'Y9W^C(ڛ/瞶w`Eu^0TTL]V# ߣYe/gsƂ`|/f}}3o%{T\T[M jvٙ8fG-~m&"jOx/rYPZ*"/GV=WM"ؑbΎs6fo,g[6昜>2`.D&.0{!..cBq  =XDueq˹hc>7K=Xb9qbKVaࠄT@h#Q$:N2;w([~sl>X@# R2l"rh1p.<[" EeZL,L_!%=̞-</hYޯ|R Fm_45.! T6ZdCKFh4Fh46D@!hB|Fh4Fh4O5" ԯ#|!!d".Fh4Fh4'xHB DlJFh4Fh4'[& :<) >h4Fh4F U2\b N s}}ľCg>Y(4h[? l׋:b?q_^>=Lle!g߲A{̭~;,71=rV.|W1y4Fф_u.!bB@mN`9ԧ/ k;ꬥ@ l煊:˝?@˟ "P)k)9-?2b_~9u>gYώ>ϊG<'P;㼙r;|Az.kOc^8_y}XIk=̢F8˼CVsZcr[ϚUNPF_/5ŵ#AKqv{>sHܧ XYǣ\yo[Qh4Z@lU)$ ApvƝ 2b`}a_lfkt}dF(R9IXܟTOk2uϵXfڒk{Qv<,69}}_T}xqkY=~s| :'g1x{g p^WQf߫轎y13)sgߜ  U[T蘱ON6*\y}^O]~俛iwlQWDͺc]691l'Z;BG{+(6j4Fy+ PFbq ,zEӨ@~}qp|iqn(x\_V)ygSgKNj+3k1cRqO7Q7pɮꯈאc}+6)S{5s(?N (5BFՆo^:>z|2^vW_=10?^̱&R5uqכ=}gH߈ [,}xGkyUξ|h4+6O aȇr,9@Ձʥ@0V7+x\Sv,T*;KYlkZk{>XK1s=9:)7՝<<_>Oz̠hC/P s32 AoJ@m- o7~<뫌3HLHכ] |5=;&K8&~nG׍ʚs>y^O`}v>X^fpWQ蛫cv5Fd'! Nu_ V*wa_3K<^ {Gu~q>?ϟ-_16 *stm*p_  vXDl|)}I^^|kX}r۽ܲ9E)O}„e^g̠jqͳ^VQ=GGmwc~Tfk2ka"בb7d.%vĽ?Y!b]_c^'Eq}uh4FC@b"&S>$}GN+;_jX:/Tm-@ؔnRXlf~>\e[q`l|U^g =޶?׬_>,AH(Wf\b1{"g7)~~v|֩ oDd_|H}^4*컠XcNf`Eo쏽ρ3@Npoe޺FFh4 AUgxK@l{TAK`7bFh4Fh4O~=S@0 !ʍ? kgFh4Fh4X"&!,QmӾO"b^Fh4Fh4OLa|Z]@xIJ +4L= G.j4Fh4Fr:~^ J|yXS@J!& ɇ){n=;Ni4Fh4F3?tɈ$Ds6 01 )NB9 @AiFvX1L_&-<FO_ Q{Bͣ Q? *Mٛt^R x]@m !!h:S@д =AU菮\cFQ _}xK{;bb'< /ߢ ϛFC(lP!% E(MDNAQu2)[Az T8 |s~,I)k~ḍx?5U &yT{_&tMЏ#>ocV~KsOF|U}e~Ez\^R[fSUsjŕ '7oH߰+2nM88cY< jXBL@8րp &ee*Sg-y D8mؽs/!Hm0hR5jܩdQe_œ_)`s0h`:sw; ;) Ē`t={ ƎI!aqеhv4jFy ?w$BMfv3^a&0:1æ=)YaXظmDmw&+#_Oͻ`۞y08']^I޺/%͒U|3f,ejۋPamPkMu_T?LGv}H>,0}=sƬCW݆~nAυ7ܟݖsaǺn l\2Ya]a`r*u$J!ɣ%B>J(5!bc'$l`dC+W_.z:ZMe]B=A._Bv W}\n@cPg>g syn|5Ɩ1jC rIg,]@XF@% (܍?~_:;/>$ !2z?] Kô[a-0efe&ݦ%\:z'-bq2$v2'Mq.T [P|.}u[uAݸ+N_aqjXjI ?|8w+$ "uۓaC&f𱳐r"CÔm7${UBflfD `XX?w$!d}5Fi_Bqטx(~ >*╚Q=Wcszxeϕq6fv\mCQ,L@8/ sL^. ?]]:j#/m}?[?$ p=WPټ}7^2yr#`ԁbM"޽p}wwCk6^-j| Dw /~ 7ϵR7qζtac Bbk&Jd#'cPʇ5@"&FͲ- s7u<X߷ _{}ݺ,9 S{0M@~:~L , d٠e HM6 Q|(-D ?n&!HK|}׿u>t\yϿ 闾Ͷ>#U._E`&ժvy+o>C 8p~:U;)b0fBؗpbrWI{XqS|'ARi6E$uw1`$ H>4ҁ;t$bk4bꍾGwIiWA#,(4=]3-gÂk`ǾC6l1f,]DĸsXBbV6:qüj޴yMMVnKg`КLBT-8~ `=0>hIL@$OÖ}GaFA}F @N\B_/f=7&MrrɰpYՙ?]lч/ h F6 a kDe&fH~<>Şp,_IlWh7o߇-|~HP. 7>_L>> igW7oʇWg8ZI(bϙ1|89<_|n}*WlKk?݆&xPrT<4\^"Tk&BE'Vбe@߲%}4aӎv.;f+lfIq`e{1@.hÁ#LJ4‚,*QvG e҃tis㽲AggS#o=`;7;ͷ-QD_ Nc4¼ūa6LUx\F@T] jtM{b ~ᅴUǔH;| TS½Ão|= kDÕ+Wh(\\jO@ Hy(@мy^; vE]ЏmXWgO#Mbu~w1y4ݻQak,lB&LX F-#§C#]jKQ_5G;8!!$|,/# OJ^~ ] :4m÷_ED[ F@S6I욂bk v ߇ Bľ\&WχYfO:] yWOq"\SK! }-8w&|,>, ?^mʇ06 5!t X0m̝icz']bDxċ_@ÏA 9N-waV|6}Y իEBV;bP*(S[zѺ(Ӥ n=/ڮ@>ʸ/€~ [iĽ{,@ɵhKL6ILSBJS#.Z3-{DmR{s`ע~oG $˜`%l~v&p4]So=dH}<2Z&2鋀D/m;e$D.3O:Y@&w㋫#L!'k?f!w௭ m:]Ӟ(F@CƋ/bdeH$ Z^?UnNhqd9*)ؽ7F7 ({ӽH&KU91{`6"hؾ};T^ * 3' e[|p8tMEÌ}zcS:0!qcH# C?Ӑ|H~loncgn܇E Ph{2tVmM Ocv ><'cĊ7hc>ךcy[[2Wb?7o݇{C-~SN^o̅*~'x+ ű6iK# 5&!h4ylɇ;Qw6ioFЄ^LBؘ΁ kB"U`4}Yuie*d'\}? @ߙˇpy}pT>V CȺ?iFo2+ /`.zG#_|}J}|HJ%0Cso̱ǻL|Q^? 8~gw!hpd6"@Xl<paXv/n'Aڊ:0vD 3<y u`vA NҚ4F>pjeNP%3u1X&tz;&>IǾUcؚ4WR(Q|-A?NV8 =|u]NC^P#( V Mp!h!GJ'}n ` 3COe#,h6ŔˠjK==M0j [cc1Pnڦk08n}#C}0l`B#`@sPF@{^Øǡ|f߲ɇC]SNZL% 1ɲ\ULjPm86/zh~}XU}T»Í{DK9Fc9qܾ:ِ̛5wgm۶l|boֶ/pb`0Θg\ Y{ 1ѾmD߶c\586gCHKf{]&1A{pI`{\=kɇ;3™gavpe*f]2 hM,,SUg&M(, >SCȏ/m ü/Qm.h5L>lke~4VEvՆXDi{\I@p S0"V$MM%J7|}HB~Vj, | ϾiggӆgZº nX.k؊ps{q8-ܢ*ٴW٦`3q@tE``٢$о])*U[J@k>\uv?F{ê1bFlPV*9  Q%Uf3h7PgY(d>m6vUB1[ AdABIH$ 1FHT ZH $ ,i(?|a/-vI/#+H| "GXKp/ ߄s]ET< &ZCoд$ARDR_PCB"y'zϱ$l'[IBh`"[_ʒ| rRbKf(imT3X,m!P19<"qH\$(BMfߗrbژp3sm̟= lek>4hWH "Jcz] ~<^N@~zo]׆6UB%`ͻp߁ ߂oWG]a~[s ߺ~{BSnX` v߇W:^6\^ߡr `޳^SSedA# 4bzbkn]a ᩳ iSz 0/޼Oo *WnAg7`-k3_~ TDLr80v 1c\# .@^[mO# {hbp}o>6ՠ8|pEvSI>|ɇ#?g7?=H> _Ӣ1_vpO`EP1i |wr\kf^\ |]گ='a waꔟG]lh>jۏˇTP|z4Jaؘ)Lll{AFAIw懷Aעkls%$h AbIL!D0tyBOc[b4M &!B}?,iOLp B`+g]L=$HPA1;$TG9k!SR 8)ԄW[gQD;Ц 0qdwe{djDag!=2yS1}v}[8 ېxpg, Tl|b__KnҾ̉C?ѢFVs ?xpa\ D Ŗ ;^weļ{w-6zw_d2|&/G1{AѐT,ļ_(װΔ(.'4AiC:'/ހ;j@A| :Mݭw[aUfY@;N YBd ^?l$rTJ&=3>CmҢE/iETstxGHa~x އ8p% :[~Z]- >٪lOGc0?`ğ3op4&羆݆AɊL>*lK~ gX&&ej`К|Â#~v o; KbcaPqX ,Ny^(PL # HLPrL[PI̖G!ju UAU v{1`V26aLlPj3TT$&bm$M"sWA״'&΄WypJWJZL0eKvx]IU}IvmS_G8/>  p>3&Wnn+߯WcCr1AN5>0L uC?#76CmXq&lπM8wq t|{2݁#nAMT N Rk_;QIYMG@׾˶uñ |rvޟzm mެ 9kE+fAJTF>Zw ~\#|3XPD˖S@g_HKnùoKބF>Æ 7B>/nТ }:qR p0fAra>ptW^<lG69P ~QoZ|>e86``뗠~ʶt~NTL A^ԅoC _EPBW8 lK~js1CmaI&KIr[5kC2`0vA:5EK:'ThaHZiICK+jW@+NqLV|1 z]zoIu tK@ zM-rpؾ;@;r$ R> !fyͧ!rq(L^ #!GU Fm!yBIî9?a0m?>ۥ?2rbj~@~7r{E#3!Omɴk ? oBekM9vl K7|< P< E˴ma[xX:}P i=4D]PJߐq!ؔ?Gb^b' aź]7U6ų>=l(ב{zMdDaA>~QWJ!kMu_T!ck8:6 =FaAK=s{j|6o^A@>2y ĺ]i0m Bj!~fn0X2-O΋7pWm p U@8iQLퟠݬǘ| jKNπs_#zñlܖa{9ذ?} "_kȇ$;6k+5I?cH;.– ဝêҫȇYbBTdkʂ , S@Eh"~oA*,c "6Q{da\bwBzTh4#&/f_4}\]y }5`G,h~<7fOH<=hm6 B

    Ah4Fh4! $넀! lk@NCM( *X|[s_:ֱucX:ֱucX6 D{% JMJ!Dm X:ֱucX:ֱuc_ޯ^bBHb}-BYl1!:ֱucX:ֱuc;a]! )&pNN3cX:ֱucX:ֱ;;Ő3I@ PR!N3cX:ֱucX:ֱ;M@H%'R 7QX:ֱucX:ֱuc9n# jÆ#ס3P! %p!]@u<$> zOP~tcX:ֱucI’v a! DcNӱ~j4Oc(?:ֱucX:ֱu$n%} C@|(nl}|<>:ֱucX:ֱu$L@^ZK%&CgL@k@X n_hHTX:ֱucX:~㿼__@\# k@Ne:%污{.TA:ֱucX:ֱ -A# dt]A1逛,ԁ0:#S2 ㎪hț<~~sQ F&&`Aڗc/Ech1A:ֱucX:ֱbCBXS0S0^Sp 9GzAްZ#Ƅ=7;:&^fɮv?5`Aڗ@_<3,}*cr]cX:ֱucXOrl -! kw׀8'&" Ls412KvfQ4pBT8cOecX:ֱucXOrl =P̏,C/?L; u(qΡݹ/Ǽ]szDQ<GmnuMռq.,1FomF@@e*/~XyTX:ֱucX:~|@.Q !,d oID¸wd{(I'DU$C=}Oárطrڐ1Ꙉ:TNb+}5SW!<ɏ9=͒Ҿay#P}tcX:ֱucII@$A#!LbY, JXR7oDxL`q!ݾ*V,)ƅ kpU^/~ HzOcy!ā U}'zڴOecX:ֱucXOr,F@! XBPL Fk@(3"}`Dxvv{]N~iW:-Ρm2A:ֱucX:ֱXM \@$q$̟,` -iJDK -ٖl9GX/9q9۾*SNm( cz%i⬧K("htLyбucX:ֱu'92Qb9c9,m54VBƓhK1g-h~~11=`8o Hށ=$bx!m4oQה .O*̢:ֱucX:ֱu$B@%`H8! VLFnlL bUbF  GyбucX:ֱu'9&A?) Z(R3!#! Ub< >:ֱucX:ֱu$E($% >ZP|JCH>% Ci4OσucX:ֱuc?ɱ% $4|7 LD#FD:ֱucX:ֱu$$ V^"4A5 ցu(< vfcl*1hTX:ֱucX:~c! b} Pdr0Mt3I@yбucX:ֱu'96D^6 (osJ. C>fS02a3lBeQ\Sx'YX$­!khh<{.Oe$'~F@"g9ar<lKwޅw0H6ǃի\ b)ے E@4nܺ׾݆nBÕ5NTX:ֱucX:~c& p!Kg BM@$!S"(ے3۷͛?rq<<}߸ʒ0 rne{Pt(l x<7  TO+k~>:ֱucX:ֱu$BL`51|(09ƜC hDIAu'͞lKn7য়~~lw72Ǡ_L>We{PL͕_?σucX:ֱuc?ɱp!$) L@L@C) C h<t-?# _-/f|kv_E222N;εupe& H88&Ο'NȾCgj~]>:ֱucX:ֱu$b F>{@}s zPpS>P%f1#YAuu\GvݯÝkKY* >[={kBΝ T.X=1P%f\@_b{2x ~F@vm#c0N zOORMfA@zcp3c,<;$Kg7.݌jwϦ]Шz|svjlKAyбucX:ֱu'9&eBB♏2Ƈ \@# O35 ,ƒ Wd|2Eʙ2- 5il+?ݼ_víp`qwx`"q_AfaL. dzaBOcX:ֱucXOrK~= >S@bC@ I@ + ͆հU̸ s|pۘQɇ?`3' DZkM>B-t(Xc02v٠q>\\\v k׮ek@д {N]סsdR=lO@yбucX:ֱu'9S0.1{!_Y@S0H@j. 3e:TgD{/;, a3t{?݁Ϯ2'ç*y蚻ӡ|)PPH@-4Iz1ZX'| P^5X; YK_1σucX:ֱuc?ɱM@HB) ddc i t3/LXF |=k1؝r$~O kML@#qɧJy*9|iMUiTX:ֱucX:~c5CH@ɜeYX  Ȁ6VwtH;uNd@ 8y-]yN&Cj@wbjzA:ֱucX:ֱXp h& .2^C=lɀIgxI"uGCC!~>Bxs.AhRhRصGyбucX:ֱu'9"o6 XStMvC>d)  wl af'TF$:ֱucX:ֱu$=@>AC@! |C^I@xUb< >:ֱucX:ֱu$B@cMBDğ,ES0d DJ4'A:ֱucX:ֱ }D}S@$ Dcd6>>TX:ֱucX:~c! tm# !K pЏ'#0>? n߾͸/7,eԷaQ16W&icX:ֱucXAH޲01!Drm0&aϷnn]lD֯`;1P@ x %aP@)ڙhkN`';k5@?8g&wfbeZY}cRc҈oys#Nt⁠Qo1D~~!ed\~*h\5>0öcMaM`MV99lĶzƹ0|:ϊyu6iFVcX:ֱucXǪ8WA6Wz?9<Yb1{$"v S@?F?LpP^@qC _X>g7$Vƹ}dFq0c'pק,燵MVcX:ֱucXǮ8?睒MYQ)݂ˈBȈr42BLHGsq= 33) LG(&ddαajX7NYRO4 QX#XpepdddٳgLD=<D9glD@<*"vCGʺ"sT <;xZ&/[^:ֱucX:ֱW߫օ )A" }vAS0l)ц @;^#, w֯b'% b`l(Z` 4w 5*47 `S(- ۵iGu ִ |(u=hZY|7K~X}}Arr2$&&B||<ōjaoBUqpA roAc:Ûa`ynu>Ϊo2yh;Lr毩cX:ֱucX-/ ՅWVa⁦a[)|4X#׹&owBHs)?Bީ=1i:Byq&@79w`I%KN 1еDo<ֈvƲs]MO=![-'ڎ ld" gg}z8c#9RL}S5uE=k;FEGk:bɇ >s$66muZ8#ű[A͏ZB-ZfPnSFUܯV9T*Un&P*jĨXWc`]:>)0נcհիZTVJVEՀKTw yo|Ͽ}o37h4Fh4$#r]^Wr~X Q/Ti *X9<4By NC;c hEРy,4석W؈ccA[c ;ɱ9?WM4U+1JvmΑck͋_G}ET;9oæ^i4>c,V\ [FZ{5>qG;w߆/| ߂kX*ހ/ApK Sw7?sq}|=ǻw7W?…/K_C󐘖OCa_QĥrHe"9b'a79ۃ/)9{b#؝hi bv숇8ذv;X5V倒5N67&5QN7U9JTuKBA's ٍfؐXTߵ_4sV,\Ug [k⻁m"w wxĂwic~7/(~߽<Ϝټ*:?}  Ii@1MXqaҌyz c,/49mJ>RNf C{YQ=w{7A@HV̈A09`FEɌEs"D! oUW>sf9y3tz?ᶻ_)_{{dO͎C-1.=*+l1{@ >c% O}oK:(ӗ([# :u_@;!=՘rشi|#8u /:ol +/ڰ ߊ ~l/W+jTU0oM-_K,_y?ܧKjŵwo6‡ߪ'"So&M0oX~XVf6v;|qh_Cx.<.b.xxE0~'G W(\ 2>|88ЭN+O8['MK%̇ {|7ݣM;<B%ns^_u~k­Oq%^X6XyMtvض N;}iW>tp Ig2qq?^ t=cO'j8׵:=봫$:}2Z].u kgtOUMNW*476j4}OLto}:"ʹ0yi7F|vg{tsrX.nb}θho>x$V}Yhz?}GyEzcS5p}/1=]s00ppGE \{5>S Cw>;j@Dx2T{!PB3F!!00‡x !-x0>FpR/ Nqǝ1P\ y7@Bpt:·ODgn@%V}AYĢ}p!)6{֙]d}o;^BH "| YsiNXW`g7׾} '}<~ Bh{LAD94B MR~!n`*? !:^GtB 8̫qbk BSŽ !:{&B BP[@߳@'B2/A (pH*>460I@ཱDPLI BaoG^;*q<|CFzA`izK} u !/})y-{8ޥz @\ґğS>^|rzKgw/[^^>܂bc5('M Lgv"_#V ^)Ö-Rxja/F ^4~^&JU?ra,⻍1]`EP^e֭-ڻVxX/kvUb}W /޴ Խ ^dL5y=o+0pC'eCFKnŃ>pt?]/\x=41 C8g$۠8b< ˞D(C^qBproe'Ȟ@{@qq(.WI!!D+NWq&n m!tAՉ} >)p@TuRB{Qv֛]}oL>>@ i \.4ȭ}4;tI4O10 &: *O ?ĵk>ǁG.@AA@!ToeO{B n^=M". Gj8DCUqZDDaB>6B D\V?=!q 1G`'[ lo0P" [0>~/\P  K?[[B_(ݢCϬ}֮]+_o^jEp^?8}=2׈4 iFpT`>u hhM]kn g# XZ w킵+kwNj7ì/Ws3/}Lxnt wteKo|0nW00Np<@MPy 2[o Y쭿XM֛]}o)Ci!Db,c_@d/tv|MQi[jv6@} !2D I B=p!ZL3ͽyB#"DSq "g:]GD62¾^,Dc >.t |pe "_ tu2kz>G i (v(_h9ľ;^m:a Nj1GZq<BxG @HA*6iVy ~@AWm"%7!F ?5mAIcoVaFZq)0m  X.-ڀ,ExMV-DW a||`-bg0z;pS/­&?C~n~nmguI>qfcfx0aRK<`+5p<> ɐ Ū8i#|0F ⪝<p= нt .~zC܈ 8HQI qC!@X &1_ YC4@|0 "@P pۃiu}#@}3^oݚ{:<|3*D\<^i@` RhqR8@?@đVyM|rΜ9@k97_koz>qyq)GaFԥ۲u6&ڎ}N*e.$Nx]0oNqρQϼw=> nd2s0ާa,ߔC}klNs;OIK r܂@Q{J"8G4q#!O!ww3tR"I\-(x0! x0c?/{?3zr #aDk}xC:qZcLȾef}W-p{A!|Ё}@!}\.{0nu/fg@}ߟOolc ha@@B4 ò^M08-D N'Bc} 0B aC4@BDA esB0A?iQ 9@Btz@P]z_@  6<{8%Ӡّ`6`]$HX!x݂68FhRhyr{FpId~z7}@V l e$g:n`[xxdGܯ|}>#'Vp;TnyB@=" ?kk >.HxA=!I),u?k,q `ӰO{}P.Nˡs#" BQÁ))'{-!? 04Jci0S`~A( }ABq+WJg|]W60 !pzޗA3>G_ m;A)@ŘD!8qÁ =|Q3PѬ )?>;@n3 }hZW!L4ˠ0@4 o -_-ɯ|' ?<8!4rd['fr5C,ߞ·F˞ػAĠ۟GH5^CRk xR-!H98ruu `  |あi| 8 {?87b Œ-ovfܘ(x0I1Tuuy?D>a|0 h?[9̀##fGG=F**B+o]b]X녗o Wϖl9_W_S^&<:~&<4E)pcG't5Fڏ>m$_ϣ'J[BzB`ؓ{I,! 1IXDžf. B{a/~#߆Y\\@R| 8q |H $|P0@I" G0FF\I6PAB \cطJM.}BH/ !  ĥ>`n}5;?ǁw}r_L00)8^ PeM9Bhic"@q8NI ?^)apLBȞ>0E 1 ! w -g況 (Ppq3'C @|}ޭzA)1 춇_!g>~c?>~atE"AK n6 x0^3-}m)J]}w)MDVOO<BZc'`}A+5 rj_@8}hw) mD aDPL #€ !Ї<L N DP |!lVP􀠯ጃ.o%|>)0B Lo D( G1B[`i4=%7#Ĥ/j 0T撎Զڷ-ӏ3a2o7V_'5J?Q  9 DZ'H-Z-+@ۙR#D0_^[p} v7-xW| p@E8p}^`qIB{w<b"܊LjЏb@7kCG>? cԏa^u}E/ ]/Y\PqQqa<Esx A%|y^ ׈ 3ǜq5 (883|Btq3ob "C  Z,Kbca`U?n~yٌؾv?]}o)B H:tQN ?}ϩ > ϻY`Lv!ڡ+^Jx6e1͆!4!]Lw!{FOG2𵝦'%҇w@q,ۼ6\A ƼdGŽO}]`h[Cs;{0cAcߛ,}_n>->ڌTh} A(>hvȃ/:DӪ4!i,67@= n6!c=잧 ^{ [?#8Dg=DF]z&4T != $=$K:K ֿnX>`C~~܃g# B!&}{@)p:)?b WB=B'^DXg; @~7Y(>o?ٶ 6u[.buH}t%yVNKT!½wM}V70 )fz煄y?SoPa_3gg¹knyQ=ăp\u|=PKo.:VqË!vtC.@.|c>nLn7Btdƛ}Scn@ą <z h_;"(e}[D@!]>ž`.MźnLiv~ о}BpDB^!@06H@G@)"# B|CHJ q|z!j K"FȐBD $3Ơ4~F`\AJAD=o޼6Aգ BBd{1c@(TǀMoOV@bq#_0|pO[ֽ ;V= ?3B8&̃Fsȫ0pJ_.{G`IIz`PUuh}7<<5a_]. Bm->1ǺSk1#,4mϠ mBȞ"7|CA|>zjA!!(0""40BM=ژ@`(piBP@vC.ӷr>"BwuBDH Jm {7`b;UX&zA, }Ee&^~ek`=Sk7U/HgXqO,{ `;w[ѽGamC&w?%/c2). U,M=EhCR 9#g#`z@ ,0 P@al <Lv1;<'ڻh $BY`}].{ჱHk_3 tb_@YzB{jL4I (0o8M"(N@'58M=e@ġq`}gi . PAYM3um&ǀ8*:G0g ⌀ǀBy#t| 5fj+7p0v BwyJDc@XأI58^;m>z _<^i  < Z?d 2xZS U>tܹNy`[a'd]|{j`XFq tv_SeA?!/u(7m,.V0*+U7I:*o@lD%(@>A@h @oV= >[|^}A(1 VW7z4\Ъ_v/֏YPG.vг!xh/ ǂн3u0Tq#Q? Ç_{~3[G#ˆ[0 CD{^r<ڽ p$. &Kd͍ N0HEgd/DzEgؾ,@#\Z{1 b_3 rj_0@8ߏh>s! \0@PA|쒦:NtsDh H !88&H>!{BY)H"DȴB2M !dZ'A=&r rAl`h5e20A 6P5_ i 7qpU9@c@ Kc@ 0cڌ~@ @|"T蒎,K.uql9X3,~XXt' l|lz8*tƌqܒ"`^®_)Weͻ]={h@H #rPvHFPV?qPA|N~f^~oWQ3{[0A(gEڱ dnj-+%C3QnΫ w=R.> Zh&.~Wr>4A[@1^!w cE]\8\=Q0aqb%{༁w}.z`$d/E4|B?vNyZ q1 c Ծ*?*e;_)o0PG/:o0"cA  }Sxpy g\^[4 NEj-E (*ȈFF)Aჶ,nhO dclBٜ1}!M3| MEjmluI> &$A@h[yE:b+gySF[ ގq/:1!;cWNL8ɽSkv Bs<¥5t2t6H#px{^,# g`+A64yCr!si8cq'4ϸ !:ypfqOzT`[=AUP@@ i GL^Rp~6rsn7փ᠑ĎBb@ BٞDv:F@g¾A(GѮIehc<߹ƾxB*dॱ@;d] V1-i >}ƾ|!ιDZFhL 7_i[A8Dȴ'F=vq/r4}!!#@UBq!b@B/@З A ^8Ӵ\s7 )83KnG> cB\o g=kG>j@~6`/IcIGZဓoI*33b ,|+ƫ-VίGOæ†w%Ά gZg &Է5Ə,lZ᥵`mϗKė“^̀<H(H6= &+Zhp}}/ݴ[&m>gI?v0D,o~J\W0\:A%Hmx .lx c?``B 7Gx37"h#@!+2p!*dq4XB{A}[@֫(-WvepKQkBB+_NYWVÝ`7ivSA2д\"B]a "bFPqaB``J|;L!ġbh^ѩ ?=ɦ7"D 2 LO@SqUw{SzA)ѕ WSdk,G;MsLjX‡9*| ga' ]: λVO+ Jm ?os(Xb9<2t4?~3,X4K΀ϧt;Ϝ9^}UW|  q7g>j 9\1ov0e0y0a\x|k'ݏO;$!50p0CG`zT*җt_G#x.nk c v-O5#c?\c?hw]dȺ_8yC8 xA(@Pq& ))%/hhc; hw.r n)0vD,!|Ё}P!.#gDn/fgwa4q c@N+Mz,m`IӞD@BH Aǰ" D!G2D T` ¤-cBD=Ny~LZ֑vMGOON]Cc=x1_=].1 "a#@taW>Yow}w*$Q ͋;uuLZkDl_ .d)y=xxppcS'x"yH8I9!b-i#!a`WzEn9VxVc ~p?\ .>0^>z!D xA8<P(vo͑ƛyPAǂBBxA@cY i_ X-Rߘ !(0@A^.{Dkl˅/fgs{>`7͵ !| "xGS؀FaL(@y_)0 0 =q qgG2+:2ĽyB ="Gx 66uc>$75` t3Œ[!?xt<Iƀ7&h G#R]qLe 4% Z [Տ? ?<nyp|x,ؐ;P;džytag| Oھ]6m%pl^3qx36vŃ敛Wܮ.WnqTe t)q3dlǁA D{Ap( D! 貋Ӿ+[]'A D/ЁZu/Xp<}5;}оڷ4@sA/z:[ B€ a ڌ S"@G2$Џcc VW{CBnoD!@@aJm@oV .A׾)sA b "\Qrc@M7`_mg 3xtBlD`  c{ iS& Ez7§ow^/Lxxt[p50gᦻ:_+~/}F@]h=pģQ`<`#c;!l(ytzuܭz=\iz=3 ]/ĉ8WnVaχda|yz5=58||[,nb|8d c|m{q&7;憆޼ЛFǝ`/"߷`nє,_v}epKQVxLk<x>9A\$t{Ea g/P0<&{>zncgѾ\w۴_ǾOq">XUUu$HijNORnub߈Myd1] WuCk:cqrN.e~9*qO5P_ d5JtI&NܷuNqo'-ჶ#f<XMsmta@ie M^\>ڂNM;MvMBuWrϸ_9՜#@z_@C}xڻ%:D -!ǀhġ6b]Z */ kSP޴iA,g--0P3xzƇ3';> 堎.A?WS0|Ңk}e$XA}#plX p{]pUwA&Ž. z\r )N:+^NvUdI <ӆxa436x7@ `PAUzB,[! e}[J>¸

    di]Z)vB]f}p}yn>:Pm? C~h=:eWF6m>'pCKL>׏=V{Mnʞa|m+?I_ ^ߴWgd  <m]{ Y k+6%5aʔ)y2d! #uۡ0C~QsiJH:pRZLn\*0moWT8ueS5EEeeP^˲d '4ES|vbfZkFQoN~d 8N}*.~X#=8Tx{e r̠ضmΓx+84[|9\pBdeU3QKZ#5v34\i2U)?|#F=gSk='|,4stc##iǕx2=lܸfyB 0l~BxotA8z ,ޘ7DkSmq woc%S&fĸ>$|MEAȔiV."\FL!X4n\{78РKy5!2iu\^5+ w P7iϧP{vu׮z)/@SS@AY?ݳ?e? fm!Yd"KXʫػwK,x͑OfO ) wߝ('LNQUU^= &ׯcx dn}ffۓnmg>n*O%VWkvrܭ0| 'J&M7q>b07M-|,R%y{$-&\uU- $eyL 2XauҗV)hϒ%+((g ( "32L\@ϙc} Ah e0ѷo_ uqqOؽǡ^744| "ud: TTV:4Xk͕W<bRPPЫG꒒bx:بvh4z0NֵA ۷o?C C Gk׮ ۢfܹSoذ_fVh˾>`z 1"J)zͣ>W"٩"2c.ՎKy.ز+@Ń ꫯVH&2|5רs9UV"YCF`D+Gxmk:w_ѨJ=}vm4Q֚d:5M~ )a'1`Ú567OnaRM={RPPeO.PΝ;a'L'S9dp"0ߟU`0HII @!@ݎڷk'|yeJKK|)P( $*"ÿ߼)SĻtرwgy&m$+ѶmN?t.':׿,CiWV ԡ@ @.]8H@81V$HhiAϞWpJ|0xdba|} ng],"!vJ3eJܓǁ1c"0S'JZk !G B:~kzuپI5P SnSapB!iPm=xFΎ93ʨ᰻pXV R:YAK<n d*f4m'^,˕ Rށ~ ~#2=`uS_oSZhٱKA}&R@aI B|t 5-qɰg͊cI(Og۰uMϞ*6uAPQS@ R$ #H@dQ꒶Rjk%Ҳߗbo]=ɌLgI2Aktr)b!O% Hd^T9sϭ'Kwp^qZwoOqC˜aŽRbOve'Yh l Hzd2ň%q,P,M}T< iUۦk$79i;tEmnB LŒulq?=I#.zR[ 9DjE4|qlK]*Ҭw[&an HX $^?,wd~1Ud|K )#ӕW|&&#&4Zyp]$U/g*$Ifzcɕi W$c"n9Je_.Σ-ۄh-wk["fNp)R~֚tZ&RSST:ߜ0 (((Ix4OA&j Uj\l-DH$Za!z3ψ#I`!@`Y‰a6< =\¯LnݤE4PVVƲe^)cSOI# B,Cܜƒ0h +iѽҮ9J(駟Nx͟`0km&,Aӽ"?XnxlO IDATؽ{Qv ;vؔk+c̹MS{a5R]]M~~D,U^]t4ǁ?3뮻I ˄:2fƌb-R;W֭[% xfGJ?<@_<,~?i6 $e#C0״iMٽVk{z ̛7k4ELrRE V/`ٮ5]橧f D"b^/ ho0tle#/lي8 ? DX#:fN{x<MM dQ-,(G:qϗR}t&Md9FHwD: -<9N @:TVV vJd8Ȳ`/1\sMU> r;| /({wA͛uGE dz88udW/R%KHR!׍e˗ۮ90`bm,+# \dժUض-ymt>mУL<9N @9iR Լve0&A|5{n]!8+WڞX0G.0eI=͕+mO[߿_xD~^'eeF[,I@k,ˍeqA"lܸQz73-a3P7mIcХ5kqG SrmLS֐0̝;Wx 0!./OѿzYTŚg!WijѨf'ж8NTBhxクZgodΝһMe Ͷ2l:Ç`PFSi:jKJ~gFM֭['%cLF5eFC֜~PYY)i™cHGt4RAp`[576DR&\w]&l"#It8mtodBpA)(&x}(lE1c8NkJ(֔(Z!ůa&3>֮-jB**,7G۶m D&U~>6n(΄U&^meZǁaZն8 hܼQRdɒX%Y"ӹ̤&Myyv{ȵp6[g8:fs( ,IFneL-sL֮]=9`q] ^s֮@@qr/mw&vw<8,&r5`y +'x.w/+¦NuѨ>dS;gO /_.[w$TgA#+ 80sѫ ^mSRr s gޭ))9HCçy^yf)SqCBofʊ6Z,^x!ʉ3(}7o >5A/GٰԎ֊bayx4lr$AطsCSӑ_!RJM|HDQ{PH1Ow~LvJFUjV3jk:uCIA"x^]OqԵM]UřgEJ@`o=p>KP ((Pm(V]MNcqS'7G[o(~qv(thZcn@>ߑ~S}44Գw^k~#D Bkt͛mzB7cmiٟ> X)(,t{&N(= {4(&~('ۭN64(~c M>Z7IejF~%Mwl:b:ukyQWA?WgQ #l ۆFMEMsfvCJJM~U[ٶP2lbZ45vlf9ZSSm͎Ji̙+B.0;UUwGCsfNj!655{:TTtH5v= ljw]EMcH8z tP_ ;T5rx\k E*:%U4)޶֞; #wމԃ6q 46gøqy>}jxa>j (UMakS?LjN; ?Ѧ^8 7~Ő!jkkMRLh1Ɔ 0n40Dkؼ٢gO_ DD" :|կ"?@>}ԉ|ŤIGRTEE]t?0qbcަ*+m>z^|X4ΨQ̜Y;8*'9spUWJ".?9z3J4?aɣlm.H {hf c :͛oQV0!O~s й7к&M]sغD?bv[;;Q3f|{|sAvvؽ 7'PYYI=dTΑuʀ͘;-h2Mw;w~c^1C1`q!x#y<5_j#9|?{ wغ]׀iv!s?th=7f„ÇCeW̟_FUr\'x| Ӧ(Pp6ukN}fNYc3bDƙ\}u}Nk֔PXx,ZӦ2"f!_۳kyn=ULc"ƌ ttEĦ8 I6_Ĉ4:=W@(*}.x\NfrSǎ wyFMQכ7-[3 G}$EZHִ9a>=9唃TVf~<;icCuo(ѾjUr<7QM+K^m? n箻SN9W ;TRv7>Ӈp 2DSEpGnlo1?0 /G„Êkmz*MXahQ =z(lە}Q #<;TU9RͱF77o4Q^ީCǁK/ %']|R8'gg۰mMn'w]zpW&"W?bƌbsM/FC<+{:44w4q睇֯;>G^̜9cȒ`BJý@̙ #sW߶9jڱև ׾0QLiΠ47ZZ VC#F8v Ts?5k,c@'"#Ghjr(.vɶ Ȧa7iMg?80oݫOa2j]Uk8,\nIFVjn48= §9s;[e#PJJ7ϤsgEX#P~0bǁu/nƌq *=rw ޽{ܹH,-̜; >qQ-|Mݪu{00M׆K hwLYA75u84G~b U8,H =ā͛i>ϻi;'1Y 裲AMeߡ%ovȮ]URmX:S蔦O}rPAǚAN K%LVs9 d͛>ɪeH)]ty+V-{bq}47zU&?<߯س>lp"n\t ]=iJ8GkE׮nb֬YRU\n)J}SMi tj}MmpMA{x'~ `kþ}ݻ~C6*瞋C2o0p-4ԤilԼJ.sP]]-JXp!%0~WkW ru[VP(j&N,o_AjFnPch?R~ᬳjWZjpa :-EnͰaGή W_ 9Ⱦ}gkH@zY yxv}Tg\g|[M̝kRQa/7*С>|>_oo6vp>.׿ȶmۆ<}M**^|1W@8|t UEmmn`#gͩpwۧyfv/]S}x"Ν7vy&6lo47;^~M;v.Rн_?4 e/мvlHǾUuf .fb7 Zt!79 Cr퍌w(=z!<kP۽;u2== zFYw vM@$ިrgC׮Fp^7_.A)E$Ѻ&R<k,( s|Cǁ,|%k3LS[S BZ۶ܴK֜u;QnZ#w\tzDm5G; 5 {BXns3D>L<GsaGկ`R ^SJ!K>Cѫ#h N3{&}֯kW/x#D08L?o]Č&/婧 c}5dS76:LZfSw5Mm46):_[Bm6min-rom28hHڭ? wM2uXB&Ǟ_Mw(~H_q_eMq=>}n׿~SO=`AD-e<[g=MN3n6n:ȹ{ uKC߭pڌv*x(8 Z>߷;^k΁RPU0`@-ӧOcI<쳫p\6%; ⌧>;rĒ%Ū>Un\>+;Gp>ie8oUx;v,UUUsϊ%?a?`'p#09M᫅ub;/{ᩧᄏ8@Dмj="ye!f͚#E b&~kN}}x>ǡ]M)h~"n}X8ڵ5kaFNI F`5j-{,;w|X2^N;:/_eض᳟ `6k֬ !rkJc#x15 K,*xxv8uuh:VyUAF@p=lh7o .֭A>?`zjq&4UJa퉇,/LXd'ZC,\Pz6}2-D,=#ۗ\by+LmXn{;[ w`۶YC /˖_dϞJY dE, K)(+3}Y!י9{g#h4*=+֮=ݸ!2,x jZgZ֚=gӦMҳH^&H{jM3<ݺ)z21cu,\hx-[Hϊ q`߶mdz?4_ aV &U]5N"Y9K}aٲe2$ x*`ׄ 1G!?_ѯ:Uz |7Dz6˥g\޼٦g]&\q*0!Yrn?>j;+j*]H]'Bک-U͸ܜlf^zʔ' 2SNQYY)#+5zYK;?aMsٮGӥA^iomde(ɢYuk]8p% ,[ !|X%=+ Lq҉ FK ^ sLSBlȑ"H Zzi۰bEW.u8\fD3Z`ʕM˶mWScRa|2DnNESV;vY-w% xnU#DVMqyAdl`IqAb@ÂיdIuE5CÉ#yGjȵaPQaXLgJa4 +WFD„\gJ<ν+Wed6ۆ!CThH !G>о7N=G8 (A^,.TZ C;!@V$ $fn9<;>bigO[=R?eu6sd|eaԸ(""I$ `FO8zUWbjb+e0AŏW\fJU<{`%Kl/=WB ίxfX,oo%ҵ}-/A8Y#D1 A+["Âu\-M bAҁc3  !׋   =-Ab dBv):X ȭ $ ptY̤;$ڶݸDQBz 'p})M C?x-AH(0MyVpf (>+oZ|CR'sPi=4g u[q2Se,d*dC_$B'<lf; puy;~CK)ضiض  M/A8!ƍȑ#u^^pX)h}(Nxh4wܩH$2H_F Gu]GaNioDQԤΝ;dƌ_^:$hy2dHoTB!"mtuuzWcǎg%Yc ]tGeeeMZDCC޶mu7p ȄVAx'4d~/+`ر"iq 2K3gdɜw֚;3{7|I ^^uݵkWsXvmzA-BՙY ÇO àO>y; BR2WXsBt4SH IDATO>ɗqMg}6={Lj1X)lk_@$-d] 2viI>ZkԘ1c4( u\٣G]p3xFza2 d`,|ZFR2Y)ϧ{J{Js=iq߾}$oᰣQTT[ꇜ+"!2,ÕeY)x1c(=bO ǯwwN~~~JR ߯FIK@>QTTS $%%% z& {{K IQ8)q&ǡwޭIݼ]Oqq1@7i~ d: ## aa E HU`  ,Ò! SnOaa!|pܔ  t |Z `ai~O!Cf ) |V." .AH:y@ 6u1%5916 HhAY5$)ɶ8aR*2DnƗJ{0HEd!c}4NV#D"5|fh 8(VEVN -zVӆl`W˿Yμz'e'<(O(xhB.Ii~`wn1LWHB gϧ뀽I|-pvK@%##8e]JKK~m4I ƑySPP7߬jjj@~,Yš5ki!Y982nܸ֢b 7 8 7DXz5o] Bbn[n%nnnn byj я~Ě5kD7ӫW/}٤\{ԩD"g@_}n0oȬF~%Zkl;ۉqMAO\(˹NNV"YYdX6W![w'-_Z۶s Bf1 :uʞD,ˢt0|ź0C$ QRR5RF,uVSRRim[dXHb1WeYՑ謞kƏcʔirÐ!~TTTHJ@ Qv?mØ1~ Ζ-[g\5Dpؾ} e') SL8`0(Y<i6lU,+ W^'5Yn'BM LFaZ+q4=z`mr `ȴ0]{8djYpAټy$*2־I0  )N?=(5z , ֯Ƣ׋J@ , **,+Gs5~V Փc< gZ$[fl[\v0ٱcq.>z8?Dnۆr8˚+~&֪U',Z0B$ 6TV:8K\aۚ t ?Ck:G | x طuif 7XrXL$tgAFXjyㆲݕB̑k!=l\ i•WYv%!"ˁqO,-5Mknw2&޽R?Hcc1gimvB 0aB?cl`ƨJW"?_1bL((pn0ܟ3\uU={o>]!7zݏ>tՔr F<;d80yrd ȢMb&`P5~71A&VJΞp8#ܹsr698:Q>\ xfFK_j _h y&˜֊(*3gY5JS[n6ͤZ"Mil,[fѻwmRt/~1}UTUUI ^emΝ2Ȓal0 fn }P("#'#I$oOlaWfzşXoN^քÊRXl\s-\ݛX%$Wy'G,FT\ye=V8NWmsР:5kqylDzLFYH0&p5nXTgOZѰ)Jcx< ?t7'yq-d -N0H^FXw%`Rs-!Ǝ-k['agkg 2DF*Uc$C5v ѣ5U  Fz.,M)eW3g?dT $)|D Z͒SI5CEa.sOWܜi2]T[p |oѸYε|ÆSR5s܀klIzzAab˖X^80{ 7pn{ ؼ90y͢CtW^`*jjjw\`'`}=:@"vf:Z^2o?9ƗdĚݺ 'NH=p)mn>yqKn!E9 4= `B w|ӄ/~1ȴi5ڵKzW uAVU=w;iܬyvs5/XڌD94=z]?_z7}2- Tޭ76jBx^|HD:̝[:__B00 W%hXQߦZ"U=SYrփ55SZjO 6Ͷu¦ {' E4 \U-Vq<L]6wHUȜ9W+NrszC{z4 0|΢EQ***TUd? 0N~o>S)ĩhH؟̷>ާkgJm}Ew?MX+鐱<Ůa`*aM׬1zL"ݷ6M0~CI-t=À=,h*!8!j7&))(ɁkףRXrgp7 }"-fE8PUed=kY0aqF5 {鏽M6t{{i$^PDXm5puW֫Y׀vEII EEE躎i-{aYi!p8,{'/ުi}@J9 Tђx<Q\\Laa!B4MCϥXj&RJ% IaIΕi;"#Gى RE3f̹Je(`Pp8DQQŭ0a!hng|>  jseq&F96җqb۶m*\ H)vOk9+O444PWWG0_J5@fM7gպoV0e5@ .K.D{g0`ecI`Νw}roaOL4K֭3o{,%t,Xԥ8#cǎ83R&LB'npGG7'zw-_n 5Y(|$ufͦ0My &Nt E EEEIoRJ!1?9s2MkWV-9i-,,ˢyYnϤvU srrVs'\k$:`r ê%@;蜣 N3[NŦ-y<ђH7|Q/ ;U 8Iw|['䇀YRvaj ,piؑ], Ӊ3F2 z[A2ۜOk-!} .PU ¡iZJF].W$7MXHJJ8 UbC#vie9U+nrRe[xh$/1ȶ3c9=`U?ܤ@a֭fF$bj w ճ:=H\fYeKwV1iTT-)Q4 #|(Rd&wi A߾zPi,Se{")aժT;A5ܨ$͌U Gͺ?kqMx{0@a~ . P$U6,2 xHDi~xѱ̋Dxt*>}4_()-ͅ@/*N@>p7:7p ?= ز{EC$m{Ɂ@ )(ݦwTW8yo%Q9|Cfz^`0MǪ@<;ێs4Z_N:o^ty5()'CF4ْEOMx /~LD-;FX@= j@/*f R9cD*Cq [oEĬYьh\-[UXpaB9N|ȿE|Nfymuլv3O?-[u֯_ϸq>鞯Ϩ#1j anv瞄FK 0<h IDATO4w駟N.]ʗ6x<4* jcNdP"^΀OLs8'BCx'?k穧P#BI_YSOAI>WcQk}„S(M+M+C(+ +U(*⃚yzx=n,!cƌw)+:8pӧ݅Yĉ)..VOY :ڶ" ٳK] bĈ*Pdgğց>@iӦl).E]D=n*X忩P[{'-C>XZ"N/[N[.-5s1e(T5NѣGC=L{=5G]Ȩ D]44V*Xf,@޽d9N',Z=B+λ[TWg6MQ6oެf(mSR˂3gAt `….+2.]E2&P6MəgڡGmUU@RJذ!!Ctty橂Cd-d{)a`MʽZ"5ܐdKK=zϧZ"t2kB!8r^7U, F站; cjgciªUhHwݻ߯F DY8 ["ڽKl۶H$")%i +sjapٷozʊL-+ xfL"`xee]x*Al**L)R L&NtPWDUUzʊN)rL*)n֯L8VzawΣQ*7 ٳG4E"l_|3,NQ6s| ׫5J =={L)%^/x'vRJn3lOhWhjjT"{є#nYWKj:<\rjVN"VQa,SeװiJ%ZZnE'Ԃ}MR@fMeJ {!Cͭ%/O;y BԒٛa NP$Β[ᇩ['!D-7، {n#iZJ\d5QH wHdJx3<]{,%h 6lR-Mw{$[)ѭ#ߏ.pÉv8 R={P bÒNRJ_V52vm9g̣=yl+(( ruTwN {\n>pzŠlc`m`G^ANNvrrẖRvb# ;Q>v ?_b}K?97AN gQ Es^ݦ]L]3^GkOfU*Pd"Vl+ݑ}؈>mLS1{1bhG}_1}m?7B~EEk׮m ܰn%K RSW-Nj?Ôѻw;oWK~̜k="x5>rrj=}N2{m&7/Q[{mY2YKnn-]CJ ,G^^-^eʕH;Cc;~)x0={֑_} %.8O!j5]Lha/[94vwiӟBHnn-&5]^j?P.QKÒ^ 3`@=\rI}dryn-[+Te X1gNn=?'e<]{.{<%#Nի Fj '#5+W9zJ案7.Xڐ!y]ѭ[[Cѿ=Co6cǁp:7р[ˤI>~N~),;DmbAtRˋ/xN ~ɸqM8֭BLS֭:n?}P-M_< D;pBtܹ>bѢ(&sNW_} pMl؅}uGs?4=my,X,;hLW4wo1d8'?墋yS,8z|A߾yg_ |b C a-._ 4UR,t|Q 3"rkw,ZT:c4bg/Ѩ0 45s >f{PH2aB#'7i\xaK0vݝzw-  w4]غ z#G6ҧsO':y<> ĉM\p=~+]|/>ٺu+W-N |f~T@E4;ȟ4dzr]M7g4Wćv_?߇'ih8.&,_eL.Ox]?^vWe)D e140bnrqMH/b)eMQ~.ۚ7\XH)KYP`]WW$#Gg_(<,]^}S>X @>N{3TSā[4\ 7f2 (wiӵkyl|pa;'ˣGnF]>vy4.lC|bc9 ru4bt"{INyp*#Fm۶s|K5x&l>Hln.`;!E;?JM5V7l.$ w,˖HOhoIXŲTIz]2.;w[nqse~MX>ln7/h-7Ix#GfC,~\Nصk7e8_N[ߏ/#/4Hn~:Dn.Jat/vAkl3%[a&NtbAǗd6%;7_ꥦ7'!:3gvȦ~h ︩0ٺIJ$wk_=̀^Gn=' 6l0wd' 6l08rĢbѢ(9;K icScB8PQI~Dc߾}t vD^ymgt۶&8?]믇0qB¯~chj}_סb|m7GX`'555=zT-SdLv׾w"D"gɦM&|;rmD)2[O=DJhjV@@~&arjɍ7X;te?Ɩ-&{(A+tvFP@ h1^3u ХK=6L߮HA:98^y%=5 j[zy$@^m=Ǵ;[zg^g42}j|nƌiDv'(*9v 'GЯÇSSS E&˂͛Mq9պeɖvNGp-rsE|NPhTӟ^y%w5k箻TTę;xgu94 ~#?/FV)Ŷjͼ=k0 IJ㱗:,\+̘^I&I`[5A)r[`$ݺo/YR@~zvy /O],4-hհiډ>[>wɰas=s= 8PNԴkK=Vǟ4MpP=:>}(--P%H`3uZ르m4ᢋ4vu2%ӊF3l%E/f!@qŋwq/Ҥ3O?q 7{v+5 _+W_tw= W,7l0)m33DQF^ MM948V`nH5;P|~GQ̸X3~;;L#It|$%%%RpP1tyМ9ȠEXyy~TWwܾ8؉ !-47ߌMdP@y^oROQQk+)({Tj͂|k\DfG[n/ Hݵ,]zT@hvaq4u7wQ!Iب*087m2E&mmY0fI}Xd&5Ut6B@ 2@o,f;t.]:۝TiZWN}I&h@~~~R㇖仆]B%u>ML3 [GB\I[)$77dqYuuCі^xҀ;W&OUnAuO TܲEY))QY02flGqMNNNRJP EdPO:%%ZGB:?T(̛Ydʤ)aHd}ҕ"XXG3&нFi8n3iB̯"5.9tvR۫%:J:'jmB錍u ,1ĨQ #B_V#{()طǵT' j [;61%_Ӛ&;Ay!h`ZFR儸Z'RÝёa)D"yаØ1֬1;]Xl]q9mZ)miTWKjk%kIht C9wd89EeaI)~ <hb/Flj:$4HKN@ :3(p}jYKF']g0eɾ}K|4M]NѨLбg׶ gCCDMM*) Ӆɽ#GZMŽ.e'Jb*x.]kz׮ d}w}e1n8-H$w!XJ4YĻ}7zƻflHi@JUW]gϺs뭷bYVDI,5z몇fOy=z0uT-;菉ޯ$UWCWd5^:(W\q~z>=z4Jd ~e ѣ=zqCjcO t|zK߾}o8Z;$l^/<-((S-8t]<ǟLNYХO>'ǮgQʊ`{:Zd]*Զ}PV( 4PM?ݪVEF5PEgC`#ڥKe4lN*zQPP> GJhB2PPP~㝷inN߫l"޺-((vN[666ځ*XuX0DQyy祕{EYY%%%* -{ cƌI+Mn0 C9!l`0F[Jy?.jѢE 4HiX+>I,..N_UUáTP,Oμ.vHJangbhtDkZ$ӽOIYoS!(((H ԰R 'ď~CIH{ С 2Di8diX E/Lk 7rUVq;*0޴,~>e=ҿE8,yz0`zldѣkL&O=bɒ%\{DjE3+䉫ri<x"ʕ\z%"INqiv0y0˖-/V Ե'w﷨dgGХ RS:#Rל6J UUZXR0{l\.=Tv94 ̈IlRE9x8aE0W q:a˖-J*HLޞ1GCc*lw#81}8Xh/{ &/636v?B4aLRO=C8atn-P d H^'}ɒh9n֭[)Y)Z`iwo_ GUUzlaiYYLаmׯ_ s)}ӔLb߾ԨY*Hp0 ϛGc@۹ؾ}Jt"{BB${\R=9,Ɇ prÇ%@kXA>:^/̟?_Sd~&G"p.UOV%a)],L3| ERm&.i˂㝀dݺu*lsp/] ͛TJzo:dqho˂Cݻw+۫ d?`\i3󄰧 w sUF2ª``OH Cj:TVVbRp6hx/P;{v݌ N;Ae^~ɓXN݂QԔ3baUjJ$,9sfFѰn4JKu**v SY)%]kFl?Ae~jQl  ;dYp0wVO7mPg}@x&3#v,8/T;x2@ܹQ2!'{?HeezJHиw)az\l߾ ϧlZJDa; Cl۶M=VH. ,t7URशPH "pAw e'~ ՚))<ܽ{-|t$&| QBéht B!4ax`PYW) jwauŊJ*EdǎO&LٳGILߵˤIf(W/,lڴIEL]ƥyd^(}d=Roٹs=e6Bp^7ON?][Z PdyC!Di%OL:,XX#/vރeo JPW'R0i!:/N=>`Pd - *+M3v9.6n0REr-X[]Oݻk,X@%U d󾥩J6Mri3"v[3^o/WeIh(]wG [܈6b^mf֬  <\(+Rp25$&h|#կNԩ ~;qv +ps5@әȌaYoquR;6tU@F&F&7#̘qBG$akyQ]lJ,++Bן'|3¿I؞B sQ{+ob'4v4aHSd%@M5Pl)kH 3gFih'k$5MBᰡj%51UMGN):5LSjm&ow3iM?;Y``:5I^ټLѹ~qM$7;Ai8ŰpBFTm8l/@oIii| p]ŬY&%;I^dΜ|ux0F9طϢޢGq㜧ϛ&L4lڴI6Ψ űU{Oyy&̼[ĪNc^ sU>,nϭ6'X4WXԲRJ^An.,ZH.Qxk:3r.+n{V:ɡC'6}AN[j_oF5fGyA^|{ڹ(*2U@N|JGk&3no1~C0eٳm׿v#1B;]NnU7yu Qش ^j~99ٳ\tQnફ|r[p~z'f~n)@NR-S EvVm9f) PM鱺w=L?Q̑u,zq߷^tr[$u8kt BEE%%%)RhHyY'Q ӔDvBɄr~vޭd`n96.ls4>j]ky| _P-KH=/|mNp:Uv5 f["`B7_7ٯf51&=?D۷*^ a>SODà?^;@Xb84XKRދ2}z%֭&=g/D  GopN Ϟ={  `jA$"ٿ׶=w]~Ilc#O5@Y k=?rB@Q=0sf>#G|[nƏwЯnqK<ƌ9uIH #F؎ҥKUD*T_L_~c=?Hx#>}4% 2^^, Lb:޸MPRQU`0TnT^}Yo{5 ^=ٺ]7jvy;C!x9.^!.9 ?{RJ+V*-]0{C|a mFhgy_w5`p޽u5*+uK״RP1_E,vu|KV]>8Pg@=.{K c6mڂeY*-@90ho [ ZY)Sq)<[KuuzL'jʕFNz6m}uMݻm4W.?f]ǬXq9s?S-+N9PΒ+V<{ =ZKMMj]7N]鎝rZ5 lS6k-2C^ѣ9rD)+Li:~(.W_!:ÇJ$l\(,7@u)2W@oi9ǁ .TU vB݂0ɡC2coPOV9!D'VPSctwB  st:,DBk/Lgɒ*Pd2;%Q2ի HXHK GClfzdJPpA&^`eeT@lb۪U_bܬX$Ԧ@,3yy~tjk PtJY9EXzzl:cF3~{zޙYQ]{UgnnTq"WUcbf41CL8\%L"" 4<ӧN>͠YcKwW]{k|8P%e"6Cdo[dBv>fx". zuL0U W_!Dcc] ĝl/Ƭh #Ghieu l;7 (ѣͶBQ-,ܼAkBf&fmmΈZW_'i^%!kiLYH2Xfk4޺Ak8Lfla`/]jڗJAr&yB&JMfNY9Y^LH0gca2oumH,eR˟qS2| W g#6n~a>6?kp6[['2/A$3!ptGA,1g;cG(Ȁ%iѰ Et+id>H ݧWHGJšHWD L"M js{#@C~5 +@Q'_24\`t!i Fޢ8ӝukv0 w O V,& p}ɟO O !6)ˣ q{?M{Q$yGH9L$}g{;H@]}MO8QQ\\CP(DMM [ly&ˀ!g%7IT=iPZls=5k֓A81~6i$nC׮] qp${/_|ƶ{ ٺ><\]tMgϞt 4"S[[39UglO@!iAb,MI^ ]>a|YRR #9m 6 ܂eq+(JO9lN|¶mpJW 0nJ)g-<ė4|JEJ)/S T=ƾ+?-+))Iڂ֚nݺ昹 $ h$5'_NK^@@̘HHSOR`0w E yI <+EYsڜ 4-é'h&Jn7p!h8>.w Ja/9]lMj@nnnRl^ѐ dAD"ՃEH{JA"#ih$3em&X l=(R9y|xܯ[TT[nv5v`\Njp B{mQsS m߅$ΆڶCb{% Vcc8zJZaZZZ//9q4Mq 63tPyT6 6ڵ+Wz&:tfOFz`(U<3ΐ4 IqY3Y@00CNYY(!?m(B!it RQQA4!9p5nIhyꙹ]^  $:M}cOp㍷yYr%]vL $MZ&-g=P.6ʦ }dTPWW't6/_ z6RqB2ߑ`V^7y עv[[neȐ!a! @+ y++Va}JIaN?C!}ք ~v!m~{GCV|dB6> s; I*8<cx=T ~SXp^{-eIJ?)=4N:U >'C,ZZIp6;ӓptJy95OkRrX].Ѩ)w6#U6H1p L2Kb{{ m;N 5P[[+5x$ dQUU^Gp~B*** ꄼ}Mccf.܏M444HV-lmlؐc}î] "b;dZ={Sԅ J d`aƍvF8lo.jJ>-˶Ilب=_q4EE ӄ{_"]fð~}cT o$M㗶'u۶9d‚y>zӥ tfFAAiflۖ^%d#QػQpR0n̞=&TEdlmsםnѨ냬\2ߧjf͊dDa= z0Yp!iJ cmQ `ho?d{74c}mk> V}(NpW tصi۲qgd% Q&[gs/dse*y`kY-Neþ} ܾݦ srMٽ{] $)6l`sr^bĈz|)S"YO^x{?L+y:E57~G]fz>k {>ӴmȑlrTJ1lDZؽ{BN: uk*xe(uc>]:5fbǡ{ͰaM>b[f+q8V1 ^wpg;rd=Kܹ#G֓{|zJ )ΆdGcժQW5] ZkA0M݁(tP:4 ࡑ`Ju?]+s82j0z{m۶ɞat:}˗/RH׮6טLpAnnccA1 q!׎@]!9Z&I',X@l᭪*Mk+p ~vy7M2(AE0{l#$#*c]8#(4ULuuWvvOtw׬ivwl;z^ۆ8NuI=Έ'sD![3|@I{,_hٵKڪJ+__ PUٴFk_ 3GmÏbŊ('yN?ߊ%47k5[WD~/W \pALjld6SWq#䑟hrsΝǘ1cDUT:!Is|e`0uu}ؼ;\rI#={lOr[mxrr`8?'z͚^pmMhݍfZÌ㬳5yY"rK98Ф[71cz'_H:N2yvXR\ ]~<۵w.;ȑ>~C7svŵ~XD{+?jrӦM㗿oQhcn,}Cw󡼼/A衸|e^O898TŴiя~(=KH%fE>rǀ5'K/].-usjAŐ!fJ("xK6okGnȀAQj99P\яrm_m{r_Z^{ P_6v{[PБe_:bŊ"7v?wwš5E#}v7ӻ:s5ٸq3Ύ  Xl<[D$^{4̙~W]'_7U{1"|A Q8$>b&͍7;VLVYnw>rr÷C̛VN'$hNyMrU$?O#j6vߏC$S|MR[Ν\~p?|-45ioB&u`vqZESӡ{?i0M!@C{wkg{rNcs  ^>o߾ÄThY)E{7;e-->!=TW;n͜-ʛC99} C*&+W1r䡦c R]QS4uV  `J}JM!'GI'.WWi?.{'ea>;?^zVPGd/R5flE6LQFM 0 >R .]{:D"uGOMM7 :.ڪ(,;}.?kVf?^ F2ךp[|0~?kNm8faTM` n쨯OV#5ߡ9|[&UU6𓟴_G-6|+ݻ\xnhҡ'_GѣHPwvֲԴW^YOK/ӧOlDf IjTP47J稻B_ќ9]ڋyz.kW,㩬G${7УML`09E!S]'x?란 ct!0T1лb{c~{Ͳul[o41eJ.}ٺu"ώ,MJ@$]ڿ{TCͱ>W)wjmG Cl0mwHy837uZB!+u/[~kkj8 Jm`5:<巹-qfLG\LJ߉8~JN{ r?c+ lr9 5hioJMu],`M~*++EQb{3՟StTW څB< Itrgµ6fs-]-+'٨u _J)}8Y e?=F^dȀz|?EZt#iɰU'V4% x7ED[R_>&b2`<A̤vkj,MwA%A8ٿ(!tD 5,At+qB2D^H@u}JMqw܊L8kXeѰCѭ  7}(+〥pӒq#dK(ymL46tHs6絁fX ^rssqcvٲ,^z%o}kn gOiv}gފi L1~6n8nvZ[[ wܡ.\?_"A ^y_0kџU2l﷿m;w~W鋜 1B)ŀW97iرHw-$38˲uRjС H Wp8fܸq#D1/W Zk޽>O%kj/N& SԠj' K@M08voѭ):'C<~APς(Au:H^ |y^AAAR]t[JڟR|ɫQ>-i=3Nd %p|Iˇ!"gO @0Sq4Һ_&H Hdm7p__]6wm#G Egi*&y',DN8_L֋D2$[Ýwp0c*DŽouO/ Kf%ɓdRJ~T)isB4k8VSt[\! $z?yt@ XYmr-K_R\RB!ʴ-Ѵ<Ƕm[Ixw лwoSHNkk+_W{A.26o, V|&h_;Kh:Do8}b:q2>8!9gyڶ+, ˲~Fm"GXvA~-· Ad2YR50~c~f#aѢEl۶-O":qm\fSl8Ƕm-Z֭[=Ӡ<."r LE~zf̘U8رc 'ǓwɛǍ>f͚?k@f g'~ (m~Sֺ3gQ^^.*J/GD4&>psJH* >'o7|Sozsaᢤ%1p'{sw[8C3Ƽ|޼.) QN?  2_W9z6mĠAdߡ \XnXHlL𑔪a9R4\_ZWe>q$Kt;sUW5l2n&l[IcVݻLۙylٲÇK2l<Р1M?z-Nkkap3QszʌQco& g2=ڇ\#F|xbn $)(74Z+ɲc6 -Z"ӷK.~( `ԩ @61gܸs󉆓OO{(F5),TرC2* zuT. .3s[*"q }tLYTχ~eYR@L̛gA&NPKcchXHXP[KFad#?UJ@rrja2Y8gE,`=!Fj]ц<S 7m 6SaqrX2wn.{=;OʰpB2ۈUSe 7ٱc5 ȻsdFл+K!dv騦&fǁ.ry/_.!U$mpؾ|-'dRZ 3f̐,X&-,F3#TTx?eض}#FziZ^DrcCC|1"!"Xx-km c;iƌ1XnhTޮ6SۿkqG>}ԩS )[0TTq Zk ?_uMnnw44 C(6n۶g [esBG`0uDܭIp3g%BL$Ȗ-lmC'FÖ_`ŊF22T[3޶7fcc~R׽A>V\8'!,(njBjOT5Vsq*NdŊ5Ґ>γL.6P1W' ?SNDjnBypB3X#JX&e6 ovr.&CRP~o՜uV=װe *imm ۛNzv33dlo~"T(Uܹ55JUSY- Çٶm, d㜭_.@N߳_j19`[u,}ۉFhS=iJ8 ^l4MwcFc8J Ac3W s9D"' JJ l"{&'/}_Dg0sqNj'BqѰ߯8ǫDW&Pʢ6lhap=9|-_ƌwݷ+SQYqFI6Nf)-U_`ٴi$f΀ {ܹKv[@h$iASUPP2xBEюV?(J߾-ض.(~[z9rJ8V?J8O`!0hH`[BuС)РijGhPq [0iRȉ mÄ ~]vI/|8wjkͷ2X3 D4(|`-Z L BNQ}xϏr)&?,SN1 6-{&$ 6$^S֯mm:?lmՇĘ޵bԨ:vtx\6mZk L.]ʕW^)@֑)++7n>TϞ=͍ "梨B/Zd۶m Vo$}ŖN|,+Uu MMO=3`Y<}a:rJq4ce"t)hh4JCCE?n 4,OP{hnWTzPEFKpMcիm}HpDqM׮yyq&) &tf,!CN͍[Vۿ]}H$+k\wuTБj[MUߏQXhЯ޽444HM^0xӓ'OW^*??`0׾ hnnf۶mT˗/ avխi]ml[s&O>EYm{5 ^wyʶm *ҥ _T>}4ix-6 =g3|'|Fg'ʟNrͦ1bZZZD"y,_WΦ@"X|`+/)Gٷ U Y@קzAlۦ}9Cnn.#FP{6 #:ںnM&̗- "Ț5+% t믿G8&mD"LT{.Ij߲p2BW]姩K{I^,=hq, 5jTGՁ!˦0Ķl߾] xJ (+))999 O)w#6z*Q)jo;J5/p, :T%[5#GTm[ N^[nK m8,`SYY)NH4|Ç 8I15uOB]Uٻ kN?ugv!tBaaJV?0M^z[,4u+V8cѢEb{%Ut(**JSqݻw6GkQ8lw^o)((P SNN~~~R2amsLK/ 0o d7>/v?͆Cۢ^Y ϷHb+7M@NNNR*:Vu6͛m2!3϶,]*>G>gnϷ4$73c/b~bРK.UѴ:M--ZdeJmùؼBdna$=8N_Ξmi*wa8Gcc&Qk MvqLn4cqlذ^zi`R#۝&T[W#bÀ"fu2H`kW/Ԅc>tSJn4S,81@}}/Pw)Jھ,=wuiveG_?RQ$c)W uruO+uFMf5yÀVQh8%N 8?Zs4R= zRՅD]KJ|#<:d]uuΠ={Z4 ^hl+x8bR% t^J[z𠦱Q zp*#  70 CV$~>Γ}"ngq>O 5cb9Õ㶁<'6e< D|_:q\𦛂X;SYG={EYlU  IDAT;>n(Um_8VWwt޶5'd``r I(yyyvmDѓ9H~^{5vmЂk{ݠG{m|LEAl&(_ X}M>&ZqBaN;z qZLL)3[wRD0aٳed_O1`+Q 6-2hD?V 574K&dOԩS~˄\t?"Bj|OSQQqom Ʉ[ǔ):ؒԁ@]Gp??ۆ - $9χˀU@@qӄ曖")ւ8!'4(,,Lȵsss;Ϙ@=W( ={p4) $DhE)IyocV{ؔzaG>PH샐tm۟7,;<>g-eb` $%%S{nBBH t\&#"[&YVi)hT-F3~g朙k~{IwQ?ߍsPN@QJڜ4B,aPWW4ݧ|=8`)SIҠiPV0몃UpyGq=ɰmۇh!Ycu"++ʦ=d{n~ʤJBrss:a{\g0yr<=6ynV=GI:(P0IvdVYwR}6.&) U639'-ŋ/O4G6<ʼn=KJJx7F3Ms=ѣGcYq1\^3)u;O O$~^oG5I%Ň4eܹL<ҶHE8 ~$.$zK6>:{d~ie~rt5ĕk+rqިQ.22#ed23dȐ?ScKB~1D;vO'՛9r$-O=eӊ$dpöQYA-Zč7ވqv瑚}l m>{Ӯ}>)lJ/I wnJHl>m^xt9f+Z+%U ʸ Da,r3Ϥ %x?a7n' hiEkbI>Վ6uydӧOn#LaE2Qh ߓvuJJ|s<Oҋ %$iQvqd7lA΂L3gn:-Kga@~Iܒl];OBRܞNqc$6%xgpᅎxEU@_Bڡo_7+Wple % sr+U_?V*m(,S<^mK͆ [ U2sm֬~0dP\\(RJREǠD"&7oVB )DP:uj$%ʎ={ٸqvV(b&V۷[D"/\sBǾhCno6]kdwc Ǝپ`0F"U}o(ݶLԶᢋ܀d*V( (NAӒ߰u"͛7oWoh ʤϗMS2zٳGP2u@MQ%]B`naV:ۆz'%s@mQ( lJKJl?öKXڵ4EĻ$VbI(}>ЩӕXP Oݾݦ.?PÀ=B7+R˗)}GһNvXQ( ZJkidˊ6ٸq 2@$ [֯'>[0} %(R݆?޶͢6wl[ҽ磧BtE"l"XkZ)}HǏwSTTWLbeʕ07WC(.E$Q߮D1 sF 7G6<7eu!gsS"))-D w npujjjbM,v-uk=l޼]5R( O R+ /q#",ZG:s/U"(iS]w/ P»B )ƶ"P(vUS.a.\.Xp*%V 'B2a˧OwwZcCGXfM "cJS2VhZJ|bJ\.vJ}%={6JIvbtʪdÛdd*Z<ؼӄ1c܀AYYR+ K6_RK)qs|Q !رC= IO (@څ ne.`֬|iEL*{5+WZ1}C;xbeXHRۆRսy.h7_zc qEs)@cΝ6 6Y'^ Qhdg n'(>dgҥKd6!Q/4h9df wtoux<B04樰m|i}%ϩj̙oV2&s\)%EE&Ut:-͉]QFxBտC:]yt:Q}{:k:+3"~zWǭzy EE6wivO s ͈_\rI kun] Cj)bn$[v˷ÒY0OMM'L1dسGhQ6;v؜sN5}j<S/ӽe_y뭖}\ֻ{W6b@9|-1uj$ iѾ%!uuM$#v!`(zi~ԩM:Two ۆq\a|3Źaƍ1bex ?j)KKm1p`HD>y <rlݻk3]\v/s]^N;eapnh oᜢє+ ͛DBJiF5&Culh5˂ /t%2@a׺Y"FF"V1l.p'N%qVť֬1OwaY-ho.ۖÍ[wnу _ 0@#/ODz+ݼjnyL пFN_H8by| ܗ2ivNњ v}]vqehdjN3Zs8ޏf4;2m4<6tFN^4:uX~=iѦ8iT=vs^fFdd4f]HD2w=I| Պ&6YTT|A'՗:Ata٪ِ"c?Pnsۆ[dCwضZr}]o(k=^ĖnC KV'}(b?- tEo?| An8Fm~?>Z۶SPTTjB螊'C'GM$3n0dm}4!^bZ;y챴VޑRi0b vR#NV2؜ ep^s]";olx .;wKo(qγ>='>B޽5rsu wHSċe8%"[֬ir%(,V BlnuYkzoYiyp.5]9Ūi:x>UHuM ǎ[UX!CoWqRef/).&\r {n*Pիfg}l"!SA=(6M+Gzg}i$"bd_5Rҹ .Yۭ]E0N7cے+pvzlV߮B )55B+l[ҥNz:lٲU} TE&A>n֮]+RC!ؿ_ !99aƌJP2ػypdn24bkP"4Nɾ1p? e E2².K)DwRϿ -i< Ur%a-ڵ&~mN3|u,"v.X`grQNS{oWaI aV}Bټe9%NvFn.':X~ 5؇S֩PēR5%YRҽFNd~5XGdF9G^D,,4EzRR¹mқ z]=F#}` 8"FY"<3d?"-  G'[ \ ]_ o'l-`3MFH:< ^옮*A~ہo!#֭K6%W]Na `(# >6SBe`0]Áw:uk׮t-F+Bjjj8p@T !RK 9E 6|qO I]r t" `ܨQ۷/xޘ݋aTWWܳgY+VX\TN >?zt ق~tVGu\7+m$#VAs>p7j)Haq5 x]uyxVD4M|50rHzAzzz% QVVe˖~ޙi~gcr ymuQtV<с߸\˗/]vw"#D!'Mgahk[WLjR:wt>3FM{wYY<묳O hj>tLnR /O;)n`/o&DD[g)ӧϧO>%(GEE55.];1 ZdN?t"mth:O??~صkקh51 +, #HorexzSN9ED"7^Λ7O7հSĀBϷ!Ct$.4;#GzRJ}[ou%N|L} OصyE$jWw:[4im$;;~ QCNg>+*L1dfBn8^q\駟NMM p00M3f0D"rssѣ%pn2o^o/) m"piɶLYyyyWᦈ+s"]wic=tE4;Z^׷{|6#a.B*LLT@rPȯ6СU+Bi9͆뜮iyyy">$0 >SpSęK ܫ>\b4X1c?z8=?Qquî]6.W}f޽!|4ߜZ|t xkkNx7M2+KA?#C0|ҥ֡d"777nm 8QG)@BbD?"݆++mB!K[i MNphIAff&ZRR?9vPMg$P߇׬Z&.Ǵ[ ڷo_8Y)%}1Kƌi.Hz|P8?(OwHKKYÿAhL51Mf0mZJN:@ZZZ\oIA7VN g0L&oB{N;mhLp%- pR"=Ȟ=H5/###H IDAT_VVVj)bM[ekbwމG; 0]p(UĘnMi?pw,qh@cj!@rJP<{qh 7& !N?nO>5qFk_,m ~g%>X;|劫mɑKRF[$RDZ~P.ʭ[3|)q\ƻa7XT(@VV"867o] E'oV(Z=U;n P$dƙ= rZ}TD \OkFuHimd\&)~CcƌA%6 ss|105j3TJZMNN9991YPk {T%Xf:tC؟ E[iZj%(Rd(ͤ@JI$iU '-IJ,LPm% vzX4vkF+PVtxՁdSmێoF"@H$͛L4tЁ^zDBס t9u%`X4vzڤGE$#h$Æ K(S1㋘o#P(0y#ud:u`!^}Ut E*,]T^I囻t¶mۨS"UAӸkW9C^)V299sշEP = Nj/vUH#r ϏVPUUEvv 2 G-W^ƲO5 iYK kj$+W… 1 C,Es]6eJ:G1Tml_P("[%~?)!C[K0p`7oSmde}VW':TKn! UTUUѯ_?5v ӵat0r3Ϭ/;$dB,+(.;$K UUNx|r.BMO=2]u..]ߧ Pm'6R&gے.]4B#6-`UC 6fbTVRV.SNfΜ˥ּ)K8rI*4ȷm;˜9pݪ@ ba}H C`p%s C@͌tHj-Da:JKKշki7HWֻF΂DBWל3A*AI F 22S,\P%TgnES_mMp:Z+Oii>}`Μ9Sa2R(L5Ps%LS:=bP3uT<J$mm9mb96>hyLlAU|'SkU͛oдAsH! rVSXG(leÿF`4#**lmo/ذb^{:u ʕkH`= }*EzW^G Z掲4C'\{;k6yrJPʄi"x<7D>̏59x I)C6usGѹSڵ@  E*& ][-UU–No]N,v|kWBVVw1Du1Rs\W{IAui:}6Ý;<̟opdp[o67[|yJɥ2Wo޼B`SitQYiay;`B ĉN;M'n<0ࢋF5~ 5v ԛ% ?.scN5,KK %]5`ӄ 235B!Yo:v>_Dv* <`GJ8,K,kU߮iӌюiZй6n4׿"{3c݌F'3`R)۽ BZW_ ҭ=x1MXde9H ]X¯ipX6o[; Lq*}4f&_"sGdO~RǾ}6^f ӛP2p'(,,TU>&' dHYVf[xy ?c&)SB^m?e?sfs:/;{eҫƯMSdH?#\i2eJ_Ϡ v/?om`PrM~LL^~9Ș1̝ݰrFq`s9jt)ڒq\# /Zdx՛5tU4gx~6w]ˆ Ί&ci<5̥6tkxU'҉GNGز<9v_*dQ\lsE|qcǺ n7OT;q>Xמ7a-ő5-?z Fv ~Z-3u=rUn~/ 2% ᡯsuJKmf4a@^K"Ɂ8<&/9|@ g3F#vH"\l)xk $EE6yy:trٺbĈjn޽)+̟o4F㮬dgK4My96\vYM-X`p~> zn3}zv\);wQUUEzk:)Ǧ+0%jCp}W]iIt R2HD&?:wUfZxtWذb"wͤ[a.4U|Cxzj@v3"=ӦI|D"ok^H]=q.|Ї ^zY?>$./|_g3h/gS{c=/gOAZ4\.g_MEE;wV#L @m{6ktwG>)z  c;%RrX%lHD6~$=zh&P*챑|3lqX s'QaD!!g`ciMBpn0S&FBvqǑ+gOZ}:1嗻? i0eJ)SBTTls&>7?́۷]@;@V;$ |>gfZ[4ۨjuu'ſq: wFȆ?wve2r~dgk飳w~jjjS^SQjzƝDGz5[Xrc%1uuB|4֭=:5SFR A/[oQ0%(bD[ >$2|{~kز"p,8GWz(ՆtgU&ƹY1ڱmgRr^l (l N:`Ҡh@$}hWTHv==cQ.#C4؜iRgHf f͛8B%X0Y4 ƏwcUNj_ÆcK~[k=FйƓO<8< x' ЭFu#[  IO|7j)@bM?YCT\:SNq`PRP+/̦4!7יÚ5.Y,~ॴԦgO ]wHvLsggKE??JGtrr#u<Xh!#FP߮۞D`~)͒Ms1}zO=`KlD"B)SBp` j@]ˈ՜}ެ;hC[+&]нq&BlVXUW]uNokry)!Nsf򻭡ݼTH0SrJ:#C.ӛ{.MiS4Ɏ5:GR]g*ٽvE=in\.WLm׶m pmDw- 2!A07Y,bۏ7BLx'EOX?яC=$ہ?j)Zڷ[I/ض`Νюm#F mhs9r„ {3Ք}|I P Ye+)/?A@s=aB&Qu]. 5j+&[ѫL>+OL4 & . ]c4M|>\ғ(yQ.?P)I$V^}%\ZD?^^j'uL(;1˂3XXqrOދi"Ո#Dff4(@H3Ç IDAT g&3M~Œ]>{"b 0 Z~|ߚ`$9N{wntj 8PZզUB8(B!Ǝ pvcrFk+kWAN_Gnz_~vS_ЦMR4+<,ZXP' gĈύԶmӿL C d 2%ݞ 7ٱmBG۶Xu98(t%t| x-x$sI}O8A(N˂q+[|"TUf)Q+[?@̎=IMEDcmCqj(gcX v0pKy>&ld%}[b)K\ cP",m3;8\qxQ{ ᦈ@ѧFpIii axPם $^ yy˗Gn 0+ >O,_{Ϟ=]6Eb$GbM0'.uÀqH5Z{#n[h& ?ʼ5IV)aKz%QFυ[oukI"loeee1\ɾRv{-zH+ + ===[Fmmm߫dTe_}eE ݚe&{t,"躳g>;b=@_m2SyGE)ŧ[w:d@<4(tW . LZZÆ UM$,1{JXŹB@ )(Oг@ߛĦi4 JKm=S9(pzzzx_WM"olSHG/N_xI=HM6['7(Z:`ߚ5l\ڰ*'~M悴RN,^:҉#m@ D,~ ` w`AƿS$#"+++[C$!fcʾ[^ZjھM"@ߵ^FV,U#ǔR˲\]6PiJ6 .=˅i`ݻ曻]UsH$Xyih[8pg?`mSNyj< 1` "Sl&Pa =m˹Č 8Sb؃>?,q*R$͵m_mX`̘jGiisBOBA`FOmT nի=k+Aii)>T`}3_a}=x*ӧ7[l%77WDnO==M00`(#ν¯uGźu&w!Hl y*}>.ַ]PǧC}1yd;!d'(277D  jUՄB! g~񋾹?i.0طRp_ux-*@'#U: *)eyU+ FzfnYؿdI-Xp:zS}˖-:=n8aʔ۷o0 įvnӱOEEMM͖df"=ѡJ`aQ{R曃Ը_Isinz(ǡ0ʵIBzj$psryM`…q~b„'ODd<6UU_b"'ԩS"ܜ{^ЎWsWihsIn544h3 7VXJ`k2]K1 8ÇT }9#:Mfm͉,8~|B&S&pV}])0M;7@mmҳtpYȈ;#F֬YKy Vdh0;j֚Prr>=I]tl.t+9-oj ;eKn?7Bj ^[@d`Ycw55Oڦ֚,Nlp5 FEEd,?3].ջh\8ꚝ枱SÀMVSvOyX҄5) S^^Asss]'_k)Fh7A)' Y^N "EK'vΞg &Lh䥗Z>jيsM͟:ow7O  RMM Cuv^q gQ C/GY B0Iܹ䡇"B- Oss+%%%4 -  ݕ:5J쳎S[g pР9qFOÆ8}z$8# $>ؼ٤1x X R;dYpƲmVSk W_eIѶ&8a،֚'m%'O:gϿ|r0Mҗl&x )tEzGC͑#6GZQA4uM!ȷϿpS'][7D)**JKYkw2i3C!{)*x|I]$…q&Lq}!B3ٹ3~g1pѩo9O~Dyy9GKO^ּD++m֭3?fѻY/0`ǟɾ<|+6㝻5;^֭[˥wg)> m @/a,?߶ew[û'&NO@S/RVfs-AnL^i[oX")>wGH$<I?Sl& 5@0=j3mZo-~(?qnO~gsv,]Yf5 =>w>6]s.Z;aFz:3.Z{C\x!~{3+WsN Q_9vᇳ&4<öad?9qBQ)I8 EEӦu.M$4fwf9J#d3|>ia޼373'W71~/}85ACD$V>|οnlԽ:/YYPP`t8 E~3{}>G0hihkm0n,ZG}T,}zZ Nk]bt]C&;[QYI!C **y8'k͞H 7K NF7>O,YAG,ۆcl6ص>۶̘gzǻӧW D [(oJ~\C֭w!džnj9=jaYP[\rIK5̘㭷LϕW^)%d*-@ҥ fg&ض4̜y6q8q¦{- \m #FXhlz\c֭KlmZu֯WqMcg eϷgᡇBm:w׿Ìo0cFjҌ酅;e/Mݾ+?y~g 4ʿ[ =ʋ/:+{k{y&tM.u*(/?eYr^@ISKZ#o)/:?!~aςg!Z6{  K/m5+6۷o2F[oTW߲@'[b?߹䥗g"#F}/knG~tC+){i "a݁7W;"x|m,x#xIE woPWg`A'%(@g|]ͿRa߂عNm _  `ÁߠA3~~ B!EK^8ÉD޽ L#ۦcEѣ)OI>9+p(pa[b_E[{w/ag+N49t99x\SPˠEreky$~+Am([nL07o673jLS3}c m/v.xcîLW6Gߙf3{&(}]~!Mk+tQ^"/ -˩Ƿ( } ]ѻb@G6m`۰eo!:J(?Dvvqݾ?=vQ5~ر'FҺB&s`.I|RۗyP9 <3o铼m: رi]w=%Kv[v0갱{BNbԨ kTc4кfM@ӻbw}P($+tRsz u]|27:d‚`ЫOi !@8pa-p9v3޽;ewD$E}wމ=6,@II MMMҺ3@]6ڝ>~;HLx A87v4׷;AYZ&W&PRUuczZåQ 6nܘ;@ܧ([xY&MNAxȺYi45';)ǎHJq.yMlxy=E zpRp!oK3fXp6As Z@Vg`ob*S4S1 gBOv2n$7s%"PX@YmUUZr[fL VΕ I@%рnWSܬ4HD+'dHXfX `", f?|o8a?Р?qH$$]l6dn8αn([L5肂̕p8LSSniib}}-Zwُi}yZy=;/?_uuk>G#GTC%;;;)>Rh4JEEźhtSSA`Pg;{Lh(5s("ݵАxy/rrr0 #Y3Fa***/o۟oK%֯7uM^%%1࿛wwe"m̙̝;W[& Iss3z…lٲ x7flY"~łAO "I^Xk7\ѣGN?^-*PJ ~7x9`9+seAE.s't'JwW5 ,YDO:U0 ~ڿ;***~64菜Eq;7ވߟAH\|XS8(UeW| ]H)>~SG, ť@?GZZZ6'|~իz'G X@ n)K,_^-=g͛ĉUTKZk.5{l~3I{jMMnӍepU9ec tW4i6?5`}szꥆ pKϸܢsp xkg5@B`C撃Ω䓑hJEP:#>[buU_Gwֳ'خ&ۭ}h|>?y׵UL N}B=6;ro8ָ\3kVcFY'M@Hm.zrs3v`4O̫ط嶍Q8P_g~a}* {ۭjM(^_1ELKpn: scp8|j?R'F:TgqҔIx8yH72i܏"YM%@Y=](g࠘TO27~G ٢=BV,y.ɾHm~}*-- NSK.?Gw:0m)Fxۗ tnݶ%_Ie Z4  bʔ)X5)ٟ]RRB8>*oYɳ>O?ӧKxo+o&}d W_%'I&o Z3D)ϝwI,&k!ض͌3Xn]J>ogE999g[4B`AH}?韝kF4-$+pH$B$bpX^ n-ˢ9%iEb仕nضZ8A;v^:nWĄ[17yLo2lfA > _~BOeU_?ǵp8̟ȧ۶>|8fj/z"2|kD")iSh dlgTy<@4@BT\ɧU>yh_׮_(H @s\_O<ᙗkԩSg L*Y?^dY`B& 5x9Nѣk 5񸦶VefϞ-v"3bO_2w[GSS k?FmoQ\\,T c_ػ =7BjW3zhia!3 PTԛlDӦ5l2nx"¦;ۦO}QZv-7xBOg>X^e0_T-eQptX 57krs}>?I @d?)^0~x4`ժe B*|[ҷwȶb@o>ܠXt)zBwt*Ç-ϧ2={c6>Oz6ni•WRiY!X׾T\С>8}4YYYIĐW yj\"A&d_?7_4G-l>̝bhd!դsY;֚lÑ#I9D)@ W] Mp!i]8K u:;FQ_@ee,e b$0{vHVW4]mCI.t9gkv퓭yBs4єy_,?g߾}2 d5@ΝNu۶,p"i]A۷6끄֚~)sƍRStv:d r"7رC$ iY!ۓ]H޽}jۆK. 9om;%Btlȑ#ҲB]xM>m+7"/ƍ%K g ۻw[$γ,WXV'ow@1qѣĽ^PA^49tmk&Mr2Q+M@U&P77W1n+WJUb!6&2ovL`wRf޼ {$_-AŠZ;f0ؿ5KHs,#|B#44H!)ΝpEvbŢEHѨ$RSSN4:"II=+.2@tn }"@8U^&Ov|m&Bʻ\-Y vBqB8p4%2﷈FEwۆQyCrB9ȜbC\J+ Ce,;Z>|>Xn8#B&.\é}~Hݽ{wBʺZ7pؾ *F_ deHxRmkujR)\gֆ sk &;7uKM)Ms&CIט:֯_/6N5кiSLpA6Q|W $/@H5}CSV^_!TJEk$̵|6'hll2Bܼ9m9 M6IJ:$Ǔ}GkM ~}0>ߙS:uH$"wD2fqժDR+|y={LAx8ǎY,\&5w0qKEՈpq+wpҥql.qw)+;EmmlV%_{86w$:vSk` "ek]$3&|ui]7rƄ9s>]ũS +kך)پb&~h &Lh +V|Ɂ[d!<`I?$TWǿk6^6lߞSN>99)X5k={2!]( '?} Z /L淾wzu=&R,\;C Sºu{ [i6!hȮ9ufԨGNiƎmw~8LNbѢ8syŜخiW˄T5Zi˖%7/S),ؼÇ-.C>EWi36444̄IELnfz3U(tK/oCuɍuf~:y(l Q^^.B{>iZ w.V[Ң1M8l=PQ+#sUSUUŠA `pq7VN@oÆ vmӄLf "UVj STW;M6\}u_%N|;Wműc6O?KN,b?)//M2 ݉-55vʎ8>61N&F2iY)S*++cҺBO h\"k_ %ee`XͥD4̛Gxcлё  28<5kH!d:'ev[~0gN@@1hwy,| _x!~ um;V\)sɜ(.Nl46Zö5 #nmMni-yM"$yBwPhQZjZ;U-K(,YJcm;?O֠50}z'оgiKZ6̙tIZc  #f*eYH}de_U3|('Nnp4aL6\Y*:urT*>_mYsudgOga޼ybB_\{?`UlYyTTT0|֮]o??@NJgh}{v :dT_djY!ٴ찑ڷ큃#*sg&8|HLPdI@.iiݞSm}*sڤ,ݓ֙mI%2 [w!' d֮M ylf R]}h4*-+Pڪ))= \IJ8p@ZVdN ƵSC{&MHx'd24\)E߾Ne˖I6돢9|6o,-+,{MsvQRϯg+*l@¶kݻuL4вfMLQaH] d{$54/_. $}yOh&O6(,,&XۗݥC,d25@ɢEqA/+SVV&sBQ 4Z'w _0X|WǾǎm'س d!*ݓՖ۶eߠo_E]]mK J=PdIB;=jM^UUUҺ"D%P C/'p /bbBSk(,~̙!A{aeZUVZ}+ i] Z&(V3g.Ye7ŴgY#|)*ZzE<s D2;vXZk0}M[[[+-+a77ku'ev @:XZyIOG#--L"$6o6ק\5ي# E2, 2ЌKu|( L #x&Q3tBS XGX1R _UE2- v S\x vS1c:QLf/@QJgzAp8agsE2 +*+,K3o^HZUo`e9~k(_{6,' Zwn/\tQx'+d2o[44XW<J֭_24ae xo7}@ )A7ވ8/Qs4,>}Z#dgg4@"iZboɴ%+pj| >oUD!}N/B4JҼBSo`2|~iy&*$^<IENDB`openturns-1.9/python/doc/developer_guide/architecture.rst000066400000000000000000000500401307543307100240660ustar00rootroot00000000000000Architecture ============ The project is an open source project. It aims at developing a computational platform designed to carry out industrial studies on uncertainty processing and risk analysis. This platform is intended to be released as an open source contribution to a wide audience whose technical skills are very diverse. Another goal of the project is to make the community of users ultimately responsible for the platform and its evolution by contributing to its maintenance and developing new functions. This architecture specifications document therefore serves two purposes: - to provide the design principles that govern the platform, in order to guide the development teams in their development process; - to inform external users about the platform’s architecture and its design, in order to facilitate their first steps with the platform. To address these questions, the  platform needs to be: - *portable*: the ability to build, execute and validate the application in different environments (operating system, hardware platform as well as software environment) based on a single set of source code files. - *extensible*: the possibility to add new functions to the application with a minimal impact on the existing code. - *upgradable*: the ability to control the impact of a replacement or a change on the technical architecture, following an upgrade of the technical infrastructure (such as the replacement of one tool by another or the use of a new storage format). - *durable*: the technical choices must have a lifespan comparable to the application’s while relying on standard and/or open source solutions. Overview -------- This chapter will describe the general design of and a few design models that are widely used within the platform. The core of the platform is a C++ library made of about 500 classes of various size. The main user interface is a python module, automatically generated from the C++ library using the wrapping software SWIG. It allows for a usage through python scripts of any level of complexity. The library relies on relatively few dependencies, (Lapack, R, TBB, LibXml2), and most of them are optional. Several GUIs have already been built on top of the C++ library or the Python module. A service of modules is provided in order to extend the capabilities of the platform from the outside. .. figure:: Figures/architecture.png :alt: Software architecture overview Software architecture overview The C++ library ~~~~~~~~~~~~~~~ A multi-layered library ^^^^^^^^^^^^^^^^^^^^^^^ The library has a multi-layered architecture materialized by the source tree. The two main layers in the C++ library are the Base layer and the Uncertainty layer. - Base layer: it contains all the classes not related to the probabilistic concepts. It covers the elementary data types (vectors as Point, samples as Samples), the concept of models (Function), the linear algebra (Matrix, Tensor) and the general interest classes (memory management, resource management); - Uncertainty layer: it contains all the classes that deal with probabilistic concepts. It covers the probabilistic modelling (Distribution, RandomVector), the stochastic algorithms (MonteCarlo, FORM), the statistical estimation (DistributionFactory), the statistical testing (FittingTest) A class in the Uncertainty layer can use any class in the Base or the Uncertainty layer. A class in the Base layer can ONLY USE classes in the Base layer. Resource management ^^^^^^^^^^^^^^^^^^^ OpenTURNS uses extensively dynamic memory allocation. In order to tie to the Resource Acquisition Is Initialization (RAII) paradigm, all the memory management is delegated to smart pointers (the Pointer class). The benefits of this approach are: - An easy to implement copy on write mechanism, that permit a significant reduction of the memory footprint by allowing for a large data sharing between objects; - No C-like pointers in members of classes, which permits an automatic generation of the copy constructor, the assignment operator and the destructor of almost all the classes: there is no problem of deep copy versus reference copy; - The resource is released automatically when the objects are outside of the current scope and there is no more reference on the allocated memory; - There is a unique point where to prevent concurrent access in a parallel context, which is a key property for parallelism. The Python module ~~~~~~~~~~~~~~~~~ | The binding of the library is done almost automatically by SWIG (Simplified Wrapper Interface Generator) through a set of SWIG interface files (.i). | The main target language is python. These swig files contain some specific ’glue code’ to each class for the target script language. SWIG parses the library headers and theses swig interface files to generates the corresponding module source yet to be compiled to produce a binary python module, see [fig:swig]. The process is shared between several modules for modularity and to speed up compilation time with parallel builds. .. figure:: Figures/design/swig.png :alt: Python module generation process Python module generation process Software environment -------------------- This section details the technical elements required by the OpenTURNS platform, namely the system requirements, the tools and the development environment of the project. Target platforms ~~~~~~~~~~~~~~~~ The OpenTURNS platform is meant to carry out uncertainty treatment studies in a scientific environment. Most of the scientific codes being available on Unix platforms, OpenTURNS is naturally designed to run on this family of systems. Unix being a standard with multiple implementations, available on different architectures, this gives a wide choice of target platforms. Linux is currently the most attractive Unix system for the OpenTURNS project, it was chosen as the main target system for the project’s development as well as for the delivery of the different versions. The partners involved in the project have each chosen different Linux distributions, for technical and historical reasons. Therefore, it was decided to support several distributions, a choice that should not be seen as final or minimal. The distributions considered here include for example this list: +--------------------+-------------------+ | **Distribution** | **Version** | +====================+===================+ | Debian | 8 “Jessie” | +--------------------+-------------------+ | Ubuntu | 14.04 “Trusty” | +--------------------+-------------------+ | Windows | 7 | +--------------------+-------------------+ The primary development platform is Linux, and is known to work on various other distributions. The Windows version is obtained by cross-compilation using MinGW-w64. .. _dependencies: Dependencies ~~~~~~~~~~~~ The tools chosen for the development of the platform are: +---------------------------------------+-----------------------------------------------------------+-------------------+ | **Category** | **Name** | **Version** | +=======================================+===========================================================+===================+ | Configuration | `CMake `_ | 2.8 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | C/C++ compiler | `GCC `_ | 3.3.5 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Linear algebra | `BLAS `_ | 3.0 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Linear algebra | `LAPACK `_ | 3.0 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Linear algebra (optional) | `HMat `_ | 1.2 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Analytical parser (optional) | `muParser `_ | 1.32 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Special functions (optional) | `Boost `_ | 1.46 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Optimization (optional) | `NLopt `_ | 2.4 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | CSV parser (optional) | flex | 2.5.33 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | CSV parser (optional) | bison | 2.4 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | XML support (optional) | `LibXml2 `_ | 2.6.27 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Multithreading (optional) | `TBB `_ | 2 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Python support | `Python `_ | 2.6 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Plotting library (optional) | `Matplotlib `_ | 1.1 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | C++/Python wrapper | `SWIG `_ | 1.3.35 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Statistics library (optional) | R | 2.0.1 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Version control | `Git `_ | 2.5 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | ReSt to HTML (optional for doc) | `Sphinx `_ | 1.5.1 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Sphinx extension (optional for doc) | `Numpydoc `_ | 0.4 | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Sphinx extension (optional for doc) | `nbsphinx `_ | N/A | +---------------------------------------+-----------------------------------------------------------+-------------------+ | Python notebook (optional for doc) | `IPython `_ | N/A | +---------------------------------------+-----------------------------------------------------------+-------------------+ | LaTeX to XML (optional for doc) | `Tralics `_ | 2.14.5 | +---------------------------------------+-----------------------------------------------------------+-------------------+ The versions given here are only meant as indications of minimum version and newer ones may be used. Compilation infrastructure ~~~~~~~~~~~~~~~~~~~~~~~~~~ The historic autotools compilation infrastructure was replaced by CMake. CMake is a lot faster, and the resulting infrastructure is easier to maintain. It covers: - The detection and configuration aspects of the platform; - The dependency management of the sources; - The generation of parallel makefiles; - The regression tests. CMake could also provide a way to compile the Windows version using Microsoft compilers. Packaging ~~~~~~~~~ The team officially provides binaries for the Debian operating system, and Windows. Note that is officially supported in Debian: it can be installed easily from the debian software repositories. Experimental packages may be available for some RPM-based distributions such as Fedora, CentOS and openSUSE. Autobuilder ~~~~~~~~~~~ The project provides developers a continuous integration environment. It consists in an daemon monitoring the version control software for changes. It assumes new code to be involved in regression test. Also developers should regularly commit to the code base to ensure the origin of a problem is quickly detected. The autobuilder is triggered at each pull-request. The current test environment consists of the build on each of these platforms: - debian 6 x86\_64 - debian 6 i686 - mingw-w64 i686 (wine) - msvc 2010 i686 (wine) The result of the autobuilder made public to anyone registered to the mailing list ``commits@openturns.org``. A summary of each build is provided by mail with links to the logs stored on the server. Design patterns --------------- Introduction ~~~~~~~~~~~~ Software design shows the recurrence of some patterns, whether within the same piece of software or in several applications (which can differ in many ways). These patterns have been catalogued, described and implemented in numerous situations that prove their universality and their ability to solve recurring problems that the software architect is faced with. The following sections give an overview intended as much for the reader’s understanding of the document as to establish a common vocabulary for software architect. The latter ones will find here standard design diagrams applied to the specific case of , which can help them better apprehend the tool’s specificities and the design and implementation choices that were made. Bridge pattern ~~~~~~~~~~~~~~ | The bridge pattern is a design pattern used in software engineering which is meant to “decouple an abstraction from its implementation so that the two can vary independently”. The bridge uses encapsulation, aggregation, and can use inheritance to separate responsibilities into different classes. | When a class varies often, the features of object-oriented programming become very useful because changes to a program’s code can be made easily with minimal prior knowledge about the program. The bridge pattern is useful when both the class as well as what it does vary often. The class itself can be thought of as the implementation and what the class can do as the abstraction. The bridge pattern can also be thought of as two layers of abstraction. This pattern is one of the most widely used in . Some examples are: - Drawable, that separate the generic high level interface of a drawable from the specific low level interface of the several drawable specializations; - Distribution, see [fig:bridge], that exposes a high level interface of the concept of probability distribution whereas the DistributionImplementation class exposes the low level interface of the same concept. .. figure:: Figures/modeling_notions/bridge.png :alt: Bridge pattern example. Singleton pattern ~~~~~~~~~~~~~~~~~ The Singleton is a pattern used to ensure that at any given time, there is only one instance of a class (A); it provides an access point for this unique instance. This is implemented by creating a class (Singleton) with a static private attribute (uniqueInstance) initialized with an instance of class A and whose reference (or pointer) is returned by a static method (instance). Figure [fig:singleton] illustrates the Singleton pattern. .. figure:: Figures/modeling_notions/singleton.png :alt: Singleton structure. It is a very common pattern that allows to find and share an object (which must remain unique) in different portions of code. Examples of such objects include shared hardware resources (standard output, error, log, etc.), but also internal functions that cannot or must not be duplicated (e.g. a random number generator). For example, the classes ResourceMap and IdFactory follow this pattern. Factory pattern ~~~~~~~~~~~~~~~ This pattern allows to define a unique interface for the creation of objects belonging to a class hierarchy without knowing in advance their exact type. Figure [fig:factory] illustrates this pattern. The creation of the concrete object (ClassA or ClassB) is delegated to a sub-class (ClassAFactory or ClassBFactory) which chooses the type of object to be created and the strategy to be used to create it. .. figure:: Figures/modeling_notions/factory.png :alt: Factory structure. This pattern is often used to dynamically create objects belonging to related types (e.g. to instantiate objects within a GUI according to the user’s behavior). It can also be used to back up and read again a document written in a file by automatically re-instantiating objects. It is a pattern that makes code maintenance easier by clearly separating the objects and their instantiation in distinct and parallel class hierarchies. For example, the classes DistributionFactory, ApproximationAlgorithmImplementationFactory, BasisSequenceFactory follow this pattern. Strategy pattern ~~~~~~~~~~~~~~~~ The Strategy pattern defines a family of algorithm and makes them interchangeable as far as the client is concerned. Access to these algorithms is provided by a unique interface which encapsulates the algorithms’ implementation. Therefore, the implementation can change without the client being aware of it. .. figure:: Figures/modeling_notions/strategy.png :alt: Strategy structure. This pattern is very useful to provide a client with different implementations of an algorithm which are equivalent from a functional point of view. It can be noted that the Factory pattern described earlier makes use of the Strategy pattern. For example, the classes ComparisonOperator, HistoryStrategy follow this pattern. Composite pattern ~~~~~~~~~~~~~~~~~ The Composite pattern is used to organize objects into a tree structure that represents the hierarchies between component and composite objects. It hides the complex structure of the object from the client handling the object. .. figure:: Figures/modeling_notions/composite.png :alt: Composite structure. Figure [fig:composite\_tree] shows an example of tree modeled by the Composite. The Composite objects make up the tree nodes whereas the leaves can be any concrete object deriving from Component. .. figure:: Figures/modeling_notions/composite_tree.png :alt: Example of tree modeled by the Composite. The Composite pattern is an essential element of the design model for the  platform. It can be used to model numerical function composition, random vector composition, etc. It can be found in several aspects of the modeling brick. Any related objects tree structure can rely on the Composite pattern with benefit. For example, the classes ComposedDistribution, CompositeRandomVector, ComposedFunction follow this pattern. openturns-1.9/python/doc/developer_guide/coding_rules.rst000066400000000000000000000656321307543307100240760ustar00rootroot00000000000000Coding rules ============ Packages -------- In order to structure the code of the  project, the various elements (classes, functions, libraries, data) are logically organized in packages. This chapter describes the rules to be followed for the definition, management and use of these packages. | The code is mainly located in a single library. This library is organized as a set of modules. However, there may be several interacting libraries in the future. | The library is interfaced with Python through a Python module exposing almost all the classes and operators. For the moment, the entire set of classes is located in **libOT.so** for the dynamic part and in **libOT.a** for the static part. *Example showing the import of modules via the **openturns** Python package* :: import openturns import openturns.base import openturns.uncertainty *Example showing the direct import of module operators or classes via the **openturns** Python package* :: from openturns import Point from openturns.base import Sample from openturns.uncertainty import RandomVector File names ---------- The definition of filenames obeys a few rules described below, according to the programming languages used. A general rule is preliminarily defined in order to facilitate the automatic generation of the **Makefile** files. The file names consist of sequences of characters separated by a dot. The first part of the name is called the *base* and the second is called the *suffix* (or *extension*). +---------------------+-----------------------------------------------------------------------------------------------------------+ | **Extension** | **Description** | +=====================+===========================================================================================================+ | **.hxx .hh .hpp** | Header file containing the declaration of functions and classes and the definition of templates for C++ | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.cxx .cc .cpp** | Source code file containing the definition (implementation) of C++ functions and classes | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.c** | Source code file containing the definition of C functions | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.h** | Header file containing the declaration of functions in C | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.py** | Python file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.R** | R file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.cmake** | CMake script | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.sh** | Shell script | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.bat** | DOS script | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.conf** | configuration file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.csv** | Comma Separated Value file (for samples) | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.i** | SWIG interface file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.in** | Template file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.log** | Output log file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.mws** | Maple script file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.nsi** | Windows installer file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.sce** | Scilab script file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.a** | Archive file containing statically linked objects | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.so** | Shared object file containing dynamically linked objects | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.txt** | Text file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.xml** | XML file (mainly for wrapper description file) | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.ll** | Lex scanner file | +---------------------+-----------------------------------------------------------------------------------------------------------+ | **.yy** | Yacc parser file | +---------------------+-----------------------------------------------------------------------------------------------------------+ *For example, it is not recommended to give the following names to two files in the same directory:* :: matrix.cxx Matrix.cxx C++ Files ~~~~~~~~~ *Example: one file per class:* :: Sample.hxx declares class Sample Matrix.hxx declares class Matrix ... *Incorrect example: one file for all classes of a model:* :: Model.hxx # contains all the declaration of all the classes of the internal model The preceding rule has one exception: in order to facilitate the use of several related classes, the header files belonging to the same module are grouped in a single header file, which bears the same name as the module and is prefixed by **OT**. *Example: using all the classes of the Base module:* :: #include "openturns/OTBase.hxx" Header files ~~~~~~~~~~~~ The header files are used to declare functions and classes (they are sometimes called *interface definition* or *interface specification*). *Example for a file named **Sample.hxx*** :: #ifndef OPENTURNS_SAMPLE_HXX #define OPENTURNS_SAMPLE_HXX ... #endif /* OPENTURNS_SAMPLE_HXX */ *Example of header file inclusion* :: #include "openturns/OSS.hxx" #include "openturns/Point.hxx" *Example for the inclusion of system function or external library header files* :: #include #include *Example for the inclusion of non standard system function header files* :: extern "C" ( #include ) Test files ~~~~~~~~~~ *Example of names for test files* :: t_Matrix_construction.cxx t_Matrix_assignment.cxx t_Matrix_bug7654.cxx t_Matrix_vectorMultiplication.cxx C++ --- This section deals with coding rules for the C++ language. Compilation flags ~~~~~~~~~~~~~~~~~ It is helpful to enable some compilation warnings to avoid questionable constructions. You may also want to enable debug symbols for further use with a debugger. *GCC compilation:* :: mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wno-unused-parameter" .. make Namespaces ~~~~~~~~~~ *Example of **OpenTURNS** namespace definition for simple types:* :: / ** * @file OTtypes.hxx * ... * / namespace OT { /* < Declarations of simple types > * / /* < Declarations of objects and functions > * / }; // Alias for the direct use of XXX namespace OpenTURNS = OT; *Example of use by making all the definitions contained in the namespace available:* :: #include "openturns/OT.hxx" using namespace OT; void f(Scalar n); Names ~~~~~ Names of classes, variables and methods consist of concatenated ful words. Each word begins with an uppercase, except for the first one. The first word begins with a lowercase except for class names and static methods or variables. No abbreviations are allowed, except if it is found in the literature, for example FORM. *Example:* :: class Sample { ... }; /* end class Sample */ *Example:* :: int main() { Bool myCondition = false; ... } *Example:* :: class Environment : public Object { ... private: Scalar density_; // data_; }; *Example of a correct definition:* :: Vector::Vector (Bool someProperty, UnsignedInteger size, Scalar elt) : property_(someProperty) , data_(size, elt) { } *Examples of incorrect definitions:* :: Vector::Vector (Bool someProperty, UnsignedInteger size, Scalar elt) : data_(size, elt) , property_(someProperty) // order of initialization { } Vector::Vector (Bool someProperty, UnsignedInteger size, Scalar elt) { property_ = someProperty; data_ = Collection(size, elt); // requires an assignment after the construction // processing is longer for complex objects! } *Example: declaration of a pure virtual class A and of class B, derived from A:* :: class A { public : A(); // constructor virtual ~A(); // destructor virtual const char * getClassName() = 0; // pure virtual method }; class B : public A { public : const char * getClassName() { return "B"; } }; *Incorrect definitions leading to an execution error:* :: A::A() { cout << getClassName() << " created" << endl; // B does not exist yet! } A::~A() { cout << getClassName() << " destroyed" << endl; // B no longer exists! } B::B() : A() { } *Write method for the **name** attribute:* :: void setName (SimpleType); void setName (const ComposedType &); *Read method for the **name** attribute:* :: SimpleType getName() const; const ComposedType & getName() const; *Example:* :: class Sample { public : //* return the dimension of the sample UnsignedInteger getDimension() const; //* return the i-th element Point operator[] (UnsignedInteger i); const Point & operator[] (UnsignedInteger i) const; }; *Example:* :: class Sample { public : //* return the number of the rod inline UnsignedInteger getDimension() const { return dimension_; } //* compute the mean point of the sample inline Point computeMeanValue() const; }; //* inline methods Point computeMeanValue() const; { /* ... some non trivial processing */ return meanValue; } Explicit keyword ~~~~~~~~~~~~~~~~ Marking a single argument class constructors with the the *explicit* keyword allows to avoid unwanted conversions. It is relevant for constructors that have a single-argument, and also for constructors that have a single mandatory argument plus optional arguments. *Single argument:* :: class A { public : explicit A(const Point value); }; *Optional argument:* :: class A { public : explicit A(UnsignedInteger max = 6); }; *Mandatory argument and optional argument:* :: class A { public : explicit A(const Point value, UnsignedInteger max = 6); }; Inheritance ~~~~~~~~~~~ *Example: the Point class derives from the Vector class* :: class Point : public std::vector { public: Point(Scalar x, Scalar y, Scalar z); }; Point::Point(Scalar x, Scalar y, Scalar z) : std::vector(3) { (*this)[0] = x; (*this)[1] = y; (*this)[2] = z; } *Example:* :: class Object { public : Object(); virtual ~Object(); }; Function and method declaration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: /** @brief * * * @param argument_1 * @param argument_2 * @return * @throw */ ReturnType functionName ( TypeArgument_1 argument_1, TypeArgument_2 argument_2 ); *Correct example:* :: void send(const String & message); *Incorrect Example:* :: void send(String message); *Correct example:* :: Buffer & append(UnsignedInteger); Buffer & append(const String &); Buffer & append(Scalar); *Incorrect Example:* :: Buffer & append(const char *fmt, ...); Buffer & append(const char *str = 0, double d = 0., int i = 0); Variable declaration ~~~~~~~~~~~~~~~~~~~~ An atomic variable type (integer, bool, pointer, ...) must be always initialized to a value to avoid undefined behavior. This includes initialization of class attributes. *Correct example:* :: String filename (""); // library file name UnsignedInteger nbElements = 0; // number of elements into the data file UnsignedInteger i = 0; Scalar f = 0.0; *Accepted example:* :: UnsignedInteger i = 0, j = 0, k = 0; // indices *Incorrect Example:* :: / * Multiple declarations and different types * / UnsignedInteger i, j, tab[20], **l, *numberOfElements; String filename, *yourname, myname; Constant declaration ~~~~~~~~~~~~~~~~~~~~ The const keyword must be used as much as possible. Float constants must include the decimal separator and a at least a digit to explicitely distinguish them from integers. *Example:* :: const Scalar f = 6.0; const UnsignedInteger maximumIterations = 32; const char printFormat[] = "%s:line %d, %s"; *Incorrect Example:* :: #define MAXIMUM_ITERATIONS 32; #define PRINT_FORMAT "%s:line %d, %s" Comments and internal documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: /** * @brief short description * * * * Copyright 2005-20YY Airbus-EDF-IMACS-Phimeca */ These comments should avoid: - mentioning the names of variables; - being a simple transcription of the code into English. Memory allocation and deallocation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section discusses general rules for allocating and freeing memory. It will later be supplemented by rules regarding the use of basic classes in order to manage the lifecycle of objects in memory. *Example to favor:* :: { Scalar sections1[MAX]; // a fixed size array vector sections2; // an extensible vector list volumes; // a list of volumes /* ... */ } *Example to avoid:* :: { Scalar *sections = new Scalar[MAX]; list *volumes = new list; /* ... */ delete [ ] sections; delete volumes; } *Correct example:* :: { Volume *volume = new Volume; // memory allocation + // constructor call /* ... */ delete volume; // destructor call + volume = 0; // memory deallocation } *Incorrect example:* :: { Volume *volume = (Volume*)malloc(sizeof(Volume)); // memory allocation but // no constructor call /* ... */ free(volume); // no destructor call before volume = 0; // memory deallocation } *Example:* :: A * a = new A[40]; // calls the constructor 40 times ... :: delete a; // incorrect: the table is freed, // the ~A destructor isn't called :: delete [] a; // correct: the table is freed, // the ~A destructor is called 40 times *List of declaration files for the smart pointer:* :: #include "openturns/Pointer.hxx" Assignment and initialization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Complex types (class types) must use copy constructors if available instead of using the default constructor and then the copy operator for performance. Atomic types (integer, bool, ...) can use the copy operator for readability. *Example:* :: Point p2(p1); Bool a = b; *Example to avoid:* :: String message; message = "Computation complete"; // assignment after construction String message(); // declaration of a function prorotype Instructions ~~~~~~~~~~~~ *Example:* :: i = 0; while (i < MAX) { ++i; f(i); } *Examples to avoid if possible:* :: a = b = c = 0; // multiple assignments f(++i); // readability v = *i++; // performance and understandability for(i = 1, j = 2, k = 3; i < N; j++, i++); // understandability and readability *Incorrect examples:* :: buffer += "test", cout << buffer; i = 1; // heterogeneous processing & // different objects while(f(++i), i < MAX); // processing carried out before the test *Prohibited example:* :: void foo() { for(...) { phase1 : /* ... */ phase2 : if(errno != 0) goto erreur; if (/* a test */) goto phase2; } erreur : /* error handling */ } *Note: error handling can be easily replaced with an exception handling, and the use of **goto** for the needs of algorithms can always be replaced with a conditional structure or a loop.* *Example:* :: Scalar compute(UnsignedInteger n) { Scalar result; if(n < MIN || n > MAX) { char msg[BUFSIZ]; // automatic allocation for the processing sprintf (msg, "n = %d is out of range, valid range is [%d, %d]", n, MIN, MAX); throw Exception(msg); } /* ... */ return result; } *Examples to avoid:* :: Scalar compute(UnsignedInteger n) { Scalar result; Char msg[BUFSIF]; // allocation unnecessary if no // error if(n < MIN || n > MAX) ... } *Correct example:* :: switch (errno) { case ENOENT : msg = " ... "; :: break; case EACCESS : msg = " ... "; break; default : msg = "unknown error"; break; } *Accepted example - processing multiple targets with the same block:* :: switch (errno) { case ENOENT : case EACCESS : msg = " impossible to access file "; break; default : /* ... */ break; } *Incorrect example:* :: switch (errno) { case 1 : // it is a value msg = " ... "; // // "break" is missing, // processing continues in ENOENT case ENOENT : msg = " ... "; break; default : // "break" is missing at the // end of the "default" case msg = "unknown error"; } *Incorrect example - use of the switch as a goto:* :: switch (phase) { case PHASE1 : doPhaseOne(); case PHASE2 : doPhaseTwo(); break; default : /* ... */ } *Example:* :: int main (int argc, char *argv[]) { /* ... */ return EXIT_SUCCESS; } Exceptions ~~~~~~~~~~ The ability to raise and handle exceptions is one of the strongest features of C++. However, writing functions and methods that guarantee a safe behavior when faced with exceptions remains a difficult aspect of programming. This chapter describes how to define and use exceptions in the source code. *Example of **Exception** use* :: class Exception { public : Exception (const char *description, const char * comment = 0); virtual ~Exception() throw(); /* ... */ friend ostream & operator<< (ostream &, const Exception & e); }; *Example of specialization of **Exception** in order to report an off-range error* :: class OutOfBoundException : public Exception { public: OutOfBoundException(/* ... */) : Exception(/* ... */) { } }; *Example of specialization of **Exception** in order to report an off-range error with a macro-instruction* :: NEW_EXCEPTION(OutOfBoundException); *Incorrect Example:* :: try { // phase 1 // phase 2 if (result != OK) throw GotoPhase4(); // phase 3 :: /* ... */ catch (GotoPhase4 e) { /* ... */ } // phase 4 Error handling and error messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *Example:* :: String message; Log::Debug(message); Log::Info(message); Log::User(message); Log::Warning(message); Log::Error(message); These rules refer to the classes and methods in the Python layer using the services of the internal model and the solvers. Python ------ Modules and packages ~~~~~~~~~~~~~~~~~~~~ *Example of tolerated notations:* :: import matplotlib from matplotlib import pylab import numpy as np *Incorrect examples:* :: from scipy import * Names ~~~~~ *Examples: RandomVector, Sample.* *Examples:* :: rv = RandomVector() dim = rv.getDimension() Comments and internal documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *Example of documentation string for the class **AnotherSample**:* :: # # # class AnotherSample : """ this class is designed to ... """ # # def __init__(self, name, type, range = None, doc = "") : """constructor -- """ ... # # def computeSomething(self, value): """run the well-known Schmoll Algorithm... """ Indentation ~~~~~~~~~~~ The python code should use 4 spaces per indentation level. For more information about python formatting, refer to `PEP8 `_. openturns-1.9/python/doc/developer_guide/developer_guide.rst000066400000000000000000000023071307543307100245510ustar00rootroot00000000000000.. _contribute: ========== Contribute ========== This document aims to give an overview of how to contribute to the development. There are several ways to contribute. Providing us with feedback on your own experience using the software is extremely valuable for the other users as well as our developers. There exists many channels for you to contact us: - We host two mailing lists at sourceforge, one for `users `_ and the other one for `developers `_. - Bugs can be reported on our `trac server `_. - Once a year, one of the partners hosts the OpenTURNS Users day which is a unique occasion for users to meet up and share their experience using the library. .. warning:: Please consider using the mailing list first if you have any doubt whether you have bumped into a real bug or not. .. toctree:: :maxdepth: 1 architecture library_development sphinx_documentation latex_documentation module_development wrapper_development git_workflow coding_rules windows_port windows_native_port validation/validation openturns-1.9/python/doc/developer_guide/git_workflow.rst000066400000000000000000000054651307543307100241340ustar00rootroot00000000000000Git workflow ============ Proposing a pull request ------------------------ Patches are welcome to our library repository: https://github.com/openturns/openturns. Here are the steps required to propose a modification with git: 1. Setup git for first time use:: git config --global user.name "John Doe" git config --global user.email "johndoe@example.com" git config --global branch.autosetuprebase remote 2. Register on `GitHub `_ and add a new ssh key in https://github.com/settings/ssh:: ssh-keygen -f ~/.ssh/id_rsa-github cat ~/.ssh/id_rsa-github.pub 3. Fork the library repository https://github.com/openturns/openturns and clone it via ssh:: git clone git@github.com:doe/openturns.git doe cd doe 4. Create a branch from master with a relevant topic name:: git checkout -b branch_name master 5. Commit your changes, split your work in as much commits as needed to ease reviewing:: git add # Add current state of files to commit git commit ... git add git commit To write a nice commit message, keep a short commit title (less than 50 characters), leave a blank line, then add a mor detailed description. 6. Push the new branch to your personal repository:: git push --set-upstream origin branch_name 7. Create a pull request on https://github.com/openturns/openturns That's it, your code is ready for reviewing, but it may not be accepted as is. Checkout the comments made after your pull request and the automated test result. You may want to push more commits to that branch as required. Propose a separate pull request for each topic you want to address. Here are more resources on `using pull requests `_ and `Git `_. Keep your local repository in sync ---------------------------------- You may want to keep your personal repository in sync with the main repository before starting new developments. 1. Add upstream remote repository:: git remote add upstream https://github.com/openturns/openturns.git 2. Retrieve usptream:: git fetch upstream 3. Merge upstream master branch to your local personal master branch:: git checkout master git merge upstream/master 4. Push to your remote personal repository:: git push Delete a branch --------------- Once your pull-request is merged, you may want to delete the branch. 1. Delete local branch:: git branch -d branch_name 2. Delete remote branch:: git push origin :branch_name Tagging a release ----------------- 0. List existing tags:: git tag 1. Get the master branch:: git checkout master 2. Create the tag on local repository:: git tag -a v2.0 -m 'version 2.0' 3. Push the tag on the remote repository:: git push origin v2.0 openturns-1.9/python/doc/developer_guide/latex_documentation.rst000066400000000000000000000027121307543307100254550ustar00rootroot00000000000000.. _latex_doc: Latex documentation =================== This section deals with the old Latex documentation, located in a separate repository and having it's own releases. The documentation is mainly 3-folds. It contains: - Use Cases Guide - Examples Guide - Reference Guide, which is more literate and deals with the theoretical background of the methods featured in the library. Retrieve the documentation -------------------------- #. Install the required tools: tralics, xsltproc and the usual latex packages. #. Fork the repository https://github.com/openturns/doc.git: :: git clone git@github.com:YOURUSERNAME/doc.git Develop the documentation ------------------------- #. Add your contribution, update the CMakeLists when adding new files. #. Build the documentation: :: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$PWD/install .. make #. Check the PDF and HTML outputs :: make install xpdf install/share/doc/openturns-doc/pdf/OpenTURNS_ReferenceGuide.pdf firefox install/share/doc/openturns-doc/html/ReferenceGuide/index.xhtml Run embedded scripts -------------------- #. Detect your openturns installation: :: cmake -DUSE_OPENTURNS=ON \ -DOpenTURNS_DIR=/lib/cmake/openturns .. #. Run tests :: make check and all the tests should be successful else check the log file test/Testing/Temporary/LastTest.log. openturns-1.9/python/doc/developer_guide/library_development.rst000066400000000000000000000314371307543307100254630ustar00rootroot00000000000000Library development =================== This section provides informations on how to develop within the perimeter of the library and it’s documentation. If you are willing to contribute the actual development of the library, please consider reading our coding guidelines and contact us on the developer's mailing list. Install a development version ----------------------------- Install the required dependencies ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ See :ref:`dependencies` for the system requirements. Download openturns ~~~~~~~~~~~~~~~~~~ You can retrieve the development master branch through the git repository by issuing the following command: :: git clone https://github.com/openturns/openturns.git cd openturns Or, you can pick up a stable version tarball: :: wget https://github.com/openturns/openturns/archive/v1.7.tar.gz tar xjf v1.7.tar.gz cd openturns-1.7 You may want to install the provided R package enabling additional statistical capabilities: :: R CMD INSTALL utils/rot_1.4.6.tar.gz You can verify it’s correct installation by typing: :: R --vanilla <<< 'library(rot)' Build openturns ~~~~~~~~~~~~~~~ :: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$PWD/install .. make install -j4 Run tests ~~~~~~~~~ :: make tests ctest -j4 and all the tests should be successful else check the log file Testing/Temporary/LastTest.log. Adding a single class to an existing directory ---------------------------------------------- This how-to explains the process that must be followed to fully integrate a new class that provides an end-user facility (e.g. a new distribution). We suppose that this class will take place in an existing directory of the sources directories. First, add the class to the C++ library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #. Create ``openturns/MyClass.hxx`` and ``MyClass.cxx`` in appropriate subdirectories of lib/src. The files must have the standard header comment, with a brief description of the class in Doxygen form and the standard reference to the LGPL license. For the header file ``MyClass.hxx``, the interface must be embraced between the preprocessing clauses: :: #ifndef OPENTURNS_MYCLASS_HXX #define OPENTURNS_MYCLASS_HXX BEGIN_NAMESPACE_OPENTURNS class OT_API MyClass { CLASSNAME; public: // default constructor MyClass(); ... }; END_NAMESPACE_OPENTURNS #endif // OPENTURNS_MYCLASS_HXX to prevent from multiple inclusions. See any pair of .hxx/.cxx files in the current directory and the PGQL document for the  coding rules: case convention for the static methods, the methods and the attributes, trailing underscore for the attribute names for naming a few. #. Modify the ``CMakeLists.txt`` file in the directory containing ``MyClass.hxx`` and ``MyClass.cxx``: - add ``MyClass.hxx`` to the headers using ``ot_install_header_file ( MyClass.hxx )``. - add ``MyClass.cxx`` to the sources using ``ot_add_source_file ( MyClass.cxx )``. #. Add ``MyClass.hxx`` to the file ``OTXXXXXX.hxx``, where ``XXXXXX`` is the name of the current directory. #. Create a test file ``t_MyClass_std.cxx`` in the directory lib/test. This test file must use the standard functionalities of the class MyClass. #. Create an expected output file ``t_MyClass_std.expout`` that contains a verbatim copy of the expected output (copy-paste the *validated* output of the test in this file). #. Modify the ``CMakeLists.txt`` file in lib/test: add ``ot_check_test ( MyClass_std )`` in this file. #. If the validation of your class involved advanced mathematics, or was a significant work using other tools, you can add this validation in the validation/src directory. - copy all of your files in the validation/src directory. - modify the validation/src/CMakeLists.txt file by appending the list of your files to the list of files to install. #. You may want to update the Changelog file to mention new classes, bug fixes... That’s it! Your class is integrated to the library and will be checked for non-regression in all the subsequent versions of OpenTURNS, assuming that your contribution has been incorporated in the “official”  release. But nobody can use it! Second, add your class to the Python interface ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #. Create MyClass.i in the python/src directory. In most situations, it should be: :: // SWIG file MyClass.i %{ #include "openturns/MyClass.hxx" %} %include MyClass_doc.i %include openturns/MyClass.hxx namespace OT { %extend MyClass { MyClass(const MyClass & other) { return new OT::MyClass(other); } } // MyClass } // OT #. Create MyClass\_doc.i.in docstring documentation in the python/src directory. This will be part of the HTML documentation generated by sphinx. Document every method of your class that’s not inherited. In most situations, it should look like this: :: %feature("docstring") OT::MyClass "MyClass class. Available constructors: MyClass() MyClass(*designPoint, limitStateVariable, isInFailureSpace*) Notes ----- Structure created by the method run() of a :class:`~openturns.Analytical` and obtained thanks to the method *getAnalyticalResult*. Parameters ---------- designPoint : float sequence Design point in the standard space resulting from the optimization algorithm. limitStateVariable : :class:`~openturns.Event` Event of which the probability is calculated. isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space. Examples -------- >>> import openturns as ot >>> dp = ot.Normal().getRealization() >>> inst = ot.MyClass(dp, 4.8) >>> print(inst)" // --------------------------------------------------------------------- %feature("docstring") OT::MyClass::foo_method "... " // --------------------------------------------------------------------- ... #. Modify the CMakeLists.txt file in python/src: add MyClass.i, MyClass\_doc.i.in to the relevant ``ot_add_python_module`` clause. #. Locate and modify the file yyyy.i, where yyyy is the name of the python module related to MyClass, to include MyClass.i in the correct set of .i files (see the comments in yyyy.i file). In order to identify the correct python module, remember that the modules map quite closely the source tree organization. #. Create a test file ``t_MyClass_std.py`` in the directory python/test. This test implements the same tests than ``t_MyClass_std.cxx``, but using python. #. Modify the CMakeLists.txt file in python/test: - add ``t_MyClass_std.py`` to the tests using ``ot_pyinstallcheck_test ( MyClass_std )``. Document your contribution more thoroughly ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If your class introduces important mathematical concepts or impacts the library architecture it may be useful to add some more details in the latex documentation, see :ref:`latex_doc`. That’s all, folks! Some timings from an  Guru: 2 days of work for the most trivial contribution (a copy-paste of a class with 5 methods, no mathematical or algorithmic tricks). For a well-trained  contributor, a user-visible class with a dozen of methods and well-understood algorithms, a new class should not be less than a week of work... Adding a set of classes in a new subdirectory --------------------------------------------- This how-to explains the process that must be followed to fully integrate a set of classes that provides an end-user facility (e.g. a new simulation algorithm) developed in a new subdirectory of the existing sources. The task is very similar to the steps described in the how-to, only the new steps will be described. We suppose that the subdirectory has already been created, as well as the several source files. There are three new steps in addition to those of the how-to: the creation of the cmake infrastructure in the new subdirectory, the modification of the infrastructure in the parent directory and the modification of the infrastructure in the root directory. CMake infrastructure in the parent subdirectory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You have to set up the recursive call of Makefiles from a parent directory to its subdirectories, and to aggregate the libraries related to the subdirectories into the library associated to the parent directory: #. add NewDir subdirectory to the build: :: add_subdirectory (NewDir) CMake infrastructure in the new subdirectory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You have to create a CMakeLists.txt file. Its general structure is given by the following template: :: # -*- cmake -*- # # CMakeLists.txt # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # Register current directory files ot_add_current_dir_to_include_dirs () ot_add_source_file (FirstFile.cxx) # ... ot_add_source_file (LastFile.cxx) ot_install_header_file (FirstFile.hxx) # ... ot_install_header_file (LastFile.hxx) # Recurse in subdirectories add_subdirectory (FirstDir) # ... add_subdirectory (LastDir) Version control --------------- The versioning system used for the development of the whole platform is Git. The git repositories are hosted at `Gihub `_ where sources can be browsed. .. figure:: Figures/BrowseSource.png :alt: GitHub interface: the source browser Trac ~~~~ Trac is an open source, web-based project management and bug-tracking tool. Trac allows hyperlinking information between a bug database, revision control and wiki content. It also serves as a web interface to several revision control systems including Subversion. The `timeline `_ lists the recent changes ticket database and wiki pages: .. figure:: Figures/Timeline.png :alt: Trac interface: the timeline Trac provides a `bug-tracker `_. The snapshot shows the list of active tickets. .. figure:: Figures/Tickets1.png :alt: Trac interface: the ticket report view Each ticket features attributes to help classification, interactive comments and file attachment. This snapshot exposes the details of a ticket: .. figure:: Figures/Tickets2.png :alt: Trac interface: details of a ticket report Other requirements ------------------ Namespace ~~~~~~~~~ All the classes of the library are accessible within a single namespace named OT and aliased as OpenTURNS. It allows to insulate these classes from classes from another project that could share the same name. Macros are provided to enclose your code in the namespace as follow: :: BEGIN_NAMESPACE_OPENTURNS // code END_NAMESPACE_OPENTURNS Internationalization ~~~~~~~~~~~~~~~~~~~~ The platform is meant to be widely distributed within the scientific community revolving around probability and statistics, which is essentially an international community. Therefore, the platform should be designed so as to be adjustable to the users, particularly those who do not speak English [1]_. This involves not using any messages directly in the source code of the platform, but rather to create a resource catalogue that can be loaded, according to the locale setting of the user, when the application is launched. Another consequence of internationalization is the need for the Unicode extended character set to be used for all strings. Accessibility ~~~~~~~~~~~~~ The platform shall be accessible to disabled users. This has implications on the ergonomics and the design of the User Interface, particularly the GUI which should offer keyboard shortcuts for any available function as well as keyboard-based (rather than mouse-based) mechanisms to handle and select objects. .. [1] English has been chosen as the native language for the platform. openturns-1.9/python/doc/developer_guide/module_development.rst000066400000000000000000000040161307543307100252750ustar00rootroot00000000000000Module development ================== This section deals with the process of creation of a new extra module. Adapt an existing template -------------------------- #. Fork the C++ template module repository `OTTemplate `_, rename it from the project settings and clone it: :: git clone https://github.com/yourusername/otmymodule.git #. Adapt the template to your module: :: ./customize.sh OTMyModule MySuperClass This command changes the module name into MyModule in all the scripts, and adapt the example class to the new name MyClass. The script can then be discarded: :: git rm customize.sh git commit customize.sh -m "Removed customize script" #. Set the version of your module: :: ./setVersionNumber.sh 1.0 This command changes the module version, which is 0.0 by default. Develop the module ------------------ #. Implement your module using the same rules as described in the library development section. #. Build your module as usual: :: mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=$PWD/install \ -DOpenTURNS_DIR=OT_PREFIX/lib/cmake/openturns .. make make check make install make installcheck Install and test ---------------- #. Check that you have a working OpenTURNS installation, for example by trying to load the OpenTURNS module: :: python -c "import openturns as ot; print(ot.__version__)" and python should not complain about a non existing openturns module. #. Test your module within python: Adjust your PYTHONPATH if necessary :: python >>> import mymodule and python should not complain about a non existing mymodule module. #. Create a source package of your module: :: make package_source It will create a tarball named mymodule-X.Y.tar.gz (and mymodule-X.Y.tar.bz2), where X.Y is the version number of the module. openturns-1.9/python/doc/developer_guide/sphinx_documentation.rst000066400000000000000000000131301307543307100256450ustar00rootroot00000000000000Sphinx documentation ==================== This section deals with the sphinx documentation included in the library repository and built on top the Python interface. Sphinx 101 ---------- This documentation is powered by the `Sphinx documentation system `_. Hence, reading `Sphinx's own documentation `_ might be a good idea for starters! You will also need to learn some basics about its main featured language: `reStructuredText `_. Sphinx extensions ~~~~~~~~~~~~~~~~~ numpydoc The `numpydoc `_ Sphinx extension is used for a structured semi-automatic generation of the :ref:`User Manual ` from the :ref:`docstrings ` of OpenTURNS objects. matplotlib.sphinxext.plot_directive The `plot_directive `_ Matplotlib/Sphinx extension is used for *executing* and *testing* the code blocks featured in the pages of this documentation, especially in the :ref:`examples section `. .. _contribute_docstrings: Docstrings (in separate SWIG header files) ------------------------------------------ OpenTURNS main featured language is C++. We then use `SWIG `_ in order to generate the Python interface. Hence, docstrings are defined within **dedicated SWIG header files** (:file:`$OT_SOURCE_DIR/python/src/*_doc.i.in`) and are then included in the main SWIG header files (:file:`$OT_SOURCE_DIR/python/src/*.i`). For instance, the docstrings for the :class:`~openturns.Arcsine` distribution are defined in :file:`Arcsine_doc.i.in`, and this docstring file is then included in :file:`Arcsine.i` using a `%include Arcsine_doc.i`. .. note:: Note the difference between the name of the docstring file in the source tree (:file:`Arcsine_doc.i.in`) and its reference in :file:`Arcsine.i`. The :file:`.in` suffix disappeared because the docstring files are preprocessed by CMake in order to escape LaTeX backslashes for SWIG and Python. .. warning:: Note also that the use of double quotes (`"`) in docstrings is forbidden. This is because SWIG uses them to delimit the docstrings. Here are a few recommendations you'd better read in order to help us enhancing the docstrings coverage. Docstring conventions ~~~~~~~~~~~~~~~~~~~~~ Please follow `PEP257 `_ and `numpydoc `_ guidelines for writing the docstrings as well as `PEP8 `_ recommendations for the Examples section (for instance, please don't ``from openturns import *``, indent with 4 spaces, etc. ...). LaTeX ~~~~~ Using maths is highly recommended for illustrating the mathematical concepts featured in OpenTURNS. Mathematical expression must use Sphinx ``:math:`` roles for inline maths, and ``.. math::`` directives for equations. These equations will appear as plain LaTeX at prompt (using the ``help`` command in Python or the ``?`` suffix in IPython) but Sphinx will render them as PNG images in the :ref:`User Manual `. .. note:: Please use the math commands defined in our :file:`math_notations.sty` LaTeX package. Docstrings & inheritance ~~~~~~~~~~~~~~~~~~~~~~~~ Good news! Docstrings are inherited so that we only need to document the methods of the parent objects (until we want to make them more specific). Implementation patterns ~~~~~~~~~~~~~~~~~~~~~~~ The OpenTURNS library counts an important number of parent objects with an :class:`Implementation` pattern. For instance, the :class:`~openturns.Distribution` object which is the base class for all probability distributions in OpenTURNS has a :class:`~openturns.DistributionImplementation` pattern (that we don't need to expose). And the trick is that the base object does not inherit from its :class:`Implementation` pattern but the children do, so we need to document them both. In order to avoid docstrings duplicates though we decided to document the :class:`Implementation` pattern with defined blocks. Since we load the :class:`Implementation` patterns first, we can then refer to the same defined blocks for documenting the object itself. For instance the main docstring of the :class:`~openturns.Distribution` object is defined and referred to in the :file:`DistributionImplementation_doc.i.in` SWIG header file:: ... %define OT_Distribution_doc "Base class for probability distributions." %enddef %feature("docstring") OT::DistributionImplementation OT_Distribution_doc ... and it is then only being referred to in the :file:`Distribution_doc.i.in` SWIG header file:: ... %feature("docstring") OT::Distribution OT_Distribution_doc ... Integration to the building suite --------------------------------- The separate docstring SWIG header files are included in the SWIG header files of the `openturns repos `_, so this does not need any further integration steps (out of the backslashes escaper CMake script). A docstring test (`python/test/t_docstring.py`) has been added to the Python tests. We added the following CMake variables: SPHINX_EXECUTABLE Path to the *sphinx-build* command. SPHINX_FLAGS This is passed as the options of the sphinx-build command (see `sphinx-build invocation `_). All these targets depend on the rst files located in the sources (:file:`$OT_SOURCE_DIR/python/doc/*.rst`). openturns-1.9/python/doc/developer_guide/validation/000077500000000000000000000000001307543307100230055ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/000077500000000000000000000000001307543307100253205ustar00rootroot00000000000000openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/comp_c2_large.png000066400000000000000000001011731307543307100305250ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy|L?םDvY,R*"b b Ej좶j*UF,)%RDJJcX# Q~ Z75,Gsyϝ={$!tUL@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZt}^ Ptnnn|}޽{ѺukX[[C&! @!U߿D'O333XYYƔ)Sp֭2'((2 ׯ_X/I$I*Riڷo 777 uСCg.]‚ СCԪU ppp@޽WFt4=/dظqNеTڵk9r$f͚:,ܿd)]zz:>S1bn޼h23uD}_|.\*Us D^^9EaժUظq#[&dDDߏO",, u8JcƌANNŸuָt:v숁ذavڅb䋈JfXp!ܰsNԯ__~۶m\!tttq$'""Xz5Ǝ[hӧҥK*0X&LG}]!Qe&Ҹz044.w}'$IB.+7l $IbΝ[ {K.G$?6ڵ$w!!I5k8qڵ֢O>B!jժ SSSѾ}{qs_f͚jժ ccc"F-+ )uݴi$I/mbsB$믿Bllѣ^066jb6/^?St]IĵkׄBh|4(B|ߊ-[U 333ѴiSrJג_$ qի L&>իW ///aaa!Eիk}bԨQA  6*EBqE1d$:tC!$I"..Nl޼YhB\\vMXYYQFT!IQk#ajj*V*Urpqq$+W_kÇbĉETRE̚5K!İa^ /_x={&͛'ԩ|"//O\GY ѪUbH8BTlذxаaBۍ9!!!p>6 m6ӧ:tӧO_šCpQ`o8s >SX[[O¦8q ,@1zh={믿mۢaÆ Bjj*mۆΝ;ʕ+077Ww͚5Сy;vɓprr*%]0ydQYJ?#88sAժUѻwoԪU 7oѣGyftQ}bb"k`ȑJ|/>/Ç bbbлwo4iDYgee(OϞ=w^xxx`0111n8矈Phժի!Cɓ'!CڵkcԨQ$ ۶mG}lڴILixSDEE>L&СC_z}8>|AAApuu'N@N 4hϟǦMKaaaطozꅎ;"++륱(!,^/cǐ]?k׮šC5 K$󃥥%UuM tصkܽ{ׯW۳g}]X[[W^pvvFzz:Ν;իW㫯*q:""С$I|E4h$I̝;WY$IڵKe˄$Icǎ*/Txd2i駟TF!$IVVV"44TnΜ9B$l27ojt޽@;Vc5??_ L&._\dHMMBdffX!Ix7ĭ[_y]V\\\J߸qc?^e@(# $/R95>~'!Ih֬Q///E?FRܹsP4h@c/{/z|Cd2gsYXXbǠxb!āwM5\RhpB!I:ujVtY_qF@Sxyy eyNNS000wQGH$Ξ=ǃ8Hx,J7f͚*Ǽcǎ޽J'|www}A!//fR.eŊimZYӦM1jԨW Xbdoe2-ZIyfc\߀ϟ?fffr333,X߫gnnŋV~}n)))xqcѣp^>y\p jǎ=Zm-PQΝ;ӧcرСC*噙ŎA$9WR ,P)533àA ˑDֶLc")XDTbڵS+dxwp$''vگ܏*M4QFvܦM3g 33:ccW,`Ȑ!8z(I&cǎA&ϯǴhѢ4ajtEdddnݺ={6&&&8ZyƍK4ԩS000xmB&!99YnݺP+UPIhJԩSPh2닄$''&E~~> ggg|7rm߲5*sJH322eFtt4Zl@omڴ)/0!DR7nƵ5j(=(544,N1"0qD,[ NNN֭nذFllmmQJ<{ iii*K֭[q dffƦDTY]mRX"I6GVV QZ5k!c$xvw,E^ɈSIKPxTv4/vےxq ) ;wDXX֯_5k5k:u*0!D|||cȑ+((PnצMWqwP]{./_Fѣjo5M * CCCx{{#>>(UAa֭4h"""JM5222q:&em9ӧnZcKQPPgϞ?75PK1QԩSBhd2XYY)G <<<<ҥKDq,nϞ=S+4tݻwǓ'Op1ܹWF=pi[q Q%DGGܹs[~=n߾ p4]PPHM*_Һr ҥZ򑖖+WrG,ZM~ׯn݊aÆ,Ub \zYzsY~}X[[#11Qβ鉂>|X.>>rCaqC4+".]`ȑj?R9Rf Zj9r*ػw/$I+666qɓeNjLMM닰0L>yyyӄ5qssӑ^zioa„ 044ի5صkJʕ+q,r\v I)n'@.+˳1jԨ2I ]ҥK x^^VXӧ1rHۋbI&)7{zsi``q?~iTǏ+oL0bĈWڴiz!!!J֭[zwy>#]VgwYv-.]<CEvv6f͚r+Wڵkڵ¯e˖u֩_XlY=xK"z=p Q%3k,`hܸ1v  ??GaffBwodٳvvvXjJN:aѢE5j郪U歿5jزe 4iΝ;#++ 탙4iqrIH_~C ALL ѱcGxxx8x ߿?\y܇~ժUBBB[Ν;cƌ;w.ׯ޽{f͚ooolذg֭affKʵ@Ǐ%fΜ3gÎ; gggܽ{.]ѣGZ)1}} 0111BÆ Io!55W lܸ;wF`` Q^=\p,--5Rz/"../Frr27ocQ2uEdd$ТE \~۷o?J^4~xܺu mڴ C/CDeIwwW_}%v98<<\cۂj*Ѹqcajj*D4LmǏÆ nnnݑ5j$>sqMǼDqvBWXx_066$/Ѿ}BѴbÇkK$Rc_:uQvm'ݻW 8Py]MLLo! $bccU*dwזd%aO cccQvmѧOqС=>WWW}@bϞ=[XXX(c>?رFFFf͚G|*\ !=7VZ%077^^^bժUϣuqf֬Y*ׅ Đ!CRprrC /^,Je( &N#F(}_^#/q ThBDGG8žo!2Le(1`Qn]aaa!,--EFČ3KxH{$!G= www qqq׸nPP~' 6 Frr2 #1QE><QQ8p#)) ͛7.** $""""z=qz ){ŋe˖\.x{""""ʆ H9x!N8///L>VVVZ*x /$INDDD_8\|BlٲUTE`iie˖D׮]u&Q 6Le_"""bR<رcu"zΝ*%&  ^\nnn=z`͐TgݿpuuU^OrrrPjUX tIw g'NĒ%KtkDի{^u&xMT?V~ncRNl2߿:u|ULL :tŴSkx=DߟukDf._zL@Jaʕĭ[۷oǏ%M(},--wߡ HgBXX]ضm$IСCaii {{{$$$`Xd ѺukOhԨn0)W~rN0`Cx5QkC:^u&T$!uܩSЬY3$%%q齚57gg -M?:p Hc: ׂt (%%͚5uDU,L@*0Nb'Z"""XT`1*.B'"""""aBDDDDDZ i """""& DZL7:""""aB%$)H+ti!Ғx{{AסUL@H8*Td2 >/^D`` a``x@ll,wjժu)Sagg ((2 ׯ_WL&CHHsiRTEG>+TέVZ066 /755+WDÆ affWWW*EEEy氰@50n8j|<ڵkXf 5jSSS888`̘1xu~9U >\c,DDDTq*˗/UVW 'Ojժ AHHгgO̙3XhvލDTZUy["00&&& #novlPau-$ yyyEff&`ii www={ЧOgϞSnܸm۶a׮]8t6mɓ^zk׮3 ̘1h߾=݋oXjyJ{W^n:?8p Xt)`ĉ4iR%"" Lk#))IIIIeN]zUH$$I_~J$IM6"++K.<<\H$&N,{葰FFFjtĉB$!ĵkה$񹸸777 6IƍJ$:w,?~R.EUoaaa!<==Uʇ &$Innn֭[LQZ5aff&U&RRRuO> 4ݻeҿqㆲٳgm۶B$q"WQ>IDTQW)XP1988 88Xlu֩6l7n͛7+bbbSYnC$T<""YYY J]Æ 1rH>}ϟW;̙3 z“'O^z:###"//)))eW_}5k*700PN:qDq. !NDnueqƨRJYbb"T(!Ԏý{:u Ю];hҤr]Iy111AFɘ5kZb Q~}:/ "!i֬Z --W$$juDDDT90DtuW-m|X0ضm IDATuhB9"*ǏUo5raBzgĉصkF[,hٲ%666駟0n8fÇ111wWx Ə_fe7oBBBмys4o\^.#>>۷/>uѿ/ETh\UVnADTZL@HtǴiPn]tƵk޽`nnk"00>>> m۶U[nhh &`Μ9hڴ)zgϞapvv%ekk[" ZBǎѠAH7n 11x+;uꄓ'O>>>066F&MУG2z$DCśxðF*.?{I & L6m`HHH@LL 1c`*={ $$QQQ011A۶mq1j VHH̰n:[߿?_$IƵ/xP={-Bll, :uB߾}Oiʲ̘1رc9\aÆ1!*7 𖡅 "z)I״T&N:f͚9]vT6TԮ][AW[;;/JA~ͺI& ?Fdψ^^7"$"""""aBDDDDDZY@DDDD1!*† PPPDDDDe i """""& DDDDD5L@Hk0!"""""aBDDDDDZ ic:"yxxLoZukADDDDYfHIII,ձ2,--QV-xzzo߾ҥZ;$ $R|W000@ժUQF 4jݻwG~`nnոtq-rc,a(g1)+G$ ?#~xyyaͨ[qx+_AAApuu=˗qlݺӧO?nݺi-]^ """7 𖡅(W_}Zݻw1n8/ԩN<ի+kժUm۶*eO>EXX+`߾}J<DDDT9q:{{{lٲ۷Ǎ7R߾}{S`޽ٳ'abbڵkw8pZXtժU ԩ)S ++Dc1c0a6Ϟ=êUЪU+XZZo!Pk}vt0113ڷoիWZ<}f͂;LLL3gӧdUi?k,d2>|[nE-`nn;;; 0n*5!"""rrr ???B&aƍ/=&?? 4L&CXX"$IŒ3[lX_5>>ݺuɓѱcG?7oVinݺĉٳ'&L:u`ѢEhӦ =zT'O 9sΝSGOC <cƌ\.Ǹq0l0]{FJJ 1ydx ËBgφƍ={"<</U0dO>[o:uB^^^ N*{aΜ9pqqA&MW"+Vƍ Fewށ޽Tv޽3gQ͛ʿ:t!!!hݺ5v KKKeƍ1|pc%͚5Ñ#Gpq4h0o<ݻƍҥK!\ѣGcxЫW/5k`ll3gΠZj*}ǦM{nm&fϞVZXxpҥBI}ĉVVZ˗+mk .,r,i\^FkmmVE)((xDDDT9p V9B`ܸq߿?Zlp*F]KZ[[###E =BRR$IRf}yi_/_V9א!C`׮]1bѵk"YZZ"==]o1)'￱`]R)r̛70p"{{{C.cϞ=jrpBԯ_HLLijgJ|N+++t k׮EPPUvdGJыbڴi2eeҎw8|0\\\0}"7n`ҤIxlĉ/}ZۜŎ7777ol2eƍ۷ocGhn߾СCQ^4Cf̘|eyVV̙SEDDD ׀E!??>RSSiii555ΨR'Nz0` 0\h re˖ؼy;?wxΝ1c ̝;G޽QfMHHH76lСϟiӦnݺ޽;\]]k׮!>>>>>ؽ{Z6l500ѥKt Z\߰i&c׮]Ά=0w\ 4H~ũS{n| Ǝ "Ett4BCC?bʕprrBPPƎ~MÅ"S r0~x3f nWV&e_,>tE*lt ݺu+yڴiSmigq <.ݘ1c0f̘bv}rE!88J& rJdff*l߾ׯ_]GDDD"Rӯ_?Oa4Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hkz1RRRtF<<<`ff02 ڵáCefٳm0:""""DYfHIIIJ_$ W^-$IZ2c6: uу/ """"cǪ3@DDDDT,\NZTTڶm +++󑗗L&ב L>|xB`֭hѢagg֭[jm\ѣGN:033~m;e؉*"P5}t̟?իWaaaݻwc鈍޽{`,]0qDM4)V?V___;v ?3Μ9dn߾͛ѣGxwѯ_?ʕ+شiƍ[[۲DDDD1|Ԯ]Ǐ= 44عs'-ZiӦ!886lL&W_}UbccqI4lPY6h DFF"&&lݺXlƍr'Op 8*f̘L>aaadˤǫ$0j('eDˉ*& T!:u $Cjuuօ3RSSѣWKf͚ eY^`aa?֮]sνrDDDD UHYYYGGGB 33V+34|>{@Y֧O߿~!z-`Ŋ>`B 5}6$IRlٲ<ɓ'1|rL0A9m2cB'S777XZZx6ъf``OOOL2ODDDbB|;w.߿,/((ɓ!#vvv{.rss-SN)Ν;33r뛈mxBƔ)S7୷{333|:uɓ'I&ѣGkwށ;lllpeر&&&Oˬ/""" w^hVVq͟?M6ʕ+|ԩSäI ŁĎ;pr 6 $I%ڻcѣG'Of͚8p &M %"""L@X`]GPXd;333Z VX/ʂ1-Z@-5QDyxx ))IaC!1CfffuDDDDDjx,"""""& DDDDD5L@Hk0!"""""aBDDDDDZ i 7"Ο?t"" H6x`]@DDDDT"L@* $%%: ׂC ""`RSa0!"""""aBDDDDDZ i """""& `2 7nTi#@xx8zڵk5¼ySENDDDD[L@J޽{3g.\&M$IRi><رcl2h֭.&""""9nDX NNNs푔͛166ѣGѪU+eو#`8p;vfDDDDD:R022=S4RJлwo@JJJHDDDDbewTVMǑi-o`eeu DDDDT)q Xz5,--uqDK~g̜9#GĘ1ctNpD ۇCGl?qDXYY 0 (?"##Rhr" -Z@TTd,YOOO-DGDDDDSЬY3E8?.ݱsN:$"""""H)\u`~:`$ ]vEff&L;v_N3& k׮$IBtt4mI0tPrA$L:U & DDDDT0)WF.k!""""k@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZ i """""& DDDDD5L@Hk0!"""""aBDDDDDZFoӧO#22RlϞ=A˖-tREFDDDDTym_V~UB>Ú5kt!Q壷 ș3gЦMd8u?~1!""""2M@PZ5wFΝQzu@Np%]GDDDDT)msn߾$tEY Lo>kP޽{cŊx);###(Ϟ= wwwFHDDDDTm2gܻwƍ_~$""""\6Z*6o\h]ZZ͵Q妷 d2X[[: """"JGtDFFիȀBuQ夷 Hll,Ǐ666*BH興*'M@&MDGGQF??~<""""׈& uAvv """"m2w\|zC!""""Oo׀8phР:uڵk@uQ夷 ȷ~] mH{6Co׀GoG@\ׯ_[npssqdDDDDD^' }-[!JL&Ä Ȉ*'Ko߾HLLDFF222{K,ŋu&Q# ֭CϞ=R޲eKlٲXv->3EHDDDDTHjj* ҥ 7)$""""2M@WBϞ=իk1""""""999l̟?֭C```ϛ`2 7nCժUaggC~LDDDDDޮ={6_"88NNNB֭[(((/fϞ]޻wś 4i8H.-- m۶ ktOoF@ I.\*U(4J($ W\)Xn߾ pttTsttDzz:*I@ڵkI:ڵkW1YRO<ՙ(0!"""FoMO檴!""""L&mSSSCyߊWX/}6^:1qDXYY 0 (@PT)Q4Co lڴرc>|x$ Ψ^:N8Vwq4i/Ye/O:f͚("Pir;߾}sN)8K._~/LF@Μ93g(|ٳgj222w7,U?+WDff&nݺؾ};_?~<,--1}t/ń #,\o6^GHDDDDTUٳg+_f ֬Y56nX~”;Khl۶ $aСD͚5qa|g:u*ѣGWDDDDTiU2zhТE ̞=~~~*m$I9xR'W^-V `Ϟ=ꃈHU'''ѠA8*"""""RЫE۷uDDDDDzp)<|r\Y'$I8x#$""""\69{,ڵk\f IDATаaCddd֭[pwwGZt&QL:HIIK.EZZ~gdffb:rȑ#3f \\\ I(ׯɓ'2D""""JGo\000@zzQFHJJUxDDDDD& : })amm*%M@v튨(}~t :t@xx8* ֗_~#//FFFO[_}O0*M@lll]$̘13faTDD;ӹ?\f2ef,c,1*%Ia4QHmZdId8$D؉"l(Xf1u1567?{(|,y眷۽'O@5r3dŊ@1y ,g]!Ϝu9!˲dɶ,ݲ,eddx:`ҿlm:tϟ;S-ZBe@dW\_+V 2eʨ{ǻ`9sF TNIIIw{:xʕ+@/I*URPPGoR~lme)44T*TPvvWZ]FlڴI111.gԩS] 8w4aU)J>~%n%IwK;O|6ph U q['I_(A &>@Ο?y:}tOE3f* & ˖-SO=\# ŋuieff>>{СC6l7nR>{ZjW= |6 >\~6nR>{ V 4bR򗿨PB?gܹsչsgcoٳֱ, zKwyUX_=z>|gHLL>2\gرc5sL͙3ۥ|;*33Sڵn6`cdYo*gHxxJ( *\qgʕ+]5 9zjIRzdYy衇@ʕ+{t?;vPݺu޽{+,,L֭Ӏi&}?l3f֭[ٳg;4m4IR͚5߫TRٳuE-\vyeffjڴiJLLTbS^cK,Q˖-eY$lٲJHH###?yY_~z=_ ?S}72h:r䈚5k\~/^c?ԬY3c4i$}7ܹ {l@~G@x =3 Ure=˗/W5<ȑ#ڳg"##%IO<233շo_*,,c# ڵSxx.\PSN)44T;v׮]5k:G-Zhԩںu5j}vXz^5kf͚Җj|Ijܸ7n=,,LҔc$_qQF)&&crxͪU* >{ hڻwKYTP!U^KG@7мyT^= ӿ/ /o؎!իWʕ+5`9R)))СCoz<+ t}v@3׀3F{vr3w矝;͜9ӋP;veȅ\ҰaC 8P[nu>oڴisn̘1v@>@Ə>}hɒ%:~$iɒ%ZdI@)XK̙3u1ȧO\g&O:ux S.'I2h׮]:|$lٲ뮻XPploV<^|y}'jժw  (=kѢEzꩧdY>C͟?_ׇ~(Ijݺ5O)lG@jժiڵ vjJ/֭_͚5b@G@o߮8%88X>mgH…u+.?}l~XcƌѺu-5f=#^ (|Çk͚5[j׮;S 6t>| =m۶W^ѩS4{l͙3GgΜQ޽m6/_eҥKkԨQ5jK > ! m lC` .\PLL>3o>@uAYR\'$5mT/v.Ӟ={ԡC]VGѩS}> J*]vi̙9cY222, (|6p`/ v .׀\.11Q.(|:lܸQ>իWK?-[jʕ-(`|6[NӾ}ԡCcJ,DM8ыwyG*UΝ;f[ްaCO^ (|6lܸQ=r\~뭷*!!giW;zBBBl_sqم 4eկ_gȠAqF5o\$i֭4ibbbr@"]{u]>$_$EGGwg$5jHnݪ{*33SѺ{dY  dYj֬5kzI&iѢE:t$\rj֬^x+ޢgEjԨW^yE۷oW%TD mݺUn.(P|6K:|ȑ#ZzV^#GhΜ9:|z2gOZlzzʥݲ,=ڼyƎgtW\lܹN .d[vyM2E]tBe@3`}7.רQC .TʕթS'q={hڴi A7o?(%%EQQQڵz}˯СC9rDjӦjZdZhZj Ѿ}t|&,_%8{:u-Zhܹ.|&4h%9sO 2DtnaYt-~Mwy)bŊGJMMvyWYF'Oցticˌ1,K۷oȾݫt=z5|pXBcǎՙ3g4sL|65Juw*444:eylϟWRR^|E=ZOŋ8q}UPc# #FЃ>_*V $ƺjĉ $IIIIX*URPP+/-[vQ77{{|… СW‡$EFFj׮]ٞ^T)Iӧm>}- Uߴibbb<\y|IM f͚Yf%&&zAڱc=hҥߝAGJJ,ymG/SWRni~w.ߌf҅?RRﯿ6>'7o  ƍ?#GK. umڴѰa] 6tw }%+Ke|}yW>@nvuMoz-8aY.XgϞkԨΝ;kJOOC=+Wjܹzw{OC mݦZjx-'%I}nvM2EWr4zhˣ+ 'Nc=kOSտo|I/^? ;yZfp Ν;/jӦM:~N: }|J*Imۦ'渎eYȰ,@r-~{.X\l8pKp@G@ tMX>>@Ϟ+--MӫZj?v@$' RTT>#qٳK @.CiѢE.(P lٴi;|+|"/2ǻ`9sFVեK/T\>@{+.+Qz-gYP-Z R\9o2\ 6>uZj9^xc,=\,>@ïeY:v~*p) +Wuc4|pM8Q R) $ Wr1 6LաCvi@$!!AÇw STTK $ 6l&MtuQS]PT9z3xdddSNzw @>S$::ZQy/_^OӧMLLOTI֭[զMoY222<]ϧɓ]\Tv rv @؆6! m lC`@؆6! m lC` "ájժy+ 65tP˲,ox ((^uթSG:qℷ# 6Xz͛ѣGXPϞ= /J*.*N>L˽] u'O߿ý]u~DٳK\%%%)>>#}޽#nNٻw&MѣGwŋ:t萊-lGŊsiUllP0ǫVZ.Yfi֬Y.m^w@<ȑ#T^ԫWl˗/޽{O>ɶlԨQLpqHEEU4*[;͛@o^46 )YY*䗱E_5=m}~|ylWq:@؆6! m lC`@؆6! m lC`@؆6ڸq^~eURE!!!*[ڶm{z4+]/>|֯_~ZիWWBBƍ㏪RKlE^{M{o۶mjժiذa>}Gx [[ t]w)>> 5 63?P%] `;f̘Gm۶.Fz饗TN=.׀رczsʲ,oT|gZh9sBBBr]'))c޽#^O/? (RM$?XR%庎o:~/ '$&&Yf:{֬Y\ӧ+XOvءno﹣R&)==ǫVZn~ 3R$I:tH6mRLLLrs~fҬY\T xXJJZh}iҥTU5jUߐ7~g[5W㐊S*F%vky姱_JVv_wK3Y/͛oP@<(##Cm۶O?NkvI'T/ӵׯInF{|il@ATT˟.E^{M ,P-t }W.=uHȯ m6Y h.,"!xЊ+]! m lC`@؆6! m lC`@؆6! m lC`@TIIIw{wv{@$>>^jv ^qHEEU4*܉e~A~MOr[_q:@؆6! m lC`@؆6! m lC`@؆6JMMU߾} ZtAqqq5j:v1cƨPBj޼~oxC6lؠ9shذa>|y-_\e˖՛on*fv ΂.!$}vx/ɎCΝ+???uVpauEׯב#GXͅ4d_^&[ ^%1'p7lٲE+VTHHK+Iںu7! *SLG]uINNV…8 UJMM֞\~P{n?~\C q~sN=C7}tlxW.Nm۶H"]zJ'y2R]ʟ.mJ.N%tץwkߥ3e|yqͱIW_ZI*-~v9c|9\ʗWǗKgw\.]/?R2e|w1x_Ըqc=zT;wti_l7n sY6c u2_}ڷo2nJ5kjʕ:w˧?$FٶyGW_\r9!w%''zG]M# a9r^{5I{2zժUUdI[w}zoύNer IDAT?TttK>|XSLvyWpăRSS{髯ӧuwkjܸK6<m n}*22RAAAtk̙3ڵJ,5jH[lqu֩nݺ V2e+… 1'K,Q.]TjU*TH˗w0sǫI&TѢE>L 52tP*Unݺ[^r6Jмy1cN4h ÑYf[:xJ*)00Pzuw-<='5յkWO :IIIѰaTJ(""B͛7=cN4h EEE) @2d222=[k7|L4ԩSk]FFS 1?~R)Zٻw˺[l1VZfĉ_~& 4k̓C3;$..u뚿/| ر8ӤIG?<Ʋ,zxtώH֭͋/hɓ'_+VDDD'Nxrxybǜ\gϞ&$$83o|[ƍ;?l/nRSS>cN0mڴqƲ,ӻwo7=옓 6˲̀\׍0۷ow`nR7z7K00Ƙ?Xe~+nO2edk֭ 6/^4hM߾}]ֻx)Ry0cN.7$?OcY׿=?˲V='52m۶5+W̷Į9_ZIOO϶Ǝ90]vc̅ 8 ѣG0;w{bǜ/wySP!oa$cǜ|Ʋ,{n~n͋k@h˖-XBBB\^I֭[s6&&&[ޫ$ٳGc{qY_5jԸyvcNn6ޜcǎIJ(qe{q ;vLk֬Q^TbE=78 sNk_^#F7EsN٣`-ZTeʔQQsk.%$$Zjڵ[+Wt`[ﯳgϖ1F۷ccǜ7ԩS5sL>|X۷oW\\u1vIjj$)00e7oޜ%$$L2ڳڎ=z&$$_*"""}xsr֜\xQGVTTM6?s>;RJ)22RWjjV\5'zꫯoѲ=ʮ9Pٳgk]>uFvv޽{%IFի5i$M2E)))jڴvqp'oΘ1CjԨqv￯}cǎ*WC~AʕQsRR%Iڵk][f$8؉'Qrr .= JRRRi۬nn;f9y嗵{n-ZHGҥK͛7O>Q͵j*)RFVvɰaÔwyFK8/pY}֭&M>}vy옓;ݺunVIRFTB1BӧO7_٣͛7W_Kgל5JTդI%$$hذajժ֬Y1'͛7Wٲe+((H111駟ԯ_?ݴøK+:]*%%ŹFJOr혓7dȑ/iӦy)c5jH͛7W~pBmݺUcǎ!srA}G2dH{ȉ7K^{5IҲeˮ^;;tI_ujݺuyxu2c Iʗ_IѣG[o饗^ժU+u]K.կ#Gc(ncǜ.\X .TxxZn+..N PXXXӿ )S&vYMEFFY/_7}xsr{NNzK/bۛx@eʔц dcN[oUuA5B< n$:u뵃soҥ[dI9s oNfΜJ*f͚y)옓 6(--M-[tYB \r vN.Ν;vZ=zT]tUbMF5kԞ={t9~ITF+n[F m޼9/~IjժU种7wEmݺ5}xsrsN;=jݺƏ_#4ɞ9ߴo>EEE9yIR=m%Ď9Vs<_ѣrN._믿ۣ=s&I9>`ŋ&vN*W:uxZb1zG07n嫲+G9۲+8ݻMZZ-җ>x&66e?͚539>dŞZ5'kNVZe?|zq…o:w\cYO=bǜ]|w._|,˼[s옓gϚfffmal≡]%O<3ζ]vB e;W^Ʋ,~=옓}˲L\\˾7md *dzቡ761Ƙ$cnVsy7Cq6m89qDSNs-5k8ygeYСCζ "ElήKX8|@<='0mڴ1˗7&88{?ʮ͛MƍMHH)Z_jqq8fܸq1'/^4 0߄-[m۶ytlyeǜ1:O-]y @؆6! m lC`ɲeԹsgUXQ /cǎ]|ڶm(RJzוm9sC;p8԰aܹs~iEGG+88XSf̘q;vLo6l"EphժUy L:UC.Pp/mʕs=gWWV֭5vXkN?TfMWݾ[n_ԩS';VM6ոq(%%e>L ,Pٲe*˲r:4f 8Pر qkĈJHHP%G@ۛHSpaiڷoovyC2|ڧLb9t SL1e]lbڷoon6Spafy3ea1ɓfĈ^zdɒx7sP8`/m .4>˕+g{9xJM\\Y&[իeY_~WժUڦMf,2_|Ko*U ^,Fom.u9sic1_,+ڑ7\|7ъ+ԥKM0A]tъ+o6}:T}]N:)99Y~q_|ZJ;vԄ 4`K.>|$iݺuׯJ({OCUPPڵkzr)99Y:tp-ZH >٣I&yS,ufkWzlmO<$enjWp8tm?۲^SHH-\vrY'$$Dŋ;?oկ;B ZzÝ^yիWO;vU|߲,c;r-7T޽|A-ZHezҦMsNIRժUo>/q/Go*((5#ݧSc|u9(Q"Og]?$%%)))I?ŋkܸq.L>]qqqjڴF .h„ [l٢eP 6+9r矻I ĉu1>p@9/jӦ+%JwJMMup8t}r8r8ܹ(WZhe˖VZ RյrJIҼyTjU{֭[]ݾ}@)SF]tѩS47 RB4c VZԩKGVZ)55URRR4p@UXQT֭~IwѣG+::Zڽ{sٴi$IqqqOeqν3335zhUREPu~&/=ܣ }e_~= Sppx-Ze+Wp믿֐!Ctm)00P<~׫ GVZZڶm.???=S7TǫRJ;P߾}5fuչի^x-\P=zoQ :k |zs\^^=-[V .̶M6*_ k̘1:}BӧWڵ XeYڻw:v_|Q:uG}-[o_~Y}jӦ~K.ՁԥKEDD>sܹS?uKRR-[)gFFq-_\ӧΞ=KjΝr;e{*\BCC_ݕ?ꫯ[n/չsg[׸qe߯N˲/gQխ[7yea?TNW^ ԩSղeK͝;y JaÆPBz7u1B۷lŋJIIɓ']Іxp4hڶm \w 3gɓշo\E>}ԦM=zT3f/@=쳒?JLLTvt vCwVXqCu'o9sXe׿^˖-eYc `,2OW\jN|xc,^xpqrp9IR"Er]/kٳg]NEz饗\ٳ>S-ZHժUSMwuj׮$=#.G"8KSRRtyg_[l+9{͕dff}:{Ǝ{͛%KgϞW]uN_+~ҘkŊuGEEqWwѢE]ԩl V׮]okݺ뮻˞{9.ݿzQ.]^{Meʔonҥ]ԤIfZl۶M-[T5w\ ݥuxըQCJֿ9x3 9:+\ɹsdYV?p8tС@T~}իWOԵkW;wN="##u1͘1C{є)SH"0a:v쨘kN%JÇpBխ[Ь}eqڴiz.}/Ex kL*Uɓ'][_åͲ+nEt.s8ٳMƍMDD7yfҥ9aʕiӦx&00qsfWҚ/G@ *T/R۷WjԥK+WNw:uJf:UVzG~z͘1OZjiҥ5jʔ)(ThQ=C1b%KyգGUTsiʕZ` "Iڰa:up5j(ۭo|\ԩMW_}U6lPݺuu-[L=zP˖-{GؤI*THڵC=nݺ?֭[ոqck޽;wƌ'|>A~뭷4k,5kLzRhhK:tHͻOڭhPIDAT=u=|0@ zm۶gԯ_y\驸vSO=J*?w9 6;s;͙3G~mgϞ9r:|v~)99Yqqqr)B7z̙3ճgO?^=mkW׮]u?ִitq)&&F'OVǎ%IwVZZN8|2eJphѢE2dfΜy)<<\SկcϓO>={j@Ԯ];I҄ TV-M8QT|yuTeJҺuԷo_;V)))`5k,mXiy6p@:q¼]o W@`eY@.m86! m lC`@؆6!B0iIIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/comp_c2_small.png000066400000000000000000000763621307543307100305560ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy\TUe@D-5QQ ]̭C3L,q7KD4\PQT\RA$4rL9Ͱ ū8{ssDDDDDD: wDDDDDTu0!"""""aBDDDDD:t  """""& DDDDD3L@Hg0!"""""aBDDDDD:t  """""& DDDDD3L@Hg0!"""""aBDDDDD:t  """""& DDDDD3L@Hg0!"""""aBDDDDD:t  """""& DDDDD3L@Hg0!"""""aBDDDDD:t  "zv bL&ChhC; y}CСC@&! @!ͅ 0aA.-[Ĝ9spr'002 oX/I$I*Si:|0F WWWXXX@.QF7n<ƍ燺uk]Nt4d2lܸQq[rr2 [naҤI ȑ#|8rssq)aڵظq#\.rӦM.~7nv sssժUHl޼f’%K}oߎf͚o߾Qgٳ+WDPP^^ѣG eBP#GӧXt)FpN'O(=|:t7Э[75 ذaۇ3gΨ_| 2uETT,X(DEE䥿>""P!IpssW^U߹s077رceoB$\}ʱcDŽ$I"44DE^$I[n"55UMnnXf REDDxǏ&&&TeÆ B$PJw(J7n$JH$|||42e$I̞=[|ժUB$R3!d2ػw@ 2DH$/^\/,& D?ToS|qww?[XXX[[[1dq HE٦K.B$ @HH8ի666bРAB!~w1l0aoo/E׮]ťK^ϵk{'055SL)))jM@6o,$I7YYYE}i٣G!Iعsg+DFF} ajj*֭+  9l_D>}$IܺuK!D5'M?m"//O|W_իWr\nZYFZ(I ׮]Æ B&Ǐo/mڴBmV|jZڵxѣ݅^oԩVֺukLseyE{d&ڞ܎=WFӦM1l0t۷/qOD/"Svm$&&ş FԪU(h@`ll\l⎄̙3rJ899wިSrƆ tǦFV={|3;v5a(JFFlmmJ<<|M K@$IR>&,qS#::Z%iB=SSQq*6)NAs|raÆ Xx1/^ cccK.E =>"*9& D8r&MTh|Bx;vT5n_(|>ܻwVB-piɷi8qJaرcFM6iM ӑ33mSߖ+Ac6kkk!??FFF*uϞ=ÃT&5(Ψ1BHL&5߭ƍ|ċ\vm$IR٦8EVLgϞifWQd2f̘3f~W\+W q vڅWoEjj*5~ѴJw~~>bbb IZn,W|@,˥!z쩖| ))}L2Vyj:;vwߕ*1FAAj婨s9s8~Z݉'PPPOOϗCaqc4+#={bҤIj?Ç.Is}033éS:t$WYNJJJ7P~} Kk… Njm۶7oĕ+Wʽ"*9& DsE^^q}ٳ&MRN. Ŋfݻw5isidd bQk믿T, &NX~ձcG4i111عsJݎ;&MSNe?~/^ pXBƍLo͚5uz|0|N8{* {x2W_}yyyذaJyDDN>]v8uZy^^ IRQq 'Ol2+ի6m<>}Ν\.֭[ ѯ_? 4@||<<;;;]Vmɓ'cРA^:lmm1m4eƭUZ0b|hժzGÐhժ ڐ$ ?Ǝݻw ݺu;Gxw۽8pP}z^ԣG̛7 .ggg߈ڇ:mur+VÇsO+++|Gt+ݻSݻ7nXh<<<ȑ#{nl߾͚5À I~'$''cĈjOҕ7G>|8 &Mڵk駟`eeqT{iѢEƲem"!!{AZ_dذa0d 2uETTbccѩS'̜9 † o"** Έٳgѷo_eVV|||аaCxzz~ÇԺ:tH5Jy\D ѣEddJ[E2L Lu FTԫWO 4H;vLq= oooaiik|w[nFD8;; 駟GRܹB!57֮]+ڴi#rmڴk׮ոMׅB``QջڵkbرQTVM899cNJׯk/mBZZ1c_r'YCT4iDc+| !DLLܹZW믅+mm^^E޽EzY֭yyy%~=DrHBį% Ptt40c mVW^ )))hݺ5lmm1}t<~aaaWΝ;W'$*/xQDDDDRA _hqEeڵC=Qn U&^JB<~'ܹ}UY5[nhܸ1o߮0*& 4aX[[~~~Uݹs׸s۶mqE]JI*JDDDT9qLMM1dr ӧOUVʅ4舴4qUHǏWYW<1ђ7C A˖-g֛mX8;; U9L@A пڵ Bxٿ)Ryу DDDD_HNNF^`oop*%& nݺœ'OCC^ ;;;w?"##1f̘+͛1zh}Q)1)'III077%,--ϫ;wZjq..._ڮ"\͜9˗/w Y/! !!cƌǀ^ t6G{W?Kǭtxܴ[FcAҥKسg^{5eqF(7n`֬K?aW|I0Y[[iǬtJ{LL~_xmZKԸ ig[p|1!퍚5kի%/^l7w\Ō3c,Y-[Ą  h) <1m42d.\&M(9;;hР}o߾8|0~EDDDDUh)((AAA%j۴iS4DDDDD; dF*q^s2:+q#]cBA֭"44eܹs χ;ϣm۶_>ad2̟?(7"""RipvO6/5ծ]*eV_^m+`˖-ʲݻw#==FRI> $$D'6$IҥKUشi=zPЬY3L4 /^DBB>?#e߿?1m4e&&&>|8rssX.ϟ?_|rXKrX"""*wW^AjTΜ9jժaBm#==tEZjW򲘙EjgΜ#$$D^1#!!*um4d~K W$$juTq1!""R__fiC:Ax~!33Ij*qf͚>|ݜH'Oݍ IDAT[[[[W.G~~~ UIYYY*CCJr%ET\ʟ<(>oZL|Tg4n5j ._͛xESDF6 7ۇWiӦŶW\W T{[[[Py4G0q $ȨdЉJ[j?ٴ*gec}IzxɓV/ [[[U{SHHʺ ݻq}eyvv6O^^/&L BCC5N.((@tttp޽B!!""RaPŋ>@FЧO 33n‰',,,ÇÇGڵ+WsjЍ1c |hݺ5gϞȑ#S4NV5c}֭6m I̙3HOOGVVVgݻwDž UV۷o9* & DDDDŘ3g:vUV!&&w ԩSbԨQ*"44۷o:wgbѢE \cpttĈ#"I4(n???\|aaaɓ'ajj '''t.Q?+ 3o#<}2 *CBB pqرڵ0rHܽ{WcB """bHy{ 8q{ٳѭ[7$$$`˖-*mCCCѻwo?Ì3аaCcǎx1Ϟ=ffft^,C߾}[o1c0uT ((ǏWOxx8D 0gklDDD{,*rӧ$0yd*&!"""*!5{Yd23gΠZjؾ}>akk[x_t4j ,и3fBӦM1bt;vT_/:tPرc۶iF^aBDDDT999!G}Ȁ-LMMÇBHLdmE>ܸqD$|}aĉ8qzUp4+++i\5a`BDDDT|'QF8x`ڦ<<,Y999D&M3g3imm޽{#<<HKKSY]OOOԩSju111Z@""""ܻw#FQ~}̝;mfҸfŋe3g|rujjZ'O_~)q999Xh>bʕ:###!55ӧOx&55Ueȱc4{aaaQd<ƍ̛7yyyG?."9 DDDDx>a;44B ##W\ALL ꫯb˖-=zypBxxx`pvvx{{cÆ ???,^|5j>}uN8߿_ 6ѣJJJ‰''''|j?#\t _} ___ԩSÍ7pi,ZT^۷G!ɓ'qiݻw/X7=<͛_~Ï?m.H gYAK$DpXYY~ ѳgBT V?'OVZhӦbsAǎj*`ݰA:u0uTa_>522%ѳgOCZ\駟yfDDD`߾}D͚5ꊅ b}"## ...oȨck.,Z}֬Y'''7O?C Ȭ4A {F޽K;XڒYRcƌ1cm7uTL:D,,.SSS=ۢ`rqq)"cBDDDErwwGll(CB-C$ z I.SaP%6sL\|ppp@JJ 8t$^޽{矑sss4k 'N믿HǘQ}1DT :CwTA0!" #11^^^^"& DDT,l"ٷu& DDT40em*DDT4.;IDDDDD:t  """""& DDDDD3L@Hg^"JF!QaJsCEe2tcǎ)BBB`DGGszHU2Y-<66/)"2tez]^...$ Gm$II,D "J$|YùPw?5F2 *& DDTIV '*O#oQq:l߾;w5r9Zlŋ#77 L۷o#992L3a„!;Ю];XXX#Gݻw&%%aʔ)hذ!r9вeKHKK+N+BDDD`ܹXx10fXZZb;w."##q!"88+V̜9S}VJڵkg 08{,mۆK.!>>&&&Tm?kC"''IIIؼy3PF?D/"""Μ9ŋ^z8wj֬ Xh?#,, |ad2̟?_"##q4kLY6zhlݺwСC;v@zz:V\ }dggs UZEDDDU޷~ 7o2###,]2 _u5}t&O 8L`\c9Qe8H???FN:HNNǏW6mʜʲӦMÐ!CW"}cBDDDUޣG!@FFFQ+36~>*>??_Y6h 9ro7oceH_Qgmm oMRSS!IÇq,^1crQe2 -ZPKHH?W;;;74ՙ!""""JxDK̓= mcnnxZq}6DYYYHLLjwww>hƍX~=VXeyNNrssq-XYY)^iZM555vvvE9sJ#Gȑ#ы6BDdnݪ\QA,& Zs 0}tL>]o6-[?^͹sЪU"Y|9?Af6ƓHqqqZiEhEصk#w7o233rJ4h0x`lܸ)))GFEEƍ5k^'9x^*& ZÀʗ/_߿lܹ3fXd Zl &,f""""O*V6uvvѠA C߾}qa>~,)ǎX޴iSQc HÆ 0_ 2Yp! ^`s@PfM4mݻwGz`ddnժUz".HDA& _|Wh;& DD+\ԑ9L@ F\ԑ:L@**.HDUA' III8pn~-Rѻwo92""""`wy+WB\&aƌXt"#"""" 1K.Ŋ+0x`9sHOOǙ3g0d,_˖-wDDDDDUAY~=۷p;zj2; /gϞ\H 2qpp@|||/_#""""""@` 6 +V O @ff&֬YsDDD ˋ^˄0,X '''!p] ,wDDDzWccc"""Cg 9={`uI%Qp(`CD $   Q8ANB'"""" B$\v ժUSU(%IBRR%"""" "ҥ $IRҥKpDQDDDDDT1M6!99dlڴIwM@qBϞ= &0"""""" 4)Γ'O`dd0.]¥KO:y$={.==_}7n[nhܸ1o߮؈*o| IDATo:!$IѣGK,deeѣGسg"##f;wp}iFmm23ҥ rrrиqch֬q]nݺewAxx8V”)S,--(+m۶!##}Y9s&9M6[nx뭷Omgff҆*1; N»ヒÇ\dС8y$fϞ'N&MI&1cƠW^x1|p>}]NN(ˑMHHxPeT<ƫ͵\B"" 2)((@ڵ<_iii-Zo)>Ç#11Q9J1E+r̙3ammR6rH9\c&2dwd Ry4f̘oy5f0 ch,1RE9T)e)d;Ih%QrʾTtDqRr0c0Ndљ,fYqz_3kkyǨE%U,[L˖-sj;^@ԩ#GHʔ):uz!I駟tu>oQ5۷m65k,m͜9PLf5P=?.f"xK7T9;v5ҹsg}'z%ICѣueeeiƍ=zt}):k… Qƍ%qEdJHHpwÆ :p@ oP}e$T <]MR5/W^tʖ-#F())I+V&Lqiۃ ҅ Ծ}{U^]'OԒ%K~͛7Oeʔ$7N~:tDž >}nf 08^@,KǏy۽z҇~{O*V֭[kԩ_͚5wiԨQ;vʕ+]jƌ~WԳgOٳ@}5j+35h|$11QC%|n+H-t1W ^@y-]TKp|o߾R޽5h լY-XYݻwJ*U~y-X2lܸ%ȅW>=yM6Iڵk'˲_MK,Wr]wɲ,lٲ뮻eY,8xEo$I~~~Np/^@Q+ WB?|bcc]]Pjye5kzֿկ__7Vdd~WU^^@jժ׭[ j={>'@g@tQ5j'|:uwߕeY:y-Z +c_~Y%I]]QPyegu{ˏ?뮻΅WނsGUʕuEtMܹc7|f͚BtҫW/h͚5 СC9sF۷J +W֪U\P|{" m ld֬Yڿp^@F_}||tRV 7^@uIW*b:hĉڵk*U$IZplْzfͲ<dΜ99r֯_SNI֯_W܂UZ5-]T'OTff$iѢE "\飏>R۶m]]+x-XW߿${رcڵkQF. (ݼ2Hw5JNz뭷0[֮]~XeiZjVZɓ'Kw/UW^yWմiS} t?zgtwW^=*+޽[w cvAe@W@ʕ+~-gϞUm@rr NDDJ" ^@:uYfK.9^ǻe͚5KQQQ.(YubbbԢEWSjͺ;Ժuk5lPm۶MժUԩS]\%P:jz_8TWu֔)SvZ-_\ev1bƎULT&A.WIVfΜ3go lC`@ނviРA2dvɊ+Py] T||,ru)D\\"##]]$uE֭]] .3#维3r̦KK/GyD2d_ʕ]P&A9lS5 7$ݻWK.͵eY̴,2a„~^@&NTryedd }vuY\6m$I:u~mܸѵWQڵ-ccYhhΟ?߅Wq)""B{ɓs,Сn+5`/_>5jPbbUtՕN8'f3Ϩq RڵճgO8p GXuE*TPHHӧOi7rmiŊ.KJJҼytwiSNժUYfiРAڴiZh={8%$$}:|&O/Zf^}+4iڷo{W{$ڵKқo_U/R=zhjJ7t={TӦM5e-ZHo(%%E;wT͚5%Iz4|=x+ [֗_~$//RrKݦM!IWFh[rvԩS'5h@|I x:"I;vԾ}k.8p@YYYWZl)˲u_UӦM%IǏשSԲe}[j/Xx dY7o͛~,Y'N^$r ә3g.?? p7^@RSS5w\]VG$թSGs|<_[Xqqqzնm[^)))r蟽ߔJ|$!!A͚5õ{nUREUTѮ]4|pr-JHH}Z/vZ-I7n>SuAÇׅ 4}t|0`@ p^@>35k5k覛nR~t7J߯ rEeYZzV^̲,GY;5JcǎUrԵkW͘1_r{7r?~\{V= o}5jWo%( wuKP^,+f裏t={V2c,ݻ]X!Orr NDDe}d̙=zհaCcY *t+$n111 zu}dڴi_RJ.\RM9+}ٌUC}q+PR2$%%):: I |7 `|/2\+ٳn:M>]gΜqu9+ 7ܠWhhUBUPA+Vt ^^ K/_]5kTdddς,~^@}w}yҥKڵ+Pi&Kh {͛5x`W2S%IyL &3xe8qz쩧zJO^@ +o񕞞jԨQԯ2R+Hnʔ)u7ԍ7ިaÆ$)5r۷ڵk]]P#RyKyC ,-XΝw}UVi. (ݼ2 0 eUTرcy^@>Ͳ,bŊ.N:.@.xm HӦMs}<7YݻwpU.5$$$},ɓ'o>*p% 7nwɓ'5uT*S) ߥ̔c6U@@&A9lS5 m lC`,+a"""k6,I1"P @)VbbbԢEOBf$)::\8&Y@&;TK7T*$@!(aBo®-,Ň؆6! m lkxHq( @P 10@nj"(Q^<6! m lC`@؆RHIIIzեKU\Y>>>Z`A}cccեKUPA!!!ׯN>ms ҩSꫯj߾}j֬$ɲԾ}{>|X'O_YFQQQJOOl-OSzu@iC%_cYjjSrɊ+: (dz}+"??<9r*Uֻwoݻx ۉSddd։Q-J"Je˖iٲeNmϟwQ5ރRjԨPm߾=Dzm۶9̙3@|q(#Y/"J>ޱcG?,3H ޽,Xǫx7lؠh.o bG)ٳgܹs:q$;&IzgUbE7N~:tDž >}nf 0.C)3fѣ$˲j*}g,KSŊUfM}w5jƎrʩk׮1cFތRG)PF髯*j< lC` L$)660k:p52S%I^Y@b)V<Bo¸< m lC`@؆6! m lC`@؆6.pwɊ+: (<8EFFjhѢ*\f5P=jHm@&A.:@؆6! opL|҂0-0- m lC`@؆x4%I-:̚wA0 ìpb)V<%Bo¸ClC`@؆65@1bfZ@b̴#%irGJ3䎇؆6! mx … uȑoҤw^@P,Οۤ|]T=ܫ'"xn`bUF_cCApG<6! m lC`0>^;wvu)+ %d۶m4}t=Z37iD]\!`?[oU<^x믪W,Xcǎi޼y.p 4KZxΞ=[nE\]a!QZZyU^]_hsiРA UPP:v쨝;wҥKz7!]ڵ?iӦ)<<\[|k>N1cƨYfXW]*&&XӘ]iɒ%qzӛpq;t}QUVMjРƏMYm߯>}VZ P5zh9s暏8'ϯA9; $+0(^z???3f3w\Ӷm[g|4m۶5AAAW^1s176+V4p{%sw@3rH3o<3c ӳgOw^cǎ5eok׮Ʋ,|b?kN6zhl|I3w\3}tS~}k9p1܅ LMPPPBoqqq۹sTiҤ6m̈́ ?^^T4f&88TZL8|fذalٲy&++DƠ(Jzܒ̒%Kr|EGG˲̊+ w3O9^v9w>ۘy¹"غu,̘1іjׯoڶm,ˬ\v)l}QSN5e˖5۷ow 6̩}VZ&33VmbbbLRRSofVj㎂Vr1?o"""Ltt *zvpq4M41mڴ1E8nc˲ڵk_~ecYٵkWAD5nԩLZZ6fp.0rz>p1s] Es???sɓ'˲LBBB>#&,,,GM``t1_ի^zcIOOls1eXe˖˲n㖗zȄjc~S\9_{̭N8Ƹ߸}Ʋ,W_c,##HVRm.\h,2׿{=cYٷo_1n9q'mNcw|nc  HܹS 4PPPS{V$Ivw-Zhoժ~I޽{MjРA TPPnmܸ16Qzn㖗'O*44GUuF;K.E\[nUBB֮]7xC>4hpG\<,_\'6|ncw:H;n|>p1s] Em'Nu8 I9s6mڤsj޼yJMMU.]/8mZjEN6nټyl٢={J;ٚ5kSoV6n}{FiʕzrJu֭GYm+++Kmڴ 7ܠ]'|R-fv[n,Yիcǎ9wܸ۹@rqs󁻍' LErh/_cy^RSS ŋڵK5jԐ$uQ״iӴhѢkN6nW_裏nݺ3fL!ۘ]tI#GSO=Vwn[o… %I> /hÆ ԩSۘ%%%[n_Wծ][6mҬYӧ_;J׎;4jԨb.6fWrs~ w3O8؅+ Eﯴ׺n~$-Ijwܡi;۸].))I]vURR>sJ̙3uM4Gcw쾽{v棏>*I駟~P%Ӗ-[_hذaojz뭷[,~vە,Y"I w˹@rq󁻍' B)\/%&&JW~fۥP;wi'O,R=vrqv%=C?\5*ÝzOܹsW||.^(c=_GX2i};cv8|QF{u&cۜ+-]Tj޼yt󁻍Y6w>H5nr>p1|w>؅R͛7u[J5k͚5ӎ;dɱn``ʦM/N8`\͕c'w7IR~jҥj׮]Ә={VIII6m֭ϔp 2䚎ӸIR˖-%I 9Ir]a̪V>==]9KR\qr١C$6f $7O9ӘIq./|~7mnӦ-11ƚtG[{/ԩS3{vϟgkm{5eʔ1<-!!-[֩-++˴kԪUm&rq3ƘC˲ܹs8;Yrrn>s;矛m۶;1Ɯk*T`WnLb&OlLj̉'31ܹs}g,2˖-+ف($w3g˲L۶mŋ͢E ;HIq1ˍ=۫j,2ӟ̜9s̠AӧOD!Ә8qTRTP7L޽eYs%?`ǸcLFFVU'P; qqˍ;m<\`H{΄˛֭[;߿q6ƘgϚ'xTR:\ceLŊ̓>h<_VVp1s15nq; `smPBxm lC`@؆6! m fϟ/;vTG ,muрlx\Ş={5j|Qwko?]۷WժU6mO>N˲tڵ4imc\]>L{V*U4p@ȑ#oi\mG裏ڳe!+>>^7pC}iȐ! S߾}u7… 믵fkz_{ԡCjŊo5aM8ďҥK=3zw!Geʔ)'uu:}~ڴiBBBˆvکo߾ڽ{ }˲g@>>>. e 2D~֮]@Dzg}V111ڳg$I&:xjժSOԩS5f{2/,+|+m7,ӕ>)|HRHH}%%%iڴi'GS=TR%URE#FPZZ`G?ܟèSu 6(22R曵qFIʕ+դIe˖ڵkSwVUn]+,,Lԙ3g46&MR2ed-22Rs~y(--MGRSS5qD5h@^wÇKp,ÇGQʕ6mhڵN}6n(}zUfM֡C:N yXzu纼]v]֬YcY=)S觟~ҬYtYǃЋ-O<֭[kРAzYeY:pzJӛo__5qD=32hѣ믿֑#G4p@]>@{і-[ 5.ڰaNլYP^ɓ*U/33S]v7|޽{kȑ_kϞ=[y󔖖!C\r Vff DŋsoZ`q1BٳsNiYۧG}TC հaCDz˯U۶mg}V!!!?~X"m|SLQ2e4f;wNӦMS>} d9;wXe||Ʋ,sEc1/,vO˲ݻmAAAf99o֫M^ԧOzwʕ ua~wvOUR%uIOv|hBo׭[WQQQWڵkպukmA)>>^N "Iwq$9n9O-X?H^.\ ˲r1~7:}_n]ѣEʷRUTIr<_~YGۙ3g4i$-_\NrBQbEIW 6L֭ӢEԴiӫ?t6lF^28p@ϟWժUs]~tGU6mrGDD87j~:88X<rQR%]ڽ{wvޭ5j((((~ƥ^W [=zO?1cƨYf RfftRW֯___ N>}zTjU-]4塡E_a"@u릹s~A͛7ѣ2dHeWڵY{h-5ٟ_y.6_~ecԷo_%%%Xx$}>|5cƌB{:}fϞ]z+o?ٳ233ꫯX'##зe{m6X%%%>PxxWy_,X>}iӦ8pԩx}:s挖-[szԹsgOZdc;"##_k̙ Sݺu+}6mUzu_^Ef6m4g :T /\7jz%I۶mS~;xߞ… 5j(m۶Mwqa :Toٲ?&Mӟ2eʨW^j߾ɓ'k׮]8+Vh֬Yz衇+o;v-[{G>`=zT+W,t ~XC>}ZUTQ4nܸ#Wt>}17o^Gk׮믿Kjʕ Qvt7bC=aÆi@ԫW/I{ァHzpVeUVՏ?^RSSu-hNWŮ]6(6'N+ӧOrʮ.3 lC`#˲| pm lC`@؆6! m lC`NRаIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/comp_mindist_large.png000066400000000000000000000773531307543307100317040ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy|L?ם}% Y,Mb%A"Z>->QQASUEKTXcMm)]$d!Drl$3|*KO&99&Mh***BPP4iH$DFFj:,"*S#b4i JannVZa޼yw^D۷o TYUISqsL^Mvqq뛆U%^=M%W5K ŋ8DQΝ;ѳgO8::B*QFxwo1`XYYA*uXf JJJ=d?_~ ===FBaa!Ν;+WbWWI?BcR}kwN:uDϊ8pLMMq1jSbͰa`cc?7Na}RF"##sa׮]:"I0K,_~ WWW8p {1zh;v oܧ(EQe] xFc M6tխq޽{h򑒒͛7~zB^zaѢE ȓ'O0uT!::^Mիvލ;wbԨQj?"Y8INNҥKHUV3fPH HK.011F7n(K" "" DD0EGմ?ܹy&F[[[HRW^U:ׯch߾=lmmahhL>w}U1.ǎLMMakkɓ'#;;:t(RRRWޘ$$$`12`ʔ)WR)ڶm+?'6M)<<]t-аaCʿqwmOE@/@affSSS4k gFzzlZ_RRkjJ~_+8}4DQTMLjj*>C666:t(bcc]x1$ ~WԩLLLր> `gg+}u)x{{ 4h+4qKNNV8GN۵kwsssHRj ˗/Gaa>eS>}9s宿y!W^R ˖-|#/^aee0]TCFҗwrr2F C8x~ vZxzz puuŰapĉ  )d˖-(..ƈ#мyR۽{_U*Ȟ={pa >z˗?ԩS8[ߠ /r )mZ̥K_ӦMիWw^ػw/w͛# سg[nX! 6W^֭ R8p3fܹs ͛7ޘ:u*^֭[zʵbŊҥ Mݻ7qt邤$xyy[nw}ӧx `pssѣann{ҥKؽ{7y"((WʷoӦMc)O 1eƍ ?={6Μ9AaРAQy BXXRRRxbyǣo߾̄/F_~Anݰw^_)P;v C A޽ gi㙔nݺ!-- {ƸqpmO8x ~g 8P`߾}0`f̘?¥K_ں1󃫫9zQvmmm1~xСCX`pQ)[aa!z쉬, nnneҢE ԯ_.\Ǐb?}4rrr称ɓ'J޽;"?^^^x#+_iJKIIANШQ#L8?Ν;1tP?~\i@@v؁-[bĉ022ݻwq9DEEw:"zHD5F^DAܶƍA-[&/۲e((xAk֬A{P>qDQ1%%Ee?=z%B٩S uSLAŐK k֬Q({XXXѣGEqƌ*Vd㢧'>}Z^^RR"GoiDzo>$<<\nÆ /S sQ(T J#΢R3F1(ײԾdFFFF PE޽{hoo/>{L^$ JLJJA'MP޷o_QE]]]Zɑ:y6|(b ǥJi yYAӧWDQ/\ 6iDN*Ο?_9rhhh(O|Bۋ *׼ysQ"ƍUAٳ:Ud[qɒ% DA˲DA:%%%J}<~ "8IKKPyNNN ۼw0`Blɓ'KUeyyya̘1 e'NX[[c u&L\rEA7}AfU%3^^^ׂ w*RZe֭|;ɓ'CGG.]a۶m033Sڵk, @OOOԬutܹXrRT*Ryq-̜9S=>cܿ_崘iӦu'55ǎ3͛P׹sg3سgҶGV4m4P8k *\mAhh($ {A@hh(*_V|/{n4h'NT AJ]onnQUڶmSV*򸸸`… e}E Γ ʫ)VVVUQ]H CL"[n*}Je^|m4Tn ?LK$Uvm׮R]YV]]]ԫWDM6055UF9,͸q㐔f͚ɧ:M\t (ʧTTǎ,d,^Xŋk׮Q/_"~u !U^EuCy /kҤ O*e˖ݻ7.\S֭[C\\0n8?y㩈|ɨdffܹshӦ .]hUyLDu ׀ GbbbPzZQ^R>Sv瞲ꊊf888pttݲeK]xU\\,-;坫Xjܰe,_˗/. P4jԨREc1~6 77␝YbZھT}C/U^lHMMEVVBRڜغu+bbb0|p^m۶޽{ѴiSߗ/](U=$S*ٹs'  "1bV\ZcKDBTȦ?~vňtU*>5%==k׮E˖-#""9-ZE),8&sP޹Dٳg#!!;v 8}tN?EϤܹ3w`NǞ={V8:uJ:yzzBE7n 55*T,/ݦ/dw:rRӧO#??]tcii)b$$$TC-0vXDEEQF8{lL# X`0d̞=SɓJ_nnݺ={*,r-RV uM8s􇜜L:UcQuE豱ضm[SXXs)!## @*˭ jcc1c޽{;wR2,kkk8tP4j| >r7~J#郤$pe.\VVVJUɓ'-[ by2eJظqÇܹs022B.]#F v؁8yyAA|3$>3JRRRp1e˖UɴGW*ANN -QufW_}֭[_~h֬py\xR۷o/u???4j 8r~z>>>Xr%NÇmT}#]UիѣGcǎhӦ l;v RmڴEU*$$$'Nի]"-- vYnyyyBƍ gggرcHLLСCSc[H///M64hP[;DGGo߾GRR={o4>>>ؽ{7...?~?^^^㏫`ذa_???ԫW׮]Á /_.شiFooo=1rH;U̝;QQQ:t(FKKK?~/n-[D˖-ѠA\vŢD"Wq^{8c YmmmE???166VmY/Q,y^ٱcح[7T444[h!(<*Kqqߊ]tD]]]^zcǎݹsتU+q*QGFF۷ Eq̘1۷UVVVdW^h`` :88={wQc!"e(VWZ(99nnnpvv+t}W Bnn.V\9s1bK0yrߓDDDD5 #)) _~eӱtREL@*I___~\+Tc"""""mEŋPy Bz* H5E3gѣѩS'MCuĉQ\\DDDTc H5 ={h:"""" H5x >̛7ѣGǞ^~~>ѯ_?h:Z H5Xr%; 99@FF===0~xuKDDDDuVd51wAff&7oT$$$UV u...^=<<jUVi:ccc㡌c6/!`k 9RՆ1Qk׮amTyL@YPL>&MСCUieӮ<<<驎Pksss+8&8&8&88&jØ#0& kXnp=@dd$n߾ EѶm[mVaT͛cȐ!j`BCCs݋={@L0ffffb* JJJ!""""ڃ"o̘1(((x(((PUDQ5v!..H%'']ڛ"""""R򐘘0jwwwHRMADDDJLLDv4QKDDD ZOLL$Z"""]b|b:6\NDDDDDjԆ  """""R& DDDDD6L@$,, Hc RWWWMADDDj:wk:QHM`ff04SVJNND"Ipu5 vvvӧQQQ0`lll`hhƍc޼yVǏ ưD۷oFGGC" 88XTM)*m ӧO1g@___a߲84hԯ_ƍוśu֡yJpqqAHHݮ]СC^z9s& T 6e˖022B1}tLMM`X[[cÕ+WrJ:t111055g5j 1j(̙3ҥ ZjUjeM*rAPXX={"++ 033ȑ#>|81x`4nw={pA:u m۶UgܹƐ!CЯ_?۷ .DAA,--pBG7|b_^a?GbȐ!ɓ'i&ܸq'N"((WʷoӦMcKDDDH5F\\@v,))IAAPwIQk׮bvvB]XX((/{hee%+i``((HĔySDA`9;; e[lAÕ GS-,,D[[[ڵk uhbb"zzz*O8QAtuuݻ'/mllDT*؈gϞ͚5 *Ys玼bEAċ/;^U/ysUo89};#((HlڵM6)8q"Znm۶ۇL; /^u 44FFF Fpp07o{/_Ƶk IDATה駟^C A~~>>[:}}}5 HLL-Z'''kK.UdXH q Vr>pZ[BYLL k.Maa!>|LXZZ">>УGfffhӦ|]Iu144D˖-cbb XxRl ƵkP^E'KHڵkTHMMe IffR L@M:UuKǏ+999/JW^jvvv*?~ ՜\rsss2]]r늊 R(...uDDDݘ!Z-pѣ C*߿T&sdeeʪB/XvUhѢ*׀ܹ3222_Ul:RttR]vv6KKKP5̍7n5&:w >LQVSNEZZR}nn..\ =tPXZZD\\BŋL&<<<`ff}Ç|̚5&MU..))Q8ն^sHH{p i^zaOФI 0...AJJ N> ///:t`ll7bԨQ¨QP~}={'wt@WWgҥKѶm[ 6 ϟ? + w~m͚5 sbbb7K 66򂁁ڴiAUёQMҼyеkW]gϞž}`aaGGGL>cǎUh#G 88v킡!w~ !!!* C*bӦMشi1zh?Lk=z!"z*V\(9sppp+UeYp!~;w%%%8q""""-$U5-UxkqqqJϣxvT5d4lPSxOEC*VSDTNN/nttRxILLT<U& DDDuV֣6{ǫ'"u4=/j6Dزe 0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""tT򐘘0T~qicADDDD %&&]v\qqq|m%ŋw033C WA^%/SSSԫW-[Ā0rH5.MmL@XIS4U|r~A@PPYYY??ڷom۶I& EDD ??pqq(x)n޼'N`X`~_mhr,nbJBDaTE)c̙駟X4h{ eϞ=Chh(-Z???;v ^^^jGcADDDuֱÎ;;w $$D[,8z( ;;;aÆ6lN86**  Ѹqc̛7ٕ ,… QXXٳg+y9֯_~fff066'>22{= ooo|gϞapss!駟ٳgH$ٳBŋC"_ݻѱcGcƌ{*5&DDDV .رCeӧO;w.zk׮a۶m mѿ\t ٳѸqc\]vӧO+ܹsahh+W௿aРA?ӧOGII fΜ'*gƍ6l1tP̝;D~~> Q%K@__3gѣG:~~zpssÇ~-Z`ΝAaaaDŽ`֭tttdѣXt)p+߽{WNBpp0tCL^I&!((_}U511Avp9\x͚5|g8z(fΜիW?`ڴiؼy3F!C6l\r666 }ddd֭[q!tǏ?K,o]QQQEeƍ۱o>9BDDDZW@Hkѣ2~PvZM8q"ZntŤd-))_ {{{ZJʃD"ʕ+!R:::eVVVXl>駟Y:u*ҥKMDDDڏW@HGw~ 3&&zzzصkx!233aiiF^~hҤ ,YrCCC\vMz裏ЬY3=ݻwG׮]A.]vZ۷W*srrdffV"""nL@Hkȧ;++ 000(w?Fqq1Km#rrr*k}1)5ׁvZ=z/,1ٰV8^zenkaaT&R\\\DDDT7p igϢCÆ lkaaL_sssXYYԟJӧ ԩ/>|x}ݼySa_.bbbcH3+^. bquZZR\\p $$} fyfΜ4̚5K45 NRُꅱqL0pB˳t *\B((())AVVO={EEEԩmۦO.ӧ.\e˖Æ 4i rrrӧO Rw˖-8y$SnݺӧO#33ؼyO?W\w}gϞpttDzz:?!!!o6!"Μ9Xo>>>eń c9r-ZQTT={C~zr$"""*א+V… x"e‰pٳ Ȁ+FsVh|KmڴAtt҇\L<;wƌ3`gg#(('N ^>ʹ^}hU%߿?_tڵVϊ?~<Ə_nӧcgiq 88XN_ǎ ܗ/""".L@^߿;;;šCJm py'GO2...$w;eU]!P)Ҕc̟? OCQm5y===Cfذa Bbbb% RղoqUtHMMÇ_* ݿ`ccHJt8pYYY022B1eL00 ecƌ1c+D""""z۱}vl E=T .;vĮ]*UV.VDDDD xkNCiNF׮]DDDDD5u!++ DFFYfAYYY7o߯}ƍU>'H1yMHII{bϞ=&L@II RSS!ϟ}@@""""sr۔!""""ڃk@HmxD !11QaRTa$ zSN/^%K ::ݻw`tDDDDڃ JLLS]\\ BSAPK,DDDDu-t^WL04 DQݻѱcGcƌ?en´iиqcHRX[[UV1c222؉j#^ZkX|9lmm1~xСCX`pQ"((WʷoӦMY~="##1tPv܉+W !!4tO>1rH֭[غu+fΜ ++"""Z J111X|96l/???8p+W'| lٲ-t_QQQEeƍ۱o>9{ndffb͚59s>E͛ .'PH$|U׬Y:u*ҥK2Yahh###DDDDu !zTפI8::"99O>}ڷoT̔ 2&&&0blܸODDDMP WYoooQ}YXX(꾘X\\,/M>|8?-Z37H0ZߪAy;uqwwǎ;cb())ٳƈ2& T+yzzBEDGG+ݸqpuukC^ZQtttya}""" J'O,[ =cܹESL[[[#==S|||j߿J7QmRԹsg̛7+V@-0bHR>|' 66򂁁ڴiAUYLظq#u777XZZ͛ؿ? """"h4jUѶm[[(**Bƍgᣏ>/^ܮ7++ ǹsPRR'Pgw;8<␟''';}5kFKDDD h5A5jFUn;Tc*KJJʂ6;vDǎ+5QD #..Na]!1BRH EDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""kk׮i:"vbR?^!U ZqqqFpwwtDDDT L@j!T OOOMADDDDTi\NDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0\VVVH$Wڵk)1a._ '''@ǎѧOaԩ FJׇ@R4h<޽{iӦصkWIDDDDT1wÇѾ}{:HT4R=222$& ??```TghhІ."j`ddxR]AAB""r]vM Ȧ^ɦb,-- +u@+3cƌ@H$&&]vHkl߾۷oW(P4ڃ H5ptt-.]TwECJj*xzzVWxDDBM_e`Um5FDT;8>>bRMTxO8}#""mHW&|h1y ֭CVVݻ/I5k̰`Oٳ'fϞO/DV0i$MODDDD1L@^Chh(RRR `޽سgA `ff'''믘3gϟ 4e """"fL@^CRRR5k Ghj>Ԇ  """""R& DDDDD6Z\|YɕG:uիWk(2""""Kk?عsuRRd9s`Æ ʕ+ڵuDD$ qE9 im CO>TxDDDDDu& _HKKC\\+ɁDODDDDT#iЇ Ϟ=o}}}^ 777 FHDDDDThmtR<|Dxx8ׯ~ |$""""[6155ŶmJKMM"""""۴6)D" """"s:ۑLfn$** ˃,--EQ n䣏>Bw^lR9 7nY| Z4n999^ Ȳe7 ))Iӡ5 'N5k4l:::J֮]興&M@ʹƈ& K,ABB"((ECqq1z%Kh:L""dkxLo-tMlsy5~9."z}Z㈌ġC1x`(M@@ :Ct(DDDDD-~>Oȑ#1vX̝;W!9Z~^Z볾;~@q`=3ܹN<ҥKk:zf̘駟vL 6TPAM4nY;X\{ 5g@>힋w}՜kذaZr>/񿡡~/PR&,^1KQOTZ5 8P+VԲesiժUOorMٺu%xuI}W$w￯Ç|W ؋{@$ʕ+{WZU*]e"IϞ=UJK?vءӧkܸq߿? ɲ,c,m,K~joWƍ=СCOsmIMMӖm۶i٪[ڶmojݺ$VJ4g⋪R~a(\@ t5mTu ]viƍV$}O doQƍ=#W۶m5i$YF-[>V+4%%%9] q>ӪU觊HMiӦy>|ءj# $_O:SNI]w̘1cmڴIW\q}ڴi VÆ o@ŅAHDʴ䧰 õ$66`:tHVxxfϞ?c9s5kGyD+VԜ9s_WժUormi޼y6˲TBծ][;wM 6Ԓ%Ks饗^UV- >\? d &Mr]s57oe%߄6="I9sl٢Vc:P\@-Zᄏj&q%X<"""4|ǵg@mۦ#G[ouϵg@ \@FzK+Wtϵ`hBGVӦMU~}]ve _ɵdƌٳ1ڱc9eYT.'|RuլYTN }>ĵ$11Q۷ow gpmy5uTM>R?ҵkW(99Y}ѥ^)XYk:X%X\@*U(ծ];>| `/%K8]%k΀|גf͚ɲ,Y3&hBeرc*]ZhQ:e);;_JJ*;53E9^w;]\@ƎΝ;{CkV{:T\@rʞϟ_D_uVX+;) PkܹeYFٳgk1b$C7oUŵg@ }7 yzGt 7hСjݺUŵg@֮]=zx\޽~G*kH2e*[pm5vX-[,ϲ+Vhر[ \dԨQZtn]{[$)--M}TQF9\%X\{VZ5`8p@~OCit@@qIRƌ1c8] 6!իծ];UTIJHH믿tY#\},Xm*))I͛k.KrQ5kL}у>H GQnԶm[͘1Ñƕ`k֭,˱N{_t:8VP2Hmݦ; *22R;vPݺuU\9/_^}Չ' pkȳ>7*%%E|vڥM6)++K۷W֭5k,Sƍ}%+K֭[ScY effꡇҫ*Ij߾NC=cZ T駟V||VX\e˖UFFFիWWzz_k Qjjj> TR^]m݊" M6Ռ3|.;z&N͛\\@y\R~;uk֬oDݻW>Uŵ\{7o|Au]My骫rD 6HR˖-aYF6mRNNԤIYty@qu$˲Ըqc5nRrqۚ;wm&IYZn_e˖uB &;wQF0`֮](EEEi͚50`*ܹ2k裏k.}믵k.M>]۷oW߾}.(kѢE8pnv˲t=hzL=*U仼jժ|:`3={jҤI:zhe8qz@e@r%XfQFU^=uMW\q$iƍzUbEkziyvڥduџe8kȗ_~t ҢE KPބq_.]w}W[le,3Ȳ,] 2f 4H[*TeYT.ѣGל9sT|y rQ>ĵE駟.\@x ͟?_/8t9rOe);;βؤ)))YjTsmIMM- ^jAm6 2q!ajtkoBP ?_KrR>+'''ϩSyfURRt@@qm%88Xjw]qׯ%%șnF͝;2dժU ڛ{=u!}W={z@e@rm]'|Ol믿i,K*TPddpmY%8 wa΀$$$c,ڵk\\ *U*eYڳg6l`CEdɒٳGF{  e$?{ȑ#5aeee)%%E<. ( 5jWO6mڤ~[vi?~N{%''+99ubgqIRJJJZJ,邝1Iqͅ>NiiiJJJKm(^ӦMӴiӼ>P5A]v)''GW,+Y6f1"k]/K:D(오B#(.W_81ǶgP^z5@$!!Ag]c ksBpzR޳q1х>Nq!ajQ`_2@ EJ*;>fIRv. pe3˲"B,΀lN83 lC`@؆6! m lC`@؆6! m lC`@؆6! m lC`ۄ8]$JKK;u槊 #IZ~}_ \s[;8CZZiUV)11O%I)))E1s}n}@H o4hKŽb<&B^jAϳB|'Ÿ9qq!ajQ| m lC`@؆6! m lC`@؆6! m lC`@؆6!ʕ+#~P5ԩS'mڴG8]5J˗/=ܣ *==]ob կ_[@hРAaԩ4rHM<@Vvm]yJKKs"Yb3c~7EEE9] `;>޽[:urv֟'urqM٣6mڨB 1c,r$<槊MQg֯_oC5i>|X[֑#GtRUZ>ʗ/Ֆd fiiiJJJ:uVZD?Umy3m4M6ͫU?;~ڶm͛7k…/t1c wMgziv=p#(.$_81ǶXW&] eggSNO?T^{%(I1B $"deX ď >Lm۶5e)) BQe>g}̲,ď/^t @ m lC`@؆6! m lC`@؆6! m lC`@؆6! m lC` @3g.ɘBfHTliܹyՕ"WXXyBksC? #IZ~}] 1FYYYz<­Vkg/4>_iiiJJJ*rUV)11wεNɹZ!ЏbgqIRJJJ] ]U)t}ܡ˳uCo85E}E#(.w~Ԡ6Ud'}FQFw/UF =NwQiSпNɭ7ϟe1NFzvޭ٫}ѢE[gM6^>Y&Ô)St:]E3 ~Ҹqc-YDʕ+i#IjԨQuZj)Sf͚>ϐYǎ֭[ժU+KhqO;5mT/ $77h@Zl \s5{SOi޽{ァ۷kĉN83 ~t =쳚2e`K 4Pppbcc}nk֭ s68v|MVjD7Pc4zh*44TW]u>b9ޢ(ic>|6mʕ++44Tqqqz}< y"}LiСC\4s<e1 yҢE ٺu< yR1qzwsI >\ UժUuwh׮]^#%7QFi{԰aC7PbbVXĉջwoֈ#4ܹӫߴi4}t%%%z,vE~W[ӦM ρ/[4h EFF/P߾}b M4kO?F>}ꫯ'|.]Ȳ,u$YzեK+WN֭o_J*y}]uUZd6KqDS `'O6e'/22TXє-[9MpzL|qr19yYhͰaL Lƍ͑#G<}meL|qccYle˖VZKq\Çu:r䈾 UZur?J*^+W$GzݒNO믿6cx|ݻ:t7|67nL_ޫ?$QFEB1ɏsDrرc ^_mرC7oVZ==ݬ_s?cY&?cN_w 7(sI*}i۹sPiԨQQ5_})['cN{ҥ#Lm۶5e)))'|Rnݪ/\twoֈ#~5lP|[M03׮]_͛7СCz$Nwq$ӯoY111ںuƏcǎ^sxl۶MڵSPP:tӧ{㪫RBB$z8p^z%:uJM4'|oFSN-CIdϘlܸQr:wu*((H>%$$/PɹI̓믿>~###%Hvye˘\-R˖-տc4vXEEEy]]HtXh gym۶yahbbbL2eUW]eNg?&Mn>}7m4ӼysSreST)SreӡCw"ɎȽ~??''nj1ԬYӔ)S$$$c)ic1ƞ1ٿyLzLDD)[Wyꩧ|~K ̓s@',^:/I̓-[;XjW_m&L೦@'2&N;nV^mnVa"##]we6oޜso"&t! m lC`@؆6!4i}v{ɒ% _mCŶ2dcN"pY)))^ʖ-ի+%%E֭>\~ee]ж/veY缟uiȐ!ڶmƂFq22k,%''+**JzRlll٢wyG>Co;wjQVVJ.]pN&M={j֭cN:RJۋ%Ke˖ZdnFIRVV1*UT3c uk;l;Q1 /k׮]kUTɳlj֬vkמe>e{6AAA;Ye1?K~?ѣ Wpp77.UL%X\㥗^ұc4a!I*UuQ=Ӟ{= ԱcG/_^QQQ8pN8GSPPԳgOIèYڶmE)))Iaaajذ,Y"I9s4hP5iDk֬wڵѣjժPĨW^:pyM=T\9m۶MmڴQrt饗7e˖P͚55m4}݇ТE %$$hݺu馛K/T/RܹS۷WxxT^{fg?PIIITհaC;Vر$馛n<6/;*::Zaaa=sեKUXQ͚5Zܸ7kL5jgYǎ#Gj;v<{O4yd[^{#I˷˲i&uU=u릿j׮^{5 2D<11b:v 6x.Ypl٢^zjժ &֊+k|uEj۶L~L2JMMUntwu뮻N5k,<֭[Cܹ>c=JHHm&I:vnfܹSWLL&OE\եKr-%cٲe߿7okرzgT^=IR|||u]V͚5S2ef͚ڼy̙^x=ܣ:uhĈ^g8άoiӦ VsW^:r ൿaÆL2zuĉ|/E˽kȑ#gko?|jժ6m_~Y/+..N>`~c:d,2wuWڵkg,2c{9cYi߾W~Xe֮]i0w_mN8XemiQ 2+V-XXeBCC͎;<&L0e%Kxڎ;g?~,,]}ҽ{wcY9rСC&,,Xe>#O eYfȐ!ŋ˲W_}ik޼,L2vIcnO۫j,23feff+"6wnj֬}K.1999g;M΋{7egonT^8p=99\r%Ƙoڵ=m'Oʕ+ 'Nx}Ʋ,syr^xkI&?`p?CT\.?rW?{~$Is=J]{߯I-ܢK/4O-[Oʽ,.~AOہ4`UREaaa\jժ%I:|yޘ|!UO~|{%xm6ծ];O:u}N:jݺ.2K/tnРA_w۷OUre={ʲ,ݻ;'֭gYݺuY_{ ?pW(_Vkoڵ^""" Wwz'%nθǠcǎZ|q5jHmv7yE'?nQDGGk͚5?͛yiĉ֭&MT,(Hhhy8uUݻw'!!k&@Q@F۶mooy#ҥKm6lܸQ5jyfx݄mw0\IIIZpƌժUsyqԍ7ިѣGԩSV,X[^v{}!/_ouUVjժ92w?1rH-^X^{~իWOիh"缯5Jw7oΝ;~kX=^r8(.rw+>>^#F;C+**J7t~i]y>כ>}}Y=S*U ^yGֱcԣGO9] }yԩׯ|McԪU+͛7OժUӷ(,g k+6CCCh"Oun:kݮ]j„ z뭷t!(99YC Rƍ#Fwŋ 6Ԋ+?5kzаcoY~sr4tP͚5K{QJԠA/5-޽4rH=䓊P4j(EFFzexk@2dbŊNq@؆ q-< @؆6! m lC`@؆6Z׶ezIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/comp_mindist_small.png000066400000000000000000001042031307543307100317030ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy\M׹W*H-졐 c5l_cd} S*1C5DckQ*m?׽7z>=9>s|>GEQH4UL@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjH? ΝD"A@@FWGuezLll,$ 8>ԭ[zzzH$ tXDDݧQ9ÇVZJ011Aƍ1uT<}6l$ =zr +MK}a;%m% T|xJ{Ř3glll0uT̚5  [nD"D"gK.{\2R)4i˗#777}6oތ-Zh߾=>1N0mM@TƢEΝ;ŋ5k`-eJ;&4-["&&UTQڦlllYN< mǏy^`B*\2BBB燋/bJL<K,A50j(};w7V\c~#2lGT͞=-=:+l߿?ɓ(q(BEjԨQ7p= gi: hkk8>SCE >A``z_ȑ#s:t耽{b׮]߿|K.aɒ%S^*OLL<^^^'JD!XD9s@WW!!!JK.ENNƌ8A"`8|0Zn CCCT\ݻw%He|xCtT y xx8<==ajj 333{T*Eq s}6Mf͚ѣɓw~9y$`dd |WHNNDFFG033zꅇ*>B=`jjJ*aaa*c{FjժA*iӦkJ^Ô6oތ֭[Y&<==8{|짰s O?Yf0661a<\^O6Xr%7n,s1BCC!Bl}dߢVZG*UЫW/+;k,H$?۷oG˖-ahh(7$>>cǎPjU"22Rﯳg011bbb տ~UF۽{7abbTƍc…T:l]JJ &N;;;i͊+pYlڴ R4z{˗/1`yzzz;w.?>k׮ wlmm1vX}6m*T]Xk3L<Ճ!Ç:l|BTlڴ 999۷/4hgqy ѣGѧOt׮]þ}pY\tI?~7\~}LMM@L^-^~ 5jnܸ?ā `ذaѹsgܿ*UR_~Aжm[⯿† pAʪ8] $$7ƌ/"(( ЩS'xxx`ȑq<ƍ*b[ƨQC۷;vDTT7/_D֭m۶x)t9ӧc…U <}W^޽{XlOS}(O 0bݻ /Vτ  ^^^RyfffGPP>|Yf.] 11۷/^x~ m۶ŁЭ[7/^'OgϞر<̫?>;vĠA#ٳƾ}УGv:`tcƌ͛7q\zn݂y}{{{kZ[XX`044đ#G0}t?~'N¹eff}HJJ'QV|cƴiwߡm۶8uTuϜ9T!33}APOn0g={V=Q^l+MKKC6mp}tz(EHHWf`I"]DA 6XwРA ܹse6mAA>P bǎʇ* >|Pe;ڵ%Bٳgl߾]aۈ#DADq ̙# ._\ɓ'bffR'N1cƨl? @e*/;w,7s V(/O6oެ_~A)9RA8qByxxU]reFbzzҹ|RᵭhooT Ty(o޼e)166V~^Oչdeek (ӧOEkkkR|_A444Qq ]tAPz^tITy3g(ߋ ?R%kt%QV|왼<;;[V(عsg1--1>wqqČ QOW͚5A###UAD"EQTQXe/^ իW/T]PE!!!*E]\**"Ҁxocc:vݻ+Ɇ9s& T(:t(ӦMS6dʭܹ3qRwpss_~%ww>aڵS*H$h۶-߿(ԬY4kLg So֭ ב|)i...J(mhkkZjHLL ==͛7>ڵ͛ ArJ8::?GvЪUR[իEQ>ZhQ*ϡU9Ν; pVQvwCCغu+ɫk/k_\:tPVn]X[[#66))) )}}}4jԨHmX`L-[8vu*LapBDFF[nh۶->" ^:bbb uB6[܈jժy|JcK\=mR(aeenݺZAwӦMvǦχg?It cҥU6mڄ b…FݱxbԮ]RE u+9իW={YGyDqȮ,1XWue}q%␔|87 2dիmQŪy+~Y?~ [J}'Skkdd˗/!!!UT/̘1̬nFT1M'В&z;wM6J۟={r@C4Xb5j 0sL̜9S>Y]UaH$L0QQQxSHEaffE^4!믐?X8d!jV됚;w֭[WXl#GB"(,fP^=tl… *ٳ (|oܽ{qqqW9(1b|J?;_u:v8v1CCC֭[+ر#DQTѣG@吳%Ҫ޽{WaI9::oɓ'{P# cBϞ=T~Ä ̙3gpaUVh߾$w$eUϻPْ;rss婩9rM[[ׯ4c۶m:Nff&.^Tsss<J*8p >}ɓ'+%(|/ kիL?V[[[sx|9\?۷oGʕSv㫯̝;/_ȯˈ#J܎>֯_u)x{{xĺuЯ_?~}E*UsNDDD3220c 1coSիWC__ϩ)Hall`xB^ǗJnRyWSv'i̬Y,YM4A׮]般,\t W\T*Ŏ;ToookFTT;sssYFnN#GO>022Ǝ+RZ5 0;w:wd4xwetssoV_kܹsҥ tuu8q{SNػw/nݺvvvD& E4lذ|^hŋE=dTRE]R&ѿ^8}4aggɓ'|5j͛ÇCWWX`ԩPK.Xx1֯_˗#33vvvDR˯ʯZja׮]Xf V={" %nϡ8SU/^\tppڵkakk2mCCCO8{, cccԮ]k׮k.3c $%%x"rss1tSSS\t ˖-î]~zhiif͚1bׯ_=`Çعs'-Zlxxx`FXd :$J\\\0ge=1w\9rΝ w~AiŴ… ѴiSZ [lAVVԩyaҤIJKwsիΟ?ya߾}@ݺut<2QFXz})S(-'^ Rׯaii*8Z>Ǐ~VVVڵ+&NVZXD ~̯<ˡ˗/+U7|{{{ލioڴ)0~x 005kĕ+WT> W_!((HYDDDDeQVٸp(6|ڵk5[hΝ;#((#GTkDDDDDe'۷C|}K|Vϰ{nMIDDDDqL@J(++ wF6m?^''ʊ'gyJGOOOTp$bڵkrrr6}tHRoV‚ Я_?4nÇWsDDDDDebھ};UN:nccϣvژ6m兓'OADDDDTpV1]t:8VRP7p@MPOOO?OOO (މ """8ًx4 Qk%; DDDDD6BDDT!&&Fa J\cBDDTEa Z1!"""֭[Q~}MA'7Dq: """""R& DDDDD6L@Hm0!"""A"`͚H}A";;;k: BDDD 񁫫+WP$&fe"""O15QqUxH$>|8n߾jժBhh(޽;T}}}ԩSSNErrc:u nnnTヘ 6 ==w$ TKՐꦤ`ĉ±eqԨQzzz^: ۷o+-766VB Jagg޽͛7!Uq!##C_~AF```իcxR?>zH~Me?ÇW Ͻ{ЪU+ԫW_~%addިZ*_@9raaa022g޽߿?ѿXZZG֭Ѹq,h߾= cccԪU p1999F:uc߿ٳgѴiSv&OsΡgϞڵ+1c ddd 3f̀<<

    x@AA9sFAlӦ-((HA󓗥+WuuuOAH$ÇgϞATgkk++mڴIAܼyR]AΝ;iii DSSSBV_BСCEAD{{{ӧ$J*T*T"ȷ}VtttϟJǏ٢(xʕ =KqKf5xTzu@\T IDAT+X~z9CE&Mm6yYpp0_YY2oC,^ [lArr2࠰Aq5DGG+ zt;ՓoERi̙Ғzja"""bMGQ4i0`EQiLx033Cdd$]vJu$WQFJaaa(̚5KilFtt4ׯO(m}e Ibb6*Qhj׏ٮ%m_z<'8L>)ZjnUZUeWAr2mmeeeJyaBDDDJ޲/_,1d={r?T&r$T\PyOXv 4lذ+-n!"""ʇ+p֭B՗ G:wҶdDEE)%fff4ݻw- WWWC4ݾaL@![uȑW׽zoߎfRLԯ_Ƌ/?~|i SSS2q777| i`CXp!{ԭ[ݻwRSSC GTT ֭Czpn޼ www;ژ0a̙MwƩS`mm +++rػw/|||ЪU+t?FXXV4~NOOOAOONNN*3`BDDDTSM6Xb.\`G_|PǎC@@v }}}˘?!HJX~=֯_KKK 0A\fKnܸ@?~;`eeN:׷Pw[i3f )) ŋC2)#4i*pqqADDҺDDͻ%UVͤ װaðeƢf͚})9!"""""aBDDDDDjH3{b_ѭ[7ţɾO""*jkKPPa{*59sR1n8ٳ:uBxx8,,,kԨ 6 eo߾ŋ1sLɓpssSK< tp:Q>V;w?{xx'N7V }}}ԬY{ӧ?~ݻwG*U:u`ԩHNN.Rzzz>}:f̘LL0ANvv6֬YVZ*U3V^ Qꇄcǎ>?ꋷob֬YUQV-x-$ ڷoP֬YH$8<݋-ZRJ077" -L@ f̘عs'BCCѭ[7L<;vDtt4mۦP7 ݺuիW &N: D6mR'O }}}\~nݒgee ~-^~cŸq0tP[{FLL zɓ'GHOOGPPP}!"|}}1{lbܸqFPP g5k_VZoѰaCڵ :uBfff""""*mBKK ϟ?Gll,{ ̙3jKKKO<ٳ@֭q˷m޼Ç?,YRx ₋/ʕ+ptt̛7'Nql2\5 7nD߾}ѳgO/===\~UTQh#!!8n݊#GNgFVG e Ž;~C"""BՅ9˗]r%`JX[[b :t(4itǤdʕ+aiiK*yH$ JiiiU\6o ;w1LLL?9r$իMel~DAK^|3,, :::ؽ{xaffVxo߾Dԭ[gV>I& ;ڴi0??׮]ZnM6۬Y32@bbbڧ Q!dddȇ;)) fff+^BNN#RSS&k}Ν;y& ͛7~~~R ֬Y+Vȇmk-*1077W99ZjkjjT&TvqQ!\p999Vj֬o]SSS$&&"##㚘r'''Kܦ "" e˖O>u=c} ëWpa1ڵkьϞ=+9Q7o/(+rssqرBMHHPX4,ZpvvFzׇ)]c[nXn '쌜\xQiۅ }0`Ο?[[[L>}ƍ4igV_xo޼Qx3220|̛7zzzX||ƍx?^x9 gϞUَEJgȐ!3f ++K^9s""""Q$ܼy.\@VVZlm۶\;wƌ30w\ԯ_{ ={ .6mt .u{Cjj*>|Pȑ#Jnڴ gΜnDXYYaƍJG\~k׮Ѿ}{X[[s.]~UV(f͚SNŐ!CsN;v 67~4ooAT>1)H̚5 /^DFFjժQFɿhŋE=d>4J ຺066- ___t%T5{lbŊ8t޼yjժYfJ:u*ڴi+V… )1zha_6eKjiiҥ u~@).mmmoغu+pajժܹs1h y~ ǏGdd$9}}}Ƙ1cU`_8p_Z VVV6lƌ~MiἎC":qₙ3gwUxP\\aff  %%?qh gRmMѨ ]Xy Qnݺ[n:N6m \0m1x=G.1KOOJ+} wfBDDT gggMA0???ܸq@\\=D|7*8HgS`llǏ^z022 ۷'Oŋ*7ok׮;l""""Eq!,]6l؀5kh: """""aRDk׮E͚5i&8pvvvXlƏ/ccccĉ6mŋs+""""И6fΜ3g[ǎSSTDDDDD!""""""""WZZbbb4F J5@"]v8{l֬Y={6Ν;www FGYL@(_111IJj[ yA-}jQl,k: e/. aBDDDbQsr8 v www@*qXp!233ΝD"G D")쳾DQ޽{ѢE TT 8p >}T5jԩT sss4ncƌABBB;=Hx…ahh#G`8~8N8{{{cٲe???NNNjg͚5 A^о}{\|v]]]@||<7oCFF߿[bܸq\rwG*0,\5kĕ+WPjUC!00=i&H$   ;v 88ݻX|9ƍptAO`QqF3hiiaŐH$ذaC5~xF zL`+@e9ѧ Ux:tPVn]X[[#66)))%nYfJe666DyYϞ=ahhcǢo߾XnnݺU4 UxKKK---!"JܖRQ9992p>}ԩSoаaCbʕ%HSQgbboU!888`ΝxñpBb„ acD& DDDT9;;CE;wNiݻw{{{x771uTرJ"""+ܹsKyyNN&O Q1by9?Sdd|hT*hm}L\*Qx\oRR</"77C7H/K.!""鰱_|I&ѱDK)L@P t_ѿIRYk֬Q=77W*)ӢE hѢQ}ZQ0 QR)5\Ԇw@V|7f>:|)1!"OV\λg0 \NDDAL@c'" },ADI$t"""""R& DDDDD6L@Hm8m9caBDDD1Qq1!""0MP1!""R)HDjIDDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  """""R& DDDDD6L@Hm0!"""""aBDDDDDjԆ  ":w$ʟ+W(ԍ'`nn!C˗H5j„ h޼BYڵ;̰` 00'\uLDDDDqL@ }s󑞞k׮ТE tAAA9rB%""""*38DQDJJ Un߷ot}vޭ0& 4|p:t@DD|ۓ'O 4kLi͛ڵk "C߾}ѽ{wTR7oD`` p%899!>>`ii%y DDDDT0)"WWW_{yyo߾hܸ1{=z%+3!""" CJAڵѳgO={([ CDDDDTH)Q233+P<߻~~~011Q(8p XAQv؁;v(%''k( H)> `hhCCCXXXիJ\''|tR8;;PT}  ET>pVxB A.]e8teOƝ;wЯ_?JDDDDTHRZ*nݺu .כ>}:كc„ HIIEиqc >\g@DDDD9RD>>>x%.]cbϞ=۷/Q^=y=?kƴi///)iii)>J)"""zu >>6l|{jj*$ry󇈨ťHDDD#EDDDr+W۷oqeGƍU#$",6 q/; Ro)"""dΜ9xl333l޼իWnx֞={0vX GIDi-ECmCMADDra۶mynCJ$?B* HBBv؁ 11(*ٸq"#""""erq"-- 033S."APtDDDDDWL@&MիhԨ!"""")ø{.Ə䃈) H:u02;w.V^h:"""""zOriTZԩj֬ ---z+V@tDDDDDWL@V^-ÇHeʄ4nVVC\DDTމK!k?`l1*""ur}=z=ڢ[npdDD-DCDDWM@&N˗CErD &`H,QO,DDTA/Ʋe닰0$&&"11aaa۷/.]%Kh:L"""" \Y~={n-[bΝu0qD EHDDDDT1$66&Ls{.]pQ5FDDT1߭B]} J?VHDDTƁN IDATQQQynq,,,QENNڷoٳgk:L"r0nQT.J*ԩS #GC'zooo(*r իzPs@l*w@!o_trAp} DKDT2iii)Tݢ,KDD"i׮Ah׮]p}bbb0\$ AAA&"*~?,M V.mٲS=662dz#"*Ehmo{ijp$aÆҥKyn|2ƈػ($RCP$ 1"El "."b#^@) y4EK.$J1Rp?|KB !;l>+/ə3397̜@r)N맟~O?jڵ:{l~Gտo]"PLYd^xӦMӴir[T)͙3Ǯ  Pǎ%I7 /vڹ,KV@@'4 +VTŊ%I|j׮ry*r-Zx"I)))zwi&8qBΝs.3Ȳ,}7(z|2lݺU͛7WFFbbbm6]wu:z8իJ*.(r|s@0%%%iŊW_}Uu1?UEON>V*˲$ ;wVOxDHr9UPAߟ#G8׭[W7nTy@$**Jw$)**J_}sRJy<Ҷm[-X;ujٲfϞݻ{BhYyuUOVb4d:uJ-F#FxLRti5leY9rF-XO\ӧs9s_ֳ>뮻N۶msYCSbtwW^Qٲex'ʕ+@1 ,JNN֘1cc{j֬J.c*55U&MҶm۴~z\O={xdO<6mg.ƌtm޼Y+W$5nXmڴٳտO xπК5kxb꫹^QYx:v ԪU+ĸL %c=˱|:tL\5j͛7Q&u| 9Y%cLee)++@}ouyJJ$)222DzH9rDgΜ99>@F-++K{Ւ%KTfMy_QFiԨQ ϵOzz$)000Dz g G貔5iD111ȑ#UlY=c,I̱,##åPdKddz!֭[ݵkf̘W_}U >}Z{U%^eߊuycС*YK[n]/ n?K=T(rDBCCo{ܹs4h cyj4d+І rY~ׯ~L|“6mR yDN<ŋk:zh>uTT]>@VX4@{-X>´l2=zTΝ | ޽{5n8iӥ8O^[%o`? Ǐ[o 6x[Zh &I&TJ'x:h"W:qD>~r92|pլYS}bbb<]πhdӾ}<] dy?t)πCΝSn4`U\e,c,֭[=X%j|7UW *[jԨq>̂ȯ$5h _lܸQqqqn>>@VZ>޹RDJ$S\M|2NH.j@DYf$[oeY/Yf, |"hBe)==]ŊS-.eYrq|"|7x ^+ UOo)33Sj]bE S` SNպu8zw}Wt 7hҥ*WJZo܆l2zUn]=3=zz- 0*d޽] (**Jo,{yBhrxw0Ƹ||ro^eIVOi>@Z}G2hٲeڿڷo\~*UʃEOނO{*SN@|M :T˗/סC$I˗/\'f*_}y _|OeiرZd,YcJ:uꤥKzJ+ /֭oV[>n j߾uV%|d U^O?y2hˏ= + hiժNuX?hԩjݺ*6|dZvnx㍪Y$)))IׯW5~xW =>yz駟4x`9rD|>C;vLC O?jժyL+ T|yM2ESLt)O^ lC`H>m߾];wVttBCCMj޼y9&&&]v*^ճgO>|UgBw}ɓݻ*V4-ZH=zО={3HլY3.]ZcǎUjj&Mm۶i r)z0`zB~վ}{GyD 4ӝd̘1JOO͛UreIRƍզM͞=[/os`jϞ=,˶}:U\ŋձcGg-XosDڵke˖uiii:|~WM2E˖-SO=%Iڿ: XQFڼy[k݂%I>:w=CVs+SLk$M:U $H"##s#G̙3<"'u]'Iڱc\XcСׁ4o<= V^.I ̱^PP$)=="'ȨQ.JYj֬)IJHHP۶m5duy%333zҔtY}\ > G}:uW_}$Wٷb/%%Ey^:tJ,֭[7u֭p())I 4t5|Ǐ{BǏWhhwٷ]9UTIڰaC~ׯW֔)S:h<<)lMx ,XamV*S֬Y#I:t.Z@=tP3gwUxxN:>Srrߊ+k.uܹ@OU/eU'[N-[TJwyǹ,""BǏ״iԢE|o{JMMUfTbE@$ɲ,p <] pЌ3_h޽(o^WPf 'BONNV5x`mݺUe˖Uٲee -X@ך5kf߿_~ۧzL[VX!Csi,K;w֦M{:+ aaa*_EWPOB<'H߾}5{l:u*Dz'Oj֬Yׯ*6룏>r~UV-S^{$iΝzwUL> >q1chۿuxw>@O2DiѢKp|!t'fڵ9svޭG\feYںu+ SLѰa5kt9X'Ȅ t7>Sɒ%=]π:uJ -Zh۶m.@jn>@x jJ'NT~TLO%%%A.OkF>z) >\AAAr8̲,,X'Np|E\#φ>>@}Y˪\4h ̂E%z6͆jN>@M;CɿO>;>/wAk׮t.`=Z]t?x@\srcv,3mszz٣(_: d)>@bcc%I?Mk˲egY}7*..m+dԨQ,XOilwQ+J$b&>@FLۜ=esD-)|O>;n[ 3;u @~d9w\,ݻWoV^Kz2SAgb-$7~~~^&Mݻ=]^rfܒu @rf͚駟txfnEr7(xO^3gN`;vLW֒%Kԯ_?Tm>@see˖Ù [6˲Tti(Q|4DEEyIl+ ucdYngHxx%X"jժ<9xƍӧٳJHH3@RRR4~x1rHU^ӥ`4%%%]VD7Wqiƌ:{z衑#GZj. [%%%A.\L9p3xdeegϞzg"orXC:󈦤ﳩ"Eheff~1bUGѣ]'.. h˳ϯgl@Q3$33Se_eYrwY3d̙.%LݻKp >@a͙3G+W޽{&M襗^ҵ^711QCw}bŊ;+ezzC~ 4~x}ܹի?뮻Nf͚t;vRSS5i$m۶MׯW@@)7nd@iذajԨt颺ujܸqz$IcƌQzz6oެʕ+K7n6mh߿G;WwCҒ{~|馛rըQCkvxbu>$UVт  E Hqx_`|c:t6loFyfK̛7OP.]$I)))}###u9so@BIIIzGԴiSK.I ?((ȥP 8x.]Z-eY`IpL $H?~\۷׉'vZUP,֫[Η<:tJ,֭[7u֭ǔ5|Ǐ{A) y__+66eyJ 6Xw_~۟2e tgMQW5~=a'wT M6 5"SVVtQn\uIsQrrs*+Vh׮]6l%^%?Du<]H> 6L~N>|XsuY'%1B .mݦ+55U'NTzԧOOx$~'YO?T~2˲rZzq >\ر&O/#ʕ+/oڵ_B(@(@8v"E;9<]6^'Ӝ$%&&^:L Ձ$geH.{@+EʻϡDia^+E |  m lC`@؆6! m lC`@؆6! m lC`@؆6! m lC`@ߐꛘjx+(IIIjР PMQH}Vgє}6U@@Q:uJ=ڵk2ephΜ9MLLTvTxqgϞ:|ރOҋ/Yח$Y_rr1 IDAT5k~McǎO}x|c 0ydݻWdY,Y>HegϞ*Q*WիW;jy>2H޽ծ][_~Kx󔍙$)11a:Iff~K!^›lLk.nvndr"^frX~w׳ivrM?~ݼ<) e!^&?Du<]FN7ur4>O mxxR~~kϞ=Rppex x<\<)?{Wp L L\ xm lC`@؆6! m l_iI^llBBBQ<y5pP2$I ZoƍsGIuh= @!wQ%JKUr^y܋ZR$ou<B`@؆6! m lC`{xVZZ.zz٣(_: ).\W7@ u7nT\\\w@ IhK_eXyDS޹RDJ$|MӰ;/YHCT?~=&y%.w-<6,\5잡3t@pձ{:vClC`  ɓz.ڵk+^V릛n*hyds|ދ;z(e!Ϛs,wYg|IE\rV$)!!U2"]+}~5Vޒ>d._5 4#.gZ}x=<6! č233ObŊ Q&M_{,c nԻwoM2E=zԩS:tiG@d5n8?^<UZUO=˻̟?%xMgNx_zi!OU~Ɂs$mɁ&- l T~kBiTOu-[4S$Α˯8OP nyf(,,̥QF-[x, nm$ nAAA@Q|Upp233sgdd8_(;$&&BrAIS/MGM6ڴis\Vgѯg./×ңcg_e/}wW:v/55U6mmٹYיmԙ3giS@'yr{ ]j_2qƟWAw>ok+'vBqnfrY"|Q6mtm߾ݥ}ŊjӦ>Sq.͛;@̝;W˸*qMnZJ*^$կ_?:m۶ܹsxVzz٣mzW@djҤ&NaÆIԩ[ 4nX;w?O矊֜9so>͚57Գ>sѣ/M6. 9 lC)dzUbEI&/ފ+Էo_(44T߿67f5iDʕSppj߾}8+bxرc*W/^\XQ-Zpj߾;u>}ZcƌQllUBuQ/Cb={z~d 0]V`v'7n:B С{wcLΜ9^իWWPP/+++t :&k֬]wݥkF*_ZjKݺu[H |yẅ#L%L ]v<^33g4O<)YP9|;/=c&,,8x>BcǸ4o\s5f޼y._+WtqiӺukjjf͚e&Oltbv+wɩSr3 Ʋ,h"wbqtXezif̘a&L`M@@Y~;@xp8LʹiL޽eYf<+蘼{5cƌ13g4&M27esݼy 2 40ӦM3#G4AAA}<cLzm-bTbUCbm۶anv3i$3}tXez~B?˲ɓmFiӦyvmk֬1e#G^rߋ/6e3gp7{ct`1&z'5{lڷonݪ޽{L2^\c)I vM];Ƙ8qBVRRF;w:?PXmۦgϪaÆ.~ڼys!IcL6.z Bm^}U9sF]tɱX8ZJ!!!}t=zu5~+x6k\jԨVZnݺ:u.\^zI;w|P(dvǮ]$ISLQxxf̘!cƌviÆ [E|SŊղe|mv /bŊG73WNQQQ+MXIҷ~U:׮]+I^7CaI||/_.I Ղ \&HIIq*To@crԘ>}ZW ;EW@ Qzzs9_5kW.]ԢE_> /~M:tPjjj/lvǸq㔕#F\Qvk\~m=쳺{tԿ-X@?Caco(s;/W/##ùr$%%{Uzo' .eԪU+|z׽q;cϞ=4iz-;ϓ 6L3fЊ+t7^~ndxdooVJUT-ܢu|92o|yk֭[ĉ5nܸ+8eǘ?W||:u$?&L^z)-,Vcr;8=#ڹs6.o]dǘ\m<1&'No^zIڵ+`徣hǯBe˵2u1nv.]Z_|BCC/k7t"##~FvǨQTR%5o\{ў={Wڳg=rʒ#Gbc&"""UQn]zj<$ϑQ^3gHRwiVZjڴJ*+W֭[_A+dߎN:׆ \>}Z[l)>Ɏ19&xuIof+Ad+=i$g[7t-%%$&&3g8N|}]ٳG\sްa۷kŋw-E[n]f͚r8ynݺz衇=<17|s(QB]x+7c\6nܨnݺ{Vzz,YuwI3fVX-[jРA2hԩ*[]kLuM7Zj`1&ڵ̙'NM6JII믿 2ރΓxUTIj҉'4sLٳGei+۫J*jܸʕ+\СC={~^~e5mT͛7WW^yEm۶n!_]cuV}'饗^;s1ٻw.9uI~K _W;h;O' _a|Ii̍7ޘSQ{mٻw-**8cYVE8|yMZLXX 2j2?=Yrq8^AƸ\vmMjLpp 552ӧOîdӦMM6&,,̔(Q{^ivɗ_~iy7~LWʎ19}yLtt 0K6wu駟l9cL&L`jժeM2e=aL74z0B 37nu?~Mpp)_yǼP6;dsp8/ac/wʕ+c<'t!W%@؆6! m lC`\ٳgph߾}>UVph͚5nf޽UZBۇ;=Z}>1I>gJHHPJJ*)!!A;v츢3Fq,˺m_ 8F˲;vhڻwr[yO1x(,}u릲e˪_~VvޭwyG>s=vXX5sLsٳ*VXaB̞=[}՞={t5׸m?9sFUԲeKZJ͚5$={V\v-ZxSVV\~;7 ;<@a_գGըQCk֬Qxxsu뭷Gںukn,Kgp8<>dY-__K~?ԩS \]ܸ m.܂gL8Q>}KpM6MN҄ ϊWɒ%UlY 2D~CNҜ9sp8p8Էo_I?;S+VP ziժUŋN: VÆ eznݪ޽{z Vdd#Ghlzŋk޽;TxqU\Yos-[TXX4|s{E[vءnM\&Ncɺ{w0~jРJ(%K^z:u>>>^tm96z^"))I񊈈PHHbcc5rH"11QݻwW2et뭷,˖۹ѧOo߾*_TN͚5+5rHUTIJMM3 .t[ѣ8c</{QU\9=:w\c>O?Ujt7[oUժUXjժiܸq5uT=zTs̑${zt7jbYvڥ=zVϞ=5i$u]z4zh=2hر?믿ݻկ_?UPA5}tm߾]?C'++K:tP-twjܹzQFgϞK={M7ݤ<ѣj߾:u꤮]j…zUn]kNVZ)99Y Rdd{=XW_{jݺ/g>֭[Ay4hNgyFjՒ$^[[oU``|AEEE_~g}^zɥoΝcǺ\8Ƽ΍?CM4 }ׯN8_T``z)eff^V[7nqzwi*YoVVڶm&Mhꫯ4ydEGG롇8ǎ3e{7~wu,˜0ekXeƍl;v 1e 8gcY=zmʕƲ,zjg[͍e&I/IDATYfܹζӧOHs}9^}UcYYh---\{9٫W/~TRܹs= N^5kfJ,3Pyq_t.vnTT9rĥ[nTR&##[F g[ Ӧ\r^z&33?7e{ٖs饗\g6lxw,>!55UTx @7ol/TbEuZҥKɓZ|%^Ciڵ۷b 1F/֝wީ,>|uڴi:zR```Ci.φtA^8n؉'d r1,+GPk]^MzTٷTR%G:ێ9| QrTzuI TOpppgcJ,%Jpbr[TR.ݻW5j/&&8pbbbԾ}{UREӲe.d]N%Ir!?~\ӦMSr\+˲{d͚5s,Yfs6{ҥ/ 3 |Bɒ%UBmݺ5~[nUJg˜™.n{ >>^z)կ__aaaRv >}+}vv6aaa*,,Taa^jjjc566*99oǏA F`t C999֖(++_??E ם;wvmWxt]YV*ێrI4jʴߨΑG^3w[ZZZҋ/uhXQ6VUz66Mz>w 6FHHˀoueEGGWFfffTPP ipd9sF*++Sjj***$ۭ~y< gvUTT.]dcaTFF>|-kllLn@ J*//A#pدlEEVWW-..r)--r7--M!!!r:Z[[ӱcǔ+]rE/^TuuGFFF~{^}ESSSJOOWUUΝ;'ǣ>hbbB߾}BCCt:umeffuiݻw/aMBH)))ٳgܬ~(**J٪{n:PUժƆnݺe ;2АvzQL[%`lᚘnjUYY^77קn)..Njjj2ĨWͪ @.\oߪA=== 7;9zJ_|ѩSw fwk7oҢ+""Br:}w_xy5/$á_~YueM6zW˺~ӀTZ5*UJ͓zDժUK4w\Ν+WSN\UN9RQo؈GGU͚5UL?޷.{裏ԱcGUXQ+5zh9r$DzYגgddSݺuիkԨQ:{l^gW_}U 6TDD.r=h ș3g4uTũbŊ*[bccuw裏>$k?=5ʲh"iF˗WddZM8ﲿzG{!(!!딙W^yE͚5SttԼys+~泎_ti:V'*>ѣG+TDD*V;^eǏƍu7K.QrԱcGxz)I~o!K1 _O?k׮Tʕ+:o$ݻW PLL"""ԬY3}'9޹sz)]}xw}.9q=Ӫ]UV-=:}t뤧_V-T\9-[Vqqq1cFmٲepUVMڵwrrirǒ-^X͛7WٲeUR%p3 ̙tCW_}u˖)S6K*݉>@w}Μ9[nEw:͛755Y8-Z(::Z]vUHH.2/ÇM5w׸qcǏUR%uYUTі-[ /hڸqqСCرʕ+kvrꫯjw߭*U?֤I{iÆ *_|z׫SN*W>M7_-˲7FeYM7d8q"6Ǎg[eYƯ2e˗{~a۲,޶m[۲,iӦ}ӏ?nשS wzmjԨaMOOO۴ic[e9366Cٖe͚5333sc~,ˎXϧ~~sζeYs=^nͶ,o9rĎkԨ|M۲,I&}ӏ?n7mԶ,~7 ޻x,~衇v0{۶mw`ƌ~eYvݺu1{BuϾd駟-˲˗/o8oٳ>vX}oٲŎoYw67xö,nٲ}iصk>z] zedd-˲}]8;<<޻wog߷m 6o<۲,m۶ٳg}:d_uUyX|{׶,^hх^,cv$]qQFoխުn:sѣG5p@n:@c /8ͥ}SN$k*W߼޽{xY_|QX`Ξ=A^z~}YEEEi/=4iO9.ceCX֍rڰX:܌3FUT_THH!َ,o?8UĉI&IR̙3Z`5ayuѐ!Ct̙խ[wYԶm[mݺU֭ڲjԨQ~z-I&I{J*-[MKUlۿk?XsΜ9΍C;l@ OX>33SӦMSLLL / ˲rއ<}u3<㷍|C 5\7O %X@ 2uTU5|}gە֬YS+WwٸqJ.ElVΜ9{Pozxx6lx?w%qZn.G,KM6ͱNVqA5Hm+WN;w{ァFK.jݺ7oA݉TY[Um۶ѣ~wQ?&MkRfΜҥKkk \,K6m͛7;Vn{+/~Y}]JYye]zv@:x֭#]xx={js=jӦz]z饎jܴiBCCղe<-t4 bbbB~L>]Æ 5\>(:tHTZ5{߯gY;׀W{'vg?3#>&9O~I&7Ըq$ֵkW _'ǎ;t!$[|PFRrr飔mڴIwyÇUR.U*W}9V^r?Z~GΗu "$-Jqso>|*VnIիWWdd,;C-[9XB 1/k~Iҏ?kbY?Ure˚:u^z%YmW&M;.7n?@E]wu+V{]*_ :8p@I)ͺWDDׯ_u+B{V\ڵkk~X'۶[nՎ;*Uw߭?\~TV-u6┑vk׮Uff/ςꪫ-[|XO?t(<ѣǫYfjٲ4i(oZvn¹sjܸqA/RJ*7T׮][nE 6ԑ#GW_iǎ:ƨ(hB֭SϞ=Un]oWÆ վ}{M8QGVݺuթS'լYSǎ/kתu~c,5j襗^#<8uM+W֚5kg~;,Bwrӎ; aÆ#GoC}pB%$$q*]ڶm֭[ȑ#5yd5h@]vUddVXoV[ֈ# Tg-?Q[lQ2e| S=zлᆱEk.˲tRm۶MszQ7qD[NӧO׿okNӢEtqM>]5jȱ^ǎ?Y+Vе^[jɒ%\+$$DG_knjs;!Chĉjذt}:t.XGJNNֲeԠA%$$ٳzռy y'e+zjժiϞ=駟󝑼;-ZFm[֭ӗ_~Mo~^zi…? s:{,Yf͚~p|g?;ᄈl7h.W]LjժvNٳggΜ-h[e+g?o{eWV.S}ڵ_{5.>}!!!9ŰuVsvJ쐐;$$Ğ;w2ׯufWZ.S]Jqg;%%oٚ5k=#D;$$$VZewPf׭[~s<Ķm]v9'_xߟ/1~xُСCSO=eoޮVfWZՎ.\c{^.CCC퐐XpݪU+;::4h`?s~sȭo-˲uh233_~nڴi-[nڴ/\>7/qnݺvXX]BC˞ƍo.W]\9oˀX`ݨQ#;""WzG^2JOO׿W_}aؽzo^rkժeٱ1cӧOYnX]L+[nmO0ޱcoW^yž;ZjّvŊ8~oO:e;֎_-˲NHA^#mvYPK ,G}x)|ڷoD;rPHoѣz]PqP$o߮d]}%@h5j(Y;Ӄ0P|MZp܋2|p}Wt饗jǎZb<z(.@z״vZU^]SL/*]tў={СC5\F 1 \ o>\R5kTDD 'Oj۶mUre)h@ʕ+ճgO,X@weK4 Af͚ν, 6m:szRR]vŋ..!oY}z܆ "Y]կ__qqqW/:## +*]teCf!oy\x+Bf!o9Cv%Em6 yрz.."oYpf^WPr$&&z]\Df!o7 ,+(eY,m<4k,K,m\UVUddZh?޽[FR||5k\vժU߿4hPJ_Z(7f(l@)SԩSN:iÆ yɓ'k׮]k%Ie\6))IIIIPUrE1/A¸/Prr&NI&iZzjԨ#GnӦMuiy.sѣZnYKKKf IDATBf!o9ŋTRz|ԿmܸQkFEEK.q^t(.d!oYpθdӦMW7kLyf/r?KH^WI>}%Em6 y׀ڵK1119gM۹s%sgi֬swڿjmBf!o7q ɓ'czxxo~IcwuL5 :}tNG:u(k@bbb^fk.IRժU.)N:)!!ҥK۹s?#5kߴT%$$H7}ܸq4iߴ۷+!!!=I7ĉ_?A*}樭{9cժU!18M#rGBB֯w8;vl8}JFE}Y*Ǒ8 R"Q1pq%%:$gX5jwBaFa*U>rg}ֶ,ޱc[eY5k.쭷j^p[2*GvϞ4߼:mנAO-q>(eر^Y,m'א7΀tU9soӧ5ghBժUtiiiJOOTԯ߹;Wd?~%Em6 yΕ5o\w}F={vښ;wo߮9s5j͛m۶g$}ڵk%Icƌ-W_iٲe[СCu5jn-:_|!}͹P'\Oj:x?WV|X%+'cʲ,ٶ-˲4{l7 6m]ߟu{}d>U@qf%Xҹ'O=s^Y, 8GR;##/Lft=҉ u pyBހs4  m\fb)9ٝz.w(~h@/Lƥ-Z//m xр3??lCҭݬY.."oYp9}gN(,m)aw?wISRUWIii^W̘1"6 y|zqvK}֥ OS@p +ΡC ^Y, 8GxhРA^Y, 8GzއzU[vRС%Em6 yрp H1 /1X043[t%Em6 yрOng7hVFRR%Em6 yрN>`4mo[SIu pyBހs.v&b_t &MÇ7ߔ6n,vP2pEs?:h@o@Aр q@v}Bf!o9C\q]x`9R||<9,m6 y1z]Ay'""6 y8R h@.."oYp`o5ٳ M<"6 yh@T޾]߿/Z$5lXxW .Bf!o9?n58ݻ`u pyBހs<4bK,mtի{]\Df!o7 H1bŹE [ۇ{]\Df!o7 H1ѩtHgԢERAoxOhy]\Df!o7 ^b/=u%oȑ^Y, 8Gr{"ya>j6+(|ӧOBf!o9fiX+ ܶ,m6 yΕ'}}G?ٝz>΀uGƎ^{ͽZ. ]&MBf!o9 6py;q%Em6 yр@vxe^Y, 8GbѣUp',9Pр#&|8߿ ܵo>K,m)FLׯ%Em6 yр#KuΥ{]AKLLBf!o9tA~qqq^Y, 8GbSxffPh@P$}^a5>*IcζbƄ;adzz]ř5k%Em6 yр h9uKMMBf!o9}{ +pߌ3.."oYp`ݶ r#G (kh@)!!"6 yh@4LA.."oYpE"gϺWGС%Em6 yрu۶y]R̙R͚^W>΀W_FSLj,]"6 yh@%%%y]\Df!o7 DAXp\Hrr%Em6 yрp ЀH8uF4 (O?uC߾}.."oYpEbϞQu;k6 yh@4x ףGK,mAغ Ph@FAn֯_u pyBހs4 &Ou pyBހs4 %ȩS^WZp%Em6 yр W\uE˶EFFz]\Df!o7 H ܶͽ}޾P4h@pQtqo_ܓ^zIWw@рࢤ{4|TF;bK,mAՠ?֑իWBf!o9˶K)55UM4")۶ڈzYk] B絔Źy$ Ѐp ࡴ4K,m<4rHK,m<4}tK,m}Z?VHhB~۽{FxEGG+$$Dk֬uO?TZRٲeCy(@bdҧOM2ENPuI6ls4M$W 4r9?P={5ԫW/EEEiѢEw(1Əu pyBހs5 6mRzIj֬sN]ZjڴҥKQFڴiE(k@vڥӳܹPq6w>ȸɓ 1=<<70!)>P2۷"6 yk@"""tO:_~"##/z݊Ҳe^WQ0Bf!o9@e]6UjB̾ l_IZmU#feefeӲM&iDi'lӓ$ P[wqt$~{ؾ}ӦMӈq %$$hzHJJR߾9{Z8VZ#h,HMMUBB7}ܸq9nX#_8ǑX"# Ǒqt޽DGIɣo/QR(HJJRBBFi9l۶.M#GԔ)StEGG?s3fZjŋխ[7}'jӦ߼ÇK/~Μ9J*{kcjҤIq>Ƃm)ǚ"*J:vpeֻ%ZJJVwk׮̙3}N>9sEcJKKSzzzQ|yxZ`z:~x>p|+@Ig܃7o[G֞={Tvm͝;W۷oל9s|ˍ5JӶmTzugyFJ͛kJƌ[gU˖-նm[OҎ;׿U7|:tơ[^˳/pqg@sMða4| :TzժU+2e xر7neYfϞvƍ?TDD}QЀx"?>ٯEFf!o7 HXX&O;wɓtM7-3geddLedd}9믿^ׯ׉'{nM:Ue˖-cC񒚚u pyBހs Bf^BZtthlw5( BxF ö!Bf!o9cV-ip+ݠA.."oYp`Uw:.@Apº8Yt%Em6 yрJJJBf!o9& <Էo_K,m<ԡCK,m.XA`wxR^o HA /RÆRv^W.."oYp%ĉ^Wɓ'{]\Df!o7 ࡅ z]\Df!o7 HK,mAu+^Wрz+@v4 ( .lĈ^Y, 8Gի{]\Df!o7ecRSSդII).X+]Z:{6@Ad}^KIIQ\ "+WW;v!|;Aۀ|嗺뮻cǎ<ԩSzw~eff4K,m 䫯ȑ#չsgUPr"1rHK,m Zj^ӧ{]\Df!o7\6 ?fΜÇ{] PdmY,m AGUtt֭ݻz ͱܣ>Au "h(:cƌ\}٤I.."oYp.hπԬY"w K,m@"ǎӚ5k}vIR5Զm[-[ _jj4i")ERh*ZJJVA{DN1cرc~ӣ3hU v ȼy4l05lPIIIڴi6mڤ$5lPCռy.@>%X5RGT)5u!m޼٣ `'XSʕ..!oY\u nݺh>$TRڵ< (<Bf!om@ʕ+9ʕ+bE@KLLBf!om@n6M6MIII~m… 5m4u٣[Y, 8w0a6nܨO=֭+I{nկ__'NJg@TM2E 4ݻ{n5lP/RRRt饗z]&|D"""4tP\RiiiJKKʕ+5d{]pf͚u pyBހsA݀nٴI{N6 y9 ,KVRR|΍m۲,KWvʢs@s~U+ɲ[Z 7r m:m[~e_(=}mǽ `}'y(* 3 ;y}Q{^eW_}UץE*!!"6 y炲&Mo H 4"6 y炶2ek)==r"ѡCK,m AGz5tPUVMYꫯ<@~mRR%U\Yuw(ZAۀp^>vҥ;+"oYp.hǀ&HJJBf!on@> &Cjܸ Iҁ/j֭W\dK,m Kvء6mhǎSt1IR 4sL/:uǕp*h#Fرcڴi.2UR7ϲ,qz=@~%XVu5۷\ ɓ'zdwQ)ܾ o߾}!S >*ӣGK,m A={//z'$I;vm Մ twz\%D򗿨gϞZd~GeffN:뮻TV-C 2pO6 ۷oWʕUFZ8qBS=%EfjժE5m6 y5kjҥ_lbcc](|'OBf!om@.ٳ}P.\u pyBހsAu Çua{þ}>lJNNVLL%s9 "oYp.^zIǏ{ذa6lX?nUrM7lٲ#GG96hYʖ-MiӦ^ iٲZl)I:v옺t领 z\LFݝ3m6 y Dy6 yBހsm=6˲,/Qhhz)G;+sOjj4i")ERhYn d}^KIIQ\ "hs'cN:2e}!EYh@C DIj,c@N>e˖髯Hy]\Df!o7\P6 KV׮]駟z] PFu pyBހsAـnݺڷoץEj^Y, 8 $=6m4QqFY, 84гTre5lPm۶Ull"""r,7uTPAۀ̘1իs](>LG_@q6i$K,m 0'.."oYp.h]JJ>s=Ϙ1C_5jreE''^I/hπ3F~aW^1cƸXJso>PtIIIQVrߺukv"+hGtҹ Ç](|z)11"6 y|TFFݧO۲,;44`_qvHHmYݫW/;###m˲_|7ԩSv:u-[nr8 IDATrmYoݻ׮P}}eYq쐐 [-ėW_d}^KIIb+hπhΜ9裏CkQ 4p@^ZsUHH_xJ*x7-,,Lƍ믿_7r֭}]={Vn:I=nt=ȶm%''n$(uBަMT^=EEEMo֬$iͪVZsf4sLktiIRDDrYNMM=RTvڥӳܹ׽ꪫ$Iׯ[.H^gY`Yfy]\Df!o7q ɓ'czxxo~nN:hN:Fz;_~ѢE4f*U*} 8ΆBf!o9%R;uoŮ>@*UR.]>}hܸqXb˿|.\⋢ό3~'m6 y׀j׮]UʺW_}}Z~vܩk޽W$)!uf[ne짂Sl%4)۴[6-iFdvˮ6=IRuWq8nԷo޽.?UV)!!q<#9Nͧ*!!!ǃƍIcJHHPZqL6M#Flj'?888IIIJHHPBBbccըQ# >}ZsQ-|ݻtU,Y⛶o>[ܹsɓ'OjժѣG6?Tre5k,>k;;vlݼys}=z٣ڵkkܹھ}̙[nԨQ7omۦիK:׀hB}UTI/lӭ[7UVMב#G4{lm۶M|ʖ-[W%QBB-[up yBހsAu$33S}Qݺuչsg]wuWXv˖-9>;5o< 6LСC_Z-cYeVҹ#._\ݻwԩS5rHUREWVݺum֬V\aÆi„ +g3MP 4"6 yj +~X}wܡݻw륗^w}gyFOC}wy.rJ.]ZA4~(dK,m 1 S۶mUJ>3M6Mo֬Y[ÇkܸqjҤUt y y yUD7n_|Q/;cǎf͚Yӥ(JـG)i Z5iH)R]=Pu5 `B顇ѣK]n... XGX0k v6l#ow!ow!o:AFr؈݅݅h@؆mh@ ޶Ӄ1Tz.. XG8aÆN7`c.^JMM!)r`Qߠ^&Mڷw&P1edd(%keE@KyM q yyNWP5Ѐڽ{%F.. XGAYO7n\p AFBBހu4 f͚t y y yрⶍBBBހu4 @p+kh@؆lM:5R#ow!ow!o: z Vnnnp AFBBހuc8{Tjj I)NoN1zedd(%ke#Ѐq؈݅݅h@ :`#vv8qbP@FBBހu4 @... XG64 lCAYO?~p AFBBހu4 233.6"ow!ow!o:W6 'N㕔uA6l#G4|pխ[Wqqqڵkʔ)jժ┐޽{k֭Ta/%F.. XdȐ!>} 3fZjݻ6o| u7jٲez5m4Oܹ+Cգ>vo~aٳG]wvQTZN`۷kŊ_zH4h nZƍ;gj*mݺUVR>}$IWOjɒ%G?VX~iѢE&Mhҥj߾}%P9ȪUÇƪW{G[n?pu|͇$թSGڵkoIz_n]):::{T k@Լysعs9-AC۷Wnn#ۀk…Zt[}g2d.BwJKK n!]]u`egg+111`h\s\UV~Z4hN4i͛7QF #G:]lDBBހu;իGEEM~~uO'jĈZzfϞ'O[nѿBDݝ.6"ow!ow!o:։'}˻#?w 7UV_)Sk?PyddHUT ;XiVْr}vo6mT\rlr*{KJ;u5g{egz@ҙOd}nOJzط}LIg>w$]Bmjq5Ec%<L)'?|IM~Ҵ{~̜9S4m˖-wǀf^2~cٲeJKKSZZ7n6mhرA)IOO7رc~;33S{Q۶m+l6vvS֯NU׀zj;VZh>S}ԩ$/^}aÆOBԩvڥtkc5kwq/_Pnݔ3gɓ[$33S2$RB[;}_( 8?].I/OÇOo޽}Eq.. XGT/owʅ@w8h@ Iyyc5k[EBBހu4 @:qBҳ/_l}q.. X1B*LJʐt9 ":](kJIZYpYa8р6nFجxrw;WlGBBހu4 ;3Ouvv.XwrKj*@iq3N4 <+p M69]lDBBހu4 Mt y y yрaiN7` bbb.6"ow!ow!o:!+V8]h@؆pPzz%F.. XG8aÆN7`c.^JMM!)r`P}_PJ ʂ# lCJwT2bǮ]58]=o%Fw7` H1 ʯMUZ0g8Kƍ#o7!ow!o:!}U87f)+K4I kAE5k%F. Xt PE7И0b:n.. XsᅒtQ~ש_ * H%4~|0mnҠAߎ]wt CR W1ginN =g޼F[GG +[}mWgԀm(:50o.v*(im㢋ߏ/>,ըQaä?9pvcߋ lP;o.v+Fn/8Pl7By yq:ΫiS{wؚ4I:rD{ȑ^ldsz=Rl6mcoQYy*`qʀ-z*0o.v95m*]+]z鱋/"#OTfl{1R8)? *`+xۢŹgQ$*Z*O%uVc~'/s IIg_v-ʕy[Ӗ/y<_{UI*4-[ rz]$DٗYTqMHի{2_o)=4wُT5Jڿ[{05th`]. X5 !+JOHUtMWq۷KW^y}Yd?ᇽU71`# kĉN7` H_ӣG=ׯpȑ}^N%WΝ[[M 9u̖ /σRRF"ow!o:N Avg6ժIYYҥRvUSUÆy=&ի'-[f؉ RrK׬Ym{eٮIAَ`XVy[n [{~yXZNIwag؁ ;{?a{?,J~?4!\)-\8޴ԯ_ylM_ZjkJ~E0+Z*'/J'o7!ow!o:J*9߆ Ou=RtUSm[u7 ;rHwpJM6s~""J))__^\[m }IDAT-m@.JVnQZAP7` Q԰gRR/nm@n{}N%/l{OjԐ.@ڴ4Fe3۹!d7` Wv;wJuIIWtz<;}A}TT.Qk~\**ϟ7By yֹ9qƏ$ĨCڰau9ÇnݺS׮]7g߾} ;k[UZYY)ߖ֕2Xբne~}sK~l8ɕ2DƎf͚iݻ6nܨog}q)>>^gVΝ^zzW_n,Y=zTؾUVᖶŵi#n_e-6˚4CI'3ffi|iĈnO1=o,??4mtXx<:dj׮m~_o.sĉgddI&##T-:#SNWGzUܺuƄȏ#Lrz'Fi^))/oN{5;UV)<<4ի{֭[?s݄7VN_k׮o8'&;;[7nT>}YGl?'pYSZ_ֳk\ӥ%Nj,33>}+̛dIW!ow!o:5 YYYj޼۷o/Iڹs9MII o߾rssgϞ|rc?W}ի{O}lcmyĞAӧiIg{X|Vr}އN87W5KzUbXխ[Q7`l%$؁*d%K())I]v-mym&eg{55wu*@k@Tzwu˴={dԶm+߶g=wo)550'.X:qDx~~oy]d$+Aiz-ucի^7SVRfҼyS.;]A$11S%IIşPu.]-[m۶笭JnԺuke? .]ƶnݪ^{MӧO;elRzo/ܹs5a.9s(**JC ۟iӦTƍ}˗/5f}Q l0g ٶmxCuq*u $ 0@WرcEO?|N:I>-}ڷo6l($N:i׮]JOO= ׎;ԬY39u4hdm޼*]"I/O>^VNNNsϟK.Dj޼f͚U#Gh[ԵkWe婄[lQND=Zkvܥvء#GUV_h޽sɻ/ԯ_?%''+66Vرőwyg.,`yW}~J|m߾o.y;{k&""Œ7̛7tDDDM69]_24jtx<hѢy}Si֬9s/s6m<fΜ9~_~ 0""Byyy,q;իW:??>ߟ۽{xuQwu$EcǎUu-YD#GTtt.!5aM0A%!qUW骫馛tm/jݺu0EGGĉ娼att JN~~_V/111l?:uXӥKQM6DGGQF_~.ҹsg_gwշ|rӭ[7`"""L||ݻٰaC\M;wx1 f̘a?xa4h`l뀹 1g؆mh@؆mh@؆mh@؆mh@؆?Paaat)р@Xp”)IzwSO9\4{l-ZejNU _wu5\cQЀ@ c-ǣHЀ@1hȐ!={1 oZjh%$$hĈ:r߶5joYׯWvsJ,X]~RV4gΜ裏>ХKIgdʕJMMULL֭A~s 5j[UF իWO*,,|rf͚U.r͘1|2 w@py<1Bzꫯ̹{h" :Tcƌ7|Yf)++K7oVxxo[?uwhĈ{բE IҜ9sԺukz o_%I?F5j$կ_/\PCՕW^)SzyfeeeVZNR=ԡC=szs)99Y#F$;t 7hذaڲe| iJB‚ 1cxx}˗_x<tR_l<y0ֳgO7֪U+ӥK7n4|Gc Lz_nN8oc|I]we<zrrrtoK]ק~CWddowjٲ~utԩڵk_~{WzSeݫG^z%.?tƍ8oz'm6==5jKZh͛7EGG+>>ov:|߯^{MzR Խ{w_=z(Um),,Tzt׭[}tttZ_.RM>]]t"##okÙw*~Qԭ[W;wn:[N ,K50р@:mcǎ*Ӷ|M7|`3]|Œݻws~VDDn&tM2K/ &I&e&BTll$ 0@NҤI9ydTVMt=zT ,h8bccN:۫^z3g |֭ݻu7ͷ\ve'Nw}@qBTv$I>wjժikugΝ;խ[7EDDh޽Zjf̘>}s=zPddnf >\^~eկ__ _3]AڿfΜmK.9R@>}4j(-_,J^|E꥗^c=p5nX W_]k޼VZ\JLL}ݧ:u{;a߿_ӦMչsg_r.hʔ)zG}jԩY_]%vA4w\͞=[GQbbnvM8'xB ```````nmx;IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/crit_sa_lin.png000066400000000000000000001134631307543307100303240ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy| p!qT,_G=:>ӸVJ|[u&AiTU?UgECK"*$Tnv7fvg^f3 H^r@DDDDD$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ͤ =Β%K入K02g\ ۷;|JϽ;~: *U^^^{aʝc˗VTTo>'DV={ ђ̏L!?<ر#,hDO_3֮];y.]/2fΜ:\(3f8#bI}'X۷'|(/^\DÞ#OSZh4DFF?~3g`Æ ؽ{7;/ik >kDDWAp_&M† ~ T4` -- ~~~ي=`ܹ3/_.w8fm3rAҬY3|rBJ,@$'|ߵk:w>{9[ti.]ji&ѨQ#ʕ+1p@kԩSb?A$=')*byꁤ-_APR%CIa ٧dɒ\D2-XD2С =j?==:ʗ/%KI&شipxgѫW/8_Krsswߡe˖j׮wyGp[z݋+WYfG5^^^XlFѻ}6&Lzԩo^:ٺu+ڵkxy~ & ((%KDٲe;w k|/yjj*u@-'Xkm1==hРPzu̘1#5k֠I&3<#GZ2>> @:u˘;w dTR@ΝqBIKKCDDVŋgśol7n`ر ?ʔ)ubxbp9z(BCCbvw䯿СCQbE(Q?<,Ybߊ"R8^!{t4k 5kĠA_aٳ'v؁vڙM˖[DݻcǎV ҥKŋG֭* l߾Z;vDVVX###'N?D`` .]Bvp%i]v_~aaaX`~m׮][k׮xp%q@ff&Zl3gΠiӦݻ7n޼5k 44СCs1̚5 -ZСCq%[;vDjjMg[ɓ'ѬY3x{{CբF{.Ν;O?Fxݻ76.^VZ!##;věo˗/㧟~¦Mn:tl|2e`xЮ];l۶ Cnn.[L0 Aʕ;w>ѣGOԩ999XbJ*3gU}X<ܪU+C rVK(a- @Wbx0~x~!!!߿?n߾כkm7nM4 pƍXhJ.q8Zٳg]6+V1bUO?XbrrrƝ2eɕŋoW?ͱX3eTX1{@@Z-}:RSSo1gywx_u|7xWѧOt-[D͚5m֭[[N:t+V 55M{= <?&Lؼy3O{Lo#b#)) hݺuӳg>hԨߏ4&۶mk6N˖-eqmO_4nجիWM_ϱyf\p?;FzNвeK?ޤ~OMMۀ>}uEvPre|gHIIA.]ЪU+4lWK{Vi4Xlwk׶XTZ Ν;="gbB$F\[:tbٳ)XT\٦Xؿ }v Cq۩M4-:1VXl{Q&M`OvG!22ȫ^z{xx8ƌ  6lSbw-Rgylx/_nr(.cڟ]X?𙙙hҤI~-[>>>s̙G~XZ'E/\tRJÈƍ(_<{=Lׯ_?##d8wּys$$$8vn݊s7 fQY%J ""_~%Q~}lٲ͛7 / f$˕~ ԫWO|A7PJO<[dg(Dž:tsqhc|۝1KyԏsI|8`ʕСz-|7hڴ)qU>>ذa.\ݻc&v VVEF닶m:Ԁ?wFZp9lڴ {ƪUǢEйsg;صk˖-k^CѱcGԯ_W\CpΝ۶møqТE Ԯ]*TիWax{{cܸqƧh#,, Z{ƿ/|8ʖ-#G )) O4)@jԨcǎaؼy3كt&M2{ʒ-G(Wn߾mWzM6ѣG1}tر xobʔ)]ӴwEZ0{l[٨VƏ'ZlϡhfL:?#]*U ::śFΝ;yfB ֵ*V?FRRQ^=̟?;vXغhǤIeJ{֭[СN<ٳg#11GQR%t䖱0\r%*ݻwQR%+=z47o^dm۶޽{1ydlڴ)?={?; &R T"""nk]6Znv]vؿ?|0-[ѣG%KGuD""ٳ'ʃ,>yɒ%8tBCCY|9o"""\r?#Ν;%KaÆ۷a9o.L.]BF5kɓ'8~882e/;D"E`BDD9<&Nz ?!9\>, {bx*V!C`ҤIO #"ǰ Im@H2ˍܺu ^: == ʗ//w8ILL4{9+V7ߔ; čT^0g |AaNӁ.] EOwusC1֢D Cy~0|%΋ 8t(V5&岹L}ڵk-[0~s_7|weۏc廠s%K =i9Iǖ|g;s  FcbGbҥؽ{7.]rʡy>}[w#""l2񃂂pvUV=݃-^5ď,ؚ5폑|ѨQ0{Y!ZŋvJn 7-/ p__RXa.]{-&ecb:t}ŋ/ "88F -^8-Zd2~@@![ ;PP&̷0Dј1cФIV]xx8^x|gX|y~w___rIDDDD^PV-ԯ_iii&A@^^޽+eDDDDDn7n=-;;KF`` ʕ+#F2EIwgՄVH< N?ڵkVR%|GXd VZVoaaa͕1Zr/I_o5aՅ&m@ÇE4hP~3f ׯ_?ԩS&MڵkMR( EEEIVH<^qѭ[7)Sk׮F)tQF ;w(Br|d| M$ ;eeeK.{.n݊g >݂%Jlٲ}v 6VEHHM۶mZ) `ߔhZܺubL\|Z֬Qܹsqܸgc -Laf^Ç=rDFF"&Frgj[ /ǡC.؊^[\gglW\-s tDhh(?;vYfƻw0l0̟?߬JJ 7nMѭL-2@aO6q/"رôkL}v6L^D8i`|{q\:E.* aCw{i<`ǧ#_^|ݕo?^5agJ]N"%%''ʗxFǑ#GO?Y,>=z{u6m ,,q(xeJ).7xln1c !!=z[b  @FF5j7x#ͨزe t邞={JkMR-xK H")))x-[-ouacb'N@ !! &4  2eʠGؾ};.]\Ԯ]3gرce< ͛| .7x,@l{" e$ȳ I9mMSpq}!% IDATBg=T̷0D!Ո!1V[]o"X*THB̷0|l7uXdX*gU$>>^HB̷0D!Uo5aՅ&لgmVfՄVH< 8aBDDnW]IIh`[MouacB$+9WMduaՅ&I[MouacBDDDDDaB~H, DJ2+Xy[򕔔@0|HV*B7k曜VH< DZeօ/^SUM| M$ "YIϏV[]o"X(o!""""w$HV$4n&̷0D!U5 U| .7x,@d5RHB#G2j| M$ ""MDDbBDDDDDaB$4 1j| M$  -l$4~<&̷0D!^pGrHll!ouacB$+>R@1| M$ """"" rۅ8') sŁ,+8[ ;.7x,@d-w$l[MouacB$hWf/:}M| M$ """"" 73DD:lwFD<,@duKHBn1j| M$ "Y ;А!̷0|HVQr@;.7x,@d,w$`[MouacBDDDDDaBDDDDDaB$Er@ZV[]o"X(' R$| .7x,@d5OHB1j| M$ ""PNDDbB^DDDD$ "7Â,8<-j .7x,@d5BHB#F0j| M$ "YI(4V[]o"XɌO""""5ax@JDDDDJDXxx.̛rǛ盔VH< D;P\&̷0D!j ^| .7x,@ADDDD DDd3@$HV$4x0&̷0D!ߜ&|S0|HV$Կ?&̷0D!"""""ɰ!i8D*|7!UYtʕdoR.[]o"XjfbՄVH< DZ%w$Uo5aՅ&$秜|mFєo*M$ c[""""r7,@H2,@d5NHB1j| M$  orjr@VV[]o"XjFdՄVH< DDDDD$ 0>bB$4p*&w$![]o"XjƏgՄVH< D;r-Wbco5aՅ&F5c:ՅVH< 0bBfXQ0z 0j| M$  lr@fՄVH< D;Pt4&̷0D!"""""ɰ!"""""ɰ!- ݺ| .7x,@d5DHBC0j| M$ "YEI(**JHB̷0D!Uo>hJ7& ՍvDDDd,@m '"R 6:z(F =q9aϜ90*U ʕ *`-bՄVH< 6?Ν;oСCo>ԩS]zmڴ 0sL;6mBΝcIb\ EHB))̷0|#wf̘1hҤ || .<</>3,_0c -ZA</^l%J Cj;V| .7x,@put eʔڵkuɒ%=2Ç&Ðڍ{TdĈr@bՅ&ХKܽ{[nų>OV,c(W|}}N{Нj A||p۶mre8 _"%%Z{H"Ęt|2ZIz;w.c\1mIII&]0x`E/͞nm9"###~9ƍ3]lh-Zfql+3t/خ _B9@|/_^t>a9Jɇ#..ZXFhذ!Fe6FxV>Dhh(?;vYff<3h׮V^m=((ժUIIIAƍys2v5ڒ!zۻwe-!]|dnEFSK1u[kע_'^2|wO9~6]'w_/03w.'ג\dW@lp9r?z_~W^sN;w}*\"""""FcƌABBp-Xĉ#663gD߾}/ZԩOd添1|F'NFABBhO,R ݋5k?ٳѽ{wl߾еGt̞,Vܼ  6Z-w9ɓۼ+?>`N6Qf*~@Ŋ?pmӽ{8XPq~և7]֯met/(M4h][=дaoKv@9[~ڵٳa~UnfFΝs<\0ӦnE+uݺ'ۦg[n23?~Z[F{o>fHa&al HNN@;1|LY'f'O,#f Ҭca99ƿp_ǎ~ի6w5{߿m| |y.3_W BÆ?`=G7cCk ;vmlC' ݧL>O6^~az˗ 5ߴcsΐ!Kor&Nmܔ,wQ?f>SsDdNb0s6u=gn7n4|NI1sszm5Εث3˗>aynǏsXܹbig,Fw/%-͛ssM; Ml矛߶)'ݻ^B%OOnߖ;""|s!"""""ɰ!&|0|HVr@ҿ ԁVH< D/w$o)MEccBh䎀< "3DDDX*ɬWX$|r1|HVdK8k&̷0D0<˭4վx?sf V1j| M$ FJ'w$!??[MouacBDnӮyZ뗈HyXdXjƍs|k[ɵo"XxjvyU?߮ƶf&ccBx!&\UTXq#G,z R []o"X) -DDD ,@@s!rqQhJ50-V[]o"XjYWtvpNly-WƏ77).7x,@< o7RX 2j| M$ g=>63ɓeUH< DBԂqQ)VDDDHV1Nazq^1|HVN |cՅ&|$| .7x,@T'H,@mc|&"".>ohyGOod +˴[WO?˗c->7'O/<8q5ʴ?lҥI;yyv-G͛v[NҩSN]s ׯfz3grVΝ+|3={ 907ޖ?H}qlak\gmϚ4uWo 7rsmժDoիt멠K1c; ~o^_.u`@.s~ωO ,dAgL3t;o~<- ݿo|ӧ'$7r먰8 ?hWO[ q di!2Rr'>Ge? !!kk޼la2e˹_{q8`>|Æ/g{\k1=v4۶-z=r6nrn}WbOnݬ{6 0zn99Y8{0ͦMY3ʕ͇}ð/_~1t[_<?vlWzoRZrrܡx,^Qm7x1>y+W?yR1ޒ%RR ;ߢEI2AoR o:ˉυKPۀo./]3|#Gt|_5|.x5keu8+O>MWrDEE`B$` Io-RƖ& fbBawڴo.C`*cУP^w;׶iX%+V=UصK"#ucC WOΟmNAׯb=y_~ o{Z3͖LחtۦoiWͻufzܒ, <xmY/-W͚Qsg`m?^AU۷ݹScjO?t)m ڳ=2mnxѾD02p H i:]lOٲ/;6O0+C.] 6 8s`y]۶,z򰡡ZaS}a~}IüΞ-Æa.iÖ,i}Dݰۀ6][߾]f5y1kԭ+n tby[ 7-"b ۿeKOۼٸ]ضͶPL绰=ym`i?kOrj`Eߎ0v;9HjhkM$,@dſ| &)܈DcB$+`C!z,gzݢXUX7bm뫯 7y}OLo 'NoN[ +0O0NQ8 _D|,@d;l"|V|\?<˯$۶e[Oczo9o3#ˤD HVr@bՅVPH, $ #"O]EDB 9O?X$ """X*^ܖ2[]?,'>M.XXqRAn*um#.7X,@dZ@]Hor%[MVfbBⁱ{msm]P:Wg揈ԄA) "R,%5U*)ۋ5?) OuIV[MfbB$+9ee=mۥ|KMD!P+;riF9'= +w&r6 $+O;h!xDby~\9 ?DDZ""DZ!Y^-et]ݧYŋŋs_ZAhk.#$Z%wnKF̷7@yUd刈@b@Cr)ÕL[I0">ӽq&KHTT5j[|rCD2Y'm끈6 ׮][o⃈\J"eo>Aٳg^êU+snrhw|i">,2<_l,o"{ Vtt41vXddd۸s2220n8ψ;L[=>Q]7P(yv>H< +W1k,<3ݟy`XbqD6-@222мys6m #"ck YRv!UEnғ;DDRlRre޽j}J*FZ ?H* r ̷XMcH, 駟0l0={CZZ`͚5;LRl I1ߞζaϷ2 =&r} ք py,\ . 4'N3D"y;toC\o;u?P(6D)%K0j(l޼.]`xȋ/(sD9<""){饗K/4YF:!"bۀy[r9o5|ɭ[7X)@퍜^^^Vy{{5AtIu䎸ɐ!7XO>F/*>"(蚷Ee$ NElۗ\4]oDEEPLRpy` I.\b";vH?E  IDATDÐԺurG`xŦU+{Zd-&)`nM1ctrToQуx10yrvdπ/`#ሸ8 5U_?j{5GK۴)aӰ0 !yvGIo"Odʔ)1`$%%?۷kܸI;O9ÇS޵<̣G92|WVR,5ۦ7osrk(ÇΉ(s2}^a 9xQCtW %5yӾe.=L^.® c˶î}*8̓ M ֧#Ggօ;HJD)iРN>+WM6Z*ʗ/o駟;L 7H;?@?Y&1 CK}YtbVz?t.|_ehi]PZ⇍ZO[Ա};{_ᢢt1nɓmZ` S4]kղ^hXӼ9WΏ)$D+r7O))X1HgX>'My3 bΝ@rGy5V۝23mM1BpӦ?~\w%\9c m] <4r?WMgСWH3=qM|KDC+?9z\aRo {eN[LD$7ނUPVV߰J.w~˗]W]C:m"g޽↵6/p_5-G]},߼:{>[~?αcN;p}lѣxWPdI-[KtMhZ)*$etu_Zu.], ќq~!II@vEb+w|Q6{k۶o|~[okfY[6[!^m8$V+9SlrAn H駟FVV,X crG 77ؕ+rGo{\*w23厠(0N&!)8q"֭SNa̙f۷o#GP.V \&%c$4&KѣG1x`(Qbʕ+#ַDXXʖ- ///,]lxyyW]%""""t} mW]v =7oĴisϡaÆسgG/^v͗UyAYWԷp=(i޼9֮]-Xx1ZkXJ*PѤI7ްk>^;g<3dx*M$boѣGѵkWlQ!Xp!SLkŊC Ы,yyy{]";<*ȷSD7yM$b f͚a˖-?0h رc1l0a˖-x饗\Gvv6J.@+W#F}>{)癘X8"eQ-X8x%HgԨQΝ;%7'bB+"b ܿ_[J(eۅ 螨bl? `Qn) {@H1]gشW[?&R.`XGb~O\#;;9׮99._v$=+oWit9"#͗+r@-qVEZ\")t9, G|rl۶ Zr >֖#2211cܹ7rtUˡ|8k9jjQF 4lF2F#'r 8q `6lBBB̆s;x{{~shǎCӦMdQsݻw6lϟo/%%7 ءH< 33j;wFDDDW(b F!ۻ(ʵ )T) (AR"J"";(V@Prr) EP@TrCffwݙw];33udddKOOǒ%KPvm y&c@DDD Æ Þ={дiSYGѣGzj4i{ŰadI7Nv7 T7qs&i۶-ΝC0{lkNRtDVd 47TTB#f$gyoc?-DZ[>Sظq#9{ЪU+IF dbQ{̷0f2r$M (T:u$; "%ko:Ϙ<a `<i4/ZpȸXIEƆ6nq7|{[YTDZ!GvFI/u0H+ DRjCr5w|~#dLT EF!;HosoJHM>Ν;<B7ghCdv*@ԫW9ݖ.]q_ȈB(qYfMDfcSFc͚5~:RRR>;wdGbf(7&hw50?sp&PHrr2^ykY&&NW?] ]1zULvb2TrݪUr劌&;C Q+\o36&PHvv6>;;[FHDa!6ԉ(;|aos߼yl22dnvܠqdkl8DDf`dXxK3fg"72] 4K"q(9z|` H7̷/\[1`_bb"֬M *Gd 47VB1 |b6o" u:cndaOs|],ρɷ:9jH+i֬, 6l؀ywGłQ(B7T(p}~F"3L"qQULټyDiI(c}ń#;s{VB7Qn"Q7CQh"7F* a^,Masu8q/_V=q"Bvz-̷w-\2l`ŊRmcX#2n^ [_5 H"C"<'4 }̑qY, {"2 6lG($#LD {ztt4*V(; "/zBoC4<-s = e?wa~zH ݻwʕ+eAN8lpZno3Љ3)XvrxߩS'lٲ[F߾}Q|yɓeB$RMv+[9| a=On\2LRN6nܨڝw"""""җa s$ =zsS߈(իX C~&Fo22mƻ1lݺ r&p߾}K.رc1k,;wNvHDxl&ߡ3?\2x"ׯcǎtʕ+ѲeKTv+\o3Y&PG@F'N`Ȑ!' ** / ًA?p`S; ip&PG@6l؀ݻ?VdIt DժU%FGdl .clk)m$1'OQF}Q dD@DDDz1T(n2B"b -3|С7V: ;T+W:…  ]1߲ L)ݪ~iewŻҽ.$t/Iv+ a̷$%1DZO"#??"""c2T§[8zbP FE/Ipo"XIHW̷˷ъp8\bBRGwSe@bE{]Y8|>Sr&ҊTqpػh |_.o3mxcBR1ކ:9BBDQH(D!O}8',@';m.w8 cH+ DRݒ6LnbbB$HC1 |=r:iȑ\bBDv̶QxaBDD$ -"2 DR dbnf-6;Qj*o"XT\}d@b:+-DcXBs0>}~iAv@<qmqڱczC.\/7O6K4 rg'FȘ(`知M>G%K^#G< "Em3mF~wo } ye@dn n7F܏'{+Uɷ+Wgݺmڨ{]n5k'oW2\T,b\CթܹnPߣ@ |9LR%'Q8"" ;.ɎaŇle{k8B "" IuA99$"5,@#;(q5mdH+ DRƱPܘ Řr/4MzaT;ʘ_DHi0aͅu0xMc]7oʎ 8rw\WWv|p@Ӧ33t?[0oeˀ>}K mm۔iode+Vw]MexϹsJ[vY. ԫq  D!&TBܚq|W{z plʳWzmm[6k؜ۧܪPѣYt;V_5nxsʕ@NX/$ <(DGˎ(4x:}g יּ9RVelڔ9zP念wqh|e`u碕(ܱ!*ѥΙ6|eGyP>ʲ@<&- DR p?ؔ[&#c}|iHV ]1Zy<<.BgU'<,@(p/< .d4,@B  ?_>?;22 DR6\lfL "t^/#s7i] <\g7V,@Bv+;P£aU0DZ! 1v/<60ȞQ(_>$aBDDadAi`~337i(l.;p(}M{g8vR> ?}mOʕزŵ͛=JgefvuK~}|(nDH.]V5^Z~׮o1W6x_}=oi-ʆu*@ѣچX(XM K/ի23 ́G~;ɽsJdGCfWvD'% դI{SӧÝջa l`qh]ju'tm[@߾.}8;3ƵŋYc9 )#Gw(;v.] ݼyÇG6mPhQDDD`mߏ6m ..ѣR t|k%,}OúAUV6.v(`&3]snݔ#L+GygvD(XҥK5joy ~% !AvNjVnkvWeo幝- sJ*үTRycHW̷0)XG.Tk>ׯv۴,q߶,TWeСpr._@@.Hgm͟?K(6dv1 ]1|S?,}}ow;Wy=tԸ-=.[x3 A HOOwϓmH?-\z8fի/ ze=޹sHcx@_}mWq럶!`S=} Nn%P*lWp>·=· C|f>]>Ly|өb*c߾]HLLTyp98'ODbb"[n!11[:DzeKлk>v>*q]c7N|L݊ IDAT2Cj%Kdž 3\bb"QbEԪU xGsNaXĂ \(QBtť{*UD-TǗ, Y($g@ c|߾} b;`a23mk3g !ԩYz{=o/.s=p7k.Xגex$H:voO?v2 ]1|6-'V.Q(\A~:u*\g֬Y'O ⭷²eЬY3 4ׯ_G}5k$J6\3*,)Ä pPX,\_}, z聂 lٲزe aÆ!h׮&L"""2p>2αSbcǎijw r4DDDd,x Tw&!ccͅ;'Zh@ "^6;g8mϷ?GGX ,@*;m.w0\_ <ڇy}߁-[QܵowH*ަ\osaih;sFuZާnkNxd<""" ;Wˎ@`^8HE(,@L*XE!jHW̷0[x;U "nt| m.󭶑k$XI5Rv+\osP-dB5. ,@H7,@t w}MT ,@J6\o"XIGv+\os-<@fH ]jHW# fB "d@bͅ6522 δY',@ttuk4wB{R>=WmRs&0>o aBDDD3~o~Ξuѣm:vt߾O(RuxzW*=])ZXI5Gv+\osqo# IIO姟UQ|@N(t[ŋի (2> DRM6\?q]~3 DDDD;WnXnXG@xXI(;m.̷3߁|`_H ]1|KG%H/,@j%;m.̷3%,f DDDDk@H7,@r:ʵk@#s?޴4W/gO܏Td@bͅ6͛ƍ V n~~\Z.8k``Cu0~<`cn\ DR-6\NݻݕOqNrj~^0ǩۮڦ:u`Su>u \t럶[/[%|{·a|(86m>ـXd +VZxלg|d5:uuֹ vC= @؈̮\9I~d$$p{<D?5kЪU+ QqC| m.̷p|p ڵ+bbbP~}(Q̙3Q@;Vvxnt| m.7V,@詧¢E0qD\v %J@N0|pTTIvxFt| m.̷Hp $$%%|p׀nXI|A26\osadG`\,@#;m.̷0FS  D:WO Ft5Bv 9SvT (;ְkRkB<#Њ6\o#JN1!L$;A\qŢE#LQzi ([ x w>i| jT,/l.;sQ׸)wo%; fdG@? &e r%@R^nU6}(xq`X` k*G "<,))@ڧ +0/ws9nUK΀r޳rpe>([Vv$ <;:o |Aё9~E>+;2: ױ׽C`Ti11%裾`(=fR8v 8z}(¾M#@zj?o Z^n/,]*; ϦNbc|8`3fHt+W8{V ,^0=5*cop]H aAn[.U}r2}?l){Yh&E# xl $ɵݧ拗^R k L,}fߕpgyStuO?ÌyKv/0@rcPS<'_~xF _)ڇuUa/(گ|y`,qzt&]wikwMjUPa}=oFTgܭLG io63gn)[ѢM=/:HjѰ!pr/ο95 y30㲗7ohJ)X;+?cGL˕xCY<ĉ wXg4xR$OEv3g*?M>~˧dI[H{ʖlŚ]/hq^=Y|=ÞŢ}}boEy "eU9t7PNkr믁~P @Qcsހe9ݶ xǵײ#?J{OF'gZ1c/G3ouq >-_}5R^9(]|R)^|͵@\\v$&?|rWO,@d˟O+;~ 6Lf1hj7~9}ڷq] Kb6|_[+*V 刈?Nըǧvmgi|Pgiq˟_ٰ?bQ}}[$,*ͽ*6.Mo#6  y͛vWfr/vS?? |U%|zDО?a y:ݱciBkV|m:T[>k12el ZuLyTn6Ѥ`A6Ν}ϟhNaڇ4HFՎ˅bJY>WF@ބb4guLMǎN?P ?sqC{{҆HtNJR{;i<z*E9!}ɒƒڏ\]/t9N?Qwx_zm9.@vw]7-_>rĶ<]֩ܿ?0~k?~m~qq ]~?֛B)|4_y¦MR|n=y󔍔7Zu_񨭳Zn ҍ] 5mms{ڄ o< տϽql}\xѳ~~׿7 N.z`ɒʎP  a~Oݐ!XT6.N9wW\nn͞m{|`Cӓ&Ntݠqtwm `둒tmeȞ|R9Th㸌:2eʦɓՏkٰ]omZ?To?yt=eqArw/o崤?P6j|{ʿ%ժyߣݴ)p){{? 󩧔-}PrsλvUp-'^O΍P- PrDX:ΜvpV:g˞{*N r^,񇒿9sz 'Y Uq#?q|jzjnnY#N# T2mT-;{v΂ ׯ{[s$ e*?)?Hl|{9?u\ĤnH]]k?6?{in/SO)޾]wwyW~|nTÆ7tqU>\,gx0e/o_ӝU:%@-ZqG{ڻW7_ASu  `;:٬0rpM_`r$v]Q3o7 g[._~|ϘP_tQ6Bu|i_Ԗɓ'{Uc:v]Vv'2R9򓔤\;gqXaG]w{ժtOtQv{FTrcik11@>] PsB"ە#׻~}k] oru||9"/yrdW3# o2ϧqU.\2re(UJMvBl.B\o~!e!rBL&ķߺoWqdB:y[]9OMŽXnRoꔭwۺw}Tk`޸x[pV-mNf?,čBZe}.zK=h[~n۷Vu|cJ_u+P@}LԖ{ o-O? qX.]R:uGm~*~mڸNZ5gnyϝ/ ClƏw? ās+'DDkz1c#>7_JKد. !^{5Ɨ^Ry6'O* >^#mQ8'OvlL(_m}Q!vw_իwo2[իOae=_>%y8^ۼj-ͮ yq-9Y}SmʕJ;wن+,@QCۼiտE|;yCvVegno[^"5qBsF Qyc[> wnBe~}8χֶ le=P+ii1ڷqu\7 ѽ9sO?-Ą dg 1dO14Mm.""w|ٶCl?7lڑ[ΜRk'DvJ1af"yV/w4eWᇽ̴ֳ,,@Bhʊ_-իTxit[\ʕB//ĈKm7NիW/[׿q9iT;z!} *u3_6k׶9~; W+GgP  /x.@UW_'O9$ٴI9x?o7ւ?lwiVܸ^!CF4brNk"^wǐ`*#T.n7 :h{/Txq(.{'*) ]L"sYN,b2  !o߿_r$;v`׮]ЬGC(nagJ #/=uG8+YR9xJԕ4v"Y$âEXp!{9a% !$55ׯG -;""""rrm?~[F1H3 DDDDD^NDDDDDaBDDDDDaBDDDDDaBDDDDDaot҈Azn޼ÇM6(Z("""`նG6mxm̙ѨR Zoʕ+۷// yؽ{j۷aÆER0h ܼyӿ7;wb^: (]vÇ]2?DΝQre">> 4E\2 ""|XDEE>m\YYYVZ|9ݘoڵhѢhڴQC?gdC B3FX,qiI;w-@J(!vҽjժE9׮]+,XnC_~EX,pœn;wJr/,bccs\zUDFF7xá]FF/o3J.D:ur3֮];Qr̷lٲE͛WݻW4im dڵk.;oyx dwF*UP@u4:s .]:u[9mݻw#!!Aun¡C{Aff8###QV-眒6B\p!I̷ܺu 8r&N_|MVVK/z.oݻ7 *h4o9oXHv9*Uʥٳg|p9pÿwi'OY|!>>!Z Oӿ뮻ҢEpYtmDC A%p7ɓѷo_̷L>'OĨQT3Ƒ?~t 'Oƚ5k0zhٳ5)on߾tO˚o9۷/_>ϟ!iii oW_E гgO̷kҥ Ξ=EaFϞ=o{U0Q~}ԯ_?}vЩS'ԬYo&֭[|KDhtOKKO˚-9FFFxru6B6ϟO<"E`X,o#Z*V xѺuk <]ve wAbŐ ml+WFbb"V\ !-OTR٬J.wHSk;w񈌌ir ֺ\x>]zm۶ŵkwᮻ|_ǎqU8p6Çc֬YHJJӧqq?~iii'peʕ+ ܼydkơCpuVZ2"ʔ)ŋcΝ.vᐿڵkKmkժ]vA~Cll,TQ2Ό pQZZڷo | UП6>i̷A9s8p *Uc:t+VĨQo8z(Q@[6w"a{Ky +"bbbT#>cƌno>˗/v%Qpaѭ[7۶m+J.z?&)E|\nh6/t Xb"33S|AjjXjXzuߪUD5D իs6|""##Er1 ]ty3D D|?,;4ӛ2e5jxWb;vFFW^B؞z=L"::Zi& 4HX,(>s?+:t {11rH1k,1j(QZ5ᰣ6&M<6f͚'xB=Z̜9S }Ö-[rbh֬׀,[ =bbbPxqtgϞuhӫW/ٳСPD :m.]z DBPfML<9w2-(, saƍXpK_~ ,@>}0x`=zSNݻm6͛7g\ij>~_FժUӧOG5СC͛k֬A&M$,YmG>}cر8<&Mm۶a(TPN۬,nÄ qFL0+WF~7nij>-Zॗ^۷۷oi¼ybB!^}UaX\bK:t_~X,b9naXĆ \ƓҭM6rݪW.5kvӦMb-[!%J5k9֮]+,>|xN={ "F0΄QN  .'""9x ,[ c=ԜbӦM+U-['9^T4nG}ǥKп˗/?jժaڵ.XtX5lGy_Hܸq6l9"" EDd2իWQD .]rx_bEv۶m믿֭[9- ^8:qejժضmCh;t+R._/Ѷm[)SZB.]кukb#"aBDd2(Q/^ڿx]9r=~L8ʕC|vZL8B@p[E/^)))X~=֭[ua޼yѣꭁ(XV\?4h(_###k֬Aٲespvw8M:;x`N_EFF]vh׮߿?f̘{*UkDD?^BDdP3uYYY5j0.ɓt\zs)8bccNrnݺ(QO֭ÁO8R.<tQAթS0p@j y3<ƍ_Ƙ1c-["221yd<ݺuk˗۷G߾}q ̞=%K]r(Ydγ@͛ƍC޽ѤI<3p&M+^sh/ |27o2eĉ2e j׮DDx,@ O?$,]4Y < >C=3fF޼yQbEt>UR˗/;#CTRxWPX1 m{=8qǏѴiӜy={DLL ƎaÆ@ر#ƍ :ĥsݻc̙Oq*U ݺuÈ#|DDeQ""""" """"" """"" """"" """"" """"" """"" """"" """"" """"" """"" """"" """"" """"" """""o$E6IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_c2_crit.png000066400000000000000000000343101307543307100303400ustar00rootroot00000000000000PNG  IHDR) IDATxy|e老izHKirكC HQxEAIJ 'ꂈ ttR,Uzi11MMdd:;mÓgp<G!u`QhF!`QhF!`QhF!`QhF!`QhF!`QhF!d0,Y2p@F犆88NK~^\aŊAAAǝ9sw7MnaaВy~3gj+W֭[ ڗoСCXXؔ)Sʜծ<~$^{dҤIN9<~"{m$};h߾}<+W̛gѶm!C뭯f@ ;3 x5j5gϞDԷo_O?$8+ aA7-611W^B!a0ڴiCDM{<`РAD_<1" 3 _+VGZ /_NDSNJ0`8pٓۗ>s7nHD x駟HRYo:y^mY4d0>pҞy5cVۮ];":{իW9Z7mϳLe|g<ϯ[g}B"oSˋ|ԨQ /_&"B 蔔";wpܹ{=40o{%y ϝ9s4khDFFѥK8> +WX|)88JJJ3UUU—)S FCD<߼yڶmk޺y:fF4qE!"JHHXdIMMUSB?.]gQzzEyMo<)͛<ϗ m^7&|,~|͋/d:[cݾ}{"*,,k¼ qi/]d}!M*fqH[nD{nӞ˗/'&&8P\hs=w›擥T*U5CchfO7<%:aϟy^zGm]=FD[n_ǎۊ JMc 2m[?g333{dɒf&dC?0oooiÜ '_&Wvĉ_~DٳgaÆYS`-… /]p?rJ'v5qEp .۲e :Mj; XBhufsBc'[8aQ0ıvZ"8pOoxGߟΜ9}=d"?!<\`^ ̛C|M;<.y## OxFGGmۖJo|=("""O_'”ٳg^{W^yƍ/_W*G~'JJ:sL'ωHVj"/s0?5jwMDWa=& sZc' f3IyfkiE@wڕz1zhajjj;w ^ ̛Q"[ #)ŋ/**GB4gaÆ }󋎎^pb>0Æ k۶m``ȑ#>/qo5j {vs!˜txaᄏCCCMO,ioݺ&M$u-򑕕%1 .//''J\C@)--5j3<#u-vo}ӦM/^񉏏4iy{`? q0 `QhF!`QhF!`QhF!`QhF!`Qnׯ_߲e >GT*qoooWz;wܳgUZŋ.:())g "_~u'w4@@0  (4B@0  (4B@0J]]MYYRZrSh-94[C@0  (4B@0  (4B@0  (4B@[ɑ"B@[3.<'k\ۄ^k:~ܵMiЯ&RCUU"5BORW*h7`gt]*p47xX\LIT @ <)o!uM<b ")~t`H=|[x"7J" q:t_~|Cn|ŌMK7nZ9;}ݼ)uiO.Z[2 Y4]|ܗMp"C8wxΧ|}γggm]snDn41cƌ3b3 Z0Qts,640Bu窭'.dG:t(S8ZQ.(qx54G=輼mok}!%󀮩q&͵H$h`ڂ3mTW8q.3.\< x23.d(rch9sZ],Wp QvvvAA Vkt|+vNXݢIWcyV@Qi)UU|7@KyV@<ՙX5t{v2_@yiB\H#뉈hvh97"=@'SNBp O ~-3@ZSZx dMѣ"nCZ1NÇ%hܔtz4k0vKW x Oh;+)i0y-ص wyz@zx.IQȚGAop#[ɓRBbca+Х鱱FVΚ5Lja6u<-\HTZJW,^l*W)'LPXXjժ#G^$--MBZQ>D%4"R)>~Μ9ZV͛7{,,D )322T*J;w܆ iqHpHCׯy9i7%i41[t{\ Zԃ.**?,,L4*ipz999y7ӧ]䲜E_!:ǠwERIDK.ܹE9޽ӂQl Ϡn:äEm04-nz&Mə4iRJJe~|||:tPRtR&ilA}g".pe={pV$)uu7Zy*E,{ЅAAA)r%UTN8@X|||#I5唱z:{ 2wXWaM‰'\RƫٵT>ļ//d5*aM—^zLb#AhR6x29f',aG.6ovNCiZݗ3-PwK/Qs:K˰wa@Y{q.]JKKKKK>c)--MOOh4j:66v֬YeeezڽigB'Zv@ϟ?!!!r˯;̄  WZuȑիW9xZW0hǎ+/o:qc~44Gmmmllfee)JatttRRRddAcIZZsfe!ltrrԩSg̘P(,Y2d3gΔ)SPOwS=?[TTOpC˗/tC8p`YYl&##8!!ARTsmذx{{ۊ9gδx? l׭[fBCCׯ_|EE7ݻwbggg|ʖ>^+Fw|LJl]8Fh8t-r_9eggKz0,}O>^^^oO?x3{'a+PEEXh]w5e">|x3ZV͛7; ٳRϲ=nܸ?^xx|pϞ=61s̄r"h4MI9*+X`; ;tADGR%%%%%%9L+$gлҊRi0QYY3qr-<͛7ҘN9 a /^w SSS jjjfϞ-Em2$C`E޲eʕ+L{BCCWXᔉ`!?_ m 688∶mVb'vNp o߾__u||%CGGI + fqÇtҘ1c:vX\\e˖E}7R ~rso_4Aq?T*U333333  U}RWrt>}+KKK {y_y,_.UP@Nh,-%瀾qC T h9sRW`究V"X, i~~]:ȹt:˝wKQ \(x.\p+h񘯿QR"]&G+ac,OAX0(4B@0 -{dIDAT}+fBq1H]0 L rhZ/#v _Z 55TW'udNk1htirhI9?)w@rrh~M mrhƝ9#u64Lx4XC@3A` z{R4A4;㓵@Br*+î]RWs@܏)s#Fh4!C6_ͳ>/((iAJJG*Թqۈ(")*YBƍ& 3= @Gh(+ *,$"yl*$ꛄ~~~o͛KJJ ֵM+QHEEQDD  TXhhS;m=qԻw[mT*"c3C()DoITXH?{`GLL̼yN8qFWVG{ƍ3)JD:48Xij}7ED1B];8X?ݩuh#G׏||(0xWu+`% R@;> g6p NքK/YMv@9~VQ6T5?iӆhXS GkG4th_MUy nx_tyG=z4T""__g͜imZdLJ***R9ii. #{&Oի #^|u#_5AwFDGDDgKkG+P^7"RR۶XDDc=)˘B/[ j9t<^OεEt||9srssZV˛7o^wa֛z=6HaasP4:{d.yo_ުԭM@Dԯ_}}x{{:z"득. Џ?6~DAgdd̜93!!A[Ѥnذ|}γg^ͳ˜E54ۦ{U5+i$z)ڷ>Rg "jӆt|~f̠ۉ>JZ\p0DD^^A.P׮k??""={nj ?"thhy "nj3f6mv횝 -XLh6`@O6R*hFQNqh`{`0tf~IOު/i8zQ|ٸGlgիkM])QoT8Nh4t:](} -'Dh_6+GuZ RhEw 9 "*+3<9l=p-.f:&~Qzk0&GD4HΝ{108jjة([lK:t9XaO>v>;7h|& ڴi0h HtK~KÆћo=OG[6*+9i^OHtL %&3~<Ӳ~ַQv V(|UMLJlTKvtcL'p \NBӼŸi41ݺ9悂=cFnqT*1M74h"$^~Aa '=dcRh(*/9I.).θݦ㵬 (4jk):n)|';IxϳcGJMÇۛ:wnhN|-BW@nD 茌℄JRΝ;|~ap}{#'%Pt"}}]o?aNBOfζ\=ЉpF^˗il,"R@ ; ludc_BDד@{Ri);GT^N޽-\JTpp5  hћoҡCбc.)DfN\Z ߶jڲŸiDDO>IԿ?EN-y$\VV9ܚ QhF!`QhF!%π...{FUZZ*u9ͫݻwQQiKpp6nإKv%%%--Kϻtлw]v9X.Avv򸮤$OO};SXXh hy\~ڵkiiiwu\<8I]l^;E?$&&~_uKҥKiiٳLbUwM6]pa̙MED /޻wouu=I~i2 h|"*((y g~7nܸtR}'\,X@D/#Gq];vغuB'"'"_~Je6mڴi&À8.55uڵ<ϯ[nԨQRWb6/޲eKfffǎ+*****  .-,,lٲeƍ{%p]jǠAdp]DjnjsرE +bDr;vH]]l o)2 eddDGG4رcNTy2/44488zjK Ұ`?d8 hF!`QhF!`QhF!`QhF!`QhF!7q\QQU 8ǟ^TTy\ -((hRW`#|DV+Gx@ qWXXq/3g ח㸊 ZMDĉG?C5/<ݴѾ}={ٓ;vXUUq\eeH۹sI&1Kox q{ |gܬ~%!hԨQfͪ}9Ax( q;v~( zf{555IIIw^hwAf䪪*Z}ɘ']c&Lt|I6mOgqӶVܹZYYymUUUT* ! cAt罹8p`͝;7))G.\x衇׿Ö-[T*tҩS+WYv}}}MֻwD: (`QhF!`QhF!`QhF!`QhF!`IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_c2_crit_big.png000066400000000000000000000354641307543307100311740ustar00rootroot00000000000000PNG  IHDR) IDATxy|u?$M4I[Z(-mE hCzAA`QwˊT@*ueuU" \V  Bo^6cBmf&d2+' "H}4J@DD1TMDR h""b@HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀVx-KbbٳO8዆ANHꤽ!_XfMDD Ǐ;[!_fQ/1#)S/^{nTRR~ÇKeeeou^VVQ_G?ŋs o|B$lڴ @#bEEŔ)SL>k}?/]~_~922rС_fMCBBF?xܹ $$$)SH?/9rl:tg}澙Cs&nݚ:v؟~遴Њٳ'ܦO9Yf͚5^8IOL81** !666""7t+ׯܷoߜʸ8V;hu'(nܸQj=---$$ƍ_z7 ƍ8@F `b1cHO 6 m(R@>CM7عsG^wXRR޴ʽoYxw׀6һEn)44EQ|@ttp1YFUZCꫯx衇nF{mu'#Fa7x\I]v0Ż6+tѐᐲ{޽ϟ={>赣z\R]]ݥK'O<{ 6æMU2~mQׯ_`ȑMw5STTjEQ&Ow߉@5зvzJzSO6k/½;O?-vMw5ŀVL||<3gδw+))x*22ŋUUUUUU36MzNOOGJ;q8@ii(.]޺y^3<> >_izmu ^zdZء|@K.xEft]]k3'yqEDD\@w@aaYs~MH+((v{̙򻂚(W_}Z,Afdd,\_~urKmppppp`)j ~n[݉ظ@}}C?έju?˗/߷o?~=\]=2{l}:cƌՕ!oUZֵU? l2`_|սI%~;l/BLI] J~:tnReϞ=9"buuo[GE_;wG EɓC ?~:%^Ϡ3gy?/=?Ys'q-lqn裏>7o~:nc=ѯ_?FcXuBs;ã cݺuFQ͟hfǏEyq<3g}ֵYs~MH!󟥟˛;vT3R뮻wjbbbXX?ؿqqq/H>@;4i4cٲew3qҥ.\3aʔ)o h<~x;yLI&L&~a/&O|-6lXӣh{=. \3m-te$ܴiScӧO2EcPSSܱo۶MZ/p(ͽE7! 0jԨ!C}3RR]]݊+Fp=ϢW<p ILL|J<,_\:c۷oaaawy}ڲñnݺ 8wOUT:v]wn6ǏaGz\N>-inbjZ{vZ׫܏*oL&jo|-য়~ҿ7x}3~M[N8lذO>~ؤ׌(m߾[n}Z6lܹ^Q۱H8HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀ&"R)?i7o(J Ob~vm۶L "r?yiΠX|P* `@HDD*ŀ&"R):??L7k֬ry#" uq̜9sԩ7n4Q[ƍaÆ+5MDd0$$dʕ6mx#gDDEQzz駏9a[lݪTDDm%\_zAK9~ i=?nkn|H~'DQ2QRRKrssrԴDD%S@߿ԩӧO뭷t:fiaDGrrrrrʢÀ&"z…-ϷX,K.)]Qkd:ڶmh\zuRRRvvvllof,""745Xrs3 OI]·VFDtY spEz qK.)s";OC:W@ta a!"GkH@V~=zॗ EbйFqR"RJ=d+`̟\c7q{LD-]OhavسJBy^ωH1Ђ9Y 4\"qq \jOD$5B{tq19Ca_)&ZPT -g}ТEE y%!)%Z:5n:Y h3rWBx88H1Ysf&xn8ªU@dyKH1z=t:_ %kk2聍q\5#_:1<*`c.hEx8/ )#b 8 _-p@%TUQ*h /OIrr}RgtP8@"RDV-[ 7Ɔ e+DD nDD2 䀾ph+]pڴ BBv= \ "RJ #aCquZr1x0h4X`0bB"RF n8sr[ QhQ+dvS`B ZhҖZm)7…H62Ν;{1~mBBb0`?,C#F 6(h4 stH\C!CD =z4ϙ3{3ߗѥ v"Ǝu5K6 :F 0;"RL}ى'{ᇣ.]zayZy?iuk?( 0H2 xΟ?7ި?1h 6ڧs!(^f0|sA:vo08/W8)#M:?񏌌ӧOxgRSS׭[F.6""<;f5<,-uJ@D :888#####nk4oݺuӦM+w5-"z°aχVN(z}6 "EDQ6GIII47Vw+322*; $ aadjJ06х* RZ-JK QzaaafͲl6[&WaaaBӎf""˻v9/FמtBirespPh dd&S@/\pѢEeҥ4* Z6g6dj&$.o)9Ut^n)KD$8mf4W^+ g%Vs] s K>_) Y,8yוy!tddѣGhڕ+WΛ7Li 6l3tY%g|NADJ)322ƌ 55599yԨQnlnXn5O {">6Mi^MDrc̙)))9'[bEZZZtm1]>OFr}}]4IE:_6PTQ^h쇴qvr| &"B' hi~$ٌ~{Їan,DQ R5`Ýt9we"uR Z&+y+i44;Á{8pρGD "š#2g϶UbGZ5 9Ah%*˳3hi_""g!!޿! WwfDk"[0PiΠJ1իC3ڃ뮲R@wި|F?e2!:C=p糂༣4}Fi"",aذf;ݺ\m(n[_sg"Ig h9= @GB糮!ǏCahD>Ι|t BBcPy%"P_:!$'g%"c@#% Oz0JJvDC h;zF#qr5˨ÁzLp,"ŀn\?ٌSA\TpxY`W!u*R6JL^En. "DZz'O|jjPXywP""е;CuvqNHnG^.]Bb"f 3jyco" t{i4(/W" D  Ѱ|^&"a@V." t{LJW@DJlkxMD>!S@999cƌ1&iϟu f4L͟?W^qqq .unT|_~Z]v9sK.R=zh>.35k8p@tJKKc]V3h" =jԨ믿INN}v%bIII~~>ѸiӦٹ4+]"=|]k:#44{Fp8xӦMk׮Xy>}S.8vSL>t6-&&M6m4=XaaaNAAMD>0if…-ϷX,K.}GTQ ~d2L~{AAA;zᇻuzvPUuS" DwtEIqqq^}v6yQZvʕͫ4"y޹sӧ ^zkig3cƌ1cڵkSSSm6jԨvSUh8u(h꤀̜93%%uʊ+233۹[0Q^0 =SSSΝSOxn'- `ZVkw/|_~e^?vرc ^zIKP& :""ߖp(4u<3hA233&)_D gЅ~%a`3A5<V? :/ ̙kl6!""_>]kAD$3f lu.O:R+ =<8p@tҥn̙32_`+]jIDATtŋ;oq޼y2_x[B"Yfh4O>w}'oU~lFVEQ&5I'qFi4GQQп ,[VX!oU~Fpv؁#Gav<vd4Ub"~}W/ q.NJJ:pѣOƛoyDF!@Юg0a|'**t)D(<Zpڴi6mRd8烾pAOBDtż X,(9ODwAS)yI!uNZܙ:'AAw.h)D@8a AAR" OOO7LnDts$"ZlBNp0n7*] f'/**R"_feem۶h4^:)));;;66V QyAGFF=zV]ry(̏AD3322ƌ 55599yԨQJ*+g̙3SRRrrr+VHKK̔,v g "Bnݺ(..`ZVuTEkQYY2Dzw=zL6ҥKJ *]FdɒӧOI&,[LF/ 4 ͛7k 5ݻw_f͖-[d/kv=22cJJ'a)]F=bĈ?c?xذa2t:\QSSSϜ93}͛7gdd|gJ秮Q{5:2dȗ_~gϞC뮻n˖-[lOq~"j/qЃ-biiihhF &~GAe.%E "?dHIPh"j/ezΝ+X~IHDL@(ҮlRR`+]9Z n Kׯ߆  RP$$>Y̙3/-Oӊ/*]9M6MFs4LgN/oܸ1""Ս??zv "Ā^a~I:?1}H3h"J hy=!]I4]MDWC DtоefS"O hߚ;oHDteоeڷbcQYtDо*1}K*DtоQDtоe6V"?1}K JAD[ h"j hhx ]%oY "Ā塦F:1}hDp0ΝS"C hEb@\|<ΟW"C h1'O*]!**z@uEb@qZ4] ig "?Ā9{$t: ]1ϙLP^tDo>4:tDorO+]"#QVtDor捯1`2ODter G믕 Z*]ZpA:ȯ0 4U!+€C>&+ĀC5 JAD~E޶m[||駛nd25ȑ#O< ""S@?c˖-{Gyw͞={={bB"22S|ҥKzzCi] )]:**믿:vXhh(FFFӺLDtd ^xa„ _|E޽<ǏȐuEmE3fL0pĉѣG /{Kl٢tDz hOoܹ>`4y3!!ޟj -tX쳇ԉzHDD*ŀ&"R)Z*ovGQQlzaaafͲl6[LL<#z…-ϷX,K.Q""&8謬m۶իW'%%eggrL"tyQZvʕͫoMDDL1f̘tɣFi""?%S̙3SRRrrr+VHKKl%vceMM(MCDNjGIIIttts~((燱@^׹^k۲eYYYfff=|R(}%$$tVr_>vX_)O>;eee=CJWV'(]E+,,1cU(rJqJqJqJwQ''ߐ8iYjZ}b@lhZUtsQ\\o0Evܸq6lp%C`WQQl>|l;N:/]VVJœ'OZ,+jz\ V;v ^?p@ף>׿Ёq\馛~s͞={̘1rh.nڹR6_~eRRRpp[oY=޽{.[L <7.^m 6o>|xdd+曪Ԧ`@fٜ5 z\)?Q-[smذᥗ^w C۷o߳> 44G9x``֭[?#F@;wqki`0š`@ 0iҤu։~ɓ'+]z\)ov[lp8phѫVz66l0`_[=ztӧ>|ngddL4IQ&+,,7n\ll4Ern}b3Ε2ktph^bbbxxѣ>!rU q\ߺwy={J V8a?J`Q``@HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀ&"R)4J1TMDR h""b@HgA(**R "90_ s?DÀN-""⫯R "䗦M`Ȑ!uuuڵ^uw:tH@^ziРA~}ļ/h4ƍp…9sDGGO>3f̸kH+WZ~ԙD~@aa ;뗓SSSo0ٚ5kDQӟdۿ{}>}zyyyUUo6׳ׯE1++K׋hA駟~嗤j9:AE%? т bŊ?g5Meeepp & 8rȡCkJy宅]fff0@qqqllf TVVEqĈ\sܹsovV:vq ᇥܬ?|pp&On/Z-j(:顔. ٳgƌk׮G|ggϠkjjVW_}gϞ[fL_~W^ޜ9sjjjScׂ(kkk='N؏kk+++zf4P4 &;>>W^4iRtt޽{x BBBz)ڿܻ\/6[j`ݻwϞ=KJJ| ^`ARRR?1wxMDR<&"R)4J1TMDR h""b@HDD*ŀ&"R)4J1TMDR h""b@HDD*ŀ&"R)4J7BzIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_c2_proba.png000066400000000000000000000173371307543307100305140ustar00rootroot00000000000000PNG  IHDRJ NPLTE !!!"""###%%%&&&'''(((***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXZZZ[[[\\\]]]^^^___```aaabbbccceeefffggghhhiiijjjkkkmmmooopppqqqrrrssstttuuuvvvwwwxxxyyy{{{|||}}}~~~uIDATx흍EKf7 $%D 4`0A'z_TCB8;ASPwr! 9Fb4$$M驪}R~>٩zfn hhgS>lHO%j@4z=meMh3E[90p| [`_w:ss@G!%+6Z/ wsE3RihKd!x+1}Ǣ>r>f-?NTQ>7qBJ4v-3hBZo~(}O)͍~?8)H GN^8t2`JŔS&Ғ1}ǢhC_^D]tJZOtXF[&[?vM ]=$mLǶ=IC~HƷtrVR6EUP&zq].ci ΦDo,Z}ǢzU5rbOm"/?4xKf8 X\N_>.J#Fw_Ox+5 C-)XxkTjC;z1ʂk}@ыխE_LChn0~/, B*HL5[lnɍt|= ㄢodz\;C<R|+lcJNpVZNXIq]Bs)9~S9XR@^p6F74Qm̟00咾۸S{&5⭔[*oMtmt6'X % !>}*h=RBsSZѸO{/'F;Qt̊ו 9#j[|TZ~&-LRrnm}HElzoGA\cF i'xW=^O.qۂwO>?/6Fߒ 9W7^ |ֿd+%֦ه[Y4Ʒ>fQ['ǗNe n;o}& 6y!nA-C.}ȧ͊zЄ /tIaӇ| q_M[24!=88888888888888888885o0g4n-`y]eo 7#/̂[ ֿ=YP_]!z:WC0 ޴jh`&=Yض:|_IÃz -scEW+LK.! 3`{$#YW\R`"Z)~SLO˵/x0AO/Ӥ'm3֣c)*m+%/r;aD}O4RpN5! > &Wwm{²+ce]!ݪ)"Jve'YhU2~5I57/GNݳ@9*8O Jw"B\doRymn,.N N Jwَu؍,'ݯ²?qeK[pR2ґ52+u>ln!=Vӣ0{,+0ނA rZ,U1ނEZwj Ypk YMmn Rk@pR2%,=QGhe:[(#a8Ne*,TVUbL ̰:ܮ'F0,l(QS` Xdcaur%<&5|j 6laDj}.Ep:͠v+\\c"A=Lg`ف٬? iaΗ6ׄ`9ېN,[KcCSIV'.I7w!Xh"C,-'m7tuѹf8[ޡ-+<4Ėo첢#yd@Fn-b@)Wq1L │QgE `N1jM.W5(8;. mKЁ~h^߼N6aB@} }<ِ@lC%O|l F)x@}K?zэmTR cN-8&E. &XmdKwmS M/HQG .,`3e8vpl^D= CJTH0la^.s:͐[ix rB ^ nգ_9ӏICw ֏z \)89F.}W),N;B0WI5p/*t#:O\+:ۅ-0T_W_`(X-:Sphvdv?`giZ OpVp/Q N0e[ VUvSN@JZ}S p*8]ӆpua(8/uga'8ڈ{VSe[ Nǝ)dw ۆ\.YpD!|[V44.?O0rTNZzv+]&m|'Zk NJUXt&`*X(ո] zM#V-m/x9tSz>8ղpD}Ǯ4=飕k!#% ]St2,t]G?鵯eࡏ%MtOp =eO1ޝ `z.?8>8\хsVK:˰Z#YY;a) PlW.fC&^0Ιg}PGc|?X/Huʃ.d+D#m>xW8-njRxuPg!첍S*1qپVV~'K:Woڼ"u1.%P%vR8  >!lmA9vSO]v)tPKgμtU>.'\:C-_c&epR7[׽9%2z d֡& Y}R.ȪLb$Qv5NxG޿kE t{W1UvЕ$-{b(@--<=lwK@.E?{wswb na=٠v+y`R[f XܽPk04S_p\Aq@}ݻUr`}]ы ðRp"0*8 .AOY0`jX_p;ekz@8[C`ks6p\~Q`2RJvx=ʝϲ%E;R_rDl/lYSpY0kO}~ˮ/8_6ԺR_ԝbtAp|3ߖ]5X{B/S/S>lxEn}ԓ~z?g!-]AZ\",77tbnfwvD.jc\Eƺ;K Z/xAtI `Ѧ57_v4 7&yh~,+_tPd/A9CLo+?f/%0AtHYnäd6U;\1S]/cTHKжE =VaƂ WB 6`uJ[FMY%Y[ $_a^0)V C!muέ݁]S fe9eXZW?ւsӔApi]b3YjO+8Y2 ki[<{beZEqIF,gFTWH%X|ɔC`( #XcwqU[11`uN4gSo:pDAt(+w9|'2g}S:v C |b0 :]pδeX GG$_eo#X CȍMʉ$ܺ Ctaa.8JgOaGlk2ւeU{΂iggJajrnK`Y0}o@rG8 AdÓ6`-҃D|-cÄa'X .@N"fA'"`2j~P[瘴cIdbPMT`.`Yv:yH{eg]Wb̪Xcw]Tulm+zitX!d U*1 w]WdMѲRڣ`V%ﺢ32c/ܑ.?8Hܳ p%]7/j1o{Tjׅxgo7H{#ŶdA0 7,H{#Y&Nqg ~'_`7x~j?xb|p@p wc wcU~?l~o+{QOYUK3 f>qN:r`>勝FD\3%xv'ox- f>q;;Q;m;C=$瓏/֘q!׌< nJ|G)8ɠɌ ;kgۍ?zFE>ئEgkFo!aMIO^GF? /?;pȧ>K}O|+Fdէg݊\3!~Nnj5ϋG9~8n[>B~>j]Nc}/زcF:Y+4a϶:YIOF<2oh'7!E>욑/KY^ȃ!-IOF|Ucgçi%3/:GS΋B.| ^J{q(cL ڣh&g(v7̞qx돞}3|ы9D`ҋ],kb>O>s$S& zE=?s5%g>%Ħ}hj,z;^s=gӪM0-xC75ol})&WvӣC_%;ϙ3zϼ^G}Ĩg]1,vg;^9/|IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_lhs_sa_geom_10.png000066400000000000000000000242651307543307100316030ustar00rootroot00000000000000PNG  IHDR) IDATx{\Tuπ\ M(55) sqnJ[/hZ^[i66/+ɖ]L"S:hyQ˜i`0|^?x̜9sﹼ;g 6M 4E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP j m6f^[[?m76k׮!!!qqqG޶m[4ئVm[xqTTfۿbZmJ^ԊRdgp:/BJJn*))E-_R P}ѧxLK,oĤͯ_~.U⮸ y&>ŴꊋoVVX1hР=z,Ztun^F/{E5c38#FDGGH5M+++{;w=eʔߖZ泼ikt޽EdÆ z ="d܇ftMMMMMǝ^duuuӟbNmJHH׵6n(";v=z(k׮E^F/{E5c3z4GUTT5JD2335M6mwMD&MԜ2{1gJSit4 pٵkŋo>0`@DDDbbÇ9s\sʹi.\O?tPFFFKׯ_ddСCwz5͛Ç w9+V7<˗/w:C_xV{衇 :oyܗp"ohߧƈ#`f͚ݻ'?qݛ...vE:uꔘ/^8!!!,,l;wlʊo_weԨQhԠG;m&"kSSSNө,,,,**Ν;owqqq_\e*4/Bqqq=cƌׯP߿J 2~#XBӴ˗ȀGMw^ Wرc333wءiڱcD$ ֠G;CvD`=kh"=#iiiQQQyk)}н{w9ziڋ/("NxSN"rYneeeee{/^2hoBҌGЍ& fNk@v(+voWїgՏ?xbbbbb󒒒={~'sՉ:))//}$Ͼk}g}r_>[PP~uÝޖ%}ڏ5hm"cǎɓ'Hnnw%66vϞ=Р(qܹp}֭匍v_} tnYW/~_~GÇʚ0aBSm/>zu-[?^rر#Go۶-009s\yOׯr5:݅6ZC4cٜNĦ&Zim<:i;pSdw |۽˻>Aox FӴ<ӧrDd'xµȓO>?t;w:ut>O>d]]x?YK9obu<m̘1"4~xCgyƠ.9M? n&yӦM}S\Ϛ5̙3 Wu]'" FߍvzoM7/>N]wݥסC O5MKHHnݺ,V1b~?`SW]х4HhhA\W5zbpt3pkbK6?=m{ hϟoG}t=\{W_}a{4mƍ KHHp}E>KOOСCǎ>L^\\|]wu1"""==-[_;4e{p:˖-ӧOXXX>}rss]'m{چ>oV^ N/8p޽{^)l6[ӻ+ݣG_~y\o/l m۶]ᩩ۶m74ݔ4M}ꩧ{}in!X\r 7O_c V*4/V iJ۽{wJJt}욭ĸoGټnM쵷`Bmw%Οꤤ$ÇGGG>~ˁ:kkkyfoiB>$\~~uDK.ϟ&~ԦWzW.h&ݭ/Zŋ<ڵk9ܣG|pԩ0xth=  "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(ӧׯ_QcUzӦM[n NNNΑ#G|p?AHjjɓDDvễeR@͜93>>nggg:#z#''hɒ%gϞ2uG&}H_ZZߍKMM޽9?2i4{⪪sۜЫV:ydrrrhhhhhhbbW\iNL:iZEEDDDl6sTtʱc#VEfgΜ6ӧ:1q߾}0; /HϞrvdg[]c7 ~Uc׮]yyy7o:_ο_/G[]TbY@:7=&N>p.$Ùig h$&.p% (.+V""/ʼyr}VŘtەWʢErɒjuMPI}՟O-KN"0Nq| ذacȤ 3fLxx9@+`ev>im@+U(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hPmjKq8hgumܹһ:%;KNY]>w̟/6Ihҥ3Y]qvaþKg;Vm ~n]5s}Ν"".ɬYeuM}];YLf͒b SeHkh3t&VY])P 2)ccco={n2dȾ}iI_;vl߾}O4ɜ!aqqĉϟ?c=111]wUW]eNLAƾ[ol۶MDo~5ט:#Fx;n޼y̘1׿՜Æ om6f۽{ w]@@f;3&&ԴXM‚4MӼͰnݺ~cc@ СC YD{cWm$Eeee3gΌ? 1z#''hɒ%gϞw;A痖wRSSwnNLA'%%͞=dܹ{6uG&UN<x+W:#NqDGGjVQQ!"Vޘzff@QX>u,]*"rm2v02lڸQ^駥Dy#h?[oIXȼyr]R^.VA𭚚Yף=j]5~[QQwwO,-po=L /f̜)V'A8y=YX#h>&G[]b "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(EOc(C֬rIK!C@CAE2j%Æ2gh#hy ]Dd N9sF. 1nN.u7(YW /(*J'H^U NqEO>)&HvDEr뭜TD@E_/ʕR^._juAB@Q]V@Q4(E(E@hP "@Q4(E(E@hPiZEE1)?ӧHAAAllnOZTTdNL 'jVVNrsǿ~äSѹUTTHDDkvPS##G-Ȑ!!o->j |l6nu+.*Ȱa"W G;_^#pw@k W/),]o]5p&e{>\ڵD y ٸ GaTWҥRU%#_~ E}{yai#hhhP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hPh>=ZnUwfIdSg?N$5검zAٶM22gOd kB@)+FFʹsUxG@IIu뤶KmYZ2d  {HޒmuM@ChE+w%WKVWxA@ }.09hP "@Q4(E(E@hP "@Q4(E(ZӴJ]YZZjZwL ?<..Cƍ/^uUȤ~_?~nϚ5˜FUv޽iӦЗ^z_~{ڵ9M2iݩS}H``>;iҤ:s?eR@/\[n:u~)))7t9M2ǘ1cnCwzꩌ[:#wnݺu߶lO~b0ӧ]rI"h hiiiya׮]yyyO<܈pIDAT@ СC YD=&]oe] 2)fΜo㳳iI=~xÑSXXXTTdɒgfee:q8Vіt:??4$$Dڽ{wsZL;wo~#&.HfwV64NJJ={vqqqUUUUUUIIܹs{mNyQyuٺUvKdrkjL UV`mmq.\X[[{ [Β [AN1c̙szhܸqVR?~ >~4tFDD۷OӴ[ǻ??eS.^hA-ĸUWWYu쇍766/40k_}3g<3}y 6xMZÁGERӴg:uرcͭ5G}s8#[]]-";vӧ-*4}7oެk+jly t)+՟ׯ}K.5"ڵk>'''!!!""ڂɸ {?q…+V$&&Z[*Z@K%=puUG("_Agi5qKJJRSSv -e_Z͛Bh>~)P "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(ѝ|_IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_lhs_sa_lin_10.png000066400000000000000000000242171307543307100314330ustar00rootroot00000000000000PNG  IHDR) IDATx{|T$f# E$@%V"&/jATm]%M+@mZQ DEa ȝ 7!!@˜0N21sI>?x圙9yo9s&X4Mz.P;E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(mX,KUU۝ֻ}ĈȪU|aOE]k]v9orʢEj' 4jŭ[G?~|v_ҥKÇ;m۶7pÃ>xĉ%_~mڴ5jԮ]79qƸ#F߿facҥ ۷p8vUgm#<⥳?/zd""iVqy?Tw˻trM79M ;v,ZO>aaa ڹs/unݺu&LPXXi_yaÆSٽ{aÆ9ZbܞPM}]:[ tޭ^:!!!<<<&&fΜ9/aˁ[ <`A:1! ȵ6?.c]8}ڹ)bj:$"=zpl3m|\]s=:tYfөS/ ~?5Vd|<4tMgΜyG]%''g"2{l}s"_Z41x`/&/z+**}ٸzG_}=EyHǎ]Wz|G/ҟ۷o߾>\-((HtJo%}O9Dd۶m=|;o߾: UDDnpBxx2ܹp_'λ@u>@=oVnj>yd_/M4t111yPPP׮]oF]^^m/3Е~M0BCCW">L`OiSy1M߯_űzj5i3m|\ 4HD-[iڷ~{뭷&''z^֒zuOMuu)W_}}3އ1!ei$,,!~iy]@SD3aݱ|/M1\pBW_}Uk@@=z+#GLZgscܸqW}ZGm=M:fС":d5^1!ei<ŋi_|}׭[֭[x㍣Gkik׮0`@XXX>}poھ}{rrr۶m۵kw]wm߾]_XXxwkj&''ٳ,YD+>>/p,Yo߾aaa}qu:k3fx~^:[?n: <8<jΜ9Bev5tZj?O7o-"k׮Ҵ/}qƚ G۱c~)!?6u1cFyyy{:ǭk yj>/vZ'piSwޡCWއ1!eߏ\Xynhrُcƌt^?o699>޿J? .//oʕ"ҡC+W\xQD|@E~'~m Ԣl4˗ϟbŊGnݺ{?ԩS]/!@FKl4f "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(Wsέ^G"[ zÆ 6m2 *++ѣMtp?[AHbbc=fv "m۶; @QtIIIFFFllf 1cFii1?2('Md۳v]PP}tcZdЇyyyfLLLbbb.]iA+Yfeffۘ˖-;uTBBBhhhhhh\\ܡCrssiA8"##srr4M+++jXi*)r4 cU,f<ܹsvy]$SHy. J^fL&a~~~RRk׮׻ܸqcDDij>g\GDQ/dfkP_QͣdӦMMY۳Gx]JL9"Ѧ&a糼\L*@JrL6m˗̮ @}t^>$D=̜)g ;Kvh;(((?߸ZLH :7 4h͚5:#:000555<<ܘ02~ڰ*P "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(F u-gϚ]Y+ Lr|=*}ȫbvM@ 9"͒-,QQmvM@mh8rw''Zm[)-YZ*ڙW gYF)+ٳe$kjÇhqVʒ 9~\BB$#Cͮ W/_. 8@Q4(ʠˋ߿}~l#F8pпofΜ֯_nݺ 8W1?2CG}ŋ3g|碢zٱcGcZd :::>Xjl޼YDnڵkWcZd W_ޮ]7k_bL ѣG={bX,{~}a ^w]@@b+**ذM$M:l02eɓv>8ecZdP@9s{Ǐ?QQQ<̞={iA=f̘G}tSL.++[xq~iAiŋ͛7vأGܹs%K:#:$$d޼yͫxbv1:%"""*** nA+󓒒4Mto .ty^z5qizԨQ^YDRRRRRRvN6n7e] N 蒒X;cƌRcZdP@O4ngee޽ ;;ƴȠsyyyfLLLbbb.]iA+Yfeffۘ˖-;uTBBBhhhhhh\\ܡCrssiA8"##srr jZ,c?euf"/E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "39#6ɡCf%2ZHVx9xP7b1&̱l(6\ݜ?_rs0&(S9lm>lh^5P m;'U%Ѐ9CVb̔2&(sЀ9l6YDf͒Bz=[1&(Lӭ,[fvP8@Q4(E(E@hP "@Q4(E(E@hP "@Q4(n.^"xIUT˹sҮ=*"]d(/DDN$(8Z?ܡ ${Zژ[l1]ZfyW  Ç.t))2{Ռ+9xPz0&5t:((ubMӌ)\GNX$*JyG8ǠMbcc/_nv8,壏dƠtbbMҎ;6}t2iSƽ裏?~}(/C Z`+"""l =ӟ***oi$OJJrǶm>S_u6m4Pi=j(EFF&$$ܶm[uuuSPoqDGGGGG\nh! :]RRkcccg̘QZZjL I&ݻwdgg?>==ݘt#//888XߌILLҥ1?2h?k֬򢢢޽{:#zٲeNJHH ;tPnn1JJdB̔?6NqDFFhVVV&"VUkv'eYN֭ ̬,f3E~'/,CukZ=`0mɾ}UC@SϞRPpms.˼jT&!lLIKӥcGY^Zo6VpU׮jHn-oer=H=" E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@g@u~y|@2wJnDFɓ&#ݺ]Hp)"r㍒!V]x0KJMkmȅ U :)I}%rU A.۷ȑ/;vHJevM5ÀÇe\ij^g@H۶ҿE@4s<(E@hP "@Q4(E(E@hP 2.5Mrsp:zǎ111m۶8qbee\|cǎƴȠ~'|'NlgyƘF?ݻwÆ oƀߩS'c?e ?pKկiA=o޼#GN:UD㎡Cvm4 ~ʠSÇ?|~ر6m2uGޝ;wܹb8pM7ΝsөS@3.'%%ivZ~SNEGG7qizԨQ^YDvXٳMYҖJIDATz 蒒X;cƌRcZdP@O4ngee޽ ;;ƴ桼\.0A򊋋͘.]:2u\(ү] ZAϚ5(33wƴcg2j̙cvA! e˖:u*!!!444444..СCƴvXr-W7SS嫯L-0A8"##srr4M+++jXi᐀=@K`evfl6AJKgjAQL ŋ}Hؿ,X`vA!hΝeZ)/Vs-~KUoP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP jevÁRP ;b]M @^]M]֬o.e` 'O?)]]8['wfP;%9iѣM- ԡcG9|ѣiZ1-  *Gҥrԩߘ]S9huߗ M:t?Q3P9Sf4S(E@hP "@Q4(EY4M3aO/no"2cƌvw֭&h|~7nܨό_8a;?;WԄ:bŊ#GL>ݬz[װjݻwSSS5??ƭϟOMM]|ɓ'z衧zʬŒW뺞+ 5M۲eK^n9sgR{gygR{/^iAy?C?ܹjPbϧ8< EC6b7nܒ%K4M{wSRR6m_z5k:uTVVVVVp8-!wO>8 fj 彿G~7.^էOjn 使}ٷo|ҥKř[m;i(Ac%=|dۓ:u_^ߚκާC-**JLLl޽{6j6o ׹YP4)P "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(E@hP "@Q4(E(<+WIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_mindist_crit.png000066400000000000000000000567141307543307100315170ustar00rootroot00000000000000PNG  IHDR) IDATxy| _7NbIDNZ>҅jjV[ڪVwm-ՖSKmAPZbD"B$!{8әsg殹w̝9}fy3s8A?|mA 4AN!&)$A: B@Ah BMSH t 4AN!&)$A: B@Ah BMSH t 4AN!&)$A: B@Ah B]$4lpEEE~ʴq0{aX5tȜ9s Å *"}g_"z:Y ,$%% w={?6 }[Q~~HovNNΈ#Vb86x97m͚5?x ﲲ2w5@|}}b"v}mWC-7˺Y equ־ȶq:TTrjz 33S3%%m۶aaa=йs+&Xvm6m6l{Bzv͛7O?BzkԨ7f̘8nɒ%-[ KLL\x1{]b*bj\rUVYO?}uhRXG(Ȁ {R裏 رce)&)dXsԌ˗׫W/>>~֬Y'YYΚ5kVՓ믹s6o<44}Gp֭c֯_?000::zРA}/;vh߾}xxxRRҶmۤ?)>j7Bvo޶m*UtfSQI ]R%K4k֌8"""ڷoGҟ,&"eƍBBB[fMo4:uDEEvƍ/_|޽X__~u@>},&q܊+X b Y1;t{2㭿]ve?%%%ݻy)G(ȪUlْ߱cG)))2 ʒf_YsԌ*U>>eeejݻwoSLaN2E8LyP,`ԩ܉'D@W80%66vԩiAIIk1)ժU,,,,,,3' =z4̘={v"F1<<@nn.qwPJiŔb`֭[楰 ǽfΜxb<9uƌ;wp ,,k׮ua Æ 3gڵkk׮ 駟#AE,J| 3fܹs6lc 6lک1k.MPyx#aBǩbOE: ܲe K.jժgϞhиqccƌ9s̙3gm۶lٲaÆik06m*o֬_<~m??˗/Y֭[ed՞v%$$lڴqƭZrJ9k~͛7bb۶m,;w.s޼yOjσJ qܜ9s+N= ΊI◬D\@PPPcbbL<<5==iҤ۷o8 pD/_ 44VZ]L0`͒d^ ~35G-AdьpeԨQ#@qqZwnݺuR}P{n4իW۳:@ jUrrT8h4.]e˖!!! 4_]Ŭ}ݰ0ϟ8=zRJժUyÇ[h\hQ-BBBZhdNu@?GZjXXX=N|xFFSO=5j(NቸHo޼ٷo_iiicƌ4iɓ'];A'"~FyQF}wwޝ?~bbkr'D\$Ϗׯ'|;DFFn޼yѢE}q%;;Mp O^ӧ={LRyadg;sr?ֲe'nmr8[ ;vOgc+Wb^`Fr2tkmw/]7 9.Ub؁'nrrJZPypG^ kbNqr.ׯܸQFr2֮p̶mض F#.^ą -'(-gZ kn>+W-]2e\|+/F\$AAAӧOrJIIɭ[ hrOO:ekӧ))w̛W_{aj~?ot Kp8~i3Xi٭]1cd g7t)f¯~!fe]`deY߸ OcJ1iDip֯] ʸ~_}ٳ믘<ΉcḧqAW^Rhm 5\Ixvmذ35Ax".h__!C&; /uǏwY^A^%)$A: B@Ah BMSH t 4AN!&)$A: B@Ah BMSH t 4AN!&)$A: B@Ah BMSH t 4AN!&)$A: B@Ah BMSH t 4AN!&)$A: B@Ah BMS#)))nɗ ƒp@w-Ax.h†[8OMhz$p@''''$$,[,#####T/ E8v\MΝzڵ'qMA|111[nMKK{])A4ZbETTŃW\9|sWuA¥x'|I 05iiؽYYػYZgq#7g5ߏq JK'a4*E7._FYv P<Oqrs 'bYKKz2nO@j*/i8a S8O9|XB\F#kN:vL̺T3!\U ygΈQP s$뮤D|hN-|8qwPMdWXf͛N=v O`ݨ]7B]p22_PRypǎ lۆT|-.Ő!X~/l7rs1lOOOK?Dž U&L0hkart튕+1jU,Z q8s{oh ¼yc1e ĉ1ᅬt7HG+kgoc,X`"^SOԹsx-y By-xeލ+SM ټ*EE)(,Ľ{b1))pnϒYP'enKGz"w"`4R\|ܺ`@nvU(/ǝ;?'|][X(܂֢RP^ (5WC8@Z"ܻgDk^^\#Jcp".#G4hРJ*}z׮]G W^:uj߾k&P\2dH.].!E3뗜 < 4Xm0:wܹsgW\9|sWAzum+fJH0aB oE6'%&&5Xd6w[@ŹN™3 Az  t^RSSs#,7ts*;˖n]wa#hhOE8=ڮ] 6p&wp .E;dȐPdǰ5χ?ѣG V?]Z߿w#3S<1'7/'G\i|sX(0-MDB |$&RhD~>]Ò%YYy3UG8QTLdd~ $\tt |q8JJ@df{ʃ~`:[u'OPVr['ONƞ=xsrN9SR^. "0ޅшW`lcDM~'+W:-ABK?~|]% .C NK #?,^|"7n`HܼiBAU9oqp4~s:&HLTi,r6lc6n岯_<Xܺ۱i13F8~.' 'Nd|YYbu+p ._Ƅ g'ϵ}%<#Gҗz5ŭ[(*‚c1lRRq,~ wOrsM4ܹw\oa{0}cRRYlق[NKƛÍ)A7 4cRq;%E3M Gq6>\l,K ,ZKY=w.qz̙&fg˿ln8nLJ11#5]S-*w4$'wXɅ 3=Byr~]|,uV{i9ccΟ[ox]BwH9u kfߎ̚h3{BHqB m=p&am$/8vL|DTMkdF|oc)>qB5 gHߓ;wDdq0y7=Vonr' reg#5U srD jѨe^:$wGv/̝Qja>9w*VoA%tii IPyAiDbX,\( p&N䷧L7*ܺ%R>Y$.c4(+RWPY  v4p=?Ez͋!&gBBF8h^*x-6[H+?£ؽ@{ "AMT.&#<eO \l#( 9s=JK5ATݾ}MLZZj[ in:);X0Udt~cF~c Ln:cf|5<8sdV`r,_b=7nbaZctIU bB B0r V*m0 f8ƚVlOAjB}+)AYaɜ*bqdj69L*)Kwz8ѤLvi["%ݰ&) 2k-A|ĝVN 5oqh[R{PRb /-U^y啞={Θ1lrss_Є7x#O#n AU'NGyȑ#7oRj_=66l{onݺaÆ] m0GY۴is|@IIIÆ ^H6{dKhРAΝXRaM(D3 ǎ&&&:MRR[ou/N:I&&KTB j7m2U`l^Vqq $lO?tƍ֭[jҥKK.u0Y/W֐U\͛˫"ڲ Bű)fDGG/Y㸻w #==ӲW^~:ڵ=[ln.|T:8%m\`0[+WUh_|0U&SrͧT(we2w.<)dTܹP!P=ly({3O0V"Vs]pℸD,ŋ01e~wԩSNl%"۩h95q?.٨U1vYj̵LgzHj۔P4iu`j49]) dP22Ь|'xs ;(,DA5 94o8߯e! 蘘-[AV[-_E QXO$=]8޽{իqJӦMCCCe;^Z\\\QiM]be=ş~jժ;w2dȬYΜ9?hRF5jvFGGgddTAu"ݻwvv`0 N:p݂߯&HQQQ<%Py4}1x@Ax4$AT 8YY6FH ?Im@R;1;׶]s!&PƫW 99pႵ9bOv 4Ax 9a -_p2UplقceyR̳U rgdO?_Ea!1n-CFΝÝ;0b3tsra7 4 G{iI{-4ڳ%%#dguZ ܹ#oM8,^,&W<1 4AWЀ'z-luS '+ >>/xs z~w[@ wBtF{^{@{ˉ [| 0+woh <kȎ*VM'OT23=]~.EGP \<1Z6̣T~}G^&h ep񢻍ph ܏y] 4AN!& @GԜFIL2 ZG@M8ը.{1c =[@~%a'ٯ¬q㐙iAٯoˇ]h  `U8DY68i]Rr8arsL<+` fznB^gWp*nߖ'4(@qLj7 4A^?I%%WV>|n!&BڕVh t(5kp.SQ1bM'AM0ز ]| {$Amyִ@ Pn[xA ޻ꯟ}__tſpqljAw4Iy$A{'@i }Hw\{Q?e9\ 4AŽdɇΡ(-Eq1}|2ގ: WV?Y 4Ax-mq,ОCM 7ܼDs*oh Q5?Zf 4AމR=+h BMSH 4|RΞŵkl3 &{8zTP".Ɋa eK?A8W7w)E2a틋 o޼yjjkr'"鑑&;E=r|QSO55Q aX7o۷/1cL4/8eժUlgZZZ-S:,=1sQ 9rGwݽ{w<2dHjլnF[7w[@x/}U? *aXA߈ U?**ԙ  D-*⣕@nE NX{ f#:@36nD~>220e;j`p7u kb Fp.ueVCMx{8ii^ ssF#IX^H erxjZ$n&0Hq^T/ށ o?h7?m`w[@DM,Og\Z;s' ܫVuuJH" C\+  oFeYF%j\:`@*ˎ`ЋC'f.' P'^QL \URYkJfMv~}''ƌz˜ O@ފD-|ӑ nzh6V  rg輥FhJ\߬CeS9Q>3Gs,zy''X3_?/]r-66:6 :' k^Zwp'>^D羊>N,m+iCh!${ ´SN?.Ln+wWR 4n  V5V\OQQ JrnVY""0w< W*DFZrʜBybo(~dkۍ#<\uvח/cdUnzPqЦ QrF 5А,@^ⶬjV&€;=ֻDqrQ ͐6MfS-eH)ȊsqϲM'F?& PBݺiV&7)t[qL~~tsXx/}Y5?ȑ;b~/,⒛W—VZȢL*>,deӍ,/ǭ[zoY{@Ce-;m[ SU x= U֚D8Fb?Z )0s DGgh_&W,[t"#t6.r"kFcK'`4":7n#:\f!_]ش hIH0eZ3yjUU0s:u( )5ݔ>;"B&}WkShori,?~oͅvU6FHh=|hL~$o_qg˖3c>~_y GW3ׅK*J2~QfȶFPX=-c`0_Nbח{ۙZjȰf?@*GF ̌ ap x*hV)'˞jcFYVa0hEx8ڶ Rd&(ԭ>-;jzH/$d R!& Eݺ2"  t3dƛ7ҥ@&kB34N{hÇM0hɽ69sի*Ѿ0PRߏ DE(v E6SֆZѰB#ZMMvLP] 0@e*Gm{%,k >>= #JG#ިHmStn*j;YshN!LN Æ){(>xYԨ*jC>4cXtkeS(YAkzDL4z8]WfǍp/b0z$uR  l h\VŔbhĖ-q#EOC%={TVr?2Ki^u6Mܖ0bxB?~V7kDUSGA_!@<(~dSlc5MR ! "JЈIgO7I}?kuO,"B,կ*ULjwo K\ vΔ{מ\CehvLtVFM ֍lš 47Ah Nv!U42K ޣg-/(y޵t}xQss"HOi<]@7 #u иjդyj4瞃T]ԩ#w0S{䯶Q= 5Cھ;XD>i;.&Nu#Ke(E=A",)aȇ4eI?^h0 6mJ~~ J{A1s&/,ǙF[3yݺ /&.֓R:Tn7-]sרyQM~z!cHv7mz %έS<\z>}D?+q[ia(_軓'*J~EÆ]Oʞ4A{}y){| q[1_uW^_63xFSVy]: &cOy~m Y]Bw. @|͛-zi0"¤y2ڶ 盠n]ysFʣN(__Q.Qh(&M[ iL[͛ˏkW֬Т5j |mFб#( ͛#8Xl>}-tCIP:2>^y,{6d3n֭p}@EF|?=bд >>V،=q}&^h~\ib"ZHfj YLqaV,){,\=3#eoʒh>OGx GYmhueK=@ؖ(&"_/:, <"Iv0XM:d̘!G?$S&-;JV+-V+XFGg0~Y3 Th?)Z+մS@m0_0ЭFd$2 4 >h{ߎ`5W͇vه".s y1Kp;uB1ZOQCu*1B_E]ǔMUFDm۳>6(OGP39KOmBk}ÆXǍS~1Nod of.}]:8}Fm@^,ͩSLǦ㭟|NSӚLzygAZyH W -4}:siSqƧm`׮zl:lϲ#cǢF ЀM>m;?BBusLСHJl0^ѹX/*׀-A$"xd>PO!R! a|Ua-:x'ѧ][|] ˫2*6'*> ⧟[>û`@͚.Zi]+g >ký5k&a(o_RwQr%ܵ_?a8<;wpBǮNJgO9b\ AYxLp0ѭ\חjԀ:v4Qx^Er23:?n2^=ܼFP|iAmذ +Ax-0L,ܟy(?.W4Qc&MЫ40P=С:_?q/F|g_?`0PV(֞mؐ"0hDj*ԯ>-/m cx׷y:_|OclL(?ΞEݺbR,-(wk,_7is_{ W 3SZHbi):֪U3֯O7th`Ma^ s۴  vw c2OiW6Q:>XS-H77dç۶ak쵓^Ba!yǪQMW 1$&ʧ0}th҄0k-C*XRtDZo¸=a}kDGQ#X[qIws .N[`ظqHH@BUޯ0|8>\|bYK襗Xf᧟j۹K<0R@2f,_UVTF"6[j ػ Uԩ}\ LJRo iATun99uEVP lv(D`uXGQL~e ȾbcMe_YOfL` k_m𙨁t &aKaS- O16}'$1mТs֝ǥK2֭ZGN6mpWW^'0Pm l4NhY+KY)싋f[ jѣMr6ikUq>ٺuZ<(nv 6?Lv<+ QC1\y]l؀G &_p4&>D)ј=ʏM 1,= & E6jU{ЩV NJRxWEoêbm_^Kq,eRwzP:2D5oQ~d,V=Rf~dx w&w튄_?uGJJk2b% !^b׿_ɖi ~Ln()2*چ+V)=$D-x-ի[ h[fZJJ:6nhMX8ҢZYO>&i-膌zPo??UrfT?9SIo{Z]tYaO=et+'{XײTbb(=k|9>FVi#6!Cv ]8EMJBp0>\9D@߾U@ 1?yԭ+@QuuHRiEEw _~PH"/3'a0htqqqzzlgnnnE(%i M<њQ7n̳[ӫ4P(9k, @yӃ']z"x]֭pԩzT^PRbZϼ8Elaam8aðy3?Muk w[]aCL-/ߵkWjʰ4kȝ={Fd3{Y B1#13gpJwAtף::T\)3iKǏP\A|}FR*%Lii7.cU^^n0|cU`S>kKNNm͒amݻwm2e?'sٳg76x_4nܸ_~6dffN0v! +$A: B@Ah  ཏW>>>>:yy]qqq``p>%%%7{˼\Zy@Ax4^XAx$A: B@Ah BMSH t 4ANNqƿ˔'&&fff {N׳lٲΝ;_ۢ-_<>>>"""11qΝN)طotnwsΆxgm5]EN8qbbbbFFFXXmf͚չs'NHw*.&==}ѫV~Ȧzz 6gΜ۷o5jذaN)1bDYY qٳg,XRha4Ν;q\rrrBB-Ν;7l ##Q,;]Ϟ={FŶ hyyyhq?мysNjrqWRRҽ{e˖  kݺuXXX>}.])EBPXXqnB*ЊEpp)++=zСCm2XE;>>j`0RRR\x^|x2L&)J50axܼ?s-//o[===50"χbFCU0I7T*xQvZec>xwmsm}}r/#0u%efffZZZn[>| h|`?hoq@m ) ") ") ") ") ") ") ") ") "Ш2Rt:]NFRt:}'@LpB"UFQn޼):<<\\\looonn1wR>zSɓϷΖ^WW'k$imm5 #:盞6a8KPUTPJx߿/ @m~~^)U(^o,+dn[;oܾ};﷞][[SJy󦾾^)夔_ۻvZ>?qHT%?G$LRaH)RSSSֳuuulpH)3LccT*}vgg ϼyٳ@ x<\^JfNRݽ{w``fU-T75::jvϟ_|q8SfCCC<(rNͦ*Jf-RᅅpBXAʔ Ǐ`"hkkFO>e \.ظwҥH$R(̥sΏ??~|ܹ{X|%l6{ʕ\.P54~띛 BazjeeݜNd0znܸ122b~xxhvx߾b'4h4h@4h@4h@4h@4h@4h@4h@4h@4h@~$IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_mindist_crit_big.png000066400000000000000000000432601307543307100323300ustar00rootroot00000000000000PNG  IHDR) IDATx{\Tu?fFʠx!5HRZV-KZvq-m~~4/Yyev۴5QJ+]@0p~q˜33=Ùy>s>GEDD~|.c@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@`'66vٲe& lFA:Xt|e"q֮]&?wEnnq,t]Ebb N_"K/A~kkk<[BP\\<88xܸqﷶ~WtQ"u>ܺu+A('nݺ9200m?Al}g&OܣG˗/=Z^6ol{| 8ps***}}}L2fsOEqΝRSL sNӼ7ήxcǎ>`ĉM™z'HHHȰ mymwq?[6=ӷj}w @RR(ӦMУGiӦ 2Û~%233:thbbum"++K:anBic@'`0DGGK^ZꫯDQQ;@[vZi~{1Qo6~m>|8_;vlwEQVwQ__/e~[TT4gΜG}^lkz'b2BCC9sʕ+ ݻήشige-CS{Fo %}aO:Wř3gN6EҥK|||fss=qD??oݭ!l{XBzŋH]Xtt+~,iAl(..>>B@/XM-^())Em[ozjH$%%kM™z'"c=`[ldZ8|@;SEQ,..ja@fnW?'Ǎf=Zsh4JJn}?4aۄg˗^x鉴]LZr%EV/Ig?RǖZnRQQQ?HNk b_$uuu:y{W^yoG='2gΜk~={C.L[Zk}] .\n]llI̙3wܖ&dV!ݬN^AukEB"]~Ξ=;t &4 8p {ns΢1`0ddd|:th3O0dOIU={o۷oz֭['}[oY?CҙشiQ׮]۾麔w%ߛm >SN-[hMH}g}ڵk.]jӧOVVh4SNh4>ÖO}_ "޴iӤ,Mz[.6[j E]v5='1l?5`>}4s߻w=)))))6~h¶]vIG)hD+Z􀮯߶m[BBBPPPLL̟?j抢ߏ?>888$${9H}}{-r-[nS;=sss_h;vY8YՅ Ǐo-Z[on:lϥ}Ai4H>φ 4x`kCsvM JLLV`@;7Y|&LHHHZojjjǏ____N4)22~j ̛7OZ9=z*++Kb@@III``i}QkAvyy9GqMqb@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)Zr%",2tFFO? ++o߾:nȐ!Gu""O$S@ϟ?Νk4|4yZ'"D2=0<<'NՑׯ_oq>#>GD@@̙3U*+.SzҤINKK۴iSyyz{@"ذaÅ \tp?W\9eL^xᅻwmǡ}.=;\ \rʕ+kkkBBB||8Ï%rJ ]""#S@Ϛ5d2;wnرZVѤ:')mf6bccFcttEi4-̼xbhh(UVS։<|]RRw9)sss[͛6/\ЅzԨQ Ջ-ܿjjeZxwa06\• :33S¼<jz׮]cƌi-&66ncpppee %"r q `Ĉ555z^Q"vߺG+ "o'S@,Y`0t:Fc0.]ZZZ*ODDH={hܰaCvvѣG7mT\\2ʕ+ǎ`wuרQF)Ow/8hwW"2d/9f̘sISLInчM3SL"[QDԵwJttttt4JJ,[mwťK*8f͚e2Ν;7vXVhRSS<|m|F ȫ۶m3iiiyyyF1::zѢE"+]y5Y̼xbhh(UVS7?.dBD$߭%%%qqq넹& 5+*iӔ):FJHH^hQffSSS-[[>m߿6~6WV7tf"<>\i\IE0//Z޵kט1cZxKjjjjjƧ~h4:?[^_Gm[Vf*:|@A"##1bȑ2fgn|DDP,V|u3VGTW7vԉ ))))W իץN{ ,/jka]Ⱥ $"j7_Z\'pH+ RRaauu8sJK'"rdɒ%Ai4tRsq-m?+EpGQ-m(orlгg66l>zM̙vmc}Gn54 HD9dfwsbbb{-O}0y;;+V 8DtbbsssM&d:}+ip~`s۷o/((HJJRjzСgϞݶm<+9EdJȭ[X^^@ ΁hOT*[QSzL y7u>Y t:9[l??L0a4~~ "`Ϟ(B,}ΞuiiDԵ0]2ee/MLJ oAp| / ;q p䈃ʛf Ai펿SMYys@Ⱦ o~PeLC!]o`.\O?eYsK>> jOPjkܹADNY:F9MD2lUNjCMDǀnIJ5pUtuuբDq^Fc]Tivi+ݺrC__ˋ;h&eǠ8)" ~\^PR>c:7^yZ8m? ( ߷2ݼ9n$A@[/HS>x; 7$ÛM ؽ t~dR^!u1AZmy!u)7I~*D1]"%a6kϙGX{ݺY^LPQѶ:lys@yo~0`Vnvk[WDԉ9Qzshy`yt@9$ȅ9>r||R!>浳0"V9UV6d.Nص Fc+7aؾv8ADԉڵk>,ڐbmVv}lnmR"vs#Ge.ť4Vvkǟ n*U/NY9 &lݺRZ[Ӌ@)fb@hmZ9IZZٳ5A">>fY hY[nEVmfHq16LLnz3!!C0r0Y7>fCD]w5o޼G=zt޼y;;LNkqdi*}^[ "# Yz\Lh"rЯJJJJJJ@@tάYL&ӹsƎj5MjjjQѓO"'*㮱 _`W/XFKZVWq9ΟogDDh.¶lrիWnٲ%,,l۶l6IFcttE:xXgDsZzFaچ^A)~كk4l`e߫a߾}ƍ)%eff^x144U:8uyӵ9hUHj-[ScyFfnۮw@/䓖oyQbF1,,וŝ;wN \#ɭxm-, OCZS7A~~K;GD8n]0r$wO,ot/~ɓp~TUMDNh^ !!S;lԨQ Ջ-ܿjjeZxn f}m;'.Yx5̜잢Uħ­⩧ 7 eRi4QRҰgy9JJ"r gs}뭷fϞ)dffXXX@Vڵk̘1-6>VWݷ!\6<v|yժn5q4!0ݻPQ*YҿGt ㋄<̂ :w5;A"##1bȑ-8t8lZC=xm:~JkEخZSsm2Vk*+++**ۜ[oulFEGpEN IDATrÇ}XWee [**;(ue- 6LN>ERRR|֐!6.w* K[}cs&G!"oFs'^tn:!ͬݞ}\شul丰!">g]xq}}}nnGy(`?`Q 9l6myODNr?ï~+>>>=w}fZ_hbtয়_jPC}}!Zz 8p&9ADNq<h._,>}twiX(`p0BٻÆջ}|?A6YTV2^%"t{?>a„_~(`ά4eҕ@>խ[z3:Z=!Cddd,Y$::(`3ΟG``B-Ӝ ;(._!:C!0z=rr]$"j6lÇG &66mθzv)__| !2Yu|pzm։tCoȑ#{;1i~N':K Bò~{ͭoomM?4r%.]- "c}m}"Ź®]>ڙ67atRAA\X7(*w:]7u=/1/b7,]u׀ 2X>NYVP_j߭,JD]!t Es5QD^jJmlLZmYoJ W%cDh45JŒb{*f3Nn1qJۚ "/k~~~uuuEEř3g,ȥn޲|Ӱ:3!e\[i4 O^$ éSvQ%"zƍ/)))))IJJڸqeu@r2eW_|T2 ,vaa 0q.BDq@ozѳgC2չbcay-%t(bxX|PjOFO32 0}_?/ ipC`4: y:Ht))xX6 Yֽrt3Q[kYFqѯ_nݺ/##C: nvdXg·}sL~m<@L{a6ujGJ \DMD4!==]h?s~'z:]9\ѳTwQWc?h4uFnn~O Gd$jk6Z3Q~ݻCc(ʹSkOD Az(wX߾}ڵ dffqkmԃvg'["c;"iMDk=sU6:ا^zC=_\fɓ'7oܑcvPttÓBFyt#8&rO>NiAg8qիWǏV()p="rgZO0s[zXXNS6%|I6A9AE9_~2L;)] RL''chvc jo7uǠU*A&"GQq( ٌѷrd0==`0رh4F ut0n0`v__|ˑ =CDngQ˵ZmoN>s̋/.^'ifggmpBԣ=)T7*+C^rr$oYDF_… }ٶmhPhgw^dɌ3ɓ׿6^xSBu4wCJ8u O> x 9Q@KOTy'^}մcǎunc*_߹sgXXX;qwXzO?)#stL쟌e%}회P*<ƍkjj\fǔjYkSR\)oMD(ŞZ)0y , FCUھn^[x2ӝϯًʕ@IIÓVȻyU޽1> tҥɺ :N1'8uu8u & !":<*N!+KRW(]I?GUNj؃$}b"* EEJWCD.ƀ$Z|7O'&zwJBDǀ$C:y?瑞!"ǟr#-9U]tDb hOU\tDb hOգ1=٬tDJ hOS.\իJADĀT{i "Wb@{a2)]Si MО*, Ǐ+]S \ "Wb@{@(]ڃѻDލ**z5R"r >Ѓ UÕ.\=hv((m((o+] u6Zr>wމ`\{@)322~iYYY}tC 9z<{>}Ϙ8?.nGmd =@ZZܹsF>&O^,"_G:L}ʕɓ't… z>{1yZn BI W"T2IϟiӦӺw=/"=zlFEQ')ׯ_߷o)SZ ?ӺwEXƌAT}qqh"/!S@\555EEE_|ELL}zŊM9Sgj1t(B:d ۷$%%jZ=tгgn۶Mֻ cEQ4uVQhZޱjߎ'ڵh.Eiv t:NtABO;(]A{W^ƍV"j7))طO:]^.1'O*] .څ咓tD. hy$^JADmǀ~S/AmuQ1߀HLĖ-JADmĀyv)]K3ee8|X:-]BPLAnuQ[0{/hT"rL?Y:i .אN4`@w!>>oJADa@w- "0`"'G: .'1{6땮ZÀr&OFL T"j +~L& 1C\vT"j+dzW؉&rk .*&wމO>Q"j2Hd /U f(cƌQ]ȑMiFRf- EQȡ3gG]DnFtch4X_?)z뭭[FFFz^֩ec+]5&ߟz~ݗ.]1cl3ncκ#r/2AKT*믿sΰ09ۥV͚3gXPRYZSveᡇн;RS.(ƌ&, vQQsdVT >t:|%qҥّnݰieeJB4!M9sŋ/^ 9v/6fddDDDJc<<vB`uaAK,Y48Fc1((ȇwo~j~;-8aH;ͮG=zx\G btdfbxFP Gp c|ݺaL<uS>"̂"6fر'":5ƌAh%4ɭgO< yǏcvL&tIj%4)f \iy}$ӱ~=N@u51y2 hDb@[u֥(og>99HNƭ":} &L]܎ pmPR~±cؽ/iT>>4yWa@[ =aɄ!%z=ǐ!00p 'a@ ĸq7><>l_>@o0!!JJ1 h`zW/LdĻ97݄[oE߾C[  7aca!ΝٳػgeTWlFBƏ&N#7ŀ&/ףzmm-_"=99(+CXeȭ⦛ *&M]Ja0lXÖQP'q>N@h(DF"4QQVjrD 6aի(( |JKqR_?!8}BFjACy:YM&\b\"TU1TU~WjWȣ0,0ѭue5\RF~>  DXЭ""#$2n81\cbcPQב2e9ӧq:fC!0ݡRAE@"#1há $aa 'ʑ`@)FF^Z߳(+ٌr\9J\dJZ z@x8AAPµM4o=ǡ Ԡ&~ΞEm-J֢%%PdPDFgOP~07}Cq1_Gq1.]•+8t}˗Q\ 2QQEp0VCBBAA\0rO|D Ҟ8!Ba!Ο`)-Ey9 Q]ZlJeѭeE]. DH-I3Ā&6 mQ먯шb\ ee|r'gy9QRbٿ0 hP^??Z>[R@"8j%jZt)}V[KjRjn_ h"r9Azxx &**PZ*()Am-JK a6[F++Q])eeE` **ӡ%%_RۍMDI#{lq ""DDnMDDDnMDDDnMDDDnMDDDnMDQ ٳhѢnҊU9qÅQlI(y0*o\N/tMYZZ޳gOWa&ƍ۷oUt=z҅t'No҅t>oV|W8e dO?)]8M1M1ܔ7WNlt+'l{}}}[My]uuu_RSSRo4[ϫ[?74G_}DDށMDDDnMDDDnMDDDnMD䦼3 ΰiӦ(]N[B7oǎ MNNZ۞߿nݺםr p^,{ӽ㼒f͚ւ:5 ŋFVrJiŚ5k'ۍOe`?ӧO>}t۪ZYYٜ9s֮]{ڵ9st)(~^yf/8+7_IDAT/QO:uҥ7vYqjשj999( +j_駟0;x`ZZPRUVVz~7o2dHOKŚqرÚ q^Z6))Is=gϞS€.--PUU%3gt:96B7*l6/X`̙m*O-77Ç漞zꩿFq^իs;vwqتSrx (_Æ |w~sO%%%˖-[`Azyܹ/naOdvvwמ={>c( dddxy/S€aԩ(޴iӔB7/++룏>O{U^^^^^^__׬Y#lرcȐ!?w87JV[8Fd2;vvʕSNVTSsŸFqz%MQf Zl:QfMkK'}ѣG;vSNZm2xyOdddxx>xʕԩq~""7CDDށMDDDnMDDDnMDDDnMDDDnMDDDnMDDDnMDDDnMDDDnMDDDnMF| < {~~~C: hۧtD1#͘1j6z뭛nG{O?$ իlٲeݺuzl3n8׮];wnTT^OMM|86lx衇j*i5kz}xxgOȣ0 Qwjkl}!ٳkjj~m??zvDZ6L;tPEE7\YYVc<դI߻w7xcԩzoݴinAAA?|rrϟ?}=ַfi5k߿O>7on<>>~̘1/ә\=h""74b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@)4b@ժÏ5IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/dice_mindist_proba.png000066400000000000000000000424561307543307100316570ustar00rootroot00000000000000PNG  IHDRJ NPLTE !!!"""###%%%&&&'''(((***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXZZZ[[[\\\]]]^^^___```aaabbbccceeefffggghhhiiijjjkkkmmmooopppqqqrrrssstttuuuvvvwwwxxxyyy{{{|||}}}~~~u IDATx}dGq_!ɫ] qH\RqHܶX8B؀%1@ 7D 810c1`e@HHݕ2_]=3o>WU]ߛ # h4;ov] 7||lzOϽ!0k_~7֢u R` ^YwҮNO:p>t}AӾ!_MM yQt\sϤ歐d ~8m%,6>yt>nwCgpn=#&'7֏?D6_q̜1=Y~1HQ:i:MDCD •tͩMW[&_]ڭ <] ΓSʱ7\JWuU ߠ[pn%!\29y+=7l=E6x ,l΃'Qk] Et͔w$4N"S4 [sNUpx.;3v[X Dgqr RU_;u|d܄p~!`rrl^Qi!Ӝ\uw>3fw5{-u1߼{yF_\R /?`yIw{+Y*`|t{D\Rqj 8ϚN*Kq< ܼߟ=p׽xzs=D5xϽw ^km' oy'-{cBlS>U&Ž1lA|QOU7+z'7_:?7-4Gix4#hugx,:4}ݺ,:}#;V*Y>#,zedxGP_:kgt8E0>1' >'Q [@s-s4o'Oլb'B+q-“\,X;/J:N pyQeEI-N$B2nb'GBZ8! YG͆ leYQd:xYf%O9LL7ϵ!b 8 H+&Uҍ86!" RIA  dʺ$S eII>IP,dB\IG PA<>)nr`gP10 T r9XwˬD7"Lb&Ѱƣ;jHOfYtD*#KX#- Aȏ#UnĴG聂F]sL ՜YhY42 =q-ʆ]C\rK4\ʽ#lnGS( Yx$KӴ$uN d2W0B@[I.0BK,XDQ"x(mP=J!P%͜R ) 42iL)i\en9…f6bFfV&!0N$*Y\If2h{U}+8)HX@IwQ'|&8쁆m&&TBSr-3x]@6Lja2,@j8*{`̘͉r_0r2Fk`Xhcgޘ: s-ݑx3De0܌aC[kCKU)`jMgE6#lGʼn ~<>7R-%27<nSdהsn ТIb&,C6oYd8Q`%QtJƣU"pd=T@ujƍ91G!tJ0sS.p4 'sW 0)W`݄] %ˎjok5uhc i/HR#04.r#"Yl#SH~r m]Uj l__cS,0#g\Q>Zp9cW$KinYbc=k:`]ِ7. <%DO{R7K3Y MYh BZzZC4.Mc 1C(N&.,N9΢O);LC~srrF뼛1Z XixMzx=/5tge2KRpW:h[zӈ+vޤd rQ]h-<]lj U+6P!,yhY~!a/", :|Qӛ6 bwgGl]Yyb^:hNr$n+/&6\G6ELX0-2 Z nM2)ip"΁䑔-&jKR/CW ^vg br3#—l[KJRnug%|Фgѣ2Jl8qKu!nR.=<颲֚E'װ"7xƝu=?QY !_REJKszf Më[Ț=t& z^\HXyJJW'v53C%^;ʃ},nD>i#y 1as:tpHw2%Yf!,uܻb?1pg=.Ӑ}1Q+.Ha06$cdvF|ʂUd=wQV弞TI`#PH#[*L0V "LAyz,aEyrd5LeW|&'K=F#qԵ ^3cbE7}yF@pi ];[دxB֗ 1.\F&2 wbGKZ]f6"^zoJy1wĀnf(0 iXz'1d 0 BZÈ9vaZ/K(I'>6B:,+_w杪Ճͣ;}+l pQ"HclVow R19@_csW#eњK\ != "^x0G퇐.ѲY0v)GfQqHPp\4;T6b6o Lƃ= 0,L36z<,?be6S=Ӻ,"*F.t6Q5-^kYR:KB#.sҠf Uȡu^j=sdE0R< 7΂̀ )< $fbGpvlMӠ5?.% b4kb+"OYbk֐:08 c<o_X3u)X.a2Y&/+>sL >rڶJőD͢ӻ"&$߈O[r#rAܲ98߆ QS`] Y+ V26~k;Sc;P82/G@#;bʈUi5)$U}ZcM=X8{K|AK2!ۑJرB{ /R #mL֟dU }yxl`oxeX@؈-#) 8Bd]-h7sZGV%Dxd<7e[|Vs6 PQ ,5Ky82W/HUaNOUvY+hLJ&Qz#)eH}&Kqm02j1cb5L=I DzZ;lD| F/)`REelU w؝p˄[8i\3| QI't٤W{*\!CCWS˧qrFqQ0Q"g׆ 0Sֲ1e(]򪑔GӳS noA*xYк/<?Δ#)T+ݪ (2VِSqM\5ڲ9hݟ JI"A M $^*F O-%JX 69"~~gC{IpTAI8K]+VU>bq#H͛x8i :ko/8"$LE:5ƧLYdM0Z /`P $¼:GE''+g4Z藅ALS!4f|J* yiJ>N,Žev!d*;H t}bs 8nvG*n|̠5vvBByq>uOSY>U\ILAxd3㢠(|S UGrh!e+\Q2zN,0DaF%Q4hi+sn?zc&rgܘnL1 #F7|gF)>< l#)iav%"flJNz4}S#|3uچgtGn2ؕ(*5^=%lq$dC&G"hN4Djm "q5拗MDcv` 7C;32CeNAR΃[4)؏Oت'T 1  L2~&$^IOҧuڋ~*ɂ 0"8*qH=т-b+h67}h \'P)upJū>seuD}RrRσ֣M.MVdCs cR9{wuβ Ѩ X<7mYXsn-$P9mE R(]%确&:}ѼCB@c+R*/K?mbg[j vmmzXXFZ.C碫dE5nB> 2|Se/I5T0LgmGc63<#޺-]jvY'~LZ  ,vZsЯ* aSh#g&E9.PDmH2F,ՂאEF䔬 |d@u*m+3g! M/E]> 9HrMԞuJfcOt AtvdGبYة(SZ7:P=u2U,Je?Niί,ը]ҰB,6dwf36̓ik-ѺuO $᧓\x)M%wz-C"!^.Zm7dq]I>'ӣ;ve{6ܬ䄊I%in+I7;^Qiss {BBPF Չ|̘/։$ 8!RIq,04*Oޝ_ʇqnr=R  -Fzl,]-6Tf W[V#)n GIF߂ͦ duZƜ-ۼсeYKa?zzXbf5N5{A]+e`rPyeaqI["eTj#[AJrXl~~NƜ\tOFn'шFC{S)YkDp 'om`rsoc Gtti)n\M<Õr#mIe3.Pjk)l0"si|&11W'/nJML -5<[SEW.f3GP`7G9~{m[ фINE졯4J$$˯5 ̢KLfT#a~]U\كqM3I/2] %ת\X]9њ*Cj¬F\!ƶXB>UqOڲ5m)66#xuM-"mv:󑝠Զ uJݨeeMɸqQ!?8mx#.W .g@DOn PV9leRisכM; L(5*sd[< ْi@x lfL FmD3v/~H/g IDATdNėNdzFuY%DW>~*@'Rҳεosj|ki`yY_S_lTo3^{M|3zܿ,H7䈳lw>C>}eyIMS6vg~JTMl[KuOz^dr[ԭ@mE%"k%;P8P1ZK 3,zƭ"́Zؑe55$XS#oۤ*&+\eko\x?#A(سк4'>G JAy"B USa|nrTOdʹ|N '4Qk#o4Y99[WXCijˁZ` .&=M`[]F31S^J3`Rtq-7}3>/|dQe" 笨F~WIITq0ô^O,'`8s$YHP-nn5 ֎$"達H6TwM2t's5o]bEϲHsSlM,ר `cM%5wq55Z[*q#NbI (H-SC+q?m#f,G2 ,hl'NA,Z.l,z+˾rv"xbr~^6E/f XRYUe-e}xxj -sK ڲzcb,kZ)5BM.39 |9Ykh!Jt[K lNڒL&ܞh7v#C 7jZh 8tIO囍T68TRfoʰbC㐤r.D5[~>\"])zM.$~|mȰ\(AE>`n_l*Q^V{.3z;3%f.rlXRj]1o~;bSIM+k== 4Y#dXjƛ}]&L4e $V83ɴ,.}Gez'_ԧ3ma@=˂1U :ymW1"m~'kE/av{2j`` WaܧcޠlY￰.B_k-iu0ڇ(߼y &a~9.(6ԘdժDc.j,S>ʗ[gǩKlE'eQ#'sWJZjCݺH,wge2`0V1U,lQ#Jrڮy]G!^?P]׿coOt;S厫cy*ǿ~bP[vHxmf1O ={uWZE~-ġ閄È?s-5^&Y(8gRxw6Pǜ qV`ۺfC*ֽ@rs`<&HJ M.9'3*/MjQxr7HlT.&û Cxesjx`wqf/C =C[3D_|?TR%G5DOC\;sFjGjz_123*jg+do!C̞ E​,\h0FcSyQs^$h豨q!.DP,;p,+b߰M?+_y3M%eEcg + ݚ]ޠNr9kJ_O|5Ŧf ZrQxZDC#Z[5q?6N9oW7^; U>4$i>J( g#,Вҿ~+?7$u#vR sL6RAժ-k#}lUTw&]1hu`rV%O粭 ƶ*9ŧOq(!C(:z=%YP[ַ֨kQΝ>0װZr +yY֦ZT:b3κ Y$+ ]lZ@bl߿*6 MdU >rK~GmGm%|-Gj6? ?3Wdb_ewVNQ݀+;#(y;אn֦n< um5UV<:l28(#/s{ɟy}̪eyՃҴ`.zX lI,[ָ zydg9;D+ j碪/ wi[.Êm`# %:o] 0僶Z5mtë ӊKNXR?=K?ʡס yao/@Y\@pr%q ,.şЇ.AJ=w XCA\Ћ/R_~njۅ[P]Z+T/C{xcc BK {%h *ʬ4n"a;ъ1GD!r=֍Hkٰ b [<qInj^-#i#,X gp8KzU *ucS@1'n%p, ʟ %j$06WlԽRzkKJ~o?-x}MQ\p,ymV[Z[BPԤn\B`_JK.auG-UGS-[Z0(gXh[7yJ%4ɷ>>I;p.QfJfEAՏ*"q./f]ShsCi[͛^a/ Zx1}3tD=wRB:kyͤ3\vC\c M_~ )#@NVۚ0޵X-uoCXSsK ;xtv^L+e0kVkK!sD]`NaP1yٲK5!0tlN/+|0.*vhKbAU@1^5x; ̽ Ғ'kمmp6MyN; h -er#uҐz{J ˷|X~b 6Rey4hCUmcNE,^^:A_x84d>UZ[fc'sr|lQwPbZ?!Ʈiag'8lf^ O 0Lc1w+ v6 :cF,| _h-?f۵KKx2/K|}0ᳲGqqd.%2r|bʰ'֊s[]?O2UZfM-+&dVkuY K& P`mr7f,W"|Iղ1;lxečtܠu@lZ4"J~Lmɳtf\>#%_b%f٭ѩٺ|D_hFb@z$hLZ|5Kj~koX ,)/+H9IVHYpz"T]BGt5C4qbK >GKULKk7]L+jhiXpyJa6/`-7%mmx@YZs/(4b^saÏki*vp6-4+6@LnoeZplhZe>*]󷼰umjaFnzKv6r$^ 0"et̮)XŸL๔mFʖfTF>. ޱwp 9ԉ[b'nG&TEȆF㞲(Q^kc45e+$jb!xYؒ+H-+C$EFBFԪX%?c9[y |ix)2؀jGC-ozYrĕ%HHFfVB`5.s^p} Gaŗ&F oWċET<5MJE'F{#JvPk2 Y!6C{Xpd-^KePZ3g9JmNJ؆ /\FyRcMPV9^&ms *9x+=O3JV,. lV#}=5ߜo x1&s?Fn5jIhDQ&pE]lpI |<2H#U0_ m@C396V#=S* ( iG*k8NY7ZIjvbާ #}KEnXs2ڐ]R4ƒ#}SGx4 o+koIh)§܉(c5v/-J<'t Xu̯ǻI \/Pꗰ$TbYE#G< Ck? >W辁ˀJ F/y "hxC?b9~D1d^=2*1;NLBڵF9lJxmzWyNyոR`o.rI&!/(RNN5 +_v!C^ɷ/b\؏DpU KD-^;X1bEi[En4 Flu۾*c̤Gœ{pՕ5,n% /~Iue#Cl~R6&L9/7ߐ}H!qew+c*1ŊE WW6M~=<=I3|M~ՕD|'oCH'9<%Fٯ%3:&65!ކ_oYH}d]G7ھA۷5#hvFwmN};Y#;ˤix4

    ~csܮ~pTO|vo~ `A^]&~"G4< iB#spF~\kz[zbt}O|؍{b@<Ҏix4p=g|oND-˨//.|R=ڛoMt_uwZuG~ޥөmx[QOofӗNomtsBmo\uO8Į}eu/\gS;[3|}0z>&Ň͏e %;'wo?@/~ +nu㒌z ;m=c`5𒳿z`7ǻVi\ľ!\sK2+ɺgΒ}gIV|kϝv_ʌ3O/OY5a~~; ǟiyW/ٜox7Mv4D?g7]i$zOzҕnM&4>~}7dYADDDDD~nY"""""& DDDDD1L@c0!"""""aBDDDDD< y """""& DDDDD1L@c0!"""""aBDDDDD< y """""& DDDDD1L@c0!"""""aBDDDDD< y """""& DDDDD1L@c0!"""""aBDDDDD< y """""& DDDDD1L@c0!"]K.-[l(,,ϟoLv???\wu^zwަ߿?0sflUqddd_~֭[f9'1?MOD .]`̘1H$I{Hqvc=Ҙϯ7^_SO=.iii,F߿3gJD"rL$dddh7|kb֭رc^|E/гRRR0}twkұrE ڵku|ٚѶm[lڴ 3G1زe[b eee v3$tl޲e ƍ_~> .b/:uN:X_7:,5:u_~熈رcѾ}{DDDnΝ;Ϲm6X10\I?>???=_~9pjjj(_~ζ;Ψȑ#xG0`C8p fΜ~p]w)?ͳ?SN_6mڠ]vUV9l޽{1m4t#F}_|~~~_js_ca Eǎq 7?qwu~~~~_ۇ$ٳ'NiղepW",, ݺuCrrh˶m ˲M Cj@56m5\mۢK.5k~@ii)&N:m۶馛t?;w⡇ѩS'xGp S3GArr2u놰0\yuxαccaРA C1vXlڴӧOc…AǎѦM7|ѰJ̜9]vipE1| ,@~(<8sL#>)"jY6""-vNj/M6!!!cƌQ^\~5 3f nvcժUxfL8>ѣG?ǚ5kuV|6y믿ѣGcԨQ ݻcDFFݣ ,q㐒}!??۶mƍ1j(|fW^y%2220| wu/>> u][b߾}ׯ1kL2ݺu3uӧOc񨬬ĉw}>(zۘ`ȑ1~xtMeǺup뭷wޘ#䠰%%%ܹ3:t而 ,]@ffr~^lg4DkݺuX~=&M?Oؾ};.]>,Ǝxs=/=Kk(((@||<Əsaǎ_>%%%wyW_~\s F w}7n9@||<80aN<n믿[9q;Dhh(:۷cÆ 3fѣ1bqꫯFee%~Fq>}:0aDDDCvv6=_܈<|$IM6ɒ$ryy,˲!K$˻v;g$I lr@@ܩS'ɓY$Y$޳9W^%InjcСCӧqF_ӟd}֭=^{5}k׮%I';wN.guulsXaղ$I#{>і3f8gϖ%I>۵k'w˽{6u}Yswyfߊ+dI~\=ò$IrrrkVQ[``m667N$In׮]eIkl?psK,%Itl2vs=ߗ;vuZ_^b'NC CCC#G($I ?z?ӳf͒%I}Q_|lFI䫮J>~~+ˇv EdY󑙙yaʔ) IϮz}:;|3&LٖK.[lAyy=22v7n.RlذAf[BBZ|裏tk7|3"##tR>}Z~ \}ͫ#$a…Vu _w^S o)CԳ4u_?޽2Zpp0f͚Çcڵ6^u]O[omg׷o_<8}=|سg=6uT5 {AQQݹwqUff&"""gӧO5\|-I!Cڝ/lGEEv̙h۶-6n69so6"""lzy`С/m6r-:u;v!33uuuXf =ѱcGm<}4о}{<6 s3eӣoΝJDaB̟?O>${9kśo^xÇm\s ځ]vk)â[;v,t@e ݻQQQ|.{뵫{? o:eYڵ%\b]$Ǐwx~||Аgff #""0i$l߾C SO=BԘj={PWW+mڴ?rHs%IҍE],9"'IM߽{wmDWjT +č7ވ={"44c[{x=܃gyŋ#88EMb۶m[###֭Sz:wOb{c~6Ao f_GӦMCAAɓ'{,xqԩFQ|>i&݂sߺ~MzŊ;C`ʔ)xеkFY WDD6?DVFoxq9|96ǩ$%9z(.\/o~m6DFF"!!سg~g|׸ۼ2oϞ=Qekx'q9p@/jJzG_~]A)E=A7!!nE5 Bhh(vڥY1LM碋.Glذ}AQQáP BHHK#'O{q¿o>oٶvZl۶ 3iN:txXkeٲeXj;m-zg;c.ǬY 2RSSmbTUUz $a֬Y.Q${8z(4Ԇ3fZ);,\AAAJ1vc9 @QQM}^EEE0`nʛoiWjL>ݦFSNe0M,jGbΜ9M~@@/m;t{;kѽW_}~ @W_}ewɓ'qI"((Ȱp )&Oh@DM!XD#GDjj*6n܈CĪUbI&aɘk׮q7VBUUpW7ġCpW 66֥{9|GXh>3ǣ +WoE)4Ųe0n8L6 7t ={/&Lȑ#1uTtEEEؾ};z{رcbHLLč7ވP 3fhr6lF|9#Gđ#Gblr̂ /2v؁#G+Wĉn:sy=Xp!/_]t/_~9~ߡׯǑ#GC{sa˖-FII FJZ 'NDAA]ཞ+"KD: z233e???5/:$O/b9((HҥD;v!GDD_nSoc=*u&~~~kg?~\cǎ~FzeN^osW]uܥK988Xݻ|뭷ʟ|u?3y̘1rvd???{ ,P9""Bk˗]K=L-[`ر;l2o7ǧ;w}AUU*++ʶ/ēO>BvsM͛g}6l0\k@ <`z+[j8V|P˧W_} SN^""րꫯ~zܹ6lI0l0o7g=s8v/^pĉ={6tp=y3Z^{M bƛ<& Oxꩧg 2 Isϝ;'"//> qQomfo7EFFڵ+v܉aÆ>wOzj$&&N###ovs5gā t ˲K^ݻwWܹ3Nk̙3nm+QK|纋 6 555ػwZE&!!M bƛ<& ͤ=z.UTTxIRRR ZokacLl=$$P[[&?~@x[ m-7y,Bo&8u:eIC>u!+IΝG2|8`@dTݹqH\c`H3ѣ0J 3l9 O4՜ߧUWͶS班l?fǞl1Ͷs班l? 'ps|w0*/=݋_m3gڵmڴi(((ٶqFݱs̱[鷴 ٞ,MS^^lWj (**s9|>kϑ$$$w2d~ak$,jǎ>|8.]$O:}***l={6p1ڜSZZC⒐=zȲ +H!wY@hX#"c9YF`@E~n."_R=p .>~󟝞nzbl,*ˑ\Fj<^q]3= @AAnfQx[ m-u;wN8Dα >2L#G ??_VUUUVaҤIvɇڪ۱|{e|s_Z”?]+0 Nўn IDATO:$Ie11й3Х{w%8^U#G 2$:wFqa!!F"й3 w"*q  Q\XX%!W0%&%!)%E7NO%~Bx[ m-7yqbѢE8q***ʪ> """p]w!77GsaԨQؽ{7RSSѩS'og_~vr%6{t6AhXhjkjzRpF4yލ kٳJC@@dc:tȨ(ǣ8Y]$]gNFܹHR>;Ĉ ;=nB0ADDD{@EN8pҿχ$IHJJBDD$If~~~x ÇGnnn*ߤgϞ$I EmM Ξ= ?UQ3pYMХ{w%Q CMMKU_Wdu5ĢǫСsg\$\1l($du5Μ>\C-ZH rX """""& NNANN7oMӥ~s@IN?<2 BB$ $Ç\襨QR$ ,# @ ߦ%<"*IB}lH|]Z e:8_]Q^TGqe%zPNu 'yQ롭C3J".uyMJ]t>#kJx[ Md{@,NĤ$Z! @Y#y\ܗ.kAе{wGD(qYL[Q\XZɲRݦMb=?p`PಘuADOE!zBDo0] nWmTjr fYӽ Zo"b1z7( A.f P@Vz; g_?dչuUQO?:ZO,"E~nR?R\X"zT*4+NL8ʘXzFC 59DR Ȩ(Dty:t#GxU]]$btmӲljFDOh{vzú a\DDDD:& I[!fR24$"9Y]mW7^ ܦ#<"BJe!Ea_1#HXjkqZP'4103P]Puy}V~m$VTTQFy!0D1 3/g]HNxD0VDp_$( $Iʐzt@ZV wnZ*"JU3LQ!ySB|w/+PK a&2 R"䗔(/^{^C0mڠVIHccmf?<ρ^gNFHh("^B Xu %ͱG\|.jw4ZY2\YqB?$ϝ$,&@CȒAA :S"Rk=,4zŴRO󫦗\h9&""""[\JBbRRC2~9P=$4:wFZVKJϿޑzer7D_={gϞ>Ò 3iO\ m7[4ѴC{M+'-v(NMM5?>0x7j$,&FI$D H\ +/V.$+"8^UJyh%а0^K̖%EwnFRJK=zæP-:50x[ MdrL=8&2* %%6S 5m}p  JPҮ- G5sG,1QfR?ZxM b&2 5:;=])׺,&Ʀ'mg+u:1TI]<.Uh 3dƝ݉@eYv#Aii);w"|vK$z5"/>p_Z/kU9P$(÷þ"PuO='fzثADDz5ob\xDFE!2*Jz'Ie&IֆE݇z\tu!P5b^3ծ]<ɕ+C0p@SRx[ m-7yL@ue[|-{2/z"DѸ V#" QS=lKoDGz5k,ϡZo"8L;JoXv]TbsbZ^MBL+#WIKK=+Z9Leffoka&2 Hxw^ضwn6AQ_[׮ݦZ$=i|>6X+V"bbb Zo"󘀐i{^u" V=z+07ucr+mp'u`4dJB Ыrh]W_m\Z{z$Q} {>jPDg+ jUkUduD=S  9qQdwuXd Zo"󘀐[i/ R4O;˔DT UneȨyv""""+aBƕnZzvA˽רEov}d•!X$$$`ݺu8dqoj}okacB^6Bo]b1:0:W;Qυ"Ѯnv!C!%%1x[ Mdg5!vzXݽDCo_5/m^#ާ^016a;?~>|>Mm-7yL@Y9F~W 6&0BϪ%yW'!=f%"""2& 1ڄA;$J$ QQЪxԍz6z,z=dA{WU """+bB̚zGC` p!"""jOqӾ֝=˨.#2*JwtDMM20pFK-m-0DB]Ñe3UqaK$!16VMuٴ 1)I!Qru8UѱfMKK3umjoka&2= SHMz-k4vZhײ oZo"󘀐רuO;˕QFvz:ccuK3m6Z m-0D1!7 J]Gl/.,DEy{imr|U0!0Z9 ~uGIEEy9"PQ^nSwJքcNBzz:"##8l޼Թ7oƘ1cеkWmƫs5s[.GIh]ok#1)n8kVKaƛ<8p]wa͚5xѯ_?`„ غu+Fixއ~ & ::CXX}P lBWuވ\GVDDDךC ^={-88Op!sCCCvl޽;š;աIZiYY2Z z*giN=Ɉ5u/"""C |߿?m6 k.Sx+WĽދs"44|}] LoݻQQ^nwlqa!NVWܦ`YyADDDdѣvc˖-4ikX]Ry艋דE ~?]UUUܹAx[ Md`Eppe2L8+WbҤIHIIڵkͭJY *-+ QQ>uP(3m9߬Y8Bf͚&1x8u:eGy(,,Tj>LѣGcΜ9ix Yċv _vmGCɀww+V8SQi>K6 isKҿ<bshZϡ>Gk#//Oyݻ7 ~:Nk -- /;m*,X'x?azxx8;lƣ>2z+{1=z}eP^^G}ؿ?8ϛ7'NDll,fϞ塴Ξ=_=9z.\y!W!_Rb:|ukRBoka&25 >*c  JbrL9_͊eݏCZsbyJѸ^"(IC38 /!1) q6I^gt]QˡW+R\Xhk""""`4W‎u'zCBDDDVY^ cղuot>`;ѵ]`;AYua&2= P3S\n|"1dFǩg䢖/%%M b&2 "nA,:pVDObRM uƏXeroj]okacB^ z3eii{~ Լ!""ֆ yMSg jp5W)CEDDDd%,B'^,aP-  IDAT,䗔%%HuX]ШևZo"B^lf+gdxus7//7|6pޖxSx[ Md$˲FPR :;wDLL^ccҞh-whݏ w}BՔtT#2*J+1)i}MNYa]﹚ """jXB>ɨv"1)I*e ^-w)̱MQK(w!QnQ׌h t;O""""2 *$C[t"씼 !5c̙1<56Ժ1xZg 9[,FLjDH r4p\kaƛ<& 5f AͶvM>~|.M m-7yL@EqC[IΒ""""+cB^p{YhWI7Zg (fw2GC}\QQFQx[ m-7yL@]nQAԃbvw->k~ۤPˑ a&2 3= v GDYDŽ7|˽ Zo"󘀐OP' !2*J[ШgDL_R;oSwz¼ Zo""x :[ DDDD,˲A JKK1tPܹ111nOhJ1yS tVkX\ȐZ.Zokac 8:LfrԮtmh Zo"8ˇK9W'W'ëݔcw}B^~nۑ HLJ2\Ѷл"""& sz-S9Oz_mHU޴fb:3Sf#GerVII/)аG\|]]z]A rGa^ʈ`mZokac &'"szuEZVnu]%DDDD- {@kVa#Wˡ[bGCL+,9R'1ڞ3ÿZ#Or4\ܰGB=ӔZ/#޻{M^x;>=&-_fZo"B>VbeTxU6m}Fvz jO=b_FFkPRSS&1xIz_EcԳ %HݻFGSS,Q5|o7<ƛ5lfºu Zo"󘀐r4h蒨Ю44 ^h^gۚȌ6S˓&1x)/zIee) E'L1xckPx[ m-7yL@gDAlQb.8waMfq}""""[L@8: \mFFs$Z+& s :VWMl/>qv̒%Kb+bƛHEvzz!UjEccu8҆Dokaca8VEy]9e{~IID" WK^keaƛ<& ✬FEyȨ(1=;d,J'"""bB>hK;poߟۘP! Z!Mb!Bs-TIyL@ig&"[P=qTi XnAx[ m-7yZx$ClW'*zS#1).1;UsHII};oka&2= s-$Ma]Ӆ7~xR˧7n0D1!^\[ "4lb@} &DDDdEL@h5irZ w&\CX&*DDDԚ0!~vŻ)/VP^1>WAA7|Ax[ Mdj3x!//z70D1V1:n=3+V0}j֏ƛ<& b5Eh]5&DDDD|$^ †fՔ$̹FDDDIL@RlafEuw\ |zA13mXq3g0x50xj/Q+ä1S["rJx[ MdI&1KH:̪C.TW\Eqe6R4}to7<ƛ<& j9*@wtqv-#IIDŽ xfǣJ\M%.LT5aB-El"MČXf׻)mo(**¨Q Zo"P*uFs;ƺu%;;/(x[ MdjZpјW3s˕;5Z>uc&2 jΒu7 }70x[ Md"tԩSHOOGdd$͛7>=z4ڷo\uUXre3ؚ,Hw\ZVÚ#$(If>QK.Y?0뇜L0[nȑ#Ǐdz> j}-H+.+Z㎵D<& >SX/Ν ;4l߾cΜ9xK/yɖ0ypXxm1jMm-7yL@ ^={-88xq!SeO>$ɓhӦ $IH[;3펆Yy{(ܗZo"ѿl6l`׮] ͛1p@_@0g̟?%fk,9j^<@x[ Mdѣv}! fBzz:5k駟ٳg`fkՙ]y\ԍ&$MY!)SCDDD.L@ "88n{HHɓ'!2 fm݆?vj GCV7^ʴUH`__VVu99Nĥu(++ Zo"=zDFF+uf{׮]Ǐwx & !!ψ#PPP`sƍ`w9sdmHHH@UU di^nˑ2ң# !!EEE60sLM6Q\XK׬o55xT=ǖ xmz:!piӦaXd ~is琓N:aСnox2/ryzMVx[ m-7y->1b3f`ƌKrÇ[oc=GO>Xlˑs~><|n&3>,pW۷oŋ6Z Vb;д kXZgt4U^"""' o~m<Ĉ#0c L6 ;vlҵssso&?c6$QPP'x+VҥK1p@vBT0.n-G3\1 """rVSO?aŊxQRR@x㍘1c&:1{@nJ#K6 TPQ" +ނ XuSZ."Q*F@EQbI,XMD8;;;μ_dY?|p $ h!v\(1y >YogaYϞ=QTT"|7Xx1^{5\{8p5נ\p]vP3z{NǣRh5VAڻ3*Ѥڽvƛ<[nÛd@Xr%."s9/-ERUed=*Un‘&΃)-)1}R;EYfY Yo"l3؈˗cѩS'\q1cF Ib L6 r ֯_ou)uώ蝒nf3DDD41X/oCaȐ!xg=zj;vX444஻Q:b _ZRrddfZ޳C\"""h HAAN=TL6 0`gy&nE]<=Ԅd߀젾iiiVw"vƛȼ}v |@NN9dor1T[XT߆ۃ.g=H8q]b&2/g@-Z$ׯ__|/R{Fj\{=y׫`-noga&2 Ȉ# o/2WnDh է`g=Hl~x; Md^' !))nP;3薗Zm+/ vpG8$v"""u1\+W|ܹsfv Xf .R t8޶F[jʵjp{#q QGdIըj#IRRRpEݤ #UtK^P >QtX`nVAx; Md^Luؿ?`ؿןFF-1ł@ZؑvW-}n]b&2O:&QSSbWW `a=p~19Bg&fC]M9 DDDb$..$;wV~7#I"K[/w2h]mQLDL.sY\NDDDNs Ȍ3 I:u\N#1=l=,=,[j~yQ4D{(Ou.Ğo_ lW_XmyY3*cժUVw"vƛȼK@ȹ1#MTBMXgfftv)zśvƛȼK@-ZҒ E `sɈZU]5&oȑVw"vƛȼK@&L}L@Ao;]ZI{]\Z2$z3f;t;u/"""hs H>}Y,2(9!(15`zk܎Xcƌ΃ (dO0D\B =qk=>ld\|.x=1xs !I{=+B@$|%u`J13 ^A5D˖-ӽPC]F&{b&2/NB'{ fy#L=Dz)^]\RY+up'ڑP%"""%1i Q2eO%3IMP0!"""[M[ow-+ѣ-KG;f>&L z_:6moga̋d߾}3f >#==Bxq`ʕ8*EP:@3h?;9\OJvYo"@{M2k׮Eii)}vx<444r>=cu7HXm"A]wE!+0x; Md^πXwy'~{]OMMxP^^nQ*F򶺁T&$"""$>>4|I4Y9BDDDD6H@Ǝ_wq:uّ#Gcܸq"W.r=p@]|뭀̇=]Æ !0D\v~QTTCbҤIׯ`֭;w.>oъR2@퐗cu^nuծ~˰Sii)(x; Md$b%IB[[[&n7dgg[ݝ77jSrɴjjjBrrrOщvYoxbn䥗^ dm]JgMHzi?rYoga̋[n E[ӡ;NuK@șS,^ZRJ噺 ''m:愈(V"inno 6য়~ѣGτ$Kl* m{%*PסM>ӟ>N0x ۑ۷N}УG444ѣѣRSS&Y@\(3C;3 .W |=ό ,0DT>}:n:lݺtR8p. IIIXzŽb4Su{J 'GwtN32&7"ǛvƛȼO@.X3gL0=R+0̃F~ֻꁼ%o0ʉG0Q\\UV=QtӋ7,7yBX݉ؾ}; \yHLLDss3&O˗#>>W]u}Ytv1x` ;;4ErbMBz<((,dbTD%śv98^k9pi)'%%a?"m{]Oǃ۵'P?+9q ENvƛȼO@ԄسggϞ$QG tΆzɂlHjnz e-"""Xad͘1cV^&@JJ FYf!++R,kVB0 """'O?_!juV\? /// L8$| N=Tv؁ .ӦM_|aQ)%F#"В30x`%%%Gu?/--̙3*&}1L@bk3 hmm5;SPPɇ䡽 Kz#L\(|2c {5j~_{}a̙35P<7C GiO<&{`&2/6l֭[nP unt_G%9DDDDN5 eeeO￷;@"""O@:,|xǑ.][nڵ-u}VX;۵7moga̋%X\s $I°$IŚWܿd3&RavƛC{7|3֬Y>p #7/:۳#UDsELN(.X\p5yFb׮]ayI&)׺t[o֭? K<~) B˥,R0o8u-7//+ g?}{&S0a]b&2/&g@:DkG ;6l؀#55!C7nD޽ ߿?JJJpW^avD@$Iړs g>bOJvYo"b2n[}߾}[Ni.uuujjkk# %%{oPrMplySǃrTUVZm֡h)L?b,0DlCᡇ~]w\$ mmmA=]t.ϴ477޻uV̙3K.EBBBPiugdf}v{ """dK/u;p!---FL?o:j3EEFg9 ]^z?k֬$~[>@H$|Mw)z-.m6ب{oMM z%F'77W^W^-FK̟?٣G{>c Ox]۾}=zꫯϙ3GvA1zh駟z]-ӷkֲ*.9\%bU\_ze߾^_{[AYÉCX2~cvGG.xהX>}Yg%.B@<̉ٓ;Zqq1~iݻ]vU?cxc"_~'Ngysuٱew"jժy6E`Mv98^k\ cǎœO>s[ .Dnn|ܹgx\r%Xb׳4ixYYY>Nh-<7RUY컂M.]T{m0x瞋qݻѷo_,Z .T@yy9mۆLz8S}7e T% 5 -vk= wlY<)=iMx; Md^LD):u*^yL2mmmx1l0$I$)̴1:Oж5gdf{h7*-)AANOʠ"""X?tRYp׌.]#F0l3'f,'ԃ9ADDD3 d{^˭3zйr6lGANr;3 j9zL&kVw"vƛ<΀ig0ԵZ%ZeZI2Hx; ,7yL@3nYzϑg:e]M<=d0xlnWbKY:UQ]`g2dFp+BDDDd7L@VؾV󉈈9 7@wC9RPv lٲ oga&2`Eyz Q?[ Mx; ,7y!L![%%غiRu{MvYo"󘀐#Mg~ha;xVVmfj(qNga&2 J(E(mgpz"""Xh* Qv^`=\3!"""6 `Q?gErU~n^ɾoga 9v0Nd$j> z8C݌Mx; Md$Vwq &1Yv- ,0Dq قzUpo}ANr ,-)AAN,3<\Ologa Nm,\K ԗK.=7Yo"󘀐-;Z7;rrrAvYo"󘀐J :r@3,|Q,bB/Q$UdE m@ϗkHd(/;>}z}0x; Mdg@ȑ3ff3Ɋ̠ޫĽ`ztxStb&2OB;AǸn <555ζ;1 L)i>""ZqlM]sa4(7sفGDDDDVbBUr 'ǫ^=BU0;{Y """r& dk.;0nZjzmٲ%&,Co?Yo" юZsYUeO}zg,gW]_^Vw"vƛ<΀ '9aTn4KqϜɰ2@x; Md5zr3 j?{/1lϣm:vƛ<& [LR(&DDDDޘ1T6\gp7,"""3SSy+ֻRN6xP-noI0x; Mdg@TJKJrnVSS=<3%G79,7yL@ݝ ׶LSоw֬YAOvYo"횥w|_0ɈQ3:bF)P!]3 D "/DǣK&̜7R__=76Yo"8B,pl&A˴JKJpannPF{w8q]b&23 86#U#??Ոm?]b&2 96;Ј6騪)+л==Dl@x; Mdr@|y+|jYL|˱*ԧL\ΘmWQ]U^UYlkD,Xd/z&b&2 HBII 222\Y&}|&N#%%}m݆;wF uҡwއ[yyxPx}fTp~r0x' !՝f]wx {ׯ.\?}9眃}aܸqׯ!997nD^|q3gaü]~袋PVVٳgwhߩ}FiIICN>d[7m֠v""""#& ~,_4irK.[q~@޽u&pओN–-[:~Qrڭ46>Lրa^ׇ ظqcP;pߏ#99MO7,/(,DaQ"""r<& ~!==|6=38|0Ə/BUJ]=Ctp xSc&2KhnnF.]|'&&*'`֬Y?~}׵&cڵ^ח,Y &m/vcq-ѵwoگIǾr0m<\?ztT.======,YN?t}ٸ{}C9 ~駟޽{ѵkWc=|;v0 ~G 6 ڵkѷo_ґg,RL["""jڏ3 ~;mmm;wrСCXp!rsscΝزe 9;x F:;N)kmv?#G1x?=\7wvލ}bѢExӧ(bv/k 0J^-[c[B7&Yo"ХK԰… fDQȃ}Ixj99"+f+_3Ye"""%L@ւ9d1>SLtQ.Xxr!`vIZU?Wޓ\{ (/.>z{Г}1xH̵l:հ?w[“vƛ<& d{Fum-Y. rrҒ![7݄D~u]@f˵QɞogacB^vf`%"""& d{F0٭@3/AiώYDDDDVc:9\np99A̼cڵ~2](:śvƛ<& d \ESݳ}P4}vMGpƛ,7y!G Ǭz!PIiI * r? g>W{Mvƛ<& dkk2AFf6zO<9~IMAa!J)v1xh\ݫՐ!D};J:. & D~k,3%fI.;D[ODDDhF;J -|K\жaFތfW8a-[`Vw"vƛ<& D~u-wHn^^~ &3[闿%ެYE,7yL@(-)Aǣ~UUYѬ\wCEyIbdfN_'"""HL@UPXZlݴ -8hBNVԉzz &)!"""$& lM韕e8"2)ey%Ukg4[ʒ*|XiiiVw"vƛ<& xFy@}0Qa{e[.3r|&%%Z-'NĪUE,7yL@1hvD0h VAaϵLه矯eSLL?lu(oga̓N1nFMM 7ϭ"""g@-lF?dFNw &DDD\(vP`M(1ZiI}zޫMˆ" ٞ .3x{|Ͻ蟕]Eu5zo*03Ŗ X Yo"H%Ofm[yWJ<|cF0ukf ~ ?ۍ[onP0xO/PoߐgA5fr,ʘ#Lדz[ Yo"󘀐-2Wm[ZRuG}d& Y 9z0^"h48/(,l_g;Bnz:*˙dQaBJ̄Q ~vݎmh߫=u]I Y 9<7=X: 2-u"{W_a/~so̪ M~~>VZeu7(BogacB><zsԂ-N/**>0\"拉^30? "@x; Mdr4Y:pR#GL@NM;3#:9.P1x,Ѡ?sCɅ?3˽abBDDDVaBev. k=z]כǨ]Fm[u< """&L@?ؗwǒ L 99DС3fLdCn(0S90Zfl2 [7$E\Nۖ-[fu(oga̋D`fR223v26k4h@D DDDD3 DǙ-/-)9P໽ O8gjvJѹQ`TD^Q]ݮ]ť[DDD-ADpY XB 60avFK鈥g:&{`&23 DJKJPgT^ C=aT.k^!'D!|+OJvYo"$!tQSSlH"7=PUWܫ!Q'YFdv=[9k-llRACUe^2a]{DTHDDDV`BRPX|v+,ZwR#QzsX60_ \E8g ܼ<:$@>\$J^MLy)ڵk1lذ6fXOY7Yox8B\_[uwZ9evwou_0btFgDVii)(x; Mdr6|>S{L~mw ] ̉(0!GY&efܼ<;#3KVFf&nڄnsŕÇ$% eFIdӟE,7yL@ьfԃe\J%[)yYY?,*Qk;~N:IWHoE&ϊSdѿ0xguMANRNd.2ȗ(,*‰iiz<^d}O9EY$#'.WD^i{9B3yd@x; Mdg@4 zGҒd [7*;]ɳ rtP-Ty80 v;nd$~.A1s& Q0!G=Vq-FC}|K䄢j@kGRR?+KiIQ?G 9ڪk`WDDD)L@TC)˘DA@OMѐϿ.q?TϾ}Q'DZk_u¢.WY:Ζ-[0p@Ax; Mdk@Vz yy^4@c# b6R:|ُBC=sRrV둛SS"/(,:\ ZVw"vƛ<΀#ig:% y]m[\ftHjnxPZRܼ<  rqQ9Dm}FEu5RRpEEԫgLS䔕Y Yo"󘀐;O>O=Ksq>86sNp'TU.o+הq 7=蟕Zǧ]X;]om:vƛ<& Hꁷ6PVўޒWcfB,j2u~>DoB%)(,Ă?R,?k=^M Q8ďCHNNFnn.֬Yc}aҤIٳ'RSSqcÆ c <;kyyCiI rrڋJnmEjnU[[Q 7/kUaQeg{fFW~.2RUYΝй+ ߵk9VEyO-EDDDNL@[O㦛nœ9sЩS'5 }=+K,=܃R޽yyyޓYr hKc3CegwBBhkkC{TmwVrrubZ:u33(;>S0xl2<p\~?vZ./_uaѢEx衇p]w:u̙3# (lvAyYʔ]46bM^'kĤ$BNgj2/PG^N4/mݴINIgUyG9iBdu(oga̓NDb<3ػw/RSSO<~ر{ֽkڵkQ[[u;$$$v1x` [5h1spb R)n"[7(3UغiRuC]JBֆN:!sg\L9GdۭQo+^^Vf˲RR[XT坷׉k"t6l@2d`ƍ Ȇ tB2s֭[1hРwB]"j?H^kyV$t U[147+?GQ~O<~OǃYsfkzlݴ Tv܉t$GS@c#kEo~Qp :N״ẗ:%F,#1) 8ڊí&4ףMM8ڊf!ЩScIJ|<㑜 Ǧw܉;wrґڭZй3zwiOZ^;wz}v!$% Z?c@B\Ĵ44cvyQ801܌.]\OLLT>7dbKI>cu99J GjnJ]E[[K?/GB#G#hjj<ҦzBI:qbZ׮X2uqq+IMOGEu52IIh//+Cd8#3S둕rFy!g`&2K $%%СC>[ZZ;^vɑz76_n7_BmP/ rêϵӯG(R;wۦ MMM>?{3Ϣx0x;Kꎯ{`ԨQ3tPX«{g|n,XF~~Ͽ̜9g@ǃ|lٲs=ӧ{]kjjB~~>֮]u}ɒ%0aOƏߣaFEu5N=l8IRf2`7քcH~͵Cv\oOsX?ثvx-\ߣMs8{L{$.XvGǁ?uC.XOc޽ac=|0.X~)jkk!xҤIXd ]bkcǎE[[Ν\;t.\\%عs'lق#e6cǎŮ]PQQ\믿ѣG&DDDDDN{.ƍwF߾}h"x<,\Pi?ضm2 ;0aK/5kU_r񣼼SN+)S o6 $kw1gOƇ~~EkPָ1x; Md?tR֢UUU1bW Mp 7oك?:A>~:9,0D=(q~!""""aBDDDDD" N'bvƛ<& D*** A0xB#G A0x" E " X.P1x; Md" \.@x; ,7yL@,ԳgO@x; ,7yL@(bQ0!""""fW_}eqO(R֯_mu7(Bogavy&(xBX :fŸꫯn1 HիѧO$%%Y""""hnnƶmpe!--$& DDDDD1,B'""""aBDDDDD" E (p! ##Ś5kmo8W}~zEYHHHb޼y bڵVwѾ;!Iӧ>|$I,Zȧݎ;DZZׯxc=&N:$qgV/$I7N̟?_ Ij&;<*yϋAnݺګ Dbb]$$$xB\H${zFjar'\0`K IĻnݺuB$ꫯ*ƍ'}y_f~' JJJڵ]w}Q򑝝-9wޮ*ѷo_w^>c/6m$."d墱duXb 6HMM>dƍ?`Ϟ=8s|>2dךOgmlyzÆ }fSSn #G<3!!g}S2G]v)'2Ԅz|7x駱zj` 'Om݆A|xτ н{w$%%/FMMm-& CzzuZmmmDAݻVvI:w=zx ?S/^Z?mGӦM'~sI0v/`ٺ3ѥK;sU裏?.%Y`ou]t񹞘|NKO&$$;w}N.]bbEOlقwnf{クkQ[[ŋIIIo1c ̘1=zmxСC1tP cǎřg.m1& KJJ¡C|(Sc&IIIhmm}NKKWd߅~sN\y8|rH`o]vN36"-- 'O6lx[߾}7|Bb\eti6yj.###] SrУG$$$(m|omm޽{bmEO~'\qhll?r)g]s5駟e&k̛7'Om۶a۶mhiiAkk+oߎN=TŘX׿5n݊{]}VtLݻ7z?{׿5/pQg}6n7^mVlܸ҂ѣG~m 8seqqqM8z(P_[n駟ٳg3")) ,܁<5CZ3R w)u_\knnz˗+#N8quyW }W^v#G|ѹsgo{ؽ{ϵV-đ#G׋+V+W*VX!D>}ʕ+Fo{71fm& QkUNB_*;<ѹsg駟Z5{ٳŝw)$I\s={={駟?zg('x⬳9I^PNR7or?ծM :Tt$ݻ[zu"11Qdgg/III/863e!Imcƌ\r5k7o={8p۾."o{>|+ţ>*Ν+N*ʼn'(l٢c$ ӧt(rrrlfӧ$IH$D\\ەv7o]vHII't馛tF!͛'(t"'}Yv wHKK)))bᢦFڵk/D^ɓUbwIDATŁAjyecҥKň#)"D=ĨQĚ5k|2s̙3G=zѻwoQXX(5$!4Ԉ:Љ(bQ0!""""aBDDDDD" E """""& DDDDD1L@(b%*++O>Q1!"_~qqqpwyfͲW /E~&IR{CDDVcBDdSє>/"477 .|2L@l,3 BY$sΜ!"r& DD6#-܂^xB)dG3}:=vҥ ʳw܁o ˜1cUVᮻѣGq]w}YL<]v<իa_~eL8{.x ܹ>,>3lذݻwWڶ.Cnn.z)xꩧзo_q_=.Rvm/?q=6M-,\PH$jjjB}B$v~$I,]ի$I^SviB${<_.umРAb>m?#!I㏅BO>YyСCJB$1sL7,$I>39眣>eq 'G%XDD믣{KP__FJJ >#/0btE~B}}=.B|ؿ/gu]ۻ8/0jC%CX"G6/ tfĠhP!غ ZJ[D씌Pح!4upn/ov{|VkxxX}}}JR ktq9-..v]rYsss;7x 1|^RINR]4fc}YkkkJ%:thGu I=^ool]_kk>\gU,kp8>ʕ+АFGGzwT`@/9N{k6YXXХKtqb1uuuj*J)5\ ߖRfr>}t:t:D"=S޶[LFgΜсjYU*}QL&:6:z$i~~^uc_|bSZU8";W{w@`lؘ~O6GfL&$՝tJ%%aӧt:U*Z:^Z7;fyya͉'$I߿r=`qԩS$IwАL&Ο?[nijjJ\N/_bQ>W2˗/wo+ժݼySrYo߾ׯ_㚜Tww\.W[ fEQݸqC.\P зo y<ݻwn~Z7B*x:::T(+#O~ܹ׾$Ix\Çe6x u٦ӣd2Grݺ}9P(T77P(Z]]`-l:x={M׮]S4U{{{]]j 533ׯ_keeEn[zv~Nhn/$`@0!0 a C`@0!0 a~С*uNQIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_mc_c2_10.png000066400000000000000000000413571307543307100301710ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxytU: $-Ha$D$H  0QQ`@Fe#i\ʰрs*j$$dED6Y$&t6߯s8ԭzju1F`+9 !k !k !\.2\.K}q{)%%Euԑ'|Rib:2\0*--M-[TTT.o~\..]jw297|c1s ~wq֭[fϞm1z2DGGΝ; &::߿ܸߌ8fffqOk.s駛MٳgySO=մl2c^z%8`/^lnFeƈ1۷/׾{nkbbbLݺu* ;ƷiӦpw%@@8`իgt*xoa1+W wWۇ ׯ/7o߿ߴm֤>}צvڦ]v_~ h_LbbSWשSnj=Xt5|$===]^z>Rvr-A333Mvv1Ƙ>ٳ'}֭qƦ{G ޽;d 01fڵkپ}1Ƙg}ҿӼysk.ŋqի6oljԨa&M=z-[qmܸѸn3mڴ׷kt)ߍ27nN6Ɵ'8ٰaC@eL͚5M:uڎdN A9Gٲeq}UM7d5jd֭kldk576j2۷7=Xi>C]vv&..Μwyf` tQQ;M||]իMV6}}7l5jdbccСCMAAAj~LMlliР2d_s5qm<&==ݴmDGGSN9tݼq|]EWzr;0 VZe˖&--)(L2ԨQ#Gcf͚e17o>f?~q'䑕7|8c&L|7nhnիgN93yd~x>oѐ`eV͚5kLRR1:t0k׮5rJӾ}{я>(Uws$S~}k.B{sh]Qo-`M6mLZL֭ʹiK׭[gtbM6mO>ԪU˜vio7x\񘸸6|ԪU '۷o7'O^m۶5?j}f7oiӦ26l=5n=g̡믿6\siР_k޽{9]?ٳ:* G2/nذĘ-Z{g:u ҥ$?V͏x_i . h^VZ?O#FN}ݧ,=Cھ}'|RcǎU׮]?Y/諯UW]믿^W_}~ u 7YfiĈ/#wܩ%K+믿jɒ%۷ձcG5nX_aÆiذas9'J'xBÇה)Sj֬Y/u_ckՒ%K4zhuYڵ yc4x`;v=\Ք)S?hܹjܸ|I͘1C{ѬY$IguVi[ھ}n喣Fয়~9x?믿:,m޼YVҾ}TF 'NTƍIz5i$խ[WӧO$ww^S[luꩧmݦ-[h޼yo &VZ_z#FM6hjܸ ?Pמ^߅΋?zꥨ(M6MkŋUfcz]ɧ~BwykԨs=W}G}:uꔛK3/O>رc˽_.]zjٳG}xhBqk˕K/0X_}U]qݻƍ'I;CoQ^x駟`S999Yӧ뫯?5jڷoneee)##C[7xC+VɓUfM=ׯվ}<=z'׫={h޽>r :9# s\`թS̜9|ᇕ PڕW^YȘ1cLͶmƽM { b:tP·G᧟~2n 6,`+`u'`[nŸn믿V{iڴp1|'&**\s5a=,VpzӱcG3hР Gԯ_׿'4QQQwηٳa睲eYi߾ݻw=r .ڱcq :l|/Ҁq'|VNC=.˼aWG] q믿Vィ8pҴiS3f)esxSL1]/DGG!k1Ƙ8cfΜ0|r<={v]a1>qǼ 77|Ӹ\.swvܫڸ վyGB-[sSvmv/oC ʝk[tXes{c-jԨQ}ZntYٳg@U]0I Sm6ӰaCr_[Ç7 pgϞ=qU8 Q/s4`GtraKe[wjyGLz޽{5\pX,'O6 4J#~6ss1W\qq 0 `)))u|S;-RvܵkiР?~|~gӠArXT w k͚5]uU2˗SNZzOΝ;sڸqcsM7mѪU4h _~ӧv鿻W\\{^SQQ&N0|ҤI!_{ӽ{wiӦM!_emذAGV ;tK.^ʊg}J߳gSN9EO=ӳ>DyNU:2wܠLiiiU}TVrã®]$)X||k/桪~Ԯ];uwrr$wjѢE\SVr>xX۶mӁԹs W_e4u뭷JRI۷8ըQ#y晇^.N[e/|}}LJ'BW\6mv/..?A)))7nQagգG5h `"O)R40aBݻw֭[{*VZU~|*3/UJJJ8<\ua`eי摌{$vsSO=%IZ| r2(>vޭիWf͚i֭gtwW+**o|u^?|uw˖-5d+!W_}U;wԨQY˥dvp V~ /c3j(5Jwֻᆱ\˗/נAg]YIҦMrʝrg]PP;wjZ`A8|IԩSf%''m۶ӧ ڶm0<...ieeoo}3<\YgW^yE w߭!C3g~骫R*qo;PW_}7=mqшoVn߿_;vִiӠ~|A$]vqr?~zmڴ0Ny~X^JMN;>W_O?2^zi.* &7m͊N gj]XzˎWzZ摌{]W\q̙nIYYYtY}&NgyFWէO1B}c~i-[,`ts?s4wܠ-ݶm~v#-[H5kO?t)qB޳~jڴa'y8:׎f{Ե^Cjԩjܸ\.f͚G^@)>`=ڎ2(w>xJװagW^ڕ: 1ӧO#3e7Bj*** x.To:AJ۲eKz0>>^zC̆ VZ!Yz_-[[nGT_nMƍSF]Se4ǣ?X^~eW_\4c q3f.5lP覛n*wB:>#3334k>œXΝtRO!iժ_/x<[ Cj׮#FhĈ:p 3fhڴiXKC:g[[n-h4ߑi=z٣=z(==n:M2E7|s 1۶m 6T36lX#d=Z=a+SNz׵k׮ׯ${!_ۯ_#z`Ah"Aj[N6m*wڈ$}_bn?J(W\Z*`w[ֿˀbgܹ]4٪U+kڽ{w@8-sUyݻ+..NO=MV'ꫯڵk3 /{y<իWO~"ڵRxe\YqqqAmڴѶ#]8Z.ņrgve]?֨Q:u%K(77׿/_g\.uA^[~G}y.D?Te˖ ohĉ!,ԨQCeĉ`qjӦV\/X- x+u#l/|G<1]nk@NpSVVV6߹$=Cx?IV^n:Oغuk@[5+Pwiݻnϟ0B*ujҥڹsg}իW?#Uf+:"e1B^xfϞt#F~(2~vTTT oPn*VӦMuȔ)Sk۶mm۶mӄ )S{#<?,I߿XlllO:*GEE -=*Svemѵ`wܲ;o<\bbb4uTjԩA ؀4iy=裺K+^.K^z'FرRO.xIHHлn͛7W߅#ѷo_eeeiÆ a۶mӲeˎw >'Ԟ={4|p!CFzGÌ1?-Z~ve ]6`۷Yg ? Eu*==5?,e];?swJ.wg zX s^xA} 9O̙3UXXX=Lq8r,Y$Ee/={ .Pnԯ_?hB;v?zKCUǎCcǎ裏jΝ:k)//ܸw֮]]jܸqJLLԶm^GJIIQ&MGyD yƍkɚ3g }jÆ zըQc2{l_ƌ=e\\\N^׫W/%%%aÆzjժ //hРAZ|y@[ǎաC]uUzg4a]V)))***ƍjk?z țo?rRPP{{$ӿI@H IDAT899YÇmݦ|%$$hҥQm۶ZtJuAcƌQ֭jɒ%ڶmzꩠy(++tYk֬Ѽy6m/^<*4H=?o`o>`'&&Fڵӊ+tg(..N:tzs9G\s.\;vGO|l2%$$|U]8OKKSff.M4Ik֒%KԪU+m߾R!o'O<_76bƌJIIQϞ=5n8m޼YsU߾}Naj޼n&͞=[ym^|y@&NEi_*ۭsiӦEnWߧO9R}y7#ie#Y3fo߮/X͛7צMSN0:p@}ݺtO?զMrzuշo_x\.u]!_Sn]͟?_W]u4j(5jH}{_8 n qm߂Z~8n[XXh/^ljZnmMllܹ3gN[y~3ydӨQ#SN3dy样77p9SM͚5M||Kŋ,\4jDGGO?L:5vnXTTd/bc5jd&NXeovZrB>̬4j׮mׯo R U63f0]v5qqq'xϚ5+碋. 9/8`^9Mttiذҥ{{HOOxo_Øʔ)SL||6]v x駟+4kԬY4k\yAA7xc[;~gϞvDXvlݺu[,;S ߪ~f/ӝ;w6/=z93++˜wyVZӸ;ט ߃k֬iZjeO^iڡj袋Bަ4߃7onj֬i<̠봋.R-mժUo߾SN15j0͚53Çѣ岟senwߙk4nDGGmۚI&<0zt[Mz8ݻʹi駟njժe<޽;w^oCS\ߔjeܹE&::\x?,7TwHŏ?DGG-[3fz8c[GNcz-sӤI3i$-K+../˵j2:txbi7o6Ç7?mK{MNLtt9Sw{1|Fm֭2`EkҤA_oi֬] }ߡ~C-s:|ٲe", jYxM~L LLL9u]W b1a(c5lP3fm[K~n&-ZHw_8\.p NAljk@`MW袋,p2) ['T Ik@`O?N[o~Z}N`zꥳ:K?,Yݻwow!رjԨ!׫_UM6M708"؀rJ-\PsP5Gk@X5 !k !k !k !k !k !k !k q8N c݅pwÚ\RwnMݑ !nXGݑ# uG,Z7k@XC` 5@XC` 5 By(EJNn'7M'"@+%efJJr$+''[֍TV BZ,Sgn:>n˛4o:q@0Α5DkגvQaa(U@A0r$%Tvևh]_@A0zӔ0MR⒡Œ0]^oZ:qmx <V<2ax1; N` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5pw憻 V@ #A$םnc w'p8* (33S5JMMA #A$׍C9%&&F=,Y;PwdԺQu\k !k !k^AAҼQaa"%'כ&~\~~RRF)/o$$GRrrnHee )X'Sgn:>yݔ7Ciiu(pΑ5Dkגv@8FБ\%ps$%pKNn'i}%pzӔ0MR⒡Œ0]^oZ:mxNrGYY+Jrop ^X ՀQFpw8,N` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XwP^nnn`^ Mݑ;DrIIII1Ƙpw8.l>233nXTMݑ;Dr8:PbbbDڣBݑ# uGHUE!AWPP4sTX%H{j-??_))7SW#X99ZnVB,,TkS. t0|Hgn˛4o: ֲs$u ڵ@PFБ\%j.dBvևh]_[ ּ4%$L%dh,%$LכD nËj(+kEs@-n `՞QFpw,@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC`;@yUz;2P7uGHu'%%'5c 8N |t8rTbbbaMnnRSS;BP7uGHu@N@yh# uG,Y"nTk !k !k !k !KAAҼQaa"%'כ&8@_~~RRF)/o$$GRrrnHee 8*N]>`n.tS^ y9egHkI;TFБ\%PuvI2!ZK /9!Zח@@כi$ -z9~GYY+Jrop ^Gx<edw7TSk !k !k !k !w;rss|RwdnMݑ NJJ w7Nj1Ƅ8qpw`ppwÚ\RwnMݑ !#uG,Y;Djݨ:.B` 5@XC` 5@XC` OB2 Uvv v)94yr"@)nw$TJINn'i}% Pכi$ -z9n x<ee(yȽe-x8Z((#cv@)X!k !k !k !k !k !k q(/777]W/uGH@ "pwcL;C wP6G@N@JLL w7Ujj*uGH@ "n (111"QwdBݑ#K֍"t@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC`;y(EJNn'7M'݃ &2Jyy3%y%9uF*+k!)XN]>`nvS^ y9@P-dgHkI;j0J|*iG@P-ELvBrr;IC/iG@P-xiJH&)KRqbIYJH.7-|@x9 y=Q@Pmx<edw7PN` 5@XC` 5@XC` 5ָ.X嫗#uSw$n\wRRRqRs1&ܝ!ㄻ G# 'L%&&*55#uSw$n\7;PwdBݑ%RFq:k !k !k !k !w;WPP4sTX%H{$BP|R^LI^IbdkݺZA)X*4uMÇtpMyy3 _IB9hZP9*,ҡ#eJ*Bnw$r *NK*B^oIʒT\2XRM _IQV֊[9 ܂x<ȘnjSXC` 5@XC` 5@XC` 5@XC` 5@XC`;@yUz;2P7uGHu'%%'5c 8N |t8rTbbbaMnnRSS;BP7uGHu@N@yh# uG,Y"nTk !k !k !k !k !k !k q (-ͫF.Rrr;yix<c&??_))7SW#X99ZnVBjS@L:$|t!<馼JKs I]Cv-iP@@FБ\%H Z\:!INn'i}%7M $eI*.Z,)K s n (+kEs@-n TGVG p k !k 6'pw*_#uSw$亓ݍc1q']@|>:9eff*111ݰ&77W!#uSw$qt 'Ĉr#R"I&DkqI;P1*%9!Zח.X'pw~ZVm<[/DwI*ZԻۻc&0 ÿ6tTt7#An1\M\q*]":S`):SH/{qn[`-rknz fC8VՓT4|=9@X,Fv3a-#@bh=bw[nmiu7· F1 @b#@ F1/V6\:=}Z}릾A 0mx񲮯fUPWWZ/&!aջ}|ZUӇ9Cpz>~ܟ0D}UOj]''oW]70Bu^_OrQ]8XF꺮޿75G F1 @b#@ F1 @b#@ F1 @| _v+Dkw춻v݂w/˩qfn7%6x  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bU9IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_mc_cpu_time.png000066400000000000000000001305561307543307100311720ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATx{\T?A[h,5 fjj%dIKTrLJX',S3S13JN% *M%E`3sff=~zU{gƽ}QDDDDDD  """""2  DDDDDd.@0\a!"""""pBDDDDD  """""2  DDDDDd.@0\a!"""""pBDDDDD  """""2  DDDDDd.@0\a!"""""pBDDDDD  """""2  DDDDDd.@0\a!"""""pBDDDDD  """""2  DDDDDd.@0\QYfz(~xbtGHH-Z!ڵC= +W"$$V P\dee!$$;vs --͏##"#qBdbx&Mnݺhݺ5_~NCBBS7ooNm틁oQ'_ZO$EԟY<"""0edeec?i =ܣnǎv8!+Vazq֭W_2``}cP' "̞=f͂}ѨQ#Oعs'><طoS(\p† }v߿ .ti{;]w ѬY3MƍnٲebԩkbhҤ^z uAEEE@O֌:~n h޼9ro&\}B`2됕:VZt)ZuKx TTT`وEѩS'KvK.E׮]6m ++Kdx޽9r$Zlu"&&<k1|t 4@&M0`[.?) +˗/wkܹs7nj|UU^x 5BÆ ѻwo nNb~WKrJ馛froΝNmsssq7.CѥKosdГӧ뮻pB`;]x1RRR۾[,6mڄ{aÆ^Yf .DDD %%ؽ{7x1O<ϟ͛FÆ '͛e9+rx8y$ ƍ;nݺ!33fBv퐚WCll,x70b|.wƍaX0a޽+Wz ƠA0n88p.~8p "S馛(bŊUElߺuPEG !ؾ}PEx㍪BQѾ}{M?rPEo?Y8P("z-N:?pѸqcѡCq Ǿ'Of͚͛ Ç0ѱcGBm6*nvM̛7O(" &*++Ѯ];(O\rq7dff:漨H;ٳG("͛'***INNPEC={ֱٳgϞBQ(PE7NTUU9x׽wUVNco.]`nudFLLۿOKKCFe}lذN_Wti>^3ӧOG-CCCpBAQ,\:h׮O-)) mڴqy؆ݨQp 78m5ʩ/RЉ^Et _[( 6m{]wS={tn\Hv[;v̱ڳg{u_PYYÇ{9}4{\qno_xKƍ>9r$x 6 -[DEEۘLe q;֎;M6BwZШ)++×_~͛gu&<<ڗ^Wʕ+_ɓtsw/ [sk… xf.@<mۆ'OK.xЧO@Ln۱m6;oDZl?aw~ªvb4iEQp)M7z~' ;~zc4i~ .7yWTT6?ݻ~ZϞ=cǎCǎ5/Xx1vO> 4pܐ,6ߏ#116mrZ !yc۟~w+..v{Zy= ~TQQc8uyX,MזIKKCXXy\65SNǷ~~mLjOЩ~o믇ѰըQ#رc2.=>(Ǐcر^OwJl`Ν=VO۰aC\s5߆^z3f MB ))eq1e'6Vƽ{ܹsd?֮]\9s_|K uB|nu1o^U7Dtqď"""0c Ǎ))):"_mYYY(//ǰaÐݦM0dSn]5 .\@FFcǎg(NiӦO<aaaHOOw}粿I;cǎNbΜ9PoRu|֭[|PXwܼx{1_06SLAyy{*x3w\\qx1m4'%%%_gΜq㤞˪ߢ_~I4gĈhҤ ^u8piܹs·}|su<SNBwEFF?(,}wpWz(dr?8***0k, }E=аaCعs'P b߾}xWg <7FQQ6l؀gGuzʌ' 6D>}k.}ر#BCC1b7}W__~cǎ5\!Ccǎp=]v!** ԩSi&lذ[QVVz 6m\55j6l؀7|\s FEQ~zj>:u֭[c͚5 st ZTO5?O=}Err2ZlO>coYzL6 O?40rHDDD`ӦMop 7 _ <k֬jEnjl;ED12ѻwogq!8Ѹqc.Zj%*^~eē3gΈy^zƍ0-VشiS[X,)BBBDHH}j4hSSS]_`%BBB\9 _}HMMm۶uk׮۷oלϹsļyD\\_hܸĚ5kܶ{ZrwTUUK={ѠAѳgOtR}yz7}߾}oM4qo͟ƍE-Dxx]w1c8|+//+VCю\{_S2O+RԫWOĈɓ'_x{Bkϻ~'NڵW^yx'EYYc\M6}ѴiSqmÇaÆ EQ޳cfѿѨQ#Q^='͛'Ο?ga;/KDEEP wgiNP_ۅ piӦx="""Jt>=YxH5gϞEff& /!!!Xj۶ϟǣ>VZ!""}~Ү GFhhj_DDDv)G !0w\?ѥTSRR9sm۶HHHdT_Bzz::vW^yCѯ_?G㧟~͛ {WQM{AJJ nmgΜ~/111 K)//ɓ'ѢE W^Xr%ƌ>C>}`L28hw`{LQ~}|H!""#G`ؽ{7JJJPQQ6m`x'мy@.p\=֮]:uwl[.^<8~8Znmz|4QڵkիWzDD9*(y*1DDDDD~bDGGlo;qObh׮ׯkDDDD$ߟ#G[nAf=S'֭벽^zؼy3n]c#""""[z5׿zׯϻl?wc/ڵkVН;wy|2rH]tӗ/Zc~#K6֚֚:֚֚:֚ڡCpw;ۨAttˬZ_¥s޽ 0-Xz%Vkvxo|ZZSZZSZZ| gBoN8^z v}xt)֚5kG駟Fƍk}b,[ Ǐw{Ik֬vjc˗X1Zyki֭[1j(F515u515u515An۷O("VZo޽BQ`ǶsΉ+R\>3??_QQQbǾdn:7oť'˗mXDII3g;m+**E:tiŋԩS={VX,k.999"55el#xX,EB\q1aX.<8bfÎyW">>^ 0@.mH8y$N8^xC=f#%%֭Czz:bccj*߿۶mC}:vAAz|~LaZ;zt `QXkd԰pB̜9/Eu0sLdffɓv*ykxQYY7Xz%Vkvx?|pMF515u515u515҇ ~GTUU twLL]ݺuOĉ?駟"111#cǚXz%VkvxڿqFMF515u515u515҇7tW6nӗ/Zc~#K6֚֚:֚֚:ׂ֚֚BoBM̃y0<`oB7DDDDx!"""""pBҬX”ӗ/Zc~#K6֚֚:֚֚:֚ISPP`c˗X1Zyki%kMn kMkMn kMkMnk= A7o@СCaZؖ;۲e VKI\6,((juyNff&=zVNۗ,Y meeeZsڞ41<`̃y1$$$$ ==e "\Q7o@0\44ñK-&7&7&7ߵFfeeezdS\\e˖a񈎎pj-22;|69_ưԱưԱ~ xH5DDDDk ħ`1<`̃yW| <$pEMDDDx!ij Y/_bhi筍FΗl515u515u515҇ %cf:|69_ưԱưԱH^DQp~3 IDAT  """""2  AȬ|m?7|ԨQHKKi#--M|G\\ӶypGZZ):{5sg={GZx}z5HKK3E]Քni?󈉉G~jϫ q1p@?wGLLK[ѧOiy=ZjbС^`|DF~~ =Xz%Vkvxo|ZZSZZSZZ3Z0S@DDDx/""""""pBDDDDDyY/_bhi筍FΗl515u515u515)7&bc˗X1Zyki%kMn kMkMn kMkMn?kk7TVVKO_j[O/XkrcXkXkrcXkXkrcYkf?_ 1C_K-߬H515u515u515҇ dV2<`̃y_D(/ "J(|M?~B[KO_j[O/XkrcXkXkrcXkXkrc]k $MLL)/_bhi筍FΗl515u515u515҇`~GDDDx!"""""pBDDDDDx<KO_j[O/XkrcXkXkrcXkXkrc]kS _NbXz%Vkvxo|ZZSZZSZZ3Z0$Ly,=}5FK;om<7rdcɍacɍacɍg|-)XAOU """ n<_ӏa BCjEnnc[JJ ֯_n˖-Z.&MŠ+ji{ff&=zV%K VyyyNsss26<`̃y03摔Z 5`?fp<|69_ưԱưԱ~ ISVVfc˗X1Zyki%kMn kMkMn kMkMnkMA757o@0\a!ij>,ӗ/Zc~#K6֚֚:֚֚:֚I3vXSKO_j[O/XkrcXkXkrcXkXkrc]kOhVVVVA6XlƏ@֮j-Xz%Vkvxo|ZZSZZSZZ3Z0S@DDDx/""""""pBDDDDDYb)/_bhi筍FΗl515u515u515҇ ӗ/Zc~#K6֚֚:֚֚:֚ÛЃoj"""" n<_ӏ߀a!"""""p Պ\Ƕ_ީݖ-[`Z]'MrTAAV+JKKgff";;iѣGaZQXX}ɒ%pVVVՊE,ӗ/Zc~#K6֚֚:֚֚:֚ISf:|69_ưԱưԱHބDxSQp~  """""2  $MZZ)/_bhi筍FΗl515u515u515҇ &))ɔӗ/Zc~#K6֚֚:֚֚:SO?!Z#} §*iTV?<$0lk""""}z5 ?="2.@H'mJO^.<##Ϟyt5kVWyyy<|69_ưԱư} ^ \}=ۇ C,F: ׋wyGyb֬Y "??ߠeXLy,=}5FK;om<7rdcɍacɍa Z;xPAHN13Z~ xA&L-["33Soj*++CDD鎥/_bhi筍FΗl515u515uAYkeeܹ@۶? x2ԥXkf?_ u=x/Xz%Vkvxo?֚֚:֚֚mOzQ^=3c]k DDDDds(o;l:v "ÛЉ.u.O? t \|_pRٳg!C/GHHVZ裏UV@>}z_Q ;hdddXz%Vkvxo|ZZSZZSZ۵ xqB 9prH5%%%3g>ꋆTrzꅕ+Wb̘1N>3 ,)SؾC-!YYY={S>>U PU,_<Kk5XiՄEO벵kעN:֭{{۳PUU}Я0~<`. j 6tޫW/_|aw4cr%мyGF .@|P\\hm'N0zHAДӗ/Zc~#K6֚֚:֚֚:]୷NeˀB5>$Tkt {؃ؾ}(bժU.:t Et|@DEE O>}ĺuo޼YX,~&N(/_ҷb%%%NgΜ)ϟﴭHX,q!/SNuvYaXĮ]ƒ#RSS]Ɩ,%$iyX,jaXLQW5%''={:mgQQQ4򈏏uZ>NtL\yW0GRRj)׀%K9s &EQw!̙#̙#N:h,Ĵiċ/(+]nު _SX1KO_j[O/XkrcXkXkrcXk|=B$$(BL oX~ˬf`P' `pBEuoCQ37꫘1c^{5ƍѿ@?Ly,=}5FK;om<7rdcɍacɍa xqॗn݀O?zϱؗkMA75*!W_22灹sm7zd{@7@a!\|)qx:`̃y0<&MK> $$?Ka=saa"ބ./ "fJ͚53ݱK-&7&77lzg'iӀuseZ3Z07 $رcMy,=}5FK;om<7rdcɍacɍas# vХ3,>\\kS`EՙnF[K-߬u&kMv kMkMn kM]~~ SBԯ/DB]+DU}~ x VWzDDD; o~5 KdA.  AOb̃y0<.<ˁƖ x /ZsQCC| D._ܔӗ/Zc~#K6֚֚:֚}_/ =/515~BXz%Vkvxo|ZZSZsڙ3w;};r%м9kMrkMA75]6lHݩS@|5 =j{mqqwz<tIH g:w֮{!## 8.@<`̃y8ݻۡҦMƍPs偋d>$`ITbc˗X1Zyki%kMn kMkMnE_kBwVz Q?YkrcYkf?_ YYYY^cٲe?~<=ZDll鎥/_bhi筍FΗl515u51m *`> <<к.XkrcYkf?_ | VSL!``஻lo1o2У"?~ʀ''[_H:>0y2pm@ziS$r,=}5FK;om<7rdcɍacɍ1}?/a@l,W@fkMnk`3KO_j[O/XkrcXkXkrcL[kt[W]%515)Џ?-**JX,ؗ,֭[~n7qD|r-())q>sL1|mEEEbC9m_x:uӶg "v=''Gy0<0U{ ѭ"/Nl<1|0D/ ħ`>U(H =&"""0e hټs@Lk,"""tTVKu+j};D. ۞j > (JGFtI$ :V )))X~S-[jO4 +VpVPPՊR홙vvQXV:m_d 222j"//yyynoޒƍ呗Gu^kyyy޷Q3g-ycG߿ߏj摗g)%%s஻`gw˖_r7wiߏGyDZ9hϣCjҥK?$$$$ ==%G ݬotP3KO_j[O/XkrcXkXkrc *!zKVg(/4V~ xz1MMeee0!2/_bhi筍FΗl515u51?.ۀEc ׂ֚֚/"i,ӗ/Zc~#K6֚֚:֚VUXa{; #) ص Ux kMn?H.@Hy,=}5FK;om<7rdcɍacɍZk|c{}Æ>1 kMn?H>+ DDD^s 7Q%k&t"""2߷=Zvi@ݺ DDD܎yX<ز1У""BI J<|69_ưԱԺ*+ŋΝm7pbkc]4XDTTX,"''DZ/99Y[Ω͛bqgĉb.}[,QRR}̙bNۊbrھxb1uTmgϞEڵi,999"55elHJJbqʣ:oyT<,)Xm5.bΞG3Ν;K|xˣf.Zx}z5X,EϞ=3(iyxoy:-WSNu:Zݻwo=z(BL oGTTK['-_U<|^Y,ѷo_yxsf.">>^ 0@.6\Ĭ]TTdc˗X1Zyki%kMn kMkMnZ+!&O-+ DDtv̞ <PRp~lHN8x2 DDDSO\|5an]Ը!iMy,=}5FK;om<7rdcɍacɍqjkЭ0c0y[fc|lcz v\4eee<|69_ưԱƔر@@A3@Æbױt1s=;ބDxS]VNc|`8 J5[ODDDu 0h sAto>ǟO> $$WQQ $Mii)/_bhi筍FΗl515u51| O<8xgױ|lH.@HcǚXz%Vkvxo|ZZSZ! %V];૯,^=֚515)/bq<|6΄`Ɏac"B%KhXͅx5!j7k\Ǻ?~  §*)n*߿吏6 k,"""<?| \|Gu="""2!z8y~ Ȉ Ib SKO_j[O/XkrcXkXkn9  <MjZ|ԱH.@СCaZؖ;۲e VKI\~i `Ý IDATZ])lmGjEaa%K ##i[YYV+PPP؞4c(((pʣ:oyTYk޷<8mwyQc4򨙳<1zjy̝;G>jQPP`)%%k׮u<Ν+-O-իWϣMG.LNFv߾@۶>222ƥo}_ו;wK[rJiy=s:-WV<9Xs7)) HOOwɑj7DDDA)/x~5 h0У" o@Ƚ_AS.⃈tMDDDL׀ KBC=2""""CnYYYYcٲe?~<=ZDll鎥/_bhi筍FΗl515uLm |"GBW_-x5uL Z3Z0S@DD:~&koqUQP~RSQ,Zt :u+Dd.@.%}cw(JGFD.@Ho5˱K-&7'>}lO?OtEUk~ Z#}!irssMy,=}5FK;om<7rdcɍa(jM%V:W=gwoi`wQԚRkoB":|GmѺuGEdj<_ӏ߀]lΝ23k~x}7 P' """l}q(OzTDDbP\ y'p-@69\|QIKK3K-&7VY ?xUkgZ&/3`ذahذ!:uꄏ>(C򛤤$SKO_j[O/XkrcXkꂾxA`(MGL(k}H>ϒѤI,Y[nEZZ;4mԥ-@DD:Ln{ǵ/`{M~tlذ?#իł]bÆ HMM l=Gӧ m~Ddˏ;4lZrlڵ+L`~@߾C@z:Dd:\љ3gиqcm7ƙ3g4"3K-&7.(jy`l .;`F_=骶}֚52sN@\~N&O,222ܶD~~ÓbXz%Vkvxo|ZZSZC!J:uxq!Ξ/=ZSZ @_f5.@9s挘9s[DӦM(bʕn۞;wNL6MDGG뮻NlݺթӧExx8~cU4{AcKO_j[O/XkrcXkVkBu׾gcXk&7Ɵf`K)))9spa$$$Eq655=Fŋ#44Cݻm6l#F 33Νûヒ#F0$EDDXz%Vkvxo|ZZSgxUV?o{ǖ-ʕ\SO15u\Z#}xZ5ZO?-Z ??zr>o `ʔ)ѣG#..ӦMsZ,]s"##ѦM書 ɇLρ> >`| 22У""߀T-Zף]uVn]{سg?ެY3{8{, qM7/""2?=VgO ^z"hq?W]u6l_|a\FF)/_bhi筍FΗl515u~ڵ@K/!_?]̇krc]k >(..Fttv'N=cc˗X1Zyki%kMn kMС_:;¤tZ3~ɍwN >X۷O("VZ岯Cbذa.ۿ{(XhOǴ?U!**JX,#֭[~n7qD|r-())q>sL1|mEEEbC9m_x:uӶg "v=''G-99y0<.<Ν3oQ̯SG!6l0g"<䑓8k׮ StRp%lݻ7V\1c8틋Ctt4nË/qѣѽ{w]'" 7O̜ 4hQQ-|M?^hY=M/17n,s ;"dqnݺoӧݻXz%Vkvxo|ZZSkUUewzbs''Xb?H@_<w^(X`c۹sĕW^)zY>3\kY},f4))IZkF[kE|GllӶyTfuU=g;wG\a6V#**G>jaXLQW5%''={:mӜǗ_]%F Q-MԩSG}ܵwוri<˟+N{/ytEZ)&M#G:my4.׋nUyyĉw "pEfϊ,kY1byp hРgϞŶm۰dDDD̙3͔l=HKX DG=+":R ߵA6l }83""Sn|'iӀ&M̞QHS\Bխ[73`dddr,-}6FM@m7xZRvp=o:.ؽx֚ܘZbɍѻHK-@(++ömbPbbb~zv[lRc!qP#咓Pyyy^.\DmP999p3331nܸjsǎ;v,PsVVu<ǢEUͣpݶcҥw<Q5g5y:Gjj߿6P`푳y3|9W=k׮ڦgR~]9XjUPy5/_yA畯<*۲e RSS+˗K#߃y:5W`{ntt4"""P-GK݄^駟>!۷ڷo۷sfNSDDݻXρべs-̞״7 o[k׮bӦM(--Err3$"":yHL~c #""Y&:.׭[nݺaڴi8+fMjF5 xqaCgEDD7 ӧޏaÆUoժ=jj~ v@Q݁\ " K/@z聕+WرcX|9 1bĈD˖-M!UVӍgvKK_ĪQ.P<^ԉZॗ<>|xK5uZS'jM'51zib$|i߾=^|E̙36l3pLݻ㮻2yr ==hӦө-Z@ci+X1jjoK6֚ڗ_YYWЂ&7#֚=kkV``@nn.n݊͛#&&7?~3g-܂!Cࡇ?xEukgEDD񟓈|NO?Īغxu.> .@HmL5%kMn鵖 <B DD" !()v^}r}_#66]vE #૯2yTuvKK_ĪQ.P<^ZkB gn݀t` P57s7֚k4+7o.?|-ضm[1~xg(2{*Aq:KK_ĪQ.P<^Vk1bpB8BX kMn ?|cɍѳ~f o޽{矣^zhժ}\~k֬MvKK_ĪQ.P<^Hg=7Ϝ hy~睶σ&7kYkv?_K_cĉhժU;t耟Y/F~KK_ĪQ.PK`ɎZk;v}xpC޽`Ɏo51zicHYY9 ѨQ#gDDD5:v xA 2v| Ҵ3#""wؼys^HGDD?//`bO޽͞Y O={=(G4k +W͜"UҡC[`bƨiF/Xkrcj]k%%@Zо=~ \tyXkMn ?|cɍѻH#åFQQXnHKK=Xf8qӒn[NS^bߝw)ggg8tj};NqQIIIbΜ9^ھ`1em'ONS|'^W^-Ǝ[mñy0e]ѠX}mḅ[ l,Z\rٳ""ig{@bcc2BDT7= ̛t\[o7rADDSO'NꫯƘ1cо}{Uy.~&̎>; IDAT rsGf65{VDDTYCaǎ)S &&#G;̞&)--͖ci+X1jjoK6֚Ƙ= F̟wZX ڱ5Vico@~nL6 ^{-;;;y\\XtiN8z$1gmt}ym_`2e׶'O )>Wcǎ67<̃y0:GTTի4h Y1u#Zټxaxi 1hYi<_R/"ԩ[4hРkZ#ow8L-I{ x- * غYb` <AUlSy;YCFF-W0jcԴ ~#l![k@n@N dg\|ִ Z)kMn޵FXj|r;ǎ@?˖-3yTvr,-}6FM@m7x /I@^p]`e<֚o!Yk\3kMn޵FXzaժU{̞xM!Us0chmK=+"5,uI`:G~QDDdo#pȑ5? \Yٳ@Zн;{76С3#""ƒ ѣG^z~̞.IQ[`bƨiF/d})Ч0}:0q[[o4֚vuteiZw6a))))fO3g"** Æ C߾}\{>|Ӗ鈍E6m̞Nh;wXZ &VmvoNڱc{;K.6nhP < []""KvNۿ:3z;= "QJJ<~x=7~ODD! fKK_ĪQ.P<^ٲֶoΝٳD`ukM;[֚ƾXk`ɍѻH-@B 33Ӗci+X1jjoK6[/x.d9|5 4i}aÆ9s!"# Lr&q "" k۶-fΜop䃨n+.|Weˀ-͞e7{u-xw݈͛ dύ=+"""7 $͸ql9U]6ydT: |3е򫧟qZK՚A}Zw6\4ѶKK_ĪQ.P<^YJK n݀ 3^.]jߗyHafZ3/֚9Xkrc5҆O_C=3f /^\oĉ袋3OU nࡇ<8|gEDDv! ɓ'aÆ .@zbŊ۞>}SNE۶m~j3j(kQ7܉c^ \|BH/@=YfoEDDߋc⥗^˜1c`aرc1JKKQRR?gϞEII ʤBD:x-VKsv=3""" H۶mq8p?v_~%|M̙3iiix}vtO<1f͚pdddgExx8VZ%;KɱXZ &VmvoZ׿s5?ԯCYk515Xkrc5HB;w !VXQm_bbhР(**s !~g)sp\p\R3XZ &Vmvo͐9#ܹ&DvBdeif?\Z&7FZ&?ڵ ^{-/_{k_TT g۶mCTT6n܈#Fhoj*..FxxW0jcԴ ~#l<78.gMjf?\Z&7FZ%XjM6նo;|S$#?e`bƨiv% 8=O8;pZ#~ɍaZw6\p)4b7/á(O~zv[l(㑑vCQzmONNFZZ׶BQym_p!CQjIfff<Qص+z߶Wux0cIꋵf~ɍaZwF>:=/C̛7b[IIҥ߿9?֭utիWW;EVǀfgg8tj};NqQIIIbΜ9^ھ`1em'ONS|'^W^-Ǝ[mñyѣ"+R@ؽ۞y:r<`FyDEE^zA1= -oÇcɒ%+xGѬY3Ν;cŊصkmۆH)s5D:X2(-ҀK`""iWW1/YYYXnފ?O̘1+WѫW/lڴI⃈tyGF/nmBV߁PVV2WQF;w.>SN?GTT3dzXZ &VmvoMKJ$ફC摟o;^cСw<呖V<|^M2k^X`AП^W5CVkW)))`yCuj>NXvm<˛ Э75 X: q`äv!7] ""(.@ȞN|ѧp)Wlï.@H4[`bƨiF/ƍz,RR g,֚6u&5kMn޵Fڄ{@Hb[`bƨiF/i{ k;:$kM]:Wk֚o51zid]?v Vez?yX!ĂbublB^-DY`̃y`| <| D5p=7\}9͞(i{@Țo_OW^⃈!i m9U]6yjE + HOvhZkMn k7֚k?~-W0jcԴ ~#j~; $& x5cɍ ZS&7kMn޵F} OMvyKK_ĪQ.P-Ugg 1o# [^7WZRVK515Xkrc5Y §`1cd1 WOGG]9̃y0<,)X§*PH7੧%K 33b[LL ֯_n˖-PZ||||n7EAaadym;x EA^^ "11k[qq1EANNL7ܘG? *nX.>H554U"aL5Vs?}9sՏ?EC"֚K՚Űư|cɍѻH.@Hʏ XZ &Vmvۯz~S{buZcZ ֚֚o51ziÛ-75z+Vxfd Уٳ"""2״7 2SΆһ7p ҥG!~b{QW`̃y0Ko@,+j2]^CGG/je,k"JJ$ફC[=⃈$M;`bƨit9siӀo0\SӁQ`v`r ͞.@HܶXZ &Vmv@Ϟy!/Xkrc՚yXkMn k7֚k4d.K.tr,-}6FM;m m[!! "//yXkMnZ fX5aɍѳ~f B~SSqq1m7U]mʀt'Q\>_zR*yydcɍ Tg?k~Xkrc5Y/"iЗ9U]6|DF'¿n2/i&;&Z~֚c쇵&7FZ#mÇCQdffVlmٲTGFF6 EQPXX=99iii^<EQ}…HLLV\\ EQ]'Y |Ny< L޽| r.22-ǟl<`̃yԹ<jvx += ;@A&DaCgEDDT'|M;~BTW`blw0/1سJ}ydcɍQ.P֚bkMn޵FpBtci+X1>۝9< 2U#;2bb/<^ƨiZX5aɍѻH#3_N\. \.S XZ &6`̞=B "NO}o񒍵&7FM;֚bkMnf5+B^KK_9~\",L.˗k~#l51jڱ5k~Xkrc5Ye!|B*+-M=&=3"""k"3}Я@t4?0u*DDDTgqBd?`xYOUm͞!il9j{,nxm`b`. 22%kMn k7֚֚o51ziIS\\l˱Umۀo jD ,,%kMn k7֚֚o51ziÛ-75QocwogEDDDAvH/N3gz^&駞{<>""" i\Xá( 233+`^lEQ###k톢((,,ڞ\ǃBQjo]p!CQxmĸq-$w}ݺ!cteWyTa<`̃yH#::HHHj`Yݿ+,,D˖-m7<u+pM΃OM@m7xZZ&7kMnf5+7 $m9*bOqU67W[|f<5%[Hך15XkrcXk]ka'o.K.yKK_;X\֭"5US]6۵΄Z "kMn k7֚=kkVK,_ٌ<0@L @fϊt5x Qm= L o ͞m+@R_~"kDDDD!i>b.c>}`: ;9\4o(^,XL vp61jjoK6[֚ƾXk`ɍaZw6a))))fO< XiZ-йsggahѹ3:z+РP]6yd]I苵f֚֚o51z֚׬O>U@_~ DEzy.Q<_ӎ`Qqoy3DDDDDGgΜѱcG~n6 IDATwy߿?>so7]y ԩv؁&Mɓ'͞.֯_orsCK.BgDDDD65 AN:ѣG㩧qA:=[mɸ_GӦMѴiSUl?{,t3f0q!&?2hؾh^;v;Fll,95k֠^=n8ku粫2χ՗yhQ.P<^Y 싵f֚֚o51ziS m۶8rZj˅}/ěoya1cƠgϞx'|.B󑑑&Me˖{= 8P~B&6#G<㏁K<$ĨiF/,QkZ3kMn k7֚kSk.\{X|9^}O<ϟcǎsϭ>g,)/Rmj|ÇUv8~\~3""""" NBFmoܸq~EQ~{۲e E mnk{rr2Ҽ+?wYj:ǤI<"##k+EQ*F/@srrYq.֩S'DDD !!ZTKBܹS8bŊjz!Zm{nnp8"==]\. \.t: !pe`5%fXk`ɍaZg| x݄Ç#77km7bĈ`nX ؽk / &VmvoZ8k~XkrcXkYkv?_^B޽~ym/"ΰb7ihw0jcԴ ~̱XkZZ&7FZ#mQaȑ(--EzzzŶӧOcٲeׯGVV~Hfff6^_<>Jǎ(Kw~G]9̃y0ꂪ !ՙ3ȑn܈`IeĪQ.Pu=^:3r2bkMn k7֚k 8p@UFaܹ;w3:ٳ]w[67܀{J^˼U]6v `eZ֚֚o51zi`Y ҫ_[|3"""5B,+MH + Xf{QW`̃y0y&ty pE]IY0~ ̜il@\XP~ 5`#x g=+ǃy0<`S%Xb ѲeK ^{ ~G_2`bƨi2 fYkڰ֬5k~Xkrc5Y!iƏ{ʕ=yp, &Vmv/hFΝ kZc쇵&7FZ#{ ;Urr̞JP|{j!(-w, &Vmvo:عԵaYk,֚Ykv?_^e!u+kF-K7""":yf0 ~~n &sDDDD!g͛;n X 3{FDDDDd\4n1xu~}2`bƨi2 fYkڰ֬5k~Xkrc5҆  {@n7mp54j/+;vHvp]n <XhIe5 7 $ǎK֭⃈jis$3@t4зWM=+""""(.@(8ee[u <,l=3""""0.@>`X 2w6nr3`bƨi2 fYkڰ֬5k~Xkrc5&,%%%IGAA6mژ=ӁK.֬-Z@Ν ̱L5%kMn k7֚֚o51z֚lO>UHI,ڷ8p9fό0.@BƍO{1kXxM(qn>.⃈ H(8t;ؼزK05=N/2W0jcԴ ~#l515XkrcXk]k /_`\`K;^Ul o{"""".@ꊽ{Áhb/_:v4{fDDDDDÇCQ7p`^ldPy5/_y[uU񈌌V<&M$-`~Y<|^)ŋ#ш@BBBY ܸXٳhT8}ZIt:m9U]6ydcɍaZZ&7FZՈ7[ʀ7T~0̘hadkP\\pۍ`bƨiF/XkrcXkư|cɍѳxv| ';w>pefϪ2W0jcԴ ~XkcXkư|cɍѻHb]|nDDDDDjpbeǎyѽ[+=O4 +:{?XHIchuY'Qe,-}6FM@m7xZZ&7kMn޵F+9s<nmTС-W0jcԴ ~#l515XkrcXk]k e!OU}Ӂ=͞U§`igyB٢E\|Q &//ϖci+X1jjoK6֚֚o515Xkrc5Se.K.tr,-}6FM@m7xZZ&7kMnf5+B^KK_ĪQ.P<^ư|cɍaZg| , Sk"""""2  DDDDDd.@,hPbbb~zv[l(㑑vCQzmONNFZZ׶BQjOXp!CQxqU<呖Ge<Ux/2@\\quG""""P/^'Ob͚5?~<~'DDDDDd .@$zѴiS4mqqq^N' ~ۤkKK_ĪQ.P<^ư|cɍaZw6!9y$1l0\pWVXQcӧOcԩh۶-ѯ_?^mF"a5sYs9sL[`bƨiiiiaE515XkrcXk]kMH߄?K/EǎѩS'|X|9jmn[HHHe]e˖aΝ0p?q6mڄ[n5BVV&Loڵ֞75E ̞FFv͞ڶm#GUVp\۷oK曘7o&O 3f z'x;v1p`ҥ@=qDDDDD /jذ!ZjEڵkQ~}L0b[Fp>áCjkڴ)oߎǏرcO)7 rco515XkrcXkư֬- j}Wڵ+=\ߘ|fLr)7ư|cɍaZZKtYR9u`߾}R3ڗ_~ mL5%kMn k7֚֚o51zZyZyAB;w !VXQmߥ^*FQm/x嗥aժU?,j*)߀ФI>}2xXj.i}|M*GQQ/aƴl FRWl;}4-[~/6qvDDDDD E!55`Æ HMMEjj*N8kqw`ڴi:u*q;was=s Ə;C6> &M6h֬⊊#DzP^=tUZZ: '':u2{:`w}cǎK.fO꨸8?.>H+^~e̜9PHHH@VoP?wAUze^d\0*ň( jn :("E iZn咂%JT^^>?@ޯf8=ss3p{h֬ZnuUwZ5 Zݻ:t(`oo_sjʕ(,,1j(՝=1uThZ:,!33ׯ_Gpp0BBBx^>Y܍7PPP˗/#++ ;v@TT=Zݩl@j#,, >>>㏫;zΕ={Tw:9}4N:ѣGxx  ҹsg@`ppp\J&=g4h~~~8p Ҫ9 H*,,ܹsѻwo8;;Ce$'':hĬY t3Æ CzMIDATꞪݿ7; ÇqE4o:۷oǒ%KP 5"V<AUڵkB$.z)$Iɥ;p@amm-fΜ)E@@G5o"00P 56j KZAAؼybQjmPO䈜q-1`1{lQPP&Q eZ`0(>S۷$ڐ!Cĸqh.\M65.cRFBqԩ2 ĉB$'(1 Zl)Xff$I;;;M۷o={ GGG$v*9RB5kq#G111OjKZnnxWpvvzO *~ {{{!v#j><_>\\\4 cǎUb 4@DDp 4o-Z@qqqMkt=.))ISdZkܸ1N;#> ݻwammmԓ /kBTSfDD5QԡC$&&͛՝ -2Nnn.ZEƒ$ ׯ_iUkꤨ(!66effBe$''&2ϟLϛ7,ҥK }ABBZj3fzѣG1i$ <qqq0 ׯ_ec êU0}t~{U+ADT$%% IO?$^*ɓ2}5!IHNN6K$1|ezܹB$1~x%VTT$܄$I"..N 1rH%vA!Ipssz^رCH$-[&Xx{{|޽+<==EppYNC )2e$I|JL OOO!Mꘓ'O&>d:$Ib֭JŋB$!˲xzz$I_^1Bd<]+FlLh… ɓ'ˬ׿{n!IXh|aaaBe+1IFW^UbΝ$+V(1V[&"<<<0l0]nݲظGV~e:u$IPZZµk̖>|8lmmC)A9sW\A+?zAAAv=-- Pb;v,233q…r('''zWxY{{{ 0@V/:wKN*mVFߋ?>>>+5fZZi6mػwI_79&ǏkbBDuG}"++ Z2nX*jĉAHHav-CY^xVY @2HHH74 4i?o߮ԘYYYpuu5i.uuʼw%bbb0m47oFzz:222ʨ]m իW|rbҥ7|SBDuG}M6aɒ%fZ&UҥK&B\r:th E^\kѢEƵF߾}ѷo_!0qDYś3\''' ({ $&&ФIe" [-~z)gݷ͚5Ä 0a_FLL3?y:t(֬Ycv7ơCL+W:*AuÆ &wsJII[xWR鑛[էO8~+,,ڵkၶmVxG<%O7iZl?^ݼyvzaeeevcǎ6i*ԯGo+V0'!!,+oyjפIt:ܻwBcG@DGGcƍx"|}}M^=z4bcc1ft V(N)-쌮]"<<ng}ooo3֭CHH|}}WWWܸqVEjjj+/DHH"##ddee᫯ԘCPP7o,,_;vD6mleNQ+1p@̚5 ."##QXXիWUVf?}b5j^{5?[lɼ^^^pttիagg[[[tf[ٳ'#==:ujyt۷o^@XXڷo;;;۷N§~Z]FD 6 DTd̙\`ӧ qK"qIgbx7rJh4e@Xp!VX^N7. ;Yfa0 x饗_W%w[r%0h ̛7l.k3vڅ>3g΄'bccq%=>fTT el۶ :uBZZf͚e251{lL0EEEHJJY$!55smېǗ<:-&MtܹƪULjij|DDDDDDTTTTTTTTTTE$DPIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_mc_criterion.png000066400000000000000000001115221307543307100313530ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyx\K!H@h@E)kEeʪ(V)k DeUY(;BBB~˽ a:}'r朙3'̌e1pw !!!!!!!!!!!!!!!!!!5k&O}ph߾}RZ5U^ޓЌ3++Wphر7=z,á>uM#á~NPƌ#áիWwW\}9:~[8cP۷'PݺuUT)RJj׮W>˲dY[Yq|y֏Wo/ʕ+kС3fj׮]ݺ.W{wp83gxgQ5\uWZ6lؠVZTHHUnݺiܹi\v?O^zIcǎ1FwuZl:tHW֣>o/T;w2_1b*VmŽ7ŋ˗+ v_ /ٳgkҴ{n… WՓO>wyG{Ծ}{kZbϟ.]hܹ> Wrem߾]JXFƧ?~ƌX͝;W5tRM8[JcתB P϶[oӯPtTٲe o޽{5}td V駟C}׻ᆱnMsU\\rc>C-\z(>>2cO?aL={h̘1 Ғ%KIdv;wT=T\9(Q5)@}U%IcǎuMO6gwٺ{Uti[n+usÇ裏RJ Pjjk )n*UJaaakyݎsJٳg5d*$$Dqqq0a•]vwުTk[>}wyum^jf̘+,,L˗WuaW]f2ƸK"{q5˗/WӦMh=#:y$/T۶mULEDDcǎڻwG333SO^z*[BCC{N'Ncv?^~z9uUsN >\ 6Tttk8p.lzKaзo߮}J* V CiΝEڮ\޳gtr5uasԽv.}ٳG<FO>ӧOgQʕ:uh5-'##C-[Tҥ֭[+33ӭΈ#p8\̔P݀O7nԖ-[ܖZpvnudffK.*W<|u!޽{;(!!AP?ԩSis;GQlٲZtG.Ep/ڴiU*$$De˖UV붜;TZ5iJoZZZnnI!!!UFvԩS8q7oʕ++88XʕSǎy=~\r SZ4ktw(<<^K_'իW/E.\+..N!!!ÕQs=#PÕ5kH~=쳮[oUͻc ş!%%EyyyٳnBy}JJJRZԫW/;wNvIeiƌj֬5kZVjU?#zTJuMKVFFF4-_\%JpDZcǔuUC˗#G^Stt~akɒ%9r.]e˖)00mm* @׿4|pegg_,:}jٲΜ9;[nѶmkѢE԰aCv'OֲeM6ZfRRRrJ_^QQQ*SF{O{՘1c\U涾?#-^X۷c=t{ꫯe˖j֬ -[??-[sZp5kOڸq&MO?TׯWxxxiӦ)55G}u-X@7o&M(((H|}]}ڸqc]4ܹ.\۫f͚`}'Zbׯ_::uի7ߔ$ }޲,?^{N8֭[+22R7|s}wc)""BݺuSrb ㏕u*nݪ^x5ŬL2ڻw>#}u_q=Gѝwީ}{]wݥ, 4HZr륮3/_:E?"9]ѣGk…ꫯOW.}.Sk׮U6mO>D&LБ#Gӣ'NPrr"##ѣ3g~tǎuy͞=[=zкutw\2͛77eWnƲ,cYyֹ{p+[b,ˌ;kcYҥv[6fcY2e[}1.\Xg>}eYf޽u˲LժUÇ]yyy}Ʋ,3~xTZXeڶmַ#GҥKҥK\u|Svmp8|?4eڵk|WѣeY&88l޼٭eYnގSzu2 4WvsVeYTR߿,,Zȭ|޽nXe^u۟1cFTZLpp9v[yvv)SP9qsy,[̔(Q}tM& ]m,w}nCժU͏?*3w},lذMa<ofcYIKK+R}s'Ou뚛nVZgz۳g 2J2;vp?h cY8p`|IsQ+:ux,zGeYfn_} xϹόp c{._=c,2 64Ǐw/f͚DСC,י3g>S:t`rrr\֬Yc,2:u@N:Ʋ,tҫj|󊉉Θk &((ȜƲ,3}t;w4%J07|[yժU0G޽{˲̷~Zv,$''{]޴iScY[p~<O[cLBBF7|Xe~mm~icYٺukZ弾Rzu_cccMtt[Y͚5M@@<;p$>>f͚y%K˲OWE寁y>zx4[lkoܸq&""Z<Ʋ,h+''DŽ2eʘ3gxg93xms[tnO>q+w… & 8{nUV ML W^=ٳꫯI&ym۶yWVMQQQE֗_~)˲\פ\*..N*UҞ={tiEDD*UpǏiےn[^]V7oVӦMݖs=###իWk۶mWp%ކcbb$]riKw+;C9sh֭:uۜ›޽{kԨQ1c *6{ァJ'NЅ \˂?Ȑ$m޼mJsmTNkε"11*Uh>}Zbcc%vN寍K׷j*m޼Yw}$u֪^fΜ_].N ԣ>zM}(M>]zҴis*_D }ݚ9s6mq#oʕ+K*{+o5qD^ZRvvz QBBBQ.]ׯ5khǎEZozzL OU8p;fǎVƍUdIzwR7>]-˲\_TsyrXR&bbb}v/Eu#.|駟K/XۗsKbbb~8qsaw#l[׋ c0C;e_أG-\P5jPNTB7|S999J*EZ|o߮ڵkȑ#nݺn)SbŊ~J*j}|r͘1Cf͚ .O>n9S*!!A֭kܬYMQ/˖-[[~Aw}c2e^{ wy$y5t-u2e?zԿp6o|_`"""Tfk͚5^m.Sٲeխ[7_^֭ٳu7;ժUKM6ՁTzulٲfY5J(Qȍ<kڴi:rHu/ TlY!>9yg'NYNrGڵkԟ:u($$D[lљ3g<{[|f\>kEUj̘1:ڶmq}O?T[-[V>3By?:~6mtp7N?… zd䍒Zjiڵ?۲yiڵU69s6oV6f:uJ={tlٲ2xmh9rD? NHHzkҤIڲeڴi1 ٟ5kָM:s pUwqrssV{iݺu_ҥKkر^4_K]y}wh޽Z|[qnؔ~)??_Æ s wԩSivoVh"^Zqqq^q^'ԣG/^"x-M jW^7tfϞv$ڳgZlYuEQlY9rkп]wݥѣjݺgR>?*^=ڭ?-[H.~Xz뭷߻-5jN>s%իWΝ;]#?3F۶m+RX <'Nhܸqn˾+ϫόuhZ0 ^1Byyy;v5jK~ua^Z}]),]*U9s(00P,K{VllL۪Q~UREǎݻf=#_<֝wީCj„ [k^履~oVM6Ր!Ck1cZj=zcǎUvء *22iF޽*Tk*==]իWkVe˖7o:ww Ujܾ5jd-X@JNNÇ[kVŊoL>}jȑ_|z4g%&&UV:y/_0%&&z<JIIc=4U\Y7ovino&͛7O:uRRRZh[nEeTFF?g^qҥKձcGCeʔѺug5k욂g}V .ՠAw}:qΝᄏIuzg駟nw} (44s$)))IW_}kvMZ<*^%Ku{GݺuS*U˗+&&5=zlR7nT֭մiS+11Qڵ_W(QBUN5kLvu?сԭ[7W~ZK.U&MԽ{wEFFjƍJOOW׮]oCV7|S?4hݻ+**JV:uy:?QWΝtm۶M۷\k &h;sm۶ZpǨ~f\-[7Ѐ\eʔq/GՋk7ok6C5111&44qfEj{q3`eJ,i^_zc^ySV-bʗ/oڶmkVo׮]K.L2&,,4iĬXzwmfx Sn]iLŊM6m?Ot K5km` ӢE ST)p8pm1,^شkΔ+WswQFyۈcL߾}z[9s&Mb֭kƏժU+cƌٱcի1bŊW^fΝu/{gMhh)WyG}hjׯoRSSͼy>ʘ̸gRaI&:u긞Ir1/<6~o}F;-l[mGٳϟ+..N)))/b %''.??_M6Ֆ-[4tP-[Vo~Gefff͚jӦ2224p@vm:v6lؠѣGjРO*--[EWc̘1z饗^ z_iii{;^.]z*:W FX~,vegg5kж·F͟?UO?2eʘ|Э믿n_|Q: dqYkn5@ݻ[oqޞen?5 S@@ۭտ9RPJ l[BuUݻWnn)Ssjذtyys͚5_\ej߾~m}wn#+sN͙3Gyyyz嗋KװaC[oUɒ%k.}'.>%(({8 ֦Mpr҅]Di&kԨΞ=z֭[ 8P%KTxxիqAfNNAfrLaYs/+''G'OVNK?QO֜9sojݺu~4==HVVק:LM0Ӊ'ԣGm޼Y;wO?zFa# (w>ltmv=I*UԤI[Uֺuk[>|kzW\\^y :c?KZjܹsڳg~ܢhl@bbbNr>bŊ|u=3yկ_?} RbbO.IڗKpvzo-HrJ>}ZK l5kvAUdIWXHHHP``7S4;y_xx☸xxxx☸۶m~a6\=[]7дiJx'%%%L:tH'NP͚5j;o<-X@]ttq*ܹsվ}{J"""ԦM-^X;vPZ$]< ׭[{>[N׿4h t)紫:ux3RJq<.111q111q֭F#GF1cۧWÇ+55U{Qll$))I֭[]OB7hرn?~Լys=2hԩȑ#]ݫݻcǎ*_[;WƏ![IJMMըQ4sL?~\ŋդIWoMp8Zd SܹsjܸRSS$(]Xj qpE8qmK*+/;ʕ+멧?%Kc 0ap/6"TtiM>uxaׯe˖Zt׿uNcl[Ϟ= ~cccccc2Ƙ./u+33׮# |g |g |g |g |g |g |g |g |⏌) ?p{* (?{* w_1 6EGLM@6EG\"#M@S`SDM@׀ k@`S,@`S5 )?b6EGw_@`SDM@M@# )?" )X)?b6EGؔmHNN +*,,LIIIϊĉ8p͛kӦM^?^ǏWڵ *]v:p[;wꡇR*U5kgձcǮ!`7J߾}5| >b6erg]$wӕlnZ_mXX֮]|y睊UvԲeKߕw5 ΝSppGs*Թs l]gΜqܼy͛f͚0afΜ)I_Ծ}{ٳGSLQժUzjM:Ue˖ĉ !`l@BCCQZ~m?]CT&MhݺuoϵqF:(22Rcǎ#<:uCl@bbbNʒ$UX:/_ޣnttsC֮]J*y\[Ҿ}{3F￯R6S={, nٳgkne'O,؇-HrJ>}ZK l5kl׫dɒ ZtUnn<9m٥&GZ.o/uSwU.\дi\e999JIIQRRovÇkYsU(IP6m;vn۶M֭SV\e 4Çj*~:t !`l1ҸqcuM#FБ#GTF ͘1CSJJÕ={(66V~i֭'c4vX?^iiij޼|Ic4uTEEEiȑz wo^O>m;9R5jT0Eٰa>Czg$IzRݺu5tPv޼yмyԹsgIRѣGk֬Y'Oի ΄%$$ڿ +vlS͛ 8U+##mz*TpIRݵh"J8R2euY 6T^^Ξ=[>Ξ=[=CW,ؔ-ȦMprT͛7ڶA5ٳgsNI֭[ 8P%KTxxի+W^fRll6mzb6erg]$wӕlnZ_uo_gϞE!l׀;wN!!!.R3gθ~n޼uyUfMM0A3g u$E~%1 ePxggg_o[dW*UI&Znc(!!Au-1HLLiVYYY+^w[{ԍ.:t۷OJuVֳgϢOu={fϞVvb}"ԯ__+Wӧ*_~$)11Zf1,˭mɒ%]HHHP``;jHmO8*::Zj޼6m5~xծ][Pڵkx| S||^x+wT@qwF۷ϟ+..N)))jӦVXm۶ڲeeVf͔5km۶umرcڰaN:J*n޼Y͚5S*Usϩlٲڻw Ν#[ 6?ogyFԫW/խ[WCUzzzm͛ ͛7O;w$u]=zf͚;yd^ZjذaW^t-hŊ  N6o-`͛7O8p,88XWFFQP+|HRTTwE)Oה)SԹsg5lPyyy:{u.[L~F`={V.\(1 6ei&+<<ܭQF.N*m <5jgjΝ[*++K 8pJ,pիWO+Wtk$((H 6TxxJ,={W!l$++K111β^w]vI4ӧ+%%EjݺkW[gݻ[n5l0͟?_۷@`Sܹs^ q-/Hvvvڞ9ssͮ Λ7o5kj„ 9s[ƍ+55UԩS'iĈJKKS- !l# (v-޶ΟnwR4iuֹSz|PQ@`S:*++KTbnY|ynיT7::Zx4:rDUֳgO@_ٳ5{l'OSo~ZrN>W%IMLLԚ5kdeYnmK,xIRBBQp!I 6Իgй7۵Ss>*~=_o/ك-`uU.\дi\e999JIIQRRkԡC}v幵=|,X*5w\o^iFڱcm۴n:jUֱcG+%%EW+Inu 0Nl1ҸqcuM#FБ#GTF ͘1CSJJÕ={(66V~i֭'c4vX?^iiij޼|Ic4uTEEEiȑz˗?_|Q[VǎW_wՃ>x̓`K QFi̙:~իŋI&:eM$á%KhȐ!:uΝ;{U\\[:uhժU6lƍ'á-Zhĉ}TL[-]pELƕq>iX? `3M@׀ )X)?b l⏘"#ga6CG x6CW!!L@Uh(# gQ IDATb6DW "+` _1"+F@`C`^^.]ݻw2xy}-*Sq|@6nܨΝ;k#)X%N4hh"=zT^[Ȗ-[4n8oޗm !v|:RR%_n-4)XaÆiڴi:y/7,ؐO`>}ZS=%Jx{g|-E!!Ck 1ewo§~~BB|)7W *7OHj|߶Ћ? ? ]Μ9UVi߾}U{Qɒ%;@Ν"#/ 2uT :s[yDDƍ'x]O!!r!:lħMMMO?͞=[6mҦM4{l%$$詧Rjj/.l§# &MRӦMn^zҥZlI&w޾r@`#>ٱcw>ԵkWm߾ݗ]_^؄OHddv]{* /b lȧ]vz뭷4{lrc̙zK۷e|z ȫ =Cz'Iڹs::u^e# !+WNHhhz)=So S`C>U!ȯ:rʲ,-[L#˲{we  xUEME1B*żCҵ~Y5r)3\д6nW ᪹h .$z~<1iQdy~x93ss_jɰ̇h"0eO@HQZ4ٶm[-p )րcƌ믍O,""""R% j-… SHa V߾}qwEE{{{cMʕ+ 4 WoJ$''gϞPpuuСCq9]TzV^Fq:)QIMMEDDzɓ'M&Mڵkooo#""[nŀؿ?䄅 bͅnUU"##{n˗g\z:uһرcWF )QI& < ^xt jZ~6■ٳVo3fƏ>} !!vjڬ,޽YYYs+tuSSScڵ e\;vmE5qrr3|||9! B6m+SO=YfܹsO'nU|3bbb矣 ֨ł ~o0.!nܸkkkvVWuDDDDDQچ7//>>>h4zAAA<a8vzCŲePUU___,X4ܹsIзo_̟?C izjZ9.Bo)EEEpss3(++,,lǏiXK,Azz:Z-qݵVVV_~_5RSSqE<شiSEDDDD0F}Xp!n݊K.aѢE߿?._t<z vvvjtu7?Q RRR|r@Νwo/,Lo ٳg9sٳb߮];,^iii}_Z rOn^~ֽ0@o:WΝFcl׮&OG6DF H||<_}:zbu3g}m6\v cΝ-oAc/SXX[yIeTya|J W_DDDDtw}o߾&H:\ǟ]v,^XWVQQtL?GAuu޵.\uteXf kkk#"""k.=zTWݪܹsOWSzq:)Q ۷o3̙!n݅VVVHJJBbb1iUk@Q{M3F瀼7n֭[Ǐ^^^BݍNfo/޸ ș3g쌮]"..2gXi]7=BDDDDd ֯__}ufĈZ9Q5FM@n`E^m[iSGBDDDDtWRn{qqq `ժUzIYggSGCDDDD,-̝;$_^{&]ꫯdXxDT-@wj~+-Ro> |YDG6@"""" W5--ω&Ҿ=,""""RDXQQ 7G*!""""1Zbmmhdgg#gB-QTFqq>R9B-YfǑ#GkBDDDDdƌzO?gggGAnݠV ꥥ3v ())& ~׿On> 1Nm kDgh4L2-qvjBDDDDfŋ>CDDD"##EtHG)B' Wȑ#h=OOODGGcʕ-ybBDDDD ȁC5nHH8)N""""" Hee%lllTƆk@ҵ+k lR_~-JK+WL kdȐ! wEddd`Ȑ!-yVDDDD-$$$aaa駟O?!,, 刏oS׮+ׁk===f< '|}}k׮8qj*xyytHcGΎO@Ȭxg|߿)))믱~z{EBBwnp̓$q!:=$ Э[7|G裏pU\zm۶E۶mY DDDDd挖܌ػQݱ_NwcbN<<<"""""3Ĝԝ­xL11'< s p-& Da!"""",""""2SI@***www#887onҵW\All,\\\hzVVV"99={Z+s5x+V@Rf8}j[&Mk"..HOOGDDn݊4x]mm-"##~$$$ . ///]ݪ*DFFb݈ߏ˗/cϞ=z*:udpׯ#!!$48yᄏsO"""""#PDgZ o6f̘?~<郄ڵk{ndee!** ̙3+VMMMŎ;k.ׯI%%%m۶ ʛx{˯ǎ1!"""")XYYYhӦ bccuexꩧ{FGeeeU|3bbbaTqxmm-,X((++k4ǏCjj*ʛ ׁQDh4 @~~~ СC(**/bccF???l۶{O>aaaÖ5@̒""ו6|ٯdC"<<лo?w}u+>>< ̎"ր֠N~CZm~5??_<,, ^^^HII;eaʔ)ٳg3Zoo`Ζ7Q QZ rԪf_[:`ݮ:wPdggRSSqe̝;ZD@a!GbDDDDDdͭiVEEEwwf_[ڱcG...u&HJJs=+Wʕ+''B>}j:th08s=zecƌ1c[#87x/""""3++--5Q4ʡ$ ۶mõk7;wB888/wGBJJJp %%Šnn0b[RSS]n+Ǚ?طokASQSSŋ***`ݔȑ#ֻ… z Aqq1֬YaÆ興ڵ G=|01d/ׯ4h~zKoо=YQcԨQx饗pExzzbٲe8s ufΜ K.$88'OơCt' ! p$''c˖- ôi @ZZ1k,Z'x uaϞ=>|k8%""""32220{l,_%%%ƍ#I4+PTشi㑖r^zaHLLDRRT*zޭ|oVg77YAnNann׀y@ZpRGDDDD} (b SGBDDDD$L@YV\BDDDDf 9y+^"""""3Ĝ9:;2!""""p',""""2L@!""""3=nDDDDd;ooUBDDDDf NXDDDDdF;// щ 01wj5й3Y`܊%VDDDDd&(7pP[kHD ||2ԑ5 p+^""""2L@[7ʊ щc66QD)& J@ 0Q oo_SGBDDDD & JTUO:""""1Q nKDDDDf Rt"Z1& Jaexzr!:jL@[Q+DI||QDISJSGBDDDDT/& JIQ+DIBt""""j(;`ou DDDDj1QINXDDDDԪ1QooN""""V p+^""""jŘ(7o@Y#!""""2DivWADDDDT& Jӳ'`e-H 897}DZ& J l$'?|5""""2)& J%Ir⑝ #VÇڵ@m#$"""" D$Icmо= ?r%PScȂ0$<"/Lߵ 3X6utDDDDdXo ݳ>2utDDDD`L@,YW_~~SO ɢE.ZDDDDDwYS@@@0`|` )INH4SG'׮:""""j& _9sd[nYee@|<0y2tnꈈ(f VEE{{{cMʕ+ 4 WoJ$''gϞPpuuСCq9]B7=z@۶mq"00|jaש^Ksuib6)&4iRSS1~x صkW"226mRRRpE 8'NЫ[UUH$''#""}hpU]ΝCLL y$''K.6mHm[`Lx]yK>}#\SGGDDDDM% ''GH$y]V^^^"$$kWZ%$Ik׮Օ]tIkN;Vo)lll޽{(aÆ kkkQYYYͽ[ !,S@p!v0uTDDDp|x6m 66VWfkkz w֛Uߵҕ9;;#&&6l@bB~P]]ۊk׮m O? 9|p,B:B"""""<@^hP2;v p!pppFmVオZ-QPPe˖>Ì3R)[6m`z@Á /["z""""nnnue;TرK,Azz:Z-q{{Сwɓ'^otk*?8:QQ^ΓމZ E$ 尵5(ӽVۤk_{ݲe &L'bB %%cǎ͛'|ɘ7o7NGnv<<z/DDDD&DV/ZV~s{0`:u꤫׹sg";;]tAXXF/k̙3:c!!7' !") B77zY9=ֽvѠKL9K,}ХK{+3f ƌsϠzW xC>09>x9{M!B++--5Q4ʡ$ ۶mõk+7x?v !$Iһ>>>___X[[׻Vaa!\\\ngt[-BOMMwa<5SϞg'[y@J r2҄ r}o߾&H1+::555XxM:<9$GGG… Xnk֬a`mm pttlxQ]Ç#;;C ѻ>| lll|wNwC) 6XUNBΞ5utDDDD' ǨQK/ŋIJep͜9(((MFpp0&OC .s}P IDATdlٲaaa6mHKK3f͚lsθ|2֮]sE1877I̙@Zp!0ixz:B""""QD={6/_aƍ Ց$Io Oڴi㑖r֫۫W/l߾HJJJ[om;tPxOE^z )$n-r ) HJ o/:2"""21~_k>E!jyar"/=a興ʕ#=|-DDDD ѭXYGW_UU@D<%kZ & DM%Ia@>rbBDDDDbBt$ <زENF<= y-ZL@#8kyzVݻ ܸa興Z& Dwjp.dص+0op助#"""j5M>>[>$0>Х|ŋ䘀]> )S{x/ nHDDDd$WW7ӧiY˗ˋ֟~Z~JBDDDdaC9r" | У0v,p𠩣#"""2& DN#F{::"""-{OӁÇ m0uDDDD- )Y[&W.MLDHqVVQ@^qxDF5@M#$"""+&$'v {˖UUYF$OGয়&M & D6>L t6p#"""-L@̅/ 9"OӚ5K>q}ySGGDDD$L@̍7t)&? 8ط5 HKΞo~X6uDDDDvO#%%&L@M * رyxe/{8z1!R@ܐ3g + xqy: "%Q%9!pc SGHDDD %&Lf!s9A!"""2& DDd+@QYDDDԢY*୷m|Ҁ$(X4uDDD@L@,F<,p<]kW׀M!)"Tモ#7ߔ<<7uDDDL@P^Gӳ-[l/jjL!)& D԰vxI`9񈊒OY]SGHDDDf Z6@tK?ˋgΔ}y1SGHDDDf ݞ} iի=H/5 77`\tx1O`"Q+4 طؾ]~Y3gfaBDw$? [8!'%}t dgsz1!Э;6+Vu""" ZK֑#7xx\dȘQSy_~u"cHqwsAy:1!"hHLOY_J^?x{@i#$""LvBBiӀM!EL@ >\>e}t 3S>Wd0`fnKDDL@qw͓1\T>m}X1& Dzɻd[^^3Ȼg͚%/d'"""pww=y&]{aaa˫nee%ѳgOjbС8wΑ#Gm:t(rssJ[,$ʻd8L||ȓO?dL4 ?~<`eeڵjkkLL6 )))x"'NխBdd$> h4zҥKtR.f̘G"88[liY]Ν_ssx NDD $wyGWj iUV Iڵkue.]ڵcǎիo wF+nܸWᅨ:F rss?ݤFGpw")IKL)5"deeM6Օ⩧ݻGw+teΈ PUU@~R`DEE_~FY aaooW־}{i*J *hx $%D~Z.#""VC H^^|||hʃ^hP2;v p!pppFm֤8ϟ?&n[>Y |pW_u""V@ HQQ }?CKMMŎ;dC"<<nW֝;w⧟~ѣ("sK/NgO< 7""""RDR^^[[[r;;; jM-[`„ 8q"6o !RRR/bر޽;0"jkkyݻ坲xOY>WSGHDDdqjTTTkZͽuԩ^Νz :7n  ֆUPL* _g}⨨zׂeԹ|BdJWr"@p0 ȑv""X|={6/_aƍ$Iқf* 6mB||e/k׀aÀ='$׮:B""V ѝׅ' ̘!q}^SGHDDdtL@[%Y %BBիjSGHDDdL@{]֯lmѣn݀7~(& DD`e0d;<:dZ""Sw7`,૯޽U>q0!"j-\\W^N>()z>~5"߀={]`t_N2uDDDw Qk%I.YVI?˧GE۷u""2;L@A.Y,\9 (?3NDDf 9qpwNɓS_}(*2uDDDbBDd$I޺o!11ʧ:B""z1!"2w=zȻd= :5i0!"$66@Ϟ,'0!"""""aBDDDDDF  """""2& DDDDDd4L@h0!"""""aBDDDDDF  """""2& DDDDDd4L@h0!"""""aBDDDDDF  """""2& DDDDDd4I@***www#887onҵW\All,\\\hzVVV"99={Z+s՛?>;BRaܹn#kcI&aڵ7[b ^W[[H߿ prr… 1p@KW ؽ{7bccqسg^N:Ξ=nnn IZDDDDDfA(@NN$I;2V+DHHH׮ZJH$֮]+th׮;v^7|S؈{2ӧO !(..$s\@޲%/LB>1>1>0>1>1>kͧ)XYYYhӦ bccuexꩧ{nQQQQ2ggg`Æ  ?)Y`Я_?TWWv hn,^ffChu''''''t)"˃4^yPP ??k ʃPVVcǎ:""66h4öm^cL HQQ }رc,YthZn)bzyy9lmm t7D6ׯ^u 兔,_y !""""R8E$ jZV~s{0`nW;wFhh(Kv>{)Iii)g0Z!!>!!!iͭiVEEEwwf_[ڱcG...3iq}/۷Chu'''''' =$ ۶mõk+7x?v !Y999pppUXXfFi=C1[H@ocx'#88X7er ЦMݵYYYXnF (..ƚ5k0l0X[[7ѣѣ1\vv6Lv8;;o[CDDDD-O>G 9b/OOO,[ ?3lقPi(((НQ[[PA^V>zW\All,\\\hzfgg#44pss /7nqoܸ9s <<۷J²ek.mB %%ݺuZV\izL41ӫW/޽{ϣwh4ڵ+FǏԵq>q/`ԨQ􄃃+VԵq>qgχJ{2N>q* 2'|RX[[d"ſoSvK[n$ӧ+VoYx{{_$'' QYYwϏ?XH$F%.]*&L $Io^"4xć~(z-ڶm+?W7//Oى}EW^yEى~)!I $e˖3Ϝ9SH$ytR1tP!IXr]퓉' ;;;1qF'#G^|HJJBшY8ijX8ٴiXtHKK?$I$%%Y8ijX8o&FY8ijX8iXNN$I;2V+DHH #kdڵ֛2eppplB$xb]YYYprrÆ ӻ~ܸqBш]٪U >ҥK]vbرz?SNڵkK I?p{CEEpB/g kkk1uT~aѹsgQSSsdĉSBdgg*Ǐ ;;;1n8]%%ѥK]%':NF-}Q1p@ѧO,u4':NZ+& &/BB$qYE4u HVVz::tG6(ѣxGu7B$۽{$I|纲QF 777{>3AWRamm-UVV GGGO7 ػwo_ͥ~$I>|Xnff$鶟5''NFԈ>Y``ׯwK'7sp1tPİO,ql߾]iFqҚq F<((onɓq=@V#,, Ν;K._~͕BRG^^^[% ǎ8ps5sj{^^4 zipOŲ2m{/̅Uj!p8;;8 2_Ejj*{$$$qX\RIMM Nݻ8Nn'u,ivL@LH:ue"::iiiꫯࡇGRTT ˨յ2bcc'''hj5-"tݑ> +WñpBF/&%Ɋ+PXXѣG2&K'2Ɍ3СCx{{#11iiieLJ' `y?ƙ3g0o޼z߷qr>,ovmL+//Aă>}Сߏ^z ~ j5accSgVmR[ͩz/2t_B'Gs=L8I1Q8O'qqqAaa!VXj'NqX5N~wxWToK'MƉ9Sը0(j͍'[BkCSکVQYYY}Z^4nMn2jݳARa˖-z1)OΟ?HkYYY$I19~K蓆(}aaa7n[ <ӧOk/bJ' 1uX8iJ4D01177z=sww7vHweIDATEΝQYY7nֵfEEEprr5?jjj *˗}wo>6gKCqe'xqU|wpuubR8iOqg#GDii)9bѣ Q89~8,YSٳ(((@AAZ-*++qiX8ij4D\01;v ׮]+"f;y$j54 :uݻנޞ={ugǾ} Ы6mܳ-̖t5E/&Dbذa8q6nhɭ!J'+JqR!J'ΝCmm-Mݻ~كcǎ[n7oEIC8N̆i6ߢ:u瀼ۺs@|AF4/^4(bĈ)S{{z$_hҕ]tI{b̘1z?ݽ;hƶ5={V؈^WV[[+z!ѹsgQ[[{;]`hZqUB$~z]Z >\lx3K'MK'iee ΢ZaY)}bI㤸X_^lذA~zѧO!6lؠ;RISĒƉ` NB_h 666bΝ $"##ERRXx>}ڵGի;Kw*kv턟 .ԝ@d ^ GGGHq1vvv"00P|G_jZ77o2e$I9R̛7Ơ7Oϸ9=!!Aw%KDdd$Idff޵>9uꔸ{ų>+,X ,X """$I"""~'/$I >\,_ৎ%􉥍#Fs%Ky扞={ J[8iJX8#>^ ;;;Ɩ&x$ENĄ įjP_~=ppp۷Ǐ/\BdѳgOakk+ł WRR"~i,ĠADnnnuZ-:v(N*_~BxxxI$IBR Jӧͮ_V/ɕ+WㅷpppvvvW*O?T*2N'6NV\) "\]]prrbu-e4O,mg a9>GO׈Z0!"""""aBDDDDDF  """""2& DDEQq!$$*i)F$c?@`: #?ALh Vf)ġ;w gosKDDDf̆ "?,c߾}w+r%L>,شiSscꊈ>9gh>ID+۷o,8p jkkO2wg=˖-Cii)PPPiӦV>Igk7")) ODD,v֞x|燫WҲzf>Xv-t:ƍg.77B3"/^!~iŋvW̮OCI.I0`lgаTDDx"55!2ɲ5k(IIIe-o~7NNN4!C>,~wL6 P՘2e ?nM{~g&M򘫪 {{{jL0%%%؄xw 2d'wlllh0vXO怴W^^I&AVcĈ(,,TFC1JCCVXooo 4AAA8sAy@DD2;v&* #G[oeԾ,Xx10fT*3}v.] WWWT*w}?M,@_j5kVtͼ3 26l___$''###O>$ t1/ONNƁj*Ġ SNEssÇ1ydz$%%!%%ǩSrׯ;=K.aĉ(++ë477#$$EEEn.sN@@@ PPPiβ2cHKKÆ LK7$  c=tT*aΝ Cpp0RSS1}tz#$$Xr%***秼_Fk,XɓM#@HH6n܈ dff+W4yۗ_~E!<<iiihnn /[&** [lAhh(6oތ+V KGDtW "~$//OH$;QUU%,--Œ%K~~~[Yp႐$I$IYFY~7$I"**J !IHKKS⍍J̙3G9rDH$\\\^W{$M6 !hkk"00Р?W^:N饗^,]TH$+%NZVŋosɒ%`ߛѣG$I޽[={VH$dY'OT⥥B$}v%6{ljVt*"""喖J֭SbNqsEEEB$b]hheY?^I$T*RbgΜ$l%huMx-V_~۶mC]]];w,$ITpf͂ZVO'''6r;waaa?^ɟVKJJ닉'*1Z磺?Stdgg^;h ̘1CYF~a%~+(⯿Z^,))bbb ⱱBS cÉ'\&"bBDիq[aÆ,k4T*mll`Q 555_0{l8::{=\v /_6ؿϣQ|ȑnc驅 pqqAdd\ :(hb`r<{CLCR+Wz%>n1-- ?#\\\5kYFDt!~Mb̙^l@kkk9XgE/~ ʌ>8[įP988 #G9sr_ScUxܵKNNFll,L(++2ѓݝc EUUtxyyO?u4>իW6l0jgghll4_*++ 8wƏI}MN`n >Wy---`!pBlݺt7{箰5744AYI6|p:tzJvvȐ!Ftt4"99 IDt {:3g֭[{ѣG 999=j'TwakNC`` ࡇ222L>ӣG}((('Oĉ'XSSmVѣG8g_mnE[ZZz[1b._ %vE߿J޽{Q[[kk٭_yڊlm233!˲r~V;899ڵk=EDdNBD !!;wٳgenܹHMMżycǎ)0[oL#""uuuظq#1o<7>Ծ """?GFAqqq_|@G}ԫhhh?~ ++ <F徽E݋/8<󈉉ASSlOOO7kW^ PQQ]vAl[[[lٲPxGjgO<TWWcر(--Eqq1-[֭y:]rCEhh(Ǝ kkk}ׯ^SO=T*e;???|Xn___,XmwǏG\\܌qO>7i,''prrBXXƭ;~,_t:RSSQYYisǣ vž={ヒlkii|Z hmmE^^\]]/I={ //Z&bJ|j-Bii)ۇ6c"IKDDDDDD=9 DDDDDd6,@lXٰ!"""""aBDDDDDf̆ """""2 DDDDDd6,@lXٰ!"""""aBDDDDDf̆?ArIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_mc_mindist_10.png000066400000000000000000000423431307543307100313300ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyxU:$$,Bؔ%ݠQ$ 26EApQ«T`.3 h@P EPHБA " IG6tls]\뮪ick !k !k ˥3fu/YD.K+˧~ݻ+**J.K_|Eו*ݿ*;e^saUJJ;\Oiu@p1=C߿֭+˥K]>++KW͚5U^=]~E)>>^jӦ\EEEwڼye?c]~劌TF4i$;vTnӧ{)YH*8n *,,L8p^~Rma&H-^8c2;v0yCq̾}<̙c1z2O,\\q??^ݻ(]vVZf^n޼ل.]?&<< 0T:c"""LtttcL-2x䥗^2#F o?yk ]Ά{ȑ#|Ώ9:N<[111U ~粻w֍7ިX}Zxqz)kN[. I+55U7Vddzm۶y?~|~ǚ2erСC^b.S=h |&:uJ3fP֭G^ݓ7nW >yz!jJ:5m4/L6mZVZPL ӄ ݻwWJ{$iΜ9:~,XzyͫWϟcǎ)--3~71bj׮k:yg9˥cǎiҥo{l޼n:uE5jPǎaIիվ}{EDD/֖-[[ԩSzեKթSGQQQ+<۔ k6h@4c :~aە xGphBӧO//k?󋧂"s;< /Vja}Wԇ#IrJRAǏkĈWkZ$cǎz'tA.+g_~Q5ԲeKM0\ztuwy y睧nAk+W4iH9rX$rEmrtwjٲej׮=݀}մyf 0@kV͚5էOmڴk|ǍU$XB]tQZTvmuQ=}OJJRm6Kjڴ̙Sl;wXM2EovW^ݳ}YzjsW^6m_L[~߯n~;_3mժUjذV~}1BN:%I:|}]3FQQQezEEEym$M4W\˗{M_l:v{\w}N8[*33S]wvw}3g~i˖-߿N8wީujƌڱcx qZbE0`Zj3fSO=.L5k[nEM6լY4i$]r%TOM7ݤD:tH}6oެ>}x+\-ܢ}z7Բe<GoV|| =oND $""Bg\͛7M6^o*t%Hl٢&MyYF-Z{f͚yA1B-ZП'edd8/kĉڵ'Lm8ھ}Ǝ[oU_Ν'Tjjc4{l1B|k]СCZhFoY֢Eԯ_?effSNjР[oСC= :vsRsi:u>͞=[YYY?NÇĉ5~x-ZHƍS.]Զm[ϗ1FԆ 4qDuYoNݻwS k̙:vfϞ-I ݮQF)55U6l|\|v&aÆi„ zw裏\fϞ=۷bccu}N:ڱc-XѣGգG}ך0a5kh^GQXXRRRtIUV?*%%E?x Ie9I_⋺;U~}5o3W_GSMP͟?_IIIzKwyGFR>}<l۶M 0@\sF^zIӦMSԿI{O?ɓ'+66V˗/{Wbj_\l%\7|&$$ri˖-=zgل\`[kN_~rssZjܹ{Fr{G"##^zI{oB۷o7| &M*'jusl߾C{iͅ+77W'O־}kV]v222t}izꩧtjѢE^5rHz?~}Y >\og{= 0@\rRSS8/^޽{kƍ/T.X%+-+** 0̚5|jӖ-[8;>zb]&L`4ibu]gԩ>h ӡCR=;w4&44 :k3fq۷o_eLbBCCÇKvΝMÆ ./&$$p i%u(SN.c~پ}]ׯ?oBBBG}8?LٳeQ%uj׮ӧO_}UKqA% 88c=j14k̸\.'x]Op7 q̆ ?x-7uT8Y~W͎xۓcͽcyW8f֬Y^Ӈn\.LٳKĉ18p15-M}9tԫW^~3z+ww[jU.`8 5YYYSpcϴԪU3={

    |iԨsy睞c]믿n\.S;j1O>?^[WQ=7?zqty5ʄy>Oæq&!!3~oZn]잛Ǐ-[; ]Joֻ[رc]~MMMuEiڵ>}t.]xu+7ސbL}xuspO߱cGuw\ -XԩSҥK]ёI*v5]v^Wׯ . -vN{dF:uVZU!|[_QQQQ}U5k(77Lgܹ teomi$I={<㕬<]VBҰaC5J~="::ZGڵkؚ5kzH'&&g[oM*993-,,HO>\}qU^z¼'N(:K~Y'ԩ{o/_\]v;b˺Q+(??2e=7>ܫMczuMLL/R+s&M4x`5k_͛7kϞ=>۸e}w뼎٣GwA=\/]Juݻwv#Gjȑ:z>-YD˗/Wrr}ڹs\.W.(EѡC4|͟?z ӦMӻᆱDjJ}ըQԽ{wDZj5=::oC⺗+ڏv.b.B:~"""×~X R6mԾ}{_cǎUJnI;vU_qxuy2EDDxKv |N8zMkذe'>Թ;S u^lR.BTkkזbo%탅{%iҥ7ou-[,s_XllԩSw+| 9]N3ֶsN}\?Vc\{{=]גu?S\sf̘\III:uxnΝ;}v,gyå9WGDDĉ^Ҟϴ5jˆcj׮]zW4w\ժUKҙ7Jrj…8q+5tP 6̫^Yy(ʋ_ ?V%|8:tgrEEEO>ӧUKjӦM+*^cǎS?l_xoSoV^~Z>RSS˼W||dVgS=W_}Uk׮… fS|IXss]aر{1-|ۿnLQd]5bGIRƍ>vŊ`^^ek׮ G 5iҤ=)E]%?~ iӦAr\={׷ފvF)))IsuJiUԩSoK_C*i&YFonF͛7O|Ie.)ETwEOy_/UOLLl٢~[o|M-^X_,YrVv64jHү~GիWsPF<=ׯY_~=i%O0]_|4!GE~,8<<\|֯__]oV\޽{kڵr\e>73q^;w:ws's#XҥK-]Twf͚)??_}UokլYS>UF 1B#FЩS4tP͜9So5k& _WpW4|}ָq4n8;vLW\qRSSK 7nԩSuwAUVںukCqϞq."mذAG=j$߿L?XgyF}7nܨ;w[n)6oڇ;6ZJqqq~P,uo֫O?Cy=gѬY3[NG c3j(M8Q_),UVĉk׮ڵ}Q =zVX &yӗ_~Yf e9{40a峛MyDGGVsb5WVMW_}jctmiz}ѭYf*6viҤbbb駟u袋$I~ g)??kΝ;kƍ2x=o6mRddCO?TÆ ,/h˖-9rdꉈ[ڴi .@|rvG{V޽5o<͞=[ӧO׆ ԻwR+jFa~$y澪VfJ=n ?~\>Z~.<Ԡ$H(n!!!kzj}WS2{Hjժy.O> 7~5jΝ;kҥ:tg/]d5H1bzsF`Dݻwg)6^#{@ <-X3ɓZxuVX 6J2uTEDDo.K-ܢHM:c׿zSOIldddu(Ҽ!!!2䙶iӦbǺ;CijqlWv})K몫R^^^cz*bذaz衇O{d۴uVMo-zwi;vL]vuiӦ:x^y}2dHa ԩ:=:t.R[NŖӟ׫k׮馛?׺u<F{UVV׿ꪫD 4i$͛7O R~uV曪_~~c=g 0@^z&L7::\]Ĥ{ꥄխ[W}V^]MwuݫbcwI:tرc/[nս{w믿K/kz(= |INN~gϐ={T=$$7|pw}ڳgtR?[0ѪU+-]TGV4a5o\-Z^C! ߏӥKzըQ#lٲذgKi^d2d~kǎ?ڵkmjʕjӦաCk׮v;vnA ,uW(33S= ={g"^ziձcG]VbYY^VZz衇Jl>?<۷O}֬Y:u_.q%K駟СCղeK9rDܳg;oWn5jd~ߙ zY`ٳ_ 7[6ӦMUŋ54f^^yMFL5L޽ͶmLmVE\~q\pݺu/75j0k6 2_fޙ3g]h/xϞ=Xݯ[RR}~)fڷooMݺu%\by3AY^vh;)WNj5jdM׮]K˶_QFƍիƍѣGزak3|pSV-S^=s]w'Oz-7ߘ={5jx Mkl޼!CE->{l1ݥKoq*5##\|&,,k=v)8_<æe˖zYff^C?TsRRa ;z2eiҤ^ |ӒJ= oiu̖5-Z߆ ^ի $3{lwb(͛7QFf͚pkXlt?7wyiڴ 3?~g_Εǎ3G6q _DyEkڼy߿Y4W^ypׅϊ-[fLXXIHH0Nciզ_~&66ք͛[oouر\}զFAfʔ)fqy:7o\]x6`x~HSn]3vXg}g̅^hL֭e{3qDS~}izwx?\ve&""ƚ;3d,T{glbccMjLLLꪫJ4ibLӦMѣw}\i>;.}͚53w1:u2m۶Xزek` k !k !k !k !k !k !k !&4 7qo\=IIcGIgE& UPzz k4fM=u0]cyJԢZUVQ1*(>>^ nu\;PwY]ow_vWպ6J{@2yׁ$|8[ gަl!dRt\2TpC!iz\R8y\c heFRRhfBrsZ@7o 9]XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5n trK;P7u`;!!!89FW (++ UPzz k4fM;sݨH;PwpB%XFq:k !k "''Gi))ږ\兆mbR ٣ݻkVv$9%enۦk7nʌ B$ `δin*RMlqR mg^JQ|@"䅆z> @P &&jyN$*AJZS x3$MSJZZ*1PZJ-; +BAќŋ Tqt` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC`MhⲲRwpnM NHHt3i18nJ H@7Ú,3uSw0n\7*R=.\;Pwp ֺQ~܄k !k !k !k !k !k !k !&4 QZJef*$7Wyj4ypN!P={hd4I|I۶ڍ2#e@,J0g4V7ͳJKI \D23ϼJ@ Brs=W>r(=% 3/|@@(ADm3o#P4 \fH5A\7111Z=Zw@V; Pf &&Fs/t37.X!k !ax@7*wuSw0݌sc1n~8NbR+>>>Ͱ&++Kcƌ A A0׍!TAAyi u.\n7k !k !k !k !k !k !k !k !k !k tQZJef*$7Wyj4y(s֞={4{wV$GRmtƍZAb肅s֜i4+;[T>JKI \mg^P tr[ֺO=Q?b;[;P7u`;!!!89FW#5j&i3Kj)i୞(IaNJ:*i_@[ H@7Ú,3u%5UYK}DRdݑZYͬt\G ߯Ə׼~PW:P&I6m,Qttt[]qzb UP|||P^+khRVWtr`z.\ =tVhKҥ9.X_o7ǸqJnV۴Qr۶Ǹq (J i111o!%k9@J*)矞+@%kM~m:=VJ┡+: I┒?J(%-%Eff*$7Wyjii F8 (.X!k !k !k !k !k !k !k !k !k tP\VVV`^M;s n91Ƙ@7r'M@ \1\fX1cPwnM F@G u.Z7ʏXC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5քsWNNRR-3S! UD)&&&TA@ٳG#w׬lIr$KܶMnܨn!* \LYꦂ!t43;[i))k"e[f|"%$7s(EK^hyPP.mϼMPP.)ii?.N*͐4=.N)iik8\bbb2#Ci))z<; v t3U Pn111xq8 5@XC` 5@XC` 5ք(.+++M]/u`@ @7cL_9&||TA銏t3Ҙ1c;HP7u`ub UP|||P^ڣB u`M!k !k !k !k !k !@7rrrm:uEE tY={hd4I@7G3mfeg[iP1<235Ѝ!~ t#~c y2no mb614 :`U `~heFRRh ta111x$?WBBB[tn k !k !k !&4 @qYYYnUz;8P7u`u'$$4cq@7%sp JOOW|||aMVVƌCA;P7u`Cu.\;k(?nB` 5@XC` 5@XC` 5@XC` 5ք@;pm U^h&&*%-M111n@"qJHʗmݸQ+32!7.X@Փ4MC*8(I l KWI23-#_|k5gyBM @:*?6Ijh5g}mT*͐4=.N)iik@ ^DHOףE~d%~ @EGGkŁnt` 5@XC` 5@XC` 5@XC` 5@XC` 5ք(.+++M]/u`@ @7cL_9&||TA銏t3Ҙ1c;HP7u`ub UP|||P^ڣB u`M!k !k !k !k !k !Eq>2ja+P!`h\2c6R РH @ 9@ /x6ߗ(9  #@LrYm=Lu4W? uFuwwWb&UXUժb!B ZkmIDAT0l괞 iU}lj~;j\ g's ۟7Ͻ۟oF09v`TGyݾpv?4բn4`yܻ9Єv/='@&ux}hB? i6E=xsQUga!9u]]/5}}yk4뺺{ hG F1 @Zcc_{n݂>>>{dhG F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ ;Wuv_IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_mindist_proba.png000066400000000000000000002702551307543307100315410ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyxյ' B"(Ƞ( Q**EP:QVAoU[-B4JF[DTqHQ0 Ab >k{NNBYw{=Ƃ    ZAAAAA!c"  BDAA!   C AAA2   d 1@AAAb  1AA!c"  BDAA!   C AAA2   d 1@AAAb  1AA!c"  BDAA!   C AAA2   d 1@AAAb  1AA!c"  BDAA!   C AAA2   d 1@AAAb  1AA!c"  BDAA!   C AXz!deeaѢEFEE0sLwʐ gees )w=zxk3f@^,Xr]dt(:U/BE Ahdee%ײeKtw}ьŚUX,+SL*+Q/j7ה<q1`ڴi(++C>}Z,"+,F_q6dEEEihٲ%N8ᄔ 4mۆfg|hnۯHG!s,A8 9sѻwoAkH<#`Ȑ!(((HPvoߎ}{޽;rssѩS'\zXn1 SO3DAA:(|;ロvӦM;0x`tyyy޽;n|G<>|8ڵkB\pxW©|>rê}ە3gƍs=g;v8W߿~;u놼< gN g:cvmݻ7 о}{^{-}5\{̙ ye_CѺukm7d<6mW\N:E?38-Z~@VV~{Gݻ7qQG .p\s eV7oތ'(..W_Ͷiگ-ZUV81yvdyAB-zcժU8묳ЦMt&MXnFۣM6͖+[nr N8vUN.v؁ɓ'裏FV0p@,^g}G۷/ZjvaXjUR؃bܹ4h:(n=z%\&L*oߎk:uJѴ]Qm=܃^z!//ݺuw܁%%6!r[=xZ GyW\} 6 ۷oy睇ǣ K,SO=?5jTR:Xr%Ǝs=*?K/y,//qbذa vZt5)իW{#0uTl޼x3`ذai)bƌ9s&wk&{9眃{7oF^饗o.G1rHl߾FB˖-? wq8$QRR{#GķmA>+VwcƌA,âEPZZxj8ϣo߾:u* ,]W\q֯_IlٲCE޽1aԠSL5k`w{> Ğ={PRR~~:.R|'x'0rH/z1cУGzv9?Çc߾}~?˗ogW^./.\ Y:t@1c $.btMxCa˖-{1|p믿?x'Ĺ`,[ 9r$vZ?ʕ+f8Į]pgYgaÆa۶m1b?o~]tۇ'|\pϟkc꫑>/"~iwy2ݹs'8 TUUƙg۷cʔ)qM0n8TVV⢋.Baa!z)̞=;w~&B ͖X,dee%jժ -Z 3fX,(((֯_ȑ#X,s= KA˖-`߾}.\b O=T;s bXpy%GLJg ZhtM ?s4~_&<[|ył^zU>$9眓[KX,ے]}A, {A, F8p Ν;vڵ jkk㿿A, o+VbX )`޽UyΜ9{SWW O݃X,KIb;LA.]_}U3%UW]e+8_}ło1͛7m۶ rss> ٱ+ O>AVVV#$<{ǃX,ӇmoI[o bX0y>lV-;;;xd1bDłm&=y ˗/O?LȇⷿmłYf/Z(7cڵkl}A-<={ ;vbiO?Mӓ&M bXpw$kFcX0x`߿⋠gϞA-?V4 x [fΜ2y睸p ~믿rJo[nŪUpbڴi 8 7}˓?pE%6uTwqxgQUUk׮NcĈׯ~i6z”)S~=z4>lxK.]vC=߳gx 3j#aֱܹ͍cG=96mO^^^o-[ ~Eoiر# &Ν;/BbҤI㏱|gp N<~mڴޛgϞqA/6no/Æ ƍQYY UYY 裏&T7n:߱X &L 0 I'^{߻uzZi;鷬(~ÇGǎal۶U9-Zç~W=8K۶mqq% ݻw[/--Eqq1>\xᅘ;w.֭[Prݻ[lA׮]6p)%x㍈bq8=O}nƍ)nutG!0`jjjo$եK{q֭ b޼y6l:(lYYYhѢdn:yIIX,1gAp#g@PWWsIs J1N5uP器C{̙] /Dqq1 .LX-F&ӟϏ{|AH\Umڴի1c X"ԡCL2?OnJ pmJѣGx{âEpAՏTe +{~P]]l fUg+˖-1cƠsE/~/2]eBOVbƺ/"?YfG.~3t)3\IYA܈"fpl߾=!tۓKsN̝;K/u`7LѵkW=ظq#>S書+Z֨z >,~_⮻B}}=.gwELX`^|A~~aԩq/2={qykӦ ?xlݺn\5 {,.\gy7o_xծTdU|a#??}kә@ѣȾf8p |_]399|O??֭P}E^^^u۷/9wG! cĈxW*֬YGyGuƌ>z*y9?ˠk /$Oطo:¿yfWJmxѫW/_5ʢEdӇؼ[Vyן&MBh׮]0iҤ2b1p عs'&O _qUW:~^e̝;999Q)))A޽QYYp.]Jݛ=>lHYY1nܸ32EEEXꋺsN|{K9-[K?vZvSOYgr,\7'|P|7۷Cvv6rrr2fgg+Ğ={~R@Ԑ-Xp_%%%3SOſ/,Y-[… Ú_|1ƌ1c׿EEE FG+= #F?ǪUЪU+ 0x .C\'|2}]#??Q>|8{1=Dvv6>$Coc"t3oǙg^zSNغu+/_-Zoӧc!;;;~ĉѭ[7vmXr%/_SN9^x!ߏ%K`׮]6m}еkהWg/~ ]%%%ؾ};x 5 +VHzG瞋ɓ'cܹ8Ѯ];lݺ:|M^;v֭[1h 7 TWW'Ď;p-ó>ٳgc͚583}v,YF²e˒V[#W7pYYYI߼|GM7{ANNNбc`̘1ڵk>CAVVVhѢ' 8㌠uA.,ؼys;ΠgϞA^^^Э[`ԩ~&~_e'S؝;ww>:hѢE~;cAVVVЪU>3ݻS}~:v=z/rR?;/h۶mƁ{'8餓08묳{,).Ncƌ bX_+Ξ={ӧz rss#G VZņ7&Ltdgg]v &Llڴ)),C=^ENI&߄ ~w\mrrc>`ʔ)A݃gϞw߿?t&>`ҤIAǎ`E { SO o , +8s 777ڵkp9mm>(d\xq{?sIύS < S_g1a,ZiǮ]}ݜ(++]w݅ |ljq4qw{O?mr A0p=G2K,~'7xsEQQQA΀ $o'+~_|1N;r}>Ã>G?jj!ѫW/xhݺ56oTcփ 4b ֭[;m۶_t;ȏc_~_w!9"4_nF,[ =݋ /m&[ 3   d 9"  BƐ-X͈]v駟Fݑ  555pCM-a ͈~:cAAcM-a ͈ݻ8Ԡ۴.ҥKZ !CH}YH}YH}9۸ꪫz1@jU߾}1hР&FRGRGRGRG]>:r]޽{7B>>AA!c"  BDo}[M-A,,1@ y'Z!H}YH}YH} ?bBRVV"DBB[DBBB[DAA!   C AhB~6B>>&dݺuM-A,,1@,|1c.uQ¢E߳gzt8sꫯ6/˦A RGRGR߂ >}ظq# b^cԨQxGq7cعs'JKK6؂  li4gv튏?:u+N;ݥK_ҥK1vX_N83f[AA-b!'':uAݥKsq:t/˗/GmmmZeAA1@W_}(icӦMM =ztS d# # oAG FbҥKm۶eZ$2uԦA RGRGR߂ ā{^^&" ͐#G6B>>z#/2ğSl  MEΝ5M-a4]taYm߾L| `6_h7<`ۗ awأUC؃L!}>ad  H>FqH>Fqd".'ݚ||PDKp`۶mX`.r)/֬Y 7bhѢE;۷oǃ>mףU]n2yvFldgg}QZ_~Y\H] IDATݻK[bȩljzn/*B~P{7-EEhqZgen !CJJ0_;S_c;wF~P{7N8]ѳ^} ЪeK|!/kjUm-:bt+.%cpI lA uuh]P^sq1;~Uލ/jkѩeK׺ynw򭷢j)(MS 2q{q1706'6Z5zn~ʧUv6 5;;_֢5vZ!a9q@֭xeJ8xÆqX{lC m^69%IU]ܷY malmM+hڭ[h]P7Cߏ r~c0[de%~ӟ"G9b\5~^Oo>zO&++ޮT]uSﮮ@Aa!NX*ŋv55Ohc KKㄓNדohiis&v>VU}ݺ&+ 'NL_>Ke8ځY=۴a zx;d׬yiÆx[i2 rrSi['tRB~TUWyL'I)G5qԄ񍲺-Z@;d.`_u5N4(!Ho/J윜޴aCݻvuʍoUvLWWT$_ !ߪThSi`ӆ zh. c*58hP|LW2@Tp}((,LT9c g|ru:u@EvNNREz9s77h<4}>(y/؉qI'aӆ mX pݵ!zƶ*޵ +*euyi{sYtN6m؀558[oͨmÄh`޼yسgO|;Պ+P9of;ŋ[ÀyeaСk[oկfΜJhhii 3ШSWL鿹nsrPζBԵ[@5*A:. dV0.RoCtV<郕Hz=2L)} 2z8d)8KWLuMA5I8դʓ3M>+# ҥjě%Mx4J)(,LxFVT~&$jSiPW^\qh196~]amUU6)1 ?YW #DAU۪>9;xA.iShqc˳])*t5卲 '4Ɨ/^T]6ko8T,CeyЌ)lIic ]޵[#Pnga^߉Srt!b8xb?X 'NDaa!bX6+_~;w.jjjpcի5Eso;rM( yU>pJO=RX+91'1R/Ը}W1s蓍C'5k0KFJ`a ]lG*j"mʤjWQ BLW U>i1W]7׭CVS(*Sz8ݹѢ %3]EQ<10 н.%HOV\:,4!4Nc AvNN 3Ig[U.2uljV1MpƊO8}.1š;h@7qsi^KAqz9گn 5go(yM>BbrFL@j47ǹ4!}wYp!.\{v`,X Rڪ#M4j7ؘ%K l#ɦ{Y@O\+kiÆezMT}ӆ W]z 92Wi̅Sj)#R_vHÅQIiUNܖ4E0tyuK,T7a<ئteF$-Z6cNMuBJi ʟW_*Ex09E8C}[]f5>C78YL4%W? ڎc3o"?'pQG ͏n ƛ-7Fp!T.<3Nӧ*#d1@!Wr u$=S+CCWbW[ *EMĦ C=ઠ+**7",O֪T 7Z}۝iRY2kлr`s(L)i ]c W:UH/b4C͙A*l [4o0yT| .EԩR` C=09R"Ky\C>pi*v6kEN|}є ꓨ#M+4S2+$+t=kr&m[y'm趪*l$9<|3F=_'l{ɫ{zPsDa9h}~W~QT_ڿ_tQ Ɲlz^|z}-aVRVA7:h0¸xL[Vp6 o:&M]W{3׹ Kp6ʇoi%ki+ e^^Kryqh&︊DŽRD{h>dP4 +J)w y=/wފߊCPmV`A])xh)<ѕ7CO:݀o1m]rȭ->ƍg Oϰ~L*n4rEW4Mšκp-E&2 */r&5wVWTݓ ϔGl{O] .Sf#=,VLuhSLs+}nDjjm׮Xyӄ` kZʢ{擦 C fHSOOrS"8#2е[76{m" yEۄt^RFLz;&wM wL͓yK eSxۄ2my\(ܦ|pI8Og5ƵUƄwZ` ӷG*| AaJSOK7i7^Wi(\{u)qjwtL}'')kMrz9L*EVIcĻ >7^/ NÕ\]eF>>wAM7ɍt5UG9t'zQ>2 r-xhNW,s@򲶾K?o!MKɤWv0<;7xzvsI..oӄH6Q{aҮ[lơk%j>OlTiPi5оEZf0qmPؔ 璾˥ןkefhM M)h%WMu_|֯ SΩ(ad2&%->kaB[}5@tc661g []g>jl]n\D9༯[ V=TэEsoռ$me[tM)2Mjx3*bEq3 &byЕZ$jg!kzW73(&w%B/Tk<֔mן W~3o [[+tK_룸sNx?N6ڧ|ڻ^Ǖ~oz>Ffh}ҋR\6cBɮ1FL{G"b4Cw@͚*R@I3uT7y6M8 * 'mߦ̓M [ˈ\-'Jg^|1 $nD6mӕ0J jviW2q[:oQ߽|r7)2 僫WD@۩ϽV܆w11vwQqy L~E7MyTKX X5*}+oeT|^b0JտSQ9ylKRdKm>],sWی:w E f  Bªy9.o&'ܩwu*>{;9VWһ~.˫@q-^o*{&=H딩įå,RC;pL[,[VoN~zxL\wfwn>nЅ9ObfN][T>uʇ0{[8*vT\N2O)E¹8älqN4<_=={&kHq:3SņzP S>MyQoFp&հ#g+F*\*蒕 OmnTN$L^O[o&#Ĕ?H5Vڟݰճ]x2κP崭*B(2:$/z۲}cE/o}}VF}Vl} [*\mM)40NĨ o1աLD1Z}/z9t=]!ui-X[]1xOl} 5Mt/R|gЦB{)j CA;hnSL>誔ɓG d3wtCQgG8Oʯn$6g<{z.3+gZѣidPmulRչ(RY y^r=~X>ir㬏2NPʕ+ A=t1!6ϗ( -i[ZWw*i69u8:UܴrfqϚS;#H38N?Ger]1X]0ɝYgKýoZdʋ>_]&_68t)- >Mq\+&/?Lqp ^^.O¶_(|?އ\^NWc]}>)O (~˄ˍ3<&6Œ 6fçM_O)>XZK]Q8ʩ;¾¯|WKHF fڂ!8}3m|M_t_.-}`Q09ӱx<w<wk_ARϨQ)xMi*;:̄ǭcdR4:]Ca㺾XGQyVý뙴/uuu Wgr5LmCkr[@ kb2"R6+8#@wY0,:mIvsI_#3(}!]r 9%$"H3^3h 9S7 lWMiqWio:P=ڜ\f}tM3 QUU=/ʣMf[AH<uFo~qв!C[MӍHf#ͽG+./l&YgھG߉婥i!iPO=g5(:+.wm'wKkڜfaʎ C/02yoO@ >rpp:gS\4y2=sr׭[9 b4C͙~睤i|ǽ@tl+ATj';-./ f[-3mayoGLhPŞnRoich顛~m}kWzrm;d*CNAfXEwM߷1Θ?m m P} xCڂ~1{vp:}tlL $KaTggqEQm7q ޿}673q>`gKES{$!H3*N YSH{S)Sgпm2 *m4m4M􉓛9ĩS;+&ylqU"F*զDuMm >g]ZqyLM[b]A kHC.\Ƨ<-k߱bڛ~W:sg>&-o}l5)\v`~bC 1@)`ҽܾw$ǡ>_D֕dV7fq[L zFgn2>(ø<&o'K){" IDATgOZʰQ4lڰ!^&n DY Xܪ7묷SNA'LAUq3OQ+@t%ӔFaڎKVO8lZ?Q@J]cTtgķa7GxXoOM5LVmҴ]Ӝ՘}yظ\o8<#H3W^AQE+AE*蝏[ʥ-1ɢou pz;+ǘba_냥l )gO_q[Mdˬ*L͞>=7#zYFz& kJobuEkɴ I119OLT/´t>wMciXȥĚm^s/&\hՕcaۃKZy)i2hl0(m,sDQpWLS}.G MS϶K*;%&T)ԺFH/-煳y%0+'U~+~RUW'm Q>AtljqjP.i8"SSWJ96fR>ltrKE%1p4XcUʔuy2]v0ӣHť0J0\+~.LeMa}|Ewlw wϭʮf8n^8ujZ`e]MÊ+RJ7wT8gUXUO[c[%fO>81@K\02$$*tXpW暌%ΈE yt@L}ʃ[JysBMdu%M[+|둻^}qQ&8*m4|/k+W~{ rѷ:Ze99?v:m,OwM26N,.>s"J>mj:Ss`[!끏7}] _4\m[wt\g +d1@!O=)vͷ+(7}Š+"rm2p^~Kc0e (ӝbJCaF.lwFWB7ҷ Vc|'^VzmtkFm ,jHj5..}[E=[pضE1}asLH8 ^ѷƩoy ^}Q˵9 98U/IFwl=(Yů;A2mHL5 ֭\[ fi/ɃlSG]]Qp@a:;Qc &Ń*&aV?xL n}3ኟ& jxmA>G__4w*0.O.oQocLYFӭ'L}<ۦwLpuYm?Sn+o^}ېϹ+~uס129fEk}ӺH^tmg^RfMh9&KI[mWN!0a\z(+*0Knpy=R6i2dc\S#W)'^[(Jo[:Xifſ$+>x62J[ui4Ͼm4}_lMWhvpp ^c۪k%5VSN۫~}~g?󄃫o.왔(up3+]J?pJnKw9U_QZL6G!B۩n4puTW*u\xzXZ?Ӡ7)[7|8GlD)}3&j_Ϙz?/!ӌ2a~* hR)ٶv닂sF.m̔+=ʥ `>_;so8}YxU;6S2a>sW>sU߾qdwasI]&aZU4=SwX3LT.NQ.0wTLg'(ʾMr]Ţ !r`&/"r5/I´eG(^=N&]n 3i3FloP29sqՆ1{t?wʡו^v>Zڝs>w+=WZEm>﹌n1@!nrMt a9۔RjA_Odp͞6 cUCU־ g$N<Ux1ꐗo}O_q 09ѱ=WtY$E}HM:>|io_SY*^nbi2| ;P_-P$Vl ]v_|.}.'-=|Yu7W$[:XJW>mIyf )$D-&7V6+q U9eI?#  '`f磌ns%\*ݓO;K0ShZoa&9;لci\:igmdtFz|q9j 3ƥC8\E7=n|Td5]>]{ZC fշ܂=xojEl Ud] g䵰yM*!ٽksrbNӷ7G@k׮}Ƴk.tЁ T6ÀpNw6» n '筏2#7n|/^ߊj;ߪӡ:iÆX}1'6|8rl4`Sloj366EҵH%>+++cPcOos .ghs]7tis;M{uE][tp1l]i-++<)r.Y{Hw;W| u=* W9H[ [{gCšHu\[C0e:ǽo:_F 0ΉTVLq  N^.~%àO$ojdR}>ެmUUW] PՕtN&]I)6o}2 OT/}WQ#UAP 00{q Λ([Y%II#&1JR퓖+A%qOrLKˍqQV(aXs '35CVwyK0{Jw:ڭW5Qq!*ER5>xLtT"@ҕ#}tɨ<>\ݘV\foZrӠF/_%dlXEWY|ҢqFwaSܹ3z9;4EڣOa&rqکX'qKO>ڥ!4ϪJk[UU5)aˆNQ ָuG>ma0@i6T [.GmYT Aǹ'M4Gυ#a@*ܭ3tR izO K9 {tɧn;n2 ]7zL t(jTyQ+">|;sx|=&tô djkɅ1]f$RF) L O_d`=}=2u؞ѕoM26UUſi9L[2Ε{1Vgw`7QQihY(7Ĩ?S!z&@G) ٷ뇤@a:if|c ##g_-c AQGaʕ uOU~rR\7d!W G=ʝiS>i5)T2Foɓ'PV"R#׸9'9.~Xa6S} P\!e/]Ǻp4{مOվ}pxXYilĠiLIg޻\MxL>;r(onWFTMnݺ2L2]m&Crϭ/Vɓe2Sq:VmNW8i=ۋ*Q>'ERWwy |E4a"kk*ga^:vGBa;s/Sg|K%1J2 ͐o}M3H\W|:M_סd&A4Nmw] #'7V\ ty|t}Y#s*m[\ 3W&>%#FHn&ϳDgۊPQ~>J\;Hոrq7 i:(ⷭ\(T28V$U~o暤wRuq|. "մE fȢ9sg=JqW+ 7XF)Ӱv-}TWZl0p[u\eBжb28(lE?c`Rjg|z<>ܹtâG[x*epG(y$y a&6lӔmB 0αm3yz,QfV)N6eJd*~-o* mq)5:W epۓnsN"~3A_ovcaHJR 7U~>gU| tWz>}̷+*'tR$#+uT#7>* &TZʨa(rp!rƃ;@F!LyA߶UGϋImY1k28T9ͭgJ($k[-r)40'=ϵ.Ͽ|]eݼRJv[볪*xäuE m50l {97=_FS6ۡ^yw:8!M+!gs7.|;b4SLM!MGՃAئ(E6=+VHN\ ~s[{inڰ%(uYmv*m;zx=6TzcTؔv}۬a){Ʒo{ƞ09rpr޾V0o[Q&ckܧЛMisqTzַWXO­nyR6C!ʭ>rd H3[n~=6냩:Nr^*:IwtL"Ue;X5g(|ԷaԩS8\RE((,L8C1MTْfʞ[cɦGmGzyѼߩx#uܲ=Q/m0qpɨ S#QMQSzmm.1¤ Ce9uT9ҙVItgzrXcbsIOb|l 7q6 %ϔ{ʡ{}ʚ~Ѝ"WjlS8lg7I*Bi؏3MdYیYݑ#GbnG7᳟Z)&Y8*\ܦ>I۹6CKbG16{Mu Tn .3|\gȑ®F5&S!qubXb1@c~< SPX~HTú>xL(0Eyf c)\̭reZu΃P\a'tL&oi1)H-s4I_?DlsD%2_iS|Rm NUQJX< t84j ]hiЁ[ v6"uM]Z+(ן֥T+Rt?p֯}N>]GB=k>m֬PCSM}W*^R%W]!cHt=eo[UU x>&DO2`u#+U@SQy?9%A37Eakz ͐&NF9a?|E"F'+z#>̞| ,]N˖-%\bMUv[zu%'Jk =sB/**4m-M kRo(-[(:\ӮLi7@(>Mޝs5'^6y H"FCwSO|oca 0r&tVo]θҢ+^z^LۖgPQ>oa6*`TL6'O5 W\q5TWw5TQ|W{uIH1@!?[ ZF7}Ȍ#A>m9 yU<n7X]+!Q4?xRZ,>j#OeTŀnWMS`RBtM6./_oug;Pa[ѳCQ=ʥ 1fm[]qA7/0V:7pIw2OnJ¬Z7w^hҌqyNK_E0l>lqpbcT/W pm0)L>e &9] tyi<&"#D 3yCuuKJmGiWiܰ>g'8Y8/ [XAonoU0j ~Gxq3t}۪P{W& k0e7ӊO Gw.s%b49'<ߏsЎMP̦g k2`lq5u)m)=ɣVIrV"K*RU0]_76c;kQ&8mƼo~SZG>T~]ӷƅSر3cjWa2MR&aɄ<mg;S> )>Ji5E*paK[ln"o{h2`E*T't+U\zL}d1bh+?1;?n\Z]Q^)_\\W?]ہ~; NU7>=|Xڴ+KNLqqm(|0,OS5d{ YQVi\RG m _/϶]TD$M#3TWlr׮ *iN8Ab&kzFH_1e2qVu_oa7&UtL2 Z(߈o< IDAT <>FqעoN7SlS˛kk+&w#ctn^pW>[\e.]>J~}Hg2 ܭ':>wͻdzciza=tY9Lʗⶭv3Z>ܤzS%3W!#bg[5d }S <{wkY3ɨ_ת_حV5afےbkUMDm>Ƥp }+M7Nҁ\|ASyVîqգ/Sk*2%McTY0#}}T#˦0<;tm7a5 B(47B\ A0 GM[􁑆%zz%#N؏~ { ӤKm1,|/ Y}ބ3\LʒI?v| =D[^Q FQ|sBmni:9LOoi:sOyrՍxxMiS3 a۴-/JHbc8]E fȢ9s0hѢHEcw4WQm=ʮ{7D4HF$Ā0acTib `H *!. "8DLaP1=N3&,d>?hXL"Rnvsnb>Ԯ}k*v ~⌋gʻآ{ U  >ZV-qM74l<65ږDѤùƳPdž^6mZ3av/__ٔζhkicv@B,os"D!p醗iSS!~6Iֹe/j7%wZsqw ?AkдPՈ*4@ _o>.#o {F@k7oz=qʢ U^ uғEs|'WlxI [>@(M#֛={ŋ+b@y-@],$soI)۶ZlU~̍X"6rږ7вOnիk{-_[ˈе;e~lRS'Ly|Tc&N(Rͯ) >xt3_«+8IxIC]\_~2>Lu6yT eBGɔFl<9OF嬃i2}t0:ߜVͽKTUێnj hs^rdan O͉4$x1I@8fLˢq( aʔ)V ]\^,Ct). ,&UlߨsmzQr]㶽q.b{N3a-({L_zG+x4o#}@i'߸3ǎˉ3PAHz7 Eۺ].̑3ΈP7:)0LtPicta+CVGhZߡ %Jr]J)ZEXmA=JTƟ^.T1FjS(:7B " Swt\c. [Bx6ٌ||买['4KR`(`J@Q*0lJ*kS;آѰ)9y;+o]gFRᬏ~'])tAtbҲy|37RA(H6P=1S2s*~p7-AyYс]Nq`"=W)T5p…vVJ!H.ۿ)HeLƮ/_uyz>rpG?ʒ=uLrWm/QʙGyTI( Bë[\4EAl'駦+mqe6l0wڶGB*Z6z !>yꪫP~.#g`5'i<:l' au~S^aI3BB]]{.8y2]h\<( :-߸iVf9,Aevg>]|) {v.npرwljc8BRb`[J#a4@ /VKnK(e)DW1OJQJ@aJ\Hg!nhE@olLߧe>Vmơ N]݄d`Ɨ`s<$QΪvSʧeI?9_j.f|"p4L!֕7Cu̇oh}nsNI ȳg(t2C*\ (+R@\<>].li1FlR [tC\S1Nꘑ׻6.`Ц)j@");5- n| 'W*)7RlT/5Vf:Mq]HHTP~l}sNIo@b}>Ci,0T-Դ {mQuN>%R6̺x1w 3J^7ؔ9*=O7c1)Jcƭ7N\Q Ɣi@Sy pPS\c)d\h= j_Scp/a`OؾQYh˾l)#25xpԕEi4l&xl Y.$jKznu%GhflT(B?lXO1Y nQRqg E]6>jp`~Ek8 6w:?mc-2uѢ~{9@7ms)1p ?j~p! rಱ1ySQqž_"R@pRފ)Lo7(Po?W[1Oq Q>w׽G=/}1R^A1lbeB.>oki۶ɓIs6>_I*tebD|e|,YjasP _PR2:(l|a(POM"zS*8M*Fi4(B" 瘧;HR:T+R|{K|B`˱>`'N!.}3@-oYjMx}t?OuM<&"I=v]Q0.b>WFS=Q"9}cx#c4=|[h4+O:9D3K3TP L UREIP̽!|i^4sܳ&[=.ټk~A[}Gڜ.Hz(Bi8p%@ww7\}pqe`̙駟O 3g΄ɓ'׾55jw}0|x_oɓÈ }D%TwGKW7e1[>;:kwسg&:(.2te,w9ECzsٳ]v!4\ŖETV͍BR!_DE0Q*f[Ruӣ1 y[(9a|*v,vVګH"H_Q Jx( ?0YnX`|ɓ'C{{;c|'ՙ5BPs'[|ߞe$D( s 6 Çe]]w<7P51rH>|8y~G¨QuG owYڮ.r(BGc|PhI= f1rll6 ]{׮`LH{B鹢V;m;a4@%PU Ia0 qH8,3t>].uJhy8 Ms)|Hn Gy&Ncƌy~)֭[Q䪫G`9r$'?[ñ+UM`l-B S=Ax|q]`yq*]rR^0]I k=RzM7~cMAFx 5Ny+5cǶmuM>.Ql e< tEUF>C A:=_fۢ| 5B7r*ž Ie۵inn7r̲ZBP"crߗ.\vXXj~:*[ĸ<]u, \8g̶2 wug%*\egos>[!mD!/O+#٣4@ݻ^|Ĉ1YgG}4|0b̓#89d4/g')SL&2|bQnTk l߭L>7Jzo 6ӵd>PF?]S7WJ_^Z"nDQ#lܵ]]uc^z):l^ݵ7C[K ʊ>.Ai1Fm09VRݰY~SbjS7l̶fv/>E]ϱM^IEqbxɺ8 SJȢ4@9^y啺ӟck`ذaSqy>1;w.x89K012/1aټ6;S\,0ێm?hnK-\_tC\hJ>(<(6Hyl5$3H겵$ ߨu]׼zwPdfԏE1X9z5c#'JE9\>/|ά*,Q /O1n8kso0~xloo/|cp~g ,QV;:ݻu~͞ G|u۫jʔ)Pa?0atV*oDAތΝ;3f͂^}_<hyW_[Xƕot}yX ;wygW=V\ߡ"D0=~1oѢP|m~ߡcm &q@q83#Z-ZT#|߱rz;WǛzzGCQPs k={@7g%sTcB}wthkhgB^wVƾCWpGwm%wqZmWv14nwԜJ?8~6ϕ]jUU;cC\}utJдo߾}y3QDí /">馛_:<&1c@kk+?y _W&NXWN>dزeKUQy-Or<)/ ;m1cV>0o1 m+kͻ2q=&-Bg6 Oĭ&?]xu=`'ʇX~$+uWU)sGwnD89ϔmB)K_T-|Ys$yt)X;<[;|+˖-SV^~e0a {^|E8C/ G?c±3tKVn#J=B4l4Z#1tWѶJg\i,FK1ڽkWu cY(,)347驱:+PeNzz'cIl .cåPcƍ/'̩' M3't\E&on\q9n|SUΧDcl4@z|Z~{,X`6կ~'7ӯ}kpYgAKK \q0bXj-*lDrFHmA38(^NM)x5VC{ҥŽ1OrAَT`ս5kj 0s8^KȦv3ҥK.#`'G|~0LJK>nFCK=3SNa7+R-L&tn*x 1z{_7u2!F v ~VCi87^z N:${aڴiwܧ>)[,^^{54i?3| _`:9b7s  IDATs.Q3F|%F6Յ>1Hgs}'EuV*5',Qd"b VRu((>Ph 6_=D7!+ETqǺB\{ƝAB៓~d{%Ӟ26Fq` ;˖-(|򓟄O~)s j)=6cbp`&ȷhʄYV`鋙y0ųR}SQƇ]9)W9֘(ɮ0?>ߞ }$6~9︔;\=)p7T;R{Vzf9`m[,%HFn1yױ(T^rߦel֒P"#!) VvLYգGQ1Rn}I͠+`klaQz94MH oLS#6gNjo1e*R:O4.K( ʔO0Bм2YhC{GD ?o3vTinT bQ1o쐅SF28cRVL凒u:"V€E2S\4uM6J,ҥlOako/\Byэo:o~jdH; teJ-N!(C>Ϥmzn6l3tp҃Be<6OaF}[r) $0C&{MHp˻sϭ+\'ae9s$.) @i 1(Cx>E\ڱƊ`b޼y5 G^3HŤP{ ;+eh%"y޼y0c V J>\Hy߇Xۜ`.NTxd|4L>|@ȼ^s,NEUg߮ksPS1 HV(Jbh4@d PM\^ BWiB/Hc5O ){5):m--0805C"{7ѶpqQU9uiF`H/ (ݒ+Ji`!%p2?)'<.NPlAYf -xJ5Jv/Djq h{? '{z8PٌؽkWTP';W6{vI;B#W'gGBdd+äP.տΏ[-&{tzAnѡ/wpzCt١4@ kz]t( %b~9J]ůAJa כo/W ηPv1b<뱃=J}mgj{';$ze\ 1 -n7|;tow)=Д [{quUnP5]QP#'sͱǬCw^( ٳѣRӛLc7m)T<w9Sؼ`aF8k!=ԅ,KpW^)!4[՗J Ii $^95M.lKb+BcP\X[KKrᭂy~%*)OΧZ^{wH#vAZ(Hѣ.T@dS{K(1y{v V 61rS9m--AiP:nR?EWlz7mxݟA( _]]Vt jG.cZ?Jk.ous[Wo24mPaqѥF,NEHI) n)S8iBҕ0~ReR.̙˖-{OW\*2\]qSOa 4ӽvUClΜ9$b?F4qߗVL9sn}Wr+XjO q3ط`cD?L/yɃ^oL'5*y.V\s9^@DzHV1vEM yCm*YR!]:Fflo$*Qb6aҏ1 ͞75݄]Vrps.ͅ:}\f̘OoZ;.',@Œ^]6Z&S|}ioJ* &l_LIFh}Ly't!)3J%;H/[>)1ѿէ֘S6%r:()]ye} U .H޾i"dFǕb^ G\po-&?){)`2Rrlv}m؄{T>O5CNtzSlP ӳ%qjUIBHB z)Vl[_uz!P=&/SXs}sasϡ}e[6um3fbt`+DV`]d3cڌD8*>2Ψǎ1(7O DCҀp]P G+EU(0sng1VfFy7F}eb`1j}(L=,Z:^*HFt] vg.Y+\8ʖ!%\J~HF;oN R;̰( 90oD7=g! uV^%Bz{{aڴi*ER7;7vFT'3E-aRwFVj>njޚhw7c3s-D!+@qJ,)ܕ6(yM==6{b D"Β4Sip>P S4ٛ)bpxlԆ! )ORPjyw7\r`W…g!Z/ !)9l3zooLFN(PMHPdrkz1v7**%99oR+Gi4 $QJnU>6;:Vc2z:zY.)pJh~E ]0}XT [[[SRܨ ܱ20",Ǎq .Z;=c6Z!fjL$rzD-3So:\FVH\_33RW(Jd`p` J28VM"+}Q7 2Egu 9-'(il|Tyxu96_|ŶiUbOE;mȍ6YDtp)<Ljo3 >#C>: \F:Ei4|ܵ7qhxk[$3Bi/Α:/HRF΂a{WyW\qэLqr]P"tȬJ9_=T`M/0VFPӫT$yJ4;&Z= 9;"m--u]bh4@+}{ 8I#6=C @H4LJ( OqzH)XK>I=Ù2 @A/E g .o͓?>`JU#~ wP7_s6ei tM3ySmGTG2LZS7(PBi4(/)u-XF3%>N滮M4vlo7-! f(bh\EԆbX$BCk ePQ]Lix&}ʳkR$sÆ ǜ,MY$ ϛK9ryu2x˼ 'MKÈuPx9IT{$*%aoᜠduܧ#Xuc˕ndW.c:n֚63[$ Y 6ABi !`DX7nmaK!,Y޵uJz(~gFGq>o)glp%KX룴5 3M ȳ e\wXwB2X yzR@\<~ݳ%M->$R Jvud瓇(d2BGW!ֶ˃+U,oەb]ϥP#:jlP#o2^[?![_ >*Jui-7e4[ T I!%%ixp`f?O閚|!7f"~Jz|(xy ^uS@/19>ZeKc#$ KT.5v=1sTN lrPQK(q9*0EEFMQ %877)D:0`xm155J?䙷j Q[LѣBySBR[C]]>ErlKJl d@RTBsEU(O92m'2 9RGVGi4>JflYgx$@R½TPPptsQ$ 2׳y3ܗ4ߍf]p~7UA[7ټob+jpPe[~]\n 5)uΨ]yp;z$ƴI74BjdߡP'%%O(tH4@ W:)Z0F[pP k 6]uEz~ڃ<))'wQ8F6q917,(].xQ!99Cş_}iw!o%Z ˢn u4@ [`ʔ)QX`zt6\Ö D-k!Kp=+Du3fRɰT_Աxbk,8n-E^9z)H*W.X2W}S q,%^uޙeltgLƦ'ݏef?Ej};RkKlQ FrRh'nօoµܫ}Mh]EHP`:Ry۔N-jY__$RsN/3'cqx4ΰ548+GB$HBUTJ mnv XbѶnCaϐPkhJ .o^'eS %NbvԐP,6VQǗ2):b/4H=ev\Rl:(ʹ-kv x6OZN8-bM4Y"=JXqm#&Xtu@5z0RsN1?Ѷ./rE͹m*.@**Ll;5lc Ϸ'Hjki(Fޝ;wafM"5(Dq`sUSGĻ hpeGџܹ\'q*cӮR(zeFi޲}Y6iB< 1T`ǁ Ԃ'}NZz 6l@y~Kc)HTIGoB~OK/|n]MaŀXfҞ*y 3;u*\rlC=EJh/ZNRr^ja`:b¥^\HfYCR@|AIy%lC._4AnJG= NŸ^a{T. 7׬A˛g!) .eO9(T1ן &sOV}QZ)e.E4HSkS |wI"fݺEdRGzq3ƣNXk_)ߠPR4Bx(֮EcJo.=(ʵ Wfx(Ɨ͋H*z"% y`oW_Q.MJQ)VN5wmcOd鿩6C9T5ӆc/?Jd5Ym UQ:n ny6 v0EA~wq ^FG*</wqjL!"/C,+ER1{s a ^\9FKN!XXg1L1lN "Mg >رml!E@8kS(?E4@CU~KVH@ar}AҎTBg׭#84Ŝ3Y]+FOb&BFvRË7NdEmCzο=rd#${2Par$Cc bGn牢QŽi@pXzg$$qԂpEwUa 'wSCc13^ܼk*R"ZĀ:>3zߘ"UO2jTٜ? JDl0!.5/}ht({ܖ0T%K.`p)1aP㬳Rݻvc.~lV{BgSO0V&^IxCCYу!$ MfJEChOh[0ߕ<[.~ 1h[c1(#i0؄Y* 0V?YkydO5Ua\ {n )ٔB_۴† KmLNƦFSnB Jh_z|R,P4Vƺ^ ĺGI!37ysA".8_gHM[< m c*N3к8GaJy5zc醼[<-}/E",IKovE9Q>Zn^ SoV)֟ $jk'iٶcQ%-BccP7e 6 ih fY4 AJݡDc4@t'q, 6cIy|}yI.OdLdhcڔ Gj*Xf.n.zIƫd/BB  >߲vf8iҤo6YATa"$Oq`^MAec|'{/8RyzGGAi!?&ea,XϏqrͥhR^\SJ"b&]S_\D:a'dSޡFhalhCl#!M6 vŎ,֐Kb} ]2Po1e~^6zl:vu$ʨKZH!$r)Ph }\bуL3+||tLgP( !eB>\Y(}޹l҈k K rqޣ~= nSR 9<'僔N^> ̉Iףbt)Ip[ z&{LbjqQDiQ 7a[S{|oDARoNҿ=Oر3}͑IۢQt\|=Ѷ[;˹JEL;اCPPdJ;x.Lc޳EPB#buV*5UC5".[t+\gδF$rj:c78r -a2gw 95N:XY Fh}̙3-[F%uXdh#)d[{Ut̙3?p{>"3g~(k+g١4@ OMIBW7(Q1SKu @Ti^z>ƜzWWbI,"Y|LH`Ŕ&t/[Dm_BT g]DĴ?k~V6]}Dwަ{.kmi:f|ee|Ai48&`^'׸xm4>3ML.c*cCNtNsZK1|mwX_ hhWj>H*6'[B֭^xlyIDZ0T:\P B'vQ&D#Max|sT> *>DՕ3G lƋ<_[p /tvIKLQd6:HH lF[R_j /Fq;5BiP2bGGr6odH 4W%Ry|U_xl6 k}cH_͉!yf1]ZϗtV*ymt|isS8)ʙwIl^;kle]<|C׬J1N6'1*moNwކE%@i̞  k7o F HLk꧁l޹T_͞-zb'-6eL-$1JL0<Qur謼uC_Sbagȴm7`C:Brh[o}+iu)ܾI9iu>~Q>4ݰkFl mK-|I2@8xLd HnA~+!w1uyw7<G.H ё>u7򎯎gG`qVH+S!cRwh2[C8|K/p&PʩoJ@:z>ƝTTD( ▮.2e =Q +P<> ѧLKԕ7f4QիWHpZ>' k [[kHf Y JQl`[r35fpT^V|߻69Nh'i^h' kԈٗQ ĊnG ߟa"EP%ybSP#.$.е]a>:(em*2 dKJ#ܓRh\u0QFʺxhUdr5Gk`]]t{(QbI"䂫tKbh4@xW믇^~e8o38T~ƍpM7A__0qDhoo??XEl(iZ)$)} OFVCW|HKsI);v@JŞR_l%۔Qơ7Y8&}}P4=~Ŕ{b_jD|tjc\ E(㻄%\pWq˖-3gƒ>~e/3fm8A6%xj ]Q1$,¤+3Ar V_}Bvfhkio*^1u@) <&к:( './ۖMds9}bRXb) 5k- ,0ydhooz-OܹsK_z뭢|GJ ,7sv3,ﶖo~{n=z4455E`SmCs{a0S+$zo6äѬ)> C@ʰxӰu\T+\N6ɕX:>r%4 `#;Џ6/)/<8`;w.,^d<<ˉOTƤ<ٔ~f$Ub0^uU}ʣ&|J^R@>PMCH╚(^O>-o}'l&'BIE:n&6"ByH9BE%Q {97n\slpp- ^z)T*8餓nFxছn1da qAg 3, ʖRy,SUl$(G C%o/[S`Yh$ÇdMEMGJ;R!014,sL" 6ٛ2ch {랏1;ݻwþ}.\/"vmpuEVL`wJ^.VRG!^6m۪sF^IyW%aЙmS7W"+6k&B CqeJ}g![$PXVJȑ#W^{?޽{ .y~~ӟ֭[Y_cHpY` j^AQ}J~7g7:k9s`ҤIw<)76Ǥ!w/z$ /QV'PQhȘk.?hY($KFC@Q1n8ks=ǏG˪ߎ8√~8KκgΜ 5vi0`IrC7++wtSwҥKkR}yX ;wyѢEaLhmm~{5W_[|ժU0gΜo5k[;:+)S`ҥ5]cxiY @kkkwtV*~zX]ܹsaҥQ>ݾ~uaUceSOlǞ={쳫uwtQ;xSwá'<֚:}:6J)zg?&LozjCz\}RۡU㣳Rs8;۝߱'aiUaywwӹsygYnw5_^CCWk7o7cSO4i?t%>>q5w>t~8a„:6?ޱzo~L6l.y}-O<~{O>:9g΅׎8f~ߡCjrǎwXUʸRm|W]lAwTuV*'Pr}6?w᭗RY>s|o۰sN8aݺuCw o{ۂ*P{zN\GJe#Ȣ\LһwxSmiS4Oϱiq7oXR61%;>޸-EuR(c9%B!h)"Dd* o˿ \nFN.f͚\tuu7 ᥗ^N: ޚ MMM{=֭[_a͚5|r4i\nc:!ߵ؆ESE R+P1^(MgR5>\  3$ WJ96$M\[K  TB5EBJ+d5bIsdxHdcQh(c..M`tqL% o\xp{Xf \Ν _3τ.Z[[o;á:;;w-[VQ=z4zp뭷uw{sQG3vAwBCb%d8GHœj,h 2 Joi8d:\m(iXQ0ͻ6yS$P,pv.~\N>]7"Z?5կtApٳpެv@P/ip":=U={iDrVt]ϲNF]6oVl}ї߾vw}X:feueKUB%>NH\NBx>ZW~ 6l~U'cמ={`4\ݕ:oCRҔ6pKC1rH5jT@ҥKaʔ)'pB±xCSǦ;mŋebH6PLVʴ/Jb>ߦ+yGue/FD-?ut8LM|(`N ncJ\HwbF\.-T:]KmDƶ>FyOKI4u9A!}کI1PM%2Ȯ]{+Wgy&\pgCSS[,X\r DT IDAT ٳO<.袌ɕ`"IJI{>;w;,~;`AOQ Eѧd.>1:wNH*YNzKh$,2GjPǸK.$w tP"al•^fFgasM==uo-"y)e\u~62yGG?455͛a˖-5455ѣ#|;Ƀb`),⥧aK..,),Ff$u/7 ,\[M$F;+S=(pi(x0oˋwK2M͟U?U+{ҥŽu=:;m:gi'Xe4@: >Uyéd&WFSuJ+;|QPNbgKR QRh= ɇ SG8IROYQcXJ"*s~2qJrR"!k>S^cXםsgDݼ)cnᪿ424@ty0$!gd=Y|;2 ɥ.=F|`<>//VJNR`p`@^ գ@*f1r0*YwL;8f\3]&."Aid7@2Rx2rYTϤ ]ȇ*k(ԡ/>ruآFqJ;nX&ɱ㵕yiOMtAo!)zͶK*ӦیPLQҹƔ#|)9,Bsޫ}ݘEqW(b 8`޽ڐnCSS/ɐƇ[D)EERLp+Rl ,6WrK*6]0Bݎ=;#!gPIY75"EuRtcwAXyz*B]^0#4!(ӯ3@zhjj<jz"DuNTlp:o,+j \il|& :wNQsT?)($ ػ|ECn1)Nlzڮ.M cf6G\ 1A M¶K4 TRPݾYÐʥMې!i#>^bx:PZ[[Aקp둉P)kMUmԥݹ6)S&G}s\848ݾеw#`*Ák/oE4K +n 6ydԄ EB;)`޼y?/Tj脤p)jͫ[^}HE65JHs晤rt[6yRoBbΛ7f̘Q6cKBfsdta)'OK4vop@PF8N>dزe L2ni"VylTOzʯ YF:fstݜ&D&"($!T|="$!z AI},t"oVŽ<yP4!`IP1ui69&ʢ':N7vpw&AN=*UdX23kJhp`{Y.Ud yߢ^EǣOyZncw>:)ҭBۭQǔQJ޷ĦNNdj$ Lrn:?]Z٤ʻ?lHu4tƬ'03@P$gM )06y88J!qlTacժUjBJ ~JQ^c֙IIR02'ZN!-Zd+8T[Y5o<&f EnQ a hjjx C.& =ᩋ.^*LEVWf͚]Pߧ6BJqiCޏ`ߗu·F7U2j~SߏY`i [֣6c@[KKq/6m۪Ky g{ ^>eG.X Yl9fjcReY΃TSRXKh8R")hPaRRcƾՌ'4RibL[K]]Π0qdM>Hx){OR?oɜ f$7fi>>DFB\q/ } `&8P)٣ nhpC:%^|Ћ % U_g!V4\g,?uqV}:n\>>ݘPLSm P\^t6@EQ5ybJP=ñ)8(9'}m6q@Ic?[YyE z 8-3τ>;g҂3m^vR^P/ޞ3g,[yҦ[h 78㛛E!b̥kocA:MB ?s&y2fIFxȲNEj9My嫽þK/&I2Ydhx_O_ ƍ}sapAj!- Aλ3fU $1ͩӧW=Q(i%Ufl)C3a)FY)ӘQ cCyxe)'C;2mM\4)2K"E#6Uf4hxd pWѣ`OOp—%z3{!F1N5$rCJGZrh_pйuk?6%C;* l#\pTKvhDWV_>5]MMP@HJgb[B֭lZ7TD4qhxdݺupW5\S|̘1pBy HCh>ޱȇKE,M=\/${1cʅ)@V$)a(RilDlH (X~ca"E]̻%7@ &MBÆ5g6bTFR<ũäXfҔ"ʋf}. S3:>{S4'}GN+ѧF>X"6פ=tS{AQtyhx΃pkcg>w>}8=*<)e}d?CC7O^H:!a B͕:t. FӤk´ijQfyw}ab6H3@j袋`޼ypiW\wرNxWᢋ.ʃBu\jQ e_~J`*;ts1=ꝣԥ6K}#sEחNfILrS8is6Hǻuvv´'J7̻"n(z͞-",w :;;  z;Ƴ-l ,²?(:PD _#/IR@3HG So$zmTݏm--c68yr:ދZdGa~p%\7 {jc$EF P~ eWLY}cǸrS$ lw0r]I_ <@5`( 1mzv3}#)<6QJ9A0Sa vJ7Ŧ@Ŕ-~S 4W^ --- /T1.\=|_/G.O= ac^Ti1|j^oSNP^$1R*Dtb!}છr?C p|w,r}2Ut܉1cҘDhG|VvxlT4g8c`رvip5^(xv ۼ_\?aFWUѧdR c7 ESGBhpǐ^&* ?Jf"1!%oG9E?:oĤqJwS"_4rQG3<o{`_`0bĈe~<>٥+1ѣ ( &g(+\Sg#2e#4rGG]{ȑp]w]wݕ#WG &1bIߒT(ܶ=qӢR >MoP}B*1ơo~B7`mWW]YDl{Fg孓ԤO,Y%{Y oطow]Ԕ3GcRd~N gv>:)XFĂΛƫσo>FZQqE˗gzyo6سQy>&8uՋ1kA*HՠtȂCyG믇gg=z4̘1/^ 'OΙá6c',6K `wVi[YƣMUܥ `*$aR|X2$V4Mj8RH6h A $_4__O} swqcX~=?'9sZD=:::)9180fSR%]9)6oBr}(2m"XyRBBi̜>]uJݦ 9;!r sfD̰AfFGg7@j8uQ5=,Xկrph@24 pr9GQSb 㠦GTl]m{4GyVZ)H_B"&qObp[sWYIFT#+ 9uv2?Rh1ȣ> 77(5"I׈߻x⚿cA9. m[ĸy6m`)JɵUg~> ,.( U7&5g*L/}R‰ D3ͮ\"3M(=S[5jvrB;YT+eº!|}g??ٯ\r?gx{nAKXł@0q&>_=0 jS+k/tDU yw5|yç|Pzk}޽kp\YoYbb"ԕC=]B?aBA;GF`…ad^LͲ)tiԘGT%@/asR-i Tr5^aAݺ)bz!%H @+`Μ9}n6[r._"ih6G_ U7HReD]W=: R(tV,M~]**EB@mL35>$4/҇-ׄ >$e u(&ACm9:' 9B]GNV*(re]{8//`ƌ gyyG>ׯ/~y h>X ĉǶBPU(ӆa)BzE&t֠ڀG q Ul #ta~08#vQZw.`-4T!]l1<<\7vOu W>Ljo' ھU6H /J'Pk]mӦN IDATMi&bef/bXv-)"6(HU.F ¸gz)_d#6r;M0Lov4aݫ8ؖ:BV`wV7Q|5ˇ"J'[yPȇv6]wuQc8u6Ƨ[my˧Kmu\G; qQoUK/ƶC+2YK|]r/hw67`ַZEƎu DzS rrQI@PiӦ˱H&vj0'GS5Bh9e0t؋Vpau?ԽdO׶b;L`jp78n7]thAM﬙s4E T1  g˙2:z+裃\FDQaPcꐿ4.z|W+ݓ㧖[JSBqȕW^ z+8p;Xh|͉GLqr?N l: ;9;De@[?\`p2C؄7DMOuI@kXX\tj^۶Qg]ݘt0(byiS9\*^2|߅ŋù _Waʔ)yfw}7|pWLp)c=tυ<fz,Y\rIp9\68|}D ٟc}51&?FcsmøB\ x˴Kٕ|8w^W*[|wȯ '?: b x7o/RF4 F?88r` y346W-@uЬ!]y8GXRHCgͪ dQ4!UJy{ 1 sKwO 7ܐ7MF[vF"@Vڤ~?Ønq1MZԱ2Y ]7uLՀv-[6C_w"];Q_i}Pnr/ FJ/7|A{>OÙg gu5*g*Qֆ]m:;;aڵuPh|p!k/PԱImtiʄ,ܱj<ߑbY2Y/.7>_BCa0MR o :88-yc4h1L\DьRn&}$ǧMC]+68fw?.ȯb ܏>@od**8Ŵ4s+2:R cǎ|̙7)Qdˇ@J>X5%6B|e`,X`ݱ|hnQӸ7CSw!˞Xk9o掫nrfϞMjlH1i($Qj`̙#Ii)aaCŠL mC4+rUI0.ZX.1sQh S7&7IEo(;/yHתc"'QZlp돵`\0փfW}0 28JB kj3ϛV@O>w;q0zh8p5Im*ayCXf }uߊjR`lэ\2% aKFg.O ?B׼yuV]{Y eD3`=R6]KiW<LaђaRKay-@9眚aB3܂EAA\ }Q˗P`6{79olWlN {_}N;xUo}w_kQ* ^r ;˥pcGeBW >oo`ϛVEiݻwý aĉ~&+!+W6|DyS/kqqѣoĴJeM,㋯ZW&A%7E7e GӶz耮:EaL|Mc=9'ռ͢lRٶm̘1}ڷc~3ԧ>VϞ={k;v't|[߂38TΗ%Xd yϨs 5TjnFS`ט&BVhP~`F buäk.@#'.WGמ W̕?8ۓJ)xÕW^ '=p 77?êU+N8.] śzN?tTo`ٲe0fVW0JeȻp4jSV}f bS+ YqW=]0TV[7%]ԉ|:CURl [(.2;W$D)x.Bkߎ:(8pp>(\nf+ /SBww7<28_~9\tE_Tދτ|ǵ s F 0*Y& ~]\yͳAX]̞Lccg]B O5'BH׎]0eD_VG)j W^yE{K/mp%UW]/s12Nxꩧg?$ UsqQqY`,]4o2(R?a  Ük1jˍՇ;u}},0N߶P$n`~ SSaOʍ {1c}۷&O Ǐ~ꩧƍGT*pUWQGE_S Qԃhн%|BEQ{={6q#:wL914.=Xty p 2Z{UYfEsaڽnG|.B&AZܲE͈R >, ޱclٲO!iHoݺU{644d 7q+ +{9 +3??o 6&Ck ;2sa.kc]}MՄssƙ_l7m۶P= ޏBvbRv9h[颺EQrQԹ,W_ W_}uk6j(ؿ?ݻwѣ Knc˖-pm+# +{\ Ր !uf՟tT Vi3cZd8O2EuMG)7V$N`5$sZ|/+ɐOOWK(>]y\ț̟?mmmZ7[I__.rxj۷v?<=goƌf͚t<tvvz遯|+dɒ u߯Z9AZBgg'l޼ /^\׮] ֭|rX`ACΝkm vȐ!Ԏ;Vg_|1vw}vl!#t<a&n;}'k= =W;\ǣO~Y ?F-d耿::;;ŋ϶>jS}׊NK(״>^xgPX_##pǪU cև8E;~ե]|9kwu^-_Ƌwqя~۽>m:p(">kw6|߄^xA~w_l-[n/ r)ccVJ $@Zgg']bfx"rLok##0yԃk6wh;1ysk)ҨԷ/huoztйI9)ZkxF\3ikgV7K~YQJ,p7 ~;|_o-]O^>^~eرcp__5h8^z){o|b"L\+8)(1Y:1Xb]3O0V+V[/3`l} ;Eh"3~Hs@e֨Gca7e|N;48_:l۶ >eˠZ} 瞃v?uQZӤ/BKl0U;v/ e&m}l;6:X5 051%!} 40J-k>9sf-ͨQ`ԨQβ0ieCHyu9@rfIoOQVCζc ]Tcob ֜/Cf s/pc^{[]"&Ȩ]"͈$X0zh^cK^}g9I4=BhF15qEDZ?QW;eĚ&l,1 evWGV(\_a2]gi콒R˅VJQX"> G@PM0)z#Ƌ/nɻ2Ht7W=T7bRSSI{+C=h]:uAe,EzV.2E0CmeU23O]}~t`N#B&`(LLYM_tjBm,'&4׽O]'2ĵxZLyx9ͲmhE$(0ĝhȃVd9Fe*05k.uqlcztKz -6|tsK{.,*|@lo*]\oq᣶k\vemVUtsT*B/Q%@@JiQJc2*byEH.OWEx(ۤWAwOO9*,dwQ5E#ߺý{z}>q?_VjpBO+͈$fE`L ? :ay F!eT7`q_gW#lim ;Y݊QBqv}jԨmX~/9E5!$n~uCd>WѬB &5/w0eʔRUFѐ]c^^c.̲oS}EVuSc@D]Guz LrzN$! %j>^QC֮]7u(!w볟,e].]XЇqQXM]~+q}ʒabTcI2_8j mXV+~.}2gC)IO?R@\hjʺCCb@Ǿ\@ 75?O{csd> LGgVM]ߜ{b IpقX+rx rC9F*A$̧T>`Ā޼؈uXrow~c-y̼P2LjoST5j0{H߫!o7l 6UbNLsZ1s:k])~I;BNr(8]g[I)(\ #/w ~BXG_5J;nZpbd rZGm@6%5퍡R>ړ׾O93rwӞ{6QhE6qK*C@J](BE z4Y9'BF|n0BV*ƻӺ= SfnV*hVE)=ZgrkZBfE@J5W+V^ޛI2{zz|eoy Zp0B;?la}IuyGhx,_ծ~AW8Z߇-Cs?c YY)PN$Xv0mٲrdn͖3k.rf.oss ĝ ::&0ɏooN?v~kc 21}]Ȣ.YPg(Qr@[|$y- 8Ƣ_}$ !sԸ7(/:z]^<ʍ/+)gZ`7/M0˴vUUw~_bx| rZEsҐHHqѢEy@MV \fQ-5'~R{{)s<\.)BHև) `Fk/nZ?0TfmA71W׫ KVOR4Rpd B4UvtЭR$76+K,sKβS SLeǼ J)dA+Y~l.X.^rt&I)B-h:_QnPiĦS=<< 'Nd!$tG0b^b#' X[INv&҈3~Y\`k>՗,BxR,\Ǥ>kwxmV޴9'oPbQd`iaڵ)6B54cp5SZ 7Xu2ZL(p]PBN7 wǪU~g, SNL}c^0Umq p I)bX>(7[6"U2\wu^u$dy;1V,24Lok[Zg"ۥeuUWV  P×*NiN?XTkKy犿7uܪ&I)8$lWt uQӦMc+L|\/ 1Ehsl7'wYBS0I IDAT|#2n>׭oX`cJԇ06a29ꗬnBHH {ab6{9kJLilXvY\yupY>01,!~30nC.Mzm1 Zeһ::^|g[}r[ts}ǺJc\aQ %Q P i(My@6sjm(d*WSB=ȧv,$PLjo}.sap!g:7:Vs:m$XyEOho|ͻdKBIJ[PǬǛs_0)2Bϛ!D#' U92'L֛W?}7x SIXY)BR, [R2`nĚmeUsa5`ʏa v`e?Y>0.ue=G{|ř,w͛WW6@KY}g~ַs)z+زiSLABRGH,OBBBDύw[rG?3O]4 xs"ĸ֥5^ Ļ"VRoXuU-qr1qAE*Vw}s/ͩފ1&hqF~o+2R2^k0p-[>iR pA^"V '[0pҿ qAnnúrc]\sQy g҄q[M(n vC@ "Y, yciqT`u?LjoG]Eܐ8?k91ӽ^jY8 {o;7 0–]56R?БP#b= u/xsް![B}B4}L?[*hU&CbV\P!>tm e:;;aڵ^5#uU`9JCQo$uhZiU7$?6}Qyt2ۧ*ݝ0k@sHb/~oI$~)l2Lm\W ;yCt…eRPF&̸G?ٳgMY Y t4z7F ;>5գS`,>R˰iӹ5j;Ĭ,\fϞ9EuG˲)ToVJ@߼y]fG@ \ 䶐lW0LKsdAeF]VX21 [hݶ/7_4!F%|ɂno—^eM|oW^MyC\uPl$h"6mZm1{^AYE{0T72ltkL5 ל4Njocu3fJVnE[ 7kAr?m|Q@]Zm'f=&lb٭´enCQ$(vw`LP|mBVu͘YILA?qŬX%S{9tK'9 nFo?lGMT`o iw9͎$ ݜLR_G4q! ͵Y=P,Ab2΁,5c(\ \wi_C1y \bw͉ˁr=ֿY¤4 qL$-Z wyy2# *=uD7W@1wu#X\QS! v;5ܵƸO0 o # Mc4sm,EfZ}Ƥx]$WyE `ҥeBH{"@ndcSmKaA;XHDcH1 2.:X߮db*7:W(J RQ}ِ,$#pe탭Kc0Vserà_B7{bӛ& [ar^!j!8eO>((beގI̊# MP|[f֠V flK~qJh8} ,*] =YtpYXVG %;}f-1TƌG9Fh 1uS6vAW?(} 0!,]Zhݿ]7偎iCG T5@*1iqk6*طl-M1@qe2C._Դ<{,@_ .ՎJvoZ( SzP%`y*,Pםy901Ikúu`̙βU6 8a, 4>|p>@Fl0t:wXq曯s}S""aA*0kHU&5x݆.kX\^?5/V!o*צQj9vZtHXۆ p>̣ YY8ƴV*ZU9v6,S""ھc]BHR"$I)0ZD ه)DHl8Cb zg>ʡu)S1ӡpp˂P o:'뵊+K. ?ppNok##0oB/XgɶCز+8#C oRfR" >#ozamjY0Eaǎ}7Nãj1λ_=vXk:\]+y<nVΑڃ}P&/M_'Lre UFq2fMBm:fLT`Zs}lg ڡ-ޤ(`r2ӊc= wH, 'O*\~tQowO"K$$ArՍK|SSue{QF7x\t2G0iz+oI5ta-P!"6 ͂gXn(|+_{`reiBwH][I)^Hr B6U/yf2e *Ou>j9ԃ+@,eVeVuM7oKشXw]^b<n]TFLrтi}ۘr|5Y\r $ Ƚ~l<f$  #1&tWdvbXS zaڵr(SݔwB]˓Q6Ffx_^E|qAW'.,lml5>}y7.Ʋb' E0WM(.B11ݝteIb}K x.StLc+sMZwSZ*BS9኷Q}__3][]<>z`t\dOoE ؘ5-rߙm Y 8$da$e,p&bLn[t~ʦgcNeQP&Mr[ܲkFQ-B{]4`Ǜ 6zB}0$D&*Q2u wYRP $^s,tzXUo+`DŽP--⼠XWBS]);bɅGyaܤZ8V5Ȇ|V0$saec.M]:].w,NFbk2yΏLx,w窯{&4W %2lWI1nÎjkLzZ ථa! Sxuyl&$d AJa9ڗGP7 `0./&J-[[X%U#ʉXB)V94w 8$B௙XtitLBxy`SOmZr.VtWkmB0 z\h=HHL|pYa::`Zy=GVJcfFP *ck׮h3GAu5⦶;ުAgZºr eV8q;a̙AeX/b*W|[;GF=#\p]hv$d87hctq}=RA6Q.Zl.mj=\w4:d%`p)[pqѣ ew(Ht./CM'Eǯ~\5vŵ!":KFUMAjHHIBO@'0n,+p1Kqu f 1z7#Be} ~$VwbPYteVt}U?cWc(9YpkhHHfPCB70F6:,dtP*+#bBeV}mg"cԳI6;Ro -`zkrj:Rp01c%pm>2 t0q B`GeqIlj[C{|~>8|r&DZ c]t =}:?t0]ёU6ް::֓!1 IiBp]yqhTC| t#l`4>]w]]>n&~0؜]۴]ʵ\Z6`NbO&ַoBbS^qI>7MeR{{]Y:t4 -,[sЇN;3A+ 1́$eZp!L2!o`d r\ڋO6XNEŖV LTp,.n"!K'R;KaC$@!VZpncA\Т˖¤ ]˪Q_mJ!f(YfC@E^H@,L[ Ԛ6]6Pܬͽ$\sG!['Cժ5FmY#-k} YaZܡZe:Գc$4 |ctN&Vf֯- g^|ciJq ,eƖC%K' K,K.hSl0ue_OS^н͕Go!:uV!uY~`::Hx*y+6={k;v't|[߂38Ú ֭[/}p7G;o揊u|k]m&QŸtWXgW{ CzG188Xǐ 4KD8qL !pSV N U~hPu鄀e uKG@?>Z 8`ҥ0gx衇tˍJvwp 7QGFc6 JއNNŇ^njrY|5Dusb >Bjm 1p+ƴw@~0,,P;XSu2rǘ{Rnk7 <裰rJ+ /N r-0s̺o7vQHjyY0hႏ*ka+kF5c@Vutpry V CXwzWڧG@,{K/mp%UW]/s1ڼyfV:1 75#_~s"SiVk|o0u8 SJl`</*b` 8/PK-V㏹Q0XZ;7VDNy?b?'O}?S`ƍFD;wG8q"+:L ߤifucoଏr%`QucIruc[RO(ți#K@/ CNi鱠}Ôej17naeo n m mhhT-o&̝;>,ʶbhL->uNXv&:C5 tva-9tmsHz׻`Ϟ= xl޼>I'JcYA_ŚeҨ ΔFw澯gF!ūJa>(EiQCM:xÁYΞ=fϞJx\wu 9C*t͛g-C`ݿ9h Bׄ.xSW_eWv!YHԵ㥗_+99!,];^{-;(Yg}nj46 gڱW]Wxt.XPwyWvyo'OBjǣO<==5o?po_KkZw{/<3 Wz 7yr].:;;]`@YbΫ8޶Ǟ{&Ϙ̼Za|?֎cwX84g;׹wϝ;&ϘQc!ڎ9~#T;cG6fZv X?0OoWGF/?cu룻X{!c5^㎃~pW4G 8p o"n} 7^0sLرc[>YSN9{16m[;b!&7Vٱɣ}1#jKc\CE`|^O1֤keK;Eyvaa](z}]b1;7Ms˷\9?|Z\,8sooկї.] ӧO /2ر?x8]Ü9s`֭C92"JƖ25k& rˏUL{1[[R7# iø,aәch9*= <3ljRyX&P]AEי%)`GCڄ.?IN;ömC,[ *,]k_s=p_ O>$<䓵~s\)ATM 9&T p Pc )Sc:/_[yv$+ԱtUeY׷0T:iWhp,.SO=n -*Lb1J2WLEEWBHpWÝw ۷oO>ᄎGFF?O?io{l@7PMz^ {e vfqb*\}ʕ+4>.W&bbh\reo>mSxľBve\nfOls@η\H=tnp#D`K5bcj}HG^5YtiEgMZQy, !1z|Җr(B+W=6&iu~rℯ ܷ U0BeeMo~7 !!q$/z嶊:#)bʅ$$! Ne5h!fP5u. >__+ <mެv&{%v]NGn_&k6V`ZF1 ?J5AӵjrY.HH[aڲe>/M$Ms(SqhCe\!f[8]PwX8s ޕ5lgZܗx U5GW,ZIIhYpn8>nOossYκri׹6 ,Kzʹbd8Ls!OmK.k ,WBb*So>f,ٮ#\ZճHHqѢEAbCJ2w}Yޠ5yS r(ۀ}r< r#fDɃic&ƛcBxJeRt :Ŀ}@ HHBYBO=Q0& {}p3 ;f:V\w(L>z+m̦<[B&{.pR:Gb315d18HHea:D'6O:1, :7QM 9FT:rc~i v2n@=̮2dZ7![=\I0px2>bO-&=Lb_iЈ$$ԡ쇿 Y0e4@G"f,\B{q/2]P(3~cc4B2 `۶q{4&jZ-_.pU?ڠ{C@E3! II,q :m-pB˺u, \†ja-{,1Ep yL}y7zUJ^Aw3~ەtB .u\i)7yqi> :0 Z'EJhU$$EgBQA+u,}t]Or.!ΟS>֫991TFg(mȺߩBgCs9OowZIY[9ߤve2l0)7r\j E@$`ͺ\WVXB0y(E |`גbg' >WKS4о)ms9\[UBǰ$9~ֺ4+km{z`ג3H֑1).JY͆$$ԡj0-cǎJGHa 4Ri󊴺Eo~{2|]N11B/("Lm9EwutM` :1q&A$PWJ-c%VsG}Q\HCFuSG%&S A@?dӝގj8hr|-YrX4YZ VeXLstNuV-:Z%FKkQU=C!= +Y" h\v2LjW9D8ll/ `(4}5#TwP6֧ XAS0.)H ~Pjѣ' !VG@WP+. P]4%$$$HzZx1tM2+vh:FJe}!4xP & yQtf>xk aðU7Y9 cQ z+VaR{;9YjTƵ T6$I0:YEHjр;:XW+cu:x!n6}<Ǝ⒩ xc= fUzmXsdkBtMˇ e8Ii!纕6WGץ*Vfchڬ1]v=Pݫ|操aPBϢ\gʵf]O\J!Bln}PЬ touWRP=HH"-C1U$贫2L`!VhqղC$+X]kF .1Lt |Xi)I0+GByO'LUI#b?B-We_̀$jh GJYmx_k YP{ 6Ee8E{e( J.,X/;1wdED9lÙVs%oUX.w45/%p=!>{z`4!220 3u͛aʔ)4(0s 7YxX0.BnY~nsU*qlVRSx.ȕV?P@(_$ ҊXW;GFt'd$>&kגreN cYƛ\/q шb NjKEE4o2C,*ê7 ;ԽgLop|PM-^[C([޸L&b;ֽ5] ]HW6ۢLk)eqESC ״w`$0@c(Paz]].K.S|c]0e*3&z•*cſEZL|Ob"\%! %Dޮ6j5h7 ?2 4.F*&bק=P%J>>}6yKNJ*LJ*3 V m1.{JP ~1S* *d B׺:5Iijte6&43 zm=uůL?|\'% Nz2ZcЊw3!jp 8;qY@1aN&FdII*߲*CDq魼PD\2tXuHn(㝥K%'\c¦L1jCkCy)PUuV*/$4" `93 &\ ogK>3bxZGﲐ@cxl̷NS|ciCeua27ۛ:95 _wl,}+X{" Ii`"t-bFGYiQ)J!: ӷXV,3&3Ic.Z"kZ}HV,t]3s0;t;wt~lya- WU뷻6&UeЊ8YBabJ)sB!~@R|SXDze*Lƚg]_ N/LNa{zu WޥƱ`iz(`*$:uP۬.C\ j x$ ZxP3޶ 78(#(J헿4Ǵ-KA]vU1ESnh]w,bxx&NGd#Ī',d[w9Ozx˖OysCz+WYSOvBA}HZ*uju‚Nkmc)n7&k .T"K1mVx$$$ >2,7sQv7m4%W2&YNZntWeA5#(cG7+z!ʘb[7Α/|kР҆ Yb\yV 0Oo qBࢣcQdZMow5FNa(1hS-3&}n+ D.w!`nݦRW+uE ZtUV.f!j%.YX&$$ fcfmɒi3-vko:eȏan# /& Ծ C;L TG0@YmSK}Š,mr S.ˮNsĬV]y ?O$$ b,bjs)l`POy Ͼ9Myt-@=Hwi,US|]x ׹7x 9/.z2qC i'Dd))"z#flBףl#b=jQ0]4 _y>!;$$9(?w ~'߹"7& $Džg\dMABW]!y1?j]&ͽFG=TDm{G@)nLйߺ:` 2M7 NAPEH+# - #T;6rؖ>lz`1_:wl\uyCeLS9of&OZ3B늆U@؄}RK{ܹδ v$$!!2Tw0YF'D_-nٰf8쳍o6dsYZQLRúLjm̙F|oqLk-TwAsmc^6M&Fgi' pJfńNXqYdܨT}iZ'2gkʴ.ˆ$$$DY|9\ҫl* ed|(jۖ/_dH}ˇ\ F]vO23S vpF6\Ee&>C\V\uwA}GwY(iMTֲlK&Ҩ{R$?88n\IIH‡ _, CxDŽrBq usX02̋(3ުPB0S%<_18ZLظ*TNqپ /O7uH$$$ :s8dZnj9?>>7J&K IDATS a6YP(ѤEZ *s=l{hRG(ʖtҘ\Ÿ^e}u¸Rb9W6ɗH)i}C@ycN|q@ xV nUv1\\\S0]s*pi汚jw bϢw.rvwDL C9 ֈMwY$oMۄChlLDSu$S Mjo##umh܇:? IIH(d$R{{T,Z';jꖃuiۗ.8 N*c-_'ցw{.PCx.Ze7ҹ tB &D@rĂ `ҥAe`nqicl& ]_91Ei< G$$$??  GE <`o.d߯;U&Cڴ(OUw5o!nV?g_w=RY|܄8,0uՔOgu>#|::='L LNuх B:uI8ȴi\)gUV ȊrA$ 7շorcR2*& K+8`Ձ+cC`z`"CE9֭t:q]uY PjJ.(]:];M­-SW'ݘ1]@Py\$$!!!6o_3*}Xar\<03&:k\6 [_R]28hҍi}nc|-v[ӡtw1]u{b;5\ȿra*VmbM0{ߢUVtL?HeK m-Ng VLb} ë x$$!!G C̈́@X$ƛ[XTuI]Q4ydro.?T|1jEKχtESz{8W'io@ QŢ1},6(bcU~[lgC*HHBBXbE$Bo[6mt0qT`iӶxS_^6ˊIe _E:8*0t#e,wb|lT*P:n\C{ok]m½v Y@s_~3$+:lԠt‘1vؼI(S, @ud9ޱS>% cg.o ˊLCq5R' zxPC"?- 16a˦M5t[>ۺG)'kW.Ga>< O AOWNg͂3΅ m ~HHBBBa@e9)E' {+%S!lAd XlVӍY28/9clڄ݋t}(5s %-lڤrBqY ԴCժv-VkqS^_g+O"6 PplK;+ [,/Yx0 1`̸UCoblm1XAVB)KEoR;ܩffQS!Jy7g0#Ux$ F.}-nm7[$ bn~Hp# 9bpM7MF'n1޽+0 q*%:䛊tZ?O uэDd+u)k\`ou?wK`glMcJe†6,ʾgY)Tw-Sy==0&5Υ=KE@rD{b@ #dS\-3&\\> %Z @T /.!+ 6BNgWӚZ)7 CFZ6fWoL\\M"`+TAAfiU5r~}O'3d.k[dw4ļs&PHjOPwSj"ͿfB@r9I(dA$S,cU`nEy`Z- u̘kؾM.(Nبh7]j6ɴ۬Djy1X@jY\ ݕ*KڄC7[?0P.IܻAS" 0]{Յ#e 1Eq3䴦`J}^\ ?at͛W#ڶsd,u3A}p$QUT)Q_6sN.KZwaVԉ~++`3 9%59!L%ZGV 1-[{}n\?aBar!$Jn!ҕ'7=DQ{aٳ}SAmtZ5 ry; Պ h9+@fm](<#["GI g͂ ! 9"]Zbm7{9(4>6[-w$˿ɌO} 3#0}֬c6oBr 6{ [P0&a-|Q U-2cʷ2yusJv@:&^N\WWoV&Œdyu7$B KA@Z77L WI(}eNmb,Lf]ŖMͽ{16>U/t CjtVap5$@ |s㙾l*g͂#Nطoƈک Ts࠰#mX==ubxcb)ce5t |H{kNرctIo} 8 g;v@ww7g?ݻwiwcX'$$$Җ0ocj:i<cM\im!ysޚ;.YahfNfE~5 XAPaTC9[aB^«-~Ȗ^ J/3Uq-6 6kPjtŒ c)E[{&NlOۇa߾}0+ Ϳd$X0|Xj\qp 'ҥKaΜ9C駟n[og O<tww>я~f͂{ ? [Pd@ (xsāQ^oycGuAQTJ6&!88nS VZ@#_[c R\"yq!@ Vl+޲K?}׷Z§m Lr ̋VkV:W#e2`qUpӋ!!4R!,©(nut}& L<(XukM(>l@]s8_y:pldu?LG@ xGaʕp7ÕW^ ^x!L:6{G{ _L<Z뮻2iCBk׮IHeoC.қ\LL.8V-S) d+,P;kƇ"\T1;S޶$5A]W.BX\p%wlAz9@ ' "^SO &:}xWs0VE[l#:ˆ:]^Y0Y2+}x6/DK1?SAx[H׮yVr8p o"n[^׾?\uU /1/|֭[CCCuo oGqDCA8SiӦ6(!!!9u:DetdFWнsCW`t `+7fɌxwaid-<66CvU\TTּ܎d6L.LCtgD`mn\btE L<:A`qpt!Mjo Rzչ4: EΑxsZϚkXnԈ~HZ8Ā&O\'|zqFk'䩧 ~;lٲ>Pb0i2s\ȿ11:RC"i^uY*S(h4+paչ^ k` Ļ -6gO5 lTI2&ҊW^1zW xD.M&29@C`'Y0@s9Cuђm>k,`pakB[Coy B__M0AGO^v5FeJxs>xs>87o>5;GFS\z+x鐐$uVh;d! 5,ϳ7 |p1oT]m Mxt2`bx TMPoRBhu|dڴ~w/G pk0<98CժV{}xآ; 3qbN~VkkV]| `ehgwu&-D4bHG.wvl7J0""Aطowo'#;6D]ޥS|w-Pkwv Gn>f̘&yZ 0QsSGBs"w@fLVCL/4W]^6*Y{-c{`dk D5&M}T7jwAQ=0pȍ/E]#J'ezDx#&UjRZ]^h!Fq.jb\ ocj<(rC0C̘j跟y짏;ҕq:E ݾrz.;'''h]\Pv0s ƳeoCDm{313>LlӟЩ[7TCY^-´Zu13mn4) ͸T6{0”NV[gz6i7(.,~1SH[o+}9jyЇy6i}Q\@Rcۍ}(/g&xvwb+",@PUUe^YY5%2uT۷ +aK|?(|!}U~K,]ݩ?0 X=jBôghzT5d|.^=uqQx4WWWCQxv]\QWljEL Fa^wefY]>'3_geF9ظj:]غf~R[O}` uOzɸ7Tr }#ƼyPѣغO`Y<.$$WYXOϞ=w^C!66lٳgc֭&mYYYU-]+v5"77פ}ݺu?I[yy9bccq ;wbʔ)f}vَ{ǯo]l㧷#..*qF>Sp:peXfr~!p5E^°iu| lǡ'PәGfF@nx75$Ra!zPP !66~IΝ;q'壨 in:BZٳi u˯>U_& ѮCL3/LH_7"wGV %0ᑑiAAprr +pwwzZggL;pPgahPTgzwU(AmSVjE꿺zmb+뵗(ޗ?XG}uèAl7b;ke.p ~z4 ,5kpMxyy./^Q?|$L6 ;w͛79 o~9^iѣQSS͛7mUUUHIIA=⣰&(=EEE6^ݻwcĈ"""""Gg@н{w3o&nܸPڵkHIIQx l߾W\A==z)SpyM"e˖jlW@~1o<|HHH@MM >SKQ6+h48p␔  9ڶmk͠'X{ɾ1ߎv,7Q XjQQQ/4IIIAMMzèiӦHNNFqq1>A2e.1ߎv,7Q!'j""""zx""""" DDDDDd5,@jXِ7*b XocBdCs̱uȊo|;曨XРAl"۱0ߎ&j< DDDDDd5,@jX޽{m"۱0ߎ&j< D6rJ[wv,̷ca ۺ dE̷ca Mx,@jXհ!"""""quG .ظ'd-ʲu7Jo|;qӌm[wKKKÄ l """"z;v 둞VZAٺ;DDDDTOEE\ٺ;I,@j:Y """"" DDDDDd5,@jX<pB=z#Gl-w],]Ff͠hj1… #X|||d&2D7o.wQ۶l"ȡC~;SNɽ{LM&L1F"""Ejmd-:t0|cRw[| ?hZȊ+DQl3  g& P/M(cm̘1lӧzfTZ,\$`0+d&22RvN3mN3رc,Ν>}]a탱ٳgܾ}m;|ƲѮ];xzzw cnQ#}(..F׮]uOc###hLrH,//ŋ_}֩j=8""M̷)//^ǥKfco{SSSx7|۟)S:ٳgy̷m%z`o޼{NNN |}}MrO}PP?PZZG:жm[,\III6mlܸ׮]Cbb̷puuѣ}aꫯϫm[ζY:\<,ZpqqWWW\WVV6wٳɓ'`kc"??iii3gt:&O|ۑ~K,%Kk1={DϞ=Çcԩ|M>>?MׯWߤIuŊ&q555ҳgO2y\x$6++K$22R6l -N'uwIHHEQ$66V>mF)e˖Irr$&&JEјh`W>}^D|ۇ}ʰadyf7oq̷yTVV%88Xg7`VjJEEQDшFQz_KLLxxxHfdĉ$''KUڶm+k׮WRR"WΞ=k1ĉsωN@_HttFc|ڵK(AAAjW*G1eSttًEo{$>V͛ˤIҥKf̷m("nR#"""""!t""""" DDDDDd5,@jXհ!"""""aBDDDDDVY """"" DDd_|4 ۺ+DDdE,@Ķm۠h8p-[f^ׯGjjyX7DDdk,@ԓTl۶ͬO>?oNͰ!"c KQ*aBDdgD/֯_FQ?F_pt:aƌuɺZj#F ==]v;6o HIIA~777cƍf˟?ǎSзo_ ?{ntĉoK/ 9r$磶$v׮]ҥ 4iooot IIIl'l( f̘>|;v0>}:RSS1uT̛7/_ᅬlիW#443f>|ǏǀꫯΟ?SNaܹao#"" )))(={VDDfϞ-?~\E]v(m-[EQСCf멬4k,@Lmm-Zo2b.]=֬Yz ...ؿ?֬Yc P7999HOOqA`ҤI&"_ "";𶡡770 طo~ߩ}YQ_˖-67ߨV1|pf͚M6aɒ%hӦZ'||Nyxx|F]qqqAbb2f899ɕR&E5[nƍa0"77Æ 3oLasMe:vzDD ڵ+`ܹ4h0n8ӧONJ+B"//{ARR^xᅟ\wLL \\\0bL6 eeeزe QXXh֏ 6wAhh(w쌕+Wbʔ)ӧƍ"][kf/"/2JJJЯ_?4oW^źuйsg<3]? DDvU^xصk.q6l؀.]`ӦMXhѺukL8=ծ];ٳ/3g/I%KpUZ wAttZ_ɓ{o<==1j(\M41闥o8q"6oތ֭[Ƌ/z1~4cg@jXհ!"""""aBDDDDDVY """"" DDDDDd5,@jXհ!"""""aBDDDDDVY """""ή,IENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/lhs_sa_geom_10.png000066400000000000000000000405771307543307100306230ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyxU:B@fW YDpP%* .8CxQQqqHtT f-AU N'!Ӂ~+UU]wZcX uk !k !k !ह\.=#dϗJ_Q>3uE5jԐҺu=\|5+S^j[^^ug+""B u*w}'˥ XySt/K/T={ u3p{0ݸ~AHO^x;v wգG5h@111СCT9ׇjȑ#|X&LPƍΝ;kٲem|󍒒ԤIEEEI&JJJ҆ Nj'Oo]츊^Fr۵dSjUӸqc_|3 9b9R!m뮻8fg1f2cǎ5[{cr׿BځS'2vS޽ AJrTjP7D999ZjU"""Q!H/6m*Ij׮]233xb=#Æ Sv픜իWWX5l0lR֭7vXuMÆ ӺuԼy82 ?륍^\-u};^NNN_ӧOׂ 4nܸ'jѢEzo=裊Ms-(%%E_~yq+&&-//OURoOt/ ^^"#+'寿{N~yq3g {%==]ݺu9眣_~Y=XHhs*z@~g8yGݮC{ԫWϜuY~(m7lׯoUfڶmk^|ŀy>&>>DGGXs_~7Ylݺ7,??<æQF&::|7YffĈ]z7nW14eyk׮&&&Ԯ] 0dee>8III1-[4QQQnݺk׮}x]IСC桇2qqqZj6ɧHa۶m?TRݻo)S8f۶m֎QFq|q3zh0qF3x`SfMSn]3vXs!t}ސf͚,[$$$իۛ+Vcy7L۶mMTTر/Zᅴ|$$$Zjӭ[7{sl[Q;[}9z$G5-Z0ժU3{8qbyժU梋.2QQQEf…%.7}4mTVʹi<}ʕN:&>> 4h[nݶm[LFLjLwa~wc̱ueʕ;0nG͚5+q{sN3vXղeK??~z?'x̘1ôhDDDk͟?߯Ҷs[O[3|pSvmSV-s79>{#`Y‰k׮5ݻw7իW7M65?ykf<2ڵ3͹7]~~1c7QQQAfԨQfΝ|gM||Viܸ뮻̮]>vڙ/tDGG8cYbILL4իW7w^xWXQwmnuf͸q|.˃~شjDEEFA젟oFFqcٺuq\fܹfҥq̯}߯۷ ?pW;Vll ȑ#h"xҥ/_*`_U;wVDDn{[g;V4g;Vָqt!]V냶״iԿG_}C{1cTN=#ڲefΜ[j.[LW^yZlGyD3-Z{_W֨Qxn:͘1Co^{n9r%zꊉ)uKnZ5j~EI+5i[w}W͛7%\RnݺYf?0nȐ!j޼N =ڹs^zI#GTNtK₶qm޼YÆ wܡnIO<ﯧzJ)))eє)S4dmڴoYr߽{͛nAFҞ={4oH#G\>@Ǐ׏?'|RK/I&i2e$+v|vܩE_vK~Rbb٣o]wmۦ%KRo;SWJJ_z)3FguxI-G5j(s9Zz~Ϛ1c߼ta=ZժUSll%/l7dhBSNտo͝;WԩSK]Ptxy e]GS8q5w\UZL?O :T:tԩSc9RM4 xQ`r-{W_jվ=裺+t]wiƍ5k>3Ν;տp s;S7xMkV?o[\}s||}Q=C5ju&Iҥ ?M7;3W__qiϞ=ZlhѢػνkkUzR+UjQFh"]|ť!@'R?w V5̕W^i&Ol2髯2㘻o7r뭷&M;vM{כڵk20o߾L/b"##͠A{GP޽{M{}HgϞ .0 6;Zn:a=bdɒg1:t0+qHoͦVZO>#/0W^8ԣGRםeQ%m+`7|c1g.ڵk8cg9O{u|jԨQ2~oH\?>{l8裏|ʳι޵kiذ[}Jz~tǏ7xk_򗠵c[oe1'O>x`rѣm1o-߯nݺzW|G^uy<i3ީ;<Ů3E%''TjGEEW{J:߳go:Te+IԩDIR^|?|˖-eor|GG c9rD;v,.z%_NS%)7m۶~=PS6mJSddd61zOe\:LNNnhѢ@o맄R}mT믿ݻv~/\k*NysGk׮ߴo߾rvʲ.~ҥ_`llJ᧟~uM7]7Խ{woo_]j_&/[LG ؗvmYfСC}nZjR۶m}R6Dͥ7\tK,.qLZZyz뭷EGzO?7u~z%%%%%%i'}O:ukժ.첀EwF^]w:۷O~ϟ_~Y(I[n 8u~jz /qE&Lвe˔-[w޺|]!I-[NsRߧM6;<}ᇾ Nģ>uj׮aÆ켂۴e_wڸqc8w^Y~,ի:̡Ck.a 6,vZLo f޽r'GiVnѢ\.W4E5g}vKZlK҂ 4}tmڴԺ`7]/kРj׮n9]vRkۺu7npC޽{K!sm޼Y_ue}lJڞ=<ʳ_6)p]ܺukltz?W7oެݻw~˻-*Uy߃dxժUmLYeM&MtyvvڴiS 9;SwyvܩO>D?}]wu~q֭[uYj֬-Z?'8 aFիz*UhZfw~R-((tGÇ/v;O6m?}Zd{9=CJII9v*~J;u*tMztR͝;W3f?[o>SzWh"wדO>Yk9رC{m;5 8B%=*I7W_}Uroq|UV-5lذԇ>[NM4) :XrOOO7߬j„ _\.L'^q])=XQ1F{3S4PSd ei[E|ˢ@/\\cTncNd\Sn~_~ٳV\^s1zWtm6൹Ρr!@;vԂ /Yf*((з~i&n:,3STtt !Cȑ#4h&M'{Ei7o8~ 8r~2.4oOCy7±1bF{JII)1ZJǏ׸q㊽e˖Zvm>A!;ވ#/:]QGi޽~އG]pA_۷oz`a~4g^أV֭[N?~з~{a~Sr7%K 衇>:?~{ڽ{wEլY3-_\ \yާk׮+'kAAn&XBҸnլYS_ $U\\[xY\Qmݺ5GD 'Yfڼys{iҥӒqFm-[܈Nd\Q۽-[j͚5˫[vQ+W/s9G+Wԏ?{wkǎ[ooG0qAedd;{uq^.̧~o̙35\%Ko ]߸*U6 ԫW/EFFj֬Y~m{y4jH\p,Xݻw_^K.-wnњO/G֐!Cԭ[7M6i Qs wAk@ZkپaVZZ:w\6l._IƏիkԨQڱc߸;vhъ^3HJ߰2&Uʲ#""d;»f͚t⽳]ﶷw;ߕUW]3rCYU^]&LPVV&LP4|3F{9O*{\.Oһ[ON 2DZti]v),ɩ'..N~߶m7]y 'O>{;hѢRx7nXڵ… drJ_oڡC*??gQ>+BUV طΛ7O{쩰ۉ웽'k}?ڰaC]˗/WDD/F?~.#GTVhѢ= ؼyje~]r%ܹMj׮]z뭷'hСCww˿ݻw/˕0ԩSb uIv<vء/B˗/`zFK.jРꪫ ]Z~};VӧO׀ԧO]VիWGM+R_|nV)cccut"={*!!Au%Kx=ܣ۷_~:tP5l0k=zVX.](??_7n믿K(5 $77W?.Iѣqbb_999ӂ +--\L˖-`xj߾nV{4o<رCJwu(##wOCر-[3fQFjѢS,˽_~z75p@Ԗ-[ /m۶~W^]ZxZnXo߾S?| >\g֮]Խ{weffj…8pzQvJtx@}?|-]Tƍz7hZbZ5h@z-}g6sL͚5K_|Wty 4kA&OKGz7zrxj֬Y4iԠASǏ;CZ#FPBB߯ZK,֭[UN~S+ȑ#oo߾+::ԪU 0 V6&M2:u2&::Ǜ)S*л.Ҡ#GLjji׮2u1]tyJpYMEaueQF&**t,]_mnӸqcSjUӸqcs7o&``"{i&ӣG ¢[-1cƌV}ʔ)tǎ{gFwKPc> /4ժU?^xDXjUӬY3WZ͗^zi4 &MU6mMKt-Yԭ[TR4n <#F[~ey(onׯoL˖-͘1cDXvqǿϯjjSfM8o>3qDӪU+SZ5vM׮]͓O>ۆo(6Ɣm;WtRR <䓦iӦ&**t|Jy '.~W{&**ʜ}fҤI駟6㘜RXxxmIF̐!C̖-[1ݻ<Ӧo߾6UV55k4\r7oo%KwV\i\.ygNp @۵kԩI&usPy}r1p{5g۷\=\p4hm_2vs=|K/rk"K/k׮< 裏n:? v^}U͟?wN'|W_}U}_*/X={y睧_UӾ}m۶W^6l5j7WF@pСTTٳG 6Խ (8!.йꪫohrG;vTZZvZkԩ /PsUnnjԨ~iԩA ׀k@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@X8nJ` uNkJ(==]'Ͱ&++KIII&uSw8qr QBBBau>3*99U#GK us/`;k(?BK딝=YR$GRO5bx}rݡm$ P!&LV>:hfh۶iJNN ]P!237HdlpGT(U8 /)ح) P!% 2pGTdMwRմx&qJ*VF<{Ȗ-k5bn DT ۭi uQ!l2,@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC`Md@YYYnUz;өp</(//Bz>rEEFK2AE%&K45 |@@j/VK*(Z )Cqq(559tJPnTz P<[ +74%$$9Pp k !k !k !&2 @P7*ouSw8B݌Ӛc1nq'M@ |rxB kDa;P7up'R y<ڣBᅺ upE!k !\%'*3s"x&vy8@XNNtNٓ%Jr$hÆLZ5T !P&LV>:h=IɩkH0AR c;*$EXGQ@!|I&؂@!xIk]S8802$-mxØVF<^9 ܂nҦk !k !k !k !k !k !k !&2 @P7*oOΝ;S~VG(""_5ر7*66"ZX¹P7cLc u9[k:Ir$HTu~a3~>z@*tyEF+11^vCD@9@VZڴP7P8 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5D&X字uSw8n\wBBBqZs1&ԍ1ㄺ (?O= Pzz<OaMVV;LP7upu@*!]{^;Pwxu5p *LnnSAyyWbbRSvC"8 v6-@%)X!k !k !k !k !k !k !k !k"C uKၺ;P7up;!!!89FqB'J(==]'Ͱ&++KIII&uSw8qr ˮ=/^;Pwx ׺Q~\z@PiܹS7<^|%&+55Yn;@ 1!m6]R$GR6lԪUCp,Tum:h=Iɩk* D   6SJ|R^^!8,)C} o18E $I4ȸ5JL"TiӿHʐTP8@RPjjr mxQi̟Nj<[) 4bcc6-))X!k !k !k !k !k !k !k !k u(+++M[/up@¹P7cLc uP~>z@*ty:hIJNN ]0Fg :۩p< c=E HLFgxIk]S8mpFJMMV\DI HP\JMM]0mxv+#cqs@/n nҦ)X!k !k !k !k !k !k !P7BRwxnM NHHu3Nk1Ƅ8qP7%ɡJOO u3RRRu p@¹nH%x²k u/^µnk !k !k om8?ǬpйI&9KI8s@f\YC JDDul}%yA@b#@ F1 @b#@ |vͦڶrUeM&o5_U׵4"@x}}o^.jWղb(Bz֛ZUv-`\Uu?eؗ~&ڟ9p @ϯ`kk:^UjQv^GpL 4M=<܏| b#@ F1 @b#@ 𿗗W:nwwݳl5>~{ .˥ŋl/RqQ6mR>}ԬY3EFF*::ZcƌћoY>;SjCnnFǏ'Tjj.JoqjY땘;rܹs3gZlSo%DjJaaajժY.X@_}]}t)3gVbyciz4k,&$$r+[orriÆ ^m}p͛o߾Zp/}\fz)YUjg,9991c*EDDYfׯk>}c,Y"˥={Z-*ĠZYbqu?}y){NNiu}o̘1.+׺ &<<ܸ\.Qooذ*t֭q3sLf^xxb3rHSV-ӤI;x=2W~ ̹sLAAgِ!CL۶m/s;w]uáC3˽Fy:~; 0@oF\.j׮nȑ# \텄($$lbZzZn-Iҥ222~z=c_'L.]())IESvv&L:wUƍ=m3fP޽5a۷OڵǑ1K񾴱}R]o;rH>_ڵkuuy={V7nԐ!CJw9r߳fҾ}4`r-Tͫ|tYթSG5@SN?ޗ-PBC׼ӧO+22g_hǎf:uJj**==]O=~_+--Msν$}G0+|7:y~lwƹstv~>|K>|X'OVf.]hŊ{gԹsgEFFQFvZOJNNV˖-~)33Sm۶դIJ=vǎ5kn֭#GQ;C޽{nݺ7߬{'NIҨQ.84)77WSǎ&Mw^ÓJɟ8q;sCC _9s?Ojq!/BCCܳN:2euIZhΜ9e˖yIjܸ.]ӧO+%%ų=pF I&9sΝ;YrZjWh]vzKk~pEGGky*q}.SXX*aCMmۦ?9۴~z/6mҙ3g4zR+kV>I֭|I?~\|ݻwkr݊P5ekk?^zǏ{U۶m.L~[I? [~~ߨUVɓ'K]ː^{ͳ_\.W/1riJKKSΝ쫦?PV T^=_vZ{IL8ԏ֭S=T~}5h@ݺuO?iu HBBvLWjݺ-ZT9:aÆ)22R͚5ӬYoV綾^պuk.]viРAjذ"##;vitW*""BM4ѣu!ӻᆱiӦiӦ=;;[!!!>Rխ[Wu)<--M8qnf]5B`Th2>}wӦMW_}Uw}*\wq4~xK[lѐ!CJ_gϞ =#ۭ^{MSLw}3fH}Y͘1CFҽޫgj޽m-ZaÆiڳg genjԨ͛'w߭u֕YoC7o{=3я~>@mڴԩSպuk-X@3fu]f͚frr}Qy睊Ӊ'{n}߿g:u ൝_]iii*((аa뮻RLLۧ'xB|6ny'[fW|ᇺ+Tn]ſDٳGZv}ٴiڵk7X[mڴj=zڵkG}Tzu1ZJR;C0/O?Մ _B?ciذazꩧ[-\PGցuE'|r7Nwu;-_\TFFwﮦMO~_hȑ_uy /QFiڹs.\,/zg}QF;ФI|rM8Q=zPN^ 6L۶mwܡZofϞÇWӦMzj͟?_O… %IW]ukܸqJNNֶm<_֬Y{_HU;߭ު)S護#}|nvk^f̘a6lX^njjgӢE s뭷z-^8c^}UϲgϚRdmܹ駟6㘏>Sx-Kǎ̙3}^3gJeΝqzRu_m6mj1111fԩfڵĉ>߽{qo3^ҬY33s >cV v]w.߄ JNNN֚5kt5hzգGkX/$g̙^6hÆ :t7x0`N8+**J_|v]zl٢|M6k>@t 7(??ԩ}Wڻw&N zwU?Og}Vǟ>}Z#FPƍvZϯZ/bbbtWzſnݺճ{III3g| _ 'O$իWۿ;/]쾕N:)>>_g5x˵]rywѣU=ʜE,iRg:wuI&+/XkRǔOƍ//\)|+[_Iug})>+i&UhlذAW_}~uov1Hs3Yڼynf3$͛7׸q{ԩS^"t)m޼WƏwZgo֭[kСeum&Mu} 7 Ҟ={gnڧNR~ߥ¡~հaC}ᇥ;,׵DM6޽{5uT;vLK.ոqԴiSgv=gBCC5f[N|e` Cj;_~':vX;VNΝ;rJYFCG}СCrJ A)9eNNN8Kjҥ89sV\\:thܸqիztkyTTae%-^رc|+TUW]7|SgΜ)uZB~a >\W\qtAi„ ڵkwڱcW~Zq&P+*<vݺu ?p>mР7o~>۷OZ*uMJIcfﵪ響4iF9siӦr\Zpׯߪv?-ZPBB{1رǏ\}'e^!Eصk6mڤ7|S'OŋsJ]UtEL)BǠ_|Tv{Jn٣7|S^uXB?ϴrKҷKB){cꫯnrZr^]YƎCeǎձcG 2D;vTZZo;Cz/zlZZ!=zhժUw6mڨ@}YxvU^=<3SRDDFѣG+77W#GկM6 )ߖ*khZ|=FEEiĉ8qN>oQe۷kٺ{}^ߡCݻ\ȑ#5ĉ_pm۶M'Oŷx$iРAaСCy!u!M:T'|TPPb@~]jJْSNV'|5D믿։'^hӦl٢SNyzq;PTT~ӟ^mV/gϖWxGڵk5~x[NSL1::Z?*m"Ǡ* qr9REDEEVwСR5תUK7tn&c4m4-]TsέbmڴQVVV[g]իw/kĉ^z={y*]vjذ45mTK,) qF. pl+k4w?O5(3Jr-ڰa>R94|4jժ9o+44Tӟ?ТE ]}Zj>H7o5ߍ3_}F޽{Q*zgK9skVK} ȭު|-[̳ܹsZbzY X͛7W~+ٳKGj;zNH͞=c?zg$ <س,22c~AݵkWzDD C)ٮgm_3UƐ!C_Ory퇪[Ciɒ%޽{5sL5jԨuG;~x_»w.ICE$r-ڻw^ytݧH?TT^!!!0`׿z 믵fC~Y%[E%3xzZQ Çꫯz={z]{c=s:3T  =z̙3_Czf;['Oz]x/_ؒ~ӧH={ԠAԺuk?~\{=1ΗݻnӒ%Kt ]ڲe9}QmݺU;G>Ж-[<_ -ZW^j֬?QC ;ܠiӦ1c/^Çkڻw^u5ibh" tPmܸQ#FOS4h"Q* /Fɓ'+66VGզM?C|k/ӵ^ujС:U#왆w>5 o^^ÿ#L۶mMXX4=z0/.5/gϞ53f0M41u5Ç7_~i!9bns嗛ڵk-Z'l2ӧOӤIf:vh̙cN|ٿgxe"""LN… M^^g}W,!!{=77פ.]0ӨQ#suיwXvL>koe… ==z^{L8Tk5uC=/~aӾ}{SvmӦM?^9!!4;uꔙ5kiժ]+}= oy>-Y߶mۼQڵMӦMMBBYpoJm}fܸqM6&,,4k 6T?G5ӧO7[6u1_~4ig_O6Ǐ7QQQqYyA>緕?4 23?t翞U9ާhSNkzR 6f͚:u꘶mۚ_믿.9/}}V L 4PnX(p0 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC`Mh;Ҳ@ A0nh18 H5@wÚ,%&&RwnM F@z0|H+))%p*RdddJ_T //D?(UT 44_ZPT .]~ZwHIIRt%--45Vz L R eee\>}m}/.u.zߊ;P7ucccݍ18f@u H5@wÚ,%&&RwnM F@CXOegWRRJ:ʍFȔ5Tw5B^^~8QTw5Bhh$㧵Tw5B\\'I*j@$K*(ZZ )]*%%)p4jۭEy}@pZbQ!X!k !k !k !k !k !kB.XU\/u`@ @wFs1&Н tP>W g@Tdee)11uSw0n\7R =.\;Pwp ֺQy\k !k !k !k !k !k !k !kBP3())E QniIuر@w @5Fv5V $Hr$Hکgv%` 3gQQ!~/\u@F))OkϢv(*,//D?(U@@K2~Z 4NviY@@$):I*JEZu@4n}@ܫ+3/ RnVX|=z(***P1 5@XC` WCYYYURwpnM 뎍 t7j46qUj(55U1115YYYJLL A A0׍!TC111Ayj u.\nTk !k !k !k !k !k !&4-''GII)T^^BCI))Ir݁ڑ#GԫXeg/"ɑT m>F !CYT>z0|HΞuA-##SRv\,p$WQ;.Zhh$㧵 A-.]~Zwb! $):I HJWtJII \ 1 /Vz L p@nVXn`k !k !;WCYYYURwpnM 뎍 t7j4c q@wespJMMULLLaMVV;HP7u`uj PLLLPڣB u`E!k !k !k !k !k !k !k !&4<999JJJQFFBNJIItP!GQ^c@R$GR233}'bBYT>z0|HNz*;{R9@GTHFFx?EFTH^^~8Q ͗dP!qq$Ӻ IIIRt%--=TVz L (Pan[+V, t75CXC` 5pz5.XU\/u`@ @wFs1ngp']@\5RSSnXDM;sݨH5;PwpB%XFq:k !k !k !k 1Na! {wq$D$rjAaؕ/W0v 6D.d<ʫ5 F1 @b#@ fzVuv5bqQWu0///usU5TYUk^Z.Ey `"nozw]r0 ZjC[`"vG9%@&b6{Ñ~C[`"z>2}Жak>eUOUk Cn9y /Dt]W? >Wo u]=<ܷ^#@ F1 @b#@Z/6M~nwwݗC%, F1 @b#@ F1 @b#@ F1 @b#@ F1UIDAT @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 XtkIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/optimal_lhs.rst000066400000000000000000000216131307543307100303700ustar00rootroot00000000000000Optimal LHS =========== Methodology of validation ------------------------- Two different algorithms are implemented: - Monte Carlo - Simulated annealing algorithm; this algorithm is the novelty and requires several steps. It uses also some tips such as the update of criterion after a permutation instead of a complete calculation. Both algorithms are to be validated. Preliminary validations ----------------------- For specific designs, criteria values (:math:`C_2`, mindist and :math:`\phi_{p}`) obtained with otlhs module are compared with values computed by the DiceDesign R package. Those scripts are located in the *validation* folder of this module. Comparisons are very good, absolute error is less than :math:`10^{-13}` As mentionned previously, :math:`C_2` criterion can be computed efficiently when a small perturbation is performed on design. This specific method is compared to the DiceDesign's ones: absolute error is less or equal to :math:`10^{-10}`. Note that for :math:`\phi_p` criterion, DiceDesign computes the new value after a permutation without taking into account the oldest criterion. In this module, criterion update has been implemented, but is used only when parameter :math:`p \geq 5`. Indeed, numerical experiments have shown instability of the update when p becomes large. Validation of Monte Carlo algorithm ----------------------------------- To get an optimal design using Monte Carlo algorithm, several designs are to be generated and the returned one minimizes the space filling function. As the evaluation of the criterion does not require any complexity, validation of Monte Carlo algorithm is trivial: - Fix a criterion to minimize; - Fix the RandomSeed to a fixed value (0 for example); - Generate :math:`N=100` designs: get the optimal one and the associated criterion value; - Fix again the RandomSeed; - Generate :math:`N=10000` designs: get the optimal one and its associated criterion value; - Check that the last criterion value is less or equal than to the previous one; Validation of simulated annealing algorithm ------------------------------------------- Simulated annealing is compared to Monte Carlo algorithm (with :math:`N=10000`) and should return better results. Indeed the optimal design is built such as the space filling criterion decreases at each iteration. Several use cases are proposed for the validation and illustrated hereafter: ========= =========== ====== ==================== ====================================== ================================ Test id Dimension Size Temperature profile Profile parameters Requirement ========= =========== ====== ==================== ====================================== ================================ 1 2 10 Geometric T_0=10, c=0.999, iMax=50000 :math:`C_2 \leq 0.0664` 2 2 10 Linear T_0=10, iMax=50000 :math:`mindist \geq 0.272` 3 50 100 Geometric T_0=10, c=0.999, iMax=50000 :math:`C_2 \leq 22.176` 4 50 100 Geometric T_0=10, c=0.999, iMax=50000 :math:`mindist \geq 2.653` ========= =========== ====== ==================== ====================================== ================================ Final criteria should meet requirements. Results ------- Designs are generated according to the multivariate distribution :math:`U[0,1]^d`. MonteCarlo results `````````````````` We first check that Monte Carlo scales linearly with respect to the number of simulations. Random generator seed is reinitialized to the same value when starting Monte Carlo algorithm, this is why criterion always decreases. .. figure:: lhs_mc_criterion.png :scale: 45 % .. figure:: lhs_mc_cpu_time.png :scale: 45 % Tests corresponding to use cases in previous table are implemented and results obtained using Monte Carlo after :math:`N_{simu}=10000` simulations are given here: ========== ===== ============ ================ ============= =============================== Dimension Size Criterion Criterion value CPU time (s) Requirement ========== ===== ============ ================ ============= =============================== 2 10 :math:`C_2` 0.0643 0.72 :math:`C_2 \leq 0.0664` 2 10 mindist 0.2666 0.47 :math:`mindist \geq 0.272` 50 100 :math:`C_2` 24.427 109.48 :math:`C_2 \leq 22.176` 50 100 mindist 2.198 53.36 :math:`mindist \geq 2.653` ========== ===== ============ ================ ============= =============================== We use :math:`N_{simu}=10000` simulations in order to get the optimal design (designs are not centered). As shown here, :math:`N_{simu}=10000` iterations give a good solution for the small case; but it the larger case, it is expected that this number is way too small, so results are quite close to expectations. .. figure:: lhs_mc_c2_10.png :scale: 35 % .. figure:: lhs_mc_mindist_10.png :scale: 35 % Simulated annealing results ``````````````````````````` Using the :class:`otlhs.SimulatedAnnealingLHS` class, tests are implemented and results are summuarized here: These are compared to those produced by DiceDesign R package in terms of criteria and CPU time: ======== =========================== =============== ============== =============== ============== | otlhs R ------------------------------------ ------------------------------ ------------------------------ Test id Requirement Criterion CPU time (s) Criterion CPU time (s) ======== =========================== =============== ============== =============== ============== 1 :math:`C_2 \leq 0.0664` 0.0699 0.04 0.06153 89.8 2 :math:`mindist \geq 0.272` 0.254 0.246 0.258 36.37 3 :math:`C_2 \leq 22.176` 22.190 2.69 22.15 618.7 4 :math:`mindist \geq 2.653` 2.643 55.8 2.64 220.6 ======== =========================== =============== ============== =============== ============== CPU time is much lower with otlhs. It must be noted that speedup of test 4 is not in par with speedups of other tests. We believe that this is not due to some performance problems, but is the combination of several factors: - R implementation of mindist is better than C2 because it does not contain loops, but only few high-level operations on matrices. - In otlhs implementations, mindist is slower than C2 because it calls evaluate instead of perturbLHS. It may be interesting to try with p=5 instead of p=50, mindist would then be as fast as C2, and many restarts could be tried. Unfortunately, we did not have time to make these tests. Results are close to expectations, but do not meet all requirements. In order to understand why otlhs results are sometimes out of bounds, we performed 400 runs of tests 1 and 2 with DiceDesign and otlhs, 40 runs of test 3 and 80 runs of test 4. Diagrams look similar, thus in our opinion, otlhs does meet requirements. Moreover, as otlhs is much faster than R, the same CPU budget will give better results with otlhs. Comparison on 400 runs for test id 1: .. figure:: comp_c2_small.png :scale: 40 % Comparison on 400 runs for test id 2: .. figure:: comp_mindist_small.png :scale: 40 % Comparison on 40 runs for test id 3: .. figure:: comp_c2_large.png :scale: 40 % Comparison on 80 runs for test id 4: .. figure:: comp_mindist_large.png :scale: 40 % In addition, designs, optimized criterion convergence and elementary perturbation probability are given here: (for dimension 50, only criterion history is displayed). Simulated annealing results - Test id 1: .. figure:: lhs_sa_geom_10.png :scale: 45 % .. figure:: dice_lhs_sa_geom_10.png :scale: 65 % .. figure:: crit_sa_geom.png :scale: 45 % .. figure:: dice_c2_crit.png :scale: 65 % .. figure:: lhs_c2_proba.png :scale: 45 % .. figure:: dice_c2_proba.png :scale: 65 % Simulated annealing results - Test id 2: .. figure:: lhs_sa_lin_10.png :scale: 45 % .. figure:: dice_lhs_sa_lin_10.png :scale: 65 % .. figure:: crit_sa_lin.png :scale: 45 % .. figure:: dice_mindist_crit.png :scale: 65 % .. figure:: lhs_mindist_proba.png :scale: 45 % .. figure:: dice_mindist_proba.png :scale: 65 % Simulated annealing criterion results - Test id 3 and 4: .. figure:: otlhs_c2_crit_big.png :scale: 45 % .. figure:: dice_c2_crit_big.png :scale: 65 % .. figure:: otlhs_mindist_crit_big.png :scale: 45 % .. figure:: dice_mindist_crit_big.png :scale: 65 % Results are very similar between the two implementations. It must be noted that there are many plots with probability 1. The reason is that DiceDesign accepts both row indices to be equal when checking for elementary perturbations. openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/otlhs_c2_crit_big.png000066400000000000000000000236431307543307100314150ustar00rootroot00000000000000PNG  IHDR@v>* $iCCPiccxڕgPY<@BPC*%Z(ҫ@PEl+4EQ@U)VD((bA7"Wy?g=8X'& 영ALi)OO7z? xo"DDX3+=e/1=<+]fRK|cלo,]z ){T8بlOrTzV $G&DPJGf/GnrAltL:5204gk!FgY߽zس {{t@wOm|:3<@t *K`  |d\ "U4& NNp\mp '@&+ <AX H Rt # YC AP4e@v*: :]nB#h >Ll¾Z8Ns|x7\' |+xa ʈ.FD!d3R#H+ҍ!!2|DaP4D9P|T*j3U:@P"4-A[y@t4: ].G7 { 0fgL&S9i\ b1X,Vz`ðl%v;#pF8G\0. +5.py8^oG7K n~ A`86Bp0JxK$UD/b,q+xx8FHI\R)ttL&kmtnr*MLO'!EZClH5OQp((9rʌ8^\C+&YZMPC"QXYKՠ:P##ԫqBSqi|vZm@IR%%%%%/H Cc$0J8RRZm# ۤ?0edet L[MBjFt'}mngG StYZ[6[Nb\հjJ*̪Jhʹ>l-Q ynjah;qNp^ M}ϡᙣccieg^k\\6\}\\i ܺaw}W'<}O=Yza<^xzz|4-}Oo ( n $ n ]fkYk\'.a݅aτCBC*6,b:*4r2*4j**z_tMLyL,7*Ms\m\GńD\bh$jR|Robrv`NJA0"uH*hL֦uӗ> ͌c֙ՙdKd'eoްkdcэ=ʹr6q6m6o٢%VǷo- 4 [w8h)+Y؟vUKaD"b~ yqwӒC{0{}e̲²wYn\^{p 〰­RrOBULp]u[|ͮjU-t8:z##G^47emjm,j|,&f%eDȉ'Ovֵ1ڊNS^˃Ӯ{ΰϴU?[Nk/:6t:c:]A]\t[v/H^(HqRΥ)gD_Yj^\ݸxj oZÃ< >x8(ћǙlE>ZLYZ M<2G //'&O;N}īW3JYZٿl&,]Vwzf=gO|??WA}>Mg-`*>k}et1qq?.r)ԕ cHRMz&u0`:pQ<PLTEfffDDDwww"""UUU333??? DD@@@ww888WWWUUDDffhhh""ooo33woWw@22WWw woLLWWWwRRRgggg00g??D22D--DDDD)z=QbKGDH pHYsHHFk>QIDATx y%6a~i̗iYEۜ%Lxme[_6axQW뀩4Z⤩JopqҋI?-|c Z쥗UK.Ko55% >t%rKȥ>N`,H'We*oM$U\xkVw2VHiZR>EYSuV*zbȧn)[H`ߪVaQW]mGu@WY-A%+(2|p 3ȒP}6I};b=wX,r"#|abu;$F_1DkQzW>W+8ZA"GH=rdlVˁ׽nьf(M´|C^$Ur1OHc$nX\]HEay(L?DӵkX..ڕR07JA9&95T選(QOҞ[]UיzRH2J49eSZ)? $BW"? ,>.`?,.ΏOYNܳǪj/^;]-?,,Fٓ@Xysnud|@$G(oi@_DěDW/k"7%ͩ,Bw hE1ȷ=+nJ ȿ@VG"dc8V#WX>E*_ a+ ~nu!  OP2r^9$#&KKBWhKS{ W.Z eq1X"~%~I%\W:m1?]3VefJDNt ї$׬.RњGվZ,f<@ jzj+Vő j\hwZʩ~WKW+\ T/[{7Muq~+^__ $U-SUVWQQTuK<4yϛJ7iц_Qpj:VގsV}Mm|c/#gI/Sg]] u|p@GIO?w l*taLQ*8U~HMKtmhdM&WS {v1U5,ނK m, X($d۸3v,Ed 6@` 3hы*@4e8'k2[ʗn芅!!,U:WX#`H h4Ed.]q8w# W ChXfjF~[@W(.^7i@1^^TAFP&TWhEdN偾2}-$e>\l, P[1݋ K_v1J 2Pl]1=Ju\ϕj]kZz<lh00=ԔF^TA21" d5 a@` 4})| D&b#@Z=!l@5ƨBJv+.*v޼Dn,yv8 /:pEd HOUx. dҵo5ʭ?H`@ "y5vE(^TA@XĚǼ@jVh D2CJ>!L +>?`#2IyRṮrܗ b(e\DYyEޔmG^TA*y寥*\^t_ʧlF_6xś.&;{@Z@?h/G/_,uWegW\OdUgo \ H$~jO@Ӌ*@:Ez;~ mv }X{EgD x%i+N _<"+0Y 5}X W-K%YJ/ B t(z@Ed y@us vRy. ،}rӋ*@3ы*@&]ZzʱsX!ЦE Ic@_^TA2@f %Ы]h7H zQȤkk@ ac@l a@_/ڌ) d@_F^TA2!z, >w }Xǐl@{߷!vH-;@ ۱@S D/ ϙk1L zQȤkwv}٭VBE'`@_; 5D/ P7Cq@ 2Iayq5=ƀ-X z)Nw/UzQȀ{轘+];tYʓ5\5߆^,d }Ұ/ы*@@8`@ 2I ag!B,ϗe }WCEd f -P zQt-vo30@nx=|W f'FfHf8'\lz^TAjz_ U$VryQ*)@VZ 39 aùDޛ>@@]Rf}^^TAmh*˗{a@Ok ,UF\Wm!${է΅ֱ| k]2=}^TAjf>P9-Gc?x^ 5_[(vh{^^ơDE1(ty!tu4i a1||u@Wp^˘?D{ڧ+7}֡j Xl1W zkʙt7 f` p9 TYIG}9p d[9Lu󁮑]. 2PA <.V[-̲2z #%ka~pG^UZ_#^TA%B's wmWaak @c5@3nD雁L/ 6\ ;K 6,8K_lc$% Ġc$^TAj>'޵>}%ۏXc,Â'ӧv}. d@ "TyLCܵO(շ>w}u&g@D_#EӋ*@MV)KW̉fš;L/ 51hVac$5'A ۰`5_z. d@ Đl@=!* $Wޖn381@Z}?~aLsEd[ St^TA!sO}8k=L-::,muEL[OUj 3u^TA% /}t^TA%(&C̉V0YQSw}|^TA2olAX I$ dQ$ d5!I_ /Şwյ@-h <kud} 2PG\eNzZhO 2PGF>p0kXD 'J[yT wQ'ʤD@yZ^5{\2@VLFHa@VT_ |:!!a¦D+`Kt@ZLJ蠷ہ 0@ϝULfҷ#Nf Dyl 2>'ы*@d W #x͖@T K0+2@jpB dQs! d5p0+ +Ye )ы*@f 2IL0La@@ 2h dEe 2gNT@ y] dax, d5=A6@V YV`@fm D/ `d~$ d5þ`MVd$ҋ*@fы*@&]3] 3{Ed L3cEd m,v@[ lI\ 2@U 0@|dM&Wlu9w3 2@$ҋ*@gы*@&]3e,azҍd@OB/ `Ӄ- 2I׌h`b( -`@z< dyz4#^TA2yv &@8NX q=@ d `xzQȤk}{||05 3ЃI 22!g ԁ.y^s/<+)RƳ$@/빃2;;ޥU:⸪O<փ2:E ԍXp'!B~f b7R7Dͷl ޏal-e1< ԁOaHm jXO/ u "3 e A˲0uXUƀ ۝=3Ed e mF{ɚLg@7]ַ<`@ aaI,hPwDzQȀaH Ed 7/ yj]@aΤ2zQȀ[ UL6oOAKB_fi@Ha-[Ed f1^TA2о z# Z MA 23 A1^TA2ZRbSBX %6,^TA2`xR&ҋ*@&]oOHAK9Rk4<4l U !1"v;+^TA2(}N_$17z ,h WG U '5^TA2H}ùɏKw{@ZU +] zQȤkcm2?+HW1gF@Ke 2ebst_}4Ed ط˛rl|.oGifF@'B?Odd34^xثSMҷp1/Vʶ$ɰ@3P;%fy92 *^x=|<+퓴I.fB~Ӫl@חi=%3/;'k1ߋ@g^KOv\MC[<{14ց#(?+M̻4iƿnqſs'FOu<Ɉ*0a[q>7*JQ*quu 7q TwKD]4,̼Pm^8KXj-7--7 Vo1NׂQ)^z2tk(6 y,֧JU8ʲRǜ'MzMH#U*rDt7!]9@\(eB._p++U]u8p&\Tkz--7zB~7.S"C{J^ ^@u!r_U* 3PbPgVTkIeᖖőid>(Ro\–/PmZ.WP͐\UVr0U--7'+L&K lVj96‰sSzC *ZnR-Tni);ɛlF*2ݢQe"#0xFԲ0KTJ 3 XRBV[Zn6Sɦ^0VZ;^F; (9U {a&ΐYR'Tk ?r&x "!Y Ph>S;*D$Rx%RRTkJpK 7M@0vrI\Me,JSni[d`is1b1e W[ƙ>+K6GX{H<1WMRu㕫|253[7s݌qX(kъ{QDUN¹Z<‹C5k/=᳕˳fbTC:azv&ry䵚;9T9{Cp 4v5HAA%P54%&_@ kQEzzJT}]a)vBV rټdP0Z($ y# Pw"~(H3MP[W863%tEXtdate:create2014-12-16T16:55:30+01:00j%tEXtdate:modify2014-12-16T16:55:30+01:00H tEXtpdf:HiResBoundingBox576x432+0+0tEXtpdf:VersionPDF-1.4 G:xIENDB`openturns-1.9/python/doc/developer_guide/validation/optimal_lhs/otlhs_mindist_crit_big.png000066400000000000000000001146671307543307100325670ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyX0dQ\K@IV*n(n ZKf o꭫%ڦYfj4b.""&Α9 |߯3yC͇Ό$˲ """""".TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTHga0x+V`0`ʕ%XY(@0++Wꫯf͚prr`;w.+_z-44ϟ/򶢢`0wb`w`iTy?"HիWGnݰvZHx$rҥ{WXZᅬi"oy0S:8WJ?b ԩSR U=*VZ@$ I x!N8M6a׮]8r>Bo_DvPF CCCQvmȲ .믿ƤIi&YԬY @BBT}VPHFFv؁=z/к+~њ,ZP(m۶EBBUu)DBbBSZѣG|'x7Oj+VDŊ EN̯yh?3֬YW^yP[hРy,z@cҤ*r dY֥8$*WWW~D," u 6,8|D 4ժU+Zn͛7[-u5j@߾}ڒE! pssCkLCzك5k֠m۶@:uw<`Uu13cr-L07*Uݻcǎ~&[nE.]  {}6&L UTApp0~es%dz>J*]t}y5Ǐc]6ʗ/-[ѣ ]6O [RRFڵk?8뇸| ճ?< mr)+񁋋 |||ꫯZLv5:r]?`TR˗GÆ 1a׏>fdd`ɨSʗ/zaxyYS-%ӗ{׀-&&&bhڴ)Pvm{֯_֭[O<~!CAZjy[zQB D=pС|IHH@hh(jժԨQ/Oe^~ 6*WF!,, gϞ5/5 FPPU+;rM ˗SO=+V"*xHc=KLLD۶mQn]꫸y&֭[>}`Νҥն”x z>J*aΝ;ѽ{wu.\Z_Çѽ{wܻw}A&Mp ^6mΝ;ѪU+ѣsyx͛7/}/^_*T@HHqڵ 3gķ~#G $$ʕCLL p|7-Z 22ӦMCڵj^?o~W~m޽F={ĦM0yd} 27 $$y?ӽ{"((,o߾[.?@5 ==ׯСCa0T=LT*DT$I ;vȒ$NNNeYgʒ$ɒ$ӧOX~۶m$Ir޽-GGG˒$+W޹sgY$y/_,?$Iի „ $Ir>}䌌 yͯ###eId9>>j[ ꫯʒ$ΝYCΝe'''yݺuSRR͛ˮիWMm6۔$I .K$_~)Svqqwe+xbY$yĈ6?~̘1$I7|c)))rvv)={ج)((H$I~,8p@vvvV*߻wϪ{#GdI[3ղl2䖝-7jH6 5k,[N$InԨž&&&Obbcɞɓ'-1B$Inkذb]v$I_|aE~gԩ#_|<=%%EV&WVMNHH0KOO4i"׮]_e駟lټiذl0~.Νkod[nɕ*UW.8qb~MӾY$y̘1VCݻצiӦeeeՓ uV-ZdFYͿ!;;;M4)! `DeL6 QQQ4i`H?Ukɓ-VZMXQQQİaФI\~m۶ŠA]R777,Zʕ_\9rYfi/{_~0`-[uشi^j˗bŊĨQbիa)S,Ό>skgʔ)2hDZZF =c8p 222`g3o`텮?ѩS'<FuZj*ܾ}ӦMCF,5mcǎY퇭{gggxxxX3g={Z G ?jܸ1ڷoD,"Kʕ+s6lZ-ۼysjO?>G~0f899nBBܹԦMj̏:DEEYͿ~:ĉEɓHKKC,t晆'xɊkA駟^@ѭ[7nݺq1@ǎmtWF||<^~ey}#F@XX>sL0e\t #FPtg25""66رc+TT -Z}gyb~Ν `3TX~L I˖-.¿x7o?Ė-[_Y4_t5>G[`@@@Μ9c1{ot FK.|8 :t@ͭbyСXj3MU#kx 坝QZ5ܸqHufӭbn|Qhh(Tggg$''cܹHOO/tgy1/]vsWPBdd$l۶ PZ51'Oho:,@Tֱ!|_?O?F*:Ls󓒒,3|x!9[b޼y?i~fAy/_㏱m64i=O+=ղ2ƍ+~YqUԬYbzff&nܸQ,N.N˖-Cbb"n~A̝;H7}>f+G:ǏSO=}|||l29gF~G,XӧOGvvo2WD8^BDjܸ1<==/JikJiݍ5+~h]@\rh׮MO?i&>w~ڜ__$IXx1/_lg?r޽j^JJ j9Nll,wn2q iq3ݶ_~VS훆L,1)}&M0j(Y?޷oռl8pPu56 D/#G"-- ׿.($UV9/;v_hkA \r2dܹ)SX;s >SWfwww>wgϞ'|b1履~š5kPJXn]}/^ʕ++\KѰaCZ|`Æ EÆ mwĐ!CP\9̛7)Sݻe1c}GժUq…"Z 6tǎ!Cao 6޽{ͷ 6?>/faaaTMf  a,羠k0LIڵ [nd:uXCJͧ("##O?oE ϢB pv؁ٳg>ݻwٳko߾P*W#G֬Y]bذaOѦMTT /^СC^zo>̟?F.]p _ $Yfa׮]ر#j׮ غu+Tb]`0`„ _QreHI&cǎѲeK\p_}m8_qUpqqqh+WG8p 郆 ɓAŊ x''`ȑÀPZ5ٳBƍ1sL6iM6EM6᯿s=!CX,۽{w|0hѢʕ+Ν;zG+vBzp)l޼×_~YX|9z~VUT /ݺuC&M I.\"99|1vXo?/bӦMprrرcO$,[ 0ׯعs'z^D?6 D$IV5-*Wn݊EaժUXjdYkW¾gPP>#,]sEFFj׮mn@|||pQ̛77nĚ5k///4io8Qrek̙3nnnرcWG*Uয়~Bll,233QV-9o-5j+WbXp!kGyyya߾}?~*cpaܾ}ZCT<"ib͈JJZZ[7XDPPb!XDD ./N:+Vy ѺbӹsТE nݺıcǰ~T\}% l@H5gΜĉ ,\P뒊^5j!Cgڵ СC1i$ˆhx ׀j8KGnܸm۶vڼȍHҐ={ZjZS*ёm۶Y=gx饗.Tb#kt}XbHdž .T¼¼¼q 2|Fc#aWq5r1k0o0o0op|"t}ѰaCK 1o0o0o"؀""""*؀j؀iӺR  &R q8;K 1o0o0o"؀qDEEi]yyy)D؀l   &R !"""  /_u "--M,qi]yyy)D؀cZ@*bbabaDʱ!6 DDDDTV!6 DDDDTV!"""""հ!hԺR  &R Fu "--Mqi]yyy)D؀QYD؀QYHC111Z@*bbabaDʱ!ڵk.Tļ¼¼cBui]yyy)Dx*6 :*6 :*6 D ӺR  &R  8\0o0o0o"؀q ij>"<<< nݺw܁ONӦMӺR  &RNƺu0{l3/㩧BDD_6z??|3g݋UV!XDDDDTV 7kÆ pvvFxxy *%2޽,󳳳1w\ZBff&OAرchР<<<,n_6 wwwO )) O?44k w.}ƍZ@*bbabaD ׀$%%Z IDATji˗0|gADD~o/^4/w)a-]x믿^Qi5tPK 1o0o0o"儻$-- ...V4놄 $$h4gϞԩ}],\p= λvza֬Y/m􊊊ҺR  &RN3 HOO|Gm۶5m# nWjBp”NePA73yyy)'\esURRm֬Yצm<VV^)))n֭0_ڵCLLr۷ohZȑX|Ŵ8F1VO:\dff~lق8UP{qI'NѣGIBy"De  &RNM6 0n8,Y]v1k,rǏG&M,koĬYxb >}􁯯/&Nh>\]]ѵkW̜9|ujժY-K⊋ӺR  &RN`U0e|HNNFfwߡCe$I$I 47oۑ ooo >^Ų7ƞ={0n8;0 ֭>CMAqb[`%XX7r]g1U͛SHDDD7EDDDDDaC<'EDDDDe" ٺ_:][,[,̛H96 D5j%XX7rl@tCu "--M"""""R """""R " h]yyy)HCk׮պR  &R ֭[u "--M"""""R mxbBDDDDDaB0K 1o0o0o"؀`O   &R u "--M"""""R ,""""*؀i(66VHE[,[,̛H96 D5k%XX7rl@tC_j]yyy)HCnnnZ@*bbabaDʱ!"""""հ!"""""հ!رc.Tļ¼¼cB!___K 1o0o0o"$Y="..-[Qܽu9DDDDxѣZa %$"""  .Tļ¼¼cC%K 1o0o0o"؀ihZ@*bbabaDʱ!o(--M,""""*؀j؀ih̙Z@*bbabaDʱ!Gjj%XX7r,pW/вeK/ii~ZCDDDDy׎= ??πj؀j؀iƍZ@*bbabaDʱѡ + :THE[,[,̛H96 :u(K 1o0o0o"؀1bababaDʱ!"""""հ!"""""հ)>R ˗/׺R  &R .Tļ¼¼IOOǸq 777cΝb  _׮]^JJ q lܸ8wJ h]yyy)uZ ƍ1zhԯ_ݻ7vڅן1cԩc1SNEZZ$I$Ij,""""*k@~g[gƘ1c/2z)DDD`nW^ooaѢE:u*NZډJ;`mذ7OsqqapA\tmȲw"++e|M;v,RDDDDDep ȱcРAxxxXLoݺ5 >>mӧN>ms ĬY ;8C`4.Tļ¼¼nVRR]| C`` *V#G?F5kMKKo1cW zFҺR  &RN$-- ...V˗/ooOHHBBB̯F#zN:w… >deeaĉX=5AAAZ@*bbabaD ׀"==jmZ711gg}77B!XDDDDT w aVIIIoooYfM$''_O:>>>ܹ3+W] 鍾}0sv5׷,Xj6ǜ9ꉬqqq0qH̜9ba4`1}޼y;vŴTFZL_v-¬j8p bb~p?k׮5թS͛7ѣCdG."""0gܺu *T0O0yd\p>>>mUV>N8 "={NJJ *Vh1-..-[p~x챜G<wCeDLL ^x 0o0o0oq׎= dI3 GVV,Ybh+W !!_n-[ ..ibbb,f̘7nbbb ej SRMzPp_*E֮]u "--Mp׀i!!!0a]ubʕ8<ˍ?VBbb"|}}۷Zl OOO?涞n:Ѻuknw7tdI֭[u "--Mp Z SL_|d4k }:t`^F$HO4h6oތ۷#55>|8"##Qz7;@n$6 DDDDTz w $-ԭhvx H w Hi=,I"""""`sٖـ-n He  &R N| H'犅yyy)DxN6x`K 1o0o0o"؀`QYDLg>Ѷ""""D}piE}@j-T:w饥)P.Tļ¼¼nVRR]| C`` *V#G?F5k]7##| 2v4>\ @$-- ...V˗/ooOHHBBB̯F#zN:w… ;j(8q[lA 8R 3:4&,WWW[My#жm|obٲexwXT(ZWLll%XX7r5 ^^^6Y%%%f͚5lsފ+0~x8q-`@R۷ohZ{ȑX|Ŵ8Fܸqbzdd$fΜi10Vϛ7cǎw}+ڵkflVl{E~9v,ξh?[DLL1c~5-$~~̚5L #8qb؏GIǸq~\dsumٲqqqVC݋AK.peQIyx뭒{Yyyy)ۋУТE lݺUmkhӦ BBB0a\v uʕ+qy?VBbb"|}}۷Zl OOO?sh4`0_~XnE ͚5O?]lTZdb:5 =GDDD$6 /_o]͇ɪU0e|HNNFfwߡCe$IglѠAyfl߾ի;{,ܹI0rHmH2݀{HIbADDDT:vO?39f˗CGDGG#++|f̘8$''#==gϞ-ҥ M:еx%/%Y{i\l{m[,[,̛H96 1-[k] _$VڠnpcbabaDv̙3QR%tM6/o4 g@ֺR  &RN ȯ I닻wZ&5eEj]EuDDDDnDKL~w+-ozZI֞y߫|nDDDDen!x02..cKii8>Օ6--Mݻwcر8p ٳGJG||kelCii u "--Mn`edd`РATT ,ۘ={6^|E|(Wƕ=CG?]k3|K 1o0o0o"t{dڴio$ܺu HJJرcӦMӺL*k]I7&`_MxF0o0o0o"tۀY f͚'x<'̙3+`VXr ڸPhV*m۴i$+"[ħ}!"""6 >>>e g{E͚5UH=z=7{CH3gj]yyy)$44_}'O"++ HHH/_ZY"JSBXKMMպR  &RNw0aΜ9Kbҥ0rzl'jYbsp4ЩS59πH~ %DƼ¼¼m+V`زe Ν;x'gѸ’9R>= TrrR~+6DDDD6 &͚5Cfʹ.C_jP-7l^~58 """"{t{ ,-Mk[R;b eƍZ@*bbabaD1 prrBFFk`˩ނ\m9zXWa85 ZReСZ@*bbabaDfԩS!I:ujHvQx@r4 yZ]WKn%%**JHE[,[,̛H94 yqEEweee)fރ k[׀hfLC.Tļ¼¼߿???,ZHRt͑3 y {@w=Gn[M^ """"evUqyS%Հ;.oteضmeڜ9꿧F&4zƂ6(˗/׺R  &RN Ȕ)SbȐ!ťKp-/)V(3 y}9|{Cݾ=WrrᶭwqqqZ@*bbabaD"6m ?fH,G.c qa4`zm[QZeGDX7X6J h]yyy)D*eݞ6 ~ xz?g@._|ҥEk@ NM9""""*Ym@D R5j~] ȧ{6o})/9ߧ;Td_Ww" !2Z|%w> t{ H^oFffeʠAʗ8RwѺ{򵭇nb{ݴ4W"jz,_ۊ93طxu`\,uYuraR ~:F#vޭm+_^ zʼy32?{߀[s59C|| ^r2ЩӣKZ/ hԺR  &RN ȁбcG>}C z}6/^a{e¯-_gd_@~)>|NSnZpuim@Fu "--Mn'QF[ O3P IDAT#[hdf>KU`]] DrtERңKku "--MnÇ#,, 3AR#PA-[V2/^m.@/&;6 6 ʕv˗bE{{MsXuƍseBDDDT:dž lλ>ѹsgҟWee9w G8zPܔ^7111Z@*bbabaD6m>޽{cҥõk0eԞ;+sB5lu @{8bV)Yv%XX7rm@ڶmOƫ x1|pdggGf4RoVcW)Bu J[,[,̛H9> v튓'O">>NBvv6֭VZA*?!9|v;e+ViBN(xYG΀GH;=j*$&&B$h AкukHDZJ2uɑaP=}:%Д3 DDDDm؝!XQx` |W9Ƕ(oBJ5 DDDDmRI2T=]}wۥ`---M_/o>dffZ-EAj:ggyrGV fMuS-_;z툣r?7ǧx]Z>9W,[,[,̛H9]5 0}tŋc6TV\VizE~jaHޏxz};ty?V﬎#׀(=룷FeZ@*bbabaD s=hӦ O`e$I;֭r%'{L df!!Cr99"ɼ'{f{}8m{v]+QU ?I&x5J}h-yÇvFow8ǷWۖ#gvH4K.B6Jm@^-DO[/#IeZ@*bbabaD H`` $Il~m,ː$ ?Uj#ǐIK+v6j|e PzfB.T¼¼¼Yw2ζwypa3m@n,vؽjY7U5kG/ԺR  &RN7g@v>BZd (vϜ t}*[ۮ-p2y> ܴ.Tļ¼¼0f|Z ylnEJp htـbŸZ\WWrye"_|nnu(xN l[l;==ƍ7;wފ+`0l~] Cpww|Mq,_ggZ6Y5i׀pme{~UM΀;VHE[,[,̛H9\ל9sлwo4maaap.̓ ƍ1zhԯ_ݻ7vڅgaƌS4OOO֭6m9s… ={6N:-[8Tof<8|y@ݑh{{..@@@b|6Smla(nZ@*bbabaD 7|>>>pua6Ǐwh?3֭[ٳgc̘1_~O="""ѫW/Æ'jժؽ{7 Ѱ׀[|߿el5 ݿoK 1o0o0o"t;jժhذ!:u6mUT1UZUVux6l3\\\0l0^X6;Q˗mO׀oKDDD$ݞ))IIInvޑ5www>CLL """?}x{fn5j=w#ʷaZ晘{i H#cbabaDYv-BCC ux(/_y=!!!X|9 шӧc۶my&}]`}{qD޳ڟ] FC3Z@*bbabaD3g{1]]]1gtdz4\|_@@ڶmkq_6Oq<-$>+x^l5 'o"BC2|K 1o0o0o"tۀTlW^Uܣ5Kާ{FQ񊉉ARR<N0e&F9`Q<==F%cy?4euݽx H"OZ8~k}HIIhI8NP2sXUB˗/Y=;;F{U'&&b(iȐ!xƎ5ka2`4mӧcsh4t{sdf*e:s9?GffW<ģ#==+[HLL|kڴ):t耉'\${|syyyHLL=wSiРA(,,ĪU[v-:wlY… HKKCAA˗m_d2O>5jGƍqMK p- ;vԩS8u>St Lu^ <SNE||ogzCDDD<*y;v ++ Gwߍ9sZ78Pnσ ]O͊Uf|c[|gM@,Y^]׶ʲf@nx /7zW^Acɒ%~:~U8$wYy3=  딦^ j/X`}ώn&I&1x MG% ΝÝ%!np5-._vGWM@J.<`{ァuȍo}a&Rϣ"T+1|\T 7.^ƌ﷖93 W/-9rDy\V6a)Y^""""r'T/.\k{?GJ~C0i$ԫk~2+O% )M@iADDDDl޼7o)b@h(Uv?/6=g~2i8{z};r%0>+Q_N:K+k^FigK?WZHaQL@M_0h xE,FQ&o}a&Rϣz@"##nBg\Sy`%;~y]˺wDQ}{| ƍ Wƍfo}a&Rϣz@u5שaI͚WVRXŋe;vkGeիM 7bƛH=ѣ$IBJJ |||,ǥB@$ڵˍ:\SeԪ{W[ !֦ PvŮMDDDDyLؘqQQWtkΉ%{˺wg2Ƌݺ;]ݻw;<&ܾTFHiz Xz渾3= [^䟿|=УWRRX7"x /7zBUwRrr\ߙcG۲o߮G`ƛH=)MVVΜ9Wrh*3q^$Yժٖk[v-uV܈</0DylqO>Aa)4%I*/#˝CJ& {:_߿qF :=}bccѭ[7Rt! xUIyĉ7m*{ǝ= %]/{ygusr&""""r-M@RRR0a,ZHx@^x  QwY矷Ν= κvM}={*DDDDNB DӦMn+C@˖?r%]йk+>|{nD[_o"<СC]KUa%(;m{pv[ aV>|{܁; /0Dy,ɤ84hك޽{chܸ1Ur79+O⨗Ý= & p}?eRm)gy=7"x /7ztQ_k\6yӹ{Rr=u3/u<֚5c_ex]5 =0GIj= rύ#0x MG`СXx^zxgoUV35k< t۷;"V""""t_bw].^E<^9WRQrs'gHu2DDDDã<(jw"9Gׯ/[Iޫz@&OG`ƛH=bWk׮?vf}'R_+ܸ!'\w]w% mB^[_o"$!'\gkOekƶh, cB0`(```dyu)Ȩ؊_y0Mp+s ,(MaƛH=NB'#Fh )?BeQf&е8'$;;[}#cƛH=]!>> 4@PP:w;w:}QF`0`6rss1|m!!!_>'yye8_XP`[v钜8o;@^[_o"t 6 K,СCl2TV þ}T_СCHHH@@@$;\G_;vĻヒ8~8wѕCt.DSεnuV,^&M :ڵC\\$DXv{NrssuV < ;͛ѩS'=ˈO=!>>@Vڝ6~[HDDDmtm6`і2K8pΝ;W56l؀GbٰPn]Eyxx8 + 5kP|fYcȫ0x MÇe˖)1#qB||<^uԫWnL<֭͛6lj׮H~p4Fqƿ1x M`edd ""¦\vy9s&1q2aС^;CdddOF MFʪ7c u"x /7zɁMy@@|i?e˖aѢEux%K`ƌ3f oߎxV!R|Mۆ (H`I%R(s9|>>GbbXӦMѡC2 Bg&O,|||č7s$?֮]+$IrZtBB$ls6mڈHMMDjjjKW G}#x /~ZdРA(,,ĪU,eyyyXv-:w .\4?$kGNMLLTd2{T%GוYeoUYCL&7*[_o"t7{1uT\t ͚5CBBӱvZK)S`8}47nFQF6?~<իrl֬~i$$$ƍٳ'222|ra„ nyVr3۷O,ШQDʚ{9wo}a&ROw _o&6l؀WnݺYHgOBBZl7>CHH~̚5 -ZpٳkIĔ)_k6hcNB'"""RW$Oa2T.AT}'e^ 18tضMkdN[7vi/U~_8], PZkLHt7 UL@J&( bƛH=& Ddg?K 7ε"x /7zL@\He#99@^*AQo}a&R Q9&Mdg=DDDDU2̞<>sxmaۺ{@Lxۈ& De(٫޸ClTQx /7zL@о}h򜟟}Ϟ%K_;%% *'1[_o"8}XvMy2d$'ǙoEAAHU֭[n/7zL@Th7/NܵO(& D.:W;+:"+mzHH9urBDDDiUjՔw<,XPp /YÇkr#[_o"U[/\h}Ozumqq% ?Z)M$ƛH=I>& HMMETT!.]**R\('!}BHDD}|nQU׵m /@`\r2лk>$"""/!XDWvU<ՅΟ{﹧mDDDDZaBZ`l +KݻJ5o}acBXhS^m!""",L@<܌""" lePo^0D1!P\\Mِ!s) TMދƛH=& DZbW?Cxwb&R J[zu屁^t /7zZC䡆 ADDDJL@<ԩSwk """"bB znەtMއƛH=& D.C)OPso>0DIBp3Oa2TDEEid}7I U{@qqq 7\8>>/+EDDDUb֭?>,X#Gb׮]hҤ T]CX⋨W:K,w}ݻw' I&a˖-hӦ+0T3O<~״*񦪍ƛH=% ۶mFm)K/a=zgφmK.O<;ܴ7n\>wuAcҕ7T51xhٲ%BBB:u9r糲_ޏG"##wuF`ݻ]zUխ sAoo}a]rs~~̙ĉKs aXWڵk>}J.9z6m!"""RG[NNm,Ksq,[ [lon޼iy4lCyXp!6lP kh`([ADDDT:"//Ϧ<KѵkWQF֭_JJJm&O%U4T0x$""0 @ ~n׮]HNNFll,N>my'9sYYYk؛#k׮9lc~`4]ucرXfd2h4"33SQ>}t,X@Qш4E1ķlFݻWQÇ۴mȐ!|bϱnݺ =O.1!=nϑapW<ģcٲe^W=GbbXӦMѡCII[ɋaɒ%r BCC-sŴipYEٺu0b~w,ԩS1116x\t= s7[~x-CDD}t2h bժU<];w$.\@ZZ ?0۷#<<:uBRR lloYs1߿={tܠ<""""۶oߎ'YfHHHC7ߠ[nׯ_ӧOqƥ^+22۷ǎ;ǎ}݇PBe˖3jIR7Z֯_ &`Æ ?~< [$ RotvVM6سgڶmٳgc޼yܹ3g7 ԺDDDDeebF?Çڵk]v0=M[?}tB)\snтL@<wJ[_o"igqӭ mC:o}acBźw׺DDDDJL@+&MҦ-DDDD0!PɝZ+*2Ҷlނ*&x M" -\,% 巡rxb&R lkv`[}oCP&x M" s* rm*#o}acB䅦N>PYƝ҉0!R?<^ +K1!ɓ+AAKVV- o<0D1!Pƍ+c[ǕzKrMƛH=I!nL&(C^Qm[qNDDD<~_8y;֯;][Z߼ \][Hߘi(---VMyܾ[nK%+o}acB8ǭ/\jXZpgI{0D1!Њ+v͛Ӧwƛx M" sƀeK뱽%zrqN}a&R m}6YSHHDТ];BDDDHC ,p= ?q8wM--Ma&R ~ϙ3#G EI;0DIBu#Hf2TDEEib?$%Y__CDDTUZűH/W}6 """aBC (ӦDDD?L@4}  !AYIStEx6o}acB#Fhv^!2~0D1!Ќ34C)?Tv&b&R ^=c8qr=Mx M"$QeYA6m!"""}`Bsm(;tЦDDDL@4f`_垑׺%MƛH=& D2LZ7pmwիox{0x' !֍ dBtt4RSS9 "u"""Ok"ԯg{0!"/Nei9 huKY=Bih4jϷ` <=Z0D1!и[{8c׮io&b&R zu$ߔe͚io&b&R 9Բ%k`fCDDDU"*S@{9EDDDHCIIIZ7Am۔ݺzU)Tq0D1!PbbMP-4TI`"SUxS1xHC[nպ NNRUxS0x2>гuk ?_Q|ߟAH& DVC ʐx4hAAAܹ3vuF8w5ԭ[|IyM^hZ7_YiӞ*Ǜx M.aÆaɒ%:t(-[jժ_~طok:t $I[Ɂ$Ie%};~87N֤9Ǜx Mb֭?>,X#Gb׮]hҤ T]CX⋨Wú V\xyPa7nؖ5m \x:o7x Mm۶G㥗^pܹ2a=zg.3?~ W.\u\[7 3J.)ܺM1x$00yv ͵/ѵkW<qi,^sAPPPL^m˖-Z7;vðHo>\i›Mo}a]awUFFAv?k.$''#66O 3g ++ nÆ ѽ{wK ..]ӧO;ү_?F+&&IIIz)))06;v,֬Y(3L0TO> ,Ph4"--MQ|rL.1?;;FѦ911C s{lxGS3dϞtliW[?2db'uO|U9#--+[Qa29%zDwMCeçIBgd\rsbڴi8{,6lhuaĈ"66=z={ֽvW(3LFjj*x*Al5 xQH-~_8n ŋj* vZtْ|\p׮]Cデ~&CB`шovfϞ?SQƛoxphֽG@Z~0п?н;{f#""J{1uT\t ͚5CBBӱvZK)S`8}47nFQF6?~<իrڵM=soGNvO>M<-Һnצ p,p*{oZ#5oڵ25zx M1alذǏGaa!>stRG$HT)O]/\0mҬw {ƛH=dSHz L\i{.25 ?v{ӈ,}tBD' mNx 7:$"" yxظvŬf֦mDDDTqL@4TrMs {K|SUbwx /7zL@4uXBtgk< iF5o}a&R VXuZ$c$ek͛(/o}a&R ls|}wnܐ{EJl |]w+%0xPy^Ha! }5kZ򋼬<0w.s']H;$W/KX,Y" cG][U= DZ`M*rwEJn\XT<Y m ԩ ̟T^o}a&R nWV ]/r钜pdha[5OS;L'zUM[_o}aԓBFd2!::Һ9D^u9)տ%|[~Z޹3֦"ҝ5= '$[7.{80s=;u6p\cBDW<dhi %EeAߔuO_5m*N6u[Ӊ& DD:uniMF =;`.W^3.y0 :hxq ([_o"ihĈa^$Do&[7zL@44n8@nx[I'YrJVrꔜdd?339sfl7;K-W.ԩc"lhMl?9j7zL@4ԫW/@nxFP"}EErrbr5ySBv?CNJkۭ[W녓'}:[jז{f!Ɍy_p00P:&R y-A_٢3reeɉ˕+l91OxQN:]33zdQu,I:usOKrϊA`y>LX\?8XN|s""& DDDvH< }:ڵk`0 !!ncǎO> EXX^xdffڭfihٲ%VXa޵k0zh#$$=>lѭ[7#""Ǐǭ[:?bܸqh۶-BBBФI 2'NxW}+f͚!88aaaҥ 6mdS>ś`]wesv `uAE][#4O ___'V^-t"|}}޽{nB$)z!$I 6Ξ=+ԩ#Zh!/_.Ν+j׮-:t uW\)$I}x$IbzK."$$D̜9S{m۶zĉ"::Z|bڴi" @(^' 4Ǐk֬g!!!_~c×_~)#fΜ)>#l2Iٳ-osY$BBB]wes[!I0aشi╙ixk ~!Ixw,eyK.ŋB:tW^ٳ;w IĪU,e",,L 0@^WZʶn*$I|ˢVZgU|o߾aÆ"++RG IDJJJ9^/n߾(;q?^CqƖ2 2D<#ڵSc9)gn& TЦMpy 2&MuEDze0zhYr%1k,oAaٲeرcfϞ%Y`u.''6)+Ɂ+bEYߟKKKرcѥKoo4qD\̙3z*5B~~>nݺxk ?~YYY~СC-E*5lm@"00Pӧrp$Ih4 6ؼo0p@~[^Z̚5KnZ ?40ޫ{62ޡGGgV&LAAAVZ"--R+&O,"""D@@~̪"22RH$$IA 3gX믢w"88XԮ][ :!իE֭hѢXtzW^#GuG"55nݽ{]@Q^=k7oV@G|AK|K .]mٲESԯ__0ѯ_?sNwzm6"˖-w aÆ^'OxkC 5"""""JIDDDDD6L@m0!"""""aBDDDDDn܆  """""r& DDDDD6L@Hw`w}uSȍyu`0d2K x`$Inn i dݺu6ݻwGNN~74ȋA\\K$Hgy! B ˬ.ڶm@ԯ_cƌk׊Ā;"((V]=իm+WѣGgKz9 1p :ϟW6lBCCqy 8[.&O"E-[ ::իWG5о}{,[bDDTn>Z7\K$3믱qF:/20bL0NŠ+pa۷>>>koxg1fhժ`ʕh׮ر*ꫯ.]^{ x7+֭È#pbp.]}èQnaa!zΝ;w_wy͚5Ø1c_5}Y<#5jѣؿ?bcc]MDDNDD֮]+$IB!Ǝ+$I IĖ-[B$yfKY&M$I"%%:6e}͚5SmVæ~+$I{B/֭+ڷo/, !I>}_$ٳg+%:vh9?~Y(**?iCt?F5#33򊊊Bpp0[E;={בxNBVV:t._W_}~~~~u/l>c0֭N:e9Un޼CDDCtĉ~:֭k˗M6[o߾}>}: ;;R.I_Pu *UVطo,00aaaZjիW_}ѷo_4lzSO=޽{;6""r& DD:STTubvχ+mC~~>v؁ooFu;JjҤ -- >of9,___*{ }ptd2 aRHa K"eP.%q6sRV 2G,D)9yHk|OB@6KkJ; Cb1xzzbuubcD"+#-ohhh`ooǜ2<<\63asyyY1 K' Cuvv077 H azzuNNN3"ۤR=44Duu5###LMMqwwx}yhnn&| h4J.crr^ ₭-$e㟟?|L+illT*C{{;Η$}?D~קTY^| KKKDQ$tw{b2 $ fff'ɔfJ%677%@ޮ?11AMM ,..R[[(\}4r}}M"`||ϼNI3?!I$I7$I $IBcH$I "I$)4$I $IBcH$I "I$)4$I $IBcH$I "I$)4$I $IBcH$I oJS"#IENDB`openturns-1.9/python/doc/developer_guide/validation/validation.rst000066400000000000000000000003011307543307100256630ustar00rootroot00000000000000.. _validation: ========== Validation ========== This section aims at exposing the methodology used to validate numerical results. .. toctree:: :maxdepth: 1 optimal_lhs/optimal_lhs openturns-1.9/python/doc/developer_guide/windows_native_port.rst000066400000000000000000000274671307543307100255310ustar00rootroot00000000000000Windows native port =================== The previous section explained how to cross-build OpenTURNS from Linux to target Windows. This section gives hints in order to compile OpenTURNS natively with Microsoft Windows tools. This port has started since OpenTURNS 1.4 and is still in an early stage, any help from developers who are familiar with Windows environment will be greatly appreciated. These instructions have been tested with Visual Studio 2010 on Windows 32 and 64 bits, but they should work with more recent versions too. Visual Studio Express Edition does not ship 64 bits compilers, but they can be installed from Windows SDKs, instructions can be easily found online. No Fortran compiler is required. Automatic compilation --------------------- First of all, CMake must be installed, as well as C/C++ compilers. We will describe below how to use CMake with Visual Studio and Microsoft compilers, but CMake can also be used with other build systems (like NMake, for instance) and other compilers, see CMake documentation for further details. The following programs are required in order to build OpenTURNS on Windows: - `Boost `_ - `OpenBLAS `_ (or any other BLAS implementation) The following programs are optional, and we will show how to embed them into OpenTURNS: - `hmat-oss `_ - `LibXML2 `_ - `muParser `_ - `TBB `_ Precompiled binaries for all these programs are available on http://sourceforge.net/projects/openturns/files/openturns/openturns-x.y. If you want to recompile them from sources, you may also have to install - `Subversion `_ - `Git `_ The following programs are optional, and are currently not used by this native Windows port: - `R `_ - `Python `_ Some OpenTURNS components will thus not be available. If R is installed on your computer, you should edit ``openturns.conf`` and set ``R-executable-command`` resource in order to let OpenTURNS use it. On the other hand, as OpenTURNS is built without Python bindings, Python scripts cannot be used afterwards. Installation layout ~~~~~~~~~~~~~~~~~~~ In this tutorial, OpenTURNS dependencies are installed by following the layout shown in figure [fig:win-inst-layout]. Below the top-level directory are four configurations (Debug and Release for Windows 32 bits or 64 bits). Of course, if you are only interested by a single configuration, there is no need to create others. Each configuration contains subdirectories for Boost, hmat-oss, LibXML2, muParser, OpenBLAS and TBB programs. Each project contains one or several directories: ``bin`` for DLLs, ``include`` for header files, and ``lib`` for static libraries. .. figure:: Figures/win_native/win-inst-layout.png :alt: Windows installation layout Windows installation layout For convenience, all libraries will be compiled as static libraries, except OpenBLAS. Build and install OpenBLAS and TBB ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For different reasons, OpenBLAS and TBB cannot be compiled along with other dependencies. As explained on their site, OpenBLAS is currently only supported on Windows with Mingw compiler. But binaries can be used with Visual Studio, this is what we will do. Thus go to http://sourceforge.net/projects/openblas/files/ and download Windows binaries, for instance ``OpenBLAS-v0.2.13-Win32.zip`` for Windows 32 bits, or ``OpenBLAS-v0.2.13-Win64-int32.zip`` for Windows 64 bits. Unzip these archives, and copy files to our installation folder: - | ``OpenBLAS-x.y-Win32\bin\libopenblas.dll`` into ``Win32-Release\openblas\bin\`` and | ``Win32-Debug\openblas\bin\`` - | ``OpenBLAS-x.y-Win32\lib\libopenblas.dll.a`` into ``Win32-Release\openblas\lib\`` and | ``Win32-Debug\openblas\lib\`` - | ``OpenBLAS-x.y-Win32\include`` into ``Win32-Release\openblas\`` and | ``Win32-Debug\openblas\`` - | ``OpenBLAS-x.y-Win64-int32\bin\libopenblas.dll`` into ``Win64-Release\openblas\bin\`` and | ``Win64-Debug\openblas\bin\`` - | ``OpenBLAS-x.y-Win64-int32\lib\libopenblas.dll.a`` into ``Win64-Release\openblas\lib\`` and | ``Win64-Debug\openblas\lib\`` - | ``OpenBLAS-x.y-Win64-int32\include`` into ``Win64-Release\openblas\`` and | ``Win64-Debug\openblas\`` Note that DLLs have been compiled with Mingw, and require some Mingw runtime libraries. They can be found in http://sourceforge.net/projects/openblas/files/v0.2.12/mingw32_dll.zip and http://sourceforge.net/projects/openblas/files/v0.2.12/mingw64_dll.zip. They are: - ``libgcc_s_sjlj-1.dll``, ``libgfortran-3.dll`` and ``libquadmath-0.dll`` for Win32 - ``libgcc_s_seh-1.dll``, ``libgfortran-3.dll`` and ``libquadmath-0.dll`` for Win64 TBB comes with its own Visual Studio 2010 configuration file, but we did not find how to integrate it into the build system described below. Thus the easiest solution is to: #. Download TBB sources from https://www.threadingbuildingblocks.org/download #. Unpack it. #. Launch ``build\vs2010\makefile.sln`` #. Select ``Win32`` or ``x64`` architecture, and ``Release`` or ``Debug`` configuration (not ``Release-MT`` or ``Debug-MT``, unless you know what you are doing). #. If you want to build a static library, edit Properties, tab Configuration Properties, General, Configuration Type, as shown in figure [fig:vs-tbb-static] #. Build project. #. Copy resulting libraries into installation folder: - ``build\vs2010\ia32\Debug\tbb_debug.lib`` into ``Win32-Debug\tbb\lib\`` - ``build\vs2010\ia32\Release\tbb.lib`` into ``Win32-Release\tbb\lib\`` - ``build\vs2010\intel64\Debug\tbb_debug.lib`` into ``Win64-Debug\tbb\lib\`` - ``build\vs2010\intel64\Release\tbb.lib`` into ``Win64-Release\tbb\lib\`` #. | Copy ``include\tbb`` folder into installation folders: ``Win32-Debug\tbb\include``, | ``Win32-Release\tbb\include``, ``Win64-Debug\tbb\include`` and ``Win64-Release\tbb\include``. .. figure:: Figures/win_native/vs-tbb-static.png :alt: Visual Studio settings to build tbb as a static library Visual Studio settings to build tbb as a static library Build and install OpenTURNS ~~~~~~~~~~~~~~~~~~~~~~~~~~~ OpenBLAS and TBB are low level libraries. Other libraries use STL, and care must be taken to avoid mismatch between runtime libraries. To this end, we decided to use a so called *SuperBuild* approach with CMake. We defined a metaproject which drives compilation of those dependencies, and also of OpenTURNS itself. Clone `ot-superbuild git repository `_ (or download an archive from this URL), launch ``cmake-gui`` program, and follow the following steps: #. Launch ``cmake-gui``, and select source and build directories .. figure:: Figures/win_native/cmake-gui-start.png #. Click on button. Select a generator (either Visual Studio 10 or Visual Studio 10 Win64) and compiler .. figure:: Figures/win_native/cmake-gui-compiler.png #. For Win64, CMake may give an error about missing 64-bit tools, as in snapshot below. Visual Studio Express Edition does not embed 64-bit compilers, and CMake thus checks whether we are using Express Edition or not. .. figure:: Figures/win_native/cmake-gui-error.png It seems that this detection is sometimes buggy; if you know that 64-bit compilers are available, you can workaround this automatic detection by clicking on button, adding a ``CMAKE_GENERATOR_TOOLSET`` variable, of type ``STRING``, and value ``v100``. .. figure:: Figures/win_native/cmake-gui-toolset.png #. Click on button again, everything should work fine now, and output window should display ``Configuring done``. #. Now that CMake has checked that our compiler is working fine, we can tell it where to find OpenBLAS and TBB. Set ``OPENBLAS_INCLUDE_DIR``, ``OPENBLAS_LIBRARY``, ``TBB_INCLUDE_DIR`` and ``TBB_LIBRARY`` variables, as shown below: .. figure:: Figures/win_native/cmake-gui-superbuild.png and click on button. #. If everything went fine, click on button. This generates Visual Studio solution files in the specified build directory, and you can now close ``cmake-gui`` window. #. Launch ``openturns-superbuild`` solution file. .. figure:: Figures/win_native/vs-superbuild.png Select ``Release`` or ``Debug`` configuration (it must match TBB configuration), and build solution file. This will download sources (a working Internet connection is thus required), unpack and build them. It can take a long time on a slow machine, or with a slow Internet connection, since some downloaded sources are large. #. Copy ``build64\ExternalProjects\Install\*`` directories into installation prefix (``OT1.5\Win64-Release\``, or ``Win32-Release``, etc) Manual compilation ------------------ If you want to modify settings, the simplest solution is to proceed as in previous section, and modify Visual Studio settings afterwards. Dependencies are downloaded, built and installed into an ``ExternalProjects`` subdirectory of build directory, ie ``build64\ExternalProjects`` in our example. This directory contains the following folders: - ``Build``: contains generated Visual Studio projects, and files generated during builds - ``Download``: contains project archives - ``Install``: after build, each project installs resulting files (header files and libraries) there - ``Source``: unpacked source files - ``Stamp``: keeps track of already processed steps - ``tmp`` Each directory in turn contains one directory per project. Thus if one wants to modify some settings when compiling OpenTURNS, one has to go to ``build64\ExternalProjects\Build\openturns\`` directory and launch the Visual Studio solution file found there, in this case ``OpenTURNS.sln``. For instance, one can build OpenTURNS tests from this solution file. Beware to always check that active configuration is the desired one. Unresolved problems ------------------- Python bindings are not generated ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ After installing SWIG and Python binaries, we had been able to generate Python modules without trouble, but Python could not load those modules. It seems that the same version of Visual Studio must be used to compile Python and modules, but we could only find Python binaries built with Visual Studio 9. The solution is to build Python from sources, but this had not been tested yet. Tests are not run ~~~~~~~~~~~~~~~~~ Tests can be compiled but not launched from Visual Studio, because they are run via shell commands, and also because tests executable are generated in a subdirectory. It is possible to work around those limitations and run tests, but this is currently not automated. Troubleshooting --------------- - It is possible to build multiple configurations with Visual Studio solution files, but this is currently not supported by our ``CMakeLists.txt`` files; thus one must launch ``cmake-gui``, adapt variables (for instance paths to OpenBLAS and TBB libraries must be modified for each configuration) and press and buttons. - No OpenBLAS library in ``Debug`` mode is provided, but the one from ``Release`` mode works also in ``Debug`` mode. On the other hand, OpenTURNS and TBB configurations must match, it is not possible to link OpenTURNS in ``Debug`` mode against TBB in ``Release`` mode, or vice-versa. - Boost contains files with very long filenames, which causes trouble on NTFS. If you have already built Boost and want to build it again, Visual Studio may complain that it encountered an error when building it again. In that case, launch file explorer and remove Boost directory, then press again button of CMake (because some of its generated files had been removed too), it should now build fine. openturns-1.9/python/doc/developer_guide/windows_port.rst000066400000000000000000000025411307543307100241450ustar00rootroot00000000000000Windows port ============ This documentation aims at guiding the developer with cross-compilation for the Windows target using MinGW-w64 project. This is the method used to ship the windows binaries that include Python bindings. Library compilation ------------------- The cross-compilation is straightforward thanks to the provided precompiled MinGW toolchain and libraries: 1. Install Wine, NSIS:: aptitude install wine nsis 2. Fetch the last openturns-developers-windeps-x.y.tgz archive and unzip it:: cd openturns-src/distro/windows wget http://downloads.sourceforge.net/openturns/openturns/openturns-1.8/dev/openturns-developers-windeps-1.8.tar.gz tar xzf openturns-developers-windeps-1.8.tar.gz 3. Launch compilation:: make make ARCH=x86_64 # (for a 64 bits target) make PYBASEVER=3.5 # (for Python 3.5) If you are lucky, it should produce an installer named openturns-x.y-pyu.v-arch.exe Module compilation ------------------ A successful build of the library according to the previous step is required to compile a module from its sources:: cd module-src/distro/windows make OT_PREFIX=$PWD/../../../openturns-src/build-i686-w64-mingw32/install The same Makefile variables can be set (the same way the library was built) to control the build parameters. If the build is successful an executable installer is created. openturns-1.9/python/doc/developer_guide/wrapper_development.rst000066400000000000000000000376441307543307100255050ustar00rootroot00000000000000Wrapper development =================== Pure python wrappers -------------------- Python wrappers aim to be an easy way for wrapping external code. The external code can be an analytical mathematical formula or a coupling involving several computational codes dedicated to the resolution of a very complex physical problem. Python wrappers are not the best solution if your external code last less than a microseconds and if you need to resolve billions of points. In that case, for better performance, consider using the library wrapper. In any other cases, Python wrapper is the recommended choice. For further details on speed optimization see paragraph [speedo]. On OpenTURNS, two Python wrappers are available to wrap an external code: - the PythonFunction is a simple monothreaded Python wrapper. - the DistributedPythonFunction is a Python wrapper than can launch code in parallel on the local machine or deploy it among several computers. These two methods will be described in the following sections. PythonFunction ~~~~~~~~~~~~~~ A PythonFunction is a Function where the ``_exec`` or ``_exec_sample`` function are launched in a Python interpreter. Here is an example of how to implement it: Some explanations of the code : - The ``compute_point`` function constructs the out point from the in point. The in and out array size must correspond to the sizes set in the PythonFunction constructor. In this example, X will be an array of size 2 and Y must be an array of size 1. The output point can be a Python list, an  Point or a Numpy array. - Construct the PythonFunction by passing function reference. The ``_exec_sample`` function can be implemented to speedup the compute using vectorization on large sample. It receives an input sample and must return an output sample. For further details on speed optimization see paragraph [speedo]. Here is an example using ``_exec_sample`` function: The output sample can be a Sample, a Python list of list or a Numpy array of array. This function is optional. If ``_exec_sample`` is not implemented and  must compute a sample, the ``_exec`` function is called several time: once for each point of the sample. On contrary, if only ``_exec_sample`` is given and a point must be computed, the point is inserted in a sample of size 1, computed through ``_exec_sample`` and extracted from the result sample. The PythonFunction is quite simple to use. When used with coupling\_tools module, it can wrap external program easily too. External code coupling tools ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Simple example ^^^^^^^^^^^^^^ Here is a simple example of wrapper where compute is made in an external program with the help of openturns.coupling\_tools module: Some explanations of the code : - ``coupling_tools.replace`` replace ``@E`` and ``@F`` occurence found in ``input_template.py`` file and write the result to ``infile`` file. ``X[0]`` value will replace ``'@E'`` token and ``X[1]`` will replace ``'@F'`` token. - The external program is launched. The input filename is passed by parameters to the program. - ``coupling_tools.get`` get the value following ``'Z='`` token in ``output.py`` file. Template file example: External program example: More examples ^^^^^^^^^^^^^ The replace function '''''''''''''''''''' can edit file in place. It can format values in anyway. Actually, values can be of type “string”, if not, they are converted using str() Python function: -------------- *replace(infile, outfile, tokens, values, encoding=default\_encoding)* -------------- *infile*: template file that will be parsed *outfile*: file that will received the template parsed. If equal to None or to *infile*, the result file will be moved to infile *tokens*: a list of regex that will be replaced *values*: list of values (can be string, float, ...) that will replace the tokens. The list must have the same size as tokens *encoding*: the file encoding, as string, i.e. ascii, latin\_1, utf\_8, ... :: replace(outfile='input_template.py', infile=None, tokens=['@E', '@F'], values=['%.2f' % 5.2569, 'toto']) :: replace(outfile='input_template.py', infile=None, tokens=['@E', '@F'], values=['%.2f' % 5.2569, 'toto']) The input\_template.py file will then be modify like this : :: E=5.25 F=toto Be careful with overlapping tokens: :: # if input_template.py = 'E=@E EE=@EE') replace(infile="input_template.py", outfile="None", tokens=["@E", "@EE"], values=[1, 2]) # => raise exception!! -> @EE token not found! # (this is due to the first pass with token "@E" that modify # "input_template.py" like this : 'E=1 EE=1E') Solution to overlapping tokens: put longest tokens first: :: # template.in = 'E=@E EE=@EE') replace(infile="template.in", outfile="prgm_data.in", tokens=["@EE", "@E"], values=[2, 1]) # => prgm_data.in = 'E=1 EE=2') The execute function '''''''''''''''''''' can launch an external code. -------------- *execute(cmd, workdir=None, is\_shell=False, shell\_exe=None, hide\_win=True, check\_exit\_code=True, get\_stdout=False, get\_stderr=False)* -------------- *cmd*: a string representing the command. e.g.: ’ls -l /home’ *workdir*: set the current directory of the executed command *is\_shell*: if set to True, the command is started in a shell (bash). default: False. *shell\_exe*: path to the shell. e.g. /bin/zsh. default: None: /bin/bash. *hide\_win*: hide cmd.exe popup on windows *check\_exit\_code*: if set to True: raise a RuntimeError exception if return code of process != 0 *get\_stdout*: whether standard output of the command is returned *get\_stderr*: whether standard error of the command is returned -------------- the exit code of the command the stdout data if get\_stdout parameter is set the stderr data if get\_stderr parameter is set The get\_value function ''''''''''''''''''''''' can deal with several type of output file. -------------- *get\_value(filename, token=None, skip\_token=0, skip\_line=0, skip\_col=0, encoding=default\_encoding)* -------------- *filename*: a file that will be parsed *token*: a regex that will be searched. The value right after the token is returned. Default: None (no token searched) *skip\_token*: the number of tokens that will be skipped before getting the value. If set to != 0, the corresponding token parameter must not be equal to None. If skip\_tokens < 0: count tokens backward from the end of the file. Default: 0: no token skipped *skip\_line*: number of lines skipped from the token found. If corresponding token equal None, skip from the beginning of the file. If corresponding token != None, skip from the token. If skip\_line < 0: count lines backward from the token or from the end of the file. Be careful: a last empty line is taken into account too. Default: 0: no line skipped *skip\_col*: number of columns skipped from the token found. If corresponding token = None, skip words from the beginning of the line. If corresponding token != None, skip words from the token. If skip\_col < 0: count col backward from the end of the line or from the token. Default: 0: no column skipped *encoding*: the file encoding, as string, i.e. ascii, latin\_1, utf\_8, ... -------------- a real value - content of the results.out file used for the following examples :: 1 2 3 04 5 6 7 8 9 10 11 12 13 14 @Y1= 11.11celcius @Y2= -0.89 @Y1= 22.22 @Y1= 33.33 line1: 100 101 102 line2: 200 201 202 line3: 300 301 302 - | search token, the value right after the token is returned: :: Y = get_value('results.out', token='@Y1=') # 11.11 - | skip lines and columns (useful for array search): :: get_value('results.out', skip_line=1, skip_col=2) # 9 - | skip lines and columns backward (be careful: if there is an empty line at the end of the file, it is taken into account. i.e. this last empty line will be reached using skip\_line=-1): :: get_value('results.out', skip_line=-2, skip_col=-2) # 201 - | search the 3rd appearance of the token: :: get_value('results.out', token='@Y1=', skip_token=2) # 33.33 - | search the 2nd appearance of the token from the end of the file: :: get_value('results.out', token='@Y1=', skip_token=-2) # 22.22 - | search a token and then skip lines and columns from this token: :: get_value('results.out', token='@Y1=', skip_line=5, skip_col=-2) # 101 - | search the 2nd token and then skip lines and columns from this token: :: get_value('results.out', token='@Y1=', skip_token=1, skip_line=5, skip_col=1) # 300 The get function '''''''''''''''' | works actually the same way the get\_value function do, but on several parameters: -------------- *get(filename, tokens=None, skip\_tokens=None, skip\_lines=None, skip\_cols=None, encoding=default\_encoding)* -------------- *filename*: a file that will be parsed *tokens*: see [getvalue] function *skip\_tokens*: see [getvalue] function *skip\_lines*: see [getvalue] function *skip\_cols*: see [getvalue] function *encoding*: the file encoding, as string, i.e. ascii, latin\_1, utf\_8, ... -------------- a list of real values. :: get('results.out', tokens=['@Y1=', '@Y2'], skip_lines=[5, 0], skip_cols=[-2, 0]) # [101, -0.89] The get\_regex function ''''''''''''''''''''''' | parses the outfile. It is provided for backward compatibility: -------------- *get\_regex(filename, patterns)* -------------- *filename*: the file to parse *patterns*: a list of patterns that will permit to get the values. \\\\R and \\\\I can be used to match float and integer. \\\\s can be used to match any whitespace character (= [ \\\\t\\\\n\\\\r\\\\f\\\\v]) \\\\S can be used to match any non-whitespace character. The value to be searched must be surrounded by ’(’ and ’)’ (see example). -------------- a list of values corresponding to each pattern. If nothing has been found, the corresponding value is set to None. :: Y = get_regex('results.out', patterns=['@Y2=(\R)']) # -0.89 Reference ^^^^^^^^^ Most up to date coupling tools module documentation is available through docstring in Python console: :: import openturns as ot help(ot.coupling_tools.get_value) Or in IPython console: :: ot.coupling_tools.replace? Performance considerations[speedo] ---------------------------------- Two differents cases can be encounter when wrapping code: the wrapping code is an analytical mathematical formula or it is an external code (an external process). Analytical formula ~~~~~~~~~~~~~~~~~~ A benchmark involving the differents wrapping methods available from  has been done using a dummy Analytical formula. Benchmark sources ^^^^^^^^^^^^^^^^^ Optimizations of any parts of this benchmark are welcome. - Benchmark of PythonFunction using \_exec function: :: big_sample = ot.Normal(2).getSample(1000*1000) import openturns as ot def _exec( X ): return [math.cos(pow(X[0]+1, 2)) - math.sin(X[1])] model = ot.PythonFunction(2, 1, _exec) # start timer out_sample = model( big_sample ) # stop timer - Benchmark of PythonFunction using \_exec\_sample function: :: def _exec_sample( Xs ): import numpy as np XsT = np.array(Xs).T return np.atleast_2d(np.cos(np.power(xT[0]+1, 2)) - np.sin(xT[1])).T model = ot.PythonFunction(2, 1, func_sample=_exec_sample) - Benchmark of Analytical (muParser) function: :: model = ot.Function( ('x0','x1'), ('y',), ('cos((x0+1) ^ 2) - sin(x1)',) ) The benchmark is done on a bi XEON E5520 (Nehalem 16\*2.27GHz, HT activated) with 12Go RAM. Benchmark results ^^^^^^^^^^^^^^^^^ : The sample containing 1 million of points is allocated in 0.282s. +---------------------------------+---------+-----------------------------------+ | wrapper type | time | comparison with fastest wrapper | +---------------------------------+---------+-----------------------------------+ | PythonFunction \_exec | 7.1s | x157 | +---------------------------------+---------+-----------------------------------+ | PythonFunction \_exec\_sample | 1.3s | x30 | +---------------------------------+---------+-----------------------------------+ | Analytical (muParser) | 0.43s | x10 | +---------------------------------+---------+-----------------------------------+ The previous results are linear to the size of the sample. - muParser is the 2nd fastest (10 times slower than the first). The muParser library used is not multithreaded. Embedding a parallel version of muParser could give better results. - Using an optimized \_exec\_sample python function through numpy gives better results (6x faster) than a simple \_exec python function, but it is still much slower than the compiled library (30 times slower). Note that neither Python nor NumPy are multithreaded. Conclusion ^^^^^^^^^^ PythonFunction is the easiest and more adaptable wrapper but it’s the slowest too. So, if you need to compute samples containing less than a million of points, PythonFunction is the good choice as the speed difference between wrappers will not be noticeable: every wrappers will compute the sample in less than a second. Otherwise choose muParser. External process ~~~~~~~~~~~~~~~~ Normal program ^^^^^^^^^^^^^^ For usual program (compute time of 1s and above), inner wrapper complexity/overhead are not an issue cause the external program compute time will be the main part of the whole compute time. Sample can be computed faster by launching this external program in parallel. - PythonFunction can not launch the \_exec function in parallel. - the DistributedPythonFunction from otdistfunc module can launch external program on each core of the local Machine or on each core of several remote machine. The DistributedPythonFunction is the best choice as it combine the ease of use of Python with the ability to deploy compute on a cluster of computers. Tiny program ^^^^^^^^^^^^ If the external process compute time is really fast (< 0.1s),  wrapper point’s launch time (overhead) becomes important. If performance are an issue, one should first consider that the external process is perhaps fast because it does something simple: can it be easily reimplemented in Python? If the code is not too complex, execute Python code inside a PythonFunction is usually much faster than the time to start the external process ( 1000x). Here is a naive example of external process (scilab) vs PythonFunction. - The following scilab script takes 0.07s per point: ``$ scilab -nb -nwni -f code.sce`` :: // code.sce exec("input.data", -1) y = x1 + x2; f = mopen("result.data", "wt"); mfprintf(f, "y = %.20e", y); file("close", f); quit - Conversion to Python of the scilab script. It takes now 0.00001s per point: :: def _exec( X ): return X[0] + X[1] model = ot.PythonFunction(2, 1, _exec) If you still need to launch tiny external process, slow overhead and parallel ability are the important factors of the wrapper. Comparison of the differents wrapper compute time with a sample of size 1000 and an external code that last 0.07s per point on a 8 cores computer: - PythonFunction overhead is really slow (0.000004s) but can not launch the \_exec function in parallel. :math:`(0.000004+0.07)*1000 => 70s` - DistributedPythonFunction overhead is near 0.05s and can launch external program in parallel. :math:`(0.05+0.07)*1000 (/8core) => 15s` - PythonFunction that reimplement the external program. :math:`(0.00001)*1000 => 0.01s` openturns-1.9/python/doc/examples/000077500000000000000000000000001307543307100173275ustar00rootroot00000000000000openturns-1.9/python/doc/examples/axial_stressed_beam.ipynb000066400000000000000000011715011307543307100243760ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Axial stressed beam" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example is a simple beam, restrained at one side and stressed by a traction load F at the other side.\n", "\n", "The geometry is supposed to be deterministic: the diameter D is fixed to D=20 mm.\n", "\n", "It is considered that failure occurs when the beam plastifies, i.e. when the axial stress gets bigger than the yield stress:\n", "$$\\sigma_e = \\frac{F}{\\pi-D^2/4} \\leq 0$$\n", "\n", "Therefore, the state limit G used here is:\n", "$$G = \\sigma_e - \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Two independent random variables R and S are considered:\n", "\n", " - R (the strength): $$R = \\sigma_e$$\n", " - S (the load): $$S = \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Stochastic model:\n", "\n", " - F ~ Normal(75e3, 5e3) [N]\n", " - R ~ LogNormal(300, 30) [N]\n", "\n", "Theoretical results:\n", "\n", "This two dimensional stochastic problem can be solved by calculating directly the failure probability: \n", "\n", "$$P_f = \\text{Prob}(R-S \\leq 0) = \\int_{r-s \\leq 0} f_{R, S}(r, s)drds$$\n", "\n", "If R and S are independant, then: \n", "\n", "$$\\int_{-\\infty}^{+\\infty}f_S(x)F_R(x)dx$$\n", "\n", "The numerical application gives: $$P_f = 0.0292$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [300.0, 75000.0]\n", "G(x)= [61.2676]\n" ] } ], "source": [ "from __future__ import print_function\n", "\n", "import openturns as ot\n", "\n", "# dimension\n", "dim = 2\n", "\n", "# Analytical model definition:\n", "limitState = ot.Function(['R', 'F'], ['G'], ['R-F/(_pi*100.0)'])\n", "\n", "# Test of the limit state function:\n", "x = [300., 75000.]\n", "print('x=', x)\n", "print('G(x)=', limitState(x))\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=R PDF implementation=class=GraphImplementation name=R PDF title=R PDF xTitle=R yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=R PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[188.808,5.58066e-07],[190.547,8.39811e-07],[192.286,1.24866e-06],[194.025,1.83487e-06],[195.764,2.66552e-06],[197.503,3.82908e-06],[199.242,5.44075e-06],[200.981,7.64868e-06],[202.72,1.06411e-05],[204.459,1.46542e-05],[206.198,1.9981e-05],[207.937,2.69804e-05],[209.676,3.60872e-05],[211.415,4.78217e-05],[213.154,6.27992e-05],[214.894,8.17387e-05],[216.633,0.000105471],[218.372,0.000134943],[220.111,0.000171222],[221.85,0.000215498],[223.589,0.000269076],[225.328,0.000333372],[227.067,0.000409901],[228.806,0.000500256],[230.545,0.000606093],[232.284,0.000729097],[234.023,0.000870955],[235.762,0.00103332],[237.501,0.00121775],[239.241,0.00142571],[240.98,0.00165848],[242.719,0.00191714],[244.458,0.00220249],[246.197,0.00251504],[247.936,0.00285497],[249.675,0.00322205],[251.414,0.00361568],[253.153,0.00403478],[254.892,0.00447787],[256.631,0.00494299],[258.37,0.00542777],[260.109,0.00592938],[261.848,0.00644462],[263.587,0.0069699],[265.327,0.00750133],[267.066,0.00803475],[268.805,0.00856581],[270.544,0.00909],[272.283,0.00960277],[274.022,0.0100996],[275.761,0.0105759],[277.5,0.0110275],[279.239,0.0114502],[280.978,0.0118402],[282.717,0.0121941],[284.456,0.0125088],[286.195,0.0127817],[287.934,0.0130106],[289.673,0.0131939],[291.413,0.0133304],[293.152,0.0134195],[294.891,0.0134611],[296.63,0.0134556],[298.369,0.013404],[300.108,0.0133074],[301.847,0.0131677],[303.586,0.012987],[305.325,0.0127677],[307.064,0.0125126],[308.803,0.0122246],[310.542,0.0119069],[312.281,0.0115628],[314.02,0.0111956],[315.76,0.0108087],[317.499,0.0104055],[319.238,0.00998934],[320.977,0.00956348],[322.716,0.00913102],[324.455,0.00869494],[326.194,0.00825804],[327.933,0.00782292],[329.672,0.00739198],[331.411,0.00696741],[333.15,0.00655114],[334.889,0.00614492],[336.628,0.00575023],[338.367,0.00536835],[340.106,0.00500034],[341.846,0.00464705],[343.585,0.00430913],[345.324,0.00398706],[347.063,0.00368113],[348.802,0.00339148],[350.541,0.00311811],[352.28,0.00286091],[354.019,0.00261962],[355.758,0.00239392],[357.497,0.0021834],[359.236,0.00198755],[360.975,0.00180585],[362.714,0.00163769],[364.453,0.00148247],[366.193,0.00133954],[367.932,0.00120823],[369.671,0.00108789],[371.41,0.00097784],[373.149,0.000877431],[374.888,0.000786016],[376.627,0.000702965],[378.366,0.00062767],[380.105,0.000559544],[381.844,0.000498028],[383.583,0.000442588],[385.322,0.000392719],[387.061,0.000347946],[388.8,0.00030782],[390.539,0.000271925],[392.279,0.000239871],[394.018,0.000211295],[395.757,0.000185865],[397.496,0.00016327],[399.235,0.000143229],[400.974,0.00012548],[402.713,0.000109786],[404.452,9.59303e-05],[406.191,8.37168e-05],[407.93,7.29665e-05],[409.669,6.3518e-05],[411.408,5.52256e-05]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Stochastic model definition\n", "\n", "# Create a first marginal : LogNormal distribution 1D, parameterized by\n", "# its mean and standard deviation\n", "R_dist = ot.LogNormalMuSigma(300.0, 30.0, 0.0).getDistribution()\n", "R_dist.setName('Yield strength')\n", "R_dist.setDescription('R')\n", "# Graphical output of the PDF\n", "R_dist.drawPDF()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=F PDF implementation=class=GraphImplementation name=F PDF title=F PDF xTitle=F yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=F PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[56344.2,7.5668e-08],[56635.7,9.38953e-08],[56927.2,1.16118e-07],[57218.7,1.43113e-07],[57510.2,1.75785e-07],[57801.7,2.15184e-07],[58093.2,2.62519e-07],[58384.7,3.1918e-07],[58676.2,3.86754e-07],[58967.7,4.67044e-07],[59259.2,5.62088e-07],[59550.7,6.74179e-07],[59842.2,8.05878e-07],[60133.7,9.60037e-07],[60425.2,1.1398e-06],[60716.7,1.34864e-06],[61008.1,1.59033e-06],[61299.6,1.86897e-06],[61591.1,2.18897e-06],[61882.6,2.55506e-06],[62174.1,2.97226e-06],[62465.6,3.44586e-06],[62757.1,3.98135e-06],[63048.6,4.58446e-06],[63340.1,5.26102e-06],[63631.6,6.01694e-06],[63923.1,6.85811e-06],[64214.6,7.79037e-06],[64506.1,8.81932e-06],[64797.6,9.9503e-06],[65089.1,1.11882e-05],[65380.6,1.25375e-05],[65672.1,1.40018e-05],[65963.6,1.5584e-05],[66255.1,1.72862e-05],[66546.6,1.91093e-05],[66838.1,2.1053e-05],[67129.6,2.31156e-05],[67421.1,2.52943e-05],[67712.6,2.75843e-05],[68004.1,2.99797e-05],[68295.6,3.24724e-05],[68587.1,3.50531e-05],[68878.6,3.77105e-05],[69170.1,4.04317e-05],[69461.6,4.32022e-05],[69753.1,4.60059e-05],[70044.6,4.88254e-05],[70336,5.16417e-05],[70627.5,5.44352e-05],[70919,5.71852e-05],[71210.5,5.98702e-05],[71502,6.24686e-05],[71793.5,6.49586e-05],[72085,6.73187e-05],[72376.5,6.95278e-05],[72668,7.15658e-05],[72959.5,7.34135e-05],[73251,7.50534e-05],[73542.5,7.64696e-05],[73834,7.76482e-05],[74125.5,7.85774e-05],[74417,7.92479e-05],[74708.5,7.9653e-05],[75000,7.97885e-05],[75291.5,7.9653e-05],[75583,7.92479e-05],[75874.5,7.85774e-05],[76166,7.76482e-05],[76457.5,7.64696e-05],[76749,7.50534e-05],[77040.5,7.34135e-05],[77332,7.15658e-05],[77623.5,6.95278e-05],[77915,6.73187e-05],[78206.5,6.49586e-05],[78498,6.24686e-05],[78789.5,5.98702e-05],[79081,5.71852e-05],[79372.5,5.44352e-05],[79664,5.16417e-05],[79955.4,4.88254e-05],[80246.9,4.60059e-05],[80538.4,4.32022e-05],[80829.9,4.04317e-05],[81121.4,3.77105e-05],[81412.9,3.50531e-05],[81704.4,3.24724e-05],[81995.9,2.99797e-05],[82287.4,2.75843e-05],[82578.9,2.52943e-05],[82870.4,2.31156e-05],[83161.9,2.1053e-05],[83453.4,1.91093e-05],[83744.9,1.72862e-05],[84036.4,1.5584e-05],[84327.9,1.40018e-05],[84619.4,1.25375e-05],[84910.9,1.11882e-05],[85202.4,9.9503e-06],[85493.9,8.81932e-06],[85785.4,7.79037e-06],[86076.9,6.85811e-06],[86368.4,6.01694e-06],[86659.9,5.26102e-06],[86951.4,4.58446e-06],[87242.9,3.98135e-06],[87534.4,3.44586e-06],[87825.9,2.97226e-06],[88117.4,2.55506e-06],[88408.9,2.18897e-06],[88700.4,1.86897e-06],[88991.9,1.59033e-06],[89283.3,1.34864e-06],[89574.8,1.1398e-06],[89866.3,9.60037e-07],[90157.8,8.05878e-07],[90449.3,6.74179e-07],[90740.8,5.62088e-07],[91032.3,4.67044e-07],[91323.8,3.86754e-07],[91615.3,3.1918e-07],[91906.8,2.62519e-07],[92198.3,2.15184e-07],[92489.8,1.75785e-07],[92781.3,1.43113e-07],[93072.8,1.16118e-07],[93364.3,9.38953e-08],[93655.8,7.5668e-08]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a second marginal : Normal distribution 1D\n", "F_dist = ot.Normal(75000., 5000.)\n", "F_dist.setName('Traction_load')\n", "F_dist.setDescription('F')\n", "# Graphical output of the PDF\n", "F_dist.drawPDF()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create a copula : IndependentCopula (no correlation)\n", "aCopula = ot.IndependentCopula(dim)\n", "aCopula.setName('Independent copula')\n", "\n", "# Instanciate one distribution object\n", "myDistribution = ot.ComposedDistribution([R_dist, F_dist], aCopula)\n", "myDistribution.setName('myDist')\n", "\n", "# We create a 'usual' RandomVector from the Distribution\n", "vect = ot.RandomVector(myDistribution)\n", "\n", "# We create a composite random vector\n", "G = ot.RandomVector(limitState, vect)\n", "\n", "# We create an Event from this RandomVector\n", "myEvent = ot.Event(G, ot.Less(), 0.0)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MonteCarlo result= probabilityEstimate=3.029830e-02 varianceEstimate=2.294261e-06 standard deviation=1.51e-03 coefficient of variation=5.00e-02 confidenceLength(0.95)=5.94e-03 outerSampling=12806 blockSize=1\n", "Number of executed iterations = 12806\n", "Number of calls to the limit state = 12806\n", "Pf = 0.030298297673\n", "CV = 0.0499923113245\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=MonteCarlo convergence graph at level 0.95 implementation=class=GraphImplementation name=MonteCarlo convergence graph at level 0.95 title=MonteCarlo convergence graph at level 0.95 xTitle=outer iteration yTitle=estimate axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=probability estimate implementation=class=Curve name=probability estimate derived from class=DrawableImplementation name=probability estimate legend=probability estimate data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1600 dimension=2 data=[[1,0.125],[2,0.0625],[3,0.0416667],...,[1598,0.0301158],[1599,0.0300969],[1600,0.0301562]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2,class=Drawable name=bounds implementation=class=Curve name=bounds derived from class=DrawableImplementation name=bounds legend=bounds data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1600 dimension=2 data=[[1,-0.104172],[2,-0.0561079],[3,-0.038279],...,[1598,0.0271532],[1599,0.0271362],[1600,0.0271936]] color=green fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1600 dimension=2 data=[[1,0.354172],[2,0.181108],[3,0.121612],...,[1598,0.0330784],[1599,0.0330577],[1600,0.0331189]] color=green fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Using Monte Carlo simulations\n", "cv = 0.05\n", "NbSim = 100000\n", "\n", "algoMC = ot.MonteCarlo(myEvent)\n", "algoMC.setMaximumOuterSampling(NbSim)\n", "algoMC.setBlockSize(1)\n", "algoMC.setMaximumCoefficientOfVariation(cv)\n", "# For statistics about the algorithm\n", "initialNumberOfCall = limitState.getEvaluationCallsNumber()\n", "\n", "# Perform the analysis:\n", "algoMC.run()\n", "\n", "# Results:\n", "result = algoMC.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('MonteCarlo result=', result)\n", "print('Number of executed iterations =', result.getOuterSampling())\n", "print('Number of calls to the limit state =', limitState.getEvaluationCallsNumber() - initialNumberOfCall)\n", "print('Pf = ', probability)\n", "print('CV =', result.getCoefficientOfVariation())\n", "algoMC.drawProbabilityConvergence()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of calls to the limit state = 98\n", "Pf = 0.0299850318913\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Design Point - Unnamed xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[R : 71.7%,F : 28.3%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#00ff00] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0.71742],[0.28258]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Using FORM analysis\n", "\n", "# We create a NearestPoint algorithm\n", "myCobyla = ot.Cobyla()\n", "# Resolution options:\n", "eps = 1e-3\n", "myCobyla.setMaximumIterationNumber(100)\n", "myCobyla.setMaximumAbsoluteError(eps)\n", "myCobyla.setMaximumRelativeError(eps)\n", "myCobyla.setMaximumResidualError(eps)\n", "myCobyla.setMaximumConstraintError(eps)\n", "\n", "# For statistics about the algorithm\n", "initialNumberOfCall = limitState.getEvaluationCallsNumber()\n", "\n", "# We create a FORM algorithm\n", "# The first parameter is a NearestPointAlgorithm\n", "# The second parameter is an event\n", "# The third parameter is a starting point for the design point research\n", "\n", "algoFORM = ot.FORM(myCobyla, myEvent, myDistribution.getMean())\n", "\n", "# Perform the analysis:\n", "algoFORM.run()\n", "\n", "# Results:\n", "result = algoFORM.getResult()\n", "print('Number of calls to the limit state =', limitState.getEvaluationCallsNumber() - initialNumberOfCall)\n", "print('Pf =', result.getEventProbability())\n", "\n", "# Graphical result output\n", "result.drawImportanceFactors()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of executed iterations = 481\n", "Number of calls to the limit state = 8830\n", "Pf = 0.0297305755073\n", "CV = 0.0499171711488\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=DirectionalSampling convergence graph at level 0.95 implementation=class=GraphImplementation name=DirectionalSampling convergence graph at level 0.95 title=DirectionalSampling convergence graph at level 0.95 xTitle=outer iteration yTitle=estimate axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=probability estimate implementation=class=Curve name=probability estimate derived from class=DrawableImplementation name=probability estimate legend=probability estimate data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=481 dimension=2 data=[[1,0.0420567],[2,0.0634506],[3,0.0692456],[4,0.0723249],[5,0.0580719],[6,0.0523629],[7,0.0549464],[8,0.05857],[9,0.0573821],[10,0.0516439],[11,0.046972],[12,0.0493251],[13,0.0490483],[14,0.0489539],[15,0.046356],[16,0.0487482],[17,0.046657],[18,0.0440721],[19,0.0437715],[20,0.045816],[21,0.0455302],[22,0.0434607],[23,0.0427015],[24,0.0409302],[25,0.0400488],[26,0.0385084],[27,0.0370822],[28,0.0357578],[29,0.0358841],[30,0.0367533],[31,0.0355678],[32,0.0355045],[33,0.0350082],[34,0.0347185],[35,0.0337269],[36,0.0340513],[37,0.033131],[38,0.0322591],[39,0.0326317],[40,0.0318159],[41,0.031063],[42,0.0303234],[43,0.0315975],[44,0.0308829],[45,0.031992],[46,0.0312965],[47,0.0323856],[48,0.0317136],[49,0.031613],[50,0.0309808],[51,0.0315815],[52,0.0323284],[53,0.0317184],[54,0.031131],[55,0.030565],[56,0.0314923],[57,0.0319083],[58,0.0319002],[59,0.0323697],[60,0.0318303],[61,0.0313084],[62,0.0320231],[63,0.0315148],[64,0.0323126],[65,0.0318155],[66,0.0314761],[67,0.0319194],[68,0.03145],[69,0.0309944],[70,0.0305516],[71,0.0301213],[72,0.0307538],[73,0.0306653],[74,0.0302509],[75,0.0300955],[76,0.0307672],[77,0.0305369],[78,0.0312004],[79,0.0308054],[80,0.0313281],[81,0.0309413],[82,0.030564],[83,0.0311783],[84,0.0317582],[85,0.0313845],[86,0.0311013],[87,0.0309882],[88,0.0310454],[89,0.030881],[90,0.0305379],[91,0.0303144],[92,0.0299849],[93,0.0300989],[94,0.0306384],[95,0.0305876],[96,0.0308935],[97,0.0305785],[98,0.0302665],[99,0.029961],[100,0.0302865],[101,0.0301565],[102,0.0301954],[103,0.0301813],[104,0.0303565],[105,0.0307631],[106,0.0309529],[107,0.0310204],[108,0.0307335],[109,0.0304515],[110,0.030608],[111,0.0310886],[112,0.0308111],[113,0.0305384],[114,0.0303636],[115,0.030101],[116,0.0298768],[117,0.0296742],[118,0.0297966],[119,0.0299656],[120,0.0297159],[121,0.0295172],[122,0.0297474],[123,0.0299304],[124,0.0298694],[125,0.0298577],[126,0.0296309],[127,0.0300218],[128,0.0298742],[129,0.0300703],[130,0.029839],[131,0.0297152],[132,0.0297142],[133,0.030123],[134,0.0299333],[135,0.0303381],[136,0.0302296],[137,0.0300089],[138,0.0297915],[139,0.0295771],[140,0.0293659],[141,0.0292449],[142,0.0296139],[143,0.0299972],[144,0.0303752],[145,0.0303991],[146,0.0305039],[147,0.0305049],[148,0.0303204],[149,0.0302277],[150,0.030291],[151,0.0304444],[152,0.0302442],[153,0.0305023],[154,0.0303043],[155,0.0301242],[156,0.0304232],[157,0.0303788],[158,0.0301935],[159,0.0302937],[160,0.0301184],[161,0.0299407],[162,0.0300982],[163,0.0299159],[164,0.0297391],[165,0.0300741],[166,0.0298929],[167,0.0301794],[168,0.0299997],[169,0.0298222],[170,0.0296509],[171,0.0294775],[172,0.0293061],[173,0.0296226],[174,0.0294524],[175,0.0297283],[176,0.0295594],[177,0.0294052],[178,0.0296159],[179,0.0294588],[180,0.0297621],[181,0.0295977],[182,0.029435],[183,0.0297026],[184,0.0295413],[185,0.0293862],[186,0.0292282],[187,0.0291736],[188,0.0290184],[189,0.0288658],[190,0.0287329],[191,0.0285825],[192,0.0284338],[193,0.0285458],[194,0.0287464],[195,0.028599],[196,0.0285171],[197,0.0283884],[198,0.0282997],[199,0.0285731],[200,0.0284762],[201,0.0283345],[202,0.0281942],[203,0.0280553],[204,0.0279178],[205,0.0281861],[206,0.0284566],[207,0.0285641],[208,0.0285484],[209,0.0286636],[210,0.0285298],[211,0.0284406],[212,0.0283609],[213,0.0282893],[214,0.0281589],[215,0.0284198],[216,0.0282882],[217,0.0281579],[218,0.0280526],[219,0.0282737],[220,0.0283683],[221,0.0283577],[222,0.0282472],[223,0.0281205],[224,0.0280985],[225,0.0279736],[226,0.028227],[227,0.0284144],[228,0.0285242],[229,0.0287349],[230,0.0289792],[231,0.028856],[232,0.0287316],[233,0.0286324],[234,0.0286758],[235,0.0285538],[236,0.0287756],[237,0.0286542],[238,0.0285338],[239,0.0285261],[240,0.0285204],[241,0.0284021],[242,0.028467],[243,0.0283499],[244,0.0282337],[245,0.0281207],[246,0.0280064],[247,0.028124],[248,0.0280106],[249,0.0279014],[250,0.0277898],[251,0.0276791],[252,0.0275693],[253,0.0274614],[254,0.0273883],[255,0.0276066],[256,0.0274988],[257,0.027392],[258,0.0272872],[259,0.0271819],[260,0.0273273],[261,0.0273823],[262,0.0272778],[263,0.027174],[264,0.027166],[265,0.0270635],[266,0.0272821],[267,0.02718],[268,0.0270787],[269,0.027244],[270,0.0272847],[271,0.0272578],[272,0.0272109],[273,0.0273817],[274,0.0273756],[275,0.0272761],[276,0.0271772],[277,0.0270801],[278,0.0269826],[279,0.0269859],[280,0.0270651],[281,0.0269687],[282,0.0268791],[283,0.027014],[284,0.027205],[285,0.0271095],[286,0.0271623],[287,0.0273366],[288,0.0275112],[289,0.027416],[290,0.0273214],[291,0.0273762],[292,0.0275536],[293,0.0276348],[294,0.0278147],[295,0.0277204],[296,0.0276273],[297,0.0278205],[298,0.0277271],[299,0.0278181],[300,0.0277254],[301,0.0276333],[302,0.0275539],[303,0.0275888],[304,0.0277664],[305,0.0279539],[306,0.0278626],[307,0.0277718],[308,0.0279462],[309,0.0279233],[310,0.028092],[311,0.0280083],[312,0.0281448],[313,0.0281082],[314,0.0282589],[315,0.0281692],[316,0.0281485],[317,0.0280686],[318,0.0282477],[319,0.0283933],[320,0.0283282],[321,0.0283592],[322,0.0282711],[323,0.0284466],[324,0.0286103],[325,0.0286262],[326,0.0287683],[327,0.0289385],[328,0.0288503],[329,0.028868],[330,0.0287805],[331,0.0289424],[332,0.0288888],[333,0.0289695],[334,0.0289938],[335,0.0291496],[336,0.0291094],[337,0.0292448],[338,0.0291582],[339,0.0290722],[340,0.0289893],[341,0.029031],[342,0.0289461],[343,0.0290375],[344,0.0289622],[345,0.0290293],[346,0.0291252],[347,0.0290848],[348,0.0290115],[349,0.0289283],[350,0.0288799],[351,0.0288564],[352,0.0287744],[353,0.0288869],[354,0.0288053],[355,0.0287242],[356,0.0286848],[357,0.0286044],[358,0.0287044],[359,0.0288611],[360,0.0289645],[361,0.0288992],[362,0.0289781],[363,0.0289002],[364,0.0288208],[365,0.0288152],[366,0.0287364],[367,0.0286581],[368,0.0287241],[369,0.0287492],[370,0.0288291],[371,0.0287514],[372,0.0288778],[373,0.0290268],[374,0.028951],[375,0.028903],[376,0.0288825],[377,0.028806],[378,0.0288111],[379,0.0289473],[380,0.0288712],[381,0.0288825],[382,0.0288069],[383,0.0287317],[384,0.0286569],[385,0.0288005],[386,0.0287553],[387,0.028681],[388,0.0286463],[389,0.0287792],[390,0.0288342],[391,0.0287605],[392,0.0286871],[393,0.0286141],[394,0.0285457],[395,0.0284734],[396,0.0284015],[397,0.0285297],[398,0.0285516],[399,0.0286188],[400,0.0287569],[401,0.02872],[402,0.0286492],[403,0.0285781],[404,0.0285074],[405,0.0286417],[406,0.0285712],[407,0.0285325],[408,0.0286328],[409,0.0287034],[410,0.028706],[411,0.0288322],[412,0.028764],[413,0.028898],[414,0.0289809],[415,0.0289119],[416,0.0289239],[417,0.0288546],[418,0.0288237],[419,0.02878],[420,0.0287311],[421,0.0288551],[422,0.0289018],[423,0.0288357],[424,0.0288316],[425,0.0288637],[426,0.028909],[427,0.0290384],[428,0.0291629],[429,0.0292251],[430,0.0293446],[431,0.0294683],[432,0.0294003],[433,0.0293446],[434,0.0292825],[435,0.0293424],[436,0.0292753],[437,0.0292083],[438,0.0292584],[439,0.0291941],[440,0.0293083],[441,0.029419],[442,0.0295001],[443,0.0296229],[444,0.0295742],[445,0.0295205],[446,0.0294584],[447,0.0295723],[448,0.0295228],[449,0.0294594],[450,0.0293939],[451,0.0293287],[452,0.0293053],[453,0.0294229],[454,0.0295318],[455,0.0296538],[456,0.0295945],[457,0.0295297],[458,0.0294652],[459,0.029401],[460,0.0294886],[461,0.0294246],[462,0.0293713],[463,0.0294679],[464,0.0295879],[465,0.0296998],[466,0.0296365],[467,0.0295878],[468,0.0297049],[469,0.0298195],[470,0.0299153],[471,0.0298518],[472,0.0297886],[473,0.0297256],[474,0.0297848],[475,0.0297338],[476,0.0296737],[477,0.0296125],[478,0.0295506],[479,0.0295365],[480,0.0296164],[481,0.0297306]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2,class=Drawable name=bounds implementation=class=Curve name=bounds derived from class=DrawableImplementation name=bounds legend=bounds data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=480 dimension=2 data=[[2,0.0338007],[3,0.0474117],[4,0.0551355],[5,0.0295515],[6,0.0264939],[7,0.0322828],[8,0.0376562],[9,0.0386629],[10,0.0317022],[11,0.0268503],[12,0.0303591],[13,0.0315335],[14,0.0326891],[15,0.0303985],[16,0.0331144],[17,0.031415],[18,0.0288582],[19,0.0293469],[20,0.0315669],[21,0.0319487],[22,0.0299043],[23,0.0296531],[24,0.0279719],[25,0.0274941],[26,0.026079],[27,0.0248028],[28,0.0236457],[29,0.0241871],[30,0.0253229],[31,0.0242723],[32,0.0245614],[33,0.0243535],[34,0.024362],[35,0.0234856],[36,0.0240747],[37,0.0232624],[38,0.0225034],[39,0.0230988],[40,0.0223882],[41,0.0217504],[42,0.0211204],[43,0.0222759],[44,0.0216686],[45,0.0227296],[46,0.0221357],[47,0.0231744],[48,0.0226006],[49,0.0226839],[50,0.0221446],[51,0.0228405],[52,0.0236338],[53,0.023106],[54,0.0226016],[55,0.0221188],[56,0.0230036],[57,0.0235294],[58,0.0236658],[59,0.0242237],[60,0.0237516],[61,0.0232978],[62,0.0240201],[63,0.0235771],[64,0.0243464],[65,0.0239125],[66,0.0236648],[67,0.0241766],[68,0.0237666],[69,0.0233706],[70,0.0229875],[71,0.0226168],[72,0.0232519],[73,0.0232641],[74,0.0229053],[75,0.0228415],[76,0.0234902],[77,0.0233404],[78,0.0239796],[79,0.0236347],[80,0.0241742],[81,0.0238357],[82,0.0235067],[83,0.024104],[84,0.0246774],[85,0.0243493],[86,0.024126],[87,0.0240895],[88,0.0242243],[89,0.0241289],[90,0.0238273],[91,0.0236633],[92,0.0233748],[93,0.0235562],[94,0.0240804],[95,0.0240979],[96,0.0244437],[97,0.0241658],[98,0.0238901],[99,0.023621],[100,0.0239779],[101,0.0239052],[102,0.0240049],[103,0.0240509],[104,0.0242754],[105,0.0246879],[106,0.0249237],[107,0.025046],[108,0.024788],[109,0.024535],[110,0.0247373],[111,0.0251957],[112,0.0249457],[113,0.0247006],[114,0.0245671],[115,0.0243321],[116,0.0241408],[117,0.0239736],[118,0.0241392],[119,0.0243461],[120,0.0241219],[121,0.023956],[122,0.0242134],[123,0.0244298],[124,0.0244119],[125,0.0244438],[126,0.0242417],[127,0.0246209],[128,0.0245078],[129,0.0247317],[130,0.0245223],[131,0.0244335],[132,0.0244725],[133,0.0248598],[134,0.0246963],[135,0.0250801],[136,0.025006],[137,0.0248056],[138,0.0246084],[139,0.0244144],[140,0.0242234],[141,0.0241334],[142,0.0244875],[143,0.0248519],[144,0.0252126],[145,0.0252719],[146,0.0254077],[147,0.0254434],[148,0.0252802],[149,0.025218],[150,0.0253132],[151,0.0254905],[152,0.0253073],[153,0.0255719],[154,0.0253906],[155,0.0252295],[156,0.0255249],[157,0.025511],[158,0.025343],[159,0.0254697],[160,0.0253123],[161,0.0251518],[162,0.025329],[163,0.0251626],[164,0.0250022],[165,0.0253206],[166,0.0251548],[167,0.0254365],[168,0.025272],[169,0.0251097],[170,0.0249541],[171,0.0247959],[172,0.0246397],[173,0.0249422],[174,0.0247869],[175,0.0250583],[176,0.0249042],[177,0.0247665],[178,0.0249849],[179,0.0248434],[180,0.0251342],[181,0.0249842],[182,0.0248359],[183,0.0250988],[184,0.0249516],[185,0.0248113],[186,0.0246674],[187,0.0246359],[188,0.0244947],[189,0.0243562],[190,0.0242395],[191,0.024103],[192,0.0239682],[193,0.0240979],[194,0.0243041],[195,0.02417],[196,0.0241078],[197,0.0239943],[198,0.0239244],[199,0.0241871],[200,0.024108],[201,0.0239792],[202,0.0238518],[203,0.0237258],[204,0.0236011],[205,0.0238586],[206,0.0241177],[207,0.0242411],[208,0.0242461],[209,0.0243759],[210,0.0242545],[211,0.024182],[212,0.0241196],[213,0.0240656],[214,0.0239472],[215,0.0241967],[216,0.0240768],[217,0.0239581],[218,0.0238671],[219,0.0240849],[220,0.0241945],[221,0.0242027],[222,0.0241052],[223,0.0239897],[224,0.0239859],[225,0.023872],[226,0.0241136],[227,0.0243028],[228,0.0244249],[229,0.0246328],[230,0.0248671],[231,0.0247546],[232,0.0246406],[233,0.0245543],[234,0.0246143],[235,0.0245025],[236,0.0247183],[237,0.024607],[238,0.0244968],[239,0.0245059],[240,0.0245169],[241,0.0244085],[242,0.024488],[243,0.0243806],[244,0.0242741],[245,0.0241711],[246,0.0240665],[247,0.0241933],[248,0.0240895],[249,0.0239902],[250,0.0238882],[251,0.023787],[252,0.0236866],[253,0.0235884],[254,0.0235279],[255,0.0237377],[256,0.0236392],[257,0.0235418],[258,0.0234464],[259,0.0233503],[260,0.0234999],[261,0.023568],[262,0.0234726],[263,0.0233779],[264,0.0233842],[265,0.0232907],[266,0.0234992],[267,0.0234059],[268,0.0233136],[269,0.023479],[270,0.0235327],[271,0.0235193],[272,0.023485],[273,0.0236545],[274,0.0236619],[275,0.0235708],[276,0.0234803],[277,0.0233916],[278,0.0233025],[279,0.0233189],[280,0.0234079],[281,0.0233197],[282,0.0232388],[283,0.023377],[284,0.0235615],[285,0.0234741],[286,0.0235381],[287,0.023709],[288,0.02388],[289,0.0237926],[290,0.0237058],[291,0.0237714],[292,0.0239444],[293,0.0240345],[294,0.0242094],[295,0.0241226],[296,0.024037],[297,0.0242223],[298,0.0241364],[299,0.024235],[300,0.0241496],[301,0.0240648],[302,0.0239939],[303,0.0240399],[304,0.0242121],[305,0.0243923],[306,0.0243081],[307,0.0242245],[308,0.024394],[309,0.0243823],[310,0.024547],[311,0.0244709],[312,0.0246087],[313,0.0245826],[314,0.0247322],[315,0.0246493],[316,0.0246395],[317,0.0245672],[318,0.0247397],[319,0.0248848],[320,0.0248283],[321,0.0248697],[322,0.0247882],[323,0.0249575],[324,0.0251172],[325,0.0251438],[326,0.0252854],[327,0.0254503],[328,0.0253685],[329,0.0253966],[330,0.0253154],[331,0.0254732],[332,0.0254284],[333,0.0255159],[334,0.0255502],[335,0.0257028],[336,0.025672],[337,0.0258073],[338,0.0257268],[339,0.0256468],[340,0.0255701],[341,0.0256209],[342,0.0255419],[343,0.0256384],[344,0.0255698],[345,0.0256442],[346,0.0257447],[347,0.0257131],[348,0.0256464],[349,0.025569],[350,0.0255288],[351,0.0255145],[352,0.0254381],[353,0.0255528],[354,0.0254768],[355,0.0254012],[356,0.0253703],[357,0.0252955],[358,0.0253989],[359,0.0255506],[360,0.025657],[361,0.0255984],[362,0.0256828],[363,0.0256104],[364,0.0255364],[365,0.0255397],[366,0.0254663],[367,0.0253933],[368,0.0254656],[369,0.0254992],[370,0.025584],[371,0.0255115],[372,0.0256372],[373,0.0257817],[374,0.0257112],[375,0.0256706],[376,0.0256584],[377,0.0255869],[378,0.0256005],[379,0.0257341],[380,0.025663],[381,0.0256827],[382,0.025612],[383,0.0255418],[384,0.0254719],[385,0.0256114],[386,0.0255732],[387,0.0255038],[388,0.0254766],[389,0.0256069],[390,0.0256682],[391,0.0255993],[392,0.0255307],[393,0.0254625],[394,0.0253992],[395,0.0253317],[396,0.0252646],[397,0.0253907],[398,0.0254201],[399,0.0254924],[400,0.0256267],[401,0.0255967],[402,0.0255306],[403,0.0254641],[404,0.025398],[405,0.0255289],[406,0.0254629],[407,0.025431],[408,0.0255326],[409,0.0256078],[410,0.0256179],[411,0.0257417],[412,0.0256781],[413,0.0258085],[414,0.0258945],[415,0.02583],[416,0.0258494],[417,0.0257844],[418,0.0257603],[419,0.0257227],[420,0.0256795],[421,0.0258012],[422,0.0258536],[423,0.0257921],[424,0.0257951],[425,0.0258338],[426,0.0258849],[427,0.0260107],[428,0.0261325],[429,0.0261993],[430,0.0263167],[431,0.0264378],[432,0.0263739],[433,0.0263232],[434,0.0262656],[435,0.0263302],[436,0.0262671],[437,0.0262041],[438,0.0262595],[439,0.0261993],[440,0.026312],[441,0.0264216],[442,0.0265054],[443,0.0266253],[444,0.0265818],[445,0.026533],[446,0.0264751],[447,0.0265873],[448,0.0265429],[449,0.0264835],[450,0.0264219],[451,0.0263606],[452,0.0263433],[453,0.0264585],[454,0.0265663],[455,0.0266852],[456,0.0266301],[457,0.0265691],[458,0.0265084],[459,0.0264479],[460,0.0265369],[461,0.0264767],[462,0.0264279],[463,0.0265248],[464,0.0266417],[465,0.0267518],[466,0.0266923],[467,0.0266483],[468,0.0267627],[469,0.026875],[470,0.0269711],[471,0.0269113],[472,0.0268516],[473,0.0267923],[474,0.0268553],[475,0.0268089],[476,0.0267524],[477,0.026695],[478,0.0266366],[479,0.0266285],[480,0.0267102],[481,0.0268219]] color=green fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=480 dimension=2 data=[[2,0.0931006],[3,0.0910796],[4,0.0895143],[5,0.0865923],[6,0.0782319],[7,0.0776099],[8,0.0794839],[9,0.0761014],[10,0.0715856],[11,0.0670936],[12,0.0682912],[13,0.0665632],[14,0.0652187],[15,0.0623136],[16,0.0643821],[17,0.061899],[18,0.0592861],[19,0.0581961],[20,0.060065],[21,0.0591118],[22,0.0570171],[23,0.0557499],[24,0.0538885],[25,0.0526034],[26,0.0509379],[27,0.0493616],[28,0.0478699],[29,0.0475811],[30,0.0481838],[31,0.0468632],[32,0.0464477],[33,0.0456629],[34,0.0450749],[35,0.0439682],[36,0.0440278],[37,0.0429995],[38,0.0420148],[39,0.0421645],[40,0.0412436],[41,0.0403755],[42,0.0395263],[43,0.0409191],[44,0.0400973],[45,0.0412545],[46,0.0404574],[47,0.0415968],[48,0.0408266],[49,0.0405422],[50,0.0398169],[51,0.0403225],[52,0.041023],[53,0.0403307],[54,0.0396605],[55,0.0390112],[56,0.039981],[57,0.0402871],[58,0.0401345],[59,0.0405158],[60,0.0399089],[61,0.0393191],[62,0.0400261],[63,0.0394526],[64,0.0402789],[65,0.0397186],[66,0.0392873],[67,0.0396623],[68,0.0391335],[69,0.0386182],[70,0.0381158],[71,0.0376258],[72,0.0382558],[73,0.0380665],[74,0.0375965],[75,0.0373495],[76,0.0380442],[77,0.0377333],[78,0.0384211],[79,0.0379761],[80,0.038482],[81,0.038047],[82,0.0376214],[83,0.0382526],[84,0.0388389],[85,0.0384198],[86,0.0380766],[87,0.0378868],[88,0.0378666],[89,0.0376331],[90,0.0372484],[91,0.0369654],[92,0.0365949],[93,0.0366417],[94,0.0371964],[95,0.0370774],[96,0.0373432],[97,0.0369913],[98,0.0366429],[99,0.0363011],[100,0.0365952],[101,0.0364078],[102,0.036386],[103,0.0363118],[104,0.0364377],[105,0.0368384],[106,0.0369822],[107,0.0369948],[108,0.0366789],[109,0.0363681],[110,0.0364787],[111,0.0369815],[112,0.0366764],[113,0.0363761],[114,0.0361602],[115,0.03587],[116,0.0356127],[117,0.0353749],[118,0.0354539],[119,0.0355851],[120,0.0353099],[121,0.0350785],[122,0.0352814],[123,0.035431],[124,0.0353269],[125,0.0352716],[126,0.0350201],[127,0.0354227],[128,0.0352407],[129,0.0354089],[130,0.0351558],[131,0.0349969],[132,0.0349559],[133,0.0353861],[134,0.0351703],[135,0.035596],[136,0.0354532],[137,0.0352122],[138,0.0349745],[139,0.0347399],[140,0.0345083],[141,0.0343563],[142,0.0347403],[143,0.0351425],[144,0.0355378],[145,0.0355263],[146,0.0356001],[147,0.0355664],[148,0.0353606],[149,0.0352374],[150,0.0352689],[151,0.0353984],[152,0.035181],[153,0.0354328],[154,0.035218],[155,0.0350188],[156,0.0353214],[157,0.0352466],[158,0.035044],[159,0.0351177],[160,0.0349244],[161,0.0347295],[162,0.0348674],[163,0.0346692],[164,0.0344761],[165,0.0348276],[166,0.034631],[167,0.0349223],[168,0.0347274],[169,0.0345347],[170,0.0343476],[171,0.034159],[172,0.0339725],[173,0.0343031],[174,0.0341178],[175,0.0343983],[176,0.0342146],[177,0.0340439],[178,0.0342469],[179,0.0340741],[180,0.03439],[181,0.0342112],[182,0.0340342],[183,0.0343064],[184,0.0341309],[185,0.033961],[186,0.0337889],[187,0.0337112],[188,0.033542],[189,0.0333754],[190,0.0332263],[191,0.0330621],[192,0.0328995],[193,0.0329937],[194,0.0331887],[195,0.0330279],[196,0.0329263],[197,0.0327825],[198,0.032675],[199,0.0329591],[200,0.0328444],[201,0.0326898],[202,0.0325366],[203,0.0323849],[204,0.0322345],[205,0.0325136],[206,0.0327955],[207,0.0328871],[208,0.0328508],[209,0.0329513],[210,0.0328051],[211,0.0326992],[212,0.0326023],[213,0.0325131],[214,0.0323707],[215,0.0326429],[216,0.0324996],[217,0.0323576],[218,0.0322382],[219,0.0324625],[220,0.0325422],[221,0.0325127],[222,0.0323891],[223,0.0322513],[224,0.0322111],[225,0.0320752],[226,0.0323404],[227,0.0325261],[228,0.0326234],[229,0.032837],[230,0.0330913],[231,0.0329574],[232,0.0328225],[233,0.0327104],[234,0.0327373],[235,0.032605],[236,0.0328329],[237,0.0327014],[238,0.0325709],[239,0.0325462],[240,0.0325238],[241,0.0323956],[242,0.0324461],[243,0.0323192],[244,0.0321933],[245,0.0320703],[246,0.0319463],[247,0.0320547],[248,0.0319317],[249,0.0318126],[250,0.0316915],[251,0.0315713],[252,0.0314519],[253,0.0313345],[254,0.0312488],[255,0.0314756],[256,0.0313584],[257,0.0312423],[258,0.031128],[259,0.0310134],[260,0.0311547],[261,0.0311965],[262,0.0310829],[263,0.0309702],[264,0.0309478],[265,0.0308364],[266,0.031065],[267,0.030954],[268,0.0308439],[269,0.0310091],[270,0.0310367],[271,0.0309963],[272,0.0309368],[273,0.031109],[274,0.0310893],[275,0.0309814],[276,0.0308742],[277,0.0307685],[278,0.0306628],[279,0.0306529],[280,0.0307222],[281,0.0306178],[282,0.0305194],[283,0.0306511],[284,0.0308484],[285,0.030745],[286,0.0307865],[287,0.0309643],[288,0.0311423],[289,0.0310394],[290,0.0309371],[291,0.0309809],[292,0.0311627],[293,0.0312352],[294,0.03142],[295,0.0313183],[296,0.0312176],[297,0.0314186],[298,0.0313178],[299,0.0314012],[300,0.0313012],[301,0.0312017],[302,0.0311139],[303,0.0311378],[304,0.0313207],[305,0.0315155],[306,0.031417],[307,0.0313191],[308,0.0314984],[309,0.0314643],[310,0.031637],[311,0.0315457],[312,0.031681],[313,0.0316338],[314,0.0317856],[315,0.0316891],[316,0.0316575],[317,0.03157],[318,0.0317556],[319,0.0319019],[320,0.0318281],[321,0.0318487],[322,0.0317541],[323,0.0319357],[324,0.0321034],[325,0.0321087],[326,0.0322512],[327,0.0324267],[328,0.0323321],[329,0.0323395],[330,0.0322457],[331,0.0324116],[332,0.0323491],[333,0.032423],[334,0.0324373],[335,0.0325963],[336,0.0325468],[337,0.0326822],[338,0.0325897],[339,0.0324977],[340,0.0324085],[341,0.0324412],[342,0.0323504],[343,0.0324365],[344,0.0323545],[345,0.0324144],[346,0.0325057],[347,0.0324564],[348,0.0323765],[349,0.0322877],[350,0.032231],[351,0.0321982],[352,0.0321106],[353,0.032221],[354,0.0321338],[355,0.0320471],[356,0.0319993],[357,0.0319134],[358,0.0320099],[359,0.0321716],[360,0.032272],[361,0.0322],[362,0.0322735],[363,0.03219],[364,0.0321052],[365,0.0320906],[366,0.0320066],[367,0.031923],[368,0.0319826],[369,0.0319992],[370,0.0320741],[371,0.0319912],[372,0.0321185],[373,0.0322718],[374,0.0321907],[375,0.0321355],[376,0.0321067],[377,0.032025],[378,0.0320216],[379,0.0321605],[380,0.0320794],[381,0.0320824],[382,0.0320018],[383,0.0319217],[384,0.0318419],[385,0.0319897],[386,0.0319374],[387,0.0318582],[388,0.0318161],[389,0.0319515],[390,0.0320002],[391,0.0319217],[392,0.0318435],[393,0.0317658],[394,0.0316922],[395,0.0316151],[396,0.0315385],[397,0.0316688],[398,0.0316831],[399,0.0317452],[400,0.0318872],[401,0.0318433],[402,0.0317678],[403,0.0316921],[404,0.0316168],[405,0.0317545],[406,0.0316794],[407,0.031634],[408,0.0317329],[409,0.0317991],[410,0.0317941],[411,0.0319226],[412,0.0318498],[413,0.0319876],[414,0.0320673],[415,0.0319937],[416,0.0319985],[417,0.0319248],[418,0.0318872],[419,0.0318374],[420,0.0317826],[421,0.0319091],[422,0.0319499],[423,0.0318794],[424,0.0318681],[425,0.0318937],[426,0.0319332],[427,0.0320661],[428,0.0321934],[429,0.032251],[430,0.0323724],[431,0.0324988],[432,0.0324268],[433,0.0323661],[434,0.0322994],[435,0.0323546],[436,0.0322835],[437,0.0322125],[438,0.0322574],[439,0.0321888],[440,0.0323046],[441,0.0324163],[442,0.0324949],[443,0.0326206],[444,0.0325666],[445,0.0325081],[446,0.0324418],[447,0.0325573],[448,0.0325028],[449,0.0324352],[450,0.0323659],[451,0.0322969],[452,0.0322672],[453,0.0323873],[454,0.0324973],[455,0.0326225],[456,0.0325589],[457,0.0324904],[458,0.0324221],[459,0.0323542],[460,0.0324402],[461,0.0323725],[462,0.0323147],[463,0.032411],[464,0.032534],[465,0.0326478],[466,0.0325808],[467,0.0325273],[468,0.032647],[469,0.032764],[470,0.0328595],[471,0.0327924],[472,0.0327255],[473,0.0326589],[474,0.0327142],[475,0.0326588],[476,0.0325949],[477,0.03253],[478,0.0324645],[479,0.0324445],[480,0.0325226],[481,0.0326393]] color=green fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Using Directional sampling\n", "\n", "# Resolution options:\n", "cv = 0.05\n", "NbSim = int(1e5)\n", "\n", "algoDS = ot.DirectionalSampling(myEvent)\n", "algoDS.setMaximumOuterSampling(NbSim)\n", "algoDS.setBlockSize(1)\n", "algoDS.setMaximumCoefficientOfVariation(cv)\n", "# For statistics about the algorithm\n", "initialNumberOfCall = limitState.getEvaluationCallsNumber()\n", "\n", "# Perform the analysis:\n", "algoDS.run()\n", "\n", "# Results:\n", "result = algoDS.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('Number of executed iterations =', result.getOuterSampling())\n", "print('Number of calls to the limit state =', limitState.getEvaluationCallsNumber() - initialNumberOfCall)\n", "print('Pf = ', probability)\n", "print('CV =', result.getCoefficientOfVariation())\n", "algoDS.drawProbabilityConvergence()\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.3" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/ego.rst000066400000000000000000000127301307543307100206360ustar00rootroot00000000000000 EGO algorithm usage examples ============================ .. code:: python from __future__ import print_function import openturns as ot import math as m import openturns.testing #ot.Log.Show(ot.Log.INFO) ot.TBB.Disable() The EGO algorithm [Jones1998]\_ is an adaptative optimization method based on kriging. An initial design of experiment is used to build a first metamodel. At each iteration a new point that maximizes a criterion is chosen as optimizer candidate. The criterion uses a tradeoff between the metamodel value and the conditional variance. Then the new point is evaluated using the original model and the metamodel is relearnt on the extended design of experiment. E.I. formulation: Ackley test-case ---------------------------------- .. math:: f(x) = -a \exp\left(-b\sqrt{\frac{1}{d}\sum_{i=1}^d}x_i^2\right)-\exp(\left(\frac{1}{d}\sum_{i=1}^d cos(c x_i)\right)+a+\exp(1) .. math:: dimension = d, x \in [-15,15^d], a=20, b=0.2, c=2\pi, \hat{x}=(0,0,...,0), f_{min} = 0 .. code:: python # ackley 2-d ot.RandomGenerator.SetSeed(0) dim = 2 # model def ackley(X): a = 20.0 b = 0.2 c = 2.0 * m.pi d = len(X) f = -a * m.exp(-b*m.sqrt(sum(x**2 for x in X)/d)) - m.exp(sum(m.cos(c*x) for x in X)/d) + a + m.exp(1.0) #print(X, f) return [f] model = ot.PythonFunction(dim, 1, ackley) # problem problem = ot.OptimizationProblem() problem.setObjective(model) bounds = ot.Interval([-15.0] * dim, [15.0] * dim) problem.setBounds(bounds) # design center = [0.5] * dim levels = [2.0, 4.0, 8.0, 14.0] experiment = ot.Factorial(center, levels) inputSample = experiment.generate() outputSample = model(inputSample) # first kriging model covarianceModel = ot.SquaredExponential([2.50057] * dim, [0.1]) basis = ot.ConstantBasisFactory(dim).build() kriging = ot.KrigingAlgorithm(inputSample, outputSample, basis, covarianceModel) kriging.run() # algo algo = ot.EfficientGlobalOptimization(problem, kriging.getResult()) #solver = ot.NLopt('GN_ESCH') ##solver = ot.NLopt('GN_MLSL') algo.setMaximumIterationNumber(15) algo.setMaximumAbsoluteError(1e-10) algo.setMaximumRelativeError(1e-10) algo.setMaximumResidualError(1e-10) algo.setMaximumConstraintError(1e-10) algo.setMultiStartExperimentSize(100) # size of design in which to draw starting points algo.setMultiStartNumber(20) # number of multistart points for improvement optim algo.setParameterEstimationPeriod(1) # relearn kriging parameters every X iteration algo.setImprovementFactor(1.0) # improvement stopping criterion factor algo.setCorrelationLengthFactor(1.0) # correlation length stopping criterion factor algo.run() result = algo.getResult() #print('1st pass result=', result) print('iteration=', result.getIterationNumber()) #print(result.getInputSample()) #print(result.getOutputSample()) # local refinement algo2 = ot.NLopt(problem, 'LD_LBFGS') algo2.setStartingPoint(result.getOptimalPoint()) algo2.run() result = algo2.getResult() result.drawOptimalValueHistory() .. parsed-literal:: iteration= 7 .. image:: ego_files/ego_5_1.svg AIE formulation: Branin test-case --------------------------------- .. math:: g(u_1, u_2) = \frac{(u_2-5.1\frac{u_1^2}{4\pi^2}+5\frac{u_1}{\pi}-6)^2+10(1-\frac{1}{8 \pi}) \times cos(u_1)+10-54.8104}{51.9496} .. math:: t(x_1, x2) = 15 x_1 - 5, 15 x_2 .. math:: f(x_1, x_2) = g \circ t(x_1, x_2) .. math:: dimension = 2, x \in [0, 1]^2, \hat{x}=(0.123895, 0.818329),(0.542773, 0.151666),(0.961652, 0.165000), f_{min} = -1.04741 This time the AEI formulation is used, the objective output should be 2-d with the noise variance. Here we assume a constant noise variance: .. math:: \sigma_{\epsilon} = 0.96 .. code:: python # branin dim = 2 # model branin = ot.Function(['x1', 'x2'], ['f', 'sigma2'], ['((x2-(5.1/(4*_pi^2))*x1^2+5*x1/_pi-6)^2+10*(1-1/8*_pi)*cos(x1)+10-54.8104)/51.9496', '0.96']) transfo = ot.Function(['u1', 'u2'], ['x1', 'x2'], ['15*u1-5', '15*u2']) model = ot.ComposedFunction(branin, transfo) # problem problem = ot.OptimizationProblem() problem.setObjective(model) bounds = ot.Interval([0.0] * dim, [1.0] * dim) problem.setBounds(bounds) # design experiment = ot.Box([1, 1]) inputSample = experiment.generate() modelEval = model(inputSample) outputSample = modelEval.getMarginal(0) # first kriging model covarianceModel = ot.SquaredExponential([0.3007, 0.2483], [0.981959]) basis = ot.ConstantBasisFactory(dim).build() kriging = ot.KrigingAlgorithm(inputSample, outputSample, basis, covarianceModel) noise = list(map(lambda x: x[1], modelEval)) kriging.setNoise(noise) kriging.run() # algo algo = ot.EfficientGlobalOptimization(problem, kriging.getResult()) algo.setNoiseModel(ot.Function(['x1', 'x2'], ['sigma2'], ['0.96'])) # assume constant noise var algo.setMaximumIterationNumber(20) algo.setImprovementFactor(0.05) # stop whe improvement is < a% the current optimum algo.setAIETradeoff(0.66744898) algo.run() result = algo.getResult() #print('1st pass result=', result) print('iteration=', result.getIterationNumber()) #print(result.getInputSample()) #print(result.getOutputSample()) .. parsed-literal:: iteration= 7 openturns-1.9/python/doc/examples/ego_files/000077500000000000000000000000001307543307100212635ustar00rootroot00000000000000openturns-1.9/python/doc/examples/ego_files/ego_5_1.svg000066400000000000000000001024361307543307100232300ustar00rootroot00000000000000 openturns-1.9/python/doc/examples/examples.rst000066400000000000000000000007051307543307100217010ustar00rootroot00000000000000.. _examples: ======== Examples ======== This is the examples section. .. toctree:: probabilistic_modeling/probabilistic_modeling.rst statistical_estimation/statistical_estimation.rst uncertainty_quantification/uncertainty_quantification.rst meta_modeling/meta_modeling.rst functional_modeling/functional_modeling.rst numerical_methods/numerical_methods.rst axial_stressed_beam.ipynb optimal_lhs/optimal_lhs ego openturns-1.9/python/doc/examples/functional_modeling/000077500000000000000000000000001307543307100233475ustar00rootroot00000000000000openturns-1.9/python/doc/examples/functional_modeling/aggregated_function.ipynb000066400000000000000000000041621307543307100304140ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create an aggregated function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a function that stacks all the outputs from several functions\n", "\n", "$$f = (f_1, \\dots, f_n)$$\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# assume a list of functions to aggregate\n", "functions = list()\n", "functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'],\n", " ['x1^2 + x2', 'x1 + x2 + x3']))\n", "functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'],\n", " ['x1 + 2 * x2 + x3', 'x1 + x2 - x3']))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [1.0, 2.0, 3.0] y= [3,6,8,0]\n" ] } ], "source": [ "# create the aggregated function\n", "function = ot.AggregatedFunction(functions)\n", "x = [1.0, 2.0, 3.0]\n", "y = function(x)\n", "print('x=', x, 'y=', y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/functional_modeling/composed_function.ipynb000066400000000000000000000033051307543307100301310ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a composed function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a composed function $$f\\circ g$$\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# assume f, g functions\n", "g = ot.SymbolicFunction(['x1', 'x2'],\n", " ['x1 + x2','3 * x1 * x2'])\n", "f = ot.SymbolicFunction(['x1', 'x2'], ['2 * x1 - x2'])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [3.0, 4.0] y= [-22]\n" ] } ], "source": [ "# create the composed function\n", "function = ot.ComposedFunction(f, g)\n", "x = [3.0, 4.0]\n", "y = function(x)\n", "print('x=', x, 'y=', y)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/functional_modeling/functional_modeling.rst000066400000000000000000000003531307543307100301220ustar00rootroot00000000000000Functional modeling =================== .. toctree:: symbolic_function.ipynb python_function.ipynb quadratic_function.ipynb composed_function.ipynb linear_combination_function.ipynb aggregated_function.ipynbopenturns-1.9/python/doc/examples/functional_modeling/linear_combination_function.ipynb000066400000000000000000000043471307543307100321630ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a linear combination of functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a linear combination of several functions.\n", "\n", "$$f = \\sum \\alpha_i f_i$$\n", "\n", "Here\n", "\n", "$$f_1(x) = [x_1^2+x_2,x_1+x_2+x_3]$$\n", "\n", "\n", "$$f_2(x) = [x_1 + 2 * x_2 + x_3,x_1+x_2+x_3]$$\n", "\n", "with coefficients\n", "\n", "$$a_1 = 2, a_2 = 4$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# assume a list of functions to combine\n", "functions = list()\n", "functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'],\n", " ['x1^2 + x2', 'x1 + x2 + x3']))\n", "functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'],\n", " ['x1 + 2 * x2 + x3', 'x1 + x2 - x3']))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [1.0, 2.0, 3.0] y= [38,12]\n" ] } ], "source": [ "# create the combination function\n", "coefficients = [2.0, 4.0]\n", "function = ot.LinearCombinationFunction(functions, coefficients)\n", "x = [1.0, 2.0, 3.0]\n", "y = function(x)\n", "print('x=', x, 'y=', y)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/functional_modeling/python_function.ipynb000066400000000000000000001243321307543307100276450ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a Python function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a function from a Python function.\n", "\n", "$$ f(x) = [x_0+x_1+x_2, (x_1-1)*e^{x_0} * x_2]$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m\n", "\n", "# define a function from R^3 to R^2\n", "def regularFunc(x):\n", " x0, x1, x2 = x\n", " y0 = x0 + x1 + x2\n", " y1 = (x1 - 1.0) * m.exp(x0) * x2\n", " return [y0, y1]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [1.0, 2.0, 3.0] f(x)= [6,8.15485]\n" ] } ], "source": [ "# create an OpenTURNS function from a regular Python function\n", "function = ot.PythonFunction(3, 2, regularFunc)\n", "x = [1.0, 2.0, 3.0]\n", "print('x=', x, 'f(x)=', function(x))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y1 as a function of x0 implementation=class=GraphImplementation name=y1 as a function of x0 title=y1 as a function of x0 xTitle=x0 yTitle=y1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[0,1],[0.015625,1.01575],[0.03125,1.03174],[0.046875,1.04799],[0.0625,1.06449],[0.078125,1.08126],[0.09375,1.09829],[0.109375,1.11558],[0.125,1.13315],[0.140625,1.15099],[0.15625,1.16912],[0.171875,1.18753],[0.1875,1.20623],[0.203125,1.22523],[0.21875,1.24452],[0.234375,1.26412],[0.25,1.28403],[0.265625,1.30425],[0.28125,1.32478],[0.296875,1.34565],[0.3125,1.36684],[0.328125,1.38836],[0.34375,1.41023],[0.359375,1.43243],[0.375,1.45499],[0.390625,1.4779],[0.40625,1.50118],[0.421875,1.52482],[0.4375,1.54883],[0.453125,1.57322],[0.46875,1.598],[0.484375,1.62316],[0.5,1.64872],[0.515625,1.67468],[0.53125,1.70106],[0.546875,1.72785],[0.5625,1.75505],[0.578125,1.78269],[0.59375,1.81077],[0.609375,1.83928],[0.625,1.86825],[0.640625,1.89767],[0.65625,1.92755],[0.671875,1.9579],[0.6875,1.98874],[0.703125,2.02006],[0.71875,2.05187],[0.734375,2.08418],[0.75,2.117],[0.765625,2.15034],[0.78125,2.1842],[0.796875,2.2186],[0.8125,2.25353],[0.828125,2.28902],[0.84375,2.32507],[0.859375,2.36168],[0.875,2.39888],[0.890625,2.43665],[0.90625,2.47502],[0.921875,2.514],[0.9375,2.55359],[0.953125,2.5938],[0.96875,2.63465],[0.984375,2.67614],[1,2.71828],[1.01562,2.76109],[1.03125,2.80457],[1.04688,2.84873],[1.0625,2.8936],[1.07812,2.93916],[1.09375,2.98545],[1.10938,3.03246],[1.125,3.08022],[1.14062,3.12872],[1.15625,3.17799],[1.17188,3.22804],[1.1875,3.27887],[1.20312,3.33051],[1.21875,3.38296],[1.23438,3.43623],[1.25,3.49034],[1.26562,3.54531],[1.28125,3.60114],[1.29688,3.65785],[1.3125,3.71545],[1.32812,3.77396],[1.34375,3.83339],[1.35938,3.89376],[1.375,3.95508],[1.39062,4.01736],[1.40625,4.08062],[1.42188,4.14488],[1.4375,4.21016],[1.45312,4.27646],[1.46875,4.3438],[1.48438,4.41221],[1.5,4.48169],[1.51562,4.55227],[1.53125,4.62395],[1.54688,4.69677],[1.5625,4.77073],[1.57812,4.84586],[1.59375,4.92217],[1.60938,4.99969],[1.625,5.07842],[1.64062,5.15839],[1.65625,5.23963],[1.67188,5.32214],[1.6875,5.40595],[1.70312,5.49108],[1.71875,5.57755],[1.73438,5.66539],[1.75,5.7546],[1.76562,5.84522],[1.78125,5.93727],[1.79688,6.03077],[1.8125,6.12574],[1.82812,6.22221],[1.84375,6.32019],[1.85938,6.41972],[1.875,6.52082],[1.89062,6.62351],[1.90625,6.72781],[1.92188,6.83376],[1.9375,6.94138],[1.95312,7.05069],[1.96875,7.16172],[1.98438,7.2745],[2,7.38906]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw y1 with x1=2.0, x2=1.0, x0 in [0, 2]\n", "ot.ParametricFunction(function, [1, 2], [2.0, 1.0]).getMarginal(1).draw(0.0, 2.0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/functional_modeling/quadratic_function.ipynb000066400000000000000000001363531307543307100303070ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a quadratic function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a quadratic function of the form\n", "\n", "$$f : \\underline{X} \\mapsto \\underline{\\underline{A}} ( \\underline{X} - \\underline{b} ) + \\underline{c} + \\frac{1}{2} \\underline{X}^T \\times \\underline{\\underline{\\underline{M}}} \\times \\underline{X}$$\n", " " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-1,56]\n" ] } ], "source": [ "# create a quadratic function\n", "inputDimension = 3\n", "outputDimension = 2\n", "center = [1.0] * inputDimension\n", "constant = [-1.0, 2.0] # c\n", "linear = ot.Matrix(inputDimension, outputDimension) # A\n", "quadratic = ot.SymmetricTensor(inputDimension, outputDimension) # M\n", "quadratic[0,0,1] = 3.0\n", "function = ot.QuadraticFunction(center, constant, linear, quadratic)\n", "x = [7.0, 8.0, 9.0]\n", "print(function(x))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y1 as a function of x0 implementation=class=GraphImplementation name=y1 as a function of x0 title=y1 as a function of x0 xTitle=x0 yTitle=y1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[0,3.5],[0.015625,3.45349],[0.03125,3.40771],[0.046875,3.36267],[0.0625,3.31836],[0.078125,3.27478],[0.09375,3.23193],[0.109375,3.18982],[0.125,3.14844],[0.140625,3.10779],[0.15625,3.06787],[0.171875,3.02869],[0.1875,2.99023],[0.203125,2.95251],[0.21875,2.91553],[0.234375,2.87927],[0.25,2.84375],[0.265625,2.80896],[0.28125,2.7749],[0.296875,2.74158],[0.3125,2.70898],[0.328125,2.67712],[0.34375,2.646],[0.359375,2.6156],[0.375,2.58594],[0.390625,2.55701],[0.40625,2.52881],[0.421875,2.50134],[0.4375,2.47461],[0.453125,2.44861],[0.46875,2.42334],[0.484375,2.3988],[0.5,2.375],[0.515625,2.35193],[0.53125,2.32959],[0.546875,2.30798],[0.5625,2.28711],[0.578125,2.26697],[0.59375,2.24756],[0.609375,2.22888],[0.625,2.21094],[0.640625,2.19373],[0.65625,2.17725],[0.671875,2.1615],[0.6875,2.14648],[0.703125,2.1322],[0.71875,2.11865],[0.734375,2.10583],[0.75,2.09375],[0.765625,2.0824],[0.78125,2.07178],[0.796875,2.06189],[0.8125,2.05273],[0.828125,2.04431],[0.84375,2.03662],[0.859375,2.02966],[0.875,2.02344],[0.890625,2.01794],[0.90625,2.01318],[0.921875,2.00916],[0.9375,2.00586],[0.953125,2.0033],[0.96875,2.00146],[0.984375,2.00037],[1,2],[1.01562,2.00037],[1.03125,2.00146],[1.04688,2.0033],[1.0625,2.00586],[1.07812,2.00916],[1.09375,2.01318],[1.10938,2.01794],[1.125,2.02344],[1.14062,2.02966],[1.15625,2.03662],[1.17188,2.04431],[1.1875,2.05273],[1.20312,2.06189],[1.21875,2.07178],[1.23438,2.0824],[1.25,2.09375],[1.26562,2.10583],[1.28125,2.11865],[1.29688,2.1322],[1.3125,2.14648],[1.32812,2.1615],[1.34375,2.17725],[1.35938,2.19373],[1.375,2.21094],[1.39062,2.22888],[1.40625,2.24756],[1.42188,2.26697],[1.4375,2.28711],[1.45312,2.30798],[1.46875,2.32959],[1.48438,2.35193],[1.5,2.375],[1.51562,2.3988],[1.53125,2.42334],[1.54688,2.44861],[1.5625,2.47461],[1.57812,2.50134],[1.59375,2.52881],[1.60938,2.55701],[1.625,2.58594],[1.64062,2.6156],[1.65625,2.646],[1.67188,2.67712],[1.6875,2.70898],[1.70312,2.74158],[1.71875,2.7749],[1.73438,2.80896],[1.75,2.84375],[1.76562,2.87927],[1.78125,2.91553],[1.79688,2.95251],[1.8125,2.99023],[1.82812,3.02869],[1.84375,3.06787],[1.85938,3.10779],[1.875,3.14844],[1.89062,3.18982],[1.90625,3.23193],[1.92188,3.27478],[1.9375,3.31836],[1.95312,3.36267],[1.96875,3.40771],[1.98438,3.45349],[2,3.5]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw y1 with x1=2.0, x2=1.0, x0 in [0, 2]\n", "ot.ParametricFunction(function, [1, 2], [2.0, 1.0]).getMarginal(1).draw(0.0, 2.0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/functional_modeling/symbolic_function.ipynb000066400000000000000000001240771307543307100301530ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a symbolic function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a function from mathematical formulas:\n", "\n", "$$ f(x) = [x_0+x_1+x_2, (x_1-1)*e^{x_0} * x_2]$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [1.0, 2.0, 3.0] f(x)= [6,8.15485]\n" ] } ], "source": [ "# create a symbolic function\n", "function = ot.SymbolicFunction(['x0', 'x1', 'x2'],\n", " ['x0 + x1 + x2', '(x1 - 1.0) * exp(x0) * x2'])\n", "x = [1.0, 2.0, 3.0]\n", "print('x=', x, 'f(x)=', function(x))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y1 as a function of x0 implementation=class=GraphImplementation name=y1 as a function of x0 title=y1 as a function of x0 xTitle=x0 yTitle=y1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[0,1],[0.015625,1.01575],[0.03125,1.03174],[0.046875,1.04799],[0.0625,1.06449],[0.078125,1.08126],[0.09375,1.09829],[0.109375,1.11558],[0.125,1.13315],[0.140625,1.15099],[0.15625,1.16912],[0.171875,1.18753],[0.1875,1.20623],[0.203125,1.22523],[0.21875,1.24452],[0.234375,1.26412],[0.25,1.28403],[0.265625,1.30425],[0.28125,1.32478],[0.296875,1.34565],[0.3125,1.36684],[0.328125,1.38836],[0.34375,1.41023],[0.359375,1.43243],[0.375,1.45499],[0.390625,1.4779],[0.40625,1.50118],[0.421875,1.52482],[0.4375,1.54883],[0.453125,1.57322],[0.46875,1.598],[0.484375,1.62316],[0.5,1.64872],[0.515625,1.67468],[0.53125,1.70106],[0.546875,1.72785],[0.5625,1.75505],[0.578125,1.78269],[0.59375,1.81077],[0.609375,1.83928],[0.625,1.86825],[0.640625,1.89767],[0.65625,1.92755],[0.671875,1.9579],[0.6875,1.98874],[0.703125,2.02006],[0.71875,2.05187],[0.734375,2.08418],[0.75,2.117],[0.765625,2.15034],[0.78125,2.1842],[0.796875,2.2186],[0.8125,2.25353],[0.828125,2.28902],[0.84375,2.32507],[0.859375,2.36168],[0.875,2.39888],[0.890625,2.43665],[0.90625,2.47502],[0.921875,2.514],[0.9375,2.55359],[0.953125,2.5938],[0.96875,2.63465],[0.984375,2.67614],[1,2.71828],[1.01562,2.76109],[1.03125,2.80457],[1.04688,2.84873],[1.0625,2.8936],[1.07812,2.93916],[1.09375,2.98545],[1.10938,3.03246],[1.125,3.08022],[1.14062,3.12872],[1.15625,3.17799],[1.17188,3.22804],[1.1875,3.27887],[1.20312,3.33051],[1.21875,3.38296],[1.23438,3.43623],[1.25,3.49034],[1.26562,3.54531],[1.28125,3.60114],[1.29688,3.65785],[1.3125,3.71545],[1.32812,3.77396],[1.34375,3.83339],[1.35938,3.89376],[1.375,3.95508],[1.39062,4.01736],[1.40625,4.08062],[1.42188,4.14488],[1.4375,4.21016],[1.45312,4.27646],[1.46875,4.3438],[1.48438,4.41221],[1.5,4.48169],[1.51562,4.55227],[1.53125,4.62395],[1.54688,4.69677],[1.5625,4.77073],[1.57812,4.84586],[1.59375,4.92217],[1.60938,4.99969],[1.625,5.07842],[1.64062,5.15839],[1.65625,5.23963],[1.67188,5.32214],[1.6875,5.40595],[1.70312,5.49108],[1.71875,5.57755],[1.73438,5.66539],[1.75,5.7546],[1.76562,5.84522],[1.78125,5.93727],[1.79688,6.03077],[1.8125,6.12574],[1.82812,6.22221],[1.84375,6.32019],[1.85938,6.41972],[1.875,6.52082],[1.89062,6.62351],[1.90625,6.72781],[1.92188,6.83376],[1.9375,6.94138],[1.95312,7.05069],[1.96875,7.16172],[1.98438,7.2745],[2,7.38906]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw y1 with x1=2.0, x2=1.0, x0 in [0, 2]\n", "ot.ParametricFunction(function, [1, 2], [2.0, 1.0]).getMarginal(1).draw(0.0, 2.0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/000077500000000000000000000000001307543307100221335ustar00rootroot00000000000000openturns-1.9/python/doc/examples/meta_modeling/create_linear_least_squares_model.ipynb000066400000000000000000001264731307543307100321230ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a linear least squares model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a global approximation of a model response using a linear\n", "function:\n", "\n", " $$ \\underline{y} \\, \\approx \\, \\widehat{h}(\\underline{x}) \\,\n", " = \\, \\sum_{j=0}^{n_X} \\; a_j \\; \\psi_j(\\underline{x})$$\n", " \n", " \n", "Here\n", "\n", "$$h(x) = [cos(x_1 + x_2), (x2 + 1)* e^{x_1 - 2* x_2}]$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# prepare some data\n", "formulas = ['cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)']\n", "model = ot.SymbolicFunction(['x1', 'x2'], formulas)\n", "x = [[0.5,0.5], [-0.5,-0.5], [-0.5,0.5], [0.5,-0.5]]\n", "x += [[0.25,0.25], [-0.25,-0.25], [-0.25,0.25], [0.25,-0.25]]\n", "y = model(x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a linear least squares model\n", "algo = ot.LinearLeastSquares(x, y)\n", "algo.run()\n", "responseSurface = algo.getResponseSurface()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y1 as a function of x1 implementation=class=GraphImplementation name=y1 as a function of x1 title=y1 as a function of x1 xTitle=x1 yTitle=y1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.01497],[-0.492188,2.00774],[-0.484375,2.00051],[-0.476562,1.99328],[-0.46875,1.98604],[-0.460938,1.97881],[-0.453125,1.97158],[-0.445312,1.96435],[-0.4375,1.95712],[-0.429688,1.94989],[-0.421875,1.94265],[-0.414062,1.93542],[-0.40625,1.92819],[-0.398438,1.92096],[-0.390625,1.91373],[-0.382812,1.9065],[-0.375,1.89927],[-0.367188,1.89203],[-0.359375,1.8848],[-0.351562,1.87757],[-0.34375,1.87034],[-0.335938,1.86311],[-0.328125,1.85588],[-0.320312,1.84864],[-0.3125,1.84141],[-0.304688,1.83418],[-0.296875,1.82695],[-0.289062,1.81972],[-0.28125,1.81249],[-0.273438,1.80525],[-0.265625,1.79802],[-0.257812,1.79079],[-0.25,1.78356],[-0.242188,1.77633],[-0.234375,1.7691],[-0.226562,1.76186],[-0.21875,1.75463],[-0.210938,1.7474],[-0.203125,1.74017],[-0.195312,1.73294],[-0.1875,1.72571],[-0.179688,1.71847],[-0.171875,1.71124],[-0.164062,1.70401],[-0.15625,1.69678],[-0.148438,1.68955],[-0.140625,1.68232],[-0.132812,1.67508],[-0.125,1.66785],[-0.117188,1.66062],[-0.109375,1.65339],[-0.101562,1.64616],[-0.09375,1.63893],[-0.0859375,1.6317],[-0.078125,1.62446],[-0.0703125,1.61723],[-0.0625,1.61],[-0.0546875,1.60277],[-0.046875,1.59554],[-0.0390625,1.58831],[-0.03125,1.58107],[-0.0234375,1.57384],[-0.015625,1.56661],[-0.0078125,1.55938],[0,1.55215],[0.0078125,1.54492],[0.015625,1.53768],[0.0234375,1.53045],[0.03125,1.52322],[0.0390625,1.51599],[0.046875,1.50876],[0.0546875,1.50153],[0.0625,1.49429],[0.0703125,1.48706],[0.078125,1.47983],[0.0859375,1.4726],[0.09375,1.46537],[0.101562,1.45814],[0.109375,1.4509],[0.117188,1.44367],[0.125,1.43644],[0.132812,1.42921],[0.140625,1.42198],[0.148438,1.41475],[0.15625,1.40751],[0.164062,1.40028],[0.171875,1.39305],[0.179688,1.38582],[0.1875,1.37859],[0.195312,1.37136],[0.203125,1.36413],[0.210938,1.35689],[0.21875,1.34966],[0.226562,1.34243],[0.234375,1.3352],[0.242188,1.32797],[0.25,1.32074],[0.257812,1.3135],[0.265625,1.30627],[0.273438,1.29904],[0.28125,1.29181],[0.289062,1.28458],[0.296875,1.27735],[0.304688,1.27011],[0.3125,1.26288],[0.320312,1.25565],[0.328125,1.24842],[0.335938,1.24119],[0.34375,1.23396],[0.351562,1.22672],[0.359375,1.21949],[0.367188,1.21226],[0.375,1.20503],[0.382812,1.1978],[0.390625,1.19057],[0.398438,1.18333],[0.40625,1.1761],[0.414062,1.16887],[0.421875,1.16164],[0.429688,1.15441],[0.4375,1.14718],[0.445312,1.13994],[0.453125,1.13271],[0.460938,1.12548],[0.46875,1.11825],[0.476562,1.11102],[0.484375,1.10379],[0.492188,1.09656],[0.5,1.08932]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.24084],[-0.492188,2.24057],[-0.484375,2.23977],[-0.476562,2.23846],[-0.46875,2.23665],[-0.460938,2.23435],[-0.453125,2.23159],[-0.445312,2.22838],[-0.4375,2.22473],[-0.429688,2.22066],[-0.421875,2.21618],[-0.414062,2.21131],[-0.40625,2.20605],[-0.398438,2.20042],[-0.390625,2.19444],[-0.382812,2.18812],[-0.375,2.18146],[-0.367188,2.17449],[-0.359375,2.16721],[-0.351562,2.15963],[-0.34375,2.15176],[-0.335938,2.14362],[-0.328125,2.13521],[-0.320312,2.12655],[-0.3125,2.11765],[-0.304688,2.10851],[-0.296875,2.09914],[-0.289062,2.08956],[-0.28125,2.07977],[-0.273438,2.06978],[-0.265625,2.05961],[-0.257812,2.04925],[-0.25,2.03871],[-0.242188,2.02801],[-0.234375,2.01715],[-0.226562,2.00614],[-0.21875,1.99499],[-0.210938,1.9837],[-0.203125,1.97228],[-0.195312,1.96074],[-0.1875,1.94909],[-0.179688,1.93732],[-0.171875,1.92545],[-0.164062,1.91348],[-0.15625,1.90142],[-0.148438,1.88927],[-0.140625,1.87705],[-0.132812,1.86475],[-0.125,1.85238],[-0.117188,1.83994],[-0.109375,1.82744],[-0.101562,1.81489],[-0.09375,1.80229],[-0.0859375,1.78965],[-0.078125,1.77696],[-0.0703125,1.76424],[-0.0625,1.75148],[-0.0546875,1.7387],[-0.046875,1.72589],[-0.0390625,1.71306],[-0.03125,1.70021],[-0.0234375,1.68735],[-0.015625,1.67448],[-0.0078125,1.6616],[0,1.64872],[0.0078125,1.63584],[0.015625,1.62296],[0.0234375,1.61009],[0.03125,1.59723],[0.0390625,1.58438],[0.046875,1.57155],[0.0546875,1.55873],[0.0625,1.54593],[0.0703125,1.53315],[0.078125,1.5204],[0.0859375,1.50767],[0.09375,1.49498],[0.101562,1.48231],[0.109375,1.46968],[0.117188,1.45709],[0.125,1.44453],[0.132812,1.43201],[0.140625,1.41953],[0.148438,1.4071],[0.15625,1.3947],[0.164062,1.38236],[0.171875,1.37006],[0.179688,1.35781],[0.1875,1.34561],[0.195312,1.33347],[0.203125,1.32137],[0.210938,1.30934],[0.21875,1.29735],[0.226562,1.28543],[0.234375,1.27356],[0.242188,1.26175],[0.25,1.25],[0.257812,1.23831],[0.265625,1.22669],[0.273438,1.21512],[0.28125,1.20362],[0.289062,1.19219],[0.296875,1.18082],[0.304688,1.16951],[0.3125,1.15828],[0.320312,1.14711],[0.328125,1.13601],[0.335938,1.12497],[0.34375,1.11401],[0.351562,1.10311],[0.359375,1.09229],[0.367188,1.08153],[0.375,1.07085],[0.382812,1.06024],[0.390625,1.0497],[0.398438,1.03923],[0.40625,1.02883],[0.414062,1.01851],[0.421875,1.00826],[0.429688,0.998083],[0.4375,0.987978],[0.445312,0.977947],[0.453125,0.96799],[0.460938,0.958106],[0.46875,0.948296],[0.476562,0.93856],[0.484375,0.928898],[0.492188,0.91931],[0.5,0.909796]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot 2nd output of our model with x1=0.5\n", "graph = ot.ParametricFunction(responseSurface, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5)\n", "curve = ot.ParametricFunction(model, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5).getDrawable(0)\n", "curve.setColor('red')\n", "graph.add(curve)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/create_linear_taylor_model.ipynb000066400000000000000000001312441307543307100305520ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a linear taylor model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a local approximation of a model using the first order taylor decomposition:\n", "\n", "$$\\underline{y} \\, \\approx \\, \\widehat{h}(\\underline{x}) \\,\n", " = \\, h(\\underline{x}_0) \\, +\n", " \\, \\sum_{i=1}^{n_{X}} \\; \\frac{\\partial h}{\\partial x_i}(\\underline{x}_0).\\left(x_i - x_{0,i} \\right)$$\n", " \n", " \n", "Here\n", "\n", "$$h(x) = [cos(x_1 + x_2), (x2 + 1)* e^{x_1 - 2* x_2}]$$\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# prepare some data\n", "formulas = ['cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)']\n", "model = ot.SymbolicFunction(['x1', 'x2'], formulas)\n", "x = [0.5, 0.5]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a linear least squares model\n", "algo = ot.LinearTaylor(x, model)\n", "algo.run()\n", "responseSurface = algo.getResponseSurface()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y1 as a function of x2 implementation=class=GraphImplementation name=y1 as a function of x2 title=y1 as a function of x2 xTitle=x2 yTitle=y1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.12286],[-0.492188,2.11338],[-0.484375,2.1039],[-0.476562,2.09443],[-0.46875,2.08495],[-0.460938,2.07547],[-0.453125,2.066],[-0.445312,2.05652],[-0.4375,2.04704],[-0.429688,2.03756],[-0.421875,2.02809],[-0.414062,2.01861],[-0.40625,2.00913],[-0.398438,1.99966],[-0.390625,1.99018],[-0.382812,1.9807],[-0.375,1.97122],[-0.367188,1.96175],[-0.359375,1.95227],[-0.351562,1.94279],[-0.34375,1.93332],[-0.335938,1.92384],[-0.328125,1.91436],[-0.320312,1.90489],[-0.3125,1.89541],[-0.304688,1.88593],[-0.296875,1.87645],[-0.289062,1.86698],[-0.28125,1.8575],[-0.273438,1.84802],[-0.265625,1.83855],[-0.257812,1.82907],[-0.25,1.81959],[-0.242188,1.81011],[-0.234375,1.80064],[-0.226562,1.79116],[-0.21875,1.78168],[-0.210938,1.77221],[-0.203125,1.76273],[-0.195312,1.75325],[-0.1875,1.74378],[-0.179688,1.7343],[-0.171875,1.72482],[-0.164062,1.71534],[-0.15625,1.70587],[-0.148438,1.69639],[-0.140625,1.68691],[-0.132812,1.67744],[-0.125,1.66796],[-0.117188,1.65848],[-0.109375,1.64901],[-0.101562,1.63953],[-0.09375,1.63005],[-0.0859375,1.62057],[-0.078125,1.6111],[-0.0703125,1.60162],[-0.0625,1.59214],[-0.0546875,1.58267],[-0.046875,1.57319],[-0.0390625,1.56371],[-0.03125,1.55423],[-0.0234375,1.54476],[-0.015625,1.53528],[-0.0078125,1.5258],[0,1.51633],[0.0078125,1.50685],[0.015625,1.49737],[0.0234375,1.4879],[0.03125,1.47842],[0.0390625,1.46894],[0.046875,1.45946],[0.0546875,1.44999],[0.0625,1.44051],[0.0703125,1.43103],[0.078125,1.42156],[0.0859375,1.41208],[0.09375,1.4026],[0.101562,1.39313],[0.109375,1.38365],[0.117188,1.37417],[0.125,1.36469],[0.132812,1.35522],[0.140625,1.34574],[0.148438,1.33626],[0.15625,1.32679],[0.164062,1.31731],[0.171875,1.30783],[0.179688,1.29835],[0.1875,1.28888],[0.195312,1.2794],[0.203125,1.26992],[0.210938,1.26045],[0.21875,1.25097],[0.226562,1.24149],[0.234375,1.23202],[0.242188,1.22254],[0.25,1.21306],[0.257812,1.20358],[0.265625,1.19411],[0.273438,1.18463],[0.28125,1.17515],[0.289062,1.16568],[0.296875,1.1562],[0.304688,1.14672],[0.3125,1.13724],[0.320312,1.12777],[0.328125,1.11829],[0.335938,1.10881],[0.34375,1.09934],[0.351562,1.08986],[0.359375,1.08038],[0.367188,1.07091],[0.375,1.06143],[0.382812,1.05195],[0.390625,1.04247],[0.398438,1.033],[0.40625,1.02352],[0.414062,1.01404],[0.421875,1.00457],[0.429688,0.995089],[0.4375,0.985612],[0.445312,0.976135],[0.453125,0.966658],[0.460938,0.957181],[0.46875,0.947704],[0.476562,0.938227],[0.484375,0.92875],[0.492188,0.919273],[0.5,0.909796]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.24084],[-0.492188,2.24057],[-0.484375,2.23977],[-0.476562,2.23846],[-0.46875,2.23665],[-0.460938,2.23435],[-0.453125,2.23159],[-0.445312,2.22838],[-0.4375,2.22473],[-0.429688,2.22066],[-0.421875,2.21618],[-0.414062,2.21131],[-0.40625,2.20605],[-0.398438,2.20042],[-0.390625,2.19444],[-0.382812,2.18812],[-0.375,2.18146],[-0.367188,2.17449],[-0.359375,2.16721],[-0.351562,2.15963],[-0.34375,2.15176],[-0.335938,2.14362],[-0.328125,2.13521],[-0.320312,2.12655],[-0.3125,2.11765],[-0.304688,2.10851],[-0.296875,2.09914],[-0.289062,2.08956],[-0.28125,2.07977],[-0.273438,2.06978],[-0.265625,2.05961],[-0.257812,2.04925],[-0.25,2.03871],[-0.242188,2.02801],[-0.234375,2.01715],[-0.226562,2.00614],[-0.21875,1.99499],[-0.210938,1.9837],[-0.203125,1.97228],[-0.195312,1.96074],[-0.1875,1.94909],[-0.179688,1.93732],[-0.171875,1.92545],[-0.164062,1.91348],[-0.15625,1.90142],[-0.148438,1.88927],[-0.140625,1.87705],[-0.132812,1.86475],[-0.125,1.85238],[-0.117188,1.83994],[-0.109375,1.82744],[-0.101562,1.81489],[-0.09375,1.80229],[-0.0859375,1.78965],[-0.078125,1.77696],[-0.0703125,1.76424],[-0.0625,1.75148],[-0.0546875,1.7387],[-0.046875,1.72589],[-0.0390625,1.71306],[-0.03125,1.70021],[-0.0234375,1.68735],[-0.015625,1.67448],[-0.0078125,1.6616],[0,1.64872],[0.0078125,1.63584],[0.015625,1.62296],[0.0234375,1.61009],[0.03125,1.59723],[0.0390625,1.58438],[0.046875,1.57155],[0.0546875,1.55873],[0.0625,1.54593],[0.0703125,1.53315],[0.078125,1.5204],[0.0859375,1.50767],[0.09375,1.49498],[0.101562,1.48231],[0.109375,1.46968],[0.117188,1.45709],[0.125,1.44453],[0.132812,1.43201],[0.140625,1.41953],[0.148438,1.4071],[0.15625,1.3947],[0.164062,1.38236],[0.171875,1.37006],[0.179688,1.35781],[0.1875,1.34561],[0.195312,1.33347],[0.203125,1.32137],[0.210938,1.30934],[0.21875,1.29735],[0.226562,1.28543],[0.234375,1.27356],[0.242188,1.26175],[0.25,1.25],[0.257812,1.23831],[0.265625,1.22669],[0.273438,1.21512],[0.28125,1.20362],[0.289062,1.19219],[0.296875,1.18082],[0.304688,1.16951],[0.3125,1.15828],[0.320312,1.14711],[0.328125,1.13601],[0.335938,1.12497],[0.34375,1.11401],[0.351562,1.10311],[0.359375,1.09229],[0.367188,1.08153],[0.375,1.07085],[0.382812,1.06024],[0.390625,1.0497],[0.398438,1.03923],[0.40625,1.02883],[0.414062,1.01851],[0.421875,1.00826],[0.429688,0.998083],[0.4375,0.987978],[0.445312,0.977947],[0.453125,0.96799],[0.460938,0.958106],[0.46875,0.948296],[0.476562,0.93856],[0.484375,0.928898],[0.492188,0.91931],[0.5,0.909796]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot 2nd output of our model with x1=0.5\n", "graph = ot.ParametricFunction(responseSurface, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5)\n", "curve = ot.ParametricFunction(model, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5).getDrawable(0)\n", "curve.setColor('red')\n", "graph.add(curve)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/functional_chaos.ipynb000066400000000000000000002274521307543307100265310ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a polynomial chaos metamodel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a global approximation of a model response using functional chaos.\n", "\n", "Here\n", "\n", "$$h(x) = [cos(x_1 + x_2), (x2 + 1)* e^{x_1 - 2* x_2}]$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# prepare some X/Y data\n", "ot.RandomGenerator.SetSeed(0)\n", "dimension = 2\n", "input_names = ['x1', 'x2']\n", "formulas = ['cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)']\n", "model = ot.SymbolicFunction(input_names, formulas)\n", "distribution = ot.Normal(dimension)\n", "x = distribution.getSample(30)\n", "y = model(x)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a functional chaos model\n", "algo = ot.FunctionalChaosAlgorithm(x, y)\n", "algo.run()\n", "result = algo.getResult()\n", "responseSurface = result.getMetaModel()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=v1 as a function of x1 implementation=class=GraphImplementation name=v1 as a function of x1 title=v1 as a function of x1 xTitle=x1 yTitle=v1 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.41662],[-0.492188,2.41765],[-0.484375,2.41783],[-0.476562,2.41719],[-0.46875,2.41576],[-0.460938,2.41355],[-0.453125,2.41059],[-0.445312,2.40691],[-0.4375,2.40254],[-0.429688,2.39748],[-0.421875,2.39178],[-0.414062,2.38546],[-0.40625,2.37853],[-0.398438,2.37102],[-0.390625,2.36295],[-0.382812,2.35435],[-0.375,2.34524],[-0.367188,2.33563],[-0.359375,2.32556],[-0.351562,2.31503],[-0.34375,2.30408],[-0.335938,2.29272],[-0.328125,2.28098],[-0.320312,2.26886],[-0.3125,2.2564],[-0.304688,2.2436],[-0.296875,2.2305],[-0.289062,2.21709],[-0.28125,2.20342],[-0.273438,2.18948],[-0.265625,2.17531],[-0.257812,2.16091],[-0.25,2.1463],[-0.242188,2.1315],[-0.234375,2.11652],[-0.226562,2.10138],[-0.21875,2.08609],[-0.210938,2.07067],[-0.203125,2.05513],[-0.195312,2.03948],[-0.1875,2.02375],[-0.179688,2.00793],[-0.171875,1.99205],[-0.164062,1.97611],[-0.15625,1.96013],[-0.148438,1.94412],[-0.140625,1.92809],[-0.132812,1.91206],[-0.125,1.89602],[-0.117188,1.87999],[-0.109375,1.86398],[-0.101562,1.84801],[-0.09375,1.83207],[-0.0859375,1.81618],[-0.078125,1.80034],[-0.0703125,1.78457],[-0.0625,1.76887],[-0.0546875,1.75325],[-0.046875,1.73771],[-0.0390625,1.72226],[-0.03125,1.70692],[-0.0234375,1.69167],[-0.015625,1.67653],[-0.0078125,1.66151],[0,1.6466],[0.0078125,1.63182],[0.015625,1.61717],[0.0234375,1.60265],[0.03125,1.58826],[0.0390625,1.57401],[0.046875,1.55991],[0.0546875,1.54595],[0.0625,1.53213],[0.0703125,1.51847],[0.078125,1.50495],[0.0859375,1.49159],[0.09375,1.47838],[0.101562,1.46533],[0.109375,1.45243],[0.117188,1.43969],[0.125,1.42711],[0.132812,1.41469],[0.140625,1.40242],[0.148438,1.39031],[0.15625,1.37836],[0.164062,1.36657],[0.171875,1.35493],[0.179688,1.34344],[0.1875,1.33211],[0.195312,1.32092],[0.203125,1.30989],[0.210938,1.29901],[0.21875,1.28827],[0.226562,1.27767],[0.234375,1.26722],[0.242188,1.25691],[0.25,1.24673],[0.257812,1.23669],[0.265625,1.22677],[0.273438,1.21699],[0.28125,1.20733],[0.289062,1.19779],[0.296875,1.18837],[0.304688,1.17906],[0.3125,1.16986],[0.320312,1.16077],[0.328125,1.15179],[0.335938,1.1429],[0.34375,1.13411],[0.351562,1.12541],[0.359375,1.1168],[0.367188,1.10827],[0.375,1.09983],[0.382812,1.09145],[0.390625,1.08315],[0.398438,1.07492],[0.40625,1.06675],[0.414062,1.05863],[0.421875,1.05057],[0.429688,1.04257],[0.4375,1.03463],[0.445312,1.02672],[0.453125,1.01886],[0.460938,1.01102],[0.46875,1.00322],[0.476562,0.995435],[0.484375,0.987674],[0.492188,0.979929],[0.5,0.972196]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,2.24084],[-0.492188,2.24057],[-0.484375,2.23977],[-0.476562,2.23846],[-0.46875,2.23665],[-0.460938,2.23435],[-0.453125,2.23159],[-0.445312,2.22838],[-0.4375,2.22473],[-0.429688,2.22066],[-0.421875,2.21618],[-0.414062,2.21131],[-0.40625,2.20605],[-0.398438,2.20042],[-0.390625,2.19444],[-0.382812,2.18812],[-0.375,2.18146],[-0.367188,2.17449],[-0.359375,2.16721],[-0.351562,2.15963],[-0.34375,2.15176],[-0.335938,2.14362],[-0.328125,2.13521],[-0.320312,2.12655],[-0.3125,2.11765],[-0.304688,2.10851],[-0.296875,2.09914],[-0.289062,2.08956],[-0.28125,2.07977],[-0.273438,2.06978],[-0.265625,2.05961],[-0.257812,2.04925],[-0.25,2.03871],[-0.242188,2.02801],[-0.234375,2.01715],[-0.226562,2.00614],[-0.21875,1.99499],[-0.210938,1.9837],[-0.203125,1.97228],[-0.195312,1.96074],[-0.1875,1.94909],[-0.179688,1.93732],[-0.171875,1.92545],[-0.164062,1.91348],[-0.15625,1.90142],[-0.148438,1.88927],[-0.140625,1.87705],[-0.132812,1.86475],[-0.125,1.85238],[-0.117188,1.83994],[-0.109375,1.82744],[-0.101562,1.81489],[-0.09375,1.80229],[-0.0859375,1.78965],[-0.078125,1.77696],[-0.0703125,1.76424],[-0.0625,1.75148],[-0.0546875,1.7387],[-0.046875,1.72589],[-0.0390625,1.71306],[-0.03125,1.70021],[-0.0234375,1.68735],[-0.015625,1.67448],[-0.0078125,1.6616],[0,1.64872],[0.0078125,1.63584],[0.015625,1.62296],[0.0234375,1.61009],[0.03125,1.59723],[0.0390625,1.58438],[0.046875,1.57155],[0.0546875,1.55873],[0.0625,1.54593],[0.0703125,1.53315],[0.078125,1.5204],[0.0859375,1.50767],[0.09375,1.49498],[0.101562,1.48231],[0.109375,1.46968],[0.117188,1.45709],[0.125,1.44453],[0.132812,1.43201],[0.140625,1.41953],[0.148438,1.4071],[0.15625,1.3947],[0.164062,1.38236],[0.171875,1.37006],[0.179688,1.35781],[0.1875,1.34561],[0.195312,1.33347],[0.203125,1.32137],[0.210938,1.30934],[0.21875,1.29735],[0.226562,1.28543],[0.234375,1.27356],[0.242188,1.26175],[0.25,1.25],[0.257812,1.23831],[0.265625,1.22669],[0.273438,1.21512],[0.28125,1.20362],[0.289062,1.19219],[0.296875,1.18082],[0.304688,1.16951],[0.3125,1.15828],[0.320312,1.14711],[0.328125,1.13601],[0.335938,1.12497],[0.34375,1.11401],[0.351562,1.10311],[0.359375,1.09229],[0.367188,1.08153],[0.375,1.07085],[0.382812,1.06024],[0.390625,1.0497],[0.398438,1.03923],[0.40625,1.02883],[0.414062,1.01851],[0.421875,1.00826],[0.429688,0.998083],[0.4375,0.987978],[0.445312,0.977947],[0.453125,0.96799],[0.460938,0.958106],[0.46875,0.948296],[0.476562,0.93856],[0.484375,0.928898],[0.492188,0.91931],[0.5,0.909796]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot 2nd output of our model with x1=0.5\n", "graph = ot.ParametricFunction(responseSurface, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5)\n", "curve = ot.ParametricFunction(model, [0], [0.5]).getMarginal(1).draw(-0.5, 0.5).getDrawable(0)\n", "curve.setColor('red')\n", "graph.add(curve)\n", "graph" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=1st order Sobol' indices xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[x1 : 56.7%,x2 : 43.3%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#00ff00] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0.567186],[0.432814]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw Sobol' indices\n", "sensitivityAnalysis = ot.FunctionalChaosRandomVector(result)\n", "first_order = list(map(lambda i: sensitivityAnalysis.getSobolIndex(i), range(dimension)))\n", "ot.SaltelliSensitivityAlgorithm.DrawImportanceFactors(first_order, input_names, '1st order Sobol\\' indices')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/general_linear_model.ipynb000066400000000000000000000045021307543307100273260ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a general linear model metamodel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a global approximation of a model response using a general linear model." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# prepare some X/Y data\n", "ot.RandomGenerator.SetSeed(0)\n", "dimension = 2\n", "input_names = ['x1', 'x2']\n", "formulas = ['cos(x1 + x2)']\n", "model = ot.SymbolicFunction(input_names, formulas)\n", "distribution = ot.Normal(dimension)\n", "x = distribution.getSample(300)\n", "y = model(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a functional chaos model\n", "basis = ot.ConstantBasisFactory(dimension).build()\n", "covarianceModel = ot.SquaredExponential([1]*dimension, [1.0])\n", "algo = ot.GeneralLinearModelAlgorithm(x, y, covarianceModel, basis)\n", "algo.run()\n", "result = algo.getResult()\n", "responseSurface = result.getMetaModel()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# plot 2nd output of our model with x1=0.5\n", "ot.ParametricFunction(responseSurface, [0], [0.5]).draw(-0.5, 0.5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/kriging.ipynb000066400000000000000000001361331307543307100246370ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a metamodel using Kriging" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a global approximation of a model response using a kriging model.\n", "\n", "Here\n", "\n", "$$h(x) = cos(x_1 + x_2)$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# prepare some X/Y data\n", "ot.RandomGenerator.SetSeed(0)\n", "dimension = 2\n", "input_names = ['x1', 'x2']\n", "formulas = ['cos(x1 + x2)']\n", "model = ot.SymbolicFunction(input_names, formulas)\n", "distribution = ot.Normal(dimension)\n", "x = distribution.getSample(30)\n", "y = model(x)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a kriging model\n", "basis = ot.ConstantBasisFactory(dimension).build()\n", "covarianceModel = ot.SquaredExponential([0.1]*dimension, [1.0])\n", "algo = ot.KrigingAlgorithm(x, y, covarianceModel, basis)\n", "algo.run()\n", "result = algo.getResult()\n", "responseSurface = result.getMetaModel()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y0 as a function of x1 implementation=class=GraphImplementation name=y0 as a function of x1 title=y0 as a function of x1 xTitle=x1 yTitle=y0 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,0.992409],[-0.492188,0.992312],[-0.484375,0.992157],[-0.476562,0.991953],[-0.46875,0.991681],[-0.460938,0.991347],[-0.453125,0.990967],[-0.445312,0.990527],[-0.4375,0.990023],[-0.429688,0.98946],[-0.421875,0.988846],[-0.414062,0.988169],[-0.40625,0.987441],[-0.398438,0.986645],[-0.390625,0.985796],[-0.382812,0.984896],[-0.375,0.983931],[-0.367188,0.982911],[-0.359375,0.981837],[-0.351562,0.980702],[-0.34375,0.979504],[-0.335938,0.978264],[-0.328125,0.976954],[-0.320312,0.97559],[-0.3125,0.974171],[-0.304688,0.972693],[-0.296875,0.971159],[-0.289062,0.969574],[-0.28125,0.967928],[-0.273438,0.966238],[-0.265625,0.96447],[-0.257812,0.96266],[-0.25,0.960787],[-0.242188,0.958863],[-0.234375,0.956877],[-0.226562,0.954842],[-0.21875,0.952742],[-0.210938,0.950598],[-0.203125,0.948388],[-0.195312,0.946135],[-0.1875,0.943819],[-0.179688,0.941443],[-0.171875,0.939019],[-0.164062,0.936537],[-0.15625,0.934014],[-0.148438,0.931422],[-0.140625,0.92878],[-0.132812,0.926081],[-0.125,0.923329],[-0.117188,0.920527],[-0.109375,0.91767],[-0.101562,0.914752],[-0.09375,0.911778],[-0.0859375,0.908762],[-0.078125,0.90569],[-0.0703125,0.90256],[-0.0625,0.899392],[-0.0546875,0.896161],[-0.046875,0.892876],[-0.0390625,0.889533],[-0.03125,0.886145],[-0.0234375,0.882708],[-0.015625,0.879221],[-0.0078125,0.875674],[0,0.872078],[0.0078125,0.868433],[0.015625,0.864739],[0.0234375,0.860989],[0.03125,0.857184],[0.0390625,0.853339],[0.046875,0.849427],[0.0546875,0.845482],[0.0625,0.841488],[0.0703125,0.837431],[0.078125,0.833336],[0.0859375,0.829184],[0.09375,0.824997],[0.101562,0.82074],[0.109375,0.816447],[0.117188,0.812108],[0.125,0.807719],[0.132812,0.803275],[0.140625,0.798787],[0.148438,0.794247],[0.15625,0.789666],[0.164062,0.785037],[0.171875,0.780354],[0.179688,0.775631],[0.1875,0.770863],[0.195312,0.766051],[0.203125,0.761187],[0.210938,0.756276],[0.21875,0.751322],[0.226562,0.746333],[0.234375,0.741288],[0.242188,0.736201],[0.25,0.731068],[0.257812,0.725882],[0.265625,0.720669],[0.273438,0.715407],[0.28125,0.710091],[0.289062,0.704745],[0.296875,0.699349],[0.304688,0.693917],[0.3125,0.688441],[0.320312,0.682913],[0.328125,0.677355],[0.335938,0.671755],[0.34375,0.666111],[0.351562,0.660424],[0.359375,0.654694],[0.367188,0.64893],[0.375,0.643128],[0.382812,0.637286],[0.390625,0.631394],[0.398438,0.625473],[0.40625,0.619505],[0.414062,0.613505],[0.421875,0.607466],[0.429688,0.601386],[0.4375,0.595276],[0.445312,0.589129],[0.453125,0.582932],[0.460938,0.576706],[0.46875,0.570443],[0.476562,0.564158],[0.484375,0.557816],[0.492188,0.551447],[0.5,0.545048]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.5,1],[-0.492188,0.999969],[-0.484375,0.999878],[-0.476562,0.999725],[-0.46875,0.999512],[-0.460938,0.999237],[-0.453125,0.998902],[-0.445312,0.998505],[-0.4375,0.998048],[-0.429688,0.997529],[-0.421875,0.99695],[-0.414062,0.99631],[-0.40625,0.995609],[-0.398438,0.994847],[-0.390625,0.994025],[-0.382812,0.993141],[-0.375,0.992198],[-0.367188,0.991193],[-0.359375,0.990129],[-0.351562,0.989003],[-0.34375,0.987818],[-0.335938,0.986572],[-0.328125,0.985266],[-0.320312,0.9839],[-0.3125,0.982473],[-0.304688,0.980987],[-0.296875,0.979441],[-0.289062,0.977835],[-0.28125,0.976169],[-0.273438,0.974444],[-0.265625,0.97266],[-0.257812,0.970816],[-0.25,0.968912],[-0.242188,0.96695],[-0.234375,0.964929],[-0.226562,0.962848],[-0.21875,0.960709],[-0.210938,0.958512],[-0.203125,0.956255],[-0.195312,0.953941],[-0.1875,0.951568],[-0.179688,0.949137],[-0.171875,0.946648],[-0.164062,0.944102],[-0.15625,0.941497],[-0.148438,0.938836],[-0.140625,0.936117],[-0.132812,0.933341],[-0.125,0.930508],[-0.117188,0.927618],[-0.109375,0.924671],[-0.101562,0.921668],[-0.09375,0.918609],[-0.0859375,0.915494],[-0.078125,0.912323],[-0.0703125,0.909096],[-0.0625,0.905814],[-0.0546875,0.902476],[-0.046875,0.899083],[-0.0390625,0.895636],[-0.03125,0.892134],[-0.0234375,0.888577],[-0.015625,0.884966],[-0.0078125,0.881301],[0,0.877583],[0.0078125,0.87381],[0.015625,0.869985],[0.0234375,0.866106],[0.03125,0.862174],[0.0390625,0.85819],[0.046875,0.854154],[0.0546875,0.850065],[0.0625,0.845924],[0.0703125,0.841732],[0.078125,0.837489],[0.0859375,0.833194],[0.09375,0.828848],[0.101562,0.824452],[0.109375,0.820006],[0.117188,0.815509],[0.125,0.810963],[0.132812,0.806367],[0.140625,0.801722],[0.148438,0.797028],[0.15625,0.792286],[0.164062,0.787495],[0.171875,0.782656],[0.179688,0.777769],[0.1875,0.772835],[0.195312,0.767854],[0.203125,0.762825],[0.210938,0.75775],[0.21875,0.752629],[0.226562,0.747462],[0.234375,0.74225],[0.242188,0.736992],[0.25,0.731689],[0.257812,0.726341],[0.265625,0.720949],[0.273438,0.715513],[0.28125,0.710034],[0.289062,0.704511],[0.296875,0.698945],[0.304688,0.693336],[0.3125,0.687686],[0.320312,0.681993],[0.328125,0.676258],[0.335938,0.670482],[0.34375,0.664666],[0.351562,0.658808],[0.359375,0.652911],[0.367188,0.646974],[0.375,0.640997],[0.382812,0.634981],[0.390625,0.628926],[0.398438,0.622833],[0.40625,0.616702],[0.414062,0.610533],[0.421875,0.604327],[0.429688,0.598084],[0.4375,0.591805],[0.445312,0.58549],[0.453125,0.579138],[0.460938,0.572752],[0.46875,0.56633],[0.476562,0.559874],[0.484375,0.553384],[0.492188,0.54686],[0.5,0.540302]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# plot 2nd output of our model with x1=0.5\n", "graph = ot.ParametricFunction(responseSurface, [0], [0.5]).draw(-0.5, 0.5)\n", "curve = ot.ParametricFunction(model, [0], [0.5]).draw(-0.5, 0.5).getDrawable(0)\n", "curve.setColor('red')\n", "graph.add(curve)\n", "graph" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/meta_modeling/meta_modeling.rst000066400000000000000000000003101307543307100254630ustar00rootroot00000000000000Meta modeling ============= .. toctree:: create_linear_least_squares_model.ipynb create_linear_taylor_model.ipynb functional_chaos.ipynb general_linear_model.ipynb kriging.ipynb openturns-1.9/python/doc/examples/numerical_methods/000077500000000000000000000000001307543307100230315ustar00rootroot00000000000000openturns-1.9/python/doc/examples/numerical_methods/estimate_integral_iterated_quadrature.ipynb000066400000000000000000006136671307543307100337350ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate an integral" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to evaluate an integral of the form.\n", "\n", "$$I_f = \\int_{a}^{b}\\, \\int_{l_1(x_0)}^{u_1(x_0)}\\, \\int_{l_2(x_0, x_1)}^{u_2(x_0,x_1)}\\, \\int_{l_{n-1}(x_0, \\dots, x_{n-2})}^{u_{n-1}(x_0, \\dots, x_{n-2})} \\, f(x_0, \\dots, x_{n-1})\\mathrm{d}{x_{n-1}}\\dots\\mathrm{d}{x_0}$$\n", "\n", "with the iterated quadrature algorithm." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the integrand and the bounds\n", "a = -m.pi\n", "b = m.pi\n", "f = ot.SymbolicFunction(['x', 'y'], ['1+cos(x)*sin(y)'])\n", "l = [ot.SymbolicFunction(['x'], [' 2+cos(x)'])]\n", "u = [ot.SymbolicFunction(['x'], ['-2-cos(x)'])]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Integration nodes implementation=class=GraphImplementation name=Integration nodes title=Integration nodes xTitle=x yTitle=y axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[0.146447] labels=[0.146447] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=0.146447 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[0.413897] labels=[0.413897] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=0.413897 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[0.639687] labels=[0.639687] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=0.639687 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[0.81976] labels=[0.81976] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=0.81976 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[0.956726] labels=[0.956726] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=0.956726 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[1.04327] labels=[1.04327] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1.04327 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[1.18024] labels=[1.18024] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1.18024 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[1.36031] labels=[1.36031] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1.36031 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[1.5861] labels=[1.5861] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1.5861 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.14159],[-3.09251],[-3.04342],[-2.99433],[-2.94524],[-2.89616],[-2.84707],[-2.79798],[-2.74889],[-2.69981],[-2.65072],[-2.60163],[-2.55254],[-2.50346],[-2.45437],[-2.40528],[-2.35619],[-2.30711],[-2.25802],[-2.20893],[-2.15984],[-2.11076],[-2.06167],[-2.01258],[-1.9635],[-1.91441],[-1.86532],[-1.81623],[-1.76715],[-1.71806],[-1.66897],[-1.61988],[-1.5708],[-1.52171],[-1.47262],[-1.42353],[-1.37445],[-1.32536],[-1.27627],[-1.22718],[-1.1781],[-1.12901],[-1.07992],[-1.03084],[-0.981748],[-0.93266],[-0.883573],[-0.834486],[-0.785398],[-0.736311],[-0.687223],[-0.638136],[-0.589049],[-0.539961],[-0.490874],[-0.441786],[-0.392699],[-0.343612],[-0.294524],[-0.245437],[-0.19635],[-0.147262],[-0.0981748],[-0.0490874],[0],[0.0490874],[0.0981748],[0.147262],[0.19635],[0.245437],[0.294524],[0.343612],[0.392699],[0.441786],[0.490874],[0.539961],[0.589049],[0.638136],[0.687223],[0.736311],[0.785398],[0.834486],[0.883573],[0.93266],[0.981748],[1.03084],[1.07992],[1.12901],[1.1781],[1.22718],[1.27627],[1.32536],[1.37445],[1.42353],[1.47262],[1.52171],[1.5708],[1.61988],[1.66897],[1.71806],[1.76715],[1.81623],[1.86532],[1.91441],[1.9635],[2.01258],[2.06167],[2.11076],[2.15984],[2.20893],[2.25802],[2.30711],[2.35619],[2.40528],[2.45437],[2.50346],[2.55254],[2.60163],[2.65072],[2.69981],[2.74889],[2.79798],[2.84707],[2.89616],[2.94524],[2.99433],[3.04342],[3.09251],[3.14159]] levels=class=Point name=Unnamed dimension=1 values=[1.85355] labels=[1.85355] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1.85355 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 description=[y0] data=[[1],[1],[1],...,[1],[1],[1]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-3.14159,1],[-3.09251,1.0012],[-3.04342,1.00482],[-2.99433,1.01082],[-2.94524,1.01921],[-2.89616,1.02997],[-2.84707,1.04306],[-2.79798,1.05846],[-2.74889,1.07612],[-2.69981,1.09601],[-2.65072,1.11808],[-2.60163,1.14227],[-2.55254,1.16853],[-2.50346,1.19679],[-2.45437,1.22699],[-2.40528,1.25905],[-2.35619,1.29289],[-2.30711,1.32844],[-2.25802,1.36561],[-2.20893,1.4043],[-2.15984,1.44443],[-2.11076,1.4859],[-2.06167,1.5286],[-2.01258,1.57244],[-1.9635,1.61732],[-1.91441,1.66311],[-1.86532,1.70972],[-1.81623,1.75702],[-1.76715,1.80491],[-1.71806,1.85327],[-1.66897,1.90198],[-1.61988,1.95093],[-1.5708,2],[-1.52171,2.04907],[-1.47262,2.09802],[-1.42353,2.14673],[-1.37445,2.19509],[-1.32536,2.24298],[-1.27627,2.29028],[-1.22718,2.33689],[-1.1781,2.38268],[-1.12901,2.42756],[-1.07992,2.4714],[-1.03084,2.5141],[-0.981748,2.55557],[-0.93266,2.5957],[-0.883573,2.63439],[-0.834486,2.67156],[-0.785398,2.70711],[-0.736311,2.74095],[-0.687223,2.77301],[-0.638136,2.80321],[-0.589049,2.83147],[-0.539961,2.85773],[-0.490874,2.88192],[-0.441786,2.90399],[-0.392699,2.92388],[-0.343612,2.94154],[-0.294524,2.95694],[-0.245437,2.97003],[-0.19635,2.98079],[-0.147262,2.98918],[-0.0981748,2.99518],[-0.0490874,2.9988],[0,3],[0.0490874,2.9988],[0.0981748,2.99518],[0.147262,2.98918],[0.19635,2.98079],[0.245437,2.97003],[0.294524,2.95694],[0.343612,2.94154],[0.392699,2.92388],[0.441786,2.90399],[0.490874,2.88192],[0.539961,2.85773],[0.589049,2.83147],[0.638136,2.80321],[0.687223,2.77301],[0.736311,2.74095],[0.785398,2.70711],[0.834486,2.67156],[0.883573,2.63439],[0.93266,2.5957],[0.981748,2.55557],[1.03084,2.5141],[1.07992,2.4714],[1.12901,2.42756],[1.1781,2.38268],[1.22718,2.33689],[1.27627,2.29028],[1.32536,2.24298],[1.37445,2.19509],[1.42353,2.14673],[1.47262,2.09802],[1.52171,2.04907],[1.5708,2],[1.61988,1.95093],[1.66897,1.90198],[1.71806,1.85327],[1.76715,1.80491],[1.81623,1.75702],[1.86532,1.70972],[1.91441,1.66311],[1.9635,1.61732],[2.01258,1.57244],[2.06167,1.5286],[2.11076,1.4859],[2.15984,1.44443],[2.20893,1.4043],[2.25802,1.36561],[2.30711,1.32844],[2.35619,1.29289],[2.40528,1.25905],[2.45437,1.22699],[2.50346,1.19679],[2.55254,1.16853],[2.60163,1.14227],[2.65072,1.11808],[2.69981,1.09601],[2.74889,1.07612],[2.79798,1.05846],[2.84707,1.04306],[2.89616,1.02997],[2.94524,1.01921],[2.99433,1.01082],[3.04342,1.00482],[3.09251,1.0012],[3.14159,1]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-3.14159,-1],[-3.09251,-1.0012],[-3.04342,-1.00482],[-2.99433,-1.01082],[-2.94524,-1.01921],[-2.89616,-1.02997],[-2.84707,-1.04306],[-2.79798,-1.05846],[-2.74889,-1.07612],[-2.69981,-1.09601],[-2.65072,-1.11808],[-2.60163,-1.14227],[-2.55254,-1.16853],[-2.50346,-1.19679],[-2.45437,-1.22699],[-2.40528,-1.25905],[-2.35619,-1.29289],[-2.30711,-1.32844],[-2.25802,-1.36561],[-2.20893,-1.4043],[-2.15984,-1.44443],[-2.11076,-1.4859],[-2.06167,-1.5286],[-2.01258,-1.57244],[-1.9635,-1.61732],[-1.91441,-1.66311],[-1.86532,-1.70972],[-1.81623,-1.75702],[-1.76715,-1.80491],[-1.71806,-1.85327],[-1.66897,-1.90198],[-1.61988,-1.95093],[-1.5708,-2],[-1.52171,-2.04907],[-1.47262,-2.09802],[-1.42353,-2.14673],[-1.37445,-2.19509],[-1.32536,-2.24298],[-1.27627,-2.29028],[-1.22718,-2.33689],[-1.1781,-2.38268],[-1.12901,-2.42756],[-1.07992,-2.4714],[-1.03084,-2.5141],[-0.981748,-2.55557],[-0.93266,-2.5957],[-0.883573,-2.63439],[-0.834486,-2.67156],[-0.785398,-2.70711],[-0.736311,-2.74095],[-0.687223,-2.77301],[-0.638136,-2.80321],[-0.589049,-2.83147],[-0.539961,-2.85773],[-0.490874,-2.88192],[-0.441786,-2.90399],[-0.392699,-2.92388],[-0.343612,-2.94154],[-0.294524,-2.95694],[-0.245437,-2.97003],[-0.19635,-2.98079],[-0.147262,-2.98918],[-0.0981748,-2.99518],[-0.0490874,-2.9988],[0,-3],[0.0490874,-2.9988],[0.0981748,-2.99518],[0.147262,-2.98918],[0.19635,-2.98079],[0.245437,-2.97003],[0.294524,-2.95694],[0.343612,-2.94154],[0.392699,-2.92388],[0.441786,-2.90399],[0.490874,-2.88192],[0.539961,-2.85773],[0.589049,-2.83147],[0.638136,-2.80321],[0.687223,-2.77301],[0.736311,-2.74095],[0.785398,-2.70711],[0.834486,-2.67156],[0.883573,-2.63439],[0.93266,-2.5957],[0.981748,-2.55557],[1.03084,-2.5141],[1.07992,-2.4714],[1.12901,-2.42756],[1.1781,-2.38268],[1.22718,-2.33689],[1.27627,-2.29028],[1.32536,-2.24298],[1.37445,-2.19509],[1.42353,-2.14673],[1.47262,-2.09802],[1.52171,-2.04907],[1.5708,-2],[1.61988,-1.95093],[1.66897,-1.90198],[1.71806,-1.85327],[1.76715,-1.80491],[1.81623,-1.75702],[1.86532,-1.70972],[1.91441,-1.66311],[1.9635,-1.61732],[2.01258,-1.57244],[2.06167,-1.5286],[2.11076,-1.4859],[2.15984,-1.44443],[2.20893,-1.4043],[2.25802,-1.36561],[2.30711,-1.32844],[2.35619,-1.29289],[2.40528,-1.25905],[2.45437,-1.22699],[2.50346,-1.19679],[2.55254,-1.16853],[2.60163,-1.14227],[2.65072,-1.11808],[2.69981,-1.09601],[2.74889,-1.07612],[2.79798,-1.05846],[2.84707,-1.04306],[2.89616,-1.02997],[2.94524,-1.01921],[2.99433,-1.01082],[3.04342,-1.00482],[3.09251,-1.0012],[3.14159,-1]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw the graph of the integrand and the bounds\n", "g = ot.Graph('Integration nodes', 'x', 'y', True, 'topright')\n", "g.add(f.draw([a,a],[b,b]))\n", "curve = l[0].draw(a, b).getDrawable(0)\n", "curve.setLineWidth(2)\n", "curve.setColor('red')\n", "g.add(curve)\n", "curve = u[0].draw(a, b).getDrawable(0)\n", "curve.setLineWidth(2)\n", "curve.setColor('red')\n", "g.add(curve)\n", "g" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-25.1327]\n" ] } ], "source": [ "# compute the integral value\n", "I2 = ot.IteratedQuadrature().integrate(f, a, b, l, u)\n", "print(I2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/numerical_methods/numerical_methods.rst000066400000000000000000000002101307543307100272560ustar00rootroot00000000000000Numerical methods ================= .. toctree:: optimization_constraints.ipynb estimate_integral_iterated_quadrature.ipynb openturns-1.9/python/doc/examples/numerical_methods/optimization_constraints.ipynb000066400000000000000000001535531307543307100312650ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimization with constraints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to expose methods to solve a generic optimization problem in the form\n", "\n", "$$\\min_{x\\in B} f(x) \\\\\n", " g(x) = 0 \\\\\n", " h(x) \\ge 0$$\n", " " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the objective function\n", "objective = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ['x1 + 2 * x2 - 3 * x3 + 4 * x4'])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the constraints\n", "inequality_constraint = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ['x1-x3'])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define the problem bounds\n", "dim = objective.getInputDimension()\n", "bounds = ot.Interval([-3.] * dim, [5.] * dim)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define the problem\n", "problem = ot.OptimizationProblem(objective)\n", "problem.setMinimization(True)\n", "problem.setInequalityConstraint(inequality_constraint)\n", "problem.setBounds(bounds)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# solve the problem\n", "algo = ot.Cobyla()\n", "algo.setProblem(problem)\n", "startingPoint = [0.0] * dim\n", "algo.setStartingPoint(startingPoint)\n", "algo.run()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x^= [4.47847,-3,4.47847,-3]\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "print('x^=', result.getOptimalPoint())" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Optimal value history implementation=class=GraphImplementation name=Optimal value history title=Optimal value history xTitle=Iteration number yTitle=Optimal value axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=optimal value implementation=class=Curve name=optimal value derived from class=DrawableImplementation name=optimal value legend=optimal value data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0,0],[1,0],[2,0],[3,-0.3],[4,-0.3],[5,-0.431662],[6,-0.900704],[7,-1.36975],[8,-1.83879],[9,-2.30783],[10,-2.77687],[11,-3.24591],[12,-3.71495],[13,-4.184],[14,-4.65304],[15,-5.12208],[16,-5.59112],[17,-6.06016],[18,-6.5292],[19,-6.99824],[20,-7.46729],[21,-7.93633],[22,-8.40537],[23,-8.87441],[24,-9.34345],[25,-9.81249],[26,-10.2815],[27,-10.7506],[28,-11.2196],[29,-11.6887],[30,-12.1577],[31,-12.6267],[32,-13.0958],[33,-13.5648],[34,-14.0339],[35,-14.5029],[36,-14.972],[37,-15.441],[38,-15.91],[39,-16.3791],[40,-16.7641],[41,-17.009],[42,-17.254],[43,-17.4989],[44,-17.7439],[45,-17.9888],[46,-18.2338],[47,-18.4787],[48,-18.7237],[49,-18.9686],[50,-19.2136],[51,-19.4585],[52,-19.7035],[53,-19.9484],[54,-20.1934],[55,-20.4383],[56,-20.6833],[57,-20.9282],[58,-21.1587],[59,-21.3001],[60,-21.4415],[61,-21.5829],[62,-21.7244],[63,-21.8658],[64,-22.0072],[65,-22.1486],[66,-22.29],[67,-22.4315],[68,-22.5729],[69,-22.7143],[70,-22.8557],[71,-22.9971],[72,-23.1386],[73,-23.28],[74,-23.4214],[75,-23.5628],[76,-23.7043],[77,-23.8457],[78,-23.9871],[79,-24.1285],[80,-24.2699],[81,-24.4114],[82,-24.5528],[83,-24.6942],[84,-24.8356],[85,-24.977],[86,-25.1185],[87,-25.2599],[88,-25.4013],[89,-25.5427],[90,-25.6842],[91,-25.8256],[92,-25.967],[93,-26.1084],[94,-26.2498],[95,-26.3913],[96,-26.5327],[97,-26.6741],[98,-26.8155],[99,-26.9569]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw optimal value history\n", "result.drawOptimalValueHistory()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/optimal_lhs/000077500000000000000000000000001307543307100216425ustar00rootroot00000000000000openturns-1.9/python/doc/examples/optimal_lhs/optimal_lhs.rst000066400000000000000000000135641307543307100247200ustar00rootroot00000000000000Optimal LHS designs =================== LHS and space filling --------------------- :class:`~openturns.SpaceFilling` is an abstract class to compute the criterion value of a given design. :class:`~openturns.SpaceFillingC2` and :class:`~openturns.SpaceFillingPhiP` are implemented here. Note that these classes support only the computation of the criterion, and not its optimization. .. doctest:: >>> import openturns as ot >>> # Generating a design of size N=100 >>> N = 100 >>> # Considering independent Uniform distributions of dimension 3 >>> # Bounds are (-1,1), (0,2) and (0, 0.5) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0), ot.Uniform(0.0, 2.0), ot.Uniform(0.0, 0.5)]) >>> # Random LHS >>> lhs = ot.LHSExperiment(distribution, N) >>> lhs.setAlwaysShuffle(True) # randomized >>> design = lhs.generate() >>> # C2 >>> c2 = ot.SpaceFillingC2().evaluate(design) >>> # PhiP with default p >>> phip = ot.SpaceFillingPhiP().evaluate(design) >>> # mindist >>> mindist = ot.SpaceFillingMinDist().evaluate(design) >>> # For p->infinity >>> phip_inf = ot.SpaceFillingPhiP(100).evaluate(design) Optimized LHS using Monte Carlo ------------------------------- As with Monte Carlo, user decides of a fixed number of iterations, but this time this number is part of the temperature profile. Two profiles are currently provided: - Linear profile: :math:`T(i) = T(0) \left( 1 - \frac{i}{nrIter} \right)` - Geometric profile: :math:`T(i) = T(0) c^i,\; 0 < c < 1` Starting from an LHS design, a new design is built by permuting a random coordinate of two randomly chosen sample points; this new design is also an LHS. but not necessary a `more efficient` design. A comparison of criteria of the two designs is done, and the new LHS is accepted with probability .. math:: min\left(exp\left[ -\frac{ \phi(\text{LHSnew}) - \phi(\text{LHS})}{T(i)} \right], 1\right) .. doctest:: >>> import openturns as ot >>> N = 100 >>> # Considering independent Uniform(0,1) distributions of dimension 3 >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * 3) >>> # Random LHS >>> lhs = ot.LHSExperiment(distribution, N) >>> lhs.setAlwaysShuffle(True) # randomized >>> algo = ot.SimulatedAnnealingLHS(lhs) >>> design = algo.generate() One could also fix the criterion, the temperature profile and gets more results. .. doctest:: >>> import openturns as ot >>> # Generating a design of size N=100 >>> N = 100 >>> # Considering independent Uniform distributions of dimension 3 >>> # Bounds are (-1,1), (0,2) and (0, 0.5) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0), ot.Uniform(0.0, 2.0), ot.Uniform(0.0, 0.5)]) >>> # Random LHS >>> lhs = ot.LHSExperiment(distribution, N) >>> lhs.setAlwaysShuffle(True) # randomized >>> # Fixing C2 crit >>> space_filling = ot.SpaceFillingC2() >>> # Defining a temperature profile >>> # A geometric profile seems accurate with default parameters >>> # e.g. T0=10, c=0.95, iMax=2000 >>> temperatureProfile = ot.GeometricProfile() >>> algo = ot.SimulatedAnnealingLHS(lhs, temperatureProfile, space_filling) >>> # optimal design >>> design = algo.generate() >>> result = algo.getResult() >>> # Criteria for the optimal design >>> crit_c2 = result.getC2() >>> crit_phip = result.getPhiP() >>> crit_mindist = result.getMinDist() >>> # History of the criterion used for optimization >>> history = result.getAlgoHistory() >>> criterion_hist = history[:, 0] >>> # Additional results >>> temperature_hist = history[:, 1] >>> probability_hist = history[:, 2] It is also possible to chain several iterations of the whole process with different starting points. .. doctest:: >>> import openturns as ot >>> # Generating a design of size N=100 >>> N = 100 >>> # Considering independent Uniform distributions of dimension 3 >>> # Bounds are (-1,1), (0,2) and (0, 0.5) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0), ot.Uniform(0.0, 2.0), ot.Uniform(0.0, 0.5)]) >>> # Random LHS >>> lhs = ot.LHSExperiment(distribution, N) >>> lhs.setAlwaysShuffle(True) # randomized >>> # Fixing PhiP crit >>> space_filling = ot.SpaceFillingPhiP() >>> # Defining a temperature profile >>> # T0=10, iMax=3000 >>> temperatureProfile = ot.LinearProfile(10.0, 3000) >>> algo = ot.SimulatedAnnealingLHS(lhs, temperatureProfile, space_filling) >>> restart = 50 >>> design = algo.generateWithRestart(restart) >>> # Retrieve all optimal designs >>> result = algo.getResult() >>> designs = [result.getOptimalDesign(i) for i in range(restart)] Finally, we could start the optimization process of LHS using a precomputed LHS design. .. doctest:: >>> import openturns as ot >>> from openturns.viewer import View >>> # Generating a design of size N=100 >>> N = 100 >>> # Considering independent Uniform distributions of dimension 3 >>> # Bounds are (0,1)^3 >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * 3) >>> # Random LHS >>> lhs = ot.LHSExperiment(distribution, N) >>> lhs.setAlwaysShuffle(True) # randomized >>> # Fixing C2 crit for example >>> space_filling = ot.SpaceFillingC2() >>> # Defining a temperature profile >>> # T0=10, iMax=3000 >>> temperatureProfile = ot.LinearProfile(10.0, 3000) >>> algo = ot.SimulatedAnnealingLHS(lhs, temperatureProfile, space_filling) >>> design = algo.generate() >>> result = algo.getResult() >>> # check history ==> draw criterion >>> View(result.drawHistoryCriterion()).show() >>> # Convergence needs to be performed >>> # New algo starting from this design >>> algo = ot.SimulatedAnnealingLHS(design, distribution, temperatureProfile, space_filling) >>> design = algo.generate() openturns-1.9/python/doc/examples/probabilistic_modeling/000077500000000000000000000000001307543307100240335ustar00rootroot00000000000000openturns-1.9/python/doc/examples/probabilistic_modeling/2d_gaussian_distribution.ipynb000066400000000000000000003455421307543307100321110ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a 2-d gaussian distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a bidimensional gaussian distribution with parameters\n", "\n", "$$\\mu = [0.0, 2.2], \\sigma = [1.0, 0.6]$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Normal(mu = [0,2], sigma = [1,0.6], R = [[ 1 0 ]\n", " [ 0 1 ]])\n" ] } ], "source": [ "# create the distribution, no correlation\n", "distribution = ot.Normal([0.0, 2.0], [1.0, 0.6], ot.CorrelationMatrix(2))\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [ X0 X1 ]\n", "0 : [ 0.608202 1.2403 ]\n", "1 : [ -0.438266 2.72329 ]\n", "2 : [ -2.18139 2.21003 ]\n", "3 : [ -0.355007 2.86235 ]\n", "4 : [ 0.810668 2.47589 ]\n", "5 : [ -0.470526 2.15661 ]\n", "6 : [ -2.29006 1.23027 ]\n", "7 : [ -1.31178 1.94553 ]\n", "8 : [ 0.995793 1.91633 ]\n", "9 : [ -0.560206 2.26729 ]\n" ] } ], "source": [ "# draw a sample\n", "sample = distribution.getSample(10)\n", "print(sample)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.73116],[-3.67286],[-3.61456],[-3.55626],[-3.49796],[-3.43966],[-3.38136],[-3.32306],[-3.26477],[-3.20647],[-3.14817],[-3.08987],[-3.03157],[-2.97327],[-2.91497],[-2.85667],[-2.79837],[-2.74007],[-2.68177],[-2.62347],[-2.56517],[-2.50687],[-2.44857],[-2.39027],[-2.33198],[-2.27368],[-2.21538],[-2.15708],[-2.09878],[-2.04048],[-1.98218],[-1.92388],[-1.86558],[-1.80728],[-1.74898],[-1.69068],[-1.63238],[-1.57408],[-1.51578],[-1.45748],[-1.39919],[-1.34089],[-1.28259],[-1.22429],[-1.16599],[-1.10769],[-1.04939],[-0.991089],[-0.93279],[-0.874491],[-0.816191],[-0.757892],[-0.699593],[-0.641293],[-0.582994],[-0.524694],[-0.466395],[-0.408096],[-0.349796],[-0.291497],[-0.233198],[-0.174898],[-0.116599],[-0.0582994],[0],[0.0582994],[0.116599],[0.174898],[0.233198],[0.291497],[0.349796],[0.408096],[0.466395],[0.524694],[0.582994],[0.641293],[0.699593],[0.757892],[0.816191],[0.874491],[0.93279],[0.991089],[1.04939],[1.10769],[1.16599],[1.22429],[1.28259],[1.34089],[1.39919],[1.45748],[1.51578],[1.57408],[1.63238],[1.69068],[1.74898],[1.80728],[1.86558],[1.92388],[1.98218],[2.04048],[2.09878],[2.15708],[2.21538],[2.27368],[2.33198],[2.39027],[2.44857],[2.50687],[2.56517],[2.62347],[2.68177],[2.74007],[2.79837],[2.85667],[2.91497],[2.97327],[3.03157],[3.08987],[3.14817],[3.20647],[3.26477],[3.32306],[3.38136],[3.43966],[3.49796],[3.55626],[3.61456],[3.67286],[3.73116]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-0.238696],[-0.203716],[-0.168737],[-0.133757],[-0.0987776],[-0.063798],[-0.0288184],[0.00616127],[0.0411409],[0.0761205],[0.1111],[0.14608],[0.181059],[0.216039],[0.251019],[0.285998],[0.320978],[0.355958],[0.390937],[0.425917],[0.460896],[0.495876],[0.530856],[0.565835],[0.600815],[0.635795],[0.670774],[0.705754],[0.740733],[0.775713],[0.810693],[0.845672],[0.880652],[0.915632],[0.950611],[0.985591],[1.02057],[1.05555],[1.09053],[1.12551],[1.16049],[1.19547],[1.23045],[1.26543],[1.30041],[1.33539],[1.37037],[1.40535],[1.44033],[1.47531],[1.51029],[1.54526],[1.58024],[1.61522],[1.6502],[1.68518],[1.72016],[1.75514],[1.79012],[1.8251],[1.86008],[1.89506],[1.93004],[1.96502],[2],[2.03498],[2.06996],[2.10494],[2.13992],[2.1749],[2.20988],[2.24486],[2.27984],[2.31482],[2.3498],[2.38478],[2.41976],[2.45474],[2.48971],[2.52469],[2.55967],[2.59465],[2.62963],[2.66461],[2.69959],[2.73457],[2.76955],[2.80453],[2.83951],[2.87449],[2.90947],[2.94445],[2.97943],[3.01441],[3.04939],[3.08437],[3.11935],[3.15433],[3.18931],[3.22429],[3.25927],[3.29425],[3.32923],[3.36421],[3.39919],[3.43416],[3.46914],[3.50412],[3.5391],[3.57408],[3.60906],[3.64404],[3.67902],[3.714],[3.74898],[3.78396],[3.81894],[3.85392],[3.8889],[3.92388],[3.95886],[3.99384],[4.02882],[4.0638],[4.09878],[4.13376],[4.16874],[4.20372],[4.2387]] levels=class=Point name=Unnamed dimension=10 values=[1.05908e-05,0.000102206,0.000310042,0.000760515,0.0018655,0.00460717,0.0113782,0.0280527,0.0688117,0.169078] labels=[1.05908e-05,0.000102206,0.000310042,0.000760515,0.0018655,0.00460717,0.0113782,0.0280527,0.0688117,0.169078] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[2.38569e-07],[2.96037e-07],[3.66101e-07],...,[3.66101e-07],[2.96037e-07],[2.38569e-07]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/aggregated_process.ipynb000066400000000000000000002250201307543307100307270ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Aggregate processes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to concatenate several processes that share the same mesh." ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create processes to aggregate\n", "myMesher = ot.IntervalMesher(ot.Indices([100,10]))\n", "lowerbound = [0.0, 0.0]\n", "upperBound = [2.0, 4.0]\n", "myInterval = ot.Interval(lowerbound, upperBound)\n", "myMesh = myMesher.build(myInterval)\n", "myProcess1 = ot.WhiteNoise(ot.Normal(), myMesh)\n", "myProcess2 = ot.WhiteNoise(ot.Triangular(), myMesh)\n" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=84 dimension=2 data=[[-3.20241,0],[-3.04417,0],[-3.04417,0],[-3.04417,0.00284408],[-2.72769,0.00284408],[-2.72769,0],[-2.72769,0],[-2.72769,0.0142204],[-2.41121,0.0142204],[-2.41121,0],[-2.41121,0],[-2.41121,0.0369731],[-2.09473,0.0369731],[-2.09473,0],[-2.09473,0],[-2.09473,0.0540376],[-1.77826,0.0540376],[-1.77826,0],[-1.77826,0],[-1.77826,0.0966988],[-1.46178,0.0966988],[-1.46178,0],[-1.46178,0],[-1.46178,0.147892],[-1.1453,0.147892],[-1.1453,0],[-1.1453,0],[-1.1453,0.255967],[-0.828821,0.255967],[-0.828821,0],[-0.828821,0],[-0.828821,0.315693],[-0.512343,0.315693],[-0.512343,0],[-0.512343,0],[-0.512343,0.389639],[-0.195865,0.389639],[-0.195865,0],[-0.195865,0],[-0.195865,0.383951],[0.120613,0.383951],[0.120613,0],[0.120613,0],[0.120613,0.389639],[0.437091,0.389639],[0.437091,0],[0.437091,0],[0.437091,0.372575],[0.753569,0.372575],[0.753569,0],[0.753569,0],[0.753569,0.247435],[1.07005,0.247435],[1.07005,0],[1.07005,0],[1.07005,0.182021],[1.38653,0.182021],[1.38653,0],[1.38653,0],[1.38653,0.136516],[1.703,0.136516],[1.703,0],[1.703,0],[1.703,0.068258],[2.01948,0.068258],[2.01948,0],[2.01948,0],[2.01948,0.034129],[2.33596,0.034129],[2.33596,0],[2.33596,0],[2.33596,0.0170645],[2.65244,0.0170645],[2.65244,0],[2.65244,0],[2.65244,0],[2.96892,0],[2.96892,0],[2.96892,0],[2.96892,0.0142204],[3.28539,0.0142204],[3.28539,0],[3.28539,0],[3.44363,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw values of a realization of the 2nd process\n", "marginal = ot.HistogramFactory().build(myProcess1.getRealization().getValues())\n", "marginal.drawPDF()" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create an aggregated process\n", "myAggregatedProcess = ot.AggregatedProcess([myProcess1, myProcess2])" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=88 dimension=2 data=[[-3.67366,0],[-3.51875,0],[-3.51875,0],[-3.51875,0.00290517],[-3.20893,0.00290517],[-3.20893,0],[-3.20893,0],[-3.20893,0],[-2.8991,0],[-2.8991,0],[-2.8991,0],[-2.8991,0.0087155],[-2.58928,0.0087155],[-2.58928,0],[-2.58928,0],[-2.58928,0.017431],[-2.27946,0.017431],[-2.27946,0],[-2.27946,0],[-2.27946,0.0464827],[-1.96963,0.0464827],[-1.96963,0],[-1.96963,0],[-1.96963,0.069724],[-1.65981,0.069724],[-1.65981,0],[-1.65981,0],[-1.65981,0.130733],[-1.34998,0.130733],[-1.34998,0],[-1.34998,0],[-1.34998,0.246939],[-1.04016,0.246939],[-1.04016,0],[-1.04016,0],[-1.04016,0.25856],[-0.730336,0.25856],[-0.730336,0],[-0.730336,0],[-0.730336,0.336999],[-0.420513,0.336999],[-0.420513,0],[-0.420513,0],[-0.420513,0.366051],[-0.110689,0.366051],[-0.110689,0],[-0.110689,0],[-0.110689,0.421249],[0.199135,0.421249],[0.199135,0],[0.199135,0],[0.199135,0.371861],[0.508959,0.371861],[0.508959,0],[0.508959,0],[0.508959,0.313758],[0.818783,0.313758],[0.818783,0],[0.818783,0],[0.818783,0.220793],[1.12861,0.220793],[1.12861,0],[1.12861,0],[1.12861,0.18012],[1.43843,0.18012],[1.43843,0],[1.43843,0],[1.43843,0.0900602],[1.74825,0.0900602],[1.74825,0],[1.74825,0],[1.74825,0.0813447],[2.05808,0.0813447],[2.05808,0],[2.05808,0],[2.05808,0.0464827],[2.3679,0.0464827],[2.3679,0],[2.3679,0],[2.3679,0.0087155],[2.67773,0.0087155],[2.67773,0],[2.67773,0],[2.67773,0.0087155],[2.98755,0.0087155],[2.98755,0],[2.98755,0],[3.14246,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw values of the realization on the 2nd marginal\n", "marginal = ot.HistogramFactory().build(myAggregatedProcess.getRealization().getValues().getMarginal(0))\n", "marginal.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/arma_process.ipynb000066400000000000000000001522111307543307100275560ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create an ARMA process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build an ARMA process defined by its linear recurrence coefficients." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the recurrence coefficients AR, MA (4,2)\n", "myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1])\n", "myMACoef = ot.ARMACoefficients([0.4, 0.3])" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the white noise distribution of the recurrent relation.\n", "myTimeGrid = ot.RegularGrid(0.0, 0.1, 10)\n", "myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ARMA(X_{0,t} + 0.4 X_{0,t-1} + 0.3 X_{0,t-2} + 0.2 X_{0,t-3} + 0.1 X_{0,t-4} = E_{0,t} + 0.4 E_{0,t-1} + 0.3 E_{0,t-2}, E_t ~ Triangular(a = -1, m = 0, b = 1))\n" ] } ], "source": [ "# Create the process:\n", "process = ot.ARMA(myARCoef, myMACoef, myWhiteNoise)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.341823],[0.1,-0.00957403],[0.2,0.0224608],[0.3,-0.481566],[0.4,-0.456814],[0.5,-0.0565024],[0.6,-0.213638],[0.7,0.591662],[0.8,0.0704458],[0.9,-0.430707]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-0.077266],[0.1,-0.986286],[0.2,0.00509058],[0.3,-0.190429],[0.4,0.38624],[0.5,0.279966],[0.6,-0.182756],[0.7,-0.12594],[0.8,-0.0513171],[0.9,0.140469]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.13717],[0.1,-0.591838],[0.2,0.202489],[0.3,-0.222936],[0.4,0.180728],[0.5,0.317649],[0.6,0.13878],[0.7,0.381257],[0.8,-0.856812],[0.9,0.301271]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-0.12248],[0.1,0.689327],[0.2,-0.222813],[0.3,0.405742],[0.4,0.117917],[0.5,0.521204],[0.6,0.0338232],[0.7,0.12437],[0.8,-0.147818],[0.9,0.431635]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.850406],[0.1,-0.075756],[0.2,-0.0382096],[0.3,-0.843329],[0.4,0.11959],[0.5,0.469268],[0.6,0.484954],[0.7,-0.249166],[0.8,0.158283],[0.9,0.0227648]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.289786],[0.1,-0.234227],[0.2,-0.745846],[0.3,0.49245],[0.4,0.309484],[0.5,0.576007],[0.6,0.111429],[0.7,0.1491],[0.8,-0.582409],[0.9,-0.578544]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/box_cox_transform.ipynb000066400000000000000000025542541307543307100306530ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Apply a Box-Cox transformation to a Field" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to modify a Field through a Box-Cox transformation." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Define a process\n", "myIndices= ot.Indices([10,5])\n", "myMesher =ot.IntervalMesher(myIndices)\n", "myInterval = ot.Interval([0.0, 0.0], [2.0, 1.0])\n", "myMesh = myMesher.build(myInterval)\n", "amplitude = [1.0]\n", "scale = [0.2, 0.2]\n", "myCovModel = ot.ExponentialModel(scale, amplitude)\n", "myXproc = ot.GaussianProcess(myCovModel, myMesh)\n", "g = ot.SymbolicFunction(['x1'], ['exp(x1)'])\n", "myDynTransform = ot.ValueFunction(g, 2)\n", "myXtProcess = ot.CompositeProcess(myDynTransform, myXproc)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=v0 yTitle=v1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.00283865],[0.0160185,0]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.011228],[0.0633599,0]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.0149222],[0.0842059,0]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.028599],[0.161384,0]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.0408669],[0.193407,0.00659314]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.0479766],[0.184766,0.0152341]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.0721059],[0.15544,0.0445604]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.0870725],[0.13725,0.0627504]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.125493],[0.0905543,0.109446]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0.19776],[0.00272239,0.197278]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.198977,0.2],[0.2,0.193972]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.190511,0.2],[0.2,0.14406]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.186783,0.2],[0.2,0.122082]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.17298,0.2],[0.2,0.0407125]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.160599,0.2],[0.193407,0.00659314]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.153424,0.2],[0.184766,0.0152341]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.129072,0.2],[0.15544,0.0445604]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.113968,0.2],[0.13725,0.0627504]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0751934,0.2],[0.0905543,0.109446]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.00226058,0.2],[0.00272239,0.197278]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.297461,0],[0.374491,0.0255086]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.163308],[0.242024,0.157976]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.14624],[0.258535,0.141465]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.0830498],[0.319662,0.0803384]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.0263695],[0.374491,0.0255086]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.596361,0],[0.590978,0.00902159]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.575821,0],[0.540061,0.0599392]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.571264,0],[0.528762,0.0712377]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.560337,0],[0.501674,0.0983257]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.529334,0],[0.424818,0.175182]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.520557,0],[0.403059,0.196941]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.497432,0],[0.4,0.163308]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.487249,0],[0.4,0.14624]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.449549,0],[0.4,0.0830498]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.415732,0],[0.4,0.0263695]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.575187,0.2],[0.6,0.162151]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.571736,0.2],[0.6,0.156886]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.560229,0.2],[0.6,0.139333]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.550251,0.2],[0.6,0.124113]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.540796,0.2],[0.6,0.10969]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.527143,0.2],[0.6,0.0888651]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.517546,0.2],[0.6,0.0742261]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.505418,0.2],[0.6,0.0557256]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.500738,0.2],[0.6,0.0485872]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.494908,0.2],[0.6,0.039694]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.470777,0.2],[0.6,0.0028847]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.465779,0.2],[0.590978,0.00902159]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.448241,0.2],[0.540061,0.0599392]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.44435,0.2],[0.528762,0.0712377]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.43502,0.2],[0.501674,0.0983257]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.408548,0.2],[0.424818,0.175182]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.401054,0.2],[0.403059,0.196941]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.625782,0],[0.772945,0.0270554]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.771292,0],[0.795542,0.00445819]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.199714],[0.676285,0.123715]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.171316],[0.693876,0.106124]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.151354],[0.706242,0.0937582]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.126127],[0.721869,0.0781308]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.116393],[0.727899,0.072101]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.104266],[0.735411,0.0645889]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.0540726],[0.766504,0.0334959]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.0436757],[0.772945,0.0270554]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.00719687],[0.795542,0.00445819]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.996482,0],[0.8,0.116393]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.976011,0],[0.8,0.104266]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.89128,0],[0.8,0.0540726]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.873729,0],[0.8,0.0436757]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.812149,0],[0.8,0.00719687]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.132258],[0.997479,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.02131,0],[1,0.132258]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.1453,0],[1.13479,0.0652104]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.194835],[1.19337,0.2]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.141116],[1.12443,0.2]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.0732274],[1.0373,0.2]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.0470325],[1.00369,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.0143984],[1.13479,0.0652104]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.23615,0],[1.27392,0.126083]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.24453,0],[1.28037,0.119634]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.27394,0],[1.30299,0.0970063]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.28046,0],[1.30801,0.0919853]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2961,0],[1.32005,0.0799473]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.34049,0],[1.35421,0.0457923]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.35306,0],[1.36388,0.036123]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.38616,0],[1.38935,0.0106463]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.190564],[1.21357,0.186427]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.174569],[1.22922,0.170779]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.168397],[1.23526,0.164741]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.160707],[1.24278,0.157218]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.128881],[1.27392,0.126083]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.122289],[1.28037,0.119634]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0991591],[1.30299,0.0970063]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0940266],[1.30801,0.0919853]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0817216],[1.32005,0.0799473]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0468085],[1.35421,0.0457923]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0369246],[1.36388,0.036123]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.0108826],[1.38935,0.0106463]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.59993,0],[1.59954,0.00046361]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.58926,0],[1.52569,0.0743058]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.57386,0],[1.41908,0.180924]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.56303,0],[1.4,0.190564]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.54935,0],[1.4,0.174569]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.54407,0],[1.4,0.168397]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.53749,0],[1.4,0.160707]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.51026,0],[1.4,0.128881]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.50462,0],[1.4,0.122289]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.48483,0],[1.4,0.0991591]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.48044,0],[1.4,0.0940266]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.46991,0],[1.4,0.0817216]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.44005,0],[1.4,0.0468085]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.43159,0],[1.4,0.0369246]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.40931,0],[1.4,0.0108826]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,9.46432e-05],[1.59954,0.00046361]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0151691],[1.52569,0.0743058]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0369347],[1.41908,0.180924]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0522348],[1.41433,0.2]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0715707],[1.43863,0.2]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0790316],[1.448,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.0883264],[1.45968,0.2]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.126798],[1.50802,0.2]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.134767],[1.51803,0.2]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.162727],[1.55317,0.2]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.168931],[1.56096,0.2]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.183805],[1.57965,0.2]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.78647,0.0135254],[1.6,9.46432e-05]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.77241,0.0275871],[1.6,0.0151691]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75211,0.0478903],[1.6,0.0369347]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.73784,0.0621625],[1.6,0.0522348]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.7198,0.0801993],[1.6,0.0715707]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.71284,0.0871589],[1.6,0.0790316]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.70417,0.0958292],[1.6,0.0883264]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66828,0.131716],[1.6,0.126798]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66085,0.13915],[1.6,0.134767]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.63477,0.165231],[1.6,0.162727]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62898,0.171018],[1.6,0.168931]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61511,0.184893],[1.6,0.183805]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.79643,0.2],[1.8,0.164529]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.78104,0.2],[1.8,0.0117261]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.76769,0.2],[1.78647,0.0135254]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75505,0.2],[1.77241,0.0275871]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.73679,0.2],[1.75211,0.0478903]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.72396,0.2],[1.73784,0.0621625]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.70773,0.2],[1.7198,0.0801993]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.70148,0.2],[1.71284,0.0871589]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.69368,0.2],[1.70417,0.0958292]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66141,0.2],[1.66828,0.131716]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.65472,0.2],[1.66085,0.13915]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.63127,0.2],[1.63477,0.165231]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62606,0.2],[1.62898,0.171018]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61359,0.2],[1.61511,0.184893]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.80173,0],[1.80453,0.195466]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.80353,0],[1.80631,0.193691]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.80613,0],[1.80887,0.191129]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.80796,0],[1.81067,0.189328]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81027,0],[1.81295,0.187051]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81116,0],[1.81383,0.186173]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81227,0],[1.81492,0.185079]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81686,0],[1.81945,0.18055]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81781,0],[1.82039,0.179611]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.82115,0],[1.82368,0.17632]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.82189,0],[1.82441,0.175589]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.82367,0],[1.82616,0.173838]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.82871,0],[1.83113,0.16887]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.83014,0],[1.83254,0.167463]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8339,0],[1.83624,0.163757]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.83555,0],[1.83787,0.162125]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.84168,0],[1.84392,0.156083]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.84718,0],[1.84934,0.150664]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.85036,0],[1.85248,0.147523]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.86117,0],[1.86314,0.136864]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.86788,0],[1.86975,0.130252]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8851,0],[1.88672,0.11328]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.91748,0],[1.91864,0.0813552]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.9353,0],[1.93622,0.0637816]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.199144],[1.84934,0.150664]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.194993],[1.85248,0.147523]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.180903],[1.86314,0.136864]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.172164],[1.86975,0.130252]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.149731],[1.88672,0.11328]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.107533],[1.91864,0.0813552]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.0843051],[1.93622,0.0637816]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.198977,0.2],[0.184538,0.215462]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.190511,0.2],[0.0565177,0.343482]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.186783,0.2],[0.000146125,0.399854]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.17298,0.2],[0,0.38523]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.160599,0.2],[0,0.371972]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.153424,0.2],[0,0.364289]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.129072,0.2],[0,0.338213]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.113968,0.2],[0,0.322039]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0751934,0.2],[0,0.280519]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.00226058,0.2],[0,0.202421]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.199043,0.4],[0.2,0.398573]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.161584,0.4],[0.2,0.342711]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.153272,0.4],[0.2,0.330315]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.133344,0.4],[0.2,0.300596]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0768018,0.4],[0.2,0.216275]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0607948,0.4],[0.184538,0.215462]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0186194,0.4],[0.0565177,0.343482]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4.81399e-05,0.4],[0.000146125,0.399854]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.33871,0.2],[0.396818,0.203182]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.393442],[0.379826,0.4]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.344258],[0.228531,0.4]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.33407],[0.201352,0.398648]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.298325],[0.254315,0.345685]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.290393],[0.266067,0.333933]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.271377],[0.294243,0.305757]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.217422],[0.374186,0.225814]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.202148],[0.396818,0.203182]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.575187,0.2],[0.551287,0.248713]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.571736,0.2],[0.544512,0.255488]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.560229,0.2],[0.521921,0.278079]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.550251,0.2],[0.502332,0.297668]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.540796,0.2],[0.483769,0.316231]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.527143,0.2],[0.456967,0.343033]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.517546,0.2],[0.438126,0.361874]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.505418,0.2],[0.414316,0.385684]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.500738,0.2],[0.405129,0.394871]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.494908,0.2],[0.4,0.393442]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.470777,0.2],[0.4,0.344258]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.465779,0.2],[0.4,0.33407]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.448241,0.2],[0.4,0.298325]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.44435,0.2],[0.4,0.290393]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.43502,0.2],[0.4,0.271377]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.408548,0.2],[0.4,0.217422]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.401054,0.2],[0.4,0.202148]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.551287,0.248713],[0.6,0.252361]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.544512,0.255488],[0.6,0.259644]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.521921,0.278079],[0.6,0.283927]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.502332,0.297668],[0.6,0.304983]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.483769,0.316231],[0.6,0.324936]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.456967,0.343033],[0.6,0.353746]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.438126,0.361874],[0.6,0.373998]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.414316,0.385684],[0.6,0.399592]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.405129,0.394871],[0.473602,0.4]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.252361],[0.684016,0.2]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.259644],[0.695702,0.2]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.283927],[0.734665,0.2]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.304983],[0.76845,0.2]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.324936],[0.799229,0.200771]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.353746],[0.722764,0.277236]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.373998],[0.669013,0.330987]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.399592],[0.601084,0.398916]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.793507,0.4],[0.8,0.386487]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.760028,0.4],[0.8,0.31682]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.730999,0.4],[0.8,0.256412]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.703489,0.4],[0.799229,0.200771]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66377,0.4],[0.722764,0.277236]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.635849,0.4],[0.669013,0.330987]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.600563,0.4],[0.601084,0.398916]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.800676,0.2],[0.889968,0.310032]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.86775,0.2],[0.926994,0.273006]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.9149,0.2],[0.953023,0.246977]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.974487,0.2],[0.985916,0.214084]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.997479,0.2],[0.998608,0.201392]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.379271],[0.837262,0.362738]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.34946],[0.864324,0.335676]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.321211],[0.889968,0.310032]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.280422],[0.926994,0.273006]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.25175],[0.953023,0.246977]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.215515],[0.985916,0.214084]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.201533],[0.998608,0.201392]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19337,0.2],[1,0.280422]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.12443,0.2],[1,0.25175]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.0373,0.2],[1,0.215515]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.00369,0.2],[1,0.201533]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.205426],[1.10949,0.4]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.261859],[1.13574,0.4]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.333178],[1.16891,0.4]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.360697],[1.18172,0.4]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.39498],[1.19766,0.4]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.205426],[1.25484,0.2]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.261859],[1.35331,0.24669]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.333178],[1.27416,0.32584]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.360697],[1.24362,0.356381]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.39498],[1.20557,0.394429]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.202595],[1.35331,0.24669]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.206994],[1.27416,0.32584]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.208692],[1.24362,0.356381]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.210807],[1.20557,0.394429]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.21956],[1.20894,0.4]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.221373],[1.21086,0.4]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.227734],[1.2176,0.4]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.229146],[1.21909,0.4]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.23253],[1.22267,0.4]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.242132],[1.23284,0.4]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.24485],[1.23572,0.4]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.252013],[1.2433,0.4]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.255167],[1.24664,0.4]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.266843],[1.25901,0.4]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.277316],[1.2701,0.4]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.283386],[1.27652,0.4]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.303986],[1.29834,0.4]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.316764],[1.31187,0.4]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.349565],[1.3466,0.4]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.202595],[1.41433,0.2]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.206994],[1.43863,0.2]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.208692],[1.448,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.210807],[1.45968,0.2]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.21956],[1.50802,0.2]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.221373],[1.51803,0.2]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.227734],[1.55317,0.2]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.229146],[1.56096,0.2]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.23253],[1.57965,0.2]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.242132],[1.59277,0.207226]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.24485],[1.58945,0.210545]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.252013],[1.58071,0.219291]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.255167],[1.57686,0.223142]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.266843],[1.5626,0.237401]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.277316],[1.54981,0.25019]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.283386],[1.5424,0.257602]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.303986],[1.51724,0.282757]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.316764],[1.50164,0.298359]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.349565],[1.46159,0.338413]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.59277,0.207226],[1.6,0.216876]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.58945,0.210545],[1.6,0.224629]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.58071,0.219291],[1.6,0.245055]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.57686,0.223142],[1.6,0.254049]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.5626,0.237401],[1.6,0.287349]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.54981,0.25019],[1.6,0.317218]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.5424,0.257602],[1.6,0.334529]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.51724,0.282757],[1.6,0.393278]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.50164,0.298359],[1.57775,0.4]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.46159,0.338413],[1.5077,0.4]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.79844,0.201558],[1.79643,0.2]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.79173,0.20827],[1.78104,0.2]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.78591,0.21409],[1.76769,0.2]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.78039,0.219605],[1.75505,0.2]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.77243,0.227569],[1.73679,0.2]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.76683,0.233166],[1.72396,0.2]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75976,0.240241],[1.70773,0.2]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75703,0.24297],[1.70148,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75363,0.246371],[1.69368,0.2]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.73955,0.260447],[1.66141,0.2]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.73664,0.263362],[1.65472,0.2]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.72641,0.273592],[1.63127,0.2]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.72414,0.275862],[1.62606,0.2]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.7187,0.281304],[1.61359,0.2]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.70326,0.296744],[1.6,0.216876]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.69888,0.301116],[1.6,0.224629]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.68737,0.312633],[1.6,0.245055]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6823,0.317705],[1.6,0.254049]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66352,0.336481],[1.6,0.287349]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.64668,0.353323],[1.6,0.317218]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.63692,0.363084],[1.6,0.334529]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60379,0.39621],[1.6,0.393278]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.200735],[1.79844,0.201558]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.2039],[1.79173,0.20827]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.206644],[1.78591,0.21409]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.209245],[1.78039,0.219605]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.213],[1.77243,0.227569]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.21564],[1.76683,0.233166]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.218976],[1.75976,0.240241]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.220263],[1.75703,0.24297]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.221867],[1.75363,0.246371]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.228505],[1.73955,0.260447]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.22988],[1.73664,0.263362]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.234703],[1.72641,0.273592]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.235774],[1.72414,0.275862]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.23834],[1.7187,0.281304]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.245621],[1.70326,0.296744]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.247683],[1.69888,0.301116]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.253114],[1.68737,0.312633]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.255506],[1.6823,0.317705]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.26436],[1.66352,0.336481]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.272302],[1.64668,0.353323]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.276905],[1.63692,0.363084]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.292526],[1.60379,0.39621]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.302215],[1.61495,0.4]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.327089],[1.66202,0.4]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.373874],[1.75056,0.4]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.399628],[1.7993,0.4]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.200735],[1.80206,0.2]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.2039],[1.81093,0.2]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.206644],[1.81862,0.2]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.209245],[1.82591,0.2]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.213],[1.83644,0.2]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.21564],[1.84384,0.2]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.218976],[1.85319,0.2]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.220263],[1.8568,0.2]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.221867],[1.86129,0.2]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.228505],[1.8799,0.2]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.22988],[1.88375,0.2]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.234703],[1.89727,0.2]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.235774],[1.90027,0.2]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.23834],[1.90747,0.2]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.245621],[1.92788,0.2]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.247683],[1.93365,0.2]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.253114],[1.94888,0.2]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.255506],[1.95558,0.2]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.26436],[1.9804,0.2]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.272302],[1.99852,0.201475]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.276905],[1.99137,0.208631]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.292526],[1.96708,0.232916]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.302215],[1.95202,0.24798]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.327089],[1.91335,0.286649]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.373874],[1.84062,0.359383]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.399628],[1.80058,0.399422]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.99852,0.201475],[2,0.241935]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.99137,0.208631],[1.99835,0.4]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.96708,0.232916],[1.97318,0.4]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.95202,0.24798],[1.95756,0.4]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.91335,0.286649],[1.91748,0.4]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.84062,0.359383],[1.8421,0.4]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.80058,0.399422],[1.8006,0.4]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.199043,0.4],[0.190323,0.409677]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.161584,0.4],[0,0.579308]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.153272,0.4],[0,0.570084]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.133344,0.4],[0,0.54797]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0768018,0.4],[0,0.485226]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0607948,0.4],[0,0.467463]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0186194,0.4],[0,0.420662]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4.81399e-05,0.4],[0,0.400053]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.400347],[0.190323,0.409677]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.413921],[0.00700828,0.6]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.416934],[0.0101324,0.6]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.424155],[0.0176225,0.6]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.444646],[0.038874,0.6]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.450446],[0.0448903,0.6]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.46573],[0.060742,0.6]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.47246],[0.067722,0.6]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.497377],[0.0935644,0.6]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.519727],[0.116744,0.6]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.532679],[0.130178,0.6]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.576638],[0.175771,0.6]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.397783,0.402217],[0.379826,0.4]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.381157,0.418843],[0.228531,0.4]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.377713,0.422287],[0.2,0.400347]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.36563,0.43437],[0.2,0.413921]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.362949,0.437051],[0.2,0.416934]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.356521,0.443479],[0.2,0.424155]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.338282,0.461718],[0.2,0.444646]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.333119,0.466881],[0.2,0.450446]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.319515,0.480485],[0.2,0.46573]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.313524,0.486476],[0.2,0.47246]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.291346,0.508654],[0.2,0.497377]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.271452,0.528548],[0.2,0.519727]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.259923,0.540077],[0.2,0.532679]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.220794,0.579206],[0.2,0.576638]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.401135],[0.397783,0.402217]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.409647],[0.381157,0.418843]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.41141],[0.377713,0.422287]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.417596],[0.36563,0.43437]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.418969],[0.362949,0.437051]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.42226],[0.356521,0.443479]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.431598],[0.338282,0.461718]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.434241],[0.333119,0.466881]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.441207],[0.319515,0.480485]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.444273],[0.313524,0.486476]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.455628],[0.291346,0.508654]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.465813],[0.271452,0.528548]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.471716],[0.259923,0.540077]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.491749],[0.220794,0.579206]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.504175],[0.203646,0.6]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.536072],[0.269007,0.6]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.59607],[0.391948,0.6]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.598437,0.401563],[0.473602,0.4]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.596406,0.403594],[0.4,0.401135]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.587999,0.412001],[0.4,0.409647]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.586258,0.413742],[0.4,0.41141]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.580148,0.419852],[0.4,0.417596]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.578792,0.421208],[0.4,0.418969]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.575542,0.424458],[0.4,0.42226]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.56632,0.43368],[0.4,0.431598]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.563709,0.436291],[0.4,0.434241]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.55683,0.44317],[0.4,0.441207]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.553801,0.446199],[0.4,0.444273]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.542586,0.457414],[0.4,0.455628]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.532527,0.467473],[0.4,0.465813]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.526698,0.473302],[0.4,0.471716]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.506913,0.493087],[0.4,0.491749]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.494641,0.505359],[0.4,0.504175]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.463137,0.536863],[0.4,0.536072]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.403881,0.596119],[0.4,0.59607]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.598437,0.401563],[0.6,0.406459]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.596406,0.403594],[0.6,0.414853]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.587999,0.412001],[0.6,0.449595]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.586258,0.413742],[0.6,0.456791]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.580148,0.419852],[0.6,0.48204]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.578792,0.421208],[0.6,0.487643]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.575542,0.424458],[0.6,0.501076]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.56632,0.43368],[0.6,0.539188]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.563709,0.436291],[0.6,0.549977]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.55683,0.44317],[0.6,0.578406]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.553801,0.446199],[0.6,0.590924]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.542586,0.457414],[0.588103,0.6]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.532527,0.467473],[0.574833,0.6]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.526698,0.473302],[0.567142,0.6]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.506913,0.493087],[0.541041,0.6]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.494641,0.505359],[0.524852,0.6]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.463137,0.536863],[0.483292,0.6]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.403881,0.596119],[0.40512,0.6]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.79785,0.40215],[0.793507,0.4]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.786768,0.413232],[0.760028,0.4]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.777158,0.422842],[0.730999,0.4]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.768051,0.431949],[0.703489,0.4]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.754902,0.445098],[0.66377,0.4]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.745659,0.454341],[0.635849,0.4]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.733978,0.466022],[0.600563,0.4]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.729471,0.470529],[0.6,0.406459]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.723856,0.476144],[0.6,0.414853]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.700615,0.499385],[0.6,0.449595]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.695801,0.504199],[0.6,0.456791]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.67891,0.52109],[0.6,0.48204]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.675162,0.524838],[0.6,0.487643]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.666176,0.533824],[0.6,0.501076]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.640681,0.559319],[0.6,0.539188]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.633463,0.566537],[0.6,0.549977]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.614446,0.585554],[0.6,0.578406]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.606072,0.593928],[0.6,0.590924]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.79785,0.40215],[0.8,0.403405]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.786768,0.413232],[0.8,0.420958]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.777158,0.422842],[0.8,0.436178]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.768051,0.431949],[0.8,0.450601]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.754902,0.445098],[0.8,0.471427]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.745659,0.454341],[0.8,0.486066]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.733978,0.466022],[0.8,0.504567]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.729471,0.470529],[0.8,0.511705]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.723856,0.476144],[0.8,0.520599]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.700615,0.499385],[0.8,0.557408]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.695801,0.504199],[0.8,0.565033]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.67891,0.52109],[0.8,0.591785]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.675162,0.524838],[0.8,0.597721]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.666176,0.533824],[0.779526,0.6]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.640681,0.559319],[0.710361,0.6]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.633463,0.566537],[0.69078,0.6]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.614446,0.585554],[0.639189,0.6]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.606072,0.593928],[0.616472,0.6]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.403405],[0.865637,0.4]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.420958],[0.988837,0.411163]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.436178],[0.972784,0.427216]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.450601],[0.957572,0.442428]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.471427],[0.935607,0.464393]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.486066],[0.920167,0.479833]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.504567],[0.900654,0.499346]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.511705],[0.893125,0.506875]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.520599],[0.883745,0.516255]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.557408],[0.844922,0.555078]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.565033],[0.83688,0.56312]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.591785],[0.808664,0.591336]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.8,0.597721],[0.802403,0.597597]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.988837,0.411163],[1,0.428125]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.972784,0.427216],[1,0.468571]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.957572,0.442428],[1,0.506899]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.935607,0.464393],[1,0.56224]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.920167,0.479833],[0.999248,0.6]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.900654,0.499346],[0.966894,0.6]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.893125,0.506875],[0.95441,0.6]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.883745,0.516255],[0.938858,0.6]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.844922,0.555078],[0.874484,0.6]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.83688,0.56312],[0.86115,0.6]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.808664,0.591336],[0.814366,0.6]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.802403,0.597597],[0.803985,0.6]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.01898,0.4],[1,0.428125]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.04627,0.4],[1,0.468571]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.07214,0.4],[1,0.506899]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10949,0.4],[1,0.56224]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13574,0.4],[1.00237,0.597629]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.16891,0.4],[1.1044,0.495597]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.18172,0.4],[1.14377,0.456228]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19766,0.4],[1.19282,0.407182]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.57195],[1.15941,0.6]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.546023],[1.1219,0.6]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.521454],[1.08635,0.6]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.485979],[1.03502,0.6]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.461042],[1.00237,0.597629]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.429527],[1.1044,0.495597]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.417367],[1.14377,0.456228]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.402218],[1.19282,0.407182]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.20894,0.4],[1.23354,0.566456]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.21086,0.4],[1.23522,0.564783]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2176,0.4],[1.24109,0.558915]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.21909,0.4],[1.24239,0.557613]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.22267,0.4],[1.24551,0.554491]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.23284,0.4],[1.25437,0.545633]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.23572,0.4],[1.25687,0.543125]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2433,0.4],[1.26348,0.536518]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.24664,0.4],[1.26639,0.533609]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.25901,0.4],[1.27716,0.522837]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2701,0.4],[1.28682,0.513175]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.27652,0.4],[1.29242,0.507576]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.29834,0.4],[1.31143,0.488572]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.31187,0.4],[1.32321,0.476785]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.3466,0.4],[1.35347,0.446527]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.595917],[1.26348,0.536518]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.591742],[1.26639,0.533609]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.576284],[1.27716,0.522837]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.562418],[1.28682,0.513175]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.554383],[1.29242,0.507576]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.527111],[1.31143,0.488572]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.510195],[1.32321,0.476785]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.466771],[1.35347,0.446527]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.57775,0.4],[1.4,0.510195]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.5077,0.4],[1.4,0.466771]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.592114],[1.56881,0.6]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.567123],[1.46997,0.6]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.560048],[1.44198,0.6]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.541406],[1.41074,0.589258]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.533198],[1.42173,0.578272]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.502808],[1.4624,0.537598]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.475548],[1.49889,0.501114]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.45975],[1.52003,0.47997]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.406135],[1.59179,0.408211]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61495,0.4],[1.68072,0.51928]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66202,0.4],[1.71106,0.488939]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.75056,0.4],[1.76813,0.431869]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.7993,0.4],[1.79955,0.400454]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.571937],[1.7887,0.6]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.99913,0.400874],[1.99835,0.4]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.98582,0.414185],[1.97318,0.4]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.97756,0.422441],[1.95756,0.4]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.95636,0.443636],[1.91748,0.4]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.9165,0.483502],[1.8421,0.4]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.89455,0.505447],[1.8006,0.4]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.81322,0.586777],[1.8,0.571937]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.400817],[1.99913,0.400874]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.413254],[1.98582,0.414185]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.420969],[1.97756,0.422441]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.440772],[1.95636,0.443636]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.478022],[1.9165,0.483502]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.498527],[1.89455,0.505447]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.574521],[1.81322,0.586777]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.00700828,0.6],[0.0552438,0.744756]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0101324,0.6],[0.0575871,0.742413]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0176225,0.6],[0.0632051,0.736795]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.038874,0.6],[0.0791451,0.720855]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0448903,0.6],[0.0836577,0.716342]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.060742,0.6],[0.0955475,0.704452]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.067722,0.6],[0.100783,0.699217]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0935644,0.6],[0.120166,0.679834]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.116744,0.6],[0.137553,0.662447]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.130178,0.6],[0.147629,0.652371]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.175771,0.6],[0.181826,0.618174]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.79995],[0.0552438,0.744756]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.796714],[0.0575871,0.742413]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.788954],[0.0632051,0.736795]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.766936],[0.0791451,0.720855]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.760703],[0.0836577,0.716342]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.744279],[0.0955475,0.704452]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.737048],[0.100783,0.699217]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.710273],[0.120166,0.679834]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.686257],[0.137553,0.662447]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.672339],[0.147629,0.652371]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.625103],[0.181826,0.618174]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.203646,0.6],[0.294942,0.705058]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.269007,0.6],[0.329913,0.670087]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.391948,0.6],[0.395692,0.604308]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.796346],[0.28132,0.71868]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.773809],[0.294942,0.705058]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.715953],[0.329913,0.670087]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.607128],[0.395692,0.604308]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.588103,0.6],[0.557763,0.642237]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.574833,0.6],[0.51065,0.68935]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.567142,0.6],[0.483347,0.716653]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.541041,0.6],[0.4,0.796346]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.524852,0.6],[0.4,0.773809]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.483292,0.6],[0.4,0.715953]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.40512,0.6],[0.4,0.607128]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.623129],[0.557763,0.642237]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.648928],[0.51065,0.68935]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.66388],[0.483347,0.716653]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.714623],[0.411279,0.8]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.746098],[0.480851,0.8]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.794783,0.605217],[0.779526,0.6]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.777157,0.622843],[0.710361,0.6]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.772168,0.627832],[0.69078,0.6]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.759021,0.640979],[0.639189,0.6]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.753232,0.646768],[0.616472,0.6]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.731799,0.668201],[0.6,0.623129]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.712574,0.687426],[0.6,0.648928]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.701433,0.698567],[0.6,0.66388]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66362,0.73638],[0.6,0.714623]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.640166,0.759834],[0.6,0.746098]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.794783,0.605217],[0.8,0.606437]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.777157,0.622843],[0.8,0.628183]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.772168,0.627832],[0.8,0.634339]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.759021,0.640979],[0.8,0.650559]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.753232,0.646768],[0.8,0.657702]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.731799,0.668201],[0.8,0.684145]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.712574,0.687426],[0.8,0.707864]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.701433,0.698567],[0.8,0.721611]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66362,0.73638],[0.8,0.768263]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.640166,0.759834],[0.8,0.7972]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.999823,0.600177],[0.999248,0.6]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.992206,0.607794],[0.966894,0.6]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.989266,0.610734],[0.95441,0.6]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.985605,0.614395],[0.938858,0.6]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.970449,0.629551],[0.874484,0.6]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.96731,0.63269],[0.86115,0.6]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.956295,0.643705],[0.814366,0.6]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.953851,0.646149],[0.803985,0.6]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.947991,0.652009],[0.8,0.606437]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.931365,0.668635],[0.8,0.628183]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.926658,0.673342],[0.8,0.634339]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.914257,0.685743],[0.8,0.650559]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.908796,0.691204],[0.8,0.657702]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.888578,0.711422],[0.8,0.684145]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.870443,0.729557],[0.8,0.707864]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.859934,0.740066],[0.8,0.721611]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.824265,0.775735],[0.8,0.768263]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.802141,0.797859],[0.8,0.7972]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.999823,0.600177],[1,0.60032]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.992206,0.607794],[1,0.614103]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.989266,0.610734],[1,0.619421]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.985605,0.614395],[1,0.626047]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.970449,0.629551],[1,0.653469]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.96731,0.63269],[1,0.65915]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.956295,0.643705],[1,0.67908]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.953851,0.646149],[1,0.683502]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.947991,0.652009],[1,0.694105]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.931365,0.668635],[1,0.724188]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.926658,0.673342],[1,0.732704]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.914257,0.685743],[1,0.755143]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.908796,0.691204],[1,0.765024]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.888578,0.711422],[0.998016,0.8]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.870443,0.729557],[0.957476,0.8]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.859934,0.740066],[0.933981,0.8]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.824265,0.775735],[0.854244,0.8]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.802141,0.797859],[0.804786,0.8]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19058,0.60942],[1.15941,0.6]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.18187,0.618127],[1.1219,0.6]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.17362,0.626378],[1.08635,0.6]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.16171,0.638292],[1.03502,0.6]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.15333,0.646667],[1,0.60032]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.14275,0.657251],[1,0.614103]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13867,0.661334],[1,0.619421]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13358,0.666422],[1,0.626047]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.11252,0.68748],[1,0.653469]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10816,0.691842],[1,0.65915]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.09285,0.707146],[1,0.67908]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.08946,0.710542],[1,0.683502]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.08132,0.718684],[1,0.694105]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05822,0.741784],[1,0.724188]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05168,0.748324],[1,0.732704]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.03445,0.765555],[1,0.755143]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.02686,0.773142],[1,0.765024]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19887,0.8],[1.2,0.751786]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19593,0.8],[1.2,0.625969]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.18612,0.8],[1.19058,0.60942]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.17762,0.8],[1.18187,0.618127]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.16956,0.8],[1.17362,0.626378]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.15793,0.8],[1.16171,0.638292]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.14975,0.8],[1.15333,0.646667]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13941,0.8],[1.14275,0.657251]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13542,0.8],[1.13867,0.661334]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13046,0.8],[1.13358,0.666422]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10989,0.8],[1.11252,0.68748]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10563,0.8],[1.10816,0.691842]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.09068,0.8],[1.09285,0.707146]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.08737,0.8],[1.08946,0.710542]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.07942,0.8],[1.08132,0.718684]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05686,0.8],[1.05822,0.741784]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05047,0.8],[1.05168,0.748324]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.03364,0.8],[1.03445,0.765555]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.02623,0.8],[1.02686,0.773142]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.21191,0.6],[1.21744,0.782559]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.22293,0.6],[1.22813,0.771871]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.23336,0.6],[1.23826,0.761742]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.24843,0.6],[1.25288,0.747117]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.25902,0.6],[1.26316,0.736836]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.27241,0.6],[1.27616,0.723844]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.27757,0.6],[1.28117,0.718831]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.28401,0.6],[1.28741,0.712586]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.31064,0.6],[1.31326,0.686735]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.31616,0.6],[1.31862,0.681381]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.33551,0.6],[1.33741,0.662594]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.33981,0.6],[1.34157,0.658425]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.3501,0.6],[1.35157,0.648431]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.37932,0.6],[1.37993,0.620073]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.38759,0.6],[1.38795,0.612045]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.79962],[1.27616,0.723844]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.791539],[1.28117,0.718831]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.781472],[1.28741,0.712586]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.739806],[1.31326,0.686735]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.731175],[1.31862,0.681381]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.700893],[1.33741,0.662594]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.694174],[1.34157,0.658425]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.678064],[1.35157,0.648431]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.632355],[1.37993,0.620073]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.4,0.619415],[1.38795,0.612045]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.56881,0.6],[1.4,0.678064]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.46997,0.6],[1.4,0.632355]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.44198,0.6],[1.4,0.619415]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.64254],[1.59686,0.603137]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60167,0.6],[1.60258,0.797418]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60698,0.6],[1.60786,0.792138]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60848,0.6],[1.60936,0.790643]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61244,0.6],[1.61329,0.786705]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61418,0.6],[1.61503,0.784971]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62063,0.6],[1.62145,0.77855]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62641,0.6],[1.62721,0.772791]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62977,0.6],[1.63055,0.769454]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.64115,0.6],[1.64187,0.758126]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6482,0.6],[1.6489,0.7511]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.66632,0.6],[1.66694,0.733064]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.70041,0.6],[1.70086,0.699139]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.71917,0.6],[1.71954,0.680464]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.7887,0.6],[1.78875,0.611252]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.650355],[1.76901,0.8]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.650355],[1.99405,0.60595]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.99089,0.8],[2,0.78885]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.98451,0.8],[2,0.781048]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.96814,0.8],[2,0.761021]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.93736,0.8],[2,0.723352]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.92041,0.8],[2,0.702616]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.85761,0.8],[2,0.625766]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.83546,0.8],[1.99405,0.60595]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0280134,0.8],[0,0.912373]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.048948,0.8],[0,0.99635]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0754047,0.8],[0.0340301,0.96597]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.085613,0.8],[0.0476284,0.952372]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.0983308,0.8],[0.0645693,0.935431]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.15097,0.8],[0.134689,0.865311]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.161874,0.8],[0.149213,0.850787]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.991382],[0.175654,1]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.973632],[0.125509,1]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.948004],[0.0531073,1]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.929989],[0.00221214,1]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.907221],[0.0340301,0.96597]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.898436],[0.0476284,0.952372]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.887492],[0.0645693,0.935431]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.842193],[0.134689,0.865311]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.2,0.83281],[0.149213,0.850787]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.200058,0.8],[0.26853,0.93147]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.203863,0.8],[0.271031,0.928969]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.212985,0.8],[0.277029,0.922971]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.238865,0.8],[0.294047,0.905953]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.246192,0.8],[0.298865,0.901135]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.265497,0.8],[0.311559,0.888441]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.273998,0.8],[0.317148,0.882852]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.305469,0.8],[0.337842,0.862158]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.333699,0.8],[0.356404,0.843596]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.350059,0.8],[0.367162,0.832838]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.989891],[0.317148,0.882852]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.942462],[0.337842,0.862158]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.899919],[0.356404,0.843596]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.4,0.875263],[0.367162,0.832838]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.411279,0.8],[0.519366,0.880634]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.480851,0.8],[0.549092,0.850908]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.807698],[0.452425,1]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.8512],[0.485809,1]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.875146],[0.504185,1]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.963894],[0.572292,1]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.6,0.995186],[0.596305,1]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.779254,0.820746],[0.6,0.807698]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.738704,0.861296],[0.6,0.8512]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.716383,0.883617],[0.6,0.875146]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.633656,0.966344],[0.6,0.963894]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.604488,0.995512],[0.6,0.995186]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.779254,0.820746],[0.8,0.847293]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.738704,0.861296],[0.8,0.939734]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.716383,0.883617],[0.8,0.99062]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.633656,0.966344],[0.659957,1]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.604488,0.995512],[0.607995,1]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.999446,0.800554],[0.998016,0.8]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.988133,0.811867],[0.957476,0.8]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.981577,0.818423],[0.933981,0.8]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.959325,0.840675],[0.854244,0.8]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.945523,0.854477],[0.804786,0.8]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.910092,0.889908],[0.8,0.847293]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.843448,0.956552],[0.8,0.939734]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.806763,0.993237],[0.8,0.99062]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.999293,1],[1,0.996431]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.993783,1],[1,0.968637]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.992561,1],[1,0.962469]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.98963,1],[1,0.947683]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.981314,1],[1,0.905729]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.978959,1],[1,0.893852]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.972756,1],[1,0.862558]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.970025,1],[1,0.848778]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.959912,1],[0.999446,0.800554]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.950842,1],[0.988133,0.811867]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.945585,1],[0.981577,0.818423]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.927744,1],[0.959325,0.840675]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.916677,1],[0.945523,0.854477]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.88827,1],[0.910092,0.889908]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.834836,1],[0.843448,0.956552]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.805422,1],[0.806763,0.993237]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19887,0.8],[1.19756,0.802438]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.19593,0.8],[1.1912,0.808801]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.18612,0.8],[1.16998,0.830017]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.17762,0.8],[1.15159,0.848412]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.16956,0.8],[1.13415,0.865845]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.15793,0.8],[1.10898,0.891015]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.14975,0.8],[1.09129,0.908709]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13941,0.8],[1.06893,0.93107]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13542,0.8],[1.0603,0.939698]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.13046,0.8],[1.04955,0.950446]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10989,0.8],[1.00506,0.994936]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.10563,0.8],[1,0.996431]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.09068,0.8],[1,0.968637]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.08737,0.8],[1,0.962469]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.07942,0.8],[1,0.947683]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05686,0.8],[1,0.905729]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.05047,0.8],[1,0.893852]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.03364,0.8],[1,0.862558]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.02623,0.8],[1,0.848778]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.801585],[1.19756,0.802438]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.80572],[1.1912,0.808801]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.819509],[1.16998,0.830017]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.831465],[1.15159,0.848412]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.842795],[1.13415,0.865845]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.859154],[1.10898,0.891015]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.870654],[1.09129,0.908709]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.885187],[1.06893,0.93107]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.890794],[1.0603,0.939698]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.89778],[1.04955,0.950446]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.926696],[1.00506,0.994936]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.932685],[1.00771,1]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.9537],[1.06774,1]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.958363],[1.08106,1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.969543],[1.113,1]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.801585],[1.20373,0.8]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.80572],[1.21347,0.8]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.819509],[1.24594,0.8]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.831465],[1.2741,0.8]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.842795],[1.30079,0.8]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.859154],[1.33931,0.8]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.870654],[1.3664,0.8]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.885187],[1.39954,0.800459]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.890794],[1.3898,0.810204]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.89778],[1.37765,0.822346]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.926696],[1.3274,0.8726]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.932685],[1.31699,0.883009]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.9537],[1.28047,0.919532]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.958363],[1.27236,0.927636]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2,0.969543],[1.25293,0.947066]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.39148,1],[1.4,0.971535]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.37156,1],[1.4,0.904924]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.35755,1],[1.4,0.8581]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.33985,1],[1.39954,0.800459]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.33302,1],[1.3898,0.810204]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.32451,1],[1.37765,0.822346]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.28929,1],[1.3274,0.8726]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.28199,1],[1.31699,0.883009]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2564,1],[1.28047,0.919532]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.25072,1],[1.27236,0.927636]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.2371,1],[1.25293,0.947066]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.40076,0.8],[1.48354,0.916461]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.41699,0.8],[1.49302,0.906975]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.43721,0.8],[1.50484,0.895157]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.52089,0.8],[1.55376,0.846242]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.53823,0.8],[1.56389,0.83611]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.59904,0.8],[1.59944,0.80056]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.802084],[1.4459,1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.807462],[1.45009,1]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.822721],[1.46197,1]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.827041],[1.46533,1]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.838423],[1.4742,1]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.843434],[1.4781,1]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.86199],[1.49255,1]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.878633],[1.5055,1]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.888279],[1.51301,1]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.921015],[1.5385,1]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.94132],[1.55431,1]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6,0.993445],[1.5949,1]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60057,0.8],[1.6,0.802084]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60205,0.8],[1.6,0.807462]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60623,0.8],[1.6,0.822721]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.60742,0.8],[1.6,0.827041]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61054,0.8],[1.6,0.838423]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61192,0.8],[1.6,0.843434]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.61701,0.8],[1.6,0.86199]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62157,0.8],[1.6,0.878633]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.62422,0.8],[1.6,0.888279]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.6332,0.8],[1.6,0.921015]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.63877,0.8],[1.6,0.94132]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.65308,0.8],[1.6,0.993445]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.67998,0.8],[1.63459,0.965407]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.69478,0.8],[1.655,0.945]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.74966,0.8],[1.73063,0.869371]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.76901,0.8],[1.7573,0.842705]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.8,0.874194],[1.76357,1]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.99319,0.806808],[1.99089,0.8]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.98843,0.811571],[1.98451,0.8]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.9762,0.823799],[1.96814,0.8]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.9532,0.846799],[1.93736,0.8]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.94054,0.859459],[1.92041,0.8]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.89362,0.906381],[1.85761,0.8]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.87708,0.922925],[1.83546,0.8]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1.83182,0.968183],[1.8,0.874194]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.80285],[1.99319,0.806808]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.804843],[1.98843,0.811571]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.809961],[1.9762,0.823799]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.819588],[1.9532,0.846799]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.824887],[1.94054,0.859459]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.844526],[1.89362,0.906381]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.851451],[1.87708,0.922925]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0.870394],[1.83182,0.968183]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=8.823 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ff2600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ff4d00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ff7300 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ffbf00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ffe600 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#f2ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#a6ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#59ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#0dff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ff1a fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ff40 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ff8c fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ffb3 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ffd9 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00d9ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#00b3ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#008cff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#0040ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#001aff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#0d00ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=0.04 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[0,0]] color=#5900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a field\n", "field = myXtProcess.getRealization()\n", "field.drawMarginal(0)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y0 PDF implementation=class=GraphImplementation name=y0 PDF title=y0 PDF xTitle=y0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=96 dimension=2 data=[[-0.150721,0],[0.0402038,0],[0.0402038,0],[0.0402038,1.26973],[0.422054,1.26973],[0.422054,0],[0.422054,0],[0.422054,0.634867],[0.803904,0.634867],[0.803904,0],[0.803904,0],[0.803904,0.238075],[1.18575,0.238075],[1.18575,0],[1.18575,0],[1.18575,0.0793584],[1.56761,0.0793584],[1.56761,0],[1.56761,0],[1.56761,0.119038],[1.94946,0.119038],[1.94946,0],[1.94946,0],[1.94946,0],[2.33131,0],[2.33131,0],[2.33131,0],[2.33131,0.0793584],[2.71316,0.0793584],[2.71316,0],[2.71316,0],[2.71316,0.0793584],[3.09501,0.0793584],[3.09501,0],[3.09501,0],[3.09501,0.0396792],[3.47686,0.0396792],[3.47686,0],[3.47686,0],[3.47686,0],[3.85871,0],[3.85871,0],[3.85871,0],[3.85871,0.0396792],[4.24056,0.0396792],[4.24056,0],[4.24056,0],[4.24056,0],[4.62241,0],[4.62241,0],[4.62241,0],[4.62241,0],[5.00426,0],[5.00426,0],[5.00426,0],[5.00426,0],[5.38611,0],[5.38611,0],[5.38611,0],[5.38611,0],[5.76796,0],[5.76796,0],[5.76796,0],[5.76796,0],[6.14981,0],[6.14981,0],[6.14981,0],[6.14981,0],[6.53166,0],[6.53166,0],[6.53166,0],[6.53166,0],[6.91351,0],[6.91351,0],[6.91351,0],[6.91351,0],[7.29536,0],[7.29536,0],[7.29536,0],[7.29536,0],[7.67721,0],[7.67721,0],[7.67721,0],[7.67721,0],[8.05906,0],[8.05906,0],[8.05906,0],[8.05906,0],[8.44091,0],[8.44091,0],[8.44091,0],[8.44091,0.0396792],[8.82276,0.0396792],[8.82276,0],[8.82276,0],[9.01369,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw values\n", "marginal = ot.HistogramFactory().build(field.getValues())\n", "marginal.drawPDF()" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Build the transformed field through Box-Cox\n", "myModelTransform = ot.BoxCoxFactory().build(field)\n", "myStabilizedField = myModelTransform(field)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=y0 PDF implementation=class=GraphImplementation name=y0 PDF title=y0 PDF xTitle=y0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-4.26072,0],[-3.89695,0],[-3.89695,0],[-3.89695,0.0208253],[-3.16939,0.0208253],[-3.16939,0],[-3.16939,0],[-3.16939,0.104127],[-2.44184,0.104127],[-2.44184,0],[-2.44184,0],[-2.44184,0.145777],[-1.71429,0.145777],[-1.71429,0],[-1.71429,0],[-1.71429,0.333205],[-0.986737,0.333205],[-0.986737,0],[-0.986737,0],[-0.986737,0.395681],[-0.259184,0.395681],[-0.259184,0],[-0.259184,0],[-0.259184,0.187428],[0.468368,0.187428],[0.468368,0],[0.468368,0],[0.468368,0.145777],[1.19592,0.145777],[1.19592,0],[1.19592,0],[1.19592,0.0416506],[1.92347,0.0416506],[1.92347,0],[1.92347,0],[2.28725,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw values\n", "marginal = ot.HistogramFactory().build(myStabilizedField.getValues())\n", "marginal.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/composed_copula.ipynb000066400000000000000000000034011307543307100302500ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Assemble copulas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to merge a collection of independent copulas into one.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a collection of copulas\n", "R = ot.CorrelationMatrix(3)\n", "R[0, 1] = 0.5\n", "R[0, 2] = 0.25\n", "collection = [ot.FrankCopula(3.0), ot.NormalCopula(R), ot.ClaytonCopula(2.0)]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ComposedCopula(FrankCopula(theta = 3), NormalCopula(R = [[ 1 0.5 0.25 ]\n", " [ 0.5 1 0 ]\n", " [ 0.25 0 1 ]]), ClaytonCopula(theta = 2))\n" ] } ], "source": [ "# merge the copulas\n", "copula = ot.ComposedCopula(collection)\n", "print(copula)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/composed_distribution.ipynb000066400000000000000000003611171307543307100315170ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a composed distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a multidimensional distribution from a copula and marginal distributions.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NormalCopula(R = [[ 1 0.25 ]\n", " [ 0.25 1 ]])\n" ] } ], "source": [ "# create the copula\n", "R = ot.CorrelationMatrix(2)\n", "R[0, 1] = 0.25\n", "copula = ot.NormalCopula(R)\n", "print(copula)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the marginals\n", "marginals = [ot.Normal(), ot.Gumbel()]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the composed distribution\n", "distribution = ot.ComposedDistribution(marginals, copula)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.73116],[-3.67286],[-3.61456],[-3.55626],[-3.49796],[-3.43966],[-3.38136],[-3.32306],[-3.26477],[-3.20647],[-3.14817],[-3.08987],[-3.03157],[-2.97327],[-2.91497],[-2.85667],[-2.79837],[-2.74007],[-2.68177],[-2.62347],[-2.56517],[-2.50687],[-2.44857],[-2.39027],[-2.33198],[-2.27368],[-2.21538],[-2.15708],[-2.09878],[-2.04048],[-1.98218],[-1.92388],[-1.86558],[-1.80728],[-1.74898],[-1.69068],[-1.63238],[-1.57408],[-1.51578],[-1.45748],[-1.39919],[-1.34089],[-1.28259],[-1.22429],[-1.16599],[-1.10769],[-1.04939],[-0.991089],[-0.93279],[-0.874491],[-0.816191],[-0.757892],[-0.699593],[-0.641293],[-0.582994],[-0.524694],[-0.466395],[-0.408096],[-0.349796],[-0.291497],[-0.233198],[-0.174898],[-0.116599],[-0.0582994],[0],[0.0582994],[0.116599],[0.174898],[0.233198],[0.291497],[0.349796],[0.408096],[0.466395],[0.524694],[0.582994],[0.641293],[0.699593],[0.757892],[0.816191],[0.874491],[0.93279],[0.991089],[1.04939],[1.10769],[1.16599],[1.22429],[1.28259],[1.34089],[1.39919],[1.45748],[1.51578],[1.57408],[1.63238],[1.69068],[1.74898],[1.80728],[1.86558],[1.92388],[1.98218],[2.04048],[2.09878],[2.15708],[2.21538],[2.27368],[2.33198],[2.39027],[2.44857],[2.50687],[2.56517],[2.62347],[2.68177],[2.74007],[2.79837],[2.85667],[2.91497],[2.97327],[3.03157],[3.08987],[3.14817],[3.20647],[3.26477],[3.32306],[3.38136],[3.43966],[3.49796],[3.55626],[3.61456],[3.67286],[3.73116]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.47309],[-3.4068],[-3.34052],[-3.27423],[-3.20795],[-3.14166],[-3.07538],[-3.00909],[-2.94281],[-2.87652],[-2.81024],[-2.74395],[-2.67766],[-2.61138],[-2.54509],[-2.47881],[-2.41252],[-2.34624],[-2.27995],[-2.21367],[-2.14738],[-2.0811],[-2.01481],[-1.94852],[-1.88224],[-1.81595],[-1.74967],[-1.68338],[-1.6171],[-1.55081],[-1.48453],[-1.41824],[-1.35196],[-1.28567],[-1.21938],[-1.1531],[-1.08681],[-1.02053],[-0.954243],[-0.887957],[-0.821672],[-0.755386],[-0.689101],[-0.622815],[-0.55653],[-0.490245],[-0.423959],[-0.357674],[-0.291388],[-0.225103],[-0.158817],[-0.0925318],[-0.0262464],[0.0400391],[0.106325],[0.17261],[0.238895],[0.305181],[0.371466],[0.437752],[0.504037],[0.570323],[0.636608],[0.702894],[0.769179],[0.835464],[0.90175],[0.968035],[1.03432],[1.10061],[1.16689],[1.23318],[1.29946],[1.36575],[1.43203],[1.49832],[1.5646],[1.63089],[1.69718],[1.76346],[1.82975],[1.89603],[1.96232],[2.0286],[2.09489],[2.16117],[2.22746],[2.29374],[2.36003],[2.42632],[2.4926],[2.55889],[2.62517],[2.69146],[2.75774],[2.82403],[2.89031],[2.9566],[3.02288],[3.08917],[3.15546],[3.22174],[3.28803],[3.35431],[3.4206],[3.48688],[3.55317],[3.61945],[3.68574],[3.75202],[3.81831],[3.8846],[3.95088],[4.01717],[4.08345],[4.14974],[4.21602],[4.28231],[4.34859],[4.41488],[4.48116],[4.54745],[4.61374],[4.68002],[4.74631],[4.81259],[4.87888],[4.94516],[5.01145]] levels=class=Point name=Unnamed dimension=10 values=[6.8941e-11,3.63639e-06,7.30857e-05,0.000301245,0.000979433,0.00261861,0.00586952,0.0137594,0.0339807,0.0901377] labels=[6.8941e-11,3.63639e-06,7.30857e-05,0.000301245,0.000979433,0.00261861,0.00586952,0.0137594,0.0339807,0.0901377] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[2.27667e-14],[2.54463e-14],[2.83384e-14],...,[2.27622e-05],[1.88593e-05],[1.55692e-05]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/conditional_distribution.ipynb000066400000000000000000001254541307543307100322130ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a conditional distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a conditional distribution in the form\n", "\n", "$$ \\underline{X}|\\underline{\\Theta}$$\n", "\n", "with X conditioned by the random variable Theta obtained with the random variable Y through a function f\n", "\n", "$$\\underline{\\Theta}=f(\\underline{Y})$$\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create the Y distribution\n", "YDist = ot.Normal(0.0, 1.0)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create Theta=f(y)\n", "f = ot.SymbolicFunction(['y'], ['y', '0.1+y^2'])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the X|Theta distribution\n", "XgivenThetaDist = ot.Normal()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y]->[y,0.1+y^2], Y~Normal(mu = 0, sigma = 1))\n" ] } ], "source": [ "# create the distribution\n", "XDist = ot.ConditionalDistribution(XgivenThetaDist, YDist, f)\n", "print(XDist)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-3.9324,0.0132718],[-3.87095,0.0137481],[-3.80951,0.0142458],[-3.74807,0.0147661],[-3.68662,0.0153103],[-3.62518,0.0158797],[-3.56374,0.0164759],[-3.50229,0.0171005],[-3.44085,0.017755],[-3.3794,0.0184415],[-3.31796,0.0191617],[-3.25652,0.019918],[-3.19507,0.0207125],[-3.13363,0.0215477],[-3.07219,0.0224263],[-3.01074,0.0233512],[-2.9493,0.0243256],[-2.88785,0.0253528],[-2.82641,0.0264366],[-2.76497,0.027581],[-2.70352,0.0287904],[-2.64208,0.0300696],[-2.58064,0.0314239],[-2.51919,0.0328592],[-2.45775,0.0343816],[-2.39631,0.0359983],[-2.33486,0.0377169],[-2.27342,0.039546],[-2.21197,0.041495],[-2.15053,0.0435744],[-2.08909,0.0457958],[-2.02764,0.0481724],[-1.9662,0.0507186],[-1.90476,0.0534509],[-1.84331,0.0563876],[-1.78187,0.0595496],[-1.72042,0.0629604],[-1.65898,0.0666469],[-1.59754,0.0706397],[-1.53609,0.0749741],[-1.47465,0.0796902],[-1.41321,0.0848346],[-1.35176,0.0904612],[-1.29032,0.0966332],[-1.22887,0.103425],[-1.16743,0.110925],[-1.10599,0.119236],[-1.04454,0.128481],[-0.9831,0.138805],[-0.921656,0.150388],[-0.860212,0.163449],[-0.798768,0.178255],[-0.737325,0.195125],[-0.675881,0.214439],[-0.614437,0.236684],[-0.552993,0.262477],[-0.49155,0.292513],[-0.430106,0.327541],[-0.368662,0.368491],[-0.307219,0.416387],[-0.245775,0.471827],[-0.184331,0.534175],[-0.122887,0.598335],[-0.0614437,0.650077],[2.22045e-15,0.670372],[0.0614437,0.650077],[0.122887,0.598335],[0.184331,0.534175],[0.245775,0.471827],[0.307219,0.416387],[0.368662,0.368491],[0.430106,0.327541],[0.49155,0.292513],[0.552993,0.262477],[0.614437,0.236684],[0.675881,0.214439],[0.737325,0.195125],[0.798768,0.178255],[0.860212,0.163449],[0.921656,0.150388],[0.9831,0.138805],[1.04454,0.128481],[1.10599,0.119236],[1.16743,0.110925],[1.22887,0.103425],[1.29032,0.0966332],[1.35176,0.0904612],[1.41321,0.0848346],[1.47465,0.0796902],[1.53609,0.0749741],[1.59754,0.0706397],[1.65898,0.0666469],[1.72042,0.0629604],[1.78187,0.0595496],[1.84331,0.0563876],[1.90476,0.0534509],[1.9662,0.0507186],[2.02764,0.0481724],[2.08909,0.0457958],[2.15053,0.0435744],[2.21197,0.041495],[2.27342,0.039546],[2.33486,0.0377169],[2.39631,0.0359983],[2.45775,0.0343816],[2.51919,0.0328592],[2.58064,0.0314239],[2.64208,0.0300696],[2.70352,0.0287904],[2.76497,0.027581],[2.82641,0.0264366],[2.88785,0.0253528],[2.9493,0.0243256],[3.01074,0.0233512],[3.07219,0.0224263],[3.13363,0.0215477],[3.19507,0.0207125],[3.25652,0.019918],[3.31796,0.0191617],[3.3794,0.0184415],[3.44085,0.017755],[3.50229,0.0171005],[3.56374,0.0164759],[3.62518,0.0158797],[3.68662,0.0153103],[3.74807,0.0147661],[3.80951,0.0142458],[3.87095,0.0137481],[3.9324,0.0132718]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "XDist.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/conditional_random_vector.ipynb000066400000000000000000000052321307543307100323250ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a conditional random vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a conditional random vector\n", "\n", "$$\\underline{X}|\\underline{\\Theta}$$\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the random vector Theta (parameters of X)\n", "gammaDist = ot.Uniform(1.0, 2.0)\n", "alphaDist = ot.Uniform(0.0, 0.1)\n", "thetaDist = ot.ComposedDistribution([gammaDist, alphaDist])\n", "thetaRV = ot.RandomVector(thetaDist)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the XgivenTheta distribution\n", "XgivenThetaDist = ot.Exponential()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create the X distribution\n", "XDist = ot.ConditionalRandomVector(XgivenThetaDist, thetaRV)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
    X0
    00.24533256712233908
    10.6896032414525822
    20.9303475410201311
    31.501481272030759
    40.6301145017187071
    " ], "text/plain": [ "class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[X0] data=[[0.245333],[0.689603],[0.930348],[1.50148],[0.630115]]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw a sample\n", "XDist.getSample(5)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/create_copula.ipynb000066400000000000000000000026541307543307100277130ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a copula" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a Normal copula from a correlation matrix.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NormalCopula(R = [[ 1 0.25 0 ]\n", " [ 0.25 1 0.25 ]\n", " [ 0 0.25 1 ]])\n" ] } ], "source": [ "# create the distribution\n", "R = ot.CorrelationMatrix(3)\n", "R[0, 1] = 0.25\n", "R[1, 2] = 0.25\n", "copula = ot.NormalCopula(R)\n", "print(copula)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/distribution_transformation.ipynb000066400000000000000000001032111307543307100327410ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Transform a distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to use distribution algebra." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create some distribution\n", "distribution1 = ot.Uniform(0,1)\n", "distribution2 = ot.Uniform(0,2)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RandomMixture(Trapezoidal(a = 0, b = 1, c = 2, d = 3))\n" ] } ], "source": [ "# sum of distributions\n", "distribution = distribution1 + distribution2\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-1.11145,0],[-1.07065,0],[-1.02984,0],[-0.98904,0],[-0.948236,0],[-0.907432,0],[-0.866628,0],[-0.825824,0],[-0.78502,0],[-0.744217,0],[-0.703413,0],[-0.662609,0],[-0.621805,0],[-0.581001,0],[-0.540197,0],[-0.499393,0],[-0.458589,0],[-0.417785,0],[-0.376981,0],[-0.336177,0],[-0.295373,0],[-0.254569,0],[-0.213765,0],[-0.172961,0],[-0.132157,0],[-0.0913536,0],[-0.0505496,0],[-0.00974568,0],[0.0310583,0.0155291],[0.0718622,0.0359311],[0.112666,0.0563331],[0.15347,0.076735],[0.194274,0.097137],[0.235078,0.117539],[0.275882,0.137941],[0.316686,0.158343],[0.35749,0.178745],[0.398294,0.199147],[0.439098,0.219549],[0.479902,0.239951],[0.520706,0.260353],[0.561509,0.280755],[0.602313,0.301157],[0.643117,0.321559],[0.683921,0.341961],[0.724725,0.362363],[0.765529,0.382765],[0.806333,0.403167],[0.847137,0.423569],[0.887941,0.44397],[0.928745,0.464372],[0.969549,0.484774],[1.01035,0.5],[1.05116,0.5],[1.09196,0.5],[1.13276,0.5],[1.17357,0.5],[1.21437,0.5],[1.25518,0.5],[1.29598,0.5],[1.33678,0.5],[1.37759,0.5],[1.41839,0.5],[1.4592,0.5],[1.5,0.5],[1.5408,0.5],[1.58161,0.5],[1.62241,0.5],[1.66322,0.5],[1.70402,0.5],[1.74482,0.5],[1.78563,0.5],[1.82643,0.5],[1.86724,0.5],[1.90804,0.5],[1.94884,0.5],[1.98965,0.5],[2.03045,0.484774],[2.07126,0.464372],[2.11206,0.44397],[2.15286,0.423569],[2.19367,0.403167],[2.23447,0.382765],[2.27527,0.362363],[2.31608,0.341961],[2.35688,0.321559],[2.39769,0.301157],[2.43849,0.280755],[2.47929,0.260353],[2.5201,0.239951],[2.5609,0.219549],[2.60171,0.199147],[2.64251,0.178745],[2.68331,0.158343],[2.72412,0.137941],[2.76492,0.117539],[2.80573,0.097137],[2.84653,0.076735],[2.88733,0.0563331],[2.92814,0.0359311],[2.96894,0.0155291],[3.00975,0],[3.05055,0],[3.09135,0],[3.13216,0],[3.17296,0],[3.21377,0],[3.25457,0],[3.29537,0],[3.33618,0],[3.37698,0],[3.41779,0],[3.45859,0],[3.49939,0],[3.5402,0],[3.581,0],[3.6218,0],[3.66261,0],[3.70341,0],[3.74422,0],[3.78502,0],[3.82582,0],[3.86663,0],[3.90743,0],[3.94824,0],[3.98904,0],[4.02984,0],[4.07065,0],[4.11145,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/draw_1d_distribution.ipynb000066400000000000000000002376151307543307100312340ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Draw 1-d distribution graphs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to draw PDF and CDF of an unidimensional distribution." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gumbel(alpha = 2.2, beta = 0.6)\n" ] } ], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# assume an 1-d distribution\n", "distribution = ot.Gumbel(2.2, 0.6)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-1.1431,8.06165e-19],[-1.11169,1.65474e-17],[-1.08027,2.76313e-16],[-1.04886,3.80557e-15],[-1.01744,4.37899e-14],[-0.98603,4.26065e-13],[-0.954616,3.54479e-12],[-0.923202,2.54835e-11],[-0.891787,1.59851e-10],[-0.860373,8.82911e-10],[-0.828959,4.33063e-09],[-0.797544,1.90135e-08],[-0.76613,7.52774e-08],[-0.734716,2.70618e-07],[-0.703301,8.89069e-07],[-0.671887,2.68543e-06],[-0.640473,7.49948e-06],[-0.609058,1.94652e-05],[-0.577644,4.7187e-05],[-0.54623,0.000107325],[-0.514815,0.000230008],[-0.483401,0.000466311],[-0.451987,0.000897652],[-0.420573,0.00164643],[-0.389158,0.00288656],[-0.357744,0.00485212],[-0.32633,0.00784181],[-0.294915,0.0122173],[-0.263501,0.0183938],[-0.232087,0.0268223],[-0.200672,0.0379645],[-0.169258,0.0522612],[-0.137844,0.0700983],[-0.106429,0.0917731],[-0.075015,0.117464],[-0.0436007,0.147209],[-0.0121864,0.180889],[0.0192279,0.218228],[0.0506423,0.258799],[0.0820566,0.30204],[0.113471,0.347281],[0.144885,0.393774],[0.1763,0.440721],[0.207714,0.487315],[0.239128,0.532767],[0.270542,0.576334],[0.301957,0.617344],[0.333371,0.655213],[0.364785,0.689457],[0.3962,0.719697],[0.427614,0.745664],[0.459028,0.767192],[0.490443,0.784216],[0.521857,0.796758],[0.553271,0.80492],[0.584686,0.80887],[0.6161,0.808833],[0.647514,0.805074],[0.678929,0.797892],[0.710343,0.787603],[0.741757,0.774538],[0.773172,0.75903],[0.804586,0.741409],[0.836,0.721993],[0.867415,0.70109],[0.898829,0.678989],[0.930243,0.655957],[0.961657,0.632245],[0.993072,0.608077],[1.02449,0.583657],[1.0559,0.559166],[1.08731,0.534766],[1.11873,0.510594],[1.15014,0.486771],[1.18156,0.463399],[1.21297,0.440564],[1.24439,0.418334],[1.2758,0.396766],[1.30721,0.375904],[1.33863,0.35578],[1.37004,0.336417],[1.40146,0.317828],[1.43287,0.300021],[1.46429,0.282994],[1.4957,0.266744],[1.52712,0.251259],[1.55853,0.236526],[1.58994,0.222528],[1.62136,0.209245],[1.65277,0.196656],[1.68419,0.184737],[1.7156,0.173464],[1.74702,0.162812],[1.77843,0.152755],[1.80984,0.143269],[1.84126,0.134327],[1.87267,0.125903],[1.90409,0.117974],[1.9355,0.110514],[1.96692,0.1035],[1.99833,0.0969076],[2.02974,0.0907154],[2.06116,0.0849014],[2.09257,0.0794447],[2.12399,0.0743255],[2.1554,0.0695244],[2.18682,0.0650234],[2.21823,0.0608049],[2.24964,0.0568524],[2.28106,0.05315],[2.31247,0.0496829],[2.34389,0.0464368],[2.3753,0.0433983],[2.40672,0.0405548],[2.43813,0.0378941],[2.46954,0.0354051],[2.50096,0.0330769],[2.53237,0.0308996],[2.56379,0.0288637],[2.5952,0.0269602],[2.62662,0.0251807],[2.65803,0.0235174],[2.68944,0.0219628],[2.72086,0.02051],[2.75227,0.0191524],[2.78369,0.0178839],[2.8151,0.0166988],[2.84652,0.0155917],[2.87793,0.0145575]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()\n", "# IMPORTANT: note that this command just generates the graph data\n", "# and is only drawn in the context of Jupyter notebooks.\n", "# To plot from a script, see the viewer module." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-1.1431,7.91695e-21],[-1.11169,1.74132e-19],[-1.08027,3.11576e-18],[-1.04886,4.59831e-17],[-1.01744,5.66979e-16],[-0.98603,5.91132e-15],[-0.954616,5.27004e-14],[-0.923202,4.05972e-13],[-0.891787,2.72878e-12],[-0.860373,1.61504e-11],[-0.828959,8.48855e-11],[-0.797544,3.99355e-10],[-0.76613,1.69424e-09],[-0.734716,6.52652e-09],[-0.703301,2.29761e-08],[-0.671887,7.43652e-08],[-0.640473,2.22537e-07],[-0.609058,6.18934e-07],[-0.577644,1.60776e-06],[-0.54623,3.91846e-06],[-0.514815,8.99856e-06],[-0.483401,1.95488e-05],[-0.451987,4.03243e-05],[-0.420573,7.9253e-05],[-0.389158,0.000148891],[-0.357744,0.000268185],[-0.32633,0.000464445],[-0.294915,0.000775367],[-0.263501,0.00125089],[-0.232087,0.0019546],[-0.200672,0.00296452],[-0.169258,0.00437291],[-0.137844,0.00628512],[-0.106429,0.00881732],[-0.075015,0.0120932],[-0.0436007,0.0162399],[-0.0121864,0.0213834],[0.0192279,0.0276433],[0.0506423,0.0351282],[0.0820566,0.0439313],[0.113471,0.054126],[0.144885,0.0657636],[0.1763,0.078871],[0.207714,0.0934498],[0.239128,0.109476],[0.270542,0.126903],[0.301957,0.14566],[0.333371,0.165657],[0.364785,0.186788],[0.3962,0.208933],[0.427614,0.231961],[0.459028,0.255735],[0.490443,0.280115],[0.521857,0.304959],[0.553271,0.330129],[0.584686,0.355487],[0.6161,0.380907],[0.647514,0.406266],[0.678929,0.431453],[0.710343,0.456364],[0.741757,0.480908],[0.773172,0.505002],[0.804586,0.528575],[0.836,0.551565],[0.867415,0.573921],[0.898829,0.595601],[0.930243,0.616571],[0.961657,0.636807],[0.993072,0.656289],[1.02449,0.675009],[1.0559,0.692959],[1.08731,0.710141],[1.11873,0.72656],[1.15014,0.742225],[1.18156,0.757148],[1.21297,0.771345],[1.24439,0.784834],[1.2758,0.797635],[1.30721,0.80977],[1.33863,0.821261],[1.37004,0.832131],[1.40146,0.842405],[1.43287,0.852108],[1.46429,0.861263],[1.4957,0.869896],[1.52712,0.878031],[1.55853,0.88569],[1.58994,0.892899],[1.62136,0.899679],[1.65277,0.906053],[1.68419,0.912042],[1.7156,0.917666],[1.74702,0.922947],[1.77843,0.927902],[1.80984,0.93255],[1.84126,0.936909],[1.87267,0.940995],[1.90409,0.944824],[1.9355,0.948412],[1.96692,0.951773],[1.99833,0.954919],[2.02974,0.957865],[2.06116,0.960623],[2.09257,0.963203],[2.12399,0.965618],[2.1554,0.967876],[2.18682,0.969989],[2.21823,0.971965],[2.24964,0.973812],[2.28106,0.975539],[2.31247,0.977154],[2.34389,0.978663],[2.3753,0.980074],[2.40672,0.981392],[2.43813,0.982624],[2.46954,0.983774],[2.50096,0.98485],[2.53237,0.985854],[2.56379,0.986793],[2.5952,0.987669],[2.62662,0.988488],[2.65803,0.989252],[2.68944,0.989966],[2.72086,0.990633],[2.75227,0.991256],[2.78369,0.991838],[2.8151,0.992381],[2.84652,0.992888],[2.87793,0.993361]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw CDF\n", "distribution.drawCDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/draw_2d_distribution.ipynb000066400000000000000000006434661307543307100312420ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Draw 2-d distribution graphs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to draw PDF and CDF of a bidimensional distribution." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Normal(mu = [0,2], sigma = [1,0.6], R = [[ 1 0 ]\n", " [ 0 1 ]])\n" ] } ], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# assume a 2-d distribution\n", "distribution = ot.Normal([0.0, 2.0], [1.0, 0.6], ot.CorrelationMatrix(2))\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.73116],[-3.67286],[-3.61456],[-3.55626],[-3.49796],[-3.43966],[-3.38136],[-3.32306],[-3.26477],[-3.20647],[-3.14817],[-3.08987],[-3.03157],[-2.97327],[-2.91497],[-2.85667],[-2.79837],[-2.74007],[-2.68177],[-2.62347],[-2.56517],[-2.50687],[-2.44857],[-2.39027],[-2.33198],[-2.27368],[-2.21538],[-2.15708],[-2.09878],[-2.04048],[-1.98218],[-1.92388],[-1.86558],[-1.80728],[-1.74898],[-1.69068],[-1.63238],[-1.57408],[-1.51578],[-1.45748],[-1.39919],[-1.34089],[-1.28259],[-1.22429],[-1.16599],[-1.10769],[-1.04939],[-0.991089],[-0.93279],[-0.874491],[-0.816191],[-0.757892],[-0.699593],[-0.641293],[-0.582994],[-0.524694],[-0.466395],[-0.408096],[-0.349796],[-0.291497],[-0.233198],[-0.174898],[-0.116599],[-0.0582994],[0],[0.0582994],[0.116599],[0.174898],[0.233198],[0.291497],[0.349796],[0.408096],[0.466395],[0.524694],[0.582994],[0.641293],[0.699593],[0.757892],[0.816191],[0.874491],[0.93279],[0.991089],[1.04939],[1.10769],[1.16599],[1.22429],[1.28259],[1.34089],[1.39919],[1.45748],[1.51578],[1.57408],[1.63238],[1.69068],[1.74898],[1.80728],[1.86558],[1.92388],[1.98218],[2.04048],[2.09878],[2.15708],[2.21538],[2.27368],[2.33198],[2.39027],[2.44857],[2.50687],[2.56517],[2.62347],[2.68177],[2.74007],[2.79837],[2.85667],[2.91497],[2.97327],[3.03157],[3.08987],[3.14817],[3.20647],[3.26477],[3.32306],[3.38136],[3.43966],[3.49796],[3.55626],[3.61456],[3.67286],[3.73116]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-0.238696],[-0.203716],[-0.168737],[-0.133757],[-0.0987776],[-0.063798],[-0.0288184],[0.00616127],[0.0411409],[0.0761205],[0.1111],[0.14608],[0.181059],[0.216039],[0.251019],[0.285998],[0.320978],[0.355958],[0.390937],[0.425917],[0.460896],[0.495876],[0.530856],[0.565835],[0.600815],[0.635795],[0.670774],[0.705754],[0.740733],[0.775713],[0.810693],[0.845672],[0.880652],[0.915632],[0.950611],[0.985591],[1.02057],[1.05555],[1.09053],[1.12551],[1.16049],[1.19547],[1.23045],[1.26543],[1.30041],[1.33539],[1.37037],[1.40535],[1.44033],[1.47531],[1.51029],[1.54526],[1.58024],[1.61522],[1.6502],[1.68518],[1.72016],[1.75514],[1.79012],[1.8251],[1.86008],[1.89506],[1.93004],[1.96502],[2],[2.03498],[2.06996],[2.10494],[2.13992],[2.1749],[2.20988],[2.24486],[2.27984],[2.31482],[2.3498],[2.38478],[2.41976],[2.45474],[2.48971],[2.52469],[2.55967],[2.59465],[2.62963],[2.66461],[2.69959],[2.73457],[2.76955],[2.80453],[2.83951],[2.87449],[2.90947],[2.94445],[2.97943],[3.01441],[3.04939],[3.08437],[3.11935],[3.15433],[3.18931],[3.22429],[3.25927],[3.29425],[3.32923],[3.36421],[3.39919],[3.43416],[3.46914],[3.50412],[3.5391],[3.57408],[3.60906],[3.64404],[3.67902],[3.714],[3.74898],[3.78396],[3.81894],[3.85392],[3.8889],[3.92388],[3.95886],[3.99384],[4.02882],[4.0638],[4.09878],[4.13376],[4.16874],[4.20372],[4.2387]] levels=class=Point name=Unnamed dimension=10 values=[1.05908e-05,0.000102206,0.000310042,0.000760515,0.0018655,0.00460717,0.0113782,0.0280527,0.0688117,0.169078] labels=[1.05908e-05,0.000102206,0.000310042,0.000760515,0.0018655,0.00460717,0.0113782,0.0280527,0.0688117,0.169078] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[2.38569e-07],[2.96037e-07],[3.66101e-07],...,[3.66101e-07],[2.96037e-07],[2.38569e-07]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-CDF implementation=class=GraphImplementation name=[X0,X1] iso-CDF title=[X0,X1] iso-CDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=[X0,X1] iso-CDF implementation=class=Contour name=[X0,X1] iso-CDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-3.73116],[-3.67286],[-3.61456],[-3.55626],[-3.49796],[-3.43966],[-3.38136],[-3.32306],[-3.26477],[-3.20647],[-3.14817],[-3.08987],[-3.03157],[-2.97327],[-2.91497],[-2.85667],[-2.79837],[-2.74007],[-2.68177],[-2.62347],[-2.56517],[-2.50687],[-2.44857],[-2.39027],[-2.33198],[-2.27368],[-2.21538],[-2.15708],[-2.09878],[-2.04048],[-1.98218],[-1.92388],[-1.86558],[-1.80728],[-1.74898],[-1.69068],[-1.63238],[-1.57408],[-1.51578],[-1.45748],[-1.39919],[-1.34089],[-1.28259],[-1.22429],[-1.16599],[-1.10769],[-1.04939],[-0.991089],[-0.93279],[-0.874491],[-0.816191],[-0.757892],[-0.699593],[-0.641293],[-0.582994],[-0.524694],[-0.466395],[-0.408096],[-0.349796],[-0.291497],[-0.233198],[-0.174898],[-0.116599],[-0.0582994],[0],[0.0582994],[0.116599],[0.174898],[0.233198],[0.291497],[0.349796],[0.408096],[0.466395],[0.524694],[0.582994],[0.641293],[0.699593],[0.757892],[0.816191],[0.874491],[0.93279],[0.991089],[1.04939],[1.10769],[1.16599],[1.22429],[1.28259],[1.34089],[1.39919],[1.45748],[1.51578],[1.57408],[1.63238],[1.69068],[1.74898],[1.80728],[1.86558],[1.92388],[1.98218],[2.04048],[2.09878],[2.15708],[2.21538],[2.27368],[2.33198],[2.39027],[2.44857],[2.50687],[2.56517],[2.62347],[2.68177],[2.74007],[2.79837],[2.85667],[2.91497],[2.97327],[3.03157],[3.08987],[3.14817],[3.20647],[3.26477],[3.32306],[3.38136],[3.43966],[3.49796],[3.55626],[3.61456],[3.67286],[3.73116]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[-0.238696],[-0.203716],[-0.168737],[-0.133757],[-0.0987776],[-0.063798],[-0.0288184],[0.00616127],[0.0411409],[0.0761205],[0.1111],[0.14608],[0.181059],[0.216039],[0.251019],[0.285998],[0.320978],[0.355958],[0.390937],[0.425917],[0.460896],[0.495876],[0.530856],[0.565835],[0.600815],[0.635795],[0.670774],[0.705754],[0.740733],[0.775713],[0.810693],[0.845672],[0.880652],[0.915632],[0.950611],[0.985591],[1.02057],[1.05555],[1.09053],[1.12551],[1.16049],[1.19547],[1.23045],[1.26543],[1.30041],[1.33539],[1.37037],[1.40535],[1.44033],[1.47531],[1.51029],[1.54526],[1.58024],[1.61522],[1.6502],[1.68518],[1.72016],[1.75514],[1.79012],[1.8251],[1.86008],[1.89506],[1.93004],[1.96502],[2],[2.03498],[2.06996],[2.10494],[2.13992],[2.1749],[2.20988],[2.24486],[2.27984],[2.31482],[2.3498],[2.38478],[2.41976],[2.45474],[2.48971],[2.52469],[2.55967],[2.59465],[2.62963],[2.66461],[2.69959],[2.73457],[2.76955],[2.80453],[2.83951],[2.87449],[2.90947],[2.94445],[2.97943],[3.01441],[3.04939],[3.08437],[3.11935],[3.15433],[3.18931],[3.22429],[3.25927],[3.29425],[3.32923],[3.36421],[3.39919],[3.43416],[3.46914],[3.50412],[3.5391],[3.57408],[3.60906],[3.64404],[3.67902],[3.714],[3.74898],[3.78396],[3.81894],[3.85392],[3.8889],[3.92388],[3.95886],[3.99384],[4.02882],[4.0638],[4.09878],[4.13376],[4.16874],[4.20372],[4.2387]] levels=class=Point name=Unnamed dimension=10 values=[1.53503e-05,0.000228851,0.00114285,0.00513378,0.0205256,0.0702405,0.199495,0.452424,0.775317,0.977906] labels=[1.53503e-05,0.000228851,0.00114285,0.00513378,0.0205256,0.0702405,0.199495,0.452424,0.775317,0.977906] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-CDF legend=[X0,X1] iso-CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[9.08209e-09],[1.14289e-08],[1.43358e-08],...,[0.999754],[0.999785],[0.999809]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw CDF\n", "distribution.drawCDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/extract_copula.ipynb000066400000000000000000000036011307543307100301130ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extract the copula from a distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to retrieve the copula from a multidimensional distribution.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0.25 ]\n", " [ 0.25 1 ]])\n" ] } ], "source": [ "# create a multivariate gaussian distribution\n", "mu = [0.0] * 2\n", "sigma = [1.0]*2\n", "R = ot.CorrelationMatrix(2)\n", "R[0, 1] = 0.25\n", "distribution = ot.Normal(mu, sigma, R)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NormalCopula(R = [[ 1 0.25 ]\n", " [ 0.25 1 ]])\n" ] } ], "source": [ "# extract the copula\n", "copula = distribution.getCopula()\n", "print(copula)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/functional_basis_process.ipynb000066400000000000000000001634501307543307100321700ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a functional basis process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a functional basis process defined by a basis and the distribution of the coefficients on that basis." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the coefficients distribution\n", "mu = [2.0]*2\n", "sigma = [5.0]*2\n", "R = ot.CorrelationMatrix(2)\n", "coefDist = ot.Normal(mu, sigma, R)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a basis of functions\n", "phi_1 = ot.SymbolicFunction(['t'], ['sin(t)'])\n", "phi_2 = ot.SymbolicFunction(['t'], ['cos(t)^2'])\n", "myBasis = ot.Basis([phi_1, phi_2])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the mesh\n", "myMesh = ot.RegularGrid(0.0, 0.1, 10)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "class=ProcessImplementation dimension=1 description=[y0] mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]]\n" ] } ], "source": [ "# Create the process\n", "process = ot.FunctionalBasisProcess(coefDist, myBasis, myMesh)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-4.41443],[0.1,-5.31389],[0.2,-6.11768],[0.3,-6.82166],[0.4,-7.42512],[0.5,-7.9305],[0.6,-8.34306],[0.7,-8.67042],[0.8,-8.922],[0.9,-9.10841]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,1.54608],[0.1,1.07554],[0.2,0.579343],[0.3,0.0638095],[0.4,-0.463699],[0.5,-0.99494],[0.6,-1.52099],[0.7,-2.0325],[0.8,-2.51989],[0.9,-2.97371]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,1.30274],[0.1,1.98649],[0.2,2.63782],[0.3,3.25139],[0.4,3.82292],[0.5,4.3492],[0.6,4.82802],[0.7,5.25805],[0.8,5.63875],[0.9,5.97019]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,4.22745],[0.1,4.10535],[0.2,3.90145],[0.3,3.62154],[0.4,3.27444],[0.5,2.87174],[0.6,2.42735],[0.7,1.95695],[0.8,1.47738],[0.9,1.00601]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,4.22893],[0.1,4.54764],[0.2,4.78013],[0.3,4.9278],[0.4,4.99523],[0.5,4.98986],[0.6,4.92163],[0.7,4.80246],[0.8,4.6457],[0.9,4.46549]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-2.28356],[0.1,-2.57931],[0.2,-2.82726],[0.3,-3.02696],[0.4,-3.17966],[0.5,-3.28824],[0.6,-3.35694],[0.7,-3.39115],[0.8,-3.39708],[0.9,-3.38148]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/gaussian_distribution.ipynb000066400000000000000000001203541307543307100315140ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a gaussian distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a gaussian distribution with parameters\n", "\n", "$$\\mu = 2.2, \\sigma = 0.6$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Normal(mu = 2.2, sigma = 0.6)\n" ] } ], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "distribution = ot.Normal(2.2, 0.6)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [ X0 ]\n", "0 : [ 2.56492 ]\n", "1 : [ 1.4403 ]\n", "2 : [ 1.93704 ]\n", "3 : [ 2.92329 ]\n", "4 : [ 0.891169 ]\n", "5 : [ 2.41003 ]\n", "6 : [ 1.987 ]\n", "7 : [ 3.06235 ]\n", "8 : [ 2.6864 ]\n", "9 : [ 2.67589 ]\n" ] } ], "source": [ "sample = distribution.getSample(10)\n", "print(sample)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.0386961,0.000630567],[-0.00371649,0.000782461],[0.0312631,0.00096765],[0.0662428,0.00119261],[0.101222,0.00146488],[0.136202,0.0017932],[0.171182,0.00218766],[0.206161,0.00265983],[0.241141,0.00322295],[0.276121,0.00389203],[0.3111,0.00468407],[0.34608,0.00561815],[0.381059,0.00671565],[0.416039,0.00800031],[0.451019,0.00949837],[0.485998,0.0112387],[0.520978,0.0132527],[0.555958,0.0155747],[0.590937,0.0182414],[0.625917,0.0212922],[0.660896,0.0247689],[0.695876,0.0287155],[0.730856,0.0331779],[0.765835,0.0382038],[0.800815,0.0438418],[0.835795,0.0501411],[0.870774,0.057151],[0.905754,0.0649197],[0.940733,0.0734944],[0.975713,0.0829192],[1.01069,0.0932352],[1.04567,0.104479],[1.08065,0.116681],[1.11563,0.129867],[1.15061,0.144052],[1.18559,0.159244],[1.22057,0.175442],[1.25555,0.19263],[1.29053,0.210786],[1.32551,0.22987],[1.36049,0.249831],[1.39547,0.270604],[1.43045,0.292109],[1.46543,0.314254],[1.50041,0.336931],[1.53539,0.360019],[1.57037,0.383383],[1.60535,0.406878],[1.64033,0.430348],[1.67531,0.453627],[1.71029,0.476543],[1.74526,0.498918],[1.78024,0.520572],[1.81522,0.541322],[1.8502,0.560989],[1.88518,0.579398],[1.92016,0.596381],[1.95514,0.611779],[1.99012,0.625445],[2.0251,0.637247],[2.06008,0.647068],[2.09506,0.654812],[2.13004,0.660399],[2.16502,0.663775],[2.2,0.664904],[2.23498,0.663775],[2.26996,0.660399],[2.30494,0.654812],[2.33992,0.647068],[2.3749,0.637247],[2.40988,0.625445],[2.44486,0.611779],[2.47984,0.596381],[2.51482,0.579398],[2.5498,0.560989],[2.58478,0.541322],[2.61976,0.520572],[2.65474,0.498918],[2.68971,0.476543],[2.72469,0.453627],[2.75967,0.430348],[2.79465,0.406878],[2.82963,0.383383],[2.86461,0.360019],[2.89959,0.336931],[2.93457,0.314254],[2.96955,0.292109],[3.00453,0.270604],[3.03951,0.249831],[3.07449,0.22987],[3.10947,0.210786],[3.14445,0.19263],[3.17943,0.175442],[3.21441,0.159244],[3.24939,0.144052],[3.28437,0.129867],[3.31935,0.116681],[3.35433,0.104479],[3.38931,0.0932352],[3.42429,0.0829192],[3.45927,0.0734944],[3.49425,0.0649197],[3.52923,0.057151],[3.56421,0.0501411],[3.59919,0.0438418],[3.63416,0.0382038],[3.66914,0.0331779],[3.70412,0.0287155],[3.7391,0.0247689],[3.77408,0.0212922],[3.80906,0.0182414],[3.84404,0.0155747],[3.87902,0.0132527],[3.914,0.0112387],[3.94898,0.00949837],[3.98396,0.00800031],[4.01894,0.00671565],[4.05392,0.00561815],[4.0889,0.00468407],[4.12388,0.00389203],[4.15886,0.00322295],[4.19384,0.00265983],[4.22882,0.00218766],[4.2638,0.0017932],[4.29878,0.00146488],[4.33376,0.00119261],[4.36874,0.00096765],[4.40372,0.000782461],[4.4387,0.000630567]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/gaussian_process_covariance.ipynb000066400000000000000000001472351307543307100326540ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a gaussian process from a covariance model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a gaussian process from its covariance model." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define a covariance model\n", "defaultDimension = 1\n", "# Amplitude values\n", "amplitude = [1.0]*defaultDimension\n", "# Scale values\n", "scale = [1.0]*defaultDimension\n", "# Second order model with parameters\n", "myModel = ot.ExponentialCauchy(scale, amplitude)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define a mesh\n", "tmin = 0.0\n", "step = 0.1\n", "n = 11\n", "myTimeGrid = ot.RegularGrid(tmin, step, n)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GaussianProcess(trend=[x0]->[0.0], covariance=AbsoluteExponential(scale=[1], amplitude=[1]))\n" ] } ], "source": [ "# create the process\n", "process = ot.GaussianProcess(myModel, myTimeGrid)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.673335],[0.1,-0.901581],[0.2,-1.00693],[0.3,-0.895348],[0.4,-1.39804],[0.5,-1.7358],[0.6,-1.6063],[0.7,-0.838407],[0.8,-0.646375],[0.9,-0.000243714],[1,-0.149352]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.716277],[0.1,-0.326333],[0.2,0.178386],[0.3,0.125229],[0.4,0.138718],[0.5,-0.134232],[0.6,-0.879473],[0.7,-0.872461],[0.8,-1.21614],[0.9,-0.569636],[1,-0.140582]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-1.55986],[0.1,-1.65269],[0.2,-1.49365],[0.3,-1.20465],[0.4,-0.934133],[0.5,-0.767919],[0.6,-1.4585],[0.7,-1.50072],[0.8,-1.59013],[0.9,-0.900176],[1,-1.28904]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.862505],[0.1,-1.37071],[0.2,-1.24891],[0.3,-0.554131],[0.4,-0.336395],[0.5,-0.730761],[0.6,-0.521825],[0.7,-1.01884],[0.8,-0.527561],[0.9,0.0783911],[1,0.939893]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.0750692],[0.1,-0.293596],[0.2,0.238685],[0.3,0.591694],[0.4,0.648019],[0.5,0.696366],[0.6,0.614458],[0.7,0.724665],[0.8,0.93535],[0.9,1.38795],[1,2.07726]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.684228],[0.1,-0.80243],[0.2,-0.477705],[0.3,-0.30433],[0.4,-0.775974],[0.5,-0.308125],[0.6,-0.400243],[0.7,-0.209213],[0.8,0.429289],[0.9,-0.0986965],[1,0.407106]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/gaussian_process_spectral.ipynb000066400000000000000000001367541307543307100323630ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a gaussian process from a spectral density" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a gaussian process from its spectral density." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define a spectral model\n", "amplitude = [1.0, 2.0]\n", "scale = [4.0, 5.0]\n", "spatialCorrelation = ot.CorrelationMatrix(2)\n", "spatialCorrelation[0,1] = 0.8\n", "mySpectralModel = ot.CauchyModel(scale, amplitude, spatialCorrelation)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define a mesh\n", "myTimeGrid = ot.RegularGrid(0.0, 0.1, 20)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " SpectralGaussianProcess=SpectralGaussianProcess dimension=2 spectralModel=class=CauchyModel amplitude=[1,2] scale=[4,5] spatial correlation=\n", "[[ 1 0.8 ]\n", " [ 0.8 1 ]] maximal frequency=5 n frequency=10\n" ] } ], "source": [ "# create the process\n", "process = ot.SpectralGaussianProcess(mySpectralModel, myTimeGrid)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,0.031835],[0.1,0.0159945],[0.2,0.00493761],[0.3,0.00806547],[0.4,0.00672859],[0.5,0.00980355],[0.6,0.0105484],[0.7,0.011925],[0.8,0.021357],[0.9,0.0209578],[1,0.0219355],[1.1,0.021794],[1.2,0.0131972],[1.3,-9.87802e-05],[1.4,-0.0123738],[1.5,-0.0123089],[1.6,-0.016084],[1.7,-0.0268676],[1.8,-0.0397821],[1.9,-0.0371178]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,-0.0323009],[0.1,-0.0296332],[0.2,-0.0260146],[0.3,-0.0212492],[0.4,-0.0128475],[0.5,0.00576007],[0.6,0.0354351],[0.7,0.0512242],[0.8,0.0520843],[0.9,0.0390685],[1,0.0154661],[1.1,0.00945605],[1.2,0.0140549],[1.3,0.01208],[1.4,0.000391551],[1.5,0.00616035],[1.6,0.0301476],[1.7,0.0372278],[1.8,0.0315054],[1.9,0.0306173]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,0.21214],[0.1,0.177193],[0.2,0.133367],[0.3,0.0955279],[0.4,0.0562328],[0.5,0.0198899],[0.6,-0.0145414],[0.7,-0.0384745],[0.8,-0.061414],[0.9,-0.094736],[1,-0.123477],[1.1,-0.153226],[1.2,-0.181577],[1.3,-0.194953],[1.4,-0.222067],[1.5,-0.245586],[1.6,-0.26226],[1.7,-0.269161],[1.8,-0.264936],[1.9,-0.246421]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,-0.0650712],[0.1,-0.0534201],[0.2,-0.0319972],[0.3,-0.0154916],[0.4,-0.00508923],[0.5,0.0108902],[0.6,0.0366247],[0.7,0.0646987],[0.8,0.0923368],[0.9,0.126076],[1,0.164038],[1.1,0.20046],[1.2,0.208966],[1.3,0.202149],[1.4,0.19678],[1.5,0.173414],[1.6,0.134675],[1.7,0.101502],[1.8,0.0775639],[1.9,0.066932]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,-0.0232437],[0.1,0.0292419],[0.2,0.0820903],[0.3,0.122422],[0.4,0.168439],[0.5,0.227918],[0.6,0.296015],[0.7,0.334842],[0.8,0.352649],[0.9,0.362456],[1,0.366526],[1.1,0.370608],[1.2,0.365934],[1.3,0.341397],[1.4,0.305812],[1.5,0.265473],[1.6,0.222651],[1.7,0.172399],[1.8,0.124935],[1.9,0.0727575]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 data=[[0,-0.184711],[0.1,-0.173169],[0.2,-0.149047],[0.3,-0.0981863],[0.4,-0.0381115],[0.5,0.0174225],[0.6,0.0662616],[0.7,0.106671],[0.8,0.13697],[0.9,0.177738],[1,0.231212],[1.1,0.280644],[1.2,0.309016],[1.3,0.325438],[1.4,0.329805],[1.5,0.334543],[1.6,0.31789],[1.7,0.287767],[1.8,0.2476],[1.9,0.209993]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/geometric_distribution.ipynb000066400000000000000000001117701307543307100316620ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a geometric distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a geometric distribution with parameter $$p = 0.7$$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Geometric(p = 0.7)\n" ] } ], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "distribution = ot.Geometric(0.7)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [ X0 ]\n", "0 : [ 1 ]\n", "1 : [ 1 ]\n", "2 : [ 1 ]\n", "3 : [ 1 ]\n", "4 : [ 1 ]\n", "5 : [ 2 ]\n", "6 : [ 1 ]\n", "7 : [ 1 ]\n", "8 : [ 1 ]\n", "9 : [ 1 ]\n" ] } ], "source": [ "sample = distribution.getSample(10)\n", "print(sample)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[-0.3,0],[0,0],[1,0.7],[2,0.91],[3,0.973],[3.3,0.973]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distribution.drawCDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/maximum_distribution.ipynb000066400000000000000000001017341307543307100313600ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a maximum distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build the distribution of the maximum of independent distributions." ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a collection of distribution\n", "distribution1 = ot.Normal()\n", "distribution2 = ot.Uniform(-1.0, 2.0)\n", "distColl = [distribution1, distribution2]" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MaximumDistribution(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 2), IndependentCopula(dimension = 2)))\n" ] } ], "source": [ "# create the distribution\n", "distribution = ot.MaximumDistribution(distColl)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-2.30946,0],[-2.26074,0],[-2.21201,0],[-2.16328,0],[-2.11455,0],[-2.06582,0],[-2.01709,0],[-1.96836,0],[-1.91963,0],[-1.8709,0],[-1.82217,0],[-1.77344,0],[-1.72471,0],[-1.67598,0],[-1.62725,0],[-1.57852,0],[-1.52979,0],[-1.48106,0],[-1.43233,0],[-1.3836,0],[-1.33488,0],[-1.28615,0],[-1.23742,0],[-1.18869,0],[-1.13996,0],[-1.09123,0],[-1.0425,0],[-0.993769,0.053895],[-0.945039,0.0621161],[-0.89631,0.0709086],[-0.84758,0.0802644],[-0.798851,0.0901711],[-0.750121,0.100611],[-0.701392,0.11156],[-0.652662,0.122991],[-0.603933,0.13487],[-0.555203,0.14716],[-0.506474,0.159817],[-0.457744,0.172793],[-0.409015,0.186038],[-0.360285,0.199496],[-0.311556,0.213109],[-0.262827,0.226816],[-0.214097,0.240554],[-0.165368,0.254259],[-0.116638,0.267865],[-0.0679086,0.281308],[-0.0191791,0.294523],[0.0295504,0.307446],[0.0782799,0.320018],[0.127009,0.332178],[0.175739,0.343872],[0.224468,0.355048],[0.273198,0.365659],[0.321927,0.375662],[0.370657,0.385022],[0.419386,0.393705],[0.468116,0.401687],[0.516845,0.408947],[0.565575,0.415473],[0.614304,0.421256],[0.663034,0.426294],[0.711763,0.430593],[0.760493,0.434162],[0.809222,0.437016],[0.857952,0.439176],[0.906681,0.440666],[0.955411,0.441517],[1.00414,0.44176],[1.05287,0.441432],[1.1016,0.440572],[1.15033,0.43922],[1.19906,0.437419],[1.24779,0.435213],[1.29652,0.432645],[1.34525,0.429761],[1.39398,0.426604],[1.44271,0.423216],[1.49143,0.41964],[1.54016,0.415917],[1.58889,0.412083],[1.63762,0.408177],[1.68635,0.40423],[1.73508,0.400276],[1.78381,0.396341],[1.83254,0.392453],[1.88127,0.388635],[1.93,0.384906],[1.97873,0.381284],[2.02746,0],[2.07619,0],[2.12492,0],[2.17365,0],[2.22238,0],[2.27111,0],[2.31984,0],[2.36857,0],[2.4173,0],[2.46602,0],[2.51475,0],[2.56348,0],[2.61221,0],[2.66094,0],[2.70967,0],[2.7584,0],[2.80713,0],[2.85586,0],[2.90459,0],[2.95332,0],[3.00205,0],[3.05078,0],[3.09951,0],[3.14824,0],[3.19697,0],[3.2457,0],[3.29443,0],[3.34316,0],[3.39188,0],[3.44061,0],[3.48934,0],[3.53807,0],[3.5868,0],[3.63553,0],[3.68426,0],[3.73299,0],[3.78172,0],[3.83045,0],[3.87918,0],[3.92791,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/mixture_distribution.ipynb000066400000000000000000000763161307543307100314070ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a mixture of PDFs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a linear combination of probability density functions." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a collection of distribution, and associated weights\n", "collDist = [ot.Triangular(1.0, 2.0, 4.0), ot.Normal(-1.0, 1.0), ot.Uniform(5.0, 6.0)]\n", "weight = [0.4, 1.0, 0.2]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mixture((w = 0.25, d = Triangular(a = 1, m = 2, b = 4)), (w = 0.625, d = Normal(mu = -1, sigma = 1)), (w = 0.125, d = Uniform(a = 5, b = 6)))\n" ] } ], "source": [ "# create the mixture\n", "distribution = ot.Mixture(collDist, weight)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-8.11767,2.48796e-12],[-7.97896,6.61353e-12],[-7.84026,1.72452e-11],[-7.70155,4.41109e-11],[-7.56284,1.1068e-10],[-7.42413,2.72418e-10],[-7.28543,6.57729e-10],[-7.14672,1.55777e-09],[-7.00801,3.61911e-09],[-6.8693,8.24795e-09],[-6.7306,1.84389e-08],[-6.59189,4.04359e-08],[-6.45318,8.69849e-08],[-6.31447,1.83554e-07],[-6.17577,3.79953e-07],[-6.03706,7.71507e-07],[-5.89835,1.53672e-06],[-5.75964,3.00256e-06],[-5.62094,5.75486e-06],[-5.48223,1.08199e-05],[-5.34352,1.9955e-05],[-5.20481,3.61017e-05],[-5.06611,6.4069e-05],[-4.9274,0.000111535],[-4.78869,0.000190467],[-4.64998,0.00031906],[-4.51128,0.000524287],[-4.37257,0.000845104],[-4.23386,0.00133627],[-4.09515,0.00207264],[-3.95645,0.00315354],[-3.81774,0.0047067],[-3.67903,0.00689095],[-3.54032,0.0098966],[-3.40162,0.0139424],[-3.26291,0.0192678],[-3.1242,0.0261199],[-2.98549,0.034734],[-2.84679,0.0453089],[-2.70808,0.057977],[-2.56937,0.0727734],[-2.43066,0.0896052],[-2.29196,0.108228],[-2.15325,0.12823],[-2.01454,0.149033],[-1.87583,0.16991],[-1.73713,0.190021],[-1.59842,0.208463],[-1.45971,0.224336],[-1.321,0.236818],[-1.1823,0.24523],[-1.04359,0.249102],[-0.904882,0.248214],[-0.766174,0.242615],[-0.627467,0.232624],[-0.488759,0.218794],[-0.350052,0.201865],[-0.211344,0.182696],[-0.0726368,0.162197],[0.0660707,0.141254],[0.204778,0.120671],[0.343486,0.101123],[0.482193,0.0831266],[0.620901,0.0670309],[0.759608,0.0530218],[0.898316,0.0411413],[1.03702,0.037485],[1.17573,0.0526691],[1.31444,0.0695307],[1.45315,0.0878274],[1.59185,0.107313],[1.73056,0.127755],[1.86927,0.148943],[2.00798,0.168706],[2.14668,0.156208],[2.28539,0.144014],[2.4241,0.132035],[2.56281,0.120203],[2.70151,0.108471],[2.84022,0.0968048],[2.97893,0.0851803],[3.11764,0.0735823],[3.25634,0.0620005],[3.39505,0.0504284],[3.53376,0.0388621],[3.67247,0.0272991],[3.81117,0.015738],[3.94988,0.00417786],[4.08859,5.94346e-07],[4.22729,2.9062e-07],[4.366,1.39398e-07],[4.50471,6.5589e-08],[4.64342,3.02726e-08],[4.78212,1.37061e-08],[4.92083,6.08725e-09],[5.05954,0.125],[5.19825,0.125],[5.33695,0.125],[5.47566,0.125],[5.61437,0.125],[5.75308,0.125],[5.89178,0.125],[6.03049,4.60973e-12],[6.1692,1.7218e-12],[6.30791,6.30858e-13],[6.44661,2.26739e-13],[6.58532,7.99402e-14],[6.72403,0],[6.86274,0],[7.00144,0],[7.14015,0],[7.27886,0],[7.41757,0],[7.55627,0],[7.69498,0],[7.83369,0],[7.9724,0],[8.1111,0],[8.24981,0],[8.38852,0],[8.52723,0],[8.66593,0],[8.80464,0],[8.94335,0],[9.08206,0],[9.22076,0],[9.35947,0],[9.49818,0],[9.63689,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/order_statistics_distribution.ipynb000066400000000000000000003137331307543307100332740ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a maximum entropy order statistics distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build maximum entropy statistics distribution, which yields ordered realizations:\n", "\n", "$$X_1 \\leq \\dots \\leq X_n$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a collection of distribution\n", "coll = [ot.Beta(1.5, 3.2, 0.0, 1.0), ot.Beta(2.0, 4.3, 0.5, 1.2)]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MaximumEntropyOrderStatisticsDistribution(collection = [Beta(r = 1.5, t = 3.2, a = 0, b = 1),Beta(r = 2, t = 4.3, a = 0.5, b = 1.2)])\n" ] } ], "source": [ "# create the distribution\n", "distribution = ot.MaximumEntropyOrderStatisticsDistribution(coll)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
    X0X1
    00.57380168128115730.640331333512734
    10.056149270346530861.0876500496604604
    20.86094776842528560.871370278512005
    30.304463764949226670.72287671649012
    40.369279702009523540.9884771935681209
    50.306281179786467350.9391618306818713
    60.62025870929602640.7522133010565687
    70.90871632223340950.9355207646820087
    80.11861143515573390.6498097139211859
    90.37912320644114250.7376445845601645
    " ], "text/plain": [ "class=Sample name=MaximumEntropyOrderStatisticsDistribution implementation=class=SampleImplementation name=MaximumEntropyOrderStatisticsDistribution size=10 dimension=2 description=[X0,X1] data=[[0.573802,0.640331],[0.0561493,1.08765],[0.860948,0.87137],[0.304464,0.722877],[0.36928,0.988477],[0.306281,0.939162],[0.620259,0.752213],[0.908716,0.935521],[0.118611,0.64981],[0.379123,0.737645]]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw a sample (ordered!)\n", "distribution.getSample(10)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0],[0.0078125],[0.015625],[0.0234375],[0.03125],[0.0390625],[0.046875],[0.0546875],[0.0625],[0.0703125],[0.078125],[0.0859375],[0.09375],[0.101562],[0.109375],[0.117188],[0.125],[0.132812],[0.140625],[0.148438],[0.15625],[0.164062],[0.171875],[0.179688],[0.1875],[0.195312],[0.203125],[0.210938],[0.21875],[0.226562],[0.234375],[0.242188],[0.25],[0.257812],[0.265625],[0.273438],[0.28125],[0.289062],[0.296875],[0.304688],[0.3125],[0.320312],[0.328125],[0.335938],[0.34375],[0.351562],[0.359375],[0.367188],[0.375],[0.382812],[0.390625],[0.398438],[0.40625],[0.414062],[0.421875],[0.429688],[0.4375],[0.445312],[0.453125],[0.460938],[0.46875],[0.476562],[0.484375],[0.492188],[0.5],[0.507812],[0.515625],[0.523438],[0.53125],[0.539062],[0.546875],[0.554688],[0.5625],[0.570312],[0.578125],[0.585938],[0.59375],[0.601562],[0.609375],[0.617188],[0.625],[0.632812],[0.640625],[0.648438],[0.65625],[0.664062],[0.671875],[0.679688],[0.6875],[0.695312],[0.703125],[0.710938],[0.71875],[0.726562],[0.734375],[0.742188],[0.75],[0.757812],[0.765625],[0.773438],[0.78125],[0.789062],[0.796875],[0.804688],[0.8125],[0.820312],[0.828125],[0.835938],[0.84375],[0.851562],[0.859375],[0.867188],[0.875],[0.882812],[0.890625],[0.898438],[0.90625],[0.914062],[0.921875],[0.929688],[0.9375],[0.945312],[0.953125],[0.960938],[0.96875],[0.976562],[0.984375],[0.992188],[1]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0.5],[0.505469],[0.510938],[0.516406],[0.521875],[0.527344],[0.532813],[0.538281],[0.54375],[0.549219],[0.554688],[0.560156],[0.565625],[0.571094],[0.576562],[0.582031],[0.5875],[0.592969],[0.598437],[0.603906],[0.609375],[0.614844],[0.620313],[0.625781],[0.63125],[0.636719],[0.642188],[0.647656],[0.653125],[0.658594],[0.664062],[0.669531],[0.675],[0.680469],[0.685937],[0.691406],[0.696875],[0.702344],[0.707812],[0.713281],[0.71875],[0.724219],[0.729688],[0.735156],[0.740625],[0.746094],[0.751562],[0.757031],[0.7625],[0.767969],[0.773438],[0.778906],[0.784375],[0.789844],[0.795312],[0.800781],[0.80625],[0.811719],[0.817187],[0.822656],[0.828125],[0.833594],[0.839063],[0.844531],[0.85],[0.855469],[0.860937],[0.866406],[0.871875],[0.877344],[0.882812],[0.888281],[0.89375],[0.899219],[0.904687],[0.910156],[0.915625],[0.921094],[0.926562],[0.932031],[0.9375],[0.942969],[0.948438],[0.953906],[0.959375],[0.964844],[0.970312],[0.975781],[0.98125],[0.986719],[0.992188],[0.997656],[1.00312],[1.00859],[1.01406],[1.01953],[1.025],[1.03047],[1.03594],[1.04141],[1.04688],[1.05234],[1.05781],[1.06328],[1.06875],[1.07422],[1.07969],[1.08516],[1.09062],[1.09609],[1.10156],[1.10703],[1.1125],[1.11797],[1.12344],[1.12891],[1.13437],[1.13984],[1.14531],[1.15078],[1.15625],[1.16172],[1.16719],[1.17266],[1.17813],[1.18359],[1.18906],[1.19453],[1.2]] levels=class=Point name=Unnamed dimension=9 values=[0,0.185693,0.618561,1.05715,1.49216,1.95957,2.43798,2.89103,3.26261] labels=[0,0.185693,0.618561,1.05715,1.49216,1.95957,2.43798,2.89103,3.26261] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[0],[0],[0],...,[0],[0],[0]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/ordinal_sum_copula.ipynb000066400000000000000000001707401307543307100307660ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create the ordinal sum of copulas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create an ordinal sum of copulas." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a collection of copulas\n", "collection = [ot.GumbelCopula(2), ot.NormalCopula(2)]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OrdinalSumCopula([0, 0.3], GumbelCopula(theta = 2), [0.3, 1], NormalCopula(R = [[ 1 0 ]\n", " [ 0 1 ]]))\n" ] } ], "source": [ "# Merge the copulas\n", "bounds = [0.3]\n", "copula = ot.OrdinalSumCopula(collection, bounds)\n", "print(copula)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=x yTitle=y axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[0,0],[1,0],[1,1],[0,1],[0,0]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=512 dimension=1 data=[[0],[0.00195695],[0.00391389],[0.00587084],[0.00782779],[0.00978474],[0.0117417],[0.0136986],[0.0156556],[0.0176125],[0.0195695],[0.0215264],[0.0234834],[0.0254403],[0.0273973],[0.0293542],[0.0313112],[0.0332681],[0.035225],[0.037182],[0.0391389],[0.0410959],[0.0430528],[0.0450098],[0.0469667],[0.0489237],[0.0508806],[0.0528376],[0.0547945],[0.0567515],[0.0587084],[0.0606654],[0.0626223],[0.0645793],[0.0665362],[0.0684932],[0.0704501],[0.072407],[0.074364],[0.0763209],[0.0782779],[0.0802348],[0.0821918],[0.0841487],[0.0861057],[0.0880626],[0.0900196],[0.0919765],[0.0939335],[0.0958904],[0.0978474],[0.0998043],[0.101761],[0.103718],[0.105675],[0.107632],[0.109589],[0.111546],[0.113503],[0.11546],[0.117417],[0.119374],[0.121331],[0.123288],[0.125245],[0.127202],[0.129159],[0.131115],[0.133072],[0.135029],[0.136986],[0.138943],[0.1409],[0.142857],[0.144814],[0.146771],[0.148728],[0.150685],[0.152642],[0.154599],[0.156556],[0.158513],[0.16047],[0.162427],[0.164384],[0.166341],[0.168297],[0.170254],[0.172211],[0.174168],[0.176125],[0.178082],[0.180039],[0.181996],[0.183953],[0.18591],[0.187867],[0.189824],[0.191781],[0.193738],[0.195695],[0.197652],[0.199609],[0.201566],[0.203523],[0.205479],[0.207436],[0.209393],[0.21135],[0.213307],[0.215264],[0.217221],[0.219178],[0.221135],[0.223092],[0.225049],[0.227006],[0.228963],[0.23092],[0.232877],[0.234834],[0.236791],[0.238748],[0.240705],[0.242661],[0.244618],[0.246575],[0.248532],[0.250489],[0.252446],[0.254403],[0.25636],[0.258317],[0.260274],[0.262231],[0.264188],[0.266145],[0.268102],[0.270059],[0.272016],[0.273973],[0.27593],[0.277886],[0.279843],[0.2818],[0.283757],[0.285714],[0.287671],[0.289628],[0.291585],[0.293542],[0.295499],[0.297456],[0.299413],[0.30137],[0.303327],[0.305284],[0.307241],[0.309198],[0.311155],[0.313112],[0.315068],[0.317025],[0.318982],[0.320939],[0.322896],[0.324853],[0.32681],[0.328767],[0.330724],[0.332681],[0.334638],[0.336595],[0.338552],[0.340509],[0.342466],[0.344423],[0.34638],[0.348337],[0.350294],[0.35225],[0.354207],[0.356164],[0.358121],[0.360078],[0.362035],[0.363992],[0.365949],[0.367906],[0.369863],[0.37182],[0.373777],[0.375734],[0.377691],[0.379648],[0.381605],[0.383562],[0.385519],[0.387476],[0.389432],[0.391389],[0.393346],[0.395303],[0.39726],[0.399217],[0.401174],[0.403131],[0.405088],[0.407045],[0.409002],[0.410959],[0.412916],[0.414873],[0.41683],[0.418787],[0.420744],[0.422701],[0.424658],[0.426614],[0.428571],[0.430528],[0.432485],[0.434442],[0.436399],[0.438356],[0.440313],[0.44227],[0.444227],[0.446184],[0.448141],[0.450098],[0.452055],[0.454012],[0.455969],[0.457926],[0.459883],[0.46184],[0.463796],[0.465753],[0.46771],[0.469667],[0.471624],[0.473581],[0.475538],[0.477495],[0.479452],[0.481409],[0.483366],[0.485323],[0.48728],[0.489237],[0.491194],[0.493151],[0.495108],[0.497065],[0.499022],[0.500978],[0.502935],[0.504892],[0.506849],[0.508806],[0.510763],[0.51272],[0.514677],[0.516634],[0.518591],[0.520548],[0.522505],[0.524462],[0.526419],[0.528376],[0.530333],[0.53229],[0.534247],[0.536204],[0.53816],[0.540117],[0.542074],[0.544031],[0.545988],[0.547945],[0.549902],[0.551859],[0.553816],[0.555773],[0.55773],[0.559687],[0.561644],[0.563601],[0.565558],[0.567515],[0.569472],[0.571429],[0.573386],[0.575342],[0.577299],[0.579256],[0.581213],[0.58317],[0.585127],[0.587084],[0.589041],[0.590998],[0.592955],[0.594912],[0.596869],[0.598826],[0.600783],[0.60274],[0.604697],[0.606654],[0.608611],[0.610568],[0.612524],[0.614481],[0.616438],[0.618395],[0.620352],[0.622309],[0.624266],[0.626223],[0.62818],[0.630137],[0.632094],[0.634051],[0.636008],[0.637965],[0.639922],[0.641879],[0.643836],[0.645793],[0.64775],[0.649706],[0.651663],[0.65362],[0.655577],[0.657534],[0.659491],[0.661448],[0.663405],[0.665362],[0.667319],[0.669276],[0.671233],[0.67319],[0.675147],[0.677104],[0.679061],[0.681018],[0.682975],[0.684932],[0.686888],[0.688845],[0.690802],[0.692759],[0.694716],[0.696673],[0.69863],[0.700587],[0.702544],[0.704501],[0.706458],[0.708415],[0.710372],[0.712329],[0.714286],[0.716243],[0.7182],[0.720157],[0.722114],[0.72407],[0.726027],[0.727984],[0.729941],[0.731898],[0.733855],[0.735812],[0.737769],[0.739726],[0.741683],[0.74364],[0.745597],[0.747554],[0.749511],[0.751468],[0.753425],[0.755382],[0.757339],[0.759295],[0.761252],[0.763209],[0.765166],[0.767123],[0.76908],[0.771037],[0.772994],[0.774951],[0.776908],[0.778865],[0.780822],[0.782779],[0.784736],[0.786693],[0.78865],[0.790607],[0.792564],[0.794521],[0.796477],[0.798434],[0.800391],[0.802348],[0.804305],[0.806262],[0.808219],[0.810176],[0.812133],[0.81409],[0.816047],[0.818004],[0.819961],[0.821918],[0.823875],[0.825832],[0.827789],[0.829746],[0.831703],[0.833659],[0.835616],[0.837573],[0.83953],[0.841487],[0.843444],[0.845401],[0.847358],[0.849315],[0.851272],[0.853229],[0.855186],[0.857143],[0.8591],[0.861057],[0.863014],[0.864971],[0.866928],[0.868885],[0.870841],[0.872798],[0.874755],[0.876712],[0.878669],[0.880626],[0.882583],[0.88454],[0.886497],[0.888454],[0.890411],[0.892368],[0.894325],[0.896282],[0.898239],[0.900196],[0.902153],[0.90411],[0.906067],[0.908023],[0.90998],[0.911937],[0.913894],[0.915851],[0.917808],[0.919765],[0.921722],[0.923679],[0.925636],[0.927593],[0.92955],[0.931507],[0.933464],[0.935421],[0.937378],[0.939335],[0.941292],[0.943249],[0.945205],[0.947162],[0.949119],[0.951076],[0.953033],[0.95499],[0.956947],[0.958904],[0.960861],[0.962818],[0.964775],[0.966732],[0.968689],[0.970646],[0.972603],[0.97456],[0.976517],[0.978474],[0.980431],[0.982387],[0.984344],[0.986301],[0.988258],[0.990215],[0.992172],[0.994129],[0.996086],[0.998043],[1]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=512 dimension=1 data=[[0],[0.00195695],[0.00391389],[0.00587084],[0.00782779],[0.00978474],[0.0117417],[0.0136986],[0.0156556],[0.0176125],[0.0195695],[0.0215264],[0.0234834],[0.0254403],[0.0273973],[0.0293542],[0.0313112],[0.0332681],[0.035225],[0.037182],[0.0391389],[0.0410959],[0.0430528],[0.0450098],[0.0469667],[0.0489237],[0.0508806],[0.0528376],[0.0547945],[0.0567515],[0.0587084],[0.0606654],[0.0626223],[0.0645793],[0.0665362],[0.0684932],[0.0704501],[0.072407],[0.074364],[0.0763209],[0.0782779],[0.0802348],[0.0821918],[0.0841487],[0.0861057],[0.0880626],[0.0900196],[0.0919765],[0.0939335],[0.0958904],[0.0978474],[0.0998043],[0.101761],[0.103718],[0.105675],[0.107632],[0.109589],[0.111546],[0.113503],[0.11546],[0.117417],[0.119374],[0.121331],[0.123288],[0.125245],[0.127202],[0.129159],[0.131115],[0.133072],[0.135029],[0.136986],[0.138943],[0.1409],[0.142857],[0.144814],[0.146771],[0.148728],[0.150685],[0.152642],[0.154599],[0.156556],[0.158513],[0.16047],[0.162427],[0.164384],[0.166341],[0.168297],[0.170254],[0.172211],[0.174168],[0.176125],[0.178082],[0.180039],[0.181996],[0.183953],[0.18591],[0.187867],[0.189824],[0.191781],[0.193738],[0.195695],[0.197652],[0.199609],[0.201566],[0.203523],[0.205479],[0.207436],[0.209393],[0.21135],[0.213307],[0.215264],[0.217221],[0.219178],[0.221135],[0.223092],[0.225049],[0.227006],[0.228963],[0.23092],[0.232877],[0.234834],[0.236791],[0.238748],[0.240705],[0.242661],[0.244618],[0.246575],[0.248532],[0.250489],[0.252446],[0.254403],[0.25636],[0.258317],[0.260274],[0.262231],[0.264188],[0.266145],[0.268102],[0.270059],[0.272016],[0.273973],[0.27593],[0.277886],[0.279843],[0.2818],[0.283757],[0.285714],[0.287671],[0.289628],[0.291585],[0.293542],[0.295499],[0.297456],[0.299413],[0.30137],[0.303327],[0.305284],[0.307241],[0.309198],[0.311155],[0.313112],[0.315068],[0.317025],[0.318982],[0.320939],[0.322896],[0.324853],[0.32681],[0.328767],[0.330724],[0.332681],[0.334638],[0.336595],[0.338552],[0.340509],[0.342466],[0.344423],[0.34638],[0.348337],[0.350294],[0.35225],[0.354207],[0.356164],[0.358121],[0.360078],[0.362035],[0.363992],[0.365949],[0.367906],[0.369863],[0.37182],[0.373777],[0.375734],[0.377691],[0.379648],[0.381605],[0.383562],[0.385519],[0.387476],[0.389432],[0.391389],[0.393346],[0.395303],[0.39726],[0.399217],[0.401174],[0.403131],[0.405088],[0.407045],[0.409002],[0.410959],[0.412916],[0.414873],[0.41683],[0.418787],[0.420744],[0.422701],[0.424658],[0.426614],[0.428571],[0.430528],[0.432485],[0.434442],[0.436399],[0.438356],[0.440313],[0.44227],[0.444227],[0.446184],[0.448141],[0.450098],[0.452055],[0.454012],[0.455969],[0.457926],[0.459883],[0.46184],[0.463796],[0.465753],[0.46771],[0.469667],[0.471624],[0.473581],[0.475538],[0.477495],[0.479452],[0.481409],[0.483366],[0.485323],[0.48728],[0.489237],[0.491194],[0.493151],[0.495108],[0.497065],[0.499022],[0.500978],[0.502935],[0.504892],[0.506849],[0.508806],[0.510763],[0.51272],[0.514677],[0.516634],[0.518591],[0.520548],[0.522505],[0.524462],[0.526419],[0.528376],[0.530333],[0.53229],[0.534247],[0.536204],[0.53816],[0.540117],[0.542074],[0.544031],[0.545988],[0.547945],[0.549902],[0.551859],[0.553816],[0.555773],[0.55773],[0.559687],[0.561644],[0.563601],[0.565558],[0.567515],[0.569472],[0.571429],[0.573386],[0.575342],[0.577299],[0.579256],[0.581213],[0.58317],[0.585127],[0.587084],[0.589041],[0.590998],[0.592955],[0.594912],[0.596869],[0.598826],[0.600783],[0.60274],[0.604697],[0.606654],[0.608611],[0.610568],[0.612524],[0.614481],[0.616438],[0.618395],[0.620352],[0.622309],[0.624266],[0.626223],[0.62818],[0.630137],[0.632094],[0.634051],[0.636008],[0.637965],[0.639922],[0.641879],[0.643836],[0.645793],[0.64775],[0.649706],[0.651663],[0.65362],[0.655577],[0.657534],[0.659491],[0.661448],[0.663405],[0.665362],[0.667319],[0.669276],[0.671233],[0.67319],[0.675147],[0.677104],[0.679061],[0.681018],[0.682975],[0.684932],[0.686888],[0.688845],[0.690802],[0.692759],[0.694716],[0.696673],[0.69863],[0.700587],[0.702544],[0.704501],[0.706458],[0.708415],[0.710372],[0.712329],[0.714286],[0.716243],[0.7182],[0.720157],[0.722114],[0.72407],[0.726027],[0.727984],[0.729941],[0.731898],[0.733855],[0.735812],[0.737769],[0.739726],[0.741683],[0.74364],[0.745597],[0.747554],[0.749511],[0.751468],[0.753425],[0.755382],[0.757339],[0.759295],[0.761252],[0.763209],[0.765166],[0.767123],[0.76908],[0.771037],[0.772994],[0.774951],[0.776908],[0.778865],[0.780822],[0.782779],[0.784736],[0.786693],[0.78865],[0.790607],[0.792564],[0.794521],[0.796477],[0.798434],[0.800391],[0.802348],[0.804305],[0.806262],[0.808219],[0.810176],[0.812133],[0.81409],[0.816047],[0.818004],[0.819961],[0.821918],[0.823875],[0.825832],[0.827789],[0.829746],[0.831703],[0.833659],[0.835616],[0.837573],[0.83953],[0.841487],[0.843444],[0.845401],[0.847358],[0.849315],[0.851272],[0.853229],[0.855186],[0.857143],[0.8591],[0.861057],[0.863014],[0.864971],[0.866928],[0.868885],[0.870841],[0.872798],[0.874755],[0.876712],[0.878669],[0.880626],[0.882583],[0.88454],[0.886497],[0.888454],[0.890411],[0.892368],[0.894325],[0.896282],[0.898239],[0.900196],[0.902153],[0.90411],[0.906067],[0.908023],[0.90998],[0.911937],[0.913894],[0.915851],[0.917808],[0.919765],[0.921722],[0.923679],[0.925636],[0.927593],[0.92955],[0.931507],[0.933464],[0.935421],[0.937378],[0.939335],[0.941292],[0.943249],[0.945205],[0.947162],[0.949119],[0.951076],[0.953033],[0.95499],[0.956947],[0.958904],[0.960861],[0.962818],[0.964775],[0.966732],[0.968689],[0.970646],[0.972603],[0.97456],[0.976517],[0.978474],[0.980431],[0.982387],[0.984344],[0.986301],[0.988258],[0.990215],[0.992172],[0.994129],[0.996086],[0.998043],[1]] levels=class=Point name=Unnamed dimension=4 values=[0,1.30604,1.42857,2.43856] labels=[0,1.30604,1.42857,2.43856] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=262144 dimension=1 data=[[0],[0],[0],...,[0],[0],[0]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw PDF\n", "graph = copula.drawPDF([512]*2)\n", "graph.setXTitle('x')\n", "graph.setYTitle('y')\n", "graph.setLegendPosition('')\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/probabilistic_modeling.rst000066400000000000000000000017441307543307100312770ustar00rootroot00000000000000Probabilistic modeling ====================== .. toctree:: gaussian_distribution.ipynb geometric_distribution.ipynb draw_1d_distribution.ipynb truncated_distribution.ipynb 2d_gaussian_distribution.ipynb draw_2d_distribution.ipynb create_copula.ipynb composed_distribution.ipynb extract_copula.ipynb composed_copula.ipynb ordinal_sum_copula.ipynb mixture_distribution.ipynb random_mixture_distribution.ipynb distribution_transformation.ipynb maximum_distribution.ipynb order_statistics_distribution.ipynb conditional_distribution.ipynb conditional_random_vector.ipynb gaussian_process_covariance.ipynb gaussian_process_spectral.ipynb userdefined_covariance_model.ipynb userdefined_spectral_model.ipynb arma_process.ipynb white_noise_process.ipynb random_walk_process.ipynb functional_basis_process.ipynb trend_transform.ipynb box_cox_transform.ipynb aggregated_process.ipynb openturns-1.9/python/doc/examples/probabilistic_modeling/random_mixture_distribution.ipynb000066400000000000000000001170431307543307100327400ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a random mixture of distributions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build an affine combination of input random variables." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create a collection of distribution\n", "collDist = [ot.Normal(), ot.Uniform(-5,0)]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RandomMixture(Normal(mu = 0, sigma = 1) + Uniform(a = -5, b = 0))\n" ] } ], "source": [ "# create the mixture\n", "distribution = ot.RandomMixture(collDist)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-9.43318,9.2855e-07],[-9.32485,1.52639e-06],[-9.21651,2.48108e-06],[-9.10818,3.98784e-06],[-8.99985,6.3382e-06],[-8.89152,9.96175e-06],[-8.78319,1.54831e-05],[-8.67486,2.3798e-05],[-8.56653,3.61741e-05],[-8.4582,5.43801e-05],[-8.34987,8.08503e-05],[-8.24154,0.000118887],[-8.13321,0.000172908],[-8.02487,0.000248736],[-7.91654,0.000353933],[-7.80821,0.000498173],[-7.69988,0.000693641],[-7.59155,0.000955444],[-7.48322,0.00130201],[-7.37489,0.00175542],[-7.26656,0.00234172],[-7.15823,0.00309101],[-7.0499,0.00403745],[-6.94157,0.00521897],[-6.83323,0.00667676],[-6.7249,0.00845448],[-6.61657,0.010597],[-6.50824,0.0131493],[-6.39991,0.016154],[-6.29158,0.0196502],[-6.18325,0.023671],[-6.07492,0.0282411],[-5.96659,0.033375],[-5.85826,0.0390751],[-5.74993,0.0453299],[-5.6416,0.0521136],[-5.53326,0.059385],[-5.42493,0.0670885],[-5.3166,0.0751545],[-5.20827,0.0835017],[-5.09994,0.0920391],[-4.99161,0.100669],[-4.88328,0.109292],[-4.77495,0.117806],[-4.66662,0.126115],[-4.55829,0.13413],[-4.44996,0.14177],[-4.34162,0.148969],[-4.23329,0.155672],[-4.12496,0.161841],[-4.01663,0.167451],[-3.9083,0.172494],[-3.79997,0.176973],[-3.69164,0.180903],[-3.58331,0.184309],[-3.47498,0.187224],[-3.36665,0.189684],[-3.25832,0.191732],[-3.14999,0.193406],[-3.04165,0.194746],[-2.93332,0.195788],[-2.82499,0.196564],[-2.71666,0.1971],[-2.60833,0.197413],[-2.5,0.197516],[-2.39167,0.197413],[-2.28334,0.1971],[-2.17501,0.196564],[-2.06668,0.195788],[-1.95835,0.194746],[-1.85001,0.193406],[-1.74168,0.191732],[-1.63335,0.189684],[-1.52502,0.187224],[-1.41669,0.184309],[-1.30836,0.180903],[-1.20003,0.176973],[-1.0917,0.172494],[-0.983368,0.167451],[-0.875037,0.161841],[-0.766706,0.155672],[-0.658375,0.148969],[-0.550044,0.14177],[-0.441713,0.13413],[-0.333383,0.126115],[-0.225052,0.117806],[-0.116721,0.109292],[-0.00838991,0.100669],[0.099941,0.0920391],[0.208272,0.0835017],[0.316603,0.0751545],[0.424934,0.0670885],[0.533264,0.059385],[0.641595,0.0521136],[0.749926,0.0453299],[0.858257,0.0390751],[0.966588,0.033375],[1.07492,0.0282411],[1.18325,0.023671],[1.29158,0.0196502],[1.39991,0.016154],[1.50824,0.0131493],[1.61657,0.010597],[1.7249,0.00845448],[1.83323,0.00667676],[1.94157,0.00521897],[2.0499,0.00403745],[2.15823,0.00309101],[2.26656,0.00234172],[2.37489,0.00175542],[2.48322,0.00130201],[2.59155,0.000955444],[2.69988,0.000693641],[2.80821,0.000498173],[2.91654,0.000353933],[3.02487,0.000248736],[3.13321,0.000172908],[3.24154,0.000118887],[3.34987,8.08503e-05],[3.4582,5.43801e-05],[3.56653,3.61741e-05],[3.67486,2.3798e-05],[3.78319,1.54831e-05],[3.89152,9.96175e-06],[3.99985,6.3382e-06],[4.10818,3.98784e-06],[4.21651,2.48108e-06],[4.32485,1.52639e-06],[4.43318,9.2855e-07]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw PDF\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/random_walk_process.ipynb000066400000000000000000001620161307543307100311400ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a random walk process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a white noise process by its origin and distribution." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the distribution, origin\n", "myDist = ot.ComposedDistribution([ot.Normal(), ot.Exponential(0.2)], ot.ClaytonCopula(0.5))\n", "myOrigin = ot.Point(myDist.getMean())" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Define the mesh\n", "myTimeGrid = ot.RegularGrid(0, 0.1, 10)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "class=ProcessImplementation dimension=2 description=[X0,X1] mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]]\n" ] } ], "source": [ "# Create the process:\n", "process = ot.RandomWalk(myOrigin, myDist, myTimeGrid)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,0.331526],[0.2,-0.770264],[0.3,-1.16354],[0.4,0.246115],[0.5,-1.28229],[0.6,-0.716057],[0.7,-1.03795],[0.8,0.154736],[0.9,1.61952]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,0.48053],[0.2,0.121543],[0.3,0.345528],[0.4,-1.02165],[0.5,-1.82654],[0.6,-3.7941],[0.7,-1.70075],[0.8,0.00104576],[0.9,-0.642728]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,-0.0256342],[0.2,-1.24645],[0.3,-0.844942],[0.4,1.18818],[0.5,-0.33216],[0.6,2.19189],[0.7,1.43603],[0.8,0.65438],[0.9,0.856666]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,0.512914],[0.2,2.04152],[0.3,1.77048],[0.4,3.13329],[0.5,2.13631],[0.6,1.30766],[0.7,1.1442],[0.8,-1.71739],[0.9,-2.37574]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,-0.957266],[0.2,-0.999913],[0.3,0.727399],[0.4,1.64344],[0.5,0.825056],[0.6,2.26835],[0.7,2.5273],[0.8,1.11828],[0.9,1.57754]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[0.1,-0.201563],[0.2,0.635069],[0.3,0.191616],[0.4,0.235816],[0.5,1.56308],[0.6,1.56635],[0.7,2.91778],[0.8,3.13762],[0.9,3.6973]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/trend_transform.ipynb000066400000000000000000003331441307543307100303150ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Add a trend to a process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to add a trend to a process." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create a process\n", "myGrid = ot.RegularGrid(0.0, 0.1, 10)\n", "amplitude=[5.0]\n", "scale=[0.2]\n", "myCovModel=ot.ExponentialModel(scale, amplitude)\n", "process = ot.GaussianProcess(myCovModel, myGrid)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,4.78291],[0.1,0.693263],[0.2,0.549785],[0.3,0.905784],[0.4,2.33667],[0.5,2.35906],[0.6,3.58747],[0.7,1.18889],[0.8,5.5706],[0.9,5.84212]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-13.3096],[0.1,-3.42703],[0.2,-1.61349],[0.3,6.54546],[0.4,3.41346],[0.5,7.04077],[0.6,1.61458],[0.7,-3.89327],[0.8,-5.60225],[0.9,-1.12845]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.645133],[0.1,-6.47279],[0.2,-4.19835],[0.3,-2.57461],[0.4,-1.19187],[0.5,-4.60293],[0.6,-4.85153],[0.7,-0.419601],[0.8,-4.02154],[0.9,-6.96405]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.54858],[0.1,3.70021],[0.2,-2.81046],[0.3,-4.84743],[0.4,3.36628],[0.5,-0.392055],[0.6,7.07423],[0.7,3.13252],[0.8,-0.487928],[0.9,-2.75033]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,6.43232],[0.1,5.73514],[0.2,4.95466],[0.3,8.44061],[0.4,-1.89984],[0.5,3.22516],[0.6,3.87849],[0.7,-3.0739],[0.8,-0.759586],[0.9,2.02762]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,5.23903],[0.1,1.32571],[0.2,-5.7233],[0.3,-3.50007],[0.4,-6.02117],[0.5,-10.5709],[0.6,-8.8163],[0.7,-7.54253],[0.8,-7.0228],[0.9,-5.90121]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define a trend function\n", "f = ot.SymbolicFunction(['t'], ['30*t'])\n", "fTrend = ot.TrendTransform(f)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Add it to the process\n", "transformed_process = ot.CompositeProcess(fTrend, process)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,3.91953],[0.1,7.24251],[0.2,6.8286],[0.3,6.85482],[0.4,11.9829],[0.5,21.7096],[0.6,21.3393],[0.7,23.5983],[0.8,23.9434],[0.9,27.9844]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-6.50397],[0.1,-3.75058],[0.2,-1.02333],[0.3,0.897929],[0.4,8.87035],[0.5,25.6621],[0.6,23.4011],[0.7,30.4721],[0.8,23.4677],[0.9,29.0478]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,6.54818],[0.1,12.5413],[0.2,16.343],[0.3,21.2344],[0.4,23.6058],[0.5,23.4947],[0.6,24.6942],[0.7,24.3783],[0.8,28.9347],[0.9,25.5671]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-8.90594],[0.1,-1.30707],[0.2,4.81409],[0.3,8.03312],[0.4,20.0778],[0.5,23.6624],[0.6,24.1282],[0.7,24.4431],[0.8,23.388],[0.9,30.133]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-6.41052],[0.1,-8.40751],[0.2,-0.827787],[0.3,0.723447],[0.4,13.4912],[0.5,16.9613],[0.6,19.6501],[0.7,21.4361],[0.8,29.3739],[0.9,29.4201]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,-0.0182577],[0.1,3.05911],[0.2,6.11742],[0.3,8.27566],[0.4,11.8517],[0.5,10.0911],[0.6,17.5689],[0.7,15.3016],[0.8,14.0776],[0.9,21.5784]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = transformed_process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/truncated_distribution.ipynb000066400000000000000000004535301307543307100317000ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a truncated distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to truncate a distribution." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-1.1431,8.06165e-19],[-1.11169,1.65474e-17],[-1.08027,2.76313e-16],[-1.04886,3.80557e-15],[-1.01744,4.37899e-14],[-0.98603,4.26065e-13],[-0.954616,3.54479e-12],[-0.923202,2.54835e-11],[-0.891787,1.59851e-10],[-0.860373,8.82911e-10],[-0.828959,4.33063e-09],[-0.797544,1.90135e-08],[-0.76613,7.52774e-08],[-0.734716,2.70618e-07],[-0.703301,8.89069e-07],[-0.671887,2.68543e-06],[-0.640473,7.49948e-06],[-0.609058,1.94652e-05],[-0.577644,4.7187e-05],[-0.54623,0.000107325],[-0.514815,0.000230008],[-0.483401,0.000466311],[-0.451987,0.000897652],[-0.420573,0.00164643],[-0.389158,0.00288656],[-0.357744,0.00485212],[-0.32633,0.00784181],[-0.294915,0.0122173],[-0.263501,0.0183938],[-0.232087,0.0268223],[-0.200672,0.0379645],[-0.169258,0.0522612],[-0.137844,0.0700983],[-0.106429,0.0917731],[-0.075015,0.117464],[-0.0436007,0.147209],[-0.0121864,0.180889],[0.0192279,0.218228],[0.0506423,0.258799],[0.0820566,0.30204],[0.113471,0.347281],[0.144885,0.393774],[0.1763,0.440721],[0.207714,0.487315],[0.239128,0.532767],[0.270542,0.576334],[0.301957,0.617344],[0.333371,0.655213],[0.364785,0.689457],[0.3962,0.719697],[0.427614,0.745664],[0.459028,0.767192],[0.490443,0.784216],[0.521857,0.796758],[0.553271,0.80492],[0.584686,0.80887],[0.6161,0.808833],[0.647514,0.805074],[0.678929,0.797892],[0.710343,0.787603],[0.741757,0.774538],[0.773172,0.75903],[0.804586,0.741409],[0.836,0.721993],[0.867415,0.70109],[0.898829,0.678989],[0.930243,0.655957],[0.961657,0.632245],[0.993072,0.608077],[1.02449,0.583657],[1.0559,0.559166],[1.08731,0.534766],[1.11873,0.510594],[1.15014,0.486771],[1.18156,0.463399],[1.21297,0.440564],[1.24439,0.418334],[1.2758,0.396766],[1.30721,0.375904],[1.33863,0.35578],[1.37004,0.336417],[1.40146,0.317828],[1.43287,0.300021],[1.46429,0.282994],[1.4957,0.266744],[1.52712,0.251259],[1.55853,0.236526],[1.58994,0.222528],[1.62136,0.209245],[1.65277,0.196656],[1.68419,0.184737],[1.7156,0.173464],[1.74702,0.162812],[1.77843,0.152755],[1.80984,0.143269],[1.84126,0.134327],[1.87267,0.125903],[1.90409,0.117974],[1.9355,0.110514],[1.96692,0.1035],[1.99833,0.0969076],[2.02974,0.0907154],[2.06116,0.0849014],[2.09257,0.0794447],[2.12399,0.0743255],[2.1554,0.0695244],[2.18682,0.0650234],[2.21823,0.0608049],[2.24964,0.0568524],[2.28106,0.05315],[2.31247,0.0496829],[2.34389,0.0464368],[2.3753,0.0433983],[2.40672,0.0405548],[2.43813,0.0378941],[2.46954,0.0354051],[2.50096,0.0330769],[2.53237,0.0308996],[2.56379,0.0288637],[2.5952,0.0269602],[2.62662,0.0251807],[2.65803,0.0235174],[2.68944,0.0219628],[2.72086,0.02051],[2.75227,0.0191524],[2.78369,0.0178839],[2.8151,0.0166988],[2.84652,0.0155917],[2.87793,0.0145575]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# the original distribution\n", "distribution = ot.Gumbel(2.2, 0.6)\n", "distribution.drawPDF()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.947835,0],[-0.918243,0],[-0.888651,0],[-0.85906,0],[-0.829468,0],[-0.799876,0],[-0.770285,0],[-0.740693,0],[-0.711101,0],[-0.68151,0],[-0.651918,0],[-0.622326,0],[-0.592735,0],[-0.563143,0],[-0.533551,0],[-0.50396,0],[-0.474368,0],[-0.444776,0],[-0.415185,0],[-0.385593,0],[-0.356001,0],[-0.32641,0],[-0.296818,0],[-0.267226,0],[-0.237635,0],[-0.208043,0],[-0.178451,0],[-0.14886,0],[-0.119268,0],[-0.0896764,0],[-0.0600847,0],[-0.0304931,0],[-0.000901385,0],[0.0286903,0],[0.0582819,0],[0.0878736,0],[0.117465,0],[0.147057,0],[0.176649,0],[0.20624,0.532975],[0.235832,0.580132],[0.265424,0.625524],[0.295015,0.668523],[0.324607,0.708578],[0.354199,0.745219],[0.38379,0.778069],[0.413382,0.806844],[0.442974,0.831352],[0.472565,0.851489],[0.502157,0.867234],[0.531749,0.878638],[0.56134,0.885817],[0.590932,0.888941],[0.620524,0.888227],[0.650115,0.883924],[0.679707,0.876308],[0.709299,0.865672],[0.73889,0.852319],[0.768482,0.836556],[0.798074,0.818684],[0.827665,0.799],[0.857257,0.777788],[0.886849,0.75532],[0.91644,0.731847],[0.946032,0.707607],[0.975624,0.682816],[1.00522,0.657672],[1.03481,0.632354],[1.0644,0.607021],[1.09399,0.581815],[1.12358,0.556858],[1.15317,0.532257],[1.18277,0.508106],[1.21236,0.48448],[1.24195,0.461443],[1.27154,0.439049],[1.30113,0.417337],[1.33072,0.396339],[1.36032,0.376078],[1.38991,0.356569],[1.4195,0.33782],[1.44909,0.319834],[1.47868,0.302606],[1.50827,0.286131],[1.53787,0.270398],[1.56746,0.255392],[1.59705,0.241097],[1.62664,0.227495],[1.65623,0.214565],[1.68582,0.202286],[1.71542,0.190635],[1.74501,0.17959],[1.7746,0.169127],[1.80419,0.159223],[1.83378,0.149854],[1.86337,0.140997],[1.89297,0.132628],[1.92256,0.124725],[1.95215,0.117266],[1.98174,0.110229],[2.01133,0.103593],[2.04092,0.0973388],[2.07052,0.0914455],[2.10011,0.0858947],[2.1297,0.0806682],[2.15929,0.0757486],[2.18888,0.0711193],[2.21847,0.0667644],[2.24807,0.0626685],[2.27766,0.0588173],[2.30725,0.0551969],[2.33684,0.0517942],[2.36643,0.0485968],[2.39602,0.0455928],[2.42562,0.042771],[2.45521,0.0401208],[2.4848,0.0376321],[2.51439,0.0352954],[2.54398,0.0331017],[2.57357,0.0310425],[2.60317,0.0291098],[2.63276,0.0272961],[2.66235,0.0255941],[2.69194,0.0239971],[2.72153,0.0224989],[2.75112,0.0210933],[2.78072,0.0197748],[2.81031,0.0185381],[2.8399,0.0173781]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# truncate on the left\n", "truncated = ot.TruncatedDistribution(distribution, 0.2, ot.TruncatedDistribution.LOWER)\n", "truncated.drawPDF()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.853169,1.47461e-09],[-0.828718,5.03042e-09],[-0.804268,1.60472e-08],[-0.779817,4.80381e-08],[-0.755366,1.35398e-07],[-0.730915,3.6045e-07],[-0.706464,9.09044e-07],[-0.682013,2.17802e-06],[-0.657562,4.97099e-06],[-0.633111,1.08351e-05],[-0.60866,2.26086e-05],[-0.58421,4.52652e-05],[-0.559759,8.7145e-05],[-0.535308,0.000161658],[-0.510857,0.000289519],[-0.486406,0.000501507],[-0.461955,0.000841704],[-0.437504,0.00137101],[-0.413053,0.00217071],[-0.388602,0.00334571],[-0.364152,0.00502703],[-0.339701,0.00737311],[-0.31525,0.0105695],[-0.290799,0.0148268],[-0.266348,0.0203758],[-0.241897,0.0274618],[-0.217446,0.0363356],[-0.192995,0.0472437],[-0.168544,0.0604172],[-0.144094,0.0760606],[-0.119643,0.0943406],[-0.0951918,0.115376],[-0.0707409,0.139229],[-0.04629,0.165901],[-0.0218391,0.195324],[0.00261177,0.227366],[0.0270627,0.261829],[0.0515135,0.298454],[0.0759644,0.336926],[0.100415,0.376887],[0.124866,0.417941],[0.149317,0.459668],[0.173768,0.501631],[0.198219,0.543394],[0.22267,0.584525],[0.247121,0.624609],[0.271572,0.663256],[0.296022,0.700108],[0.320473,0.734846],[0.344924,0.767188],[0.369375,0.796902],[0.393826,0.823796],[0.418277,0.847728],[0.442728,0.868597],[0.467179,0.886347],[0.49163,0.90096],[0.51608,0.912456],[0.540531,0.920887],[0.564982,0.926336],[0.589433,0.928908],[0.613884,0.928732],[0.638335,0.925953],[0.662786,0.92073],[0.687237,0.913231],[0.711688,0.903632],[0.736138,0.892112],[0.760589,0.878852],[0.78504,0.864031],[0.809491,0.847824],[0.833942,0.830405],[0.858393,0.811937],[0.882844,0.79258],[0.907295,0.772483],[0.931746,0.751789],[0.956196,0.730629],[0.980647,0.709126],[1.0051,0.687395],[1.02955,0.665539],[1.054,0.643654],[1.07845,0.621825],[1.1029,0.600129],[1.12735,0.578637],[1.1518,0.557408],[1.17625,0.536497],[1.20071,0.51595],[1.22516,0.495806],[1.24961,0.476101],[1.27406,0.456862],[1.29851,0.438113],[1.32296,0.419872],[1.34741,0.402152],[1.37186,0.384966],[1.39631,0.368319],[1.42076,0.352214],[1.44521,0.336654],[1.46967,0.321636],[1.49412,0.307157],[1.51857,0],[1.54302,0],[1.56747,0],[1.59192,0],[1.61637,0],[1.64082,0],[1.66527,0],[1.68972,0],[1.71417,0],[1.73862,0],[1.76308,0],[1.78753,0],[1.81198,0],[1.83643,0],[1.86088,0],[1.88533,0],[1.90978,0],[1.93423,0],[1.95868,0],[1.98313,0],[2.00758,0],[2.03204,0],[2.05649,0],[2.08094,0],[2.10539,0],[2.12984,0],[2.15429,0],[2.17874,0],[2.20319,0],[2.22764,0],[2.25209,0],[2.27654,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# truncate on the right\n", "truncated = ot.TruncatedDistribution(distribution, 1.5, ot.TruncatedDistribution.UPPER)\n", "truncated.drawPDF()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-0.621957,0],[-0.59999,0],[-0.578022,0],[-0.556055,0],[-0.534088,0],[-0.512121,0],[-0.490154,0],[-0.468187,0],[-0.44622,0],[-0.424253,0],[-0.402285,0],[-0.380318,0],[-0.358351,0],[-0.336384,0],[-0.314417,0],[-0.29245,0],[-0.270483,0],[-0.248516,0],[-0.226549,0],[-0.204581,0],[-0.182614,0],[-0.160647,0],[-0.13868,0],[-0.116713,0],[-0.0947458,0],[-0.0727787,0],[-0.0508116,0],[-0.0288445,0],[-0.00687736,0],[0.0150898,0],[0.0370569,0],[0.059024,0],[0.0809911,0],[0.102958,0],[0.124925,0],[0.146892,0],[0.16886,0],[0.190827,0],[0.212794,0.633253],[0.234761,0.673931],[0.256728,0.71349],[0.278695,0.751626],[0.300662,0.788058],[0.322629,0.822535],[0.344597,0.854837],[0.366564,0.884775],[0.388531,0.912193],[0.410498,0.936969],[0.432465,0.959013],[0.454432,0.978266],[0.476399,0.9947],[0.498366,1.00831],[0.520333,1.01913],[0.542301,1.0272],[0.564268,1.0326],[0.586235,1.0354],[0.608202,1.03571],[0.630169,1.03365],[0.652136,1.02934],[0.674103,1.02291],[0.69607,1.01451],[0.718038,1.00428],[0.740005,0.99236],[0.761972,0.9789],[0.783939,0.964045],[0.805906,0.947937],[0.827873,0.930715],[0.84984,0.912513],[0.871807,0.893462],[0.893774,0.873686],[0.915742,0.853302],[0.937709,0.832423],[0.959676,0.811152],[0.981643,0.789589],[1.00361,0.767824],[1.02558,0.745941],[1.04754,0.724018],[1.06951,0.702127],[1.09148,0.680332],[1.11345,0.658691],[1.13541,0.637257],[1.15738,0.616078],[1.17935,0.595194],[1.20131,0.574643],[1.22328,0.554456],[1.24525,0.534661],[1.26722,0.515282],[1.28918,0.496338],[1.31115,0.477846],[1.33312,0.459817],[1.35508,0.442263],[1.37705,0.425191],[1.39902,0.408604],[1.42099,0.392507],[1.44295,0.376899],[1.46492,0.361779],[1.48689,0.347145],[1.50885,0],[1.53082,0],[1.55279,0],[1.57476,0],[1.59672,0],[1.61869,0],[1.64066,0],[1.66262,0],[1.68459,0],[1.70656,0],[1.72852,0],[1.75049,0],[1.77246,0],[1.79443,0],[1.81639,0],[1.83836,0],[1.86033,0],[1.88229,0],[1.90426,0],[1.92623,0],[1.9482,0],[1.97016,0],[1.99213,0],[2.0141,0],[2.03606,0],[2.05803,0],[2.08,0],[2.10197,0],[2.12393,0],[2.1459,0],[2.16787,0],[2.18983,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# truncated on both bounds\n", "truncated = ot.TruncatedDistribution(distribution, 0.2, 1.5)\n", "truncated.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/userdefined_covariance_model.ipynb000066400000000000000000000045511307543307100327520ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a custom covariance model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a custom covariance model from elementary covariance matrices." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the covariance function at (s,t):\n", "def C(s, t):\n", " return m.exp( -4.0 * abs(s - t) / (1 + (s * s + t * t)))\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the time grid:\n", "N = 32\n", "a = 4.0\n", "myMesh = ot.IntervalMesher([N]).build(ot.Interval(-a, a))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the collection of elementary covariance matrices\n", "myCovarianceCollection = ot.CovarianceMatrixCollection()\n", "for k in range(myMesh.getVerticesNumber()):\n", " t = myMesh.getVertices()[k]\n", " for l in range(k + 1):\n", " s = myMesh.getVertices()[l]\n", " matrix = ot.CovarianceMatrix(1)\n", " matrix[0, 0] = C(s[0], t[0])\n", " myCovarianceCollection.add(matrix)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the covariance model\n", "myCovarianceModel = ot.UserDefinedCovarianceModel(myMesh, myCovarianceCollection)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/userdefined_spectral_model.ipynb000066400000000000000000000054331307543307100324550ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a custom spectral model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a custom spectral model." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the frequency grid:\n", "fmin = 0.1\n", "df = 0.5\n", "N = int((10.0 - fmin)/ df)\n", "myFrequencyGrid = ot.RegularGrid(fmin, df, N)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the spectral function:\n", "def s(f):\n", " if(f <= 5.0):\n", " return 1.0\n", " else:\n", " x = f - 5.0\n", " return m.exp(-2.0 * x * x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the collection of HermitianMatrix:\n", "myCollection = ot.HermitianMatrixCollection()\n", "for k in range(N):\n", " frequency = myFrequencyGrid.getValue(k)\n", " matrix = ot.HermitianMatrix(1)\n", " matrix[0, 0] = s(frequency)\n", " myCollection.add(matrix)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "frequency=RegularGrid(start=0.1, step=0.5, n=19) dimension=1 DSPCollection=[[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (1,0) ]],[[ (0.980199,0) ]],[[ (0.486752,0) ]],[[ (0.0889216,0) ]],[[ (0.00597602,0) ]],[[ (0.000147748,0) ]],[[ (1.34381e-06,0) ]],[[ (4.49635e-09,0) ]],[[ (5.53461e-12,0) ]],[[ (2.50622e-15,0) ]]]#19\n" ] } ], "source": [ "# Create the spectral model:\n", "mySpectralModel = ot.UserDefinedSpectralModel(myFrequencyGrid, myCollection)\n", "print(mySpectralModel)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/probabilistic_modeling/white_noise_process.ipynb000066400000000000000000001357601307543307100311650ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a white noise process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to build a white noise process by its distribution." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import math as m" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the distribution\n", "myDist = ot.Normal()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Define the mesh\n", "myMesh = ot.IntervalMesher([10]).build(ot.Interval([0.0], [1.0]))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WhiteNoise(Normal(mu = 0, sigma = 1))\n" ] } ], "source": [ "# Create the process:\n", "process = ot.WhiteNoise(myDist, myMesh)\n", "print(process)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed - 0 marginal implementation=class=GraphImplementation name=Unnamed - 0 marginal title=Unnamed - 0 marginal xTitle=Time yTitle=Values axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-1.11371],[0.1,0.0553574],[0.2,-0.448402],[0.3,-1.98421],[0.4,-0.0601176],[0.5,1.59417],[0.6,0.254551],[0.7,0.300636],[0.8,-0.380033],[0.9,1.55407],[1,1.42271]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,0.315671],[0.1,-1.07729],[0.2,0.527628],[0.3,0.230513],[0.4,-1.64284],[0.5,0.527845],[0.6,0.0443046],[0.7,-1.27174],[0.8,0.251391],[0.9,0.189003],[1,0.325381]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,2.40494],[0.1,0.301218],[0.2,-1.56236],[0.3,0.137434],[0.4,-0.591176],[0.5,1.75769],[0.6,0.441088],[0.7,1.15407],[0.8,-0.0675737],[0.9,0.703804],[1,0.171332]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,0.588198],[0.1,1.16553],[0.2,0.49203],[0.3,3.30075],[0.4,0.314993],[0.5,-1.3832],[0.6,0.714616],[0.7,1.1754],[0.8,1.36478],[0.9,-1.00304],[1,0.493573]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,-0.105017],[0.1,-0.760864],[0.2,-1.12858],[0.3,-0.137452],[0.4,0.269196],[0.5,-0.751502],[0.6,1.0115],[0.7,0.88986],[0.8,-1.73149],[0.9,0.0739811],[1,0.242898]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=2 data=[[0,1.35087],[0.1,0.00417333],[0.2,0.592689],[0.3,0.919033],[0.4,-0.662876],[0.5,-0.250859],[0.6,-1.04405],[0.7,-0.863289],[0.8,0.707142],[0.9,0.45764],[1,0.771725]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = process.getSample(6)\n", "sample.drawMarginal(0)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/000077500000000000000000000000001307543307100241075ustar00rootroot00000000000000openturns-1.9/python/doc/examples/statistical_estimation/chi2_test.ipynb000066400000000000000000000036171307543307100270450ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Distribution fitting test using Chi2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to perform a Chi2 goodness-of-fit test for an 1-d discrete distribution." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "distribution = ot.Poisson()\n", "sample = distribution.getSample(30)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Fit a Poisson distribution\n", "distribution = ot.PoissonFactory().build(sample)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Conclusion= True P-value= 0.6585272444518727\n" ] } ], "source": [ "# Test the fitted distribution\n", "result = ot.FittingTest.ChiSquared(sample, distribution, 0.99)\n", "print('Conclusion=', result.getBinaryQualityMeasure(), 'P-value=', result.getPValue())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_arma.ipynb000066400000000000000000000043771307543307100300000ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate an ARMA process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate a scalar ARMA process using the Whittle estimator." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import matplotlib.pyplot as plt\n", "ot.RandomGenerator.SetSeed(0)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create an arma process\n", "myTimeGrid = ot.RegularGrid(0.0, 0.1, 30)\n", "myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid)\n", "myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1])\n", "myMACoef = ot.ARMACoefficients([0.4, 0.3])\n", "myARMAProcess = ot.ARMA(myARCoef, myMACoef, myWhiteNoise)\n", "myTimeSeries = myARMAProcess.getRealization()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the estimator\n", "myFactory_42 = ot.WhittleFactory(4, 2)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "41.22386791008901 25.223867910089016 49.13657072551996\n" ] } ], "source": [ "# Estimate the ARMA process\n", "myCriterion = ot.Point()\n", "myARMA_42 = myFactory_42.build(ot.TimeSeries(myTimeSeries), myCriterion)\n", "AICc, AIC, BIC = myCriterion[0:3]\n", "print(AICc, AIC, BIC)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_copula.ipynb000066400000000000000000003117351307543307100303420ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fit a normal copula" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the parameters of a gaussian copula from a sample." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "R = ot.CorrelationMatrix(2)\n", "R[1, 0] = 0.4\n", "copula = ot.NormalCopula(R)\n", "sample = copula.getSample(500)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NormalCopula(R = [[ 1 0.361442 ]\n", " [ 0.361442 1 ]])\n" ] } ], "source": [ "# Estimate a normal distribution\n", "distribution = ot.NormalCopulaFactory().build(sample)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[0,0],[1,0],[1,1],[0,1],[0,0]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0],[0.0078125],[0.015625],[0.0234375],[0.03125],[0.0390625],[0.046875],[0.0546875],[0.0625],[0.0703125],[0.078125],[0.0859375],[0.09375],[0.101562],[0.109375],[0.117188],[0.125],[0.132812],[0.140625],[0.148438],[0.15625],[0.164062],[0.171875],[0.179688],[0.1875],[0.195312],[0.203125],[0.210938],[0.21875],[0.226562],[0.234375],[0.242188],[0.25],[0.257812],[0.265625],[0.273438],[0.28125],[0.289062],[0.296875],[0.304688],[0.3125],[0.320312],[0.328125],[0.335938],[0.34375],[0.351562],[0.359375],[0.367188],[0.375],[0.382812],[0.390625],[0.398438],[0.40625],[0.414062],[0.421875],[0.429688],[0.4375],[0.445312],[0.453125],[0.460938],[0.46875],[0.476562],[0.484375],[0.492188],[0.5],[0.507812],[0.515625],[0.523438],[0.53125],[0.539062],[0.546875],[0.554688],[0.5625],[0.570312],[0.578125],[0.585938],[0.59375],[0.601562],[0.609375],[0.617188],[0.625],[0.632812],[0.640625],[0.648438],[0.65625],[0.664062],[0.671875],[0.679688],[0.6875],[0.695312],[0.703125],[0.710938],[0.71875],[0.726562],[0.734375],[0.742188],[0.75],[0.757812],[0.765625],[0.773438],[0.78125],[0.789062],[0.796875],[0.804688],[0.8125],[0.820312],[0.828125],[0.835938],[0.84375],[0.851562],[0.859375],[0.867188],[0.875],[0.882812],[0.890625],[0.898438],[0.90625],[0.914062],[0.921875],[0.929688],[0.9375],[0.945312],[0.953125],[0.960938],[0.96875],[0.976562],[0.984375],[0.992188],[1]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0],[0.0078125],[0.015625],[0.0234375],[0.03125],[0.0390625],[0.046875],[0.0546875],[0.0625],[0.0703125],[0.078125],[0.0859375],[0.09375],[0.101562],[0.109375],[0.117188],[0.125],[0.132812],[0.140625],[0.148438],[0.15625],[0.164062],[0.171875],[0.179688],[0.1875],[0.195312],[0.203125],[0.210938],[0.21875],[0.226562],[0.234375],[0.242188],[0.25],[0.257812],[0.265625],[0.273438],[0.28125],[0.289062],[0.296875],[0.304688],[0.3125],[0.320312],[0.328125],[0.335938],[0.34375],[0.351562],[0.359375],[0.367188],[0.375],[0.382812],[0.390625],[0.398438],[0.40625],[0.414062],[0.421875],[0.429688],[0.4375],[0.445312],[0.453125],[0.460938],[0.46875],[0.476562],[0.484375],[0.492188],[0.5],[0.507812],[0.515625],[0.523438],[0.53125],[0.539062],[0.546875],[0.554688],[0.5625],[0.570312],[0.578125],[0.585938],[0.59375],[0.601562],[0.609375],[0.617188],[0.625],[0.632812],[0.640625],[0.648438],[0.65625],[0.664062],[0.671875],[0.679688],[0.6875],[0.695312],[0.703125],[0.710938],[0.71875],[0.726562],[0.734375],[0.742188],[0.75],[0.757812],[0.765625],[0.773438],[0.78125],[0.789062],[0.796875],[0.804688],[0.8125],[0.820312],[0.828125],[0.835938],[0.84375],[0.851562],[0.859375],[0.867188],[0.875],[0.882812],[0.890625],[0.898438],[0.90625],[0.914062],[0.921875],[0.929688],[0.9375],[0.945312],[0.953125],[0.960938],[0.96875],[0.976562],[0.984375],[0.992188],[1]] levels=class=Point name=Unnamed dimension=10 values=[0.283923,0.619738,0.790109,0.906787,0.988586,1.04559,1.07782,1.12752,1.23152,1.53234] labels=[0.283923,0.619738,0.790109,0.906787,0.988586,1.04559,1.07782,1.12752,1.23152,1.53234] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[0],[0],[0],...,[0],[0],[0]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw fitted distribution\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_moments.ipynb000066400000000000000000000076021307543307100305340ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate moments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate statistical moments from a sample." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "size = 100\n", "mu = [-4.0, 5.0]\n", "sigma = [2.0, 3.0]\n", "R = ot.CorrelationMatrix(2)\n", "normal = ot.Normal(mu, sigma, R)\n", "sample = normal.getSample(size)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "

    [-3.99594,4.75612]
    \n", "

    " ], "text/plain": [ "class=Point name=Unnamed dimension=2 values=[-3.99594,4.75612]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Estimate mean\n", "sample.computeMean()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "

    [[ 1.89414 0 ]
    \n", " [ 0.0759477 3.13125 ]]
    \n", "

    " ], "text/plain": [ "class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.89414,0.0759477,0,3.13125]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Estimate standard deviation\n", "sample.computeStandardDeviation()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "

    [3.58776,9.81049]
    \n", "

    " ], "text/plain": [ "class=Point name=Unnamed dimension=2 values=[3.58776,9.81049]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Estimate variance\n", "sample.computeVariance()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "

    [-0.169881,0.108393]
    \n", "

    " ], "text/plain": [ "class=Point name=Unnamed dimension=2 values=[-0.169881,0.108393]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Estimate skewness\n", "sample.computeSkewness()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "

    [3.45227,3.07151]
    \n", "

    " ], "text/plain": [ "class=Point name=Unnamed dimension=2 values=[3.45227,3.07151]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Estimate kurtosis\n", "sample.computeKurtosis()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_non_parametric_copula.ipynb000066400000000000000000003365301307543307100334230ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fit a copula using a non parametric approach" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the parameters of a Bernstein copula from a sample." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "R = ot.CorrelationMatrix(2)\n", "R[1, 0] = 0.4\n", "copula = ot.NormalCopula(R)\n", "sample = copula.getSample(500)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Estimate a normal distribution\n", "distribution = ot.BernsteinCopulaFactory().build(sample)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=[X0,X1] iso-PDF implementation=class=GraphImplementation name=[X0,X1] iso-PDF title=[X0,X1] iso-PDF xTitle=X0 yTitle=X1 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[0,0],[1,0],[1,1],[0,1],[0,0]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=[X0,X1] iso-PDF implementation=class=Contour name=[X0,X1] iso-PDF x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0],[0.0078125],[0.015625],[0.0234375],[0.03125],[0.0390625],[0.046875],[0.0546875],[0.0625],[0.0703125],[0.078125],[0.0859375],[0.09375],[0.101562],[0.109375],[0.117188],[0.125],[0.132812],[0.140625],[0.148438],[0.15625],[0.164062],[0.171875],[0.179688],[0.1875],[0.195312],[0.203125],[0.210938],[0.21875],[0.226562],[0.234375],[0.242188],[0.25],[0.257812],[0.265625],[0.273438],[0.28125],[0.289062],[0.296875],[0.304688],[0.3125],[0.320312],[0.328125],[0.335938],[0.34375],[0.351562],[0.359375],[0.367188],[0.375],[0.382812],[0.390625],[0.398438],[0.40625],[0.414062],[0.421875],[0.429688],[0.4375],[0.445312],[0.453125],[0.460938],[0.46875],[0.476562],[0.484375],[0.492188],[0.5],[0.507812],[0.515625],[0.523438],[0.53125],[0.539062],[0.546875],[0.554688],[0.5625],[0.570312],[0.578125],[0.585938],[0.59375],[0.601562],[0.609375],[0.617188],[0.625],[0.632812],[0.640625],[0.648438],[0.65625],[0.664062],[0.671875],[0.679688],[0.6875],[0.695312],[0.703125],[0.710938],[0.71875],[0.726562],[0.734375],[0.742188],[0.75],[0.757812],[0.765625],[0.773438],[0.78125],[0.789062],[0.796875],[0.804688],[0.8125],[0.820312],[0.828125],[0.835938],[0.84375],[0.851562],[0.859375],[0.867188],[0.875],[0.882812],[0.890625],[0.898438],[0.90625],[0.914062],[0.921875],[0.929688],[0.9375],[0.945312],[0.953125],[0.960938],[0.96875],[0.976562],[0.984375],[0.992188],[1]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=1 data=[[0],[0.0078125],[0.015625],[0.0234375],[0.03125],[0.0390625],[0.046875],[0.0546875],[0.0625],[0.0703125],[0.078125],[0.0859375],[0.09375],[0.101562],[0.109375],[0.117188],[0.125],[0.132812],[0.140625],[0.148438],[0.15625],[0.164062],[0.171875],[0.179688],[0.1875],[0.195312],[0.203125],[0.210938],[0.21875],[0.226562],[0.234375],[0.242188],[0.25],[0.257812],[0.265625],[0.273438],[0.28125],[0.289062],[0.296875],[0.304688],[0.3125],[0.320312],[0.328125],[0.335938],[0.34375],[0.351562],[0.359375],[0.367188],[0.375],[0.382812],[0.390625],[0.398438],[0.40625],[0.414062],[0.421875],[0.429688],[0.4375],[0.445312],[0.453125],[0.460938],[0.46875],[0.476562],[0.484375],[0.492188],[0.5],[0.507812],[0.515625],[0.523438],[0.53125],[0.539062],[0.546875],[0.554688],[0.5625],[0.570312],[0.578125],[0.585938],[0.59375],[0.601562],[0.609375],[0.617188],[0.625],[0.632812],[0.640625],[0.648438],[0.65625],[0.664062],[0.671875],[0.679688],[0.6875],[0.695312],[0.703125],[0.710938],[0.71875],[0.726562],[0.734375],[0.742188],[0.75],[0.757812],[0.765625],[0.773438],[0.78125],[0.789062],[0.796875],[0.804688],[0.8125],[0.820312],[0.828125],[0.835938],[0.84375],[0.851562],[0.859375],[0.867188],[0.875],[0.882812],[0.890625],[0.898438],[0.90625],[0.914062],[0.921875],[0.929688],[0.9375],[0.945312],[0.953125],[0.960938],[0.96875],[0.976562],[0.984375],[0.992188],[1]] levels=class=Point name=Unnamed dimension=10 values=[0.395151,0.701528,0.847112,0.927181,0.965423,1.00841,1.06291,1.11972,1.19358,1.51913] labels=[0.395151,0.701528,0.847112,0.927181,0.965423,1.00841,1.06291,1.11972,1.19358,1.51913] show labels=true derived from class=DrawableImplementation name=[X0,X1] iso-PDF legend=[X0,X1] iso-PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=16641 dimension=1 data=[[0],[0],[0],...,[0.245822],[0.250831],[0.032]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw fitted distribution\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_non_parametric_distribution.ipynb000066400000000000000000001300641307543307100346510ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fit a distribution using a non parametric approach" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate a non parametrci distribution using the kernel smoothing method." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "distribution = ot.Gamma(6.0, 1.0)\n", "sample = distribution.getSample(800)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Estimate the Spearman correlation\n", "kernel = ot.KernelSmoothing()\n", "estimated = kernel.build(sample)\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Kernel smoothing vs original xTitle= yTitle= axes=OFF grid=OFF legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=original data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-2.86214,0],[-2.72326,0],[-2.58439,0],[-2.44552,0],[-2.30664,0],[-2.16777,0],[-2.0289,0],[-1.89002,0],[-1.75115,0],[-1.61227,0],[-1.4734,0],[-1.33453,0],[-1.19565,0],[-1.05678,0],[-0.917905,0],[-0.779032,0],[-0.640158,0],[-0.501284,0],[-0.36241,0],[-0.223536,0],[-0.0846624,0],[0.0542114,3.69596e-09],[0.193085,1.84377e-06],[0.331959,2.41031e-05],[0.470833,0.000120413],[0.609707,0.00038162],[0.74858,0.000926631],[0.887454,0.00188857],[1.02633,0.00340033],[1.1652,0.00558192],[1.30408,0.00853061],[1.44295,0.0123143],[1.58182,0.016968],[1.7207,0.0224932],[1.85957,0.028859],[1.99844,0.0360053],[2.13732,0.043847],[2.27619,0.0522788],[2.41507,0.0611806],[2.55394,0.0704223],[2.69281,0.0798686],[2.83169,0.0893839],[2.97056,0.0988355],[3.10944,0.108098],[3.24831,0.117053],[3.38718,0.125596],[3.52606,0.133634],[3.66493,0.141087],[3.8038,0.14789],[3.94268,0.15399],[4.08155,0.159349],[4.22043,0.163943],[4.3593,0.167758],[4.49817,0.170792],[4.63705,0.173054],[4.77592,0.174561],[4.91479,0.175339],[5.05367,0.175417],[5.19254,0.174834],[5.33142,0.173631],[5.47029,0.171852],[5.60916,0.169543],[5.74804,0.166754],[5.88691,0.163532],[6.02579,0.159927],[6.16466,0.155986],[6.30353,0.151757],[6.44241,0.147285],[6.58128,0.142612],[6.72015,0.137781],[6.85903,0.132829],[6.9979,0.127793],[7.13678,0.122706],[7.27565,0.117599],[7.41452,0.112499],[7.5534,0.107431],[7.69227,0.102419],[7.83115,0.0974815],[7.97002,0.0926361],[8.10889,0.087898],[8.24777,0.0832801],[8.38664,0.0787929],[8.52551,0.0744454],[8.66439,0.0702445],[8.80326,0.0661956],[8.94214,0.0623024],[9.08101,0.0585676],[9.21988,0.0549922],[9.35876,0.0515766],[9.49763,0.04832],[9.6365,0.0452205],[9.77538,0.042276],[9.91425,0.0394833],[10.0531,0.0368389],[10.192,0.0343389],[10.3309,0.0319788],[10.4697,0.0297541],[10.6086,0.0276597],[10.7475,0.0256908],[10.8864,0.0238421],[11.0252,0.0221084],[11.1641,0.0204845],[11.303,0.0189653],[11.4419,0.0175454],[11.5807,0.0162199],[11.7196,0.0149838],[11.8585,0.0138322],[11.9974,0.0127603],[12.1362,0.0117636],[12.2751,0.0108376],[12.414,0.00997816],[12.5529,0.00918112],[12.6917,0.00844257],[12.8306,0.00775879],[12.9695,0.00712622],[13.1084,0.00654146],[13.2472,0.00600132],[13.3861,0.00550276],[13.525,0.0050429],[13.6638,0.00461903],[13.8027,0.00422861],[13.9416,0.00386922],[14.0805,0.00353863],[14.2193,0.00323471],[14.3582,0.00295548],[14.4971,0.00269909],[14.636,0.00246381],[14.7748,0.00224803],[14.9137,0.00205024]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=KS data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-3.59311,1.53653e-18],[-3.44377,1.20423e-17],[-3.29444,8.88616e-17],[-3.1451,6.17454e-16],[-2.99576,4.04048e-15],[-2.84642,2.49033e-14],[-2.69709,1.44589e-13],[-2.54775,7.90927e-13],[-2.39841,4.07688e-12],[-2.24907,1.98054e-11],[-2.09973,9.06956e-11],[-1.9504,3.91578e-10],[-1.80106,1.5943e-09],[-1.65172,6.12261e-09],[-1.50238,2.2183e-08],[-1.35305,7.58449e-08],[-1.20371,2.44776e-07],[-1.05437,7.45874e-07],[-0.905032,2.14656e-06],[-0.755695,5.83627e-06],[-0.606357,1.49963e-05],[-0.457019,3.64287e-05],[-0.307681,8.36905e-05],[-0.158344,0.000181913],[-0.00900585,0.000374294],[0.140332,0.000729373],[0.28967,0.00134693],[0.439007,0.00235896],[0.588345,0.00392161],[0.737683,0.00619533],[0.887021,0.00931389],[1.03636,0.0133489],[1.1857,0.0182811],[1.33503,0.0239923],[1.48437,0.0302859],[1.63371,0.0369358],[1.78305,0.0437483],[1.93239,0.050616],[2.08172,0.0575407],[2.23106,0.0646148],[2.3804,0.0719685],[2.52974,0.0797015],[2.67907,0.0878265],[2.82841,0.096243],[2.97775,0.10475],[3.12709,0.113085],[3.27643,0.120983],[3.42576,0.128218],[3.5751,0.134644],[3.72444,0.140201],[3.87378,0.144909],[4.02311,0.148855],[4.17245,0.152162],[4.32179,0.154964],[4.47113,0.157379],[4.62047,0.159484],[4.7698,0.161296],[4.91914,0.162773],[5.06848,0.163817],[5.21782,0.164298],[5.36715,0.164078],[5.51649,0.163038],[5.66583,0.161104],[5.81517,0.15827],[5.96451,0.154606],[6.11384,0.150265],[6.26318,0.14546],[6.41252,0.140426],[6.56186,0.135368],[6.71119,0.130412],[6.86053,0.125581],[7.00987,0.1208],[7.15921,0.115935],[7.30854,0.11085],[7.45788,0.105458],[7.60722,0.0997636],[7.75656,0.0938679],[7.9059,0.0879511],[8.05523,0.0822277],[8.20457,0.0768948],[8.35391,0.072086],[8.50325,0.0678459],[8.65258,0.0641313],[8.80192,0.0608359],[8.95126,0.0578287],[9.1006,0.0549907],[9.24994,0.0522392],[9.39927,0.0495344],[9.54861,0.046873],[9.69795,0.0442749],[9.84729,0.0417719],[9.99662,0.0394006],[10.146,0.0371982],[10.2953,0.0351967],[10.4446,0.0334153],[10.594,0.0318504],[10.7433,0.030471],[10.8927,0.0292206],[11.042,0.0280284],[11.1913,0.0268237],[11.3407,0.0255477],[11.49,0.0241587],[11.6393,0.0226323],[11.7887,0.0209587],[11.938,0.0191438],[12.0874,0.0172121],[12.2367,0.0152111],[12.386,0.0132083],[12.5354,0.011282],[12.6847,0.00950434],[12.834,0.00792565],[12.9834,0.00656425],[13.1327,0.00540785],[13.2821,0.00442442],[13.4314,0.00357745],[13.5807,0.00283917],[13.7301,0.00219676],[13.8794,0.00165125],[14.0287,0.00121144],[14.1781,0.000886859],[14.3274,0.000682787],[14.4768,0.000598086],[14.6261,0.000624997],[14.7754,0.000749453],[14.9248,0.000951123],[15.0741,0.00120347],[15.2234,0.0014748],[15.3728,0.00173095],[15.5221,0.00193972]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot original distribution vs kernel smoothing\n", "graph = ot.Graph()\n", "graph.setTitle('Kernel smoothing vs original')\n", "graph.add(distribution.drawPDF())\n", "kernel_plot = estimated.drawPDF().getDrawable(0)\n", "kernel_plot.setColor('blue')\n", "graph.add(kernel_plot)\n", "graph.setLegends(['original', 'KS'])\n", "graph.setLegendPosition('topright')\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_normal.ipynb000066400000000000000000001102211307543307100303320ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fit a normal distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the parameters of a gaussian distribution from a sample." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "sample = ot.Normal().getSample(50)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Normal(mu = 0.0353171, sigma = 0.968336)\n" ] } ], "source": [ "# Estimate a normal distribution\n", "distribution = ot.NormalFactory().build(sample)\n", "print(distribution)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 PDF implementation=class=GraphImplementation name=X0 PDF title=X0 PDF xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-3.5777,0.000390712],[-3.52125,0.000484828],[-3.46479,0.000599575],[-3.40834,0.000738963],[-3.35189,0.000907666],[-3.29543,0.0011111],[-3.23898,0.00135552],[-3.18253,0.00164808],[-3.12607,0.001997],[-3.06962,0.00241158],[-3.01317,0.00290234],[-2.95671,0.00348112],[-2.90026,0.00416115],[-2.84381,0.00495715],[-2.78735,0.00588538],[-2.7309,0.00696371],[-2.67445,0.00821166],[-2.61799,0.0096504],[-2.56154,0.0113027],[-2.50509,0.013193],[-2.44863,0.0153473],[-2.39218,0.0177927],[-2.33573,0.0205577],[-2.27927,0.0236719],[-2.22282,0.0271653],[-2.16637,0.0310684],[-2.10991,0.0354119],[-2.05346,0.0402255],[-1.997,0.0455385],[-1.94055,0.0513784],[-1.8841,0.0577704],[-1.82764,0.0647372],[-1.77119,0.0722981],[-1.71474,0.0804681],[-1.65828,0.0892575],[-1.60183,0.0986709],[-1.54538,0.108707],[-1.48892,0.119358],[-1.43247,0.130607],[-1.37602,0.142432],[-1.31956,0.1548],[-1.26311,0.167671],[-1.20666,0.180997],[-1.1502,0.194718],[-1.09375,0.208769],[-1.0373,0.223075],[-0.980844,0.237551],[-0.924391,0.25211],[-0.867937,0.266652],[-0.811484,0.281076],[-0.75503,0.295275],[-0.698577,0.30914],[-0.642124,0.322556],[-0.58567,0.335414],[-0.529217,0.3476],[-0.472763,0.359007],[-0.41631,0.36953],[-0.359857,0.37907],[-0.303403,0.387538],[-0.24695,0.394851],[-0.190496,0.400936],[-0.134043,0.405734],[-0.0775897,0.409196],[-0.0211363,0.411288],[0.0353171,0.411987],[0.0917705,0.411288],[0.148224,0.409196],[0.204677,0.405734],[0.261131,0.400936],[0.317584,0.394851],[0.374037,0.387538],[0.430491,0.37907],[0.486944,0.36953],[0.543398,0.359007],[0.599851,0.3476],[0.656304,0.335414],[0.712758,0.322556],[0.769211,0.30914],[0.825665,0.295275],[0.882118,0.281076],[0.938571,0.266652],[0.995025,0.25211],[1.05148,0.237551],[1.10793,0.223075],[1.16438,0.208769],[1.22084,0.194718],[1.27729,0.180997],[1.33375,0.167671],[1.3902,0.1548],[1.44665,0.142432],[1.50311,0.130607],[1.55956,0.119358],[1.61601,0.108707],[1.67247,0.0986709],[1.72892,0.0892575],[1.78537,0.0804681],[1.84183,0.0722981],[1.89828,0.0647372],[1.95473,0.0577704],[2.01119,0.0513784],[2.06764,0.0455385],[2.12409,0.0402255],[2.18055,0.0354119],[2.237,0.0310684],[2.29345,0.0271653],[2.34991,0.0236719],[2.40636,0.0205577],[2.46281,0.0177927],[2.51927,0.0153473],[2.57572,0.013193],[2.63217,0.0113027],[2.68863,0.0096504],[2.74508,0.00821166],[2.80153,0.00696371],[2.85799,0.00588538],[2.91444,0.00495715],[2.97089,0.00416115],[3.02735,0.00348112],[3.0838,0.00290234],[3.14025,0.00241158],[3.19671,0.001997],[3.25316,0.00164808],[3.30961,0.00135552],[3.36607,0.0011111],[3.42252,0.000907666],[3.47897,0.000738963],[3.53543,0.000599575],[3.59188,0.000484828],[3.64833,0.000390712]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw fitted distribution\n", "distribution.drawPDF()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_pcc.ipynb000066400000000000000000000735001307543307100276170ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate PCC coefficients" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the correlation between an output sample Y and the corresponding inputs using the Partial Correlation Coefficients." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create X/Y data\n", "ot.RandomGenerator.SetSeed(0)\n", "formula = ['X3+sin(_pi*X1)+7*sin(X2)*sin(_pi*X2)+' + \\\n", " '1.2*((_pi*X3)*(_pi*X2))*sin(_pi*X1)']\n", "input_names = ['X1', 'X2', 'X3']\n", "model = ot.SymbolicFunction(input_names, formula)\n", "distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \\\n", " ot.IndependentCopula(3))\n", "size = 100\n", "inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True)\n", "outputDesign = model(inputDesign)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.195052,0.0183082,0.171376]\n" ] } ], "source": [ "# Compute first order indices using the Saltelli estimator\n", "indices = ot.CorrelationAnalysis.PCC(inputDesign, outputDesign)\n", "print(indices)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=PCC coefficients xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X1 : 50.7%,X2 : 4.8%,X3 : 44.5%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.506977],[0.0475863],[0.445437]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw indices (normalized)\n", "ot.SaltelliSensitivityAlgorithm.DrawImportanceFactors(indices, input_names, 'PCC coefficients')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_sobol.ipynb000066400000000000000000000727061307543307100301770ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate Sobol indices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the Sobol' indices from X/Y samples." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create X/Y data\n", "ot.RandomGenerator.SetSeed(0)\n", "formula = ['sin(_pi*X1)+7*sin(X2)*sin(_pi*X2)+' + \\\n", " '1.1*((_pi*X3)*(_pi*X2))*sin(_pi*X1)']\n", "input_names = ['X1', 'X2', 'X3']\n", "model = ot.SymbolicFunction(input_names, formula)\n", "distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \\\n", " ot.IndependentCopula(3))\n", "size = 10000\n", "inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True)\n", "outputDesign = model(inputDesign)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.0673722,0.19643,0.0348151]\n" ] } ], "source": [ "# Compute first order indices using the Saltelli estimator\n", "sensitivityAnalysis = ot.SaltelliSensitivityAlgorithm(inputDesign, outputDesign, size)\n", "first_order = sensitivityAnalysis.getFirstOrderIndices()\n", "print(first_order)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=First order indices xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X1 : 22.6%,X2 : 65.8%,X3 : 11.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.225614],[0.657798],[0.116588]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw indices (normalized)\n", "sensitivityAnalysis.DrawImportanceFactors(first_order, input_names, 'First order indices')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/estimate_spearman.ipynb000066400000000000000000000036501307543307100306570ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate Spearman correlation coefficent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to estimate the Spearman correlation coefficient from two unidimensional samples." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "dimension = 2\n", "R = ot.CorrelationMatrix(dimension)\n", "R[0, 1] = 0.8\n", "size = 100\n", "sample = ot.Normal([3.] * dimension, [2.] * dimension, R).getSample(size)\n", "sample1 = sample.getMarginal(0)\n", "sample2 = sample.getMarginal(1)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8000480048004801\n" ] } ], "source": [ "# Estimate the Spearman correlation\n", "coef = ot.CorrelationAnalysis.SpearmanCorrelation(sample1, sample2)\n", "print(coef)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/export_sample_from_csv.ipynb000066400000000000000000000037411307543307100317370ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Export a sample to a CSV file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to export a sample to a CSV file." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# create a sample from a 2-d gaussian distribution\n", "sample = ot.Normal(2).getSample(5)\n", "sample.setDescription(['u1', 'u2'])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# default separator is ';'\n", "sample.exportToCSVFile('sample.csv', ',')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"u1\",\"u2\"\n", "3.3156880087779661e-01,-4.8820474790372442e-01\n", "-4.6548206392049335e-01,3.3208385645183086e-01\n", "-1.6772582180258397e-01,3.0126267437025929e+00\n", "9.4204049100015808e-01,6.1189014041922474e-01\n", "6.1171515642720731e-01,-1.5374973590145564e+00\n" ] } ], "source": [ "# print the content of the file\n", "with open('sample.csv', 'r') as f:\n", " for line in f.readlines():\n", " print(line, end='')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/henry_line_graph.ipynb000066400000000000000000001745021307543307100305000ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Normal fitting test using the Henry line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to perform a visual goodness-of-fit test for an univariate normal distribution." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "ot.RandomGenerator.SetSeed(0)\n", "distribution = ot.Normal(2.0, 0.5)\n", "sample = distribution.getSample(100)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Henry plot implementation=class=GraphImplementation name=Henry plot title=Henry plot xTitle=Sample yTitle=Standard normal quantiles axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Henry line implementation=class=Curve name=Henry line derived from class=DrawableImplementation name=Henry line legend=Henry line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.854969,-2.37554],[3.12311,2.20062]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0.854969,-2.57583],[0.909307,-2.17009],[1.01565,-1.95996],[1.10602,-1.81191],[1.16957,-1.6954],[1.23463,-1.59819],[1.31573,-1.5141],[1.34411,-1.43953],[1.35856,-1.3722],[1.36691,-1.31058],[1.48052,-1.25357],[1.48096,-1.20036],[1.52064,-1.15035],[1.52146,-1.10306],[1.53061,-1.05812],[1.54921,-1.01522],[1.55409,-0.974114],[1.57164,-0.934589],[1.57206,-0.896473],[1.60932,-0.859617],[1.61148,-0.823894],[1.62359,-0.789192],[1.62819,-0.755415],[1.63265,-0.722479],[1.63923,-0.690309],[1.66435,-0.658838],[1.6712,-0.628006],[1.68347,-0.59776],[1.7199,-0.568051],[1.74462,-0.538836],[1.74654,-0.510073],[1.75744,-0.481727],[1.75818,-0.453762],[1.76474,-0.426148],[1.78087,-0.398855],[1.8085,-0.371856],[1.8225,-0.345126],[1.82322,-0.318639],[1.87939,-0.292375],[1.88087,-0.266311],[1.9095,-0.240426],[1.91969,-0.214702],[1.93027,-0.189118],[1.93725,-0.163658],[1.94427,-0.138304],[1.95461,-0.113039],[1.95505,-0.0878448],[1.97819,-0.0627068],[2.02608,-0.0376083],[2.0351,-0.0125335],[2.05174,0.0125335],[2.09218,0.0376083],[2.12896,0.0627068],[2.13051,0.0878448],[2.14998,0.113039],[2.16146,0.138304],[2.1674,0.163658],[2.16938,0.189118],[2.17502,0.214702],[2.17571,0.240426],[2.18896,0.266311],[2.20068,0.292375],[2.20386,0.318639],[2.22274,0.345126],[2.22289,0.371856],[2.23681,0.398855],[2.26904,0.426148],[2.26967,0.453762],[2.27202,0.481727],[2.3041,0.510073],[2.31858,0.538836],[2.32751,0.568051],[2.33898,0.59776],[2.35818,0.628006],[2.37077,0.658838],[2.3798,0.690309],[2.39522,0.722479],[2.39658,0.755415],[2.40533,0.789192],[2.40728,0.823894],[2.4528,0.859617],[2.49724,0.896473],[2.4979,0.934589],[2.50217,0.974114],[2.50778,1.01522],[2.53531,1.05812],[2.60274,1.10306],[2.60691,1.15035],[2.63564,1.20036],[2.66315,1.25357],[2.68391,1.31058],[2.71862,1.3722],[2.83648,1.43953],[2.85469,1.5141],[2.86911,1.59819],[2.89118,1.6954],[2.9279,1.81191],[2.98438,1.95996],[3.05984,2.17009],[3.12311,2.57583]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw Henry line plot\n", "ot.VisualTest_DrawHenryLine(sample)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/import_sample_from_csv.ipynb000066400000000000000000000032441307543307100317260ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Import a sample from a CSV file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to import a CSV file" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot\n", "\n", "# write a csv file by hand\n", "with open('sample.csv', 'w') as f:\n", " f.write('0.1, 0.2, 0.3\\n')\n", " f.write('0.7, 8.2, 4.3\\n')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [ data_0 data_1 data_2 ]\n", "0 : [ 0.1 0.2 0.3 ]\n", "1 : [ 0.7 8.2 4.3 ]\n" ] } ], "source": [ "# default separator is ';'\n", "sample = ot.Sample.ImportFromCSVFile('sample.csv', ',')\n", "print(sample)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/kolmogorov_test.ipynb000066400000000000000000000035141307543307100304120ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Test distribution fitting using Kolmogorov" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to perform a Kolmogorov goodness-of-fit test for an 1-d continuous distribution." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "distribution = ot.Normal()\n", "sample = distribution.getSample(50)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Conclusion= True P-value= 0.5902455836497116\n" ] } ], "source": [ "# Estimate the Spearman correlation\n", "result = ot.FittingTest.Kolmogorov(sample, ot.NormalFactory(), 0.99)\n", "print('Conclusion=', result.getBinaryQualityMeasure(), 'P-value=', result.getPValue())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/qqplot_graph.ipynb000066400000000000000000002234011307543307100276550ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Distribution fitting test using QQ plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to perform a visual goodness-of-fit test for an 1-d distribution with the QQ plot." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data\n", "ot.RandomGenerator.SetSeed(0)\n", "distribution = ot.Gumbel(5.0, 0.5)\n", "sample = distribution.getSample(50)\n", "sample.setDescription(['Sample'])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Fit a distribution\n", "distribution = ot.GumbelFactory().build(sample)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Sample versus model QQ-plot implementation=class=GraphImplementation name=Sample versus model QQ-plot title=Sample versus model QQ-plot xTitle=Sample yTitle=Gumbel(alpha = 4.27864, beta = 0.522279) axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Test line implementation=class=Curve name=Test line derived from class=DrawableImplementation name=Test line legend=Test line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.237974,0.237974],[1.52938,1.52938]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=50 dimension=2 data=[[0.237974,0.165348],[0.253696,0.229047],[0.296856,0.265845],[0.298003,0.29369],[0.317702,0.316892],[0.3203,0.33723],[0.342534,0.355623],[0.361327,0.37262],[0.393459,0.388572],[0.411249,0.403723],[0.419944,0.41825],[0.440334,0.432287],[0.458855,0.445938],[0.460099,0.459287],[0.464324,0.472404],[0.487727,0.485348],[0.488674,0.498169],[0.495608,0.510915],[0.503201,0.523626],[0.50842,0.53634],[0.50998,0.549095],[0.527834,0.561926],[0.55537,0.574868],[0.557866,0.587955],[0.567428,0.601225],[0.575059,0.614714],[0.626982,0.628462],[0.654338,0.642512],[0.665822,0.65691],[0.672726,0.671708],[0.676178,0.686962],[0.676626,0.702736],[0.686834,0.719105],[0.694066,0.736154],[0.717928,0.753983],[0.737617,0.772711],[0.771385,0.792481],[0.824441,0.813469],[0.83351,0.835892],[0.916448,0.860026],[0.917721,0.88623],[0.987007,0.914982],[0.998645,0.946937],[1.02027,0.983032],[1.11448,1.02467],[1.11839,1.07413],[1.1944,1.13537],[1.27034,1.21647],[1.29989,1.33828],[1.52938,1.59742]] color=blue fillStyle=solid lineStyle=solid pointStyle=fcircle lineWidth=1]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw QQ plot\n", "ot.VisualTest.DrawQQplot(sample, distribution)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/statistical_estimation.rst000066400000000000000000000011721307543307100314220ustar00rootroot00000000000000Statistical estimation ====================== .. toctree:: import_sample_from_csv.ipynb export_sample_from_csv.ipynb visualize_clouds.ipynb visualize_cobweb.ipynb visualize_pairs.ipynb visualize_empirical_cdf.ipynb visualize_histogram.ipynb estimate_moments.ipynb estimate_spearman.ipynb estimate_sobol.ipynb estimate_pcc.ipynb estimate_normal.ipynb estimate_non_parametric_distribution.ipynb kolmogorov_test.ipynb chi2_test.ipynb qqplot_graph.ipynb henry_line_graph.ipynb estimate_copula.ipynb estimate_non_parametric_copula.ipynb estimate_arma.ipynb openturns-1.9/python/doc/examples/statistical_estimation/visualize_clouds.ipynb000066400000000000000000002303621307543307100305440ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize clouds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to draw clouds of points from a data sample." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data to visualize\n", "dimension = 2\n", "R = ot.CorrelationMatrix(dimension)\n", "R[0, 1] = -0.8\n", "size = 100\n", "sample1 = ot.Normal([3.] * dimension, [2.] * dimension, R).getSample(size)\n", "sample2 = ot.Normal([2.] * dimension, [3.] * dimension, R).getSample(size // 2)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=two samples clouds implementation=class=GraphImplementation name=two samples clouds title=two samples clouds xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Sample1 Cloud implementation=class=Cloud name=Sample1 Cloud derived from class=DrawableImplementation name=Sample1 Cloud legend=Sample1 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[4.2164,0.50747],[2.12347,5.1478],[-1.36277,6.91027],[2.28999,5.29271],[4.62134,2.65472],[2.05895,4.06606],[-1.58012,5.12464],[0.376438,4.98991],[4.99159,1.23939],[1.87959,4.43092],[3.64585,3.01826],[0.923847,3.63287],[3.94723,2.09162],[3.70284,4.57656],[3.14041,1.95003],[1.55693,3.86499],[-0.575928,6.34237],[5.73565,2.01669],[4.4831,1.76119],[4.07869,2.49699],[3.81543,1.76552],[2.23402,2.70941],[3.51585,4.94983],[1.65742,6.30102],[3.10432,3.86508],[4.43271,0.961489],[3.36871,0.868149],[4.31005,2.59764],[6.47643,-0.931607],[3.75584,2.17812],[6.34593,-0.923494],[2.2929,5.02226],[1.44593,2.60102],[3.20695,1.76426],[4.8112,1.95279],[2.03272,4.58738],[6.41876,1.54974],[1.98615,1.81804],[7.49246,0.317556],[1.97847,3.05754],[1.08586,5.18417],[4.62912,0.815053],[2.77708,4.37172],[2.67875,2.13048],[-0.937383,5.36078],[3.6775,3.67667],[4.27433,1.87264],[1.28823,5.89496],[2.52349,4.97276],[7.23935,-1.47338],[-0.0339296,3.86789],[3.46074,-1.08544],[3.02646,1.46992],[5.05552,0.435866],[3.43502,3.90638],[3.66314,1.88364],[2.06904,4.14327],[2.66455,6.88351],[4.88408,2.227],[4.22343,0.176259],[-1.8134,7.64625],[1.68768,3.14792],[3.87635,1.75252],[6.72076,0.287061],[6.45093,-0.412827],[1.5265,3.56895],[-1.51734,5.8982],[2.37064,1.3642],[1.63053,4.16891],[4.74744,-0.153496],[2.36243,5.02583],[2.14655,1.41195],[1.97122,4.5997],[3.0074,3.8697],[2.50553,3.9706],[2.93278,3.0097],[3.22051,2.37135],[2.80882,3.28389],[2.60249,3.88635],[3.32327,3.20276],[3.23294,2.69356],[5.98313,2.0811],[4.05329,1.36906],[2.73754,1.4658],[5.34829,2.23664],[2.32577,4.23381],[1.83508,2.2653],[2.0005,1.93341],[3.96617,2.47307],[2.8055,3.86668],[1.79591,2.51117],[1.2266,4.24938],[3.88397,2.91582],[-0.0291022,4.61098],[4.33536,0.244701],[2.94093,2.28906],[2.31569,6.01151],[5.31741,-0.602529],[1.31127,4.00465],[3.83854,1.32589]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Sample2 Cloud implementation=class=Cloud name=Sample2 Cloud derived from class=DrawableImplementation name=Sample2 Cloud legend=Sample2 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=50 dimension=2 description=[X0,X1] data=[[4.57481,-1.69166],[-0.75043,6.29414],[2.90575,2.15799],[3.42627,-0.560687],[-0.00834756,3.35841],[-0.914594,2.19357],[6.28461,-2.4883],[-3.19653,7.64221],[11.084,-2.21654],[-2.9448,4.1622],[4.31936,-0.790548],[1.89441,1.29272],[1.222,1.04664],[-5.61959,7.99366],[1.93482,3.13074],[2.4406,0.305869],[0.435212,4.31747],[0.589884,-0.781704],[0.702148,3.52023],[0.896031,4.95033],[1.89702,2.91234],[0.132727,0.568718],[0.370702,2.81828],[2.06265,3.07282],[4.30141,1.75871],[6.44092,-0.362931],[6.22686,-0.344461],[7.67979,-0.998336],[-0.722044,3.21013],[0.0846991,5.95966],[-4.79825,8.20042],[-0.988424,2.43323],[2.33324,2.9532],[-1.16505,4.52467],[3.6885,0.595891],[2.21062,1.40802],[-1.87092,3.26319],[-3.13393,7.80513],[0.373042,1.50317],[-2.21371,8.87388],[4.33872,2.17828],[4.13344,-0.522849],[3.85496,1.81571],[3.98006,1.2546],[0.776811,5.60509],[0.765304,3.97675],[6.35058,-2.06951],[-2.19387,7.69717],[0.544222,2.67429],[0.983531,1.38981]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw clouds\n", "ot.VisualTest.DrawClouds(sample1, sample2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/visualize_cobweb.ipynb000066400000000000000000003741301307543307100305160ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize cobweb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to display a CobWeb plot from samples of X/Y data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data to visualize\n", "size = 100\n", "inputDimension = 6\n", "inputSample = ot.Normal(inputDimension).getSample(size)\n", "inputVar = [None]*inputDimension\n", "for i in range(inputDimension):\n", " inputVar[i] = 'X' + str(i)\n", "inputSample.setDescription(inputVar)\n", "formula = ot.Description(1)\n", "expression = ''\n", "for i in range(inputDimension):\n", " if i > 0:\n", " expression += '+'\n", " expression += 'cos(' + str(i + 1) + '*' + inputVar[i] + ')'\n", "formula[0] = expression\n", "model = ot.SymbolicFunction(inputVar, formula)\n", "outputSample = model(inputSample)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] implementation=class=GraphImplementation name=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] title=Cobweb graph - [y0] vs [X0,X1,X2,X3,X4,X5] xTitle= yTitle= axes=OFF grid=OFF legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,77],[1,11],[2,21],[3,92],[4,2],[5,59],[6,41]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,37],[1,94],[2,77],[3,83],[4,37],[5,55],[6,2]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,1],[1,10],[2,4],[3,52],[4,86],[5,44],[6,34]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,23],[1,53],[2,49],[3,70],[4,14],[5,14],[6,86]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,76],[1,40],[2,51],[3,97],[4,57],[5,17],[6,96]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,19],[1,36],[2,1],[3,66],[4,89],[5,84],[6,97]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,81],[1,42],[2,62],[3,63],[4,68],[5,28],[6,54]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,36],[1,21],[2,48],[3,99],[4,28],[5,97],[6,60]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,55],[1,72],[2,71],[3,26],[4,61],[5,5],[6,24]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,94],[1,15],[2,27],[3,93],[4,23],[5,10],[6,20]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,57],[1,18],[2,81],[3,64],[4,36],[5,73],[6,17]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,95],[1,84],[2,18],[3,3],[4,98],[5,76],[6,50]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,29],[1,27],[2,10],[3,72],[4,85],[5,20],[6,16]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,45],[1,80],[2,35],[3,18],[4,4],[5,22],[6,23]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,69],[1,81],[2,67],[3,53],[4,19],[5,91],[6,63]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,40],[1,91],[2,99],[3,20],[4,7],[5,11],[6,52]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,65],[1,0],[2,40],[3,12],[4,87],[5,18],[6,94]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,64],[1,82],[2,50],[3,32],[4,38],[5,58],[6,32]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,43],[1,99],[2,82],[3,77],[4,77],[5,4],[6,11]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,0],[1,63],[2,13],[3,24],[4,71],[5,29],[6,1]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,98],[1,49],[2,94],[3,31],[4,25],[5,27],[6,15]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,2],[1,28],[2,30],[3,1],[4,27],[5,50],[6,64]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,83],[1,6],[2,29],[3,95],[4,39],[5,2],[6,51]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,27],[1,62],[2,39],[3,82],[4,46],[5,65],[6,53]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,49],[1,43],[2,42],[3,40],[4,51],[5,51],[6,99]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,42],[1,55],[2,44],[3,65],[4,59],[5,46],[6,98]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,92],[1,87],[2,61],[3,27],[4,48],[5,6],[6,13]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,86],[1,78],[2,28],[3,76],[4,31],[5,9],[6,14]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,30],[1,4],[2,57],[3,60],[4,50],[5,68],[6,56]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,22],[1,13],[2,11],[3,49],[4,72],[5,66],[6,12]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,4],[1,24],[2,70],[3,9],[4,53],[5,23],[6,59]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,38],[1,98],[2,85],[3,7],[4,20],[5,39],[6,36]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,73],[1,19],[2,79],[3,19],[4,17],[5,90],[6,38]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,68],[1,56],[2,55],[3,23],[4,29],[5,45],[6,49]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,16],[1,14],[2,90],[3,29],[4,5],[5,77],[6,10]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,99],[1,97],[2,2],[3,16],[4,82],[5,26],[6,0]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,47],[1,31],[2,33],[3,21],[4,0],[5,47],[6,93]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,50],[1,60],[2,43],[3,25],[4,34],[5,67],[6,31]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,54],[1,61],[2,75],[3,86],[4,91],[5,70],[6,30]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,90],[1,58],[2,96],[3,85],[4,18],[5,25],[6,28]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,56],[1,37],[2,5],[3,15],[4,6],[5,82],[6,57]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,26],[1,16],[2,3],[3,98],[4,83],[5,88],[6,48]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,80],[1,30],[2,66],[3,79],[4,79],[5,64],[6,8]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,35],[1,95],[2,24],[3,73],[4,90],[5,36],[6,45]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,6],[1,89],[2,19],[3,46],[4,43],[5,16],[6,42]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,97],[1,79],[2,87],[3,28],[4,54],[5,96],[6,25]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,70],[1,9],[2,6],[3,35],[4,21],[5,19],[6,7]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,75],[1,26],[2,16],[3,57],[4,52],[5,75],[6,87]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,20],[1,65],[2,65],[3,0],[4,22],[5,21],[6,18]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,28],[1,29],[2,86],[3,96],[4,95],[5,60],[6,46]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,74],[1,68],[2,17],[3,43],[4,10],[5,49],[6,91]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,11],[1,45],[2,72],[3,44],[4,40],[5,54],[6,58]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,96],[1,23],[2,93],[3,69],[4,45],[5,61],[6,33]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,72],[1,47],[2,91],[3,37],[4,49],[5,83],[6,89]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,18],[1,96],[2,53],[3,71],[4,70],[5,95],[6,9]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,51],[1,34],[2,45],[3,94],[4,55],[5,56],[6,95]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,44],[1,32],[2,98],[3,78],[4,41],[5,35],[6,62]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,7],[1,5],[2,46],[3,75],[4,47],[5,71],[6,29]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,79],[1,71],[2,56],[3,34],[4,94],[5,57],[6,37]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,59],[1,22],[2,59],[3,88],[4,32],[5,94],[6,19]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,41],[1,48],[2,88],[3,56],[4,96],[5,85],[6,88]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,87],[1,88],[2,32],[3,30],[4,58],[5,33],[6,44]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,71],[1,38],[2,9],[3,89],[4,63],[5,24],[6,47]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,9],[1,20],[2,76],[3,74],[4,88],[5,32],[6,26]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,3],[1,52],[2,34],[3,11],[4,24],[5,63],[6,35]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,93],[1,12],[2,12],[3,22],[4,99],[5,8],[6,4]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,62],[1,85],[2,36],[3,39],[4,26],[5,41],[6,55]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,12],[1,35],[2,89],[3,14],[4,80],[5,74],[6,22]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,53],[1,74],[2,38],[3,13],[4,9],[5,92],[6,85]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,33],[1,93],[2,78],[3,47],[4,30],[5,62],[6,6]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,89],[1,2],[2,68],[3,91],[4,76],[5,0],[6,5]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,32],[1,73],[2,47],[3,5],[4,60],[5,37],[6,90]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,13],[1,90],[2,15],[3,59],[4,15],[5,30],[6,39]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,91],[1,76],[2,80],[3,61],[4,69],[5,38],[6,21]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,15],[1,51],[2,37],[3,54],[4,93],[5,93],[6,84]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,17],[1,7],[2,20],[3,87],[4,11],[5,99],[6,27]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,88],[1,39],[2,7],[3,81],[4,75],[5,7],[6,3]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,39],[1,75],[2,73],[3,51],[4,35],[5,34],[6,40]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,8],[1,44],[2,25],[3,84],[4,3],[5,13],[6,61]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,85],[1,41],[2,97],[3,50],[4,56],[5,31],[6,92]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,61],[1,3],[2,84],[3,8],[4,81],[5,78],[6,43]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,67],[1,77],[2,52],[3,90],[4,92],[5,98],[6,83]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,78],[1,57],[2,95],[3,17],[4,67],[5,42],[6,67]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,31],[1,1],[2,22],[3,62],[4,42],[5,89],[6,80]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,48],[1,54],[2,14],[3,4],[4,33],[5,40],[6,70]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,21],[1,92],[2,0],[3,68],[4,16],[5,12],[6,81]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,58],[1,64],[2,8],[3,55],[4,74],[5,48],[6,69]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,46],[1,59],[2,74],[3,80],[4,12],[5,79],[6,68]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,84],[1,46],[2,60],[3,2],[4,66],[5,72],[6,71]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,66],[1,50],[2,64],[3,36],[4,73],[5,1],[6,76]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,5],[1,83],[2,54],[3,48],[4,65],[5,81],[6,66]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,34],[1,17],[2,63],[3,6],[4,78],[5,87],[6,73]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,52],[1,8],[2,23],[3,10],[4,44],[5,80],[6,74]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,14],[1,25],[2,26],[3,42],[4,97],[5,3],[6,78]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,63],[1,86],[2,41],[3,38],[4,84],[5,52],[6,72]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,25],[1,66],[2,69],[3,45],[4,64],[5,15],[6,75]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,60],[1,33],[2,31],[3,33],[4,62],[5,69],[6,77]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,24],[1,69],[2,58],[3,67],[4,8],[5,43],[6,82]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,10],[1,67],[2,92],[3,58],[4,1],[5,53],[6,65]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,82],[1,70],[2,83],[3,41],[4,13],[5,86],[6,79]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[0,100]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0],[1,100]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0],[2,100]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X3 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4,0],[4,100]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X5 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[5,0],[5,100]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[6,0],[6,100]] color=black fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw CobWeb\n", "graphCobweb = ot.VisualTest.DrawCobWeb(inputSample, outputSample, 1.0, 2.0, 'red', False)\n", "graphCobweb.setLegendPosition('topleft')\n", "graphCobweb" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/visualize_empirical_cdf.ipynb000066400000000000000000001322611307543307100320330ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize empirical CDF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to draw the empirical CDF of an unidimensional sample." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data to visualize\n", "size = 100\n", "normal = ot.Normal(1)\n", "sample = normal.getSample(size)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=102 dimension=2 data=[[-4.09737,0],[-3.09737,0.01],[-2.4067,0.02],[-2.25867,0.03],[-1.89234,0.04],[-1.78274,0.05],[-1.55516,0.06],[-1.5375,0.07],[-1.51696,0.08],[-1.51455,0.09],[-1.46295,0.1],[-1.45717,0.11],[-1.45347,0.12],[-1.40585,0.13],[-1.38886,0.14],[-1.29938,0.15],[-1.25743,0.16],[-1.21009,0.17],[-0.886698,0.18],[-0.844367,0.19],[-0.836064,0.2],[-0.766431,0.21],[-0.751611,0.22],[-0.736749,0.23],[-0.684734,0.24],[-0.676917,0.25],[-0.656923,0.26],[-0.65616,0.27],[-0.631829,0.28],[-0.602044,0.29],[-0.5964,0.3],[-0.582459,0.31],[-0.543405,0.32],[-0.514391,0.33],[-0.508206,0.34],[-0.499748,0.35],[-0.488205,0.36],[-0.465482,0.37],[-0.455335,0.38],[-0.426726,0.39],[-0.37687,0.4],[-0.342157,0.41],[-0.337113,0.42],[-0.318786,0.43],[-0.31468,0.44],[-0.28861,0.45],[-0.247234,0.46],[-0.198754,0.47],[-0.167726,0.48],[-0.141114,0.49],[-0.131228,0.5],[-0.10008,0.51],[-0.0972525,0.52],[-0.0955894,0.53],[-0.0367271,0.54],[-0.0336098,0.55],[-0.0295335,0.56],[0.00370249,0.57],[0.01323,0.58],[0.0611157,0.59],[0.109122,0.6],[0.110256,0.61],[0.116468,0.62],[0.161637,0.63],[0.205004,0.64],[0.217512,0.65],[0.219721,0.66],[0.230372,0.67],[0.331569,0.68],[0.332084,0.69],[0.384483,0.7],[0.419271,0.71],[0.438177,0.72],[0.441983,0.73],[0.47362,0.74],[0.479191,0.75],[0.483083,0.76],[0.519162,0.77],[0.526646,0.78],[0.578688,0.79],[0.592563,0.8],[0.611715,0.81],[0.61189,0.82],[0.647229,0.83],[0.662936,0.84],[0.667678,0.85],[0.729688,0.86],[0.87372,0.87],[0.929395,0.88],[0.94204,0.89],[1.02776,0.9],[1.04533,0.91],[1.1587,0.92],[1.17414,0.93],[1.22301,0.94],[1.26314,0.95],[1.49156,0.96],[1.72546,0.97],[1.86038,0.98],[2.05339,0.99],[3.01263,1],[4.01263,1]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw empirial CDF\n", "xmin = sample.getMin()[0] - 1.0\n", "xmax = sample.getMax()[0] + 1.0\n", "ot.VisualTest.DrawEmpiricalCDF(sample, xmin, xmax)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/visualize_histogram.ipynb000066400000000000000000001502671307543307100312550ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize an histogram from data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to a plot an histogram from an unidimensional sample." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data to visualize\n", "size = 500\n", "normal = ot.Normal(1)\n", "sample = normal.getSample(size)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=sample histogram implementation=class=GraphImplementation name=sample histogram title=sample histogram xTitle=realizations yTitle=frequency axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Normal histogram implementation=class=BarPlot name=Normal histogram origin=-3.47227 derived from class=DrawableImplementation name=Normal histogram legend=Normal histogram data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=15 dimension=2 data=[[0.451798,0.0132803],[0.451798,0.00442676],[0.451798,0.0132803],[0.451798,0.0752549],[0.451798,0.132803],[0.451798,0.234618],[0.451798,0.354141],[0.451798,0.473663],[0.451798,0.345287],[0.451798,0.243472],[0.451798,0.172644],[0.451798,0.0619746],[0.451798,0.0708281],[0.451798,0.0132803],[0.451798,0.00442676]] color=purple fillStyle=shaded lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw histogram\n", "ot.VisualTest_DrawHistogram(sample)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/statistical_estimation/visualize_pairs.ipynb000066400000000000000000006546421307543307100304040ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize pairs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we are going to a visualize a multidimensional sample by drawing each pair of 2-d marginal clouds." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create data to visualize\n", "R = ot.CorrelationMatrix(3)\n", "for i in range(1, 3):\n", " R[i, i - 1] = -0.4\n", "distribution = ot.Normal([0.] * 3, [5.] * 3, R)\n", "sample = distribution.getSample(200)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Pairs graph implementation=class=GraphImplementation name=Pairs graph title=Pairs graph xTitle= yTitle= axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pairs name=Unnamed data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=200 dimension=3 description=[X0,X1,X2] data=[[0.219031,-10.5704,0.544401],[3.71303,-3.02947,2.25777],[3.24952,-3.6035,8.80433],[3.661,0.644035,8.48508],[3.19847,-2.08267,-0.209712],[-6.06366,6.36765,1.48659],[-4.98318,4.754,3.95354],[-0.524267,-0.860712,3.59254],[-4.04807,7.62182,4.09988],[-7.22773,5.14717,-3.27991],[0.761679,11.2508,-4.00152],[-12.9581,11.6362,-6.59602],[-4.7173,0.281239,-2.80309],[0.677634,2.28495,-7.87677],[-1.10688,-0.325268,-1.86587],[-7.94357,3.67894,-3.3336],[-2.42722,6.45074,-6.92959],[-9.284,0.861328,6.26376],[1.89424,0.701521,1.31271],[-5.04895,10.0301,-4.84996],[1.55055,3.36824,3.64697],[-1.60661,8.78986,-8.11768],[2.10514,-6.11155,1.33188],[7.65943,-2.4331,4.30393],[2.29623,-2.85036,-8.5199],[4.48249,-8.50863,-3.70574],[-3.83581,4.38214,6.55875],[0.165995,-3.23864,-0.962693],[0.575574,-2.98157,5.20969],[-4.48435,-1.41316,8.60066],[9.86993,-7.49768,4.30483],[-1.94935,6.18557,-8.78195],[-1.2652,2.12738,-0.0212056],[7.89361,-7.00569,1.01457],[-4.08914,3.67055,4.58323],[0.276503,-3.90727,-1.6879],[4.6735,-1.32155,8.07208],[-6.67657,4.59526,-0.907023],[-5.90879,8.50757,-1.35059],[6.35962,-7.49725,5.25809],[-2.38778,-5.54831,2.99967],[-0.813166,-2.4636,3.14151],[6.03996,-6.55659,8.2477],[5.37809,-3.77726,-1.59629],[-9.79618,0.641929,8.06844],[2.22395,5.21148,-1.63646],[11.1058,1.30993,-4.20412],[-1.69997,-5.95689,-1.46158],[0.803698,-2.85161,9.49253],[-8.35362,-6.2965,2.06027],[1.80969,0.0298482,1.44892],[-1.15237,-1.41839,4.4503],[5.58288,-5.97351,5.9144],[-2.68307,0.640935,6.02836],[3.01219,1.61725,-4.17982],[-7.02413,1.54046,-0.765738],[-1.28219,-5.17149,1.94603],[0.228384,-3.29808,4.73373],[3.5103,2.63349,-6.59558],[-1.83626,4.38928,-1.21213],[3.64397,0.925106,0.657645],[1.43184,7.22358,-2.19382],[4.06975,2.05747,-1.47603],[6.62347,-2.58513,-2.84148],[-4.16633,-2.00032,0.808974],[-7.305,6.14219,-9.64886],[-2.8898,7.90507,-7.82223],[6.74376,-1.93741,-2.42698],[2.20333,8.0952,-11.0509],[1.18911,4.31915,-1.93087],[3.24251,-7.79913,-3.56086],[-6.57921,1.57242,2.46886],[0.944571,3.51552,-2.72732],[3.87329,-3.78464,-5.91672],[3.08909,-0.513338,1.89376],[-7.94676,4.87692,2.28532],[5.47044,-10.774,1.6251],[8.64353,-2.4053,-6.96919],[-1.01299,-2.76227,7.00628],[-6.36955,-0.338391,-4.4524],[3.587,-5.90216,1.7436],[-1.59292,8.83286,-5.79267],[6.31117,-0.150175,0.669939],[3.6803,-0.198304,4.99874],[7.19713,-7.12056,10.3366],[4.03957,1.6111,0.924773],[0.218883,-2.13905,4.26605],[5.50839,-0.756674,-4.82386],[0.749073,-0.470706,-7.84038],[1.24607,-1.60095,6.25624],[-6.85566,-1.02109,4.43051],[6.49079,-8.93867,16.0854],[-3.40446,0.663643,-1.99472],[6.24809,6.05724,-5.05529],[2.78228,7.60333,1.52733],[1.47519,2.15198,5.41622],[-1.66611,-1.6471,3.53894],[-3.67012,-2.88391,5.22963],[3.49852,-4.41996,1.26208],[-1.58725,5.09025,-4.10009],[-2.6197,0.284631,5.73903],[-9.96409,12.5336,-4.47844],[6.71029,0.708858,-5.86163],[-6.82405,-2.32632,-4.0715],[1.05077,-1.28975,-6.15288],[2.00148,2.20485,-2.41408],[0.352292,0.47221,8.34883],[-1.2148,5.86204,0.416713],[5.0605,2.08319,1.45279],[2.41693,4.46843,-14.5416],[-2.61077,5.65497,3.09713],[-0.227703,-4.48586,-0.0655174],[-2.16565,-4.24589,-1.59345],[1.05161,-0.547744,-7.66564],[0.141296,-5.7465,-1.94081],[-8.93785,4.98817,-2.3137],[4.92314,-7.15077,1.80946],[1.80236,-0.704081,-8.35102],[-7.18829,1.06579,2.16088],[-0.123246,-7.60515,8.88504],[8.87711,-2.4337,-2.38661],[2.79549,3.05554,2.43978],[-0.532182,2.76749,3.68999],[4.17452,0.290605,-3.50194],[5.30106,-4.43215,6.04089],[-9.90983,-0.779403,2.3849],[-3.6145,6.28632,-4.49744],[3.48313,3.47867,-1.62223],[-3.23784,8.3272,-0.499255],[5.26865,-3.02976,0.149003],[5.52411,-1.08509,5.12166],[-1.29418,2.45663,7.4382],[-3.92627,0.49519,4.14997],[1.49288,4.65476,-1.82883],[4.09703,-4.43749,1.02864],[4.82943,3.21571,-6.53579],[-3.59072,5.09234,-0.430677],[7.75898,3.76629,-10.7396],[0.982575,4.76432,-2.62694],[0.705941,-0.547997,5.37047],[-4.19196,11.7492,-13.0052],[3.36753,0.721504,11.0155],[3.76255,-5.06115,4.23826],[1.31577,7.62045,-0.606772],[3.04214,5.97084,-6.31671],[3.95943,3.33737,-5.67064],[-2.76463,-5.40574,7.84859],[-2.64253,-2.56405,2.24582],[-6.15809,3.32226,-10.7986],[1.03384,-0.23579,-5.43724],[-14.0325,4.48566,2.64134],[4.70635,-0.801841,4.82211],[1.19611,-4.33354,0.219846],[1.94261,5.09547,7.72619],[-5.48594,-1.14071,7.32348],[-3.28759,1.0755,-1.43828],[7.51882,-7.31573,0.576203],[-2.91377,-6.15272,8.76321],[5.81035,-2.78971,4.25599],[3.14262,3.07309,4.37512],[-0.689778,-7.35653,6.76047],[10.0325,-6.63546,10.8854],[3.7969,-1.47164,1.12947],[1.60464,-5.2477,-4.09975],[-5.68849,0.798488,-1.04245],[1.6087,-3.54435,6.09708],[0.111411,0.963049,-1.12669],[3.57094,-3.2054,-5.62273],[-5.72423,12.4249,-6.9663],[2.1179,-5.54667,-3.8612],[-2.45533,3.99742,-6.78348],[3.08248,1.56338,-2.59877],[-6.06715,5.62306,-7.27716],[-5.15413,0.217273,1.77185],[1.82353,-1.87213,4.36631],[2.29866,2.14433,-0.276762],[0.424926,-1.87755,5.58494],[-11.707,7.28779,6.30613],[3.03159,-7.48016,2.72536],[3.39354,6.03083,-0.574047],[6.11369,-5.74706,-2.77927],[-1.22236,-3.2045,7.14692],[-2.39466,2.52712,-1.76163],[-3.78426,8.86329,0.00767421],[-6.97592,7.31432,0.553121],[3.39452,-6.65423,4.85787],[-0.167995,-8.93851,2.08291],[5.96636,-3.60183,-2.77488],[-0.0614455,6.24367,-4.26133],[-3.75288,-3.33744,-0.0420782],[-7.40043,-2.73524,0.501572],[3.00948,-0.425428,2.38832],[-0.367883,-4.99372,4.99873],[2.07679,-0.999714,-6.95502],[-0.456252,2.8734,-1.22273],[0.276518,1.95882,-2.48568],[8.06688,2.20756,-8.49513],[-5.17892,5.04774,-8.39292],[1.6117,0.56575,2.95781],[-1.81742,-0.0830087,0.729798]] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=200 dimension=3 description=[X0,X1,X2] data=[[0.219031,-10.5704,0.544401],[3.71303,-3.02947,2.25777],[3.24952,-3.6035,8.80433],[3.661,0.644035,8.48508],[3.19847,-2.08267,-0.209712],[-6.06366,6.36765,1.48659],[-4.98318,4.754,3.95354],[-0.524267,-0.860712,3.59254],[-4.04807,7.62182,4.09988],[-7.22773,5.14717,-3.27991],[0.761679,11.2508,-4.00152],[-12.9581,11.6362,-6.59602],[-4.7173,0.281239,-2.80309],[0.677634,2.28495,-7.87677],[-1.10688,-0.325268,-1.86587],[-7.94357,3.67894,-3.3336],[-2.42722,6.45074,-6.92959],[-9.284,0.861328,6.26376],[1.89424,0.701521,1.31271],[-5.04895,10.0301,-4.84996],[1.55055,3.36824,3.64697],[-1.60661,8.78986,-8.11768],[2.10514,-6.11155,1.33188],[7.65943,-2.4331,4.30393],[2.29623,-2.85036,-8.5199],[4.48249,-8.50863,-3.70574],[-3.83581,4.38214,6.55875],[0.165995,-3.23864,-0.962693],[0.575574,-2.98157,5.20969],[-4.48435,-1.41316,8.60066],[9.86993,-7.49768,4.30483],[-1.94935,6.18557,-8.78195],[-1.2652,2.12738,-0.0212056],[7.89361,-7.00569,1.01457],[-4.08914,3.67055,4.58323],[0.276503,-3.90727,-1.6879],[4.6735,-1.32155,8.07208],[-6.67657,4.59526,-0.907023],[-5.90879,8.50757,-1.35059],[6.35962,-7.49725,5.25809],[-2.38778,-5.54831,2.99967],[-0.813166,-2.4636,3.14151],[6.03996,-6.55659,8.2477],[5.37809,-3.77726,-1.59629],[-9.79618,0.641929,8.06844],[2.22395,5.21148,-1.63646],[11.1058,1.30993,-4.20412],[-1.69997,-5.95689,-1.46158],[0.803698,-2.85161,9.49253],[-8.35362,-6.2965,2.06027],[1.80969,0.0298482,1.44892],[-1.15237,-1.41839,4.4503],[5.58288,-5.97351,5.9144],[-2.68307,0.640935,6.02836],[3.01219,1.61725,-4.17982],[-7.02413,1.54046,-0.765738],[-1.28219,-5.17149,1.94603],[0.228384,-3.29808,4.73373],[3.5103,2.63349,-6.59558],[-1.83626,4.38928,-1.21213],[3.64397,0.925106,0.657645],[1.43184,7.22358,-2.19382],[4.06975,2.05747,-1.47603],[6.62347,-2.58513,-2.84148],[-4.16633,-2.00032,0.808974],[-7.305,6.14219,-9.64886],[-2.8898,7.90507,-7.82223],[6.74376,-1.93741,-2.42698],[2.20333,8.0952,-11.0509],[1.18911,4.31915,-1.93087],[3.24251,-7.79913,-3.56086],[-6.57921,1.57242,2.46886],[0.944571,3.51552,-2.72732],[3.87329,-3.78464,-5.91672],[3.08909,-0.513338,1.89376],[-7.94676,4.87692,2.28532],[5.47044,-10.774,1.6251],[8.64353,-2.4053,-6.96919],[-1.01299,-2.76227,7.00628],[-6.36955,-0.338391,-4.4524],[3.587,-5.90216,1.7436],[-1.59292,8.83286,-5.79267],[6.31117,-0.150175,0.669939],[3.6803,-0.198304,4.99874],[7.19713,-7.12056,10.3366],[4.03957,1.6111,0.924773],[0.218883,-2.13905,4.26605],[5.50839,-0.756674,-4.82386],[0.749073,-0.470706,-7.84038],[1.24607,-1.60095,6.25624],[-6.85566,-1.02109,4.43051],[6.49079,-8.93867,16.0854],[-3.40446,0.663643,-1.99472],[6.24809,6.05724,-5.05529],[2.78228,7.60333,1.52733],[1.47519,2.15198,5.41622],[-1.66611,-1.6471,3.53894],[-3.67012,-2.88391,5.22963],[3.49852,-4.41996,1.26208],[-1.58725,5.09025,-4.10009],[-2.6197,0.284631,5.73903],[-9.96409,12.5336,-4.47844],[6.71029,0.708858,-5.86163],[-6.82405,-2.32632,-4.0715],[1.05077,-1.28975,-6.15288],[2.00148,2.20485,-2.41408],[0.352292,0.47221,8.34883],[-1.2148,5.86204,0.416713],[5.0605,2.08319,1.45279],[2.41693,4.46843,-14.5416],[-2.61077,5.65497,3.09713],[-0.227703,-4.48586,-0.0655174],[-2.16565,-4.24589,-1.59345],[1.05161,-0.547744,-7.66564],[0.141296,-5.7465,-1.94081],[-8.93785,4.98817,-2.3137],[4.92314,-7.15077,1.80946],[1.80236,-0.704081,-8.35102],[-7.18829,1.06579,2.16088],[-0.123246,-7.60515,8.88504],[8.87711,-2.4337,-2.38661],[2.79549,3.05554,2.43978],[-0.532182,2.76749,3.68999],[4.17452,0.290605,-3.50194],[5.30106,-4.43215,6.04089],[-9.90983,-0.779403,2.3849],[-3.6145,6.28632,-4.49744],[3.48313,3.47867,-1.62223],[-3.23784,8.3272,-0.499255],[5.26865,-3.02976,0.149003],[5.52411,-1.08509,5.12166],[-1.29418,2.45663,7.4382],[-3.92627,0.49519,4.14997],[1.49288,4.65476,-1.82883],[4.09703,-4.43749,1.02864],[4.82943,3.21571,-6.53579],[-3.59072,5.09234,-0.430677],[7.75898,3.76629,-10.7396],[0.982575,4.76432,-2.62694],[0.705941,-0.547997,5.37047],[-4.19196,11.7492,-13.0052],[3.36753,0.721504,11.0155],[3.76255,-5.06115,4.23826],[1.31577,7.62045,-0.606772],[3.04214,5.97084,-6.31671],[3.95943,3.33737,-5.67064],[-2.76463,-5.40574,7.84859],[-2.64253,-2.56405,2.24582],[-6.15809,3.32226,-10.7986],[1.03384,-0.23579,-5.43724],[-14.0325,4.48566,2.64134],[4.70635,-0.801841,4.82211],[1.19611,-4.33354,0.219846],[1.94261,5.09547,7.72619],[-5.48594,-1.14071,7.32348],[-3.28759,1.0755,-1.43828],[7.51882,-7.31573,0.576203],[-2.91377,-6.15272,8.76321],[5.81035,-2.78971,4.25599],[3.14262,3.07309,4.37512],[-0.689778,-7.35653,6.76047],[10.0325,-6.63546,10.8854],[3.7969,-1.47164,1.12947],[1.60464,-5.2477,-4.09975],[-5.68849,0.798488,-1.04245],[1.6087,-3.54435,6.09708],[0.111411,0.963049,-1.12669],[3.57094,-3.2054,-5.62273],[-5.72423,12.4249,-6.9663],[2.1179,-5.54667,-3.8612],[-2.45533,3.99742,-6.78348],[3.08248,1.56338,-2.59877],[-6.06715,5.62306,-7.27716],[-5.15413,0.217273,1.77185],[1.82353,-1.87213,4.36631],[2.29866,2.14433,-0.276762],[0.424926,-1.87755,5.58494],[-11.707,7.28779,6.30613],[3.03159,-7.48016,2.72536],[3.39354,6.03083,-0.574047],[6.11369,-5.74706,-2.77927],[-1.22236,-3.2045,7.14692],[-2.39466,2.52712,-1.76163],[-3.78426,8.86329,0.00767421],[-6.97592,7.31432,0.553121],[3.39452,-6.65423,4.85787],[-0.167995,-8.93851,2.08291],[5.96636,-3.60183,-2.77488],[-0.0614455,6.24367,-4.26133],[-3.75288,-3.33744,-0.0420782],[-7.40043,-2.73524,0.501572],[3.00948,-0.425428,2.38832],[-0.367883,-4.99372,4.99873],[2.07679,-0.999714,-6.95502],[-0.456252,2.8734,-1.22273],[0.276518,1.95882,-2.48568],[8.06688,2.20756,-8.49513],[-5.17892,5.04774,-8.39292],[1.6117,0.56575,2.95781],[-1.81742,-0.0830087,0.729798]] color=blue fillStyle=solid lineStyle=solid pointStyle=bullet lineWidth=1]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a pairs graphs\n", "graph = ot.Graph(\"Pairs graph\", \" \", \" \", True, \"\")\n", "pairs = ot.Pairs(sample, \"Pairs example\",\n", " sample.getDescription(), \"blue\", \"bullet\")\n", "graph.add(pairs)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/000077500000000000000000000000001307543307100247725ustar00rootroot00000000000000openturns-1.9/python/doc/examples/uncertainty_quantification/composite_experiment.ipynb000066400000000000000000001236421307543307100323070ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a composite design of experiments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a deterministic design experiment of type composite." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define position, scale\n", "center = [0.5, 1.5]\n", "levels = [4, 8, 16]\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the design\n", "myPlane = ot.Composite(center, levels)\n", "sample = myPlane.generate()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Composite design implementation=class=GraphImplementation name=Composite design title=Composite design xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Composite plane implementation=class=SampleImplementation name=Composite plane size=25 dimension=2 data=[[0.5,1.5],[-3.5,-2.5],[4.5,-2.5],[-3.5,5.5],[4.5,5.5],[-7.5,-6.5],[8.5,-6.5],[-7.5,9.5],[8.5,9.5],[-15.5,-14.5],[16.5,-14.5],[-15.5,17.5],[16.5,17.5],[4.5,1.5],[-3.5,1.5],[0.5,5.5],[0.5,-2.5],[8.5,1.5],[-7.5,1.5],[0.5,9.5],[0.5,-6.5],[16.5,1.5],[-15.5,1.5],[0.5,17.5],[0.5,-14.5]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot the design\n", "graph = ot.Graph(\"Composite design\", \"x1\", \"x2\", True, \"\")\n", "cloud = ot.Cloud(sample, \"blue\", \"fsquare\", \"\")\n", "graph.add(cloud)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/estimate_moments_taylor.ipynb000066400000000000000000001245261307543307100330160ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate moments from Taylor expansions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate mean and standard deviation of a composite random vector." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a composite random vector\n", "ot.RandomGenerator.SetSeed(0)\n", "input_names = ['x1', 'x2', 'x3', 'x4']\n", "myFunc = ot.SymbolicFunction(input_names,\n", " ['cos(x2*x2+x4)/(x1*x1+1+x3^4)'])\n", "R = ot.CorrelationMatrix(4)\n", "for i in range(4):\n", " R[i, i - 1] = 0.25\n", "distribution = ot.Normal([0.2]*4, [0.1, 0.2, 0.3, 0.4], R)\n", "distribution.setDescription(input_names)\n", "# We create a distribution-based RandomVector\n", "X = ot.RandomVector(distribution)\n", "# We create a composite RandomVector Y from X and myFunc\n", "Y = ot.RandomVector(myFunc, X)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# We create a Taylor expansion method to approximate moments\n", "myTaylorExpansionMoments = ot.TaylorExpansionMoments(Y)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.932544]\n" ] } ], "source": [ "# get mean\n", "print(myTaylorExpansionMoments.getMeanFirstOrder())" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.0124546 ]]\n" ] } ], "source": [ "# get covariance\n", "print(myTaylorExpansionMoments.getCovariance())" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Quadratic Cumul - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[x1 : 18.2%,x2 : 4.3%,x3 : 2.5%,x4 : 75.0%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#ccff00,#00ff66,#0066ff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.181718],[0.0430356],[0.0248297],[0.750417]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "myTaylorExpansionMoments.drawImportanceFactors()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/estimate_probability_form.ipynb000066400000000000000000001344141307543307100333020ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate a probability with FORM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate a failure probability.\n", "\n", "Let's consider the following analytical example of a cantilever beam, of Young's modulus E, length L, section modulus I.\n", "\n", "One end is built in a wall and we apply a concentrated bending load F at the other end of the beam, resulting in a deviation:\n", "$$d = \\frac{F*L^3}{3*E*I}$$\n", "\n", "It is considered that failure occurs when the beam deviation is too important:\n", "\n", "$$d \\ge 30 (cm) $$\n", "\n", "Four independent random variables are considered:\n", "\n", " - E (the Young's modulus) [Pa]\n", " - F (the load) [N]\n", " - L (the length) # [m]\n", " - I (the section) # [m^4]\n", "\n", "Stochastic model (simplified model, no units):\n", "\n", " - E ~ Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", " - F ~ LogNormal(30000, 9000, 15000)\n", " - L ~ Uniform(250, 260)\n", " - I ~ Beta(2.5, 4.0, 3.1e2, 4.5e2)\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the marginal distributions of the parameters\n", "dist_E = ot.Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", "dist_F = ot.LogNormalMuSigma(30000, 9000, 15000).getDistribution()\n", "dist_L = ot.Uniform(250, 260)\n", "dist_I = ot.Beta(2.5, 4.0, 3.1e2, 4.5e2)\n", "marginals = [dist_E, dist_F, dist_L, dist_I]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the Copula\n", "RS = ot.CorrelationMatrix(4)\n", "RS[2, 3] = -0.2\n", "# Evaluate the correlation matrix of the Normal copula from RS\n", "R = ot.NormalCopula.GetCorrelationFromSpearmanCorrelation(RS)\n", "# Create the Normal copula parametrized by R\n", "copula = ot.NormalCopula(R) " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the joint probability distribution\n", "distribution = ot.ComposedDistribution(marginals, copula)\n", "distribution.setDescription(['E', 'F', 'L', 'I'])" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the model\n", "model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['F*L^3/(3*E*I)'])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create the event we want to estimate the probability\n", "vect = ot.RandomVector(distribution)\n", "G = ot.CompositeRandomVector(model, vect)\n", "event = ot.Event(G, ot.Greater(), 30.0)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define a solver\n", "optimAlgo = ot.Cobyla()\n", "optimAlgo.setMaximumIterationNumber(1000)\n", "optimAlgo.setMaximumAbsoluteError(1.0e-10)\n", "optimAlgo.setMaximumRelativeError(1.0e-10)\n", "optimAlgo.setMaximumResidualError(1.0e-10)\n", "optimAlgo.setMaximumConstraintError(1.0e-10)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Run FORM\n", "algo = ot.FORM(optimAlgo, event, distribution.getMean())\n", "algo.run()\n", "result = algo.getResult()\n", "standardSpaceDesignPoint = result.getStandardSpaceDesignPoint()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pf= 0.00670980426490075\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "probability = result.getEventProbability()\n", "print('Pf=', probability)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Design Point - Unnamed xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[E : 5.9%,F : 86.3%,L : 2.0%,I : 5.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#ccff00,#00ff66,#0066ff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.058682],[0.863351],[0.0204716],[0.0574957]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Importance factors\n", "result.drawImportanceFactors()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } estimate_probability_importance_sampling.ipynb000066400000000000000000000130121307543307100363010ustar00rootroot00000000000000openturns-1.9/python/doc/examples/uncertainty_quantification{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate a probability with importance simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate a failure probability.\n", "\n", "Let's consider the following analytical example of a cantilever beam, of Young's modulus E, length L, section modulus I.\n", "\n", "One end is built in a wall and we apply a concentrated bending load F at the other end of the beam, resulting in a deviation:\n", "$$d = \\frac{F*L^3}{3*E*I}$$\n", "\n", "It is considered that failure occurs when the beam deviation is too important:\n", "\n", "$$d \\ge 30 (cm) $$\n", "\n", "Four independent random variables are considered:\n", "\n", " - E (the Young's modulus) [Pa]\n", " - F (the load) [N]\n", " - L (the length) # [m]\n", " - I (the section) # [m^4]\n", "\n", "Stochastic model (simplified model, no units):\n", "\n", " - E ~ Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", " - F ~ LogNormal(30000, 9000, 15000)\n", " - L ~ Uniform(250, 260)\n", " - I ~ Beta(2.5, 4.0, 3.1e2, 4.5e2)\n" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the marginal distributions of the parameters\n", "dist_E = ot.Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", "dist_F = ot.LogNormalMuSigma(30000, 9000, 15000).getDistribution()\n", "dist_L = ot.Uniform(250, 260)\n", "dist_I = ot.Beta(2.5, 4.0, 3.1e2, 4.5e2)\n", "marginals = [dist_E, dist_F, dist_L, dist_I]" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the Copula\n", "RS = ot.CorrelationMatrix(4)\n", "RS[2, 3] = -0.2\n", "# Evaluate the correlation matrix of the Normal copula from RS\n", "R = ot.NormalCopula.GetCorrelationFromSpearmanCorrelation(RS)\n", "# Create the Normal copula parametrized by R\n", "copula = ot.NormalCopula(R) " ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the joint probability distribution\n", "distribution = ot.ComposedDistribution(marginals, copula)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the model\n", "model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['F*L^3/(3*E*I)'])" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create the event we want to estimate the probability\n", "vect = ot.RandomVector(distribution)\n", "G = ot.CompositeRandomVector(model, vect)\n", "event = ot.Event(G, ot.Greater(), 30.0)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define a solver\n", "optimAlgo = ot.Cobyla()\n", "optimAlgo.setMaximumIterationNumber(1000)\n", "optimAlgo.setMaximumAbsoluteError(1.0e-10)\n", "optimAlgo.setMaximumRelativeError(1.0e-10)\n", "optimAlgo.setMaximumResidualError(1.0e-10)\n", "optimAlgo.setMaximumConstraintError(1.0e-10)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Run FORM\n", "algo = ot.FORM(optimAlgo, event, distribution.getMean())\n", "algo.run()\n", "result = algo.getResult()\n", "standardSpaceDesignPoint = result.getStandardSpaceDesignPoint()" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the importance distribution\n", "myImportance = ot.Normal(standardSpaceDesignPoint, [1.0] * 4, ot.CorrelationMatrix(4))" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a simulation algorithm\n", "algo = ot.ImportanceSampling(ot.StandardEvent(event), myImportance)\n", "#algo = ot.MonteCarlo(event)\n", "algo.setMaximumCoefficientOfVariation(0.1)\n", "algo.setMaximumOuterSampling(40000)\n", "algo.setConvergenceStrategy(ot.Full())\n", "algo.run()" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pf= 0.005064811687882659\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('Pf=', probability)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/estimate_probability_lhs.ipynb000066400000000000000000000076531307543307100331310ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate a probability with LHS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate a probability by means of a simulation algorithm.\n", "\n", "This model is a simple beam, restrained at one side and stressed by a traction load F at the other side.\n", "\n", "The geometry is supposed to be deterministic: the diameter D is fixed to D=20 mm.\n", "\n", "It is considered that failure occurs when the beam plastifies, i.e. when the axial stress gets bigger than the yield stress:\n", "$$\\sigma_e = \\frac{F}{\\pi-D^2/4} \\leq 0$$\n", "\n", "Therefore, the state limit G used here is:\n", "$$G = \\sigma_e - \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Two independent random variables R and S are considered:\n", "\n", " - R (the strength): $$R = \\sigma_e$$\n", " - S (the load): $$S = \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Stochastic model:\n", "\n", " - F ~ Normal(75e3, 5e3) [N]\n", " - R ~ LogNormal(300, 30) [N]\n", "\n", "Theoretical results:\n", "\n", "This two dimensional stochastic problem can be solved by calculating directly the failure probability: \n", "\n", "$$P_f = \\text{Prob}(R-S \\leq 0) = \\int_{r-s \\leq 0} f_{R, S}(r, s)drds$$\n", "\n", "If R and S are independant, then: \n", "\n", "$$\\int_{-\\infty}^{+\\infty}f_S(x)F_R(x)dx$$\n", "\n", "The numerical application gives: $$P_f = 0.0292$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the joint distribution of the parameters\n", "distribution_R = ot.LogNormalMuSigma(300.0, 30.0, 0.0).getDistribution()\n", "distribution_F = ot.Normal(75e3, 5e3)\n", "marginals = [distribution_R, distribution_F]\n", "distribution = ot.ComposedDistribution(marginals)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the model\n", "model = ot.SymbolicFunction(['R', 'F'], ['R-F/(_pi*100.0)'])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the event we want to estimate the probability\n", "vect = ot.RandomVector(distribution)\n", "G = ot.RandomVector(model, vect)\n", "event = ot.Event(G, ot.Less(), 0.0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create a Monte Carlo algorithm\n", "algo = ot.LHS(event)\n", "algo.setMaximumCoefficientOfVariation(0.05)\n", "algo.setMaximumOuterSampling(int(1e5))\n", "algo.run()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pf= 0.029342988609791055\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('Pf=', probability)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/estimate_probability_monte_carlo.ipynb000066400000000000000000000076771307543307100346530ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate a probability with Monte Carlo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate a probability by means of a simulation algorithm.\n", "\n", "This model is a simple beam, restrained at one side and stressed by a traction load F at the other side.\n", "\n", "The geometry is supposed to be deterministic: the diameter D is fixed to D=20 mm.\n", "\n", "It is considered that failure occurs when the beam plastifies, i.e. when the axial stress gets bigger than the yield stress:\n", "$$\\sigma_e = \\frac{F}{\\pi-D^2/4} \\leq 0$$\n", "\n", "Therefore, the state limit G used here is:\n", "$$G = \\sigma_e - \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Two independent random variables R and S are considered:\n", "\n", " - R (the strength): $$R = \\sigma_e$$\n", " - S (the load): $$S = \\frac{F}{\\pi-D^2/4}$$\n", "\n", "Stochastic model:\n", "\n", " - F ~ Normal(75e3, 5e3) [N]\n", " - R ~ LogNormal(300, 30) [N]\n", "\n", "Theoretical results:\n", "\n", "This two dimensional stochastic problem can be solved by calculating directly the failure probability: \n", "\n", "$$P_f = \\text{Prob}(R-S \\leq 0) = \\int_{r-s \\leq 0} f_{R, S}(r, s)drds$$\n", "\n", "If R and S are independant, then: \n", "\n", "$$\\int_{-\\infty}^{+\\infty}f_S(x)F_R(x)dx$$\n", "\n", "The numerical application gives: $$P_f = 0.0292$$" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the joint distribution of the parameters\n", "distribution_R = ot.LogNormalMuSigma(300.0, 30.0, 0.0).getDistribution()\n", "distribution_F = ot.Normal(75e3, 5e3)\n", "marginals = [distribution_R, distribution_F]\n", "distribution = ot.ComposedDistribution(marginals)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the model\n", "model = ot.SymbolicFunction(['R', 'F'], ['R-F/(_pi*100.0)'])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the event we want to estimate the probability\n", "vect = ot.RandomVector(distribution)\n", "G = ot.RandomVector(model, vect)\n", "event = ot.Event(G, ot.Less(), 0.0)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create a Monte Carlo algorithm\n", "algo = ot.MonteCarlo(event)\n", "algo.setMaximumCoefficientOfVariation(0.05)\n", "algo.setMaximumOuterSampling(int(1e5))\n", "algo.run()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pf= 0.02858192505510653\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('Pf=', probability)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } estimate_probability_randomized_qmc.ipynb000066400000000000000000000111131307543307100352420ustar00rootroot00000000000000openturns-1.9/python/doc/examples/uncertainty_quantification{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimate a probability using randomized quasi Monte Carlo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to estimate a failure probability.\n", "\n", "Let's consider the following analytical example of a cantilever beam, of Young's modulus E, length L, section modulus I.\n", "\n", "One end is built in a wall and we apply a concentrated bending load F at the other end of the beam, resulting in a deviation:\n", "$$d = \\frac{F*L^3}{3*E*I}$$\n", "\n", "It is considered that failure occurs when the beam deviation is too important:\n", "\n", "$$d \\ge 30 (cm) $$\n", "\n", "Four independent random variables are considered:\n", "\n", " - E (the Young's modulus) [Pa]\n", " - F (the load) [N]\n", " - L (the length) # [m]\n", " - I (the section) # [m^4]\n", "\n", "Stochastic model (simplified model, no units):\n", "\n", " - E ~ Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", " - F ~ LogNormal(30000, 9000, 15000)\n", " - L ~ Uniform(250, 260)\n", " - I ~ Beta(2.5, 4.0, 3.1e2, 4.5e2)\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create the marginal distributions of the parameters\n", "dist_E = ot.Beta(0.93, 3.2, 2.8e7, 4.8e7)\n", "dist_F = ot.LogNormalMuSigma(30000, 9000, 15000).getDistribution()\n", "dist_L = ot.Uniform(250, 260)\n", "dist_I = ot.Beta(2.5, 4.0, 3.1e2, 4.5e2)\n", "marginals = [dist_E, dist_F, dist_L, dist_I]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the Copula\n", "RS = ot.CorrelationMatrix(4)\n", "#RS[2, 3] = -0.2\n", "# Evaluate the correlation matrix of the Normal copula from RS\n", "R = ot.NormalCopula.GetCorrelationFromSpearmanCorrelation(RS)\n", "# Create the Normal copula parametrized by R\n", "copula = ot.NormalCopula(R) " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the joint probability distribution\n", "distribution = ot.ComposedDistribution(marginals, copula)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create the model\n", "model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['F*L^3/(3*E*I)'])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# create the event we want to estimate the probability\n", "vect = ot.RandomVector(distribution)\n", "G = ot.CompositeRandomVector(model, vect)\n", "event = ot.Event(G, ot.Greater(), 30.0)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the low discrepancy sequence\n", "sequence = ot.SobolSequence()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a simulation algorithm\n", "algo = ot.RandomizedQuasiMonteCarlo(event, sequence)\n", "algo.setMaximumCoefficientOfVariation(0.05)\n", "algo.setMaximumOuterSampling(int(1e5))\n", "algo.run()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pf= 0.005471091194017522\n" ] } ], "source": [ "# retrieve results\n", "result = algo.getResult()\n", "probability = result.getProbabilityEstimate()\n", "print('Pf=', probability)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/gauss_product_experiment.ipynb000066400000000000000000001504241307543307100331650ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a Gauss product design of experiments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a deterministic weighted design experiment using Gauss product." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define the underlying distribution, degrees\n", "distribution = ot.ComposedDistribution([ot.Exponential(), ot.Triangular(-1.0, -0.5, 1.0)])\n", "marginalDegrees = [15, 8]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the design\n", "myPlane = ot.GaussProductExperiment(distribution, marginalDegrees)\n", "sample = myPlane.generate()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=GP design implementation=class=GraphImplementation name=GP design title=GP design xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=120 dimension=2 description=[X0,X1] data=[[0.0933078,-0.920674],[0.492692,-0.920674],[1.2156,-0.920674],[2.26995,-0.920674],[3.66762,-0.920674],[5.42534,-0.920674],[7.56592,-0.920674],[10.1202,-0.920674],[13.1303,-0.920674],[16.6544,-0.920674],[20.7765,-0.920674],[25.6239,-0.920674],[31.4075,-0.920674],[38.5307,-0.920674],[48.0261,-0.920674],[0.0933078,-0.744674],[0.492692,-0.744674],[1.2156,-0.744674],[2.26995,-0.744674],[3.66762,-0.744674],[5.42534,-0.744674],[7.56592,-0.744674],[10.1202,-0.744674],[13.1303,-0.744674],[16.6544,-0.744674],[20.7765,-0.744674],[25.6239,-0.744674],[31.4075,-0.744674],[38.5307,-0.744674],[48.0261,-0.744674],[0.0933078,-0.501788],[0.492692,-0.501788],[1.2156,-0.501788],[2.26995,-0.501788],[3.66762,-0.501788],[5.42534,-0.501788],[7.56592,-0.501788],[10.1202,-0.501788],[13.1303,-0.501788],[16.6544,-0.501788],[20.7765,-0.501788],[25.6239,-0.501788],[31.4075,-0.501788],[38.5307,-0.501788],[48.0261,-0.501788],[0.0933078,-0.206922],[0.492692,-0.206922],[1.2156,-0.206922],[2.26995,-0.206922],[3.66762,-0.206922],[5.42534,-0.206922],[7.56592,-0.206922],[10.1202,-0.206922],[13.1303,-0.206922],[16.6544,-0.206922],[20.7765,-0.206922],[25.6239,-0.206922],[31.4075,-0.206922],[38.5307,-0.206922],[48.0261,-0.206922],[0.0933078,0.124902],[0.492692,0.124902],[1.2156,0.124902],[2.26995,0.124902],[3.66762,0.124902],[5.42534,0.124902],[7.56592,0.124902],[10.1202,0.124902],[13.1303,0.124902],[16.6544,0.124902],[20.7765,0.124902],[25.6239,0.124902],[31.4075,0.124902],[38.5307,0.124902],[48.0261,0.124902],[0.0933078,0.447824],[0.492692,0.447824],[1.2156,0.447824],[2.26995,0.447824],[3.66762,0.447824],[5.42534,0.447824],[7.56592,0.447824],[10.1202,0.447824],[13.1303,0.447824],[16.6544,0.447824],[20.7765,0.447824],[25.6239,0.447824],[31.4075,0.447824],[38.5307,0.447824],[48.0261,0.447824],[0.0933078,0.721999],[0.492692,0.721999],[1.2156,0.721999],[2.26995,0.721999],[3.66762,0.721999],[5.42534,0.721999],[7.56592,0.721999],[10.1202,0.721999],[13.1303,0.721999],[16.6544,0.721999],[20.7765,0.721999],[25.6239,0.721999],[31.4075,0.721999],[38.5307,0.721999],[48.0261,0.721999],[0.0933078,0.914038],[0.492692,0.914038],[1.2156,0.914038],[2.26995,0.914038],[3.66762,0.914038],[5.42534,0.914038],[7.56592,0.914038],[10.1202,0.914038],[13.1303,0.914038],[16.6544,0.914038],[20.7765,0.914038],[25.6239,0.914038],[31.4075,0.914038],[38.5307,0.914038],[48.0261,0.914038]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot the design\n", "graph = ot.Graph(\"GP design\", \"x1\", \"x2\", True, \"\")\n", "cloud = ot.Cloud(sample, \"blue\", \"fsquare\", \"\")\n", "graph.add(cloud)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/low_discrepancy_sequence.ipynb000066400000000000000000005500701307543307100331210ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a low discrepancy sequence" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a Sobol' sequence." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the sequence\n", "dimension = 2\n", "sequence = ot.SobolSequence(dimension)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=Sobol' sequence implementation=class=GraphImplementation name=Sobol' sequence title=Sobol' sequence xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1000 dimension=2 data=[[0.5,0.5],[0.75,0.25],[0.25,0.75],...,[0.657227,0.40918],[0.157227,0.90918],[0.219727,0.0966797]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw a sample\n", "sample = sequence.generate(1000)\n", "graph = ot.Graph('Sobol\\' sequence', 'x1', 'x2', True, '')\n", "cloud = ot.Cloud(sample)\n", "graph.add(cloud)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/monte_carlo_experiment.ipynb000066400000000000000000001334311307543307100326040ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a Monte Carlo design of experiments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this basic example we are going to create a MonteCarlo probabilistic design experiment." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import openturns as ot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define underlying distribution, size\n", "distribution = ot.Normal(2)\n", "size = 50" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the design\n", "myPlane = ot.MonteCarloExperiment(distribution, size)\n", "sample = myPlane.generate()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "class=Graph name=MC design implementation=class=GraphImplementation name=MC design title=MC design xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=50 dimension=2 description=[X0,X1] data=[[0.331569,-0.488205],[-0.465482,0.332084],[-0.167726,3.01263],[0.94204,0.61189],[0.611715,-1.5375],[-2.4067,0.662936],[-0.65616,-0.751611],[0.438177,-0.455335],[1.86038,0.219721],[1.72546,-0.543405],[-0.736749,-0.508206],[-2.25867,-0.5964],[-0.31468,-1.78274],[-0.684734,0.0611157],[0.87372,-1.46295],[-0.318786,1.26314],[-0.426726,-1.89234],[-0.514391,0.647229],[0.00370249,0.729688],[-0.247234,0.479191],[-0.0336098,-0.0367271],[0.110256,-0.37687],[-0.0955894,0.109122],[-0.198754,0.47362],[0.161637,0.384483],[0.116468,-0.10008],[1.49156,1.22301],[0.526646,-0.656923],[-0.131228,-1.45347],[1.17414,0.929395],[-0.337113,0.578688],[-0.582459,-1.38886],[-0.499748,-1.55516],[0.483083,0.205004],[-0.0972525,0.592563],[-0.602044,-1.21009],[-0.886698,-0.141114],[0.441983,0.519162],[-1.51455,-0.676917],[0.667678,-1.40585],[-0.0295335,-0.631829],[-0.342157,2.05339],[1.1587,-1.45717],[-0.844367,-0.28861],[0.419271,-0.836064],[0.858269,-0.906566],[-0.91681,1.16322],[0.301918,0.490331],[0.475425,-0.788704],[-0.669449,-0.137928]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot the design\n", "graph = ot.Graph(\"MC design\", \"x1\", \"x2\", True, \"\")\n", "cloud = ot.Cloud(sample, \"blue\", \"fsquare\", \"\")\n", "graph.add(cloud)\n", "graph" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 } openturns-1.9/python/doc/examples/uncertainty_quantification/uncertainty_quantification.rst000066400000000000000000000007001307543307100331640ustar00rootroot00000000000000Uncertainty quantification ========================== .. toctree:: estimate_probability_monte_carlo.ipynb estimate_probability_lhs.ipynb estimate_probability_importance_sampling.ipynb estimate_probability_randomized_qmc.ipynb estimate_probability_form.ipynb composite_experiment.ipynb monte_carlo_experiment.ipynb gauss_product_experiment.ipynb low_discrepancy_sequence.ipynb estimate_moments_taylor.ipynb openturns-1.9/python/doc/index.rst000066400000000000000000000016741307543307100173620ustar00rootroot00000000000000.. OpenTURNS documentation master file, created by sphinx-quickstart on Wed Mar 12 14:11:36 2014. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. .. The toctree directive is mandatory on the root toctree file but we don't want it to be displayed in the body. So we use a no display CSS style. .. raw:: html
    .. toctree:: contents install user_manual/user_manual examples/examples theory/theory developer_guide/developer_guide bibliography about .. raw:: html
    Welcome ======= OpenTURNS is an open source initiative for the treatment of uncertainties, risks'n statistics in a structured industrial approach. .. todo:: Complete the index page with fancy stuff or make it static as it is done on sphinx website. A static page might be more convenient for feeding the site with news. openturns-1.9/python/doc/install.rst000066400000000000000000000132121307543307100177100ustar00rootroot00000000000000.. _install: ============ Installation ============ From binary packages ==================== Conda ----- This is relevant to the `Conda `_ userland Python package manager. Install the package from `Anaconda.org `_:: conda install -c conda-forge openturns Windows ------- Download the installer matching your python version and architecture from `SourceForge `_ Debian/Ubuntu ------------- We support the following Debian-based distributions: .. table:: +-------------------------------------+----------------------------------------------+ | Distribution name | Repository address | +=====================================+==============================================+ | Ubuntu 12.04 LTS 'Precise Pangolin' | deb http://ubuntu.openturns.org precise main | +-------------------------------------+----------------------------------------------+ | Ubuntu 14.04 LTS 'Trusty Tahr' | deb http://ubuntu.openturns.org trusty main | +-------------------------------------+----------------------------------------------+ | Ubuntu 16.04 LTS 'Xenial Xerus' | deb http://ubuntu.openturns.org xenial main | +-------------------------------------+----------------------------------------------+ | Ubuntu 16.10 'Yakkety Yak' | deb http://ubuntu.openturns.org yakkety main | +-------------------------------------+----------------------------------------------+ | Debian 7.0 'Wheezy' | deb http://debian.openturns.org wheezy main | +-------------------------------------+----------------------------------------------+ | Debian 8.0 'Jessie' | deb http://debian.openturns.org jessie main | +-------------------------------------+----------------------------------------------+ Add OpenTURNS' mirror signature:: curl http://debian.openturns.org/openturns.org-repo.key | sudo apt-key add - To be able to retrieve OpenTURNS packages, you must add the appropriate repository address to your sources list. To do so, you may either use the graphical user interface of aptitude or you can edit the sources-list file (`/etc/apt/sources.list`). For instance, asuming you are running Ubuntu 16.04, add the following source to your sources list:: echo deb http://ubuntu.openturns.org xenial main | sudo tee /etc/apt/sources.list.d/openturns.list .. note:: Use the bash command `lsb_release -c` in order to determine the codename of your distribution. After editing aptitude's sources-list, you must update your packages database using either the graphical interface or by issuing the following command:: sudo aptitude update The following packages should now be available: .. table:: +----------------------+------------------------------------+ | Package name | Description | +======================+====================================+ | libopenturns0.x | library | +----------------------+------------------------------------+ | libopenturns-dev | development package | +----------------------+------------------------------------+ | libopenturns0.x-dbg | debug package | +----------------------+------------------------------------+ | python-openturns | Python module | +----------------------+------------------------------------+ | python3-openturns | Python 3 module | +----------------------+------------------------------------+ | openturns-examples | examples | +----------------------+------------------------------------+ | openturns-validation | validation files | +----------------------+------------------------------------+ | r-other-rot | R module | +----------------------+------------------------------------+ Use the following command to check:: apt-cache search openturns RPM-based distributions ----------------------- Add the repository corresponding to your operating system:: curl http://download.opensuse.org/repositories/science:/openturns/CentOS_7/science:openturns.repo -o /etc/yum.repos.d/obs-openturns.repo curl http://download.opensuse.org/repositories/science:/openturns/Fedora_25/science:openturns.repo -o /etc/yum.repos.d/obs-openturns.repo curl http://download.opensuse.org/repositories/science:/openturns/openSUSE_Leap_42.2/science:openturns.repo -o /etc/yum.repos.d/obs-openturns.repo Import the gpg key corresponding to your operating system:: rpm --import http://download.opensuse.org/repositories/science:/openturns/CentOS_7/repodata/repomd.xml.key rpm --import http://download.opensuse.org/repositories/science:/openturns/Fedora_25/repodata/repomd.xml.key rpm --import http://download.opensuse.org/repositories/science:/openturns/openSUSE_Leap_42.2/repodata/repomd.xml.key Install the package:: yum install python-openturns Archlinux/Parabola ------------------ Install from `AUR `_ repository:: yaourt -S openturns From sources ============ Checkout the required :ref:`dependencies`. You can checkout the development trunk:: git clone https://github.com/openturns/openturns.git cd openturns cmake -DCMAKE_INSTALL_PREFIX=~/.local . make install .. note:: When installing into `~/.local` you will not need to set PYTHONPATH environment variable for Python to be able to import openturns openturns-1.9/python/doc/math_notations.sty000066400000000000000000000102141307543307100212770ustar00rootroot00000000000000\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{math_notations} \usepackage{amsmath} \usepackage{amssymb} % For matrixes and vectors \newcommand{\vect}[1]{{\underline{#1}}} \newcommand{\mat}[1]{{\underline{\underline{#1}}}} \newcommand{\Tr}[1]{{#1}^\top} % Bold letters \newcommand{\bdA}{{\boldsymbol{A}}} \newcommand{\bdB}{{\boldsymbol{B}}} \newcommand{\bdC}{{\boldsymbol{C}}} \newcommand{\bdD}{{\boldsymbol{D}}} \newcommand{\bdE}{{\boldsymbol{E}}} \newcommand{\bdF}{{\boldsymbol{F}}} \newcommand{\bdG}{{\boldsymbol{G}}} \newcommand{\bdH}{{\boldsymbol{H}}} \newcommand{\bdI}{{\boldsymbol{I}}} \newcommand{\bdJ}{{\boldsymbol{J}}} \newcommand{\bdK}{{\boldsymbol{K}}} \newcommand{\bdL}{{\boldsymbol{L}}} \newcommand{\bdM}{{\boldsymbol{M}}} \newcommand{\bdN}{{\boldsymbol{N}}} \newcommand{\bdO}{{\boldsymbol{O}}} \newcommand{\bdP}{{\boldsymbol{P}}} \newcommand{\bdQ}{{\boldsymbol{Q}}} \newcommand{\bdR}{{\boldsymbol{R}}} \newcommand{\bdS}{{\boldsymbol{S}}} \newcommand{\bdT}{{\boldsymbol{T}}} \newcommand{\bdU}{{\boldsymbol{U}}} \newcommand{\bdV}{{\boldsymbol{V}}} \newcommand{\bdW}{{\boldsymbol{W}}} \newcommand{\bdX}{{\boldsymbol{X}}} \newcommand{\bdY}{{\boldsymbol{Y}}} \newcommand{\bdZ}{{\boldsymbol{Z}}} \newcommand{\bda}{{\boldsymbol{a}}} \newcommand{\bdb}{{\boldsymbol{b}}} \newcommand{\bdc}{{\boldsymbol{c}}} \newcommand{\bdd}{{\boldsymbol{d}}} \newcommand{\bde}{{\boldsymbol{e}}} \newcommand{\bdf}{{\boldsymbol{f}}} \newcommand{\bdg}{{\boldsymbol{g}}} \newcommand{\bdh}{{\boldsymbol{h}}} \newcommand{\bdi}{{\boldsymbol{i}}} \newcommand{\bdj}{{\boldsymbol{j}}} \newcommand{\bdk}{{\boldsymbol{k}}} \newcommand{\bdl}{{\boldsymbol{l}}} \newcommand{\bdm}{{\boldsymbol{m}}} \newcommand{\bdn}{{\boldsymbol{n}}} \newcommand{\bdo}{{\boldsymbol{o}}} \newcommand{\bdp}{{\boldsymbol{p}}} \newcommand{\bdq}{{\boldsymbol{q}}} \newcommand{\bdr}{{\boldsymbol{r}}} \newcommand{\bds}{{\boldsymbol{s}}} \newcommand{\bdt}{{\boldsymbol{t}}} \newcommand{\bdu}{{\boldsymbol{u}}} \newcommand{\bdv}{{\boldsymbol{v}}} \newcommand{\bdw}{{\boldsymbol{w}}} \newcommand{\bdx}{{\boldsymbol{x}}} \newcommand{\bdy}{{\boldsymbol{y}}} \newcommand{\bdz}{{\boldsymbol{z}}} % special caracters \newcommand{\cA}{{\mathcal A}} \newcommand{\cB}{{\mathcal B}} \newcommand{\cC}{{\mathcal C}} \newcommand{\cD}{{\mathcal D}} \newcommand{\cE}{{\mathcal E}} \newcommand{\cF}{{\mathcal F}} \newcommand{\cG}{{\mathcal G}} \newcommand{\cH}{{\mathcal H}} \newcommand{\cI}{{\mathcal I}} \newcommand{\cJ}{{\mathcal J}} \newcommand{\cK}{{\mathcal K}} \newcommand{\cL}{{\mathcal L}} \newcommand{\cM}{{\mathcal M}} \newcommand{\cN}{{\mathcal N}} \newcommand{\cO}{{\mathcal P}} \newcommand{\cP}{{\mathcal P}} \newcommand{\cQ}{{\mathcal Q}} \newcommand{\cR}{{\mathcal R}} \newcommand{\cS}{{\mathcal S}} \newcommand{\cT}{{\mathcal T}} \newcommand{\cU}{{\mathcal U}} \newcommand{\cV}{{\mathcal V}} \newcommand{\cW}{{\mathcal W}} \newcommand{\cX}{{\mathcal X}} \newcommand{\cY}{{\mathcal Y}} \newcommand{\cZ}{{\mathcal Z}} \newcommand{\Cset}{{\mathbb C}} \newcommand{\Eset}{{\mathbb E}} \newcommand{\Nset}{{\mathbb N}} \newcommand{\Pset}{{\mathbb P}} \newcommand{\Qset}{{\mathbb Q}} \newcommand{\Rset}{{\mathbb R}} \newcommand{\Zset}{{\mathbb Z}} \newcommand{\Diff}{{\mathrm{d}}} % short commands \newcommand{\un}[1]{\underline{#1}} \newcommand{\dpl}[1]{\displaystyle{#1}} \newcommand{\uw}{\underline{w}} \newcommand{\uW}{\underline{W}} \newcommand{\ux}{\underline{x}} \newcommand{\uX}{\underline{X}} \newcommand{\uy}{\underline{y}} \newcommand{\uY}{\underline{Y}} \newcommand{\uz}{\underline{z}} \newcommand{\uZ}{\underline{Z}} \newcommand{\muX}{\underline{\mu}_{\:X}} \newcommand{\Var}[1]{{\rm Var}\left[ #1 \right]} \newcommand{\Cov}[1]{{\rm Cov}\left[ #1 \right]} \newcommand{\Expect}[1]{{\mathbb E}\left[ #1 \right]} \newcommand{\Prob}[1]{{\mathbb P}\left[ #1 \right]} \newcommand{\pdf}{f_{\un{X}}(\un{x})} \newcommand{\ech}{\left\{ x_1, \, \dots\,, x_N \right\}} \newcommand{\matcov} {\mathbf C} \newcommand{\matcor} {\mathbf R} \newcommand{\fcar}[2] {{\mathbf 1}_{#1}(#2)} \newcommand{\supp}[1] {{\rm supp}\left(#1\right)} \newcommand{\di}[1] {{\,\mathrm{d}#1}} \newcommand{\norm}[1] {\left\|#1\right\|} \DeclareMathOperator*{\argmin}{argmin} \DeclareMathOperator*{\argmax}{argmax} openturns-1.9/python/doc/pyplots/000077500000000000000000000000001307543307100172235ustar00rootroot00000000000000openturns-1.9/python/doc/pyplots/BarPlot.py000066400000000000000000000017221307543307100211420ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import floor ot.RandomGenerator.SetSeed(0) distribution = ot.Normal([0.5], [2.0], ot.CorrelationMatrix(1)) sample = distribution.getSample(2000) # Construct histogram epsilon = 0.1 minSample = sample.getMin()[0] maxSample = sample.getMax()[0] + 0.1 nBars = 20 data = ot.Sample(nBars, [(maxSample - minSample) / nBars, 0]) for i in range(2000): index = int( floor((sample[i, 0] - minSample) / (maxSample - minSample) * nBars)) data[index, 1] += 1 # Create an empty graph graph = ot.Graph( "Some barplots", "Realizations", "Frequency", True, "topright") # Create the barplot barPlot = ot.BarPlot(data, minSample, "Normal histogram") # Then, draw it graph.add(barPlot) fig = plt.figure(figsize=(6, 4)) plt.suptitle("Sample histogram example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/BipartiteGraph.py000066400000000000000000000005411307543307100225020ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View bipartite = ot.BipartiteGraph([[0, 2], [1, 4], [3, 4, 5]]) graph = bipartite.draw() fig = plt.figure(figsize=(6, 4)) plt.suptitle("Bipartite graph") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/BootstrapExperiment.py000066400000000000000000000013541307543307100236160ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane size = 20 dim = 2 refSample = ot.Sample(size, dim) for i in range(size): p = ot.Point(dim) for j in range(dim): p[j] = i + j refSample[i] = p myPlane = ot.BootstrapExperiment(refSample) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Bootstrap experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/Box.py000066400000000000000000000010341307543307100203230ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Generate sample with the given plane levels = [4, 4] myPlane = ot.Box(levels) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Box plane") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/BoxCoxFactory.py000066400000000000000000000040111307543307100223230ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a process X: R^2 --> R^2 # Define a bi dimensional mesh as a box myIndices = ot.Indices([40, 20]) myMesher = ot.IntervalMesher(myIndices) lowerBound = [0.0, 0.0] upperBound = [2.0, 1.0] myInterval = ot.Interval(lowerBound, upperBound) myMesh = myMesher.build(myInterval) # Define a scalar temporal normal process on the mesh # this process is stationary # myXproc R^2 --> R amplitude = [1.0] scale = [0.2, 0.2] myCovModel = ot.ExponentialModel(scale, amplitude) myXproc = ot.GaussianProcess(myCovModel, myMesh) # Transform myXproc to make its variance depend on the vertex (s,t) # and to get a positive process # thanks to the spatial function g # myXtProcess R --> R g = ot.SymbolicFunction(['x1'], ['exp(x1)']) myDynTransform = ot.ValueFunction(g, 2) myXtProcess = ot.CompositeProcess(myDynTransform, myXproc) myField = myXtProcess.getRealization() graphMarginal1 = ot.KernelSmoothing().build(myField.getValues()).drawPDF() graphMarginal1.setTitle("") graphMarginal1.setXTitle("X") graphMarginal1.setLegendPosition("") # Initiate a BoxCoxFactory myBoxCoxFactory = ot.BoxCoxFactory() graph = ot.Graph() shift = [0.0] # We estimate the lambda parameter from the field myField # All values of the field are positive myModelTransform = myBoxCoxFactory.build(myField, shift, graph) graphMarginal2 = ot.KernelSmoothing().build( myModelTransform(myField).getValues()).drawPDF() graphMarginal2.setTitle("") graphMarginal2.setXTitle("T_lambda(X)") graphMarginal2.setLegendPosition("") graph.setLegendPosition("bottomright") fig = plt.figure(figsize=(12, 4)) plt.suptitle("Box Cox log-likelihood example") axis = fig.add_subplot(131) axis.set_xlim(auto=True) View(graphMarginal1, figure=fig, axes=[axis], add_legend=True) axis = fig.add_subplot(132) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) axis = fig.add_subplot(133) axis.set_xlim(auto=True) View(graphMarginal2, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/BoxCoxTransform.py000066400000000000000000000012171307543307100226740ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a Box Cox transformation myLambda = ot.Point([0.0, 0.1, 1.0, 1.5]) graph = ot.Graph() for i in range(myLambda.getDimension()): myBoxCox = ot.BoxCoxTransform(myLambda[i]) graph.add(myBoxCox.draw(0.1, 2.1)) graph.setColors(['red', 'blue', 'black', 'green']) graph.setLegends(['lambda = ' + str(lam) for lam in myLambda]) graph.setLegendPosition("bottomright") fig = plt.figure(figsize=(8, 4)) plt.suptitle("Box Cox transformations") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/Cloud.py000066400000000000000000000012031307543307100206370ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) R = ot.CorrelationMatrix(2) for i in range(1, 2): R[i, i - 1] = -0.25 distribution = ot.Normal([-1.5, 0.5], [4., 1.], R) sample = distribution.getSample(200) # Create an empty graph graph = ot.Graph("Normal sample", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Cloud example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/ComposedCopula.py000066400000000000000000000015721307543307100225170ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View myColl = [ot.ClaytonCopula(0.3), ot.NormalCopula(3)] myMergedCop = ot.ComposedCopula(myColl) myMergedCop.setDescription(['$u_1$', '$u_2$', '$u_3$', '$u_4$', '$u_5$']) graphPDF = myMergedCop.drawMarginal2DPDF(0, 1, [0.0] * 2, [1.0] * 2, [100] * 2) graphPDF.setXTitle('$u_1$') graphPDF.setYTitle('$u_2$') graphCDF = myMergedCop.drawMarginal2DCDF(0, 1, [0.0] * 2, [1.0] * 2, [100] * 2) graphCDF.setXTitle('$u_1$') graphCDF.setYTitle('$u_2$') fig = plt.figure(figsize=(10, 4)) plt.suptitle("ComposedCopula(Clayton(0.3), NormalCopula(3)): pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/CompositeDistribution.py000066400000000000000000000014061307543307100241400ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View distX = ot.Normal(0.0, 10.0) myFunc = ot.SymbolicFunction(['x'], ['x+sin(x)']) distFin = ot.CompositeDistribution(myFunc, distX) graphPDF = distFin.drawPDF(1024) graphPDF.setXTitle('x') graphPDF.setLegendPosition('') graphCDF = distFin.drawCDF(1024) graphCDF.setXTitle('x') graphCDF.setLegendPosition('') fig = plt.figure(figsize=(8, 4)) plt.suptitle( "CompositeDistribution: f(x)=x+sin(x); L=Normal(0.0, 10.0): pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/CompositeProcess.py000066400000000000000000000031401307543307100230740ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View class GaussianConvolution(ot.OpenTURNSPythonFieldFunction): def __init__(self): super(GaussianConvolution, self).__init__(1, 1, 1) self.setInputDescription(["x"]) self.setOutputDescription(["y"]) self.outputGrid_ = ot.RegularGrid(-1.0, 0.02, 101) self.algo_ = ot.GaussKronrod( 20, 1.0e-4, ot.GaussKronrodRule(ot.GaussKronrodRule.G7K15)) def _exec(self, X): inputTG = X.getTimeGrid() inputValues = X.getValues() f = ot.Function(ot.PiecewiseLinearEvaluation( [x[0] for x in inputTG.getVertices()], inputValues)) outputValues = ot.Sample(0, 1) for t in self.outputGrid_.getVertices(): kernel = ot.Normal(t[0], 0.05) def pdf(X): return [kernel.computePDF(X)] weight = ot.Function(ot.PythonFunction(1, 1, pdf)) outputValues.add(self.algo_.integrate( weight * f, kernel.getRange())) return ot.Field(self.outputGrid_, outputValues) N = 5 X = ot.GaussianProcess(ot.GeneralizedExponential( [0.1], 1.0), ot.RegularGrid(-5.0, 0.1, 101)) f = ot.FieldFunction(GaussianConvolution()) Y = ot.CompositeProcess(f, X) x_graph = X.getSample(N).drawMarginal(0) y_graph = Y.getSample(N).drawMarginal(0) fig = plt.figure(figsize=(10, 4)) plt.suptitle("Composite process") x_axis = fig.add_subplot(121) y_axis = fig.add_subplot(122) View(x_graph, figure=fig, axes=[x_axis], add_legend=False) View(y_graph, figure=fig, axes=[y_axis], add_legend=False) openturns-1.9/python/doc/pyplots/ConditionalRandomVector.py000066400000000000000000000014041307543307100243630ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View distXgivenT = ot.Exponential() distGamma = ot.Uniform(1.0, 2.0) distAlpha = ot.Uniform(0.0, 0.1) distTheta = ot.ComposedDistribution([distGamma, distAlpha]) rvTheta = ot.RandomVector(distTheta) rvX = ot.ConditionalRandomVector(distXgivenT, rvTheta) sampleX = rvX.getSample(1000) histX = ot.HistogramFactory().build(sampleX) graph = histX.drawPDF() graph.setXTitle('x') graph.setYTitle('pdf') fig = plt.figure(figsize=(8, 4)) plt.suptitle( "Conditional Random Vector: Exp($\gamma$, $\lambda$), $\gamma \sim \mathcal{U}(1,2)$, $\lambda \sim \mathcal{U}(0,1)$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/Contour.py000066400000000000000000000014471307543307100212340ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a function f = ot.Function( ["x", "y"], ["z"], ["exp(-sin(cos(y)^2*x^2+sin(x)^2*y^2))"]) # Generate the data for the curves to be drawn nX = 75 nY = 75 inputData = ot.Box([nX, nY]).generate() inputData *= [10.0] * 2 inputData += [-5.0] * 2 data = f(inputData) levels = [(0.5 + i) / 5 for i in range(5)] # Create an empty graph graph = ot.Graph("Complex iso lines", "u1", "u2", True, "") # Create the contour contour = ot.Contour(nX + 2, nY + 2, data) contour.setLevels(levels) # Then, draw it graph.add(contour) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Complex iso lines example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/Curve.py000066400000000000000000000011521307543307100206600ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sin, pi # Generate the data for the curves to be drawn data = [ [-3 * pi + 6 * pi * i / 100, sin(-3 * pi + 6 * pi * i / 100)] for i in range(100)] # Create an empty graph graph = ot.Graph("Some curves", "x", "sin(x)", True, "") # Create the curve curve = ot.Curve(data, "blue", "solid", 2, "") # Then, draw it graph.add(curve) fig = plt.figure(figsize=(6, 4)) plt.suptitle("Curve example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/Field.py000066400000000000000000000010451307543307100206200ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a bivariate normal process myMesh = ot.IntervalMesher([39, 39]).build(ot.Interval([0.0] * 2, [1.0] * 2)) myCov = ot.GeneralizedExponential(2 * [0.1], 1.3) myProcess = ot.GaussianProcess(myCov, myMesh) myField = myProcess.getRealization() graph = myField.drawMarginal(0, False) fig = plt.figure(figsize=(8, 4)) plt.suptitle("A field") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/FixedExperiment.py000066400000000000000000000013441307543307100226770ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane size = 20 dim = 2 refSample = ot.Sample(size, dim) for i in range(size): p = ot.Point(dim) for j in range(dim): p[j] = i + j refSample[i] = p myPlane = ot.FixedExperiment(refSample) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Fixed experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/FunctionalBasisProcess.py000066400000000000000000000013521307543307100242210ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View f1 = ot.SymbolicFunction(['t'], ['sin(t)']) f2 = ot.SymbolicFunction(['t'], ['cos(t)*cos(t)']) myBasis = ot.Basis([f1, f2]) coefDis = ot.Normal([2] * 2, [5] * 2, ot.CorrelationMatrix(2)) myTG = ot.RegularGrid(0.0, 0.1, 250) myFBP = ot.FunctionalBasisProcess(coefDis, myBasis, myTG) TS = myFBP.getRealization() graph = TS.draw() graph.add(myFBP.getRealization().draw()) graph.add(myFBP.getRealization().draw()) graph.setColors(['red', 'blue', 'green']) fig = plt.figure(figsize=(10, 4)) plt.suptitle('Functional Basis Process') fbp_axis = fig.add_subplot(111) view = View(graph, figure=fig, axes=[fbp_axis], add_legend=False) openturns-1.9/python/doc/pyplots/GaussKronrod.py000066400000000000000000000014731307543307100222230ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View f = ot.SymbolicFunction(['x'], ['abs(sin(x))']) a = -2.5 b = 4.5 algo = ot.GaussKronrod( 100000, 1e-13, ot.GaussKronrodRule(ot.GaussKronrodRule.G11K23)) value = algo.integrate(f, ot.Interval(a, b))[0] ai = ot.Point() bi = ot.Point() fi = ot.Sample() ei = ot.Point() error = ot.Point() value2 = algo.integrate(f, a, b, error, ai, bi, fi, ei)[0] ai.add(b) g = f.draw(a, b, 512) lower = ot.Cloud(ai, ot.Point(ai.getDimension())) lower.setColor("magenta") lower.setPointStyle('circle') g.add(lower) fig = plt.figure(figsize=(8, 4)) plt.suptitle( r"GaussKronrod example: $\int_{-5/2}^{9/2}|\sin(t)|\,dt=$" + str(value)) axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/GaussLegendre.py000066400000000000000000000011611307543307100223240ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View f = ot.SymbolicFunction(['x'], ['sin(x)']) a = -2.5 b = 4.5 algo = ot.GaussLegendre([20]) value, nodes = algo.integrateWithNodes(f, ot.Interval(a, b)) g = f.draw(a, b, 512) lower = ot.Cloud(nodes, ot.Sample(nodes.getSize(), 1)) lower.setColor("magenta") lower.setPointStyle('circle') g.add(lower) fig = plt.figure(figsize=(8, 4)) plt.suptitle( r"GaussLegendre example: $\int_{-5/2}^{9/2}\sin(t)\,dt=$" + str(value[0])) axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/GaussProductExperiment.py000066400000000000000000000014321307543307100242610ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane distribution = ot.ComposedDistribution( ot.DistributionCollection([ot.Exponential(), ot.Triangular(-1.0, -0.5, 1.0)])) marginalDegrees = ot.Indices([3, 6]) myPlane = ot.GaussProductExperiment( ot.Distribution(distribution), marginalDegrees) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Gauss product experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/ImportanceSamplingExperiment.py000066400000000000000000000014211307543307100254300ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane distribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) size = 10 weightingDistribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) myPlane = ot.ImportanceSamplingExperiment( distribution, weightingDistribution, size) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Importance sampling experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/IntervalMesher.py000066400000000000000000000016771307543307100225400ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create the mesher mesher = ot.IntervalMesher([10] * 2) # Create a square square = ot.Interval([0.0] * 2, [1.0] * 2) # Mesh the square the usual way mesh1 = mesher.build(square) # Mesh the square using diamond mesh mesh2 = mesher.build(square, True) # Draw the first mesh graph1 = mesh1.draw() graph1.setTitle('diamond=False') graph1.setXTitle('$x_0$') graph1.setYTitle('$x_1$') # Draw the second mesh graph2 = mesh2.draw() graph2.setTitle('diamond=True') graph2.setXTitle('$x_0$') graph2.setYTitle('$x_1$') fig = plt.figure(figsize=(10, 4)) plt.suptitle("Mesh of an interval: diamond=False/True") graph1_axis = fig.add_subplot(121) graph2_axis = fig.add_subplot(122) graph1_axis.set_xlim(auto=True) graph2_axis.set_xlim(auto=True) View(graph1, figure=fig, axes=[graph1_axis], add_legend=True) View(graph2, figure=fig, axes=[graph2_axis], add_legend=True) openturns-1.9/python/doc/pyplots/InverseBoxCoxTransform.py000066400000000000000000000012331307543307100242260ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a Box Cox transformation myLambda = ot.Point([0.0, 0.1, 1.0, 1.5]) graph = ot.Graph() for i in range(myLambda.getDimension()): myBoxCox = ot.InverseBoxCoxTransform(myLambda[i]) graph.add(myBoxCox.draw(0.1, 2.1)) graph.setColors(['red', 'blue', 'black', 'green']) graph.setLegends(['lambda = ' + str(lam) for lam in myLambda]) graph.setLegendPosition("topleft") fig = plt.figure(figsize=(8, 4)) plt.suptitle("Inverse Box Cox transformations") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/IteratedQuadrature.py000066400000000000000000000037131307543307100234000ustar00rootroot00000000000000from __future__ import print_function import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View import math as m oldPrecision = ot.PlatformInfo.GetNumericalPrecision() ot.PlatformInfo.SetNumericalPrecision(16) a = -m.pi b = m.pi f = ot.SymbolicFunction(['x', 'y'], ['1+cos(x)*sin(y)']) l = [ot.SymbolicFunction(['x'], [' 2+cos(x)'])] u = [ot.SymbolicFunction(['x'], ['-2-cos(x)'])] # Draw the graph of the integrand and the bounds: g = ot.Graph('Integration nodes', 'x', 'y', True, 'topright') g.add(f.draw([a, a], [b, b])) curve = l[0].draw(a, b).getDrawable(0) curve.setLineWidth(2) curve.setColor('red') g.add(curve) curve = u[0].draw(a, b).getDrawable(0) curve.setLineWidth(2) curve.setColor('red') g.add(curve) # Evaluate the integral with high precision: Iref = ot.IteratedQuadrature(ot.GaussKronrod(100000, 1e-13, ot.GaussKronrodRule(ot.GaussKronrodRule.G11K23))).integrate(f, a, b, l, u) # Evaluate the integral with the default GaussKronrod algorithm: f.enableHistory() I1 = ot.IteratedQuadrature(ot.GaussKronrod()).integrate(f, a, b, l, u) sample1 = f.getHistoryInput().getSample() print('I1=', I1, '#evals=', sample1.getSize(), 'err=', abs(100.0 * (1.0 - I1[0] / Iref[0])), '%') cloud = ot.Cloud(sample1) cloud.setPointStyle('fcircle') cloud.setColor('green') g.add(cloud) f.clearHistory() # Evaluate the integral with the default IteratedQuadrature algorithm: I2 = ot.IteratedQuadrature().integrate(f, a, b, l, u) sample2 = f.getHistoryInput().getSample() # print('I2=', I2, '#evals=', sample2.getSize(), \ # 'err=', abs(100.0*(1.0-I2[0]/Iref[0])), '%') cloud = ot.Cloud(sample2) cloud.setPointStyle('fcircle') cloud.setColor('gold') g.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("IteratedQuadrature example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) ot.PlatformInfo.SetNumericalPrecision(oldPrecision) openturns-1.9/python/doc/pyplots/KarhunenLoeveP1Algorithm.py000066400000000000000000000012631307543307100244150ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sqrt mesh = ot.IntervalMesher([128]).build(ot.Interval(-1.0, 1.0)) threshold = 0.001 model = ot.AbsoluteExponential([1.0]) algo = ot.KarhunenLoeveP1Algorithm(mesh, model, threshold) algo.run() ev = algo.getResult().getEigenValues() modes = algo.getResult().getScaledModesAsProcessSample() g = modes.drawMarginal(0) g.setXTitle("$t$") g.setYTitle("$\sqrt{\lambda_n}\phi_n$") fig = plt.figure(figsize=(6, 4)) plt.suptitle("P1 approx. of KL expansion for $C(s,t)=e^{-|s-t|}$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/KarhunenLoeveP1Factory.py000066400000000000000000000013471307543307100241010ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sqrt mesh = ot.IntervalMesher([256]).build(ot.Interval(-1.0, 1.0)) threshold = 0.001 factory = ot.KarhunenLoeveP1Factory(mesh, threshold) model = ot.AbsoluteExponential([1.0]) ev = ot.Point() modes = factory.buildAsProcessSample(model, ev) for i in range(modes.getSize()): modes[i] = ot.Field(mesh, modes[i].getValues() * [sqrt(ev[i])]) g = modes.drawMarginal(0) g.setXTitle("$t$") g.setYTitle("$\sqrt{\lambda_n}\phi_n$") fig = plt.figure(figsize=(6, 4)) plt.suptitle("P1 approx. of KL expansion for $C(s,t)=e^{-|s-t|}$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/KarhunenLoeveQuadratureAlgorithm.py000066400000000000000000000020041307543307100262440ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sqrt domain = ot.Interval(-1.0, 1.0) basis = ot.OrthogonalProductFunctionFactory([ot.FourierSeriesFactory()]) basisSize = 10 experiment = ot.GaussProductExperiment(basis.getMeasure(), [20]) mustScale = False threshold = 0.001 model = ot.AbsoluteExponential([1.0]) algo = ot.KarhunenLoeveQuadratureAlgorithm( domain, model, experiment, basis, basisSize, mustScale, threshold) algo.run() ev = algo.getResult().getEigenValues() functions = algo.getResult().getScaledModes() g = ot.Graph() g.setXTitle("$t$") g.setYTitle("$\sqrt{\lambda_n}\phi_n$") for i in range(functions.getSize()): g.add(functions.build(i).draw(-1.0, 1.0, 256)) g.setColors(ot.Drawable.BuildDefaultPalette(functions.getSize())) fig = plt.figure(figsize=(6, 4)) plt.suptitle("Quadrature approx. of KL expansion for $C(s,t)=e^{-|s-t|}$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/KarhunenLoeveQuadratureFactory.py000066400000000000000000000021061307543307100257300ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sqrt domain = ot.Interval(-1.0, 1.0) basis = ot.OrthogonalProductFunctionFactory([ot.FourierSeriesFactory()]) basisSize = 10 experiment = ot.GaussProductExperiment(basis.getMeasure(), [20]) mustScale = False threshold = 0.001 factory = ot.KarhunenLoeveQuadratureFactory( domain, experiment, basis, basisSize, mustScale, threshold) model = ot.AbsoluteExponential([1.0]) ev = ot.Point() functions = factory.build(model, ev) g = ot.Graph() g.setXTitle("$t$") g.setYTitle("$\sqrt{\lambda_n}\phi_n$") for i in range(functions.getSize()): g.add( (functions.build(i) * ot.LinearFunction([0.0] * domain.getDimension(), [sqrt(ev[i])], ot.Matrix(1, domain.getDimension()))).draw(-1.0, 1.0, 256)) g.setColors(ot.Drawable.BuildDefaultPalette(functions.getSize())) fig = plt.figure(figsize=(6, 4)) plt.suptitle("P1 approx. of KL expansion for $C(s,t)=e^{-|s-t|}$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/KarhunenLoeveSVDAlgorithm.py000066400000000000000000000013501307543307100245660ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View from math import sqrt mesh = ot.IntervalMesher([128]).build(ot.Interval(-1.0, 1.0)) threshold = 0.001 model = ot.AbsoluteExponential([1.0]) sample = ot.GaussianProcess(model, mesh).getSample(100) algo = ot.KarhunenLoeveSVDAlgorithm(sample, threshold) algo.run() ev = algo.getResult().getEigenValues() modes = algo.getResult().getScaledModesAsProcessSample() g = modes.drawMarginal(0) g.setXTitle("$t$") g.setYTitle("$\sqrt{\lambda_n}\phi_n$") fig = plt.figure(figsize=(6, 4)) plt.suptitle("SVD approx. of KL expansion for $C(s,t)=e^{-|s-t|}$") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(g, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/LHSExperiment.py000066400000000000000000000012171307543307100222650ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane distribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) size = 10 myPlane = ot.LHSExperiment(distribution, size) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("LHS experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/LevelSetMesher.py000066400000000000000000000012301307543307100224600ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create the mesher mesher = ot.LevelSetMesher([50] * 2) # Create a level set function = ot.SymbolicFunction(['x0', 'x1'], ['10*(x0^3+x1)^2+x0^2']) level = 0.5 set = ot.LevelSet(function, level) # Mesh the level set mesh = mesher.build(set, ot.Interval([-1.0] * 2, [1.0] * 2)) # Draw the first mesh graph = mesh.draw() graph.setXTitle('$x_0$') graph.setYTitle('$x_1$') fig = plt.figure(figsize=(10, 4)) plt.suptitle('Mesh of a level set') graph_axis = fig.add_subplot(111) graph_axis.set_xlim(auto=True) View(graph, figure=fig, axes=[graph_axis], add_legend=True) openturns-1.9/python/doc/pyplots/LinearEnumerateFunction.py000066400000000000000000000050751307543307100243720ustar00rootroot00000000000000import matplotlib.pyplot as plt # Create the figure plt.figure(1, figsize=(4, 4)) ax = plt.subplot(111) # Create the points ax.plot([0, 0, 1, 0, 1, 2, 3, 2, 1, 0], [ 0, 1, 0, 2, 1, 0, 0, 1, 2, 3], "o", markersize=9) # Create the arrows ax.annotate("", xy=(0.97, 0), xycoords='data', xytext=(0, 0), textcoords='data', arrowprops=dict( arrowstyle="-|>", linestyle="dashed", mutation_scale=15, connectionstyle="arc3", color='black'), ) ax.arrow(1, 0, -0.97, 0.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) ax.arrow(0, 1, 1.97, -0.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) ax.arrow(2, 0, -1.97, 1.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) ax.arrow(0, 2, 2.97, -1.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) ax.arrow(3, 0, -2.97, 2.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) ax.arrow(0, 3, 1.97, -0.97, head_width=0.08, head_length=0.08, fc='k', ec='k', length_includes_head=True, linestyle="dashed",) # Annotate points ax.annotate('4', xy=(1, 1), xycoords='data', xytext=(-20, -5), textcoords='offset points', fontsize=16) ax.annotate('7', xy=(2, 1), xycoords='data', xytext=(+15, +0), textcoords='offset points', fontsize=16) ax.annotate('8', xy=(1, 2), xycoords='data', xytext=(+15, +0), textcoords='offset points', fontsize=16) # Add labels ax.annotate(r'$\tau_1$', xy=(1, 0), xytext=(10, 10), ha='left', va='center', xycoords='axes fraction', textcoords='offset points', fontsize=20) ax.annotate(r'$\tau_2$', xy=(0, 1), xytext=(0, 10), ha='left', va='center', xycoords='axes fraction', textcoords='offset points', fontsize=20) # Hide spines ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') # Set spines's position ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) # Add labels plt.xticks([-0.1] + list(range(4)) + [3.2]) ax.set_xticklabels(('', '$0$', '$1$', '$3$', '$6$'), fontsize=20) plt.yticks([-0.1] + list(range(4)) + [3.2]) ax.set_yticklabels(('', '', '$2$', '$5$', '$9$'), fontsize=20) # Show the figure plt.show() openturns-1.9/python/doc/pyplots/LowDiscrepancyExperiment.py000066400000000000000000000012701307543307100245640ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane distribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) size = 200 myPlane = ot.LowDiscrepancyExperiment(ot.SobolSequence(), distribution, size) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "plus", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Low Discrepancy experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/MaximumEntropyOrderStatisticsCopula.py000066400000000000000000000012671307543307100270140ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View myDist = [ot.Beta(1.5, 3.2, 0.0, 1.0), ot.Beta(2.0, 4.3, 0.5, 1.2)] myOrderStatCop = ot.MaximumEntropyOrderStatisticsCopula(myDist) myOrderStatCop.setDescription(['$u_1$', '$u_2$']) graphPDF = myOrderStatCop.drawPDF() graphCDF = myOrderStatCop.drawCDF() fig = plt.figure(figsize=(8, 4)) plt.suptitle("Max Entropy Order Statistics Copula: pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/MaximumEntropyOrderStatisticsDistribution.py000066400000000000000000000013071307543307100302430ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View myDist = [ot.Beta(1.5, 3.2, 0.0, 1.0), ot.Beta(2.0, 4.3, 0.5, 1.2)] myOrderStatDist = ot.MaximumEntropyOrderStatisticsDistribution(myDist) myOrderStatDist.setDescription(['$x_1$', '$x_2$']) graphPDF = myOrderStatDist.drawPDF() graphCDF = myOrderStatDist.drawCDF() fig = plt.figure(figsize=(8, 4)) plt.suptitle("Max Entropy Order Statistics Distribution: pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/Mesh.py000066400000000000000000000012641307543307100204740ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Define the vertices of the mesh vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0], [2.0, 1.5], [0.5, 1.5]] # Define the simplices of the mesh simplicies = ot.IndicesCollection( [[0, 1, 2], [1, 2, 3], [2, 3, 4], [2, 4, 5], [0, 2, 5]]) # Create the Mesh mesh2D = ot.Mesh(vertices, simplicies) # Create a Graph graph = ot.Graph('Mesh 2D', '', '', True, 'bottomright') graph.add(mesh2D.draw()) # Then, draw it fig = plt.figure(figsize=(4, 4)) plt.suptitle("Mesh 2D") axis = fig.add_subplot(111) View(graph, figure=fig, axes=[axis], add_legend=True) axis.set_xlim(auto=True) openturns-1.9/python/doc/pyplots/Mixture.py000066400000000000000000000015711307543307100212360ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View mu = [2.0, 2.0] sigma = [1.0, 1.0] R = ot.CorrelationMatrix(2) R[0, 1] = 0.8 myNormal1 = ot.Normal(mu, sigma, R) R2 = ot.CorrelationMatrix(2) R2[0, 1] = -0.8 mu2 = [3.0, 3.0] myNormal2 = ot.Normal(mu2, sigma, R2) myMixture = ot.Mixture([myNormal1, myNormal2], [0.3, 0.7]) graphPDF = myMixture.drawPDF() graphPDF.setXTitle('$x_1$') graphPDF.setYTitle('$x_1$') graphCDF = myMixture.drawCDF() graphCDF.setXTitle('$x_1$') graphCDF.setYTitle('$x_2$') fig = plt.figure(figsize=(8, 4)) plt.suptitle("Mixture: 0.3*Normal1 + 0.7*Normal2: pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/MixtureClassifier.py000066400000000000000000000020331307543307100232350ustar00rootroot00000000000000from __future__ import print_function import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View import math as m Id = ot.IdentityMatrix(2) atoms = [ot.Normal([1.0, 2.0], [0.5, 0.8], Id), ot.Normal( [1.0, -2.0], [0.9, 0.8], Id), ot.Normal([-1.0, 0.0], [0.5, 0.6], Id)] weights = [0.3, 0.3, 0.4] mixture = ot.Mixture(atoms, weights) data = mixture.getSample(1000) classifier = ot.MixtureClassifier(mixture) graph = mixture.drawPDF(data.getMin(), data.getMax()) graph.setLegendPosition("") graph.setTitle("Mixture classification") classes = classifier.classify(data) palette = ot.Drawable.BuildDefaultPalette(len(atoms)) symbols = ot.Drawable.GetValidPointStyles() for i in range(classes.getSize()): index = classes[i] graph.add( ot.Cloud([data[i]], palette[index % len(palette)], symbols[index % len(symbols)])) fig = plt.figure(figsize=(4, 4)) plt.suptitle("MixtureClassifier example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/MonteCarloExperiment.py000066400000000000000000000012361307543307100237030ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View ot.RandomGenerator.SetSeed(0) # Generate sample with the given plane distribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) size = 10 myPlane = ot.MonteCarloExperiment(distribution, size) sample = myPlane.generate() # Create an empty graph graph = ot.Graph("", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Monte Carlo experiment") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/NonStationaryCovarianceModelFactory.py000066400000000000000000000047351307543307100267220ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View # Create the covariance function at (s,t) def C(s, t): return exp(-4.0 * abs(s - t) / (1 + (s * s + t * t))) def covModRef(X): return [C(X[0], X[1])] myFuncCovarianceRef = ot.PythonFunction(2, 1, covModRef) myFuncCovarianceRef.setDescription(["s", "t", "C"]) t0 = -4.0 tmax = 4.0 # Draw the isocontours of the discretized covariance function myGraphRef = myFuncCovarianceRef.draw([t0, t0], [tmax, tmax]) alld = myGraphRef.getDrawables() levels = ot.Point(alld.getSize()) for i in range(alld.getSize()): d = alld[i] d.setLineStyle("twodash") d.setLineWidth(2) myGraphRef.setDrawable(d, i) levels[i] = d.getLevels()[0] # Create the time grid # for iN in range(2, 11): # t_00 = time() N = 2**5 dt = (tmax - t0) / N myMesh = ot.RegularGrid(t0, dt, N) # Keep only time stamps in the time-grid tmax = myMesh.getEnd() # Create the collection of HermitianMatrix myCovarianceCollection = ot.CovarianceMatrixCollection() index = 0 for k in range(N): s = myMesh.getValue(k) for l in range(k + 1): t = myMesh.getValue(l) matrix = ot.CovarianceMatrix(1) matrix[0, 0] = C(s, t) index += 1 myCovarianceCollection.add(matrix) # Create the covariance model myCovarianceModel = ot.UserDefinedCovarianceModel( myMesh, myCovarianceCollection) # Create the non stationary Normal process with # that covariance model myProcess = ot.GaussianProcess(myCovarianceModel, myMesh) # Create a sample of fields size = 10**4 myFieldSample = myProcess.getSample(size) # Build a covariance model factory myFactory = ot.NonStationaryCovarianceModelFactory() # Estimation on a the ProcessSample myEstimatedModel = myFactory.build(myFieldSample) # Define the python function associated to myCovarianceModel def covMod(X): return [myEstimatedModel(X[0], X[1])[0, 0]] myFuncCovariance = ot.PythonFunction(2, 1, covMod) cov_graph = ot.Graph(myGraphRef) alld = myFuncCovariance.draw([t0, t0], [tmax, tmax]).getDrawables() palette = ot.Drawable.BuildDefaultPalette(alld.getSize()) for i in range(alld.getSize()): d = alld[i] d.setLegend("") d.setLevels([levels[i]]) d.setColor(palette[i]) d.setDrawLabels(False) cov_graph.add(d) fig = plt.figure(figsize=(10, 4)) plt.suptitle('Non stationary covariance model estimation') cov_axis = fig.add_subplot(111) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) openturns-1.9/python/doc/pyplots/OrdinalSumCopula.py000066400000000000000000000012671307543307100230240ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View myCop1 = ot.GumbelCopula(2) myCop2 = ot.NormalCopula(2) alpha = 0.3 myOrdSumCop = ot.OrdinalSumCopula([myCop1, myCop2], [alpha]) myOrdSumCop.setDescription(['$u_1$', '$u_2$']) graphPDF = myOrdSumCop.drawPDF() graphCDF = myOrdSumCop.drawCDF() fig = plt.figure(figsize=(8, 4)) plt.suptitle("Ordinal Sum of Copulas: Gumbel(2) and Normal(2): pdf and cdf") pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) pdf_axis.set_xlim(auto=True) cdf_axis.set_xlim(auto=True) View(graphPDF, figure=fig, axes=[pdf_axis], add_legend=True) View(graphCDF, figure=fig, axes=[cdf_axis], add_legend=True) openturns-1.9/python/doc/pyplots/P1LagrangeEvaluation.py000066400000000000000000000011701307543307100235450ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View mesh = ot.RegularGrid(0.0, 1.0, 4) values = [[0.5], [1.5], [1.0], [-0.5]] field = ot.Field(mesh, values) func = ot.P1LagrangeEvaluation(field) func.setDescription(['$x$', '$y$']) graph = func.draw(-1.0, 4.0, 1024) cloud = ot.Cloud(mesh.getVertices(), values) cloud.setPointStyle("square") graph.add(cloud) graph.setColors(["blue", "red"]) fig = plt.figure(figsize=(10, 4)) plt.suptitle('P1 Lagrange interpolation') func_axis = fig.add_subplot(111) view = View(graph, figure=fig, axes=[func_axis], add_legend=False) openturns-1.9/python/doc/pyplots/Pairs.py000066400000000000000000000012151307543307100206520ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View R = ot.CorrelationMatrix(3) for i in range(1, 3): R[i, i - 1] = -0.4 distribution = ot.Normal([0.] * 3, [5.] * 3, R) sample = distribution.getSample(200) # Create an empty graph graph = ot.Graph("Pairs", " ", " ", True, "") # Create the Pairs pairs = ot.Pairs(sample, "Pairs example", sample.getDescription(), "blue", "bullet") # Then, draw it graph.add(pairs) fig = plt.figure(figsize=(5, 4)) plt.suptitle("Pairs example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/Pie.py000066400000000000000000000006341307543307100203150ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create the Pie pie = ot.Pie([.4, .3, .2, .1], ['a0', 'a1', 'a2', 'a3']) # Create an empty graph graph = ot.Graph() graph.add(pie) # Then, draw it fig = plt.figure(figsize=(4, 4)) plt.suptitle("Pie example") axis = fig.add_subplot(111) View(graph, figure=fig, axes=[axis], add_legend=False) axis.set_xlim(auto=True) openturns-1.9/python/doc/pyplots/Polygon.py000066400000000000000000000016751307543307100212350ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Generate the data for the polygons to be drawn size = 50 cursor = ot.Point(2) data1 = ot.Sample(size, 2) # polygon y = 2x for x in [-25] data2 = ot.Sample(size, 2) # polygon y = x*x for x in [-11] for i in range(size): tmp = 7. * i / size + 2 cursor[0] = tmp cursor[1] = 2 * tmp data1[i] = cursor tmp = 9. * i / size + 1 cursor[0] = tmp cursor[1] = tmp * tmp data2[i] = cursor # Create an empty graph graph = ot.Graph("Polygons example", "x1", "x2", True, "", 1.0) # Create the first polygon myPolygon1 = ot.Polygon(data1) myPolygon1.setColor("blue") # Then, draw it graph.add(myPolygon1) # Create the second polygon myPolygon2 = ot.Polygon(data2) myPolygon2.setColor("red") # Add it to the graph and draw everything graph.add(myPolygon2) graph.setLogScale(1) fig = plt.figure(figsize=(5, 5)) View(graph, figure=fig) openturns-1.9/python/doc/pyplots/PolygonArray.py000066400000000000000000000007221307543307100222240ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) generator = ot.Normal(2) size = 5 array = [] palette = ot.Drawable.BuildDefaultPalette(size) for i in range(size): vertices = generator.getSample(3) array.append(ot.Polygon(vertices, palette[i], palette[size - i - 1])) graph = ot.Graph('PolygonArray example', 'x1', 'x2', True, '', 1.0) graph.add(ot.PolygonArray(array)) View(graph, figure_kwargs={'figsize': (4, 4)}) openturns-1.9/python/doc/pyplots/ProcessSample.py000066400000000000000000000007621307543307100223620ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a bivariate normal process myTG = ot.RegularGrid(0.0, 0.01, 100) myCov = ot.ExponentialModel([3.0], [1.2]) myProcess = ot.GaussianProcess(myCov, myTG) myPS = myProcess.getSample(6) sample_graph = myPS.drawMarginal(0) fig = plt.figure(figsize=(10, 4)) plt.suptitle('A sample of fields') sample_axis = fig.add_subplot(111) View(sample_graph, figure=fig, axes=[sample_axis], add_legend=False) openturns-1.9/python/doc/pyplots/SpectralModelFactory.py000066400000000000000000000050271307543307100236670ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View # Create the time grid # In the context of the spectral estimate or Fourier transform use, # we use data blocs with size of form 2^p tMin = 0. timeStep = 0.1 size = pow(2, 12) myTimeGrid = ot.RegularGrid(tMin, timeStep, size) # We fix the parameter of the Cauchy model amplitude = [5] scale = [3] model = ot.ExponentialCauchy(scale, amplitude) myNormalProcess = ot.SpectralGaussianProcess(model, myTimeGrid) # Get a time series or a sample of time series # myTimeSeries = myNormalProcess.getRealization() mySample = myNormalProcess.getSample(1000) mySegmentNumber = 10 myOverlapSize = 0.3 # Build a spectral model factory myFactory = ot.WelchFactory(ot.Hanning(), mySegmentNumber, myOverlapSize) # Estimation on a TimeSeries or on a ProcessSample # myEstimatedModel_TS = myFactory.build(myTimeSeries) myEstimatedModel_PS = myFactory.buildAsUserDefinedSpectralModel(mySample) # Change the filtering window myFactory.setFilteringWindows(ot.Hamming()) # Get the FFT algorithm myFFT = myFactory.getFFTAlgorithm() # Get the frequencyGrid frequencyGrid = myEstimatedModel_PS.getFrequencyGrid() # With the model, we want to compare values # We compare values computed with theoritical values plotSample = ot.Sample(frequencyGrid.getN(), 3) # Loop of comparison ==> data are saved in plotSample for k in range(frequencyGrid.getN()): freq = frequencyGrid.getStart() + k * frequencyGrid.getStep() plotSample[k, 0] = freq plotSample[k, 1] = abs(myEstimatedModel_PS(freq)[0, 0]) plotSample[k, 2] = abs(model.computeSpectralDensity(freq)[0, 0]) # Graph section # We build 2 curves # each one is function of frequency values ind = ot.Indices(2) ind.fill() # Some cosmetics : labels, legend position, ... graph = ot.Graph("Estimated spectral function - Validation", "Frequency", "Spectral density function", True, "topright", 1.0, ot.GraphImplementation.LOGY) # The first curve is the estimate density as function of frequency curve1 = ot.Curve(plotSample.getMarginal(ind)) curve1.setColor('blue') curve1.setLegend('estimate model') # The second curve is the theoritical density as function of frequency ind[1] = 2 curve2 = ot.Curve(plotSample.getMarginal(ind)) curve2.setColor('red') curve2.setLegend('Cauchy model') graph.add(curve1) graph.add(curve2) fig = plt.figure(figsize=(10, 4)) plt.suptitle('Spectral model estimation') graph_axis = fig.add_subplot(111) view = View(graph, figure=fig, axes=[graph_axis], add_legend=False) openturns-1.9/python/doc/pyplots/Staircase.py000066400000000000000000000015601307543307100215150ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View distribution = ot.Normal([0.5], [2.], ot.CorrelationMatrix(1)) sample = distribution.getSample(200) # Construct empirical CDF for the sample data = ot.Sample(20, 2) cursor = ot.Point(2) for i in range(20): cursor[0] = 13. * i / 20 - 6.5 count = 0. for j in range(200): if(sample[j, 0] < cursor[0]): count += 1. cursor[1] = count / 200 data[i] = cursor # Create an empty graph graph = ot.Graph("Some curves", "x1", "x2", True, "topleft") # Create the staircase staircase = ot.Staircase(data, "blue", "solid", "s", "Normal CDF") # Then, draw it graph.add(staircase) fig = plt.figure(figsize=(4.5, 4)) plt.suptitle("Staircase example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/StationaryCovarianceModelFactory.py000066400000000000000000000021401307543307100262330ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View N = 512 a = 20.0 # myMesh = ot.IntervalMesher([N]).build(ot.Interval(-a, a)) myMesh = ot.RegularGrid(0.0, 2 * a / N, N + 1) covarianceModel = ot.ExponentialModel([1.0], [1.0]) myProcess = ot.GaussianProcess(covarianceModel, myMesh) mySample = myProcess.getSample(1000) myCovarianceFactory = ot.StationaryCovarianceModelFactory() myEstimatedModel = myCovarianceFactory.build(mySample) def f(x): res = covarianceModel(x)[0, 0] return [res] func = ot.PythonFunction(1, 1, f) func.setDescription(['$t$', '$cov$']) def fEst(X): res = myEstimatedModel(X)[0, 0] return [res] funcEst = ot.PythonFunction(1, 1, fEst) funcEst.setDescription(['$t$', '$cov_{est}$']) cov_graph = func.draw(-a / 4, a / 4, 1024) cov_graph.add(funcEst.draw(-a / 4, a / 4, 1024)) cov_graph.setColors(['blue', 'red']) fig = plt.figure(figsize=(10, 4)) plt.suptitle('Stationary covariance model estimation') cov_axis = fig.add_subplot(111) view = View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) openturns-1.9/python/doc/pyplots/Text.py000066400000000000000000000021331307543307100205200ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View distribution = ot.Normal(2) sample = distribution.getSample(30) # Create an empty graph graph = ot.Graph("Normal sample", "x1", "x2", True, "") # Create the cloud cloud = ot.Cloud(sample, "blue", "fsquare", "") # Then, draw it graph.add(cloud) # Display extrema indices x1 = [x[0] for x in sample[:, 0]] x2 = [x[0] for x in sample[:, 1]] idx = [0] * 4 idx[0] = x1.index(min(x1)) idx[1] = x1.index(max(x1)) idx[2] = x2.index(min(x2)) idx[3] = x2.index(max(x2)) labels = ot.Description(sample.getSize()) for i in range(4): labels[idx[i]] = str(idx[i]) position = ot.Description(sample.getSize(), "top") position[idx[0]] = "right" position[idx[1]] = "left" position[idx[2]] = "top" position[idx[3]] = "bottom" annotations = ot.Text(sample, labels) annotations.setColor("red") annotations.setTextPositions(position) graph.add(annotations) fig = plt.figure(figsize=(4, 4)) plt.suptitle("Cloud example") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=False) openturns-1.9/python/doc/pyplots/TimeSeries.py000066400000000000000000000007551307543307100216550ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a bivariate normal process myTG = ot.RegularGrid(0.0, 0.01, 100) myCov = ot.ExponentialModel([3.0], [1.2]) myProcess = ot.GaussianProcess(myCov, myTG) myTS = myProcess.getRealization() graph = myTS.drawMarginal(0) fig = plt.figure(figsize=(8, 4)) plt.suptitle("A time series") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/TrendFactory.py000066400000000000000000000027201307543307100222020ustar00rootroot00000000000000import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View # Create a process on a regular grid myGrid = ot.RegularGrid(0.0, 0.1, 100) amplitude = [5.0] scale = [0.2] myCovModel = ot.ExponentialModel(scale, amplitude) myXProcess = ot.GaussianProcess(myCovModel, myGrid) # Create a trend fTrend = ot.SymbolicFunction(["t"], ["1+2*t+t^2"]) fTemp = ot.TrendTransform(fTrend) # Add the trend to the process and get a field myYProcess = ot.CompositeProcess(fTemp, myXProcess) myYField = myYProcess.getRealization() # Create a TrendFactory myBasisSequenceFactory = ot.LARS() myFittingAlgorithm = ot.KFold() func1 = ot.SymbolicFunction(["t"], ["1"]) func2 = ot.SymbolicFunction(["t"], ["t"]) func3 = ot.SymbolicFunction(["t"], ["t^2"]) myBasis = ot.Basis([func1, func2, func3]) myTrendFactory = ot.TrendFactory(myBasisSequenceFactory, myFittingAlgorithm) # Estimate the trend myTrendTransform = myTrendFactory.build(myYField, myBasis) graph = myTrendTransform.getEvaluation().draw(0.0, 10) graph.add(fTrend.draw(0.0, 10)) graph.add(ot.Cloud(myYField.getMesh().getVertices(), myYField.getValues())) graph.setColors(['red', 'blue', 'black']) graph.setLegends(['estimated trend', 'real trend', 'sample']) graph.setLegendPosition('topleft') graph.setYTitle('values') fig = plt.figure(figsize=(8, 4)) plt.suptitle("Trend estimation from a field") axis = fig.add_subplot(111) axis.set_xlim(auto=True) View(graph, figure=fig, axes=[axis], add_legend=True) openturns-1.9/python/doc/pyplots/UserDefinedCovarianceModel.py000066400000000000000000000020661307543307100247520ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View def C(s, t): return exp(-4.0 * abs(s - t) / (1 + (s * s + t * t))) N = 64 a = 4.0 # myMesh = ot.IntervalMesher([N]).build(ot.Interval(-a, a)) myMesh = ot.RegularGrid(-a, 2 * a / N, N + 1) myCovarianceCollection = ot.CovarianceMatrixCollection() for k in range(myMesh.getVerticesNumber()): t = myMesh.getVertices()[k] for l in range(k + 1): s = myMesh.getVertices()[l] matrix = ot.CovarianceMatrix(1) matrix[0, 0] = C(s[0], t[0]) myCovarianceCollection.add(matrix) covarianceModel = ot.UserDefinedCovarianceModel(myMesh, myCovarianceCollection) def f(x): return [covarianceModel([x[0]], [x[1]])[0, 0]] func = ot.PythonFunction(2, 1, f) func.setDescription(['$s$', '$t$', '$cov$']) cov_graph = func.draw([-a] * 2, [a] * 2, [512] * 2) fig = plt.figure(figsize=(10, 4)) plt.suptitle('User defined covariance model') cov_axis = fig.add_subplot(111) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) openturns-1.9/python/doc/pyplots/UserDefinedSpectralModel.py000066400000000000000000000025511307543307100244540ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View # Create the frequency grid fmin = 0.1 df = 0.2 N = int((10.0 - fmin) / df) myFrequencyGrid = ot.RegularGrid(fmin, df, N) # Spectral function def s(f): if(f <= 5.0): return 1.0 else: x = f - 5.0 return exp(-2.0 * x * x) # Create the collection of HermitianMatrix myCollection = ot.HermitianMatrixCollection() for k in range(N): frequency = myFrequencyGrid.getValue(k) matrix = ot.HermitianMatrix(1) matrix[0, 0] = s(frequency) myCollection.add(matrix) # Create the spectral model mySpectralModel = ot.UserDefinedSpectralModel(myFrequencyGrid, myCollection) # Graph of the spectral function x = ot.Sample(N, 2) for k in range(N): frequency = myFrequencyGrid.getValue(k) x[k, 0] = frequency value = mySpectralModel(frequency) x[k, 1] = value[0, 0].real # Create the curve of the spectral function myCurve = ot.Curve(x, 'UserSpectral') # Create the graph myGraph = ot.Graph('User Spectral Model', 'Frequency', 'Spectral density value', True) myGraph.add(myCurve) myGraph.setLegendPosition('topright') fig = plt.figure(figsize=(10, 4)) plt.suptitle('User Defined Spectral Model') cov_axis = fig.add_subplot(111) view = View(myGraph, figure=fig, axes=[cov_axis], add_legend=False) openturns-1.9/python/doc/pyplots/UserDefinedStationaryCovarianceModel.py000066400000000000000000000015721307543307100270310ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View def C(tau): return 1.0 / (1.0 + tau * tau) t0 = 0.0 t1 = 20.0 N = 40 dt = (t1 - t0) / (N - 1) myMesh = ot.RegularGrid(t0, dt, N) myCovarianceCollection = ot.CovarianceMatrixCollection() for k in range(N): t = myMesh.getValue(k) matrix = ot.CovarianceMatrix(1) matrix[0, 0] = C(t) myCovarianceCollection.add(matrix) covarianceModel = ot.UserDefinedStationaryCovarianceModel( myMesh, myCovarianceCollection) def f(tau): return [covarianceModel(tau)[0, 0]] func = ot.PythonFunction(1, 1, f) func.setDescription(['$t$', '$cov$']) cov_graph = func.draw(0.0, 20.0, 512) fig = plt.figure(figsize=(10, 4)) plt.suptitle('User defined covariance model') cov_axis = fig.add_subplot(111) View(cov_graph, figure=fig, axes=[cov_axis], add_legend=False) openturns-1.9/python/doc/pyplots/VisualTest_DrawClouds.py000066400000000000000000000006631307543307100240340ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) dimension = 2 R = ot.CorrelationMatrix(dimension) R[0, 1] = 0.8 size = 100 sample1 = ot.Normal([3.] * dimension, [2.] * dimension, R).getSample(size) sample2 = ot.Normal([2.] * dimension, [3.] * dimension, R).getSample(size // 2) samplesClouds = ot.VisualTest_DrawClouds(sample1, sample2) View(samplesClouds, figure_kwargs={'figsize': (4, 4)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawCobWeb.py000066400000000000000000000016521307543307100237430ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 inputDimension = 6 inputSample = ot.Normal(inputDimension).getSample(size) inputVar = ot.Description(inputDimension) for i in range(inputDimension): inputVar[i] = 'X' + str(i) inputSample.setDescription(inputVar) formula = ot.Description(1) expression = '' for i in range(inputDimension): if i > 0: expression += '+' expression += 'cos(' + str(i + 1) + '*' + inputVar[i] + ')' formula[0] = expression outputVar = ot.Description(1) outputVar[0] = 'y' model = ot.Function(inputVar, outputVar, formula) outputSample = model(inputSample) cobweb = ot.VisualTest_DrawCobWeb( inputSample, outputSample, 2.5, 3.0, 'red', False) bb = cobweb.getBoundingBox() # define the increasing factor of the bounding box factor = 1.1 bb[1] = factor * bb[1] cobweb.setBoundingBox(bb) View(cobweb, figure_kwargs={'figsize': (10, 4)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawEmpiricalCDF.py000066400000000000000000000004771307543307100250300ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 normal = ot.Normal(1) sample = normal.getSample(size) sampleCDF = ot.VisualTest_DrawEmpiricalCDF( sample, sample.getMin()[0] - 1.0, sample.getMax()[0] + 1.0) View(sampleCDF, figure_kwargs={'figsize': (4.5, 4.5)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawHenryLine.py000066400000000000000000000004031307543307100244700ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 normal = ot.Normal(1) sample = normal.getSample(size) henryPlot = ot.VisualTest_DrawHenryLine(sample) View(henryPlot, figure_kwargs={'figsize': (4.5, 4.5)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawHistogram.py000066400000000000000000000004011307543307100245260ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 normal = ot.Normal(1) sample = normal.getSample(size) sampleHist = ot.VisualTest_DrawHistogram(sample) View(sampleHist, figure_kwargs={'figsize': (6, 4)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawKendallPlot.py000066400000000000000000000005261307543307100250120ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 copula1 = ot.FrankCopula(1.5) copula2 = ot.GumbelCopula(4.5) sample1 = copula1.getSample(size) sample1.setName('data 1') kendallPlot = ot.VisualTest_DrawKendallPlot(sample1, copula2) View(kendallPlot, figure_kwargs={'figsize': (4.5, 4.5)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawLinearModel.py000066400000000000000000000012301307543307100247650ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) dimension = 2 R = ot.CorrelationMatrix(dimension) R[0, 1] = 0.8 distribution = ot.Normal([3.] * dimension, [2.] * dimension, R) size = 100 sample = distribution.getSample(size) firstSample = ot.Sample(size, 1) secondSample = ot.Sample(size, 1) for i in range(size): firstSample[i] = ot.Point(1, sample[i, 0]) secondSample[i] = ot.Point(1, sample[i, 1]) lmtest = ot.LinearModelFactory().build(firstSample, secondSample) drawLinearModel = ot.VisualTest_DrawLinearModel( firstSample, secondSample, lmtest) View(drawLinearModel, figure_kwargs={'figsize': (5, 5)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawLinearModelResidual.py000066400000000000000000000012601307543307100264610ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) dimension = 2 R = ot.CorrelationMatrix(dimension) R[0, 1] = 0.8 distribution = ot.Normal([3.] * dimension, [2.] * dimension, R) size = 100 sample = distribution.getSample(size) firstSample = ot.Sample(size, 1) secondSample = ot.Sample(size, 1) for i in range(size): firstSample[i] = ot.Point(1, sample[i, 0]) secondSample[i] = ot.Point(1, sample[i, 1]) lmtest = ot.LinearModelFactory().build(firstSample, secondSample) drawLinearModelResidual = ot.VisualTest_DrawLinearModelResidual( firstSample, secondSample, lmtest) View(drawLinearModelResidual, figure_kwargs={'figsize': (5, 5)}) openturns-1.9/python/doc/pyplots/VisualTest_DrawQQplot.py000066400000000000000000000004011307543307100240110ustar00rootroot00000000000000import openturns as ot from openturns.viewer import View ot.RandomGenerator.SetSeed(0) size = 100 normal = ot.Normal(1) sample = normal.getSample(size) QQPlot = ot.VisualTest_DrawQQplot(sample, normal) View(QQPlot, figure_kwargs={'figsize': (4.5, 4.5)}) openturns-1.9/python/doc/pyplots/WelchFactory.py000066400000000000000000000050271307543307100221730ustar00rootroot00000000000000import openturns as ot from math import exp from matplotlib import pyplot as plt from openturns.viewer import View # Create the time grid # In the context of the spectral estimate or Fourier transform use, # we use data blocs with size of form 2^p tMin = 0. timeStep = 0.1 size = pow(2, 12) myTimeGrid = ot.RegularGrid(tMin, timeStep, size) # We fix the parameter of the Cauchy model amplitude = [5] scale = [3] model = ot.ExponentialCauchy(scale, amplitude) myNormalProcess = ot.SpectralGaussianProcess(model, myTimeGrid) # Get a time series or a sample of time series # myTimeSeries = myNormalProcess.getRealization() mySample = myNormalProcess.getSample(1000) mySegmentNumber = 10 myOverlapSize = 0.3 # Build a spectral model factory myFactory = ot.WelchFactory(ot.Hanning(), mySegmentNumber, myOverlapSize) # Estimation on a TimeSeries or on a ProcessSample # myEstimatedModel_TS = myFactory.build(myTimeSeries) myEstimatedModel_PS = myFactory.buildAsUserDefinedSpectralModel(mySample) # Change the filtering window myFactory.setFilteringWindows(ot.Hamming()) # Get the FFT algorithm myFFT = myFactory.getFFTAlgorithm() # Get the frequencyGrid frequencyGrid = myEstimatedModel_PS.getFrequencyGrid() # With the model, we want to compare values # We compare values computed with theoritical values plotSample = ot.Sample(frequencyGrid.getN(), 3) # Loop of comparison ==> data are saved in plotSample for k in range(frequencyGrid.getN()): freq = frequencyGrid.getStart() + k * frequencyGrid.getStep() plotSample[k, 0] = freq plotSample[k, 1] = abs(myEstimatedModel_PS(freq)[0, 0]) plotSample[k, 2] = abs(model.computeSpectralDensity(freq)[0, 0]) # Graph section # We build 2 curves # each one is function of frequency values ind = ot.Indices(2) ind.fill() # Some cosmetics : labels, legend position, ... graph = ot.Graph("Estimated spectral function - Validation", "Frequency", "Spectral density function", True, "topright", 1.0, ot.GraphImplementation.LOGY) # The first curve is the estimate density as function of frequency curve1 = ot.Curve(plotSample.getMarginal(ind)) curve1.setColor('blue') curve1.setLegend('estimate model') # The second curve is the theoritical density as function of frequency ind[1] = 2 curve2 = ot.Curve(plotSample.getMarginal(ind)) curve2.setColor('red') curve2.setLegend('Cauchy model') graph.add(curve1) graph.add(curve2) fig = plt.figure(figsize=(10, 4)) plt.suptitle('Spectral model estimation') graph_axis = fig.add_subplot(111) view = View(graph, figure=fig, axes=[graph_axis], add_legend=False) openturns-1.9/python/doc/sphinxext/000077500000000000000000000000001307543307100175435ustar00rootroot00000000000000openturns-1.9/python/doc/sphinxext/execforresourcemap_directive.py000066400000000000000000000047221307543307100260610ustar00rootroot00000000000000import sys from os.path import basename import openturns as ot from io import StringIO from sphinx.util.compat import Directive from docutils import nodes, statemachine class execforresourcemap_directive(Directive): """Execute the specified python code and insert the output into the document""" has_content = True def run(self): oldStdout, sys.stdout = sys.stdout, StringIO() source = self.state_machine.input_lines.source( self.lineno - self.state_machine.input_offset - 1) try: table = nodes.table() tgroup = nodes.tgroup(cols=2) table += tgroup tgroup += nodes.colspec(colwidth=25, classes=['key']) tgroup += nodes.colspec(colwidth=8, classes=['value']) thead = nodes.thead() tgroup += thead # Add headers row = nodes.row() thead += row entry = nodes.entry() row += entry node = nodes.paragraph(text='Key') entry += node entry = nodes.entry() row += entry node = nodes.paragraph(text='Value') entry += node # Add body tbody = nodes.tbody() tgroup += tbody row = nodes.row() tbody += row for key in ot.ResourceMap.GetKeys(): row = nodes.row() tbody += row entry = nodes.entry() row += entry node = nodes.paragraph(text=key) entry += node entry = nodes.entry() row += entry value = ot.ResourceMap.Get(key) if not len(value): value = ' '.__repr__() if '\t' in value: value = value.replace('\t', '\\t') node = nodes.paragraph(text=value) entry += node return [table] except Exception: return [nodes.error(None, nodes.paragraph(text="Unable to execute python code at %s:%d:" % (basename(source), self.lineno)), nodes.paragraph(text=str(sys.exc_info()[1])))] finally: sys.stdout = oldStdout def setup(app): setup.app = app setup.config = app.config setup.confdir = app.confdir app.add_directive('execforresourcemap', execforresourcemap_directive) metadata = {'version': '0', 'parallel_read_safe': True} return metadata openturns-1.9/python/doc/themes/000077500000000000000000000000001307543307100167765ustar00rootroot00000000000000openturns-1.9/python/doc/themes/openturns/000077500000000000000000000000001307543307100210335ustar00rootroot00000000000000openturns-1.9/python/doc/themes/openturns/layout.html000066400000000000000000000023211307543307100232340ustar00rootroot00000000000000{# basic/layout.html ~~~~~~~~~~~~~~~~~ Master layout template for Sphinx themes. :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- extends "basic/layout.html" %} {# put the sidebar before the body #} {% block sidebar1 %}{{ sidebar() }}{% endblock %} {% block sidebar2 %}{% endblock %} {# enable font #} {% block extrahead %} {{ super() }} {% endblock %} {# static banner #} {% block header %} {% endblock %} openturns-1.9/python/doc/themes/openturns/static/000077500000000000000000000000001307543307100223225ustar00rootroot00000000000000openturns-1.9/python/doc/themes/openturns/static/biglogo-openturns.jpg000066400000000000000000001251331307543307100265060ustar00rootroot00000000000000JFIFHHExifMM*C  !"$"$C" Z !1A"Qa2q#%4BRbr$35csCSTUdt&'Ee6u> !1A4Qq"23RSar5Bb#$%C ?= &n+/5 TB/KRT%fAqO>I}喍6v|CYԉ0 L(z2F^K|z7Gv|}ָ']%E @ :g_R9Q Xhk\dc-v|qTyjSfI(zH<{C>JJDz<҇Xhk?@LzYZϒ9nk Jb.o\H3Ǒ'>J &"B*uPGz9Q},_etq?MEY[TPG$H4!xz=,qhg?g#iT783НB9Q~ї8"qk *)Дi4G4 /2:X!$u=-gQ^(z~2F^K{Llg#?M Tl&ANb~sJ~ї Ƈ>I;=>U>J 'b(z~2F^<{#C>IK<{-Ϩ0iCA,_eǟ %Yȟv|ÜG4QsJb.kGO>H\x䨍9J\5TG4sJb/?uI84'%FkCPsJb/'J iޜN=D2F^~Ixtƛ]%Cyp[NQB4 /2ΖYƄdž 4䨡8:%(z~2F^K\{1I-qihϒL(z^3F]itiCA,_e,88m&*W ޥ 2Yz.16Zb/X &gFhbe^ Svmw)%eL'wׯٝ»IWb\DOpr \:5,h/{9}$H H; A@֘9ޘ: p &HD{$.3'׸G$9lR9Dĥ:t)e%)+B`>YrN`j;H beGrDBv 9Ԣe #4<)Mf w4 n4: n^CNj"I:wG`$!,n]!3d"<20MBD$k Jwmy  3A$S T v:#כK@=D&A25DjAP|;0JN$q:w Do! 퍏zr )!& O$;@ :7t&=4C䄓fdˣ+^PJ`0P;R3aO4kZ23d1GT CLyD  ڍ#d֝ J@- @9ggNvȽИz[!'DI!3N@Ŵ#\ڑ3c1z*ѳz@ ЛC4 +}#pٸ RgFõwSBM_,6K c[b\@A< X^S?T?[VVG63Uw3R3 rfIqK3t\(tIɔpcu<,f;!7"vNÄvF"P,N&_Hd9k`(d]O4^S l:]:| %'bD"1I ;h@H t@6\ܘcu0ȩbc 5OrU d t78@H;.sZC\Ik$N(ee6h!; 486 S2 ZCI\TcJJ%kI E & H;dc]RxtrHfL.$ l!=r)Fc1$@O ) &h(jڄ4Ԣte'XL"ZwLb ?؞;RJ&JFAzBSD@ s Ir% t'TEDViN@%!$& Oh1:Mno9&c`I(ƉA'1!8e6gdki)ăZ@%DcO.hy0ulg02 t<աڻ?/j?/Yw| .{:{s7ayںbQ\:[+7~Y{wޅSy hS !q <I ɝycZܡ!6\BIJ )jZ@L; H@95!dI5H'N2B'vb* v%!ƩH)i Nl`rHp9AIDG 5&D,`qq#w$?` gmDDb' J dGn%Ԧe { iХf:ehtFD-Q1`^::Zګ/CUZrUf Z֘~ŭZ)*khz=%&LO$& LɆ ۦQ&yrfvý>/\ B#MD,Ӵlh)0 krFbwMA;2גF"oR` itA)2NNd;$$k@rCs@Pg$n+˴C姭D$nĸZwr6 Mff;!\&&"PTkdOz&I$j;F `G(%`E-? \٘l8{᧺ c-vW֬偃_+aky Qy\;fɱ?[t?P0N-x?囶U}<{ ˽E[6Q 38aq*4"1G3nCtQQ@(WAR: T$I4ID!}6vY[`71*7Tk bF]Ypi+1ӆ7 ..ro{X!qI rӽ܂S7wzL"k$ $Zv"n[h5LJnq왟HkQ8:P@Z䁺f"r qeֻ %6Ɂ ڵKkOZ*1ޖ򽯘ZWD, f$r6s ;&uF C;%5 mi.q5BZI=@4Ԥ=3蔒H@k'%`dk :7"SLv2tHB;5C}i?rc5o ȓ: C`;L֐Q@YA@@{&5&;1 }H`0=9J\@#/ra=x#%)O!07qn1bv-h,S%~1XRԹ4 . ^ꩩqZ$!O.02o QRTwsF?ד#F;X3 ;@t;A3CgNUvFl"uKCY`R;02z=L@ QT%ݬ@)f!8#d9rًQ q-!;@ n0d6Bg>cY!)]'D{A(6BؠIږQT˩y NNďrN`t"PHR[T];ToB( J d=2ђRGsMC:Ǿ?[E]}>sB'|-yJxԸ;[@ttYggR_c̉|ȈK(T& 9Bdrj3RG5@)Pep@;R4Z9O2^e":B1BIp T9ܢYW?Bvj C3Tp@ Ѩ-s-6F@%ܒm9s'NP00s!1U0 `9)H$r2$0Т m3x=nմ|^H1=@)Bq]9T%f4v&s9Bi.v@hR"cyl'6IbC i!LEIPt NCz|a$AA %Hv8GL> XM@Ӵsh\CD8yRk'|@3܉TUTі:g3L'AIvR2qEǼn5GͮnC0k٢'m$$8 eY8u彍3RiR`#_\]X bmñ YVxs\HG#أo% 8%4ԦI#Awmed"! D9m 3!!;A B Nɵd1@3 $ID 2ј(äitP0HF\ѹL4'9ܶ)Cؒw@ 6?Z96$wc.nwK.Fv)! A왴׹͐Nu/vI.*=Jr\њ Bw= Lqyw'  Bۭ' *D+v>Ͻ󁏉'F~ <u/u^'o+ \j4>:u?K>η94DhB`hRvf֓@ '; %&F`u(I;9ZbQw бHp)zv᷊G$Z e@Le`G4@v`!M$@2HCLS:M6fVQNi/p ̘!,#tD! [9t5C4ԁ3MMмd_-r"X)2ؕ{QkNGrϿwglO B-s#I#Gj>2R|=;Xܖ3H z:Y{E:l$S*1&0'0昐NWOp1ae{z7"+21?jo]?qODt00`'!-NWwDZ"$IaN&"SGD۽"tH@}HlO rg#BTi Oj{>!rGOKp1-?k~!O|!#4B\#3 0NɍH J'@Ӓr*dã74 Fjqi2TA#m5Fd Ԣy-su%M 1ޜH V1@:ꓧqRZ{إDB.hQh)F \di y<-v>/oJVug4D 'QXC`vi::ZHr\/>Jj vˬpƣTphL0 S GZ˄4mF)`ɕAD@Bzwc~fNѼ5 zo& fQhd+Gp.1wUlidu {34"5*boRp9ԫ ISCZ;)I)0%09#L$v'Ԑhiߟzw@BKA˯vK$8"G$ĺg@vatMt5qtR.Dl(9&H @& aq<#rL췸 gtڝ;6g6DVuTٸg=e-V@kg\Sr/N.S6w7.OJSڳ1>v_)%83\AR!ZL, q UTTv;'kNi>@49@\ANJx8P1ϞЏ]\1q=8B Р9 J]h eiF$tL^#^i.>rydO RANӘ3Zvƻef`jĨUQ54Ú`%ÝF`Pr]BqrH Z޻}響Ը_$VIYW=e*{C@dOE ˣtJjS,ۜNlM%m3 .0 wG[7S9FpqА4[n^eju@KN;I2`oj?Yjl)]VC1ja]ːLU@>E]qfivP[6[+m(]w:!wQƣTL9$(cRA ҈29.l8fԡU%7naabgQL)nY5-"\`NmZ K\Y:H 0|6Wa&SLR E.r^g!3`6@Ek &?/ @hP5zZ.ja6.+>":ny-f%1Ũ׹]QfDDtTUHYu8Fb# $;]R:2 -H<0 ᝕KIBySCT~(1!{;4JDs:HTl`=eHP 'v'^iTdIIДS$w 3i))7mSjZH0we33AD(It6L;7 ` VL!L{.{ڮI߮ :h~~qUn5v-v~\y s"?d. ?3;kt%} dvn{NFe*Gd,kAyt)LB$fSeLO"/zm%1= ! XLNVB0XᲑ(ٲ # +wn+lV'mks /9K3oF_^ʸԌyK'Fpg%g05B]^e G<짦- XVGqATw4zGrK'MwƤdG!څ `{eo6 I1釂RkAda֮-Q^i  'XKb4ozsX Ov%eQ,Vv;5Ŭ$]XڹӷL8=SB.;ă2Q>%ed0GzRE݀@q>\1;[vǨ5~V2g#@u;(NiTgV[We8( 3%CQ`)IXBe͈I@n1Ϛj!giz11N=BB Fޤ4.IT$ b9kw()$I*) ShDZv}3p&UP?#>>Kϼ54a~(8o^Ũ=IDq|Zړ6\.kZZO-TOsېe]ܩP%fw6DA$䘸`$H)h3{lB(4A~IB HCaH v63ȴZH}wi˞Cb{l=Q\ꚳ+ O/jehU49641RI}`y9&NlsF-x@Ύ&nړòT`Dw74A8 tܰ%kQ TpBq6bNF4;&TuT#BK5|k ~gOA09&<0 3eniܧ&  ;1)݄Ꞧ0 ";͖&A[9-`ptj{ʋ ^ cS2O! ЕDWhl%RMy,{d{8Z'D^؍xN% \콭Or8@ZKCJ6lΨCK.2(`*|4& w;B$6%csE Pcj6$ c54y If!Ua]40(e m R&.da LyBӒI:PU28KJz2Ͻ%X nu&ǣ*f=B{0- jH'E΢]@te  ݖ% Nt>*&7C ^i @0q &uЩ$FlH:'nF$eᮐtFLd4( K$40$\bTOcָL~HJ)hӧ*P͕Ǘ#d :2Vω`G}R{Nޱku3d. DcÛ88"$ƂT 22( )#"ֹ';[Bge8x.-LG>?mWz;u9h=ḢŒ,\a\U7cgrS.qO.uV~?)|+=Ҵ2;v7DGy%=H!ƩˣABfԓi fh> ☼f (NKdѢ~/nPб0r.1GR9Ȣ恔jҔqѡڋZ2 gDt&N4N^3eqq 4AO lHHqd'F> y9r9[.~bKLP n#HQ⸝8Gj~m1bTX5Hҽn` 8FP$-^mu4 se$ > S9 gD$sNًhӚBFV>KeH ̥T4 ͥwkj 2Тv:u3aL>#CTiʝChJ2, ѡ擵i<&6> <FghQ@IiA sR;ôpЩ& 2B buQb"]NhXMSR#.Z`46NoԢh1KD>0Tʹ+yUR$ R!+єo A vTs9܀$s 9w"6(Y@(ZKLv\&Z-5R iS`Z kީNSZh`Jps ۙH;Ĺ$q?TӸOI` \@$qlC(K$1!u[+?(ٿj#Rg Vs{-`!UZ27vEb ]Ut뜏B,Xx-{׿5I-Ӣ%l ww.}ޓ5(jS. NYky 5oRznHLֈ3p솰@dHsFT"HrT=eO;+|$k[׫-O_c(Kkq9LL.X?\\Cď##V~;=?gC3ބ0f9J7FRN]O$'}YY\\ Zu벝JSkq*oa|1ұ±fT_AA,q'KtVMAUʛEM%F̀H@!XT F!&0#I#T+eNč0e҇gi2-Cc8'] 4i&j867/}nwGn 櫩V4hѝifQ{ s2 !/rV*\!e;iAI sD{#u6 /!pp)Iq0LNt\.<˻! $䣤Kج*.m֪:` y+&ݑp H88_tPAi,3-]=09(ӜjEJ:2uhʔ'%q teIR0wSЯB `ƨ ) F "F7hCX&@I!ڂANsWN#0_8Z̈́Ѥi2d ~J&4WVt'FrYKB7FGqPbhҦƆlzպVVh=YCh &F\W%fB@H)e{TQ'um?p,hXqFQ/~RӐLA=JTfe9BUk)khlrg<p&bUC0O;x t\!nfDR4wmS 5 C.AqD!t;+G\!6B)l] .3 uRiGzZP:܂̤5#TaF@N7rV*;Ƽ 5հTg4ajok9AJJ 4) pKd8,qd'Z懳Tk"4W.8Oc7 ǩꓟS.^D ɏR0=FTmj37NzIhAL@h{34DhUGP8 4z&<ay[^U~7=} /gj1. ~/z\qP]ÌoGoQ\&k?~%S&n{0=,h%GU]g$eB*4+c i\g-+RQTRO'q{KWҸ`S'(hwu3RSrtI*o촩rkIV,'qҳiXae[QͰv:ߢ@ji5t;)ed? \]kX^AkS j@:-+1j+^b5XvD>*ԥV GSfJ1''eq~t)v@쓪|%i$:HOme{Uji0LRmOV$RhYpJ}BTҵ Y$#I6.p.rPլzIƓw S' Q:AZbu;1TlnאwYM%N;6,L]%fKNJ%*ny(P2>*ӄ!lnI~Oh|5L2_g_NH,c9 @W$G=O I ݠ sZV#Zs;1c8eAoCr=4礬 S%)=ߊ] I=@6S"G$͂"E K͚V;B1mq3-XE;J>%=LgPA&1H<U&% H(;)nYip[}kSjIrK[zeh:IJUbCf1y;d̷@Q!eR>rhcEi"F۠էB! ;zma+3\Ne' DYNMIgwFV޳3 t),Qָ)9ẘQn-"6#}.8nxlkUg⸆1rfi9њt;nϒNtm )b%$`9Aۿ/HBkS8Κkq< @~n!P}C潍xǓ;<}M^λ+/ǵ _ 5ۃE7~fSf+M(f.\ Oʷd{)|$:^a5R@Rq oޢC05 H< &A l˚jݤ W7'йU B0t4ZڭvcUZDt+;bvi׹MrmLW.֙4j7 Eikqhꯦ:\ cnU2V'7t)ԬMځ)I- 44ΛsHjxk* ֝[rPFW@evVA+Sk}ԪOrz ŝ;5`Az)ZIzҳ2: љkN49!*67}sGP}JDGhFX*R-dA 17ݯrZ@ՍvyXPwXڳ kfI1*ؾպ86S5:OzM @2cQ-|Tվ,U^a9dYZ(Skt53" , mFFm l2:Ig=sVDi{N6Kg$?goZң*-ճT 6$NK}='zsX b2-` 6Li3I~by=]Sm67=eoדZ}@lk" Z yR{wCaucbjv!-(ģ=sr6*fѱ< ygQSu1oc\ !S: vRHiWF) w*gE՝P&[ɾ 3(HvKGfm {[Uymn;uLĝ䯸564dO5Y'np9tp&Wm1^|HlSWw)0AI#OZ-Q{%bei;T7jkdčtI+LWΧsP:eց#q N6фD",vnʰp݅K+ȝM`9+a.=դhTg;4{H0;-'{p$6!E"Bcx*6h?4 f=X/suTolo9YoP~OIK#$K@Hcm{Jis\Bdndb͡,/1xuIJȲC`4$"bTd\"ce+q6"Kx]@s3E]nvV#K/ %^RY"OL rvT㫱V$#A<鏨fCA$JbuW~`&GhK3|>+\ 5aDt%AW np:BQEe9 k5vI+@s*|30cIح&Eraj^5LVQ]\%c^:gآ(Q+M؛«Xazy\f! T}i2K\8l }Aj*<4sT(ZV%> S7gXSi9W=օ[$?0U Ū=ˁ}CaxÊ?覆XF ZoahДZ-_-hŸwE qX2蓫-pW1qhF~G d~ }yռKb Z e})3it*x7C~Q>eC[qnj^O8]5s{3nCF FWx>r*Pq<}UږZݻ%N]gؼn{]65 Eị>Hzu߈Y33'iUrL%Fa"uϐ"tB"Fi}8"tλn[Ӊ2E&j;*)ͳM>%VU2#1yZZX2쳟^Ú6uHﺮqaI`Ü YW& ԯN0 2VHߛouoBT-Y&Ljy\@ aTraYkWJ{ZZgבطe\Z-9jZGh)4Yxk^j1A$PuH񪰸Ⱦ- GynۗΒjqJ-Z@0*SR$k`y/ {{n_젖eMYP5ΐ %[D)Nh2F2rIq:ĒGDy/O1{_%Gb7}%K`k[ΏFhx>|9y.wo5ġhY3%c3tX3΄&G :rm'GR!\An7nG4~ {Զ$8i#E/ s  eFJ[63쏂ނl-:rRdO9F&{>*H&5iFc+X> t> ?8|Oz4)\`5[5|c⫭'%@[Ҭ8l͠d L\ܜj̓/YUVytтIp=vG-k[bxs\kGԐl5Άt)IԒ8|ۇ>婬^G2[vgfwYTzê3(>A`3qBRc(Nb8 {ws0L}7ɧ'IاTbu7k6eCZ^ӆѩtgx5u{գAԜ/>ưbſMt7a.ch}OcQ1:KK[;KGY׵VO`,-  xWFZvb#$q+II ^PxۥAtگ[=[QKcq=-$JJ7|R2 Zݿ}fZ# йfh,8fc /ÝPjA))#mJ2Ba` 4QInƀX6WzΉp|MFsҥLey"=ˬjvT5\Е;{>6V*0\$|#lJxێd$; iP7"0% 3u&t:xL4%hDkl<=c#UAP:GQ2|]پŎft.W8΅bǨCB1$PdՕdt:~U Urz-hn|'Ĝu.8+5쏊~ /xYpt)1.98.5jrଗdy6j#O`Hh=^sL{sT|T\#A甇F,g$IdFK'e7YԚuG0(R[S!+٦A;I4{G8o2^ڶN`t ]=^c=v7‚չP$D`rA_wX5issivˠ2qz ,&1hs}`jn/.){ݕ^'f՟S(/7LַwejbT< w;޲i.-}#i[OŶ4m*G~0Lԍ!{цBaɪ8uuNعZ0]Jq-񫶚TvSqeʘkcl cu4NZ }ZIIŮϓ|ʦe~՝9|geM /aWYs;;8׉q 6ҫatAP%xa]ܬmfi婨 vjѩpƓcպ>6|ѯW;4Y!J OX뉐>>;*FFJs. ln'i|Mq&$9Tp:BșևZeR1{j9^sWlPq4*%"0gͪ5xr #H(h,c=E#?> j?3Fޭw0JcCe8Mn4e=Jji^jOu7}>vnmkRlFR4Z9^DmfVqXFM2:,TߕVxH 1)DiYqk6:}k[nbG' yǫ0uL$H,:M'b[=TgX6=c;sX2hŋN![)Vq<]-&cKi\T |ٹ?^}wuIUbyNtN,"F3)A˴SØvFa)斛[(0Py.:0z!Zsfuytj>z%.RY~NƏow+ w] ?7: E˅|Z> aHplhk`F _AyxQhlCZc`6Z`1[lhiH =D{W̸.{tyD(tOxi/(Aܡ VqU^{:++GU^oU\0جiy[O8[Ezt!Zp$4*~ShbCRer3kk<7Qʬl'ܬ D*Rt؀jUt#1zByշIkj0\m% ur18 {4wCնR[>&7kϭ;Ig5uNU.j4eF8j @MFϱ}Mm'T99p~4)RpbW+Yv6gW8}&g}[p^:&xRݘY{_9ŝǐ'*-VQd'<WSm @k`h|OIO}$HDZy8t9cv-Sï:rӬ94h |xV7woVcX4Xjs:'/zΗvV`7nZv&aS\ w}Xs;:Háe G@ޠ/^蛆FqhӨn=øx[~%nZ&X>KiZ464GɋBq^9r6,#qe`>2[,q1wJ=>e2M;QfIo9#Ih O9ұ)7eAo H쏰8QVkLʰxt3i. K:Cf: e1OAVgLU!fWšA;Ɲ*y ]c^EhW^ +̀d4L4,! ?Zg5:R;N<{?+Xs]Ӄ>&\և4Y~ S<>B#AV|un6RDLNr0Jt-PK$#xv>gTkأPе6 m6lA۪Alb~"Fj=)zHg1tvh/c0c='O4)SkrsHL5o]Hu[%Bv ;+%跖FϽu-A#S+O ~r:=ʯv VM ºbvS,5|!Ī,EK'=]T8˩uV+@QTcEZM^ς{[Աj3hs)U|z͈ߩiղFf|-c}*Sml W*WuF4d`d&NISIh}KlEb%ZSQJ3Yt3kj\.*uo\b}э;= F{/CakZ5V5ubyt@*#BHWs]69o,iNJ49c{+]LŽ['ңQB{ڭ}k4X&c4djU\Tivi11˚d>Id՗Q6E&Z?d26E1J|=kA){- ]K^нeZ5X@;.#f,@i{ɀY]˜]Pp@ԑmdzE:IqYĒm,:A}V+j$YnV1NX*tz؎p@ny?kQָܻlJ.6ⓦiLb x8vE.Y{z fX*3s#1d-2e}uo]O3nPQ T8bl&CsWtoQRcE IػpSv;&B ia:tPmJfSB$h\D΋n6h%9BKR*T͙ŧF!dϟWo0ϴH,t5[ޓg=wݐDHsnLUKq׮Q$#J`^HcHl8șYsN D3xVUR Mu"A }ĽR2:vġ 3&OPE k^}~:ʇ!-H\H!3tS"!48ASbK`N-׼xD O&G~LJu~%t&B鈴]:DzV8g*_>w1jc'15k]sӣ*@O p'*fS3`;>sEhJi4[" [aҴ;q[KpDP D K^{3J6ayqZ sR`ۢ 3a *iKw45JGAhVh5hΨ5U4G21Bik R7;)YQOv:. 1,V+JƁٍvպV܍%QWn: TL51m[2^^lcqli {Լ)T^Ti!sH 0WZpyK\%oaucQ'*x#k'5~Tu}'zz-4/q suBUR/w|Ps^kYչISq<[/1ʪjĻԓp<~95RWhJ\!*đ$'߮#\ j:M? M0l6IM'l#bt_U/0*bF(]wч\-SmMݧew'ZX4xn-?(ѦHPj`GƘoTWm2>:֯i->oR 7อZZVN^>-hb~x/ l(:ѕEۤw#{ [*n?(e0V^14⭡ QAH QWdԲ0l^٤uUA>)}wqΣQsCǵ0{ƨc}Sߒއ8ˉksٶօb4;5ͣcMNڢuEoC8ڝ͞ Zv(?\u> *6xM ก1-j;Jv cC@ 9B-]GV<+k~>¬^RQh$`gn 0F ]Rhdh"jmJe=xMPwaVwUum d\{{SMʛ@!epGSIpnCq~00')wO.౭'Y8t6KkBFÊ]xiGU1ុg>ҭZc#?R.i#EBU!NuG8_>|ʇ!-LrSrG)%I hZ" ޣnWVdLR Za{ɛ\"?Ye 0NWY<Ϥc9ݕFj6 haC,@n> DpdɒsImRp$T+XߔFSx"wi%!zkYZ]a hhIG$T mu,+<[9OsXAt9([T'qف(]*tbK[v[!5[%5-@%:-\!_%V:L/rJҰBcݡ;]i-ֆ]^ژCU73% ioeXthK;mG)6ֈ$0j縙.'%NԷ|ν,G)wI߰gFU-HxKHҭsM]'ֱof.mQ*Whݯ޸6"04Ar9sRQ!\OCeD>aw?ںCi`!r?B}7 =t6VV5R=V.B67i$"Ax&q - Kcj[Tc4'*~t3u7"[;:PԪA4ڹo\Epy+7Ԣ͍!+\vR{SZXڙV.B΅ *iJkBZeZ3qbnV zOnywۂٵmIbXbVwިqZROC`JUʯp n{ssBٙm6=#qeªYZޓ΂rZ,qkG4-J9lMXU -9"ay۔%奻8n g%j=aۼV\,ސh擀>+(c,eٽEOjv&Ѹe,oR1i]\ߵ^8ѱibcu~oeP1F|1*lqMC?_+ i!8<S99OjhX;y3<vWMԖA\@{?RY'G6Nu"zAϽYbC]Lܤ p$巸l y׭;nZ Hp)KNC p{%5y1ysHfx0R:ZX)46 ^0WNڶᢳ@:f 6#j˷."@GTa(y8iNƯ{j7'g͛'ش4Y/pVF9kPaGA+d9l}JORjfcFb)f`wxH0 |;rRf%ul1`'ڭÿ꣧'ɣ igzŭfkxuZN.l` bWF`\5e,o+)i'([;'Y8\v^4/ n'-V膗2~<z=64xmTzQN=}R%)F- Q TM8:n1k|Um|=fI'ۢ;|63KS?ꉇFnEvY^?klK0η}>dyN!]s?ŸPVou)A>ұO3,Op<:NU%AٮvR 6iT)GGfp~FFcEZ9󃸂Ҹ^{\hGعh՗zxzWbZ.-v7]ias7|Hl>6oi$jAQy@LJpaT:qYMY$& R r!$ Rr=gؽ3'k<1wHwEO,>Ma5(S}GΦ.X]8oH󉡁Eoayǵk;ELMԺƐ[޹Ώ8F[ }{|YJKφZfzOmBA!Zn'KPًZ%s%tyŕlj3F7##]9g.Vm-oŵcV4hͮ`H>SV2esRQuVI3I'Ez#Ȝeb-Y^zeh0C? = FumAo *̸j~<{,S9vD,<<|V2DfY7U(G@ d߂chU[Y-*6? Аd#%y=?BŏڄWa7L<i*SvaϨ )FlS ꄸ4ADHNcæzs@l.Fm.Tp. iS]U~!o~ j#l+ZApwVnm-]]†z)Æwxr] g>6%JN:V:f/TunT)޳Ѧ.7J/g{ sx2=}Z:R٘K`@Fм~+TǮE͕=V1sxydJK81{p~GigFx^׌jy^] N\dʭD,L(mScꆈ[Wj>[OHi\wLS_.` #MBWGڔA:THG;r t?2 E3|K T4p=ev?ָVB:, 14oֹ:T[\ %堟(T̻@}RPńI-Sqfouբʃ.pۥ mPs唂=_r:EՃ@9\:,m%919qG:6!:̕Za]xJjr5]%6B( ` $斸H+Ⱥr7I=MH׿!=گ^Z?cUBN3dg8'[Rۚ Yv~ C'>wdrrP* V吲xyn@|V kYU^v=G 3eL:nVWXXKl4l6r.;lt7CwTN#cK80Bt#cz ^.4w7 y¶kNrcs@?6+GHHn!RwU?8znkkDt$Bf0I*b!{{RCO%#Z@0cM0v@Jtq#Ri ZR7>&'y<6Ўt+O* 7>v>zУM|8?rIGr/)x 7ospӔn(?..;nx+Dla NsL8hQ]!X:ܤdۤ 8ᴔx Ed0 n?O F`ZPМt-sOĘnUL?֬)7"7jYj^K}ʋE16x+h5=R؃7(HOBuN"Kz xpP$; yLlEo&йks蓉jaT:NLk#M,|VÉbv5ζڙwoc 746mnN30." ieB&$[=ُBn)\2ޥV-^\PRֵrڧY͞4ёyyN,n k8ۊͳ3%>pd#kзM1z>6^FSݩ4E\7_6;-tn|D6:Oڸ&~dffyZߛ0Lw-݊8\@n' ^߽7Rȟo?)NBږuGP vSѡ1+:ۣ~ź@+CVaD9S]Ikt .>y 8m} vЩL7٨ Aζ[ҨZVgxOcԧҖke{$p\DV[v]4Up? pۧ]r8dn Ve̱v^8ޭQѤr<ʺu֤Htw/VXG_ZWe1A\VYRT [q {K2]mlsW#xT/Dv-/+w{N)-ޯJovjH @%> ?2CاWZa`t qu:i˄49_h+Jv0`tWV eF_NMS 6z<dH\b Nn'BH`8͆ 澑gZ#XՆ羣ֵ;.]_cWļ]omoV 12ϊsIp|W?[L6kIk)xbUqL*Zȿ(ٲh&VJb?Sݠ&t #eiu*{(CegBzgpN乮#Û$~pwϊ5ve^N[<Rk$-{A%yOG|QoN/Aj3ȯJugqjenZЮfbpc^\Z4u0)P@2\|Jq[moVqwo4j;Q)ugǮ`{#URi8V8jVi= R ,CK{~a3ka7v<''9h{AY=^n2cLd jÙBM +3,ZQ̓l5(,<5X#ܳl5?-=%KqK]wjcJAu/B5 311јzRTk.c'U$~QZ{_Jf*OSZD! k!4rc(dk$Ԙ=j*#!J:/.,1C/aԻkukkcƸv(xhMԑ*Î,p"/K­lqL2A[qH=ᥳMGvజx*u-Rzm:J]J{GԶ|AF[ajVCG/F*Up k^2h;#mW`p[&ʹAƭ?BHh!N3u`iLh|`k"+a.]w`9Ԛׂ2SF:FJm08exzR rNqX@O"yJ6ΠFCX4FU5+>5͐XsiGȍkdaUnQץJI+/f}> xvTZ=]`Hh!=pu\6%SAsLx8<-[ab姇VG+|׃{j啵ZSw\[sCIkތc}dlO)ԋ=znpk{'e YHeRs\7[*\X\|sN sL %eF/rw60ʃ35H3:G~imSZA u|Δjߔm<>G~?6l txeRl ๙MT}y `^ѣepY(TR@FVwB8q,F4-hZvsDV6 {;/8ZHЂzg$sRJO=NrTeω}p.-qwR]r w"Yȁ^⟥< x_[Re{^ZN]['pW-pG\Aü]NΛ rv t(ԦH#4r3eDxa-/lNZh0gVb ڪEyfS[bJ*5YjxIb?q}"ˊ@8 AzU8m.']sK )lLs3YTX=)JoC?%9(S|v$"pi'B0Vb<ΤUs ,6֭ѹu6Rvb9{-fl{9t?WsO~؟r_Mp40-.+ C-XۺZF !Xt6m <}Q$aVpX N[Ju),U[lH>I7s`2K:R:J+~+:Iq_+YwnF_[-^SNXj痖.p?ڹABi?s|mIKfA$I`ek];‘#l⣯PCu'DTZ湃4zRĖtgZ x48U4g4;(q+c˩/ˣ괳NOz(p kXYN%4]/Zhd0\p^f-VݾnE`4]'i?憾ȒS|J6%m$hCI׶iW^FԥQ{L$y(p%#ƛibvAmNǜӒNxܕ/--+6gI4S%Z0RNڟGN?gЌjM>i^FuELnݮ4QcbN*srבdt7|MEShk>Q4:qTkc@Nw)BsF8%ui8l#Tujqc{-}W=~!ifVim2IJՇHo{1j,1\aiq=ӛ6dpQ=ƶ߹f'ՐKpz_%xg/q5F>[Yvhio ǯLBލ[^ʫ*m//nuXL<'}s\[ֵ o\Nloj9-h}GdW0FVvV;߁7YK#\ɗEzJz1WR&:ȕ gZiFZoh#A!wLS=[.ծ z-8ע%Luw5HԧFg%^̀7 FW~'W*ҫKmzoNyM2ҹ>Cꖀq^Ҟ;Zj/%!N䝗ekdU cH֒n)pu Ԕ8'p~ 2D T0ކ;=RRgi#[<2 N7K:"K*2ԅFBWtK^0;l>ӿQ]-77R~_5JIR'^7XGo˃2 U+VBkAscqLyxŝ)甛UTk*28%~r~0' -J7Htf'ELsUKkimVHFԪIdVӣkInoQoD}K3]z|u7ժƎt{A^X ]767/RJe?|v/bFL"xha,DӧQkoV~=> 3s{?RNx Y+C#*?՝եhE'' pF3bf'yZjT4,| A4eAY6p6\)װ&!Ca :k*үGW]&[Yci2RX.iCO$vԪ^=0X=k,#ҕk4Nqh&`5p*'i'+792>}7TNF֣Pf |fZ` 4p|Όost1|Aiq(kp.2}{ItLv#xnRF:= Ú"͏ytIYCt+c-tʰȝdUim1IJы0i̫GGk8p*h;<1};jwY7_*M*aZhgj[g/U^GiӷkњtPIA$LbF vGQpSZ{5(يm\Gd\BSZ[:R[g\ąIOԽNPVR~#^/F,1,L|W-4UKi eyfcD%+Ƹ &9>7@#ց3cAX+0[>x$GؘIɢ-U-?SǃR8D滮^X*713^/p`۝/Kp) qvǒq 4Mv+ZC{Qfs40505+u[Hf8gPڭ0Yz>O܍ 8G#v\ֽ-s^cfv9,7UNĕ8BǢО'k)~qW[f?/M.nݸJwW>V!aN"9*dvuGH=83na5*d931{W^.ʵ[VJde\用bNj5Qˊ:r"DnςpGצ9HuZ!m8g6l 6ո'{?Tekw1Z:>@]֌ӗ;= [{ւ5Z`=qu+FN4XiYT;\3 m\]m'8٢ZHt}Tb3͏\;RqoW ۊe15ܡR.s޹A,m[N%yH+Jlj9ƾ92=j{>v%9TK4HlQ,#'9F̽bu&|2Nj`y=_[U) yΣJd9,5qCr߅y[9I%Pqn׹81a%鹻"8Z.GpGI1B{wF cVWZT+տ%H\N˪4=sOZ*CMQGtT@T Ŷm-BpV鏨}$wǮ.MLdDlT, u@Y;ju8e^$uB)S}!mHˏԫ<+3s}49Mmm/˫wTEB]h#1w&m gPl0\ ? s-QI^P)֥g? zobqzmMsp Kl[ a}G4trY5o*M4+J)յ=裷yGMe ϔ2ߤ9>."\St J7*v.tI8a8lk=[4f<:@ԯ'/`WuYC?Wu]$P.|c\‘{Ziu]ZSi+hsiJ=&#Ɵ'0 ?-;$g 5;zQqL7skRTRAqJuG^ƘZ7 KP[𕦶5j8ڒF ,P<%m :{oR\Z&n}\4ʒGUĩ>iSخwFCyHp%ZNj_ti"^q5XU=MYFmyj}Q6ǵK珦jQsZtRtf*s~W *j7T:65+plxŭ{,azfefզ;I&CH@.j:Pq |_WT\i'AsvCU ]%{r2[?ljΫm<kڎhc^A-B|pF6ׇuˁ_7emޘ t! %v(vûP3sZ1<9vh0-Vludju2,ҩm }.V2#ֵU@VhU:N\ ?#qbꭏ^\WGpۺ=wFXع…S+8}Rm𞬞fڵn,1:g'Tk;P?$7{-KH`N+N><` {#?Riq&`}2ږ1Pt& w Tni0=%-KWS#+ \8 l-#1lZ S3Q6cAՀ$Yo3%*hqݿbT0fak3w¬ vDe[.0{v"&cZ:/CnPk-FybڍL,AKK+Lc%/MdA /_ V.㡓0ꓳ[I;1^Tu30,iM OԵB`!Ylu`S׳o}bi${}_)q}+K朵H=I sG8K~51jw4Ej/uUZ`h jO6?%tyy>ҡk!@wXV.mY(3;:UnY`j e:v%,f]_xŻCJI&i8 '$#.RWXAqLU` Ӛ[l†b:aC45h^4F7vdc罺A; uUHg-y-v{ ̰8mJU]^VT'lӷ<;v2iI'gZus[9裰cWω80GG 6^~(̯bp !y7o5(穽ॐ=0 JtE1ɡT]eb.=)NWw?ԴZ@yIJ0qW20GeG9sxdLi61VƥkBѥJŽ&Ve >*2R}JJb.Hq*FhdzSZ ,%kX@-OQ 8xR dYaqdH#qeo`fzNJ"1?smz= :w/oo/WZY\E꩗Fx^:~g*̭JrI`87?HXvfww)/꿡3kM{g5{x:a`W$rAT_ }LC.jaU*UiTueû]g]¯="v4}{<|z|e]ie8[bmӧ wb;A@ ?IN+ |z߹>[rm,5#mhFéS'F:v{^q]*8s\Oqq,E%8r~-'H|zХV | lN2 Mޢ@S;@p9_Į*קsoYI{@APVx+qϺz@I>n+k2>wx $ĽSʽZVhQ&AYtsDp,jg@zIՋ' y y0 Z5 j8.3Hc 0.C HM_[]ѽsWRVs " ͼ.nk\\ ԩSR"J+aach䅘f$>w>pLJ?ܫ1' kkk[ۊw ?4S; |.±<ټu.#'qؗ* Y3hMJr[Ӄo 6n 8i_UI|Q\i, ;Ž]AnVLdiEw;"(E*E_Ц뗘s]+/n7PîZѼ`e:N`8sՔ`ؘᗍ4> ۧ]N)r:"y&PHP <=[]I4sLavA\z߹.[rKk[|B FӨmbrX[DW!Gx$?D{xvR9xsKX5v f&HI[?1xM`X_W.Rh+ Nƥ9KQ[ZCzoIwDt?ػ䤫qE壤_Юׯ7VVv7YcݘRf+gaDhb?T+H1/E}bXO$_,Kʥ.i\VL*0sOx!a7._R̹&I'*pJ2˾I}T0۷Gub^Z N^n6wf񊺷 w[,`_nX>(t5:-QsAZN~ݟNpl\|=v!UX+=M +FlFlz zxz.+T}J^^$dhn0]D/ /H|"hĭʛ8+>8e|5w, ֠C*ن)t[a kUqӧ%a8&,]]J?q$aKdIg5 cgR0#$"p%ì꿡`0ZuI9umA")6\l8;H!փ꿡X0¦@s]s={s\., S c|]n]a|b~ +V1&&openturns-1.9/python/doc/themes/openturns/static/body-bg.png000066400000000000000000000003471307543307100243570ustar00rootroot00000000000000PNG  IHDR 2ϽsRGBbKGD pHYs  tIME6:0gIDATӍ1 C?N A*8(Ja[r1:mJ=28(6\"I[Ypody~|-k./Kag&IENDB`openturns-1.9/python/doc/themes/openturns/static/favicon.ico000066400000000000000000000021761307543307100244510ustar00rootroot00000000000000 h(  d1d1d1>d1Ld1Ad1$d1 d1 d1E c=4na>vq7qf$fEd1Vd1d1d1A+jOeg0o_d1[d1f:ot/tUd1d1d10?~fӥXd1d1 d1f/ d1d1ALv2':/kd1 d12d1o!d@&hHd9d1bd1;d1d1d1dJjŃǧҶr3~Pd1Dd1 d1d1d1.d1Ld1Td1Bd1!d1openturns-1.9/python/doc/themes/openturns/static/footer-bg.png000066400000000000000000000003351307543307100247150ustar00rootroot00000000000000PNG  IHDR 2ϽsRGBbKGD pHYs  tIME5#]IDATӍ1 DWI#V2tv͂ "(@BFDa E u'k7' sy|ZKK7!58r>̷|N>-h@k cҕAggpB)=Y}H}3e[+vᓳ,PwpsEl0# E=p%T}0\0*J @FF7~Eݹ]|ڠ\ %`)J>T|^tojezw0|=. <4Ț`l1uG)|s)e+EƊ[+MӳޡfX7:Âj+0^\6BhLꑇp<"-؉u|W zY3`GL00 !@} "ŞABRJx*Ͱ~bֱzlx5;ufu2|A ip=~yCj%&c|dt`ًe!O ~(R ψJW W~ zOu]J Ol~6?YKgSe֖oxc1wxLk֌2V,q/M >0 [8b;篽B7w){.=߆11M40 C ЯBH|Ab@h*@ß|(twtr}CoX_)13v+ņ3#0Zy |7UPIk߀<˲d\r vϱ]o@@` T." e9}%EGdp\VS}+ag~K$Ae'h`$RRPo 0Y`k`|!ϰUQ`fFڻomA@ ɫ>|{G!ϑ _k}0W?4Rї/轊Fy@%j@ KAS{Ϟ)tD{bfơYLLVZ\f{d3744B_$}2x)B';b_ yr1 9O `SK T(d PG2I]&cM_4F qǩr l&E?AY{ v:Ni跰\Vg@^(@Ai(($_* | _0$4XpOw@M.8^b-xƿ}Luho+fdC'_:iKi_$x@,=@vG(nBi{4qJe<#Ft//( mיVʔQؐ(|R |$!@@(&H`28cϵQ-/o"׎FNV@ _~\-\@>%Re7b/%2LT?E'}mbVn`ne_-W6%"}MnRd .Pq(K'ÒSCJ /u K9!h:^~ O\.K6!1kFC/P酤M(0)~sWX_p.cw=әOSpF"Kxk~lYB3H0!)8ewub1#h9EKOG[ll6$?Aa4c Blŭsxkp+Ո57(*EH5x/3TгĦS(ko4bq=sq]qqqV* 6߾]i^}u&|f F6`叭haC<uVȓhg_kG/e kdfߩ\ }ɔ=+F@J-j}bD"{Z|r,νɲY̰'`P0Ʉ()`|/ǯ0͹|{jh3>>Sf:O; _HLa/fK~􋌭x*-/ !B/W~o8#iv62f ubT b@0wp*guR?ф.V-~QhHH55*_H> 5+t[ mm j4|=ـ ~+ b eD*SDē[H¢CtNR?zw"51ķ5>}峱[ZϬiaIFcx^džBHZD`j|.rտˮ+ g)y1EZӅ(a A:|XB~oW݅)mݬ5ZwCjɜr9Lҫ=qGWy¦{\FνzXY5r#4d J5#-6s 0>+R1#vxzPu e$ ޼ u黯LHiMoX+g6W[oEu/H'0$4,z\y?NNpkT-D)0uigwy/9C ]@ &ĔO`Y#]*hQ޴X._%kA"\tV*P KRKF1~L4(G93ˠ/qmx{(nݦh1jsBX ~Ⰱ*PV 7h$3POE ||{x0:MlQ6"UпilE8i"iŜNz.{qAdI=]?_iEZ7w_淢(ėl%3N75O7k\oA^8(\ ~ANh;[J@B1b\4"f*tˎPa3_`ϔ8k"V1 tRSq}[QAOikbsEsnI$F2h qůP K.=V:W+užM{'~JXEW)z~-Gv;|~Fr |D@ ،bR8J =0T`4"|,o8J yXf';?6e;37e\cط?Or~:h/%L64FF&#=Z][йeuH$ȺfBH,b8vhՏmO?|!8BHj'9qt]eŏK.a_}l^4Ia;A)j!=iS? HBV[v/>Ǐ֢h[8R.D7`@sڷ6׸`#0.3EoF`JLd1F }u]wIt2ݯ/AM/mjC+:/(s"dӾ? z?XgwyLO[z4O~PoH!r@PЀcd2=k^o񯩈 ̖ Yƾ}Kd2qN]-/`n T? O%l 1eB6CZ._=nn4RlA7AvI@ k>ps],N4M0C#i靈 :8:J2[|7|.ғ,I,L0h7~,GP?Zs6p~nJA , ߷#p|4w>y{v/$zM؝'JD@0{ 9Z˨N##`(rJ1JE7S`I,r0 &!tF=y[> XI82 F…"5Y`tT0`{B1 W s3漖o@c2S~H"z[HPUpFk?T,~h\Oh:!ifpJ|ksQ(B) `&CU>G[/ BOmv zK!si\lzI,`YPW4h6:wN/8gBB4D,࿿ANl{zop>A)DLgo[c _k'h AW[6 K,)9"78;?d~ld v~k=qDtPԄ;:xg_k@1'?ilmv?m5>J0WP> @~{b˗yX"Ĭ5}5ggF: ^@b&k?Ee,+E$!!ngq0 yt6t/>C~%4y,i<֥}##j@YvkIC ܚ~Φl9Wwb h@v'ECZQ)z{.}RQFί:x78~fhX<9t/ 1Q ˰L08ojID {,3542Ώ<0:aB7⯹BR!;$J o_|rW${ vIj^]%kk'_*h&en5f'A1ߣO=Җ1`Rb_2# 鄮\oK*Z^F$bf̶?@!.jmE@4w'=0;ڐ  2q_OʊY(I;"m숽"RR*v,%M(]{tGu2ۿ\KLF,R&1IvOMeXP`v t#n犸xyP?WY|10'Ov0Zk2:R;2$#_TYY#a@[ 3n+G7L@K m+ G~uî1eR)j 7bI{MCS@ AYhIgJ&N$+ a4ls=#ij y}vXXoIh4щ4S0,F;یĪ1OhdL9hɬFP>Yy,>6FY BFqfi}} @9oZKdMS[S+Ul$GV[zVe 3`T,UdztSjD )ـJFuXlI ex/RhMf*-,X}5]fb"3@Ԉ u7x1"-|̛ IDATPkd3zگ4S+\kgatwSvxB2xw睍ц@f( R&mfBBʚ'9gο6wC)J;>!AJ+DsD@ *PPNmMH,0V_BaME@I3 y_;lpf߶q=/bV&HnsRHl> pyjW{U _gnV<MDkYz>//&clMo?7l+(9$("0h1δF "?}tefڿql Ou{H5_%I{hSWµ+ŎE#ћ2(Z-!M>T@u-  Tyf#fų2 '"┫h˰YBC@ՙ0x2M+XydIo.8RO.Ģ"!JtS,zT!"cH/ڿZf?7FC'113X+^0R~MZc|m;Z(Qʏw}lUHłgNIGJE=8L_'ظCOsu]}%Fj)͊Rm&ϒZ`w{2]cWښq85vmm}' AGQPM<`}Lp^UQw'u6R;C`3̛W#䚽ZO|ߏkyw'pTrDt 40=#hRCk@Э* #c&m7{|53JQ3{%*7Pp*`?,1헉܏( Ibm-Q5&Pƈ ʏ_1QJ3\sG@Eq!IuТK{;_}pJL@ru>1:=?Єaj! g ֭b1TAt$O"J+ uu/GVF@o ͒*Bp;O#Hrҁ7w . dB}!@ti%xz/xWcG%/Qp(WN?GaW6.&ih1GIA>BS [6>m~_WMw"tÏEi;?_|$٥k#cXtvaa$(MElyTK2v7 brjHxW#)j& `0^ޮt*.qF$A?Rj(㇯~/y϶ˏ+zp;e^9o>ƔQ) Dz4dK2v'?ЬBy}fM`q|3rj߆ bܳS u6\"-L;hd:g: ?-W|o;U<%~BTM $~煇=WM "4((}/ 3<\crr}ݭ< 'd`h0S"I(yjW5 -Јso}m,OB_ ۶ڑO\?M}WLM)JoPQUlP~~?KI/^y8Mc\}-ևo ߯c㸮6&CQx)DCJxjZ\nm&}a 3@5,FL@ 85q)i|񳃎`?|f nG%Ӕ|rWټ,vsfNm~Oz&NUZ07US`Y`>ebFM[PkPZ"2sPCZ'^'ꄉ9/ '2Y`LIE):yyykle|;%XC8'ze?l(UbFbfˏ"ɊQnC1fz̔KTqq4z:8.ժX* sL>2u^KDv1kbHX!L0<_1cHB P+`{Җmo`Z 7Φ󚛘!#鮸GЇ`= pB!P"> j#:Vyl?mnt1{R/s |ף:]dUl|q.FW<6D,$!n tzK)ic?hH=/<<׍ٛE_|?pyIy hs5v} tv'LX C2aE #pFX7+¯G8os(-9։ +P+7Y`04dD + X$p8+B puIEuZ ˟8jv d^W9bj۸^\'vuҏrcJ6o :G᭱kլ׬ڀc8/2f/v&%sj^Nq&@1hY!3am cbB) ߿HA#~AqRojM3U?K~G*\vܠD[p X5`]'lZ&njRuӸv4$C%Sul֏oBmEjs]MjPڋP_Kt8e`J)ƔbR)ImB zЗU*7԰Ox>,1>6?9z9 EiگT<ϵ5)Or p@"MFh/B(vl=}uht ޟ~sXtd@ʏo4xZb}v32*u u:'^T&gy3WN]/0>L9.U+uڞ-?y'TM&ci_i kEF٦B`5xKxkNNo쒜h(K=l|>ǜ~Wxs|M!}<?ŁG.qLu\ CZ?L35h0.J]VlXɡ C0yWEN 0yڏ;G<|m(s-$)?Hj _@'Eߦ r{ {>:idv*3jǴ*޿ 5ac܇ʾ02]GIAPVm7JզelSAuK8[9g\wMlݒN723pOe}fϡd3:3&%*kf-d(_}_:ZJ .w!?,`^r>-O>6^ q!h&fNa`ǧ3 U/$ XeYdvL3 й٥,4"/nrer9YSqmxg}jK(V(œTjhSc!NP-o8,y_beoG Ͷ`z_~VlEJ2XύeY3v3`^,ً|.KWƤې2&VF+ S" 4)KCAz=}W |?%ئ6DKR{ OiƢOC $}B&_?ƮKܽ׋ĩr> nɣ:&ʇq {+cX@ ?ܚ6Ĵ3@jZ Lxé&}gF>[ۨQ7mt# -hc_A{OfԫT񅊄uHW6U;סR)U*"L[6395R.ݯn:-Q{FG[Y^$Y!d,Lʙ)EaI< &tgU?Ϗv40ddC8=14{/@MS(S 8uV3 fPL( *fu6mw&)F(/0!'KzcẎ~'e\k%` 쁊]'s w4Ԏs`kE NP)tXI4HKIgv7EB&iL&%w~|5V0sqiz$(DB^ boDu"Tiٖj6>o#׾Ob#)Cq]){н0-\.C6} `j@&L$%sYB'axX@ϱ]zcW\OPZDv"WV0l7+e |,sx*I|+rټa"r>^Σ\pbjqO}|͋c?~:|@r2K6gNL63ecxxRnHzd ͬە0ppe/YVqمsy׼};bL)!* bPHf ,MiW**3"fF^:ʛ* hi}9&@LN|ٱt, 4  } Ak}P7"HKݛLRm^wRz`L1  ߶Lܟ}y jz*JyiͯK{8uS^ֶ.RsD[ppld̪ߴ(_S]8r,6"ϒ&BŦ (peׅԆU]V:{G~P}i ͡T 8/g+D{}_<;-᳙"h?_Z΋qb\y|++;@!=7 gi#$8ØL3 iMҞ_-H{odi~)(BN>tDg6iTM70u8N|>oSV>q)Wv } 0c[ {pwnmcUBީޏ.֖'&LC !/2h׆P{i, *I AUm‚@Pz=?5lXÔf!#B(Htf+1=]1 j"=z'*;۪Lōn`a @)0D:3WuT}}٩uf|'aFM."[.AslJ 0LYy2l቟dJmWpu۠'T|"-8JB% IDAT~Uۦ\Fvv5H򔇯|'JOFFvǚy+j.CB==@?3oŸ/(sY3,щKkp ؔ"ϒE2`w}?n'XS +$zGm R ]l=_L#NeEArT_I,2V8AV|"_1,0 aC{N`Ⱦscvݽ )d:ǡZt; QC1?]~g#ւh6'6Sgru033ʖMP 49(%₏0;܇OPMg^'~J\.@uSQF4JFN>ljMg J|Oi–㑏@Y>*S*su|$kٸg` ΥB \BAС>雗ZPĠ0)KOgUL݄B[ "MA0M}h>I>vXپ] K[C_s^V^a'm!d.;@3if7Vi! eg858LiP]iučk@zzz0{Hԇ<&@mmy4HeSSxxnRnPAo(3U6m\h"{qbM4Me5\ydh!s_ȓetf;vp'rLx0o;&7~a;#$Y]R=B a`ӬP5>plo'{Yx;|lV2C1v&HCHO\aņUsgų:8N(WE<͛G3H[ta:1S2a疄r[)XyrV[GW\).ݝ(#)AXpUp#g*rŕc韩}86n. S}j;'@/|*E['(i-P(Vܿ+V͊o2#;{fqu?SK|oHLF ,3;D8xAN_k Y,N}Z0<$#(WYqo77Cn zӆtE2:sqA^?2%g,TGJ4k6\W'/8H'~R%F",htq F 0{?AFH,0P+@ U72J 8(݂:ϥX)Sp|WG\7o8y}?K9B3ͫG wml˘ئv֖Pȓe #;B_/dt"ۯ+bǥYhKFx>MXAt@%5Nrtw2:PV)+ڴ@aJ5ϣ|Y81AO 9ȨJ0LSE@ OXX.iM/I'%',|cv Gy>Ϗjϣzŵ[yQ-['&砲 .-rõRvӜxٳ.勗I{{m<xV:"8VTiv|`ah%;l**RWx`C^c6Nf-,e!V޳tn@C0@ T$@tHAP,ZtiiUK.R:vƀ>3ں4oWT;պɽunLaW\JeF&ꨀm;lǍ䶷t[p7*?k}:5W39@!\@?8pz^/TD#( * $!驺3Z?PUjSg}^~;s\R* T@B^Mt~xL?`_^CD'ńY x߾kKuS_O^oy 38@+RC?ߦ9sK_ܮd_i4K_$0.sւ nkRl P&t =6oGa8 `lv&ԘrolB~|/ Ta'Bw\(*d,%F ( L !%\1G(w(^рv%`tVͺ2F#mq4kڽ8XC~[vM<Ǻ~u=C1P)3_uoti9w%\8S!0(gCEPK壘GL5 {#{o5%M3!; 4-j:_9M>]_fڥD[Y|*Z% elр8a4aGvmƘǑUpt ;a4XeJrDwX@7YjV6ThMR& Q2"Ky64Zkz,.U¾~N׸C.Fi?|,z彼9t|Ge-F`@ B)%dܲ*`35fN6j|!8h8e%E0o/۩\UiUFe up_`H9a#fj%',2 , +yB#qtV# xʧ5hvi/ ]T!i -;&Tw+Oh4M U0ep[xU[qq7/sV_)G__מK  %O]gTgh@U` ڷ(ۋP_|pwq ;ُ+cWѨ78;?~DY/xB\d Ft?s.7kI-4kG#qtDGBcÄB(Clҕ 4y zk2Ďܫbu*  r"ktFP l#2qpeӀaAI4C8,Q-e-cTS%_xydq"0_*N_?z>H ;y A1\)ZnaC^_P89aR^d.ºз1}eD64ؖБ-Fә\r 6d3ڻ0qYDCc]߸SSo{3;dzb{_- 0 RF^_҃Hm]o?|>mlBtitf|!88<#+.mZzѳOd'Zf Jᇑ/j$e>uG4LX-Z?_3Ep4-r> C0e.+'H@.ASl-N t%zǛPH",ve#1ucM}&줫qhTo] Jsw<p\,ƵQ]nTN4n$JaAQ- ؊a9c9UHf'7íK\KY˩֬'ٯZ"Fq$F2s)Jm|"M3- :IB2sJ!9t'&QXPHAYFKIrI1Ҋ* FLSdRĞ$9J@Sl׃L@ǩJ+%;=hzKw6w:_yǫ. _ֿFS?gm&$ ^g~'^&5%`43=ւL[pҝ_>˟dcL7 Z' Xs揽G;^v_/"z9n9u`l cw-RnIe -͒ha GsX\\x$)#PI?1Fh$mS-j>:q$h(-C|?y5k,>slU_66^I|?,#..)74 ?S@0`(3k\+$Be]{P:l7>vwD8NlNH\%:s9vEz< MEk[; hSB SGqp+eFȸQ麀((6N:~O2OjtOW}f \i075`e>UwQѧsG:>++\fhJ}T*[?JIGNÉ;^#؇>6t6pwr !QxUP vl|+[BpgniQ* FFh6j 8欇j5:#CC\uelĭ8\ȶ$!>42!*I/&t"N!HBhИir݇z[FȽ'_yKS_`rHϲ}bλ"Q'L{M/{ *l#OFw+?݃x_FIHڒeG} F&dKqITFi\t9[~[x#GE;T>1qlhUYa7~뤟}{Ď<##UJ ۼJ!:m)SAóa{!noyKJhxczґAx7S/qnDp*(2Э'{'űLT*jMa&K5W5r9'uR h kݻm0aE81s#CݵM[FpGYRtWurMuX(Oǩi%A 68qOJ9*׏0?s."$Dߪj#D^IۄGm{'6?:_L+_ ӿVp \ 2Tz-"AS.-CЩQh0,s\>p1F.}'|gU tڬVWd`0qۿ@>.ڲ[7S(spJNGP_TPGJ r |hA¬m4)f3qz3gm*,:^Wg"sx]]_x(JцZ"'( cRqZ;Z#o 0pnc%?=?IZSP.'fZdw=%X`+z)#'ê|nn3:$<9/ա3BQ8a=p m"n*d-x{h2E[M#д8:D"FTS4sUΜIk5C1 s5WqtN; Vps:W# \̧t.ljB:7Ih"ADW*lIFŏP^ 4^sKB ۇ`2ݵ8I'~f[P%=.e% 9+f-.Xẅt[vAo{44>3nضZ3ssLA#Ìy8"N)Jf,|ǦYgqMjm2F5AK1{v3s'9$Ūv^MGYc8'MJ8Cĝ\2yAeÃ"].q  k'b dY'?_b~7>}:5c{`S"hʛ/sWEiDk'J; >#vVL I@CxY7[~[~ E7 IDATD?P76*I 'e uz0 (JF997&%#"TG„R"sۛV>WEO`2KA36C :Llr$'OOƄJJLB`ؔEkrnH;fEX\Zٲ{Ƙ\vԣoA媖"w b7NIG DZ'֟N߬[}Ѻ3J? JFn4Pyx#,#lSƖ!mB2% O}yC63' |@R/svVra~}1"P5]L駘+Poճa-r6W=6asb`o% ifuEUoguZa 3G1`ƞ>k~}a-"/!( & !g0_ww=egb~ m WTEoy}B+,?Yi060ȇItX8B.K~ QG~B}dN$UaГ\" ')7T0,GxL0\ǑB>wG&!nN7*qˈ8yGT0(;-2tld?Ն燺{H5IB⸒͏ ^Qzl[t4g[toDa?jmNlUn. _* }0n孯~xsn9X[)yW(~S=(WHm"C'{6na$TG<+U@IE׋lN x[t xC0| o-s&Y_z - 3 &%JrݜZD[fBgPq RX?f5ON0̉BJSO8#>!|zPVzooU|֨ >G-TH~`F4su(ߓԖ1MӉowdQ_~ sW؈Rѝfp|[th{V[9Zx ?/]U^kH&6b€ԚQ,"u|yԎ{O?qDb l!}` `٣Ri$,`Ռ)Ϗn@ -5ۢ6*L6. /e^'WܻG ${m|mh>jy\+B22us*gOMuGY$g?s 1w$}Z:_]Vן֩ϟoO|{QZpz#F ]1@a8pCG!(lr \OiX "o}FŐNA]5QHײ_x KKQO>Ծ.܅a`ɟ@d^ "l(cA5__RD?{|-:5_ў^@'BP3xI?_n;pĞ$YZ2Z`nTuRʧYt?6#ju$uҳ+۔[}]/n |2]g`7/s%v3~0'B=jN)^GPI8[|Z#2 CNvq٠1<7-s2'((m.RV)ħx_n'NIfѥ1# W! Mh$Hj]`G%`/ D&T sH#{<^S?ݠvNkÄ;Be"p-E[KȜ R?WFR>c32Mʊ*dQDӶ1Gטw;Z5"hEڍmb{@ 5!5)%iZ{HvҟkSMgfZxy\\%70-,|~s,P7LlBLfʑM!uVM5v4l.5$;ݦienӱKi\rz^ C!tI㻌ӚACn>~ICN ܒmGsqʎm7]:Ϋ99 90 LOxNzXj_{8CA{j}Cqx/^`BO2iHƴ\rS;n=1}ỏxM?{Ue]~WF,<MjfAR͕/oॄ?B0$ w*wKȷ~3| `-+Qhv7iHORͷ 5IM52&]6Skj&`7!o/b/X߮ |s$!;&=\ú*XkP0dARڜ-۬E4ͨ5c4VP@9>})''9@_ S4فɸD<퇯2 I$֪'#1+|$ ՠ|l}ٹףj#I?YpM iZv HO+6D+e5{̆xЛRQH95`z/m?uGna;dс goV=!SS|km ډx kS#Atʊ?6kqv.c= 0/U'YN?1lP?aQŨj D{! IbaKu"HƖ&/՗=Ͽ7qJMW_60>!:6>T ZzOҶn+v $ZB)!~QPR_ *kc:zQFR?IcF.׫W/6,^K)3u<1@Oߞ}v|ѡehtxKц68 D?R_$O\G;򃡥4fJ9m@ukExMN!ԁPOJg,N[&,fK?c<Û]̈G :T  A!a믽4`m_.$)Vb7YeF HdePOB+ZeQAƷfx@V|hO{$qXmQ80Wodu~ngm* 8xr2ԫdRwls<(S$-MZkR3kHs WSU L|X 84)f5U,'q7M'*x5Vvy POPX(.@ $f4L )ˁ bm5&GaGHY~} +֩|ߏ1)?_%J@)r-,zK]|POU@uXj?i49 Jk#+8:_ )n?:񉿠yvM%dEL9ƐǰM^ǐe$ N+1շ7Uk5Tw,knfEi? @Q~/ hY0Wb W zY^k6X~Q W_Y遖֪P[ 33COs6:CO/,Ů@s,k,R 0M FR<\g`8=;Eҁ_Ӌ^K?}Ɍ~L2c_hSMpj7^ T9٧WQ)RIDjBobii9{d/O5ub PV ()J&9tTtڊ@42Eg/^=6JSM>sớ hNTu|ՐRoz-,L_b##4HaoZ_~I$I?$ogK{@HW5 Qș& luEgY7Bwvf+LAX7#k64UR.WdW~n3w>x&;$I?%?lr!7:%#t P4= ﯔF+Er*Q\y ITO8oid-&%h5g__.ĪwL 1 %73_˹X xHجK?|ba`bT9?W+|Дji# @"gfi6=P9(8ZSS!ih38J'å ]㢑rʎ.Ӥ}lfso_~a`k,y^wk^<@/EJAK-G)ENHƋE&}E ;;Y*n/nG| ;?5fx52@kz۷VǦl( eE}ԉ3UJ~\8v )C9-PpSaB fhd[L ~t|w?mڗ/Rğ\筿 =Z@cՀVBy hHYʀ h*C+>gyў%AN-W=4A߫L/Ͽ|{KvR( ~=1؛1P8q4{.Aqpeg(͒4Jh(-yºEb_mI+`,o^ob fG?sz)qG*EZ#|Rp>Jn1`|ZIX lcD^s("G'~28V8g ,/ə~;o(RO?y^\>G( D -JkVԸi apvaR+:?HO,K!/"6G`&$Imcךܬ"< _'|M~R@ۄ\g׻'f{ F`P\}xO?N;.52oE(Qp@ eg?7 I5hԛ8!!$=V)Yuq! Sg¤Չ:ŧ2-Z!Goo6_vZ}ŋor5a\L(+C"]w@|6G1@|;iWW@NKd|,)ټZ HMwǏ)fCY+yo]hSJ)$JhjK3gԊ}R_R "k/1Wkȸ?jU{k ]96xB!bA T0\GZ#\JD'Qmq~(AJ3rTX-bzqbƒ~v<ڏ%ra7> J%a$V~8MO%~@NH B7AiyMZ-5 umetɳ2XnY4hz fﻉ 0Hi@.l8.mpp07.,Ҋ1)%"h |\x1&f+6[Kp-!M\5l/M7GOĥJkElӚV`\mf&.A[R&ש5^`5#PL9k@C'ڥi-7wM+7`&n4MP@ bDhqIpYebt};`OW$gq*}q_d 0˷`3%~|f??Bv<4y;\H@X7 j42OѻCsnk=W3g̃5,V~rn@idZ5kf?1FZpOhɁ̾eCz-mSOחt;tIfBbӀc\4:苍e6 H7c)-b0 Dtr=6ˠ¿}B}x 9kIյgYyOy:R F Vy+k,׸ͦGpza?r/:HG Uy!PpI) >zsnoG ٞaY݂9HiA$𦮽LsɃ\*ㄥ) Xw R0ƈ-Axf;W3ozd 5X8W grufawo<`S}ì$}^p4YBP2,hQpqh8&+/ͯ}w|H USNIDAT}c+>L }8lRm4fHCXә3 so9 n|۞0={pU8G8%W%=[ JiA:q FΜ`pP(7/eV$D{Cxݬ/G㸡mzKOenw L̞Tݷ[yJ|e ͰVa?P4az÷]_wq%i(*p.U/ >{\g B YOi'e8 `pB!AZB ˌ'n@d]F xT?B;ksrLO`LڅBfNLK6lMF}P|!hU銌j'՚SypKN#䮂ĆX]\q妗8~ʎKjyŸHj'TX/Cbm{Nϵ;đ`ڒY떸g+oWm܀( ]'j.:]uŒT5, |Th8#2n`\gOe#WtҼB`ҟȆXkNCU?۞_IsߑOyEc5jlE)ߧꒇ ]5YXT\ >sU\6QǨ޺hp{3;77ՋH>GKǎH٥_8Zh`-.݁5L wgau(@bl/ NxZ Y9Fbڭ >_- Ee|&NtDWEܒ_]˱'`W6J \L vH b)^e~+]Fu( ]Y߮VVW/)Z='֬R>$<*PmoX^#=Co(FjBWtS%W'/ :~mMhH,-*cOluj 0+#Ҹf0RZ!pB$ U۟B9_sVSiН*, ڬZ_ȕ\ϣuhLtDkiSAH ZccNv^&%V$,6-a?8xa->JMw0 *Co-y4e/|c?/ 旳_.*֗ ~ caLd$4 Q|ACW (3r V"n.{c[HaF1^j42t42@g"P/{ϑGbߟ:?bS)️Sggs2M"TH.Xx[K]@%  ϼEUuW25+X,puAخ4&{]`Bk-mn(B[wH$4erav1?&V';À"S9A+"Iv L}y{xQ;*EUc&--{ްٽҕ6c&+A7?\e C9*Ɵ1bE?35huQJs@ Ƌm4n$ qL(6,(udkR8 f^e*g|}k k.@PZ18ͱ ͆ GOt0r'e|wx|Ed2Bt ]s9uwUom4Q-IF.*{*<35pBpu!/ñM:$X7qF#BED9A F Bd0W[`@C[ Юھ95/Z)F=_B 6(J~*<ŀ:9BgɟtD6A/|ZC{,*з4J9Xb6}*[kʰ pᐁ?!F:|(`߃xO䠌JB$ F;(88)I<@ H6%B Y.q8w̓lLPBDvS,Z ~`ݟHSd~:Y*ٕPn|<6ws҅c5TAch4ZPP)u[Q~Upt pA=}xK>9C \1ZmR~jvN"졠K-Beȑ"说IϜ/1?XBtz^H`m` Efg[V@#]ju',t=Az=NkB'&ϴ]Iti0k M c ܙ=-X2*_S8y'ֱOO6A-8'B0ZcZ4V@swhW׎I R \'@T5Mu\J +ɻX)L&@iEkܪܨX_ڬi{(>U? Uh51T,q37Сgdܗtl4z50 (oݞ `f`( 2u+FKnš߿\5 mG$ʨL; uP7@hN)Pt$Rf n+H#imW{4&ceɴJ (6_Ƭe܄$[ 9=]jv. HW>wW~*۶XMaD@yܐ 1kM0KK|k享`ǥ[ cB4/Q97b`}>*BHIϫf2vKyӛ>iB0t">v{Ri|E3'ߧCkؑxaR=`&Gߡg'$c W,N.PR$Wqcu.j'ՀC `PZT2iϼy#[ A=XF |w?s\~%RƉDJ@BR ҃u-,(Sm#Ԥو{iXh=d!"݄?]~56053&/"_L:.4AݰxhCs{[KGJ# pbso = ]Cl:WĖm24681,]s%;GU\0q&8J8NB&dR t): iCBa?> ' M閦s ytuKQJN`=hDT*1H3N{r [x>B@X\Q845mQN2 uoo&WWG:_w}"r>xD6QD9wm\e;3g.v|:\dQʶj*a)BҋDPU}h_*3@UUhAQi%T*M7Y'ɮ$3sa{ds;dόߏJ_`-- 4<9t$~U#~;G[YDV[k}/p3xq]Uįts/ P*:ZUAI!i@UDn:81֠PMG42[VA GXk::x)ˇ - &T첃Ba /,X.a@ދxx-}̺Wf ޲17ANf,i[˟!_{~[B c837h Zm~%c `oJ[].5hf e>?ݟ w3}m-w`kWmgn@{^i9.`ۼ_ū//`[c@sÂSs<,&'0>6 =AAVaպznO䨚tpe:SuX 7o屸r'*9jB΍Ss- %Ȝ6Q/8mp&oH0 |6PqnwO0L1 f ~sEap&XL&ǐ$@*hLq׈HČSH6'GDy.X5Q*W|mҠ>Pb' (z[gR*HjC Eu ]zW#$= t]XIݸ#'t$$E.}G=ƃ L`ltc'GJ% C+D/]>xԯ*mnq0\T5ߕ6jq\i Q3*V(4OWThI *]6tZz3:CEɐc~~EpYD<24'2 NhaJ Mw궞ݨ=gnڎ[`O& MolFëW Pc!H}.F]vX.d2* 6g74 - ȤSH'SH 14G4@9U6͇G|BDVG\F\VZӇ6DMg9= X>$7g[ *T"Yp1pфSgڨ0 x0tMVBj9 zF-2%?!0GtO'pȳ=zB f沼%|=>->*hnZpα<6l/§~Ý۷ |ƶ3 J F/grYpGZ>꒼%"1)Q .nX?<BЏ U`*^H !9| ?wxjFl~P:CsڕC-DA~TadpF0~vyzVlgύ7 @tx)J<섞֠%1}w Ko.oema%cc{ſ6逖BG'* +}ȭܚxk:AwAO(mGt)TÏ}otۑ㢶VwUa^ |~BڎR|`dt]OH枘ŏJ~@V¡?<'cȋzЄ۩h FvgyC7$?S'ba_)f3L?2)*Kf*96\y~5BOk5;KiH / g9~SM"0٭Gȶli11-*~y_ZwMҕ2#Bw8]HԵG0T8Q%ߝH[IQU#mŃSúYJ#@5*M樁.ٿ&oK;.&Du9(;Sw#{Mz5FAc DO6=a R$"z&~4BP];%?}XGl}Ӣ| n񾣻ܾx. Z#!P4Ҟ482D}>cB4~}M āgEuֵ)I&߸GDڛb .>ɟNiO B]>=j3?E4N1)gjHoAj0݋&ˊ}Oejej&z~[S`7ӭ'7z9dX8) Pj*w7>H19V+6USo^,"d>AYeH_huŰ)OV)`:r/OcwM”0knݼݜ\ϾXA!y]*6AhF< []׸ dO),a,}og'ypSiݫx~߫qQ-z;[+)*/E93C7={VT@@ Th*}{w5FP)\ キR&b1@c@o,.i%5$ Pq&8pj!3D5I(K$gUti͍ú][óf̧!;ٝ(ą󒬴"KyI]eůb'Q Ϧ1ջ@iP_N\)iCy'ܫ#9(EN9n튻: [&02ZTU1fFH9IN7d(3GqJ){t_u{8"*(J6OuC "5JX`F-IG:i{8V$3-v"qB[ҡnQ_@aXt'ͲH_ꍧ8$!lbP#jl)g+MbtĆ>?>F30|Oj7?7q#(=x`L)͚c׺u]uްK5ղ27,?<&aoGn+½zʱ0 dOBR~qol/D$D~ɟ/HD80Gp"-_2X0J*(au0 r|JQ+i=[qssow}ݍz]ճfZUWѹk狷gg=_.O]uYBOa+~~K46̱6>>s2"*y o)zA~]tp2)aˆ 'ڥ \I(8D)l:'Sc!;9Rˍ8Qݻw݃tZu]W}|cocfǎu뺶kyqώp<*.K]b^C/|;kؘ`@] mO?;_kL!ڰt . GbXO5 ()Fh'$ ` Z0 Z)ݔUBLzro?:xpsɤ꺮"VQEOZ 33ña}m_/|$3t~ C]v?˟߾{05 |ۿ8|~J[[HIS9RBX(9at9΍(LK:`{\"T-3IADz:#A5 ժ@[V^u֛H$39g3Fcg HhӤZA\@*%% \FQY+O{hɞ3`-'@b釕;!1gTun|VDf]zl@9DL]Ψ4-p3bl7 uiĉN/Ih'X Y8=…o#/t,G:CckVLn{F{:mp{.P$ PI s~h>va];DU~Uv`%8[9ʀ-*5A\.u{sAV:2Z[)5Yܨ>tqpjd퉣s^^:~i~Vc cx{'y_Yw#*@پ['".BAIA&HJqevri/?yc UW-Uץj1rh(ī/q_H]i(WzJb5 Lggkabdwݳzte&IDZp=tLs~ԉ-< |g^Y^g/Hܵ+ ʿd4ùtP 2WRRgGeyYe~z }?ۓnaݡ?+iDYk pNeZ#7*`bKs"pT`7:7A{)l$\=2|Q!.*,Or#h:$I$QGBfqΈ1cDj1 kc?ɇ-.8V`B*WGz0wrgm1zKxoݒꝇ֑ގ(7lݻSϹ(~u1_vkPס:5Nj]cRWqO/C} =fȌeZ|zSkIUTTc?圹EL|v˭wlqI$5X/|5fKxEC>_=~:r (mRcF T^h9oI;bv 玽ҏ=Ƀ"Y/!9 EpҮمrigjd JNPf:tܭ?؇uԤj3~ 7Z+OఠKzP1t\?DS|"j,JW,7n%Iqz.:6b  t1[\-_=D;ן}>]TzOaG͠(x՟vxٽja-a6C AhbjRCڄ4#gg.-~b;j#elFZ3ЯWlm2m x5hڣU>8Br)?h6DQg1hSFRhMI%{jdIR$m"rsbJdɰ'O}훏Gc%6@YH? ܖ>t"n#_DA*E`02iw(lv7$#HW9u(Gیź +U-u_i<_=o\`+Aeπy5":gQIDAT]y\G}^{{=>Wd'qP!-!,0 eI $@  8UpjxH8x_3v_zu( PjW7A2~}KqgJ eC }vz? VhGQ?y˿<=}si>M j VQp>zݻoS@FB+Ihq*A (d $"[fvvYFZ;(/P^?W" k:b%V%MvCP_0@&8"uM]44DCV0쮭pD "_7m~8(jWO!!=>\ } _Jr=tW{H(AQ0}xvF !$:0F'JE%=vzs@o?=tV>IN'O0C7fՎdw_ͣ2wumv+@ ŝ$͔dsR3!DT<w'2\ms$@p @? W( i?U-d8+/?G>S]zTU&$))Qhh(&Z`dBn9Ibs7CskT)0B$4Laʠ3hݳJ"QSzR,IyzKrIBC ᦃ31J0ZېbO)=/\섘B( rG/bRa(oM.D-kb[~+߈Cqw]*&Q&΂OO1VC|Ҭ}@0^c|lu3xNސkE vnrߝ$6 Y!/ 6_(m*6'iL5Zoy̠ lkl3+ y6Ug9}N}A4Æxcn{I!h pcd@Jxl~n_t@s 2?qL@rg E4!*:Ԃދ: y6~dw"|K~s88@YC"EKcwj ?F*R^=3 L0j/._hT78_7lWG7(TlOk9š=>rۺoRD3j(Vck^Vw ^gc_>tkUDπ2K(8])~=oG^N@Jmfȣ ag{/Pf9bѹIE:vg r`C2BF3ϖ;f v3dRZ(@%zEaH ,opIԇnyo}@LiQV%;I4A{[_{w8x#vB5M_xB-x~@S w(WǏoupu>RN>t]ƀ9ݳ06H+՚է+Z{ii+s ˅Y֒iS*EaictEA'j/ٚ @ R۞&dٓB+sa/nXx|Ga:]:- "A>:7?l%8vr;o]7ߌY b3}a>>_= @5*l= xglݳ.X4:FU> &Q>匜0ڌP?z!'J}콓qbb 9/Fhӳ@ LfuK"?kݎ~ 5`gciKkC\ToHޮ"Џ}C;5W7sD_^u}` /xol읈1D@iDb|QU1'"-'>ˠ]nھ/>b c|NӵYn]I- Ң)7OVǬFyKݷI9 lo  SϪ\9{YRJ) ӃKT;wD~ ړbF$ ,@<{[9 )O ;'à & De$ εV@'!̶ ҹ<1Fi5kR<5{IdnCbxqSkCѽddq,eFzrP, ף(WB恹φG''wC5^a"A=㕪U[*!hߏgy;z)2^ 2^˟8ū /-߼؏곓 &(Vk! EEWg~[c?pRfҀT.f. m\Ev; !ZTQP*'͒\*W&BLӎNG61Je e͜ܯE56SX X]\H#sj$%xsw\:~&@-VMM?OhAEZ@e>7e D& HzH/TZEP. R j:xк*Sl2(S)@N5H o9CocM5RTY!\xyfA(*6g_J2AWXzdmG~R] :J#ASD k}~J]r=>lv3  [S[ ^$V#]"_)knj=\ 9"*M.gYN䇒%ZuL)-5bql[QA(=$_3W݀~l@"'<Ld0Jl_9cݘG5D Mrb桪03'B;I;f}P}`{('c95SE Fz539U3 Ǭ a1Ǽʮֶ drm A40Q$G?"lA(C`h1p?&Ts?Yr5P9&!|;cʝWrSZE%NSgΙ?{(!lfQ}2hRADt|qK_sS)5b^c^`9r`ݨHK_|L@P=,^~sT2WXφAeEY ]`=33=s?EB{RRcޟ»x sL!Լ"ǥNvxVЩǪ^c2+Jl$~x85 ƺ۹ gc />c3 ؐ9FPW=wf rLf^ ZI5̄ Nhg54m}qvG^n:uOjVp#200ѺYJ77~.xxj* ~GT8:X}PIYw~6Eaĺ^BPO KtLe>i>[~nY.($ɮ~vv/ہC}Z4KɌmt.}/Y09"Ŵ\*aB^Yվ]I6 SV?Ma*PxWNaoh,'y fCksj\aʘAZ+,:⭙ʭ;HC~o ANOr7cKh/b~9RTU|"M`#3[;huy{g'`t%x (WXJ|9p|d+` *k2C~uuOP1d>Di Uw!St!_NzRF8s` 4ߢ؋۹;R TKfRHkfhP@  D@悹`>@>y :NMa!FBQ("1Ba^ͭKJ+5Z=`?k<h悹`zcujK kHϗsqYn豁2ZYvr@ D\An ƅ)ɸ<`i:%p<@!IDm 2"g7~Ne@1qep¥h>m@ܫ׈`x_ ?:،wp!/~s{Yc ):?EK~.Ԧ@6(QXT킔 ELc6cb}PMD01`L0]ed6G O?[uno.^N Ę"HkUj),ms/"A?U-IS%>;U@Zx[%W?6&tHJըPʱY_~Gm/O] #5eQG--td3 &N]EX&0WWZeYv|~5INUXHYMѵgGSJ_yOj3qm4NΆ|a֞-frXm9&Tnཿ]Ç-~jh/x%(Rd@P\fzZ-j4O041Rz%"vHsӁae" Ȩrv9`@2QUe943'/Uwbe޼rWGoрj1עν}U;$]C,BM+"Դ4Cb1߁pk > Pnvd˛*V:a hۘQ62_rʫ-y0 p¥$*E:RX$ qm۞ ݽGF%5PNe?QRV[؊cg|W +̺( DM0 Ԥ u C> IDAT]KeGV}ι~\:4|=08SQ@i~? /A3p (A:"&bAt'}=]AZϽ{VU}QjWsR4}g{Qv;q-0}獷p?~a<*ӽM$hFiPfnote- OJ b\b>n2'r7SVHA06ʀ|60{100{nR@wI^cRbmΦ|)f/Ϟ;]S@.UtNJ͆^s:wqv (C mi;dDwMJٟ^kZ)U_M/u-_ێC4 0􄶉ٚUd#&㩰`T:M δԘhr+7cu?G] 4Հ74{zq9q40˴]vY˳SzX24!`gp-aC@R PO*n"|xj7TSp>'?МXdNTKQ70UTLzV׶@]z)H1rDr~ͷݯ3BrD{NH>I /XsX< blJ2$(o3ܔoQ'&:/2 #j2b5T }ڍޏOHQg`§?15ie+0"6,W_=? EW?"Jn,Htxi,\l@v2{6"VS`)F,.SUjCH32H񉲤IܱxRW8HU|† VBg[LO·6.- <9W"Psݎ\b0,61"s^ݘv6,i$پ^KY#c㧧s4QtB,kW%2ofi@P(_^4@4 UW^?_?U[ wh83v@Mf,jJ3գr-majbmu nN`~ZGS]RbP}Sb֭.@C2OͲm $/V[i^ XF0 QK>^e=_q{9CMei7 M*]գS_p 8,JF$ lA `\(Lf(zQ;r:ja| gG(e'23ǥYvmiXs|BQ(qO1 9^l01"OiDe軂dn5l[U!3ؔh,(f|.i_]6(D"^#/ wk3pD?D5}&+ɴRXţiYɓA&˶զ*fD;N? o:ۦSQ!dx.J]l0-h27Å)Qo6GFK-]R8Blp/K?[?yV]-)$|P{GWWHN([6JYv*6v@Lre&GY UeI^;L5T` 0eʷK4D ļ IDAT]}eUs{o&$|6C(1 :Bk Vj"hр)j 1C"*jBZLj*D:dMfܯsZ?&){޿o9ozV׵D{{81U}\S] y3wF|h.?1`ƭ=s^^K+=G1@z< !ɉN&|(8$DZ6Mn UK"/ϴ({8km7\oMj(%]Uwe`>EDTBZ]L=dzKn~Ad51k'#]H94_tp_O&C}~߶5EE`]$X.% 4pqX'[gD f:|Y-L1>:$%uV&j[% j)*YM+mvTl&JHHOx+Hvwޛc08fPh ]z?? Ϳ4>.(/gxk/"" hg .h?@$P%> yjC_+!XTqS3SEi&$4. h'ldDtkcV_e(tH?}zZ{$ſ{F5~# }˷:('X~V_[ Eb@V@ c:?ȫ%=2_{oA mٛd J4*fl %]hv[xn tŠ2:P'}=DFV +&к샏7IH/<>?ga40`cZ",0;bQBGypĺxd7+"@0{X>)(YG,3n^LhюX XԌՏt<21Su!gTW.{|? 73}H]gϽ.߾go92#>0n]>8@/);fuQ4Jȶ84%e +o2{:#֦W,V>= W;* Z 5NF"*A4굝{B_XдD#` Ou{e\o< VN?߿tAn.uhIUDA'ekcllp; XS.=4CQm8.OF:&k-U,1q*Oɠ4.^BEr(Vx2q c 4o!^Z\ }iZoo9T!p4UD  ?$kgO׾95Dn _LЏ;PAq_)喌g~7.CD3 m2UO!frVi:vJSn*W_PTF1C^*Go`WES(\t+~4f*p4!%ꃁ O վV??#/ O}wPfBT؇h oo8$O: D@E0h(U=t?,Íy5(_8N&(#KyIjPSvju[^g*4߻xP>*X3/_^j9yp}'QzwF n4?)g>+g>w[6;w鑝5WAW8l80\h&@hEXß]yξʒFjlCY-3yp D>O/J w9Bɓ2cdg/"\t.h@0Uy&o*^rRw<}AYg/IGAˠ!P BfN/ݿ}/Y,ן7EG=`zo<dg?n7M C7Zݖ"l=q|*` ؀*0SU"*`йŴ=Wlvrﶭl];{xNƣ*nTKIz> afvO'vk3M1ƹ]4/eU! vD36G y{tB?E4(.X43ƇXPCxW=W_@?2'RH,R""R"Q"!K]=~㨊њ{ Pᡏ;_7شҭC!T:FFUҊtc~~7?Cy݇O$/};~vV꼓GxnAP⧠;I̭ڷ|⋿OǓfpQqa('61im*U b- QhXA%`,& Y+Fu@ %)|J\p FX& tbgЇ\]Y N Oz\T~(P)@S_#,|ګWsαs\0i9379 xRHa _ؙ tP@w)Fpй$>6`.r/{ P7m_ܞyp(vo6c^׎3ij',8Nd2{umUᱪ_~ }wP@Qfi[E4lOV33kѤ="iy9ml-VᡸE_zᕦvMӄ'?(A]rq5p7&zħ>}JGA@ E8<>b Zr]?wX =OD/{d6su:PV=ݘ&8pӸ/]afƭHB(ػ A)o@ըFzq&j`u Bd~JjT,}{liA>3԰?11IDAT]i$W}{U}Mt;{{c##^6`  %\AA[C)DBD""Q$bq lo|7zgٝ>#isN83RJ@a g0f,c߈TR'/^L)a?m~'9quCaID% p]dF?Qvb14Wi71B 2.?ǠR&EZa78Zkt4J&K:,c`b 5'MG> GX0Ѫ4gf\kVRVPp.XF*>`"`so^\^|bFcjx݌2+V0}_{]3A_W[npLr;'oJy޸e~m0N]\}+/?qjcMn-DZh^S/,M'|rqǜRZ%o f&!b c"+?oq7YLy449X9bGsTJp0M9Y0/ݶO`cVoLʨ2RJ)a$ZP3EFm Z*=ub5+p1(,+-=ɣfD7:t {`[x`KG\cƖJTJܱ6+9wI(:dIM +ݧߧӧ6shSqO f{-|Oȑsd,8}lmQ;ckq% >ڗ>,3F[\`> :o?uO(ݝqÍ.+ #TJ)%JA;ZkH):'KIgG'Iaָc^rYa !C1*L'ԏDx ؈9d3?>H.RqzOO>wt=5 Q7rv%vHy 9I("db_iw&AZ+x^!Fs1FbܺDISQ~z6Ipyos7~l 4G u)G̪!P@q϶}e:$-VJ9JRz8"RRچR8cZ ѓ{F̴i9ֺq}׿mzV*ŰP EA!% q7boGE.$8\'Qzö[Zr_ I=Y a~m.qN‘vq:3ʂ޳x%sшp.ƌHcm\Ohjn;ן tBᶌcoIWg2p+h)]LJCh|a%GHw(dZ)p(T~DR*)5T6ݍ~WJı׎t"?ƭۛ<`B9v&-dD{;?raT(0 <{$|ʠӟZlUs0WF(b'#,e." m3kalj~4l6aL??_88!YiRZWJ4Ŋ(Ӕhg?9utkbPS-CkN,z,`6Э Pj8|1oO q5 ;}ǜ%DHJI)RfЏڅaiQvʪ zgɈ8%2Qx߭x-oZi7KP ATJAȧ.p^s.8=C9>ܬV랾S'Pn3ek%42aD䡓7Å̡A|bdԈW}WSy‘Uv2#JUl GŚ.Dn90l ;xe+UqkqynM-!IX"6gVZ@.{0==&$c ~?d$Ji U\ V(A9 `D,;+[P{mS=z>4].qQ%.H\a\TVa\H3W{[0&/+ӗ|G+7>bhh(Ye3P eSbh-gQ>7jB}<5k>t?3\y Ľ8\AP(a&VBl+α|n߸Wp(4u <:" tzW6їM7Ve헁fw޼C7ނx[ rΌLq?v|<(ú1M{WZ62]p)J*ɚ)Ϗ/o!PKkje>lL{٨x7O~fW1~gHM֘$9QEw~ias+EX.Yz*Q'ZHr0pط^!D^Û~yևn6G G&2)ۖ8rHaSKXg3@SqA {8,S;%AAT!@;strb.f#(ǝS5܌Rxն-xvr0)JITJPJ,Y9TgϮ)+;z}_ļ7ϱ2g$Mwp5f͙bP, 89PaÛ`@%Iӯ|~uOFJK*||Zdַ8C-L>RJ*%#5_^ >9i  / {7 *4 )FuzQӏF%06f=ԍL*$sۺFhǔtND2z= j6|;س3ܷ;ؽCZO.?33JMx$TJ+>YFZI7 5\^t=v~?[_ωL𥉉K acw={lhJR\,b B(J FB8[u,F0ĉ"`t|h|ܗHIWL<__:|Wd EDGgԣNiD)0#V gvs m^Ыp-IDAT]idU}[ju؎=qe'H!!H?A"%B -N%vOfqLOwWwUWի㭵$"Wz;~gf`<넦Tu'O5,l2&FBuGmH$ݿ)498 (Ia Xr z]Ֆ$I_)T9 !(N N0Sf<$DҤ~ g qws%8Z67-رՎﻮW\ǭ9u۳X ƎL0N]4@گo?rB$0~\#myZɔ[ϼEwg 8&1gt8|cpk$6/MMv!,*~R=L B8k'Q UaTKR^ܕZlpxUT[?~Cg>qj}u[sW  "k p>/lntp?wq`!Wo|wcV 7F%rB֬Jn_o(pNkRGg*TSU ZjU` ($7ۿ\1PIov$n{ډL.vj-沑q)+yY-fT}%ZA_RK)pb8D!腐"q,0IZiQEQ$BhZR=ԷzCk'Ɇ>IxXk_jdA_W泋kvﰫ _`HȇPCV?\ߐzulP9$)#109zowZS~C1.\MRn$7MYl-V5}2_7 N`U?F#!D"9F E"JIRƣ$_fZ5;{/< {{kjzΞ9}Zi75+~B{OR-Ks S,thDAt O]S֑?SJ Q)o{kflf9pT)3 \q4׎-@J_݋J̧ӘN h;5hF`ĈSJܙD9(-8Â&_,M:z;1!eG0Ga !R$U@ߟH+h % n/"D p/x+PMw͉fB{u߫{BiFg9'O>]t`mxf;AĽ+OWKvfZY/asޒݹ_׳2P^R坕 nq1HHVDfv0rW =c+ꛡefA5QA!rRPLj&VesLUQ0(ݼ1(0 (٤HRɢCHkRt`v{Q`mjBDxq'mv<вjybן٨7| k5Ui9OJNgŅ`k`&c6'jCouz|uȉ]+%3PF3] e~h\߸SLlʟVP\J#8xs< grr j{ZlTM ͍B Wjɖ $b1DjN])4*+ӶOtSF@D .moEIZ*+X"?4VJI7?(dFlJnwLkmyG]wlQo6ꍆf编3B0#C16oOR(.r_P@12‘PB3[Q3ܻ}&1g2,zڸBx?A4:عGD{e鴎IZؼUB%ch$B !C ͭ9\wl9E%cf-&X*<\EPva$V~b0޵2adv4eZ}[~EjDiO_\-TBBh5Dӌ 5HTrolRJEqsTcTgQv{{q4.?Y~BKR gzd"PFQ d|,m..^_(o<htV= 3?zKvh݆mQU/;1L?T[[%Q >D f _|?q¯ڏH_uo wɨ+f=JvL3թ#0UVܙPmYoy3K`30,4-HвAZȒt ̴|J* -q⭗?VJ t5 eTpĕrZh7[ߋI1ߤF0l ЉN%m" $dgoOj2#g.6A" /ES ئ| 6,չZPjPJdzZP )f0\NDѳ_~~+Q?7NE y|'m~w4uLөļ̜~6<}u86_^>:/N&̬Ű . |TZ wu?+Ob3K1J-%k뺊Ic2^ ˳.:fH*XZ*? ~{J : 2I.5^C]$M`48Lf"UfPd~k9U6Ȧ@PQ?d rRsm`L'֥{ya7j#i2Usg66h"IDAT]y%Y}Uy͛=f$)8?l( X8Rc ? 1!q bD@9L"-zkY;;so]zOo>ﮯO+@ f\*PfǍfsnn!ǂ3% LߚZk%j*@kZ+!FDʏRJ Oz"* icc}Y aՍ2뾉H{8t;NaYث 8+7ycWM=KwLZ.rAN`O gy?I Azi{?z;̮MuiY0DEB _yz}pQֻY3@k`SA7 >rL|| K)=>GsXY s ~AcJ<`$J [ chp^;Okv6ZVO(b(h8JH޹c3[|+ bN݈y\㐴<ŵىxD5ޯ{? YʢIgL @OZ;Z!f+g{lnCɋeswM\W׍ |\K amhL} ^5D=9}ۓ{r5 y`%_|&fؓZ>OႊuĞ괥s[bFQݶe3eo\#:rZ{=F)hC࿵uh IC>uDOP{{e8%{m}܂9#MB$LH>NB!Π=oH"U4O|@dN7rcN~jm|ݘ?)ec^* aC##yKRJu_c`^M^Bh@M@d}PW¯Ǒtt@U"FKקZN}>wENO֘(㐳X_Eucf|V ?EGuRc9LZuC`ha8& .sX> 3:ЌŬ~zxl(2~ؿch!0Vr+t# WDtt n7طGn.}_Ro&#Kf+B _br&G'֣ "lZ<؍SgOsX}ɢҠܷjgdY:a؈Q+j7ZP4n.m[W=:0A$M"ZQ'K RGCBeބ-d2l?iQ[=vHE; wS*+72q/;ډkJ`"=Hw*Þ@^s~9{ʢ~T9mkO ^/r]Qp䵃~ d1X'o"G;@[}Jlˢkz'q܎F1˴ʚFyn~~yqu פ3iW6֖[e& bN'?(TtK{"J @Cd%L#C#/ K7-5BL,{aNށpQ{M9XnXϿ;95=5 $Y e2YXLR?>`V%l0dV֣ k/,-0E<7`0.0 N^ kTRB9KΙp99$}u]Ɔe Wo>hRZmO{7p}w7Cs_yfK:?" Gazf&ƹpt~bdnrq4%3Wn[zaU#c^mvfسH`^?S=V;5Y))|}Nh^&N)& t Qmu…ٹZN(ð#zO +\rwF~>=2g)#qX\Mm{׮@uvڦU6# ".̭m?藚?'4\}3I6 8ojOaڊS&)KΌ?}كș%l(vg |QŠjEDUt6n8NJ! cR/'AArsɸnj`W=iy&"iVQ+ fr/ ʃ/E8yQ="'m^d5sGR-\aw>$ڕ9hDǡg&`Qv1E<5&?f?u:*WHE@!`3.qک$LZvgz0Տ_Z BnQ:3d}4`@)?+Jb.p3ALq0pmi4q::ҪTWj7;`ZAD M~Cܣ'ߗo b8N\B VkD`[^ ;.Ѐ6bf}/]~Og\F :O4}t[k&x([)/gW߈Flk*Khm4"@Ҁ媉Ra%R^>Yh)8:;4`QE@C7[ٹyc9r ()D&.e6ç [vجڭzṶ1^?\b.sG){d =ኸ<)g/?,23` xkǿrC⃺-pz*9"mkEQٟZ41|,] ' lǯ8"䊜FQq886 .z +_ @@90k0 pwY>};s5W2ЯRWA:^HM`1[ M։`Ys:r>ViJt6 8\.2&w'ebk QuNlFiw:a^' 1>Nh'ƣ,{"'ҪJ<`sx3p^@.ۏeLl_۾` e:ɡPnwHv{9P9;?vUtlRPg;% EEM_oot)Tbp«xn Jsjȏ(ֽ 9rT@dU\ Sb3yA}3;2';Gbÿ5ZI?,Ƕo22]Zs ugO\L^?z8Ƕ3f:`\+Q9Id+y IDAT]K%WzWge # q%Y Q D7"".] ",Ņ0DЙ$龷oս8uN[wgO?֭y?);'Ãt7MSQ7+ qsVb>O(ىG:U(*U&3~S%eHeqŤLb~j0 nEՄ|^=tc]7SP1;ﭩ=J C}"]C/2 b1"`'7[ m Sܘv}tlzu)hI-"3#S3 |ZdA^ "|vp&&$Q/.,(&J" 3Sò1UY-X vq'2Bz:Iwk7cŰ3]pxmDTa6٧^yw}# yN3ih9̸BpSswtw_Dž v2E: 蠘{J{].U`7Gk\o}w-Bq~`|ifż(pဳ3IvB:Q FUJzdt@2&:CO~TTׁ hH7ՠ7{u!;ގD˶d +?6?=xmvK4\rY@Ah`|q28qXܘ'sl.TRAvdDm}ir*搉33c#ԯAճc%ͧbߥDJ!&N=ߌ*v{uWĿ6eXYϤ7p@L ǭv wNg;Q9 YoZFԐ*٬6+f㋇KɥI?Y=@L'oFvNT@PTDχ o>yH TpWD8r =OȠMU^H [0{C@\YWVi+E’ƕx}9`2=<&||qrj.Ubx3Jvt7бRޯQI ?B8P}(B4M 8M""d o%e|+ #|,m4Y _ʲ-%D ?ro-\)V ttf[ؘ̦W&SnH*AO Z tI%3"b`eާzTDX{Y v/tq>/S0䐲JA)hol~eqSKL3s3 8D0Ej ur\x.^ejТՙiI6d "^1{J>f,2/e.fy)C&h8ȴJ  Vq*V*f5fJ8S7mk+ E֙z/R2{+)P@ GZ R0~ךVY,4\uÂ\TbԼqL{+hUp:)V3eQJ JaD Ri3?ct1o_D?uhRD8ZDSsKp(WyPnߨ~F2珥wD:΋4`&P%R~,HTm;OZ2#u`!8Fa9Җo1-d4m9'Q"/r)0PsFzG\^fw,V)Wέx3`xwJmKBQ-8 `FoJ IDAT]KodG3A d((#`?-@$@BLJBX@H błٱdGXɌ3v~]UE9u>ڎ }o׭[g=D%tpSeCC}{Fº[ >4Rx, Lɸ7 |/Dv^ya 9x[|H5O}KD#_avY;O~R/r̛| Rگ 9;ye'/ļԬYKm ,"XL DZtcZ"xCM!9Qą< E8c?˭޹ S |*/[S.U wrk)'Q!!BRe;ͦҀ30i CŅ%ZFjhXf;PMHV-Mzn N?JB+uM2X<-A3В7{+KmJmg^ 4YLsD,Sr E6C?$By#k~dmH0jr.* /*.̦:{%t dW|^?53 ؀!f)`~r;^3N.E(}fc> ,:\GEAf\m|2 o E݈ˮmIS:+rw#92S@6I@ PQX6R"Yy J5IVՇ7"S $(z ,R 0['>'207quItU,5RBrcFZ hi lQLѺ= t:F %ˎ3lhPա I߶\(B"]jʚ:(%{ؗBK, NQKH?{kyt"b4^Z%מڮD%!?)#!AyA'>YfPw WQw!mHS>b~VUQ9pzJFT +E@EU$Y%R[D|6ᓴN6Co^rlH^O67ťSC 蛍p8`Nd(j\@գ 0ϢI8rYXÜ-s0#* @#9뚯#q(?I3q4~hn9.1J=4,j8'eI?M <̲v1) {SZ~_2^؆C͟a R~n4ǥц%3hYUZws掗DjSF1P±dI!FqA +g`141jJm@6kxNjz8ҿ(pPa뫒/ CU!C!]ȐMll`xx4{k?9j+-3,K߹vOfh{@jEb?H4dFb@uX[qd:y~)JSKW CP_5T R<-7彳L/{!q@HUK{SLUx;RT pއ`fw{S`qMwё%[<c&{;);Mf J59t}~:qԣe4/][d7:2uD+>Q"Խ㰬8-֬AQ9օiW>IV8+lIpu\}|x2ݟ,h_δiRW<Վs׀ibw.ڠY=N l*Q"O:mh=`n @**폄-DT 놪Zkke=I8b (T)3)aQLJypKw65,j=8:}zⰍ>;25vx\Q0 ^Nmn?]S;O!H^?=[&a*:|I%-rЇx/]J0aW8A| XrUC#&[.RV8'$eoٰ +C;bbZ.O:=>[&O p1 >a^Y`^V\:5d|~+`Ӣŋsd:-nȦXha/%keq shkqMJSQ%9.d8<\ 'ZIМ W'K4Zw!hh wj ɇwqo!+j`^* /Cn4{ygJ>I9z:P*,IDAT][Ye.gkgc{aY/I6.EH,/(7H7D$J("D®H.aח13}Ι9twg8{7GvU@UݵgK?Mk)!ǢD~@+wFMq<20'<g:ԾyZiNOK_7xO6^q b!dT<$M+JD(oGшHEUP]eɚ7= HgґuH)?40k-Uؾc{37YX2,wƺAn}=tV!? Ӂ D!r+_(GXel-eE1ퟨ1rTm~|fXE|H !9G<:2X(M= {gZasnFG;/p[0. fbΩ/+@9 % }k@b$N|eמ1#(IlJ`X[n+F@D,[khI"S9I+$)bߍp2:뒎!aX H޺z=rUW PRPCcx*YH;CӂtTPE nOYV'5)%Y'=lj̦! qE\a{gy-f(wO+5F z?Oy(567J/[8&؞IAW9YAhP?9Ĭ~fĹ٩|s[X?xWa?"ʻJ!5_5hHx.Q:|'fV)UA$bg~Z|j0WR!=#P܂ئ0wWLMOhX$: iZulBXr3j<sw;lC}cY_ǕI 䫿sKCX.h"kXFq0#6#-1ѳ_>ʼn;uwݓSfrsa~/\RK_\8_m6lU!!>bhOGol9؊+JMq҄$尝磠?3+cTNֲ1TH,1qIyQ̈34syi̴Iͳ+[g~Zr%w59W=1BSCk)1ٚj7?l7⥄qScqʡF4s,ꎘH*%ázJ(PJ=rW8O?*{[O$IShr5=}u{њ9c\p_,SԳQҿRA D/7h.َ8$=h?T)kxg"/(d,]Rk|:&L@' B1tDMt߻]dENҲN̞pMTi 13ӋO=m)TJlCvd@d[n 6=SZzҥ?{*kЕT[B-`tɩmp@2@]!1,8+xKC 4 L(R|yǑ0Rt[kXSX7~֐'*-9*p8)fwi,\>ouUsj۾2E4DOoys3G"[_XPX"c,Y{w0B$~ Vhϝm&n,jRISa= Fa:k†-uM;pL;>P CTR/ xlɼ#JE=fډ3fǭ1<<2 D HZ~o`i|l!Ϝa"yD4xz#MKB?-g<1W$Rs(rd f eR"k ȏA0 c͉fN̔ CRBAA0\1`k1`ni0AxG>) R, ^GUTBy *k3}̙CU^4P랪LW1E z%Pv~#mvw:/8QP ͷK/Bp}2DԳ 0מssk{YADZA-F3@ư0d\PHnZ̨\ˈmm#gd>c-е02켿76R7*RKPǃ&ݕRW?@N% vA_Lmz|I}o]_1c\`iAR9(`&?Q5ɫWx7vϻOmi h-ھ|?#ÔІHV݅ _m( bb!bSX[dyN>k-ѱrF6zy xF<q0`FP vT7XnI# CroԼ(5-VFdՁ=#gC:e&EXcұ 4k>ݢ?y87=;v vK6"RmMW٧|Kz{]T ދ/_祉6{rF⺞nYn2s &̘(Kl"SV݆V6Âѷ]2bHN:-ogO{{ߺyӐXԔu8 ;W~)B˝;s%I(x%^Qt95w z~H=DЀ8 O8Џ~N?%?@Ȋӊzbέab~;[==̦4m0Bn}ޝV^.9N(Y>353ۚy22|=%YQ8,J44DDY1#pxškw\T*_ <=S\x4 p;/,OL() 2l$=i D4@]yn_KMk~˭}k'u(L A 8-;n43&Y2*Hb/|㋩n`F66X]Z QJs4[wRQvwݵo^{3ȼ[XQ{=TrjPίQ%areTBbxi3BNέ}5gIP@iTBD3_YHt+EԒ}o,7a@V Suc,RQ"~Hቡфah{G+ rdE^Xk- NJ;}c~,+Zvu2XYX='\IDAT]rͬ0$HAp'-EY ;O>p#ɲ!6R DR@ 1kIje"]]2eVVUሬQD|hI1]F%L@:eB-ŬW砍9nː4dDH!>;'t! zʓ\{o]g g`6}  G]É2FD /VXV?_>3,7Mp5T5_,T6kN`G<493Qڥ6OSOTF]fٛZ P䞖UmED<Cl{*/O~pc @2C)3,9'b}wz' '@EWߊ~({\Zē^RU wiEv`悏z̚($Vl(&Q2OT2h{R@)fohR3tTS"w  ǎQqmoc2g7 N S6 Q(Ô4.l(Lq(v*ݥ,2 1,Fp!j&!ҰvNC Ya0=e{xP?fXS\`s0U~IRD!9'؁Rwy6ekŕ'kW]͊ ͍7#|x}8c52FX 2l@/=ևDJ,le%/fnOgS%M SJ =DLsϱ`SMh-γ$-lF_ V_./i.`Xϋ8OJ^Vڙ! ϰIoq%>DuEĺ3Al϶*|}ҹNQKO7xs "8q B:8>_p< 2$Aշq$ !Š\nRZK;ߡIwҦH!-)ĕ VcnQ+_xiiއ [@{v+ FWhqItjYGL]2𫞁ǰZ"Crjĕ]ҥc?髼32?]j=!<“Op6:_J|Q՝P*\@{H[g[Wjߤ˝B !AʖR"WK10Wssrۋ FXǬWݠV}+2$$9ӣJNE,+I>BTSSz+ݬH}|ec֝2\7D@`b@D9iF1c//nec Fۀ2 ?u,RyR&?5J~8~0'D䃞Zj7Q)m/m-ҺTL0 Хp\x)ԔYk}AFu83>"Qh5{r 6$㪙gWq+ޫш`@+׵:vϚr}iҥE*l>\f@D1Қ85 "s h/=I=ODck{[,lIK~,Y%lgT-1 Y]%s| ?_ IT5+OsxObJ5vl|^gRozFj%Y6X d?kgMZZ(Aך3)B'딘Ląj6+DN7%T> D1:0V^y$H("Rb{ d~/HM:a7w)rbd㵌"r!?vRHǣ^봩Z}=6w `{ 6aRY@Vѐj9\}3[d/&ou]Qhj_挌?aDf nӰ#Dfd ,jcПM߄yػߙ=J0o/:RfǀaRKRBT-Dޒ 8Oɓ;{w[ݚ p]WE~p<_|6z=eiNo7m=mlknտ?&5w_9>~<+h'ܦ0퀽,8:t?IS7f``4Q 2{P|M^_lе{F,bWԔG\N9Si>nqCKcpE(1 a('@1k)Hg$0ɏ&On9~'Z_b)2fwhoO~xՆ0&.?|٫:0uB hʲ K.5ķ? beCx\=c0s2ڭ!`TktA@mvT\o/_wn\$Ii"%Hf ׮]c #B@H0׋zltv{A뵺J<434ugz1]H7}jjYI wD*`ѳWo j·BPfKKĀp9d/i6DNՒMRtԭ}d(9X#9LYAnm cXhX}7%У? 2L=%Tn\ URb~*Er>>g ٟJeRRiRZ AN 0Nu+pJbr6ar{BV*|V_^~M! CPc*T?` Xż\WփޕP9u=uP?pP3C0hm0k^3g&dbiYy\f_~|O03!jM:*Q(A!j<BA5ynυl-' I@A؄-YT/}'KTr6ɟ=yqZNLWnbeixgrQv2Z^'bQLM|uƪiG@1]R{qeўp=z8 `+`S1" 7ZӡDÆb:T+#"}2,W\P@YËo6*$"$bhTvQsAFemgO+*ʙX;jFUŎ}߾e-0p(?8:fO"ރyF劧Gt/t;BgFOlGI ofBXOmKq-zcu{L]RcthK #Օ cHM2 =}8Y6w'G/>ཷbdf& B3I4VK~I@t18[uj>x+{/ivUxȂ2ʮ/-33*t Rä00@׈j(7t`v""t( X.c쉇u<Vpi† M2P j:`D0dI?)oJLYV׿zן~=؉MrВD)@$x? m۫q%% f'8n}f֜_{,,B3nϦe7!a]l^޺ A.Ʈ* 4Ʒ JIXCdIpWTsĕj`6 #v Kz3}@O???{R OL +_rf#UT]bv$krYDA\t>+NӧyNCikt9ݺV^i@3ۍ 8F.51~aH]2V#jh4_p+2] M7)4lo3K<>pnF)7zo;yqٯ?~^e)mO kj& *fRs|0>>|˥.r~-4TkʉJ6Lui+uN\Q$B p'8/R-X/ߘ.hbZ!֪$V0ۜBDžWS Ec7n~f@~:[zFeٜ8_-[RPT- txt,MrNJݧ?>Z q{ס .:'g'iN0 vJ LE]&D|,jT]Uy"QEq8DskO_^X}B £:<`=- Pb\M\cNW$/ ~+Qd'k\ߙgْ"@{eX\LN){~36\TVX!?)2s.E ;. Q1+r|>ɏB?4TU![(Lr&`gϲt?_vj( /^e+AҌfVZ+~ɢ(x kewѿevIGVm_Y̡UO"_?OeIs?bqrrr95:Qe+ j`_*e6g͛[FcHK]4GONNܛr3}о*@!sJ [j}Q3M_L- ?~<_jI|Z~ô;I{_‚LNHg `q3ā~'q:faNtj8϶dI^a0_u k>\Q Jպ;J%klƓ M9gggQ^4leF? vnP R'7tt}sG{iuIܯPNż9d- [-6^XTA>'Jqkw>L54PQ]{Go`Ņѝg^7Bԯ<֣͎? pпsppa_hI xWa+l|` IĚWg篗U=mB,uC-DhؓV:td2P8х Cr IDAT]oY.GK:Ɋ@Z__X@I?NN"9a_b'u#/~3r @L4^VřEdt^ꠖ#Š/PNJSn#e Uد8;xӎ?}Xvr08?'ig"C 5ÚOz[!ݵmCJhf`$^dGv{@g(O㫡!>l.m^4./jkʀ$)cׄ7\ebLzV*9j;UI}uQR 7tmq=BͯH "_~iSә`e #o׍$$"ϫ2ɳ\mܔgDDZvmYכͦn%HFTdt|5}rRWt@b;Ճ~ea'6䨛 2k+AzI,}ͨ&S ~Sл3Zpm&VZT>ޮhz~y ?a;"y񁷜0]_H1xAMS!rHEq.+ jݷ(0~\4U/ ~~p*"o6=̔_&i kD#4[~\ViZP?+S Jn7@HqE Ca\߮]ў)k.j TlΩ#l.WοT bi> 3/VCܽa#L[ ލ"ճ^6e-$U+>#e( & T4{Y~55#u :bm̵g/ [򤨔O%B.gaq|Ej_:էQQ:ǴJ!T~DS`7:v_.XR6N 7LTE>`:pgpVXMh# PEr ,@@`{EiAD~00 n>X[Xd.W2\Rk>'g7V1z3s'dc#$Ey˄畢*=xdB:K 078DU q_J$_xNz@m[n}=:2LfВX+ '~?fMӋWgw_kH"inQS"/-AMGb>=I$D>52|+FGxԃyydHA"+߬8-1׫% 0U@$8}9.d)e)u_߾oI]Yt$.KB&ճR{wVO)0]F-#aq}2|%#"C{K C!u {ϓW'ZSG܀{LD*5@m}l]:[~=rAM?iTZJYÄGj둚ә}|H:UGڨzbp0F. ɱ2Vӄ:MӋh蠆$oRS =Yה-D2DtZ`un{j0BeU>-Z-]\yP?_-8*N:^I!d){?wRqO_NIj8 '?>uo 7IDAT][o#ْ'@ "(Ї-`) HmYݣmr ge -X!Ɂ.QC;hkli0"ϥ :cP&C^Zs44J0ZuGlv0ܠF,%X(3A/t.J3׻kC^|o4\&t1M~I,-.9:ЅdC_r٪[r9ۛ"fL 6~S1ĵ&$20p 37r֒W=~t4ڄ42Tdd,ЕaF_HTcz՟߼Oh&*ٕ\j()O19dY>b<%:?^puxۜ^Š~̆S9Iv. \ GYa@ r<{pb*`ٟ7 jBuR0R {mȎN ha 5"|Vюh:La yaK݊TVB\D4GiK/./m.cҍJ r޿<\EՈkRpͧB΃وj#}`8MXq"BA\v.+?_ފ+F3Q"]!n29gJtbyX~ÿHS /M0%MsR Ow7Gk%*D1 l1IX%MpAjܶw0?f 11UBej4LAci\K'ak)ŢoAƨ }t)?|<.WƮf΋ fxw8ؿ>ޡFVBmQh.jdԿ -^)Z@IBSRjRـQ%3UqIcA׻ݫt<~Z1Dڽڥ}*8͗s V l[_K-T@He "1 ԰M[PkȴG}IpFNHF.!,YYa Z} 䉪9Wh ,Xq5'"N^7 k w9jT5>>3/K~ⲗleF'CJsN^6I sDzUr A9{ޕ(̲fs^zݕ}@DS 0(l?g{ p ёK%tAf T{-;(\⒭u%r}6 VBiеXUnTE`q ~]8l#0e J407#eq.*(p]=e17E氮zYV۬|nUE# )&8AN zC8Ɗ +uU$ IW֊,>ɍz !$8;֤ Xď-Cx2QYԇ5\™f1g:w"$`3\T`꞊>[sl]hqIF?Eh%sfGW bt*$x) W%ڕ)%:F 2*3W`Wt^lžU=;-~Uo(S%"']"ʱ 5r҄ͬqQ91*U$?ЊQXQ'C ^J+$&7Ix!y¢;zVmbt&9aޭ)&IENDB`openturns-1.9/python/doc/themes/openturns/static/openturns.css_t000066400000000000000000000207551307543307100254250ustar00rootroot00000000000000/* * openturns.css * ~~~~~~~~~~~~~ * * OpenTURNS sphinx-doc stylesheet -- openturns theme. * * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * * Theme colors: * Dark green: #256C24 * Light green: #33842D * Dark red: #7B0C16 * Light red: #E20B18 * Dark gold: #A2881D * Light gold: #E1C13F */ @import url("basic.css"); /* -- main layout ---------------------------------------------------------- */ body { font-family: 'Open Sans', sans-serif; font-size: 14px; letter-spacing: -0.01em; line-height: 125%; text-align: center; background-image: url(body-bg.png); color: black; padding: 0; border: 1px solid #aaa; margin: 0px auto; min-width: 740px; max-width: 1080px; } div.document { background-color: white; text-align: left; background-image: url(contents.png); background-repeat: repeat-x; } div.figure { text-align: center; } div.bodywrapper { margin: 0 {{ theme_sidebarwidth|toint + 10 }}px 0 0; border-right: 1px solid #aaa; } div.body { margin: 0; padding: 0.5em 20px 20px 20px; } /* -- header --------------------------------------------------------------- */ div.pageheader { text-align: left; background-image: url(header-bg.png); padding: 10px 10px 5px 5px; } div.pageheader h1 { font: 'Open Sans', sans-serif; font-weight: 700; font-size: 64px; color: white; margin-bottom: 0px; margin-top: 0px; padding-bottom: 0px; padding-top: 0px; text-shadow: black 0.1em 0.1em 0.2em; } div.pageheader h2 { font: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: white; margin-bottom: 0px; margin-top: 0px; text-shadow: black 0.1em 0.1em 0.2em; } div.pageheader img { vertical-align: middle; } div.pageheader ul { float: right; color: white; list-style-type: none; padding-left: 0; margin-top: 30px; margin-right: 10px; } div.pageheader li { float: left; margin: 0 0 0 10px; } div.pageheader li a { border-radius: 2px; padding: 8px 12px; color: #f9f9f0; } div.pageheader li a:hover { background-color: #f9f9f0; color: #7B0C16; } /* -- relbar --------------------------------------------------------------- */ div.related { font-size: 1em; } div.related ul { background-image: url(relbar-bg.png); height: 2em; } div.related ul li { margin: 0; padding: 0; height: 2em; float: left; } div.related ul li.right { float: right; margin-right: 5px; } div.related ul li a { margin: 0; padding: 0 5px 0 5px; line-height: 1.75em; color: white; } div.related ul li a:hover { text-decoration: underline; } /* -- sidebar -------------------------------------------------------------- */ div.sphinxsidebarwrapper { position: relative; top: 0px; padding: 0; } div.sphinxsidebar { margin: 0; padding: 0 15px 15px 15px; border-left: 1px solid #aaa; width: 210px; float: right; font-size: 1em; text-align: left; } div.sphinxsidebar .logo { font-size: 1.8em; color: #aaa; font-weight: 300; text-align: center; } div.sphinxsidebar .logo img { vertical-align: middle; } div.sphinxsidebar input { border: 1px solid #aaa; font-family: 'Open Sans', sans-serif; font-size: 1em; } div.sphinxsidebar h3 { font-size: 1.5em; border-top: 1px solid #aaa; margin-top: 1em; margin-bottom: 0.5em; padding-top: 0.5em; } div.sphinxsidebar h4 { font-size: 1.2em; margin-bottom: 0; } div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-right: -15px; margin-left: -15px; padding-right: 14px; padding-left: 14px; color: #333; font-weight: 300; color: #7B0C16; } div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.5em; border: none; } div.sphinxsidebar h3 a { color: #7B0C16; } div.sphinxsidebar ul { color: #444; margin-top: 7px; padding: 0; line-height: 130%; } div.sphinxsidebar ul ul { margin-left: 20px; list-style-image: url(listitem.png); } /* -- footer --------------------------------------------------------------- */ div.footer { font-size: .8em; background-image: url(footer-bg.png); height: 2em; color: white; line-height: 1.75em; margin: 0; padding: 0 5px 0 5px; } div.footer a { color: white; } div.footer a:hover { text-decoration: underline; } /* -- general body styles --------------------------------------------------- */ p { margin: 0.8em 0 0.5em 0; } a { color: #256C24; text-decoration: none; } a:hover { color: #33842D; text-decoration: none; } div.body a { text-decoration: none; font-weight: bold; } h1 { margin: 0; padding: 0.7em 0 0.3em 0; font-size: 1.5em; color: #11557C; font-size: 2.4em; font-weight: 300; color: #7B0C16; } h2 { margin: 1.3em 0 0.2em 0; padding: 0; font-size: 1.4em; font-weight: 400; color: #7B0C16; } h3 { margin: 1em 0 0.2em 0; font-size: 1.3em; font-weight: 400; color: #7B0C16; } h4 { margin: 1em 0 0.2em 0; font-size: 1.2em; font-weight: 300; color: #7B0C16; } div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { color: black!important; } h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { display: none; margin: 0 0 0 0.3em; padding: 0 0.2em 0 0.2em; color: #7B0C16!important; } h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor { display: inline; color: #7B0C16; } h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, h5 a.anchor:hover, h6 a.anchor:hover { color: #33842D; } a.headerlink { color: #7B0C16; font-size: 1em; margin-left: 6px; padding: 0 4px 0 4px; text-decoration: none!important; } a.headerlink:hover { color: #33842D!important; } cite, code, tt { font-family: 'Consolas', monospace; font-size: 0.95em; font-style: normal; letter-spacing: 0.01em; } tt { background-color: #f2f2f2; border-bottom: 1px solid #ddd; color: #333; } tt.descname, tt.descclassname, tt.xref { border: 0; } hr { border: 1px solid #abc; margin: 2em; } a tt { border: 0; color: #256C24; text-decoration: none; } a tt:hover { color: #33842D; text-decoration: none; } pre { font-family: 'Consolas', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 120%; padding: 0.5em; border: 1px solid #ccc; background-color: #f8f8f8; } pre a { color: inherit; text-decoration: underline; } td.linenos pre { padding: 0.5em 0; } div.quotebar { background-color: #f8f8f8; max-width: 250px; float: right; padding: 2px 7px; border: 1px solid #ccc; } div.topic { background-color: #f8f8f8; } table { border-collapse: collapse; margin: 0 -0.5em 0 -0.5em; } table td, table th { padding: 0.2em 0.5em 0.2em 0.5em; } table.citation { border-left: none; margin-top: 0.8em; } table.citation td { border-bottom: none; } table.citation td.label { font-weight: bold; color: #256C24; width: 150px; border-right: solid 1px gray; } div.admonition { font-size: 0.9em; margin: 1em 0 1em 0; background-color: #ECD98A; padding: 0; } div.warning { font-size: 0.9em; margin: 1em 0 1em 0; background-color: #F0C5C5; padding: 0; } div.admonition p, div.warning p { margin: 0em 1em 0.5em 1em; padding: 0 0 0.5em 0; font-style: italic; } div.admonition pre, div.warning pre { margin: 0em 1em 0.4em 1em; } div.admonition p.admonition-title, div.warning p.admonition-title { margin: 0; padding: 0.5em 0.1em 0.1em 0.5em; font-style: normal; font-weight: bold; color: #A2881D; background-color: #ECD98A; } div.warning p.admonition-title { background-color: #F0C5C5; color: #7B0C16; } div.admonition ul, div.admonition ol, div.warning ul, div.warning ol { margin: 0.1em 0.5em 0.5em 3em; padding: 0; } div.versioninfo { margin: 1em 0 0 0; border: 1px solid #ccc; background-color: #DDEAF0; padding: 8px; line-height: 1.3em; font-size: 0.9em; } .viewcode-back { font-family: 'Open Sans', sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } dt { font-weight: bold; } openturns-1.9/python/doc/themes/openturns/static/relbar-bg.png000066400000000000000000000003401307543307100246620ustar00rootroot00000000000000PNG  IHDR 2ϽsRGBbKGD pHYs  tIME?:`IDATӍα 0CC)؋!LEP@Owֺ->sAIs2Q3ja j!lc/u7/9q^66KIENDB`openturns-1.9/python/doc/themes/openturns/theme.conf000066400000000000000000000001751307543307100230070ustar00rootroot00000000000000[theme] inherit = basic stylesheet = openturns.css pygments_style = friendly [options] nosidebar = false sidebarwidth = 230 openturns-1.9/python/doc/theory/000077500000000000000000000000001307543307100170235ustar00rootroot00000000000000openturns-1.9/python/doc/theory/optimal_lhs.rst000066400000000000000000000155601307543307100220770ustar00rootroot00000000000000Optimal LHS design ^^^^^^^^^^^^^^^^^^ Let :math:`X=(x_1,\cdots, x_d)` be a random vector of input parameters. Latin Hypercube Sample (LHS) is a way to distribute N sample points: each parameter range is divided into N equal intervals, and sample points are chosen such that any hyperplane in that dimension contains one and only one sample point. The goal of this module is to improve standard LHS techniques by minimizing a space filling criterion. Principles ~~~~~~~~~~ We may notice two types of LHS designs: - Centered design is obtained by choosing for each point the center of the corresponding cell - Randomized LHS is obtained by adding random perturbations inside each cell Let us fix the following properties for the input vector X: - Its marginals are independent - Its associated probabilistic measure is .. math:: \mathcal{L}_{X}(x_1,...,x_d) = \mathcal{U}(a_1, b_1) \otimes \mathcal{U}(a_2, b_2)\otimes\cdots\otimes\mathcal{U}(a_d, b_d) with :math:`\mathcal{U}` the uniform distribution. In practice, we look for a design in the space :math:`[0,1]^d` and we use an inverse iso-probabilistic transformation to get the result in the original domain. Let :math:`\phi : [0,1]^d \rightarrow \mathbb{R}^{+}` be a a space filling criterion, which is a measure of *accuracy* of an optimal LHS design. Most of these criteria focus on discrepancy, which measures how far a given distribution of points deviates from a perfectly uniform one. Two space filling criteria are implemented: - The centered :math:`L^2`-discrepancy, called :math:`C_2` and given by: .. math:: C_2(X_{d}^N)^2 = \left(\frac{13}{12}\right)^{d} - \frac{2}{N} \sum_{i=1}^{N} \prod_{k=1}^{d} \left( 1 + \frac{1}{2} |x_k^{(i)} - 0.5| - \frac{1}{2} |x_k^{(i)} - 0.5|^2 \right)\\ + \frac{1}{N^2} \sum_{i,j=1}^{N} \prod_{k=1}^{d} \left( 1 + \frac{1}{2} |x_k^{(i)} - 0.5| + \frac{1}{2} |x_k^{(j)} - 0.5| - \frac{1}{2} |x_k^{(i)} - x_k^{(j)}| \right) This discrepancy is to be minimized to get an optimal design. - The mindist criterion (minimal distance between two points in the design): .. math:: \phi(X) = min_{} ||x^{(i)} - x^{(j)} ||_{L^2}, \forall i\neq j=1,\cdots N This criterion is to be maximized. - In practice, the :math:`\phi_p` criterion is used instead of mindist and writes: .. math:: \phi_p(X) = \left( \sum_{1\leq i < j \leq N} ||x^{(i)} - x^{(j)}||^{-p}_{L^2} \right)^{\frac{1}{p}} This is supposed to be more robust. When p tends to infinity, optimizing a design with :math:`\phi_p` is equivalent to optimizing a design with *mindist*. This criterion is to be minimized to get an optimal design. The objective is to generate an LHS design :math:`X_{d}^{N}` that minimizes a space filling criterion :math:`\phi` (or maximizes mindist). For that purpose, two techniques are implemented and presented hereafter. Monte Carlo ~~~~~~~~~~~ This problem can be approximated by a Monte Carlo algorithm: a fixed number of designs are generated, and the optimal one is kept. This algorithm is trivial and available in :class:`~otlhs.MonteCarloLHS`. One of the major drawbacks of Monte Carlo sampling is the CPU time consumption, because the number of generated designs must be high. Simulated Annealing ~~~~~~~~~~~~~~~~~~~ An alternate solution is to use an adapted simulated annealing method, available in :class:`~otlhs.SimulatedAnnealingLHS`, which we will now describe. Starting from an LHS design, a new design is obtained by permuting one random coordinate of two randomly chosen elements; by construction, this design is also an LHS design. If the new design is better than the previous one, it is kept. If it is worse, it may anyway be kept with some probability, which depends on how these designs compare, but also on a temperature profile T which decreases over time. This means that jumping away from local extrema becomes less probable over time. It is important to highlight here that this specific permutation has been chosen in this algorithm because it allows highly efficient computations of criterion during simulated annealing process. he naive criterion evaluation, as is done in Monte Carlo algorithm, has a complexity of :math:`\mathcal{O}(d\times N^2)` for :math:`C_2` and :math:`\phi_p` criteria. Let us first illustrate with the :math:`C_2` criterion. We set :math:`z_{ik}=x_{ik}-0.5`, equation rewrites: .. math:: C_2(X_{d}^N)^2 = \left(\frac{13}{12}\right)^{d} +\sum_{i=1}^{N}\sum_{j=1}^{N} c_{ij} with: .. math:: c_{ij}= \,\,\,\left \{ \begin{aligned} &\frac{1}{N^2}\prod_{k=1}^{d}\frac{1}{2}(2+|z_{ik}|+|z_{jk}|-|z_{ik}-z_{jk}|)\,\,\,\, \textrm{if}\,\, i\neq j \\ &\frac{1}{N^2}\prod_{k=1}^{d}(1+|z_{ik}|)-\frac{2}{N}\prod_{k=1}^{d}(1+\frac{1}{2}|z_{ik}|-\frac{1}{2}z_{ik}^2) \,\,\,\,\textrm{otherwise} \\ \end{aligned} \right. \label{prior_GN} We set :math:`c^{\prime}` the elements of a new design :math:`X^{\prime N}_{d}` obtained by permuting a coordinate of sample points :math:`i_1` and :math:`i_2`. We can see that .. math:: \left \{ \begin{aligned} & c^{\prime}_{ij}=c_{ij} \;\forall i, j \text{ such that } 1\leq i,j\leq N,\, i\notin \{i_1,i_2\},\, j\notin \{i_1,i_2\}\\ & c^{\prime}_{i_1i_2}=c_{i_1i_2}\\ & c_{ij}=c_{ji} \;\forall 1\leq i,j\leq N \end{aligned} \right. \label{cond_update} and thus, :math:`C_2(X')` becomes: .. math:: C_2(X^{\prime N}_{d})^2 = C_2(X^N_d)^2 + c^{\prime}_{i_1i_1} + c^{\prime}_{i_2i_2} + 2\sum_{\substack{1\leq j\leq N\\j\neq i_1,i_2}} (c^{\prime}_{i_1j}+c^{\prime}_{i_2j})\\ {} - c_{i_1i_1} - c_{i_2i_2} - 2\sum_{\substack{1\leq j\leq N\\j\neq i_1,i_2}} (c_{i_1j}+c_{i_2j}) Updating :math:`C_2` criterion can be performed by a :math:`\mathcal{O}(N)` algorithm, which has a much better complexity than a naive computation.\\ The same trick can also be applied on :math:`\phi_p` criterion, because we can write .. math:: \phi_p(X)^p = \sum_{1\leq i < j \leq N} ||x^{(i)} - x^{(j)}||^{-p}_{L^2} = \frac{1}{2} \sum_{i=1}^N \sum_{\substack{1\leq j\leq N\\j\neq i}} ||x^{(i)} - x^{(j)}||^{-p}_{L^2} = \sum_{i=1}^N \sum_{j=1}^N f_{ij} with .. math:: f_{ij}= \,\,\,\left \{ \begin{aligned} & \frac{||x^{(i)} - x^{(j)}||^{-p}_{L^2}}{2}, & i \neq j\\ & 0, & i=j \end{aligned} \right. These :math:`f_{ij}` coefficients satisfy the same conditions, so the same computations give: .. math:: \phi_p(X_{d}^{\prime N})^p = \phi_p(X_{d}^N)^p + 2\sum_{\substack{1\leq j\leq N\\j\neq i_1,i_2}} (f^{\prime}_{i_1j}+f^{\prime}_{i_2j}) - 2\sum_{\substack{1\leq j\leq N\\j\neq i_1,i_2}} (f_{i_1j}+f_{i_2j}) In practice, a marginal transformation is performed to map the initial multivariate distribution into :math:`[0,1]^d`. Optimization is performed in :math:`[0,1]^d` and the inverse transformation maps the design into the initial space. Bibliography ~~~~~~~~~~~~ - [Damblin2013]_ - [Fang2006]_ - [Jin2005]_ - [Koehler1996]_ - [Johnson1990]_ - [Morris1995]_ - [Pronzato2012]_ openturns-1.9/python/doc/theory/theory.rst000066400000000000000000000002771307543307100210750ustar00rootroot00000000000000.. _theory: =============== Reference guide =============== .. todo:: Convert the reference guide from LaTeX to RST (pandoc might help). .. toctree:: :maxdepth: 1 optimal_lhs openturns-1.9/python/doc/user_manual/000077500000000000000000000000001307543307100200245ustar00rootroot00000000000000openturns-1.9/python/doc/user_manual/base_objects.rst000066400000000000000000000036451307543307100232110ustar00rootroot00000000000000============ Base objects ============ .. currentmodule:: openturns Combinatorial structures ======================== .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t BipartiteGraph Domains ======= .. autosummary:: :toctree: _generated/ :template: class.rst_t Domain LevelSet :template: classWithPlot.rst_t LevelSetMesher :template: class.rst_t RegularGrid :template: class.rst_t Interval :template: classWithPlot.rst_t IntervalMesher .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t Mesh Matrices ======== .. autosummary:: :toctree: _generated/ :template: class.rst_t Matrix ComplexMatrix CorrelationMatrix CovarianceMatrix HermitianMatrix IdentityMatrix SquareMatrix SquareComplexMatrix SymmetricMatrix TriangularMatrix TriangularComplexMatrix HMatrixParameters HMatrixFactory HMatrix Tensors ======= .. autosummary:: :toctree: _generated/ :template: class.rst_t Tensor ComplexTensor SymmetricTensor Vectors ======= .. autosummary:: :toctree: _generated/ :template: class.rst_t BoolCollection Description Indices Point PointWithDescription ComplexCollection ScalarCollection Comparison operators ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t ComparisonOperator Equal Greater GreaterOrEqual Less LessOrEqual Serialization ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t Study StorageManager XMLStorageManager History strategy ================ .. autosummary:: :toctree: _generated/ :template: class.rst_t HistoryStrategy Compact Full Last Null K-d tree ======== .. autosummary:: :toctree: _generated/ :template: class.rst_t KDTree openturns-1.9/python/doc/user_manual/combinatorial_generators.rst000066400000000000000000000003711307543307100256330ustar00rootroot00000000000000======================== Combinatorial generators ======================== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t CombinatorialGenerator Combinations KPermutations Tuplesopenturns-1.9/python/doc/user_manual/configuration.rst000066400000000000000000000022651307543307100234320ustar00rootroot00000000000000============= Configuration ============= .. currentmodule:: openturns Environment variables ===================== OpenTURNS uses the following (optional) environment variables. OPENTURNS_CONFIG_PATH Path to the `openturns.conf` XML file used by the :class:`~openturns.ResourceMap`. OPENTURNS_HOME Path to the OpenTURNS installation directory. OPENTURNS_LOG_SEVERITY The default severity of logs, see the :class:`~openturns.Log` class. Environment checking and filesystem manipulation ================================================ .. autosummary:: :toctree: _generated/ :template: class.rst_t Path Information about the library ============================= .. autosummary:: :toctree: _generated/ :template: class.rst_t PlatformInfo Recording user information ========================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Log TTY Resource catalog ================ .. autosummary:: :toctree: _generated/ :template: class.rst_t ResourceMap Threading configuration ======================= .. autosummary:: :toctree: _generated/ :template: function.rst_t TBB_Enable TBB_Disable openturns-1.9/python/doc/user_manual/designs_of_experiments.rst000066400000000000000000000042751307543307100253310ustar00rootroot00000000000000====================== Designs of experiments ====================== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t Experiment Stratified designs of experiments ================================= .. autosummary:: :toctree: _generated/ :template: class.rst_t StratifiedExperiment .. autosummary:: :toctree: _generated/ :template: StratifiedExperiment.rst_t Axial Factorial Composite .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t Box Weighted experiments ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t WeightedExperiment Random weighted experiments --------------------------- .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t BootstrapExperiment LHSExperiment MonteCarloExperiment ImportanceSamplingExperiment Deterministic weighted experiments ---------------------------------- .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t FixedExperiment GaussProductExperiment LowDiscrepancyExperiment Low Discrepancy Sequences ========================= .. autosummary:: :toctree: _generated/ :template: class.rst_t LowDiscrepancySequence .. autosummary:: :toctree: _generated/ :template: LowDiscrepancySequence.rst_t FaureSequence HaltonSequence ReverseHaltonSequence HaselgroveSequence SobolSequence Optimal LHS generation ---------------------- .. autosummary:: :toctree: _generated/ :template: class.rst_t OptimalLHSExperiment MonteCarloLHS SimulatedAnnealingLHS LHSResult Space Filling ~~~~~~~~~~~~~ Used to define the optimization criterion in :class:`~openturns.OptimalLHSExperiment`. .. autosummary:: :toctree: _generated/ :template: class.rst_t SpaceFilling SpaceFillingC2 SpaceFillingMinDist SpaceFillingPhiP Temperature Profile ~~~~~~~~~~~~~~~~~~~ Used to control the optimization in :class:`~openturns.SimulatedAnnealingLHS`. .. autosummary:: :toctree: _generated/ :template: class.rst_t TemperatureProfile LinearProfile GeometricProfile openturns-1.9/python/doc/user_manual/functions.rst000066400000000000000000000124771307543307100226010ustar00rootroot00000000000000========= Functions ========= .. currentmodule:: openturns General mathematical functions ============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Function SymbolicFunction LinearFunction QuadraticFunction DatabaseFunction PythonFunction OpenTURNSPythonFunction Algebra of functions ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t AggregatedFunction ComposedFunction DualLinearCombinationFunction IndicatorFunction LinearCombinationFunction ParametricFunction ProductFunction Field functions =============== .. autosummary:: :toctree: _generated/ :template: class.rst_t FieldFunction PythonFieldFunction ValueFunction VertexValueFunction Collection of functions ======================= .. autosummary:: :toctree: _generated/ :template: class.rst_t Basis FunctionalBasis OrthogonalBasis BasisSequence Finite differentiation schemes ============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t CenteredFiniteDifferenceGradient CenteredFiniteDifferenceHessian FiniteDifferenceGradient FiniteDifferenceHessian NonCenteredFiniteDifferenceGradient FiniteDifferenceStep ConstantStep BlendedStep Evaluation functions ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t EvaluationImplementation AggregatedEvaluation SymbolicEvaluation ComposedEvaluation DatabaseEvaluation DualLinearCombinationEvaluation IndicatorEvaluation LinearCombinationEvaluation LinearEvaluation MarginalTransformationEvaluation NoEvaluation ParametricEvaluation PiecewiseHermiteEvaluation PiecewiseLinearEvaluation P1LagrangeEvaluation ProductEvaluation ProductPolynomialEvaluation QuadraticEvaluation Gradient functions ================== .. autosummary:: :toctree: _generated/ :template: class.rst_t GradientImplementation SymbolicGradient ComposedGradient ConstantGradient DualLinearCombinationGradient LinearCombinationGradient LinearGradient NoGradient ParametricGradient ProductGradient Hessian functions ================= .. autosummary:: :toctree: _generated/ :template: class.rst_t HessianImplementation SymbolicHessian ComposedHessian ConstantHessian DualLinearCombinationHessian LinearCombinationHessian NoHessian ParametricHessian ProductHessian Differential equation solvers ============================= .. autosummary:: :toctree: _generated/ :template: class.rst_t ODESolver RungeKutta Special constants & functions ============================= Numerical constants ------------------- .. FAILS: http://trac.openturns.org/ticket/724 .. autodata:: SpecFunc.EULERSQRT6_PI .. autodata:: SpecFunc.EulerConstant .. autodata:: SpecFunc.ISQRT2PI .. autodata:: SpecFunc.LogMaxScalar .. autodata:: SpecFunc.LogMinScalar .. autodata:: SpecFunc.LOGSQRT2PI .. autodata:: SpecFunc.MaxScalar .. autodata:: SpecFunc.MaximumIteration .. autodata:: SpecFunc.MinScalar .. autodata:: SpecFunc.ScalarEpsilon .. autodata:: SpecFunc.PI2_3 .. autodata:: SpecFunc.PI2_6 .. autodata:: SpecFunc.PI_SQRT3 .. autodata:: SpecFunc.PI_SQRT6 .. autodata:: SpecFunc.Precision .. autodata:: SpecFunc.SQRT2PI .. autodata:: SpecFunc.SQRT3_PI .. autodata:: SpecFunc.ZETA3 Special functions ----------------- Special functions are implemented as C++ static methods and are hence casted as Python functions. .. autosummary:: :toctree: _generated/ :template: function.rst_t SpecFunc_BesselI0 SpecFunc_BesselI1 SpecFunc_BesselK SpecFunc_Beta SpecFunc_BinomialCoefficient SpecFunc_BitCount SpecFunc_Cbrt SpecFunc_Dawson SpecFunc_Debye SpecFunc_DiGamma SpecFunc_DiGammaInv SpecFunc_DiLog SpecFunc_Ei SpecFunc_Erf SpecFunc_ErfC SpecFunc_ErfCX SpecFunc_ErfI SpecFunc_ErfInverse SpecFunc_Expm1 SpecFunc_Faddeeva SpecFunc_FaddeevaIm SpecFunc_Gamma SpecFunc_GammaCorrection SpecFunc_HyperGeom_1_1 SpecFunc_HyperGeom_2_1 SpecFunc_HyperGeom_2_2 SpecFunc_IGamma1pm1 SpecFunc_IncompleteBeta SpecFunc_IncompleteBetaInverse SpecFunc_IncompleteGamma SpecFunc_IncompleteGammaInverse SpecFunc_LambertW SpecFunc_LnBeta SpecFunc_LnGamma SpecFunc_Log1MExp SpecFunc_Log1p SpecFunc_Log2 SpecFunc_LogBesselI0 SpecFunc_LogBesselI1 SpecFunc_LogBesselK SpecFunc_LogBeta SpecFunc_LogGamma SpecFunc_LogGamma1p SpecFunc_NextPowerOfTwo SpecFunc_Psi SpecFunc_RegularizedIncompleteBeta SpecFunc_RegularizedIncompleteBetaInverse SpecFunc_RegularizedIncompleteGamma SpecFunc_RegularizedIncompleteGammaInverse SpecFunc_TriGamma External code coupling ====================== .. autosummary:: :toctree: _generated/ :template: function.rst_t coupling_tools.replace coupling_tools.execute coupling_tools.get_value coupling_tools.get_line_col coupling_tools.get_regex 1-D functions ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t UniVariateFunction openturns-1.9/python/doc/user_manual/graphs.rst000066400000000000000000000012561307543307100220460ustar00rootroot00000000000000====== Graphs ====== .. currentmodule:: openturns Graphical object ================ .. autosummary:: :toctree: _generated/ :template: class.rst_t Graph Drawable objects ================ .. autosummary:: :toctree: _generated/ :template: class.rst_t Drawable .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t BarPlot Cloud Contour Curve Staircase Pairs Pie Polygon PolygonArray Text Graphical visualisation object ============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t viewer.View :template: function.rst_t viewer.PlotDesign openturns-1.9/python/doc/user_manual/integration.rst000066400000000000000000000007321307543307100231030ustar00rootroot00000000000000=========== Integration =========== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t IntegrationAlgorithm .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t GaussKronrod GaussLegendre .. autosummary:: :toctree: _generated/ :template: class.rst_t GaussKronrodRule .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t IteratedQuadrature openturns-1.9/python/doc/user_manual/isoprobabilistic_transformation.rst000066400000000000000000000031151307543307100272450ustar00rootroot00000000000000=============================== Isoprobabilistic transformation =============================== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t DistributionTransformation Marginal transformation ======================= .. autosummary:: :toctree: _generated/ :template: class.rst_t MarginalTransformationEvaluation MarginalTransformationGradient MarginalTransformationHessian Nataf elliptical copula ======================= .. autosummary:: :toctree: _generated/ :template: class.rst_t InverseNatafEllipticalCopulaEvaluation InverseNatafEllipticalCopulaGradient InverseNatafEllipticalCopulaHessian NatafEllipticalCopulaEvaluation NatafEllipticalCopulaGradient NatafEllipticalCopulaHessian Nataf independant copula ======================== .. autosummary:: :toctree: _generated/ :template: class.rst_t InverseNatafIndependentCopulaEvaluation InverseNatafIndependentCopulaGradient InverseNatafIndependentCopulaHessian NatafIndependentCopulaEvaluation NatafIndependentCopulaGradient NatafIndependentCopulaHessian Nataf elliptical distribution ============================= .. autosummary:: :toctree: _generated/ :template: class.rst_t InverseNatafEllipticalDistributionEvaluation InverseNatafEllipticalDistributionGradient InverseNatafEllipticalDistributionHessian NatafEllipticalDistributionEvaluation NatafEllipticalDistributionGradient NatafEllipticalDistributionHessian InverseRosenblattEvaluation RosenblattEvaluation openturns-1.9/python/doc/user_manual/optimization.rst000066400000000000000000000012321307543307100233020ustar00rootroot00000000000000============ Optimization ============ .. currentmodule:: openturns Generic optimization classes ============================ .. autosummary:: :toctree: _generated/ :template: class.rst_t OptimizationProblem OptimizationAlgorithm OptimizationResult Optimization solvers ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t AbdoRackwitz Cobyla SQP TNC NLopt MultiStart EfficientGlobalOptimization Nearest point assessment ======================== .. autosummary:: :toctree: _generated/ :template: class.rst_t NearestPointChecker NearestPointCheckerResult openturns-1.9/python/doc/user_manual/orthogonal_basis.rst000066400000000000000000000045541307543307100241230ustar00rootroot00000000000000================ Orthogonal basis ================ .. currentmodule:: openturns Univariate polynomials ====================== .. autosummary:: :toctree: _generated/ :template: class.rst_t UniVariatePolynomial MonomialFunction Univariate polynomial families ============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t MonomialFunctionFactory Multivariate polynomial functions ================================= .. autosummary:: :toctree: _generated/ :template: class.rst_t TensorizedUniVariateFunctionFactory Orthonormalization algorithms ----------------------------- .. autosummary:: :toctree: _generated/ :template: class.rst_t OrthonormalizationAlgorithm AdaptiveStieltjesAlgorithm Orthogonal univariate polynomial families ----------------------------------------- .. autosummary:: :toctree: _generated/ :template: class.rst_t OrthogonalUniVariatePolynomial OrthogonalUniVariatePolynomialFamily StandardDistributionPolynomialFactory .. autosummary:: :toctree: _generated/ :template: OrthogonalUniVariateFunctionFamily.rst_t HermiteFactory HistogramPolynomialFactory JacobiFactory LaguerreFactory LegendreFactory CharlierFactory ChebychevFactory KrawtchoukFactory MeixnerFactory Orthogonal univariate function families --------------------------------------- .. autosummary:: :toctree: _generated/ :template: class.rst_t OrthogonalUniVariateFunctionFamily OrthogonalUniVariateFunctionFactory OrthogonalUniVariatePolynomialFunctionFactory :template: OrthogonalUniVariateFunctionFamily.rst_t FourierSeriesFactory HaarWaveletFactory Orthogonal multivariate functions ================================= .. autosummary:: :toctree: _generated/ :template: class.rst_t SoizeGhanemFactory Making orthogonal multivariate functions from orthogonal univariate functions ----------------------------------------------------------------------------- .. autosummary:: :toctree: _generated/ :template: class.rst_t OrthogonalProductPolynomialFactory OrthogonalProductFunctionFactory Truncation schemes ------------------ .. autosummary:: :toctree: _generated/ :template: class.rst_t EnumerateFunction LinearEnumerateFunction HyperbolicAnisotropicEnumerateFunction openturns-1.9/python/doc/user_manual/probabilistic_modelling.rst000066400000000000000000000100331307543307100254330ustar00rootroot00000000000000======================= Probabilistic modelling ======================= .. currentmodule:: openturns Parametric distributions ======================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Distribution DistributionCollection PythonDistribution SciPyDistribution .. autosummary:: :toctree: _generated/ :template: Distribution.rst_t Arcsine Bernoulli Beta Binomial Burr Chi ChiSquare Dirac Dirichlet Epanechnikov Exponential FisherSnedecor Frechet Gamma GeneralizedExtremeValue GeneralizedPareto Geometric Gumbel Histogram InverseChiSquare InverseGamma InverseNormal InverseWishart KPermutationsDistribution Laplace Logistic LogNormal LogUniform MeixnerDistribution Multinomial NegativeBinomial NonCentralChiSquare NonCentralStudent Normal NormalGamma Poisson Rayleigh Rice Skellam Student Trapezoidal Triangular TruncatedNormal Uniform UserDefined VonMises Weibull Wishart ZipfMandelbrot Parametrized distributions ========================== .. autosummary:: :toctree: _generated/ :template: class.rst_t ParametrizedDistribution DistributionParameters ArcsineMuSigma BetaMuSigma GammaMuSigma GumbelMuSigma GumbelAB LogNormalMuSigma LogNormalMuSigmaOverMu WeibullMuSigma Pseudo-random numbers generator =============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t RandomGenerator RandomGeneratorState Combining and transforming distributions ======================================== .. autosummary:: :toctree: _generated/ :template: Distribution.rst_t BayesDistribution ComposedDistribution :template: classWithPlot.rst_t CompositeDistribution :template: Distribution.rst_t ConditionalDistribution CumulativeDistributionNetwork MaximumDistribution :template: classWithPlot.rst_t MaximumEntropyOrderStatisticsDistribution .. autosummary:: :toctree: _generated/ :template: class.rst_t OrderStatisticsMarginalChecker PosteriorDistribution .. autosummary:: :toctree: _generated/ :template: Distribution.rst_t ProductDistribution .. autosummary:: :toctree: _generated/ :template: class.rst_t RandomMixture .. autosummary:: :toctree: _generated/ :template: Distribution.rst_t TruncatedDistribution KernelMixture :template: classWithPlot.rst_t Mixture Copulas ======= .. autosummary:: :toctree: _generated/ :template: class.rst_t Copula ArchimedeanCopula .. autosummary:: :toctree: _generated/ :template: Copula.rst_t AliMikhailHaqCopula ClaytonCopula FarlieGumbelMorgensternCopula FrankCopula GumbelCopula IndependentCopula :template: classWithPlot.rst_t MaximumEntropyOrderStatisticsCopula :template: class.rst_t MinCopula NormalCopula Combining and transforming copulas ================================== .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t ComposedCopula :template: Copula.rst_t SklarCopula :template: classWithPlot.rst_t OrdinalSumCopula Random vectors ============== .. autosummary:: :toctree: _generated/ :template: class.rst_t RandomVector PythonRandomVector CompositeRandomVector :template: classWithPlot.rst_t ConditionalRandomVector :template: class.rst_t ConstantRandomVector PosteriorRandomVector UsualRandomVector Samplers ======== .. autosummary:: :toctree: _generated/ :template: class.rst_t Sampler MCMC RandomWalkMetropolisHastings CalibrationStrategy Low-level distribution functions ================================ .. autosummary:: :toctree: _generated/ :template: function.rst_t DistFunc_pNormal DistFunc_qNormal DistFunc_rNormal DistFunc_kFactor DistFunc_kFactorPooled openturns-1.9/python/doc/user_manual/response_surface/000077500000000000000000000000001307543307100233725ustar00rootroot00000000000000openturns-1.9/python/doc/user_manual/response_surface/functional_chaos_expansion.rst000066400000000000000000000032061307543307100315300ustar00rootroot00000000000000============================================ Response surface: Functional chaos expansion ============================================ .. currentmodule:: openturns Functional chaos algorithm ========================== .. autosummary:: :toctree: _generated/ :template: class.rst_t FunctionalChaosAlgorithm Construction of the truncated multivariate orthogonal basis =========================================================== .. autosummary:: :toctree: _generated/ :template: class.rst_t AdaptiveStrategy CleaningStrategy FixedStrategy SequentialStrategy Computation of the polynomial chaos coefficients ================================================ .. autosummary:: :toctree: _generated/ :template: class.rst_t ProjectionStrategy IntegrationStrategy LeastSquaresStrategy ApproximationAlgorithm PenalizedLeastSquaresAlgorithmFactory PenalizedLeastSquaresAlgorithm LeastSquaresMetaModelSelectionFactory LeastSquaresMetaModelSelection BasisSequenceFactory LARS FittingAlgorithm CorrectedLeaveOneOut KFold DesignProxy Least Squares problem resolution ================================ .. autosummary:: :toctree: _generated/ :template: class.rst_t LeastSquaresMethod CholeskyMethod SVDMethod QRMethod SparseMethod Functional chaos result ======================= .. autosummary:: :toctree: _generated/ :template: class.rst_t FunctionalChaosResult Functional chaos random vector ============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t FunctionalChaosRandomVector openturns-1.9/python/doc/user_manual/response_surface/glm.rst000066400000000000000000000005031307543307100247010ustar00rootroot00000000000000========================================== Response surface: Generalized Linear Model ========================================== .. currentmodule:: openturns GLM algorithm ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t GeneralLinearModelAlgorithm GeneralLinearModelResult openturns-1.9/python/doc/user_manual/response_surface/kriging.rst000066400000000000000000000011741307543307100255610ustar00rootroot00000000000000========================= Response surface: Kriging ========================= .. currentmodule:: openturns Kriging algorithm ================= .. autosummary:: :toctree: _generated/ :template: class.rst_t KrigingAlgorithm KrigingResult Construction of the regression basis ==================================== .. autosummary:: :toctree: _generated/ :template: class.rst_t BasisFactory ConstantBasisFactory LinearBasisFactory QuadraticBasisFactory Kriging random vector ===================== .. autosummary:: :toctree: _generated/ :template: class.rst_t KrigingRandomVector openturns-1.9/python/doc/user_manual/response_surface/low_rank_approximation.rst000066400000000000000000000005321307543307100307120ustar00rootroot00000000000000======================================== Response surface: low-rank approximation ======================================== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t CanonicalTensorEvaluation CanonicalTensorGradient TensorApproximationAlgorithm TensorApproximationResult openturns-1.9/python/doc/user_manual/response_surface/parametric_approximation.rst000066400000000000000000000007511307543307100312300ustar00rootroot00000000000000========================================== Response surface: Parametric approximation ========================================== .. currentmodule:: openturns Taylor approximation ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t LinearTaylor QuadraticTaylor Least squares approximation =========================== .. autosummary:: :toctree: _generated/ :template: class.rst_t LinearLeastSquares QuadraticLeastSquares openturns-1.9/python/doc/user_manual/response_surface/response_surface.rst000066400000000000000000000010251307543307100274700ustar00rootroot00000000000000================ Response surface ================ .. currentmodule:: openturns Parametric ========== .. toctree:: parametric_approximation Non-parametric ============== .. autosummary:: :toctree: _generated/ :template: class.rst_t MetaModelAlgorithm MetaModelResult MetaModelValidation Classifier :template: classWithPlot.rst_t MixtureClassifier :template: class.rst_t ExpertMixture .. toctree:: functional_chaos_expansion glm kriging low_rank_approximation openturns-1.9/python/doc/user_manual/statistics_on_sample.rst000066400000000000000000000110441307543307100250050ustar00rootroot00000000000000==================== Statistics on sample ==================== .. currentmodule:: openturns Sample ====== .. autosummary:: :toctree: _generated/ :template: class.rst_t Sample Building distributions from samples =================================== .. autosummary:: :toctree: _generated/ :template: class.rst_t DistributionFactory DistributionFactoryResult :template: DistributionFactory.rst_t ArcsineFactory BernoulliFactory BetaFactory BinomialFactory BurrFactory ChiFactory ChiSquareFactory DiracFactory DirichletFactory ExponentialFactory FisherSnedecorFactory GammaFactory GeneralizedParetoFactory GeometricFactory GumbelFactory HistogramFactory InverseNormalFactory :template: class.rst_t KernelSmoothing :template: DistributionFactory.rst_t LaplaceFactory LogisticFactory LogNormalFactory LogUniformFactory :template: class.rst_t MaximumLikelihoodFactory :template: DistributionFactory.rst_t MeixnerDistributionFactory :template: class.rst_t MethodOfMomentsFactory :template: DistributionFactory.rst_t MultinomialFactory NegativeBinomialFactory NormalFactory PoissonFactory RayleighFactory :template: class.rst_t RiceFactory :template: DistributionFactory.rst_t SkellamFactory StudentFactory TrapezoidalFactory TriangularFactory TruncatedNormalFactory UniformFactory UserDefinedFactory WeibullFactory Building copulas from samples ============================= .. autosummary:: :toctree: _generated/ :template: class.rst_t AliMikhailHaqCopulaFactory BernsteinCopulaFactory :template: DistributionFactory.rst_t ClaytonCopulaFactory :template: class.rst_t FarlieGumbelMorgensternCopulaFactory :template: DistributionFactory.rst_t FrankCopulaFactory GumbelCopulaFactory NormalCopulaFactory Correlation analysis ==================== .. autosummary:: :toctree: _generated/ :template: function.rst_t CorrelationAnalysis_PearsonCorrelation CorrelationAnalysis_SpearmanCorrelation CorrelationAnalysis_PCC CorrelationAnalysis_PRCC CorrelationAnalysis_SRC CorrelationAnalysis_SRRC Sensitivity Analysis ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t ANCOVA FAST SobolIndicesAlgorithm MartinezSensitivityAlgorithm SaltelliSensitivityAlgorithm JansenSensitivityAlgorithm MauntzKucherenkoSensitivityAlgorithm Statistical tests ================= .. autosummary:: :toctree: _generated/ :template: class.rst_t TestResult Goodness-of-fit metrics & tests ------------------------------- .. autosummary:: :toctree: _generated/ :template: function.rst_t FittingTest_BIC FittingTest_ChiSquared FittingTest_Kolmogorov FittingTest_TwoSamplesKolmogorov NormalityTest_AndersonDarlingNormal NormalityTest_CramerVonMisesNormal Graphical tests --------------- .. autosummary:: :toctree: _generated/ :template: functionWithPlot.rst_t VisualTest_DrawClouds VisualTest_DrawCobWeb VisualTest_DrawEmpiricalCDF VisualTest_DrawHenryLine VisualTest_DrawHistogram VisualTest_DrawKendallPlot VisualTest_DrawLinearModel VisualTest_DrawLinearModelResidual VisualTest_DrawQQplot Hypothesis tests ---------------- .. autosummary:: :toctree: _generated/ :template: function.rst_t HypothesisTest_Smirnov HypothesisTest_ChiSquared HypothesisTest_FullPearson HypothesisTest_FullRegression HypothesisTest_FullSpearman HypothesisTest_PartialPearson HypothesisTest_PartialRegression HypothesisTest_PartialSpearman HypothesisTest_Pearson HypothesisTest_Spearman Linear model tests ------------------ .. autosummary:: :toctree: _generated/ :template: function.rst_t LinearModelTest_LinearModelAdjustedRSquared LinearModelTest_LinearModelFisher LinearModelTest_LinearModelRSquared LinearModelTest_LinearModelResidualMean LinearModelTest_LinearModelHarrisonMcCabe LinearModelTest_LinearModelBreuschPagan LinearModelTest_LinearModelDurbinWatson Model selection --------------- .. autosummary:: :toctree: _generated/ :template: function.rst_t FittingTest_BestModelBIC FittingTest_BestModelChiSquared FittingTest_BestModelKolmogorov Linear models ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t LinearModel LinearModelFactory openturns-1.9/python/doc/user_manual/stochastic_process.rst000066400000000000000000000065471307543307100244740ustar00rootroot00000000000000================== Stochastic process ================== .. currentmodule:: openturns General objects =============== .. autosummary:: :toctree: _generated/ :template: class.rst_t Process :template: classWithPlot.rst_t Field TimeSeries ProcessSample Temporal information ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t CovarianceModel CovarianceModelFactory :template: CovarianceModel.rst_t AbsoluteExponential DiracCovarianceModel ExponentialModel ExponentiallyDampedCosineModel GeneralizedExponential MaternModel ProductCovarianceModel RankMCovarianceModel SphericalModel SquaredExponential TensorizedCovarianceModel :template: classWithPlot.rst_t UserDefinedCovarianceModel :template: class.rst_t StationaryCovarianceModel :template: classWithPlot.rst_t UserDefinedStationaryCovarianceModel NonStationaryCovarianceModelFactory StationaryCovarianceModelFactory Spectral information ==================== .. autosummary:: :toctree: _generated/ :template: class.rst_t SpectralModel :template: SpectralModel.rst_t CauchyModel :template: classWithPlot.rst_t UserDefinedSpectralModel SpectralModelFactory WelchFactory :template: class.rst_t FilteringWindows :template: FilteringWindow.rst_t Hanning Hamming Link Temporal - Spectral information ==================================== .. autosummary:: :toctree: _generated/ :template: class.rst_t SecondOrderModel ExponentialCauchy Normal process ============== .. autosummary:: :toctree: _generated/ :template: Process.rst_t SpectralGaussianProcess GaussianProcess :template: class.rst_t ConditionedNormalProcess Functional basis process ======================== .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t FunctionalBasisProcess Composite process ================= .. autosummary:: :toctree: _generated/ :template: classWithPlot.rst_t CompositeProcess Aggregated process ================== .. autosummary:: :toctree: _generated/ :template: Process.rst_t AggregatedProcess ARMA ==== .. autosummary:: :toctree: _generated/ :template: Process.rst_t ARMA :template: class.rst_t ARMACoefficients ARMAState ARMA factory ============ .. autosummary:: :toctree: _generated/ :template: class.rst_t ARMAFactory WhittleFactoryState WhittleFactory ARMALikelihoodFactory BoxCoxEvaluation InverseBoxCoxEvaluation TrendEvaluation InverseTrendEvaluation RandomWalk ========== .. autosummary:: :toctree: _generated/ :template: Process.rst_t RandomWalk WhiteNoise ========== .. autosummary:: :toctree: _generated/ :template: Process.rst_t WhiteNoise Check hypothesis on time series =============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t DickeyFullerTest Karhunen Loeve decomposition ============================ .. autosummary:: :toctree: _generated/ :template: class.rst_t KarhunenLoeveAlgorithm :template: classWithPlot.rst_t KarhunenLoeveP1Algorithm KarhunenLoeveQuadratureAlgorithm KarhunenLoeveSVDAlgorithm :template: class.rst_t KarhunenLoeveResult openturns-1.9/python/doc/user_manual/taylor_decomposition.rst000066400000000000000000000005111307543307100250210ustar00rootroot00000000000000================================================ Taylor decomposition of the limit state function ================================================ .. currentmodule:: openturns Quadratic cumul algorithm ========================= .. autosummary:: :toctree: _generated/ :template: class.rst_t TaylorExpansionMoments openturns-1.9/python/doc/user_manual/threshold_probability_reliability_algorithms.rst000066400000000000000000000013671307543307100320030ustar00rootroot00000000000000============================================= Threshold probability: Reliability algorithms ============================================= .. currentmodule:: openturns Reliability algorithms ====================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Analytical FORM SORM Reliability results =================== .. autosummary:: :toctree: _generated/ :template: class.rst_t AnalyticalResult FORMResult SORMResult Event ===== .. autosummary:: :toctree: _generated/ :template: class.rst_t Event StandardEvent EventProcess Design point validation ======================= .. autosummary:: :toctree: _generated/ :template: class.rst_t StrongMaximumTestopenturns-1.9/python/doc/user_manual/threshold_probability_simulation_algorithms.rst000066400000000000000000000030231307543307100316450ustar00rootroot00000000000000============================================ Threshold probability: Simulation algorithms ============================================ .. currentmodule:: openturns Simulations methods =================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Simulation DirectionalSampling ImportanceSampling LHS MonteCarlo PostAnalyticalSimulation PostAnalyticalControlledImportanceSampling PostAnalyticalImportanceSampling QuasiMonteCarlo RandomizedLHS RandomizedQuasiMonteCarlo SubsetSampling AdaptiveDirectionalSampling Wilks' method ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t Wilks Simulation sensitivity analysis =============================== .. autosummary:: :toctree: _generated/ :template: class.rst_t SimulationSensitivityAnalysis Root Strategy ============= .. autosummary:: :toctree: _generated/ :template: class.rst_t RootStrategy RiskyAndFast MediumSafe SafeAndSlow Sampling Strategy ================= .. autosummary:: :toctree: _generated/ :template: class.rst_t SamplingStrategy RandomDirection OrthogonalDirection Non linear solvers ================== .. autosummary:: :toctree: _generated/ :template: class.rst_t Solver Bisection Brent Secant Simulation result ================= .. autosummary:: :toctree: _generated/ :template: class.rst_t SimulationResult QuasiMonteCarloResult SubsetSamplingResult openturns-1.9/python/doc/user_manual/transformations.rst000066400000000000000000000005571307543307100240160ustar00rootroot00000000000000=============== Transformations =============== .. currentmodule:: openturns .. autosummary:: :toctree: _generated/ :template: class.rst_t FFT KissFFT :template: classWithPlot.rst_t BoxCoxFactory BoxCoxTransform InverseBoxCoxTransform TrendFactory :template: class.rst_t TrendTransform InverseTrendTransform openturns-1.9/python/doc/user_manual/user_manual.rst000066400000000000000000000015501307543307100230720ustar00rootroot00000000000000.. _user_manual: ==================================== User manual for the Python interface ==================================== This is the user manual for the Python bindings to the OpenTURNS library. .. todo:: Fill the docstrings in the :ref:`SWIG docstrings header files ` and refer to the documented objects here in order to complete the user manual. .. toctree:: base_objects combinatorial_generators designs_of_experiments functions graphs integration isoprobabilistic_transformation optimization orthogonal_basis probabilistic_modelling response_surface/response_surface statistics_on_sample stochastic_process taylor_decomposition threshold_probability_reliability_algorithms threshold_probability_simulation_algorithms transformations configuration openturns-1.9/python/src/000077500000000000000000000000001307543307100155335ustar00rootroot00000000000000openturns-1.9/python/src/ANCOVA.i000066400000000000000000000003251307543307100166540ustar00rootroot00000000000000// SWIG file ANCOVA.i %{ #include "openturns/ANCOVA.hxx" %} %include ANCOVA_doc.i %include openturns/ANCOVA.hxx namespace OT{ %extend ANCOVA { ANCOVA(const ANCOVA & other) { return new OT::ANCOVA(other); } } } openturns-1.9/python/src/ANCOVA_doc.i.in000066400000000000000000000145501307543307100201130ustar00rootroot00000000000000%feature("docstring") OT::ANCOVA "ANalysis of COVAriance method (ANCOVA). Available constructor: ANCOVA(*functionalChaosResult, correlatedInput*) Parameters ---------- functionalChaosResult : :class:`~openturns.FunctionalChaosResult` Functional chaos result approximating the model response with uncorrelated inputs. correlatedInput : 2-d sequence of float Correlated inputs used to compute the real values of the output. Its dimension must be equal to the number of inputs of the model. Notes ----- ANCOVA, a variance-based method described in [Caniou2012]_, is a generalization of the ANOVA (ANalysis Of VAriance) decomposition for models with correlated input parameters. Let us consider a model :math:`Y = h(\vect{X})` without making any hypothesis on the dependence structure of :math:`\vect{X} = \{X^1, \ldots, X^{n_X} \}`, a n_X-dimensional random vector. The covariance decomposition requires a functional decomposition of the model. Thus the model response :math:`Y` is expanded as a sum of functions of increasing dimension as follows: .. math:: :label: model h(\vect{X}) = h_0 + \sum_{u\subseteq\{1,\dots,n_X\}} h_u(X_u) :math:`h_0` is the mean of :math:`Y`. Each function :math:`h_u` represents, for any non empty set :math:`u\subseteq\{1, \dots, n_X\}`, the combined contribution of the variables :math:`X_u` to :math:`Y`. Using the properties of the covariance, the variance of :math:`Y` can be decomposed into a variance part and a covariance part as follows: .. math:: Var[Y]&= Cov\left[h_0 + \sum_{u\subseteq\{1,\dots,n_X\}} h_u(X_u), h_0 + \sum_{u\subseteq\{1,\dots,n_X\}} h_u(X_u)\right] \\ &= \sum_{u\subseteq\{1,\dots,n_X\}} \left[Var[h_u(X_u)] + Cov[h_u(X_u), \sum_{v\subseteq\{1,\dots,n_X\}, v\cap u=\varnothing} h_v(X_v)]\right] This variance formula enables to define each total part of variance of :math:`Y` due to :math:`X_u`, :math:`S_u`, as the sum of a *physical* (or *uncorrelated*) part and a *correlated* part such as: .. math:: S_u = \frac{Cov[Y, h_u(X_u)]} {Var[Y]} = S_u^U + S_u^C where :math:`S_u^U` is the uncorrelated part of variance of Y due to :math:`X_u`: .. math:: S_u^U = \frac{Var[h_u(X_u)]} {Var[Y]} and :math:`S_u^C` is the contribution of the correlation of :math:`X_u` with the other parameters: .. math:: S_u^C = \frac{Cov\left[h_u(X_u), \displaystyle \sum_{v\subseteq\{1,\dots,n_X\}, v\cap u=\varnothing} h_v(X_v)\right]} {Var[Y]} As the computational cost of the indices with the numerical model :math:`h` can be very high, [Caniou2012]_ suggests to approximate the model response with a polynomial chaos expansion: .. math:: Y \simeq \hat{h} = \sum_{j=0}^{P-1} \alpha_j \Psi_j(x) However, for the sake of computational simplicity, the latter is constructed considering *independent* components :math:`\{X^1,\dots,X^{n_X}\}`. Thus the chaos basis is not orthogonal with respect to the correlated inputs under consideration, and it is only used as a metamodel to generate approximated evaluations of the model response and its summands :eq:`model`. The next step consists in identifying the component functions. For instance, for :math:`u = \{1\}`: .. math:: h_1(X_1) = \sum_{\alpha | \alpha_1 \neq 0, \alpha_{i \neq 1} = 0} y_{\alpha} \Psi_{\alpha}(\vect{X}) where :math:`\alpha` is a set of degrees associated to the :math:`n_X` univariate polynomial :math:`\psi_i^{\alpha_i}(X_i)`. Then the model response :math:`Y` is evaluated using a sample :math:`X=\{x_k, k=1,\dots,N\}` of the correlated joint distribution. Finally, the several indices are computed using the model response and its component functions that have been identified on the polynomial chaos. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Model and distribution definition >>> model = ot.SymbolicFunction(['X1','X2'], ['4.*X1 + 5.*X2']) >>> distribution = ot.ComposedDistribution([ot.Normal()] * 2) >>> S = ot.CorrelationMatrix(2) >>> S[1, 0] = 0.3 >>> R = ot.NormalCopula().GetCorrelationFromSpearmanCorrelation(S) >>> CorrelatedInputDistribution = ot.ComposedDistribution([ot.Normal()] * 2, ot.NormalCopula(R)) >>> sample = CorrelatedInputDistribution.getSample(200) >>> # Functional chaos computation >>> productBasis = ot.OrthogonalProductPolynomialFactory([ot.HermiteFactory()] * 2, ot.EnumerateFunction(2)) >>> adaptiveStrategy = ot.FixedStrategy(productBasis, 15) >>> projectionStrategy = ot.LeastSquaresStrategy(ot.MonteCarloExperiment(100)) >>> algo = ot.FunctionalChaosAlgorithm(model, distribution, adaptiveStrategy, projectionStrategy) >>> algo.run() >>> ancovaResult = ot.ANCOVA(algo.getResult(), sample) >>> indices = ancovaResult.getIndices() >>> print(indices) [0.408398,0.591602] >>> uncorrelatedIndices = ancovaResult.getUncorrelatedIndices() >>> print(uncorrelatedIndices) [0.284905,0.468108] >>> # Get indices measuring the correlated effects >>> print(indices - uncorrelatedIndices) [0.123494,0.123494]" // --------------------------------------------------------------------- %feature("docstring") OT::ANCOVA::getUncorrelatedIndices "Accessor to the ANCOVA indices measuring uncorrelated effects. Parameters ---------- marginalIndex : int, :math:`0 \leq i < n`, optional Index of the model's marginal used to estimate the indices. By default, marginalIndex is equal to 0. Returns ------- indices : :class:`~openturns.Point` List of the ANCOVA indices measuring uncorrelated effects of the inputs. The effects of the correlation are represented by the indices resulting from the subtraction of the :meth:`getIndices` and :meth:`getUncorrelatedIndices` lists." // --------------------------------------------------------------------- %feature("docstring") OT::ANCOVA::getIndices "Accessor to the ANCOVA indices. Parameters ---------- marginalIndex : int, :math:`0 \leq i < n`, optional Index of the model's marginal used to estimate the indices. By default, marginalIndex is equal to 0. Returns ------- indices : :class:`~openturns.Point` List of the ANCOVA indices measuring the contribution of the input variables to the variance of the model. These indices are made up of a *physical* part and a *correlated* part. The first one is obtained thanks to :meth:`getUncorrelatedIndices`. The effects of the correlation are represented by the indices resulting from the subtraction of the :meth:`getIndices` and :meth:`getUncorrelatedIndices` lists." openturns-1.9/python/src/ARMA.i000066400000000000000000000003061307543307100164240ustar00rootroot00000000000000// SWIG file ARMA.i %{ #include "openturns/ARMA.hxx" %} %include ARMA_doc.i %include openturns/ARMA.hxx namespace OT { %extend ARMA { ARMA(const ARMA & other) { return new OT::ARMA(other); } } } openturns-1.9/python/src/ARMACoefficients.i000066400000000000000000000026761307543307100207620ustar00rootroot00000000000000// SWIG file ARMACoefficients.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/ARMACoefficients.hxx" #include "openturns/SquareMatrix.hxx" namespace OT { template <> struct traitsPythonType { typedef _PyObject_ Type; }; template <> inline OT::SquareMatrix convert<_PyObject_,OT::SquareMatrix>(PyObject * pyObj) { void * ptr = 0; if (! SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::SquareMatrix *"), 0 | 0 ))) throw OT::InvalidArgumentException(HERE) << "Object passed as argument is not a SquareMatrix"; OT::SquareMatrix * p_sm = reinterpret_cast< OT::SquareMatrix * >( ptr ); return *p_sm; } } %} %include ARMACoefficients_doc.i %template(SquareMatrixCollection) OT::Collection; %template(SquareMatrixPersistentCollection) OT::PersistentCollection; %include openturns/ARMACoefficients.hxx %extend OT::Collection { OT::Collection (PyObject * pyObj) { return OT::buildCollectionFromPySequence( pyObj ); } } namespace OT { %extend ARMACoefficients { ARMACoefficients(PyObject * pyObj) { OT::Pointer > p_coll = OT::buildCollectionFromPySequence( pyObj ); return new OT::ARMACoefficients( *p_coll ); } ARMACoefficients(const ARMACoefficients & other) { return new OT::ARMACoefficients(other); } } } openturns-1.9/python/src/ARMACoefficients_doc.i.in000066400000000000000000000037521307543307100222100ustar00rootroot00000000000000%feature("docstring") OT::ARMACoefficients "Coefficients of an ARMA process (MA or AR part). Available constructors: ARMACoefficients(*size, dimension*) ARMACoefficients(*coeffList*) ARMACoefficients(*matrixColl*) Parameters ---------- size : int, The number of elements in the list. dimension : int, The dimension of each element in the list. coeffList : a list of floats, In dimension 1, the list of the coefficients defining the recurrence of the ARMA process (MA or AR part). matrixColl : a list of :class:`~openturns.SquareMatrix` In dimension :math:`d`, the collection of square matrices in :math:`\Rset^d \times \Rset^d` defining the recurrence of the ARMA process (MA or AR part). Notes ----- - In the first constructor: The elements are the null elements (scalar in dimension 1 and the null matrix in upper dimension). - In the other constructor: The elements are specified in the constructor. Examples -------- Create the coefficients defining the recurrence of an ARMA process: >>> import openturns as ot >>> myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1]) >>> myMACoef = ot.ARMACoefficients([0.4, 0.3])" // --------------------------------------------------------------------- %feature("docstring") OT::ARMACoefficients::getDimension "Accessor to the dimension of coefficients in the list. Returns ------- dimension : int The dimension of elements in the list." // --------------------------------------------------------------------- %feature("docstring") OT::ARMACoefficients::add "Add a new element in the list. Available usages: add(*coeff*) add(*squareMat*) Parameters ---------- coeff : float A new scalar coefficient added to the list composed with scalars. squareMat : :class:`~openturns.SquareMatrix` A new element in the list composed with square matrices. Returns ------- - In the first usage: A new list of elements composed with scalars. - In the second usage: A new list of elements composed with square matrices. " openturns-1.9/python/src/ARMAFactory.i000066400000000000000000000004521307543307100177560ustar00rootroot00000000000000// SWIG file ARMAFactory.i %{ #include "openturns/ARMAFactory.hxx" %} %include ARMAFactory_doc.i OTTypedInterfaceObjectHelper(ARMAFactory) %include openturns/ARMAFactory.hxx namespace OT { %extend ARMAFactory { ARMAFactory(const ARMAFactory & other) { return new OT::ARMAFactory(other); } } } openturns-1.9/python/src/ARMAFactoryImplementation.i000066400000000000000000000005561307543307100226710ustar00rootroot00000000000000// SWIG file ARMAFactoryImplementation.i %{ #include "openturns/ARMAFactoryImplementation.hxx" %} %include ARMAFactoryImplementation_doc.i %include openturns/ARMAFactoryImplementation.hxx namespace OT { %extend ARMAFactoryImplementation { ARMAFactoryImplementation(const ARMAFactoryImplementation & other) { return new OT::ARMAFactoryImplementation(other); } } } openturns-1.9/python/src/ARMAFactoryImplementation_doc.i.in000066400000000000000000000014441307543307100241200ustar00rootroot00000000000000%define OT_ARMAFactory_doc "Base class for ARMA models factory." %enddef %feature("docstring") OT::ARMAFactoryImplementation OT_ARMAFactory_doc // --------------------------------------------------------------------- %define OT_ARMAFactory_build_doc "Estimate the ARMA model from data. Available constructors: build(*myTimeSeries*) build(*myProcessSample*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` The time series from which the ARMA model is estimated. myProcessSample : :class:`~openturns.ProcessSample` The sample of time series from which the ARMA model is estimated. Returns ------- myARMA : :class:`~openturns.ARMA` The estimated spectral model. " %enddef %feature("docstring") OT::ARMAFactoryImplementation::build OT_ARMAFactory_build_doc openturns-1.9/python/src/ARMAFactory_doc.i.in000066400000000000000000000003141307543307100212050ustar00rootroot00000000000000// ARMAFactory docstrings are defined in ARMAFactoryImplementation_doc.i.in %feature("docstring") OT::ARMAFactory OT_ARMAFactory_doc %feature("docstring") OT::ARMAFactory::build OT_ARMAFactory_build_doc openturns-1.9/python/src/ARMALikelihoodFactory.i000066400000000000000000000005171307543307100217640ustar00rootroot00000000000000// SWIG file ARMALikelihoodFactory.i %{ #include "openturns/ARMALikelihoodFactory.hxx" %} %include ARMALikelihoodFactory_doc.i %include openturns/ARMALikelihoodFactory.hxx namespace OT { %extend ARMALikelihoodFactory { ARMALikelihoodFactory(const ARMALikelihoodFactory & other) { return new OT::ARMALikelihoodFactory(other); } } } openturns-1.9/python/src/ARMALikelihoodFactory_doc.i.in000066400000000000000000000153231307543307100232170ustar00rootroot00000000000000%feature("docstring") OT::ARMALikelihoodFactory "Maximum likelihood estimator of a multivariate ARMA normal process. Available constructors: ARMALikelihoodFactory() ARMALikelihoodFactory(*p, q, d, invertible*) ARMALikelihoodFactory(*indP, indQ, d, invertible*) Parameters ---------- p : int Order of the AR part of the :math:`ARMA(p,q)` process of dimension :math:`d`. q : int Order of the MA part of the :math:`ARMA(p,q)` process of dimension :math:`d`. d : int, :math:`d \geq 1` Dimension of the process. invertible : bool, optional Restrict the estimation to invertible ARMA processes. By default: True. indP : :class:`~openturns.Indices` All the :math:`p` orders that will be investigated. Care: not yet implemented. indQ : :class:`~openturns.Indices` All the :math:`p` orders that will be investigated. Care: not yet implemented. Notes ----- We suppose here that the white noise is normal with zero mean and covariance matrix :math:`\mat{\Sigma}_{\varepsilon} = \sigma^2\mat{Q}` where :math:`|\mat{Q}| = 1`. It implies that the ARMA process estimated is normal. Let :math:`(t_i, \vect{X}_i)_{0\leq i \leq n-1}` be a multivariate time series of dimension :math:`d` from an :math:`ARMA(p,q)` process. If we note :math:`\vect{W} = (\vect{X}_0, \hdots, \vect{X}_{n-1})`, then :math:`\vect{W}` is normal with zero mean. Its covariance matrix writes :math:`\mathbb{E}(\vect{W}\Tr{\vect{W}})= \sigma^2 \Sigma_{\vect{W}}` which depends on the coefficients :math:`(\mat{A}_k, \mat{B}_l)` for :math:`k = 1,\ldots,p` and :math:`l = 1,\ldots, q` and on the matrix :math:`\mat{Q}`. The likelihood of :math:`\vect{W}` writes : .. math:: L(\vect{\beta}, \sigma^2 | \vect{W}) = (2 \pi \sigma^2) ^{-\frac{d n}{2}} |\Sigma_{w}|^{-\frac{1}{2}} \exp\left(- (2\sigma^2)^{-1} \Tr{\vect{W}} \Sigma_{\vect{W}}^{-1} \vect{W} \right) where :math:`\vect{\beta} = (\mat{A}_{k}, \mat{B}_{l}, \mat{Q}),\ k = 1,\ldots,p`, :math:`l = 1,\ldots, q` and where :math:`|.|` denotes the determinant. No evaluation of selection criteria such as AIC or BIC is done. Examples -------- Create a time series from a scalar ARMA(4,2) and a normal white noise: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 50) >>> myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid) >>> myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1]) >>> myMACoef = ot.ARMACoefficients([0.4, 0.3]) >>> myARMAProcess = ot.ARMA(myARCoef, myMACoef, myWhiteNoise) >>> myTimeSeries = myARMAProcess.getRealization() Estimate the ARMA process with the maximum likelihood estimator: >>> myFactory = ot.ARMALikelihoodFactory(4, 2, 1) >>> myARMA = myFactory.build(ot.TimeSeries(myTimeSeries))" // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::build "Estimate the ARMA process. Available usages: build(*myTimeSeries*) build(*myProcessSample*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` One realization of the process. myProcessSample : :class:`~openturns.ProcessSample` Several realizations of the process. Returns ------- myARMA : :class:`~openturns.ARMA` The process estimated with the maximum likelihood estimator. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::setVerbose "Accessor to the verbose mode. Parameters ---------- verboseMode : bool Set the verbose mode while both the exploration of the possible models and the optimization steps. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::getVerbose "Accessor to the verbose mode. Returns ------- verboseMode : bool Get the verbose mode while both the exploration of the possible models and the optimization steps. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::getInitialARCoefficients "Accessor to the initial AR coefficients. Returns ------- initARCoeff : :class:`~openturns.ARMACoefficients` The initial AR coefficients used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::setInitialARCoefficients "Accessor to the initial AR coefficients. Parameters ---------- initARCoeff : :class:`~openturns.ARMACoefficients` The initial AR coefficients used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::getInitialMACoefficients "Accessor to the initial MA coefficients. Returns ------- initMACoeff : :class:`~openturns.ARMACoefficients` The initial MA coefficients used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::setInitialMACoefficients "Accessor to the initial MA coefficients. Parameters ---------- initMACoeff : :class:`~openturns.ARMACoefficients` The initial MA coefficients used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::getInitialCovarianceMatrix "Accessor to the initial covariance matrix of the white noise. Returns ------- initCovMat : :class:`~openturns.CovarianceMatrix` The initial covariance matrix of the white noise used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::setInitialCovarianceMatrix "Accessor to the initial covariance matrix of the white noise. Parameters ---------- initCovMat : :class:`~openturns.CovarianceMatrix` The initial covariance matrix of the white noise used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::setInitialConditions "Accessor to the initial AR coefficients. Parameters ---------- initARCoeff : :class:`~openturns.ARMACoefficients` The initial AR coefficients used for the optimization algorithm. initMACoeff : :class:`~openturns.ARMACoefficients` The initial AR coefficients used for the optimization algorithm. initCovMatr : :class:`~openturns.CovarianceMatrix` The initial covariance matrix of the white noise used for the optimization algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMALikelihoodFactory::getInvertible "Accessor to the initial AR coefficients. Returns ------- invertible : bool The initial AR coefficients used for the optimization algorithm. " openturns-1.9/python/src/ARMAState.i000066400000000000000000000003721307543307100174300ustar00rootroot00000000000000// SWIG file ARMACoefficients.i %{ #include "openturns/ARMAState.hxx" %} %include ARMAState_doc.i %include openturns/ARMAState.hxx namespace OT { %extend ARMAState { ARMAState(const ARMAState & other) { return new OT::ARMAState(other); } } } openturns-1.9/python/src/ARMAState_doc.i.in000066400000000000000000000045441307543307100206670ustar00rootroot00000000000000%feature("docstring") OT::ARMAState "Last state recorded of an ARMA process. Parameters ---------- values : :class:`~openturns.Sample` Last :math:`p` values of the :math:`ARMA(p,q)` process of dimension :math:`d`. noises : :class:`~openturns.Sample` Last :math:`q` values of the white noise defining the :math:`ARMA(p,q)` process of dimension :math:`d`. Examples -------- Define a state of an :math:`ARMA(4,2)` process of dimension 1: >>> import openturns as ot >>> myLastValues = ot.Sample([[0.6], [0.7], [0.3], [0.2]]) >>> myLastNoiseValues = ot.Sample([[1.2], [1.8]]) >>> myARMAState = ot.ARMAState(myLastValues, myLastNoiseValues) " // --------------------------------------------------------------------- %feature("docstring") OT::ARMAState::getDimension "Accessor to the dimension of coefficients in the list. Returns ------- dimension : int The dimension :math:`d` of the ARMA process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMAState::getX "Accessor to the last values of the ARMA process. Returns ------- values : :class:`~openturns.Sample` of size :math:`p` and dimension :math:`d` Last :math:`p` values of the :math:`ARMA(p,q)` process of dimension :math:`d`. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMAState::setX "Accessor to the last values of the ARMA process. Parameters ---------- values : :class:`~openturns.Sample` of size :math:`p` and dimension :math:`d` Last :math:`p` values of the :math:`ARMA(p,q)` process of dimension :math:`d`. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMAState::getEpsilon "Accessor to the last values of the noise defining the ARMA process. Returns ------- noises : :class:`~openturns.Sample` of size :math:`q` and dimension :math:`d` Last :math:`q` values of the white noise of the :math:`ARMA(p,q)` process of dimension :math:`d`. " // --------------------------------------------------------------------- %feature("docstring") OT::ARMAState::setEpsilon "Accessor to the last values of the noise defining the ARMA process. Parameters ---------- noises : :class:`~openturns.Sample` of size :math:`q` and dimension :math:`d` Last :math:`q` values of the white noise of the :math:`ARMA(p,q)` process of dimension :math:`d`. " openturns-1.9/python/src/ARMA_doc.i.in000066400000000000000000000174501307543307100176660ustar00rootroot00000000000000%feature("docstring") OT::ARMA "ARMA process. Available constructors: ARMA() ARMA(*ARCoeff, MACoeff, whiteNoise*) ARMA(*ARCoeff, MACoeff, whiteNoise, ARMAstate*) Parameters ---------- ARCoeff : :class:`~openturns.ARMACoefficients` The coefficients of the AR part of the recurrence : :math:`(a_1, \hdots, a_p)` in dimension 1 and :math:`(\mat{A}_{\, 1}, \hdots, \mat{A}{\, _p})` in dimension :math:`d`. Default is: :math:`0` in dimension 1 and the associated time grid is :math:`\{0,1\}`. MACoeff : :class:`~openturns.ARMACoefficients` The coefficients of the MA part of the recurrence : :math:`(b_1, \hdots, b_q)` in dimension 1 and :math:`(\mat{B}_{\, 1}, \hdots, \mat{B}{\, _p})` in dimension :math:`d`. Default is: :math:`0` in dimension 1 and the associated time grid is :math:`\{0,1\}`. whiteNoise : :class:`~openturns.WhiteNoise` The white noise distribution of the recurrent relation. Default is: the Normal distribution with zero mean and unit variance in dimension 1. ARMAstate : :class:`~openturns.ARMAState` The state of the ARMA process which will be extended to the next time stamps. The state is composed with :math:`p` values of the process and :math:`q` values of the white noise. This constructor is needed to get possible futurs from the current state. Notes ----- An ARMA process in dimension :math:`d` is defined by the linear recurrence : .. math:: \vect{X}_t + \mat{A}_{\, 1} \, \vect{X}_{t-1} + \hdots + \mat{A}_{\, p} \, \vect{X}_{t-p} = \vect{\varepsilon}_{t}+ \mat{B}_ {\, 1} \, \vect{\varepsilon}_{t-1}+ \hdots + \mat{B}_{\, q} \, \vect{\varepsilon}_{t-q} where :math:`\mat{A}_{\, i} \in \Rset^d \times \Rset^d` and :math:`\mat{B}_{\, j} \in \Rset^d \times \Rset^d`. In dimension 1, an ARMA process is defined by: .. math:: X_t +a_1 X_{t-1} + \hdots + a_p X_{t-p} = \varepsilon_{t}+ b_1 \varepsilon_{t-1}+ \hdots +b_q \varepsilon_{t-q} where :math:`(a_i,b_i) \in \Rset`. Examples -------- Create an ARMA(4,2) process: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 10) >>> myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid) >>> myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1]) >>> myMACoef = ot.ARMACoefficients([0.4, 0.3]) >>> myARMAProcess = ot.ARMA(myARCoef, myMACoef, myWhiteNoise) >>> myLastValues = ot.Sample([[0.6], [0.7], [0.3], [0.2]]) >>> myLastNoiseValues = ot.Sample([[1.2], [1.8]]) >>> myARMAState = ot.ARMAState(myLastValues, myLastNoiseValues) >>> myARMAProcessWithState = ot.ARMA(myARCoef, myMACoef, myWhiteNoise, myARMAState) Generate a realization: >>> myTimeSeries = myARMAProcess.getContinuousRealization()" // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getARCoefficients "Accessor to the AR coefficients of the ARMA process. Returns ------- ARCoeff : :class:`~openturns.ARMACoefficients` The AR coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::setARCoefficients "Accessor to the AR coefficients of the ARMA process. Parameters ---------- ARCoeff : :class:`~openturns.ARMACoefficients` The AR coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getMACoefficients "Accessor to the MA coefficients of the ARMA process. Returns ------- MACoeff : :class:`~openturns.ARMACoefficients` The MA coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::setMACoefficients "Accessor to the MA coefficients of the ARMA process. Parameters ---------- MACoeff : :class:`~openturns.ARMACoefficients` The MA coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getFuture "Get possible futures from the current state of the ARMA process. Parameters ---------- Nit : int, :math:`N_{it} \geq 1` The number of time stamps of the future. Nreal : int, :math:`N_{real} \geq 1` The number of possible futures that are generated. Default is: :math:`N_{real} = 1`. Notes ----- - If :math:`N_{real} = 1`: A :class:`~openturns.TimeSeries` One possible future of the ARMA process, from the current state over the next :math:`N_{it}` time stamps. - If :math:`N_{real} > 1`: A :class:`~openturnsProcessSample` :math:`N_{real}` possible futures of the ARMA process, from the current state over the next :math:`N_{it}` time stamps. Note that the time grid of each future begins at the last time stamp of the time grid associated to the time series which is extended." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getState "Accessor to the stored state of the ARMA process. Returns ------- ARMAstate : :class:`~openturns.ARMAState` The state of the ARMA process which will be extended to the next time stamps. The state is composed with :math:`p` values of the process and :math:`q` values of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::setState "Accessor to the stored state of the ARMA process. Parameters ---------- ARMAstate : :class:`~openturns.ARMAState` The state of the ARMA process which will be extended to the next time stamps. The state is composed with :math:`p` values of the process and :math:`q` values of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getWhiteNoise "Accessor to the white noise defining the ARMA process. Returns ------- whiteNoise : :class:`~openturns.WhiteNoise` The white noise :math:`\varepsilon` used in the linear recurrence of the ARMA process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::setWhiteNoise "Accessor to the white noise defining the ARMA process. Parameters ---------- whiteNoise : :class:`~openturns.WhiteNoise` The white noise :math:`\varepsilon` used in the linear recurrence of the ARMA process." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::computeNThermalization "Accessor to the stored state of the ARMA process. Parameters ---------- eps : float, :math:`\epsilon > 0` Returns ------- Nther : int, :math:`N_{ther} \geq 1` The number of iterations of the ARMA process before being stationary and independent of its intial state. Notes ----- The thermalization number :math:`N_{ther}` is defined as follows: .. math:: N_{ther} > E\left[ \displaystyle \frac{\ln \epsilon}{\ln \max_{i,j} |r_{ij}|}\right] where :math:`E[]` is the integer part of a float and the :math:`(r_i)_i` are the roots of the polynomials (given here in dimension 1) : .. math:: \Phi(\vect{r}) = \vect{r}^p + \sum_{i=1}^p a_i\vect{r}^{p-i} " // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::getNThermalization "Accessor to the number of time stamps used to thermalize the process. Returns ------- Nther : int, :math:`N_{ther} \geq 1` The number of time stamps used to make the ARMA realization be independent from its actual state. Default precision is: :math:`\varepsilon = 2^{-53} \equiv 10^{-16}`." // --------------------------------------------------------------------- %feature("docstring") OT::ARMA::setNThermalization "Accessor to the number of time stamps used to thermalize the process. Parameters ---------- Nther : int, :math:`N_{ther} \geq 1` The number of time stamps used to make the ARMA realization independent from its actual state." openturns-1.9/python/src/AbdoRackwitz.i000066400000000000000000000004061307543307100202710ustar00rootroot00000000000000// SWIG file AbdoRackwitz.i %{ #include "openturns/AbdoRackwitz.hxx" %} %include AbdoRackwitz_doc.i %include openturns/AbdoRackwitz.hxx namespace OT{ %extend AbdoRackwitz { AbdoRackwitz(const AbdoRackwitz & other) { return new OT::AbdoRackwitz(other); } } } openturns-1.9/python/src/AbdoRackwitz_doc.i.in000066400000000000000000000040451307543307100215260ustar00rootroot00000000000000%feature("docstring") OT::AbdoRackwitz "Abdo-Rackwitz solver. Available constructors: AbdoRackwitz(*problem*) AbdoRackwitz(*problem, tau, omega, smooth*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem to solve. tau : float Multiplicative decrease of linear step. omega : float Armijo factor. smooth : float Growing factor in penalization term. See also -------- Cobyla, SQP, TNC, NLopt Examples -------- >>> import openturns as ot >>> model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> problem = ot.OptimizationProblem(model, 5.0) >>> algo = ot.AbdoRackwitz(problem) >>> algo.setStartingPoint([0.0] * 4) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::getTau "Accessor to tau parameter. Returns ------- tau : float Multiplicative decrease of linear step." // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::setTau "Accessor to tau parameter. Parameters ---------- tau : float Multiplicative decrease of linear step." // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::getOmega "Accessor to omega parameter. Returns ------- omega : float Armijo factor." // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::setOmega "Accessor to omega parameter. Parameters ---------- omega : float Armijo factor." // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::getSmooth "Accessor to smooth parameter. Returns ------- smooth : float Growing factor in penalization term." // --------------------------------------------------------------------- %feature("docstring") OT::AbdoRackwitz::setSmooth "Accessor to smooth parameter. Parameters ---------- smooth : float Growing factor in penalization term." openturns-1.9/python/src/AbsoluteExponential.i000066400000000000000000000004761307543307100217010ustar00rootroot00000000000000// SWIG file AbsoluteExponential.i %{ #include "openturns/AbsoluteExponential.hxx" %} %include AbsoluteExponential_doc.i %include openturns/AbsoluteExponential.hxx namespace OT { %extend AbsoluteExponential { AbsoluteExponential(const AbsoluteExponential & other) { return new OT::AbsoluteExponential(other); } } } openturns-1.9/python/src/AbsoluteExponential_doc.i.in000066400000000000000000000041201307543307100231210ustar00rootroot00000000000000%feature("docstring") OT::AbsoluteExponential "Absolute exponential covariance function. Available constructors: AbsoluteExponential(*spatialDim=1*) AbsoluteExponential(*scale*) AbsoluteExponential(*scale, amplitude*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. When not fulfilled, the spatial dimension is equal to the size of the parameter :math:`\vect{\theta}`. By default, equal to 1. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude :math:`\vect{\sigma}\in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. Notes ----- The *absolute exponential* function is a stationary covariance function whith dimension :math:`d=1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \mapsto \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *absolute exponential* function is defined by: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 e^{- \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_{1}}, \quad \forall (\vect{s}, \vect{t}) \in \cD The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = e^{- \left\| \vect{s}- \vect{t} \right\|_{1}}, \quad \forall (\vect{s}, \vect{t}) \in \cD See Also -------- CovarianceModel Examples -------- Create a standard absolute exponential covariance function: >>> import openturns as ot >>> covModel = ot.AbsoluteExponential(2) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(covModel(s, t)) [[ 0.818731 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0.67032 ]] Create an absolute exponential covariance function specifying only the scale vector (amplitude is fixed to 1): >>> covModel2 = ot.AbsoluteExponential([1.5, 2.5]) >>> covModel2bis = ot.AbsoluteExponential([1.5]*3) Create an absolute exponential covariance function specifying the scale vector and the amplitude : >>> covModel3 = ot.AbsoluteExponential([1.5, 2.5], [3.5])" openturns-1.9/python/src/AdaptiveDirectionalSampling.i000066400000000000000000000005401307543307100233120ustar00rootroot00000000000000// SWIG file %{ #include "openturns/AdaptiveDirectionalSampling.hxx" %} %include AdaptiveDirectionalSampling_doc.i %include openturns/AdaptiveDirectionalSampling.hxx namespace OT { %extend AdaptiveDirectionalSampling { AdaptiveDirectionalSampling(const AdaptiveDirectionalSampling & other) { return new OT::AdaptiveDirectionalSampling(other); } } } openturns-1.9/python/src/AdaptiveDirectionalSampling_doc.i.in000066400000000000000000000225171307543307100245540ustar00rootroot00000000000000%feature("docstring") OT::AdaptiveDirectionalSampling "Adaptative directional simulation. Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. rootStrategy : :class:`~openturns.RootStrategy`, optional Strategy adopted to evaluate the intersections of each direction with the limit state function and take into account the contribution of the direction to the event probability. Set to :class:`~openturns.SafeAndSlow` by default. samplingStrategy : :class:`~openturns.SamplingStrategy`, optional Strategy adopted to sample directions. Set to :class:`~openturns.RandomDirection` by default. Notes ----- Let :math:`\mathcal D_f` denote the failure domain defined as :math:`\mathcal D_f = \{\ux \in \mathbb R^{n_X} | g(\ux) \leq 0\}`, where :math:`\ux` are realization of the random vector :math:`\uX` and :math:`g` is the limit-state function as defined elsewhere in the documentation. The purpose of the ADS-2 algorithm and its variants is to estimate the following probability: .. math:: P_f = \int_{\mathcal D_f} f_{\uX}(\ux)\di{\ux} \\ = \int_{\mathbb R^{n_X}} \mathbf{1}_{\{g(\ux) \:\leq 0\: \}}\,f_{\uX}(\ux)\di{\ux} \\ = \Prob{\{g(\uX) \leq 0\}}. Principles The ADS-2 method [Munoz2011]_ combines the stratified and directional sampling concepts. Stratified sampling consists in splitting the support of the random vector :math:`\ux` into :math:`m` mutually exclusive and collectively exhaustive subsets. Here, ADS-2 splits the standard space into :math:`m = 2^d` quadrants, where :math:`d` is the dimension of the random vector :math:`\uX`. Stratified sampling is often run in two steps: (i) a learning step is used for polling the input space and detect the subsets that contribute most to the probability and (ii) an estimation step is used for estimating the probability by weighted sampling (some subsets are more sampled than the others). Directional sampling uses the spheric symmetry of the standard space for estimating the failure probability as the average of conditional probabilities calculated on directions drawn at random in the standard space. The learning step uses an a priori number of random directions that is uniformly distributed over the quadrants, meaning the weights are as follows: .. math:: \omega^1_i = \frac{1}{m}, \quad i = 1, \ldots, m. Directional sampling is used for estimating the failure probability in each quadrant: .. math:: \hat P_i^{DS} = \Prob{\{g(\uX) \leq 0\} \mid \uX \in \mathbb{Q}_i},\,i = 1, \ldots, m. and the corresponding estimation variances are denoted as :math:`\sigma_i^{DS\,2}`. These probabilities are estimated using the same number :math:`N^0_i` of random directions per quadrant as told by the uniform weights distribution. The probability of interest is then computed as a weighted average of the previously defined conditional probabilities: .. math:: \hat P_f = \sum\limits_{i=1}^m \omega_i \hat P_i^{DS} where :math:`\hat P_i^{DS}` is the conditional probability estimator in the i-th quadrant. The corresponding variance of the stratified estimator reads: .. math:: \sigma^2 = \frac{1}{N_l} \left( \sum\limits_{i=1}^m \omega_i \sigma_i^{DS} \right) ^2 where :math:`\sigma_i^{DS\,2}` is the variance of the conditional probability estimator in the i-th quadrant. At the end of the learning step, the weights :math:`\omega_i` are updated so as to minimize the stratified estimator variance. Indeed, it can be shown that the updated weights: .. math:: \omega^2_i = \frac{\omega^1_i \sigma_i^{DS}}{\sum\limits_{j=1}^m \omega^1_j \sigma_j^{DS}}, i = 1, \ldots, m, minimize the final estimation variance in \eqref{eq:pf_est_sda2_var}. Note that some weights might be zero (due to a somewhat arbitrary rounding of the conditional probabilities' estimation variance). The quadrants associated with a zero-weight will not be sampled in the estimation step. Eventually, the estimation step proceeds in essentially the same way as the learning step with different weights for the quadrants though. \eqref{eq:pf_est_sda2} and \eqref{eq:pf_est_sda2_var} are used for evaluating the final probability probability estimate and its variance. The computational budget per step is parametrized by a fraction :math:`\gamma_l, l = 1,\,2` of the total budget :math:`N`, such that :math:`\gamma_1 + \gamma_2 = 1`. The number of directions sampled in quadrant :math:`i` at step :math:`l` is then defined as follows: .. math:: N^l_i = N * \gamma_l * \omega_i. The number of evaluation of the limit-state function :math:`g` is of course greater than the total budget :math:`N` since directional sampling is used. Variants The ADS-2+ variant performs a dimension reduction step after the learning step for reducing the number of stratified quadrants. The statistic :math:`\tilde T_k` aggregates the sensitivity of expectation along dimension :math:`k`. It is defined as follows: .. math:: \tilde T_k = \sum\limits_{i_l \in \lbrace -1,1 \rbrace,l \neq k} \lvert \tilde I_{(i_1,\dots,i_{k-1},-1,i_{k+1},\dots,i_p)} - \tilde I_{(i_1,\dots,i_{k-1},1,i_{k+1},\dots,i_p)} \rvert. It is used for ranking the contributions of the quadrants. Then, only the :math:`d' < d` most influential variables according to :math:`\tilde T_k` are stratified, leaving the remaining variables simulated without stratification. The corresponding quadrants will not be sampled. The DP-ADS-2 variant combines the ADS method with a rotation of the quadrants. The idea is to get a possible design point (available e.g. after a preliminary FORM analysis) on the bisector of one of the quadrants to make the stratification even more efficient and thus save some evaluations of the model. This 2-step algorithm can be generalized to :math:`L > 2` steps by adding more than one learning step. For now, only ADS-2 is implemented. See also -------- Simulation" // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getRootStrategy "Get the root strategy. Returns ------- strategy : :class:`~openturns.RootStrategy` Root strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setRootStrategy "Set the root strategy. Parameters ---------- strategy : :class:`~openturns.RootStrategy` Root strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getSamplingStrategy "Get the direction sampling strategy. Returns ------- strategy : :class:`~openturns.SamplingStrategy` Direction sampling strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setSamplingStrategy "Set the direction sampling strategy. Parameters ---------- strategy : :class:`~openturns.SamplingStrategy` Direction sampling strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setPartialStratification "Partial stratification accessor. Parameters ---------- partialStratification : bool Partial stratification." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getPartialStratification "Partial stratification accessor. Returns ------- partialStratification : bool Partial stratification." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setQuadrantOrientation "Quadrant orientation accessor. Parameters ---------- orientation : sequence of float Quadrant orientation." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getQuadrantOrientation "Quadrant orientation accessor. Returns ------- orientation : :class:`~openturns.Point` Quadrant orientation." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setMaximumStratificationDimension "Maximum stratification dimension accessor. Parameters ---------- max : int Maximum stratification dimension." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getMaximumStratificationDimension "Maximum stratification dimension accessor. Returns ------- max : int Maximum stratification dimension." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::setGamma "Gamma accessor. The computational budget per step :math:`\gamma_l`. Parameters ---------- gamma : sequence of float Gamma value." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getGamma "Gamma accessor. The computational budget per step :math:`\gamma_l`. Returns ------- gamma : :class:`~openturns.Point` Gamma value." // --------------------------------------------------------------------- %feature("docstring") OT::AdaptiveDirectionalSampling::getTStatistic "T statistic accessor. The statistic :math:`\tilde T_k` aggregates the sensitivity of expectation. Returns ------- gamma : :class:`~openturns.Point` T statistic value." openturns-1.9/python/src/AdaptiveStieltjesAlgorithm.i000066400000000000000000000005651307543307100232060ustar00rootroot00000000000000// SWIG file AdaptiveStieltjesAlgorithm.i %{ #include "openturns/AdaptiveStieltjesAlgorithm.hxx" %} %include AdaptiveStieltjesAlgorithm_doc.i %include openturns/AdaptiveStieltjesAlgorithm.hxx namespace OT{ %extend AdaptiveStieltjesAlgorithm { AdaptiveStieltjesAlgorithm(const AdaptiveStieltjesAlgorithm & other) { return new OT::AdaptiveStieltjesAlgorithm(other); } } } openturns-1.9/python/src/AdaptiveStieltjesAlgorithm_doc.i.in000066400000000000000000000023361307543307100244360ustar00rootroot00000000000000%feature("docstring") OT::AdaptiveStieltjesAlgorithm "AdaptiveStieltjes algorithm used to build the orthonormal basis. The algorithm builds a polynomial basis orthonormal with respect to a specific distribution. Parameters ---------- measure : :class:`~openturns.Distribution` A measure for which the orthonormal polynomial basis is built. See also -------- OrthonormalizationAlgorithm, ChebychevAlgorithm, GramSchmidtAlgorithm Notes ----- It implements an adaptive Stieltjes algorithm that builds the polynomial family orthonormal with respect to the distribution *measure*, using the :class:`~openturns.GaussKronrod` adaptive integration method to compute the following dot-products: :math:`R_n=\langle Q_n, Q_n\rangle` and :math:`S_n=\langle xQ_n, Q_n\rangle` where :math:`Q_n` is the monic polynomial associated to the orthonormal polynomial :math:`P_n`, needed to compute the coefficients of the three-terms recurrence relation that defines :math:`P_n` (see :class:`~openturns.OrthogonalUnivariatePolynomialFamily`): .. math:: a_n = 1/\sqrt{\beta_{n+1}}\quad b_n = -\alpha_n/sqrt{\beta_{n+1}}\quad c_n = -\sqrt{\beta_n/\beta_{n+1}} where :math:`\alpha_n = S_n / R_n` and :math:`\beta_n = R_n / R_{n-1}, n>0, \beta_0 = 0`. " openturns-1.9/python/src/AdaptiveStrategy.i000066400000000000000000000005251307543307100211670ustar00rootroot00000000000000// SWIG file AdaptiveStrategy.i %{ #include "openturns/AdaptiveStrategy.hxx" %} %include AdaptiveStrategy_doc.i OTTypedInterfaceObjectHelper(AdaptiveStrategy) %include openturns/AdaptiveStrategy.hxx namespace OT{ %extend AdaptiveStrategy { AdaptiveStrategy(const AdaptiveStrategy & other) { return new OT::AdaptiveStrategy(other); } } } openturns-1.9/python/src/AdaptiveStrategyImplementation.i000066400000000000000000000006251307543307100240760ustar00rootroot00000000000000// SWIG file AdaptiveStrategyImplementation.i %{ #include "openturns/AdaptiveStrategyImplementation.hxx" %} %include AdaptiveStrategyImplementation_doc.i %include openturns/AdaptiveStrategyImplementation.hxx namespace OT{ %extend AdaptiveStrategyImplementation { AdaptiveStrategyImplementation(const AdaptiveStrategyImplementation & other) { return new OT::AdaptiveStrategyImplementation(other); } } } openturns-1.9/python/src/AdaptiveStrategyImplementation_doc.i.in000066400000000000000000000101431307543307100253240ustar00rootroot00000000000000%define OT_AdaptiveStrategy_doc "Base class for the construction of the truncated multivariate orthogonal basis. Available constructors: AdaptiveStrategy(*orthogonalBasis, dimension*) AdaptiveStrategy(*adaptiveStrategyImplementation*) Parameters ---------- orthogonalBasis : :class:`~openturns.OrthogonalBasis` An OrthogonalBasis. dimension : positive int Number of terms of the basis. This first usage has the same implementation as the second with a :class:`~openturns.FixedStrategy`. adaptiveStrategyImplementation : AdaptiveStrategyImplementation Adaptive strategy implementation which is a :class:`~openturns.FixedStrategy`, :class:`~openturns.SequentialStrategy` or a :class:`~openturns.CleaningStrategy`. See also -------- FunctionalChaosAlgorithm, FixedStrategy, SequentialStrategy, CleaningStrategy Notes ----- A strategy must be chosen for the selection of the different terms of the multivariate basis in which the response surface by functional chaos is expressed. The selected terms are regrouped in the finite subset :math:`K` of :math:`\Nset`. There are three different strategies in OpenTURNS : - :class:`~openturns.FixedStrategy`, - :class:`~openturns.SequentialStrategy`, - :class:`~openturns.CleaningStrategy`. These strategies are conceived in such a way to be adapted for other orthogonal expansions (other than polynomial). For the moment, their implementation are only useful for the polynomial chaos expansion." %enddef %feature("docstring") OT::AdaptiveStrategyImplementation OT_AdaptiveStrategy_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_computeInitialBasis_doc "Compute initial basis for the approximation. See also -------- getPsi" %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::computeInitialBasis OT_AdaptiveStrategy_computeInitialBasis_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_getBasis_doc "Accessor to the underlying orthogonal basis. Returns ------- basis : :class:`~openturns.OrthogonalBasis` Orthogonal basis of which the adaptive strategy is based." %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::getBasis OT_AdaptiveStrategy_getBasis_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_getMaximumDimension_doc "Accessor to the maximum dimension of the orthogonal basis. Returns ------- P : integer Maximum dimension of the truncated basis." %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::getMaximumDimension OT_AdaptiveStrategy_getMaximumDimension_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_getPsi_doc "Accessor to the orthogonal polynomials of the basis. Returns ------- polynomials : list of polynomials Sequence of :math:`P` analytical polynomials. Notes ----- The method :meth:`computeInitialBasis` must be applied first. Examples -------- >>> import openturns as ot >>> productBasis = ot.OrthogonalProductPolynomialFactory([ot.HermiteFactory()]) >>> adaptiveStrategy = ot.FixedStrategy(productBasis, 3) >>> adaptiveStrategy.computeInitialBasis() >>> print(adaptiveStrategy.getPsi()) [1,x0,-0.707107 + 0.707107 * x0^2]" %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::getPsi OT_AdaptiveStrategy_getPsi_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_setMaximumDimension_doc "Accessor to the maximum dimension of the orthogonal basis. Parameters ---------- P : integer Maximum dimension of the truncated basis." %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::setMaximumDimension OT_AdaptiveStrategy_setMaximumDimension_doc // --------------------------------------------------------------------- %define OT_AdaptiveStrategy_updateBasis_doc "Update the basis for the next iteration of approximation. Notes ----- No changes are made to the basis in the fixed strategy." %enddef %feature("docstring") OT::AdaptiveStrategyImplementation::updateBasis OT_AdaptiveStrategy_updateBasis_doc openturns-1.9/python/src/AdaptiveStrategy_doc.i.in000066400000000000000000000013431307543307100224200ustar00rootroot00000000000000// AdaptiveStrategy docstrings are defined in AdaptativeStrategyImplementation_doc.i.in %feature("docstring") OT::AdaptiveStrategy OT_AdaptiveStrategy_doc %feature("docstring") OT::AdaptiveStrategy::computeInitialBasis OT_AdaptiveStrategy_computeInitialBasis_doc %feature("docstring") OT::AdaptiveStrategy::getBasis OT_AdaptiveStrategy_getBasis_doc %feature("docstring") OT::AdaptiveStrategy::getMaximumDimension OT_AdaptiveStrategy_getMaximumDimension_doc %feature("docstring") OT::AdaptiveStrategy::getPsi OT_AdaptiveStrategy_getPsi_doc %feature("docstring") OT::AdaptiveStrategy::setMaximumDimension OT_AdaptiveStrategy_setMaximumDimension_doc %feature("docstring") OT::AdaptiveStrategy::updateBasis OT_AdaptiveStrategy_updateBasis_docopenturns-1.9/python/src/AggregatedEvaluation.i000066400000000000000000000005071307543307100217710ustar00rootroot00000000000000// SWIG file AggregatedEvaluation.i %{ #include "openturns/AggregatedEvaluation.hxx" %} %include AggregatedEvaluation_doc.i %include openturns/AggregatedEvaluation.hxx namespace OT { %extend AggregatedEvaluation { AggregatedEvaluation(const AggregatedEvaluation & other) { return new OT::AggregatedEvaluation(other); } } } openturns-1.9/python/src/AggregatedEvaluation_doc.i.in000066400000000000000000000026511307543307100232250ustar00rootroot00000000000000%feature("docstring") OT::AggregatedEvaluation "Aggregated numerical math evaluation implementation. Available constructors: AggregatedEvaluation(*functionsCollection*) Parameters ---------- functionsCollection : sequence of :class:`~openturns.Function` A collection of functions :math:`(f_i)_{i = 1, \ldots, l}` of size :math:`l`, such that :math:`\forall i \in \{1, \ldots, l\}`, :math:`f_i : \Rset^n \rightarrow \Rset^{p_i}`. See also -------- Function, DatabaseEvaluation, DualLinearCombinationEvaluation, LinearFunction Notes ----- It implements a :class:`~openturns.Function` :math:`f : \Rset^n \rightarrow \Rset^{p_1 + \ldots + p_l}` defined by: .. math:: \forall \vect{x} \in \Rset^n, f(\vect{x}) = \Tr{(f_1(\vect{x}), \ldots, f_l(\vect{x}))} " // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedEvaluation::getFunctionsCollection "Accessor to the collection of functions. Returns ------- functionCol : :class:`~openturns.FunctionCollection` The collection of functions defining :math:`f`." // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedEvaluation::setFunctionsCollection "Accessor to the collection of functions. Parameters ---------- functionsCollection : sequence of :class:`~openturns.Function` The collection of functions :math:`(f_i)_{i = 1, \ldots, l}` of size :math:`l`." openturns-1.9/python/src/AggregatedFunction.i000066400000000000000000000004661307543307100214530ustar00rootroot00000000000000// SWIG file AggregatedFunction.i %{ #include "openturns/AggregatedFunction.hxx" %} %include AggregatedFunction_doc.i %include openturns/AggregatedFunction.hxx namespace OT { %extend AggregatedFunction { AggregatedFunction(const AggregatedFunction & other) { return new OT::AggregatedFunction(other); } } } openturns-1.9/python/src/AggregatedFunction_doc.i.in000066400000000000000000000014041307543307100226760ustar00rootroot00000000000000%feature("docstring") OT::AggregatedFunction "Aggregated function. Available constructor: AggregatedFunction(*functionCollection*) The built function stacks all the outputs from each function in the list. Parameters ---------- functionCollection : sequence of :class:`~openturns.Function` Functions to aggregate. Examples -------- >>> import openturns as ot >>> functions = list() >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1^2 + x2', 'x1 + x2 + x3'])) >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1 + 2 * x2 + x3', 'x1 + x2 - x3'])) >>> myFunction = ot.AggregatedFunction(functions) >>> print(myFunction([1.0, 2.0, 3.0])) [3,6,8,0]" openturns-1.9/python/src/AggregatedProcess.i000066400000000000000000000006151307543307100213000ustar00rootroot00000000000000// SWIG file AggregatedProcess.i %{ #include "openturns/AggregatedProcess.hxx" %} %include AggregatedProcess_doc.i OTTypedCollectionInterfaceObjectHelper(Process) OTDefaultCollectionConvertFunctions(Process) %include openturns/AggregatedProcess.hxx namespace OT { %extend AggregatedProcess { AggregatedProcess(const AggregatedProcess & other) { return new OT::AggregatedProcess(other); } } } openturns-1.9/python/src/AggregatedProcess_doc.i.in000066400000000000000000000064171307543307100225400ustar00rootroot00000000000000%feature("docstring") OT::AggregatedProcess "Aggregation of several processes in one process. Available constructor: AggregatedProcess(*collProc*) Parameters ---------- collProc : sequence of :class:`~openturns.Process` Collection of processes which all have the same spatial dimension. Notes ----- If we note :math:`X_i: \Omega \times\cD_i \mapsto \Rset^{d_i}` for :math:`0 \leq i \leq N` the collection of processes, where :math:`\cD_i \in \Rset^n` for all :math:`i`. Then the resulting aggregated process :math:`Y: \Omega \times\cD_0 \mapsto \Rset^d` where :math:`d=\sum_{i=0}^N d_i`. The mesh of the first process :math:`X_0` has been assigned to the process :math:`Y`. Examples -------- Create an aggregated process: >>> import openturns as ot >>> myMesher = ot.IntervalMesher(ot.Indices([5,10])) >>> lowerbound = [0.0, 0.0] >>> upperBound = [2.0, 4.0] >>> myInterval = ot.Interval(lowerbound, upperBound) >>> myMesh = myMesher.build(myInterval) >>> myProcess1 = ot.WhiteNoise(ot.Normal(), myMesh) >>> myProcess2 = ot.WhiteNoise(ot.Triangular(), myMesh) >>> myAggregatedProcess = ot.AggregatedProcess([myProcess1, myProcess2]) Draw one realization: >>> myGraph = myAggregatedProcess.getRealization().drawMarginal(0)" // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedProcess::getRealization "Get one realization of the aggregated process. Returns ------- realization : :class:`~openturns.Field` Each process of the collection is realized on the common mesh defined on :math:`\cD_0`." // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedProcess::getContinuousRealization "Get a continuous realization. Returns ------- realization : :class:`~openturns.Function` Each process of the collection is continuously realized on the common domain :math:`\cD_0`." // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedProcess::getMarginal "Accessor the marginal processes. Available usages: getMarginal(*index*) getMarginal(*indices*) Parameters ---------- index : int Index of the selected marginal process. indices : :class:`~openturns.Indices` List of indices of the selected marginal processes. Notes ----- The selected marginal processes are extracted if the list of indices does not mingle the processes of the initial collection: take care to extract all the marginal processes process by process. For example, if :math:`X_0=(X_0^0, X_0^1)`, :math:`X_1=(X_1^0, X_1^1)` and :math:`X_2=(X_2^0, X_2^1, X_2^2)` then you can extract `Indices([1,0,2,4,6])` but not `Indices([1,2,0,4,6])`." // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedProcess::setProcessCollection "Set the collection of processes. Parameters ---------- collProc : sequence of :class:`~openturns.Process` Collection of processes which all have the same spatial dimension. " // --------------------------------------------------------------------- %feature("docstring") OT::AggregatedProcess::getProcessCollection "Get the collection of processes. Returns ------- collProc : :class:`~openturns.ProcessCollection` Collection of processes which all have the same spatial dimension. " openturns-1.9/python/src/AliMikhailHaqCopula.i000066400000000000000000000004761307543307100215160ustar00rootroot00000000000000// SWIG file AliMikhailHaqCopula.i %{ #include "openturns/AliMikhailHaqCopula.hxx" %} %include AliMikhailHaqCopula_doc.i %include openturns/AliMikhailHaqCopula.hxx namespace OT { %extend AliMikhailHaqCopula { AliMikhailHaqCopula(const AliMikhailHaqCopula & other) { return new OT::AliMikhailHaqCopula(other); } } } openturns-1.9/python/src/AliMikhailHaqCopulaFactory.i000066400000000000000000000005661307543307100230460ustar00rootroot00000000000000// SWIG file AliMikhailHaqCopulaFactory.i %{ #include "openturns/AliMikhailHaqCopulaFactory.hxx" %} %include AliMikhailHaqCopulaFactory_doc.i %include openturns/AliMikhailHaqCopulaFactory.hxx namespace OT { %extend AliMikhailHaqCopulaFactory { AliMikhailHaqCopulaFactory(const AliMikhailHaqCopulaFactory & other) { return new OT::AliMikhailHaqCopulaFactory(other); } } } openturns-1.9/python/src/AliMikhailHaqCopulaFactory_doc.i.in000066400000000000000000000004321307543307100242700ustar00rootroot00000000000000%feature("docstring") OT::AliMikhailHaqCopulaFactory "AliMikhailHaq copula factory. Available constructor: AliMikhailHaqCopulaFactory() See also -------- ClaytonCopulaFactory, FarlieGumbelMorgensternCopulaFactory, FrankCopulaFactory, GumbelCopulaFactory, NormalCopulaFactory" openturns-1.9/python/src/AliMikhailHaqCopula_doc.i.in000066400000000000000000000023301307543307100227370ustar00rootroot00000000000000%feature("docstring") OT::AliMikhailHaqCopula "AliMikhailHaq copula. Available constructor: AliMikhailHaqCopula(*theta=1.0*) Parameters ---------- theta : float, :math:`-1 \leq \theta \leq 1` Parameter :math:`\theta`. Notes ----- The AliMikhailHaq copula is a bivariate Archimedean copula defined by: .. math:: C(u_1, u_2) = \frac{u_1 u_2}{1- \theta (1 - u_1)(1 - u_2)} for :math:`(u_1, u_2) \in [0, 1]^2` And its generator is: .. math:: \varphi(t) = \log \left( \frac{1-\theta(1-t)}{t} \right) See also -------- ArchimedeanCopula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.AliMikhailHaqCopula(0.5) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::AliMikhailHaqCopula::getTheta "Get the parameter :math:`\theta`. Returns ------- theta : float Parameter :math:`\theta` of the copula." // --------------------------------------------------------------------- %feature("docstring") OT::AliMikhailHaqCopula::setTheta "Set the parameter :math:`\theta`. Parameters ---------- theta : float, :math:`-1 \leq \theta \leq 1` Parameter :math:`\theta` of the copula." openturns-1.9/python/src/Analytical.i000066400000000000000000000003651307543307100177720ustar00rootroot00000000000000// SWIG file Analytical.i %{ #include "openturns/Analytical.hxx" %} %include Analytical_doc.i %include openturns/Analytical.hxx namespace OT{ %extend Analytical { Analytical(const Analytical & other) { return new OT::Analytical(other); } } } openturns-1.9/python/src/AnalyticalResult.i000066400000000000000000000004451307543307100211700ustar00rootroot00000000000000// SWIG file AnalyticalResult.i %{ #include "openturns/AnalyticalResult.hxx" %} %include AnalyticalResult_doc.i %include openturns/AnalyticalResult.hxx namespace OT{ %extend AnalyticalResult { AnalyticalResult(const AnalyticalResult & other) { return new OT::AnalyticalResult(other); } } } openturns-1.9/python/src/AnalyticalResult_doc.i.in000066400000000000000000000216041307543307100224220ustar00rootroot00000000000000%feature("docstring") OT::AnalyticalResult "Analytical result. Available constructors: AnalyticalResult(*designPoint, limitStateVariable, isInFailureSpace*) Notes ----- Structure created by the method run() of the :class:`~openturns.Analytical` class and obtained thanks to its method getAnalyticalResult(). Parameters ---------- designPoint : sequence of float Design point in the standard space resulting from the optimization algorithm. limitStateVariable : :class:`~openturns.Event` Event of which the probability is calculated. isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::drawHasoferReliabilityIndexSensitivity "Draw the sensitivity of the Hasofer Reliability Index. Parameters ---------- width : float, optional Value to calculate the shift position of the :class:`~openturns.BarPlot`. By default it is 1.0. Returns ------- graphCollection : sequence of two :class:`~openturns.Graph` containing a barplot The first graph drawing the sensitivity of the Hasofer Reliability Index to the parameters of the marginals of the probabilistic input vector. The second graph drawing the sensitivity of the Hasofer Reliability Index to the parameters of the dependence structure of the probabilistic input vector." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::drawImportanceFactors "Draw the importance factors. Parameters ---------- type : int, optional See :meth:`getImportanceFactors` Returns ------- graph : :class:`~openturns.Graph` Pie of the importance factors of the probabilistic variables." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getImportanceFactors "Accessor to the importance factors. Parameters ---------- type : int, optional - When *ot.AnalyticalResult.ELLIPTICAL*, the importance factors are evaluated as the square of the co-factors of the design point in the elliptical space of the iso-probabilistic transformation (Y-space). - When *ot.AnalyticalResult.CLASSICAL* they are evaluated as the square of the co-factors of the design point in the U-space. - When *ot.AnalyticalResult.PHYSICAL*, the importance factors are evaluated as the square of the physical sensitivities. By default *type = ot.AnalyticalResult.ELLIPTICAL*. Notes ----- - If the importance factors are evaluated as the square of the co-factors of the design point in the U-space : .. math:: \alpha_i^2 = \frac{(u_i^*)^2} {\beta_{HL}^2} - If the importance factors are evaluated as the square of the co-factors of the design point in the Y-space : .. math:: \alpha_i^2 = \frac{(y_i^*)^2} {\|\vect{y}^*\|^2} where .. math:: Y^* = \left( \begin{array}{c} E^{-1}\circ F_1(X_1^*) \\ E^{-1}\circ F_2(X_2^*) \\ \vdots \\ E^{-1}\circ F_n(X_n^*) \end{array} \right) with :math:`\vect{X}^*` is the design point in the physical space and :math:`E` the univariate standard CDF of the elliptical space. In the case where the input distribution of :math:`\vect{X}` has an elliptical copula :math:`C_E`, then :math:`E` has the same type as :math:`C_E`. In the case where the input distribution of :math:`\vect{X}` has a copula :math:`C` which is not elliptical, then :math:`E=\Phi` where :math:`\Phi` is the CDF of the standard normal. - If the importance factors are evaluated as the square of the physical sensitivities : .. math:: \alpha_i^2 = \displaystyle \frac{s_i^2}{{\|s\|}^2} where .. math:: s_i = \displaystyle \frac{\partial \beta}{\partial x_i} (x^*) = \sum_{j=1}^n \frac{\partial \beta}{\partial u_i} \frac{\partial u_j}{\partial x_i} (x^*) Returns ------- factors : :class:`~openturns.PointWithDescription` Sequence containing the importance factors with a description for each component." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getOptimizationResult "Accessor to the result of the optimization problem. Returns ------- result : :class:`~openturns.OptimizationResult` Contains the design point in the standard space and information concerning the convergence of the optimization algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::setOptimizationResult "Accessor to the result of the optimization problem. Parameters ---------- result : :class:`~openturns.OptimizationResult` Contains the design point in the standard space and information concerning the convergence of the optimization algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getHasoferReliabilityIndex "Accessor to the Hasofer Reliability Index. Returns ------- index : float Hasofer Reliability Index which is the distance of the design point from the origin of the standard space :math:`\beta_{HL}=||\vect{u}^*||`." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getHasoferReliabilityIndexSensitivity "Accessor to the sensitivities of the Hasofer Reliability Index. Returns ------- sensitivity : :class:`~openturns.PointWithDescription` Sequence containing the sensitivities of the Hasofer Reliability Index to the parameters of the probabilistic input vector (marginals and dependence structure) with a description for each component." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getLimitStateVariable "Accessor to the event of which the probability is calculated. Returns ------- limitStateVariable : :class:`~openturns.Event` Event of which the probability is calculated." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getMeanPointInStandardEventDomain "Accessor to the mean point in the standard event domain. Returns ------- meanPoint : :class:`~openturns.Point` Mean point of the standard space distribution restricted to the event domain: :math:`\displaystyle \frac{1}{E_1(-\beta)}\int_{\beta}^{\infty} u_1 p_1(u_1)\di{u_1}` where :math:`E_1` is the spheric univariate distribution of the standard space and :math:`\beta` the reliability index." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::setMeanPointInStandardEventDomain "Accessor to the mean point in the standard event domain. Parameters ---------- meanPoint : sequence of float Mean point of the standard space distribution restricted to the event domain: :math:`\displaystyle \frac{1}{E_1(-\beta)}\int_{\beta}^{\infty} u_1 p_1(u_1)\di{u_1}` where :math:`E_1` is the spheric univariate distribution of the standard space and :math:`\beta` the reliability index." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getPhysicalSpaceDesignPoint "Accessor to the design point in the physical space. Returns ------- designPoint : :class:`~openturns.Point` Design point in the physical space resulting from the optimization algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getStandardSpaceDesignPoint "Accessor to the design point in the standard space. Returns ------- designPoint : :class:`~openturns.Point` Design point in the standard space resulting from the optimization algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::setStandardSpaceDesignPoint "Accessor to the design point in the standard space. Parameters ---------- designPoint : sequence of float Design point in the standard space resulting from the optimization algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::getIsStandardPointOriginInFailureSpace "Accessor to know if the standard point origin is in the failure space. Returns ------- isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space." // --------------------------------------------------------------------- %feature("docstring") OT::AnalyticalResult::setIsStandardPointOriginInFailureSpace "Accessor to specify if the standard point origin is in the failure space. Parameters ---------- isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space." openturns-1.9/python/src/Analytical_doc.i.in000066400000000000000000000153651307543307100212320ustar00rootroot00000000000000%feature("docstring") OT::Analytical "Base class to evaluate the probability of failure of a system. Available constructors: Analytical(*nearestPointAlgorithm, event, physicalStartingPoint*) Parameters ---------- nearestPointAlgorithm : :class:`~openturns.OptimizationAlgorithm` Optimization algorithm used to research the design point. event : :class:`~openturns.Event` Failure event. physicalStartingPoint : sequence of float Starting point of the optimization algorithm, declared in the physical space. Notes ----- Used in reliability analysis, Analytical is a base class for the approximation methods :class:`~openturns.FORM` and :class:`~openturns.SORM` enabling to evaluate the failure probability of a system. A failure event is defined as follows : :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}` where :math:`\vect{X}` denotes a random input vector representing the sources of uncertainties, :math:`\vect{d}` is a determinist vector representing the fixed variables. :math:`g(\vect{X},\vect{d})` is the limit state function of the model separating the failure domain from the safe domain. Considering :math:`f_\vect{X}(\vect{x})` the joint probability density function of the random variables :math:`\vect{X}`, the probability of failure of the event :math:`\cD_f` is : .. math:: P_f = \int_{g(\vect{X},\vect{d})\le 0}f_\vect{X}(\vect{x})\di{\vect{x}} The analytical methods use an isoprobabilistic transformation to move from the physical space to the standard normal space (U-space) where distributions are spherical (invariant by rotation by definition), with zero mean, unit variance and unit correlation matrix. The usual isoprobabilistic transformations are the Generalized Nataf transformation and the Rosenblatt one. In that new U-space, the event has the new expression defined from the transformed limit state function of the model :math:`G : \cD_f = \{\vect{U} \in \Rset^n \, | \, G(\vect{U}\,,\,\vect{d}) \le 0\}` and its boundary : :math:`\{\vect{U} \in \Rset^n \, | \,G(\vect{U}\,,\,\vect{d}) = 0\}`. Then, the event probability :math:`P_f` rewrites : .. math:: P_f = \Prob{G(\vect{U}\,,\,\vect{d})\leq 0} = \int_{\Rset^n} \boldsymbol{1}_{G(\vect{u}\,,\,\vect{d}) \leq 0}\,f_{\vect{U}}(\vect{u})\di{\vect{u}} where :math:`f_{\vect{U}}` is the density function of the distribution in the standard space. The analytical methods rely on the assumption that most of the contribution to :math:`P_f` comes from points located in the vicinity of a particular point :math:`P^*`, the **design point**, defined in the U-space as the point located on the limit state surface verifying the event of maximum likelihood. Given the probabilistic characteristics of the U-space, :math:`P^*` has a geometrical interpretation: it is the point located on the event boundary and at minimal distance from the origin of the U-space. Thus, considering :math:`\vect{u}^*` its coordinates in the U-space, the design point is the result of the constrained optimization problem : .. math:: \vect{u}^* = argmin \{||\vect{u}|| \, | \, G(\vect{u}) = 0 \} Then the limit state surface is approximated in the standard space by a linear surface (:class:`~openturns.FORM`) or by a quadratic surface (:class:`~openturns.SORM`) at the design point in order to evaluate the failure probability. For more information on this evaluation, see the documentation associated with these two methods. The result of the optimization problem is recoverable thanks to the method :meth:`getAnalyticalResult`. The unicity and the strongness of the design point can be checked thanks to the :class:`Strong Maximum Test `. See also -------- FORM, SORM, StrongMaximumTest, Event, StandardEvent, AnalyticalResult Examples -------- >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create an OptimizationAlgorithm algorithm >>> myOptim = ot.AbdoRackwitz() >>> myAlgo = ot.Analytical(myOptim, myEvent, [50.0, 1.0, 10.0, 5.0])" // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::getAnalyticalResult "Accessor to the result. Returns ------- result : :class:`~openturns.AnalyticalResult` Result structure which contains the results of the optimisation problem." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::getNearestPointAlgorithm "Accessor to the optimization algorithm used to find the design point. Returns ------- algorithm : :class:`~openturns.OptimizationAlgorithm` Optimization algorithm used to research the design point." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::setNearestPointAlgorithm "Accessor to the optimization algorithm used to find the design point. Parameters ---------- algorithm : :class:`~openturns.OptimizationAlgorithm` Optimization algorithm used to research the design point." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::getPhysicalStartingPoint "Accessor to the starting point of the optimization algorithm. Returns ------- point : :class:`~openturns.Point` Starting point of the optimization algorithm, declared in the physical space." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::setPhysicalStartingPoint "Accessor to the starting point of the optimization algorithm. Parameters ---------- point : sequence of float Starting point of the optimization algorithm, declared in the physical space." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::getEvent "Accessor to the event of which the probability is calculated. Returns ------- event : :class:`~openturns.Event` Event of which the probability is calculated." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::setEvent "Accessor to the event of which the probability is calculated. Parameters ---------- event : :class:`~openturns.Event` Event of which the probability is calculated." // --------------------------------------------------------------------- %feature("docstring") OT::Analytical::run "Perform the research of the design point. Notes ----- Performs the research of the design point and creates a :class:`~openturns.AnalyticalResult`, the structure result which is accessible with the method :meth:`getAnalyticalResult`." openturns-1.9/python/src/ApproximationAlgorithm.i000066400000000000000000000006141307543307100224070ustar00rootroot00000000000000// SWIG file ApproximationAlgorithm.i %{ #include "openturns/ApproximationAlgorithm.hxx" %} %include ApproximationAlgorithm_doc.i OTTypedInterfaceObjectHelper(ApproximationAlgorithm) %include openturns/ApproximationAlgorithm.hxx namespace OT { %extend ApproximationAlgorithm { ApproximationAlgorithm(const ApproximationAlgorithm & other) { return new OT::ApproximationAlgorithm(other); } } } openturns-1.9/python/src/ApproximationAlgorithmImplementation.i000066400000000000000000000007061307543307100253170ustar00rootroot00000000000000// SWIG file ApproximationAlgorithmImplementation.i %{ #include "openturns/ApproximationAlgorithmImplementation.hxx" %} %include ApproximationAlgorithmImplementation_doc.i %include openturns/ApproximationAlgorithmImplementation.hxx namespace OT { %extend ApproximationAlgorithmImplementation { ApproximationAlgorithmImplementation(const ApproximationAlgorithmImplementation & other) { return new OT::ApproximationAlgorithmImplementation(other); } } } openturns-1.9/python/src/ApproximationAlgorithmImplementationFactory.i000066400000000000000000000007761307543307100266560ustar00rootroot00000000000000// SWIG file ApproximationAlgorithmImplementationFactory.i %{ #include "openturns/ApproximationAlgorithmImplementationFactory.hxx" %} %include ApproximationAlgorithmImplementationFactory_doc.i %include openturns/ApproximationAlgorithmImplementationFactory.hxx namespace OT { %extend ApproximationAlgorithmImplementationFactory { ApproximationAlgorithmImplementationFactory(const ApproximationAlgorithmImplementationFactory & other) { return new OT::ApproximationAlgorithmImplementationFactory(other); } } } openturns-1.9/python/src/ApproximationAlgorithmImplementationFactory_doc.i.in000066400000000000000000000015771307543307100301100ustar00rootroot00000000000000%feature("docstring") OT::ApproximationAlgorithmImplementation "Approximation algorithm implementation factory. Available constructor: ApproximationAlgorithmImplementationFactory(*ApproxAlgoImpFac*) Parameters ---------- ApproxAlgoImpFac : ApproximationAlgorithmImplementationFactory An ApproximationAlgorithmImplementationFactory which is a :class:`~openturns.PenalizedLeastSquaresAlgorithmFactory` or a :class:`~openturns.LeastSquaresMetaModelSelectionFactory`. Notes ----- It represents a generic class (virtual) for different factories like :class:`~openturns.PenalizedLeastSquaresAlgorithmFactory` or :class:`~openturns.LeastSquaresMetaModelSelectionFactory` This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`. See also -------- PenalizedLeastSquaresAlgorithmFactory, LeastSquaresMetaModelSelectionFactory"openturns-1.9/python/src/ApproximationAlgorithmImplementation_doc.i.in000066400000000000000000000076001307543307100265510ustar00rootroot00000000000000%define OT_ApproximationAlgorithm_doc "Approximation algorithm. See also -------- LeastSquaresStrategy, ApproximationAlgorithmImplementationFactory, LeastSquaresMetaModelSelectionFactory Notes ----- The ApproximationAlgorithm is built from an approximation algorithm implementation factory which is a :class:`~openturns.ApproximationAlgorithmImplementationFactory` or a :class:`~openturns.LeastSquaresMetaModelSelectionFactory`. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation OT_ApproximationAlgorithm_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getVerbose_doc "Accessor to the verbosity flag. Returns ------- v : bool. Verbosity" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getVerbose OT_ApproximationAlgorithm_getVerbose_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_setVerbose_doc "Accessor to the verbosity flag. Parameters ---------- v : bool Enable or disable the verbosity." %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::setVerbose OT_ApproximationAlgorithm_setVerbose_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getCoefficients_doc "Accessor to the coefficients. Returns ------- coefficients : :class:`~openturns.Point` The coefficients" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getCoefficients OT_ApproximationAlgorithm_getCoefficients_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getPsi_doc "Accessor to the basis. Returns ------- coefficients : :class:`~openturns.Basis` The basis" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getPsi OT_ApproximationAlgorithm_getPsi_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getRelativeError_doc "Accessor to the coefficients. Returns ------- relativeError : float The relative error" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getRelativeError OT_ApproximationAlgorithm_getRelativeError_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getResidual_doc "Accessor to the coefficients. Returns ------- coefficients : float The residual" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getResidual OT_ApproximationAlgorithm_getResidual_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getWeight_doc "Accessor to the weights. Returns ------- weight : :class:`~openturns.Point` Output weights" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getWeight OT_ApproximationAlgorithm_getWeight_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getX_doc "Accessor to the input sample. Returns ------- x : :class:`~openturns.Sample` Input sample" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getX OT_ApproximationAlgorithm_getX_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_getY_doc "Accessor to the output sample. Returns ------- y : :class:`~openturns.Sample` Input sample" %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::getY OT_ApproximationAlgorithm_getY_doc // --------------------------------------------------------------------- %define OT_ApproximationAlgorithm_run_doc "Run the algorithm." %enddef %feature("docstring") OT::ApproximationAlgorithmImplementation::run OT_ApproximationAlgorithm_run_doc openturns-1.9/python/src/ApproximationAlgorithm_doc.i.in000066400000000000000000000022261307543307100236420ustar00rootroot00000000000000// ApproximationAlgorithm docstrings are defined in ApproximationAlgorithmImplementation_doc.i.in %feature("docstring") OT::ApproximationAlgorithm OT_ApproximationAlgorithm_doc %feature("docstring") OT::ApproximationAlgorithm::getVerbose OT_ApproximationAlgorithm_getVerbose_doc %feature("docstring") OT::ApproximationAlgorithm::setVerbose OT_ApproximationAlgorithm_setVerbose_doc %feature("docstring") OT::ApproximationAlgorithm::getCoefficients OT_ApproximationAlgorithm_getCoefficients_doc %feature("docstring") OT::ApproximationAlgorithm::getX OT_ApproximationAlgorithm_getX_doc %feature("docstring") OT::ApproximationAlgorithm::getY OT_ApproximationAlgorithm_getY_doc %feature("docstring") OT::ApproximationAlgorithm::getResidual OT_ApproximationAlgorithm_getResidual_doc %feature("docstring") OT::ApproximationAlgorithm::getRelativeError OT_ApproximationAlgorithm_getRelativeError_doc %feature("docstring") OT::ApproximationAlgorithm::getWeight OT_ApproximationAlgorithm_getWeight_doc %feature("docstring") OT::ApproximationAlgorithm::getPsi OT_ApproximationAlgorithm_getPsi_doc %feature("docstring") OT::ApproximationAlgorithm::run OT_ApproximationAlgorithm_run_doc openturns-1.9/python/src/ArchimedeanCopula.i000066400000000000000000000004561307543307100212560ustar00rootroot00000000000000// SWIG file ArchimedeanCopula.i %{ #include "openturns/ArchimedeanCopula.hxx" %} %include ArchimedeanCopula_doc.i %include openturns/ArchimedeanCopula.hxx namespace OT { %extend ArchimedeanCopula { ArchimedeanCopula(const ArchimedeanCopula & other) { return new OT::ArchimedeanCopula(other); } } } openturns-1.9/python/src/ArchimedeanCopula_doc.i.in000066400000000000000000000047551307543307100225160ustar00rootroot00000000000000%feature("docstring") OT::ArchimedeanCopula "Base class for bivariate Archimedean copulas. Notes ----- The bivariate Archimedean copulas are defined by: .. math:: C(u_1, u_2; \theta) = \varphi^{-1}(\varphi(u_1; \theta) + \varphi(u_2; \theta); \theta) where :math:`\varphi` is the generator of the copula, a continous, strictly decreasing and convex function from :math:`[0, 1]\times \theta` to :math:`[0, \infty)` such that :math:`\varphi(1; \theta)=0`. :math:`\varphi^{-1}` is the pseudo-inverse of the generator function defined by: .. math:: \varphi^{-1}(t; \theta) = \left\{ \begin{array}{ll} \displaystyle \varphi^{-1}(t; \theta) & \text{ if } 0 \leq t \leq \varphi(0; \theta)\\ \displaystyle 0 & \text{ if } \varphi(0; \theta) \leq t \leq \infty \end{array} \right. An ArchimedeanCopula object can be used only through its derived classes: - :class:`~openturns.AliMikhailHaqCopula` - :class:`~openturns.ClaytonCopula` - :class:`~openturns.FrankCopula` - :class:`~openturns.GumbelCopula` See also -------- Copula" // --------------------------------------------------------------------- %feature("docstring") OT::ArchimedeanCopula::computeArchimedeanGenerator "Compute the Archimedean generator :math:`\varphi`. Parameters ---------- t : float Returns ------- result : float The Archimedean generator :math:`\varphi`." // --------------------------------------------------------------------- %feature("docstring") OT::ArchimedeanCopula::computeArchimedeanGeneratorDerivative "Compute the derivative of the Archimedean generator. Parameters ---------- t : float Returns ------- result : float The derivative of the Archimedean generator :math:`\varphi`." // --------------------------------------------------------------------- %feature("docstring") OT::ArchimedeanCopula::computeArchimedeanGeneratorSecondDerivative "Compute the seconde derivative of the Archimedean generator. Parameters ---------- t : float Returns ------- result : float The seconde derivative of the Archimedean generator :math:`\varphi`." // --------------------------------------------------------------------- %feature("docstring") OT::ArchimedeanCopula::computeInverseArchimedeanGenerator "Compute the inverse of the Archimedean generator. Parameters ---------- t : float Returns ------- result : float :math:`\varphi^{-1}` the inverse of the Archimedean generator."openturns-1.9/python/src/Arcsine.i000066400000000000000000000003361307543307100172730ustar00rootroot00000000000000// SWIG file Arcsine.i %{ #include "openturns/Arcsine.hxx" %} %include Arcsine_doc.i %include openturns/Arcsine.hxx namespace OT { %extend Arcsine { Arcsine(const Arcsine & other) { return new OT::Arcsine(other); } } } openturns-1.9/python/src/ArcsineFactory.i000066400000000000000000000004261307543307100206230ustar00rootroot00000000000000// SWIG file ArcsineFactory.i %{ #include "openturns/ArcsineFactory.hxx" %} %include ArcsineFactory_doc.i %include openturns/ArcsineFactory.hxx namespace OT { %extend ArcsineFactory { ArcsineFactory(const ArcsineFactory & other) { return new OT::ArcsineFactory(other); } } } openturns-1.9/python/src/ArcsineFactory_doc.i.in000066400000000000000000000006301307543307100220520ustar00rootroot00000000000000%feature("docstring") OT::ArcsineFactory "Arcsine factory. Available constructor: ArcsineFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle\Hat{a} = \Hat{\mu}_x - \Hat{\sigma}_x \sqrt{2}\\ \displaystyle\Hat{b} = \Hat{\mu}_x + \Hat{\sigma}_x \sqrt{2} \end{eqnarray*} See also -------- DistributionFactory, Arcsine" openturns-1.9/python/src/ArcsineMuSigma.i000066400000000000000000000004251307543307100205550ustar00rootroot00000000000000// SWIG file ArcsineMuSigma.i %{ #include "openturns/ArcsineMuSigma.hxx" %} %include ArcsineMuSigma_doc.i %include openturns/ArcsineMuSigma.hxx namespace OT{ %extend ArcsineMuSigma { ArcsineMuSigma(const ArcsineMuSigma & other) { return new OT::ArcsineMuSigma(other); } } } openturns-1.9/python/src/ArcsineMuSigma_doc.i.in000066400000000000000000000014571307543307100220150ustar00rootroot00000000000000%feature("docstring") OT::ArcsineMuSigma "Arcsine distribution parameters. Available constructors: ArcsineMuSigma(*mu=1.0, sigma=1.0*) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. Notes ----- The native parameters are defined as follows: .. math:: a &= \mu - \sigma \sqrt{2} \\ b &= \mu + \sigma \sqrt{2} See also -------- Arcsine Examples -------- Create the parameters of the Arcsine distribution: >>> import openturns as ot >>> parameters = ot.ArcsineMuSigma(8.4, 2.25) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [5.21802,11.582] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 1 1 ] [ -1.41421 1.41421 ]]" openturns-1.9/python/src/Arcsine_doc.i.in000066400000000000000000000063021307543307100205240ustar00rootroot00000000000000%feature("docstring") OT::Arcsine "Arcsine distribution. Available constructors: Arcsine(*a=-1.0, b=1.0*) Parameters ---------- a : float lower bound. b : float upper bound, :math:`b > a` Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{\pi \sqrt{(x - a)(b - x)}}, \quad x \in [a, b] with :math:`a < b`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{a + b}{2} \\ \Var{X} & = & \frac{(b - a)^2}{8} \end{eqnarray*} It is possible to create an Arcsine distribution from the alternative parametrization :math:`(\mu, \sigma)`: see :class:`~openturns.ArcsineMuSigma`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization :math:`(\mu, \sigma)` only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(a, b)` Examples -------- Create a distribution from its native parameters :math:`(a, b)`: >>> import openturns as ot >>> myDist = ot.Arcsine(2.0, 3.0) Create a it from the alternative parametrization :math:`(\mu, \sigma)`: >>> myDist2 = ot.Arcsine() >>> myDist2.setParameter(ot.ArcsineMuSigma()([2.5, 0.35])) Create it from :math:`(\mu, \sigma)` and keep that parametrization for the remaining study: >>> myParam = ot.ArcsineMuSigma(2.5, 0.35) >>> myDist3 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::getB "Accessor to the distribution's upper bound. Returns ------- b : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::setA "Accessor to the distribution's lower bound. Parameters ---------- a : float, :math:`a < b` Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::setB "Accessor to the distribution's upper bound. Parameters ---------- b : float, :math:`a < b` Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::setMu "Accessor to the distribution's mean. Parameters ---------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Arcsine::setSigma "Accessor to the distribution's standard deviation. Parameters ---------- sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/Axial.i000066400000000000000000000003161307543307100167430ustar00rootroot00000000000000// SWIG file Axial.i %{ #include "openturns/Axial.hxx" %} %include Axial_doc.i %include openturns/Axial.hxx namespace OT { %extend Axial { Axial(const Axial & other) { return new OT::Axial(other); } } } openturns-1.9/python/src/Axial_doc.i.in000066400000000000000000000026711307543307100202030ustar00rootroot00000000000000%feature("docstring") OT::Axial "Axial design of experiments. Available constructor: Axial(*center, levels*) Axial(*dimension, levels*) Parameters ---------- center : sequence of float Center of the design of experiments. If not specified, the design of experiments is centered on :math:`\vect{0} \in \Rset^n`. levels : sequence of float of dimension :math:`n_{level}` The discretisation of directions (the same for each one), without any consideration of unit. dimension : positive int Dimension :math:`n` of the space where the design of experiments is created. Notes ----- Axial is a stratified design of experiments enabling to generate a pattern with points only along the axes. It is not convenient to model interactions between variables. The axial pattern is obtained by discretizing each direction according to specified levels, symmetrically with respect to the center of the design of experiments. The number of points generated is :math:`1 + 2 n_{level}n`. In order to scale each direction and translate the grid structure onto the proper center, use the operator :math:`*=` and :math:`+=` of :class:`~openturns.Sample`. See also -------- StratifiedExperiment Examples -------- >>> import openturns as ot >>> levels = [4.0, 2.0, 7.0] >>> myCenteredReductedGrid = ot.Axial(2, levels) >>> mySample = myCenteredReductedGrid.generate() >>> # Translate the grid >>> mySample+=4 >>> # Scale each direction >>> mySample*=2" openturns-1.9/python/src/BarPlot.i000066400000000000000000000003361307543307100172520ustar00rootroot00000000000000// SWIG file BarPlot.i %{ #include "openturns/BarPlot.hxx" %} %include BarPlot_doc.i %include openturns/BarPlot.hxx namespace OT { %extend BarPlot { BarPlot(const BarPlot & other) { return new OT::BarPlot(other); } } } openturns-1.9/python/src/BarPlot_doc.i.in000066400000000000000000000031061307543307100205020ustar00rootroot00000000000000%feature("docstring") OT::BarPlot "BarPlot. Available constructors: BarPlot(*data, origin, legend=' '*) BarPlot(*data, origin, color, fillStyle, lineStyle, legend=' '*) BarPlot(*data, origin, color, fillStyle, lineStyle, lineWidth, legend=' '*) Parameters ---------- data : 2-d sequence of float Data from which the BarPlot is built, must be of dimension 2: the discontinuous points and their corresponding height. origin : float Scalar defining where the BarPlot begins. legend : str Legend of the BarPlot. color : str Color of the curve. If not specified, by default it is 'blue'. fillStyle : str Fill style of the surfaces. If not specified, by default it is 'solid'. lineStyle : str Style of the curve. If not specified, by default it is 'solid'. lineWidth : int Width of the curve. If not specified, by default it is 1. Examples -------- >>> import openturns as ot >>> from math import floor >>> # Create data >>> myDistribution = ot.Normal(0.5, 2.0) >>> sample = myDistribution.getSample(10) >>> minSample = sample.getMin()[0] >>> maxSample = sample.getMax()[0] + 0.1 >>> nBars = 4 >>> data = ot.Sample(nBars, [(maxSample - minSample) / nBars, 0]) >>> for i in range(10): ... index = int(floor((sample[i, 0] - minSample) / (maxSample - minSample) * nBars)) ... data[index, 1] += 1 >>> # Create an empty graph >>> myGraph = ot.Graph('A barplot', 'Realizations', 'Frequency', True, 'topright') >>> # Create the barplot >>> myBarPlot = ot.BarPlot(data, data.getMin()[0], 'red', 'shaded', 'dashed', 'Normal histogram') >>> myGraph.add(myBarPlot)" openturns-1.9/python/src/BaseAlgoTemplateDefs.i000066400000000000000000000003331307543307100216570ustar00rootroot00000000000000// SWIG file BaseAlgoTemplateDefs.i %template(ApproximationAlgorithmImplementationPointer) OT::Pointer; %template(FFTImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseCommonTemplateDefs.i000066400000000000000000000004251307543307100222270ustar00rootroot00000000000000// SWIG file BaseCommonTemplateDefs.i %template(ComparisonOperatorImplementationPointer) OT::Pointer; %template(PersistentObjectPointer) OT::Pointer; %template(StorageManagerPointer) OT::Pointer; openturns-1.9/python/src/BaseDiffTemplateDefs.i000066400000000000000000000000451307543307100216450ustar00rootroot00000000000000// SWIG file BaseDiffTemplateDefs.i openturns-1.9/python/src/BaseExperimentTemplateDefs.i000066400000000000000000000003571307543307100231230ustar00rootroot00000000000000// SWIG file BaseExperimentTemplateDefs.i %template(ExperimentImplementationPointer) OT::Pointer; %template(CombinatorialGeneratorImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseFuncCollection.i000066400000000000000000000105251307543307100214120ustar00rootroot00000000000000// SWIG file BaseFuncCollection.i %{ #include "openturns/PythonEvaluation.hxx" #include "openturns/PythonGradient.hxx" #include "openturns/PythonHessian.hxx" namespace OT { template <> struct traitsPythonType< OT::Function > { typedef _PyObject_ Type; }; template <> inline bool canConvert< _PyObject_, OT::Function >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIGTYPE_p_OT__Function, 0))) { OT::Function * p_nmf = reinterpret_cast< OT::Function * >(ptr); return p_nmf != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FunctionImplementation, 0))) { OT::FunctionImplementation * p_impl = reinterpret_cast< OT::FunctionImplementation * >(ptr); return p_impl != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >(ptr); return p_impl != NULL && !p_impl->isNull(); } else { return PyCallable_Check(pyObj); } return false; } template <> inline OT::Function convert< _PyObject_, OT::Function >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIGTYPE_p_OT__Function, 0))) { OT::Function * p_nmf = reinterpret_cast< OT::Function * >(ptr); return *p_nmf; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FunctionImplementation, 0))) { OT::FunctionImplementation * p_impl = reinterpret_cast< OT::FunctionImplementation * >(ptr); return *p_impl; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >(ptr); return **p_impl; } else if (!PyCallable_Check(pyObj)) { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object (function or class) - can not be convertible to a Function"; } OT::Function pythonFunction(new OT::FunctionImplementation(new OT::PythonEvaluation(pyObj))); if (PyObject_HasAttrString( pyObj, const_cast("_gradient"))) { pythonFunction.setGradient(new OT::PythonGradient(pyObj)); } if (PyObject_HasAttrString(pyObj, const_cast("_hessian"))) { pythonFunction.setHessian(new OT::PythonHessian(pyObj)); } return pythonFunction; } template <> struct traitsPythonType< OT::Basis > { typedef _PyObject_ Type; }; template <> inline bool canConvert< _PyObject_, OT::Basis >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIGTYPE_p_OT__Basis, 0))) { OT::Basis * p_nmf = reinterpret_cast< OT::Basis * >(ptr); return p_nmf != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__BasisImplementation, 0 ))) { OT::BasisImplementation * p_impl = reinterpret_cast< OT::BasisImplementation * >(ptr); return p_impl != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >(ptr); return p_impl != NULL && !p_impl->isNull(); } // Case of Collection? return false; } template <> inline OT::Basis convert< _PyObject_, OT::Basis >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__Basis, 0))) { OT::Basis * p_nmf = reinterpret_cast< OT::Basis * >(ptr); return *p_nmf; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__BasisImplementation, 0))) { OT::BasisImplementation * p_impl = reinterpret_cast< OT::BasisImplementation * >(ptr); return *p_impl; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >(ptr); return **p_impl; } // Case of Collection? throw OT::NotYetImplementedException(HERE) << "convert< _PyObject_, OT::Basis >"; } } /* namespace OT */ %} openturns-1.9/python/src/BaseFuncTemplateDefs.i000066400000000000000000000007311307543307100216720ustar00rootroot00000000000000// SWIG file BaseFuncTemplateDefs.i %template(EvaluationImplementationPointer) OT::Pointer; %template(FunctionImplementationPointer) OT::Pointer; %template(GradientImplementationPointer) OT::Pointer; %template(HessianImplementationPointer) OT::Pointer; %template(UniVariatePolynomialImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseGeomTemplateDefs.i000066400000000000000000000001631307543307100216650ustar00rootroot00000000000000// SWIG file BaseGeomTemplateDefs.i %template(DomainImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseGraphTemplateDefs.i000066400000000000000000000003051307543307100220350ustar00rootroot00000000000000// SWIG file BaseGraphTemplateDefs.i %template(DrawableImplementationPointer) OT::Pointer; %template(GraphImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseOptimTemplateDefs.i000066400000000000000000000005101307543307100220620ustar00rootroot00000000000000// SWIG file BaseOptimTemplateDefs.i %template(SolverImplementationPointer) OT::Pointer; %template(OptimizationProblemImplementationPointer) OT::Pointer; %template(OptimizationAlgorithmImplementationPointer) OT::Pointer; openturns-1.9/python/src/BaseSolverTemplateDefs.i000066400000000000000000000000471307543307100222510ustar00rootroot00000000000000// SWIG file BaseSolverTemplateDefs.i openturns-1.9/python/src/BaseStatisticsTemplateDefs.i000066400000000000000000000006421307543307100231320ustar00rootroot00000000000000// SWIG file BaseStatisticsTemplateDefs.i %template(CovarianceModelImplementationPointer) OT::Pointer; %template(SpectralModelImplementationPointer) OT::Pointer; %template(SecondOrderModelImplementationPointer) OT::Pointer; %template(StationaryCovarianceModelPointer) OT::Pointer; openturns-1.9/python/src/BaseTemplateDefs.i000066400000000000000000000000411307543307100210500ustar00rootroot00000000000000// SWIG file BaseTemplateDefs.i openturns-1.9/python/src/BaseTypTemplateDefs.i000066400000000000000000000011011307543307100215430ustar00rootroot00000000000000// SWIG file BaseTypTemplateDefs.i %template(SampleImplementationPointer) OT::Pointer; %template(MatrixImplementationPointer) OT::Pointer; %template(PointPointer) OT::Pointer; %template(TensorImplementationPointer) OT::Pointer; %template(ComplexMatrixImplementationPointer) OT::Pointer; %template(HermitianMatrixCollection) OT::Collection; %template(ComplexTensorImplementationPointer) OT::Pointer; openturns-1.9/python/src/Basis.i000066400000000000000000000033401307543307100167460ustar00rootroot00000000000000// SWIG file Basis.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/Basis.hxx" %} %include BaseFuncCollection.i %typemap(in) const BasisCollection & { if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else { try { $1 = OT::buildCollectionFromPySequence< OT::Basis >( $input ); } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Basis"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const BasisCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::canConvertCollectionObjectFromPySequence< OT::Basis >( $input ); } %apply const BasisCollection & { const OT::Collection & }; %template(BasisCollection) OT::Collection; %template(BasisPersistentCollection) OT::PersistentCollection; %include Basis_doc.i OTTypedInterfaceObjectHelper(Basis) %ignore OT::Basis::operator[]; %include openturns/Basis.hxx %extend OT::Collection { OT::Collection (PyObject * pyObj) { return OT::buildCollectionFromPySequence( pyObj ); } } namespace OT { %extend Basis { Basis(const Basis & other) { return new OT::Basis(other); } UnsignedInteger __len__() const { return self->getSize(); } Basis(PyObject * pyObj) { try { OT::Pointer > p_coll = OT::buildCollectionFromPySequence( pyObj ); return new OT::Basis( *p_coll ); } catch (OT::InvalidArgumentException &) { return new OT::Basis(OT::convert(pyObj)); } } } // Basis } // OT openturns-1.9/python/src/BasisFactory.i000066400000000000000000000004061307543307100202760ustar00rootroot00000000000000// SWIG file BasisFactory.i %{ #include "openturns/BasisFactory.hxx" %} %include BasisFactory_doc.i %include openturns/BasisFactory.hxx namespace OT { %extend BasisFactory { BasisFactory(const BasisFactory & other) { return new OT::BasisFactory(other); } } } openturns-1.9/python/src/BasisFactory_doc.i.in000066400000000000000000000015541307543307100215350ustar00rootroot00000000000000%feature("docstring") OT::BasisFactory "Basis factory to construct the regression basis. Available constructors: BasisFactory() BasisFactory(*orthogUniVarPolFactory*) Parameters ---------- orthogUniVarPolFactory : :class:`~openturns.OrthogonalUniVariatePolynomialFactory` Factory that builds particular univariate polynomial (e.g. Hermite, Legendre, Laguerre, ...). See also -------- ConstantBasisFactory, LinearBasisFactory, QuadraticBasisFactory Notes ----- BasisFactory is the interface of the OrthogonalUniVariatePolynomialFactory implementation. It represents the factory that allows the construction of any univariate orthonormal polynomial with any degree." // --------------------------------------------------------------------- %feature("docstring") OT::BasisFactory::build "Build the basis. Returns ------- basis : :class:`~openturns.Basis`." openturns-1.9/python/src/BasisImplementation.i000066400000000000000000000005541307543307100216600ustar00rootroot00000000000000// SWIG file BasisImplementation.i %{ #include "openturns/BasisImplementation.hxx" %} %include BasisImplementation_doc.i %ignore OT::BasisImplementation::operator[]; %include openturns/BasisImplementation.hxx namespace OT { %extend BasisImplementation { BasisImplementation(const BasisImplementation & other) { return new OT::BasisImplementation(other); } } } openturns-1.9/python/src/BasisImplementation_doc.i.in000066400000000000000000000075571307543307100231240ustar00rootroot00000000000000%define OT_Basis_doc "Basis. Available constructors: Basis(*functionsColl*) Basis(*size*) Parameters ---------- functionsColl : list of :class:`~openturns.Function` Functions constituting the Basis. size : int Size of the Basis. Examples -------- >>> import openturns as ot >>> dimension = 3 >>> input = ['x0', 'x1', 'x2'] >>> functions = [] >>> for i in range(dimension): ... functions.append(ot.SymbolicFunction(input, [input[i]])) >>> basis = ot.Basis(functions)" %enddef %feature("docstring") OT::BasisImplementation OT_Basis_doc // --------------------------------------------------------------------- %define OT_Basis_add_doc "Add an element in the Basis. Parameters ---------- function : :class:`~openturns.Function` Function added in the Basis. Examples -------- >>> import openturns as ot >>> dimension = 3 >>> input = ['x0', 'x1', 'x2'] >>> functions = [] >>> for i in range(2): ... functions.append(ot.SymbolicFunction(input, [input[i]])) >>> basis = ot.Basis(functions) >>> basis.add(ot.SymbolicFunction(input, [input[2]]))" %enddef %feature("docstring") OT::BasisImplementation::add OT_Basis_add_doc // --------------------------------------------------------------------- %define OT_Basis_build_doc "Build the element of the given index. Parameters ---------- index : int, :math:`index \geq 0` Index of an element of the Basis. Returns ------- function : :class:`~openturns.Function` The function at the index *index* of the Basis. Examples -------- >>> import openturns as ot >>> dimension = 3 >>> input = ['x0', 'x1', 'x2'] >>> functions = [] >>> for i in range(dimension): ... functions.append(ot.SymbolicFunction(input, [input[i]])) >>> basis = ot.Basis(functions) >>> print(basis.build(0).getEvaluation()) [x0,x1,x2]->[x0]" %enddef %feature("docstring") OT::BasisImplementation::build OT_Basis_build_doc // --------------------------------------------------------------------- %define OT_Basis_getDimension_doc "Get the dimension of the Basis. Returns ------- dimension : int Dimension of the Basis." %enddef %feature("docstring") OT::BasisImplementation::getDimension OT_Basis_getDimension_doc // --------------------------------------------------------------------- %define OT_Basis_getSize_doc "Get the size of the Basis. Returns ------- size : int Size of the Basis." %enddef %feature("docstring") OT::BasisImplementation::getSize OT_Basis_getSize_doc // --------------------------------------------------------------------- %define OT_Basis_getSubBasis_doc "Get a sub-basis of the Basis. Parameters ---------- indices : list of int Indices of the terms of the Basis put in the sub-basis. Returns ------- subBasis : list of :class:`~openturns.Function` Functions defining a sub-basis. Examples -------- >>> import openturns as ot >>> dimension = 3 >>> input = ['x0', 'x1', 'x2'] >>> functions = [] >>> for i in range(dimension): ... functions.append(ot.SymbolicFunction(input, [input[i]])) >>> basis = ot.Basis(functions) >>> subbasis = basis.getSubBasis([1]) >>> print(subbasis[0].getEvaluation()) [x0,x1,x2]->[x1]" %enddef %feature("docstring") OT::BasisImplementation::getSubBasis OT_Basis_getSubBasis_doc // --------------------------------------------------------------------- %define OT_Basis_isFunctional_doc "Tell whether the basis is functional. Returns ------- isOrthogonal : bool `True` if the basis is functional i.e. if its terms are a solution to an equation (e.g. a basis made up of Legendre functions)." %enddef %feature("docstring") OT::BasisImplementation::isFunctional OT_Basis_isFunctional_doc // --------------------------------------------------------------------- %define OT_Basis_isOrthogonal_doc "Tell whether the basis is orthogonal. Returns ------- isOrthogonal : bool `True` if the basis is orthogonal." %enddef %feature("docstring") OT::BasisImplementation::isOrthogonal OT_Basis_isOrthogonal_doc openturns-1.9/python/src/BasisSequence.i000066400000000000000000000010371307543307100204400ustar00rootroot00000000000000// SWIG file BasisSequence.i %{ #include "openturns/BasisSequence.hxx" %} %include BasisSequence_doc.i OTTypedInterfaceObjectHelper(BasisSequence) %template(BasisSequenceImplementationTypedCollectionInterfaceObject) OT::TypedCollectionInterfaceObject; namespace OT { %ignore BasisSequence::operator PersistentCollection () const; } %include openturns/BasisSequence.hxx namespace OT { %extend BasisSequence { BasisSequence(const BasisSequence & other) { return new OT::BasisSequence(other); } } } openturns-1.9/python/src/BasisSequenceFactory.i000066400000000000000000000005721307543307100217730ustar00rootroot00000000000000// SWIG file BasisSequenceFactory.i %{ #include "openturns/BasisSequenceFactory.hxx" %} %include BasisSequenceFactory_doc.i OTTypedInterfaceObjectHelper(BasisSequenceFactory) %include openturns/BasisSequenceFactory.hxx namespace OT { %extend BasisSequenceFactory { BasisSequenceFactory(const BasisSequenceFactory & other) { return new OT::BasisSequenceFactory(other); } } } openturns-1.9/python/src/BasisSequenceFactoryImplementation.i000066400000000000000000000006661307543307100247050ustar00rootroot00000000000000// SWIG file BasisSequenceFactoryImplementation.i %{ #include "openturns/BasisSequenceFactoryImplementation.hxx" %} %include BasisSequenceFactoryImplementation_doc.i %include openturns/BasisSequenceFactoryImplementation.hxx namespace OT { %extend BasisSequenceFactoryImplementation { BasisSequenceFactoryImplementation(const BasisSequenceFactoryImplementation & other) { return new OT::BasisSequenceFactoryImplementation(other); } } } openturns-1.9/python/src/BasisSequenceFactoryImplementation_doc.i.in000066400000000000000000000035461307543307100261370ustar00rootroot00000000000000%define OT_BasisSequenceFactory_doc "Basis sequence factory. Available constructors: BasisSequenceFactory(*basisSeqFacImp*) Parameters ---------- basisSeqFacImp : a BasisSequenceFactoryImplementation See also -------- LARS Notes ----- BasisSequenceFactory is the interface of the BasisSequenceFactoryImplementation. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." %enddef %feature("docstring") OT::BasisSequenceFactoryImplementation OT_BasisSequenceFactory_doc // --------------------------------------------------------------------- %define OT_BasisSequence_getMaximumRelativeConvergence_doc "Accessor to the stopping criterion on the L1-norm of the coefficients. Returns ------- e : float Stopping criterion." %enddef %feature("docstring") OT::BasisSequence::getMaximumRelativeConvergence OT_BasisSequence_getMaximumRelativeConvergence_doc // --------------------------------------------------------------------- %define OT_BasisSequence_getVerbose_doc "Accessor to the verbosity. Returns ------- v : bool. Verbosity" %enddef %feature("docstring") OT::BasisSequence::getVerbose OT_BasisSequence_getVerbose_doc // --------------------------------------------------------------------- %define OT_BasisSequence_setMaximumRelativeConvergence_doc "Accessor to the stopping criterion on the L1-norm of the coefficients. Parameters ---------- e : float Stopping criterion." %enddef %feature("docstring") OT::BasisSequence::setMaximumRelativeConvergence OT_BasisSequence_setMaximumRelativeConvergence_doc // --------------------------------------------------------------------- %define OT_BasisSequence_setVerbose_doc "Accessor to the verbosity. Parameters ---------- v : bool Enable or disable the verbosity." %enddef %feature("docstring") OT::BasisSequence::setVerbose OT_BasisSequence_setVerbose_docopenturns-1.9/python/src/BasisSequenceFactory_doc.i.in000066400000000000000000000011411307543307100232160ustar00rootroot00000000000000// BasisSequenceFactory docstrings are defined in BasisSequenceFactoryImplementation_doc.i.in %feature("docstring") OT::BasisSequenceFactory OT_BasisSequenceFactory_doc %feature("docstring") OT::BasisSequenceFactory::getMaximumRelativeConvergence OT_BasisSequence_getMaximumRelativeConvergence_doc %feature("docstring") OT::BasisSequenceFactory::getVerbose OT_BasisSequence_getVerbose_doc %feature("docstring") OT::BasisSequenceFactory::setMaximumRelativeConvergence OT_BasisSequence_setMaximumRelativeConvergence_doc %feature("docstring") OT::BasisSequenceFactory::setVerbose OT_BasisSequence_setVerbose_docopenturns-1.9/python/src/BasisSequenceImplementation.i000066400000000000000000000005761307543307100233550ustar00rootroot00000000000000// SWIG file BasisSequenceImplementation.i %{ #include "openturns/BasisSequenceImplementation.hxx" %} %include BasisSequenceImplementation_doc.i %include openturns/BasisSequenceImplementation.hxx namespace OT { %extend BasisSequenceImplementation { BasisSequenceImplementation(const BasisSequenceImplementation & other) { return new OT::BasisSequenceImplementation(other); } } } openturns-1.9/python/src/BasisSequenceImplementation_doc.i.in000066400000000000000000000005611307543307100246010ustar00rootroot00000000000000%define OT_BasisSequence_doc "Sequence of basis. Available constructors: BasisSequence(*basis*) BasisSequence(*basisSeqImp*) Parameters ---------- basis : a :class:`~openturns.Basis` A Basis. basisSeqImp : BasisSequenceImplementation A BasisSequenceImplementation." %enddef %feature("docstring") OT::BasisSequenceImplementation OT_BasisSequence_doc openturns-1.9/python/src/BasisSequence_doc.i.in000066400000000000000000000002161307543307100216700ustar00rootroot00000000000000// BasisSequence docstrings are defined in BasisSequenceImplementation_doc.i.in %feature("docstring") OT::BasisSequence OT_BasisSequence_doc openturns-1.9/python/src/Basis_doc.i.in000066400000000000000000000010711307543307100201770ustar00rootroot00000000000000// Basis docstrings are defined in BasisImplementation_doc.i.in %feature("docstring") OT::Basis OT_Basis_doc %feature("docstring") OT::Basis::add OT_Basis_add_doc %feature("docstring") OT::Basis::build OT_Basis_build_doc %feature("docstring") OT::Basis::getDimension OT_Basis_getDimension_doc %feature("docstring") OT::Basis::getSize OT_Basis_getSize_doc %feature("docstring") OT::Basis::getSubBasis OT_Basis_getSubBasis_doc %feature("docstring") OT::Basis::isFunctional OT_Basis_isFunctional_doc %feature("docstring") OT::Basis::isOrthogonal OT_Basis_isOrthogonal_docopenturns-1.9/python/src/BayesDistribution.i000066400000000000000000000004561307543307100213550ustar00rootroot00000000000000// SWIG file BayesDistribution.i %{ #include "openturns/BayesDistribution.hxx" %} %include BayesDistribution_doc.i %include openturns/BayesDistribution.hxx namespace OT { %extend BayesDistribution { BayesDistribution(const BayesDistribution & other) { return new OT::BayesDistribution(other); } } } openturns-1.9/python/src/BayesDistribution_doc.i.in000066400000000000000000000124361307543307100226100ustar00rootroot00000000000000%feature("docstring") OT::BayesDistribution "Bayes distribution. Helper class for defining the distribution of the random vector :math:`(\vect{X},\vect{Y})` where :math:`\vect{Y}` follows the distribution :math:`\mathcal{L}_{\vect{Y}}` and :math:`\vect{X}|\vect{\Theta}` follows the distribution :math:`\mathcal{L}_{\vect{X}|\vect{\Theta}}` where :math:`\vect{\Theta}=g(\vect{Y})` with :math:`g` a given function of input dimension the dimension of :math:`\mathcal{L}_{\vect{Y}}` and output dimension the dimension of :math:`\vect{\Theta}`. Available constructors: BayesDistribution(*conditionedDist, conditioningDist, linkFunction*) BayesDistribution(*conditionedDist, conditioningDist*) BayesDistribution() Parameters ---------- conditionedDist : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. In the `BayesDistribution()` constructor, `conditionedDist` is taken equal to :math:`\vect{X} | \vect{\Theta} \sim` :class:`~openturns.Uniform` :math:`(\vect{\Theta})`. conditioningDist : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. In the `BayesDistribution()` constructor, `conditioningDist` is taken equal to :math:`\vect{Y} \sim Uniform(-1,1)`. linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. In the `BayesDistribution()` constructor, `linkFunction` is taken equal to :math:`g: \Rset \rightarrow \Rset^2`, :math:`g(y)=(y,y+1)`. In the `BayesDistribution(conditionedDist, conditioningDist)` constructor, we need :math:`p=q` and `linkFunction` is taken equal to :math:`g(\vect{y})=\vect{y}`. Notes ----- Its probability density function is defined as: .. math:: f_{(\vect{X}, \vect{Y})}(\vect{x}, \vect{y}) = f_{\vect{X}|\vect{\Theta}=g(\vect{y})}(\vect{x}|g(\vect{y})) f_{\vect{Y}}( \vect{y}) with :math:`f_{\vect{X}|\vect{\Theta}=g(\vect{y})}` the PDF of the distribution of :math:`\vect{X}|\vect{\Theta}`, where :math:`\vect{\Theta}` has been replaced by :math:`g(\vect{y})`, :math:`f_{\vect{Y}}` the PDF of :math:`\vect{Y}` and :math:`g` the linking function. With the default constructor, the resulting random vector :math:`(X,Y)` is uniformly distributed on the parallelogram which vertices are :math:`(-1,-1); (0,-1); (2,1); (1,1)`. Examples -------- Create a distribution: >>> import openturns as ot >>> conditioningDist = ot.Normal(0.0, 1.0) >>> g = ot.SymbolicFunction(['y'], ['y', '0.1+y^2']) >>> conditionedDist = ot.Normal() >>> finalDist = ot.ConditionalDistribution(conditionedDist, conditioningDist, g) Draw a sample: >>> sample = finalDist.getSample(5) " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::getConditionedDistribution "Accessor to the distribution's conditioned distribution parameter `conditionedDistribution`. Returns ------- conditionedDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::getConditioningDistribution "Accessor to the distribution's conditioned distribution parameter `conditioningDistribution`. Returns ------- conditioningDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::getLinkFunction "Accessor to the distribution's conditioned distribution parameter `linkFunction`. Returns ------- linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::setConditionedDistribution "Accessor to the distribution's conditioned distribution parameter `conditionedDistribution`. Parameters ---------- conditionedDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::setConditioningDistribution "Accessor to the distribution's conditioned distribution parameter `conditioningDistribution`. Parameters ---------- conditioningDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::BayesDistribution::setLinkFunction "Accessor to the distribution's conditioned distribution parameter `linkFunction`. Parameters ---------- linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. " openturns-1.9/python/src/Bernoulli.i000066400000000000000000000003561307543307100176440ustar00rootroot00000000000000// SWIG file Bernoulli.i %{ #include "openturns/Bernoulli.hxx" %} %include Bernoulli_doc.i %include openturns/Bernoulli.hxx namespace OT { %extend Bernoulli { Bernoulli(const Bernoulli & other) { return new OT::Bernoulli(other); } } } openturns-1.9/python/src/BernoulliFactory.i000066400000000000000000000004461307543307100211740ustar00rootroot00000000000000// SWIG file BernoulliFactory.i %{ #include "openturns/BernoulliFactory.hxx" %} %include BernoulliFactory_doc.i %include openturns/BernoulliFactory.hxx namespace OT { %extend BernoulliFactory { BernoulliFactory(const BernoulliFactory & other) { return new OT::BernoulliFactory(other); } } } openturns-1.9/python/src/BernoulliFactory_doc.i.in000066400000000000000000000002251307543307100224210ustar00rootroot00000000000000%feature("docstring") OT::BernoulliFactory "Bernoulli factory. Available constructor: BernoulliFactory() See also -------- DistributionFactory"openturns-1.9/python/src/Bernoulli_doc.i.in000066400000000000000000000023231307543307100210720ustar00rootroot00000000000000%feature("docstring") OT::Bernoulli "Bernoulli distribution. Available constructors: Bernoulli(*p=0.5*) Parameters ---------- p : float, :math:`0 \leq p \leq 1` Success probability. Notes ----- Its probability density function is defined as: .. math:: :nowrap: \begin{eqnarray*} \Prob{X = 1} & = & p \\ \Prob{X = 0} & = & 1 - p \end{eqnarray*} with :math:`0 \leq p \leq 1`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & p \\ \Var{X} & = & p\,(1 - p) \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Bernoulli(0.2) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Bernoulli::getP "Accessor to the distribution's *success probability* parameter. Returns ------- p : float Success probability." // --------------------------------------------------------------------- %feature("docstring") OT::Bernoulli::setP "Accessor to the distribution's *success probability* parameter. Parameters ---------- p : float, :math:`0 \leq p \leq 1` Success probability." openturns-1.9/python/src/BernsteinCopulaFactory.i000066400000000000000000000005261307543307100223350ustar00rootroot00000000000000// SWIG file BernsteinCopulaFactory.i %{ #include "openturns/BernsteinCopulaFactory.hxx" %} %include BernsteinCopulaFactory_doc.i %include openturns/BernsteinCopulaFactory.hxx namespace OT { %extend BernsteinCopulaFactory { BernsteinCopulaFactory(const BernsteinCopulaFactory & other) { return new OT::BernsteinCopulaFactory(other); } } } openturns-1.9/python/src/BernsteinCopulaFactory_doc.i.in000066400000000000000000000060201307543307100235620ustar00rootroot00000000000000%feature("docstring") OT::BernsteinCopulaFactory "BernsteinCopula copula factory. Available constructors: BernsteinCopulaFactory() See also -------- DistributionFactory" // --------------------------------------------------------------------- %feature("docstring") OT::BernsteinCopulaFactory::build "Build the nonparametric Bernstein copula estimator based on the empirical copula. **Available usages**: build(*sample*) build(*sample, m*) Parameters ---------- sample : 2-d sequence of float, of dimension *d* The sample of size :math:`n>0` from which the copula is estimated. m : int The number of sub-intervals in which all the edges of the unit cube :math:`[0, 1]^d` are regularly partitioned. Notes ----- If not given, the number of bins is computed by minimizing the asymptotic mean integrated squared error (AMISE), leading to .. math:: m = 1+\left\lfloor n^{\dfrac{2}{4+n}} \right\rfloor where :math:`\lfloor x \rfloor` is the largest integer less than or equal to :math:`x`. Then, the copula is estimated by a mixture of products of Beta distributions, ie its density function :math:`\hat{c}` is given by: .. math:: \forall (u_1,\hdots,u_d)\in[0,1]^d,\quad\hat{c}(u_1,\hdots,u_d) = \frac{1}{n}\sum_{i=1}^n\prod_{j=1}^d\beta_{\nu^i_j+1, m+1}(u_j) where :math:`\nu_j=\left\lfloor \dfrac{m}{n}\mathrm{rank}(X^i_j)\right\rfloor` is the index of the bin to which the normalized rank of the component :math:`j` of the observation :math:`j` belongs and :math:`\beta_{r,t}` is the density of the beta distribution supported by [0,1], see :class:`~openturns.Beta`. This estimator is called the Bernstein estimator because of the fact that, for integer shape parameters :math:`r` and :math:`t`, the density function of the beta distribution is equal to the Bernstein polynomial :math:`P_{r,t}`: .. math:: \beta_{r+1,t+1}(u)=(t+1)\binom{t}{r}u^r(1-u)^{t-r-1}=P_{r,t-r-1}(u) " // --------------------------------------------------------------------- %feature("docstring") OT::BernsteinCopulaFactory::computeBinNumber "Compute the optimal AMISE number of bins. Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the optimal AMISE bin number is computed. Notes ----- The number of bins is computed by minimizing the asymptotic mean integrated squared error (AMISE), leading to .. math:: m = 1+\left\lfloor n^{\dfrac{2}{4+n}} \right\rfloor where :math:`\lfloor x \rfloor` is the largest integer less than or equal to :math:`x`. " // --------------------------------------------------------------------- %feature("docstring") OT::ClassifierImplementation::setParallel "Accessor to the parallel flag. Parameters ---------- flag : bool Logical value telling if the classification and grading are done in parallel. " // --------------------------------------------------------------------- %feature("docstring") OT::ClassifierImplementation::isParallel "Accessor to the parallel flag. Returns ------- flag : bool Logical value telling if the parallel mode has been activated. " openturns-1.9/python/src/Beta.i000066400000000000000000000003061307543307100165570ustar00rootroot00000000000000// SWIG file Beta.i %{ #include "openturns/Beta.hxx" %} %include Beta_doc.i %include openturns/Beta.hxx namespace OT { %extend Beta { Beta(const Beta & other) { return new OT::Beta(other); } } } openturns-1.9/python/src/BetaFactory.i000066400000000000000000000003761307543307100201160ustar00rootroot00000000000000// SWIG file BetaFactory.i %{ #include "openturns/BetaFactory.hxx" %} %include BetaFactory_doc.i %include openturns/BetaFactory.hxx namespace OT { %extend BetaFactory { BetaFactory(const BetaFactory & other) { return new OT::BetaFactory(other); } } } openturns-1.9/python/src/BetaFactory_doc.i.in000066400000000000000000000006471307543307100213510ustar00rootroot00000000000000%feature("docstring") OT::BetaFactory "Beta factory. Available constructor: BetaFactory() See also -------- DistributionFactory" // --------------------------------------------------------------------- %define OT_BetaFactory_buildEstimator_doc "texte en plus dans la classe BetaFactory pour la methodebuildEstimator " %enddef %feature("docstring") OT::BetaFactory::buildEstimator OT_BetaFactory_buildEstimator_doc openturns-1.9/python/src/BetaMuSigma.i000066400000000000000000000003751307543307100200500ustar00rootroot00000000000000// SWIG file BetaMuSigma.i %{ #include "openturns/BetaMuSigma.hxx" %} %include BetaMuSigma_doc.i %include openturns/BetaMuSigma.hxx namespace OT{ %extend BetaMuSigma { BetaMuSigma(const BetaMuSigma & other) { return new OT::BetaMuSigma(other); } } } openturns-1.9/python/src/BetaMuSigma_doc.i.in000066400000000000000000000020631307543307100212760ustar00rootroot00000000000000%feature("docstring") OT::BetaMuSigma "Beta distribution parameters. Available constructors: BetaMuSigma(*mu=0.5, sigma=* :math:`1/(2\sqrt{5})` *, a=0.0, b=1.0*) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. a : float Lower bound. b : float, :math:`b > a` Upper bound. Notes ----- The native parameters are defined as follows: .. math:: t &= \frac{(b - \mu) (\mu - a)}{\sigma^2} - 1.0 \\ r &= \frac{\mu - a}{b - a} t See also -------- Beta Examples -------- Create the parameters of the Beta distribution: >>> import openturns as ot >>> parameters = ot.BetaMuSigma(0.2, 0.6, -1, 2) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [2,5,-1,2] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 2.33333 1.66667 0 0 ] [ -8 -20 0 0 ] [ -3 -5 1 0 ] [ 0.666667 3.33333 0 1 ]]" openturns-1.9/python/src/Beta_doc.i.in000066400000000000000000000106451307543307100200200ustar00rootroot00000000000000%feature("docstring") OT::Beta "Beta distribution. Available constructors: Beta(*r=2.0, t=4.0, a=-1.0, b=1.0*) Parameters ---------- r : float shape parameter :math:`r > 0` with :math:`r = t * (\mu - a) / (b - a)`. t : float shape parameter :math:`t > r` with :math:`t = (b - \mu) * (\mu - a) / \sigma^2 - 1`. a : float Lower bound. b : float, :math:`b > a` Upper bound. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{(x - a)^{r - 1} (b - x)^{t - r - 1}} {(b - a)^{t - 1} {\rm B}(r, t - r)}, \quad x \in [a, b] with :math:`r < t` and :math:`a < b` and where :math:`\rm B` denotes Euler's beta function :class:`~openturns.SpecFunc_Beta`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & a + \frac{(b - a)\,r}{t} \\ \Var{X} & = & \left(\frac{b - a}{t}\right)^2 \frac{r\,(t - r)}{t + 1} \end{eqnarray*} It is possible to create a Beta distribution from the alternative parametrization :math:`(\mu, \sigma, a, b)`: see :class:`~openturns.BetaMuSigma`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization :math:`(\mu, \sigma, a, b)` only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(r, t, a, b)`. Examples -------- Create a distribution from its native parameters :math:`(r, t, a, b)`: >>> import openturns as ot >>> myDist = ot.Beta(1.0, 2.0, 1.0, 5.0) Create a it from the alternative parametrization :math:`(\mu, \sigma, a, b)`: >>> myDist2 = ot.Beta() >>> myDist2.setParameter(ot.BetaMuSigma()([3.0, 1.15, 1.0, 5.0])) Create it from :math:`(\mu, \sigma, a, b)` and keep that parametrization for the remaining study: >>> myParam = ot.BetaMuSigma(3.0, 1.15, 1.0, 5.0) >>> myDist3 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getR "Accessor to the distribution's shape parameter :math:`r`. Returns ------- r : float Shape parameter :math:`r`." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getT "Accessor to the distribution's shape parameter :math:`t`. Returns ------- t : float Shape parameter :math:`t`." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getB "Accessor to the distribution's upper bound. Returns ------- b : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float, :math:`\sigma > 0` Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::setR "Accessor to the distribution's shape parameter :math:`r`. Parameters ---------- r : float, :math:`r > 0` Shape parameter :math:`r`." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::setT "Accessor to the distribution's shape parameter :math:`t`. Parameters ---------- t : float, :math:`t > r` Shape parameter :math:`t`." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::setA "Accessor to the distribution's lower bound. Parameters ---------- a : float, :math:`a < b` Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::setB "Accessor to the distribution's upper bound. Parameters ---------- b : float, :math:`b > a` Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Beta::setMuSigma "Accessor to the distribution's mean and standard deviation. Parameters ---------- mu : float Mean. sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/BinaryStorageManager.i000066400000000000000000000002061307543307100217470ustar00rootroot00000000000000// SWIG file BinaryStorageManager.i %{ #include "openturns/BinaryStorageManager.hxx" %} %include openturns/BinaryStorageManager.hxx openturns-1.9/python/src/Binomial.i000066400000000000000000000003461307543307100174420ustar00rootroot00000000000000// SWIG file Binomial.i %{ #include "openturns/Binomial.hxx" %} %include Binomial_doc.i %include openturns/Binomial.hxx namespace OT { %extend Binomial { Binomial(const Binomial & other) { return new OT::Binomial(other); } } } openturns-1.9/python/src/BinomialFactory.i000066400000000000000000000004361307543307100207720ustar00rootroot00000000000000// SWIG file BinomialFactory.i %{ #include "openturns/BinomialFactory.hxx" %} %include BinomialFactory_doc.i %include openturns/BinomialFactory.hxx namespace OT { %extend BinomialFactory { BinomialFactory(const BinomialFactory & other) { return new OT::BinomialFactory(other); } } } openturns-1.9/python/src/BinomialFactory_doc.i.in000066400000000000000000000002261307543307100222210ustar00rootroot00000000000000%feature("docstring") OT::BinomialFactory "Binomial factory. Available constructor: BinomialFactory() See also -------- DistributionFactory" openturns-1.9/python/src/Binomial_doc.i.in000066400000000000000000000034561307543307100207010ustar00rootroot00000000000000%feature("docstring") OT::Binomial "Binomial distribution. Available constructors: Binomial(*n=1, p=0.5*) Parameters ---------- n : int, :math:`n \in \Nset` The number of Bernoulli trials. p : float, :math:`0 \leq p \leq 1` The success probability of the Bernoulli trial. Notes ----- Its probability density function is defined as: .. math:: \Prob{X = k} = C_n^k p^k (1-p)^{n-k}, \quad \forall k \in \{0, \ldots, n\} with :math:`n \in \Nset` and :math:`0 \leq p \leq 1`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & n\,p \\ \Var{X} & = & n\,p\,(1-p) \end{eqnarray*} See Also -------- Bernoulli Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Binomial(10, 0.5) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Binomial::getP "Accessor to the success probability parameter. Returns ------- p : float The success probability of the Bernoulli trial." // --------------------------------------------------------------------- %feature("docstring") OT::Binomial::getN "Accessor to the number of trials. Returns ------- n : int The number of Bernoulli trials." // --------------------------------------------------------------------- %feature("docstring") OT::Binomial::setP "Accessor to the success probability parameter. Parameters ---------- p : float, :math:`0 \leq p \leq 1` The success probability of the Bernoulli trial." // --------------------------------------------------------------------- %feature("docstring") OT::Binomial::setN "Accessor to the number of trials. Parameters ---------- n : int, :math:`n \in \Nset` The number of Bernoulli trials." openturns-1.9/python/src/BipartiteGraph.i000066400000000000000000000030071307543307100206120ustar00rootroot00000000000000// SWIG file BipartiteGraph.i %{ #include "openturns/BipartiteGraph.hxx" #include "openturns/PythonWrappingFunctions.hxx" namespace OT { template <> inline bool canConvert< _PySequence_, Indices >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIG_TypeQuery("OT::Indices *"), 0))) { Indices * p_it = reinterpret_cast< Indices * >(ptr); return p_it != NULL; } else { return canConvertCollectionObjectFromPySequence< UnsignedInteger >(pyObj); } return false; } } %} %template(IndicesCollection) OT::Collection; %template(IndicesPersistentCollection) OT::PersistentCollection; %typemap(in) const OT::Collection & { if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else { try { $1 = OT::buildCollectionFromPySequence($input); } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Indices"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const OT::Collection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::canConvertCollectionObjectFromPySequence($input); } %include BipartiteGraph_doc.i %include openturns/BipartiteGraph.hxx namespace OT { %extend BipartiteGraph { BipartiteGraph(const BipartiteGraph & other) { return new OT::BipartiteGraph(other); } } } openturns-1.9/python/src/BipartiteGraph_doc.i.in000066400000000000000000000034101307543307100220420ustar00rootroot00000000000000%feature("docstring") OT::BipartiteGraph "Bipartite red/black graph. Available constructors: BipartiteGraph(*size=0*) BipartiteGraph(*sequence*) Parameters ---------- size : int, :math:`size \geq 0` Size of the collection. sequence : sequence of :class:`~openturns.Indices` Cliques of the red nodes. Notes ----- A bipartite graph is an undirected graph in which the nodes can be colored in two colors such that no edge has its two ends with the same colors. Here we force the :math:`n` red nodes to be numbered in consecutive order from 0 to :math:`n-1` and for each red node we give the list of black nodes that are the other end of the edges starting from this red node. Examples -------- >>> import openturns as ot Use the first constructor: >>> ot.BipartiteGraph(3) [[],[],[]] Use the second constructor: >>> graph = ot.BipartiteGraph([[1, 3], [2, 0], [5, 4]]) >>> graph [[1,3],[2,0],[5,4]] Use some functionalities: >>> graph[1] = [3, 4] >>> graph [[1,3],[3,4],[5,4]] >>> graph.add([1, 6]) >>> graph [[1,3],[3,4],[5,4],[1,6]]" // --------------------------------------------------------------------- %feature("docstring") OT::BipartiteGraph::getBlackNodes "Accessor to the graph black nodes. Returns ------- black : sequence of int, :class:`~openturns.Indices`" // --------------------------------------------------------------------- %feature("docstring") OT::BipartiteGraph::getRedNodes "Accessor to the graph red nodes. Returns ------- red : sequence of int, :class:`~openturns.Indices`" // --------------------------------------------------------------------- %feature("docstring") OT::BipartiteGraph::draw "Draw the graph. Returns ------- graph : a :class:`~openturns.Graph` View of the bipartite graph as a set of red nodes linked to black nodes." openturns-1.9/python/src/Bisection.i000066400000000000000000000003561307543307100176300ustar00rootroot00000000000000// SWIG file Bisection.i %{ #include "openturns/Bisection.hxx" %} %include Bisection_doc.i %include openturns/Bisection.hxx namespace OT { %extend Bisection { Bisection(const Bisection & other) { return new OT::Bisection(other); } } } openturns-1.9/python/src/Bisection_doc.i.in000066400000000000000000000042371307543307100210640ustar00rootroot00000000000000%feature("docstring") OT::Bisection "Bisection algorithm solver for 1D non linear equations. Available constructor: Bisection() Bisection(*absError, relError, resError, maximumFunctionEvaluation*) Parameters ---------- absError : positive float Absolute error: distance between two successive iterates at the end point. Default is :math:`10^{-5}`. relError : positive float Relative error: distance between the two last successive iterates with regards to the last iterate. Default is :math:`10^{-5}`. resError : positive float Residual error: difference between the last iterate value and the expected value. Default is :math:`10^{-8}`. maximumFunctionEvaluation : int The maximum number of evaluations of the function. Default is :math:`100`. See also -------- Solver, Brent, Secant" // --------------------------------------------------------------------- %feature("docstring") OT::Bisection::solve "Solve an equation. **Available usages**: solve(*function, value, infPoint, supPoint*) solve(*function, value, infPoint, supPoint, infValue, supValue*) Parameters ---------- function : :class:`~openturns.Function` The function of the equation :math:`function(x) = value` to be solved in the interval :math:`[infPoint, supPoint]`. value : float The value of which the function must be equal. infPoint : float Lower bound of the interval definition of the variable :math:`x`. supPoint : float Upper bound of the interval definition of the variable :math:`x`. infValue : float The value such that :math:`infValue = function(infPoint)`. It must be of opposite sign of :math:`supValue`. supValue : float The value such that :math:`supValue = function(supPoint)`. It must be of opposite sign of :math:`infValue`. Returns ------- result : float The result of the root research. Notes ----- If the function :math:`f` is continuous, the Bisection solver will converge towards a root of the equation :math:`function(x) = value` in :math:`[infPoint, supPoint]`. If not, it will converge towards either a root or a discontinuity point of :math:`f` on :math:`[infPoint, supPoint]`. Bisection guarantees a convergence. " openturns-1.9/python/src/BlendedStep.i000066400000000000000000000003761307543307100201040ustar00rootroot00000000000000// SWIG file BlendedStep.i %{ #include "openturns/BlendedStep.hxx" %} %include BlendedStep_doc.i %include openturns/BlendedStep.hxx namespace OT { %extend BlendedStep { BlendedStep(const BlendedStep & other) { return new OT::BlendedStep(other); } } } openturns-1.9/python/src/BlendedStep_doc.i.in000066400000000000000000000026341307543307100213350ustar00rootroot00000000000000%feature("docstring") OT::BlendedStep "Blended step. Available constructors: BlendedStep(*epsilon, eta=1.0*) Parameters ---------- epsilon : sequence of float Finite difference step factors for each dimension. eta : positive float, sequence of positive float with the same dimension as *epsilon* Finite difference step offsets for each dimension. Notes ----- *BlendedStep* defines a list of finite difference steps equal to: *epsilon (|x| + eta)*. See also -------- ConstantStep Examples -------- >>> import openturns as ot >>> epsilon = [1e-4, 2e-4] >>> x = [2.0]*2 >>> steps = ot.BlendedStep(epsilon) >>> print(steps(x)) [0.0003,0.0006] >>> steps = ot.BlendedStep(epsilon, 0.0) >>> print(steps(x)) [0.0002,0.0004] >>> steps = ot.BlendedStep(epsilon, [1.0, 2.0]) >>> print(steps(x)) [0.0003,0.0008] >>> steps = ot.BlendedStep(epsilon, 2.0) >>> print(steps(x)) [0.0004,0.0008]" // --------------------------------------------------------------------- %feature("docstring") OT::BlendedStep::getEta "Get the finite difference step offsets. Returns ------- eta : :class:`~openturns.Point` Finite difference step offsets for each dimension." // --------------------------------------------------------------------- %feature("docstring") OT::BlendedStep::setEta "Set the finite difference step offsets. Parameters ---------- eta : sequence of positive float Finite difference step offsets for each dimension." openturns-1.9/python/src/BootstrapExperiment.i000066400000000000000000000004761307543307100217320ustar00rootroot00000000000000// SWIG file BootstrapExperiment.i %{ #include "openturns/BootstrapExperiment.hxx" %} %include BootstrapExperiment_doc.i %include openturns/BootstrapExperiment.hxx namespace OT { %extend BootstrapExperiment { BootstrapExperiment(const BootstrapExperiment & other) { return new OT::BootstrapExperiment(other); } } } openturns-1.9/python/src/BootstrapExperiment_doc.i.in000066400000000000000000000017711307543307100231630ustar00rootroot00000000000000%feature("docstring") OT::BootstrapExperiment "Bootstrap experiment. Available constructors: BootstrapExperiment(*sample*) Parameters ---------- sample : 2-d sequence of float Points to defined a :class:`~openturns.UserDefined` distribution :math:`\mu`. Notes ----- BootstrapExperiment is a random weighted design of experiments. To call the BootstrapExperiment constructor is equivalent to call the :class:`~openturns.WeightedExperiment` constructor as follows: *WeightedExperiment(UserDefined(sample), sample.getSize())*. See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = [[i,i+1] for i in range(5)] >>> myPlane = ot.BootstrapExperiment(sample) >>> print(myPlane.generate()) [ v0 v1 ] 0 : [ 4 5 ] 1 : [ 1 2 ] 2 : [ 1 2 ] 3 : [ 1 2 ] 4 : [ 2 3 ] >>> print(myPlane.getDistribution()) UserDefined({x = [0,1], p = 0.2}, {x = [1,2], p = 0.2}, {x = [2,3], p = 0.2}, {x = [3,4], p = 0.2}, {x = [4,5], p = 0.2})" openturns-1.9/python/src/Box.i000066400000000000000000000002761307543307100164420ustar00rootroot00000000000000// SWIG file Box.i %{ #include "openturns/Box.hxx" %} %include Box_doc.i %include openturns/Box.hxx namespace OT { %extend Box { Box(const Box & other) { return new OT::Box(other); } } } openturns-1.9/python/src/BoxCoxEvaluation.i000066400000000000000000000004421307543307100211370ustar00rootroot00000000000000// SWIG file BoxCoxEvaluation.i OTAutodoc(BoxCoxEvaluation) %{ #include "openturns/BoxCoxEvaluation.hxx" %} %include openturns/BoxCoxEvaluation.hxx namespace OT { %extend BoxCoxEvaluation { BoxCoxEvaluation(const BoxCoxEvaluation & other) { return new OT::BoxCoxEvaluation(other); } } } openturns-1.9/python/src/BoxCoxFactory.i000066400000000000000000000004201307543307100204330ustar00rootroot00000000000000// SWIG file BoxCoxFactory.i %{ #include "openturns/BoxCoxFactory.hxx" %} %include BoxCoxFactory_doc.i %include openturns/BoxCoxFactory.hxx namespace OT { %extend BoxCoxFactory { BoxCoxFactory(const BoxCoxFactory & other) { return new OT::BoxCoxFactory(other); } } } openturns-1.9/python/src/BoxCoxFactory_doc.i.in000066400000000000000000000231451307543307100216760ustar00rootroot00000000000000%feature("docstring") OT::BoxCoxFactory "BoxCox transformation estimator. Notes ----- The class :class:`~openturns.BoxCoxFactory` enables to build a Box Cox transformation from data. The Box Cox transformation :math:`h_{\vect{\lambda}, \vect{\alpha}}: \Rset^d \rightarrow \Rset^d` maps a sample into a new sample following a normal distribution with independent components. That sample may be the realization of a process as well as the realization of a distribution. In the multivariate case, OpenTURNS proceeds component by component: :math:`h_{\lambda_i, \alpha_i}: \Rset \rightarrow \Rset` which writes : .. math:: h_{\lambda_i, \alpha_i}(x) = \left\{ \begin{array}{ll} \dfrac{(x+\alpha_i)^\lambda-1}{\lambda_i} & \lambda_i \neq 0 \\ \log(x+\alpha_i) & \lambda_i = 0 \end{array} \right. for all :math:`x+\alpha_i >0`. | BoxCox transformation could alse be performed in the case of the estimation of a generalized linear model through :class:`~openturns.GeneralLinearModelAlgorithm`. The objective is to estimate the most likely surrogate model (generalized linear model) which links input data :math:`x` and :math:`h_{\vect{\lambda}, \vect{\alpha}}(y)`. :math:`\vect{\lambda}` are to be calibrated such as maximizing the generalized linear model's likelihood function. In that context, a :class:`~openturns.CovarianceModel` and a :class:`~openturns.Basis` have to be fixed " // --------------------------------------------------------------------- %feature("docstring") OT::BoxCoxFactory::build "Estimate the Box Cox transformation. Available usages: build(*myTimeSeries*) build(*myTimeSeries, shift*) build(*myTimeSeries, shift, likelihoodGraph*) build(*mySample*) build(*mySample, shift*) build(*mySample, shift, likelihoodGraph*) build(*inputSample, outputSample, covarianceModel, basis, shift, generalizedLinearModelResult*) build(*inputSample, outputSample, covarianceModel, shift, generalizedLinearModelResult*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` One realization of a process. mySample : :class:`~openturns.Sample` A set of *iid* values. shift : :class:`~openturns.Point` It ensures that when shifted, the data are all positive. If not precised, OpenTURNS uses the opposite of the min vector of the data if some data are negative. likelihoodGraph : :class:`~openturns.Graph` An empty graph that is fulfilled later with the log-likelihood of the mapped variables with respect to the :math:`lambda` parameter for each component. inputSample, outputSample : :class:`~openturns.Sample` or 2d-array The input and output samples of a model evaluated apart. basis : :class:`~openturns.Basis` Functional basis to estimate the trend. If the output dimension is greater than 1, the same basis is used for all marginals. multivariateBasis : collection of :class:`~openturns.Basis` Collection of functional basis: one basis for each marginal output. If the trend is not estimated, the collection must be empty. covarianceModel : :class:`~openturns.CovarianceModel` Covariance model. Should have spatial dimension equal to input sample's dimension and dimension equal to output sample's dimension. See note for some particular applications. generalizedLinearModelResult : :class:`~openturns.GeneralLinearModelResult` Empty structure that contains results of generalized linear model algorithm. Returns ------- myBoxCoxTransform : :class:`~openturns.BoxCoxTransform` The estimated Box Cox transformation. Notes ----- We describe the estimation in the univariate case, in the case of no surrogate model estimate. Only the parameter :math:`\lambda` is estimated. To clarify the notations, we omit the mention of :math:`\alpha` in :math:`h_\lambda`. We note :math:`(x_0, \dots, x_{N-1})` a sample of :math:`X`. We suppose that :math:`h_\lambda(X) \sim \cN(\beta , \sigma^2 )`. The parameters :math:`(\beta,\sigma,\lambda)` are estimated by the maximum likelihood estimators. We note :math:`\Phi_{\beta, \sigma}` and :math:`\phi_{\beta, \sigma}` respectively the cumulative distribution function and the density probability function of the :math:`\cN(\beta , \sigma^2)` distribution. We have : .. math:: \begin{array}{lcl} \forall v \geq 0, \, \Prob{ X \leq v } & = & \Prob{ h_\lambda(X) \leq h_\lambda(v) } \\ & = & \Phi_{\beta, \sigma} \left(h_\lambda(v)\right) \end{array} from which we derive the density probability function *p* of :math:`X`: .. math:: \begin{array}{lcl} p(v) & = & h_\lambda'(v)\phi_{\beta, \sigma}(v) = v^{\lambda - 1}\phi_{\beta, \sigma}(v) \end{array} which enables to write the likelihood of the values :math:`(x_0, \dots, x_{N-1})`: .. math:: \begin{array}{lcl} L(\beta,\sigma,\lambda) & = & \underbrace{ \frac{1}{(2\pi)^{N/2}} \times \frac{1}{(\sigma^2)^{N/2}} \times \exp\left[ -\frac{1}{2\sigma^2} \sum_{k=0}^{N-1} \left( h_\lambda(x_k)-\beta \right)^2 \right] }_{\Psi(\beta, \sigma)} \times \prod_{k=0}^{N-1} x_k^{\lambda - 1} \end{array} We notice that for each fixed :math:`\lambda`, the likelihood equation is proportional to the likelihood equation which estimates :math:`(\beta, \sigma^2)`. Thus, the maximum likelihood estimators for :math:`(\beta(\lambda), \sigma^2(\lambda))` for a given :math:`\lambda` are : .. math:: \begin{array}{lcl} \hat{\beta}(\lambda) & = & \frac{1}{N} \sum_{k=0}^{N-1} h_{\lambda}(x_k) \\ \hat{\sigma}^2(\lambda) & = & \frac{1}{N} \sum_{k=0}^{N-1} (h_{\lambda}(x_k) - \beta(\lambda))^2 \end{array} Substituting these expressions in the likelihood equation and taking the :math:`\log-` likelihood leads to: .. math:: \begin{array}{lcl} \ell(\lambda) = \log L( \hat{\beta}(\lambda), \hat{\sigma}(\lambda),\lambda ) & = & C - \frac{N}{2} \log\left[\hat{\sigma}^2(\lambda)\right] \;+\; \left(\lambda - 1 \right) \sum_{k=0}^{N-1} \log(x_i)\,,%\qquad mbox{where $C$ is a constant.} \end{array} The parameter :math:`\hat{\lambda}` is the one maximising :math:`\ell(\lambda)`. When the empty graph *likelihoodGraph* is precised, it is fulfilled with the evolution of the likelihood with respect to the value of :math:`\lambda` for each component *i*. It enables to graphically detect the optimal values. | In the case of surrogate model estimate, we note :math:`(x_0, \dots, x_{N-1})` the input sample of :math:`X`, :math:`(y_0, \dots, y_{N-1})` the input sample of :math:`Y`. We suppose the generalized linear model link :math:`h_\lambda(Y) = \vect{F}^t(\vect{x}) \vect{\beta} + \vect{Z}` with :math:`\mat{F} \in \mathcal{M}_{np, M}(\Rset)`: .. math:: \mat{F}(\vect{x}) = \left( \begin{array}{lcl} \vect{f}_1(\vect{x}_1) & \dots & \vect{f}_M(\vect{x}_1) \\ \dots & \dots & \\ \vect{f}_1(\vect{x}_n) & \dots & \vect{f}_M(\vect{x}_n) \end{array} \right) :math:`(f_1, \dots, f_M)` is a functional basis whith :math:`f_i: \Rset^d \mapsto \Rset^p` for all *i*, :math:`\beta` are the coefficients of the linear combination and :math:`Z` is a zero-mean gaussian process with a stationary covariance function :math:`C_{\vect{\sigma}, \vect{\theta}}` Thus implies that :math:`h_\lambda(Y) \sim \cN(\vect{F}^t(\vect{x}) \vect{\beta}, C_{\vect{\sigma}, \vect{\theta}})`. The likelihood function to be maximized writes as follows: .. math:: \begin{array}{lcl} \ell_{glm}(\lambda) = \log L(\lambda ) & = & C - \log\left( |C^{\lambda}_{\vect{\sigma}, \vect{\theta}} | \right) \;-\; \left( h_\lambda(Y) - \vect{F}^t(\vect{x}) \vect{\beta} \right) {C^{\lambda}_{\vect{\sigma}, \vect{\theta}}}^{-1} \left( h_\lambda(Y) - \vect{F}^t(\vect{x}) \vect{\beta} \right)^t \end{array} where :math:`C^{\lambda}_{\vect{\sigma}, \vect{\theta}}` is the matrix resulted from the discretization of the covariance model over :math:`X`. The parameter :math:`\hat{\lambda}` is the one maximising :math:`\ell_{glm}(\lambda)`. Examples -------- Estimate the Box Cox transformation from a sample: >>> import openturns as ot >>> mySample = ot.Exponential(2).getSample(10) >>> myBoxCoxFactory = ot.BoxCoxFactory() >>> myModelTransform = myBoxCoxFactory.build(mySample) >>> estimatedLambda = myModelTransform.getLambda() Estimate the Box Cox transformation from a field: >>> myIndices= ot.Indices([10, 5]) >>> myMesher=ot.IntervalMesher(myIndices) >>> myInterval = ot.Interval([0.0, 0.0], [2.0, 1.0]) >>> myMesh=myMesher.build(myInterval) >>> amplitude=[1.0] >>> scale=[0.2, 0.2] >>> myCovModel=ot.ExponentialModel(scale, amplitude) >>> myXproc=ot.GaussianProcess(myCovModel, myMesh) >>> g = ot.SymbolicFunction(['x1'], ['exp(x1)']) >>> myDynTransform = ot.ValueFunction(g, 2) >>> myXtProcess = ot.CompositeProcess(myDynTransform, myXproc) >>> myField = myXtProcess.getRealization() >>> myModelTransform = ot.BoxCoxFactory().build(myField) Estimation of a generalized linear model: >>> inputSample = ot.Uniform(-1.0, 1.0).getSample(20) >>> outputSample = ot.Sample(inputSample) >>> # Evaluation of y = ax + b (a: scale, b: translate) >>> outputSample = outputSample * [3] + [3.1] >>> # inverse transfo + small noise >>> def f(x): import math; return [math.exp(x[0])] >>> inv_transfo = ot.PythonFunction(1,1, f) >>> outputSample = inv_transfo(outputSample) + ot.Normal(0, 1.0e-2).getSample(20) >>> # Estimation >>> result = ot.GeneralLinearModelResult() >>> basis = ot.LinearBasisFactory(1).build() >>> covarianceModel = ot.DiracCovarianceModel() >>> shift = [1.0e-1] >>> myBoxCox = ot.BoxCoxFactory().build(inputSample, outputSample, covarianceModel, basis, shift, result) " openturns-1.9/python/src/BoxCoxTransform.i000066400000000000000000000004371307543307100210070ustar00rootroot00000000000000// SWIG file BoxCoxTransform.i %{ #include "openturns/BoxCoxTransform.hxx" %} %include BoxCoxTransform_doc.i %include openturns/BoxCoxTransform.hxx namespace OT { %extend BoxCoxTransform { BoxCoxTransform(const BoxCoxTransform & other) { return new OT::BoxCoxTransform(other); } } } openturns-1.9/python/src/BoxCoxTransform_doc.i.in000066400000000000000000000067031307543307100222430ustar00rootroot00000000000000%feature("docstring") OT::BoxCoxTransform "BoxCox transformation. Available constructors: BoxCoxTransform(*lambdaVect, shiftVect = [0]*) BoxCoxTransform(*lambda, shift=0*) Parameters ---------- lambdaVect : sequence of float The :math:`(\lambda_1, \dots, \lambda_d)` parameter. shiftVect : sequence of float The :math:`(\alpha_1, \dots, \alpha_d)` parameter. Default is :math:`(\alpha_1, \dots, \alpha_d)=(0, \dots, 0)`. lambda : float The :math:`\lambda` parameter in the univariate case. shift : float The :math:`\alpha` parameter in the univariate case. Default is :math:`\alpha = 0`. Notes ----- The Box Cox transformation :math:`h_{\vect{\lambda}, \vect{\alpha}}: \Rset^d \rightarrow \Rset^d` writes for each component :math:`h_{\lambda_i, \alpha_i}: \Rset \rightarrow \Rset`: .. math:: h_{\lambda_i, \alpha_i} (x)= \left\{ \begin{array}{ll} \dfrac{(x+\alpha_i)^{\lambda_i}-1}{\lambda} & \lambda_i \neq 0 \\ \log(x+\alpha_i) & \lambda_i = 0 \end{array} \right. for all :math:`x+\alpha_i >0`. The inverse Box Cox transformation writes: .. math:: \begin{array}{lcl} h_{\lambda_i, \alpha_i}^{-1}(y) & = & \left\{ \begin{array}{ll} \displaystyle (\lambda_i y + 1)^{\frac{1}{\lambda_i}} - \alpha_i & \lambda_i \neq 0 \\ \displaystyle \exp(y) - \alpha_i & \lambda_i = 0 \end{array} \right. \end{array} Examples -------- Create a Box Cox tranformation: >>> import openturns as ot >>> myLambda = 0.1 >>> myBoxCox = ot.BoxCoxTransform(myLambda) Estimate a transformation from a sample: >>> mySample = ot.Exponential(2).getSample(100) >>> myModelTransform = ot.BoxCoxFactory().build(mySample) Apply ot to the sample: >>> myNormalSample = myModelTransform(mySample) >>> hist = ot.HistogramFactory().build(myNormalSample) >>> graph = hist.drawPDF() Apply it to a field: >>> myIndices= ot.Indices([10,5]) >>> myMesher=ot.IntervalMesher(myIndices) >>> myInterval = ot.Interval([0.0, 0.0], [2.0, 1.0]) >>> myMesh=myMesher.build(myInterval) >>> amplitude=[1.0] >>> scale=[0.2, 0.2] >>> myCovModel=ot.ExponentialModel(scale, amplitude) >>> myXproc=ot.GaussianProcess(myCovModel, myMesh) >>> g = ot.SymbolicFunction(['x1'], ['exp(x1)']) >>> myDynTransform = ot.ValueFunction(g, 2) >>> myXtProcess = ot.CompositeProcess(myDynTransform, myXproc) >>> myField = myXtProcess.getRealization() >>> myModelTransform = ot.BoxCoxFactory().build(myField) >>> myStabilizedField = myModelTransform(myField) >>> marginal = ot.HistogramFactory().build(myStabilizedField.getValues()) >>> graph2 = marginal.drawPDF() " // --------------------------------------------------------------------- %feature("docstring") OT::BoxCoxTransform::getLambda "Accessor to the :math:`\vect{\lambda}` parameter. Returns ------- myLambda : :class:`~openturns.Point` The :math:`\vect{\lambda}` parameter. " // --------------------------------------------------------------------- %feature("docstring") OT::BoxCoxTransform::getShift "Accessor to the :math:`\vect{\alpha}` parameter. Returns ------- myLambda : :class:`~openturns.Point` The :math:`\vect{\Lambda}` parameter. " // --------------------------------------------------------------------- %feature("docstring") OT::BoxCoxTransform::getInverse "Accessor to the inverse Box Cox transformation. Returns ------- myInverseBoxCox : :class:`~openturns.InverseBoxCoxTransform` The inverse Box Cox transformation. " openturns-1.9/python/src/Box_doc.i.in000066400000000000000000000022311307543307100176650ustar00rootroot00000000000000%feature("docstring") OT::Box "Box design of experiments. Available constructor: Box(*levels*) Box(*levels, bounds*) Parameters ---------- levels : sequence of int or float Sequence specifying the number of intermediate points in each direction which regularly discretizes a pavement. In direction :math:`i`, the points number is :math:`levels[i]+2`. bounds : :class:`~openturns.Interval` The bounds of the pavement If not specified, the bounds are set to the unit pavement :math:`[0,1]^n`. Notes ----- Box is a stratified design of experiments enabling to create a points grid by regularly discretizing a pavement with the number of intermediate points specified in each direction. The number of points generated is :math:`\prod_{i=1}^n (2+levels[i])`. See also -------- StratifiedExperiment Examples -------- >>> import openturns as ot >>> # direction 1 will be discretized in with 4 intermediate points >>> # and direction 2 with 2 intermediate points >>> levels = [4, 2] >>> # first component in [5,7], second in [6,9] >>> bounds = ot.Interval([5.0, 6.0], [7.0, 9.0]) >>> myGrid = ot.Box(levels, bounds) >>> mySample = myGrid.generate()" openturns-1.9/python/src/Brent.i000066400000000000000000000003161307543307100167570ustar00rootroot00000000000000// SWIG file Brent.i %{ #include "openturns/Brent.hxx" %} %include Brent_doc.i %include openturns/Brent.hxx namespace OT { %extend Brent { Brent(const Brent & other) { return new OT::Brent(other); } } } openturns-1.9/python/src/Brent_doc.i.in000066400000000000000000000043531307543307100202160ustar00rootroot00000000000000%feature("docstring") OT::Brent "Brent algorithm solver for 1D non linear equations. Available constructor: Brent() Brent(*absError, relError, resError, maximumFunctionEvaluation*) Parameters ---------- absError : positive float Absolute error: distance between two successive iterates at the end point. Default is :math:`10^{-5}`. relError : positive float Relative error: distance between the two last successive iterates with regards to the last iterate. Default is :math:`10^{-5}`. resError : positive float Residual error: difference between the last iterate value and the expected value. Default is :math:`10^{-8}`. maximumFunctionEvaluation : int The maximum number of evaluations of the function. Default is :math:`100`. See also -------- Solver, Bisection, Secant Notes ----- The Brent solver is a mix of Bisection, Secant and inverse quadratic interpolation." // --------------------------------------------------------------------- %feature("docstring") OT::Brent::solve "Solve an equation. **Available usages**: solve(*function, value, infPoint, supPoint*) solve(*function, value, infPoint, supPoint, infValue, supValue*) Parameters ---------- function : :class:`~openturns.Function` The function of the equation :math:`function(x) = value` to be solved in the interval :math:`[infPoint, supPoint]`. value : float The value of which the function must be equal. infPoint : float Lower bound of the interval definition of the variable :math:`x`. supPoint : float Upper bound of the interval definition of the variable :math:`x`. infValue : float The value such that :math:`infValue = function(infPoint)`. It must be of opposite sign of :math:`supValue`. supValue : float The value such that :math:`supValue = function(supPoint)`. It must be of opposite sign of :math:`infValue`. Returns ------- result : float The result of the root research. Notes ----- If the function :math:`f` is continuous, the Brent solver will converge towards a root of the equation :math:`function(x) = value` in :math:`[infPoint, supPoint]`. If not, it will converge towards either a root or a discontinuity point of :math:`f` on :math:`[infPoint, supPoint]`. Bisection guarantees a convergence." openturns-1.9/python/src/Burr.i000066400000000000000000000003061307543307100166160ustar00rootroot00000000000000// SWIG file Burr.i %{ #include "openturns/Burr.hxx" %} %include Burr_doc.i %include openturns/Burr.hxx namespace OT { %extend Burr { Burr(const Burr & other) { return new OT::Burr(other); } } } openturns-1.9/python/src/BurrFactory.i000066400000000000000000000003761307543307100201550ustar00rootroot00000000000000// SWIG file BurrFactory.i %{ #include "openturns/BurrFactory.hxx" %} %include BurrFactory_doc.i %include openturns/BurrFactory.hxx namespace OT { %extend BurrFactory { BurrFactory(const BurrFactory & other) { return new OT::BurrFactory(other); } } } openturns-1.9/python/src/BurrFactory_doc.i.in000066400000000000000000000002121307543307100213740ustar00rootroot00000000000000%feature("docstring") OT::BurrFactory "Burr factory. Available constructor: BurrFactory() See also -------- DistributionFactory" openturns-1.9/python/src/Burr_doc.i.in000066400000000000000000000026051307543307100200540ustar00rootroot00000000000000%feature("docstring") OT::Burr "Burr distribution. Available constructors: Burr(*c=1.0, k=1.0*) Parameters ---------- c : float, :math:`c > 0` k : float, :math:`k > 0` Notes ----- Its probability density function is defined as: .. math:: f_X(x) = c k \frac{x^{c - 1}}{(1 + x^c)^{k + 1}}, \quad x \in \Rset^{+*} with :math:`c, k > 0`. Its only, first-order moment is: .. math:: \Expect{X} = k {\rm B}(k - 1 / c, 1 + 1 / c) where :math:`\rm B` denotes Euler's beta function. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Burr(2.0, 3.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Burr::getC "Accessor to the parameter :math:`c`. Returns ------- c : float" // --------------------------------------------------------------------- %feature("docstring") OT::Burr::getK "Accessor to the parameter :math:`k`. Returns ------- k : float" // --------------------------------------------------------------------- %feature("docstring") OT::Burr::setC "Accessor to the parameter :math:`c`. Parameters ---------- c : float, :math:`c > 0`" // --------------------------------------------------------------------- %feature("docstring") OT::Burr::setK "Accessor to the parameter :math:`k`. Parameters ---------- k : float, :math:`k > 0`" openturns-1.9/python/src/CMakeLists.txt000066400000000000000000001536371307543307100203120ustar00rootroot00000000000000# -*- cmake -*- add_definitions (${OPENTURNS_SWIG_DEFINITIONS}) # generate SWIG runtime header set (SWIG_PYTHON_OPTIONS "-python") execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/openturns) add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/openturns/swig_runtime.hxx COMMAND ${SWIG_EXECUTABLE} ARGS ${SWIG_PYTHON_OPTIONS} ${CMAKE_SWIG_FLAGS} ${OPENTURNS_SWIG_DEFINITIONS} -external-runtime ${CMAKE_CURRENT_BINARY_DIR}/openturns/swig_runtime.hxx COMMENT "Swig header") add_custom_target (generate_swig_runtime DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/openturns/swig_runtime.hxx) add_custom_target (generate_docstrings) include_directories (${CMAKE_CURRENT_BINARY_DIR}) include_directories (BEFORE ${INTERNAL_INCLUDE_DIRS}) include_directories (${CMAKE_CURRENT_SOURCE_DIR}) set (OPENTURNS_PYTHON_MODULES) macro (ot_add_python_module MODULENAME SOURCEFILE) set_source_files_properties (${SOURCEFILE} PROPERTIES CPLUSPLUS ON) set_source_files_properties (${SOURCEFILE} PROPERTIES SWIG_MODULE_NAME ${MODULENAME}) ot_install_swig_file (${SOURCEFILE}) if (${ARGC} GREATER 2) set (SWIG_MODULE_${MODULENAME}_EXTRA_DEPS ${ARGN}) list (APPEND SWIG_MODULE_${MODULENAME}_EXTRA_DEPS openturns/PythonWrappingFunctions.hxx) endif () set (swig_other_sources) foreach (it ${ARGN}) if (${it} MATCHES ".*\\.i$") ot_install_swig_file (${it}) elseif(${it} MATCHES ".*_doc\\.i\\.in$") # handle docstring generation set (DOCSTRING_IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${it}) get_filename_component (DOCSTRING_FILE_BASENAME ${DOCSTRING_IN_FILE} NAME_WE) add_custom_target (generate_${DOCSTRING_FILE_BASENAME} COMMAND ${CMAKE_COMMAND} -DDOCSTRING_IN_FILE=${DOCSTRING_IN_FILE} -DDOCSTRING_FILE=${CMAKE_CURRENT_BINARY_DIR}/${DOCSTRING_FILE_BASENAME}.i -P ${CMAKE_SOURCE_DIR}/cmake/escape_backslash_x4.cmake DEPENDS ${DOCSTRING_IN_FILE}) add_dependencies (generate_docstrings generate_${DOCSTRING_FILE_BASENAME}) list (APPEND SWIGFILES ${CMAKE_CURRENT_BINARY_DIR}/${DOCSTRING_FILE_BASENAME}.i) else () list (APPEND swig_other_sources "${it}") endif () endforeach () # workaround for a bug in UseSWIG script not supporting multiple modules and parallel compilation # http://www.cmake.org/pipermail/cmake/2011-January/042345.html if (CMAKE_VERSION VERSION_LESS 2.8.5) set(swig_extra_generated_files) endif () swig_add_module (${MODULENAME} python ${SOURCEFILE} ${swig_other_sources}) add_dependencies (${SWIG_MODULE_${MODULENAME}_REAL_NAME} generate_swig_runtime generate_docstrings) swig_link_libraries (${MODULENAME} OT) if (LINK_PYTHON_LIBRARY) swig_link_libraries (${MODULENAME} ${PYTHON_LIBRARIES}) endif () set_target_properties (${SWIG_MODULE_${MODULENAME}_REAL_NAME} PROPERTIES NO_SONAME ON) if (USE_COTIRE) set_target_properties(${SWIG_MODULE_${MODULENAME}_REAL_NAME} PROPERTIES COTIRE_ENABLE_PRECOMPILED_HEADER FALSE) cotire (${SWIG_MODULE_${MODULENAME}_REAL_NAME}) add_dependencies (${SWIG_MODULE_${MODULENAME}_REAL_NAME}_unity generate_swig_runtime generate_docstrings) add_dependencies (python_unity ${SWIG_MODULE_${MODULENAME}_REAL_NAME}_unity) set_source_files_properties (PythonDistribution.cxx PythonFieldFunction.cxx PROPERTIES COTIRE_EXCLUDED TRUE) endif () list (APPEND OPENTURNS_PYTHON_MODULES ${MODULENAME}) endmacro (ot_add_python_module) install (DIRECTORY openturns DESTINATION ${OPENTURNS_INCLUDE_PATH}) if (LIBXML2_FOUND) list (APPEND SWIG_MODULE_common_EXTRA_FLAGS -DOPENTURNS_HAVE_LIBXML2=1) endif () if (MUPARSER_FOUND) list (APPEND SWIG_MODULE_func_EXTRA_FLAGS -DOPENTURNS_HAVE_MUPARSER=1) endif () ot_add_python_module(common common_module.i OTtypes.i OTexceptions.i Memory.i TBB.i TBB_doc.i.in Object.i Object_doc.i.in PersistentObject.i PersistentObject_doc.i.in Study.i Study_doc.i.in StorageManager.i StorageManager_doc.i.in XMLStorageManager.i XMLStorageManager_doc.i.in Log.i Log_doc.i.in TTY.i TTY_doc.i.in Path.i Path_doc.i.in Catalog.i ResourceMap.i ResourceMap_doc.i.in ComparisonOperatorImplementation.i ComparisonOperator.i ComparisonOperator_doc.i.in Equal.i Equal_doc.i.in Greater.i Greater_doc.i.in GreaterOrEqual.i GreaterOrEqual_doc.i.in Less.i Less_doc.i.in LessOrEqual.i LessOrEqual_doc.i.in Cache.i PlatformInfo.i PlatformInfo_doc.i.in SharedPointer.i Pointer.i InterfaceObject.i InterfaceObject_doc.i.in TypedInterfaceObject.i TypedCollectionInterfaceObject.i BaseCommonTemplateDefs.i ) ot_add_python_module(typ typ_module.i Collection.i Collection_doc.i.in PersistentCollection.i Description.i Description_doc.i.in Point.i Point_doc.i.in PointWithDescription.i PointWithDescription_doc.i.in DomainImplementation.i DomainImplementation_doc.i.in Interval.i Interval_doc.i.in Indices.i Indices_doc.i.in MatrixImplementation.i Matrix.i Matrix_doc.i.in SquareMatrix.i SquareMatrix_doc.i.in SymmetricMatrix.i SymmetricMatrix_doc.i.in TensorImplementation.i TensorImplementation_doc.i.in Tensor.i Tensor_doc.i.in SymmetricTensor.i SymmetricTensor_doc.i.in ComplexTensorImplementation.i ComplexTensor.i ComplexTensor_doc.i.in ComplexMatrixImplementation.i ComplexMatrixImplementation_doc.i.in ComplexMatrix.i ComplexMatrix_doc.i.in HermitianMatrix.i HermitianMatrix_doc.i.in SquareComplexMatrix.i SquareComplexMatrix_doc.i.in TriangularMatrix.i TriangularMatrix_doc.i.in TriangularComplexMatrix.i TriangularComplexMatrix_doc.i.in CovarianceMatrix.i CovarianceMatrix_doc.i.in CorrelationMatrix.i CorrelationMatrix_doc.i.in IdentityMatrix.i IdentityMatrix_doc.i.in Sample.i Sample_doc.i.in FieldImplementation.i FieldImplementation_doc.i.in Field.i Field_doc.i.in ProcessSample.i ProcessSample_doc.i.in TimeSeries.i TimeSeries_doc.i.in HistoryStrategyImplementation.i HistoryStrategyImplementation_doc.i.in HistoryStrategy.i HistoryStrategy_doc.i.in BaseTypTemplateDefs.i ) ot_add_python_module(statistics statistics_module.i Compact.i Compact_doc.i.in Full.i Full_doc.i.in Last.i Last_doc.i.in Null.i Null_doc.i.in LinearModel.i LinearModel_doc.i.in LinearModelFactory.i LinearModelFactory_doc.i.in TestResult.i TestResult_doc.i.in RandomGenerator.i RandomGenerator_doc.i.in RandomGeneratorState.i RandomGeneratorState_doc.i.in CorrelationAnalysis.i CorrelationAnalysis_doc.i.in LowDiscrepancySequenceImplementation.i LowDiscrepancySequenceImplementation_doc.i.in LowDiscrepancySequence.i LowDiscrepancySequence_doc.i.in SobolSequence.i SobolSequence_doc.i.in FaureSequence.i FaureSequence_doc.i.in HaltonSequence.i HaltonSequence_doc.i.in HaselgroveSequence.i HaselgroveSequence_doc.i.in ReverseHaltonSequence.i ReverseHaltonSequence_doc.i.in SecondOrderModelImplementation.i SecondOrderModelImplementation_doc.i.in SecondOrderModel.i SecondOrderModel_doc.i.in ExponentialCauchy.i ExponentialCauchy_doc.i.in SphericalModel.i SphericalModel_doc.i.in FilteringWindowsImplementation.i FilteringWindowsImplementation_doc.i.in FilteringWindows.i FilteringWindows_doc.i.in Hamming.i Hamming_doc.i.in Hanning.i Hanning_doc.i.in FFTImplementation.i FFTImplementation_doc.i.in FFT.i FFT_doc.i.in SpectralModelImplementation.i SpectralModelImplementation_doc.i.in SpectralModel.i SpectralModel_doc.i.in CovarianceModelImplementation.i CovarianceModelImplementation_doc.i.in CovarianceModel.i CovarianceModel_doc.i.in StationaryCovarianceModel.i SpectralModelFactoryImplementation.i SpectralModelFactoryImplementation_doc.i.in SpectralModelFactory.i SpectralModelFactory_doc.i.in UserDefinedSpectralModel.i UserDefinedSpectralModel_doc.i.in WelchFactory.i WelchFactory_doc.i.in ExponentialModel.i ExponentialModel_doc.i.in ExponentiallyDampedCosineModel.i ExponentiallyDampedCosineModel_doc.i.in CauchyModel.i CauchyModel_doc.i.in CovarianceModelFactoryImplementation.i CovarianceModelFactoryImplementation_doc.i.in CovarianceModelFactory.i CovarianceModelFactory_doc.i.in UserDefinedCovarianceModel.i UserDefinedCovarianceModel_doc.i.in UserDefinedStationaryCovarianceModel.i UserDefinedStationaryCovarianceModel_doc.i.in StationaryCovarianceModelFactory.i StationaryCovarianceModelFactory_doc.i.in NonStationaryCovarianceModelFactory.i NonStationaryCovarianceModelFactory_doc.i.in SquaredExponential.i SquaredExponential_doc.i.in GeneralizedExponential.i GeneralizedExponential_doc.i.in AbsoluteExponential.i AbsoluteExponential_doc.i.in MaternModel.i MaternModel_doc.i.in DiracCovarianceModel.i DiracCovarianceModel_doc.i.in ProductCovarianceModel.i ProductCovarianceModel_doc.i.in RankMCovarianceModel.i RankMCovarianceModel_doc.i.in TensorizedCovarianceModel.i TensorizedCovarianceModel_doc.i.in HMatrixParameters.i HMatrixParameters_doc.i.in HMatrixFactory.i HMatrixFactory_doc.i.in HMatrix.i HMatrix_doc.i.in HMatrixImplementation.i HMatrixImplementation_doc.i.in BaseStatisticsTemplateDefs.i ) ot_add_python_module(geom geom_module.i Domain.i Domain_doc.i.in BipartiteGraph.i BipartiteGraph_doc.i.in Mesh.i Mesh_doc.i.in RegularGrid.i RegularGrid_doc.i.in IntervalMesher.i IntervalMesher_doc.i.in BaseGeomTemplateDefs.i ) ot_add_python_module(graph graph_module.i DrawableImplementation.i DrawableImplementation_doc.i.in Drawable.i Drawable_doc.i.in GraphImplementation.i GraphImplementation_doc.i.in Graph.i Graph_doc.i.in BarPlot.i BarPlot_doc.i.in Cloud.i Cloud_doc.i.in Contour.i Contour_doc.i.in Curve.i Curve_doc.i.in Pairs.i Pairs_doc.i.in Pie.i Pie_doc.i.in Polygon.i Polygon_doc.i.in PolygonArray.i PolygonArray_doc.i.in Staircase.i Staircase_doc.i.in Text.i Text_doc.i.in BaseGraphTemplateDefs.i ) ot_add_python_module(func func_module.i EnumerateFunction.i EnumerateFunction_doc.i.in EnumerateFunctionImplementation.i EnumerateFunctionImplementation_doc.i.in LinearEnumerateFunction.i LinearEnumerateFunction_doc.i.in HyperbolicAnisotropicEnumerateFunction.i HyperbolicAnisotropicEnumerateFunction_doc.i.in SpecFunc.i SpecFunc_doc.i.in EvaluationImplementation.i EvaluationImplementation_doc.i.in GradientImplementation.i GradientImplementation_doc.i.in HessianImplementation.i HessianImplementation_doc.i.in NoEvaluation.i NoGradient.i NoHessian.i LinearEvaluation.i LinearEvaluation_doc.i.in LinearGradient.i LinearGradient_doc.i.in QuadraticEvaluation.i ConstantGradient.i ConstantHessian.i ComposedEvaluation.i ComposedGradient.i ComposedHessian.i DualLinearCombinationEvaluation.i DualLinearCombinationEvaluation_doc.i.in DualLinearCombinationGradient.i DualLinearCombinationGradient_doc.i.in DualLinearCombinationHessian.i DualLinearCombinationHessian_doc.i.in LinearCombinationFunction.i LinearCombinationFunction_doc.i.in LinearCombinationEvaluation.i LinearCombinationGradient.i LinearCombinationHessian.i ParametricFunction.i ParametricFunction_doc.i.in ProductEvaluation.i ProductGradient.i ProductHessian.i FunctionImplementation.i FunctionImplementation_doc.i.in ProductFunction.i ProductFunction_doc.i.in Function.i Function_doc.i.in TensorizedUniVariateFunctionFactory.i TensorizedUniVariateFunctionFactory_doc.i.in UniVariateFunctionFactory.i UniVariateFunctionFactory_doc.i.in MonomialFunctionFactory.i MonomialFunctionFactory_doc.i.in UniVariateFunctionFamily.i UniVariateFunctionFamily_doc.i.in AggregatedFunction.i AggregatedFunction_doc.i.in SymbolicFunction.i SymbolicFunction_doc.i.in ComposedFunction.i ComposedFunction_doc.i.in DualLinearCombinationFunction.i DualLinearCombinationFunction_doc.i.in BaseFuncCollection.i FieldFunctionImplementation.i FieldFunctionImplementation_doc.i.in FieldFunction.i FieldFunction_doc.i.in IndicatorFunction.i IndicatorFunction_doc.i.in ValueFunction.i ValueFunction_doc.i.in VertexValueFunction.i VertexValueFunction_doc.i.in LinearFunction.i LinearFunction_doc.i.in QuadraticFunction.i QuadraticFunction_doc.i.in UniVariatePolynomialImplementation.i UniVariatePolynomialImplementation_doc.i.in UniVariatePolynomial.i UniVariatePolynomial_doc.i.in AggregatedEvaluation.i AggregatedEvaluation_doc.i.in SymbolicEvaluation.i SymbolicGradient.i SymbolicHessian.i DatabaseFunction.i DatabaseFunction_doc.i.in DatabaseEvaluation.i DatabaseEvaluation_doc.i.in IndicatorEvaluation.i PiecewiseLinearEvaluation.i PiecewiseHermiteEvaluation.i ProductPolynomialEvaluation.i ProductPolynomialEvaluation_doc.i.in ParametricEvaluation.i ParametricGradient.i ParametricHessian.i P1LagrangeEvaluation.i P1LagrangeEvaluation_doc.i.in BasisImplementation.i BasisImplementation_doc.i.in Basis.i Basis_doc.i.in BasisSequenceImplementation.i BasisSequenceImplementation_doc.i.in BasisSequence.i BasisSequence_doc.i.in BasisSequenceFactoryImplementation.i BasisSequenceFactoryImplementation_doc.i.in BasisSequenceFactory.i BasisSequenceFactory_doc.i.in LARS.i LARS_doc.i.in BoxCoxEvaluation.i BoxCoxTransform.i BoxCoxTransform_doc.i.in InverseBoxCoxEvaluation.i PythonEvaluation.cxx PythonGradient.cxx PythonHessian.cxx PythonFieldFunction.cxx InverseBoxCoxTransform.i InverseBoxCoxTransform_doc.i.in TrendEvaluation.i TrendTransform.i TrendTransform_doc.i.in InverseTrendEvaluation.i InverseTrendTransform.i InverseTrendTransform_doc.i.in FunctionalBasis.i FunctionalBasisImplementation.i BasisFactory.i BasisFactory_doc.i.in ConstantBasisFactory.i ConstantBasisFactory_doc.i.in LinearBasisFactory.i LinearBasisFactory_doc.i.in QuadraticBasisFactory.i QuadraticBasisFactory_doc.i.in BaseFuncTemplateDefs.i ) ot_add_python_module(diff diff_module.i FiniteDifferenceStepImplementation.i FiniteDifferenceStepImplementation_doc.i.in FiniteDifferenceStep.i FiniteDifferenceStep_doc.i.in ConstantStep.i ConstantStep_doc.i.in BlendedStep.i BlendedStep_doc.i.in FiniteDifferenceGradient.i FiniteDifferenceGradient_doc.i.in FiniteDifferenceHessian.i FiniteDifferenceHessian_doc.i.in CenteredFiniteDifferenceGradient.i CenteredFiniteDifferenceGradient_doc.i.in CenteredFiniteDifferenceHessian.i CenteredFiniteDifferenceHessian_doc.i.in NonCenteredFiniteDifferenceGradient.i NonCenteredFiniteDifferenceGradient_doc.i.in BaseDiffTemplateDefs.i ) ot_add_python_module(optim optim_module.i OptimizationProblem.i OptimizationProblem_doc.i.in OptimizationProblemImplementation.i OptimizationProblemImplementation_doc.i.in OptimizationAlgorithm.i OptimizationAlgorithm_doc.i.in OptimizationResult.i OptimizationResult_doc.i.in OptimizationAlgorithmImplementation.i OptimizationAlgorithmImplementation_doc.i.in NearestPointCheckerResult.i NearestPointChecker.i AbdoRackwitz.i AbdoRackwitz_doc.i.in Cobyla.i Cobyla_doc.i.in TNC.i TNC_doc.i.in SQP.i SQP_doc.i.in MultiStart.i MultiStart_doc.i.in NLopt.i NLopt_doc.i.in LevelSet.i LevelSet_doc.i.in LevelSetMesher.i LevelSetMesher_doc.i.in BaseOptimTemplateDefs.i ) ot_add_python_module(solver solver_module.i SolverImplementation.i SolverImplementation_doc.i.in Solver.i Solver_doc.i.in Bisection.i Bisection_doc.i.in Secant.i Secant_doc.i.in Brent.i Brent_doc.i.in ODESolverImplementation.i ODESolverImplementation_doc.i.in ODESolver.i ODESolver_doc.i.in RungeKutta.i RungeKutta_doc.i.in BaseSolverTemplateDefs.i ) ot_add_python_module(algo algo_module.i ApproximationAlgorithmImplementation.i ApproximationAlgorithmImplementation_doc.i.in ApproximationAlgorithmImplementationFactory.i ApproximationAlgorithmImplementationFactory_doc.i.in ApproximationAlgorithm.i ApproximationAlgorithm_doc.i.in DesignProxy.i DesignProxy_doc.i.in LeastSquaresMethodImplementation.i LeastSquaresMethodImplementation_doc.i.in LeastSquaresMethod.i LeastSquaresMethod_doc.i.in CholeskyMethod.i CholeskyMethod_doc.i.in QRMethod.i QRMethod_doc.i.in SVDMethod.i SVDMethod_doc.i.in SparseMethod.i SparseMethod_doc.i.in LeastSquaresMetaModelSelection.i LeastSquaresMetaModelSelection_doc.i.in LeastSquaresMetaModelSelectionFactory.i LeastSquaresMetaModelSelectionFactory_doc.i.in ClassifierImplementation.i ClassifierImplementation_doc.i.in Classifier.i Classifier_doc.i.in FittingAlgorithmImplementation.i FittingAlgorithmImplementation_doc.i.in FittingAlgorithm.i FittingAlgorithm_doc.i.in CorrectedLeaveOneOut.i CorrectedLeaveOneOut_doc.i.in KDTree.i KDTree_doc.i.in KFold.i KFold_doc.i.in PenalizedLeastSquaresAlgorithm.i PenalizedLeastSquaresAlgorithm_doc.i.in PenalizedLeastSquaresAlgorithmFactory.i PenalizedLeastSquaresAlgorithmFactory_doc.i.in PythonEvaluation.cxx PythonGradient.cxx PythonHessian.cxx KissFFT.i KissFFT_doc.i.in IntegrationAlgorithmImplementation.i IntegrationAlgorithmImplementation_doc.i.in IntegrationAlgorithm.i IntegrationAlgorithm_doc.i.in GaussKronrodRule.i GaussKronrodRule_doc.i.in GaussKronrod.i GaussKronrod_doc.i.in GaussLegendre.i GaussLegendre_doc.i.in IteratedQuadrature.i IteratedQuadrature_doc.i.in ExpertMixture.i ExpertMixture_doc.i.in KarhunenLoeveP1Factory.i KarhunenLoeveP1Factory_doc.i.in KarhunenLoeveResultImplementation.i KarhunenLoeveResultImplementation_doc.i.in KarhunenLoeveResult.i KarhunenLoeveResult_doc.i.in KarhunenLoeveAlgorithmImplementation.i KarhunenLoeveAlgorithmImplementation_doc.i.in KarhunenLoeveP1Algorithm.i KarhunenLoeveP1Algorithm_doc.i.in KarhunenLoeveSVDAlgorithm.i KarhunenLoeveSVDAlgorithm_doc.i.in KarhunenLoeveAlgorithm.i KarhunenLoeveAlgorithm_doc.i.in BaseAlgoTemplateDefs.i ) ot_add_python_module(experiment experiment_module.i ExperimentImplementation.i ExperimentImplementation_doc.i.in StratifiedExperiment.i StratifiedExperiment_doc.i.in Experiment.i Experiment_doc.i.in Axial.i Axial_doc.i.in Composite.i Composite_doc.i.in Factorial.i Factorial_doc.i.in Box.i Box_doc.i.in CombinatorialGeneratorImplementation.i CombinatorialGeneratorImplementation_doc.i.in CombinatorialGenerator.i CombinatorialGenerator_doc.i.in Combinations.i Combinations_doc.i.in KPermutations.i KPermutations_doc.i.in Tuples.i Tuples_doc.i.in PythonExperiment.cxx BaseExperimentTemplateDefs.i ) ot_add_python_module(base base_module.i BaseTemplateDefs.i ) ot_add_python_module(model_copula model_copula_module.i DistributionImplementation.i DistributionImplementation_doc.i.in DistributionFactoryImplementation.i DistributionFactoryImplementation_doc.i.in Distribution.i Distribution_doc.i.in DistributionFactoryResult.i DistributionFactoryResult_doc.i.in DistributionFactory.i DistributionFactory_doc.i.in DistributionParametersImplementation.i DistributionParametersImplementation_doc.i.in DistributionParameters.i DistributionParameters_doc.i.in ContinuousDistribution.i EllipticalDistribution.i DiscreteDistribution.i CopulaImplementation.i CopulaImplementation_doc.i.in Copula.i Copula_doc.i.in ArchimedeanCopula.i ArchimedeanCopula_doc.i.in SklarCopula.i SklarCopula_doc.i.in IndependentCopula.i IndependentCopula_doc.i.in MinCopula.i MinCopula_doc.i.in NormalCopula.i NormalCopula_doc.i.in NormalCopulaFactory.i NormalCopulaFactory_doc.i.in OrdinalSumCopula.i OrdinalSumCopula_doc.i.in FarlieGumbelMorgensternCopula.i FarlieGumbelMorgensternCopula_doc.i.in FarlieGumbelMorgensternCopulaFactory.i FarlieGumbelMorgensternCopulaFactory_doc.i.in AliMikhailHaqCopula.i AliMikhailHaqCopula_doc.i.in AliMikhailHaqCopulaFactory.i AliMikhailHaqCopulaFactory_doc.i.in FrankCopula.i FrankCopula_doc.i.in FrankCopulaFactory.i FrankCopulaFactory_doc.i.in ClaytonCopula.i ClaytonCopula_doc.i.in ClaytonCopulaFactory.i ClaytonCopulaFactory_doc.i.in GumbelCopula.i GumbelCopula_doc.i.in GumbelCopulaFactory.i GumbelCopulaFactory_doc.i.in ComposedDistribution.i ComposedDistribution_doc.i.in ComposedCopula.i ComposedCopula_doc.i.in CumulativeDistributionNetwork.i CumulativeDistributionNetwork_doc.i.in PythonDistribution.cxx UncertaintyModelCopulaCollection.i UncertaintyModelCopulaTemplateDefs.i ) ot_add_python_module(randomvector randomvector_module.i RandomVectorImplementation.i RandomVectorImplementation_doc.i.in ConstantRandomVector.i UsualRandomVector.i UncertaintyRandomVectorTemplateDefs.i ) ot_add_python_module(model_process model_process_module.i ProcessImplementation.i ProcessImplementation_doc.i.in Process.i Process_doc.i.in WhiteNoise.i WhiteNoise_doc.i.in RandomWalk.i RandomWalk_doc.i.in ARMACoefficients.i ARMACoefficients_doc.i.in ARMAState.i ARMAState_doc.i.in ARMA.i ARMA_doc.i.in SpectralGaussianProcess.i SpectralGaussianProcess_doc.i.in GaussianProcess.i GaussianProcess_doc.i.in AggregatedProcess.i AggregatedProcess_doc.i.in CompositeProcess.i CompositeProcess_doc.i.in FunctionalBasisProcess.i FunctionalBasisProcess_doc.i.in ARMAFactoryImplementation.i ARMAFactoryImplementation_doc.i.in WhittleFactory.i WhittleFactory_doc.i.in WhittleFactoryState.i WhittleFactoryState_doc.i.in ARMALikelihoodFactory.i ARMALikelihoodFactory_doc.i.in ARMAFactory.i ARMAFactory_doc.i.in ConditionedNormalProcess.i ConditionedNormalProcess_doc.i.in KarhunenLoeveQuadratureFactory.i KarhunenLoeveQuadratureFactory_doc.i.in KarhunenLoeveQuadratureAlgorithm.i KarhunenLoeveQuadratureAlgorithm_doc.i.in UncertaintyProcessTemplateDefs.i ) ot_add_python_module(dist_bundle1 dist_bundle1_module.i DistFunc.i DistFunc_doc.i.in Arcsine.i Arcsine_doc.i.in ArcsineFactory.i ArcsineFactory_doc.i.in ArcsineMuSigma.i ArcsineMuSigma_doc.i.in BayesDistribution.i BayesDistribution_doc.i.in Bernoulli.i Bernoulli_doc.i.in BernoulliFactory.i BernoulliFactory_doc.i.in BernsteinCopulaFactory.i BernsteinCopulaFactory_doc.i.in Beta.i Beta_doc.i.in BetaFactory.i BetaFactory_doc.i.in BetaMuSigma.i BetaMuSigma_doc.i.in Binomial.i Binomial_doc.i.in BinomialFactory.i BinomialFactory_doc.i.in Burr.i Burr_doc.i.in BurrFactory.i BurrFactory_doc.i.in ChiSquare.i ChiSquare_doc.i.in ChiSquareFactory.i ChiSquareFactory_doc.i.in Chi.i Chi_doc.i.in ChiFactory.i ChiFactory_doc.i.in CompositeDistribution.i CompositeDistribution_doc.i.in Dirac.i Dirac_doc.i.in DiracFactory.i DiracFactory_doc.i.in Dirichlet.i Dirichlet_doc.i.in DirichletFactory.i DirichletFactory_doc.i.in Epanechnikov.i Epanechnikov_doc.i.in Exponential.i Exponential_doc.i.in ExponentialFactory.i ExponentialFactory_doc.i.in FisherSnedecor.i FisherSnedecor_doc.i.in FisherSnedecorFactory.i FisherSnedecorFactory_doc.i.in Frechet.i Frechet_doc.i.in Gamma.i Gamma_doc.i.in GammaFactory.i GammaFactory_doc.i.in GammaMuSigma.i GammaMuSigma_doc.i.in GeneralizedExtremeValue.i GeneralizedExtremeValue_doc.i.in GeneralizedPareto.i GeneralizedPareto_doc.i.in GeneralizedParetoFactory.i GeneralizedParetoFactory_doc.i.in Geometric.i Geometric_doc.i.in GeometricFactory.i GeometricFactory_doc.i.in Gumbel.i Gumbel_doc.i.in GumbelFactory.i GumbelFactory_doc.i.in GumbelAB.i GumbelAB_doc.i.in GumbelMuSigma.i GumbelMuSigma_doc.i.in ) ot_add_python_module(dist_bundle2 dist_bundle2_module.i Histogram.i Histogram_doc.i.in HistogramFactory.i HistogramFactory_doc.i.in InverseChiSquare.i InverseChiSquare_doc.i.in InverseGamma.i InverseGamma_doc.i.in InverseNormal.i InverseNormal_doc.i.in InverseNormalFactory.i InverseNormalFactory_doc.i.in InverseWishart.i InverseWishart_doc.i.in KPermutationsDistribution.i KPermutationsDistribution_doc.i.in KernelMixture.i KernelMixture_doc.i.in KernelSmoothing.i KernelSmoothing_doc.i.in Laplace.i Laplace_doc.i.in LaplaceFactory.i LaplaceFactory_doc.i.in Logistic.i Logistic_doc.i.in LogisticFactory.i LogisticFactory_doc.i.in LogNormal.i LogNormal_doc.i.in LogNormalFactory.i LogNormalFactory_doc.i.in LogNormalMuSigma.i LogNormalMuSigma_doc.i.in LogNormalMuSigmaOverMu.i LogNormalMuSigmaOverMu_doc.i.in LogUniform.i LogUniform_doc.i.in LogUniformFactory.i LogUniformFactory_doc.i.in MarginalDistribution.i MaximumDistribution.i MaximumDistribution_doc.i.in MaximumEntropyOrderStatisticsDistribution.i MaximumEntropyOrderStatisticsDistribution_doc.i.in MaximumEntropyOrderStatisticsCopula.i MaximumEntropyOrderStatisticsCopula_doc.i.in MaximumLikelihoodFactory.i MaximumLikelihoodFactory_doc.i.in MeixnerDistribution.i MeixnerDistribution_doc.i.in MeixnerDistributionFactory.i MeixnerDistributionFactory_doc.i.in MethodOfMomentsFactory.i MethodOfMomentsFactory_doc.i.in Mixture.i Mixture_doc.i.in ConditionalDistribution.i ConditionalDistribution_doc.i.in PosteriorDistribution.i PosteriorDistribution_doc.i.in Multinomial.i Multinomial_doc.i.in MultinomialFactory.i MultinomialFactory_doc.i.in NegativeBinomial.i NegativeBinomial_doc.i.in NegativeBinomialFactory.i NegativeBinomialFactory_doc.i.in NonCentralChiSquare.i NonCentralChiSquare_doc.i.in NonCentralStudent.i NonCentralStudent_doc.i.in Normal.i Normal_doc.i.in NormalFactory.i NormalFactory_doc.i.in NormalGamma.i NormalGamma_doc.i.in ) ot_add_python_module(dist_bundle3 dist_bundle3_module.i OrderStatisticsMarginalChecker.i OrderStatisticsMarginalChecker_doc.i.in ParametrizedDistribution.i ParametrizedDistribution_doc.i.in Poisson.i Poisson_doc.i.in PoissonFactory.i PoissonFactory_doc.i.in ProductDistribution.i ProductDistribution_doc.i.in RandomMixture.i RandomMixture_doc.i.in Rayleigh.i Rayleigh_doc.i.in RayleighFactory.i RayleighFactory_doc.i.in Rice.i Rice_doc.i.in RiceFactory.i RiceFactory_doc.i.in Skellam.i Skellam_doc.i.in SkellamFactory.i SkellamFactory_doc.i.in Student.i Student_doc.i.in StudentFactory.i StudentFactory_doc.i.in Trapezoidal.i Trapezoidal_doc.i.in TrapezoidalFactory.i TrapezoidalFactory_doc.i.in Triangular.i Triangular_doc.i.in TriangularFactory.i TriangularFactory_doc.i.in TruncatedDistribution.i TruncatedDistribution_doc.i.in TruncatedNormal.i TruncatedNormal_doc.i.in TruncatedNormalFactory.i TruncatedNormalFactory_doc.i.in Uniform.i Uniform_doc.i.in UniformFactory.i UniformFactory_doc.i.in UserDefined.i UserDefined_doc.i.in UserDefinedFactory.i UserDefinedFactory_doc.i.in VonMises.i VonMises_doc.i.in Weibull.i Weibull_doc.i.in WeibullFactory.i WeibullFactory_doc.i.in WeibullMuSigma.i WeibullMuSigma_doc.i.in Wishart.i Wishart_doc.i.in ZipfMandelbrot.i ZipfMandelbrot_doc.i.in UncertaintyDistTemplateDefs.i ) ot_add_python_module(bayesian bayesian_module.i CalibrationStrategyImplementation.i CalibrationStrategyImplementation_doc.i.in CalibrationStrategy.i CalibrationStrategy_doc.i.in SamplerImplementation.i SamplerImplementation_doc.i.in Sampler.i Sampler_doc.i.in MCMC.i MCMC_doc.i.in RandomWalkMetropolisHastings.i RandomWalkMetropolisHastings_doc.i.in PosteriorRandomVector.i PosteriorRandomVector_doc.i.in ConditionalRandomVector.i ConditionalRandomVector_doc.i.in UncertaintyBayesianTemplateDefs.i ) ot_add_python_module(classification classification_module.i MixtureClassifier.i MixtureClassifier_doc.i.in UncertaintyClassificationTemplateDefs.i ) ot_add_python_module(weightedexperiment weightedexperiment_module.i WeightedExperiment.i WeightedExperiment_doc.i.in WeightedExperimentImplementation.i WeightedExperimentImplementation_doc.i.in BootstrapExperiment.i BootstrapExperiment_doc.i.in FixedExperiment.i FixedExperiment_doc.i.in ImportanceSamplingExperiment.i ImportanceSamplingExperiment_doc.i.in GaussProductExperiment.i GaussProductExperiment_doc.i.in LHSExperiment.i LHSExperiment_doc.i.in SimulatedAnnealingLHS.i SimulatedAnnealingLHS_doc.i.in MonteCarloLHS.i MonteCarloLHS_doc.i.in LHSResult.i LHSResult_doc.i.in OptimalLHSExperiment.i OptimalLHSExperiment_doc.i.in SpaceFillingPhiP.i SpaceFillingPhiP_doc.i.in SpaceFillingMinDist.i SpaceFillingMinDist_doc.i.in SpaceFillingC2.i SpaceFillingC2_doc.i.in SpaceFillingImplementation.i SpaceFillingImplementation_doc.i.in SpaceFilling.i SpaceFilling_doc.i.in LinearProfile.i LinearProfile_doc.i.in GeometricProfile.i GeometricProfile_doc.i.in TemperatureProfile.i TemperatureProfile_doc.i.in TemperatureProfileImplementation.i TemperatureProfileImplementation_doc.i.in LowDiscrepancyExperiment.i LowDiscrepancyExperiment_doc.i.in MonteCarloExperiment.i MonteCarloExperiment_doc.i.in UncertaintyWeightedExperimentTemplateDefs.i ) ot_add_python_module(orthogonalbasis orthogonalbasis_module.i OrthogonalUniVariatePolynomial.i OrthogonalUniVariatePolynomial_doc.i.in OrthogonalUniVariatePolynomialFactory.i OrthogonalUniVariatePolynomialFactory_doc.i.in CharlierFactory.i CharlierFactory_doc.i.in ChebychevFactory.i ChebychevFactory_doc.i.in HermiteFactory.i HermiteFactory_doc.i.in HistogramPolynomialFactory.i HistogramPolynomialFactory_doc.i.in JacobiFactory.i JacobiFactory_doc.i.in KrawtchoukFactory.i KrawtchoukFactory_doc.i.in LaguerreFactory.i LaguerreFactory_doc.i.in LegendreFactory.i LegendreFactory_doc.i.in MeixnerFactory.i MeixnerFactory_doc.i.in SoizeGhanemFactory.i SoizeGhanemFactory_doc.i.in OrthogonalUniVariatePolynomialFamily.i OrthogonalUniVariatePolynomialFamily_doc.i.in OrthonormalizationAlgorithmImplementation.i OrthonormalizationAlgorithmImplementation_doc.i.in OrthonormalizationAlgorithm.i OrthonormalizationAlgorithm_doc.i.in AdaptiveStieltjesAlgorithm.i AdaptiveStieltjesAlgorithm_doc.i.in ChebychevAlgorithm.i ChebychevAlgorithm_doc.i.in GramSchmidtAlgorithm.i GramSchmidtAlgorithm_doc.i.in StandardDistributionPolynomialFactory.i StandardDistributionPolynomialFactory_doc.i.in OrthogonalFunctionFactory.i OrthogonalFunctionFactory_doc.i.in OrthogonalProductPolynomialFactory.i OrthogonalProductPolynomialFactory_doc.i.in OrthogonalBasis.i OrthogonalBasis_doc.i.in UniVariateFunctionImplementation.i UniVariateFunctionImplementation_doc.i.in UniVariateFunction.i UniVariateFunction_doc.i.in MonomialFunction.i MonomialFunction_doc.i.in OrthogonalUniVariateFunctionFactory.i OrthogonalUniVariateFunctionFactory_doc.i.in OrthogonalUniVariateFunctionFamily.i OrthogonalUniVariateFunctionFamily_doc.i.in OrthogonalUniVariatePolynomialFunctionFactory.i OrthogonalUniVariatePolynomialFunctionFactory_doc.i.in FourierSeriesFactory.i FourierSeriesFactory_doc.i.in HaarWaveletFactory.i HaarWaveletFactory_doc.i.in OrthogonalProductFunctionFactory.i OrthogonalProductFunctionFactory_doc.i.in CanonicalTensorEvaluation.i CanonicalTensorEvaluation_doc.i.in CanonicalTensorGradient.i CanonicalTensorGradient_doc.i.in UncertaintyOrthogonalBasisTemplateDefs.i ) ot_add_python_module(metamodel metamodel_module.i MetaModelResult.i MetaModelResult_doc.i.in MetaModelAlgorithm.i MetaModelAlgorithm_doc.i.in KrigingResult.i KrigingResult_doc.i.in MetaModelValidation.i MetaModelValidation_doc.i.in GeneralLinearModelResult.i GeneralLinearModelResult_doc.i.in GeneralLinearModelAlgorithm.i GeneralLinearModelAlgorithm_doc.i.in LinearTaylor.i LinearTaylor_doc.i.in QuadraticTaylor.i QuadraticTaylor_doc.i.in LinearLeastSquares.i LinearLeastSquares_doc.i.in QuadraticLeastSquares.i QuadraticLeastSquares_doc.i.in AdaptiveStrategyImplementation.i AdaptiveStrategyImplementation_doc.i.in FixedStrategy.i FixedStrategy_doc.i.in SequentialStrategy.i SequentialStrategy_doc.i.in CleaningStrategy.i CleaningStrategy_doc.i.in AdaptiveStrategy.i AdaptiveStrategy_doc.i.in ProjectionStrategyImplementation.i ProjectionStrategyImplementation_doc.i.in LeastSquaresStrategy.i LeastSquaresStrategy_doc.i.in IntegrationStrategy.i IntegrationStrategy_doc.i.in ProjectionStrategy.i ProjectionStrategy_doc.i.in FunctionalChaosResult.i FunctionalChaosResult_doc.i.in FunctionalChaosAlgorithm.i FunctionalChaosAlgorithm_doc.i.in KrigingAlgorithm.i KrigingAlgorithm_doc.i.in RandomVector.i RandomVector_doc.i.in PythonEvaluation.cxx PythonGradient.cxx PythonHessian.cxx PythonRandomVectorImplementation.cxx CompositeRandomVector.i EventRandomVector.i EventDomain.i EventProcess.i Event.i Event_doc.i.in StandardEvent.i StandardEvent_doc.i.in FunctionalChaosRandomVector.i FunctionalChaosRandomVector_doc.i.in KrigingRandomVector.i KrigingRandomVector_doc.i.in TensorApproximationResult.i TensorApproximationResult_doc.i.in TensorApproximationAlgorithm.i TensorApproximationAlgorithm_doc.i.in UncertaintyMetaModelTemplateDefs.i ) ot_add_python_module(transformation transformation_module.i MarginalTransformationEvaluation.i MarginalTransformationEvaluation_doc.i.in MarginalTransformationGradient.i MarginalTransformationHessian.i NatafEllipticalCopulaEvaluation.i NatafEllipticalCopulaGradient.i NatafEllipticalCopulaHessian.i InverseNatafEllipticalCopulaEvaluation.i InverseNatafEllipticalCopulaGradient.i InverseNatafEllipticalCopulaHessian.i NatafIndependentCopulaEvaluation.i NatafIndependentCopulaGradient.i NatafIndependentCopulaHessian.i InverseNatafIndependentCopulaEvaluation.i InverseNatafIndependentCopulaGradient.i InverseNatafIndependentCopulaHessian.i NatafEllipticalDistributionEvaluation.i NatafEllipticalDistributionGradient.i NatafEllipticalDistributionHessian.i InverseNatafEllipticalDistributionEvaluation.i InverseNatafEllipticalDistributionGradient.i InverseNatafEllipticalDistributionHessian.i RosenblattEvaluation.i InverseRosenblattEvaluation.i BoxCoxFactory.i BoxCoxFactory_doc.i.in TrendFactory.i TrendFactory_doc.i.in DistributionTransformation.i DistributionTransformation_doc.i.in UncertaintyTransformationTemplateDefs.i ) ot_add_python_module(analytical analytical_module.i AnalyticalResult.i AnalyticalResult_doc.i.in Analytical.i Analytical_doc.i.in FORMResult.i FORMResult_doc.i.in FORM.i FORM_doc.i.in SORMResult.i SORMResult_doc.i.in SORM.i SORM_doc.i.in StrongMaximumTest.i StrongMaximumTest_doc.i.in UncertaintyAnalyticalTemplateDefs.i ) ot_add_python_module(simulation simulation_module.i SimulationSensitivityAnalysis.i SimulationSensitivityAnalysis_doc.i.in SimulationResultImplementation.i SimulationResultImplementation_doc.i.in SimulationResult.i SimulationResult_doc.i.in Simulation.i Simulation_doc.i.in PostAnalyticalSimulation.i PostAnalyticalSimulation_doc.i.in Wilks.i Wilks_doc.i.in MonteCarlo.i MonteCarlo_doc.i.in LHS.i LHS_doc.i.in RandomizedLHS.i RandomizedLHS_doc.i.in ImportanceSampling.i ImportanceSampling_doc.i.in PostAnalyticalControlledImportanceSampling.i PostAnalyticalControlledImportanceSampling_doc.i.in PostAnalyticalImportanceSampling.i PostAnalyticalImportanceSampling_doc.i.in RootStrategyImplementation.i RootStrategyImplementation_doc.i.in RootStrategy.i RootStrategy_doc.i.in SamplingStrategyImplementation.i SamplingStrategyImplementation_doc.i.in SamplingStrategy.i SamplingStrategy_doc.i.in DirectionalSampling.i DirectionalSampling_doc.i.in OrthogonalDirection.i OrthogonalDirection_doc.i.in RandomDirection.i RandomDirection_doc.i.in MediumSafe.i MediumSafe_doc.i.in RiskyAndFast.i RiskyAndFast_doc.i.in SafeAndSlow.i SafeAndSlow_doc.i.in QuasiMonteCarlo.i QuasiMonteCarlo_doc.i.in RandomizedQuasiMonteCarlo.i RandomizedQuasiMonteCarlo_doc.i.in QuasiMonteCarloResult.i QuasiMonteCarloResult_doc.i.in SubsetSamplingResult.i SubsetSamplingResult_doc.i.in SubsetSampling.i SubsetSampling_doc.i.in AdaptiveDirectionalSampling.i AdaptiveDirectionalSampling_doc.i.in UncertaintySimulationTemplateDefs.i ) ot_add_python_module(stattests stattests_module.i VisualTest.i VisualTest_doc.i.in FittingTest.i FittingTest_doc.i.in HypothesisTest.i HypothesisTest_doc.i.in LinearModelTest.i LinearModelTest_doc.i.in NormalityTest.i NormalityTest_doc.i.in DickeyFullerTest.i DickeyFullerTest_doc.i.in UncertaintyStatTestsTemplateDefs.i ) ot_add_python_module(uncertainty uncertainty_module.i ANCOVA.i ANCOVA_doc.i.in FAST.i FAST_doc.i.in EfficientGlobalOptimization.i EfficientGlobalOptimization_doc.i.in TaylorExpansionMoments.i TaylorExpansionMoments_doc.i.in SobolIndicesAlgorithmImplementation.i SobolIndicesAlgorithmImplementation_doc.i.in SobolIndicesAlgorithm.i SobolIndicesAlgorithm_doc.i.in MartinezSensitivityAlgorithm.i MartinezSensitivityAlgorithm_doc.i.in SaltelliSensitivityAlgorithm.i SaltelliSensitivityAlgorithm_doc.i.in JansenSensitivityAlgorithm.i JansenSensitivityAlgorithm_doc.i.in MauntzKucherenkoSensitivityAlgorithm.i MauntzKucherenkoSensitivityAlgorithm_doc.i.in UncertaintyTemplateDefs.i ) ot_add_python_module(testing testing_module.i ) set (OPENTURNS_PYTHON_MODULES ${OPENTURNS_PYTHON_MODULES} PARENT_SCOPE) # for the docstring test foreach (module ${OPENTURNS_PYTHON_MODULES}) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${module}.py DESTINATION ${OPENTURNS_PYTHON_MODULE_PATH}/openturns ) install (TARGETS _${module} LIBRARY DESTINATION ${OPENTURNS_PYTHON_MODULE_PATH}/openturns ) endforeach () set (EXTRA_PYTHON_FILES __init__.py dist.py viewer.py coupling_tools.py) install (FILES ${EXTRA_PYTHON_FILES} DESTINATION ${OPENTURNS_PYTHON_MODULE_PATH}/openturns ) install (FILES ${SWIGFILES} DESTINATION ${OPENTURNS_SWIG_INCLUDE_DIRS}) if (SPHINX_FOUND AND NUMPYDOC_FOUND AND NBSPHINX_FOUND AND IPYTHON_FOUND AND MUPARSER_FOUND AND MATPLOTLIB_FOUND AND R_rot_FOUND) # create a build site-package from which sphinx can import set (OPENTURNS_PYTHON_BUILD_MODULE_PATH ${CMAKE_CURRENT_BINARY_DIR}/site-packages) execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${OPENTURNS_PYTHON_BUILD_MODULE_PATH}/openturns) foreach (module ${OPENTURNS_PYTHON_MODULES}) execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR}/${module}.py ${OPENTURNS_PYTHON_BUILD_MODULE_PATH}/openturns/${module}.py) # FIXME: get_target_property (suffix ${SWIG_MODULE_${module}_REAL_NAME} SUFFIX) execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR}/_${module}.so ${OPENTURNS_PYTHON_BUILD_MODULE_PATH}/openturns/_${module}.so) endforeach () foreach (file ${EXTRA_PYTHON_FILES}) execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${OPENTURNS_PYTHON_BUILD_MODULE_PATH}/openturns/${file}) endforeach () # sphinx configuration set (doc_formats) list (APPEND doc_formats html) list (APPEND doc_formats htmlhelp) list (APPEND doc_formats latex) list (APPEND doc_formats doctest) list (APPEND doc_formats qthelp) list (APPEND doc_formats devhelp) set (SPHINX_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/sphinx_build) set (SPHINX_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc) file (MAKE_DIRECTORY ${SPHINX_BINARY_DIR}/_static) # currently empty configure_file (${SPHINX_SOURCE_DIR}/conf.py.in ${SPHINX_BINARY_DIR}/conf.py @ONLY) # get sphinx sources file (GLOB_RECURSE sphinx_sources ${SPHINX_SOURCE_DIR}/*.rst ${SPHINX_SOURCE_DIR}/*.rst_t ${SPHINX_SOURCE_DIR}/*.css_t ${SPHINX_SOURCE_DIR}/*.conf ${SPHINX_SOURCE_DIR}/*.py ${SPHINX_SOURCE_DIR}/*.png ${SPHINX_SOURCE_DIR}/*.svg ${SPHINX_SOURCE_DIR}/*.html ${SPHINX_SOURCE_DIR}/*.css ${SPHINX_SOURCE_DIR}/*.jpg ${SPHINX_SOURCE_DIR}/*.ico ${SPHINX_SOURCE_DIR}/*.sty ${SPHINX_SOURCE_DIR}/*.txt ${SPHINX_SOURCE_DIR}/*.in ${SPHINX_SOURCE_DIR}/*.ipynb ) # copy sphinx sources set (sphinx_clones) foreach (file ${sphinx_sources}) if (EXISTS ${file}) file (RELATIVE_PATH rel_file ${SPHINX_SOURCE_DIR} ${file}) get_filename_component (rel_path ${rel_file} PATH) file (MAKE_DIRECTORY ${SPHINX_BINARY_DIR}/${rel_path}) set (sphinx_clone ${SPHINX_BINARY_DIR}/${rel_file}) add_custom_command (OUTPUT ${sphinx_clone} COMMAND ${CMAKE_COMMAND} -E copy ${file} ${sphinx_clone} DEPENDS ${file} ) list (APPEND sphinx_clones ${sphinx_clone}) endif () endforeach () set (SPHINX_FLAGS "-W" CACHE STRING "sphinx flags") string (REPLACE " " ";" SPHINX_FLAGS ${SPHINX_FLAGS}) # generate sphinx rule for each format foreach (format ${doc_formats}) add_custom_target (sphinx_${format} COMMAND ${SPHINX_EXECUTABLE} -b ${format} ${SPHINX_FLAGS} ${SPHINX_BINARY_DIR} ${SPHINX_BINARY_DIR}/${format} DEPENDS ${sphinx_clones} ) foreach (module ${OPENTURNS_PYTHON_MODULES}) add_dependencies (sphinx_${format} _${module}) endforeach () endforeach () # build html by default set_target_properties (sphinx_html PROPERTIES EXCLUDE_FROM_ALL OFF) add_custom_command (OUTPUT ${SPHINX_BINARY_DIR}/latex/OpenTURNS.pdf WORKING_DIRECTORY ${SPHINX_BINARY_DIR}/latex COMMAND make all-pdf ) add_custom_target (sphinx_pdf DEPENDS ${SPHINX_BINARY_DIR}/latex/OpenTURNS.pdf) add_dependencies (sphinx_pdf sphinx_latex) install (DIRECTORY ${SPHINX_BINARY_DIR}/html DESTINATION ${OPENTURNS_DOC_PATH}) endif () openturns-1.9/python/src/Cache.i000066400000000000000000000001311307543307100167030ustar00rootroot00000000000000// SWIG file Cache.i %{ #include "openturns/Cache.hxx" %} %include openturns/Cache.hxx openturns-1.9/python/src/CalibrationStrategy.i000066400000000000000000000011271307543307100216600ustar00rootroot00000000000000// SWIG file CalibrationStrategy.i %{ #include "openturns/CalibrationStrategy.hxx" %} %include CalibrationStrategy_doc.i OTDefaultCollectionConvertFunctions(CalibrationStrategy) OTTypedInterfaceObjectHelper(CalibrationStrategy) OTTypedCollectionInterfaceObjectHelper(CalibrationStrategy) %include openturns/CalibrationStrategy.hxx namespace OT { %extend CalibrationStrategy { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend CalibrationStrategy { CalibrationStrategy(const CalibrationStrategy & other) { return new OT::CalibrationStrategy(other); } } } openturns-1.9/python/src/CalibrationStrategyImplementation.i000066400000000000000000000006561307543307100245740ustar00rootroot00000000000000// SWIG file CalibrationStrategyImplementation.i %{ #include "openturns/CalibrationStrategyImplementation.hxx" %} %include CalibrationStrategyImplementation_doc.i %include openturns/CalibrationStrategyImplementation.hxx namespace OT { %extend CalibrationStrategyImplementation { CalibrationStrategyImplementation(const CalibrationStrategyImplementation & other) { return new OT::CalibrationStrategyImplementation(other); } } } openturns-1.9/python/src/CalibrationStrategyImplementation_doc.i.in000066400000000000000000000146401307543307100260240ustar00rootroot00000000000000%define OT_CalibrationStrategy_doc "Calibration strategy. Available constructors: CalibrationStrategy(*range*) CalibrationStrategy(*range=[0.117, 0.468], expansionFactor=1.2, shrinkFactor=0.8, calibrationStep=100*) Parameters ---------- range : :class:`~openturns.Interval` of dimension 1 :math:`[m,M]` Acceptance rate values for which no update of the *calibration* coefficient is performed. expansionFactor : float, :math:`e > 1` Expansion factor :math:`e` to use to rescale the *calibration* coefficient if the latter is too high (greater than the upper bound of range). shrinkFactor : float, :math:`0 < s < 1` Shrink factor :math:`s` to use to rescale the *calibration* coefficient if the latter is too low (smaller than the lower bound of range). If *expansionFactor* is specified, *shrinkFactor* must be mentioned too. calibrationStep : positive int Calibration step corresponding for example to :math:`q` in the description of the method :meth:`~openturns.RandomWalkMetropolisHastings.getCalibrationStrategyPerComponent` of the RandomWalkMetropolisHastings class. Notes ----- A CalibrationStrategy can be used by a :class:`~openturns.RandomWalkMetropolisHastings` for example (see the description of the method :meth:`~openturns.RandomWalkMetropolisHastings.getCalibrationStrategyPerComponent` )." %enddef %feature("docstring") OT::CalibrationStrategyImplementation OT_CalibrationStrategy_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_computeUpdateFactor_doc "Compute the update factor. Parameters ---------- rho : float Acceptance rate :math:`\rho` to take into account. Returns ------- lambda : float Let :math:`\lambda` be the *calibration* coefficient to update, it gives a factor :math:`\phi(\rho)` such that :math:`\phi(\rho) \lambda` is the updated *calibration* coefficient according to the strategy. The value is computed as follows: .. math:: \phi(\rho) = \left\{ \begin{array}{l} \displaystyle s \quad if \; \rho < m \\ \displaystyle e \quad if \; \rho > M \\ \displaystyle 1 \quad otherwise \end{array} \right. with :math:`s \in ]0, 1[, e > 1` and :math:`[m,M]` the values given, respectively, by the methods :meth:`getShrinkFactor`, :meth:`getExpansionFactor` and :meth:`getRange`. Examples -------- >>> import openturns as ot >>> calibration = ot.CalibrationStrategy(ot.Interval(0.1, 0.4), 1.2, 0.8) >>> print(calibration.computeUpdateFactor(0.09)) 0.8 >>> print(calibration.computeUpdateFactor(0.6)) 1.2 >>> print(calibration.computeUpdateFactor(0.18)) 1.0" %enddef %feature("docstring") OT::CalibrationStrategyImplementation::computeUpdateFactor OT_CalibrationStrategy_computeUpdateFactor_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_getCalibrationStep_doc "Get the calibration step. Returns ------- step : positive int Calibration step corresponding for example to :math:`q` in the description of the method :meth:`~openturns.RandomWalkMetropolisHastings.getCalibrationStrategyPerComponent` of the RandomWalkMetropolisHastings class." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::getCalibrationStep OT_CalibrationStrategy_getCalibrationStep_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_setCalibrationStep_doc "Set the calibration step. Parameters ---------- step : positive int Calibration step corresponding for example to :math:`q` in the description of the method :meth:`~openturns.RandomWalkMetropolisHastings.getCalibrationStrategyPerComponent` of the RandomWalkMetropolisHastings class." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::setCalibrationStep OT_CalibrationStrategy_setCalibrationStep_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_getExpansionFactor_doc "Get the expansion factor. Returns ------- expansionFactor : float Expansion factor :math:`e`. See the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::getExpansionFactor OT_CalibrationStrategy_getExpansionFactor_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_setExpansionFactor_doc "Set the expansion factor. Parameters ---------- expansionFactor : float, :math:`e > 1` Expansion factor :math:`e`. See the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::setExpansionFactor OT_CalibrationStrategy_setExpansionFactor_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_getRange_doc "Get the range. Returns ------- range : :class:`~openturns.Interval` of dimension 1 Range :math:`[m,M]` in the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::getRange OT_CalibrationStrategy_getRange_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_setRange_doc "Set the range. Parameters ---------- range : :class:`~openturns.Interval` of dimension 1 Range :math:`[m,M]` in the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::setRange OT_CalibrationStrategy_setRange_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_getShrinkFactor_doc "Get the shrink factor. Returns ------- shrinkFactor : float Shrink factor :math:`s` in the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::getShrinkFactor OT_CalibrationStrategy_getShrinkFactor_doc // --------------------------------------------------------------------- %define OT_CalibrationStrategy_setShrinkFactor_doc "Set the shrink factor. Parameters ---------- shrinkFactor : float, :math:`0 < s < 1` Shrink factor :math:`s` in the description of the method :meth:`computeUpdateFactor`." %enddef %feature("docstring") OT::CalibrationStrategyImplementation::setShrinkFactor OT_CalibrationStrategy_setShrinkFactor_docopenturns-1.9/python/src/CalibrationStrategy_doc.i.in000066400000000000000000000021431307543307100231110ustar00rootroot00000000000000// CalibrationStrategy docstrings are defined in CalibrationStrategyImplementation_doc.i.in %feature("docstring") OT::CalibrationStrategy OT_CalibrationStrategy_doc %feature("docstring") OT::CalibrationStrategy::computeUpdateFactor OT_CalibrationStrategy_computeUpdateFactor_doc %feature("docstring") OT::CalibrationStrategy::getCalibrationStep OT_CalibrationStrategy_getCalibrationStep_doc %feature("docstring") OT::CalibrationStrategy::setCalibrationStep OT_CalibrationStrategy_setCalibrationStep_doc %feature("docstring") OT::CalibrationStrategy::getExpansionFactor OT_CalibrationStrategy_getExpansionFactor_doc %feature("docstring") OT::CalibrationStrategy::setExpansionFactor OT_CalibrationStrategy_setExpansionFactor_doc %feature("docstring") OT::CalibrationStrategy::getRange OT_CalibrationStrategy_getRange_doc %feature("docstring") OT::CalibrationStrategy::setRange OT_CalibrationStrategy_setRange_doc %feature("docstring") OT::CalibrationStrategy::getShrinkFactor OT_CalibrationStrategy_getShrinkFactor_doc %feature("docstring") OT::CalibrationStrategy::setShrinkFactor OT_CalibrationStrategy_setShrinkFactor_docopenturns-1.9/python/src/CanonicalTensorEvaluation.i000066400000000000000000000005561307543307100230250ustar00rootroot00000000000000// SWIG file CanonicalTensorEvaluation.i %{ #include "openturns/CanonicalTensorEvaluation.hxx" %} %include CanonicalTensorEvaluation_doc.i %include openturns/CanonicalTensorEvaluation.hxx namespace OT { %extend CanonicalTensorEvaluation { CanonicalTensorEvaluation(const CanonicalTensorEvaluation & other) { return new OT::CanonicalTensorEvaluation(other); } } } openturns-1.9/python/src/CanonicalTensorEvaluation_doc.i.in000066400000000000000000000055171307543307100242610ustar00rootroot00000000000000%feature("docstring") OT::CanonicalTensorEvaluation "Canonical tensor format evaluation. Available constructor: CanonicalTensorEvaluation(*functionFamilies, nk, rank*) Parameters ---------- functionFamilies : sequence of :class:`~openturns.OrthogonalUniVariateFunctionFamily` The basis factory. nk : sequence of int Maximum basis order along each component. rank : int, optional (default=1) rank of tensor See also -------- TensorApproximationAlgorithm Examples -------- >>> import openturns as ot >>> dim = 3 >>> nk = [10] * dim >>> factoryCollection = [ot.FourierSeriesFactory()] * dim >>> rank = 2 >>> tensor = ot.CanonicalTensorEvaluation(factoryCollection, nk, rank)" // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getFunctionFamilies "Basis accessor. Returns ------- functionFamilies : sequence of :class:`~openturns.OrthogonalUniVariateFunctionFamily` The basis factory." // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getRank "Rank accessor. Returns ------- rank : int rank of tensor" // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::setRank "Rank accessor. Parameters ---------- rank : int rank of tensor" // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getDegrees "Rank accessor. Returns ------- nk : :class:`~openturns.Indices` Maximum basis order along each component." // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getBasis "Basis accessor. Parameters ---------- j : int Component index Returns ------- basis : :class:`~openturns.Basis` Basis for component j." // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getCoefficients "Coefficients accessor. Parameters ---------- i : int Rank index j : int Component index Returns ------- beta : :class:`~openturns.Point` Coefficients for rank i and component j." // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::setCoefficients "Coefficients accessor. Parameters ---------- i : int Rank index j : int Component index beta : sequence of float Coefficients for rank i and component j" // --------------------------------------------------------------------- %feature("docstring") OT::CanonicalTensorEvaluation::getMarginalRank "Marginal tensor accessor. Parameters ---------- i : int Rank index Returns ------- tensor : :class:`~openturns.CanonicalTensorEvaluation` Tensor data for rank i." openturns-1.9/python/src/CanonicalTensorGradient.i000066400000000000000000000005361307543307100224510ustar00rootroot00000000000000// SWIG file CanonicalTensorGradient.i %{ #include "openturns/CanonicalTensorGradient.hxx" %} %include CanonicalTensorGradient_doc.i %include openturns/CanonicalTensorGradient.hxx namespace OT { %extend CanonicalTensorGradient { CanonicalTensorGradient(const CanonicalTensorGradient & other) { return new OT::CanonicalTensorGradient(other); } } } openturns-1.9/python/src/CanonicalTensorGradient_doc.i.in000066400000000000000000000004531307543307100237010ustar00rootroot00000000000000%feature("docstring") OT::CanonicalTensorGradient "Canonical tensor format gradient. Available constructor: CanonicalTensorGradient(*evaluation*) Parameters ---------- evaluation : :class:`~openturns.CanonicalTensorEvaluation` The evaluation. See also -------- CanonicalTensorEvaluation" openturns-1.9/python/src/Catalog.i000066400000000000000000000003021307543307100172520ustar00rootroot00000000000000// SWIG file Catalog.i %{ #include "openturns/Catalog.hxx" %} %include openturns/Catalog.hxx namespace OT { %extend Catalog { const String __str__() const { return self->__repr__(); } } } openturns-1.9/python/src/CauchyModel.i000066400000000000000000000003761307543307100201100ustar00rootroot00000000000000// SWIG file CauchyModel.i %{ #include "openturns/CauchyModel.hxx" %} %include CauchyModel_doc.i %include openturns/CauchyModel.hxx namespace OT { %extend CauchyModel { CauchyModel(const CauchyModel & other) { return new OT::CauchyModel(other); } } } openturns-1.9/python/src/CauchyModel_doc.i.in000066400000000000000000000032651307543307100213420ustar00rootroot00000000000000%feature("docstring") OT::CauchyModel "Cauchy spectral model. Available constructors: CauchyModel(*theta, sigma*) Parameters ---------- theta : sequence of float Scale coefficients :math:`\theta` of the spectral density function. Vector of size n sigma : sequence of float Amplitude coefficients :math:`\sigma` of the spectral density function. Vector of size p Notes ----- The spectral density function of input dimension **n** and output dimension **p** writes: .. math:: \forall (i,j) \in [0,p-1]^2, S(f)_{i,j} = \Sigma_{i,j} \prod_{k=1}^{n} \frac{\theta_k}{1 + (2\pi \theta_k f)^2} Examples -------- >>> import openturns as ot >>> spectralModel = ot.CauchyModel([3.0, 2.0], [2.0]) >>> f = 0.3 >>> print(spectralModel(f)) [[ (0.191364,0) ]] >>> f = 10 >>> print(spectralModel(f)) [[ (1.71084e-07,0) ]]" // --------------------------------------------------------------------- %define OT_CauchyModel_computeStandardRepresentative_doc "Compute the standard representant of the spectral density function. Parameters ---------- tau : float Frequency value. Returns ------- rho : Complex Standard representant factor of the spectral density function. Notes ----- Using definitions in :class:`~openturns.SpectralModel`: the standard representative function writes: .. math:: \forall \vect{f} \in \Rset^n, \rho(\vect{f} \odot \vect{\theta}) = \prod_{k=1}^{n} \frac{1}{1 + (2\pi \theta_k f)^2} where :math:`(\vect{f} \odot \vect{\theta})_k = \vect{f}_k \vect{\theta}_k`" %enddef %feature("docstring") OT::CauchyModel::computeStandardRepresentative OT_CauchyModel_computeStandardRepresentative_doc // --------------------------------------------------------------------- openturns-1.9/python/src/CenteredFiniteDifferenceGradient.i000066400000000000000000000015611307543307100242310ustar00rootroot00000000000000// SWIG file CenteredFiniteDifferenceGradient.i %{ #include "openturns/CenteredFiniteDifferenceGradient.hxx" %} %include CenteredFiniteDifferenceGradient_doc.i %include openturns/CenteredFiniteDifferenceGradient.hxx namespace OT { %extend CenteredFiniteDifferenceGradient { CenteredFiniteDifferenceGradient(const CenteredFiniteDifferenceGradient & other) { return new OT::CenteredFiniteDifferenceGradient(other); } CenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationImplementation & evaluation) { return new OT::CenteredFiniteDifferenceGradient(epsilon, evaluation.clone()); } CenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationImplementation & evaluation) { return new OT::CenteredFiniteDifferenceGradient(epsilon, evaluation.clone()); } } } openturns-1.9/python/src/CenteredFiniteDifferenceGradient_doc.i.in000066400000000000000000000023651307543307100254660ustar00rootroot00000000000000%feature("docstring") OT::CenteredFiniteDifferenceGradient "First order centered finite-difference scheme. Available constructors: CenteredFiniteDifferenceGradient(*epsilon, evalImpl*) CenteredFiniteDifferenceGradient(*step, evalImpl*) Parameters ---------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function. epsilon : float, sequence of float Finite difference steps for each dimension. step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed. Notes ----- *CenteredFiniteDifferenceGradient* provides a first order centered finite- difference scheme: .. math:: \frac{\partial f_j}{\partial x_i} \approx \frac{f_j(x + \epsilon_i) - f_j(x - \epsilon_i)} {2 \epsilon_i} Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> epsilon = [0.01]*2 >>> myGradient = ot.CenteredFiniteDifferenceGradient(epsilon, myFunc.getEvaluation()) >>> inPoint = [1.]*2 >>> print(myGradient.gradient(inPoint)) [[ 0.841471 -0.909282 0.735771 ] [ 0.540293 -0.909282 -1.10366 ]]" openturns-1.9/python/src/CenteredFiniteDifferenceHessian.i000066400000000000000000000015421307543307100240650ustar00rootroot00000000000000// SWIG file CenteredFiniteDifferenceHessian.i %{ #include "openturns/CenteredFiniteDifferenceHessian.hxx" %} %include CenteredFiniteDifferenceHessian_doc.i %include openturns/CenteredFiniteDifferenceHessian.hxx namespace OT { %extend CenteredFiniteDifferenceHessian { CenteredFiniteDifferenceHessian(const CenteredFiniteDifferenceHessian & other) { return new OT::CenteredFiniteDifferenceHessian(other); } CenteredFiniteDifferenceHessian(const Point & epsilon, const EvaluationImplementation & evaluation) { return new OT::CenteredFiniteDifferenceHessian(epsilon, evaluation.clone()); } CenteredFiniteDifferenceHessian(const Scalar epsilon, const EvaluationImplementation & evaluation) { return new OT::CenteredFiniteDifferenceHessian(epsilon, evaluation.clone()); } } } openturns-1.9/python/src/CenteredFiniteDifferenceHessian_doc.i.in000066400000000000000000000032211307543307100253130ustar00rootroot00000000000000%feature("docstring") OT::CenteredFiniteDifferenceHessian "Second order centered finite-difference scheme. Available constructors: CenteredFiniteDifferenceHessian(*epsilon, evalImpl*) CenteredFiniteDifferenceHessian(*step, evalImpl*) Parameters ---------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function. epsilon : float, sequence of float Finite difference steps for each dimension. step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed. Notes ----- *CenteredFiniteDifferenceHessian* provides a second order centered finite- difference scheme: .. math:: \frac{\partial^2 f_k}{\partial x_i \partial x_j} \approx \frac{ f_k(x + \epsilon_i + \epsilon_j) - f_k(x + \epsilon_i - \epsilon_j) + f_k(x - \epsilon_i - \epsilon_j) - f_k(x - \epsilon_i + \epsilon_j)} {4 \epsilon_i \epsilon_j} Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> epsilon = [0.01]*2 >>> myHessian = ot.CenteredFiniteDifferenceHessian(epsilon, myFunc.getEvaluation()) >>> inPoint = [1.0]*2 >>> print(myHessian.hessian(inPoint)) sheet #0 [[ 0 0.540293 ] [ 0.540293 -0.841443 ]] sheet #1 [[ 0.416133 0.416133 ] [ 0.416133 0.416133 ]] sheet #2 [[ 0.735783 -1.10368 ] [ -1.10368 1.47152 ]]" openturns-1.9/python/src/CharlierFactory.i000066400000000000000000000004361307543307100207710ustar00rootroot00000000000000// SWIG file CharlierFactory.i %{ #include "openturns/CharlierFactory.hxx" %} %include CharlierFactory_doc.i %include openturns/CharlierFactory.hxx namespace OT { %extend CharlierFactory { CharlierFactory(const CharlierFactory & other) { return new OT::CharlierFactory(other); } } } openturns-1.9/python/src/CharlierFactory_doc.i.in000066400000000000000000000030351307543307100222210ustar00rootroot00000000000000%feature("docstring") OT::CharlierFactory "Charlier specific orthonormal univariate polynomial family. For :class:`~openturns.Poisson`'s distribution. Available constructors: CharlierFactory(*lambda=1.0*) Parameters ---------- lambda : float, :math:`\lambda > 0` Location parameter of :class:`~openturns.Poisson`'s distribution. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Charlier polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle - \frac{1}{\sqrt{\lambda (i + 1)}} \\ b_i & = & \displaystyle \frac{i + \lambda}{\sqrt{\lambda (i + 1)}} \\ c_i & = & \displaystyle - \sqrt{1 - \frac{1}{i + 1}} \end{array}, \quad 1 < i where :math:`\lambda` is the location parameter of :class:`~openturns.Poisson`'s distribution. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.CharlierFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 1 - X 0.707107 - 2.12132 * X + 0.707107 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::CharlierFactory::getLambda "Accessor to the location parameter of :class:`~openturns.Poisson`. Returns ------- lambda : float Location parameter of :class:`~openturns.Poisson`'s distribution." openturns-1.9/python/src/ChebychevAlgorithm.i000066400000000000000000000004651307543307100214610ustar00rootroot00000000000000// SWIG file ChebychevAlgorithm.i %{ #include "openturns/ChebychevAlgorithm.hxx" %} %include ChebychevAlgorithm_doc.i %include openturns/ChebychevAlgorithm.hxx namespace OT{ %extend ChebychevAlgorithm { ChebychevAlgorithm(const ChebychevAlgorithm & other) { return new OT::ChebychevAlgorithm(other); } } } openturns-1.9/python/src/ChebychevAlgorithm_doc.i.in000066400000000000000000000032211307543307100227040ustar00rootroot00000000000000%feature("docstring") OT::ChebychevAlgorithm "Chebychev algorithm used to build the orthonormal basis. The algorithm builds the basis With respect to a specific distribution. Available constructors: ChebychevAlgorithm(*measure*) ChebychevAlgorithm(*measure, referenceFamily*) Parameters ---------- measure : :class:`~openturns.Distribution` A measure for which the orthonormal polynomial basis is built. referenceFamily : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` A polynomial family from which the algorithm starts to build the orthonornal polynomial family. When not specified, the *referenceFamily* is the canonical one: :math:`\{ 1, x, x^2, \ldots\}`. See also -------- OrthonormalizationAlgorithm, GramSchmidtAlgorithm Notes ----- It implements the Chebychev algorithm that builds the orthonormalized polynomial family with respect to the distribution *measure*, where the initial polynomial family is the one specified in *referenceFamily*. " // --------------------------------------------------------------------- %feature("docstring") OT::ChebychevAlgorithm::getReferenceFamily "Accessor to the reference family. Returns ------- family : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` The polynomial family from which the orthonormal polynomial family is built." // --------------------------------------------------------------------- %feature("docstring") OT::ChebychevAlgorithm::setReferenceFamily "Accessor to the reference family. Parameters ---------- family : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` The polynomial family from which the orthonormal polynomial family is built." openturns-1.9/python/src/ChebychevFactory.i000066400000000000000000000013161307543307100211360ustar00rootroot00000000000000// SWIG file ChebychevFactory.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::ChebychevFactory::getNodesAndWeights(OT::Point & weights) const; %{ #include "openturns/ChebychevFactory.hxx" %} %include ChebychevFactory_doc.i %include openturns/ChebychevFactory.hxx namespace OT { %extend ChebychevFactory { ChebychevFactory(const ChebychevFactory & other) { return new OT::ChebychevFactory(other); } } } openturns-1.9/python/src/ChebychevFactory_doc.i.in000066400000000000000000000015461307543307100223750ustar00rootroot00000000000000%feature("docstring") OT::ChebychevFactory "Chebychev specific orthonormal univariate polynomial family. For the :class:`~openturns.Arcsine` distribution. Available constructors: Chebychev() Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad i > 0 The recurrence coefficients for the Chebychev polynomials come analytically and read :math:`a_0=\sqrt{2}, b_0=0, c_0=0`, :math:`a_1=2, b_1=0,c_1=-\sqrt{2}` and for :math:`i>1`, :math:`a_i=2, b_i=0, c_i=-1`. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.ChebychevFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 1.41421 * X -1.41421 + 2.82843 * X^2" openturns-1.9/python/src/Chi.i000066400000000000000000000002761307543307100164150ustar00rootroot00000000000000// SWIG file Chi.i %{ #include "openturns/Chi.hxx" %} %include Chi_doc.i %include openturns/Chi.hxx namespace OT { %extend Chi { Chi(const Chi & other) { return new OT::Chi(other); } } } openturns-1.9/python/src/ChiFactory.i000066400000000000000000000003661307543307100177450ustar00rootroot00000000000000// SWIG file ChiFactory.i %{ #include "openturns/ChiFactory.hxx" %} %include ChiFactory_doc.i %include openturns/ChiFactory.hxx namespace OT { %extend ChiFactory { ChiFactory(const ChiFactory & other) { return new OT::ChiFactory(other); } } } openturns-1.9/python/src/ChiFactory_doc.i.in000066400000000000000000000002071307543307100211710ustar00rootroot00000000000000%feature("docstring") OT::ChiFactory "Chi factory. Available constructor: ChiFactory() See also -------- DistributionFactory" openturns-1.9/python/src/ChiSquare.i000066400000000000000000000003561307543307100175750ustar00rootroot00000000000000// SWIG file ChiSquare.i %{ #include "openturns/ChiSquare.hxx" %} %include ChiSquare_doc.i %include openturns/ChiSquare.hxx namespace OT { %extend ChiSquare { ChiSquare(const ChiSquare & other) { return new OT::ChiSquare(other); } } } openturns-1.9/python/src/ChiSquareFactory.i000066400000000000000000000004461307543307100211250ustar00rootroot00000000000000// SWIG file ChiSquareFactory.i %{ #include "openturns/ChiSquareFactory.hxx" %} %include ChiSquareFactory_doc.i %include openturns/ChiSquareFactory.hxx namespace OT { %extend ChiSquareFactory { ChiSquareFactory(const ChiSquareFactory & other) { return new OT::ChiSquareFactory(other); } } } openturns-1.9/python/src/ChiSquareFactory_doc.i.in000066400000000000000000000005041307543307100223520ustar00rootroot00000000000000%feature("docstring") OT::ChiSquareFactory "Chi-Square factory. Available constructor: ChiSquareFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle \Hat{\nu} = \bar{x} \end{eqnarray*} See also -------- DistributionFactory, ChiSquare" openturns-1.9/python/src/ChiSquare_doc.i.in000066400000000000000000000022401307543307100210210ustar00rootroot00000000000000%feature("docstring") OT::ChiSquare ":math:`\chi^2` distribution. Available constructors: ChiSquare(*nu=1.0*) Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{2^{- \nu / 2} x^{\nu / 2 - 1} \exp(- x / 2)} {\Gamma(\nu / 2)}, \quad x \in \Rset^{+*} with :math:`\nu > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \nu \\ \Var{X} & = & 2 \nu \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.ChiSquare(2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ChiSquare::getNu "Accessor to the degrees of freedom parameter. Returns ------- nu : float Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::ChiSquare::setNu "Accessor to the degrees of freedom parameter. Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom." openturns-1.9/python/src/Chi_doc.i.in000066400000000000000000000023431307543307100176440ustar00rootroot00000000000000%feature("docstring") OT::Chi ":math:`\chi` distribution. Available constructors: Chi(*nu=1.0*) Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{2^{1 - \nu / 2} x^{\nu - 1} \exp(- x^2 / 2)} {\Gamma(\nu / 2)}, \quad x \in \Rset^{+*} with :math:`\nu > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \sqrt{2}\,\frac{\Gamma((\nu + 1) / 2)} {\Gamma(\nu / 2)} \\ \Var{X} & = & \nu - \mu^2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Chi(2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Chi::getNu "Accessor to the degrees of freedom parameter. Returns ------- nu : float Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::Chi::setNu "Accessor to the degrees of freedom parameter. Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom." openturns-1.9/python/src/CholeskyMethod.i000066400000000000000000000004261307543307100206310ustar00rootroot00000000000000// SWIG file CholeskyMethod.i %{ #include "openturns/CholeskyMethod.hxx" %} %include CholeskyMethod_doc.i %include openturns/CholeskyMethod.hxx namespace OT { %extend CholeskyMethod { CholeskyMethod(const CholeskyMethod & other) { return new OT::CholeskyMethod(other); } } } openturns-1.9/python/src/CholeskyMethod_doc.i.in000066400000000000000000000006511307543307100220630ustar00rootroot00000000000000%feature("docstring") OT::CholeskyMethod "Least squares solver using Cholesky decomposition. Available constructors: CholeskyMethod(*proxy, weight, indices*) CholeskyMethod(*proxy, indices*) Parameters ---------- proxy : :class:`~openturns.DesignProxy` Input sample weight : sequence of float Output weights indices : sequence of int Indices allowed in the basis See also -------- LeastSquaresMethod" openturns-1.9/python/src/Classifier.i000066400000000000000000000004411307543307100177700ustar00rootroot00000000000000// SWIG file Classifier.i %{ #include "openturns/Classifier.hxx" %} %include Classifier_doc.i OTTypedInterfaceObjectHelper(Classifier) %include openturns/Classifier.hxx namespace OT { %extend Classifier { Classifier(const Classifier & other) { return new OT::Classifier(other); } } } openturns-1.9/python/src/ClassifierImplementation.i000066400000000000000000000005461307543307100227040ustar00rootroot00000000000000// SWIG file ClassifierImplementation.i %{ #include "openturns/ClassifierImplementation.hxx" %} %include ClassifierImplementation_doc.i %include openturns/ClassifierImplementation.hxx namespace OT { %extend ClassifierImplementation { ClassifierImplementation(const ClassifierImplementation & other) { return new OT::ClassifierImplementation(other); } } } openturns-1.9/python/src/ClassifierImplementation_doc.i.in000066400000000000000000000075651307543307100241460ustar00rootroot00000000000000%define OT_Classifier_doc "Classifier. Available constructors: Classifier(*classifierImp*) Parameters ---------- classifierImp : classifier implementation A classifier implementation. It can be a :class:`~openturns.MixtureClassifier`. See also -------- MixtureClassifier, ExpertMixture Notes ----- The classifier enables to define rules that assign a vector to a particular class." %enddef %feature("docstring") OT::ClassifierImplementation OT_Classifier_doc // --------------------------------------------------------------------- %define OT_Classifier_classify_doc "Classify points according to the classifier. **Available usages**: classify(*inputPoint*) classify(*inputSample*) Parameters ---------- inputPoint : sequence of float A point to classify. inputSample : 2-d a sequence of float A set of point to classify. Notes ----- The rules to assign a point to a class are specific to each *classifierImp*. In the first usage, it returns an integer which corresponds to the class where *inputPoint* has been assigned. In the second usage, it returns an :class:`~openturns.Indices` that collects the class of each point of *inputSample*." %enddef %feature("docstring") OT::ClassifierImplementation::classify OT_Classifier_classify_doc // --------------------------------------------------------------------- %define OT_Classifier_grade_doc "Grade points according to the classifier. **Available usages**: grade(*inputPoint, k*) grade(*inputSample, classList*) Parameters ---------- inputPoint : sequence of float A point to grade. inputSample : 2-d a sequence of float A set of point to grade. k : integer The class number. classList : sequence of integer The list of class number. Notes ----- The rules to grade a point with respect to a class are specific to each *classifierImp*. In the first usage, it returns a real that grades *inputPoint* with respect to the class *k*. The greatest, the best. In the second usage, it returns an :class:`~openturns.Indices` that collects the grades of the :math:`i^{th}` point of *inputSample* with respect to the :math:`i^{th}` class of *classList*." %enddef %feature("docstring") OT::ClassifierImplementation::grade OT_Classifier_grade_doc // --------------------------------------------------------------------- %define OT_Classifier_getDimension_doc "Accessor to the dimension. Returns ------- dim : integer The dimension of the classifier." %enddef %feature("docstring") OT::ClassifierImplementation::getDimension OT_Classifier_getDimension_doc // --------------------------------------------------------------------- %define OT_Classifier_getVerbose_doc "Accessor to the verbosity. Returns ------- verb : bool Logical value telling if the verbose mode has been activated." %enddef %feature("docstring") OT::ClassifierImplementation::getVerbose OT_Classifier_getVerbose_doc // --------------------------------------------------------------------- %define OT_Classifier_setVerbose_doc "Accessor to the verbosity. Parameters ---------- verb : bool Logical value telling if the verbose mode has been activated." %enddef %feature("docstring") OT::ClassifierImplementation::setVerbose OT_Classifier_setVerbose_doc // --------------------------------------------------------------------- %define OT_Classifier_setParallel_doc "Accessor to the parallel flag. Parameters ---------- flag : bool Logical value telling if the classification and grading are done in parallel. " %enddef %feature("docstring") OT::ClassifierImplementation::setParallel OT_Classifier_setParallel_doc // --------------------------------------------------------------------- %define OT_Classifier_isParallel_doc "Accessor to the parallel flag. Returns ------- flag : bool Logical value telling if the parallel mode has been activated. " %enddef %feature("docstring") OT::ClassifierImplementation::isParallel OT_Classifier_isParallel_doc openturns-1.9/python/src/Classifier_doc.i.in000066400000000000000000000012341307543307100212230ustar00rootroot00000000000000// Classifier docstrings are defined in ClassifierImplementation_doc.i.in %feature("docstring") OT::Classifier OT_Classifier_doc %feature("docstring") OT::Classifier::classify OT_Classifier_classify_doc %feature("docstring") OT::Classifier::grade OT_Classifier_grade_doc %feature("docstring") OT::Classifier::getDimension OT_Classifier_getDimension_doc %feature("docstring") OT::Classifier::getVerbose OT_Classifier_getVerbose_doc %feature("docstring") OT::Classifier::setVerbose OT_Classifier_setVerbose_doc %feature("docstring") OT::Classifier::isParallel OT_Classifier_isParallel_doc %feature("docstring") OT::Classifier::setParallel OT_Classifier_setParallel_doc openturns-1.9/python/src/ClaytonCopula.i000066400000000000000000000004161307543307100204630ustar00rootroot00000000000000// SWIG file ClaytonCopula.i %{ #include "openturns/ClaytonCopula.hxx" %} %include ClaytonCopula_doc.i %include openturns/ClaytonCopula.hxx namespace OT { %extend ClaytonCopula { ClaytonCopula(const ClaytonCopula & other) { return new OT::ClaytonCopula(other); } } } openturns-1.9/python/src/ClaytonCopulaFactory.i000066400000000000000000000005061307543307100220130ustar00rootroot00000000000000// SWIG file ClaytonCopulaFactory.i %{ #include "openturns/ClaytonCopulaFactory.hxx" %} %include ClaytonCopulaFactory_doc.i %include openturns/ClaytonCopulaFactory.hxx namespace OT { %extend ClaytonCopulaFactory { ClaytonCopulaFactory(const ClaytonCopulaFactory & other) { return new OT::ClaytonCopulaFactory(other); } } } openturns-1.9/python/src/ClaytonCopulaFactory_doc.i.in000066400000000000000000000002461307543307100232460ustar00rootroot00000000000000%feature("docstring") OT::ClaytonCopulaFactory "Clayton Copula factory. Available constructor: ClaytonCopulaFactory() See also -------- DistributionFactory" openturns-1.9/python/src/ClaytonCopula_doc.i.in000066400000000000000000000030611307543307100217140ustar00rootroot00000000000000%feature("docstring") OT::ClaytonCopula "Clayton copula. Available constructor: ClaytonCopula(*theta=2.0*) Parameters ---------- theta : float Parameter :math:`\theta \geq -1`. Notes ----- The Clayton copula is a bivariate asymmmetric Archimedean copula, exhibiting greater dependence in the negative tail than in the positive. It is defined by: .. math:: C(u_1, u_2) = (u_1^{-\theta} + u_2^{-\theta} - 1)^{-1/\theta} for :math:`(u_1, u_2) \in [0, 1]^2` And its generator is: .. math:: \varphi(t) = \frac{1}{\theta} (t^{-\theta} - 1) The support of the copula is :math:`\{ (u,v)\in [0,1]^2, u^{-\theta} + v^{-\theta} \geq 1 \}`. If :math:`\theta <0`, the support is strictly included in :math:`[0,1]^2` and the frontier defined by :math:`\{ (u,v)\in [0,1]^2, u^{-\theta} + v^{-\theta} = 1 \}` has a mass not equal to zero. In that case, the copula is a non strict archimedean copula. See also -------- ArchimedeanCopula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.ClaytonCopula(2.5) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ClaytonCopula::getTheta "Get the parameter :math:`\theta`. Returns ------- theta : float Parameter :math:`\theta` of the copula." // --------------------------------------------------------------------- %feature("docstring") OT::ClaytonCopula::setTheta "Set the parameter :math:`\theta`. Parameters ---------- theta : float Parameter :math:`\theta` of the copula." openturns-1.9/python/src/CleaningStrategy.i000066400000000000000000000004451307543307100211530ustar00rootroot00000000000000// SWIG file CleaningStrategy.i %{ #include "openturns/CleaningStrategy.hxx" %} %include CleaningStrategy_doc.i %include openturns/CleaningStrategy.hxx namespace OT{ %extend CleaningStrategy { CleaningStrategy(const CleaningStrategy & other) { return new OT::CleaningStrategy(other); } } } openturns-1.9/python/src/CleaningStrategy_doc.i.in000066400000000000000000000127331307543307100224100ustar00rootroot00000000000000%feature("docstring") OT::CleaningStrategy "Cleaning truncation strategy. Available constructors: CleaningStrategy(*orthogonalBasis, maximumDimension*) CleaningStrategy(*orthogonalBasis, maximumDimension, verbose*) CleaningStrategy(*orthogonalBasis, maximumDimension, maximumSize, significanceFactor*) CleaningStrategy(*orthogonalBasis, maximumDimension, maximumSize, significanceFactor, verbose*) Parameters ---------- orthogonalBasis : :class:`~openturns.OrthogonalBasis` An OrthogonalBasis. maximumDimension : positive int Maximum index that can be used by the :class:`~openturns.EnumerateFunction` to determine the last term of the basis. maximumSize : positve int Parameter that characterizes the cleaning strategy. It represents the number of efficient coefficients of the basis. Its default value is set to 20. significanceFactor : float Parameter used as a threshold for selecting the efficient coefficients of the basis. The real threshold represents the multiplication of the significanceFactor with the maximum magnitude of the current determined coefficients. Its default value is equal to :math:`1e^{-4}`. verbose : bool Used for the online monitoring of the current basis updates (removed or added coefficients). See also -------- AdaptiveStrategy, FixedStrategy, SequentialStrategy Notes ----- The cleaning strategy aims at building a PC expansion containing at most :math:`P` significant coefficients, i.e. at most :math:`P` significant basis functions. It proceeds as follows: - Generate an initial PC basis made of the :math:`P` first polynomials (according to the adopted :class:`~openturns.EnumerateFunction`), or equivalently an initial set of indices :math:`K = \{0, \ldots, P-1\}`. - Discard from the basis all those polynomials :math:`\Psi_j` associated with insignificance coefficients, i.e. the coefficients that satisfy: .. math:: |a_j| \leq \epsilon \times \max_{ k \in K } |a_k| where :math:`\epsilon` is the significance factor, default is :math:`\epsilon = 10^{-4}`. - Add the next basis term :math:`\Psi_{k+1}` to the current basis :math:`K`. - Reiterate the procedure until either :math:`P` terms have been retained or if the given maximum index :math:`P_{max}` has been reached. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Define the model >>> inputDim = 1 >>> model = ot.SymbolicFunction(['x'], ['x*sin(x)']) >>> # Create the input distribution >>> distribution = ot.ComposedDistribution([ot.Uniform()]*inputDim) >>> # Construction of the multivariate orthonormal basis >>> polyColl = [0.0]*inputDim >>> for i in range(distribution.getDimension()): ... polyColl[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i)) >>> enumerateFunction = ot.LinearEnumerateFunction(inputDim) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> # Truncature strategy of the multivariate orthonormal basis >>> # We want to select, among the maximumDimension = 100 first polynomials of >>> # the multivariate basis, those which have the maximumSize = 20 most >>> # significant contribution (greatest coefficients), with respect to the >>> # significance factor = 10^-4. >>> maximumDimension = 100 >>> maximumSize = 20 >>> significanceFactor = 1e-4 >>> adaptiveStrategy = ot.CleaningStrategy(productBasis, maximumDimension, ... maximumSize, significanceFactor)" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::getCurrentVectorIndex "Accessor to the current vector index. Returns ------- index : integer Current index of the basis term." // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::getMaximumSize "Accessor to the maximum size of the orthogonal basis. Returns ------- size : integer Maximum number of significant terms of the basis. See also -------- setMaximumSize" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::getSignificanceFactor "Accessor to the significance factor. Returns ------- factor : float Value of the significance factor. See also -------- setSignificanceFactor" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::getVerbose "Accessor to the verbose. Returns ------- verbose : bool Return if the online monitoring of the current basis updates is enabled or not. See also -------- setVerbose" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::setMaximumSize "Accessor to the maximum size of the orthogonal basis. Parameters ---------- size : integer Maximum number of significant terms of the basis. See also -------- getMaximumSize" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::setSignificanceFactor "Accessor to the significance factor. Parameters ---------- factor : float Value of the significance factor. See also -------- getSignificanceFactor" // --------------------------------------------------------------------- %feature("docstring") OT::CleaningStrategy::setVerbose "Accessor to the verbose. Parameters ---------- verbose : bool Enable the online monitoring of the current basis updates or not. See also -------- getVerbose" openturns-1.9/python/src/Cloud.i000066400000000000000000000003161307543307100167530ustar00rootroot00000000000000// SWIG file Cloud.i %{ #include "openturns/Cloud.hxx" %} %include Cloud_doc.i %include openturns/Cloud.hxx namespace OT { %extend Cloud { Cloud(const Cloud & other) { return new OT::Cloud(other); } } } openturns-1.9/python/src/Cloud_doc.i.in000066400000000000000000000021501307543307100202030ustar00rootroot00000000000000%feature("docstring") OT::Cloud "Cloud. Available constructors: Cloud(*data, legend=' '*) Cloud(*dataX, dataY, legend=' '*) Cloud(*data, color, pointStyle, legend=' '*) Cloud(*dataComplex, legend=' '*) Parameters ---------- data : 2-d sequence of float Points from which the cloud is built. dataX, dataY : two 2-d sequences of float of dimension 1, or two sequences of float Points from which the cloud is built. legend : str Legend of the Cloud. color : str Color of the points. If not specified, by default it is 'blue'. pointStyle : str Style of the points. If not specified, by default it is 'plus'. dataComplex : :class:`~openturns.ComplexCollection` Collection of complex points. Examples -------- >>> import openturns as ot >>> R = ot.CorrelationMatrix(2) >>> R[1, 0] = -0.25 >>> distribution = ot.Normal([-1.5, 0.5], [4.0, 1.0], R) >>> sample = distribution.getSample(100) >>> # Create an empty graph >>> myGraph = ot.Graph('Normal sample', 'x1', 'x2', True, '') >>> # Create the cloud >>> myCloud = ot.Cloud(sample, 'blue', 'fsquare', 'My Cloud') >>> myGraph.add(myCloud)" openturns-1.9/python/src/Cobyla.i000066400000000000000000000003251307543307100171160ustar00rootroot00000000000000// SWIG file Cobyla.i %{ #include "openturns/Cobyla.hxx" %} %include Cobyla_doc.i %include openturns/Cobyla.hxx namespace OT{ %extend Cobyla { Cobyla(const Cobyla & other) { return new OT::Cobyla(other); } } } openturns-1.9/python/src/Cobyla_doc.i.in000066400000000000000000000025761307543307100203620ustar00rootroot00000000000000%feature("docstring") OT::Cobyla "Constrained Optimization BY Linear Approximations solver. Available constructors: Cobyla(*problem*) Cobyla(*problem, rhoBeg*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem to solve. rhoBeg : float A reasonable initial change to the variables. Notes ----- It constructs successive linear approximations of the objective function and constraints via a simplex of :math:`d+1` points, and optimizes these approximations in a trust region at each step. This solver does not implement the progress callback. See also -------- AbdoRackwitz, SQP, TNC, NLopt Examples -------- >>> import openturns as ot >>> model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> problem = ot.OptimizationProblem(model, 5.0) >>> algo = ot.Cobyla(problem) >>> algo.setStartingPoint([0.0] * 4) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::Cobyla::getRhoBeg "Accessor to rhoBeg parameter. Returns ------- rhoBeg : float A reasonable initial change to the variables." // --------------------------------------------------------------------- %feature("docstring") OT::Cobyla::setRhoBeg "Accessor to rhoBeg parameter. Parameters ---------- rhoBeg : float A reasonable initial change to the variables." openturns-1.9/python/src/Collection.i000066400000000000000000000064661307543307100200140ustar00rootroot00000000000000// SWIG file Collection.i %{ #include "openturns/Collection.hxx" %} %include Collection_doc.i %rename(__contains__) OT::Collection::contains; %include openturns/Collection.hxx %copyctor Collection; namespace OT { %extend Collection { Collection(PyObject * pyObj) { return OT::buildCollectionFromPySequence< T >( pyObj ); } template Collection(const Collection & other) { return new OT::Collection(other); } %define OT_COLLECTION_GETITEM(collectionType, elementType) PyObject * __getitem__(PyObject * arg) const { if ( PySlice_Check(arg) ) { Py_ssize_t start = 0; Py_ssize_t stop = 0; Py_ssize_t step = 0; Py_ssize_t slicelength = 0; if( PySlice_GetIndicesEx( OT::SliceCast( arg ), self->getSize(), &start, &stop, &step, &slicelength ) < 0 ) throw OT::InternalException(HERE); collectionType result( slicelength ); for ( Py_ssize_t i = 0; i < slicelength; ++ i ) { result.at(i) = self->at( start + i*step ); } return SWIG_NewPointerObj((new collectionType(static_cast< const collectionType& >(result))), SWIG_TypeQuery( #collectionType " *"), SWIG_POINTER_OWN | 0 ); } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(arg, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #collectionType "___getitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getSize(); } OT::UnsignedInteger arg2 = static_cast< OT::UnsignedInteger >(val2); return OT::convert< elementType, OT::traitsPythonType::Type>(self->at(arg2)); } fail: return NULL; } %enddef %define OT_COLLECTION_SETITEM(collectionType, elementType) PyObject * __setitem__(PyObject * arg, PyObject * valObj) { if (PySlice_Check(arg)) { Py_ssize_t start1; Py_ssize_t stop1; Py_ssize_t step1; Py_ssize_t slicelength1; PySlice_GetIndicesEx( OT::SliceCast( arg ), self->getSize(), &start1, &stop1, &step1, &slicelength1 ); collectionType temp2 ; collectionType *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery( #collectionType " *"), 0))) { temp2 = OT::convert< OT::_PySequence_, collectionType >( valObj ); val2 = &temp2; } assert(val2); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { self->at( start1 + i*step1 ) = val2->at(i); } } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(arg, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #collectionType "___setitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getSize(); } OT::UnsignedInteger arg2 = static_cast< OT::UnsignedInteger >(val2); elementType val = OT::convert< OT::traitsPythonType::Type, elementType >( valObj ); self->at(arg2) = val; } return SWIG_Py_Void(); fail: return NULL; } %enddef %define OTCollectionOperatorsHelper(collectionType, elementType) OT_COLLECTION_SETITEM(collectionType, elementType) OT_COLLECTION_GETITEM(collectionType, elementType) Bool __eq__(const collectionType & other) { return (*self) == other; } Bool __ne__(const collectionType & other) { return (*self) != other; } %enddef } // %extend } openturns-1.9/python/src/Collection_doc.i.in000066400000000000000000000072711307543307100212410ustar00rootroot00000000000000%feature("docstring") OT::Collection "Collection. Examples -------- >>> import openturns as ot - Collection of **real values**: >>> ot.ScalarCollection(2) [0,0] >>> ot.ScalarCollection(2, 3.25) [3.25,3.25] >>> vector = ot.ScalarCollection([2.0, 1.5, 2.6]) >>> vector [2,1.5,2.6] >>> vector[1] = 4.2 >>> vector [2,4.2,2.6] >>> vector.add(3.8) >>> vector [2,4.2,2.6,3.8] - Collection of **complex values**: >>> ot.ComplexCollection(2) [(0,0),(0,0)] >>> ot.ComplexCollection(2, 3+4j) [(3,4),(3,4)] >>> vector = ot.ComplexCollection([2+3j, 1-4j, 3.0]) >>> vector [(2,3),(1,-4),(3,0)] >>> vector[1] = 4+3j >>> vector [(2,3),(4,3),(3,0)] >>> vector.add(5+1j) >>> vector [(2,3),(4,3),(3,0),(5,1)] - Collection of **booleans**: >>> ot.BoolCollection(3) [0,0,0] >>> ot.BoolCollection(3, 1) [1,1,1] >>> vector = ot.BoolCollection([0, 1, 0]) >>> vector [0,1,0] >>> vector[1] = 0 >>> vector [0,0,0] >>> vector.add(1) >>> vector [0,0,0,1] - Collection of **distributions**: >>> print(ot.DistributionCollection(2)) [Uniform(a = -1, b = 1),Uniform(a = -1, b = 1)] >>> print(ot.DistributionCollection(2, ot.Gamma(2.75, 1.0))) [Gamma(k = 2.75, lambda = 1, gamma = 0),Gamma(k = 2.75, lambda = 1, gamma = 0)] >>> vector = ot.DistributionCollection([ot.Normal(), ot.Uniform()]) >>> print(vector) [Normal(mu = 0, sigma = 1),Uniform(a = -1, b = 1)] >>> vector[1] = ot.Uniform(-0.5, 1) >>> print(vector) [Normal(mu = 0, sigma = 1),Uniform(a = -0.5, b = 1)] >>> vector.add(ot.Gamma(2.75, 1.0)) >>> print(vector) [Normal(mu = 0, sigma = 1),Uniform(a = -0.5, b = 1),Gamma(k = 2.75, lambda = 1, gamma = 0)]" // --------------------------------------------------------------------- %feature("docstring") OT::Collection::add "Append a component (in-place). Parameters ---------- value : type depends on the type of the collection. The component to append. Examples -------- >>> import openturns as ot >>> x = ot.Point(2) >>> x.add(1.) >>> print(x) [0,0,1]" // --------------------------------------------------------------------- %feature("docstring") OT::Collection::at "Access to an element of the collection. Parameters ---------- index : positive int Position of the element to access. Returns ------- element : type depends on the type of the collection Element of the collection at the position *index*." // --------------------------------------------------------------------- %feature("docstring") OT::Collection::clear "Reset the collection to zero dimension. Examples -------- >>> import openturns as ot >>> x = ot.Point(2) >>> x.clear() >>> x class=Point name=Unnamed dimension=0 values=[]" // --------------------------------------------------------------------- %feature("docstring") OT::Collection::getSize "Get the collection's dimension (or size). Returns ------- n : int The number of components in the collection." // --------------------------------------------------------------------- %feature("docstring") OT::Collection::isEmpty "Tell if the collection is empty. Returns ------- isEmpty : bool *True* if there is no element in the collection. Examples -------- >>> import openturns as ot >>> x = ot.Point(2) >>> x.isEmpty() False >>> x.clear() >>> x.isEmpty() True" // --------------------------------------------------------------------- %feature("docstring") OT::Collection::resize "Change the size of the collection. Parameters ---------- newSize : positive int New size of the collection. Notes ----- If the new size is smaller than the older one, the last elements are thrown away, else the new elements are set to the default value of the element type. Examples -------- >>> import openturns as ot >>> x = ot.Point(2, 4) >>> print(x) [4,4] >>> x.resize(1) >>> print(x) [4] >>> x.resize(4) >>> print(x) [4,0,0,0]" openturns-1.9/python/src/Combinations.i000066400000000000000000000004061307543307100203320ustar00rootroot00000000000000// SWIG file Combinations.i %{ #include "openturns/Combinations.hxx" %} %include Combinations_doc.i %include openturns/Combinations.hxx namespace OT { %extend Combinations { Combinations(const Combinations & other) { return new OT::Combinations(other); } } } openturns-1.9/python/src/Combinations_doc.i.in000066400000000000000000000040441307543307100215660ustar00rootroot00000000000000%feature("docstring") OT::Combinations "Combinations generator. Available constructors: Combinations() Combinations(*k, n*) Parameters ---------- k : integer The cardinal of the subsets n : integer The cardinal of the base set See also -------- CombinatorialGenerator, KPermutations, Tuples Notes ----- In the first usage, the generator is built using the default values :math:`k = 1`, :math:`n = 1`. In the second usage, the generator produces all the subsets with *k* elements of a base set with *n* elements. The subsets are produced as a collection of :class:`~openturns.Indices` in lexical order, the elements of each subset being sorted in increasing order. The number of indices generated is: .. math:: \frac{n!}{k! (n - k)!} The combinations generator generates a collection of :class:`~openturns.Indices` where: - the :class:`~openturns.Indices` are sorted in lexical order, - the components are sorted within a given :class:`~openturns.Indices`. Examples -------- >>> import openturns as ot >>> tuples = ot.Combinations(2, 5) >>> print(tuples.generate()) [[0,1],[0,2],[0,3],[0,4],[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]#10 " // --------------------------------------------------------------------- %feature("docstring") OT::Combinations::getK "Accessor to the cardinal of the subsets. Returns ------- k : integer The cardinal of the subsets." // --------------------------------------------------------------------- %feature("docstring") OT::Combinations::getN "Accessor to the cardinal of the base set. Returns ------- n : integer The cardinal of the base set." // --------------------------------------------------------------------- %feature("docstring") OT::Combinations::setK "Accessor to the cardinal of the subsets. Parameters ---------- k : integer The cardinal of the subsets." // --------------------------------------------------------------------- %feature("docstring") OT::Combinations::setN "Accessor to the cardinal of the base set. Parameters ---------- n : integer The cardinal of the base set."openturns-1.9/python/src/CombinatorialGenerator.i000066400000000000000000000006141307543307100223400ustar00rootroot00000000000000// SWIG file CombinatorialGenerator.i %{ #include "openturns/CombinatorialGenerator.hxx" %} %include CombinatorialGenerator_doc.i OTTypedInterfaceObjectHelper(CombinatorialGenerator) %include openturns/CombinatorialGenerator.hxx namespace OT { %extend CombinatorialGenerator { CombinatorialGenerator(const CombinatorialGenerator & other) { return new OT::CombinatorialGenerator(other); } } } openturns-1.9/python/src/CombinatorialGeneratorImplementation.i000066400000000000000000000007061307543307100252500ustar00rootroot00000000000000// SWIG file CombinatorialGeneratorImplementation.i %{ #include "openturns/CombinatorialGeneratorImplementation.hxx" %} %include CombinatorialGeneratorImplementation_doc.i %include openturns/CombinatorialGeneratorImplementation.hxx namespace OT { %extend CombinatorialGeneratorImplementation { CombinatorialGeneratorImplementation(const CombinatorialGeneratorImplementation & other) { return new OT::CombinatorialGeneratorImplementation(other); } } } openturns-1.9/python/src/CombinatorialGeneratorImplementation_doc.i.in000066400000000000000000000021551307543307100265020ustar00rootroot00000000000000%define OT_CombinatorialGenerator_doc "Combinatorial generator base class. Available constructors: CombinatorialGenerator() CombinatorialGenerator(*combinatorialGeneratorImp*) Parameters ---------- combinatorialGeneratorImp : CombinatorialGeneratorImplementation An implementation of a combinatorial generator which is provided by :class:`~openturns.Combinations`, :class:`~openturns.KPermutations` or :class:`~openturns.Tuples`. See also -------- Combinations, KPermutations, Tuples" %enddef %feature("docstring") OT::CombinatorialGeneratorImplementation OT_CombinatorialGenerator_doc // --------------------------------------------------------------------- %define OT_CombinatorialGenerator_generate_doc "Generate the combinatorial sequence. Returns ------- indicesCol : collection of :class:`~openturns.Indices` The collection of all the possible values of the combinatorial generator as a set of non-negative integer values stored into an :class:`~openturns.Indices`." %enddef %feature("docstring") OT::CombinatorialGeneratorImplementation::generate OT_CombinatorialGenerator_generate_doc openturns-1.9/python/src/CombinatorialGenerator_doc.i.in000066400000000000000000000004241307543307100235710ustar00rootroot00000000000000// CombinatorialGenerator docstrings are defined in CombinatorialGeneratorImplementation_doc.i.in %feature("docstring") OT::CombinatorialGenerator OT_CombinatorialGenerator_doc %feature("docstring") OT::CombinatorialGenerator::generate OT_CombinatorialGenerator_generate_doc openturns-1.9/python/src/Compact.i000066400000000000000000000003351307543307100172740ustar00rootroot00000000000000// SWIG file Compact.i %{ #include "openturns/Compact.hxx" %} %include Compact_doc.i %include openturns/Compact.hxx namespace OT{ %extend Compact { Compact(const Compact & other) { return new OT::Compact(other); } } } openturns-1.9/python/src/Compact_doc.i.in000066400000000000000000000033261307543307100205310ustar00rootroot00000000000000%feature("docstring") OT::Compact "Compact history storage strategy. Available constructors: Compact(*N*) Parameters ---------- N : integer minimum number of points to store. See also -------- HistoryStrategy, Null, Full, Last Notes ----- The compact strategy stores a regularly spaced sub-sample where the minimum size of the stored numerical sample is :math:`N`. OpenTURNS proceeds as follows : 1. it stores the first :math:`2N` simulations : the size of the stored sample is :math:`2N`, 2. it selects only 1 out of 2 of the stored simulations : then the size of the stored sample decreases to :math:`N` (this is the *compact* step), 3. it stores the next :math:`N` simulations when selecting 1 out of 2 of the next simulations : the size of the stored sample is :math:`2N`, 4. it selects only 1 out of 2 of the stored simulations : then the size of the stored sample decreases to :math:`N`, 5. it stores the next :math:`N` simulations when selecting 1 out of 4 of the next simulations : the size of the stored sample is :math:`2N`, 6. then it keeps on until reaching the stopping criteria. The stored numerical sample will have a size within :math:`N` and :math:`2N` if at least one cycle has been done, else it will be at most :math:`N`." // --------------------------------------------------------------------- %feature("docstring") OT::Compact::getHalfMaximumSize "Accessor to the half maximum number of points to store. Returns ------- N : integer The half maximum number of points to store." // --------------------------------------------------------------------- %feature("docstring") OT::Compact::getIndex "Accessor to the index. Returns ------- index : integer The number of the stored points." openturns-1.9/python/src/ComparisonOperator.i000066400000000000000000000007261307543307100215400ustar00rootroot00000000000000// SWIG file ComparisonOperator.i %{ #include "openturns/ComparisonOperator.hxx" %} %include ComparisonOperator_doc.i OTTypedInterfaceObjectHelper(ComparisonOperator) %include openturns/ComparisonOperator.hxx namespace OT { %extend ComparisonOperator { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend ComparisonOperator { ComparisonOperator(const ComparisonOperator & other) { return new OT::ComparisonOperator(other); } } } openturns-1.9/python/src/ComparisonOperatorImplementation.i000066400000000000000000000005651307543307100244470ustar00rootroot00000000000000// SWIG file ComparisonOperatorImplementation.i %{ #include "openturns/ComparisonOperatorImplementation.hxx" %} %include openturns/ComparisonOperatorImplementation.hxx namespace OT { %extend ComparisonOperatorImplementation { ComparisonOperatorImplementation(const ComparisonOperatorImplementation & other) { return new OT::ComparisonOperatorImplementation(other); } } } openturns-1.9/python/src/ComparisonOperator_doc.i.in000066400000000000000000000010771307543307100227720ustar00rootroot00000000000000%feature("docstring") OT::ComparisonOperator "Base class for comparison operators. Notes ----- Comparison operators are defined through the following implementations : :class:`~openturns.Equal`, :class:`~openturns.Greater`, :class:`~openturns.GreaterOrEqual`, :class:`~openturns.Less` or :class:`~openturns.LessOrEqual` " // --------------------------------------------------------------------- %feature("docstring") OT::ComparisonOperator::compare "Compare two values. Parameters ---------- a : float First input to compare. b : float Second input to compare."openturns-1.9/python/src/ComplexMatrix.i000066400000000000000000000045401307543307100205040ustar00rootroot00000000000000// SWIG file ComplexMatrix.i %{ #include "openturns/ComplexMatrix.hxx" %} %include ComplexMatrix_doc.i %template(ComplexMatrixImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %apply const ScalarCollection & { const OT::ComplexMatrix::ScalarCollection & }; %apply const ComplexCollection & { const OT::ComplexMatrix::ComplexCollection & }; %include openturns/ComplexMatrix.hxx %pythoncode %{ # This code has been added to conform to Numpy ndarray interface # that tries to reuse the data stored in the ComplexMatrix (zero copy) # see http://docs.scipy.org/doc/numpy/reference/arrays.interface.html#arrays-interface # for details. # See python doc http://docs.python.org/reference/datamodel.html?highlight=getattribute#object.__getattribute__ # for details on how to write such a method. def ComplexMatrix___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.__dict__['__array_interface__'] = {'shape': (self.getNbRows(), self.getNbColumns()), 'typestr': "|c" + str(self.__elementsize__()), 'data': (int(self.__baseaddress__()), True), 'strides': (self.__stride__(0), self.__stride__(1)), 'version': 3, } return super(ComplexMatrix, self).__getattribute__(name) ComplexMatrix.__getattribute__ = ComplexMatrix___getattribute__ %} %define OTComplexMatrixGetAccessors() OTMatrixGetAccessor(ComplexMatrix, Complex, _PyComplex_) OTMatrixSetAccessor(ComplexMatrix, Complex, _PyComplex_) %enddef namespace OT { %extend ComplexMatrix { ComplexMatrix(const ComplexMatrix & other) { return new OT::ComplexMatrix(other); } ComplexMatrix(PyObject * pyObj) { return new OT::ComplexMatrix( OT::convert(pyObj) ); } OTComplexMatrixGetAccessors() ComplexMatrix __rmul__(Complex s) { return s * (*self); } #if SWIG_VERSION < 0x030011 ComplexMatrix __truediv__(Complex s) { return (*self) / s; } #endif ComplexMatrix __matmul__(const ComplexMatrix & other) { return *self * other; } ComplexMatrix __matmul__(const Matrix & other) { return *self * other; } } // ComplexMatrix } // OT openturns-1.9/python/src/ComplexMatrixImplementation.i000066400000000000000000000031171307543307100234110ustar00rootroot00000000000000// SWIG file ComplexMatrixImplementation.i %{ #include "openturns/ComplexMatrixImplementation.hxx" %} %include ComplexMatrixImplementation_doc.i %rename(ComplexMatrixImplementation_operator___eq__) OT::operator ==(const ComplexMatrixImplementation & lhs, const ComplexMatrixImplementation & rhs); %template(ComplexCollection) OT::Collection; %template(ComplexPersistenCollection) OT::PersistentCollection; %typemap(in) const ComplexCollection & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert >( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Complex"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const ComplexCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %include openturns/ComplexMatrixImplementation.hxx namespace OT{ %extend ComplexMatrixImplementation { ComplexMatrixImplementation(const ComplexMatrixImplementation & other) { return new OT::ComplexMatrixImplementation(other); } } } %pythoncode %{ class NumericalComplexCollection(ComplexCollection): def __init__(self, *args): super(NumericalComplexCollection, self).__init__(*args) openturns.common.Log.Warn('class NumericalComplexCollection is deprecated in favor of ComplexCollection') %} openturns-1.9/python/src/ComplexMatrixImplementation_doc.i.in000066400000000000000000000113461307543307100246460ustar00rootroot00000000000000%define OT_ComplexMatrix_doc "Complex Matrix. Available constructors: ComplexMatrix(*nr, nc*) ComplexMatrix(*nr, nc, values*) Parameters ---------- nr : integer The number of rows of the complex matrix. nc : integer The number of columns of the complex matrix. values : sequence of complex number The sequence must have :math:`n_r \times n_c` elements. It might be a :class:`~openturns.ComplexCollection` or a :class:`~openturns.ScalarCollection`. Default is (0, 0). See also -------- ComplexTensor Examples -------- >>> import openturns as ot >>> m = ot.ComplexMatrix(2, 2, [1+2j, 3+4j , 5+6j, 7+8j]) >>> print(m) [[ (1,2) (5,6) ] [ (3,4) (7,8) ]] >>> m = ot.ComplexMatrix(2, 3, range(2*3)) >>> print(m) [[ (0,0) (2,0) (4,0) ] [ (1,0) (3,0) (5,0) ]] Create a matrix from a numpy array: >>> import numpy as np >>> array = np.array([[1, 2], [3, 4], [5, 6]]) >>> m = ot.ComplexMatrix(array) >>> print(m) [[ (1,0) (2,0) ] [ (3,0) (4,0) ] [ (5,0) (6,0) ]] " %enddef %feature("docstring") OT::ComplexMatrixImplementation OT_ComplexMatrix_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_clean_doc "Clean the matrix according to a specific threshold. Parameters ---------- threshold : positive float Numerical sample which is the collection of points stored by the history strategy." %enddef %feature("docstring") OT::ComplexMatrixImplementation::clean OT_ComplexMatrix_clean_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_conjugate_doc "Accessor to the conjugate complex matrix. Returns ------- N : :class:`~openturns.ComplexMatrix` The conjugate matrix :math:`\mat{N}` of size :math:`n_r \times n_c` associated with the given complex matrix :math:`\mat{M}` such as :math:`N_{i, j} = \overline{M}_{i, j}`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::conjugate OT_ComplexMatrix_conjugate_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_conjugateTranspose_doc "Accessor to the transposed conjugate complex matrix. Returns ------- N : :class:`~openturns.ComplexMatrix` The transposed conjugate matrix :math:`\mat{N}` of size :math:`n_c \times n_r` associated with the given complex matrix :math:`\mat{M}` such as :math:`N_{i, j} = \overline{M}_{j, i}`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::conjugateTranspose OT_ComplexMatrix_conjugateTranspose_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_getNbColumns_doc "Accessor to the number of columns. Returns ------- nc : integer The number of columns of :math:`\mat{M}`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::getNbColumns OT_ComplexMatrix_getNbColumns_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_getNbRows_doc "Accessor to the number of rows. Returns ------- nr : integer The number of rows of :math:`\mat{M}`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::getNbRows OT_ComplexMatrix_getNbRows_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_imag_doc "Accessor to the imaginary part. Returns ------- imat : :class:`~openturns.Matrix` A real matix :math:`\mat{A}` of size :math:`n_r \times n_c` such :math:`A_{i, j} = \mathrm{Im} (M_{i, j})`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::imag OT_ComplexMatrix_imag_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_isEmpty_doc "Test whether the matrix is empty or not. Returns ------- isEmpty : bool Flag telling whether the dimensions of the matrix is zero." %enddef %feature("docstring") OT::ComplexMatrixImplementation::isEmpty OT_ComplexMatrix_isEmpty_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_real_doc "Accessor to the real part. Returns ------- rmat : :class:`~openturns.Matrix` A real matix :math:`\mat{A}` of size :math:`n_r \times n_c` such :math:`A_{i, j} = \mathrm{Re} (M_{i, j})`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::real OT_ComplexMatrix_real_doc // --------------------------------------------------------------------- %define OT_ComplexMatrix_transpose_doc "Accessor to the transposed complex matrix. Returns ------- N : :class:`~openturns.ComplexMatrix` The transposed matrix :math:`\mat{N}` of size :math:`n_c \times n_r` associated with the given complex matrix :math:`\mat{M}` such as :math:`N_{i, j} = M_{j, i}`." %enddef %feature("docstring") OT::ComplexMatrixImplementation::transpose OT_ComplexMatrix_transpose_docopenturns-1.9/python/src/ComplexMatrix_doc.i.in000066400000000000000000000015471307543307100217420ustar00rootroot00000000000000// ComplexMatrix docstrings are defined in ComplexMatrixImplementation_doc.i.in %feature("docstring") OT::ComplexMatrix OT_ComplexMatrix_doc %feature("docstring") OT::ComplexMatrix::clean OT_ComplexMatrix_clean_doc %feature("docstring") OT::ComplexMatrix::conjugate OT_ComplexMatrix_conjugate_doc %feature("docstring") OT::ComplexMatrix::conjugateTranspose OT_ComplexMatrix_conjugateTranspose_doc %feature("docstring") OT::ComplexMatrix::getNbColumns OT_ComplexMatrix_getNbColumns_doc %feature("docstring") OT::ComplexMatrix::getNbRows OT_ComplexMatrix_getNbRows_doc %feature("docstring") OT::ComplexMatrix::imag OT_ComplexMatrix_imag_doc %feature("docstring") OT::ComplexMatrix::isEmpty OT_ComplexMatrix_isEmpty_doc %feature("docstring") OT::ComplexMatrix::real OT_ComplexMatrix_real_doc %feature("docstring") OT::ComplexMatrix::transpose OT_ComplexMatrix_transpose_docopenturns-1.9/python/src/ComplexTensor.i000066400000000000000000000035301307543307100205100ustar00rootroot00000000000000// SWIG file ComplexTensor.i %{ #include "openturns/ComplexTensor.hxx" %} %include ComplexTensor_doc.i %template(ComplexTensorImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %apply const ComplexCollection & { const OT::ComplexTensor::ComplexCollection & }; %include openturns/ComplexTensor.hxx %pythoncode %{ # This code has been added to conform to Numpy ndarray interface # that tries to reuse the data stored in the ComplexTensor (zero copy) # see http://docs.scipy.org/doc/numpy/reference/arrays.interface.html#arrays-interface # for details. # See python doc http://docs.python.org/reference/datamodel.html?highlight=getattribute#object.__getattribute__ # for details on how to write such a method. def ComplexTensor___getattribute__(self, name): """Implement attribute accesses.""" if (name == '__array_interface__'): self.__dict__['__array_interface__'] = {'shape': (self.getNbRows(), self.getNbColumns(), self.getNbSheets()), 'typestr': "|c" + str(self.__elementsize__()), 'data': (int(self.__baseaddress__()), True), 'strides': (self.__stride__(0), self.__stride__(1), self.__stride__(2)), 'version': 3, } return object.__getattribute__(self, name) ComplexTensor.__getattribute__ = ComplexTensor___getattribute__ %} namespace OT { %extend ComplexTensor { ComplexTensor(const ComplexTensor & other) { return new OT::ComplexTensor(other); } ComplexTensor(PyObject * pyObj) { return new OT::ComplexTensor( OT::convert(pyObj) ); } OTTensorAccessors(ComplexTensor, Complex, _PyComplex_) } // ComplexTensor } // OT openturns-1.9/python/src/ComplexTensorImplementation.i000066400000000000000000000007521307543307100234210ustar00rootroot00000000000000// SWIG file ComplexTensorImplementation.i %{ #include "openturns/ComplexTensorImplementation.hxx" %} %rename(ComplexTensorImplementation_operator___eq__) OT::operator ==(const ComplexTensorImplementation & lhs, const ComplexTensorImplementation & rhs); %include openturns/ComplexTensorImplementation.hxx namespace OT{ %extend ComplexTensorImplementation { ComplexTensorImplementation(const ComplexTensorImplementation & other) { return new OT::ComplexTensorImplementation(other); } } } openturns-1.9/python/src/ComplexTensor_doc.i.in000066400000000000000000000075601307543307100217510ustar00rootroot00000000000000%feature("docstring") OT::ComplexTensor "Complex tensor. Available constructors: ComplexTensor(*n_rows, n_columns, n_sheets*) ComplexTensor(*n_rows, n_columns, n_sheets, values*) ComplexTensor(*sequence*) Parameters ---------- n_rows : int, :math:`n_r > 0` Number of rows. n_columns : int, :math:`n_c > 0` Number of columns. n_sheets : int, :math:`n_s > 0` Number of sheets. values : sequence of complex with size :math:`n_r \times n_c \times n_s`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. If not mentioned, a zero tensor is created. sequence : sequence of complex Values. Examples -------- Create a tensor of complex values: >>> import openturns as ot >>> T = ot.ComplexTensor(2, 2, 2, range(2 * 2 * 2)) >>> print(T) sheet #0 [[ (0,0) (2,0) ] [ (1,0) (3,0) ]] sheet #1 [[ (4,0) (6,0) ] [ (5,0) (7,0) ]] Get or set terms: >>> print(T[0, 0, 0]) 0j >>> T[0, 0, 0] = 1.0 >>> print(T[0, 0, 0]) (1+0j) Create an openturns tensor from a numpy 3d-array: >>> import numpy as np >>> np_3d_array = np.array([[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]]) >>> ot_tensor = ot.ComplexTensor(np_3d_array) and back >>> np_tensor = np.array(ot_tensor)" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::clean "Set elements smaller than a threshold to zero. Parameters ---------- threshold : float Threshold for zeroing elements. Returns ------- cleaned_tensor : :class:`~openturns.ComplexTensor` Input tensor with elements smaller than the threshold set to zero." // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::getNbColumns "Accessor to the number of columns. Returns ------- n_columns : int" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::getNbRows "Accessor to the number of rows. Returns ------- n_rows : int" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::getNbSheets "Accessor to the number of sheets. Returns ------- n_sheets : int" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::getSheet "Get a sheet of the tensor. Parameters ---------- sheet : int Index of sheet element. Returns ------- M : :class:`~openturns.ComplexMatrix` The sheet element. Examples -------- >>> import openturns as ot >>> T = ot.ComplexTensor(2,2,3, range(2*2*3)) >>> print(T) sheet #0 [[ (0,0) (2,0) ] [ (1,0) (3,0) ]] sheet #1 [[ (4,0) (6,0) ] [ (5,0) (7,0) ]] sheet #2 [[ (8,0) (10,0) ] [ (9,0) (11,0) ]] >>> print(T.getSheet(0)) [[ (0,0) (2,0) ] [ (1,0) (3,0) ]]" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::setSheet "Set a matrix as a sheet of the complex tensor. Parameters ---------- sheet : int Index of sheet element. M : :class:`~openturns.ComplexMatrix` The matrix. Examples -------- >>> import openturns as ot >>> T = ot.ComplexTensor(2,2,3, range(2*2*3)) >>> print(T) sheet #0 [[ (0,0) (2,0) ] [ (1,0) (3,0) ]] sheet #1 [[ (4,0) (6,0) ] [ (5,0) (7,0) ]] sheet #2 [[ (8,0) (10,0) ] [ (9,0) (11,0) ]] >>> M = ot.ComplexMatrix([[1,2],[3,4]]) >>> T.setSheet(0, M) >>> print(T) sheet #0 [[ (1,0) (2,0) ] [ (3,0) (4,0) ]] sheet #1 [[ (4,0) (6,0) ] [ (5,0) (7,0) ]] sheet #2 [[ (8,0) (10,0) ] [ (9,0) (11,0) ]]" // --------------------------------------------------------------------- %feature("docstring") OT::ComplexTensor::isEmpty "Tell if the tensor is empty. Returns ------- is_empty : bool True if the tensor contains no element. Examples -------- >>> import openturns as ot >>> T = ot.ComplexTensor() >>> T.isEmpty() True" openturns-1.9/python/src/ComposedCopula.i000066400000000000000000000013741307543307100206270ustar00rootroot00000000000000// SWIG file ComposedCopula.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/ComposedCopula.hxx" %} %include ComposedCopula_doc.i %template(CopulaCollection) OT::Collection; %include openturns/ComposedCopula.hxx %extend OT::Collection { OT::Collection (PyObject * pyObj) { return OT::buildCollectionFromPySequence( pyObj ); } } namespace OT { %extend ComposedCopula { ComposedCopula(PyObject * pyObj) { OT::Pointer > p_coll = OT::buildCollectionFromPySequence( pyObj ); return new OT::ComposedCopula( *p_coll ); } ComposedCopula(const ComposedCopula & other) { return new OT::ComposedCopula(other); } } // ComposedCopula } // OT openturns-1.9/python/src/ComposedCopula_doc.i.in000066400000000000000000000027271307543307100220640ustar00rootroot00000000000000%feature("docstring") OT::ComposedCopula "Merge of a collection of independent copulas. Parameters ---------- copulas : list of copulas. The collection of copulas to be merged. Notes ----- Let's :math:`(C_1\, \dots, C_K)` a collection of :math:`K` copulas respectively defined on :math:`[0,1]^{n_i}` whith :math:`n_1 + \dots + n_K = d`. The merged copula :math:`C` is defined on :math:`[0,1]^d` by: .. math:: C(u_1, \dots, u_d) = C_1(u_1, \dots, u_{n_1}) C_2(u_{n_1+1}, \dots, u_{n_2}) \dots C_K(u_{n_1+\dots + n_{K-1}+1}, \dots, u_d) It means that the subvectors :math:`(u_{n_{i-1}+1}, \dots, u_{n_i})_i` are independent. Examples -------- Create a distribution: >>> import openturns as ot >>> R = ot.CorrelationMatrix(3) >>> R[0, 1] = 0.5 >>> R[0, 2] = 0.25 >>> collection = [ot.FrankCopula(3.0), ot.NormalCopula(R), ot.ClaytonCopula(2.0)] >>> copula = ot.ComposedCopula(collection) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ComposedCopula::getCopulaCollection "Accessor to the list of the copulas. Returns ------- copulas : list of copulas The collection of the copulas to be merged." // --------------------------------------------------------------------- %feature("docstring") OT::ComposedCopula::setCopulaCollection "Accessor to the list of the copulas. Parameters ---------- copulas : list of copulas The collection of copulas to be merged." openturns-1.9/python/src/ComposedDistribution.i000066400000000000000000000005061307543307100220570ustar00rootroot00000000000000// SWIG file ComposedDistribution.i %{ #include "openturns/ComposedDistribution.hxx" %} %include ComposedDistribution_doc.i %include openturns/ComposedDistribution.hxx namespace OT { %extend ComposedDistribution { ComposedDistribution(const ComposedDistribution & other) { return new OT::ComposedDistribution(other); } } } openturns-1.9/python/src/ComposedDistribution_doc.i.in000066400000000000000000000043161307543307100233140ustar00rootroot00000000000000%feature("docstring") OT::ComposedDistribution "Composed distribution. Available constructors: ComposedDistribution(*distributions, copula=ot.IndependentCopula(n)*) Parameters ---------- distributions : list of :class:`~openturns.Distribution` List of :math:`n` marginals of the distribution. Each marginal must be of dimension 1. copula : :class:`~openturns.Distribution` A copula. If not mentioned, the copula is set to an :class:`~openturns.IndependentCopula` with the same dimension as *distributions*. Notes ----- A ComposedDistribution is a :math:`n`-dimensional distribution which can be written in terms of 1-d marginal distribution functions and a copula :math:`C` which describes the dependence structure between the variables. Its cumulative distribution function :math:`F` is defined by its marginal distributions :math:`F_i` and the copula :math:`C` through the relation: .. math:: F(x_1, \cdots, x_n) = C(F_1(x_1), \cdots, F_n(x_n)) See also -------- Copula, SklarCopula Examples -------- >>> import openturns as ot >>> correlation = ot.CorrelationMatrix(2) >>> correlation[1, 0] = 0.25 >>> aCopula = ot.NormalCopula(correlation) >>> marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] >>> distribution = ot.ComposedDistribution(marginals, aCopula) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ComposedDistribution::getDistributionCollection "Get the marginals of the distribution. Returns ------- distributions : list of :class:`~openturns.Distribution` List of the marginals of the distribution." // --------------------------------------------------------------------- %feature("docstring") OT::ComposedDistribution::setDistributionCollection "Set the marginals of the distribution. Parameters ---------- distributions : list of :class:`~openturns.Distribution` List of the marginals of the distribution." // --------------------------------------------------------------------- %feature("docstring") OT::ComposedDistribution::setCopula "Set the copula of the distribution. Parameters ---------- copula : :class:`~openturns.Distribution` Copula of the distribution." openturns-1.9/python/src/ComposedEvaluation.i000066400000000000000000000004621307543307100215100ustar00rootroot00000000000000// SWIG file ComposedEvaluation.i OTAutodoc(ComposedEvaluation) %{ #include "openturns/ComposedEvaluation.hxx" %} %include openturns/ComposedEvaluation.hxx namespace OT { %extend ComposedEvaluation { ComposedEvaluation(const ComposedEvaluation & other) { return new OT::ComposedEvaluation(other); } } } openturns-1.9/python/src/ComposedFunction.i000066400000000000000000000004461307543307100211700ustar00rootroot00000000000000// SWIG file ComposedFunction.i %{ #include "openturns/ComposedFunction.hxx" %} %include ComposedFunction_doc.i %include openturns/ComposedFunction.hxx namespace OT { %extend ComposedFunction { ComposedFunction(const ComposedFunction & other) { return new OT::ComposedFunction(other); } } } openturns-1.9/python/src/ComposedFunction_doc.i.in000066400000000000000000000010411307543307100224120ustar00rootroot00000000000000%feature("docstring") OT::ComposedFunction "Composed function. Available constructor: ComposedFunction(*f, g*) The function is the composed function :math:`f\circ g`. Parameters ---------- f,g : two :class:`~openturns.Function` The functions to compose. Examples -------- >>> import openturns as ot >>> g = ot.SymbolicFunction(['x1', 'x2'], ... ['x1 + x2','3 * x1 * x2']) >>> f = ot.SymbolicFunction(['x1', 'x2'], ['2 * x1 - x2']) >>> composed = ot.ComposedFunction(f, g) >>> print(composed([3, 4])) [-22]" openturns-1.9/python/src/ComposedGradient.i000066400000000000000000000004421307543307100211340ustar00rootroot00000000000000// SWIG file ComposedGradient.i OTAutodoc(ComposedGradient) %{ #include "openturns/ComposedGradient.hxx" %} %include openturns/ComposedGradient.hxx namespace OT { %extend ComposedGradient { ComposedGradient(const ComposedGradient & other) { return new OT::ComposedGradient(other); } } } openturns-1.9/python/src/ComposedHessian.i000066400000000000000000000004321307543307100207700ustar00rootroot00000000000000// SWIG file ComposedHessian.i OTAutodoc(ComposedHessian) %{ #include "openturns/ComposedHessian.hxx" %} %include openturns/ComposedHessian.hxx namespace OT { %extend ComposedHessian { ComposedHessian(const ComposedHessian & other) { return new OT::ComposedHessian(other); } } } openturns-1.9/python/src/Composite.i000066400000000000000000000003561307543307100176530ustar00rootroot00000000000000// SWIG file Composite.i %{ #include "openturns/Composite.hxx" %} %include Composite_doc.i %include openturns/Composite.hxx namespace OT { %extend Composite { Composite(const Composite & other) { return new OT::Composite(other); } } } openturns-1.9/python/src/CompositeDistribution.i000066400000000000000000000005161307543307100222510ustar00rootroot00000000000000// SWIG file CompositeDistribution.i %{ #include "openturns/CompositeDistribution.hxx" %} %include CompositeDistribution_doc.i %include openturns/CompositeDistribution.hxx namespace OT { %extend CompositeDistribution { CompositeDistribution(const CompositeDistribution & other) { return new OT::CompositeDistribution(other); } } } openturns-1.9/python/src/CompositeDistribution_doc.i.in000066400000000000000000000067541307543307100235150ustar00rootroot00000000000000%feature("docstring") OT::CompositeDistribution "Composite distribution. Helper class for defining the push-forward distribution of a given univariate distribution by a given scalar function. Available constructors: CompositeDistribution(*g=Function('x', 'x'), distX=Uniform(0.0,1.0)*) CompositeDistribution(*g, distX, a, v*) Parameters ---------- g : :class:`~openturns.Function`, :math:`\Rset \rightarrow \Rset` distX : :class:`~openturns.Distribution`, univariate a : sequence of float of dimension :math:`N+1`, :math:`a[0]=\inf \supp{distX}`, :math:`a[N]=\sup \supp{distX}` The bounds of the intervals on which :math:`g` is monotone, sorted in ascending order. v : sequence of float of dimension :math:`N+1`, The values taken by :math:`g` on each bound: :math:`v[k]=g(a[k])`. Returns ------- distY : :class:`~openturns.Distribution`, univariate :math:`distY` is the push-forward distribution of :math:`distX` by :math:`g`. Notes ----- We note :math:`X` a scalar random variable which distribution is :math:`distX`, which probability density function is :math:`f_X`. Then :math:`distY` is the distribution of the scalar random variable :math:`Y=g(X)`, which probability density function :math:`f_Y` is defined as: .. math:: \displaystyle f_Y(y) = \sum_{k =0}^{k=N} \frac{f_X (g^{-1}(y))}{|g'\circ g^{-1}(y)|}1_{y \in g^{-1}([a_k, a_{k+1}))} with :math:`a_0=\inf \supp{f_X}`, :math:`a_N=\sup \supp{f_X}` and :math:`(a_1, \dots, a_N)` such that :math:`g` is monotone over :math:`[a_k, a_{k+1})` for :math:`0 \leq k \leq N`. Its first moments are obtained by numerical integration. Examples -------- Create a distribution: >>> import openturns as ot >>> g = ot.SymbolicFunction(['x'], ['sin(x) + cos(x)']) >>> distY = ot.CompositeDistribution(g, ot.Normal(1.0, 0.5)) >>> g = ot.SymbolicFunction(['x'], ['abs(x)']) >>> a = [-1.0, 0.0, 2.0] >>> v = [1.0, 0.0, 2.0] >>> distZ = ot.CompositeDistribution(g, ot.Uniform(-1.0, 2.0), a, v) >>> distX = ot.Normal(0.0, 1.0) >>> a0 = distX.getRange().getLowerBound() >>> aN = distX.getRange().getUpperBound() >>> a = [a0[0], 0.0, 0.0, aN[0]] >>> g = ot.SymbolicFunction(['x'], ['1.0/x']) >>> v = [g(a0)[0], -ot.SpecFunc.MaxScalar, ot.SpecFunc.MaxScalar, g(aN)[0]] >>> distT = ot.CompositeDistribution(g, distX, a, v) Draw a sample: >>> sample = distT.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::CompositeDistribution::getFunction "Accessor to the function. Returns ------- g : :class:`~openturns.Function`, :math:`\Rset \rightarrow \Rset` the function :math:`g`." // --------------------------------------------------------------------- %feature("docstring") OT::CompositeDistribution::getAntecedent "Accessor to the antecedent distribution. Returns ------- distX : :class:`~openturns.Distribution`, univariate Antecedent distribution :math:`distX`." // --------------------------------------------------------------------- %feature("docstring") OT::CompositeDistribution::setFunction "Fix the function through wich the distribution is push-forwarded. Parameters ---------- g : :class:`~openturns.Function`, :math:`\Rset \rightarrow \Rset` the function :math:`g`." // --------------------------------------------------------------------- %feature("docstring") OT::CompositeDistribution::setAntecedent "Fix the antecedent distribution which is push-forwarded. Parameters ---------- distX : :class:`~openturns.Distribution`, univariate Distribution of the antecedent :math:`distX`." openturns-1.9/python/src/CompositeProcess.i000066400000000000000000000004461307543307100212120ustar00rootroot00000000000000// SWIG file CompositeProcess.i %{ #include "openturns/CompositeProcess.hxx" %} %include CompositeProcess_doc.i %include openturns/CompositeProcess.hxx namespace OT { %extend CompositeProcess { CompositeProcess(const CompositeProcess & other) { return new OT::CompositeProcess(other); } } } openturns-1.9/python/src/CompositeProcess_doc.i.in000066400000000000000000000051721307543307100224450ustar00rootroot00000000000000%feature("docstring") OT::CompositeProcess "Process obtained by transformation. Parameters ---------- fdyn : :class:`~openturns.FieldFunction` A field function. inputProc : :class:`~openturns.Process` The input process. Notes ----- A composite process is the image of process :math:`X: \Omega \times\cD \mapsto \Rset^d` by the field function :math:`f_{dyn}:\cD \times \Rset^d \rightarrow \cD' \times \Rset^q`: .. math:: Y = fdyn(X) where :math:`\cD \in \Rset^n` and :math:`\cD' \in \Rset^p`, defined by: .. math:: f_{dyn}(\vect{t}, \vect{x}) = (t'(\vect{t}), v'(\vect{t}, \vect{x})) with :math:`t': \cD \rightarrow \cD'` and :math:`v': \cD \times \Rset^d \rightarrow \Rset^q`. The process :math:`Y: \Omega \times \cD' \rightarrow \Rset^q` is defined on the domain :math:`\cD'` associated to the mesh :math:`\cM'`. Examples -------- Create the process X: >>> import openturns as ot >>> amplitude = [1.0, 1.0] >>> scale = [0.2, 0.3] >>> myCovModel = ot.ExponentialModel(scale, amplitude) >>> myMesh = ot.IntervalMesher([100]*2).build(ot.Interval([0.0]*2, [1.0]*2)) >>> myXProcess = ot.GaussianProcess(myCovModel, myMesh) Create a spatial field function :math:`g_{dyn}` associated to :math:`g: \Rset^2 \mapsto \Rset^2` where :math:`g(x_1,x_2)= (x_1^2, x_1+x_2)`: >>> g = ot.SymbolicFunction(['x1', 'x2'], ['x1^2', 'x1+x2']) >>> nSpat = 2 >>> gdyn = ot.ValueFunction(g, nSpat) Create the Y process :math:`Y = g_{dyn}(X)`: >>> myYProcess = ot.CompositeProcess(gdyn, myXProcess) Add the trend :math:`f_{trend}: \Rset^2 \mapsto \Rset^2` where :math:`f_{trend}(x_1,x_2)= (1+2x_1, 1+3x_2^2)`: >>> f = ot.SymbolicFunction(['x1', 'x2'], ['1+2*x1', '1+3*x2^2']) >>> fTrend = ot.TrendTransform(f) Create the process :math:`Y(\omega, \vect{t}) = X(\omega, \vect{t}) + f_{trend}(\vect{t})`: >>> myYProcess2 = ot.CompositeProcess(fTrend, myXProcess) Apply the Box Cox transformation :math:`h=(h_1,h_2): \Rset\mapsto \Rset^2` where :math:`h_i(x) = \dfrac{x^3-1}{3}`: >>> h = ot.BoxCoxTransform([3.0, 0.0]) >>> hBoxCox = ot.ValueFunction(h, nSpat) Create the Y process :math:`Y = hBoxCox(X)`: >>> myYProcess3 = ot.CompositeProcess(hBoxCox, myXProcess)" // --------------------------------------------------------------------- %feature("docstring") OT::CompositeProcess::getAntecedent "Get the antecedent process. Returns ------- XProcess : :class:`~openturns.Process` The process :math:`X`." // --------------------------------------------------------------------- %feature("docstring") OT::CompositeProcess::getFunction "Get the field function. Returns ------- fdyn : :class:`~openturns.FieldFunction` The field function :math:`f_{dyn}`." openturns-1.9/python/src/CompositeRandomVector.i000066400000000000000000000005121307543307100221710ustar00rootroot00000000000000// SWIG file CompositeRandomVector.i OTAutodoc(CompositeRandomVector) %{ #include "openturns/CompositeRandomVector.hxx" %} %include openturns/CompositeRandomVector.hxx namespace OT { %extend CompositeRandomVector { CompositeRandomVector(const CompositeRandomVector & other) { return new OT::CompositeRandomVector(other); } } } openturns-1.9/python/src/Composite_doc.i.in000066400000000000000000000024571307543307100211110ustar00rootroot00000000000000%feature("docstring") OT::Composite "Composite design of experiments. Available constructor: Composite(*center, levels*) Composite(*dimension, levels*) Parameters ---------- center : sequence of float Center of the design of experiments. If not specified, the design of experiments is centered on :math:`\vect{0} \in \Rset^n`. levels : sequence of float of dimension :math:`n_{level}` The discretisation of directions (the same for each one), without any consideration of unit. dimension : positive int Dimension :math:`n` of the space where the design of experiments is created. Notes ----- Composite is a stratified design of experiments enabling to create a pattern as the union of an :class:`~openturns.Axial` pattern and a :class:`~openturns.Factorial` one. The number of points generated is :math:`1 + n_{level}(2n+2^n)`. In order to scale each direction and translate the grid structure onto the proper center, use the operator :math:`*=` and :math:`+=` of :class:`~openturns.Sample`. See also -------- StratifiedExperiment Examples -------- >>> import openturns as ot >>> levels = [4.0, 2.0, 7.0] >>> myCenteredReductedGrid = ot.Composite(2, levels) >>> mySample = myCenteredReductedGrid.generate() >>> # Translate the grid >>> mySample+=4 >>> # Scale each direction >>> mySample*=2" openturns-1.9/python/src/ConditionalDistribution.i000066400000000000000000000005361307543307100225540ustar00rootroot00000000000000// SWIG file ConditionalDistribution.i %{ #include "openturns/ConditionalDistribution.hxx" %} %include ConditionalDistribution_doc.i %include openturns/ConditionalDistribution.hxx namespace OT { %extend ConditionalDistribution { ConditionalDistribution(const ConditionalDistribution & other) { return new OT::ConditionalDistribution(other); } } } openturns-1.9/python/src/ConditionalDistribution_doc.i.in000066400000000000000000000127571307543307100240160ustar00rootroot00000000000000%feature("docstring") OT::ConditionalDistribution "Conditional distribution. Helper class for defining the distribution of :math:`\vect{X}` such that :math:`\vect{X}|\vect{\Theta}` follows the distribution :math:`\mathcal{L}_{\vect{X}|\vect{\Theta}}`, with :math:`\vect{\Theta}=g(\vect{Y})`, :math:`\vect{Y}` follows the distribution :math:`\mathcal{L}_{\vect{Y}}` and :math:`g` is a given function of input dimension the dimension of :math:`\mathcal{L}_{\vect{Y}}` and output dimension the dimension of :math:`\vect{\Theta}`. Available constructors: ConditionalDistribution(*conditionedDist, conditioningDist, linkFunction*) ConditionalDistribution(*conditionedDist, conditioningDist*) ConditionalDistribution() Parameters ---------- conditionedDist : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. In the `ConditionalDistribution()` constructor, `conditionedDist` is taken equal to :math:`\vect{X} | \vect{\Theta} \sim` :class:`~openturns.Uniform` :math:`(\vect{\Theta})`. conditioningDist : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. In the `ConditionalDistribution()` constructor, `conditioningDist` is taken equal to :math:`\vect{Y} \sim` :class:`~openturns.Uniform`:math:`(-1,1)`. linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. In the `ConditionalDistribution()` constructor, `linkFunction` is taken equal to :math:`g: \Rset \rightarrow \Rset^2` with :math:`g(y)=(y,y+1)`. In the `ConditionalDistribution(conditionedDist, conditioningDist)` constructor, we need :math:`p=q` and `linkFunction` is taken equal to :math:`g(\vect{y})=\vect{y}`. Notes ----- Its probability density function is defined as: .. math:: f_{\vect{X}}(\vect{x}) = \int f_{\vect{X}|\vect{\Theta}=g(\vect{y})}(\vect{x}|g(\vect{y})) f_{\vect{Y}}(\vect{y})\di{\vect{y}} with :math:`f_{\vect{X}|\vect{\Theta}=g(\vect{y})}` the PDF of the distribution of :math:`\vect{X}|\vect{\Theta}`, where :math:`\vect{\Theta}` has been replaced by :math:`g(\vect{y})`, :math:`f_{\vect{Y}}` the PDF of :math:`\vect{Y}` and :math:`g` the linking function. With the default constructor, the resulting random variable :math:`X` follows a trapezoidal distribution parametered by :math:`(-1, 0, 1, 2)`. Note that a :class:`~openturns.ConditionalDistribution` can be obtained as the first marginal distribution of a :class:`~openturns.BayesDistribution`. Examples -------- Create a distribution: >>> import openturns as ot >>> conditioningDist = ot.Normal(0.0, 1.0) >>> g = ot.SymbolicFunction(['y'], ['y', '0.1+y^2']) >>> conditionedDist = ot.Normal() >>> finalDist = ot.ConditionalDistribution(conditionedDist, conditioningDist, g) Draw a sample: >>> sample = finalDist.getSample(5) " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::getConditionedDistribution "Accessor to the distribution's conditioned distribution parameter `conditionedDistribution`. Returns ------- conditionedDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::getConditioningDistribution "Accessor to the distribution's conditioned distribution parameter `conditioningDistribution`. Returns ------- conditioningDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::getLinkFunction "Accessor to the distribution's conditioned distribution parameter `linkFunction`. Returns ------- linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::setConditionedDistribution "Accessor to the distribution's conditioned distribution parameter `conditionedDistribution`. Parameters ---------- conditionedDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`g(\vect{Y})`. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::setConditioningDistribution "Accessor to the distribution's conditioned distribution parameter `conditioningDistribution`. Parameters ---------- conditioningDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{Y}`, specified with its parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalDistribution::setLinkFunction "Accessor to the distribution's conditioned distribution parameter `linkFunction`. Parameters ---------- linkFunction : :class:`~openturns.Function`, the function :math:`g: \Rset^p \rightarrow \Rset^q`, where :math:`p` is the dimension of `conditioningDist` and :math:`q` is the dimension of :math:`\vect{\Theta}`. " openturns-1.9/python/src/ConditionalRandomVector.i000066400000000000000000000005361307543307100225000ustar00rootroot00000000000000// SWIG file ConditionalRandomVector.i %{ #include "openturns/ConditionalRandomVector.hxx" %} %include ConditionalRandomVector_doc.i %include openturns/ConditionalRandomVector.hxx namespace OT { %extend ConditionalRandomVector { ConditionalRandomVector(const ConditionalRandomVector & other) { return new OT::ConditionalRandomVector(other); } } } openturns-1.9/python/src/ConditionalRandomVector_doc.i.in000066400000000000000000000051701307543307100237310ustar00rootroot00000000000000%feature("docstring") OT::ConditionalRandomVector "Conditional random vector. Helper class for defining the random vector :math:`\vect{X}` such that :math:`\vect{X}|\vect{\Theta}` follows the distribution :math:`\mathcal{L}_{\vect{X}|\vect{\Theta}}`, with :math:`\vect{\Theta}` a random vector of dimension the dimension of :math:`\vect{\Theta}`. Available constructors: ConditionalRandomVector(*conditionedDist, randomParameters*) Parameters ---------- conditionedDist : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}`, whose parameters will be overwritten by :math:`\vect{\Theta}`. randomParameters : :class:`~openturns.RandomVector`, the random parameters :math:`\vect{\Theta}` of the `conditionedDist` distribution. Notes ----- Its probability density function is defined as: .. math:: f_{\vect{X}}(\vect{x}) = \int f_{\vect{X}|\vect{\Theta}=\vect{\theta}}(\vect{x}|\vect{\theta}) f_{\vect{\Theta}}(\vect{\theta})\di{\vect{\theta}} with :math:`f_{\vect{X}|\vect{\Theta}=\vect{\theta}}` the PDF of the distribution of :math:`\vect{X}|\vect{\Theta}`, where :math:`\vect{\Theta}` has been replaced by :math:`\vect{\theta}`, :math:`f_{\vect{\Theta}}` the PDF of :math:`\vect{\Theta}`. Note that there exist other (quasi) equivalent modellings using a combination of the classes :class:`~openturns.ConditionalDistribution` and :class:`~openturns.RandomVector` (see the Use Cases Guide). Examples -------- Create a random vector: >>> import openturns as ot >>> distXgivenT = ot.Exponential() >>> distGamma = ot.Uniform(1.0, 2.0) >>> distAlpha = ot.Uniform(0.0, 0.1) >>> distTheta = ot.ComposedDistribution([distGamma, distAlpha]) >>> rvTheta = ot.RandomVector(distTheta) >>> rvX = ot.ConditionalRandomVector(distXgivenT, rvTheta) Draw a sample: >>> sample = rvX.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalRandomVector::getRandomParameters "Accessor to the distribution's random parameter `randomParameters`. Returns ------- randomParameters : :class:`~openturns.RandomVector`, the random parameters :math:`\vect{\Theta}`. " // --------------------------------------------------------------------- %feature("docstring") OT::ConditionalRandomVector::getDistribution "Accessor to the distribution's conditioned distribution parameter `conditionedDistribution`. Returns ------- conditionedDistribution : :class:`~openturns.Distribution`, the distribution of :math:`\vect{X}|\vect{\Theta}=\vect{\theta}`, where the parameters :math:`\vect{\theta}` are equal to the values used to generate the last realization of :math:`\vect{X}`. " openturns-1.9/python/src/ConditionedNormalProcess.i000066400000000000000000000005461307543307100226610ustar00rootroot00000000000000// SWIG file ConditionedNormalProcess.i %{ #include "openturns/ConditionedNormalProcess.hxx" %} %include ConditionedNormalProcess_doc.i %include openturns/ConditionedNormalProcess.hxx namespace OT { %extend ConditionedNormalProcess { ConditionedNormalProcess(const ConditionedNormalProcess & other) { return new OT::ConditionedNormalProcess(other); } } } openturns-1.9/python/src/ConditionedNormalProcess_doc.i.in000066400000000000000000000113651307543307100241140ustar00rootroot00000000000000%feature("docstring") OT::ConditionedNormalProcess "Conditioned normal process. ConditionedNormalProcess(*krigingResult, mesh*) Parameters ---------- krigingResult : :class:`~openturns.KrigingResult` Structure that contains all elements of kriging computations. mesh : :class:`~openturns.Mesh` Mesh :math:`\cM` over which the domain :math:`\cD` is discretized. Notes ----- ConditionedNormalProcess helps to create Gaussian random fields, :math:`X: \Omega \times\cD \mapsto \Rset^d` where :math:`\cD \in \Rset^n`, with covariance function :math:`\cC: \cD \times \cD \mapsto \cM_{d \times d}(\Rset)` ( :math:`\cC^{stat}: \cD \mapsto \cM_{d \times d}(\Rset)` in the stationary case), conditionaly to some observations. Let :math:`X(\omega,x=x_1)=y_1,\cdots,X(\omega,x=x_n)=y_n` be the observations of the Gaussian process. We assume the same Gaussian prior as in the :class:`~openturns.KrigingAlgorithm`: .. math:: Y(\vect{x}) = \Tr{\vect{f}(\vect{x})} \vect{\beta} + Z(\vect{x}) with :math:`\Tr{\vect{f}(\vect{x})} \vect{\beta}` a generalized linear model, :math:`Z(\vect{x})` a zero-mean Gaussian process with a stationary autocorrelation function :math:`\cC^{stat}`: .. math:: \mathbb{E}[Z(\vect{x}), Z(\vect{\tilde{x}})] = \sigma^2 \cC^{stat}_{\theta}(\vect{x} - \vect{\tilde{x}}) The ConditionedNormalProcess generates realizations of the conditioned process. It focuses first on the :class:`~openturns.KrigingAlgorithm` to build such prior. Results are stored in a :class:`~openturns.KrigingResult` structure, which is given as input argument of the class. This last one, combined with the mesh argument, define both the prior :math:`Y(\cM)` and the covariance evaluation on the mesh vertices :math:`\cC^{stat}_{\theta}(\cM)` conditionnaly to the previous observations. It follows that the realizations are randomly generated from the Gaussian distribution :math:`\cN ( Y(\cM), \cC^{stat}_{\theta}(\cM) )`. In practice, we do not store the Gaussian distribution as we need only the random realization method. For that purpose, we use the Cholesky method : we compute the Cholesky factor :math:`\cL_{\theta}(\cM)` of the covariance matrix :math:`\cC^{stat}_{\theta}(\cM)` such as :math:`\cC^{stat}_{\theta}(\cM) = \cL_{\theta}(\cM) \Tr{\cL_{\theta}(\cM)}`. It follows that the random realizations are obtained as following : :math:`realization = Y(\cM) + \cL_{\theta}(\cM) W` with :math:`W` a centered & reduced random Gaussian realization. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Kriging use case >>> # Learning data >>> levels = [8.0, 5.0] >>> box = ot.Box(levels) >>> inputSample = box.generate() >>> # Scale each direction >>> inputSample *= 10 >>> # Define model >>> model = ot.SymbolicFunction(['x', 'y'], ['cos(0.5*x) + sin(y)']) >>> outputSample = model(inputSample) >>> # Definition of exponential model >>> spatialDimension = 2 >>> covarianceModel = ot.SquaredExponential([1.988, 0.924], [3.153]) >>> # Basis definition >>> basis = ot.ConstantBasisFactory(spatialDimension).build() >>> # Kriring algorithm >>> algo = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() >>> result = algo.getResult() >>> vertices = [[1.0, 0.0], [2.0, 0.0], [2.0, 1.0], [1.0, 1.0], [1.5, 0.5]] >>> simplices = ot.IndicesCollection([[0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4]]) >>> mesh2D = ot.Mesh(vertices, simplices) >>> process = ot.ConditionedNormalProcess(result, mesh2D)" // --------------------------------------------------------------------- %feature("docstring") OT::ConditionedNormalProcess::getRealization "Return a realization of the process. Returns ------- realization : :class:`~openturns.Field` A realization of the process. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Kriging use case >>> # Learning data >>> levels = [8.0, 5.0] >>> box = ot.Box(levels) >>> inputSample = box.generate() >>> # Scale each direction >>> inputSample *= 10 >>> # Define model >>> model = ot.SymbolicFunction(['x', 'y'], ['cos(0.5*x) + sin(y)']) >>> outputSample = model(inputSample) >>> # Definition of exponential model >>> spatialDimension = 2 >>> covarianceModel = ot.SquaredExponential(spatialDimension *[0.95]) >>> # Basis definition >>> basis = ot.ConstantBasisFactory(spatialDimension).build() >>> # Kriring algorithm >>> algo = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() >>> result = algo.getResult() >>> vertices = [[1.0, 0.0], [2.0, 0.0], [2.0, 1.0],[1.0, 1.0], [1.5, 0.5]] >>> simplices = ot.IndicesCollection([[0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4]]) >>> mesh2D = ot.Mesh(vertices, simplices) >>> process = ot.ConditionedNormalProcess(result, mesh2D) >>> # Get a realization of the process >>> realization = process.getRealization() " openturns-1.9/python/src/ConstantBasisFactory.i000066400000000000000000000005071307543307100220120ustar00rootroot00000000000000// SWIG file ConstantBasisFactory.i %{ #include "openturns/ConstantBasisFactory.hxx" %} %include ConstantBasisFactory_doc.i %include openturns/ConstantBasisFactory.hxx namespace OT { %extend ConstantBasisFactory { ConstantBasisFactory(const ConstantBasisFactory & other) { return new OT::ConstantBasisFactory(other); } } } openturns-1.9/python/src/ConstantBasisFactory_doc.i.in000066400000000000000000000011231307543307100232370ustar00rootroot00000000000000%feature("docstring") OT::ConstantBasisFactory "Constant basis factory to construct the regression basis. Available constructors: ConstantBasisFactory(*dimension*) Parameters ---------- dimension : integer Input dimension of the basis. See also -------- BasisFactory, LinearBasisFactory, QuadraticBasisFactory Notes ----- A factory for constant basis of input dimension *dimension*." // --------------------------------------------------------------------- %feature("docstring") OT::ConstantBasisFactory::build "Build the basis. Returns ------- basis : :class:`~openturns.Basis`." openturns-1.9/python/src/ConstantGradient.i000066400000000000000000000004421307543307100211540ustar00rootroot00000000000000// SWIG file ConstantGradient.i OTAutodoc(ConstantGradient) %{ #include "openturns/ConstantGradient.hxx" %} %include openturns/ConstantGradient.hxx namespace OT { %extend ConstantGradient { ConstantGradient(const ConstantGradient & other) { return new OT::ConstantGradient(other); } } } openturns-1.9/python/src/ConstantHessian.i000066400000000000000000000004321307543307100210100ustar00rootroot00000000000000// SWIG file ConstantHessian.i OTAutodoc(ConstantHessian) %{ #include "openturns/ConstantHessian.hxx" %} %include openturns/ConstantHessian.hxx namespace OT { %extend ConstantHessian { ConstantHessian(const ConstantHessian & other) { return new OT::ConstantHessian(other); } } } openturns-1.9/python/src/ConstantRandomVector.i000066400000000000000000000005021307543307100220170ustar00rootroot00000000000000// SWIG file ConstantRandomVector.i OTAutodoc(ConstantRandomVector) %{ #include "openturns/ConstantRandomVector.hxx" %} %include openturns/ConstantRandomVector.hxx namespace OT { %extend ConstantRandomVector { ConstantRandomVector(const ConstantRandomVector & other) { return new OT::ConstantRandomVector(other); } } } openturns-1.9/python/src/ConstantStep.i000066400000000000000000000004061307543307100203320ustar00rootroot00000000000000// SWIG file ConstantStep.i %{ #include "openturns/ConstantStep.hxx" %} %include ConstantStep_doc.i %include openturns/ConstantStep.hxx namespace OT { %extend ConstantStep { ConstantStep(const ConstantStep & other) { return new OT::ConstantStep(other); } } } openturns-1.9/python/src/ConstantStep_doc.i.in000066400000000000000000000010351307543307100215630ustar00rootroot00000000000000%feature("docstring") OT::ConstantStep "Constant step. Available constructors: ConstantStep(*epsilon=[1.0]*) Parameters ---------- epsilon : sequence of float Finite difference steps for each dimension. Notes ----- *ConstantStep* defines a list of constant finite difference steps equal to *epsilon*. See also -------- BlendedStep Examples -------- >>> import openturns as ot >>> epsilon = [1e-4, 2e-4] >>> steps = ot.ConstantStep(epsilon) >>> print(steps([2.0]*2)) [0.0001,0.0002] >>> print(steps([0.0, 3.0])) [0.0001,0.0002]" openturns-1.9/python/src/ContinuousDistribution.i000066400000000000000000000004621307543307100224550ustar00rootroot00000000000000// SWIG file ContinuousDistribution.i %{ #include "openturns/ContinuousDistribution.hxx" %} %include openturns/ContinuousDistribution.hxx // namespace OT { %extend ContinuousDistribution { ContinuousDistribution(const ContinuousDistribution & other) { return new OT::ContinuousDistribution(other); } } } openturns-1.9/python/src/Contour.i000066400000000000000000000003361307543307100173400ustar00rootroot00000000000000// SWIG file Contour.i %{ #include "openturns/Contour.hxx" %} %include Contour_doc.i %include openturns/Contour.hxx namespace OT { %extend Contour { Contour(const Contour & other) { return new OT::Contour(other); } } } openturns-1.9/python/src/Contour_doc.i.in000066400000000000000000000052561307543307100206000ustar00rootroot00000000000000%feature("docstring") OT::Contour "Contour. Available constructors: Contour(*dimX, dimY, data, legend=' '*) Contour(*sampleX, sampleY, data, levels, labels, drawLabels=True, legend=' '*) Parameters ---------- dimX, dimY : int Dimensions of *data*. data : 2-d sequence of float of dimension 1 and of size :math:`dimX*dimY` These values are those of a function :math:`f: \Rset^2 \rightarrow \Rset` on each point of the grid with *dimX* points along the :math:`X`-direction and *dimY* points along the :math:`Y`-direction. The :math:`(X, Y)`- values are stored row-by-row. sampleX, sampleY : two 2-d sequences of float of dimension 1 First and second coordinates. If not specified the points are equally spaced in :math:`[0, 1]` along the :math:`X` and :math:`Y`-directions. levels : sequence of float Levels where the contour will be drawn. If two points of the grid have values bracketing the *level*, a linear interpolation is made in order to find the point associated to the *level* considered. labels : sequence of str Labels of each curve associated to one *level*. By default, the labels are the values of the *levels*. drawLabels : bool Flag telling if the labels of the iso-curves must be explicited or not. legend : str Legend of the Contour. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x', 'y'], ['exp(-sin(cos(y)^2*x^2+sin(x)^2*y^2))']) >>> # Generate the data for the curves to be drawn >>> nX = 75 >>> nY = 75 >>> inputData = ot.Box([nX, nY]).generate() >>> inputData *= [10.0] * 2 >>> inputData += [-5.0] * 2 >>> data = f(inputData) >>> levels = [(0.5 + i) / 5 for i in range(5)] >>> # Create an empty graph >>> myGraph = ot.Graph('Complex iso lines', 'u1', 'u2', True, '') >>> # Create the contour >>> myContour = ot.Contour(nX + 2, nY + 2, data) >>> myContour.setLevels(levels) >>> myGraph.add(myContour)" // --------------------------------------------------------------------- %feature("docstring") OT::Contour::buildDefaultLabels "Build default labels by taking the level values." // --------------------------------------------------------------------- %feature("docstring") OT::Contour::buildDefaultLevels "Build default levels. Parameters ---------- n : int Number of levels. If not specified, the default value is taken in the :class:`~openturns.ResourceMap` and :math:`n=10`. Notes ----- It builds :math:`n` level values and the associated labels which are the level values. The level values are the empirical quantiles of the data to be sliced at orders :math:`q_k` regularly distributed over :math:`]0,1[`: :math:`q_k = \frac{1}{n} \left( k+ \frac{1}{2} \right)` for :math:`0 \leq k \leq n-1`. " openturns-1.9/python/src/Copula.i000066400000000000000000000101741307543307100171330ustar00rootroot00000000000000// SWIG file Copula.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/Copula.hxx" namespace OT { template <> struct traitsPythonType { typedef _PyObject_ Type; }; template <> inline OT::Copula convert<_PyObject_,OT::Copula>(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__Copula, 0 | 0 ))) { OT::Copula * p_copula = reinterpret_cast< OT::Copula * >( ptr ); return *p_copula; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__CopulaImplementation, 0 | 0 ))) { OT::CopulaImplementation * p_copula = reinterpret_cast< OT::CopulaImplementation * >( ptr ); return *p_copula; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__Distribution, 0 | 0 ))) { OT::Distribution * p_dist = reinterpret_cast< OT::Distribution * >( ptr ); return *p_dist; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__DistributionImplementation, 0 | 0 ))) { OT::DistributionImplementation * p_dist = reinterpret_cast< OT::DistributionImplementation * >( ptr ); return *p_dist; } else if (isAPython<_PySequence_>( pyObj )) { check<_PySequence_>( pyObj ); ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); const UnsignedInteger size = PySequence_Fast_GET_SIZE( newPyObj.get() ); if (size != 2) { throw OT::InvalidArgumentException(HERE) << "Sequence object has incorrect size " << size << ". Must be 2."; } PyObject * elt1 = PySequence_Fast_GET_ITEM( newPyObj.get(), 0 ); check<_PyObject_>( elt1 ); PyObject * elt2 = PySequence_Fast_GET_ITEM( newPyObj.get(), 1 ); check<_PyString_>( elt2 ); OT::Copula copula = convert<_PyObject_,OT::Copula>( elt1 ); copula.setName( convert<_PyString_,OT::String>( elt2 ) ); return copula; } else { throw OT::InvalidArgumentException(HERE) << "Object passed as argument is neither a Copula nor an object convertible to a Copula"; } return OT::Copula(); } } /* namespace OT */ %} %include Copula_doc.i %typemap(in) const OT::Copula & { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIGTYPE_p_OT__CopulaImplementation, 0))) { // From Implementation* OT::CopulaImplementation * p_impl = reinterpret_cast< OT::CopulaImplementation * >( ptr ); $1 = new OT::Copula( *p_impl ); } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIGTYPE_p_OT__Distribution, 0))) { // From Distribution* OT::Distribution * p_dist = reinterpret_cast< OT::Distribution * >( ptr ); $1 = new OT::Copula( p_dist->getImplementation() ); } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { // From Pointer OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); $1 = new OT::Copula( **p_impl ); } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIGTYPE_p_OT__DistributionImplementation, 0))) { // From DistributionImplementation OT::DistributionImplementation * p_impl = reinterpret_cast< OT::DistributionImplementation * >( ptr ); $1 = new OT::Copula( *p_impl ); } else { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a Copula"); } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const OT::Copula & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIGTYPE_p_OT__CopulaImplementation, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIGTYPE_p_OT__Distribution, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIG_TypeQuery("OT::Pointer *"), 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIGTYPE_p_OT__DistributionImplementation, 0)); } %include openturns/Copula.hxx namespace OT { %extend Copula { Copula(const Copula & other) { return new OT::Copula(other); } } } openturns-1.9/python/src/CopulaImplementation.i000066400000000000000000000005061307543307100220370ustar00rootroot00000000000000// SWIG file CopulaImplementation.i %{ #include "openturns/CopulaImplementation.hxx" %} %include CopulaImplementation_doc.i %include openturns/CopulaImplementation.hxx namespace OT { %extend CopulaImplementation { CopulaImplementation(const CopulaImplementation & other) { return new OT::CopulaImplementation(other); } } } openturns-1.9/python/src/CopulaImplementation_doc.i.in000066400000000000000000000037531307543307100233000ustar00rootroot00000000000000%define OT_Copula_doc "Base class for copulas. Notes ----- To define the joined probability density function of the random input vector :math:`\vect{X}` by composition, one needs: - the specification of the copula of interest :math:`C` with its parameters, - the specification of the :math:`n_X` marginal laws of interest :math:`F_{X_i}` of the :math:`n_X` input variables :math:`X_i`. The joined cumulative density function is therefore defined by : .. math:: \Prob{X^1 \leq x^1, X^2 \leq x^2, \cdots, X^{n_X} \leq x^{n_X}} = C\left( F_{X^1}(x^1),F_{X^2}(x^2),\cdots,F_{X^{n_X}}(x^{n_X}) \right) Copulas allow to represent the part of the joined cumulative density function which is not described by the marginal laws. It enables to represent the dependence structure of the input variables. A copula is a special cumulative density function defined on :math:`[0,1]^{n_X}` whose marginal distributions are uniform on :math:`[0,1]`. The choice of the dependence structure is disconnected from the choice of the marginal distributions. A copula, restricted to :math:`[0,1]^{n_X}` is a :math:`n_U`-dimensional cumulative density function with uniform marginals such as: - :math:`C(\vect{u}) \geq 0, \forall \vect{u} \in [0,1]^{n_U}` - :math:`C(\vect{u}) = u_i, \forall \vect{u}=(1,\ldots,1,u_i,1,\ldots,1)` - For all :math:`N`-box :math:`\cB = [a_1,b_1] \times \cdots \times [a_{n_U},b_{n_U}] \in [0,1]^{n_U}`, we have :math:`\cV_C(\cB) \geq 0`, where : - :math:`\cV_C(\cB) = \sum_{i=1,\cdots, 2^{n_U}} sign(\vect{v}_i) \times C(\vect{v}_i)`, the summation being made over the :math:`2^{n_U}` vertices :math:`\vect{v}_i` of :math:`\cB`. - :math:`sign(\vect{v}_i)= +1` if :math:`v_i^k = a_k` for an even number of :math:`k`'s, :math:`sign(\vect{v}_i)= -1` otherwise. See also -------- ArchimedeanCopula, NormalCopula, ComposedCopula, SklarCopula IndependentCopula, MinCopula, OrdinalSumCopula, FarlieGumbelMorgensternCopula" %enddef %feature("docstring") OT::CopulaImplementation OT_Copula_docopenturns-1.9/python/src/Copula_doc.i.in000066400000000000000000000001611307543307100203600ustar00rootroot00000000000000// Copula docstrings are defined in CopulaImplementation_doc.i.in %feature("docstring") OT::Copula OT_Copula_docopenturns-1.9/python/src/CorrectedLeaveOneOut.i000066400000000000000000000005061307543307100217270ustar00rootroot00000000000000// SWIG file CorrectedLeaveOneOut.i %{ #include "openturns/CorrectedLeaveOneOut.hxx" %} %include CorrectedLeaveOneOut_doc.i %include openturns/CorrectedLeaveOneOut.hxx namespace OT { %extend CorrectedLeaveOneOut { CorrectedLeaveOneOut(const CorrectedLeaveOneOut & other) { return new OT::CorrectedLeaveOneOut(other); } } } openturns-1.9/python/src/CorrectedLeaveOneOut_doc.i.in000066400000000000000000000005551307543307100231650ustar00rootroot00000000000000%feature("docstring") OT::CorrectedLeaveOneOut "Corrected leave one out. Available constructors: CorrectedLeaveOneOut() See also -------- FittingAlgorithm, KFold Notes ----- CorrectedLeaveOneOut inherits from :class:`~openturns.FittingAlgorithm`. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." openturns-1.9/python/src/CorrelationAnalysis.i000066400000000000000000000003141307543307100216700ustar00rootroot00000000000000// SWIG file CorrelationAnalysis.i %{ #include "openturns/CorrelationAnalysis.hxx" %} %include CorrelationAnalysis_doc.i %nodefaultctor CorrelationAnalysis; %include openturns/CorrelationAnalysis.hxx openturns-1.9/python/src/CorrelationAnalysis_doc.i.in000066400000000000000000000072021307543307100231250ustar00rootroot00000000000000%feature("docstring") OT::CorrelationAnalysis::PCC "Correlation evaluation based on the Partial Correlation Coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension :math:`n \geq 2`. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : :class:`~openturns.Point` The PCC coefficients evaluated between the *sample2* and each coordinate of *sample1*. See Also -------- CorrelationAnalysis_PearsonCorrelation, CorrelationAnalysis_SRC, CorrelationAnalysis_PRCC" // --------------------------------------------------------------------- %feature("docstring") OT::CorrelationAnalysis::PRCC "Correlation evaluation based on the Partial Rank Correlation Coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension :math:`n \geq 2`. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : :class:`~openturns.Point` The PRCC coefficients evaluated between the *sample2* and each coordinate of *sample1* (based on the rank values). See Also -------- CorrelationAnalysis_SpearmanCorrelation, CorrelationAnalysis_SRRC, CorrelationAnalysis_PCC" // --------------------------------------------------------------------- %feature("docstring") OT::CorrelationAnalysis::PearsonCorrelation "Correlation evaluation based on the Pearson correlation coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension = 1. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : float The Pearson correlation coefficients evaluated between the *sample2* and the *sample1*. See Also -------- CorrelationAnalysis_PCC, CorrelationAnalysis_SRC, CorrelationAnalysis_SpearmanCorrelation" // --------------------------------------------------------------------- %feature("docstring") OT::CorrelationAnalysis::SpearmanCorrelation "Correlation evaluation based on the Spearman correlation coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension = 1. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : float The Spearman correlation coefficients evaluated between the *sample2* and the *sample1* (based on the rank values). See Also -------- CorrelationAnalysis_PRCC, CorrelationAnalysis_SRRC, CorrelationAnalysis_PearsonCorrelation" // --------------------------------------------------------------------- %feature("docstring") OT::CorrelationAnalysis::SRC "Correlation evaluation based on the Standard Regression Coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension :math:`n \geq 1`. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : :class:`~openturns.Point` The SRC evaluated between the *sample2* and each coordinate of the *sample1*. See Also -------- CorrelationAnalysis_PearsonCorrelation, CorrelationAnalysis_PCC, CorrelationAnalysis_SRRC" // --------------------------------------------------------------------- %feature("docstring") OT::CorrelationAnalysis::SRRC "Correlation evaluation based on the Standard Rank Regression Coefficient. Parameters ---------- sample1 : 2-d sequence of float First sample, of dimension :math:`n \geq 1`. sample2 : 2-d sequence of float Second sample, of dimension = 1. Returns ------- coef : :class:`~openturns.Point` The SRRC evaluated between the *sample2* and each coordinate of the *sample1* (based on the rank value). See Also -------- CorrelationAnalysis_SpearmanCorrelation, CorrelationAnalysis_PRCC, CorrelationAnalysis_SRC" openturns-1.9/python/src/CorrelationMatrix.i000066400000000000000000000025211307543307100213530ustar00rootroot00000000000000// SWIG file CorrelationMatrix.i %{ #include "openturns/CorrelationMatrix.hxx" %} %include CorrelationMatrix_doc.i %apply const ScalarCollection & { const OT::CorrelationMatrix::ScalarCollection & }; %typemap(in) const CorrelationMatrix & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert($input); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a CorrelationMatrix"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const CorrelationMatrix & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf($input); } %include openturns/CorrelationMatrix.hxx namespace OT { %extend CorrelationMatrix { CorrelationMatrix(const CorrelationMatrix & other) { return new OT::CorrelationMatrix(other); } CorrelationMatrix(PyObject * pyObj) { return new OT::CorrelationMatrix(OT::convert(pyObj)); } OTMatrixAccessors() // These should be inherited from CovarianceMatrix Point __mul__(Point p) { return (*self) * p; } Matrix __mul__(Scalar s) { return (*self) * s; } } // CorrelationMatrix } // OT openturns-1.9/python/src/CorrelationMatrix_doc.i.in000066400000000000000000000015751307543307100226150ustar00rootroot00000000000000%feature("docstring") OT::CorrelationMatrix "Correlation Matrix. Available constructors: CorrelationMatrix(*dim*) CorrelationMatrix(*dim, values*) Parameters ---------- dim : integer The dimension of the correlation matrix (square matrix with *dim* rows and *dim* columns). values : sequence of float Collection of :math:`dim^2` scalar values to put in the correlation matrix, filled by rows. When not specified, the correlation matrix is initialized to the identity matrix. See also -------- CovarianceMatrix Notes ----- In the first usage, the correlation matrix is the identity matrix. In the second usage, the correlation matrix contains the specified values, filled by rows. .. warning:: No check is made on the values, in particular the diagonal elements are not forced to be equal to 1 and the positiveness of the matrix is not checked."openturns-1.9/python/src/CovarianceMatrix.i000066400000000000000000000036241307543307100211510ustar00rootroot00000000000000// SWIG file CovarianceMatrix.i %{ #include "openturns/CovarianceMatrix.hxx" namespace OT { template <> struct traitsPythonType { typedef _PyObject_ Type; }; template <> inline OT::CovarianceMatrix convert<_PyObject_,OT::CovarianceMatrix>(PyObject * pyObj) { void * ptr = 0; if (! SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::CovarianceMatrix *"), 0 | 0 ))) throw OT::InvalidArgumentException(HERE) << "Object passed as argument is not a CovarianceMatrix"; OT::CovarianceMatrix * p_sm = reinterpret_cast< OT::CovarianceMatrix * >( ptr ); return *p_sm; } } %} %include CovarianceMatrix_doc.i %apply const ScalarCollection & { const OT::CovarianceMatrix::ScalarCollection & }; %template(CovarianceMatrixCollection) OT::Collection; %template(CovarianceMatrixPersistentCollection) OT::PersistentCollection; %typemap(in) const CovarianceMatrix & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a CovarianceMatrix"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const CovarianceMatrix & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %include openturns/CovarianceMatrix.hxx namespace OT { %extend CovarianceMatrix { CovarianceMatrix(const CovarianceMatrix & other) { return new OT::CovarianceMatrix(other); } CovarianceMatrix(PyObject * pyObj) { return new OT::CovarianceMatrix( OT::convert(pyObj) ); } OTMatrixAccessors() } // CovarianceMatrix } // OT openturns-1.9/python/src/CovarianceMatrix_doc.i.in000066400000000000000000000046351307543307100224060ustar00rootroot00000000000000%feature("docstring") OT::CovarianceMatrix "Covariance (real symmetric positive definite) matrix. Parameters ---------- size : int, :math:`n > 0`, optional Matrix size. Default is 1. values : sequence of float with size :math:`n^2`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. Default creates an identity matrix. Raises ------ TypeError : If the matrix is not symmetric. Examples -------- Create a matrix >>> import openturns as ot >>> C = ot.CovarianceMatrix(2, [1.0, 0.5, 0.5, 1.0]) >>> print(C) [[ 1 0.5 ] [ 0.5 1 ]] Get or set terms >>> print(C[0, 1]) 0.5 >>> C[0, 1] = 0.6 >>> print(C[0, 1]) 0.6 >>> print(C[:, 0]) [[ 1 ] [ 0.6 ]] Create an openturns matrix from a **symmetric** numpy 2d-array (or matrix, or 2d-list)... >>> import numpy as np >>> np_2d_array = np.array([[1.0, 0.5], [0.5, 1.0]]) >>> ot_matrix = ot.CovarianceMatrix(np_2d_array) and back >>> np_matrix = np.matrix(ot_matrix)" // --------------------------------------------------------------------- %feature("docstring") OT::CovarianceMatrix::computeCholesky "Compute the Cholesky factor. The Cholesky factor of a covariance (real symmetric positive definite) matrix :math:`\mat{C}` is the lower triangular matrix :math:`\mat{L}` such that: .. math:: \mat{C} = \mat{L} \Tr{\mat{L}} Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Notes ----- This uses LAPACK's `DPOTRF `_. Returns ------- cholesky_factor : :class:`~openturns.SquareMatrix` The left (lower) Cholesky factor." // --------------------------------------------------------------------- %feature("docstring") OT::CovarianceMatrix::isPositiveDefinite "Test whether the matrix is positive definite or not. A matrix :math:`\mat{M}` is positive definite if :math:`\Tr{\vect{z}} \mat{M} \vect{z}` is positive for every compatible non-zero column vector :math:`\vect{z}`. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Notes ----- This uses LAPACK's `DPOTRF `_. Returns ------- test : bool Answer." openturns-1.9/python/src/CovarianceModel.i000066400000000000000000000006721307543307100207450ustar00rootroot00000000000000// SWIG file CovarianceModel.i %{ #include "openturns/CovarianceModel.hxx" %} %include CovarianceModel_doc.i OTDefaultCollectionConvertFunctions(CovarianceModel) OTTypedInterfaceObjectHelper(CovarianceModel) OTTypedCollectionInterfaceObjectHelper(CovarianceModel) %include openturns/CovarianceModel.hxx namespace OT{ %extend CovarianceModel { CovarianceModel(const CovarianceModel & other) { return new OT::CovarianceModel(other); } } } openturns-1.9/python/src/CovarianceModelFactory.i000066400000000000000000000006341307543307100222730ustar00rootroot00000000000000// SWIG file CovarianceModelFactory.i %{ #include "openturns/CovarianceModelFactory.hxx" %} %include CovarianceModelFactory_doc.i OTTypedInterfaceObjectHelper(CovarianceModelFactory) %include openturns/CovarianceModelFactory.hxx namespace OT { %extend CovarianceModelFactory { CovarianceModelFactory(const CovarianceModelFactory & other) { return new OT::CovarianceModelFactory(other); } } } openturns-1.9/python/src/CovarianceModelFactoryImplementation.i000066400000000000000000000006771307543307100252100ustar00rootroot00000000000000// SWIG file CovarianceModelFactoryImplementation.i %{ #include "openturns/CovarianceModelFactoryImplementation.hxx" %} %include CovarianceModelFactoryImplementation_doc.i %include openturns/CovarianceModelFactoryImplementation.hxx namespace OT {%extend CovarianceModelFactoryImplementation {CovarianceModelFactoryImplementation(const CovarianceModelFactoryImplementation & other){return new OT::CovarianceModelFactoryImplementation(other);}}} openturns-1.9/python/src/CovarianceModelFactoryImplementation_doc.i.in000066400000000000000000000012261307543307100264310ustar00rootroot00000000000000%define OT_CovarianceModelFactory_doc "Estimation of the covariance model of a process. Notes ----- This class is an interface class for all the classes that build covariance models. OpenTURNS provides two covariance model factories: :class:`~openturns.StationaryCovarianceModelFactory` for stationary processes and :class:`~openturns.NonStationaryCovarianceModelFactory` for all processes. This factory does not make any hypothesis on the stationarity of the process. See also -------- StationaryCovarianceModelFactory, NonStationaryCovarianceModelFactory" %enddef %feature("docstring") OT::CovarianceModelFactoryImplementation OT_CovarianceModelFactory_doc openturns-1.9/python/src/CovarianceModelFactory_doc.i.in000066400000000000000000000002621307543307100235220ustar00rootroot00000000000000// CovarianceModelFactory docstrings are defined in CovarianceModelFactoryImplementation_doc.i.in %feature("docstring") OT::CovarianceModelFactory OT_CovarianceModelFactory_doc openturns-1.9/python/src/CovarianceModelImplementation.i000066400000000000000000000006151307543307100236500ustar00rootroot00000000000000// SWIG file CovarianceModelImplementation.i %{ #include "openturns/CovarianceModelImplementation.hxx" %} %include CovarianceModelImplementation_doc.i %include openturns/CovarianceModelImplementation.hxx namespace OT{ %extend CovarianceModelImplementation { CovarianceModelImplementation(const CovarianceModelImplementation & other) { return new OT::CovarianceModelImplementation(other); } } } openturns-1.9/python/src/CovarianceModelImplementation_doc.i.in000066400000000000000000000545021307543307100251060ustar00rootroot00000000000000%define OT_CovarianceModel_doc "Covariance model. Notes ----- We consider :math:`X: \Omega \times\cD \mapsto \Rset^d` a multivariate stochastic process of dimension :math:`d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`, :math:`\vect{t}\in \cD` is a multivariate index and :math:`X(\omega, \vect{t}) \in \Rset^d`. We note :math:`X_{\vect{t}}: \Omega \rightarrow \Rset^d` the random variable at index :math:`\vect{t} \in \cD` defined by :math:`X_{\vect{t}}(\omega)=X(\omega, \vect{t})` and :math:`X(\omega): \cD \mapsto \Rset^d` a realization of the process :math:`X`, for a given :math:`\omega \in \Omega` defined by :math:`X(\omega)(\vect{t})=X(\omega, \vect{t})`. If the process is a second order process, we note: - :math:`m : \cD \mapsto \Rset^d` its *mean function*, defined by :math:`m(\vect{t})=\Expect{X_{\vect{t}}}`, - :math:`C : \cD \times \cD \mapsto \cS_d^+(\Rset)` its *covariance function*, defined by :math:`C(\vect{s}, \vect{t})=\Expect{(X_{\vect{s}}-m(\vect{s}))\Tr{(X_{\vect{t}}-m(\vect{t}))}}`, - :math:`R : \cD \times \cD \mapsto \cS_d^+(\Rset)` its *correlation function*, defined for all :math:`(\vect{s}, \vect{t})`, by :math:`R(\vect{s}, \vect{t})` such that for all :math:`(i,j)`, :math:`R_{ij}(\vect{s}, \vect{t})=C_{ij}(\vect{s}, \vect{t})/\sqrt{C_{ii}(\vect{s}, \vect{t})C_{jj}(\vect{s}, \vect{t})}`. In a general way, the covariance models write: .. math:: C(\vect{s}, \vect{t}) = \mat{L}_{\rho}\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right)\, \mbox{Diag}(\vect{\sigma}) \, \mat{R} \, \mbox{Diag}(\vect{\sigma}) \, \Tr{\mat{L}}_{\rho}\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right), \quad \forall (\vect{s}, \vect{t}) \in \cD where: - :math:`\vect{\theta} \in \Rset^n` is the *scale* parameter - :math:`\vect{\sigma} \in \Rset^d` id the *amplitude* parameter - :math:`\mat{L}_{\rho}(\vect{s}, \vect{t})` is the Cholesky factor of :math:`\mat{\rho}(\vect{s}, \vect{t})`: .. math:: \mat{L}_{\rho}(\vect{s}, \vect{t})\,\Tr{\mat{L}_{\rho}(\vect{s}, \vect{t})} = \mat{\rho}(\vect{s}, \vect{t}) The correlation function :math:`\mat{\rho}` may depend on additional specific parameters which are not made explicit here. The global correlation is given by two separate correlations: - the spatial correlation between the components of :math:`X_{\vect{t}}` which is given by the correlation matrix :math:`\mat{R} \in \cS_d^+(\Rset)` and the vector of marginal variances :math:`\vect{\sigma} \in \Rset^d`. The spatial correlation does not depend on :math:`\vect{t} \in \cD`. For each :math:`\vect{t}`, it links together the components of :math:`X_{\vect{t}}`. - the correlation between :math:`X_{\vect{s}}` and :math:`X_{\vect{t}}` which is given by :math:`\mat{\rho}(\vect{s}, \vect{t})`. - In the general case, the correlation links each component :math:`X^i_{\vect{t}}` to all the components of :math:`X_{\vect{s}}` and :math:`\mat{\rho}(\vect{s}, \vect{t}) \in \cS_d^+(\Rset)`; - In some particular cases, the correlation is such that :math:`X^i_{\vect{t}}` depends only on the component :math:`X^i_{\vect{s}}` and that link does not depend on the component :math:`i`. In that case, :math:`\mat{\rho}(\vect{s}, \vect{t})` can be defined from the scalar function :math:`\rho(\vect{s}, \vect{t})` by :math:`\mat{\rho}(\vect{s}, \vect{t}) = \rho(\vect{s}, \vect{t})\, \mat{I}_d`. Then, the covariance model writes: .. math:: C(\vect{s}, \vect{t}) = \rho\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right)\, \mbox{Diag}(\vect{\sigma}) \, \mat{R} \, \mbox{Diag}(\vect{\sigma}), \quad \forall (\vect{s}, \vect{t}) \in \cD " %enddef %feature("docstring") OT::CovarianceModelImplementation OT_CovarianceModel_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_computeAsScalar_doc "Compute the covariance function for scalar model. Available usages: computeAsScalar(s, t) computeAsScalar(tau) Parameters ---------- s, t : sequences of float Multivariate index :math:`(\vect{s}, \vect{t}) \in \cD \times \cD` tau : sequence of float Multivariate index :math:`\vect{\tau} \in \cD` Returns ------- covariance : float Covariance. Notes ----- The method makes sense only if the dimension of the process is :math:`d=1`. It evaluates :math:`C(\vect{s}, \vect{t})`. In the second usage, the covariance model must be stationary. Then we note :math:`C^{stat}(\vect{\tau})` for :math:`C(\vect{s}, \vect{s}+\vect{\tau})` as this quantity does not depend on :math:`\vect{s}`." %enddef %feature("docstring") OT::CovarianceModelImplementation::computeAsScalar OT_CovarianceModel_computeAsScalar_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_computeStandardRepresentative_doc "Compute the standard representative function of the covariance model. Available usages: computeStandardRepresentative(s, t) computeStandardRepresentative(tau) Parameters ---------- s, t : floats or sequences of float Multivariate index :math:`(\vect{s}, \vect{t}) \in \cD \times \cD` tau : float or sequence of float Multivariate index :math:`\vect{\tau} \in \cD` Returns ------- rho : float Correlation model :math:`\rho` Notes ----- It evaluates the scalar function :math:`\rho\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right)` or :math:`\rho\left(\dfrac{\vect{\tau}}{\theta}\right)` if the model is stationary." %enddef %feature("docstring") OT::CovarianceModelImplementation::computeStandardRepresentative OT_CovarianceModel_computeStandardRepresentative_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_discretize_doc "Discretize the covariance function on a given mesh. Parameters ---------- meshOrGrid : :class:`~openturns.Mesh` or :class:`~openturns.RegularGrid` Mesh or time grid of size :math:`N` associated with the process. Returns ------- covarianceMatrix : :class:`~openturns.CovarianceMatrix` Covariance matrix :math:`\in \cS_{nd}^+(\Rset)` (if the process is of dimension :math:`d` Notes ----- This method makes a discretization of the model on *meshOrGrid* composed of the vertices :math:`(\vect{t}_1, \dots, \vect{t}_{N-1})` and returns the covariance matrix: .. math :: \mat{C}_{1,\dots,k} = \left( \begin{array}{cccc} C(\vect{t}_1, \vect{t}_1) &C(\vect{t}_1, \vect{t}_2) & \dots & C(\vect{t}_1, \vect{t}_{k}) \\ \dots & C(\vect{t}_2, \vect{t}_2) & \dots & C(\vect{t}_2, \vect{t}_{k}) \\ \dots & \dots & \dots & \dots \\ \dots & \dots & \dots & C(\vect{t}_{k}, \vect{t}_{k}) \end{array} \right)" %enddef %feature("docstring") OT::CovarianceModelImplementation::discretize OT_CovarianceModel_discretize_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_discretizeAndFactorize_doc "Discretize and factorize the covariance function on a given mesh. Parameters ---------- meshOrGrid : :class:`~openturns.Mesh` or :class:`~openturns.RegularGrid` Mesh or time grid of size :math:`N` associated with the process. Returns ------- CholeskyMatrix : :class:`~openturns.TriangularMatrix` Cholesky factor of the covariance matrix :math:`\in \cM_{nd\times nd}(\Rset)` (if the process is of dimension :math:`d`). Notes ----- This method makes a discretization of the model on *meshOrGrid* composed of the vertices :math:`(\vect{t}_1, \dots, \vect{t}_{N-1})` thanks to the `discretize` method and returns its Cholesky factor." %enddef %feature("docstring") OT::CovarianceModelImplementation::discretizeAndFactorize OT_CovarianceModel_discretizeAndFactorize_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_discretizeHMatrix_doc "Discretize the covariance function on a given mesh using HMatrix result. Parameters ---------- meshOrGrid : :class:`~openturns.Mesh` or :class:`~openturns.RegularGrid` Mesh or time grid of size :math:`N` associated with the process. nuggetFactor: float Nugget factor to be added to the discretized matrix hmatParam : :class:`~openturns.HMatrixParameters` Parameter values for the HMatrix Returns ------- HMatrix : :class:`~openturns.HMatrix` Covariance matrix :math:`\in\cS_{nd}^+(\Rset)` (if the process is of dimension :math:`d`), stored in hierarchical format (H-Matrix) Notes ----- This method si similar to the *discretize* method. This method requires that OpenTURNS has been compiled with the hmat library. The method is helpfull for very large parameters (Mesh, grid, Sample) as its compress data. " %enddef %feature("docstring") OT::CovarianceModelImplementation::discretizeHMatrix OT_CovarianceModel_discretizeHMatrix_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_discretizeAndFactorizeHMatrix_doc "Discretize and factorize the covariance function on a given mesh. This uses HMatrix. Parameters ---------- meshOrGrid : :class:`~openturns.Mesh` or :class:`~openturns.RegularGrid` Mesh or time grid of size :math:`N` associated with the process. nuggetFactor: float Nugget factor to be added to the discretized matrix hmatParam : :class:`~openturns.HMatrixParameters` Parameter values for the HMatrix Returns ------- HMatrix : :class:`~openturns.HMatrix` Cholesk matrix :math:`\in \cS_{nd}^+(\Rset)` (if the process is of dimension :math:`d`), stored in hierarchical format (H-Matrix) Notes ----- This method si similar to the *discretizeAndFactorize* method. This method requires that OpenTURNS has been compiled with the hmat library. The method is helpfull for very large parameters (Mesh, grid, Sample) as its compress data. " %enddef %feature("docstring") OT::CovarianceModelImplementation::discretizeAndFactorizeHMatrix OT_CovarianceModel_discretizeAndFactorizeHMatrix_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_discretizeRow_doc "**(TODO)**" %enddef %feature("docstring") OT::CovarianceModelImplementation::discretizeRow OT_CovarianceModel_discretizeRow_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getAmplitude_doc "Get the amplitude parameter :math:`\vect{\sigma}` of the covariance function. Returns ------- amplitude : :class:`~openturns.Point` The amplitude parameter :math:`\vect{\sigma} \in \Rset^d` of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::getAmplitude OT_CovarianceModel_getAmplitude_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getDimension_doc "Get the dimension :math:`d` of the covariance function. Returns ------- d : int Dimension :math:`d` such that :math:`C : \cD \times \cD \mapsto \cS_d^+(\Rset).` This is the dimension of the process :math:`X`." %enddef %feature("docstring") OT::CovarianceModelImplementation::getDimension OT_CovarianceModel_getDimension_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_get_marginal "Get the ith marginal of the model. Returns ------- marginal : int index of marginal of the model." %enddef %feature("docstring") OT::CovarianceModelImplementation::getMarginal OT_CovarianceModel_get_marginal // --------------------------------------------------------------------- %define OT_CovarianceModel_get_nugget_factor_doc "Accessor to the nugget factor. This parameter allows smooth predictions from noisy data. The nugget is added to the diagonal of the assumed training covariance (thanks to discretize) and acts as a Tikhonov regularization in the problem. Returns ------- nuggetFactor : float Nugget factor used for the regularization of the discretized covariance matrix." %enddef %feature("docstring") OT::CovarianceModelImplementation::getNuggetFactor OT_CovarianceModel_get_nugget_factor_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getParameter_doc "Get the parameters of the covariance function. Returns ------- parameters : :class:`~openturns.Point` List of the scale parameter :math:`\vect{\theta} \in \Rset^n` and the amplitude parameter :math:`\vect{\sigma} \in \Rset^d` of the covariance function. The other specific parameters are not included." %enddef %feature("docstring") OT::CovarianceModelImplementation::getParameter OT_CovarianceModel_getParameter_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getParameterDescription_doc "Get the description of the covariance function parameters. Returns ------- descriptionParam : :class:`~openturns.Description` Description of the components of the parameters obtained with the *getParameter* method.." %enddef %feature("docstring") OT::CovarianceModelImplementation::getParameterDescription OT_CovarianceModel_getParameterDescription_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getScale_doc "Get the scale parameter :math:`\vect{\theta}` of the covariance function. Returns ------- scale : :class:`~openturns.Point` The scale parameter :math:`\vect{\theta} \in \Rset^n` used in the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::getScale OT_CovarianceModel_getScale_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getSpatialCorrelation_doc "Get the spatial correlation matrix :math:`\mat{R}` of the covariance function. Returns ------- spatialCorrelation : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R} \in \cS_d^+(\Rset)`." %enddef %feature("docstring") OT::CovarianceModelImplementation::getSpatialCorrelation OT_CovarianceModel_getSpatialCorrelation_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getSpatialDimension_doc "Get the spatial dimension :math:`n` of the covariance function. Returns ------- spatialDimension : int Spatial dimension :math:`n` of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::getSpatialDimension OT_CovarianceModel_getSpatialDimension_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_isDiagonal_doc "Test whether the model is diagonal or not. Returns ------- isDiagonal : bool *True* if the model is diagonal." %enddef %feature("docstring") OT::CovarianceModelImplementation::isDiagonal OT_CovarianceModel_isDiagonal_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_isStationary_doc "Test whether the model is stationary or not. Returns ------- isStationary : bool *True* if the model is stationary. Notes ----- The covariance function :math:`C` is stationary when it is invariant by translation: .. math:: \forall(\vect{s},\vect{t},\vect{h}) \in \cD \times \cD, & \, \quad C(\vect{s}, \vect{s}+\vect{h}) = C(\vect{t}, \vect{t}+\vect{h}) We note :math:`C^{stat}(\vect{\tau})` for :math:`C(\vect{s}, \vect{s}+\vect{\tau})`." %enddef %feature("docstring") OT::CovarianceModelImplementation::isStationary OT_CovarianceModel_isStationary_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_partialGradient_doc "Compute the gradient of the covariance function. Parameters ---------- s, t : floats or sequences of float Multivariate index :math:`(\vect{s}, \vect{t}) \in \cD \times \cD`. Returns ------- gradient : :class:`~openturns.Matrix` Gradient of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::partialGradient OT_CovarianceModel_partialGradient_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_parameterGradient_doc "Compute the gradient according to the parameters. Parameters ---------- s, t : sequences of float Multivariate index :math:`(\vect{s}, \vect{t}) \in \cD \times \cD`. Returns ------- gradient : :class:`~openturns.Matrix` Gradient of the function according to the parameters." %enddef %feature("docstring") OT::CovarianceModelImplementation::parameterGradient OT_CovarianceModel_parameterGradient_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_setAmplitude_doc "Set the amplitude parameter :math:`\vect{\sigma}` of the covariance function. Parameters ---------- amplitude : :class:`~openturns.Point` The amplitude parameter :math:`\vect{\sigma} \in \Rset^d` to be used in the covariance function. Its size must be equal to the dimension of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::setAmplitude OT_CovarianceModel_setAmplitude_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_setScale_doc "Set the scale parameter :math:`\vect{\theta}` of the covariance function. Parameters ---------- scale : :class:`~openturns.Point` The scale parameter :math:`\vect{\theta} \in \Rset^n` to be used in the covariance function. Its size must be equal to the spatial dimension of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::setScale OT_CovarianceModel_setScale_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_set_nugget_factor_doc "Set the nugget factor for the regularization. Acts on the discretized covariance matrix. Parameters ---------- nuggetFactor : float nugget factor to be used for the regularization of the discretized covariance matrix." %enddef %feature("docstring") OT::CovarianceModelImplementation::setNuggetFactor OT_CovarianceModel_set_nugget_factor_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_setParameter_doc "Set the parameters of the covariance function. Returns ------- parameters : :class:`~openturns.PointWithDescription` List of the scale parameter :math:`\vect{\theta} \in \Rset^n` and the amplitude parameter :math:`\vect{\sigma} \in \Rset^d` of the covariance function. Must be of dimension :math:`n+d`." %enddef %feature("docstring") OT::CovarianceModelImplementation::setParameter OT_CovarianceModel_setParameter_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_setSpatialCorrelation_doc "Set the spatial correlation matrix :math:`\mat{R}` of the covariance function. Parameters ---------- spatialCorrelation : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R} \in \cS_d^+([-1,1])`." %enddef %feature("docstring") OT::CovarianceModelImplementation::setSpatialCorrelation OT_CovarianceModel_setSpatialCorrelation_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_operator_doc "Evaluate the covariance function. Available usages: __call__(s, t) __call__(tau) Parameters ---------- s, t : floats or sequences of float Multivariate index :math:`(\vect{s}, \vect{t}) \in \cD \times \cD`. tau : float or sequence of float Multivariate index :math:`\vect{\tau} \in \cD`. Returns ------- covariance : CovarianceMatrix The evaluation of the covariance function." %enddef %feature("docstring") OT::CovarianceModelImplementation::operator() OT_CovarianceModel_operator_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_setActiveParameter_doc "Accessor to the active parameter set. Parameters ---------- active : sequence of int Indices of the active parameters." %enddef %feature("docstring") OT::CovarianceModelImplementation::setActiveParameter OT_CovarianceModel_setActiveParameter_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_getActiveParameter_doc "Accessor to the active parameter set. Returns ------- active : :class:`~openturns.Indices` Indices of the active parameters." %enddef %feature("docstring") OT::CovarianceModelImplementation::getActiveParameter OT_CovarianceModel_getActiveParameter_doc // --------------------------------------------------------------------- %define OT_CovarianceModel_draw_doc "Draw a specific component of the covariance model with spatial dimension 1. Parameters ---------- rowIndex : int, :math:`0 \leq rowIndex < dimension` The row index of the component to draw. Default value is 0. columnIndex: int, :math:`0 \leq columnIndex < dimension` The column index of the component to draw. Default value is 0. tMin : float The lower bound of the range over which the model is plotted. Default value is *CovarianceModel-DefaultTMin* in :class:`~openturns.ResourceMap`. tMax : float The upper bound of the range over which the model is plotted. Default value is *CovarianceModel-DefaultTMax* in :class:`~openturns.ResourceMap`. pointNumber : int, :math:`pointNumber \geq 2` The discretization of the range :math:`[tMin,tMax]` over which the model is plotted. Default value is *CovarianceModel-DefaultPointNumber* in class:`~openturns.ResourceMap`. asStationary : bool Flag to tell if the model has to be plotted as a stationary model, ie as a function of the lag :math:`\tau=t-s` if equals to *True*, or as a non-stationary model, ie as a function of :math:`(s,t)` if equals to *False*. Default value is *True*. correlationFlag : bool Flag to tell if the model has to be plotted as a correlation function if equals to *True* or as a covariance function if equals to *False*. Default value is *False*. Returns ------- graph : :class:`~openturns.Graph` A graph containing a unique curve if *asStationary=True* and if the model is actually a stationary model, or containing the iso-values of the model if *asStationary=False* or if the model is nonstationary. " %enddef %feature("docstring") OT::CovarianceModelImplementation::draw OT_CovarianceModel_draw_doc openturns-1.9/python/src/CovarianceModel_doc.i.in000066400000000000000000000056711307543307100222030ustar00rootroot00000000000000// CovarianceModel docstrings are defined in CovarianceModelImplementation_doc.i.in %feature("docstring") OT::CovarianceModel OT_CovarianceModel_doc %feature("docstring") OT::CovarianceModel::computeAsScalar OT_CovarianceModel_computeAsScalar_doc %feature("docstring") OT::CovarianceModel::computeStandardRepresentative OT_CovarianceModel_computeStandardRepresentative_doc %feature("docstring") OT::CovarianceModel::discretize OT_CovarianceModel_discretize_doc %feature("docstring") OT::CovarianceModel::discretizeAndFactorize OT_CovarianceModel_discretizeAndFactorize_doc %feature("docstring") OT::CovarianceModel::discretizeAndFactorizeHMatrix OT_CovarianceModel_discretizeAndFactorizeHMatrix_doc %feature("docstring") OT::CovarianceModel::discretizeHMatrix OT_CovarianceModel_discretizeHMatrix_doc %feature("docstring") OT::CovarianceModel::discretizeRow OT_CovarianceModel_discretizeRow_doc %feature("docstring") OT::CovarianceModel::draw OT_CovarianceModel_draw_doc %feature("docstring") OT::CovarianceModel::getDimension OT_CovarianceModel_getDimension_doc %feature("docstring") OT::CovarianceModel::getAmplitude OT_CovarianceModel_getAmplitude_doc %feature("docstring") OT::CovarianceModel::getScale OT_CovarianceModel_getScale_doc %feature("docstring") OT::CovarianceModel::getMarginal OT_CovarianceModel_get_marginal %feature("docstring") OT::CovarianceModel::getNuggetFactor OT_CovarianceModel_get_nugget_factor_doc %feature("docstring") OT::CovarianceModel::getParameter OT_CovarianceModel_getParameter_doc %feature("docstring") OT::CovarianceModel::getParameterDescription OT_CovarianceModel_getParameterDescription_doc %feature("docstring") OT::CovarianceModel::getSpatialCorrelation OT_CovarianceModel_getSpatialCorrelation_doc %feature("docstring") OT::CovarianceModel::getSpatialDimension OT_CovarianceModel_getSpatialDimension_doc %feature("docstring") OT::CovarianceModel::isDiagonal OT_CovarianceModel_isDiagonal_doc %feature("docstring") OT::CovarianceModel::isStationary OT_CovarianceModel_isStationary_doc %feature("docstring") OT::CovarianceModel::partialGradient OT_CovarianceModel_partialGradient_doc %feature("docstring") OT::CovarianceModel::parameterGradient OT_CovarianceModel_parameterGradient_doc %feature("docstring") OT::CovarianceModel::setAmplitude OT_CovarianceModel_setAmplitude_doc %feature("docstring") OT::CovarianceModel::setScale OT_CovarianceModel_setScale_doc %feature("docstring") OT::CovarianceModel::setNuggetFactor OT_CovarianceModel_set_nugget_factor_doc %feature("docstring") OT::CovarianceModel::setParameter OT_CovarianceModel_setParameter_doc %feature("docstring") OT::CovarianceModel::setSpatialCorrelation OT_CovarianceModel_setSpatialCorrelation_doc %feature("docstring") OT::CovarianceModel::operator() OT_CovarianceModel_operator_doc %feature("docstring") OT::CovarianceModel::setActiveParameter OT_CovarianceModel_setActiveParameter_doc %feature("docstring") OT::CovarianceModel::getActiveParameter OT_CovarianceModel_getActiveParameter_doc openturns-1.9/python/src/CumulativeDistributionNetwork.i000066400000000000000000000006171307543307100240010ustar00rootroot00000000000000// SWIG file CumulativeDistributionNetwork.i %{ #include "openturns/CumulativeDistributionNetwork.hxx" %} %include CumulativeDistributionNetwork_doc.i %include openturns/CumulativeDistributionNetwork.hxx namespace OT { %extend CumulativeDistributionNetwork { CumulativeDistributionNetwork(const CumulativeDistributionNetwork & other) { return new OT::CumulativeDistributionNetwork(other); } } } openturns-1.9/python/src/CumulativeDistributionNetwork_doc.i.in000066400000000000000000000046671307543307100252440ustar00rootroot00000000000000%feature("docstring") OT::CumulativeDistributionNetwork "Composed distribution. Parameters ---------- distributions : list of :class:`~openturns.Distribution` List of :math:`n` distributions associated to the red nodes of a bipartite graph. graph : :class:`~openturns.BipartiteGraph` A bipartite graph. It must have :math:`n` red nodes, and the red node :math:`i` must have a clique of size the dimension of the :math:`i` th distribution. Notes ----- A cumulative distribution network (CDN) is a :math:`p`-dimensional distribution which cumulative distribution function is given as a product of lower dimensional cumulative distribution functions: .. math:: F(x_1, \cdots, x_p) = \prod_{i=1}^n(F_i(\vect{x}_i)) Where :math:`\vect{x}_i` is the vector :math:`(x_{j}, j\in J_i)`, :math:`J_i` being the clique of black nodes linked to the red node :math:`i`. The dimension :math:`p` is the cardinal of the union of the cliques, ie the number of black nodes in the bipartite graph. Examples -------- >>> import openturns as ot >>> graph = ot.BipartiteGraph([[0, 1], [1, 2], [2, 0]]) >>> distribution = ot.CumulativeDistributionNetwork([ot.Normal(2)]*3, graph) Compute the CDF: >>> print('%.6f' % distribution.computeCDF([1.0, 2.0, -0.5])) 0.064354" // --------------------------------------------------------------------- %feature("docstring") OT::CumulativeDistributionNetwork::getDistributionCollection "Get the distributions defining the CDN. Returns ------- distributions : list of :class:`~openturns.Distribution` List of the distributions in the CDN." // --------------------------------------------------------------------- %feature("docstring") OT::CumulativeDistributionNetwork::setDistributionCollection "Set the distributions defining the CDN. Parameters ---------- distributions : list of :class:`~openturns.Distribution` List of the distributions in the CDN." // --------------------------------------------------------------------- %feature("docstring") OT::CumulativeDistributionNetwork::getGraph "Get the bipartite graph defining the CDN. Returns ------- graph : a :class:`~openturns.BipartiteGraph` The bipartite graph defining the CDN." // --------------------------------------------------------------------- %feature("docstring") OT::CumulativeDistributionNetwork::setGraph "Set the bipartite graph defining the CDN. Parameters ---------- graph : a :class:`~openturns.BipartiteGraph` The bipartite graph defining the CDN." openturns-1.9/python/src/Curve.i000066400000000000000000000003161307543307100167710ustar00rootroot00000000000000// SWIG file Curve.i %{ #include "openturns/Curve.hxx" %} %include Curve_doc.i %include openturns/Curve.hxx namespace OT { %extend Curve { Curve(const Curve & other) { return new OT::Curve(other); } } } openturns-1.9/python/src/Curve_doc.i.in000066400000000000000000000021161307543307100202230ustar00rootroot00000000000000%feature("docstring") OT::Curve "Curve. Available constructors: Curve(*data, legend=' '*) Curve(*dataX, dataY, legend=' '*) Curve(*data, color, lineStyle, lineWidth, legend=' '*) Parameters ---------- data : 2-d sequence of float Points from which the curve is built. dataX, dataY : two 2-d sequences of float of dimension 1, or two sequences of float Points from which the curve is built. legend : str Legend of the Curve. color : str Color of the curve. If not specified, by default it is 'blue'. lineStyle : str Style of the curve. If not specified, by default it is 'solid'. lineWidth : int Width of the curve. If not specified, by default it is 1. Examples -------- >>> import openturns as ot >>> from math import pi, sin >>> # Generate the data for the curve to be drawn >>> data = [[-3 * pi + 6 * pi * i / 100, sin(-3 * pi + 6 * pi * i / 100)] for i in range(100)] >>> # Create an empty graph >>> myGraph = ot.Graph('A curve', 'x', 'sin(x)', True, '') >>> # Create the curve >>> myCurve = ot.Curve(data, 'blue', 'solid', 2, '') >>> myGraph.add(myCurve)" openturns-1.9/python/src/DatabaseEvaluation.i000066400000000000000000000004661307543307100214470ustar00rootroot00000000000000// SWIG file DatabaseEvaluation.i %{ #include "openturns/DatabaseEvaluation.hxx" %} %include DatabaseEvaluation_doc.i %include openturns/DatabaseEvaluation.hxx namespace OT { %extend DatabaseEvaluation { DatabaseEvaluation(const DatabaseEvaluation & other) { return new OT::DatabaseEvaluation(other); } } } openturns-1.9/python/src/DatabaseEvaluation_doc.i.in000066400000000000000000000043201307543307100226720ustar00rootroot00000000000000%feature("docstring") OT::DatabaseEvaluation "Data based math evaluation implementation. Available constructors: DatabaseEvaluation(*inputSample, outputSample*) DatabaseEvaluation(*inputSample, outputSample, activateCache*) Parameters ---------- inputSample : 2-d sequence of float Sample :math:`\cS^{in}` of size :math:`l` and dimension :math:`n`. outputSample : 2-d sequence of float Sample :math:`\cS^{out}` of size :math:`l` and dimension :math:`p`. activateCache : bool Flag to enable cache or not. See also -------- Function, AggregatedEvaluation, DualLinearCombinationEvaluation, LinearFunction Notes ----- It returns a :class:`~openturns.Function` that implements a nearest-neighbor function :math:`f : \Rset^n \rightarrow \Rset^p` based on the input sample :math:`S^{in}` and taking values in the outputSample :math:`S^{out}`: .. math:: \forall \vect{x} \in \Rset^n, f(\vect{x}) = y_{i*} where: .. math:: i^* = \underset{ \vect{x}_i \in S^{in} }{ \argmin_{i \in \{1, \ldots, l\}} } \|\vect{x} - \vect{x}_i \| " // --------------------------------------------------------------------- %feature("docstring") OT::DatabaseEvaluation::getInputSample "Accessor to the input sample defining the functions. Returns ------- inputSample : :class:`~openturns.Sample` The input sample defining the function." // --------------------------------------------------------------------- %feature("docstring") OT::DatabaseEvaluation::getOutputSample "Accessor to the output sample defining the functions. Returns ------- outputSample : :class:`~openturns.Sample` The output sample defining the function." // --------------------------------------------------------------------- %feature("docstring") OT::DatabaseEvaluation::setInputSample "Accessor to the input sample defining the functions. Parameters ---------- inputSample : :class:`~openturns.Sample` The input sample defining the function." // --------------------------------------------------------------------- %feature("docstring") OT::DatabaseEvaluation::setOutputSample "Accessor to the output sample defining the functions. Parameters ---------- outputSample : :class:`~openturns.Sample` The output sample defining the function." openturns-1.9/python/src/DatabaseFunction.i000066400000000000000000000004461307543307100211230ustar00rootroot00000000000000// SWIG file DatabaseFunction.i %{ #include "openturns/DatabaseFunction.hxx" %} %include DatabaseFunction_doc.i %include openturns/DatabaseFunction.hxx namespace OT { %extend DatabaseFunction { DatabaseFunction(const DatabaseFunction & other) { return new OT::DatabaseFunction(other); } } } openturns-1.9/python/src/DatabaseFunction_doc.i.in000066400000000000000000000015601307543307100223530ustar00rootroot00000000000000%feature("docstring") OT::DatabaseFunction "Pre-evaluated function. Available constructor: DatabaseFunction(*inputSample, outputSample*) DatabaseFunction(*inputSample, outputSample, enableCache*) Allows to build a function takes a value in the output sample when presented the corresponding point in the input sample . Parameters ---------- inputSample : 2-d sequence of float Values of the inputs. outputSample : 2-d sequence of float Values of the outputs. enableCache : bool, optional Whether to enable the cache, defaults to True It can take a significant amount of time for large samples. Examples -------- >>> import openturns as ot >>> inputSample = [[1.0, 1.0], [2.0, 2.0]] >>> outputSample = [[4.0], [5.0]] >>> database = ot.DatabaseFunction(inputSample, outputSample) >>> x = [1.8] * database.getInputDimension() >>> print(database(x)) [5]" openturns-1.9/python/src/Description.i000066400000000000000000000023571307543307100201770ustar00rootroot00000000000000// SWIG file Description.i %{ #include "openturns/Description.hxx" %} %include Description_doc.i %template(StringCollection) OT::Collection; %template(StringPersistentCollection) OT::PersistentCollection; %typemap(in) const OT::Description & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a Description"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const OT::Description & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %include openturns/Description.hxx namespace OT { %extend Description { Description(const Description & other) { return new OT::Description(other); } Description(PyObject * pyObj) { OT::Pointer > p_coll = OT::buildCollectionFromPySequence( pyObj ); return new OT::Description( *p_coll ); } OTCollectionOperatorsHelper(OT::Description, OT::String) } // Description } // OT openturns-1.9/python/src/Description_doc.i.in000066400000000000000000000033611307543307100214250ustar00rootroot00000000000000%feature("docstring") OT::Description "Collection of strings. Available constructors: Description(*size=0, value=' '*) Description(*sequence*) Parameters ---------- size : int, :math:`size \geq 0` Size of the collection. value : str Value set to the *size* elements. sequence : sequence of str Components of the vector. Examples -------- >>> import openturns as ot Use the first constructor: >>> ot.Description() [] >>> ot.Description(2) [,] >>> ot.Description(2, 'C') [C,C] Use the second constructor: >>> vector = ot.Description(['P1', 'P2', 'P3']) >>> vector [P1,P2,P3] Use some functionalities: >>> vector[1] = 'P4' >>> vector [P1,P4,P3] >>> vector.add('P5') >>> vector [P1,P4,P3,P5]" // --------------------------------------------------------------------- %feature("docstring") OT::Description::BuildDefault "Build a default description. Parameters ---------- size : int, :math:`size \geq 0` Size of the collection. value : str Prefixed label of the final labels. By default, it is equal to *Component*. Returns ------- description : :class:`~openturns.Description` Description of dimension *size* built as: *value0, ..., valueN with N=size-1*. Examples -------- >>> import openturns as ot >>> ot.Description.BuildDefault(3) [Component0,Component1,Component2] >>> ot.Description.BuildDefault(3, 'C') [C0,C1,C2]" // --------------------------------------------------------------------- %feature("docstring") OT::Description::isBlank "Check if the description is blank. Returns ------- isBlank : bool *True* if all the components are empty. Examples -------- >>> import openturns as ot >>> vector = ot.Description(3) >>> vector.isBlank() True >>> vector = ot.Description(['P1', 'P2', ' ']) >>> vector.isBlank() False" openturns-1.9/python/src/DesignProxy.i000066400000000000000000000003771307543307100201670ustar00rootroot00000000000000// SWIG file DesignProxy.i %{ #include "openturns/DesignProxy.hxx" %} %include DesignProxy_doc.i %include openturns/DesignProxy.hxx namespace OT { %extend DesignProxy { DesignProxy(const DesignProxy & other) { return new OT::DesignProxy(other); } } } openturns-1.9/python/src/DesignProxy_doc.i.in000066400000000000000000000052361307543307100214200ustar00rootroot00000000000000%feature("docstring") OT::DesignProxy "Design matrix cache. Helps to cache evaluations of the design matrix. Can be useful for an iterative least squares problem resolution. Parameters ---------- x : :class:`~openturns.Sample` Input sample psi : :class:`~openturns.Basis` Functional basis" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::getInputSample "Input sample accessor. Returns ------- inputSample : :class:`~openturns.Sample` Input sample." // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::getBasis "Basis accessor. Returns ------- basis : :class:`~openturns.getBasis` Basis." // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::computeDesign "Build the design matrix. Parameters ---------- indices : sequence of int Indices of the current basis in the global basis Returns ------- psiAk : :class:`~openturns.Matrix` The design matrix" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::getRowFilter "Row filter accessor. Returns ------- rowFilter : :class:`~openturns.Indices` Sub-indices in of the sample in the current indices" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::getSampleSize "Sample size accessor. Returns ------- sampleSize : int Size of sample accounting for row filter" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::setRowFilter "Row filter accessor. Parameters ---------- rowFilter : sequence of int Sub-indices in of the sample in the current indices" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::hasRowFilter "Row filter flag accessor. Returns ------- hasRowFilter : bool Whether sub-indices of the basis are set" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::setWeight "Weights accessor. Parameters ---------- weight : sequence of float Weights on each basis term" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::getWeight "Weights accessor. Returns ------- weight : :class:`~openturns.Point` Weights on each basis term" // --------------------------------------------------------------------- %feature("docstring") OT::DesignProxy::hasWeight "Weight flag accessor. Returns ------- hasWeight : bool Whether weights are set" openturns-1.9/python/src/DickeyFullerTest.i000066400000000000000000000004461307543307100211330ustar00rootroot00000000000000// SWIG file DickeyFullerTest.i %{ #include "openturns/DickeyFullerTest.hxx" %} %include DickeyFullerTest_doc.i %include openturns/DickeyFullerTest.hxx namespace OT { %extend DickeyFullerTest { DickeyFullerTest(const DickeyFullerTest & other) { return new OT::DickeyFullerTest(other); } } } openturns-1.9/python/src/DickeyFullerTest_doc.i.in000066400000000000000000000453611307543307100223720ustar00rootroot00000000000000%feature("docstring") OT::DickeyFullerTest "The Dickey-Fuller stationarity test. Notes ----- The Dickey-Fuller test checks the stationarity of a scalar time series using one time series. It assumes that the :math:`X: \Omega \times \cD \rightarrow \Rset` process with :math:`\cD \in \Rset`, discretized on the time grid :math:`(t_0, \dots, t_{N-1})` writes: .. math:: :label: DFmodel X_t = a + bt + \rho X_{t-1} + \varepsilon_{t} where :math:`\rho > 0` and where :math:`a` or :math:`b` or both :math:`(a,b)` can be assumed to be equal to 0. The Dickey-Fuller test checks whether the random perturbation at time :math:`t` vanishes with time. When :math:`a \neq 0` and :math:`b=0`, the model :eq:`DFmodel` is said to have a *drift*. When :math:`a = 0` and :math:`b \neq 0`, the model :eq:`DFmodel` is said to have a *linear trend*. In the model :eq:`DFmodel`, the only way to have stochastic non stationarity is to have :math:`\rho = 1` (if :math:`\rho > 1`, then the process diverges with time which is readily seen in the data). In the general case, the Dickey-Fuller test is a unit root test to detect whether :math:`\rho=1` against :math:`\rho < 1`: The test statistics and its limit distribution depend on the a priori knowledge we have on :math:`a` and :math:`b`. In case of absence of a priori knowledge on the structure of the model, several authors have proposed a global strategy to cover all the subcases of the model :eq:`DFmodel`, depending on the possible values on :math:`a` and :math:`b`. The strategy implemented in OpenTURNS, is recommended by Enders (*Applied Econometric Times Series*, Enders, W., second edition, John Wiley \& sons editions, 2004.). We note :math:`(X_1, \hdots, X_n)` the data, by :math:`W(r)` the Wiener process, and :math:`W^{a}(r) = W(r) - \int_{0}^{1} W(r)\di{r}`, :math:`W^{b}(r) = W^{a}(r) - 12 \left(r - \frac{1}{2} \right) \int_{0}^{1} \left(s - \frac{1}{2} \right) W(s)\di{s}`. **1.** We assume the model :eq:`Model1`: .. math:: :label: Model1 \boldsymbol{X_t = a + bt + \rho X_{t-1} + \varepsilon_{t}} The coefficients :math:`(a,b,\rho)` are estimated by :math:`(\Hat{a}_n, \Hat{b}_n, \Hat{\rho}_n)` using ordinary least-squares fitting, which leads to: .. math:: :label: Model1Estim \underbrace{\left( \begin{array}{lll} \displaystyle n-1 &\sum_{i=1}^n t_{i} &\sum_{i=2}^n y_{i-1}\\ \displaystyle \sum_{i=1}^n t_{i} &\sum_{i=1}^n t_{i}^2 &\sum_{i=2}^n t_{i} y_{i-1}\\ \displaystyle \sum_{i=2}^n y_{i-1}& \sum_{i=2}^n t_{i}y_{i-1} &\sum_{i=2}^n y_{i-1}^2 \end{array} \right)}_{\mat{M}} \left( \begin{array}{c} \hat{a}_n\\ \hat{b}_n\\ \hat{\rho}_n \end{array} \right)= \left( \begin{array}{l} \displaystyle \sum_{i=1}^n y_{i} \\ \displaystyle \sum_{i=1}^n t_{i} y_{i}\\ \displaystyle \sum_{i=2}^n y_{i-1} y_{i} \end{array} \right) We first test: .. math:: :label: TestModel1 \left\{ \begin{array}{lr} \cH_0: & \rho = 1 \\ \cH_1: & \rho < 1 \end{array} \right. thanks to the Student statistics: .. math:: t_{\rho=1} = \frac{\rho_n-1}{\hat{\sigma}_{\rho_n}} where :math:`\sigma_{\rho_n}` is the least square estimate of the standard deviation of :math:`\Hat{\rho}_n`, given by: .. math:: \sigma_{\rho_n}=\mat{M}^{-1}_{33}\sqrt{\frac{1}{n-1}\sum_{i=2}^n\left(y_{i}-(\hat{a}_n+\hat{b}_nt_i+\hat{\rho}_ny_{i-1})\right)^2} which converges in distribution to the Dickey-Fuller distribution associated to the model with drift and trend: .. math:: t_{\rho = 1} \stackrel{\mathcal{L}}{\longrightarrow} \frac{\int_{0}^{1}W^{b}(r) \di{W(r)}}{\int_{1}^{0} W^{b}(r)^2 \di{r}} The null hypothesis :math:`\cH_0` from :eq:`TestModel1` is accepted when :math:`t_{\rho=1} > C_{\alpha}` where :math:`C_{\alpha}` is the test threshold of level :math:`\alpha`. The quantiles of the Dickey-Fuller statistics for the model with drift and linear trend are: .. math:: \left\{ \begin{array}{ll} \alpha = 0.01, & C_{\alpha} = -3.96 \\ \alpha = 0.05, & C_{\alpha} = -3.41 \\ \alpha = 0.10, & C_{\alpha} = -3.13 \end{array} \right. **1.1. Case 1:** The null hypothesis :math:`\cH_0` from :eq:`TestModel1` is rejected We test whether :math:`b=0`: .. math:: :label: TestSousModele1_1 \left\{ \begin{array}{lr} \cH_0: & b = 0 \\ \cH_1: & b \neq 0 \end{array} \right. where the statistics :math:`t_n = \frac{|\hat{b}_n|}{\sigma_{b_n}}` converges in distribution to the Student distribution :class:`~openturns.Student` with :math:`\nu=n-4`, where :math:`\sigma_{b_n}` is the least square estimate of the standard deviation of :math:`\Hat{b}_n`, given by: .. math:: \sigma_{b_n}=\mat{M}^{-1}_{22}\sqrt{\frac{1}{n-1}\sum_{i=2}^n\left(y_{i}-(\hat{a}_n+\hat{b}_nt_i+\hat{\rho}_ny_{i-1})\right)^2} The decision to be taken is: - If :math:`\cH_0` from :eq:`TestSousModele1_1` is rejected, then the model 1 :eq:`Model1` is confirmed. And the test :eq:`TestModel1` proved that the unit root is rejected : :math:`\rho < 1`. We then conclude that the final model is : :math:`\boldsymbol{X_t = a + bt + \rho X_{t-1} + \varepsilon_{t}}` whith :math:`\boldsymbol{\rho < 1}` which is a **trend stationary model**. - If :math:`\cH_0` from :eq:`TestSousModele1_1` is accepted, then the model 1 :eq:`Model1` is not confirmed, since the trend presence is rejected and the test :eq:`TestModel1` is not conclusive (since based on a wrong model). **We then have to test the second model** :eq:`Model2`. **1.2. Case 2:** The null hypothesis :math:`\cH_0` from :eq:`TestModel1` is accepted We test whether :math:`(\rho, b) = (1,0)`: .. math:: :label: TestSousModele1_2 \left\{ \begin{array}{lr} \cH_0: & (\rho, b) = (1,0) \\ \cH_1: & (\rho, b) \neq (1,0) \end{array} \right. with the Fisher statistics: .. math:: \displaystyle \hat{F}_1 = \frac{(S_{1,0} - S_{1,b})/2}{S_{1,b}/(n-3)} where :math:`S_{1,0}=\sum_{i=2}^n\left(y_i-(\hat{a}_n+y_{i-1})\right)^2` is the sum of the square errors of the model 1 :eq:`Model1` assuming :math:`\cH_0` from :eq:`TestSousModele1_2` and :math:`S_{1,b}=\sum_{i=2}^n\left(y_i-(\hat{a}_n+\hat{b}_nt_i+\hat{\rho}_ny_{i-1})\right)^2` is the same sum when we make no assumption on :math:`\rho` and :math:`b`. The statistics :math:`\hat{F}_1` converges in distribution to the Fisher-Snedecor distribution :class:`~openturns.FisherSnedecor` with :math:`d_1=2, d_2=n-3`. The null hypothesis :math:`\cH_0` from :eq:`TestModel1` is accepted when :math:`\hat{F}_1 < \Phi_{\alpha}` where :math:`\Phi_{\alpha}` is the test threshold of level :math:`\alpha`. The decision to be taken is: - If :math:`\cH_0` from :eq:`TestSousModele1_2` is rejected, then the model 1 :eq:`Model1` is confirmed since the presence of linear trend is confirmed. And the test :eq:`TestModel1` proved that the unit root is accepted: :math:`\rho = 1`. We then conclude that the model is: :math:`\boldsymbol{X_t = a + bt + X_{t-1} + \varepsilon_{t}}` which is a **non stationary model**. - If :math:`\cH_0` from :eq:`TestSousModele1_2` is accepted, then the model 1 :eq:`Model1` is not confirmed, since the presence of the linear trend is rejected and the test :eq:`TestModel1` is not conclusive (since based on a wrong model). **We then have to test the second model** :eq:`Model2`. **2.** We assume the model :eq:`Model2`: .. math:: :label: Model2 \boldsymbol{X_t = a + \rho X_{t-1} + \varepsilon_{t}} The coefficients :math:`(a,\rho)` are estimated as follows: .. math:: :label: Model2Estim \underbrace{\left(\begin{array}{lll} \displaystyle n-1 &\sum_{i=2}^n y_{i-1}\\ \displaystyle \sum_{i=2}^n y_{i-1} &\sum_{i=2}^n y_{i-1}^2 \end{array} \right)}_{\mat{N}} \left( \begin{array}{c} \hat{a}_n\\ \hat{\rho}_n \end{array} \right)= \left( \begin{array}{l} \displaystyle \sum_{i=1}^n y_{i} \\ \displaystyle \sum_{i=2}^n y_{i-1} y_{i} \end{array} \right) We first test: .. math:: :label: TestModel2 \left\{ \begin{array}{lr} \mathcal{H}_0: & \rho = 1 \\ \mathcal{H}_1: & \rho < 1 \end{array} \right. thanks to the Student statistics: .. math:: t_{\rho=1} = \frac{\rho_n-1}{\sigma_{\rho_n}} where :math:`\sigma_{\rho_n}` is the least square estimate of the standard deviation of :math:`\Hat{\rho}_n`, given by: .. math:: \sigma_{\rho_n}=\mat{N}^{-1}_{22}\sqrt{\frac{1}{n-1}\sum_{i=2}^n\left(y_{i}-(\hat{a}_n+\hat{\rho}_ny_{i-1})\right)^2} which converges in distribution to the Dickey-Fuller distribution associated to the model with drift and no linear trend: .. math:: t_{\rho = 1} \stackrel{\mathcal{L}}{\longrightarrow} \frac{\int_{0}^{1}W^{a}(r) \di{W(r)}}{\int_{1}^{0} W^{a}(r)^2 \di{r}} The null hypothesis :math:`\cH_0` from :eq:`TestModel2` is accepted when :math:`t_{\rho=1} > C_{\alpha}` where :math:`C_{\alpha}` is the test threshold of level :math:`\alpha`. The quantiles of the Dickey-Fuller statistics for the model with drift are: .. math:: \left\{ \begin{array}{ll} \alpha = 0.01, & C_{\alpha} = -3.43 \\ \alpha = 0.05, & C_{\alpha} = -2.86 \\ \alpha = 0.10, & C_{\alpha} = -2.57 \end{array} \right. **2.1. Case 1:** The null hypothesis :math:`\cH_0` from :eq:`TestModel2` is rejected We test whether :math:`a=0`: .. math:: :label: TestSousModele2_1 \left\{ \begin{array}{lr} \mathcal{H}_0: & a = 0 \\ \mathcal{H}_1: & a \neq 0 \end{array} \right. where the statistics :math:`t_n = \frac{|\hat{a}_n|}{\sigma_{a_n}}` converges in distribution to the Student distribution :class:`~openturns.Student` with :math:`\nu=n-3`, where :math:`\sigma_{a_n}` is the least square estimate of the standard deviation of :math:`\Hat{a}_n`, given by: .. math:: \sigma_{a_n}=\mat{N}^{-1}_{11}\sqrt{\frac{1}{n-1}\sum_{i=2}^n\left(y_{i}-(\hat{a}_n+\hat{\rho}_ny_{i-1})\right)^2} The decision to be taken is: - If :math:`\cH_0` from :eq:`TestSousModele2_1` is rejected, then the model 2 :eq:`Model2` is confirmed. And the test :eq:`TestModel2` proved that the unit root is rejected: :math:`\rho < 1`. We then conclude that the final model is: :math:`\boldsymbol{X_t = a + \rho X_{t-1} + \varepsilon_{t}}` whith :math:`\boldsymbol{\rho < 1}` which is a **stationary model**. - If :math:`\cH_0` from :eq:`TestSousModele2_1` is accepted, then the model 2 :eq:`Model2` is not confirmed, since the drift presence is rejected and the test :eq:`TestModel1` is not conclusive (since based on a wrong model). **We then have to test the third model** :eq:`Model3`. **2.2. Case 2:** The null hypothesis :math:`\cH_0` from :eq:`TestModel2` is accepted We test whether :math:`(\rho, a) = (1,0)`: .. math:: :label: TestSousModele2_2 \left\{ \begin{array}{lr} \mathcal{H}_0: & (\rho, a) = (1,0) \\ \mathcal{H}_1: & (\rho, a) \neq (1,0) \end{array} \right. with a Fisher test. The statistics is: .. math:: \displaystyle \hat{F}_2 = \frac{(SCR_{2,c} - SCR_{2})/2}{SCR_{2}/(n-2)} where :math:`SCR_{2,c}` is the sum of the square errors of the model 2 :eq:`Model2` assuming :math:`\cH_0` from :eq:`TestSousModele2_2` and :math:`SCR_{2}` is the same sum when we make no assumption on :math:`\rho` and :math:`a`. The statistics :math:`\hat{F}_2` converges in distribution to the Fisher-Snedecor distribution :class:`~openturns.FisherSnedecor` with :math:`d_1=2, d_2=n-2`. The null hypothesis :math:`\cH_0` from :eq:`TestModel1` is accepted if when :math:`\hat{F}_2 < \Phi_{\alpha}` where :math:`\Phi_{\alpha}` is the test threshold of level :math:`\alpha`. The decision to be taken is: - If :math:`\cH_0` from :eq:`TestSousModele2_2` is rejected, then the model 2 :eq:`Model2` is confirmed since the presence of the drift is confirmed. And the test :eq:`TestModel2` proved that the unit root is accepted: :math:`\rho =1`. We then conclude that the model is: :math:`\boldsymbol{X_t = a + X_{t-1} + \varepsilon_{t}}` which is a **non stationary model**. - If :math:`\cH_0` from :eq:`TestSousModele2_2` is accepted, then the model 2 :eq:`Model2` is not confirmed, since the drift presence is rejected and the test :eq:`TestModel2` is not conclusive (since based on a wrong model). **We then have to test the third model** :eq:`Model3`. **3.** We assume the model :eq:`Model3`: .. math:: :label: Model3 \boldsymbol{X_t = \rho X_{t-1} + \varepsilon_{t}} The coefficients :math:`\rho` are estimated as follows: .. math:: :label: Model3Estim \hat{\rho}_n=\frac{\sum_{i=2}^ny_{i-1}y_i}{\sum_{i=2}^ny_{i-1}^2} We first test: .. math:: :label: TestModel3 \left\{ \begin{array}{lr} \mathcal{H}_0: & \rho = 1 \\ \mathcal{H}_1: & \rho < 1 \end{array} \right. thanks to the Student statistics: .. math:: t_{\rho=1} = \frac{\hat{\rho}_n-1}{\sigma_{\rho_n}} where :math:`\sigma_{\rho_n}` is the least square estimate of the standard deviation of :math:`\Hat{\rho}_n`, given by: .. math:: \sigma_{\rho_n}=\sqrt{\frac{1}{n-1}\sum_{i=2}^n\left(y_{i}-\hat{\rho}_ny_{i-1}\right)^2}/\sqrt{\sum_{i=2}^ny_{i-1}^2} which converges in distribution to the Dickey-Fuller distribution associated to the random walk model: .. math:: t_{\rho = 1} \stackrel{\mathcal{L}}{\longrightarrow} \frac{\int_{0}^{1}W(r) \di{W(r)}}{\int_{1}^{0} W(r)^2 \di{r}} The null hypothesis :math:`\cH_0` from :eq:`TestModel3` is accepted when :math:`t_{\rho=1} > C_{\alpha}` where :math:`C_{\alpha}` is the test threshold of level :math:`\alpha`. The quantiles of the Dickey-Fuller statistics for the random walk model are: .. math:: \left\{ \begin{array}{ll} \alpha = 0.01, & C_{\alpha} = -2.57 \\ \alpha = 0.05, & C_{\alpha} = -1.94 \\ \alpha = 0.10, & C_{\alpha} = -1.62 \end{array} \right. The decision to be taken is: - If :math:`\cH_0` from :eq:`TestModel3` is rejected, we then conclude that the model is : :math:`\boldsymbol{X_t = \rho X_{t-1} + \varepsilon_{t}}` where :math:`\rho < 1` which is a **stationary model**. - If :math:`\cH_0` from :eq:`TestModel3` is accepted, we then conclude that the model is: :math:`\boldsymbol{X_t = X_{t-1} + \varepsilon_{t}}` which is a **non stationary model**. Examples -------- Create an ARMA process and generate a time series: >>> import openturns as ot >>> arcoefficients = ot.ARMACoefficients([0.3]) >>> macoefficients = ot.ARMACoefficients(0) >>> timeGrid = ot.RegularGrid(0.0, 0.1, 10) >>> whiteNoise = ot.WhiteNoise(ot.Normal(), timeGrid) >>> myARMA = ot.ARMA(arcoefficients, macoefficients, whiteNoise) >>> realization = ot.TimeSeries(myARMA.getRealization()) >>> test = ot.DickeyFullerTest(realization) Test the stationarity of the data without any asumption on the model: >>> globalRes = test.runStrategy() Test the stationarity knowing you have a drift and linear trend model: >>> res1 = test.testUnitRootInDriftAndLinearTrendModel(0.95) Test the stationarity knowing you have a drift model: >>> res2 = test.testUnitRootInDriftModel(0.95) Test the stationarity knowing you have an AR1 model: >>> res3 = test.testUnitRootInAR1Model(0.95) " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testUnitRootInDriftAndLinearTrendModel "Test for unit root in model with drift and trend. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestModel1`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testUnitRootInDriftModel "Test for unit root in model with drift. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestModel2`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testUnitRootInAR1Model "Test for unit root in AR1 model. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestModel3`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testUnitRootAndNoLinearTrendInDriftAndLinearTrendModel "Test for linear trend in model with unit root. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95` Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestSousModele1_2`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testNoUnitRootAndNoLinearTrendInDriftAndLinearTrendModel "Test for trend in model without unit root. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestSousModele1_1`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testUnitRootAndNoDriftInDriftModel "Test for null drift in model with unit root. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestSousModele2_2`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::testNoUnitRootAndNoDriftInDriftModel "Test for null drift in model without unit root. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the test detailed in :eq:`TestSousModele2_1`. " // --------------------------------------------------------------------- %feature("docstring") OT::DickeyFullerTest::runStrategy "Test the stationarity without any assumption on the model. Parameters ---------- alpha : float, :math:`0 < \alpha < 1` The first order error of the test. By default, :math:`\alpha=0.95`. Returns ------- testResult : :class:`~openturns.TestResult` Results container of the tests. The strategy if the one described above. " openturns-1.9/python/src/Dirac.i000066400000000000000000000003161307543307100167270ustar00rootroot00000000000000// SWIG file Dirac.i %{ #include "openturns/Dirac.hxx" %} %include Dirac_doc.i %include openturns/Dirac.hxx namespace OT { %extend Dirac { Dirac(const Dirac & other) { return new OT::Dirac(other); } } } openturns-1.9/python/src/DiracCovarianceModel.i000066400000000000000000000005051307543307100217030ustar00rootroot00000000000000// SWIG file DiracCovarianceModel.i %{ #include "openturns/DiracCovarianceModel.hxx" %} %include DiracCovarianceModel_doc.i %include openturns/DiracCovarianceModel.hxx namespace OT{ %extend DiracCovarianceModel { DiracCovarianceModel(const DiracCovarianceModel & other) { return new OT::DiracCovarianceModel(other); } } } openturns-1.9/python/src/DiracCovarianceModel_doc.i.in000066400000000000000000000046411307543307100231420ustar00rootroot00000000000000%feature("docstring") OT::DiracCovarianceModel "Dirac covariance function. Available constructors: DiracCovarianceModel(*spatialDim=1*) DiracCovarianceModel(*spatialDim, amplitude*) DiracCovarianceModel(*spatialDim, amplitude, spatialCorrelation*) DiracCovarianceModel(*spatialDim, spatialCovariance*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. By default, equal to 1. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma}\in \Rset^d`. Its size is the dimension :math:`d` of the process. By default, equal to :math:`[1]`. spatialCorrelation : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R} \in \cS^+_d([-1, 1])`. By default, Identity matrix. spatialCovariance : :class:`~openturns.CovarianceMatrix` Covariance matrix :math:`\mat{C}^{stat} \in \cS_d^+(\Rset)`. By default, Identity matrix. Notes ----- The *Dirac* covariance function is a stationary covariance function whith dimension :math:`d \geq 1`. We consider the stochastic process :math:`X: \Omega \times\cD \mapsto \Rset^d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *Dirac* covariance function is defined by: .. math:: C(\vect{s}, \vect{t}) = 1_{\{\vect{s}=\vect{t}\}} \, \mbox{Diag}(\vect{\sigma}) \, \mat{R}\, \mbox{Diag}(\vect{\sigma}), \quad \forall (\vect{s}, \vect{t}) \in \cD where :math:`\mat{R} \in \cS_d^+([-1,1])` is the spatial correlation matrix. We can define the spatial covariance matrix :math:`\mat{C}^{stat}` as: .. math:: \mat{C}^{stat} = \mbox{Diag}(\vect{\sigma}) \, mat{R}\, \mbox{Diag}(\vect{\sigma}) The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = 1_{\{\vect{s}=\vect{t}\}} See Also -------- CovarianceModel Examples -------- Create a standard Dirac covariance function: >>> import openturns as ot >>> covModel = ot.DiracCovarianceModel(2) >>> t = [0.1, 0.3] >>> s = [0.1, 0.3] >>> print(covModel(s, t)) [[ 1 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0 ]] Create a Dirac covariance function specifying the amplitude vector: >>> covModel2 = ot.DiracCovarianceModel(2, [1.5, 2.5]) Create a Dirac covariance function specifying the amplitude vector and the correlation matrix: >>> corrMat = ot.CorrelationMatrix(2) >>> corrMat[1,0] = 0.1 >>> covModel3 = ot.DiracCovarianceModel(2, [1.5, 2.5], corrMat)" openturns-1.9/python/src/DiracFactory.i000066400000000000000000000004061307543307100202570ustar00rootroot00000000000000// SWIG file DiracFactory.i %{ #include "openturns/DiracFactory.hxx" %} %include DiracFactory_doc.i %include openturns/DiracFactory.hxx namespace OT { %extend DiracFactory { DiracFactory(const DiracFactory & other) { return new OT::DiracFactory(other); } } } openturns-1.9/python/src/DiracFactory_doc.i.in000066400000000000000000000002151307543307100215070ustar00rootroot00000000000000%feature("docstring") OT::DiracFactory "Dirac factory. Available constructor: DiracFactory() See also -------- DistributionFactory" openturns-1.9/python/src/Dirac_doc.i.in000066400000000000000000000024771307543307100201730ustar00rootroot00000000000000%feature("docstring") OT::Dirac "Dirac distribution. Available constructors: Dirac(*x=0.*) Parameters ---------- x : float, sequence of float, :math:`\vect{x} \in \Rset^n` The deterministic value. Notes ----- Its probability density function is defined as: .. math:: \Prob{\vect{X} = \vect{x}} = 1 with :math:`\vect{x} \in \Rset^n`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{\vect{X}} & = & \vect{x} \\ \Var{X_i} & = & 0, \quad i = 1, \ldots, n \end{eqnarray*} Notes ----- This is intended to be used for modelling deterministic parameters. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Dirac([1.0, 2.0, 3.0]) Draw a sample: >>> sample = distribution.getSample(2) >>> sample[0] == sample[1] True" // --------------------------------------------------------------------- %feature("docstring") OT::Dirac::getPoint "Accessor to the distribution's unique value. Returns ------- x : float, :class:`~openturns.Point` The deterministic value." // --------------------------------------------------------------------- %feature("docstring") OT::Dirac::setPoint "Accessor to the distribution's unique value. Parameters ---------- x : float, sequence of float, :math:`\vect{x} \in \Rset^n` The deterministic value." openturns-1.9/python/src/DirectionalSampling.i000066400000000000000000000004751307543307100216430ustar00rootroot00000000000000// SWIG file DirectionalSampling.i %{ #include "openturns/DirectionalSampling.hxx" %} %include DirectionalSampling_doc.i %include openturns/DirectionalSampling.hxx namespace OT{ %extend DirectionalSampling { DirectionalSampling(const DirectionalSampling & other) { return new OT::DirectionalSampling(other); } } } openturns-1.9/python/src/DirectionalSampling_doc.i.in000066400000000000000000000120331307543307100230660ustar00rootroot00000000000000%feature("docstring") OT::DirectionalSampling "Directional simulation. Available constructors: DirectionalSampling(*event=ot.Event()*) DirectionalSampling(*event, rootStrategy, samplingStrategy*) Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. rootStrategy : :class:`~openturns.RootStrategy` Strategy adopted to evaluate the intersections of each direction with the limit state function and take into account the contribution of the direction to the event probability. By default, *rootStrategy = ot.RootStrategy(ot.SafeAndSlow())*. samplingStrategy : :class:`~openturns.SamplingStrategy` Strategy adopted to sample directions. By default, *samplingStrategy=ot.SamplingStrategy(ot.RandomDirection())*. Notes ----- Using the probability distribution of a random vector :math:`\vect{X}`, we seek to evaluate the following probability: .. math:: P_f = \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\underline{d}) \leq 0 \}}f_{\uX}(\ux)\di{\ux} = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}`. :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise. The directional simulation method is an accelerated sampling method. It implies a preliminary iso-probabilistic transformation, as for :class:`~openturns.FORM` and :class:`~openturns.SORM` methods; however, it remains based on sampling and is thus not an approximation method. In the transformed space, the (transformed) uncertain variables :math:`\vect{U}` are independent standard gaussian variables (mean equal to zero and standard deviation equal to 1). Roughly speaking, each simulation of the directional simulation algorithm is made of three steps. For the :math:`i^\textrm{th}` iteration, these steps are the following: - Let :math:`\cS = \big\{ \vect{u} \big| ||\vect{u}|| = 1 \big\}`. A point :math:`P_i` is drawn randomly on :math:`\cS` according to an uniform distribution. - In the direction starting from the origin and passing through :math:`P_i`, solutions of the equation :math:`g(\vect{X},\vect{d}) = 0` (i.e. limits of :math:`\cD_f`) are searched. The set of values of :math:`\vect{u}` that belong to :math:`\cD_f` is deduced for these solutions: it is a subset :math:`I_i \subset \Rset`. - Then, one calculates the probability :math:`q_i = \Prob{ ||\vect{U}|| \in I_i }`. By property of independent standard variable, :math:`||\vect{U}||^2` is a random variable distributed according to a chi-square distribution, which makes the computation effortless. Finally, the estimate of the probability :math:`P_f` after :math:`N` simulations is the following: .. math:: \widehat{P}_{f,DS} = \frac{1}{N} \sum_{i=1}^N q_i Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> # We create a 'usual' RandomVector from the Distribution >>> vect = ot.RandomVector(myDistribution) >>> # We create a composite random vector >>> output = ot.RandomVector(myFunction, vect) >>> # We create an Event from this RandomVector >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create a DirectionalSampling algorithm >>> myAlgo = ot.DirectionalSampling(myEvent, ot.MediumSafe(), ot.OrthogonalDirection()) >>> myAlgo.setMaximumOuterSampling(150) >>> myAlgo.setBlockSize(4) >>> myAlgo.setMaximumCoefficientOfVariation(0.1) >>> # Perform the simulation >>> myAlgo.run() >>> print('Probability estimate=%.6f' % myAlgo.getResult().getProbabilityEstimate()) Probability estimate=0.169716" // --------------------------------------------------------------------- %feature("docstring") OT::DirectionalSampling::getRootStrategy "Get the root strategy. Returns ------- strategy : :class:`~openturns.RootStrategy` Root strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::DirectionalSampling::setRootStrategy "Set the root strategy. Parameters ---------- strategy : :class:`~openturns.RootStrategy` Root strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::DirectionalSampling::getSamplingStrategy "Get the direction sampling strategy. Returns ------- strategy : :class:`~openturns.SamplingStrategy` Direction sampling strategy adopted." // --------------------------------------------------------------------- %feature("docstring") OT::DirectionalSampling::setSamplingStrategy "Set the direction sampling strategy. Parameters ---------- strategy : :class:`~openturns.SamplingStrategy` Direction sampling strategy adopted." openturns-1.9/python/src/Dirichlet.i000066400000000000000000000003561307543307100176200ustar00rootroot00000000000000// SWIG file Dirichlet.i %{ #include "openturns/Dirichlet.hxx" %} %include Dirichlet_doc.i %include openturns/Dirichlet.hxx namespace OT { %extend Dirichlet { Dirichlet(const Dirichlet & other) { return new OT::Dirichlet(other); } } } openturns-1.9/python/src/DirichletFactory.i000066400000000000000000000004461307543307100211500ustar00rootroot00000000000000// SWIG file DirichletFactory.i %{ #include "openturns/DirichletFactory.hxx" %} %include DirichletFactory_doc.i %include openturns/DirichletFactory.hxx namespace OT { %extend DirichletFactory { DirichletFactory(const DirichletFactory & other) { return new OT::DirichletFactory(other); } } } openturns-1.9/python/src/DirichletFactory_doc.i.in000066400000000000000000000004301307543307100223730ustar00rootroot00000000000000%feature("docstring") OT::DirichletFactory "Dirichlet factory. Available constructor: DirichletFactory() Notes ----- The estimation is done by maximizing the likelihood of the sample, using the algorithm described in [Minka2012]_. See also -------- DistributionFactory" openturns-1.9/python/src/Dirichlet_doc.i.in000066400000000000000000000044251307543307100210530ustar00rootroot00000000000000%feature("docstring") OT::Dirichlet "Dirichlet distribution. Available constructors: Dirichlet(*theta=[1.0, 1.0]*) Parameters ---------- theta : sequence of float, :math:`\theta_i > 0, i = 1, \ldots, n+1` theta must be at least bidimensional. Notes ----- Its probability density function is defined as: .. math:: f_{\vect{X}}(\vect{x}) = \frac{\Gamma(|\vect{\theta}|_1)} {\prod_{j=1}^{n + 1} \Gamma(\theta_j)} \left[1 - \sum_{j=1}^{n} x_j \right]^{\theta_{n+1} - 1} \prod_{j=1}^n x_j^{\theta_j - 1}, \quad \vect{x} \in \Delta(\vect{X}) with :math:`\Delta(\vect{X}) = \{ \vect{x} \in \Rset^n : x_i \geq 0, \sum_{i=1}^n x_i \leq 1, i = 1, \ldots, n \}` and :math:`\theta_i > 0, i = 1, \ldots, n+1` and where :math:`|\vect{\theta}|_1 = \sum_{i=1}^{n+1} \theta_i`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{\vect{X}} & = & \Tr{(\theta_i/|\vect{\theta}|_1, \quad i = 1, \ldots, n)} \\ \Cov{\vect{X}} & = & \left[- \frac{\theta_i \theta_j} {|\vect{\theta}|_1^2 (|\vect{\theta}|_1+1)}, \quad i,j = 1, \ldots, n \right] \end{eqnarray*} .. warning:: The present implementation does not model the :math:`n+1`-th component of the Dirichlet distribution as it is fixed: .. math:: X_{n + 1} = 1 - \sum_{i=1}^{n} X_i See Also -------- Multinomial Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Dirichlet([1.0, 1.0, 1.0]) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Dirichlet::getTheta "Accessor to the distribution's vector parameter. Returns ------- theta : float, :class:`~openturns.Point`" // --------------------------------------------------------------------- %feature("docstring") OT::Dirichlet::setTheta "Accessor to the distribution's vector parameter. Parameters ---------- theta : float, sequence of float, :math:`\theta_i > 0, i = 1, \ldots, n+1`" openturns-1.9/python/src/DiscreteDistribution.i000066400000000000000000000004441307543307100220510ustar00rootroot00000000000000// SWIG file DiscreteDistribution.i %{ #include "openturns/DiscreteDistribution.hxx" %} %include openturns/DiscreteDistribution.hxx // namespace OT { %extend DiscreteDistribution { DiscreteDistribution(const DiscreteDistribution & other) { return new OT::DiscreteDistribution(other); } } } openturns-1.9/python/src/DistFunc.i000066400000000000000000000001721307543307100174240ustar00rootroot00000000000000// SWIG file DistFunc.i %{ #include "openturns/DistFunc.hxx" %} %include DistFunc_doc.i %include openturns/DistFunc.hxxopenturns-1.9/python/src/DistFunc_doc.i.in000066400000000000000000000072201307543307100206570ustar00rootroot00000000000000%feature("docstring") OT::DistFunc::pNormal "CDF of an unit-variance centered Normal distribution. Parameters ---------- x : float Location tail : bool, default=False Tail flag Returns ------- cdf : float Examples -------- >>> import openturns as ot >>> cdf = ot.DistFunc.pNormal(0.9)" // --------------------------------------------------------------------- %feature("docstring") OT::DistFunc::qNormal "Quantile of an unit-variance centered Normal distribution. Parameters ---------- prob : float Returns ------- q : float Examples -------- >>> import openturns as ot >>> q = ot.DistFunc.qNormal(0.95)" // --------------------------------------------------------------------- %feature("docstring") OT::DistFunc::rNormal "Realization of an unit-variance centered Normal distribution. Returns ------- realization : float Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> r = ot.DistFunc.rNormal()" // --------------------------------------------------------------------- %feature("docstring") OT::DistFunc::kFactorPooled "Exact margin factor for bilateral covering interval of pooled Normal populations. Parameters ---------- n : int The size of the population m : int The size of the pool p : float :math:`0>> import openturns as ot >>> k = ot.DistFunc.kFactorPooled(5, 3, 0.95, 0.9)" // --------------------------------------------------------------------- %feature("docstring") OT::DistFunc::kFactor "Exact margin factor for bilateral covering interval of a Normal population. Parameters ---------- n : int The size of the population p : float :math:`0>> import openturns as ot >>> k = ot.DistFunc.kFactor(5, 0.95, 0.9)" openturns-1.9/python/src/Distribution.i000066400000000000000000000111171307543307100203650ustar00rootroot00000000000000// SWIG file Distribution.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & marginalProb ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & marginalProb %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Interval OT::DistributionImplementation::computeMinimumVolumeInterval(const OT::Scalar prob, OT::Point & marginalProb) const; OT::Interval OT::DistributionImplementation::computeBilateralConfidenceInterval(const OT::Scalar prob, OT::Point & marginalProb) const; OT::Interval OT::DistributionImplementation::computeUnilateralConfidenceInterval(const OT::Scalar prob, const OT::Bool tail, OT::Point & marginalProb) const; %typemap(in, numinputs=0) OT::Point & threshold ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & threshold %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::LevelSet OT::DistributionImplementation::computeMinimumVolumeLevelSet(const OT::Scalar prob, OT::Point & threshold) const; %{ #include "openturns/Distribution.hxx" #include "openturns/PythonDistribution.hxx" %} %include Distribution_doc.i %pythoncode %{ from openturns.typ import Interval class PythonDistribution(object): """ Allow to override Distribution from Python. Parameters ---------- dim : positive int the distribution dimension """ def __init__(self, dim=0): self.__dim = dim def __str__(self): return 'PythonDistribution -> #%d' % self.__dim def __repr__(self): return self.__str__() def getDimension(self): return self.__dim def computeCDF(self, X): raise RuntimeError('You must define a method computeCDF(x) -> cdf, where cdf is a float') class SciPyDistribution(PythonDistribution): """ Allow to override Distribution from a scipy distribution. Parameters ---------- dist : a scipy.stats distribution the distribution to wrap """ def __init__(self, dist): super(SciPyDistribution, self).__init__(1) if dist.__class__.__name__ != 'rv_frozen': raise TypeError('Argument is not a scipy distribution') self._dist = dist # compute range lb = dist.ppf(0.) ub = dist.ppf(1.) flb = lb != float('-inf') fub = ub != float('+inf') self.__range = Interval([lb], [ub]) self.__range.setFiniteLowerBound([int(flb)]) self.__range.setFiniteUpperBound([int(fub)]) def getRange(self): return self.__range def getRealization(self): rvs = self._dist.rvs() return [rvs] def getSample(self, size): rvs = self._dist.rvs(size) return rvs.reshape(size, 1) def computePDF(self, X): pdf = self._dist.pdf(X[0]) return pdf def computeCDF(self, X): cdf = self._dist.cdf(X[0]) return cdf def getMean(self): mean = float(self._dist.stats('m')) return [mean] def getStandardDeviation(self): var = float(self._dist.stats('v')) std = var ** 0.5 return [std] def getSkewness(self): skewness = float(self._dist.stats('s')) return [skewness] def getKurtosis(self): kurtosis = float(self._dist.stats('k')) return [kurtosis] def getMoment(self, n): moment = self._dist.moment(n) return [moment] %} %include UncertaintyModelCopulaCollection.i OTTypedInterfaceObjectHelper(Distribution) OTTypedCollectionInterfaceObjectHelper(Distribution) %ignore OT::Distribution::pow; %ignore OT::Distribution::setWeight; %ignore OT::Distribution::getWeight; %include openturns/Distribution.hxx namespace OT { %extend Distribution { Distribution(const Distribution & other) { return new OT::Distribution(other); } Distribution(PyObject * pyObj) { return new OT::Distribution( new OT::PythonDistribution( pyObj ) ); } Distribution __add__ (Scalar s) { return *self + s; } Distribution __radd__ (Scalar s) { return *self + s; } Distribution __sub__(Scalar s) { return *self - s; } Distribution __rsub__(Scalar s) { return (*self * (-1.0)) + s; } Distribution __mul__(Scalar s) { return (*self) * s; } Distribution __rmul__(Scalar s) { return (*self) * s; } Distribution __div__(Scalar s) { return (*self) / s; } #if SWIG_VERSION < 0x030011 Distribution __truediv__(Scalar s) { return (*self) / s; } #endif } // class Distribution } // namespace OT openturns-1.9/python/src/DistributionFactory.i000066400000000000000000000007361307543307100217220ustar00rootroot00000000000000// SWIG file DistributionFactory.i %{ #include "openturns/DistributionFactory.hxx" %} %include DistributionFactory_doc.i %include UncertaintyModelCopulaCollection.i OTTypedInterfaceObjectHelper(DistributionFactory) OTTypedCollectionInterfaceObjectHelper(DistributionFactory) %include openturns/DistributionFactory.hxx namespace OT { %extend DistributionFactory { DistributionFactory(const DistributionFactory & other) { return new OT::DistributionFactory(other); } } } openturns-1.9/python/src/DistributionFactoryImplementation.i000066400000000000000000000006651307543307100246310ustar00rootroot00000000000000// SWIG file DistributionFactoryImplementation.i %{ #include "openturns/DistributionFactoryImplementation.hxx" %} %include DistributionFactoryImplementation_doc.i %include openturns/DistributionFactoryImplementation.hxx namespace OT { %extend DistributionFactoryImplementation { DistributionFactoryImplementation(const DistributionFactoryImplementation & other) { return new OT::DistributionFactoryImplementation(other); } } } openturns-1.9/python/src/DistributionFactoryImplementation_doc.i.in000066400000000000000000000077061307543307100260660ustar00rootroot00000000000000%define OT_DistributionFactory_doc "Base class for probability distribution factories. Notes ----- This class generally describes the factory mechanism of each OpenTURNS distribution. Refer to the Reference Guide to have information on the specific estimators used for each distribution. " %enddef %feature("docstring") OT::DistributionFactoryImplementation OT_DistributionFactory_doc // --------------------------------------------------------------------- %define OT_DistributionFactory_build_doc "Build the distribution. **Available usages**: build(*sample*) build(*param*) Parameters ---------- sample : 2-d sequence of float Sample from which the distribution parameters are estimated. param : Collection of :class:`~openturns.PointWithDescription` A vector of parameters of the distribution. Returns ------- dist : :class:`~openturns.Distribution` The built distribution." %enddef %feature("docstring") OT::DistributionFactoryImplementation::build OT_DistributionFactory_build_doc // --------------------------------------------------------------------- %define OT_DistributionFactory_buildEstimator_doc "Build the distribution and the parameter distribution. Parameters ---------- sample : 2-d sequence of float Sample from which the distribution parameters are estimated. parameters : :class:`~openturns.DistributionParameters` Optional, the parametrization. Returns ------- resDist : :class:`~openturns.DistributionFactoryResult` The results. Notes ----- According to the way the native parameters of the distribution are estimated, the parameters distribution differs: - Moments method: the asymptotic parameters distribution is normal and estimated by Bootstrap on the initial data; - Maximum likelihood method with a regular model: the asymptotic parameters distribution is normal and its covariance matrix is the inverse Fisher information matrix; - Other methods: the asymptotic parameters distribution is estimated by Bootstrap on the initial data and kernel fitting (see :class:`~openturns.KernelSmoothing`). If another set of parameters is specified, the native parameters distribution is first estimated and the new distribution is determined from it: - if the native parameters distribution is normal and the transformation regular at the estimated parameters values: the asymptotic parameters distribution is normal and its covariance matrix determined from the inverse Fisher information matrix of the native parameters and the transformation; - in the other cases, the asymptotic parameters distribution is estimated by Bootstrap on the initial data and kernel fitting. Examples -------- Create a sample from a Beta distribution: >>> import openturns as ot >>> sample = ot.Beta().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Beta distribution in the native parameters and create a :class:`~openturns.DistributionFactory`: >>> fittedRes = ot.BetaFactory().buildEstimator(sample) Fit a Beta distribution in the alternative parametrization :math:`(\mu, \sigma, a, b)`: >>> fittedRes2 = ot.BetaFactory().buildEstimator(sample, ot.BetaMuSigma())" %enddef %feature("docstring") OT::DistributionFactoryImplementation::buildEstimator OT_DistributionFactory_buildEstimator_doc // --------------------------------------------------------------------- %define OT_DistributionFactory_getBootstrapSize_doc "Accessor to the bootstrap size. Returns ------- size : integer Size of the bootstrap." %enddef %feature("docstring") OT::DistributionFactoryImplementation::getBootstrapSize OT_DistributionFactory_getBootstrapSize_doc // --------------------------------------------------------------------- %define OT_DistributionFactory_setBootstrapSize_doc "Accessor to the bootstrap size. Parameters ---------- size : integer Size of the bootstrap." %enddef %feature("docstring") OT::DistributionFactoryImplementation::setBootstrapSize OT_DistributionFactory_setBootstrapSize_doc openturns-1.9/python/src/DistributionFactoryResult.i000066400000000000000000000005561307543307100231210ustar00rootroot00000000000000// SWIG file DistributionFactoryResult.i %{ #include "openturns/DistributionFactoryResult.hxx" %} %include DistributionFactoryResult_doc.i %include openturns/DistributionFactoryResult.hxx namespace OT { %extend DistributionFactoryResult { DistributionFactoryResult(const DistributionFactoryResult & other) { return new OT::DistributionFactoryResult(other); } } } openturns-1.9/python/src/DistributionFactoryResult_doc.i.in000066400000000000000000000043101307543307100243430ustar00rootroot00000000000000%feature("docstring") OT::DistributionFactoryResult "Results of distribution estimation. This class is the result of a distribution estimation through a :class:`~openturns.DistributionFactory`. Parameters ---------- distribution : :class:`~openturns.Distribution` The estimated distribution. parameterDistribution : :class:`~openturns.Distribution` The distribution of the parameter. See also -------- DistributionFactory Examples -------- We demonstrate the method on a Beta Distribution. Create a sample from a Beta distribution: >>> import openturns as ot >>> sample = ot.Beta().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Beta distribution and create a :class:`~openturns.DistributionFactory`: >>> fittedRes = ot.BetaFactory().buildEstimator(sample) Get the fitted Beta distribution and its parameters: >>> fittedBeta = fittedRes.getDistribution() Get the asymptotic parameters distribution: >>> paramDist = fittedRes.getParameterDistribution()" // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactoryResult::getDistribution "Accessor to the estimated distribution. Returns ------- distribution : :class:`~openturns.Distribution` The estimated distribution." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactoryResult::setDistribution "Accessor to the estimated distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The estimated distribution." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactoryResult::getParameterDistribution "Accessor to the distribution of the parameter. Returns ------- parameterDistribution : :class:`~openturns.Distribution` The distribution of the parameter." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactoryResult::setParameterDistribution "Accessor to the distribution of the parameter. Parameters ---------- parameterDistribution : :class:`~openturns.Distribution` The distribution of the parameter." openturns-1.9/python/src/DistributionFactory_doc.i.in000066400000000000000000000050651307543307100231540ustar00rootroot00000000000000// DistributionFactory docstrings are defined in DistributionFactory_doc.i.in %feature("docstring") OT::DistributionFactory OT_DistributionFactory_doc %feature("docstring") OT::DistributionFactory::build OT_DistributionFactory_build_doc %feature("docstring") OT::DistributionFactory::buildEstimator OT_DistributionFactory_buildEstimator_doc %feature("docstring") OT::DistributionFactory::getBootstrapSize OT_DistributionFactory_getBootstrapSize_doc %feature("docstring") OT::DistributionFactory::setBootstrapSize OT_DistributionFactory_setBootstrapSize_doc // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetContinuousMultiVariateFactories "Accessor to the list of continuous multivariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid continuous multivariate factories." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetContinuousUniVariateFactories "Accessor to the list of continuous univariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid continuous univariate factories." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetDiscreteMultiVariateFactories "Accessor to the list of discrete multivariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid discrete multivariate factories." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetDiscreteUniVariateFactories "Accessor to the list of discrete univariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid discrete univariate factories." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetMultiVariateFactories "Accessor to the list of multivariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid multivariate factories." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionFactory::GetUniVariateFactories "Accessor to the list of univariate factories. Returns ------- listFactories : collection of :class:`~openturns.DistributionFactory` All the valid univariate factories." openturns-1.9/python/src/DistributionImplementation.i000066400000000000000000000116111307543307100232720ustar00rootroot00000000000000// SWIG file DistributionImplementation.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Sample & grid ($*ltype temp) %{ temp = OT::Sample(); $1 = &temp; %} %typemap(argout) OT::Sample & grid %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Sample(*$1), SWIG_TypeQuery("OT::Sample *"), SWIG_POINTER_OWN | 0 )); %} OT::Sample OT::DistributionImplementation::computePDF(const OT::Scalar xMin, const OT::Scalar xMax, const OT::UnsignedInteger pointNumber, OT::Sample & grid) const; OT::Sample OT::DistributionImplementation::computePDF(const OT::Point & xMin, const OT::Point & xMax, const OT::Indices & pointNumber, OT::Sample & grid) const; %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::DistributionImplementation::getGaussNodesAndWeights(OT::Point & weights) const; %typemap(in, numinputs=0) OT::Point & marginalProb ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & marginalProb %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Interval OT::DistributionImplementation::computeMinimumVolumeInterval(const OT::Scalar prob, OT::Point & marginalProb) const; OT::Interval OT::DistributionImplementation::computeBilateralConfidenceInterval(const OT::Scalar prob, OT::Point & marginalProb) const; OT::Interval OT::DistributionImplementation::computeUnilateralConfidenceInterval(const OT::Scalar prob, const OT::Bool tail, OT::Point & marginalProb) const; %typemap(in, numinputs=0) OT::Point & threshold ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & threshold %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::LevelSet OT::DistributionImplementation::computeMinimumVolumeLevelSet(const OT::Scalar prob, OT::Point & threshold) const; %typemap(in, numinputs=0) OT::Scalar & marginalProb ($*ltype temp) %{ temp = -1.0; $1 = &temp; %} %typemap(argout) OT::Scalar & marginalProb %{ $result = SWIG_Python_AppendOutput($result, PyFloat_FromDouble(*$1)); %} OT::Interval OT::DistributionImplementation::computeMinimumVolumeIntervalWithMarginalProbability(const OT::Scalar prob, OT::Scalar & marginalProb) const; OT::Interval OT::DistributionImplementation::computeBilateralConfidenceIntervalWithMarginalProbability(const OT::Scalar prob, OT::Scalar & marginalProb) const; OT::Interval OT::DistributionImplementation::computeUnilateralConfidenceIntervalWithMarginalProbability(const OT::Scalar prob, const OT::Bool tail, OT::Scalar & marginalProb) const; %typemap(in, numinputs=0) OT::Scalar & threshold ($*ltype temp) %{ temp = -1.0; $1 = &temp; %} %typemap(argout) OT::Scalar & threshold %{ $result = SWIG_Python_AppendOutput($result, PyFloat_FromDouble(*$1)); %} OT::LevelSet OT::DistributionImplementation::computeMinimumVolumeLevelSetWithThreshold(const OT::Scalar prob, OT::Scalar & threshold) const; %{ #include "openturns/DistributionImplementation.hxx" %} %include DistributionImplementation_doc.i %ignore OT::DistributionImplementation::pow; %ignore OT::DistributionImplementation::setWeight; %ignore OT::DistributionImplementation::getWeight; %ignore OT::DistributionImplementation::setParallel; %ignore OT::DistributionImplementation::isParallel; %include openturns/DistributionImplementation.hxx namespace OT { %extend DistributionImplementation { DistributionImplementation(const DistributionImplementation & other) { return new OT::DistributionImplementation(other); } #if SWIG_VERSION < 0x030011 Pointer __truediv__(const Scalar s) { return (*self) / s; } Pointer __truediv__(const DistributionImplementation & d) { return (*self) / d; } #endif Pointer __pow__(const Scalar s) { return self->pow(s); } Pointer __pow__(const SignedInteger s) { return self->pow(s); } Pointer __sub__(const Scalar s) { return *self - s; } Pointer __rsub__(const Scalar s) { return *(*self * (-1.0)) + s; } Pointer __add__(const Scalar s) { return *self + s; } Pointer __radd__(const Scalar s) { return *self + s; } Pointer __mul__(Scalar s) { return (*self) * s; } Pointer __rmul__(Scalar s) { return (*self) * s; } } } %clear OT::Point & weights; openturns-1.9/python/src/DistributionImplementation_doc.i.in000066400000000000000000002454501307543307100245360ustar00rootroot00000000000000%define OT_Distribution_doc "Base class for probability distributions. Notes ----- In OpenTURNS a :class:`~openturns.Distribution` maps the concept of *probability distribution*." %enddef %feature("docstring") OT::DistributionImplementation OT_Distribution_doc // --------------------------------------------------------------------- %define OT_Distribution_computeCDF_doc "Compute the cumulative distribution function. Parameters ---------- X : sequence of float, 2-d sequence of float CDF input(s). Returns ------- F : float, :class:`~openturns.Point` CDF value(s) at input(s) `X`. Notes ----- The cumulative distribution function is defined as: .. math:: F_{\vect{X}}(\vect{x}) = \Prob{\bigcap_{i=1}^n X_i \leq x_i}, \quad \vect{x} \in \supp{\vect{X}}" %enddef %feature("docstring") OT::DistributionImplementation::computeCDF OT_Distribution_computeCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeCDFGradient_doc "Compute the gradient of the cumulative distribution function. Parameters ---------- X : sequence of float CDF input. Returns ------- dFdtheta : :class:`~openturns.Point` Partial derivatives of the CDF with respect to the distribution parameters at input `X`." %enddef %feature("docstring") OT::DistributionImplementation::computeCDFGradient OT_Distribution_computeCDFGradient_doc // --------------------------------------------------------------------- %define OT_Distribution_computeCharacteristicFunction_doc "Compute the characteristic function. Parameters ---------- t : float Characteristic function input. Returns ------- phi : complex Characteristic function value at input `t`. Notes ----- The characteristic function is defined as: .. math:: \phi_X(t) = \mathbb{E}\left[\exp(- i t X)\right], \quad t \in \Rset OpenTURNS features a generic implementation of the characteristic function for all its univariate distributions (both continuous and discrete). This default implementation might be time consuming, especially as the modulus of `t` gets high. Only some univariate distributions benefit from dedicated more efficient implementations." %enddef %feature("docstring") OT::DistributionImplementation::computeCharacteristicFunction OT_Distribution_computeCharacteristicFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_computeComplementaryCDF_doc "Compute the complementary cumulative distribution function. Parameters ---------- X : sequence of float, 2-d sequence of float Complementary CDF input(s). Returns ------- C : float, :class:`~openturns.Point` Complementary CDF value(s) at input(s) `X`. Notes ----- The complementary cumulative distribution function. .. math:: 1 - F_{\vect{X}}(\vect{x}) = 1 - \Prob{\bigcap_{i=1}^n X_i \leq x_i}, \quad \vect{x} \in \supp{\vect{X}} .. warning:: This is not the survival function (except for 1-dimensional distributions). See Also -------- computeSurvivalFunction" %enddef %feature("docstring") OT::DistributionImplementation::computeComplementaryCDF OT_Distribution_computeComplementaryCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeConditionalCDF_doc "Compute the conditional cumulative distribution function. Parameters ---------- Xn : float, sequence of float Conditional CDF input (last component). Xcond : sequence of float, 2-d sequence of float with size :math:`n-1` Conditionning values for the other components. Returns ------- F : float, sequence of float Conditional CDF value(s) at input `Xn`, `Xcond`. Notes ----- The conditional cumulative distribution function of the last component with respect to the other fixed components is defined as follows: .. math:: F_{X_n \mid X_1, \ldots, X_{n - 1}}(x_n) = \Prob{X_n \leq x_n \mid X_1=x_1, \ldots, X_{n-1}=x_{n-1}}, \quad x_n \in \supp{X_n}" %enddef %feature("docstring") OT::DistributionImplementation::computeConditionalCDF OT_Distribution_computeConditionalCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeConditionalDDF_doc "Compute the conditional derivative density function of the last component. With respect to the other fixed components. Parameters ---------- Xn : float Conditional DDF input (last component). Xcond : sequence of float with dimension :math:`n-1` Conditionning values for the other components. Returns ------- d : float Conditional DDF value at input `Xn`, `Xcond`. See Also -------- computeDDF, computeConditionalCDF" %enddef %feature("docstring") OT::DistributionImplementation::computeConditionalDDF OT_Distribution_computeConditionalDDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeConditionalPDF_doc "Compute the conditional probability density function. Conditional PDF of the last component with respect to the other fixed components. Parameters ---------- Xn : float, sequence of float Conditional PDF input (last component). Xcond : sequence of float, 2-d sequence of float with size :math:`n-1` Conditionning values for the other components. Returns ------- F : float, sequence of float Conditional PDF value(s) at input `Xn`, `Xcond`. See Also -------- computePDF, computeConditionalCDF" %enddef %feature("docstring") OT::DistributionImplementation::computeConditionalPDF OT_Distribution_computeConditionalPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeConditionalQuantile_doc "Compute the conditional quantile function of the last component. Conditional quantile with respect to the other fixed components. Parameters ---------- p : float, sequence of float, :math:`0 < p < 1` Conditional quantile function input. Xcond : sequence of float, 2-d sequence of float with size :math:`n-1` Conditionning values for the other components. Returns ------- X1 : float Conditional quantile at input `p`, `Xcond`. See Also -------- computeQuantile, computeConditionalCDF" %enddef %feature("docstring") OT::DistributionImplementation::computeConditionalQuantile OT_Distribution_computeConditionalQuantile_doc // --------------------------------------------------------------------- %define OT_Distribution_computeDDF_doc "Compute the derivative density function. Parameters ---------- X : sequence of float, 2-d sequence of float PDF input(s). Returns ------- d : :class:`~openturns.Point`, :class:`~openturns.Sample` DDF value(s) at input(s) `X`. Notes ----- The derivative density function is the gradient of the probability density function with respect to :math:`\vect{x}`: .. math:: \vect{\nabla}_{\vect{x}} f_{\vect{X}}(\vect{x}) = \Tr{\left(\frac{\partial f_{\vect{X}}(\vect{x})}{\partial x_i}, \quad i = 1, \ldots, n\right)}, \quad \vect{x} \in \supp{\vect{X}}" %enddef %feature("docstring") OT::DistributionImplementation::computeDDF OT_Distribution_computeDDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeDensityGenerator_doc "Compute the probability density function of the characteristic generator. PDF of the characteristic generator of the elliptical distribution. Parameters ---------- beta2 : float Density generator input. Returns ------- p : float Density generator value at input `X`. Notes ----- This is the function :math:`\phi` such that the probability density function rewrites: .. math:: f_{\vect{X}}(\vect{x}) = \phi\left(\Tr{\left(\vect{x} - \vect{\mu}\right)} \mat{\Sigma}^{-1} \left(\vect{x} - \vect{\mu}\right) \right), \quad \vect{x} \in \supp{\vect{X}} This function only exists for elliptical distributions. See Also -------- isElliptical, computePDF" %enddef %feature("docstring") OT::DistributionImplementation::computeDensityGenerator OT_Distribution_computeDensityGenerator_doc // --------------------------------------------------------------------- %define OT_Distribution_computeDensityGeneratorDerivative_doc "Compute the first-order derivative of the probability density function. PDF of the characteristic generator of the elliptical distribution. Parameters ---------- beta2 : float Density generator input. Returns ------- p : float Density generator first-order derivative value at input `X`. Notes ----- This function only exists for elliptical distributions. See Also -------- isElliptical, computeDensityGenerator" %enddef %feature("docstring") OT::DistributionImplementation::computeDensityGeneratorDerivative OT_Distribution_computeDensityGeneratorDerivative_doc // --------------------------------------------------------------------- %define OT_Distribution_computeDensityGeneratorSecondDerivative_doc "Compute the second-order derivative of the probability density function. PDF of the characteristic generator of the elliptical distribution. Parameters ---------- beta2 : float Density generator input. Returns ------- p : float Density generator second-order derivative value at input `X`. Notes ----- This function only exists for elliptical distributions. See Also -------- isElliptical, computeDensityGenerator" %enddef %feature("docstring") OT::DistributionImplementation::computeDensityGeneratorSecondDerivative OT_Distribution_computeDensityGeneratorSecondDerivative_doc // --------------------------------------------------------------------- %define OT_Distribution_computeGeneratingFunction_doc "Compute the probability-generating function. Parameters ---------- z : float or complex Probability-generating function input. Returns ------- g : float Probability-generating function value at input `X`. Notes ----- The probability-generating function is defined as follows: .. math:: G_X(z) = \Expect{z^X}, \quad z \in \Cset This function only exists for discrete distributions. OpenTURNS implements this method for univariate distributions only. See Also -------- isDiscrete" %enddef %feature("docstring") OT::DistributionImplementation::computeGeneratingFunction OT_Distribution_computeGeneratingFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_computeLogCharacteristicFunction_doc "Compute the logarithm of the characteristic function. Parameters ---------- t : float Characteristic function input. Returns ------- phi : complex Logarithm of the characteristic function value at input `t`. Notes ----- OpenTURNS features a generic implementation of the characteristic function for all its univariate distributions (both continuous and discrete). This default implementation might be time consuming, especially as the modulus of `t` gets high. Only some univariate distributions benefit from dedicated more efficient implementations. See Also -------- computeCharacteristicFunction" %enddef %feature("docstring") OT::DistributionImplementation::computeLogCharacteristicFunction OT_Distribution_computeLogCharacteristicFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_computeLogGeneratingFunction_doc "Compute the logarithm of the probability-generating function. Parameters ---------- z : float or complex Probability-generating function input. Returns ------- lg : float Logarithm of the probability-generating function value at input `X`. Notes ----- This function only exists for discrete distributions. OpenTURNS implements this method for univariate distributions only. See Also -------- isDiscrete, computeGeneratingFunction" %enddef %feature("docstring") OT::DistributionImplementation::computeLogGeneratingFunction OT_Distribution_computeLogGeneratingFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_computeLogPDF_doc "Compute the logarithm of the probability density function. Parameters ---------- X : sequence of float, 2-d sequence of float PDF input(s). Returns ------- f : float, :class:`~openturns.Point` Logarithm of the PDF value(s) at input(s) `X`." %enddef %feature("docstring") OT::DistributionImplementation::computeLogPDF OT_Distribution_computeLogPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeLogPDFGradient_doc "Compute the gradient of the log probability density function. Parameters ---------- X : sequence of float PDF input. Returns ------- dfdtheta : :class:`~openturns.Point` Partial derivatives of the logPDF with respect to the distribution parameters at input `X`." %enddef %feature("docstring") OT::DistributionImplementation::computeLogPDFGradient OT_Distribution_computeLogPDFGradient_doc // --------------------------------------------------------------------- %define OT_Distribution_computePDF_doc "Compute the probability density function. Parameters ---------- X : sequence of float, 2-d sequence of float PDF input(s). Returns ------- f : float, :class:`~openturns.Point` PDF value(s) at input(s) `X`. Notes ----- The probability density function is defined as follows: .. math:: f_{\vect{X}}(\vect{x}) = \frac{\partial^n F_{\vect{X}}(\vect{x})} {\prod_{i=1}^n \partial x_i}, \quad \vect{x} \in \supp{\vect{X}}" %enddef %feature("docstring") OT::DistributionImplementation::computePDF OT_Distribution_computePDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computePDFGradient_doc "Compute the gradient of the probability density function. Parameters ---------- X : sequence of float PDF input. Returns ------- dfdtheta : :class:`~openturns.Point` Partial derivatives of the PDF with respect to the distribution parameters at input `X`." %enddef %feature("docstring") OT::DistributionImplementation::computePDFGradient OT_Distribution_computePDFGradient_doc // --------------------------------------------------------------------- %define OT_Distribution_computeProbability_doc "Compute the interval probability. Parameters ---------- interval : :class:`~openturns.Interval` An interval, possibly multivariate. Returns ------- P : float Interval probability. Notes ----- This computes the probability that the random vector :math:`\vect{X}` lies in the hyper-rectangular region formed by the vectors :math:`\vect{a}` and :math:`\vect{b}`: .. math:: \Prob{\bigcap\limits_{i=1}^n a_i < X_i \leq b_i} = \sum\limits_{\vect{c}} (-1)^{n(\vect{c})} F_{\vect{X}}\left(\vect{c}\right) where the sum runs over the :math:`2^n` vectors such that :math:`\vect{c} = \Tr{(c_i, i = 1, \ldots, n)}` with :math:`c_i \in [a_i, b_i]`, and :math:`n(\vect{c})` is the number of components in :math:`\vect{c}` such that :math:`c_i = a_i`." %enddef %feature("docstring") OT::DistributionImplementation::computeProbability OT_Distribution_computeProbability_doc // --------------------------------------------------------------------- %define OT_Distribution_computeQuantile_doc "Compute the quantile function. Parameters ---------- p : float, :math:`0 < p < 1` Quantile function input (a probability). Returns ------- X : :class:`~openturns.Point` Quantile at probability level `p`. Notes ----- The quantile function is also known as the inverse cumulative distribution function: .. math:: Q_{\vect{X}}(p) = F_{\vect{X}}^{-1}(p), \quad p \in [0; 1]" %enddef %feature("docstring") OT::DistributionImplementation::computeQuantile OT_Distribution_computeQuantile_doc // --------------------------------------------------------------------- %define OT_Distribution_computeRadialDistributionCDF_doc "Compute the cumulative distribution function of the squared radius. For the underlying standard spherical distribution (for elliptical distributions only). Parameters ---------- r2 : float, :math:`0 \leq r^2` Squared radius. Returns ------- F : float CDF value at input `r2`. Notes ----- This is the CDF of the sum of the squared independent, standard, identically distributed components: .. math:: R^2 = \sqrt{\sum\limits_{i=1}^n U_i^2}" %enddef %feature("docstring") OT::DistributionImplementation::computeRadialDistributionCDF OT_Distribution_computeRadialDistributionCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeScalarQuantile_doc "Compute the quantile function for univariate distributions. Parameters ---------- p : float, :math:`0 < p < 1` Quantile function input (a probability). Returns ------- X : float Quantile at probability level `p`. Notes ----- The quantile function is also known as the inverse cumulative distribution function: .. math:: Q_X(p) = F_X^{-1}(p), \quad p \in [0; 1] See Also -------- computeQuantile" %enddef %feature("docstring") OT::DistributionImplementation::computeScalarQuantile OT_Distribution_computeScalarQuantile_doc // --------------------------------------------------------------------- %define OT_Distribution_computeSurvivalFunction_doc "Compute the survival function. Parameters ---------- x : sequence of float, 2-d sequence of float Survival function input(s). Returns ------- S : float, :class:`~openturns.Point` Survival function value(s) at input(s) `x`. Notes ----- The survival function of the random vector :math:`\vect{X}` is defined as follows: .. math:: S_{\vect{X}}(\vect{x}) = \Prob{\bigcap_{i=1}^d X_i > x_i} \quad \forall \vect{x} \in \Rset^d .. warning:: This is not the complementary cumulative distribution function (except for 1-dimensional distributions). See Also -------- computeComplementaryCDF" %enddef %feature("docstring") OT::DistributionImplementation::computeSurvivalFunction OT_Distribution_computeSurvivalFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_computeInverseSurvivalFunction_doc "Compute the inverse survival function. Parameters ---------- p : float, :math:`p \in [0; 1]` Level of the survival function. Returns ------- x : :class:`~openturns.Point` Point :math:`\vect{x}` such that :math:`S_{\vect{X}}(\vect{x}) = p` with iso-quantile components. Notes ----- The inverse survival function writes: :math:`S^{-1}(p) = \vect{x}^p` where :math:`S( \vect{x}^p) = \Prob{\bigcap_{i=1}^d X_i > x_i^p}`. OpenTURNS returns the point :math:`\vect{x}^p` such that :math:`\Prob{ X_1 > x_1^p} = \dots = \Prob{ X_d > x_d^p}`. See Also -------- computeQuantile, computeSurvivalFunction" %enddef %feature("docstring") OT::DistributionImplementation::computeInverseSurvivalFunction OT_Distribution_computeInverseSurvivalFunction_doc // --------------------------------------------------------------------- %define OT_Distribution_drawCDF_doc "Draw the cumulative distribution function. Available constructors: drawCDF(*x_min, x_max, pointNumber*) drawCDF(*lowerCorner, upperCorner, pointNbrInd*) drawCDF(*lowerCorner, upperCorner*) Parameters ---------- x_min : float, optional The min-value of the mesh of the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, optional, :math:`x_{\max} > x_{\min}` The max-value of the mesh of the y-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. pointNumber : int The number of points that is used for meshing each axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. lowerCorner : sequence of float, of dimension 2, optional The lower corner :math:`[x_{min}, y_{min}]`. upperCorner : sequence of float, of dimension 2, optional The upper corner :math:`[x_{max}, y_{max}]`. pointNbrInd : :class:`~openturns.Indices`, of dimension 2 Number of points that is used for meshing each axis. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the CDF. Notes ----- Only valid for univariate and bivariate distributions. See Also -------- computeCDF, viewer.View, ResourceMap Examples -------- View the CDF of a univariate distribution: >>> import openturns as ot >>> dist = ot.Normal() >>> graph = dist.drawCDF() >>> graph.setLegends(['normal cdf']) View the iso-lines CDF of a bivariate distribution: >>> import openturns as ot >>> dist = ot.Normal(2) >>> graph2 = dist.drawCDF() >>> graph2.setLegends(['iso- normal cdf']) >>> graph3 = dist.drawCDF([-10, -5],[5, 10], [511, 511]) " %enddef %feature("docstring") OT::DistributionImplementation::drawCDF OT_Distribution_drawCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal1DCDF_doc "Draw the cumulative distribution function of a margin. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the margin of interest. x_min : float The starting value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, :math:`x_{\max} > x_{\min}` The ending value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : int The number of points that is used for meshing the x-axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the CDF of the requested margin. See Also -------- computeCDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal1DCDF(2, -6.0, 6.0, 100) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal1DCDF OT_Distribution_drawMarginal1DCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_computeMinimumVolumeLevelSet_doc "Compute the confidence domain with minimum volume. Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- levelSet : :class:`~openturns.LevelSet` The minimum volume domain of measure :math:`\alpha`. Notes ----- We consider an absolutely continuous measure :math:`\mu` with density function `p`. The minimum volume confidence domain :math:`A^*_{\alpha}` is the set of minimum volume and which measure is at least :math:`\alpha`. It is defined by: .. math:: A^*_{\alpha} = \argmin_{A \in \Rset^d\, | \, \mu(A) \geq \alpha} \lambda(A) where :math:`\lambda` is the Lebesgue measure on :math:`\Rset^d`. Under some general conditions on :math:`\mu` (for example, no flat regions), the set :math:`A^*_{\alpha}` is unique and realises the minimum: :math:`\mu(A^*_{\alpha}) = \alpha`. We show that :math:`A^*_{\alpha}` writes: .. math:: A^*_{\alpha} = \{ \vect{x} \in \Rset^d \, | \, p(\vect{x}) \geq p_{\alpha} \} for a certain :math:`p_{\alpha} >0`. If we consider the random variable :math:`Y = p(\vect{X})`, with cumulative distribution function :math:`F_Y`, then :math:`p_{\alpha}` is defined by: .. math:: 1-F_Y(p_{\alpha}) = \alpha Thus the minimum volume domain of confidence :math:`\alpha` is the interior of the domain which frontier is the :math:`1-\alpha` quantile of :math:`Y`. It can be determined with simulations of :math:`Y`. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the confidence region of minimum volume of the native parameters at level 0.9: >>> levelSet = paramDist.computeMinimumVolumeLevelSet(0.9) " %enddef %feature("docstring") OT::DistributionImplementation::computeMinimumVolumeLevelSet OT_Distribution_computeMinimumVolumeLevelSet_doc // --------------------------------------------------------------------- %define OT_Distribution_computeMinimumVolumeLevelSetWithThreshold_doc "Compute the confidence domain with minimum volume. Refer to :func:`computeMinimumVolumeLevelSet()` Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- levelSet : :class:`~openturns.LevelSet` The minimum volume domain of measure :math:`\alpha`. level : float The value :math:`p_{\alpha}` of the density function defining the frontier of the domain. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the confidence region of minimum volume of the native parameters at level 0.9 with PDF threshold: >>> levelSet, threshold = paramDist.computeMinimumVolumeLevelSetWithThreshold(0.9) " %enddef %feature("docstring") OT::DistributionImplementation::computeMinimumVolumeLevelSetWithThreshold OT_Distribution_computeMinimumVolumeLevelSetWithThreshold_doc // --------------------------------------------------------------------- %define OT_Distribution_computeMinimumVolumeInterval_doc "Compute the confidence interval with minimum volume. Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- confInterval : :class:`~openturns.Interval` The confidence interval of level :math:`\alpha`. Notes ----- We consider an absolutely continuous measure :math:`\mu` with density function `p`. The minimum volume confidence interval :math:`I^*_{\alpha}` is the cartesian product :math:`I^*_{\alpha} = [a_1, b_1] \times \dots \times [a_d, b_d]` where :math:`[a_i, b_i] = \argmin_{I \in \Rset \, | \, \mu_i(I) = \beta} \lambda_i(I)` and :math:`\mu(I^*_{\alpha}) = \alpha` with :math:`\lambda` is the Lebesgue measure on :math:`\Rset^d`. This problem resorts to solving `d` univariate non linear equations: for a fixed value :math:`\beta`, we find each intervals :math:`[a_i, b_i]` such that: .. math:: :nowrap: \begin{eqnarray*} F_i(b_i) - F_i(a_i) & = & \beta \\ p_i(b_i) & = & p_i(a_i) \end{eqnarray*} which consists of finding the bound :math:`a_i` such that: .. math:: p_i(a_i) = p_i(F_i^{-1}(\beta + F_i(a_i))) To find :math:`\beta`, we use the Brent algorithm: :math:`\mu([\vect{a}(\beta); \vect{b}(\beta)] = g(\beta) = \alpha` with `g` a non linear function. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the confidence interval of the native parameters at level 0.9 with minimum volume: >>> ot.ResourceMap.SetAsUnsignedInteger('Distribution-MinimumVolumeLevelSetSamplingSize', 1000) >>> confInt = paramDist.computeMinimumVolumeInterval(0.9) " %enddef %feature("docstring") OT::DistributionImplementation::computeMinimumVolumeInterval OT_Distribution_computeMinimumVolumeInterval_doc // --------------------------------------------------------------------- %define OT_Distribution_computeMinimumVolumeIntervalWithMarginalProbability_doc "Compute the confidence interval with minimum volume. Refer to :func:`computeMinimumVolumeInterval()` Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- confInterval : :class:`~openturns.Interval` The confidence interval of level :math:`\alpha`. marginalProb : float The value :math:`\beta` which is the common marginal probability of each marginal interval. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the confidence interval of the native parameters at level 0.9 with minimum volume: >>> ot.ResourceMap.SetAsUnsignedInteger('Distribution-MinimumVolumeLevelSetSamplingSize', 1000) >>> confInt, marginalProb = paramDist.computeMinimumVolumeIntervalWithMarginalProbability(0.9) " %enddef %feature("docstring") OT::DistributionImplementation::computeMinimumVolumeIntervalWithMarginalProbability OT_Distribution_computeMinimumVolumeIntervalWithMarginalProbability_doc // --------------------------------------------------------------------- %define OT_Distribution_computeBilateralConfidenceInterval_doc "Compute a bilateral confidence interval. Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- confInterval : :class:`~openturns.Interval` The confidence interval of level :math:`\alpha`. Notes ----- We consider an absolutely continuous measure :math:`\mu` with density function `p`. The bilateral confidence interval :math:`I^*_{\alpha}` is the cartesian product :math:`I^*_{\alpha} = [a_1, b_1] \times \dots \times [a_d, b_d]` where :math:`a_i = F_i^{-1}((1-\beta)/2)` and :math:`b_i = F_i^{-1}((1+\beta)/2)` for all `i` and which verifies :math:`\mu(I^*_{\alpha}) = \alpha`. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the bilateral confidence interval at level 0.9: >>> confInt = paramDist.computeBilateralConfidenceInterval(0.9)" %enddef %feature("docstring") OT::DistributionImplementation::computeBilateralConfidenceInterval OT_Distribution_computeBilateralConfidenceInterval_doc // --------------------------------------------------------------------- %define OT_Distribution_computeBilateralConfidenceIntervalWithMarginalProbability_doc "Compute a bilateral confidence interval. Refer to :func:`computeBilateralConfidenceInterval()` Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. Returns ------- confInterval : :class:`~openturns.Interval` The confidence interval of level :math:`\alpha`. marginalProb : float The value :math:`\beta` which is the common marginal probability of each marginal interval. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the bilateral confidence interval at level 0.9 with marginal probability: >>> confInt, marginalProb = paramDist.computeBilateralConfidenceIntervalWithMarginalProbability(0.9)" %enddef %feature("docstring") OT::DistributionImplementation::computeBilateralConfidenceIntervalWithMarginalProbability OT_Distribution_computeBilateralConfidenceIntervalWithMarginalProbability_doc // --------------------------------------------------------------------- %define OT_Distribution_computeUnilateralConfidenceInterval_doc "Compute a unilateral confidence interval. Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. tail : boolean `True` indicates the interval is bounded by an lower value. `False` indicates the interval is bounded by an upper value. Default value is `False`. Returns ------- confInterval : :class:`~openturns.Interval` The unilateral confidence interval of level :math:`\alpha`. Notes ----- We consider an absolutely continuous measure :math:`\mu`. The left unilateral confidence interval :math:`I^*_{\alpha}` is the cartesian product :math:`I^*_{\alpha} = ]-\infty, b_1] \times \dots \times ]-\infty, b_d]` where :math:`b_i = F_i^{-1}(\beta)` for all `i` and which verifies :math:`\mu(I^*_{\alpha}) = \alpha`. It means that :math:`\vect{b}` is the quantile of level :math:`\alpha` of the measure :math:`\mu`, with iso-quantile components. The right unilateral confidence interval :math:`I^*_{\alpha}` is the cartesian product :math:`I^*_{\alpha} = ]a_1; +\infty[ \times \dots \times ]a_d; +\infty[` where :math:`a_i = F_i^{-1}(1-\beta)` for all `i` and which verifies :math:`\mu(I^*_{\alpha}) = \alpha`. It means that :math:`S_{\mu}^{-1}(\vect{a}) = \alpha` with iso-quantile components, where :math:`S_{\mu}` is the survival function of the measure :math:`\mu`. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the right unilateral confidence interval at level 0.9: >>> confInt = paramDist.computeUnilateralConfidenceInterval(0.9) Determine the left unilateral confidence interval at level 0.9: >>> confInt = paramDist.computeUnilateralConfidenceInterval(0.9, True) " %enddef %feature("docstring") OT::DistributionImplementation::computeUnilateralConfidenceInterval OT_Distribution_computeUnilateralConfidenceInterval_doc // --------------------------------------------------------------------- %define OT_Distribution_computeUnilateralConfidenceIntervalWithMarginalProbability_doc "Compute a unilateral confidence interval. Refer to :func:`computeUnilateralConfidenceInterval()` Parameters ---------- alpha : float, :math:`\alpha \in [0,1]` The confidence level. tail : boolean `True` indicates the interval is bounded by an lower value. `False` indicates the interval is bounded by an upper value. Default value is `False`. Returns ------- confInterval : :class:`~openturns.Interval` The unilateral confidence interval of level :math:`\alpha`. marginalProb : float The value :math:`\beta` which is the common marginal probability of each marginal interval. Examples -------- Create a sample from a Normal distribution: >>> import openturns as ot >>> sample = ot.Normal().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 100) Fit a Normal distribution and extract the asymptotic parameters distribution: >>> fittedRes = ot.NormalFactory().buildEstimator(sample) >>> paramDist = fittedRes.getParameterDistribution() Determine the right unilateral confidence interval at level 0.9: >>> confInt, marginalProb = paramDist.computeUnilateralConfidenceIntervalWithMarginalProbability(0.9, False) Determine the left unilateral confidence interval at level 0.9: >>> confInt, marginalProb = paramDist.computeUnilateralConfidenceIntervalWithMarginalProbability(0.9, True) " %enddef %feature("docstring") OT::DistributionImplementation::computeUnilateralConfidenceIntervalWithMarginalProbability OT_Distribution_computeUnilateralConfidenceIntervalWithMarginalProbability_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal1DPDF_doc "Draw the probability density function of a margin. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the margin of interest. x_min : float The starting value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, :math:`x_{\max} > x_{\min}` The ending value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : int The number of points that is used for meshing the x-axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the PDF of the requested margin. See Also -------- computePDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal1DPDF(2, -6.0, 6.0, 100) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal1DPDF OT_Distribution_drawMarginal1DPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal1DLogPDF_doc "Draw the log-probability density function of a margin. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the margin of interest. x_min : float The starting value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, :math:`x_{\max} > x_{\min}` The ending value that is used for meshing the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : int The number of points that is used for meshing the x-axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the log-PDF of the requested margin. See Also -------- computeLogPDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal1DLogPDF(2, -6.0, 6.0, 100) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal1DLogPDF OT_Distribution_drawMarginal1DLogPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal2DCDF_doc "Draw the cumulative distribution function of a couple of margins. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the first margin of interest. j : int, :math:`1 \leq i \neq j \leq n` The index of the second margin of interest. x_min : list of 2 floats The starting values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : list of 2 floats, :math:`x_{\max} > x_{\min}` The ending values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : list of 2 ints The number of points that are used for meshing the x- and y- axes. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the marginal CDF of the requested couple of margins. See Also -------- computeCDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal2DCDF(2, 3, [-6.0] * 2, [6.0] * 2, [100] * 2) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal2DCDF OT_Distribution_drawMarginal2DCDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal2DPDF_doc "Draw the probability density function of a couple of margins. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the first margin of interest. j : int, :math:`1 \leq i \neq j \leq n` The index of the second margin of interest. x_min : list of 2 floats The starting values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : list of 2 floats, :math:`x_{\max} > x_{\min}` The ending values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : list of 2 ints The number of points that are used for meshing the x- and y- axes. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the marginal PDF of the requested couple of margins. See Also -------- computePDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal2DPDF(2, 3, [-6.0] * 2, [6.0] * 2, [100] * 2) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal2DPDF OT_Distribution_drawMarginal2DPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawMarginal2DLogPDF_doc "Draw the log-probability density function of a couple of margins. Parameters ---------- i : int, :math:`1 \leq i \leq n` The index of the first margin of interest. j : int, :math:`1 \leq i \neq j \leq n` The index of the second margin of interest. x_min : list of 2 floats The starting values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : list of 2 floats, :math:`x_{\max} > x_{\min}` The ending values that are used for meshing the x- and y- axes. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. n_points : list of 2 ints The number of points that are used for meshing the x- and y- axes. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the marginal log-PDF of the requested couple of margins. See Also -------- computeLogPDF, getMarginal, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal(10) >>> graph = distribution.drawMarginal2DLogPDF(2, 3, [-6.0] * 2, [6.0] * 2, [100] * 2) >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawMarginal2DLogPDF OT_Distribution_drawMarginal2DLogPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawPDF_doc "Draw the graph or of iso-lines of probability density function. Available constructors: drawPDF(*x_min, x_max, pointNumber*) drawPDF(*lowerCorner, upperCorner, pointNbrInd*) drawPDF(*lowerCorner, upperCorner*) Parameters ---------- x_min : float, optional The min-value of the mesh of the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, optional, :math:`x_{\max} > x_{\min}` The max-value of the mesh of the y-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. pointNumber : int The number of points that is used for meshing each axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. lowerCorner : sequence of float, of dimension 2, optional The lower corner :math:`[x_{min}, y_{min}]`. upperCorner : sequence of float, of dimension 2, optional The upper corner :math:`[x_{max}, y_{max}]`. pointNbrInd : :class:`~openturns.Indices`, of dimension 2 Number of points that is used for meshing each axis. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the PDF or its iso_lines. Notes ----- Only valid for univariate and bivariate distributions. See Also -------- computePDF, viewer.View, ResourceMap Examples -------- View the PDF of a univariate distribution: >>> import openturns as ot >>> dist = ot.Normal() >>> graph = dist.drawPDF() >>> graph.setLegends(['normal pdf']) View the iso-lines PDF of a bivariate distribution: >>> import openturns as ot >>> dist = ot.Normal(2) >>> graph2 = dist.drawPDF() >>> graph2.setLegends(['iso- normal pdf']) >>> graph3 = dist.drawPDF([-10, -5],[5, 10], [511, 511]) " %enddef %feature("docstring") OT::DistributionImplementation::drawPDF OT_Distribution_drawPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawLogPDF_doc "Draw the graph or of iso-lines of log-probability density function. Available constructors: drawLogPDF(*x_min, x_max, pointNumber*) drawLogPDF(*lowerCorner, upperCorner, pointNbrInd*) drawLogPDF(*lowerCorner, upperCorner*) Parameters ---------- x_min : float, optional The min-value of the mesh of the x-axis. Defaults uses the quantile associated to the probability level `Distribution-QMin` from the :class:`~openturns.ResourceMap`. x_max : float, optional, :math:`x_{\max} > x_{\min}` The max-value of the mesh of the y-axis. Defaults uses the quantile associated to the probability level `Distribution-QMax` from the :class:`~openturns.ResourceMap`. pointNumber : int The number of points that is used for meshing each axis. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. lowerCorner : sequence of float, of dimension 2, optional The lower corner :math:`[x_{min}, y_{min}]`. upperCorner : sequence of float, of dimension 2, optional The upper corner :math:`[x_{max}, y_{max}]`. pointNbrInd : :class:`~openturns.Indices`, of dimension 2 Number of points that is used for meshing each axis. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the log-PDF or its iso_lines. Notes ----- Only valid for univariate and bivariate distributions. See Also -------- computeLogPDF, viewer.View, ResourceMap Examples -------- View the log-PDF of a univariate distribution: >>> import openturns as ot >>> dist = ot.Normal() >>> graph = dist.drawLogPDF() >>> graph.setLegends(['normal log-pdf']) View the iso-lines log-PDF of a bivariate distribution: >>> import openturns as ot >>> dist = ot.Normal(2) >>> graph2 = dist.drawLogPDF() >>> graph2.setLegends(['iso- normal pdf']) >>> graph3 = dist.drawLogPDF([-10, -5],[5, 10], [511, 511]) " %enddef %feature("docstring") OT::DistributionImplementation::drawLogPDF OT_Distribution_drawLogPDF_doc // --------------------------------------------------------------------- %define OT_Distribution_drawQuantile_doc "Draw the quantile function. Parameters ---------- q_min : float, in :math:`[0,1]` The min value of the mesh of the x-axis. q_max : float, in :math:`[0,1]` The max value of the mesh of the x-axis. n_points : int, optional The number of points that is used for meshing the quantile curve. Defaults uses `DistributionImplementation-DefaultPointNumber` from the :class:`~openturns.ResourceMap`. Returns ------- graph : :class:`~openturns.Graph` A graphical representation of the quantile function. Notes ----- This is implemented for univariate and bivariate distributions only. In the case of bivariate distributions, defined by its CDF :math:`F` and its marginals :math:`(F_1, F_2)`, the quantile of order :math:`q` is the point :math:`(F_1(u),F_2(u))` defined by .. math:: F(F_1(u), F_2(u)) = q See Also -------- computeQuantile, viewer.View, ResourceMap Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> distribution = ot.Normal() >>> graph = distribution.drawQuantile() >>> view = View(graph) >>> view.show() >>> distribution = ot.ComposedDistribution([ot.Normal(), ot.Exponential(1.0)], ot.ClaytonCopula(0.5)) >>> graph = distribution.drawQuantile() >>> view = View(graph) >>> view.show()" %enddef %feature("docstring") OT::DistributionImplementation::drawQuantile OT_Distribution_drawQuantile_doc // --------------------------------------------------------------------- %define OT_Distribution_getCDFEpsilon_doc "Accessor to the CDF computation precision. Returns ------- CDFEpsilon : float CDF computation precision." %enddef %feature("docstring") OT::DistributionImplementation::getCDFEpsilon OT_Distribution_getCDFEpsilon_doc // --------------------------------------------------------------------- %define OT_Distribution_getCenteredMoment_doc "Accessor to the componentwise centered moments. Parameters ---------- k : int The order of the centered moment. Returns ------- m : :class:`~openturns.Point` Componentwise centered moment of order :math:`k`. Notes ----- Centered moments are centered with respect to the first-order moment: .. math:: \vect{m}^{(k)}_0 = \Tr{\left(\Expect{\left(X_i - \mu_i\right)^k}, \quad i = 1, \ldots, n\right)} See Also -------- getMoment" %enddef %feature("docstring") OT::DistributionImplementation::getCenteredMoment OT_Distribution_getCenteredMoment_doc // --------------------------------------------------------------------- %define OT_Distribution_getShiftedMoment_doc "Accessor to the componentwise shifted moments. Parameters ---------- k : int The order of the shifted moment. shift : sequence of float The shift of the moment. Returns ------- m : :class:`~openturns.Point` Componentwise centered moment of order :math:`k`. Notes ----- The moments are centered with respect to the given shift :\math:`\vect{s}`: .. math:: \vect{m}^{(k)}_0 = \Tr{\left(\Expect{\left(X_i - s_i\right)^k}, \quad i = 1, \ldots, n\right)} See Also -------- getMoment, getCenteredMoment" %enddef %feature("docstring") OT::DistributionImplementation::getShiftedMoment OT_Distribution_getShiftedMoment_doc // --------------------------------------------------------------------- %define OT_Distribution_getCholesky_doc "Accessor to the Cholesky factor of the covariance matrix. Returns ------- L : :class:`~openturns.SquareMatrix` Cholesky factor of the covariance matrix. See Also -------- getCovariance" %enddef %feature("docstring") OT::DistributionImplementation::getCholesky OT_Distribution_getCholesky_doc // --------------------------------------------------------------------- %define OT_Distribution_getCopula_doc "Accessor to the copula of the distribution. Returns ------- C : :class:`~openturns.Distribution` Copula of the distribution. See Also -------- ComposedDistribution" %enddef %feature("docstring") OT::DistributionImplementation::getCopula OT_Distribution_getCopula_doc // --------------------------------------------------------------------- %define OT_Distribution_getCorrelation_doc "**(ditch me?)**" %enddef %feature("docstring") OT::DistributionImplementation::getCorrelation OT_Distribution_getCorrelation_doc // --------------------------------------------------------------------- %define OT_Distribution_getCovariance_doc "Accessor to the covariance matrix. Returns ------- Sigma : :class:`~openturns.CovarianceMatrix` Covariance matrix. Notes ----- The covariance is the second-order centered moment. It is defined as: .. math:: \mat{\Sigma} & = \Cov{\vect{X}} \\ & = \Expect{\left(\vect{X} - \vect{\mu}\right) \Tr{\left(\vect{X} - \vect{\mu}\right)}}" %enddef %feature("docstring") OT::DistributionImplementation::getCovariance OT_Distribution_getCovariance_doc // --------------------------------------------------------------------- %define OT_Distribution_getDescription_doc "Accessor to the componentwise description. Returns ------- description : :class:`~openturns.Description` Description of the components of the distribution. See Also -------- setDescription" %enddef %feature("docstring") OT::DistributionImplementation::getDescription OT_Distribution_getDescription_doc // --------------------------------------------------------------------- %define OT_Distribution_getDimension_doc "Accessor to the dimension of the distribution. Returns ------- n : int The number of components in the distribution." %enddef %feature("docstring") OT::DistributionImplementation::getDimension OT_Distribution_getDimension_doc // --------------------------------------------------------------------- %define OT_Distribution_getDispersionIndicator_doc "**(ditch me?)**" %enddef %feature("docstring") OT::DistributionImplementation::getDispersionIndicator OT_Distribution_getDispersionIndicator_doc // --------------------------------------------------------------------- %define OT_Distribution_getInverseCholesky_doc "Accessor to the inverse Cholesky factor of the covariance matrix. Returns ------- Linv : :class:`~openturns.SquareMatrix` Inverse Cholesky factor of the covariance matrix. See also -------- getCholesky" %enddef %feature("docstring") OT::DistributionImplementation::getInverseCholesky OT_Distribution_getInverseCholesky_doc // --------------------------------------------------------------------- %define OT_Distribution_getInverseIsoProbabilisticTransformation_doc "Accessor to the inverse iso-probabilistic transformation. Returns ------- Tinv : :class:`~openturns.Function` Inverse iso-probabilistic transformation. Notes ----- The inverse iso-probabilistic transformation is defined as follows: .. math:: T^{-1}: \left|\begin{array}{rcl} \Rset^n & \rightarrow & \supp{\vect{X}} \\ \vect{u} & \mapsto & \vect{x} \end{array}\right. See also -------- getIsoProbabilisticTransformation" %enddef %feature("docstring") OT::DistributionImplementation::getInverseIsoProbabilisticTransformation OT_Distribution_getInverseIsoProbabilisticTransformation_doc // --------------------------------------------------------------------- %define OT_Distribution_getIsoProbabilisticTransformation_doc "Accessor to the iso-probabilistic transformation. Returns ------- T : :class:`~openturns.Function` Iso-probabilistic transformation. Notes ----- The iso-probabilistic transformation is defined as follows: .. math:: T: \left|\begin{array}{rcl} \supp{\vect{X}} & \rightarrow & \Rset^n \\ \vect{x} & \mapsto & \vect{u} \end{array}\right. **An** iso-probabilistic transformation is a *diffeomorphism* [#diff]_ from :math:`\supp{\vect{X}}` to :math:`\Rset^d` that maps realizations :math:`\vect{x}` of a random vector :math:`\vect{X}` into realizations :math:`\vect{y}` of another random vector :math:`\vect{Y}` while preserving probabilities. It is hence defined so that it satisfies: .. math:: :nowrap: \begin{eqnarray*} \Prob{\bigcap_{i=1}^d X_i \leq x_i} & = & \Prob{\bigcap_{i=1}^d Y_i \leq y_i} \\ F_{\vect{X}}(\vect{x}) & = & F_{\vect{Y}}(\vect{y}) \end{eqnarray*} **The present** implementation of the iso-probabilistic transformation maps realizations :math:`\vect{x}` into realizations :math:`\vect{u}` of a random vector :math:`\vect{U}` with *spherical distribution* [#spherical]_. To be more specific: - if the distribution is elliptical, then the transformed distribution is simply made spherical using the **Nataf (linear) transformation** [Nataf1962]_, [Lebrun2009a]_. - if the distribution has an elliptical Copula, then the transformed distribution is made spherical using the **generalized Nataf transformation** [Lebrun2009b]_. - otherwise, the transformed distribution is the standard multivariate Normal distribution and is obtained by means of the **Rosenblatt transformation** [Rosenblatt1952]_, [Lebrun2009c]_. .. [#diff] A differentiable map :math:`f` is called a *diffeomorphism* if it is a bijection and its inverse :math:`f^{-1}` is differentiable as well. Hence, the iso-probabilistic transformation implements a gradient (and even a Hessian). .. [#spherical] A distribution is said to be *spherical* if is invariant by rotation. Mathematically, :math:`\vect{U}` has a spherical distribution if: .. math:: \mat{R}\,\vect{U} \sim \vect{U}, \quad \forall \mat{R} \in \cS\cP_n(\Rset) See also -------- getInverseIsoProbabilisticTransformation, isElliptical, hasEllipticalCopula" %enddef %feature("docstring") OT::DistributionImplementation::getIsoProbabilisticTransformation OT_Distribution_getIsoProbabilisticTransformation_doc // --------------------------------------------------------------------- %define OT_Distribution_getKendallTau_doc "Accessor to the Kendall coefficients matrix. Returns ------- tau: :class:`~openturns.SquareMatrix` Kendall coefficients matrix. Notes ----- The Kendall coefficients matrix is defined as: .. math:: \mat{\tau} = \Big[& \Prob{X_i < x_i \cap X_j < x_j \cup X_i > x_i \cap X_j > x_j} \\ & - \Prob{X_i < x_i \cap X_j > x_j \cup X_i > x_i \cap X_j < x_j}, \quad i,j = 1, \ldots, n\Big] See Also -------- getSpearmanCorrelation" %enddef %feature("docstring") OT::DistributionImplementation::getKendallTau OT_Distribution_getKendallTau_doc // --------------------------------------------------------------------- %define OT_Distribution_getKurtosis_doc "Accessor to the componentwise kurtosis. Returns ------- k : :class:`~openturns.Point` Componentwise kurtosis. Notes ----- The kurtosis is the fourth-order centered moment standardized by the standard deviation: .. math:: \vect{\kappa} = \Tr{\left(\Expect{\left(\frac{X_i - \mu_i} {\sigma_i}\right)^4}, \quad i = 1, \ldots, n\right)}" %enddef %feature("docstring") OT::DistributionImplementation::getKurtosis OT_Distribution_getKurtosis_doc // --------------------------------------------------------------------- %define OT_Distribution_getLinearCorrelation_doc "**(ditch me?)**" %enddef %feature("docstring") OT::DistributionImplementation::getLinearCorrelation OT_Distribution_getLinearCorrelation_doc // --------------------------------------------------------------------- %define OT_Distribution_getMarginal_doc "Accessor to marginal distributions. Parameters ---------- i : int or list of ints, :math:`1 \leq i \leq n` Component(s) indice(s). Returns ------- distribution : :class:`~openturns.Distribution` The marginal distribution of the selected component(s)." %enddef %feature("docstring") OT::DistributionImplementation::getMarginal OT_Distribution_getMarginal_doc // --------------------------------------------------------------------- %define OT_Distribution_getMean_doc "Accessor to the mean. Returns ------- k : :class:`~openturns.Point` Mean. Notes ----- The mean is the first-order moment: .. math:: \vect{\mu} = \Tr{\left(\Expect{X_i}, \quad i = 1, \ldots, n\right)}" %enddef %feature("docstring") OT::DistributionImplementation::getMean OT_Distribution_getMean_doc // --------------------------------------------------------------------- %define OT_Distribution_getMoment_doc "Accessor to the componentwise moments. Parameters ---------- k : int The order of the moment. Returns ------- m : :class:`~openturns.Point` Componentwise moment of order `k`. Notes ----- The componentwise moment of order :math:`k` is defined as: .. math:: \vect{m}^{(k)} = \Tr{\left(\Expect{X_i^k}, \quad i = 1, \ldots, n\right)}" %enddef %feature("docstring") OT::DistributionImplementation::getMoment OT_Distribution_getMoment_doc // --------------------------------------------------------------------- %define OT_Distribution_getPDFEpsilon_doc "Accessor to the PDF computation precision. Returns ------- PDFEpsilon : float PDF computation precision." %enddef %feature("docstring") OT::DistributionImplementation::getPDFEpsilon OT_Distribution_getPDFEpsilon_doc // --------------------------------------------------------------------- %define OT_Distribution_getParametersCollection_doc "Accessor to the parameter of the distribution. Returns ------- parameters : :class:`~openturns.PointWithDescription` Dictionary-like object with parameters names and values." %enddef %feature("docstring") OT::DistributionImplementation::getParametersCollection OT_Distribution_getParametersCollection_doc // --------------------------------------------------------------------- %define OT_Distribution_setParameter_doc "Accessor to the parameter of the distribution. Parameters ---------- parameter : sequence of float Parameter values." %enddef %feature("docstring") OT::DistributionImplementation::setParameter OT_Distribution_setParameter_doc // --------------------------------------------------------------------- %define OT_Distribution_getParameter_doc "Accessor to the parameter of the distribution. Returns ------- parameter : :class:`~openturns.Point` Parameter values." %enddef %feature("docstring") OT::DistributionImplementation::getParameter OT_Distribution_getParameter_doc // --------------------------------------------------------------------- %define OT_Distribution_getParameterDescription_doc "Accessor to the parameter description of the distribution. Returns ------- description : :class:`~openturns.Description` Parameter names." %enddef %feature("docstring") OT::DistributionImplementation::getParameterDescription OT_Distribution_getParameterDescription_doc // --------------------------------------------------------------------- %define OT_Distribution_getParameterDimension_doc "Accessor to the number of parameters in the distribution. Returns ------- n_parameters : int Number of parameters in the distribution. See Also -------- getParametersCollection" %enddef %feature("docstring") OT::DistributionImplementation::getParameterDimension OT_Distribution_getParameterDimension_doc // --------------------------------------------------------------------- %define OT_Distribution_getPearsonCorrelation_doc "Accessor to the Pearson correlation matrix. Returns ------- R : :class:`~openturns.CorrelationMatrix` Pearson's correlation matrix. See Also -------- getCovariance Notes ----- Pearson's correlation is defined as the normalized covariance matrix: .. math:: \mat{\rho} & = \left[\frac{\Cov{X_i, X_j}}{\sqrt{\Var{X_i}\Var{X_j}}}, \quad i,j = 1, \ldots, n\right] \\ & = \left[\frac{\Sigma_{i,j}}{\sqrt{\Sigma_{i,i}\Sigma_{j,j}}}, \quad i,j = 1, \ldots, n\right]" %enddef %feature("docstring") OT::DistributionImplementation::getPearsonCorrelation OT_Distribution_getPearsonCorrelation_doc // --------------------------------------------------------------------- %define OT_Distribution_getPositionIndicator_doc "**(ditch me?)**" %enddef %feature("docstring") OT::DistributionImplementation::getPositionIndicator OT_Distribution_getPositionIndicator_doc // --------------------------------------------------------------------- %define OT_Distribution_getRange_doc "Accessor to the range of the distribution. Returns ------- range : :class:`~openturns.Interval` Range of the distribution. Notes ----- The *mathematical* range is the smallest closed interval outside of which the PDF is zero. The *numerical* range is the interval outside of which the PDF is rounded to zero in double precision. See Also -------- getSupport" %enddef %feature("docstring") OT::DistributionImplementation::getRange OT_Distribution_getRange_doc // --------------------------------------------------------------------- %define OT_Distribution_getRealization_doc "Accessor to a pseudo-random realization from the distribution. Returns ------- point : :class:`~openturns.Point` A pseudo-random realization of the distribution. See Also -------- getSample, RandomGenerator" %enddef %feature("docstring") OT::DistributionImplementation::getRealization OT_Distribution_getRealization_doc // --------------------------------------------------------------------- %define OT_Distribution_getRoughness_doc "Accessor to roughness of the distribution. Returns ------- r : float Roughness of the distribution. Notes ----- The roughness of the distribution is defined as the :math:`\cL^2`-norm of its PDF: .. math:: r = \int_{\supp{\vect{X}}} f_{\vect{X}}(\vect{x})^2 \di{\vect{x}} See Also -------- computePDF" %enddef %feature("docstring") OT::DistributionImplementation::getRoughness OT_Distribution_getRoughness_doc // --------------------------------------------------------------------- %define OT_Distribution_getSample_doc "Accessor to a pseudo-random sample from the distribution. Parameters ---------- size : int Sample size. Returns ------- sample : :class:`~openturns.Sample` A pseudo-random sample of the distribution. See Also -------- getRealization, RandomGenerator" %enddef %feature("docstring") OT::DistributionImplementation::getSample OT_Distribution_getSample_doc // --------------------------------------------------------------------- %define OT_Distribution_getShapeMatrix_doc "Accessor to the shape matrix of the underlying copula if it is elliptical. Returns ------- shape : :class:`~openturns.CorrelationMatrix` Shape matrix of the elliptical copula of a distribution. Notes ----- This is not the Pearson correlation matrix. See Also -------- getPearsonCorrelation" %enddef %feature("docstring") OT::DistributionImplementation::getShapeMatrix OT_Distribution_getShapeMatrix_doc // --------------------------------------------------------------------- %define OT_Distribution_getSkewness_doc "Accessor to the componentwise skewness. Returns ------- d : :class:`~openturns.Point` Componentwise skewness. Notes ----- The skewness is the third-order centered moment standardized by the standard deviation: .. math:: \vect{\delta} = \Tr{\left(\Expect{\left(\frac{X_i - \mu_i} {\sigma_i}\right)^3}, \quad i = 1, \ldots, n\right)}" %enddef %feature("docstring") OT::DistributionImplementation::getSkewness OT_Distribution_getSkewness_doc // --------------------------------------------------------------------- %define OT_Distribution_getSpearmanCorrelation_doc "Accessor to the Spearman correlation matrix. Returns ------- R : :class:`~openturns.CorrelationMatrix` Spearman's correlation matrix. Notes ----- Spearman's (rank) correlation is defined as the normalized covariance matrix of the copula (ie that of the uniform margins): .. math:: \mat{\rho_S} = \left[\frac{\Cov{F_{X_i}(X_i), F_{X_j}(X_j)}} {\sqrt{\Var{F_{X_i}(X_i)} \Var{F_{X_j}(X_j)}}}, \quad i,j = 1, \ldots, n\right] See Also -------- getKendallTau" %enddef %feature("docstring") OT::DistributionImplementation::getSpearmanCorrelation OT_Distribution_getSpearmanCorrelation_doc // --------------------------------------------------------------------- %define OT_Distribution_getStandardDeviation_doc "Accessor to the componentwise standard deviation. The standard deviation is the square root of the variance. Returns ------- sigma : :class:`~openturns.Point` Componentwise standard deviation. See Also -------- getCovariance" %enddef %feature("docstring") OT::DistributionImplementation::getStandardDeviation OT_Distribution_getStandardDeviation_doc // --------------------------------------------------------------------- %define OT_Distribution_getStandardDistribution_doc "Accessor to the standard distribution. Returns ------- standard_distribution : :class:`~openturns.Distribution` Standard distribution. Notes ----- The standard distribution is determined according to the distribution properties. This is the target distribution achieved by the iso-probabilistic transformation. See Also -------- getIsoProbabilisticTransformation" %enddef %feature("docstring") OT::DistributionImplementation::getStandardDistribution OT_Distribution_getStandardDistribution_doc // --------------------------------------------------------------------- %define OT_Distribution_getStandardMoment_doc "Accessor to the componentwise standard moments. Parameters ---------- k : int The order of the standard moment. Returns ------- m : :class:`~openturns.Point` Componentwise standard moment of order `k`. Notes ----- Standard moments are the raw moments of the standard representative of the parametric family of distributions. See Also -------- getStandardRepresentative" %enddef %feature("docstring") OT::DistributionImplementation::getStandardMoment OT_Distribution_getStandardMoment_doc // --------------------------------------------------------------------- %define OT_Distribution_getStandardRepresentative_doc "Accessor to the standard representative distribution in the parametric family. Returns ------- std_repr_dist : :class:`~openturns.Distribution` Standard representative distribution. Notes ----- The standard representative distribution is defined on a distribution by distribution basis, most of the time by scaling the distribution with bounded support to :math:`[0,1]` or by standardizing (ie zero mean, unit variance) the distributions with unbounded support. It is the member of the family for which orthonormal polynomials will be built using generic algorithms of orthonormalization." %enddef %feature("docstring") OT::DistributionImplementation::getStandardRepresentative OT_Distribution_getStandardRepresentative_doc // --------------------------------------------------------------------- %define OT_Distribution_getSupport_doc "Accessor to the support of the distribution. Parameters ---------- interval : :class:`~openturns.Interval` An interval to intersect with the support of the discrete part of the distribution. Returns ------- support : :class:`~openturns.Interval` The intersection of the support of the discrete part of the distribution with the given `interval`. Notes ----- The mathematical support :math:`\supp{\vect{X}}` of the discrete part of a distribution is the collection of points with nonzero probability. This is yet implemented for discrete distributions only. See Also -------- getRange" %enddef %feature("docstring") OT::DistributionImplementation::getSupport OT_Distribution_getSupport_doc // --------------------------------------------------------------------- %define OT_Distribution_getProbabilities_doc "Accessor to the discrete probability levels. Returns ------- probabilities : :class:`~openturns.Point` The probability levels of a discrete distribution." %enddef %feature("docstring") OT::DistributionImplementation::getProbabilities OT_Distribution_getProbabilities_doc // --------------------------------------------------------------------- %define OT_Distribution_getSingularities_doc "Accessor to the singularities of the PDF function. It is defined for univariate distributions only, and gives all the singularities (ie discontinuities of any order) strictly inside of the range of the distribution. Returns ------- singularities : :class:`~openturns.Point` The singularities of the PDF of an univariate distribution." %enddef %feature("docstring") OT::DistributionImplementation::getSingularities OT_Distribution_getSingularities_doc // --------------------------------------------------------------------- %define OT_Distribution_hasEllipticalCopula_doc "Test whether the copula of the distribution is elliptical or not. Returns ------- test : bool Answer. See Also -------- isElliptical" %enddef %feature("docstring") OT::DistributionImplementation::hasEllipticalCopula OT_Distribution_hasEllipticalCopula_doc // --------------------------------------------------------------------- %define OT_Distribution_hasIndependentCopula_doc "Test whether the copula of the distribution is the independent one. Returns ------- test : bool Answer." %enddef %feature("docstring") OT::DistributionImplementation::hasIndependentCopula OT_Distribution_hasIndependentCopula_doc // --------------------------------------------------------------------- %define OT_Distribution_isContinuous_doc "Test whether the distribution is continuous or not. Returns ------- test : bool Answer." %enddef %feature("docstring") OT::DistributionImplementation::isContinuous OT_Distribution_isContinuous_doc // --------------------------------------------------------------------- %define OT_Distribution_isCopula_doc "Test whether the distribution is a copula or not. Returns ------- test : bool Answer. Notes ----- A copula is a distribution with uniform margins on [0; 1]." %enddef %feature("docstring") OT::DistributionImplementation::isCopula OT_Distribution_isCopula_doc // --------------------------------------------------------------------- %define OT_Distribution_isDiscrete_doc "Test whether the distribution is discrete or not. Returns ------- test : bool Answer." %enddef %feature("docstring") OT::DistributionImplementation::isDiscrete OT_Distribution_isDiscrete_doc // --------------------------------------------------------------------- %define OT_Distribution_isElliptical_doc "Test whether the distribution is elliptical or not. Returns ------- test : bool Answer. Notes ----- A multivariate distribution is said to be *elliptical* if its characteristic function is of the form: .. math:: \phi(\vect{t}) = \exp\left(i \Tr{\vect{t}} \vect{\mu}\right) \Psi\left(\Tr{\vect{t}} \mat{\Sigma} \vect{t}\right), \quad \vect{t} \in \Rset^n for specified vector :math:`\vect{\mu}` and positive-definite matrix :math:`\mat{\Sigma}`. The function :math:`\Psi` is known as the *characteristic generator* of the elliptical distribution." %enddef %feature("docstring") OT::DistributionImplementation::isElliptical OT_Distribution_isElliptical_doc // --------------------------------------------------------------------- %define OT_Distribution_isIntegral_doc "Test whether the distribution is integer-valued or not. Returns ------- test : bool Answer." %enddef %feature("docstring") OT::DistributionImplementation::isIntegral OT_Distribution_isIntegral_doc // --------------------------------------------------------------------- %define OT_Distribution_setDescription_doc "Accessor to the componentwise description. Parameters ---------- description : sequence of str Description of the components of the distribution." %enddef %feature("docstring") OT::DistributionImplementation::setDescription OT_Distribution_setDescription_doc // --------------------------------------------------------------------- %define OT_Distribution_setParametersCollection_doc "Accessor to the parameter of the distribution. Parameters ---------- parameters : :class:`~openturns.PointWithDescription` Dictionary-like object with parameters names and values." %enddef %feature("docstring") OT::DistributionImplementation::setParametersCollection OT_Distribution_setParametersCollection_doc // --------------------------------------------------------------------- %define OT_Distribution_cos_doc "Transform distribution by cosine function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::cos OT_Distribution_cos_doc // --------------------------------------------------------------------- %define OT_Distribution_sin_doc "Transform distribution by sine function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::sin OT_Distribution_sin_doc // --------------------------------------------------------------------- %define OT_Distribution_tan_doc "Transform distribution by tangent function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::tan OT_Distribution_tan_doc // --------------------------------------------------------------------- %define OT_Distribution_acos_doc "Transform distribution by arccosine function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::acos OT_Distribution_acos_doc // --------------------------------------------------------------------- %define OT_Distribution_asin_doc "Transform distribution by arcsine function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::asin OT_Distribution_asin_doc // --------------------------------------------------------------------- %define OT_Distribution_atan_doc "Transform distribution by arctangent function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::atan OT_Distribution_atan_doc // --------------------------------------------------------------------- %define OT_Distribution_cosh_doc "Transform distribution by cosh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::cosh OT_Distribution_cosh_doc // --------------------------------------------------------------------- %define OT_Distribution_sinh_doc "Transform distribution by sinh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::sinh OT_Distribution_sinh_doc // --------------------------------------------------------------------- %define OT_Distribution_tanh_doc "Transform distribution by tanh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::tanh OT_Distribution_tanh_doc // --------------------------------------------------------------------- %define OT_Distribution_acosh_doc "Transform distribution by acosh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::acosh OT_Distribution_acosh_doc // --------------------------------------------------------------------- %define OT_Distribution_asinh_doc "Transform distribution by asinh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::asinh OT_Distribution_asinh_doc // --------------------------------------------------------------------- %define OT_Distribution_atanh_doc "Transform distribution by atanh function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::atanh OT_Distribution_atanh_doc // --------------------------------------------------------------------- %define OT_Distribution_exp_doc "Transform distribution by exponential function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::exp OT_Distribution_exp_doc // --------------------------------------------------------------------- %define OT_Distribution_log_doc "Transform distribution by natural logarithm function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::log OT_Distribution_log_doc // --------------------------------------------------------------------- %define OT_Distribution_ln_doc "Transform distribution by natural logarithm function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::ln OT_Distribution_ln_doc // --------------------------------------------------------------------- %define OT_Distribution_inverse_doc "Transform distribution by inverse function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::inverse OT_Distribution_inverse_doc // --------------------------------------------------------------------- %define OT_Distribution_sqr_doc "Transform distribution by square function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::sqr OT_Distribution_sqr_doc // --------------------------------------------------------------------- %define OT_Distribution_sqrt_doc "Transform distribution by square root function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::sqrt OT_Distribution_sqrt_doc // --------------------------------------------------------------------- %define OT_Distribution_cbrt_doc "Transform distribution by cubic root function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::cbrt OT_Distribution_cbrt_doc // --------------------------------------------------------------------- %define OT_Distribution_abs_doc "Transform distribution by absolute value function. Returns ------- dist : :class:`~openturns.Distribution` The transformed distribution." %enddef %feature("docstring") OT::DistributionImplementation::abs OT_Distribution_abs_doc // --------------------------------------------------------------------- %define OT_Distribution_setIntegrationNodesNumber_doc "Accessor to the number of Gauss integration points. Parameters ---------- N : int Number of integration points." %enddef %feature("docstring") OT::DistributionImplementation::setIntegrationNodesNumber OT_Distribution_setIntegrationNodesNumber_doc // --------------------------------------------------------------------- %define OT_Distribution_getIntegrationNodesNumber_doc "Accessor to the number of Gauss integration points. Returns ------- N : int Number of integration points." %enddef %feature("docstring") OT::DistributionImplementation::getIntegrationNodesNumber OT_Distribution_getIntegrationNodesNumber_doc openturns-1.9/python/src/DistributionParameters.i000066400000000000000000000006141307543307100224110ustar00rootroot00000000000000// SWIG file DistributionParameters.i %{ #include "openturns/DistributionParameters.hxx" %} %include DistributionParameters_doc.i OTTypedInterfaceObjectHelper(DistributionParameters) %include openturns/DistributionParameters.hxx namespace OT { %extend DistributionParameters { DistributionParameters(const DistributionParameters & other) { return new OT::DistributionParameters(other); } } } openturns-1.9/python/src/DistributionParametersImplementation.i000066400000000000000000000007061307543307100253210ustar00rootroot00000000000000// SWIG file DistributionParametersImplementation.i %{ #include "openturns/DistributionParametersImplementation.hxx" %} %include DistributionParametersImplementation_doc.i %include openturns/DistributionParametersImplementation.hxx namespace OT { %extend DistributionParametersImplementation { DistributionParametersImplementation(const DistributionParametersImplementation & other) { return new OT::DistributionParametersImplementation(other); } } } openturns-1.9/python/src/DistributionParametersImplementation_doc.i.in000066400000000000000000000071671307543307100265630ustar00rootroot00000000000000%define OT_DistributionParameters_doc "Define a distribution with particular parameters. This class enables to create a set of non-native parameters in order to define distribution. A *DistributionParameters* object can be used through its derived classes: - :class:`~openturns.ArcsineMuSigma` - :class:`~openturns.BetaMuSigma` - :class:`~openturns.GammaMuSigma` - :class:`~openturns.GumbelMuSigma` - :class:`~openturns.GumbelAB` - :class:`~openturns.LogNormalMuSigma` - :class:`~openturns.LogNormalMuSigmaOverMu` - :class:`~openturns.WeibullMuSigma` See also -------- ParametrizedDistribution, Distribution" %enddef %feature("docstring") OT::DistributionParametersImplementation OT_DistributionParameters_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_getDistribution_doc "Build a distribution based on a set of native parameters. Returns ------- distribution : :class:`~openturns.Distribution` Distribution built with the native parameters." %enddef %feature("docstring") OT::DistributionParametersImplementation::getDistribution OT_DistributionParameters_getDistribution_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_setValues_doc "Accessor to the parameters values. Parameters ---------- values : sequence of float List of parameters values." %enddef %feature("docstring") OT::DistributionParametersImplementation::setValues OT_DistributionParameters_setValues_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_getValues_doc "Accessor to the parameters values. Returns ------- values : :class:`~openturns.Point` List of parameters values." %enddef %feature("docstring") OT::DistributionParametersImplementation::getValues OT_DistributionParameters_getValues_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_getDescription_doc "Get the description of the parameters. Returns ------- collection : :class:`~openturns.Description` List of parameters names." %enddef %feature("docstring") OT::DistributionParametersImplementation::getDescription OT_DistributionParameters_getDescription_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_evaluate_doc "Compute native parameters values. Returns ------- values : :class:`~openturns.Point` The native parameter values." %enddef %feature("docstring") OT::DistributionParametersImplementation::evaluate OT_DistributionParameters_evaluate_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_gradient_doc "Get the gradient. Returns ------- gradient : :class:`~openturns.Matrix` The gradient of the transformation of the native parameters into the new parameters. Notes ----- If we note :math:`(p_1, \dots, p_q)` the native parameters and :math:`(p'_1, \dots, p'_q)` the new ones, then the gradient matrix is :math:`\left( \dfrac{\partial p'_i}{\partial p_j} \right)_{1 \leq i,j \leq q}`." %enddef %feature("docstring") OT::DistributionParametersImplementation::gradient OT_DistributionParameters_gradient_doc // --------------------------------------------------------------------- %define OT_DistributionParameters_inverse_doc "Convert to native parameters. Parameters ---------- inP : sequence of float The non-native parameters. Returns ------- outP : :class:`~openturns.Point` The native parameters." %enddef %feature("docstring") OT::DistributionParametersImplementation::inverse OT_DistributionParameters_inverse_doc openturns-1.9/python/src/DistributionParameters_doc.i.in000066400000000000000000000015741307543307100236510ustar00rootroot00000000000000// DistributionParameters docstrings are defined in DistributionParametersImplementation_doc.i.in %feature("docstring") OT::DistributionParameters OT_DistributionParameters_doc %feature("docstring") OT::DistributionParameters::getDistribution OT_DistributionParameters_getDistribution_doc %feature("docstring") OT::DistributionParameters::setValues OT_DistributionParameters_setValues_doc %feature("docstring") OT::DistributionParameters::getValues OT_DistributionParameters_getValues_doc %feature("docstring") OT::DistributionParameters::getDescription OT_DistributionParameters_getDescription_doc %feature("docstring") OT::DistributionParameters::evaluate OT_DistributionParameters_evaluate_doc %feature("docstring") OT::DistributionParameters::gradient OT_DistributionParameters_gradient_doc %feature("docstring") OT::DistributionParameters::inverse OT_DistributionParameters_inverse_doc openturns-1.9/python/src/DistributionTransformation.i000066400000000000000000000005661307543307100233220ustar00rootroot00000000000000// SWIG file DistributionTransformation.i %{ #include "openturns/DistributionTransformation.hxx" %} %include DistributionTransformation_doc.i %include openturns/DistributionTransformation.hxx namespace OT { %extend DistributionTransformation { DistributionTransformation(const DistributionTransformation & other) { return new OT::DistributionTransformation(other); } } } openturns-1.9/python/src/DistributionTransformation_doc.i.in000066400000000000000000000010711307543307100245440ustar00rootroot00000000000000%feature("docstring") OT::DistributionTransformation "Isoprobabilistic transformation. Available constructor: DistributionTransformation(*left, right*) Parameters ---------- left, right : :class:`~openturns.Distribution` The transformation that maps *left* into *right*." // --------------------------------------------------------------------- %feature("docstring") OT::DistributionTransformation::inverse "Inverse isoprobabilistic transformation. Returns ------- inverseT : :class:`~openturns.DistributionTransformation` The inverse transformation." openturns-1.9/python/src/Distribution_doc.i.in000066400000000000000000000253041307543307100216220ustar00rootroot00000000000000// Distribution docstrings are defined in DistributionImplementation_doc.i.in %feature("docstring") OT::Distribution OT_Distribution_doc %feature("docstring") OT::Distribution::computeCDF OT_Distribution_computeCDF_doc %feature("docstring") OT::Distribution::computeCDFGradient OT_Distribution_computeCDFGradient_doc %feature("docstring") OT::Distribution::computeCharacteristicFunction OT_Distribution_computeCharacteristicFunction_doc %feature("docstring") OT::Distribution::computeComplementaryCDF OT_Distribution_computeComplementaryCDF_doc %feature("docstring") OT::Distribution::computeConditionalCDF OT_Distribution_computeConditionalCDF_doc %feature("docstring") OT::Distribution::computeConditionalDDF OT_Distribution_computeConditionalDDF_doc %feature("docstring") OT::Distribution::computeConditionalPDF OT_Distribution_computeConditionalPDF_doc %feature("docstring") OT::Distribution::computeConditionalQuantile OT_Distribution_computeConditionalQuantile_doc %feature("docstring") OT::Distribution::computeDDF OT_Distribution_computeDDF_doc %feature("docstring") OT::Distribution::computeDensityGenerator OT_Distribution_computeDensityGenerator_doc %feature("docstring") OT::Distribution::computeDensityGeneratorDerivative OT_Distribution_computeDensityGeneratorDerivative_doc %feature("docstring") OT::Distribution::computeDensityGeneratorSecondDerivative OT_Distribution_computeDensityGeneratorSecondDerivative_doc %feature("docstring") OT::Distribution::computeGeneratingFunction OT_Distribution_computeGeneratingFunction_doc %feature("docstring") OT::Distribution::computeLogCharacteristicFunction OT_Distribution_computeLogCharacteristicFunction_doc %feature("docstring") OT::Distribution::computeLogGeneratingFunction OT_Distribution_computeLogGeneratingFunction_doc %feature("docstring") OT::Distribution::computeMinimumVolumeLevelSet OT_Distribution_computeMinimumVolumeLevelSet_doc %feature("docstring") OT::Distribution::computeMinimumVolumeLevelSetWithThreshold OT_Distribution_computeMinimumVolumeLevelSetWithThreshold_doc %feature("docstring") OT::Distribution::computeMinimumVolumeInterval OT_Distribution_computeMinimumVolumeInterval_doc %feature("docstring") OT::Distribution::computeMinimumVolumeIntervalWithMarginalProbability OT_Distribution_computeMinimumVolumeIntervalWithMarginalProbability_doc %feature("docstring") OT::Distribution::computeBilateralConfidenceInterval OT_Distribution_computeBilateralConfidenceInterval_doc %feature("docstring") OT::Distribution::computeBilateralConfidenceIntervalWithMarginalProbability OT_Distribution_computeBilateralConfidenceIntervalWithMarginalProbability_doc %feature("docstring") OT::Distribution::computeUnilateralConfidenceInterval OT_Distribution_computeUnilateralConfidenceInterval_doc %feature("docstring") OT::Distribution::computeUnilateralConfidenceIntervalWithMarginalProbability OT_Distribution_computeUnilateralConfidenceIntervalWithMarginalProbability_doc %feature("docstring") OT::Distribution::computeLogPDF OT_Distribution_computeLogPDF_doc %feature("docstring") OT::Distribution::computeLogPDFGradient OT_Distribution_computeLogPDFGradient_doc %feature("docstring") OT::Distribution::computePDF OT_Distribution_computePDF_doc %feature("docstring") OT::Distribution::computePDFGradient OT_Distribution_computePDFGradient_doc %feature("docstring") OT::Distribution::computeProbability OT_Distribution_computeProbability_doc %feature("docstring") OT::Distribution::computeQuantile OT_Distribution_computeQuantile_doc %feature("docstring") OT::Distribution::computeRadialDistributionCDF OT_Distribution_computeRadialDistributionCDF_doc %feature("docstring") OT::Distribution::computeScalarQuantile OT_Distribution_computeScalarQuantile_doc %feature("docstring") OT::Distribution::computeSurvivalFunction OT_Distribution_computeSurvivalFunction_doc %feature("docstring") OT::Distribution::computeInverseSurvivalFunction OT_Distribution_computeInverseSurvivalFunction_doc %feature("docstring") OT::Distribution::drawCDF OT_Distribution_drawCDF_doc %feature("docstring") OT::Distribution::drawMarginal1DCDF OT_Distribution_drawMarginal1DCDF_doc %feature("docstring") OT::Distribution::drawMarginal1DPDF OT_Distribution_drawMarginal1DPDF_doc %feature("docstring") OT::Distribution::drawMarginal1DLogPDF OT_Distribution_drawMarginal1DLogPDF_doc %feature("docstring") OT::Distribution::drawMarginal2DCDF OT_Distribution_drawMarginal2DCDF_doc %feature("docstring") OT::Distribution::drawMarginal2DPDF OT_Distribution_drawMarginal2DPDF_doc %feature("docstring") OT::Distribution::drawMarginal2DLogPDF OT_Distribution_drawMarginal2DLogPDF_doc %feature("docstring") OT::Distribution::drawPDF OT_Distribution_drawPDF_doc %feature("docstring") OT::Distribution::drawLogPDF OT_Distribution_drawLogPDF_doc %feature("docstring") OT::Distribution::drawQuantile OT_Distribution_drawQuantile_doc %feature("docstring") OT::Distribution::getCDFEpsilon OT_Distribution_getCDFEpsilon_doc %feature("docstring") OT::Distribution::getCenteredMoment OT_Distribution_getCenteredMoment_doc %feature("docstring") OT::Distribution::getShiftedMoment OT_Distribution_getShiftedMoment_doc %feature("docstring") OT::Distribution::getCholesky OT_Distribution_getCholesky_doc %feature("docstring") OT::Distribution::getCopula OT_Distribution_getCopula_doc %feature("docstring") OT::Distribution::getCorrelation OT_Distribution_getCorrelation_doc %feature("docstring") OT::Distribution::getCovariance OT_Distribution_getCovariance_doc %feature("docstring") OT::Distribution::getDescription OT_Distribution_getDescription_doc %feature("docstring") OT::Distribution::getDimension OT_Distribution_getDimension_doc %feature("docstring") OT::Distribution::getDispersionIndicator OT_Distribution_getDispersionIndicator_doc %feature("docstring") OT::Distribution::getInverseCholesky OT_Distribution_getInverseCholesky_doc %feature("docstring") OT::Distribution::getInverseIsoProbabilisticTransformation OT_Distribution_getInverseIsoProbabilisticTransformation_doc %feature("docstring") OT::Distribution::getIsoProbabilisticTransformation OT_Distribution_getIsoProbabilisticTransformation_doc %feature("docstring") OT::Distribution::getKendallTau OT_Distribution_getKendallTau_doc %feature("docstring") OT::Distribution::getKurtosis OT_Distribution_getKurtosis_doc %feature("docstring") OT::Distribution::getLinearCorrelation OT_Distribution_getLinearCorrelation_doc %feature("docstring") OT::Distribution::getMarginal OT_Distribution_getMarginal_doc %feature("docstring") OT::Distribution::getMean OT_Distribution_getMean_doc %feature("docstring") OT::Distribution::getMoment OT_Distribution_getMoment_doc %feature("docstring") OT::Distribution::getPDFEpsilon OT_Distribution_getPDFEpsilon_doc %feature("docstring") OT::Distribution::getParametersCollection OT_Distribution_getParametersCollection_doc %feature("docstring") OT::Distribution::setParameter OT_Distribution_setParameter_doc %feature("docstring") OT::Distribution::getParameter OT_Distribution_getParameter_doc %feature("docstring") OT::Distribution::getParameterDescription OT_Distribution_getParameterDescription_doc %feature("docstring") OT::Distribution::getParameterDimension OT_Distribution_getParameterDimension_doc %feature("docstring") OT::Distribution::getPearsonCorrelation OT_Distribution_getPearsonCorrelation_doc %feature("docstring") OT::Distribution::getPositionIndicator OT_Distribution_getPositionIndicator_doc %feature("docstring") OT::Distribution::getRange OT_Distribution_getRange_doc %feature("docstring") OT::Distribution::getRealization OT_Distribution_getRealization_doc %feature("docstring") OT::Distribution::getRoughness OT_Distribution_getRoughness_doc %feature("docstring") OT::Distribution::getSample OT_Distribution_getSample_doc %feature("docstring") OT::Distribution::getShapeMatrix OT_Distribution_getShapeMatrix_doc %feature("docstring") OT::Distribution::getSkewness OT_Distribution_getSkewness_doc %feature("docstring") OT::Distribution::getSpearmanCorrelation OT_Distribution_getSpearmanCorrelation_doc %feature("docstring") OT::Distribution::getStandardDeviation OT_Distribution_getStandardDeviation_doc %feature("docstring") OT::Distribution::getStandardDistribution OT_Distribution_getStandardDistribution_doc %feature("docstring") OT::Distribution::getStandardMoment OT_Distribution_getStandardMoment_doc %feature("docstring") OT::Distribution::getStandardRepresentative OT_Distribution_getStandardRepresentative_doc %feature("docstring") OT::Distribution::getSupport OT_Distribution_getSupport_doc %feature("docstring") OT::Distribution::getSingularities OT_Distribution_getSingularities_doc %feature("docstring") OT::Distribution::getProbabilities OT_Distribution_getProbabilities_doc %feature("docstring") OT::Distribution::hasEllipticalCopula OT_Distribution_hasEllipticalCopula_doc %feature("docstring") OT::Distribution::hasIndependentCopula OT_Distribution_hasIndependentCopula_doc %feature("docstring") OT::Distribution::isContinuous OT_Distribution_isContinuous_doc %feature("docstring") OT::Distribution::isCopula OT_Distribution_isCopula_doc %feature("docstring") OT::Distribution::isDiscrete OT_Distribution_isDiscrete_doc %feature("docstring") OT::Distribution::isElliptical OT_Distribution_isElliptical_doc %feature("docstring") OT::Distribution::isIntegral OT_Distribution_isIntegral_doc %feature("docstring") OT::Distribution::setDescription OT_Distribution_setDescription_doc %feature("docstring") OT::Distribution::setParametersCollection OT_Distribution_setParametersCollection_doc %feature("docstring") OT::Distribution::cos OT_Distribution_cos_doc %feature("docstring") OT::Distribution::sin OT_Distribution_sin_doc %feature("docstring") OT::Distribution::tan OT_Distribution_tan_doc %feature("docstring") OT::Distribution::acos OT_Distribution_acos_doc %feature("docstring") OT::Distribution::asin OT_Distribution_asin_doc %feature("docstring") OT::Distribution::atan OT_Distribution_atan_doc %feature("docstring") OT::Distribution::cosh OT_Distribution_cosh_doc %feature("docstring") OT::Distribution::sinh OT_Distribution_sinh_doc %feature("docstring") OT::Distribution::tanh OT_Distribution_tanh_doc %feature("docstring") OT::Distribution::acosh OT_Distribution_acosh_doc %feature("docstring") OT::Distribution::asinh OT_Distribution_asinh_doc %feature("docstring") OT::Distribution::atanh OT_Distribution_atanh_doc %feature("docstring") OT::Distribution::exp OT_Distribution_exp_doc %feature("docstring") OT::Distribution::log OT_Distribution_log_doc %feature("docstring") OT::Distribution::ln OT_Distribution_ln_doc %feature("docstring") OT::Distribution::inverse OT_Distribution_inverse_doc %feature("docstring") OT::Distribution::sqr OT_Distribution_sqr_doc %feature("docstring") OT::Distribution::sqrt OT_Distribution_sqrt_doc %feature("docstring") OT::Distribution::cbrt OT_Distribution_cbrt_doc %feature("docstring") OT::Distribution::abs OT_Distribution_abs_doc openturns-1.9/python/src/Domain.i000066400000000000000000000003761307543307100171220ustar00rootroot00000000000000// SWIG file Domain.i %{ #include "openturns/Domain.hxx" %} %include Domain_doc.i OTTypedInterfaceObjectHelper(Domain) %include openturns/Domain.hxx namespace OT { %extend Domain { Domain (const Domain & other) { return new OT::Domain(other); } } } openturns-1.9/python/src/DomainImplementation.i000066400000000000000000000005061307543307100220230ustar00rootroot00000000000000// SWIG file DomainImplementation.i %{ #include "openturns/DomainImplementation.hxx" %} %include DomainImplementation_doc.i %include openturns/DomainImplementation.hxx namespace OT { %extend DomainImplementation { DomainImplementation(const DomainImplementation & other) { return new OT::DomainImplementation(other); } } } openturns-1.9/python/src/DomainImplementation_doc.i.in000066400000000000000000000113431307543307100232560ustar00rootroot00000000000000%define OT_Domain_doc "Domain. Available constructors: Domain(*lowerBound, upperBound*) Parameters ---------- lowerBound, upperBound : sequence of float of dimension *dim* Define a finite :class:`interval ` :math:`[lowerBound_0, upperBound_0]\times \dots \times [lowerBound_{dim-1}, upperBound_{dim-1}]`. It is allowed to have :math:`lowerBound_i \geq upperBound_i` for some :math:`i`: it simply defines an empty interval. By default, an empty interval is created. Notes ----- A Domain object can be created through its derived classes: - :class:`~openturns.Mesh` - :class:`~openturns.RegularGrid` - :class:`~openturns.Interval` - :class:`~openturns.LevelSet` Examples -------- >>> import openturns as ot >>> # Create the interval [a, b] >>> a = 1 >>> b = 3 >>> print(ot.Domain([a], [b])) [1, 3] >>> print(ot.Domain(ot.Interval(a, b))) [1, 3]" %enddef %feature("docstring") OT::DomainImplementation OT_Domain_doc // --------------------------------------------------------------------- %define OT_Domain_contains_doc "Check if the given point is inside of the domain. Parameters ---------- point : sequence of float Point with the same dimension as the current domain's dimension. Returns ------- isInside : bool Flag telling whether the given point is inside of the domain." %enddef %feature("docstring") OT::DomainImplementation::contains OT_Domain_contains_doc // --------------------------------------------------------------------- %define OT_Domain_getDimension_doc "Get the dimension of the domain. Returns ------- dim : int Dimension of the domain." %enddef %feature("docstring") OT::DomainImplementation::getDimension OT_Domain_getDimension_doc // --------------------------------------------------------------------- %define OT_Domain_getLowerBound_doc "Get the lower bound of the domain. Returns ------- lower : :class:`~openturns.Point` The lower bound of an axes-aligned bounding box of the domain." %enddef %feature("docstring") OT::DomainImplementation::getLowerBound OT_Domain_getLowerBound_doc // --------------------------------------------------------------------- %define OT_Domain_getNumericalVolume_doc "Get the volume of the domain. Returns ------- volume : float Volume of the underlying mesh which is the discretization of the domain. For now, by default, it is equal to the geometrical volume." %enddef %feature("docstring") OT::DomainImplementation::getNumericalVolume OT_Domain_getNumericalVolume_doc // --------------------------------------------------------------------- %define OT_Domain_getUpperBound_doc "Get the upper bound of the domain. Returns ------- upper : :class:`~openturns.Point` The upper bound of an axes-aligned bounding box of the domain." %enddef %feature("docstring") OT::DomainImplementation::getUpperBound OT_Domain_getUpperBound_doc // --------------------------------------------------------------------- %define OT_Domain_getVolume_doc "Get the geometric volume of the domain. Returns ------- volume : float Geometrical volume of the domain." %enddef %feature("docstring") OT::DomainImplementation::getVolume OT_Domain_getVolume_doc // --------------------------------------------------------------------- %define OT_Domain_isEmpty_doc "Test whether the domain is empty or not. Returns ------- isInside : bool *True* if the interior of the geometric domain is empty." %enddef %feature("docstring") OT::DomainImplementation::isEmpty OT_Domain_isEmpty_doc // --------------------------------------------------------------------- %define OT_Domain_isNumericallyEmpty_doc "Check if the domain is numerically empty. Returns ------- isInside : bool Flag telling whether the domain is numerically empty, i.e. if its numerical volume is inferior or equal to :math:`\epsilon` (defined in the :class:`~openturns.ResourceMap`: :math:`\epsilon` = DomainImplementation-SmallVolume). Examples -------- >>> import openturns as ot >>> domain = ot.Domain([1.0, 2.0], [1.0, 2.0]) >>> print(domain.isNumericallyEmpty()) True" %enddef %feature("docstring") OT::DomainImplementation::isNumericallyEmpty OT_Domain_isNumericallyEmpty_doc // --------------------------------------------------------------------- %define OT_Domain_numericallyContains_doc "Check if the given point is inside of the discretization of the domain. Parameters ---------- point : sequence of float Point with the same dimension as the current domain's dimension. Returns ------- isInside : bool Flag telling whether the point is inside the discretized domain associated to the domain. For now, by default, the discretized domain is equal to the geometrical domain." %enddef %feature("docstring") OT::DomainImplementation::numericallyContains OT_Domain_numericallyContains_doc openturns-1.9/python/src/Domain_doc.i.in000066400000000000000000000014361307543307100203520ustar00rootroot00000000000000// Domain docstrings are defined in DomainImplementation_doc.i.in %feature("docstring") OT::Domain OT_Domain_doc %feature("docstring") OT::Domain::contains OT_Domain_contains_doc %feature("docstring") OT::Domain::getDimension OT_Domain_getDimension_doc %feature("docstring") OT::Domain::getLowerBound OT_Domain_getLowerBound_doc %feature("docstring") OT::Domain::getNumericalVolume OT_Domain_getNumericalVolume_doc %feature("docstring") OT::Domain::getUpperBound OT_Domain_getUpperBound_doc %feature("docstring") OT::Domain::getVolume OT_Domain_getVolume_doc %feature("docstring") OT::Domain::isEmpty OT_Domain_isEmpty_doc %feature("docstring") OT::Domain::isNumericallyEmpty OT_Domain_isNumericallyEmpty_doc %feature("docstring") OT::Domain::numericallyContains OT_Domain_numericallyContains_doc openturns-1.9/python/src/Drawable.i000066400000000000000000000014671307543307100174360ustar00rootroot00000000000000// SWIG file Drawable.i %{ #include "openturns/Drawable.hxx" %} %include Drawable_doc.i OTDefaultCollectionConvertFunctions(Drawable) OTTypedInterfaceObjectHelper(Drawable) OTTypedCollectionInterfaceObjectHelper(Drawable) %include openturns/Drawable.hxx %pythoncode %{ def Drawable__repr_svg_(self): """Get the SVG representation.""" from .viewer import ToSVGString return ToSVGString(self) Drawable._repr_svg_ = Drawable__repr_svg_ def Drawable__repr_html_(self): """Get the HTML representation.""" raise NotImplementedError Drawable._repr_html_ = Drawable__repr_html_ %} namespace OT{ %extend Drawable { Drawable(const Drawable & other) { return new OT::Drawable(other); } Drawable(PyObject * pyObj) { return new OT::Drawable( OT::convert(pyObj) ); } } } openturns-1.9/python/src/DrawableImplementation.i000066400000000000000000000014031307543307100223320ustar00rootroot00000000000000// SWIG file DrawableImplementation.i %{ #include "openturns/DrawableImplementation.hxx" %} %include DrawableImplementation_doc.i %include openturns/DrawableImplementation.hxx %pythoncode %{ def DrawableImplementation__repr_svg_(self): """Get the SVG representation.""" from .viewer import ToSVGString return ToSVGString(self) DrawableImplementation._repr_svg_ = DrawableImplementation__repr_svg_ def DrawableImplementation__repr_html_(self): """Get the HTML representation.""" raise NotImplementedError DrawableImplementation._repr_html_ = DrawableImplementation__repr_html_ %} namespace OT { %extend DrawableImplementation { DrawableImplementation(const DrawableImplementation & other) { return new OT::DrawableImplementation(other); } } } openturns-1.9/python/src/DrawableImplementation_doc.i.in000066400000000000000000000667571307543307100236130ustar00rootroot00000000000000%define OT_Drawable_doc "Drawable object. Notes ----- In OpenTURNS a Drawable is a drawable element described by: - its data, - its attributes: color, line stype, point style, fill style, legend ... The different drawable elements are: - :class:`~openturns.BarPlot` - :class:`~openturns.Cloud` - :class:`~openturns.Contour` - :class:`~openturns.Curve` - :class:`~openturns.Pairs` - :class:`~openturns.Pie` - :class:`~openturns.Polygon` - :class:`~openturns.Staircase` - :class:`~openturns.Text` Examples -------- >>> import openturns as ot >>> myGraph = ot.Graph('Normal sample', 'x1', 'x2', True, 'topright') >>> sample = ot.Normal([0.0,0.0], [1.0,1.0], ot.CorrelationMatrix(2)).getSample(10) >>> myCloud = ot.Cloud(sample, 'blue', 'fsquare', 'A Cloud') >>> myGraph.add(myCloud)" %enddef %feature("docstring") OT::DrawableImplementation OT_Drawable_doc // --------------------------------------------------------------------- %define OT_Drawable_getLegend_doc "Accessor to the legend of the drawable element. Returns ------- legend : str Legend of the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::getLegend OT_Drawable_getLegend_doc // --------------------------------------------------------------------- %define OT_Drawable_setLegend_doc "Accessor to the legend of the drawable element. Parameters ---------- legend : str Legend of the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::setLegend OT_Drawable_setLegend_doc // --------------------------------------------------------------------- %define OT_Drawable_getPalette_doc "Accessor to the names of the colors used for the Pie. Returns ------- palette : :class:`~openturns.Description` Names of the colors used for the :class:`~openturns.Pie`. It can be either the name of a color (e.g. 'red') or an hexadecimal code corresponding to the RGB (Red, Green, Blue) components of the color (e.g. '#A1B2C3') or the RGBA (Red, Green, Blue, Alpha) components of the color (e.g. '#A1B2C3D4')." %enddef %feature("docstring") OT::DrawableImplementation::getPalette OT_Drawable_getPalette_doc // --------------------------------------------------------------------- %define OT_Drawable_setPalette_doc "Accessor to the names of the colors used for the Pie. Parameters ---------- palette : sequence of str Names of the colors used for the :class:`~openturns.Pie`. It can be either the name of a color (e.g. 'red') or an hexadecimal code corresponding to the RGB (Red, Green, Blue) components of the color (e.g. '#A1B2C3') or the RGBA (Red, Green, Blue, Alpha) components of the color (e.g. '#A1B2C3D4'). Use :meth:`GetValidColors` for a list of available values." %enddef %feature("docstring") OT::DrawableImplementation::setPalette OT_Drawable_setPalette_doc // --------------------------------------------------------------------- %define OT_Drawable_BuildDefaultPalette_doc "Build default palette. Parameters ---------- n : int :math:`n > 0` Number of colors needed. Returns ------- listColors : :class:`~openturns.Description` List of n color codes defined according to the default OpenTURNS palette. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().BuildDefaultPalette(4)) [#ff0000,#ccff00,#00ff66,#0066ff]" %enddef %feature("docstring") OT::DrawableImplementation::BuildDefaultPalette OT_Drawable_BuildDefaultPalette_doc // --------------------------------------------------------------------- %define OT_Drawable_getColor_doc "Accessor to the color of the drawable element. Returns ------- color : str Name of the color of the lines within the drawable element. It can be either the name of a color (e.g. 'red') or an hexadecimal code corresponding to the RGB (Red, Green, Blue) components of the color (e.g. '#A1B2C3') or the RGBA (Red, Green, Blue, Alpha) components of the color (e.g. '#A1B2C3D4'). The alpha channel is taken into account only by the PDF and PNG formats, for the other format the color is fully transparent as soon as its alpha channel is less than 255 (or 1.0). Use :meth:`GetValidColors` for a list of available values. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().getColor()) blue See Also -------- setColor, GetValidColors, getColorCode" %enddef %feature("docstring") OT::DrawableImplementation::getColor OT_Drawable_getColor_doc // --------------------------------------------------------------------- %define OT_Drawable_setColor_doc "Accessor to the color of the drawable element. Parameters ---------- color : str Describes the color of the lines within the drawable element. It can be either the name of a color (e.g. 'red') or an hexadecimal code corresponding to the RGB (Red, Green, Blue) components of the color (e.g. '#A1B2C3') or the RGBA (Red, Green, Blue, Alpha) components of the color (e.g. '#A1B2C3D4'). The alpha channel is taken into account only by the PDF and PNG formats, for the other format the color is fully transparent as soon as its alpha channel is less than 255 (or 1.0). Use :meth:`GetValidColors` for a list of available values. See Also -------- getColor, GetValidColors, getColorCode" %enddef %feature("docstring") OT::DrawableImplementation::setColor OT_Drawable_setColor_doc // --------------------------------------------------------------------- %define OT_Drawable_getColorCode_doc "Accessor to the code of the color of the drawable element. Returns ------- color : str Hexadecimal code corresponding to the RGB (Red, Green, Blue) components of the color of the lines within the drawable element or the RGBA (Red, Green, Blue, Alpha) components of the color. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().getColorCode()) #0000FF See Also -------- setColor, getColor, GetValidColors, setColorCode" %enddef %feature("docstring") OT::DrawableImplementation::getColorCode OT_Drawable_getColorCode_doc // --------------------------------------------------------------------- %define OT_Drawable_GetValidColors_doc "Return the list of the valid colors of the drawable element. Returns ------- validColors : :class:`~openturns.Description` List of the valid colors of the drawable element. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.GetValidColors()[:5]) [aliceblue,antiquewhite,antiquewhite1,antiquewhite2,antiquewhite3]" %enddef %feature("docstring") OT::DrawableImplementation::GetValidColors OT_Drawable_GetValidColors_doc // --------------------------------------------------------------------- %define OT_Drawable_getEdgeColor_doc "Accessor to the color of the Polygon edge. Returns ------- edgeColor : str Color of the edge of the :class:`~openturns.Polygon`." %enddef %feature("docstring") OT::DrawableImplementation::getEdgeColor OT_Drawable_getEdgeColor_doc // --------------------------------------------------------------------- %define OT_Drawable_getFillStyle_doc "Accessor to the fill style of the drawable element. Returns ------- fillStyle : str Fill style of the surfaces within the drawable element. Use :meth:`GetValidFillStyles` for a list of available values. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().getFillStyle()) solid" %enddef %feature("docstring") OT::DrawableImplementation::getFillStyle OT_Drawable_getFillStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_setFillStyle_doc "Accessor to the fill style of the drawable element. Parameters ---------- fillStyle : str Fill style of the surfaces within the drawable element. Use :meth:`GetValidFillStyles` for a list of available values." %enddef %feature("docstring") OT::DrawableImplementation::setFillStyle OT_Drawable_setFillStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_GetValidFillStyles_doc "Return the list of the valid fill styles of the drawable element. Returns ------- validFillStyles : :class:`~openturns.Description` List of the valid fill styles of the drawable element. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.GetValidFillStyles()[:2]) [solid,shaded] " %enddef %feature("docstring") OT::DrawableImplementation::GetValidFillStyles OT_Drawable_GetValidFillStyles_doc // --------------------------------------------------------------------- %define OT_Drawable_getLineWidth_doc "Accessor to the line width of the drawable element. Returns ------- lineWidth : int Width of the line within the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::getLineWidth OT_Drawable_getLineWidth_doc // --------------------------------------------------------------------- %define OT_Drawable_setLineWidth_doc "Accessor to the line width of the drawable element. Parameters ---------- lineWidth : positive int Width of the line within the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::setLineWidth OT_Drawable_setLineWidth_doc // --------------------------------------------------------------------- %define OT_Drawable_getLineStyle_doc "Accessor to the line style of the drawable element. Returns ------- lineStyle : str Style of the line within the drawable element. Use :meth:`GetValidLineStyles` for a list of available values. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().getLineStyle()) solid" %enddef %feature("docstring") OT::DrawableImplementation::getLineStyle OT_Drawable_getLineStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_setLineStyle_doc "Accessor to the line style of the drawable element. Parameters ---------- lineStyle : str Style of the line within the drawable element. Use :meth:`GetValidLineStyles` for a list of available values." %enddef %feature("docstring") OT::DrawableImplementation::setLineStyle OT_Drawable_setLineStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_GetValidLineStyles_doc "Return the list of the valid line styles of the drawable element. Returns ------- validLineStyles : :class:`~openturns.Description` List of the valid line styles of the drawable element. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.GetValidLineStyles()) [blank,solid,dashed,dotted,dotdash,longdash,twodash]" %enddef %feature("docstring") OT::DrawableImplementation::GetValidLineStyles OT_Drawable_GetValidLineStyles_doc // --------------------------------------------------------------------- %define OT_Drawable_getPointStyle_doc "Accessor to the point style of the drawable element. Returns ------- pointStyle : str Style of the points within the drawable element. Use :meth:GetValidPointStyles for a list of available values. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().getPointStyle()) none" %enddef %feature("docstring") OT::DrawableImplementation::getPointStyle OT_Drawable_getPointStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_setPointStyle_doc "Accessor to the point style of the drawable element. Parameters ---------- pointStyle : str Style of the points within the drawable element. Use :meth:`GetValidPointStyles` for a list of available values." %enddef %feature("docstring") OT::DrawableImplementation::setPointStyle OT_Drawable_setPointStyle_doc // --------------------------------------------------------------------- %define OT_Drawable_GetValidPointStyles_doc "Return the list of the valid point styles of the drawable element. Returns ------- validPointStyles : :class:`~openturns.Description` List of the valid point styles of the drawable element. Examples -------- >>> import openturns as ot >>> print(ot.Drawable().GetValidPointStyles()[:5]) [bullet,circle,diamond,dot,fcircle]" %enddef %feature("docstring") OT::DrawableImplementation::GetValidPointStyles OT_Drawable_GetValidPointStyles_doc // --------------------------------------------------------------------- %define OT_Drawable_getPointCode_doc "Accessor to the code of the points style. Parameters ---------- pointStyle : str Style point to be changed in code. Returns ------- code : int Code of the style of the points within the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::getPointCode OT_Drawable_getPointCode_doc // --------------------------------------------------------------------- %define OT_Drawable_getLabels_doc "Accessor to the labels of data. Returns ------- labels : :class:`~openturns.Description` Describes the data within the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::getLabels OT_Drawable_getLabels_doc // --------------------------------------------------------------------- %define OT_Drawable_setLabels_doc "Accessor to the labels of data. Parameters ---------- labels : sequence of str Describes the data within the drawable element." %enddef %feature("docstring") OT::DrawableImplementation::setLabels OT_Drawable_setLabels_doc // --------------------------------------------------------------------- %define OT_Drawable_getDrawLabels_doc "Accessor to the indication of data labels' presence within the drawable element. Returns ------- drawLabels : bool *True* to draw the data labels, *False* to hide them." %enddef %feature("docstring") OT::DrawableImplementation::getDrawLabels OT_Drawable_getDrawLabels_doc // --------------------------------------------------------------------- %define OT_Drawable_setDrawLabels_doc "Accessor to the indication of data labels' presence within the drawable element. Parameters ---------- drawLabels : bool *True* to draw the data labels, *False* to hide them." %enddef %feature("docstring") OT::DrawableImplementation::setDrawLabels OT_Drawable_setDrawLabels_doc // --------------------------------------------------------------------- %define OT_Drawable_getX_doc "Accessor to the first coordinate. Returns ------- firstCoord : :class:`~openturns.Sample` Values of the first coordinate." %enddef %feature("docstring") OT::DrawableImplementation::getX OT_Drawable_getX_doc // --------------------------------------------------------------------- %define OT_Drawable_setX_doc "Accessor to the first coordinate. Parameters ---------- firstCoord : 2-d sequence of float Values of the first coordinate." %enddef %feature("docstring") OT::DrawableImplementation::setX OT_Drawable_setX_doc // --------------------------------------------------------------------- %define OT_Drawable_getY_doc "Accessor to the second coordinate. Returns ------- secondCoord : :class:`~openturns.Sample` Values of the second coordinate." %enddef %feature("docstring") OT::DrawableImplementation::getY OT_Drawable_getY_doc // --------------------------------------------------------------------- %define OT_Drawable_setY_doc "Accessor to the second coordinate. Parameters ---------- secondCoord : 2-d sequence of float Values of the second coordinate." %enddef %feature("docstring") OT::DrawableImplementation::setY OT_Drawable_setY_doc // --------------------------------------------------------------------- %define OT_Drawable_getData_doc "Accessor to the data from which the Drawable is built. Returns ------- data : :class:`~openturns.Sample` Data from which the Drawable is built." %enddef %feature("docstring") OT::DrawableImplementation::getData OT_Drawable_getData_doc // --------------------------------------------------------------------- %define OT_Drawable_getBoundingBox_doc "Accessor to the bounding box of the whole plot. Returns ------- boundingBox : :class:`~openturns.Point` of dimension 4 Bounding box of the drawable element, which is a rectangle determined by its range along X and its range along Y. The *boundingBox* is :math:`(x_{min}, x_{max}, y_{min}, y_{max})`." %enddef %feature("docstring") OT::DrawableImplementation::getBoundingBox OT_Drawable_getBoundingBox_doc // --------------------------------------------------------------------- %define OT_Drawable_getCenter_doc "Accessor to the center of the Pie inside the bounding box. Returns ------- center : :class:`~openturns.Point` Center of the :class:`~openturns.Pie` inside the bounding box." %enddef %feature("docstring") OT::DrawableImplementation::getCenter OT_Drawable_getCenter_doc // --------------------------------------------------------------------- %define OT_Drawable_setCenter_doc "Accessor to the center of the Pie inside the bounding box. Parameters ---------- center : sequence of float Center of the :class:`~openturns.Pie` inside the bounding box." %enddef %feature("docstring") OT::DrawableImplementation::setCenter OT_Drawable_setCenter_doc // --------------------------------------------------------------------- %define OT_Drawable_getRadius_doc "Accessor to the radius of the Pie. Returns ------- radius : float Radius of the :class:`~openturns.Pie`." %enddef %feature("docstring") OT::DrawableImplementation::getRadius OT_Drawable_getRadius_doc // --------------------------------------------------------------------- %define OT_Drawable_setRadius_doc "Accessor to the radius of the Pie. Parameters ---------- radius : float Radius of the :class:`~openturns.Pie`." %enddef %feature("docstring") OT::DrawableImplementation::setRadius OT_Drawable_setRadius_doc // --------------------------------------------------------------------- %define OT_Drawable_getOrigin_doc "Accessor to the origin of the BarPlot. Returns ------- origin : float Value where the :class:`~openturns.BarPlot` begins." %enddef %feature("docstring") OT::DrawableImplementation::getOrigin OT_Drawable_getOrigin_doc // --------------------------------------------------------------------- %define OT_Drawable_setOrigin_doc "Accessor to the origin of the BarPlot. Parameters ---------- origin : float Value where the :class:`~openturns.BarPlot` begins." %enddef %feature("docstring") OT::DrawableImplementation::setOrigin OT_Drawable_setOrigin_doc // --------------------------------------------------------------------- %define OT_Drawable_getLevels_doc "Accessor to the levels of the Contour. Returns ------- levels : :class:`~openturns.Point` Different levels where the iso-curves of the :class:`~openturns.Contour` will be drawn." %enddef %feature("docstring") OT::DrawableImplementation::getLevels OT_Drawable_getLevels_doc // --------------------------------------------------------------------- %define OT_Drawable_setLevels_doc "Accessor to the levels of the Contour. Parameters ---------- levels : sequence of float Different levels where the iso-curves of the :class:`~openturns.Contour` will be drawn." %enddef %feature("docstring") OT::DrawableImplementation::setLevels OT_Drawable_setLevels_doc // --------------------------------------------------------------------- %define OT_Drawable_getPattern_doc "Accessor to the pattern of the Staircase. Returns ------- pattern : str Pattern of the :class:`~openturns.Staircase` which is 'S' or 's'. By default the pattern is equal to 's'. Going from :math:`(x_1, y_1)` to :math:`(x_2, y_2)` with :math:`x_1>> import openturns as ot >>> print(ot.Drawable.ConvertFromRGB(255,0,0)) #ff0000" %enddef %feature("docstring") OT::DrawableImplementation::ConvertFromRGB OT_Drawable_ConvertFromRGB_doc // --------------------------------------------------------------------- %define OT_Drawable_ConvertFromRGBA_doc "Convert an RGBA quadruplet to a valid hexadecimal code. Parameters ---------- red, green and blue : either three nonnegative integers or three nonnegative floats These values are the Red, Green and Blue components of a color, a value of 0 (or 0.0) meaning that the component is absent in the color, a value of 255 (or 1.0) meaning that the component is fully saturated. alpha : either nonnegative integer or nonnegative float Level of the color's transparency, 0 (or 0.0) meaning that the color is fully transparent and 255 (or 1.0) meaning that the color is fully opaque. The alpha channel is only supported by a few devices, namely the PDF and PNG formats, for the other format the color is fully transparent as soon as its alpha channel is less than 255 (or 1.0). Returns ------- code : str Hexadecimal code of the color. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.ConvertFromRGBA(255,0,0,255)) #ff0000ff" %enddef %feature("docstring") OT::DrawableImplementation::ConvertFromRGBA OT_Drawable_ConvertFromRGBA_doc // --------------------------------------------------------------------- %define OT_Drawable_ConvertFromName_doc "Convert a color name to a valid hexadecimal code. Parameters ---------- name : str Name of the color. The valid color names are given by the :meth:`GetValidColors` method. Returns ------- code : str Hexadecimal code of the color. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.ConvertFromName('red')) #FF0000" %enddef %feature("docstring") OT::DrawableImplementation::ConvertFromName OT_Drawable_ConvertFromName_doc // --------------------------------------------------------------------- %define OT_Drawable_ConvertToRGB_doc "Convert an hexadecimal code into an RGB triplet. Parameters ---------- code : str Hexadecimal code of the color. Returns ------- RGBComponents : :class:`~openturns.Indices` List containing the RGB (Red, Green and Blue) components of the color. A value of 0 meaning that the component is absent in the color, a value of 255 meaning that the component is fully saturated. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.ConvertToRGB('#ff0000')) [255,0,0]" %enddef %feature("docstring") OT::DrawableImplementation::ConvertToRGB OT_Drawable_ConvertToRGB_doc // --------------------------------------------------------------------- %define OT_Drawable_ConvertToRGBA_doc "Convert an hexadecimal code into an RGBA quadruplet. Parameters ---------- code : str Hexadecimal code of the color. Returns ------- RGBAComponents : :class:`~openturns.Indices` List containing the RGB (Red, Green and Blue) components. A value of 0 meaning that the component is absent in the color, a value of 255 meaning that the component is fully saturated. It contains also alpha, the level of transparency of the color. Alpha equal to 0 meaning that the color is fully transparent and 255 meaning that the color is fully opaque. Examples -------- >>> import openturns as ot >>> print(ot.Drawable.ConvertToRGBA('#ff0000')) [255,0,0,255]" %enddef %feature("docstring") OT::DrawableImplementation::ConvertToRGBA OT_Drawable_ConvertToRGBA_doc openturns-1.9/python/src/Drawable_doc.i.in000066400000000000000000000105251307543307100206630ustar00rootroot00000000000000// Drawable docstrings are defined in DrawableImplementation_doc.i.in %feature("docstring") OT::Drawable OT_Drawable_doc %feature("docstring") OT::Drawable::getLegend OT_Drawable_getLegend_doc %feature("docstring") OT::Drawable::setLegend OT_Drawable_setLegend_doc %feature("docstring") OT::Drawable::getPalette OT_Drawable_getPalette_doc %feature("docstring") OT::Drawable::setPalette OT_Drawable_setPalette_doc %feature("docstring") OT::Drawable::BuildDefaultPalette OT_Drawable_BuildDefaultPalette_doc %feature("docstring") OT::Drawable::getColor OT_Drawable_getColor_doc %feature("docstring") OT::Drawable::setColor OT_Drawable_setColor_doc %feature("docstring") OT::Drawable::getColorCode OT_Drawable_getColorCode_doc %feature("docstring") OT::Drawable::GetValidColors OT_Drawable_GetValidColors_doc %feature("docstring") OT::Drawable::getEdgeColor OT_Drawable_getEdgeColor_doc %feature("docstring") OT::Drawable::getFillStyle OT_Drawable_getFillStyle_doc %feature("docstring") OT::Drawable::setFillStyle OT_Drawable_setFillStyle_doc %feature("docstring") OT::Drawable::GetValidFillStyles OT_Drawable_GetValidFillStyles_doc %feature("docstring") OT::Drawable::getLineWidth OT_Drawable_getLineWidth_doc %feature("docstring") OT::Drawable::setLineWidth OT_Drawable_setLineWidth_doc %feature("docstring") OT::Drawable::getLineStyle OT_Drawable_getLineStyle_doc %feature("docstring") OT::Drawable::setLineStyle OT_Drawable_setLineStyle_doc %feature("docstring") OT::Drawable::GetValidLineStyles OT_Drawable_GetValidLineStyles_doc %feature("docstring") OT::Drawable::getPointStyle OT_Drawable_getPointStyle_doc %feature("docstring") OT::Drawable::setPointStyle OT_Drawable_setPointStyle_doc %feature("docstring") OT::Drawable::GetValidPointStyles OT_Drawable_GetValidPointStyles_doc %feature("docstring") OT::Drawable::getPointCode OT_Drawable_getPointCode_doc %feature("docstring") OT::Drawable::getLabels OT_Drawable_getLabels_doc %feature("docstring") OT::Drawable::setLabels OT_Drawable_setLabels_doc %feature("docstring") OT::Drawable::getDrawLabels OT_Drawable_getDrawLabels_doc %feature("docstring") OT::Drawable::setDrawLabels OT_Drawable_setDrawLabels_doc %feature("docstring") OT::Drawable::getX OT_Drawable_getX_doc %feature("docstring") OT::Drawable::setX OT_Drawable_setX_doc %feature("docstring") OT::Drawable::getY OT_Drawable_getY_doc %feature("docstring") OT::Drawable::setY OT_Drawable_setY_doc %feature("docstring") OT::Drawable::getData OT_Drawable_getData_doc %feature("docstring") OT::Drawable::getBoundingBox OT_Drawable_getBoundingBox_doc %feature("docstring") OT::Drawable::getCenter OT_Drawable_getCenter_doc %feature("docstring") OT::Drawable::setCenter OT_Drawable_setCenter_doc %feature("docstring") OT::Drawable::getRadius OT_Drawable_getRadius_doc %feature("docstring") OT::Drawable::setRadius OT_Drawable_setRadius_doc %feature("docstring") OT::Drawable::getOrigin OT_Drawable_getOrigin_doc %feature("docstring") OT::Drawable::setOrigin OT_Drawable_setOrigin_doc %feature("docstring") OT::Drawable::getLevels OT_Drawable_getLevels_doc %feature("docstring") OT::Drawable::setLevels OT_Drawable_setLevels_doc %feature("docstring") OT::Drawable::getTextAnnotations OT_Drawable_getTextAnnotations_doc %feature("docstring") OT::Drawable::setTextAnnotations OT_Drawable_setTextAnnotations_doc %feature("docstring") OT::Drawable::getTextPositions OT_Drawable_getTextPositions_doc %feature("docstring") OT::Drawable::setTextPositions OT_Drawable_setTextPositions_doc %feature("docstring") OT::Drawable::getPattern OT_Drawable_getPattern_doc %feature("docstring") OT::Drawable::setPattern OT_Drawable_setPattern_doc %feature("docstring") OT::Drawable::draw OT_Drawable_draw_doc %feature("docstring") OT::Drawable::clean OT_Drawable_clean_doc %feature("docstring") OT::Drawable::ConvertFromHSV OT_Drawable_ConvertFromHSV_doc %feature("docstring") OT::Drawable::ConvertFromHSVA OT_Drawable_ConvertFromHSVA_doc %feature("docstring") OT::Drawable::ConvertFromHSVIntoRGB OT_Drawable_ConvertFromHSVIntoRGB_doc %feature("docstring") OT::Drawable::ConvertFromRGB OT_Drawable_ConvertFromRGB_doc %feature("docstring") OT::Drawable::ConvertFromRGBA OT_Drawable_ConvertFromRGBA_doc %feature("docstring") OT::Drawable::ConvertFromName OT_Drawable_ConvertFromName_doc %feature("docstring") OT::Drawable::ConvertToRGB OT_Drawable_ConvertToRGB_doc %feature("docstring") OT::Drawable::ConvertToRGBA OT_Drawable_ConvertToRGBA_doc openturns-1.9/python/src/DualLinearCombinationEvaluation.i000066400000000000000000000006371307543307100241460ustar00rootroot00000000000000// SWIG file DualLinearCombinationEvaluation.i %{ #include "openturns/DualLinearCombinationEvaluation.hxx" %} %include DualLinearCombinationEvaluation_doc.i %include openturns/DualLinearCombinationEvaluation.hxx namespace OT { %extend DualLinearCombinationEvaluation { DualLinearCombinationEvaluation(const DualLinearCombinationEvaluation & other) { return new OT::DualLinearCombinationEvaluation(other); } } } openturns-1.9/python/src/DualLinearCombinationEvaluation_doc.i.in000066400000000000000000000044131307543307100253740ustar00rootroot00000000000000%feature("docstring") OT::DualLinearCombinationEvaluation "Dual linear combination evaluation implementation. Available constructors: DualLinearCombinationEvaluation(*scalarFctColl, vectCoefColl*) Parameters ---------- scalarFctColl : sequence of :class:`~openturns.Function` A collection of functions :math:`(f_i)_{i = 1, \ldots, l}` of size :math:`l`, such that :math:`\forall i \in \{1, \ldots, l\}`, :math:`f_i : \Rset^n \rightarrow \Rset`. vectCoefColl : 2-d sequence of float Sample :math:`\cC = \{\vect{c}_1, \ldots, \vect{c}_l \}` of size :math:`l` and dimension :math:`p`. See also -------- Function, AggregatedEvaluation, DatabaseEvaluation, LinearFunction Notes ----- It returns a :class:`~openturns.Function` which is the function :math:`f: \Rset^n \rightarrow \Rset^p` defined as the linear combination of the functions :math:`f_i` with vector coefficients in :math:`\cC`: .. math:: \forall \vect{x} \in \Rset^n, f(\vect{x}) = \left\{ \sum_{i=1}^l f_i( \vect{x} ) c_i^{(j)} \right\}_{j = 1, \ldots, p} " // --------------------------------------------------------------------- %feature("docstring") OT::DualLinearCombinationEvaluation::getCoefficients "Accessor to the coefficients. Returns ------- coef : :class:`~openturns.Sample` The vectorial coefficients :math:`\cC = \{\vect{c}_1, \ldots, \vect{c}_l \}` which define the linear combination of :math:`f`." // --------------------------------------------------------------------- %feature("docstring") OT::DualLinearCombinationEvaluation::getFunctionsCollection "Accessor to the collection of functions. Returns ------- fctColl : :class:`~openturns.FunctionCollection` The collection of scalar functions :math:`(f_i)_{i = 1, \ldots, l}` which defines the linear combination of :math:`f`." // --------------------------------------------------------------------- %feature("docstring") OT::DualLinearCombinationEvaluation::setFunctionsCollectionAndCoefficients "Accessor to the coefficients and the collection of functions. Parameters ---------- scalarFctColl : sequence of :class:`~openturns.Function` The collection of functions :math:`(f_i)_{i = 1, \ldots, l}`. vectCoefColl : 2-d sequence of float The sample of coefficients :math:`\cC = \{\vect{c}_1, \ldots, \vect{c}_l \}`." openturns-1.9/python/src/DualLinearCombinationFunction.i000066400000000000000000000006161307543307100236210ustar00rootroot00000000000000// SWIG file DualLinearCombinationFunction.i %{ #include "openturns/DualLinearCombinationFunction.hxx" %} %include DualLinearCombinationFunction_doc.i %include openturns/DualLinearCombinationFunction.hxx namespace OT { %extend DualLinearCombinationFunction { DualLinearCombinationFunction(const DualLinearCombinationFunction & other) { return new OT::DualLinearCombinationFunction(other); } } } openturns-1.9/python/src/DualLinearCombinationFunction_doc.i.in000066400000000000000000000015351307543307100250540ustar00rootroot00000000000000%feature("docstring") OT::DualLinearCombinationFunction "Linear combination of functions with vectorial weights. Allows to create a function which is the linear combination of scalar functions with vectorial weights. Parameters ---------- functionCollection : sequence of :class:`~openturns.Function` Collection of functions. vectorCoefficientColl : 2-d sequence of float Collection of vectorial weights. Examples -------- >>> import openturns as ot >>> functions = list() >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1 + 2 * x2 + x3'])) >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1^2 + x2'])) >>> myFunction = ot.DualLinearCombinationFunction(functions, [[2.0, 4.0], [3.0, 1.0]]) >>> print(myFunction([1, 2, 3])) [25,35] " openturns-1.9/python/src/DualLinearCombinationGradient.i000066400000000000000000000006161307543307100235710ustar00rootroot00000000000000// SWIG file DualLinearCombinationGradient.i %{ #include "openturns/DualLinearCombinationGradient.hxx" %} %include DualLinearCombinationGradient_doc.i %include openturns/DualLinearCombinationGradient.hxx namespace OT { %extend DualLinearCombinationGradient { DualLinearCombinationGradient(const DualLinearCombinationGradient & other) { return new OT::DualLinearCombinationGradient(other); } } } openturns-1.9/python/src/DualLinearCombinationGradient_doc.i.in000066400000000000000000000010051307543307100250140ustar00rootroot00000000000000%feature("docstring") OT::DualLinearCombinationGradient "Dual linear combination gradient implementation. Available constructors: DualLinearCombinationGradient(*myDLCEI*) Parameters ---------- myDLCEI : :class:`~openturns.DualLinearCombinationEvaluation` A dual linear combination evaluation implementation. See also -------- DualLinearCombinationEvaluation, DualLinearCombinationHessian Notes ----- It returns the implementation of the gradient. By default, the analytical gradient is implemented." openturns-1.9/python/src/DualLinearCombinationHessian.i000066400000000000000000000006061307543307100234250ustar00rootroot00000000000000// SWIG file DualLinearCombinationHessian.i %{ #include "openturns/DualLinearCombinationHessian.hxx" %} %include DualLinearCombinationHessian_doc.i %include openturns/DualLinearCombinationHessian.hxx namespace OT { %extend DualLinearCombinationHessian { DualLinearCombinationHessian(const DualLinearCombinationHessian & other) { return new OT::DualLinearCombinationHessian(other); } } } openturns-1.9/python/src/DualLinearCombinationHessian_doc.i.in000066400000000000000000000010011307543307100246450ustar00rootroot00000000000000%feature("docstring") OT::DualLinearCombinationHessian "Dual linear combination hessian implementation. Available constructors: DualLinearCombinationHessian(*myDLCEI*) Parameters ---------- myDLCEI : :class:`~openturns.DualLinearCombinationEvaluation` A dual linear combination evaluation implementation. See also -------- DualLinearCombinationEvaluation, DualLinearCombinationGradient Notes ----- It returns the implementation of the hessian. By default, the analytical hessian is implemented." openturns-1.9/python/src/EfficientGlobalOptimization.i000066400000000000000000000005761307543307100233410ustar00rootroot00000000000000// SWIG file EfficientGlobalOptimization.i %{ #include "openturns/EfficientGlobalOptimization.hxx" %} %include EfficientGlobalOptimization_doc.i %include openturns/EfficientGlobalOptimization.hxx namespace OT{ %extend EfficientGlobalOptimization { EfficientGlobalOptimization(const EfficientGlobalOptimization & other) { return new OT::EfficientGlobalOptimization(other); } } } openturns-1.9/python/src/EfficientGlobalOptimization_doc.i.in000066400000000000000000000247431307543307100245750ustar00rootroot00000000000000%feature("docstring") OT::EfficientGlobalOptimization "Efficient Global Optimization algorithm. The EGO algorithm [Jones1998]_ is an adaptative optimization method based on kriging. An initial design of experiment is used to build a first metamodel. At each iteration a new point that maximizes a criterion is chosen as optimizer candidate. The criterion uses a tradeoff between the metamodel value and the conditional variance. Then the new point is evaluated using the original model and the metamodel is relearnt on the extended design of experiment. Available constructors: EfficientGlobalOptimization(*problem, krigingResult*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` The optimization problem to solve optionally, a 2nd objective marginal can be used as noise krigingResult : :class:`~openturns.KrigingResult` The result of the meta-model on the first design of experiment Notes ----- Each point added to the metamodel design seeks to improve the current minimum. We chose the point so as to maximize an improvement criterion based on the metamodel. .. math:: I(x_{new}) = max(f_{min} - Y_{new}, 0) The default criteria is called EI (Expected Improvement) and aims at maximizing the mean improvement: .. math:: \mathbb{E}\left[I(x_{new})\right] = \mathbb{E}\left[max(f_{min} - Y_{new}, 0)\right] This criterion is explicited using the kriging mean and variance: .. math:: \mathbb{E}\left[I(x_{new})\right] = (f_{min} - m_K(x_{new})) \Phi\left( \frac{f_{min} - m_K(x_{new})}{s_K(x_{new})} \right) + s_K(x_{new}) \phi\left( \frac{f_{min} - m_K(x_{new})}{s_K(x_{new})} \right) An observation noise variance can be provided thanks to a 2nd objective marginal. .. math:: Y_{obs} = Y(x) + \sigma_{\epsilon}(x) \epsilon In that case the AEI (Augmented Expected Improvement) formulation is used. As we don't have access to the real minimum of the function anymore a quantile of the kriging prediction is used, with the constant :math:`c`: .. math:: u(x) = m_K(x) + c s_K(x) This criterion is minimized over the design points: .. math:: x_{min} = \argmax_{x_i} (u(x_i)) The AEI criterion reads: .. math:: AEI(x_{new}) = \mathbb{E}\left[max(m_K(x_{min}) - Y_{new}, 0)\right] \times \left(1 - \frac{\sigma_{\epsilon}(x_{new})}{\sqrt{\sigma_{\epsilon}^2(x_{new})+s^2_K(x_{new})}} \right) with .. math:: \mathbb{E}\left[max(m_K(x_{min}) - Y_{new}, 0)\right] = (m_K(x_{min}) - m_K(x_{new})) \Phi\left( \frac{m_K(x_{min}) - m_K(x_{new})}{s_K(x_{new})} \right) + s_K(x_{new}) \phi\left( \frac{m_K(x_{min}) - m_K(x_{new})}{s_K(x_{new})} \right) A less computationally expensive noise function can be provided through :func:`setNoiseModel()` to evaluate :math:`\sigma^2_{\epsilon}(x)` for the improvement criterion optimization, the objective being only used to compute values and associated noise at design points. By default the criteria is minimized using :class:`~openturns.MultiStart` with starting points uniformly sampled in the optimization problem bounds, see :func:`setMultiStartExperimentSize` and :func:`setMultiStartNumber`. This behavior can be overridden by using another solver with :func:`setOptimizationAlgorithm`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> dim = 4 >>> model = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ... ['x1*x1+x2^3*x1+x3+x4']) >>> bounds = ot.Interval([-5.0] * dim, [5.0] * dim) >>> problem = ot.OptimizationProblem() >>> problem.setObjective(model) >>> problem.setBounds(bounds) >>> experiment = ot.Composite([0.0] * dim, [1.0, 2.0, 4.0]) >>> inputSample = experiment.generate() >>> outputSample = model(inputSample) >>> covarianceModel = ot.SquaredExponential([2.0] * dim, [0.1]) >>> basis = ot.ConstantBasisFactory(dim).build() >>> kriging = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> kriging.run() >>> algo = ot.EfficientGlobalOptimization(problem, kriging.getResult()) >>> algo.setMaximumIterationNumber(2) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setOptimizationAlgorithm "Expected improvement solver accessor. Parameters ---------- solver : :class:`~openturns.OptimizationSolver` The solver used to optimize the expected improvement" // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getOptimizationAlgorithm "Expected improvement solver accessor. Returns ------- solver : :class:`~openturns.OptimizationSolver` The solver used to optimize the expected improvement" // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setMultiStartExperimentSize "Size of the design to draw starting points. Parameters ---------- multiStartExperimentSize : int The size of the Monte Carlo design from which to select the best starting points. The default number can be tweaked with the `EfficientGlobalOptimization-DefaultMultiStartExperimentSize` key from :class:`~openturns.ResourceMap`." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getMultiStartExperimentSize "Size of the design to draw starting points. Returns ------- multiStartExperimentSize : int The size of the Monte Carlo design from which to select the best starting points." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setMultiStartNumber "Number of starting points for the criterion optimization. Parameters ---------- multiStartNumber : int The number of starting points for the criterion optimization. The default number can be tweaked with the `EfficientGlobalOptimization-DefaultMultiStartNumber` key from :class:`~openturns.ResourceMap`." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getMultiStartNumber "Number of starting points for the criterion optimization. Returns ------- multiStartNumber : int The number of starting points for the criterion optimization." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setParameterEstimationPeriod "Parameter estimation period accessor. Parameters ---------- period : int The number of iterations between covariance parameters re-learn. Default is 1 (each iteration). Can be set to 0 (never). The default number can be tweaked with the `EfficientGlobalOptimization-DefaultParameterEstimationPeriod` key from :class:`~openturns.ResourceMap`." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getParameterEstimationPeriod "Parameter estimation period accessor. Returns ------- period : int The number of iterations between covariance parameters re-learn. Default is 1 (each iteration). Can be set to 0 (never)." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setImprovementFactor "Improvement criterion factor accessor. Parameters ---------- a : float Used to define a stopping criterion on the improvement criterion: :math:`I_{max} < \alpha |Y_{min}|` with :math:`I_{max}` the current maximum of the improvement and :math:`Y_{min}` the current optimum." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getImprovementFactor "Improvement criterion factor accessor. Returns ------- a : float Used to define a stopping criterion on the improvement criterion: :math:`I_{max} < \alpha |Y_{min}|` with :math:`I_{max}` the current maximum of the improvement and :math:`Y_{min}` the current optimum." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setCorrelationLengthFactor "Correlation length stopping criterion factor accessor. Parameters ---------- b : float Used to define a stopping criterion on the minimum correlation length: :math:`\theta_i < \frac{\Delta_i^{min}}{b}` with :math:`\Delta^{min}` the minimum distance between design points." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getCorrelationLengthFactor "Correlation length stopping criterion factor accessor. Returns ------- b : float Used to define a stopping criterion on the minimum correlation length: :math:`\theta_i < \frac{\Delta_i^{min}}{b}` with :math:`\Delta^{min}` the minimum distance between design points." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setAIETradeoff "AEI tradeoff constant accessor. Parameters ---------- c : float Used to define a quantile of the kriging prediction at the design points. :math:`u(x)=m_K(x)+c*s_K(x)`" // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getAIETradeoff "AEI tradeoff constant accessor. Returns ------- c : float Used to define a quantile of the kriging prediction at the design points. :math:`u(x)=m_K(x)+c*s_K(x)`" // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getExpectedImprovement "Expected improvement values. Returns ------- ei : :class:`~openturns.Sample` The expected improvement optimal values." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::setNoiseModel "Improvement noise model accessor. Parameters ---------- noiseVariance : :class:`~openturns.Function` The noise variance :math:`\sigma^2_{\epsilon}(x)` used for the AEI criterion optimization only. Of same input dimension than the objective and 1-d output." // --------------------------------------------------------------------- %feature("docstring") OT::EfficientGlobalOptimization::getNoiseModel "Improvement noise model accessor. Returns ------- noiseVariance : :class:`~openturns.Function` The noise variance :math:`\sigma^2_{\epsilon}(x)` used for the AEI criterion optimization only. Of same input dimension than the objective and 1-d output." openturns-1.9/python/src/EllipticalDistribution.i000066400000000000000000000004571307543307100223750ustar00rootroot00000000000000// SWIG file EllipticalDistribution.i %{ #include "openturns/EllipticalDistribution.hxx" %} %include openturns/EllipticalDistribution.hxx namespace OT { %extend EllipticalDistribution { EllipticalDistribution(const EllipticalDistribution & other) { return new OT::EllipticalDistribution(other); } } } openturns-1.9/python/src/EnumerateFunction.i000066400000000000000000000005371307543307100213450ustar00rootroot00000000000000// SWIG file EnumerateFunction.i %{ #include "openturns/EnumerateFunction.hxx" %} %include EnumerateFunction_doc.i OTTypedInterfaceObjectHelper(EnumerateFunction) %include openturns/EnumerateFunction.hxx namespace OT { %extend EnumerateFunction { EnumerateFunction(const EnumerateFunction & other) { return new OT::EnumerateFunction(other); } } } openturns-1.9/python/src/EnumerateFunctionImplementation.i000066400000000000000000000006361307543307100242530ustar00rootroot00000000000000// SWIG file EnumerateFunctionImplementation.i %{ #include "openturns/EnumerateFunctionImplementation.hxx" %} %include EnumerateFunctionImplementation_doc.i %include openturns/EnumerateFunctionImplementation.hxx namespace OT { %extend EnumerateFunctionImplementation { EnumerateFunctionImplementation(const EnumerateFunctionImplementation & other) { return new OT::EnumerateFunctionImplementation(other); } } } openturns-1.9/python/src/EnumerateFunctionImplementation_doc.i.in000066400000000000000000000202671307543307100255070ustar00rootroot00000000000000%define OT_EnumerateFunction_doc "Enumerate function. Available constructors: EnumerateFunction(*dim=1*) EnumerateFunction(*dim, q*) EnumerateFunction(*weight, q*) Parameters ---------- dim : positive int If *dim* is the only argument mentioned, it is used to create a :class:`~openturns.LinearEnumerateFunction` object of dimension *dim*. If *q* is also mentioned, it is used to create a :class:`~openturns.HyperbolicAnisotropicEnumerateFunction` object of dimension *dim* and parameter *q*. q : float The q-quasi-norm parameter used to create a :class:`~openturns.HyperbolicAnisotropicEnumerateFunction` object. weight : sequence of float The weights of the indices in each dimension used to create a :class:`~openturns.HyperbolicAnisotropicEnumerateFunction` object. Notes ----- *EnumerateFunction* represents a bijection from :math:`\Nset` to :math:`\Nset^{dim}`. This bijection is based on a particular procedure of enumerating the set of multi-indices. It begins from the multi-index :math:`\{0,0,\dots,0\}`. We associate a multi-index :math:`\{j_{p1}, j_{p2},\dots, j_{pdim}\}` for every integer :math:`i_p` in :math:`\Nset`: For more details, let us consider any :math:`i_p, i_q \in \Nset`: if :math:`|i_p-i_q|\leq 1` then :math:`|\sum_{k=1}^{dim} (j_{pk}- j_{qk})| \leq 1`. This proposition provides a necessary but unsufficient condition for the construction of the bijection. Another assumption was done indicating the way of iteration. Below an example showing this assumption. Example for :math:`dim=2`: .. math:: phi(0) &= [0 ~ 0] \\ phi(1) &= [1 ~ 0] \\ phi(2) &= [0 ~ 1] \\ phi(3) &= [2 ~ 0] \\ phi(4) &= [1 ~ 1] \\ phi(5) &= [0 ~ 2] \\ phi(6) &= [3 ~ 0] For the functional expansion (respectively polynomial chaos expansion), the multi-index :math:`\vect{i_p}` represents the collection of degrees of the selected orthogonal functions (respectively orthogonal polynomials). In fact, after the selection of the type of orthogonal functions (respectively orthogonal polynomials) for the construction of the orthogonal basis, the *EnumerateFunction* characterizes the term of the basis by providing the degrees of the univariate functions (respectively univariate polynomials). In order to know the degree of the :math:`k^{th}` polynomial of the multivariate basis, it is enough to sum all the integers given in the list. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in range(6): ... print(enumerateFunction(i)) [0,0] [1,0] [0,1] [2,0] [1,1] [0,2]" %enddef %feature("docstring") OT::EnumerateFunctionImplementation OT_EnumerateFunction_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_getDimension_doc "Return the dimension of the *EnumerateFunction*. Returns ------- dim : int, :math:`dim \geq 0` Dimension of the *EnumerateFunction*." %enddef %feature("docstring") OT::EnumerateFunctionImplementation::getDimension OT_EnumerateFunction_getDimension_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_getMaximumDegreeCardinal_doc "Get the cardinal of indices of degree inferior or equal to a given value. Parameters ---------- maximumDegree : int Number of polynoms of the basis. Returns ------- cardinal : int Cardinal of indices of degree :math:`max \leq maximumDegree`. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in range(6): ... indices = enumerateFunction(i) ... degree = sum(indices) ... print(str(int(degree))+' '+str(indices)) 0 [0,0] 1 [1,0] 1 [0,1] 2 [2,0] 2 [1,1] 2 [0,2] >>> print(enumerateFunction.getMaximumDegreeCardinal(2)) 6" %enddef %feature("docstring") OT::EnumerateFunctionImplementation::getMaximumDegreeCardinal OT_EnumerateFunction_getMaximumDegreeCardinal_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_getMaximumDegreeStrataIndex_doc "Get the index of the strata of degree inferior to a given value. Parameters ---------- maximumDegree : int Degree. Returns ------- index : int Index of the strata of degree :math:`max < maximumDegree`. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in [1, 2]: ... indices = enumerateFunction(i) ... strataIndex = sum(indices) + 1 ... print(str(int(strataIndex))+' '+str(indices)) 2 [1,0] 2 [0,1] >>> print(enumerateFunction.getMaximumDegreeStrataIndex(2)) 2" %enddef %feature("docstring") OT::EnumerateFunctionImplementation::getMaximumDegreeStrataIndex OT_EnumerateFunction_getMaximumDegreeStrataIndex_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_getStrataCardinal_doc "Get the number of members of the basis associated to a given strata. Parameters ---------- strataIndex : int Index of the strata in the hierarchical basis. In the context of product of polynomial basis, this is the total polynom degree. Returns ------- cardinal : int Number of members of the basis associated to the strata *strataIndex*. In the context of product of polynomial basis, this is the number of polynoms of the basis which total degree is *strataIndex*. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in [3, 4, 5]: ... indices = enumerateFunction(i) ... degree = sum(indices) ... print(str(int(degree))+' '+str(indices)) 2 [2,0] 2 [1,1] 2 [0,2] >>> print(enumerateFunction.getStrataCardinal(2)) 3" %enddef %feature("docstring") OT::EnumerateFunctionImplementation::getStrataCardinal OT_EnumerateFunction_getStrataCardinal_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_getStrataCumulatedCardinal_doc "Get the cardinal of the cumulated strata above or equal to the given strata. Parameters ---------- strataIndex : int Index of the strata in the hierarchical basis. In the context of product of polynomial basis, this is the total polynomial degree. Returns ------- cardinal : int Number of members of the basis associated to the strates inferior or equal to *strataIndex*. In the context of product of polynomial basis, this is the number of polynomials of the basis which total degree is inferior or equal to *strataIndex*. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in range(6): ... indices = enumerateFunction(i) ... degree = sum(indices) ... print(str(int(degree))+' '+str(indices)) 0 [0,0] 1 [1,0] 1 [0,1] 2 [2,0] 2 [1,1] 2 [0,2] >>> print(enumerateFunction.getStrataCumulatedCardinal(2)) 6" %enddef %feature("docstring") OT::EnumerateFunctionImplementation::getStrataCumulatedCardinal OT_EnumerateFunction_getStrataCumulatedCardinal_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_inverse_doc "Get the antecedent of a indices list in the *EnumerateFunction*. Parameters ---------- multiIndex : sequence of int List of indices. Returns ------- antecedent : int Represents the antecedent of the *multiIndex* in the *EnumerateFunction*. Examples -------- >>> import openturns as ot >>> enumerateFunction = ot.EnumerateFunction(ot.LinearEnumerateFunction(2)) >>> for i in range(6): ... print(str(i)+' '+str(enumerateFunction(i))) 0 [0,0] 1 [1,0] 2 [0,1] 3 [2,0] 4 [1,1] 5 [0,2] >>> print(enumerateFunction.inverse([1,1])) 4" %enddef %feature("docstring") OT::EnumerateFunctionImplementation::inverse OT_EnumerateFunction_inverse_doc // --------------------------------------------------------------------- %define OT_EnumerateFunction_setDimension_doc "Set the dimension of the *EnumerateFunction*. Parameters ---------- dim : int, :math:`dim \geq 0` Dimension of the *EnumerateFunction*." %enddef %feature("docstring") OT::EnumerateFunctionImplementation::setDimension OT_EnumerateFunction_setDimension_doc // ---------------------------------------------------------------------openturns-1.9/python/src/EnumerateFunction_doc.i.in000066400000000000000000000016171307543307100225770ustar00rootroot00000000000000// EnumerateFunction docstrings are defined in EnumerateFunctionImplementation_doc.i.in %feature("docstring") OT::EnumerateFunction OT_EnumerateFunction_doc %feature("docstring") OT::EnumerateFunction::getDimension OT_EnumerateFunction_getDimension_doc %feature("docstring") OT::EnumerateFunction::getMaximumDegreeCardinal OT_EnumerateFunction_getMaximumDegreeCardinal_doc %feature("docstring") OT::EnumerateFunction::getMaximumDegreeStrataIndex OT_EnumerateFunction_getMaximumDegreeStrataIndex_doc %feature("docstring") OT::EnumerateFunction::getStrataCardinal OT_EnumerateFunction_getStrataCardinal_doc %feature("docstring") OT::EnumerateFunction::getStrataCumulatedCardinal OT_EnumerateFunction_getStrataCumulatedCardinal_doc %feature("docstring") OT::EnumerateFunction::inverse OT_EnumerateFunction_inverse_doc %feature("docstring") OT::EnumerateFunction::setDimension OT_EnumerateFunction_setDimension_docopenturns-1.9/python/src/Epanechnikov.i000066400000000000000000000004061307543307100203170ustar00rootroot00000000000000// SWIG file Epanechnikov.i %{ #include "openturns/Epanechnikov.hxx" %} %include Epanechnikov_doc.i %include openturns/Epanechnikov.hxx namespace OT { %extend Epanechnikov { Epanechnikov(const Epanechnikov & other) { return new OT::Epanechnikov(other); } } } openturns-1.9/python/src/Epanechnikov_doc.i.in000066400000000000000000000012341307543307100215510ustar00rootroot00000000000000%feature("docstring") OT::Epanechnikov "Epanechnikov distribution. Available constructor: Epanechnikov() Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{3}{4}\,(1 - x^2), \quad x \in [-1; 1] It has no parameters and is intended to be used as a kernel within a :class:`~openturns.KernelSmoothing`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & 0 \\ \Var{X} & = & \frac{1}{5} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Epanechnikov() Draw a sample: >>> sample = distribution.getSample(5)" openturns-1.9/python/src/Equal.i000066400000000000000000000004571307543307100167620ustar00rootroot00000000000000// SWIG file Equal.i %{ #include "openturns/Equal.hxx" %} %include Equal_doc.i %include openturns/Equal.hxx namespace OT { %extend Equal { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend Equal { Equal(const Equal & other) { return new OT::Equal(other); } } } openturns-1.9/python/src/Equal_doc.i.in000066400000000000000000000005071307543307100202100ustar00rootroot00000000000000%feature("docstring") OT::Equal "Equal comparison operator. Available constructors: Equal() See also -------- Greater, GreaterOrEqual, Less, LessOrEqual Examples -------- >>> import openturns as ot >>> operator = ot.Equal() >>> print(operator(1, 2)) False >>> print(operator(2, 1)) False >>> print(operator(2, 2)) True "openturns-1.9/python/src/EvaluationImplementation.i000066400000000000000000000005461307543307100227270ustar00rootroot00000000000000// SWIG file EvaluationImplementation.i %{ #include "openturns/EvaluationImplementation.hxx" %} %include EvaluationImplementation_doc.i %include openturns/EvaluationImplementation.hxx namespace OT { %extend EvaluationImplementation { EvaluationImplementation(const EvaluationImplementation & other) { return new OT::EvaluationImplementation(other); } } } openturns-1.9/python/src/EvaluationImplementation_doc.i.in000066400000000000000000000333741307543307100241660ustar00rootroot00000000000000%feature("docstring") OT::EvaluationImplementation "Numerical math evaluation implementation. Available constructors: EvaluationImplementation() See also -------- Function, AggregatedEvaluation, DatabaseEvaluation, DualLinearCombinationEvaluation, LinearFunction " // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::addCacheContent "Add input numerical points and associated output to the cache. Parameters ---------- input_sample : 2-d sequence of float Input numerical points to be added to the cache. output_sample : 2-d sequence of float Output numerical points associated with the input_sample to be added to the cache." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::clearCache "Empty the content of the cache." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::clearHistory "Empty the content of the history." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::disableCache "Disable the cache mechanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::disableHistory "Disable the history mechanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::enableCache "Enable the cache mechanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::enableHistory "Enable the history mechanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getCacheHits "Accessor to the number of computations saved thanks to the cache mecanism. Returns ------- cacheHits : int Integer that counts the number of computations saved thanks to the cache mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getCacheInput "Accessor to all the input numerical points stored in the cache mecanism. Returns ------- cacheInput : :class:`~openturns.Sample` All the input numerical points stored in the cache mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getCacheOutput "Accessor to all the output numerical points stored in the cache mecanism. Returns ------- cacheInput : :class:`~openturns.Sample` All the output numerical points stored in the cache mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getCallsNumber "Accessor to the number of times the function has been called. Returns ------- calls_number : int Integer that counts the number of times the function has been called since its creation." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getDescription "Accessor to the description of the inputs and outputs. Returns ------- description : :class:`~openturns.Description` Description of the inputs and the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getDescription()) [x1,x2,y0]" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getHistoryInput "Accessor to the history of the input values. Returns ------- input_history : :class:`~openturns.Sample` All the input numerical points stored in the history mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getHistoryOutput "Accessor to the history of the output values. Returns ------- output_history : :class:`~openturns.Sample` All the output numerical points stored in the history mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getInputPointHistory "Accessor to the history of the input points values. Returns ------- history : :class:`~openturns.Sample` All the input points stored in the history mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getInputParameterHistory "Accessor to the history of the input parameter values. Returns ------- history : :class:`~openturns.Sample` All the input parameters stored in the history mecanism." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getInputDescription "Accessor to the description of the inputs. Returns ------- description : :class:`~openturns.Description` Description of the inputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getInputDescription()) [x1,x2]" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getInputDimension "Accessor to the number of the inputs. Returns ------- number_inputs : int Number of inputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getInputDimension()) 2" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getMarginal "Accessor to marginal. Parameters ---------- indices : int or list of ints Set of indices for which the marginal is extracted. Returns ------- marginal : :class:`~openturns.Function` Function corresponding to either :math:`f_i` or :math:`(f_i)_{i \in indices}`, with :math:`f:\Rset^n \rightarrow \Rset^p` and :math:`f=(f_0 , \dots, f_{p-1})`." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getOutputDescription "Accessor to the description of the outputs. Returns ------- description : :class:`~openturns.Description` Description of the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getOutputDescription()) [y0]" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getOutputDimension "Accessor to the number of the outputs. Returns ------- number_outputs : int Number of outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getOutputDimension()) 1" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getParameterDimension "Accessor to the dimension of the parameter. Returns ------- parameter_dimension : int Dimension of the parameter." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::isCacheEnabled "Test whether the cache mechanism is enabled or not. Returns ------- isCacheEnabled : bool Flag telling whether the cache mechanism is enabled. It is disabled by default." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::isHistoryEnabled "Test whether the history mechanism is enabled or not. Returns ------- isHistoryEnabled : bool Flag telling whether the history mechanism is enabled. It is disabled by default." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::setDescription "Accessor to the description of the inputs and outputs. Parameters ---------- description : sequence of str Description of the inputs and the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getDescription()) [x1,x2,y0] >>> f.setDescription(['a','b','y']) >>> print(f.getDescription()) [a,b,y]" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::setInputDescription "Accessor to the description of the inputs. Returns ------- description : :class:`~openturns.Description` Description of the inputs." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::setOutputDescription "Accessor to the description of the outputs. Returns ------- description : :class:`~openturns.Description` Description of the outputs." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::parameterGradient "Gradient against the parameters. Parameters ---------- x : sequence of float Input point Returns ------- parameter_gradient : :class:`~openturns.Matrix` The parameters gradient computed at x." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getParameter "Accessor to the parameter values. Returns ------- parameter : :class:`~openturns.Point` The parameter values." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::setParameter "Accessor to the parameter values. Parameters ---------- parameter : sequence of float The parameter values." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::getParameterDescription "Accessor to the parameter description. Returns ------- parameter : :class:`~openturns.Description` The parameter description." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::setParameterDescription "Accessor to the parameter description. Parameters ---------- parameter : :class:`~openturns.Description` The parameter description." // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::draw "Draw the output of function as a :class:`~openturns.Graph`. Available usages: draw(*inputMarg, outputMarg, CP, xiMin, xiMax, ptNb*) draw(*firstInputMarg, secondInputMarg, outputMarg, CP, xiMin_xjMin, xiMax_xjMax, ptNbs*) draw(*xiMin, xiMax, ptNb*) draw(*xiMin_xjMin, xiMax_xjMax, ptNbs*) Parameters ---------- outputMarg, inputMarg : int, :math:`outputMarg, inputMarg \geq 0` *outputMarg* is the index of the marginal to draw as a function of the marginal with index *inputMarg*. firstInputMarg, secondInputMarg : int, :math:`firstInputMarg, secondInputMarg \geq 0` In the 2D case, the marginal *outputMarg* is drawn as a function of the two marginals with indexes *firstInputMarg* and *secondInputMarg*. CP : sequence of float Central point. xiMin, xiMax : float Define the interval where the curve is plotted. xiMin_xjMin, xiMax_xjMax : sequence of float of dimension 2. In the 2D case, define the intervals where the curves are plotted. ptNb : int :math:`ptNb > 0` or list of ints of dimension 2 :math:`ptNb_k > 0, k=1,2` The number of points to draw the curves. Notes ----- We note :math:`f: \Rset^n \rightarrow \Rset^p` where :math:`\vect{x} = (x_1, \dots, x_n)` and :math:`f(\vect{x}) = (f_1(\vect{x}), \dots,f_p(\vect{x}))`, with :math:`n\geq 1` and :math:`p\geq 1`. - In the first usage: Draws graph of the given 1D *outputMarg* marginal :math:`f_k: \Rset^n \rightarrow \Rset` as a function of the given 1D *inputMarg* marginal with respect to the variation of :math:`x_i` in the interval :math:`[x_i^{min}, x_i^{max}]`, when all the other components of :math:`\vect{x}` are fixed to the corresponding ones of the central point *CP*. Then OpenTURNS draws the graph: :math:`t\in [x_i^{min}, x_i^{max}] \mapsto f_k(CP_1, \dots, CP_{i-1}, t, CP_{i+1} \dots, CP_n)`. - In the second usage: Draws the iso-curves of the given *outputMarg* marginal :math:`f_k` as a function of the given 2D *firstInputMarg* and *secondInputMarg* marginals with respect to the variation of :math:`(x_i, x_j)` in the interval :math:`[x_i^{min}, x_i^{max}] \times [x_j^{min}, x_j^{max}]`, when all the other components of :math:`\vect{x}` are fixed to the corresponding ones of the central point *CP*. Then OpenTURNS draws the graph: :math:`(t,u) \in [x_i^{min}, x_i^{max}] \times [x_j^{min}, x_j^{max}] \mapsto f_k(CP_1, \dots, CP_{i-1}, t, CP_{i+1}, \dots, CP_{j-1}, u, CP_{j+1} \dots, CP_n)`. - In the third usage: The same as the first usage but only for function :math:`f: \Rset \rightarrow \Rset`. - In the fourth usage: The same as the second usage but only for function :math:`f: \Rset^2 \rightarrow \Rset`. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> f = ot.SymbolicFunction(['x'], ['sin(2*_pi*x)*exp(-x^2/2)']) >>> graph = f.draw(-1.2, 1.2, 100) >>> View(graph).show()" // --------------------------------------------------------------------- %feature("docstring") OT::EvaluationImplementation::isActualImplementation "Accessor to the validity flag. Returns ------- is_impl : bool Whether the implementation is valid." openturns-1.9/python/src/Event.i000066400000000000000000000003161307543307100167660ustar00rootroot00000000000000// SWIG file Event.i %{ #include "openturns/Event.hxx" %} %include Event_doc.i %include openturns/Event.hxx namespace OT { %extend Event { Event(const Event & other) { return new OT::Event(other); } } } openturns-1.9/python/src/EventDomain.i000066400000000000000000000003421307543307100201150ustar00rootroot00000000000000// SWIG file EventDomain.i %{ #include "openturns/EventDomain.hxx" %} %include openturns/EventDomain.hxx namespace OT { %extend EventDomain { EventDomain(const EventDomain & other) { return new OT::EventDomain(other); } } } openturns-1.9/python/src/EventProcess.i000066400000000000000000000004021307543307100203210ustar00rootroot00000000000000// SWIG file EventProcess.i OTAutodoc(EventProcess) %{ #include "openturns/EventProcess.hxx" %} %include openturns/EventProcess.hxx namespace OT { %extend EventProcess { EventProcess(const EventProcess & other) { return new OT::EventProcess(other); } } } openturns-1.9/python/src/EventRandomVector.i000066400000000000000000000004141307543307100213110ustar00rootroot00000000000000// SWIG file EventRandomVector.i %{ #include "openturns/EventRandomVector.hxx" %} %include openturns/EventRandomVector.hxx namespace OT { %extend EventRandomVector { EventRandomVector(const EventRandomVector & other) { return new OT::EventRandomVector(other); } } } openturns-1.9/python/src/Event_doc.i.in000066400000000000000000000055451307543307100202310ustar00rootroot00000000000000%feature("docstring") OT::Event "Event. Available constructor: Event() Event(*antecedent, comparisonOperator, threshold*) Event(*antecedent, domain*) Event(*process, domain*) Parameters ---------- antecedent : :class:`~openturns.RandomVector` of dimension 1 Output variable of interest. comparisonOperator : :class:`~openturns.ComparisonOperator` Comparison operator used to compare *antecedent* with *threshold*. threshold : float *threshold* we want to compare to *antecedent*. domain : :class:`~openturns.Domain` Domain failure. process : :class:`~openturns.Process` Stochastic process. Notes ----- An event is defined as follows: .. math:: \cD_f = \{\vect{X} \in \Rset^n \, / \, g(\vect{X},\vect{d}) \le 0\} where :math:`\vect{X}` denotes a random input vector, representing the sources of uncertainties, :math:`\vect{d}` is a determinist vector, representing the fixed variables and :math:`g(\vect{X},\vect{d})` is the limit state function of the model. The probability content of the event :math:`\cD_f` is :math:`P_f`: .. math:: P_f = \int_{g(\vect{X},\vect{d})\le 0}f_\vect{X}(\vect{x})\di{\vect{x}} Here, the event considered is explicited directly from the limit state function :math:`g(\vect{X}\,,\,\vect{d})` : this is the classical structural reliability formulation. However, if the event is a threshold exceedance, it is useful to explicite the variable of interest :math:`Z=\tilde{g}(\vect{X}\,,\,\vect{d})`, evaluated from the model :math:`\tilde{g}(.)`. In that case, the event considered, associated to the threshold :math:`z_s` has the formulation: .. math:: \cD_f = \{ \vect{X} \in \Rset^n \, / \, Z=\tilde{g}(\vect{X}\,,\,\vect{d}) > z_s \} and the limit state function is: .. math:: g(\vect{X}\,,\,\vect{d}) &= z_s - Z \\ &= z_s - \tilde{g}(\vect{X}\,,\,\vect{d}) :math:`P_f` is the threshold exceedance probability, defined as: .. math:: P_f &= P(Z \geq z_s) \\ &= \int_{g(\vect{X}, \vect{d}) \le 0} \pdf\di{\vect{x}} Examples -------- An event created from a limit state function: >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> myEvent = ot.Event(output, ot.Less(), -3.0) A composite random vector based event: >>> X = ot.RandomVector(ot.Normal(2)) >>> model = ot.SymbolicFunction(['x0', 'x1'], ['x0', 'x1']) >>> Y = ot.RandomVector(model, X) >>> # The domain: [0, 1]^2 >>> domain = ot.Interval(2) >>> # The event >>> event = ot.Event(Y, domain) A process based event: >>> # The input process >>> X = ot.WhiteNoise(ot.Normal(2)) >>> # The domain: [0, 1]^2 >>> domain = ot.Interval(2) >>> # The event >>> event = ot.Event(X, domain) " openturns-1.9/python/src/Experiment.i000066400000000000000000000006601307543307100200270ustar00rootroot00000000000000// SWIG file Experiment.i %{ #include "openturns/Experiment.hxx" #include "openturns/PythonExperiment.hxx" %} %include Experiment_doc.i OTTypedInterfaceObjectHelper(Experiment) %include openturns/Experiment.hxx namespace OT { %extend Experiment { Experiment(const Experiment & other) { return new OT::Experiment(other); } Experiment(PyObject * pyObj) { return new OT::Experiment( new OT::PythonExperiment(pyObj) ); } } } openturns-1.9/python/src/ExperimentImplementation.i000066400000000000000000000005461307543307100227400ustar00rootroot00000000000000// SWIG file ExperimentImplementation.i %{ #include "openturns/ExperimentImplementation.hxx" %} %include ExperimentImplementation_doc.i %include openturns/ExperimentImplementation.hxx namespace OT { %extend ExperimentImplementation { ExperimentImplementation(const ExperimentImplementation & other) { return new OT::ExperimentImplementation(other); } } } openturns-1.9/python/src/ExperimentImplementation_doc.i.in000066400000000000000000000046601307543307100241730ustar00rootroot00000000000000%define OT_Experiment_doc "Base class for design of experiments. Considering :math:`\vect{x}=x^1,\dots, x^n` a vector of input parameters, this class is used to determine a particular set of values of :math:`\vect{x}` according to a particular design of experiments. Different types of design of experiments can be determined: - some stratified patterns: axial, composite, factorial or box patterns, - some weighted patterns that we can split into different categories: the random patterns, the low discrepancy sequences and the deterministic patterns. Examples -------- Define a custom design of experiment: >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> class RandomExp(object): ... def generate(self): ... return ot.Normal(1).getSample(10) >>> experiment = ot.Experiment(RandomExp()) >>> sample = experiment.generate() See also -------- StratifiedExperiment, WeightedExperiment" %enddef %feature("docstring") OT::ExperimentImplementation OT_Experiment_doc // --------------------------------------------------------------------- %define OT_Experiment_generate_doc "Generate points according to the type of the experiment. Returns ------- sample : :class:`~openturns.Sample` The points which constitute the design of experiments. The sampling method is defined by the nature of the experiment. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myExperiment = ot.Experiment(ot.MonteCarloExperiment(ot.Normal(2),5)) >>> print(myExperiment.generate()) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] 3 : [ -0.355007 1.43725 ] 4 : [ 0.810668 0.793156 ]" %enddef %feature("docstring") OT::ExperimentImplementation::generate OT_Experiment_generate_doc // --------------------------------------------------------------------- %define OT_Experiment_setImplementation_doc "Accessor to the underlying implementation. Parameters ---------- implementation : ExperimentImplementation An ExperimentImplementation object. Examples -------- >>> import openturns as ot >>> myExperiment = ot.Experiment(ot.MonteCarloExperiment(ot.Normal(2),5)) >>> myExperimentImplementation = myExperiment.getImplementation() >>> mySecondExperiment = ot.Experiment() >>> mySecondExperiment.setImplementation(myExperimentImplementation)" %enddef %feature("docstring") OT::ExperimentImplementation::setImplementation OT_Experiment_setImplementation_doc openturns-1.9/python/src/Experiment_doc.i.in000066400000000000000000000004471307543307100212640ustar00rootroot00000000000000// Experiment docstrings are defined in ExperimentImplementation_doc.i.in %feature("docstring") OT::Experiment OT_Experiment_doc %feature("docstring") OT::Experiment::generate OT_Experiment_generate_doc %feature("docstring") OT::Experiment::setImplementation OT_Experiment_setImplementation_docopenturns-1.9/python/src/ExpertMixture.i000066400000000000000000000004161307543307100205330ustar00rootroot00000000000000// SWIG file ExpertMixture.i %{ #include "openturns/ExpertMixture.hxx" %} %include ExpertMixture_doc.i %include openturns/ExpertMixture.hxx namespace OT { %extend ExpertMixture { ExpertMixture(const ExpertMixture & other) { return new OT::ExpertMixture(other); } } } openturns-1.9/python/src/ExpertMixture_doc.i.in000066400000000000000000000044601307543307100217700ustar00rootroot00000000000000%feature("docstring") OT::ExpertMixture "Expert mixture defining a piece wise function according to a classifier. Available constructors: ExpertMixture(*basis, classifier*) Parameters ---------- basis : :class:`~openturns.Basis` A basis which is a collection of :class:`~openturns.Function`. classifier : :class:`~openturns.Classifier` A classifier See also -------- Classifier, MixtureClassifier Notes ----- This implements an expert mixture which is a piece wise function :math:`f` defined by the collection of functions :math:`(f_i)_{i=1, \ldots, N}` given in *basis* and according to the classifier *classifier*: .. math:: f(\vect{x}) &= f_1(\vect{x}) \hspace{1em} \forall \vect{x} \in \text{Classe} 1 \\ &= f_k(\vect{x}) \hspace{1em} \forall \vect{x} \in \text{Classe} k \\ &= f_N(\vect{x}) \hspace{1em} \forall \vect{x} \in \text{Classe} N where the :math:`N` classes are defined by the classifier. Usage: - ExpertMixture(*input*) where *input* is a sequence of float or a 2-d sequence of float. It represents a point or a set of points to evaluate using the expert mixture. The input vector *input* is assigned to a particular class according to the rules defined by *classifier* and the associated marginal function :math:`f_i` is used to evaluate :math:`f(input)`. " // --------------------------------------------------------------------- %feature("docstring") OT::ExpertMixture::getExperts "Accessor the basis. Returns ------- basis : :class:`~openturns.Basis` The collection of functions :math:`(f_i)_{i=1, \ldots, N}`." // --------------------------------------------------------------------- %feature("docstring") OT::ExpertMixture::setExperts "Accessor the basis. Parameters ---------- basis : :class:`~openturns.Basis` The collection of functions :math:`(f_i)_{i=1, \ldots, N}`." // --------------------------------------------------------------------- %feature("docstring") OT::ExpertMixture::getClassifier "Accessor the classifier. Returns ------- classifier : :class:`~openturns.Classifier` The classifier." // --------------------------------------------------------------------- %feature("docstring") OT::ExpertMixture::setClassifier "Accessor the classifier. Parameters ---------- classifier : :class:`~openturns.Classifier` The classifier."openturns-1.9/python/src/Exponential.i000066400000000000000000000003761307543307100202010ustar00rootroot00000000000000// SWIG file Exponential.i %{ #include "openturns/Exponential.hxx" %} %include Exponential_doc.i %include openturns/Exponential.hxx namespace OT { %extend Exponential { Exponential(const Exponential & other) { return new OT::Exponential(other); } } } openturns-1.9/python/src/ExponentialCauchy.i000066400000000000000000000004561307543307100213350ustar00rootroot00000000000000// SWIG file ExponentialCauchy.i %{ #include "openturns/ExponentialCauchy.hxx" %} %include ExponentialCauchy_doc.i %include openturns/ExponentialCauchy.hxx namespace OT { %extend ExponentialCauchy { ExponentialCauchy(const ExponentialCauchy & other) { return new OT::ExponentialCauchy(other); } } } openturns-1.9/python/src/ExponentialCauchy_doc.i.in000066400000000000000000000033271307543307100225670ustar00rootroot00000000000000%feature("docstring") OT::ExponentialCauchy "Absolute exponential covariance model. Available constructors: ExponentialCauchy(*theta, sigma*) Parameters ---------- theta : sequence of floats Scale coefficients. The spatial dimension is the size of vector. sigma : sequence of floats Amplitude coefficients :math:`\sigma`. Should be of size 1 Notes ----- The second order model instanciate both a :class:`openturns.AbsoluteExponential` as covariance function and :class:`openturns.CauchyModel` as spectral model. Examples -------- >>> import openturns as ot >>> model = ot.ExponentialCauchy([10.0, 10.0], [1.0]) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(model.computeCovariance(s, t)) [[ 0.980199 ]] >>> tau = [0.1, 0.3] >>> print(model.computeCovariance(tau)) [[ 0.960789 ]] >>> f = 0.3 >>> print(model.computeSpectralDensity(f)) [[ (0.00315075,0) ]] >>> f = 10 >>> print(model.computeSpectralDensity(f)) [[ (2.56648e-09,0) ]]" // --------------------------------------------------------------------- %define OT_ExponentialCauchy_getAmplitude_doc "Get the amplitude parameter of the second order model. Returns ------- amplitude : :class:`~openturns.Point` The used amplitude parameter." %enddef %feature("docstring") OT::ExponentialCauchy::getAmplitude OT_ExponentialCauchy_getAmplitude_doc // --------------------------------------------------------------------- %define OT_ExponentialCauchy_getScale_doc "Get the scale parameter of the second order model. Returns ------- scale : :class:`~openturns.Point` The used scale parameter." %enddef %feature("docstring") OT::ExponentialCauchy::getScale OT_ExponentialCauchy_getScale_doc // --------------------------------------------------------------------- openturns-1.9/python/src/ExponentialFactory.i000066400000000000000000000004661307543307100215310ustar00rootroot00000000000000// SWIG file ExponentialFactory.i %{ #include "openturns/ExponentialFactory.hxx" %} %include ExponentialFactory_doc.i %include openturns/ExponentialFactory.hxx namespace OT { %extend ExponentialFactory { ExponentialFactory(const ExponentialFactory & other) { return new OT::ExponentialFactory(other); } } } openturns-1.9/python/src/ExponentialFactory_doc.i.in000066400000000000000000000002371307543307100227570ustar00rootroot00000000000000%feature("docstring") OT::ExponentialFactory "Exponential factory. Available constructor: ExponentialFactory() See also -------- DistributionFactory" openturns-1.9/python/src/ExponentialModel.i000066400000000000000000000004471307543307100211610ustar00rootroot00000000000000// SWIG file ExponentialModel.i %{ #include "openturns/ExponentialModel.hxx" %} %include ExponentialModel_doc.i %include openturns/ExponentialModel.hxx namespace OT { %extend ExponentialModel { ExponentialModel(const ExponentialModel & other) { return new OT::ExponentialModel(other); } } } openturns-1.9/python/src/ExponentialModel_doc.i.in000066400000000000000000000055321307543307100224130ustar00rootroot00000000000000%feature("docstring") OT::ExponentialModel "Multivariate stationary exponential covariance function. Available constructors: ExponentialModel(*spatialDim=1*) ExponentialModel(*scale, amplitude*) ExponentialModel(*scale, amplitude, spatialCorrelation*) ExponentialModel(*scale, spatialCovariance*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. By default, the spatial dimension is deduced from the :math:`\vect{\theta}` parameter. If this one is not specified, then :math:`n=1`. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma}\in \Rset^d`. spatialCorrelation : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R} \in \cS_d^+([-1, 1])` By default, :math:`\mat{R}= \mat{I}_d` where the dimension :math:`d` is deduced from the amplitude :math:`\vect{\sigma}`. spatialCovariance : :class:`~openturns.CovarianceMatrix` Covariance matrix :math:`C^{stat} \in \cS_d^+(\Rset)`. Notes ----- The *exponential* function is a stationary covariance function whith dimension :math:`d\geq1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \rightarrow \Rset^d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *exponential* function is defined by: .. math:: C(\vect{s}, \vect{t}) = \rho\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right)\, \mbox{Diag}(\vect{\sigma}) \, \mat{R} \, \mbox{Diag}(\vect{\sigma}), \quad \forall (\vect{s}, \vect{t}) \in \cD where the spatial covariance function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t} ) = e^{-\left\| \vect{s}- \vect{t} \right\|_2} \quad \forall (\vect{s}, \vect{t}) \in \cD The spatial covariance matrix writes: .. math:: C^{stat}(\vect{s}, \vect{t})= \mbox{Diag}(\vect{\sigma}) \, \mat{R} \, \mbox{Diag}(\vect{\sigma}) Examples -------- Create an exponential model from the amplitude :math:`\vect{\sigma}` and the scale :math:`\vect{\theta}`: >>> import openturns as ot >>> amplitude = [1.0, 2.0] >>> scale = [4.0, 5.0] >>> myCovarianceModel = ot.ExponentialModel(scale, amplitude) Create an exponential model from the amplitude, scale and the correlation matrix: >>> amplitude = [1.0, 2.0] >>> scale = [4.0, 5.0] >>> spatialCorrelation = ot.CorrelationMatrix(2) >>> spatialCorrelation[0,1] = 0.8 >>> myCovarianceModel = ot.ExponentialModel(scale, amplitude, spatialCorrelation) Create an exponential model from the scale and covariance matrix: >>> amplitude = [1.0, 2.0] >>> scale = [4.0, 5.0] >>> spatialCovariance = ot.CovarianceMatrix(2) >>> spatialCovariance[0,0] = 4.0 >>> spatialCovariance[1,1] = 5.0 >>> spatialCovariance[0,1] = 1.2 >>> spatialDimension = 2 >>> myCovarianceModel = ot.ExponentialModel(scale, spatialCovariance)" openturns-1.9/python/src/Exponential_doc.i.in000066400000000000000000000034061307543307100214300ustar00rootroot00000000000000%feature("docstring") OT::Exponential "Exponential distribution. Available constructors: Exponential(*lambda=1.0, gamma=0.0*) Parameters ---------- lambda : float, :math:`\lambda > 0` Failure rate parameter. gamma : float, optional Shift parameter :math:`\gamma`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \lambda \exp\left(- \lambda\,(x - \gamma)\right), \quad x \in [\gamma; +\infty[ with :math:`\lambda > 0` and :math:`\gamma \in \Rset`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \gamma + \frac{1}{\lambda} \\ \Var{X} & = & \frac{1}{\lambda^2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Exponential(1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Exponential::getLambda "Accessor to the failure rate parameter. Returns ------- lambda : float Failure rate parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Exponential::getGamma "Accessor to the shift parameter. Returns ------- gamma : float Shift parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Exponential::setLambda "Accessor to the failure rate parameter. Parameters ---------- lambda : float, :math:`\lambda > 0` Failure rate parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Exponential::setGamma "Accessor to the shift parameter. Parameters ---------- gamma : float, :math:`\gamma \in \Rset` Shift parameter." openturns-1.9/python/src/ExponentiallyDampedCosineModel.i000066400000000000000000000006261307543307100240010ustar00rootroot00000000000000// SWIG file ExponentiallyDampedCosineModel.i %{ #include "openturns/ExponentiallyDampedCosineModel.hxx" %} %include ExponentiallyDampedCosineModel_doc.i %include openturns/ExponentiallyDampedCosineModel.hxx namespace OT { %extend ExponentiallyDampedCosineModel { ExponentiallyDampedCosineModel(const ExponentiallyDampedCosineModel & other) { return new OT::ExponentiallyDampedCosineModel(other); } } } openturns-1.9/python/src/ExponentiallyDampedCosineModel_doc.i.in000066400000000000000000000052561307543307100252370ustar00rootroot00000000000000%feature("docstring") OT::ExponentiallyDampedCosineModel "Exponentially damped cosine covariance function. Available constructors: ExponentiallyDampedCosineModel(*spatialDim=1*) ExponentiallyDampedCosineModel(*scale, amplitude, f*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. By default, equal to 1. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma} \in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. f : positive float Frequency parameter. Notes ----- The *exponentially damped cosine* function is a stationary covariance function whith dimension :math:`d=1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \mapsto \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *exponentially damped cosine* covariance function is defined by: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 e^{\left(-\left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2\right)} \cos\left(2 \pi f \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2 \right), \quad \forall (\vect{s}, \vect{t}) \in \cD The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = e^{\left(-\left\| \vect{s}- \vect{t}\right\|_2\right)} \cos\left(2 \pi f \left\| \vect{s}-\vect{t} \right\|_2 \right), \quad \forall (\vect{s}, \vect{t}) \in \cD See Also -------- CovarianceModel Examples -------- Create a standard exponentially damped cosine covariance function: >>> import openturns as ot >>> covModel = ot.ExponentiallyDampedCosineModel(2) >>> t = [0.1, 0.3] >>> s = [0.5, 0.4] >>> print(covModel(s, t)) [[ -0.564137 ]] >>> tau = [0.1, 0.1] >>> print(covModel(tau)) [[ 0.547367 ]] Create a exponentially damped cosine covariance function specifying the amplitude and the scale: >>> covModel2 = ot.ExponentiallyDampedCosineModel([3.3], [1.2], 5.0) Create a exponentially damped cosine covariance function specifying the amplitude and the scale: >>> covModel3 = ot.ExponentiallyDampedCosineModel([1.5, 2.5], [3.5], 5.0)" // --------------------------------------------------------------------- %feature("docstring") OT::ExponentiallyDampedCosineModel::setFrequency "Frequency accessor. Parameters ---------- f : positive float Frequency parameter." // --------------------------------------------------------------------- %feature("docstring") OT::ExponentiallyDampedCosineModel::getFrequency "Frequency accessor. Returns ------- f : positive float Frequency parameter." openturns-1.9/python/src/FAST.i000066400000000000000000000003051307543307100164400ustar00rootroot00000000000000// SWIG file FAST.i %{ #include "openturns/FAST.hxx" %} %include FAST_doc.i %include openturns/FAST.hxx namespace OT{ %extend FAST { FAST(const FAST & other) { return new OT::FAST(other); } } } openturns-1.9/python/src/FAST_doc.i.in000066400000000000000000000146701307543307100177040ustar00rootroot00000000000000%feature("docstring") OT::FAST "Fourier Amplitude Sensitivity Testing (FAST). Available constructor: FAST(*model, distribution, N, Nr=1, M=4*) Parameters ---------- model : :class:`~openturns.Function` Definition of the model to analyse. distribution : :class:`~openturns.Distribution` Contains the distributions of each model's input. Its dimension must be equal to the number of inputs. N : int, :math:`N > Nr` Size of the sample from which the Fourier series are calculated. It represents the length of the discretization of the s-space. Nr : int, :math:`Nr \geq 1` Number of resamplings. The extended FAST method involves a part of randomness in the computation of the indices. So it can be asked to realize the procedure *Nr* times and then to calculate the arithmetic means of the results over the *Nr* estimates. M : int, :math:`0 < M < N` Interference factor usually equal to 4 or higher. It corresponds to the truncation level of the Fourier series, i.e. the number of harmonics that are retained in the decomposition. Notes ----- FAST is a sensitivity analysis method which is based upon the ANOVA decomposition of the variance of the model response :math:`y = f(\vect{X})`, the latter being represented by its Fourier expansion. :math:`\vect{X}=\{X^1,\dots,X^{n_X}\}` is an input random vector of :math:`n_X` independent components. OpenTURNS implements the extended FAST method consisting in computing alternately the first order and the total-effect indices of each input. This approach, widely described in the paper by [Saltelli1999]_, relies upon a Fourier decomposition of the model response. Its key idea is to recast this representation as a function of a *scalar* parameter :math:`s`, by defining parametric curves :math:`s \mapsto x_i(s), i=1, \dots, n_X` exploring the support of the input random vector :math:`\vect{X}`. Then the Fourier expansion of the model response is: .. math:: f(s) = \sum_{k \in \Zset^N} A_k cos(ks) + B_k sin(ks) where :math:`A_k` and :math:`B_k` are Fourier coefficients whose estimates are: .. math:: \hat{A}_k &= \frac{1}{N} \sum_{j=1}^N f(x_j^1,\dots,x_j^{N_X}) cos\left(\frac{2k\pi (j-1)}{N} \right) \quad , \quad -\frac{N}{2} \leq k \leq \frac{N}{2} \\ \hat{B}_k &= \frac{1}{N} \sum_{j=1}^N f(x_j^1,\dots,x_j^{N_X}) sin\left(\frac{2k\pi (j-1)}{N} \right) \quad , \quad -\frac{N}{2} \leq k \leq \frac{N}{2} The first order indices are estimated by: .. math:: \hat{S}_i = \frac{\hat{D}_i}{\hat{D}} = \frac{\sum_{p=1}^M(\hat{A}_{p\omega_i}^2 + \hat{B}_{p\omega_i}^2)^2} {\sum_{n=1}^{(N-1)/2}(\hat{A}_n^2 + \hat{B}_n^2)^2} and the total order indices by: .. math:: \hat{T}_i = 1 - \frac{\hat{D}_{-i}}{\hat{D}} = 1 - \frac{\sum_{k=1}^{\omega_i/2}(\hat{A}_k^2 + \hat{B}_k^2)^2} {\sum_{n=1}^{(N-1)/2}(\hat{A}_n^2 + \hat{B}_n^2)^2} where :math:`\hat{D}` is the total variance, :math:`\hat{D}_i` the portion of :math:`D` arising from the uncertainty of the :math:`i^{th}` input and :math:`\hat{D}_{-i}` is the part of the variance due to all the inputs except the :math:`i^{th}` input. :math:`N` is the size of the sample using to compute the Fourier series and :math:`M` is the interference factor. *Saltelli et al.* (1999) recommanded to set :math:`M` to a value in the range :math:`[4, 6]`. :math:`\{\omega_i\}, \forall i=1, \dots, n_X` is a set of integer frequencies assigned to each input :math:`X^i`. The frequency associated with the input for which the sensitivity indices are computed, is set to the maximum admissible frequency satisfying the Nyquist criterion (which ensures to avoid aliasing effects): .. math:: \omega_i = \frac{N - 1}{2M} In the paper by Saltelli et al. (1999), for high sample size, it is suggested that :math:`16 \leq \omega_i/N_r \leq 64`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formulaIshigami = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> modelIshigami = ot.SymbolicFunction(['X1', 'X2', 'X3'], formulaIshigami) >>> distributions = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3) >>> sensitivityAnalysis = ot.FAST(modelIshigami, distributions, 101) >>> print(sensitivityAnalysis.getFirstOrderIndices()) [0.311097,0.441786,0.000396837]" // --------------------------------------------------------------------- %feature("docstring") OT::FAST::getFirstOrderIndices "Accessor to the first order indices. Parameters ---------- marginalIndex : int, :math:`0 \leq i < n`, optional Index of the model's marginal used to estimate the indices. By default, marginalIndex is equal to 0. Returns ------- indices : :class:`~openturns.Point` List of the first order indices of all the inputs." // --------------------------------------------------------------------- %feature("docstring") OT::FAST::getTotalOrderIndices "Accessor to the total order indices. Parameters ---------- marginalIndex : int, :math:`0 \leq i < n`, optional Index of the model's marginal used to estimate the indices. By default, marginalIndex is equal to 0. Returns ------- indices : :class:`~openturns.Point` List of the total-effect order indices of all the inputs." // --------------------------------------------------------------------- %feature("docstring") OT::FAST::setFFTAlgorithm "Accessor to the FFT algorithm implementation. Parameters ---------- fft : a :class:`~openturns.FFT` A FFT algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::FAST::getFFTAlgorithm "Accessor to the FFT algorithm implementation. Returns ------- fft : a :class:`~openturns.FFT` A FFT algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::FAST::getBlockSize "Get the block size. Returns ------- k : positive int Size of each block the sample is splitted into, this allows to save space while allowing multithreading, when available we recommend to use the number of available CPUs, set by default to 1." // --------------------------------------------------------------------- %feature("docstring") OT::FAST::setBlockSize "Set the block size. Parameters ---------- k : positive int Size of each block the sample is splitted into, this allows to save space while allowing multithreading, when available we recommend to use the number of available CPUs, set by default to :math:`1`." openturns-1.9/python/src/FFT.i000066400000000000000000000003401307543307100163210ustar00rootroot00000000000000// SWIG file FFT.i %{ #include "openturns/FFT.hxx" %} %include FFT_doc.i OTTypedInterfaceObjectHelper(FFT) %include openturns/FFT.hxx namespace OT{ %extend FFT { FFT(const FFT & other) { return new OT::FFT(other); } } } openturns-1.9/python/src/FFTImplementation.i000066400000000000000000000004561307543307100212370ustar00rootroot00000000000000// SWIG file FFTImplementation.i %{ #include "openturns/FFTImplementation.hxx" %} %include FFTImplementation_doc.i %include openturns/FFTImplementation.hxx namespace OT { %extend FFTImplementation { FFTImplementation(const FFTImplementation & other) { return new OT::FFTImplementation(other); } } } openturns-1.9/python/src/FFTImplementation_doc.i.in000066400000000000000000000133561307543307100224740ustar00rootroot00000000000000%define OT_FFT_doc "Base class for Fast Fourier Transform (FFT) and Inverse Fast Fourier Transform (IFFT). Notes ----- Perform FFT and IFFT with array of ndim=1,2,3 " %enddef %feature("docstring") OT::FFTImplementation OT_FFT_doc // --------------------------------------------------------------------- %define OT_FFT_transform_doc "Perform Fast Fourier Transform (fft). Parameters ---------- collection : :class:`~openturns.ComplexCollection` or :class:`~openturns.ScalarCollection`, sequence of float Data to transform. Returns ------- collection : :class:`~openturns.ComplexCollection` The data in Fourier domain. Notes ----- The Fast Fourier Transform writes as following: .. math:: {\rm y_k} = \sum_{n=0}^{N-1} x_n exp(-2 i \pi \frac{kn}{N}) where :math:`x` denotes the data to be transformed, of size :math:`N`. Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> result = fft.transform(ot.Normal(8).getRealization()) " %enddef %feature("docstring") OT::FFTImplementation::transform OT_FFT_transform_doc // --------------------------------------------------------------------- %define OT_FFT_inverseTransform_doc "Perform Inverse Fast Fourier Transform (fft). Parameters ---------- collection : :class:`~openturns.ComplexCollection` or :class:`~openturns.ScalarCollection`, sequence of float Data to transform. Returns ------- collection : :class:`~openturns.ComplexCollection` The transformed data. Notes ----- The Inverse Fast Fourier Transform writes as following: .. math:: {\rm y_k} = \sum_{n=0}^{N-1} \frac{1}{N} x_n exp(2 i \pi \frac{kn}{N}) where :math:`x` denotes the data, of size :math:`N`, to be transformed. Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> collection = ot.ComplexCollection([1+1j,2-0.3j,5-.3j,6+1j,9+8j,16+8j,0.3]) >>> result = fft.inverseTransform(collection) " %enddef %feature("docstring") OT::FFTImplementation::inverseTransform OT_FFT_inverseTransform_doc // --------------------------------------------------------------------- %define OT_FFT_transform2D_doc "Perform 2D FFT. Parameters ---------- matrix : :class:`~openturns.ComplexMatrix`, :class:`~openturns.Matrix`, 2-d sequence of float Data to transform. Returns ------- result : :class:`~openturns.ComplexMatrix` The data in fourier domain. Notes ----- The 2D Fast Fourier Transform writes as following: .. math:: {\rm Z_{k,l}} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1} X_{m,n} exp(-2 i \pi \frac{km}{M}) exp(-2 i \pi \frac{ln}{N}) where :math:`X` denotes the data to be transformed with shape (:math:`M`,:math:`N`) Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> x = ot.Normal(8).getSample(16) >>> result = fft.transform2D(x) " %enddef %feature("docstring") OT::FFTImplementation::transform2D OT_FFT_transform2D_doc // --------------------------------------------------------------------- %define OT_FFT_inverseTransform2D_doc "Perform 2D IFFT. Parameters ---------- matrix : :class:`~openturns.ComplexMatrix`, :class:`~openturns.Matrix`, 2-d sequence of float Data to transform. Returns ------- result : :class:`~openturns.ComplexMatrix` The data transformed. Notes ----- The 2D Fast Inverse Fourier Transform writes as following: .. math:: {\rm Y_{k,l}} = \frac{1}{M\times N}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1} Z_{m,n} exp(2 i \pi \frac{km}{M}) exp(2 i \pi \frac{ln}{N}) where :math:`Z` denotes the data to be transformed with shape (:math:`M`,:math:`N`) Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> x = ot.Normal(8).getSample(16) >>> result = fft.inverseTransform2D(x) " %enddef %feature("docstring") OT::FFTImplementation::inverseTransform2D OT_FFT_inverseTransform2D_doc // --------------------------------------------------------------------- %define OT_FFT_transform3D_doc "Perform 3D FFT. Parameters ---------- tensor : :class:`~openturns.ComplexTensor` or :class:`~openturns.Tensor` or 3d array Data to transform. Returns ------- result : :class:`~openturns.ComplexTensor` The data in fourier domain. Notes ----- The 3D Fast Fourier Transform writes as following: .. math:: {\rm Z_{k,l,r}} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}\sum_{p=0}^{P-1} X_{m,n,p} exp(-2 i \pi \frac{km}{M}) exp(-2 i \pi \frac{ln}{N}) exp(-2 i \pi \frac{rp}{P}) where :math:`X` denotes the data to be transformed with shape (:math:`M`,:math:`N`, :math:`P`) Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> x = ot.ComplexTensor(8,8,2) >>> y = ot.Normal(8).getSample(8) >>> x.setSheet(0,fft.transform2D(y)) >>> z = ot.Normal(8).getSample(8) >>> x.setSheet(1,fft.transform2D(z)) >>> result = fft.transform3D(x) " %enddef %feature("docstring") OT::FFTImplementation::transform3D OT_FFT_transform3D_doc // --------------------------------------------------------------------- %define OT_FFT_inverseTransform3D_doc "Perform 3D IFFT. Parameters ---------- tensor : :class:`~openturns.ComplexTensor` or :class:`~openturns.Tensor` or 3d array The data to be transformed. Returns ------- result : :class:`~openturns.ComplexTensor` The transformed data. Notes ----- The 3D Inverse Fast Fourier Transform writes as following: .. math:: {\rm Y_{k,l,r}} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}\sum_{p=0}^{P-1} \frac{1}{M\times N \times P} Z_{m,n,p} exp(2 i \pi \frac{km}{M}) exp(2 i \pi \frac{ln}{N}) exp(2 i \pi \frac{rp}{P}) where :math:`Z` denotes the data to be transformed with shape (:math:`M`, :math:`N`, :math:`P`) Examples -------- >>> import openturns as ot >>> fft = ot.FFT() >>> x = ot.ComplexTensor(8,8,2) >>> y = ot.Normal(8).getSample(8) >>> x.setSheet(0, fft.transform2D(y)) >>> z = ot.Normal(8).getSample(8) >>> x.setSheet(1, fft.transform2D(z)) >>> result = fft.inverseTransform3D(x) " %enddef %feature("docstring") OT::FFTImplementation::inverseTransform3D OT_FFT_inverseTransform3D_doc openturns-1.9/python/src/FFT_doc.i.in000066400000000000000000000010241307543307100175530ustar00rootroot00000000000000// FFT docstrings are defined in FFTImplementation_doc.i.in %feature("docstring") OT::FFT OT_FFT_doc %feature("docstring") OT::FFT::transform OT_FFT_transform_doc %feature("docstring") OT::FFT::inverseTransform OT_FFT_inverseTransform_doc %feature("docstring") OT::FFT::transform2D OT_FFT_transform2D_doc %feature("docstring") OT::FFT::inverseTransform2D OT_FFT_inverseTransform2D_doc %feature("docstring") OT::FFT::transform3D OT_FFT_transform3D_doc %feature("docstring") OT::FFT::inverseTransform3D OT_FFT_inverseTransform3D_doc openturns-1.9/python/src/FORM.i000066400000000000000000000003051307543307100164460ustar00rootroot00000000000000// SWIG file FORM.i %{ #include "openturns/FORM.hxx" %} %include FORM_doc.i %include openturns/FORM.hxx namespace OT{ %extend FORM { FORM(const FORM & other) { return new OT::FORM(other); } } } openturns-1.9/python/src/FORMResult.i000066400000000000000000000003651307543307100176530ustar00rootroot00000000000000// SWIG file FORMResult.i %{ #include "openturns/FORMResult.hxx" %} %include FORMResult_doc.i %include openturns/FORMResult.hxx namespace OT{ %extend FORMResult { FORMResult(const FORMResult & other) { return new OT::FORMResult(other); } } } openturns-1.9/python/src/FORMResult_doc.i.in000066400000000000000000000052501307543307100211030ustar00rootroot00000000000000%feature("docstring") OT::FORMResult "Result of a FORM analysis. Available constructors: FORMResult(*designPoint, limitStateVariable, isInFailureSpace*) Notes ----- Structure created by the method run() of the :class:`~openturns.FORM` class and obtained thanks to its method getResult(). Parameters ---------- designPoint : sequence of float Design point in the standard space resulting from the optimization algorithm. limitStateVariable : :class:`~openturns.Event` Event of which the probability is calculated. isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space. See also -------- Analytical, AnalyticalResult, SORM, SORMResult, FORM, StrongMaximumTest" // --------------------------------------------------------------------- %feature("docstring") OT::FORMResult::drawEventProbabilitySensitivity "Draw the sensitivities of the FORM failure probability. Parameters ---------- width : float, optional Value to calculate the shift position of the :class:`~openturns.BarPlot`. By default it is 1.0. Returns ------- graphCollection : list of two :class:`~openturns.Graph` containing a barplot The first graph drawing the sensitivities of the FORM failure probability with regards to the parameters of the probabilistic input vector. The second graph drawing the sensitivities of the FORM failure probability with regards to the parameters of the dependence structure of the probabilistic input vector." // --------------------------------------------------------------------- %feature("docstring") OT::FORMResult::getEventProbability "Accessor to the failure probability :math:`P_f`. Returns ------- probability : positive float The FORM failure probability :math:`P_f`." // --------------------------------------------------------------------- %feature("docstring") OT::FORMResult::getEventProbabilitySensitivity "Accessor to the sentivities of the FORM failure probability :math:`P_f`. Returns ------- sentivities : :class:`~openturns.Point` Sentivities of the FORM failure probability with regards to the parameters of the probabilistic input vector and to parameters of the dependence structure of the probabilistic input vector." // --------------------------------------------------------------------- %feature("docstring") OT::FORMResult::getGeneralisedReliabilityIndex "Accessor to the Generalised Reliability Index. Returns ------- index : float Generalised reliability index :math:`\beta_g` from the FORM failure probability is equal to :math:`\pm` the Hasofer reliability index :math:`\beta_{HL}` according to the fact the standard space center fulfills the event or not." openturns-1.9/python/src/FORM_doc.i.in000066400000000000000000000064201307543307100177040ustar00rootroot00000000000000%feature("docstring") OT::FORM "First Order Reliability Method (FORM). Available constructors: FORM(*nearestPointAlgorithm, event, physicalStartingPoint*) Parameters ---------- nearestPointAlgorithm : :class:`~openturns.OptimizationAlgorithm` Optimization algorithm used to research the design point. event : :class:`~openturns.Event` Failure event. physicalStartingPoint : sequence of float Starting point of the optimization algorithm, declared in the physical space. Notes ----- See :class:`~openturns.Analytical` for the description of the first steps of the FORM analysis. The First Order Reliability Method (FORM) consists in linearizing the limit state function :math:`G(\vect{U}\,,\,\vect{d})` at the design point, denoted :math:`P^*`, which is the point on the limit state surface :math:`G(\vect{U}\,,\,\vect{d})=0` that is closest to the origin of the standard space. Then, the probability :math:`P_f` where the limit state surface has been approximated by a linear surface (hyperplane) can be obtained exactly, thanks to the rotation invariance of the standard distribution :math:`f_{\vect{U}}` : .. math:: P_f = \left\{ \begin{array}{ll} \displaystyle E(-\beta_{HL}) & \text{if the origin of the }\vect{u}\text{-space lies in the domain }\cD_f \\ \displaystyle E(+\beta_{HL}) & \text{otherwise} \end{array} \right. where :math:`\beta_{HL}` is the Hasofer-Lind reliability index, defined as the distance of the design point :math:`\vect{u}^*` to the origin of the standard space and :math:`E` the marginal cumulative density function of the spherical distributions in the standard space. The evaluation of the failure probability is stored in the data structure :class:`~openturns.FORMResult` recoverable with the :meth:`getResult` method. See also -------- Analytical, AnalyticalResult, SORM, StrongMaximumTest, FORMResult Examples -------- >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> event = ot.Event(output, ot.Less(), -3.0) >>> # We create an OptimizationAlgorithm algorithm >>> solver = ot.AbdoRackwitz() >>> algo = ot.FORM(solver, event, [50.0, 1.0, 10.0, 5.0]) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::FORM::getResult "Accessor to the result of FORM. Returns ------- result : :class:`~openturns.FORMResult` Structure containing all the results of the FORM analysis." // --------------------------------------------------------------------- %feature("docstring") OT::FORM::setResult "Accessor to the result of FORM. Parameters ---------- result : :class:`~openturns.FORMResult` Structure containing all the results of the FORM analysis." // --------------------------------------------------------------------- %feature("docstring") OT::FORM::run "Evaluate the failure probability. Notes ----- Evaluate the failure probability and create a :class:`~openturns.FORMResult`, the structure result which is accessible with the method :meth:`getResult`." openturns-1.9/python/src/Factorial.i000066400000000000000000000003561307543307100176150ustar00rootroot00000000000000// SWIG file Factorial.i %{ #include "openturns/Factorial.hxx" %} %include Factorial_doc.i %include openturns/Factorial.hxx namespace OT { %extend Factorial { Factorial(const Factorial & other) { return new OT::Factorial(other); } } } openturns-1.9/python/src/Factorial_doc.i.in000066400000000000000000000027471307543307100210550ustar00rootroot00000000000000%feature("docstring") OT::Factorial "Factorial design of experiments. Available constructor: Factorial(*center, levels*) Factorial(*dimension, levels*) Parameters ---------- center : sequence of float Center of the design of experiments. If not specified, the design of experiments is centered on :math:`\vect{0} \in \Rset^n`. levels : sequence of float of dimension :math:`n_{level}` The discretisation of directions (the same for each one), without any consideration of unit. dimension : positive int Dimension :math:`n` of the space where the design of experiments is created. Notes ----- Factorial is a stratified design of experiments enabling to generate a pattern with points only on diagonals. It is not convenient to model influences of single input variables. The factoriel pattern is obtained by discretizing each principal diagonal according to the specified levels, symmetrically with respect to the center of the design of experiments. The number of points generated is :math:`1 + 2^n n_{level}`. In order to scale each direction and translate the grid structure onto the proper center, use the operator :math:`*=` and :math:`+=` of :class:`~openturns.Sample`. See also -------- StratifiedExperiment Examples -------- >>> import openturns as ot >>> levels = [4.0, 2.0, 7.0] >>> myCenteredReductedGrid = ot.Factorial(2, levels) >>> mySample = myCenteredReductedGrid.generate() >>> # Translate the grid >>> mySample+=4 >>> # Scale each direction >>> mySample*=2" openturns-1.9/python/src/FarlieGumbelMorgensternCopula.i000066400000000000000000000006161307543307100236360ustar00rootroot00000000000000// SWIG file FarlieGumbelMorgensternCopula.i %{ #include "openturns/FarlieGumbelMorgensternCopula.hxx" %} %include FarlieGumbelMorgensternCopula_doc.i %include openturns/FarlieGumbelMorgensternCopula.hxx namespace OT { %extend FarlieGumbelMorgensternCopula { FarlieGumbelMorgensternCopula(const FarlieGumbelMorgensternCopula & other) { return new OT::FarlieGumbelMorgensternCopula(other); } } } openturns-1.9/python/src/FarlieGumbelMorgensternCopulaFactory.i000066400000000000000000000007061307543307100251660ustar00rootroot00000000000000// SWIG file FarlieGumbelMorgensternCopulaFactory.i %{ #include "openturns/FarlieGumbelMorgensternCopulaFactory.hxx" %} %include FarlieGumbelMorgensternCopulaFactory_doc.i %include openturns/FarlieGumbelMorgensternCopulaFactory.hxx namespace OT { %extend FarlieGumbelMorgensternCopulaFactory { FarlieGumbelMorgensternCopulaFactory(const FarlieGumbelMorgensternCopulaFactory & other) { return new OT::FarlieGumbelMorgensternCopulaFactory(other); } } } openturns-1.9/python/src/FarlieGumbelMorgensternCopulaFactory_doc.i.in000066400000000000000000000003301307543307100264110ustar00rootroot00000000000000%feature("docstring") OT::FarlieGumbelMorgensternCopulaFactory "Farlie Gumbel Morgenstern Copula factory. Available constructor: FarlieGumbelMorgensternCopulaFactory() See also -------- DistributionFactory" openturns-1.9/python/src/FarlieGumbelMorgensternCopula_doc.i.in000066400000000000000000000011621307543307100250650ustar00rootroot00000000000000%feature("docstring") OT::FarlieGumbelMorgensternCopula "FarlieGumbelMorgenstern copula. Available constructor: FarlieGumbelMorgensternCopula(*theta=1.0*) Parameters ---------- theta : float, :math:`-1 \leq \theta \leq 1` Parameter :math:`\theta`. Notes ----- The FarlieGumbelMorgenstern copula is defined by : .. math:: C(u_1, u_2) = u_1 u_2 (1- \theta (1 - u_1)(1 - u_2)) for :math:`(u_1, u_2) \in [0, 1]^2` See also -------- Copula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.FarlieGumbelMorgensternCopula(0.7) Draw a sample: >>> sample = copula.getSample(5)" openturns-1.9/python/src/FaureSequence.i000066400000000000000000000004151307543307100204400ustar00rootroot00000000000000// SWIG file FaureSequence.i %{ #include "openturns/FaureSequence.hxx" %} %include FaureSequence_doc.i %include openturns/FaureSequence.hxx namespace OT{ %extend FaureSequence { FaureSequence(const FaureSequence & other) { return new OT::FaureSequence(other); } } } openturns-1.9/python/src/FaureSequence_doc.i.in000066400000000000000000000006251307543307100216750ustar00rootroot00000000000000%feature("docstring") OT::FaureSequence "Faure sequence. Available constructors: FaureSequence(*dimension=1*) Parameters ---------- dimension : positive int Dimension of the points. Examples -------- >>> import openturns as ot >>> sequence = ot.FaureSequence(2) >>> print(sequence.generate(5)) 0 : [ 0.5 0.5 ] 1 : [ 0.25 0.75 ] 2 : [ 0.75 0.25 ] 3 : [ 0.125 0.625 ] 4 : [ 0.625 0.125 ]"openturns-1.9/python/src/Field.i000066400000000000000000000012311307543307100167250ustar00rootroot00000000000000// SWIG file Field.i %{ #include "openturns/Field.hxx" %} %include Field_doc.i OTTypedInterfaceObjectHelper(Field) %include openturns/Field.hxx namespace OT { %extend Field { Field(const Field & other) { return new OT::Field(other); } Point __getitem__ (SignedInteger index) const { if (index < 0) { index += self->getSize(); } return self->getValueAtIndex(index); } void __setitem__ (SignedInteger index, const Point & val) { self->copyOnWrite(); if (index < 0) { index += self->getSize(); } self->setValueAtIndex(index, val); } UnsignedInteger __len__() const { return self->getSize(); } } // Field } // OT openturns-1.9/python/src/FieldFunction.i000066400000000000000000000152331307543307100204420ustar00rootroot00000000000000// SWIG file FieldFunction.i %{ #include "openturns/FieldFunction.hxx" #include "openturns/PythonFieldFunction.hxx" namespace OT { template <> struct traitsPythonType< OT::FieldFunction > { typedef _PyObject_ Type; }; template <> inline bool canConvert< _PyObject_, OT::FieldFunction >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FieldFunction, 0 ))) { OT::FieldFunction * p_nmf = reinterpret_cast< OT::FieldFunction * >( ptr ); return p_nmf != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FieldFunctionImplementation, 0 ))) { OT::FieldFunctionImplementation * p_impl = reinterpret_cast< OT::FieldFunctionImplementation * >( ptr ); return p_impl != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); return p_impl != NULL && !p_impl->isNull(); } else { return PyCallable_Check( pyObj ); } } template <> inline OT::FieldFunction convert< _PyObject_, OT::FieldFunction >(PyObject * pyObj) { void * ptr = 0; if ( SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FieldFunction, 0 ) ) ) { OT::FieldFunction * p_nmf = reinterpret_cast< OT::FieldFunction * >( ptr ); return *p_nmf; } else if ( SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__FieldFunctionImplementation, 0 ) ) ) { OT::FieldFunctionImplementation * p_impl = reinterpret_cast< OT::FieldFunctionImplementation * >( ptr ); return *p_impl; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); return **p_impl; } else if (!PyCallable_Check( pyObj )) { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object (function or class) - can not be convertible to a FieldFunction"; } OT::FieldFunction pythonFunction(new OT::PythonFieldFunction(pyObj)); return pythonFunction; } } /* namespace OT */ %} %include FieldFunction_doc.i OTTypedInterfaceObjectHelper(FieldFunction) %include openturns/FieldFunction.hxx namespace OT { %extend FieldFunction { FieldFunction(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIG_TypeQuery("OT::Object *"), 0))) { throw OT::InvalidArgumentException(HERE) << "Argument should be a pure python object"; } return new OT::FieldFunction(OT::convert(pyObj)); } FieldFunction(const FieldFunction & other) { return new OT::FieldFunction( other ); } }} %pythoncode %{ # We have to make sure the submodule is loaded with absolute path import openturns.typ class OpenTURNSPythonFieldFunction(object): """ Override FieldFunction from Python. Parameters ---------- n : positive int the input dimension p : positive int the output dimension s : positive integer the spatial dimension Notes ----- You have to overload the function: _exec(X): single evaluation, X is a :class:`~openturns.Field`, returns a :class:`~openturns.Field` """ def __init__(self, n=0, p=0, s=0): try: self.__n = int(n) except: raise TypeError('n argument is not an integer.') try: self.__p = int(p) except: raise TypeError('p argument is not an integer.') try: self.__s = int(s) except: raise TypeError('s argument is not an integer.') self.__descIn = list(map(lambda i: 'x' + str(i), range(n))) self.__descOut = list(map(lambda i: 'y' + str(i), range(p))) def setInputDescription(self, descIn): if (len(descIn) != self.__n): raise ValueError('Input description size does NOT match input dimension') self.__descIn = descIn def getInputDescription(self): return self.__descIn def setOutputDescription(self, descOut): if (len(descOut) != self.__p): raise ValueError('Output description size does NOT match output dimension') self.__descOut = descOut def getOutputDescription(self): return self.__descOut def getInputDimension(self): return self.__n def getOutputDimension(self): return self.__p def getSpatialDimension(self): return self.__s def __str__(self): return 'OpenTURNSPythonFieldFunction( %s #%d ) -> %s #%d' % (self.__descIn, self.__n, self.__descOut, self.__p) def __repr__(self): return self.__str__() def __call__(self, X): Y = self._exec(X) return Y def _exec(self, X): raise RuntimeError('You must define a method _exec(X) -> Y, where X and Y are Fields objects') class PythonFieldFunction(FieldFunction): """ Override FieldFunction from Python. Parameters ---------- n : positive int the input dimension p : positive int the output dimension s : positive int the spatial dimension func : a callable python object called on a :class:`~openturns.Field` object. Returns a :class:`~openturns.Field`. Default is None. Notes ----- func """ def __new__(self, n, p, s, func=None): if func == None: raise RuntimeError('func not provided.') instance = OpenTURNSPythonFieldFunction(n, p, s) import collections if func != None: if not isinstance(func, collections.Callable): raise RuntimeError('func argument is not callable.') instance._exec = func return FieldFunction(instance) # deprecated class DynamicalFunction(FieldFunction): def __init__(self, *args): super(DynamicalFunction, self).__init__(*args) openturns.common.Log.Warn('class DynamicalFunction is deprecated in favor of FieldFunction') class OpenTURNSPythonDynamicalFunction(OpenTURNSPythonFieldFunction): def __init__(self, *args): super(OpenTURNSPythonDynamicalFunction, self).__init__(*args) openturns.common.Log.Warn('class OpenTURNSPythonDynamicalFunction is deprecated in favor of OpenTURNSPythonFieldFunction') class PythonDynamicalFunction(PythonFieldFunction): def __new__(self, *args): common.Log.Warn('class PythonDynamicalFunction is deprecated in favor of PythonFieldFunction') return FieldFunction(*args) %} openturns-1.9/python/src/FieldFunctionImplementation.i000066400000000000000000000005761307543307100233540ustar00rootroot00000000000000// SWIG file FieldFunctionImplementation.i %{ #include "openturns/FieldFunctionImplementation.hxx" %} %include FieldFunctionImplementation_doc.i %include openturns/FieldFunctionImplementation.hxx namespace OT { %extend FieldFunctionImplementation { FieldFunctionImplementation(const FieldFunctionImplementation & other) { return new OT::FieldFunctionImplementation(other); } } } openturns-1.9/python/src/FieldFunctionImplementation_doc.i.in000066400000000000000000000132621307543307100246020ustar00rootroot00000000000000%define OT_FieldFunction_doc "Field function. Available constructors: FieldFunction(*meshDimension=1*) FieldFunction(*function, meshDimension=1*) Parameters ---------- function : :class:`~openturns.Function` Function :math:`g: \Rset^d \mapsto \Rset^q` used to define a :class:`~openturns.ValueFunction` object. meshDimension : int, :math:`n \geq 0` Dimension of the mesh :math:`\cM`. Notes ----- Field functions are functions being able to act on fields. Two particular field functions are defined: the :class:`spatial function ` and the :class:`temporal function `. A field function :math:`f_{dyn}:\cD \times \Rset^d \mapsto \cD' \times \Rset^q` where :math:`\cD \in \Rset^n` and :math:`\cD' \in \Rset^p` is defined by: .. math:: f_{dyn}(\vect{t}, \vect{x}) = (t'(\vect{t}), v'(\vect{t}, \vect{x})) with :math:`t': \cD \mapsto \cD'` and :math:`v': \cD \times \Rset^d \mapsto \Rset^q`. A field function :math:`f_{dyn}` transforms a multivariate stochastic process: .. math:: X: \Omega \times \cD \mapsto \Rset^d where :math:`\cD \in \Rset^n` is discretized according to the mesh :math:`\cM` into the multivariate stochastic process: .. math:: Y=f_{dyn}(X) such that: .. math:: Y: \Omega \times \cD' \mapsto \Rset^q where the mesh :math:`\cD' \in \Rset^p` is discretized according to the :math:`\cM'`. A field function :math:`f_{dyn}` also acts on fields and produces fields of possibly different dimension (:math:`q\neq d`) and mesh (:math:`\cD \neq \cD'` or :math:`\cM \neq \cM'`). OpenTURNS only proposes field functions where :math:`\cD'=\cD` and :math:`\cM'=\cM` which means that :math:`t'=Id` through the *spatial function* and the *temporal function*. It follows that the process :math:`Y` shares the same mesh with :math:`X`, only its values have changed." %enddef %feature("docstring") OT::FieldFunctionImplementation OT_FieldFunction_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getCallsNumber_doc "Get the number of calls of a FieldFunction. Returns ------- callsNumber : int Counts the number of times the FieldFunction has been called since its creation." %enddef %feature("docstring") OT::FieldFunctionImplementation::getCallsNumber OT_FieldFunction_getCallsNumber_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getInputDescription_doc "Get the description of the inputs. Returns ------- inputDescription : :class:`~openturns.Description` Describes the inputs of the function." %enddef %feature("docstring") OT::FieldFunctionImplementation::getInputDescription OT_FieldFunction_getInputDescription_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getInputDimension_doc "Get the dimension of the input. Returns ------- d : int Input dimension :math:`d` of the function." %enddef %feature("docstring") OT::FieldFunctionImplementation::getInputDimension OT_FieldFunction_getInputDimension_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getMarginal_doc "Get the marginal(s) at given indice(s). Parameters ---------- i : int or list of ints, :math:`0 \leq i < d` Indice(s) of the marginal(s) needed. :math:`d` is the dimension of the FieldFunction. Returns ------- fieldFunction : :class:`~openturns.FieldFunction` FieldFunction restricted to the concerned marginal(s) at the indice(s) :math:`i` of the field function :math:`f_{dyn}`." %enddef %feature("docstring") OT::FieldFunctionImplementation::getMarginal OT_FieldFunction_getMarginal_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getOutputMesh_doc "Get the mesh associated to the output process. Returns ------- outputMesh : :class:`~openturns.Mesh` The mesh of the output process." %enddef %feature("docstring") OT::FieldFunctionImplementation::getOutputMesh OT_FieldFunction_getOutputMesh_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getSpatialDimension_doc "Get the dimension of the mesh. Returns ------- spatialDimension : int, :math:`n \geq 0` Dimension of the mesh :math:`\cM`." %enddef %feature("docstring") OT::FieldFunctionImplementation::getSpatialDimension OT_FieldFunction_getSpatialDimension_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getOutputDescription_doc "Get the description of the outputs. Returns ------- outputDescription : :class:`~openturns.Description` Describes the outputs of the function." %enddef %feature("docstring") OT::FieldFunctionImplementation::getOutputDescription OT_FieldFunction_getOutputDescription_doc // --------------------------------------------------------------------- %define OT_FieldFunction_getOutputDimension_doc "Get the dimension of the output. Returns ------- q : int Output dimension :math:`q` of the function." %enddef %feature("docstring") OT::FieldFunctionImplementation::getOutputDimension OT_FieldFunction_getOutputDimension_doc // --------------------------------------------------------------------- %feature("docstring") OT::FieldFunctionImplementation::setInputDescription "Set the description of the inputs. Parameters ---------- inputDescription : sequence of str Describes the inputs of the function." // --------------------------------------------------------------------- %feature("docstring") OT::FieldFunctionImplementation::setOutputDescription "Set the description of the outputs. Parameters ---------- outputDescription : sequence of str Describes the outputs of the function." openturns-1.9/python/src/FieldFunction_doc.i.in000066400000000000000000000016241307543307100216730ustar00rootroot00000000000000// FieldFunction docstrings are defined in FieldFunctionImplementation_doc.i.in %feature("docstring") OT::FieldFunction OT_FieldFunction_doc %feature("docstring") OT::FieldFunction::getCallsNumber OT_FieldFunction_getCallsNumber_doc %feature("docstring") OT::FieldFunction::getInputDescription OT_FieldFunction_getInputDescription_doc %feature("docstring") OT::FieldFunction::getInputDimension OT_FieldFunction_getInputDimension_doc %feature("docstring") OT::FieldFunction::getMarginal OT_FieldFunction_getMarginal_doc %feature("docstring") OT::FieldFunction::getOutputMesh OT_FieldFunction_getOutputMesh_doc %feature("docstring") OT::FieldFunction::getSpatialDimension OT_FieldFunction_getSpatialDimension_doc %feature("docstring") OT::FieldFunction::getOutputDescription OT_FieldFunction_getOutputDescription_doc %feature("docstring") OT::FieldFunction::getOutputDimension OT_FieldFunction_getOutputDimension_doc openturns-1.9/python/src/FieldImplementation.i000066400000000000000000000065711307543307100216470ustar00rootroot00000000000000// SWIG file FieldImplementation.i %{ #include "openturns/FieldImplementation.hxx" %} %include FieldImplementation_doc.i #define OT_TYPECHECK_FIELDIMPLEMENTATION 3 %typemap(typecheck,precedence=OT_TYPECHECK_FIELDIMPLEMENTATION) const FieldImplementation & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)); // || OT::isAPythonSequenceOf( $input ); } %apply const FieldImplementation & { const OT::FieldImplementation & }; %include openturns/FieldImplementation.hxx namespace OT{ %extend FieldImplementation { const Point __getitem__ (SignedInteger index) const { if (index < 0) { index += self->getSize(); } return self->at(index); } void __setitem__ (SignedInteger index, const Point & val) { if (index < 0) { index += self->getSize(); } self->at(index) = val; } Scalar __getitem__(PyObject * args) const { OT::UnsignedInteger arg2 ; OT::UnsignedInteger arg3 ; unsigned long val2 ; int ecode2 = 0 ; unsigned long val3 ; int ecode3 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if (!PyArg_ParseTuple(args,(char *)"OO:FieldImplementation___getitem__",&obj1,&obj2)) SWIG_fail; ecode2 = SWIG_AsVal_unsigned_SS_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "FieldImplementation___getitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } arg2 = static_cast< OT::UnsignedInteger >(val2); ecode3 = SWIG_AsVal_unsigned_SS_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FieldImplementation___getitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } arg3 = static_cast< OT::UnsignedInteger >(val3); return (*self).at(arg2, arg3); fail: return 0.; } void __setitem__(PyObject * args, Scalar val) { OT::UnsignedInteger arg2 ; OT::UnsignedInteger arg3 ; unsigned long val2 ; int ecode2 = 0 ; unsigned long val3 ; int ecode3 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if (!PyArg_ParseTuple(args,(char *)"OO:FieldImplementation___setitem__",&obj1,&obj2)) SWIG_fail; ecode2 = SWIG_AsVal_unsigned_SS_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "FieldImplementation___setitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } arg2 = static_cast< OT::UnsignedInteger >(val2); ecode3 = SWIG_AsVal_unsigned_SS_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FieldImplementation___setitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } arg3 = static_cast< OT::UnsignedInteger >(val3); (*self).at(arg2, arg3) = val; fail: return; } FieldImplementation(const FieldImplementation & other) { return new OT::FieldImplementation(other); } } // %extend } %include openturns/FieldImplementation.hxx namespace OT { %extend FieldImplementation { FieldImplementation(const FieldImplementation & other) { return new OT::FieldImplementation(other); } } } openturns-1.9/python/src/FieldImplementation_doc.i.in000066400000000000000000000275511307543307100231020ustar00rootroot00000000000000%define OT_Field_doc "Base class for Fields. Available constructors: Field(*mesh, dim*) Field(*mesh, values*) Parameters ---------- mesh : :class:`~openturns.Mesh` Each vertice of the mesh is in :math:`\cD` a domain of :math:`\Rset^n`. dim : int Dimension :math:`d` of the values. values : 2-d sequence of float of dimension :math:`d` The values associated to the vertices of the mesh. The size of *values* is equal to the number of vertices in the associated mesh. So we must have the equality between *values.getSize()* and *mesh.getVerticesNumber()*. Notes ----- A class:`~openturns.Field` contains a mesh and the values associated to each vertice of the mesh. In the context of a stochastic process :math:`X`, a :class:`~openturns.Field` contains the mesh and a realization of :math:`X` discretized on this mesh. Examples -------- Create a field: >>> import openturns as ot >>> myVertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0], [2.0, 1.5], [0.5, 1.5]] >>> mySimplicies = ot.IndicesCollection([[0,1,2], [1,2,3], [2,3,4], [2,4,5], [0,2,5]]) >>> myMesh = ot.Mesh(myVertices, mySimplicies) >>> myValues = [[2.0],[2.5],[4.0], [4.5], [6.0], [7.0]] >>> myField = ot.Field(myMesh, myValues) Draw the field: >>> myGraph = myField.draw() " %enddef %feature("docstring") OT::FieldImplementation OT_Field_doc // --------------------------------------------------------------------- %define OT_Field_asDeformedMesh_doc "Get the mesh deformed according to the values of the field. Returns ------- deformedMesh : :class:`~openturns.Mesh` The initial mesh is deformed as follows: each vertex of the mesh is replaced by the sum of the vertex and the value of the field at this vertex. Only works when :math:`d=n`: the spatial dimension :math:`n`: is equal to the dimension of the field :math:`d`." %enddef %feature("docstring") OT::FieldImplementation::asDeformedMesh OT_Field_asDeformedMesh_doc // --------------------------------------------------------------------- %define OT_Field_draw_doc "Draw the first marginal of the field if the spatial dimension is less than 2. Returns ------- graph : :class:`~openturns.Graph` Calls *drawMarginal(0, False)*. See also -------- drawMarginal" %enddef %feature("docstring") OT::FieldImplementation::draw OT_Field_draw_doc // --------------------------------------------------------------------- %define OT_Field_drawMarginal_doc "Draw one marginal field if the spatial dimension is less than 2. Parameters ---------- index : int The selected marginal. interpolate : bool Indicates whether the values at the vertices are linearly interpolated. Returns ------- graph : :class:`~openturns.Graph` - If the dimension of the mesh is :math:`n=1` and *interpolate=True*: it draws the graph of the piecewise linear function based on the selected marginal values of the field and the vertices coordinates (in :math:`\Rset`). - If the dimension of the mesh is :math:`n=1` and *interpolate=False*: it draws the cloud of points which coordinates are (vertex, value of the marginal *index*). - If the dimension of the mesh is :math:`n=2` and *interpolate=True*: it draws several iso-values curves of the selected marginal, based on a piecewise linear interpolation within the simplices (triangles) of the mesh. You get an empty graph if the vertices are not connected through simplicies. - If the dimension of the mesh is :math:`n=2` and *interpolate=False*: if the vertices are connected through simplicies, each simplex is drawn with a color defined by the mean of the values of the vertices of the simplex. In the other case, it draws each vertex colored by its value." %enddef %feature("docstring") OT::FieldImplementation::drawMarginal OT_Field_drawMarginal_doc // --------------------------------------------------------------------- %define OT_Field_exportToVTKFile_doc "Create the VTK format file of the field. Parameters ---------- myVTKFile : str Name of the output file. No extension is append to the filename. Notes ----- Creates the VTK format file that contains the mesh and the associated values that can be visualised with the open source software `Paraview `_ ." %enddef %feature("docstring") OT::FieldImplementation::exportToVTKFile OT_Field_exportToVTKFile_doc // --------------------------------------------------------------------- %define OT_Field_getDescription_doc "Get the description of the vertices and the values of the field. Returns ------- description : :class:`~openturns.Description` Description of the vertices and the values of the field." %enddef %feature("docstring") OT::FieldImplementation::getDescription OT_Field_getDescription_doc // --------------------------------------------------------------------- %define OT_Field_getDimension_doc "Get the dimension :math:`d` of the values. Returns ------- d : int Dimension of the values: :math:`d`." %enddef %feature("docstring") OT::FieldImplementation::getDimension OT_Field_getDimension_doc // --------------------------------------------------------------------- %define OT_Field_getMesh_doc "Get the mesh on which the field is defined. Returns ------- mesh : :class:`~openturns.Mesh` Mesh over which the domain :math:`\cD` is discretized." %enddef %feature("docstring") OT::FieldImplementation::getMesh OT_Field_getMesh_doc // --------------------------------------------------------------------- %define OT_Field_getSample_doc "Get the values of the field. Returns ------- values : :class:`~openturns.Sample` Values associated to the mesh. The size of the sample is the number of vertices of the mesh and the dimension is the dimension of the values (:math:`d`)." %enddef %feature("docstring") OT::FieldImplementation::getSample OT_Field_getSample_doc // --------------------------------------------------------------------- %define OT_Field_getSize_doc "Get the number of values inside the field. Returns ------- size : int Number of values inside the field, which corresponds to the number of vertices of the mesh." %enddef %feature("docstring") OT::FieldImplementation::getSize OT_Field_getSize_doc // --------------------------------------------------------------------- %define OT_Field_getSpatialDimension_doc "Get the dimension of the domain :math:`\cD`. Returns ------- n : int Dimension of the domain :math:`\cD`: :math:`n`." %enddef %feature("docstring") OT::FieldImplementation::getSpatialDimension OT_Field_getSpatialDimension_doc // --------------------------------------------------------------------- %define OT_Field_getSpatialMean_doc "Get the spatial weighted mean of the values of the field. Returns ------- spatialMean : :class:`~openturns.Point` Weighted mean of the values of the field, weighted by the volume of each simplex. Notes ----- The spatial mean of the field is defined by: .. math:: \displaystyle \frac{1}{V} \sum_{S_i \in \cM} \left( \frac{1}{n+1}\sum_{k=0}^{n} \vect{x}_{i_k}\right) |S_i| where :math:`S_i` is the simplex of index :math:`i` of the mesh, :math:`|S_i|` its volume and :math:`(\vect{x}_{i_0}, \dots, \vect{x}_{i_n})` the values of the field associated to the vertices of :math:`S_i`, and :math:`\displaystyle V=\sum_{S_i \in \cD} |S_i|`." %enddef %feature("docstring") OT::FieldImplementation::getSpatialMean OT_Field_getSpatialMean_doc // --------------------------------------------------------------------- %define OT_Field_getTemporalMean_doc "Get the mean of the values of the field. Returns ------- temporalMean : :class:`~openturns.Point` Mean of the values of the field. Notes ----- If we note :math:`(\vect{x}_0, \dots, \vect{x}_{N-1})` the values in :math:`\Rset^d` of the field, then the temporal mean is defined by: .. math:: \displaystyle \frac{1}{N} \sum_{i=0}^{N-1} \vect{x}_i Only makes sense in the case of a regular grid." %enddef %feature("docstring") OT::FieldImplementation::getTemporalMean OT_Field_getTemporalMean_doc // --------------------------------------------------------------------- %define OT_Field_getTimeGrid_doc "Get the mesh as a time grid if it is 1D and regular. Returns ------- timeGrid : :class:`~openturns.RegularGrid` Mesh of the field when it can be interpreted as a :class:`~openturns.RegularGrid`. We check if the vertices of the mesh are scalar and are regularly spaced in :math:`\Rset` but we don't check if the connectivity of the mesh is conform to the one of a regular grid (without any hole and composed of ordered instants)." %enddef %feature("docstring") OT::FieldImplementation::getTimeGrid OT_Field_getTimeGrid_doc // --------------------------------------------------------------------- %define OT_Field_getValueAtIndex_doc "Get the value of the field at the vertex of the given index. Parameters ---------- index : int Vertex of the mesh of index *index*. Returns ------- value : :class:`~openturns.Point` The value of the field associated to the selected vertex, in :math:`\Rset^d`." %enddef %feature("docstring") OT::FieldImplementation::getValueAtIndex OT_Field_getValueAtIndex_doc // --------------------------------------------------------------------- %define OT_Field_getValueAtNearestPosition_doc "Get the value of the field at the vertex of the mesh the nearest to the given point. Parameters ---------- point : sequence of float in :math:`\Rset^n`. Returns ------- value : :class:`~openturns.Point` in :math:`\Rset^d`. The value of the field associated to vertex the nearest of *point* with respect to the Euclidean norm." %enddef %feature("docstring") OT::FieldImplementation::getValueAtNearestPosition OT_Field_getValueAtNearestPosition_doc // --------------------------------------------------------------------- %define OT_Field_getValues_doc "Get the values of the field. Returns ------- values : :class:`~openturns.Sample` Values associated to the mesh. The size of the sample is the number of vertices of the mesh and the dimension is the dimension of the values (:math:`d`). Identical to :meth:`getSample`." %enddef %feature("docstring") OT::FieldImplementation::getValues OT_Field_getValues_doc // --------------------------------------------------------------------- %define OT_Field_setDescription_doc "Set the description of the field.. Parameters ---------- myDescription : :class:`~openturns.Description` Description of the field. Must be of size :math:`n+d` and give the description of the vertices and the values." %enddef %feature("docstring") OT::FieldImplementation::setDescription OT_Field_setDescription_doc // --------------------------------------------------------------------- %define OT_Field_setValueAtIndex_doc "Assign the value of the field to the vertex at the given index. Parameters ---------- index : int Index that characterizes one vertex of the mesh. value : :class:`~openturns.Point` in :math:`\Rset^d`. New value assigned to the selected vertex." %enddef %feature("docstring") OT::FieldImplementation::setValueAtIndex OT_Field_setValueAtIndex_doc // --------------------------------------------------------------------- %define OT_Field_setValueAtNearestPosition_doc "Assign the value of the field to the vertex the nearest to a specified position. Parameters ---------- position : sequence of float in :math:`\Rset^n`. value : sequence of float in :math:`\Rset^d`. New value assigned to the vertex the nearest to *position* with respect to the Euclidean norm." %enddef %feature("docstring") OT::FieldImplementation::setValueAtNearestPosition OT_Field_setValueAtNearestPosition_doc // --------------------------------------------------------------------- %define OT_Field_setValues_doc "Assign values to a field. Parameters ---------- values : 2-d sequence of float Values assigned to the mesh. The size of the values is the number of vertices of the mesh and the dimension is :math:`d`." %enddef %feature("docstring") OT::FieldImplementation::setValues OT_Field_setValues_doc openturns-1.9/python/src/Field_doc.i.in000066400000000000000000000031021307543307100201560ustar00rootroot00000000000000// Process docstrings are defined in FieldImplementation_doc.i.in %feature("docstring") OT::Field OT_Field_doc %feature("docstring") OT::Field::asDeformedMesh OT_Field_asDeformedMesh_doc %feature("docstring") OT::Field::draw OT_Field_draw_doc %feature("docstring") OT::Field::drawMarginal OT_Field_drawMarginal_doc %feature("docstring") OT::Field::exportToVTKFile OT_Field_exportToVTKFile_doc %feature("docstring") OT::Field::getDescription OT_Field_getDescription_doc %feature("docstring") OT::Field::getDimension OT_Field_getDimension_doc %feature("docstring") OT::Field::getMesh OT_Field_getMesh_doc %feature("docstring") OT::Field::getSample OT_Field_getSample_doc %feature("docstring") OT::Field::getSize OT_Field_getSize_doc %feature("docstring") OT::Field::getSpatialDimension OT_Field_getSpatialDimension_doc %feature("docstring") OT::Field::getSpatialMean OT_Field_getSpatialMean_doc %feature("docstring") OT::Field::getTemporalMean OT_Field_getTemporalMean_doc %feature("docstring") OT::Field::getTimeGrid OT_Field_getTimeGrid_doc %feature("docstring") OT::Field::getValueAtIndex OT_Field_getValueAtIndex_doc %feature("docstring") OT::Field::getValueAtNearestPosition OT_Field_getValueAtNearestPosition_doc %feature("docstring") OT::Field::getValues OT_Field_getValues_doc %feature("docstring") OT::Field::setDescription OT_Field_setDescription_doc %feature("docstring") OT::Field::setValueAtIndex OT_Field_setValueAtIndex_doc %feature("docstring") OT::Field::setValueAtNearestPosition OT_Field_setValueAtNearestPosition_doc %feature("docstring") OT::Field::setValues OT_Field_setValues_doc openturns-1.9/python/src/FilteringWindows.i000066400000000000000000000005261307543307100212060ustar00rootroot00000000000000// SWIG file FilteringWindows.i %{ #include "openturns/FilteringWindows.hxx" %} %include FilteringWindows_doc.i OTTypedInterfaceObjectHelper(FilteringWindows) %include openturns/FilteringWindows.hxx namespace OT{%extend FilteringWindows { FilteringWindows(const FilteringWindows & other) { return new OT::FilteringWindows(other); } } } openturns-1.9/python/src/FilteringWindowsImplementation.i000066400000000000000000000006241307543307100241130ustar00rootroot00000000000000// SWIG file FilteringWindowsImplementation.i %{ #include "openturns/FilteringWindowsImplementation.hxx" %} %include FilteringWindowsImplementation_doc.i %include openturns/FilteringWindowsImplementation.hxx namespace OT{%extend FilteringWindowsImplementation { FilteringWindowsImplementation(const FilteringWindowsImplementation & other) { return new OT::FilteringWindowsImplementation(other); } } } openturns-1.9/python/src/FilteringWindowsImplementation_doc.i.in000066400000000000000000000002371307543307100253450ustar00rootroot00000000000000%define OT_FilteringWindows_doc "Base class for filtering windows." %enddef %feature("docstring") OT::FilteringWindowsImplementation OT_FilteringWindows_doc openturns-1.9/python/src/FilteringWindows_doc.i.in000066400000000000000000000002321307543307100224320ustar00rootroot00000000000000// FilteringWindows docstrings are defined in FilteringWindowsImplementation_doc.i.in %feature("docstring") OT::FilteringWindows OT_FilteringWindows_doc openturns-1.9/python/src/FiniteBasis.i000066400000000000000000000004101307543307100201000ustar00rootroot00000000000000// SWIG file FiniteBasis.i %{ #include "openturns/FiniteBasis.hxx" %} %ignore OT::FiniteBasis::operator[]; %include openturns/FiniteBasis.hxx namespace OT { %extend FiniteBasis { FiniteBasis(const FiniteBasis & other) { return new OT::FiniteBasis(other); } } } openturns-1.9/python/src/FiniteDifferenceGradient.i000066400000000000000000000005461307543307100225610ustar00rootroot00000000000000// SWIG file FiniteDifferenceGradient.i %{ #include "openturns/FiniteDifferenceGradient.hxx" %} %include FiniteDifferenceGradient_doc.i %include openturns/FiniteDifferenceGradient.hxx namespace OT { %extend FiniteDifferenceGradient { FiniteDifferenceGradient(const FiniteDifferenceGradient & other) { return new OT::FiniteDifferenceGradient(other); } } } openturns-1.9/python/src/FiniteDifferenceGradient_doc.i.in000066400000000000000000000054521307543307100240140ustar00rootroot00000000000000%feature("docstring") OT::FiniteDifferenceGradient "Base class for first order finite-difference schemes. Available constructors: FiniteDifferenceGradient(*epsilon, evalImpl*) FiniteDifferenceGradient(*step, evalImpl*) Parameters ---------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function. epsilon : float, sequence of float Finite difference steps for each dimension. step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed. Notes ----- Base class to define first order finite-difference schemes. The gradient can be computed only through its derived classes: - :class:`~openturns.CenteredFiniteDifferenceGradient`, - :class:`~openturns.NonCenteredFiniteDifferenceGradient`." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::getInputDimension "Get the input dimension. Returns ------- dimension : int Input dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::getOutputDimension "Get the output dimension. Returns ------- dimension : int Output dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::getEpsilon "Get the finite difference steps. Returns ------- epsilon : :class:`~openturns.Point` Finite difference steps for each dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::getEvaluation "Get the implementation of the evaluation of the function. Returns ------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::gradient "Get the gradient at some point. Parameters ---------- point : sequence of float Point where the gradient is computed. Returns ------- gradient : :class:`~openturns.Matrix` Transposed Jacobian matrix evaluated at *point*." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::getFiniteDifferenceStep "Get the finite difference step. Returns ------- step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceGradient::setFiniteDifferenceStep "Set the finite difference step. Parameters ---------- step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed." openturns-1.9/python/src/FiniteDifferenceHessian.i000066400000000000000000000005361307543307100224150ustar00rootroot00000000000000// SWIG file FiniteDifferenceHessian.i %{ #include "openturns/FiniteDifferenceHessian.hxx" %} %include FiniteDifferenceHessian_doc.i %include openturns/FiniteDifferenceHessian.hxx namespace OT { %extend FiniteDifferenceHessian { FiniteDifferenceHessian(const FiniteDifferenceHessian & other) { return new OT::FiniteDifferenceHessian(other); } } } openturns-1.9/python/src/FiniteDifferenceHessian_doc.i.in000066400000000000000000000053331307543307100236470ustar00rootroot00000000000000%feature("docstring") OT::FiniteDifferenceHessian "Base class for second order centered finite-difference scheme. Available constructors: FiniteDifferenceHessian(*epsilon, evalImpl*) FiniteDifferenceHessian(*step, evalImpl*) Parameters ---------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function. epsilon : float, sequence of float Finite difference steps for each dimension. step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed. Notes ----- Base class to define second order finite-difference scheme. The hessian can be computed only through its derived class: - :class:`~openturns.CenteredFiniteDifferenceHessian`." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::getInputDimension "Get the input dimension. Returns ------- dimension : int Input dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::getOutputDimension "Get the output dimension. Returns ------- dimension : int Output dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::getEpsilon "Get the finite difference steps. Returns ------- epsilon : :class:`~openturns.Point` Finite difference steps for each dimension." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::getEvaluation "Get the implementation of the evaluation of the function. Returns ------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::hessian "Get the hessian at some point. Parameters ---------- point : sequence of float Point where the hessian is computed. Returns ------- hessian : :class:`~openturns.SymmetricTensor` Hessian evaluated at *point*." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::getFiniteDifferenceStep "Get the finite difference step. Returns ------- step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed." // --------------------------------------------------------------------- %feature("docstring") OT::FiniteDifferenceHessian::setFiniteDifferenceStep "Set the finite difference step. Parameters ---------- step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed." openturns-1.9/python/src/FiniteDifferenceStep.i000066400000000000000000000005721307543307100217360ustar00rootroot00000000000000// SWIG file FiniteDifferenceStep.i %{ #include "openturns/FiniteDifferenceStep.hxx" %} %include FiniteDifferenceStep_doc.i OTTypedInterfaceObjectHelper(FiniteDifferenceStep) %include openturns/FiniteDifferenceStep.hxx namespace OT { %extend FiniteDifferenceStep { FiniteDifferenceStep(const FiniteDifferenceStep & other) { return new OT::FiniteDifferenceStep(other); } } } openturns-1.9/python/src/FiniteDifferenceStepImplementation.i000066400000000000000000000006661307543307100246500ustar00rootroot00000000000000// SWIG file FiniteDifferenceStepImplementation.i %{ #include "openturns/FiniteDifferenceStepImplementation.hxx" %} %include FiniteDifferenceStepImplementation_doc.i %include openturns/FiniteDifferenceStepImplementation.hxx namespace OT { %extend FiniteDifferenceStepImplementation { FiniteDifferenceStepImplementation(const FiniteDifferenceStepImplementation & other) { return new OT::FiniteDifferenceStepImplementation(other); } } } openturns-1.9/python/src/FiniteDifferenceStepImplementation_doc.i.in000066400000000000000000000031661307543307100261000ustar00rootroot00000000000000%define OT_FiniteDifferenceStep_doc "Base class to define finite difference steps. Available constructors: FiniteDifferenceStep(*epsilon=[1.0]*) Parameters ---------- epsilon : sequence of float Finite difference steps for each dimension. Notes ----- Base class to define how finite difference steps are computed. Using *FiniteDifferenceStep* is equivalent to use its derived class :class:`~openturns.ConstantStep`. Another way to compute steps is through its second derived class :class:`~openturns.BlendedStep`." %enddef %feature("docstring") OT::FiniteDifferenceStepImplementation OT_FiniteDifferenceStep_doc // --------------------------------------------------------------------- %define OT_FiniteDifferenceStep_getEpsilon_doc "Get the finite difference steps. Returns ------- epsilon : :class:`~openturns.Point` If :class:`~openturns.ConstantStep` : Finite difference steps for each dimension. If :class:`~openturns.BlendedStep` : Finite difference step factors for each dimension." %enddef %feature("docstring") OT::FiniteDifferenceStepImplementation::getEpsilon OT_FiniteDifferenceStep_getEpsilon_doc // --------------------------------------------------------------------- %define OT_FiniteDifferenceStep_setEpsilon_doc "Set the finite difference steps. Parameters ---------- epsilon : sequence of float If :class:`~openturns.ConstantStep` : Finite difference steps for each dimension. If :class:`~openturns.BlendedStep` : Finite difference step factors for each dimension." %enddef %feature("docstring") OT::FiniteDifferenceStepImplementation::setEpsilon OT_FiniteDifferenceStep_setEpsilon_docopenturns-1.9/python/src/FiniteDifferenceStep_doc.i.in000066400000000000000000000005551307543307100231710ustar00rootroot00000000000000// FiniteDifferenceStep docstrings are defined in FiniteDifferenceStepImplementation_doc.i.in %feature("docstring") OT::FiniteDifferenceStep OT_FiniteDifferenceStep_doc %feature("docstring") OT::FiniteDifferenceStep::getEpsilon OT_FiniteDifferenceStep_getEpsilon_doc %feature("docstring") OT::FiniteDifferenceStep::setEpsilon OT_FiniteDifferenceStep_setEpsilon_docopenturns-1.9/python/src/FisherSnedecor.i000066400000000000000000000004261307543307100206120ustar00rootroot00000000000000// SWIG file FisherSnedecor.i %{ #include "openturns/FisherSnedecor.hxx" %} %include FisherSnedecor_doc.i %include openturns/FisherSnedecor.hxx namespace OT { %extend FisherSnedecor { FisherSnedecor(const FisherSnedecor & other) { return new OT::FisherSnedecor(other); } } } openturns-1.9/python/src/FisherSnedecorFactory.i000066400000000000000000000005161307543307100221420ustar00rootroot00000000000000// SWIG file FisherSnedecorFactory.i %{ #include "openturns/FisherSnedecorFactory.hxx" %} %include FisherSnedecorFactory_doc.i %include openturns/FisherSnedecorFactory.hxx namespace OT { %extend FisherSnedecorFactory { FisherSnedecorFactory(const FisherSnedecorFactory & other) { return new OT::FisherSnedecorFactory(other); } } } openturns-1.9/python/src/FisherSnedecorFactory_doc.i.in000066400000000000000000000004031307543307100233670ustar00rootroot00000000000000%feature("docstring") OT::FisherSnedecorFactory "Fisher-Snedecor factory. Available constructor: FisherSnedecorFactory() The parameters are estimated by numerical maximum likelihood estimation. See also -------- DistributionFactory, FisherSnedecor" openturns-1.9/python/src/FisherSnedecor_doc.i.in000066400000000000000000000042721307543307100220470ustar00rootroot00000000000000%feature("docstring") OT::FisherSnedecor "Fisher-Snedecor distribution. Available constructors: FisherSnedecor(*d1=1.0, d2=5.0*) Parameters ---------- d1 : float, :math:`d_1 > 0` First :class:`~openturns.ChiSquare` degrees of freedom (numerator). d2 : float, :math:`d_2 > 0` Second :class:`~openturns.ChiSquare` degrees of freedom (denominator). Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{x {\rm B}(d_1 / 2, d_2 / 2)} \left[\left(\frac{d_1 x}{d_1 x + d_2}\right)^{d_1 / 2} \left(1 - \frac{d_1 x}{d_1 x + d_2}\right)^{d_2 / 2}\right], \quad x \in \Rset^{+*} with :math:`d_1, d_2 > 0` and where :math:`\rm B` denotes Euler's beta function. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{d_2}{d_2 - 2} \\ \Var{X} & = & \frac{d_1 - 2}{d_1}\,\frac{d_2}{d_2 + 2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.FisherSnedecor(2.0, 3.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::FisherSnedecor::getD1 "Accessor to the parameter :math:`d_1`. Returns ------- d1 : float First :class:`~openturns.ChiSquare` degrees of freedom (numerator)." // --------------------------------------------------------------------- %feature("docstring") OT::FisherSnedecor::getD2 "Accessor to the parameter :math:`d_2`. Returns ------- d2 : float Second :class:`~openturns.ChiSquare` degrees of freedom (denominator)." // --------------------------------------------------------------------- %feature("docstring") OT::FisherSnedecor::setD1 "Accessor to the parameter :math:`d_1`. Parameters ---------- d1 : float, :math:`d_1 > 0` First :class:`~openturns.ChiSquare` degrees of freedom (numerator)." // --------------------------------------------------------------------- %feature("docstring") OT::FisherSnedecor::setD2 "Accessor to the parameter :math:`d_2`. Parameters ---------- d2 : float, :math:`d_2 > 0` Second :class:`~openturns.ChiSquare` degrees of freedom (denominator)." openturns-1.9/python/src/FittingAlgorithm.i000066400000000000000000000005261307543307100211630ustar00rootroot00000000000000// SWIG file FittingAlgorithm.i %{ #include "openturns/FittingAlgorithm.hxx" %} %include FittingAlgorithm_doc.i OTTypedInterfaceObjectHelper(FittingAlgorithm) %include openturns/FittingAlgorithm.hxx namespace OT { %extend FittingAlgorithm { FittingAlgorithm(const FittingAlgorithm & other) { return new OT::FittingAlgorithm(other); } } } openturns-1.9/python/src/FittingAlgorithmImplementation.i000066400000000000000000000006261307543307100240720ustar00rootroot00000000000000// SWIG file FittingAlgorithmImplementation.i %{ #include "openturns/FittingAlgorithmImplementation.hxx" %} %include FittingAlgorithmImplementation_doc.i %include openturns/FittingAlgorithmImplementation.hxx namespace OT { %extend FittingAlgorithmImplementation { FittingAlgorithmImplementation(const FittingAlgorithmImplementation & other) { return new OT::FittingAlgorithmImplementation(other); } } } openturns-1.9/python/src/FittingAlgorithmImplementation_doc.i.in000066400000000000000000000012071307543307100253200ustar00rootroot00000000000000%define OT_FittingAlgorithm_doc "Fitting algorithm. Available constructors: FittingAlgorithm(*fittingAlgoImp*) Parameters ---------- fittingAlgoImp : a FittingAlgorithmImplementation A fitting algorithm implementation which is the :class:`~openturns.CorrectedLeaveOneOut` or :class:`~openturns.KFold`. See also -------- CorrectedLeaveOneOut, KFold Notes ----- FittingAlgorithm is the interface of the FittingAlgorithmImplementation. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." %enddef %feature("docstring") OT::FittingAlgorithmImplementation OT_FittingAlgorithm_docopenturns-1.9/python/src/FittingAlgorithm_doc.i.in000066400000000000000000000002321307543307100224070ustar00rootroot00000000000000// FittingAlgorithm docstrings are defined in FittingAlgorithmImplementation_doc.i.in %feature("docstring") OT::FittingAlgorithm OT_FittingAlgorithm_doc openturns-1.9/python/src/FittingTest.i000066400000000000000000000031411307543307100201500ustar00rootroot00000000000000// SWIG file FittingTest.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::TestResult & bestResult ($*ltype temp) %{ temp = OT::TestResult(); $1 = &temp; %} %typemap(argout) OT::TestResult & bestResult %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::TestResult(*$1), SWIG_TypeQuery("OT::TestResult *"), SWIG_POINTER_OWN | 0 )); %} OT::Distribution OT::FittingTest::BestModelKolmogorov(const OT::Sample & sample, const OT::DistributionFactoryCollection & factoryCollection, OT::TestResult & bestResult); OT::Distribution OT::FittingTest::BestModelKolmogorov(const OT::Sample & sample, const OT::DistributionCollection & distributionCollection, OT::TestResult & bestResult); OT::Distribution OT::FittingTest::BestModelChiSquared(const OT::Sample & sample, const OT::DistributionFactoryCollection & factoryCollection, OT::TestResult & bestResult); OT::Distribution OT::FittingTest::BestModelChiSquared(const OT::Sample & sample, const OT::DistributionCollection & distributionCollection, OT::TestResult & bestResult); %{ #include "openturns/FittingTest.hxx" %} %include FittingTest_doc.i %include openturns/FittingTest.hxx openturns-1.9/python/src/FittingTest_doc.i.in000066400000000000000000000232121307543307100214030ustar00rootroot00000000000000%feature("docstring") OT::FittingTest::BestModelBIC "Select the best model according to the Bayesian information criterion. Parameters ---------- sample : 2-d sequence of float Tested sample. models : list of :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distributions. Returns ------- best_model : :class:`~openturns.Distribution` The best distribution for the sample according to Bayesian information criterion. This may raise a warning if the best model does not perform well. See Also -------- FittingTest_BIC Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> tested_distributions = [ot.ExponentialFactory(), ot.NormalFactory()] >>> best_model = ot.FittingTest.BestModelBIC(sample, tested_distributions) >>> print(best_model) Normal(mu = -0.0944924, sigma = 0.989808)" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::BestModelChiSquared "Select the best model according to the :math:`\chi^2` goodness-of-fit test. Parameters ---------- sample : 2-d sequence of float Tested sample. models : list of :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distributions. Returns ------- best_model : :class:`~openturns.Distribution` The best distribution for the sample according to Bayesian information criterion. This may raise a warning if the best model does not perform well. best_result : :class:`~openturns.TestResult` Best test result. See Also -------- FittingTest_ChiSquared Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Poisson() >>> sample = distribution.getSample(30) >>> tested_distributions = [ot.PoissonFactory(), ot.UserDefinedFactory()] >>> best_model = ot.FittingTest.BestModelBIC(sample, tested_distributions) >>> print(best_model) Poisson(lambda = 1.06667)" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::BestModelKolmogorov "Select the best model according to the Kolmogorov goodness-of-fit test. Parameters ---------- sample : 2-d sequence of float Tested sample. models : list of :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distributions. Returns ------- best_model : :class:`~openturns.Distribution` The best distribution for the sample according to Bayesian information criterion. This may raise a warning if the best model does not perform well. best_result : :class:`~openturns.TestResult` Best test result. See Also -------- FittingTest_Kolmogorov Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> tested_distributions = [ot.ExponentialFactory(), ot.NormalFactory()] >>> best_model, best_result = ot.FittingTest.BestModelKolmogorov(sample, tested_distributions) >>> print(best_model) Normal(mu = -0.0944924, sigma = 0.989808)" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::BIC "Compute the Bayesian information criterion. Parameters ---------- sample : 2-d sequence of float Tested sample. model : :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distribution. n_parameters : int, :math:`0 \leq k`, optional The number of parameters in the distribution that have been estimated from the sample. This parameter must not be provided if a :class:`~openturns.DistributionFactory` was provided as the second argument (it will internally be set to the number of parameters estimated by the :class:`~openturns.DistributionFactory`). It can be specified if a :class:`~openturns.Distribution` was provided as the second argument, but if it is not, it will be set equal to 0. Returns ------- BIC : float The Bayesian information criterion. Notes ----- The Bayesian information criterion is defined as follows: .. math:: {\rm BIC} = \frac{1}{m} \left(- 2 \log L(\vect{x}^{(i)}, i = 1, \ldots, m) + k \log m\right) where :math:`\log L` denotes the log-likelihood of the sample with respect to the given distribution, and :math:`k` denotes the number of estimated parameters in the distribution. This is used for model selection. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> ot.FittingTest.BIC(sample, distribution) 2.7938693005063415 >>> ot.FittingTest.BIC(sample, distribution, 2) 3.0206157926171517 >>> ot.FittingTest.BIC(sample, ot.NormalFactory()) 3.0108025506670955" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::ChiSquared "Perform a :math:`\chi^2` goodness-of-fit test for 1-d discrete distributions. Parameters ---------- sample : 2-d sequence of float Tested sample. model : :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distribution. level : float, :math:`0 \leq {\rm level} \leq 1`, optional This the value such that :math:`\alpha = 1 - {\rm level}` is the risk of committing a Type I error, that is an incorrect rejection of a true null hypothesis. n_parameters : int, :math:`0 \leq k`, optional The number of parameters in the distribution that have been estimated from the sample. This parameter must not be provided if a :class:`~openturns.DistributionFactory` was provided as the second argument (it will internally be set to the number of parameters estimated by the :class:`~openturns.DistributionFactory`). It can be specified if a :class:`~openturns.Distribution` was provided as the second argument, but if it is not, it will be set equal to 0. Returns ------- test_result : :class:`~openturns.TestResult` Test result. Raises ------ TypeError : If the distribution is not discrete or if the sample is multivariate. Notes ----- This is an interface to the `chisq.test function from the 'stats' R package `_. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Poisson() >>> sample = distribution.getSample(30) >>> ot.FittingTest.ChiSquared(sample, ot.PoissonFactory(), .99) class=TestResult name=Unnamed type=ChiSquaredPoisson binaryQualityMeasure=true p-value threshold=0.01 p-value=0.606136 description=[]" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::Kolmogorov "Perform a Kolmogorov goodness-of-fit test for 1-d continuous distributions. Parameters ---------- sample : 2-d sequence of float Tested sample. model : :class:`~openturns.Distribution` or :class:`~openturns.DistributionFactory` Tested distribution. level : float, :math:`0 \leq {\rm level} \leq 1`, optional This is the value such that :math:`\alpha = 1 - {\rm level}` is the risk of committing a Type I error, that is an incorrect rejection of a true null hypothesis. n_parameters : int, :math:`0 \leq k`, optional The number of parameters in the distribution that have been estimated from the sample. This parameter must not be provided if a :class:`~openturns.DistributionFactory` was provided as the second argument (it will internally be set to the number of parameters estimated by the :class:`~openturns.DistributionFactory`). It can be specified if a :class:`~openturns.Distribution` was provided as the second argument, but if it is not, it will be set equal to 0. Returns ------- test_result : :class:`~openturns.TestResult` Test result. Raises ------ TypeError : If the distribution is not continuous or if the sample is multivariate. Notes ----- The present implementation of the Kolmogorov goodness-of-fit test is two-sided. This uses an external C implementation of the Kolmogorov cumulative distribution function by [Simard2011]_. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> ot.FittingTest.Kolmogorov(sample, ot.NormalFactory(), .99) class=TestResult name=Unnamed type=KolmogorovDistribution binaryQualityMeasure=true p-value threshold=0.01 p-value=0.846896 description=[Normal(mu = -0.0944924, sigma = 0.989808) vs sample Normal]" // --------------------------------------------------------------------- %feature("docstring") OT::FittingTest::TwoSamplesKolmogorov "Perform a Kolmogorov goodness-of-fit test on two samples. If the p-value is high, then we cannot reject the hypothesis that the distributions of the two samples are the same. Parameters ---------- sample1 : 2-d float array A continuous distribution sample. sample2 : 2-d float array Another continuous distribution sample, can be of different size. level : float, :math:`0 \leq {\rm level} \leq 1`, optional This the value such that :math:`\alpha = 1 - {\rm level}` is the risk of committing a Type I error, that is an incorrect rejection of a true null hypothesis. Returns ------- test_result : :class:`~openturns.TestResult` Test result. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample1 = ot.Normal().getSample(20) >>> sample2 = ot.Normal(0.1, 1.1).getSample(30) >>> ot.FittingTest.TwoSamplesKolmogorov(sample1, sample2) class=TestResult name=Unnamed type=Kolmogorov Normal/Normal binaryQualityMeasure=true p-value threshold=0.05 p-value=0.554765 description=[sampleNormal vs sample Normal]" openturns-1.9/python/src/FixedExperiment.i000066400000000000000000000004361307543307100210100ustar00rootroot00000000000000// SWIG file FixedExperiment.i %{ #include "openturns/FixedExperiment.hxx" %} %include FixedExperiment_doc.i %include openturns/FixedExperiment.hxx namespace OT { %extend FixedExperiment { FixedExperiment(const FixedExperiment & other) { return new OT::FixedExperiment(other); } } } openturns-1.9/python/src/FixedExperiment_doc.i.in000066400000000000000000000024021307543307100222350ustar00rootroot00000000000000%feature("docstring") OT::FixedExperiment "Fixed experiment. Available constructors: FixedExperiment(*aSample*) FixedExperiment(*aSample, weights*) Parameters ---------- aSample : 2-d sequence of float Sample that already exists. weights : sequence of float Weights of each point of *aSample*. Notes ----- FixedExperiment is a deterministic weighted design of experiments. It enables to take into account a random sample which has been obtained outside the OpenTURNS study or at another step of the OpenTURNS study. The :meth:`generate` method always gives the same sample, *aSample*, if it is recalled. When not specified, the weights associated to the points are all equal to :math:`1/cardI`. Then the sample *aSample* is considered as generated from the limit distribution :math:`\lim\limits_{cardI \to \infty} \sum_{i \in I} \omega_i \delta_{\vect{X}_i}=\mu`. The :meth:`setDistribution` method has no side effect, as the distribution is fixed by the initial sample. See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = [[i,i+1] for i in range(5)] >>> myPlane = ot.FixedExperiment(sample) >>> print(myPlane.generate()) 0 : [ 0 1 ] 1 : [ 1 2 ] 2 : [ 2 3 ] 3 : [ 3 4 ] 4 : [ 4 5 ]" openturns-1.9/python/src/FixedStrategy.i000066400000000000000000000004151307543307100204670ustar00rootroot00000000000000// SWIG file FixedStrategy.i %{ #include "openturns/FixedStrategy.hxx" %} %include FixedStrategy_doc.i %include openturns/FixedStrategy.hxx namespace OT{ %extend FixedStrategy { FixedStrategy(const FixedStrategy & other) { return new OT::FixedStrategy(other); } } } openturns-1.9/python/src/FixedStrategy_doc.i.in000066400000000000000000000045301307543307100217230ustar00rootroot00000000000000%feature("docstring") OT::FixedStrategy "Fixed truncation strategy. Available constructors: FixedStrategy(*orthogonalBasis, dimension*) Parameters ---------- orthogonalBasis : :class:`~openturns.OrthogonalBasis` An OrthogonalBasis. dimension : positive int Number of terms of the basis. See also -------- AdaptiveStrategy, SequentialStrategy, CleaningStrategy Notes ----- The so-called fixed strategy simply consists in retaining the first :math:`P` elements of the PC basis, the latter being ordered according to a given :class:`~openturns.EnumerateFunction` (hyperbolic or not). The retained set is built in a single pass. The truncated PC expansion is given by: .. math:: \hat{h} (\uX) = \sum_{j=0}^{P-1} \vect{a}_j \Psi_j (\uX) In case of a :class:`~openturns.LinearEnumerateFunction`, for a given natural integer :math:`p`, a usual choice is to set :math:`P` equals to: .. math:: P = \binom{n_X + p}{p} = \frac{(n_X + p)!}{n_X!\,p!} This way the set of retained basis functions :math:`\{\Psi_j, j = 0, \ldots, P-1\}` gathers all the polynomials with total degree not greater than :math:`p`. The number of terms :math:`P` grows polynomially both in :math:`n_X` and :math:`p` though, which may lead to difficulties in terms of computational efficiency and memory requirements when dealing with high-dimensional problems. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Define the model >>> inputDim = 1 >>> model = ot.SymbolicFunction(['x'], ['x*sin(x)']) >>> # Create the input distribution >>> distribution = ot.ComposedDistribution([ot.Uniform()]*inputDim) >>> # Construction of the multivariate orthonormal basis >>> polyColl = [0.0]*inputDim >>> for i in range(distribution.getDimension()): ... polyColl[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i)) >>> enumerateFunction = ot.LinearEnumerateFunction(inputDim) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> # Truncature strategy of the multivariate orthonormal basis >>> # We choose all the polynomials of degree <= 4 >>> degree = 4 >>> indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) >>> print(indexMax) 5 >>> # We keep all the polynomials of degree <= 4 >>> # which corresponds to the 5 first ones >>> adaptiveStrategy = ot.FixedStrategy(productBasis, indexMax)" openturns-1.9/python/src/FourierSeriesFactory.i000066400000000000000000000005051307543307100220230ustar00rootroot00000000000000// SWIG file FourierSeriesFactory.i %{ #include "openturns/FourierSeriesFactory.hxx" %} %include FourierSeriesFactory_doc.i %include openturns/FourierSeriesFactory.hxx namespace OT{ %extend FourierSeriesFactory { FourierSeriesFactory(const FourierSeriesFactory & other) { return new OT::FourierSeriesFactory(other); } } } openturns-1.9/python/src/FourierSeriesFactory_doc.i.in000066400000000000000000000006731307543307100232630ustar00rootroot00000000000000%define OT_FourierSeriesFactory_doc "Fourier series function factory. Generates the Fourier basis defined as follows: .. math:: \begin{array}{lcl} \psi_0(x) & = & 1 \\ \psi_{2k+1}(x) & = & \sqrt{2}\sin(kx) \\ \psi_{2k+2}(x) & = & \sqrt{2}\cos(kx) \end{array} See also -------- OrthogonalUniVariatePolynomialFunctionFactory" %enddef %feature("docstring") OT::FourierSeriesFactory OT_FourierSeriesFactory_doc openturns-1.9/python/src/FrankCopula.i000066400000000000000000000003761307543307100201200ustar00rootroot00000000000000// SWIG file FrankCopula.i %{ #include "openturns/FrankCopula.hxx" %} %include FrankCopula_doc.i %include openturns/FrankCopula.hxx namespace OT { %extend FrankCopula { FrankCopula(const FrankCopula & other) { return new OT::FrankCopula(other); } } } openturns-1.9/python/src/FrankCopulaFactory.i000066400000000000000000000004661307543307100214500ustar00rootroot00000000000000// SWIG file FrankCopulaFactory.i %{ #include "openturns/FrankCopulaFactory.hxx" %} %include FrankCopulaFactory_doc.i %include openturns/FrankCopulaFactory.hxx namespace OT { %extend FrankCopulaFactory { FrankCopulaFactory(const FrankCopulaFactory & other) { return new OT::FrankCopulaFactory(other); } } } openturns-1.9/python/src/FrankCopulaFactory_doc.i.in000066400000000000000000000002401307543307100226700ustar00rootroot00000000000000%feature("docstring") OT::FrankCopulaFactory "Frank Copula factory. Available constructor: FrankCopulaFactory() See also -------- DistributionFactory" openturns-1.9/python/src/FrankCopula_doc.i.in000066400000000000000000000024741307543307100213530ustar00rootroot00000000000000%feature("docstring") OT::FrankCopula "Frank copula. Available constructor: FrankCopula(*theta=2.0*) Parameters ---------- theta : float Parameter :math:`\theta`, :math:`\theta \in \Rset`. Notes ----- The Frank copula is a bivariate symmetric Archimedean copula defined by: .. math:: C(u_1, u_2) = -\frac{1}{\theta} log \left( 1 + \frac{(e^{-\theta u_1} - 1)(e^{-\theta u_2} - 1)} {e^{-\theta} - 1} \right) for :math:`(u_1, u_2) \in [0, 1]^2` And its generator is: .. math:: \varphi(t) = -\log \left( \frac{e^{-\theta t}-1}{e^{-\theta}-1} \right) See also -------- ArchimedeanCopula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.FrankCopula(2.5) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::FrankCopula::getTheta "Get the parameter :math:`\theta`. Returns ------- theta : float Parameter :math:`\theta` of the copula." // --------------------------------------------------------------------- %feature("docstring") OT::FrankCopula::setTheta "Set the parameter :math:`\theta`. Parameters ---------- theta : float Parameter :math:`\theta` of the copula." openturns-1.9/python/src/Frechet.i000066400000000000000000000003361307543307100172670ustar00rootroot00000000000000// SWIG file Frechet.i %{ #include "openturns/Frechet.hxx" %} %include Frechet_doc.i %include openturns/Frechet.hxx namespace OT { %extend Frechet { Frechet(const Frechet & other) { return new OT::Frechet(other); } } } openturns-1.9/python/src/Frechet_doc.i.in000066400000000000000000000041641307543307100205240ustar00rootroot00000000000000%feature("docstring") OT::Frechet "Frechet distribution. Available constructors: Frechet(*alpha=1.0, beta=1.0, gamma=0.0*) Parameters ---------- alpha : float, :math:`\alpha > 0` Shape parameter beta : float, :math:`\beta > 0` Concentration parameter gamma : float Location parameter Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\alpha}{\beta}(\frac{x-\gamma}{\beta})^{-1-\alpha}e^{-\left(\frac{x-\gamma}{\beta}\right)^{-\alpha}} with :math:`\alpha > 0` and :math:`\beta > 0`. Its cumulative density function is defined as: .. math:: F_X(x) = e^{-\left(\frac{x-\gamma}{\beta}\right)^{-\alpha}} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Frechet(3.0, 1.0, 0.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::getAlpha "Accessor to the shape parameter. Returns ------- alpha : float Shape parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::setAlpha "Accessor to the shape parameter. Parameters ---------- alpha : float, :math:`\alpha > 0` Shape parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::getBeta "Accessor to the scale parameter. Returns ------- beta : float Scale parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::setBeta "Accessor to the scale parameter. Parameters ---------- beta : float, :math:`\beta > 0` Scale parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::getGamma "Accessor to the location parameter. Returns ------- gamma : float Location parameter." // --------------------------------------------------------------------- %feature("docstring") OT::Frechet::setGamma "Accessor to the location parameter. Parameters ---------- gamma : float, :math:`\gamma > 0` Location parameter." openturns-1.9/python/src/Full.i000066400000000000000000000003051307543307100166050ustar00rootroot00000000000000// SWIG file Full.i %{ #include "openturns/Full.hxx" %} %include Full_doc.i %include openturns/Full.hxx namespace OT{ %extend Full { Full(const Full & other) { return new OT::Full(other); } } } openturns-1.9/python/src/Full_doc.i.in000066400000000000000000000004131307543307100200370ustar00rootroot00000000000000%feature("docstring") OT::Full "Full history storage strategy. Available constructors: Full() See also -------- HistoryStrategy, Compact, Null, Last Notes ----- The full strategy stores every points. Be careful! The memory will be exhausted for huge samples." openturns-1.9/python/src/Function.i000066400000000000000000000230051307543307100174720ustar00rootroot00000000000000// SWIG file Function.i %{ #include "openturns/Function.hxx" #include "openturns/PythonEvaluation.hxx" %} %include BaseFuncCollection.i OTTypedInterfaceObjectHelper(Function) //OTTypedCollectionInterfaceObjectHelper(Function) %typemap(in) const FunctionCollection & { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIG_TypeQuery("OT::Basis *"), 0))) { // From Implementation* OT::Basis * p_impl = reinterpret_cast< OT::Basis * >( ptr ); $1 = new OT::Collection(*p_impl); } else { try { $1 = OT::buildCollectionFromPySequence< OT::Function >( $input ); } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Function"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const FunctionCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::canConvertCollectionObjectFromPySequence< OT::Function >( $input ) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIG_TypeQuery("OT::Basis *"), 0)); } %apply const FunctionCollection & { const OT::Collection & }; %template(FunctionCollection) OT::Collection; %template(FunctionPersistentCollection) OT::PersistentCollection; %include Function_doc.i %ignore OT::Function::getUseDefaultGradientImplementation; %ignore OT::Function::setUseDefaultGradientImplementation; %ignore OT::Function::getUseDefaultHessianImplementation; %ignore OT::Function::setUseDefaultHessianImplementation; %include openturns/Function.hxx namespace OT { %extend Function { Function(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyObj, &ptr, SWIG_TypeQuery("OT::Object *"), 0))) { throw OT::InvalidArgumentException(HERE) << "Argument should be a pure python object"; } return new OT::Function(OT::convert(pyObj)); } Function(const Function & other) { return new OT::Function( other ); } } } %pythoncode %{ # We have to make sure the submodule is loaded with absolute path import openturns.typ class OpenTURNSPythonFunction(object): """ Override Function from Python. Parameters ---------- n : positive int the input dimension p : positive int the output dimension Notes ----- You have to overload the function: _exec(X): single evaluation, X is a sequence of float, returns a sequence of float You can also optionally override these functions: _exec_sample(X): multiple evaluations, X is a 2-d sequence of float, returns a 2-d sequence of float _gradient(X): gradient, X is a sequence of float, returns a 2-d sequence of float _hessian(X): hessian, X is a sequence of float, returns a 3-d sequence of float """ def __init__(self, n=0, p=0): try: self.__n = int(n) except: raise TypeError('n argument is not an integer.') try: self.__p = int(p) except: raise TypeError('p argument is not an integer.') self.__descIn = list(map(lambda i: 'x' + str(i), range(n))) self.__descOut = list(map(lambda i: 'y' + str(i), range(p))) def setInputDescription(self, descIn): if (len(descIn) != self.__n): raise ValueError('Input description size does NOT match input dimension') self.__descIn = descIn def getInputDescription(self): return self.__descIn def setOutputDescription(self, descOut): if (len(descOut) != self.__p): raise ValueError('Output description size does NOT match output dimension') self.__descOut = descOut def getOutputDescription(self): return self.__descOut def getInputDimension(self): return self.__n def getOutputDimension(self): return self.__p def __str__(self): return 'OpenTURNSPythonFunction( %s #%d ) -> %s #%d' % (self.__descIn, self.__n, self.__descOut, self.__p) def __repr__(self): return self.__str__() def __call__(self, X): Y = None try: pt = openturns.typ.Point(X) except TypeError: try: ns = openturns.typ.Sample(X) except TypeError: raise TypeError('Expect a 1-d or 2-d sequence of float as argument') else: Y = self._exec_sample(ns) else: Y = self._exec(pt) return Y def _exec(self, X): raise RuntimeError('You must define a method _exec(X) -> Y, where X and Y are 1-d sequence of float') def _exec_sample(self, X): res = list() for point in X: res.append(self._exec(point)) return res def _exec_point_on_exec_sample(self, X): """Implement exec from exec_sample.""" return self._exec_sample([X])[0] def _exec_sample_multiprocessing(func, n_cpus): """Return a distributed function using multiprocessing. Parameters ---------- func : Function or calable A callable python object, usually a function. The function should take an input vector as argument and return an output vector. n_cpus : int Number of CPUs on which to distribute the function calls. Returns ------- _exec_sample : Function or callable The parallelized funtion. """ def _exec_sample(X): from multiprocessing import Pool p = Pool(processes=n_cpus) rs = p.map_async(func, X) p.close() return rs.get() return _exec_sample class PythonFunction(Function): """ Override Function from Python. Parameters ---------- n : positive int the input dimension p : positive int the output dimension func : a callable python object called on a single point. Default is None. func_sample : a callable python object called on multiple points at once. Default is None. gradient : a callable python objects returns the gradient as a 2-d sequence of float. Default is None (uses finite-difference). hessian : a callable python object returns the hessian as a 3-d sequence of float. Default is None (uses finite-difference). n_cpus : integer Number of cpus on which func should be distributed using multiprocessing. If -1, it uses all the cpus available. If 1, it does nothing. If n_cpus and func_sample are both given as arguments, n_cpus will be ignored and samples will be handled by func_sample. Default is None. Notes ----- You must provide at least func or func_sample arguments. Notice that if func_sample is provided, n_cpus is ignored. Note also that if PythonFunction is distributed (n_cpus > 1), the traceback of a raised exception by a func call is lost due to the way multiprocessing dispatches and handles func calls. This can be solved by temporarily deactivating n_cpus during the development of the wrapper or by manually handling the distribution of the wrapper with external libraries like joblib that keep track of a raised exception and shows the traceback to the user. Examples -------- >>> import openturns as ot >>> def a_exec(X): ... Y = [3.*X[0] - X[1]] ... return Y >>> def a_grad(X): ... dY = [[3.], [-1.]] ... return dY >>> f = ot.PythonFunction(2, 1, a_exec, gradient=a_grad) >>> X = [100., 100.] >>> Y = f(X) >>> print(Y) [200] >>> dY = f.gradient(X) >>> print(dY) [[ 3 ] [ -1 ]] """ def __new__(self, n, p, func=None, func_sample=None, gradient=None, hessian=None, n_cpus=None): if func == None and func_sample == None: raise RuntimeError('no func nor func_sample given.') instance = OpenTURNSPythonFunction(n, p) import collections if func != None: if not isinstance(func, collections.Callable): raise RuntimeError('func argument is not callable.') instance._exec = func if func_sample != None: if not isinstance(func_sample, collections.Callable): raise RuntimeError('func_sample argument is not callable.') instance._exec_sample = func_sample if func == None: instance._exec = instance._exec_point_on_exec_sample elif n_cpus != None and n_cpus != 1 and func != None: if not isinstance(n_cpus, int): raise RuntimeError('n_cpus is not an integer') if n_cpus == -1: import multiprocessing n_cpus = multiprocessing.cpu_count() instance._exec_sample = _exec_sample_multiprocessing(func, n_cpus) if gradient != None: if not isinstance(gradient, collections.Callable): raise RuntimeError('gradient argument is not callable.') instance._gradient = gradient if hessian != None: if not isinstance(hessian, collections.Callable): raise RuntimeError('hessian argument is not callable.') instance._hessian = hessian return Function(instance) # deprecated class NumericalMathFunction(Function): def __init__(self, *args): super(NumericalMathFunction, self).__init__(*args) openturns.common.Log.Warn('class NumericalMathFunction is deprecated in favor of Function') %} openturns-1.9/python/src/FunctionImplementation.i000066400000000000000000000015421307543307100224020ustar00rootroot00000000000000// SWIG file FunctionImplementation.i %{ #include "openturns/FunctionImplementation.hxx" %} %include FunctionImplementation_doc.i %template(EvaluationImplementation) OT::Pointer; %template(GradientImplementation) OT::Pointer; %template(HessianImplementation) OT::Pointer; %ignore OT::FunctionImplementation::getUseDefaultGradientImplementation; %ignore OT::FunctionImplementation::setUseDefaultGradientImplementation; %ignore OT::FunctionImplementation::getUseDefaultHessianImplementation; %ignore OT::FunctionImplementation::setUseDefaultHessianImplementation; %include openturns/FunctionImplementation.hxx namespace OT { %extend FunctionImplementation { FunctionImplementation(const FunctionImplementation & other) { return new OT::FunctionImplementation(other); } } } openturns-1.9/python/src/FunctionImplementation_doc.i.in000066400000000000000000000735551307543307100236510ustar00rootroot00000000000000%define OT_Function_doc "Function base class. Available constructors: Function(*inputs, outputs, formulas*) Function(*inputs, formulas*) Function(*inputString, formulaString, outputString = 'outputVariable'*) Function(*f, g*) Function(*functionCollection*) Function(*functionCollection, scalarCoefficientColl*) Function(*scalarFunctionCollection, vectorCoefficientColl*) Function(*function, comparisonOperator, threshold*) Function(*function, indices, referencePoint, parametersSet=True*) Function(*inputSample, outputSample*) Parameters ---------- inputs : sequence of str Ordered list of input variables names of the *Function*. outputs : sequence of str Ordered list of output variables names of the *Function*. If it is not specified, default names are created for the output variables. formulas : sequence of str Ordered list of analytical formulas between the inputs and the outputs. The *Function* is defined by *ouputs = formulas(inputs)*. inputString : str Description of the *Function*'s input. outputString : str Description of the *Function*'s output. formulaString : str Analytical formula of the *Function*. The *Function* is defined by *ouputString = formulaString(inputString)*. Available functions: - sin - cos - tan - asin - acos - atan - sinh - cosh - tanh - asinh - acosh - atanh - log2 - log10 - log - ln - lngamma - gamma - exp - erf - erfc - sqrt - cbrt - besselJ0 - besselJ1 - besselY0 - besselY1 - sign - rint - abs - min - max - sum - avg - floor - ceil - trunc - round Available operators: - = (assignment) - && (logical and) - || (logical or) - <= (less or equal) - >= (greater or equal) - != (not equal) - == (equal) - > (greater than) - < (less than) - \+ (addition) - \- (subtraction) - \* (multiplication) - / (division) - ^ (raise x to the power of y) Available constants: - _e (Euler's constant) - _pi (Pi) f,g : two :class:`~openturns.Function` The *Function* is the composition function :math:`f\circ g`. functionCollection : list of :class:`~openturns.Function` Collection of several *Function*. scalarCoefficientColl : sequence of float Collection of scalar weights. scalarFunctionCollection : list of :class:`~openturns.Function` Collection of several scalar *Function*. vectorCoefficientColl : 2-d sequence of float Collection of vectorial weights. function : :class:`~openturns.Function` Function from which another function is created. comparisonOperator : :class:`~openturns.ComparisonOperator` Comparison operator. threshold : float Threshold from which values are compared. indices : sequence of int Indices of the set variables which are set to *referencePoint*'s values. parametersSet : bool If *True* (default), the set variables are the ones referenced in *indices*. Otherwise, the set variables are the ones referenced in the complementary vector of *indices*. referencePoint : sequence of float Values of the set variables. Must be of size of *indices* if *parametersSet* is *True* (default), else its size should be the complementary size of *indices*. inputSample : 2-d sequence of float Values of the inputs. outputSample : 2-d sequence of float Values of the outputs. Examples -------- Create a *Function* from a list of analytical formulas and descriptions of the inputs and the outputs : >>> import openturns as ot >>> f = ot.SymbolicFunction(['x0', 'x1'], ... ['x0 + x1', 'x0 - x1']) >>> print(f([1, 2])) [3,-1] Create a *Function* from strings: >>> import openturns as ot >>> f = ot.SymbolicFunction('x', '2.0*sqrt(x)') >>> print(f(([16],[4]))) [ y0 ] 0 : [ 8 ] 1 : [ 4 ] Create a *Function* from a Python function: >>> def a_function(X): ... return [X[0] + X[1]] >>> f = ot.PythonFunction(2, 1, a_function) >>> print(f(((10, 5),(6, 7)))) [ y0 ] 0 : [ 15 ] 1 : [ 13 ] See :class:`~openturns.PythonFunction` for further details. Create a *Function* from another *Function*: >>> f = ot.SymbolicFunction(ot.Description.BuildDefault(4, 'x'), ... ['x0', 'x0 + x1', 'x0 + x2 + x3']) Then create another function by setting x1=4 and x3=10: >>> g = ot.ParametricFunction(f, [3, 1], [10.0, 4.0], True) >>> print(g.getInputDescription()) [x0,x2] >>> print(g((1, 2))) [1,5,13] Or by setting x0=6 and x2=5: >>> g = ot.ParametricFunction(f, [3, 1], [6.0, 5.0], False) >>> print(g.getInputDescription()) [x3,x1] >>> print(g((1, 2))) [6,8,12] Create a *Function* from another *Function* and by using a comparison operator: >>> analytical = ot.SymbolicFunction(['x0','x1'], ['x0 + x1']) >>> indicator = ot.IndicatorFunction(analytical, ot.Less(), 0.0) >>> print(indicator([2, 3])) [0] >>> print(indicator([2, -3])) [1] Create a *Function* from a collection of functions: >>> functions = list() >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1^2 + x2', 'x1 + x2 + x3'])) >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1 + 2 * x2 + x3', 'x1 + x2 - x3'])) >>> myFunction = ot.AggregatedFunction(functions) >>> print(myFunction([1.0, 2.0, 3.0])) [3,6,8,0] Create a *Function* which is the linear combination *linComb* of the functions defined in *functionCollection* with scalar weights defined in *scalarCoefficientColl*: :math:`functionCollection = (f_1, \hdots, f_N)` where :math:`\forall 1 \leq i \leq N, \, f_i: \Rset^n \rightarrow \Rset^{p}` and :math:`scalarCoefficientColl = (c_1, \hdots, c_N) \in \Rset^N` then the linear combination is: .. math:: linComb: \left|\begin{array}{rcl} \Rset^n & \rightarrow & \Rset^{p} \\ \vect{X} & \mapsto & \displaystyle \sum_i c_if_i (\vect{X}) \end{array}\right. >>> myFunction2 = ot.LinearCombinationFunction(functions, [2.0, 4.0]) >>> print(myFunction2([1.0, 2.0, 3.0])) [38,12] Create a *Function* which is the linear combination *vectLinComb* of the scalar functions defined in *scalarFunctionCollection* with vectorial weights defined in *vectorCoefficientColl*: If :math:`scalarFunctionCollection = (f_1, \hdots, f_N)` where :math:`\forall 1 \leq i \leq N, \, f_i: \Rset^n \rightarrow \Rset` and :math:`vectorCoefficientColl = (\vect{c}_1, \hdots, \vect{c}_N)` where :math:`\forall 1 \leq i \leq N, \, \vect{c}_i \in \Rset^p` .. math:: vectLinComb: \left|\begin{array}{rcl} \Rset^n & \rightarrow & \Rset^{p} \\ \vect{X} & \mapsto & \displaystyle \sum_i \vect{c}_if_i (\vect{X}) \end{array}\right. >>> functions=list() >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1 + 2 * x2 + x3'])) >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1^2 + x2'])) >>> myFunction2 = ot.DualLinearCombinationFunction(functions, [[2., 4.], [3., 1.]]) >>> print(myFunction2([1, 2, 3])) [25,35] Create a *Function* from values of the inputs and the outputs: >>> inputSample = [[1.0, 1.0], [2.0, 2.0]] >>> outputSample = [[4.0], [5.0]] >>> database = ot.DatabaseFunction(inputSample, outputSample) >>> x = [1.8]*database.getInputDimension() >>> print(database(x)) [5] Create a *Function* which is the composition function :math:`f\circ g`: >>> g = ot.SymbolicFunction(['x1', 'x2'], ... ['x1 + x2','3 * x1 * x2']) >>> f = ot.SymbolicFunction(['x1', 'x2'], ['2 * x1 - x2']) >>> composed = ot.ComposedFunction(f, g) >>> print(composed([3, 4])) [-22]" %enddef %feature("docstring") OT::FunctionImplementation OT_Function_doc // --------------------------------------------------------------------- %define OT_Function_enableCache_doc "Enable the cache mechanism." %enddef %feature("docstring") OT::FunctionImplementation::enableCache OT_Function_enableCache_doc // --------------------------------------------------------------------- %define OT_Function_disableCache_doc "Disable the cache mechanism." %enddef %feature("docstring") OT::FunctionImplementation::disableCache OT_Function_disableCache_doc // --------------------------------------------------------------------- %define OT_Function_clearCache_doc "Empty the content of the cache." %enddef %feature("docstring") OT::FunctionImplementation::clearCache OT_Function_clearCache_doc // --------------------------------------------------------------------- %define OT_Function_isCacheEnabled_doc "Test whether the cache mechanism is enabled or not. Returns ------- isCacheEnabled : bool Flag telling whether the cache mechanism is enabled. It is disabled by default." %enddef %feature("docstring") OT::FunctionImplementation::isCacheEnabled OT_Function_isCacheEnabled_doc // --------------------------------------------------------------------- %define OT_Function_getCacheHits_doc "Accessor to the number of computations saved thanks to the cache mecanism. Returns ------- cacheHits : int Integer that counts the number of computations saved thanks to the cache mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getCacheHits OT_Function_getCacheHits_doc // --------------------------------------------------------------------- %define OT_Function_getCacheInput_doc "Accessor to all the input numerical points stored in the cache mecanism. Returns ------- cacheInput : :class:`~openturns.Sample` All the input numerical points stored in the cache mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getCacheInput OT_Function_getCacheInput_doc // --------------------------------------------------------------------- %define OT_Function_getCacheOutput_doc "Accessor to all the output numerical points stored in the cache mecanism. Returns ------- cacheInput : :class:`~openturns.Sample` All the output numerical points stored in the cache mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getCacheOutput OT_Function_getCacheOutput_doc // --------------------------------------------------------------------- %define OT_Function_addCacheContent_doc "Add input numerical points and associated output to the cache. Parameters ---------- input_sample : 2-d sequence of float Input numerical points to be added to the cache. output_sample : 2-d sequence of float Output numerical points associated with the input_sample to be added to the cache." %enddef %feature("docstring") OT::FunctionImplementation::addCacheContent OT_Function_addCacheContent_doc // --------------------------------------------------------------------- %define OT_Function_enableHistory_doc "Enable the history mechanism." %enddef %feature("docstring") OT::FunctionImplementation::enableHistory OT_Function_enableHistory_doc // --------------------------------------------------------------------- %define OT_Function_disableHistory_doc "Disable the history mechanism." %enddef %feature("docstring") OT::FunctionImplementation::disableHistory OT_Function_disableHistory_doc // --------------------------------------------------------------------- %define OT_Function_clearHistory_doc "Empty the content of the history." %enddef %feature("docstring") OT::FunctionImplementation::clearHistory OT_Function_clearHistory_doc // --------------------------------------------------------------------- %define OT_Function_isHistoryEnabled_doc "Test whether the history mechanism is enabled or not. Returns ------- isHistoryEnabled : bool Flag telling whether the history mechanism is enabled. It is disabled by default." %enddef %feature("docstring") OT::FunctionImplementation::isHistoryEnabled OT_Function_isHistoryEnabled_doc // --------------------------------------------------------------------- %define OT_Function_getHistoryInput_doc "Accessor to the history of the input values. Returns ------- input_history : :class:`~openturns.Sample` All the input numerical points stored in the history mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getHistoryInput OT_Function_getHistoryInput_doc // --------------------------------------------------------------------- %define OT_Function_getHistoryOutput_doc "Accessor to the history of the output values. Returns ------- output_history : :class:`~openturns.Sample` All the output numerical points stored in the history mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getHistoryOutput OT_Function_getHistoryOutput_doc // --------------------------------------------------------------------- %define OT_Function_getInputPointHistory_doc "Accessor to the history of the input point values. Returns ------- history : :class:`~openturns.Sample` All the input points stored in the history mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getInputPointHistory OT_Function_getInputPointHistory_doc // --------------------------------------------------------------------- %define OT_Function_getInputParameterHistory_doc "Accessor to the history of the input parameter values. Returns ------- history : :class:`~openturns.Sample` All the input parameters stored in the history mecanism." %enddef %feature("docstring") OT::FunctionImplementation::getInputParameterHistory OT_Function_getInputParameterHistory_doc // --------------------------------------------------------------------- %define OT_Function_getCallsNumber_doc "Accessor to the number of times the function has been called. Returns ------- calls_number : int Integer that counts the number of times the function has been called since its creation." %enddef %feature("docstring") OT::FunctionImplementation::getCallsNumber OT_Function_getCallsNumber_doc // --------------------------------------------------------------------- %define OT_Function_getEvaluationCallsNumber_doc "Accessor to the number of times the function has been called. Returns ------- evaluation_calls_number : int Integer that counts the number of times the function has been called since its creation." %enddef %feature("docstring") OT::FunctionImplementation::getEvaluationCallsNumber OT_Function_getEvaluationCallsNumber_doc // --------------------------------------------------------------------- %define OT_Function_getGradientCallsNumber_doc "Accessor to the number of times the gradient of the function has been called. Returns ------- gradient_calls_number : int Integer that counts the number of times the gradient of the Function has been called since its creation. Note that if the gradient is implemented by a finite difference method, the gradient calls number is equal to 0 and the different calls are counted in the evaluation calls number." %enddef %feature("docstring") OT::FunctionImplementation::getGradientCallsNumber OT_Function_getGradientCallsNumber_doc // --------------------------------------------------------------------- %define OT_Function_getHessianCallsNumber_doc "Accessor to the number of times the hessian of the function has been called. Returns ------- hessian_calls_number : int Integer that counts the number of times the hessian of the Function has been called since its creation. Note that if the hessian is implemented by a finite difference method, the hessian calls number is equal to 0 and the different calls are counted in the evaluation calls number." %enddef %feature("docstring") OT::FunctionImplementation::getHessianCallsNumber OT_Function_getHessianCallsNumber_doc // --------------------------------------------------------------------- %define OT_Function_getMarginal_doc "Accessor to marginal. Parameters ---------- indices : int or list of ints Set of indices for which the marginal is extracted. Returns ------- marginal : :class:`~openturns.Function` Function corresponding to either :math:`f_i` or :math:`(f_i)_{i \in indices}`, with :math:`f:\Rset^n \rightarrow \Rset^p` and :math:`f=(f_0 , \dots, f_{p-1})`." %enddef %feature("docstring") OT::FunctionImplementation::getMarginal OT_Function_getMarginal_doc // --------------------------------------------------------------------- %define OT_Function_getImplementation_doc "Accessor to the evaluation, gradient and hessian functions. Returns ------- function : :class:`~openturns.FunctionImplementation` The evaluation, gradient and hessian function. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getImplementation()) input : [x1,x2] output : [y0] evaluation : 2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6 gradient : | d(y) / d(x1) = (1)+(4*x1)+((-4*((x2)*(sin(x1))))) | d(y) / d(x2) = (8)+((4*(cos(x1)))) hessian : | d^2(y) / d(x1)^2 = (4)+((-4*((x2)*(cos(x1))))) | d^2(y) / d(x2)d(x1) = (-4*(sin(x1))) | d^2(y) / d(x2)^2 = 0" %enddef %feature("docstring") OT::FunctionImplementation::getImplementation OT_Function_getImplementation_doc // --------------------------------------------------------------------- %define OT_Function_getEvaluation_doc "Accessor to the evaluation function. Returns ------- function : :class:`~openturns.EvaluationImplementation` The evaluation function. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getEvaluation()) [x1,x2]->[2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6]" %enddef %feature("docstring") OT::FunctionImplementation::getEvaluation OT_Function_getEvaluation_doc // --------------------------------------------------------------------- %define OT_Function_getGradient_doc "Accessor to the gradient function. Returns ------- gradient : :class:`~openturns.GradientImplementation` The gradient function." %enddef %feature("docstring") OT::FunctionImplementation::getGradient OT_Function_getGradient_doc // --------------------------------------------------------------------- %define OT_Function_getHessian_doc "Accessor to the hessian function. Returns ------- hessian : :class:`~openturns.HessianImplementation` The hessian function." %enddef %feature("docstring") OT::FunctionImplementation::getHessian OT_Function_getHessian_doc // --------------------------------------------------------------------- %define OT_Function_setEvaluation_doc "Accessor to the evaluation function. Parameters ---------- function : :class:`~openturns.EvaluationImplementation` The evaluation function." %enddef %feature("docstring") OT::FunctionImplementation::setEvaluation OT_Function_setEvaluation_doc // --------------------------------------------------------------------- %define OT_Function_setGradient_doc "Accessor to the gradient function. Parameters ---------- gradient_function : :class:`~openturns.GradientImplementation` The gradient function. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> f.setGradient(ot.CenteredFiniteDifferenceGradient( ... ot.ResourceMap.GetAsScalar('CenteredFiniteDifferenceGradient-DefaultEpsilon'), ... f.getEvaluation()))" %enddef %feature("docstring") OT::FunctionImplementation::setGradient OT_Function_setGradient_doc // --------------------------------------------------------------------- %define OT_Function_setHessian_doc "Accessor to the hessian function. Parameters ---------- hessian_function : :class:`~openturns.HessianImplementation` The hessian function. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> f.setHessian(ot.CenteredFiniteDifferenceHessian( ... ot.ResourceMap.GetAsScalar('CenteredFiniteDifferenceHessian-DefaultEpsilon'), ... f.getEvaluation()))" %enddef %feature("docstring") OT::FunctionImplementation::setHessian OT_Function_setHessian_doc // --------------------------------------------------------------------- %define OT_Function_gradient_doc "Return the Jacobian transposed matrix of the function at a point. Parameters ---------- point : sequence of float Point where the Jacobian transposed matrix is calculated. Returns ------- gradient : :class:`~openturns.Matrix` The Jacobian transposed matrix of the function at *point*. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6','x1 + x2']) >>> print(f.gradient([3.14, 4])) [[ 13.5345 1 ] [ 4.00001 1 ]]" %enddef %feature("docstring") OT::FunctionImplementation::gradient OT_Function_gradient_doc // --------------------------------------------------------------------- %define OT_Function_hessian_doc "Return the hessian of the function at a point. Parameters ---------- point : sequence of float Point where the hessian of the function is calculated. Returns ------- hessian : :class:`~openturns.SymmetricTensor` Hessian of the function at *point*. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6','x1 + x2']) >>> print(f.hessian([3.14, 4])) sheet #0 [[ 20 -0.00637061 ] [ -0.00637061 0 ]] sheet #1 [[ 0 0 ] [ 0 0 ]]" %enddef %feature("docstring") OT::FunctionImplementation::hessian OT_Function_hessian_doc // --------------------------------------------------------------------- %define OT_Function_getDescription_doc "Accessor to the description of the inputs and outputs. Returns ------- description : :class:`~openturns.Description` Description of the inputs and the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getDescription()) [x1,x2,y0]" %enddef %feature("docstring") OT::FunctionImplementation::getDescription OT_Function_getDescription_doc // --------------------------------------------------------------------- %define OT_Function_setDescription_doc "Accessor to the description of the inputs and outputs. Parameters ---------- description : sequence of str Description of the inputs and the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getDescription()) [x1,x2,y0] >>> f.setDescription(['a','b','y']) >>> print(f.getDescription()) [a,b,y]" %enddef %feature("docstring") OT::FunctionImplementation::setDescription OT_Function_setDescription_doc // --------------------------------------------------------------------- %define OT_Function_getInputDescription_doc "Accessor to the description of the inputs. Returns ------- description : :class:`~openturns.Description` Description of the inputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getInputDescription()) [x1,x2]" %enddef %feature("docstring") OT::FunctionImplementation::getInputDescription OT_Function_getInputDescription_doc // --------------------------------------------------------------------- %define OT_Function_getOutputDescription_doc "Accessor to the description of the outputs. Returns ------- description : :class:`~openturns.Description` Description of the outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getOutputDescription()) [y0]" %enddef %feature("docstring") OT::FunctionImplementation::getOutputDescription OT_Function_getOutputDescription_doc // --------------------------------------------------------------------- %define OT_Function_getInputDimension_doc "Accessor to the number of the inputs. Returns ------- number_inputs : int Number of inputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getInputDimension()) 2" %enddef %feature("docstring") OT::FunctionImplementation::getInputDimension OT_Function_getInputDimension_doc // --------------------------------------------------------------------- %define OT_Function_getOutputDimension_doc "Accessor to the number of the outputs. Returns ------- number_outputs : int Number of outputs. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x1', 'x2'], ... ['2 * x1^2 + x1 + 8 * x2 + 4 * cos(x1) * x2 + 6']) >>> print(f.getOutputDimension()) 1" %enddef %feature("docstring") OT::FunctionImplementation::getOutputDimension OT_Function_getOutputDimension_doc // --------------------------------------------------------------------- %define OT_Function_getParameterDimension_doc "Accessor to the dimension of the parameter. Returns ------- parameterDimension : int Dimension of the parameter." %enddef %feature("docstring") OT::FunctionImplementation::getParameterDimension OT_Function_getParameterDimension_doc // --------------------------------------------------------------------- %define OT_Function_draw_doc "Draw the output of function as a :class:`~openturns.Graph`. Available usages: draw(*inputMarg, outputMarg, CP, xiMin, xiMax, ptNb*) draw(*firstInputMarg, secondInputMarg, outputMarg, CP, xiMin_xjMin, xiMax_xjMax, ptNbs*) draw(*xiMin, xiMax, ptNb*) draw(*xiMin_xjMin, xiMax_xjMax, ptNbs*) Parameters ---------- outputMarg, inputMarg : int, :math:`outputMarg, inputMarg \geq 0` *outputMarg* is the index of the marginal to draw as a function of the marginal with index *inputMarg*. firstInputMarg, secondInputMarg : int, :math:`firstInputMarg, secondInputMarg \geq 0` In the 2D case, the marginal *outputMarg* is drawn as a function of the two marginals with indexes *firstInputMarg* and *secondInputMarg*. CP : sequence of float Central point. xiMin, xiMax : float Define the interval where the curve is plotted. xiMin_xjMin, xiMax_xjMax : sequence of float of dimension 2. In the 2D case, define the intervals where the curves are plotted. ptNb : int :math:`ptNb > 0` or list of ints of dimension 2 :math:`ptNb_k > 0, k=1,2` The number of points to draw the curves. Notes ----- We note :math:`f: \Rset^n \rightarrow \Rset^p` where :math:`\vect{x} = (x_1, \dots, x_n)` and :math:`f(\vect{x}) = (f_1(\vect{x}), \dots,f_p(\vect{x}))`, with :math:`n\geq 1` and :math:`p\geq 1`. - In the first usage: Draws graph of the given 1D *outputMarg* marginal :math:`f_k: \Rset^n \rightarrow \Rset` as a function of the given 1D *inputMarg* marginal with respect to the variation of :math:`x_i` in the interval :math:`[x_i^{min}, x_i^{max}]`, when all the other components of :math:`\vect{x}` are fixed to the corresponding ones of the central point *CP*. Then OpenTURNS draws the graph: :math:`t\in [x_i^{min}, x_i^{max}] \mapsto f_k(CP_1, \dots, CP_{i-1}, t, CP_{i+1} \dots, CP_n)`. - In the second usage: Draws the iso-curves of the given *outputMarg* marginal :math:`f_k` as a function of the given 2D *firstInputMarg* and *secondInputMarg* marginals with respect to the variation of :math:`(x_i, x_j)` in the interval :math:`[x_i^{min}, x_i^{max}] \times [x_j^{min}, x_j^{max}]`, when all the other components of :math:`\vect{x}` are fixed to the corresponding ones of the central point *CP*. Then OpenTURNS draws the graph: :math:`(t,u) \in [x_i^{min}, x_i^{max}] \times [x_j^{min}, x_j^{max}] \mapsto f_k(CP_1, \dots, CP_{i-1}, t, CP_{i+1}, \dots, CP_{j-1}, u, CP_{j+1} \dots, CP_n)`. - In the third usage: The same as the first usage but only for function :math:`f: \Rset \rightarrow \Rset`. - In the fourth usage: The same as the second usage but only for function :math:`f: \Rset^2 \rightarrow \Rset`. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> f = ot.SymbolicFunction('x', 'sin(2*_pi*x)*exp(-x^2/2)') >>> graph = f.draw(-1.2, 1.2, 100) >>> View(graph).show()" %enddef %feature("docstring") OT::FunctionImplementation::draw OT_Function_draw_doc // --------------------------------------------------------------------- %define OT_Function_getParameter_doc "Accessor to the parameter values. Returns ------- parameter : :class:`~openturns.Point` The parameter values." %enddef %feature("docstring") OT::FunctionImplementation::getParameter OT_Function_getParameter_doc // --------------------------------------------------------------------- %define OT_Function_setParameter_doc "Accessor to the parameter values. Parameters ---------- parameter : sequence of float The parameter values." %enddef %feature("docstring") OT::FunctionImplementation::setParameter OT_Function_setParameter_doc // --------------------------------------------------------------------- %define OT_Function_getParameterDescription_doc "Accessor to the parameter description. Returns ------- parameter : :class:`~openturns.Description` The parameter description." %enddef %feature("docstring") OT::FunctionImplementation::getParameterDescription OT_Function_getParameterDescription_doc // --------------------------------------------------------------------- %define OT_Function_setParameterDescription_doc "Accessor to the parameter description. Parameters ---------- parameter : :class:`~openturns.Description` The parameter description." %enddef %feature("docstring") OT::FunctionImplementation::setParameterDescription OT_Function_setParameterDescription_doc // --------------------------------------------------------------------- %define OT_Function_parameterGradient_doc "Accessor to the gradient against the parameter. Returns ------- gradient : :class:`~openturns.Matrix` The gradient." %enddef %feature("docstring") OT::FunctionImplementation::parameterGradient OT_Function_parameterGradient_doc openturns-1.9/python/src/Function_doc.i.in000066400000000000000000000072061307543307100207310ustar00rootroot00000000000000// Function docstrings are defined in FunctionImplementation_doc.i.in %feature("docstring") OT::Function OT_Function_doc %feature("docstring") OT::Function::enableCache OT_Function_enableCache_doc %feature("docstring") OT::Function::disableCache OT_Function_disableCache_doc %feature("docstring") OT::Function::clearCache OT_Function_clearCache_doc %feature("docstring") OT::Function::isCacheEnabled OT_Function_isCacheEnabled_doc %feature("docstring") OT::Function::getCacheHits OT_Function_getCacheHits_doc %feature("docstring") OT::Function::getCacheInput OT_Function_getCacheInput_doc %feature("docstring") OT::Function::getCacheOutput OT_Function_getCacheOutput_doc %feature("docstring") OT::Function::addCacheContent OT_Function_addCacheContent_doc %feature("docstring") OT::Function::enableHistory OT_Function_enableHistory_doc %feature("docstring") OT::Function::disableHistory OT_Function_disableHistory_doc %feature("docstring") OT::Function::clearHistory OT_Function_clearHistory_doc %feature("docstring") OT::Function::isHistoryEnabled OT_Function_isHistoryEnabled_doc %feature("docstring") OT::Function::getHistoryInput OT_Function_getHistoryInput_doc %feature("docstring") OT::Function::getHistoryOutput OT_Function_getHistoryOutput_doc %feature("docstring") OT::Function::getInputPointHistory OT_Function_getInputPointHistory_doc %feature("docstring") OT::Function::getInputParameterHistory OT_Function_getInputParameterHistory_doc %feature("docstring") OT::Function::getCallsNumber OT_Function_getCallsNumber_doc %feature("docstring") OT::Function::getEvaluationCallsNumber OT_Function_getEvaluationCallsNumber_doc %feature("docstring") OT::Function::getGradientCallsNumber OT_Function_getGradientCallsNumber_doc %feature("docstring") OT::Function::getHessianCallsNumber OT_Function_getHessianCallsNumber_doc %feature("docstring") OT::Function::getMarginal OT_Function_getMarginal_doc %feature("docstring") OT::Function::getImplementation OT_Function_getImplementation_doc %feature("docstring") OT::Function::getEvaluation OT_Function_getEvaluation_doc %feature("docstring") OT::Function::getGradient OT_Function_getGradient_doc %feature("docstring") OT::Function::getHessian OT_Function_getHessian_doc %feature("docstring") OT::Function::setEvaluation OT_Function_setEvaluation_doc %feature("docstring") OT::Function::setGradient OT_Function_setGradient_doc %feature("docstring") OT::Function::setHessian OT_Function_setHessian_doc %feature("docstring") OT::Function::gradient OT_Function_gradient_doc %feature("docstring") OT::Function::hessian OT_Function_hessian_doc %feature("docstring") OT::Function::getDescription OT_Function_getDescription_doc %feature("docstring") OT::Function::setDescription OT_Function_setDescription_doc %feature("docstring") OT::Function::getInputDescription OT_Function_getInputDescription_doc %feature("docstring") OT::Function::getOutputDescription OT_Function_getOutputDescription_doc %feature("docstring") OT::Function::getInputDimension OT_Function_getInputDimension_doc %feature("docstring") OT::Function::getOutputDimension OT_Function_getOutputDimension_doc %feature("docstring") OT::Function::getParameterDimension OT_Function_getParameterDimension_doc %feature("docstring") OT::Function::draw OT_Function_draw_doc %feature("docstring") OT::Function::getParameter OT_Function_getParameter_doc %feature("docstring") OT::Function::setParameter OT_Function_setParameter_doc %feature("docstring") OT::Function::getParameterDescription OT_Function_getParameterDescription_doc %feature("docstring") OT::Function::setParameterDescription OT_Function_setParameterDescription_doc %feature("docstring") OT::Function::parameterGradient OT_Function_parameterGradient_doc openturns-1.9/python/src/FunctionalBasis.i000066400000000000000000000005631307543307100207750ustar00rootroot00000000000000// SWIG file FunctionalBasis.i OTAutodoc(FunctionalBasis) %{ #include "openturns/FunctionalBasis.hxx" %} %ignore OT::FunctionalBasis::operator[]; OTTypedInterfaceObjectHelper(FunctionalBasis) %include openturns/FunctionalBasis.hxx namespace OT { %extend FunctionalBasis { FunctionalBasis(const FunctionalBasis & other) { return new OT::FunctionalBasis(other); } } } openturns-1.9/python/src/FunctionalBasisImplementation.i000066400000000000000000000006301307543307100236760ustar00rootroot00000000000000// SWIG file FunctionalBasisImplementation.i %{ #include "openturns/FunctionalBasisImplementation.hxx" %} %ignore OT::FunctionalBasisImplementation::operator[]; %include openturns/FunctionalBasisImplementation.hxx namespace OT { %extend FunctionalBasisImplementation { FunctionalBasisImplementation(const FunctionalBasisImplementation & other) { return new OT::FunctionalBasisImplementation(other); } } } openturns-1.9/python/src/FunctionalBasisProcess.i000066400000000000000000000005261307543307100223330ustar00rootroot00000000000000// SWIG file FunctionalBasisProcess.i %{ #include "openturns/FunctionalBasisProcess.hxx" %} %include FunctionalBasisProcess_doc.i %include openturns/FunctionalBasisProcess.hxx namespace OT { %extend FunctionalBasisProcess { FunctionalBasisProcess(const FunctionalBasisProcess & other) { return new OT::FunctionalBasisProcess(other); } } } openturns-1.9/python/src/FunctionalBasisProcess_doc.i.in000066400000000000000000000050561307543307100235700ustar00rootroot00000000000000%feature("docstring") OT::FunctionalBasisProcess "Functional basis process. Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution of the random vector :math:`\vect{A}=(A_1,\dots, A_K)`. basis : :class:`~openturns.Basis` Collection of deterministic functions. mesh : :class:`~openturns.Mesh` Mesh :math:`\cM` over which the domain :math:`\cD` is discretized. Notes ----- A functional basis process :math:`X: \Omega \times\cD \mapsto \Rset^d` where :math:`\cD \in \Rset^n`, writes: .. math:: X(\omega,\vect{t})=\sum_{i=1}^K A_i(\omega)\phi_i(\vect{t}) \quad \forall \omega \in \Omega and \forall \vect{t} \in \cD with :math:`\phi_i: \Rset^n \rightarrow \Rset^d` for :math:`1 \leq i \leq K` and :math:`\vect{A}=(A_1,\dots, A_K)` a random vector of dimension :math:`K`. Examples -------- Create the coefficients distribution: >>> import openturns as ot >>> coefDist = ot.Normal([2]*2, [5]*2, ot.CorrelationMatrix(2)) Create a basis of functions: >>> phi_1 = ot.SymbolicFunction(['t'], ['sin(t)']) >>> phi_2 = ot.SymbolicFunction(['t'], ['cos(t)*cos(t)']) >>> myBasis = ot.Basis([phi_1, phi_2]) Create a mesh: >>> myMesh = ot.RegularGrid(0.0, 0.1, 10) Create the functional basis process: >>> myFBProcess = ot.FunctionalBasisProcess(coefDist, myBasis, myMesh)" // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalBasisProcess::getBasis "Get the basis of deterministic functions. Returns ------- basis : :class:`~openturns.Basis` Collection of functions :math:`(\phi_i)_{1 \leq i \leq K}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalBasisProcess::getDistribution "Get the coefficients distribution. Returns ------- distribution : :class:`~openturns.Distribution` The distribution of the random vector :math:`\vect{A}=(A_1,\dots, A_K)` of dimension :math:`K`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalBasisProcess::setBasis "Set the basis of deterministic functions. Parameters ---------- basis : :class:`~openturns.Basis` Collection of functions :math:`(\phi_i)_{1 \leq i \leq K}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalBasisProcess::setDistribution "Set the coefficients distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution of the random vector :math:`\vect{A}=(A_1,\dots, A_K)` of dimension :math:`K`." openturns-1.9/python/src/FunctionalChaosAlgorithm.i000066400000000000000000000005461307543307100226410ustar00rootroot00000000000000// SWIG file FunctionalChaosAlgorithm.i %{ #include "openturns/FunctionalChaosAlgorithm.hxx" %} %include FunctionalChaosAlgorithm_doc.i %include openturns/FunctionalChaosAlgorithm.hxx namespace OT{ %extend FunctionalChaosAlgorithm { FunctionalChaosAlgorithm(const FunctionalChaosAlgorithm & other) { return new OT::FunctionalChaosAlgorithm(other); } } } openturns-1.9/python/src/FunctionalChaosAlgorithm_doc.i.in000066400000000000000000000233231307543307100240710ustar00rootroot00000000000000%feature("docstring") OT::FunctionalChaosAlgorithm "Functional chaos algorithm. Available constructors: FunctionalChaosAlgorithm(*inputSample, outputSample*) FunctionalChaosAlgorithm(*inputSample, outputSample, distribution, adaptiveStrategy*) FunctionalChaosAlgorithm(*inputSample, outputSample, distribution, adaptiveStrategy, projectionStrategy*) FunctionalChaosAlgorithm(*model, distribution, adaptiveStrategy*) FunctionalChaosAlgorithm(*model, distribution, adaptiveStrategy, projectionStrategy*) FunctionalChaosAlgorithm(*inputSample, weights, outputSample, distribution, adaptiveStrategy*) FunctionalChaosAlgorithm(*inputSample, weights, outputSample, distribution, adaptiveStrategy, projectionStrategy*) Parameters ---------- inputSample, outputSample : 2-d sequence of float Sample of the input - output random vectors model : :class:`~openturns.Function` Model :math:`g` such as :math:`\vect{Y} = g(\vect{X})`. distribution : :class:`~openturns.Distribution` Distribution of the random vector :math:`\vect{X}` adaptiveStrategy : :class:`~openturns.AdaptiveStrategy` Strategy of selection of the different terms of the multivariate basis. projectionStrategy : :class:`~openturns.ProjectionStrategy` Strategy of evaluation of the coefficients :math:`\alpha_k` weights : sequence of float Weights :math:`\omega_i` associated to the data base Default values are :math:`\omega_i = \frac{1}{N}` where *N=inputSample.getSize()* See also -------- FunctionalChaosResult Notes ----- Consider :math:`\vect{Y} = g(\vect{X})` with :math:`g: \Rset^d \rightarrow \Rset^p`, :math:`\vect{X} \sim \cL_{\vect{X}}` and :math:`\vect{Y}` with finite variance: :math:`g\in L_{\cL_{\vect{X}}}^2(\Rset^d, \Rset^p)`. When :math:`p>1`, the functional chaos algorithm is used on each marginal of :math:`\vect{Y}`, using the same multivariate orthonormal basis for all the marginals. Thus, the algorithm is detailed here for a scalar output :math:`Y` and :math:`g: \Rset^d \rightarrow \Rset`. Let :math:`T: \Rset^d \rightarrow \Rset^d` be an isoprobabilistic transformation such that :math:`\vect{Z} = T(\vect{X}) \sim \mu`. We note :math:`f = g \circ T^{-1}`, then :math:`f \in L_{\mu}^2(\Rset^d, \Rset)`. Let :math:`(\Psi_k)_{k \in \Nset}` be an orthonormal multivariate basis of :math:`L^2_{\mu}(\Rset^d,\Rset)`. Then the functional chaos decomposition of *f* writes: .. math:: f = g\circ T^{-1} = \sum_{k=0}^{\infty} \vect{\alpha}_k \Psi_k which can be truncated to the finite set :math:`K \in \Nset`: .. math:: \tilde{f} = \sum_{k \in K} \vect{\alpha}_k \Psi_k The approximation :math:`\tilde{f}` can be used to build an efficient random generator of :math:`Y` based on the random vector :math:`\vect{Z}`. It writes: .. math:: \tilde{Y} = \tilde{f}(\vect{Z}) For more details, see :class:`~openturns.FunctionalChaosRandomVector`. The functional chaos decomposition can be used to build a meta model of *g*, which writes: .. math:: \tilde{g} = \tilde{f} \circ T If the basis :math:`(\Psi_k)_{k \in \Nset}` has been obtained by tensorisation of univariate orthonormal basis, then the distribution :math:`\mu` writes :math:`\mu = \prod_{i=1}^d \mu_i`. In that case only, the Sobol indices can easily be deduced from the coefficients :math:`\alpha_k`. We detail here all the steps required in order to create a functional chaos algorithm. **Step 1 - Construction of the multivariate orthonormal basis**: the multivariate orthonornal basis :math:`(\Psi_k(\vect{x}))_{k \in \Nset}` is built as the tensor product of orthonormal univariate families. The univariate bases may be: - *polynomials*: the associated distribution :math:`\mu_i` is continuous or discrete. Note that it is possible to build the polynomial family orthonormal to any univariate distribution :math:`\mu_i` under some conditions. For more details, see :class:`~openturns.StandardDistributionPolynomialFactory`; - Haar wavelets: they enable to approximate functions with discontinuities. For more details, see :class:`~openturns.HaarWaveletFactory`,; - Fourier series: for more details, see :class:`~openturns.FourierSeriesFactory`. Furthermore, the numerotation of the multivariate orthonormal basis :math:`(\Psi_k(\vect{z}))_k` is given by an enumerate function which defines a regular way to generate the collection of degres used for the univariate polynomials : an enumerate function represents a bijection :math:`\Nset \rightarrow \Nset^d`. See :class:`~openturns.LinearEnumerateFunction` or :class:`~openturns.HyperbolicAnisotropicEnumerateFunction` for more details. **Step 2 - Truncation strategy of the multivariate orthonormal basis**: a strategy must be chosen for the selection of the different terms of the multivariate basis. The selected terms are gathered in the subset *K*. For more details on the possible strategies, see :class:`~openturns.FixedStrategy`, :class:`~openturns.SequentialStrategy` and :class:`~openturns.CleaningStrategy`. **Step 3 - Evaluation strategy of the coefficients**: a strategy must be chosen for the estimation of te coefficients :math:`\alpha_k`. The vector :math:`\vect{\alpha} = (\alpha_k)_{k \in K}` is equivalently defined by: .. math:: :label: quadEr \vect{\alpha} = \argmin_{\vect{\alpha} \in \Rset^K}\Expect{\left( g \circ T^{-1}(\vect{Z}) - \sum_{k \in K} \alpha_k \Psi_k (\vect{Z})\right)^2} or .. math:: :label: scalProd \alpha_k = _{\mu} = \Expect{ g \circ T^{-1}(\vect{Z}) \Psi_k (\vect{Z}) } where the mean :math:`\Expect{.}` is evaluated with respect to the measure :math:`\mu`. Relation :eq:`quadEr` means that the coefficients :math:`(\alpha_k)_{k \in K}` minimize the quadratic error between the model and the polynomial approximation. For more details, see :class:`~openturns.LeastSquaresStrategy`. Relation :eq:`scalProd` means that :math:`\alpha_k` is the scalar product of the model with the *k-th* element of the orthonormal basis :math:`(\Psi_k)_{k \in \Nset}`. For more details, see :class:`~openturns.IntegrationStrategy`. Examples -------- Create the model: >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> inputDim = 1 >>> model = ot.SymbolicFunction(['x'], ['x*sin(x)']) >>> distribution = ot.ComposedDistribution([ot.Uniform()]*inputDim) Build the multivariate orthonormal basis: >>> polyColl = [0.0]*inputDim >>> for i in range(distribution.getDimension()): ... polyColl[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i)) >>> enumerateFunction = ot.LinearEnumerateFunction(inputDim) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) Define the strategy to truncate the multivariate orthonormal basis: We choose all the polynomials of degree <= 4 >>> degree = 4 >>> indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) >>> print(indexMax) 5 We keep all the polynomials of degree <= 4 (which corresponds to the 5 first ones): >>> adaptiveStrategy = ot.FixedStrategy(productBasis, indexMax) Define the evaluation strategy of the coefficients: >>> samplingSize = 50 >>> experiment = ot.MonteCarloExperiment(samplingSize) >>> projectionStrategy = ot.LeastSquaresStrategy(experiment) Create the Functional Chaos Algorithm: >>> algo = ot.FunctionalChaosAlgorithm(model, distribution, adaptiveStrategy, ... projectionStrategy) >>> algo.run() Get the result: >>> functionalChaosResult = algo.getResult() >>> metamodel = functionalChaosResult.getMetaModel() Test it: >>> X = [0.5] >>> print(model(X)) [0.239713] >>> print(metamodel(X)) [0.239514] " // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::getMaximumResidual "Get the maximum residual. Returns ------- residual : float Residual value needed in the projection strategy. Default value is :math:`0`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::getProjectionStrategy "Get the projection strategy. Returns ------- strategy : :class:`~openturns.ProjectionStrategy` Projection strategy. Notes ----- The projection strategy selects the different terms of the multivariate basis to define the subset *K*." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::getAdaptiveStrategy "Get the adaptive strategy. Returns ------- adaptiveStrategy : :class:`~openturns.AdaptiveStrategy` Strategy of selection of the different terms of the multivariate basis." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::getResult "Get the results of the metamodel computation. Returns ------- result : :class:`~openturns.FunctionalChaosResult` Result structure, created by the method :py:meth:`run`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::run "Compute the metamodel. Notes ----- Evaluates the metamodel and stores all the results in a result structure." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::setMaximumResidual "Set the maximum residual. Parameters ---------- residual : float Residual value needed in the projection strategy. Default value is :math:`0`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosAlgorithm::setProjectionStrategy "Set the projection strategy. Parameters ---------- strategy : :class:`~openturns.ProjectionStrategy` Strategy to estimate the coefficients :math:`\alpha_k`." openturns-1.9/python/src/FunctionalChaosRandomVector.i000066400000000000000000000005761307543307100233210ustar00rootroot00000000000000// SWIG file FunctionalChaosRandomVector.i %{ #include "openturns/FunctionalChaosRandomVector.hxx" %} %include FunctionalChaosRandomVector_doc.i %include openturns/FunctionalChaosRandomVector.hxx namespace OT { %extend FunctionalChaosRandomVector { FunctionalChaosRandomVector(const FunctionalChaosRandomVector & other) { return new OT::FunctionalChaosRandomVector(other); } } } openturns-1.9/python/src/FunctionalChaosRandomVector_doc.i.in000066400000000000000000000045531307543307100245520ustar00rootroot00000000000000%feature("docstring") OT::FunctionalChaosRandomVector "Functional chaos random vector used to evaluate the Sobol indices. Available constructors: FunctionalChaosRandomVector(functionalChaosResult) Parameters ---------- functionalChaosResult : :class:`~openturns.FunctionalChaosResult` A functional chaos result resulting from a polynomial chaos decomposition. See also -------- FunctionalChaosAlgorithm, FunctionalChaosResult Notes ----- This structure is created from a FunctionalChaosResult in order to evaluate the Sobol indices associated to the polynomial chaos decomposition of the model. " // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosRandomVector::getFunctionalChaosResult "Accessor to the functional chaos result. Returns ------- functionalChaosResult : :class:`~openturns.FunctionalChaosResult` The functional chaos result resulting from a polynomial chaos decomposition." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosRandomVector::getSobolIndex "Get the Sobol indices. Parameters ---------- i : int or list of ints, :math:`0 \leq i < d - 1` Indice(s) of the variable(s) we want the associated Sobol indices. :math:`d` is the dimension of the input variables. out_marginal : int Output marginal Default value is 0 Returns ------- s : float The Sobol indice." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosRandomVector::getSobolTotalIndex "Get the total Sobol indices. Parameters ---------- i : int or list of ints, :math:`0 \leq i < d - 1` Indice(s) of the variable(s) we want the associated total Sobol indices. :math:`d` is the dimension of the input variables. out_marginal : int Output marginal Default value is 0 Returns ------- s : float The total Sobol indice." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosRandomVector::getSobolTotalIndex "Get the aggregated Sobol indices. Parameters ---------- i : int or list of ints, :math:`0 \leq i < d - 1` Indice(s) of the variable(s) we want the associated aggregated Sobol indices. :math:`d` is the dimension of the input variables. Returns ------- s : float The aggregated Sobol indice." openturns-1.9/python/src/FunctionalChaosResult.i000066400000000000000000000005161307543307100221660ustar00rootroot00000000000000// SWIG file FunctionalChaosResult.i %{ #include "openturns/FunctionalChaosResult.hxx" %} %include FunctionalChaosResult_doc.i %include openturns/FunctionalChaosResult.hxx namespace OT{ %extend FunctionalChaosResult { FunctionalChaosResult(const FunctionalChaosResult & other) { return new OT::FunctionalChaosResult(other); } } } openturns-1.9/python/src/FunctionalChaosResult_doc.i.in000066400000000000000000000061571307543307100234270ustar00rootroot00000000000000%feature("docstring") OT::FunctionalChaosResult "Functional chaos result. Notes ----- Structure created by the method run() of :class:`~openturns.FunctionalChaosAlgorithm`, and obtained thanks to the method getResult()." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getCoefficients "Get the coefficients. Returns ------- coefficients : 2-d sequence of float Coefficients :math:`(\vect{\alpha_k})_{k \in K}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getComposedMetaModel "Get the composed metamodel. Returns ------- composedMetamodel : :class:`~openturns.Function` :math:`\tilde{f} = \sum_{k \in K} \vect{\alpha}_k \Psi_k`" // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getMetaModel "Get the metamodel. Returns ------- metamodel : :class:`~openturns.Function` :math:`\tilde{g} = \sum_{k \in K} \vect{\alpha}_k \Psi_k \circ T`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getComposedModel "Get the composed model. Returns ------- composedModel : :class:`~openturns.Function` :math:`f = g\circ T^{-1}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getDistribution "Get the input distribution. Returns ------- distribution : :class:`~openturns.Distribution` Distribution of the input random vector :math:`\vect{X}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getIndices "Get the indices of the final basis. Returns ------- indices : :class:`~openturns.Indices` Indices of the elements of the multivariate basis used in the decomposition." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getInverseTransformation "Get the inverse isoprobabilistic transformation. Returns ------- invTransf : :class:`~openturns.Function` :math:`T^{-1}` such that :math:`T(\vect{X}) = \vect{Z}`." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getOrthogonalBasis "Get the orthogonal basis. Returns ------- basis : :class:`~openturns.OrthogonalBasis` Factory of the orthogonal basis." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getReducedBasis "Get the reduced basis. Returns ------- basis : list of :class:`~openturns.Function` Collection of the *K* functions :math:`(\Psi_k)_{k\in K}` used in the decomposition." // --------------------------------------------------------------------- %feature("docstring") OT::FunctionalChaosResult::getTransformation "Get the isoprobabilistic transformation. Returns ------- transformation : :class:`~openturns.Function` Transformation :math:`T` such that :math:`T(\vect{X}) = \vect{Z}`." openturns-1.9/python/src/Gamma.i000066400000000000000000000003161307543307100167270ustar00rootroot00000000000000// SWIG file Gamma.i %{ #include "openturns/Gamma.hxx" %} %include Gamma_doc.i %include openturns/Gamma.hxx namespace OT { %extend Gamma { Gamma(const Gamma & other) { return new OT::Gamma(other); } } } openturns-1.9/python/src/GammaFactory.i000066400000000000000000000004061307543307100202570ustar00rootroot00000000000000// SWIG file GammaFactory.i %{ #include "openturns/GammaFactory.hxx" %} %include GammaFactory_doc.i %include openturns/GammaFactory.hxx namespace OT { %extend GammaFactory { GammaFactory(const GammaFactory & other) { return new OT::GammaFactory(other); } } } openturns-1.9/python/src/GammaFactory_doc.i.in000066400000000000000000000047411307543307100215170ustar00rootroot00000000000000%feature("docstring") OT::GammaFactory "Gamma factory. Available constructor: GammaFactory() The parameters are estimated by maximum likelihood: .. math:: :nowrap: \begin{eqnarray*} \displaystyle\Hat{k}_n= \frac{(\bar{x}_n-\Hat{\gamma}_n)^2}{(\sigma_n^X)^2}\\ \displaystyle\Hat{\lambda}_n= \frac{\bar{x}_n-\Hat{\gamma}_n}{(\sigma_n^X)^2}\\ \displaystyle\Hat{\gamma}_n = (1-\mathrm{sign}(x_{(1,n)})/(2+n))x_{(1,n)} \end{eqnarray*} See also -------- DistributionFactory, Gamma" // --------------------------------------------------------------------- %feature("docstring") OT::GammaFactory::buildEstimator "Build the Gamma distribution and the parameters distribution. Parameters ---------- sample : 2-d sequence of float Sample from which the distribution parameters are estimated. parameters : :class:`~openturns.DistributionParameters` Optional, the parametrization. Returns ------- resDist : :class:`~openturns.DistributionFactoryResult` The results. Examples -------- Create a sample and fit a Gamma distribution and the native parameters distribution: >>> import openturns as ot >>> sample = ot.Gamma().getSample(10) >>> ot.ResourceMap.SetAsUnsignedInteger('DistributionFactory-DefaultBootstrapSize', 10) >>> fittedRes = ot.GammaFactory().buildEstimator(sample) Fit a Gamma distribution in another parametrization: >>> fittedRes2 = ot.GammaFactory().buildEstimator(sample, ot.GammaMuSigma()) Get the fitted Gamma distribution and its parameters: >>> fittedGamma = fittedRes.getDistribution() >>> print fittedGamma Gamma(k = 1.0452, lambda = 0.996212, gamma = 0.00031485) >>> fittedParameters = fittedGamma.getParameter() Get the asymptotic parameters distribution: >>> paramDist = fittedRes.getParameterDistribution() Determine the confidence interval al level 0.9 with minimum volume: >>> ot.ResourceMap.SetAsUnsignedInteger('Distribution-MinimumVomuleLevelSetSamplingSize', 100) >>> confInt, level = paramDist.computeMinimumVolumeIntervalWithMarginalProbability(0.9) Determine the bilateral confidence interval al level 0.9: >>> confInt, level = paramDist.computeBilateralConfidenceIntervalWithMarginalProbability(0.9) Determine the right unilateral confidence interval al level 0.9: >>> confInt, level = paramDist.computeUnilateralConfidenceIntervalWithMarginalProbability(0.9) Determine the left unilateral confidence interval al level 0.9: >>> confInt, level = paramDist.computeUnilateralConfidenceIntervalWithMarginalProbability(0.9, True) " openturns-1.9/python/src/GammaMuSigma.i000066400000000000000000000004051307543307100202110ustar00rootroot00000000000000// SWIG file GammaMuSigma.i %{ #include "openturns/GammaMuSigma.hxx" %} %include GammaMuSigma_doc.i %include openturns/GammaMuSigma.hxx namespace OT{ %extend GammaMuSigma { GammaMuSigma(const GammaMuSigma & other) { return new OT::GammaMuSigma(other); } } } openturns-1.9/python/src/GammaMuSigma_doc.i.in000066400000000000000000000016411307543307100214460ustar00rootroot00000000000000%feature("docstring") OT::GammaMuSigma "Gamma distribution parameters. Available constructors: GammaMuSigma(*mu=1.0, sigma=1.0, gamma=0.0*) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. gamma : float, optional Shift parameter. Notes ----- The native parameters are defined as follows: .. math:: k &= \left( \frac{\mu-\gamma}{\sigma} \right)^2 \\ \lambda &= \frac{\mu-\gamma}{\sigma^2} See also -------- Gamma Examples -------- Create the parameters of the Gamma distribution: >>> import openturns as ot >>> parameters = ot.GammaMuSigma(1.5, 2.5, -0.5) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [0.64,0.32,-0.5] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 0.64 0.16 0 ] [ -0.512 -0.256 0 ] [ -0.64 -0.16 1 ]]" openturns-1.9/python/src/Gamma_doc.i.in000066400000000000000000000110131307543307100201550ustar00rootroot00000000000000%feature("docstring") OT::Gamma "Gamma distribution. Available constructors: Gamma(*k=1.0, lambda=1.0, gamma=0.0*) Parameters ---------- k : float shape parameter :math:`k > 0` with :math:`k = (\mu - \gamma)^2 / \sigma^2`. lambda : float scale parameter :math:`\lambda > 0` with :math:`\lambda = (\mu - \gamma) / \sigma^2`. gamma : float, optional Shift parameter :math:`\gamma`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\lambda}{\Gamma(k)} \left(\lambda (x - \gamma)\right)^{k - 1} \exp\left(- \lambda (x - \gamma)\right), \quad x \in [\gamma; +\infty[ with :math:`k, \lambda > 0` and :math:`\gamma \in \Rset`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{k}{\lambda} + \gamma \\ \Var{X} & = & \frac{\sqrt{k}}{\lambda} \end{eqnarray*} It is possible to create a Gamma distribution from the alternative parametrization :math:`(\mu, \sigma, \gamma)`: see :class:`~openturns.GammaMuSigma`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization :math:`(\mu, \sigma, \gamma)` only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(k, \lambda, \gamma)`. Examples -------- Create a distribution from its native parameters :math:`(k, \lambda, \gamma)`: >>> import openturns as ot >>> myDist = ot.Gamma(1.0, 1.0, 0.0) Create a it from the alternative parametrization :math:`(\mu, \lambda, \gamma)`: >>> myDist2 = ot.Gamma() >>> myDist2.setParameter(ot.GammaMuSigma()([1.0, 1.0, 0.0])) Create it from :math:`(\mu, \lambda, \gamma)` and keep that parametrization for the remaining study: >>> myParam = ot.GammaMuSigma(1.5, 2.5, -0.5) >>> myDist3 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::getK "Accessor to the distribution's shape parameter :math:`k`. Returns ------- k : float Shape parameter :math:`k`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::getLambda "Accessor to the distribution's scale parameter :math:`\lambda`. Returns ------- lambda : float Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::getGamma "Accessor to the distribution's shift parameter :math:`\gamma`. Returns ------- gamma : float Shift parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float, :math:`\sigma > 0` Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::setK "Accessor to the distribution's shape parameter :math:`k`. Parameters ---------- k : float, :math:`k > 0` Shape parameter :math:`k`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::setLambda "Accessor to the distribution's scale parameter :math:`\lambda`. Parameters ---------- lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::setKLambda "Set the distribution's parameters. For scale parameter :math:`\lambda` and shape parameter :math:`k`. Parameters ---------- k : float, :math:`k > 0` Shape parameter :math:`k`. lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::setGamma "Accessor to the distribution's shift parameter :math:`\gamma`. Parameters ---------- gamma : float, :math:`\gamma \in \Rset` Shift parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::Gamma::setMuSigma "Accessor to the distribution's mean and standard deviation. Parameters ---------- mu : float, :math:`\mu > \gamma` Mean. sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/GaussKronrod.i000066400000000000000000000004061307543307100203260ustar00rootroot00000000000000// SWIG file GaussKronrod.i %{ #include "openturns/GaussKronrod.hxx" %} %include GaussKronrod_doc.i %include openturns/GaussKronrod.hxx namespace OT { %extend GaussKronrod { GaussKronrod(const GaussKronrod & other) { return new OT::GaussKronrod(other); } } } openturns-1.9/python/src/GaussKronrodRule.i000066400000000000000000000004461307543307100211620ustar00rootroot00000000000000// SWIG file GaussKronrodRule.i %{ #include "openturns/GaussKronrodRule.hxx" %} %include GaussKronrodRule_doc.i %include openturns/GaussKronrodRule.hxx namespace OT { %extend GaussKronrodRule { GaussKronrodRule(const GaussKronrodRule & other) { return new OT::GaussKronrodRule(other); } } } openturns-1.9/python/src/GaussKronrodRule_doc.i.in000066400000000000000000000072571307543307100224230ustar00rootroot00000000000000%feature("docstring") OT::GaussKronrodRule "Gauss-Kronrod rule used in the integration algorithm. Parameters ---------- myGaussKronrodPair : :class:`~openturns.GaussKronrodPair` It encodes the selected rule. Available rules: - GaussKronrodRule.G1K3, - GaussKronrodRule.G3K7, - GaussKronrodRule.G7K15, - GaussKronrodRule.G11K23, - GaussKronrodRule.G15K31, - GaussKronrodRule.G25K51. Notes ----- The Gauss-Kronrod rules :math:`G_mK_{2m+1}` with :math:`m=2n+1` enable to build two approximations of the definite integral :math:`\int_{-1}^1 f(t)\di{t}` defined by: .. math:: \int_{-1}^1 f(t)\di{t} \simeq \omega_0f(0) + \sum_{k=1}^n \omega_k (f(\xi_k)+f(-\xi_k)) and: .. math:: \int_{-1}^1 f(t)\di{t}\simeq \alpha_0f(0) + \sum_{k=1}^{m} \alpha_k (f(\zeta_k)+f(-\zeta_k)) We have :math:`\xi_k>0`, :math:`\zeta_k>0`, :math:`\zeta_{2j}=\xi_j`, :math:`\omega_k>0` and :math:`\alpha_k>0`. The rule :math:`G_mK_{2m+1}` combines a :math:`m`-point Gauss rule and a :math:`(2m+1)`-point Kronrod rule (re-using the :math:`m` nodes of the Gauss method). The nodes are defined on :math:`[-1, 1]` and always contain the node 0 when :math:`m` is odd. Examples -------- Create an Gauss-Kronrod rule: >>> import openturns as ot >>> myRule = ot.GaussKronrodRule(ot.GaussKronrodRule.G15K31)" // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getOrder "Accessor to :math:`m` parameter. Returns ------- m : int The number of points used for the Gauss approximation." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getPair "Accessor to pair definig the rule. Returns ------- gkPair : :class:`~openturns.GaussKronrodPair` Id of the Gauss-Kronrod rule." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getOtherGaussWeights "Accessor to the weights used in the Gauss approximation. Returns ------- otherGaussWeights : :class:`~openturns.Point` The weights :math:`(\omega_k)_{1 \leq k \leq n}`" // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getOtherGaussNodes "Accessor to the positive nodes used in the Gauss-Kronrod approximation. Returns ------- otherKronrodNodes : :class:`~openturns.Point` The positive nodes :math:`(\xi_k)_{1 \leq k \leq n}` " // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getOtherKronrodWeights "Accessor to the positive nodes used in the Gauss-Kronrod approximation. Returns ------- otherKronrodWeights : :class:`~openturns.Point` The weights :math:`(\alpha_k)_{1 \leq k \leq m}`. " // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getOtherKronrodNodes "Accessor to the positive nodes used in the Gauss-Kronrod approximation. Returns ------- otherKronrodNodes : :class:`~openturns.Point` The positive nodes :math:`(\zeta_k)_{1 \leq k \leq m}` It contains the positive Gauss nodes as we have :math:`\zeta_{2j}=\xi_j`. " // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getZeroGaussWeight "Accessor to the first Gauss weight. Returns ------- zeroKronrodWeight : float The first weight :math:`\omega_0`. " // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrodRule::getZeroKronrodWeight "Accessor to the first Kronrod weight. Returns ------- zeroKronrodWeight : float The first weight :math:`\alpha_0`. " openturns-1.9/python/src/GaussKronrod_doc.i.in000066400000000000000000000124161307543307100215640ustar00rootroot00000000000000%feature("docstring") OT::GaussKronrod "Adaptive integration algorithm of Gauss-Kronrod. Parameters ---------- maximumSubIntervals : int The maximal number of subdivisions of the interval :math:`[a,b]` maximumError : float The maximal error between Gauss and Kronrod approximations. GKRule : :class:`~openturns.GaussKronrodRule` The rule that fixes the number of points used in the Gauss and Kronrod approximations. Notes ----- The Gauss-Kronrod algorithm enables to approximate the definite integral: .. math:: \int_{a}^b f(t)\di{t} with :math:`f: \Rset \mapsto \Rset^p`, using both approximations : Gauss and Kronrod ones defined by: .. math:: \int_{-1}^1 f(t)\d{t} \simeq \omega_0f(0) + \sum_{k=1}^n \omega_k (f(\xi_k)+f(-\xi_k)) and: .. math:: \int_{-1}^1 f(t)\di{t}\simeq \alpha_0f(0) + \sum_{k=1}^{m} \alpha_k (f(\zeta_k)+f(-\zeta_k)) where :math:`\xi_k>0`, :math:`\zeta_k>0`, :math:`\zeta_{2j}=\xi_j`, :math:`\omega_k>0` and :math:`\alpha_k>0`. The Gauss-Kronrod algorithm evaluates the integral using the Gauss and the Konrod approximations. If the difference between both approximations is greater that *maximumError*, then the interval :math:`[a,b]` is subdivided into 2 subintervals with the same length. The Gauss-Kronrod algorithm is then applied on both subintervals with the sames rules. The algorithm is iterative until the difference between both approximations is less that *maximumError*. In that case, the integral on the subinterval is approximated by the Kronrod sum. The subdivision process is limited by *maximumSubIntervals* that imposes the maximum number of subintervals. The final integral is the sum of the integrals evaluated on the subintervals. Examples -------- Create a Gauss-Kronrod algorithm: >>> import openturns as ot >>> algo = ot.GaussKronrod(100, 1e-8, ot.GaussKronrodRule(ot.GaussKronrodRule.G11K23))" // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::integrate "Evaluation of the integral of :math:`f` on an interval. Available usages: integrate(*f, interval*) integrate(*f, interval, error*) integrate(*f, a, b, error, ai, bi, fi, ei*) Parameters ---------- f : :class:`~openturns.Function`, :math:`f: \Rset \mapsto \Rset^p` The integrand function. interval : :class:`~openturns.Interval`, :math:`interval \in \Rset` The integration domain. error : :class:`~openturns.Point` The error estimation of the approximation. a,b : float Bounds of the integration interval. ai, bi, ei : :class:`~openturns.Point`; *ai* is the set of lower bounds of the subintervals; *bi* the corresponding upper bounds; *ei* the associated error estimation. fi : :class:`~openturns.Sample` *fi* is the set of :math:`\int_{ai}^{bi} f(t)\di{t}` Returns ------- value : :class:`~openturns.Point` Approximation of the integral. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x'], ['abs(sin(x))']) >>> a = -2.5 >>> b = 4.5 >>> algoGK = ot.GaussKronrod(100, 1e-8, ot.GaussKronrodRule(ot.GaussKronrodRule.G11K23)) Use the high-level usage: >>> value = algoGK.integrate(f, ot.Interval(a, b))[0] >>> print(value) 4.590... Use the low-level usage: >>> error = ot.Point() >>> ai = ot.Point() >>> bi = ot.Point() >>> ei = ot.Point() >>> fi = ot.Sample() >>> value2 = algoGK.integrate(f, a, b, error, ai, bi, fi, ei)[0] >>> print(value2) 4.590..." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::getMaximumError "Accessor to the maximal error between Gauss and Kronrod approximations. Returns ------- maximumErrorvalue : float, positive The maximal error between Gauss and Kronrod approximations." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::getMaximumSubIntervals "Accessor to the maximal number of subdivisions of :math:`[a,b]`. Returns ------- maximumSubIntervals : float, positive The maximal number of subdivisions of the interval :math:`[a,b]`." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::getRule "Accessor to the Gauss-Kronrod rule used in the integration algorithm. Returns ------- rule : :class:`~openturns.GaussKronrodRule` The Gauss-Kronrod rule used in the integration algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::setMaximumError "Set the maximal error between Gauss and Kronrod approximations. Parameters ---------- maximumErrorvalue : float, positive The maximal error between Gauss and Kronrod approximations." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::setMaximumSubIntervals "Set the maximal number of subdivisions of :math:`[a,b]`. Parameters ---------- maximumSubIntervals : float, positive The maximal number of subdivisions of the interval :math:`[a,b]`." // --------------------------------------------------------------------- %feature("docstring") OT::GaussKronrod::setRule "Set the Gauss-Kronrod rule used in the integration algorithm. Parameters ---------- rule : :class:`~openturns.GaussKronrodRule` The Gauss-Kronrod rule used in the integration algorithm." openturns-1.9/python/src/GaussLegendre.i000066400000000000000000000014741307543307100204430ustar00rootroot00000000000000// SWIG file GaussLegendre.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Sample & adaptedNodes ($*ltype temp) %{ temp = OT::Sample(); $1 = &temp; %} %typemap(argout) OT::Sample & adaptedNodes %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Sample(*$1), SWIG_TypeQuery("OT::Sample *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::GaussLegendre::integrateWithNodes(const OT::Function & function, const OT::Interval & interval, OT::Sample & adaptedNodes) const; %{ #include "openturns/GaussLegendre.hxx" %} %include GaussLegendre_doc.i %include openturns/GaussLegendre.hxx namespace OT { %extend GaussLegendre { GaussLegendre(const GaussLegendre & other) { return new OT::GaussLegendre(other); } } } openturns-1.9/python/src/GaussLegendre_doc.i.in000066400000000000000000000062541307543307100216760ustar00rootroot00000000000000%feature("docstring") OT::GaussLegendre "Tensorized integration algorithm of Gauss-Legendre. Available constructors: GaussLegendre(*dimension=1*) GaussLegendre(*discretization*) Parameters ---------- dimension : int, :math:`dimension>0` The dimension of the functions to integrate. The default discretization is *GaussLegendre-DefaultMarginalIntegrationPointsNumber* in each dimension, see :class:`~openturns.ResourceMap`. discretization : sequence of int The number of nodes in each dimension. The sequence must be non-empty and must contain only positive values. Notes ----- The Gauss-Legendre algorithm enables to approximate the definite integral: .. math:: \int_{\vect{a}}^\vect{b} f(\vect{t})\di{\vect{t}} with :math:`f: \Rset^d \mapsto \Rset^p`, :math:`\vect{a}, \vect{b}\in\Rset^d` using a fixed tensorized Gauss-Legendre approximation: .. math:: \int_{\vect{a}}^\vect{b} f(\vect{t})\di{\vect{t}} = \sum_{\vect{n}\in \cN}\left(\prod_{i=1}^d w^{N_i}_{n_i}\right)f(\xi^{N_1}_{n_1},\dots,\xi^{N_d}_{n_d}) where :math:`\xi^{N_i}_{n_i}` is the :math:`n_i`th node of the :math:`N_i`-points Gauss-Legendre 1D integration rule and :math:`w^{N_i}_{n_i}` the associated weight. Examples -------- Create a Gauss-Legendre algorithm: >>> import openturns as ot >>> algo = ot.GaussLegendre(2) >>> algo = ot.GaussLegendre([2, 4, 5])" // --------------------------------------------------------------------- %feature("docstring") OT::GaussLegendre::integrate "Evaluation of the integral of :math:`f` on an interval. Available usages: integrate(*f, interval*) integrate(*f, interval, xi*) Parameters ---------- f : :class:`~openturns.Function`, :math:`f: \Rset^d \mapsto \Rset^p` The integrand function. interval : :class:`~openturns.Interval`, :math:`interval \in \Rset^d` The integration domain. xi : :class:`~openturns.Sample` The integration nodes. Returns ------- value : :class:`~openturns.Point` Approximation of the integral. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x'], ['sin(x)']) >>> a = -2.5 >>> b = 4.5 >>> algoGL = ot.GaussLegendre([10]) >>> value = algoGL.integrate(f, ot.Interval(a, b))[0] >>> print(value) -0.590... " // --------------------------------------------------------------------- %feature("docstring") OT::GaussLegendre::getDiscretization "Accessor to the discretization of the tensorized rule. Returns ------- discretization : :class:`~openturns.Indices` The number of integration point in each dimension." // --------------------------------------------------------------------- %feature("docstring") OT::GaussLegendre::getNodes "Accessor to the integration nodes. Returns ------- nodes : :class:`~openturns.Sample` The tensorized Gauss-Legendre integration nodes on :math:`[0,1]^d` where :math:`d>0` is the dimension of the integration algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::GaussLegendre::getWeights "Accessor to the integration weights. Returns ------- weights : :class:`~openturns.Point` The tensorized Gauss-Legendre integration weights on :math:`[0,1]^d` where :math:`d>0` is the dimension of the integration algorithm." openturns-1.9/python/src/GaussProductExperiment.i000066400000000000000000000005261307543307100223740ustar00rootroot00000000000000// SWIG file GaussProductExperiment.i %{ #include "openturns/GaussProductExperiment.hxx" %} %include GaussProductExperiment_doc.i %include openturns/GaussProductExperiment.hxx namespace OT { %extend GaussProductExperiment { GaussProductExperiment(const GaussProductExperiment & other) { return new OT::GaussProductExperiment(other); } } } openturns-1.9/python/src/GaussProductExperiment_doc.i.in000066400000000000000000000034421307543307100236260ustar00rootroot00000000000000%feature("docstring") OT::GaussProductExperiment "Gauss product experiment. Available constructors: GaussProductExperiment(*marginalDegrees*) GaussProductExperiment(*distribution*) GaussProductExperiment(*distribution, marginalDegrees*) Parameters ---------- marginalDegrees : sequence of positive int Numbers of points :math:`N_i` for each direction. Then, the total number of points generated is :math:`cardI=\prod_{i=1}^n N_i`. If not specified, each value :math:`N_i` is :math:`5`. distribution : Distribution :math:`\mu` of dimension :math:`n` with an independent copula. Notes ----- The number of points for each direction doesn't change and the :meth:`generate` method always gives the same sample. See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> distribution = ot.ComposedDistribution([ot.Exponential(), ot.Triangular(-1.0, -0.5, 1.0)]) >>> marginalDegrees = [3, 2] >>> myPlane = ot.GaussProductExperiment(distribution, marginalDegrees) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.415775 -0.511215 ] 1 : [ 2.29428 -0.511215 ] 2 : [ 6.28995 -0.511215 ] 3 : [ 0.415775 0.357369 ] 4 : [ 2.29428 0.357369 ] 5 : [ 6.28995 0.357369 ]" // --------------------------------------------------------------------- %feature("docstring") OT::GaussProductExperiment::getMarginalDegrees "Get the marginal degrees. Returns ------- marginalDegrees : :class:`~openturns.Indices` Numbers of points :math:`N_i` for each direction." // --------------------------------------------------------------------- %feature("docstring") OT::GaussProductExperiment::setMarginalDegrees "Set the marginal degrees. Parameters ---------- marginalDegrees : sequence of positive int Numbers of points :math:`N_i` for each direction." openturns-1.9/python/src/GaussianProcess.i000066400000000000000000000010621307543307100210150ustar00rootroot00000000000000// SWIG file GaussianProcess.i %{ #include "openturns/GaussianProcess.hxx" %} %include GaussianProcess_doc.i %include openturns/GaussianProcess.hxx namespace OT { %extend GaussianProcess { GaussianProcess(const GaussianProcess & other) { return new OT::GaussianProcess(other); } } } %pythoncode %{ # deprecated class TemporalNormalProcess(GaussianProcess): def __init__(self, *args): super(TemporalNormalProcess, self).__init__(*args) openturns.common.Log.Warn('class TemporalNormalProcess is deprecated in favor of GaussianProcess') %} openturns-1.9/python/src/GaussianProcess_doc.i.in000066400000000000000000000071431307543307100222550ustar00rootroot00000000000000%feature("docstring") OT::GaussianProcess "Gaussian processes. Available constructor: GaussianProcess(*trend, secondOrderModel, mesh*) GaussianProcess(*trend, covarianceModel, mesh*) GaussianProcess(*secondOrderModel, mesh*) GaussianProcess(*covarianceModel, mesh*) Parameters ---------- trend : :class:`~openturns.TrendTransform` Trend function of the process. By default the trend is null. secondOrderModel : :class:`~openturns.SecondOrderModel` Stationary second order model that insures the coherence between the covariance function and the spectral density function. covarianceModel : :class:`~openturns.CovarianceModel` Temporal covariance model :math:`C`. mesh : :class:`~openturns.Mesh` Mesh :math:`\cM` over which the domain :math:`\cD` is discretized. Notes ----- GaussianProcess creates the processes, :math:`X: \Omega \times\cD \mapsto \Rset^d` where :math:`\cD \in \Rset^n`, from their temporal covariance function :math:`\cC: \cD \times \cD \mapsto \cM_{d \times d}(\Rset)`, which writes, in the stationary case: :math:`\cC^{stat}: \cD \mapsto \cM_{d \times d}(\Rset)`. A process is *normal*, if all its finite dimensional joint distributions are normal (See the method :meth:`~openturns.Process.isNormal` for a detailed definition). The gaussian processes may have a trend: in that case, the normal process is the sum of the trend function :math:`f_{trend}: \Rset^n \mapsto \Rset^d` and a zero-mean normal process. If the zero-mean process is stationary, in order to manipulate the same normal process through both the temporal and spectral views, it is necessary to create a second order model *secondOrderModel* that insures the coherence between the covariance function :math:`C^{stat}` and the spectral density function :math:`S: \Rset \mapsto \cH^+(d)`. :math:`\cH^+(d) \in \cM_d(\Cset)` is the set of :math:`d`-dimensional positive definite hermitian matrices. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Default dimension parameter to evaluate the model >>> defaultDimension = 1 >>> # Amplitude values >>> amplitude = [1.0]*defaultDimension >>> # Scale values >>> scale = [1.0]*defaultDimension >>> # Second order model with parameters >>> myModel = ot.ExponentialCauchy(scale, amplitude) >>> # Time grid >>> tmin = 0.0 >>> step = 0.1 >>> n = 11 >>> myTimeGrid = ot.RegularGrid(tmin, step, n) >>> size = 100 >>> myProcess = ot.GaussianProcess(myModel, myTimeGrid)" // --------------------------------------------------------------------- %feature("docstring") OT::GaussianProcess::getCovarianceModel "Get the covariance model. Returns ------- covarianceModel : :class:`~openturns.CovarianceModel` Temporal covariance model :math:`C`." // --------------------------------------------------------------------- %feature("docstring") OT::GaussianProcess::getTrend "Get the trend function. Returns ------- trend : :class:`~openturns.TrendTransform` Trend function." // --------------------------------------------------------------------- %feature("docstring") OT::GaussianProcess::isTrendStationary "Tell if the process is trend stationary or not. Returns ------- isTrendStationary : bool *True* if the process is trend stationary." // --------------------------------------------------------------------- %feature("docstring") OT::GaussianProcess::setSamplingMethod "Set the used method for getRealization. Available parameters are : * 0 : Cholesky factor sampling (default method) * 1 : H-Matrix method (if H-Mat available) * 2 : Gibbs method (in dimension 1 only) Parameters ---------- samplingMethod : int Fix a method for sampling. " openturns-1.9/python/src/GeneralLinearModelAlgorithm.i000066400000000000000000000013071307543307100232460ustar00rootroot00000000000000// SWIG file GeneralLinearModelAlgorithm.i %{ #include "openturns/GeneralLinearModelAlgorithm.hxx" %} %include GeneralLinearModelAlgorithm_doc.i %include openturns/GeneralLinearModelAlgorithm.hxx namespace OT{ %extend GeneralLinearModelAlgorithm { GeneralLinearModelAlgorithm(const GeneralLinearModelAlgorithm & other) { return new OT::GeneralLinearModelAlgorithm(other); } } } %pythoncode %{ # deprecated class GeneralizedLinearModelAlgorithm(GeneralLinearModelAlgorithm): def __init__(self, *args): super(GeneralizedLinearModelAlgorithm, self).__init__(*args) openturns.common.Log.Warn('class GeneralizedLinearModelAlgorithm is deprecated in favor of GeneralLinearModelAlgorithm') %} openturns-1.9/python/src/GeneralLinearModelAlgorithm_doc.i.in000066400000000000000000000370761307543307100245140ustar00rootroot00000000000000%feature("docstring") OT::GeneralLinearModelAlgorithm "Algorithm for the evaluation of general linear models. Available constructors: GeneralLinearModelAlgorithm(*inputSample, outputSample, covarianceModel, basis, normalize=True, keepCovariance=True*) GeneralLinearModelAlgorithm(*inputSample, inputTransformation, outputSample, covarianceModel, basis, keepCovariance=True*) GeneralLinearModelAlgorithm(*inputSample, outputSample, covarianceModel, basisCollection, normalize=True, keepCovariance=True*) GeneralLinearModelAlgorithm(*inputSample, inputTransformation, outputSample, covarianceModel, basisCollection, keepCovariance=True*) Parameters ---------- inputSample, outputSample : :class:`~openturns.Sample` or 2d-array The samples :math:`(\vect{x}_k)_{1 \leq k \leq N} \in \Rset^n` and :math:`(\vect{y}_k)_{1 \leq k \leq N}\in \Rset^d`. inputTransformation : :class:`~openturns.Function` Function :math:`T` used to normalize the input sample. If used, the meta model is built on the transformed data. basis : :class:`~openturns.Basis` Functional basis to estimate the trend: :math:`(\varphi_j)_{1 \leq j \leq n_1}: \Rset^n \rightarrow \Rset`. If :math:`d>1`, the same basis is used for each marginal output. basisCollection : collection of :class:`~openturns.Basis` Collection of :math:`d` functional basis: one basis for each marginal output. An empty collection means that no trend is estimated. covarianceModel : :class:`~openturns.CovarianceModel` Covariance model of the normal process. See notes for the details. normalize : bool, optional Indicates whether the input sample has to be normalized. OpenTURNS uses the transformation fixed by the User in *inputTransformation* or the empirical mean and variance of the input sample. Default is set in resource map key `GeneralLinearModelAlgorithm-NormalizeData` keepCovariance : bool, optional Indicates whether the covariance matrix has to be stored in the result structure *GeneralLinearModelResult*. Default is set in resource map key `GeneralLinearModelAlgorithm-KeepCovariance` Notes ----- We suppose we have a sample :math:`(\vect{x}_k, \vect{y}_k)_{1 \leq k \leq N}` where :math:`\vect{y}_k = \cM(\vect{x}_k)` for all :math:`k`, with :math:`\cM:\Rset^n \mapsto \Rset^d` a given function. The objective is to build a metamodel :math:`\tilde{\cM}`, using a **generalized linear model**: the sample :math:`(\vect{y}_k)_{1 \leq k \leq N}` is considered as the restriction of a normal process :math:`\vect{Y}(\omega, \vect{x})` on :math:`(\vect{x}_k)_{1 \leq k \leq N}`. The normal process :math:`\vect{Y}(\omega, \vect{x})` is defined by: .. math:: \vect{Y}(\omega, \vect{x}) = \vect{\mu}(\vect{x}) + \vect{W}(\omega, \vect{x}) where: .. math:: \vect{\mu}(\vect{x}) = \left( \begin{array}{l} \mu_1(\vect{x}) \\ \dots \\ \mu_d(\vect{x}) \end{array} \right) with :math:`\mu_\ell(\vect{x}) = \sum_{j=1}^{n_\ell} \beta_j^\ell \varphi_j^\ell(\vect{x})` and :math:`\varphi_j^\ell: \Rset^n \rightarrow \Rset` the trend functions. :math:`\vect{W}` is a normal process of dimension :math:`d` with zero mean and covariance function :math:`C = C(\vect{\theta}, \vect{\sigma}, \mat{R}, \vect{\lambda})` (see :class:`~openturns.CovarianceModel` for the notations). We note: .. math:: \vect{\beta}^\ell = \left( \begin{array}{l} \beta_1^\ell \\ \dots \\ \beta_{n_\ell}^\ell \end{array} \right) \in \Rset^{n_\ell} \quad \mbox{ and } \quad \vect{\beta} = \left( \begin{array}{l} \vect{\beta}^1\\ \dots \\ \vect{\beta}^d \end{array} \right)\in \Rset^{\sum_{\ell=1}^p n_\ell} The *GeneralLinearModelAlgorithm* class estimates the coefficients :math:`\beta_j^\ell, \vect{p}` where :math:`\vect{p}` is the vector of parameters of the covariance model (a subset of :math:`\vect{\theta}, \vect{\sigma}, \mat{R}, \vect{\lambda}`) that has been declared as *active* (by default, the full vectors :math:`\vect{\theta}` and :math:`\vect{\sigma}`). The estimation is done by maximizing the *reduced* log-likelihood of the model, see its expression below. If a normalizing transformation :math:`T` has been used, the meta model is built on the inputs :math:`\vect{z}_k = T(\vect{x}_k)`. **Estimation of the parameters** :math:`\beta_j^\ell, \vect{p}` We note: .. math:: \vect{y} = \left( \begin{array}{l} \vect{y}_1 \\ \dots \\ \vect{y}_N \end{array} \right) \in \Rset^{dN}, \quad \vect{m}_{\vect{\beta}} = \left( \begin{array}{l} \vect{\mu}(\vect{x}_1) \\ \dots \\ \vect{\mu}(\vect{x}_N) \end{array} \right) \in \Rset^{dN} and .. math:: \mat{C}_{\vect{p}} = \left( \begin{array}{lcl} \mat{C}_{11} & \dots & \mat{C}_{1N}\\ \dots & \dots & \\ \mat{C}_{N1} & \dots & \mat{C}_{NN} \end{array} \right) \in \cS_{dN}^+(\Rset) where :math:`\mat{C}_{ij} = C_{\vect{p}}(\vect{x}_i, \vect{x}_j)`. The model likelihood writes: .. math:: \cL(\vect{\beta}, \vect{p};(\vect{x}_k, \vect{y}_k)_{1 \leq k \leq N}) = \dfrac{1}{(2\pi)^{dN/2} |\det \mat{C}_{\vect{p}}|^{1/2}} \exp\left[ -\dfrac{1}{2}\Tr{\left( \vect{y}-\vect{m} \right)} \mat{C}_{\vect{p}}^{-1} \left( \vect{y}-\vect{m} \right) \right] If :math:`\mat{L}` is the Cholesky factor of :math:`\mat{C}`, ie the lower triangular matrix with positive diagonal such that :math:`\mat{L}\,\Tr{\mat{L}} = \mat{C}`, then: .. math:: :label: logLikelihood \log \cL(\vect{\beta}, \vect{p};(\vect{x}_k, \vect{y}_k)_{1 \leq k \leq N}) = cste - \log \det \mat{L}_{\vect{p}} -\dfrac{1}{2} \| \mat{L}_{\vect{p}}^{-1}(\vect{y}-\vect{m}_{\vect{\beta}}) \|^2 The maximization of :eq:`logLikelihood` leads to the following optimality condition for $\vect{\beta}$: .. math:: \vect{\beta}^*(\vect{p}^*)=\argmin_{\vect{\beta}} \| \mat{L}_{\vect{p}^*}^{-1}(\vect{y}-\vect{m}_{\vect{\beta}}) \|^2 This expression of :math:`\vect{\beta}^*` as a function of :math:`\vect{p}^*` is taken as a general relation between :math:`\vect{\beta}` and :math:`_vect{p}` and is substituted into :eq:`logLikelihood`, leading to a *reduced log-likelihood* function depending solely on :math:`\vect{p}`. In the particular case where :math:`d=\dim(\vect{\sigma})=1` and :math:`\sigma` is a part of :math:`\vect{p}`, then a further reduction is possible. In this case, if :math:`\vect{q}` is the vector :math:`\vect{p}` in which :math:`\sigma` has been substituted by 1, then: .. math:: \| \mat{L}_{\vect{p}}^{-1}(\vect{y}-\vect{m}_{\vect{\beta}}) \|^2=\| \mat{L}_{\vect{q}}^{-1}(\vect{y}-\vect{m}_{\vect{\beta}}) \|^2/\sigma^2 showing that :math:`\vect{\beta}^*` is a function of :math:`\vect{q}^*` only, and the optimality condition for :math:`\sigma` reads: .. math:: \vect{\sigma}^*(\vect{q}^*)=\dfrac{1}{N}\| \mat{L}_{\vect{q}^*}^{-1}(\vect{y}-\vect{m}_{\vect{\beta}^*(\vect{q}^*)}) \|^2 which leads to a further reduction of the log-likelihood function where both :math:`\vect{\beta}` and :math:`\sigma` are replaced by their expression in terms of :math:`\vect{q}`. The default optimizer is :class:`~openturns.TNC` and can be changed thanks to the *setOptimizationAlgorithm* method. User could also change the default optimization solver by setting the `GeneralLinearModelAlgorithm-DefaultOptimizationAlgorithm` resource map key to `NELDER-MEAD` or `LBFGS` respectively for Nelder-Mead and LBFGS-B solvers. It is also possible to proceed as follows: - ask for the reduced log-likelihood function of the *GeneralLinearModelAlgorithm* thanks to the *getObjectiveFunction()* method - optimize it with respect to the parameters :math:`\vect{\theta}` and :math:`\vect{\sigma}` using any optimisation algorithms (that can take into account some additional constraints if needed) - set the optimal parameter value into the covariance model used in the *GeneralLinearModelAlgorithm* - tell the algorithm not to optimize the parameter using *setOptimizeParameter* The behaviour of the reduction is controlled by the following keys in :class:`~openturns.ResourceMap`: - *ResourceMap.SetAsBooletAsBool('GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate', true)* to use the reduction associated to :math:`\sigma`. It has no effect if :math:`d>1` or if :math:`d=1` and :math:`\sigma` is not part of :math:`\vect{p}` - *ResourceMap.SetAsBool('GeneralLinearModelAlgorithm-UnbiasedVariance', true)* allows to use the *unbiased* estimate of :math:`sigma` where :math:`\dfrac{1}{N}` is replaced by :math:`\dfrac{1}{N-p}` in the optimality condition for :math:`\sigma`. With huge samples, the `hierarchical matrix `_ implementation could be used if OpenTURNS had been compiled with `hmat-oss` support. This implementation, which is based on a compressed representation of an approximated covariance matrix (and its Cholesky factor), has a better complexity both in terms of memory requirements and floating point operations. To use it, the `GeneralLinearModelAlgorithm-LinearAlgebra` resource map key should be instancied to `HMAT`. Default value of the key is `LAPACK`. A known centered gaussian observation noise :math:`\epsilon_k` can be taken into account with :func:`setNoise()`: .. math:: \hat{\vect{y}}_k = \vect{y}_k + \epsilon_k, \epsilon_k \sim \mathcal{N}(0, \tau_k^2) Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> f = ot.SymbolicFunction(['x'], ['x * sin(x)']) >>> inputSample = ot.Sample([[1.0], [3.0], [5.0], [6.0], [7.0], [8.0]]) >>> outputSample = f(inputSample) Create the algorithm: >>> basis = ot.ConstantBasisFactory().build() >>> covarianceModel = ot.SquaredExponential(1) >>> algo = ot.GeneralLinearModelAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() Get the resulting meta model: >>> result = algo.getResult() >>> metamodel = result.getMetaModel()" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getInputTransformation "Get the function normalizing the input. Returns ------- transformation : :class:`~openturns.Function` Function *T* that normalizes the input." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::setInputTransformation "Set the function normalizing the input. Parameters ---------- transformation : :class:`~openturns.Function` Function that normalizes the input. The input dimension should be the same as input's sample dimension, output dimension should be output sample's dimension" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getResult "Get the results of the metamodel computation. Returns ------- result : :class:`~openturns.GeneralLinearModelResult` Structure containing all the results obtained after computation and created by the method :py:meth:`run`. " //----------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` The input sample :math:`(\vect{x}_k)_{1 \leq k \leq N}`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` The output sample :math:`(\vect{y}_k)_{1 \leq k \leq N}` ." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getObjectiveFunction() "Accessor to the log-likelihood function that writes as argument of the covariance's model parameters. Returns ------- logLikelihood : :class:`~openturns.Function` The log-likelihood function degined in :eq:`logLikelihood` as a function of :math:`(\vect{\theta}, \vect{\sigma})`. Notes ----- The log-likelihood function may be useful for some postprocessing: maximization using external optimizers for example. Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> f = ot.SymbolicFunction(['x0'], ['x0 * sin(x0)']) >>> inputSample = ot.Sample([[1.0], [3.0], [5.0], [6.0], [7.0], [8.0]]) >>> outputSample = f(inputSample) Create the algorithm: >>> basis = ot.ConstantBasisFactory().build() >>> covarianceModel = ot.SquaredExponential(1) >>> algo = ot.GeneralLinearModelAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() Get the log-likelihood function: >>> likelihoodFunction = algo.getObjectiveFunction() " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::run "Compute the response surface. Notes ----- It computes the response surface and creates a :class:`~openturns.GeneralLinearModelResult` structure containing all the results." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getOptimizationAlgorithm "Accessor to solver used to optimize the covariance model parameters. Returns ------- algorithm : :class:`~openturns.OptimizationAlgorithm` Solver used to optimize the covariance model parameters. Default optimizer is :class:`~openturns.TNC`" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::setOptimizationAlgorithm "Accessor to the solver used to optimize the covariance model parameters. Parameters ---------- algorithm : :class:`~openturns.OptimizationAlgorithm` Solver used to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::setOptimizeParameters "Accessor to the covariance model parameters optimization flag. Parameters ---------- optimizeParameters : bool Whether to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getOptimizeParameters "Accessor to the covariance model parameters optimization flag. Returns ------- optimizeParameters : bool Whether to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::setOptimizationBounds "Optimization bounds accessor. Parameters ---------- bounds : :class:`~openturns.Interval` Bounds for covariance model parameter optimization." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getOptimizationBounds "Optimization bounds accessor. Returns ------- bounds : :class:`~openturns.Interval` Bounds for covariance model parameter optimization." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::setNoise "Observation noise variance accessor. Parameters ---------- noise : sequence of positive float The noise variance :math:`\tau_k^2` of each output value." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelAlgorithm::getNoise "Observation noise variance accessor. Parameters ---------- noise : sequence of positive float The noise variance :math:`\tau_k^2` of each output value." openturns-1.9/python/src/GeneralLinearModelResult.i000066400000000000000000000012421307543307100225740ustar00rootroot00000000000000// SWIG file GeneralLinearModelResult.i %{ #include "openturns/GeneralLinearModelResult.hxx" %} %include GeneralLinearModelResult_doc.i %include openturns/GeneralLinearModelResult.hxx namespace OT{ %extend GeneralLinearModelResult { GeneralLinearModelResult(const GeneralLinearModelResult & other) { return new OT::GeneralLinearModelResult(other); } } } %pythoncode %{ # deprecated class GeneralizedLinearModelResult(GeneralLinearModelResult): def __init__(self, *args): super(GeneralizedLinearModelResult, self).__init__(*args) openturns.common.Log.Warn('class GeneralizedLinearModelResult is deprecated in favor of GeneralLinearModelResult') %} openturns-1.9/python/src/GeneralLinearModelResult_doc.i.in000066400000000000000000000144211307543307100240310ustar00rootroot00000000000000%feature("docstring") OT::GeneralLinearModelResult "Generalized linear model result. Available constructors: GeneralLinearModelResult(*inputSample, outputSample, metaModel, residuals, relativeErrors, basis, trendCoefficients, covarianceModel, optimalLogLikelihood*) GeneralLinearModelResult(*inputSample, outputSample, metaModel, residuals, relativeErrors, basis, trendCoefficients, covarianceModel, covarianceCholeskyFactor, covarianceHMatrix, optimalLogLikelihood*) Parameters ---------- inputSample, outputSample : :class:`~openturns.Sample` The samples :math:`(\vect{x}_k)_{1 \leq k \leq N} \in \Rset^d` and :math:`(\vect{y}_k)_{1 \leq k \leq N}\in \Rset^p`. metaModel : :class:`~openturns.Function` The meta model: :math:`\tilde{\cM}: \Rset^d \rightarrow \Rset^p`, defined in :eq:'metaModel'. residuals : :class:`~openturns.Point` The residual errors. relativeErrors : :class:`~openturns.Point` The relative errors. basis : collection of :class:`~openturns.Basis` Collection of the :math:`p` functional basis: :math:`(\varphi_j^l: \Rset^d \rightarrow \Rset)_{1 \leq j \leq n_l}` for each :math:`l \in [1, p]`. Its size should be equal to zero if the trend is not estimated. trendCoefficients : collection of :class:`~openturns.Point` The trend coefficients vectors :math:`(\vect{\alpha}^1, \dots, \vect{\alpha}^p)`. covarianceModel : :class:`~openturns.CovarianceModel` Covariance function of the normal process with its optimized parameters. covarianceCholeskyFactor : :class:`~openturns.TriangularMatrix` The Cholesky factor :math:`\mat{L}` of :math:`\mat{C}`. covarianceHMatrix : :class:`~openturns.HMatrix` The *hmat* implementation of :math:`\mat{L}`. optimalLogLikelihood : float The maximum log-likelihood corresponding to the model. Notes ----- The structure is usually created by the method *run()* of a :class:`~openturns.GeneralLinearModelAlgorithm`, and obtained thanks to the *getResult()* method. The meta model :math:`\tilde{\cM}: \Rset^d \rightarrow \Rset^p` is defined by: .. math:: :label: metaModel \tilde{\cM}(\vect{x}) = \left( \begin{array}{l} \mu_1(\vect{x}) \\ \dots \\ \mu_p(\vect{x}) \end{array} \right) where :math:`\mu_l(\vect{x}) = \sum_{j=1}^{n_l} \alpha_j^l \varphi_j^l(\vect{x})` and :math:`\varphi_j^l: \Rset^d \rightarrow \Rset` are the trend functions. If a normalizing transformation *T* has been used, the meta model is built on the inputs :math:`\vect{z}_k = T(\vect{x}_k)` and the meta model writes: .. math:: :label: metaModelWithT \tilde{\cM}(\vect{x}) = \left( \begin{array}{l} \mu_1\circ T(\vect{x}) \\ \dots \\ \mu_p\circ T(\vect{x}) \end{array} \right) Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> f = ot.SymbolicFunction(['x'], ['x * sin(x)']) >>> sampleX = [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0]] >>> sampleY = f(sampleX) Create the algorithm: >>> basis = ot.Basis([ot.SymbolicFunction(['x'], ['x']), ot.SymbolicFunction(['x'], ['x^2'])]) >>> covarianceModel = ot.GeneralizedExponential([2.0], 2.0) >>> algo = ot.GeneralLinearModelAlgorithm(sampleX, sampleY, covarianceModel, basis) >>> algo.run() Get the result: >>> result = algo.getResult() Get the meta model: >>> metaModel = result.getMetaModel() >>> graph = metaModel.draw(0.0, 7.0) >>> cloud = ot.Cloud(sampleX, sampleY) >>> cloud.setPointStyle('fcircle') >>> graph = ot.Graph() >>> graph.add(cloud) >>> graph.add(f.draw(0.0, 7.0)) >>> graph.setColors(['black', 'blue', 'red']) " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getTrendCoefficients "Accessor to the trend coefficients. Returns ------- trendCoef : collection of :class:`~openturns.Point` The trend coefficients vectors :math:`(\vect{\alpha}^1, \dots, \vect{\alpha}^p)` " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getCovarianceModel "Accessor to the covariance model. Returns ------- covModel : :class:`~openturns.CovarianceModel` The covariance model of the Normal process *W*. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getBasisCollection "Accessor to the collection of basis. Returns ------- basisCollection : collection of :class:`~openturns.Basis` Collection of the :math:`p` function basis: :math:`(\varphi_j^l: \Rset^d \rightarrow \Rset)_{1 \leq j \leq n_l}` for each :math:`l \in [1, p]`. Notes ----- If the trend is not estimated, the collection is empty. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getMetaModel "Accessor to the metamodel. Returns ------- metaModel : :class:`~openturns.Function` The meta model :math:`\tilde{\cM}: \Rset^d \rightarrow \Rset^p`, defined in :eq:'metaModel'. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getTransformation "Accessor to the normalizing transformation. Returns ------- transformation : :class:`~openturns.Function` The transformation *T* that normalizes the input sample. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::setTransformation "Set accessor to the normalizing transformation. Parameters ---------- transformation : :class:`~openturns.Function` The transformation *T* that normalizes the input sample. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getNoise "Accessor to the normal process. Returns ------- process : :class:`~openturns.Process` Returns the normal process :math:`W` with the optimized parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::GeneralLinearModelResult::getOptimalLogLikelihood "Accessor to the optimal log-likelihood of the model. Returns ------- optimalLogLikelihood : float The value of the log-likelihood corresponding to the model. " // --------------------------------------------------------------------- openturns-1.9/python/src/GeneralizedExponential.i000066400000000000000000000005261307543307100223500ustar00rootroot00000000000000// SWIG file GeneralizedExponential.i %{ #include "openturns/GeneralizedExponential.hxx" %} %include GeneralizedExponential_doc.i %include openturns/GeneralizedExponential.hxx namespace OT { %extend GeneralizedExponential { GeneralizedExponential(const GeneralizedExponential & other) { return new OT::GeneralizedExponential(other); } } } openturns-1.9/python/src/GeneralizedExponential_doc.i.in000066400000000000000000000053411307543307100236020ustar00rootroot00000000000000%feature("docstring") OT::GeneralizedExponential "Absolute exponential covariance function. Available constructors: GeneralizedExponential(*spatialDim=1*) GeneralizedExponential(*scale, p*) GeneralizedExponential(*scale, amplitude, p*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. When not fulfilled, the spatial dimension is equal to the size of the parameter :math:`\vect{\theta}`. By default, equal to 1. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma}\in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. p : float, :math:`0

    >> import openturns as ot >>> covModel = ot.GeneralizedExponential(2) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(covModel(s, t)) [[ 0.868123 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0.728893 ]] Create a generalized exponential covariance function specifying the scale vector and p: >>> covModel2 = ot.GeneralizedExponential([1.5, 2.5], 1.5) >>> covModel2bis = ot.GeneralizedExponential([1.5] * 2, 1.5) Create a generalized exponential covariance function specifying the scale vector, the amplitude and p: >>> covModel3 = ot.GeneralizedExponential([1.5, 2.5], [3.5], 1.5)" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExponential::setP "P accessor. Parameters ---------- p : int, :math:`p \geq 1` Define the norm that is used within the model." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExponential::getP "P accessor. Returns ------- p : int, :math:`p \geq 1` Define the norm that is used within the model." openturns-1.9/python/src/GeneralizedExtremeValue.i000066400000000000000000000005361307543307100224710ustar00rootroot00000000000000// SWIG file GeneralizedExtremeValue.i %{ #include "openturns/GeneralizedExtremeValue.hxx" %} %include GeneralizedExtremeValue_doc.i %include openturns/GeneralizedExtremeValue.hxx namespace OT { %extend GeneralizedExtremeValue { GeneralizedExtremeValue(const GeneralizedExtremeValue & other) { return new OT::GeneralizedExtremeValue(other); } } } openturns-1.9/python/src/GeneralizedExtremeValue_doc.i.in000066400000000000000000000116061307543307100237230ustar00rootroot00000000000000%feature("docstring") OT::GeneralizedExtremeValue "Generalized ExtremeValue distribution. Available constructors: GeneralizedExtremeValue(*mu=0.0, sigma=1.0, xi=0.0*) Parameters ---------- mu : float Location parameter :math:`\sigma`. sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`. xi : float Shape parameter :math:`\xi`. Notes ----- Its cumulative distribution function is defined as: .. math:: F_X(x) = \left\{\begin{array}{ll} \displaystyle \exp\left\{-\left[1+\xi\left(\dfrac{x-\mu}{\sigma}\right)\right]^{-1/\xi}\right\} & \text{ if } \xi \neq 0 \\ \displaystyle \exp\left\{-\left(\dfrac{x-\mu}{\sigma}\right)\right\} & \text{ if } \xi = 0 \end{array}\right. for :math:`\quad x \in [\mu-\sigma/\xi, +\infty) \text{ if } \xi>0, x \in \Rset \text{ if } \xi=0, x \in (-\infty,\mu-\sigma/\xi] \text{ if } \xi<0.`, with :math:`\sigma > 0` and :math:`\xi \in \Rset`. :math:`F_X` is zero for :math:`x` less than the lower bound of the support and one for :math:`x` greater than the upper bound of the support. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \left\{\begin{array}{ll} \mu+\sigma\dfrac{\Gamma(1-\xi)-1}{\xi} & \text{ if } \xi < 1, \xi\neq 0 \\ \mu + \sigma\gamma & \text{ if } \xi= 0 \\ \infty & \text{ if } \xi \geq 1 \end{array} \right.\\ \Var{X} & = & \left\{\begin{array}{ll} \sigma^2\dfrac{\Gamma(1-2\xi)-\Gamma^2(1-\xi)}{\xi^2} & \text{ if } \xi < 1/2, \xi\neq 0 \\ \sigma^2\dfrac{\pi^2}{6} & \text{ if } \xi= 0 \\ \infty & \text{ if } \xi \geq 1/2 \end{array} \right. \end{eqnarray*} where :math:`\gamma` is Euler's constant. Link with other distributions: if :math:`X\sim`:class:`~openturns.GeneralizedExtremeValue`:math:`(\mu, \sigma, \xi)`, then :math:`X\sim`:class:`~openturns.Frechet`:math:`(1/\xi, \sigma/\xi, \mu-\sigma/\xi)` if :math:`\xi>0`, :math:`-X\sim`:class:`~openturns.Weibull`:math:`(sigma/\xi, -1/\xi, \sigma/\xi-\mu)` if :math:`\xi<0` (note the minus sign) and :math:`X\sim`:class:`~openturns.Gumbel`:math:`(1/\sigma, \mu)` if :math:`\xi=0`. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.GeneralizedExtremeValue(1.0, 2.0, -0.2) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::getActualDistribution "Accessor to the internal distribution. Returns ------- distribution : :class:`~openturns.Distribution` The actual distribution in charge of the computation (:class:`~openturns.Weibull`, :class:`~openturns.Frechet`, :class:`~openturns.Gumbel`)." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::getMu "Accessor to the distribution's location parameter :math:`\mu`. Returns ------- mu : float Location parameter :math:`\mu`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::getSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Returns ------- sigma : float Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::getXi "Accessor to the distribution's shape parameter :math:`\xi`. Returns ------- xi : float Shape parameter :math:`\xi`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::setActualDistribution "Accessor to the internal distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The actual distribution in charge of the computation (:class:`~openturns.Weibull`, :class:`~openturns.Frechet`, :class:`~openturns.Gumbel`)." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::setMu "Accessor to the distribution's location parameter :math:`\mu`. Parameters ---------- mu : float Location parameter :math:`\mu`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::setSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedExtremeValue::setXi "Accessor to the distribution's shape parameter :math:`\xi`. Parameters ---------- xi : float, :math:`\xi \in \Rset` Shape parameter :math:`\xi`." openturns-1.9/python/src/GeneralizedPareto.i000066400000000000000000000004561307543307100213160ustar00rootroot00000000000000// SWIG file GeneralizedPareto.i %{ #include "openturns/GeneralizedPareto.hxx" %} %include GeneralizedPareto_doc.i %include openturns/GeneralizedPareto.hxx namespace OT { %extend GeneralizedPareto { GeneralizedPareto(const GeneralizedPareto & other) { return new OT::GeneralizedPareto(other); } } } openturns-1.9/python/src/GeneralizedParetoFactory.i000066400000000000000000000005461307543307100226460ustar00rootroot00000000000000// SWIG file GeneralizedParetoFactory.i %{ #include "openturns/GeneralizedParetoFactory.hxx" %} %include GeneralizedParetoFactory_doc.i %include openturns/GeneralizedParetoFactory.hxx namespace OT { %extend GeneralizedParetoFactory { GeneralizedParetoFactory(const GeneralizedParetoFactory & other) { return new OT::GeneralizedParetoFactory(other); } } } openturns-1.9/python/src/GeneralizedParetoFactory_doc.i.in000066400000000000000000000014461307543307100241000ustar00rootroot00000000000000%feature("docstring") OT::GeneralizedParetoFactory "Generalized Pareto factory. Available constructor: GeneralizedParetoFactory() See also -------- DistributionFactory" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedParetoFactory::setOptimizationAlgorithm "Accessor to the solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedParetoFactory::getOptimizationAlgorithm "Accessor to the solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." openturns-1.9/python/src/GeneralizedPareto_doc.i.in000066400000000000000000000044231307543307100225460ustar00rootroot00000000000000%feature("docstring") OT::GeneralizedPareto "Generalized Pareto distribution. Available constructors: GeneralizedPareto(*sigma=1.0, xi=0.0*) Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`. xi : float Shape parameter :math:`\xi`. Notes ----- Its cumulative distribution function is defined as: .. math:: F_X(x) = \left\{\begin{array}{ll} \displaystyle 1 - \left[1 + \xi \frac{x}{\sigma}\right]^{-1/\xi} & \text{ if } \xi \neq 0 \\ \displaystyle 1 - \exp\left(-\frac{x}{\sigma}\right) & \text{ if } \xi = 0 \end{array}\right., \quad x \in [0; +\infty[ with :math:`\sigma > 0` and :math:`\xi \in \Rset`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{\sigma}{1 - \xi} \quad \text{ if } \xi < 1 \\ \Var{X} & = & \frac{\sigma^2}{(1 - 2 \xi) (1 - \xi)^2} \quad \text{ if } \xi < \frac{1}{2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.GeneralizedPareto(1.0, 0.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedPareto::getSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Returns ------- sigma : float Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedPareto::getXi "Accessor to the distribution's shape parameter :math:`\xi`. Returns ------- xi : float Shape parameter :math:`\xi`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedPareto::setSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::GeneralizedPareto::setXi "Accessor to the distribution's shape parameter :math:`\xi`. Parameters ---------- xi : float, :math:`\xi \in \Rset` Shape parameter :math:`\xi`." openturns-1.9/python/src/Geometric.i000066400000000000000000000003561307543307100176270ustar00rootroot00000000000000// SWIG file Geometric.i %{ #include "openturns/Geometric.hxx" %} %include Geometric_doc.i %include openturns/Geometric.hxx namespace OT { %extend Geometric { Geometric(const Geometric & other) { return new OT::Geometric(other); } } } openturns-1.9/python/src/GeometricFactory.i000066400000000000000000000004461307543307100211570ustar00rootroot00000000000000// SWIG file GeometricFactory.i %{ #include "openturns/GeometricFactory.hxx" %} %include GeometricFactory_doc.i %include openturns/GeometricFactory.hxx namespace OT { %extend GeometricFactory { GeometricFactory(const GeometricFactory & other) { return new OT::GeometricFactory(other); } } } openturns-1.9/python/src/GeometricFactory_doc.i.in000066400000000000000000000002311307543307100224010ustar00rootroot00000000000000%feature("docstring") OT::GeometricFactory "Geometric factory. Available constructor: GeometricFactory() See also -------- DistributionFactory" openturns-1.9/python/src/GeometricProfile.i000066400000000000000000000004231307543307100211430ustar00rootroot00000000000000// SWIG file %{ #include "openturns/GeometricProfile.hxx" %} %include GeometricProfile_doc.i %include openturns/GeometricProfile.hxx namespace OT { %extend GeometricProfile { GeometricProfile(const GeometricProfile & other) { return new OT::GeometricProfile(other); } } } openturns-1.9/python/src/GeometricProfile_doc.i.in000066400000000000000000000025341307543307100224020ustar00rootroot00000000000000%define OT_GeometricProfile_doc "Geometric temperature profile. Available constructor: GeometricProfile() GeometricProfile(*T0, c, iMax*) Parameters ---------- T0 : float Initial temperature c : float The geometric ratio Should be in ]0,1[ iMax : int Number of maximal iterations Notes ----- The temperature write: .. math:: :nowrap: \begin{equation*} T(i) = T_0 * c^{i} \in [0,iMax] \end{equation*} Examples -------- >>> import openturns as ot >>> # Define a profile >>> T0 = 10.0 >>> iMax = 100 >>> c = 0.90 >>> geometricProfile = ot.GeometricProfile(T0, c, iMax) " %enddef %feature("docstring") OT::GeometricProfile OT_GeometricProfile_doc // --------------------------------------------------------------------- %define OT_GeometricProfile_call_doc "Compute the temperature T(i). Parameters ---------- i : int The index for whome we seek temperature Returns ------- temperature: float The temperature Examples -------- >>> import openturns as ot >>> # Define a profile >>> T0 = 10.0 >>> iMax = 100 >>> c = 0.90 >>> geometricProfile = ot.GeometricProfile(T0, c, iMax) >>> temperature = geometricProfile(5) >>> print(temperature) 5.9049..." %enddef %feature("docstring") OT::GeometricProfile::operator() OT_GeometricProfile_call_doc // --------------------------------------------------------------------- openturns-1.9/python/src/Geometric_doc.i.in000066400000000000000000000024001307543307100210510ustar00rootroot00000000000000%feature("docstring") OT::Geometric "Geometric distribution. Available constructors: Geometric(*p=0.5*) Parameters ---------- p : float, :math:`0 < p \leq 1` Success probability of the Bernoulli trial. Notes ----- Its probability density function is defined as: .. math:: \Prob{X = k} = p (1 - p)^{k - 1}, \quad \forall k \in \Nset^* with :math:`0 < p \leq 1`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{1}{p} \\ \Var{X} & = & \frac{1 - p}{p^2} \end{eqnarray*} See Also -------- Bernoulli Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Geometric(0.5) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Geometric::getP "Accessor to the success probability parameter. Returns ------- p : float The success probability of the Bernoulli trial." // --------------------------------------------------------------------- %feature("docstring") OT::Geometric::setP "Accessor to the success probability parameter. Parameters ---------- p : float, :math:`0 < p \leq 1` The success probability of the Bernoulli trial." openturns-1.9/python/src/GradientImplementation.i000066400000000000000000000005261307543307100223530ustar00rootroot00000000000000// SWIG file GradientImplementation.i %{ #include "openturns/GradientImplementation.hxx" %} %include GradientImplementation_doc.i %include openturns/GradientImplementation.hxx namespace OT { %extend GradientImplementation { GradientImplementation(const GradientImplementation & other) { return new OT::GradientImplementation(other); } } } openturns-1.9/python/src/GradientImplementation_doc.i.in000066400000000000000000000054451307543307100236120ustar00rootroot00000000000000%feature("docstring") OT::GradientImplementation "Numerical math gradient implementation. See also -------- Function, HessianImplementation Notes ----- This object is the result of the method *getGradient* of a :class:`~openturns.Function`." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::getCallsNumber "Accessor to the number of times the gradient has been called. Returns ------- calls_number : int Integer that counts the number of times the gradient has been called since its creation." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::getInputDimension "Accessor to the number of the inputs. Returns ------- number_inputs : int Number of inputs." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::getOutputDimension "Accessor to the number of the outputs. Returns ------- number_outputs : int Number of outputs." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::getMarginal "Accessor to the gradient implementation of a specific output. Parameters ---------- i : integer Integer corresponding to the output (Care: it starts at 0). indices : sequence of integer The set of indices for which the outputs are extracted. Returns ------- gradientImplementation : :class:`~openturns.GradientImplementation` A gradient implementation restricted to its compenents functions which indices are *i* or *indices*." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::gradient "Return the Jacobian transposed matrix of the implementation at a point. Parameters ---------- point : sequence of float Point where the Jacobian transposed matrix is calculated. Returns ------- gradient : :class:`~openturns.Matrix` The Jacobian transposed matrix of the function at *point*." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::isActualImplementation "Accessor to the validity flag. Returns ------- is_impl : bool Whether the implementation is valid." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::getParameter "Accessor to the parameter values. Returns ------- parameter : :class:`~openturns.Point` The parameter values." // --------------------------------------------------------------------- %feature("docstring") OT::GradientImplementation::setParameter "Accessor to the parameter values. Parameters ---------- parameter : sequence of float The parameter values." openturns-1.9/python/src/GramSchmidtAlgorithm.i000066400000000000000000000005051307543307100217560ustar00rootroot00000000000000// SWIG file GramSchmidtAlgorithm.i %{ #include "openturns/GramSchmidtAlgorithm.hxx" %} %include GramSchmidtAlgorithm_doc.i %include openturns/GramSchmidtAlgorithm.hxx namespace OT{ %extend GramSchmidtAlgorithm { GramSchmidtAlgorithm(const GramSchmidtAlgorithm & other) { return new OT::GramSchmidtAlgorithm(other); } } } openturns-1.9/python/src/GramSchmidtAlgorithm_doc.i.in000066400000000000000000000032361307543307100232140ustar00rootroot00000000000000%feature("docstring") OT::GramSchmidtAlgorithm "GramSchmidt algorithm used to build the orthonormal basis. The algorithm builds the basis with respect to a specific distribution. Available constructors: GramSchmidtAlgorithm(*measure*) GramSchmidtAlgorithm(*measure, referenceFamily*) Parameters ---------- measure : :class:`~openturns.Distribution` A measure for which the orthonormal polynomial basis is built. referenceFamily : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` A polynomial family from which the algorithm starts to build the orthonornal polynomial family. When not specified, the *referenceFamily* is the canonical one: :math:`\{ 1, x, x^2, \ldots\}`. See also -------- OrthonormalizationAlgorithm, ChebychevAlgorithm Notes ----- It implements the Gram-Schmidt algorithm that builds the orthonormalized polynomial family with respect to the distribution *measure*, where the initial polynomial family is the one specified in *referenceFamily*. " // --------------------------------------------------------------------- %feature("docstring") OT::GramSchmidtAlgorithm::getReferenceFamily "Accessor to the reference family. Returns ------- family : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` The polynomial family from which the orthonormal polynomial family is built." // --------------------------------------------------------------------- %feature("docstring") OT::GramSchmidtAlgorithm::setReferenceFamily "Accessor to the reference family. Parameters ---------- family : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` The polynomial family from which the orthonormal polynomial family is built." openturns-1.9/python/src/Graph.i000066400000000000000000000053261307543307100167540ustar00rootroot00000000000000// SWIG file Graph.i %{ #include "openturns/Graph.hxx" namespace OT { template <> struct traitsPythonType { typedef _PySequence_ Type; }; template <> inline OT::Graph convert<_PySequence_,OT::Graph>(PyObject * pyObj) { String title; String xTitle; String yTitle; Bool showAxes; String legendPosition; Scalar legendFontSize = ResourceMap::GetAsScalar("Graph-DefaultLegendFontSize"); check<_PySequence_>( pyObj ); ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); switch (PySequence_Fast_GET_SIZE( newPyObj.get() )) { case 6: { PyObject * item_5 = PySequence_Fast_GET_ITEM( newPyObj.get(), 5 ); check<_PyFloat_>( item_5 ); legendFontSize = convert<_PyFloat_,Scalar>( item_5 ); } case 5: { PyObject * item_4 = PySequence_Fast_GET_ITEM( newPyObj.get(), 4 ); check<_PyString_>( item_4 ); legendPosition = convert<_PyString_,String>( item_4 ); } case 4: { PyObject * item_0 = PySequence_Fast_GET_ITEM( newPyObj.get(), 0 ); check<_PyString_>( item_0 ); title = convert<_PyString_,String>( item_0 ); PyObject * item_1 = PySequence_Fast_GET_ITEM( newPyObj.get(), 1 ); check<_PyString_>( item_1 ); xTitle = convert<_PyString_,String>( item_1 ); PyObject * item_2 = PySequence_Fast_GET_ITEM( newPyObj.get(), 2 ); check<_PyString_>( item_2 ); yTitle = convert<_PyString_,String>( item_2 ); PyObject * item_3 = PySequence_Fast_GET_ITEM( newPyObj.get(), 3 ); check<_PyBool_>( item_3 ); showAxes = convert<_PyBool_,Bool>( item_3 ); } break; default: throw InvalidArgumentException(HERE) << "Sequence passed as argument is not convertible to a Graph. Expected sequence (String, String, String, Bool, String, Scalar)"; } return OT::Graph( title, xTitle, yTitle, showAxes, legendPosition, legendFontSize); } } /* namespace OT */ %} %include Graph_doc.i OTTypedInterfaceObjectHelper(Graph) %template(GraphCollection) OT::Collection; %include openturns/Graph.hxx %pythoncode %{ def Graph__repr_svg_(self): """Get the SVG representation.""" from .viewer import ToSVGString return ToSVGString(self) Graph._repr_svg_ = Graph__repr_svg_ def Graph__repr_html_(self): """Get the HTML representation.""" raise NotImplementedError Graph._repr_html_ = Graph__repr_html_ %} namespace OT{ %extend Graph { Graph(const Graph & other) { return new OT::Graph(*other.getImplementation()); } Graph(PyObject * pyObj) { return new OT::Graph( OT::convert(pyObj) ); } } } openturns-1.9/python/src/GraphImplementation.i000066400000000000000000000007141307543307100216560ustar00rootroot00000000000000// SWIG file GraphImplementation.i %{ #include "openturns/GraphImplementation.hxx" %} %include GraphImplementation_doc.i %ignore OT::GraphImplementation::addDrawable(const OT::Drawable&); %ignore OT::GraphImplementation::addDrawables(const DrawableCollection&); %include openturns/GraphImplementation.hxx namespace OT{ %extend GraphImplementation { GraphImplementation(const GraphImplementation & other) { return new OT::GraphImplementation(other); } } } openturns-1.9/python/src/GraphImplementation_doc.i.in000066400000000000000000000472251307543307100231200ustar00rootroot00000000000000%define OT_Graph_doc "Class Graph containing drawable elements and a graphical context. Available constructors: Graph(*title=''*) Graph(*title, xTitle, yTitle, showAxes, legendPosition='', legendFontSize=1.0, logScale=ot.GraphImplementation.NONE*) Parameters ---------- title : str Title of the graph. xTitle : str Legend of the X axe. yTitle : str Legend of the Y axe. showAxes : bool *True* to draw the axes. *False* to hide them. legendPosition : str Indication of the legend's position. If *legendPosition* is not specified, the Graph has no legend. The valid strings are given by the :meth:`GetValidLegendPositions` method. legendFontSize : float Font size of the legend. logScale : int logScale indicates whether the logarithmic scale is used either for one or both axes: - ot.GraphImplementation.NONE or 0: no log scale is used, - ot.GraphImplementation.LOGX or 1: log scale is used only for horizontal data, - ot.GraphImplementation.LOGY or 2: log scale is used only for vertical data, - ot.GraphImplementation.LOGXY or 3: log scale is used for both data. " %enddef %feature("docstring") OT::GraphImplementation OT_Graph_doc // --------------------------------------------------------------------- %define OT_Graph_getDrawables_doc "Accessor to the Drawables included in the Graph. Returns ------- drawables : list of :class:`~openturns.Drawable` Drawables included in the Graph." %enddef %feature("docstring") OT::GraphImplementation::getDrawables OT_Graph_getDrawables_doc // --------------------------------------------------------------------- %define OT_Graph_setDrawables_doc "Accessor to the Drawables included in the Graph. Parameters ---------- drawables : list of :class:`~openturns.Drawable` Drawables included in the Graph." %enddef %feature("docstring") OT::GraphImplementation::setDrawables OT_Graph_setDrawables_doc // --------------------------------------------------------------------- %define OT_Graph_getDrawable_doc "Accessor to a Drawable included in the Graph. Parameters ---------- index : positive int Position of the Drawable. Returns ------- drawable : :class:`~openturns.Drawable` Drawable included in the Graph at the index." %enddef %feature("docstring") OT::GraphImplementation::getDrawable OT_Graph_getDrawable_doc // --------------------------------------------------------------------- %define OT_Graph_setDrawable_doc "Accessor to a Drawable included in the Graph. Parameters ---------- drawable : :class:`~openturns.Drawable` Drawable included in the Graph. index : int Position of the Drawable." %enddef %feature("docstring") OT::GraphImplementation::setDrawable OT_Graph_setDrawable_doc // --------------------------------------------------------------------- %define OT_Graph_getColors_doc "Accessor to the colors of the Drawables included in the Graph. Returns ------- listColors : :class:`~openturns.Description` List of all the colors used for the Drawables contained inside the graph." %enddef %feature("docstring") OT::GraphImplementation::getColors OT_Graph_getColors_doc // --------------------------------------------------------------------- %define OT_Graph_setColors_doc "Update the colors of the Drawables inside the Graph. Parameters ---------- listColors : sequence of str List of the colors used for each Drawable of the Graph. If the *listColors*'s size is lower than the number of Drawables, the first colors of *listColors* are re-used. If it is greated than the number of Drawables, the last colors of the list are ignored. The *listColors* argument can be the result of the static method :meth:`~openturns.Drawable.BuildDefaultPalette` of the Drawable object." %enddef %feature("docstring") OT::GraphImplementation::setColors OT_Graph_setColors_doc // --------------------------------------------------------------------- %define OT_Graph_setDefaultColors_doc "Assign colors to a default palette to all the drawables of the Graph. Notes ----- This method ensures that drawables of the Graph have different colors." %enddef %feature("docstring") OT::GraphImplementation::setDefaultColors OT_Graph_setDefaultColors_doc // --------------------------------------------------------------------- %define OT_Graph_getLegends_doc "Accessor to the legends of the Drawables inside the Graph. Returns ------- legends : :class:`~openturns.Description` Legends used for the drawables contained inside the Graph." %enddef %feature("docstring") OT::GraphImplementation::getLegends OT_Graph_getLegends_doc // --------------------------------------------------------------------- %define OT_Graph_setLegends_doc "Accessor to the legends of the Drawables inside the Graph. Parameters ---------- legends : sequence of str Legends used for the drawables contained inside the Graph." %enddef %feature("docstring") OT::GraphImplementation::setLegends OT_Graph_setLegends_doc // --------------------------------------------------------------------- %define OT_Graph_getLegendFontSize_doc "Accessor to the legends' font size of the Drawables inside the Graph. Returns ------- fontSize : float Legends' font size used for the drawables contained inside the Graph. See Also -------- setLegendFontSize" %enddef %feature("docstring") OT::GraphImplementation::getLegendFontSize OT_Graph_getLegendFontSize_doc // --------------------------------------------------------------------- %define OT_Graph_setLegendFontSize_doc "Accessor to the legend's font size of the Drawables inside the Graph. Parameters ---------- fontSize : float Legend's font size used for the drawables contained inside the Graph. Examples -------- >>> import openturns as ot >>> fontSize = 1.0 >>> # Create an empty graph >>> myGraph = ot.Graph('Some curves', 'x1', 'x2', True, 'topright', fontSize, 0) >>> myGraph.setLegendFontSize(1.5) >>> print(myGraph.getLegendFontSize()) 1.5" %enddef %feature("docstring") OT::GraphImplementation::setLegendFontSize OT_Graph_setLegendFontSize_doc // --------------------------------------------------------------------- %define OT_Graph_getLegendPosition_doc "Accessor to the legend's position of the Drawables inside the Graph. Returns ------- position : str Legend's position used for the drawables contained inside the Graph. See Also -------- setLegendPosition, GetValidLegendPositions" %enddef %feature("docstring") OT::GraphImplementation::getLegendPosition OT_Graph_getLegendPosition_doc // --------------------------------------------------------------------- %define OT_Graph_setLegendPosition_doc "Accessor to the legend's position of the Drawables inside the Graph. Parameters ---------- position : str Legend's position used for the drawables contained inside the Graph. The valid positions are given by the method :meth:`GetValidLegendPositions`. Examples -------- >>> import openturns as ot >>> position = 'topright' >>> # Create an empty graph >>> myGraph = ot.Graph('Some curves', 'x1', 'x2', True, position, 1.0, 0) >>> myGraph.setLegendPosition('bottomleft') >>> print(myGraph.getLegendPosition()) bottomleft" %enddef %feature("docstring") OT::GraphImplementation::setLegendPosition OT_Graph_setLegendPosition_doc // --------------------------------------------------------------------- %define OT_Graph_GetValidLegendPositions_doc "Accessor to the list of valid legend positions. Returns ------- listPositions : :class:`~openturns.Description` All the valid legend positions. Examples -------- >>> import openturns as ot >>> print(ot.Graph.GetValidLegendPositions()) [,bottomright,bottom,bottomleft,left,topleft,top,topright,right,center]#10" %enddef %feature("docstring") OT::GraphImplementation::GetValidLegendPositions OT_Graph_GetValidLegendPositions_doc // --------------------------------------------------------------------- %define OT_Graph_IsValidLegendPosition_doc "Test if the proposed legend position is valid or not. Parameters ---------- position : str Proposed legend position of the Drawables inside the Graph. Returns ------- validity : bool *True* if the proposed legend position is valid, *False* if it is not. See Also -------- setLegendPosition, GetValidLegendPositions Examples -------- >>> import openturns as ot >>> print(ot.Graph.IsValidLegendPosition('lefttop')) False >>> print(ot.Graph.IsValidLegendPosition('topleft')) True" %enddef %feature("docstring") OT::GraphImplementation::IsValidLegendPosition OT_Graph_IsValidLegendPosition_doc // --------------------------------------------------------------------- %define OT_Graph_getAxes_doc "Accessor to the indication of axes' presence on the Graph. Returns ------- axes : bool *True* if the axes are drawn, *False* if they are hidden." %enddef %feature("docstring") OT::GraphImplementation::getAxes OT_Graph_getAxes_doc // --------------------------------------------------------------------- %define OT_Graph_setAxes_doc "Accessor to the indication of axes' presence on the Graph. Parameters ---------- axes : bool *True* to draw the axes, *False* to hide the axes." %enddef %feature("docstring") OT::GraphImplementation::setAxes OT_Graph_setAxes_doc // --------------------------------------------------------------------- %define OT_Graph_getLogScale_doc "Accessor to the indication of axes' scale of the Graph. Returns ------- scale : int Indicates the type of the axes's scale: - 0: no log scale is used, - 1: log scale is used only for horizontal data, - 2: log scale is used only for vertical data, - 3: log scale is used for both data." %enddef %feature("docstring") OT::GraphImplementation::getLogScale OT_Graph_getLogScale_doc // --------------------------------------------------------------------- %define OT_Graph_setLogScale_doc "Accessor to the indication of axes' scale of the Graph. Parameters ---------- scale : int Indicates the type of the axes's scale: - ot.GraphImplementation.NONE or 0: no log scale is used, - ot.GraphImplementation.LOGX or 1: log scale is used only for horizontal data, - ot.GraphImplementation.LOGY or 2: log scale is used only for vertical data, - ot.GraphImplementation.LOGXY or 3: log scale is used for both data." %enddef %feature("docstring") OT::GraphImplementation::setLogScale OT_Graph_setLogScale_doc // --------------------------------------------------------------------- %define OT_Graph_getXTitle_doc "Accessor to the title of the X axe. Returns ------- Xtitle : str Title of the X axe." %enddef %feature("docstring") OT::GraphImplementation::getXTitle OT_Graph_getXTitle_doc // --------------------------------------------------------------------- %define OT_Graph_setXTitle_doc "Accessor to the title of the X axe. Parameters ---------- Xtitle : str Title of the X axe." %enddef %feature("docstring") OT::GraphImplementation::setXTitle OT_Graph_setXTitle_doc // --------------------------------------------------------------------- %define OT_Graph_getYTitle_doc "Accessor to the title of the Y axe. Returns ------- Ytitle : str Title of the Y axe." %enddef %feature("docstring") OT::GraphImplementation::getYTitle OT_Graph_getYTitle_doc // --------------------------------------------------------------------- %define OT_Graph_setYTitle_doc "Accessor to the title of the Y axe. Parameters ---------- Ytitle : str Title of the Y axe." %enddef %feature("docstring") OT::GraphImplementation::setYTitle OT_Graph_setYTitle_doc // --------------------------------------------------------------------- %define OT_Graph_getTitle_doc "Accessor to the title of the Graph. Returns ------- title : str Title of the Graph." %enddef %feature("docstring") OT::GraphImplementation::getTitle OT_Graph_getTitle_doc // --------------------------------------------------------------------- %define OT_Graph_setTitle_doc "Accessor to the title of the Graph. Parameters ---------- title : str Title of the Graph." %enddef %feature("docstring") OT::GraphImplementation::setTitle OT_Graph_setTitle_doc // --------------------------------------------------------------------- %define OT_Graph_getName_doc "Accessor to the name of the Graph. Returns ------- name : str Name of the Graph." %enddef %feature("docstring") OT::GraphImplementation::getName OT_Graph_getName_doc // --------------------------------------------------------------------- %define OT_Graph_setName_doc "Accessor to the name of the Graph. Parameters ---------- name : str Name of the Graph." %enddef %feature("docstring") OT::GraphImplementation::setName OT_Graph_setName_doc // --------------------------------------------------------------------- %define OT_Graph_getGrid_doc "Accessor to the indication of grid's presence on the Graph. Returns ------- showGrid : bool *True* to show the grid of the Graph, *False* to hide it. By default there is a gray grid." %enddef %feature("docstring") OT::GraphImplementation::getGrid OT_Graph_getGrid_doc // --------------------------------------------------------------------- %define OT_Graph_setGrid_doc "Hide or shows grid of the Graph. Parameters ---------- showGrid : bool *True* to show the grid of the Graph, *False* to hide it." %enddef %feature("docstring") OT::GraphImplementation::setGrid OT_Graph_setGrid_doc // --------------------------------------------------------------------- %define OT_Graph_getGridColor_doc "Accessor to the indication of grid's color on the Graph. Returns ------- gridColor : str Color of the grid. By default the grid is gray." %enddef %feature("docstring") OT::GraphImplementation::getGridColor OT_Graph_getGridColor_doc // --------------------------------------------------------------------- %define OT_Graph_setGridColor_doc "Accessor to the indication of grid's color on the Graph. Parameters ---------- gridColor : str Color of the grid. By default the grid is gray." %enddef %feature("docstring") OT::GraphImplementation::setGridColor OT_Graph_setGridColor_doc // --------------------------------------------------------------------- %define OT_Graph_getFileName_doc "Accessor to the name of the file containing the Graph. Returns ------- fileName : str Name of the file containing the Graph." %enddef %feature("docstring") OT::GraphImplementation::getFileName OT_Graph_getFileName_doc // --------------------------------------------------------------------- %define OT_Graph_getPath_doc "Accessor to the file path excluding the suffix. Returns ------- path : str Path of the file containing the Graph." %enddef %feature("docstring") OT::GraphImplementation::getPath OT_Graph_getPath_doc // --------------------------------------------------------------------- %define OT_Graph_getBitmap_doc "**(ditch me?)**" %enddef %feature("docstring") OT::GraphImplementation::getBitmap OT_Graph_getBitmap_doc // --------------------------------------------------------------------- %define OT_Graph_getPostscript_doc "**(ditch me?)**" %enddef %feature("docstring") OT::GraphImplementation::getPostscript OT_Graph_getPostscript_doc // --------------------------------------------------------------------- %define OT_Graph_getVectorial_doc "**(ditch me?)**" %enddef %feature("docstring") OT::GraphImplementation::getVectorial OT_Graph_getVectorial_doc // --------------------------------------------------------------------- %define OT_Graph_getPDF_doc "**(ditch me?)**" %enddef %feature("docstring") OT::GraphImplementation::getPDF OT_Graph_getPDF_doc // --------------------------------------------------------------------- %define OT_Graph_getBoundingBox_doc "Accessor to the bounding box of the whole plot. Returns ------- boundingBox : :class:`~openturns.Point` of dimension 4 Bounding box of the drawable element, which is a rectangle determined by its range along X and its range along Y. The *boundingBox* is :math:`(x_{min}, x_{max}, y_{min}, y_{max})`." %enddef %feature("docstring") OT::GraphImplementation::getBoundingBox OT_Graph_getBoundingBox_doc // --------------------------------------------------------------------- %define OT_Graph_setBoundingBox_doc "Accessor to the bounding box of the whole plot. Parameters ---------- boundingBox : sequence of float of dimension 4 Bounding box of the drawable element, which is a rectangle determined by its range along X and its range along Y. The *boundingBox* is :math:`(x_{min}, x_{max}, y_{min}, y_{max})`." %enddef %feature("docstring") OT::GraphImplementation::setBoundingBox OT_Graph_setBoundingBox_doc // --------------------------------------------------------------------- %define OT_Graph_getRCommand_doc "**(ditch me?)**" %enddef %feature("docstring") OT::GraphImplementation::getRCommand OT_Graph_getRCommand_doc // --------------------------------------------------------------------- %define OT_Graph_getAutomaticBoundingBox_doc "Accessor to the indication of automatic bounding box. Returns ------- autoBoundingBox : bool Indicates if the bounding box is automatically created or not. The bounding box of the drawable element is a rectangle determined by its range along X and its range along Y. The *boundingBox* is :math:`(x_{min}, x_{max}, y_{min}, y_{max})`." %enddef %feature("docstring") OT::GraphImplementation::getAutomaticBoundingBox OT_Graph_getAutomaticBoundingBox_doc // --------------------------------------------------------------------- %define OT_Graph_setAutomaticBoundingBox_doc "Accessor to the indication of automatic bounding box. Parameters ---------- autoBoundingBox : bool Indicates if the bounding box is automatically created or not. The bounding box of the drawable element is a rectangle determined by its range along X and its range along Y. The *boundingBox* is :math:`(x_{min}, x_{max}, y_{min}, y_{max})`." %enddef %feature("docstring") OT::GraphImplementation::setAutomaticBoundingBox OT_Graph_setAutomaticBoundingBox_doc // --------------------------------------------------------------------- %define OT_Graph_draw_doc "Generate graphic files. Parameters ---------- file : str Name of the created file. The format is guessed from the extension. Supports png, fig, pdf and eps file formats. When the path is not specified in the file name, the files are created in the current directory. width : float Number of pixels fixing the width of the Graph, default value=640. height : float Number of pixels fixing the height of the Graph, default value=480." %enddef %feature("docstring") OT::GraphImplementation::draw OT_Graph_draw_doc // --------------------------------------------------------------------- %define OT_Graph_add_doc "Add drawable instances to the collection of drawables contained in Graph. Available usages: add(*drawables*) add(*aGraph*) Parameters ---------- drawables : :class:`~openturns.Drawable` or list of :class:`~openturns.Drawable` Drawable to add in the Graph. aGraph : :class:`~openturns.Graph` Graph to add in the Graph. Notes ----- It adds the new drawables or graph inside the first one, with their legend. It keeps the graphical context of the first graph. Each drawable keeps its graphical context. .. warning:: Different drawables might be colored the same..." %enddef %feature("docstring") OT::GraphImplementation::add OT_Graph_add_doc // --------------------------------------------------------------------- %define OT_Graph_clean_doc "Clean temporary files. Notes ----- Cleans all the temporary data created by the drawables during their drawing." %enddef %feature("docstring") OT::GraphImplementation::clean OT_Graph_clean_doc // --------------------------------------------------------------------- %define OT_Graph_erase_doc "Erase a drawable instance from the collection of drawables contained in Graph. Parameters ---------- index : int Index of the drawable instance to erase from the collection of drawables contained in Graph." %enddef %feature("docstring") OT::GraphImplementation::erase OT_Graph_erase_doc openturns-1.9/python/src/Graph_doc.i.in000066400000000000000000000064161307543307100202070ustar00rootroot00000000000000// Graph docstrings are defined in GraphImplementation_doc.i.in %feature("docstring") OT::Graph OT_Graph_doc %feature("docstring") OT::Graph::getDrawables OT_Graph_getDrawables_doc %feature("docstring") OT::Graph::setDrawables OT_Graph_setDrawables_doc %feature("docstring") OT::Graph::getDrawable OT_Graph_getDrawable_doc %feature("docstring") OT::Graph::setDrawable OT_Graph_setDrawable_doc %feature("docstring") OT::Graph::getColors OT_Graph_getColors_doc %feature("docstring") OT::Graph::setColors OT_Graph_setColors_doc %feature("docstring") OT::Graph::setDefaultColors OT_Graph_setDefaultColors_doc %feature("docstring") OT::Graph::getLegends OT_Graph_getLegends_doc %feature("docstring") OT::Graph::setLegends OT_Graph_setLegends_doc %feature("docstring") OT::Graph::getLegendFontSize OT_Graph_getLegendFontSize_doc %feature("docstring") OT::Graph::setLegendFontSize OT_Graph_setLegendFontSize_doc %feature("docstring") OT::Graph::getLegendPosition OT_Graph_getLegendPosition_doc %feature("docstring") OT::Graph::setLegendPosition OT_Graph_setLegendPosition_doc %feature("docstring") OT::Graph::GetValidLegendPositions OT_Graph_GetValidLegendPositions_doc %feature("docstring") OT::Graph::IsValidLegendPosition OT_Graph_IsValidLegendPosition_doc %feature("docstring") OT::Graph::getAxes OT_Graph_getAxes_doc %feature("docstring") OT::Graph::setAxes OT_Graph_setAxes_doc %feature("docstring") OT::Graph::getLogScale OT_Graph_getLogScale_doc %feature("docstring") OT::Graph::setLogScale OT_Graph_setLogScale_doc %feature("docstring") OT::Graph::getXTitle OT_Graph_getXTitle_doc %feature("docstring") OT::Graph::setXTitle OT_Graph_setXTitle_doc %feature("docstring") OT::Graph::getYTitle OT_Graph_getYTitle_doc %feature("docstring") OT::Graph::setYTitle OT_Graph_setYTitle_doc %feature("docstring") OT::Graph::getTitle OT_Graph_getTitle_doc %feature("docstring") OT::Graph::setTitle OT_Graph_setTitle_doc %feature("docstring") OT::Graph::getName OT_Graph_getName_doc %feature("docstring") OT::Graph::setName OT_Graph_setName_doc %feature("docstring") OT::Graph::getGrid OT_Graph_getGrid_doc %feature("docstring") OT::Graph::setGrid OT_Graph_setGrid_doc %feature("docstring") OT::Graph::getGridColor OT_Graph_getGridColor_doc %feature("docstring") OT::Graph::setGridColor OT_Graph_setGridColor_doc %feature("docstring") OT::Graph::getFileName OT_Graph_getFileName_doc %feature("docstring") OT::Graph::getPath OT_Graph_getPath_doc %feature("docstring") OT::Graph::getBitmap OT_Graph_getBitmap_doc %feature("docstring") OT::Graph::getPostscript OT_Graph_getPostscript_doc %feature("docstring") OT::Graph::getVectorial OT_Graph_getVectorial_doc %feature("docstring") OT::Graph::getPDF OT_Graph_getPDF_doc %feature("docstring") OT::Graph::getBoundingBox OT_Graph_getBoundingBox_doc %feature("docstring") OT::Graph::setBoundingBox OT_Graph_setBoundingBox_doc %feature("docstring") OT::Graph::getRCommand OT_Graph_getRCommand_doc %feature("docstring") OT::Graph::getAutomaticBoundingBox OT_Graph_getAutomaticBoundingBox_doc %feature("docstring") OT::Graph::setAutomaticBoundingBox OT_Graph_setAutomaticBoundingBox_doc %feature("docstring") OT::Graph::draw OT_Graph_draw_doc %feature("docstring") OT::Graph::add OT_Graph_add_doc %feature("docstring") OT::Graph::clean OT_Graph_clean_doc %feature("docstring") OT::Graph::erase OT_Graph_erase_doc openturns-1.9/python/src/Greater.i000066400000000000000000000005011307543307100172720ustar00rootroot00000000000000// SWIG file Greater.i %{ #include "openturns/Greater.hxx" %} %include Greater_doc.i %include openturns/Greater.hxx namespace OT { %extend Greater { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend Greater { Greater(const Greater & other) { return new OT::Greater(other); } } } openturns-1.9/python/src/GreaterOrEqual.i000066400000000000000000000006001307543307100205630ustar00rootroot00000000000000// SWIG file GreaterOrEqual.i %{ #include "openturns/GreaterOrEqual.hxx" %} %include GreaterOrEqual_doc.i %include openturns/GreaterOrEqual.hxx namespace OT { %extend GreaterOrEqual { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend GreaterOrEqual { GreaterOrEqual(const GreaterOrEqual & other) { return new OT::GreaterOrEqual(other); } } } openturns-1.9/python/src/GreaterOrEqual_doc.i.in000066400000000000000000000005431307543307100220230ustar00rootroot00000000000000%feature("docstring") OT::GreaterOrEqual "Greater or equal comparison operator. Available constructors: GreaterOrEqual() See also -------- Equal, Greater, Less, LessOrEqual Examples -------- >>> import openturns as ot >>> operator = ot.GreaterOrEqual() >>> print(operator(1, 2)) False >>> print(operator(2, 1)) True >>> print(operator(2, 2)) True "openturns-1.9/python/src/Greater_doc.i.in000066400000000000000000000005151307543307100205310ustar00rootroot00000000000000%feature("docstring") OT::Greater "Greater comparison operator. Available constructors: Greater() See also -------- Equal, GreaterOrEqual, Less, LessOrEqual Examples -------- >>> import openturns as ot >>> operator = ot.Greater() >>> print(operator(1, 2)) False >>> print(operator(2, 1)) True >>> print(operator(2, 2)) False "openturns-1.9/python/src/Gumbel.i000066400000000000000000000003261307543307100171210ustar00rootroot00000000000000// SWIG file Gumbel.i %{ #include "openturns/Gumbel.hxx" %} %include Gumbel_doc.i %include openturns/Gumbel.hxx namespace OT { %extend Gumbel { Gumbel(const Gumbel & other) { return new OT::Gumbel(other); } } } openturns-1.9/python/src/GumbelAB.i000066400000000000000000000003451307543307100173250ustar00rootroot00000000000000// SWIG file GumbelAB.i %{ #include "openturns/GumbelAB.hxx" %} %include GumbelAB_doc.i %include openturns/GumbelAB.hxx namespace OT{ %extend GumbelAB { GumbelAB(const GumbelAB & other) { return new OT::GumbelAB(other); } } } openturns-1.9/python/src/GumbelAB_doc.i.in000066400000000000000000000013411307543307100205540ustar00rootroot00000000000000%feature("docstring") OT::GumbelAB "Gumbel distribution parameters. Available constructors: GumbelAB(*a=0.0, b=1.0*) Parameters ---------- a : float Location parameter. b : float Scale parameter :math:`b > 0`. Notes ----- The native parameters are defined as follows: .. math:: \alpha &= \frac{1}{b} \\ \beta &= a See also -------- Gumbel Examples -------- Create the parameters of the Gumbel distribution: >>> import openturns as ot >>> parameters = ot.GumbelAB(-0.5, 0.5) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [2,-0.5] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 0 1 ] [ -4 0 ]]" openturns-1.9/python/src/GumbelCopula.i000066400000000000000000000004061307543307100202640ustar00rootroot00000000000000// SWIG file GumbelCopula.i %{ #include "openturns/GumbelCopula.hxx" %} %include GumbelCopula_doc.i %include openturns/GumbelCopula.hxx namespace OT { %extend GumbelCopula { GumbelCopula(const GumbelCopula & other) { return new OT::GumbelCopula(other); } } } openturns-1.9/python/src/GumbelCopulaFactory.i000066400000000000000000000004761307543307100216230ustar00rootroot00000000000000// SWIG file GumbelCopulaFactory.i %{ #include "openturns/GumbelCopulaFactory.hxx" %} %include GumbelCopulaFactory_doc.i %include openturns/GumbelCopulaFactory.hxx namespace OT { %extend GumbelCopulaFactory { GumbelCopulaFactory(const GumbelCopulaFactory & other) { return new OT::GumbelCopulaFactory(other); } } } openturns-1.9/python/src/GumbelCopulaFactory_doc.i.in000066400000000000000000000002431307543307100230450ustar00rootroot00000000000000%feature("docstring") OT::GumbelCopulaFactory "Gumbel Copula factory. Available constructor: GumbelCopulaFactory() See also -------- DistributionFactory" openturns-1.9/python/src/GumbelCopula_doc.i.in000066400000000000000000000023561307543307100215240ustar00rootroot00000000000000%feature("docstring") OT::GumbelCopula "Gumbel copula. Available constructor: GumbelCopula(*theta=2.0*) Parameters ---------- theta : float, :math:`\theta \geq 1` Parameter :math:`\theta`. Notes ----- The Gumbel copula is a bivariate asymmetric Archimedean copula, exhibiting greater dependence in the positive tail than in the negative. It is defined by: .. math:: C(u_1, u_2) = \exp(-((-log(u_1))^{\theta} + (-log(u_2))^{\theta}))^{1/\theta}) for :math:`(u_1, u_2) \in [0, 1]^2` And its generator is: .. math:: \varphi(t) = (-\log(t))^{\theta} See also -------- ArchimedeanCopula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.GumbelCopula(2.5) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::GumbelCopula::getTheta "Get the parameter :math:`\theta`. Returns ------- theta : float Parameter :math:`\theta` of the copula." // --------------------------------------------------------------------- %feature("docstring") OT::GumbelCopula::setTheta "Set the parameter :math:`\theta`. Parameters ---------- theta : float, :math:`\theta \geq 1` Parameter :math:`\theta` of the copula." openturns-1.9/python/src/GumbelFactory.i000066400000000000000000000004161307543307100204510ustar00rootroot00000000000000// SWIG file GumbelFactory.i %{ #include "openturns/GumbelFactory.hxx" %} %include GumbelFactory_doc.i %include openturns/GumbelFactory.hxx namespace OT { %extend GumbelFactory { GumbelFactory(const GumbelFactory & other) { return new OT::GumbelFactory(other); } } } openturns-1.9/python/src/GumbelFactory_doc.i.in000066400000000000000000000007431307543307100217060ustar00rootroot00000000000000%feature("docstring") OT::GumbelFactory "Gumbel factory. Available constructor: GumbelFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle\Hat{\alpha} =\frac{\pi}{\Hat{\sigma}_x\sqrt{6}}\\ \displaystyle\Hat{\beta} =\bar{x}_n-\frac{\gamma\sqrt{6}}{\pi}\Hat{\sigma}_x\\ \end{eqnarray*} with :math:`\gamma \simeq 0.57721` as Euler's constant. See also -------- DistributionFactory, Gumbel" openturns-1.9/python/src/GumbelMuSigma.i000066400000000000000000000004151307543307100204030ustar00rootroot00000000000000// SWIG file GumbelMuSigma.i %{ #include "openturns/GumbelMuSigma.hxx" %} %include GumbelMuSigma_doc.i %include openturns/GumbelMuSigma.hxx namespace OT{ %extend GumbelMuSigma { GumbelMuSigma(const GumbelMuSigma & other) { return new OT::GumbelMuSigma(other); } } } openturns-1.9/python/src/GumbelMuSigma_doc.i.in000066400000000000000000000016521307543307100216410ustar00rootroot00000000000000%feature("docstring") OT::GumbelMuSigma "Gumbel distribution parameters. Available constructors: GumbelMuSigma(*mu=* :math:`\gamma` *, sigma=* :math:`\pi/\sqrt{6}`) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. Notes ----- The native parameters are defined as follows: .. math:: \alpha &= \frac{\pi}{\sigma \sqrt{6}} \\ \beta &= \mu - \frac{\gamma \sigma \sqrt{6}}{\pi} where :math:`\gamma` is the Euler-Mascheroni constant. See also -------- Gumbel Examples -------- Create the parameters of the Gumbel distribution: >>> import openturns as ot >>> parameters = ot.GumbelMuSigma(1.5, 1.3) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [0.986577,0.914931] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 0 1 ] [ -0.758905 -0.450053 ]]" openturns-1.9/python/src/Gumbel_doc.i.in000066400000000000000000000075021307543307100203560ustar00rootroot00000000000000%feature("docstring") OT::Gumbel "Gumbel distribution. Available constructors: Gumbel(*alpha=1.0, beta=0.0*) Parameters ---------- alpha : float scale parameter :math:`\alpha > 0`. beta : float location parameter :math:`\beta`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \alpha \exp\left[- \alpha (x - \beta) - \exp\left(- \alpha (x - \beta)\right)\right], \quad x \in \Rset with :math:`\alpha > 0` and :math:`\beta \in \Rset`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \beta + \frac{\gamma}{\alpha} \\ \Var{X} & = & \frac{\pi^2}{6 \alpha^2} \end{eqnarray*} where :math:`\gamma` is the Euler-Mascheroni constant. It is possible to create a Gumbel distribution from the alternative parametrizations :math:`(\mu, \sigma)`: see :class:`~openturns.GumbelMuSigma` or :math:`(a,b)`: see :class:`~openturns.GumbelAB`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(\alpha, \beta)`. Examples -------- Create a distribution in its native parameters :math:`(\alpha, \beta)`: >>> import openturns as ot >>> myDist = ot.Gumbel(1.0, 0.0) Create a it with the alternative parametrization :math:`(\mu, \sigma)`: >>> myDist2 = ot.Gumbel() >>> myDist2.setParameter(ot.GumbelMuSigma()([0.58, 1.28])) Create a it with the alternative parametrization :math:`(a,b)`: >>> myDist3 = ot.Gumbel() >>> myDist3.setParameter(ot.GumbelAB()([0.0, 1.0])) Create it from :math:`(\mu, \sigma)` and keep that parametrization for the remaining study: >>> myParam = ot.GumbelMuSigma(0.58, 1.28) >>> myDist4 = ot.ParametrizedDistribution(myParam) Create it from :math:`(a,b)` and keep that parametrization for the remaining study: >>> myParam = ot.GumbelAB(0.0, 1.0) >>> myDist5 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::getAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Returns ------- alpha : float Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::getBeta "Accessor to the distribution's location parameter :math:`\beta`. Returns ------- beta : float Location parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float, :math:`\sigma > 0` Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::setAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Parameters ---------- alpha : float, :math:`\alpha > 0` Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::setBeta "Accessor to the distribution's scale parameter :math:`\beta`. Parameters ---------- beta : float, :math:`\beta \in \Rset` Location parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Gumbel::setMuSigma "Accessor to the distribution's mean and standard deviation. Parameters ---------- mu : float Mean. sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/HMatrix.i000066400000000000000000000050631307543307100172650ustar00rootroot00000000000000// SWIG file HMatrix.i %{ #include "openturns/HMatrix.hxx" #include "openturns/PythonWrappingFunctions.hxx" class PythonHMatrixRealAssemblyFunction : public OT::HMatrixRealAssemblyFunction { public: PythonHMatrixRealAssemblyFunction(PyObject * pyObj) : pyObj_(pyObj) { if (!PyCallable_Check(pyObj)) { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } virtual OT::Scalar operator() (OT::UnsignedInteger i, OT::UnsignedInteger j) const { OT::ScopedPyObjectPointer index1(OT::convert< OT::UnsignedInteger, OT::_PyInt_ >(i)); OT::ScopedPyObjectPointer index2(OT::convert< OT::UnsignedInteger, OT::_PyInt_ >(j)); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs(pyObj_, index1.get(), index2.get(), NULL)); OT::Scalar value = OT::convert(result.get()); return value; } private: PyObject * pyObj_; }; class PythonHMatrixTensorRealAssemblyFunction : public OT::HMatrixTensorRealAssemblyFunction { public: PythonHMatrixTensorRealAssemblyFunction(PyObject * pyObj, const OT::UnsignedInteger outputDimension) : HMatrixTensorRealAssemblyFunction(outputDimension), pyObj_(pyObj) { if (!PyCallable_Check(pyObj)) { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } virtual void compute(OT::UnsignedInteger i, OT::UnsignedInteger j, OT::Matrix* localValues) const { OT::ScopedPyObjectPointer index1(OT::convert< OT::UnsignedInteger, OT::_PyInt_ >(i)); OT::ScopedPyObjectPointer index2(OT::convert< OT::UnsignedInteger, OT::_PyInt_ >(j)); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs(pyObj_, index1.get(), index2.get(), NULL)); OT::Matrix value(OT::convert(result.get())); *localValues = value; } private: PyObject * pyObj_; }; %} %include HMatrix_doc.i %ignore OT::HMatrix::assemble; %template(HMatrixImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %template(pairlonglong) std::pair< size_t, size_t >; %include openturns/HMatrix.hxx namespace OT { %extend HMatrix { HMatrix(const HMatrix & other) { return new OT::HMatrix(other); } void assembleReal(PyObject * callable, char symmetry) { PythonHMatrixRealAssemblyFunction f(callable); self->assemble(f, symmetry); } void assembleTensor(PyObject * callable, const UnsignedInteger outputDimension, char symmetry) { PythonHMatrixTensorRealAssemblyFunction f(callable, outputDimension); self->assemble(f, symmetry); } } // HMatrix } // OT openturns-1.9/python/src/HMatrixFactory.i000066400000000000000000000004261307543307100206130ustar00rootroot00000000000000// SWIG file HMatrixFactory.i %{ #include "openturns/HMatrixFactory.hxx" %} %include HMatrixFactory_doc.i %include openturns/HMatrixFactory.hxx namespace OT { %extend HMatrixFactory { HMatrixFactory(const HMatrixFactory & other) { return new OT::HMatrixFactory(other); } } } openturns-1.9/python/src/HMatrixFactory_doc.i.in000066400000000000000000000015601307543307100220450ustar00rootroot00000000000000%feature("docstring") OT::HMatrixFactory "Empty HMatrix builder. See also -------- HMatrix" // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixFactory::build "Create the compressed skeleton representation. Parameters ---------- sample : 2-d sequence of float Vertex locations outputDimension : int Number of degrees of freedom by vertex location symmetric : bool Whether matrix is symmetric. parameters : :class:`~openturns.HMatrixParameters` User-defined settings for hmatrix Returns ------- mat : :class:`~openturns.HMatrix` The compressed representation." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixFactory::IsAvailable "Ask whether hmat support is available. Returns ------- available : bool Whether hmat support is enabled." openturns-1.9/python/src/HMatrixImplementation.i000066400000000000000000000005161307543307100221710ustar00rootroot00000000000000// SWIG file HMatrixImplementation.i %{ #include "openturns/HMatrixImplementation.hxx" %} %include HMatrixImplementation_doc.i %include openturns/HMatrixImplementation.hxx namespace OT { %extend HMatrixImplementation { HMatrixImplementation(const HMatrixImplementation & other) { return new OT::HMatrixImplementation(other); } } } openturns-1.9/python/src/HMatrixImplementation_doc.i.in000066400000000000000000000234371307543307100234320ustar00rootroot00000000000000%define OT_HMatrix_doc "Hierarchical matrices (or HMatrix) are a compressed representation of dense matrices. In many applications, matrix coefficients represent an interaction between two degrees of freedom; when these interactions are smooth, it is possible to approximate sub-blocks by a local low-rank approximation B =~ UV^T where B has dimension (m,n), U (m,k), and V (n,k). Of course, this is interesting only if k is much lower than m and n. In order to obtain this compressed representation, several different steps must be performed: 1. Clustering: creation of rows and columns cluster trees Vertices where interactions are computed are reordered to improve locality. A binary space partition algorithm is used to recursively divide vertex set. Root cell contains all vertices. At each recursion step, a cell is divided into two new cells until it contains less than a given number of vertices. Space partition is performed orthogonally to original axis, by cutting its longest dimension. * The 'median' clustering algorithm divides a cell into two cells containing the same number of degrees of freedom. * The 'geometric' clustering algorithm divides a cell into two cells of the same geometric size * The 'hybrid' clustering algorithm is a mix. It first performs a 'median' bisection; if volumes of these new cells are very different, a 'geometric' clustering is performed instead. 2. Admissibility: creation of an empty HMatrix structure The first step created a full binary tree for rows and columns degrees of freedom. We will now create a hierarchical representation of our matrix by checking whether some blocks can be replaced by low-rank approximations. The whole matrix represents the interactions of all rows degrees of freedom against all columns degrees of freedom. It can not be approximated by a low-rank approximation, and thus it is replaced by 4 blocks obtained by considering interactions between rows and columns children nodes. This operation is performed recursively. At each step, we compute axis aligned bounding boxes rows_bbox and cols_bbox: if min(diameter(rows_bbox), diameter(cols_bbox)) <= eta*distance(rows_bbox, cols_bbox) then we consider that interaction between rows and columns degrees of freedom can have a local low-rank approximation, and recursion is stopped. Otherwise, we recurse until bottom cluster tree is reached. The whole matrix is thus represented by a 4-tree where leaves will contain either low-rank approximation or full blocks. The eta parameter is called the admissibility factor, and it can be modified. 3. Assembly: coefficients computations The hierarchical structure of the matrix has been computed during step 2. To compute coefficients, we call the assembleReal method and provide a callable to compute interaction between two nodes. Full blocks are computed by calling this callable for the whole block. If compression method is 'SVD', low-rank approximation is computed by first computing the whole block, then finding its singular value decomposition, and rank is truncated so that error does not exceed assemblyEpsilon. This method is precise, but very costly. If compression method is a variant of ACA, only few rows and columns are computed. This is much more efficient, but error may be larger than expected on some problems. 4. Matrix computations Once an HMatrix is computed, usual linear algebra operations can be performed. Matrix can be factorized in-place, in order to solve systems. Or we can compute its product by a matrix or vector. But keep in mind that rows and columns are reordered internally, and thus results may differ sensibly from standard dense representation (for instance when computing a Cholesky or LU decomposition). See also -------- HMatrixFactory, HMatrixParameters" %enddef %feature("docstring") OT::HMatrixImplementation OT_HMatrix_doc // --------------------------------------------------------------------- %define OT_HMatrix_getNbColumns_doc "Accessor to the number of columns. Returns ------- nbColumns : int Number of columns." %enddef %feature("docstring") OT::HMatrixImplementation::getNbColumns OT_HMatrix_getNbColumns_doc // --------------------------------------------------------------------- %define OT_HMatrix_getNbRows_doc "Accessor to the number of rows. Returns ------- nbRows : int Number of rows." %enddef %feature("docstring") OT::HMatrixImplementation::getNbRows OT_HMatrix_getNbRows_doc // --------------------------------------------------------------------- %define OT_HMatrix_norm_doc "Compute norm value. Returns ------- norm : float Frobenius norm." %enddef %feature("docstring") OT::HMatrixImplementation::norm OT_HMatrix_norm_doc // --------------------------------------------------------------------- %define OT_HMatrix_transpose_doc "Transpose matrix in-place." %enddef %feature("docstring") OT::HMatrixImplementation::transpose OT_HMatrix_transpose_doc // --------------------------------------------------------------------- %define OT_HMatrix_factorize_doc "Factorize matrix. Parameters ---------- method : str Factorization method, either one of: LDLt, LLt or LU" %enddef %feature("docstring") OT::HMatrixImplementation::factorize OT_HMatrix_factorize_doc // --------------------------------------------------------------------- %define OT_HMatrix_dump_doc "Save matrix to a file. Parameters ---------- fileName : str File name to save to." %enddef %feature("docstring") OT::HMatrixImplementation::dump OT_HMatrix_dump_doc // --------------------------------------------------------------------- %define OT_HMatrix_getDiagonal_doc "Diagonal values accessor. Returns ------- diag : :class:`~openturns.Point` Diagonal values." %enddef %feature("docstring") OT::HMatrixImplementation::getDiagonal OT_HMatrix_getDiagonal_doc // --------------------------------------------------------------------- %define OT_HMatrix_solve_doc "Solve linear system op(A)*x=b, after A has been factorized. Parameters ---------- b : sequence of float or :class:`~openturns.Matrix` Second term of the equation, vector or matrix. trans : bool Whether to solve the equation with A (False) or A^t (True). Defaults to False. Returns ------- x : :class:`~openturns.Point` or :class:`~openturns.Matrix` Equation solution, vector or matrix." %enddef %feature("docstring") OT::HMatrixImplementation::solve OT_HMatrix_solve_doc // --------------------------------------------------------------------- %define OT_HMatrix_solveLower_doc "Solve lower linear system op(L)*x=b, after A has been factorized. Parameters ---------- b : sequence of float or :class:`~openturns.Matrix` Second term of the equation, vector or matrix. trans : bool Whether to solve the equation with L (False) or L^t (True). Defaults to False. Returns ------- x : :class:`~openturns.Point` or :class:`~openturns.Matrix` Equation solution, vector or matrix." %enddef %feature("docstring") OT::HMatrixImplementation::solveLower OT_HMatrix_solveLower_doc // --------------------------------------------------------------------- %define OT_HMatrix_compressionRatio_doc "Compression ratio accessor. Returns ------- ratio : 2-tuple of int Numbers of elements in the compressed and uncompressed forms." %enddef %feature("docstring") OT::HMatrixImplementation::compressionRatio OT_HMatrix_compressionRatio_doc // --------------------------------------------------------------------- %define OT_HMatrix_fullrkRatio_doc "Block ratio accessor. Returns ------- ratio : 2-tuple of int Numbers of elements in full blocks and low rank blocks." %enddef %feature("docstring") OT::HMatrixImplementation::fullrkRatio OT_HMatrix_fullrkRatio_doc // --------------------------------------------------------------------- %define OT_HMatrix_scale_doc "Scale matrix in-place A=alpha*A. Parameters ---------- alpha : float Coefficient." %enddef %feature("docstring") OT::HMatrixImplementation::scale OT_HMatrix_scale_doc // --------------------------------------------------------------------- %define OT_HMatrix_gemv_doc "Multiply vector in-place y=alpha*op(A)*x+beta*y. Parameters ---------- trans : str Whether to use A or A^t: either N or T. alpha : float Coefficient x : sequence of float Vector to multiply. beta : float Coefficient. y : :class:`~openturns.Point` Vector multiplied in-place." %enddef %feature("docstring") OT::HMatrixImplementation::gemv OT_HMatrix_gemv_doc // --------------------------------------------------------------------- %define OT_HMatrix_gemm_doc "Multiply matrix in-place self=alpha*op(A)*op(B)+beta*self. Parameters ---------- transA : str Whether to use A or A^t: either N or T. transB : str Whether to use B or B^t: either N or T. alpha : float Coefficient a : :class:`~openturns.HMatrix` Multiplied matrix A. b : :class:`~openturns.HMatrix` Multiplied matrix B. beta : float Coefficient." %enddef %feature("docstring") OT::HMatrixImplementation::gemm OT_HMatrix_gemm_doc // --------------------------------------------------------------------- %define OT_HMatrix_assembleReal_doc "Assemble matrix. Parameters ---------- f : assembly function Callable that takes i,j int parameters and returns a float symmetry : str Symmetry flag, either N or L" %enddef %feature("docstring") OT::HMatrixImplementation::assembleReal OT_HMatrix_assembleReal_doc // --------------------------------------------------------------------- %define OT_HMatrix_assembleTensor_doc "Assemble matrix by block. Parameters ---------- f : assembly function Callable that takes i,j int parameters and returns a Matrix outputDimension : int Block dimension symmetry : str Symmetry flag, either N or L" %enddef %feature("docstring") OT::HMatrixImplementation::assembleTensor OT_HMatrix_assembleTensor_doc openturns-1.9/python/src/HMatrixParameters.i000066400000000000000000000005641307543307100213120ustar00rootroot00000000000000// SWIG file HMatrixParameters.i %{ #include "openturns/HMatrixParameters.hxx" %} %include HMatrixParameters_doc.i %ignore OT::HMatrixParameters::getCompressionMethodAsUnsignedInteger; %include openturns/HMatrixParameters.hxx namespace OT{ %extend HMatrixParameters { HMatrixParameters(const HMatrixParameters & other) { return new OT::HMatrixParameters(other); } } } openturns-1.9/python/src/HMatrixParameters_doc.i.in000066400000000000000000000056011307543307100225410ustar00rootroot00000000000000%feature("docstring") OT::HMatrixParameters "Parameters for HMatrix class. Notes ----- This class regroups the parameters used by :class:`~openturns.HMatrix` " // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::getAssemblyEpsilon "Return the epsilon used for the assembly. Returns ------- epsilon : float assembly epsilon for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::setAssemblyEpsilon "Set the epsilon used for the assembly. Parameters ---------- epsilon : float assembly epsilon for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::getRecompressionEpsilon "Return the epsilon used for the recompression. Returns ------- epsilon : float recompression epsilon for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::setRecompressionEpsilon "Set the epsilon used for the recompression. Parameters ---------- epsilon : float recompression epsilon for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::getAdmissibilityFactor "Return the admissibility factor used for cluster blocks. Returns ------- epsilon : float admissibility factor for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::setAdmissibilityFactor "Set the admissibility factor used for cluster blocks. Parameters ---------- epsilon : float admissibility factor for HMatrix." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::getClusteringAlgorithm "Return the clustering algorithm. Returns ------- algorithm : str clustering algorithm (either 'median', 'geometric' or 'hybrid')." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::setClusteringAlgorithm "Set the clustering algorithm. Parameters ---------- algorithm : str clustering algorithm (either 'median', 'geometric' or 'hybrid')." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::getCompressionMethod "Return the compression method. Returns ------- method : str compression method (either 'SVD', 'ACA full', 'ACA partial' or 'ACA+'." // --------------------------------------------------------------------- %feature("docstring") OT::HMatrixParameters::setCompressionMethod "Set the compression method. Parameters ---------- method : str compression method (either 'SVD', 'ACA full', 'ACA partial' or 'ACA+'." // --------------------------------------------------------------------- openturns-1.9/python/src/HMatrix_doc.i.in000066400000000000000000000022071307543307100205140ustar00rootroot00000000000000%feature("docstring") OT::HMatrix OT_HMatrix_doc %feature("docstring") OT::HMatrix::getDiagonal OT_HMatrix_getDiagonal_doc %feature("docstring") OT::HMatrix::dump OT_HMatrix_dump_doc %feature("docstring") OT::HMatrix::transpose OT_HMatrix_transpose_doc %feature("docstring") OT::HMatrix::norm OT_HMatrix_norm_doc %feature("docstring") OT::HMatrix::getNbRows OT_HMatrix_getNbRows_doc %feature("docstring") OT::HMatrix::getNbColumns OT_HMatrix_getNbColumns_doc %feature("docstring") OT::HMatrix::factorize OT_HMatrix_factorize_doc %feature("docstring") OT::HMatrix::solve OT_HMatrix_solve_doc %feature("docstring") OT::HMatrix::solveLower OT_HMatrix_solveLower_doc %feature("docstring") OT::HMatrix::compressionRatio OT_HMatrix_compressionRatio_doc %feature("docstring") OT::HMatrix::fullrkRatio OT_HMatrix_fullrkRatio_doc %feature("docstring") OT::HMatrix::scale OT_HMatrix_scale_doc %feature("docstring") OT::HMatrix::gemv OT_HMatrix_gemv_doc %feature("docstring") OT::HMatrix::gemm OT_HMatrix_gemm_doc %feature("docstring") OT::HMatrix::assembleReal OT_HMatrix_assembleReal_doc %feature("docstring") OT::HMatrix::assembleTensor OT_HMatrix_assembleTensor_doc openturns-1.9/python/src/HaarWaveletFactory.i000066400000000000000000000004651307543307100214450ustar00rootroot00000000000000// SWIG file HaarWaveletFactory.i %{ #include "openturns/HaarWaveletFactory.hxx" %} %include HaarWaveletFactory_doc.i %include openturns/HaarWaveletFactory.hxx namespace OT{ %extend HaarWaveletFactory { HaarWaveletFactory(const HaarWaveletFactory & other) { return new OT::HaarWaveletFactory(other); } } } openturns-1.9/python/src/HaarWaveletFactory_doc.i.in000066400000000000000000000010631307543307100226720ustar00rootroot00000000000000%define OT_HaarWaveletFactory_doc "Haar wavelet function factory. Generates the Haar basis defined as follows: .. math:: \begin{array}{lcl} \psi_0(x) & = & \fcar{[0, 1]}{x} \\ \psi_n(x) & = & \frac{1}{2^{j/2}}\left[\fcar{[\frac{k}{2^j},\frac{k+1/2}{2^j}]}{x}-\fcar{[\frac{k+1/2}{2^j},\frac{k+1}{2^j}]}{x}\right] \end{array} where :math:`n = 2^j + k`, :math:`0 \leq k < 2^j`, :math:`0 \leq j`. See also -------- OrthogonalUniVariatePolynomialFunctionFactory" %enddef %feature("docstring") OT::HaarWaveletFactory OT_HaarWaveletFactory_doc openturns-1.9/python/src/HaltonSequence.i000066400000000000000000000004251307543307100206240ustar00rootroot00000000000000// SWIG file HaltonSequence.i %{ #include "openturns/HaltonSequence.hxx" %} %include HaltonSequence_doc.i %include openturns/HaltonSequence.hxx namespace OT{ %extend HaltonSequence { HaltonSequence(const HaltonSequence & other) { return new OT::HaltonSequence(other); } } } openturns-1.9/python/src/HaltonSequence_doc.i.in000066400000000000000000000006671307543307100220660ustar00rootroot00000000000000%feature("docstring") OT::HaltonSequence "Halton sequence. Available constructors: HaltonSequence(*dimension=1*) Parameters ---------- dimension : positive int Dimension of the points. Examples -------- >>> import openturns as ot >>> sequence = ot.HaltonSequence(2) >>> print(sequence.generate(5)) 0 : [ 0.5 0.333333 ] 1 : [ 0.25 0.666667 ] 2 : [ 0.75 0.111111 ] 3 : [ 0.125 0.444444 ] 4 : [ 0.625 0.777778 ]"openturns-1.9/python/src/Hamming.i000066400000000000000000000003401307543307100172620ustar00rootroot00000000000000// SWIG file Hamming.i %{ #include "openturns/Hamming.hxx" %} %include Hamming_doc.i %include openturns/Hamming.hxx namespace OT { %extend Hamming { Hamming(const Hamming & other) { return new OT::Hamming(other); } } } openturns-1.9/python/src/Hamming_doc.i.in000066400000000000000000000010111307543307100205100ustar00rootroot00000000000000%feature("docstring") OT::Hamming "Hamming filtering windows. Available constructors: Hamming() Notes ----- The Hamming windows is implemented using the formula: .. math:: w(t) = C(\alpha - (1-\alpha)\cos(2\pi t))\fcar{[0,1]}{t} with :math:`C = \frac{1}{\alpha^2 + (1-\alpha)^2/2}` and :math:`\alpha=25/46`. The value of :math:`\alpha` minimizes the amplitude of the first side lobe of its Fourier transform. The normalization constant :math:`C` is such that :math:`\int_{0}^{1} w(t)^2\di{t} = 1`. " openturns-1.9/python/src/Hanning.i000066400000000000000000000003401307543307100172640ustar00rootroot00000000000000// SWIG file Hanning.i %{ #include "openturns/Hanning.hxx" %} %include Hanning_doc.i %include openturns/Hanning.hxx namespace OT { %extend Hanning { Hanning(const Hanning & other) { return new OT::Hanning(other); } } } openturns-1.9/python/src/Hanning_doc.i.in000066400000000000000000000003711307543307100205220ustar00rootroot00000000000000%feature("docstring") OT::Hanning "Hanning filtering windows. Available constructors: Hanning() Notes ----- The Hanning windows is implemented using the formula: .. math:: w(t) = \sqrt{\dfrac{8}{3}} \sin(\pi t)^2\fcar{[0,1]}{t} " openturns-1.9/python/src/HaselgroveSequence.i000066400000000000000000000004651307543307100215020ustar00rootroot00000000000000// SWIG file HaselgroveSequence.i %{ #include "openturns/HaselgroveSequence.hxx" %} %include HaselgroveSequence_doc.i %include openturns/HaselgroveSequence.hxx namespace OT{ %extend HaselgroveSequence { HaselgroveSequence(const HaselgroveSequence & other) { return new OT::HaselgroveSequence(other); } } } openturns-1.9/python/src/HaselgroveSequence_doc.i.in000066400000000000000000000014611307543307100227310ustar00rootroot00000000000000%feature("docstring") OT::HaselgroveSequence "Haselgrove sequence. Available constructors: HaselgroveSequence(*dimension=1*) HaselgroveSequence(*base*) Parameters ---------- dimension : positive int Dimension of the points. base : sequence of positive float Sequence of positive real values linearly independent over the integer ring, i.e. no linear combination with integer coefficients of these values can be zero excepted if all the coefficients are zero. The dimension of the sequence is given by the dimension of the base. Examples -------- >>> import openturns as ot >>> sequence = ot.HaselgroveSequence(2) >>> print(sequence.generate(5)) 0 : [ 0.414214 0.732051 ] 1 : [ 0.828427 0.464102 ] 2 : [ 0.242641 0.196152 ] 3 : [ 0.656854 0.928203 ] 4 : [ 0.0710678 0.660254 ]"openturns-1.9/python/src/HermiteFactory.i000066400000000000000000000004261307543307100206340ustar00rootroot00000000000000// SWIG file HermiteFactory.i %{ #include "openturns/HermiteFactory.hxx" %} %include HermiteFactory_doc.i %include openturns/HermiteFactory.hxx namespace OT { %extend HermiteFactory { HermiteFactory(const HermiteFactory & other) { return new OT::HermiteFactory(other); } } } openturns-1.9/python/src/HermiteFactory_doc.i.in000066400000000000000000000016501307543307100220660ustar00rootroot00000000000000%feature("docstring") OT::HermiteFactory "Hermite specific orthonormal univariate polynomial family. For the :class:`~openturns.Normal` distribution. Available constructor: HermiteFactory() Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Hermite polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle \frac{1}{\sqrt{i + 1}} \\ b_i & = & 0 \\ c_i & = & \displaystyle - \sqrt{\frac{i}{i + 1}} \end{array}, \quad 1 < i See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 X -0.707107 + 0.707107 * X^2" openturns-1.9/python/src/HermitianMatrix.i000066400000000000000000000016501307543307100210140ustar00rootroot00000000000000// SWIG file HermitianMatrix.i %{ #include "openturns/HermitianMatrix.hxx" %} %include HermitianMatrix_doc.i %include openturns/HermitianMatrix.hxx %pythoncode %{ def HermitianMatrix___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.checkHermitian() return super(HermitianMatrix, self).__getattribute__(name) HermitianMatrix.__getattribute__ = HermitianMatrix___getattribute__ %} namespace OT { %extend HermitianMatrix { HermitianMatrix(PyObject * pyObj) { return new OT::HermitianMatrix( OT::convert(pyObj) ); } OTComplexMatrixGetAccessors() HermitianMatrix __rmul__(Complex s) { return s * (*self); } ComplexMatrix __rmul__(const ComplexMatrix & m) { return m * (*self); } #if SWIG_VERSION < 0x030011 HermitianMatrix __truediv__(Complex s) { return (*self) / s; } #endif } // HermitianMatrix } // OT openturns-1.9/python/src/HermitianMatrix_doc.i.in000066400000000000000000000023161307543307100222460ustar00rootroot00000000000000%feature("docstring") OT::HermitianMatrix "Hermitian Matrix. Available constructors: HermitianMatrix(*dim*) Parameters ---------- dim : integer The dimension of the Hermitian matrix (square matrix with *dim* rows and *dim* columns). See also -------- ComplexMatrix Notes ----- The Hermitian matrix is filled with :math:`(0, 0)`. It is not possible to fill the matrix from a collection of complex values (to be done later)." // --------------------------------------------------------------------- %feature("docstring") OT::HermitianMatrix::computeCholesky "Compute the Cholesky factor. Returns ------- G : :class:`~openturns.ComplexMatrix` The Cholesky factor :math:`\mat{G}`, i.e. the complex matrix such as :math:`\mat{G} \times \Tr{\mat{G}}` is the initial matrix." // --------------------------------------------------------------------- %feature("docstring") OT::HermitianMatrix::getDimension "Accessor to the matrix dimension. Returns ------- dim : integer The dimension of the Hermitian matrix." // --------------------------------------------------------------------- %feature("docstring") OT::HermitianMatrix::checkHermitian "Check if the internal representation is really hermitian."openturns-1.9/python/src/HessianImplementation.i000066400000000000000000000005161307543307100222070ustar00rootroot00000000000000// SWIG file HessianImplementation.i %{ #include "openturns/HessianImplementation.hxx" %} %include HessianImplementation_doc.i %include openturns/HessianImplementation.hxx namespace OT { %extend HessianImplementation { HessianImplementation(const HessianImplementation & other) { return new OT::HessianImplementation(other); } } } openturns-1.9/python/src/HessianImplementation_doc.i.in000066400000000000000000000054241307543307100234440ustar00rootroot00000000000000%feature("docstring") OT::HessianImplementation "Numerical math hessian implementation. See also -------- Function, GradientImplementation Notes ----- This object is the result of the method *getHessian* of a :class:`~openturns.Function`." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::getCallsNumber "Accessor to the number of times the hessian has been called. Returns ------- calls_number : int Integer that counts the number of times the hessian has been called since its creation." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::getInputDimension "Accessor to the number of the inputs. Returns ------- number_inputs : int Number of inputs." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::getOutputDimension "Accessor to the number of the outputs. Returns ------- number_outputs : int Number of outputs." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::getMarginal "Accessor to the hessian implementation of a specific output. Parameters ---------- i : integer Integer corresponding to the output (Care: it starts at 0). indices : sequence of integer The set of indices for which the outputs are extracted. Returns ------- hessianImplementation : :class:`~openturns.HessianImplementation` A hessian implementation restricted to its compenents functions which indices are *i* or *indices*." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::hessian "Return the Jacobian transposed matrix of the implementation at a point. Parameters ---------- point : sequence of float Point where the Jacobian transposed matrix is calculated. Returns ------- hessian : :class:`~openturns.Matrix` The Jacobian transposed matrix of the function at *point*." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::isActualImplementation "Accessor to the validity flag. Returns ------- is_impl : bool Whether the implementation is valid." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::getParameter "Accessor to the parameter values. Returns ------- parameter : :class:`~openturns.Point` The parameter values." // --------------------------------------------------------------------- %feature("docstring") OT::HessianImplementation::setParameter "Accessor to the parameter values. Parameters ---------- parameter : sequence of float The parameter values." openturns-1.9/python/src/Histogram.i000066400000000000000000000003571307543307100176470ustar00rootroot00000000000000// SWIG file Histogram.i %{ #include "openturns/Histogram.hxx" %} %include Histogram_doc.i %include openturns/Histogram.hxx namespace OT { %extend Histogram { Histogram(const Histogram & other) { return new OT::Histogram(other); } } } openturns-1.9/python/src/HistogramFactory.i000066400000000000000000000004461307543307100211760ustar00rootroot00000000000000// SWIG file HistogramFactory.i %{ #include "openturns/HistogramFactory.hxx" %} %include HistogramFactory_doc.i %include openturns/HistogramFactory.hxx namespace OT { %extend HistogramFactory { HistogramFactory(const HistogramFactory & other) { return new OT::HistogramFactory(other); } } } openturns-1.9/python/src/HistogramFactory_doc.i.in000066400000000000000000000002311307543307100224200ustar00rootroot00000000000000%feature("docstring") OT::HistogramFactory "Histogram factory. Available constructor: HistogramFactory() See also -------- DistributionFactory" openturns-1.9/python/src/HistogramPolynomialFactory.i000066400000000000000000000005661307543307100232450ustar00rootroot00000000000000// SWIG file HistogramPolynomialFactory.i %{ #include "openturns/HistogramPolynomialFactory.hxx" %} %include HistogramPolynomialFactory_doc.i %include openturns/HistogramPolynomialFactory.hxx namespace OT { %extend HistogramPolynomialFactory { HistogramPolynomialFactory(const HistogramPolynomialFactory & other) { return new OT::HistogramPolynomialFactory(other); } } } openturns-1.9/python/src/HistogramPolynomialFactory_doc.i.in000066400000000000000000000023421307543307100244710ustar00rootroot00000000000000%feature("docstring") OT::HistogramPolynomialFactory "Histogram specific orthonormal univariate polynomial family. For the :class:`~openturns.Histogram` distribution. Available constructor: HistogramPolynomialFactory(*first, width, height*) Parameters ---------- first : float Lower bound. width : positive sequence of float :math:`\ell_i` is the width of the class :math:`i`. height : positive sequence of float :math:`h_i` is the frequency of the class :math:`i`. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the HistogramPolynomial polynomials are computed from the recurrence of the associated monic polynomials (see :class:`~openturns.AdaptiveStieltjesAlgorithm`) but with an exact evaluation of the dot-products. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HistogramPolynomialFactory(1.0, [1.0, 2.0], [4.0, 2.0]) >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 -2.56273 + 1.13899 * X 7.80593 - 7.42767 * X + 1.5268 * X^2 " openturns-1.9/python/src/Histogram_doc.i.in000066400000000000000000000050131307543307100210730ustar00rootroot00000000000000%feature("docstring") OT::Histogram "Histogram distribution. Available constructors: Histogram(*first, l, h*) Parameters ---------- first : float Lower bound. width : positive sequence of float :math:`\ell_i` is the width of the class :math:`i`. height : positive sequence of float :math:`h_i` is the frequency of the class :math:`i`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \sum_{i=1}^{n}H_i\;\boldsymbol{1}_{[x_i,x_{i+1}]}(x) where :math:`H_i=h_i/S` is the relative frequency, with :math:`S=\sum_{i=1}^n h_i\,\ell_i` the total frequency of data. :math:`\ell_i = x_{i+1} - x_i , 1\leq i \leq n` and :math:`n` is the size of the width collection :math:`\ell`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{1}{2 \sum_{i=1}^n h_i\,\ell_i} \sum_{i=1}^n h_i\,\ell_i (x_{i+1} + x_i)\\ \Var{X} & = & \frac{1}{3 \sum_{i=1}^n h_i\,\ell_i} \sum_{i=1}^n h_i\,\ell_i (x_{i+1}^2 + x_i\,x_{i+1} + x_i^2) \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> l = [1.0, 0.7, 1.2, 0.9] >>> h = [0.5, 1.5, 3.5, 2.5] >>> distribution = ot.Histogram(-1.5, l, h)" // --------------------------------------------------------------------- %feature("docstring") OT::Histogram::getFirst "Accessor to the distribution's lower bound. Returns ------- first : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Histogram::getWidth "Accessor to the width. Returns ------- width : :class:`~openturns.Point` The collection of :math:`\ell_i`, the width of class `i`." // --------------------------------------------------------------------- %feature("docstring") OT::Histogram::getHeight "Accessor to the height. Returns ------- height : :class:`~openturns.Point` The collection of :math:`h_i`, the height of class `i`." // --------------------------------------------------------------------- %feature("docstring") OT::Histogram::setFirst "Accessor to the lower bound. Parameters ---------- first : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Histogram::setData "Accessor to the widths and heights. Parameters ---------- width : :class:`~openturns.Point` The collection of :math:`\ell_i`, the width of class `i`. height : :class:`~openturns.Point` The collection of :math:`h_i`, the height of class `i`." openturns-1.9/python/src/HistoryStrategy.i000066400000000000000000000005141307543307100210710ustar00rootroot00000000000000// SWIG file HistoryStrategy.i %{ #include "openturns/HistoryStrategy.hxx" %} %include HistoryStrategy_doc.i OTTypedInterfaceObjectHelper(HistoryStrategy) %include openturns/HistoryStrategy.hxx namespace OT{ %extend HistoryStrategy { HistoryStrategy(const HistoryStrategy & other) { return new OT::HistoryStrategy(other); } } } openturns-1.9/python/src/HistoryStrategyImplementation.i000066400000000000000000000006151307543307100240010ustar00rootroot00000000000000// SWIG file HistoryStrategyImplementation.i %{ #include "openturns/HistoryStrategyImplementation.hxx" %} %include HistoryStrategyImplementation_doc.i %include openturns/HistoryStrategyImplementation.hxx namespace OT{ %extend HistoryStrategyImplementation { HistoryStrategyImplementation(const HistoryStrategyImplementation & other) { return new OT::HistoryStrategyImplementation(other); } } } openturns-1.9/python/src/HistoryStrategyImplementation_doc.i.in000066400000000000000000000065671307543307100252470ustar00rootroot00000000000000%define OT_HistoryStrategy_doc "History storage strategy. Available constructors: HistoryStrategy() HistoryStrategy(*historyStrategyImp*) Parameters ---------- historyStrategyImp : HistoryStrategyImplementation An implementation of a history strategy which is provided by :class:`~openturns.Compact`, :class:`~openturns.Full`, :class:`~openturns.Last` or :class:`~openturns.Null` class. See also -------- Compact, Full, Last, Null Notes ----- In order to prevent a memory problem, the User has the possibility to choose the storage strategy used to save the numerical samples. Four strategies are proposed : - the :class:`~openturns.Null` strategy where nothing is stored. This class does not require to specify arguments. - the :class:`~openturns.Full` strategy where every point is stored. Be careful! The memory will be exhausted for huge samples. This class does not require to specify arguments. - the :class:`~openturns.Last` strategy where only the :math:`N` last points are stored, where :math:`N` is specified by the User. This class requires to specify the number of points to store. - the :class:`~openturns.Compact` strategy where a regularly spaced sub-sample is stored. The minimum size :math:`N` of the stored numerical sample is specified by the User. OpenTURNS proceeds as follows : 1. it stores the first :math:`2N` simulations : the size of the stored sample is :math:`2N`, 2. it selects only 1 out of 2 of the stored simulations : then the size of the stored sample decreases to :math:`N` (this is the *compact* step), 3. it stores the next :math:`N` simulations when selecting 1 out of 2 of the next simulations : the size of the stored sample is :math:`2N`, 4. it selects only 1 out of 2 of the stored simulations : then the size of the stored sample decreases to :math:`N`, 5. it stores the next :math:`N` simulations when selecting 1 out of 4 of the next simulations : the size of the stored sample is :math:`2N`, 6. then it keeps on until reaching the stopping criteria. The stored numerical sample will have a size within :math:`N` and :math:`2N`. This class requires to specify the number of points to store." %enddef %feature("docstring") OT::HistoryStrategyImplementation OT_HistoryStrategy_doc // --------------------------------------------------------------------- %define OT_HistoryStrategy_getSample_doc "Accessor to the stored sample. Returns ------- sample : :class:`~openturns.Sample` Numerical sample which is the collection of points stored by the history strategy." %enddef %feature("docstring") OT::HistoryStrategyImplementation::getSample OT_HistoryStrategy_getSample_doc // --------------------------------------------------------------------- %define OT_HistoryStrategy_clear_doc "Clear the stored points. Notes ----- It erases the previously stored points" %enddef %feature("docstring") OT::HistoryStrategyImplementation::clear OT_HistoryStrategy_clear_doc // --------------------------------------------------------------------- %define OT_HistoryStrategy_store_doc "Store points or samples. Parameters ---------- data : sequence of float or 2-d sequence of float Point or sample to store. Notes ----- It adds a unique point or all the point of the sample in the natural order to the history." %enddef %feature("docstring") OT::HistoryStrategyImplementation::store OT_HistoryStrategy_store_doc openturns-1.9/python/src/HistoryStrategy_doc.i.in000066400000000000000000000006071307543307100223260ustar00rootroot00000000000000// HistoryStrategy docstrings are defined in HistoryStrategyImplementation_doc.i.in %feature("docstring") OT::HistoryStrategy OT_HistoryStrategy_doc %feature("docstring") OT::HistoryStrategy::getSample OT_HistoryStrategy_getSample_doc %feature("docstring") OT::HistoryStrategy::clear OT_HistoryStrategy_clear_doc %feature("docstring") OT::HistoryStrategy::store OT_HistoryStrategy_store_docopenturns-1.9/python/src/HyperbolicAnisotropicEnumerateFunction.i000066400000000000000000000007261307543307100256010ustar00rootroot00000000000000// SWIG file HyperbolicAnisotropicEnumerateFunction.i %{ #include "openturns/HyperbolicAnisotropicEnumerateFunction.hxx" %} %include HyperbolicAnisotropicEnumerateFunction_doc.i %include openturns/HyperbolicAnisotropicEnumerateFunction.hxx namespace OT { %extend HyperbolicAnisotropicEnumerateFunction { HyperbolicAnisotropicEnumerateFunction(const HyperbolicAnisotropicEnumerateFunction & other) { return new OT::HyperbolicAnisotropicEnumerateFunction(other); } } } openturns-1.9/python/src/HyperbolicAnisotropicEnumerateFunction_doc.i.in000066400000000000000000000055441307543307100270360ustar00rootroot00000000000000%feature("docstring") OT::HyperbolicAnisotropicEnumerateFunction "Hyperbolic and anisotropic enumerate function. Available constructors: HyperbolicAnisotropicEnumerateFunction(*dim*) HyperbolicAnisotropicEnumerateFunction(*dim, q*) HyperbolicAnisotropicEnumerateFunction(*weight*) HyperbolicAnisotropicEnumerateFunction(*weight, q*) Parameters ---------- dim : integer Dimension of the :class:`~openturns.EnumerateFunction`. *dim* must be equal to the dimension of the :class:`~openturns.OrthogonalBasis`. q : float Correspond to the q-quasi norm parameter. If not precised, :math:`q = 0.4`. weight : sequence of float Weights of the indices in each dimension. If not precised, all weights are equals to :math:`w_i = 1`. See also -------- EnumerateFunction, LinearEnumerateFunction Notes ----- The hyperbolic truncation strategy is inspired by the so-called sparsity-of- effects principle, which states that most models are principally governed by main effects and low-order interactions. Accordingly, one wishes to define an enumeration strategy which first selects those multi-indices related to main effects, i.e. with a reasonably small number of nonzero components, prior to selecting those associated with higher-order interactions. For any real number :math:`q \in ]0, 1]`, one defines the anisotropic hyperbolic norm of a multi-index :math:`a` by: .. math:: \| \vect{a} \|_{\vect{w}, q} = \left( \sum_{i=1}^{n_X} w_i a^q \right)^{1/q} where the :math:`w_i`'s are real positive numbers. This would lead to first select the basis polynomials depending on a specific subset of input variables. Examples -------- >>> import openturns as ot >>> # 4-dimensional case >>> enumerateFunction = ot.HyperbolicAnisotropicEnumerateFunction(2, 0.5) >>> for i in range(10): ... print(enumerateFunction(i)) [0,0] [1,0] [0,1] [2,0] [0,2] [3,0] [0,3] [1,1] [4,0] [0,4] " // --------------------------------------------------------------------- %feature("docstring") OT::HyperbolicAnisotropicEnumerateFunction::getQ "Accessor to the norm. Returns ------- q : float q-quasi norm parameter." // --------------------------------------------------------------------- %feature("docstring") OT::HyperbolicAnisotropicEnumerateFunction::getWeight "Accessor to the weights. Returns ------- w : :class:`~openturns.Point` Weights of the indices in each dimension." // --------------------------------------------------------------------- %feature("docstring") OT::HyperbolicAnisotropicEnumerateFunction::setQ "Accessor to the norm. Parameters ---------- q : float q-quasi norm parameter." // --------------------------------------------------------------------- %feature("docstring") OT::HyperbolicAnisotropicEnumerateFunction::setWeight "Accessor to the weights. Parameters ---------- w : sequence of float Weights of the indices in each dimension."openturns-1.9/python/src/HypothesisTest.i000066400000000000000000000002631307543307100207050ustar00rootroot00000000000000// SWIG file HypothesisTest.i %{ #include "openturns/HypothesisTest.hxx" %} %include HypothesisTest_doc.i %nodefaultctor HypothesisTest; %include openturns/HypothesisTest.hxx openturns-1.9/python/src/HypothesisTest_doc.i.in000066400000000000000000000434051307543307100221440ustar00rootroot00000000000000%feature("docstring") OT::HypothesisTest::ChiSquared "Test whether two discrete samples are independent. **Available usages**: HypothesisTest.ChiSquared(*firstSample, secondSample*) HypothesisTest.ChiSquared(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Pearson, HypothesisTest_Spearman Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distCol = [ot.Normal(), ot.Normal()] >>> distribution = ot.ComposedDistribution(distCol) >>> sample = distribution.getSample(30) >>> test_result = ot.HypothesisTest.ChiSquared(sample[:,0], sample[:,1]) >>> print(test_result) class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=true p-value threshold=0.05 p-value=0.237197 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::FullPearson "Test whether two discrete samples are independent. **Available usages**: HypothesisTest.FullPearson(*firstSample, secondSample*) HypothesisTest.FullPearson(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Pearson, HypothesisTest_PartialPearson Notes ----- The Full Pearson Test is the independence Pearson test between 2 samples : *firstSample* of dimension *n* and *secondSample* of dimension 1. If *firstSample[i]* is the numerical sample extracted from *firstSample* (:math:`i^{th}` coordinate of each point of the numerical sample), FullPearson performs the independence Pearson test simultaneously on *firstSample[i]* and secondSample. For all *i*, it is supposed that the couple (*firstSample[i]* and *secondSample*) is issued from a gaussian vector. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distCol = [ot.Normal()] * 3 >>> S = ot.CorrelationMatrix(3) >>> S[0, 2] = 0.9 >>> copula = ot.NormalCopula(S) >>> distribution = ot.ComposedDistribution(distCol, copula) >>> sample = distribution.getSample(30) >>> firstSample = sample[:, :2] >>> secondSample = sample[:, 2] >>> test_result = ot.HypothesisTest.FullPearson(firstSample, secondSample) >>> print(test_result) [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.05 p-value=7.23...e-14 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=true p-value threshold=0.05 p-value=0.895124 description=[]] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::FullRegression "Test whether two discrete samples are not linear. **Available usages**: HypothesisTest.FullRegression(*firstSample, secondSample*) HypothesisTest.FullRegression(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_PartialRegression, LinearModelTest_LinearModelFisher Notes ----- The Full Regression Test is used to check the quality of the linear regression model between two samples: *firstSample* of dimension *n* and *secondSample* of dimension 1. If *firstSample[i]* is the numerical sample extracted from *firstSample* (:math:`i^{th}` coordinate of each point of the numerical sample), FullRegression performs the linear regression test simultaneously on all *firstSample[i]* and *secondSample*. The linear regression test tests if the linear regression model between two scalar numerical samples is not significant. It is based on the deviation analysis of the regression. The Fisher distribution is used. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> dim = 3 >>> distCol = [ot.Normal()] * dim >>> S = ot.CorrelationMatrix(dim) >>> S[0, dim - 1] = 0.99 >>> copula = ot.NormalCopula(S) >>> distribution = ot.ComposedDistribution(distCol, copula) >>> sample = distribution.getSample(30) >>> firstSample = sample[:, :2] >>> secondSample = sample[:, 2] >>> test_result = ot.HypothesisTest.FullRegression(firstSample, secondSample) >>> print(test_result) [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.05 p-value=9.70282e-27 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.05 p-value=0.11352 description=[]]" // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::FullSpearman "Test whether two discrete samples are not monotonous. **Available usages**: HypothesisTest.FullSpearman(*firstSample, secondSample*) HypothesisTest.FullSpearman(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Spearman, HypothesisTest_PartialSpearman Notes ----- The Full Spearman Test is used to check hypothesis of non monotonous relation between two samples: *firstSample* of dimension *n* and *secondSample* of dimension 1. If *firstSample[i]* is the numerical sample extracted from *firstSample* (:math:`i^{th}` coordinate of each point of the numerical sample), FullSpearman performs the independence Spearman test simultaneously on all *firstSample[i]* and *secondSample*. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction(['x'], ['x', 'x^2']) >>> testedSample = func(sample) >>> test_result = ot.HypothesisTest.FullSpearman(testedSample, sample) >>> print(test_result) [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.05 p-value=0 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=true p-value threshold=0.05 p-value=0.44348 description=[]] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::PartialPearson "Test whether two discrete samples are independent. **Available usages**: HypothesisTest.PartialPearson(*firstSample, secondSample, selection*) HypothesisTest.PartialPearson(*firstSample, secondSample, selection, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. selection : sequence of integers, maximum integer value :math:`< n` List of indices selecting which subsets of the first sample will successively be tested with the second sample through the Pearson test. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Pearson, HypothesisTest_FullPearson Notes ----- The Partial Pearson Test is used to check the independence between two samples: *firstSample* of dimension *n* and *secondSample* of dimension 1. The parameter *selection* enables to select specific subsets of the *firstSample* to be tested. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distCol = [ot.Normal(), ot.Normal(), ot.Normal(), ot.Normal()] >>> S = ot.CorrelationMatrix(4) >>> S[0, 3] = 0.9 >>> copula = ot.NormalCopula(S) >>> distribution = ot.ComposedDistribution(distCol, copula) >>> sample = distribution.getSample(30) >>> firstSample = sample[:, :3] >>> secondSample = sample[:, 3] >>> test_result = ot.HypothesisTest.PartialPearson(firstSample, secondSample, [0, 2]) >>> print(test_result) [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.05 p-value=1.17002e-10 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=true p-value threshold=0.05 p-value=0.19193 description=[]] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::PartialRegression "Test whether two discrete samples are independent. **Available usages**: HypothesisTest.PartialRegression(*firstSample, secondSample, selection*) HypothesisTest.PartialRegression(*firstSample, secondSample, selection, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. selection : sequence of int, maximum integer value :math:`< n` List of indices selecting which subsets of the first sample will successively be tested with the second sample through the regression test. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_FullRegression, LinearModelTest_LinearModelFisher Notes ----- The Partial Regression Test is used to check the quality of the linear regression AnalyticalFmodel between two samples: *firstSample* of dimension *n* and *secondSample* of dimension 1. The parameter *selection* enables to select specific subsets of the *firstSample* to be tested. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> dim = 3 >>> distCol = [ot.Normal()] * dim >>> S = ot.CorrelationMatrix(dim) >>> S[0, dim - 1] = 0.99 >>> copula = ot.NormalCopula(S) >>> distribution = ot.ComposedDistribution(distCol, copula) >>> sample = distribution.getSample(30) >>> firstSample = sample[:, :2] >>> secondSample = sample[:, 2] >>> selection = [1] >>> test_result = ot.HypothesisTest.PartialRegression(firstSample, secondSample, selection) >>> print(test_result) [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.05 p-value=0.579638 description=[]]" // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::PartialSpearman "Test whether two discrete samples are not monotonous. **Available usages**: HypothesisTest_PartialSpearman(*firstSample, secondSample, selection*) HypothesisTest_PartialSpearman(*firstSample, secondSample, selection, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. selection : sequence of integers, maximum integer value :math:`< n` List of indices selecting which subsets of the first sample will successively be tested with the second sample through the Spearman test. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Spearman, HypothesisTest_FullSpearman Notes ----- The Partial Spearman Test is used to check hypothesis of non monotonous relation between two samples: *firstSample* of dimension *n* and *secondSample* of dimension 1. The parameter *selection* enables to select specific subsets of the *firstSample* to be tested. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction(['x'], ['x', 'x^2', 'x^3', 'sin(5*x)']) >>> testedSample = func(sample) >>> test_result = ot.HypothesisTest.PartialSpearman(testedSample, sample, [0,3]) >>> print(test_result) [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.05 p-value=0 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=true p-value threshold=0.05 p-value=0.57214 description=[]] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::Pearson "Test whether two discrete samples are independent. **Available usages**: HypothesisTest.Pearson(*firstSample, secondSample*) HypothesisTest.Pearson(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Smirnov, HypothesisTest_Spearman Notes ----- The Pearson Test is used to check whether two samples which are assumed to form a gaussian vector are independent (based on the evaluation of the linear correlation coefficient). Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distCol = [ot.Normal(), ot.Normal()] >>> firstSample = ot.Normal().getSample(30) >>> secondSample = ot.Normal().getSample(30) >>> test_result = ot.HypothesisTest.Pearson(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=true p-value threshold=0.05 p-value=0.984737 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::Smirnov "Test whether two samples follows the same distribution. **Available usages**: HypothesisTest.Smirnov(*firstSample, secondSample*) HypothesisTest.Smirnov(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Pearson, HypothesisTest_Spearman Notes ----- Smirnov's test is a tool that may be used to compare two samples :math:`\{x_1, \ldots, x_N\}` and :math:`\{x^{'}_1, \ldots, x^{'}_M\}` (of sizes not necessarily equal). The goal is to determine whether these two samples come from the same probability distribution or not. If this is the case, the two samples should be aggregated in order to increase the robustness of further statistical analyses. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distCol = [ot.Normal(), ot.Normal()] >>> firstSample = ot.Normal().getSample(30) >>> secondSample = ot.Normal().getSample(30) >>> test_result = ot.HypothesisTest.Smirnov(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=TwoSampleSmirnov binaryQualityMeasure=true p-value threshold=0.05 p-value=0.807963 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::HypothesisTest::Spearman "Test whether two discrete samples are not monotonous. **Available usages**: HypothesisTest.Spearman(*firstSample, secondSample*) HypothesisTest.Spearman(*firstSample, secondSample, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension :math:`n \geq 1`. secondSample : 2-d sequence of float Second tested sample, of dimension 1. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- HypothesisTest_Smirnov, HypothesisTest_Pearson Notes ----- The Spearman Test is used to check whether two scalar samples have a monotonous relation. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> firstSample = distribution.getSample(30) >>> func = ot.SymbolicFunction(['x'], ['x^2']) >>> secondSample = func(firstSample) >>> test_result = ot.HypothesisTest.Spearman(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=true p-value threshold=0.05 p-value=0.44348 description=[] " openturns-1.9/python/src/IdentityMatrix.i000066400000000000000000000010411307543307100206570ustar00rootroot00000000000000// SWIG file IdentityMatrix.i %{ #include "openturns/IdentityMatrix.hxx" %} %include IdentityMatrix_doc.i %include openturns/IdentityMatrix.hxx namespace OT { %extend IdentityMatrix { IdentityMatrix(const IdentityMatrix & other) { return new OT::IdentityMatrix(other); } PyObject * __setitem__(PyObject * args, Scalar val) { SWIG_exception_fail(SWIG_RuntimeError, "method IdentityMatrix___setitem__ is not available because these matrices are read-only"); return SWIG_Py_Void(); fail: return NULL; } } // IdentityMatrix } // OT openturns-1.9/python/src/IdentityMatrix_doc.i.in000066400000000000000000000004261307543307100221170ustar00rootroot00000000000000%feature("docstring") OT::IdentityMatrix "Identity matrix. Parameters ---------- size : int, :math:`n > 0`, optional Matrix size. Default is 1. Examples -------- Create a matrix >>> import openturns as ot >>> M = ot.IdentityMatrix(2) >>> print(M) [[ 1 0 ] [ 0 1 ]]" openturns-1.9/python/src/ImportanceSampling.i000066400000000000000000000004651307543307100215060ustar00rootroot00000000000000// SWIG file ImportanceSampling.i %{ #include "openturns/ImportanceSampling.hxx" %} %include ImportanceSampling_doc.i %include openturns/ImportanceSampling.hxx namespace OT{ %extend ImportanceSampling { ImportanceSampling(const ImportanceSampling & other) { return new OT::ImportanceSampling(other); } } } openturns-1.9/python/src/ImportanceSamplingExperiment.i000066400000000000000000000006061307543307100235440ustar00rootroot00000000000000// SWIG file ImportanceSamplingExperiment.i %{ #include "openturns/ImportanceSamplingExperiment.hxx" %} %include ImportanceSamplingExperiment_doc.i %include openturns/ImportanceSamplingExperiment.hxx namespace OT { %extend ImportanceSamplingExperiment { ImportanceSamplingExperiment(const ImportanceSamplingExperiment & other) { return new OT::ImportanceSamplingExperiment(other); } } } openturns-1.9/python/src/ImportanceSamplingExperiment_doc.i.in000066400000000000000000000040271307543307100247770ustar00rootroot00000000000000%feature("docstring") OT::ImportanceSamplingExperiment "Importance Sampling experiment. Available constructors: ImportanceSamplingExperiment(*distribution, size*) ImportanceSamplingExperiment(*distribution, importanceDistribution, size*) Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution :math:`\mu` with an independent copula used to generate the set of input data. size : positive int Number :math:`cardI` of points that will be generated in the experiment. importanceDistribution : :class:`~openturns.Distribution` Distribution :math:`p` according to which the points of the design of experiments will be generated with the Importance Sampling technique. Notes ----- ImportanceSamplingExperiment is a random weighted design of experiments. The :meth:`generate` method generates points :math:`(\Xi_i)_{i \in I}` independently from the distribution :math:`\mu`. When the :meth:`generate` method is recalled, the generated sample changes. The weights associated to the points are all equal to: :math:`\frac{1}{\Xi_i}\frac{\mu(\Xi_i)}{p(\Xi_i)}` See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) >>> importanceDistribution = ot.ComposedDistribution([ot.Uniform(0, 1)] * 2) >>> myPlane = ot.ImportanceSamplingExperiment(distribution, importanceDistribution, 5) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.629877 0.882805 ] 1 : [ 0.135276 0.0325028 ] 2 : [ 0.347057 0.969423 ] 3 : [ 0.92068 0.50304 ] 4 : [ 0.0632061 0.292757 ]" // --------------------------------------------------------------------- %feature("docstring") OT::WeightedExperiment::getImportanceDistribution "Accessor to the importance distribution. Returns ------- importanceDistribution : :class:`~openturns.Distribution` Distribution :math:`p` according to which the points of the design of experiments will be generated with the Importance Sampling technique." openturns-1.9/python/src/ImportanceSampling_doc.i.in000066400000000000000000000073451307543307100227440ustar00rootroot00000000000000%feature("docstring") OT::ImportanceSampling "Importance simulation. Available constructors: ImportanceSampling(*event=ot.Event(), importanceDistribution*) Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. importanceDistribution : :class:`~openturns.Distribution` Importance distribution of the Importance Sampling simulation method. Notes ----- Using the probability distribution of a random vector :math:`\vect{X}`, we seek to evaluate the following probability: .. math:: P_f = \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\vect{d}) \leq 0 \}}f_{\uX}(\ux)\di{\ux} = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}`. :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise. The main idea of the Importance Sampling method is to replace the initial probability distribution of the input variables by a more *efficient* one. *Efficient* means that more events will be counted in the failure domain :math:`\cD_f` and thus reduce the variance of the estimator of the probability of exceeding a threshold. Let :math:`\vect{Y}` be a random vector such that its probability density function :math:`f_{\vect{Y}}(\vect{y}) > 0` almost everywhere in the domain :math:`\cD_f`, .. math:: P_f &= \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\vect{d}) \leq 0 \}} f_{\uX}(\ux)\di{\ux} \\ &= \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\vect{d}) \leq 0 \}} \frac{f_{\uX}(\ux)}{f_{\vect{Y}}(\ux)}f_{\vect{Y}}(\ux)\di{\ux} The estimator built by Importance Sampling method is: .. math:: \widehat{P}_{f,IS} = \frac{1}{N} \sum_{i=1}^N \mathbf{1}_{\{g(\vect{Y}_{\:i}),\vect{d}) \leq 0 \}} \frac{f_{\uX}(\vect{Y}_{\:i})} {f_{\vect{Y}}(\vect{Y}_{\:i})} where: - :math:`N` is the total number of computations, - the random vectors :math:`\{\vect{Y}_i, i=1\hdots N\}` are independent, identically distributed and following the probability density function :math:`f_{\uY}`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> # We create a 'usual' RandomVector from the Distribution >>> vect = ot.RandomVector(myDistribution) >>> # We create a composite random vector >>> output = ot.RandomVector(myFunction, vect) >>> # We create an Event from this RandomVector >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create a ImportanceSampling algorithm >>> myImportance = ot.Normal([49.969, 1.84194, 10.4454, 4.66776], [1.0]*4, ot.IdentityMatrix(4)) >>> myAlgo = ot.ImportanceSampling(myEvent, myImportance) >>> myAlgo.setMaximumOuterSampling(150) >>> myAlgo.setBlockSize(4) >>> myAlgo.setMaximumCoefficientOfVariation(0.1) >>> # Perform the simulation >>> myAlgo.run() >>> print('Probability estimate=%.6f' % myAlgo.getResult().getProbabilityEstimate()) Probability estimate=0.153314" // --------------------------------------------------------------------- %feature("docstring") OT::ImportanceSampling::getImportanceDistribution "Get the importance distribution. Returns ------- importanceDistribution : :class:`~openturns.Distribution` Importance distribution of the Importance Sampling simulation method." openturns-1.9/python/src/IndependentCopula.i000066400000000000000000000004561307543307100213130ustar00rootroot00000000000000// SWIG file IndependentCopula.i %{ #include "openturns/IndependentCopula.hxx" %} %include IndependentCopula_doc.i %include openturns/IndependentCopula.hxx namespace OT { %extend IndependentCopula { IndependentCopula(const IndependentCopula & other) { return new OT::IndependentCopula(other); } } } openturns-1.9/python/src/IndependentCopula_doc.i.in000066400000000000000000000010041307543307100225330ustar00rootroot00000000000000%feature("docstring") OT::IndependentCopula "Independent copula. Available constructor: IndependentCopula(*n=1*) Parameters ---------- n : int, :math:`n \geq 1` Dimension of the copula. Notes ----- The Independent copula is defined by : .. math:: C(u_1, \cdots, u_n) = \prod_{i=1}^n u_i for :math:`u_i \in [0, 1]` See also -------- Copula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.IndependentCopula(3) Draw a sample: >>> sample = copula.getSample(5)" openturns-1.9/python/src/IndicatorEvaluation.i000066400000000000000000000004721307543307100216540ustar00rootroot00000000000000// SWIG file IndicatorEvaluation.i OTAutodoc(IndicatorEvaluation) %{ #include "openturns/IndicatorEvaluation.hxx" %} %include openturns/IndicatorEvaluation.hxx namespace OT { %extend IndicatorEvaluation { IndicatorEvaluation(const IndicatorEvaluation & other) { return new OT::IndicatorEvaluation(other); } } } openturns-1.9/python/src/IndicatorFunction.i000066400000000000000000000004561307543307100213340ustar00rootroot00000000000000// SWIG file IndicatorFunction.i %{ #include "openturns/IndicatorFunction.hxx" %} %include IndicatorFunction_doc.i %include openturns/IndicatorFunction.hxx namespace OT { %extend IndicatorFunction { IndicatorFunction(const IndicatorFunction & other) { return new OT::IndicatorFunction(other); } } } openturns-1.9/python/src/IndicatorFunction_doc.i.in000066400000000000000000000011471307543307100225640ustar00rootroot00000000000000%feature("docstring") OT::IndicatorFunction "Indicator function. This function compares the output of another function against a threshold. Parameters ---------- function : :class:`~openturns.Function` Function from which another function is created. comparisonOperator : :class:`~openturns.ComparisonOperator` Comparison operator. threshold : float Threshold from which values are compared. Examples -------- >>> import openturns as ot >>> analytical = ot.SymbolicFunction(['x0', 'x1'], ['x0 + x1']) >>> indicator = ot.IndicatorFunction(analytical, ot.Less(), 0.0) >>> print(indicator([2, 3])) [0]" openturns-1.9/python/src/Indices.i000066400000000000000000000020341307543307100172620ustar00rootroot00000000000000// SWIG file Indices.i %{ #include "openturns/Indices.hxx" %} %include Indices_doc.i %typemap(in) const Indices & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to an Indices"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const Indices & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %apply const Indices & { const OT::Indices & }; %include openturns/Indices.hxx namespace OT { %extend Indices { Indices(const Indices & other) { return new OT::Indices(other); } Indices(PyObject * pyObj) { return new OT::Indices( OT::convert(pyObj) ); } OTCollectionOperatorsHelper(OT::Indices, OT::UnsignedInteger) } // Indices } // OT openturns-1.9/python/src/Indices_doc.i.in000066400000000000000000000037071307543307100205240ustar00rootroot00000000000000%feature("docstring") OT::Indices "Collection of unsigned integers. Available constructors: Indices(*size=0, value=0*) Indices(*sequence*) Parameters ---------- size : int, :math:`size \geq 0` Size of the collection. value : positive int Value set to the *size* elements. sequence : sequence of int Components of the vector. Examples -------- >>> import openturns as ot Use the first constructor: >>> ot.Indices(3) [0,0,0] >>> ot.Indices(3, 4) [4,4,4] Use the second constructor: >>> vector = ot.Indices([100, 30, 70]) >>> vector [100,30,70] Use some functionalities: >>> vector[1] = 20 >>> vector [100,20,70] >>> vector.add(50) >>> vector [100,20,70,50]" // --------------------------------------------------------------------- %feature("docstring") OT::Indices::check "Check that no value is repeated and no value exceeds the given bound. Parameters ---------- bound : positive int The bound value. Returns ------- check : bool *True* if no value is repeated and all values are < bound." // --------------------------------------------------------------------- %feature("docstring") OT::Indices::fill "Fill the indices with a linear progression. Starting from the start value *initialValue* by step *stepSize*. Parameters ---------- initialValue : positive int Initial value. By default it is equal to 0. stepSize : positive int Step size. By default it is equal to 1. Examples -------- >>> import openturns as ot >>> indices = ot.Indices(3) >>> indices.fill() >>> print(indices) [0,1,2] >>> indices = ot.Indices(3) >>> indices.fill(2, 4) >>> print(indices) [2,6,10]" // --------------------------------------------------------------------- %feature("docstring") OT::Indices::isIncreasing "Check if the indices are increasing. Returns ------- isIncreasing : bool *True* if the indices are increasing. Examples -------- >>> import openturns as ot >>> indices = ot.Indices(3) >>> indices.fill() >>> indices.isIncreasing() True" openturns-1.9/python/src/IntegrationAlgorithm.i000066400000000000000000000005711307543307100220420ustar00rootroot00000000000000// SWIG file IntegrationAlgorithm.i %{ #include "openturns/IntegrationAlgorithm.hxx" %} %include IntegrationAlgorithm_doc.i OTTypedInterfaceObjectHelper(IntegrationAlgorithm) %include openturns/IntegrationAlgorithm.hxx namespace OT{ %extend IntegrationAlgorithm { IntegrationAlgorithm(const IntegrationAlgorithm & other) { return new OT::IntegrationAlgorithm(other); } } } openturns-1.9/python/src/IntegrationAlgorithmImplementation.i000066400000000000000000000006661307543307100247550ustar00rootroot00000000000000// SWIG file IntegrationAlgorithmImplementation.i %{ #include "openturns/IntegrationAlgorithmImplementation.hxx" %} %include IntegrationAlgorithmImplementation_doc.i %include openturns/IntegrationAlgorithmImplementation.hxx namespace OT { %extend IntegrationAlgorithmImplementation { IntegrationAlgorithmImplementation(const IntegrationAlgorithmImplementation & other) { return new OT::IntegrationAlgorithmImplementation(other); } } } openturns-1.9/python/src/IntegrationAlgorithmImplementation_doc.i.in000066400000000000000000000012611307543307100261770ustar00rootroot00000000000000%define OT_IntegrationAlgorithm_doc "Base class for integration algorithms." %enddef %feature("docstring") OT::IntegrationAlgorithmImplementation OT_IntegrationAlgorithm_doc // --------------------------------------------------------------------- %define OT_IntegrationAlgorithm_integrate_doc "Integrate a function on an interval. Parameters ---------- function : :class:`~openturns.Function` The function to integrate. interval : :class:`~openturns.Interval` The integration domain. Returns ------- value : :class:`~openturns.Point` The integral value." %enddef %feature("docstring") OT::IntegrationAlgorithmImplementation::integrate OT_IntegrationAlgorithm_integrate_doc openturns-1.9/python/src/IntegrationAlgorithm_doc.i.in000066400000000000000000000002541307543307100232720ustar00rootroot00000000000000%feature("docstring") OT::IntegrationAlgorithm OT_IntegrationAlgorithm_doc %feature("docstring") OT::IntegrationAlgorithm::integrate OT_IntegrationAlgorithm_integrate_doc openturns-1.9/python/src/IntegrationStrategy.i000066400000000000000000000004751307543307100217210ustar00rootroot00000000000000// SWIG file IntegrationStrategy.i %{ #include "openturns/IntegrationStrategy.hxx" %} %include IntegrationStrategy_doc.i %include openturns/IntegrationStrategy.hxx namespace OT{ %extend IntegrationStrategy { IntegrationStrategy(const IntegrationStrategy & other) { return new OT::IntegrationStrategy(other); } } } openturns-1.9/python/src/IntegrationStrategy_doc.i.in000066400000000000000000000044701307543307100231520ustar00rootroot00000000000000%feature("docstring") OT::IntegrationStrategy "Integration strategy for the approximation coefficients. Available constructors: LeastSquaresStrategy(*measure*) LeastSquaresStrategy(*weightedExp*) LeastSquaresStrategy(*measure, weightedExp*) LeastSquaresStrategy(*inputSample, outputSample*) LeastSquaresStrategy(*inputSample, weights, outputSample*) Parameters ---------- weightedExp : :class:`~openturns.WeightedExperiment` Experimental design used for the transformed input data. When not precised, OpenTURNS uses a :class:`~openturns.MonteCarloExperiment`. measure : :class:`~openturns.Distribution` Distribution :math:`\mu` with respect to which the basis is orthonormal. When not precised, OpenTURNS uses the limit measure defined within the :class:`~openturns.WeightedExperiment`. inputSample, outputSample : 2-d sequence of float The input random variables :math:`\vect{X}=(X_1, \dots, X_{n_X})^T` and the output samples :math:`\vect{Y}` that describe the model. weights : sequence of float Numerical point that are the weights associated to the input sample points such that the corresponding weighted experiment is a good approximation of :math:`\mu`. If not precised, all weights are equals to :math:`\omega_i = \frac{1}{size}`, where :math:`size` is the size of the sample. See also -------- FunctionalChaosAlgorithm, ProjectionStrategy, LeastSquaresStrategy Notes ----- This class is not usable because it has sense only within the :class:`~openturns.FunctionalChaosAlgorithm` : the integration strategy evaluates the coefficients :math:`(a_k)_{k \in K}` of the polynomials decomposition as follows: .. math:: \vect{a} = E_{\mu} \left[ g \circ T^{-1} (\vect{U}) \vect{\Psi}(\vect{U}) \right] where :math:`\vect{U} = T(\vect{X})`. The mean expectation :math:`E_{\mu}` is approximated by a relation of type: .. math:: E_{\mu} \left[ f(\vect{U}) \right] \approx \sum_{i \in I} \omega_i f(\Xi_i) where is a function :math:`L_1(\mu)` defined as: .. math:: f(\vect{U} = g \circ T^{-1} (\vect{U}) \vect{\Psi}(\vect{U}) In the approximation of the mean expectation, the set *I*, the points :math:`(\Xi_i)_{i \in I}` and the weights :math:`(\omega_i)_{i \in I}` are evaluated from methods implemented in the :class:`~openturns.WeightedExperiment`." openturns-1.9/python/src/InterfaceObject.i000066400000000000000000000004331307543307100207340ustar00rootroot00000000000000// SWIG file InterfaceObject.i %{ #include "openturns/InterfaceObject.hxx" %} %include InterfaceObject_doc.i %ignore OT::InterfaceObject::setImplementationAsPersistentObject; %ignore OT::InterfaceObject::getImplementationAsPersistentObject; %include openturns/InterfaceObject.hxx openturns-1.9/python/src/InterfaceObject_doc.i.in000066400000000000000000000014771307543307100221770ustar00rootroot00000000000000%feature("docstring") OT::InterfaceObject::getId "Accessor to the object's id. Returns ------- id : int Internal unique identifier." // --------------------------------------------------------------------- %feature("docstring") OT::InterfaceObject::getName "Accessor to the object's name. Returns ------- name : str The name of the object." // --------------------------------------------------------------------- %feature("docstring") OT::InterfaceObject::setName "Accessor to the object's name. Parameters ---------- name : str The name of the object." // --------------------------------------------------------------------- %feature("docstring") OT::InterfaceObject::getImplementation "Accessor to the underlying implementation. Returns ------- impl : Implementation The implementation class." openturns-1.9/python/src/Interval.i000066400000000000000000000021201307543307100174640ustar00rootroot00000000000000// SWIG file Interval.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/Interval.hxx" %} %include Interval_doc.i // we check for boolean type but they are stored as integers %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const BoolCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %typemap(in) const BoolCollection & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert >( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Bool"); } } } %apply const BoolCollection & { OT::Interval::BoolCollection & }; %rename(__eq__) OT::Interval::operator==(const Interval & rhs) const; %include openturns/Interval.hxx namespace OT { %extend Interval { Interval(const Interval & other) { return new OT::Interval(other); } } } openturns-1.9/python/src/IntervalMesher.i000066400000000000000000000004201307543307100206310ustar00rootroot00000000000000// SWIG file IntervalMesher.i %{ #include "openturns/IntervalMesher.hxx" %} %include IntervalMesher_doc.i %include openturns/IntervalMesher.hxx namespace OT {%extend IntervalMesher {IntervalMesher(const IntervalMesher & other){return new OT::IntervalMesher(other);}}} openturns-1.9/python/src/IntervalMesher_doc.i.in000066400000000000000000000033511307543307100220710ustar00rootroot00000000000000%feature("docstring") OT::IntervalMesher "Creation of mesh of box type. Available constructor: IntervalMesher(*discretization*) Parameters ---------- discretization : sequence of int, of dimension :math:`\leq 3`. Number of intervals in each direction of the box. Examples -------- Create a mesh: >>> import openturns as ot >>> mesher = ot.IntervalMesher([5, 10]) >>> lowerbound = [0.0, 0.0] >>> upperBound = [2.0, 4.0] >>> interval = ot.Interval(lowerbound, upperBound) >>> mesh = mesher.build(interval)" // --------------------------------------------------------------------- %feature("docstring") OT::IntervalMesher::build "Build the mesh of box type. Parameters ---------- interval : :class:`~openturns.Interval` The interval to mesh, of dimension equal to the dimension of `discretization`. diamond : bool A flag telling if one want the usual mesh (rectangular cells cut along a diagonal in dimension 2) or a diamond like mesh (rectangular cells cut into 4 triangles with the center of the cell as shared vertex). Default is *IntervalMesher-UseDiamond*, see :class:`~openturns.ResourceMap`. Returns ------- mesh : :class:`~openturns.Mesh` The mesh built." // --------------------------------------------------------------------- %feature("docstring") OT::IntervalMesher::getDiscretization "Accessor to the discretization. Returns ------- discretization : :class:`~openturns.Indices` Number of intervals in each direction of the box." // --------------------------------------------------------------------- %feature("docstring") OT::IntervalMesher::setDiscretization "Accessor to the discretization. Parameters ---------- discretization : sequence of int Number of intervals in each direction of the box." openturns-1.9/python/src/Interval_doc.i.in000066400000000000000000000162511307543307100207300ustar00rootroot00000000000000%feature("docstring") OT::Interval "Numerical interval. Available constructors: Interval(*dim=0*) Interval(*lowerBound, upperBound, finiteLowerBound=[True]*dim, finiteUpperBound=[True]*dim*) Parameters ---------- dim : int, :math:`dim \geq 0` Dimension of the interval. If only *dim* is mentioned, it leads to create the finite interval :math:`[0, 1]^{dim}`. By default, an empty interval is created. lowerBound, upperBound : float or sequence of float of dimension *dim* Define an interval :math:`[lowerBound_0, upperBound_0]\times \dots \times [lowerBound_{dim-1}, upperBound_{dim-1}]`. It is allowed to have :math:`lowerBound_i \geq upperBound_i` for some :math:`i`: it simply defines an empty interval. The *lowerBound* and the *upperBound* must be of the same type. If *finiteLowerBound* and *finiteUpperBound* are mentioned, they must be sequences. finiteLowerBound : sequence of bool of dimension *dim* Flags telling for each component of the lower bound whether it is finite or not. finiteUpperBound : sequence of bool of dimension *dim* Flags telling for each component of the upper bound whether it is finite or not. Notes ----- The meaning of a flag is: if flag :math:`i` is *True*, the corresponding component of the given bound is finite and its value is given by bound :math:`i`. If not, the corresponding component is infinite and its value is either :math:`-\infty` if bound :math:`i < 0` or :math:`+\infty` if bound :math:`i \geq 0`. It is possible to add or substract two intervals and multiply an interval by a scalar. Examples -------- >>> import openturns as ot >>> # A finite interval >>> print(ot.Interval([2.0, 3.0], [4.0, 5.0])) [2, 4] [3, 5] >>> # Not finite intervals >>> a = 2.0 >>> print(ot.Interval([a], [1], [True], [False])) [2, (1) +inf[ >>> print(ot.Interval([1], [a], [False], [True])) ]-inf (1), 2] >>> # Operations with intervals: >>> interval1 = ot.Interval([2.0, 3.0], [5.0, 8.0]) >>> interval2 = ot.Interval([1.0, 4.0], [6.0, 13.0]) >>> # Addition >>> print(interval1 + interval2) [3, 11] [7, 21] >>> # Substraction >>> print(interval1 - interval2) [-4, 4] [-10, 4] >>> # Multiplication >>> print(interval1 * 3) [6, 15] [9, 24]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::getFiniteLowerBound "Tell for each component of the lower bound whether it is finite or not. Returns ------- flags : :class:`~openturns.BoolCollection` If the :math:`i^{th}` element is *False*, the corresponding component of the lower bound is infinite. Otherwise, it is finite. Examples -------- >>> import openturns as ot >>> interval = ot.Interval([2.0, 3.0], [4.0, 5.0], [True, False], [True, True]) >>> print(interval.getFiniteLowerBound()) [1,0]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::setFiniteLowerBound "Tell for each component of the lower bound whether it is finite or not. Parameters ---------- flags : sequence of bool If the :math:`i^{th}` element is *False*, the corresponding component of the lower bound is infinite. Otherwise, it is finite. Examples -------- >>> import openturns as ot >>> interval = ot.Interval(2) >>> interval.setFiniteLowerBound([True, False]) >>> print(interval) [0, 1] ]-inf (0), 1]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::getFiniteUpperBound "Tell for each component of the upper bound whether it is finite or not. Returns ------- flags : :class:`~openturns.BoolCollection` If the :math:`i^{th}` element is *False*, the corresponding component of the upper bound is infinite. Otherwise, it is finite. Examples -------- >>> import openturns as ot >>> interval = ot.Interval([2.0, 3.0], [4.0, 5.0], [True, False], [True, True]) >>> print(interval.getFiniteUpperBound()) [1,1]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::setFiniteUpperBound "Tell for each component of the upper bound whether it is finite or not. Parameters ---------- flags : sequence of bool If the :math:`i^{th}` element is *False*, the corresponding component of the upper bound is infinite. Otherwise, it is finite. Examples -------- >>> import openturns as ot >>> interval = ot.Interval(2) >>> interval.setFiniteUpperBound([True, False]) >>> print(interval) [0, 1] [0, (1) +inf[" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::getLowerBound "Get the lower bound. Returns ------- lowerBound : :class:`~openturns.Point` Value of the lower bound. Examples -------- >>> import openturns as ot >>> interval = ot.Interval([2.0, 3.0], [4.0, 5.0], [True, False], [True, True]) >>> print(interval.getLowerBound()) [2,3]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::setLowerBound "Set the lower bound. Parameters ---------- lowerBound : sequence of float Value of the lower bound. Examples -------- >>> import openturns as ot >>> interval = ot.Interval(2) >>> interval.setLowerBound([-4, -5]) >>> print(interval) [-4, 1] [-5, 1]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::getUpperBound "Get the upper bound. Returns ------- upperBound : :class:`~openturns.Point` Value of the upper bound. Examples -------- >>> import openturns as ot >>> interval = ot.Interval([2.0, 3.0], [4.0, 5.0], [True, False], [True, True]) >>> print(interval.getUpperBound()) [4,5]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::setUpperBound "Set the upper bound. Parameters ---------- upperBound : sequence of float Value of the upper bound. Examples -------- >>> import openturns as ot >>> interval = ot.Interval(2) >>> interval.setUpperBound([4, 5]) >>> print(interval) [0, 4] [0, 5]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::intersect "Get the intersection with an other interval. Parameters ---------- otherInterval : :class:`~openturns.Interval` Interval of the same dimension. Returns ------- interval : :class:`~openturns.Interval` An interval corresponding to the intersection of the current interval with *otherInterval*. Examples -------- >>> import openturns as ot >>> interval1 = ot.Interval([2.0, 3.0], [5.0, 8.0]) >>> interval2 = ot.Interval([1.0, 4.0], [6.0, 13.0]) >>> print(interval1.intersect(interval2)) [2, 5] [4, 8]" // --------------------------------------------------------------------- %feature("docstring") OT::Interval::join "Get the smallest interval containing both the current interval and another one. Parameters ---------- otherInterval : :class:`~openturns.Interval` Interval of the same dimension. Returns ------- interval : :class:`~openturns.Interval` Smallest interval containing both the current interval and *otherInterval*. Examples -------- >>> import openturns as ot >>> interval1 = ot.Interval([2.0, 3.0], [5.0, 8.0]) >>> interval2 = ot.Interval([1.0, 4.0], [6.0, 13.0]) >>> print(interval1.join(interval2)) [1, 6] [3, 13]" openturns-1.9/python/src/InverseBoxCoxEvaluation.i000066400000000000000000000005321307543307100224730ustar00rootroot00000000000000// SWIG file InverseBoxCoxEvaluation.i OTAutodoc(InverseBoxCoxEvaluation) %{ #include "openturns/InverseBoxCoxEvaluation.hxx" %} %include openturns/InverseBoxCoxEvaluation.hxx namespace OT { %extend InverseBoxCoxEvaluation { InverseBoxCoxEvaluation(const InverseBoxCoxEvaluation & other) { return new OT::InverseBoxCoxEvaluation(other); } } } openturns-1.9/python/src/InverseBoxCoxTransform.i000066400000000000000000000005261307543307100223420ustar00rootroot00000000000000// SWIG file InverseBoxCoxTransform.i %{ #include "openturns/InverseBoxCoxTransform.hxx" %} %include InverseBoxCoxTransform_doc.i %include openturns/InverseBoxCoxTransform.hxx namespace OT { %extend InverseBoxCoxTransform { InverseBoxCoxTransform(const InverseBoxCoxTransform & other) { return new OT::InverseBoxCoxTransform(other); } } } openturns-1.9/python/src/InverseBoxCoxTransform_doc.i.in000066400000000000000000000047521307543307100236010ustar00rootroot00000000000000%feature("docstring") OT::InverseBoxCoxTransform "BoxCox transformation. Available constructors: InverseBoxCoxTransform(*lambdaVect, shiftVect = 0*) InverseBoxCoxTransform(*lambda, shift=0*) Parameters ---------- lambdaVect : :class:`~openturns.Point` The :math:`(\lambda_1, \dots, \lambda_d)` parameter. shiftVect : :class:`~openturns.Point` The :math:`(\alpha_1, \dots, \alpha_d)` parameter. Default is :math:`(\alpha_1, \dots, \alpha_d)=(0, \dots, 0)`. lambda : float The :math:`\lambda` parameter in the univariate case. shift : float The :math:`\alpha` parameter in the univariate case. Default is :math:`\alpha = 0`. Notes ----- The inverse Box Cox transformation :math:`h_{\vect{\lambda}, \vect{\alpha}}^{-1}: \Rset^d \rightarrow \Rset^d` writes for each component :math:`h_{\lambda_i, \alpha_i}^{-1}: \Rset \rightarrow \Rset`: .. math:: \begin{array}{lcl} h_{\lambda_i, \alpha_i}^{-1}(y) & = & \left\{ \begin{array}{ll} \displaystyle (\lambda_i y + 1)^{\frac{1}{\lambda_i}} - \alpha_i & \lambda_i \neq 0 \\ \displaystyle \exp(y) - \alpha_i & \lambda_i = 0 \end{array} \right. \end{array} The Box Cox transformation writes: .. math:: h_{\lambda_i, \alpha_i}^{-1} (x)= \left\{ \begin{array}{ll} \dfrac{(x+\alpha_i)^\lambda_i-1}{\lambda} & \lambda_i \neq 0 \\ \log(x+\alpha_i) & \lambda_i = 0 \end{array} \right. for all :math:`x+\alpha_i >0`. Examples -------- Create an inverse Box Cox tranformation: >>> import openturns as ot >>> myLambda = 0.1 >>> myInverseBoxCox = ot.InverseBoxCoxTransform(myLambda) " // --------------------------------------------------------------------- %feature("docstring") OT::InverseBoxCoxTransform::getLambda "Accessor to the :math:`\vect{\lambda}` parameter. Returns ------- myLambda : :class:`~openturns.Point` The :math:`\vect{\lambda}` parameter. " // --------------------------------------------------------------------- %feature("docstring") OT::InverseBoxCoxTransform::getShift "Accessor to the :math:`\vect{\alpha}` parameter. Returns ------- myLambda : :class:`~openturns.Point` The :math:`\vect{\Lambda}` parameter. " // --------------------------------------------------------------------- %feature("docstring") OT::InverseBoxCoxTransform::getInverse "Accessor to the Box Cox transformation. Returns ------- myInverseBoxCox : :class:`~openturns.BoxCoxTransform` The Box Cox transformation. " openturns-1.9/python/src/InverseChiSquare.i000066400000000000000000000004461307543307100211310ustar00rootroot00000000000000// SWIG file InverseChiSquare.i %{ #include "openturns/InverseChiSquare.hxx" %} %include InverseChiSquare_doc.i %include openturns/InverseChiSquare.hxx namespace OT { %extend InverseChiSquare { InverseChiSquare(const InverseChiSquare & other) { return new OT::InverseChiSquare(other); } } } openturns-1.9/python/src/InverseChiSquare_doc.i.in000066400000000000000000000033631307543307100223640ustar00rootroot00000000000000%feature("docstring") OT::InverseChiSquare "InverseChiSquare distribution. Helper class for defining the Inverse ChiSquare distribution which is the inverse of a :math:`\chi^2` distribution. Available constructors: InverseChiSquare(*nu*) Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom. By default, :math:`\nu =1`. Notes ----- :math:`X` follows an Inverse ChiSquare distribution of parameter :math:`\nu` means that :math:`\dfrac{1}{X}` follows the :math:`\chi^2(\nu)` distribution, with :math:`\nu>0`. The Inverse ChiSquare distribution parametered by :math:`\nu` is exactly the :math:`InverseGamma(\dfrac{\nu}{2}, 2)` distribution. Its probability density function is defined as: .. math:: f_X(x) = \dfrac{\exp \left( -\dfrac{1}{2 x}\right)}{\Gamma \left(\dfrac{\nu}{2}\right)\lambda^{\frac{\nu}{2}}x^{\frac{\nu}{2}+1}}, \quad x \in [0; +\infty[ with :math:`\nu > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \dfrac{1}{\nu-2} \quad \text{if } \nu>2\\ \Var{X} & = &\dfrac{2}{(\nu-2)^2(\nu-4)}\quad \text{if } \nu>4 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.InverseChiSquare(1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::InverseChiSquare::getNu "Accessor to the parameter :math:`nu`. Returns ------- nu : float Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::InverseChiSquare::setNu "Accessor to the distribution parameter :math:`\nu`. Parameters ---------- nu : float Degrees of freedom." openturns-1.9/python/src/InverseGamma.i000066400000000000000000000004061307543307100202630ustar00rootroot00000000000000// SWIG file InverseGamma.i %{ #include "openturns/InverseGamma.hxx" %} %include InverseGamma_doc.i %include openturns/InverseGamma.hxx namespace OT { %extend InverseGamma { InverseGamma(const InverseGamma & other) { return new OT::InverseGamma(other); } } } openturns-1.9/python/src/InverseGamma_doc.i.in000066400000000000000000000043411307543307100215170ustar00rootroot00000000000000%feature("docstring") OT::InverseGamma "InverseGamma distribution. Helper class for defining the Inverse Gamma distribution which is the inverse of a :math:`\Gamma` distribution. Available constructors: InverseGamma(*k, lambda*) Parameters ---------- k : float, :math:`k > 0`, Shape parameter. By default, :math:`k=1`. lambda : float, :math:`\lambda > 0`. Scale parameter. By default, :math:`\lambda=1`. Notes ----- :math:`X` follows an Inverse Gamma distribution of parameters :math:`(k, \lambda)` means that :math:`\dfrac{1}{X}` follows the :math:`\Gamma(k, \dfrac{1}{\lambda})` distribution, with :math:`k>0` and :math:`\lambda>0`. Its probability density function is defined as: .. math:: f_X(x) = \dfrac{\exp \left( -\dfrac{1}{\lambda x}\right)}{\Gamma(k)\lambda^kx^{k+1}}, \quad x \in [0; +\infty[ with :math:`k >0 , \lambda > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \dfrac{1}{\lambda(k-1)} \quad \text{if } k>1 \\ \Var{X} & = &\dfrac{1}{\lambda^2(k-1)^2(k-2)} \quad \text{if } k>2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.InverseGamma(1.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::InverseGamma::getK "Accessor to the parameter :math:`k`. Returns ------- k : float Shape parameter :math:`k`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseGamma::getLambda "Accessor to the parameter :math:`\lambda`. Returns ------- lambda : float Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseGamma::setK "Accessor to the distribution's shape parameter :math:`k`. Parameters ---------- k : float, :math:`k > 0` Parameter :math:`k`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseGamma::setLambda "Accessor to the distribution's scale parameter :math:`\lambda`. Parameters ---------- lambda : float, :math:`\lambda > 0` Parameter :math:`\lambda`." openturns-1.9/python/src/InverseNatafEllipticalCopulaEvaluation.i000066400000000000000000000007221307543307100254720ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalCopulaEvaluation.i OTAutodoc(InverseNatafEllipticalCopulaEvaluation) %{ #include "openturns/InverseNatafEllipticalCopulaEvaluation.hxx" %} %include openturns/InverseNatafEllipticalCopulaEvaluation.hxx namespace OT { %extend InverseNatafEllipticalCopulaEvaluation { InverseNatafEllipticalCopulaEvaluation(const InverseNatafEllipticalCopulaEvaluation & other) { return new OT::InverseNatafEllipticalCopulaEvaluation(other); } } } openturns-1.9/python/src/InverseNatafEllipticalCopulaGradient.i000066400000000000000000000007021307543307100251160ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalCopulaGradient.i OTAutodoc(InverseNatafEllipticalCopulaGradient) %{ #include "openturns/InverseNatafEllipticalCopulaGradient.hxx" %} %include openturns/InverseNatafEllipticalCopulaGradient.hxx namespace OT { %extend InverseNatafEllipticalCopulaGradient { InverseNatafEllipticalCopulaGradient(const InverseNatafEllipticalCopulaGradient & other) { return new OT::InverseNatafEllipticalCopulaGradient(other); } } } openturns-1.9/python/src/InverseNatafEllipticalCopulaHessian.i000066400000000000000000000006721307543307100247610ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalCopulaHessian.i OTAutodoc(InverseNatafEllipticalCopulaHessian) %{ #include "openturns/InverseNatafEllipticalCopulaHessian.hxx" %} %include openturns/InverseNatafEllipticalCopulaHessian.hxx namespace OT { %extend InverseNatafEllipticalCopulaHessian { InverseNatafEllipticalCopulaHessian(const InverseNatafEllipticalCopulaHessian & other) { return new OT::InverseNatafEllipticalCopulaHessian(other); } } } openturns-1.9/python/src/InverseNatafEllipticalDistributionEvaluation.i000066400000000000000000000010021307543307100267160ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalDistributionEvaluation.i OTAutodoc(InverseNatafEllipticalDistributionEvaluation) %{ #include "openturns/InverseNatafEllipticalDistributionEvaluation.hxx" %} %include openturns/InverseNatafEllipticalDistributionEvaluation.hxx namespace OT { %extend InverseNatafEllipticalDistributionEvaluation { InverseNatafEllipticalDistributionEvaluation(const InverseNatafEllipticalDistributionEvaluation & other) { return new OT::InverseNatafEllipticalDistributionEvaluation(other); } } } openturns-1.9/python/src/InverseNatafEllipticalDistributionGradient.i000066400000000000000000000007621307543307100263600ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalDistributionGradient.i OTAutodoc(InverseNatafEllipticalDistributionGradient) %{ #include "openturns/InverseNatafEllipticalDistributionGradient.hxx" %} %include openturns/InverseNatafEllipticalDistributionGradient.hxx namespace OT { %extend InverseNatafEllipticalDistributionGradient { InverseNatafEllipticalDistributionGradient(const InverseNatafEllipticalDistributionGradient & other) { return new OT::InverseNatafEllipticalDistributionGradient(other); } } } openturns-1.9/python/src/InverseNatafEllipticalDistributionHessian.i000066400000000000000000000007521307543307100262140ustar00rootroot00000000000000// SWIG file InverseNatafEllipticalDistributionHessian.i OTAutodoc(InverseNatafEllipticalDistributionHessian) %{ #include "openturns/InverseNatafEllipticalDistributionHessian.hxx" %} %include openturns/InverseNatafEllipticalDistributionHessian.hxx namespace OT { %extend InverseNatafEllipticalDistributionHessian { InverseNatafEllipticalDistributionHessian(const InverseNatafEllipticalDistributionHessian & other) { return new OT::InverseNatafEllipticalDistributionHessian(other); } } } openturns-1.9/python/src/InverseNatafIndependentCopulaEvaluation.i000066400000000000000000000007321307543307100256460ustar00rootroot00000000000000// SWIG file InverseNatafIndependentCopulaEvaluation.i OTAutodoc(InverseNatafIndependentCopulaEvaluation) %{ #include "openturns/InverseNatafIndependentCopulaEvaluation.hxx" %} %include openturns/InverseNatafIndependentCopulaEvaluation.hxx namespace OT { %extend InverseNatafIndependentCopulaEvaluation { InverseNatafIndependentCopulaEvaluation(const InverseNatafIndependentCopulaEvaluation & other) { return new OT::InverseNatafIndependentCopulaEvaluation(other); } } } openturns-1.9/python/src/InverseNatafIndependentCopulaGradient.i000066400000000000000000000007121307543307100252720ustar00rootroot00000000000000// SWIG file InverseNatafIndependentCopulaGradient.i OTAutodoc(InverseNatafIndependentCopulaGradient) %{ #include "openturns/InverseNatafIndependentCopulaGradient.hxx" %} %include openturns/InverseNatafIndependentCopulaGradient.hxx namespace OT { %extend InverseNatafIndependentCopulaGradient { InverseNatafIndependentCopulaGradient(const InverseNatafIndependentCopulaGradient & other) { return new OT::InverseNatafIndependentCopulaGradient(other); } } } openturns-1.9/python/src/InverseNatafIndependentCopulaHessian.i000066400000000000000000000007021307543307100251260ustar00rootroot00000000000000// SWIG file InverseNatafIndependentCopulaHessian.i OTAutodoc(InverseNatafIndependentCopulaHessian) %{ #include "openturns/InverseNatafIndependentCopulaHessian.hxx" %} %include openturns/InverseNatafIndependentCopulaHessian.hxx namespace OT { %extend InverseNatafIndependentCopulaHessian { InverseNatafIndependentCopulaHessian(const InverseNatafIndependentCopulaHessian & other) { return new OT::InverseNatafIndependentCopulaHessian(other); } } } openturns-1.9/python/src/InverseNormal.i000066400000000000000000000004161307543307100204720ustar00rootroot00000000000000// SWIG file InverseNormal.i %{ #include "openturns/InverseNormal.hxx" %} %include InverseNormal_doc.i %include openturns/InverseNormal.hxx namespace OT { %extend InverseNormal { InverseNormal(const InverseNormal & other) { return new OT::InverseNormal(other); } } } openturns-1.9/python/src/InverseNormalFactory.i000066400000000000000000000005061307543307100220220ustar00rootroot00000000000000// SWIG file InverseNormalFactory.i %{ #include "openturns/InverseNormalFactory.hxx" %} %include InverseNormalFactory_doc.i %include openturns/InverseNormalFactory.hxx namespace OT { %extend InverseNormalFactory { InverseNormalFactory(const InverseNormalFactory & other) { return new OT::InverseNormalFactory(other); } } } openturns-1.9/python/src/InverseNormalFactory_doc.i.in000066400000000000000000000002461307543307100232550ustar00rootroot00000000000000%feature("docstring") OT::InverseNormalFactory "Inverse Normal factory. Available constructor: InverseNormalFactory() See also -------- DistributionFactory" openturns-1.9/python/src/InverseNormal_doc.i.in000066400000000000000000000033141307543307100217240ustar00rootroot00000000000000%feature("docstring") OT::InverseNormal "Inverse normal distribution. Available constructors: InverseNormal(*lambda=1.0, mu=1.0*) Parameters ---------- lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`. mu : float, :math:`\mu > 0` Location (mean) parameter :math:`\mu`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \sqrt{\frac{\lambda}{2 \pi x^3}} \exp\left(\frac{- \lambda (x - \mu)^2}{2 \mu^2 x}\right), \quad x \in [0; +\infty[ with :math:`\lambda, \mu > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \mu \\ \Var{X} & = & \frac{\mu^3}{\lambda} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.InverseNormal(1.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::InverseNormal::getLambda "Accessor to the distribution's scale parameter. Returns ------- lambda : float Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseNormal::getMu "Accessor to the distribution's location (mean) parameter. Returns ------- mu : float Location (mean) parameter :math:`\mu`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseNormal::setLambdaMu "Accessor to the distribution's parameters. Parameters ---------- lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`. mu : float, :math:`\mu > 0` Location (mean) parameter :math:`\mu`." openturns-1.9/python/src/InverseRosenblattEvaluation.i000066400000000000000000000005721307543307100234120ustar00rootroot00000000000000// SWIG file InverseRosenblattEvaluation.i OTAutodoc(InverseRosenblattEvaluation) %{ #include "openturns/InverseRosenblattEvaluation.hxx" %} %include openturns/InverseRosenblattEvaluation.hxx namespace OT { %extend InverseRosenblattEvaluation { InverseRosenblattEvaluation(const InverseRosenblattEvaluation & other) { return new OT::InverseRosenblattEvaluation(other); } } } openturns-1.9/python/src/InverseTrendEvaluation.i000066400000000000000000000005221307543307100223440ustar00rootroot00000000000000// SWIG file InverseTrendEvaluation.i OTAutodoc(InverseTrendEvaluation) %{ #include "openturns/InverseTrendEvaluation.hxx" %} %include openturns/InverseTrendEvaluation.hxx namespace OT { %extend InverseTrendEvaluation { InverseTrendEvaluation(const InverseTrendEvaluation & other) { return new OT::InverseTrendEvaluation(other); } } } openturns-1.9/python/src/InverseTrendTransform.i000066400000000000000000000005161307543307100222130ustar00rootroot00000000000000// SWIG file InverseTrendTransform.i %{ #include "openturns/InverseTrendTransform.hxx" %} %include InverseTrendTransform_doc.i %include openturns/InverseTrendTransform.hxx namespace OT { %extend InverseTrendTransform { InverseTrendTransform(const InverseTrendTransform & other) { return new OT::InverseTrendTransform(other); } } } openturns-1.9/python/src/InverseTrendTransform_doc.i.in000066400000000000000000000033101307543307100234400ustar00rootroot00000000000000%feature("docstring") OT::InverseTrendTransform "Inverse Trend transformation. Parameters ---------- myInverseTrendFunc : :class:`~openturns.Function` The inverse trend function :math:`f_{trend}^{-1}`. Notes ----- A multivariate stochastic process :math:`X: \Omega \times\cD \rightarrow \Rset^d` of dimension *d* where :math:`\cD \in \Rset^n` may write as the sum of a trend function :math:`f_{trend}: \Rset^n \rightarrow \Rset^d` and a stationary multivariate stochastic process :math:`X_{stat}: \Omega \times\cD \rightarrow \Rset^d` of dimension *d* as follows: .. math:: X(\omega,\vect{t}) = X_{stat}(\omega,\vect{t}) + f_{trend}(\vect{t}) We note :math:`(\vect{x}_0, \dots, \vect{x}_{N-1})` the values of one field of the process *X*, associated to the mesh :math:`\cM = (\vect{t}_0, \dots, \vect{t}_{N-1})` of :math:`\cD`. We note :math:`(\vect{x}^{stat}_0, \dots, \vect{x}^{stat}_{N-1})` the values of the resulting stationary field. Then we have: .. math:: \vect{x}^{stat}_i = \vect{x}_i - f_{trend}(\vect{t}_i) The inverse trend transformation enables to get the :math:`X_{stat}` process or to get the :math:`(\vect{x}^{stat}_0, \dots, \vect{x}^{stat}_{N-1})` field. Examples -------- Create a trend function: :math:`f_{trend} : \Rset \mapsto \Rset` where :math:`f_{trend}(t,s)=-(1+2t+t^2)`: >>> import openturns as ot >>> h = ot.SymbolicFunction(['t'], ['-(1+2*t+t^2)']) >>> fTrendInv = ot.InverseTrendTransform(h) " // --------------------------------------------------------------------- %feature("docstring") OT::InverseTrendTransform::getInverse "Accessor to the trend function. Returns ------- myTrendTransform : :class:`~openturns.TrendTransform` The :math:`f_{trend}` function. " openturns-1.9/python/src/InverseWishart.i000066400000000000000000000004261307543307100206640ustar00rootroot00000000000000// SWIG file InverseWishart.i %{ #include "openturns/InverseWishart.hxx" %} %include InverseWishart_doc.i %include openturns/InverseWishart.hxx namespace OT { %extend InverseWishart { InverseWishart(const InverseWishart & other) { return new OT::InverseWishart(other); } } } openturns-1.9/python/src/InverseWishart_doc.i.in000066400000000000000000000032751307543307100221230ustar00rootroot00000000000000%feature("docstring") OT::InverseWishart "Inverse-Wishart distribution. Parameters ---------- v : 2-d sequence of float Scale matrix, positive definite of size :math:`p`. nu : float, :math:`\nu > p - 1` Degrees of freedom. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.InverseWishart(ot.CovarianceMatrix([[1.0]]), 3.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::InverseWishart::getNu "Accessor to the degrees of freedom parameter. Returns ------- nu : float Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::InverseWishart::setNu "Accessor to the degrees of freedom parameter. Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::InverseWishart::getV "Accessor to the scale parameter. Returns ------- v : :class:`~openturns.CovarianceMatrix` Scale matrix, positive definite of size :math:`p`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseWishart::setV "Accessor to the scale parameter. Parameters ---------- v : 2-d sequence of float Scale matrix, positive definite of size :math:`p`." // --------------------------------------------------------------------- %feature("docstring") OT::InverseWishart::getRealizationAsMatrix "Get one realization of the distribution as a covariance matrix. Returns ------- v : :class:`~openturns.CovarianceMatrix` A realization as a matrix" openturns-1.9/python/src/IteratedQuadrature.i000066400000000000000000000004661307543307100215120ustar00rootroot00000000000000// SWIG file IteratedQuadrature.i %{ #include "openturns/IteratedQuadrature.hxx" %} %include IteratedQuadrature_doc.i %include openturns/IteratedQuadrature.hxx namespace OT { %extend IteratedQuadrature { IteratedQuadrature(const IteratedQuadrature & other) { return new OT::IteratedQuadrature(other); } } } openturns-1.9/python/src/IteratedQuadrature_doc.i.in000066400000000000000000000076311307543307100227450ustar00rootroot00000000000000%feature("docstring") OT::IteratedQuadrature "Multivariate integration algorithm. Parameters ---------- univariateQuadrature : :class:`~openturns.IntegrationAlgorithm` By default, the integration algorithm is the Gauss-Kronrod algorithm (:class:`~openturns.GaussKronrod`) with the following parameters: maximumSubIntervals=32, maximumError= :math:`1e-7` and GKRule = G3K7. Note that the default parametrisation of the :class:`~openturns.GaussKronrod` class leads to a more precise evaluation of the integral but the cost is greater. It is recommended to increase the order of the quadratic rule and the number of sub intervals if the integrand or one of the bound functions is smooth but with many oscillations. Notes ----- This class enables to approximate the following integral: .. math:: I_f = \int_{a}^{b}\, \int_{l_1(x_0)}^{u_1(x_0)}\, \int_{l_2(x_0, x_1)}^{u_2(x_0,x_1)}\, \int_{l_{n-1}(x_0, \dots, x_{n-2})}^{u_{n-1}(x_0, \dots, x_{n-2})} \, f(x_0, \dots, x_{n-1})\di{x_{n-1}}\dots\di{x_0} with :math:`f: \Rset^n \mapsto \Rset^p`, :math:`l_k, u_k: \Rset^k \mapsto \Rset` and :math:`n\geq 1`. For :math:`n=1`, there is no bound functions :math:`l_k` and :math:`u_k`. Examples -------- Create an iterated quadrature algorithm: >>> import openturns as ot >>> import math as m >>> a = -m.pi >>> b = m.pi >>> f = ot.SymbolicFunction(['x', 'y'], ['1+cos(x)*sin(y)']) >>> l = [ot.SymbolicFunction(['x'], [' 2+cos(x)'])] >>> u = [ot.SymbolicFunction(['x'], ['-2-cos(x)'])] Draw the graph of the integrand and the bounds: >>> g = ot.Graph('Integration nodes', 'x', 'y', True, 'topright') >>> g.add(f.draw([a,a],[b,b])) >>> curve = l[0].draw(a, b).getDrawable(0) >>> curve.setLineWidth(2) >>> curve.setColor('red') >>> g.add(curve) >>> curve = u[0].draw(a, b).getDrawable(0) >>> curve.setLineWidth(2) >>> curve.setColor('red') >>> g.add(curve) Evaluate the integral with high precision: >>> Iref = ot.IteratedQuadrature(ot.GaussKronrod(100000, 1e-13, ot.GaussKronrodRule(ot.GaussKronrodRule.G11K23))).integrate(f, a, b, l, u) Evaluate the integral with the default GaussKronrod algorithm: >>> f.enableHistory() >>> I1 = ot.IteratedQuadrature(ot.GaussKronrod()).integrate(f, a, b, l, u) >>> sample1 = f.getHistoryInput().getSample() >>> print(I1) [-25.132...] >>> n_evals = sample1.getSize() >>> print(n_evals) 2116 >>> err = abs(100.0*(1.0-I1[0]/Iref[0])) >>> print(err) 2.2...e-14 >>> cloud = ot.Cloud(sample1) >>> cloud.setPointStyle('fcircle') >>> cloud.setColor('green') >>> g.add(cloud) >>> f.clearHistory() Evaluate the integral with the default IteratedQuadrature algorithm: >>> I2 = ot.IteratedQuadrature().integrate(f, a, b, l, u) >>> sample2 = f.getHistoryInput().getSample() >>> print(I2) [-25.132...] >>> n_evals = sample2.getSize() >>> print(n_evals) 5236 >>> err = abs(100.0*(1.0-I2[0]/Iref[0])) >>> print(err) 4.6...e-10 >>> cloud = ot.Cloud(sample2) >>> cloud.setPointStyle('fcircle') >>> cloud.setColor('gold') >>> g.add(cloud)" // --------------------------------------------------------------------- %feature("docstring") OT::IteratedQuadrature::integrate "Evaluation of the integral of :math:`f` on a domain. Available usages: integrate(*f, interval*) integrate(*f, a, b, lowerBoundFunctions, upperBoundFunctions*) Parameters ---------- f : :class:`~openturns.Function`, :math:`f: \Rset^n \mapsto \Rset^p` The integrand function. interval : :class:`~openturns.Interval`, :math:`interval \in \Rset^n` The integration domain. a,b : float Bounds of the integration interval of the first scalar input :math:`x_0` lowerBoundFunctions, upperBoundFunctions : list of :class:`~openturns.Function` List of :math:`n` functions :math:`(l_0, \dots, l_{n-1})` and :math:`(u_0, \dots, u_{n-1})` where :math:`l_k, u_k: \Rset^k \mapsto \Rset` defining the integration domain as defined above. The bound functions can cross each other. Returns ------- value : :class:`~openturns.Point` Approximation of the integral." openturns-1.9/python/src/JacobiFactory.i000066400000000000000000000004161307543307100204250ustar00rootroot00000000000000// SWIG file JacobiFactory.i %{ #include "openturns/JacobiFactory.hxx" %} %include JacobiFactory_doc.i %include openturns/JacobiFactory.hxx namespace OT { %extend JacobiFactory { JacobiFactory(const JacobiFactory & other) { return new OT::JacobiFactory(other); } } } openturns-1.9/python/src/JacobiFactory_doc.i.in000066400000000000000000000071341307543307100216630ustar00rootroot00000000000000%feature("docstring") OT::JacobiFactory "Jacobi specific orthonormal univariate polynomial family. For the :class:`~openturns.Beta` distribution. Available constructors: Jacobi(*arg1=1.0, arg2=1.0, parameters_set=ot.JacobiFactory.ANALYSIS*) Parameters ---------- arg1 : float If `parameters_set == ot.JacobiFactory.PROBABILITY`: default shape parameter :math:`r > 0` of the :class:`~openturns.Beta` distribution. If `parameters_set == ot.JacobiFactory.ANALYSIS`: alternative shape parameter :math:`\alpha = t - r - 1 > -1` of the :class:`~openturns.Beta` distribution. arg2 : float If `parameters_set == ot.JacobiFactory.PROBABILITY`: default shape parameter :math:`t > r` of the :class:`~openturns.Beta` distribution. If `parameters_set == ot.JacobiFactory.ANALYSIS`: alternative shape parameter :math:`\beta = r - 1` of the :class:`~openturns.Beta` distribution. parameters_set : int, optional Integer telling which parameters set is used for defining the distribution (amongst `ot.JacobiFactory.ANALYSIS, ot.JacobiFactory.PROBABILITY`). Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Jacobi polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle K_{2,i} (2 i + \alpha + \beta + 2) \\ b_i & = & \displaystyle K_{2,i} \frac{(\alpha - \beta)(\alpha + \beta)} {2 i + \alpha + \beta} \\ c_i & = & \displaystyle - \frac{2 i + \alpha + \beta + 2} {2 i + \alpha + \beta} \left[(i + \alpha) (i + \beta) (i + \alpha + \beta) i \frac{K_{1,i}} {2 i + \alpha + \beta - 1} \right]^{1/2} \end{array}, \quad 1 < i where :math:`\alpha` and :math:`\beta` are the alternative shape parameters of the :class:`~openturns.Beta` distribution, and: .. math:: \begin{array}{rcl} K_{1,i} & = & \displaystyle \frac{2 i + \alpha + \beta + 3} {(i + 1) (i + \alpha + 1) (i + \beta + 1) (i + \alpha + \beta + 1)} \\ K_{2,i} & = & \displaystyle \frac{1}{2} \sqrt{(2 i + \alpha + \beta + 1) K_{1,i}} \end{array}, \quad i > 1 See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.JacobiFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 2.23607 * X -0.935414 + 4.67707 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::JacobiFactory::getAlpha "Accessor to the alternative shape parameter :math:`\alpha`. Of the :class:`~openturns.Beta` distribution. Returns ------- alpha : float Alternative shape parameter :math:`\alpha = r - 1` of the :class:`~openturns.Beta` distribution." // --------------------------------------------------------------------- %feature("docstring") OT::JacobiFactory::getBeta "Accessor to the alternative shape parameter :math:`\beta`. Of the :class:`~openturns.Beta` distribution. Returns ------- beta : float Alternative shape parameter :math:`\beta = t - r - 1` of the :class:`~openturns.Beta` distribution." openturns-1.9/python/src/JansenSensitivityAlgorithm.i000066400000000000000000000005651307543307100232530ustar00rootroot00000000000000// SWIG file JansenSensitivityAlgorithm.i %{ #include "openturns/JansenSensitivityAlgorithm.hxx" %} %include JansenSensitivityAlgorithm_doc.i %include openturns/JansenSensitivityAlgorithm.hxx namespace OT{ %extend JansenSensitivityAlgorithm { JansenSensitivityAlgorithm(const JansenSensitivityAlgorithm & other) { return new OT::JansenSensitivityAlgorithm(other); } } } openturns-1.9/python/src/JansenSensitivityAlgorithm_doc.i.in000066400000000000000000000050571307543307100245060ustar00rootroot00000000000000%feature("docstring") OT::JansenSensitivityAlgorithm "Sensitivity analysis using Jansen method. Available constructors: JansenSensitivityAlgorithm(*inputDesign, outputDesign, N, computeSecondOrder*) JansenSensitivityAlgorithm(*distribution, N, model, computeSecondOrder*) JansenSensitivityAlgorithm(*experiment, model, computeSecondOrder*) Parameters ---------- inputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained thanks to the SobolIndicesAlgorithmImplementation.Generate method outputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained as the evaluation of a Function (model) on the previous inputDesign distribution : :class:`~openturns.Distribution` Input probabilistic model. Should have independent copula experiment : :class:`~openturns.WeightedExperiment` Experiment for the generation of two independent samples. N : int Size of samples to generate computeSecondOrder : bool If True, design that will be generated contains elements for the evaluation of second order indices. Notes ----- This class is concerned with analyzing the influence the random vector :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)` has on a random variable :math:`Y^k` which is being studied for uncertainty, by using the [Jansen1999]_ method for the evaluation of both first and total order indices. These last ones are respectively given as follows: .. math:: \begin{array}{ccc} \hat{V_i} & = & \frac{1}{n} \sum_{k=1}^{n} \left(G(A_k)^2 - G_0^2\right) - \frac{1}{2n} \sum_{k=1}^{n} \left( G(E_k) - G(B_k) \right)^2 \\ \hat{VT_{i}} & = & \frac{1}{n} \sum_{k=1}^{n} \left( G(A_k) - G(E_k) \right)^2 \end{array} See also -------- SobolIndicesAlgorithm Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formula = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+' + \ ... '0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \ ... ot.IndependentCopula(3)) >>> # Define designs to pre-compute >>> size = 100 >>> inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True) >>> outputDesign = model(inputDesign) >>> # sensitivity analysis algorithm >>> sensitivityAnalysis = ot.JansenSensitivityAlgorithm(inputDesign, outputDesign, size) >>> print(sensitivityAnalysis.getFirstOrderIndices()) [0.403551,0.487879,0.140996]" openturns-1.9/python/src/KDTree.i000066400000000000000000000003261307543307100170240ustar00rootroot00000000000000// SWIG file KDTree.i %{ #include "openturns/KDTree.hxx" %} %include KDTree_doc.i %include openturns/KDTree.hxx namespace OT { %extend KDTree { KDTree(const KDTree & other) { return new OT::KDTree(other); } } } openturns-1.9/python/src/KDTree_doc.i.in000066400000000000000000000045161307543307100202630ustar00rootroot00000000000000%feature("docstring") OT::KDTree "Partition tree data structure. Allows to store and search points fast. Parameters ---------- sample : 2-d sequence of float Points. Examples -------- >>> import openturns as ot >>> sample = ot.Normal(2).getSample(10) >>> tree = ot.KDTree(sample) >>> neighbour = tree.getNearestNeighbour([0.1, 0.2])" // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::isEmpty "Empty flag accessor. Returns ------- empty : bool Whether the collection is empty." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::insert "Insert a point in the tree. Parameters ---------- x : sequence of float Given point." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::getNearestNeighboursIndices "Accessor to the nearest neighbours indices. Parameters ---------- x : sequence of float Given point. k : int Number of points to return sorted : bool Whether to return the points sorted Returns ------- indices : :class:`~openturns.Indices` Indices of the k nearest neighbours." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::getNearestNeighbours "Accessor to the nearest neighbours. Parameters ---------- x : sequence of float Given point. k : int Number of points to return Returns ------- neighbours : :class:`~openturns.Sample` Nearest neighbours." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::getNearestNeighbourIndex "Accessor to the nearest neighbour index. Parameters ---------- x : sequence of float Given point. Returns ------- index : int Index of the nearest neighbour." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::getNearestNeighbour "Accessor to the nearest neighbour. Parameters ---------- x : sequence of float Given point. Returns ------- neighbour : :class:`~openturns.Point` Nearest neighbour." // --------------------------------------------------------------------- %feature("docstring") OT::KDTree::getPoints "Collection of points accessor. Returns ------- points : :class:`~openturns.Sample` Collection of points." openturns-1.9/python/src/KFold.i000066400000000000000000000003161307543307100167040ustar00rootroot00000000000000// SWIG file KFold.i %{ #include "openturns/KFold.hxx" %} %include KFold_doc.i %include openturns/KFold.hxx namespace OT { %extend KFold { KFold(const KFold & other) { return new OT::KFold(other); } } } openturns-1.9/python/src/KFold_doc.i.in000066400000000000000000000016601307543307100201410ustar00rootroot00000000000000%feature("docstring") OT::KFold "K-fold. Available constructors: KFold() KFold(*k*) Parameters ---------- k : positive integer Number of folds in which the sample is splitted. If not provided, default is :math:`k = 10`. See also -------- FittingAlgorithm, CorrectedLeaveOneOut Notes ----- KFold inherits from :class:`~openturns.FittingAlgorithm`. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." // --------------------------------------------------------------------- %feature("docstring") OT::KFold::getK "Accessor to the number of folds. Returns ------- k : integer Number of folds in which the sample is splitted." // --------------------------------------------------------------------- %feature("docstring") OT::KFold::setK "Accessor to the number of folds. Parameters ---------- k : integer Number of folds in which the sample is splitted."openturns-1.9/python/src/KPermutations.i000066400000000000000000000004161307543307100205130ustar00rootroot00000000000000// SWIG file KPermutations.i %{ #include "openturns/KPermutations.hxx" %} %include KPermutations_doc.i %include openturns/KPermutations.hxx namespace OT { %extend KPermutations { KPermutations(const KPermutations & other) { return new OT::KPermutations(other); } } } openturns-1.9/python/src/KPermutationsDistribution.i000066400000000000000000000005561307543307100231200ustar00rootroot00000000000000// SWIG file KPermutationsDistribution.i %{ #include "openturns/KPermutationsDistribution.hxx" %} %include KPermutationsDistribution_doc.i %include openturns/KPermutationsDistribution.hxx namespace OT { %extend KPermutationsDistribution { KPermutationsDistribution(const KPermutationsDistribution & other) { return new OT::KPermutationsDistribution(other); } } } openturns-1.9/python/src/KPermutationsDistribution_doc.i.in000066400000000000000000000037361307543307100243550ustar00rootroot00000000000000%feature("docstring") OT::KPermutationsDistribution "KPermutations distribution. Available constructors: KPermutationsDistribution(*k=1, n=1*) Parameters ---------- k : int, :math:`k > 0` n : int, :math:`n > 0` Notes ----- :class:`~openturns.KPermutationsDistribution` is the discrete uniform distribution on the set of injective functions :math:`(i_0, \hdots, i_{k_1})` from :math:`\{0, \hdots, k-1\}` into :math:`\{0, \hdots, n-1\}`. Its probability density function is defined as: .. math:: \Prob{\vect{X} = (i_0, \hdots, i_{k-1})} = \frac{(n-k)!}{n!} Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{\vect{X}} & = & \frac{n - 1}{2}\\ \Cov{\vect{X}} & = & \left\{ \begin{array}{ll} \displaystyle \frac{n^2-1}{12} \\ \displaystyle -\frac{1 + n}{12} \end{array} \right. \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.KPermutationsDistribution(6, 8) Draw a sample: >>> sample = distribution.getSample(10)" // --------------------------------------------------------------------- %feature("docstring") OT::KPermutationsDistribution::getN "Accessor to the parameter :math:`n`. Returns ------- n : int" // --------------------------------------------------------------------- %feature("docstring") OT::KPermutationsDistribution::getK "Accessor to the parameter :math:`k`. Returns ------- k : int" // --------------------------------------------------------------------- %feature("docstring") OT::KPermutationsDistribution::setN "Accessor to the parameter :math:`n`. Parameters ---------- n : int, :math:`n > 0`" // --------------------------------------------------------------------- %feature("docstring") OT::KPermutationsDistribution::setK "Accessor to the parameter :math:`k`. Parameters ---------- k : int, :math:`k > 0`"openturns-1.9/python/src/KPermutations_doc.i.in000066400000000000000000000044111307543307100217440ustar00rootroot00000000000000%feature("docstring") OT::KPermutations "K permutations generator. Available constructors: KPermutations() KPermutations(*n*) KPermutations(*k, n*) Parameters ---------- k : integer The cardinal of the origin set n : integer The cardinal of the goal set See also -------- CombinatorialGenerator, Combinations, Tuples Notes ----- In the first usage, the generator is built using the default values :math:`k = 1`, :math:`n = 1`. In the second usage, the generator is built using the value :math:`k = n`. In the third usage, the generator produces all the injective functions from a set with :math:`k` elements into a set with :math:`n` elements. If :math:`k = n` it means all the permutations of a set with :math:`n` elements. The number of indices generated is: .. math:: \frac{n!}{(n - k)!} The combinations generator generates a collection of :class:`~openturns.Indices` that contains all the :math:`k!` permutations of all the :math:`\frac{n!}{k! (n - k)!}` subsets with :math:`k` elements of a set with :math:`n` elements. The subsets are generated in lexical order, and for each subset all the corresponding injective functions are generated in lexical order. Examples -------- >>> import openturns as ot >>> kperm = ot.KPermutations(2, 4) >>> print(kperm.generate()) [[0,1],[1,0],[0,2],[2,0],[0,3],[3,0],[1,2],[2,1],[1,3],[3,1],[2,3],[3,2]]#12 " // --------------------------------------------------------------------- %feature("docstring") OT::KPermutations::getK "Accessor to the cardinal of the subsets. Returns ------- k : integer The cardinal of the subsets." // --------------------------------------------------------------------- %feature("docstring") OT::KPermutations::getN "Accessor to the cardinal of the base set. Returns ------- n : integer The cardinal of the base set." // --------------------------------------------------------------------- %feature("docstring") OT::KPermutations::setK "Accessor to the cardinal of the subsets. Parameters ---------- k : integer The cardinal of the subsets." // --------------------------------------------------------------------- %feature("docstring") OT::KPermutations::setN "Accessor to the cardinal of the base set. Parameters ---------- n : integer The cardinal of the base set." openturns-1.9/python/src/KarhunenLoeveAlgorithm.i000066400000000000000000000006141307543307100223230ustar00rootroot00000000000000// SWIG file KarhunenLoeveAlgorithm.i %{ #include "openturns/KarhunenLoeveAlgorithm.hxx" %} %include KarhunenLoeveAlgorithm_doc.i OTTypedInterfaceObjectHelper(KarhunenLoeveAlgorithm) %include openturns/KarhunenLoeveAlgorithm.hxx namespace OT { %extend KarhunenLoeveAlgorithm { KarhunenLoeveAlgorithm(const KarhunenLoeveAlgorithm & other) { return new OT::KarhunenLoeveAlgorithm(other); } } } openturns-1.9/python/src/KarhunenLoeveAlgorithmImplementation.i000066400000000000000000000007061307543307100252330ustar00rootroot00000000000000// SWIG file KarhunenLoeveAlgorithmImplementation.i %{ #include "openturns/KarhunenLoeveAlgorithmImplementation.hxx" %} %include KarhunenLoeveAlgorithmImplementation_doc.i %include openturns/KarhunenLoeveAlgorithmImplementation.hxx namespace OT { %extend KarhunenLoeveAlgorithmImplementation { KarhunenLoeveAlgorithmImplementation(const KarhunenLoeveAlgorithmImplementation & other) { return new OT::KarhunenLoeveAlgorithmImplementation(other); } } } openturns-1.9/python/src/KarhunenLoeveAlgorithmImplementation_doc.i.in000066400000000000000000000153031307543307100264640ustar00rootroot00000000000000%define OT_KarhunenLoeveAlgorithm_doc "Base class for Karhunen Loeve algorithms. Available constructors: KarhunenLoeveAlgorithm(*covModel, s*) Parameters ---------- covModel : :class:`~openturns.CovarianceModel` The covariance model. s : float, positive The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- The Karhunen Loeve decomposition enables to build some finite approximations of stochastic processes which are optimal with respect to the norm :math:`L^2`. We suppose that :math:`C:\cD \times \cD \rightarrow \cS^+_d(\Rset)` is a covariance function defined on :math:`\cD \in \Rset^n`, continuous at :math:`\vect{0}`. The class :class:`~openturns.KarhunenLoeveAlgorithm` enables to determine the solutions of the second kind Fredholm equation associated to :math:`C`, ie to find the :math:`(\lambda_k, \vect{\varphi}_k)_{k \geq 1}` such that: .. math:: :label: fredholm \int_{\cD} \mat{C}(\vect{s},\vect{t}) \vect{\varphi}_k(\vect{t})\, d\vect{t} = \lambda_k \vect{\varphi}_k(\vect{s}) \quad \forall \vect{s} \in \cD where :math:`(\lambda_k)_{k \geq 1}` is a nonincreasing sequence of nonnegative values (the **eigenvalues**) and :math:`(\vect{\varphi}_k)_{k \geq 1}` the associated sequence of **eigenfunctions**, normalized by :math:`\int_{\cD}\|\vect{\varphi}_k(\vect{s})\|^2\di{\vect{s}}=1`. They form an hilbertian basis of :math:`L^2(\cD, \Rset^d)`. The Mercer theorem shows that the covariance function :math:`C` writes: .. math:: :label: covFuncMercer \mat{C}(\vect{s},\vect{t}) = \sum_{k=1}^{+\infty} \lambda_k \vect{\varphi}_k(\vect{s}) \Tr{\vect{\varphi}}_k(\vect{t}) \quad \forall (\vect{s}, \vect{t}) \in \cD \times \cD OpenTURNS uses the threshold :math:`s` in order to select the most significant eigenvalues, ie all the eigenvalues such that :math:`\lambda_k \geq s \lambda_1`. To solve :eq:`fredholm`, we use the functional basis :math:`(\theta_p)_{1 \leq p \leq P}` of :math:`L^2(\cD, \Rset)` with :math:`P` elements defined on :math:`\cD`. We search the solutions of type: .. math:: \tilde{\vect{\varphi}}_k(\vect{t})=\sum_{p=1}^{P} \vect{\phi}_{pk}\theta_p(\vect{t}) where :math:`\vect{\phi}_{pk} \in \Rset^d`. We note: .. math:: \begin{align*} \vect{\Phi}_k = \left( \begin{array}{l} \vect{\phi}_{1k} \\ \dots \\ \vect{\phi}_{Pk} \end{array} \right) \in \Rset^{Pd} \end{align*} and :math:`\mat{\vect{\Phi}} = (\vect{\Phi}_1\, |\, \dots \, | \vect{\Phi}_K)` the matrix of the :math:`K` first modes of the Karhunen Loeve decomposition. The approximated Fredholm problem writes for all :math:`k \geq 1`: .. math:: \int_{\cD} \mat{C}(\vect{s},\vect{t}) \tilde{\vect{\varphi}}_k(\vect{t})\, d\vect{t} = \lambda_k \tilde{\vect{\varphi}}_k(\vect{s}) \quad \forall \vect{s} \in \cD which enables to define the **residual function** :math:`\vect{r}: \cD \rightarrow \Rset^d` defined by .. math:: :label: fredholmApprox \vect{r}(\vect{s}) = \int_{\cD} \mat{C}(\vect{s},\vect{t}) \tilde{\vect{\varphi}}_k(\vect{t})\, d\vect{t} - \lambda_k \tilde{\vect{\varphi}}_k(\vect{s}) The Fredholm problem writes: .. math:: :label: pbResidu \vect{r}(\vect{s}) = \vect{0} \quad \forall \vect{s} \in \cD which is solved either by the **Galerkin** approach or the **collocation** approach. The integrals in :eq:`fredholmApprox` can be evaluated with: - a :math:`P_1` -approach: see :class:`~openturns.KarhunenLoeveP1Algorithm`, - a quadrature approach: see :class:`~openturns.KarhunenLoeveQuadratureAlgorithm`, - a singular values decomposition approach: see :class:`~openturns.KarhunenLoeveSVDAlgorithm`. See also -------- KarhunenLoeveResult" %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation OT_KarhunenLoeveAlgorithm_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_getThreshold_doc "Accessor to the limit ratio on eigenvalues. Returns ------- s : float, positive The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- OpenTURNS truncates the sequence :math:`(\lambda_k, \vect{\varphi}_k)_{k \geq 1}` at the highest index :math:`K` such that :math:`\lambda_K \geq s \lambda_1`." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::getThreshold OT_KarhunenLoeveAlgorithm_getThreshold_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_getCovarianceModel_doc "Accessor to the covariance model. Returns ------- covModel : :class:`~openturns.CovarianceModel` The covariance model." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::getCovarianceModel OT_KarhunenLoeveAlgorithm_getCovarianceModel_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_setThreshold_doc "Accessor to the limit ratio on eigenvalues. Parameters ---------- s : float, positive The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- OpenTURNS truncates the sequence :math:`(\lambda_k, \vect{\varphi}_k)_{k \geq 1}` at the highest index :math:`K` such that :math:`\lambda_K \geq s \lambda_1`." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::setThreshold OT_KarhunenLoeveAlgorithm_setThreshold_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_setCovarianceModel_doc "Accessor to the covariance model. Parameters ---------- covModel : :class:`~openturns.CovarianceModel` The covariance model." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::setCovarianceModel OT_KarhunenLoeveAlgorithm_setCovarianceModel_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_run_doc "Launch the algorithm. Notes ----- It launches the algorithm and creates a :class:`~openturns.KarhunenLoeveResult`, structure containing all the results." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::run OT_KarhunenLoeveAlgorithm_run_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveAlgorithm_getResult_doc "Get the result structure. Returns ------- resKL : :class:`~openturns.KarhunenLoeveResult` The structure containing all the results of the Fredholm problem. Notes ----- The structure contains all the results of the Fredholm problem." %enddef %feature("docstring") OT::KarhunenLoeveAlgorithmImplementation::getResult OT_KarhunenLoeveAlgorithm_getResult_doc openturns-1.9/python/src/KarhunenLoeveAlgorithm_doc.i.in000066400000000000000000000014561307543307100235620ustar00rootroot00000000000000// KarhunenLoeveAlgorithm docstrings are defined in KarhunenLoeveAlgorithmImplementation_doc.i.in %feature("docstring") OT::KarhunenLoeveAlgorithm OT_KarhunenLoeveAlgorithm_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::getThreshold OT_KarhunenLoeveAlgorithm_getThreshold_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::getCovarianceModel OT_KarhunenLoeveAlgorithm_getCovarianceModel_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::setThreshold OT_KarhunenLoeveAlgorithm_setThreshold_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::setCovarianceModel OT_KarhunenLoeveAlgorithm_setCovarianceModel_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::run OT_KarhunenLoeveAlgorithm_run_doc %feature("docstring") OT::KarhunenLoeveAlgorithm::getResult OT_KarhunenLoeveAlgorithm_getResult_doc openturns-1.9/python/src/KarhunenLoeveP1Algorithm.i000066400000000000000000000005461307543307100225300ustar00rootroot00000000000000// SWIG file KarhunenLoeveP1Algorithm.i %{ #include "openturns/KarhunenLoeveP1Algorithm.hxx" %} %include KarhunenLoeveP1Algorithm_doc.i %include openturns/KarhunenLoeveP1Algorithm.hxx namespace OT { %extend KarhunenLoeveP1Algorithm { KarhunenLoeveP1Algorithm(const KarhunenLoeveP1Algorithm & other) { return new OT::KarhunenLoeveP1Algorithm(other); } } } openturns-1.9/python/src/KarhunenLoeveP1Algorithm_doc.i.in000066400000000000000000000054231307543307100237610ustar00rootroot00000000000000%feature("docstring") OT::KarhunenLoeveP1Algorithm "Computation of Karhunen-Loeve decomposition using P1 approximation. Parameters ---------- mesh : :class:`~openturns.Mesh` The mesh :math:`\cD_N` that discretizes the domain :math:`\cD`. covariance : :class:`~openturns.CovarianceModel` The covariance function to decompose. threshold : float The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the sum of the preceeding eigenvalues. The default value is 0. Notes ----- The Karhunen-Loeve :math:`P_1` algorithm solves the Fredholm problem associated to the covariance function :math:`C`: see :class:`~openturns.KarhunenLoeveAlgorithm` to get the notations. The Karhunen-Loeve :math:`P_1` approximation uses the :math:`P_1` functional basis :math:`(\theta_p)_{1 \leq p \leq N}` where :math:`\theta_p: \cD_N \mapsto \Rset` are the basis functions of the :math:`P_1` finite element space associated to :math:`\cD_N`, which vertices are :math:`(\vect{s}_i)_{1 \leq i \leq N}`. The covariance function :math:`\mat{C}` is approximated by its :math:`P_1` approximation :math:`\hat{\mat{C}}` on :math:`\cD_N`: .. math:: \hat{\mat{C}}(\vect{s},\vect{t})=\sum_{\vect{s}_i,\vect{s}_j\in\cV_N}\mat{C}(\vect{s}_i,\vect{s}_j)\theta_i(\vect{s})\theta_j(\vect{t}), \quad \forall \vect{s},\vect{t}\in\cD_N The Galerkin approach and the collocation one are equivalent in the :math:`P_1` approach and both lead to the following formulation: .. math:: \mat{C}\, \mat{G}\, \mat{\Phi} = \mat{\Phi}\, \mat{\Lambda} where :math:`\mat{G} = (G_{ij})_{1\leq i,j \leq N}` with :math:`G_{i\ell}= \int_{\cD} \theta_i(\vect{s})\theta_\ell(\vect{s})\, d\vect{s}`, :math:`\mat{\Lambda}=diag(\vect{\lambda})`. Examples -------- Create a Karhunen-Loeve P1 algorithm: >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) >>> algorithm = ot.KarhunenLoeveP1Algorithm(mesh, model, threshold)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveP1Algorithm::run "Computation of the eigenvalues and eigen functions values at nodes. Examples -------- >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) >>> algorithm = ot.KarhunenLoeveP1Algorithm(mesh, model, threshold) >>> algorithm.run() >>> result = algorithm.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveP1Algorithm::getMesh "Accessor to the mesh. Returns ------- mesh : :class:`~openturns.Mesh` The mesh :math:`\cD_N` that discretizes the domain :math:`\cD`." openturns-1.9/python/src/KarhunenLoeveP1Factory.i000066400000000000000000000005261307543307100222070ustar00rootroot00000000000000// SWIG file KarhunenLoeveP1Factory.i %{ #include "openturns/KarhunenLoeveP1Factory.hxx" %} %include KarhunenLoeveP1Factory_doc.i %include openturns/KarhunenLoeveP1Factory.hxx namespace OT { %extend KarhunenLoeveP1Factory { KarhunenLoeveP1Factory(const KarhunenLoeveP1Factory & other) { return new OT::KarhunenLoeveP1Factory(other); } } } openturns-1.9/python/src/KarhunenLoeveP1Factory_doc.i.in000066400000000000000000000073061307543307100234440ustar00rootroot00000000000000%feature("docstring") OT::KarhunenLoeveP1Factory "Computation of Karhunen-Loeve decomposition using P1 approximation. Parameters ---------- mesh : :class:`~openturns.Mesh` The mesh on which the covariance model and the Karhunen-Loeve eigenfunctions (modes) are discretized. threshold : float The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- The Karhunen-Loeve decomposition using P1 approximation allows to approximate the solution of the second kind Fredholm equation: .. math:: \int_{\cD} \mat{C}(\vect{s},\vect{t})\vect{\phi}_n(\vect{s})\di{\vect{s}}=\lambda_n\vect{\phi}_n(\vect{t}) with :math:`\mat{C}: \cD\times\cD \mapsto \cS^+_d(\Rset)` a given covariance function, :math:`\lambda_n` a nonincreasing sequence of nonnegative values (the **eigenvalues** of the equation) and :math:`\vect{\phi}_n: \cD\mapsto\Rset^d` the associated sequence of **eigenfunctions**, normalized by :math:`\int_{\cD_N}\|\vect{\phi}_n(\vect{s})\|^2\di{\vect{s}}=1`. The Karhunen-Loeve P1 approximation consists in replacing the covariance model :math:`\mat{C}` by its P1 approximation :math:`\hat{\mat{C}}` on a mesh :math:`\cD_N` which approximates the domain :math:`\cD`: .. math:: \forall \vect{s},\vect{t}\in\cD_N,\quad \hat{\mat{C}}(\vect{s},\vect{t})=\sum_{\vect{\xi}_i,\vect{\xi}_j\in\cV_N}\mat{C}(\vect{\xi}_i,\vect{\xi}_j)\theta_i(\vect{s})\theta_j(\vect{t}) Where :math:`\theta_n: \cD_N \mapsto \Rset` are the basis functions of the P1 finite element space associated to :math:`\cD_N`, see :class:`~openturns.P1LagrangeEvaluation`. Examples -------- Create a Karhunen-Loeve P1 factory: >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> factory = ot.KarhunenLoeveP1Factory(mesh, threshold)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveP1Factory::build "Computation of the eigenvalues and eigen functions. Parameters ---------- C : :class:`~openturns.CovarianceModel`, :math:`\mat{C}: \cD\times\cD \mapsto \cS^+_d(\Rset)` The covariance model. ev : :class:`~openturns.Point` The eigenvalues :math:`\lambda_n` in descending order such that :math:`\lambda_n/\lambda_0\geq\mathrm{threshold}` Returns ------- functions : :class:`~openturns.Basis` Eigen functions of the covariance model as a basis of functions using :class:`~openturns.P1LagrangeEvaluation`. Examples -------- >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> factory = ot.KarhunenLoeveP1Factory(mesh, threshold) >>> model = ot.AbsoluteExponential([1.0]*2) >>> ev = ot.Point() >>> functions = factory.build(model, ev)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveP1Factory::buildAsProcessSample "Computation of the eigenvalues and eigen functions values at nodes. Parameters ---------- C : :class:`~openturns.CovarianceModel`, :math:`\mat{C}: \cD\times\cD \mapsto \cS^+_d(\Rset)` The covariance model. ev : :class:`~openturns.Point` The eigenvalues :math:`\lambda_n` in descending order such that :math:`\lambda_n\geq\mathrm{threshold}\,\lambda_0` Returns ------- modes : :class:`~openturns.ProcessSample` Values of the eigen functions at the nodes :math:`\cV_N` of the mesh :math:`\cD_N`. Examples -------- >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> factory = ot.KarhunenLoeveP1Factory(mesh, threshold) >>> model = ot.AbsoluteExponential([1.0]*2) >>> ev = ot.Point() >>> modes = factory.buildAsProcessSample(model, ev)" openturns-1.9/python/src/KarhunenLoeveQuadratureAlgorithm.i000066400000000000000000000006461307543307100243660ustar00rootroot00000000000000// SWIG file KarhunenLoeveQuadratureAlgorithm.i %{ #include "openturns/KarhunenLoeveQuadratureAlgorithm.hxx" %} %include KarhunenLoeveQuadratureAlgorithm_doc.i %include openturns/KarhunenLoeveQuadratureAlgorithm.hxx namespace OT { %extend KarhunenLoeveQuadratureAlgorithm { KarhunenLoeveQuadratureAlgorithm(const KarhunenLoeveQuadratureAlgorithm & other) { return new OT::KarhunenLoeveQuadratureAlgorithm(other); } } } openturns-1.9/python/src/KarhunenLoeveQuadratureAlgorithm_doc.i.in000066400000000000000000000140461307543307100256170ustar00rootroot00000000000000%feature("docstring") OT::KarhunenLoeveQuadratureAlgorithm "Computation of Karhunen-Loeve decomposition using Quadrature approximation. Available constructors: KarhunenLoeveQuadratureAlgorithm(*domain, covariance, experiment, basis, basisSize, mustScale, threshold*) KarhunenLoeveQuadratureAlgorithm(*domain, covariance, marginalDegree, threshold*) Parameters ---------- domain : :class:`~openturns.Domain` The domain on which the covariance model and the Karhunen-Loeve eigenfunctions (modes) are discretized. covariance : :class:`~openturns.CovarianceModel` The covariance function to decompose. experiment : :class:`~openturns.WeightedExperiment` The points and weights used in the quadrature approximation. basis : :class:`~openturns.Basis` The basis in wich the eigenfunctions are projected. basisSize : integer The number of elements of the basis considered. marginalDegree : integer The maximum degree to take into account in the tensorized Legendre basis. mustScale : boolean Flag to tell if the bounding box of the weighted experiment and the domain have to be maped or not. threshold : float The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the sum of the preceeding eigenvalues. The default value is 0. Notes ----- The Karhunen-Loeve quadrature algorithm solves the Fredholm problem associated to the covariance function :math:`C`: see :class:`~openturns.KarhunenLoeveAlgorithm` to get the notations. The Karhunen-Loeve quadrature approximation consists in replacing the integral by a quadrature approximation: if :math:`(\omega_\ell, \vect{\xi}_\ell)_{1 \leq \ell \leq L}` is the weighted experiment (see :class:`~openturns.WeightedExperiment`) associated to the measure :math:`\mu`, then for all functions measurable wrt :math:`\mu`, we have: .. math:: \int_{\Rset^n} f(\vect{x}) \mu(\vect{x})\, d\vect{x} \simeq \sum_{\ell=1}^{\ell=L} \omega_\ell f(\vect{\xi}_\ell) If we note :math:`\eta_{\ell}=\omega_{\ell}\dfrac{1_{\cD}(\vect{\xi}_{\ell})}{\mu(\vect{\xi}_{\ell})}`, we build a more general quadrature approximation :math:`(\eta_\ell, \xi_\ell)_{1 \leq l \leq L}` such that: .. math:: \int_{\cD} f(\vect{t}) \, d\vect{t} \simeq \sum_{\ell=1}^L \eta_\ell f(\vect{\xi}_\ell) where only the points :math:`\vect{\xi}_\ell \in \cD` are considered. We introduce the matrices :math:`\mat{\Theta}=(\mat{\Theta}_{ij})_{1 \leq i \leq L, 1 \leq j \leq P} \in \cM_{Ld, Pd}(\Rset)` such that :math:`\mat{\Theta}_{ij} = \theta_{j}(\vect{\xi}_i)\mat{I}_d`, :math:`\mat{C}_{\ell, \ell'} = \mat{C}(\vect{\xi}_{\ell},\vect{\xi}_{\ell'})` and :math:`\mat{W}= \mathrm{diag} (\mat{W}_{ii})_{1 \leq i \leq L} \in \cM_{Ld, Ld}(\Rset)` such that :math:`\mat{W}_{ii} = \eta_i \mat{I}_d`. The normalisation constraint :math:`\|\vect{\varphi}_k\|^2_{L^2(\cD, \Rset^d)}=1` ang the orthogonality of the :math:`\vect{\varphi}_k` in :math:`L^2(\cD, \Rset^d)` leads to: .. math:: :label: contNorm \Tr{\vect{\Phi}} \,\Tr{\mat{\Theta}} \,\mat{W}\, \mat{\Theta} \,\vect{\Phi}=\mat{I} The **Galerkin** approach leads to the following generalized eigen value problem: .. math:: :label: EqFinQuadGalerkin \Tr{\mat{\Theta}} \,\mat{W} \,\mat{C} \,\mat{W} \,\mat{\Theta}\,\vect{\Phi}_k = \lambda_k \Tr{\mat{\Theta}}\, \mat{W}\,\mat{\Theta}\,\vect{\Phi}_k where :math:`\Tr{\mat{\Theta}}\, \mat{W} \,\mat{C} \, \mat{W}\, \mat{\Theta}` and :math:`\Tr{\mat{\Theta}}\, \mat{W}\, \mat{\Theta}\in \cM_{Pd,Pd}(\Rset)`. The **collocation** approach leads to the following generalized eigen value problem: .. math:: :label: EqFinQuadCollocation \mat{C}\, \mat{W} \,\mat{\Theta}\, \vect{\Phi}_k = \lambda_k \mat{\Theta}\,\vect{\Phi}_k Equations :eq:`EqFinQuadGalerkin` and :eq:`EqFinQuadCollocation` are equivalent when :math:`\mat{\Theta}` is invertible. OpenTURNS solves the equation :eq:`EqFinQuadGalerkin`. The second constructor is a short-hand to the first one, where *basis* is the tensorized Legendre basis (see :class:`~openturns.OrthogonalProductPolynomialFactory` and :class:`~openturns.LegendreFactory`), *experiment* is a tensorized Gauss-Legendre quadrature (see :class:`~openturns.GaussProductExperiment`), *basisSize* is equal to *marginalDegree* to the power the dimension of *domain* and *mustScale* is set to *True*. Examples -------- Discretize the domain :math:`\cD` and create a covariance model: >>> import openturns as ot >>> domain = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) Give the basis used to decompose the eigenfunctions: here, the 10 first Legendre polynomials family: >>> basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()]*2) >>> basisSize = 10 Create the weighted experiment of the quadrature approximation: here, a Monte Carlo experiment from the measure orthogonal wrt the Legendre polynomials family: >>> experiment = ot.MonteCarloExperiment(basis.getMeasure(), 1000) Create the Karhunen-Loeve Quadrature algorithm: >>> algorithm = ot.KarhunenLoeveQuadratureAlgorithm(domain, model, experiment, basis, basisSize, True, threshold)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveQuadratureAlgorithm::run "Computation of the eigenvalues and eigenfunctions values at the quadrature points. Examples -------- >>> import openturns as ot >>> domain = ot.Interval([-1.0]*2, [1.0]*2) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) >>> basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()]*2) >>> experiment = ot.MonteCarloExperiment(basis.getMeasure(), 1000) >>> algorithm = ot.KarhunenLoeveQuadratureAlgorithm(domain, model, experiment, basis, 10, True, threshold) >>> algorithm.run() >>> result = algorithm.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveQuadratureAlgorithm::getDomain "Accessor to the domain. Returns ------- domain : :class:`~openturns.Domain` The domain :math:`\cD_N` that discretizes the domin :math:`\cD`." openturns-1.9/python/src/KarhunenLoeveQuadratureFactory.i000066400000000000000000000006261307543307100240450ustar00rootroot00000000000000// SWIG file KarhunenLoeveQuadratureFactory.i %{ #include "openturns/KarhunenLoeveQuadratureFactory.hxx" %} %include KarhunenLoeveQuadratureFactory_doc.i %include openturns/KarhunenLoeveQuadratureFactory.hxx namespace OT { %extend KarhunenLoeveQuadratureFactory { KarhunenLoeveQuadratureFactory(const KarhunenLoeveQuadratureFactory & other) { return new OT::KarhunenLoeveQuadratureFactory(other); } } } openturns-1.9/python/src/KarhunenLoeveQuadratureFactory_doc.i.in000066400000000000000000000102321307543307100252710ustar00rootroot00000000000000%feature("docstring") OT::KarhunenLoeveQuadratureFactory "Computation of Karhunen-Loeve decomposition using Quadrature approximation. Parameters ---------- domain : :class:`~openturns.Domain` The domain on which the Fredholm equation is defined. experiment : :class:`~openturns.WeightedExperiment` The algorithm used to discretize the integrale defining the Fredholm equation. basis : :class:`~openturns.Basis` The basis from which the base functions are taken to define the finite space on which live the approximate eigenfunctions. basisSize : int The dimension of the finite approximation space. mustScale : bool Flag to tell if a scaling function has to be inserted in the base functions. threshold : float The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- The Karhunen-Loeve decomposition using Quadrature approximation allows to approximate the solution of the second kind Fredholm equation: .. math:: \int_{\cD} \mat{C}(\vect{s},\vect{t})\vect{\phi}_n(\vect{s})\di{\vect{s}}=\lambda_n\vect{\phi}_n(\vect{t}) with :math:`\mat{C}: \cD\times\cD \mapsto \cS^+_d(\Rset)` a given covariance function, :math:`\lambda_n` a nonincreasing sequence of nonnegative values (the **eigenvalues** of the equation) and :math:`\vect{\phi}_n: \cD\mapsto\Rset^d` the associated sequence of **eigenfunctions**, normalized by :math:`\int_{\cD_N}\|\vect{\phi}_n(\vect{s})\|^2\di{\vect{s}}=1`. The Karhunen-Loeve quadrature approximation consists in replacing the integrals defining the Fredholm equation by its quadrature approximation counterpart: .. math:: \int_{\Rset^d} \mat{C}(\vect{s},\vect{t})\vect{\phi}_n(\vect{s})\di{\vect{s}}\simeq\sum_{\ell=1}^L\omega_{\ell}\mat{C}(\vect{\xi}_{\ell},\vect{t})\vect{\phi}_n(\vect{\xi}_{\ell})\dfrac{\fcar{\vect{\xi}_{\ell}}{\cD}}{p(\vect{\xi}_{\ell})} Where :math:`(\omega_{\ell},\vect{\xi}_{\ell})_{\ell=1,\dots,L}` is a quadrature formula wrt the density function :math:`p` such that its support contains :math:`\cD`, ie the discrete measure :math:`\sum_{\ell=1}^L\omega_{\ell}\delta_{\vect{\xi}_{\ell}}` is an approximation of the probability measure defined by :math:`p`. The eigenfunctions :math:`\phi_n` are decomposed into a functional basis :math:`(\theta_p)_{p=1,\dots,P}`: .. math:: \forall \vect{s}\in\cD,\quad \phi_n(\vect{s})=\sum_{p=1}^P\vect{\alpha}_n^p\theta_p(\vect{s}) and the associated coefficients are found using a Galerkin projection on the space generated by :math:`(\theta_p)_{p=1,\dots,P}`. Examples -------- Create a Karhunen-Loeve Quadrature factory: >>> import openturns as ot >>> domain = ot.Interval([-1.0]*2, [1.0]*2) >>> basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()]*2) >>> basisSize = 10 >>> samplingSize = 20 >>> experiment = ot.LHSExperiment(basis.getMeasure(), samplingSize) >>> mustScale = False >>> threshold = 0.01 >>> factory = ot.KarhunenLoeveQuadratureFactory(domain, experiment, basis, basisSize, mustScale, threshold)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveQuadratureFactory::build "Computation of the eigenvalues and eigen functions. Parameters ---------- C : :class:`~openturns.CovarianceModel`, :math:`\mat{C}: \cD\times\cD \mapsto \cS^+_d(\Rset)` The covariance model. ev : :class:`~openturns.Point` The eigenvalues :math:`\lambda_n` in descending order such that :math:`\lambda_n/\lambda_0\geq\mathrm{threshold}` Returns ------- functions : :class:`~openturns.Basis` Eigen functions of the covariance model as a basis of functions using :class:`~openturns.QuadratureLagrangeEvaluationImplementation`. Examples -------- >>> import openturns as ot >>> domain = ot.Interval([-1.0]*2, [1.0]*2) >>> basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()]*2) >>> basisSize = 10 >>> samplingSize = 20 >>> experiment = ot.LHSExperiment(basis.getMeasure(), samplingSize) >>> mustScale = False >>> threshold = 0.01 >>> factory = ot.KarhunenLoeveQuadratureFactory(domain, experiment, basis, basisSize, mustScale, threshold) >>> model = ot.AbsoluteExponential([1.0]*2) >>> ev = ot.Point() >>> functions = factory.build(model, ev)" openturns-1.9/python/src/KarhunenLoeveResult.i000066400000000000000000000005611307543307100216540ustar00rootroot00000000000000// SWIG file KarhunenLoeveResult.i %{ #include "openturns/KarhunenLoeveResult.hxx" %} %include KarhunenLoeveResult_doc.i OTTypedInterfaceObjectHelper(KarhunenLoeveResult) %include openturns/KarhunenLoeveResult.hxx namespace OT { %extend KarhunenLoeveResult { KarhunenLoeveResult(const KarhunenLoeveResult & other) { return new OT::KarhunenLoeveResult(other); } } } openturns-1.9/python/src/KarhunenLoeveResultImplementation.i000066400000000000000000000006561307543307100245670ustar00rootroot00000000000000// SWIG file KarhunenLoeveResultImplementation.i %{ #include "openturns/KarhunenLoeveResultImplementation.hxx" %} %include KarhunenLoeveResultImplementation_doc.i %include openturns/KarhunenLoeveResultImplementation.hxx namespace OT { %extend KarhunenLoeveResultImplementation { KarhunenLoeveResultImplementation(const KarhunenLoeveResultImplementation & other) { return new OT::KarhunenLoeveResultImplementation(other); } } } openturns-1.9/python/src/KarhunenLoeveResultImplementation_doc.i.in000066400000000000000000000254171307543307100260230ustar00rootroot00000000000000%define OT_KarhunenLoeveResult_doc "Result structure of a Karhunen Loeve algorithm. Available constructors: KarhunenLoeveResult(*implementation*) KarhunenLoeveResult(*covModel, s, lambda, modes, modesAsProcessSample, projection*) Parameters ---------- implementation : :class:`~openturns.KarhunenLoeveResultImplementation` A specific implementation. covModel : :class:`~openturns.CovarianceModel` The covariance model. s : float, positive The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. lambda : :class:`~openturns.Point` The first eigenvalues of the Fredholm problem. modes : :class:`~openturns.Basis` The first modes of the Fredholm problem. modesAsProcessSample : :class:`~openturns.ProcessSample` The values of the modes on the mesh associated to the KarhunenLoeve algorithm. projection : :class:`~openturns.Matrix` The projection matrix. Notes ----- Structure generally created by the method run() of a :class:`~openturns.KarhunenLoeveAlgorithm` and obtained thanks to the method getResult(). We consider :math:`C:\cD \times \cD \rightarrow \cS^+_d(\Rset)` a covariance function defined on :math:`\cD \in \Rset^n`, continuous at :math:`\vect{0}`. We note :math:`(\lambda_k, \vect{\varphi}_k)_{1 \leq k \leq K}` the solutions of the Fredholm problem associated to :math:`C` where *K* is the highest index :math:`K` such that :math:`\lambda_K \geq s \lambda_1`. We note :math:`\vect{\lambda}` the eigenvalues sequence and :math:`\vect{\varphi}` the eigenfunctions sequence. Then we define the linear projection function :math:`\pi_{ \vect{\lambda}, \vect{\varphi}}` by: .. math:: :label: projection \pi_{\vect{\lambda}, \vect{\varphi}}: \left| \begin{array}{ccl} L^2(\cD, \Rset^d) & \rightarrow & \cS^{\Nset} \\ f & \mapsto &\left(\dfrac{1}{\sqrt{\lambda_k}}\int_{\cD}f(\vect{t}) \vect{\varphi}_k(\vect{t})\, d\vect{t}\right)_{k \geq 1} \end{array} \right. where :math:`\cS^{\Nset} = \left \{ (\zeta_k)_{k \geq 1} \in \Rset^{\Nset} \, | \, \sum_{k=1}^{\infty}\lambda_k \zeta_k^2 < +\infty \right \}`. The integral of :eq:`projection` can be discretized according to the chosen Karhunen Loeve algorithm: on the vertices of the domain :math:`\cD_N` in the case of a :math:`P_1` algorithm, on the weighted experiment in the case of the quadrature method. Then function :math:`f` can be reduced to its values on that discretization domain. Besides, we can restrict the sequences :math:`(\vect{\lambda}, \vect{\varphi})` to the :math:`K` terms associated to the highest eigenvalues. Thus, following these discretizations, the function :math:`\pi_{\vect{\lambda}, \vect{\varphi}}` has a matrical representation. The inverse of :math:`\pi_{\vect{\lambda}, \vect{\varphi}}` is the lift function defined by: .. math:: :label: lift \pi_{\vect{\lambda}, \vect{\varphi}}^{-1}: \left| \begin{array}{ccl} \cS^{\Nset} & \rightarrow & L^2(\cD, \Rset^d)\\ (\xi_k)_{k \geq 1} & \mapsto & f(.) = \sum_{k \geq 1} \sqrt{\lambda_k}\xi_k \vect{\varphi}_k(.) \end{array} \right. If the function :math:`f(.) = X(\omega_0, .)` where :math:`X` is the centered process which covariance function is associated to the eigenvalues and eigenfunctions :math:`(\vect{\lambda}, \vect{\varphi})`, then the *getEigenValues* method enables to obtain the :math:`K` first eigenvalues of the Karhunen Loeve decomposition of :math:`X` and the method *getModes* enables to get the associated modes. Examples -------- >>> import openturns as ot >>> N = 256 >>> mesh = ot.IntervalMesher([N - 1]).build(ot.Interval(-1, 1)) >>> covariance_X = ot.AbsoluteExponential([1]) >>> process_X = ot.GaussianProcess(covariance_X, mesh) >>> threshold = 0.001 >>> algo_X = ot.KarhunenLoeveP1Algorithm(mesh, covariance_X, threshold) >>> algo_X.run() >>> result_X = algo_X.getResult()" %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation OT_KarhunenLoeveResult_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getThreshold_doc "Accessor to the limit ratio on eigenvalues. Returns ------- s : float, positive The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the maximum eigenvalue. Notes ----- OpenTURNS truncates the sequence :math:`(\lambda_k, \vect{\varphi}_k)_{k \geq 1}` at the highest index :math:`K` such that :math:`\lambda_K \geq s \lambda_1`." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getThreshold OT_KarhunenLoeveResult_getThreshold_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getCovarianceModel_doc "Accessor to the covariance model. Returns ------- covModel : :class:`~openturns.CovarianceModel` The covariance model." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getCovarianceModel OT_KarhunenLoeveResult_getCovarianceModel_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getEigenValues_doc "Accessor to the eigen values of the Karhunen Loeve decomposition. Returns ------- eigenVal : :class:`~openturns.Point` The most significant eigenvalues. Notes ----- OpenTURNS truncates the sequence :math:`(\lambda_k, \vect{\varphi}_k)_{k \geq 1}` at the highest index :math:`K` such that :math:`\lambda_K \geq s \lambda_1` where :math:`s` is the threshold fixed by the User." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getEigenValues OT_KarhunenLoeveResult_getEigenValues_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getModesAsProcessSample_doc "Accessor to the modes as a process sample. Returns ------- modesAsProcessSample : :class:`~openturns.ProcessSample` The values of each mode on a mesh whose vertices were used to discretize the Fredholm equation. Notes ----- The modes :math:`(\vect{\varphi}_k)_{1 \leq k \leq K}` are evaluated on the vertices of the mesh defining the process sample. The values of the i-th field are the values of the i-th mode on these vertices. The mesh corresponds to the discretization points of the integral in :eq:`projection`." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getModesAsProcessSample OT_KarhunenLoeveResult_getModesAsProcessSample_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getScaledModesAsProcessSample_doc "Accessor to the scaled modes as a process sample. Returns ------- modesAsProcessSample : :class:`~openturns.ProcessSample` The values of each scaled mode on a mesh whose vertices were used to discretize the Fredholm equation. Notes ----- The modes :math:`(\vect{\varphi}_k)_{1 \leq k \leq K}` are evaluated on the vertices of the mesh defining the process sample. The values of the i-th field are the values of the i-th mode on these vertices. The mesh corresponds to the discretization points of the integral in :eq:`projection`." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getScaledModesAsProcessSample OT_KarhunenLoeveResult_getScaledModesAsProcessSample_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getProjectionMatrix_doc "Accessor to the projection matrix. Returns ------- projection : :class:`~openturns.Matrix` The projection matrix associated to the discretized version of :eq:`projection`." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getProjectionMatrix OT_KarhunenLoeveResult_getProjectionMatrix_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_project_doc "Project a function or a field on the eigen modes basis. Available constructors: project(*function*) project(*field*) Parameters ---------- function : :class:`~openturns.Function` A function. field : :class:`~openturns.Field` A field. Notes ----- The *project* method calculates the projection :eq:`projection` on a field or a function where only the first :math:`K` elements of the sequence are calculated. :math:`K` is determined by the :math:`s` parameter fixed by the User." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::project OT_KarhunenLoeveResult_project_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getModes_doc "Get the modes as functions. Returns ------- modes : :class:`~openturns.Basis` The truncated basis :math:`(\vect{\varphi}_k)_{1 \leq k \leq K}`. Notes ----- The basis is truncated to :math:`(\vect{\varphi}_k)_{1 \leq k \leq K}` where :math:`K` is fixed by the User through the :math:`s` parameter." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getModes OT_KarhunenLoeveResult_getModes_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_getScaledModes_doc "Get the modes as functions scaled by the square-root of the corresponding eigenvalue. Returns ------- modes : :class:`~openturns.Basis` The truncated basis :math:`(\sqrt{\lambda_k}\vect{\varphi}_k)_{1 \leq k \leq K}`. Notes ----- The basis is truncated to :math:`(\sqrt{\lambda_k}\vect{\varphi}_k)_{1 \leq k \leq K}` where :math:`K` is fixed by the User through the :math:`s` parameter." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::getScaledModes OT_KarhunenLoeveResult_getScaledModes_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_lift_doc "Lift the coefficients into a function. Parameters ---------- coef : :class:`~openturns.Point` The coefficients :math:`(\xi_1, \dots, \xi_K)`. Returns ------- modes : :class:`~openturns.Function` The function :math:`f` defined in :eq:`lift`. Notes ----- The sum defining :math:`f` is truncated to the first :math:`K` terms, where :math:`K` is fixed by the User through the :math:`s` parameter." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::lift OT_KarhunenLoeveResult_lift_doc // --------------------------------------------------------------------- %define OT_KarhunenLoeveResult_liftAsField_doc "Lift the coefficients into a field. Parameters ---------- coef : :class:`~openturns.Point` The coefficients :math:`(\xi_1, \dots, \xi_K)`. Returns ------- modes : :class:`~openturns.Field` The function :math:`f` defined in :eq:`lift` evaluated on the mesh associated to the discretization of :eq:`projection`. Notes ----- The sum defining :math:`f` is truncated to the first :math:`K` terms, where :math:`K` is fixed by the User through the :math:`s` parameter." %enddef %feature("docstring") OT::KarhunenLoeveResultImplementation::liftAsField OT_KarhunenLoeveResult_liftAsField_doc openturns-1.9/python/src/KarhunenLoeveResult_doc.i.in000066400000000000000000000024501307543307100231050ustar00rootroot00000000000000// KarhunenLoeveResult docstrings are defined in KarhunenLoeveResultImplementation_doc.i.in %feature("docstring") OT::KarhunenLoeveResult OT_KarhunenLoeveResult_doc %feature("docstring") OT::KarhunenLoeveResult::getThreshold OT_KarhunenLoeveResult_getThreshold_doc %feature("docstring") OT::KarhunenLoeveResult::getCovarianceModel OT_KarhunenLoeveResult_getCovarianceModel_doc %feature("docstring") OT::KarhunenLoeveResult::getEigenValues OT_KarhunenLoeveResult_getEigenValues_doc %feature("docstring") OT::KarhunenLoeveResult::getModes OT_KarhunenLoeveResult_getModes_doc %feature("docstring") OT::KarhunenLoeveResult::getScaledModes OT_KarhunenLoeveResult_getScaledModes_doc %feature("docstring") OT::KarhunenLoeveResult::getModesAsProcessSample OT_KarhunenLoeveResult_getModesAsProcessSample_doc %feature("docstring") OT::KarhunenLoeveResult::getScaledModesAsProcessSample OT_KarhunenLoeveResult_getScaledModesAsProcessSample_doc %feature("docstring") OT::KarhunenLoeveResult::getProjectionMatrix OT_KarhunenLoeveResult_getProjectionMatrix_doc %feature("docstring") OT::KarhunenLoeveResult::project OT_KarhunenLoeveResult_project_doc %feature("docstring") OT::KarhunenLoeveResult::lift OT_KarhunenLoeveResult_lift_doc %feature("docstring") OT::KarhunenLoeveResult::liftAsField OT_KarhunenLoeveResult_liftAsField_doc openturns-1.9/python/src/KarhunenLoeveSVDAlgorithm.i000066400000000000000000000005561307543307100227050ustar00rootroot00000000000000// SWIG file KarhunenLoeveSVDAlgorithm.i %{ #include "openturns/KarhunenLoeveSVDAlgorithm.hxx" %} %include KarhunenLoeveSVDAlgorithm_doc.i %include openturns/KarhunenLoeveSVDAlgorithm.hxx namespace OT { %extend KarhunenLoeveSVDAlgorithm { KarhunenLoeveSVDAlgorithm(const KarhunenLoeveSVDAlgorithm & other) { return new OT::KarhunenLoeveSVDAlgorithm(other); } } } openturns-1.9/python/src/KarhunenLoeveSVDAlgorithm_doc.i.in000066400000000000000000000123071307543307100241340ustar00rootroot00000000000000%feature("docstring") OT::KarhunenLoeveSVDAlgorithm "Computation of Karhunen-Loeve decomposition using SVD approximation. Available constructors: KarhunenLoeveSVDAlgorithm(*sample, threshold, centeredFlag*) KarhunenLoeveSVDAlgorithm(*sample, verticesWeights, threshold, centeredFlag*) KarhunenLoeveSVDAlgorithm(*sample, verticesWeights, sampleWeights, threshold, centeredFlag*) Parameters ---------- sample : :class:`~openturns.ProcessSample` The sample containing the observations. verticesWeights : sequence of float The weights associated to the vertices of the mesh defining the sample. sampleWeights : sequence of float The weights associated to the fields of the sample. threshold : float The minimal relative amplitude of the eigenvalues to consider in the decomposition wrt the sum of the preceeding eigenvalues. The default value is 0. centeredFlag : logical Flag to tell if the sample is drawn according to a centered process or if it has to be centered using the empirical mean. The default value is *False*. Notes ----- The Karhunen-Loeve SVD algorithm solves the Fredholm problem associated to the covariance function :math:`C`: see :class:`~openturns.KarhunenLoeveAlgorithm` to get the notations. The SVD approach is a particular case of the quadrature approach (see :class:`~openturns.KarhunenLoeveQuadratureAlgorithm`) where we consider the functional basis :math:`((\vect{\theta}_p^j(\vect{s}))_{1 \leq j \leq d, 1 \leq p \leq P}` of :math:`L^2(\cD, \Rset^d)` defined on :math:`\cD` by: .. math:: \vect{\theta}_p^j(\vect{s})= \left[\mat{C}(\vect{s}, \vect{s}_p) \right]_{:, j} The SVD approach is used when the covariance function is not explicitely known but only through :math:`K` fields of the associated stochastic process :math:`\vect{X}`: :math:`(\vect{X}_1, \dots, \vect{X}_K)`. It consists in : - approximating :math:`\mat{C}` by its empirical estimator :math:`\dfrac{1}{\tilde{K}} \mat{X}\, \Tr{\mat{X}}` where :math:`\mat{X}~=~(\vect{X}_1 | \dots | \vect{X}_K)` and :math:`\tilde{K}=K` if the process is centered and :math:`\tilde{K}=K-1` otherwise; - taking the :math:`L` vertices of the mesh of :math:`\vect{X}` as the :math:`L` quadrature points. We suppose now that :math:`K < dL`, and we note :math:`\mat{Y} = \sqrt{\mat{W}} \,\mat{X}`. As the matrix :math:`\mat{\Theta} = \mat{C}` is invertible, the Galerkin and collocation approaches are equivalent and both lead to the following singular value problem for :math:`\mat{Y}`: .. math:: :label: QuadCollDim1_ter \mat{Y}\,\Tr{\mat{Y}}\,\mat{\Psi}_k & = \tilde{K} \lambda_k \mat{\Psi}_k The SVD decomposition of :math:`\mat{Y}\in \mathcal{M}_{dL,\tilde{K}}(\Rset)` writes: .. math:: \mat{Y} = \mat{U}\, \mat{\Sigma} \, \Tr{\mat{V}} where we have :math:`\mat{U} \in \mathcal{M}_{dL,\tilde{K}}(\Rset)`, :math:`\mat{\Sigma}\in \mathcal{M}_{\tilde{K},\tilde{K}}(\Rset)`, :math:`\mat{V} \in \mathcal{M}_{\tilde{K},\tilde{K}}(\Rset)` such that : - :math:`\Tr{\mat{V}}\mat{V} =\mat{V}\Tr{\mat{V}}= \mat{I}_{\tilde{K}}`, - :math:`\Tr{\mat{U}}\mat{U} = \mat{I}_{\tilde{K}}` , - :math:`\mat{\Sigma} = diag(\sigma_1, \dots, \sigma_{\tilde{K}})`. Then the columns of :math:`\mat{U}` are the eigen vectors of :math:`\mat{Y}\Tr{\mat{Y}}` associated to the eigen values :math:`\sigma_k^2`. We deduce the modes and eigen values of the Fredholm problem for :math:`k \leq \tilde{K}`: .. math:: \begin{align*} \mat{\Phi}_k = \dfrac{1}{\lambda_k} \sqrt{\mat{W}}\, \mat{U}_k \lambda_k = \dfrac{\sigma_k^2}{\tilde{K}} \end{align*} We have: .. math:: \tilde{\vect{\varphi}}_k(\vect{t})= \sum_{\ell=1}^L C(\vect{t}, \vect{\xi}_\ell) \vect{\phi}_{\ell,k} \quad \mbox{pour} \quad k \leq \tilde{K} Examples -------- Create a Karhunen-Loeve SVD algorithm: >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) >>> sample = ot.GaussianProcess(model, mesh).getSample(8) >>> algorithm = ot.KarhunenLoeveSVDAlgorithm(sample, threshold)" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveSVDAlgorithm::run "Computation of the eigenvalues and eigen functions values at nodes. Examples -------- >>> import openturns as ot >>> mesh = ot.IntervalMesher([10]*2).build(ot.Interval([-1.0]*2, [1.0]*2)) >>> threshold = 0.01 >>> model = ot.AbsoluteExponential([1.0]*2) >>> sample = ot.GaussianProcess(model, mesh).getSample(8) >>> algorithm = ot.KarhunenLoeveSVDAlgorithm(sample, threshold) >>> algorithm.run() >>> result = algorithm.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveSVDAlgorithm::getSample "Accessor to the process sample. Returns ------- sample : :class:`~openturns.ProcessSample` The process sample containing the observations of the process. " // --------------------------------------------------------------------- %feature("docstring") OT::KarhunenLoeveSVDAlgorithm::getWeights "Accessor to the weights. Returns ------- weights : :class:`~openturns.Point` The points defining the quadrature rule supported by the mesh of the sample. " openturns-1.9/python/src/KernelMixture.i000066400000000000000000000007751307543307100205140ustar00rootroot00000000000000// SWIG file KernelMixture.i %{ #include "openturns/KernelMixture.hxx" %} %include KernelMixture_doc.i %include openturns/KernelMixture.hxx namespace OT { %extend KernelMixture { KernelMixture(const KernelMixture & other) { return new OT::KernelMixture(other); } } } namespace OT { %extend KernelMixture { KernelMixture(const OT::DistributionImplementation & kernel, const OT::Point & bandwidth, const OT::Sample & sample) { return new OT::KernelMixture(OT::Distribution(kernel), bandwidth, sample); } } } openturns-1.9/python/src/KernelMixture_doc.i.in000066400000000000000000000053061307543307100217410ustar00rootroot00000000000000%feature("docstring") OT::KernelMixture "Build a particular linear combination of probability density functions. Parameters ---------- kernel : :class:`~openturns.Distribution` Univariate distribution of the kernel that will be used, :math:`K`. bandwidth : sequence of float Contains the bandwith in each direction, :math:`(h_1, \dots, h_d)`. sample : 2-d sequence of float The data on wich each kernel is centered, :math:`(\vect{X}_1, \dots, \vect{X}_N) \in \Rset^d`. Notes ----- A *KernelMixture* is a particular *Mixture*: all the weights are identical and the all the probability density functions of the combination are of the same family. They are centered on :math:`N` points. The treatment is optimized. The pdf of a *KernelMixture* is defined by: ..math:: f(\vect{x}) = \sum_{i=1}^N \dfrac{1}{N} \Pi_{j=1}^d \dfrac{1}{h_j}K(\frac{x^j-X^j_i}{h}) where :math:`N` is the number of points in the sample :math:`(\vect{X}_1, \dots, \vect{X}_N) \in \Rset^d` and :math:`K` a univariate distribution. Examples -------- Create a *KernelMixture*: >>> import openturns as ot >>> kernel = ot.Uniform() >>> sample = ot.Normal().getSample(5) >>> bandwith = [1.0] >>> myKernelMixture = ot.KernelMixture(kernel, bandwith, sample) See the pdf: >>> graph = myKernelMixture.drawPDF(64) >>> graph.setLegends(['KernelMixture'])" // --------------------------------------------------------------------- %feature("docstring") OT::KernelMixture::getKernel "Accessor to kernel used in the linear combination. Returns ------- kernel : :class:`~openturns.Distribution` Univariate distribution used to build the kernel." // --------------------------------------------------------------------- %feature("docstring") OT::KernelMixture::setKernel "Set the kernel used in the linear combination. Parameters ---------- kernel : :class:`~openturns.Distribution` Univariate distribution used to build the kernel." // --------------------------------------------------------------------- %feature("docstring") OT::KernelMixture::getBandwidth "Accessor to the bandwith used in the linear combination. Returns ------- bandwidth : :class:`~openturns.Point` Bandwith used in each direction." // --------------------------------------------------------------------- %feature("docstring") OT::KernelMixture::setBandwidth "Set the bandwith used in the linear combination. Parameters ---------- bandwidth : sequence of float Bandwith used in each direction." // --------------------------------------------------------------------- %feature("docstring") OT::KernelMixture::setInternalSample "Set the sample used in the linear combination. Parameters ---------- sample : 2-d sequence of float Sample on wich the kernels are centered." openturns-1.9/python/src/KernelSmoothing.i000066400000000000000000000004361307543307100210200ustar00rootroot00000000000000// SWIG file KernelSmoothing.i %{ #include "openturns/KernelSmoothing.hxx" %} %include KernelSmoothing_doc.i %include openturns/KernelSmoothing.hxx namespace OT { %extend KernelSmoothing { KernelSmoothing(const KernelSmoothing & other) { return new OT::KernelSmoothing(other); } } } openturns-1.9/python/src/KernelSmoothing_doc.i.in000066400000000000000000000132331307543307100222510ustar00rootroot00000000000000%feature("docstring") OT::KernelSmoothing "Non parametric fitting technique with kernel smoothing. Parameters ---------- kernel : :class:`~openturns.Distribution`, optional Univariate distribution of the kernel that will be used. By default, the standard Normal distribution is used. bined : bool, optional Activates bining mecanism only in the univariate or bivariate cases. It allows to speed up the manipulation of the density function of the resulting distribution. By default, the mecanism is activated. binNumber : int, :math:`binNumber \geq 2`, optional Indicates the number of bins used by the bining mecanism. By default, OpenTURNS uses the values stored in the *ResourceMap*. boundaryCorrection : bool, optional Activates the boundary correction using the mirroring technique. By default, the correction is not provided. Notes ----- The bining mecanism creates a regular grid of *binNumber* intervals: all the data falling in the same interval are regrouped and replaced by the central point of the interval, weighted by the number of data within the interval. When applied to multivariate samples, the kernel is the kernel product of the univariate distribution specified in the constructor. Examples -------- Fit a distribution on data thanks to the kernel smoothing technique: >>> import openturns as ot >>> sample = ot.Gamma(6.0, 1.0).getSample(100) >>> kernel = ot.KernelSmoothing() >>> fittedDist = kernel.build(sample) Compare the PDFs: >>> graph = fittedDist.drawPDF() >>> graph.add( ot.Gamma(6.0, 1.0).drawPDF()) >>> graph.setColors(['blue', 'red']) >>> graph.setLegends(['KS dist', 'Gamma']) " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::build "Fit a kernel smoothing distribution on data. Parameters ---------- sample : 2-d sequence of float Data on which the distribution is fitted. Any dimension. bandwidth : :class:`~openturns.Point`, optional Contains the bandwith in each direction. If not specified, the bandwith is calculated using the mixed rule from data. Returns ------- fittdDist : :class:`~openturns.Distribution` The fitted distribution. Notes ----- According to the dimension of the data and the specified treatments, the type of the resulting distribution differs: - In dimension 1: - if only the bining mecanism is activated, a :class:`~openturns.Mixture` is produced (all the weights differ). - if only the boundary correction is activated, a :class:`~openturns.TruncatedDistribution` is produced: the truncation of a :class:`~openturns.KernelMixture` (all the weights are identical). - if the bining mecanism and the boundary correction is activated, a :class:`~openturns.TruncatedDistribution` is produced: the truncation of a :class:`~openturns.Mixture` (all the weights differ). Examples -------- See the effect of the boundary correction: >>> import openturns as ot >>> sample = ot.Exponential(1.0).getSample(1000) >>> smoother = ot.KernelSmoothing() >>> fittedDistNoCorr = smoother.build(sample) >>> smoother.setBoundaryCorrection(True) >>> fittedDistWithCorr = smoother.build(sample) Compare the PDFs: >>> graph = ot.Exponential(1.0).drawPDF() >>> graph.add(fittedDistNoCorr.drawPDF()) >>> graph.add(fittedDistWithCorr.drawPDF()) >>> graph.setColors(['black', 'blue', 'red']) >>> graph.setLegends(['Exp dist', 'No boundary corr', 'Boundary corr']) " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::getBandwidth "Accessor to the bandwith used in the kernel smoothing. Returns ------- bandwidth : :class:`~openturns.Point` Bandwith used in each direction. " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::getKernel "Accessor to kernel used in the kernel smoothing. Returns ------- kernel : :class:`~openturns.Distribution` Univariate distribution used to build the kernel. " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::setBoundaryCorrection "Accessor to the boundary correction flag. Parameters ---------- boundaryCorrection : bool Activates the boundary correction using the mirroring technique." // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::computeSilvermanBandwidth "Compute the bandwith according to the Silverman rule. Returns ------- bandwidth : :class:`~openturns.Point` Bandwith wich components are evaluated according to the Silverman rule supposing a normal distribution. The bandwith is based on the evaluation of the interquartiles rather than the standard deviation of the distribution and the sample. " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::computePluginBandwidth "Compute the bandwith according to the plugin rule. Returns ------- bandwidth : :class:`~openturns.Point` Bandwith wich components are evaluated according to the plugin rule. Notes ----- Warning! It can take a lot of time for large samples, as the cost is quadratic with the sample size. " // --------------------------------------------------------------------- %feature("docstring") OT::KernelSmoothing::computeMixedBandwidth "Compute the bandwith according to a mixed rule. Returns ------- bandwidth : :class:`~openturns.Point` Bandwith wich components are evaluated according to a mixed rule. Notes ----- Simply use the plugin rule for small sample, and estimate the ratio between the plugin rule and the Silverman rule on a small sample, then scale the Silverman bandwidth computed on the full sample with this ratio. " openturns-1.9/python/src/KissFFT.i000066400000000000000000000003361307543307100171600ustar00rootroot00000000000000// SWIG file KissFFT.i %{ #include "openturns/KissFFT.hxx" %} %include KissFFT_doc.i %include openturns/KissFFT.hxx namespace OT { %extend KissFFT { KissFFT(const KissFFT & other) { return new OT::KissFFT(other); } } } openturns-1.9/python/src/KissFFT_doc.i.in000066400000000000000000000005431307543307100204120ustar00rootroot00000000000000%feature("docstring") OT::KissFFT "Kiss FFT. See also -------- FFT Notes ----- The KissFFT class inherits from the :class:`~openturns.FFT` class. The methods are the same as the FFT class (there is no additional method). This class interacts with the kissfft implemented and return results as OpenTURNS objects (:class:`~openturns.ComplexCollection`)." openturns-1.9/python/src/KrawtchoukFactory.i000066400000000000000000000004561307543307100213640ustar00rootroot00000000000000// SWIG file KrawtchoukFactory.i %{ #include "openturns/KrawtchoukFactory.hxx" %} %include KrawtchoukFactory_doc.i %include openturns/KrawtchoukFactory.hxx namespace OT { %extend KrawtchoukFactory { KrawtchoukFactory(const KrawtchoukFactory & other) { return new OT::KrawtchoukFactory(other); } } } openturns-1.9/python/src/KrawtchoukFactory_doc.i.in000066400000000000000000000047401307543307100226160ustar00rootroot00000000000000%feature("docstring") OT::KrawtchoukFactory "Krawtchouk specific orthonormal univariate polynomial family. For the :class:`~openturns.Binomial` distribution. Available constructors: KrawtchoukFactory(*n=1, p=0.5*) Parameters ---------- n : int, :math:`n > 0` Number of experiment parameter of the :class:`~openturns.Binomial` distribution. p : float, :math:`0 < p < 1` Success probability parameter of the :class:`~openturns.Binomial` distribution. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i < n The recurrence coefficients for the Krawtchouk polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle - \frac{1} {\sqrt{(i + 1) (n - i) p (1 - p)}} \\ b_i & = & \displaystyle \frac{p (n - i) + i (1 - p)} {\sqrt{(i + 1) (n - i) p (1 - p)}} \\ c_i & = & \displaystyle - \sqrt{(1 - \frac{1}{i + 1}) (1 + \frac{1}{n - i})} \end{array}, \quad 1 < i where :math:`n` and :math:`p` are the parameters of the :class:`~openturns.Binomial` distribution. .. warning:: The Krawtchouk polynomials are only defined up to a degree :math:`m` equal to :math:`n - 1`. Indeed, for :math:`i = n`, some factors in the denominators of the recurrence coefficients would be equal to zero. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.KrawtchoukFactory(3, 0.5) >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 -1.73205 + 1.1547 * X 1.73205 - 3.4641 * X + 1.1547 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerFactory::getN "Accessor to the number of failures parameter :math:`n`. Of the :class:`~openturns.Binomial` distribution. Returns ------- n : int Number of experiments parameter of the :class:`~openturns.Binomial` distribution." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerFactory::getP "Accessor to the success probability parameter :math:`p`. Of the :class:`~openturns.Binomial` distribution. Returns ------- p : float Success probability parameter of the :class:`~openturns.Binomial` distribution." openturns-1.9/python/src/KrigingAlgorithm.i000066400000000000000000000004461307543307100211520ustar00rootroot00000000000000// SWIG file KrigingAlgorithm.i %{ #include "openturns/KrigingAlgorithm.hxx" %} %include KrigingAlgorithm_doc.i %include openturns/KrigingAlgorithm.hxx namespace OT{ %extend KrigingAlgorithm { KrigingAlgorithm(const KrigingAlgorithm & other) { return new OT::KrigingAlgorithm(other); } } } openturns-1.9/python/src/KrigingAlgorithm_doc.i.in000066400000000000000000000246321307543307100224070ustar00rootroot00000000000000%feature("docstring") OT::KrigingAlgorithm "Kriging algorithm. Available constructors: KrigingAlgorithm(*inputSample, outputSample, covarianceModel, basis, normalize=True*) KrigingAlgorithm(*inputSample, inputTransformation, outputSample, covarianceModel, basis*) KrigingAlgorithm(*inputSample, outputSample, covarianceModel, basisCollection, normalize=True*) KrigingAlgorithm(*inputSample, inputTransformation, outputSample, covarianceModel, basisCollection*) Parameters ---------- inputSample, outputSample : 2-d sequence of float The samples :math:`(\vect{x}_k)_{1 \leq k \leq N} \in \Rset^d` and :math:`(\vect{y}_k)_{1 \leq k \leq N}\in \Rset^p` upon which the meta-model is built. inputTransformation : :class:`~openturns.Function` Function :math:`T` used to normalize the input sample. If used, the meta model is built on the transformed data. basis : :class:`~openturns.Basis` Functional basis to estimate the trend (universal kriging): :math:`(\varphi_j)_{1 \leq j \leq n_1}: \Rset^d \rightarrow \Rset`. If :math:`p>1`, the same basis is used for each marginal output. covarianceModel : :class:`~openturns.CovarianceModel` Covariance model used for the underlying Gaussian process assumption. basisCollection : sequence of :class:`~openturns.Basis` Collection of :math:`p` functional basis: one basis for each marginal output: :math:`\left[(\varphi_j^1)_{1 \leq j \leq n_1}, \dots, (\varphi_j^p)_{1 \leq j \leq n_p}\right]`. If the sequence is empty, no trend coefficient is estimated (simple kriging). normalize : bool, optional Indicates whether the input sample has to be normalized. OpenTURNS uses the transformation fixed by the User in *inputTransformation* or the empirical mean and variance of the input sample. Default is set in resource map key `GeneralLinearModelAlgorithm-NormalizeData` Notes ----- We suppose we have a sample :math:`(\vect{x}_k, \vect{y}_k)_{1 \leq k \leq N}` where :math:`\vect{y}_k = \cM(\vect{x}_k)` for all *k*, with :math:`\cM:\Rset^d \mapsto \Rset^p` the model. The meta model *Kriging* is based on the same principles as those of the generalized linear model: it assumes that the sample :math:`(\vect{y}_k)_{1 \leq k \leq N}` is considered as the trace of a normal process :math:`\vect{Y}(\omega, \vect{x})` on :math:`(\vect{x}_k)_{1 \leq k \leq N}`. The normal process :math:`\vect{Y}(\omega, \vect{x})` is defined by: .. math:: :label: metaModelKrigAlgo \vect{Y}(\omega, \vect{x}) = \vect{\mu}(\vect{x}) + W(\omega, \vect{x}) where: .. math:: \vect{\mu}(\vect{x}) = \left( \begin{array}{l} \mu_1(\vect{x}) \\ \dots \\ \mu_p(\vect{x}) \end{array} \right) with :math:`\mu_l(\vect{x}) = \sum_{j=1}^{n_l} \alpha_j^l \varphi_j^l(\vect{x})` and :math:`\varphi_j^l: \Rset^d \rightarrow \Rset` the trend functions. :math:`W` is a normal process of dimension *p* with zero mean and covariance function :math:`C = C(\vect{\theta}, \vect{\sigma}, \mat{R}, \vect{\lambda})` (see :class:`~openturns.CovarianceModel` for the notations). The estimation of the parameters :math:`\alpha_j^l, \vect{\theta}, \vect{\sigma}` are made by the :class:`~openturns.GeneralLinearModelAlgorithm` class. The Kriging algorithm makes the generalized linear model interpolary on the input samples. The Kriging meta model :math:`\tilde{\cM}` is defined by: .. math:: \tilde{\cM}(\vect{x}) = \vect{\mu}(\vect{x}) + \Expect{\vect{Y}(\omega, \vect{x})\, | \, \cC} where :math:`\cC` is the condition :math:`\vect{Y}(\omega, \vect{x}_k) = \vect{y}_k` for each :math:`k \in [1, N]`. :eq:`metaModelKrigAlgo` writes: .. math:: \tilde{\cM}(\vect{x}) = \vect{\mu}(\vect{x}) + \Cov{\vect{Y}(\omega, \vect{x}), (\vect{Y}(\omega, \vect{x}_1), \dots, \vect{Y}(\omega, \vect{x}_N))} \vect{\gamma} where :math:`\Cov{\vect{Y}(\omega, \vect{x}), (\vect{Y}(\omega, \vect{x}_1), \dots, \vect{Y}(\omega, \vect{x}_N))} = \left( \mat{C}( \vect{x}, \vect{x}_1) | \dots | \mat{C}( \vect{x}, \vect{x}_N) \right)` is a matrix in :math:`\cM_{p,NP}(\Rset)` and :math:`\vect{\gamma} = \mat{C}^{-1}(\vect{y}-\vect{m})`. A known centered gaussian observation noise :math:`\epsilon_k` can be taken into account with :func:`setNoise()`: .. math:: \hat{\vect{y}}_k = \vect{y}_k + \epsilon_k, \epsilon_k \sim \mathcal{N}(0, \tau_k^2) Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> # use of Hmat implementation >>> # ot.ResourceMap.Set('KrigingAlgorithm-LinearAlgebra', 'HMAT') >>> f = ot.SymbolicFunction(['x'], ['x * sin(x)']) >>> inputSample = ot.Sample([[1.0], [3.0], [5.0], [6.0], [7.0], [8.0]]) >>> outputSample = f(inputSample) Create the algorithm: >>> basis = ot.ConstantBasisFactory().build() >>> covarianceModel = ot.SquaredExponential(1) >>> algo = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() Get the resulting meta model: >>> result = algo.getResult() >>> metamodel = result.getMetaModel()" // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getOptimizationAlgorithm "Accessor to solver used to optimize the covariance model parameters. Returns ------- algorithm : :class:`~openturns.OptimizationAlgorithm` Solver used to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::setOptimizationAlgorithm "Accessor to the solver used to optimize the covariance model parameters. Parameters ---------- algorithm : :class:`~openturns.OptimizationAlgorithm` Solver used to optimize the covariance model parameters. Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> input_data = ot.Uniform(-1.0, 2.0).getSample(10) >>> model = ot.SymbolicFunction(['x'], ['x-1+sin(_pi*x/(1+0.25*x^2))']) >>> output_data = model(input_data) Create the Kriging algorithm with the optimizer option: >>> basis = ot.Basis([ot.SymbolicFunction(['x'], ['0.0'])]) >>> thetaInit = 1.0 >>> covariance = ot.GeneralizedExponential([thetaInit], 2.0) >>> bounds = ot.Interval(1e-2,1e2) >>> algo = ot.KrigingAlgorithm(input_data, output_data, covariance, basis) >>> algo.setOptimizationBounds(bounds) " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::setOptimizationBounds "Accessor to the optimization bounds. Parameters ---------- problem : :class:`~openturns.Interval` The bounds used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getOptimizationBounds "Accessor to the optimization bounds. Returns ------- problem : :class:`~openturns.Interval` The bounds used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getResult "Get the results of the metamodel computation. Returns ------- result : :class:`~openturns.KrigingResult` Structure containing all the results obtained after computation and created by the method :py:meth:`run`. " //----------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` The input sample :math:`(\vect{x}_k)_{1 \leq k \leq N}`. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` The output sample :math:`(\vect{y}_k)_{1 \leq k \leq N}` . " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getReducedLogLikelihoodFunction "Accessor to the reduced log-likelihood function that writes as argument of the covariance's model parameters. Returns ------- reducedLogLikelihood : :class:`~openturns.Function` The reduced log-likelihood function as a function of :math:`(\vect{\theta}, \vect{\sigma})`. Notes ----- The reduced log-likelihood function may be useful for some pre/postprocessing: vizuaisation of the maximizer, use of an external optimizers to maximize the reduced log-likelihood etc. Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> f = ot.SymbolicFunction(['x0'], ['x0 * sin(x0)']) >>> inputSample = ot.Sample([[1.0], [3.0], [5.0], [6.0], [7.0], [8.0]]) >>> outputSample = f(inputSample) Create the algorithm: >>> basis = ot.ConstantBasisFactory().build() >>> covarianceModel = ot.SquaredExponential(1) >>> algo = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basis) >>> algo.run() Get the reduced log-likelihood function: >>> reducedLogLikelihoodFunction = algo.getReducedLogLikelihoodFunction() " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::run "Compute the response surface. Notes ----- It computes the kriging response surface and creates a :class:`~openturns.KrigingResult` structure containing all the results." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::setOptimizeParameters "Accessor to the covariance model parameters optimization flag. Parameters ---------- optimizeParameters : bool Whether to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getOptimizeParameters "Accessor to the covariance model parameters optimization flag. Returns ------- optimizeParameters : bool Whether to optimize the covariance model parameters." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::setNoise "Observation noise variance accessor. Parameters ---------- noise : sequence of positive float The noise variance :math:`\tau_k^2` of each output value." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingAlgorithm::getNoise "Observation noise variance accessor. Returns ------- noise : sequence of positive float The noise variance :math:`\tau_k^2` of each output value." openturns-1.9/python/src/KrigingRandomVector.i000066400000000000000000000004761307543307100216320ustar00rootroot00000000000000// SWIG file KrigingRandomVector.i %{ #include "openturns/KrigingRandomVector.hxx" %} %include KrigingRandomVector_doc.i %include openturns/KrigingRandomVector.hxx namespace OT { %extend KrigingRandomVector { KrigingRandomVector(const KrigingRandomVector & other) { return new OT::KrigingRandomVector(other); } } } openturns-1.9/python/src/KrigingRandomVector_doc.i.in000066400000000000000000000136421307543307100230630ustar00rootroot00000000000000%define OT_KrigingRandomVector_doc "KrigingRandom vector, a conditioned Gaussian process. Available constructors: KrigingRandomVector(*krigingResult, points*) Parameters ---------- krigingResult : :class:`~openturns.KrigingResult` Structure that contains elements of computation of a kriging algorithm points : 1-d or 2-d sequence of float Sequence of values defining a :class:`~openturns.Point` or a :class:`~openturns.Sample`. Notes ------ KrigingRandomVector helps to create Gaussian random vector, :math:`Y: \Rset^n \mapsto \Rset^d`, with stationary covariance function :math:`\cC^{stat}: \Rset^n \mapsto \cM_{d \times d}(\Rset)`, conditionally to some observations. Let :math:`Y(x=x_1)=y_1,\cdots,Y(x=x_n)=y_n` be the observations of the Gaussian process. We assume the same Gaussian prior as in the :class:`~openturns.KrigingAlgorithm`: .. math:: Y(\vect{x}) = \Tr{\vect{f}(\vect{x})} \vect{\beta} + Z(\vect{x}) with :math:`\Tr{\vect{f}(\vect{x})} \vect{\beta}` a generalized linear model, :math:`Z(\vect{x})` a zero-mean Gaussian process with a stationary autocorrelation function :math:`\cC^{stat}`: .. math:: \mathbb{E}[Z(\vect{x}), Z(\vect{\tilde{x}})] = \sigma^2 \cC^{stat}_{\theta}(\vect{x} - \vect{\tilde{x}}) The objective is to generate realizations of the random vector :math:`Y`, on new points :math:`\vect{\tilde{x}}`, conditionally to these observations. For that purpose, :class:`~openturns.KrigingAlgorithm` build such a prior and stores results in a :class:`~openturns.KrigingResult` structure on a first step. This structure is given as input argument. Then, in a second step, both the prior and the covariance on input points :math:`\vect{\tilde{x}}`, conditionally to the previous observations, are evaluated (respectively :math:`Y(\vect{\tilde{x}})` and :math:`\cC^{stat}_{\theta}(\vect{\tilde{x}})`). Finally realizations are randomly generated by the Gaussian distribution :math:`\cN ( Y(\vect{\tilde{x}}), \cC^{stat}_{\theta}(\vect{\tilde{x}}) )` KrigingRandomVector class inherits from :class:`~openturns.UsualRandomVector`. Thus it stores the previous distribution and returns elements thanks to that distribution (realization, mean, covariance, sample...) " %enddef %feature("docstring") OT::KrigingRandomVector OT_KrigingRandomVector_doc // --------------------------------------------------------------------- %define OT_KrigingRandomVector_getRealization_doc "Compute a realization of the conditional Gaussian process (conditional on the learning set). The realization predicts the value on the given input *points*. Returns ------- realization : :class:`~openturns.Point` Sequence of values of the Gaussian process. See also -------- getSample Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sampleSize = 6 >>> dimension = 1 >>> f = ot.SymbolicFunction(['x0'], ['x0 * sin(x0)']) >>> X = ot.Sample(sampleSize, dimension) >>> for i in range(sampleSize): ... X[i, 0] = 3.0 + i >>> X[0, 0] = 1.0 >>> X[1, 0] = 3.0 >>> Y = f(X) >>> # create algorithm >>> basis = ot.ConstantBasisFactory(dimension).build() >>> covarianceModel = ot.SquaredExponential([2.23606797749979]) >>> algo = ot.KrigingAlgorithm(X, Y, covarianceModel, basis) >>> algo.run() >>> # get the results >>> result = algo.getResult() >>> # Random vector evaluation >>> rvector = ot.KrigingRandomVector(result, [[0]]) >>> # Realization of the random vector >>> realization = rvector.getRealization() " %enddef %feature("docstring") OT::KrigingRandomVector::getRealization OT_KrigingRandomVector_getRealization_doc // --------------------------------------------------------------------- %define OT_KrigingRandomVector_getSample_doc "Compute a sample of realizations of the conditional Gaussian process (conditional on the learning set). The realization predicts the value on the given input *points*. Returns ------- realizations : :class:`~openturns.Sample` 2-d float sequence of values of the Gaussian process. See also -------- getRealization Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sampleSize = 6 >>> dimension = 1 >>> f = ot.SymbolicFunction(['x0'], ['x0 * sin(x0)']) >>> X = ot.Sample(sampleSize, dimension) >>> for i in range(sampleSize): ... X[i, 0] = 3.0 + i >>> X[0, 0] = 1.0 >>> X[1, 0] = 3.0 >>> Y = f(X) >>> # create algorithm >>> basis = ot.ConstantBasisFactory(dimension).build() >>> covarianceModel = ot.SquaredExponential([2.23606797749979]) >>> algo = ot.KrigingAlgorithm(X, Y, covarianceModel, basis) >>> algo.run() >>> # get the results >>> result = algo.getResult() >>> # Random vector evaluation >>> rvector = ot.KrigingRandomVector(result, [[0.0]]) >>> # Realization of the random vector >>> realizations = rvector.getSample(5) " %enddef %feature("docstring") OT::KrigingRandomVector::getSample OT_KrigingRandomVector_getSample_doc // --------------------------------------------------------------------- %define OT_KrigingRandomVector_getKrigingResult_doc "Return the kriging result structure. Returns ------- krigResult : :class:`~openturns.KrigingResult` The structure containing the elements of a KrigingAlgorithm. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sampleSize = 6 >>> dimension = 1 >>> f = ot.SymbolicFunction(['x0'], ['x0 * sin(x0)']) >>> X = ot.Sample(sampleSize, dimension) >>> for i in range(sampleSize): ... X[i, 0] = 3.0 + i >>> X[0, 0] = 1.0 >>> X[1, 0] = 3.0 >>> Y = f(X) >>> # create algorithm >>> basis = ot.ConstantBasisFactory(dimension).build() >>> covarianceModel = ot.SquaredExponential([2.23606797749979]) >>> algo = ot.KrigingAlgorithm(X, Y, covarianceModel, basis) >>> algo.run() >>> # get the results >>> result = algo.getResult() >>> # Random vector evaluation >>> rvector = ot.KrigingRandomVector(result, [[0.0]]) >>> # Get the kriging result >>> krigResult = rvector.getKrigingResult()" %enddef %feature("docstring") OT::KrigingRandomVector::getKrigingResult OT_KrigingRandomVector_getKrigingResult_doc openturns-1.9/python/src/KrigingResult.i000066400000000000000000000004161307543307100204770ustar00rootroot00000000000000// SWIG file KrigingResult.i %{ #include "openturns/KrigingResult.hxx" %} %include KrigingResult_doc.i %include openturns/KrigingResult.hxx namespace OT{ %extend KrigingResult { KrigingResult(const KrigingResult & other) { return new OT::KrigingResult(other); } } } openturns-1.9/python/src/KrigingResult_doc.i.in000066400000000000000000000207011307543307100217300ustar00rootroot00000000000000%feature("docstring") OT::KrigingResult "Kriging result. Available constructors: KrigingResult(*inputSample, outputSample, metaModel, residuals, relativeErrors, basis, trendCoefficients, covarianceModel, covarianceCoefficients*) KrigingResult(*inputSample, outputSample, metaModel, residuals, relativeErrors, basis, trendCoefficients, covarianceModel, covarianceCoefficients, covarianceCholeskyFactor, covarianceHMatrix*) Parameters ---------- inputSample, outputSample : 2-d sequence of float The samples :math:`(\vect{x}_k)_{1 \leq k \leq N} \in \Rset^d` and :math:`(\vect{y}_k)_{1 \leq k \leq N}\in \Rset^p`. metaModel : :class:`~openturns.Function` The meta model: :math:`\tilde{\cM}: \Rset^d \rightarrow \Rset^p`, defined in :eq:`metaModelKrigFinal`. residuals : :class:`~openturns.Point` The residual errors. relativeErrors : :class:`~openturns.Point` The relative errors. basis : collection of :class:`~openturns.Basis` Collection of the :math:`p` functional basis: :math:`(\varphi_j^l)_{1 \leq j \leq n_l}` for each :math:`l \in [1, p]` with :math:`\varphi_j^l: \Rset^d \rightarrow \Rset`. Its size must be equal to zero if the trend is not estimated. trendCoefficients : collection of :class:`~openturns.Point` The trend coeffient vectors :math:`(\vect{\alpha}^1, \dots, \vect{\alpha}^p)`. covarianceModel : :class:`~openturns.CovarianceModel` Covariance function of the normal process. covarianceCoefficients : 2-d sequence of float The :math:`\vect{\gamma}` defined in :eq:`gammaEq`. covarianceCholeskyFactor : :class:`~openturns.TriangularMatrix` The Cholesky factor :math:`\mat{L}` of :math:`\mat{C}`. covarianceHMatrix : :class:`~openturns.HMatrix` The *hmat* implementation of :math:`\mat{L}`. Notes ----- The Kriging meta model :math:`\tilde{\cM}` is defined by: .. math:: :label: metaModelKrig \tilde{\cM}(\vect{x}) = \vect{\mu}(\vect{x}) + \Expect{\vect{Y}(\omega, \vect{x})\,| \,\cC} where :math:`\cC` is the condition :math:`\vect{Y}(\omega, \vect{x}_k) = \vect{y}_k` for each :math:`k \in [1, N]`. Equation :eq:`metaModelKrig` writes: .. math:: \tilde{\cM}(\vect{x}) = \vect{\mu}(\vect{x}) + \Cov{\vect{Y}(\omega, \vect{x}), (\vect{Y}(\omega,\vect{x}_1),\dots,\vect{Y}(\omega, \vect{x}_N))}\vect{\gamma} where .. math:: \Cov{\vect{Y}(\omega, \vect{x}), (\vect{Y}(\omega, \vect{x}_1),\dots,\vect{Y}(\omega, \vect{x}_N))} = \left(\mat{C}(\vect{x},\vect{x}_1)|\dots|\mat{C}(\vect{x},\vect{x}_N)\right)\in \cM_{p,NP}(\Rset) and .. math:: :label: gammaEq \vect{\gamma} = \mat{C}^{-1}(\vect{y}-\vect{m}) At the end, the meta model writes: .. math:: :label: metaModelKrigFinal \tilde{\cM}(\vect{x}) = \vect{\mu}(\vect{x}) + \sum_{i=1}^N \gamma_i \mat{C}(\vect{x},\vect{x}_i) Examples -------- Create the model :math:`\cM: \Rset \mapsto \Rset` and the samples: >>> import openturns as ot >>> f = ot.SymbolicFunction(['x'], ['x * sin(x)']) >>> sampleX = [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0]] >>> sampleY = f(sampleX) Create the algorithm: >>> basis = ot.Basis([ot.SymbolicFunction(['x'], ['x']), ot.SymbolicFunction(['x'], ['x^2'])]) >>> covarianceModel = ot.GeneralizedExponential([2.0], 2.0) >>> algoKriging = ot.KrigingAlgorithm(sampleX, sampleY, covarianceModel, basis) >>> algoKriging.run() Get the result: >>> resKriging = algoKriging.getResult() Get the meta model: >>> metaModel = resKriging.getMetaModel() " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getCovarianceCoefficients "Accessor to the covariance coefficients. Returns ------- covCoeff : :class:`~openturns.Sample` The :math:`\vect{\gamma}` defined in :eq:`gammaEq`. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getTrendCoefficients "Accessor to the trend coefficients. Returns ------- trendCoef : collection of :class:`~openturns.Point` The trend coefficients vectors :math:`(\vect{\alpha}^1, \dots, \vect{\alpha}^p)` " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getCovarianceModel "Accessor to the covariance model. Returns ------- covModel : :class:`~openturns.CovarianceModel` The covariance model of the Normal process *W* with its optimized parameters. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getBasisCollection "Accessor to the collection of basis. Returns ------- basisCollection : collection of :class:`~openturns.Basis` Collection of the :math:`p` function basis: :math:`(\varphi_j^l)_{1 \leq j \leq n_l}` for each :math:`l \in [1, p]` with :math:`\varphi_j^l: \Rset^d \rightarrow \Rset`. Notes ----- If the trend is not estimated, the collection is empty. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getConditionalMean "Compute the expected mean of the Gaussian process on a point or a sample of points. Available usages: getConditionalMean(x) getConditionalMean(sampleX) Parameters ---------- x : sequence of float The point :math:`\vect{x}` where the conditional mean of the output has to be evaluated. sampleX : 2-d sequence of float The sample :math:`(\vect{\xi}_1, \dots, \vect{\xi}_M)` where the conditional mean of the output has to be evaluated (*M* can be equal to 1). Returns ------- condMean : :class:`~openturns.Point` The conditional mean :math:`\Expect{\vect{Y}(\omega, \vect{x})\, | \, \cC}` at point :math:`\vect{x}`. Or the conditional mean matrix at the sample :math:`(\vect{\xi}_1, \dots, \vect{\xi}_M)`: .. math:: \left( \begin{array}{l} \Expect{\vect{Y}(\omega, \vect{\xi}_1)\, | \, \cC}\\ \dots \\ \Expect{\vect{Y}(\omega, \vect{\xi}_M)\, | \, \cC} \end{array} \right) " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getConditionalCovariance "Compute the expected covariance of the Gaussian process on a point (or several points). Available usages: getConditionalCovariance(x) getConditionalCovariance(sampleX) Parameters ---------- x : sequence of float The point :math:`\vect{x}` where the conditional mean of the output has to be evaluated. sampleX : 2-d sequence of float The sample :math:`(\vect{\xi}_1, \dots, \vect{\xi}_M)` where the conditional mean of the output has to be evaluated (*M* can be equal to 1). Returns ------- condCov : :class:`~openturns.CovarianceMatrix` The conditional covariance :math:`\Cov{\vect{Y}(\omega, \vect{x})\, | \, \cC}` at point :math:`\vect{x}`. Or the conditional covariance matrix at the sample :math:`(\vect{\xi}_1, \dots, \vect{\xi}_M)`: .. math:: \left( \begin{array}{lcl} \Sigma_{11} & \dots & \Sigma_{1M} \\ \dots \\ \Sigma_{M1} & \dots & \Sigma_{MM} \end{array} \right) where :math:`\Sigma_{ij} = \Cov{\vect{Y}(\omega, \vect{\xi}_i), \vect{Y}(\omega, \vect{\xi}_j)\, | \, \cC}`. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getMetaModel "Accessor to the metamodel. Returns ------- metaModel : :class:`~openturns.Function` The meta model :math:`\tilde{\cM}: \Rset^d \rightarrow \Rset^p`, defined in :eq:`metaModelKrigFinal`. " // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::setTransformation "Accessor to the normalizing transformation. Parameters ---------- transformation : :class:`~openturns.Function` The transformation *T* that normalizes the input sample." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getTransformation "Accessor to the normalizing transformation. Returns ------- transformation : :class:`~openturns.Function` The transformation *T* that normalizes the input sample." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` The input sample." // --------------------------------------------------------------------- %feature("docstring") OT::KrigingResult::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` The output sample." openturns-1.9/python/src/LARS.i000066400000000000000000000006151307543307100164500ustar00rootroot00000000000000// SWIG file LARS.i %{ #include "openturns/LARS.hxx" %} %include LARS_doc.i %include openturns/LARS.hxx namespace OT { %extend LARS { LARS(const LARS & other) { return new OT::LARS(other); } } } %pythoncode %{ # deprecated class LAR(LARS): def __init__(self, *args): super(LAR, self).__init__(*args) openturns.common.Log.Warn('class LAR is deprecated in favor of LARS') %} openturns-1.9/python/src/LARS_doc.i.in000066400000000000000000000015771307543307100177120ustar00rootroot00000000000000%feature("docstring") OT::LARS "Least Angle Regression. Available constructors: LARS() See also -------- BasisSequenceFactory Notes ----- LARS inherits from :class:`~openturns.BasisSequenceFactory`. If the size :math:`P` of the PC basis is of similar size to :math:`N`, or even possibly significantly larger than :math:`N` , then the following ordinary least squares problem is ill-posed: .. math:: \vect{a} = \argmin_{\vect{b} \in \Rset^P} E_{\mu} \left[ \left( g \circ T^{-1} (\vect{U}) - \vect{b}^{\intercal} \vect{\Psi}(\vect{U}) \right)^2 \right] The sparse least squares approaches may be employed instead. Eventually a sparse PC representation is obtained, that is an approximation which only contains a small number of active basis functions. This class is not usable as is because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`." openturns-1.9/python/src/LHS.i000066400000000000000000000002751307543307100163370ustar00rootroot00000000000000// SWIG file LHS.i %{ #include "openturns/LHS.hxx" %} %include LHS_doc.i %include openturns/LHS.hxx namespace OT{ %extend LHS { LHS(const LHS & other) { return new OT::LHS(other); } } } openturns-1.9/python/src/LHSExperiment.i000066400000000000000000000004161307543307100203750ustar00rootroot00000000000000// SWIG file LHSExperiment.i %{ #include "openturns/LHSExperiment.hxx" %} %include LHSExperiment_doc.i %include openturns/LHSExperiment.hxx namespace OT { %extend LHSExperiment { LHSExperiment(const LHSExperiment & other) { return new OT::LHSExperiment(other); } } } openturns-1.9/python/src/LHSExperiment_doc.i.in000066400000000000000000000143111307543307100216260ustar00rootroot00000000000000%feature("docstring") OT::LHSExperiment "LHS experiment. Available constructors: LHSExperiment(*size, alwaysShuffle, randomShift*) LHSExperiment(*distribution, size, alwaysShuffle, randomShift*) Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution :math:`\mu` with an independent copula used to generate the set of input data. size : positive int Number :math:`\mathrm{card}\,I` of points that will be generated in the experiment. alwaysShuffle : bool Flag to tell if the shuffle must be regenerated at each call to generate or not. Default is *False*: the shuffle is generated once and for all. randomShift : bool Flag to tell if the point selected in each cell of the shuffle is the center of the cell (*randomshift* is *False*) or if it is drawn wrt the restriction of the distribution to the cell. Default is *True*. Notes ----- LHSExperiment is a random weighted design of experiments. The method generates a sample of points :math:`\Xi_i` according to the distribution :math:`\mu` with the LHS technique: some cells are determined, with the same probabilistic content according to the distribution, each line and each column contains exactly one cell, then points are selected among these selected cells. The weights associated to the points are all equal to :math:`1/\mathrm{card}\,I`. When recalled, the :meth:`generate` method generates a new sample: the point selection within the cells changes but not the cells selection. To change the cell selection, it is necessary to create a new LHS Experiment. See also -------- WeightedExperiment Examples -------- Create an *LHSExperiment*: >>> import openturns as ot Generate the sample reusing the initial shuffle and using a random shift: >>> ot.RandomGenerator.SetSeed(0) >>> experiment = ot.LHSExperiment(ot.Normal(2), 5, False, True) >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 0.887671 -0.647818 ] 1 : [ 0.107683 1.15851 ] 2 : [ 0.453077 -1.04742 ] 3 : [ -0.928012 0.409732 ] 4 : [ -0.290539 0.16153 ] >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 1.52938 -0.343515 ] 1 : [ -0.0703427 2.36353 ] 2 : [ 0.576091 -1.79398 ] 3 : [ -2.11636 0.619315 ] 4 : [ -0.699601 -0.0570674 ] Generate the sample using a new shuffle and a random shift: >>> ot.RandomGenerator.SetSeed(0) >>> experiment = ot.LHSExperiment(ot.Normal(2), 5, True, True) >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 0.887671 -0.647818 ] 1 : [ 0.107683 1.15851 ] 2 : [ 0.453077 -1.04742 ] 3 : [ -0.928012 0.409732 ] 4 : [ -0.290539 0.16153 ] >>> print(experiment.generate()) [ X0 X1 ] 0 : [ -1.72695 -0.591043 ] 1 : [ -0.240653 -0.0406593 ] 2 : [ 0.828719 2.12547 ] 3 : [ 2.37061 0.508903 ] 4 : [ -0.668296 -1.11573 ] Generate the sample reusing the initial shuffle and using a constant shift: >>> ot.RandomGenerator.SetSeed(0) >>> experiment = ot.LHSExperiment(ot.Normal(2), 5, False, False) >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 1.28155 -0.524401 ] 1 : [ 0 1.28155 ] 2 : [ 0.524401 -1.28155 ] 3 : [ -1.28155 0.524401 ] 4 : [ -0.524401 0 ] >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 1.28155 -0.524401 ] 1 : [ 0 1.28155 ] 2 : [ 0.524401 -1.28155 ] 3 : [ -1.28155 0.524401 ] 4 : [ -0.524401 0 ] Generate the sample using a new shuffle and using a constant shift: >>> ot.RandomGenerator.SetSeed(0) >>> experiment = ot.LHSExperiment(ot.Normal(2), 5, True, False) >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 1.28155 -0.524401 ] 1 : [ 0 1.28155 ] 2 : [ 0.524401 -1.28155 ] 3 : [ -1.28155 0.524401 ] 4 : [ -0.524401 0 ] >>> print(experiment.generate()) [ X0 X1 ] 0 : [ 0.524401 -0.524401 ] 1 : [ 0 1.28155 ] 2 : [ -1.28155 0 ] 3 : [ -0.524401 0.524401 ] 4 : [ 1.28155 -1.28155 ] " // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::getShuffle "Return the cell randomization. Returns ------- shuffle : :class:`~openturns.Matrix` For each point, the indices of the shuffled components." // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::ComputeShuffle "Generate a new cell randomization for external use. Parameters ---------- dimension : positive int Number of input dimension. totalSize : positive int Number :math:`\mathrm{card}\,I` of points that need to be shuffled. Returns ------- shuffle : :class:`~openturns.Matrix` For each point, the indices of the shuffled components." // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::getAlwaysShuffle "Cell randomization flag accessor. Returns ------- alwaysShuffle : bool Flag to tell if the shuffle must be regenerated at each call to generate or not. Default is *False*: the shuffle is generated once and for all." // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::setAlwaysShuffle "Cell randomization flag accessor. Parameters ---------- alwaysShuffle : bool Flag to tell if the shuffle must be regenerated at each call to generate or not. Default is *False*: the shuffle is generated once and for all." // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::setRandomShift "Randomization flag accessor. Parameters ---------- randomShift : bool Flag to tell if the point selected in each cell of the shuffle is the center of the cell (*randomshift* is *False*) or if it is drawn wrt the restriction of the distribution to the cell. Default is *True*." // --------------------------------------------------------------------- %feature("docstring") OT::LHSExperiment::getRandomShift "Randomization flag accessor. Returns ------- randomShift : bool Flag to tell if the point selected in each cell of the shuffle is the center of the cell (*randomshift* is *False*) or if it is drawn wrt the restriction of the distribution to the cell. Default is *True*." openturns-1.9/python/src/LHSResult.i000066400000000000000000000003421307543307100175310ustar00rootroot00000000000000// SWIG file %{ #include "openturns/LHSResult.hxx" %} %include LHSResult_doc.i %include openturns/LHSResult.hxx namespace OT { %extend LHSResult { LHSResult(const LHSResult & other) { return new OT::LHSResult(other); } } } openturns-1.9/python/src/LHSResult_doc.i.in000066400000000000000000000142421307543307100207670ustar00rootroot00000000000000%define OT_LHSResult_doc "Summarize the results of an LHS optimization. Available constructor: LHSResult(*bounds, spaceFilling, nRestart*) Parameters ---------- spaceFilling : :class:`~ot.SpaceFilling` The space filling criteria used by optimization algorithm nRestart : int The number of restarts performed by optimization algorithm Notes ----- This class is not intendeted to be built by hand, but returned by optimization algorithms. Examples -------- >>> import openturns as ot >>> lhs = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*3), 100) >>> lhs.setAlwaysShuffle(True) # randomized >>> profile = ot.GeometricProfile() >>> spaceFilling = ot.SpaceFillingC2() >>> # Optim algo >>> algo = ot.SimulatedAnnealingLHS(lhs, profile, spaceFilling) >>> # first, generate a design >>> design = algo.generate() >>> # then, get the result >>> result = algo.getResult() " %enddef %feature("docstring") OT::LHSResult OT_LHSResult_doc // --------------------------------------------------------------------- %define OT_LHSResult_get_optimal_design_doc "Accessor to the optimal design. Returns ------- design : :class:`~openturns.Sample` The design that optimizes the criterion. Examples -------- >>> import openturns as ot >>> lhs = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*3), 100) >>> lhs.setAlwaysShuffle(True) # randomized >>> spaceFilling = ot.SpaceFillingPhiP(10) >>> # By Monte Carlo >>> algoMC = ot.MonteCarloLHS(lhs, 1000, spaceFilling) >>> # Get LHSResult >>> optimalDesignMC = algoMC.generate() >>> resultMC = algoMC.getResult() >>> # By simulated annealing, with restart >>> profile = ot.GeometricProfile() >>> algoSA = ot.SimulatedAnnealingLHS(lhs, profile, spaceFilling) >>> # Get LHSResult >>> optimalDesignSA = algoSA.generateWithRestart(5) >>> resultSA = algoSA.getResult() >>> # Get optimal results for all restarts >>> optimRestart = [resultSA.getOptimalDesign(i) for i in range(resultSA.getNumberOfRestarts())]" %enddef %feature("docstring") OT::LHSResult::getOptimalDesign OT_LHSResult_get_optimal_design_doc // --------------------------------------------------------------------- %define OT_LHSResult_get_algo_history_doc "Accessor to the internal values computed during optimization algorithm. Returns ------- history : :class:`~openturns.Point` Some internal values computed during optimization algorithm. SimulatedAnnealingLHS stores criterion value, temperature and probability at each iteration. Examples -------- >>> import openturns as ot >>> lhs = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*3), 100) >>> lhs.setAlwaysShuffle(True) # randomized >>> profile = ot.GeometricProfile() >>> spaceFilling = ot.SpaceFillingPhiP(50) >>> algoSA = ot.SimulatedAnnealingLHS(lhs, profile, spaceFilling) >>> # Get LHSResult >>> design = algoSA.generateWithRestart(5) >>> resultSA = algoSA.getResult() >>> criterionHistory = resultSA.getAlgoHistory()" %enddef %feature("docstring") OT::LHSResult::getAlgoHistory OT_LHSResult_get_algo_history_doc // --------------------------------------------------------------------- %define OT_LHSResult_get_c2_doc "Accessor to the C2 criterion evaluated on the optimal design. Returns ------- c2 : float The C2 criterion. Examples -------- >>> import openturns as ot >>> lhs = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*3), 100) >>> lhs.setAlwaysShuffle(True) # randomized >>> profile = ot.GeometricProfile() >>> spaceFilling = ot.SpaceFillingPhiP(50) >>> algoSA = ot.SimulatedAnnealingLHS(lhs, profile, spaceFilling) >>> # Get LHSResult >>> design = algoSA.generate() >>> resultSA = algoSA.getResult() >>> c2 = resultSA.getC2()" %enddef %feature("docstring") OT::LHSResult::getC2 OT_LHSResult_get_c2_doc // --------------------------------------------------------------------- %define OT_LHSResult_get_phi_p_doc "Accessor the PhiP criterion evaluated on the optimal design. Returns ------- phiP : float The PhiP criterion. Examples -------- >>> import openturns as ot >>> lhs = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*3), 100) >>> lhs.setAlwaysShuffle(True) # randomized >>> profile = ot.GeometricProfile() >>> spaceFilling = ot.SpaceFillingPhiP(50) >>> algoSA = ot.SimulatedAnnealingLHS(lhs, profile, spaceFilling) >>> design = algoSA.generate() >>> # Get LHSResult >>> resultSA = algoSA.getResult() >>> phip = resultSA.getPhiP()" %enddef %feature("docstring") OT::LHSResult::getPhiP OT_LHSResult_get_phi_p_doc // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::drawHistoryCriterion "Draw criterion history. Parameters ---------- restart : int (optional) The restart index. title : str (optional) Graph title. Returns ------- graph : :class:`~openturns.Graph` The resulting graph." // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::drawHistoryProbability "Draw probability history. Parameters ---------- restart : int (optional) The restart index. title : str (optional) Graph title. Returns ------- graph : :class:`~openturns.Graph` The resulting graph." // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::drawHistoryTemperature "Draw temperature history. Parameters ---------- restart : int (optional) The restart index. title : str (optional) Graph title. Returns ------- graph : :class:`~openturns.Graph` The resulting graph." // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::getMinDist "Minimum distance accessor. Parameters ---------- restart : int (optional) The restart index. Returns ------- minDist : float The minimum distance of sample points." // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::getNumberOfRestarts "Restart number accessor. Returns ------- restart : int (optional) The number of restart." // --------------------------------------------------------------------- %feature("docstring") OT::LHSResult::getOptimalValue "Optimal value accessor. Returns ------- value : float (optional) The optimal value." openturns-1.9/python/src/LHS_doc.i.in000066400000000000000000000055701307543307100175740ustar00rootroot00000000000000%feature("docstring") OT::LHS "Latin Hypercube Sampling (LHS) method. Available constructors: LHS(*event=ot.Event()*) Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. Notes ----- Using the probability distribution of a random vector :math:`\vect{X}`, we seek to evaluate the following probability: .. math:: P_f = \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\underline{d}) \leq 0 \}}f_{\uX}(\ux)\di{\ux} = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}`. :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise. LHS or Latin Hypercube Sampling is a sampling method enabling to better cover the domain of variations of the input variables, thanks to a stratified sampling strategy. This method is applicable in the case of independent input variables. The sampling procedure is based on dividing the range of each variable into several intervals of equal probability. The sampling is undertaken as follows: - Step 1: The range of each input variable is stratified into isoprobabilistic cells, - Step 2: A cell is uniformly chosen among all the available cells, - Step 3: The random number is obtained by inverting the Cumulative Density Function locally in the chosen cell, - Step 4: All the cells having a common strate with the previous cell are put apart from the list of available cells. The estimator of the probability of failure with LHS is given by: .. math:: \widehat{P}_{f,LHS} = \frac{1}{N} \sum_{i=1}^N \mathbf{1}_{\{g(\uX^i,\vect{d}) \leq 0 \}} where the sample of :math:`\{ \uX^i,i=1 \hdots N \}` is obtained as described previously. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> # We create a 'usual' RandomVector from the Distribution >>> vect = ot.RandomVector(myDistribution) >>> # We create a composite random vector >>> output = ot.RandomVector(myFunction, vect) >>> # We create an Event from this RandomVector >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create a LHS algorithm >>> myAlgo = ot.LHS(myEvent) >>> myAlgo.setMaximumOuterSampling(150) >>> myAlgo.setBlockSize(4) >>> myAlgo.setMaximumCoefficientOfVariation(0.1) >>> # Perform the simulation >>> myAlgo.run() >>> print('Probability estimate=%.6f' % myAlgo.getResult().getProbabilityEstimate()) Probability estimate=0.151667" openturns-1.9/python/src/LaguerreFactory.i000066400000000000000000000004361307543307100210060ustar00rootroot00000000000000// SWIG file LaguerreFactory.i %{ #include "openturns/LaguerreFactory.hxx" %} %include LaguerreFactory_doc.i %include openturns/LaguerreFactory.hxx namespace OT { %extend LaguerreFactory { LaguerreFactory(const LaguerreFactory & other) { return new OT::LaguerreFactory(other); } } } openturns-1.9/python/src/LaguerreFactory_doc.i.in000066400000000000000000000037721307543307100222460ustar00rootroot00000000000000%feature("docstring") OT::LaguerreFactory "Laguerre specific orthonormal univariate polynomial family. For the :class:`~openturns.Gamma` distribution. Available constructors: LaguerreFactory(*k=1.0, ot.LaguerreFactory.ANALYSIS*) Parameters ---------- k : float If `parameters_set == ot.JacobiFactory.PROBABILITY`: default shape parameter :math:`k > 0` of the :class:`~openturns.Gamma` distribution. If `parameters_set == ot.JacobiFactory.ANALYSIS`: alternative shape parameter :math:`k_a = k - 1 > -1` of the :class:`~openturns.Gamma` distribution. parameters_set : int, optional Integer telling which parameters set is used for defining the distribution (amongst `ot.LaguerreFactory.ANALYSIS, ot.LaguerreFactory.PROBABILITY`). Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Laguerre polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \omega_i \\ b_i & = & - (2 i + k_a + 1) \omega_i \\ c_i & = & - \sqrt{(i + k_a) i} \omega_i \end{array}, \quad 1 < i where :math:`k_a` is the alternative shape parameter of the :class:`~openturns.Gamma` distribution, and: .. math:: \omega_i = \frac{1}{\sqrt{(i + 1) (i + k_a + 1)}} , \quad 1 < i See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.LaguerreFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 -1 + X 1 - 2 * X + 0.5 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::LaguerreFactory::getK "Accessor to the alternative shape parameter :math:`k_a`. Of the :class:`~openturns.Gamma` distribution. Returns ------- k_a : float Alternative shape parameter :math:`k_a = k - 1` of the :class:`~openturns.Gamma` distribution." openturns-1.9/python/src/Laplace.i000066400000000000000000000003361307543307100172500ustar00rootroot00000000000000// SWIG file Laplace.i %{ #include "openturns/Laplace.hxx" %} %include Laplace_doc.i %include openturns/Laplace.hxx namespace OT { %extend Laplace { Laplace(const Laplace & other) { return new OT::Laplace(other); } } } openturns-1.9/python/src/LaplaceFactory.i000066400000000000000000000004261307543307100206000ustar00rootroot00000000000000// SWIG file LaplaceFactory.i %{ #include "openturns/LaplaceFactory.hxx" %} %include LaplaceFactory_doc.i %include openturns/LaplaceFactory.hxx namespace OT { %extend LaplaceFactory { LaplaceFactory(const LaplaceFactory & other) { return new OT::LaplaceFactory(other); } } } openturns-1.9/python/src/LaplaceFactory_doc.i.in000066400000000000000000000002231307543307100220250ustar00rootroot00000000000000%feature("docstring") OT::LaplaceFactory "Laplace factory. Available constructor: LaplaceFactory() See also -------- DistributionFactory" openturns-1.9/python/src/Laplace_doc.i.in000066400000000000000000000035361307543307100205070ustar00rootroot00000000000000%feature("docstring") OT::Laplace "Laplace distribution. Available constructors: Laplace(*lambda=1.0, mu=0.0*) Parameters ---------- lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`. mu : float Location parameter :math:`\mu`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\lambda}{2} \exp\left(- \lambda |x - \mu|\right), \quad x \in \Rset with :math:`\lambda > 0` and :math:`\mu \in \Rset`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \mu \\ \Var{X} & = & \frac{2}{\lambda^2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Laplace(1.0, 0.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Laplace::getLambda "Accessor to the distribution's scale parameter :math:`\lambda`. Returns ------- lambda : float Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::Laplace::getMu "Accessor to the distribution's location parameter :math:`\mu`. Returns ------- mu : float Location parameter :math:`\mu`." // --------------------------------------------------------------------- %feature("docstring") OT::Laplace::setLambda "Accessor to the distribution's scale parameter :math:`\lambda`. Parameters ---------- lambda : float, :math:`\lambda > 0` Scale parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::Laplace::setMu "Accessor to the distribution's location parameter :math:`\mu`. Parameters ---------- mu : float, :math:`\mu \in \Rset` Location parameter :math:`\mu`." openturns-1.9/python/src/Last.i000066400000000000000000000003051307543307100166060ustar00rootroot00000000000000// SWIG file Last.i %{ #include "openturns/Last.hxx" %} %include Last_doc.i %include openturns/Last.hxx namespace OT{ %extend Last { Last(const Last & other) { return new OT::Last(other); } } } openturns-1.9/python/src/Last_doc.i.in000066400000000000000000000017311307543307100200440ustar00rootroot00000000000000%feature("docstring") OT::Last "Last history storage strategy. Available constructors: Last(*N*) Parameters ---------- N : integer Number of points to store. See also -------- HistoryStrategy, Compact, Null, Full Notes ----- The last strategy stores only the *N* last points." // --------------------------------------------------------------------- %feature("docstring") OT::Last::getHasWrapped "Accessor to a wrapped flag. Returns ------- wrapped : bool Return *True* if the storage has been wrapped." // --------------------------------------------------------------------- %feature("docstring") OT::Last::getIndex "Accessor to the index. Returns ------- index : integer The index of the storage position." // --------------------------------------------------------------------- %feature("docstring") OT::Last::getMaximumSize "Accessor to the maximum size of the storage strategy. Returns ------- N : integer The maximum number of points to store."openturns-1.9/python/src/LeastSquaresMetaModelSelection.i000066400000000000000000000006261307543307100237630ustar00rootroot00000000000000// SWIG file LeastSquaresMetaModelSelection.i %{ #include "openturns/LeastSquaresMetaModelSelection.hxx" %} %include LeastSquaresMetaModelSelection_doc.i %include openturns/LeastSquaresMetaModelSelection.hxx namespace OT { %extend LeastSquaresMetaModelSelection { LeastSquaresMetaModelSelection(const LeastSquaresMetaModelSelection & other) { return new OT::LeastSquaresMetaModelSelection(other); } } } openturns-1.9/python/src/LeastSquaresMetaModelSelectionFactory.i000066400000000000000000000010051307543307100253030ustar00rootroot00000000000000// SWIG file LeastSquaresMetaModelSelectionFactory.i %{ #include "openturns/LeastSquaresMetaModelSelectionFactory.hxx" %} %include LeastSquaresMetaModelSelectionFactory_doc.i %nodefaultctor LeastSquaresMetaModelSelectionFactory; %include openturns/LeastSquaresMetaModelSelectionFactory.hxx namespace OT { %extend LeastSquaresMetaModelSelectionFactory { LeastSquaresMetaModelSelectionFactory(const LeastSquaresMetaModelSelectionFactory & other) { return new OT::LeastSquaresMetaModelSelectionFactory(other); } } } openturns-1.9/python/src/LeastSquaresMetaModelSelectionFactory_doc.i.in000066400000000000000000000032271307543307100265450ustar00rootroot00000000000000%feature("docstring") OT::LeastSquaresMetaModelSelectionFactory "Least squares metamodel selection factory. Available constructors: LeastSquaresMetaModelSelectionFactory() LeastSquaresMetaModelSelectionFactory(*basisSeqFac*) LeastSquaresMetaModelSelectionFactory(*basisSeqFac, fittingAlgo*) Parameters ---------- basisSeqFac : :class:`~openturns.BasisSequenceFactory` A basis sequence factory. fittingAlgo : :class:`~openturns.FittingAlgorithm` A fitting algorithm. See also -------- ApproximationAlgorithm, PenalizedLeastSquaresAlgorithmFactory Notes ----- Implementation of an approximation algorithm implementation factory which builds an :class:`~openturns.ApproximationAlgorithm`. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`. Examples -------- >>> import openturns as ot >>> basisSequenceFactory = ot.LARS() >>> fittingAlgorithm = ot.CorrectedLeaveOneOut() >>> approximationAlgorithm = ot.LeastSquaresMetaModelSelectionFactory( ... basisSequenceFactory, fittingAlgorithm)" // --------------------------------------------------------------------- %feature("docstring") OT::LeastSquaresMetaModelSelectionFactory::getBasisSequenceFactory "Accessor to the basis sequence factory. Returns ------- basis : :class:`~openturns.BasisSequenceFactory` Basis sequence factory." // --------------------------------------------------------------------- %feature("docstring") OT::LeastSquaresMetaModelSelectionFactory::getFittingAlgorithm "Accessor to the fitting algorithm. Returns ------- algo : :class:`~openturns.FittingAlgorithm` Fitting algorithm." openturns-1.9/python/src/LeastSquaresMetaModelSelection_doc.i.in000066400000000000000000000005301307543307100252070ustar00rootroot00000000000000%feature("docstring") OT::LeastSquaresMetaModelSelection "Least squares metamodel selection factory. Adaptative sparse selection, as proposed in [Blatman2009]_. See also -------- ApproximationAlgorithm, PenalizedLeastSquaresAlgorithm Notes ----- The LeastSquaresMetaModelSelection is built from a least squares metamodel selection factory." openturns-1.9/python/src/LeastSquaresMethod.i000066400000000000000000000005501307543307100214620ustar00rootroot00000000000000// SWIG file LeastSquaresMethod.i %{ #include "openturns/LeastSquaresMethod.hxx" %} %include LeastSquaresMethod_doc.i OTTypedInterfaceObjectHelper(LeastSquaresMethod) %include openturns/LeastSquaresMethod.hxx namespace OT { %extend LeastSquaresMethod { LeastSquaresMethod(const LeastSquaresMethod & other) { return new OT::LeastSquaresMethod(other); } } } openturns-1.9/python/src/LeastSquaresMethodImplementation.i000066400000000000000000000006461307543307100243760ustar00rootroot00000000000000// SWIG file LeastSquaresMethodImplementation.i %{ #include "openturns/LeastSquaresMethodImplementation.hxx" %} %include LeastSquaresMethodImplementation_doc.i %include openturns/LeastSquaresMethodImplementation.hxx namespace OT { %extend LeastSquaresMethodImplementation { LeastSquaresMethodImplementation(const LeastSquaresMethodImplementation & other) { return new OT::LeastSquaresMethodImplementation(other); } } } openturns-1.9/python/src/LeastSquaresMethodImplementation_doc.i.in000066400000000000000000000157531307543307100256350ustar00rootroot00000000000000%define OT_LeastSquaresMethod_doc "Base class for least square solvers. Available constructors: LeastSquaresMethod(*proxy, weight, indices*) LeastSquaresMethod(*proxy, indices*) Parameters ---------- proxy : :class:`~openturns.DesignProxy` Input sample weight : sequence of float Output weights indices : sequence of int Indices allowed in the basis See also -------- CholeskyMethod, SVDMethod, QRMethod Notes ----- Solve the least-squares problem: .. math:: \vect{a} = \argmin_{\vect{b} \in \Rset^P} ||y - \vect{b}^{\intercal} \vect{\Psi}(\vect{U})||^2 " %enddef %feature("docstring") OT::LeastSquaresMethodImplementation OT_LeastSquaresMethod_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getInputSample_doc "Input sample accessor. Returns ------- inputSample : :class:`~openturns.Sample` Input sample." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getInputSample OT_LeastSquaresMethod_getInputSample_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getWeight_doc "Weights accessor. Returns ------- weight : :class:`~openturns.Point` Weights." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getWeight OT_LeastSquaresMethod_getWeight_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getBasis_doc "Basis accessor. Returns ------- basis : :class:`~openturns.getBasis` Basis." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getBasis OT_LeastSquaresMethod_getBasis_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getCurrentIndices_doc "Current indices accessor. Returns ------- indices : :class:`~openturns.Indices` Indices of the current decomposition in the global basis." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getCurrentIndices OT_LeastSquaresMethod_getCurrentIndices_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getInitialIndices_doc "Initial indices accessor. Returns ------- indices : :class:`~openturns.Indices` Initial indices of the terms in the global basis." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getInitialIndices OT_LeastSquaresMethod_getInitialIndices_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_buildCurrentBasis_doc "Build the current basis. Returns ------- phi : :class:`~openturns.Basis` The basis according to current indices." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::buildCurrentBasis OT_LeastSquaresMethod_buildCurrentBasis_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_solve_doc "Solve the least-squares problem. .. math:: \vect{a} = \argmin_{\vect{x} \in \Rset^P} ||M\vect{x}-\vect{b}||^2 Parameters ---------- b : sequence of float Second term of the equation Returns ------- a : :class:`~openturns.Point` The solution." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::solve OT_LeastSquaresMethod_solve_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_solveNormal_doc "Solve the least-squares problem using normal equation. .. math:: M^T*M*x=M^T*b Parameters ---------- b : sequence of float Second term of the equation Returns ------- x : :class:`~openturns.Point` The solution." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::solveNormal OT_LeastSquaresMethod_solveNormal_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getGramInverse_doc "Get the inverse Gram matrix of input sample. .. math:: G^{-1} = (X^T * X)^{-1} Returns ------- c : :class:`~openturns.CovarianceMatrix` The inverse Gram matrix." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getGramInverse OT_LeastSquaresMethod_getGramInverse_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getGramInverseDiag_doc "Get the diagonal of the inverse Gram matrix. .. math:: diag(G^{-1}) = diag((X^T * X)^{-1}) Returns ------- d : :class:`~openturns.Point` The diagonal of the inverse Gram matrix." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getGramInverseDiag OT_LeastSquaresMethod_getGramInverseDiag_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getGramInverseTrace_doc "Get the trace of the inverse Gram matrix. .. math:: Tr(G^{-1}) = Tr(x^T * x)^{-1} Returns ------- x : :class:`~openturns.Scalar` The trace of inverse Gram matrix." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getGramInverseTrace OT_LeastSquaresMethod_getGramInverseTrace_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getH_doc "Get the projection matrix H. .. math:: H = X * (X^T * X)^{-1} * X^T Returns ------- h : :class:`~openturns.SymmetricMatrix` The projection matrix H." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getH OT_LeastSquaresMethod_getH_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_getHDiag_doc "Get the diagonal of the projection matrix H. .. math:: H = X * (X^T * X)^{-1} * X^T Returns ------- d : :class:`~openturns.Point` The diagonal of H." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::getHDiag OT_LeastSquaresMethod_getHDiag_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_computeWeightedDesign_doc "Build the design matrix. Parameters ---------- whole : bool, defaults to False Whether to use the initial indices instead of the current indices Returns ------- psiAk : :class:`~openturns.Matrix` The design matrix" %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::computeWeightedDesign OT_LeastSquaresMethod_computeWeightedDesign_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_trashDecomposition_doc "Drop the current decomposition." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::trashDecomposition OT_LeastSquaresMethod_trashDecomposition_doc // --------------------------------------------------------------------- %define OT_LeastSquaresMethod_update_doc "Update the current decomposition. Parameters ---------- addedIndices : sequence of int Indices of added basis terms. conservedIndices : sequence of int Indices of conserved basis terms. removedIndices : sequence of int Indices of removed basis terms." %enddef %feature("docstring") OT::LeastSquaresMethodImplementation::update OT_LeastSquaresMethod_update_doc openturns-1.9/python/src/LeastSquaresMethod_doc.i.in000066400000000000000000000041171307543307100227170ustar00rootroot00000000000000%feature("docstring") OT::LeastSquaresMethod OT_LeastSquaresMethod_doc %feature("docstring") OT::LeastSquaresMethod::buildCurrentBasis OT_LeastSquaresMethod_buildCurrentBasis_doc %feature("docstring") OT::LeastSquaresMethod::computeWeightedDesign OT_LeastSquaresMethod_computeWeightedDesign_doc %feature("docstring") OT::LeastSquaresMethod::getInputSample OT_LeastSquaresMethod_getInputSample_doc %feature("docstring") OT::LeastSquaresMethod::getWeight OT_LeastSquaresMethod_getWeight_doc %feature("docstring") OT::LeastSquaresMethod::getBasis OT_LeastSquaresMethod_getBasis_doc %feature("docstring") OT::LeastSquaresMethod::getCurrentIndices OT_LeastSquaresMethod_getCurrentIndices_doc %feature("docstring") OT::LeastSquaresMethod::getInitialIndices OT_LeastSquaresMethod_getInitialIndices_doc %feature("docstring") OT::LeastSquaresMethod::solve OT_LeastSquaresMethod_solve_doc %feature("docstring") OT::LeastSquaresMethod::solveNormal OT_LeastSquaresMethod_solveNormal_doc %feature("docstring") OT::LeastSquaresMethod::getGramInverse OT_LeastSquaresMethod_getGramInverse_doc %feature("docstring") OT::LeastSquaresMethod::getGramInverseDiag OT_LeastSquaresMethod_getGramInverseDiag_doc %feature("docstring") OT::LeastSquaresMethod::getGramInverseTrace OT_LeastSquaresMethod_getGramInverseTrace_doc %feature("docstring") OT::LeastSquaresMethod::getH OT_LeastSquaresMethod_getH_doc %feature("docstring") OT::LeastSquaresMethod::getHDiag OT_LeastSquaresMethod_getHDiag_doc %feature("docstring") OT::LeastSquaresMethod::trashDecomposition OT_LeastSquaresMethod_trashDecomposition_doc %feature("docstring") OT::LeastSquaresMethod::update OT_LeastSquaresMethod_update_doc // --------------------------------------------------------------------- %feature("docstring") OT::LeastSquaresMethod::Build "Instanciate a decomposition method from its name. Parameters ---------- proxy : :class:`~openturns.DesignProxy` Input sample weight : sequence of float, optional Output weights indices : sequence of int Indices allowed in the basis Returns ------- method : :class:`~openturns.LeastSquaresMethod` The built method" openturns-1.9/python/src/LeastSquaresStrategy.i000066400000000000000000000005051307543307100220440ustar00rootroot00000000000000// SWIG file LeastSquaresStrategy.i %{ #include "openturns/LeastSquaresStrategy.hxx" %} %include LeastSquaresStrategy_doc.i %include openturns/LeastSquaresStrategy.hxx namespace OT{ %extend LeastSquaresStrategy { LeastSquaresStrategy(const LeastSquaresStrategy & other) { return new OT::LeastSquaresStrategy(other); } } } openturns-1.9/python/src/LeastSquaresStrategy_doc.i.in000066400000000000000000000055371307543307100233100ustar00rootroot00000000000000%feature("docstring") OT::LeastSquaresStrategy "Least squares strategy for the approximation coefficients. Available constructors: LeastSquaresStrategy(*weightedExp*) LeastSquaresStrategy(*weightedExp, approxAlgoImpFact*) LeastSquaresStrategy(*measure, approxAlgoImpFact*) LeastSquaresStrategy(*measure, weightedExp, approxAlgoImpFact*) LeastSquaresStrategy(*inputSample, outputSample, approxAlgoImpFact*) LeastSquaresStrategy(*inputSample, weights, outputSample, approxAlgoImpFact*) Parameters ---------- weightedExp : :class:`~openturns.WeightedExperiment` Experimental design used for the transformed input data. When not precised, OpenTURNS uses a :class:`~openturns.MonteCarloExperiment`. approxAlgoImpFact : ApproximationAlgorithmImplementationFactory The factory that builds the desired :class:`~openturns.ApproximationAlgorithm`. When not precised, OpenTURNS uses the :class:`~openturns.PenalizedLeastSquaresAlgorithmFactory`. measure : :class:`~openturns.Distribution` Distribution :math:`\mu` with respect to which the basis is orthonormal. When not precised, OpenTURNS uses the limit measure defined within the :class:`~openturns.WeightedExperiment`. inputSample, outputSample : 2-d sequence of float The input random variables :math:`\vect{X}=(X_1, \dots, X_{n_X})^T` and the output samples :math:`\vect{Y}` that describe the model. weights : sequence of float Numerical point that are the weights associated to the input sample points such that the corresponding weighted experiment is a good approximation of :math:`\mu`. If not precised, all weights are equals to :math:`\omega_i = \frac{1}{size}`, where :math:`size` is the size of the sample. See also -------- FunctionalChaosAlgorithm, ProjectionStrategy, IntegrationStrategy Notes ----- This class is not usable because it has sense only within the :class:`~openturns.FunctionalChaosAlgorithm` : the least squares strategy evaluates the coefficients :math:`(a_k)_{k \in K}` of the polynomials decomposition as follows: .. math:: \vect{a} = \argmin_{\vect{b} \in \Rset^P} E_{\mu} \left[ \left( g \circ T^{-1} (\vect{U}) - \vect{b}^{\intercal} \vect{\Psi}(\vect{U}) \right)^2 \right] where :math:`\vect{U} = T(\vect{X})`. The mean expectation :math:`E_{\mu}` is approximated by a relation of type: .. math:: E_{\mu} \left[ f(\vect{U}) \right] \approx \sum_{i \in I} \omega_i f(\Xi_i) where is a function :math:`L_1(\mu)` defined as: .. math:: f(\vect{U} = \left( g \circ T^{-1} (\vect{U}) - \vect{b}^{\intercal} \vect{\Psi}(\vect{U}) \right)^2 In the approximation of the mean expectation, the set *I*, the points :math:`(\Xi_i)_{i \in I}` and the weights :math:`(\omega_i)_{i \in I}` are evaluated from methods implemented in the :class:`~openturns.WeightedExperiment`." openturns-1.9/python/src/LegendreFactory.i000066400000000000000000000004361307543307100207650ustar00rootroot00000000000000// SWIG file LegendreFactory.i %{ #include "openturns/LegendreFactory.hxx" %} %include LegendreFactory_doc.i %include openturns/LegendreFactory.hxx namespace OT { %extend LegendreFactory { LegendreFactory(const LegendreFactory & other) { return new OT::LegendreFactory(other); } } } openturns-1.9/python/src/LegendreFactory_doc.i.in000066400000000000000000000020561307543307100222170ustar00rootroot00000000000000%feature("docstring") OT::LegendreFactory "Legendre specific orthonormal univariate polynomial family. For the :class:`~openturns.Uniform` distribution. Available constructor: LegendreFactory() Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Legendre polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle \frac{\sqrt{(2 i + 1) (2 i + 3)}} {i + 1} \\ b_i & = & 0 \\ c_i & = & \displaystyle - \frac{i \sqrt{2 i + 3}} {(i + 1) \sqrt{2 i - 1}} \end{array}, \quad 1 < i See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.LegendreFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 1.73205 * X -1.11803 + 3.3541 * X^2" openturns-1.9/python/src/Less.i000066400000000000000000000004461307543307100166170ustar00rootroot00000000000000// SWIG file Less.i %{ #include "openturns/Less.hxx" %} %include Less_doc.i %include openturns/Less.hxx namespace OT { %extend Less { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend Less { Less(const Less & other) { return new OT::Less(other); } } } openturns-1.9/python/src/LessOrEqual.i000066400000000000000000000005451307543307100201100ustar00rootroot00000000000000// SWIG file LessOrEqual.i %{ #include "openturns/LessOrEqual.hxx" %} %include LessOrEqual_doc.i %include openturns/LessOrEqual.hxx namespace OT { %extend LessOrEqual { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend LessOrEqual { LessOrEqual(const LessOrEqual & other) { return new OT::LessOrEqual(other); } } } openturns-1.9/python/src/LessOrEqual_doc.i.in000066400000000000000000000005321307543307100213360ustar00rootroot00000000000000%feature("docstring") OT::LessOrEqual "Less or equal comparison operator. Available constructors: LessOrEqual() See also -------- Equal, Greater, GreaterOrEqual, Less Examples -------- >>> import openturns as ot >>> operator = ot.LessOrEqual() >>> print(operator(1, 2)) True >>> print(operator(2, 1)) False >>> print(operator(2, 2)) True "openturns-1.9/python/src/Less_doc.i.in000066400000000000000000000005041307543307100200440ustar00rootroot00000000000000%feature("docstring") OT::Less "Less comparison operator. Available constructors: Less() See also -------- Equal, Greater, GreaterOrEqual, LessOrEqual Examples -------- >>> import openturns as ot >>> operator = ot.Less() >>> print(operator(1, 2)) True >>> print(operator(2, 1)) False >>> print(operator(2, 2)) False "openturns-1.9/python/src/LevelSet.i000066400000000000000000000003471307543307100174340ustar00rootroot00000000000000// SWIG file LevelSet.i %{ #include "openturns/LevelSet.hxx" %} %include LevelSet_doc.i %include openturns/LevelSet.hxx namespace OT { %extend LevelSet { LevelSet(const LevelSet & other) { return new OT::LevelSet(other); } } } openturns-1.9/python/src/LevelSetMesher.i000066400000000000000000000004201307543307100205700ustar00rootroot00000000000000// SWIG file LevelSetMesher.i %{ #include "openturns/LevelSetMesher.hxx" %} %include LevelSetMesher_doc.i %include openturns/LevelSetMesher.hxx namespace OT {%extend LevelSetMesher {LevelSetMesher(const LevelSetMesher & other){return new OT::LevelSetMesher(other);}}} openturns-1.9/python/src/LevelSetMesher_doc.i.in000066400000000000000000000065151307543307100220350ustar00rootroot00000000000000%feature("docstring") OT::LevelSetMesher "Creation of mesh of box type. Available constructor: LevelSetMesher(*discretization*) Parameters ---------- discretization : sequence of int, of dimension :math:`\leq 3`. Discretization of the level set bounding box. solver : :class:`~openturns.OptimizationAlgorithm` Optimization solver used to project the vertices onto the level set. It must be able to solve nearest point problems. Default is :class:`~openturns.AbdoRackwitz`. Notes ----- The meshing algorithm is based on the :class:`~openturns.IntervalMesher` class. First, the bounding box of the level set (provided by the user or automatically computed) is meshed. Then, all the simplices with all vertices outside of the level set are rejected, while the simplices with all vertices inside of the level set are kept. The remaining simplices are adapted the following way : * The mean point of the vertices inside of the level set is computed * Each vertex outside of the level set is projected onto the level set using a linear interpolation * If the *project* flag is *True*, then the projection is refined using an optimization solver. Examples -------- Create a mesh: >>> import openturns as ot >>> mesher = ot.LevelSetMesher([5, 10]) >>> level = 1.0 >>> function = ot.SymbolicFunction(['x0', 'x1'], ['x0^2+x1^2']) >>> levelSet = ot.LevelSet(function, level) >>> mesh = mesher.build(levelSet)" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSetMesher::build "Build the mesh of level set type. Parameters ---------- levelSet : :class:`~openturns.LevelSet` The level set to be meshed, of dimension equal to the dimension of `discretization`. boundingBox : :class:`~openturns.Interval` The bounding box used to mesh the level set. By default it is automatically computed from the elements of the given level set. project : bool Flag to tell if the vertices outside of the level set of a simplex partially included into the level set have to be projected onto the level set. Default is *True*. Returns ------- mesh : :class:`~openturns.Mesh` The mesh built." // --------------------------------------------------------------------- %feature("docstring") OT::LevelSetMesher::getDiscretization "Accessor to the discretization. Returns ------- discretization : :class:`~openturns.Indices` Discretization of the bounding box of the level sets." // --------------------------------------------------------------------- %feature("docstring") OT::LevelSetMesher::setDiscretization "Accessor to the discretization. Parameters ---------- discretization : sequence of int Discretization of the bounding box of the level sets." // --------------------------------------------------------------------- %feature("docstring") OT::LevelSetMesher::getOptimizationAlgorithm "Accessor to the optimization solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The optimization solver used to project vertices onto the level set." // --------------------------------------------------------------------- %feature("docstring") OT::LevelSetMesher::setOptimizationAlgorithm "Accessor to the optimization solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The optimization solver used to project vertices onto the level set." openturns-1.9/python/src/LevelSet_doc.i.in000066400000000000000000000120601307543307100206610ustar00rootroot00000000000000%feature("docstring") OT::LevelSet "Level set. Available constructors: LevelSet(*dim=1*) LevelSet(*function=ot.SymbolicFunction(['x'], ['1.0']), level=0.0*) Parameters ---------- dim : int, :math:`dim \geq 0` Dimension of the LevelSet. function : :class:`~openturns.Function` A function such that: :math:`f: \Rset^{dim} \mapsto \Rset` defining the LevelSet. level : float Level :math:`s` defining the LevelSet. Notes ----- A LevelSet is a :class:`~openturns.Domain` defined as follows: .. math:: \{ \vect{x} \in \Rset^{dim} \, | \, f(\vect{x}) \leq s \} Examples -------- >>> import openturns as ot >>> function = ot.SymbolicFunction(['x1', 'x2'], ['x1^4 + x2^4']) >>> s = 1.0 >>> levelSet = ot.LevelSet(function, s)" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::intersect "Return the levelSet equals to the intersection between the LevelSet and another one. Parameters ---------- otherLevelSet : A LevelSet defined by :math:`(f_2, s_2)`. Returns ------- levelSet : :class:`~openturns.LevelSet` *levelSet* equals to the intersection between the LevelSet and *otherLevelSet* i.e. *levelSet* is defined by: :math:`\{\vect{x} \in \Rset^{dim} | f(\vect{x}) \leq s \, \mbox{and} \, f_2(\vect{x}) \leq s_2\}`. Examples -------- >>> import openturns as ot >>> # First level set >>> function = ot.SymbolicFunction(['x'], ['3*x-1']) >>> levelSet1 = ot.LevelSet(function, 0.5) >>> # Second level set >>> function = ot.SymbolicFunction(['x'], ['x']) >>> levelSet2 = ot.LevelSet(function, 0.5) >>> # Intersection between levelSet1 and levelSet2 >>> intersection = levelSet1.intersect(levelSet2) >>> # Tests >>> print(intersection.contains([1.0])) False >>> print(intersection.contains([0.25])) True" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::join "Return the levelSet equals to the union between the LevelSet and another one. Parameters ---------- otherLevelSet : A LevelSet defined by :math:`(f_2, s_2)`. Returns ------- levelSet : :class:`~openturns.LevelSet` *levelSet* equals to the union between the LevelSet and *otherLevelSet* i.e. *levelSet* is defined by: :math:`\{\vect{x} \in \Rset^{dim} | f(\vect{x}) \leq s \, \mbox{or} \, f_2(\vect{x}) \leq s_2\}`. Examples -------- >>> import openturns as ot >>> # First level set >>> function = ot.SymbolicFunction(['x'], ['3*x-1']) >>> levelSet1 = ot.LevelSet(function, 0.0) >>> # Second level set >>> function = ot.SymbolicFunction(['x'], ['x']) >>> levelSet2 = ot.LevelSet(function, 0.0) >>> # Union between levelSet1 and levelSet2 >>> join = levelSet1.join(levelSet2) >>> # Tests >>> print(join.contains([0.5])) False >>> print(join.contains([0.25])) True" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::getFunction "Get the function defining the level set. Returns ------- function : :class:`~openturns.Function` A function such that: :math:`f: \Rset^{dim} \mapsto \Rset` defining the LevelSet. Examples -------- >>> import openturns as ot >>> function = ot.SymbolicFunction(['x'], ['3*x-1']) >>> levelSet = ot.LevelSet(function, 0.0) >>> print(levelSet.getFunction().getEvaluation()) [x]->[3*x-1]" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::setFunction "Set the function defining the level set. Parameters ---------- function : :class:`~openturns.Function` A function such that: :math:`f: \Rset^{dim} \mapsto \Rset` defining the LevelSet. Examples -------- >>> import openturns as ot >>> levelSet = ot.LevelSet() >>> function = ot.SymbolicFunction(['x'], ['3*x-1']) >>> levelSet.setFunction(function)" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::getLevel "Get the level defining the level set. Returns ------- level : float Level :math:`s` defining the LevelSet. Examples -------- >>> import openturns as ot >>> function = ot.SymbolicFunction(['x'], ['3*x-1']) >>> levelSet = ot.LevelSet(function, 0.0) >>> print(levelSet.getLevel()) 0.0" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::setLevel "Set the level defining the level set. Parameters ---------- level : float Level :math:`s` defining the LevelSet. Examples -------- >>> import openturns as ot >>> levelSet = ot.LevelSet() >>> levelSet.setLevel(3.0)" // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::setLowerBound "Set the lower bound of the bounding box. Parameters ---------- bound : sequence of floats Lower bound of the bounding box of the level set. It allows to clip the level set." // --------------------------------------------------------------------- %feature("docstring") OT::LevelSet::setUpperBound "Set the upper bound of the bounding box. Parameters ---------- bound : sequence of floats Upper bound of the bounding box of the level set. It allows to clip the level set." openturns-1.9/python/src/LinearBasisFactory.i000066400000000000000000000004661307543307100214370ustar00rootroot00000000000000// SWIG file LinearBasisFactory.i %{ #include "openturns/LinearBasisFactory.hxx" %} %include LinearBasisFactory_doc.i %include openturns/LinearBasisFactory.hxx namespace OT { %extend LinearBasisFactory { LinearBasisFactory(const LinearBasisFactory & other) { return new OT::LinearBasisFactory(other); } } } openturns-1.9/python/src/LinearBasisFactory_doc.i.in000066400000000000000000000011131307543307100226570ustar00rootroot00000000000000%feature("docstring") OT::LinearBasisFactory "Linear basis factory to construct the regression basis. Available constructors: LinearBasisFactory(*dimension*) Parameters ---------- dimension : integer Input dimension of the basis. See also -------- BasisFactory, ConstantBasisFactory, QuadraticBasisFactory Notes ----- A factory for linear basis of input dimension *dimension*." // --------------------------------------------------------------------- %feature("docstring") OT::LinearBasisFactory::build "Build the basis. Returns ------- basis : :class:`~openturns.Basis`." openturns-1.9/python/src/LinearCombinationEvaluation.i000066400000000000000000000005731307543307100233370ustar00rootroot00000000000000// SWIG file LinearCombinationEvaluation.i OTAutodoc(LinearCombinationEvaluation) %{ #include "openturns/LinearCombinationEvaluation.hxx" %} %include openturns/LinearCombinationEvaluation.hxx namespace OT { %extend LinearCombinationEvaluation { LinearCombinationEvaluation(const LinearCombinationEvaluation & other) { return new OT::LinearCombinationEvaluation(other); } } } openturns-1.9/python/src/LinearCombinationFunction.i000066400000000000000000000005561307543307100230160ustar00rootroot00000000000000// SWIG file LinearCombinationFunction.i %{ #include "openturns/LinearCombinationFunction.hxx" %} %include LinearCombinationFunction_doc.i %include openturns/LinearCombinationFunction.hxx namespace OT { %extend LinearCombinationFunction { LinearCombinationFunction(const LinearCombinationFunction & other) { return new OT::LinearCombinationFunction(other); } } } openturns-1.9/python/src/LinearCombinationFunction_doc.i.in000066400000000000000000000026131307543307100242440ustar00rootroot00000000000000%feature("docstring") OT::LinearCombinationFunction "Linear combination of functions. Allows to create a function which is the linear combination of functions with scalar weights. :math:`functionCollection = (f_1, \hdots, f_N)` where :math:`\forall 1 \leq i \leq N, \, f_i: \Rset^n \rightarrow \Rset^{p}` and :math:`scalarCoefficientColl = (c_1, \hdots, c_N) \in \Rset^N` then the linear combination is: .. math:: linComb: \left|\begin{array}{rcl} \Rset^n & \rightarrow & \Rset^{p} \\ \vect{X} & \mapsto & \displaystyle \sum_i c_if_i (\vect{X}) \end{array}\right. Available constructor: LinearCombinationFunction(*functionCollection, scalarCoefficientColl*) Parameters ---------- functionCollection : sequence of :class:`~openturns.Function` Collection of functions to sum. scalarCoefficientColl : sequence of float Collection of scalar weights. Examples -------- >>> import openturns as ot >>> functions = list() >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1^2 + x2', 'x1 + x2 + x3'])) >>> functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], ... ['x1 + 2 * x2 + x3', 'x1 + x2 - x3'])) >>> coefficients = [2.0, 4.0] >>> myFunction2 = ot.LinearCombinationFunction(functions, coefficients) >>> print(myFunction2([1.0, 2.0, 3.0])) [38,12]" openturns-1.9/python/src/LinearCombinationGradient.i000066400000000000000000000005521307543307100227620ustar00rootroot00000000000000// SWIG file LinearCombinationGradient.i OTAutodoc(LinearCombinationGradient) %{ #include "openturns/LinearCombinationGradient.hxx" %} %include openturns/LinearCombinationGradient.hxx namespace OT { %extend LinearCombinationGradient { LinearCombinationGradient(const LinearCombinationGradient & other) { return new OT::LinearCombinationGradient(other); } } } openturns-1.9/python/src/LinearCombinationHessian.i000066400000000000000000000005421307543307100226160ustar00rootroot00000000000000// SWIG file LinearCombinationHessian.i OTAutodoc(LinearCombinationHessian) %{ #include "openturns/LinearCombinationHessian.hxx" %} %include openturns/LinearCombinationHessian.hxx namespace OT { %extend LinearCombinationHessian { LinearCombinationHessian(const LinearCombinationHessian & other) { return new OT::LinearCombinationHessian(other); } } } openturns-1.9/python/src/LinearEnumerateFunction.i000066400000000000000000000005361307543307100224770ustar00rootroot00000000000000// SWIG file LinearEnumerateFunction.i %{ #include "openturns/LinearEnumerateFunction.hxx" %} %include LinearEnumerateFunction_doc.i %include openturns/LinearEnumerateFunction.hxx namespace OT { %extend LinearEnumerateFunction { LinearEnumerateFunction(const LinearEnumerateFunction & other) { return new OT::LinearEnumerateFunction(other); } } } openturns-1.9/python/src/LinearEnumerateFunction_doc.i.in000066400000000000000000000053421307543307100237310ustar00rootroot00000000000000%feature("docstring") OT::LinearEnumerateFunction "Linear enumerate function. Available constructors: LinearEnumerateFunction(*dim=1*) Parameters ---------- dim : int Dimension. Notes ----- Given an input random vector :math:`\vect{X}` with prescribed probability density function (PDF) :math:`f_{\vect{X}}(\vect{x})`, it is possible to build up a *polynomial chaos* (PC) basis :math:`\{\psi_{\vect{\alpha}},\vect{\alpha} \in \Nset^{n_X}\}`. Of interest is the definition of enumeration strategies for exploring this basis, i.e. of suitable *enumeration functions* :math:`\tau` from :math:`\Nset` to :math:`\Nset^{n_X}`, which creates a one-to-one mapping between an integer :math:`j` and a multi-index :math:`\Nset^{n_X}`. Let us first define the *total degree* of any multi-index :math:`\vect{\alpha}` in :math:`\Nset^{n_X}` by :math:`\sum_{i=1}^{n_X} \alpha_i`. A natural choice to sort the PC basis (i.e. the multi-indices :math:`\vect{\alpha}`) is the lexicographical order with a constraint of increasing total degree. Mathematically speaking, a bijective enumeration function :math:`\tau` is defined by: .. math:: \begin{array}{llcl} \tau \, : & \Nset & \longrightarrow & \Nset^{n_X} \\ & j & \longmapsto & \{\alpha_1,\dots, \alpha_{n_X}\} \, \equiv \, \{\tau_1(j),\dots,\tau_{n_X}(j)\} \\ \end{array} such that: .. math:: \tau(0) = \{0,\dots,0\} and .. math:: \forall 1 \leq j>> import openturns as ot >>> # 4-dimensional case >>> enumerateFunction = ot.LinearEnumerateFunction(4) >>> for i in range(9): ... print(enumerateFunction(i)) [0,0,0,0] [1,0,0,0] [0,1,0,0] [0,0,1,0] [0,0,0,1] [2,0,0,0] [1,1,0,0] [1,0,1,0] [1,0,0,1]"openturns-1.9/python/src/LinearEvaluation.i000066400000000000000000000004461307543307100211530ustar00rootroot00000000000000// SWIG file LinearEvaluation.i %{ #include "openturns/LinearEvaluation.hxx" %} %include LinearEvaluation_doc.i %include openturns/LinearEvaluation.hxx namespace OT { %extend LinearEvaluation { LinearEvaluation(const LinearEvaluation & other) { return new OT::LinearEvaluation(other); } } } openturns-1.9/python/src/LinearEvaluation_doc.i.in000066400000000000000000000031061307543307100224010ustar00rootroot00000000000000%feature("docstring") OT::LinearEvaluation "Linear numerical math evaluation implementation. Available constructors: LinearEvaluation(*center, constant, linear*) Parameters ---------- center : sequence of float Vector :math:`\vect{b}`. constant : sequence of float Vector :math:`\vect{c}`. linear : :class:`~openturns.Matrix` Matrix :math:`\mat{A}`. See also -------- Function Notes ----- This implements a linear :class:`~openturns.Function` :math:`f` defined as : .. math:: f : & \Rset^n \rightarrow \Rset^p \\ & \vect{X} \mapsto \mat{A} ( \vect{X} - \vect{b} ) + \vect{c} where: - :math:`\mat{A}` is the :math:`\Rset^p \times \Rset^n` matrix defined by the input *linear* - :math:`\vect{b}` is the :math:`\Rset^n` vector defined by the object *center* - :math:`\vect{c}` is the :math:`\Rset^p` vector defined by the object *constant*." // --------------------------------------------------------------------- %feature("docstring") OT::LinearEvaluation::getCenter "Accessor to the center. Returns ------- center : :class:`~openturns.Point` The center :math:`\vect{b}`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearEvaluation::getConstant "Accessor to the constant. Returns ------- constant : :class:`~openturns.Point` The constant :math:`\vect{c}`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearEvaluation::getLinear "Accessor to the matrix. Returns ------- linear : :class:`~openturns.Matrix` The matrix :math:`\mat{A}`." openturns-1.9/python/src/LinearFunction.i000066400000000000000000000010711307543307100206240ustar00rootroot00000000000000// SWIG file LinearFunction.i %{ #include "openturns/LinearFunction.hxx" %} %include LinearFunction_doc.i %include openturns/LinearFunction.hxx namespace OT { %extend LinearFunction { LinearFunction(const LinearFunction & other) { return new OT::LinearFunction(other); } } } %pythoncode %{ # deprecated class LinearNumericalMathFunction(LinearFunction): def __init__(self, *args): super(LinearNumericalMathFunction, self).__init__(*args) openturns.common.Log.Warn('class LinearNumericalMathFunction is deprecated in favor of LinearFunction') %} openturns-1.9/python/src/LinearFunction_doc.i.in000066400000000000000000000015331307543307100220610ustar00rootroot00000000000000%feature("docstring") OT::LinearFunction "Linear numerical math function. Available constructors: LinearFunction(*center, constant, linear*) Parameters ---------- center : sequence of float Vector :math:`\vect{b}`. constant : sequence of float Vector :math:`\vect{c}`. linear : :class:`~openturns.Matrix` Matrix :math:`\mat{A}`. See also -------- Function Notes ----- This implements a linear :class:`~openturns.Function` :math:`f` defined as : .. math:: f : & \Rset^n \rightarrow \Rset^p \\ & \vect{X} \mapsto \mat{A} ( \vect{X} - \vect{b} ) + \vect{c} where: - :math:`\mat{A}` is the :math:`\Rset^p \times \Rset^n` matrix defined by the input *linear*, - :math:`\vect{b}` is the :math:`\Rset^n` vector defined by the object *center*, - :math:`\vect{c}` is the :math:`\Rset^p` vector defined by the object *constant*."openturns-1.9/python/src/LinearGradient.i000066400000000000000000000004261307543307100205770ustar00rootroot00000000000000// SWIG file LinearGradient.i %{ #include "openturns/LinearGradient.hxx" %} %include LinearGradient_doc.i %include openturns/LinearGradient.hxx namespace OT { %extend LinearGradient { LinearGradient(const LinearGradient & other) { return new OT::LinearGradient(other); } } } openturns-1.9/python/src/LinearGradient_doc.i.in000066400000000000000000000001311307543307100220220ustar00rootroot00000000000000%feature("docstring") OT::LinearGradient "Linear numerical math gradient implementation."openturns-1.9/python/src/LinearLeastSquares.i000066400000000000000000000004661307543307100214620ustar00rootroot00000000000000// SWIG file LinearLeastSquares.i %{ #include "openturns/LinearLeastSquares.hxx" %} %include LinearLeastSquares_doc.i %include openturns/LinearLeastSquares.hxx namespace OT { %extend LinearLeastSquares { LinearLeastSquares(const LinearLeastSquares & other) { return new OT::LinearLeastSquares(other); } } } openturns-1.9/python/src/LinearLeastSquares_doc.i.in000066400000000000000000000126741307543307100227200ustar00rootroot00000000000000%feature("docstring") OT::LinearLeastSquares "First order polynomial response surface by least squares. Available constructors: LinearLeastSquares(*dataIn, function*) LinearLeastSquares(*dataIn, dataOut*) Parameters ---------- dataIn : 2-d sequence of float Input data. function : :class:`~openturns.Function` Function :math:`h` to be approximated. dataOut : 2-d sequence of float Output data. If not specified, this sample is computed such as: :math:`dataOut = h(dataIn)`. Notes ----- Instead of replacing the model response :math:`h(\vect{x})` for a *local* approximation around a given set :math:`\vect{x}_0` of input parameters as in Taylor approximations, one may seek a *global* approximation of :math:`h(\vect{x})` over its whole domain of definition. A common choice to this end is global polynomial approximation. We consider here a global approximation of the model response using a linear function: .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, \sum_{j=0}^{n_X} \; a_j \; \psi_j(\vect{x}) where :math:`(a_j \, , \, j=0, \cdots,n_X)` is a set of unknown coefficients and the family :math:`(\psi_j,j=0,\cdots, n_X)` gathers the constant monomial :math:`1` and the monomials of degree one :math:`x_i`. Using the vector notation :math:`\vect{a} \, = \, (a_{0} , \cdots , a_{n_X} )^{\textsf{T}}` and :math:`\vect{\psi}(\vect{x}) \, = \, (\psi_0(\vect{x}), \cdots, \psi_{n_X}(\vect{x}) )^{\textsf{T}}`, this rewrites: .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, \vect{a}^{\textsf{T}} \; \vect{\psi}(\vect{x}) A *global* approximation of the model response over its whole definition domain is sought. To this end, the coefficients :math:`a_j` may be computed using a least squares regression approach. In this context, an experimental design :math:`\vect{\cX} =(x^{(1)},\cdots,x^{(N)})`, i.e. a set of realizations of input parameters is required, as well as the corresponding model evaluations :math:`\vect{\cY} =(y^{(1)},\cdots,y^{(N)})`. The following minimization problem has to be solved: .. math:: \mbox{Find} \quad \widehat{\vect{a}} \quad \mbox{that minimizes} \quad \cJ(\vect{a}) \, = \, \sum_{i=1}^N \; \left( y^{(i)} \; - \; \vect{a}^{\textsf{T}} \vect{\psi}(\vect{x}^{(i)}) \right)^2 The solution is given by: .. math:: \widehat{\vect{a}} \, = \, \left( \vect{\vect{\Psi}}^{\textsf{T}} \vect{\vect{\Psi}} \right)^{-1} \; \vect{\vect{\Psi}}^{\textsf{T}} \; \vect{\cY} where: .. math:: \vect{\vect{\Psi}} \, = \, (\psi_{j}(\vect{x}^{(i)}) \; , \; i=1,\cdots,N \; , \; j = 0,\cdots,n_X) See also -------- QuadraticLeastSquares, LinearTaylor, QuadraticTaylor Examples -------- >>> import openturns as ot >>> formulas = ['cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> data = [[0.5,0.5], [-0.5,-0.5], [-0.5,0.5], [0.5,-0.5]] >>> data += [[0.25,0.25], [-0.25,-0.25], [-0.25,0.25], [0.25,-0.25]] >>> myLeastSquares = ot.LinearLeastSquares(data, myFunc) >>> myLeastSquares.run() >>> responseSurface = myLeastSquares.getResponseSurface() >>> print(responseSurface([0.1,0.1])) [0.854471,1.06031]" // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getDataIn "Get the input data. Returns ------- dataIn : :class:`~openturns.Sample` Input data." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getConstant "Get the constant vector of the approximation. Returns ------- constantVector : :class:`~openturns.Point` Constant vector of the approximation, equal to :math:`a_0`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getDataOut "Get the output data. Returns ------- dataOut : :class:`~openturns.Sample` Output data. If not specified in the constructor, the sample is computed such as: :math:`dataOut = h(dataIn)`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::setDataOut "Set the output data. Parameters ---------- dataOut : 2-d sequence of float Output data." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getInputFunction "Get the function. Returns ------- function : :class:`~openturns.Function` Function :math:`h` to be approximated." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getLinear "Get the linear matrix of the approximation. Returns ------- linearMatrix : :class:`~openturns.Matrix` Linear matrix of the approximation of the function :math:`h`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::getResponseSurface "Get an approximation of the function. Returns ------- approximation : :class:`~openturns.Function` An approximation of the function :math:`h` by Linear Least Squares." // --------------------------------------------------------------------- %feature("docstring") OT::LinearLeastSquares::run "Perform the least squares approximation." openturns-1.9/python/src/LinearModel.i000066400000000000000000000005461307543307100201050ustar00rootroot00000000000000// SWIG file LinearModel.i %{ #include "openturns/LinearModel.hxx" %} %include LinearModel_doc.i %rename(LinearModel_operator___eq__) OT::operator ==(const LinearModel & lhs, const LinearModel & rhs); %include openturns/LinearModel.hxx namespace OT{ %extend LinearModel { LinearModel(const LinearModel & other) { return new OT::LinearModel(other); } } } openturns-1.9/python/src/LinearModelFactory.i000066400000000000000000000004651307543307100214350ustar00rootroot00000000000000// SWIG file LinearModelFactory.i %{ #include "openturns/LinearModelFactory.hxx" %} %include LinearModelFactory_doc.i %include openturns/LinearModelFactory.hxx namespace OT{ %extend LinearModelFactory { LinearModelFactory(const LinearModelFactory & other) { return new OT::LinearModelFactory(other); } } } openturns-1.9/python/src/LinearModelFactory_doc.i.in000066400000000000000000000051771307543307100226740ustar00rootroot00000000000000%feature("docstring") OT::LinearModelFactory "Class used to create a linear model from numerical samples. **Available usages**: LinearModelFactory() See Also -------- LinearModel Notes ----- This class is used in order to create a linear model from numerical samples. The linear regression model between the scalar variable :math:`Y` and the :math:`n` -dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` writes as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual, supposed to follow the standard Normal distribution. Each coefficient :math:`a_i` is evaluated from both samples :math:`Ysample` and :math:`Xsample` and is accompagnied by a confidence interval and a p-value (which tests if they are significantly different from 0.0). This class enables to test the quality of the model. It provides only numerical tests. If :math:`X` is scalar, a graphical validation test exists, that draws the residual couples :math:`(\epsilon_i, \epsilon_{i+1})`, where the residual :math:`\epsilon_i` is evaluated on the samples :math:`(Xsample, Ysample)`: :math:`\epsilon_i = Ysample_i - \tilde{Y}_i` with :math:`\tilde{Y}_i = a_0 + a_1 + Xsample_i`. The OpenTURNS method is :class:`~openturns.VisualTest_DrawLinearModelResidual`. " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelFactory::build "Build the linear model from numerical samples. **Available usages**: build(*Xsample, Ysample*) build(*Xsample, Ysample, level*) Parameters ---------- Xsample : 2-d sequence of float Input sample, of dimension :math:`n \geq 1`. Ysample : 2-d sequence of float Output sample, of dimension 1. level : positive float :math:`< 1` The level value of the confidence intervals of each coefficient of the linear model, equal to 0.95 by default. Returns ------- linearModel : :class:`~openturns.LinearModel` The linear model built from the samples :math:`(Xsample, Ysample)`: :math:`a_0 + \sum_{i=1}^n a_i X_i + \epsilon`, where :math:`\epsilon` is the random residual with zero mean. See Also -------- LinearModel Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> Xsample = distribution.getSample(30) >>> func = ot.SymbolicFunction(['x'], ['2 * x + 1']) >>> Ysample = func(Xsample) + ot.Normal().getSample(30) >>> LMF = ot.LinearModelFactory() >>> linearModel = LMF.build(Xsample, Ysample) >>> print(linearModel) LinearModel name=Unnamed regression=[1.1802,2.0034] confidence intervals=[0.887852, 1.47256] [1.70439, 2.3024] p-Values=[1.87486e-07,5.10531e-12] " openturns-1.9/python/src/LinearModelTest.i000066400000000000000000000002701307543307100207370ustar00rootroot00000000000000// SWIG file LinearModelTest.i %{ #include "openturns/LinearModelTest.hxx" %} %include LinearModelTest_doc.i %nodefaultctor LinearModelTest; %include openturns/LinearModelTest.hxx openturns-1.9/python/src/LinearModelTest_doc.i.in000066400000000000000000000434721307543307100222040ustar00rootroot00000000000000%feature("docstring") OT::LinearModelTest::LinearModelAdjustedRSquared "Test the quality of the linear regression model Test. Based on the adjusted :math:`R^2` indicator. **Available usages**: LinearModelTest.LinearModelAdjustedRSquared(*firstSample, secondSample*) LinearModelTest.LinearModelAdjustedRSquared(*firstSample, secondSample, level*) LinearModelTest.LinearModelAdjustedRSquared(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelAdjustedRSquared(*firstSample, secondSample, linearModel, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelRSquared, LinearModelTest_LinearModelFisher, LinearModelTest_LinearModelResidualMean Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual, supposed to follow the standard Normal distribution. The LinearModelAdjustedRSquared test checks the quality of the linear regression model. It evaluates the indicator :math:`R^2` adjusted (regression variance analysis) and compares it to a level. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelAdjustedRSquared(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=AdjustedRSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.815998 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelFisher "Test the nullity of the linear regression model coefficients. **Available usages**: LinearModelTest.LinearModelFisher(*firstSample, secondSample*) LinearModelTest.LinearModelFisher(*firstSample, secondSample, level*) LinearModelTest.LinearModelFisher(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelFisher(*firstSample, secondSample, linearModel, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelRSquared, LinearModelTest_LinearModelAdjustedRSquared, LinearModelTest_LinearModelResidualMean Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual, supposed to follow the standard Normal distribution. The LinearModelFisher test checks the nullity of the regression linear model coefficients (Fisher distribution is used). Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelFisher(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=Fisher binaryQualityMeasure=false p-value threshold=0.05 p-value=1 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelRSquared "Test the quality of the linear regression model based on the :math:`R^2` indicator. **Available usages**: LinearModelTest.LinearModelRSquared(*firstSample, secondSample*) LinearModelTest.LinearModelRSquared(*firstSample, secondSample, level*) LinearModelTest.LinearModelRSquared(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelRSquared(*firstSample, secondSample, linearModel, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelAdjustedRSquared, LinearModelTest_LinearModelFisher, LinearModelTest_LinearModelResidualMean Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual, supposed to follow the standard Normal distribution. The LinearModelRSquared test checks the quality of the linear regression model. It evaluates the indicator :math:`R^2` (regression variance analysis) and compares it to a level. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelRSquared(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=RSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.822343 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelResidualMean "Test zero mean value of the residual of the linear regression model. **Available usages**: LinearModelTest.LinearModelResidualMean(*firstSample, secondSample*) LinearModelTest.LinearModelResidualMean(*firstSample, secondSample, level*) LinearModelTest.LinearModelResidualMean(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelResidualMean(*firstSample, secondSample, linearModel, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelAdjustedRSquared, LinearModelTest_LinearModelFisher, LinearModelTest_LinearModelRSquared, LinearModelTest_LinearModelHarrisonMcCabe Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual, supposed to follow the standard Normal distribution. The LinearModelResidualMean Test checks, under the hypothesis of a gaussian sample, if the mean of the residual is equal to zero. It is based on the Student test (equality of mean for two gaussian samples). Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelResidualMean(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=ResidualMean binaryQualityMeasure=true p-value threshold=0.05 p-value=1 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelHarrisonMcCabe "Test the homoskedasticity of the linear regression model residuals. **Available usages**: LinearModelTest.LinearModelHarrisonMcCabe(*firstSample, secondSample*) LinearModelTest.LinearModelHarrisonMcCabe(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelHarrisonMcCabe(*firstSample, secondSample, level, breakPoint, simulationSize*) LinearModelTest.LinearModelHarrisonMcCabe(*firstSample, secondSample, linearModel, level, breakPoint, simulationSize*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. breakPoint : positive float :math:`< 1` Percentage of data to be taken as breakPoint in the variances. It must be :math:`< 1`, equal to 0.5 by default. simulationSize : positive int Size of the sample used to compute the p-value. Default is 1000. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelBreuschPagan, LinearModelTest_LinearModelResidualMean, LinearModelTest_LinearModelDurbinWatson Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual. The Harrison-McCabe test checks the heteroskedasticity of the residuals. The breakpoint in the variances is set by default to the half of the sample. The p-value is estimed using simulation. If the binary quality measure is false, then the homoskedasticity hypothesis can be rejected with respect to the given level. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelHarrisonMcCabe(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=HarrisonMcCabe binaryQualityMeasure=true p-value threshold=0.95 p-value=0.142 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelBreuschPagan "Test the homoskedasticity of the linear regression model residuals. **Available usages**: LinearModelTest.LinearModelBreuschPagan(*firstSample, secondSample*) LinearModelTest.LinearModelBreuschPagan(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelBreuschPagan(*firstSample, secondSample, level*) LinearModelTest.LinearModelBreuschPagan(*firstSample, secondSample, linearModel, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelHarrisonMcCabe, LinearModelTest_LinearModelResidualMean, LinearModelTest_LinearModelDurbinWatson Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual. The Breusch-Pagan test checks the heteroskedasticity of the residuals. A linear regression model is fitted on the squared residuals. The statistic is computed using the Studendized version with the chi-squared distribution. If the binary quality measure is false, then the homoskedasticity hypothesis can be rejected with respect to the given level. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelBreuschPagan(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=BreuschPagan binaryQualityMeasure=true p-value threshold=0.95 p-value=0.700772 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModelTest::LinearModelDurbinWatson "Test the autocorrelation of the linear regression model residuals. **Available usages**: LinearModelTest.LinearModelDurbinWatson(*firstSample, secondSample*) LinearModelTest.LinearModelDurbinWatson(*firstSample, secondSample, hypothesis, level*) LinearModelTest.LinearModelDurbinWatson(*firstSample, secondSample, linearModel*) LinearModelTest.LinearModelDurbinWatson(*firstSample, secondSample, linearModel, hypothesis, level*) Parameters ---------- fisrtSample : 2-d sequence of float First tested sample, of dimension 1. secondSample : 2-d sequence of float Second tested sample, of dimension 1. linearModel : :class:`~openturns.LinearModel` A linear model. If not provided, it is built using the given samples. hypothesis : string Hypothesis H0 for the residuals. It can be : 'Equal' to 0, 'Less' than 0 or 'Greater' than 0. Default is set to 'Equal' to 0. level : positive float :math:`< 1` Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- LinearModelTest_LinearModelBreuschPagan, LinearModelTest_LinearModelHarrisonMcCabe, LinearModelTest_LinearModelResidualMean Notes ----- The LinearModelTest class is used through its static methods in order to evaluate the quality of the linear regression model between two samples (see :class:`~openturns.LinearModel`). The linear regression model between the scalar variable :math:`Y` and the :math:`n`-dimensional one :math:`\vect{X} = (X_i)_{i \leq n}` is as follows: .. math:: \tilde{Y} = a_0 + \sum_{i=1}^n a_i X_i + \epsilon where :math:`\epsilon` is the residual. The Durbin-Watson test checks the autocorrelation of the residuals. It is possible to test is the autocorrelation is equal to 0, and less or greater than 0. The p-value is computed using a normal approximation with mean and variance of the Durbin-Watson test statistic. If the binary quality measure is false, then the given autocorrelation hypothesis can be rejected with respect to the given level. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> func = ot.SymbolicFunction('x', '2 * x + 1') >>> firstSample = sample >>> secondSample = func(sample) + ot.Normal().getSample(30) >>> test_result = ot.LinearModelTest.LinearModelDurbinWatson(firstSample, secondSample) >>> print(test_result) class=TestResult name=Unnamed type=DurbinWatson binaryQualityMeasure=true p-value threshold=0.95 p-value=0.653603 description=[Hypothesis test: autocorrelation equals 0.] " openturns-1.9/python/src/LinearModel_doc.i.in000066400000000000000000000040231307543307100213310ustar00rootroot00000000000000%feature("docstring") OT::LinearModel "The linear model class is created through the method build of a LinearModelFactory. See Also -------- LinearModelFactory " // --------------------------------------------------------------------- %feature("docstring") OT::LinearModel::getConfidenceIntervals "Accessor to the confidence intervals. Returns ------- confInterval : :class:`~openturns.Interval` The confidence intervals of the linear model coefficients, corresponding to the level precised when the LinearModel class has been created through the method *build*." // --------------------------------------------------------------------- %feature("docstring") OT::LinearModel::getPValues "Accessor to the p-values. Returns ------- pvalues : collection of :class:`~openturns.Scalar` The collection of the p-values of the linear model coefficients." // --------------------------------------------------------------------- %feature("docstring") OT::LinearModel::getPredicted "Accessor to the evaluation function of linear model. Parameters ---------- sampleX : 2-d sequence of float The input sample to be evaluated by the linear model. Returns ------- Y : :class:`~openturns.Sample` The response :math:`Y` evaluated through the linear model on the sample *sampleX*." // --------------------------------------------------------------------- %feature("docstring") OT::LinearModel::getRegression "Accessor to the regression coefficients. Returns ------- coef : :class:`~openturns.Point` The coefficients of the linear model: :math:`(a_0, a_1, \ldots, a_n)`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearModel::getResidual "Accessor to the residuals. Parameters ---------- Xsample: 2-d sequence of float The input sample on which the linear model has been built. Ysample: 2-d sequence of float The 1d output sample on which the linear model has been built. Returns ------- residual : :class:`~openturns.Sample` The residuals computed on each point." openturns-1.9/python/src/LinearProfile.i000066400000000000000000000003761307543307100204460ustar00rootroot00000000000000// SWIG file %{ #include "openturns/LinearProfile.hxx" %} %include LinearProfile_doc.i %include openturns/LinearProfile.hxx namespace OT { %extend LinearProfile { LinearProfile(const LinearProfile & other) { return new OT::LinearProfile(other); } } } openturns-1.9/python/src/LinearProfile_doc.i.in000066400000000000000000000023141307543307100216720ustar00rootroot00000000000000%define OT_LinearProfile_doc "Linear temperature profile. Available constructor: LinearProfile(*T0, iMax*) Parameters ---------- T0 : float Initial temperature iMax : int Number of maximal iterations Notes ----- The temperature write: .. math:: :nowrap: \begin{equation*} T(i) = T_0*(1 - \frac{i}{iMax}), i \in [0,iMax] \end{equation*} Examples -------- >>> import openturns as ot >>> # Define a profile >>> T0 = 10.0 >>> iMax = 100 >>> linearProfile = ot.LinearProfile(T0, iMax) " %enddef %feature("docstring") OT::LinearProfile OT_LinearProfile_doc // --------------------------------------------------------------------- %define OT_LinearProfile_call_doc "Compute the temperature T(i). Parameters ---------- i : int The index for whome we seek temperature Returns ------- temperature: float The temperature Examples -------- >>> import openturns as ot >>> # Define a profile >>> T0 = 10.0 >>> iMax = 100 >>> linearProfile = ot.LinearProfile(T0, iMax) >>> temperature = linearProfile(10) >>> print(temperature) 9.0" %enddef %feature("docstring") OT::LinearProfile::operator() OT_LinearProfile_call_doc // --------------------------------------------------------------------- openturns-1.9/python/src/LinearTaylor.i000066400000000000000000000004061307543307100203120ustar00rootroot00000000000000// SWIG file LinearTaylor.i %{ #include "openturns/LinearTaylor.hxx" %} %include LinearTaylor_doc.i %include openturns/LinearTaylor.hxx namespace OT { %extend LinearTaylor { LinearTaylor(const LinearTaylor & other) { return new OT::LinearTaylor(other); } } } openturns-1.9/python/src/LinearTaylor_doc.i.in000066400000000000000000000074721307543307100215560ustar00rootroot00000000000000%feature("docstring") OT::LinearTaylor "First order polynomial response surface by Taylor expansion. Available constructors: LinearTaylor(*center, function*) Parameters ---------- center : sequence of float Point :math:`\vect{x}_0` where the Taylor expansion of the function :math:`h` is performed. function : :class:`~openturns.Function` Function :math:`h` to be approximated. Notes ----- The approximation of the model response :math:`\vect{y} = h(\vect{x})` around a specific set :math:`\vect{x}_0 = (x_{0,1},\dots,x_{0,n_{X}})` of input parameters may be of interest. One may then substitute :math:`h` for its Taylor expansion at point :math:`\vect{x}_0`. Hence :math:`h` is replaced with a first or second-order polynomial :math:`\widehat{h}` whose evaluation is inexpensive, allowing the analyst to apply the uncertainty anaysis methods. We consider here the first order Taylor expansion around :math:`\ux=\vect{x}_0`. .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, h(\vect{x}_0) \, + \, \sum_{i=1}^{n_{X}} \; \frac{\partial h}{\partial x_i}(\vect{x}_0).\left(x_i - x_{0,i} \right) Introducing a vector notation, the previous equation rewrites: .. math:: \vect{y} \, \approx \, \vect{y}_0 \, + \, \vect{\vect{L}} \: \left(\vect{x}-\vect{x}_0\right) where: - :math:`\vect{y_0} = (y_{0,1} , \dots, y_{0,n_Y})^{\textsf{T}} = h(\vect{x}_0)` is the vector model response evaluated at :math:`\vect{x}_0`; - :math:`\vect{x}` is the current set of input parameters; - :math:`\vect{\vect{L}} = \left( \frac{\partial y_{0,j}}{\partial x_i} \,,\, i=1,\ldots, n_X \,,\, j=1,\ldots, n_Y \right)` is the transposed Jacobian matrix evaluated at :math:`\vect{x}_0`. See also -------- QuadraticTaylor, LinearLeastSquares, QuadraticLeastSquares Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> myTaylor = ot.LinearTaylor([1, 2], myFunc) >>> myTaylor.run() >>> responseSurface = myTaylor.getResponseSurface() >>> print(responseSurface([1.2,1.9])) [1.13277,-1.0041,0.204127]" // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::getCenter "Get the center. Returns ------- center : :class:`~openturns.Point` Point :math:`\vect{x}_0` where the Taylor expansion of the function is performed." // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::getConstant "Get the constant vector of the approximation. Returns ------- constantVector : :class:`~openturns.Point` Constant vector of the approximation, equal to :math:`h(x_0)`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::getLinear "Get the gradient of the function at :math:`\vect{x}_0`. Returns ------- gradient : :class:`~openturns.Matrix` Gradient of the function :math:`h` at the point :math:`\vect{x}_0` (the transposition of the jacobian matrix)." // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::getInputFunction "Get the function. Returns ------- function : :class:`~openturns.Function` Function :math:`h` to be approximated." // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::getResponseSurface "Get an approximation of the function. Returns ------- approximation : :class:`~openturns.Function` An approximation of the function :math:`h` by a Linear Taylor expansion at the point :math:`\vect{x}_0`." // --------------------------------------------------------------------- %feature("docstring") OT::LinearTaylor::run "Perform the Linear Taylor expansion around :math:`\vect{x}_0`." openturns-1.9/python/src/Log.i000066400000000000000000000002531307543307100164260ustar00rootroot00000000000000// SWIG file Log.i %{ #include "openturns/Log.hxx" %} %include Log_doc.i %apply UnsignedInteger { OT::Log::Severity }; %nodefaultctor Log; %include openturns/Log.hxx openturns-1.9/python/src/LogNormal.i000066400000000000000000000003561307543307100176030ustar00rootroot00000000000000// SWIG file LogNormal.i %{ #include "openturns/LogNormal.hxx" %} %include LogNormal_doc.i %include openturns/LogNormal.hxx namespace OT { %extend LogNormal { LogNormal(const LogNormal & other) { return new OT::LogNormal(other); } } } openturns-1.9/python/src/LogNormalFactory.i000066400000000000000000000004461307543307100211330ustar00rootroot00000000000000// SWIG file LogNormalFactory.i %{ #include "openturns/LogNormalFactory.hxx" %} %include LogNormalFactory_doc.i %include openturns/LogNormalFactory.hxx namespace OT { %extend LogNormalFactory { LogNormalFactory(const LogNormalFactory & other) { return new OT::LogNormalFactory(other); } } } openturns-1.9/python/src/LogNormalFactory_doc.i.in000066400000000000000000000144651307543307100223730ustar00rootroot00000000000000%feature("docstring") OT::LogNormalFactory "Lognormal factory distribution. Available constructors: LogNormalFactory() See also -------- DistributionFactory Notes ----- OpenTURNS has implemented several estimators to build a LogNormal distribution from a scalar sample. Here are detailed the estimators. **Moments based estimators:** Lets denote: - :math:`\displaystyle \overline{x}_n = \frac{1}{n} \sum_{i=1}^n x_i` the empirical mean of the sample, - :math:`\displaystyle s_n^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \overline{x}_n)^2` its empirical variance, - :math:`\displaystyle a_{3,n} = \sqrt{n} \frac{\sum_{i=1}^n (x_i - \overline{x}_n)^3}{ \left( \sum_{i=1}^n (x_i - \overline{x}_n)^2 \right)^{3/2}}` its empirical skewness. We note :math:`\omega = e^{\sigma_l^2}`. The estimator :math:`\hat{\omega}_n` of :math:`\omega` is the positive root of the relation: .. math:: :label: omega_moment_relation \omega^3 + 3 \omega^2 - (4 + a_{3,n}^2) = 0 Then we estimate :math:`(\hat{\mu}_{ln}, \hat{\sigma}_{ln}, \hat{\gamma}_{n})` using: .. math:: :label: moment_estimators \hat{\mu}_{ln} &= \log \hat{\beta}_{n} \\ \hat{\sigma}_{ln} &= \sqrt{ \log \hat{\omega}_{n} } \\ \hat{\gamma}_{ln} &= \overline{x}_n - \hat{\beta}_{n} \sqrt{ \hat{\omega}_{n} } where :math:`\displaystyle \hat{\beta}_{n} = \frac{s_n}{\hat{\omega}_{n} (\hat{\omega}_{n} - 1)}`. **Modified moments based estimators:** we use :math:`\overline{x}_n` and :math:`s_n^2` defined as previously. The third equation is: .. math:: :label: expected_modified_moment \Eset[ \log (X_{(1)} - \gamma)] = \log (x_{(1)} - \gamma) The quantity :math:`\displaystyle EZ_1 (n) = \frac{\Eset[ \log (X_{(1)} - \gamma)] - \mu_l}{\sigma_l}` is the mean of the first order statistics of a standard normal sample of size :math:`n`. We have: .. math:: :label: EZ1_equation EZ_1(n) = \int_\Rset nz\phi(z) (1 - \Phi(z))^{n-1}\di{z} where :math:`\varphi` and :math:`\Phi` are the pdf and cdf of the standard normal distribution. The estimator :math:`\hat{\omega}_{n}` of :math:`\omega` is obtained as solution of: .. math:: :label: omega_modified_moment_relation \omega (\omega - 1) - \kappa_n \left[ \sqrt{\omega} - e^{EZ_1(n)\sqrt{\log \omega}} \right]^2 = 0 where :math:`\displaystyle \kappa_n = \frac{s_n^2}{(\overline{x}_n - x_{(1)})^2}`. The we have :math:`(\hat{\mu}_{ln}, \hat{\sigma}_{ln}, \hat{\gamma}_{n})` using the relations defined for the moments based estimators :eq:`moment_estimators`. **Local maximum likelihood estimators:** The following sums are defined: .. math:: S_0 &= \sum_{i=1}^n \frac{1}{x_i - \gamma} \\ S_1 &= \sum_{i=1}^n \log (x_i - \gamma) \\ S_2 &= \sum_{i=1}^n \log^2 (x_i - \gamma) \\ S_3 &= \sum_{i=1}^n \frac{\log (x_i - \gamma)}{x_i - \gamma} The Maximum Likelihood estimators of :math:`(\mu_{l}, \sigma_{l}, \gamma)` are defined by: .. math:: :label: mll_estimators \hat{\mu}_{l,n} &= \frac{S_1(\hat{\gamma})}{n} \\ \hat{\sigma}_{l,n}^2 &= \frac{S_2(\hat{\gamma})}{n} - \hat{\mu}_{l,n}^2 This, :math:`\hat{\gamma}_n` verifies the relation: .. math:: :label: mll_relation S_0 (\gamma) \left(S_2(\gamma) - S_1(\gamma) \left( 1 + \frac{S_1(\gamma)}{n} \right) \right) + n S_4(\gamma) = 0 under the constraint :math:`\gamma \leq \min x_i`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormalFactory::build "Build the distribution. **Available usages**: build(*sample*) build(*param*) build(*sample, covMat*) Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the distribution parameters are estimated. param : Collection of :class:`~openturns.PointWithDescription` A vector of parameters of the distribution. covMat : :class:`~openturns.CovarianceMatrix` A covariance matrix. Notes ----- In the first usage, the parameters are evaluated according the following strategy: - OpenTURNS first uses the local likelihood maximum based estimators. - OpenTURNS uses the modified moments based estimators if the resolution of :eq:`mll_relation` is not possible. - OpenTURNS uses the moments based estimators, which are always defined, if the resolution of :eq:`omega_modified_moment_relation` is not possible. In the second usage, the covariance matrix *covMat* is fulfilled with the covariance of the estimator of the parameter vector :math:`\vect{\theta}`. The technique used is bootstrap. In case of asymptotical normal convergence of the estimator, it enables to build confidence intervals." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormalFactory::buildAsLogNormal "Build the distribution as a LogNormal type. **Available usages**: build(*sample*) build(*sample, method*) build(*param*) Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the distribution parameters are estimated. method : integer An integer ranges from 0 to 2 corresponding to a specific estimator method: - 0 : Local likelihood maximum estimators - 1 : Modified moment estimators - 2 : method of moment estimators. param : Collection of :class:`~openturns.PointWithDescription` A vector of parameters of the distribution. " // --------------------------------------------------------------------- %feature("docstring") OT::LogNormalFactory::buildMethodOfLocalLikelihoodMaximization "Build the distribution based on the local likelihood maximum estimators. Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the distribution parameters are estimated." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormalFactory::buildMethodOfModifiedMoments "Build the distribution based on the modified moments estimators. Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the distribution parameters are estimated." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormalFactory::buildMethodOfMoments "Build the distribution based on the method of moments estimators. Parameters ---------- sample : 2-d sequence of float, of dimension 1 The sample from which the distribution parameters are estimated." openturns-1.9/python/src/LogNormalMuSigma.i000066400000000000000000000004451307543307100210650ustar00rootroot00000000000000// SWIG file LogNormalMuSigma.i %{ #include "openturns/LogNormalMuSigma.hxx" %} %include LogNormalMuSigma_doc.i %include openturns/LogNormalMuSigma.hxx namespace OT{ %extend LogNormalMuSigma { LogNormalMuSigma(const LogNormalMuSigma & other) { return new OT::LogNormalMuSigma(other); } } } openturns-1.9/python/src/LogNormalMuSigmaOverMu.i000066400000000000000000000005251307543307100222220ustar00rootroot00000000000000// SWIG file LogNormalMuSigmaOverMu.i %{ #include "openturns/LogNormalMuSigmaOverMu.hxx" %} %include LogNormalMuSigmaOverMu_doc.i %include openturns/LogNormalMuSigmaOverMu.hxx namespace OT{ %extend LogNormalMuSigmaOverMu { LogNormalMuSigmaOverMu(const LogNormalMuSigmaOverMu & other) { return new OT::LogNormalMuSigmaOverMu(other); } } } openturns-1.9/python/src/LogNormalMuSigmaOverMu_doc.i.in000066400000000000000000000021321307543307100234500ustar00rootroot00000000000000%feature("docstring") OT::LogNormalMuSigmaOverMu "LogNormal distribution parameters. Available constructors: LogNormalMuSigmaOverMu(*mu=* :math:`\sqrt{e}` *, delta=* :math:`\sqrt{e-1}` *, gamma=0.0*) Parameters ---------- mu : float Mean :math:`\mu > 0`. delta : float Variation coefficient :math:`\delta = \sigma/\mu`. gamma : float, optional Shift parameter. Notes ----- The native parameters are defined as follows: .. math:: \sigma_l &= \sqrt{\log{ \left(1+\frac{(\delta \mu)^2}{(\mu-\gamma)^2} \right)}}\\ \mu_l &= \log{(\mu-\gamma)} - \frac{\sigma_l^2}{2} See also -------- LogNormal Examples -------- Create the parameters of the LogNormal distribution: >>> import openturns as ot >>> parameters = ot.LogNormalMuSigmaOverMu(0.63, 5.24, -0.5) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [-1.00525,1.50164,-0.5] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 0.256272 0.418663 0 ] [ -0.170824 0.113758 0 ] [ -1.6771 0.527516 1 ]]" openturns-1.9/python/src/LogNormalMuSigma_doc.i.in000066400000000000000000000020501307543307100223110ustar00rootroot00000000000000%feature("docstring") OT::LogNormalMuSigma "LogNormal distribution parameters. Available constructors: LogNormalMuSigma(*mu=* :math:`e^{0.5}` *, sigma=* :math:`\sqrt{e^2-e}` *, gamma=0.*) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. gamma : float, optional Shift parameter. Notes ----- The native parameters are defined as follows: .. math:: \sigma_l &= \sqrt{\log{ \left( 1+\frac{\sigma^2}{(\mu-\gamma)^2} \right) }} \\ \mu_l &= \log{(\mu-\gamma)} - \frac{\sigma_l^2}{2} See also -------- LogNormal Examples -------- Create the parameters of the LogNormal distribution: >>> import openturns as ot >>> parameters = ot.LogNormalMuSigma(0.63, 3.3, -0.5) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [-1.00492,1.50143,-0.5] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 1.67704 -0.527552 0 ] [ -0.271228 0.180647 0 ] [ -1.67704 0.527552 1 ]]" openturns-1.9/python/src/LogNormal_doc.i.in000066400000000000000000000122731307543307100210360ustar00rootroot00000000000000%feature("docstring") OT::LogNormal "Lognormal distribution. Available constructors: LogNormal(*muLog=0.0, sigmaLog=1.0, gamma=0.0*) Parameters ---------- muLog : float location parameter :math:`\mu_\ell`. sigmaLog : float, :math:`\sigma_\ell > 0` scale parameter :math:`\sigma_\ell`. gamma : float, optional Shift parameter :math:`\gamma < \mu`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{\sqrt{2\pi}\sigma_\ell (x - \gamma)} \exp\left(- \frac{1}{2} \left(\frac{\log(x - \gamma) - \mu_\ell} {\sigma_\ell}\right)^2\right), \quad x \in [\gamma; +\infty[ with :math:`\gamma, \mu_\ell \in \Rset` and :math:`\sigma_\ell > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \exp\left(\mu_\ell + \sigma_\ell^2 / 2\right) + \gamma \\ \Var{X} & = & \exp\left(2 \mu_\ell + \sigma_\ell^2\right) \left(\exp(\sigma_\ell^2) - 1\right) \end{eqnarray*} It is possible to create a LogNormal distribution from the alternative parametrizations :math:`(\mu, \sigma, \gamma)`: see :class:`~openturns.LogNormalMuSigma` or :math:`(\mu, \sigma / \mu, \gamma)`: see :class:`~openturns.LogNormalMuSigmaOverMu`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(\mu_\ell, \sigma_\ell, \gamma)`. Examples -------- Create a distribution from its native parameters :math:`(\mu_\ell, \sigma_\ell, \gamma)`: >>> import openturns as ot >>> myDist = ot.LogNormal(1.0, 1.0, 0.0) Create a it from the alternative parametrization :math:`(\mu, \sigma, \gamma)`: >>> myDist2 = ot.LogNormal() >>> myDist2.setParameter(ot.LogNormalMuSigma()([4.5, 5.8, 0.0])) Create a it from the alternative parametrization :math:`(\mu, \sigma/\mu, \gamma)`: >>> myDist3 = ot.LogNormal() >>> myDist3.setParameter(ot.LogNormalMuSigmaOverMu()([4.5, 1.3, 0.0])) Create it from :math:`(\mu, \sigma, \gamma)` and keep that parametrization for the remaining study: >>> myParam = ot.LogNormalMuSigma(4.5, 5.8, 0.0) >>> myDist4 = ot.ParametrizedDistribution(myParam) Create it from :math:`(\mu, \sigma/\mu, \gamma)` and keep that parametrization for the remaining study: >>> myParam = ot.LogNormalMuSigmaOverMu(4.5, 1.3, 0.0) >>> myDist5 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getGamma "Accessor to the distribution's shift parameter :math:`\gamma`. Returns ------- gamma : float Shift parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getMuLog "Accessor to the distribution's location parameter :math:`\mu_\ell`. Returns ------- mu_log : float Location parameter :math:`\mu_\ell`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getSigmaLog "Accessor to the distribution's scale parameter :math:`\sigma_\ell`. Returns ------- sigma_log : float Scale parameter :math:`\sigma_\ell`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::getSigmaOverMu "Accessor to the distribution's coefficient of variation (if defined). Returns ------- cov : float Coefficient of variation :math:`\sigma/\mu, \mu \neq 0`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::setGamma "Accessor to the distribution's shift parameter :math:`\gamma`. Parameters ---------- gamma : float, :math:`\gamma < \mu` Shift parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::setMuLog "Accessor to the distribution's location parameter :math:`\mu_\ell`. Parameters ---------- mu_log : float, :math:`\mu_\ell \in \Rset` Location parameter :math:`\mu_\ell`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::setSigmaLog "Accessor to the distribution's scale parameter :math:`\sigma_\ell`. Parameters ---------- sigma_log : float, :math:`\sigma_\ell > 0` Scale parameter :math:`\sigma_\ell`." // --------------------------------------------------------------------- %feature("docstring") OT::LogNormal::setMuSigma "Accessor to the distribution's mean and standard deviation. Parameters ---------- mu : float, :math:`\mu > \gamma` Mean. sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/LogUniform.i000066400000000000000000000003661307543307100177730ustar00rootroot00000000000000// SWIG file LogUniform.i %{ #include "openturns/LogUniform.hxx" %} %include LogUniform_doc.i %include openturns/LogUniform.hxx namespace OT { %extend LogUniform { LogUniform(const LogUniform & other) { return new OT::LogUniform(other); } } } openturns-1.9/python/src/LogUniformFactory.i000066400000000000000000000004561307543307100213230ustar00rootroot00000000000000// SWIG file LogUniformFactory.i %{ #include "openturns/LogUniformFactory.hxx" %} %include LogUniformFactory_doc.i %include openturns/LogUniformFactory.hxx namespace OT { %extend LogUniformFactory { LogUniformFactory(const LogUniformFactory & other) { return new OT::LogUniformFactory(other); } } } openturns-1.9/python/src/LogUniformFactory_doc.i.in000066400000000000000000000002321307543307100225450ustar00rootroot00000000000000%feature("docstring") OT::LogUniformFactory "Log Uniform factory. Available constructor: LogUniformFactory() See also -------- DistributionFactory" openturns-1.9/python/src/LogUniform_doc.i.in000066400000000000000000000040221307543307100212160ustar00rootroot00000000000000%feature("docstring") OT::LogUniform "LogUniform distribution. Available constructors: LogUniform(*a_log=-1.0, b_log=1.0*) Parameters ---------- a_log : float Lower bound in log-scale. b_log : float, :math:`b_\ell > a_\ell` Upper bound in log-scale. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{x (b_\ell - a_\ell)}, \quad \log(x) \in [a_\ell; b_\ell] with :math:`a_\ell < b_\ell`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{b - a}{b_\ell - a_\ell} \\ \Var{X} & = & \frac{1}{2} (b - a) \frac{ b (b_\ell - a_\ell - 2) + a (b_\ell - a_\ell + 2)} {(b_\ell - a_\ell)^2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.LogUniform(-1.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::LogUniform::getALog "Accessor to the distribution's lower bound in log-scale :math:`a_\ell`. Returns ------- a_log : float Lower bound in log-scale." // --------------------------------------------------------------------- %feature("docstring") OT::LogUniform::getBLog "Accessor to the distribution's upper bound in log-scale :math:`b_\ell`. Returns ------- b_log : float Upper bound in log-scale." // --------------------------------------------------------------------- %feature("docstring") OT::LogUniform::setALog "Accessor to the distribution's lower bound in log-scale :math:`a_\ell`. Parameters ---------- a_log : float, :math:`a_\ell < b_\ell` Lower bound in log-scale." // --------------------------------------------------------------------- %feature("docstring") OT::LogUniform::setBLog "Accessor to the distribution's upper bound in log-scale :math:`b_\ell`. Parameters ---------- b_log : float, :math:`b_\ell > a_\ell` Upper bound in log-scale." openturns-1.9/python/src/Log_doc.i.in000066400000000000000000000013151307543307100176600ustar00rootroot00000000000000%feature("docstring") OT::Log "Logging utilities. No constructor, only static methods are available." // --------------------------------------------------------------------- %feature("docstring") OT::Log::Show "Accessor to the log flags. Parameters ---------- flags : int Log flags to enable. Available values to be ORed: - DBG - INFO - USER - WARN - ERROR - TRACE - DEFAULT - NONE - ALL Examples -------- >>> import openturns as ot >>> ot.Log.Show(ot.Log.DEFAULT)" // --------------------------------------------------------------------- %feature("docstring") OT::Log::Flags "Accessor to the log flags. Returns ---------- flags : int The enabled log flags." openturns-1.9/python/src/Logistic.i000066400000000000000000000003461307543307100174650ustar00rootroot00000000000000// SWIG file Logistic.i %{ #include "openturns/Logistic.hxx" %} %include Logistic_doc.i %include openturns/Logistic.hxx namespace OT { %extend Logistic { Logistic(const Logistic & other) { return new OT::Logistic(other); } } } openturns-1.9/python/src/LogisticFactory.i000066400000000000000000000004361307543307100210150ustar00rootroot00000000000000// SWIG file LogisticFactory.i %{ #include "openturns/LogisticFactory.hxx" %} %include LogisticFactory_doc.i %include openturns/LogisticFactory.hxx namespace OT { %extend LogisticFactory { LogisticFactory(const LogisticFactory & other) { return new OT::LogisticFactory(other); } } } openturns-1.9/python/src/LogisticFactory_doc.i.in000066400000000000000000000005631307543307100222500ustar00rootroot00000000000000%feature("docstring") OT::LogisticFactory "Logistic factory. Available constructor: LogisticFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle\Hat{\alpha} = \bar{x}\\ \displaystyle\Hat{\beta} = \Hat{\sigma}_x \end{eqnarray*} See also -------- DistributionFactory, Logistic" openturns-1.9/python/src/Logistic_doc.i.in000066400000000000000000000037731307543307100207260ustar00rootroot00000000000000%feature("docstring") OT::Logistic "Logistic distribution. Available constructors: Logistic(*alpha=0.0, beta=1.0*) Parameters ---------- alpha : float Location parameter :math:`\alpha`. beta : float, :math:`\beta > 0` Scale parameter :math:`\beta`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\exp\left(\left(- \frac{x - \alpha}{\beta}\right)\right)} {\beta \left(1 + \exp\left(- \frac{x-\alpha}{\beta} \right)\right)^2}, \quad x \in \Rset with :math:`\alpha \in \Rset` and :math:`\beta > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \alpha \\ \Var{X} & = & \frac{1}{3} \pi^2 \beta^2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Logistic(0.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Logistic::getAlpha "Accessor to the distribution's location parameter :math:`\alpha`. Returns ------- alpha : float Location parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Logistic::getBeta "Accessor to the distribution's scale parameter :math:`\beta`. Returns ------- beta : float Scale parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Logistic::setAlpha "Accessor to the distribution's location parameter :math:`\alpha`. Parameters ---------- alpha : float, :math:`\alpha \in \Rset` Location parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Logistic::setBeta "Accessor to the distribution's scale parameter :math:`\beta`. Parameters ---------- beta : float, :math:`\beta > 0` Scale parameter :math:`\beta`." openturns-1.9/python/src/LowDiscrepancyExperiment.i000066400000000000000000000005461307543307100227010ustar00rootroot00000000000000// SWIG file LowDiscrepancyExperiment.i %{ #include "openturns/LowDiscrepancyExperiment.hxx" %} %include LowDiscrepancyExperiment_doc.i %include openturns/LowDiscrepancyExperiment.hxx namespace OT { %extend LowDiscrepancyExperiment { LowDiscrepancyExperiment(const LowDiscrepancyExperiment & other) { return new OT::LowDiscrepancyExperiment(other); } } } openturns-1.9/python/src/LowDiscrepancyExperiment_doc.i.in000066400000000000000000000076031307543307100241340ustar00rootroot00000000000000%feature("docstring") OT::LowDiscrepancyExperiment "LowDiscrepancy experiment. Available constructors: LowDiscrepancyExperiment(*size, restart*) LowDiscrepancyExperiment(*sequence, size, restart*) LowDiscrepancyExperiment(*sequence, distribution, size, restart*) Parameters ---------- size : positive int Number :math:`N` of points of the sequence. sequence : :class:`~openturns.LowDiscrepancySequence` Sequence of points :math:`(u_1, \cdots, u_N)` with low discrepancy. If not specified, the sequence is a :class:`~openturns.SobolSequence`. distribution : Distribution :math:`\mu` of dimension :math:`n` with an independent copula. The low discrepancy sequence :math:`(u_1, \cdots, u_N)` is uniformly distributed over :math:`[0,1]^n`. We use the marginal transformation :math:`\Xi_i =F_i^{-1}(u_i)` to generate points :math:`(\Xi_i)_{i\in I}` according to the distribution :math:`\mu`. The weights are all equal to :math:`1/N`. restart : bool Flag to tell if the low discrepancy sequence must be restarted from its initial state at each change of distribution or not. Default is *True*: the sequence is restarted at each change of distribution. Notes ----- The :meth:`generate` method generates points :math:`(\Xi_i)_{i \in I}` independently from the distribution :math:`\mu`. When the :meth:`generate` method is recalled, the generated sample changes. See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * 2) Generate the sample with a reinitialization of the sequence at each change of distribution: >>> myPlane = ot.LowDiscrepancyExperiment(ot.SobolSequence(), distribution, 5, True) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ] 3 : [ 0.375 0.375 ] 4 : [ 0.875 0.875 ] >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.625 0.125 ] 1 : [ 0.125 0.625 ] 2 : [ 0.1875 0.3125 ] 3 : [ 0.6875 0.8125 ] 4 : [ 0.9375 0.0625 ] >>> myPlane.setDistribution(distribution) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ] 3 : [ 0.375 0.375 ] 4 : [ 0.875 0.875 ] Generate the sample keeping the previous state of the sequence at each change of distribution: >>> myPlane = ot.LowDiscrepancyExperiment(ot.SobolSequence(), distribution, 5, False) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ] 3 : [ 0.375 0.375 ] 4 : [ 0.875 0.875 ] >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.625 0.125 ] 1 : [ 0.125 0.625 ] 2 : [ 0.1875 0.3125 ] 3 : [ 0.6875 0.8125 ] 4 : [ 0.9375 0.0625 ] >>> myPlane.setDistribution(distribution) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.4375 0.5625 ] 1 : [ 0.3125 0.1875 ] 2 : [ 0.8125 0.6875 ] 3 : [ 0.5625 0.4375 ] 4 : [ 0.0625 0.9375 ] " // --------------------------------------------------------------------- %feature("docstring") OT::LowDiscrepancyExperiment::getSequence "Return the sequence. Returns ------- sequence : :class:`~openturns.LowDiscrepancySequence` Sequence of points :math:`(u_1, \cdots, u_N)` with low discrepancy." // --------------------------------------------------------------------- %feature("docstring") OT::LowDiscrepancyExperiment::getRestart "Return the value of the *restart* flag. Returns ------- restart : bool The value of the *restart* flag." // --------------------------------------------------------------------- %feature("docstring") OT::LowDiscrepancyExperiment::setRestart "Set the value of the *restart* flag. Parameters ---------- restart : bool The value of the *restart* flag. If equals to *True*, the low discrepancy sequence is restarted at each change of distribution, else it is changed only if the new distribution has a dimension different from the current one. " openturns-1.9/python/src/LowDiscrepancySequence.i000066400000000000000000000006131307543307100223240ustar00rootroot00000000000000// SWIG file LowDiscrepancySequence.i %{ #include "openturns/LowDiscrepancySequence.hxx" %} %include LowDiscrepancySequence_doc.i OTTypedInterfaceObjectHelper(LowDiscrepancySequence) %include openturns/LowDiscrepancySequence.hxx namespace OT{ %extend LowDiscrepancySequence { LowDiscrepancySequence(const LowDiscrepancySequence & other) { return new OT::LowDiscrepancySequence(other); } } } openturns-1.9/python/src/LowDiscrepancySequenceImplementation.i000066400000000000000000000007051307543307100252340ustar00rootroot00000000000000// SWIG file LowDiscrepancySequenceImplementation.i %{ #include "openturns/LowDiscrepancySequenceImplementation.hxx" %} %include LowDiscrepancySequenceImplementation_doc.i %include openturns/LowDiscrepancySequenceImplementation.hxx namespace OT{ %extend LowDiscrepancySequenceImplementation { LowDiscrepancySequenceImplementation(const LowDiscrepancySequenceImplementation & other) { return new OT::LowDiscrepancySequenceImplementation(other); } } } openturns-1.9/python/src/LowDiscrepancySequenceImplementation_doc.i.in000066400000000000000000000116041307543307100264660ustar00rootroot00000000000000%define OT_LowDiscrepancySequence_doc "Base class to generate low discrepancy sequences. Available constructors: LowDiscrepancySequence(*dimension=1*) Parameters ---------- dimension : int Dimension of the points of the low discrepancy sequence. Notes ----- The low discrepancy sequences, also called 'quasi-random' sequences, are a deterministic alternative to random sequences for use in Monte Carlo methods. These sequences are sets of equidistributed points which the error in uniformity is measured by its discrepancy. The **discrepancy** of a set :math:`P = \{x_1, \hdots, x_N\}` is defined, using Niederreiter's notation, as: .. math:: D_N(P) = \sup_{B\in J} \left| \frac{A(B;P)}{N} - \lambda_s(B) \right| where :math:`\lambda_s` is the s-dimensional Lebesgue measure, :math:`A(B;P)` is the number of points in :math:`P` that fall into :math:`B`, and :math:`J` is the set of s-dimensional intervals or boxes of the form: .. math:: \prod_{i=1}^s [a_i, b_i) = \{ \mathbf{x} \in \mathbf{R}^s : a_i \le x_i < b_i \} \, where :math:`0 \le a_i < b_i \le 1`. The star-discrepancy :math:`D_N^*(P)` is defined similarly, except that the supremum is taken over the set :math:`J^*` of intervals of the form: .. math:: \prod_{i=1}^s [0, u_i) where :math:`u_i` is in the half-open interval :math:`[0, 1)`. A low-discrepancy sequence can be generated only through the derived classes of LowDiscrepancySequence. OpenTURNS proposes the :class:`Faure `, :class:`Halton `, :class:`Reverse Halton `, :class:`Haselgrove ` and :class:`Sobol ` sequences. Examples -------- >>> import openturns as ot >>> # Create a sequence of 3 points of 2 dimensions >>> sequence = ot.LowDiscrepancySequence(ot.SobolSequence(2)) >>> print(sequence.generate(3)) 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ]" %enddef %feature("docstring") OT::LowDiscrepancySequenceImplementation OT_LowDiscrepancySequence_doc // --------------------------------------------------------------------- %define OT_LowDiscrepancySequence_computeStarDiscrepancy_doc "Compute the star discrepancy of a sample uniformly distributed over [0, 1). Parameters ---------- sample : 2-d sequence of float Returns ------- starDiscrepancy : float Star discrepancy of a sample uniformly distributed over [0, 1). Examples -------- >>> import openturns as ot >>> # Create a sequence of 3 points of 2 dimensions >>> sequence = ot.LowDiscrepancySequence(ot.SobolSequence(2)) >>> sample = sequence.generate(16) >>> print(sequence.computeStarDiscrepancy(sample)) 0.12890625 >>> sample = sequence.generate(64) >>> print(sequence.computeStarDiscrepancy(sample)) 0.0537109375" %enddef %feature("docstring") OT::LowDiscrepancySequenceImplementation::ComputeStarDiscrepancy OT_LowDiscrepancySequence_computeStarDiscrepancy_doc // --------------------------------------------------------------------- %define OT_LowDiscrepancySequence_generate_doc "Generate a sample of pseudo-random vectors of numbers uniformly distributed over [0, 1). Parameters ---------- size : int Number of points to be generated. Default is 1. Returns ------- sample : :class:`~openturns.Sample` Sample of pseudo-random vectors of numbers uniformly distributed over [0, 1). Examples -------- >>> import openturns as ot >>> # Create a sequence of 3 points of 2 dimensions >>> sequence = ot.LowDiscrepancySequence(ot.SobolSequence(2)) >>> print(sequence.generate(3)) 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ]" %enddef %feature("docstring") OT::LowDiscrepancySequenceImplementation::generate OT_LowDiscrepancySequence_generate_doc // --------------------------------------------------------------------- %define OT_LowDiscrepancySequence_getDimension_doc "Accessor to the dimension of the points of the low discrepancy sequence. Returns ------- dimension : int Dimension of the points of the low discrepancy sequence." %enddef %feature("docstring") OT::LowDiscrepancySequenceImplementation::getDimension OT_LowDiscrepancySequence_getDimension_doc // --------------------------------------------------------------------- %define OT_LowDiscrepancySequence_initialize_doc "Initialize the sequence. Parameters ---------- dimension : int Dimension of the points of the low discrepancy sequence. Examples -------- >>> import openturns as ot >>> # Create a sequence of 3 points of 2 dimensions >>> sequence = ot.LowDiscrepancySequence(ot.SobolSequence(2)) >>> print(sequence.generate(3)) 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ] >>> print(sequence.generate(3)) 0 : [ 0.375 0.375 ] 1 : [ 0.875 0.875 ] 2 : [ 0.625 0.125 ] >>> sequence.initialize(2) >>> print(sequence.generate(3)) 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ]" %enddef %feature("docstring") OT::LowDiscrepancySequenceImplementation::initialize OT_LowDiscrepancySequence_initialize_doc openturns-1.9/python/src/LowDiscrepancySequence_doc.i.in000066400000000000000000000011451307543307100235570ustar00rootroot00000000000000// LowDiscrepancySequence docstrings are defined in LowDiscrepancySequenceImplementation_doc.i.in %feature("docstring") OT::LowDiscrepancySequence OT_LowDiscrepancySequence_doc %feature("docstring") OT::LowDiscrepancySequence::computeStarDiscrepancy OT_LowDiscrepancySequence_computeStarDiscrepancy_doc %feature("docstring") OT::LowDiscrepancySequence::generate OT_LowDiscrepancySequence_generate_doc %feature("docstring") OT::LowDiscrepancySequence::getDimension OT_LowDiscrepancySequence_getDimension_doc %feature("docstring") OT::LowDiscrepancySequence::initialize OT_LowDiscrepancySequence_initialize_doc openturns-1.9/python/src/MCMC.i000066400000000000000000000003061307543307100164230ustar00rootroot00000000000000// SWIG file MCMC.i %{ #include "openturns/MCMC.hxx" %} %include MCMC_doc.i %include openturns/MCMC.hxx namespace OT { %extend MCMC { MCMC(const MCMC & other) { return new OT::MCMC(other); } } } openturns-1.9/python/src/MCMC_doc.i.in000066400000000000000000000226631307543307100176670ustar00rootroot00000000000000%feature("docstring") OT::MCMC "Monte-Carlo Markov Chain. Available constructor: MCMC(*prior, conditional, observations, initialState*) MCMC(*prior, conditional, model, parameters, observations, initialState*) Parameters ---------- prior : :class:`~openturns.Distribution` Prior distribution of the parameters of the underlying Bayesian statistical model. conditional : :class:`~openturns.Distribution` Required distribution to define the likelihood of the underlying Bayesian statistical model. model : :class:`~openturns.Function` Function required to define the likelihood. observations : 2-d sequence of float Observations required to define the likelihood. initialState : sequence of float Initial state of the Monte-Carlo Markov chain on which the Sampler is based. parameters : 2-d sequence of float Parameters of the model to be fixed. Notes ----- MCMC provides a implementation of the concept of sampler, using a Monte-Carlo Markov Chain (MCMC) algorithm starting from *initialState*. More precisely, let :math:`t(.)` be the PDF of its target distribution and :math:`d_{\theta}` its dimension, :math:`\pi(.)` be the PDF of the *prior* distribution, :math:`f(.|\vect{w})` be the PDF of the *conditional* distribution when its parameters are set to :math:`\vect{w}`, :math:`d_w` be the number of scalar parameters of *conditional* distribution (which corresponds to the dimension of the above :math:`\vect{w}`), :math:`g(.)` be the function corresponding to model and :math:`(\vect{y}^1, \dots, \vect{y}^n)` be the sample *observations* (of size :math:`n`): In the first usage, it creates a sampler based on a MCMC algorithm whose target distribution is defined by: .. _PDF_target_formula: .. math:: t(\vect{\theta}) \quad \propto \quad \underbrace{~\pi(\vect{\theta})~}_{\mbox{prior}} \quad \underbrace{~\prod_{i=1}^n f(\vect{y}^i|\vect{\theta})~}_{\mbox{likelihood}} In the first usage, it creates a sampler based on a MCMC algorithm whose target distribution is defined by: .. _second_PDF_target_formula: .. math:: t(\vect{\theta}) \quad \propto \quad \underbrace{~\pi(\vect{\theta})~}_{\mbox{prior}} \quad \underbrace{~\prod_{i=1}^n f(\vect{y}^i|g^i(\vect{\theta}))~}_{\mbox{likelihood}} where the :math:`g^i: \Rset^{d_{\theta}} \rightarrow\Rset^{d_w}` (:math:`1\leq{}i\leq{}n`) are such that: .. math:: \begin{array}{rcl} g:\Rset^{d_\theta} & \longrightarrow & \Rset^{n\,d_w}\\ \vect{\theta} & \longmapsto & g(\vect{\theta}) = \Tr{(\Tr{g^1(\vect{\theta})}, \cdots, \Tr{g^n(\vect{\theta})})} \end{array} In fact, the first usage is a particular case of the second. The MCMC method implemented in OpenTURNS is the Random Walk Metropolis-Hastings algorithm. A sample can be generated only through the MCMC's derived class: :class:`~openturns.RandomWalkMetropolisHastings`." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::computeLogLikelihood "Compute the logarithm of the likelihood w.r.t. observations. Parameters ---------- currentState : sequence of float Current state. Returns ------- logLikelihood : float Logarithm of the likelihood w.r.t. observations :math:`(\vect{y}^1, \dots, \vect{y}^n)`." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getBurnIn "Get the length of the burn-in period. Returns ------- lenght : int Length of the burn-in period, that is the number of first iterates of the MCMC chain which will be thrown away when generating the sample." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setBurnIn "Set the length of the burn-in period. Parameters ---------- lenght : int Length of the burn-in period, that is the number of first iterates of the MCMC chain which will be thrown away when generating the sample." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getConditional "Get the *conditional* distribution. Returns ------- conditional : :class:`~openturns.Distribution` Distribution taken into account in the definition of the likelihood, whose PDF with parameters :math:`\vect{w}` corresponds to :math:`f(.|\vect{w})` in the equations of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getModel "Get the model. Returns ------- model : :class:`~openturns.Function` Model take into account in the definition of the likelihood, which corresponds to :math:`g`, that is the functions :math:`g^i` (:math:`1\leq i \leq n`) in the equation of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getObservations "Get the observations. Returns ------- observations : :class:`~openturns.Sample` Sample taken into account in the definition of the likelihood, which corresponds to the :math:`n`-tuple of the :math:`\vect{y}^i` (:math:`1\leq i \leq n`) in equations of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setObservations "Set the observations. Parameters ---------- observations : 2-d sequence of float Sample taken into account in the definition of the likelihood, which corresponds to the :math:`n`-tuple of the :math:`\vect{y}^i` (:math:`1\leq i \leq n`) in the equations of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getParameters "Get the parameters. Returns ------- parameters : :class:`~openturns.Point` Fixed parameters of the model :math:`g` required to define the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setParameters "Set the parameters. Parameters ---------- parameters : sequence of float Fixed parameters of the model :math:`g` required to define the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getPrior "Get the *prior* distribution. Returns ------- prior : :class:`~openturns.Distribution` The prior distribution of the parameter of the underlying Bayesian statistical model, whose PDF corresponds to :math:`\pi` in the equations of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setPrior "Set the *prior* distribution. Parameters ---------- prior : :class:`~openturns.Distribution` The prior distribution of the parameter of the underlying Bayesian statistical model, whose PDF corresponds to :math:`\pi` in the equations of the :ref:`target distribution's PDF `." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getThinning "Get the thinning parameter. Returns ------- thinning : int Thinning parameter: storing only every :math:`k^{th}` point after the burn-in period. Notes ----- When generating a sample of size :math:`q`, the number of MCMC iterations performed is :math:`l+1+(q-1)k` where :math:`l` is the burn-in period length and :math:`k` the thinning parameter." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setThinning "Set the thinning parameter. Parameters ---------- thinning : int, :math:`k \geq 0` Thinning parameter: storing only every :math:`k^{th}` point after the burn-in period. Notes ----- When generating a sample of size :math:`q`, the number of MCMC iterations performed is :math:`l+1+(q-1)k` where :math:`l` is the burn-in period length and :math:`k` the thinning parameter." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getHistory "Get the history storage. Returns ------- history : :class:`~openturns.HistoryStrategy` Used to record the chain." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setHistory "Set the history storage. Parameters ---------- history : :class:`~openturns.HistoryStrategy` Used to record the chain." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::getNonRejectedComponents "Get the components to be always accepted. Returns ------- nonRejectedComponents : :class:`~openturns.Indices` The indices of the components that are not tuned, and sampled according to the prior distribution in order to take into account the intrinsic uncertainty, as opposed to the epistemic uncertainty corresponding to the tuned variables." // --------------------------------------------------------------------- %feature("docstring") OT::MCMC::setNonRejectedComponents "Set the components to be always accepted. Parameters ---------- nonRejectedComponents : sequence of int The indices of the components that are not tuned, and sampled according to the prior distribution in order to take into account the intrinsic uncertainty, as opposed to the epistemic uncertainty corresponding to the tuned variables." openturns-1.9/python/src/MarginalDistribution.i000066400000000000000000000004411307543307100220360ustar00rootroot00000000000000// SWIG file MarginalDistribution.i %{ #include "openturns/MarginalDistribution.hxx" %} %include openturns/MarginalDistribution.hxx namespace OT { %extend MarginalDistribution { MarginalDistribution(const MarginalDistribution & other) { return new OT::MarginalDistribution(other); } } } openturns-1.9/python/src/MarginalTransformationEvaluation.i000066400000000000000000000006461307543307100244240ustar00rootroot00000000000000// SWIG file MarginalTransformationEvaluation.i %{ #include "openturns/MarginalTransformationEvaluation.hxx" %} %include MarginalTransformationEvaluation_doc.i %include openturns/MarginalTransformationEvaluation.hxx namespace OT { %extend MarginalTransformationEvaluation { MarginalTransformationEvaluation(const MarginalTransformationEvaluation & other) { return new OT::MarginalTransformationEvaluation(other); } } } openturns-1.9/python/src/MarginalTransformationEvaluation_doc.i.in000066400000000000000000000114401307543307100256500ustar00rootroot00000000000000%feature("docstring") OT::MarginalTransformationEvaluation "Marginal transformation evaluation. Available constructors: MarginalTransformationEvaluation(*distCol*) MarginalTransformationEvaluation(*distCol, direction*) MarginalTransformationEvaluation(*distCol, outputDistCol*) Parameters ---------- distCol : :class:`~openturns.DistributionCollection` A collection of distributions. direction : integer Flag for the direction of the transformation, either integer or *MarginalTransformationEvaluation.FROM* (associated to the integer 0) or *MarginalTransformationEvaluation.TO* (associated to the integer 1). Default is 0. outputDistCol : :class:`~openturns.DistributionCollection` A collection of distributions. Notes ----- This class contains a :class:`~openturns.Function` which can be evaluated in one point but which proposes no gradient nor hessian implementation. - In the two first usage, if :math:`direction = 0`, the created operator transforms a :class:`~openturns.Point` into its rank according to the marginal distributions described in *distCol*. Let :math:`(F_{X_1}, \ldots, F_{X_n})` be the CDF of the distributions contained in *distCol*, then the created operator works as follows: .. math:: (x_1, \ldots, x_n) \rightarrow (F_{X_1}(x_1), \ldots, F_{X_n}(x_n)) If :math:`direction = 1`, the created operator works in the opposite direction: .. math:: (x_1, \ldots, x_n) \rightarrow (F^{-1}_{X_1}(x_1), \ldots, F^{-1}_{X_n}(x_n)) In that case, it requires that all the values :math:`x_i` be in :math:`[0, 1]`. - In the third usage, the created operator transforms a :class:`~openturns.Point` into the following one, where *outputDistCol* contains the :math:`(F_{Y_1}, \ldots, F_{Y_n})` distributions: .. math:: (x_1, \ldots, x_n) \rightarrow (F^{-1}_{Y_1} \circ F_{X_1}(x_1), \ldots, F^{-1}_{Y_n} \circ F_{X_n}(x_n)) Examples -------- >>> import openturns as ot >>> distCol = [ot.Normal(), ot.LogNormal()] >>> margTransEval = ot.MarginalTransformationEvaluation(distCol, 0) >>> print(margTransEval([1, 3])) [0.841345,0.864031] >>> margTransEvalInverse = ot.MarginalTransformationEvaluation(distCol, 1) >>> print(margTransEvalInverse([0.84, 0.86])) [0.994458,2.94562] >>> outputDistCol = [ot.Weibull(), ot.Exponential()] >>> margTransEvalComposed = ot.MarginalTransformationEvaluation(distCol, outputDistCol) >>> print(margTransEvalComposed([1, 3])) [1.84102,1.99533] " // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::getDirection "Accessor to the direction. Returns ------- direction : integer The direction of the transformation." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::getExpressions "Accessor to the numerical math function. Returns ------- listFunction : :class:`~openturns.FunctionCollection` The collection of numerical math functions if the analytical expressions exist." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::getInputDistributionCollection "Accessor to the input distribution collection. Returns ------- inputDistCol : :class:`~openturns.DistributionCollection` The input distribution collection." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::getOutputDistributionCollection "Accessor to the output distribution collection. Returns ------- outputDistCol : :class:`~openturns.DistributionCollection` The output distribution collection." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::getSimplifications "Try to simplify the transformations if it is possible." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::setDirection "Accessor to the direction. Parameters ---------- direction : integer The direction of the transformation." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::setInputDistributionCollection "Accessor to the input distribution collection. Parameters ---------- inputDistCol : :class:`~openturns.DistributionCollection` The input distribution collection." // --------------------------------------------------------------------- %feature("docstring") OT::MarginalTransformationEvaluation::setOutputDistributionCollection "Accessor to the output distribution collection. Parameters ---------- outputDistCol : :class:`~openturns.DistributionCollection` The output distribution collection."openturns-1.9/python/src/MarginalTransformationGradient.i000066400000000000000000000006221307543307100240440ustar00rootroot00000000000000// SWIG file MarginalTransformationGradient.i OTAutodoc(MarginalTransformationGradient) %{ #include "openturns/MarginalTransformationGradient.hxx" %} %include openturns/MarginalTransformationGradient.hxx namespace OT { %extend MarginalTransformationGradient { MarginalTransformationGradient(const MarginalTransformationGradient & other) { return new OT::MarginalTransformationGradient(other); } } } openturns-1.9/python/src/MarginalTransformationHessian.i000066400000000000000000000006121307543307100237000ustar00rootroot00000000000000// SWIG file MarginalTransformationHessian.i OTAutodoc(MarginalTransformationHessian) %{ #include "openturns/MarginalTransformationHessian.hxx" %} %include openturns/MarginalTransformationHessian.hxx namespace OT { %extend MarginalTransformationHessian { MarginalTransformationHessian(const MarginalTransformationHessian & other) { return new OT::MarginalTransformationHessian(other); } } } openturns-1.9/python/src/MartinezSensitivityAlgorithm.i000066400000000000000000000006051307543307100236210ustar00rootroot00000000000000// SWIG file MartinezSensitivityAlgorithm.i %{ #include "openturns/MartinezSensitivityAlgorithm.hxx" %} %include MartinezSensitivityAlgorithm_doc.i %include openturns/MartinezSensitivityAlgorithm.hxx namespace OT{ %extend MartinezSensitivityAlgorithm { MartinezSensitivityAlgorithm(const MartinezSensitivityAlgorithm & other) { return new OT::MartinezSensitivityAlgorithm(other); } } } openturns-1.9/python/src/MartinezSensitivityAlgorithm_doc.i.in000066400000000000000000000055671307543307100250670ustar00rootroot00000000000000%feature("docstring") OT::MartinezSensitivityAlgorithm "Sensitivity analysis using Martinez method Available constructors: MartinezSensitivityAlgorithm(*inputDesign, outputDesign, N, computeSecondOrder*) MartinezSensitivityAlgorithm(*distribution, N, model, computeSecondOrder*) MartinezSensitivityAlgorithm(*experiment, model, computeSecondOrder*) Parameters ---------- inputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained thanks to the SobolIndicesAlgorithmImplementation.Generate method outputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained as the evaluation of a Function (model) on the previous inputDesign distribution : :class:`~openturns.Distribution` Input probabilistic model. Should have independent copula experiment : :class:`~openturns.WeightedExperiment` Experiment for the generation of two independent samples. N : int Size of samples to generate computeSecondOrder : bool If True, design that will be generated contains elements for the evaluation of second order indices. Notes ----- This class is concerned with analyzing the influence the random vector :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)` has on a random variable :math:`Y^k` which is being studied for uncertainty, by using the [Martinez2011]_ method for the evaluation of both first and total order indices. These last ones are respectively given as follows: .. math:: \begin{array}{ccc} \hat{S_i} & = & \rho_n(G(B), G(E^i)) \\ \hat{ST_i} & = & 1 - \rho_n(G(A), G(E^i)) \\ \end{array} where :math:`\rho_n` is the empirical correlation defined by: .. math:: \rho_n(X, Y) = \frac{\Cov{X,Y}}{\sqrt{\Var{X} \Var{Y}}} The class provides also the evaluation of asymptotic confidence interval for first and total order indices, relying on the Fisher transformation. This could be performed for gaussian output data. The `MartinezSensitivityAlgorithm-UseAsmpytoticInterval` resource map key should be fixed to True in that case. See also -------- SobolIndicesAlgorithm Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formula = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+' + \ ... '0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \ ... ot.IndependentCopula(3)) >>> # Define designs to pre-compute >>> size = 100 >>> inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True) >>> outputDesign = model(inputDesign) >>> # sensitivity analysis algorithm >>> sensitivityAnalysis = ot.MartinezSensitivityAlgorithm(inputDesign, outputDesign, size) >>> print(sensitivityAnalysis.getFirstOrderIndices()) [0.30449,0.448506,-0.0711394]" openturns-1.9/python/src/MaternModel.i000066400000000000000000000003761307543307100201220ustar00rootroot00000000000000// SWIG file MaternModel.i %{ #include "openturns/MaternModel.hxx" %} %include MaternModel_doc.i %include openturns/MaternModel.hxx namespace OT { %extend MaternModel { MaternModel(const MaternModel & other) { return new OT::MaternModel(other); } } } openturns-1.9/python/src/MaternModel_doc.i.in000066400000000000000000000054141307543307100213520ustar00rootroot00000000000000%feature("docstring") OT::MaternModel "Matern covariance function. Available constructors: MaternModel(*spatialDim=1*) MaternModel(*scale, nu*) MaternModel(*scale, amplitude, nu*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. When not fulfilled, the spatial dimension is equal to the size of the parameter :math:`\vect{\theta}`. By default, equal to 1. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma}\in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. nu : float, :math:`\nu \geq 0` Coefficient :math:`\nu`. Notes ----- The *Matern* function is a stationary covariance function whith dimension :math:`d=1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \mapsto \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *Matern* function is defined by: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 \dfrac{ 2^{1-\nu} }{\Gamma(\nu) } \left(\sqrt{2 \nu} \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2\right)^{\nu} \mathrm{K}_{\nu} \left(\sqrt{2 \nu} \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2\right), \quad \forall (\vect{s}, \vect{t}) \in \cD \times \cD The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = \dfrac{ 2^{1-\nu} }{\Gamma(\nu) } \left(\sqrt{2 \nu} \left\| \vect{s}- \vect{t} \right\|_2\right)^{\nu} \mathrm{K}_{\nu} \left(\sqrt{2 \nu} \left\| \vect{s}- \vect{t} \right\|_2\right), \quad \forall (\vect{s}, \vect{t}) \in \cD \times \cD See Also -------- CovarianceModel Examples -------- Create a standard Matern covariance function: >>> import openturns as ot >>> covModel = ot.MaternModel(2) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(covModel(s, t)) [[ 0.974477 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0.894994 ]] Create a Matern covariance function specifying the scale vector and :math:`\nu`: >>> covModel2 = ot.MaternModel([1.5, 2.5], 2.3) >>> covModel2bis = ot.MaternModel([1.5]*3, 2.3) Create a Matern covariance function specifying the scale vector, the amplitude and :math:`\nu`: >>> covModel3 = ot.MaternModel([1.5, 2.5], [3.5], 4.5)" // --------------------------------------------------------------------- %feature("docstring") OT::MaternModel::setNu "Nu accessor. Parameters ---------- nu : float, :math:`\nu \geq 0` Coefficient :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::MaternModel::getNu "Nu accessor. Returns ------- nu : float, :math:`\nu \geq 0` Coefficient :math:`\nu`." openturns-1.9/python/src/Matrix.i000066400000000000000000000254271307543307100171630ustar00rootroot00000000000000// SWIG file Matrix.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Matrix & R ($*ltype temp) %{ temp = OT::Matrix(); $1 = &temp; %} %typemap(argout) OT::Matrix & R %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Matrix(*$1), SWIG_TypeQuery("OT::Matrix *"), SWIG_POINTER_OWN | 0 )); %} OT::Matrix OT::Matrix::computeQR(OT::Matrix & R, const OT::Bool fullQR = false, const OT::Bool keepIntact = true); %apply OT::Matrix & R { OT::Matrix & u, OT::Matrix & vT }; OT::Matrix OT::Matrix::computeSVD(OT::Matrix & u, OT::Matrix & vT, const Bool fullSVD = false, const Bool keepIntact = true); %{ #include "openturns/Matrix.hxx" %} %include Matrix_doc.i %ignore OT::Matrix::getRow; %ignore OT::Matrix::getColumn; %template(MatrixImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %apply const ScalarCollection & { const OT::Matrix::ScalarCollection & }; %define OTMatrixGetAccessor(baseType, elementType, pythonElementType) PyObject * __getitem__(PyObject * args) const { Py_ssize_t start1; Py_ssize_t stop1; Py_ssize_t step1; Py_ssize_t slicelength1; // case #0: [slice] => Matrix if ( PySlice_Check( args ) ) { PySlice_GetIndicesEx( OT::SliceCast( args ), self->getNbRows(), &start1, &stop1, &step1, &slicelength1 ); OT::baseType result(slicelength1, self->getNbColumns()); for( OT::UnsignedInteger j = 0; j < self->getNbColumns(); ++ j ) { for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { result.operator()(i, j) = self->operator()( start1 + i*step1, j ); } } return SWIG_NewPointerObj((new OT::baseType(static_cast< const OT::baseType& >(result))), SWIG_TypeQuery("OT::" #baseType " *"), SWIG_POINTER_OWN | 0 ); } PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; // argument values OT::UnsignedInteger arg2 = 0; OT::UnsignedInteger arg3 = 0; if (!PyArg_ParseTuple(args,(char *)"OO:" #baseType "___getitem__",&obj1,&obj2)) SWIG_fail; Py_ssize_t start2; Py_ssize_t stop2; Py_ssize_t step2; Py_ssize_t slicelength2; // convert first list argument if ( PySlice_Check( obj1 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj1 ), self->getNbRows(), &start1, &stop1, &step1, &slicelength1 ); } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #baseType "___getitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getNbRows(); } arg2 = static_cast< OT::UnsignedInteger >(val2); } // convert second list argument if ( PySlice_Check( obj2 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj2 ), self->getNbColumns(), &start2, &stop2, &step2, &slicelength2 ); } else { long val3 ; int ecode3 = 0 ; ecode3 = SWIG_AsVal_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" #baseType "___getitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } if (val3 < 0) { val3 += self->getNbColumns(); } arg3 = static_cast< OT::UnsignedInteger >(val3); } // handle arguments if ( PySlice_Check( obj1 ) ) { if ( PySlice_Check( obj2 ) ) { // case #1: [slice/slice] => baseType OT::baseType result( slicelength1, slicelength2 ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { result.operator()(i, j) = self->operator()( start1 + i*step1, start2 + j*step2 ); } } return SWIG_NewPointerObj((new OT::baseType(static_cast< const OT::baseType& >(result))), SWIG_TypeQuery("OT::" #baseType " *"), SWIG_POINTER_OWN | 0 ); } else { // case #2: [slice/index] => baseType OT::baseType result( slicelength1, 1 ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { result.operator()(i, 0) = self->operator()( start1 + i*step1, arg3 ); } return SWIG_NewPointerObj((new OT::baseType(static_cast< const OT::baseType& >(result))), SWIG_TypeQuery("OT::" #baseType " *"), SWIG_POINTER_OWN | 0 ); } } else { if ( PySlice_Check( obj2 ) ) { // case #3: [index/slice] => baseType OT::baseType result( 1, slicelength2 ); for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { result.operator()(0, j) = self->operator()( arg2, start2 + j*step2 ); } return SWIG_NewPointerObj((new OT::baseType(static_cast< const OT::baseType& >(result))), SWIG_TypeQuery("OT::" #baseType " *"), SWIG_POINTER_OWN | 0 ); } else { // case #4: [index/index] => elementType return OT::convert< OT::elementType, OT::pythonElementType>( self->operator()(arg2, arg3) ); } } fail: return NULL; } %enddef %define OTMatrixSetAccessor(baseType, elementType, pythonElementType) PyObject * __setitem__(PyObject * args, PyObject * valObj) { Py_ssize_t start1; Py_ssize_t stop1; Py_ssize_t step1; Py_ssize_t slicelength1; // case #0: [slice] <= baseType if ( PySlice_Check( args ) ) { PySlice_GetIndicesEx( OT::SliceCast( args ), self->getNbRows(), &start1, &stop1, &step1, &slicelength1 ); OT::baseType temp2 ; OT::baseType *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::" #baseType " *"), 0))) { temp2 = OT::convert< OT::_PySequence_, OT::baseType >( valObj ); val2 = &temp2; } assert( val2 ); for ( OT::UnsignedInteger j = 0; j < val2->getNbColumns(); ++ j) { for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { self->operator()( start1 + i*step1, j ) = val2->operator()(i, j); } } return SWIG_Py_Void(); } PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; // argument values OT::UnsignedInteger arg2 = 0; OT::UnsignedInteger arg3 = 0; if (!PyArg_ParseTuple(args,(char *)"OO:" #baseType "___getitem__",&obj1,&obj2)) SWIG_fail; Py_ssize_t start2; Py_ssize_t stop2; Py_ssize_t step2; Py_ssize_t slicelength2; // convert first list argument if ( PySlice_Check( obj1 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj1 ), self->getNbRows(), &start1, &stop1, &step1, &slicelength1 ); } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #baseType "___setitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getNbRows(); } arg2 = static_cast< OT::UnsignedInteger >(val2); } // convert second list argument if ( PySlice_Check( obj2 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj2 ), self->getNbColumns(), &start2, &stop2, &step2, &slicelength2 ); } else { long val3 ; int ecode3 = 0 ; ecode3 = SWIG_AsVal_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" #baseType "___setitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } if (val3 < 0) { val3 += self->getNbColumns(); } arg3 = static_cast< OT::UnsignedInteger >(val3); } // handle arguments if ( PySlice_Check( obj1 ) ) { if ( PySlice_Check( obj2 ) ) { // case #1: [slice/slice] <= baseType OT::baseType temp2 ; OT::baseType *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::" #baseType " *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { self->operator()( start1 + i*step1, start2 + j*step2 ) = val2->operator()(i, j); } } } else { // case #2: [slice/index] <= baseType OT::baseType temp2 ; OT::baseType *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::" #baseType " *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { self->operator()( start1 + i*step1, arg3 ) = val2->operator()(i, 0); } } } else { if ( PySlice_Check( obj2 ) ) { // case #3: [index/slice] <= baseType OT::baseType temp2 ; OT::baseType *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::" #baseType " *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { self->operator()( arg2, start2 + j*step2 ) = val2->operator()(0, j); } } else { // case #4: [index/index] <= elementType self->operator()(arg2, arg3) = OT::convert< OT::pythonElementType, OT::elementType >(valObj); } } return SWIG_Py_Void(); fail: return NULL; } %enddef %define OTMatrixAccessors() OTMatrixGetAccessor(Matrix, Scalar, _PyFloat_) OTMatrixSetAccessor(Matrix, Scalar, _PyFloat_) %enddef %include openturns/Matrix.hxx %pythoncode %{ # This code has been added to conform to Numpy ndarray interface # that tries to reuse the data stored in the Matrix (zero copy) # see http://docs.scipy.org/doc/numpy/reference/arrays.interface.html#arrays-interface # for details. # See python doc http://docs.python.org/reference/datamodel.html?highlight=getattribute#object.__getattribute__ # for details on how to write such a method. def Matrix___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.__dict__['__array_interface__'] = {'shape': (self.getNbRows(), self.getNbColumns()), 'typestr': "|f" + str(self.__elementsize__()), 'data': (int(self.__baseaddress__()), True), 'strides': (self.__stride__(0), self.__stride__(1)), 'version': 3, } return super(Matrix, self).__getattribute__(name) Matrix.__getattribute__ = Matrix___getattribute__ %} namespace OT { %extend Matrix { Matrix(const Matrix & other) { return new OT::Matrix(other); } Matrix(PyObject * pyObj) { return new OT::Matrix( OT::convert(pyObj) ); } OTMatrixAccessors() Matrix __rmul__(const Scalar s) { return s * (*self); } Matrix __matmul__(const Matrix & other) { return *self * other; } #if SWIG_VERSION < 0x030011 Matrix __truediv__(const Scalar s) { return (*self) / s; } #endif } // Matrix } // OT openturns-1.9/python/src/MatrixImplementation.i000066400000000000000000000033101307543307100220540ustar00rootroot00000000000000// SWIG file MatrixImplementation.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::MatrixImplementation & R ($*ltype temp) %{ temp = OT::MatrixImplementation(); $1 = &temp; %} %typemap(argout) OT::MatrixImplementation & R %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::MatrixImplementation(*$1), SWIG_TypeQuery("OT::MatrixImplementation *"), SWIG_POINTER_OWN | 0 )); %} OT::MatrixImplementation OT::MatrixImplementation::computeQR(OT::MatrixImplementation & R, const OT::Bool fullQR = false, const OT::Bool keepIntact = true); %apply OT::MatrixImplementation & R { OT::MatrixImplementation & u, OT::MatrixImplementation & vT }; OT::MatrixImplementation OT::MatrixImplementation::computeSVD(OT::MatrixImplementation & u, OT::MatrixImplementation & vT, const Bool fullSVD = false, const Bool keepIntact = true); %typemap(in, numinputs=0) OT::Scalar & sign ($*ltype temp) %{ temp = 0.; $1 = &temp; %} %typemap(argout) OT::Scalar & sign %{ $result = SWIG_Python_AppendOutput($result, OT::convert< OT::Scalar, OT::_PyFloat_ >(*$1) ); %} OT::Scalar OT::MatrixImplementation::computeLogAbsoluteDeterminant(OT::Scalar & sign, const OT::Bool keepIntact = true); OT::Scalar OT::MatrixImplementation::computeLogAbsoluteDeterminantSym(OT::Scalar & sign, const OT::Bool keepIntact = true); %{ #include "openturns/MatrixImplementation.hxx" %} %rename(MatrixImplementation_operator___eq__) OT::operator ==(const MatrixImplementation & lhs, const MatrixImplementation & rhs); %include openturns/MatrixImplementation.hxx namespace OT{ %extend MatrixImplementation { MatrixImplementation(const MatrixImplementation & other) { return new OT::MatrixImplementation(other); } } } openturns-1.9/python/src/Matrix_doc.i.in000066400000000000000000000235741307543307100204160ustar00rootroot00000000000000%feature("docstring") OT::Matrix "Real rectangular matrix. Parameters ---------- n_rows : int, :math:`n_r > 0`, optional Number of rows. Default is 1. n_columns : int, :math:`n_c > 0`, optional Number of columns. Default is 1. values : sequence of float with size :math:`n_r \times n_c`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. Default creates a zero matrix. Examples -------- Create a matrix >>> import openturns as ot >>> M = ot.Matrix(2, 2, range(2 * 2)) >>> print(M) [[ 0 2 ] [ 1 3 ]] Get or set terms >>> print(M[0, 0]) 0.0 >>> M[0, 0] = 1. >>> print(M[0, 0]) 1.0 >>> print(M[:, 0]) [[ 1 ] [ 1 ]] Create an openturns matrix from a numpy 2d-array (or matrix, or 2d-list)... >>> import numpy as np >>> np_2d_array = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) >>> ot_matrix = ot.Matrix(np_2d_array) and back >>> np_matrix = np.matrix(ot_matrix) Basic linear algebra operations (provided the dimensions are compatible) >>> A = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> B = ot.Matrix(np.eye(2)) >>> C = ot.Matrix(3, 2, [1.] * 3 * 2) >>> print(A * B - C) [[ 0 1 ] [ 2 3 ] [ 4 5 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::clean "Set elements smaller than a threshold to zero. Parameters ---------- threshold : float Threshold for zeroing elements. Returns ------- cleaned_matrix : :class:`~openturns.Matrix` Input matrix with elements smaller than the threshold set to zero." // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::computeQR "Compute the QR factorization. By default, it is the *economic* decomposition which is computed. The economic QR factorization of a rectangular matrix :math:`\mat{M}` with :math:`n_r \geq n_c` (more rows than columns) is defined as follows: .. math:: \mat{M} = \mat{Q} \mat{R} = \mat{Q} \begin{bmatrix} \mat{R_1} \\ \mat{0} \end{bmatrix} = \begin{bmatrix} \mat{Q_1}, \mat{Q_2} \end{bmatrix} \begin{bmatrix} \mat{R_1} \\ \mat{0} \end{bmatrix} = \mat{Q_1} \mat{R_1} where :math:`\mat{R_1}` is an :math:`n_c \times n_c` upper triangular matrix, :math:`\mat{Q_1}` is :math:`n_r \times n_c`, :math:`\mat{Q_2}` is :math:`n_r \times (n_r - n_c)`, and :math:`\mat{Q_1}` and :math:`\mat{Q_2}` both have orthogonal columns. Parameters ---------- full_qr : bool, optional A flag telling whether `Q`, `R` or `Q1`, `R1` are returned. Default is *False* and returns `Q1`, `R1`. keep_intact : bool, optional A flag telling whether the present matrix is preserved or not in the computation of the decomposition. Default is *True* and leaves the present matrix unchanged. Returns ------- Q1 : :class:`~openturns.Matrix` The orthogonal matrix of the economic QR factorization. R1 : :class:`~openturns.TriangularMatrix` The right (upper) triangular matrix of the economic QR factorization. Q : :class:`~openturns.Matrix` The orthogonal matrix of the full QR factorization. R : :class:`~openturns.TriangularMatrix` The right (upper) triangular matrix of the full QR factorization. Notes ----- The economic QR factorization is often used for solving overdetermined linear systems (where the operator :math:`\mat{M}` has :math:`n_r \geq n_c`) in the least-square sense because it implies solving a (simple) triangular system: .. math:: \vect{\hat{x}} = \arg\min\limits_{\vect{x} \in \Rset^{n_r}} \|\mat{M} \vect{x} - \vect{b}\| = \mat{R_1}^{-1} (\Tr{\mat{Q_1}} \vect{b}) This uses LAPACK's `DGEQRF `_ and `DORGQR `_. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> Q1, R1 = M.computeQR() >>> np.testing.assert_array_almost_equal(Q1 * R1, M)" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::computeSingularValues "Compute the singular values. Parameters ---------- fullSVD : bool, optional Whether the null parts of the orthogonal factors are explicitely stored or not. Default is *False* and computes a reduced SVD. keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- singular_values : :class:`~openturns.Point` The vector of singular values with size :math:`n = \min(n_r, n_c)` that form the diagonal of the :math:`n_r \times n_c` matrix :math:`\mat{\Sigma}` of the SVD decomposition. See also -------- computeSVD Examples -------- >>> import openturns as ot >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> print(M.computeSingularValues(True)) [9.52552,0.514301]" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::computeSVD "Compute the singular values decomposition (SVD). The singular values decomposition of a rectangular matrix :math:`\mat{M}` with size :math:`n_r > n_c` reads: .. math:: \mat{M} = \mat{U} \mat{\Sigma} \Tr{\mat{V}} where :math:`\mat{U}` is an :math:`n_r \times n_r` orthogonal matrix, :math:`\mat{\Sigma}` is an :math:`n_r \times n_c` diagonal matrix and :math:`\mat{V}` is an :math:`n_c \times n_c` orthogonal matrix. Parameters ---------- fullSVD : bool, optional Whether the null parts of the orthogonal factors are explicitely stored or not. Default is *False* and computes a reduced SVD. keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- singular_values : :class:`~openturns.Point` The vector of singular values with size :math:`n = \min(n_r, n_c)` that form the diagonal of the :math:`n_r \times n_c` matrix :math:`\mat{\Sigma}` of the SVD. U : :class:`~openturns.SquareMatrix` The left orthogonal matrix of the SVD. VT : :class:`~openturns.SquareMatrix` The transposed right orthogonal matrix of the SVD. Notes ----- This uses LAPACK's `DGESDD `_. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> singular_values, U, VT = M.computeSVD(True) >>> Sigma = ot.Matrix(M.getNbRows(), M.getNbColumns()) >>> for i in range(singular_values.getSize()): ... Sigma[i, i] = singular_values[i] >>> np.testing.assert_array_almost_equal(U * Sigma * VT, M)" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::getNbColumns "Accessor to the number of columns. Returns ------- n_columns : int" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::getNbRows "Accessor to the number of rows. Returns ------- n_rows : int" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::solveLinearSystem "Solve a rectangular linear system whose the present matrix is the operator. Parameters ---------- rhs : :class:`~openturns.Point` or :class:`~openturns.Matrix` with :math:`n_r` values or rows, respectively The right hand side member of the linear system. keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- solution : :class:`~openturns.Point` or :class:`~openturns.Matrix` The solution of the rectangular linear system. Notes ----- This will handle both matrices and vectors, as well as underdetermined, square or overdetermined linear systems although you'd better type explicitely your matrix if it has some properties that could simplify the resolution (see :class:`~openturns.TriangularMatrix`, :class:`~openturns.SquareMatrix`). This uses LAPACK's `DGELSY `_. The `RCOND` parameter of this routine can be changed through the `MatrixImplementation-DefaultSmallPivot` key of the :class:`~openturns.ResourceMap`. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> b = ot.Point([1.0] * 3) >>> x = M.solveLinearSystem(b) >>> np.testing.assert_array_almost_equal(M * x, b)" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::transpose "Transpose the matrix. Returns ------- MT : :class:`~openturns.Matrix` The transposed matrix. Examples -------- >>> import openturns as ot >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> print(M) [[ 1 2 ] [ 3 4 ] [ 5 6 ]] >>> print(M.transpose()) [[ 1 3 5 ] [ 2 4 6 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::computeGram "Compute the associated Gram matrix. Parameters ---------- transposed : bool Tells if matrix is to be transposed or not. Default value is True Returns ------- MMT : :class:`~openturns.Matrix` The Gram matrix. Notes ----- When transposed is set to `True`, the method computes :math:`cM^t \times \cM`. Otherwise it computes :math:`\cM \ times \cM^t` Examples -------- >>> import openturns as ot >>> M = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> MtM = M.computeGram() >>> print(MtM) [[ 35 44 ] [ 44 56 ]] >>> MMt = M.computeGram(False) >>> print(MMt) [[ 5 11 17 ] [ 11 25 39 ] [ 17 39 61 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Matrix::isEmpty "Tell if the matrix is empty. Returns ------- is_empty : bool True if the matrix contains no element. Examples -------- >>> import openturns as ot >>> M = ot.Matrix([[]]) >>> M.isEmpty() True" openturns-1.9/python/src/MauntzKucherenkoSensitivityAlgorithm.i000066400000000000000000000006731307543307100253320ustar00rootroot00000000000000// SWIG file JansenSensitivityAlgorithm.i %{ #include "openturns/MauntzKucherenkoSensitivityAlgorithm.hxx" %} %include MauntzKucherenkoSensitivityAlgorithm_doc.i %include openturns/MauntzKucherenkoSensitivityAlgorithm.hxx namespace OT{ %extend MauntzKucherenkoSensitivityAlgorithm { MauntzKucherenkoSensitivityAlgorithm(const MauntzKucherenkoSensitivityAlgorithm & other) { return new OT::MauntzKucherenkoSensitivityAlgorithm(other); } } } openturns-1.9/python/src/MauntzKucherenkoSensitivityAlgorithm_doc.i.in000066400000000000000000000050711307543307100265610ustar00rootroot00000000000000%feature("docstring") OT::MauntzKucherenkoSensitivityAlgorithm "Sensitivity analysis using MauntzKucherenko method. Available constructors: MauntzKucherenkoSensitivityAlgorithm(*inputDesign, outputDesign, N, computeSecondOrder*) MauntzKucherenkoSensitivityAlgorithm(*distribution, N, model, computeSecondOrder*) MauntzKucherenkoSensitivityAlgorithm(*experiment, model, computeSecondOrder*) Parameters ---------- inputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained thanks to the SobolIndicesAlgorithmImplementation.Generate method outputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained as the evaluation of a Function (model) on the previous inputDesign distribution : :class:`~openturns.Distribution` Input probabilistic model. Should have independent copula experiment : :class:`~openturns.WeightedExperiment` Experiment for the generation of two independent samples. N : int Size of samples to generate computeSecondOrder : bool If True, design that will be generated contains elements for the evaluation of second order indices. Notes ----- This class is concerned with analyzing the influence the random vector :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)` has on a random variable :math:`Y^k` which is being studied for uncertainty, by using the [Sobol2007]_ method for the evaluation of both first and total order indices. These last ones are respectively given as follows: .. math:: \begin{array}{ccc} \hat{V_i} & = & \frac{1}{n} \sum_{k=1}^{n} G(B_k) \left( G(E_k) - G(A_k) \right) \\ \hat{VT_{i}} & = & \frac{1}{n} \sum_{k=1}^{n} G(A_k) \left( G(A_k) - G(E_k) \right) \end{array} See also -------- SobolIndicesAlgorithm Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formula = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+' + \ ... '0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \ ... ot.IndependentCopula(3)) >>> # Define designs to pre-compute >>> size = 100 >>> inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True) >>> outputDesign = model(inputDesign) >>> # sensitivity analysis algorithm >>> sensitivityAnalysis = ot.MauntzKucherenkoSensitivityAlgorithm(inputDesign, outputDesign, size) >>> print(sensitivityAnalysis.getFirstOrderIndices()) [0.182219,0.357106,-0.129096]" openturns-1.9/python/src/MaximumDistribution.i000066400000000000000000000004751307543307100217300ustar00rootroot00000000000000// SWIG file MaximumDistribution.i %{ #include "openturns/MaximumDistribution.hxx" %} %include MaximumDistribution_doc.i %include openturns/MaximumDistribution.hxx namespace OT { %extend MaximumDistribution { MaximumDistribution(const MaximumDistribution & other) { return new OT::MaximumDistribution(other); } } } openturns-1.9/python/src/MaximumDistribution_doc.i.in000066400000000000000000000034011307543307100231520ustar00rootroot00000000000000%feature("docstring") OT::MaximumDistribution "Maximum distribution. Available constructors: MaximumDistribution(*distribution*) MaximumDistribution(*collection*) MaximumDistribution(*distribution, size*) Parameters ---------- distribution : :class:`~openturns.Distribution` The underlying distribution. collection : sequence of :class:`~openturns.Distribution` A collection of pdfs. size : int Number of instances of distribution. Notes ----- The maximum distribution of F is the distribution of :math:`X = max(X_1, ... , X_n)` where :math:`(X_1, ... , X_n) \sim F` .. math:: \Prob{X\leq x}=\Prob{X_1\leq x,\dots,X_n\leq x} This simplifies to :math:`\Prob{X\leq x}=\prod_{i=1}^n F_i(x)` when :math:`X_1,\dots,X_n` are independent (second constructor) and finally it simplifies into :math:`F^n(x)` when the random variables are iid (third constructor). Examples -------- Create a distribution: >>> import openturns as ot >>> coll = [ot.Uniform(-1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.0, 5.0)] >>> distribution = ot.MaximumDistribution(coll) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::MaximumDistribution::getDistribution "Accessor to the underlying distribution. Returns ------- distribution : :class:`~openturns.Distribution` The underlying distribution." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumDistribution::setDistribution "Accessor to the underlying distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The underlying distribution." // --------------------------------------------------------------------- openturns-1.9/python/src/MaximumEntropyOrderStatisticsCopula.i000066400000000000000000000006761307543307100251270ustar00rootroot00000000000000// SWIG file MaximumEntropyOrderStatisticsCopula.i %{ #include "openturns/MaximumEntropyOrderStatisticsCopula.hxx" %} %include MaximumEntropyOrderStatisticsCopula_doc.i %include openturns/MaximumEntropyOrderStatisticsCopula.hxx namespace OT { %extend MaximumEntropyOrderStatisticsCopula { MaximumEntropyOrderStatisticsCopula(const MaximumEntropyOrderStatisticsCopula & other) { return new OT::MaximumEntropyOrderStatisticsCopula(other); } } } openturns-1.9/python/src/MaximumEntropyOrderStatisticsCopula_doc.i.in000066400000000000000000000032021307543307100263450ustar00rootroot00000000000000%feature("docstring") OT::MaximumEntropyOrderStatisticsCopula "MaximumEntropyOrderStatisticsCopula copula. Parameters ---------- coll : sequence of :class:`~openturns.Distribution` The margins, with range verifying :math:`a_i \leq a_{i+1}` and :math:`b_i \leq b_{i+1}`. Notes ----- Its probability density function is defined as: .. math:: f_U(u) = \prod\limits_{k=2}^d \frac{\exp\left(-\int_{\partial_{k-1}^{-1}(u_{k-1})}^{\partial_k^{-1}(u_k)} \phi_k(s)\di{s}\right)}{\partial_{k-1}(\partial_k^{-1}(u_k))-u_k} \mathbf{1}_{F_1^{-1}(u_1) \leq \dots \leq F_d^{-1}(u_d)} \text{with } \partial_k(t) = F_k(G^{-1}(t)) \text{ and } G(t) = \frac{1}{t} \sum\limits_{k=1}^d F_k(t) Examples -------- Create a distribution: >>> import openturns as ot >>> coll = [ot.Uniform(-1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.0, 5.0)] >>> copulaOrderStat = ot.MaximumEntropyOrderStatisticsCopula(coll) Draw a sample: >>> sample = copulaOrderStat.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::MaximumEntropyOrderStatisticsCopula::getDistributionCollection "Accessor to the distribution's margins collection. Returns ------- coll : sequence of :class:`~openturns.Distribution` The marginals." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumEntropyOrderStatisticsCopula::setDistributionCollection "Accessor to the distribution's collection. Parameters ---------- coll : sequence of :class:`~openturns.Distribution` The margins." // --------------------------------------------------------------------- openturns-1.9/python/src/MaximumEntropyOrderStatisticsDistribution.i000066400000000000000000000007561307543307100263620ustar00rootroot00000000000000// SWIG file MaximumEntropyOrderStatisticsDistribution.i %{ #include "openturns/MaximumEntropyOrderStatisticsDistribution.hxx" %} %include MaximumEntropyOrderStatisticsDistribution_doc.i %include openturns/MaximumEntropyOrderStatisticsDistribution.hxx namespace OT { %extend MaximumEntropyOrderStatisticsDistribution { MaximumEntropyOrderStatisticsDistribution(const MaximumEntropyOrderStatisticsDistribution & other) { return new OT::MaximumEntropyOrderStatisticsDistribution(other); } } } openturns-1.9/python/src/MaximumEntropyOrderStatisticsDistribution_doc.i.in000066400000000000000000000037701307543307100276130ustar00rootroot00000000000000%feature("docstring") OT::MaximumEntropyOrderStatisticsDistribution "MaximumEntropyOrderStatistics distribution. Parameters ---------- coll : sequence of :class:`~openturns.Distribution` The marginals, with range verifying :math:`a_i \leq a_{i+1}` and :math:`b_i \leq b_{i+1}`. useApproximation : bool Indicates whether the expression :math:`\Phi_k(t)` is approximated with a polynomials (Hermitte with degree 4 on a discretization determined by a Gauss-Kronrod algorithm applied to :math:`\Phi_k(t)`). By default, the approximation is used. checkMarginals : bool Indicates whether the compatibility tests on the marginals is done. By default, the tests are done. Notes ----- Its realizations are ordered :math:`X_1 \leq \dots \leq X_n`. Its probability density function is defined as: .. math:: f_X(x) = f_1(x_1) \prod\limits_{k=2}^d \phi_k(x_k) \exp\left(-\int_{x_{k-1}}^{x_k} \phi_k(s)\di{s}\right) \mathbf{1}_{x_1 \leq \dots \leq x_d} \text{with } \phi_k(x_k) = \frac{f_k(x_k)}{F_{k-1}(x_k)-F_k(x_k)} We note: .. math:: \Phi_k(t) = \exp\left(-\int_{a_{k}}^{t} \phi_k(s)\di{s}\right) Examples -------- Create a distribution: >>> import openturns as ot >>> coll = [ot.Uniform(-1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.0, 5.0)] >>> distribution = ot.MaximumEntropyOrderStatisticsDistribution(coll) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::MaximumEntropyOrderStatisticsDistribution::getDistributionCollection "Accessor to the distribution's collection. Returns ------- coll : sequence The marginals." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumEntropyOrderStatisticsDistribution::setDistributionCollection "Accessor to the distribution's collection. Parameters ---------- coll : sequence The marginals." // --------------------------------------------------------------------- openturns-1.9/python/src/MaximumLikelihoodFactory.i000066400000000000000000000006351307543307100226620ustar00rootroot00000000000000// SWIG file MaximumLikelihoodFactory.i %{ #include "openturns/MaximumLikelihoodFactory.hxx" %} %include MaximumLikelihoodFactory_doc.i %ignore OT::MaximumLikelihoodFactory::buildParameter; %include openturns/MaximumLikelihoodFactory.hxx namespace OT { %extend MaximumLikelihoodFactory { MaximumLikelihoodFactory(const MaximumLikelihoodFactory & other) { return new OT::MaximumLikelihoodFactory(other); } } } openturns-1.9/python/src/MaximumLikelihoodFactory_doc.i.in000066400000000000000000000066701307543307100241210ustar00rootroot00000000000000%feature("docstring") OT::MaximumLikelihoodFactory "Maximum likelihood factory. Implements generic maximum likelihood estimation. Available constructor: MaximumLikelihoodFactory(*distribution*) Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution defining the parametric model to be adjusted to data. See also -------- DistributionFactory Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal(0.9, 1.7) >>> sample = distribution.getSample(10) >>> factory = ot.MaximumLikelihoodFactory(ot.Normal()) >>> inf_distribution = factory.build(sample)" // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::setOptimizationAlgorithm "Accessor to the solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::getOptimizationAlgorithm "Accessor to the solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::setOptimizationBounds "Accessor to the optimization bounds. Parameters ---------- problem : :class:`~openturns.Interval` The bounds used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::getOptimizationBounds "Accessor to the optimization bounds. Returns ------- problem : :class:`~openturns.Interval` The bounds used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::setOptimizationInequalityConstraint "Accessor to the optimization inequality constraint. Parameters ---------- inequalityConstraint : :class:`~openturns.Function` The inequality constraint used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::setKnownParameter "Accessor to the known parameters. Parameters ---------- values : sequence of float Values of fixed parameters. indices : sequence of int Indices of fixed parameters. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Beta(2.3, 4.5, -1.0, 1.0) >>> sample = distribution.getSample(10) >>> factory = ot.MaximumLikelihoodFactory(ot.Beta()) >>> # set (a,b) out of (r, t, a, b) >>> factory.setKnownParameter([-1.0, 1.0], [2, 3]) >>> inf_distribution = factory.build(sample)" // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::getKnownParameterValues "Accessor to the known parameters indices. Returns ------- values : :class:`~openturns.Point` Values of fixed parameters." // --------------------------------------------------------------------- %feature("docstring") OT::MaximumLikelihoodFactory::getKnownParameterIndices "Accessor to the known parameters indices. Returns ------- indices : :class:`~openturns.Indices` Indices of fixed parameters." openturns-1.9/python/src/MediumSafe.i000066400000000000000000000003651307543307100177300ustar00rootroot00000000000000// SWIG file MediumSafe.i %{ #include "openturns/MediumSafe.hxx" %} %include MediumSafe_doc.i %include openturns/MediumSafe.hxx namespace OT{ %extend MediumSafe { MediumSafe(const MediumSafe & other) { return new OT::MediumSafe(other); } } } openturns-1.9/python/src/MediumSafe_doc.i.in000066400000000000000000000033231307543307100211570ustar00rootroot00000000000000%feature("docstring") OT::MediumSafe "MediumSafe method. Available constructors: MediumSafe(*solver=ot.Brent()*) MediumSafe(*solver, maximumDistance, stepSize*) Parameters ---------- solver : :class:`~openturns.Solver` Non linear solver used to research the intersection of the limit state function with the direction, on each segment of length *stepSize*, between the center of the space and *maximumDistance* (root research). maximumDistance : positive float Distance from the center of the standard space until which we research an intersection with the limit state function along each direction. By default, the maximum distance is equal to the value defined through the key RootStrategyImplementation-DefaultMaximumDistance of the :class:`~openturns.ResourceMap`. stepSize : float Length of each segment inside which the root research is performed. By default, the step size is equal to the value defined through the key RootStrategyImplementation-DefaultStepSize of the :class:`~openturns.ResourceMap`. See also -------- DirectionalSampling Notes ----- The *MediumSafe* strategy is the following: for each direction, we go along the direction by step of length *stepSize* from the origin to the maximum distant point (at distance *maximumDistance* from the center of the standard space) and we check whether there is a sign changement on each segment so formed. At the first sign changement, we research one root in the concerned segment with the selected non linear solver. Then, the segment *[root, maximum distant point]* is considered within the failure space. If *stepSize* is small enough, this strategy garantees us to find the root which is the nearest from the origin."openturns-1.9/python/src/MeixnerDistribution.i000066400000000000000000000004761307543307100217230ustar00rootroot00000000000000// SWIG file MeixnerDistribution.i %{ #include "openturns/MeixnerDistribution.hxx" %} %include MeixnerDistribution_doc.i %include openturns/MeixnerDistribution.hxx namespace OT { %extend MeixnerDistribution { MeixnerDistribution(const MeixnerDistribution & other) { return new OT::MeixnerDistribution(other); } } } openturns-1.9/python/src/MeixnerDistributionFactory.i000066400000000000000000000005661307543307100232530ustar00rootroot00000000000000// SWIG file MeixnerDistributionFactory.i %{ #include "openturns/MeixnerDistributionFactory.hxx" %} %include MeixnerDistributionFactory_doc.i %include openturns/MeixnerDistributionFactory.hxx namespace OT { %extend MeixnerDistributionFactory { MeixnerDistributionFactory(const MeixnerDistributionFactory & other) { return new OT::MeixnerDistributionFactory(other); } } } openturns-1.9/python/src/MeixnerDistributionFactory_doc.i.in000066400000000000000000000014631307543307100245020ustar00rootroot00000000000000%feature("docstring") OT::MeixnerDistributionFactory "Meixner Distribution factory. Available constructor: MeixnerDistributionFactory() The parameters are estimated using the following moments estimators: .. math:: :nowrap: \begin{align} \displaystyle\Hat{\gamma_1} = \frac{\frac{1}{n}\sum_{i=1}^{n} (x_i-\Hat{x}_n)^3}{\Hat{\sigma}_n^3}\\ \displaystyle\Hat{\gamma_2} = \frac{\frac{1}{n}\sum_{i=1}^{n} (x_i-\Hat{x}_n)^4}{\Hat{\sigma}_n^4}\\ \displaystyle\Hat{\delta} = \frac{1}{\Hat{\gamma_2}_n-\Hat{\gamma_1}_n^2-3}\\ \displaystyle\Hat{\beta} = sign(\Hat{\gamma_1}_n)arcos( 2-\Hat{\delta}_n (\Hat{\gamma_2}_n-3))\\ \displaystyle\Hat{\alpha} = (\Hat{\sigma}_n^2(\cos\Hat{\beta}_n+1) )^{1/3} \end{align} See also -------- DistributionFactory, MeixnerDistribution"openturns-1.9/python/src/MeixnerDistribution_doc.i.in000066400000000000000000000067151307543307100231570ustar00rootroot00000000000000%feature("docstring") OT::MeixnerDistribution "Meixner distribution. Available constructors: MeixnerDistribution(*alpha=1.0, beta=0.0, delta=1.0, mu=0.*) Parameters ---------- alpha : float, :math:`\alpha > 0` Scale parameter. beta : float, :math:`\beta \in [-\pi; \pi]` Skewness parameter. delta : float, :math:`\delta > 0` Shape parameter. mu : float Location parameter :math:`\mu`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\left(2 \cos(\beta / 2)\right)^{2 \delta}} {2 \alpha \pi \Gamma(2 \delta)} \exp\left(\frac{\beta (x - \mu)}{\alpha}\right) \left|\Gamma\left(\delta + i \frac{x - \mu}{\alpha} \right)\right|^2, \quad x \in \Rset with :math:`\alpha, \delta > 0`, :math:`\beta \in [-\pi; \pi]`, :math:`\mu \in \Rset` and where :math:`i^2 = -1`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \alpha \delta \tan(\beta / 2) + \mu \\ \Var{X} & = & \frac{\alpha^2 \delta}{1 + \cos(\beta)} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.MeixnerDistribution(1.0, 0.0, 1.0, 0.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::getAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Returns ------- alpha : float Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::getBeta "Accessor to the distribution's skewness parameter :math:`\beta`. Returns ------- beta : float Skewness parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::getDelta "Accessor to the distribution's shape parameter :math:`\delta`. Returns ------- delta : float Shape parameter :math:`\delta`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::getMu "Accessor to the distribution's location parameter :math:`\mu`. Returns ------- mu : float Location parameter :math:`\mu`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::setAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Parameters ---------- alpha : float, :math:`\alpha > 0` Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::setBeta "Accessor to the distribution's skewness parameter :math:`\beta`. Parameters ---------- beta : float, :math:`\beta \in [-\pi; \pi]` Skewness parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::setDelta "Accessor to the distribution's shape parameter :math:`\delta`. Parameters ---------- delta : float, :math:`\delta > 0` Shape parameter :math:`\delta`." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerDistribution::setMu "Accessor to the distribution's location parameter :math:`\mu`. Parameters ---------- mu : float, :math:`\mu \in \Rset` Location parameter :math:`\mu`." openturns-1.9/python/src/MeixnerFactory.i000066400000000000000000000004261307543307100206460ustar00rootroot00000000000000// SWIG file MeixnerFactory.i %{ #include "openturns/MeixnerFactory.hxx" %} %include MeixnerFactory_doc.i %include openturns/MeixnerFactory.hxx namespace OT { %extend MeixnerFactory { MeixnerFactory(const MeixnerFactory & other) { return new OT::MeixnerFactory(other); } } } openturns-1.9/python/src/MeixnerFactory_doc.i.in000066400000000000000000000044051307543307100221010ustar00rootroot00000000000000%feature("docstring") OT::MeixnerFactory "Meixner specific orthonormal univariate polynomial family. For the :class:`~openturns.NegativeBinomial` distribution. Available constructors: MeixnerFactory(*r=1.0, p=0.5*) Parameters ---------- r : float, :math:`r > 0` Number of failures parameter of the :class:`~openturns.NegativeBinomial` distribution. p : float, :math:`0 < p < 1` Success probability parameter of the :class:`~openturns.NegativeBinomial` distribution. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad 1 < i The recurrence coefficients for the Meixner polynomials come analytically and read: .. math:: \begin{array}{rcl} a_i & = & \displaystyle \frac{p - 1} {\sqrt{p (i + 1) (i + r)}} \\ b_i & = & \displaystyle \frac{p (i + r) + i} {\sqrt{p (i + 1) (i + r)}} \\ c_i & = & \displaystyle - \frac{\sqrt{p i (i + r - 1)}} {\sqrt{p (i + 1) (i + r)}} \\ \end{array}, \quad 1 < i where :math:`r` and :math:`p` are the parameters of the :class:`~openturns.NegativeBinomial` distribution. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.MeixnerFactory() >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 0.707107 - 0.707107 * X 0.5 - 1.25 * X + 0.25 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerFactory::getP "Accessor to the success probability parameter :math:`p`. Of the :class:`~openturns.NegativeBinomial` distribution. Returns ------- p : float Success probability parameter of the :class:`~openturns.NegativeBinomial` distribution." // --------------------------------------------------------------------- %feature("docstring") OT::MeixnerFactory::getR "Accessor to the number of failures parameter :math:`r`. Of the :class:`~openturns.NegativeBinomial` distribution. Returns ------- r : int Number of failures parameter of the :class:`~openturns.NegativeBinomial` distribution." openturns-1.9/python/src/Memory.i000066400000000000000000000001341307543307100171530ustar00rootroot00000000000000// SWIG file Memory.i %{ #include "openturns/Memory.hxx" %} %include openturns/Memory.hxx openturns-1.9/python/src/Mesh.i000066400000000000000000000015351307543307100166050ustar00rootroot00000000000000// SWIG file Mesh.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & coordinates ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & coordinates %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Bool OT::Mesh::checkPointInSimplexWithCoordinates(const OT::Point & point, const OT::UnsignedInteger index, OT::Point & coordinates) const; OT::Indices OT::Mesh::getNearestVertexAndSimplexIndicesWithCoordinates(const OT::Point & point, OT::Point & coordinates) const; %{ #include "openturns/Mesh.hxx" %} %include Mesh_doc.i %include openturns/Mesh.hxx namespace OT { %extend Mesh { Mesh(const Mesh & other) { return new OT::Mesh(other); } } } openturns-1.9/python/src/Mesh_doc.i.in000066400000000000000000000505341307543307100200420ustar00rootroot00000000000000%feature("docstring") OT::Mesh "Mesh. Available constructors: Mesh(*dim=1*) Mesh(*vertices*) Mesh(*vertices, simplices*) Parameters ---------- dim : int, :math:`dim \geq 0` The dimension of the vertices. By default, it creates only one vertex of dimension :math:`dim` with components equal to 0. vertices : 2-d sequence of float Vertices' coordinates in :math:`\Rset^{dim}`. simplices : 2-d sequence of int List of simplices defining the topology of the mesh. The simplex :math:`[i_1, \dots, i_{dim+1}]` connects the vertices of indices :math:`(i_1, \dots, i_{dim+1})` in :math:`\Rset^{dim}`. In dimension 1, a simplex is an interval :math:`[i_1, i_2]`; in dimension 2, it is a triangle :math:`[i_1, i_2, i_3]`. See also -------- RegularGrid Examples -------- >>> import openturns as ot >>> # Define the vertices of the mesh >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> # Define the simplices of the mesh >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> # Create the mesh of dimension 2 >>> mesh2d = ot.Mesh(vertices, simplices)" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::ImportFromMSHFile "Import mesh from FreeFem 2-d mesh files. Parameters ---------- MSHFile : str A MSH ASCII file. Returns ------- mesh : :class:`~openturns.Mesh` Mesh defined in the file *MSHFile*." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::checkPointInSimplex "Check if a point is inside a simplex. Parameters ---------- point : sequence of float Point of dimension :math:`dim`, the dimension of the vertices of the mesh. index : int Integer characterizes one simplex of the mesh. Returns ------- isInside : bool Flag telling whether *point* is inside the simplex of index *index*. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplex = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplex) >>> # Create a point A inside the simplex >>> pointA = [0.6, 0.3] >>> print(mesh2d.checkPointInSimplex(pointA, 0)) True >>> # Create a point B outside the simplex >>> pointB = [1.1, 0.6] >>> print(mesh2d.checkPointInSimplex(pointB, 0)) False" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::checkPointInSimplexWithCoordinates "Check if a point is inside a simplex and returns its barycentric coordinates. Parameters ---------- point : sequence of float Point of dimension :math:`dim`, the dimension of the vertices of the mesh. index : int Integer characterizes one simplex of the mesh. Returns ------- isInside : bool Flag telling whether *point* is inside the simplex of index *index*. coordinates : :class:`~openturns.Point` The barycentric coordinates of the given point wrt the vertices of the simplex . Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplex = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplex) >>> # Create a point A inside the simplex >>> pointA = [0.6, 0.3] >>> print(mesh2d.checkPointInSimplexWithCoordinates(pointA, 0)) [True, class=Point name=Unnamed dimension=3 values=[0.4,0.3,0.3]] >>> # Create a point B outside the simplex >>> pointB = [1.1, 0.6] >>> print(mesh2d.checkPointInSimplexWithCoordinates(pointB, 0)) [False, class=Point name=Unnamed dimension=3 values=[-0.1,0.5,0.6]]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::computeSimplexVolume "Compute the volume of a given simplex. Parameters ---------- index : int Integer characterizes one simplex of the mesh. Returns ------- volume : float Volume of the simplex of index *index*. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplex = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplex) >>> print(mesh2d.computeSimplexVolume(0)) 0.5" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::computeP1Gram "Compute the P1 Lagrange finite element gram matrix of the mesh. Returns ------- gram : :class:`~openturns.CovarianceMatrix` P1 Lagrange finite element gram matrix of the mesh. Notes ----- The P1 Lagrange finite element space associated to a mesh with vertices :math:`(\vect{x}_i)_{i=1,\hdots,n}` is the space of piecewise-linear functions generated by the functions :math:`(\phi_i)_{i=1,\hdots,n}`, where :math:`\phi_i(\vect{x_i})=1`, :math:`\phi_i(\vect{x_j})=0` for :math:`j\neq i` and the restriction of :math:`\phi_i` to any simplex is an affine function. The vertices that are not included into at least one simplex are not taken into account. The gram matrix of the mesh is defined as the symmetric positive definite matrix :math:`\mat{K}` whose generic element :math:`K_{i,j}` is given by: .. math:: \forall i,j=1,\hdots,n,\quad K_{i,j}=\int_{\cD}\phi_i(\vect{x})\phi_j(\vect{x})\di{\vect{x}} This method is used in several algorithms related to stochastic process representation such as the Karhunen-Loeve decomposition. Examples -------- >>> import openturns as ot >>> # Define the vertices of the mesh >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> # Define the simplices of the mesh >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> # Create the mesh of dimension 2 >>> mesh2d = ot.Mesh(vertices, simplices) >>> print(mesh2d.computeP1Gram()) [[ 0.0416667 0.0208333 0.0208333 0 ] [ 0.0208333 0.0625 0.03125 0.0104167 ] [ 0.0208333 0.03125 0.0625 0.0104167 ] [ 0 0.0104167 0.0104167 0.0208333 ]] " // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::draw "Draw the mesh. Returns ------- graph : :class:`~openturns.Graph` If the dimension of the mesh is 1, it draws the corresponding interval, using the :meth:`draw1D` method; if the dimension is 2, it draws the triangular simplices, using the :meth:`draw2D` method; if the dimension is 3, it projects the simplices on the plane of the two first components, using the :meth:`draw3D` method with its default parameters, superposing the simplices." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::draw1D "Draw the mesh of dimension 1. Returns ------- graph : :class:`~openturns.Graph` Draws the line linking the vertices of the mesh when the mesh is of dimension 1. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> vertices = [[0.5], [1.5], [2.1], [2.7]] >>> simplices = [[0, 1], [1, 2], [2, 3]] >>> mesh1d = ot.Mesh(vertices, simplices) >>> # Create a graph >>> aGraph = mesh1d.draw1D() >>> # Draw the mesh >>> View(aGraph).show()" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::draw2D "Draw the mesh of dimension 2. Returns ------- graph : :class:`~openturns.Graph` Draws the edges of each simplex, when the mesh is of dimension 2. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> # Create a graph >>> aGraph = mesh2d.draw2D() >>> # Draw the mesh >>> View(aGraph).show()" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::draw3D "Draw the bidimensional projection of the mesh. Available usages: draw3D(*drawEdge=True, thetaX=0.0, thetaY=0.0, thetaZ=0.0, shading=False, rho=1.0*) draw3D(*drawEdge, rotation, shading, rho*) Parameters ---------- drawEdge : bool Tells if the edge of each simplex has to be drawn. thetaX : float Gives the value of the rotation along the X axis in radian. thetaY : float Gives the value of the rotation along the Y axis in radian. thetaZ : float Gives the value of the rotation along the Z axis in radian. rotation : :class:`~openturns.SquareMatrix` Operates a rotation on the mesh before its projection of the plane of the two first components. shading : bool Enables to give a visual perception of depth and orientation. rho : float, :math:`0 \leq \rho \leq 1` Contraction factor of the simplices. If :math:`\rho < 1`, all the simplices are contracted and appear deconnected: some holes are created, which enables to see inside the mesh. If :math:`\rho = 1`, the simplices keep their initial size and appear connected. If :math:`\rho = 0`, each simplex is reduced to its gravity center. Returns ------- graph : :class:`~openturns.Graph` Draws the bidimensional projection of the mesh on the :math:`(x,y)` plane. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> from math import cos, sin, pi >>> vertices = [[0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0], ... [0.0, 1.0, 1.0], [1.0, 0.0, 0.0], [1.0, 0.0, 1.0], ... [1.0, 1.0, 0.0], [1.0, 1.0, 1.0]] >>> simplices = [[0, 1, 2, 4], [3, 5, 6, 7],[1, 2, 3, 6], ... [1, 2, 4, 6], [1, 3, 5, 6], [1, 4, 5, 6]] >>> mesh3d = ot.Mesh(vertices, simplices) >>> # Create a graph >>> aGraph = mesh3d.draw3D() >>> # Draw the mesh >>> View(aGraph).show() >>> rotation = ot.SquareMatrix(3) >>> rotation[0, 0] = cos(pi / 3.0) >>> rotation[0, 1] = sin(pi / 3.0) >>> rotation[1, 0] = -sin(pi / 3.0) >>> rotation[1, 1] = cos(pi / 3.0) >>> rotation[2, 2] = 1.0 >>> # Create a graph >>> aGraph = mesh3d.draw3D(True, rotation, True, 1.0) >>> # Draw the mesh >>> View(aGraph).show()" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::exportToVTKFile "Export the mesh to a VTK file. Parameters ---------- myVTKFile.vtk : str Name of the created file which contains the mesh and the associated random values that can be visualized with the open source software `Paraview `_." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getDescription "Get the description of the vertices. Returns ------- description : str Description of the vertices. Examples -------- >>> import openturns as ot >>> mesh = ot.Mesh() >>> vertices = ot.Sample([[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]]) >>> vertices.setDescription(['X', 'Y']) >>> mesh.setVertices(vertices) >>> print(mesh.getDescription()) [X,Y]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getNearestVertex "Get the nearest vertex of a given point. Parameters ---------- point : sequence of float Point of dimension :math:`dim`, the dimension of the vertices of the mesh. Returns ------- vertex : :class:`~openturns.Point` Coordinates of the nearest vertex of *point*. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplices = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> point = [0.9, 0.4] >>> print(mesh2d.getNearestVertex(point)) [1,0]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getNearestVertexIndex "Get the index of the nearest vertex of a given point. Parameters ---------- point : sequence of float Point of dimension :math:`dim`, the dimension of the vertices of the mesh. Returns ------- index : int Index of the simplex the nearest of *point* according to the Euclidean norm. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplices = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> point = [0.9, 0.4] >>> print(mesh2d.getNearestVertexIndex(point)) 1" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getNearestVertexAndSimplexIndicesWithCoordinates "Get the index of the nearest vertex of a given point and the containing simplex if any, and returns its barycentric coordinates. Parameters ---------- point : sequence of float Point of dimension :math:`dim`, the dimension of the vertices of the mesh. Returns ------- indices : :class:`~openturns.Indices` Collecton of 1 or 2 integers, the first one being the index of the vertex the closest to the given point and the second one the index of the containing simplex if the given point is inside of the mesh. coordinates : :class:`~openturns.Point` The barycentric coordinates of the given point wrt the vertices of the containing simplex. It is of dimension 0 if the point is not contained into the mesh. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplex = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplex) >>> # Create a point A inside the simplex >>> pointA = [0.6, 0.3] >>> print(mesh2d.getNearestVertexAndSimplexIndicesWithCoordinates(pointA)) [[1,0], class=Point name=Unnamed dimension=3 values=[0.4,0.3,0.3]] >>> # Create a point B outside the simplex >>> pointB = [1.1, 0.6] >>> print(mesh2d.getNearestVertexAndSimplexIndicesWithCoordinates(pointB)) [[2], class=Point name=Unnamed dimension=0 values=[]] " // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getSimplex "Get the simplex of a given index. Parameters ---------- index : int Index characterizing one simplex of the mesh. Returns ------- indices : :class:`~openturns.Indices` Indices defining the simplex of index *index*. The simplex :math:`[i_1, \dots, i_{n+1}]` relies the vertices of index :math:`(i_1, \dots, i_{n+1})` in :math:`\Rset^{dim}`. In dimension 1, a simplex is an interval :math:`[i_1, i_2]`; in dimension 2, it is a triangle :math:`[i_1, i_2, i_3]`. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> print(mesh2d.getSimplex(0)) [0,1,2] >>> print(mesh2d.getSimplex(1)) [1,2,3]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getSimplices "Get the simplices of the mesh. Returns ------- indicesCollection : collection of :class:`~openturns.Indices` List of indices defining all the simplices. The simplex :math:`[i_1, \dots, i_{n+1}]` relies the vertices of index :math:`(i_1, \dots, i_{n+1})` in :math:`\Rset^{dim}`. In dimension 1, a simplex is an interval :math:`[i_1, i_2]`; in dimension 2, it is a triangle :math:`[i_1, i_2, i_3]`. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> print(mesh2d.getSimplices()) [[0,1,2],[1,2,3]]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getSimplicesNumber "Get the number of simplices of the mesh. Returns ------- number : int Number of simplices of the mesh." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getVertex "Get the vertex of a given index. Parameters ---------- index : int Index characterizing one vertex of the mesh. Returns ------- vertex : :class:`~openturns.Point` Coordinates in :math:`\Rset^{dim}` of the vertex of index *index*, where :math:`dim` is the dimension of the vertices of the mesh. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplices = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> print(mesh2d.getVertex(1)) [1,0] >>> print(mesh2d.getVertex(0)) [0,0]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getVertices "Get the vertices of the mesh. Returns ------- vertices : :class:`~openturns.Sample` Coordinates in :math:`\Rset^{dim}` of the vertices, where :math:`dim` is the dimension of the vertices of the mesh. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplices = [[0, 1, 2]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> print(mesh2d.getVertices()) 0 : [ 0 0 ] 1 : [ 1 0 ] 2 : [ 1 1 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getVerticesNumber "Get the number of vertices of the mesh. Returns ------- number : int Number of vertices of the mesh." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getVolume "Get the volume of the mesh. Returns ------- volume : float Geometrical volume of the mesh which is the sum of its simplices' volumes. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0]] >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> mesh2d = ot.Mesh(vertices, simplices) >>> mesh2d.getVolume() 0.75" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::isRegular "Check if the mesh is regular (only for 1-d meshes). Returns ------- isRegular : bool Tells if the mesh is regular or not. Examples -------- >>> import openturns as ot >>> vertices = [[0.5], [1.5], [2.4], [3.5]] >>> simplices = [[0, 1], [1, 2], [2, 3]] >>> mesh1d = ot.Mesh(vertices, simplices) >>> print(mesh1d.isRegular()) False >>> vertices = [[0.5], [1.5], [2.5], [3.5]] >>> mesh1d = ot.Mesh(vertices, simplices) >>> print(mesh1d.isRegular()) True" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::isValid "Check the mesh validity. Returns ------- validity : bool Tells if the mesh is valid i.e. if there is non-overlaping simplices, no unused vertex, no simplices with duplicate vertices and no coincident vertices." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::setSimplices "Set the simplices of the mesh. Parameters ---------- indices : 2-d sequence of int List of indices defining all the simplices. The simplex :math:`[i_1, \dots, i_{n+1}]` relies the vertices of index :math:`(i_1, \dots, i_{n+1})` in :math:`\Rset^{dim}`. In dimension 1, a simplex is an interval :math:`[i_1, i_2]`; in dimension 2, it is a triangle :math:`[i_1, i_2, i_3]`. Examples -------- >>> import openturns as ot >>> mesh = ot.Mesh() >>> simplices = [[0, 1, 2], [1, 2, 3]] >>> mesh.setSimplices(simplices)" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::setVertex "Set a vertex of a given index. Parameters ---------- index : int Index of the vertex to set. vertex : sequence of float Cordinates in :math:`\Rset^{dim}` of the vertex of index *index*, where :math:`dim` is the dimension of the vertices of the mesh. Examples -------- >>> import openturns as ot >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> simplices = [[0, 1, 2]] >>> mesh = ot.Mesh(vertices, simplices) >>> vertex = [0.0, 0.5] >>> mesh.setVertex(0, vertex) >>> print(mesh.getVertices()) 0 : [ 0 0.5 ] 1 : [ 1 0 ] 2 : [ 1 1 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::setVertices "Set the vertices of the mesh. Parameters ---------- vertices : 2-d sequence of float Cordinates in :math:`\Rset^{dim}` of the vertices, where :math:`dim` is the dimension of the vertices of the mesh. Examples -------- >>> import openturns as ot >>> mesh = ot.Mesh() >>> vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]] >>> mesh.setVertices(vertices)" // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::streamToVTKFormat "Give a VTK representation of the mesh. Returns ------- stream : str VTK representation of the mesh." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::getVerticesToSimplicesMap "Accessor to the map between vertices and simplices. Returns ------- verticesSimplicesMap : :class:`~openturns.IndicesCollection` For each vertex, list the vertices indices it belongs to." // --------------------------------------------------------------------- %feature("docstring") OT::Mesh::computeWeights "Compute an approximation of an integral defined over the mesh. Returns ------- weights : :class:`~openturns.Point` Weights such that an integral of a function over the mesh is a weighted sum of its values at the vertices." openturns-1.9/python/src/MetaModelAlgorithm.i000066400000000000000000000004651307543307100214300ustar00rootroot00000000000000// SWIG file MetaModelAlgorithm.i %{ #include "openturns/MetaModelAlgorithm.hxx" %} %include MetaModelAlgorithm_doc.i %include openturns/MetaModelAlgorithm.hxx namespace OT{ %extend MetaModelAlgorithm { MetaModelAlgorithm(const MetaModelAlgorithm & other) { return new OT::MetaModelAlgorithm(other); } } } openturns-1.9/python/src/MetaModelAlgorithm_doc.i.in000066400000000000000000000040761307543307100226640ustar00rootroot00000000000000%feature("docstring") OT::MetaModelAlgorithm "Base class to compute a metamodel. Available constructor: MetaModelAlgorithm(*distribution, model*) Parameters ---------- distribution : :class:`~openturns.Distribution` Joint probability density function of the physical input vector. model : :class:`~openturns.Function` Physical model to be approximated by a metamodel. Notes ----- A MetaModelAlgorithm object can be used only through its derived classes: - :class:`~openturns.KrigingAlgorithm` - :class:`~openturns.FunctionalChaosAlgorithm`" // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelAlgorithm::getDistribution "Accessor to the joint probability density function of the physical input vector. Returns ------- distribution : :class:`~openturns.Distribution` Joint probability density function of the physical input vector." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelAlgorithm::setDistribution "Accessor to the joint probability density function of the physical input vector. Parameters ---------- distribution : :class:`~openturns.Distribution` Joint probability density function of the physical input vector." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelAlgorithm::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` Input sample of a model evaluated apart." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelAlgorithm::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` Output sample of a model evaluated apart." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelAlgorithm::run "Compute the response surfaces. Notes ----- It computes the response surfaces and creates a :class:`~openturns.MetaModelResult` structure containing all the results."openturns-1.9/python/src/MetaModelResult.i000066400000000000000000000004351307543307100207550ustar00rootroot00000000000000// SWIG file MetaModelResult.i %{ #include "openturns/MetaModelResult.hxx" %} %include MetaModelResult_doc.i %include openturns/MetaModelResult.hxx namespace OT{ %extend MetaModelResult { MetaModelResult(const MetaModelResult & other) { return new OT::MetaModelResult(other); } } } openturns-1.9/python/src/MetaModelResult_doc.i.in000066400000000000000000000101271307543307100222060ustar00rootroot00000000000000%feature("docstring") OT::MetaModelResult "Data structure containing a metamodel. Available constructor: MetaModelResult(model, metaModel, residuals, relativeErrors) Parameters ---------- model : :class:`~openturns.Function` Physical model approximated by a metamodel. metaModel : :class:`~openturns.Function` Definition of the response surface(s) of the model's output(s). residuals : sequence of float The residual values defined as follows for each output of the model: :math:`\displaystyle \frac{\sqrt{\sum_{i=1}^N (y_i - \hat{y_i})^2}}{N}` with :math:`y_i` the :math:`N` model's values and :math:`\hat{y_i}` the metamodel's values. relativeErrors : sequence of float The relative errors defined as follows for each output of the model: :math:`\displaystyle \frac{\sum_{i=1}^N (y_i - \hat{y_i})^2}{N \Var{\vect{Y}}}` with :math:`\vect{Y}` the vector of the :math:`N` model's values :math:`y_i` and :math:`\hat{y_i}` the metamodel's values. Notes ----- Structure created by the method run() of :class:`~openturns.KrigingAlgorithm` or :class:`~openturns.FunctionalChaosAlgorithm` and obtained thanks to the method getResult() of these classes. See also -------- FunctionalChaosResult" // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::getModel "Accessor to the model. Returns ------- model : :class:`~openturns.Function` Physical model approximated by a metamodel." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::setModel "Accessor to the model. Parameters ---------- model : :class:`~openturns.Function` Physical model approximated by a metamodel." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::getMetaModel "Accessor to the metamodel. Returns ------- metaModel : :class:`~openturns.Function` Metamodel." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::setMetaModel "Accessor to the metamodel. Parameters ---------- metaModel : :class:`~openturns.Function` Metamodel." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::getResiduals "Accessor to the residuals. Returns ------- residuals : :class:`~openturns.Point` The residual values defined as follows for each output of the model: :math:`\displaystyle \frac{\sqrt{\sum_{i=1}^N (y_i - \hat{y_i})^2}}{N}` with :math:`y_i` the :math:`N` model's values and :math:`\hat{y_i}` the metamodel's values." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::setResiduals "Accessor to the residuals. Parameters ---------- residuals : sequence of float The residual values defined as follows for each output of the model: :math:`\displaystyle \frac{\sqrt{\sum_{i=1}^N (y_i - \hat{y_i})^2}}{N}` with :math:`y_i` the :math:`N` model's values and :math:`\hat{y_i}` the metamodel's values." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::getRelativeErrors "Accessor to the relative errors. Returns ------- relativeErrors : :class:`~openturns.Point` The relative errors defined as follows for each output of the model: :math:`\displaystyle \frac{\sum_{i=1}^N (y_i - \hat{y_i})^2}{N \Var{\vect{Y}}}` with :math:`\vect{Y}` the vector of the :math:`N` model's values :math:`y_i` and :math:`\hat{y_i}` the metamodel's values." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelResult::setRelativeErrors "Accessor to the relative errors. Parameters ---------- relativeErrors : sequence of float The relative errors defined as follows for each output of the model: :math:`\displaystyle \frac{\sum_{i=1}^N (y_i - \hat{y_i})^2}{N \Var{\vect{Y}}}` with :math:`\vect{Y}` the vector of the :math:`N` model's values :math:`y_i` and :math:`\hat{y_i}` the metamodel's values."openturns-1.9/python/src/MetaModelValidation.i000066400000000000000000000004701307543307100215700ustar00rootroot00000000000000// SWIG file MetaModelValidation.i %{ #include "openturns/MetaModelValidation.hxx" %} %include MetaModelValidation_doc.i %include openturns/MetaModelValidation.hxx namespace OT {%extend MetaModelValidation {MetaModelValidation(const MetaModelValidation & other){return new OT::MetaModelValidation(other);}}} openturns-1.9/python/src/MetaModelValidation_doc.i.in000066400000000000000000000075431307543307100230320ustar00rootroot00000000000000%feature("docstring") OT::MetaModelValidation "Base class to score a metamodel and perform validations. Available constructor: MetaModelValidation(*inputValidationSample, outputValidationSample, metaModel*) Parameters ---------- inputValidationSample, outputValidationSample : 2-d sequence of float The input and output validation samples, not used during the learning step. metaModel : :class:`~openturns.Function` Metamodel to validate. Notes ----- A MetaModelValidation object is used for the validation process of a metamodel. For that purpose, a dataset independent of the learning step, is used to score the surrogate model. Its main functionalities are : - To compute the predictivity factor :math:`Q_2` - To get the residual sample, its non parametric distribution - To draw a `model vs metamodel` validation graph. Currently only one dimensional output models are available. Examples -------- >>> import openturns as ot >>> from math import pi >>> dist = ot.Uniform(-pi/2, pi/2) >>> # Model here is sin(x) >>> model = ot.SymbolicFunction(['x'], ['sin(x)']) >>> # We can build several types of models (kriging, pc, ...) >>> # We use a Taylor developement (order 5) and compare the metamodel with the model >>> metaModel = ot.SymbolicFunction(['x'], ['x - x^3/6.0 + x^5/120.0']) >>> x = dist.getSample(10) >>> y = model(x) >>> # Validation of the model >>> val = ot.MetaModelValidation(x, y, metaModel) >>> # Compute the first indicator : q2 >>> q2 = val.computePredictivityFactor() >>> # Get the residual >>> residual = val.getResidualSample() >>> # Get the histogram of residual >>> histoResidual = val.getResidualDistribution(False) >>> # Draw the validation graph >>> graph = val.drawValidation() " // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` Input sample of a model evaluated apart." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` Output sample of a model evaluated apart." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::computePredictivityFactor "Compute the predictivity factor. Returns ------- q2 : float The predictivity factor Notes ----- The predictivity factor :math:`Q_2` is given by : .. math:: Q_2 = 1 - \frac{\sum_{l=1}^{N} Y_{l} -\hat{f}(X_l)}{Var(Y)}" // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::getResidualSample "Compute the residual sample. Returns ------- residual : :class:`~openturns.Sample` The residual sample. Notes ----- The residual sample is given by : .. math:: \epsilon_{l} = Y_{l} -\hat{f}(X_l)" // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::getResidualDistribution "Compute the non parametric distribution of the residual sample. Parameters ---------- smooth : bool Tells if distribution is smooth (true) or not. Default argument is true. Returns ------- residualDistribution : :class:`~openturns.Distribution` The residual distribution. Notes ----- The residual distribution is built thanks to :class:`~openturns.KernelSmoothing` if `smooth` argument is true. Otherwise, an histogram distribution is returned, thanks to :class:`~openturns.HistogramFactory`." // --------------------------------------------------------------------- %feature("docstring") OT::MetaModelValidation::drawValidation "Plot a model vs metamodel graph for visual validation. Returns ------- graph : :class:`~openturns.Graph` The visual validation graph." openturns-1.9/python/src/MethodOfMomentsFactory.i000066400000000000000000000006741307543307100223140ustar00rootroot00000000000000// SWIG file MethodOfMomentsFactory.i %{ #include "openturns/MethodOfMomentsFactory.hxx" %} %include MethodOfMomentsFactory_doc.i %ignore OT::MethodOfMomentsFactory::setParallel; %ignore OT::MethodOfMomentsFactory::buildParameter; %include openturns/MethodOfMomentsFactory.hxx namespace OT { %extend MethodOfMomentsFactory { MethodOfMomentsFactory(const MethodOfMomentsFactory & other) { return new OT::MethodOfMomentsFactory(other); } } } openturns-1.9/python/src/MethodOfMomentsFactory_doc.i.in000066400000000000000000000070021307543307100235360ustar00rootroot00000000000000%feature("docstring") OT::MethodOfMomentsFactory "Estimation by method of moments. Implements generic estimation by method of moments. Available constructor: MethodOfMomentsFactory(*distribution*) Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution defining the parametric model to be adjusted to data. Notes ----- The underlying optimization problem seeks to minimize the sum of slacks between the centered moments of the sample and the centered moments of the parametric model: .. math:: \Delta = \argmin_{\vect{\theta} \in \Rset^K} [ |\mu_1-m_1|/\sigma ]^2 + \sum_{i=2}^K[ (|\mu_i|^{1/i}-|m_i|^{1/i})/\sigma ]^2 with :math:`K` the number of parameters of the distribution, :math:`\mu_i` and :math:`m_i` the centered moments of the sample and the parametric model. See also -------- DistributionFactory Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal(0.9, 1.7) >>> sample = distribution.getSample(10) >>> factory = ot.MethodOfMomentsFactory(ot.Normal()) >>> inf_distribution = factory.build(sample)" // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::setOptimizationAlgorithm "Accessor to the solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the moments." // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::getOptimizationAlgorithm "Accessor to the solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the moments." // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::setOptimizationProblem "Accessor to the problem. Parameters ---------- problem : :class:`~openturns.OptimizationProblem` The problem used for numerical optimization of the moments." // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::getOptimizationProblem "Accessor to the problem. Returns ------- problem : :class:`~openturns.OptimizationProblem` The problem used for numerical optimization of the moments." // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::setKnownParameter "Accessor to the known parameters. Parameters ---------- values : sequence of float Values of fixed parameters. indices : sequence of int Indices of fixed parameters. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Beta(2.3, 4.5, -1.0, 1.0) >>> sample = distribution.getSample(10) >>> factory = ot.MethodOfMomentsFactory(ot.Beta()) >>> # set (a,b) out of (r, t, a, b) >>> factory.setKnownParameter([-1.0, 1.0], [2, 3]) >>> inf_distribution = factory.build(sample)" // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::getKnownParameterValues "Accessor to the known parameters indices. Returns ------- values : :class:`~openturns.Point` Values of fixed parameters." // --------------------------------------------------------------------- %feature("docstring") OT::MethodOfMomentsFactory::getKnownParameterIndices "Accessor to the known parameters indices. Returns ------- indices : :class:`~openturns.Indices` Indices of fixed parameters." openturns-1.9/python/src/MinCopula.i000066400000000000000000000003561307543307100176000ustar00rootroot00000000000000// SWIG file MinCopula.i %{ #include "openturns/MinCopula.hxx" %} %include MinCopula_doc.i %include openturns/MinCopula.hxx namespace OT { %extend MinCopula { MinCopula(const MinCopula & other) { return new OT::MinCopula(other); } } } openturns-1.9/python/src/MinCopula_doc.i.in000066400000000000000000000007421307543307100210310ustar00rootroot00000000000000%feature("docstring") OT::MinCopula "MinCopula. Available constructor: MinCopula(*n=1*) Parameters ---------- n : int, :math:`n \geq 1` Dimension of the copula. Notes ----- The MinCopula is defined by : .. math:: C(u_1, \cdots, u_n) = \min_{i=1, \cdots, n} u_i for :math:`u_i \in [0, 1]` See also -------- Copula Examples -------- Create a distribution: >>> import openturns as ot >>> copula = ot.MinCopula(3) Draw a sample: >>> sample = copula.getSample(5)" openturns-1.9/python/src/Mixture.i000066400000000000000000000003361307543307100173440ustar00rootroot00000000000000// SWIG file Mixture.i %{ #include "openturns/Mixture.hxx" %} %include Mixture_doc.i %include openturns/Mixture.hxx namespace OT { %extend Mixture { Mixture(const Mixture & other) { return new OT::Mixture(other); } } } openturns-1.9/python/src/MixtureClassifier.i000066400000000000000000000004561307543307100213540ustar00rootroot00000000000000// SWIG file MixtureClassifier.i %{ #include "openturns/MixtureClassifier.hxx" %} %include MixtureClassifier_doc.i %include openturns/MixtureClassifier.hxx namespace OT { %extend MixtureClassifier { MixtureClassifier(const MixtureClassifier & other) { return new OT::MixtureClassifier(other); } } } openturns-1.9/python/src/MixtureClassifier_doc.i.in000066400000000000000000000060041307543307100226010ustar00rootroot00000000000000%feature("docstring") OT::MixtureClassifier "Particular classifier based on a mixture distribution. Available constructors: MixtureClassifier(*mixtDist*) Parameters ---------- mixtDist : :class:`~openturns.Mixture` A mixture distribution. See also -------- Classifier, ExpertMixture Notes ----- This implements a mixture classifier which is a particular classifier based on a mixture distribution: .. math:: p( \vect{x} ) = \sum_{i=1}^N w_i p_i ( \vect{x} ) The classifier proposes :math:`N` classes. The rule to assign a point :math:`\vect{x}` to a class :math:`i` is defined as follows: .. math:: i = \argmax_k \log w_k p_k( \vect{x} ) See useful methods :meth:`classify` and :meth:`grade`." // --------------------------------------------------------------------- %feature("docstring") OT::MixtureClassifier::classify "Classify points according to the classifier. **Available usages**: classify(*inputPoint*) classify(*inputSample*) Parameters ---------- inputPoint : sequence of float A point to classify. inputSample : 2-d a sequence of float A set of point to classify. Notes ----- The classifier proposes :math:`N` classes where :math:`N` is the dimension of the mixture distribution *mixtDist*. The rule to assign a point :math:`\vect{x}` to a class :math:`i` is defined as follows: .. math:: i = \argmax_k \log w_k p_k( \vect{x} ) In the first usage, it returns an integer which corresponds to the class where *inputPoint* has been assigned. In the second usage, it returns an :class:`~openturns.Indices` that collects the class of each point of *inputSample*." // --------------------------------------------------------------------- %feature("docstring") OT::MixtureClassifier::grade "Grade points according to the classifier. **Available usages**: grade(*inputPoint, k*) grade(*inputSample, classList*) Parameters ---------- inputPoint : sequence of float A point to grade. inputSample : 2-d a sequence of float A set of point to grade. k : integer The class number. classList : sequence of integer The list of class number. Notes ----- The grade of :math:`\vect{x}` with respect to the class *k* is :math:`log w_k p_k ( \vect{x} )`. In the first usage, it returns a real that grades *inputPoint* with respect to the class *k*. The greatest, the best. In the second usage, it returns an :class:`~openturns.Indices` that collects the grades of the :math:`i^{th}` point of *inputSample* with respect to the :math:`i^{th}` class of *classList*." // --------------------------------------------------------------------- %feature("docstring") OT::MixtureClassifier::getMixture "Accessor to the mixture distribution. Returns ------- mixtDist : :class:`~openturns.Mixture` The mixture distribution." // --------------------------------------------------------------------- %feature("docstring") OT::MixtureClassifier::setMixture "Accessor to the mixture distribution. Parameters ---------- mixtDist : :class:`~openturns.Mixture` The mixture distribution." openturns-1.9/python/src/Mixture_doc.i.in000066400000000000000000000042641307543307100206020ustar00rootroot00000000000000%feature("docstring") OT::Mixture "Build a linear combination of probability density functions. Parameters ---------- collDist : :class:`~openturns.Distribution`, The collection of distributions wich compose the linear combination. weights : sequence of float, optional A sequence with each component :math:`\geq 0`, of dimension equal to the size of *collDist*. The collection of weights applied to the collection of distributions. By default, OpenTURNS takes the weights fulfilled inside each distribution (if any) thanks to the method *collDist[i].setWeight(myWeight)*. If not fulfilled, the weights are all taken equal to 1. The weights are automatically normalized so that their sum is equal to 1. Notes ----- The probability density function of a *Mixture* is defined by: .. math:: f(x) = \sum_{i=1}^N \alpha_i p_i(x), \quad \alpha_i \geq 0, \quad \sum_i \alpha_i = 1 Examples -------- Create a *Mixture*: >>> import openturns as ot >>> collDist = [ot.Triangular(1.0, 2.0, 4.0), ot.Normal(-1.0, 1.0), ot.Uniform(5.0, 6.0)] >>> weight = [0.4, 1.0, 0.2] >>> myMixture = ot.Mixture(collDist, weight) " // --------------------------------------------------------------------- %feature("docstring") OT::Mixture::getDistributionCollection "Accessor to the distribution collection. Returns ------- collDist : :class:`~openturns.Distribution`, The collection of distributions wich compose the linear combination." // --------------------------------------------------------------------- %feature("docstring") OT::Mixture::setDistributionCollection "Set the distribution collection. Parameters ---------- collDist : :class:`~openturns.Distribution`, The collection of distributions wich compose the linear combination." // --------------------------------------------------------------------- %feature("docstring") OT::Mixture::getWeights "Get the weights. Returns ------- weights : :class:`~openturns.Point` with each component :math:`\geq 0`." // --------------------------------------------------------------------- %feature("docstring") OT::Mixture::setWeights "Set the weights. Parameters ---------- weights : sequence of float with each component :math:`\geq 0`." openturns-1.9/python/src/MonomialFunction.i000066400000000000000000000004461307543307100211720ustar00rootroot00000000000000// SWIG file MonomialFunction.i %{ #include "openturns/MonomialFunction.hxx" %} %include MonomialFunction_doc.i %include openturns/MonomialFunction.hxx namespace OT { %extend MonomialFunction { MonomialFunction(const MonomialFunction & other) { return new OT::MonomialFunction(other); } } } openturns-1.9/python/src/MonomialFunctionFactory.i000066400000000000000000000005351307543307100225210ustar00rootroot00000000000000// SWIG file MonomialFunctionFactory.i %{ #include "openturns/MonomialFunctionFactory.hxx" %} %include MonomialFunctionFactory_doc.i %include openturns/MonomialFunctionFactory.hxx namespace OT{ %extend MonomialFunctionFactory { MonomialFunctionFactory(const MonomialFunctionFactory & other) { return new OT::MonomialFunctionFactory(other); } } } openturns-1.9/python/src/MonomialFunctionFactory_doc.i.in000066400000000000000000000021301307543307100237440ustar00rootroot00000000000000%define OT_MonomialFunctionFactory_doc "Factory for univariate monomial functions." %enddef %feature("docstring") OT::MonomialFunctionFactory OT_MonomialFunctionFactory_doc // --------------------------------------------------------------------- %define OT_MonomialFunctionFactory_buildAsMonomialFunction_doc "Build the :math:`n`-th order monomial function. Parameters ---------- n : int, :math:`0 \leq n` Function order. Returns ------- function : :class:`~openturns.MonomialFunction` Requested monomial function." %enddef %feature("docstring") OT::MonomialFunctionFactory::buildAsMonomialFunction OT_MonomialFunctionFactory_buildAsMonomialFunction_doc // --------------------------------------------------------------------- %define OT_MonomialFunctionFactory_build_doc "Build the :math:`n`-th order univariate function. Parameters ---------- n : int, :math:`0 \leq n` Function order. Returns ------- function : :class:`~openturns.UniVariateFunction` Requested univariate function." %enddef %feature("docstring") OT::MonomialFunctionFactory::build OT_MonomialFunctionFactory_build_doc openturns-1.9/python/src/MonomialFunction_doc.i.in000066400000000000000000000030031307543307100224140ustar00rootroot00000000000000%define OT_MonomialFunction_doc "Monomial function class. Available constructors: MonomialFunction(*degree*) Parameters ---------- degre : int Degree of the monomial function Notes ----- The *monomial function* defines as : .. math:: P(x) = X^n Examples -------- Create a standard absolute exponential covariance function: >>> import openturns as ot >>> P = ot.MonomialFunction(3) " %enddef %feature("docstring") OT::MonomialFunction OT_MonomialFunction_doc // --------------------------------------------------------------------- %define OT_MonomialFunction_gradient_doc "Compute the gradient at point :math:`x`. Returns ------- gradient : float The value of the monomial's first-order derivative at point :math:`x`. Examples -------- >>> import openturns as ot >>> P = ot.MonomialFunction(3) >>> print(P.gradient(1.0)) 3.0" %enddef %feature("docstring") OT::MonomialFunction::gradient OT_MonomialFunction_gradient_doc // --------------------------------------------------------------------- %define OT_MonomialFunction_hessian_doc "Compute the hessian at point :math:`x`. Parameters ---------- x : float Input value. Returns ------- hessian : float The value of the monomial's second-order derivative at point :math:`x`. Examples -------- >>> import openturns as ot >>> P = ot.MonomialFunction(3) >>> print(P.hessian(1.0)) 6.0" %enddef %feature("docstring") OT::MonomialFunction::hessian OT_MonomialFunction_hessian_doc // --------------------------------------------------------------------- openturns-1.9/python/src/MonteCarlo.i000066400000000000000000000003651307543307100177540ustar00rootroot00000000000000// SWIG file MonteCarlo.i %{ #include "openturns/MonteCarlo.hxx" %} %include MonteCarlo_doc.i %include openturns/MonteCarlo.hxx namespace OT{ %extend MonteCarlo { MonteCarlo(const MonteCarlo & other) { return new OT::MonteCarlo(other); } } } openturns-1.9/python/src/MonteCarloExperiment.i000066400000000000000000000005061307543307100220120ustar00rootroot00000000000000// SWIG file MonteCarloExperiment.i %{ #include "openturns/MonteCarloExperiment.hxx" %} %include MonteCarloExperiment_doc.i %include openturns/MonteCarloExperiment.hxx namespace OT { %extend MonteCarloExperiment { MonteCarloExperiment(const MonteCarloExperiment & other) { return new OT::MonteCarloExperiment(other); } } } openturns-1.9/python/src/MonteCarloExperiment_doc.i.in000066400000000000000000000022251307543307100232440ustar00rootroot00000000000000%feature("docstring") OT::MonteCarloExperiment "MonteCarlo experiment. Available constructors: MonteCarloExperiment(*distribution, size*) MonteCarloExperiment(*size*) Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution :math:`\mu` with an independent copula used to generate the set of input data. size : positive int Number :math:`cardI` of points that will be generated in the experiment. Notes ----- MonteCarloExperiment is a random weighted design of experiments. The :meth:`generate` method generates points :math:`(\Xi_i)_{i \in I}` independently from the distribution :math:`\mu`. The weights associated to the points are all equal to :math:`1/\mathrm{card}\,I`. When the :meth:`generate` method is recalled, the generated sample changes. See also -------- WeightedExperiment Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myPlane = ot.MonteCarloExperiment(ot.Normal(2), 5) >>> print(myPlane.generate()) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] 3 : [ -0.355007 1.43725 ] 4 : [ 0.810668 0.793156 ]" openturns-1.9/python/src/MonteCarloLHS.i000066400000000000000000000003761307543307100203250ustar00rootroot00000000000000// SWIG file %{ #include "openturns/MonteCarloLHS.hxx" %} %include MonteCarloLHS_doc.i %include openturns/MonteCarloLHS.hxx namespace OT { %extend MonteCarloLHS { MonteCarloLHS(const MonteCarloLHS & other) { return new OT::MonteCarloLHS(other); } } } openturns-1.9/python/src/MonteCarloLHS_doc.i.in000066400000000000000000000023561307543307100215570ustar00rootroot00000000000000%define OT_MonteCarloLHS_doc "Monte Carlo LHS optimization. Performs the optimization of an LHS using Monte Carlo simulations. Available constructors: MonteCarloLHS(*lhsDesign, N*) MonteCarloLHS(*lhsDesign, N, spaceFilling*) Parameters ---------- lhsDesign : :class:`~openturns.LHSExperiment` Factory that generate designs N : int Number of simulations spaceFilling : :class:`~ot.SpaceFilling` Criterion to be optimized Default spaceFilling is MinDist Notes ----- MonteCarloLHS generate N designs using lhsDesign and returns the optimal one with respect to spaceFilling Examples -------- >>> import openturns as ot >>> dimension = 3 >>> size = 100 >>> # Build standard randomized LHS algorithm >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*dimension) >>> lhs = ot.LHSExperiment(distribution, size) >>> lhs.setAlwaysShuffle(True) # randomized >>> # Defining space fillings >>> spaceFilling = ot.SpaceFillingC2() >>> # RandomBruteForce MonteCarlo with N designs (LHS with C2 optimization) >>> N = 10000 >>> optimalLHSAlgorithm = ot.MonteCarloLHS(lhs, N, spaceFilling) " %enddef %feature("docstring") OT::MonteCarloLHS OT_MonteCarloLHS_doc // --------------------------------------------------------------------- openturns-1.9/python/src/MonteCarlo_doc.i.in000066400000000000000000000056721307543307100212140ustar00rootroot00000000000000%feature("docstring") OT::MonteCarlo "Monte Carlo method. Available constructors: MonteCarlo(*event=ot.Event()*) Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. Notes ----- Using the probability distribution of a random vector :math:`\vect{X}`, we seek to evaluate the following probability: .. math:: P_f = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event .. math:: \cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\} If we have the set :math:`\left\{ \vect{x}_1,\ldots,\vect{x}_N \right\}` of :math:`N` independent samples of the random vector :math:`\vect{X}`, we can estimate :math:`\widehat{P}_f` as follows: .. math:: \widehat{P}_{f,MC} = \frac{1}{N} \sum_{i=1}^N \mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} } where :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise; the idea here is in fact to estimate the required probability by the proportion of cases, among the :math:`N` samples of :math:`\vect{X}`, for which the event :math:`\cD_f` occurs. By the law of large numbers, we know that this estimation converges to the required value :math:`P_f` as the sample size :math:`N` tends to infinity. The Central Limit Theorem allows to build an asymptotic confidence interval using the normal limit distribution as follows: .. math:: \lim_{N\rightarrow\infty}\Prob{P_f\in[\widehat{P}_{f,\inf},\widehat{P}_{f,\sup}]}=\alpha with :math:`\widehat{P}_{f,\inf}=\widehat{P}_f - q_{\alpha}\sqrt{\frac{\widehat{P}_f(1-\widehat{P}_f)}{N}}`, :math:`\widehat{P}_{f,\sup}=\widehat{P}_f + q_{\alpha}\sqrt{\frac{\widehat{P}_f(1-\widehat{P}_f)}{N}}` and :math:`q_\alpha` is the :math:`(1+\alpha)/2`-quantile of the standard normal distribution. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> # We create a 'usual' RandomVector from the Distribution >>> vect = ot.RandomVector(myDistribution) >>> # We create a composite random vector >>> output = ot.RandomVector(myFunction, vect) >>> # We create an Event from this RandomVector >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create a Monte Carlo algorithm >>> myAlgo = ot.MonteCarlo(myEvent) >>> myAlgo.setMaximumOuterSampling(150) >>> myAlgo.setBlockSize(4) >>> myAlgo.setMaximumCoefficientOfVariation(0.1) >>> # Perform the simulation >>> myAlgo.run() >>> print('Probability estimate=%.6f' % myAlgo.getResult().getProbabilityEstimate()) Probability estimate=0.140000" openturns-1.9/python/src/MultiStart.i000066400000000000000000000003661307543307100200220ustar00rootroot00000000000000// SWIG file MultiStart.i %{ #include "openturns/MultiStart.hxx" %} %include MultiStart_doc.i %include openturns/MultiStart.hxx namespace OT{ %extend MultiStart { MultiStart(const MultiStart & other) { return new OT::MultiStart(other); } } } openturns-1.9/python/src/MultiStart_doc.i.in000066400000000000000000000042721307543307100212540ustar00rootroot00000000000000%feature("docstring") OT::MultiStart "Multi start optimization algorithm. The algorithm runs an optimization solver for N starting points and returns the best result of each local search. The algorithm succeeds when at least one local search succeeds. Available constructors: MultiStart(*solver, startingPoints*) Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The internal solver startingPoints : 2-d sequence of float Starting point candidates Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> dim = 2 >>> model = ot.SymbolicFunction(['x', 'y'], ['x^2+y^2*(1-x)^3']) >>> bounds = ot.Interval([-3.0] * dim, [3.0] * dim) >>> problem = ot.OptimizationProblem(model) >>> problem.setBounds(bounds) >>> solver = ot.TNC(problem) >>> startingPoints = ot.Normal(dim).getSample(3) >>> algo = ot.MultiStart(solver, startingPoints) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::MultiStart::getOptimizationAlgorithm "Solver accessor. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The internal solver" // --------------------------------------------------------------------- %feature("docstring") OT::MultiStart::setOptimizationAlgorithm "Solver accessor. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The internal solver" // --------------------------------------------------------------------- %feature("docstring") OT::MultiStart::setStartingPoints "Starting points accessor. Parameters ---------- startingPointNumber : :class:`~openturns.Sample` Starting points" // --------------------------------------------------------------------- %feature("docstring") OT::MultiStart::getStartingPoints "Starting points accessor. Returns ------- startingPointNumber : :class:`~openturns.Sample` Starting points" // --------------------------------------------------------------------- %feature("docstring") OT::MultiStart::getResultCollection "Intermediate optimization results accessor. Returns ------- results : :class:`~openturns.OptimizationResultCollection` Intermediate optimization results" openturns-1.9/python/src/Multinomial.i000066400000000000000000000003761307543307100202050ustar00rootroot00000000000000// SWIG file Multinomial.i %{ #include "openturns/Multinomial.hxx" %} %include Multinomial_doc.i %include openturns/Multinomial.hxx namespace OT { %extend Multinomial { Multinomial(const Multinomial & other) { return new OT::Multinomial(other); } } } openturns-1.9/python/src/MultinomialFactory.i000066400000000000000000000004661307543307100215350ustar00rootroot00000000000000// SWIG file MultinomialFactory.i %{ #include "openturns/MultinomialFactory.hxx" %} %include MultinomialFactory_doc.i %include openturns/MultinomialFactory.hxx namespace OT { %extend MultinomialFactory { MultinomialFactory(const MultinomialFactory & other) { return new OT::MultinomialFactory(other); } } } openturns-1.9/python/src/MultinomialFactory_doc.i.in000066400000000000000000000002371307543307100227630ustar00rootroot00000000000000%feature("docstring") OT::MultinomialFactory "Multinomial factory. Available constructor: MultinomialFactory() See also -------- DistributionFactory" openturns-1.9/python/src/Multinomial_doc.i.in000066400000000000000000000047371307543307100214440ustar00rootroot00000000000000%feature("docstring") OT::Multinomial "Multinomial distribution. Available constructors: Multinomial(*N=1, P=[0.5]*) Parameters ---------- N : int, :math:`\sum_{i = 1}^n x_i \leq N` Number of experiments. P : sequence of float, :math:`p_i \geq 0, i = 1, \ldots, n` and :math:`\sum_{i = 1}^n p_i \leq 1` Component probabilities (all positive with sum less than unity). Notes ----- Its probability density function is defined as: .. math:: \Prob{\vect{X} = \vect{x}} = \frac{N!}{x_1! \ldots x_n! (N - s)!} p_1^{x_1} \ldots p_n^{x_n} (1 - q)^{N - s}, \quad \forall \vect{x} \in \Nset^n: s = \sum_{i = 1}^n x_i \leq N with :math:`N \in \Nset^*`, :math:`p_i \geq 0, i = 1, \ldots, n` and :math:`\sum_{i = 1}^n p_i \leq 1`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X_i} & = & N p_i, \quad i = 1, \ldots, n \\ \Var{X_i} & = & N p_i (1 - p_i), \quad i = 1, \ldots, n \\ \Cov{X_i, X_j} & = & - N p_i p_j, \quad i, j = 1, \ldots, n, i \neq j \end{eqnarray*} See Also -------- Dirichlet Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Multinomial(1, [0.5]) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Multinomial::getN "Accessor to the number of experiments parameter :math:`N`. Returns ------- N : int Number of experiments :math:`N`." // --------------------------------------------------------------------- %feature("docstring") OT::Multinomial::getP "Accessor to the component probabilities parameter :math:`\vect{p}`. Returns ------- P : :class:`~openturns.Point` Component probabilities :math:`\vect{p}`." // --------------------------------------------------------------------- %feature("docstring") OT::Multinomial::setN "Accessor to the number of experiments parameter :math:`N`. Parameters ---------- N : int, :math:`\sum_{i = 1}^n x_i \leq N` Number of experiments :math:`N`." // --------------------------------------------------------------------- %feature("docstring") OT::Multinomial::setP "Accessor to the component probabilities parameter :math:`\vect{p}`. Parameters ---------- P : sequence of float, :math:`0 \leq p_i, i = 1, \ldots, n` and :math:`\sum_{i = 1}^n p_i \leq 1` Component probabilities (all positive with sum less than unity)." openturns-1.9/python/src/NLopt.i000066400000000000000000000003201307543307100167340ustar00rootroot00000000000000// SWIG file NLopt.i %{ #include "openturns/NLopt.hxx" %} %include NLopt_doc.i %include openturns/NLopt.hxx namespace OT { %extend NLopt { NLopt(const NLopt & other) { return new OT::NLopt(other); } } } openturns-1.9/python/src/NLopt_doc.i.in000066400000000000000000000067741307543307100202110ustar00rootroot00000000000000%feature("docstring") OT::NLopt "Interface to NLopt. This class exposes the solvers from the non-linear optimization library [NLopt]_. More details about available algorithms are available `here `_. Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem to solve. algoName : str The NLopt identifier of the algorithm. Use :func:`GetAlgorithmNames()` to list available names. Notes ----- This solver does not implement the progress callback. See also -------- AbdoRackwitz, Cobyla, SQP, TNC Examples -------- >>> import openturns as ot >>> dim = 4 >>> bounds = ot.Interval([-3.0] * dim, [5.0] * dim) >>> linear = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ['x1+2*x2-3*x3+4*x4']) >>> problem = ot.OptimizationProblem(linear, ot.Function(), ot.Function(), bounds) >>> algo = ot.NLopt(problem, 'LD_MMA') >>> algo.setStartingPoint([0.0] * 4) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::setAlgorithmName "Accessor to the algorithm name. Parameters ---------- algoName : str The NLopt identifier of the algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::getAlgorithmName "Accessor to the algorithm name. Returns ------- algoName : str The NLopt identifier of the algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::setInitialStep "Initial local derivative-free algorithms step accessor. Parameters ---------- dx : sequence of float The initial step." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::getInitialStep "Initial local derivative-free algorithms step accessor. Returns ------- dx : :class:`~openturns.Point` The initial step." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::setLocalSolver "Local solver accessor. Parameters ---------- solver : :class:`~openturns.NLopt` The local solver." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::getLocalSolver "Local solver accessor. Returns ------- solver : :class:`~openturns.NLopt` The local solver." // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::GetAlgorithmNames "Accessor to the list of algorithms provided by NLopt, by names. Returns ------- names : :class:`~openturns.Description` List of algorithm names provided by NLopt, according to its naming convention. Examples -------- >>> import openturns as ot >>> print(ot.NLopt.GetAlgorithmNames()) [AUGLAG,AUGLAG_EQ,GD_MLSL,GD_MLSL_LDS,GD_STOGO,GD_STOGO_RAND,GN_CRS2_LM,GN_DIRECT,GN_DIRECT_L,GN_DIRECT_L_NOSCAL,GN_DIRECT_L_RAND,GN_DIRECT_L_RAND_NOSCAL,GN_DIRECT_NOSCAL,GN_ESCH,GN_ISRES,GN_MLSL,GN_MLSL_LDS,GN_ORIG_DIRECT,GN_ORIG_DIRECT_L,G_MLSL,G_MLSL_LDS,LD_AUGLAG,LD_AUGLAG_EQ,LD_CCSAQ,LD_LBFGS,LD_LBFGS_NOCEDAL,LD_MMA,LD_SLSQP,LD_TNEWTON,LD_TNEWTON_PRECOND,LD_TNEWTON_PRECOND_RESTART,LD_TNEWTON_RESTART,LD_VAR1,LD_VAR2,LN_AUGLAG,LN_AUGLAG_EQ,LN_BOBYQA,LN_COBYLA,LN_NELDERMEAD,LN_NEWUOA,LN_NEWUOA_BOUND,LN_PRAXIS,LN_SBPLX]#43" // --------------------------------------------------------------------- %feature("docstring") OT::NLopt::SetSeed "Initialize the random generator seed. Parameters ---------- seed : int The RNG seed." openturns-1.9/python/src/NatafEllipticalCopulaEvaluation.i000066400000000000000000000006321307543307100241360ustar00rootroot00000000000000// SWIG file NatafEllipticalCopulaEvaluation.i OTAutodoc(NatafEllipticalCopulaEvaluation) %{ #include "openturns/NatafEllipticalCopulaEvaluation.hxx" %} %include openturns/NatafEllipticalCopulaEvaluation.hxx namespace OT { %extend NatafEllipticalCopulaEvaluation { NatafEllipticalCopulaEvaluation(const NatafEllipticalCopulaEvaluation & other) { return new OT::NatafEllipticalCopulaEvaluation(other); } } } openturns-1.9/python/src/NatafEllipticalCopulaGradient.i000066400000000000000000000006121307543307100235620ustar00rootroot00000000000000// SWIG file NatafEllipticalCopulaGradient.i OTAutodoc(NatafEllipticalCopulaGradient) %{ #include "openturns/NatafEllipticalCopulaGradient.hxx" %} %include openturns/NatafEllipticalCopulaGradient.hxx namespace OT { %extend NatafEllipticalCopulaGradient { NatafEllipticalCopulaGradient(const NatafEllipticalCopulaGradient & other) { return new OT::NatafEllipticalCopulaGradient(other); } } } openturns-1.9/python/src/NatafEllipticalCopulaHessian.i000066400000000000000000000006021307543307100234160ustar00rootroot00000000000000// SWIG file NatafEllipticalCopulaHessian.i OTAutodoc(NatafEllipticalCopulaHessian) %{ #include "openturns/NatafEllipticalCopulaHessian.hxx" %} %include openturns/NatafEllipticalCopulaHessian.hxx namespace OT { %extend NatafEllipticalCopulaHessian { NatafEllipticalCopulaHessian(const NatafEllipticalCopulaHessian & other) { return new OT::NatafEllipticalCopulaHessian(other); } } } openturns-1.9/python/src/NatafEllipticalDistributionEvaluation.i000066400000000000000000000007121307543307100253710ustar00rootroot00000000000000// SWIG file NatafEllipticalDistributionEvaluation.i OTAutodoc(NatafEllipticalDistributionEvaluation) %{ #include "openturns/NatafEllipticalDistributionEvaluation.hxx" %} %include openturns/NatafEllipticalDistributionEvaluation.hxx namespace OT { %extend NatafEllipticalDistributionEvaluation { NatafEllipticalDistributionEvaluation(const NatafEllipticalDistributionEvaluation & other) { return new OT::NatafEllipticalDistributionEvaluation(other); } } } openturns-1.9/python/src/NatafEllipticalDistributionGradient.i000066400000000000000000000006721307543307100250240ustar00rootroot00000000000000// SWIG file NatafEllipticalDistributionGradient.i OTAutodoc(NatafEllipticalDistributionGradient) %{ #include "openturns/NatafEllipticalDistributionGradient.hxx" %} %include openturns/NatafEllipticalDistributionGradient.hxx namespace OT { %extend NatafEllipticalDistributionGradient { NatafEllipticalDistributionGradient(const NatafEllipticalDistributionGradient & other) { return new OT::NatafEllipticalDistributionGradient(other); } } } openturns-1.9/python/src/NatafEllipticalDistributionHessian.i000066400000000000000000000006621307543307100246600ustar00rootroot00000000000000// SWIG file NatafEllipticalDistributionHessian.i OTAutodoc(NatafEllipticalDistributionHessian) %{ #include "openturns/NatafEllipticalDistributionHessian.hxx" %} %include openturns/NatafEllipticalDistributionHessian.hxx namespace OT { %extend NatafEllipticalDistributionHessian { NatafEllipticalDistributionHessian(const NatafEllipticalDistributionHessian & other) { return new OT::NatafEllipticalDistributionHessian(other); } } } openturns-1.9/python/src/NatafIndependentCopulaEvaluation.i000066400000000000000000000006421307543307100243120ustar00rootroot00000000000000// SWIG file NatafIndependentCopulaEvaluation.i OTAutodoc(NatafIndependentCopulaEvaluation) %{ #include "openturns/NatafIndependentCopulaEvaluation.hxx" %} %include openturns/NatafIndependentCopulaEvaluation.hxx namespace OT { %extend NatafIndependentCopulaEvaluation { NatafIndependentCopulaEvaluation(const NatafIndependentCopulaEvaluation & other) { return new OT::NatafIndependentCopulaEvaluation(other); } } } openturns-1.9/python/src/NatafIndependentCopulaGradient.i000066400000000000000000000006221307543307100237360ustar00rootroot00000000000000// SWIG file NatafIndependentCopulaGradient.i OTAutodoc(NatafIndependentCopulaGradient) %{ #include "openturns/NatafIndependentCopulaGradient.hxx" %} %include openturns/NatafIndependentCopulaGradient.hxx namespace OT { %extend NatafIndependentCopulaGradient { NatafIndependentCopulaGradient(const NatafIndependentCopulaGradient & other) { return new OT::NatafIndependentCopulaGradient(other); } } } openturns-1.9/python/src/NatafIndependentCopulaHessian.i000066400000000000000000000006121307543307100235720ustar00rootroot00000000000000// SWIG file NatafIndependentCopulaHessian.i OTAutodoc(NatafIndependentCopulaHessian) %{ #include "openturns/NatafIndependentCopulaHessian.hxx" %} %include openturns/NatafIndependentCopulaHessian.hxx namespace OT { %extend NatafIndependentCopulaHessian { NatafIndependentCopulaHessian(const NatafIndependentCopulaHessian & other) { return new OT::NatafIndependentCopulaHessian(other); } } } openturns-1.9/python/src/NearestPointChecker.i000066400000000000000000000004711307543307100216070ustar00rootroot00000000000000// SWIG file NearestPointChecker.i OTAutodoc(NearestPointChecker) %{ #include "openturns/NearestPointChecker.hxx" %} %include openturns/NearestPointChecker.hxx namespace OT{ %extend NearestPointChecker { NearestPointChecker(const NearestPointChecker & other) { return new OT::NearestPointChecker(other); } } } openturns-1.9/python/src/NearestPointCheckerResult.i000066400000000000000000000005511307543307100230050ustar00rootroot00000000000000// SWIG file NearestPointCheckerResult.i OTAutodoc(NearestPointCheckerResult) %{ #include "openturns/NearestPointCheckerResult.hxx" %} %include openturns/NearestPointCheckerResult.hxx namespace OT{ %extend NearestPointCheckerResult { NearestPointCheckerResult(const NearestPointCheckerResult & other) { return new OT::NearestPointCheckerResult(other); } } } openturns-1.9/python/src/NegativeBinomial.i000066400000000000000000000004461307543307100211260ustar00rootroot00000000000000// SWIG file NegativeBinomial.i %{ #include "openturns/NegativeBinomial.hxx" %} %include NegativeBinomial_doc.i %include openturns/NegativeBinomial.hxx namespace OT { %extend NegativeBinomial { NegativeBinomial(const NegativeBinomial & other) { return new OT::NegativeBinomial(other); } } } openturns-1.9/python/src/NegativeBinomialFactory.i000066400000000000000000000005361307543307100224560ustar00rootroot00000000000000// SWIG file NegativeBinomialFactory.i %{ #include "openturns/NegativeBinomialFactory.hxx" %} %include NegativeBinomialFactory_doc.i %include openturns/NegativeBinomialFactory.hxx namespace OT { %extend NegativeBinomialFactory { NegativeBinomialFactory(const NegativeBinomialFactory & other) { return new OT::NegativeBinomialFactory(other); } } } openturns-1.9/python/src/NegativeBinomialFactory_doc.i.in000066400000000000000000000002571307543307100237100ustar00rootroot00000000000000%feature("docstring") OT::NegativeBinomialFactory "Negative Binomial factory. Available constructor: NegativeBinomialFactory() See also -------- DistributionFactory" openturns-1.9/python/src/NegativeBinomial_doc.i.in000066400000000000000000000036231307543307100223600ustar00rootroot00000000000000%feature("docstring") OT::NegativeBinomial "NegativeBinomial distribution. Available constructors: NegativeBinomial(*r=1.0, p=0.5*) Parameters ---------- r : float, :math:`r > 0` Number of failures until the Bernoulli trial is stopped. p : float, :math:`0 < p < 1` Success probability of the Bernoulli trial. Notes ----- Its probability density function is defined as: .. math:: \Prob{X = k} = \frac{\Gamma(k + r)}{\Gamma(r)\Gamma(k+1)}p^k(1-p)^r, \, \forall k \in \Nset Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{rp}{1-p} \\ \Var{X} & = & \frac{rp}{(1-p)^2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.NegativeBinomial(1.0, 0.6) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::NegativeBinomial::getP "Accessor to the success probability parameter. Returns ------- p : float The success probability of the Bernoulli trial." // --------------------------------------------------------------------- %feature("docstring") OT::NegativeBinomial::getR "Accessor to the number of failures parameter. Returns ------- r : float Number of failures until the Bernoulli trial is stopped." // --------------------------------------------------------------------- %feature("docstring") OT::NegativeBinomial::setP "Accessor to the success probability parameter. Parameters ---------- p : float, :math:`0 \leq p \leq 1` The success probability of the Bernoulli trial." // --------------------------------------------------------------------- %feature("docstring") OT::NegativeBinomial::setR "Accessor to the number of failures parameter. Parameters ---------- r : float, :math:`r > 0` Number of failures until the Bernoulli trial is stopped." openturns-1.9/python/src/NoCalibration.i000066400000000000000000000003601307543307100204300ustar00rootroot00000000000000// SWIG file NoCalibration.i %{ #include "openturns/NoCalibration.hxx" %} %include openturns/NoCalibration.hxx namespace OT { %extend NoCalibration { NoCalibration(const NoCalibration & other) { return new OT::NoCalibration(other); } } } openturns-1.9/python/src/NoEvaluation.i000066400000000000000000000004021307543307100203050ustar00rootroot00000000000000// SWIG file NoEvaluation.i OTAutodoc(NoEvaluation) %{ #include "openturns/NoEvaluation.hxx" %} %include openturns/NoEvaluation.hxx namespace OT { %extend NoEvaluation { NoEvaluation(const NoEvaluation & other) { return new OT::NoEvaluation(other); } } } openturns-1.9/python/src/NoGradient.i000066400000000000000000000003621307543307100177400ustar00rootroot00000000000000// SWIG file NoGradient.i OTAutodoc(NoGradient) %{ #include "openturns/NoGradient.hxx" %} %include openturns/NoGradient.hxx namespace OT { %extend NoGradient { NoGradient(const NoGradient & other) { return new OT::NoGradient(other); } } } openturns-1.9/python/src/NoHessian.i000066400000000000000000000003521307543307100175740ustar00rootroot00000000000000// SWIG file NoHessian.i OTAutodoc(NoHessian) %{ #include "openturns/NoHessian.hxx" %} %include openturns/NoHessian.hxx namespace OT { %extend NoHessian { NoHessian(const NoHessian & other) { return new OT::NoHessian(other); } } } openturns-1.9/python/src/NonCenteredFiniteDifferenceGradient.i000066400000000000000000000016321307543307100247030ustar00rootroot00000000000000// SWIG file NonCenteredFiniteDifferenceGradient.i %{ #include "openturns/NonCenteredFiniteDifferenceGradient.hxx" %} %include NonCenteredFiniteDifferenceGradient_doc.i %include openturns/NonCenteredFiniteDifferenceGradient.hxx namespace OT { %extend NonCenteredFiniteDifferenceGradient { NonCenteredFiniteDifferenceGradient(const NonCenteredFiniteDifferenceGradient & other) { return new OT::NonCenteredFiniteDifferenceGradient(other); } NonCenteredFiniteDifferenceGradient(const Point & epsilon, const EvaluationImplementation & evaluation) { return new OT::NonCenteredFiniteDifferenceGradient(epsilon, evaluation.clone()); } NonCenteredFiniteDifferenceGradient(const Scalar epsilon, const EvaluationImplementation & evaluation) { return new OT::NonCenteredFiniteDifferenceGradient(epsilon, evaluation.clone()); } } } openturns-1.9/python/src/NonCenteredFiniteDifferenceGradient_doc.i.in000066400000000000000000000024011307543307100261300ustar00rootroot00000000000000%feature("docstring") OT::NonCenteredFiniteDifferenceGradient "First order non-centered finite-difference scheme. Available constructors: NonCenteredFiniteDifferenceGradient(*epsilon, evalImpl*) NonCenteredFiniteDifferenceGradient(*step, evalImpl*) Parameters ---------- evalImpl : :class:`~openturns.EvaluationImplementation` Implementation of the evaluation of a function. epsilon : float, sequence of float Finite difference steps for each dimension. step : :class:`~openturns.FiniteDifferenceStep` Defines how finite difference steps values are computed. Notes ----- *NonCenteredFiniteDifferenceGradient* provides a first order non-centered finite-difference scheme: .. math:: \frac{\partial f_j}{\partial x_i} \approx \frac{f_j(x + \epsilon_i) - f_j(x)} {\epsilon_i} Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> epsilon = [0.01]*2 >>> myGradient = ot.NonCenteredFiniteDifferenceGradient(epsilon, myFunc.getEvaluation()) >>> inPoint = [1.0]*2 >>> print(myGradient.gradient(inPoint)) [[ 0.841471 -0.907202 0.73945 ] [ 0.536086 -0.907202 -1.09631 ]]" openturns-1.9/python/src/NonCentralChiSquare.i000066400000000000000000000004761307543307100215640ustar00rootroot00000000000000// SWIG file NonCentralChiSquare.i %{ #include "openturns/NonCentralChiSquare.hxx" %} %include NonCentralChiSquare_doc.i %include openturns/NonCentralChiSquare.hxx namespace OT { %extend NonCentralChiSquare { NonCentralChiSquare(const NonCentralChiSquare & other) { return new OT::NonCentralChiSquare(other); } } } openturns-1.9/python/src/NonCentralChiSquare_doc.i.in000066400000000000000000000050631307543307100230130ustar00rootroot00000000000000%feature("docstring") OT::NonCentralChiSquare "NonCentralChiSquare distribution. Available constructors: NonCentralChiSquare(*nu=5.0, lambda=0.*) Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degree of freedom. lambda : float, :math:`\lambda \geq 0` Non-centrality parameter :math:`\lambda`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \sum_{j=0}^{\infty} e^{-\lambda} \frac{\lambda^j}{j!}p_{\chi^2(\nu + 2j)}(x), \quad x \in [0; +\infty[ where :math:`p_{\chi^2(q)}` is the probability density function of a :math:`\chi^2(q)` random variate. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \nu + \lambda \\ \Var{X} & = & 2(\nu + 2\lambda) \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.NonCentralChiSquare(6.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralChiSquare::getNu "Accessor to the distribution's generalised number degrees of freedom. Returns ------- nu : float Generalised number degrees of freedom :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralChiSquare::getLambda "Accessor to the distribution's non-centrality parameter :math:`\lambda`. Returns ------- lambda : float Non-centrality parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralChiSquare::setNu "Accessor to the distribution's generalised number degrees of freedom. Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degrees of freedom :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralChiSquare::setLambda "Accessor to the distribution's non-centrality parameter :math:`\lambda`. Parameters ---------- lambda : float Non-centrality parameter :math:`\lambda`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralChiSquare::setNuLambda "Accessor to the distribution's non-centrality parameters. Parameters :math:`\lambda` and generalised number degrees of freedom. Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degrees of freedom :math:`\nu`. lambda : float Non-centrality parameter :math:`\lambda`." openturns-1.9/python/src/NonCentralStudent.i000066400000000000000000000004561307543307100213240ustar00rootroot00000000000000// SWIG file NonCentralStudent.i %{ #include "openturns/NonCentralStudent.hxx" %} %include NonCentralStudent_doc.i %include openturns/NonCentralStudent.hxx namespace OT { %extend NonCentralStudent { NonCentralStudent(const NonCentralStudent & other) { return new OT::NonCentralStudent(other); } } } openturns-1.9/python/src/NonCentralStudent_doc.i.in000066400000000000000000000065401307543307100225560ustar00rootroot00000000000000%feature("docstring") OT::NonCentralStudent "NonCentralStudent distribution. Available constructors: NonCentralStudent(*nu=5.0, delta=0.0, gamma=0.0*) Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degree of freedom. delta : float Non-centrality parameter :math:`\delta`. gamma : float Shift parameter :math:`\gamma`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{exp \left(-\delta^2 / 2 \right)} {\sqrt{\nu\pi} \Gamma \left(\frac{\nu}{2} \right)} \left(\frac{\nu}{\nu + (x - \gamma)^2}\right) ^ {\frac{\nu + 1}{2}} \sum_{j=0}^{\infty} \frac{\Gamma \left(\frac{\nu + j + 1}{2}\right)}{\Gamma(j + 1)} \left(\delta(x - \gamma) \sqrt{\frac{2}{\nu + (x - \gamma)^2}}\right) ^ j, \quad x \in \Rset With :math:`\Gamma` denotes Euler's Gamma function :class:`~openturns.SpecFunc_Gamma`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \gamma + \delta sqrt{\frac{\nu}{2}} \frac{\Gamma\left(\frac{\nu - 1}{2}\right)} {\Gamma \left(\frac{\nu}{2}\right)} \quad \text{ if }\nu > 1\\ \Var{X} & = & \frac{\nu}{\nu - 2} (1 + \delta^2) - \left(\frac{\nu}{2}\delta^2 \frac{\Gamma \left(\frac{\nu - 1}{2}\right)} {\Gamma \left(\frac{\nu}{2}\right)} - \gamma \right)^2 \quad \text{ if }\nu>2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.NonCentralStudent(6.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::getNu "Accessor to the distribution's generalised number degrees of freedom. Returns ------- nu : float Generalised number degrees of freedom :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::getDelta "Accessor to the distribution's non-centrality parameter. Returns ------- delta : float Non-centrality parameter :math:`\delta`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::getGamma "Accessor to the distribution's shift from the origin. Returns ------- gamma : float Shift parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::setNu "Accessor to the distribution's generalised number degrees of freedom. Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degrees of freedom :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::setDelta "Accessor to the distribution's non-centrality parameter. Parameters ---------- delta : float Non-centrality parameter :math:`\delta`." // --------------------------------------------------------------------- %feature("docstring") OT::NonCentralStudent::setGamma "Accessor to the distribution's shift from the origin. Parameters ---------- gamma : float Shift parameter :math:`\gamma`." openturns-1.9/python/src/NonStationaryCovarianceModelFactory.i000066400000000000000000000007441307543307100250260ustar00rootroot00000000000000// SWIG file NonStationaryCovarianceModelFactory.i %{ #include "openturns/NonStationaryCovarianceModelFactory.hxx" %} %include NonStationaryCovarianceModelFactory_doc.i %include openturns/NonStationaryCovarianceModelFactory.hxx namespace OT { %extend NonStationaryCovarianceModelFactory { NonStationaryCovarianceModelFactory(const NonStationaryCovarianceModelFactory & other) { return new OT::NonStationaryCovarianceModelFactory(other); } } } openturns-1.9/python/src/NonStationaryCovarianceModelFactory_doc.i.in000066400000000000000000000067731307543307100262700ustar00rootroot00000000000000%feature("docstring") OT::NonStationaryCovarianceModelFactory "Estimation of a non stationary covariance model. Notes ----- We consider :math:`X: \Omega \times \cD \rightarrow \Rset^d` be a multivariate process of dimension *d* where :math:`\cD \in \Rset^n`. We denote :math:`(\vect{t}_0, \dots, \vect{t}_{N-1})` the vertices of the mesh :math:`\cM \in \cD`. *X* is supposed to be a second order process and we note :math:`C : \cD \times \cD \rightarrow \mathcal{M}_{d \times d}(\mathbb{R})` its covariance function. *X* may be stationary or non stationary as well. We suppose that we have *K* fields and we note :math:`(\vect{x}_0^k, \dots, \vect{x}_{N-1}^k)` the values of the field *k* on the mesh :math:`\cM`. We recall that the covariance function *C* writes: .. math:: \forall (\vect{s}, \vect{t}) \in \cD \times \cD, \quad C(\vect{s}, \vect{t}) = \Expect{\left(X_{\vect{s}}-m(\vect{s})\right)\Tr{\left(X_{\vect{t}}-m(\vect{t})\right)}} where the mean function :math:`m: \cD \rightarrow \Rset^d` is defined by: .. math:: \forall \vect{t}\in \cD , \quad m(\vect{t}) = \Expect{X_{\vect{t}}} First, we estimate the covariance function *C* on the vertices of the mesh :math:`\cM` using the empirical mean estimator: .. math:: :nowrap: \begin{eqnarray*} & \forall \vect{t}_i \in \cM, \quad m(\vect{t}_i) \simeq \frac{1}{K} \sum_{k=1}^{K} \vect{x}_i^k \\ & \forall (\vect{t}_i, \vect{t}_j) \in \cD \times \cD, \quad C(\vect{t}_i, \vect{t}_j) \simeq \frac{1}{K} \sum_{k=1}^{K} \left( \vect{x}_i^k - m(\vect{t}_i) \right) \Tr{\left( \vect{x}_j^k - m(\vect{t}_j) \right)} \end{eqnarray*} Then, we build a covariance function defined on :math:`\cD \times \cD` which is a piecewise constant function defined on :math:`\cD \times \cD` by: .. math:: \forall (\vect{s}, \vect{t}) \in \cD \times \cD, \, C(\vect{s}, \vect{t}) = C(\vect{t}_k, \vect{t}_l) where *k* is such that :math:`\vect{t}_k` is the vertex of :math:`\cM` the nearest to :math:`\vect{s}` and :math:`\vect{t}_l` the nearest to :math:`\vect{t}`. " // --------------------------------------------------------------------- %feature("docstring") OT::NonStationaryCovarianceModelFactory::build "Estimate the covariance model. Parameters ---------- sampleFields : :class:`~openturns.ProcessSample` The fields used to estimate the covariance model which is not supposed to be stationary. Returns ------- covEst : :class:`~openturns.CovarianceModelImplementation` The estimated covariance model. Examples -------- Create the covariance model, a mesh and a process: >>> import openturns as ot >>> myModel = ot.AbsoluteExponential([0.1]*2) >>> myMesh = ot.IntervalMesher([10]*2).build(ot.Interval([0.0]*2, [1.0]*2)) >>> myProcess = ot.GaussianProcess(myModel, myMesh) Generate 10 fields: >>> mySample = myProcess.getSample(10) Estimate the covariance model without supposing the stationarity: >>> myEstCov = ot.NonStationaryCovarianceModelFactory().build(mySample) " // --------------------------------------------------------------------- %feature("docstring") OT::NonStationaryCovarianceModelFactory::buildAsUserDefinedCovarianceModel "Estimate the covariance model as a User defined covariance model. Parameters ---------- sampleFields : :class:`~openturns.ProcessSample` The fields used to estimate the covariance model which is not supposed to be stationary. Returns ------- covEst : :class:`~openturns.UserDefinedCovarianceModel` The estimated covariance model that can be used as a :class:`~openturns.UserDefinedCovarianceModel`. " openturns-1.9/python/src/Normal.i000066400000000000000000000003261307543307100171360ustar00rootroot00000000000000// SWIG file Normal.i %{ #include "openturns/Normal.hxx" %} %include Normal_doc.i %include openturns/Normal.hxx namespace OT { %extend Normal { Normal(const Normal & other) { return new OT::Normal(other); } } } openturns-1.9/python/src/NormalCopula.i000066400000000000000000000004061307543307100203010ustar00rootroot00000000000000// SWIG file NormalCopula.i %{ #include "openturns/NormalCopula.hxx" %} %include NormalCopula_doc.i %include openturns/NormalCopula.hxx namespace OT { %extend NormalCopula { NormalCopula(const NormalCopula & other) { return new OT::NormalCopula(other); } } } openturns-1.9/python/src/NormalCopulaFactory.i000066400000000000000000000004761307543307100216400ustar00rootroot00000000000000// SWIG file NormalCopulaFactory.i %{ #include "openturns/NormalCopulaFactory.hxx" %} %include NormalCopulaFactory_doc.i %include openturns/NormalCopulaFactory.hxx namespace OT { %extend NormalCopulaFactory { NormalCopulaFactory(const NormalCopulaFactory & other) { return new OT::NormalCopulaFactory(other); } } } openturns-1.9/python/src/NormalCopulaFactory_doc.i.in000066400000000000000000000002431307543307100230620ustar00rootroot00000000000000%feature("docstring") OT::NormalCopulaFactory "Normal Copula factory. Available constructor: NormalCopulaFactory() See also -------- DistributionFactory" openturns-1.9/python/src/NormalCopula_doc.i.in000066400000000000000000000065461307543307100215460ustar00rootroot00000000000000%feature("docstring") OT::NormalCopula "Normal copula. Available constructor: NormalCopula(*n=1*) NormalCopula(*R*) Parameters ---------- n : int, :math:`n \geq 1` Dimension of the copula. R : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R}` which is not the Kendall nor the Spearman rank correlation matrix of the distribution. The :math:`\mat{R}` matrix can be evaluated from the Spearman or Kendall correlation matrix. Notes ----- The Normal copula is defined by : .. math:: C(u_1, \cdots, u_n) = \Phi_{\mat{R}}^n(\Phi^{-1}(u_1), \cdots, \Phi^{-1}(u_n)) where :math:`\Phi_{\mat{R}}^n` is the multinormal cumulative density function in dimension :math:`n` : .. math:: \Phi_{\mat{R}}^n(\vect{x}) = \int_{-\infty}^{x_1} \ldots \int_{-\infty}^{x_n} \frac{1} {{(2\pi\det{\mat{R}})}^{\frac{n}{2}}} \exp \left(-\frac{\Tr{\vect{u}}\mat{R}\vect{u}}{2} \right)\di{\vect{u}} with :math:`\Phi` is the cumulative distribution function of the normal law in dimension 1: .. math:: \Phi(x) = \int_{-\infty}^x \frac{1}{\sqrt{2\pi}} e^{-\frac{t^2}{2}}\di{t} and with :math:`\mat{R}` is the correlation matrix. This matrix is defined by its algebric properties: symmetric, definite and positive. The correlation matrix :math:`\mat{R}` is obtainable by different ways: - If the Spearman correlation matrix is known : .. math :: \mat{R}_{ij} = 2 \sin \left( \frac{\pi}{6}\rho_{ij}^S \right) where :math:`\rho_{ij}^S = \rho^S(X_i,X_j) = \rho^P(F_{X_i}(X_i),F_{X_j}(X_j))` - If the Kendall measure of correlation is known : .. math:: \mat{R}_{ij} = \sin \left( \frac{\pi}{2} \tau_{ij} \right) with .. math:: \tau_{ij} = \tau(X_i,X_j) = \Prob{(X_{i_1} - X_{i_2})(X_{j_1} - X_{j_2}) > 0} - \Prob{(X_{i_1} - X_{i_2})(X_{j_1} - X_{j_2}) < 0} where :math:`(X_{i_1},X_{j_1}` and :math:`(X_{i_2},X_{j_2})` follow the law of :math:`(X_i,X_j)`. See also -------- Copula Examples -------- Create a distribution: >>> import openturns as ot >>> R = ot.CorrelationMatrix(3) >>> R[0, 1] = 0.25 >>> R[1, 2] = 0.25 >>> copula = ot.NormalCopula(R) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::NormalCopula::GetCorrelationFromKendallCorrelation "Get the correlation matrix from the Kendall correlation matrix. Parameters ---------- K : :class:`~openturns.CorrelationMatrix` Kendall correlation matrix of the considered random vector. Returns ------- R : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R}` of the normal copula evaluated from the Kendall correlation matrix :math:`K`." // --------------------------------------------------------------------- %feature("docstring") OT::NormalCopula::GetCorrelationFromSpearmanCorrelation "Get the correlation matrix from the Spearman correlation matrix. Parameters ---------- S : :class:`~openturns.CorrelationMatrix` Spearman correlation matrix :math:`S` of the considered random vector. Returns ------- R : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R}` of the normal copula evaluated from the Spearman correlation matrix :math:`S`." openturns-1.9/python/src/NormalFactory.i000066400000000000000000000004161307543307100204660ustar00rootroot00000000000000// SWIG file NormalFactory.i %{ #include "openturns/NormalFactory.hxx" %} %include NormalFactory_doc.i %include openturns/NormalFactory.hxx namespace OT { %extend NormalFactory { NormalFactory(const NormalFactory & other) { return new OT::NormalFactory(other); } } } openturns-1.9/python/src/NormalFactory_doc.i.in000066400000000000000000000002141307543307100217140ustar00rootroot00000000000000%feature("docstring") OT::NormalFactory "Normal factory. Available constructor: NormalFactory() See also -------- DistributionFactory"openturns-1.9/python/src/NormalGamma.i000066400000000000000000000003761307543307100201060ustar00rootroot00000000000000// SWIG file NormalGamma.i %{ #include "openturns/NormalGamma.hxx" %} %include NormalGamma_doc.i %include openturns/NormalGamma.hxx namespace OT { %extend NormalGamma { NormalGamma(const NormalGamma & other) { return new OT::NormalGamma(other); } } } openturns-1.9/python/src/NormalGamma_doc.i.in000066400000000000000000000074221307543307100213370ustar00rootroot00000000000000%feature("docstring") OT::NormalGamma "NormalGamma distribution. Helper class for defining the distribution of the random vector :math:`(X,Y)` where :math:`Y` follows the distribution :math:`\Gamma(\alpha, \beta)` with :math:`\alpha>0` and :math:`\beta>0`, :math:`X|Y` follows the distribution :math:`\mathcal{N}\left(\mu, \dfrac{1}{\sqrt{\kappa Y}}\right)`. Available constructor: NormalGamma(*mu, kappa, alpha, beta*) Parameters ---------- mu : float :math:`\mu`, Mean of the conditioned Normal distribution of :math:`X|Y`. Default is :math:`\mu=0.` kappa : float :math:`\kappa >0`, Scale parameter of the precision (ie the inverse of the variance) of the conditioned Normal distribution of :math:`X|Y`. Default is :math:`\kappa=1.` alpha : float :math:`\alpha >0`, Shape parameter of the conditioning Gamma distribution of :math:`Y`. Default is :math:`\alpha=1.` beta : float :math:`\beta >0`, Rate parameter of the conditioning Gamma distribution of :math:`Y`. Default is :math:`\beta=1.` Notes ----- Its probability density function is defined as: .. math:: f_{(X,Y)}(x,y) = \dfrac{\Gamma(\alpha)}{\beta^\alpha}\sqrt{\dfrac{2\pi}{\kappa}}y^{\alpha-1/2}\exp\left(-\dfrac{y}{2}\left[\kappa(x-\mu)^2+2\beta\right]\right) Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.NormalGamma(1.0, 2.0, 1.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::getAlpha "Accessor to the parameter alpha. Returns ------- alpha : float, :math:`\alpha`, :math:`\alpha >0` Shape parameter of the conditioning Gamma distribution of :math:`Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::getBeta "Accessor to the parameter beta. Returns ------- beta : float, :math:`\beta`, :math:`\beta >0` Rate parameter of the conditioning Gamma distribution of :math:`Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::getKappa "Accessor to the parameter kappa. Returns ------- kappa : float, :math:`\kappa`, :math:`\kappa >0` Scale parameter of the precision (ie the inverse of the variance) of the conditioned Normal distribution of :math:`X|Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::getMu "Accessor to the parameter mu. Returns ------- mu : float, :math:`\mu`, Mean of the conditioned Normal distribution of :math:`X|Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::setAlpha "Accessor to the parameter alpha. Parameters ---------- alpha : float, :math:`\alpha >0`, Shape parameter of the conditioning Gamma distribution of :math:`Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::setBeta "Accessor to the parameter beta. Parameters ---------- beta : float, :math:`\beta >0`, Rate parameter of the conditioning Gamma distribution of :math:`Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::setKappa "Accessor to the parameter kappa. Parameters ---------- kappa : float :math:`\kappa >0`, Scale parameter of the precision (ie the inverse of the variance) of the conditioned Normal distribution of :math:`X|Y`" // --------------------------------------------------------------------- %feature("docstring") OT::NormalGamma::setMu "Accessor to the parameter mu. Parameters ---------- mu : float, :math:`\mu`, Mean of the conditioned Normal distribution of :math:`X|Y`" openturns-1.9/python/src/Normal_doc.i.in000066400000000000000000000034271307543307100203750ustar00rootroot00000000000000%feature("docstring") OT::Normal "Normal distribution. Available constructors: Normal(*d=1*) Normal(*mu, sigma*) Normal(*mu, sigma, R*) Normal(*mu, Sigma*) Parameters ---------- d : int, :math:`d \geq 1` Dimension. mu : float :math:`\mu`, sequence of float, :math:`\vect{\mu} \in \Rset^d`, optional Mean. Default is :math:`\vect{\mu} = (0, \dots, 0) \in \Rset^d`. sigma : float :math:`\sigma`, sequence of float, :math:`\vect{\sigma} \in \Rset^{*d}_+`, optional Scale parameter. Default is :math:`\vect{\sigma}= (1, \dots, 1) \in \Rset^d`. R : :class:`~openturns.CorrelationMatrix` :math:`\mat{R} \in \Rset^d \times \Rset^d`, optional If :math:`\nu > 2`: correlation matrix. If :math:`\nu \leq 2`: generalized correlation matrix. Default is :math:`\mat{R} = I_d \in \Rset^d \times \Rset^d`. Sigma : :class:`~openturns.CovarianceMatrix` :math:`\mat{\Sigma} \in \Rset^d \times \Rset^d` Covariance matrix. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1} {\displaystyle (2\pi)^{\frac{n}{2}} (\mathrm{det}\mathbf{\Sigma})^{\frac{1}{2}}} \displaystyle exp \left(-\frac{1}{2}\Tr{(x - \mu)} \mathbf{\Sigma}^{-1}(x - \mu)\right) with :math:`\Sigma = \Lambda(\sigma) R \Lambda(\sigma)`, :math:`\Lambda(\sigma) = diag(\sigma)`, :math:`R` symmetric, definite and positive, :math:`\sigma_i > 0`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \vect{\mu} \\ \Var{X} & = & \mat{\Sigma} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Normal(0.0, 1.0) Draw a sample: >>> sample = distribution.getSample(5)" openturns-1.9/python/src/NormalityTest.i000066400000000000000000000002561307543307100205260ustar00rootroot00000000000000// SWIG file NormalityTest.i %{ #include "openturns/NormalityTest.hxx" %} %include NormalityTest_doc.i %nodefaultctor NormalityTest; %include openturns/NormalityTest.hxx openturns-1.9/python/src/NormalityTest_doc.i.in000066400000000000000000000047641307543307100217700ustar00rootroot00000000000000%feature("docstring") OT::NormalityTest::AndersonDarlingNormal "Evaluate whether a sample follows a normal distribution. Using the Anderson Darling Normal test. **Available usages**: NormalityTest.AndersonDarlingNormal(*sample*) NormalityTest.AndersonDarlingNormal(*sample, level*) Parameters ---------- sample : 2-d sequence of float Tested sample. level : positive float Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- NormalityTest_CramerVonMisesNormal Notes ----- The test is used to check whether the sample follows a normal distribution. This test gives more importance to extreme values. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> test_result = ot.NormalityTest.AndersonDarlingNormal(sample) >>> print(test_result) class=TestResult name=Unnamed type=AndersonDarlingNormal binaryQualityMeasure=true p-value threshold=0.05 p-value=0.7268 description=[] " // --------------------------------------------------------------------- %feature("docstring") OT::NormalityTest::CramerVonMisesNormal "Evaluate whether a sample follows a normal distribution. Using the Cramer Von Mises Normal test. **Available usages**: NormalityTest.CramerVonMisesNormal(*sample*) NormalityTest.CramerVonMisesNormal(*sample, level*) Parameters ---------- sample : 2-d sequence of float Tested sample. level : positive float Threshold p-value of the test (= 1 - first type risk), it must be :math:`< 1`, equal to 0.95 by default. Returns ------- testResult : :class:`~openturns.TestResult` Structure containing the result of the test. See Also -------- NormalityTest_AndersonDarlingNormal Notes ----- The test is used to check whether the sample follows a normal distribution. The test concerns the deviation squared and integrated over the entire variation domain, it often appears to be more robust than the Kolmogorov-Smirnov test. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> test_result = ot.NormalityTest.CramerVonMisesNormal(sample) >>> print(test_result) class=TestResult name=Unnamed type=CramerVonMisesNormal binaryQualityMeasure=true p-value threshold=0.05 p-value=0.682524 description=[] "openturns-1.9/python/src/Null.i000066400000000000000000000003051307543307100166150ustar00rootroot00000000000000// SWIG file Null.i %{ #include "openturns/Null.hxx" %} %include Null_doc.i %include openturns/Null.hxx namespace OT{ %extend Null { Null(const Null & other) { return new OT::Null(other); } } } openturns-1.9/python/src/Null_doc.i.in000066400000000000000000000003241307543307100200500ustar00rootroot00000000000000%feature("docstring") OT::Null "Null history storage strategy. Available constructors: Null() See also -------- HistoryStrategy, Compact, Full, Last Notes ----- The null strategy does not store anything. "openturns-1.9/python/src/ODESolver.i000066400000000000000000000004271307543307100175120ustar00rootroot00000000000000// SWIG file ODESolver.i %{ #include "openturns/ODESolver.hxx" %} %include ODESolver_doc.i OTTypedInterfaceObjectHelper(ODESolver) %include openturns/ODESolver.hxx namespace OT { %extend ODESolver { ODESolver(const ODESolver & other) { return new OT::ODESolver(other); } } } openturns-1.9/python/src/ODESolverImplementation.i000066400000000000000000000005361307543307100224210ustar00rootroot00000000000000// SWIG file ODESolverImplementation.i %{ #include "openturns/ODESolverImplementation.hxx" %} %include ODESolverImplementation_doc.i %include openturns/ODESolverImplementation.hxx namespace OT { %extend ODESolverImplementation { ODESolverImplementation(const ODESolverImplementation & other) { return new OT::ODESolverImplementation(other); } } } openturns-1.9/python/src/ODESolverImplementation_doc.i.in000066400000000000000000000025721307543307100236550ustar00rootroot00000000000000%define OT_ODESolver_doc "ODE solver base class. Solve an explicit first-order differential equation in the form :math:`y' = f(t, y)`" %enddef %feature("docstring") OT::ODESolverImplementation OT_ODESolver_doc // --------------------------------------------------------------------- %define OT_ODESolver_solve_doc "Solve ODE. Parameters ---------- initialState : sequence of float Initial value of the equation timeGrid : sequence of float Time steps Returns ------- values : :class:`~openturns.Sample` The solution of the equation at grid points." %enddef %feature("docstring") OT::ODESolverImplementation::solve OT_ODESolver_solve_doc // --------------------------------------------------------------------- %define OT_ODESolver_setTransitionFunction_doc "Transition function accessor. Parameters ---------- transitionFunction : :class:`~openturns.FieldFunction` Transition function." %enddef %feature("docstring") OT::ODESolverImplementation::setTransitionFunction OT_ODESolver_setTransitionFunction_doc // --------------------------------------------------------------------- %define OT_ODESolver_getTransitionFunction_doc "Transition function accessor. Returns ------- transitionFunction : :class:`~openturns.FieldFunction` Transition function." %enddef %feature("docstring") OT::ODESolverImplementation::getTransitionFunction OT_ODESolver_getTransitionFunction_doc openturns-1.9/python/src/ODESolver_doc.i.in000066400000000000000000000004771307543307100207510ustar00rootroot00000000000000 %feature("docstring") OT::ODESolver OT_ODESolver_doc %feature("docstring") OT::ODESolver::solve OT_ODESolver_solve_doc %feature("docstring") OT::ODESolver::setTransitionFunction OT_ODESolver_setTransitionFunction_doc %feature("docstring") OT::ODESolver::getTransitionFunction OT_ODESolver_getTransitionFunction_doc openturns-1.9/python/src/OTexceptions.i000066400000000000000000000030261307543307100203320ustar00rootroot00000000000000// SWIG file OTexceptions.i %{ #include "openturns/Exception.hxx" %} namespace std { class exception { public: exception() throw() { } virtual ~exception() throw(); /** Returns a C-style character string describing the general cause * of the current error. */ virtual const char* what() const throw(); }; } %include exception.i %exception { try { $action } catch (OT::InvalidArgumentException & ex) { SWIG_exception(SWIG_TypeError,ex.__repr__().c_str()); } catch (OT::OutOfBoundException & ex) { SWIG_exception(SWIG_IndexError,ex.__repr__().c_str()); } catch (OT::Exception & ex) { SWIG_exception(SWIG_RuntimeError,ex.__repr__().c_str()); } catch (std::range_error & ex) { SWIG_exception(SWIG_IndexError,ex.what()); } catch (std::out_of_range & ex) { SWIG_exception(SWIG_IndexError,ex.what()); } catch (std::logic_error & ex) { // IDM : Glut Debian Squeeze with libstdc++ 4.4.5 SWIG_exception(SWIG_IndexError,ex.what()); } catch (std::exception & ex) { SWIG_exception(SWIG_RuntimeError,ex.what()); } } %pythoncode %{ class TestFailed: """TestFailed is used to raise an uniform exception in tests.""" __type = "TestFailed" def __init__(self, reason=""): self.reason = reason def type(self): return TestFailed.__type def what(self): return self.reason def __str__(self): return TestFailed.__type + ": " + self.reason def __lshift__(self, ch): self.reason += ch return self %} openturns-1.9/python/src/OTtypes.i000066400000000000000000000021771307543307100173230ustar00rootroot00000000000000// SWIG file OTtypes.i %module types %include std_string.i %include std_map.i %include std_complex.i %include openturns/OT.hxx %include openturns/OTtypes.hxx %include openturns/OTdebug.h %{ #include "openturns/OT.hxx" #include "openturns/PythonWrappingFunctions.hxx" %} %typemap(in) UnsignedInteger { $1 = OT::convert< OT::_PyInt_, OT::UnsignedInteger >($input); } %apply UnsignedInteger { OT::Unsigned64BitsInteger }; %typemap(in) Scalar { $1 = OT::convert< OT::_PyFloat_, OT::Scalar >($input); } %typemap(in) Complex { $1 = OT::convert< OT::_PyComplex_, OT::Complex >($input); } %typemap(out) Complex { $result = OT::convert< OT::Complex, OT::_PyComplex_ >($1); } %ignore *::clone() const; %ignore *::load(Advocate & adv); %ignore *::save(Advocate & adv) const; %ignore *::save(StorageManager & mgr, const String & label, bool fromStudy) const; %ignore *::save(StorageManager & mgr, const String & label) const; %ignore *::save(StorageManager & mgr, bool fromStudy) const; %ignore *::save(StorageManager & mgr) const; %define OTAutodoc(PythonClass) %feature("autodoc", "Proxy of C++ OT::" #PythonClass) OT::PythonClass; %enddef openturns-1.9/python/src/Object.i000066400000000000000000000030151307543307100171120ustar00rootroot00000000000000// SWIG file Object.i %ignore OT::Object::GetClassName; %{ #include "openturns/Object.hxx" %} %include Object_doc.i %include openturns/Object.hxx namespace OT{ %extend Object { Object(const Object & other) { return new OT::Object(other); } } } %pythoncode %{ import os def Object___getstate__(self): state = dict() study = Study() filename = Path.BuildTemporaryFileName('xmlfileXXXXXX') # assume xml support # should use BinaryStorageManager with open(filename, 'rb+') as infile: study.setStorageManager(XMLStorageManager(filename)) study.add('instance', self) study.save() infile.seek(0) state['xmldata'] = infile.read() os.remove(filename) return state Object.__getstate__ = Object___getstate__ def Object___setstate__(self, state): # call ctor to initialize underlying cxx obj # as it is instanciated from object.__new__ self.__init__() study = Study() filename = Path.BuildTemporaryFileName('xmlfileXXXXXX') with open(filename, 'rb+') as outfile: outfile.write(state['xmldata']) outfile.seek(0) study.setStorageManager(XMLStorageManager(filename)) study.load() study.fillObject('instance', self) os.remove(filename) Object.__setstate__ = Object___setstate__ def Object__repr_html_(self): lines = str(self).splitlines() html = '

    ' for i in range(len(lines)): html += lines[i]+'
    '+'\n' html += '

    ' return html Object._repr_html_ = Object__repr_html_ %} openturns-1.9/python/src/Object_doc.i.in000066400000000000000000000002521307543307100203440ustar00rootroot00000000000000%feature("docstring") OT::Object::getClassName "Accessor to the object's name. Returns ------- class_name : str The object class name (`object.__class__.__name__`)."openturns-1.9/python/src/OptimalLHSExperiment.i000066400000000000000000000004571307543307100217300ustar00rootroot00000000000000// SWIG file %{ #include "openturns/OptimalLHSExperiment.hxx" %} %include OptimalLHSExperiment_doc.i %include openturns/OptimalLHSExperiment.hxx namespace OT { %extend OptimalLHSExperiment { OptimalLHSExperiment(const OptimalLHSExperiment & other) { return new OT::OptimalLHSExperiment(other); } } } openturns-1.9/python/src/OptimalLHSExperiment_doc.i.in000066400000000000000000000031441307543307100231560ustar00rootroot00000000000000%define OT_OptimalLHS_doc "OptimalLHS base class. Notes ----- Perform the generation of optimal LHS designs." %enddef %feature("docstring") OT::OptimalLHSExperiment OT_OptimalLHS_doc // --------------------------------------------------------------------- %define OT_OptimalLHS_generate_doc "Generate an optimal design. Returns ------- value : :class:`~openturns.Sample` The optimal design" %enddef %feature("docstring") OT::OptimalLHSExperiment::generate OT_OptimalLHS_generate_doc // --------------------------------------------------------------------- %define OT_OptimalLHS_getResult_doc "Result accessor. Returns ------- value : :class:`~ot.LHSResult` Result of generation that contains the optimal design, some criteria and history" %enddef %feature("docstring") OT::OptimalLHSExperiment::getResult OT_OptimalLHS_getResult_doc // --------------------------------------------------------------------- %define OT_OptimalLHS_getlhs_doc "Return the LHS design. Returns ------- value : :class:`~openturns.LHSExperiment` Result the factory that builds initial design to be optimized" %enddef %feature("docstring") OT::OptimalLHSExperiment::getLHS OT_OptimalLHS_getlhs_doc // --------------------------------------------------------------------- %define OT_OptimalLHS_get_space_filling_doc "Return the space-filling criterion to be optimized. Returns ------- value : :class:`~ot.SpaceFilling` Criterion function to be optimized" %enddef %feature("docstring") OT::OptimalLHSExperiment::getSpaceFilling OT_OptimalLHS_get_space_filling_doc // --------------------------------------------------------------------- openturns-1.9/python/src/OptimizationAlgorithm.i000066400000000000000000000033401307543307100222420ustar00rootroot00000000000000// SWIG file OptimizationAlgorithm.i %{ #include "openturns/OptimizationAlgorithm.hxx" #include "openturns/PythonWrappingFunctions.hxx" static void OptimizationAlgorithm_ProgressCallback(OT::Scalar percent, void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer point(OT::convert< OT::Scalar, OT::_PyFloat_ >(percent)); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, point.get(), NULL )); } static OT::Bool OptimizationAlgorithm_StopCallback(void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, NULL )); return OT::convert< OT::_PyInt_, OT::UnsignedInteger >(result.get()); } %} %include OptimizationAlgorithm_doc.i %ignore OT::OptimizationAlgorithm::setProgressCallback(ProgressCallback callBack, void * data); %ignore OT::OptimizationAlgorithm::setStopCallback(StopCallback callBack, void * data); OTTypedInterfaceObjectHelper(OptimizationAlgorithm) %include openturns/OptimizationAlgorithm.hxx namespace OT{ %extend OptimizationAlgorithm { OptimizationAlgorithm(const OptimizationAlgorithm & other) { return new OT::OptimizationAlgorithm(other); } void setProgressCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setProgressCallback(&OptimizationAlgorithm_ProgressCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } void setStopCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setStopCallback(&OptimizationAlgorithm_StopCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } } } openturns-1.9/python/src/OptimizationAlgorithmImplementation.i000066400000000000000000000035611307543307100251550ustar00rootroot00000000000000// SWIG file OptimizationAlgorithmImplementation.i %{ #include "openturns/OptimizationAlgorithmImplementation.hxx" #include "openturns/PythonWrappingFunctions.hxx" static void OptimizationAlgorithmImplementation_ProgressCallback(OT::Scalar percent, void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer point(OT::convert< OT::Scalar, OT::_PyFloat_ >(percent)); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, point.get(), NULL )); } static OT::Bool OptimizationAlgorithmImplementation_StopCallback(void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, NULL )); return OT::convert< OT::_PyInt_, OT::UnsignedInteger >(result.get()); } %} %include OptimizationAlgorithmImplementation_doc.i %ignore OT::OptimizationAlgorithmImplementation::setProgressCallback(ProgressCallback callBack, void * data); %ignore OT::OptimizationAlgorithmImplementation::setStopCallback(StopCallback callBack, void * data); %include openturns/OptimizationAlgorithmImplementation.hxx namespace OT{ %extend OptimizationAlgorithmImplementation { OptimizationAlgorithmImplementation(const OptimizationAlgorithmImplementation & other) { return new OT::OptimizationAlgorithmImplementation(other); } void setProgressCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setProgressCallback(&OptimizationAlgorithmImplementation_ProgressCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } void setStopCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setStopCallback(&OptimizationAlgorithmImplementation_StopCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } } } openturns-1.9/python/src/OptimizationAlgorithmImplementation_doc.i.in000066400000000000000000000310111307543307100263760ustar00rootroot00000000000000%define OT_OptimizationAlgorithm_doc "Base class for optimization wrappers. Available constructors: OptimizationAlgorithm(*problem, verbose=False*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem. verbose : bool Let solver be more verbose. Notes ----- Class :class:`~openturns.OptimizationAlgorithm` is an abstract class, which has several implementations. The default implementation is :class:`~openturns.Cobyla`, but there are also :class:`~openturns.AbdoRackwitz`, :class:`~openturns.SQP` and :class:`~openturns.TNC`. Examples -------- Define an optimization problem to find the minimum of the Rosenbrock function: >>> import openturns as ot >>> rosenbrock = ot.SymbolicFunction(['x1', 'x2'], ['(1-x1)^2+100*(x2-x1^2)^2']) >>> problem = ot.OptimizationProblem(rosenbrock) >>> solver = ot.OptimizationAlgorithm(problem) >>> solver.setStartingPoint([0, 0]) >>> solver.setMaximumResidualError(1.e-3) >>> solver.setMaximumIterationNumber(100) >>> solver.run() >>> result = solver.getResult()" %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation OT_OptimizationAlgorithm_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_computeLagrangeMultipliers_doc "Compute the Lagrange multipliers of a problem at a given point. Parameters ---------- x : sequence of float Point at which the Lagrange multipliers are computed. Returns ------- lagrangeMultiplier : sequence of float Lagrange multipliers of the problem at the given point. Notes ----- The Lagrange multipliers :math:`\vect{\lambda}` are associated with the following Lagrangian formulation of the optimization problem: .. math:: \cL(\vect{x}, \vect{\lambda}_{eq}, \vect{\lambda}_{\ell}, \vect{\lambda}_{u}, \vect{\lambda}_{ineq}) = J(\vect{x}) + \Tr{\vect{\lambda}}_{eq} g(\vect{x}) + \Tr{\vect{\lambda}}_{\ell} (\vect{x}-\vect{\ell})^{+} + \Tr{\vect{\lambda}}_{u} (\vect{u}-\vect{x})^{+} + \Tr{\vect{\lambda}}_{ineq} h^{+}(\vect{x}) where :math:`\vect{\alpha}^{+}=(\max(0,\alpha_1),\hdots,\max(0,\alpha_n))`. The Lagrange multipliers are stored as :math:`(\vect{\lambda}_{eq}, \vect{\lambda}_{\ell}, \vect{\lambda}_{u}, \vect{\lambda}_{ineq})`, where: - :math:`\vect{\lambda}_{eq}` is of dimension 0 if there is no equality constraint, else of dimension the dimension of :math:`g(\vect{x})` ie the number of scalar equality constraints - :math:`\vect{\lambda}_{\ell}` and :math:`\vect{\lambda}_{u}` are of dimension 0 if there is no bound constraint, else of dimension of :math:`\vect{x}` - :math:`\vect{\lambda}_{eq}` is of dimension 0 if there is no inequality constraint, else of dimension the dimension of :math:`h(\vect{x})` ie the number of scalar inequality constraints The vector :math:`\vect{\lambda}` is solution of the following linear system: .. math:: \Tr{\vect{\lambda}}_{eq}\left[\dfrac{\partial g}{\partial\vect{x}}(\vect{x})\right]+ \Tr{\vect{\lambda}}_{\ell}\left[\dfrac{\partial (\vect{x}-\vect{\ell})^{+}}{\partial\vect{x}}(\vect{x})\right]+ \Tr{\vect{\lambda}}_{u}\left[\dfrac{\partial (\vect{u}-\vect{x})^{+}}{\partial\vect{x}}(\vect{x})\right]+ \Tr{\vect{\lambda}}_{ineq}\left[\dfrac{\partial h}{\partial\vect{x}}(\vect{x})\right]=-\dfrac{\partial J}{\partial\vect{x}}(\vect{x}) If there is no constraint of any kind, :math:`\vect{\lambda}` is of dimension 0, as well as if no constraint is active. " %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::computeLagrangeMultipliers OT_OptimizationAlgorithm_computeLagrangeMultipliers_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumAbsoluteError_doc "Accessor to maximum allowed absolute error. Returns ------- maximumAbsoluteError : float Maximum allowed absolute error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumAbsoluteError OT_OptimizationAlgorithm_getMaximumAbsoluteError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumConstraintError_doc "Accessor to maximum allowed constraint error. Returns ------- maximumConstraintError : float Maximum allowed constraint error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumConstraintError OT_OptimizationAlgorithm_getMaximumConstraintError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumIterationNumber_doc "Accessor to maximum allowed number of iterations. Returns ------- N : int Maximum allowed number of iterations." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumIterationNumber OT_OptimizationAlgorithm_getMaximumIterationNumber_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumEvaluationNumber_doc "Accessor to maximum allowed number of evaluations. Returns ------- N : int Maximum allowed number of evaluations." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumEvaluationNumber OT_OptimizationAlgorithm_getMaximumEvaluationNumber_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumRelativeError_doc "Accessor to maximum allowed relative error. Returns ------- maximumRelativeError : float Maximum allowed relative error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumRelativeError OT_OptimizationAlgorithm_getMaximumRelativeError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getMaximumResidualError_doc "Accessor to maximum allowed residual error. Returns ------- maximumResidualError : float Maximum allowed residual error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getMaximumResidualError OT_OptimizationAlgorithm_getMaximumResidualError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getProblem_doc "Accessor to optimization problem. Returns ------- problem : :class:`~openturns.OptimizationProblem` Optimization problem." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getProblem OT_OptimizationAlgorithm_getProblem_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getResult_doc "Accessor to optimization result. Returns ------- result : :class:`~openturns.OptimizationResult` Result class." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getResult OT_OptimizationAlgorithm_getResult_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getStartingPoint_doc "Accessor to starting point. Returns ------- startingPoint : :class:`~openturns.Point` Starting point." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getStartingPoint OT_OptimizationAlgorithm_getStartingPoint_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_run_doc "Launch the optimization." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::run OT_OptimizationAlgorithm_run_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumAbsoluteError_doc "Accessor to maximum allowed absolute error. Parameters ---------- maximumAbsoluteError : float Maximum allowed absolute error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumAbsoluteError OT_OptimizationAlgorithm_setMaximumAbsoluteError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumConstraintError_doc "Accessor to maximum allowed constraint error. Parameters ---------- maximumConstraintError : float Maximum allowed constraint error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumConstraintError OT_OptimizationAlgorithm_setMaximumConstraintError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumIterationNumber_doc "Accessor to maximum allowed number of iterations. Parameters ---------- N : int Maximum allowed number of iterations." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumIterationNumber OT_OptimizationAlgorithm_setMaximumIterationNumber_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumEvaluationNumber_doc "Accessor to maximum allowed number of evaluations. Parameters ---------- N : int Maximum allowed number of evaluations." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumEvaluationNumber OT_OptimizationAlgorithm_setMaximumEvaluationNumber_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumRelativeError_doc "Accessor to maximum allowed relative error. Parameters ---------- maximumRelativeError : float Maximum allowed relative error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumRelativeError OT_OptimizationAlgorithm_setMaximumRelativeError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setMaximumResidualError_doc "Accessor to maximum allowed residual error. Parameters ---------- maximumResidualError : float Maximum allowed residual error." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setMaximumResidualError OT_OptimizationAlgorithm_setMaximumResidualError_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setProblem_doc "Accessor to optimization problem. Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setProblem OT_OptimizationAlgorithm_setProblem_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setResult_doc "Accessor to optimization result. Parameters ---------- result : :class:`~openturns.OptimizationResult` Result class." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setResult OT_OptimizationAlgorithm_setResult_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setStartingPoint_doc "Accessor to starting point. Parameters ---------- startingPoint : :class:`~openturns.Point` Starting point." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setStartingPoint OT_OptimizationAlgorithm_setStartingPoint_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setVerbose_doc "Accessor to the verbosity flag. Parameters ---------- verbose : bool Verbosity flag state." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setVerbose OT_OptimizationAlgorithm_setVerbose_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_getVerbose_doc "Accessor to the verbosity flag. Returns ---------- verbose : bool Verbosity flag state." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::getVerbose OT_OptimizationAlgorithm_getVerbose_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setProgressCallback_doc "Set up a progress callback. Parameters ---------- callback : callable Takes a float as argument as percentage of progress. Notes ----- May not be implemented by all solvers, refer to the solver documentation. " %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setProgressCallback OT_OptimizationAlgorithm_setProgressCallback_doc // --------------------------------------------------------------------- %define OT_OptimizationAlgorithm_setStopCallback_doc "Set up a stop callback. Parameters ---------- callback : callable Returns an int deciding whether to stop or continue. Notes ----- May not be implemented by all solvers, refer to the solver documentation." %enddef %feature("docstring") OT::OptimizationAlgorithmImplementation::setStopCallback OT_OptimizationAlgorithm_setStopCallback_doc openturns-1.9/python/src/OptimizationAlgorithm_doc.i.in000066400000000000000000000056441307543307100235050ustar00rootroot00000000000000// OptimizationAlgorithm docstrings are defined in OptimizationAlgorithmImplementation_doc.i.in %feature("docstring") OT::OptimizationAlgorithm OT_OptimizationAlgorithm_doc %feature("docstring") OT::OptimizationAlgorithm::computeLagrangeMultipliers OT_OptimizationAlgorithm_computeLagrangeMultipliers_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumAbsoluteError OT_OptimizationAlgorithm_getMaximumAbsoluteError_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumConstraintError OT_OptimizationAlgorithm_getMaximumConstraintError_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumIterationNumber OT_OptimizationAlgorithm_getMaximumIterationNumber_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumEvaluationNumber OT_OptimizationAlgorithm_getMaximumEvaluationNumber_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumRelativeError OT_OptimizationAlgorithm_getMaximumRelativeError_doc %feature("docstring") OT::OptimizationAlgorithm::getMaximumResidualError OT_OptimizationAlgorithm_getMaximumResidualError_doc %feature("docstring") OT::OptimizationAlgorithm::getProblem OT_OptimizationAlgorithm_getProblem_doc %feature("docstring") OT::OptimizationAlgorithm::getResult OT_OptimizationAlgorithm_getResult_doc %feature("docstring") OT::OptimizationAlgorithm::getStartingPoint OT_OptimizationAlgorithm_getStartingPoint_doc %feature("docstring") OT::OptimizationAlgorithm::run OT_OptimizationAlgorithm_run_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumAbsoluteError OT_OptimizationAlgorithm_setMaximumAbsoluteError_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumConstraintError OT_OptimizationAlgorithm_setMaximumConstraintError_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumIterationNumber OT_OptimizationAlgorithm_setMaximumIterationNumber_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumEvaluationNumber OT_OptimizationAlgorithm_setMaximumEvaluationNumber_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumRelativeError OT_OptimizationAlgorithm_setMaximumRelativeError_doc %feature("docstring") OT::OptimizationAlgorithm::setMaximumResidualError OT_OptimizationAlgorithm_setMaximumResidualError_doc %feature("docstring") OT::OptimizationAlgorithm::setProblem OT_OptimizationAlgorithm_setProblem_doc %feature("docstring") OT::OptimizationAlgorithm::setResult OT_OptimizationAlgorithm_setResult_doc %feature("docstring") OT::OptimizationAlgorithm::setStartingPoint OT_OptimizationAlgorithm_setStartingPoint_doc %feature("docstring") OT::OptimizationAlgorithm::setVerbose OT_OptimizationAlgorithm_setVerbose_doc %feature("docstring") OT::OptimizationAlgorithm::getVerbose OT_OptimizationAlgorithm_getVerbose_doc %feature("docstring") OT::OptimizationAlgorithm::setProgressCallback OT_OptimizationAlgorithm_setProgressCallback_doc %feature("docstring") OT::OptimizationAlgorithm::setStopCallback OT_OptimizationAlgorithm_setStopCallback_doc openturns-1.9/python/src/OptimizationProblem.i000066400000000000000000000005601307543307100217150ustar00rootroot00000000000000// SWIG file OptimizationProblem.i %{ #include "openturns/OptimizationProblem.hxx" %} %include OptimizationProblem_doc.i OTTypedInterfaceObjectHelper(OptimizationProblem) %include openturns/OptimizationProblem.hxx namespace OT{ %extend OptimizationProblem { OptimizationProblem(const OptimizationProblem & other) { return new OT::OptimizationProblem(other); } } } openturns-1.9/python/src/OptimizationProblemImplementation.i000066400000000000000000000006551307543307100246300ustar00rootroot00000000000000// SWIG file OptimizationProblemImplementation.i %{ #include "openturns/OptimizationProblemImplementation.hxx" %} %include OptimizationProblemImplementation_doc.i %include openturns/OptimizationProblemImplementation.hxx namespace OT{ %extend OptimizationProblemImplementation { OptimizationProblemImplementation(const OptimizationProblemImplementation & other) { return new OT::OptimizationProblemImplementation(other); } } } openturns-1.9/python/src/OptimizationProblemImplementation_doc.i.in000066400000000000000000000226411307543307100260610ustar00rootroot00000000000000%define OT_OptimizationProblem_doc "Base class to define an optimization problem. Available constructors: OptimizationProblem() OptimizationProblem(*objective*) OptimizationProblem(*objective, equality, inequality, bounds*) OptimizationProblem(*level, value*) Parameters ---------- objective : :class:`~openturns.Function` Objective function. Additional constraints and bounds must always be consistent with the objective input dimension. equality : :class:`~openturns.Function` Equality constraints. inequality : :class:`~openturns.Function` Inequality constraints. bounds : :class:`~openturns.Interval` Bounds. level : :class:`~openturns.Function` Level function. value : float Level value. Notes ----- The first form represents a general optimization problem: .. math:: \min_{x\in B} f(x) \\ g(x) = 0 \\ h(x) \ge 0 where *B* is problem's bounds, *f* is the objective function, *g* are equality constraints, and *h* are inequality constraints. The second form represents a nearest point problem: .. math:: \min_{x} ||x|| \\ g(x) = v Examples -------- Define an optimization problem to find the minimum of the Rosenbrock function: >>> import openturns as ot >>> rosenbrock = ot.SymbolicFunction(['x1', 'x2'], ['(1-x1)^2+100*(x2-x1^2)^2']) >>> problem = ot.OptimizationProblem(rosenbrock) Define an optimization problem to find the point with minimum norm which satisfies :math:`x1+2*x2-3*x3+4*x4=3`. >>> import openturns as ot >>> levelFunction = ot.SymbolicFunction( ... ['x1', 'x2', 'x3', 'x4'], ['x1+2*x2-3*x3+4*x4']) >>> problem = ot.OptimizationProblem(levelFunction, 3.0)" %enddef %feature("docstring") OT::OptimizationProblemImplementation OT_OptimizationProblem_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getBounds_doc "Accessor to bounds. Returns ------- bounds : :class:`~openturns.Interval` Problem bounds." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getBounds OT_OptimizationProblem_getBounds_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getDimension_doc "Accessor to spatial dimension. Returns ------- dimension : int Input dimension of objective function." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getDimension OT_OptimizationProblem_getDimension_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getEqualityConstraint_doc "Accessor to equality constraints. Returns ------- equality : :class:`~openturns.Function` Describe equality constraints." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getEqualityConstraint OT_OptimizationProblem_getEqualityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getInequalityConstraint_doc "Accessor to inequality constraints. Returns ------- inequality : :class:`~openturns.Function` Describe inequality constraints." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getInequalityConstraint OT_OptimizationProblem_getInequalityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getLevelFunction_doc "Accessor to level function. Returns ------- level : :class:`~openturns.Function` Level function." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getLevelFunction OT_OptimizationProblem_getLevelFunction_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getLevelValue_doc "Accessor to level value. Returns ------- value : float Level value." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getLevelValue OT_OptimizationProblem_getLevelValue_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_getObjective_doc "Accessor to objective function. Returns ------- objective : :class:`~openturns.Function` Objective function." %enddef %feature("docstring") OT::OptimizationProblemImplementation::getObjective OT_OptimizationProblem_getObjective_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_hasBounds_doc "Test whether bounds had been specified. Returns ------- value : bool *True* if bounds had been set for this problem, *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::hasBounds OT_OptimizationProblem_hasBounds_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_hasEqualityConstraint_doc "Test whether equality constraints had been specified. Returns ------- value : bool *True* if equality constraints had been set for this problem, *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::hasEqualityConstraint OT_OptimizationProblem_hasEqualityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_hasInequalityConstraint_doc "Test whether inequality constraints had been specified. Returns ------- value : bool *True* if inequality constraints had been set for this problem, *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::hasInequalityConstraint OT_OptimizationProblem_hasInequalityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_hasLevelFunction_doc "Test whether level function had been specified. Returns ------- value : bool *True* if level function had been set for this problem, *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::hasLevelFunction OT_OptimizationProblem_hasLevelFunction_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_hasMultipleObjective_doc "Test whether objective function is a scalar or vector function. Returns ------- value : bool *False* if objective function is scalar, *True* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::hasMultipleObjective OT_OptimizationProblem_hasMultipleObjective_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_isMinimization_doc "Test whether this is a minimization or maximization problem. Returns ------- value : bool *True* if this is a minimization problem (default), *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::isMinimization OT_OptimizationProblem_isMinimization_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setBounds_doc "Accessor to bounds. Parameters ---------- bounds : :class:`~openturns.Interval` Problem bounds." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setBounds OT_OptimizationProblem_setBounds_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setEqualityConstraint_doc "Accessor to equality constraints. Parameters ---------- equalityConstraint : :class:`~openturns.Function` Equality constraints." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setEqualityConstraint OT_OptimizationProblem_setEqualityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setInequalityConstraint_doc "Accessor to inequality constraints. Parameters ---------- inequalityConstraint : :class:`~openturns.Function` Inequality constraints." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setInequalityConstraint OT_OptimizationProblem_setInequalityConstraint_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setLevelFunction_doc "Accessor to level function. Parameters ---------- levelFunction : :class:`~openturns.Function` Level function." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setLevelFunction OT_OptimizationProblem_setLevelFunction_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setLevelValue_doc "Accessor to level value. Parameters ---------- levelValue : float Level value." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setLevelValue OT_OptimizationProblem_setLevelValue_doc %define OT_OptimizationProblem_setMinimization_doc "Tell whether this is a minimization or maximization problem. Parameters ---------- minimization : bool *True* if this is a minimization problem, *False* otherwise." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setMinimization OT_OptimizationProblem_setMinimization_doc // --------------------------------------------------------------------- %define OT_OptimizationProblem_setObjective_doc "Accessor to objective function. Parameters ---------- objectiveFunction : :class:`~openturns.Function` Objective function. Notes ----- Constraints and bounds are cleared if the objective has a different input dimension in order to keep the problem valid at all time." %enddef %feature("docstring") OT::OptimizationProblemImplementation::setObjective OT_OptimizationProblem_setObjective_doc openturns-1.9/python/src/OptimizationProblem_doc.i.in000066400000000000000000000044251307543307100231530ustar00rootroot00000000000000// OptimizationProblem docstrings are defined in OptimizationProblemImplementation_doc.i.in %feature("docstring") OT::OptimizationProblem OT_OptimizationProblem_doc %feature("docstring") OT::OptimizationProblem::getBounds OT_OptimizationProblem_getBounds_doc %feature("docstring") OT::OptimizationProblem::getDimension OT_OptimizationProblem_getDimension_doc %feature("docstring") OT::OptimizationProblem::getEqualityConstraint OT_OptimizationProblem_getEqualityConstraint_doc %feature("docstring") OT::OptimizationProblem::getInequalityConstraint OT_OptimizationProblem_getInequalityConstraint_doc %feature("docstring") OT::OptimizationProblem::getLevelFunction OT_OptimizationProblem_getLevelFunction_doc %feature("docstring") OT::OptimizationProblem::getLevelValue OT_OptimizationProblem_getLevelValue_doc %feature("docstring") OT::OptimizationProblem::getObjective OT_OptimizationProblem_getObjective_doc %feature("docstring") OT::OptimizationProblem::hasBounds OT_OptimizationProblem_hasBounds_doc %feature("docstring") OT::OptimizationProblem::hasEqualityConstraint OT_OptimizationProblem_hasEqualityConstraint_doc %feature("docstring") OT::OptimizationProblem::hasInequalityConstraint OT_OptimizationProblem_hasInequalityConstraint_doc %feature("docstring") OT::OptimizationProblem::hasLevelFunction OT_OptimizationProblem_hasLevelFunction_doc %feature("docstring") OT::OptimizationProblem::hasMultipleObjective OT_OptimizationProblem_hasMultipleObjective_doc %feature("docstring") OT::OptimizationProblem::isMinimization OT_OptimizationProblem_isMinimization_doc %feature("docstring") OT::OptimizationProblem::setBounds OT_OptimizationProblem_setBounds_doc %feature("docstring") OT::OptimizationProblem::setEqualityConstraint OT_OptimizationProblem_setEqualityConstraint_doc %feature("docstring") OT::OptimizationProblem::setInequalityConstraint OT_OptimizationProblem_setInequalityConstraint_doc %feature("docstring") OT::OptimizationProblem::setLevelFunction OT_OptimizationProblem_setLevelFunction_doc %feature("docstring") OT::OptimizationProblem::setLevelValue OT_OptimizationProblem_setLevelValue_doc %feature("docstring") OT::OptimizationProblem::setMinimization OT_OptimizationProblem_setMinimization_doc %feature("docstring") OT::OptimizationProblem::setObjective OT_OptimizationProblem_setObjective_doc openturns-1.9/python/src/OptimizationResult.i000066400000000000000000000004651307543307100215770ustar00rootroot00000000000000// SWIG file OptimizationResult.i %{ #include "openturns/OptimizationResult.hxx" %} %include OptimizationResult_doc.i %include openturns/OptimizationResult.hxx namespace OT{ %extend OptimizationResult { OptimizationResult(const OptimizationResult & other) { return new OT::OptimizationResult(other); } } } openturns-1.9/python/src/OptimizationResult_doc.i.in000066400000000000000000000170211307543307100230250ustar00rootroot00000000000000%feature("docstring") OT::OptimizationResult "Optimization result. Returned by optimization solvers, see :class:`~openturns.OptimizationAlgorithm`. Available constructors: OptimizationResult(*optimalPoint, optimalValue, iterationNumber, absoluteError, relativeError, residualError, constraintError*) Parameters ---------- optimalPoint : sequence of float Optimal point. optimalValue : sequence of float Value at optimal point. iterationNumber : int Number of iterations. absoluteError : float Parameters for this solver. relativeError : float Relative error. residualError : float Residual error. constraintError : float Constraint error. problem : :class:`~openturns.OptimizationProblem` Associated problem." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getAbsoluteError "Accessor to the absolute error. Returns ------- absoluteError : float Absolute error, defined by :math:`\epsilon^a_n=\|\vect{x}_{n+1}-\vect{x}_n\|_{\infty}` where :math:`\vect{x}_{n+1}` and :math:`\vect{x}_n` are two consecutive approximations of the optimum." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getAbsoluteErrorHistory "Accessor to the evolution of the absolute error. Returns ------- absoluteErrorHistory : :class:`~openturns.Sample` Value of the absolute error at each iteration of the solver." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getConstraintError "Accessor to the constraint error. Returns ------- constraintError : float Constraint error, defined by :math:`\gamma_n=\|g(\vect{x}_n)\|_{\infty}` where :math:`\vect{x}_n` is the current approximation of the optimum and :math:`g` is the function that gather all the equality and inequality constraints." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getConstraintErrorHistory "Accessor to the evolution of the constraint error. Returns ------- constraintErrorHistory : :class:`~openturns.Sample` Value of the constrainte error at each iteration of the solver." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::setIterationNumber "Accessor to the number of iterations. Parameters ---------- iterationNumber : int Number of evaluations." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getIterationNumber "Accessor to the number of iterations. Returns ------- iterationNumber : int Number of evaluations." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getRelativeError "Accessor to the relative error. Returns ------- relativeError : float Relative error, defined by :math:`\epsilon^r_n=\epsilon^a_n/\|\vect{x}_{n+1}\|_{\infty}` if :math:`\|\vect{x}_{n+1}\|_{\infty}\neq 0`, else :math:`\epsilon^r_n=-1`." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getRelativeErrorHistory "Accessor to the evolution of the relative error. Returns ------- relativeErrorHistory : :class:`~openturns.Sample` Value of the relative error at each iteration of the solver." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getResidualError "Accessor to the residual error. Returns ------- residualError : float Residual error, defined by :math:`\eta^r_n=\|\nabla\cL{\vect{x}_n}\|_{\infty}` where :math:`\vect{x}_n` is the current approximation of the optimum and :math:`\cL` is the Lagrangian of the problem." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getResidualErrorHistory "Accessor to the evolution of the residual error. Returns ------- residualErrorHistory : :class:`~openturns.Sample` Value of the residual error at each iteration of the solver." // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::setOptimalPoint "Accessor to the optimal point. Parameters ---------- optimalPoint : :class:`~openturns.Point` Optimal point" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getOptimalPoint "Accessor to the optimal point. Returns ------- optimalPoint : :class:`~openturns.Point` Optimal point" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::setLagrangeMultipliers "Accessor to the Lagrange multipliers. Parameters ---------- multipliers : :class:`~openturns.Point` Lagrange multipliers. Notes ----- See :class:`~openturns.OptimizationAlgorithm` for the details on how the multipliers are defined and stored in the result. " // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getLagrangeMultipliers "Accessor to the Lagrange multipliers. Returns ------- multipliers : :class:`~openturns.Point` Lagrange multipliers. Notes ----- See :class:`~openturns.OptimizationAlgorithm` for the details on how the multipliers are defined and stored in the result. " // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::setOptimalValue "Accessor to the optimal value. Parameters ---------- optimalValue : :class:`~openturns.Point` Value at the optimal point" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getOptimalValue "Accessor to the optimal value. Returns ------- optimalValue : :class:`~openturns.Point` Value at the optimal point" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` Input points used by the solver" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` Output points used by the solver" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::setProblem "Accessor to the underlying optimization problem. Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Problem corresponding to the result" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::getProblem "Accessor to the underlying optimization problem. Returns ------- problem : :class:`~openturns.OptimizationProblem` Problem corresponding to the result" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::drawErrorHistory "Draw the convergence criteria history. Returns ------- graph : :class:`~openturns.Graph` Convergence criteria history graph" // --------------------------------------------------------------------- %feature("docstring") OT::OptimizationResult::drawOptimalValueHistory "Draw the optimal value history. Returns ------- graph : :class:`~openturns.Graph` Optimal value history graph" openturns-1.9/python/src/OrderStatisticsMarginalChecker.i000066400000000000000000000006261307543307100237770ustar00rootroot00000000000000// SWIG file OrderStatisticsMarginalChecker.i %{ #include "openturns/OrderStatisticsMarginalChecker.hxx" %} %include OrderStatisticsMarginalChecker_doc.i %include openturns/OrderStatisticsMarginalChecker.hxx namespace OT { %extend OrderStatisticsMarginalChecker { OrderStatisticsMarginalChecker(const OrderStatisticsMarginalChecker & other) { return new OT::OrderStatisticsMarginalChecker(other); } } } openturns-1.9/python/src/OrderStatisticsMarginalChecker_doc.i.in000066400000000000000000000054501307543307100252310ustar00rootroot00000000000000%feature("docstring") OT::OrderStatisticsMarginalChecker "Compatibility tests of marginals with respect to the order statistics constraint. Parameters ---------- coll : sequence of :class:`~openturns.Distribution` The marginals :math:`(F_1, \dots, F_n)` which are tested with respect to the order :math:`F_1 < \dots < F_n` in the context of the maximum order statistics distribution. Notes ----- Three tests are performed. We note :math:`[a_i,b_i]` the range of :math:`X_i`. The tests are : - Test 1 checks that :math:`a_i \leq a_{i+1}` and :math:`b_i \leq b_{i+1}` for all :math:`i`. - Test 2 discretizes :math:`[0,1]` with :math:`\{\dfrac{1}{2n},\dfrac{3}{2n}, \dots,\dfrac{2n-1}{2n}\} = \{q_1, \dots, q_{2n-1} \}` where :math:`n` is defined in the :class:`~openturns.ResourceMap` with `OSMC-OptimizationEpsilon`. By default, :math:`n=100`. Test 2 checks that: .. math:: F_k^{-1}(q_j) \geq F_{k-1}^{-1}(q_j)+\epsilon, \quad 1 \leq j \leq d where :math:`\epsilon` is defined in the :class:`~openturns.ResourceMap` with `OSMC-QuantileIteration`. By default, :math:`\epsilon=10^{-7}`. - Test 3 checks that: .. math:: \min_{q \in [q_{j-1}, q_j]} \{F_k^{-1}(q) - F_{k-1}^{-1}(q) \} \geq \epsilon using the TNC algorithm. Examples -------- Create the test checker: >>> import openturns as ot >>> coll = [ot.Uniform(-1.0, 1.0), ot.Uniform(-0.5, 1.5)] >>> testChecker = ot.OrderStatisticsMarginalChecker(coll) Check the compatibility: >>> compatibilityResult = testChecker.isCompatible()" // --------------------------------------------------------------------- %feature("docstring") OT::OrderStatisticsMarginalChecker::isCompatible "Result of the compatibility tests. Returns ------- resCompatibility : bool The final result of the 3 compatibility tests with respect to the order constraint." // --------------------------------------------------------------------- %feature("docstring") OT::OrderStatisticsMarginalChecker::check "Give the reasons of uncompatibility of the margins if any. Notes ----- This method throws an exception in case of compatibility problem with a message indicating the first compatibility problem arised. " // --------------------------------------------------------------------- %feature("docstring") OT::OrderStatisticsMarginalChecker::buildPartition "Accessor to the partition in independent marginal sets if any. Returns ------- indepMarginals : :class:`~openturns.Indices` Indicates the indices that build some independent sets of marginals. If we note :math:`indepMarginals = [i_1, i_2]` then the sub random vectors :math:`(X_1, \dots, X_{i_1})`, :math:`(X_{i_1+1}, \dots, X_{i_2})` and :math:`(X_{i_2+1}, \dots, X_n)` are independent. This information is automatically used by OpenTURNS to build the appropriated maximum entropy order statistics distribution." openturns-1.9/python/src/OrdinalSumCopula.i000066400000000000000000000011411307543307100211230ustar00rootroot00000000000000// SWIG file OrdinalSumCopula.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/OrdinalSumCopula.hxx" %} %include OrdinalSumCopula_doc.i %include openturns/OrdinalSumCopula.hxx namespace OT { %extend OrdinalSumCopula { OrdinalSumCopula(PyObject * pyObj, const Point & bounds) { OT::Pointer > p_coll = OT::buildCollectionFromPySequence( pyObj ); return new OT::OrdinalSumCopula( *p_coll, bounds ); } OrdinalSumCopula(const OrdinalSumCopula & other) { return new OT::OrdinalSumCopula(other); } } // OrdinalSumCopula } // OT openturns-1.9/python/src/OrdinalSumCopula_doc.i.in000066400000000000000000000053561307543307100223710ustar00rootroot00000000000000%feature("docstring") OT::OrdinalSumCopula "Copula built as an ordinal sum of copulas. Available constructors: OrdinalSumCopula(*collCopula, bounds*) Parameters ---------- collCopula : list of :class:`~openturns.Distribution` The collection :math:`(C_1, \dots, C_n)` of :math:`n` copulas of dimension :math:`d`. bounds : sequence of float, of size :math:`n-1` and :math:`0 \leq \alpha_1 \leq \dots \leq \alpha_{n-1} \leq 1` The bounds :math:`\alpha_i` are such that the copula :math:`C_i` is squeezed into :math:`[\alpha_i, \alpha_{i+1}]`. Notes ----- The ordinal sum of the :math:`n` copulas :math:`(C_1, \dots, C_n)`, each one being squeezed into the interval :math:`[\alpha_i, \alpha_{i+1}], i=1 \dots n-1`, writes: .. math:: C(\vect{u}) = \left\{ \begin{array}{ll} \alpha_i+C_i \left( \dfrac{u_1-\alpha_i}{\alpha_{i+1} - \alpha_i}, \dot, \dfrac{u_d-\alpha_i}{\alpha_{i+1} - \alpha_i} \right) & \mbox{ if } \vect{u} \in [\alpha_i, \alpha_{i+1}[^d \\ M_d(\vect{u}) & \mbox{ else } \end{array} \right. with :math:`M_d` the Min-copula: :math:`M_d(\vect{u}) = \min_{k=1 \dots d} u_k` and where, for convenience, we noted :math:`\alpha_0=0` and :math:`\alpha_n=1`. Note that if :math:`\alpha_i=\alpha_{i+1}` then the copula :math:`C_{i+1}` is erased from the list, for :math:`i=0 \dots n-1`. See also -------- Copula Examples -------- Create a distribution: >>> import openturns as ot >>> ordinalSumCop = ot.OrdinalSumCopula([ot.GumbelCopula(2), ot.NormalCopula(2)], [0.3])" // --------------------------------------------------------------------- %feature("docstring") OT::OrdinalSumCopula::getCopulaCollection "Accessor to the collection of copulas. Returns ------- copColl : list of :class:`~openturns.Copula` with the same dimension List of copulas that build the ordinal sum." // --------------------------------------------------------------------- %feature("docstring") OT::OrdinalSumCopula::getBounds "Accessor to the collection of bounds. Returns ------- bounds : :class:`~openturns.Point` Bounds defining the intervals on which the copulas of the collection are squeezed." // --------------------------------------------------------------------- %feature("docstring") OT::OrdinalSumCopula::setCopulaCollection "Accessor to the collection of copulas. Parameters ---------- copColl : list of :class:`~openturns.Copula` with the same dimension List of copulas that build the ordinal sum." // --------------------------------------------------------------------- %feature("docstring") OT::OrdinalSumCopula::setBounds "Accessor to the collection of bounds. Parameters ---------- bounds : sequence of float Bounds defining the intervals on whch the copulas of the collection are squeezed." openturns-1.9/python/src/OrthogonalBasis.i000066400000000000000000000005661307543307100210120ustar00rootroot00000000000000// SWIG file OrthogonalBasis.i %{ #include "openturns/OrthogonalBasis.hxx" %} %include OrthogonalBasis_doc.i OTTypedInterfaceObjectImplementationHelper(OrthogonalBasis, OrthogonalFunctionFactory) %include openturns/OrthogonalBasis.hxx namespace OT{ %extend OrthogonalBasis { OrthogonalBasis(const OrthogonalBasis & other) { return new OT::OrthogonalBasis(other); } } } openturns-1.9/python/src/OrthogonalBasis_doc.i.in000066400000000000000000000006431307543307100222400ustar00rootroot00000000000000// OrthogonalBasis docstrings are defined in OrthogonalFunctionFactory_doc.i.in %feature("docstring") OT::OrthogonalBasis OT_OrthogonalBasis_doc %feature("docstring") OT::OrthogonalBasis::build OT_OrthogonalBasis_build_doc %feature("docstring") OT::OrthogonalBasis::getEnumerateFunction OT_OrthogonalBasis_getEnumerateFunction_doc %feature("docstring") OT::OrthogonalBasis::getMeasure OT_OrthogonalBasis_getMeasure_docopenturns-1.9/python/src/OrthogonalDirection.i000066400000000000000000000004751307543307100216700ustar00rootroot00000000000000// SWIG file OrthogonalDirection.i %{ #include "openturns/OrthogonalDirection.hxx" %} %include OrthogonalDirection_doc.i %include openturns/OrthogonalDirection.hxx namespace OT{ %extend OrthogonalDirection { OrthogonalDirection(const OrthogonalDirection & other) { return new OT::OrthogonalDirection(other); } } } openturns-1.9/python/src/OrthogonalDirection_doc.i.in000066400000000000000000000030131307543307100231110ustar00rootroot00000000000000%feature("docstring") OT::OrthogonalDirection "Sampling following the orthogonal direction strategy. Available constructor: OrthogonalDirection() OrthogonalDirection(*dimension, k*) Parameters ---------- dimension : integer The dimension of the standard space. By default, :math:`dimension = 0` but automatically updated by the calling class. k : int The number of elements in the linear combinations. By default, :math:`k = 1` but automatically updated by the calling class. See also -------- RandomDirection Notes ----- This strategy is parameterized by :math:`k \in \{1, \ldots, n\}`, where :math:`n` is the dimension of the input random vector :math:`\vect{X}`. We generate one direct orthonormalized basis :math:`(\vect{e}_1, \ldots, \vect{e}_n)` uniformly distributed in the set of direct orthonormal bases. We consider all the normalized linear combinations of :math:`k` vectors chosen within the :math:`n` vectors of the basis, where the coefficients of the linear combinations are in :math:`\{+1, -1\}`. This generates :math:`\binom{k}{n} 2^k` new vectors :math:`\vect{v}_i`. We sample according to all the directions defined by the vectors :math:`\vect{v}_i`. If :math:`k = 1`, we consider all the axes of the standard space." // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalDirection::generate "Generate the sample. Returns ------- sample : :class:`~openturns.Sample` The sample generated according to the orthogonal direction strategy." openturns-1.9/python/src/OrthogonalFunctionFactory.i000066400000000000000000000005551307543307100230640ustar00rootroot00000000000000// SWIG file OrthogonalFunctionFactory.i %{ #include "openturns/OrthogonalFunctionFactory.hxx" %} %include OrthogonalFunctionFactory_doc.i %include openturns/OrthogonalFunctionFactory.hxx namespace OT{ %extend OrthogonalFunctionFactory { OrthogonalFunctionFactory(const OrthogonalFunctionFactory & other) { return new OT::OrthogonalFunctionFactory(other); } } } openturns-1.9/python/src/OrthogonalFunctionFactory_doc.i.in000066400000000000000000000061621307543307100243160ustar00rootroot00000000000000%define OT_OrthogonalBasis_doc "Orthogonal basis. Notes ----- OrthogonalBasis is the interface class of the OrthogonalFunctionFactory implementation, which is an :class:`~openturns.OrthogonalProductPolynomialFactory` in the particular case of polynomial chaos expansion. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> # Create an orthogonal basis >>> polynomialCollection = [ot.LegendreFactory(), ot.LaguerreFactory(), ot.HermiteFactory()] >>> productBasis = ot.OrthogonalBasis(ot.OrthogonalProductPolynomialFactory(polynomialCollection))" %enddef %feature("docstring") OT::OrthogonalFunctionFactory OT_OrthogonalBasis_doc // --------------------------------------------------------------------- %define OT_OrthogonalBasis_build_doc "Get the term of the basis collection at a given index. Parameters ---------- index : int Indicates the term of the basis which must be constructed. In other words, *index* is used by a bijection from :math:`\Nset` to :math:`\Nset^d` (with :math:`d` the dimension of the basis). The bijection is detailed in :class:`~openturns.EnumerateFunction`. Returns ------- function : :class:`~openturns.Function` The term of the basis collection at the index *index*. Examples -------- >>> import openturns as ot >>> # Create an orthogonal basis >>> polynomialCollection = [ot.LegendreFactory(), ot.LaguerreFactory(), ot.HermiteFactory()] >>> productBasis = ot.OrthogonalBasis(ot.OrthogonalProductPolynomialFactory(polynomialCollection)) >>> termBasis = productBasis.build(4) >>> print(termBasis.getEvaluation()) -1.11803 + 3.3541 * x0^2 >>> termBasis = productBasis.build(5) >>> print(termBasis.getEvaluation()) (1.73205 * x0) * (-1 + x1)" %enddef %feature("docstring") OT::OrthogonalFunctionFactory::build OT_OrthogonalBasis_build_doc // --------------------------------------------------------------------- %define OT_OrthogonalBasis_getEnumerateFunction_doc "Return the enumerate function. Returns ------- enumerateFunction : :class:`~openturns.EnumerateFunction` Enumerate function that translates unidimensional indices into multidimensional indices." %enddef %feature("docstring") OT::OrthogonalFunctionFactory::getEnumerateFunction OT_OrthogonalBasis_getEnumerateFunction_doc // --------------------------------------------------------------------- %define OT_OrthogonalBasis_getMeasure_doc "Get the measure upon which the basis is orthogonal. Returns ------- measure : :class:`~openturns.Distribution` Measure upon which the basis is orthogonal. Examples -------- >>> import openturns as ot >>> # Create an orthogonal basis >>> polynomialCollection = [ot.LegendreFactory(), ot.LaguerreFactory(), ot.HermiteFactory()] >>> productBasis = ot.OrthogonalBasis(ot.OrthogonalProductPolynomialFactory(polynomialCollection)) >>> measure = productBasis.getMeasure() >>> print(measure.getMarginal(0)) Uniform(a = -1, b = 1) >>> print(measure.getMarginal(1)) Gamma(k = 1, lambda = 1, gamma = 0) >>> print(measure.getMarginal(2)) Normal(mu = 0, sigma = 1)" %enddef %feature("docstring") OT::OrthogonalFunctionFactory::getMeasure OT_OrthogonalBasis_getMeasure_docopenturns-1.9/python/src/OrthogonalProductFunctionFactory.i000066400000000000000000000006461307543307100244260ustar00rootroot00000000000000// SWIG file OrthogonalProductFunctionFactory.i %{ #include "openturns/OrthogonalProductFunctionFactory.hxx" %} %include OrthogonalProductFunctionFactory_doc.i %include openturns/OrthogonalProductFunctionFactory.hxx namespace OT{ %extend OrthogonalProductFunctionFactory { OrthogonalProductFunctionFactory(const OrthogonalProductFunctionFactory & other) { return new OT::OrthogonalProductFunctionFactory(other); } } } openturns-1.9/python/src/OrthogonalProductFunctionFactory_doc.i.in000066400000000000000000000041001307543307100256450ustar00rootroot00000000000000%feature("docstring") OT::OrthogonalProductFunctionFactory "Base class for orthogonal multivariate functions. Available constructors: OrthogonalProductFunctionFactory(*functions*) OrthogonalProductFunctionFactory(*functions, enumerateFunction*) Parameters ---------- functions : list of :class:`~openturns.OrthogonalUniVariateFunctionFamily` List of orthogonal univariate function factories with the same dimension as the orthogonal basis. enumerateFunction : :class:`~openturns.EnumerateFunction` Associates to an integer its multi-index image in the :math:`\Nset^d` dimension, which is the dimension of the basis. This multi-index represents the collection of degrees of the univariate polynomials. Notes ----- OrthogonalProductFunctionFactory is a particular case of implementation of the :class:`~openturns.OrthogonalBasis` in the case of polynomial chaos expansion. It provides to the OrthogonalBasis the persistent types of the univariate orthogonal polynomials (e.g. Hermite, Legendre, Laguerre and Jacobi) needed to determine the distribution measure of projection of the input variable. Let's note that the exact hessian and gradient have been implemented for the product of polynomials. To facilitate the construction of the basis it is recommanded to use the class :class:`~openturns.StandardDistributionPolynomialFactory`. See also -------- OrthogonalProductPolynomialFactory Examples -------- >>> import openturns as ot >>> from math import pi >>> funcColl = [ot.HaarWaveletFactory(), ot.FourierSeriesFactory()] >>> dim = len(funcColl) >>> enumerateFunction = ot.LinearEnumerateFunction(dim) >>> productBasis = ot.OrthogonalProductFunctionFactory(funcColl, enumerateFunction)" // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalProductFunctionFactory::getFunctionFamilyCollection "Get the collection of univariate orthogonal function families. Returns ------- polynomialFamily : list of :class:`~openturns.OrthogonalUniVariateFunctionFamily` List of orthogonal univariate function families." openturns-1.9/python/src/OrthogonalProductPolynomialFactory.i000066400000000000000000000016471307543307100247660ustar00rootroot00000000000000// SWIG file OrthogonalProductPolynomialFactory.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Sample OT::OrthogonalProductPolynomialFactory::getNodesAndWeights(const Indices & degrees, OT::Point & weights) const; %{ #include "openturns/OrthogonalProductPolynomialFactory.hxx" %} %include OrthogonalProductPolynomialFactory_doc.i %include openturns/OrthogonalProductPolynomialFactory.hxx namespace OT{ %extend OrthogonalProductPolynomialFactory { OrthogonalProductPolynomialFactory(const OrthogonalProductPolynomialFactory & other) { return new OT::OrthogonalProductPolynomialFactory(other); } } } %clear OT::Point & weights; openturns-1.9/python/src/OrthogonalProductPolynomialFactory_doc.i.in000066400000000000000000000102201307543307100262030ustar00rootroot00000000000000%feature("docstring") OT::OrthogonalProductPolynomialFactory "Base class for orthogonal multivariate polynomials. Available constructors: OrthogonalProductPolynomialFactory(*polynomials*) OrthogonalProductPolynomialFactory(*polynomials, enumerateFunction*) Parameters ---------- polynomials : list of :class:`~openturns.OrthogonalUniVariatePolynomialFamily` List of orthogonal univariate polynomials factories with the same dimension as the orthogonal basis. enumerateFunction : :class:`~openturns.EnumerateFunction` Associates to an integer its multi-index image in the :math:`\Nset^d` dimension, which is the dimension of the basis. This multi-index represents the collection of degrees of the univariate polynomials. Notes ----- OrthogonalProductPolynomialFactory is a particular case of implementation of the :class:`~openturns.OrthogonalBasis` in the case of polynomial chaos expansion. It provides to the OrthogonalBasis the persistent types of the univariate orthogonal polynomials (e.g. Hermite, Legendre, Laguerre and Jacobi) needed to determine the distribution measure of projection of the input variable. Let's note that the exact hessian and gradient have been implemented for the product of polynomials. To facilitate the construction of the basis it is recommanded to use the class :class:`~openturns.StandardDistributionPolynomialFactory`. See also -------- StandardDistributionPolynomialFactory Examples -------- >>> import openturns as ot >>> # Define the model >>> myModel = ot.SymbolicFunction(['x1','x2','x3'], ['1+x1*x2 + 2*x3^2']) >>> # Create a distribution of dimension 3 >>> Xdist = ot.ComposedDistribution([ot.Normal(), ot.Uniform(), ot.Gamma(2.75, 1.0)]) >>> # Construct the multivariate orthonormal basis >>> polyColl = [ot.HermiteFactory(), ot.LegendreFactory(), ot.LaguerreFactory(2.75)] >>> enumerateFunction = ot.LinearEnumerateFunction(3) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> # Easier way to construct the same multivariate orthonormal basis >>> polyColl = [ot.StandardDistributionPolynomialFactory(Xdist.getMarginal(i)) for i in range(Xdist.getDimension())] >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction)" // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalProductPolynomialFactory::getPolynomialFamilyCollection "Get the collection of univariate orthogonal polynomial families. Returns ------- polynomialFamily : list of :class:`~openturns.OrthogonalUniVariatePolynomialFamily` List of orthogonal univariate polynomials families." // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalProductPolynomialFactory::getNodesAndWeights "Get the nodes and the weights. Parameters ---------- degrees : list of positiv int (:math:`k_1, \dots, k_n`) List of :math:`n` polynomial orders associated with the :math:`n` univariate polynomials of the basis. Returns ------- nodes : :class:`~openturns.Sample` weights : :class:`~openturns.Point` Nodes and weights of the multivariate polynomial associated with the marginal degrees (:math:`k_1, \dots, k_n`) as the tensor product of the marginal orthogonal univariate polynomials, to build multivariate quadrature rules. See also -------- OrthogonalUniVariatePolynomialFamily.getNodesAndWeights Examples -------- >>> import openturns as ot >>> # Define the model >>> myModel = ot.SymbolicFunction(['x1','x2','x3'], ['1+x1*x2 + 2*x3^2']) >>> # Create a distribution of dimension 3 >>> Xdist = ot.ComposedDistribution([ot.Normal(), ot.Uniform(), ot.Gamma(2.75, 1.0)]) >>> # Construct the multivariate orthonormal basis >>> polyColl = [ot.HermiteFactory(), ot.LegendreFactory(), ot.LaguerreFactory(2.75)] >>> enumerateFunction = ot.LinearEnumerateFunction(3) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> nodes, weights = productBasis.getNodesAndWeights([2, 3, 1]) >>> print(nodes[:2]) [ v0 v1 v2 ] 0 : [ -1 -0.774597 3.75 ] 1 : [ 1 -0.774597 3.75 ] >>> print(weights[:2]) [0.138889,0.138889]" openturns-1.9/python/src/OrthogonalUniVariateFunctionFactory.i000066400000000000000000000006751307543307100250570ustar00rootroot00000000000000// SWIG file OrthogonalUniVariateFunctionFactory.i %{ #include "openturns/OrthogonalUniVariateFunctionFactory.hxx" %} %include OrthogonalUniVariateFunctionFactory_doc.i %include openturns/OrthogonalUniVariateFunctionFactory.hxx namespace OT{ %extend OrthogonalUniVariateFunctionFactory { OrthogonalUniVariateFunctionFactory(const OrthogonalUniVariateFunctionFactory & other) { return new OT::OrthogonalUniVariateFunctionFactory(other); } } } openturns-1.9/python/src/OrthogonalUniVariateFunctionFactory_doc.i.in000066400000000000000000000030321307543307100262770ustar00rootroot00000000000000%define OT_OrthogonalUniVariateFunctionFactory_doc "Base class for orthogonal univariate function factories." %enddef %feature("docstring") OT::OrthogonalUniVariateFunctionFactory OT_OrthogonalUniVariateFunctionFactory_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariateFunctionFactory_build_doc "Build the :math:`n`-th order orthogonal univariate function. Parameters ---------- n : int, :math:`0 \leq n` Function order. Returns ------- function : :class:`~openturns.UniVariateFunction` Requested orthogonal univariate function." %enddef %feature("docstring") OT::OrthogonalUniVariateFunctionFactory::build OT_OrthogonalUniVariateFunctionFactory_build_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariateFunctionFactory_getMeasure_doc "Accessor to the associated probability measure. Returns ------- measure : :class:`~openturns.Distribution` The associated probability measure (according to which the functions are orthogonal). Notes ----- Two functions P and Q are orthogonal with respect to the **probability measure** :math:`w(x) \di{x}` if and only if their scalar product: .. math:: \langle P, Q \rangle = \int_{\alpha}^{\beta} P(x) Q(x) w(x) \di{x} = 0 where :math:`\alpha \in \Rset \cup \{-\infty\}` and :math:`\beta \in \Rset \cup \{+\infty\}`." %enddef %feature("docstring") OT::OrthogonalUniVariateFunctionFactory::getMeasure OT_OrthogonalUniVariateFunctionFactory_getMeasure_doc openturns-1.9/python/src/OrthogonalUniVariateFunctionFamily.i000066400000000000000000000014611307543307100246630ustar00rootroot00000000000000// SWIG file OrthogonalUniVariateFunctionFamily.i %{ #include "openturns/OrthogonalUniVariateFunctionFamily.hxx" %} %include OrthogonalUniVariateFunctionFamily_doc.i OTDefaultCollectionConvertFunctionsMisnamed(OrthogonalUniVariateFunctionFamily, OrthogonalUniVariateFunctionFactory) OTTypedInterfaceObjectImplementationHelper(OrthogonalUniVariateFunctionFamily, OrthogonalUniVariateFunctionFactory) OTTypedCollectionInterfaceObjectMisnamedHelper(OrthogonalUniVariateFunctionFamily, FunctionFamilyCollection) %include openturns/OrthogonalUniVariateFunctionFamily.hxx namespace OT{ %extend OrthogonalUniVariateFunctionFamily { OrthogonalUniVariateFunctionFamily(const OrthogonalUniVariateFunctionFamily & other) { return new OT::OrthogonalUniVariateFunctionFamily(other); } } } %clear OT::Point & weights; openturns-1.9/python/src/OrthogonalUniVariateFunctionFamily_doc.i.in000066400000000000000000000007221307543307100261140ustar00rootroot00000000000000// OrthogonalUniVariateFunctionFamily docstrings are defined in OrthogonalUniVariatePolynomialFactory_doc.i.in %feature("docstring") OT::OrthogonalUniVariateFunctionFamily OT_OrthogonalUniVariatePolynomialFactory_doc %feature("docstring") OT::OrthogonalUniVariateFunctionFamily::build OT_OrthogonalUniVariatePolynomialFactory_build_doc %feature("docstring") OT::OrthogonalUniVariateFunctionFamily::getMeasure OT_OrthogonalUniVariatePolynomialFactory_getMeasure_doc openturns-1.9/python/src/OrthogonalUniVariatePolynomial.i000066400000000000000000000006261307543307100240610ustar00rootroot00000000000000// SWIG file OrthogonalUniVariatePolynomial.i %{ #include "openturns/OrthogonalUniVariatePolynomial.hxx" %} %include OrthogonalUniVariatePolynomial_doc.i %include openturns/OrthogonalUniVariatePolynomial.hxx namespace OT { %extend OrthogonalUniVariatePolynomial { OrthogonalUniVariatePolynomial(const OrthogonalUniVariatePolynomial & other) { return new OT::OrthogonalUniVariatePolynomial(other); } } } openturns-1.9/python/src/OrthogonalUniVariatePolynomialFactory.i000066400000000000000000000017051307543307100254100ustar00rootroot00000000000000// SWIG file OrthogonalUniVariatePolynomialFactory.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::OrthogonalUniVariatePolynomialFactory::getNodesAndWeights(const OT::UnsignedInteger n, OT::Point & weights) const; %{ #include "openturns/OrthogonalUniVariatePolynomialFactory.hxx" %} %include OrthogonalUniVariatePolynomialFactory_doc.i %include openturns/OrthogonalUniVariatePolynomialFactory.hxx namespace OT{ %extend OrthogonalUniVariatePolynomialFactory { OrthogonalUniVariatePolynomialFactory(const OrthogonalUniVariatePolynomialFactory & other) { return new OT::OrthogonalUniVariatePolynomialFactory(other); } } } %clear OT::Point & weights; openturns-1.9/python/src/OrthogonalUniVariatePolynomialFactory_doc.i.in000066400000000000000000000136231307543307100266440ustar00rootroot00000000000000%define OT_OrthogonalUniVariatePolynomialFactory_doc "Base class for orthogonal univariate polynomial factories. See also -------- StandardDistributionPolynomialFactory" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory OT_OrthogonalUniVariatePolynomialFactory_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariatePolynomialFactory_build_doc "Build the :math:`k`-th order orthogonal univariate polynomial. Parameters ---------- k : int, :math:`0 \leq k` Polynomial order. Returns ------- polynomial : :class:`~openturns.OrthogonalUniVariatePolynomial` Requested orthogonal univariate polynomial. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.build(2)) -0.707107 + 0.707107 * X^2" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::build OT_OrthogonalUniVariatePolynomialFactory_build_doc // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::buildCoefficients "Build the :math:`k`-th order orthogonal univariate polynomial coefficients. Parameters ---------- k : int, :math:`0 \leq k` Polynomial order. Returns ------- coefficients : :class:`~openturns.Point` Coefficients of the requested orthogonal univariate polynomial. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.buildCoefficients(2)) [-0.707107,0,0.707107]" // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::buildRecurrenceCoefficientsCollection "Build the recurrence coefficients. Build the recurrence coefficients of the orthogonal univariate polynomial family up to the :math:`k`-th order. Parameters ---------- k : int, :math:`0 \leq k` Polynomial order. Returns ------- recurrence_coefficients : list of :class:`~openturns.Point` All the tecurrence coefficients up to the requested order. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.buildRecurrenceCoefficientsCollection(2)) [[1,0,0],[0.707107,0,-0.707107]]" // --------------------------------------------------------------------- %define OT_OrthogonalUniVariatePolynomialFactory_getMeasure_doc "Accessor to the associated probability measure. Returns ------- measure : :class:`~openturns.Distribution` The associated probability measure (according to which the polynomials are orthogonal). Notes ----- Two polynomials P and Q are orthogonal with respect to the **probability measure** :math:`w(x) \di{x}` if and only if their dot product: .. math:: \langle P, Q \rangle = \int_{\alpha}^{\beta} P(x) Q(x) w(x)\di{x} = 0 where :math:`\alpha \in \Rset \cup \{-\infty\}` and :math:`\beta \in \Rset \cup \{+\infty\}`. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.getMeasure()) Normal(mu = 0, sigma = 1)" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::getMeasure OT_OrthogonalUniVariatePolynomialFactory_getMeasure_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariatePolynomialFactory_getNodesAndWeights_doc "Build the :math:`k`-th order quadrature scheme. Associated with the orthogonal univariate polynomials family. Parameters ---------- k : int, :math:`0 < k` Polynomial order. Returns ------- nodes : :class:`~openturns.Point` The nodes of the :math:`k`-th order quadrature scheme. weights : :class:`~openturns.Point` The weights of the :math:`k`-th order quadrature scheme. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> nodes, weights = polynomial_factory.getNodesAndWeights(3) >>> print(nodes) [-1.73205,...,1.73205] >>> print(weights) [0.166667,0.666667,0.166667]" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::getNodesAndWeights OT_OrthogonalUniVariatePolynomialFactory_getNodesAndWeights_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariatePolynomialFactory_getRecurrenceCoefficients_doc "Accessor to the recurrence coefficients of the :math:`k`-th order. Of the orthogonal univariate polynomial. Parameters ---------- k : int, :math:`0 \leq k` Polynomial order. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{-1}=0, P_0=1, P_{n + 1} = (a_n x + b_n) P_n + c_n P_{n - 1}, \quad n > 1 Returns ------- recurrence_coefficients : :class:`~openturns.Point` The recurrence coefficients of the :math:`k`-th order orthogonal univariate polynomial. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.getRecurrenceCoefficients(3)) [0.5,0,-0.866025]" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::getRecurrenceCoefficients OT_OrthogonalUniVariatePolynomialFactory_getRecurrenceCoefficients_doc // --------------------------------------------------------------------- %define OT_OrthogonalUniVariatePolynomialFactory_getRoots_doc "Accessor to the recurrence coefficients of the :math:`k`-th order. Of the orthogonal univariate polynomial. Parameters ---------- k : int, :math:`k > 0` Polynomial order. Returns ------- roots : :class:`~openturns.Point` The roots of the :math:`k`-th order orthogonal univariate polynomial. Examples -------- >>> import openturns as ot >>> polynomial_factory = ot.HermiteFactory() >>> print(polynomial_factory.getRoots(3)) [-1.73205,...,1.73205]" %enddef %feature("docstring") OT::OrthogonalUniVariatePolynomialFactory::getRoots OT_OrthogonalUniVariatePolynomialFactory_getRoots_doc openturns-1.9/python/src/OrthogonalUniVariatePolynomialFamily.i000066400000000000000000000024111307543307100252150ustar00rootroot00000000000000// SWIG file OrthogonalUniVariatePolynomialFamily.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::OrthogonalUniVariatePolynomialFamily::getNodesAndWeights(OT::Point & weights) const; %{ #include "openturns/OrthogonalUniVariatePolynomialFamily.hxx" %} %include OrthogonalUniVariatePolynomialFamily_doc.i OTDefaultCollectionConvertFunctionsMisnamed(OrthogonalUniVariatePolynomialFamily, OrthogonalUniVariatePolynomialFactory) OTTypedInterfaceObjectImplementationHelper(OrthogonalUniVariatePolynomialFamily, OrthogonalUniVariatePolynomialFactory) OTTypedCollectionInterfaceObjectMisnamedHelper(OrthogonalUniVariatePolynomialFamily, PolynomialFamilyCollection) %include openturns/OrthogonalUniVariatePolynomialFamily.hxx namespace OT{ %extend OrthogonalUniVariatePolynomialFamily { OrthogonalUniVariatePolynomialFamily(const OrthogonalUniVariatePolynomialFamily & other) { return new OT::OrthogonalUniVariatePolynomialFamily(other); } } } %clear OT::Point & weights; openturns-1.9/python/src/OrthogonalUniVariatePolynomialFamily_doc.i.in000066400000000000000000000016141307543307100264530ustar00rootroot00000000000000// OrthogonalUniVariatePolynomialFamily docstrings are defined in OrthogonalUniVariatePolynomialFactory_doc.i.in %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily OT_OrthogonalUniVariatePolynomialFactory_doc %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily::build OT_OrthogonalUniVariatePolynomialFactory_build_doc %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily::getMeasure OT_OrthogonalUniVariatePolynomialFactory_getMeasure_doc %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily::getNodesAndWeights OT_OrthogonalUniVariatePolynomialFactory_getNodesAndWeights_doc %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily::getRecurrenceCoefficients OT_OrthogonalUniVariatePolynomialFactory_getRecurrenceCoefficients_doc %feature("docstring") OT::OrthogonalUniVariatePolynomialFamily::getRoots OT_OrthogonalUniVariatePolynomialFactory_getRoots_docopenturns-1.9/python/src/OrthogonalUniVariatePolynomialFunctionFactory.i000066400000000000000000000010161307543307100271110ustar00rootroot00000000000000// SWIG file OrthogonalUniVariatePolynomialFunctionFactory.i %{ #include "openturns/OrthogonalUniVariatePolynomialFunctionFactory.hxx" %} %include OrthogonalUniVariatePolynomialFunctionFactory_doc.i %include openturns/OrthogonalUniVariatePolynomialFunctionFactory.hxx namespace OT { %extend OrthogonalUniVariatePolynomialFunctionFactory { OrthogonalUniVariatePolynomialFunctionFactory(const OrthogonalUniVariatePolynomialFunctionFactory & other) { return new OT::OrthogonalUniVariatePolynomialFunctionFactory(other); } } } openturns-1.9/python/src/OrthogonalUniVariatePolynomialFunctionFactory_doc.i.in000066400000000000000000000011151307543307100303430ustar00rootroot00000000000000%feature("docstring") OT::OrthogonalUniVariatePolynomialFunctionFactory "Polynomial specific orthogonal univariate function factory. Available constructor: OrthogonalUniVariatePolynomialFunctionFactory() OrthogonalUniVariatePolynomialFunctionFactory(*polynomialFactory*) Parameters ---------- polynomialFactory : :class:`~openturns.OrthogonalUniVariatePolynomialFamily` The polynomial factory Examples -------- >>> import openturns as ot >>> polynomialFactory = ot.HermiteFactory() >>> functionFactory = ot.OrthogonalUniVariatePolynomialFunctionFactory(polynomialFactory)" openturns-1.9/python/src/OrthogonalUniVariatePolynomial_doc.i.in000066400000000000000000000030301307543307100253030ustar00rootroot00000000000000%feature("docstring") OT::OrthogonalUniVariatePolynomial "Base class for orthogonal univariate polynomials. .. warning:: Orthogonal univariate polynomials are not intended to be created manually. They should be constructed with the subclasses of :class:`~openturns.OrthogonalUniVariatePolynomialFamily` (like e.g. :class:`~openturns.HermiteFactory`). Constructor parameters are therefore intentionally not documented. See Also -------- OrthogonalUniVariatePolynomialFamily Examples -------- >>> import openturns as ot Create a univariate polynomial from a list of coefficients: >>> for i in range(3): ... print(ot.OrthogonalUniVariatePolynomialFamily().build(i)) 1 X -0.707107 + 0.707107 * X^2" // --------------------------------------------------------------------- %feature("docstring") OT::OrthogonalUniVariatePolynomial::getRecurrenceCoefficients "Accessor to the recurrence coefficients. Returns ------- recurrence_coefficients : list of :class:`Point` The list of recurrence coefficients that defined the orthogonal univariate polynomial from the very first univariate orthogonal polynomial :math:`P_0`. Notes ----- Any sequence of orthogonal polynomials has a recurrence formula relating any three consecutive polynomials as follows: .. math:: P_{i + 1} = (a_i x + b_i) P_i + c_i P_{i - 1}, \quad i > 1 Examples -------- >>> import openturns as ot >>> polynomial = ot.OrthogonalUniVariatePolynomialFamily().build(2) >>> print(polynomial.getRecurrenceCoefficients()) [[1,0,0],[0.707107,0,-0.707107]]"openturns-1.9/python/src/OrthonormalizationAlgorithm.i000066400000000000000000000006701307543307100234610ustar00rootroot00000000000000// SWIG file OrthonormalizationAlgorithm.i %{ #include "openturns/OrthonormalizationAlgorithm.hxx" %} %include OrthonormalizationAlgorithm_doc.i OTTypedInterfaceObjectHelper(OrthonormalizationAlgorithm) %include openturns/OrthonormalizationAlgorithm.hxx namespace OT{ %extend OrthonormalizationAlgorithm { OrthonormalizationAlgorithm(const OrthonormalizationAlgorithm & other) { return new OT::OrthonormalizationAlgorithm(other); } } } openturns-1.9/python/src/OrthonormalizationAlgorithmImplementation.i000066400000000000000000000007551307543307100263730ustar00rootroot00000000000000// SWIG file OrthonormalizationAlgorithmImplementation.i %{ #include "openturns/OrthonormalizationAlgorithmImplementation.hxx" %} %include OrthonormalizationAlgorithmImplementation_doc.i %include openturns/OrthonormalizationAlgorithmImplementation.hxx namespace OT{ %extend OrthonormalizationAlgorithmImplementation { OrthonormalizationAlgorithmImplementation(const OrthonormalizationAlgorithmImplementation & other) { return new OT::OrthonormalizationAlgorithmImplementation(other); } } } openturns-1.9/python/src/OrthonormalizationAlgorithmImplementation_doc.i.in000066400000000000000000000050241307543307100276170ustar00rootroot00000000000000%define OT_OrthonormalizationAlgorithm_doc "Algorithm used to build the orthonormal basis. With respect to a specific distribution. Available constructors: OrthonormalizationAlgorithm(*orthoAlgoImp*) OrthonormalizationAlgorithm(*measure*) Parameters ---------- orthoAlgoImp : OrthonormalizationAlgorithmImplementation An orthonormalization algorithm implementation which is the :class:`~openturns.GramSchmidtAlgorithm` or the :class:`~openturns.ChebychevAlgorithm`. measure : :class:`~openturns.Distribution` A distribution for which the orthonormal polynomial basis is built. See also -------- GramSchmidtAlgorithm, ChebychevAlgorithm Notes ----- It enables to build the orthonormal polynomial basis with respect to the given distribution. In the first usage, the algorithm orthoAlgoImp is used (that specifies the associated distribution). In the second usage, the Gram-Schmidt algorithm is used by default. Only the distribution *measure* is specified." %enddef %feature("docstring") OT::OrthonormalizationAlgorithmImplementation OT_OrthonormalizationAlgorithm_doc // --------------------------------------------------------------------- %define OT_OrthonormalizationAlgorithm_getMeasure_doc "Accessor to the measure. Returns ------- m : :class:`~openturns.Distribution` The measure for which the orthonormal polynomial basis is built." %enddef %feature("docstring") OT::OrthonormalizationAlgorithmImplementation::getMeasure OT_OrthonormalizationAlgorithm_getMeasure_doc // --------------------------------------------------------------------- %define OT_OrthonormalizationAlgorithm_getRecurrenceCoefficients_doc "Accessor to the recurrence coefficients. Parameters ---------- n : integer Index ot the recurrence step. Returns ------- coef : sequence of float Calculate the coefficients of recurrence :math:`a_0`, :math:`a_1`, :math:`a_2` such that :math:`P_{n+1}(x) = (a_0 \times x + a_1) \times P_n(x) + a_2 \times P_{n-1}(x)`." %enddef %feature("docstring") OT::OrthonormalizationAlgorithmImplementation::getRecurrenceCoefficients OT_OrthonormalizationAlgorithm_getRecurrenceCoefficients_doc // --------------------------------------------------------------------- %define OT_OrthonormalizationAlgorithm_setMeasure_doc "Accessor to the measure. Parameters ---------- m : :class:`~openturns.Distribution` The measure for which the orthonormal polynomial basis is built." %enddef %feature("docstring") OT::OrthonormalizationAlgorithmImplementation::setMeasure OT_OrthonormalizationAlgorithm_setMeasure_doc openturns-1.9/python/src/OrthonormalizationAlgorithm_doc.i.in000066400000000000000000000010641307543307100247110ustar00rootroot00000000000000// OrthonormalizationAlgorithm docstrings are defined in OrthonormalizationAlgorithmImplementation_doc.i.in %feature("docstring") OT::OrthonormalizationAlgorithm OT_OrthonormalizationAlgorithm_doc %feature("docstring") OT::OrthonormalizationAlgorithm::getRecurrenceCoefficients OT_OrthonormalizationAlgorithm_getRecurrenceCoefficients_doc %feature("docstring") OT::OrthonormalizationAlgorithm::setMeasure OT_OrthonormalizationAlgorithm_setMeasure_doc %feature("docstring") OT::OrthonormalizationAlgorithm::getMeasure OT_OrthonormalizationAlgorithm_getMeasure_doc openturns-1.9/python/src/P1LagrangeEvaluation.i000066400000000000000000000005061307543307100216570ustar00rootroot00000000000000// SWIG file P1LagrangeEvaluation.i %{ #include "openturns/P1LagrangeEvaluation.hxx" %} %include P1LagrangeEvaluation_doc.i %include openturns/P1LagrangeEvaluation.hxx namespace OT { %extend P1LagrangeEvaluation { P1LagrangeEvaluation(const P1LagrangeEvaluation & other) { return new OT::P1LagrangeEvaluation(other); } } } openturns-1.9/python/src/P1LagrangeEvaluation_doc.i.in000066400000000000000000000034111307543307100231070ustar00rootroot00000000000000%feature("docstring") OT::P1LagrangeEvaluation "Data based math evaluation implementation. Available constructors: P1LagrangeEvaluation(*field*) Parameters ---------- field : :class:`~openturns.Field` Field :math:`\cF` defining the parameters of a P1 Lagrange interpolation function. See also -------- Function, AggregatedEvaluation, DualLinearCombinationEvaluation, LinearFunction Notes ----- It returns a :class:`~openturns.Function` that implements the P1 Lagrange interpolation function :math:`f : \cD_N \rightarrow \Rset^p` : .. math:: \forall \vect{x} \in \Rset^n, f(\vect{x}) = \sum_{\vect{\xi}_i\in\cV(\vect{x})}\alpha_i f(\vect{\xi}_i) where :math:`\cD_N` is a :class:`~openturns.Mesh`, :math:`\cV(\vect{x})` is the simplex in :math:`\cD_N` that contains :math:`\vect{x}`, :math:`\alpha_i` are the barycentric coordinates of :math:`\vect{x}` wrt the vertices :math:`\vect{\xi}_i` of :math:`\cV(\vect{x})`: .. math:: \vect{x}=\sum_{\vect{\xi}_i\in\cV(\vect{x})}\alpha_i\vect{\xi}_i Examples -------- Create a P1 Lagrange evaluation: >>> import openturns as ot >>> field = ot.Field(ot.RegularGrid(0.0, 1.0, 4), [[0.5], [1.5], [1.0], [-0.5]]) >>> evaluation = ot.P1LagrangeEvaluation(field) >>> print(evaluation([2.3])) [0.55]" // --------------------------------------------------------------------- %feature("docstring") OT::P1LagrangeEvaluation::getField "Accessor to the field defining the functions. Returns ------- field : :class:`~openturns.Field` The field defining the function." // --------------------------------------------------------------------- %feature("docstring") OT::P1LagrangeEvaluation::setField "Accessor to the field defining the functions. Parameters ---------- field : :class:`~openturns.Field` The field defining the function." openturns-1.9/python/src/Pairs.i000066400000000000000000000003221307543307100167600ustar00rootroot00000000000000// SWIG file Pairs.i %{ #include "openturns/Pairs.hxx" %} %include Pairs_doc.i %include openturns/Pairs.hxx namespace OT { %extend Pairs { Pairs(const Pairs & other) { return new OT::Pairs(other); } } } openturns-1.9/python/src/Pairs_doc.i.in000066400000000000000000000030561307543307100202210ustar00rootroot00000000000000%feature("docstring") OT::Pairs "Pairs. Available constructors: Pairs(*data, title=' '*) Pairs(*data, title, labels, color, pointStyle*) Parameters ---------- data : 2-d sequence of float of dimension :math:`n` Points from which 2D clouds are built. title : str Title of the Pairs. labels : sequence of str of dimension :math:`n` Names of each component of the sample. color : str Color of the points. If not specified, by default it is 'blue'. pointStyle : str Style of the points. If not specified, by default it is 'plus'. Examples -------- >>> import openturns as ot >>> R = ot.CorrelationMatrix(3) >>> R[1, 0] = -0.4 >>> R[2, 1] = -0.4 >>> distribution = ot.Normal([0.0] * 3, [5.0] * 3, R) >>> sample = distribution.getSample(10) >>> # Create an empty graph >>> myGraph = ot.Graph('Pairs', ' ', ' ', True, '') >>> # Create the Pairs >>> myPairs = ot.Pairs(sample, 'Pairs example', sample.getDescription(), 'blue', 'bullet') >>> myGraph.add(myPairs)" // --------------------------------------------------------------------- %feature("docstring") OT::Pairs::buildDefaultLabels "Build default labels by taking the column number of *data*." // --------------------------------------------------------------------- %feature("docstring") OT::Pairs::getTitle "Get the title of the Pairs. Returns ------- title : str Title of the Pairs." // --------------------------------------------------------------------- %feature("docstring") OT::Pairs::setTitle "Set the title of the Pairs. Parameters ---------- title : str Title of the Pairs." openturns-1.9/python/src/ParametricEvaluation.i000066400000000000000000000005021307543307100220210ustar00rootroot00000000000000// SWIG file ParametricEvaluation.i OTAutodoc(ParametricEvaluation) %{ #include "openturns/ParametricEvaluation.hxx" %} %include openturns/ParametricEvaluation.hxx namespace OT { %extend ParametricEvaluation { ParametricEvaluation(const ParametricEvaluation & other) { return new OT::ParametricEvaluation(other); } } } openturns-1.9/python/src/ParametricFunction.i000066400000000000000000000004661307543307100215100ustar00rootroot00000000000000// SWIG file ParametricFunction.i %{ #include "openturns/ParametricFunction.hxx" %} %include ParametricFunction_doc.i %include openturns/ParametricFunction.hxx namespace OT { %extend ParametricFunction { ParametricFunction(const ParametricFunction & other) { return new OT::ParametricFunction(other); } } } openturns-1.9/python/src/ParametricFunction_doc.i.in000066400000000000000000000027121307543307100227360ustar00rootroot00000000000000%feature("docstring") OT::ParametricFunction "Parametric function. Available constructor: ParametricFunction(*function, indices, referencePoint, parametersSet*) It defines a parametric function from *function* by freezing the variables marked by the *indices* set to the values of *referencePoint*. Parameters ---------- function : :class:`~openturns.Function` Function with full parameters from which the parametric function is built. indices : sequence of int Indices of the frozen variables. referencePoint : sequence of float Values of the frozen variables. Must be of size of *indices* if *parametersSet* is *True* (default), else its size should be the complementary size of *indices*. parametersSet : bool If *True* (default), the frozen variables are the ones referenced in *indices*. Otherwise, the set variables are the ones referenced in the complementary set of *indices*. Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(ot.Description.BuildDefault(4, 'x'), ... ['x0', 'x0 + x1', 'x0 + x2 + x3']) Then create another function by setting x1=4 and x3=10: >>> g = ot.ParametricFunction(f, [3, 1], [10, 4]) >>> print(g.getInputDescription()) [x0,x2] >>> print(g((1, 2))) [1,5,13] Or by setting x0=6 and x2=5 using the complementary set flag: >>> g = ot.ParametricFunction(f, [3, 1], [6, 5], False) >>> print(g.getInputDescription()) [x3,x1] >>> print(g((1, 2))) [6,8,12]" openturns-1.9/python/src/ParametricGradient.i000066400000000000000000000004621307543307100214540ustar00rootroot00000000000000// SWIG file ParametricGradient.i OTAutodoc(ParametricGradient) %{ #include "openturns/ParametricGradient.hxx" %} %include openturns/ParametricGradient.hxx namespace OT { %extend ParametricGradient { ParametricGradient(const ParametricGradient & other) { return new OT::ParametricGradient(other); } } } openturns-1.9/python/src/ParametricHessian.i000066400000000000000000000004521307543307100213100ustar00rootroot00000000000000// SWIG file ParametricHessian.i OTAutodoc(ParametricHessian) %{ #include "openturns/ParametricHessian.hxx" %} %include openturns/ParametricHessian.hxx namespace OT { %extend ParametricHessian { ParametricHessian(const ParametricHessian & other) { return new OT::ParametricHessian(other); } } } openturns-1.9/python/src/ParametrizedDistribution.i000066400000000000000000000005451307543307100227400ustar00rootroot00000000000000// SWIG file ParametrizedDistribution.i %{ #include "openturns/ParametrizedDistribution.hxx" %} %include ParametrizedDistribution_doc.i %include openturns/ParametrizedDistribution.hxx namespace OT{ %extend ParametrizedDistribution { ParametrizedDistribution(const ParametrizedDistribution & other) { return new OT::ParametrizedDistribution(other); } } } openturns-1.9/python/src/ParametrizedDistribution_doc.i.in000066400000000000000000000014111307543307100241630ustar00rootroot00000000000000%feature("docstring") OT::ParametrizedDistribution "Parametrized distribution. Available constructors: ParametrizedDistribution(*parameters*) Parameters ---------- parameters : :class:`~openturns.DistributionParameters` Parameters of the distribution to be created. See also -------- Distribution Notes ----- A *ParametrizedDistribution* object enables to create a distribution with non-native parameters defined thanks to the class :class:`~openturns.DistributionParameters`. Examples -------- Create the parameters of the Gamma distribution: >>> import openturns as ot >>> parameters = ot.GammaMuSigma(1.5, 2.5, -0.5) Create the distribution: >>> distribution = ot.ParametrizedDistribution(parameters) Draw a sample: >>> sample = distribution.getSample(5)" openturns-1.9/python/src/Path.i000066400000000000000000000002661307543307100166050ustar00rootroot00000000000000// SWIG file Path.i %{ #include "openturns/Path.hxx" %} %include Path_doc.i %template(DirectoryList) std::vector; %nodefaultctor Path; %include openturns/Path.hxx openturns-1.9/python/src/Path_doc.i.in000066400000000000000000000040711307543307100200350ustar00rootroot00000000000000%feature("docstring") OT::Path "Path utilities. No constructor, only static methods are available." // --------------------------------------------------------------------- %feature("docstring") OT::Path::GetInstallationDirectory "Accessor to the installation directory. Returns ------- installDir : str The installation prefix." // --------------------------------------------------------------------- %feature("docstring") OT::Path::GetConfigDirectoryList "Accessor to config directories. Returns ------- dirList : list of str The list of directories searched for config files." // --------------------------------------------------------------------- %feature("docstring") OT::Path::FindFileByNameInDirectoryList "Find a file. Parameters ---------- name : str Filename to be found. dirList : sequence of str The list of directories to search in. Returns ------- dirList : list of str The list of directories searched for config files." // --------------------------------------------------------------------- %feature("docstring") OT::Path::GetTemporaryDirectory "Accessor to the temporary directory. Returns ------- tempDir : str The absolute temporary directory." // --------------------------------------------------------------------- %feature("docstring") OT::Path::BuildTemporaryFileName "Create a new temporary file. Parameters ---------- pattern : str Filename pattern, eg 'tmpXXXXXX'. The 'XXXXXXX' part will be replaced by random chars. Returns ------- fileName : str The unique newly created file." // --------------------------------------------------------------------- %feature("docstring") OT::Path::CreateTemporaryDirectory "Create a new temporary directory. Parameters ---------- directoryPrefix : str A subdirectory name. Returns ------- tempDir : str The newly created directory." // --------------------------------------------------------------------- %feature("docstring") OT::Path::DeleteTemporaryDirectory "Remove a temporary directory. Parameters ---------- directoryName : str The directory to remove." openturns-1.9/python/src/PenalizedLeastSquaresAlgorithm.i000066400000000000000000000006251307543307100240270ustar00rootroot00000000000000// SWIG file PenalizedLeastSquaresAlgorithm.i %{ #include "openturns/PenalizedLeastSquaresAlgorithm.hxx" %} %include PenalizedLeastSquaresAlgorithm_doc.i %include openturns/PenalizedLeastSquaresAlgorithm.hxx namespace OT{ %extend PenalizedLeastSquaresAlgorithm { PenalizedLeastSquaresAlgorithm(const PenalizedLeastSquaresAlgorithm & other) { return new OT::PenalizedLeastSquaresAlgorithm(other); } } } openturns-1.9/python/src/PenalizedLeastSquaresAlgorithmFactory.i000066400000000000000000000007161307543307100253600ustar00rootroot00000000000000// SWIG file PenalizedLeastSquaresAlgorithmFactory.i %{ #include "openturns/PenalizedLeastSquaresAlgorithmFactory.hxx" %} %include PenalizedLeastSquaresAlgorithmFactory_doc.i %include openturns/PenalizedLeastSquaresAlgorithmFactory.hxx namespace OT { %extend PenalizedLeastSquaresAlgorithmFactory { PenalizedLeastSquaresAlgorithmFactory(const PenalizedLeastSquaresAlgorithmFactory & other) { return new OT::PenalizedLeastSquaresAlgorithmFactory(other); } } } openturns-1.9/python/src/PenalizedLeastSquaresAlgorithmFactory_doc.i.in000066400000000000000000000007751307543307100266170ustar00rootroot00000000000000%feature("docstring") OT::PenalizedLeastSquaresAlgorithmFactory "Penalized least squares algorithm factory. Available constructors: PenalizedLeastSquaresAlgorithmFactory() See also -------- ApproximationAlgorithm, LeastSquaresMetaModelSelectionFactory Notes ----- Implementation of an approximation algorithm implementation factory which builds an :class:`~openturns.ApproximationAlgorithm`. This class is not usable because it has sense only whithin the :class:`~openturns.FunctionalChaosAlgorithm`."openturns-1.9/python/src/PenalizedLeastSquaresAlgorithm_doc.i.in000066400000000000000000000021641307543307100252610ustar00rootroot00000000000000%feature("docstring") OT::PenalizedLeastSquaresAlgorithm "Penalized least squares algorithm. Available constructors: PenalizedLeastSquaresAlgorithm(*x, y, psi, indices, penalizationFactor=0, useNormal=False*) PenalizedLeastSquaresAlgorithm(*x, y, weight, psi, indices, penalizationFactor=0, useNormal=False*) PenalizedLeastSquaresAlgorithm(*x, y, weight, psi, indices, penalizationFactor=0, penalizationMatrix, useNormal=False*) Parameters ---------- x : :class:`~openturns.Sample` Input sample y : :class:`~openturns.Sample` Output sample weight : sequence of float Output weights psi : :class:`~openturns.Basis` Functional basis indices : sequence of int Indices allowed in the basis penalizationFactor : float, optional Penalization factor penalizationMatrix : 2-d sequence of float Penalization matrix useNormal : bool, optional Solve the normal equation See also -------- ApproximationAlgorithm, LeastSquaresMetaModelSelection Notes ----- Solve the least-squares problem: .. math:: \vect{a} = \argmin_{\vect{b} \in \Rset^P} ||y - \vect{b}^{\intercal} \vect{\Psi}(\vect{U})||^2 " openturns-1.9/python/src/PersistentCollection.i000066400000000000000000000003451307543307100220630ustar00rootroot00000000000000// SWIG file PersistentCollection.i %{ #include "openturns/PersistentCollection.hxx" %} %include openturns/PersistentCollection.hxx %template(UnsignedIntegerPersistentCollection) OT::PersistentCollection; openturns-1.9/python/src/PersistentObject.i000066400000000000000000000004011307543307100211670ustar00rootroot00000000000000// SWIG file PersistentObject.i %{ #include "openturns/PersistentObject.hxx" %} %ignore OT::PersistentObject::operator=(const PersistentObject &); %ignore OT::PersistentObject::is; %include PersistentObject_doc.i %include openturns/PersistentObject.hxx openturns-1.9/python/src/PersistentObject_doc.i.in000066400000000000000000000042311307543307100224260ustar00rootroot00000000000000%feature("docstring") OT::PersistentObject "PersistentObject saves and reloads the object's internal state." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::getId "Accessor to the object's id. Returns ------- id : int Internal unique identifier." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::setShadowedId "Accessor to the object's shadowed id. Parameters ---------- id : int Internal unique identifier." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::getShadowedId "Accessor to the object's shadowed id. Returns ------- id : int Internal unique identifier." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::setVisibility "Accessor to the object's visibility state. Parameters ---------- visible : bool Visibility flag." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::getVisibility "Accessor to the object's visibility state. Returns ------- visible : bool Visibility flag." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::hasName "Test if the object is named. Returns ------- hasName : bool True if the name is not empty." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::hasVisibleName "Test if the object has a distinguishable name. Returns ------- hasVisibleName : bool True if the name is not empty and not the default one." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::getName "Accessor to the object's name. Returns ------- name : str The name of the object." // --------------------------------------------------------------------- %feature("docstring") OT::PersistentObject::setName "Accessor to the object's name. Parameters ---------- name : str The name of the object."openturns-1.9/python/src/Pie.i000066400000000000000000000002761307543307100164270ustar00rootroot00000000000000// SWIG file Pie.i %{ #include "openturns/Pie.hxx" %} %include Pie_doc.i %include openturns/Pie.hxx namespace OT { %extend Pie { Pie(const Pie & other) { return new OT::Pie(other); } } } openturns-1.9/python/src/Pie_doc.i.in000066400000000000000000000037611307543307100176630ustar00rootroot00000000000000%feature("docstring") OT::Pie "Pie. Available constructors: Pie(*data*) Pie(*data, labels*) Pie(*data, labels, center, radius, palette*) Parameters ---------- data : sequence of float Sequence giving the percentiles of the pie. labels : sequence of str Names of each group. If not specified, by default equal to the description of the probabilistic input vector. center : sequence of float Center of the pie inside the bounding box. If not specified, by default it is (0,0). radius : positive float Radius of the pie. If not specified, by default it is 1. palette : sequence of str Names of the colors. If not specified, colors are successively taken from the list given by :meth:`buildDefaultPalette`, in the same order. Examples -------- >>> import openturns as ot >>> # Create the Pie >>> myPie = ot.Pie([0.4, 0.3, 0.2, 0.1], ['a0', 'a1', 'a2', 'a3']) >>> # Create an empty graph >>> myGraph = ot.Graph('A Pie', ' ', ' ', True, '') >>> myGraph.add(myPie)" // --------------------------------------------------------------------- %feature("docstring") OT::Pie::buildDefaultLabels "Build default labels by taking the percentiles." // --------------------------------------------------------------------- %feature("docstring") OT::Pie::buildDefaultPalette "Build default palette. Call :meth:`BuildDefaultPalette` with :math:`n` the size of *data* as argument." // --------------------------------------------------------------------- %feature("docstring") OT::Pie::IsValidColorPalette "Test the validity of a color palette. Parameters ---------- palette : sequence of str Names of the colors. Returns ------- validity : bool *True* if *palette* is valid or *False* otherwise. Examples -------- >>> import openturns as ot >>> pie = ot.Pie([0.5,0.2,0.3]) >>> print(pie.IsValidColorPalette(['#ff0000','#ccff00','#00ff66'])) True >>> print(pie.IsValidColorPalette(['green','red','darkorange'])) True >>> print(pie.IsValidColorPalette(['green','red','darkpink'])) False" openturns-1.9/python/src/PiecewiseHermiteEvaluation.i000066400000000000000000000005631307543307100231740ustar00rootroot00000000000000// SWIG file PiecewiseHermiteEvaluation.i OTAutodoc(PiecewiseHermiteEvaluation) %{ #include "openturns/PiecewiseHermiteEvaluation.hxx" %} %include openturns/PiecewiseHermiteEvaluation.hxx namespace OT { %extend PiecewiseHermiteEvaluation { PiecewiseHermiteEvaluation(const PiecewiseHermiteEvaluation & other) { return new OT::PiecewiseHermiteEvaluation(other); } } } openturns-1.9/python/src/PiecewiseLinearEvaluation.i000066400000000000000000000005531307543307100230100ustar00rootroot00000000000000// SWIG file PiecewiseLinearEvaluation.i OTAutodoc(PiecewiseLinearEvaluation) %{ #include "openturns/PiecewiseLinearEvaluation.hxx" %} %include openturns/PiecewiseLinearEvaluation.hxx namespace OT { %extend PiecewiseLinearEvaluation { PiecewiseLinearEvaluation(const PiecewiseLinearEvaluation & other) { return new OT::PiecewiseLinearEvaluation(other); } } } openturns-1.9/python/src/PlatformInfo.i000066400000000000000000000002511307543307100203030ustar00rootroot00000000000000// SWIG file PlatformInfo.i %{ #include "openturns/PlatformInfo.hxx" %} %include PlatformInfo_doc.i %nodefaultctor PlatformInfo; %include openturns/PlatformInfo.hxx openturns-1.9/python/src/PlatformInfo_doc.i.in000066400000000000000000000020431307543307100215360ustar00rootroot00000000000000%feature("docstring") OT::PlatformInfo "Informations about platform. No constructor, only static methods are available." // --------------------------------------------------------------------- %feature("docstring") OT::PlatformInfo::GetVersion "Accessor to the version string. Returns ------- version : str Version string." // --------------------------------------------------------------------- %feature("docstring") OT::PlatformInfo::GetRevision "Accessor to the revision string. Returns ------- revision : str Git revision." // --------------------------------------------------------------------- %feature("docstring") OT::PlatformInfo::SetNumericalPrecision "Accessor to the output numerical precision. Parameters ---------- int : precision String ouput numerical precision." // --------------------------------------------------------------------- %feature("docstring") OT::PlatformInfo::GetNumericalPrecision "Accessor to the output numerical precision. Returns ------- int : precision String ouput numerical precision." openturns-1.9/python/src/Point.i000066400000000000000000000060271307543307100170030ustar00rootroot00000000000000// SWIG file Point.i %ignore OT::Point::at; // Use __getitem__ instead %ignore OT::Point::getCollection; %{ #include "openturns/Point.hxx" %} %include Point_doc.i %template(ScalarCollection) OT::Collection; %template(ScalarPersistentCollection) OT::PersistentCollection; %typemap(in) const ScalarCollection & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert >( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Scalar"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const ScalarCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %template(PointCollection) OT::Collection; %template(PointPersistentCollection) OT::PersistentCollection; #define OT_TYPECHECK_NUMERICALPOINT 4 %typemap(in) const Point & ($1_basetype temp) { if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { //Nothing to do for NP } else if (OT::isAPythonSequenceOf( $input )) { temp = OT::convert( $input ); $1 = &temp; } else { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a Point"); } } %typemap(typecheck,precedence=OT_TYPECHECK_NUMERICALPOINT) const Point & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %apply const Point & { const OT::Point & }; %include openturns/Point.hxx %copyctor Point; namespace OT { %extend Point { Point(PyObject * pyObj) { return new OT::Point(OT::convert(pyObj)); } OTCollectionOperatorsHelper(OT::Point, OT::Scalar) /* Point __add__(const Point & other) */ /* { */ /* return *self + other; */ /* } */ Point operator +(const Point & other) { return *self + other; } Point __sub__(const Point & other) { return *self - other; } Point __mul__(Scalar s) { return (*self) * s; } Point __rmul__(Scalar s) { return s * (*self); } Point __div__(Scalar s) { return (*self) / s; } Point __truediv__(Scalar s) { return (*self) / s; } Point __iadd__(const Point & other) { *self += other; return *self; } Point __isub__(const Point & other) { *self -= other; return *self; } } // %extend } // OT %pythoncode %{ # deprecated class NumericalPoint(Point): def __init__(self, *args): super(NumericalPoint, self).__init__(*args) openturns.common.Log.Warn('class NumericalPoint is deprecated in favor of Point') class NumericalScalarCollection(ScalarCollection): def __init__(self, *args): super(NumericalScalarCollection, self).__init__(*args) openturns.common.Log.Warn('class NumericalScalarCollection is deprecated in favor of ScalarCollection') %} openturns-1.9/python/src/PointWithDescription.i000066400000000000000000000045341307543307100220440ustar00rootroot00000000000000// SWIG file PointWithDescription.i %{ #include "openturns/PointWithDescription.hxx" namespace OT { template <> struct traitsPythonType { typedef _PySequence_ Type; }; template <> inline OT::PointWithDescription convert<_PySequence_,OT::PointWithDescription>(PyObject * pyObj) { check<_PySequence_>( pyObj ); ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); const OT::UnsignedInteger size = PySequence_Fast_GET_SIZE( newPyObj.get() ); OT::PointWithDescription coll( size ); OT::Description desc = OT::Description( size ); for(OT::UnsignedInteger i=0; i( elt ); if (PySequence_Fast_GET_SIZE( elt ) == 2) { PyObject * item_0 = PySequence_Fast_GET_ITEM( elt, 0 ); check<_PyString_>( item_0 ); desc[i] = convert<_PyString_,OT::String>( item_0 ); PyObject * item_1 = PySequence_Fast_GET_ITEM( elt, 1 ); check<_PyFloat_>( item_1 ); coll[i] = convert<_PyFloat_,OT::Scalar>( item_1 ); } else { throw OT::InvalidArgumentException(HERE) << "Sequence item " << i << " passed as argument is not a pair (String, Scalar)"; } } coll.setDescription( desc ); return coll; } } /* namespace OT */ %} %include PointWithDescription_doc.i %rename(PointWithDescription_operator___eq__) OT::operator ==(const PointWithDescription & lhs, const PointWithDescription & rhs); %include openturns/PointWithDescription.hxx namespace OT{ %extend PointWithDescription { PointWithDescription(const PointWithDescription & other) { return new OT::PointWithDescription(other); } PointWithDescription(PyObject * pyObj) { return new OT::PointWithDescription( OT::convert(pyObj) ); } } } %template(PointWithDescriptionCollection) OT::Collection; %template(PointWithDescriptionPersistentCollection) OT::PersistentCollection; %pythoncode %{ # deprecated class NumericalPointWithDescription(PointWithDescription): def __init__(self, *args): super(NumericalPointWithDescription, self).__init__(*args) openturns.common.Log.Warn('class NumericalPointWithDescription is deprecated in favor of PointWithDescription') %} openturns-1.9/python/src/PointWithDescription_doc.i.in000066400000000000000000000020621307543307100232700ustar00rootroot00000000000000%feature("docstring") OT::PointWithDescription "Collection of real values with a description for each component. Available constructors: PointWithDescription(*size=0, value=0.0*) PointWithDescription(*sequence*) Parameters ---------- size : int, :math:`size \geq 0` Size of the vector. value : float Value set to the *size* elements. sequence : sequence of pair (string, float) Components of the vector. Examples -------- >>> import openturns as ot Use the first constructor: >>> print(ot.PointWithDescription(2)) [ : 0, : 0] >>> vector = ot.PointWithDescription(2, 3.0) >>> print(vector) [ : 3, : 3] >>> vector.setDescription(['c1', 'c2']) >>> print(vector) [c1 : 3, c2 : 3] Use the second constructor: >>> vector = ot.PointWithDescription([('C1', 2.0), ('C2', 3.0), ('C3', 4.5)]) >>> print(vector) [C1 : 2, C2 : 3, C3 : 4.5] >>> print(vector.getDescription()) [C1,C2,C3] Use some functionalities: >>> vector[1] = 7.1 >>> print(vector) [C1 : 2, C2 : 7.1, C3 : 4.5] >>> vector.add(6.2) >>> print(vector) [C1 : 2, C2 : 7.1, C3 : 4.5, : 6.2]" openturns-1.9/python/src/Point_doc.i.in000066400000000000000000000123341307543307100202330ustar00rootroot00000000000000%feature("docstring") OT::Point "Real vector. Parameters ---------- dimension : int, :math:`n > 0`, optional The number of components. value : float, optional The components value. Default creates a null vector. Examples -------- Create a Point >>> import openturns as ot >>> x = ot.Point(3, 1.0) >>> x class=Point name=Unnamed dimension=3 values=[1,1,1] Get or set terms >>> print(x[0]) 1.0 >>> x[0] = 0.0 >>> print(x[0]) 0.0 >>> print(x[:2]) [0,1] Create a Point from a flat (1d) array, list or tuple >>> import numpy as np >>> y = ot.Point((0.0, 1.0, 2.0)) >>> y = ot.Point(range(3)) >>> y = ot.Point(np.arange(3)) and back >>> np.array(y) array([ 0., 1., 2.]) Addition, subtraction (with compatible dimensions) >>> print(x + y) [0,2,3] >>> print(x - y) [0,0,-1] Multiplication, division with a scalar >>> print(x * 3.0) [0,3,3] >>> print(x / 3.0) [0,0.333333,0.333333]" // --------------------------------------------------------------------- %feature("docstring") OT::Point::add "Appends a scalar component (in-place). Parameters ---------- value : float The component to append. Examples -------- >>> import openturns as ot >>> x = ot.Point(2) >>> x.add(1.0) >>> print(x) [0,0,1]" // --------------------------------------------------------------------- %feature("docstring") OT::Point::clear "Resets the vector to zero dimension. Examples -------- >>> import openturns as ot >>> x = ot.Point(2) >>> x.clear() >>> x class=Point name=Unnamed dimension=0 values=[]" // --------------------------------------------------------------------- %feature("docstring") OT::Point::getDescription "Accessor to the componentwise description. Returns ------- description : :class:`~openturns.Description` Description of the components. See Also -------- setDescription" // --------------------------------------------------------------------- %feature("docstring") OT::Point::getDimension "Accessor to the vector's dimension. Returns ------- n : int The number of components in the vector." // --------------------------------------------------------------------- %feature("docstring") OT::Point::setDescription "Accessor to the componentwise description. Parameters ---------- description : sequence of str Description of the components." // --------------------------------------------------------------------- %feature("docstring") OT::Point::getSize "Accessor to the vector's dimension (or size). Returns ------- n : int The number of components in the vector." // --------------------------------------------------------------------- %feature("docstring") OT::Point::norm "Compute the Euclidean (:math:`L^2`) norm. The Euclidean (:math:`L^2`) norm of a vector is defined as: .. math:: \norm{\vect{x}} = \norm{\vect{x}}_2 = \sqrt{\sum_{i=1}^n x_i^2} Returns ------- norm : float The vector's Euclidean norm. Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> x.norm() 3.741657..." // --------------------------------------------------------------------- %feature("docstring") OT::Point::norm1 "Compute the :math:`L^1` norm. The :math:`L^1` norm of a vector is defined as: .. math:: \norm{\vect{x}}_1 = \sum_{i=1}^n |x_i| Returns ------- norm : float The vector's :math:`L^1` norm. Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> x.norm1() 6.0" // --------------------------------------------------------------------- %feature("docstring") OT::Point::normInf "Compute the :math:`L^{\inf}` norm. The :math:`L^{\inf}` norm of a vector is defined as: .. math:: \norm{\vect{x}}_{\inf} = \max_{i=1}^n |x_i| Returns ------- norm : float The vector's :math:`L^{\inf}` norm. Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> x.normInf() 3.0" // --------------------------------------------------------------------- %feature("docstring") OT::Point::normSquare "Compute the squared Euclidean norm. Returns ------- norm : float The vector's squared Euclidean norm. See Also -------- norm Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> x.normSquare() 14.0" // --------------------------------------------------------------------- %feature("docstring") OT::Point::normalize "Compute the normalized vector with respect to its Euclidean norm. Returns ------- normalized_vector : :class:`~openturns.Point` The normalized vector with respect to its Euclidean norm. See Also -------- norm Raises ------ RuntimeError : If the Euclidean norm is zero. Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> print(x.normalize()) [0.267261,0.534522,0.801784]" // --------------------------------------------------------------------- %feature("docstring") OT::Point::normalizeSquare "Compute the normalized vector with respect to its squared Euclidean norm. Returns ------- normalized_vector : normalized_vector : :class:`~openturns.Point` The normalized vector with respect to its squared Euclidean norm. See Also -------- normSquare Raises ------ RuntimeError : If the squared Euclidean norm is zero. Examples -------- >>> import openturns as ot >>> x = ot.Point([1.0, 2.0, 3.0]) >>> print(x.normalizeSquare()) [0.0714286,0.285714,0.642857]" openturns-1.9/python/src/Pointer.i000066400000000000000000000001371307543307100173260ustar00rootroot00000000000000// SWIG file Pointer.i %{ #include "openturns/Pointer.hxx" %} %include openturns/Pointer.hxx openturns-1.9/python/src/Poisson.i000066400000000000000000000003361307543307100173410ustar00rootroot00000000000000// SWIG file Poisson.i %{ #include "openturns/Poisson.hxx" %} %include Poisson_doc.i %include openturns/Poisson.hxx namespace OT { %extend Poisson { Poisson(const Poisson & other) { return new OT::Poisson(other); } } } openturns-1.9/python/src/PoissonFactory.i000066400000000000000000000004261307543307100206710ustar00rootroot00000000000000// SWIG file PoissonFactory.i %{ #include "openturns/PoissonFactory.hxx" %} %include PoissonFactory_doc.i %include openturns/PoissonFactory.hxx namespace OT { %extend PoissonFactory { PoissonFactory(const PoissonFactory & other) { return new OT::PoissonFactory(other); } } } openturns-1.9/python/src/PoissonFactory_doc.i.in000066400000000000000000000002171307543307100221210ustar00rootroot00000000000000%feature("docstring") OT::PoissonFactory "Poisson factory. Available constructor: PoissonFactory() See also -------- DistributionFactory"openturns-1.9/python/src/Poisson_doc.i.in000066400000000000000000000022341307543307100205720ustar00rootroot00000000000000%feature("docstring") OT::Poisson "Poisson distribution. Available constructors: Poisson(*lambda=1.0*) Parameters ---------- lambda : float, :math:`\lambda > 0` Mean and variance value. Notes ----- Its probability density function is defined as: .. math:: \Prob{X = k} = \frac{\lambda^k}{k!}\;e^{-\lambda}, \, k \in \Nset Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \lambda \\ \Var{X} & = & sqrt{\lambda} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Poisson(10.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Poisson::getLambda "Accessor to the distribution's mean and variance value. Returns ------- lambda : float Distribution's mean and variance value." // --------------------------------------------------------------------- %feature("docstring") OT::Poisson::setLambda "Accessor to the distribution's mean and variance value. Parameters ---------- lambda : float Distribution's mean and variance value." openturns-1.9/python/src/Polygon.i000066400000000000000000000003361307543307100173360ustar00rootroot00000000000000// SWIG file Polygon.i %{ #include "openturns/Polygon.hxx" %} %include Polygon_doc.i %include openturns/Polygon.hxx namespace OT { %extend Polygon { Polygon(const Polygon & other) { return new OT::Polygon(other); } } } openturns-1.9/python/src/PolygonArray.i000066400000000000000000000036451307543307100203430ustar00rootroot00000000000000// SWIG file PolygonArray.i %{ #include "openturns/PolygonArray.hxx" namespace OT { template <> struct traitsPythonType { typedef _PyObject_ Type; }; template <> inline bool canConvert< _PyObject_, OT::Polygon >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Polygon *"), 0 ))) { OT::Polygon * p_it = reinterpret_cast< OT::Polygon * >( ptr ); return p_it != NULL; } return false; } template <> inline OT::Polygon convert< _PyObject_, OT::Polygon >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Polygon *"), 0))) { OT::Polygon * p_it = reinterpret_cast< OT::Polygon * >( ptr ); return *p_it; } else { throw OT::InvalidArgumentException(HERE) << "Object passed as argument is not convertible to a Polygon"; } return OT::Polygon(); } } // namespace OT %} %template(PolygonCollection) OT::Collection; %typemap(in) const PolygonCollection & { if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else { try { $1 = OT::buildCollectionFromPySequence< OT::Polygon >( $input ); } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of Polygon"); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const PolygonCollection & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::canConvertCollectionObjectFromPySequence< OT::Polygon >( $input ); } %apply const PolygonCollection & { const OT::PolygonArray::PolygonCollection & }; %include PolygonArray_doc.i %include openturns/PolygonArray.hxx namespace OT { %extend PolygonArray { PolygonArray(const PolygonArray & other) { return new OT::PolygonArray(other); } } } openturns-1.9/python/src/PolygonArray_doc.i.in000066400000000000000000000033461307543307100215730ustar00rootroot00000000000000%feature("docstring") OT::PolygonArray "Polygon array. Available constructors: PolygonArray(*legend=' '*) PolygonArray(*polygons, legend=' '*) PolygonArray(*coordinates, verticesNumber, palette, legend=' '*) Parameters ---------- legend : str Legend of the Cloud. polygons : sequence of :class:`~openturns.Polygon` Sequence of polygons. coordinates : 2-d sequence of float The list of coordinates. verticesNumber : int Number of vertices. palette : sequence of str Polygon colors. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> generator = ot.Normal(2) >>> size = 5 >>> array = [] >>> palette = ot.Drawable.BuildDefaultPalette(size) >>> for i in range(size): ... vertices = generator.getSample(3) ... array.append(ot.Polygon(vertices, palette[i], palette[size - i - 1])) >>> graph = ot.Graph('An array of polygons', 'x', 'y', True, '') >>> graph.add(ot.PolygonArray(array))" // --------------------------------------------------------------------- %feature("docstring") OT::PolygonArray::setCoordinatesAndVerticesNumber "Accessor to the coordinates of polygons. Parameters ---------- coordinates : 2-d sequence of float The list of coordinates. verticesNumber : int number of vertices." // --------------------------------------------------------------------- %feature("docstring") OT::PolygonArray::getCoordinates "Accessor to the color of each polygon. Returns ------- coordinates : :class:`~openturns.Sample` Polygon coordinates." // --------------------------------------------------------------------- %feature("docstring") OT::PolygonArray::getVerticesNumber "Accessor to the number of vertices. Returns ------- verticesNumber : int Number of vertices." openturns-1.9/python/src/Polygon_doc.i.in000066400000000000000000000023001307543307100205610ustar00rootroot00000000000000%feature("docstring") OT::Polygon "Polygon. Available constructors: Polygon(*legend=' '*) Polygon(*data, legend=' '*) Polygon(*dataX, dataY, legend=' '*) Polygon(*data, color, edgeColor, legend=' '*) Parameters ---------- data : 2-d sequence of float of dimension 2 Vertices of the polygon. dataX, dataY : two 2-d sequences of float of dimension 1, or two sequences of float List of the first and second coordinates of the vertices. legend : str Legend of the polygon. color, edgeColor : two str Fill color and the edge color. If not specified, by default it is 'blue'. Examples -------- >>> import openturns as ot >>> # Generate the data for the polygons to be drawn >>> data =[[9.0*i/51, (9.0*i/51)*(9.0*i/51)] for i in range(50)] >>> # Create an empty graph >>> myGraph = ot.Graph('Polygon example', 'x1', 'x2', True, '', 1.0) >>> myPolygon = ot.Polygon(data) >>> myPolygon.setColor('red') >>> myGraph.add(myPolygon)" // --------------------------------------------------------------------- %feature("docstring") OT::Polygon::setEdgeColor "Set the color of the Polygon edge. Parameters ---------- edgeColor : str Color of the edge of the :class:`~openturns.Polygon`." openturns-1.9/python/src/PostAnalyticalControlledImportanceSampling.i000066400000000000000000000007651307543307100264070ustar00rootroot00000000000000// SWIG file PostAnalyticalControlledImportanceSampling.i %{ #include "openturns/PostAnalyticalControlledImportanceSampling.hxx" %} %include PostAnalyticalControlledImportanceSampling_doc.i %include openturns/PostAnalyticalControlledImportanceSampling.hxx namespace OT{ %extend PostAnalyticalControlledImportanceSampling { PostAnalyticalControlledImportanceSampling(const PostAnalyticalControlledImportanceSampling & other) { return new OT::PostAnalyticalControlledImportanceSampling(other); } } } openturns-1.9/python/src/PostAnalyticalControlledImportanceSampling_doc.i.in000066400000000000000000000010461307543307100276320ustar00rootroot00000000000000%feature("docstring") OT::PostAnalyticalControlledImportanceSampling "Post analytical controlled importance sampling. Available constructor: Solver(*analyticalResult*) Parameters ---------- analyticalResult : :class:`~openturns.AnalyticalResult` Result which contains the whole information on the analytical study performed before the simulation study: in particular, the standard distribution of the standard space and the standard space design point. See also -------- PostAnalyticalSimulation, PostAnalyticalImportanceSampling" openturns-1.9/python/src/PostAnalyticalImportanceSampling.i000066400000000000000000000006451307543307100243560ustar00rootroot00000000000000// SWIG file PostAnalyticalImportanceSampling.i %{ #include "openturns/PostAnalyticalImportanceSampling.hxx" %} %include PostAnalyticalImportanceSampling_doc.i %include openturns/PostAnalyticalImportanceSampling.hxx namespace OT{ %extend PostAnalyticalImportanceSampling { PostAnalyticalImportanceSampling(const PostAnalyticalImportanceSampling & other) { return new OT::PostAnalyticalImportanceSampling(other); } } } openturns-1.9/python/src/PostAnalyticalImportanceSampling_doc.i.in000066400000000000000000000010341307543307100256010ustar00rootroot00000000000000%feature("docstring") OT::PostAnalyticalImportanceSampling "Post analytical importance sampling. Available constructor: Solver(*analyticalResult*) Parameters ---------- analyticalResult : :class:`~openturns.AnalyticalResult` Result which contains the whole information on the analytical study performed before the simulation study : in particular, the standard distribution of the standard space and the standard space design point. See also -------- PostAnalyticalSimulation, PostAnalyticalControlledImportanceSampling" openturns-1.9/python/src/PostAnalyticalSimulation.i000066400000000000000000000005461307543307100227060ustar00rootroot00000000000000// SWIG file PostAnalyticalSimulation.i %{ #include "openturns/PostAnalyticalSimulation.hxx" %} %include PostAnalyticalSimulation_doc.i %include openturns/PostAnalyticalSimulation.hxx namespace OT{ %extend PostAnalyticalSimulation { PostAnalyticalSimulation(const PostAnalyticalSimulation & other) { return new OT::PostAnalyticalSimulation(other); } } } openturns-1.9/python/src/PostAnalyticalSimulation_doc.i.in000066400000000000000000000021001307543307100241240ustar00rootroot00000000000000%feature("docstring") OT::PostAnalyticalSimulation "Post analytical simulation. See also -------- PostAnalyticalImportanceSampling, PostAnalyticalControlledImportanceSampling Notes ----- This class inherits from Simulation. The principle is to perform a simulation study to evaluate the threshold exceedance probability according to an importance density centered around the design point, in the standard space. The importance distribution is the standard distribution of the standard space. A PostAnalyticalSimulation object can be created only through its derivative classes : :class:`~openturns.PostAnalyticalImportanceSampling` or :class:`~openturns.PostAnalyticalControlledImportanceSampling`." // --------------------------------------------------------------------- %feature("docstring") OT::PostAnalyticalSimulation::getAnalyticalResult "Accessor to the analytical result. Returns ------- result : :class:`~openturns.AnalyticalResult` Result of the analytical study which has been performed just before the simulation study centered around the importance factor." openturns-1.9/python/src/PosteriorDistribution.i000066400000000000000000000005161307543307100222750ustar00rootroot00000000000000// SWIG file PosteriorDistribution.i %{ #include "openturns/PosteriorDistribution.hxx" %} %include PosteriorDistribution_doc.i %include openturns/PosteriorDistribution.hxx namespace OT { %extend PosteriorDistribution { PosteriorDistribution(const PosteriorDistribution & other) { return new OT::PosteriorDistribution(other); } } } openturns-1.9/python/src/PosteriorDistribution_doc.i.in000066400000000000000000000045721307543307100235350ustar00rootroot00000000000000%feature("docstring") OT::PosteriorDistribution "Distribution conditioned by observations. Available constructors: PosteriorDistribution(*conditional, observations*) Parameters ---------- conditional : :class:`~openturns.ConditionalDistribution` The conditional distribution. observations : 2-d sequence of float Observations. See also -------- ConditionalDistribution, MCMC Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> conditionedDistribution = ot.Normal() >>> # Conditional distribution >>> atoms = [ot.Uniform(0.0, 1.0), ot.Uniform(1.0, 2.0)] >>> conditioning = ot.ComposedDistribution(atoms) >>> conditional = ot.ConditionalDistribution(conditionedDistribution, conditioning) >>> # Observations >>> observationsSize = 5 >>> observationsDistribution = ot.Distribution(conditionedDistribution) >>> observationsDistribution.setParameter(conditioning.getMean()) >>> observations = observationsDistribution.getSample(observationsSize) >>> # Posterior distribution >>> distribution = ot.PosteriorDistribution(conditional, observations)" // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorDistribution::setConditionalDistribution "Conditional distribution accessor. Parameters ---------- conditional : :class:`~openturns.ConditionalDistribution` The conditional distribution." // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorDistribution::getConditionalDistribution "Conditional distribution accessor. Returns ------- conditional : :class:`~openturns.ConditionalDistribution` The conditional distribution." // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorDistribution::setObservations "Observations accessor. Parameters ---------- observations : 2-d sequence of float Observations." // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorDistribution::getObservations "Observations accessor. Returns ------- observations : :class:`~openturns.Sample` Observations." // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorDistribution::getLogNormalizationFactor "Normalization factor accessor. Returns ------- factor : float Log-scale normalization factor." openturns-1.9/python/src/PosteriorRandomVector.i000066400000000000000000000005161307543307100222210ustar00rootroot00000000000000// SWIG file PosteriorRandomVector.i %{ #include "openturns/PosteriorRandomVector.hxx" %} %include PosteriorRandomVector_doc.i %include openturns/PosteriorRandomVector.hxx namespace OT { %extend PosteriorRandomVector { PosteriorRandomVector(const PosteriorRandomVector & other) { return new OT::PosteriorRandomVector(other); } } } openturns-1.9/python/src/PosteriorRandomVector_doc.i.in000066400000000000000000000037031307543307100234540ustar00rootroot00000000000000%feature("docstring") OT::PosteriorRandomVector "Random vectors based on samplers. Available constructors: PosteriorRandomVector(*sampler*) Parameters ---------- sampler : :class:`~openturns.Sampler` A sampler. Notes ----- A *PosteriorRandomVector* corresponds to a random vector whose distribution poses some particular numerical difficulties such as evaluating its PDF, but which can be more easily sampled. By sampling a random vector, we means computing an i.i.d. sample according to its distribution or computing the realization of an ergodic Markov chain whose stationary distribution is the one of the random vector. Such random vector is typically encountered in Bayesian inference, where a common practice is to sample the posterior random vector of the infered parameters by Monte-Carlo Markov Chain. See also -------- RandomVector, MCMC Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # observations >>> realDist = ot.Normal(31.0, 1.2) >>> data = realDist.getSample(10) >>> # proposal distribution >>> proposalColl = [ot.Uniform(-2.0, 2.0)]*2 >>> # prior distribution >>> prior = ot.ComposedDistribution([ot.Normal(25.0, 0.1), ot.Dirac(2.0)]) >>> # choose the initial state within the prior >>> initState = prior.getRealization() >>> # conditional distribution >>> cond = ot.Normal() >>> # create a metropolis-hastings sampler >>> sampler = ot.RandomWalkMetropolisHastings(prior, cond, data, initState, proposalColl) >>> sampler.setVerbose(True) >>> sampler.setThinning(10) >>> sampler.setBurnIn(100) >>> # create a PosteriorRandomVector >>> randomVector = ot.PosteriorRandomVector(sampler) >>> # get a realization >>> print(randomVector.getRealization()) [25.0658,2]" // --------------------------------------------------------------------- %feature("docstring") OT::PosteriorRandomVector::getSampler "Get the sampler. Returns ------- sampler : :class:`~openturns.Sampler` The sampler used to create the RandomVector." openturns-1.9/python/src/Process.i000066400000000000000000000004061307543307100173230ustar00rootroot00000000000000// SWIG file Process.i %{ #include "openturns/Process.hxx" %} %include Process_doc.i OTTypedInterfaceObjectHelper(Process) %include openturns/Process.hxx namespace OT { %extend Process { Process(const Process & other) { return new OT::Process(other); } } } openturns-1.9/python/src/ProcessImplementation.i000066400000000000000000000005161307543307100222330ustar00rootroot00000000000000// SWIG file ProcessImplementation.i %{ #include "openturns/ProcessImplementation.hxx" %} %include ProcessImplementation_doc.i %include openturns/ProcessImplementation.hxx namespace OT { %extend ProcessImplementation { ProcessImplementation(const ProcessImplementation & other) { return new OT::ProcessImplementation(other); } } } openturns-1.9/python/src/ProcessImplementation_doc.i.in000066400000000000000000000247741307543307100235010ustar00rootroot00000000000000%define OT_Process_doc "Base class for stochastic processes. Notes ----- The Process class enables to model a stochastic process. A multivariate stochastic process :math:`X` of dimension :math:`d` is defined by: .. math:: X: \Omega \times\cD \mapsto \Rset^d where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n` discretized on the mesh :math:`\cM`, :math:`\vect{t}\in \cD` is a multivariate index and :math:`X(\omega, \vect{t}) \in \Rset^d`. A realization of the process :math:`X`, for a given :math:`\omega \in \Omega` is :math:`X(\omega): \cD \mapsto \Rset^d` defined by: .. math:: X(\omega)(\vect{t}) = X(\omega, \vect{t}) :math:`X_{\vect{t}}: \Omega \rightarrow \Rset^d` is the random variable at index :math:`\vect{t} \in \cD` defined by: .. math:: X_{\vect{t}}(\omega) = X(\omega, \vect{t}) A Process object can be created only through its derived classes: :class:`~openturns.SpectralGaussianProcess`, :class:`~openturns.GaussianProcess`, :class:`~openturns.CompositeProcess`, :class:`~openturns.ARMA`, :class:`~openturns.RandomWalk`, :class:`~openturns.FunctionalBasisProcess` and :class:`~openturns.WhiteNoise`." %enddef %feature("docstring") OT::ProcessImplementation OT_Process_doc // --------------------------------------------------------------------- %define OT_Process_getContinuousRealization_doc "Get a continuous realization. Returns ------- realization : :class:`~openturns.Function` According to the process, the continuous realizations are built: - either using a dedicated functional model if it exists: e.g. a functional basis process. - or using an interpolation from a discrete realization of the process on :math:`\cM`: in dimension :math:`d=1`, a linear interpolation and in dimension :math:`d \geq 2`, a piecewise constant function (the value at a given position is equal to the value at the nearest vertex of the mesh of the process)." %enddef %feature("docstring") OT::ProcessImplementation::getContinuousRealization OT_Process_getContinuousRealization_doc // --------------------------------------------------------------------- %define OT_Process_getDescription_doc "Get the description of the process. Returns ------- description : :class:`~openturns.Description` Description of the process." %enddef %feature("docstring") OT::ProcessImplementation::getDescription OT_Process_getDescription_doc // --------------------------------------------------------------------- %define OT_Process_setDescription_doc "Set the description of the process. Parameters ---------- description : sequence of str Description of the process." %enddef %feature("docstring") OT::ProcessImplementation::setDescription OT_Process_setDescription_doc // --------------------------------------------------------------------- %define OT_Process_getDimension_doc "Get the dimension of the domain :math:`\cD`. Returns ------- d : int Dimension of the domain :math:`\cD`." %enddef %feature("docstring") OT::ProcessImplementation::getDimension OT_Process_getDimension_doc // --------------------------------------------------------------------- %define OT_Process_getFuture_doc "Prediction of the :math:`N` future iterations of the process. Parameters ---------- stepNumber : int, :math:`N \geq 0` Number of future steps. size : int, :math:`size \geq 0`, optional Number of futures needed. Default is 1. Returns ------- prediction : :class:`~openturns.ProcessSample` or :class:`~openturns.TimeSeries` :math:`N` future iterations of the process. If :math:`size = 1`, *prediction* is a :class:`~openturns.TimeSeries`. Otherwise, it is a :class:`~openturns.ProcessSample`." %enddef %feature("docstring") OT::ProcessImplementation::getFuture OT_Process_getFuture_doc // --------------------------------------------------------------------- %define OT_Process_getMarginal_doc "Get the :math:`k^{th}` marginal of the random process. Parameters ---------- k : int or list of ints :math:`0 \leq k < d` Index of the marginal(s) needed. Returns ------- marginals : :class:`~openturns.Process` Process defined with marginal(s) of the random process." %enddef %feature("docstring") OT::ProcessImplementation::getMarginal OT_Process_getMarginal_doc // --------------------------------------------------------------------- %define OT_Process_getMesh_doc "Get the mesh. Returns ------- mesh : :class:`~openturns.Mesh` Mesh over which the domain :math:`\cD` is discretized." %enddef %feature("docstring") OT::ProcessImplementation::getMesh OT_Process_getMesh_doc // --------------------------------------------------------------------- %define OT_Process_setMesh_doc "Set the mesh. Parameters ---------- mesh : :class:`~openturns.Mesh` Mesh over which the domain :math:`\cD` is discretized." %enddef %feature("docstring") OT::ProcessImplementation::setMesh OT_Process_setMesh_doc // --------------------------------------------------------------------- %define OT_Process_getMeshDimension_doc "Get the dimension of the mesh. Returns ------- n : int Dimension :math:`n` of the mesh." %enddef %feature("docstring") OT::ProcessImplementation::getMeshDimension OT_Process_getMeshDimension_doc // --------------------------------------------------------------------- %define OT_Process_getRealization_doc "Get a realization of the process. Returns ------- realization : :class:`~openturns.Field` Contains a mesh over which the process is discretized and the values of the process at the vertices of the mesh." %enddef %feature("docstring") OT::ProcessImplementation::getRealization OT_Process_getRealization_doc // --------------------------------------------------------------------- %define OT_Process_getSample_doc "Get :math:`n` realizations of the process. Parameters ---------- n : int, :math:`n \geq 0` Number of realizations of the process needed. Returns ------- processSample : :class:`~openturns.ProcessSample` :math:`n` realizations of the random process. A process sample is a collection of fields which share the same mesh :math:`\cM \in \Rset^n`." %enddef %feature("docstring") OT::ProcessImplementation::getSample OT_Process_getSample_doc // --------------------------------------------------------------------- %define OT_Process_getSpatialDimension_doc "Get the dimension of the domain :math:`\cD`. Returns ------- n : int Dimension of the domain :math:`\cD`: :math:`n`." %enddef %feature("docstring") OT::ProcessImplementation::getSpatialDimension OT_Process_getSpatialDimension_doc // --------------------------------------------------------------------- %define OT_Process_getTimeGrid_doc "Get the time grid of observation of the process. Returns ------- timeGrid : :class:`~openturns.RegularGrid` Time grid of a process when the mesh associated to the process can be interpreted as a :class:`~openturns.RegularGrid`. We check if the vertices of the mesh are scalar and are regularly spaced in :math:`\Rset` but we don't check if the connectivity of the mesh is conform to the one of a regular grid (without any hole and composed of ordered instants)." %enddef %feature("docstring") OT::ProcessImplementation::getTimeGrid OT_Process_getTimeGrid_doc // --------------------------------------------------------------------- %define OT_Process_setTimeGrid_doc "Set the time grid of observation of the process. Returns ------- timeGrid : :class:`~openturns.RegularGrid` Time grid of observation of the process when the mesh associated to the process can be interpreted as a :class:`~openturns.RegularGrid`. We check if the vertices of the mesh are scalar and are regularly spaced in :math:`\Rset` but we don't check if the connectivity of the mesh is conform to the one of a regular grid (without any hole and composed of ordered instants)." %enddef %feature("docstring") OT::ProcessImplementation::setTimeGrid OT_Process_setTimeGrid_doc // --------------------------------------------------------------------- %define OT_Process_isComposite_doc "Test whether the process is composite or not. Returns ------- isComposite : bool *True* if the process is composite (built upon a function and a process)." %enddef %feature("docstring") OT::ProcessImplementation::isComposite OT_Process_isComposite_doc // --------------------------------------------------------------------- %define OT_Process_isNormal_doc "Test whether the process is normal or not. Returns ------- isNormal : bool *True* if the process is normal. Notes ----- A stochastic process is normal if all its finite dimensional joint distributions are normal, which means that for all :math:`k \in \Nset` and :math:`I_k \in \Nset^*`, with :math:`cardI_k=k`, there is :math:`\vect{m}_1, \dots, \vect{m}_k \in \Rset^d` and :math:`\mat{C}_{1,\dots,k}\in\mathcal{M}_{kd,kd}(\Rset)` such that: .. math:: \Expect{\exp\left\{i\Tr{\vect{X}}_{I_k} \vect{U}_{k} \right\}} = \exp{\left\{i\Tr{\vect{U}}_{k}\vect{M}_{k}-\frac{1}{2}\Tr{\vect{U}}_{k}\mat{C}_{1,\dots,k}\vect{U}_{k}\right\}} where :math:`\Tr{\vect{X}}_{I_k} = (\Tr{X}_{\vect{t}_1}, \hdots, \Tr{X}_{\vect{t}_k})`, :math:`\\Tr{vect{U}}_{k} = (\Tr{\vect{u}}_{1}, \hdots, \Tr{\vect{u}}_{k})` and :math:`\Tr{\vect{M}}_{k} = (\Tr{\vect{m}}_{1}, \hdots, \Tr{\vect{m}}_{k})` and :math:`\mat{C}_{1,\dots,k}` is the symmetric matrix: .. math:: \mat{C}_{1,\dots,k} = \left( \begin{array}{cccc} C(\vect{t}_1, \vect{t}_1) &C(\vect{t}_1, \vect{t}_2) & \hdots & C(\vect{t}_1, \vect{t}_{k}) \\ \hdots & C(\vect{t}_2, \vect{t}_2) & \hdots & C(\vect{t}_2, \vect{t}_{k}) \\ \hdots & \hdots & \hdots & \hdots \\ \hdots & \hdots & \hdots & C(\vect{t}_{k}, \vect{t}_{k}) \end{array} \right) A normal process is entirely defined by its mean function :math:`m` and its covariance function :math:`C` (or correlation function :math:`R`)." %enddef %feature("docstring") OT::ProcessImplementation::isNormal OT_Process_isNormal_doc // --------------------------------------------------------------------- %define OT_Process_isStationary_doc "Test whether the process is stationary or not. Returns ------- isStationary : bool *True* if the process is stationary. Notes ----- A process :math:`X` is stationary if its distribution is invariant by translation: :math:`\forall k \in \Nset`, :math:`\forall (\vect{t}_1, \dots, \vect{t}_k) \in \cD`, :math:`\forall \vect{h}\in \Rset^n`, we have: .. math:: (X_{\vect{t}_1}, \dots, X_{\vect{t}_k}) \stackrel{\mathcal{D}}{=} (X_{\vect{t}_1+\vect{h}}, \dots, X_{\vect{t}_k+\vect{h}}) " %enddef %feature("docstring") OT::ProcessImplementation::isStationary OT_Process_isStationary_doc openturns-1.9/python/src/ProcessSample.i000066400000000000000000000012331307543307100204640ustar00rootroot00000000000000// SWIG file ProcessSamples.i %{ #include "openturns/ProcessSample.hxx" %} %include ProcessSample_doc.i %include openturns/ProcessSample.hxx namespace OT { %extend ProcessSample { ProcessSample(const ProcessSample & other) { return new OT::ProcessSample(other); } Field __getitem__ (SignedInteger index) const { if (index < 0) { index += self->getSize(); } return self->getField(index); } void __setitem__(SignedInteger index, const Field & field) { if (index < 0) { index += self->getSize(); } self->setField(field, index); } UnsignedInteger __len__() const { return self->getSize(); } } // ProcessSample } // OT openturns-1.9/python/src/ProcessSample_doc.i.in000066400000000000000000000145211307543307100217220ustar00rootroot00000000000000%feature("docstring") OT::ProcessSample "Collection of fields. Available constructors: ProcessSample(*mesh, K, d*) ProcessSample(*K, field*) Parameters ---------- mesh : :class:`~openturns.Mesh` The mesh shared by all the fields in the collection. K : int Number of fields in the collection. d : int Dimension of the values of the field. field : :class:`~openturns.Field` One field. Notes ----- A :class:`~openturns.ProcessSample` stores a sample of fields. We note `K` the number of fields contained in the process sample and `d` the dimension of the values associated to each vertex of the common mesh :math:`\cM \in \Rset^n`. These fields can be generated by a stochastic process. - In the first usage, we fix the common mesh with `mesh`, the number of fields contained in the sample with `K` and the dimension of the values with `d`. The values of the fields are by default fixed to zero. - In the second usage, the collection of fields is filled with `K` copies of the given field `field`. We note :math:`\vect{x}_i^k \in \Rset^d` the value of the field `k` at the vertex `i`. We note `N` the number of vertices of :math:`\cM`, with :math:`0 \leq i \leq N-1` and :math:`1 \leq k \leq K`. Examples -------- Create a bi dimensional mesh as a box: >>> import openturns as ot >>> myIndices = [10, 5] >>> myMesher = ot.IntervalMesher(myIndices) >>> lowerBound = [0.0, 0.0] >>> upperBound = [2.0, 1.0] >>> myInterval = ot.Interval(lowerBound, upperBound) >>> myMesh = myMesher.build(myInterval) Create a second order normal porcess of dimension 3: >>> amplitude = [5] >>> scale = [3, 3] >>> model = ot.ExponentialModel(scale, amplitude) >>> myProcess = ot.GaussianProcess(model, myMesh) Generate a sample of different fields: >>> n = 10 >>> mySampleFields = myProcess.getSample(n) Duplicate the same field: >>> myField = myProcess.getRealization() >>> n = 10 >>> mySampleFields2 = ot.ProcessSample(n, myField) " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::add "Add a field to the collection. Parameters ---------- field : :class:`~openturns.Field` A new field to add. This field shares the same mesh and the same dimension as the other fields of the collection. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::computeMean "Compute the mean field of the collection of fields. Returns ------- mean : :class:`~openturns.Field` The mean field has the same dimension `d` and the same mesh as the fields contained in the collection. At each vertex of the mesh, we calculate the mean of the values at this vertex of the `K` fields contained in the process sample: .. math:: \forall i \in [0,N-1], \quad \dfrac{1}{K} \sum_{k=1}^K \vect{x}_i^k " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::computeMean "Compute the mean field of the collection of fields. Returns ------- mean : :class:`~openturns.Field` The mean field has the same dimension `d` and the same mesh as the fields contained in the collection. At each vertex of the mesh, we calculate the mean of the values at this vertex of the `K` fields contained in the process sample: .. math:: \forall i \in [0,N-1], \quad \dfrac{1}{K} \sum_{k=1}^K \vect{x}_i^k " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::computeSpatialMean "Compute the spatial mean of the values of the fields. Returns ------- spatialMean : :class:`~openturns.Sample` Its size is the number `K` of fields in the collection. Its dimension is `d`. The `k` numerical point is the spatial mean of the field `k`: .. math:: \forall k \in [1,K], \quad \dfrac{1}{N}\sum_{i=0}^{N-1} \vect{x}_i^k " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::computeTemporalMean "Compute the temporal mean of the values of the fields. Returns ------- spatialMean : :class:`~openturns.Sample` Its size is the number `K` of fields in the collection. Its dimension is `d`. The `k` numerical point is the temporal mean of the field `k`: .. math:: \forall k \in [1,K], \quad \dfrac{1}{N}\sum_{i=0}^{N-1} \vect{x}_i^k This method can be used only when the mesh can be interpreted as a regular grid. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::computeQuantilePerComponent "Compute the temporal mean of the values of the fields. Parameters ---------- p : float, :math:`0 \leq p \leq 1` Order of the quantile. Returns ------- quantileField : :class:`~openturns.Field` This field has the same size and the same dimension as the fields of the collection. At each vertex of the mesh, we estimate the component-wise quantile of order `p`, using the empirical quantile. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::getSize "Get the size of the collection of fields. Returns ------- K : int Number of fields in the collection. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::getMesh "Get the mesh of the fields. Returns ------- mesh : :class:`~openturns.Mesh` The mesh shared by all the fields of the collection. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::getTimeGrid "Get the time grid of the fields. Returns ------- mesh : :class:`~openturns.RegularGrid` The time grid shared by all the fields of the collection. Can be used only if the mesh can be interpreted as a regular time grid. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::getDimension "Get the dimension of the values of fields. Returns ------- d : int Dimension of the values of the fields. " // --------------------------------------------------------------------- %feature("docstring") OT::ProcessSample::drawMarginal "Draw the selected field. Parameters ---------- indice : int Index of the field that is drawn in the graph. Returns ------- graph : :class:`~openturns.Graph` The graph of the selected field using the `interpolate` method. " openturns-1.9/python/src/Process_doc.i.in000066400000000000000000000026141307543307100205600ustar00rootroot00000000000000// Process docstrings are defined in ProcessImplementation_doc.i.in %feature("docstring") OT::Process OT_Process_doc %feature("docstring") OT::Process::getContinuousRealization OT_Process_getContinuousRealization_doc %feature("docstring") OT::Process::getDescription OT_Process_getDescription_doc %feature("docstring") OT::Process::setDescription OT_Process_setDescription_doc %feature("docstring") OT::Process::getDimension OT_Process_getDimension_doc %feature("docstring") OT::Process::getFuture OT_Process_getFuture_doc %feature("docstring") OT::Process::getMarginal OT_Process_getMarginal_doc %feature("docstring") OT::Process::getMesh OT_Process_getMesh_doc %feature("docstring") OT::Process::setMesh OT_Process_setMesh_doc %feature("docstring") OT::Process::getMeshDimension OT_Process_getMeshDimension_doc %feature("docstring") OT::Process::getRealization OT_Process_getRealization_doc %feature("docstring") OT::Process::getSample OT_Process_getSample_doc %feature("docstring") OT::Process::getSpatialDimension OT_Process_getSpatialDimension_doc %feature("docstring") OT::Process::getTimeGrid OT_Process_getTimeGrid_doc %feature("docstring") OT::Process::setTimeGrid OT_Process_setTimeGrid_doc %feature("docstring") OT::Process::isComposite OT_Process_isComposite_doc %feature("docstring") OT::Process::isNormal OT_Process_isNormal_doc %feature("docstring") OT::Process::isStationary OT_Process_isStationary_doc openturns-1.9/python/src/ProductCovarianceModel.i000066400000000000000000000005251307543307100223030ustar00rootroot00000000000000// SWIG file ProductCovarianceModel.i %{ #include "openturns/ProductCovarianceModel.hxx" %} %include ProductCovarianceModel_doc.i %include openturns/ProductCovarianceModel.hxx namespace OT{ %extend ProductCovarianceModel { ProductCovarianceModel(const ProductCovarianceModel & other) { return new OT::ProductCovarianceModel(other); } } } openturns-1.9/python/src/ProductCovarianceModel_doc.i.in000066400000000000000000000036521307543307100235410ustar00rootroot00000000000000%feature("docstring") OT::ProductCovarianceModel "Univariate covariance function defined as a product. Parameters ---------- coll : sequence of :class:`~openturns.CovarianceModel` Collection of covariance models :math:`(C_k)_{1 \leq k \leq K}` of dimension :math:`d=1`. Notes ----- The *product* covariance function is a covariance function whith dimension :math:`d=1`. It defines a covariance model from the given collection as follows. We consider the scalar stochastic process :math:`X: \Omega \times\cD \rightarrow \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The product covariance function writes: .. math:: C(\vect{s}, \vect{t}) = \prod_{k=1}^K C_k(\vect{s}_k, \vect{t}_k), \quad \forall (\vect{s}, \vect{t}) \in \cD where :math:`C_k : \cD_k \times \cD_k \rightarrow \cS_d^+(\Rset)` with :math:`\cD_k \in \Rset^{d_k}`, :math:`\cD = \cD_1 \times \dots \times \cD_K`, :math:`\cD_k \subset \Rset^{n_k}` and :math:`n1 + \dots + n_K=n`. :math:`C` also writes: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 \rho\left(\dfrac{\vect{s}}{\theta}, \dfrac{\vect{t}}{\theta}\right), \quad \forall (\vect{s}, \vect{t}) \in \cD where the amplitude is: .. math:: \sigma= \prod_{k=1}^K \sigma_k the scale is: .. math:: \Tr{\vect{\theta}}= \left(\Tr{\vect{\theta}}_1, \dots, \Tr{\vect{\theta}}_K \right) and the correlation function :math:`\rho` is: .. math:: \rho \left( \vect{s}, \vect{t} \right) = \prod_{k=1}^K \rho_k\left( \vect{s}_k, \vect{t}_k \right) Examples -------- Create a product covariance function from two exponential functions, each one defined on :math:`\Rset \times \Rset \rightarrow \cS_1^+(\Rset)`: >>> import openturns as ot >>> amplitude = [1.0] >>> scale1 = [4.0] >>> scale2 = [4.0] >>> cov1 = ot.ExponentialModel(scale1, amplitude) >>> cov2 = ot.ExponentialModel(scale2, amplitude) >>> myCovarianceModel = ot.ProductCovarianceModel([cov1, cov2])" openturns-1.9/python/src/ProductDistribution.i000066400000000000000000000004761307543307100217340ustar00rootroot00000000000000// SWIG file ProductDistribution.i %{ #include "openturns/ProductDistribution.hxx" %} %include ProductDistribution_doc.i %include openturns/ProductDistribution.hxx namespace OT { %extend ProductDistribution { ProductDistribution(const ProductDistribution & other) { return new OT::ProductDistribution(other); } } } openturns-1.9/python/src/ProductDistribution_doc.i.in000066400000000000000000000037001307543307100231570ustar00rootroot00000000000000%feature("docstring") OT::ProductDistribution "Product distribution. Helper class for defining the push-forward distribution of a given univariate distribution by a given scalar function. Available constructors: ProductDistribution(*distX, distY*) Parameters ---------- distX : :class:`~openturns.Distribution`, univariate Independant of `distY` distY : :class:`~openturns.Distribution`, univariate Independant of `distX` Returns ------- distZ : :class:`~openturns.Distribution`, univariate :math:`distZ` is the distribution of the random variable :math:`Z = XY` when :math:`(X,Y)` is a random vector with independant copula and respective marginal distributions `distX` and `distY`. Notes ----- We note :math:`Z=XY` the scalar random variable which distribution is :math:`f_Z`. .. math:: \displaystyle f_Z(z) = \int_{\Rset} f_X (t) f_{Y}(\dfrac{z}{t}) \, \dfrac{\Diff t}{|t|} with :math:`f_X`, and :math:`f_Y` the probability density functions of :math:`X` and :math:`Y`. Its first moments, if finite, are defined as: .. math:: :nowrap: \begin{eqnarray*} \Expect{Z} & = & \Expect{X} \Expect{Y} \\ \Var{Z} & = & \Expect{X}^2 \Var{Y} + \Expect{Y}^2 \Var{X} + \Var{X} \Var{Y} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distX = ot.Normal(-1.0, 1.0) >>> distY = ot.Uniform(-1.0, 1.0) >>> distZ = ot.ProductDistribution(distX, distY) Draw a sample: >>> sample = distZ.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ProductDistribution::getLeft "Accessor to the left distribution of the product. Returns ------- distX : :class:`~openturns.Distribution`." // --------------------------------------------------------------------- %feature("docstring") OT::ProductDistribution::getRight "Accessor to the right distribution of the product. Returns ------- distY : :class:`~openturns.Distribution`." openturns-1.9/python/src/ProductEvaluation.i000066400000000000000000000004521307543307100213560ustar00rootroot00000000000000// SWIG file ProductEvaluation.i OTAutodoc(ProductEvaluation) %{ #include "openturns/ProductEvaluation.hxx" %} %include openturns/ProductEvaluation.hxx namespace OT { %extend ProductEvaluation { ProductEvaluation(const ProductEvaluation & other) { return new OT::ProductEvaluation(other); } } } openturns-1.9/python/src/ProductFunction.i000066400000000000000000000004361307543307100210360ustar00rootroot00000000000000// SWIG file ProductFunction.i %{ #include "openturns/ProductFunction.hxx" %} %include ProductFunction_doc.i %include openturns/ProductFunction.hxx namespace OT { %extend ProductFunction { ProductFunction(const ProductFunction & other) { return new OT::ProductFunction(other); } } } openturns-1.9/python/src/ProductFunction_doc.i.in000066400000000000000000000010741307543307100222670ustar00rootroot00000000000000%feature("docstring") OT::ProductFunction "Product function. Available constructor: ProductFunction(*f, g*) The function is the product function :math:`f\times g`. Parameters ---------- f,g : two :class:`~openturns.FunctionImplementation` The functions to multiply. Examples -------- >>> import openturns as ot >>> g = ot.SymbolicFunction(['x1', 'x2'], ['x1']) >>> f = ot.SymbolicFunction(['x1', 'x2'], ['x2']) >>> product = ot.ProductFunction(f.getImplementation(), g.getImplementation()) >>> print(product([3, 4])) [12] Or, shorter: >>> product = f * g" openturns-1.9/python/src/ProductGradient.i000066400000000000000000000004321307543307100210020ustar00rootroot00000000000000// SWIG file ProductGradient.i OTAutodoc(ProductGradient) %{ #include "openturns/ProductGradient.hxx" %} %include openturns/ProductGradient.hxx namespace OT { %extend ProductGradient { ProductGradient(const ProductGradient & other) { return new OT::ProductGradient(other); } } } openturns-1.9/python/src/ProductHessian.i000066400000000000000000000004221307543307100206360ustar00rootroot00000000000000// SWIG file ProductHessian.i OTAutodoc(ProductHessian) %{ #include "openturns/ProductHessian.hxx" %} %include openturns/ProductHessian.hxx namespace OT { %extend ProductHessian { ProductHessian(const ProductHessian & other) { return new OT::ProductHessian(other); } } } openturns-1.9/python/src/ProductPolynomialEvaluation.i000066400000000000000000000010501307543307100234150ustar00rootroot00000000000000// SWIG file ProductPolynomialEvaluation.i %{ #include "openturns/ProductPolynomialEvaluation.hxx" %} %include ProductPolynomialEvaluation_doc.i %template(PolynomialCollection) OT::Collection; %template(PolynomialPersistentCollection) OT::PersistentCollection; %include openturns/ProductPolynomialEvaluation.hxx namespace OT { %extend ProductPolynomialEvaluation { ProductPolynomialEvaluation(const ProductPolynomialEvaluation & other) { return new OT::ProductPolynomialEvaluation(other); } } } openturns-1.9/python/src/ProductPolynomialEvaluation_doc.i.in000066400000000000000000000016031307543307100246530ustar00rootroot00000000000000%feature("docstring") OT::ProductPolynomialEvaluation "Product polynomial evaluation implementation. Available constructors: ProductPolynomialEvaluation(*polCollection*) Parameters ---------- distCol : :class:`~openturns.PolynomialCollection` A collection of :class:`~openturns.UniVariatePolynomial`. Notes ----- It returns the product of the polynomials of *polCollection*. The input dimension *n* is equal to the number of polynomials in *polCollection*. Examples -------- >>> import openturns as ot >>> P1 = ot.UniVariatePolynomial([1.0, 2.0, 3.0, 0]) >>> P2 = ot.UniVariatePolynomial([3.0, 2.0, 4.0, 5.0]) >>> P3 = ot.UniVariatePolynomial([-1.0, 0.0, 4, 0.0]) >>> polyCol = ot.PolynomialCollection(1, P1) >>> polyCol.add(P2) >>> polyCol.add(P3) >>> productPoly = ot.ProductPolynomialEvaluation(polyCol) >>> productPoly([2, 1, 3]) class=Point name=Unnamed dimension=1 values=[8330] " openturns-1.9/python/src/ProjectionStrategy.i000066400000000000000000000005471307543307100215520ustar00rootroot00000000000000// SWIG file ProjectionStrategy.i %{ #include "openturns/ProjectionStrategy.hxx" %} %include ProjectionStrategy_doc.i OTTypedInterfaceObjectHelper(ProjectionStrategy) %include openturns/ProjectionStrategy.hxx namespace OT{ %extend ProjectionStrategy { ProjectionStrategy(const ProjectionStrategy & other) { return new OT::ProjectionStrategy(other); } } } openturns-1.9/python/src/ProjectionStrategyImplementation.i000066400000000000000000000006451307543307100244570ustar00rootroot00000000000000// SWIG file ProjectionStrategyImplementation.i %{ #include "openturns/ProjectionStrategyImplementation.hxx" %} %include ProjectionStrategyImplementation_doc.i %include openturns/ProjectionStrategyImplementation.hxx namespace OT{ %extend ProjectionStrategyImplementation { ProjectionStrategyImplementation(const ProjectionStrategyImplementation & other) { return new OT::ProjectionStrategyImplementation(other); } } } openturns-1.9/python/src/ProjectionStrategyImplementation_doc.i.in000066400000000000000000000150321307543307100257050ustar00rootroot00000000000000%define OT_ProjectionStrategy_doc "Base class for the evaluation strategies of the approximation coefficients. Available constructors: ProjectionStrategy(*projectionStrategy*) Parameters ---------- projectionStrategy : :class:`~openturns.ProjectionStrategy` A projection strategy which is a :class:`~openturns.LeastSquaresStrategy` or an :class:`~openturns.IntegrationStrategy`. See also -------- FunctionalChaosAlgorithm, LeastSquaresStrategy, IntegrationStrategy Notes ----- Consider :math:`\vect{Y} = g(\vect{X})` with :math:`g: \Rset^d \rightarrow \Rset^p`, :math:`\vect{X} \sim \cL_{\vect{X}}` and :math:`\vect{Y}` with finite variance: :math:`g\in L_{\cL_{\vect{X}}}^2(\Rset^d, \Rset^p)`. The functional chaos expansion approximates :math:`\vect{Y}` using an isoprobabilistic transformation *T* and an orthonormal multivariate basis :math:`(\Psi_k)_{k \in \Nset}` of :math:`L^2_{\mu}(\Rset^d,\Rset)`. See :class:`~openturns.FunctionalChaosAlgorithm` to get more details. The meta model of :math:`g`, based on the functional chaos decomposition of :math:`f = g \circ T^{-1}` writes: .. math:: \tilde{g} = \sum_{k \in K} \vect{\alpha}_k \Psi_k \circ T where *K* is a non empty finite set of indices, whose cardinality is denoted by *P*. We detail the case where :math:`p=1`. The vector :math:`\vect{\alpha} = (\alpha_k)_{k \in K}` is equivalently defined by: .. math:: :label: defArgMin \vect{\alpha} = \argmin_{\vect{\alpha} \in \Rset^K} \Expect{ \left( g \circ T^{-1}(\vect{Z}) - \sum_{k \in K} \alpha_k \Psi_k (\vect{Z})\right)^2 } and: .. math:: :label: defEsp \alpha_k = _{\mu} = \Expect{ g \circ T^{-1}(\vect{Z}) \Psi_k (\vect{Z}) } where :math:`\vect{Z} = T(\vect{X})` and the mean :math:`\Expect{.}` is evaluated with respect to the measure :math:`\mu`. It corresponds to two points of view: - relation :eq:`defArgMin` means that the coefficients :math:`(\alpha_k)_{k \in K}` minimize the quadratic error between the model and the polynomial approximation. Use :class:`~openturns.LeastSquaresStrategy`. - relation :eq:`defEsp` means that :math:`\alpha_k` is the scalar product of the model with the *k-th* element of the orthonormal basis :math:`(\Psi_k)_{k \in \Nset}`. Use :class:`~openturns.IntegrationStrategy`. In both cases, the mean :math:`\Expect{.}` is approximated by a linear quadrature formula: .. math:: :label: approxEsp \Expect{ f(\vect{Z})} \simeq \sum_{i \in I} \omega_i f(\Xi_i) where *f* is a function in :math:`L^1(\mu)`. In the approximation :eq:`approxEsp`, the set *I*, the points :math:`(\Xi_i)_{i \in I}` and the weights :math:`(\omega_i)_{i \in I}` are evaluated from different methods implemented in OpenTURNS in the :class:`~openturns.WeightedExperiment`. The convergence criterion used to evaluate the coefficients is based on the residual value defined in the :class:`~openturns.FunctionalChaosAlgorithm`." %enddef %feature("docstring") OT::ProjectionStrategyImplementation OT_ProjectionStrategy_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getCoefficients_doc "Accessor to the coefficients. Returns ------- coef : :class:`~openturns.Point` Coefficients :math:`(\alpha_k)_{k \in K}`." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getCoefficients OT_ProjectionStrategy_getCoefficients_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getExperiment_doc "Accessor to the experiments. Returns ------- exp : :class:`~openturns.WeightedExperiment` Weighted experiment used to evaluate the coefficients." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getExperiment OT_ProjectionStrategy_getExperiment_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getInputSample_doc "Accessor to the input sample. Returns ------- X : :class:`~openturns.Sample` Input Sample." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getInputSample OT_ProjectionStrategy_getInputSample_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getMeasure_doc "Accessor to the measure. Returns ------- mu : Distribution Measure :math:`\mu` defining the scalar product." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getMeasure OT_ProjectionStrategy_getMeasure_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getOutputSample_doc "Accessor to the output sample. Returns ------- Y : :class:`~openturns.Sample` Output Sample." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getOutputSample OT_ProjectionStrategy_getOutputSample_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getRelativeError_doc "Accessor to the relative error. Returns ------- e : float Relative error." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getRelativeError OT_ProjectionStrategy_getRelativeError_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getResidual_doc "Accessor to the residual. Returns ------- er : float Residual error." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getResidual OT_ProjectionStrategy_getResidual_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_getWeights_doc "Accessor to the weights. Returns ------- w : :class:`~openturns.Point` Weights of the design of experiments." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::getWeights OT_ProjectionStrategy_getWeights_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_setExperiment_doc "Accessor to the design of experiment. Parameters ---------- exp : :class:`~openturns.WeightedExperiment` Weighted design of experiment." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::setExperiment OT_ProjectionStrategy_setExperiment_doc // --------------------------------------------------------------------- %define OT_ProjectionStrategy_setMeasure_doc "Accessor to the measure. Parameters ---------- m : Distribution Measure :math:`\mu` defining the scalar product." %enddef %feature("docstring") OT::ProjectionStrategyImplementation::setMeasure OT_ProjectionStrategy_setMeasure_doc openturns-1.9/python/src/ProjectionStrategy_doc.i.in000066400000000000000000000022031307543307100227730ustar00rootroot00000000000000// ProjectionStrategy docstrings are defined in ProjectionStrategyImplementation_doc.i.in %feature("docstring") OT::ProjectionStrategy OT_ProjectionStrategy_doc %feature("docstring") OT::ProjectionStrategy::getCoefficients OT_ProjectionStrategy_getCoefficients_doc %feature("docstring") OT::ProjectionStrategy::getExperiment OT_ProjectionStrategy_getExperiment_doc %feature("docstring") OT::ProjectionStrategy::getInputSample OT_ProjectionStrategy_getInputSample_doc %feature("docstring") OT::ProjectionStrategy::getMeasure OT_ProjectionStrategy_getMeasure_doc %feature("docstring") OT::ProjectionStrategy::getOutputSample OT_ProjectionStrategy_getOutputSample_doc %feature("docstring") OT::ProjectionStrategy::getRelativeError OT_ProjectionStrategy_getRelativeError_doc %feature("docstring") OT::ProjectionStrategy::getResidual OT_ProjectionStrategy_getResidual_doc %feature("docstring") OT::ProjectionStrategy::getWeights OT_ProjectionStrategy_getWeights_doc %feature("docstring") OT::ProjectionStrategy::setExperiment OT_ProjectionStrategy_setExperiment_doc %feature("docstring") OT::ProjectionStrategy::setMeasure OT_ProjectionStrategy_setMeasure_docopenturns-1.9/python/src/PythonDistribution.cxx000066400000000000000000000752231307543307100221510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' Distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/swig_runtime.hxx" #include "openturns/PythonDistribution.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonDistribution); static const Factory Factory_PythonDistribution; /* Default constructor */ PythonDistribution::PythonDistribution() : DistributionImplementation(), pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonDistribution::PythonDistribution(PyObject * pyObject) : DistributionImplementation(), pyObj_(pyObject) { // Python memory management is not thread-safe setParallel(false); Py_XINCREF( pyObj_ ); if ( !PyObject_HasAttrString( pyObj_, const_cast("computeCDF") ) ) throw InvalidArgumentException(HERE) << "Error: the given object does not have a computeCDF() method."; // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString ( pyObj_, const_cast( "__class__" ) ) ); ScopedPyObjectPointer name(PyObject_GetAttrString( cls.get(), const_cast( "__name__" ) ) ); setName( checkAndConvert<_PyString_, String>(name.get()) ); // Set dimension ScopedPyObjectPointer dim(PyObject_CallMethod ( pyObj_, const_cast( "getDimension" ), const_cast( "()" ) )); setDimension(checkAndConvert< _PyInt_, UnsignedInteger >( dim.get() )); if ( !PyObject_HasAttrString( pyObj_, const_cast("computeCDF") ) ) throw InvalidArgumentException(HERE) << "Error: the given object does not have a computeCDF() method."; if ((getDimension() > 1) && !PyObject_HasAttrString( pyObj_, const_cast("getRange") ) ) throw InvalidArgumentException(HERE) << "Error: the given object does not have a getRange() method."; computeRange(); } /* Virtual constructor */ PythonDistribution * PythonDistribution::clone() const { return new PythonDistribution(*this); } /* Copy constructor */ PythonDistribution::PythonDistribution(const PythonDistribution & other) : DistributionImplementation(other), pyObj_(other.pyObj_) { Py_XINCREF( pyObj_ ); } /* Destructor */ PythonDistribution::~PythonDistribution() { Py_XDECREF( pyObj_ ); } /* Comparison operator */ Bool PythonDistribution::operator ==(const PythonDistribution & other) const { return true; } /* String converter */ String PythonDistribution::__repr__() const { OSS oss; oss << "class=" << PythonDistribution::GetClassName() << " name=" << getName() << " description=" << getDescription(); return oss; } /* String converter */ String PythonDistribution::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonDistribution::GetClassName() << " name=" << getName(); return oss; } /* Here is the interface that all derived class must implement */ Point PythonDistribution::getRealization() const { if (PyObject_HasAttrString(pyObj_, const_cast("getRealization") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj_, const_cast( "getRealization" ), const_cast( "()" ) ) ); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Realization returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getRealization(); } } /* Numerical sample accessor */ Sample PythonDistribution::getSample(const UnsignedInteger size) const { if (PyObject_HasAttrString(pyObj_, const_cast("getSample"))) { ScopedPyObjectPointer methodName(convert< String, _PyString_ >("getSample")); ScopedPyObjectPointer sizeArg(convert< UnsignedInteger, _PyInt_ >( size )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), sizeArg.get(), NULL)); if (callResult.isNull()) { handleException(); } Sample result(convert<_PySequence_, Sample>(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Sample returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); if (result.getSize() != size) throw InvalidDimensionException(HERE) << "Sample returned by PythonDistribution has incorrect size. Got " << result.getSize() << ". Expected" << size; return result; } else { return DistributionImplementation::getSample(size); } } /* Get the DDF of the distribution */ Point PythonDistribution::computeDDF(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeDDF"))) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>( "computeDDF" )); ScopedPyObjectPointer point(convert(inP)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != dimension) throw InvalidDimensionException(HERE) << "DDF returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << dimension; return result; } else { return DistributionImplementation::computeDDF(inP); } } /* Get the PDF of the distribution */ Scalar PythonDistribution::computePDF(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computePDF"))) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>("computePDF")); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } else { return DistributionImplementation::computePDF(inP); } } /* Get the PDF of the distribution */ Scalar PythonDistribution::computeLogPDF(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeLogPDF"))) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>( "computeLogPDF" )); ScopedPyObjectPointer point(convert< Point, _PySequence_ >( inP )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } else { return DistributionImplementation::computeLogPDF(inP); } } /* Get the CDF of the distribution */ Scalar PythonDistribution::computeCDF(const Point & inP) const { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>("computeCDF")); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } /* Get the complementary CDF of the distribution */ Scalar PythonDistribution::computeComplementaryCDF(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeComplementaryCDF") ) ) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>( "computeComplementaryCDF" )); ScopedPyObjectPointer point(convert< Point, _PySequence_ >( inP )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs ( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } else { return DistributionImplementation::computeComplementaryCDF(inP); } } /* Get the PDFGradient of the distribution */ Point PythonDistribution::computeQuantile(const Scalar prob, const Bool tail) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeQuantile"))) { const UnsignedInteger dimension = getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>("computeQuantile")); ScopedPyObjectPointer probArg(convert< Scalar, _PyFloat_ >(prob)); ScopedPyObjectPointer tailArg(convert< Bool, _PyBool_ >(tail)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), probArg.get(), tailArg.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != dimension) throw InvalidDimensionException(HERE) << "Quantile returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << dimension; return result; } else { return DistributionImplementation::computeQuantile(prob, tail); } } /* Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex PythonDistribution::computeCharacteristicFunction(const Scalar x) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeCharacteristicFunction"))) { ScopedPyObjectPointer methodName(convert< String, _PyString_>("computeCharacteristicFunction")); ScopedPyObjectPointer cX(convert< Scalar, _PyFloat_ >( x )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), cX.get(), NULL)); if (callResult.isNull()) { handleException(); } Complex result = convert< _PyComplex_, Complex >(callResult.get()); return result; } else { return DistributionImplementation::computeCharacteristicFunction( x ); } } /* Get the PDFGradient of the distribution */ Point PythonDistribution::computePDFGradient(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computePDFGradient"))) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>("computePDFGradient")); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != dimension) throw InvalidDimensionException(HERE) << "PDFGradient returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << dimension; return result; } else { return DistributionImplementation::computePDFGradient(inP); } } /* Get the CDFGradient of the distribution */ Point PythonDistribution::computeCDFGradient(const Point & inP) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeCDFGradient"))) { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getDimension(); ScopedPyObjectPointer methodName(convert< String, _PyString_>( "computeCDFGradient")); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != dimension) throw InvalidDimensionException(HERE) << "CDFGradient returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << dimension; return result; } else { return DistributionImplementation::computeCDFGradient(inP); } } /* Get the quantile of the distribution */ Scalar PythonDistribution::computeScalarQuantile(const Scalar prob, const Bool tail) const { if (PyObject_HasAttrString(pyObj_, const_cast("computeScalarQuantile") ) ) { ScopedPyObjectPointer methodName(convert< String, _PyString_>("computeScalarQuantile")); ScopedPyObjectPointer cProb(convert< Scalar, _PyFloat_ >( tail ? 1 - prob : prob )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), cProb.get(), NULL)); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } else { return DistributionImplementation::computeScalarQuantile(prob, tail); } } /* Get the roughness, i.e. the L2-norm of the PDF */ Scalar PythonDistribution::getRoughness() const { if (PyObject_HasAttrString(pyObj_, const_cast("getMean"))) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "getRoughness" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Scalar result = convert< _PyFloat_, Scalar >(callResult.get()); return result; } else { return DistributionImplementation::getRoughness(); } } /* Mean accessor */ Point PythonDistribution::getMean() const { if (PyObject_HasAttrString(pyObj_, const_cast("getMean"))) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "getMean" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Mean returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getMean(); } } /* Standard deviation accessor */ Point PythonDistribution::getStandardDeviation() const { if (PyObject_HasAttrString(pyObj_, const_cast("getStandardDeviation") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "getStandardDeviation" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Standard deviation returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getStandardDeviation(); } } /* Skewness accessor */ Point PythonDistribution::getSkewness() const { if (PyObject_HasAttrString(pyObj_, const_cast("getSkewness") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "getSkewness" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Skewness returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getSkewness(); } } /* Kurtosis accessor */ Point PythonDistribution::getKurtosis() const { if (PyObject_HasAttrString(pyObj_, const_cast("getKurtosis") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "getKurtosis" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Kurtosis returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getKurtosis(); } } /* Get the raw moments of the distribution */ Point PythonDistribution::getStandardMoment(const UnsignedInteger n) const { if (PyObject_HasAttrString(pyObj_, const_cast("getStandardMoment") ) ) { ScopedPyObjectPointer methodName(convert< String, _PyString_>( "getStandardMoment" )); ScopedPyObjectPointer nArg(convert< UnsignedInteger, _PyInt_ >( n )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), nArg.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Moment returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getStandardMoment( n ); } } /* Get the raw moments of the distribution */ Point PythonDistribution::getMoment(const UnsignedInteger n) const { if (PyObject_HasAttrString(pyObj_, const_cast("getMoment") ) ) { ScopedPyObjectPointer methodName(convert< String, _PyString_>( "getMoment" )); ScopedPyObjectPointer nArg(convert< UnsignedInteger, _PyInt_ >( n )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), nArg.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Moment returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getMoment( n ); } } /* Get the centered moments of the distribution */ Point PythonDistribution::getCenteredMoment(const UnsignedInteger n) const { if (PyObject_HasAttrString(pyObj_, const_cast("getCenteredMoment") ) ) { ScopedPyObjectPointer methodName(convert< String, _PyString_>( "getCenteredMoment" )); ScopedPyObjectPointer nArg(convert< UnsignedInteger, _PyInt_ >( n )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), nArg.get(), NULL)); if (callResult.isNull()) { handleException(); } Point result(convert< _PySequence_, Point >(callResult.get())); if (result.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Centered moment returned by PythonDistribution has incorrect dimension. Got " << result.getDimension() << ". Expected" << getDimension(); return result; } else { return DistributionImplementation::getCenteredMoment( n ); } } /* Check if the distribution is a copula */ Bool PythonDistribution::isCopula() const { if (PyObject_HasAttrString(pyObj_, const_cast("isCopula") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "isCopula" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::isCopula(); } } /* Check if the distribution is elliptical */ Bool PythonDistribution::isElliptical() const { if (PyObject_HasAttrString(pyObj_, const_cast("isElliptical") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "isElliptical" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::isElliptical(); } } /* Check if the distribution is continuous */ Bool PythonDistribution::isContinuous() const { if (PyObject_HasAttrString(pyObj_, const_cast("isContinuous") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj_, const_cast( "isContinuous" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::isContinuous(); } } /* Check if the distribution is integral */ Bool PythonDistribution::isIntegral() const { if (PyObject_HasAttrString(pyObj_, const_cast("isIntegral") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "isIntegral" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::isIntegral(); } } /* Tell if the distribution has elliptical copula */ Bool PythonDistribution::hasEllipticalCopula() const { if (PyObject_HasAttrString(pyObj_, const_cast("hasEllipticalCopula") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "hasEllipticalCopula" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::hasEllipticalCopula(); } } /* Tell if the distribution has independent copula */ Bool PythonDistribution::hasIndependentCopula() const { if (PyObject_HasAttrString(pyObj_, const_cast("hasIndependentCopula") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod ( pyObj_, const_cast( "hasIndependentCopula" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Bool result = convert< _PyBool_, Bool >(callResult.get()); return result; } else { return DistributionImplementation::hasIndependentCopula(); } } /* Get the distribution of the marginal distribution corresponding to indices dimensions */ PythonDistribution::Implementation PythonDistribution::getMarginal(const Indices & indices) const { if (PyObject_HasAttrString(pyObj_, const_cast("getMarginal"))) { ScopedPyObjectPointer methodName(convert< String, _PyString_ >("getMarginal")); ScopedPyObjectPointer indicesArg(convert< Indices, _PySequence_ >(indices)); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs(pyObj_, methodName.get(), indicesArg.get(), NULL)); if (callResult.isNull()) { handleException(); } void * ptr = 0; OT::Distribution * p_outDist = 0; if (SWIG_IsOK(SWIG_ConvertPtr(callResult.get(), &ptr, SWIG_TypeQuery("OT::Distribution *"), 0))) { p_outDist = reinterpret_cast< OT::Distribution * >(ptr); } else { throw InvalidArgumentException(HERE) << "Output value for " << getName() << ".getMarginal method is not a Distribution"; } return p_outDist->getImplementation(); } else { return DistributionImplementation::getMarginal(indices); } } /* Method save() stores the object through the StorageManager */ void PythonDistribution::save(Advocate & adv) const { DistributionImplementation::save( adv ); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonDistribution::load(Advocate & adv) { DistributionImplementation::load( adv ); pickleLoad(adv, pyObj_); } template <> inline Interval convert< _PyObject_, Interval >(PyObject * pyObj) { Point lowerBound; if ( PyObject_HasAttrString( pyObj, const_cast("getLowerBound") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj, const_cast( "getLowerBound" ), const_cast( "()" ) )); check< _PySequence_ >(callResult.get()); if (callResult.isNull()) { handleException(); } lowerBound = convert< _PySequence_, Point >(callResult.get()); } Point upperBound; if ( PyObject_HasAttrString( pyObj, const_cast("getUpperBound") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj, const_cast( "getUpperBound" ), const_cast( "()" ) )); check< _PySequence_ >(callResult.get()); if (callResult.isNull()) { handleException(); } upperBound = convert< _PySequence_, Point >(callResult.get()); } Indices finiteLowerBound; if ( PyObject_HasAttrString( pyObj, const_cast("getFiniteLowerBound") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj, const_cast( "getFiniteLowerBound" ), const_cast( "()" ) )); check< _PySequence_ >(callResult.get()); if (callResult.isNull()) { handleException(); } finiteLowerBound = convert< _PySequence_, Indices >(callResult.get()); } Indices finiteUpperBound; if ( PyObject_HasAttrString( pyObj, const_cast("getFiniteUpperBound") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj, const_cast( "getFiniteUpperBound" ), const_cast( "()" ) )); check< _PySequence_ >(callResult.get()); if (callResult.isNull()) { handleException(); } finiteUpperBound = convert< _PySequence_, Indices >(callResult.get()); } return Interval(lowerBound, upperBound, finiteLowerBound, finiteUpperBound); } /* Compute the numerical range of the distribution given the parameters values */ void PythonDistribution::computeRange() { if (PyObject_HasAttrString(pyObj_, const_cast("getRange") ) ) { ScopedPyObjectPointer callResult(PyObject_CallMethod( pyObj_, const_cast( "getRange" ), const_cast( "()" ) )); if (callResult.isNull()) { handleException(); } Interval range(convert< _PyObject_, Interval >(callResult.get())); setRange(range); } else { DistributionImplementation::computeRange(); } } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonEvaluation.cxx000066400000000000000000000267051307543307100216020ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonEvaluation implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PythonEvaluation.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS typedef EvaluationImplementation::CacheKeyType CacheKeyType; typedef EvaluationImplementation::CacheValueType CacheValueType; typedef EvaluationImplementation::CacheType CacheType; CLASSNAMEINIT(PythonEvaluation); static const Factory Factory_PythonEvaluation; /* Default constructor */ PythonEvaluation::PythonEvaluation() : EvaluationImplementation() , pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonEvaluation::PythonEvaluation(PyObject * pyCallable) : EvaluationImplementation() , pyObj_(pyCallable) { Py_XINCREF(pyCallable); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString (pyObj_, const_cast("__class__"))); ScopedPyObjectPointer name(PyObject_GetAttrString(cls.get(), const_cast("__name__" ))); setName(convert< _PyString_, String >(name.get())); const UnsignedInteger inputDimension = getInputDimension(); const UnsignedInteger outputDimension = getOutputDimension(); Description description(inputDimension + outputDimension); ScopedPyObjectPointer descIn(PyObject_CallMethod(pyObj_, const_cast("getInputDescription"), const_cast("()"))); if (descIn.get() && PySequence_Check(descIn.get()) && (PySequence_Size(descIn.get()) == (SignedInteger)inputDimension)) { Description inputDescription(convert< _PySequence_, Description >(descIn.get())); for (UnsignedInteger i = 0; i < inputDimension; ++ i) { description[i] = inputDescription[i]; } } else for (UnsignedInteger i = 0; i < inputDimension; ++ i) description[i] = (OSS() << "x" << i); ScopedPyObjectPointer descOut(PyObject_CallMethod(pyObj_, const_cast("getOutputDescription"), const_cast("()"))); if (descOut.get() && PySequence_Check(descOut.get()) && (PySequence_Size(descOut.get()) == (SignedInteger)outputDimension)) { Description outputDescription(convert< _PySequence_, Description >(descOut.get())); for (UnsignedInteger i = 0; i < outputDimension; ++ i) { description[inputDimension + i] = outputDescription[i]; } } else for (UnsignedInteger i = 0; i < outputDimension; ++ i) description[inputDimension + i] = (OSS() << "y" << i); setDescription(description); } /* Virtual constructor */ PythonEvaluation * PythonEvaluation::clone() const { return new PythonEvaluation(*this); } /* Copy constructor */ PythonEvaluation::PythonEvaluation(const PythonEvaluation & other) : EvaluationImplementation(other) , pyObj_(other.pyObj_) { Py_XINCREF(pyObj_); } /* Destructor */ PythonEvaluation::~PythonEvaluation() { Py_XDECREF(pyObj_); } /* Comparison operator */ Bool PythonEvaluation::operator ==(const PythonEvaluation & other) const { return true; } /* String converter */ String PythonEvaluation::__repr__() const { OSS oss; oss << "class=" << PythonEvaluation::GetClassName() << " name=" << getName() << " description=" << getDescription() << " parameter=" << getParameter(); return oss; } /* String converter */ String PythonEvaluation::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonEvaluation::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool PythonEvaluation::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Operator () */ Point PythonEvaluation::operator() (const Point & inP) const { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getInputDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getInputDimension(); Point outP; CacheKeyType inKey(inP.getCollection()); if (p_cache_->isEnabled() && p_cache_->hasKey(inKey)) { outP = Point::ImplementationType(p_cache_->find(inKey)); } else { ++ callsNumber_; ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs(pyObj_, point.get(), NULL)); if (result.isNull()) { handleException(); } try { outP = convert< _PySequence_, Point >(result.get()); } catch (InvalidArgumentException &) { throw InvalidArgumentException(HERE) << "Output value for " << getName() << "._exec() method is not a sequence object (list, tuple, Point, etc.)"; } if (outP.getDimension() != getOutputDimension()) { throw InvalidDimensionException(HERE) << "Output point has incorrect dimension. Got " << outP.getDimension() << ". Expected " << getOutputDimension(); } if (p_cache_->isEnabled()) { CacheValueType outValue(outP.getCollection()); p_cache_->add(inKey, outValue); } } if (isHistoryEnabled_) { inputStrategy_.store(inP); outputStrategy_.store(outP); } return outP; } /* Operator () */ Sample PythonEvaluation::operator() (const Sample & inS) const { const UnsignedInteger inDim = inS.getDimension(); if (inDim != getInputDimension()) throw InvalidDimensionException(HERE) << "Sample has incorrect dimension. Got " << inDim << ". Expected " << getInputDimension(); const UnsignedInteger size = inS.getSize(); const UnsignedInteger outDim = getOutputDimension(); const bool useCache = p_cache_->isEnabled(); Sample outS(size, outDim); Sample toDo(0, inDim); if (useCache) { std::set uniqueValues; for (UnsignedInteger i = 0; i < size; ++ i) { CacheKeyType inKey(inS[i].getCollection()); if (p_cache_->hasKey(inKey)) { outS[i] = Point::ImplementationType(p_cache_->find(inKey)); } else { uniqueValues.insert(inS[i]); } } for(std::set::const_iterator it = uniqueValues.begin(); it != uniqueValues.end(); ++ it) { // store unique values toDo.add(*it); } } else { // compute all values, including duplicates toDo = inS; } UnsignedInteger toDoSize = toDo.getSize(); CacheType tempCache(toDoSize); if (useCache) tempCache.enable(); if (toDoSize > 0) { callsNumber_ += toDoSize; ScopedPyObjectPointer inTuple(PyTuple_New(toDoSize)); for (UnsignedInteger i = 0; i < toDoSize; ++ i) { PyObject * eltTuple = PyTuple_New(inDim); for (UnsignedInteger j = 0; j < inDim; ++ j) PyTuple_SetItem(eltTuple, j, convert< Scalar, _PyFloat_ > (toDo[i][j])); PyTuple_SetItem(inTuple.get(), i, eltTuple); } ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs(pyObj_, inTuple.get(), NULL)); if (result.isNull()) { handleException(); } if (PySequence_Check(result.get())) { const UnsignedInteger lengthResult = PySequence_Size(result.get()); if (lengthResult == toDoSize) { for (UnsignedInteger i = 0; i < toDoSize; ++ i) { ScopedPyObjectPointer elt(PySequence_GetItem(result.get(), i)); if (PySequence_Check(elt.get())) { const UnsignedInteger lengthElt = PySequence_Size(elt.get()); if (lengthElt == outDim) { if (useCache) { Point outP(outDim); for (UnsignedInteger j = 0; j < outDim; ++ j) { ScopedPyObjectPointer val(PySequence_GetItem(elt.get(), j)); outP[j] = convert< _PyFloat_, Scalar >(val.get()); } tempCache.add(toDo[i].getCollection(), outP.getCollection()); } else { for (UnsignedInteger j = 0; j < outDim; ++j) { ScopedPyObjectPointer val(PySequence_GetItem(elt.get(), j)); outS[i][j] = convert< _PyFloat_, Scalar >(val.get()); } } } else { throw InvalidArgumentException(HERE) << "Python Function returned an sequence object with incorrect dimension (at position " << i << ")"; } } else { throw InvalidArgumentException(HERE) << "Python Function returned an object which is NOT a sequence (at position " << i << ")"; } } } else { throw InvalidArgumentException(HERE) << "Python Function returned an sequence object with incorrect size (got " << lengthResult << ", expected " << toDoSize << ")"; } } } if (useCache) { // fill all the output values for(UnsignedInteger i = 0; i < size; ++ i) { CacheKeyType inKey(inS[i].getCollection()); if (tempCache.hasKey(inKey)) { outS[i] = Point::ImplementationType(tempCache.find(inKey)); } } p_cache_->merge(tempCache); } if (isHistoryEnabled_) { inputStrategy_.store(inS); outputStrategy_.store(outS); } outS.setDescription(getOutputDescription()); return outS; } /* Accessor for input point dimension */ UnsignedInteger PythonEvaluation::getInputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getInputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Accessor for output point dimension */ UnsignedInteger PythonEvaluation::getOutputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getOutputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Method save() stores the object through the StorageManager */ void PythonEvaluation::save(Advocate & adv) const { EvaluationImplementation::save(adv); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonEvaluation::load(Advocate & adv) { EvaluationImplementation::load(adv); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonExperiment.cxx000066400000000000000000000074361307543307100216130ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' RandomVector * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PythonExperiment.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonExperiment); static const Factory Factory_PythonExperiment; /* Default constructor */ PythonExperiment::PythonExperiment() : ExperimentImplementation(), pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonExperiment::PythonExperiment(PyObject * pyObject) : ExperimentImplementation(), pyObj_(pyObject) { if ( !PyObject_HasAttrString( pyObj_, const_cast("generate") ) ) throw InvalidArgumentException(HERE) << "Error: the given object does not have a generate() method."; Py_XINCREF( pyObj_ ); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString ( pyObj_, const_cast( "__class__" ) )); ScopedPyObjectPointer name(PyObject_GetAttrString( cls.get(), const_cast( "__name__" ) )); setName( checkAndConvert< _PyString_, String >(name.get()) ); } /* Virtual constructor */ PythonExperiment * PythonExperiment::clone() const { return new PythonExperiment(*this); } /* Copy constructor */ PythonExperiment::PythonExperiment(const PythonExperiment & other) : ExperimentImplementation(other), pyObj_(other.pyObj_) { Py_XINCREF(pyObj_); } /* Destructor */ PythonExperiment::~PythonExperiment() { Py_XDECREF(pyObj_); } /* Comparison operator */ Bool PythonExperiment::operator ==(const PythonExperiment & other) const { return true; } /* String converter */ String PythonExperiment::__repr__() const { OSS oss; oss << "class=" << PythonExperiment::GetClassName() << " name=" << getName(); // << " description=" << getDescription(); return oss; } /* String converter */ String PythonExperiment::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonExperiment::GetClassName() << " name=" << getName(); return oss; } /* Here is the interface that all derived class must implement */ Sample PythonExperiment::generate() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast( "generate" ), const_cast( "()" ) )); if (result.isNull()) { handleException(); } Sample point(convert<_PySequence_, Sample>(result.get())); return point; } /* Method save() stores the object through the StorageManager */ void PythonExperiment::save(Advocate & adv) const { ExperimentImplementation::save( adv ); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonExperiment::load(Advocate & adv) { ExperimentImplementation::load( adv ); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonFieldFunction.cxx000066400000000000000000000162731307543307100222230ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonFieldFunction implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include #include "openturns/swig_runtime.hxx" #include "openturns/PythonFieldFunction.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonFieldFunction); static const Factory Factory_PythonFieldFunction; /* Default constructor */ PythonFieldFunction::PythonFieldFunction() : FieldFunctionImplementation() , pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonFieldFunction::PythonFieldFunction(PyObject * pyCallable) : FieldFunctionImplementation() , pyObj_(pyCallable) { Py_XINCREF(pyCallable); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString ( pyObj_, const_cast("__class__" ))); ScopedPyObjectPointer name(PyObject_GetAttrString( cls.get(), const_cast("__name__" ))); setName(convert< _PyString_, String >(name.get())); const UnsignedInteger inputDimension = getInputDimension(); const UnsignedInteger outputDimension = getOutputDimension(); Description description(inputDimension + outputDimension); ScopedPyObjectPointer descIn(PyObject_CallMethod( pyObj_, const_cast("getInputDescription"), const_cast("()"))); if ( descIn.get() && PySequence_Check(descIn.get()) && (PySequence_Size(descIn.get()) == (SignedInteger)inputDimension)) { setInputDescription(convert< _PySequence_, Description >(descIn.get())); } else setInputDescription(Description::BuildDefault(inputDimension, "x")); ScopedPyObjectPointer descOut(PyObject_CallMethod( pyObj_, const_cast("getOutputDescription" ), const_cast("()"))); if ( descOut.get() && PySequence_Check(descOut.get()) && (PySequence_Size(descOut.get()) == (SignedInteger)outputDimension)) { setOutputDescription(convert< _PySequence_, Description >(descOut.get())); } else setOutputDescription(Description::BuildDefault(outputDimension, "y")); } /* Virtual constructor */ PythonFieldFunction * PythonFieldFunction::clone() const { return new PythonFieldFunction(*this); } /* Copy constructor */ PythonFieldFunction::PythonFieldFunction(const PythonFieldFunction & other) : FieldFunctionImplementation(other) , pyObj_(other.pyObj_) { Py_XINCREF(pyObj_); } /* Destructor */ PythonFieldFunction::~PythonFieldFunction() { Py_XDECREF(pyObj_); } /* Comparison operator */ Bool PythonFieldFunction::operator ==(const PythonFieldFunction & other) const { return true; } /* String converter */ String PythonFieldFunction::__repr__() const { OSS oss; oss << "class=" << PythonFieldFunction::GetClassName() << " name=" << getName() << " input description=" << getInputDescription() << " output description=" << getOutputDescription(); return oss; } /* String converter */ String PythonFieldFunction::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonFieldFunction::GetClassName() << " name=" << getName(); return oss; } /* Here is the interface that all derived class must implement */ /* Operator () */ Field PythonFieldFunction::operator() (const Field & inF) const { const UnsignedInteger inputDimension = getInputDimension(); if (inputDimension != inF.getDimension()) throw InvalidDimensionException(HERE) << "Input field has incorrect dimension. Got " << inF.getDimension() << ". Expected " << getInputDimension(); const UnsignedInteger spatialDimension = getSpatialDimension(); if (spatialDimension != inF.getSpatialDimension()) throw InvalidDimensionException(HERE) << "Input field has incorrect spatial dimension. Got " << inF.getSpatialDimension() << ". Expected " << getSpatialDimension(); ++ callsNumber_; ScopedPyObjectPointer pyInField(SWIG_NewPointerObj(new OT::Field(inF), SWIG_TypeQuery("OT::Field *"), SWIG_POINTER_OWN | 0)); ScopedPyObjectPointer pyOutField(PyObject_CallFunctionObjArgs( pyObj_, pyInField.get(), NULL)); if (pyOutField.isNull()) { handleException(); } void * ptr = 0; OT::Field * p_outF = 0; if (SWIG_IsOK(SWIG_ConvertPtr(pyOutField.get(), &ptr, SWIG_TypeQuery("OT::Field *"), 0))) { p_outF = reinterpret_cast< OT::Field * >(ptr); } else { throw InvalidArgumentException(HERE) << "Output value for " << getName() << "._exec() method is not a Field"; } if (p_outF->getDimension() != getOutputDimension()) { throw InvalidDimensionException(HERE) << "Output field has incorrect dimension. Got " << p_outF->getDimension() << ". Expected " << getOutputDimension(); } return *p_outF; } /* Accessor for mesh dimension */ UnsignedInteger PythonFieldFunction::getSpatialDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast("getSpatialDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Accessor for input point dimension */ UnsignedInteger PythonFieldFunction::getInputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast("getInputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Accessor for output point dimension */ UnsignedInteger PythonFieldFunction::getOutputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getOutputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Method save() stores the object through the StorageManager */ void PythonFieldFunction::save(Advocate & adv) const { FieldFunctionImplementation::save( adv ); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonFieldFunction::load(Advocate & adv) { FieldFunctionImplementation::load( adv ); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonGradient.cxx000066400000000000000000000126211307543307100212200ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonGradient implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PythonGradient.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonGradient); static const Factory Factory_PythonGradient; /* Default constructor */ PythonGradient::PythonGradient() : GradientImplementation() , pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonGradient::PythonGradient(PyObject * pyCallable) : GradientImplementation() , pyObj_(pyCallable) { Py_XINCREF(pyCallable); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString (pyObj_, const_cast("__class__"))); ScopedPyObjectPointer name(PyObject_GetAttrString(cls.get(), const_cast("__name__"))); setName(convert< _PyString_, String >(name.get())); } /* Virtual constructor */ PythonGradient * PythonGradient::clone() const { return new PythonGradient(*this); } /* Copy constructor */ PythonGradient::PythonGradient(const PythonGradient & other) : GradientImplementation(other) , pyObj_(other.pyObj_) { Py_XINCREF(pyObj_); } /* Destructor */ PythonGradient::~PythonGradient() { Py_XDECREF(pyObj_); } /* Comparison operator */ Bool PythonGradient::operator ==(const PythonGradient & other) const { return true; } /* String converter */ String PythonGradient::__repr__() const { OSS oss; oss << "class=" << PythonGradient::GetClassName() << " name=" << getName() << " parameter=" << getParameter(); return oss; } /* String converter */ String PythonGradient::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonGradient::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool PythonGradient::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Operator () */ Matrix PythonGradient::gradient(const Point & inP) const { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getInputDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getInputDimension(); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer methodName(convert< String, _PyString_ >("_gradient" )); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs(pyObj_, methodName.get(), point.get(), NULL )); if (callResult.isNull()) { handleException(); } Matrix result; try { result = convert< _PySequence_, Matrix >(callResult.get()); } catch (InvalidArgumentException &) { throw InvalidArgumentException(HERE) << "Output value for " << getName() << "._gradient() method is not a 2-d float sequence object (list, tuple, etc.)"; } if (result.getNbRows() != getInputDimension()) throw InvalidDimensionException(HERE) << "Gradient has incorrect row count. Got " << result.getNbRows() << ". Expected " << getInputDimension(); if (result.getNbColumns() != getOutputDimension()) throw InvalidDimensionException(HERE) << "Gradient has incorrect column count. Got " << result.getNbColumns() << ". Expected " << getOutputDimension(); return result; } /* Accessor for input point dimension */ UnsignedInteger PythonGradient::getInputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getInputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Accessor for output point dimension */ UnsignedInteger PythonGradient::getOutputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getOutputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Method save() stores the object through the StorageManager */ void PythonGradient::save(Advocate & adv) const { GradientImplementation::save(adv); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonGradient::load(Advocate & adv) { GradientImplementation::load(adv); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonHessian.cxx000066400000000000000000000131331307543307100210540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonHessian implementation * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PythonHessian.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonHessian); static const Factory Factory_PythonHessian; /* Default constructor */ PythonHessian::PythonHessian() : HessianImplementation() , pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonHessian::PythonHessian(PyObject * pyCallable) : HessianImplementation() , pyObj_(pyCallable) { Py_XINCREF(pyCallable); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString (pyObj_, const_cast("__class__"))); ScopedPyObjectPointer name(PyObject_GetAttrString(cls.get(), const_cast("__name__"))); setName(convert< _PyString_, String >(name.get())); } /* Virtual constructor */ PythonHessian * PythonHessian::clone() const { return new PythonHessian(*this); } /* Copy constructor */ PythonHessian::PythonHessian(const PythonHessian & other) : HessianImplementation(other) , pyObj_(other.pyObj_) { Py_XINCREF(pyObj_); } /* Destructor */ PythonHessian::~PythonHessian() { Py_XDECREF(pyObj_); } /* Comparison operator */ Bool PythonHessian::operator ==(const PythonHessian & other) const { return true; } /* String converter */ String PythonHessian::__repr__() const { OSS oss; oss << "class=" << PythonHessian::GetClassName() << " name=" << getName() << " parameter=" << getParameter(); return oss; } /* String converter */ String PythonHessian::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonHessian::GetClassName() << " name=" << getName(); return oss; } /* Test for actual implementation */ Bool PythonHessian::isActualImplementation() const { return true; } /* Here is the interface that all derived class must implement */ /* Operator () */ SymmetricTensor PythonHessian::hessian(const Point & inP) const { const UnsignedInteger dimension = inP.getDimension(); if (dimension != getInputDimension()) throw InvalidDimensionException(HERE) << "Input point has incorrect dimension. Got " << dimension << ". Expected " << getInputDimension(); ScopedPyObjectPointer point(convert< Point, _PySequence_ >(inP)); ScopedPyObjectPointer methodName(convert< String, _PyString_ >("_hessian")); ScopedPyObjectPointer callResult(PyObject_CallMethodObjArgs(pyObj_, methodName.get(), point.get(), NULL)); if (callResult.isNull()) { handleException(); } SymmetricTensor result; try { result = convert< _PySequence_, Tensor >(callResult.get()).getImplementation(); } catch (InvalidArgumentException &) { throw InvalidArgumentException(HERE) << "Output value for " << getName() << "._hessian() method is not a 3-d float sequence object (list, tuple, etc.)"; } if (result.getNbRows() != getInputDimension()) throw InvalidDimensionException(HERE) << "Hessian has incorrect row count. Got " << result.getNbRows() << ". Expected " << getInputDimension(); if (result.getNbColumns() != getInputDimension()) throw InvalidDimensionException(HERE) << "Hessian has incorrect column count. Got " << result.getNbColumns() << ". Expected " << getInputDimension(); if (result.getNbSheets() != getOutputDimension()) throw InvalidDimensionException(HERE) << "Hessian has incorrect sheet count. Got " << result.getNbSheets() << ". Expected " << getOutputDimension(); return result; } /* Accessor for input point dimension */ UnsignedInteger PythonHessian::getInputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getInputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Accessor for output point dimension */ UnsignedInteger PythonHessian::getOutputDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod (pyObj_, const_cast("getOutputDimension"), const_cast("()"))); UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >(result.get()); return dim; } /* Method save() stores the object through the StorageManager */ void PythonHessian::save(Advocate & adv) const { HessianImplementation::save(adv); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonHessian::load(Advocate & adv) { HessianImplementation::load(adv); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/PythonRandomVectorImplementation.cxx000066400000000000000000000167341307543307100250050ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' RandomVector * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #include "openturns/PythonRandomVectorImplementation.hxx" #include "openturns/OSS.hxx" #include "openturns/Description.hxx" #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/PersistentObjectFactory.hxx" #include "openturns/Exception.hxx" BEGIN_NAMESPACE_OPENTURNS CLASSNAMEINIT(PythonRandomVectorImplementation); static const Factory Factory_PythonRandomVectorImplementation; /* Default constructor */ PythonRandomVectorImplementation::PythonRandomVectorImplementation() : RandomVectorImplementation(), pyObj_(0) { // Nothing to do } /* Constructor from Python object*/ PythonRandomVectorImplementation::PythonRandomVectorImplementation(PyObject * pyObject) : RandomVectorImplementation(), pyObj_(pyObject) { if ( !PyObject_HasAttrString( pyObj_, const_cast("getRealization") ) ) throw InvalidArgumentException(HERE) << "Error: the given object does not have a getRealization() method."; Py_XINCREF( pyObj_ ); // Set the name of the object as its Python classname ScopedPyObjectPointer cls(PyObject_GetAttrString ( pyObj_, const_cast( "__class__" ) )); ScopedPyObjectPointer name(PyObject_GetAttrString( cls.get(), const_cast( "__name__" ) )); setName( checkAndConvert< _PyString_, String >(name.get()) ); const UnsignedInteger dimension = getDimension(); Description description(dimension); ScopedPyObjectPointer desc(PyObject_CallMethod ( pyObj_, const_cast( "getDescription" ), const_cast( "()" ) )); if ( ( desc.get() != NULL ) && PySequence_Check( desc.get() ) && ( PySequence_Size( desc.get() ) == static_cast(dimension) ) ) { description = convert< _PySequence_, Description >( desc.get() ); } else for (UnsignedInteger i = 0; i < dimension; ++i) description[i] = (OSS() << "x" << i); setDescription(description); } /* Virtual constructor */ PythonRandomVectorImplementation * PythonRandomVectorImplementation::clone() const { return new PythonRandomVectorImplementation(*this); } /* Copy constructor */ PythonRandomVectorImplementation::PythonRandomVectorImplementation(const PythonRandomVectorImplementation & other) : RandomVectorImplementation(other), pyObj_(other.pyObj_) { Py_XINCREF( pyObj_ ); } /* Destructor */ PythonRandomVectorImplementation::~PythonRandomVectorImplementation() { Py_XDECREF( pyObj_ ); } /* Comparison operator */ Bool PythonRandomVectorImplementation::operator ==(const PythonRandomVectorImplementation & other) const { return true; } /* String converter */ String PythonRandomVectorImplementation::__repr__() const { OSS oss; oss << "class=" << PythonRandomVectorImplementation::GetClassName() << " name=" << getName() << " description=" << getDescription(); return oss; } /* String converter */ String PythonRandomVectorImplementation::__str__(const String & offset) const { OSS oss; oss << "class=" << PythonRandomVectorImplementation::GetClassName() << " name=" << getName(); return oss; } /* Here is the interface that all derived class must implement */ /* Accessor for input point dimension */ UnsignedInteger PythonRandomVectorImplementation::getDimension() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast( "getDimension" ), const_cast( "()" ) )); if ( result.isNull() ) { handleException(); } UnsignedInteger dim = convert< _PyInt_, UnsignedInteger >( result.get() ); return dim; } Point PythonRandomVectorImplementation::getRealization() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast( "getRealization" ), const_cast( "()" ) )); if ( result.isNull() ) { handleException(); } Point point(convert<_PySequence_, Point>(result.get())); return point; } /* Numerical sample accessor */ Sample PythonRandomVectorImplementation::getSample(const UnsignedInteger size) const { Sample sample; if ( PyObject_HasAttrString( pyObj_, const_cast("getSample") ) ) { ScopedPyObjectPointer methodName(convert< String, _PyString_>( "getSample" )); ScopedPyObjectPointer sizeArg(convert< UnsignedInteger, _PyInt_ >(size)); ScopedPyObjectPointer result(PyObject_CallMethodObjArgs( pyObj_, methodName.get(), sizeArg.get(), NULL )); if ( result.get() ) { sample = convert<_PySequence_, Sample>(result.get()); if (sample.getSize() != size) throw InvalidDimensionException(HERE) << "Sample returned by PythonRandomVector has incorrect size. Got " << sample.getSize() << ". Expected" << size; } } else { sample = RandomVectorImplementation::getSample(size); } return sample; } /* Mean accessor */ Point PythonRandomVectorImplementation::getMean() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast( "getMean" ), const_cast( "()" ) )); if ( result.isNull() ) { handleException(); } Point mean(convert<_PySequence_, Point>(result.get())); if (mean.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Mean returned by PythonRandomVector has incorrect dimension. Got " << mean.getDimension() << ". Expected" << getDimension(); return mean; } /* Covariance accessor */ CovarianceMatrix PythonRandomVectorImplementation::getCovariance() const { ScopedPyObjectPointer result(PyObject_CallMethod ( pyObj_, const_cast( "getCovariance" ), const_cast( "()" ) )); if ( result.isNull() ) { handleException(); } CovarianceMatrix covariance(convert<_PySequence_, CovarianceMatrix>(result.get())); if (covariance.getDimension() != getDimension()) throw InvalidDimensionException(HERE) << "Covariance matrix returned by PythonRandomVector has incorrect dimension. Got " << covariance.getDimension() << ". Expected" << getDimension(); return covariance; } /* Method save() stores the object through the StorageManager */ void PythonRandomVectorImplementation::save(Advocate & adv) const { RandomVectorImplementation::save( adv ); pickleSave(adv, pyObj_); } /* Method save() reloads the object from the StorageManager */ void PythonRandomVectorImplementation::load(Advocate & adv) { RandomVectorImplementation::load( adv ); pickleLoad(adv, pyObj_); } END_NAMESPACE_OPENTURNS openturns-1.9/python/src/QRMethod.i000066400000000000000000000003461307543307100173730ustar00rootroot00000000000000// SWIG file QRMethod.i %{ #include "openturns/QRMethod.hxx" %} %include QRMethod_doc.i %include openturns/QRMethod.hxx namespace OT { %extend QRMethod { QRMethod(const QRMethod & other) { return new OT::QRMethod(other); } } } openturns-1.9/python/src/QRMethod_doc.i.in000066400000000000000000000006251307543307100206250ustar00rootroot00000000000000%feature("docstring") OT::QRMethod "Least squares solver using the QR decomposition. Available constructors: QRMethod(*proxy, weight, indices*) QRMethod(*proxy, indices*) Parameters ---------- proxy : :class:`~openturns.DesignProxy` Input sample weight : sequence of float Output weights indices : sequence of int Indices allowed in the basis See also -------- LeastSquaresMethod" openturns-1.9/python/src/QuadraticBasisFactory.i000066400000000000000000000005171307543307100221370ustar00rootroot00000000000000// SWIG file QuadraticBasisFactory.i %{ #include "openturns/QuadraticBasisFactory.hxx" %} %include QuadraticBasisFactory_doc.i %include openturns/QuadraticBasisFactory.hxx namespace OT { %extend QuadraticBasisFactory { QuadraticBasisFactory(const QuadraticBasisFactory & other) { return new OT::QuadraticBasisFactory(other); } } } openturns-1.9/python/src/QuadraticBasisFactory_doc.i.in000066400000000000000000000011271307543307100233670ustar00rootroot00000000000000%feature("docstring") OT::QuadraticBasisFactory "Quadratic basis factory to construct the regression basis. Available constructors: QuadraticBasisFactory(*dimension*) Parameters ---------- dimension : integer Input dimension of the basis. See also -------- BasisFactory, ConstantBasisFactory, LinearBasisFactory Notes ----- A factory for quadratic basis of input dimension *dimension*." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticBasisFactory::build "Build the basis. Returns ------- basis : :class:`~openturns.Basis`." openturns-1.9/python/src/QuadraticEvaluation.i000066400000000000000000000004721307543307100216550ustar00rootroot00000000000000// SWIG file QuadraticEvaluation.i OTAutodoc(QuadraticEvaluation) %{ #include "openturns/QuadraticEvaluation.hxx" %} %include openturns/QuadraticEvaluation.hxx namespace OT { %extend QuadraticEvaluation { QuadraticEvaluation(const QuadraticEvaluation & other) { return new OT::QuadraticEvaluation(other); } } } openturns-1.9/python/src/QuadraticFunction.i000066400000000000000000000011401307543307100213240ustar00rootroot00000000000000// SWIG file QuadraticFunction.i %{ #include "openturns/QuadraticFunction.hxx" %} %include QuadraticFunction_doc.i %include openturns/QuadraticFunction.hxx namespace OT { %extend QuadraticFunction { QuadraticFunction(const QuadraticFunction & other) { return new OT::QuadraticFunction(other); } } } %pythoncode %{ # deprecated class QuadraticNumericalMathFunction(QuadraticFunction): def __init__(self, *args): super(QuadraticNumericalMathFunction, self).__init__(*args) openturns.common.Log.Warn('class QuadraticNumericalMathFunction is deprecated in favor of QuadraticFunction') %} openturns-1.9/python/src/QuadraticFunction_doc.i.in000066400000000000000000000027711307543307100225710ustar00rootroot00000000000000%feature("docstring") OT::QuadraticFunction "Quadratic function. Available constructors: QuadraticFunction(*center, constant, linear, quadratic*) Parameters ---------- center : sequence of float Vector :math:`\vect{b}`. constant : sequence of float Vector :math:`\vect{c}`. linear : :class:`~openturns.Matrix` Matrix :math:`\mat{A}`. quadratic : :class:`~openturns.SymmetricTensor` Tensor :math:`\underline{\underline{\underline{M}}}`. Notes ----- This implements a quadratic function :math:`f` defined as: .. math:: f : & \Rset^n \rightarrow \Rset^p \\ & \vect{X} \mapsto \mat{A} ( \vect{X} - \vect{b} ) + \vect{c} + \frac{1}{2} \vect{X}^T \times \underline{\underline{\underline{M}}} \times \vect{X} where: - :math:`\mat{A}` is the :math:`\Rset^p \times \Rset^n` matrix defined by *linear*, - :math:`\vect{b}` is the :math:`\Rset^n` vector defined by *center*, - :math:`\vect{c}` is the :math:`\Rset^p` vector defined by *constant*. - :math:`\underline{\underline{\underline{M}}}` is a :math:`\Rset^p \times \Rset^n \times \Rset^n` symmetric tensor defined by *quadratic*. Examples -------- >>> import openturns as ot >>> inputDimension = 3 >>> outputDimension = 2 >>> center = [1.0] * inputDimension >>> constant = [-1.0, 2.0] >>> linear = ot.Matrix(inputDimension, outputDimension) >>> quadratic = ot.SymmetricTensor(inputDimension, outputDimension) >>> function = ot.QuadraticFunction(center, constant, linear, quadratic) >>> inP = [7.0, 8.0, 9.0] >>> print(function(inP)) [-1,2]" openturns-1.9/python/src/QuadraticLeastSquares.i000066400000000000000000000005161307543307100221610ustar00rootroot00000000000000// SWIG file QuadraticLeastSquares.i %{ #include "openturns/QuadraticLeastSquares.hxx" %} %include QuadraticLeastSquares_doc.i %include openturns/QuadraticLeastSquares.hxx namespace OT { %extend QuadraticLeastSquares { QuadraticLeastSquares(const QuadraticLeastSquares & other) { return new OT::QuadraticLeastSquares(other); } } } openturns-1.9/python/src/QuadraticLeastSquares_doc.i.in000066400000000000000000000136221307543307100234150ustar00rootroot00000000000000%feature("docstring") OT::QuadraticLeastSquares "Second order polynomial response surface by least squares. Available constructors: QuadraticLeastSquares(*dataIn, function*) QuadraticLeastSquares(*dataIn, dataOut*) Parameters ---------- dataIn : 2-d sequence of float Input data. function : :class:`~openturns.Function` Function :math:`h` to be approximated. dataOut : 2-d sequence of float Output data. If not specified, this sample is computed such as: :math:`dataOut = h(dataIn)`. Notes ----- Instead of replacing the model response :math:`h(\vect{x})` for a *local* approximation around a given set :math:`\vect{x}_0` of input parameters as in Taylor approximations, one may seek a *global* approximation of :math:`h(\vect{x})` over its whole domain of definition. A common choice to this end is global polynomial approximation. We consider here a global approximation of the model response using a quadratic function: .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, \sum_{j=0}^{P-1} \; a_j \; \psi_j(\vect{x}) where :math:`P = 1+2n_X +n_X (n_X -1)/2` denotes the number of terms, :math:`(a_j \, , \, j=0, \cdots,P-1)` is a set of unknown coefficients and the family :math:`(\psi_j,j=0,\cdots, P-1)` gathers the constant monomial :math:`1`, the monomials of degree one :math:`x_i`, the cross-terms :math:`x_i x_j` as well as the monomials of degree two :math:`x_i^2`. Using the vector notation :math:`\vect{a} \, = \, (a_{0} , \cdots , a_{P-1} )^{\textsf{T}}` and :math:`\vect{\psi}(\vect{x}) \, = \, (\psi_0(\vect{x}), \cdots, \psi_{P-1}(\vect{x}) )^{\textsf{T}}`, this rewrites: .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, \vect{a}^{\textsf{T}} \; \vect{\psi}(\vect{x}) A *global* approximation of the model response over its whole definition domain is sought. To this end, the coefficients :math:`a_j` may be computed using a least squares regression approach. In this context, an experimental design :math:`\vect{\cX} =(x^{(1)},\cdots,x^{(N)})`, i.e. a set of realizations of input parameters is required, as well as the corresponding model evaluations :math:`\vect{\cY} =(y^{(1)},\cdots,y^{(N)})`. The following minimization problem has to be solved: .. math:: \mbox{Find} \quad \widehat{\vect{a}} \quad \mbox{that minimizes} \quad \cJ(\vect{a}) \, = \, \sum_{i=1}^N \; \left( y^{(i)} \; - \; \Tr{\vect{a}} \vect{\psi}(\vect{x}^{(i)}) \right)^2 The solution is given by: .. math:: \widehat{\vect{a}} \, = \, \left( \Tr{\mat{\Psi}} \mat{\Psi} \right)^{-1} \; \Tr{\mat{\Psi}} \; \vect{\cY} where: .. math:: \mat{\Psi} \, = \, (\psi_{j}(\vect{x}^{(i)}) \; , \; i=1,\cdots,N \; , \; j = 0,\cdots,n_X) See also -------- LinearLeastSquares, LinearTaylor, QuadraticTaylor Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> data = [[0.5,0.5], [-0.5,-0.5], [-0.5,0.5], [0.5,-0.5]] >>> data += [[0.25,0.25], [-0.25,-0.25], [-0.25,0.25], [0.25,-0.25]] >>> myLeastSquares = ot.QuadraticLeastSquares(data, myFunc) >>> myLeastSquares.run() >>> responseSurface = myLeastSquares.getResponseSurface() >>> print(responseSurface([0.1,0.1])) [0.00960661,0.976781,1.0138]" // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getDataIn "Get the input data. Returns ------- dataIn : :class:`~openturns.Sample` Input data." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getConstant "Get the constant vector of the approximation. Returns ------- constantVector : :class:`~openturns.Point` Constant vector of the approximation, equal to :math:`a_0`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getDataOut "Get the output data. Returns ------- dataOut : :class:`~openturns.Sample` Output data. If not specified in the constructor, the sample is computed such as: :math:`dataOut = h(dataIn)`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::setDataOut "Set the output data. Parameters ---------- dataOut : 2-d sequence of float Output data." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getInputFunction "Get the function. Returns ------- function : :class:`~openturns.Function` Function :math:`h` to be approximated." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getLinear "Get the linear matrix of the approximation. Returns ------- linearMatrix : :class:`~openturns.Matrix` Linear matrix of the approximation of the function :math:`h`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getQuadratic "Get the quadratic term of the approximation. Returns ------- tensor : :class:`~openturns.SymmetricTensor` Quadratic term of the approximation of the function :math:`h`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::getResponseSurface "Get an approximation of the function. Returns ------- approximation : :class:`~openturns.Function` An approximation of the function :math:`h` by Quadratic Least Squares." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticLeastSquares::run "Perform the least squares approximation." openturns-1.9/python/src/QuadraticTaylor.i000066400000000000000000000004361307543307100210200ustar00rootroot00000000000000// SWIG file QuadraticTaylor.i %{ #include "openturns/QuadraticTaylor.hxx" %} %include QuadraticTaylor_doc.i %include openturns/QuadraticTaylor.hxx namespace OT { %extend QuadraticTaylor { QuadraticTaylor(const QuadraticTaylor & other) { return new OT::QuadraticTaylor(other); } } } openturns-1.9/python/src/QuadraticTaylor_doc.i.in000066400000000000000000000114221307543307100222470ustar00rootroot00000000000000%feature("docstring") OT::QuadraticTaylor "Second order polynomial response surface by Taylor expansion. Available constructors: QuadraticTaylor(*center, function*) Parameters ---------- center : sequence of float Point :math:`\vect{x}_0` where the Taylor expansion of the function :math:`h` is performed. function : :class:`~openturns.Function` Function :math:`h` to be approximated. Notes ----- The approximation of the model response :math:`\vect{y} = h(\vect{x})` around a specific set :math:`\vect{x}_0 = (x_{0,1},\dots,x_{0,n_{X}})` of input parameters may be of interest. One may then substitute :math:`h` for its Taylor expansion at point :math:`\vect{x}_0`. Hence :math:`h` is replaced with a first or second-order polynomial :math:`\widehat{h}` whose evaluation is inexpensive, allowing the analyst to apply the uncertainty anaysis methods. We consider here the second order Taylor expansion around :math:`\ux=\vect{x}_0`. .. math:: \vect{y} \, \approx \, \widehat{h}(\vect{x}) \, = \, h(\vect{x}_0) \, + \, \sum_{i=1}^{n_{X}} \; \frac{\partial h}{\partial x_i}(\vect{x}_0).\left(x_i - x_{0,i} \right) \, + \, \frac{1}{2} \; \sum_{i,j=1}^{n_X} \; \frac{\partial^2 h}{\partial x_i \partial x_j}(\vect{x}_0).\left(x_i - x_{0,i} \right).\left(x_j - x_{0,j} \right) Introducing a vector notation, the previous equation rewrites: .. math:: \vect{y} \, \approx \, \vect{y}_0 \, + \, \vect{\vect{L}} \: \left(\vect{x}-\vect{x}_0\right) \, + \, \frac{1}{2} \; \left\langle \left\langle\vect{\vect{\vect{Q}}}\:, \vect{x}-\vect{x}_0 \right\rangle, \:\vect{x}-\vect{x}_0 \right\rangle where - :math:`\vect{y_0} = (y_{0,1} , \dots, y_{0,n_Y})^{\textsf{T}} = h(\vect{x}_0)` is the vector model response evaluated at :math:`\vect{x}_0` ; - :math:`\vect{x}` is the current set of input parameters ; - :math:`\vect{\vect{L}} = \left( \frac{\partial y_{0,j}}{\partial x_i} \,,\, i=1,\ldots, n_X \,,\, j=1,\ldots, n_Y \right)` is the transposed Jacobian matrix evaluated at :math:`\vect{x}_0` ; - :math:`\vect{\vect{Q}} = \left\{ \frac{\partial^2 y_{0,k}}{\partial x_i \partial x_j} \, \, , \, \, i,j=1,\ldots, n_X \, \, , \, \, k=1, \ldots, n_Y \right\}` is the transposed Hessian matrix. See also -------- LinearTaylor, LinearLeastSquares, QuadraticLeastSquares Examples -------- >>> import openturns as ot >>> formulas = ['x1 * sin(x2)', 'cos(x1 + x2)', '(x2 + 1) * exp(x1 - 2 * x2)'] >>> myFunc = ot.SymbolicFunction(['x1', 'x2'], formulas) >>> myTaylor = ot.QuadraticTaylor([1, 2], myFunc) >>> myTaylor.run() >>> responseSurface = myTaylor.getResponseSurface() >>> print(responseSurface([1.2,1.9])) [1.13655,-0.999155,0.214084]" // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getCenter "Get the center. Returns ------- center : :class:`~openturns.Point` Point :math:`\vect{x}_0` where the Taylor expansion of the function is performed." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getConstant "Get the constant vector of the approximation. Returns ------- constantVector : :class:`~openturns.Point` Constant vector of the approximation, equal to :math:`h(x_0)`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getLinear "Get the gradient of the function at :math:`\vect{x}_0`. Returns ------- gradient : :class:`~openturns.Matrix` Gradient of the function :math:`h` at the point :math:`\vect{x}_0` (the transposition of the jacobian matrix)." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getQuadratic "Get the hessian of the function at :math:`\vect{x}_0`. Returns ------- tensor : :class:`~openturns.SymmetricTensor` Hessian of the function :math:`h` at the point :math:`\vect{x}_0`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getInputFunction "Get the function. Returns ------- function : :class:`~openturns.Function` Function :math:`h` to be approximated." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::getResponseSurface "Get an approximation of the function. Returns ------- approximation : :class:`~openturns.Function` An approximation of the function :math:`h` by a Quadratic Taylor expansion at the point :math:`\vect{x}_0`." // --------------------------------------------------------------------- %feature("docstring") OT::QuadraticTaylor::run "Perform the Quadratic Taylor expansion around :math:`\vect{x}_0`." openturns-1.9/python/src/QuasiMonteCarlo.i000066400000000000000000000004351307543307100207550ustar00rootroot00000000000000// SWIG file QuasiMonteCarlo.i %{ #include "openturns/QuasiMonteCarlo.hxx" %} %include QuasiMonteCarlo_doc.i %include openturns/QuasiMonteCarlo.hxx namespace OT{ %extend QuasiMonteCarlo { QuasiMonteCarlo(const QuasiMonteCarlo & other) { return new OT::QuasiMonteCarlo(other); } } } openturns-1.9/python/src/QuasiMonteCarloResult.i000066400000000000000000000005151307543307100221530ustar00rootroot00000000000000// SWIG file QuasiMonteCarloResult.i %{ #include "openturns/QuasiMonteCarloResult.hxx" %} %include QuasiMonteCarloResult_doc.i %include openturns/QuasiMonteCarloResult.hxx namespace OT{ %extend QuasiMonteCarloResult { QuasiMonteCarloResult(const QuasiMonteCarloResult & other) { return new OT::QuasiMonteCarloResult(other); } } } openturns-1.9/python/src/QuasiMonteCarloResult_doc.i.in000066400000000000000000000003361307543307100234060ustar00rootroot00000000000000%feature("docstring") OT::QuasiMonteCarloResult "Quasi Monte Carlo simulation result. Notes ----- Structure created by the method run() of a :class:`~openturns.Simulation`, and obtained thanks to the method getResult()." openturns-1.9/python/src/QuasiMonteCarlo_doc.i.in000066400000000000000000000056761307543307100222230ustar00rootroot00000000000000%feature("docstring") OT::QuasiMonteCarlo "Quasi-Monte Carlo method. Available constructors: QuasiMonteCarlo(*event=ot.Event(), lowDiscrepancySequence=ot.SobolSequence()*) Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. lowDiscrepancySequence : :class:`~openturns.LowDiscrepancySequence` Low-discrepancy sequence used to generate the samples. Notes ----- Using the probability distribution of a random vector :math:`\vect{X}`, we seek to evaluate the following probability: .. math:: P_f = \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\underline{d}) \leq 0 \}}f_{\uX}(\ux)\di{\ux} = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}`. :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise. Quasi-Monte Carlo method approximates the probability of failure using low :class:`discrepancy sequences ` :math:`\{\vect{x}_1, ..., \vect{x}_N\}` instead of randomly generated sequences, as follows: .. math:: P_f \approx \frac{1}{N}\,\sum_{i=1}^N \mathbf{1}_{\cD_f}(\ux_i) f(\ux_i). In general, the integral of a function :math:`f` on :math:`\Delta = [0,1]^s` can be approximated by using some low discrepancy sequence :math:`\{\vect{x}_1, \hdots, \vect{x}_N\}` as follows: .. math:: \int_{\Delta} f(\vect{u})\di{\vect{u}} \approx \frac{1}{N}\,\sum_{i=1}^N f(\vect{x}_i). The low discrepancy sequence is generated on :math:`\Delta` according to the Lebesgue measure then may be transformed to any measure :math:`\mu` thanks to the inverse CDF technique in order to approximate the integral: .. math:: \int_{\Rset^s} f(\vect{u})\di{\vect{u}} \approx \frac{1}{N}\,\sum_{i=1}^N f(\vect{x}_i) Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> # We create a 'usual' RandomVector from the Distribution >>> vect = ot.RandomVector(myDistribution) >>> # We create a composite random vector >>> output = ot.RandomVector(myFunction, vect) >>> # We create an Event from this RandomVector >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # We create a QuasiMonteCarlo algorithm >>> myAlgo = ot.QuasiMonteCarlo(myEvent) >>> myAlgo.setMaximumOuterSampling(50) >>> myAlgo.setBlockSize(4) >>> myAlgo.setMaximumCoefficientOfVariation(0.1) >>> # Perform the simulation >>> myAlgo.run() >>> print('Probability estimate=%.6f' % myAlgo.getResult().getProbabilityEstimate()) Probability estimate=0.125000" openturns-1.9/python/src/RandomDirection.i000066400000000000000000000004351307543307100207700ustar00rootroot00000000000000// SWIG file RandomDirection.i %{ #include "openturns/RandomDirection.hxx" %} %include RandomDirection_doc.i %include openturns/RandomDirection.hxx namespace OT{ %extend RandomDirection { RandomDirection(const RandomDirection & other) { return new OT::RandomDirection(other); } } } openturns-1.9/python/src/RandomDirection_doc.i.in000066400000000000000000000015371307543307100222260ustar00rootroot00000000000000%feature("docstring") OT::RandomDirection "Sampling following the random direction strategy. Available constructor: RandomDirection() RandomDirection(*dimension*) Parameters ---------- dimension : integer The dimension of the standard space. By default, :math:`dimension = 0` but automatically updated by the calling class. See also -------- OrthogonalDirection Notes ----- The RandomDirection strategy is the following : we generate some points on the sphere unity in the standard space according to the uniform distribution and we consider both opposite directions so built." // --------------------------------------------------------------------- %feature("docstring") OT::RandomDirection::generate "Generate the sample. Returns ------- sample : :class:`~openturns.Sample` The sample generated in two opposite random directions." openturns-1.9/python/src/RandomGenerator.i000066400000000000000000000003111307543307100207670ustar00rootroot00000000000000// SWIG file RandomGenerator.i %{ #include "openturns/RandomGenerator.hxx" %} %include RandomGenerator_doc.i %include openturns/RandomGenerator.hxx %nodefaultctor RandomGenerator; namespace OT {} openturns-1.9/python/src/RandomGeneratorState.i000066400000000000000000000006661307543307100220050ustar00rootroot00000000000000// SWIG file RandomGeneratorState.i %{ #include "openturns/RandomGeneratorState.hxx" %} %include RandomGeneratorState_doc.i %include openturns/RandomGeneratorState.hxx namespace OT { %extend RandomGeneratorState { RandomGeneratorState(const RandomGeneratorState & other) { return new OT::RandomGeneratorState(other); } Bool __eq__(const RandomGeneratorState & other) { return (*self) == other; } } //RandomGeneratorState } //OT openturns-1.9/python/src/RandomGeneratorState_doc.i.in000066400000000000000000000013141307543307100232260ustar00rootroot00000000000000%feature("docstring") OT::RandomGeneratorState "Random generator state. Data structure used to save the internal state of the generator. Parameters ---------- buffer : sequence of int The history buffer index : int The index into buffer" // --------------------------------------------------------------------- %feature("docstring") OT::RandomGeneratorState::getBuffer "Random generator state buffer accessor. Returns ------- buffer : sequence of int The history buffer" // --------------------------------------------------------------------- %feature("docstring") OT::RandomGeneratorState::getIndex "Random generator state index accessor. Returns ------- index : int The index into buffer" openturns-1.9/python/src/RandomGenerator_doc.i.in000066400000000000000000000055171307543307100222360ustar00rootroot00000000000000%feature("docstring") OT::RandomGenerator "Uniform random generator. The random generator of uniform(0,1) sample of OpenTURNS is based on the DSFTM (Double precision SIMD oriented Fast Mersenne Twister) algorithm described in the Reference Guide." // --------------------------------------------------------------------- %feature("docstring") OT::RandomGenerator::GetState "Get the state of the random generator. Returns ------- particularState : :class:`~openturns.RandomGeneratorState` State of the random generator." // --------------------------------------------------------------------- %feature("docstring") OT::RandomGenerator::SetState "Set the state of the random generator. Parameters ---------- particularState : :class:`~openturns.RandomGeneratorState` State of the random generator. Notes ----- This method fixes the entire state of the random generator algorithm thanks the specification of the entire state *particularState* usually previously obtained thanks to the :meth:`GetState` method." // --------------------------------------------------------------------- %feature("docstring") OT::RandomGenerator::Generate "Generate a pseudo-random vector. Parameters ---------- size : positive int Number of realizations required. When not given, by default it is equal to 1. Returns ------- numbers : float, :class:`~openturns.Point` Pseudo-random numbers uniformly distributed over :math:`[0, 1[`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> print('%.6f' % ot.RandomGenerator.Generate()) 0.629877 >>> print(ot.RandomGenerator.Generate(2)) [0.882805,0.135276]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomGenerator::IntegerGenerate "Generate a pseudo-random integer. :Available usages: IntegerGenerate(*n*) IntegerGenerate(*size, n*) Parameters ---------- n : positive int Upper bound of the interval where the pseudo-random integers are. size : positive int Number of integers to generate. When not given, by default it is equal to 1. Returns ------- integer : int, :class:`~openturns.UnsignedIntegerCollection` Pseudo-random integers uniformly distributed over :math:`[0,...,n-1]`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> print(ot.RandomGenerator.IntegerGenerate(30)) 24 >>> print(ot.RandomGenerator.IntegerGenerate(5, 30)) [26,21,21,22,26]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomGenerator::SetSeed "Set the seed of the random generator. Parameters ---------- n : int :math:`\in [0, 2^{32}-1]` Notes ----- This method fixes a particular state of the random generator algorithm thanks to the seed :math:`n`. The seed of the random generator is automatically initialized to 0 when a session is launched."openturns-1.9/python/src/RandomMixture.i000066400000000000000000000014461307543307100205100ustar00rootroot00000000000000// SWIG file RandomMixture.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & kolmogorovNorm ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & kolmogorovNorm %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::DistributionCollection OT::RandomMixture::project(const DistributionFactoryCollection & factoryCollection, OT::Point & kolmogorovNorm, const OT::UnsignedInteger size) const; %{ #include "openturns/RandomMixture.hxx" %} %include RandomMixture_doc.i %include openturns/RandomMixture.hxx namespace OT { %extend RandomMixture { RandomMixture(const RandomMixture & other) { return new OT::RandomMixture(other); } } } openturns-1.9/python/src/RandomMixture_doc.i.in000066400000000000000000000324241307543307100217420ustar00rootroot00000000000000%feature("docstring") OT::RandomMixture "RandomMixture distribution. Available constructors: RandomMixture(*coll, cst*) RandomMixture(*coll, weights, cst*) RandomMixture(*coll, weightsMatrix*) RandomMixture(*coll, weightsMatrix, constant*) Parameters ---------- coll : list of :class:`~openturns.Distribution` The collection of distributions that model the random vector. cst : float Constant coefficient of the affine expression in dimension 1. Default value is zero. weights : sequence of float Weights of the affine combination in dimension 1. constant : sequence of float Constant vector of the affine expression. Its size should be equal to the dimension of the distribution. Default value is (0,...,0). weightsMatrix : 2-d sequence of float Weights of the affine combination. Notes ----- Create an affine combination of input random variables of form: :math:`Y = y_0 + M X` where: :math:`\vect{Y}` of size :math:`d` with :math:`d\in \{1,2,3\}` :math:`\vect{X}` is a :math:`n`-random vector with independent components, i.e. a collection of univariate distributions, :math:`\mat{M}` is a :math:`d \times n` deterministic matrix, i.e. the linear operator of the affine transformation, :math:`\vect{y}_0` a constant and deterministic vector, i.e the constant part of the affine transformation. As the univariate random variables :math:`X_i` are independent, the characteristic function of :math:`\vect{Y}`, denoted :math:`\phi_Y`, is easily defined from the characteristic function of :math:`X_k` denoted :math:`\phi_{X_k}` as follows : .. math:: \phi(z_1,...,z_d) = \prod_{j=1}^d {\exp(i z_j {y_0}_j)} \prod_{k=1}^n \phi_{X_k}((\Tr{\mat{M}} z)_k) It is possible to evaluate its density probability function once the characteristic function evaluated, using the Poisson summation formula: .. math:: \sum_{j_1 \in \mathbb{Z}}\hdots \sum_{j_d \in \mathbb{Z}} p(y_1 + 2\pi j_1/h_1,\hdots,y_d + 2\pi j_d/h_d) = (h_1\hdots h_d)/(2^d \pi^d) \sum_{k_1 \in \mathbb{Z}}\hdots \sum_{k_d \in \mathbb{Z}} \phi(k_1 h_1,\hdots,k_d h_d)\exp(-i(k_1 h_1+\hdots+k_d h_d)) For :math:`h_i` small enough, the nested sums of the left term are reduced to the central term :math:`j_1=\hdots=j_d = 0`. Thus, the density is approximated by: .. math:: p(y_1,\hdots,y_d) = (h_1\hdots h_d)/(2^d \pi^d) \sum_{|k_1| \leq N}\hdots \sum_{|k_d| \leq N} \phi(k_1 h_1,\hdots,k_d h_d)\exp(-i(k_1 h_1+\hdots+k_d h_d)) The nested sums of the right term are computed by blocks of form :math:`2^b \leq k < 2^{b+1}`, and are truncated when the contribution of a block becomes lower than a threshold, which can be changed by setPDFPrecision method. Two other methods also may change the number of iterations; setBlockMin sets the block number from which truncation is possible, which means that computations are always performed for blocks lower than this parameter, even if their contributions are very small. On the other hand, setBlockMax sets the maximum number of blocks, which can be useful to make sure that computations run in a limited time. Note that the total number of evaluations of the characteristic function to compute up to block :math:`b` is equivalent to :math:`2^{dim \times (b+1)}`, so it is important to ensure that this number has some reasonable value. Note finally that the characteristic function evaluations are independent from :math:`\vect{y}=(y_1,\hdots,y_d)`: these values are stored in a cache. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{\vect{Y}} & = & \vect{y}_0 + \mat{M}\Expect{\vect{X}} \\ \Cov{Y} & = & \mat{M} \Cov{X} \Tr{\mat{M}} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Normal(), ot.Uniform()]) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getDistributionCollection "Return the list of distributions used. In dimension 1, some analytical aggregations may be performed on distributions to improve performance, and collection may differ from the one originally given by user. Returns ------- coll : DistributionCollection The collection of univariate distributions used for the combination Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # Sum of two Uniform here is a Triangular >>> coll = distribution.getDistributionCollection() >>> print(coll) [Triangular(a = -2, m = 0, b = 2)]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getConstant "Return the vector of the affine combination. Returns ------- out : :class:`~openturns.Point` The constant term Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # Constant term is 0 >>> cst = distribution.getConstant() >>> print(cst) [0]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setConstant "Set the constant term of the affine combination. Parameters ---------- vect : sequence of float The constant term Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # Set the new constant term is 0 >>> distribution.setConstant([1.0])" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getWeights "Return the weights of the combination as a Matrix. Returns ------- out : :class:`~openturns.Matrix` The element of affine transformation Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # weights >>> w = distribution.getWeights() >>> print(w) [[ 1 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getBlockMin "Return the blockMin parameter. Returns ------- blockMin : int Number of minimal evaluations of blocks for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # blockMin >>> blockMin = distribution.getBlockMin() >>> print(blockMin) 3" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setBlockMin "Set the blockMin parameter. Parameters ---------- blockMin : int Number of minimal evaluations of blocks for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> distribution.setBlockMin(4)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getBlockMax "Return the blockMax parameter. Returns ------- blockMax : int Number of maximal evaluations of blocks for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # blockMax >>> blockMax = distribution.getBlockMax() >>> print(blockMax) 16" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setBlockMax "Set the blockMax parameter. Returns ------- blockMax : int Number of maximal evaluations of blocks for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> distribution.setBlockMax(14)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getAlpha "Return the priori range of PDF and CDF argument. It is expressed in dispersionIndicator units. Returns ------- alpha : float A Priori range of PDF/CDF Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # alpha >>> alpha = distribution.getAlpha() >>> print(alpha) 5.0" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setAlpha "Set the a priori range of PDF and CDF arguments in terms of standard deviation. Parameters ---------- alpha : float A Priori range of PDF/CDF Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> alpha = 8.0 >>> distribution.setAlpha(alpha)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getBeta "Return the distance of the a priori range at which the PDF is negligible. Returns ------- beta : float Distance from the boundary of the a priori range Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # beta >>> beta = distribution.getBeta() >>> print(beta) 8.5" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setBeta "Set the distance of the a priori range at which the PDF is negligible. Parameters ---------- beta : float Distance from the boundary of the a priori range Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> beta = 8.0 >>> distribution.setBeta(beta)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getMaxSize "Return the maximum size of cache for characteristic function evaluations. Returns ------- size : int Maximum size of cache for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # default cache size >>> size = distribution.getMaxSize() >>> print(size) 65536" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setMaxSize "Set the maximum size of cache for characteristic function evaluations. Parameters ---------- size : int Maximum size of cache for characteristic function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> size = pow(2,15) >>> distribution.setMaxSize(size)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setPDFPrecision "Set the requested precision for PDF computation. Parameters ---------- eps : float Precision for density evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> eps = 1.e-12 >>> distribution.setPDFPrecision(eps)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setCDFPrecision "Set the requested precision for CDF computation. Parameters ---------- eps : float Precision for cumulative function evaluations Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> eps = 1.e-12 >>> distribution.setCDFPrecision(eps)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::getReferenceBandwidth "Return the reference bandwidth. It is the maximum bandwidth that allows an accurate computation of the PDF over the range :math:`[mean \pm \beta\sigma]`. Returns ------- out : :class:`~openturns.Point` The reference bandwidth Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> # bw >>> bw = distribution.getReferenceBandwidth() >>> print(bw) [0.785398]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::setReferenceBandwidth "Set the reference bandwidth. Parameters ---------- bw : sequence of float The reference bandwidth Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> bw = [0.75] >>> distribution.setReferenceBandwidth(bw)" // --------------------------------------------------------------------- %feature("docstring") OT::RandomMixture::project "Project a RandomMixture distribution over a collection of DistributionFactory. Uses sampling and Kolmogorov distance. Parameters ---------- coll : :class:`~openturns.DistributionFactoryCollection` The collection of factories kolmogorovNorm: sequence of float The Kolmogorov norms size : int Size of projection Returns ------- out : tuple of size 2: First element is a collection of :class:`~openturns.Distribution`, and second element is a sequence of float containing the Kolmogorov norm of the projection over its factory. Examples -------- >>> import openturns as ot >>> distribution = ot.RandomMixture([ot.Normal(0.0, 1.0), ot.Uniform(-1.0, 1.0)]) >>> coll = [ot.NormalFactory(), ot.UniformFactory()] >>> dist, kolmogorovNorm = distribution.project(coll) " openturns-1.9/python/src/RandomVector.i000066400000000000000000000122471307543307100203160ustar00rootroot00000000000000// SWIG file RandomVector.i %{ #include "openturns/RandomVector.hxx" #include "openturns/PythonRandomVectorImplementation.hxx" %} %include RandomVector_doc.i %pythoncode %{ class PythonRandomVector(object): """ Allow to overload RandomVector from Python. Parameters ---------- dim : positive int Vector dimension. Default is 0. See also -------- RandomVector Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) Overload RandomVector from Python: >>> class RVEC(ot.PythonRandomVector): ... def __init__(self): ... super(RVEC, self).__init__(2) ... self.setDescription(['R', 'S']) ... ... def getRealization(self): ... X = [ot.RandomGenerator.Generate(), 2 + ot.RandomGenerator.Generate()] ... return X ... ... def getSample(self, size): ... X = [] ... for i in range(size): ... X.append([ot.RandomGenerator.Generate(), 2 + ot.RandomGenerator.Generate()]) ... return X ... ... def getMean(self): ... return [0.5, 2.5] ... ... def getCovariance(self): ... return [[0.0833333, 0.], [0., 0.0833333]] Use the overloaded class: >>> R = RVEC() >>> # Instance creation >>> myRV = ot.RandomVector(R) >>> # Realization >>> print(myRV.getRealization()) [0.629877,2.88281] >>> # Sample >>> print(myRV.getSample(5)) 0 : [ 0.135276 2.0325 ] 1 : [ 0.347057 2.96942 ] 2 : [ 0.92068 2.50304 ] 3 : [ 0.0632061 2.29276 ] 4 : [ 0.714382 2.38336 ] >>> # Mean >>> print(myRV.getMean()) [0.5,2.5] >>> # Covariance >>> print(myRV.getCovariance()) [[ 0.0833333 0 ] [ 0 0.0833333 ]] """ def __init__(self, dim=0): # Warning: these names are used in PythonRandomVectorImplementation class. Synchronize the files if changed self.__dim = dim self.__desc = list(map(lambda i: 'x' + str(i), range(dim))) def __str__(self): return 'PythonRandomVector -> %s #%d' % (self.__desc, self.__dim) def __repr__(self): return self.__str__() def getDimension(self): """ Get the dimension. Returns ------- dim : positive int Dimension of the RandomVector. """ return self.__dim def setDescription(self, desc): """ Set the description. Parameters ---------- desc : sequence of str *desc* describes the components of the RandomVector. Its size must be equal to the dimension of the RandomVector. """ if (len(desc) != self.__dim): raise ValueError('Description size does NOT match dimension') self.__desc = desc def getDescription(self): """ Get the description. Returns ------- desc : :class:`~openturns.Description` *desc* describes the components of the RandomVector. """ return self.__desc def getRealization(self): """ Get a realization of the random vector. Returns ------- realization : :class:`~openturns.Point` Sequence of values randomly determined from the RandomVector definition. """ raise RuntimeError('You must define a method getRealization() -> X, where X is a Point') def getMean(self): """ Get the mean. Returns ------- mean : :class:`~openturns.Point` Mean of the RandomVector. """ raise RuntimeError('You must define a method mean -> X, where X is a Point') def getCovariance(self): """ Get the covariance. Returns ------- covariance : :class:`~openturns.CovarianceMatrix` Covariance of the RandomVector. """ raise RuntimeError('You must define a method var -> M, where M is a CovarianceMatrix') class SciPyRandomVector(PythonRandomVector): """ Build a PythonRandomVector from a scipy distribution. Parameters ---------- dist : a scipy.stats distribution the distribution to wrap """ def __init__(self, dist): super(SciPyRandomVector, self).__init__(1) if dist.__class__.__name__ != 'rv_frozen': raise TypeError('Argument is not a scipy distribution') self._dist = dist def getRealization(self): rvs = self._dist.rvs() return [rvs] def getSample(self, size): rvs = self._dist.rvs(size) return rvs.reshape(size, 1) def getMean(self): mean = float(self._dist.stats('m')) return [mean] def getCovariance(self): var = float(self._dist.stats('v')) return [[var]] %} OTTypedInterfaceObjectHelper(RandomVector) %include openturns/RandomVector.hxx namespace OT { %extend RandomVector { RandomVector(const RandomVector & other) { return new OT::RandomVector(other); } RandomVector(PyObject * pyObj) { return new OT::RandomVector( new OT::PythonRandomVectorImplementation(pyObj) ); } } // class RandomVector } // namespace OT openturns-1.9/python/src/RandomVectorImplementation.i000066400000000000000000000005661307543307100232250ustar00rootroot00000000000000// SWIG file RandomVectorImplementation.i %{ #include "openturns/RandomVectorImplementation.hxx" %} %include RandomVectorImplementation_doc.i %include openturns/RandomVectorImplementation.hxx namespace OT { %extend RandomVectorImplementation { RandomVectorImplementation(const RandomVectorImplementation & other) { return new OT::RandomVectorImplementation(other); } } } openturns-1.9/python/src/RandomVectorImplementation_doc.i.in000066400000000000000000000264771307543307100244700ustar00rootroot00000000000000%define OT_RandomVector_doc "Random vectors. Available constructors: RandomVector(*points*) RandomVector(*distribution*) RandomVector(*distribution, randomParameters*) RandomVector(*function, antecedent*) RandomVector(*functionalChaosResult*) Parameters ---------- points : sequence of float Sequence of values defining a :class:`~openturns.ConstantRandomVector`. distribution : :class:`~openturns.Distribution` Distribution of the :class:`~openturns.UsualRandomVector` to define. randomParameters : :class:`~openturns.RandomVector` RandomVector to define a distribution-based conditional vector. It defines random parameters for *distribution*. antecedent : :class:`~openturns.RandomVector` RandomVector :math:`\vect{X}` of Usual type to define a :class:`~openturns.CompositeRandomVector` as the image through the function :math:`f` of :math:`\vect{X}`: :math:`\vect{Y}=f(\vect{X})`. function : :class:`~openturns.Function` Function :math:`f` to define a :class:`~openturns.CompositeRandomVector` as the image through this function of the antecedent :math:`\vect{X}`: :math:`\vect{Y}=f(\vect{X})`. functionalChaosResult : :class:`~openturns.FunctionalChaosResult` Result to define a :class:`~openturns.FunctionalChaosRandomVector` as the image through a functional chaos approximation model of the associated :class:`~openturns.UsualRandomVector`. Notes ----- A :class:`~openturns.RandomVector` provides at least a way to generate realizations. OpenTURNS provides two kinds of :class:`~openturns.RandomVector` : - those described by their :class:`~openturns.Distribution`: :class:`~openturns.UsualRandomVector` which provide some extra probbilistic methods. - those described as the image through a function of a :class:`~openturns.UsualRandomVector`: :math:`Y=f(X)`: :class:`~openturns.CompositeRandomVector` whcih can only generate realizations. See also -------- UsualRandomVector, CompositeRandomVector, ConditionalRandomVector, ConstantRandomVector, PosteriorRandomVector, FunctionalChaosRandomVector, Event, PythonRandomVector" %enddef %feature("docstring") OT::RandomVectorImplementation OT_RandomVector_doc // --------------------------------------------------------------------- %feature("docstring") OT::RandomVectorImplementation::getDomain "Get the domain failure. Returns ------- domain : :class:`~openturns.Domain` Domain failure used to define the :class:`~openturns.Event`." // --------------------------------------------------------------------- %feature("docstring") OT::RandomVectorImplementation::getProcess "Get the stochastic process. Returns ------- process : :class:`~openturns.Process` Stochastic process used to define the :class:`~openturns.Event`." // --------------------------------------------------------------------- %define OT_RandomVector_getAntecedent_doc "Accessor to the antecedent RandomVector in case of a composite RandomVector. Returns ------- antecedent : :class:`~openturns.RandomVector` Antecedent RandomVector :math:`\vect{X}` in case of a :class:`~openturns.CompositeRandomVector` such as: :math:`\vect{Y}=f(\vect{X})`." %enddef %feature("docstring") OT::RandomVectorImplementation::getAntecedent OT_RandomVector_getAntecedent_doc // --------------------------------------------------------------------- %define OT_RandomVector_getFunction_doc "Accessor to the Function in case of a composite RandomVector. Returns ------- function : :class:`~openturns.Function` Function used to define a :class:`~openturns.CompositeRandomVector` as the image through this function of the antecedent :math:`\vect{X}`: :math:`\vect{Y}=f(\vect{X})`." %enddef %feature("docstring") OT::RandomVectorImplementation::getFunction OT_RandomVector_getFunction_doc // --------------------------------------------------------------------- %define OT_RandomVector_getCovariance_doc "Accessor to the covariance of the RandomVector. Returns ------- covariance : :class:`~openturns.CovarianceMatrix` Covariance of the considered :class:`~openturns.UsualRandomVector`. Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.5], [1.0, 1.5], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getCovariance()) [[ 1 0 ] [ 0 2.25 ]]" %enddef %feature("docstring") OT::RandomVectorImplementation::getCovariance OT_RandomVector_getCovariance_doc // --------------------------------------------------------------------- %define OT_RandomVector_getMean_doc "Accessor to the mean of the RandomVector. Returns ------- mean : :class:`~openturns.Point` Mean of the considered :class:`~openturns.UsualRandomVector`. Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.5], [1.0, 1.5], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getMean()) [0,0.5]" %enddef %feature("docstring") OT::RandomVectorImplementation::getMean OT_RandomVector_getMean_doc // --------------------------------------------------------------------- %define OT_RandomVector_getDistribution_doc "Accessor to the distribution of the RandomVector. Returns ------- distribution : :class:`~openturns.Distribution` Distribution of the considered :class:`~openturns.UsualRandomVector`. Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getDistribution()) Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])" %enddef %feature("docstring") OT::RandomVectorImplementation::getDistribution OT_RandomVector_getDistribution_doc // --------------------------------------------------------------------- %define OT_RandomVector_getDimension_doc "Accessor to the dimension of the RandomVector. Returns ------- dimension : positive int Dimension of the RandomVector." %enddef %feature("docstring") OT::RandomVectorImplementation::getDimension OT_RandomVector_getDimension_doc // --------------------------------------------------------------------- %define OT_RandomVector_getMarginal_doc "Get the random vector corresponding to the :math:`i^{th}` marginal component(s). Parameters ---------- i : int or list of ints, :math:`0\leq i < dim` Indicates the component(s) concerned. :math:`dim` is the dimension of the RandomVector. Returns ------- vector : :class:`~openturns.RandomVector` RandomVector restricted to the concerned components. Notes ----- Let's note :math:`\vect{Y}=\Tr{(Y_1,\dots,Y_n)}` a random vector and :math:`I \in [1,n]` a set of indices. If :math:`\vect{Y}` is a :class:`~openturns.UsualRandomVector`, the subvector is defined by :math:`\tilde{\vect{Y}}=\Tr{(Y_i)}_{i \in I}`. If :math:`\vect{Y}` is a :class:`~openturns.CompositeRandomVector`, defined by :math:`\vect{Y}=f(\vect{X})` with :math:`f=(f_1,\dots,f_n)`, :math:`f_i` some scalar functions, the subvector is :math:`\tilde{\vect{Y}}=(f_i(\vect{X}))_{i \in I}`. Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getMarginal(1).getRealization()) [0.608202] >>> print(randomVector.getMarginal(1).getDistribution()) Normal(mu = 0, sigma = 1)" %enddef %feature("docstring") OT::RandomVectorImplementation::getMarginal OT_RandomVector_getMarginal_doc // --------------------------------------------------------------------- %define OT_RandomVector_getSample_doc "Compute realizations of the RandomVector. Parameters ---------- n : int, :math:`n \geq 0` Number of realizations needed. Returns ------- realizations : :class:`~openturns.Sample` n sequences of values randomly determined from the RandomVector definition. In the case of an event: n realizations of the event (considered as a Bernoulli variable) which are boolean values (1 for the realization of the event and 0 else). See also -------- getRealization Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getSample(3)) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ]" %enddef %feature("docstring") OT::RandomVectorImplementation::getSample OT_RandomVector_getSample_doc // --------------------------------------------------------------------- %define OT_RandomVector_getOperator_doc "Accessor to the comparaison operator of the Event. Returns ------- operator : :class:`~openturns.ComparisonOperator` Comparaison operator used to define the :class:`~openturns.Event`." %enddef %feature("docstring") OT::RandomVectorImplementation::getOperator OT_RandomVector_getOperator_doc // --------------------------------------------------------------------- %define OT_RandomVector_getThreshold_doc "Accessor to the threshold of the Event. Returns ------- threshold : float Threshold of the :class:`~openturns.Event`." %enddef %feature("docstring") OT::RandomVectorImplementation::getThreshold OT_RandomVector_getThreshold_doc // --------------------------------------------------------------------- %define OT_RandomVector_isComposite_doc "Accessor to know if the RandomVector is a composite one. Returns ------- isComposite : bool Indicates if the RandomVector is of type Composite or not." %enddef %feature("docstring") OT::RandomVectorImplementation::isComposite OT_RandomVector_isComposite_doc // --------------------------------------------------------------------- %define OT_RandomVector_getDescription_doc "Accessor to the description of the RandomVector. Returns ------- description : :class:`~openturns.Description` Describes the components of the RandomVector." %enddef %feature("docstring") OT::RandomVectorImplementation::getDescription OT_RandomVector_getDescription_doc // --------------------------------------------------------------------- %define OT_RandomVector_setDescription_doc "Accessor to the description of the RandomVector. Parameters ---------- description : str or sequence of str Describes the components of the RandomVector." %enddef %feature("docstring") OT::RandomVectorImplementation::setDescription OT_RandomVector_setDescription_doc // --------------------------------------------------------------------- %define OT_RandomVector_getRealization_doc "Compute one realization of the RandomVector. Returns ------- aRealization : :class:`~openturns.Point` Sequence of values randomly determined from the RandomVector definition. In the case of an event: one realization of the event (considered as a Bernoulli variable) which is a boolean value (1 for the realization of the event and 0 else). See also -------- getSample Examples -------- >>> import openturns as ot >>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2)) >>> randomVector = ot.RandomVector(distribution) >>> ot.RandomGenerator.SetSeed(0) >>> print(randomVector.getRealization()) [0.608202,-1.26617] >>> print(randomVector.getRealization()) [-0.438266,1.20548]" %enddef %feature("docstring") OT::RandomVectorImplementation::getRealization OT_RandomVector_getRealization_doc openturns-1.9/python/src/RandomVector_doc.i.in000066400000000000000000000024731307543307100215500ustar00rootroot00000000000000// RandomVector docstrings are defined in RandomVectorImplementation_doc.i.in %feature("docstring") OT::RandomVector OT_RandomVector_doc %feature("docstring") OT::RandomVector::getAntecedent OT_RandomVector_getAntecedent_doc %feature("docstring") OT::RandomVector::getFunction OT_RandomVector_getFunction_doc %feature("docstring") OT::RandomVector::getCovariance OT_RandomVector_getCovariance_doc %feature("docstring") OT::RandomVector::getMean OT_RandomVector_getMean_doc %feature("docstring") OT::RandomVector::getDistribution OT_RandomVector_getDistribution_doc %feature("docstring") OT::RandomVector::getDimension OT_RandomVector_getDimension_doc %feature("docstring") OT::RandomVector::getMarginal OT_RandomVector_getMarginal_doc %feature("docstring") OT::RandomVector::getSample OT_RandomVector_getSample_doc %feature("docstring") OT::RandomVector::getOperator OT_RandomVector_getOperator_doc %feature("docstring") OT::RandomVector::getThreshold OT_RandomVector_getThreshold_doc %feature("docstring") OT::RandomVector::isComposite OT_RandomVector_isComposite_doc %feature("docstring") OT::RandomVector::getDescription OT_RandomVector_getDescription_doc %feature("docstring") OT::RandomVector::setDescription OT_RandomVector_setDescription_doc %feature("docstring") OT::RandomVector::getRealization OT_RandomVector_getRealization_docopenturns-1.9/python/src/RandomWalk.i000066400000000000000000000003661307543307100177510ustar00rootroot00000000000000// SWIG file RandomWalk.i %{ #include "openturns/RandomWalk.hxx" %} %include RandomWalk_doc.i %include openturns/RandomWalk.hxx namespace OT { %extend RandomWalk { RandomWalk(const RandomWalk & other) { return new OT::RandomWalk(other); } } } openturns-1.9/python/src/RandomWalkMetropolisHastings.i000066400000000000000000000006061307543307100235250ustar00rootroot00000000000000// SWIG file RandomWalkMetropolisHastings.i %{ #include "openturns/RandomWalkMetropolisHastings.hxx" %} %include RandomWalkMetropolisHastings_doc.i %include openturns/RandomWalkMetropolisHastings.hxx namespace OT { %extend RandomWalkMetropolisHastings { RandomWalkMetropolisHastings(const RandomWalkMetropolisHastings & other) { return new OT::RandomWalkMetropolisHastings(other); } } } openturns-1.9/python/src/RandomWalkMetropolisHastings_doc.i.in000066400000000000000000000221341307543307100247570ustar00rootroot00000000000000%feature("docstring") OT::RandomWalkMetropolisHastings "Random Walk Metropolis-Hastings method. Available constructor: RandomWalkMetropolisHastings(*prior, conditional, observations, initialState, proposal*) RandomWalkMetropolisHastings(*prior, conditional, model, parameters, observations, initialState, proposal*) Parameters ---------- prior : :class:`~openturns.Distribution` Prior distribution of the parameters of the underlying Bayesian statistical model. conditional : :class:`~openturns.Distribution` Required distribution to define the likelihood of the underlying Bayesian statistical model. model : :class:`~openturns.Function` Function required to define the likelihood. observations : 2-d sequence of float Observations required to define the likelihood. initialState : sequence of float Initial state of the Monte-Carlo Markov chain on which the Sampler is based. parameters : 2-d sequence of float Parameters of the model to be fixed. proposal : list of :class:`~openturns.Distribution` Distributions from which the transition kernels of the :class:`~openturns.MCMC` are defined, as explained hereafter. In the following of this paragraph, :math:`\delta \sim p_j` means that the realization :math:`\delta` is obtained according to the :math:`j^{th}` Distribution of the list *proposal* of size :math:`d`. The underlying MCMC algorithm is a Metropolis-Hastings one which draws candidates (for the next state of the chain) using a random walk: from the current state :math:`\vect{\theta}^k`, the candidate :math:`\vect{c}^k` for :math:`\vect{\theta}^{k+1}` can be expressed as :math:`\vect{c}^k = \vect{\theta}^k +\vect{\delta}^k` where the distribution of :math:`\vect{\delta}^k` does not depend on :math:`\vect{\theta}^k`. More precisely, here, during the :math:`k^{th}` Metropolis-Hastings iteration, only the :math:`j^{th}` component :math:`\delta_j^k` of :math:`\vect{\delta}^k` , with :math:`j=k \mod d`, is not zero and :math:`\delta_j^k = \lambda_j^k \delta^k` where :math:`\lambda_j^k` is a deterministic scalar *calibration* coefficient and where :math:`\delta^k \sim p_j`. Moreover, :math:`\lambda_j^k = 1` by default, but adaptive strategy based on the acceptance rate of each component can be defined using the method :meth:`setCalibrationStrategyPerComponent`. Notes ----- A RandomWalkMetropolisHastings enables to carry out :class:`~openturns.MCMC` sampling according to the preceding statements. It is important to note that sampling one new realization comes to carrying out :math:`d` Metropolis- Hastings iterations (such as described above): all of the components of the new realization can differ from the corresponding components of the previous realization. Besides, the burn-in and thinning parameters do not take into consideration the number of MCMC iterations indeed, but the number of sampled realizations. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> chainDim = 3 >>> # Observations >>> obsDim = 1 >>> obsSize = 10 >>> y = [-9.50794871493506, -3.83296694500105, -2.44545713047953, ... 0.0803625289211318, 1.01898069723583, 0.661725805623086, ... -1.57581204592385, -2.95308465670895, -8.8878164296758, ... -13.0812290405651] >>> y_obs = ot.Sample(y, obsDim) >>> # Parameters >>> p = ot.Sample(obsSize, chainDim) >>> for i in range(obsSize): ... for j in range(chainDim): ... p[i, j] = (-2 + 5.0 * i / 9.0) ** j >>> # Model >>> fullModel = ot.SymbolicFunction( ... ['p1', 'p2', 'p3', 'x1', 'x2', 'x3'], ... ['p1*x1+p2*x2+p3*x3', '1.0']) >>> parametersSet = range(chainDim) >>> parametersValue = [0.0] * len(parametersSet) >>> model = ot.ParametricFunction(fullModel, parametersSet, parametersValue) >>> # Calibration parameters >>> calibrationColl = [ot.CalibrationStrategy()]*chainDim >>> # Proposal distribution >>> proposalColl = [ot.Uniform(-1.0, 1.0)]*chainDim >>> # Prior distribution >>> sigma0 = [10.0]*chainDim >>> # Covariance matrix >>> Q0_inv = ot.CorrelationMatrix(chainDim) >>> for i in range(chainDim): ... Q0_inv[i, i] = sigma0[i] * sigma0[i] >>> mu0 = [0.0]*chainDim >>> # x0 ~ N(mu0, sigma0) >>> prior = ot.Normal(mu0, Q0_inv) >>> # Conditional distribution y~N(z, 1.0) >>> conditional = ot.Normal() >>> # Create a metropolis-hastings sampler >>> # prior =a distribution of dimension chainDim, the a priori distribution of the parameter >>> # conditional =a distribution of dimension 1, the observation error on the output >>> # model =the link between the parameters and the output >>> # y_obs =noisy observations of the output >>> # mu0 =starting point of the chain >>> sampler = ot.RandomWalkMetropolisHastings( ... prior, conditional, model, p, y_obs, mu0, proposalColl) >>> sampler.setCalibrationStrategyPerComponent(calibrationColl) >>> sampler.setBurnIn(200) >>> sampler.setThinning(10) >>> # Get a realization >>> print(sampler.getRealization()) [1.22816,1.0049,-1.99008]" // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::getAcceptanceRate "Get acceptance rate. Returns ------- acceptanceRate : :class:`~openturns.Point` of dimension :math:`d` Sequence whose the :math:`j^{th}` component corresponds to the acceptance rate of the candidates :math:`\vect{c}^k` obtained from a state :math:`\vect{\theta}^k` by only changing its :math:`j^{th}` component, that is to the acceptance rate only relative to the :math:`k^{th}` MCMC iterations such that :math:`k \mod d=j` (see the paragraph dedicated to the constructors of the class above). These are global acceptance rates over all the MCMC iterations performed." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::getCalibrationStrategyPerComponent "Get the calibration strategy per component. Returns ------- strategy : list of :class:`~openturns.CalibrationStrategy` A list of CalibrationStrategy *strategy*, whose :math:`j^{th}` component :math:`strategy[j]` defines whether and how the :math:`\lambda_j^k` (see the paragraph dedicated to the constructors of the class above) are rescaled, on the basis of the last :math:`j^{th}` component acceptance rate :math:`\rho_j^k` . The *calibration* coefficients are rescaled every :math:`q\times d` MCMC iterations with :math:`q = strategy[j].getCalibrationStep()`, thus on the basis of the acceptances or refusals of the last :math:`q` candidates obtained by only changing the :math:`j^{th}` component of the current state: :math:`\lambda_j^k = \Phi_j (\rho_j^k)\lambda_j^{k-qd}` where :math:`\Phi_j(.)` is defined by :math:`strategy[j].computeUpdateFactor()`." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::setCalibrationStrategyPerComponent "Set the calibration strategy per component. Parameters ---------- strategy : list of :class:`~openturns.CalibrationStrategy` A list of CalibrationStrategy *strategy*, whose :math:`j^{th}` component :math:`strategy[j]` defines whether and how the :math:`\lambda_j^k` (see the paragraph dedicated to the constructors of the class above) are rescaled, on the basis of the last :math:`j^{th}` component acceptance rate :math:`\rho_j^k` . The *calibration* coefficients are rescaled every :math:`q\times d` MCMC iterations with :math:`q = strategy[j].getCalibrationStep()`, thus on the basis of the acceptances or refusals of the last :math:`q` candidates obtained by only changing the :math:`j^{th}` component of the current state: :math:`\lambda_j^k = \Phi_j (\rho_j^k)\lambda_j^{k-qd}` where :math:`\Phi_j(.)` is defined by :math:`strategy[j].computeUpdateFactor()`." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::setCalibrationStrategy "Set the calibration strategy. Parameters ---------- strategy : :class:`~openturns.CalibrationStrategy` Same strategy applied for each component :math:`\lambda_j^k`. See also -------- setCalibrationStrategyPerComponent" // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::getProposal "Get the proposal. Returns ------- proposal : list of :class:`~openturns.Distribution` The :math:`d`-tuple of Distributions :math:`p_j (1 \leq j \leq d)` from which the transition kernels of the random walk Metropolis-Hastings algorithm are defined; look at the paragraph dedicated to the constructors of the class above." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalkMetropolisHastings::setProposal "Set the proposal. Parameters ---------- proposal : list of :class:`~openturns.Distribution` The :math:`d`-tuple of Distributions :math:`p_j (1 \leq j \leq d)` from which the transition kernels of the random walk Metropolis-Hastings algorithm are defined; look at the paragraph dedicated to the constructors of the class above." openturns-1.9/python/src/RandomWalk_doc.i.in000066400000000000000000000042611307543307100212010ustar00rootroot00000000000000%feature("docstring") OT::RandomWalk "Random walk process. Parameters ---------- origin : :class:`~openturns.Point` Origin of the random walk. distribution : :class:`~openturns.Distribution` Distribution of dimension equal to the dimension of `origin`. timeGrid : :class:`~openturns.TimeGrid`, optional The time grid of the process. By default, the time grid is reduced to one time stamp equal to 0. Notes ----- A random walk is a process :math:`X: \Omega \times \cD \rightarrow \Rset^d` where :math:`\cD=\Rset` discretized on the time grid :math:`(t_i)_{i \geq 0}` such that: .. math:: \forall n>0,\: X_{t_n} = X_{t_{n-1}} + \varepsilon_{t_n} where :math:`\vect{x}_0 \in \Rset^d` and :math:`\varepsilon` is a white noise of dimension :math:`d`. Examples -------- Create a random walk: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0, 0.1, 10) >>> myDist = ot.ComposedDistribution([ot.Normal(), ot.Exponential(0.2)], ot.ClaytonCopula(0.5)) >>> myOrigin = ot.Point(myDist.getMean()) >>> myRandomWalk = ot.RandomWalk(myOrigin, myDist, myTimeGrid) Get a realization: >>> myReal = myRandomWalk.getRealization()" // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalk::getDistribution "Accessor to the distribution. Returns ------- distribution : :class:`~openturns.Distribution` The distribution of dimension :math:`d` of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalk::getOrigin "Accessor to the origin. Returns ------- origin : :class:`~openturns.Point` The origin of the random walk." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalk::setDistribution "Accessor to the distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution of dimension :math:`d` of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::RandomWalk::setOrigin "Accessor to the origin. Parameters ---------- origin : :class:`~openturns.Point` The origin of the random walk." openturns-1.9/python/src/RandomizedLHS.i000066400000000000000000000004161307543307100203510ustar00rootroot00000000000000// SWIG file RandomizedLHS.i %{ #include "openturns/RandomizedLHS.hxx" %} %include RandomizedLHS_doc.i %include openturns/RandomizedLHS.hxx namespace OT { %extend RandomizedLHS { RandomizedLHS(const RandomizedLHS & other) { return new OT::RandomizedLHS(other); } } } openturns-1.9/python/src/RandomizedLHS_doc.i.in000066400000000000000000000007511307543307100216050ustar00rootroot00000000000000%feature("docstring") OT::RandomizedLHS "Randomized Latin Hypercube Sampling. Available constructor: RandomizedLHS(*event*) Parameters ---------- event : :class:`~openturns.Event` The event we are computing the probability of. See also -------- Simulation Notes ----- Be carefull, to be valid, the RandomizedLHS sampling method requires that the multivariate distribution have an independent copula. All events can be reduced to this case using the Rosenblatt transformation." openturns-1.9/python/src/RandomizedQuasiMonteCarlo.i000066400000000000000000000005561307543307100227760ustar00rootroot00000000000000// SWIG file RandomizedQuasiMonteCarlo.i %{ #include "openturns/RandomizedQuasiMonteCarlo.hxx" %} %include RandomizedQuasiMonteCarlo_doc.i %include openturns/RandomizedQuasiMonteCarlo.hxx namespace OT { %extend RandomizedQuasiMonteCarlo { RandomizedQuasiMonteCarlo(const RandomizedQuasiMonteCarlo & other) { return new OT::RandomizedQuasiMonteCarlo(other); } } } openturns-1.9/python/src/RandomizedQuasiMonteCarlo_doc.i.in000066400000000000000000000013161307543307100242230ustar00rootroot00000000000000%feature("docstring") OT::RandomizedQuasiMonteCarlo "Randomized quasi Monte Carlo. Available constructor: RandomizedQuasiMonteCarlo(*event*) RandomizedQuasiMonteCarlo(*event, sequence*) Parameters ---------- event : :class:`~openturns.Event` The event we are computing the probability of. sequence : :class:`~openturns.LowDiscrepancySequence` A low discrepancy sequence used to generate the samples. Default is the Sobol sequence. See also -------- Simulation Notes ----- Be careful, to be valid, the RandomizedQuasiMonteCarlo sampling method requires that the multivariate distribution have an independent copula. All events can be reduced to this case using the Rosenblatt transformation." openturns-1.9/python/src/RankMCovarianceModel.i000066400000000000000000000005051307543307100216710ustar00rootroot00000000000000// SWIG file RankMCovarianceModel.i %{ #include "openturns/RankMCovarianceModel.hxx" %} %include RankMCovarianceModel_doc.i %include openturns/RankMCovarianceModel.hxx namespace OT{ %extend RankMCovarianceModel { RankMCovarianceModel(const RankMCovarianceModel & other) { return new OT::RankMCovarianceModel(other); } } } openturns-1.9/python/src/RankMCovarianceModel_doc.i.in000066400000000000000000000063041307543307100231260ustar00rootroot00000000000000%feature("docstring") OT::RankMCovarianceModel "Covariance function of finite rank. Available constructors: RankMCovarianceModel(*spatialDimension*) RankMCovarianceModel(*variance, basis*) RankMCovarianceModel(*covariance, basis*) Parameters ---------- variance : sequence of float The marginal variances of the coefficients of the basis. covariance : :class:`~openturns.CovarianceMatrix` The covariance of the coefficients of the basis. Notes ----- Let :math:`X` be a stochastic process defined by: .. math:: X(\omega,\vect{t})=\sum_{i=1}^M\xi_i(\omega)\phi_i(\vect{t}), \quad \forall \omega \in \Omega, \vect{t} \in \cD where :math:`(\xi_1,\dots,\xi_M)` is a random vector of dimension :math:`M` and :math:`(\phi_i)_{i=1,\dots,M}` are the :math:`M` first elements of a given basis. Its covariance function, a *rank-M* covariance function, is given by: .. math:: C(\vect{s}, \vect{t}) = \sum_{i=1}^M \sum_{j=1}^M \Sigma_{ij}\phi_i(\vect{s})\Tr{\phi_j(\vect{t})}, \quad \forall (\vect{s}, \vect{t}) \in \cD where :math:`\mat{\Sigma}` is the covariance matrix of :math:`(\xi_1,\dots,\xi_M)`. When :math:`\mat{\Sigma}` is diagonal, it reduces to: .. math:: C(\vect{s}, \vect{t}) = \sum_{i=1}^M \sigma_i^2\phi_i(\vect{s})\Tr{\phi_i(\vect{t})}, \quad \forall (\vect{s}, \vect{t}) \in \cD where :math:`\sigma_i^2` is the variance of :math:`\xi_i`. The name *rank-M* is here to recall that the discretization of such a model will always lead to a covariance matrix of rank *at most* :math:`M`. Examples -------- >>> import openturns as ot >>> variance = [1.0, 2.0] >>> basis = ot.LinearBasisFactory().build() >>> myCovarianceModel = ot.RankMCovarianceModel(variance, basis) >>> covariance = ot.CovarianceMatrix(2, [1.0, 0.5, 0.5, 2.0]) >>> myCovarianceModel = ot.RankMCovarianceModel(covariance, basis) " // --------------------------------------------------------------------- %feature("docstring") OT::RankMCovarianceModel::getCovariance "Covariance accessor. Returns ------- covariance : :class:`~openturns.CovarianceMatrix` Covariance matrix of :math:`(\xi_1,\dots,\xi_M)`. Its dimension is zero if the coefficients are uncorrelated, in which case the marginal variances are given by *getVariance()*. " // --------------------------------------------------------------------- %feature("docstring") OT::RankMCovarianceModel::getVariance "Variance accessor. Returns ------- variance : :class:`~openturns.Point` Vector of marginal variances of :math:`(\xi_1,\dots,\xi_M)`. Its dimension is zero if the coefficients are correlated, in which case the covariance matrix is given by *getCovariance()*. " // --------------------------------------------------------------------- %feature("docstring") OT::RankMCovarianceModel::getBasis "Basis accessor. Returns ------- basis : :class:`~openturns.Basis` Basis to which the functions :math:`(\phi_i)_{i=1,\dots,M}` belong. " // --------------------------------------------------------------------- %feature("docstring") OT::RankMCovarianceModel::getFunctions "Function collection accessor. Returns ------- functions : :class:`~openturns.FunctionCollection` The collection of functions :math:`(\phi_i)_{i=1,\dots,M}` defining the covariance model. " openturns-1.9/python/src/Rayleigh.i000066400000000000000000000003461307543307100174540ustar00rootroot00000000000000// SWIG file Rayleigh.i %{ #include "openturns/Rayleigh.hxx" %} %include Rayleigh_doc.i %include openturns/Rayleigh.hxx namespace OT { %extend Rayleigh { Rayleigh(const Rayleigh & other) { return new OT::Rayleigh(other); } } } openturns-1.9/python/src/RayleighFactory.i000066400000000000000000000004361307543307100210040ustar00rootroot00000000000000// SWIG file RayleighFactory.i %{ #include "openturns/RayleighFactory.hxx" %} %include RayleighFactory_doc.i %include openturns/RayleighFactory.hxx namespace OT { %extend RayleighFactory { RayleighFactory(const RayleighFactory & other) { return new OT::RayleighFactory(other); } } } openturns-1.9/python/src/RayleighFactory_doc.i.in000066400000000000000000000002221307543307100222270ustar00rootroot00000000000000%feature("docstring") OT::RayleighFactory "Rayleigh factory. Available constructor: RayleighFactory() See also -------- DistributionFactory"openturns-1.9/python/src/Rayleigh_doc.i.in000066400000000000000000000035641307543307100207130ustar00rootroot00000000000000%feature("docstring") OT::Rayleigh "Rayleigh distribution. Available constructors: Rayleigh(*sigma=1.0, gamma=0.*) Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`. gamma : float Location parameter :math:`\gamma`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{(x - \gamma)} {\sigma^2} exp \left(-\frac{(x - \gamma)^2}{2\sigma^2}\right) \quad x \in [\gamma,+\infty[ Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \sigma sqrt{\frac{\pi}{2}} + \gamma \\ \Var{X} & = & \frac{4 - \pi}{2} \sigma^2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Poisson(10.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Rayleigh::getSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Returns ------- sigma : float Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::Rayleigh::getGamma "Accessor to the distribution's location parameter :math:`\gamma`. Returns ------- gamma : float Location parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::Rayleigh::setSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::Rayleigh::setGamma "Accessor to the distribution's location parameter :math:`\gamma`. Parameters ---------- gamma : float Location parameter :math:`\gamma`." openturns-1.9/python/src/RegularGrid.i000066400000000000000000000004611307543307100201150ustar00rootroot00000000000000// SWIG file RegularGrid.i %{ #include "openturns/PythonWrappingFunctions.hxx" #include "openturns/RegularGrid.hxx" %} %include RegularGrid_doc.i %include openturns/RegularGrid.hxx namespace OT { %extend RegularGrid { RegularGrid(const RegularGrid & other) { return new OT::RegularGrid(other); } } } openturns-1.9/python/src/RegularGrid_doc.i.in000066400000000000000000000054041307543307100213510ustar00rootroot00000000000000%feature("docstring") OT::RegularGrid "Regular Grid. Available constructors: RegularGrid(*start, step, n*) RegularGrid(*mesh*) Parameters ---------- start : float The start time stamp of the grid. step : float, positive The step between to consecutive time stamps. n : int The number of time stamps in the grid, including the start and the end time stamps. mesh : :class:`~openturns.Mesh` The mesh must be in :math:`\Rset`, regular and sorted in the increasing order. Notes ----- The time stamps of the regular grid are: :math:`(t_0, \dots, t_{n-1})` where :math:`t_{k} = t_0 + k \Delta` for :math:`0 \leq k \leq n-1` and :math:`\Delta >0` the step. See also -------- Mesh Examples -------- >>> import openturns as ot >>> myRegularGrid = ot.RegularGrid(0.0, 0.1, 100)" // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getStart "Accessor to the start time stamp. Returns ------- start : float The start point :math:`t_0` of the grid." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getEnd "Accessor to the first time stamp after the last time stamp of the grid. Returns ------- endPoint : float The first point that follows the last point of the grid: :math:`t_{n-1} + \Delta`. The end point is not in the grid." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getStep "Accessor to the step. Returns ------- step : float The step :math:`\Delta` between two consecutive time stamps." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getN "Accessor to the number of time stamps in the grid. Returns ------- n : int The number :math:`n` of time stamps in the grid." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getValue "Accessor to the time stamps at a gien index. Parameters ---------- k : int, :math:`0 \leq k \leq n-1`. Index of a time stamp. Returns ------- value : float The time stamp :math:`t_{k}`." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::getValues "Accessor to all the time stamps. Returns ------- values : :class:`~openturns.Point` The collection of the time stamps." // --------------------------------------------------------------------- %feature("docstring") OT::RegularGrid::follows "Check if the given grid follows the current one. Parameters ---------- newGrid : :class:`~openturns.RegularGrid` A new regular grid. Returns ------- answer : boolean The answer is *True* if the *newGrid* directly follows the current one." openturns-1.9/python/src/ResourceMap.i000066400000000000000000000005561307543307100201400ustar00rootroot00000000000000// SWIG file ResourceMap.i %{ #include "openturns/ResourceMap.hxx" %} %include ResourceMap_doc.i %template(StringStringMap) std::map; %nodefaultctor ResourceMap; %include openturns/ResourceMap.hxx namespace OT { %extend ResourceMap { UnsignedInteger __len__() const { return OT::ResourceMap::GetSize(); } } // ResourceMap } // OT openturns-1.9/python/src/ResourceMap_doc.i.in000066400000000000000000000101611307543307100213630ustar00rootroot00000000000000%feature("docstring") OT::ResourceMap "The ResourceMap allows to manage constants that are associated to key strings. Find below the ResourceMap's content: .. execforresourcemap:: Examples -------- Get some keys: >>> import openturns as ot >>> for key in ot.ResourceMap.GetKeys()[:4]: ... print(key) ARMA-MeanEpsilon ARMALikelihoodFactory-DefaultMaxFun ARMALikelihoodFactory-DefaultRhoBeg ARMALikelihoodFactory-DefaultRhoEnd" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::Get "Access a parameter. Parameters ---------- key : str An identifier associated to the parameter. Returns ------- value : str The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.Get('DiscreteDistribution-SupportEpsilon') '1.0e-14'" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::Set "Access a parameter. Parameters ---------- key : str An identifier associated to the parameter. value : str The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.Set('DiscreteDistribution-SupportEpsilon', '1.0e-14')" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::GetAsBool "Access a boolean parameter. Parameters ---------- key : str An identifier associated to the parameter. Returns ------- value : bool The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.GetAsBool('MaximumEntropyOrderStatisticsDistribution-CheckMarginals') True" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::SetAsBool "Access a boolean parameter. Parameters ---------- key : str An identifier associated to the parameter. value : bool The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.SetAsBool('MaximumEntropyOrderStatisticsDistribution-CheckMarginals', True)" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::SetAsScalar "Access a floating-point parameter. Parameters ---------- key : str An identifier associated to the parameter. value : float The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.SetAsScalar('SQP-DefaultTau', 0.5)" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::GetAsScalar "Access a floating-point parameter. Parameters ---------- key : str An identifier associated to the parameter. Returns ------- value : float The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.GetAsScalar('SQP-DefaultTau') 0.5" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::SetAsUnsignedInteger "Access an integer parameter. Parameters ---------- key : str An identifier associated to the parameter. value : int The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.SetAsUnsignedInteger('MCMC-DefaultBurnIn', 0)" // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::GetAsUnsignedInteger "Access an integer parameter. Parameters ---------- key : str An identifier associated to the parameter. Returns ------- value : int The value associated to that key. Examples -------- >>> import openturns as ot >>> ot.ResourceMap.GetAsUnsignedInteger('MCMC-DefaultBurnIn') 0..." // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::GetSize "Get the size of the ResourceMap. Returns ------- size : positive int The number of constants defined in the ResourceMap." // --------------------------------------------------------------------- %feature("docstring") OT::ResourceMap::GetKeys "Get the keys of the ResourceMap. Returns ------- keys : tuple of str The list of identifiers." openturns-1.9/python/src/ReverseHaltonSequence.i000066400000000000000000000005151307543307100221600ustar00rootroot00000000000000// SWIG file ReverseHaltonSequence.i %{ #include "openturns/ReverseHaltonSequence.hxx" %} %include ReverseHaltonSequence_doc.i %include openturns/ReverseHaltonSequence.hxx namespace OT{ %extend ReverseHaltonSequence { ReverseHaltonSequence(const ReverseHaltonSequence & other) { return new OT::ReverseHaltonSequence(other); } } } openturns-1.9/python/src/ReverseHaltonSequence_doc.i.in000066400000000000000000000007241307543307100234140ustar00rootroot00000000000000%feature("docstring") OT::ReverseHaltonSequence "Reverse Halton sequence. Available constructors: ReverseHaltonSequence(*dimension=1*) Parameters ---------- dimension : positive int Dimension of the points. Examples -------- >>> import openturns as ot >>> sequence = ot.ReverseHaltonSequence(2) >>> print(sequence.generate(5)) 0 : [ 0.5 0.666667 ] 1 : [ 0.25 0.333333 ] 2 : [ 0.75 0.222222 ] 3 : [ 0.125 0.888889 ] 4 : [ 0.625 0.555556 ]"openturns-1.9/python/src/Rice.i000066400000000000000000000003061307543307100165660ustar00rootroot00000000000000// SWIG file Rice.i %{ #include "openturns/Rice.hxx" %} %include Rice_doc.i %include openturns/Rice.hxx namespace OT { %extend Rice { Rice(const Rice & other) { return new OT::Rice(other); } } } openturns-1.9/python/src/RiceFactory.i000066400000000000000000000003761307543307100201250ustar00rootroot00000000000000// SWIG file RiceFactory.i %{ #include "openturns/RiceFactory.hxx" %} %include RiceFactory_doc.i %include openturns/RiceFactory.hxx namespace OT { %extend RiceFactory { RiceFactory(const RiceFactory & other) { return new OT::RiceFactory(other); } } } openturns-1.9/python/src/RiceFactory_doc.i.in000066400000000000000000000002061307543307100213470ustar00rootroot00000000000000%feature("docstring") OT::RiceFactory "Rice factory. Available constructor: RiceFactory() See also -------- DistributionFactory"openturns-1.9/python/src/Rice_doc.i.in000066400000000000000000000042511307543307100200230ustar00rootroot00000000000000%feature("docstring") OT::Rice "Rice distribution. Available constructors: Rice(*sigma=1.0, nu=0.*) Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter. nu : float, :math:`\nu \geq 0` Location parameter. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = 2\frac{x}{\sigma^2}p_{\chi^2(2,\frac{\nu^2}{\sigma^2})} \left(\frac{x^2}{\sigma^2}\right), \quad x \in [0; +\infty[ where :math:`p_{\chi^2(\nu, \lambda)}` is the probability density function of a :class:`~openturns.NonCentralChiSquare` distribution. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \sigma \sqrt{\frac{\pi}{2}} \mathrm{L}_{1/2}\left(-\frac{\nu^2}{2\sigma^2}\right) \\ \Var{X} & = & 2\sigma^2 + \nu^2 - \frac{\pi\sigma^2}{2} \mathrm{L}_{1/2}^2\left(\frac{-\nu^2}{2\sigma^2}\right) \end{eqnarray*} where :math:`\mathrm{L}_q(x)` denotes a Laguerre polynomial. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Rice() Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Rice::getSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Returns ------- sigma : float Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::Rice::getNu "Accessor to the distribution's location parameter :math:`\nu`. Returns ------- nu : float Location parameter :math:`\nu`." // --------------------------------------------------------------------- %feature("docstring") OT::Rice::setSigma "Accessor to the distribution's scale parameter :math:`\sigma`. Parameters ---------- sigma : float, :math:`\sigma > 0` Scale parameter :math:`\sigma`." // --------------------------------------------------------------------- %feature("docstring") OT::Rice::setNu "Accessor to the distribution's location parameter :math:`\nu`. Parameters ---------- nu : float, :math:`\nu >= 0` Location parameter :math:`\nu`." openturns-1.9/python/src/RiskyAndFast.i000066400000000000000000000004051307543307100202460ustar00rootroot00000000000000// SWIG file RiskyAndFast.i %{ #include "openturns/RiskyAndFast.hxx" %} %include RiskyAndFast_doc.i %include openturns/RiskyAndFast.hxx namespace OT{ %extend RiskyAndFast { RiskyAndFast(const RiskyAndFast & other) { return new OT::RiskyAndFast(other); } } } openturns-1.9/python/src/RiskyAndFast_doc.i.in000066400000000000000000000031611307543307100215020ustar00rootroot00000000000000%feature("docstring") OT::RiskyAndFast "RiskyAndFast method. Available constructors: RiskyAndFast(*solver=ot.Brent()*) RiskyAndFast(*solver, maximumDistance, stepSize*) Parameters ---------- solver : :class:`~openturns.Solver` Non linear solver used to research the intersection of the limit state function with the direction, on each segment of length *stepSize*, between the center of the space and *maximumDistance* (root research). maximumDistance : positive float Distance from the center of the standard space until which we research an intersection with the limit state function along each direction. By default, the maximum distance is equal to the value defined through the key RootStrategyImplementation-DefaultMaximumDistance of the :class:`~openturns.ResourceMap`. stepSize : float Length of each segment inside which the root research is performed. By default, the step size is equal to the value defined through the key RootStrategyImplementation-DefaultStepSize of the :class:`~openturns.ResourceMap`. See also -------- DirectionalSampling Notes ----- The *RiskyAndFast* strategy is the following: for each direction, we check whether there is a sign changement of the standard limit state function between the maximum distant point (at distance *maximumDistance* from the center of the standard space) and the center of the standard space. In case of sign changement, we search one root in the segment *[origin, maximum distant point]* with the selected non linear solver. As soon as founded, the segment *[root, infinity point]* is considered within the failure space."openturns-1.9/python/src/RootStrategy.i000066400000000000000000000004611307543307100203540ustar00rootroot00000000000000// SWIG file RootStrategy.i %{ #include "openturns/RootStrategy.hxx" %} %include RootStrategy_doc.i OTTypedInterfaceObjectHelper(RootStrategy) %include openturns/RootStrategy.hxx namespace OT{ %extend RootStrategy { RootStrategy(const RootStrategy & other) { return new OT::RootStrategy(other); } } } openturns-1.9/python/src/RootStrategyImplementation.i000066400000000000000000000005651307543307100232670ustar00rootroot00000000000000// SWIG file RootStrategyImplementation.i %{ #include "openturns/RootStrategyImplementation.hxx" %} %include RootStrategyImplementation_doc.i %include openturns/RootStrategyImplementation.hxx namespace OT{ %extend RootStrategyImplementation { RootStrategyImplementation(const RootStrategyImplementation & other) { return new OT::RootStrategyImplementation(other); } } } openturns-1.9/python/src/RootStrategyImplementation_doc.i.in000066400000000000000000000122431307543307100245150ustar00rootroot00000000000000%define OT_RootStrategy_doc "Base class for root strategies. *RootStrategy* is used through its derived classes: - :class:`~openturns.SafeAndSlow` - :class:`~openturns.RiskyAndFast` - :class:`~openturns.MediumSafe` See also -------- DirectionalSampling" %enddef %feature("docstring") OT::RootStrategyImplementation OT_RootStrategy_doc // --------------------------------------------------------------------- %define OT_RootStrategy_getMaximumDistance_doc "Get the maximum distance. Returns ------- maximumDistance : positive float Distance from the center of the standard space until which we research an intersection with the limit state function along each direction. By default, the maximum distance is equal to the value defined through the key RootStrategyImplementation-DefaultMaximumDistance of the :class:`~openturns.ResourceMap`." %enddef %feature("docstring") OT::RootStrategyImplementation::getMaximumDistance OT_RootStrategy_getMaximumDistance_doc // --------------------------------------------------------------------- %define OT_RootStrategy_setMaximumDistance_doc "Set the maximum distance. Parameters ---------- maximumDistance : positive float Distance from the center of the standard space until which we research an intersection with the limit state function along each direction. By default, the maximum distance is equal to the value defined through the key RootStrategyImplementation-DefaultMaximumDistance of the :class:`~openturns.ResourceMap`." %enddef %feature("docstring") OT::RootStrategyImplementation::setMaximumDistance OT_RootStrategy_setMaximumDistance_doc // --------------------------------------------------------------------- %define OT_RootStrategy_getOriginValue_doc "Get the origin value. Returns ------- origin : float Value of the limit state function at the center of the standard space." %enddef %feature("docstring") OT::RootStrategyImplementation::getOriginValue OT_RootStrategy_getOriginValue_doc // --------------------------------------------------------------------- %define OT_RootStrategy_setOriginValue_doc "Set the origin value. Parameters ---------- origin : float Value of the limit state function at the center of the standard space." %enddef %feature("docstring") OT::RootStrategyImplementation::setOriginValue OT_RootStrategy_setOriginValue_doc // --------------------------------------------------------------------- %define OT_RootStrategy_getSolver_doc "Get the solver. Returns ------- solver : :class:`~openturns.Solver` Non linear solver which will research the root in a segment." %enddef %feature("docstring") OT::RootStrategyImplementation::getSolver OT_RootStrategy_getSolver_doc // --------------------------------------------------------------------- %define OT_RootStrategy_setSolver_doc "Set the solver. Parameters ---------- solver : :class:`~openturns.Solver` Non linear solver which will research the root in a segment." %enddef %feature("docstring") OT::RootStrategyImplementation::setSolver OT_RootStrategy_setSolver_doc // --------------------------------------------------------------------- %define OT_RootStrategy_getStepSize_doc "Get the step size. Returns ------- stepSize : float Length of each segment inside which the root research is performed. By default, the step size is equal to the value defined through the key RootStrategyImplementation-DefaultStepSize of the :class:`~openturns.ResourceMap`." %enddef %feature("docstring") OT::RootStrategyImplementation::getStepSize OT_RootStrategy_getStepSize_doc // --------------------------------------------------------------------- %define OT_RootStrategy_setStepSize_doc "Set the step size. Parameters ---------- stepSize : float Length of each segment inside which the root research is performed. By default, the step size is equal to the value defined through the key RootStrategyImplementation-DefaultStepSize of the :class:`~openturns.ResourceMap`." %enddef %feature("docstring") OT::RootStrategyImplementation::setStepSize OT_RootStrategy_setStepSize_doc // --------------------------------------------------------------------- %define OT_RootStrategy_solve_doc "Give all the roots found applying the root strategy. Parameters ---------- function : :class:`~openturns.Function` Function from :math:`\Rset` to :math:`\Rset` along the ray, a linear function along the direction. value : float Returns ------- roots : :class:`~openturns.ScalarCollection` All the roots found applying the root strategy. - If :class:`~openturns.SafeAndSlow`: all the real values :math:`x` such as *function(x) = value* researched in each segment of length *stepSize*, within *[origin, maximumDistance]*. - If :class:`~openturns.RiskyAndFast`: the real value :math:`x` such as *function(x) = value* researched within *[origin, maximumDistance]*. - If :class:`~openturns.MediumSafe`: the real value :math:`x` such as *function(x) = value* researched the first segment of length *stepSize*, within *[origin, maximumDistance]* where a sign changement of function has been detected." %enddef %feature("docstring") OT::RootStrategyImplementation::solve OT_RootStrategy_solve_docopenturns-1.9/python/src/RootStrategy_doc.i.in000066400000000000000000000016211307543307100216050ustar00rootroot00000000000000// RootStrategy docstrings are defined in RootStrategyImplementation_doc.i.in %feature("docstring") OT::RootStrategy OT_RootStrategy_doc %feature("docstring") OT::RootStrategy::getMaximumDistance OT_RootStrategy_getMaximumDistance_doc %feature("docstring") OT::RootStrategy::setMaximumDistance OT_RootStrategy_setMaximumDistance_doc %feature("docstring") OT::RootStrategy::getOriginValue OT_RootStrategy_getOriginValue_doc %feature("docstring") OT::RootStrategy::setOriginValue OT_RootStrategy_setOriginValue_doc %feature("docstring") OT::RootStrategy::getSolver OT_RootStrategy_getSolver_doc %feature("docstring") OT::RootStrategy::setSolver OT_RootStrategy_setSolver_doc %feature("docstring") OT::RootStrategy::getStepSize OT_RootStrategy_getStepSize_doc %feature("docstring") OT::RootStrategy::setStepSize OT_RootStrategy_setStepSize_doc %feature("docstring") OT::RootStrategy::solve OT_RootStrategy_solve_docopenturns-1.9/python/src/RosenblattEvaluation.i000066400000000000000000000005021307543307100220470ustar00rootroot00000000000000// SWIG file RosenblattEvaluation.i OTAutodoc(RosenblattEvaluation) %{ #include "openturns/RosenblattEvaluation.hxx" %} %include openturns/RosenblattEvaluation.hxx namespace OT { %extend RosenblattEvaluation { RosenblattEvaluation(const RosenblattEvaluation & other) { return new OT::RosenblattEvaluation(other); } } } openturns-1.9/python/src/RungeKutta.i000066400000000000000000000003661307543307100200030ustar00rootroot00000000000000// SWIG file RungeKutta.i %{ #include "openturns/RungeKutta.hxx" %} %include RungeKutta_doc.i %include openturns/RungeKutta.hxx namespace OT { %extend RungeKutta { RungeKutta(const RungeKutta & other) { return new OT::RungeKutta(other); } } } openturns-1.9/python/src/RungeKutta_doc.i.in000066400000000000000000000006611307543307100212330ustar00rootroot00000000000000%feature("docstring") OT::RungeKutta "Runge-Kutta fourth-order method. See also -------- ODESolver Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['t', 'y0', 'y1'], ['t - y0', 'y1 + t^2']) >>> phi = ot.VertexValueFunction(f) >>> solver = ot.RungeKutta(phi) >>> Y0 = [1.0, -1.0] >>> nt = 100 >>> timeGrid = list(map(lambda i:(i**2.0) / (nt - 1.0)**2.0, range(nt))) >>> result = solver.solve(Y0, timeGrid)" openturns-1.9/python/src/SORM.i000066400000000000000000000003051307543307100164630ustar00rootroot00000000000000// SWIG file SORM.i %{ #include "openturns/SORM.hxx" %} %include SORM_doc.i %include openturns/SORM.hxx namespace OT{ %extend SORM { SORM(const SORM & other) { return new OT::SORM(other); } } } openturns-1.9/python/src/SORMResult.i000066400000000000000000000003651307543307100176700ustar00rootroot00000000000000// SWIG file SORMResult.i %{ #include "openturns/SORMResult.hxx" %} %include SORMResult_doc.i %include openturns/SORMResult.hxx namespace OT{ %extend SORMResult { SORMResult(const SORMResult & other) { return new OT::SORMResult(other); } } } openturns-1.9/python/src/SORMResult_doc.i.in000066400000000000000000000100721307543307100211160ustar00rootroot00000000000000%feature("docstring") OT::SORMResult "Result of a SORM analysis. Available constructors: SORMResult(*designPoint, limitStateVariable, isInFailureSpace*) Notes ----- Structure created by the method run() of the :class:`~openturns.SORM` class and obtained thanks to its method getResult(). Parameters ---------- designPoint : sequence of float Design point in the standard space resulting from the optimization algorithm. limitStateVariable : :class:`~openturns.Event` Event of which the probability is calculated. isInFailureSpace : bool Indicates whether the origin of the standard space is in the failure space. See also -------- Analytical, AnalyticalResult, FORM, FORMResult, StrongMaximumTest" // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getEventProbabilityBreitung "Accessor to the failure probability :math:`P_{Breitung}`. Returns ------- probability : positive float The SORM failure probability :math:`P_{Breitung}` according to the :ref:`Breitung ` approximation." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getEventProbabilityHohenBichler "Accessor to the failure probability :math:`P_{Hohenbichler}`. Returns ------- probability : positive float The SORM failure probability :math:`P_{Hohenbichler}` according to the :ref:`Hohen Bichler ` approximation." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getEventProbabilityTvedt "Accessor to the failure probability :math:`P_{Tvedt}`. Returns ------- probability : positive float The SORM failure probability :math:`P_{Tvedt}` according to the :ref:`Tvedt ` approximation." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getGeneralisedReliabilityIndexBreitung "Accessor to the Generalised Reliability Index Breitung. Returns ------- index : float Generalised reliability index evaluated from the Breitung SORM failure probability. .. math:: \beta_{Breitung} = \left \{ \begin{array}{ll} \displaystyle -\Phi(P_{Breitung}) & \text{if the standard space origin is not in the failure space} \\ \displaystyle \Phi(P_{Breitung}) & \text{otherwise} \end{array} \right." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getGeneralisedReliabilityIndexHohenBichler "Accessor to the Generalised Reliability Index HohenBichler. Returns ------- index : float Generalised reliability index evaluated from the Hohen Bichler SORM failure probability. .. math:: \beta_{Hohenbichler} = \left \{ \begin{array}{ll} \displaystyle -\Phi(P_{Hohenbichler}) & \text{if the standard space origin is not in the failure space} \\ \displaystyle \Phi(P_{Hohenbichler}) & \text{otherwise} \end{array} \right." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getGeneralisedReliabilityIndexTvedt "Accessor to the Generalised Reliability Index Tvedt. Returns ------- index : float Generalised reliability index evaluated from the Tvedt SORM failure probability. .. math:: \beta_{Tvedt} = \left \{ \begin{array}{ll} \displaystyle -\Phi(P_{Tvedt}) & \text{if the standard space origin is not in the failure space} \\ \displaystyle \Phi(P_{Tvedt}) & \text{otherwise} \end{array} \right." // --------------------------------------------------------------------- %feature("docstring") OT::SORMResult::getSortedCurvatures "Accessor to the sorted curvatures. Returns ------- curvatures : :class:`~openturns.Point` Curvatures of the standard limite state function at the standard design point :math:`(\kappa_i)_{1 \leq i \leq n-1}` with :math:`n` the dimension of the random vector :math:`\vect{X}`." openturns-1.9/python/src/SORM_doc.i.in000066400000000000000000000116471307543307100177300ustar00rootroot00000000000000%feature("docstring") OT::SORM "Second Order Reliability Method (SORM). Available constructors: SORM(*nearestPointAlgorithm, event, physicalStartingPoint*) Parameters ---------- nearestPointAlgorithm : :class:`~openturns.OptimizationAlgorithm` Optimization algorithm used to research the design point. event : :class:`~openturns.Event` Failure event. physicalStartingPoint : sequence of float Starting point of the optimization algorithm, declared in the physical space. Notes ----- See :class:`~openturns.Analytical` for the description of the first steps of the SORM analysis. The Second Order Reliability Method (SORM) consists in approximating the limit state surface in U-space at the design point :math:`P^*` by a quadratic surface. SORM is usually more accurate than FORM e.g. in case when the event boundary is highly curved. Let us denote by :math:`n` the dimension of the random vector :math:`\vect{X}` and :math:`(\kappa_i)_{1 \leq i \leq n-1}` the :math:`n-1` main curvatures of the limit state function at the design point in the standard space. Several approximations of the failure probability :math:`P_f` are available in the standard version of OpenTURNS, detailed here in the case where the origin of the standard space does not belong to the failure domain : - Breitung's formula : .. _Breitung_formula: .. math :: P_{Breitung} = E(-\beta_{HL})\prod_{i=1}^{n-1} \frac{1}{\sqrt{1 + \beta_{HL}\kappa_i}} :math:`E` the marginal cumulative density function of the spherical distributions in the standard space and :math:`\beta_{HL}` is the Hasofer-Lind reliability index, defined as the distance of the design point :math:`\vect{u}^*` to the origin of the standard space. - Hohen Bichler's formula is an approximation of the previous equation : .. _Hohenbichler_formula: .. math :: \displaystyle P_{Hohenbichler} = \Phi(-\beta_{HL}) \prod_{i=1}^{n-1} \left( 1 + \frac{\phi(\beta_{HL})}{\Phi(-\beta_{HL})}\kappa_i \right) ^{-1/2} where :math:`\Phi` is the cumulative distribution function of the standard 1D normal distribution and :math:`\phi` is the standard Gaussian probability density function. - Tvedt's formula : .. _Tvedt_formula: .. math :: \left\{ \begin{array}{lcl} \displaystyle P_{Tvedt} & = & A_1 + A_2 + A_3 \\ \displaystyle A_1 & = & \displaystyle \Phi(-\beta_{HL}) \prod_{i=1}^{N-1} \left( 1 + \beta_{HL} \kappa_i \right) ^{-1/2}\\ \displaystyle A_2 & = & \displaystyle \left[ \beta_{HL} \Phi(-\beta_{HL}) - \phi(\beta_{HL}) \right] \left[ \prod_{j=1}^{N-1} \left( 1 + \beta_{HL} \kappa_i \right) ^{-1/2} - \prod_{j=1}^{N-1} \left( 1 + (1 + \beta_{HL}) \kappa_i \right) ^{-1/2} \right ] \\ \displaystyle A_3 & = & \displaystyle (1 + \beta_{HL}) \left[ \beta_{HL} \Phi(-\beta_{HL}) - \phi(\beta_{HL}) \right] \left[ \prod_{j=1}^{N-1} \left( 1 + \beta_{HL} \kappa_i \right) ^{-1/2} - {\cR}e \left( \prod_{j=1}^{N-1} \left( 1 + (i + \beta_{HL}) \kappa_j \right) ^{-1/2} \right)\right ] \end{array} \right. where :math:`{\cR}e(z)` is the real part of the complex number :math:`z` and :math:`i` the complex number such that :math:`i^2 = -1`. The evaluation of the failure probability is stored in the data structure :class:`~openturns.SORMResult` recoverable with the :meth:`getResult` method. See also -------- Analytical, AnalyticalResult, FORM, StrongMaximumTest, SORMResult Examples -------- >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> event = ot.Event(output, ot.Less(), -3.0) >>> # We create an OptimizationAlgorithm algorithm >>> solver = ot.AbdoRackwitz() >>> algo = ot.SORM(solver, event, [50.0, 1.0, 10.0, 5.0]) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::SORM::getResult "Accessor to the result of SORM. Returns ------- result : :class:`~openturns.SORMResult` Structure containing all the results of the SORM analysis." // --------------------------------------------------------------------- %feature("docstring") OT::SORM::setResult "Accessor to the result of SORM. Parameters ---------- result : :class:`~openturns.SORMResult` Structure containing all the results of the SORM analysis." // --------------------------------------------------------------------- %feature("docstring") OT::SORM::run "Evaluate the failure probability. Notes ----- Evaluate the failure probability and create a :class:`~openturns.SORMResult`, the structure result which is accessible with the method :meth:`getResult`." openturns-1.9/python/src/SQP.i000066400000000000000000000002751307543307100163540ustar00rootroot00000000000000// SWIG file SQP.i %{ #include "openturns/SQP.hxx" %} %include SQP_doc.i %include openturns/SQP.hxx namespace OT{ %extend SQP { SQP(const SQP & other) { return new OT::SQP(other); } } } openturns-1.9/python/src/SQP_doc.i.in000066400000000000000000000042551307543307100176100ustar00rootroot00000000000000%feature("docstring") OT::SQP "Sequential Quadratic Programming solver. Available constructors: SQP(*problem*) SQP(*problem, tau, omega, smooth*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem to solve. tau : float Multiplicative decrease of linear step. omega : float Armijo factor. smooth : float Growing factor in penalization term. Notes ----- SQP methods solve a sequence of optimization subproblems, each of which optimizes a quadratic model of the objective subject to a linearization of the constraints. See also -------- AbdoRackwitz, Cobyla, TNC, NLopt Examples -------- >>> import openturns as ot >>> model = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ['x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4']) >>> problem = ot.OptimizationProblem(model, -0.5) >>> algo = ot.SQP(problem) >>> algo.setStartingPoint([0.0] * 4) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::SQP::getTau "Accessor to tau parameter. Returns ------- tau : float Multiplicative decrease of linear step." // --------------------------------------------------------------------- %feature("docstring") OT::SQP::setTau "Accessor to tau parameter. Parameters ---------- tau : float Multiplicative decrease of linear step." // --------------------------------------------------------------------- %feature("docstring") OT::SQP::getOmega "Accessor to omega parameter. Returns ------- omega : float Armijo factor." // --------------------------------------------------------------------- %feature("docstring") OT::SQP::setOmega "Accessor to omega parameter. Parameters ---------- omega : float Armijo factor." // --------------------------------------------------------------------- %feature("docstring") OT::SQP::getSmooth "Accessor to smooth parameter. Returns ------- smooth : float Growing factor in penalization term." // --------------------------------------------------------------------- %feature("docstring") OT::SQP::setSmooth "Accessor to smooth parameter. Parameters ---------- smooth : float Growing factor in penalization term." openturns-1.9/python/src/SVDMethod.i000066400000000000000000000003561307543307100175060ustar00rootroot00000000000000// SWIG file SVDMethod.i %{ #include "openturns/SVDMethod.hxx" %} %include SVDMethod_doc.i %include openturns/SVDMethod.hxx namespace OT { %extend SVDMethod { SVDMethod(const SVDMethod & other) { return new OT::SVDMethod(other); } } } openturns-1.9/python/src/SVDMethod_doc.i.in000066400000000000000000000006251307543307100207370ustar00rootroot00000000000000%feature("docstring") OT::SVDMethod "Least squares solver using SVD decomposition. Available constructors: SVDMethod(*proxy, weight, indices*) SVDMethod(*proxy, indices*) Parameters ---------- proxy : :class:`~openturns.DesignProxy` Input sample weight : sequence of float Output weights indices : sequence of int Indices allowed in the basis See also -------- LeastSquaresMethod" openturns-1.9/python/src/SafeAndSlow.i000066400000000000000000000003751307543307100200600ustar00rootroot00000000000000// SWIG file SafeAndSlow.i %{ #include "openturns/SafeAndSlow.hxx" %} %include SafeAndSlow_doc.i %include openturns/SafeAndSlow.hxx namespace OT{ %extend SafeAndSlow { SafeAndSlow(const SafeAndSlow & other) { return new OT::SafeAndSlow(other); } } } openturns-1.9/python/src/SafeAndSlow_doc.i.in000066400000000000000000000035051307543307100213100ustar00rootroot00000000000000%feature("docstring") OT::SafeAndSlow "SafeAndSlow method. Available constructors: SafeAndSlow(*solver=ot.Brent()*) SafeAndSlow(*solver, maximumDistance, stepSize*) Parameters ---------- solver : :class:`~openturns.Solver` Non linear solver used to research the intersection of the limit state function with the direction, on each segment of length *stepSize*, between the center of the space and *maximumDistance* (root research). maximumDistance : positive float Distance from the center of the standard space until which we research an intersection with the limit state function along each direction. By default, the maximum distance is equal to the value defined through the key RootStrategyImplementation-DefaultMaximumDistance of the :class:`~openturns.ResourceMap`. stepSize : float Length of each segment inside which the root research is performed. By default, the step size is equal to the value defined through the key RootStrategyImplementation-DefaultStepSize of the :class:`~openturns.ResourceMap`. See also -------- DirectionalSampling Notes ----- The *SafeAndSlow* strategy is the following: for each direction, we go along the direction by step of length *stepSize* from the origin to the maximum distant point(at distance *maximumDistance* from the center of the standard space) and we check whether there is a sign changement on each segment so formed. We go until the maximum distant point. Then, for all the segments where we detected the presence of a root, we research the root with the selected non linear solver. We evaluate the contribution to the failure probability of each segment. If *stepSize* is small enough, this strategy garantees us to find all the roots in the direction and the contribution of this direction to the failure probability is precisely evaluated."openturns-1.9/python/src/SaltelliSensitivityAlgorithm.i000066400000000000000000000006051307543307100236010ustar00rootroot00000000000000// SWIG file SaltelliSensitivityAlgorithm.i %{ #include "openturns/SaltelliSensitivityAlgorithm.hxx" %} %include SaltelliSensitivityAlgorithm_doc.i %include openturns/SaltelliSensitivityAlgorithm.hxx namespace OT{ %extend SaltelliSensitivityAlgorithm { SaltelliSensitivityAlgorithm(const SaltelliSensitivityAlgorithm & other) { return new OT::SaltelliSensitivityAlgorithm(other); } } } openturns-1.9/python/src/SaltelliSensitivityAlgorithm_doc.i.in000066400000000000000000000047531307543307100250430ustar00rootroot00000000000000%feature("docstring") OT::SaltelliSensitivityAlgorithm "Sensitivity analysis using Saltelli method. Available constructors: SaltelliSensitivityAlgorithm(*inputDesign, outputDesign, N, computeSecondOrder*) SaltelliSensitivityAlgorithm(*distribution, N, model, computeSecondOrder*) SaltelliSensitivityAlgorithm(*experiment, model, computeSecondOrder*) Parameters ---------- inputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained thanks to the SobolIndicesAlgorithmImplementation.Generate method outputDesign : :class:`~openturns.Sample` Design for the evaluation of sensitivity indices, obtained as the evaluation of a Function (model) on the previous inputDesign distribution : :class:`~openturns.Distribution` Input probabilistic model. Should have independent copula experiment : :class:`~openturns.WeightedExperiment` Experiment for the generation of two independent samples. N : int Size of samples to generate computeSecondOrder : bool If True, design that will be generated contains elements for the evaluation of second order indices. Notes ----- This class is concerned with analyzing the influence the random vector :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)` has on a random variable :math:`Y^k` which is being studied for uncertainty, by using the [Saltelli2002]_ method for the evaluation of both first and total order indices. These last ones are respectively given as follows: .. math:: \begin{array}{ccc} \hat{V_i} & = & \frac{1}{n}\sum_{k=1}^{n} G(B_k) G(E_k) - G_0^2 \\ \hat{V_{-i}} & = & \frac{1}{n}\sum_{k=1}^{n} G(A_k) G(E_k) - G_0^2 \end{array} See also -------- SobolIndicesAlgorithm Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formula = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+' + \ ... '0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \ ... ot.IndependentCopula(3)) >>> # Define designs to pre-compute >>> size = 100 >>> inputDesign = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True) >>> outputDesign = model(inputDesign) >>> # sensitivity analysis algorithm >>> sensitivityAnalysis = ot.SaltelliSensitivityAlgorithm(inputDesign, outputDesign, size) >>> print(sensitivityAnalysis.getFirstOrderIndices()) [0.182857,0.357745,-0.128457]" openturns-1.9/python/src/Sample.i000066400000000000000000000307011307543307100171270ustar00rootroot00000000000000// SWIG file Sample.i %ignore OT::Sample::storeToTemporaryFile; %ignore OT::Sample::streamToRFormat; %{ #include "openturns/SampleImplementation.hxx" #include "openturns/Sample.hxx" %} %include Sample_doc.i %template(SampleImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %template(SampleCollection) OT::Collection; #define OT_TYPECHECK_NUMERICALSAMPLE 5 %typemap(in) const Sample & ($1_basetype temp) { if (! SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { try { temp = OT::convert( $input ); $1 = &temp; } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a Sample"); } } } %typemap(typecheck,precedence=OT_TYPECHECK_NUMERICALSAMPLE) const Sample & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::isAPythonSequenceOf( $input ); } %apply const Sample & { const OT::Sample & }; %rename(__contains__) OT::Sample::contains; %include openturns/SampleImplementation.hxx %include openturns/Sample.hxx %pythoncode %{ # This code has been added to conform to Numpy ndarray interface # that tries to reuse the data stored in the Sample (zero copy) # see http://docs.scipy.org/doc/numpy/reference/arrays.interface.html#arrays-interface # for details. # See python doc http://docs.python.org/reference/datamodel.html?highlight=getattribute#object.__getattribute__ # for details on how to write such a method. def Sample___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.__dict__['__array_interface__'] = {'shape': (self.getSize(), self.getDimension()), 'typestr': "|f" + str(self.__elementsize__()), 'data': (int(self.__baseaddress__()), True), 'version': 3, } return super(Sample, self).__getattribute__(name) Sample.__getattribute__ = Sample___getattribute__ def Sample__repr_html_(self): """Get HTML representation.""" html = '' desc = self.getDescription() if not desc.isBlank(): html += '' html += '' for j in range(self.getDimension()): html += '' html += '' for i in range(self.getSize()): html += '' html += '' for j in range(self.getDimension()): html += '' html += '' html += '
    ' + desc[j] + '
    ' + str(i) + '' + str(self[i, j]) + '
    ' return html Sample._repr_html_ = Sample__repr_html_ %} namespace OT { %extend Sample { Point __getitem__(SignedInteger index) const { if (index < 0) { index += self->getSize(); } return self->at(index); } void __setitem__ (SignedInteger index, const Point & val) { self->copyOnWrite(); if (index < 0) { index += self->getSize(); } self->at(index) = val; } UnsignedInteger __len__() const { return self->getSize(); } PyObject * __getitem__(PyObject * args) const { Py_ssize_t start1; Py_ssize_t stop1; Py_ssize_t step1; Py_ssize_t slicelength1; // case #0: [slice] => Sample if ( PySlice_Check( args ) ) { PySlice_GetIndicesEx( OT::SliceCast( args ), self->getSize(), &start1, &stop1, &step1, &slicelength1 ); OT::Sample result( slicelength1, self->getDimension() ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { result.at(i) = self->at( start1 + i*step1 ); } result.setDescription(self->getDescription()); return SWIG_NewPointerObj((new OT::Sample(static_cast< const OT::Sample& >(result))), SWIG_TypeQuery("OT::Sample *"), SWIG_POINTER_OWN | 0 ); } PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; // argument values OT::UnsignedInteger arg2 = 0; OT::UnsignedInteger arg3 = 0; if (!PyArg_ParseTuple(args,(char *)"OO:Sample___getitem__",&obj1,&obj2)) SWIG_fail; Py_ssize_t start2; Py_ssize_t stop2; Py_ssize_t step2; Py_ssize_t slicelength2; // convert first list argument if ( PySlice_Check( obj1 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj1 ), self->getSize(), &start1, &stop1, &step1, &slicelength1 ); } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Sample___getitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getSize(); } arg2 = static_cast< OT::UnsignedInteger >(val2); } // convert second list argument if ( PySlice_Check( obj2 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj2 ), self->getDimension(), &start2, &stop2, &step2, &slicelength2 ); } else { long val3 ; int ecode3 = 0 ; ecode3 = SWIG_AsVal_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Sample___getitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } if (val3 < 0) { val3 += self->getDimension(); } arg3 = static_cast< OT::UnsignedInteger >(val3); } // handle arguments if ( PySlice_Check( obj1 ) ) { if ( PySlice_Check( obj2 ) ) { // case #1: [slice/slice] => Sample OT::Sample result( slicelength1, slicelength2 ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { result.at(i, j) = self->at( start1 + i*step1, start2 + j*step2 ); } } OT::Description entireDescription(self->getDescription()); OT::Description description(slicelength2); for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { description[j] = entireDescription[start2 + j*step2]; } result.setDescription(description); return SWIG_NewPointerObj((new OT::Sample(static_cast< const OT::Sample& >(result))), SWIG_TypeQuery("OT::Sample *"), SWIG_POINTER_OWN | 0 ); } else { // case #2: [slice/index] => Sample OT::Sample result( slicelength1, 1 ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { result.at(i, 0) = self->at( start1 + i*step1, arg3 ); } result.setDescription(OT::Description(1, self->getDescription()[arg3])); return SWIG_NewPointerObj((new OT::Sample(static_cast< const OT::Sample& >(result))), SWIG_TypeQuery("OT::Sample *"), SWIG_POINTER_OWN | 0 ); } } else { if ( PySlice_Check( obj2 ) ) { // case #3: [index/slice] => Point OT::Point result( slicelength2 ); for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { result.at(j) = self->at( arg2, start2 + j*step2 ); } return SWIG_NewPointerObj((new OT::Point(static_cast< const OT::Point& >(result))), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 ); } else { // case #4: [index/index] => float return OT::convert< OT::Scalar, OT::_PyFloat_>( self->at(arg2, arg3) ); } } fail: return NULL; } PyObject * __setitem__(PyObject * args, PyObject * valObj) { Py_ssize_t start1; Py_ssize_t stop1; Py_ssize_t step1; Py_ssize_t slicelength1; // case #0: [slice] <= Sample if ( PySlice_Check( args ) ) { PySlice_GetIndicesEx( OT::SliceCast( args ), self->getSize(), &start1, &stop1, &step1, &slicelength1 ); OT::Sample temp2 ; OT::Sample *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::Sample *"), 0))) { temp2 = OT::convert< OT::_PySequence_, OT::Sample >( valObj ); val2 = &temp2; } assert( val2 ); for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { self->at( start1 + i*step1 ) = val2->at(i); } return SWIG_Py_Void(); } PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; // argument values OT::UnsignedInteger arg2 = 0; OT::UnsignedInteger arg3 = 0; if (!PyArg_ParseTuple(args,(char *)"OO:Sample___getitem__",&obj1,&obj2)) SWIG_fail; Py_ssize_t start2; Py_ssize_t stop2; Py_ssize_t step2; Py_ssize_t slicelength2; // convert first list argument if ( PySlice_Check( obj1 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj1 ), self->getSize(), &start1, &stop1, &step1, &slicelength1 ); } else { long val2 ; int ecode2 = 0 ; ecode2 = SWIG_AsVal_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Sample___setitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } if (val2 < 0) { val2 += self->getSize(); } arg2 = static_cast< OT::UnsignedInteger >(val2); } // convert second list argument if ( PySlice_Check( obj2 ) ) { PySlice_GetIndicesEx( OT::SliceCast( obj2 ), self->getDimension(), &start2, &stop2, &step2, &slicelength2 ); } else { long val3 ; int ecode3 = 0 ; ecode3 = SWIG_AsVal_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Sample___setitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } if (val3 < 0) { val3 += self->getDimension(); } arg3 = static_cast< OT::UnsignedInteger >(val3); } // handle arguments if ( PySlice_Check( obj1 ) ) { if ( PySlice_Check( obj2 ) ) { // case #1: [slice/slice] <= Sample OT::Sample temp2 ; OT::Sample *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::Sample *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { self->at( start1 + i*step1, start2 + j*step2 ) = val2->at(i, j); } } } else { // case #2: [slice/index] <= Sample OT::Sample temp2 ; OT::Sample *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::Sample *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t i = 0; i < slicelength1; ++ i ) { self->at( start1 + i*step1, arg3 ) = val2->at(i, 0); } } } else { if ( PySlice_Check( obj2 ) ) { // case #3: [index/slice] <= Point OT::Point temp2 ; OT::Point *val2 = 0 ; if (! SWIG_IsOK(SWIG_ConvertPtr(valObj, (void **) &val2, SWIG_TypeQuery("OT::Point *"), 0))) { temp2 = OT::convert( valObj ); val2 = &temp2; } for ( Py_ssize_t j = 0; j < slicelength2; ++ j ) { self->at( arg2, start2 + j*step2 ) = val2->at(j); } } else { // case #4: [index/index] <= float double val = 0.; int ecode2 = SWIG_AsVal_double(valObj, &val ); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Sample___setitem__" "', argument " "2"" of type '" "OT::Scalar""'"); } self->at(arg2, arg3) = val; } } return SWIG_Py_Void(); fail: return NULL; } Sample(const Sample & other) { return new OT::Sample( other ); } Sample(PyObject * pyObj) { return new OT::Sample( OT::convert< OT::_PySequence_, OT::Sample>(pyObj) ); } Sample(PyObject * pyObj, UnsignedInteger dimension) { OT::Point point( OT::convert< OT::_PySequence_, OT::Point >(pyObj) ); OT::UnsignedInteger pointSize = point.getDimension(); OT::UnsignedInteger size = (pointSize + dimension - 1) / dimension; OT::Sample sample(size, dimension); OT::UnsignedInteger k = 0; for ( OT::UnsignedInteger i = 0; i < size; ++ i ) { for ( OT::UnsignedInteger j = 0; j < dimension; ++ j ) { if ( k < pointSize ) { sample[i][j] = point[k]; ++ k; } } } return new OT::Sample( sample ); } Bool __eq__(const Sample & other) { return (*self) == other; } #if SWIG_VERSION < 0x030011 Sample __truediv__(const Scalar & u) { return (*self) / u; } Sample __truediv__(const Point & v) { return (*self) / v; } Sample __truediv__(const SquareMatrix & m) { return (*self) / m; } #endif } // %extend } // namespace OT %pythoncode %{ # deprecated class NumericalSample(Sample): def __init__(self, *args): super(NumericalSample, self).__init__(*args) openturns.common.Log.Warn('class NumericalSample is deprecated in favor of Sample') %} openturns-1.9/python/src/Sample_doc.i.in000066400000000000000000000706631307543307100203740ustar00rootroot00000000000000%feature("docstring") OT::Sample "Sample of real vectors. Available constructors: Sample(*size, dim*) Sample(*size, point*) Sample(*other, first, last*) Parameters ---------- size : int, :math:`m > 0`, optional The sample size. Default creates an empty sample with dimension 1. dimension : int, :math:`n > 0`, optional The real vectors dimension. Default creates an empty sample with dimension 1. point : :class:`~openturns.Point` or flat (1d) array, list or tuple of floats, optional The point that will be repeated along the sample. Default creates a sample filled with zeros (null vectors). other : :class:`~openturns.Sample` The sample contains points to copy. first : int, :math:`0 \leq first < m` The index of the first point to copy. last : int, :math:`first < last \leq m`, optional The index after the last point to copy. See Also -------- ImportFromCSVFile, ImportFromTextFile Examples -------- Create a Sample >>> import openturns as ot >>> import numpy as np >>> sample = ot.Sample(3, 2) >>> print(sample) 0 : [ 0 0 ] 1 : [ 0 0 ] 2 : [ 0 0 ] >>> sample = ot.Sample(3, [1.0, 2.0]) >>> print(sample) 0 : [ 1 2 ] 1 : [ 1 2 ] 2 : [ 1 2 ] Create a Sample from a (2d) array, list or tuple >>> import numpy as np >>> sample = ot.Sample(np.array([(1.0, 2.0), (3.0, 4.0), (5.0, 6.0)])) and back >>> np.array(sample) array([[ 1., 2.], [ 3., 4.], [ 5., 6.]]) Eventually samples may also be generated from probability distributions or experiments >>> random_sample = ot.Normal(2).getSample(10) >>> experiment = ot.LHSExperiment(ot.Normal(2), 10).generate() **Translation:** addition or subtraction of a (compatible) sample or a point, or a scalar which is promoted into a point of compatible dimension with equal components >>> print(sample + sample) 0 : [ 2 4 ] 1 : [ 6 8 ] 2 : [ 10 12 ] >>> print(sample - sample) 0 : [ 0 0 ] 1 : [ 0 0 ] 2 : [ 0 0 ] >>> print(sample - sample[0]) 0 : [ 0 0 ] 1 : [ 2 2 ] 2 : [ 4 4 ] >>> print(sample - sample[0, 0]) 0 : [ 0 1 ] 1 : [ 2 3 ] 2 : [ 4 5 ] **Scaling:** right multiplication or division of a (compatible) square matrix with the points in the sample (this can be used e.g. for rotating all the points in a sample) >>> angle = np.pi / 4.0 >>> rotation_matrix = ot.SquareMatrix([[np.cos(angle), -np.sin(angle)], ... [np.sin(angle), np.cos(angle)]]) >>> rotated_sample = sample * rotation_matrix >>> np.testing.assert_array_almost_equal(rotated_sample / rotation_matrix, sample)" %feature("docstring") OT::Sample::ImportFromCSVFile "Static method for building a sample from a CSV file. Parameters ---------- file_name : str Path to CSV file. separator : str Separating string. Default uses `csv-file-separator` from the :class:`~openturns.ResourceMap`. Returns ------- sample : :class:`~openturns.Sample` Sample loaded from the CSV file. Notes ----- The file may or may not contain a header line (columns spanned with strings delimited with quotes). If it does contain such a header line, it will be used for setting the sample description using :py:meth:`setDescription`. See Also -------- exportToCSVFile Examples -------- >>> import openturns as ot Let's first create a sample CSV file >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> sample.exportToCSVFile('sample.csv') And load it back >>> loaded_sample = ot.Sample.ImportFromCSVFile('sample.csv') >>> assert sample == loaded_sample" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::ImportFromTextFile "Static method for building a sample from a text file. Parameters ---------- file_name : str Path to text file. separator : str Separating string. Default uses a blank space. Returns ------- sample : :class:`~openturns.Sample` Sample loaded from the text file. Notes ----- The file may or may not contain a header line (columns spanned with strings delimited with quotes). If it does contain such a header line, it will be used for setting the sample description using :py:meth:`setDescription`. See Also -------- exportToCSVFile Examples -------- >>> import openturns as ot Let's first create a sample text file >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> sample.exportToCSVFile('sample.txt', ' ') And load it back >>> loaded_sample = ot.Sample.ImportFromTextFile('sample.txt') >>> assert sample == loaded_sample" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::add "Append a vector (in-place). Parameters ---------- point : sequence of float The point to append. Examples -------- >>> import openturns as ot >>> sample = ot.Sample(3, 2) >>> sample.add([1.0, 2.0]) >>> print(sample) 0 : [ 0 0 ] 1 : [ 0 0 ] 2 : [ 0 0 ] 3 : [ 1 2 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeCenteredMoment "Estimate componentwise centered moments. Parameters ---------- k : int The centered moment's order. Returns ------- m : :class:`~openturns.Point` Componentwise centered moment of order :math:`k` estimated from the sample. Notes ----- The centered moment of order :math:`k` is estimated as follows: .. math:: \vect{\widehat{m}}^{(k)}_0 = \Tr{\left(\frac{1}{m} \sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^k, \quad i = 1, \ldots, n\right)} where :math:`\vect{\widehat{\mu}}` is the estimator of the mean. These estimators are the natural (possibly biased) estimators. For unbiased estimators use the other dedicated methods such as :py:meth:`computeVariance` for the variance. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeCenteredMoment(2)) [0.915126,0.873119]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeCovariance "Estimate the covariance matrix. Returns ------- covariance : :class:`~openturns.CovarianceMatrix` Covariance matrix estimated from the sample. Notes ----- The covariance matrix is estimated as follows: .. math:: \mat{\widehat{\Sigma}} = \left[\frac{1}{m - 1} \sum_{k=1}^m \left(x_i^{(k)} - \widehat{\mu}_i\right) \left(x_j^{(k)} - \widehat{\mu}_j\right), \quad i, j = 1, \ldots, n\right] where :math:`\vect{\widehat{\mu}}` denotes the estimate of the mean. This is an unbiased estimator. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeCovariance()) [[ 0.946682 0.0182104 ] [ 0.0182104 0.903226 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeEmpiricalCDF "Estimate the empirical cumulative distribution function (ECDF). Parameters ---------- x : sequence of float CDF input. survival : bool, optional A flag telling whether this should estimate the empirical cumulative distribution function or the empirical survival function. Default is `False` and estimates the CDF. Returns ------- p : float, :math:`0 \leq p \leq 1` Empirical CDF or SF value at point x. Notes ----- The empirical cumulative distribution function (CDF) is estimated as follows: .. math:: \hat{F}(\vect{x}) = \frac{1}{m} \sum_{j=1}^m \mathbf{1}_{\cap_{i=1}^n x_i^{(j)} \leq x_i}(\vect{x}) The empirical survival function (SF) is estimated in a similar way: .. math:: \hat{S}(\vect{x}) = \frac{1}{m} \sum_{j=1}^m \mathbf{1}_{\cap_{i=1}^n x_i^{(j)} > x_i}(\vect{x}) Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeEmpiricalCDF(sample[0])) 0.1" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeKendallTau "Estimate the Kendall coefficients matrix. Returns ------- tau : :class:`~openturns.CorrelationMatrix` Kendall coefficients matrix estimated from the sample. Notes ----- This uses an external implementation provided under the Boost Software License by David Simcha based on the paper by [Knight1966]_. It actually switches between two implementations depending on the sample size: - The most basic implementation performing in :math:`O(m^2)` is used when the sample size is less than `SampleImplementation-SmallKendallTau` from the :class:`~openturns.ResourceMap`. - The other more complex implementation performing in :math:`O(m\log(m))` is used for larger samples. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeKendallTau()) [[ 1 0.00689655 ] [ 0.00689655 1 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeKurtosis "Estimate the componentwise kurtosis (4th order centered normalized moment). Returns ------- kurtosis : :class:`~openturns.Point` Componentwise kurtosis estimated from the sample. Notes ----- The componentwise kurtosis are estimated as follows: .. math:: \vect{\widehat{\kappa}} = \Tr{\left(\frac{m (m-1) (m+1)}{(m-2) (m-3)} \frac{\sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^4} {\left(\sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^2 \right)^2} - 3 \frac{3 (m-5)}{(m-2) (m-3)}, \quad i = 1, \ldots, n\right)} where :math:`\vect{\widehat{\mu}}` is the estimate of the mean. This estimator is unbiased. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeKurtosis()) [3.27647,2.40275]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeLinearCorrelation "**(ditch me?)**" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeMean "Estimate the mean vector. Returns ------- mean : :class:`~openturns.Point` Mean vector estimated from the sample. Notes ----- The mean is estimated as follows: .. math:: \vect{\widehat{\mu}} = \Tr{\left(\frac{1}{m} \sum_{j=1}^m x_i^{(j)}, \quad i = 1, \ldots, n\right)} Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeMean()) [-0.0512622,0.136653]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeMedian "Estimate the componentwise medians (50%-quantiles). Returns ------- median : :class:`~openturns.Point` Median vector estimated from the sample. See Also -------- computeQuantilePerComponent Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeMedian()) [0.221141,0.108703]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computePearsonCorrelation "Estimate the Pearson correlation matrix. Returns ------- rho : :class:`~openturns.CorrelationMatrix` Pearson correlation matrix estimated from the sample. Notes ----- The Pearson correlation matrix is estimated as follows: .. math:: \mat{\widehat{\rho}} = \left[\frac{\widehat{\Sigma}_{i,j}} {\widehat{\Sigma}_{i,i} \widehat{\Sigma}_{j,j}}, \quad i,j = 1, \ldots, n\right] where :math:`\mat{\widehat{\Sigma}}` denotes the estimate of the covariance. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computePearsonCorrelation()) [[ 1 0.0196933 ] [ 0.0196933 1 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeQuantile "Estimate the quantile of the **joint** distribution underlying the sample. Parameters ---------- p : float, :math:`0 \leq p \leq 1` Input probability level. Returns ------- quantile : :class:`~openturns.Point` Quantile of the joint distribution at probability level :math:`p`, estimated from the sample. Raises ------ NotImplementedYetError : If the dimension is greater than 1. See Also -------- computeQuantilePerComponent Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(1).getSample(30) >>> print(sample.computeQuantile(.2)) [-0.947394]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeQuantilePerComponent "Estimate the componentwise quantiles. Parameters ---------- p : float, :math:`0 \leq p \leq 1` Input probability level. Returns ------- quantile : :class:`~openturns.Point` Componentwise quantile at probability level :math:`p`, estimated from the sample. Notes ----- The present implementation interpolates the quantile between the two adjacent empirical quantiles (:math:`\widehat{x}_i^-` and :math:`\widehat{x}_i^+`): .. math:: \widehat{q}_i = \alpha \widehat{x}_i^- + (1 - \alpha) \widehat{x}_i^+ where :math:`\alpha = p m - 0.5`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeQuantilePerComponent(0.2)) [-0.696412,-0.767092]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeRange "Compute the range per component. Returns ------- range : :class:`~openturns.Point` Componentwise ranges estimated from the sample. Notes ----- The *statistical range* is defined as the deviation between the maximal and the minimal value of the sample. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeRange()) [4.02827,3.49949]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeRawMoment "Compute the raw (non-centered) moment per component. Parameters ---------- k : int, :math:`k \geq 0` Componentwise moment's order. Returns ------- moments : :class:`~openturns.Point` Componentwise moments estimated from the sample. Notes ----- The (raw) moment of order :math:`k` is estimated as follows: .. math:: \vect{\widehat{m}}^{(k)} = \Tr{\left(\frac{1}{m} \sum_{j=1}^m {x_i^{(j)}}^k, \quad i = 1, \ldots, n\right)} Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeRawMoment(2)) [0.917754,0.891793]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeSkewness "Estimate the componentwise skewness (3rd order centered normalized moment). Returns ------- skewness : :class:`~openturns.Point` Componentwise skewness estimated from the sample. Notes ----- The componentwise skewnesses are estimated as follows: .. math:: \vect{\widehat{\delta}} = \Tr{\left(m \frac{\sqrt{m-1}}{m-2} \frac{\sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^3} {\left(\sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^2 \right)^{3/2}}, \quad i = 1, \ldots, n\right)} where :math:`\vect{\widehat{\mu}}` is the estimate of the mean. This is an unbiased estimator. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeSkewness()) [-0.69393,0.231931]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeSpearmanCorrelation "Estimate the Spearman correlation matrix. Returns ------- rho : :class:`~openturns.CorrelationMatrix` Spearman correlation matrix estimated from the sample. Notes ----- The Spearman correlation matrix is estimated as the Pearson correlation matrix of the ranks sample (i.e. using `self.rank().computePearsonCorrelation()`). See Also -------- rank, computePearsonCorrelation Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeSpearmanCorrelation()) [[ 1 -0.00556174 ] [ -0.00556174 1 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeStandardDeviation "Compute the Cholesky factor of the covariance matrix. Estimated from the sample. Returns ------- L : :class:`~openturns.TriangularMatrix` Lower (left) Cholesky factor of the covariance matrix estimated from the sample. Raises ------ RuntimeError : If the estimated covariance matrix is not positive definite. In this case, you might want to estimate the covariance and manually shrink negative eigen values. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeStandardDeviation()) [[ 0.972976 0 ] [ 0.0187161 0.950198 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeStandardDeviationPerComponent "Estimate the componentwise standard deviations. Returns ------- standard_deviations : :class:`~openturns.Point` Componentwise standard deviation estimated from the sample. Notes ----- The componentwise standard deviations are estimated as the square root of the componentwise variances. See Also -------- computeVariance Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeStandardDeviationPerComponent()) [0.972976,0.950382]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::computeVariance "Estimate the componentwise variances. Returns ------- variances : :class:`~openturns.Point` Componentwise variances estimated from the sample. Notes ----- The componentwise variances are estimated as follows: .. math:: \vect{\widehat{\sigma^2}} = \Tr{\left(\frac{1}{m-1} \sum_{j=1}^m \left(x_i^{(j)} - \widehat{\mu}_i\right)^2, \quad i = 1, \ldots, n\right)} where :math:`\vect{\widehat{\mu}}` is the estimate of the mean. This estimator is unbiased. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.computeVariance()) [0.946682,0.903226]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::erase "Erase point(s) at or between index(es) (in-place). Parameters ---------- f : int, :math:`0 \leq f < m` The index of the first point to erase. l : int, :math:`f < l \leq m`, optional The index after the last point to erase. Default uses `l = f + 1` and only removes `sample[f]`. Returns ------- erased_sample : :class:`~openturns.Sample` Erased sample `[sample[:i_start:], sample[i_stop::]]`. Examples -------- >>> import openturns as ot >>> sample = ot.Sample([[i] for i in range(5)]) >>> print(sample) 0 : [ 0 ] 1 : [ 1 ] 2 : [ 2 ] 3 : [ 3 ] 4 : [ 4 ] >>> sample.erase(1, 3) >>> print(sample) 0 : [ 0 ] 1 : [ 3 ] 2 : [ 4 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::exportToCSVFile "Dump the sample to a CSV file. Parameters ---------- file_name : str Path to CSV file. separator : str Separating string. Default uses `csv-file-separator` from the :class:`~openturns.ResourceMap`. Notes ----- This will create a header line with componentwise descriptions (obtained from :py:meth:`getDescription`) between quotes as column names. See Also -------- ImportFromCSVFile, ImportFromTextFile Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> sample.exportToCSVFile('sample.csv', '; ')" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::find "Get the position of a point in the sample. Parameters ---------- point : sequence of float The wanted point. Returns ------- index : int, Returns :math:`m` if the point does not belong to the sample. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(30) >>> print(sample.find(sample[10])) 10 >>> print(sample.find([0.0, 0.0])) 30" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getDescription "Accessor to the componentwise description. Returns ------- description : :class:`~openturns.Description` Description of the sample's components. See Also -------- setDescription" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getDimension "Accessor to the sample's dimension. Returns ------- n : int The number of components of the points in the sample." // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getMarginal "Accessor to sample marginal(s) (column(s)). Parameters ---------- indices : int or sequence of int, :math:`0 \leq i < n` The index(es) of the wanted marginal(s). Returns ------- sample : :class:`~openturns.Sample` A subsample of the present sample with the requested marginal(s). Notes ----- The :class:`~openturns.Sample` also implements slicing in its `__getitem__` method. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(10).getSample(3) >>> print(sample.getMarginal([1, 4])) [ X1 X4 ] 0 : [ -1.26617 -2.18139 ] 1 : [ 0.261018 -1.31178 ] 2 : [ 0.445785 0.473617 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getMax "Accessor to the componentwise maximum values. Returns ------- maximum_values : :class:`~openturns.Point` Componentwise maximum values." // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getMin "Accessor to the componentwise minimum values. Returns ------- minimum_values : :class:`~openturns.Point` Componentwise minimum values." // --------------------------------------------------------------------- %feature("docstring") OT::Sample::getSize "Accessor to the sample size. Returns ------- m : int The number points in the sample." // --------------------------------------------------------------------- %feature("docstring") OT::Sample::rank "Compute the sample (componentwise) ranks. Parameters ---------- marginal_index : int, :math:`0 \leq i < n`, optional The component whose ranks are wanted. Default computes the ranks of all the components. Notes ----- The ranks of a 1d sample is a list of indices that sorts the points in the ascending order. Ties (equal points) are averaged. Returns ------- ranks : :class:`~openturns.Sample` The requested ranks. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(3) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] >>> print(sample.rank()) [ X0 X1 ] 0 : [ 2 0 ] 1 : [ 1 2 ] 2 : [ 0 1 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::setDescription "Accessor to the componentwise description. Parameters ---------- description : sequence of str Description of the sample's components. See Also -------- getDescription" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::sort "Sort the sample. Parameters ---------- marginal_index : int, :math:`0 \leq i < n`, optional The component to sort. Default sorts the whole sample. Returns ------- sorted_sample : :class:`~openturns.Sample` The requested sorted sample. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(3) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] >>> print(sample.sort()) [ X0 X1 ] 0 : [ -2.18139 0.350042 ] 1 : [ -0.438266 1.20548 ] 2 : [ 0.608202 -1.26617 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::sortAccordingToAComponent "Sort the sample according to the given component. Parameters ---------- marginal_index : int, :math:`0 \leq i < n` The component to use for sorting the sample. Returns ------- sorted_sample : :class:`~openturns.Sample` The sample sorted according to the given component. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(3) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] >>> print(sample.sortAccordingToAComponent(0)) [ X0 X1 ] 0 : [ -2.18139 0.350042 ] 1 : [ -0.438266 1.20548 ] 2 : [ 0.608202 -1.26617 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::split "Trunk the sample. It splits the sample before the index passed as argument and returns the remainder as new sample. Parameters ---------- index : int, :math:`0 \leq i < m` The truncation index. Returns ------- remainder_sample : :class:`~openturns.Sample` The remainder sample (everyting that comes after the truncation index). Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(3) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] >>> remainder_sample = sample.split(1) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] >>> print(remainder_sample) [ X0 X1 ] 0 : [ -0.438266 1.20548 ] 1 : [ -2.18139 0.350042 ]" // --------------------------------------------------------------------- %feature("docstring") OT::Sample::stack "Stack (horizontally) the given sample to the current one (in-place). Parameters ---------- sample : :class:`~openturns.Sample` Sample to stack with compatible size. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(2).getSample(3) >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] >>> another_sample = ot.Normal(2).getSample(3) >>> print(another_sample) [ X0 X1 ] 0 : [ -0.355007 1.43725 ] 1 : [ 0.810668 0.793156 ] 2 : [ -0.470526 0.261018 ] >>> sample.stack(another_sample) >>> print(sample) [ X0 X1 X0 X1 ] 0 : [ 0.608202 -1.26617 -0.355007 1.43725 ] 1 : [ -0.438266 1.20548 0.810668 0.793156 ] 2 : [ -2.18139 0.350042 -0.470526 0.261018 ]" %feature("docstring") OT::Sample::sortUnique "Sort the sample and remove duplicate points. Returns ------- unique_sample : :class:`~openturns.Sample` The requested sorted sample with duplicate points removed. Examples -------- >>> import openturns as ot >>> sample = ot.Sample([[3, 0, 3], [1, 1, 0], [0, 2, 2], [1, 1, 0]]) >>> print(sample) 0 : [ 3 0 3 ] 1 : [ 1 1 0 ] 2 : [ 0 2 2 ] 3 : [ 1 1 0 ] >>> print(sample.sortUnique()) 0 : [ 0 2 2 ] 1 : [ 1 1 0 ] 2 : [ 3 0 3 ]" openturns-1.9/python/src/Sampler.i000066400000000000000000000005501307543307100173100ustar00rootroot00000000000000// SWIG file Sampler.i %{ #include "openturns/Sampler.hxx" %} %include Sampler_doc.i OTTypedInterfaceObjectHelper(Sampler) %include openturns/Sampler.hxx namespace OT { %extend Sampler { const String __str__() const { return self->__repr__(); } } } namespace OT { %extend Sampler { Sampler(const Sampler & other) { return new OT::Sampler(other); } } } openturns-1.9/python/src/SamplerImplementation.i000066400000000000000000000005161307543307100222200ustar00rootroot00000000000000// SWIG file SamplerImplementation.i %{ #include "openturns/SamplerImplementation.hxx" %} %include SamplerImplementation_doc.i %include openturns/SamplerImplementation.hxx namespace OT { %extend SamplerImplementation { SamplerImplementation(const SamplerImplementation & other) { return new OT::SamplerImplementation(other); } } } openturns-1.9/python/src/SamplerImplementation_doc.i.in000066400000000000000000000044751307543307100234620ustar00rootroot00000000000000%define OT_Sampler_doc "Sampler. Available constructors: Sampler(*aSampler*) Parameters ---------- aSampler : :class:`~openturns.Sampler` Particular sampler. By default it is a :class:`~openturns.RandomWalkMetropolisHastings`. Notes ----- A Sampler is an object whose fundamental ability is to produce samples according to a certain distribution. See also -------- MCMC, RandomWalkMetropolisHastings Examples -------- >>> import openturns as ot >>> sampler = ot.Sampler()" %enddef %feature("docstring") OT::SamplerImplementation OT_Sampler_doc // --------------------------------------------------------------------- %define OT_Sampler_getDimension_doc "Get the dimension of the samples generated. Returns ------- dimension : int Dimension of the samples that the Sampler can generate." %enddef %feature("docstring") OT::SamplerImplementation::getDimension OT_Sampler_getDimension_doc // --------------------------------------------------------------------- %define OT_Sampler_getRealization_doc "Return a realization. Returns ------- realization : :class:`~openturns.Point` A new realization." %enddef %feature("docstring") OT::SamplerImplementation::getRealization OT_Sampler_getRealization_doc // --------------------------------------------------------------------- %define OT_Sampler_getSample_doc "Return several realizations. Parameters ---------- size : int, :math:`size \leq 0` Number of realizations needed. Returns ------- realizations : :class:`~openturns.Sample` Sequence composed of *size* new realizations." %enddef %feature("docstring") OT::SamplerImplementation::getSample OT_Sampler_getSample_doc // --------------------------------------------------------------------- %define OT_Sampler_getVerbose_doc "Tell whether the verbose mode is activated or not. Returns ------- isVerbose : bool The verbose mode is activated if it is *True*, desactivated otherwise." %enddef %feature("docstring") OT::SamplerImplementation::getVerbose OT_Sampler_getVerbose_doc // --------------------------------------------------------------------- %define OT_Sampler_setVerbose_doc "Set the verbose mode. Parameters ---------- isVerbose : bool The verbose mode is activated if it is *True*, desactivated otherwise." %enddef %feature("docstring") OT::SamplerImplementation::setVerbose OT_Sampler_setVerbose_doc openturns-1.9/python/src/Sampler_doc.i.in000066400000000000000000000007471307543307100205520ustar00rootroot00000000000000// Sampler docstrings are defined in SamplerImplementation_doc.i.in %feature("docstring") OT::Sampler OT_Sampler_doc %feature("docstring") OT::Sampler::getDimension OT_Sampler_getDimension_doc %feature("docstring") OT::Sampler::getRealization OT_Sampler_getRealization_doc %feature("docstring") OT::Sampler::getSample OT_Sampler_getSample_doc %feature("docstring") OT::Sampler::getVerbose OT_Sampler_getVerbose_doc %feature("docstring") OT::Sampler::setVerbose OT_Sampler_setVerbose_docopenturns-1.9/python/src/SamplingStrategy.i000066400000000000000000000005251307543307100212040ustar00rootroot00000000000000// SWIG file SamplingStrategy.i %{ #include "openturns/SamplingStrategy.hxx" %} %include SamplingStrategy_doc.i OTTypedInterfaceObjectHelper(SamplingStrategy) %include openturns/SamplingStrategy.hxx namespace OT{ %extend SamplingStrategy { SamplingStrategy(const SamplingStrategy & other) { return new OT::SamplingStrategy(other); } } } openturns-1.9/python/src/SamplingStrategyImplementation.i000066400000000000000000000006251307543307100241130ustar00rootroot00000000000000// SWIG file SamplingStrategyImplementation.i %{ #include "openturns/SamplingStrategyImplementation.hxx" %} %include SamplingStrategyImplementation_doc.i %include openturns/SamplingStrategyImplementation.hxx namespace OT{ %extend SamplingStrategyImplementation { SamplingStrategyImplementation(const SamplingStrategyImplementation & other) { return new OT::SamplingStrategyImplementation(other); } } } openturns-1.9/python/src/SamplingStrategyImplementation_doc.i.in000066400000000000000000000046061307543307100253500ustar00rootroot00000000000000%define OT_SamplingStrategy_doc "Base class for sampling strategies. Available constructor: SamplingStrategyImplementation() SamplingStrategyImplementation(*samplingStratImp*) SamplingStrategyImplementation(*dimension*) Parameters ---------- samplingStratImp : SamplingStrategyImplementationImplementation An implementation of the sampling strategy adopted, which is :class:`~openturns.RandomDirection` or :class:`~openturns.OrthogonalDirection`. dimension : int The dimension of the standard space. By default, :math:`dimension = 0` but automatically updated by the calling class. See also -------- RandomDirection, OrthogonalDirection" %enddef %feature("docstring") OT::SamplingStrategyImplementation OT_SamplingStrategy_doc // --------------------------------------------------------------------- %define OT_SamplingStrategy_generate_doc "Generate the sample. Returns ------- sample : :class:`~openturns.Sample` The sample generated according to the sampling strategy." %enddef %feature("docstring") OT::SamplingStrategyImplementation::generate OT_SamplingStrategy_generate_doc // --------------------------------------------------------------------- %define OT_SamplingStrategy_getDimension_doc "Accessor to the dimension. Returns ------- dimension : int Dimension of the standard space." %enddef %feature("docstring") OT::SamplingStrategyImplementation::getDimension OT_SamplingStrategy_getDimension_doc // --------------------------------------------------------------------- %define OT_SamplingStrategy_setDimension_doc "Accessor to the dimension. Parameters ---------- dimension : int Dimension of the standard space." %enddef %feature("docstring") OT::SamplingStrategyImplementation::setDimension OT_SamplingStrategy_setDimension_doc // --------------------------------------------------------------------- %define OT_SamplingStrategy_getUniformUnitVectorRealization_doc "Accessor to a realization according to the uniform distribution. Parameters ---------- dimension : int The dimension of the sphere unity (which is the dimension of the standard space). Returns ------- sample : :class:`~openturns.Point` The realization of a vector on the sphere unity, according to the uniform distribution." %enddef %feature("docstring") OT::SamplingStrategyImplementation::getUniformUnitVectorRealization OT_SamplingStrategy_getUniformUnitVectorRealization_docopenturns-1.9/python/src/SamplingStrategy_doc.i.in000066400000000000000000000006531307543307100224400ustar00rootroot00000000000000// SamplingStrategy docstrings are defined in SamplingStrategyImplementation_doc.i.in %feature("docstring") OT::SamplingStrategy OT_SamplingStrategy_doc %feature("docstring") OT::SamplingStrategy::generate OT_SamplingStrategy_generate_doc %feature("docstring") OT::SamplingStrategy::getDimension OT_SamplingStrategy_getDimension_doc %feature("docstring") OT::SamplingStrategy::setDimension OT_SamplingStrategy_setDimension_docopenturns-1.9/python/src/Secant.i000066400000000000000000000003261307543307100171230ustar00rootroot00000000000000// SWIG file Secant.i %{ #include "openturns/Secant.hxx" %} %include Secant_doc.i %include openturns/Secant.hxx namespace OT { %extend Secant { Secant(const Secant & other) { return new OT::Secant(other); } } } openturns-1.9/python/src/Secant_doc.i.in000066400000000000000000000041011307543307100203500ustar00rootroot00000000000000%feature("docstring") OT::Secant "Secant algorithm solver for 1D non linear equations. Available constructor: Secant() Secant(*absError, relError, resError, maximumFunctionEvaluation*) Parameters ---------- absError : positive float Absolute error: distance between two successive iterates at the end point. Default is :math:`10^{-5}`. relError : positive float Relative error: distance between the two last successive iterates with regards to the last iterate. Default is :math:`10^{-5}`. resError : positive float Residual error: difference between the last iterate value and the expected value. Default is :math:`10^{-8}`. maximumFunctionEvaluation : int The maximum number of evaluations of the function. Default is :math:`100`. See also -------- Solver, Bisection, Brent Notes ----- The Secant solver is based on the evaluation of a segment between the two last iterated points." // --------------------------------------------------------------------- %feature("docstring") OT::Secant::solve "Solve an equation. **Available usages**: solve(*function, value, infPoint, supPoint*) solve(*function, value, infPoint, supPoint, infValue, supValue*) Parameters ---------- function : :class:`~openturns.Function` The function of the equation :math:`function(x) = value` to be solved in the interval :math:`[infPoint, supPoint]`. value : float The value of which the function must be equal. infPoint : float Lower bound of the interval definition of the variable :math:`x`. supPoint : float Upper bound of the interval definition of the variable :math:`x`. infValue : float The value such that :math:`infValue = function(infPoint)`. It must be of opposite sign of :math:`supValue`. supValue : float The value such that :math:`supValue = function(supPoint)`. It must be of opposite sign of :math:`infValue`. Returns ------- result : float The result of the root research. Notes ----- The Secant solver is based on the evaluation of a segment between the two last iterated points. Secant might fail and not converge." openturns-1.9/python/src/SecondOrderModel.i000066400000000000000000000005251307543307100210770ustar00rootroot00000000000000// SWIG file SecondOrderModel.i %{ #include "openturns/SecondOrderModel.hxx" %} %include SecondOrderModel_doc.i OTTypedInterfaceObjectHelper(SecondOrderModel) %include openturns/SecondOrderModel.hxx namespace OT{ %extend SecondOrderModel { SecondOrderModel(const SecondOrderModel & other) { return new OT::SecondOrderModel(other); } } } openturns-1.9/python/src/SecondOrderModelImplementation.i000066400000000000000000000006251307543307100240060ustar00rootroot00000000000000// SWIG file SecondOrderModelImplementation.i %{ #include "openturns/SecondOrderModelImplementation.hxx" %} %include SecondOrderModelImplementation_doc.i %include openturns/SecondOrderModelImplementation.hxx namespace OT{ %extend SecondOrderModelImplementation { SecondOrderModelImplementation(const SecondOrderModelImplementation & other) { return new OT::SecondOrderModelImplementation(other); } } } openturns-1.9/python/src/SecondOrderModelImplementation_doc.i.in000066400000000000000000000145701307543307100252440ustar00rootroot00000000000000%define OT_SecondOrderModel_doc "Second order model. Notes ----- We consider :math:`X: \Omega \times\cD \mapsto \Rset^d` a multivariate stochastic process of dimension :math:`d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`, :math:`\vect{t}\in \cD` is a multivariate index and :math:`X(\omega, \vect{t}) \in \Rset^d`. We note :math:`X_{\vect{t}}: \Omega \rightarrow \Rset^d` the random variable at index :math:`\vect{t} \in \cD` defined by :math:`X_{\vect{t}}(\omega)=X(\omega, \vect{t})` and :math:`X(\omega): \cD \mapsto \Rset^d` a realization of the process :math:`X`, for a given :math:`\omega \in \Omega` defined by :math:`X(\omega)(\vect{t})=X(\omega, \vect{t})`. The *SecondOrderModel* class enable to get both spectral information of such process thanks to the :class:`SpectralModel` class and spatial/temporal information using the :class:`CovarianceModel` information. A SecondOrderModel object can be created only through its derived classes: :class:`~openturns.ExponentialCauchy`" %enddef %feature("docstring") OT::SecondOrderModelImplementation OT_SecondOrderModel_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_compute_covariance_doc "Evaluate the covariance function. Available usages: computeCovariance(s, t) computeCovariance(tau) Parameters ---------- s, t : floats or sequence of floats. Inputs. tau : float or sequence of floats. Input. Returns ------- covariance : CovarianceMatrix The evaluation of the covariance function. Notes ----- *computeCovariance* evaluates the covariance model :math:`C : \cD \times \cD \mapsto \cM_{d \times d}(\Rset)` at :math:`(s,t)\in \Rset^n`: .. math:: C(\vect{s}, \vect{t})=\Expect{(X_{\vect{s}}-m(\vect{s}))\Tr{(X_{\vect{t}}-m(\vect{t}))}} We note that the first usage calls the second as model is stationary. Thus, :math:`C(\vect{s}, \vect{t})` = :math:`C^{stat}(\vect{\tau})` with :math:`\vect{\tau}=\vect{s}-\vect{t}`. " %enddef %feature("docstring") OT::SecondOrderModelImplementation::computeCovariance OT_SecondOrderModel_compute_covariance_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_compute_spectral_density_doc "Evaluate the spectral density function for a specific frequency. Parameters ---------- f : float Frequency value. Returns ------- spd : HermitianMatrixs The evaluation of spectral density function at frequency f. Notes ----- *computeSpectralDensity* evaluates the spectral model :math:`S : \Rset^n \mapsto \cH^+_{d}` at :math:`f\in \Rset^n`: .. math:: \forall \vect{f} \in \Rset^n, \cS(\vect{f}) = \prod_{k=1}^{n} \vect{\theta}_k \mat{\Sigma} \rho(\vect{f} \odot \vect{\theta}) where :math:`\mat{\Sigma}` is a covariance matrix that explains the covariance structure and :math:`(\vect{f} \odot \vect{\theta})_k = \vect{f}_k \vect{\theta}_k`" %enddef %feature("docstring") OT::SecondOrderModelImplementation::computeSpectralDensity OT_SecondOrderModel_compute_spectral_density_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_discretize_doc "Discretize the second order on a given RegularGrid/Mesh model using its covariance function. Parameters ---------- meshOrGrid : :class:`~openturns.Mesh` or :class:`~openturns.RegularGrid` Mesh or time grid of size :math:`N` associated with the process. Returns ------- covarianceMatrix : :class:`~openturns.CovarianceMatrix` Covariance matrix :math:`\in\cM_{nd\times nd}(\Rset)` (if the process is of dimension :math:`d`). Notes ----- This method makes a discretization of the covariance model on *meshOrGrid* composed of the vertices :math:`(\vect{t}_1, \dots, \vect{t}_{N-1})` and returns the covariance matrix: .. math :: \mat{C}_{1,\dots,k} = \left( \begin{array}{cccc} C(\vect{t}_1, \vect{t}_1) &C(\vect{t}_1, \vect{t}_2) & \dots & C(\vect{t}_1, \vect{t}_{k}) \\ \dots & C(\vect{t}_2, \vect{t}_2) & \dots & C(\vect{t}_2, \vect{t}_{k}) \\ \dots & \dots & \dots & \dots \\ \dots & \dots & \dots & C(\vect{t}_{k}, \vect{t}_{k}) \end{array} \right)" %enddef %feature("docstring") OT::SecondOrderModelImplementation::discretize OT_SecondOrderModel_discretize_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_get_covariance_model_doc "Return the covariance model. Returns ------- covarianceModel : :class:`~openturns.CovarianceModel` The covariance model of the second order model." %enddef %feature("docstring") OT::SecondOrderModelImplementation::getCovarianceModel OT_SecondOrderModel_get_covariance_model_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_getDimension_doc "Get the dimension of the *SecondOrderModel*. Returns ------- dimension : int Dimension of the *SecondOrderModel*." %enddef %feature("docstring") OT::SecondOrderModelImplementation::getDimension OT_SecondOrderModel_getDimension_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_get_spatial_dimension_doc "Get the spatial dimension of the spectral density function. Returns ------- spatialDimension : int SpatialDimension of the *SecondOrderModel*." %enddef %feature("docstring") OT::SecondOrderModelImplementation::getSpatialDimension OT_SecondOrderModel_get_spatial_dimension_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_get_spectral_model_doc "Return the spectral model. Returns ------- spectralModel : :class:`~openturns.SpectralModel` The spectral model of the second order model." %enddef %feature("docstring") OT::SecondOrderModelImplementation::getSpectralModel OT_SecondOrderModel_get_spectral_model_doc // --------------------------------------------------------------------- %define OT_SecondOrderModel_set_models_doc "Set both the covariance and spectral models of a second order model. Parameters ---------- covarianceModel : :class:`~openturns.CovarianceModel` The covariance model of the second order model. spectralModel : :class:`~openturns.SpectralModel` The spectral model of the second order model." %enddef %feature("docstring") OT::SecondOrderModelImplementation::setModels OT_SecondOrderModel_set_models_doc // --------------------------------------------------------------------- openturns-1.9/python/src/SecondOrderModel_doc.i.in000066400000000000000000000017131307543307100223310ustar00rootroot00000000000000// SecondOrderModel docstrings are defined in SecondOrderModelImplementation_doc.i.in %feature("docstring") OT::SecondOrderModel OT_SecondOrderModel_doc %feature("docstring") OT::SecondOrderModel::computeCovariance OT_SecondOrderModel_compute_covariance_doc %feature("docstring") OT::SecondOrderModel::computeSpectralDensity OT_SecondOrderModel_compute_spectral_density_doc %feature("docstring") OT::SecondOrderModel::discretize OT_SecondOrderModel_discretize_doc %feature("docstring") OT::SecondOrderModel::getCovarianceModel OT_SecondOrderModel_get_covariance_model_doc %feature("docstring") OT::SecondOrderModel::getDimension OT_SecondOrderModel_getDimension_doc %feature("docstring") OT::SecondOrderModel::getSpatialDimension OT_SecondOrderModel_get_spatial_dimension_doc %feature("docstring") OT::SecondOrderModel::getSpectralModel OT_SecondOrderModel_get_spectral_model_doc %feature("docstring") OT::SecondOrderModel::setModels OT_SecondOrderModel_set_models_doc openturns-1.9/python/src/SequentialStrategy.i000066400000000000000000000004651307543307100215470ustar00rootroot00000000000000// SWIG file SequentialStrategy.i %{ #include "openturns/SequentialStrategy.hxx" %} %include SequentialStrategy_doc.i %include openturns/SequentialStrategy.hxx namespace OT{ %extend SequentialStrategy { SequentialStrategy(const SequentialStrategy & other) { return new OT::SequentialStrategy(other); } } } openturns-1.9/python/src/SequentialStrategy_doc.i.in000066400000000000000000000035231307543307100227770ustar00rootroot00000000000000%feature("docstring") OT::SequentialStrategy "Sequential truncation strategy. Available constructors: SequentialStrategy(*orthogonalBasis, maximumDimension*) Parameters ---------- orthogonalBasis : :class:`~openturns.OrthogonalBasis` An OrthogonalBasis. maximumDimension : positive int Maximum number of terms of the basis. See also -------- AdaptiveStrategy, SequentialStrategy, CleaningStrategy Notes ----- The sequential strategy consists in constructing the basis of the truncated PC iteratively. Precisely, one begins with the first term :math:`\Psi_0`, that is :math:`K_0 = \{0\}`, and one complements the current basis as follows: :math:`K_{k+1} = K_k \cup \{\Psi_{k+1}\}`. The construction process is stopped when a given accuracy criterion, defined in the :class:`~openturns.ProjectionStrategy`, is reached, or when :math:`k` is equal to a prescribed maximum basis size :math:`P`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> # Define the model >>> inputDim = 1 >>> model = ot.SymbolicFunction(['x'], ['x*sin(x)']) >>> # Create the input distribution >>> distribution = ot.ComposedDistribution([ot.Uniform()]*inputDim) >>> # Construction of the multivariate orthonormal basis >>> polyColl = [0.0]*inputDim >>> for i in range(distribution.getDimension()): ... polyColl[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i)) >>> enumerateFunction = ot.LinearEnumerateFunction(inputDim) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> # Truncature strategy of the multivariate orthonormal basis >>> # We want to select among the maximumDimension = 20 first polynomials of the >>> # multivariate basis those verifying the convergence criterion. >>> maximumDimension = 20 >>> adaptiveStrategy = ot.SequentialStrategy(productBasis, maximumDimension)" openturns-1.9/python/src/SharedPointer.i000066400000000000000000000003571307543307100204610ustar00rootroot00000000000000// SWIG file SharedPointer.i %{ #include "openturns/SharedPointer.hxx" %} %include openturns/SharedPointer.hxx namespace OT{ %extend SharedPointer { SharedPointer(const SharedPointer & other) { return new OT::SharedPointer(other); } } } openturns-1.9/python/src/SimulatedAnnealingLHS.i000066400000000000000000000004661307543307100220260ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SimulatedAnnealingLHS.hxx" %} %include SimulatedAnnealingLHS_doc.i %include openturns/SimulatedAnnealingLHS.hxx namespace OT { %extend SimulatedAnnealingLHS { SimulatedAnnealingLHS(const SimulatedAnnealingLHS & other) { return new OT::SimulatedAnnealingLHS(other); } } } openturns-1.9/python/src/SimulatedAnnealingLHS_doc.i.in000066400000000000000000000045641307543307100232630ustar00rootroot00000000000000%define OT_SimulatedAnnealing_doc "LHS optimization using simulated annealing. Performs the optimization of an LHS using simulated annealing algorithm. Available constructors: SimulatedAnnealingLHS(*lhsDesign*) SimulatedAnnealingLHS(*lhsDesign, profile*) SimulatedAnnealingLHS(*lhsDesign, profile, spaceFilling*) SimulatedAnnealingLHS(*initialDesign, distribution*) SimulatedAnnealingLHS(*initialDesign, distribution, profile*) SimulatedAnnealingLHS(*initialDesign, distribution, profile, spaceFilling*) Parameters ---------- lhsDesign : :class:`~openturns.LHSExperiment` Factory that generate designs initialDesign : 2d-array sequence Initial design to be optimized distribution : :class:`~openturns.Distribution` Distribution of designs profile : :class:`~ot.TemperatureProfile` Temperature profile used by the simulated annealing algorithm Default one is GeometricProfile spaceFilling : :class:`~ot.SpaceFilling` Criterion to be optimized Default one is SpaceFillingMinDist Notes ----- With the first constructor, the initial design is generated thanks to lhsDesign. With the second usage, we fix it. Starting from this design, a new design is obtained by permuting one random coordinate of two randomly chosen elements; by construction, this design is also an LHS design. If the new design is better than the previous one, it is kept. If it is worse, it may anyway be kept with some probability, which depends on how these designs compare, but also on a temperature profile T which decreases over time. This means that jumping away from local extrema becomes less probable over time. Examples -------- >>> import openturns as ot >>> dimension = 3 >>> size = 100 >>> # Build standard randomized LHS algorithm >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*dimension) >>> lhs = ot.LHSExperiment(distribution, size) >>> lhs.setAlwaysShuffle(True) # randomized >>> # Defining space fillings >>> spaceFilling = ot.SpaceFillingC2() >>> # Geometric profile >>> geomProfile = ot.GeometricProfile(10.0, 0.95, 2000) >>> # Simulated Annealing LHS with geometric temperature profile, C2 optimization >>> optimalLHSAlgorithm = ot.SimulatedAnnealingLHS(lhs, geomProfile, spaceFilling)" %enddef %feature("docstring") OT::SimulatedAnnealingLHS OT_SimulatedAnnealing_doc // --------------------------------------------------------------------- openturns-1.9/python/src/Simulation.i000066400000000000000000000030251307543307100200310ustar00rootroot00000000000000// SWIG file Simulation.i %{ #include "openturns/Simulation.hxx" #include "openturns/PythonWrappingFunctions.hxx" static void PythonProgressCallback(OT::Scalar percent, void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer point(OT::convert< OT::Scalar, OT::_PyFloat_ >(percent)); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, point.get(), NULL )); } static OT::Bool PythonStopCallback(void * data) { PyObject * pyObj = reinterpret_cast(data); OT::ScopedPyObjectPointer result(PyObject_CallFunctionObjArgs( pyObj, NULL )); return OT::convert< OT::_PyInt_, OT::UnsignedInteger >(result.get()); } %} %include Simulation_doc.i %ignore OT::Simulation::setProgressCallback(ProgressCallback callBack, void * data); %ignore OT::Simulation::setStopCallback(StopCallback callBack, void * data); %include openturns/Simulation.hxx namespace OT { %extend Simulation { Simulation(const Simulation & other) { return new OT::Simulation(other); } void setProgressCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setProgressCallback(&PythonProgressCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } void setStopCallback(PyObject * callBack) { if (PyCallable_Check(callBack)) { self->setStopCallback(&PythonStopCallback, callBack); } else { throw OT::InvalidArgumentException(HERE) << "Argument is not a callable object."; } } } // Simulation } // OT openturns-1.9/python/src/SimulationResult.i000066400000000000000000000005251307543307100212320ustar00rootroot00000000000000// SWIG file SimulationResult.i %{ #include "openturns/SimulationResult.hxx" %} %include SimulationResult_doc.i OTTypedInterfaceObjectHelper(SimulationResult) %include openturns/SimulationResult.hxx namespace OT{ %extend SimulationResult { SimulationResult(const SimulationResult & other) { return new OT::SimulationResult(other); } } } openturns-1.9/python/src/SimulationResultImplementation.i000066400000000000000000000006251307543307100241410ustar00rootroot00000000000000// SWIG file SimulationResultImplementation.i %{ #include "openturns/SimulationResultImplementation.hxx" %} %include SimulationResultImplementation_doc.i %include openturns/SimulationResultImplementation.hxx namespace OT{ %extend SimulationResultImplementation { SimulationResultImplementation(const SimulationResultImplementation & other) { return new OT::SimulationResultImplementation(other); } } } openturns-1.9/python/src/SimulationResultImplementation_doc.i.in000066400000000000000000000207551307543307100254010ustar00rootroot00000000000000%define OT_SimulationResult_doc "Simulation result. Notes ----- Structure created by the method run() of a :class:`~openturns.Simulation`, and obtained thanks to the method getResult(). Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> limitState = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3.*E*I)']) >>> # Enable the history mecanism in order to use the getImportanceFactors method >>> limitState.enableHistory() >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> output = ot.RandomVector(limitState, ot.RandomVector(myDistribution)) >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> myLHS = ot.LHS(myEvent) >>> myLHS.run() >>> SimulationLHSResult = myLHS.getResult() >>> print(SimulationLHSResult.getImportanceFactors()) [X0 : 0.000722617, X1 : 0.635094, X2 : 0.275692, X3 : 0.0884917]" %enddef %feature("docstring") OT::SimulationResultImplementation OT_SimulationResult_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getBlockSize_doc "Accessor to the block size. Returns ------- blockSize : int Number of terms in the probability simulation estimator grouped together." %enddef %feature("docstring") OT::SimulationResultImplementation::getBlockSize OT_SimulationResult_getBlockSize_doc // --------------------------------------------------------------------- %define OT_SimulationResult_setBlockSize_doc "Accessor to the block size. Parameters ---------- blockSize : int, :math:`blockSize \geq 0` Number of terms in the probability simulation estimator grouped together." %enddef %feature("docstring") OT::SimulationResultImplementation::setBlockSize OT_SimulationResult_setBlockSize_doc // --------------------------------------------------------------------- %define OT_SimulationResult_setEvent_doc "Accessor to the event. Parameters ---------- event : :class:`~openturns.Event` Event we want to evaluate the probability." %enddef %feature("docstring") OT::SimulationResultImplementation::setEvent OT_SimulationResult_setEvent_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getEvent_doc "Accessor to the event. Returns ------- event : :class:`~openturns.Event` Event we want to evaluate the probability." %enddef %feature("docstring") OT::SimulationResultImplementation::getEvent OT_SimulationResult_getEvent_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getImportanceFactors_doc "Accessor to the importance factors. Returns ------- importanceFactors : :class:`~openturns.PointWithDescription` Sequence containing the importance factors with a description for each component. Notes ----- The importance factors :math:`\alpha_i` are evaluated from the coordinates of the mean point of event domain :math:`\vect{X}^*_{event}`, mapped into the standard space as follows: .. math:: \alpha_i = \displaystyle \frac{\left(U_{i}^*\right)^2}{||\vect{U}^*||^2} where :math:`\vect{U}^* = T(\vect{X}^*_{event})` with :math:`T` the iso-probabilistic transformation and the mean point :math:`\vect{X}^*_{event} = \displaystyle \frac{1}{n} \sum_{i=1}^{n} \vect{X}_i 1_{event}(\vect{X}_i)`. .. warning:: This notion is only available if the history mecanism of the model is activated (see :meth:`~openturns.Function.enableHistory`). See also -------- drawImportanceFactors" %enddef %feature("docstring") OT::SimulationResultImplementation::getImportanceFactors OT_SimulationResult_getImportanceFactors_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getMeanPointInEventDomain_doc "Accessor to the mean point conditioned to the event realization. Returns ------- meanPoint : :class:`~openturns.Point` Mean point in the physical space of all the simulations generated by the :class:`~openturns.Simulation` algorithm that failed into the event domain. Notes ----- .. warning:: This notion is only available if the history mecanism of the model is activated (see :meth:`~openturns.Function.enableHistory`)." %enddef %feature("docstring") OT::SimulationResultImplementation::getMeanPointInEventDomain OT_SimulationResult_getMeanPointInEventDomain_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getCoefficientOfVariation_doc "Accessor to the coefficient of variation. Returns ------- coefficient : float Coefficient of variation of the simulated sample which is equal to :math:`\sqrt{Var_e} / P_e` with :math:`Var_e` the variance estimate and :math:`P_e` the probability estimate." %enddef %feature("docstring") OT::SimulationResultImplementation::getCoefficientOfVariation OT_SimulationResult_getCoefficientOfVariation_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getConfidenceLength_doc "Accessor to the confidence length. Parameters ---------- level : float, :math:`level \in ]0, 1[` Confidence level. By default, it is :math:`0.95`. Returns ------- confidenceLength : float Length of the confidence interval at the confidence level *level*." %enddef %feature("docstring") OT::SimulationResultImplementation::getConfidenceLength OT_SimulationResult_getConfidenceLength_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getOuterSampling_doc "Accessor to the outer sampling. Returns ------- outerSampling : int Number of groups of terms in the probability simulation estimator." %enddef %feature("docstring") OT::SimulationResultImplementation::getOuterSampling OT_SimulationResult_getOuterSampling_doc // --------------------------------------------------------------------- %define OT_SimulationResult_setOuterSampling_doc "Accessor to the outer sampling. Parameters ---------- outerSampling : int, :math:`outerSampling \geq 0` Number of groups of terms in the probability simulation estimator." %enddef %feature("docstring") OT::SimulationResultImplementation::setOuterSampling OT_SimulationResult_setOuterSampling_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getStandardDeviation_doc "Accessor to the standard deviation. Returns ------- sigma : float Standard deviation of the estimator at the end of the simulation." %enddef %feature("docstring") OT::SimulationResultImplementation::getStandardDeviation OT_SimulationResult_getStandardDeviation_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getVarianceEstimate_doc "Accessor to the variance estimate. Returns ------- varianceEstimate : float Variance estimate." %enddef %feature("docstring") OT::SimulationResultImplementation::getVarianceEstimate OT_SimulationResult_getVarianceEstimate_doc // --------------------------------------------------------------------- %define OT_SimulationResult_setVarianceEstimate_doc "Accessor to the variance estimate. Parameters ---------- varianceEstimate : float, :math:`Var_e \geq 0` Variance estimate." %enddef %feature("docstring") OT::SimulationResultImplementation::setVarianceEstimate OT_SimulationResult_setVarianceEstimate_doc // --------------------------------------------------------------------- %define OT_SimulationResult_getProbabilityEstimate_doc "Accessor to the probability estimate. Returns ------- probaEstimate : float Estimate of the event probability." %enddef %feature("docstring") OT::SimulationResultImplementation::getProbabilityEstimate OT_SimulationResult_getProbabilityEstimate_doc // --------------------------------------------------------------------- %define OT_SimulationResult_setProbabilityEstimate_doc "Accessor to the probability estimate. Parameters ---------- probaEstimate : float, :math:`0 \leq P_e \leq 1` Estimate of the event probability." %enddef %feature("docstring") OT::SimulationResultImplementation::setProbabilityEstimate OT_SimulationResult_setProbabilityEstimate_doc // --------------------------------------------------------------------- %define OT_SimulationResult_drawImportanceFactors_doc "Draw the importance factors as an OpenTURNS :class:`~openturns.Graph`. .. warning:: It is necessary to enable the history of the model to perform this analysis (see :meth:`~openturns.Function.enableHistory`). See also -------- getImportanceFactors" %enddef %feature("docstring") OT::SimulationResultImplementation::drawImportanceFactors OT_SimulationResult_drawImportanceFactors_doc openturns-1.9/python/src/SimulationResult_doc.i.in000066400000000000000000000033331307543307100224640ustar00rootroot00000000000000// SimulationResult docstrings are defined in SimulationResultImplementation_doc.i.in %feature("docstring") OT::SimulationResult OT_SimulationResult_doc %feature("docstring") OT::SimulationResult::drawImportanceFactors OT_SimulationResult_drawImportanceFactors_doc %feature("docstring") OT::SimulationResult::getBlockSize OT_SimulationResult_getBlockSize_doc %feature("docstring") OT::SimulationResult::getCoefficientOfVariation OT_SimulationResult_getCoefficientOfVariation_doc %feature("docstring") OT::SimulationResult::getConfidenceLength OT_SimulationResult_getConfidenceLength_doc %feature("docstring") OT::SimulationResult::getEvent OT_SimulationResult_getEvent_doc %feature("docstring") OT::SimulationResult::getImportanceFactors OT_SimulationResult_getImportanceFactors_doc %feature("docstring") OT::SimulationResult::getMeanPointInEventDomain OT_SimulationResult_getMeanPointInEventDomain_doc %feature("docstring") OT::SimulationResult::getOuterSampling OT_SimulationResult_getOuterSampling_doc %feature("docstring") OT::SimulationResult::getProbabilityEstimate OT_SimulationResult_getProbabilityEstimate_doc %feature("docstring") OT::SimulationResult::getStandardDeviation OT_SimulationResult_getStandardDeviation_doc %feature("docstring") OT::SimulationResult::getVarianceEstimate OT_SimulationResult_getVarianceEstimate_doc %feature("docstring") OT::SimulationResult::setBlockSize OT_SimulationResult_setBlockSize_doc %feature("docstring") OT::SimulationResult::setOuterSampling OT_SimulationResult_setOuterSampling_doc %feature("docstring") OT::SimulationResult::setProbabilityEstimate OT_SimulationResult_setProbabilityEstimate_doc %feature("docstring") OT::SimulationResult::setVarianceEstimate OT_SimulationResult_setVarianceEstimate_docopenturns-1.9/python/src/SimulationSensitivityAnalysis.i000066400000000000000000000006151307543307100240120ustar00rootroot00000000000000// SWIG file SimulationSensitivityAnalysis.i %{ #include "openturns/SimulationSensitivityAnalysis.hxx" %} %include SimulationSensitivityAnalysis_doc.i %include openturns/SimulationSensitivityAnalysis.hxx namespace OT{ %extend SimulationSensitivityAnalysis { SimulationSensitivityAnalysis(const SimulationSensitivityAnalysis & other) { return new OT::SimulationSensitivityAnalysis(other); } } } openturns-1.9/python/src/SimulationSensitivityAnalysis_doc.i.in000066400000000000000000000140021307543307100252370ustar00rootroot00000000000000%feature("docstring") OT::SimulationSensitivityAnalysis "Class to perform a sensitivity analysis based on a reliability event. Available constructor: SimulationSensitivityAnalysis(*inputSample, outputSample, transformation, comparisonOp, threshold*) SimulationSensitivityAnalysis(*event*) SimulationSensitivityAnalysis(*simulationRes*) Parameters ---------- inputSample, outputSample : 2-d sequence of float Input sample and output sample of a model evaluated apart. transformation : :class:`~openturns.Function` An isoprobabilistic transformation function. comparisonOp : :class:`~openturns.ComparisonOperator` A comparison operator. threshold : float A threshold. event : :class:`~openturns.Event` An event which it composite (test is with the method :meth:`isComposite `). simulationRes : :class:`~openturns.SimulationResult` A simulation result. Notes ----- The simulation sensitivity analysis is based on: - in the first usage, the *inputSample* and *outputSample* given: - in the second usage, the samples which have been stored by the function defining the event. Care if the sample is not a statistical sample: post treatment proposed by the object might not be right. - in the third usage, the samples generated by the :class:`simulation ` that produced *simulationRes*." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::computeImportanceFactors "Compute the importance factors. Returns ------- impFactors : :class:`~openturns.Point` The importance factors. Notes ----- The importance factors, given in :eq:`importance_factor`, are evaluated from the coordinates of the mean point :eq:`mean_point` of the event domain, mapped into the standard space as follows: .. math:: :label: mean_point \vect{X}^*_{event} = \frac{1}{n} \sum_{i=1}^n \vect{X}_i 1_{event} (\vect{X}_i) .. math:: :label: importance_factor \alpha_i = \frac{ (U_i^*)^2 }{ \left\| \vect{U}^* \right\| } where .. math:: \vect{U}^* = T(\vect{X}^*_{event}) Be careful: this notion is only valid for :class:`~openturns.MonteCarlo` or :class:`~openturns.LHS` sampling as the mean is evaluated from the equation :eq:`importance_factor` (only uniform weights over the realizations :math:`\vect{X}_i`." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::computeMeanPointInEventDomain "Accessor to the mean point. Returns ------- mean : :class:`~openturns.Point` The mean point in the failure domain. Notes ----- This method computes the mean point in the physical space of all the simulations generated by the simulation that failed into the event domain. Be carefull: this notion is only valid for Monte Carlo or LHS sampling as the mean is evaluated from the equation :eq:`mean_point` (only uniform weights over the realizations :math:`\vect{X}_i`." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::drawImportanceFactors "Draw the importance factors. Returns ------- graph : :class:`~openturns.Graph` Graph containing the pie corresponding to the importance factors of the probabilistic variables." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::drawImportanceFactorsRange "Draw the importance factors evolution. Parameters ---------- probabilityScale : boolean Set True if the limits are the probability levels; set False if the limits are the thresholds defining the event. lower, upper : floats Define the boundaries of the probability levels :math:`p_{min}` and :math:`p_{max}` or those of the thresholds :math:`s_{min}` and :math:`s_{max}`. Returns ------- graph : :class:`~openturns.Graph` A graph that draws the evolution of the importance factors of each direction with respect to :math:`p \in [p_{min}, p_{max}]` or :math:`s \in [s_{min}, s_{max}]`. The importance factors are evaluated from the definition :eq:`importance_factor` for each threshold *s* or probability *p*." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::getComparisonOperator "Accessor to the comparison operator. Returns ------- operator : :class:`~openturns.ComparisonOperator` The comparison operator." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::getInputSample "Accessor to the input sample. Returns ------- inputSample : :class:`~openturns.Sample` The input sample." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::getOutputSample "Accessor to the output sample. Returns ------- outputSample : :class:`~openturns.Sample` The output sample." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::getThreshold "Accessor to the threshold. Returns ------- s : float The threshold." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::getTransformation "Accessor to the isoprobabilistic transformation function. Returns ------- transformation : :class:`~openturns.Function` The isoprobabilistic transformation function." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::setComparisonOperator "Accessor to the comparison operator. Parameters ---------- operator : :class:`~openturns.ComparisonOperator` The comparison operator." // --------------------------------------------------------------------- %feature("docstring") OT::SimulationSensitivityAnalysis::setThreshold "Accessor to the threshold. Parameters ---------- s : float The threshold."openturns-1.9/python/src/Simulation_doc.i.in000066400000000000000000000175521307543307100212750ustar00rootroot00000000000000%feature("docstring") OT::Simulation "Base class for sampling methods. Available constructor: Simulation(*event, verbose=True, convergenceStrategy=ot.Compact()*) Parameters ---------- event : :class:`~openturns.Event` The event we are computing the probability of. verbose : bool If *True*, make the computation verbose. convergenceStrategy : :class:`~openturns.HistoryStrategy` Storage strategy used to store the values of the probability estimator and its variance during the simulation algorithm. Notes ----- Base class for sampling methods, using the probability distribution of a random vector :math:`\vect{X}` to evaluate the failure probability: .. math:: P_f = \int_{\Rset^{n_X}} \mathbf{1}_{\{g(\ux,\underline{d}) \leq 0 \}}f_{\uX}(\ux)\di{\ux} = \Prob{g\left( \vect{X},\vect{d} \right) \leq 0} Here, :math:`\vect{X}` is a random vector, :math:`\vect{d}` a deterministic vector, :math:`g(\vect{X},\vect{d})` the function known as *limit state function* which enables the definition of the event :math:`\cD_f = \{\vect{X} \in \Rset^n \, | \, g(\vect{X},\vect{d}) \le 0\}`. :math:`\mathbf{1}_{ \left\{ g(\vect{x}_i,\vect{d}) \leq 0 \right\} }` describes the indicator function equal to 1 if :math:`g(\vect{x}_i,\vect{d}) \leq 0` and equal to 0 otherwise. A Simulation object can be created only through its derived classes: - :class:`~openturns.DirectionalSampling` - :class:`~openturns.ImportanceSampling`, - :class:`~openturns.LHS`, - :class:`~openturns.MonteCarlo`, - :class:`~openturns.QuasiMonteCarlo`, - :class:`~openturns.PostAnalyticalControlledImportanceSampling`, - :class:`~openturns.PostAnalyticalImportanceSampling`, - :class:`~openturns.RandomizedLHS`, - :class:`~openturns.RandomizedQuasiMonteCarlo`. See also -------- SimulationResult" // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getBlockSize "Accessor to the block size. Returns ------- blockSize : int Number of terms in the probability simulation estimator grouped together. It is set by default to 1." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setBlockSize "Accessor to the block size. Parameters ---------- blockSize : int, :math:`blockSize \geq 1` Number of terms in the probability simulation estimator grouped together. It is set by default to 1. Notes ----- For Monte Carlo, LHS and Importance Sampling methods, this allows to save space while allowing multithreading, when available we recommend to use the number of available CPUs; for the Directional Sampling, we recommend to set it to 1." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getConvergenceStrategy "Accessor to the convergence strategy. Returns ------- storage_strategy : :class:`~openturns.HistoryStrategy` Storage strategy used to store the values of the probability estimator and its variance during the simulation algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setConvergenceStrategy "Accessor to the convergence strategy. Parameters ---------- storage_strategy : :class:`~openturns.HistoryStrategy` Storage strategy used to store the values of the probability estimator and its variance during the simulation algorithm." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getMaximumCoefficientOfVariation "Accessor to the maximum coefficient of variation. Returns ------- coefficient : float Maximum coefficient of variation of the simulated sample." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setMaximumCoefficientOfVariation "Accessor to the maximum coefficient of variation. Parameters ---------- coefficient : float Maximum coefficient of variation of the simulated sample." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getMaximumOuterSampling "Accessor to the maximum sample size. Returns ------- outerSampling : int Maximum number of groups of terms in the probability simulation estimator." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setMaximumOuterSampling "Accessor to the maximum sample size. Parameters ---------- outerSampling : int Maximum number of groups of terms in the probability simulation estimator." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getMaximumStandardDeviation "Accessor to the maximum standard deviation. Returns ------- sigma : float, :math:`\sigma > 0` Maximum standard deviation of the estimator." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setMaximumStandardDeviation "Accessor to the maximum standard deviation. Parameters ---------- sigma : float, :math:`\sigma > 0` Maximum standard deviation of the estimator." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getResult "Accessor to the results. Returns ------- results : :class:`~openturns.SimulationResult` Structure containing all the results obtained after simulation and created by the method :py:meth:`run`." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getEvent "Accessor to the event. Returns ------- event : :class:`~openturns.Event` Event we want to evaluate the probability." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::getVerbose "Accessor to verbosity. Returns ------- verbosity_enabled : bool If *True*, the computation is verbose. By default it is verbose." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setVerbose "Accessor to verbosity. Parameters ---------- verbosity_enabled : bool If *True*, make the computation verbose. By default it is verbose." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::run "Launch simulation. Notes ----- It launches the simulation and creates a :class:`~openturns.SimulationResult`, structure containing all the results obtained after simulation. It computes the probability of occurence of the given event by computing the empirical mean of a sample of size at most *outerSampling * blockSize*, this sample being built by blocks of size *blockSize*. It allows to use efficiently the distribution of the computation as well as it allows to deal with a sample size :math:`> 2^{32}` by a combination of *blockSize* and *outerSampling*. see also -------- setBlockSize, setMaximumOuterSampling, ResourceMap, SimulationResult" // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::drawProbabilityConvergence "Draw the probability convergence at a given level. Parameters ---------- level : float, optional The probability convergence is drawn at this given confidence length *level*. By default *level* is 0.95. Returns ------- graph : a :class:`~openturns.Graph` probability convergence graph" // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setProgressCallback "Set up a progress callback. Parameters ---------- callback : callable Takes a float as argument as percentage of progress." // --------------------------------------------------------------------- %feature("docstring") OT::Simulation::setStopCallback "Set up a stop callback. Parameters ---------- callback : callable Returns an int deciding whether to stop or continue." openturns-1.9/python/src/Skellam.i000066400000000000000000000003361307543307100172770ustar00rootroot00000000000000// SWIG file Skellam.i %{ #include "openturns/Skellam.hxx" %} %include Skellam_doc.i %include openturns/Skellam.hxx namespace OT { %extend Skellam { Skellam(const Skellam & other) { return new OT::Skellam(other); } } } openturns-1.9/python/src/SkellamFactory.i000066400000000000000000000004261307543307100206270ustar00rootroot00000000000000// SWIG file SkellamFactory.i %{ #include "openturns/SkellamFactory.hxx" %} %include SkellamFactory_doc.i %include openturns/SkellamFactory.hxx namespace OT { %extend SkellamFactory { SkellamFactory(const SkellamFactory & other) { return new OT::SkellamFactory(other); } } } openturns-1.9/python/src/SkellamFactory_doc.i.in000066400000000000000000000006621307543307100220630ustar00rootroot00000000000000%feature("docstring") OT::SkellamFactory "Skellam factory. Available constructor: SkellamFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle \Hat{\lambda_1} & = \frac{1}{2}(\Hat{\sigma}_x + \Hat{x}_n) \\ \displaystyle \Hat{\lambda_2} & = \frac{1}{2}(\Hat{\sigma}_x - \Hat{x}_n) \end{eqnarray*} See also -------- DistributionFactory, Skellam"openturns-1.9/python/src/Skellam_doc.i.in000066400000000000000000000055761307543307100205440ustar00rootroot00000000000000%feature("docstring") OT::Skellam "Skellam distribution. Available constructors: Skellam(*lambda1=1.0, lambda2=1.0*) Parameters ---------- lambda1 : float, :math:`\lambda_1 > 0` First :class:`~openturns.Poisson` distribution's parameter. lambda2 : float, :math:`\lambda_2 > 0` Second :class:`~openturns.Poisson` distribution's parameter. Notes ----- The Skellan distribution takes its values in :math:`\Zset`. It is the distribution of :math:`(X_1 - X_2)` for :math:`(X_1, X_2)` independant and respectively distributed according to Poisson(:math:`\lambda_i`). Its probability density function is defined as: .. math:: \Prob{X = k} = 2 \Prob{Y = 2 \lambda_1}, \quad \forall k \in \Zset where Y is distributed according to the :class:`~openturns.NonCentralChiSquare` distribution :math:`\chi^2_{\nu, \delta}`, with :math:`\nu=2(k+1)` and :math:`\delta=2\lambda_2`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \lambda_1 - \lambda_2 \\ \Var{X} & = & \lambda_1 + \lambda_2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Skellam(10.0, 5.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Skellam::getLambda1 "Accessor to the first Poisson distribution's parameter :math:`\lambda_1`. Returns ------- lambda1 : float First Poisson distribution's parameter :math:`\lambda_1`." // --------------------------------------------------------------------- %feature("docstring") OT::Skellam::getLambda2 "Accessor to the second Poisson distribution's parameter :math:`\lambda_2`. Returns ------- lambda2 : float Second Poisson distribution's parameter :math:`\lambda_2`." // --------------------------------------------------------------------- %feature("docstring") OT::Skellam::setLambda1 "Accessor to the first Poisson distribution's parameter :math:`\lambda_1`. Parameters ---------- lambda1 : float, :math:`\lambda_1 >0` First Poisson distribution's parameter :math:`\lambda_1`." // --------------------------------------------------------------------- %feature("docstring") OT::Skellam::setLambda2 "Accessor to the second Poisson distribution's parameter :math:`\lambda_2`. Parameters ---------- lambda2 : float, :math:`\lambda_2 >0` Second Poisson distribution's parameter :math:`\lambda_2`." // --------------------------------------------------------------------- %feature("docstring") OT::Skellam::setLambda1Lambda2 "Accessor to the Poisson distributions' parameters. Namely :math:`\lambda_1` and :math:`\lambda_2`. Parameters ---------- lambda1 : float, :math:`\lambda_1 >0` First Poisson distribution's parameter :math:`\lambda_1`. lambda2 : float, :math:`\lambda_2 >0` Second Poisson distribution's parameter :math:`\lambda_2`." openturns-1.9/python/src/SklarCopula.i000066400000000000000000000027671307543307100201410ustar00rootroot00000000000000// SWIG file SklarCopula.i %{ #include "openturns/SklarCopula.hxx" %} %include SklarCopula_doc.i %typemap(in) const OT::SklarCopula & { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From class, ok } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { // From Pointer OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); $1 = new OT::SklarCopula( **p_impl ); } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIGTYPE_p_OT__DistributionImplementation, 0))) { // From DistributionImplementation OT::DistributionImplementation * p_impl = reinterpret_cast< OT::DistributionImplementation * >( ptr ); $1 = new OT::SklarCopula( *p_impl ); } else { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a SklarCopula"); } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const OT::SklarCopula & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIG_TypeQuery("OT::Pointer *"), 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIGTYPE_p_OT__DistributionImplementation, 0)); } %include openturns/SklarCopula.hxx namespace OT { %extend SklarCopula { SklarCopula(const SklarCopula & other) { return new OT::SklarCopula(other); } } } openturns-1.9/python/src/SklarCopula_doc.i.in000066400000000000000000000031241307543307100213570ustar00rootroot00000000000000%feature("docstring") OT::SklarCopula "Sklar copula. Available constructor: SklarCopula(*distribution*) Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution, whatever its type : UsualDistribution, ComposedDistribution, KernelMixture, Mixture, RandomMixture, Copula, ...). Notes ----- The Sklar copula is obtained directly from the expression of the :math:`n`-dimensional distribution which cumulative distribution function is :math:`F` with :math:`F_i` its marginals : .. math:: C(u_1, \cdots, u_n) = F(F_1^{-1}(u_1), \cdots, F_n^{-1}(u_n)) for :math:`u_i \in [0, 1]` See also -------- MaximumEntropyOrderStatisticsCopula, Copula Examples -------- Create a distribution: >>> import openturns as ot >>> R = ot.CorrelationMatrix(3) >>> R[0, 1] = 0.25 >>> R[1, 2] = 0.25 >>> copula = ot.SklarCopula(ot.Normal([1.0, 2.0, 3.0], [2.0, 3.0, 1.0], R)) Draw a sample: >>> sample = copula.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::SklarCopula::getDistribution "Get the distribution. Returns ------- distribution : :class:`~openturns.Distribution` The distribution from which the copula is built." // --------------------------------------------------------------------- %feature("docstring") OT::SklarCopula::setDistribution "Set the distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` A distribution, whatever its type : UsualDistribution, ComposedDistribution, KernelMixture, Mixture, RandomMixture, Copula, ...) from which the copula is built." openturns-1.9/python/src/SobolIndicesAlgorithm.i000066400000000000000000000006021307543307100221270ustar00rootroot00000000000000// SWIG file SobolIndicesAlgorithm.i %{ #include "openturns/SobolIndicesAlgorithm.hxx" %} %include SobolIndicesAlgorithm_doc.i OTTypedInterfaceObjectHelper(SobolIndicesAlgorithm) %include openturns/SobolIndicesAlgorithm.hxx namespace OT{ %extend SobolIndicesAlgorithm { SobolIndicesAlgorithm(const SobolIndicesAlgorithm & other) { return new OT::SobolIndicesAlgorithm(other); } } } openturns-1.9/python/src/SobolIndicesAlgorithmImplementation.i000066400000000000000000000006751307543307100250470ustar00rootroot00000000000000// SWIG file SobolIndicesAlgorithmImplementation.i %{ #include "openturns/SobolIndicesAlgorithmImplementation.hxx" %} %include SobolIndicesAlgorithmImplementation_doc.i %include openturns/SobolIndicesAlgorithmImplementation.hxx namespace OT{ %extend SobolIndicesAlgorithmImplementation { SobolIndicesAlgorithmImplementation(const SobolIndicesAlgorithmImplementation & other) { return new OT::SobolIndicesAlgorithmImplementation(other); } } } openturns-1.9/python/src/SobolIndicesAlgorithmImplementation_doc.i.in000066400000000000000000000361241307543307100262770ustar00rootroot00000000000000%define OT_SobolIndicesAlgorithm_doc " Sensitivity analysis. Notes ----- This method is concerned with analyzing the influence the random vector :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)` has on a random variable :math:`Y^k` which is being studied for uncertainty. Here we attempt to evaluate the part of variance of :math:`Y^k` due to the different components :math:`X^i`. We denote G the physical model such as :math:`\vect{Y}=G(\vect{X})`. Let us consider first the case where :math:`\vect{Y}` is of dimension 1. The objective here is to develop the variability of the random variable :math:`\vect{Y}` as function of :math:`\vect{X} = \left( X^1, \ldots, X^{n_X} \right)`. Using the Hoeffding decomposition, we got: .. math:: \Var{\vect{Y}} = \sum_{i=1}^{n_X} V_i + \sum_{i> 1`, we use total sensitivity indices :math:`ST_i`, which is defined as the sum of all indices that count the i-th variable: .. math:: ST_i = 1 - \frac{V_{-i}}{\Var{\vect{Y}}} = \frac{VT_i}{\Var{\vect{Y}}}, \forall\ i\in(1,2,...,n_X) where :math:`V_{-i}` is the part of variance of :math:`\Var{\vect{Y}}` that do not countain the i-th variable. | In practice, to estimate these quantities, Sobol proposes to use numerical methods that rely on the two independent realizations of the random vector :math:`\vect{X}`. If we consider `A` and `B` two independent samples (of size `n`) of the previous random vector: .. math:: A = \left( \begin{array}{cccc} a_{1,1} & a_{1,2} & \cdots & a_{1, n_X} \\ a_{2,1} & a_{2,2} & \cdots & a_{2, n_X} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{1,2} & \cdots & a_{n, n_X} \end{array} \right), \ B = \left( \begin{array}{cccc} b_{1,1} & b_{1,2} & \cdots & b_{1, n_X} \\ b_{2,1} & b_{2,2} & \cdots & b_{2, n_X} \\ \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & b_{1,2} & \cdots & b_{n, n_X} \end{array} \right) Each line is a realization of the random vector. The purpose is to mix these two samples to get an estimate of the sensitivities. `Sobol` method require respectively :math:`C^i` and :math:`D^{i,j}` sample designs for the evaluation of first order (respectively second order) sensitivity indices. These are defined as hereafter: .. math:: C^i = \left( \begin{array}{ccccc} b_{1,1} & b_{1,2} & a_{1,i} & \cdots & b_{1, n_X} \\ b_{2,1} & b_{2,2} & a_{2,i} & \cdots & b_{2, n_X} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b_{n,1} & b_{1,2} & a_{n,i} & \cdots & b_{n, n_X} \end{array} \right), \ D^{i,j} = \left( \begin{array}{ccccccc} b_{1,1} & b_{1,2} & a_{1,i} & \cdots & a_{1,j} & \cdots & b_{1, n_X} \\ b_{2,1} & b_{2,2} & a_{2,i} & \cdots & a_{2,j} & \cdots & b_{2, n_X} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ b_{n,1} & b_{n,2} & a_{n,i} & \cdots & a_{n,j} & \cdots & b_{n, n_X} \\ \end{array} \right) It follows that :math:`V_{i}` and :math:`V_{i,j}` terms are defined as follow: .. math:: \begin{array}{ccc} V_i & = & \frac{1}{n} \sum_{k=1}^{n} G(A_k) G(C_k) - V_i - V_j - G_0^2 \\ V_{i,j} & = & \frac{1}{n} \sum_{k=1}^{n} G(A_k) G(D_k) - G_0^2 \\ G_0 & = & \frac{1}{n} \sum_{k=1}^{n} G(A_k) \end{array} The implemented second order indices use this formula. The major methods (`Saltelli`, `Jansen`, `Mauntz-Kucherenko`, `Martinez`) use the :math:`E^i` matrix to compute the indices (first order and total order). This matrix is defined as follows: .. math:: E^i = \left( \begin{array}{ccccc} a_{1,1} & a_{1,2} & b_{1,i} & \cdots & a_{1, n_X} \\ a_{2,1} & a_{2,2} & b_{2,i} & \cdots & a_{2, n_X} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{1,2} & b_{n,i} & \cdots & a_{n, n_X} \end{array} \right) The formulas for the evaluation of the indices are given in each class documentation: - :class:`~openturns.SaltelliSensitivityAlgorithm` for the `Saltelli` method, - :class:`~openturns.JansenSensitivityAlgorithm` for the `Jansen` method, - :class:`~openturns.MauntzKucherenkoSensitivityAlgorithm` for the `Mauntz-Kucherenko` method, - :class:`~openturns.MartinezSensitivityAlgorithm` for the `Martinez` method For multivariate outputs, aggregate indices can be computed thanks to the `getAggregatedFirstOrderIndices` and `getAggregatedTotalOrderIndices`. Such indices write as follow: .. math:: \begin{array}{ccc} S_i & = & \frac{ \sum_{k=1}^{q} V_{i}^{(k)} }{ \sum_{k=1}^{q} \Var{Y_k} } \\ S_{i,j} & = & \frac{ \sum_{k=1}^{q} V_{i,j}^{(k)} }{ \sum_{k=1}^{q} \Var{Y_k} } \\ ST_i & = & \frac{ \sum_{k=1}^{q} VT_{i}^{(k)} }{ \sum_{k=1}^{q} \Var{Y_k} } \end{array} Aggregated second order indices have not been implemented. | Note finally that evaluation of intervals for indices might be done for first and total order thanks to the `getFirstOrderIndicesInterval` and `getTotalOrderIndicesInterval` methods. Default bootstrap size and confidence level values are parametrized thanks to the resource map keys `SobolIndicesAlgorithm-BootstrapSize` and `SobolIndicesAlgorithm-BootstrapConfidenceLevel`. Appropriate setters might be called to change their values. Also note that for numerical stability reasons the ouputs are centered before indices estimation: .. math:: Y_k = Y_k - \Eset(Y_k) " %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation OT_SobolIndicesAlgorithm_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_Generate_doc "Generate the input design of experiment. Usage: SobolIndicesAlgorithmImplementation.Generate(*distribution, N, computeSecondOrder*) SobolIndicesAlgorithmImplementation.Generate(*experiment, computeSecondOrder*) Parameters ---------- distribution : :class:`~openturns.Distribution` Input probabilistic model. Should have independent copula experiment : :class:`~openturns.WeightedExperiment` Experiment for the generation of two independent samples. N : int Size of samples to generate computeSecondOrder : bool If True, design that will be generated contains elements for the evaluation of second order indices. Returns ------- inputDesign : :class:`~openturns.Sample` Full input design. Notes ----- Sensitivity algorithms rely on the definition of specific designs. The method generates design for the Saltelli method. Such designs could be used for both the Jansen, Martinez and MauntzKucherenko methods. This precomputes such input designs using distribution or experiment by generating two independent samples and mixing columns of these ones to define the huge sample (design). If computeSecondOrder is disabled, result design is of size :math:`N*(p+2)` where p is the input dimension. If computeSecondOrder is enabled, design's size is :math:`N*(2p+2)`. Model's answer could be evaluated outside the platform. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> formula = ['sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+' + \ ... '0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] >>> model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) >>> distribution = ot.ComposedDistribution([ot.Uniform(-1.0, 1.0)] * 3, \ ... ot.IndependentCopula(3)) >>> size = 100 >>> design = ot.SobolIndicesAlgorithmImplementation.Generate(distribution, size, True) " %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::Generate OT_SobolIndicesAlgorithm_Generate_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getFirstOrderIndices_doc "Get first order Sobol indices. Parameters ---------- i : int, optional Index of the marginal of the function, equals to :math:`0` by default. Returns ------- indices : :class:`~openturns.Point` Sequence containing first order Sobol indices." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getFirstOrderIndices OT_SobolIndicesAlgorithm_getFirstOrderIndices_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getFirstOrderIndicesInterval_doc "Get interval for the merged first order Sobol indices. Returns ------- interval : :class:`~openturns.Interval` Interval for first order Sobol indices for each component." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getFirstOrderIndicesInterval OT_SobolIndicesAlgorithm_getFirstOrderIndicesInterval_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getAggregatedFirstOrderIndices_doc "Get the evaluation of merged first order Sobol indices. Returns ------- indices : :class:`~openturns.Point` Sequence containing merged first order Sobol indices." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getAggregatedFirstOrderIndices OT_SobolIndicesAlgorithm_getAggregatedFirstOrderIndices_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getAggregatedTotalOrderIndices_doc "Get the evaluation of merged total order Sobol indices. Returns ------- indices : :class:`~openturns.Point` Sequence containing merged total order Sobol indices." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getAggregatedTotalOrderIndices OT_SobolIndicesAlgorithm_getAggregatedTotalOrderIndices_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getSecondOrderIndices_doc "Get second order Sobol indices. Parameters ---------- i : int, optional Index of the marginal of the function, equals to :math:`0` by default. Returns ------- indices : :class:`~openturns.SymmetricMatrix` Tensor containing second order Sobol indices." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getSecondOrderIndices OT_SobolIndicesAlgorithm_getSecondOrderIndices_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getTotalOrderIndices_doc "Get total order Sobol indices. Parameters ---------- i : int, optional Index of the marginal of the function, equals to :math:`0` by default. Returns ------- indices : :class:`~openturns.Point` Sequence containing total order Sobol indices." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getTotalOrderIndices OT_SobolIndicesAlgorithm_getTotalOrderIndices_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getTotalOrderIndicesInterval_doc "Get interval for the merged total order Sobol indices. Returns ------- interval : :class:`~openturns.Interval` Interval for total order Sobol indices for each component." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getTotalOrderIndicesInterval OT_SobolIndicesAlgorithm_getTotalOrderIndicesInterval_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getBootstrapConfidenceLevel_doc "Get the confidence interval level for bootstrap sampling. Returns ------- confidenceLevel : float Confidence level for boostrap sampling" %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getBootstrapConfidenceLevel OT_SobolIndicesAlgorithm_getBootstrapConfidenceLevel_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_setBootstrapConfidenceLevel_doc "Set the confidence interval level for bootstrap sampling. Parameters ---------- confidenceLevel : float Confidence level for boostrap sampling" %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::setBootstrapConfidenceLevel OT_SobolIndicesAlgorithm_setBootstrapConfidenceLevel_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_getBootstrapSize_doc "Get the number of bootstrap sampling size. Returns ------- bootstrapSize : int Number of bootsrap sampling" %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::getBootstrapSize OT_SobolIndicesAlgorithm_getBootstrapSize_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_setBootstrapSize_doc "Set the number of bootstrap sampling size. Default value is 0. Parameters ---------- bootstrapSize : int Number of bootsrap sampling" %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::setBootstrapSize OT_SobolIndicesAlgorithm_setBootstrapSize_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_draw_doc "Draw sensitivity indices. Usage: draw() draw(*marginalIndex*) With the first usage, draw the aggregated first and total order indices. With the second usage, draw the first and total order indices of a specific marginal in case of vectorial output Parameters ---------- marginalIndex: int marginal of interest (case of second usage) Returns ------- Graph : :class:`~openturns.Graph` A graph containing the aggregated first and total order indices. Notes ----- If number of bootstrap sampling is not 0, and confidence level associated > 0, the graph includes confidence interval plots in the first usage." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::draw OT_SobolIndicesAlgorithm_draw_doc // --------------------------------------------------------------------- %define OT_SobolIndicesAlgorithm_DrawImportanceFactors_doc "Draw the importance factors. :Available usages: DrawImportanceFactors(*importanceFactors, title='Importance Factors'*) DrawImportanceFactors(*values, names, title='Importance Factors'*) Parameters ---------- importanceFactors : :class:`~openturns.PointWithDescription` Sequence containing the importance factors with a description for each component. The descriptions are used to build labels for the created Pie. If they are not mentioned, default labels will be used. values : sequence of float Importance factors. names : sequence of str Variables' names used to build labels for the created Pie. title : str Title of the graph. Returns ------- Graph : :class:`~openturns.Graph` A graph containing a :class:`~openturns.Pie` of the importance factors of the variables." %enddef %feature("docstring") OT::SobolIndicesAlgorithmImplementation::DrawImportanceFactors OT_SobolIndicesAlgorithm_DrawImportanceFactors_doc // --------------------------------------------------------------------- openturns-1.9/python/src/SobolIndicesAlgorithm_doc.i.in000066400000000000000000000032041307543307100233620ustar00rootroot00000000000000// SobolIndicesAlgorithm docstrings are defined in SobolIndicesAlgorithmImplementation_doc.i.in %feature("docstring") OT::SobolIndicesAlgorithm OT_SobolIndicesAlgorithm_doc %feature("docstring") OT::SobolIndicesAlgorithm::getFirstOrderIndices OT_SobolIndicesAlgorithm_getFirstOrderIndices_doc %feature("docstring") OT::SobolIndicesAlgorithm::getFirstOrderIndicesInterval OT_SobolIndicesAlgorithm_getFirstOrderIndicesInterval_doc %feature("docstring") OT::SobolIndicesAlgorithm::getAggregatedFirstOrderIndices OT_SobolIndicesAlgorithm_getAggregatedFirstOrderIndices_doc %feature("docstring") OT::SobolIndicesAlgorithm::getAggregatedTotalOrderIndices OT_SobolIndicesAlgorithm_getAggregatedTotalOrderIndices_doc %feature("docstring") OT::SobolIndicesAlgorithm::getSecondOrderIndices OT_SobolIndicesAlgorithm_getSecondOrderIndices_doc %feature("docstring") OT::SobolIndicesAlgorithm::getTotalOrderIndices OT_SobolIndicesAlgorithm_getTotalOrderIndices_doc %feature("docstring") OT::SobolIndicesAlgorithm::getTotalOrderIndicesInterval OT_SobolIndicesAlgorithm_getTotalOrderIndicesInterval_doc %feature("docstring") OT::SobolIndicesAlgorithm::getBootstrapConfidenceLevel OT_SobolIndicesAlgorithm_getBootstrapConfidenceLevel_doc %feature("docstring") OT::SobolIndicesAlgorithm::setBootstrapConfidenceLevel OT_SobolIndicesAlgorithm_setBootstrapConfidenceLevel_doc %feature("docstring") OT::SobolIndicesAlgorithm::getBootstrapSize OT_SobolIndicesAlgorithm_getBootstrapSize_doc %feature("docstring") OT::SobolIndicesAlgorithm::setBootstrapSize OT_SobolIndicesAlgorithm_setBootstrapSize_doc %feature("docstring") OT::SobolIndicesAlgorithm::draw OT_SobolIndicesAlgorithm_draw_doc openturns-1.9/python/src/SobolSequence.i000066400000000000000000000004151307543307100204540ustar00rootroot00000000000000// SWIG file SobolSequence.i %{ #include "openturns/SobolSequence.hxx" %} %include SobolSequence_doc.i %include openturns/SobolSequence.hxx namespace OT{ %extend SobolSequence { SobolSequence(const SobolSequence & other) { return new OT::SobolSequence(other); } } } openturns-1.9/python/src/SobolSequence_doc.i.in000066400000000000000000000006251307543307100217110ustar00rootroot00000000000000%feature("docstring") OT::SobolSequence "Sobol sequence. Available constructors: SobolSequence(*dimension=1*) Parameters ---------- dimension : positive int Dimension of the points. Examples -------- >>> import openturns as ot >>> sequence = ot.SobolSequence(2) >>> print(sequence.generate(5)) 0 : [ 0.5 0.5 ] 1 : [ 0.75 0.25 ] 2 : [ 0.25 0.75 ] 3 : [ 0.375 0.375 ] 4 : [ 0.875 0.875 ]"openturns-1.9/python/src/SoizeGhanemFactory.i000066400000000000000000000004661307543307100214540ustar00rootroot00000000000000// SWIG file SoizeGhanemFactory.i %{ #include "openturns/SoizeGhanemFactory.hxx" %} %include SoizeGhanemFactory_doc.i %include openturns/SoizeGhanemFactory.hxx namespace OT { %extend SoizeGhanemFactory { SoizeGhanemFactory(const SoizeGhanemFactory & other) { return new OT::SoizeGhanemFactory(other); } } } openturns-1.9/python/src/SoizeGhanemFactory_doc.i.in000066400000000000000000000032501307543307100227000ustar00rootroot00000000000000%feature("docstring") OT::SoizeGhanemFactory "SoizeGhanem orthonormal multivariate functional family. For the any multivariate distribution with continuous copula. Available constructor: SoizeGhanemFactory() SoizeGhanemFactory(*measure, useCopula*) SoizeGhanemFactory(*measure, phi, useCopula*) Parameters ---------- measure : :class:`~openturns.Distribution` The measure defining the inner product of the factory. phi : :class:`~openturns.EnumerateFunction` The function mapping the index of the multivariate basis function to the multi-index of the marginal variables. Default is to use the :class:`~openturns.LinearEnumerateFunction`. useCopula : bool Flag to tell if the copula density has to be used directly or indirectly through the joint PDF of the measure. Default is True. Notes ----- This class implements the multivariate orthonormal basis associated with an arbitrary multidimensional distribution with continuous copula and marginals with well-defined orthonormal polyomials of arbitrary order. The details are in [SoizeGhanem2004]_. See also -------- StandardDistributionPolynomialFactory, OrthogonalProductPolynomialFactory Examples -------- >>> import openturns as ot >>> marginals = [ot.Uniform(-1.0, 1.0), ot.Normal(0.0, 1.0)] >>> copula = ot.ClaytonCopula(1.0) >>> distribution = ot.ComposedDistribution(marginals, copula) >>> factory = ot.SoizeGhanemFactory(distribution) >>> point = [0.5]*2 >>> for i in range(3): ... value = factory.build(i)(point) ... print('SoizeGhanem_' + str(i) + '(' + str(point) + ')=' + str(value)) SoizeGhanem_0([0.5, 0.5])=[0.870518] SoizeGhanem_1([0.5, 0.5])=[0.753891] SoizeGhanem_2([0.5, 0.5])=[0.435259] " openturns-1.9/python/src/Solver.i000066400000000000000000000003741307543307100171630ustar00rootroot00000000000000// SWIG file Solver.i %{ #include "openturns/Solver.hxx" %} %include Solver_doc.i OTTypedInterfaceObjectHelper(Solver) %include openturns/Solver.hxx namespace OT { %extend Solver { Solver(const Solver & other) { return new OT::Solver(other); } } } openturns-1.9/python/src/SolverImplementation.i000066400000000000000000000005061307543307100220660ustar00rootroot00000000000000// SWIG file SolverImplementation.i %{ #include "openturns/SolverImplementation.hxx" %} %include SolverImplementation_doc.i %include openturns/SolverImplementation.hxx namespace OT { %extend SolverImplementation { SolverImplementation(const SolverImplementation & other) { return new OT::SolverImplementation(other); } } } openturns-1.9/python/src/SolverImplementation_doc.i.in000066400000000000000000000121071307543307100233200ustar00rootroot00000000000000%define OT_Solver_doc "SolverImplementation of 1D non linear equations. Available constructor: SolverImplementation() SolverImplementation(*solverImplementation*) SolverImplementation(*absError, relError, resError, maximumFunctionEvaluation*) Parameters ---------- solverImplementation : SolverImplementationImplementation The implementation of a particular solver which is :class:`~openturns.Bisection`, :class:`~openturns.Brent` or :class:`~openturns.Secant`. absError : positive float Absolute error: distance between two successive iterates at the end point. Default is :math:`10^{-5}`. relError : positive float Relative error: distance between the two last successive iterates with regards to the last iterate. Default is :math:`10^{-5}`. resError : positive float Residual error: difference between the last iterate value and the expected value. Default is :math:`10^{-8}`. maximumFunctionEvaluation : int The maximum number of evaluations of the function. Default is :math:`100`. See also -------- Bisection, Brent, Secant Notes ----- This class enables to solve 1D non linear equations : .. math:: f(x) = value, \forall x \in [infPoint, supPoint] if :math:`f` is a continuous function from :math:`\Rset` to :math:`\Rset`, :math:`infPoint, supPoint \in \Rset` and if :math:`f` is such that :math:`f(infPoint) \times f(supPoint) < 0`, then :math:`f` has at least a zero in the interval :math:`[infPoint, supPoint]`. In particular, it is used in the root research of a :class:`Directional Sampling simulation `." %enddef %feature("docstring") OT::SolverImplementation OT_Solver_doc // --------------------------------------------------------------------- %define OT_Solver_getAbsoluteError_doc "Accessor to the absolute error. Returns ------- absError : float The absolute error: distance between two successive iterates at the end point." %enddef %feature("docstring") OT::SolverImplementation::getAbsoluteError OT_Solver_getAbsoluteError_doc // --------------------------------------------------------------------- %define OT_Solver_getMaximumFunctionEvaluation_doc "Accessor to the maximum number of evaluations of the function. Returns ------- maxEval : int The maximum number of evaluations of the function." %enddef %feature("docstring") OT::SolverImplementation::getMaximumFunctionEvaluation OT_Solver_getMaximumFunctionEvaluation_doc // --------------------------------------------------------------------- %define OT_Solver_getRelativeError_doc "Accessor to the relative error. Returns ------- relError : float The relative error: distance between the two last successive iterates with regards to the last iterate." %enddef %feature("docstring") OT::SolverImplementation::getRelativeError OT_Solver_getRelativeError_doc // --------------------------------------------------------------------- %define OT_Solver_getResidualError_doc "Accessor to the residual error. Returns ------- resError : float The residual errors: difference between the last iterate value and the expected value." %enddef %feature("docstring") OT::SolverImplementation::getResidualError OT_Solver_getResidualError_doc // --------------------------------------------------------------------- %define OT_Solver_setAbsoluteError_doc "Accessor to the absolute error. Parameters ---------- absError : float The absolute error: distance between two successive iterates at the end point." %enddef %feature("docstring") OT::SolverImplementation::setAbsoluteError OT_Solver_setAbsoluteError_doc // --------------------------------------------------------------------- %define OT_Solver_setMaximumFunctionEvaluation_doc "Accessor to the maximum number of evaluations of the function. Parameters ---------- maxEval : int The maximum number of evaluations of the function." %enddef %feature("docstring") OT::SolverImplementation::setMaximumFunctionEvaluation OT_Solver_setMaximumFunctionEvaluation_doc // --------------------------------------------------------------------- %define OT_Solver_setRelativeError_doc "Accessor to the relative error. Parameters ---------- relError : float The relative error: distance between the two last successive iterates with regards to the last iterate." %enddef %feature("docstring") OT::SolverImplementation::setRelativeError OT_Solver_setRelativeError_doc // --------------------------------------------------------------------- %define OT_Solver_setResidualError_doc "Accessor to the residual error. Parameters ---------- resError : float The residual errors: difference between the last iterate value and the expected value." %enddef %feature("docstring") OT::SolverImplementation::setResidualError OT_Solver_setResidualError_doc // --------------------------------------------------------------------- %define OT_Solver_getUsedFunctionEvaluation_doc "Accessor to the number of evaluations of the function. Returns ------- nEval : int The number of evaluations of the function." %enddef %feature("docstring") OT::SolverImplementation::getUsedFunctionEvaluation OT_Solver_getUsedFunctionEvaluation_docopenturns-1.9/python/src/Solver_doc.i.in000066400000000000000000000016251307543307100204150ustar00rootroot00000000000000// Solver docstrings are defined in SolverImplementation_doc.i.in %feature("docstring") OT::Solver OT_Solver_doc %feature("docstring") OT::Solver::getAbsoluteError OT_Solver_getAbsoluteError_doc %feature("docstring") OT::Solver::getMaximumFunctionEvaluation OT_Solver_getMaximumFunctionEvaluation_doc %feature("docstring") OT::Solver::getRelativeError OT_Solver_getRelativeError_doc %feature("docstring") OT::Solver::getResidualError OT_Solver_getResidualError_doc %feature("docstring") OT::Solver::setAbsoluteError OT_Solver_setAbsoluteError_doc %feature("docstring") OT::Solver::setMaximumFunctionEvaluation OT_Solver_setMaximumFunctionEvaluation_doc %feature("docstring") OT::Solver::setRelativeError OT_Solver_setRelativeError_doc %feature("docstring") OT::Solver::setResidualError OT_Solver_setResidualError_doc %feature("docstring") OT::Solver::getUsedFunctionEvaluation OT_Solver_getUsedFunctionEvaluation_docopenturns-1.9/python/src/SpaceFilling.i000066400000000000000000000004431307543307100202460ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SpaceFilling.hxx" %} %include SpaceFilling_doc.i OTTypedInterfaceObjectHelper(SpaceFilling) %include openturns/SpaceFilling.hxx namespace OT { %extend SpaceFilling { SpaceFilling(const SpaceFilling & other) { return new OT::SpaceFilling(other); } } } openturns-1.9/python/src/SpaceFillingC2.i000066400000000000000000000004051307543307100204310ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SpaceFillingC2.hxx" %} %include SpaceFillingC2_doc.i %include openturns/SpaceFillingC2.hxx namespace OT { %extend SpaceFillingC2 { SpaceFillingC2(const SpaceFillingC2 & other) { return new OT::SpaceFillingC2(other); } } } openturns-1.9/python/src/SpaceFillingC2_doc.i.in000066400000000000000000000025051307543307100216660ustar00rootroot00000000000000%define OT_SpaceFillingC2_doc "Space filling C2 (centered L2-discrepancy) computation. Notes ----- Compute the centered L2 discrepancy: .. math:: :nowrap: \begin{multline*} C^2(X_{d}^N) = \left(\frac{13}{12}\right)^{d} - \frac{2}{N} \sum_{i=1}^{N} \prod_{k=1}^{d} \left( 1 + \frac{1}{2} |x_k^{(i)} - 0.5| - \frac{1}{2} |x_k^{(i)} - 0.5|^2 \right)\\ + \frac{1}{N^2} \sum_{i,j=1}^{N} \prod_{k=1}^{d} \left( 1 + \frac{1}{2} |x_k^{(i)} - 0.5| + \frac{1}{2} |x_k^{(j)} - 0.5| - \frac{1}{2} |x_k^{(i)} - x_k^{(j)}| \right) \end{multline*} " %enddef %feature("docstring") OT::SpaceFillingC2 OT_SpaceFillingC2_doc // --------------------------------------------------------------------- %define OT_SpaceFillingC2_evaluate_doc "Compute the C2 criterion for a specific design. Parameters ---------- design : :class:`~openturns.Sample` or 2d array like The design Returns ------- crit : float The C2 criterion Examples -------- >>> import openturns as ot >>> # Build an LHS using openturns class >>> lhs = ot.LHSExperiment(ot.Uniform(), 100) >>> design = lhs.generate() >>> # Compute the C2 criterion >>> crit = ot.SpaceFillingC2().evaluate(design)" %enddef %feature("docstring") OT::SpaceFillingC2::evaluate OT_SpaceFillingC2_evaluate_doc // --------------------------------------------------------------------- openturns-1.9/python/src/SpaceFillingImplementation.i000066400000000000000000000007241307543307100231560ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SpaceFillingImplementation.hxx" %} %include SpaceFillingImplementation_doc.i %template(SpaceFillingImplementationdInterfaceObject) OT::TypedInterfaceObject; %include openturns/SpaceFillingImplementation.hxx namespace OT { %extend SpaceFillingImplementation { SpaceFillingImplementation(const SpaceFillingImplementation & other) { return new OT::SpaceFillingImplementation(other); } } } openturns-1.9/python/src/SpaceFillingImplementation_doc.i.in000066400000000000000000000030311307543307100244020ustar00rootroot00000000000000%define OT_SpaceFilling_doc "Space filling computation base class. Notes ----- Compute a space filling criterion for a design, e.g. a metric that underlines how points fill the uniform space." %enddef %feature("docstring") OT::SpaceFillingImplementation OT_SpaceFilling_doc // --------------------------------------------------------------------- %define OT_SpaceFilling_evaluate_doc "Compute the criterion for a specific design. Parameters ---------- design : :class:`~openturns.Sample` or 2d array like The design Returns ------- value: float The computed criterion" %enddef %feature("docstring") OT::SpaceFillingImplementation::evaluate OT_SpaceFilling_evaluate_doc // --------------------------------------------------------------------- %define OT_SpaceFilling_isMinimizationProblem "Minimization flag accessor. Returns ------- isMinimization : bool Whether the problem is a minimization. " %enddef %feature("docstring") OT::SpaceFillingImplementation::isMinimizationProblem OT_SpaceFilling_isMinimizationProblem // --------------------------------------------------------------------- %define OT_SpaceFilling_perturbLHS "Elementary perturbation. Parameters ---------- design : :class:`~openturns.Sample` The design to perturb (in-place) oldCriterion : float The previous value of the criterion row1 : int First row index row2 : int Second row index Returns ------- criterion : float The value of the criterion" %enddef %feature("docstring") OT::SpaceFillingImplementation::perturbLHS OT_SpaceFilling_perturbLHS openturns-1.9/python/src/SpaceFillingMinDist.i000066400000000000000000000004501307543307100215340ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SpaceFillingMinDist.hxx" %} %include SpaceFillingMinDist_doc.i %include openturns/SpaceFillingMinDist.hxx namespace OT { %extend SpaceFillingMinDist { SpaceFillingMinDist(const SpaceFillingMinDist & other) { return new OT::SpaceFillingMinDist(other); } } } openturns-1.9/python/src/SpaceFillingMinDist_doc.i.in000066400000000000000000000017041307543307100227710ustar00rootroot00000000000000%define OT_SpaceFillingMinDist_doc "Space filling minimal distance criterion. Notes ----- Compute the minimal distance of sample points " %enddef %feature("docstring") OT::SpaceFillingMinDist OT_SpaceFillingMinDist_doc // --------------------------------------------------------------------- %define OT_SpaceFillingMinDist_evaluate_doc "Compute the MinDist criterion for a specific design. Parameters ---------- design : :class:`~openturns.Sample` or 2-d array like The design Returns ------- crit : float The MinDist criterion Examples -------- >>> import openturns as ot >>> # Build an LHS using openturns class >>> lhs = ot.LHSExperiment(ot.Uniform(), 100) >>> design = lhs.generate() >>> # Compute the MinDist criterion >>> crit = ot.SpaceFillingMinDist().evaluate(design)" %enddef %feature("docstring") OT::SpaceFillingMinDist::evaluate OT_SpaceFillingMinDist_evaluate_doc // --------------------------------------------------------------------- openturns-1.9/python/src/SpaceFillingPhiP.i000066400000000000000000000004231307543307100210250ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SpaceFillingPhiP.hxx" %} %include SpaceFillingPhiP_doc.i %include openturns/SpaceFillingPhiP.hxx namespace OT { %extend SpaceFillingPhiP { SpaceFillingPhiP(const SpaceFillingPhiP & other) { return new OT::SpaceFillingPhiP(other); } } } openturns-1.9/python/src/SpaceFillingPhiP_doc.i.in000066400000000000000000000024051307543307100222610ustar00rootroot00000000000000%define OT_SpaceFillingPhiP_doc "Space filling PhiP. Parameters ---------- p : int Parameter for parametrizing the criterion Notes ----- Computes the criterion: .. math:: :nowrap: \begin{equation*} \phi_p(X) = \sum_{i=1}^{j} \sum_{j=1}^{n} \left( |x^{(i)} - x^{(j)}|^{-p} \right)^{\frac{1}{p}} \end{equation*} This criterion is knwon to converge to mindist (minimal distance between two distinct elements of the design) criterion when p tends to infinity. " %enddef %feature("docstring") OT::SpaceFillingPhiP OT_SpaceFillingPhiP_doc // --------------------------------------------------------------------- %define OT_SpaceFillingPhiP_evaluate_doc "Compute the PhiP criterion for a specific design. Parameters ---------- design : :class:`~openturns.Sample` or 2d array like The design Returns ------- crit : float The phiP criterion Examples -------- >>> import openturns as ot >>> # Build an LHS using openturns class >>> lhs = ot.LHSExperiment(ot.Uniform(), 100) >>> design = lhs.generate() >>> # Compute the PhiP criterion >>> crit = ot.SpaceFillingPhiP(50).evaluate(design)" %enddef %feature("docstring") OT::SpaceFillingPhiP::evaluate OT_SpaceFillingPhiP_evaluate_doc // --------------------------------------------------------------------- openturns-1.9/python/src/SpaceFilling_doc.i.in000066400000000000000000000006151307543307100215010ustar00rootroot00000000000000// SpaceFilling docstrings are defined in SpaceFillingImplementation_doc.i.in %feature("docstring") OT::SpaceFilling OT_SpaceFilling_doc %feature("docstring") OT::SpaceFilling::evaluate OT_SpaceFilling_evaluate_doc %feature("docstring") OT::SpaceFilling::isMinimizationProblem OT_SpaceFilling_isMinimizationProblem %feature("docstring") OT::SpaceFilling::perturbLHS OT_SpaceFilling_perturbLHS openturns-1.9/python/src/SparseMethod.i000066400000000000000000000004061307543307100203030ustar00rootroot00000000000000// SWIG file SparseMethod.i %{ #include "openturns/SparseMethod.hxx" %} %include SparseMethod_doc.i %include openturns/SparseMethod.hxx namespace OT { %extend SparseMethod { SparseMethod(const SparseMethod & other) { return new OT::SparseMethod(other); } } } openturns-1.9/python/src/SparseMethod_doc.i.in000066400000000000000000000010271307543307100215350ustar00rootroot00000000000000%feature("docstring") OT::SparseMethod "Least squares solver using a sparse representation. Available constructors: SparseMethod(*method*) SparseMethod(*method, basisSequenceFactory, fittingAlgorithm*) Parameters ---------- method : :class:`~openturns.LeastSquaresMethod` Least squares resolution method basisSequenceFactory : :class:`~openturns.BasisSequenceFactory` Basis enumeration algorithm fittingAlgorithm : :class:`~openturns.FittingAlgorithm` Validation algorithm See also -------- LeastSquaresMethod" openturns-1.9/python/src/SpecFunc.i000066400000000000000000000005411307543307100174130ustar00rootroot00000000000000// SWIG file SpecFunc.i %{ #include "openturns/SpecFunc.hxx" %} %include SpecFunc_doc.i %nodefaultctor SpecFunc; // available in math module %ignore OT::SpecFunc::IsInf; %ignore OT::SpecFunc::IsNan; // available in cmath module %ignore OT::SpecFunc::Acosh; %ignore OT::SpecFunc::Asinh; %ignore OT::SpecFunc::Atanh; %include openturns/SpecFunc.hxx openturns-1.9/python/src/SpecFunc_doc.i.in000066400000000000000000000511671307543307100206570ustar00rootroot00000000000000%feature("docstring") OT::SpecFunc::BesselI0 "Modified first kind Bessel function of order 0. .. math:: \forall x \in \Rset, \quad \mathrm{I}_0(x) = \sum_{m=0}^\infty\frac{1}{m!^2}\left(\frac{x}{2}\right)^{2m} Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogBesselI0 "Logarithm of the modified first kind Bessel function of order 0. .. math:: \forall x \in \Rset, \quad LogBesselI0(x) = \log (\mathrm{I}_0(x)) See also -------- SpecFunc_BesselI0 Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::BesselI1 "Modified first kind Bessel function of order 1. .. math:: \forall x \in \Rset, \quad \mathrm{I}_1(x) = \sum_{m=0}^\infty\frac{1}{m!(m+1)!}\left(\frac{x}{2}\right)^{2m+1} Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogBesselI1 "Logarithm of the modified first kind Bessel function of order 1. .. math:: \forall x \in \Rset, \quad LogBesselI1(x) = \log (\mathrm{I}_1(x)) See also -------- SpecFunc_BesselI1 Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::BesselK "Modified second kind Bessel function of order :math:`\nu`. .. math:: \forall x \in \Rset, \quad \mathrm{K}_{\nu}(x) = \frac{\pi}{2}\frac{\mathrm{I}_{-\nu}(x)-\mathrm{I}_{\nu}(x)}{\sin{\nu\pi}} Parameters ---------- nu : float x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogBesselK "Logarithm of the modified second kind Bessel function of order :math:`\nu`. .. math:: \forall x \in \Rset, \quad LogBesselK(\nu, x) = \log(\mathrm{K}_{\nu}(x)) See also -------- SpecFunc_BesselK Parameters ---------- nu : float x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Beta "Beta function :math:`\mathrm{B}`. .. math:: \forall (a, b) > 0, \quad \mathrm{B}(a, b) = \int_0^1 t^{a-1}(1-t)^{b-1}\di{t} Parameters ---------- a, b : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogBeta "Logarithm of the Beta function. .. math:: \forall (a, b) > 0, \quad LogBeta(a, b) = \log (\mathrm{B}(a, b)) See also -------- SpecFunc_Beta Parameters ---------- a, b : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LnBeta "Logarithm of the Beta function. .. math:: \forall (a, b) > 0,\quad LnBeta(a, b) = \ln (\mathrm{B}(a, b)) = \log (\mathrm{B}(a, b)) See also -------- SpecFunc_Beta Parameters ---------- a, b : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::IncompleteBeta "Incomplete Beta function. .. math:: \forall (a, b) > 0, t \in [0, 1], \quad \mathrm{B}(x; a, b) = \int_0^x t^{a-1}(1-t)^{b-1}\di{t} Parameters ---------- a, b : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{B}(x; a, b)`. - If *tail* is *True*: :math:`result = \mathrm{B}(a, b) - \mathrm{B}(x; a, b)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::IncompleteBetaInverse "Inverse of the incomplete Beta function. .. math:: \forall (a, b) > 0 \quad IncompleteBetaInverse(x; a, b) = \mathrm{B}^{-1}(x/\mathrm{B}(a, b); a, b) See also -------- SpecFunc_IncompleteBeta, SpecFunc_RegularizedIncompleteBetaInverse Parameters ---------- a, b : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{B}^{-1}(x/\mathrm{B}(a, b); a, b)`. - If *tail* is *True*: :math:`result = 1 - \mathrm{B}^{-1}(x/\mathrm{B}(a, b); b, a)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::RegularizedIncompleteBeta "Regularized incomplete Beta function. .. math:: \forall (a, b) > 0 \quad \mathrm{I}(x; a, b) = \frac{\mathrm{B}(x; a, b)}{\mathrm{B}(a, b)} = \frac{1}{\mathrm{B}(a, b)} \int_0^x t^{a-1}(1-t)^{b-1}\di{t} with :math:`B(a, b)` the Beta function and :math:`B(x; a, b)` the incomplete Beta function. See also -------- SpecFunc_IncompleteBeta, SpecFunc_Beta Parameters ---------- a, b : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{I}(x; a, b)`. - If *tail* is *True*: :math:`result = 1 - \mathrm{I}(x; a, b)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::RegularizedIncompleteBetaInverse "Inverse of the regularized incomplete Beta function. .. math:: \forall (a, b) > 0, \quad RegularizedIncompleteBetaInverse(x; a, b) = \mathrm{I}^{-1}(x; a, b) See also -------- SpecFunc_RegularizedIncompleteBeta Parameters ---------- a, b : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{I}^{-1}(x; a, b)`. - If *tail* is *True*: :math:`result = 1 - \mathrm{I}^{-1}(x; b, a)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Dawson "Dawson function. .. math:: \forall x \in \Cset, \quad \mathrm{D}_+(x) = \exp(-x^2)\int_0^x \exp(t^2)\di{t} Parameters ---------- x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Debye "Debye function of order :math:`n`. .. math:: \forall x \in \Rset, \forall n \in \Nset^* \text{and} \, n \leq 20, \quad \mathrm{D}_n(x) = \frac{n}{x^n} \int_0^x \frac{t^n}{\exp(t)-1}\di{t} Parameters ---------- x : float n : int :math:`\in \{1, \cdots, 20\}` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Ei "Exponential integral function. .. math:: \forall z \in \Cset, \quad \mathrm{Ei}(z) = -\int_{-z}^{\infty} \frac{\exp(-t)}{t}\di{t} Parameters ---------- z : float or complex Returns ------- result : float or complex (same as z)" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Faddeeva "Complex Faddeeva function. .. math:: \forall x \in \Cset, \quad \mathrm{W}(x) = \exp(-x^2)\mathrm{erfc}(-ix) with :math:`ErfC` the complementary error function. See also -------- SpecFunc_ErfC Parameters ---------- x : float or complex Returns ------- result : complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::FaddeevaIm "Imaginary part of the Faddeeva function. .. math:: \forall x \in \Rset, \quad FaddeevaIm(x) = \Im (\mathrm{W}(x)) See also -------- SpecFunc_Faddeeva Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Gamma "Gamma function :math:`\Gamma`. .. math:: \forall a \in \Cset, \quad \Gamma(a) = \int_0^{\infty} t^{a-1}\exp(-t)\di{t} Parameters ---------- a : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogGamma "Logarithm of the Gamma function. .. math:: \forall a \in \Cset, \quad LogGamma(a) = \log (\Gamma(a)) See also -------- SpecFunc_Gamma Parameters ---------- a : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LogGamma1p "LogGamma1p function. .. math:: \forall a \in \Rset, \quad LogGamma1p(a) = \log (\Gamma(1+a)) with :math:`\Gamma` the Gamma function. See also -------- SpecFunc_Gamma Parameters ---------- a : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LnGamma "Logarithm of the Gamma function. .. math:: \forall a \in \Rset, \quad LnGamma(a) = \ln (\Gamma(a)) See also -------- SpecFunc_Gamma Parameters ---------- a : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::IncompleteGamma "Incomplete Gamma function. .. math:: \forall x \in \Rset, \quad \gamma(a, x) = \int_0^x t^{a-1}\exp(-t)\di{t} Parameters ---------- a : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \gamma(a, x)`. - If *tail* is *True*: :math:`result = \Gamma(a) - \gamma(a, x)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::IncompleteGammaInverse "Inverse of the incomplete Gamma function with respect to :math:`x`. .. math:: IncompleteGammaInverse(a, x) = \gamma^{-1}(a, x) See also -------- SpecFunc_IncompleteGamma Parameters ---------- a : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{P}^{-1}(a, x/\Gamma(a))`. - If *tail* is *True*: :math:`result = \mathrm{P}^{-1}(a, (1-x)/\Gamma(a))`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::RegularizedIncompleteGamma "Regularized incomplete Gamma function. .. math:: \forall x \in \Rset, \quad \mathrm{P}(a, x) = \frac{\gamma(a, x)}{\Gamma(a)} = \frac{1}{\Gamma(a)}\int_0^x t^{a-1}\exp(-t)\di{t} See also -------- SpecFunc_Gamma, SpecFunc_IncompleteGamma Parameters ---------- a : float :math:`\in \Rset^*_+` x : float tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{P}(a, x)`. - If *tail* is *True*: :math:`result = \Gamma(a) - \mathrm{P}(a, x)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::RegularizedIncompleteGammaInverse "Inverse of the regularized incomplete Gamma function. .. math:: \forall x \in \Rset, \quad RegularizedIncompleteGammaInverse(a, x) = \mathrm{P}^{-1}(a, x) See also -------- SpecFunc_Gamma, SpecFunc_RegularizedIncompleteGamma Parameters ---------- a : float :math:`\in \Rset^*_+` x : float :math:`\in [0, 1]` tail : bool, optional By default, *tail* is *False*. Returns ------- result : float - If *tail* is *False*: :math:`result = \mathrm{P}^{-1}(a, x)`. - If *tail* is *True*: :math:`result = \mathrm{P}^{-1}(a, 1-x)`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::DiGamma "Digamma function. .. math:: \Psi(x) = \frac{1}{\Gamma(x)}\frac{\mathrm{d} \Gamma(x)}{\mathrm{d}x} with :math:`\Gamma` the Gamma function. See also -------- SpecFunc_Gamma Parameters ---------- x : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Psi "Psi function. .. math:: \Psi(x) = \frac{1}{\Gamma(x)}\frac{\mathrm{d} \Gamma(x)}{\mathrm{d}x} with :math:`\Gamma` the Gamma function. See also -------- SpecFunc_Gamma Parameters ---------- x : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::DiGammaInv "Inverse of the DiGamma function. .. math:: DiGammaInv(x) = \Psi^{-1} (x) See also -------- SpecFunc_DiGamma Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::TriGamma "TriGamma function. .. math:: \Psi_1(x) = \frac{1}{\Gamma(x)}\frac{\mathrm{d}^2 \Gamma(x)}{\mathrm{d}x^2} with :math:`\Gamma` the Gamma function. See also -------- SpecFunc_Gamma Parameters ---------- x : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::IGamma1pm1 "IGamma1pm1 function. .. math:: \forall x \in \Rset, \quad IGamma1pm1(a, x) = \int_0^x t^{a-1}\exp(-t)\di{t} Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::GammaCorrection "GammaCorrection function. .. math:: \forall x \in \Rset^*_+, \quad GammaCorrection(a) = \log (\Gamma(a)) - \log (\sqrt{2\Pi}) + a - (a - 0.5) \log(a) with :math:`\Gamma` the Gamma function. See also -------- SpecFunc_Gamma Parameters ---------- a : float :math:`\in \Rset^*_+` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::HyperGeom_1_1 "Hypergeometric function of type (1,1). .. math:: {}_1F_1(p_1, q_1, x) = \sum_{n=0}^{\infty} \left[ \prod_{k=0}^{n-1} \frac{(p_1 + k)}{(q_1 + k)} \right] \frac{x^n}{n!} Parameters ---------- p1, q1 : float x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::HyperGeom_2_1 "Hypergeometric function of type (2,1). .. math:: {}_2F_1(p_1, p_2, q_1, x) = \sum_{n=0}^{\infty} \left[ \prod_{k=0}^{n-1} \frac{(p_1 + k)(p_2 + k)}{(q_1 + k)} \right] \frac{x^n}{n!} Parameters ---------- p1, p2, q1, x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::HyperGeom_2_2 "Hypergeometric function of type (2,2). .. math:: {}_2F_2(p_1, p_2, q_1, q_2, x) = \sum_{n=0}^{\infty} \left[ \prod_{k=0}^{n-1} \frac{(p_1 + k)(p_2 + k)}{(q_1 + k) (q_2 + k)} \right] \frac{x^n}{n!} Parameters ---------- p1, p2, q1, q2, x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Erf "Error function Erf. .. math:: \forall x \in \Cset, \quad Erf(x) = \frac{2}{\sqrt{\pi}} \int_0^x \exp(-t^2)\di{t} Parameters ---------- x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::ErfC "Complementary error function ErfC. .. math:: \forall x \in \Cset, \quad ErfC(x) = 1 - Erf(x) with :math:`Erf` the error function. See also -------- SpecFunc_Erf Parameters ---------- x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::ErfInverse "Inverse of the error function Erf. .. math:: \forall x \in \Cset, \quad ErfInverse(x) = Erf^{-1} (x) See also -------- SpecFunc_Erf Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::ErfCX "ErfCX function. .. math:: \forall x \in \Cset, \quad ErfCX(x) = \exp(x^2).ErfC(x) with :math:`ErfC` the complementary error function. See also -------- SpecFunc_ErfC Parameters ---------- x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::ErfI "Imaginary error function ErfI. .. math:: \forall x \in \Cset, \quad ErfI(x) = -i Erf(ix) with :math:`Erf` the error function. See also -------- SpecFunc_Erf Parameters ---------- x : float or complex Returns ------- result : float or complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Log1MExp "Log1MExp function. .. math:: \forall x \in \Rset^+, \quad Log1MExp(x) = \log (1-\exp(-x)) Parameters ---------- x : float :math:`\in \Rset^*_+` Returns ------- result : complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Expm1 "Expm1 function. .. math:: \forall x \in \Cset, \quad Expm1(x) = \exp(x)-1 Parameters ---------- x : float or complex Returns ------- result : complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Log1p "Log1p function. .. math:: \forall x \in \Cset, \quad Log1p(x) = \log (1+x) Parameters ---------- x : float or complex Returns ------- result : complex" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::DiLog "Dilogarithm function. .. math:: \forall x \in ]-\infty, 1[, \quad Li_2(x) = -\int_0^x \frac{\log (1-t)}{t}\di{t} Parameters ---------- x : float :math:`\in ]-\infty, 1[` Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::NextPowerOfTwo "Smallest power of two greater or equal to the given :math:`n`. .. math:: NextPowerOfTwo(n) = 2^{\lceil \log_2(n)\rceil} Parameters ---------- n : positive int Returns ------- result : positive int Examples -------- >>> import openturns as ot >>> int(ot.SpecFunc.NextPowerOfTwo(42)) 64" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Log2 "Integer base 2 logarithm of :math:`n`. .. math:: Log2(n) = \log_2(n) Parameters ---------- n : positive int Returns ------- result : positive int Examples -------- >>> import openturns as ot >>> int(ot.SpecFunc.Log2(42)) 5" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::BitCount "Compute the number of bits set to 1 in an integer. Parameters ---------- n : positive int Returns ------- result : positive int Examples -------- >>> import openturns as ot >>> int(ot.SpecFunc.BitCount(42)) 3" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::LambertW "Lambert W function. The Lambert W function :math:`\mathrm{W}(x)` is defined by the relation: .. math:: x = \mathrm{W}(x) \exp(\mathrm{W}(x)) Parameters ---------- x : float principal : bool, optional By default, *principal* is *True*. Returns ------- result : float - If *principal* is *True* : :math:`result = \mathrm{W}_0(x)`. :math:`\mathrm{W}_0(x)` is referred to as the principal branch of the Lambert W function. It denotes the upper part of the function whose domain is :math:`[-1/e, +\infty[` and range :math:`[-1, +\infty[`. - If *principal* is *False* : :math:`result = \mathrm{W}_{-1}(x)`. :math:`\mathrm{W}_{-1}(x)` is the second real branch of the Lambert W function. It denotes the lower part of the function whose domain is :math:`[-1/e, 0[` and range :math:`]-\infty, -1]`." // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::Cbrt "Cubit root function. Parameters ---------- x : float Returns ------- result : float" // --------------------------------------------------------------------- %feature("docstring") OT::SpecFunc::BinomialCoefficient "Binomial coefficient. Returns the value :math:`C_k^n = \binom{n}{k}` Parameters ---------- n : int k : int Returns ------- result : int" openturns-1.9/python/src/SpectralGaussianProcess.i000066400000000000000000000012061307543307100225130ustar00rootroot00000000000000// SWIG file SpectralGaussianProcess.i %{ #include "openturns/SpectralGaussianProcess.hxx" %} %include SpectralGaussianProcess_doc.i %include openturns/SpectralGaussianProcess.hxx namespace OT { %extend SpectralGaussianProcess { SpectralGaussianProcess(const SpectralGaussianProcess & other) { return new OT::SpectralGaussianProcess(other); } } } %pythoncode %{ # deprecated class SpectralNormalProcess(SpectralGaussianProcess): def __init__(self, *args): super(SpectralNormalProcess, self).__init__(*args) openturns.common.Log.Warn('class SpectralNormalProcess is deprecated in favor of SpectralGaussianProcess') %} openturns-1.9/python/src/SpectralGaussianProcess_doc.i.in000066400000000000000000000123321307543307100237470ustar00rootroot00000000000000%feature("docstring") OT::SpectralGaussianProcess "Spectral normal process. Available constructors: SpectralGaussianProcess(*secondOrderModel, timeGrid*) SpectralGaussianProcess(*spectralModel, timeGrid*) SpectralGaussianProcess(*secondOrderModel, fmax, N*) SpectralGaussianProcess(*spectralModel, maxFreq, N*) Parameters ---------- secondOrderModel : :class:`~openturns.SecondOrderModel` timeGrid : :class:`~openturns.RegularGrid` The time grid associated to the process. OpenTURNS has only implemented the algorithm when the mesh is a regular grid. spectralModel : :class:`~openturns.SpectralModel` maxFreq : float Equal to the maximal frequency minus :math:`\Delta f`. N : float The number of points in the frequency grid, which is equal to the number of time stamps of the time grid. Notes ----- - In the first usage, we fix the time grid and the second order model (spectral density model) which implements the process. The frequency discretization is deduced from the time discretization by the formulas :math:`f_{max} = \frac{1}{\Delta t}, \quad \Delta f = \frac{1}{t_{max}}, N = \frac{f_{max}}{\Delta f}= \frac{t_{max}}{\Delta t}` - In the second usage, the process is fixed in the frequency domain. *fmax* value and *N* induce the time grid. Care: the maximal frequency used in the computation is not *fmax* but :math:`(1-1/N)fmax = fmax - \Delta f`. - In the third usage, the spectral model is given and the other arguments are the same as the first usage. - In the fourth usage, the spectral model is given and the other arguments are the same as the second usage. The first call of :meth:`getRealization` might be time consuming because it computes :math:`N` hermitian matrices of size :math:`d \times \ d`, where :math:`d` is the dimension of the spectral model. These matrices are factorized and stored in order to be used for each call of the *getRealization* method. Examples -------- Create a *SpectralGaussianProcess* from a spectral model and a time grid: >>> import openturns as ot >>> amplitude = [1.0, 2.0] >>> scale = [4.0, 5.0] >>> spatialCorrelation = ot.CorrelationMatrix(2) >>> spatialCorrelation[0,1] = 0.8 >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 20) >>> mySpectralModel = ot.CauchyModel(scale, amplitude, spatialCorrelation) >>> mySpectNormProc1 = ot.SpectralGaussianProcess(mySpectralModel, myTimeGrid) Create a *SpectralGaussianProcess* from a second order model and a time grid: >>> import openturns as ot >>> amplitude = [1.0] >>> scale = [4.0, 5.0] >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 20) >>> mySecondOrderModel = ot.ExponentialCauchy(scale, amplitude) >>> mySpectNormProc2 = ot.SpectralGaussianProcess(mySecondOrderModel, myTimeGrid) " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getFFTAlgorithm "Get the FFT algorithm used to generate realizations of the spectral normal process. Returns ------- fftAlgo : :class:`~openturns.FFT` FFT algorithm used to generate realizations of the spectral normal process. By default, it is the :class:`~openturns.KissFFT` algorithm. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::setFFTAlgorithm "Set the FFT algorithm used to generate realizations of the spectral normal process. Parameters ---------- fftAlgo : :class:`~openturns.FFT` FFT algorithm that will be used to generate realizations of the spectral normal process. OpenTURNS provides the :class:`~openturns.KissFFT` algorithm. More efficient implementations are provided by the *openturns-fftw* module. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getFrequencyStep "Get the frequency step :math:`\Delta f` used to discretize the spectral model. Returns ------- freqStep : float The frequency step :math:`\Delta f` used to discretize the spectral model. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getFrequencyGrid "Get the frequency grid used to discretize the spectral model. Returns ------- freqGrid : :class:`~openturns.RegularGrid` The frequency grid used to discretize the spectral model. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getMaximalFrequency "Get the maximal frequency used in the computation. Returns ------- freqMax : float The maximal frequency used in the computation: :math:`(1-1/N)fmax = fmax - \Delta f`. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getNFrequency "Get the number of points in the frequency grid. Returns ------- freqGrid : :class:`~openturns.RegularGrid` The number :math:`N` of points in the frequency grid, which is equal to the number of time stamps of the time grid. " // --------------------------------------------------------------------- %feature("docstring") OT::SpectralGaussianProcess::getSpectralModel "Get the spectral model. Returns ------- specMod : :class:`~openturns.SpectralModel` The spectral model defining the process. " openturns-1.9/python/src/SpectralModel.i000066400000000000000000000004721307543307100204460ustar00rootroot00000000000000// SWIG file SpectralModel.i %{ #include "openturns/SpectralModel.hxx" %} %include SpectralModel_doc.i OTTypedInterfaceObjectHelper(SpectralModel) %include openturns/SpectralModel.hxx namespace OT{ %extend SpectralModel { SpectralModel(const SpectralModel & other) { return new OT::SpectralModel(other); } } } openturns-1.9/python/src/SpectralModelFactory.i000066400000000000000000000006121307543307100217720ustar00rootroot00000000000000// SWIG file SpectralModelFactory.i %{ #include "openturns/SpectralModelFactory.hxx" %} %include SpectralModelFactory_doc.i OTTypedInterfaceObjectHelper(SpectralModelFactory) %include openturns/SpectralModelFactory.hxx namespace OT { %extend SpectralModelFactory { SpectralModelFactory(const SpectralModelFactory & other) { return new OT::SpectralModelFactory(other); } } } openturns-1.9/python/src/SpectralModelFactoryImplementation.i000066400000000000000000000006571307543307100247110ustar00rootroot00000000000000// SWIG file SpectralModelFactoryImplementation.i %{ #include "openturns/SpectralModelFactoryImplementation.hxx" %} %include SpectralModelFactoryImplementation_doc.i %include openturns/SpectralModelFactoryImplementation.hxx namespace OT {%extend SpectralModelFactoryImplementation {SpectralModelFactoryImplementation(const SpectralModelFactoryImplementation & other){return new OT::SpectralModelFactoryImplementation(other);}}} openturns-1.9/python/src/SpectralModelFactoryImplementation_doc.i.in000066400000000000000000000070031307543307100261330ustar00rootroot00000000000000%define OT_SpectralModelFactory_doc "Base class for spectral model factory. Parameters ---------- mySpectralModelFactoryImplementation : :class:`~openturns.SpectralModelFactoryImplementation` One spectral factory algorithm. By default, the Welch factory algorithm :class:`~openturns.WelchFactory`. Notes ----- Let :math:`X: \Omega \times \cD \rightarrow \Rset^d` be a multivariate second order stationary process, with zero mean, where :math:`\cD \in \Rset^n`. We only treat here the case where the domain is of dimension 1: :math:`\cD \in \Rset` (*n=1*). If we note :math:`C(\vect{s}, \vect{t})=\Expect{(X_{\vect{s}}-m(\vect{s}))\Tr{(X_{\vect{t}}-m(\vect{t}))}}` its covariance function, then for all :math:`(i,j), C^{stat}_{i,j} : \Rset^n \rightarrow \Rset^n` is :math:`\cL^1(\Rset^n)` (ie :math:`\int_{\Rset^n} |C^{stat}_{i,j}(\vect{\tau})|\di{\vect{\tau}}\, < +\infty`), with :math:`C^{stat}(\vect{\tau}) = C(\vect{s}, \vect{s}+\vect{\tau})` as this quantity does not depend on :math:`\vect{s}`. The bilateral spectral density function :math:`S : \Rset^n \rightarrow \mathcal{H}^+(d)` exists and is defined as the Fourier transform of the covariance function :math:`C^{stat}` : .. math:: \forall \vect{f} \in \Rset^n, \,S(\vect{f}) = \int_{\Rset^n}\exp\left\{-2i\pi <\vect{f},\vect{\tau}> \right\} C^{stat}(\vect{\tau})\di{\vect{\tau}} where :math:`\mathcal{H}^+(d) \in \mathcal{M}_d(\Cset)` is the set of *d*-dimensional positive definite hermitian matrices. Depending on the available data, we proceed differently : -if the data correspond to several independent realizations of the process, the estimation is done using the empirical estimator; - if the data correspond to one realization of the process, we suppose the process is ergodic to split the realization into several ones. " %enddef %feature("docstring") OT::SpectralModelFactoryImplementation OT_SpectralModelFactory_doc // --------------------------------------------------------------------- // --------------------------------------------------------------------- %define OT_SpectralModelFactory_getFFTAlgorithm_doc "Accessor to the FFT algorithm used for the Fourier transform. Returns ------- fftAlgo : :class:`~openturns.FFT` The FFT algorithm used for the Fourier transform. " %enddef %feature("docstring") OT::SpectralModelFactoryImplementation::getFFTAlgorithm OT_SpectralModelFactory_getFFTAlgorithm_doc // --------------------------------------------------------------------- %define OT_SpectralModelFactory_setFFTAlgorithm_doc "Accessor to the FFT algorithm used for the Fourier transform. Parameters ---------- fftAlgo : :class:`~openturns.FFT` The FFT algorithm used for the Fourier transform. " %enddef %feature("docstring") OT::SpectralModelFactoryImplementation::setFFTAlgorithm OT_SpectralModelFactory_setFFTAlgorithm_doc // --------------------------------------------------------------------- %define OT_SpectralModelFactory_build_doc "Estimate the spectral model from data. Available constructors: build(*myTimeSeries*) build(*myProcessSample*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` The time series from which the spectral model is estimated. myProcessSample : :class:`~openturns.ProcessSample` The sample of time series from which the spectral model is estimated. Returns ------- mySpectralModel : :class:`~openturns.SpectralModel` The estimated spectral model. " %enddef %feature("docstring") OT::SpectralModelFactoryImplementation::build OT_SpectralModelFactory_build_doc openturns-1.9/python/src/SpectralModelFactory_doc.i.in000066400000000000000000000007321307543307100232270ustar00rootroot00000000000000// SpectralModelFactory docstrings are defined in SpectralModelFactoryImplementation_doc.i.in %feature("docstring") OT::SpectralModelFactory OT_SpectralModelFactory_doc %feature("docstring") OT::SpectralModelFactory::getFFTAlgorithm OT_SpectralModelFactory_getFFTAlgorithm_doc %feature("docstring") OT::SpectralModelFactory::setFFTAlgorithm OT_SpectralModelFactory_setFFTAlgorithm_doc %feature("docstring") OT::SpectralModelFactory::build OT_SpectralModelFactory_build_doc openturns-1.9/python/src/SpectralModelImplementation.i000066400000000000000000000005751307543307100233600ustar00rootroot00000000000000// SWIG file SpectralModelImplementation.i %{ #include "openturns/SpectralModelImplementation.hxx" %} %include SpectralModelImplementation_doc.i %include openturns/SpectralModelImplementation.hxx namespace OT{ %extend SpectralModelImplementation { SpectralModelImplementation(const SpectralModelImplementation & other) { return new OT::SpectralModelImplementation(other); } } } openturns-1.9/python/src/SpectralModelImplementation_doc.i.in000066400000000000000000000163711307543307100246130ustar00rootroot00000000000000%define OT_SpectralModel_doc "Spectral density model. Notes ----- We consider :math:`X: \Omega \times\cD \mapsto \Rset^d` a multivariate stochastic process of dimension :math:`d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`, :math:`\vect{t}\in \cD` is a multivariate index and :math:`X(\omega, \vect{t}) \in \Rset^d`. We note :math:`X_{\vect{t}}: \Omega \rightarrow \Rset^d` the random variable at index :math:`\vect{t} \in \cD` defined by :math:`X_{\vect{t}}(\omega)=X(\omega, \vect{t})` and :math:`X(\omega): \cD \mapsto \Rset^d` a realization of the process :math:`X`, for a given :math:`\omega \in \Omega` defined by :math:`X(\omega)(\vect{t})=X(\omega, \vect{t})`. If the process is a second order process, zero-mean and weakly **stationary**, we define its *bilateral spectral density function* :math:`S : \Rset^n \mapsto \cH^+_{d}` with: - :math:`\cH^+(d) \in \cM^+(d)(\Cset)` is the set of *d-dimensional* positive hermitian matrices Using the *stationary covariance function* :math:`C^{stat}` with :math:`C^{stat} : \cD \mapsto \cM_{d \times d}(\Rset)` and the Fourier transform, the spectral density writes: .. math:: \forall \vect{f} \in \Rset^n, \cS(\vect{f}) = \int_{\Rset^n} \exp\left(-2i \pi <\vect{f}, \vect{\tau}>\right) C^{stat}(\vect{\tau})\di{\vect{\tau}} A SpectralModel object can be created only through its derived classes: :class:`~openturns.CauchyModel`" %enddef %feature("docstring") OT::SpectralModelImplementation OT_SpectralModel_doc // --------------------------------------------------------------------- %define OT_SpectralModel_computeStandardRepresentative_doc "Compute the standard representant of the spectral density function. Parameters ---------- tau : float Frequency value. Returns ------- rho : Complex Standard representant factor of the spectral density function. Notes ----- According to definitions in :class:`~openturns.CovarianceModel`, as the spectral density function is the Fourier transform of the stationary covariance function and using the expression of the last one, the spectral density function writes as a matrix-complex product where the matrix is the constant spatial covariance structure and the complex represents the standard representative: Thus, .. math:: \forall \vect{f} \in \Rset^n, \cS(\vect{f}) = \prod_{k=1}^{n} \vect{\theta}_k \mat{\Sigma} \rho(\vect{f} \odot \vect{\theta}) where :math:`\mat{\Sigma}` is a covariance matrix that explains the covariance structure and :math:`(\vect{f} \odot \vect{\theta})_k = \vect{f}_k \vect{\theta}_k`" %enddef %feature("docstring") OT::SpectralModelImplementation::computeStandardRepresentative OT_SpectralModel_computeStandardRepresentative_doc // --------------------------------------------------------------------- %define OT_SpectralModel_draw_doc "Draw a specific component of the spectral density function. Parameters ---------- rowIndex : int, :math:`0 \leq rowIndex < dimension` The row index of the component to draw. Default value is 0. columnIndex: int, :math:`0 \leq columnIndex < dimension` The column index of the component to draw. Default value is 0. minimumFrequency : float The lower bound of the frequency range over which the model is plotted. Default value is *SpectralModel-DefaultMinimumFrequency* in :class:`~openturns.ResourceMap`. maximumFrequency : float The upper bound of the frequency range over which the model is plotted. Default value is *SpectralModel-DefaultMaximumFrequency* in :class:`~openturns.ResourceMap`. frequencyNumber : int, :math:`pointNumber \geq 2` The discretization of the frequency range :math:`[minimumFrequency, maximumFrequency]` over which the model is plotted. Default value is *SpectralModel-DefaultFrequencyNumber* in class:`~openturns.ResourceMap`. module : bool Flag to tell if module has to be drawn (*True*) or if it is the argument to be drawn (*False*). Default value is *True*. Returns ------- graph : Graph Graphic of the specified component " %enddef %feature("docstring") OT::SpectralModelImplementation::draw OT_SpectralModel_draw_doc // --------------------------------------------------------------------- %define OT_SpectralModel_getAmplitude_doc "Get the amplitude parameter of the spectral density function. Returns ------- amplitude : :class:`~openturns.Point` The used amplitude parameter." %enddef %feature("docstring") OT::SpectralModelImplementation::getAmplitude OT_SpectralModel_getAmplitude_doc // --------------------------------------------------------------------- %define OT_SpectralModel_getDimension_doc "Get the dimension of the *SpectralModel*. Returns ------- dimension : int Dimension of the *SpectralModel*." %enddef %feature("docstring") OT::SpectralModelImplementation::getDimension OT_SpectralModel_getDimension_doc // --------------------------------------------------------------------- %define OT_SpectralModel_getScale_doc "Get the scale parameter of the spectral density function. Returns ------- scale : :class:`~openturns.Point` The used scale parameter." %enddef %feature("docstring") OT::SpectralModelImplementation::getScale OT_SpectralModel_getScale_doc // --------------------------------------------------------------------- %define OT_SpectralModel_getSpatialCorrelation_doc "Get the spatial correlation matrix of the spectral density function. Returns ------- spatialCorrelation : :class:`~openturns.CorrelationMatrix` Correlation matrix :math:`\mat{R} \in \mathcal{M}_{dimension \times dimension}([-1, 1])`." %enddef %feature("docstring") OT::SpectralModelImplementation::getSpatialCorrelation OT_SpectralModel_getSpatialCorrelation_doc // --------------------------------------------------------------------- %define OT_SpectralModel_get_spatial_dimension_doc "Get the spatial dimension of the spectral density function. Returns ------- spatialDimension : int SpatialDimension of the *SpectralModel*." %enddef %feature("docstring") OT::SpectralModelImplementation::getSpatialDimension OT_SpectralModel_get_spatial_dimension_doc // --------------------------------------------------------------------- %define OT_SpectralModel_setAmplitude_doc "Set the amplitude parameter of the spectral density function. Parameters ---------- amplitude : :class:`~openturns.Point` The amplitude parameter to be used in the spectral density function." %enddef %feature("docstring") OT::SpectralModelImplementation::setAmplitude OT_SpectralModel_setAmplitude_doc // --------------------------------------------------------------------- %define OT_SpectralModel_setScale_doc "Set the scale parameter of the spectral density function. Parameters ---------- scale : :class:`~openturns.Point` The scale parameter to be used in the spectral density function. It should be of size dimension." %enddef %feature("docstring") OT::SpectralModelImplementation::setScale OT_SpectralModel_setScale_doc // --------------------------------------------------------------------- %define OT_SpectralModel_operator_doc "Evaluate the spectral density function for a specific frequency. Parameters ---------- f : float Frequency value. Returns ------- spd : HermitianMatrixs The evaluation of spectral density function at frequency f." %enddef %feature("docstring") OT::SpectralModelImplementation::operator() OT_SpectralModel_operator_doc openturns-1.9/python/src/SpectralModel_doc.i.in000066400000000000000000000020341307543307100216740ustar00rootroot00000000000000// SpectralModel docstrings are defined in SpectralModelImplementation_doc.i.in %feature("docstring") OT::SpectralModel OT_SpectralModel_doc %feature("docstring") OT::SpectralModel::computeStandardRepresentative OT_SpectralModel_computeStandardRepresentative_doc %feature("docstring") OT::SpectralModel::draw OT_SpectralModel_draw_doc %feature("docstring") OT::SpectralModel::getDimension OT_SpectralModel_getDimension_doc %feature("docstring") OT::SpectralModel::getAmplitude OT_SpectralModel_getAmplitude_doc %feature("docstring") OT::SpectralModel::getScale OT_SpectralModel_getScale_doc %feature("docstring") OT::SpectralModel::getSpatialCorrelation OT_SpectralModel_getSpatialCorrelation_doc %feature("docstring") OT::SpectralModel::getSpatialDimension OT_SpectralModel_get_spatial_dimension_doc %feature("docstring") OT::SpectralModel::setAmplitude OT_SpectralModel_setAmplitude_doc %feature("docstring") OT::SpectralModel::setScale OT_SpectralModel_setScale_doc %feature("docstring") OT::SpectralModel::operator() OT_SpectralModel_operator_doc openturns-1.9/python/src/SphericalModel.i000066400000000000000000000004261307543307100206020ustar00rootroot00000000000000// SWIG file SphericalModel.i %{ #include "openturns/SphericalModel.hxx" %} %include SphericalModel_doc.i %include openturns/SphericalModel.hxx namespace OT { %extend SphericalModel { SphericalModel(const SphericalModel & other) { return new OT::SphericalModel(other); } } } openturns-1.9/python/src/SphericalModel_doc.i.in000066400000000000000000000056721307543307100220440ustar00rootroot00000000000000%feature("docstring") OT::SphericalModel "Spherical covariance function. Available constructors: SphericalModel(*spatialDim=1*) SphericalModel(*scale, amplitude*) SphericalModel(*scale, amplitude, radius*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. By default, equal to 1. scale : sequence of positive floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma} \in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. radius : float, :math:`a > 0` Radius of the sphere on which the covariance model is not zero. By default, equal to 1. Notes ----- The *spherical* function is a stationary covariance function whith dimension :math:`d=1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \mapsto \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *spherical* function is defined on the sphere which ray is :math:`a`: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 \left[1 - \frac{1}{2a} \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2 \left(3 - \frac{1}{a^2}\left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2^2\right) \right], \quad \forall (\vect{s}, \vect{t}), \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_2 \leq a The function is equal to zero outside the sphere. The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = 1 - \frac{1}{2a} \left\|\vect{s} - \vect{t}\right\|_2 \left(3 - \frac{1}{a^2}\left\| \vect{s} - \vect{t} \right\|_2^2\right), \quad \forall (\vect{s}, \vect{t}), \left\| \vect{s} - \vect{t} \right\|_2 \leq a and is equal to zero outside the sphere. See Also -------- CovarianceModel Examples -------- Create a standard spherical covariance function: >>> import openturns as ot >>> covModel = ot.SphericalModel(2) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(covModel(s, t)) [[ 0.789282 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0.54147 ]] Create a spherical covariance function specifying the scale, amplitude vectors: >>> covarianceModel = ot.SphericalModel([0.2, 0.3], [2.5]) Create a squared exponential covariance function specifying the scale vector, the amplitude and radius: >>> covModel3 = ot.SphericalModel([0.2, 0.3], [2.5], 2.3)" // --------------------------------------------------------------------- %feature("docstring") OT::SphericalModel::setRadius "Radius accessor. Parameters ---------- radius : float, :math:`a > 0` Radius of the sphere on which the covariance model is not zero." // --------------------------------------------------------------------- %feature("docstring") OT::SphericalModel::getRadius "Radius accessor. Returns ------- radius : float, :math:`a > 0` Radius of the sphere on which the covariance model is not zero." openturns-1.9/python/src/SquareComplexMatrix.i000066400000000000000000000013151307543307100216620ustar00rootroot00000000000000// SWIG file SquareComplexMatrix.i %{ #include "openturns/SquareComplexMatrix.hxx" %} %include SquareComplexMatrix_doc.i %rename(__pow__) OT::SquareComplexMatrix::power(const UnsignedInteger n) const; %include openturns/SquareComplexMatrix.hxx namespace OT { %extend SquareComplexMatrix { SquareComplexMatrix(const SquareComplexMatrix & other) { return new OT::SquareComplexMatrix(other); } SquareComplexMatrix(PyObject * pyObj) { return new OT::SquareComplexMatrix( OT::convert(pyObj) ); } OTComplexMatrixGetAccessors() #if SWIG_VERSION < 0x030011 SquareComplexMatrix __truediv__(Complex s) { return (*self) / s; } #endif } // SquareComplexMatrix } // OT openturns-1.9/python/src/SquareComplexMatrix_doc.i.in000066400000000000000000000016341307543307100231200ustar00rootroot00000000000000%feature("docstring") OT::SquareComplexMatrix "Complex square matrix. Parameters ---------- size : int, :math:`n > 0`, optional Matrix size. Default is 1. values : sequence of complex with size :math:`n^2`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. Default creates a zero matrix. Examples -------- Create a matrix >>> import openturns as ot >>> M = ot.SquareComplexMatrix(2, range(2 * 2)) >>> print(M) [[ (0,0) (2,0) ] [ (1,0) (3,0) ]] Get or set terms >>> print(M[0, 0]) 0j >>> M[0, 0] = 1.0 >>> print(M[0, 0]) (1+0j) >>> print(M[:, 0]) [[ (1,0) ] [ (1,0) ]] Create an openturns matrix from a **square** numpy 2d-array (or matrix, or 2d-list)... >>> import numpy as np >>> np_2d_array = np.array([[1.0, 2.0], [3.0, 4.0]]) >>> ot_matrix = ot.SquareComplexMatrix(np_2d_array) and back >>> np_matrix = np.matrix(ot_matrix)" openturns-1.9/python/src/SquareMatrix.i000066400000000000000000000021361307543307100203340ustar00rootroot00000000000000// SWIG file SquareMatrix.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::SquareComplexMatrix & v ($*ltype temp) %{ temp = OT::SquareComplexMatrix(); $1 = &temp; %} %typemap(argout) OT::SquareComplexMatrix & v %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::SquareComplexMatrix(*$1), SWIG_TypeQuery("OT::SquareComplexMatrix *"), SWIG_POINTER_OWN | 0 )); %} OT::SquareMatrix OT::SquareMatrix::computeEV(OT::SquareComplexMatrix & v, const Bool keepIntact = true); %{ #include "openturns/SquareMatrix.hxx" %} %include SquareMatrix_doc.i %rename(__pow__) OT::SquareMatrix::power(const UnsignedInteger n) const; %include openturns/SquareMatrix.hxx namespace OT { %extend SquareMatrix { SquareMatrix(const SquareMatrix & other) { return new OT::SquareMatrix(other); } SquareMatrix(PyObject * pyObj) { return new OT::SquareMatrix( OT::convert(pyObj) ); } OTMatrixAccessors() #if SWIG_VERSION < 0x030011 SquareMatrix __truediv__(Scalar s) { return (*self) / s; } #endif } // SquareMatrix } // OT openturns-1.9/python/src/SquareMatrix_doc.i.in000066400000000000000000000157371307543307100216010ustar00rootroot00000000000000%feature("docstring") OT::SquareMatrix "Real square matrix. Parameters ---------- size : int, :math:`n > 0`, optional Matrix size. Default is 1. values : sequence of float with size :math:`n^2`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. Default creates a zero matrix. Examples -------- Create a matrix >>> import openturns as ot >>> M = ot.SquareMatrix(2, range(2 * 2)) >>> print(M) [[ 0 2 ] [ 1 3 ]] Get or set terms >>> print(M[0, 0]) 0.0 >>> M[0, 0] = 1.0 >>> print(M[0, 0]) 1.0 >>> print(M[:, 0]) [[ 1 ] [ 1 ]] Create an openturns matrix from a **square** numpy 2d-array (or matrix, or 2d-list)... >>> import numpy as np >>> np_2d_array = np.array([[1.0, 2.0], [3.0, 4.0]]) >>> ot_matrix = ot.SquareMatrix(np_2d_array) and back >>> np_matrix = np.matrix(ot_matrix) Basic linear algebra operations (provided the dimensions are compatible) >>> A = ot.Matrix([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> B = ot.SquareMatrix(np.eye(2)) >>> C = ot.Matrix(3, 2, [1.0] * 3 * 2) >>> print(A * B - C) [[ 0 1 ] [ 2 3 ] [ 4 5 ]] >>> A = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> print(A ** 2) [[ 7 10 ] [ 15 22 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::computeDeterminant "Compute the determinant. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- determinant : float The square matrix determinant. Examples -------- >>> import openturns as ot >>> A = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> A.computeDeterminant() -2.0" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::computeEigenValues "Compute eigen values. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- eigenvalues : :class:`~openturns.ComplexCollection` Eigen values. See Also -------- computeEV Examples -------- >>> import openturns as ot >>> M = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> M.computeEigenValues() [(-0.372281,0),(5.37228,0)]" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::computeEV "Compute the eigen values decomposition (EVD). The eigen values decomposition of a square matrix :math:`\mat{M}` with size :math:`n` reads: .. math:: \mat{M} = \mat{\Phi} \mat{\Lambda} \mat{\Phi}^{-1} where :math:`\mat{\Lambda}` is an :math:`n \times n` diagonal matrix and :math:`\mat{\Phi}` is an :math:`n \times n` orthogonal matrix. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- eigen_values : :class:`~openturns.ComplexCollection` The vector of eigen values with size :math:`n` that form the diagonal of the :math:`n \times n` matrix :math:`\mat{\Lambda}` of the EVD. Phi : :class:`~openturns.SquareComplexMatrix` The left matrix of the EVD. Notes ----- This uses LAPACK'S `DGEEV `_. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> eigen_values, Phi = M.computeEV() >>> Lambda = ot.SquareComplexMatrix(M.getDimension()) >>> for i in range(eigen_values.getSize()): ... Lambda[i, i] = eigen_values[i] >>> from scipy.linalg import inv # SquareComplexMatrix does not implement solveLinearSystem >>> Phi, Lambda = np.matrix(Phi), np.matrix(Lambda) >>> np.testing.assert_array_almost_equal(Phi * Lambda * inv(Phi), M)" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::computeLogAbsoluteDeterminant "Compute the logarithm of the absolute value of the determinant. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- determinant : float The logarithm of the absolute value of the square matrix determinant. sign : float The sign of the determinant. Examples -------- >>> import openturns as ot >>> A = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> A.computeLogAbsoluteDeterminant() [0.693147..., -1.0]" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::getDimension "Accessor to the dimension (the number of rows). Returns ------- dimension : int" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::isDiagonal "Test whether the matrix is diagonal or not. Returns ------- test : bool Answer." // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::solveLinearSystem "Solve a square linear system whose the present matrix is the operator. Parameters ---------- rhs : sequence of float or :class:`~openturns.Matrix` with :math:`n_r` values or rows, respectively The right hand side member of the linear system. keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- solution : :class:`~openturns.Point` or :class:`~openturns.Matrix` The solution of the square linear system. Notes ----- This will handle both matrices and vectors. Note that you'd better type explicitely the matrix if it has some properties that could simplify the resolution (see :class:`~openturns.TriangularMatrix`). This uses LAPACK'S `DGESV `_ for matrices and `DGELSY `_ for vectors. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> b = ot.Point([1.0] * 2) >>> x = M.solveLinearSystem(b) >>> np.testing.assert_array_almost_equal(M * x, b)" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::transpose "Transpose the matrix. Returns ------- MT : :class:`~openturns.SquareMatrix` The transposed matrix. Examples -------- >>> import openturns as ot >>> M = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> print(M) [[ 1 2 ] [ 3 4 ]] >>> print(M.transpose()) [[ 1 3 ] [ 2 4 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::SquareMatrix::computeTrace "Compute the trace of the matrix. Returns ------- trace : float The trace of the matrix. Examples -------- >>> import openturns as ot >>> M = ot.SquareMatrix([[1.0, 2.0], [3.0, 4.0]]) >>> M.computeTrace() 5.0" openturns-1.9/python/src/SquaredExponential.i000066400000000000000000000004661307543307100215260ustar00rootroot00000000000000// SWIG file SquaredExponential.i %{ #include "openturns/SquaredExponential.hxx" %} %include SquaredExponential_doc.i %include openturns/SquaredExponential.hxx namespace OT { %extend SquaredExponential { SquaredExponential(const SquaredExponential & other) { return new OT::SquaredExponential(other); } } } openturns-1.9/python/src/SquaredExponential_doc.i.in000066400000000000000000000041531307543307100227550ustar00rootroot00000000000000%feature("docstring") OT::SquaredExponential "Squared exponential covariance function. Available constructors: SquaredExponential(*spatialDim=1*) SquaredExponential(*scale*) SquaredExponential(*scale, amplitude*) Parameters ---------- spatialDim : int Spatial dimension :math:`n`. When not fulfilled, the spatial dimension is equal to the size of the parameter :math:`\vect{\theta}`. By default, equal to 1. scale : sequence of floats Scale coefficient :math:`\vect{\theta}\in \Rset^n`. The size of :math:`\vect{\theta}` is the spatial dimension. amplitude : sequence of positive floats Amplitude of the process :math:`\vect{\sigma}\in \Rset^d`. Must be of size equal to 1. By default, equal to :math:`[1]`. Notes ----- The *squared exponential function* is a stationary covariance function whith dimension :math:`d=1`. We consider the scalar stochastic process :math:`X: \Omega \times\cD \mapsto \Rset`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. The *squared exponential* function is defined by: .. math:: C(\vect{s}, \vect{t}) = \sigma^2 e^{-\frac{1}{2} \left\|\dfrac{\vect{s}-\vect{t}}{\vect{\theta}}\right\|_{2}^{2}}, \quad \forall (\vect{s}, \vect{t}) \in \cD The correlation function :math:`\rho` writes: .. math:: \rho(\vect{s}, \vect{t}) = e^{-\frac{1}{2} \left\| \vect{s}- \vect{t} \right\|_{2}^{2}}, \quad \forall (\vect{s}, \vect{t}) \in \cD See Also -------- CovarianceModel Examples -------- Create a standard squared exponential covariance function: >>> import openturns as ot >>> covModel = ot.SquaredExponential(2) >>> t = [0.1, 0.3] >>> s = [0.2, 0.4] >>> print(covModel(s, t)) [[ 0.99005 ]] >>> tau = [0.1, 0.3] >>> print(covModel(tau)) [[ 0.951229 ]] Create a squared exponential covariance function specifying the scale vector (amplitude is fixed to 1): >>> covModel2 = ot.SquaredExponential([1.5, 2.5]) >>> covModel2bis = ot.SquaredExponential([1.5] * 3) Create a squared exponential covariance function specifying the scale vector and the amplitude : >>> covModel3 = ot.SquaredExponential([1.5, 2.5], [3.5])" openturns-1.9/python/src/Staircase.i000066400000000000000000000003561307543307100176270ustar00rootroot00000000000000// SWIG file Staircase.i %{ #include "openturns/Staircase.hxx" %} %include Staircase_doc.i %include openturns/Staircase.hxx namespace OT { %extend Staircase { Staircase(const Staircase & other) { return new OT::Staircase(other); } } } openturns-1.9/python/src/Staircase_doc.i.in000066400000000000000000000032411307543307100210550ustar00rootroot00000000000000%feature("docstring") OT::Staircase "Staircase. Available constructors: Staircase(*data, legend=' '*) Staircase(*data, color, lineStyle, lineWidth, pattern, legend=' '*) Staircase(*data, color, lineStyle, pattern, legend=' '*) Parameters ---------- data : 2-d sequence of float Points from which the Staircase is built, must be of dimension 2: the discontinuous points and their corresponding height. legend : str Legend of the Staircase. color : str Color of the curve. If not specified, by default it is 'blue'. lineStyle : str Style of the curve. If not specified, by default it is 'solid'. lineWidth : int Width of the curve. If not specified, by default it is 1. pattern : str Pattern which is 'S' or 's'. By default the pattern is equal to 's'. Going from :math:`(x_1, y_1)` to :math:`(x_2, y_2)` with :math:`x_1>> import openturns as ot >>> distribution = ot.Normal([0.5], [2.], ot.CorrelationMatrix(1)) >>> sample = distribution.getSample(200) >>> # Construct empirical CDF for the sample >>> data = ot.Sample(20, 2) >>> cursor = ot.Point(2) >>> for i in range(20): ... cursor[0] = 13.0 * i / 20.0 - 6.5 ... count = 0 ... for j in range(200): ... if(sample[j, 0] < cursor[0]): ... count += 1 ... cursor[1] = count / 200.0 ... data[i] = cursor >>> # Create an empty graph >>> myGraph = ot.Graph('A staircase', 'x1', 'x2', True, 'topleft') >>> # Create the staircase >>> myStaircase = ot.Staircase(data, 'blue', 'solid', 's', 'Normal CDF') >>> myGraph.add(myStaircase)" openturns-1.9/python/src/StandardDistributionPolynomialFactory.i000066400000000000000000000007161307543307100254450ustar00rootroot00000000000000// SWIG file StandardDistributionPolynomialFactory.i %{ #include "openturns/StandardDistributionPolynomialFactory.hxx" %} %include StandardDistributionPolynomialFactory_doc.i %include openturns/StandardDistributionPolynomialFactory.hxx namespace OT { %extend StandardDistributionPolynomialFactory { StandardDistributionPolynomialFactory(const StandardDistributionPolynomialFactory & other) { return new OT::StandardDistributionPolynomialFactory(other); } } } openturns-1.9/python/src/StandardDistributionPolynomialFactory_doc.i.in000066400000000000000000000143451307543307100267020ustar00rootroot00000000000000%feature("docstring") OT::StandardDistributionPolynomialFactory "Build orthonormal or orthogonal univariate polynomial families. Parameters ---------- arg : :class:`~openturns.Distribution` or :class:`~openturns.OrthonormalizationAlgorithm` Either a :class:`~openturns.Distribution` implementing the probability measure according to which the polynomial family is orthonormal **or** an :class:`~openturns.OrthonormalizationAlgorithm`. In the first case, the implementation will switch to the suitable specific orthonormal univariate polynomial family if any (see the notes below), or it will default to the :class:`~openturns.AdaptiveStieltjesAlgorithm` to build an orthonormal univariate polynomial family. Notes ----- Use this functionality with caution: - The polynomials exist if and only if the distribution admits finite moments of all orders. Even if some algorithms manage to compute something, it will be plain numerical noise. - Even if the polynomials exist, they form an Hilbertian basis wrt the dot product induced by the distribution if and only if the distribution is **determinate**, ie is characterized by its moments. For example, the :class:`~openturns.LogNormal` distribution has orthonormal polynomials of arbitrary degree but the projection onto the functional space generated by these polynomials (see :class:`~openturns.FunctionalChaosAlgorithm`) may converge to a function that differs significantly from the function being projected. OpenTURNS implements the following **specific orthonormal** [#orthonormal]_ univariate polynomial families together with their associated **standard distributions**: .. table:: +-----------------------------------------------------------------------+---------------------------------------+ | Standard distribution | Polynomial | +=======================================================================+=======================================+ | :class:`~openturns.Normal` | :class:`~openturns.HermiteFactory` | | :math:`\cN(\mu = 0, \sigma = 1)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.Uniform` | :class:`~openturns.LegendreFactory` | | :math:`\cU(a = -1, b = 1)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.Gamma` | :class:`~openturns.LaguerreFactory` | | :math:`\Gamma(k = k_a + 1, \lambda = 1, \gamma = 0)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.Beta` | :class:`~openturns.JacobiFactory` | | :math:`{\rm B}(r = \beta + 1, t = \alpha + \beta + 2, a = -1, b = 1)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.Poisson` | :class:`~openturns.CharlierFactory` | | :math:`\cP(\lambda)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.Binomial` | :class:`~openturns.KrawtchoukFactory` | | :math:`\cB(n, p)` | | +-----------------------------------------------------------------------+---------------------------------------+ | :class:`~openturns.NegativeBinomial` | :class:`~openturns.MeixnerFactory` | | :math:`\cB^-(r, p)` | | +-----------------------------------------------------------------------+---------------------------------------+ Aside, OpenTURNS also implements generic algorithms for building orthonormal univariate polynomial families with respect to any arbitrary probability measure (implemented as a :class:`~openturns.Distribution`). OpenTURNS implements the following :class:`~openturns.OrthonormalizationAlgorithm`'s: - :class:`~openturns.AdaptiveStieltjesAlgorithm` (default), - :class:`~openturns.GramSchmidtAlgorithm`, - :class:`~openturns.ChebychevAlgorithm` .. [#orthonormal] A polynomial family :math:`(P_n)_{n \geq 0}` is said to be orthonormal with respect to the probability measure :math:`w(x) \di{x}` if and only if: .. math:: \langle P_i, P_j \rangle = \int_{\supp{w}} P_i(x) P_j(x) w(x) \di{x} = \delta_{ij}, \quad i, j = 1, \ldots, n where :math:`\delta_{ij}` denotes Kronecker's delta. Examples -------- >>> import openturns as ot Build the specific orthonormal polynomial factory associated to the normal distribution (Hermite): >>> polynomial_factory = ot.StandardDistributionPolynomialFactory(ot.Normal()) >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 X -0.707107 + 0.707107 * X^2 Build an orthonormal polynomial factory for the Weibull distribution with the default orthonormalization algorithm: >>> polynomial_factory = ot.StandardDistributionPolynomialFactory(ot.Weibull()) >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 -1 + X 1 - 2 * X + 0.5 * X^2 Build an orthonormal polynomial factory for the log-normal distribution with Chebychev's othonormalization algorithm: >>> algorithm = ot.ChebychevAlgorithm(ot.Weibull()) >>> polynomial_factory = ot.StandardDistributionPolynomialFactory(algorithm) >>> for i in range(3): ... print(polynomial_factory.build(i)) 1 -1 + X 1 - 2 * X + 0.5 * X^2 " openturns-1.9/python/src/StandardEvent.i000066400000000000000000000004161307543307100204500ustar00rootroot00000000000000// SWIG file StandardEvent.i %{ #include "openturns/StandardEvent.hxx" %} %include StandardEvent_doc.i %include openturns/StandardEvent.hxx namespace OT { %extend StandardEvent { StandardEvent(const StandardEvent & other) { return new OT::StandardEvent(other); } } } openturns-1.9/python/src/StandardEvent_doc.i.in000066400000000000000000000045351307543307100217100ustar00rootroot00000000000000%feature("docstring") OT::StandardEvent "Event defined in the standard space. Available constructor: StandardEvent(*antecedent, comparisonOperator, threshold*) StandardEvent(*event*) Parameters ---------- antecedent : :class:`~openturns.RandomVector` of dimension 1 Output variable of interest. comparisonOperator : :class:`~openturns.ComparisonOperator` Comparison operator used to compare *antecedent* with *threshold*. threshold : float *threshold* we want to compare to *antecedent*. event : :class:`~openturns.Event` Physical event associated with the standard event to be created. Notes ----- An event is defined as follows: .. math:: \cD_f = \{\vect{X} \in \Rset^n \, / \, g(\vect{X},\vect{d}) \le 0\} where :math:`\vect{X}` denotes a random input vector, representing the sources of uncertainties, :math:`\vect{d}` is a determinist vector, representing the fixed variables and :math:`g(\vect{X},\vect{d})` is the limit state function of the model. One way to evaluate the probability content :math:`P_f` of the event :math:`\cD_f`: .. math:: P_f = \int_{g(\vect{X},\vect{d})\le 0}f_\vect{X}(\vect{x})\di{\vect{x}} is to use an isoprobabilistic transformation to move from the physical space to a standard normal space (U-space) where distributions are spherical (invariant by rotation by definition), with zero mean, unit variance and unit correlation matrix. The usual isoprobabilistic transformations are the Generalized Nataf transformation and the Rosenblatt one. In that new U-space, the event has the new expression defined from the transformed limit state function of the model :math:`G : \cD_f = \{\vect{U} \in \Rset^n \, | \, G(\vect{U}\,,\,\vect{d}) \le 0\}` and its boundary : :math:`\{\vect{U} \in \Rset^n \, | \,G(\vect{U}\,,\,\vect{d}) = 0\}`. See also -------- Analytical, SORM, FORM, SORMResult, FORMResult, StrongMaximumTest Examples -------- A StandardEvent created from a limit state function : >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal(4) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> myStandardEvent = ot.StandardEvent(output, ot.Less(), 1.0) A StandardEvent based on an event : >>> myEvent = ot.Event(output, ot.Less(), 1.0) >>> myStandardEvent = ot.StandardEvent(myEvent)" openturns-1.9/python/src/StationaryCovarianceModel.i000066400000000000000000000005521307543307100230200ustar00rootroot00000000000000// SWIG file StationaryCovarianceModel.i OTAutodoc(StationaryCovarianceModel) %{ #include "openturns/StationaryCovarianceModel.hxx" %} %include openturns/StationaryCovarianceModel.hxx namespace OT{ %extend StationaryCovarianceModel { StationaryCovarianceModel(const StationaryCovarianceModel & other) { return new OT::StationaryCovarianceModel(other); } } } openturns-1.9/python/src/StationaryCovarianceModelFactory.i000066400000000000000000000007141307543307100243500ustar00rootroot00000000000000// SWIG file StationaryCovarianceModelFactory.i %{ #include "openturns/StationaryCovarianceModelFactory.hxx" %} %include StationaryCovarianceModelFactory_doc.i %include openturns/StationaryCovarianceModelFactory.hxx namespace OT { %extend StationaryCovarianceModelFactory { StationaryCovarianceModelFactory(const StationaryCovarianceModelFactory & other) { return new OT::StationaryCovarianceModelFactory(other); } } } openturns-1.9/python/src/StationaryCovarianceModelFactory_doc.i.in000066400000000000000000000220571307543307100256060ustar00rootroot00000000000000%feature("docstring") OT::StationaryCovarianceModelFactory "Estimation of the covariance model of a stationary process. Parameters ---------- spectralModelFactory : :class:`~openturns.SpectralModelFactory` The spectral model factory. By default, it is the Welch factory model. Notes ----- We consider :math:`X: \Omega \times \cD \rightarrow \Rset^d` be a multivariate process of dimension *d* where :math:`\cD \in \Rset^n`. We only treat here the case where the domain is of dimension 1: :math:`\cD \in \Rset` (:math:`n=1`). We denote :math:`(\vect{t}_0, \dots, \vect{t}_{N-1})` the vertices of the mesh :math:`\cM \in \cD` which is a time grid supposed regular. *X* is supposed to be a stationary second order process with zero mean. We note its covariance function :math:`C^{stat}: \cD \rightarrow \mathcal{M}_{d \times d}(\Rset)`, defined by :math:`C^{stat}(\tau)=\Expect{X_s\Tr{X_{s+\tau}}}` for all :math:`s\in \cD`. In addition, we suppose that its spectral density function :math:`S : \Rset \rightarrow \mathcal{H}^+(d)` is defined, where :math:`\mathcal{H}^+(d) \in \mathcal{M}_d(\Cset)` is the set of *d*-dimensional positive definite hermitian matrices. OpenTURNS estimates :math:`C^{stat}` from a field or a sample of fields of *X*, using first the estimation of the spectral density function and then mapping *S* into :math:`C^{stat}` using the inversion relation : .. math:: C^{stat}(\vect{\tau}) = \int_{\Rset^n}\exp\left\{ 2i\pi <\vect{f}, \vect{\tau}> \right\}S(\vect{f})\di{\vect{f}} when it is possible. As the mesh is a time grid (:math:`n=1`), the fields can be interpreted as time series. The estimation algorithm is outlined hereafter. Let :math:`(\vect{X}^0, \dots, , \vect{X}^{M-1})` be *M* independent realizations of *X* or *M* segments of one realization of the process. Using the relation between the covariance model end the spectral function, the covariance function writes: .. math:: :label: eq2 C_{i,j}^{stat}(\tau) = \int_{\mathbb{R}}\exp\left\{ 2i\pi f \tau \right\} S_{i,j}(f)\di{f} where :math:`C_{i,j}^{stat}` is the element *(i,j)* of the matrix :math:`C^{stat}(\tau)` and :math:`S_{i,j}(f)` the one of :math:`S(f)`. The integral :eq:`eq2` is approximated by its evaluation on the finite domain :math:`\Omega \in \Rset`: .. math:: :label: eq3 C_{i,j}^{stat}(\tau) = \int_{\Omega}\exp\left\{ 2i\pi f \tau \right\} S_{i,j}(f)\di{f} Let us consider the partition of the domain as follows: - :math:`\Omega =[-\Omega_c, \Omega_c]` is subdivised into *M* segments :math:`\Omega = \cup_{k=1}^{M} \mathcal{M}_k` with :math:`\mathcal{M}_k=[f_k - \frac{\Delta f}{2}, f_k + \frac{\Delta f}{2}]` - :math:`\Delta f` be the frequency step, :math:`\Delta f = \frac{2 \Omega_c}{M}` - :math:`f_k` be the frequences on which the spectral density is computed, :math:`f_k = -\Omega_c + \left(k - \frac{1}{2} \right) \Delta f = \left( 2 k - 1 - M \right) \frac{\Delta f}{2}` with :math:`k=1,\hdots,M` The equation :eq:`eq3` can be rewritten as: .. math:: C_{i,j}^{stat}(\tau) = \sum_{k=1}^{M}\int_{\mathcal{M}_k}\exp\left\{ 2i\pi f \tau \right\} S_{i,j}(f)\di{f} We focus on the integral on each subdomain :math:`\mathcal{M}_k`. Using numerical approximation, we have: .. math:: \int_{\mathcal{M}_k}\exp\left\{ 2i\pi f \tau \right\} S_{i,j}(f)\di{f} \approx \Delta f S_{i,j}(f_k) \exp\left\{ 2i\pi f_k \tau \right\} :math:`\tau` must be in correspondance with frequency values with respect to the Shannon criteria. Thus the temporal domain of estimation is the following: - :math:`\Delta t` is the time step, :math:`\Delta t = \frac{1}{2 \Omega_c}` such as :math:`\Delta f \Delta t = \frac{1}{M}` - :math:`\tilde{\mathcal{T}} = [-T, T]` is subdivised into *M* segments :math:`\tilde{{\mathcal{T}}} = \cup_{m=1}^{M} \mathcal{T}_m` with :math:`\mathcal{T}_m=[t_m - \frac{\Delta t}{2}, t_m + \frac{\Delta t}{2}]` - :math:`t_m` be the time values on which the covariance is estimated, :math:`t_m = -\frac{M}{2 \Omega_c} + \left(m - \frac{1}{2} \right) \Delta t = \left(2 m - 1 - M \right) \frac{\Delta t}{2}` The estimate of the covariance value at time value :math:`\tau_{m}` depends on the quantities of form: .. math:: :label: eq4 \int_{\mathcal{M}_k}\exp\left\{ 2i\pi f \tau_{m} \right\} S_{i,j}(f)\di{f} \approx \Delta f S_{i,j}(f_k) \exp\left\{ 2i\pi f_k \tau_{m} \right\} We develop the expression of :math:`f_k` and :math:`\tau_{m}` and we get: .. math:: \left\{ \begin{array}{l} 2m - 1 - M = 2 (m-1) - (M-1) \\ 2k - 1 - M = 2 (k-1) - (M-1) \end{array} \right. Thus: .. math:: (2m - 1 - M) (2k - 1 - M) = 4 (m-1)(k-1) - (M-1)(2m -1 -M) - 2 (k-1)(M-1) and: .. math:: (2m - 1 - M) (2k - 1 - M)\frac{\Delta t}{2}\frac{\Delta f}{2} = \frac{(m-1)(k-1)}{M} - \frac{(M-1)(2m -1 -M)}{4M} - \frac{(k-1)(M-1)}{2M} We denote: .. math:: \left\{ \begin{array}{l} \delta(m) = \exp\left\{-i \frac{\pi}{2M} (M-1)(2m -1 -M) \right\}\\ \phi_k = \exp\left\{-i \frac{\pi}{M} (k-1)(M-1) \right\} S_{i,j}(f_k) \end{array} \right. Finally, we get the followig expression for integral in :eq:`eq4`: .. math:: \int_{\mathcal{M}_k}\exp\left\{ 2i\pi f \tau_{m} \right\} S_{i,j}(f)\di{f} \approx \Delta f \exp\left\{2i \frac{\pi}{M} (m-1)(k-1) \right\} \delta(m) \phi_k It follows that: .. math:: :label: eq5 C_{i,j}^{stat}(\tau_m) = \Delta f \delta(m) \sum_{k=1}^{M} \phi_k \exp\left\{2i \frac{\pi}{M} (m-1)(k-1) \right\} In the equation :eq:`eq5`, we notice a discrete inverse Fourier transform. " // --------------------------------------------------------------------- %feature("docstring") OT::StationaryCovarianceModelFactory::build "Estimate a stationary covariance model. Available usages: build(*processSample*) build(*field*) Parameters ---------- processSample : :class:`~openturns.ProcessSample` The collection of fields used to estimate the covariance model. field : :class:`~openturns.Field` The field used to estimate the covariance model. Returns ------- covEst : :class:`~openturns.CovarianceModelImplementation` The estimated covariance model. Notes ----- The fields must be time series, ie the underlying mesh must be a 1D lattice. The estimated :class:`~openturns.CovarianceModelImplementation` which is a :class:`~openturns.UserDefinedStationaryCovarianceModel` composed of a time grid and a collection of *K* square matrices of dimension *d* where *K* corresponds to the number of time steps of the final time grid on which the covariance is estimated. When estimated from a time series, the :class:`~openturns.UserDefinedStationaryCovarianceModel` may have a time grid different from the initial time grid of the time series. Examples -------- Create the stationary covariance model, a mesh and a process: >>> import openturns as ot >>> myModel = ot.AbsoluteExponential([0.1]) >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 10) >>> myProcess = ot.GaussianProcess(myModel, myTimeGrid) Generate 20 fields: >>> mySample = myProcess.getSample(20) Estimate the covariance model supposing the stationarity: >>> myEstCov = ot.StationaryCovarianceModelFactory().build(mySample) " // --------------------------------------------------------------------- %feature("docstring") OT::StationaryCovarianceModelFactory::buildAsUserDefinedStationaryCovarianceModel "Estimate the covariance model as a User defined covariance model. Available usages: buildAsUserDefinedStationaryCovarianceModel(*processSample*) buildAsUserDefinedStationaryCovarianceModel(*field*) buildAsUserDefinedStationaryCovarianceModel(*spectralModel*) buildAsUserDefinedStationaryCovarianceModel(*spectralModel, frequencyGrid*) Parameters ---------- processSample : :class:`~openturns.ProcessSample` The collection fields used to estimate the covariance model which is supposed to be stationary. field : :class:`~openturns.Field` The field used to estimate the covariance model. spectralModel : :class:`~openturns.UserDefinedSpectralModel` if alone, otherwise :class:`~openturns.SpectralModel` The spectral model to convert into a covariance model. frequencyGrid : :class:`~openturns.RegularGrid` The frequency grid over which the spectral model is discretized. Returns ------- covEst : :class:`~openturns.UserDefinedStationaryCovarianceModel` The estimated covariance model that can be used as a :class:`~openturns.UserDefinedStationaryCovarianceModel`. " // --------------------------------------------------------------------- %feature("docstring") OT::StationaryCovarianceModelFactory::getSpectralModelFactory "Accessor to the underlying Welch agorithm. Returns ------- spectralModelFactory : :class:`~openturns.WelchFactory` The Welch algorithm used to estimate the stationary covariance model. " // --------------------------------------------------------------------- %feature("docstring") OT::StationaryCovarianceModelFactory::setSpectralModelFactory "Accessor to the underlying Welch agorithm. Parameters ---------- spectralModelFactory : :class:`~openturns.WelchFactory` The Welch algorithm to use to estimate the stationary covariance model. " openturns-1.9/python/src/StorageManager.i000066400000000000000000000002231307543307100206010ustar00rootroot00000000000000// SWIG file StorageManager.i %{ #include "openturns/StorageManager.hxx" %} %include StorageManager_doc.i %include openturns/StorageManager.hxx openturns-1.9/python/src/StorageManager_doc.i.in000066400000000000000000000074331307543307100220450ustar00rootroot00000000000000%feature("docstring") OT::StorageManager "Define the way OpenTURNS' objects are saved and reloaded. Available constructors: StorageManager(*defaultVersion=1*) Parameters ---------- defaultVersion : positive int Argument interpreted as the name of the object in a user point of view. This name is never used in another way than for user information. This name has no meaning to the platform. Notes ----- A StorageManager object can be used only through its derived class :class:`~openturns.XMLStorageManager`. See also -------- XMLStorageManager" // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::finalize "Do some administrative tasks after saving/reloading. :Available usages: finalize(*ot.SaveAction()*) finalize(*ot.LoadAction()*)" // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::getDefaultStudyVersion "Return the version of the study that the manager can read/write. Returns ------- version : positive int Version of the study that the manager can read/write." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::getStudyVersion "Get the study version. Returns ------- version : positive int Study version." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::setStudyVersion "Set the study version. Parameters ---------- version : positive int Study version." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::getStudy "Get the study bound to the manager. Returns ------- study : :class:`~openturns.Study` Study bound to the manager." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::setStudy "Set the study bound to the manager. Parameters ---------- study : :class:`~openturns.Study` Study bound to the manager." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::initialize "Do some administrative tasks before saving/reloading. :Available usages: initialize(*ot.SaveAction()*) initialize(*ot.LoadAction()*)" // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::isSavedObject "Tell if an object is already saved. Returns ------- isSaved : bool *True* if an object is already saved." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::load "Reload the whole study from the medium. Parameters ---------- study : :class:`~openturns.Study` The study to reload objects from." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::markObjectAsSaved "Tell that an object is saved. Parameters ---------- Id : int Internal identifier of the object." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::read "Read and create the internal representation." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::save "Save the object onto the medium. Parameters ---------- object : :class:`~openturns.PersistentObject` Object to be saved. label : str Name associate with the object to be saved. fromStudy : bool, optional Flag telling if the object was explicitely put in the study or not. By default, it is equal to *False*." // --------------------------------------------------------------------- %feature("docstring") OT::StorageManager::write "Write the internal representation."openturns-1.9/python/src/StratifiedExperiment.i000066400000000000000000000005061307543307100220450ustar00rootroot00000000000000// SWIG file StratifiedExperiment.i %{ #include "openturns/StratifiedExperiment.hxx" %} %include StratifiedExperiment_doc.i %include openturns/StratifiedExperiment.hxx namespace OT { %extend StratifiedExperiment { StratifiedExperiment(const StratifiedExperiment & other) { return new OT::StratifiedExperiment(other); } } } openturns-1.9/python/src/StratifiedExperiment_doc.i.in000066400000000000000000000042561307543307100233050ustar00rootroot00000000000000%feature("docstring") OT::StratifiedExperiment "Base class for stratified experiments. Available constructor: StratifiedExperiment(*center, levels*) Parameters ---------- center, levels : two sequences of float Sequences which have different meanings according to the nature of the stratified experiment: Axial, Composite, Factorial or Box (see corresponding documentation). Notes ----- A StratifiedExperiment object can be used only through its derived classes: - :class:`~openturns.Axial` - :class:`~openturns.Box` - :class:`~openturns.Composite` - :class:`~openturns.Factorial`." // --------------------------------------------------------------------- %feature("docstring") OT::StratifiedExperiment::getCenter "Get the center of the stratified experiment. Returns ------- center : :class:`~openturns.Point` Sequence which has different meanings according to the nature of the stratified experiment: Axial, Composite, Factorial or Box (see corresponding documentation)." // --------------------------------------------------------------------- %feature("docstring") OT::StratifiedExperiment::setCenter "Set the center of the stratified experiment. Parameters ---------- center : sequence of float Sequence which has different meanings according to the nature of the stratified experiment: Axial, Composite, Factorial or Box (see corresponding documentation)." // --------------------------------------------------------------------- %feature("docstring") OT::StratifiedExperiment::getLevels "Get the levels of the stratified experiment. Returns ------- levels : :class:`~openturns.Point` Sequence which has different meanings according to the nature of the stratified experiment: Axial, Composite, Factorial or Box (see corresponding documentation)." // --------------------------------------------------------------------- %feature("docstring") OT::StratifiedExperiment::setLevels "Set the levels of the stratified experiment. Parameters ---------- levels : sequence of float Sequence which has different meanings according to the nature of the stratified experiment: Axial, Composite, Factorial or Box (see corresponding documentation)."openturns-1.9/python/src/StrongMaximumTest.i000066400000000000000000000004551307543307100213630ustar00rootroot00000000000000// SWIG file StrongMaximumTest.i %{ #include "openturns/StrongMaximumTest.hxx" %} %include StrongMaximumTest_doc.i %include openturns/StrongMaximumTest.hxx namespace OT{ %extend StrongMaximumTest { StrongMaximumTest(const StrongMaximumTest & other) { return new OT::StrongMaximumTest(other); } } } openturns-1.9/python/src/StrongMaximumTest_doc.i.in000066400000000000000000000214501307543307100226130ustar00rootroot00000000000000%feature("docstring") OT::StrongMaximumTest "Strong Maximum Test. Available constructors: StrongMaximumTest(*event, designPoint, importanceLevel, accuracyLevel, confidenceLevel*) StrongMaximumTest(*event, designPoint, importanceLevel, accuracyLevel, pointNumber*) Parameters ---------- event : :class:`~openturns.StandardEvent` Failure event :math:`\cD_f` defining in the standard space (U-space). designPoint : sequence of float Design point in the standard space resulting from the optimization algorithm. importanceLevel : float, :math:`0 < \varepsilon < 1` Importance level. accuracyLevel : float, :math:`\tau > 0` Accuracy level. It is recommanded to take :math:`\tau \leq 4`. confidenceLevel : positive float, :math:`0 < (1-q) < 1` Confidence level. pointNumber : int, :math:`N > 0` Number of points used to perform the Strong Maximum Test, evaluated by the limit state function. Notes ----- The Strong Maximum Test helps to evaluate the quality of the design point :math:`P^*` resulting from the optimization algorithm launched for example by the :class:`~openturns.Analytical` class or its derived classes :class:`~openturns.FORM` and :class:`~openturns.SORM`. It checks whether the design point computed is : - the *true* design point, which means a global maximum point, - a *strong* design point, which means that there is no other local maximum located on the event boundary and which likelihood is slightly inferior to the design point one. The Strong Maximum Test will sample the sphere centered on the origin of the standard space and of radius : :math:`R = \beta_{HL} (1 + \tau \delta_{\varepsilon})` with :math:`\tau > 0`, :math:`\delta_{\varepsilon}=\sqrt{1 - 2 \frac{ln(\varepsilon)}{\beta_{HL}^2}} - 1` and :math:`\beta_{HL}` the Hasofer-Lind reliability index. The number :math:`N` of the simulations sampling the sphere of radius :math:`R` is determined to ensure that the test detects with a probability greater than :math:`(1-q)` any point of :math:`\cD_f` outside the design point vicinity which contribution to :math:`P_f` is not negligeable (i.e. which density value in the U-space is greater than :math:`\varepsilon` times the density value at the design point). See also -------- Analytical, SORM, FORM, SORMResult, FORMResult Examples -------- >>> import openturns as ot >>> myFunction = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> myDistribution = ot.Normal([50.0, 1.0, 10.0, 5.0], [1.0]*4, ot.IdentityMatrix(4)) >>> vect = ot.RandomVector(myDistribution) >>> output = ot.RandomVector(myFunction, vect) >>> myEvent = ot.Event(output, ot.Less(), -3.0) >>> # FORM analyse to get the design point >>> myAlgo = ot.FORM(ot.AbdoRackwitz(), myEvent, [50.0, 1.0, 10.0, 5.0]) >>> myAlgo.run() >>> FORMresult = myAlgo.getResult() >>> designPoint = FORMresult.getStandardSpaceDesignPoint() >>> # Strong Max Test >>> myStandardEvent = ot.StandardEvent(myEvent) >>> myTest = ot.StrongMaximumTest(myStandardEvent, designPoint, 0.15, 3, 0.99) >>> myTest.run()" // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getAccuracyLevel "Accessor to the accuracy level. Returns ------- accuracy : positive float Accuracy level :math:`\tau`." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getConfidenceLevel "Accessor to the confidence level. Returns ------- level : positive float Confidence level :math:`(1-q)`." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getDeltaEpsilon "Accessor to the parameter :math:`\delta_{\varepsilon}`. Returns ------- delta_epsilon : float :math:`\delta_{\varepsilon} = \sqrt{1 - 2 \frac{ln(\varepsilon)}{\beta^2}} - 1`." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getDesignPointVicinity "Accessor to the design point vinicity. Returns ------- vicinity : float, :math:`v > 0` Design point vinicity :math:`v = \frac{1} {1 + \tau \delta_{\varepsilon}}`." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getEvent "Accessor to the event in the standard space. Returns ------- event : :class:`~openturns.StandardEvent` Failure event :math:`\cD_f` in the standard space on which is based the Strong Maximum Test." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getFarDesignPointVerifyingEventPoints "Accessor to the points verifying the event and far of the design point. Returns ------- points : :class:`~openturns.Sample` The points of the discretized sphere which are out of the vicinity of the standard design point and which verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getFarDesignPointVerifyingEventValues "Accessor to values of the limit state function. Returns ------- values : :class:`~openturns.Sample` The values of the limit state function on the points of the discretized sphere which are out of the vicinity of the standard design point and which verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getFarDesignPointViolatingEventPoints "Accessor to the points not verifying the event and far of the design point. Returns ------- points : :class:`~openturns.Sample` The points of the discretized sphere which are out of the vicinity of the standard design point and which don't verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getFarDesignPointViolatingEventValues "Accessor to values of the limit state function. Returns ------- values : :class:`~openturns.Sample` The values of the limit state function on the points of the discretized sphere which are out of the vicinity of the standard design point and which don't verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getImportanceLevel "Accessor to the importance level. Returns ------- level : float Importance level :math:`\varepsilon`." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getNearDesignPointVerifyingEventPoints "Accessor to the points verifying the event and near of the design point. Returns ------- points : :class:`~openturns.Sample` The points of the discretized sphere which are inside the vicinity of the standard design point and which verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getNearDesignPointVerifyingEventValues "Accessor to values of the limit state function. Returns ------- values : :class:`~openturns.Sample` The values of the limit state function on the points of the discretized sphere which are inside the vicinity of the standard design point and which verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getNearDesignPointViolatingEventPoints "Accessor to the points not verifying the event and near of the design point. Returns ------- point : :class:`~openturns.Sample` The points of the discretized sphere which are out of the vicinity of the standard design point and which don't verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getNearDesignPointViolatingEventValues "Accessor to values of the limit state function. Returns ------- values : :class:`~openturns.Sample` The values of the limit state function on the points of the discretized sphere which are inside the vicinity of the standard design point and which don't verify the event." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getPointNumber "Accessor to the number of points. Returns ------- number : int, :math:`N > 0` Number of points used to perform the Strong Maximum Test, evaluated by the limit state function." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::getStandardSpaceDesignPoint "Accessor to the design point in the standard space. Returns ------- point : :class:`~openturns.Point` Design point in the standard space." // --------------------------------------------------------------------- %feature("docstring") OT::StrongMaximumTest::run "Perform the Strong Maximum Test." openturns-1.9/python/src/Student.i000066400000000000000000000003361307543307100173350ustar00rootroot00000000000000// SWIG file Student.i %{ #include "openturns/Student.hxx" %} %include Student_doc.i %include openturns/Student.hxx namespace OT { %extend Student { Student(const Student & other) { return new OT::Student(other); } } } openturns-1.9/python/src/StudentFactory.i000066400000000000000000000004261307543307100206650ustar00rootroot00000000000000// SWIG file StudentFactory.i %{ #include "openturns/StudentFactory.hxx" %} %include StudentFactory_doc.i %include openturns/StudentFactory.hxx namespace OT { %extend StudentFactory { StudentFactory(const StudentFactory & other) { return new OT::StudentFactory(other); } } } openturns-1.9/python/src/StudentFactory_doc.i.in000066400000000000000000000006021307543307100221130ustar00rootroot00000000000000%feature("docstring") OT::StudentFactory "Student factory. Available constructor: StudentFactory() The parameters are estimated by method of moments: .. math:: :nowrap: \begin{eqnarray*} \displaystyle \Hat{\nu} = 2 + \frac{2}{(\Hat{\sigma}_x)^2 - 1}\\ \displaystyle \Hat{\mu} = \Hat{\mu}_x \end{eqnarray*} See also -------- DistributionFactory, Student"openturns-1.9/python/src/Student_doc.i.in000066400000000000000000000064231307543307100205720ustar00rootroot00000000000000%feature("docstring") OT::Student "Student distribution. Available constructors: Student(*nu=3.0, d=1*) Student(*nu, mu, sigma=1.0*) Student(*nu, mu, sigma, R*) Parameters ---------- d : int, :math:`d \geq 1` Dimension. nu : float, :math:`\nu > 0` Generalised number degrees of freedom. mu : float :math:`\mu`, sequence of float, :math:`\vect{\mu} \in \Rset^d`, optional If :math:`\nu > 1`: mean. If :math:`\nu = 1`: location parameter. Default is :math:`\vect{\mu} = (0, \dots, 0) \in \Rset^d`. sigma : float :math:`\sigma`, sequence of float, :math:`\vect{\sigma} \in \Rset^{*d}_+`, optional Scale parameter. Default is :math:`\vect{\sigma} = (1, \dots, 1) \in \Rset^d`. R : :class:`~openturns.CorrelationMatrix` :math:`\mat{R} \in \Rset^d \times \Rset^d`, optional If :math:`\nu > 2`: correlation matrix. If :math:`\nu \leq 2`: generalized correlation matrix. Default is :math:`\mat{R} = I_d \in \Rset^d \times \Rset^d`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\Gamma \left(\frac{\nu + d}{2}\right)} {(\pi \nu) ^ {\frac{d}{2}} \Gamma \left(\frac{\nu}{2}\right)} \frac{\left| \mathrm{det}(\mat{R}) \right| ^ {-1/2}} {\prod_{k = 1} ^ d \sigma_k} \left(1 + \frac{\vect{z} ^ t \mat{R} ^ {-1} \vect{z}}{\nu} \right) ^ {-\frac{\nu + d}{2}}, \quad x \in \Rset with :math:`\nu > 0, d \geq 1, \mat{R} \in \Rset^d \times \Rset^d, \sigma_k > 0, k=1, \dots, d` . where :math:`\vect{z}=\mat{\Delta}^{-1}\left(\vect{x}-\vect{\mu}\right)`, :math:`\mat{\Delta} = \mat{\mathrm{diag}}(\vect{\sigma})` and :math:`\Gamma` denotes Euler's Gamma function :class:`~openturns.SpecFunc_Gamma`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \vect{\Expect{X}} & = & \vect{\mu} \quad \text{ if }\nu>1\\ \mat{\Cov{X}} & = & \displaystyle \frac{\nu}{\nu-2} \Tr{\mat{\Delta}}\,\mat{R}\,\mat{\Delta} \quad \text{ if }\nu>2 \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Student(5.0, -0.5, 2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Student::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean. Only defined when the dimension is 1 (else, use the :func:`getMean()` method inherited from the EllipticalDistribution class)." // --------------------------------------------------------------------- %feature("docstring") OT::Student::getNu "Accessor to the distribution's generalised number degrees of freedom. Returns ------- nu : float Generalised number degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::Student::setMu "Accessor to the distribution's mean. Parameters ---------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Student::setNu "Accessor to the distribution's generalised number degrees of freedom. Parameters ---------- nu : float, :math:`\nu > 0` Generalised number degrees of freedom." openturns-1.9/python/src/Study.i000066400000000000000000000003731307543307100170200ustar00rootroot00000000000000// SWIG file Study.i %{ #include "openturns/Study.hxx" %} %ignore OT::Study::operator=(const Study &); %include Study_doc.i %include openturns/Study.hxx namespace OT{ %extend Study { Study(const Study & other) { return new OT::Study(other); } } } openturns-1.9/python/src/Study_doc.i.in000066400000000000000000000134201307543307100202470ustar00rootroot00000000000000%feature("docstring") OT::Study "Study. The study allows the user to save all its data to a structure looking like a map. The data are copied verbatim to the study. This is not a link, so future modification of the original won't affect the data saved in the study. To update the data saved in the study, the user has to explicitely save it again. Study allows the user to retrieve previously saved objects either by their name if a name was defined for the object or by their Id. Examples -------- >>> import openturns as ot Create a Study object: >>> myStudy = ot.Study() >>> myStudy.setStorageManager(ot.XMLStorageManager('myStudy.xml')) Add PersistentObjects to the study: >>> # a Point: >>> point = ot.Point(3, 0.0) >>> point[0] = 10.0 >>> point[1] = 11.0 >>> point[2] = 12.0 >>> myStudy.add('point', point) >>> # a Simulation::Result: >>> simulationResult = ot.SimulationResult(ot.Event(), 0.5, 0.01, 150, 4) >>> myStudy.add('simulationResult', simulationResult) Get objects from the study: >>> print(myStudy.getObject('point')) [10,11,12] Save the Study: >>> myStudy.save() Create a new Study object: >>> myStudy = ot.Study() >>> myStudy.setStorageManager(ot.XMLStorageManager('myStudy.xml')) Load data from the study: >>> myStudy.load() Create data from the ones stored in the study: >>> # a Point: >>> otherPoint = ot.Point() >>> myStudy.fillObject('point', otherPoint) >>> # a Simulation::Result: >>> otherSimulationResult = ot.SimulationResult() >>> myStudy.fillObject('simulationResult', otherSimulationResult) Get information from the study: >>> myStudy.printLabels() 'point;simulationResult' Remove data: >>> myStudy.hasObject(otherSimulationResult.getId()) True >>> myStudy.remove(otherSimulationResult) >>> myStudy.hasObject('simulationResult') False" // --------------------------------------------------------------------- %feature("docstring") OT::Study::add "Add an object to the study. :Available usages: add(*object*) add(*name, object, force=False*) Parameters ---------- object : :class:`~openturns.InterfaceObject`, :class:`~openturns.PersistentObject` Object to add in the study. name : str Name to associate with the object. force : bool If *force=True* and *name* is already defined in the study, the previous object associated with this name is removed. A error message is emitted otherwise." // --------------------------------------------------------------------- %feature("docstring") OT::Study::fillObject "Fill an object with one got from study. :Available usages: fillObject(*name, object*) fillObject(*id, object*) Parameters ---------- object : :class:`~openturns.InterfaceObject`, :class:`~openturns.PersistentObject` An object to be refilled (may be empty, i.e. default constructed). name : str Name of the object stored in the study. id : int Internal identifier of the object stored in the study." // --------------------------------------------------------------------- %feature("docstring") OT::Study::fillObjectByName "Fill an object with one got from study. :Available usages: fillObjectByName(*object, name*) fillObjectByName(*id, object*) Parameters ---------- object : :class:`~openturns.InterfaceObject`, :class:`~openturns.PersistentObject` An object to be refilled (may be empty, i.e. default constructed). name : str Name of the object stored in the study. id : int Internal identifier of the object stored in the study." // --------------------------------------------------------------------- %feature("docstring") OT::Study::getObject "Get object from the study. :Available usages: getObject(*id*) getObject(*name*) Parameters ---------- name : str Name of the object stored in the study. id : int Internal identifier of the object stored in the study. Returns ------- object : :class:`~openturns.PersistentObject` The object saved in the study." // --------------------------------------------------------------------- %feature("docstring") OT::Study::getStorageManager "Get the storage manager used by the study. Parameters ---------- manager : :class:`~openturns.StorageManager` Storage manager used by the study to save and reload data." // --------------------------------------------------------------------- %feature("docstring") OT::Study::setStorageManager "Set the storage manager used by the study. Returns ------- manager : :class:`~openturns.StorageManager` Storage manager used by the study to save and reload data." // --------------------------------------------------------------------- %feature("docstring") OT::Study::hasObject "Query if object is stored in study. :Available usages: hasObject(*id*) hasObject(*name*) Parameters ---------- name : str Name of the object stored in the study. id : int Internal identifier of the object stored in the study. Returns ------- hasObject : bool *True* if the object is stored in the study." // --------------------------------------------------------------------- %feature("docstring") OT::Study::load "Reload the study from the storage manager." // --------------------------------------------------------------------- %feature("docstring") OT::Study::printLabels "Print all the names of the objects stored in the study. Returns ------- names : str Names of the objects stored in the study." // --------------------------------------------------------------------- %feature("docstring") OT::Study::remove "Remove an object from the study. :Available usages: remove(*object*) remove(*name*) Parameters ---------- object : :class:`~openturns.InterfaceObject` An object to be removed. name : str Name of the object to be removed." // --------------------------------------------------------------------- %feature("docstring") OT::Study::save "Save the study through the storage manager." openturns-1.9/python/src/SubsetSampling.i000066400000000000000000000004051307543307100206440ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SubsetSampling.hxx" %} %include SubsetSampling_doc.i %include openturns/SubsetSampling.hxx namespace OT { %extend SubsetSampling { SubsetSampling(const SubsetSampling & other) { return new OT::SubsetSampling(other); } } } openturns-1.9/python/src/SubsetSamplingResult.i000066400000000000000000000004571307543307100220520ustar00rootroot00000000000000// SWIG file %{ #include "openturns/SubsetSamplingResult.hxx" %} %include SubsetSamplingResult_doc.i %include openturns/SubsetSamplingResult.hxx namespace OT { %extend SubsetSamplingResult { SubsetSamplingResult(const SubsetSamplingResult & other) { return new OT::SubsetSamplingResult(other); } } } openturns-1.9/python/src/SubsetSamplingResult_doc.i.in000066400000000000000000000001741307543307100233000ustar00rootroot00000000000000%feature("docstring") OT::SubsetSamplingResult "Subset sampling result. See also -------- SubsetSampling, SimulationResult"openturns-1.9/python/src/SubsetSampling_doc.i.in000066400000000000000000000125371307543307100221070ustar00rootroot00000000000000%feature("docstring") OT::SubsetSampling "Subset simulation. Parameters ---------- event : :class:`~openturns.Event` Event we are computing the probability of. proposalRange : float, optional Proposal range length targetProbability : float, optional Value of :math:`P(F_i|F_{i-1})` between successive steps Notes ----- The goal is to estimate the following probability .. math:: P_f = \int_{\mathcal D_f} f_{\uX}(\ux)\di{\ux}\\ = \int_{\mathbb R^{n_X}} \mathbf{1}_{\{g(\ux,\underline{d}) \:\leq 0\: \}}f_{\uX}(\ux)\di{\ux}\\ = \Prob {\{g(\uX,\underline{d}) \leq 0\}} The idea of the subset simulation method [Au2001]_ is to replace simulating a rare failure event in the original probability space by a sequence of simulations of more frequent conditional events :math:`F_i` .. math:: F_1 \supset F_2 \supset \dots \supset F_m = F The original probability estimate rewrites .. math:: P_f = P(F_m) = P(\bigcap \limits_{i=1}^m F_i) = P(F_1) \prod_{i=2}^m P(F_i|F_{i-1}) And each conditional subset failure region is chosen by setting the threshold :math:`g_i` so that :math:`P(F_i|F_{i-1})` leads to a conditional failure probability of order :math:`0.1` .. math:: F_i =\Prob {\{g(\uX,\underline{d}) \leq g_i\}} The conditional samples are generated by the means of Markov Chains, using the Metropolis Hastings algorithm. :math:`N` being the number of simulations per subset, and :math:`p_{0i}` the conditional probability of each subset event, and :math:`\gamma_i` the autocorrelation between Markov chain samples. .. math:: \delta^2 = \sum_{i=1}^m \delta^2_i = \sum_{i=1}^m (1+\gamma_i) \frac{1-p_{0i}}{p_{0i}N} The first event :math:`F_1` not being conditional, :math:`\delta^2_1` expresses as the classic Monte Carlo c.o.v. See also -------- Simulation" // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getCoefficientOfVariationPerStep "Coefficient of variation per step accessor. Returns ------- coef : `~openturns.Point` Coefficient of variation at each subset step." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::setConditionalProbability "Conditional probability accessor. Value of :math:`P(F_i|F_{i-1})` between successive steps. Parameters ---------- prob : float Conditional probability value." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getConditionalProbability "Conditional probability accessor. Value of :math:`P(F_i|F_{i-1})` between successive steps. Returns ------- prob : float Conditional probability value." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::setKeepEventSample "Sample storage accessor. Parameters ---------- prob : bool Whether to keep the event samples." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getEventInputSample "Input sample accessor. Returns ------- inputSample : `~openturns.Sample` Input sample." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getEventOutputSample "Output sample accessor. Returns ------- outputSample : `~openturns.Sample` Ouput sample." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getThresholdPerStep "Threshold accessor. Returns ------- threshold : `~openturns.Point` Threshold values." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getGammaPerStep "Autocorrelation accessor. Returns ------- prob : `~openturns.Point` Autocorrelation values." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getProbabilityEstimatePerStep "Probability estimate accessor. Returns ------- prob : `~openturns.Point` Probability estimate values." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getNumberOfSteps "Subset steps number accesor. Returns ------- n : int Number of subset steps." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::setProposalRange "Proposal range length accessor. Parameters ---------- range : float Range length." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::getProposalRange "Proposal range length accessor. Returns ------- range : float Range length." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::setBetaMin "Hypersphere radius accessor. Parameters ---------- beta : float Radius value of the exclusion hypershere when the conditional simulation is enabled." // --------------------------------------------------------------------------- %feature("docstring") OT::SubsetSampling::setISubset "Conditonal simulation flag accessor. Parameters ---------- isubset : bool Whether to enable conditional simulation for the first step of the simulation." openturns-1.9/python/src/SymbolicEvaluation.i000066400000000000000000000004621307543307100215200ustar00rootroot00000000000000// SWIG file SymbolicEvaluation.i OTAutodoc(SymbolicEvaluation) %{ #include "openturns/SymbolicEvaluation.hxx" %} %include openturns/SymbolicEvaluation.hxx namespace OT { %extend SymbolicEvaluation { SymbolicEvaluation(const SymbolicEvaluation & other) { return new OT::SymbolicEvaluation(other); } } } openturns-1.9/python/src/SymbolicFunction.i000066400000000000000000000004461307543307100212000ustar00rootroot00000000000000// SWIG file SymbolicFunction.i %{ #include "openturns/SymbolicFunction.hxx" %} %include SymbolicFunction_doc.i %include openturns/SymbolicFunction.hxx namespace OT { %extend SymbolicFunction { SymbolicFunction(const SymbolicFunction & other) { return new OT::SymbolicFunction(other); } } } openturns-1.9/python/src/SymbolicFunction_doc.i.in000066400000000000000000000052571307543307100224370ustar00rootroot00000000000000%feature("docstring") OT::SymbolicFunction "Symbolic function. Available constructor: SymbolicFunction(*inputs, formulas*) Parameters ---------- inputs : sequence of str, or str List of input variables names of the function. formulas : sequence of str, or str List of analytical formulas between the inputs and the outputs. The function is defined by *ouputs = formulas(inputs)*. Available functions: - sin - cos - tan - asin - acos - atan - sinh - cosh - tanh - asinh - acosh - atanh - log2 - log10 - log - ln - lngamma - gamma - exp - erf - erfc - sqrt - cbrt - besselJ0 - besselJ1 - besselY0 - besselY1 - sign - rint - abs - min - max - sum - avg - floor - ceil - trunc - round Available operators: - = (assignment) - && (logical and) - || (logical or) - <= (less or equal) - >= (greater or equal) - != (not equal) - == (equal) - > (greater than) - < (less than) - \+ (addition) - \- (subtraction) - \* (multiplication) - / (division) - ^ (raise x to the power of y) Available constants: - _e (Euler's constant) - _pi (Pi) Examples -------- >>> import openturns as ot >>> f = ot.SymbolicFunction(['x0', 'x1'], ['x0 + x1', 'x0 - x1']) >>> print(f([1, 2])) [3,-1]" // --------------------------------------------------------------------- %feature("docstring") OT::SymbolicFunction::GetValidFunctions "Return the list of valid functions. Returns ------- list_functions : :class:`~openturns.Description` List of the functions we can use within OpenTURNS. Examples -------- >>> import openturns as ot >>> print(ot.SymbolicFunction.GetValidFunctions()[0]) sin(arg) -> sine function" // --------------------------------------------------------------------- %feature("docstring") OT::SymbolicFunction::GetValidConstants "Return the list of valid constants. Returns ------- list_constants : :class:`~openturns.Description` List of the constants we can use within OpenTURNS. Examples -------- >>> import openturns as ot >>> print(ot.SymbolicFunction.GetValidConstants()[0]) _e -> Euler's constant (2.71828...)" // --------------------------------------------------------------------- %feature("docstring") OT::SymbolicFunction::GetValidOperators "Return the list of valid operators. Returns ------- list_operators : :class:`~openturns.Description` List of the operators we can use within OpenTURNS. Examples -------- >>> import openturns as ot >>> print(ot.SymbolicFunction.GetValidOperators()[0]) = -> assignement, can only be applied to variable names (priority -1)" openturns-1.9/python/src/SymbolicGradient.i000066400000000000000000000004421307543307100211440ustar00rootroot00000000000000// SWIG file SymbolicGradient.i OTAutodoc(SymbolicGradient) %{ #include "openturns/SymbolicGradient.hxx" %} %include openturns/SymbolicGradient.hxx namespace OT { %extend SymbolicGradient { SymbolicGradient(const SymbolicGradient & other) { return new OT::SymbolicGradient(other); } } } openturns-1.9/python/src/SymbolicHessian.i000066400000000000000000000004321307543307100210000ustar00rootroot00000000000000// SWIG file SymbolicHessian.i OTAutodoc(SymbolicHessian) %{ #include "openturns/SymbolicHessian.hxx" %} %include openturns/SymbolicHessian.hxx namespace OT { %extend SymbolicHessian { SymbolicHessian(const SymbolicHessian & other) { return new OT::SymbolicHessian(other); } } } openturns-1.9/python/src/SymmetricMatrix.i000066400000000000000000000026711307543307100210540ustar00rootroot00000000000000// SWIG file SymmetricMatrix.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::SquareMatrix & v ($*ltype temp) %{ temp = OT::SquareMatrix(); $1 = &temp; %} %typemap(argout) OT::SquareMatrix & v %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::SquareMatrix(*$1), SWIG_TypeQuery("OT::SquareMatrix *"), SWIG_POINTER_OWN | 0 )); %} OT::SymmetricMatrix OT::SymmetricMatrix::computeEV(OT::SquareMatrix & v, const Bool keepIntact = true); %{ #include "openturns/SymmetricMatrix.hxx" %} %include SymmetricMatrix_doc.i %apply const ScalarCollection & { const OT::SymmetricMatrix::ScalarCollection & }; %include openturns/SymmetricMatrix.hxx %pythoncode %{ def SymmetricMatrix___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.checkSymmetry() return super(SymmetricMatrix, self).__getattribute__(name) SymmetricMatrix.__getattribute__ = SymmetricMatrix___getattribute__ %} namespace OT { %extend SymmetricMatrix { SymmetricMatrix(PyObject * pyObj) { return new OT::SymmetricMatrix( OT::convert(pyObj) ); } OTMatrixAccessors() SymmetricMatrix __rmul__(Scalar s) { return s * (*self); } Matrix __rmul__(const Matrix & m) { return m * (*self); } #if SWIG_VERSION < 0x030011 SymmetricMatrix __truediv__(Scalar s) { return (*self) / s; } #endif } // SymmetricMatrix } // OT openturns-1.9/python/src/SymmetricMatrix_doc.i.in000066400000000000000000000061341307543307100223040ustar00rootroot00000000000000%feature("docstring") OT::SymmetricMatrix "Real symmetric matrix. Parameters ---------- size : int, :math:`n > 0`, optional Matrix size. Default is 1. values : sequence of float with size :math:`n^2`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. Default creates a zero matrix. Raises ------ TypeError : If the matrix is not symmetric. Examples -------- Create a matrix >>> import openturns as ot >>> M = ot.SymmetricMatrix(2, [0.0, 2.0, 2.0, 1.0]) >>> print(M) [[ 0 2 ] [ 2 1 ]] Get or set terms >>> print(M[0, 0]) 0.0 >>> M[0, 0] = 1.0 >>> print(M[0, 0]) 1.0 >>> print(M[:, 0]) [[ 1 ] [ 2 ]] Create an openturns matrix from a **symmetric** numpy 2d-array (or matrix, or 2d-list)... >>> import numpy as np >>> np_2d_array = np.array([[1.0, 2.0], [2.0, 4.0]]) >>> ot_matrix = ot.SymmetricMatrix(np_2d_array) and back >>> np_matrix = np.matrix(ot_matrix)" // --------------------------------------------------------------------- %feature("docstring") OT::SymmetricMatrix::computeEigenValues "Compute eigen values. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- eigenvalues : :class:`~openturns.Point` Eigen values. See Also -------- computeEV Examples -------- >>> import openturns as ot >>> M = ot.SymmetricMatrix([[1.0, 2.0], [2.0, -4.0]]) >>> print(M.computeEigenValues()) [-4.70156,1.70156]" // --------------------------------------------------------------------- %feature("docstring") OT::SymmetricMatrix::computeEV "Compute the eigen values decomposition (EVD). The eigen values decomposition of a square matrix :math:`\mat{M}` with size :math:`n` reads: .. math:: \mat{M} = \mat{\Phi} \mat{\Lambda} \Tr{\mat{\Phi}} where :math:`\mat{\Lambda}` is an :math:`n \times n` diagonal matrix and :math:`\mat{\Phi}` is an :math:`n \times n` orthogonal matrix. Parameters ---------- keep_intact : bool, optional A flag telling whether the present matrix can be overwritten or not. Default is *True* and leaves the present matrix unchanged. Returns ------- eigen_values : :class:`~openturns.Point` The vector of eigen values with size :math:`n` that form the diagonal of the :math:`n \times n` matrix :math:`\mat{\Lambda}` of the EVD. Phi : :class:`~openturns.SquareComplexMatrix` The left matrix of the EVD. Notes ----- This uses LAPACK'S `DSYEV `_. Examples -------- >>> import openturns as ot >>> import numpy as np >>> M = ot.SymmetricMatrix([[1.0, 2.0], [2.0, -4.0]]) >>> eigen_values, Phi = M.computeEV() >>> Lambda = ot.SquareMatrix(M.getDimension()) >>> for i in range(eigen_values.getSize()): ... Lambda[i, i] = eigen_values[i] >>> np.testing.assert_array_almost_equal(Phi * Lambda * Phi.transpose(), M)" // --------------------------------------------------------------------- %feature("docstring") OT::SymmetricMatrix::checkSymmetry "Check if the internal representation is really symmetric."openturns-1.9/python/src/SymmetricTensor.i000066400000000000000000000016021307543307100210530ustar00rootroot00000000000000// SWIG file SymmetricTensor.i %{ #include "openturns/SymmetricTensor.hxx" %} %include SymmetricTensor_doc.i %apply const ScalarCollection & { const OT::SymmetricTensor::ScalarCollection & }; %include openturns/SymmetricTensor.hxx %pythoncode %{ def SymmetricTensor___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.checkSymmetry() return super(SymmetricTensor, self).__getattribute__(name) SymmetricTensor.__getattribute__ = SymmetricTensor___getattribute__ %} namespace OT { %extend SymmetricTensor { SymmetricTensor(const SymmetricTensor & other) { return new OT::SymmetricTensor(other); } SymmetricTensor(PyObject * pyObj) { return new OT::SymmetricTensor( OT::convert(pyObj) ); } OTTensorAccessors(SymmetricTensor, Scalar, _PyFloat_) } // SymmetricTensor } // OT openturns-1.9/python/src/SymmetricTensor_doc.i.in000066400000000000000000000027021307543307100223070ustar00rootroot00000000000000%feature("docstring") OT::SymmetricTensor "Symmetric tensor. Available constructors: SymmetricTensor(*n_rows, n_sheets*) SymmetricTensor(*n_rows, n_sheets, values*) SymmetricTensor(*sequence*) Parameters ---------- n_rows : int, :math:`n_r > 0` Number of rows and columns. n_sheets : int, :math:`n_s > 0` Number of sheets. values : sequence of float with size :math:`n_r \times n_r \times n_s`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. If not mentioned, a zero tensor is created. sequence : sequence of float Values. Examples -------- >>> import openturns as ot >>> print(ot.SymmetricTensor(2, 2, [0, 1])) sheet #0 [[ 0 1 ] [ 1 0 ]] sheet #1 [[ 0 0 ] [ 0 0 ]] >>> T = ot.SymmetricTensor(2, 3, range(2*2*3)) >>> print(T) sheet #0 [[ 0 1 ] [ 1 3 ]] sheet #1 [[ 4 5 ] [ 5 7 ]] sheet #2 [[ 8 9 ] [ 9 11 ]] Get or set terms: >>> print(T[0, 0, 0]) 0.0 >>> T[0, 0, 0] = 1.0 >>> print(T[0, 0, 0]) 1.0 Create an openturns tensor from a sequence: >>> T = ot.SymmetricTensor([[[1.0, 2.0, 3.0], [7.0, 8.0, 9.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]]) >>> print(T) sheet #0 [[ 1 7 ] [ 7 10 ]] sheet #1 [[ 2 8 ] [ 8 11 ]] sheet #2 [[ 3 9 ] [ 9 12 ]]" // --------------------------------------------------------------------- %feature("docstring") OT::SymmetricTensor::checkSymmetry "Check if the internal representation is really symmetric."openturns-1.9/python/src/TBB.i000066400000000000000000000002531307543307100163140ustar00rootroot00000000000000// SWIG file TBB.i %{ #include "openturns/TBB.hxx" %} %include TBB_doc.i %ignore OT::TBB::Split; %ignore OT::TBB_init; %nodefaultctor TBB; %include openturns/TBB.hxx openturns-1.9/python/src/TBB_doc.i.in000066400000000000000000000012451307543307100175500ustar00rootroot00000000000000%feature("docstring") OT::TBB "Threading parameters." // --------------------------------------------------------------------- %feature("docstring") OT::TBB::IsAvailable "Ask whether threading support is available. Returns ------- available : bool Whether threading support is available." // --------------------------------------------------------------------- %feature("docstring") OT::TBB::Enable "Enable threading. The number of threads is the value associated to the `parallel-threads` key in :class:`~openturns.ResourceMap`." // --------------------------------------------------------------------- %feature("docstring") OT::TBB::Disable "Disable threading." openturns-1.9/python/src/TNC.i000066400000000000000000000002751307543307100163350ustar00rootroot00000000000000// SWIG file TNC.i %{ #include "openturns/TNC.hxx" %} %include TNC_doc.i %include openturns/TNC.hxx namespace OT{ %extend TNC { TNC(const TNC & other) { return new OT::TNC(other); } } } openturns-1.9/python/src/TNC_doc.i.in000066400000000000000000000144121307543307100175650ustar00rootroot00000000000000%feature("docstring") OT::TNC "Truncated Newton Constrained solver. Available constructors: TNC(*problem*) TNC(*problem, scale, offset, maxCGit, eta, stepmx, accuracy, fmin, rescale*) Parameters ---------- problem : :class:`~openturns.OptimizationProblem` Optimization problem to solve. specificParameters : :class:`~openturns.TNCSpecificParameters` Parameters for this solver. scale : sequence of float Scaling factors to apply to each variables offset : sequence of float Constant to substract to each variable maxCGit : int Maximum number of hessian*vector evaluation per main iteration eta : float Severity of the line search. stepmx : float Maximum step for the line search. may be increased during call accuracy : float Relative precision for finite difference calculations fmin : float Minimum function value estimate. rescale : float f scaling factor (in log10) used to trigger f value rescaling Notes ----- Non-linear optimizer supporting bound constraints. This solver does not implement the progress callback. See also -------- AbdoRackwitz, SQP, Cobyla, NLopt Examples -------- >>> import openturns as ot >>> model = ot.SymbolicFunction(['E', 'F', 'L', 'I'], ['-F*L^3/(3*E*I)']) >>> bounds = ot.Interval([1.0]*4, [2.0]*4) >>> problem = ot.OptimizationProblem(model, ot.Function(), ot.Function(), bounds) >>> algo = ot.TNC(problem) >>> algo.setStartingPoint([0.0] * 4) >>> algo.run() >>> result = algo.getResult()" // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getScale "Accessor to scale parameter. Returns ------- scale : :class:`~openturns.Point` Scaling factors to apply to each variable if empty, the factors are min-max for interval bounded variables and 1+|x] for the others." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setScale "Accessor to scale parameter. Parameters ---------- scale : sequence of float Scaling factors to apply to each variable if empty, the factors are min-max for interval bounded variables and 1+|x] for the others." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getOffset "Accessor to offset parameter. Returns ------- offset : :class:`~openturns.Point` Constant to substract to each variable if empty, the constant are (min-max)/2 for interval bounded variables and x for the others." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setOffset "Accessor to offset parameter. Parameters ---------- offset : sequence of float Constant to substract to each variable if empty, the constant are (min-max)/2 for interval bounded variables and x for the others." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getMaxCGit "Accessor to maxCGit parameter. Returns ------- maxCGit : int Maximum number of hessian*vector evaluation per main iteration if maxCGit = 0, the direction chosen is -gradient if maxCGit < 0, maxCGit is set to max(1,min(50,n/2))." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setMaxCGit "Accessor to maxCGit parameter. Parameters ---------- maxCGit : int Maximum number of hessian*vector evaluation per main iteration if maxCGit = 0, the direction chosen is -gradient if maxCGit < 0, maxCGit is set to max(1,min(50,n/2))." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getEta "Accessor to eta parameter. Returns ------- eta : float Severity of the line search. if < 0 or > 1, set to 0.25." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setEta "Accessor to eta parameter. Parameters ---------- eta : float Severity of the line search. if < 0 or > 1, set to 0.25." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getStepmx "Accessor to stepmx parameter. Returns ------- stepmx : float Maximum step for the line search. may be increased during call if too small, will be set to 10.0." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setStepmx "Accessor to stepmx parameter. Parameters ---------- stepmx : float Maximum step for the line search. may be increased during call if too small, will be set to 10.0." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getAccuracy "Accessor to accuracy parameter. Returns ------- accuracy : float Relative precision for finite difference calculations if <= machine_precision, set to sqrt(machine_precision)." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setAccuracy "Accessor to accuracy parameter. Parameters ---------- accuracy : float Relative precision for finite difference calculations if <= machine_precision, set to sqrt(machine_precision)." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getFmin "Accessor to fmin parameter. Returns ------- fmin : float Minimum function value estimate." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setFmin "Accessor to fmin parameter. Parameters ---------- fmin : float Minimum function value estimate." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::getRescale "Accessor to rescale parameter. Returns ------- rescale : float f scaling factor (in log10) used to trigger f value rescaling if 0, rescale at each iteration if a big value, never rescale if < 0, rescale is set to 1.3." // --------------------------------------------------------------------- %feature("docstring") OT::TNC::setRescale "Accessor to rescale parameter. Parameters ---------- rescale : float f scaling factor (in log10) used to trigger f value rescaling if 0, rescale at each iteration if a big value, never rescale if < 0, rescale is set to 1.3." openturns-1.9/python/src/TTY.i000066400000000000000000000001471307543307100163670ustar00rootroot00000000000000// SWIG file TTY.i %{ #include "openturns/TTY.hxx" %} %include TTY_doc.i %include openturns/TTY.hxx openturns-1.9/python/src/TTY_doc.i.in000066400000000000000000000010511307543307100176140ustar00rootroot00000000000000%feature("docstring") OT::TTY "Console utilities. No constructor, only static methods are available." // --------------------------------------------------------------------- %feature("docstring") OT::TTY::ShowColors "Accessor to the color flag. Parameters ---------- flag : bool Enable or disable colored output." // --------------------------------------------------------------------- %feature("docstring") OT::TTY::ColoredOutput "Accessor to the color flag. Returns ------- flag : bool Whether colored output is enabled or disabled." openturns-1.9/python/src/TaylorExpansionMoments.i000066400000000000000000000005261307543307100224120ustar00rootroot00000000000000// SWIG file TaylorExpansionMoments.i %{ #include "openturns/TaylorExpansionMoments.hxx" %} %include TaylorExpansionMoments_doc.i %include openturns/TaylorExpansionMoments.hxx namespace OT{ %extend TaylorExpansionMoments { TaylorExpansionMoments(const TaylorExpansionMoments & other) { return new OT::TaylorExpansionMoments(other); } } } openturns-1.9/python/src/TaylorExpansionMoments_doc.i.in000066400000000000000000000171641307543307100236520ustar00rootroot00000000000000%feature("docstring") OT::TaylorExpansionMoments "First and second order Taylor expansion formulas. Available constructors: TaylorExpansionMoments(*limitStateVariable*) Parameters ---------- limitStateVariable : :class:`~openturns.RandomVector` This RandomVector must be of type *Composite*, which means it must have been defined with the fourth usage of declaration of a RandomVector (from a Function and an antecedent Distribution) or with the class :class:`~openturns.CompositeRandomVector`. Notes ----- In a probabilistic approach the Taylor expansion can be used propagate the uncertainties of the input variables :math:`\uX` through the model :math:`h` towards the output variables :math:`\uY`. It enables to access the central dispersion (Expectation, Variance) of the output variables. This method is based on a Taylor decomposition of the output variable :math:`\uY` towards the :math:`\uX` random vectors around the mean point :math:`\muX`. Depending on the order of the Taylor decomposition (classically first order or second order), one can obtain different formulas introduced hereafter. As :math:`\uY=h(\uX)`, the Taylor decomposition around :math:`\ux = \muX` at the second order yields to: .. math:: \uY = h(\muX) + <\vect{\vect{\nabla}}h(\muX) , \: \uX - \muX> + \frac{1}{2}<<\vect{\vect{\vect{\nabla }}}^2 h(\muX,\: \vect{\mu}_{\:X}),\: \uX - \muX>,\: \uX - \muX> + o(\Cov \uX) where: - :math:`\muX = \Expect{\uX}` is the vector of the input variables at the mean values of each component. - :math:`\Cov \uX` is the covariance matrix of the random vector `\uX`. The elements are the followings : :math:`(\Cov \uX)_{ij} = \Expect{\left(X^i - \Expect{X^i} \right)^2}` - :math:`\vect{\vect{\nabla}} h(\muX) = \: \Tr{\left( \frac{\partial y^i}{\partial x^j}\right)}_{\ux\: =\: \muX} = \: \Tr{\left( \frac{\partial h^i(\ux)}{\partial x^j}\right)}_{\ux\: =\: \muX}` is the transposed Jacobian matrix with :math:`i=1,\ldots,n_Y` and :math:`j=1,\ldots,n_X`. - :math:`\vect{\vect{\vect{\nabla^2}}} h(\ux\:,\ux)` is a tensor of order 3. It is composed by the second order derivative towards the :math:`i^\textrm{th}` and :math:`j^\textrm{th}` components of :math:`\ux` of the :math:`k^\textrm{th}` component of the output vector :math:`h(\ux)`. It yields to: :math:`\left( \nabla^2 h(\ux) \right)_{ijk} = \frac{\partial^2 (h^k(\ux))}{\partial x^i \partial x^j}` - :math:`<\vect{\vect{\nabla}}h(\muX) , \: \uX - \muX> = \sum_{j=1}^{n_X} \left( \frac{\partial {\uy}}{\partial {x^j}}\right)_{\ux = \muX} . \left( X^j-\muX^j \right)` - .. math:: <<\vect{\vect{\vect{\nabla }}}^2 h(\muX,\: \vect{\mu}_{X}),\: \uX - \muX>,\: \uX - \muX> = \left( \Tr{(\uX^i - \muX^i)}. \left(\frac{\partial^2 y^k}{\partial x^i \partial x^k}\right)_{\ux = \muX}. (\uX^j - \muX^j) \right)_{ijk} **Approximation at the order 1:** Expectation: .. math:: \Expect{\uY} \approx \vect{h}(\muX) Pay attention that :math:`\Expect{\uY}` is a vector. The :math:`k^\textrm{th}` component of this vector is equal to the :math:`k^\textrm{th}` component of the output vector computed by the model :math:`h` at the mean value. :math:`\Expect{\uY}` is thus the computation of the model at mean. Variance: .. math:: \Cov \uY \approx \Tr{\vect{\vect{\nabla}}}\:\vect{h}(\muX).\Cov \uX.\vect{\vect{\nabla}}\:\vect{h}(\muX) **Approximation at the order 2:** Expectation: .. math:: (\Expect{\uY})_k \approx (\vect{h}(\muX))_k + \left( \sum_{i=1}^{n_X}\frac{1}{2} (\Cov \uX)_{ii}.{(\nabla^2\:h(\uX))}_{iik} + \sum_{i=1}^{n_X} \sum_{j=1}^{i-1} (\Cov X)_{ij}.{(\nabla^2\:h(\uX))}_{ijk} \right)_k Variance: The decomposition of the variance at the order 2 is not implemented in the standard version of OpenTURNS. It requires both the knowledge of higher order derivatives of the model and the knowledge of moments of order strictly greater than 2 of the PDF. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myFunc = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], ... ['(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)', 'cos(x2*x2+x4)/(x1*x1+1+x3^4)']) >>> R = ot.CorrelationMatrix(4) >>> for i in range(4): ... R[i, i - 1] = 0.25 >>> distribution = ot.Normal([0.2]*4, [0.1, 0.2, 0.3, 0.4], R) >>> # We create a distribution-based RandomVector >>> X = ot.RandomVector(distribution) >>> # We create a composite RandomVector Y from X and myFunc >>> Y = ot.RandomVector(myFunc, X) >>> # We create a Taylor expansion method to approximate moments >>> myTaylorExpansionMoments = ot.TaylorExpansionMoments(Y) >>> print(myTaylorExpansionMoments.getMeanFirstOrder()) [0.0384615,0.932544]" // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getCovariance "Get the approximation at the first order of the covariance matrix. Returns ------- covariance : :class:`~openturns.CovarianceMatrix` Approximation at the first order of the covariance matrix of the random vector." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getGradientAtMean "Get the gradient of the function. Returns ------- gradient : :class:`~openturns.Matrix` Gradient of the Function which defines the random vector at the mean point of the input random vector." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getHessianAtMean "Get the hessian of the function. Returns ------- hessian : :class:`~openturns.SymmetricTensor` Hessian of the Function which defines the random vector at the mean point of the input random vector." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getImportanceFactors "Get the importance factors. Returns ------- factors : :class:`~openturns.Point` Importance factors of the inputs : only when randVect is of dimension 1." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getLimitStateVariable "Get the limit state variable. Returns ------- limitStateVariable : :class:`~openturns.RandomVector` Limit state variable." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getMeanFirstOrder "Get the approximation at the first order of the mean. Returns ------- mean : :class:`~openturns.Point` Approximation at the first order of the mean of the random vector." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getMeanSecondOrder "Get the approximation at the second order of the mean. Returns ------- mean : :class:`~openturns.Point` Approximation at the second order of the mean of the random vector (it requires that the hessian of the Function has been defined)." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::getValueAtMean "Get the value of the function. Returns ------- value : :class:`~openturns.Point` Value of the Function which defines the random vector at the mean point of the input random vector." // --------------------------------------------------------------------- %feature("docstring") OT::TaylorExpansionMoments::drawImportanceFactors "Draw the importance factors. Returns ------- graph : :class:`~openturns.Graph` Graph containing the pie corresponding to the importance factors of the probabilistic variables." openturns-1.9/python/src/TemperatureProfile.i000066400000000000000000000005231307543307100215230ustar00rootroot00000000000000// SWIG file %{ #include "openturns/TemperatureProfile.hxx" %} %include TemperatureProfile_doc.i OTTypedInterfaceObjectHelper(TemperatureProfile) %include openturns/TemperatureProfile.hxx namespace OT { %extend TemperatureProfile { TemperatureProfile(const TemperatureProfile & other) { return new OT::TemperatureProfile(other); } } } openturns-1.9/python/src/TemperatureProfileImplementation.i000066400000000000000000000010121307543307100244230ustar00rootroot00000000000000// SWIG file %{ #include "openturns/TemperatureProfileImplementation.hxx" %} %include TemperatureProfileImplementation_doc.i %template(TemperatureProfileImplementationdInterfaceObject) OT::TypedInterfaceObject; %include openturns/TemperatureProfileImplementation.hxx namespace OT { %extend TemperatureProfileImplementation { TemperatureProfileImplementation(const TemperatureProfileImplementation & other) { return new OT::TemperatureProfileImplementation(other); } } } openturns-1.9/python/src/TemperatureProfileImplementation_doc.i.in000066400000000000000000000023331307543307100256640ustar00rootroot00000000000000%define OT_TemperatureProfile_doc "Base class to define a temperature profile. Notes ----- The temperature profile is used in simulated annealing context " %enddef %feature("docstring") OT::TemperatureProfileImplementation OT_TemperatureProfile_doc // --------------------------------------------------------------------- %define OT_TemperatureProfile_call_doc "Compute the temperature T(i). Parameters ---------- i : int The index for whome we seek temperature Returns ------- temperature: float The temperature" %enddef %feature("docstring") OT::TemperatureProfileImplementation::operator() OT_TemperatureProfile_call_doc // --------------------------------------------------------------------- %define OT_TemperatureProfile_getIMax "Maximum index value accessor. Returns ------- iMax : int The maximum index value" %enddef %feature("docstring") OT::TemperatureProfileImplementation::getIMax OT_TemperatureProfile_getIMax // --------------------------------------------------------------------- %define OT_TemperatureProfile_getT0 "Temperature origin accessor. Returns ------- t0 : float The temperature origin" %enddef %feature("docstring") OT::TemperatureProfileImplementation::getT0 OT_TemperatureProfile_getT0 openturns-1.9/python/src/TemperatureProfile_doc.i.in000066400000000000000000000006411307543307100227560ustar00rootroot00000000000000// TemperatureProfile docstrings are defined in TemperatureProfileImplementation_doc.i.in %feature("docstring") OT::TemperatureProfile OT_TemperatureProfile_doc %feature("docstring") OT::TemperatureProfile::operator() OT_TemperatureProfile_call_doc %feature("docstring") OT::TemperatureProfile::getIMax OT_TemperatureProfile_getIMax %feature("docstring") OT::TemperatureProfile::getT0 OT_TemperatureProfile_getT0 openturns-1.9/python/src/Tensor.i000066400000000000000000000107501307543307100171620ustar00rootroot00000000000000// SWIG file Tensor.i %{ #include "openturns/Tensor.hxx" %} %include Tensor_doc.i %template(TensorImplementationTypedInterfaceObject) OT::TypedInterfaceObject; %apply const ScalarCollection & { const OT::Tensor::ScalarCollection & }; %define OTTensorAccessors(baseType, elementType, pythonElementType) PyObject * __getitem__(PyObject * args) const { OT::UnsignedInteger arg2 ; OT::UnsignedInteger arg3 ; OT::UnsignedInteger arg4 ; unsigned long val2 ; int ecode2 = 0 ; unsigned long val3 ; int ecode3 = 0 ; unsigned long val4 ; int ecode4 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if (!PyArg_ParseTuple(args,(char *)"OOO:" #baseType "___getitem__",&obj1,&obj2,&obj3)) SWIG_fail; ecode2 = SWIG_AsVal_unsigned_SS_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #baseType "___getitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } arg2 = static_cast< OT::UnsignedInteger >(val2); ecode3 = SWIG_AsVal_unsigned_SS_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" #baseType "___getitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } arg3 = static_cast< OT::UnsignedInteger >(val3); ecode4 = SWIG_AsVal_unsigned_SS_long(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" #baseType "___getitem__" "', argument " "4"" of type '" "OT::UnsignedInteger""'"); } arg4 = static_cast< OT::UnsignedInteger >(val4); return OT::convert((*self)(arg2,arg3,arg4)); fail: return NULL; } PyObject * __setitem__(PyObject * args, elementType val) { OT::UnsignedInteger arg2 ; OT::UnsignedInteger arg3 ; OT::UnsignedInteger arg4 ; unsigned long val2 ; int ecode2 = 0 ; unsigned long val3 ; int ecode3 = 0 ; unsigned long val4 ; int ecode4 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if (!PyArg_ParseTuple(args,(char *)"OOO:" #baseType "___setitem__",&obj1,&obj2,&obj3)) SWIG_fail; ecode2 = SWIG_AsVal_unsigned_SS_long(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" #baseType "___setitem__" "', argument " "2"" of type '" "OT::UnsignedInteger""'"); } arg2 = static_cast< OT::UnsignedInteger >(val2); ecode3 = SWIG_AsVal_unsigned_SS_long(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" #baseType "___setitem__" "', argument " "3"" of type '" "OT::UnsignedInteger""'"); } arg3 = static_cast< OT::UnsignedInteger >(val3); ecode4 = SWIG_AsVal_unsigned_SS_long(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" #baseType "___setitem__" "', argument " "4"" of type '" "OT::UnsignedInteger""'"); } arg4 = static_cast< OT::UnsignedInteger >(val4); (*self)(arg2,arg3,arg4) = val; return SWIG_Py_Void(); fail: return NULL; } %enddef %include openturns/Tensor.hxx %pythoncode %{ # This code has been added to conform to Numpy ndarray interface # that tries to reuse the data stored in the Tensor (zero copy) # see http://docs.scipy.org/doc/numpy/reference/arrays.interface.html#arrays-interface # for details. # See python doc http://docs.python.org/reference/datamodel.html?highlight=getattribute#object.__getattribute__ # for details on how to write such a method. def Tensor___getattribute__(self, name): """Implement attribute accesses.""" if name == '__array_interface__': self.__dict__['__array_interface__'] = {'shape': (self.getNbRows(), self.getNbColumns(), self.getNbSheets()), 'typestr': "|f" + str(self.__elementsize__()), 'data': (int(self.__baseaddress__()), True), 'strides': (self.__stride__(0), self.__stride__(1), self.__stride__(2)), 'version': 3, } return super(Tensor, self).__getattribute__(name) Tensor.__getattribute__ = Tensor___getattribute__ %} namespace OT { %extend Tensor { Tensor(const Tensor & other) { return new OT::Tensor(other); } Tensor(PyObject * pyObj) { return new OT::Tensor( OT::convert(pyObj) ); } OTTensorAccessors(Tensor, Scalar, _PyFloat_) } // Tensor } // OT openturns-1.9/python/src/TensorApproximationAlgorithm.i000066400000000000000000000006061307543307100236030ustar00rootroot00000000000000// SWIG file TensorApproximationAlgorithm.i %{ #include "openturns/TensorApproximationAlgorithm.hxx" %} %include TensorApproximationAlgorithm_doc.i %include openturns/TensorApproximationAlgorithm.hxx namespace OT{ %extend TensorApproximationAlgorithm { TensorApproximationAlgorithm(const TensorApproximationAlgorithm & other) { return new OT::TensorApproximationAlgorithm(other); } } } openturns-1.9/python/src/TensorApproximationAlgorithm_doc.i.in000066400000000000000000000122201307543307100250300ustar00rootroot00000000000000%feature("docstring") OT::TensorApproximationAlgorithm "Tensor approximation algorithm. Available constructors: TensorApproximationAlgorithm(*inputSample, outputSample, distribution, functionFactory, nk*) Parameters ---------- inputSample, outputSample : 2-d sequence of float The input random variables :math:`\vect{X}=(X_1, \dots, X_{n_X})^T` and the output samples :math:`\vect{Y}` of a model evaluated apart. distribution : :class:`~openturns.Distribution` Joint probability density function :math:`f_{\vect{X}}(\vect{x})` of the physical input vector :math:`\vect{X}`. functionFactory : :class:`~openturns.OrthogonalProductFunctionFactory` The basis factory. degrees : sequence of int The size of the basis for each component Of size equal to the input dimension. maxRank : int, optional (default=1) The maximum rank See also -------- FunctionalChaosAlgorithm, KrigingAlgorithm Notes ----- TensorApproximationAlgorithm allows to perform a low-rank approximation in the canonical tensor format (refer to [Rai2015]_ for other tensor formats and more details). The canonical tensor approximation of rank :math:`1` reads: .. math:: f(X_1, \dots, X_d) = \prod_{j=1}^d v_j^{(1)} (x_j) The available alternating least-squares algorithm consists in successive approximations of the coefficients in the basis of the j-th component: .. math:: v_j^{(i)} (x_j) = \sum_{k=1}^{n_j} \beta_{j,k}^{(i)} \phi_{j,k} (x_j) The full canonical tensor approximation of rank :math:`m` reads: .. math:: f(X_1, \dots, X_d) = \sum_{i=1}^m \prod_{j=1}^d v_j^{(i)} (x_j) The decomposition algorithm can be tweaked using the key `TensorApproximationAlgorithm-DecompositionMethod`. Examples -------- >>> import openturns as ot >>> # Define the model >>> dim = 1 >>> model = ot.SymbolicFunction(['x'], ['x*sin(x)']) >>> # Create the input distribution >>> distribution = ot.ComposedDistribution([ot.Uniform()]*dim) >>> factoryCollection = [ot.FourierSeriesFactory()] * dim >>> functionFactory = ot.OrthogonalProductFunctionFactory(factoryCollection) >>> size = 10 >>> X = distribution.getSample(size) >>> Y = model(X) >>> nk = [5] * dim >>> maxRank = 1 >>> algo = ot.TensorApproximationAlgorithm(X, Y, distribution, functionFactory, nk, maxRank) >>> algo.run() >>> result = algo.getResult()" //The default method used is `GreedyRankOne` from the :class:`~openturns.ResourceMap` //to approximate coefficients of a given component rank by rank using alternate least-squares. //Another possible value of `TensorApproximationAlgorithm-Method` is `RankM` //to approximate all the coefficients across all ranks at the same time. // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::run "Compute the response surface." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::getResult "Result accessor. Returns ------- result : :class:`~openturns.TensorApproximationResult` The result of the approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::setMaximumAlternatingLeastSquaresIteration "Maximum ALS algorithm iteration accessor. Parameters ---------- maxALSIteration : int The maximum number of iterations for the alternating least-squares algorithm used for the rank-1 approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::getMaximumAlternatingLeastSquaresIteration "Maximum ALS algorithm iteration accessor. Returns ------- maxALSIteration : int The maximum number of iterations for the alternating least-squares algorithm used for the rank-1 approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::setMaximumRadiusError "Maximum radius error accessor. Parameters ---------- maxRadiusError : float Convergence criterion on the radius during alternating least-squares algorithm used for the rank-1 approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::getMaximumRadiusError "Maximum radius error accessor. Returns ------- maxRadiusError : float Convergence criterion on the radius during alternating least-squares algorithm used for the rank-1 approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::setMaximumResidualError "Maximum residual error accessor. Parameters ---------- maxResErr : float Convergence criterion on the residual during alternating least-squares algorithm used for the rank-1 approximation." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationAlgorithm::getMaximumResidualError "Maximum residual error accessor. Returns ------- maxResErr : float Convergence criterion on the residual during alternating least-squares algorithm used for the rank-1 approximation." openturns-1.9/python/src/TensorApproximationResult.i000066400000000000000000000005561307543307100231370ustar00rootroot00000000000000// SWIG file TensorApproximationResult.i %{ #include "openturns/TensorApproximationResult.hxx" %} %include TensorApproximationResult_doc.i %include openturns/TensorApproximationResult.hxx namespace OT{ %extend TensorApproximationResult { TensorApproximationResult(const TensorApproximationResult & other) { return new OT::TensorApproximationResult(other); } } } openturns-1.9/python/src/TensorApproximationResult_doc.i.in000066400000000000000000000067411307543307100243730ustar00rootroot00000000000000%feature("docstring") OT::TensorApproximationResult "Functional chaos result. Notes ----- Structure created by the method run() of :class:`~openturns.TensorApproximationAlgorithm`, and obtained thanks to the method getResult()." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getCoefficients "Get the coefficients. Returns ------- coefficients : 2-d sequence of float Coefficients :math:`(\vect{\alpha_k})_{k \in K}`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getComposedMetaModel "Get the composed metamodel. Returns ------- composedMetamodel : :class:`~openturns.Function` :math:`\tilde{f} = \sum_{k \in K} \vect{\alpha}_k \Psi_k`" // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getMetaModel "Get the metamodel. Returns ------- metamodel : :class:`~openturns.Function` :math:`\tilde{g} = \sum_{k \in K} \vect{\alpha}_k \Psi_k \circ T`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getComposedModel "Get the composed model. Returns ------- composedModel : :class:`~openturns.Function` :math:`f = g\circ T^{-1}`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getDistribution "Get the input distribution. Returns ------- distribution : :class:`~openturns.Distribution` Distribution of the input random vector :math:`\vect{X}`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getIndices "Get the indices of the final basis. Returns ------- indices : :class:`~openturns.Indices` Indices of the elements of the multivariate basis used in the decomposition." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getInverseTransformation "Get the inverse isoprobabilistic transformation. Returns ------- invTransf : :class:`~openturns.Function` :math:`T^{-1}` such that :math:`T(\vect{X}) = \vect{Z}`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getOrthogonalBasis "Get the orthogonal basis. Returns ------- basis : :class:`~openturns.OrthogonalBasis` Factory of the orthogonal basis." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getReducedBasis "Get the reduced basis. Returns ------- basis : list of :class:`~openturns.Function` Collection of the *K* functions :math:`(\Psi_k)_{k\in K}` used in the decomposition." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getTransformation "Get the isoprobabilistic transformation. Returns ------- transformation : :class:`~openturns.Function` Transformation :math:`T` such that :math:`T(\vect{X}) = \vect{Z}`." // --------------------------------------------------------------------- %feature("docstring") OT::TensorApproximationResult::getTensor "Accessor to the tensor. Parameters ---------- marginalIndex : int Index of the marginal Returns ------- tensor : :class:`~openturns.CanonicalTensorEvaluation` Tensor data." openturns-1.9/python/src/TensorImplementation.i000066400000000000000000000007111307543307100220640ustar00rootroot00000000000000// SWIG file TensorImplementation.i %{ #include "openturns/TensorImplementation.hxx" %} %include TensorImplementation_doc.i %rename(TensorImplementation_operator___eq__) OT::operator ==(const TensorImplementation & lhs, const TensorImplementation & rhs); %include openturns/TensorImplementation.hxx namespace OT{ %extend TensorImplementation { TensorImplementation(const TensorImplementation & other) { return new OT::TensorImplementation(other); } } } openturns-1.9/python/src/TensorImplementation_doc.i.in000066400000000000000000000103061307543307100233170ustar00rootroot00000000000000%define OT_Tensor_doc "Tensor. Available constructors: Tensor(*n_rows, n_columns, n_sheets*) Tensor(*n_rows, n_columns, n_sheets, values*) Tensor(*sequence*) Parameters ---------- n_rows : int, :math:`n_r > 0` Number of rows. n_columns : int, :math:`n_c > 0` Number of columns. n_sheets : int, :math:`n_s > 0` Number of sheets. values : sequence of float with size :math:`n_r \times n_c \times n_s`, optional Values. OpenTURNS uses **column-major** ordering (like Fortran) for reshaping the flat list of values. If not mentioned, a zero tensor is created. sequence : sequence of float Values. Examples -------- >>> import openturns as ot >>> print(ot.Tensor(2, 2, 2, [1])) sheet #0 [[ 1 0 ] [ 0 0 ]] sheet #1 [[ 0 0 ] [ 0 0 ]] >>> T = ot.Tensor(2, 2, 3, range(2*2*3)) >>> print(T) sheet #0 [[ 0 2 ] [ 1 3 ]] sheet #1 [[ 4 6 ] [ 5 7 ]] sheet #2 [[ 8 10 ] [ 9 11 ]] Get or set terms: >>> print(T[0, 0, 0]) 0.0 >>> T[0, 0, 0] = 1. >>> print(T[0, 0, 0]) 1.0 Create an openturns tensor from a sequence: >>> T = ot.Tensor([[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]]) >>> print(T) sheet #0 [[ 1 4 ] [ 7 10 ]] sheet #1 [[ 2 5 ] [ 8 11 ]] sheet #2 [[ 3 6 ] [ 9 12 ]]" %enddef %feature("docstring") OT::TensorImplementation OT_Tensor_doc // --------------------------------------------------------------------- %define OT_Tensor_clean_doc "Set elements smaller than a threshold to zero. Parameters ---------- threshold : float Threshold for zeroing elements. Returns ------- cleaned_tensor : :class:`~openturns.Tensor` Input tensor with elements smaller than the threshold set to zero." %enddef %feature("docstring") OT::TensorImplementation::clean OT_Tensor_clean_doc // --------------------------------------------------------------------- %define OT_Tensor_getNbColumns_doc "Accessor to the number of columns. Returns ------- n_columns : int" %enddef %feature("docstring") OT::TensorImplementation::getNbColumns OT_Tensor_getNbColumns_doc // --------------------------------------------------------------------- %define OT_Tensor_getNbRows_doc "Accessor to the number of rows. Returns ------- n_rows : int" %enddef %feature("docstring") OT::TensorImplementation::getNbRows OT_Tensor_getNbRows_doc // --------------------------------------------------------------------- %define OT_Tensor_getNbSheets_doc "Accessor to the number of sheets. Returns ------- n_sheets : int Examples -------- >>> import openturns as ot >>> T = ot.Tensor(2, 2, 3, range(2*2*3)) >>> print(T.getNbSheets()) 3" %enddef %feature("docstring") OT::TensorImplementation::getNbSheets OT_Tensor_getNbSheets_doc // --------------------------------------------------------------------- %define OT_Tensor_getSheet_doc "Get a sheet of the tensor. Parameters ---------- sheet : int Index of sheet element. Returns ------- M : :class:`~openturns.Matrix` The sheet element. Examples -------- >>> import openturns as ot >>> T = ot.Tensor(2, 2, 3, range(2*2*3)) >>> print(T.getSheet(1)) [[ 4 6 ] [ 5 7 ]]" %enddef %feature("docstring") OT::TensorImplementation::getSheet OT_Tensor_getSheet_doc // --------------------------------------------------------------------- %define OT_Tensor_setSheet_doc "Set a matrix as a sheet of the complex tensor. Parameters ---------- sheet : int Index of sheet element. M : :class:`~openturns.Matrix` The matrix. Examples -------- >>> import openturns as ot >>> T = ot.Tensor(2, 2, 3, range(2*2*3)) >>> print(T) sheet #0 [[ 0 2 ] [ 1 3 ]] sheet #1 [[ 4 6 ] [ 5 7 ]] sheet #2 [[ 8 10 ] [ 9 11 ]] >>> M = ot.Matrix([[1, 2],[3, 4]]) >>> T.setSheet(0, M) >>> print(T) sheet #0 [[ 1 2 ] [ 3 4 ]] sheet #1 [[ 4 6 ] [ 5 7 ]] sheet #2 [[ 8 10 ] [ 9 11 ]]" %enddef %feature("docstring") OT::TensorImplementation::setSheet OT_Tensor_setSheet_doc // --------------------------------------------------------------------- %define OT_Tensor_isEmpty_doc "Tell if the tensor is empty. Returns ------- is_empty : bool *True* if the tensor contains no element. Examples -------- >>> import openturns as ot >>> T = ot.Tensor() >>> T.isEmpty() True" %enddef %feature("docstring") OT::TensorImplementation::isEmpty OT_Tensor_isEmpty_doc openturns-1.9/python/src/Tensor_doc.i.in000066400000000000000000000011071307543307100204100ustar00rootroot00000000000000// Tensor docstrings are defined in TensorImplementation_doc.i.in %feature("docstring") OT::Tensor OT_Tensor_doc %feature("docstring") OT::Tensor::getNbColumns OT_Tensor_getNbColumns_doc %feature("docstring") OT::Tensor::getNbRows OT_Tensor_getNbRows_doc %feature("docstring") OT::Tensor::getNbSheets OT_Tensor_getNbSheets_doc %feature("docstring") OT::Tensor::getSheet OT_Tensor_getSheet_doc %feature("docstring") OT::Tensor::setSheet OT_Tensor_setSheet_doc %feature("docstring") OT::Tensor::clean OT_Tensor_clean_doc %feature("docstring") OT::Tensor::isEmpty OT_Tensor_isEmpty_docopenturns-1.9/python/src/TensorizedCovarianceModel.i000066400000000000000000000005541307543307100230130ustar00rootroot00000000000000// SWIG file TenorizedCovarianceModel.i %{ #include "openturns/TensorizedCovarianceModel.hxx" %} %include TensorizedCovarianceModel_doc.i %include openturns/TensorizedCovarianceModel.hxx namespace OT{ %extend TensorizedCovarianceModel { TensorizedCovarianceModel(const TensorizedCovarianceModel & other) { return new OT::TensorizedCovarianceModel(other); } } } openturns-1.9/python/src/TensorizedCovarianceModel_doc.i.in000066400000000000000000000051511307543307100242430ustar00rootroot00000000000000%feature("docstring") OT::TensorizedCovarianceModel "Multivariate covariance function defined as a tensorization of covariance models. Parameters ---------- coll : sequence of :class:`~openturns.CovarianceModel` Collection of covariance models :math:`(C_k)_{1 \leq k \leq K}` of dimension :math:`d_k`. Notes ----- The tensorized covariance model defines a multivariate covariance model of dimension :math:`d\geq 1` from the tensorization of a given covariance models. We consider the stochastic process :math:`X: \Omega \times\cD \mapsto \Rset^d`, where :math:`\omega \in \Omega` is an event, :math:`\cD` is a domain of :math:`\Rset^n`. Its covariance function :math:`C : \cD \times \cD \rightarrow \cS_d^+(\Rset)` is defined from the collection of covariance functions :math:`C_k: \cD \times \cD \mapsto \cS_{d_k}^+(\Rset)` where :math:`d_1+\dots+d_k=d`, as follows: .. math:: C(\vect{s}, \vect{t}) = \left( \begin{array}{cccc} C_1(\vect{s}, \vect{t}) & 0 & \dots & 0 \\ 0 & C_2(\vect{s}, \vect{t}) & 0 & \\ \dots & \dots & \ddots & \dots \\ 0 & \dots & \dots & C_K(\vect{s}, \vect{t}) \end{array} \right) The amplitude of the covariance function is :math:`\Tr{\sigma} =(\Tr{\sigma}_{1}, \dots, \Tr{\sigma}_{K})` and each model :math:`C_k` is parameterized by its scale :math:`\vect{\theta}_k \in \Rset^n`. The method :math:`setScale(\vect{\theta})` updates the scale the following way. Let :math:`\vect{\theta}_k^0=(\theta_{k,1}^0,\hdots,\theta_{k,n}^0)` be the initial scale of the covariance model :math:`C_k`. After the update, :math:`C_k` has the scale :math:`\vect{\theta}_k=\left(\theta_1\rho_{k,1}^0,\hdots,\theta_n\rho_{k,n}^0\right)` where :math:`\rho_{k,j}^0=\dfrac{\theta^0_{k,j}}{\theta^0_{1,j}}`. Examples -------- Create a tensorized covariance function from the tensorization of an absolute exponential function, a squared exponential function and an exponential function: >>> import openturns as ot >>> spatialDimension = 2 Create the each covariance models: >>> myCov1 = ot.AbsoluteExponential([3.0] * spatialDimension) >>> myCov2 = ot.SquaredExponential(spatialDimension *[2.0]) >>> amplitude= [4.0, 2.0] >>> scale = [1.0, 1.0] >>> spatialCorrelation = ot.CorrelationMatrix(spatialDimension) >>> spatialCorrelation[1,0] = 0.3 >>> myCov3 = ot.ExponentialModel(scale, amplitude, spatialCorrelation) Define the scale of the tensorized model: >>> scale = [0.3, 0.8] Create the tensorized model: >>> covarianceModel = ot.TensorizedCovarianceModel([myCov1, myCov2, myCov3], scale) Fix the same scale to each model: >>> covarianceModel.setScale([1.0]*spatialDimension)" openturns-1.9/python/src/TensorizedUniVariateFunctionFactory.i000066400000000000000000000006761307543307100250720ustar00rootroot00000000000000// SWIG file TensorizedUniVariateFunctionFactory.i %{ #include "openturns/TensorizedUniVariateFunctionFactory.hxx" %} %include TensorizedUniVariateFunctionFactory_doc.i %include openturns/TensorizedUniVariateFunctionFactory.hxx namespace OT{ %extend TensorizedUniVariateFunctionFactory { TensorizedUniVariateFunctionFactory(const TensorizedUniVariateFunctionFactory & other) { return new OT::TensorizedUniVariateFunctionFactory(other); } } } openturns-1.9/python/src/TensorizedUniVariateFunctionFactory_doc.i.in000066400000000000000000000030601307543307100263120ustar00rootroot00000000000000%feature("docstring") OT::TensorizedUniVariateFunctionFactory "Base class for tensorized multivariate functions. Available constructors: TensorizedUniVariateFunctionFactory(*functions*) TensorizedUniVariateFunctionFactory(*functions, enumerateFunction*) Parameters ---------- functions : list of :class:`~openturns.UniVariateFunctionFamily` List of univariate function factories. enumerateFunction : :class:`~openturns.EnumerateFunction` Associates to an integer its multi-index image in the :math:`\Nset^d` dimension, which is the dimension of the basis. This multi-index represents the collection of degrees of the univariate polynomials. Notes ----- TensorizedUniVariateFunctionFactory allows to create multidimensional functions as the tensor product of univariate functions created by their respective factories (i.e. :class:`~openturns.UniVariateFunctionFamily`): .. math:: \Phi_n(x_1,\dots,x_d)=\prod_{i=1}^d \phi^i_{enum(n)_i}(x_i) where :math:`\phi^i_k` is the univariate basis of degree :math:`k` associated to the component :math:`x_i` and :math:`enum(n)_i` is the ith component of the multi-index :math:`enum(n)` Let's note that the exact hessian and gradient have been implemented for the product of polynomials. Examples -------- >>> import openturns as ot >>> funcColl = [ot.HaarWaveletFactory(), ot.FourierSeriesFactory(), ot.MonomialFunctionFactory()] >>> dim = len(funcColl) >>> enumerateFunction = ot.LinearEnumerateFunction(dim) >>> productBasis = ot.TensorizedUniVariateFunctionFactory(funcColl, enumerateFunction)" openturns-1.9/python/src/TestResult.i000066400000000000000000000032541307543307100200270ustar00rootroot00000000000000// SWIG file TestResult.i %{ #include "openturns/TestResult.hxx" namespace OT { template <> struct traitsPythonType { typedef _PySequence_ Type; }; template <> inline OT::TestResult convert<_PySequence_,OT::TestResult>(PyObject * pyObj) { check<_PySequence_>( pyObj ); ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); if (PySequence_Fast_GET_SIZE( newPyObj.get() ) != 4) throw InvalidArgumentException(HERE) << "Sequence passed as argument is not convertible to a TestResult. Expected sequence (String, Bool, Scalar, Scalar)"; PyObject * item_0 = PySequence_Fast_GET_ITEM( newPyObj.get(), 0 ); check<_PyString_>( item_0 ); PyObject * item_1 = PySequence_Fast_GET_ITEM( newPyObj.get(), 1 ); check<_PyBool_>( item_1 ); PyObject * item_2 = PySequence_Fast_GET_ITEM( newPyObj.get(), 2 ); check<_PyFloat_>( item_2 ); PyObject * item_3 = PySequence_Fast_GET_ITEM( newPyObj.get(), 3 ); check<_PyFloat_>( item_3 ); return OT::TestResult( convert<_PyString_,String>( item_0 ), convert<_PyBool_,Bool>( item_1 ), convert<_PyFloat_,Scalar>( item_2 ), convert<_PyFloat_,Scalar>( item_3 ) ); } } /* namespace OT */ %} %template(TestResultCollection) OT::Collection; %include TestResult_doc.i %include openturns/TestResult.hxx namespace OT{ %extend TestResult { TestResult(const TestResult & other) { return new OT::TestResult(other); } TestResult(PyObject * pyObj) { return new OT::TestResult( OT::convert(pyObj) ); } } } openturns-1.9/python/src/TestResult_doc.i.in000066400000000000000000000036211307543307100212570ustar00rootroot00000000000000%feature("docstring") OT::TestResult "Test result data structure. .. warning:: Tests results are not intended to be created manually. They are returned by the statistical tests implemented in the :mod:`~openturns.stattests` subpackage. Constructor is therefore intentionally not documented. Notes ----- The p-value of a test can be seen as the probability of observing a sample having a worst or equal statistic than the one that has been calculated on the tested sample, under the null hypothesis. This is the metric that is used for concluding the test with respect to the given accepted risk of committing a Type I error, that is an incorrect rejection of a true null hypothesis. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal() >>> sample = distribution.getSample(30) >>> test_result = ot.FittingTest.Kolmogorov(sample, ot.NormalFactory(), 0.99) >>> print(test_result.getPValue()) 0.846896... >>> print(test_result.getThreshold()) 0.01... >>> print(test_result.getBinaryQualityMeasure()) True" // --------------------------------------------------------------------- %feature("docstring") OT::TestResult::getBinaryQualityMeasure "Accessor to the test's binary conclusion. Returns ------- binary_measure : bool, optional Test conclusion: `False` if it can reject the null hypothesis, `True` if it cannot." // --------------------------------------------------------------------- %feature("docstring") OT::TestResult::getPValue "Accessor to the test's p-value. Returns ------- p_value : float, :math:`0 \leq p \leq 1` The test's p-value." // --------------------------------------------------------------------- %feature("docstring") OT::TestResult::getThreshold "Accessor to the accepted risk of committing a Type I error. Returns ------- threshold : float, :math:`0 \leq \alpha \leq 1` Accepted risk of committing a Type I error." openturns-1.9/python/src/Text.i000066400000000000000000000003061307543307100166300ustar00rootroot00000000000000// SWIG file Text.i %{ #include "openturns/Text.hxx" %} %include Text_doc.i %include openturns/Text.hxx namespace OT { %extend Text { Text(const Text & other) { return new OT::Text(other); } } } openturns-1.9/python/src/Text_doc.i.in000066400000000000000000000017751307543307100200750ustar00rootroot00000000000000%feature("docstring") OT::Text "Text. Available constructors: Text(*data, texts, position=3, legend=' '*) Text(*dataX, dataY, texts, position=3, legend=' '*) Parameters ---------- data : 2-d sequence of float Locations of texts dataX, dataY : two 2-d sequences of float of dimension 1, or two sequences of float X- and Y-locations of texts position : str Text position; valid values are 'top' (default), 'below', 'left' or 'right' legend : str Legend of the Text. Examples -------- >>> import openturns as ot >>> R = ot.CorrelationMatrix(2) >>> R[1, 0] = -0.25 >>> distribution = ot.Normal([-1.5, 0.5], [4.0, 1.0], R) >>> sample = distribution.getSample(20) >>> myGraph = ot.Graph('Normal sample', 'x1', 'x2', True, '') >>> # Create the cloud >>> myCloud = ot.Cloud(sample, 'blue', 'fsquare', 'My Cloud') >>> myGraph.add(myCloud) >>> # Add annotations >>> texts = ot.Description(5) >>> for i in range(5): texts[i] = str(i+1) >>> myText = ot.Text(sample[0:5,:], texts) >>> myGraph.add(myText)" openturns-1.9/python/src/TimeSeries.i000066400000000000000000000003661307543307100177630ustar00rootroot00000000000000// SWIG file TimeSeries.i %{ #include "openturns/TimeSeries.hxx" %} %include TimeSeries_doc.i %include openturns/TimeSeries.hxx namespace OT { %extend TimeSeries { TimeSeries(const TimeSeries & other) { return new OT::TimeSeries(other); } } } openturns-1.9/python/src/TimeSeries_doc.i.in000066400000000000000000000033741307543307100212170ustar00rootroot00000000000000%feature("docstring") OT::TimeSeries "Time series. Available constructors: TimeSeries(*nSteps,dim*) TimeSeries(*timeGrid, dim*) TimeSeries(*timeGrid, sample*) TimeSeries(*field*) Parameters ---------- nSteps : int Enables to create a regular time grid on :math:`[0, nSteps]` which time step is equal to 1. timeGrid : :class:`~openturns.RegularGrid` Regular time grid of the time series. dim : int Dimension of the values of the time series at each time stamp. By default, the values are equal to the null vector. sample : 2-d sequence of float Values assigned to each time stamp of the time series. field : :class:`~openturns.Field` Maps a field into a time series when the associated lesh cn be interpretated as a regular time grid. Examples -------- Create a time series: >>> import openturns as ot >>> tmin = 0.0 >>> timeStep = 0.1 >>> n = 5 >>> myTimeGrid = ot.RegularGrid(tmin, timeStep, n) >>> myValues = [[1.0], [2.0], [1.5], [4.5], [0.5]] >>> myTimeSeries = ot.TimeSeries(myTimeGrid, myValues) Draw the time series: >>> graph = myTimeSeries.draw()" // --------------------------------------------------------------------- %feature("docstring") OT::TimeSeries::add "Add a new value to the time series and extend the associated time grid. Available usages: add(*sample*) add(*timeSeries*) Parameters ---------- sample : 2-d sequence of float, of dimension the same as the dimension of the values of the time series. timeSeries : :class:`~openturns.TimeSeries`, which time grid must match with the initial time grid (one follows the other). Returns ------- newTimeSeries: :class:`~openturns.TimeSeries`, which regular grid has been extended with a new time stamp or a second time grid, associated to the new values. " openturns-1.9/python/src/TracyWidomGOE.i000066400000000000000000000003601307543307100203210ustar00rootroot00000000000000// SWIG file TracyWidomGOE.i %{ #include "openturns/TracyWidomGOE.hxx" %} %include openturns/TracyWidomGOE.hxx namespace OT { %extend TracyWidomGOE { TracyWidomGOE(const TracyWidomGOE & other) { return new OT::TracyWidomGOE(other); } } } openturns-1.9/python/src/TracyWidomGSE.i000066400000000000000000000003601307543307100203250ustar00rootroot00000000000000// SWIG file TracyWidomGSE.i %{ #include "openturns/TracyWidomGSE.hxx" %} %include openturns/TracyWidomGSE.hxx namespace OT { %extend TracyWidomGSE { TracyWidomGSE(const TracyWidomGSE & other) { return new OT::TracyWidomGSE(other); } } } openturns-1.9/python/src/TracyWidomGUE.i000066400000000000000000000003601307543307100203270ustar00rootroot00000000000000// SWIG file TracyWidomGUE.i %{ #include "openturns/TracyWidomGUE.hxx" %} %include openturns/TracyWidomGUE.hxx namespace OT { %extend TracyWidomGUE { TracyWidomGUE(const TracyWidomGUE & other) { return new OT::TracyWidomGUE(other); } } } openturns-1.9/python/src/Trapezoidal.i000066400000000000000000000003761307543307100201710ustar00rootroot00000000000000// SWIG file Trapezoidal.i %{ #include "openturns/Trapezoidal.hxx" %} %include Trapezoidal_doc.i %include openturns/Trapezoidal.hxx namespace OT { %extend Trapezoidal { Trapezoidal(const Trapezoidal & other) { return new OT::Trapezoidal(other); } } } openturns-1.9/python/src/TrapezoidalFactory.i000066400000000000000000000004661307543307100215210ustar00rootroot00000000000000// SWIG file TrapezoidalFactory.i %{ #include "openturns/TrapezoidalFactory.hxx" %} %include TrapezoidalFactory_doc.i %include openturns/TrapezoidalFactory.hxx namespace OT { %extend TrapezoidalFactory { TrapezoidalFactory(const TrapezoidalFactory & other) { return new OT::TrapezoidalFactory(other); } } } openturns-1.9/python/src/TrapezoidalFactory_doc.i.in000066400000000000000000000015351307543307100227510ustar00rootroot00000000000000%feature("docstring") OT::TrapezoidalFactory "Trapezoidal factory. Available constructor: TrapezoidalFactory() The parameters are estimated by numerical maximum likelihood estimation. See also -------- DistributionFactory, Trapezoidal" // --------------------------------------------------------------------- %feature("docstring") OT::TrapezoidalFactory::setOptimizationAlgorithm "Accessor to the solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::TrapezoidalFactory::getOptimizationAlgorithm "Accessor to the solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." openturns-1.9/python/src/Trapezoidal_doc.i.in000066400000000000000000000065261307543307100214260ustar00rootroot00000000000000%feature("docstring") OT::Trapezoidal "Trapezoidal distribution. Available constructors: Trapezoidal(*a=-2.0, b=-1.0, c=1.0, d=2.0*) Parameters ---------- a : float, :math:`a < d` Lower bound. b : float, :math:`a \leq b < c` Level start. c : float, :math:`b < c \leq d` Level end. d : float, :math:`c \leq d` Upper bound. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \left\{ \begin{array}{ll} \displaystyle h \frac{x - a}{b - a} & a \leq x < b \\ \displaystyle h & b \leq x < c \\ \displaystyle h \frac{d - x}{d - c} & c \leq x \leq d \\ \end{array} \right., \quad x \in [a, d] with: :math:`h=\frac{2}{d+c-a-b}` Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{h}{6}(d^2 + cd + c^2 - b^2 - ab - a^2) \\ \Var{X} & = & \frac{h^2}{72}(d^4 + 2cd^3 - 3bd^3 - 3ad^3 ...\\ & & - 3bcd^2 - 3acd^2 + 4b^2d^2 + 4abd^2 ...\\ & & + 4a^2d^2 + 2c^3d - 3bc^2d - 3ac^2d ...\\ & & + 4b^2cd + 4abcd + 4a^2cd - 3b^3d - 3ab^2d ...\\ & & - 3a^2bd - 3a^3d + c^4 - 3bc^3 - 3ac^3 + 4b^2c^2 ...\\ & & + 4abc^2 + 4a^2c^2 - 3b^3c - 3ab^2c - 3a^2bc ...\\ & & - 3a^3c + b^4 + 2ab^3 + 2a^3b + a^4) \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Trapezoidal(1.0, 2.3, 4.5, 5.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::getB "Accessor to the distribution's level start. Returns ------- b : float Level start." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::getC "Accessor to the distribution's level end. Returns ------- c : float Level end." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::getD "Accessor to the distribution's upper bound. Returns ------- d : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::setA "Accessor to the distribution's lower bound. Returns ------- a : float, :math:`a \leq b < c \leq d` Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::setB "Accessor to the distribution's level start. Returns ------- b : float, :math:`a \leq b < c \leq d` Level start." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::setC "Accessor to the distribution's level end. Returns ------- c : float, :math:`a \leq b < c \leq d` Level end." // --------------------------------------------------------------------- %feature("docstring") OT::Trapezoidal::setD "Accessor to the distribution's upper bound. Returns ------- d : float, :math:`a \leq b < c \leq d` Upper bound." openturns-1.9/python/src/TrendEvaluation.i000066400000000000000000000004321307543307100210100ustar00rootroot00000000000000// SWIG file TrendEvaluation.i OTAutodoc(TrendEvaluation) %{ #include "openturns/TrendEvaluation.hxx" %} %include openturns/TrendEvaluation.hxx namespace OT { %extend TrendEvaluation { TrendEvaluation(const TrendEvaluation & other) { return new OT::TrendEvaluation(other); } } } openturns-1.9/python/src/TrendFactory.i000066400000000000000000000004071307543307100203120ustar00rootroot00000000000000// SWIG file TrendFactory.i %{ #include "openturns/TrendFactory.hxx" %} %include TrendFactory_doc.i %include openturns/TrendFactory.hxx namespace OT { %extend TrendFactory { TrendFactory(const TrendFactory & other) { return new OT::TrendFactory(other); } } } openturns-1.9/python/src/TrendFactory_doc.i.in000066400000000000000000000130741307543307100215500ustar00rootroot00000000000000%feature("docstring") OT::TrendFactory "Trend estimator. Available constructors: TrendFactory(*basisSequenceFactory=LARS(), fittingAlgorithm=CorrectedLeaveOneOut()*) Parameters ---------- basisSequenceFactory : :class:`~openturns.BasisSequenceFactory` The regression strategy that provides the estimation of the coefficients associated to the best model among the basis functions. Default is the *least angle regression* (LAR) method for the choice of sparse models: :class:`~openturns.LAR`. fittingAlgorithm : :class:`~openturns.BasisSequenceFactory` The fitting algorithm that estimates the empirical error on each sub-basis. Default is the *leave one out* strategy: :class:`~openturns.CorrectedLeaveOneOut`. Notes ----- A multivariate stochastic process :math:`X: \Omega \times \cD \rightarrow \Rset^d` of dimension *d* where :math:`\cD \in \Rset^n` can write as the sum of a trend function :math:`f_{trend}: \Rset^n \rightarrow \Rset^d` and a stationary multivariate stochastic process :math:`X_{stat}: \Omega \times \cD \rightarrow \Rset^d` of dimension *d* as follows: .. math:: X(\omega,\vect{t}) = X_{stat}(\omega,\vect{t}) + f_{trend}(\vect{t}) The :class:`~openturns.TrendFactory` enables to identify the trend function :math:`f_{trend}` from a given field of the process *X* and then to remove this last one from the initial field. The resulting field is a realization of the process :math:`X_{stat}`. We consider the functional basis :math:`\cB = (f_1, f_2, \ldots, f_K)` with :math:`f_j : \Rset^n \longrightarrow \Rset^d`. The trend function :math:`f_{trend}` writes: .. math:: f_{trend}(\vect{t}) = \sum_{j=1}^{K} \alpha_j f_j(\vect{t}) The coefficients :math:`\alpha_j \in \Rset` have to be computed. In the case where the number of available data is of the same ordre as *K*, the least square system is ill-posed and a more complex algorithm should be used. Some algorithms combine cross validation techniques and advanced regression strategies, in order to provide the estimation of the coefficients associated to the best model among the basis functions (sparse model). For example, we can use the *least angle regression* (LAR) method for the choice of sparse models. Then, some fitting algorithms like the *leave one out*, coupled to the regression strategy, assess the error on the prediction and enable the selection of the best sparse model. " // --------------------------------------------------------------------- %feature("docstring") OT::TrendFactory::build "Estimate the trend of a process. Available usages: build(*field, basis*) Parameters ---------- field : :class:`~openturns.Field` One realization of the process. basis : :class:`~openturns.Basis` A collection of functions composing the functional basis. Returns ------- myTrendTransform : :class:`~openturns.TrendTransform` The estimated trend function. Examples -------- Define a scalar temporal normal process on a mesh of dimension 1: >>> import openturns as ot >>> myGrid = ot.RegularGrid(0.0, 1.0, 100) >>> amplitude=[5.0] >>> scale=[0.2] >>> myCovModel=ot.ExponentialModel(scale, amplitude) >>> myXProcess=ot.GaussianProcess(myCovModel, myGrid) Create a trend function: :math:`f_{trend} : \Rset \mapsto \Rset` where :math:`f_{trend}(t)=1+2t+t^2`: >>> fTrend = ot.SymbolicFunction(['t'], ['1+2*t+t^2']) >>> fTemp = ot.TrendTransform(fTrend) Add the trend to the initial process and get a field: >>> myYProcess = ot.CompositeProcess(fTemp, myXProcess) >>> myYField = myYProcess.getRealization() Estimate the trend function from the field: >>> myBasisSequenceFactory = ot.LARS() >>> myFittingAlgorithm = ot.KFold() >>> func1 = ot.SymbolicFunction(['t'], ['1']) >>> func2 = ot.SymbolicFunction(['t'], ['t']) >>> func3 = ot.SymbolicFunction(['t'], ['t^2']) >>> myBasis = ot.Basis([func1, func2, func3]) >>> myTrendFactory = ot.TrendFactory(myBasisSequenceFactory, myFittingAlgorithm) >>> myTrendTransform = myTrendFactory.build(myYField, myBasis) >>> graph = myTrendTransform.getEvaluation().draw(0.0, 10) >>> graph.add(fTrend.draw(0.0, 10)) >>> graph.add(ot.Cloud(myYField.getMesh().getVertices(), myYField.getValues())) >>> graph.setColors(['red', 'blue', 'black']) >>> graph.setLegends(['estimated trend', 'real trend', 'sample']) >>> graph.setLegendPosition('topleft') >>> graph.setTitle('Trend estimation from a field') >>> graph.setYTitle('values') " // --------------------------------------------------------------------- %feature("docstring") OT::TrendFactory::getBasisSequenceFactory "Accessor to functional basis. Returns ------- myBasisSequenceFactory : :class:`~openturns.BasisSequenceFactory` The functional basis :math:`\cB`. " // --------------------------------------------------------------------- %feature("docstring") OT::TrendFactory::getFittingAlgorithm "Accessor to fitting algorithm basis. Returns ------- myFittingAlgorithm : :class:`~openturns.FittingAlgorithm` The fitting algorithm that estimates the empirical error on each sub-basis. " // --------------------------------------------------------------------- %feature("docstring") OT::TrendFactory::setBasisSequenceFactory "Accessor to functional basis. Parameters ---------- myBasisSequenceFactory : :class:`~openturns.BasisSequenceFactory` The functional basis :math:`\cB`. " // --------------------------------------------------------------------- %feature("docstring") OT::TrendFactory::setFittingAlgorithm "Accessor to fitting algorithm basis. Parameters ---------- myFittingAlgorithm : :class:`~openturns.FittingAlgorithm` The fitting algorithm that estimates the empirical error on each sub-basis. " openturns-1.9/python/src/TrendTransform.i000066400000000000000000000004261307543307100206570ustar00rootroot00000000000000// SWIG file TrendTransform.i %{ #include "openturns/TrendTransform.hxx" %} %include TrendTransform_doc.i %include openturns/TrendTransform.hxx namespace OT { %extend TrendTransform { TrendTransform(const TrendTransform & other) { return new OT::TrendTransform(other); } } } openturns-1.9/python/src/TrendTransform_doc.i.in000066400000000000000000000037141307543307100221140ustar00rootroot00000000000000%feature("docstring") OT::TrendTransform "Trend transformation. Parameters ---------- myTrendFunc : :class:`~openturns.Function` The trend function :math:`f_{trend}` of a process. Notes ----- A multivariate stochastic process :math:`X: \Omega \times\cD \rightarrow \Rset^d` of dimension *d* where :math:`\cD \in \Rset^n` may write as the sum of a trend function :math:`f_{trend}: \Rset^n \rightarrow \Rset^d` and a stationary multivariate stochastic process :math:`X_{stat}: \Omega \times\cD \rightarrow \Rset^d` of dimension *d* as follows: .. math:: X(\omega,\vect{t}) = X_{stat}(\omega,\vect{t}) + f_{trend}(\vect{t}) We note :math:`(\vect{x}_0, \dots, \vect{x}_{N-1})` the values of one field of the process *X*, associated to the mesh :math:`\cM = (\vect{t}_0, \dots, \vect{t}_{N-1})` of :math:`\cD`. We note :math:`(\vect{x}^{stat}_0, \dots, \vect{x}^{stat}_{N-1})` the values of the resulting stationary field. Then we have: .. math:: \vect{x}^{stat}_i = \vect{x}_i - f_{trend}(\vect{t}_i) Examples -------- Create a trend function: :math:`f_{trend} : \Rset \mapsto \Rset` where :math:`f_{trend}(t)=1+2t+t^2`: >>> import openturns as ot >>> f = ot.SymbolicFunction(['t'], ['1+2*t+t^2']) >>> fTrend = ot.TrendTransform(f) Add it to a process: >>> myGrid = ot.RegularGrid(0.0, 0.1, 10) >>> amplitude=[5.0] >>> scale=[0.2] >>> myCovModel=ot.ExponentialModel(scale, amplitude) >>> myXProcess=ot.GaussianProcess(myCovModel, myGrid) >>> myYProcess = ot.CompositeProcess(fTrend, myXProcess) Remove it from a field: >>> myField = myYProcess.getRealization() >>> myStatField = fTrend.getInverse()(myField) Then re-add it: >>> myInitialField = fTrend(myStatField) " // --------------------------------------------------------------------- %feature("docstring") OT::TrendTransform::getInverse "Accessor to the inverse trend function. Returns ------- myInverseTrendTransform : :class:`~openturns.InverseTrendTransform` The :math:`f_{trend}^{-1}` function. " openturns-1.9/python/src/Triangular.i000066400000000000000000000003661307543307100200220ustar00rootroot00000000000000// SWIG file Triangular.i %{ #include "openturns/Triangular.hxx" %} %include Triangular_doc.i %include openturns/Triangular.hxx namespace OT { %extend Triangular { Triangular(const Triangular & other) { return new OT::Triangular(other); } } } openturns-1.9/python/src/TriangularComplexMatrix.i000066400000000000000000000015041307543307100225320ustar00rootroot00000000000000// SWIG file TriangularComplexMatrix.i %{ #include "openturns/TriangularComplexMatrix.hxx" %} %include TriangularComplexMatrix_doc.i %include openturns/TriangularComplexMatrix.hxx namespace OT { %extend TriangularComplexMatrix { TriangularComplexMatrix(const TriangularComplexMatrix & other) { return new OT::TriangularComplexMatrix(other); } TriangularComplexMatrix(PyObject * pyObj) { return new OT::TriangularComplexMatrix( OT::convert(pyObj) ); } OTComplexMatrixGetAccessors() TriangularComplexMatrix __rmul__(Complex s) { return s * (*self); } ComplexMatrix __rmul__(const ComplexMatrix & m) { return m * (*self); } #if SWIG_VERSION < 0x030011 TriangularComplexMatrix __truediv__(Complex s) { return (*self) / s; } #endif } // TriangularComplexMatrix } // OT openturns-1.9/python/src/TriangularComplexMatrix_doc.i.in000066400000000000000000000022471307543307100237710ustar00rootroot00000000000000%feature("docstring") OT::TriangularComplexMatrix "Hermitian Matrix. Available constructors: TriangularComplexMatrix(*dim*) TriangularComplexMatrix(*dim, isLower*) Parameters ---------- dim : integer The dimension of the triangular matrix (square matrix with *dim* rows and *dim* columns). isLower : bool Flag telling if the matrix is triangular lower (*True*) or upper (*False*). Default is *True*. See also -------- ComplexMatrix Notes ----- The triangular complex matrix is filled with :math:`(0, 0)`. It is not possible to fill the matrix from a collection of complex values (to be done later)." // --------------------------------------------------------------------- %feature("docstring") OT::TriangularComplexMatrix::isLowerTriangular "Test whether the matrix is lower triangular or upper triangular. Returns ------- isLower : bool Flag telling if the matrix is triangular lower (*True*) or upper (*False*)." // --------------------------------------------------------------------- %feature("docstring") OT::TriangularComplexMatrix::getDimension "Accessor to the matrix dimension. Returns ------- dim : integer The dimension of the matrix."openturns-1.9/python/src/TriangularFactory.i000066400000000000000000000004561307543307100213520ustar00rootroot00000000000000// SWIG file TriangularFactory.i %{ #include "openturns/TriangularFactory.hxx" %} %include TriangularFactory_doc.i %include openturns/TriangularFactory.hxx namespace OT { %extend TriangularFactory { TriangularFactory(const TriangularFactory & other) { return new OT::TriangularFactory(other); } } } openturns-1.9/python/src/TriangularFactory_doc.i.in000066400000000000000000000002301307543307100225720ustar00rootroot00000000000000%feature("docstring") OT::TriangularFactory "Triangular factory. Available constructor: TriangularFactory() See also -------- DistributionFactory"openturns-1.9/python/src/TriangularMatrix.i000066400000000000000000000013071307543307100212030ustar00rootroot00000000000000// SWIG file TriangularMatrix.i %{ #include "openturns/TriangularMatrix.hxx" %} %include TriangularMatrix_doc.i %include openturns/TriangularMatrix.hxx namespace OT { %extend TriangularMatrix { TriangularMatrix(const TriangularMatrix & other) { return new OT::TriangularMatrix(other); } TriangularMatrix(PyObject * pyObj) { return new OT::TriangularMatrix( OT::convert(pyObj) ); } OTMatrixAccessors() TriangularMatrix __rmul__(Scalar s) { return s * (*self); } Matrix __rmul__(const Matrix & m) { return m * (*self); } #if SWIG_VERSION < 0x030011 TriangularMatrix __truediv__(Scalar s) { return (*self) / s; } #endif } // TriangularMatrix } // OT openturns-1.9/python/src/TriangularMatrix_doc.i.in000066400000000000000000000014421307543307100224350ustar00rootroot00000000000000%feature("docstring") OT::TriangularMatrix "Hermitian Matrix. Available constructors: TriangularMatrix(*dim*) TriangularMatrix(*dim, isLower*) Parameters ---------- dim : integer The dimension of the triangular matrix (square matrix with *dim* rows and *dim* columns). isLower : bool Flag telling if the matrix is triangular lower (*True*) or upper (*False*). Default is *True*. See also -------- Matrix Notes ----- The triangular matrix is filled with 0." // --------------------------------------------------------------------- %feature("docstring") OT::TriangularMatrix::isLowerTriangular "Test whether the matrix is lower triangular or upper triangular. Returns ------- isLower : bool Flag telling if the matrix is triangular lower (*True*) or upper (*False*)."openturns-1.9/python/src/Triangular_doc.i.in000066400000000000000000000036721307543307100212570ustar00rootroot00000000000000%feature("docstring") OT::Triangular "Triangular distribution. Available constructors: Triangular(*a=-1.0, m=0.0, b=1.0*) Parameters ---------- a : float Lower bound. m : float, :math:`a \leq m \leq b` Mode. b : float, :math:`a < b` Upper bound. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \left\{ \begin{array}{ll} \displaystyle \frac{2(x - a)}{(m - a)(b - a)} & a \leq x \leq m \\ \displaystyle \frac{2(b - x)}{(b - m)(b - a)} & m \leq x \leq b \end{array} \right., \quad x \in [a, b] Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{1}{3}\,(a+m+b) \\ \Var{X} & = & \frac{1}{18} (a^2+b^2+m^2-ab-am-bm) \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Triangular(1.0, 2.5, 4.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Triangular::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Triangular::getB "Accessor to the distribution's upper bound. Returns ------- b : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Triangular::getM "Accessor to the distribution's mode. Returns ------- m : float Mode." // --------------------------------------------------------------------- %feature("docstring") OT::Triangular::setAMB "Accessor to the distribution's parameters. Parameters ---------- a : float Lower bound. m : float, :math:`a \leq m \leq b` Mode. b : float, :math:`a < b` Upper bound." openturns-1.9/python/src/TruncatedDistribution.i000066400000000000000000000005161307543307100222400ustar00rootroot00000000000000// SWIG file TruncatedDistribution.i %{ #include "openturns/TruncatedDistribution.hxx" %} %include TruncatedDistribution_doc.i %include openturns/TruncatedDistribution.hxx namespace OT { %extend TruncatedDistribution { TruncatedDistribution(const TruncatedDistribution & other) { return new OT::TruncatedDistribution(other); } } } openturns-1.9/python/src/TruncatedDistribution_doc.i.in000066400000000000000000000127611307543307100234770ustar00rootroot00000000000000%feature("docstring") OT::TruncatedDistribution "Truncated distribution. Available constructors: TruncatedDistribution(*distribution, lowerBound, upperBound, threshold=0.5*) TruncatedDistribution(*distribution, bound, side=ot.TruncatedDistribution.LOWER, threshold=0.5*) TruncatedDistribution(*distribution, truncationInterval, threshold=0.5*) Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution to be truncated. lowerBound, upperBound : float Define a new distribution range :math:`[lowerBound, upperBound]` with finite bounds. The upper bound must be strictly greater than the lower bound. bound : float Scalar used when one of the bounds of the distribution is not finite. If *side = ot.TruncatedDistribution.LOWER*: the interval :math:`[bound, +\infty)` is used to bound the distribution. If *side = ot.TruncatedDistribution.UPPER*: the interval :math:`(-\infty, bound]` is used to bound the distribution. side : int, optional Integer used when one of the bounds of the distribution is not finite. (Amongst ot.TruncatedDistribution.LOWER and ot.TruncatedDistribution.UPPER). truncationInterval : :class:`~openturns.Interval` Define a new distribution range :math:`[lowerBound, upperBound]` with finite bounds. threshold : float, :math:`\tau \in [0, 1]` This threshold is used when generating an evaluation of the distribution. We note :math:`F` the CDF of the non truncated distribution: If :math:`F(upperBound)-F(lowerBound)<\tau`: a CDF inversion is performed. If :math:`F(upperBound)-F(lowerBound)>\tau`: rejection. Examples -------- >>> import openturns as ot >>> distribution = ot.TruncatedDistribution(ot.Normal(2.0, 1.5), 1.0, 4.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getDistribution "Get the distribution. Returns ------- distribution : :class:`~openturns.Distribution` The distribution to be truncated." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setDistribution "Set the distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution to be truncated." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getFiniteLowerBound "Get the finite lower bound flag. Returns ------- isLowerBoundFinite : bool Flag telling if the lower bound is finite or not." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setFiniteLowerBound "Set the finite lower bound flag. Parameters ---------- isLowerBoundFinite : bool Flag telling if the lower bound is finite or not." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getFiniteUpperBound "Get the finite upper bound flag. Returns ------- isUpperBoundFinite : bool Flag telling if the upper bound is finite or not." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setFiniteUpperBound "Set the finite upper bound flag. Parameters ---------- isUpperBoundFinite : bool Flag telling if the upper bound is finite or not." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getLowerBound "Get the lower bound. Returns ------- lowerBound : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setLowerBound "Set the lower bound. Parameters ---------- lowerBound : float Lower bound. The upper bound must be strictly greater than the lower bound. " // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getUpperBound "Get the upper bound. Returns ------- upperBound : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setUpperBound "Set the upper bound. Parameters ---------- upperBound : float Upper bound. The upper bound must be strictly greater than the lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::getThresholdRealization "Get the threshold used when generating an evaluation of the distribution. Returns ------- threshold : float, :math:`\tau \in [0, 1]` This threshold is used when generating an evaluation of the distribution. We note :math:`F` the CDF of the non truncated distribution: If :math:`F(upperBound)-F(lowerBound)<\tau`: a CDF inversion is performed. If :math:`F(upperBound)-F(lowerBound)>\tau`: rejection." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedDistribution::setThresholdRealization "Set the threshold used when generating an evaluation of the distribution. Parameters ---------- threshold : float, :math:`\tau \in [0, 1]` This threshold is used when generating an evaluation of the distribution. We note :math:`F` the CDF of the non truncated distribution: If :math:`F(upperBound)-F(lowerBound)<\tau`: a CDF inversion is performed. If :math:`F(upperBound)-F(lowerBound)>\tau`: rejection." openturns-1.9/python/src/TruncatedNormal.i000066400000000000000000000004361307543307100210120ustar00rootroot00000000000000// SWIG file TruncatedNormal.i %{ #include "openturns/TruncatedNormal.hxx" %} %include TruncatedNormal_doc.i %include openturns/TruncatedNormal.hxx namespace OT { %extend TruncatedNormal { TruncatedNormal(const TruncatedNormal & other) { return new OT::TruncatedNormal(other); } } } openturns-1.9/python/src/TruncatedNormalFactory.i000066400000000000000000000005261307543307100223420ustar00rootroot00000000000000// SWIG file TruncatedNormalFactory.i %{ #include "openturns/TruncatedNormalFactory.hxx" %} %include TruncatedNormalFactory_doc.i %include openturns/TruncatedNormalFactory.hxx namespace OT { %extend TruncatedNormalFactory { TruncatedNormalFactory(const TruncatedNormalFactory & other) { return new OT::TruncatedNormalFactory(other); } } } openturns-1.9/python/src/TruncatedNormalFactory_doc.i.in000066400000000000000000000015561307543307100236000ustar00rootroot00000000000000%feature("docstring") OT::TruncatedNormalFactory "Truncated Normal factory. Available constructor: TruncatedNormalFactory() The parameters are estimated by numerical maximum likelihood estimation. See also -------- DistributionFactory, TruncatedNormal" // --------------------------------------------------------------------- %feature("docstring") OT::TrapezoidalFactory::setOptimizationAlgorithm "Accessor to the solver. Parameters ---------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." // --------------------------------------------------------------------- %feature("docstring") OT::TrapezoidalFactory::getOptimizationAlgorithm "Accessor to the solver. Returns ------- solver : :class:`~openturns.OptimizationAlgorithm` The solver used for numerical optimization of the likelihood." openturns-1.9/python/src/TruncatedNormal_doc.i.in000066400000000000000000000073611307543307100222500ustar00rootroot00000000000000%feature("docstring") OT::TruncatedNormal "TruncatedNormal distribution. Available constructors: TruncatedNormal(*mu=0.0, sigma=1.0, a=-1.0, b=1.0*) Parameters ---------- mu : float Mean. sigma : float, :math:`\sigma > 0` Standard deviation. a : float Lower bound. b : float, :math:`a < b` Upper bound. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{\sigma} \frac{ \phi \left(\frac{x - \mu}{\sigma}\right)} { \Phi \left(\frac{b - \mu}{\sigma}\right) - \Phi \left(\frac{a - \mu}{\sigma}\right)}, \quad x \in [a; b] where :math:`\phi` and :math:`\Phi` are, respectively, the probability density distribution function and the cumulative distribution function of a standard normal distribution. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \mu + \frac{\phi(\frac{a - \mu}{\sigma}) - \phi(\frac{b - \mu}{\sigma})} {\Phi(\frac{b - \mu}{\sigma}) - \Phi(\frac{a - \mu}{\sigma})}\sigma \\ \Var{X} & = & \sigma \left[1 +\frac{\frac{a - \mu}{\sigma} \phi(\frac{a - \mu}{\sigma}) - \frac{b - \mu}{\sigma} \phi(\frac{b - \mu}{\sigma})} {\Phi(\frac{b - \mu}{\sigma}) - \Phi(\frac{a - \mu}{\sigma})} -\left( \frac{\phi(\frac{a - \mu}{\sigma}) - \phi(\frac{b - \mu}{\sigma})} {\Phi(\frac{b - \mu}{\sigma}) - \Phi(\frac{a - \mu}{\sigma})} \right)^2 \right]^\frac{1}{2} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.TruncatedNormal(0.5, 3.0, -2.0, 2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::getB "Accessor to the distribution's upper bound. Returns ------- b : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::setMu "Accessor to the distribution's mean. Parameters ---------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::setSigma "Accessor to the distribution's standard deviation. Parameters ---------- sigma : float, :math:`\sigma > 0` Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::setA "Accessor to the distribution's lower bound. Parameters ---------- a : float, :math:`a < b` Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::TruncatedNormal::setB "Accessor to the distribution's upper bound. Parameters ---------- b : float, :math:`b > a` Upper bound." openturns-1.9/python/src/Tuples.i000066400000000000000000000003261307543307100171620ustar00rootroot00000000000000// SWIG file Tuples.i %{ #include "openturns/Tuples.hxx" %} %include Tuples_doc.i %include openturns/Tuples.hxx namespace OT { %extend Tuples { Tuples(const Tuples & other) { return new OT::Tuples(other); } } } openturns-1.9/python/src/Tuples_doc.i.in000066400000000000000000000031231307543307100204120ustar00rootroot00000000000000%feature("docstring") OT::Tuples "Tuples generator. Available constructors: Tuples() Tuples(*bounds*) Parameters ---------- bounds : :class:`~openturns.Indices` The cardinal of all the sets forming the cartesian product. See also -------- CombinatorialGenerator, Combinations, KPermutations Notes ----- In the first usage, the generator is built using the default values :math:`bounds = [1]`. In the second usage, the generator produces all the indices :math:`[i_0, \ldots, i_{d-1}]` with :math:`i_k \in \{0, \ldots, bounds[k] - 1\}` where :math:`d` is the dimension of *bounds*. The number of indices generated is: .. math:: \prod_{k = 0}^{d - 1} bounds[k] The tuples generator generates a collection of :class:`~openturns.Indices` that contains all the elements of the following Cartesian product: .. math:: \prod_{k = 0}^{d - 1} \{ 0, \ldots, bounds[k] -1 \} Examples -------- >>> import openturns as ot >>> tuples = ot.Tuples([3, 4]) >>> print(tuples.generate()) [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2],[0,3],[1,3],[2,3]]#12 " // --------------------------------------------------------------------- %feature("docstring") OT::Tuples::getBounds "Accessor to the bounds. Returns ------- bounds : :class:`~openturns.Indices` The cardinal of all the sets forming the cartesian product." // --------------------------------------------------------------------- %feature("docstring") OT::Tuples::setBounds "Accessor to the bounds. Parameters ---------- bounds : :class:`~openturns.Indices` The cardinal of all the sets forming the cartesian product." openturns-1.9/python/src/TypedCollectionInterfaceObject.i000066400000000000000000000071331307543307100237620ustar00rootroot00000000000000// SWIG file TypedCollectionInterfaceObject.i %{ #include "openturns/TypedCollectionInterfaceObject.hxx" %} %ignore OT::TypedCollectionInterfaceObject::swap; %define TypedCollectionInterfaceObjectMisnamedHelper(Namespace, Interface, CollectionType) %template(CollectionType) OT::Collection; %typemap(in) const CollectionType & { if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else { try { $1 = OT::buildCollectionFromPySequence< Namespace::Interface >($input); } catch (OT::InvalidArgumentException &) { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a collection of " # Interface); } } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const CollectionType & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || OT::canConvertCollectionObjectFromPySequence< Namespace::Interface >($input); } %apply const CollectionType & { const OT::Collection & }; %enddef %define OTTypedCollectionInterfaceObjectMisnamedHelper(Interface,CollectionType) TypedCollectionInterfaceObjectMisnamedHelper(OT, Interface, CollectionType) %enddef %define OTTypedCollectionInterfaceObjectHelper(Interface) OTTypedCollectionInterfaceObjectMisnamedHelper(Interface, Interface ## Collection) %enddef %define OTDefaultCollectionConvertFunctionsMisnamed(Interface,Implementation) %{ namespace OT { template <> struct traitsPythonType { typedef _PyObject_ Type; }; template <> inline bool canConvert< _PyObject_, OT::Interface >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__ ## Interface, 0 ))) { OT::Interface * p_it = reinterpret_cast< OT::Interface * >( ptr ); return p_it != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__ ## Implementation, 0 ))) { OT::Implementation * p_impl = reinterpret_cast< OT::Implementation * >( ptr ); return p_impl != NULL; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); return p_impl != NULL && !p_impl->isNull(); } return false; } template <> inline OT::Interface convert< _PyObject_, OT::Interface >(PyObject * pyObj) { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__ ## Interface, 0 ))) { OT::Interface * p_it = reinterpret_cast< OT::Interface * >( ptr ); return *p_it; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIGTYPE_p_OT__ ## Implementation, 0 ))) { OT::Implementation * p_impl = reinterpret_cast< OT::Implementation * >( ptr ); return *p_impl; } else if (SWIG_IsOK(SWIG_ConvertPtr( pyObj, &ptr, SWIG_TypeQuery("OT::Pointer *"), 0))) { OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >( ptr ); return **p_impl; } else { throw OT::InvalidArgumentException(HERE) << "Object passed as argument is not convertible to a Interface"; } return OT::Interface(); } } /* namespace OT */ %} %enddef %define OTDefaultCollectionConvertFunctions(Interface) OTDefaultCollectionConvertFunctionsMisnamed(Interface,Interface ## Implementation) %enddef %include openturns/TypedCollectionInterfaceObject.hxx namespace OT { %extend TypedCollectionInterfaceObject { void erase(UnsignedInteger position) { self->erase(position); } } } openturns-1.9/python/src/TypedInterfaceObject.i000066400000000000000000000036301307543307100217440ustar00rootroot00000000000000// SWIG file TypedInterfaceObject.i %{ #include "openturns/TypedInterfaceObject.hxx" %} %ignore OT::TypedInterfaceObject::swap; %define TypedInterfaceObjectImplementationHelper(Namespace, Interface, Implementation) %template(Implementation ## TypedInterfaceObject) OT::TypedInterfaceObject; %typemap(in) const Namespace::Interface & { void * ptr = 0; if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { // From interface class, ok } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIGTYPE_p_ ## Namespace ## __ ## Implementation, 0))) { // From Implementation* Namespace::Implementation * p_impl = reinterpret_cast< Namespace::Implementation * >(ptr); $1 = new Namespace::Interface(*p_impl); } else if (SWIG_IsOK(SWIG_ConvertPtr($input, &ptr, SWIG_TypeQuery("OT::Pointer<" # Namespace "::Implementation> *"), 0))) { // From Pointer OT::Pointer * p_impl = reinterpret_cast< OT::Pointer * >(ptr); $1 = new Namespace::Interface(**p_impl); } else { SWIG_exception(SWIG_TypeError, "Object passed as argument is not convertible to a " # Interface); } } %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const Namespace::Interface & { $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIGTYPE_p_ ## Namespace ## __ ## Implementation, 0)) || SWIG_IsOK(SWIG_ConvertPtr($input, NULL, SWIG_TypeQuery("OT::Pointer<" # Namespace "::Implementation> *"), 0)); } %enddef %define OTTypedInterfaceObjectImplementationHelper(Interface, Implementation) TypedInterfaceObjectImplementationHelper(OT, Interface, Implementation) %enddef %define OTTypedInterfaceObjectHelper(Interface) OTTypedInterfaceObjectImplementationHelper(Interface,Interface ## Implementation) %enddef %include openturns/TypedInterfaceObject.hxx openturns-1.9/python/src/UncertaintyAnalyticalTemplateDefs.i000066400000000000000000000000621307543307100245100ustar00rootroot00000000000000// SWIG file UncertaintyAnalyticalTemplateDefs.i openturns-1.9/python/src/UncertaintyBayesianTemplateDefs.i000066400000000000000000000003541307543307100241660ustar00rootroot00000000000000// SWIG file UncertaintyBayesianTemplateDefs.i %template(CalibrationStrategyImplementationPointer) OT::Pointer; %template(CalibrationStrategyCollection) OT::Collection; openturns-1.9/python/src/UncertaintyClassificationTemplateDefs.i000066400000000000000000000000671307543307100253670ustar00rootroot00000000000000// SWIG file UncertaintyClassificationTemplateDefs.i openturns-1.9/python/src/UncertaintyDistTemplateDefs.i000066400000000000000000000000531307543307100233320ustar00rootroot00000000000000// SWIG file UncertaintyDistTemplateDefs.i openturns-1.9/python/src/UncertaintyMetaModelTemplateDefs.i000066400000000000000000000000611307543307100242750ustar00rootroot00000000000000// SWIG file UncertaintyMetaModelTemplateDefs.i openturns-1.9/python/src/UncertaintyModelCopulaCollection.i000066400000000000000000000002341307543307100243520ustar00rootroot00000000000000// SWIG file UncertaintyModelCopulaCollection.i OTDefaultCollectionConvertFunctions(Distribution) OTDefaultCollectionConvertFunctions(DistributionFactory) openturns-1.9/python/src/UncertaintyModelCopulaTemplateDefs.i000066400000000000000000000007461307543307100246440ustar00rootroot00000000000000// SWIG file UncertaintyModelCopulaTemplateDefs.i %template(DistributionFactoryImplementationPointer) OT::Pointer; %template(DistributionImplementationPointer) OT::Pointer; %template(RandomVectorImplementationPointer) OT::Pointer; %template(DistributionCollection) OT::Collection; %template(DistributionFactoryCollection) OT::Collection; openturns-1.9/python/src/UncertaintyOrthogonalBasisTemplateDefs.i000066400000000000000000000000661307543307100255310ustar00rootroot00000000000000// SWIG file UncertaintyOrthogonalBasisTemplateDefs.i openturns-1.9/python/src/UncertaintyProcessTemplateDefs.i000066400000000000000000000000561307543307100240500ustar00rootroot00000000000000// SWIG file UncertaintyProcessTemplateDefs.i openturns-1.9/python/src/UncertaintyRandomVectorTemplateDefs.i000066400000000000000000000002041307543307100250300ustar00rootroot00000000000000// SWIG file UncertaintyRandomVectorTemplateDefs.i %template(ProcessImplementationPointer) OT::Pointer; openturns-1.9/python/src/UncertaintySimulationTemplateDefs.i000066400000000000000000000003561307543307100245610ustar00rootroot00000000000000// SWIG file UncertaintySimulationTemplateDefs.i %template(RootStrategyImplementationPointer) OT::Pointer; %template(SamplingStrategyImplementationPointer) OT::Pointer; openturns-1.9/python/src/UncertaintyStatTestsTemplateDefs.i000066400000000000000000000000611307543307100243640ustar00rootroot00000000000000// SWIG file UncertaintystatTestsTemplateDefs.i openturns-1.9/python/src/UncertaintyTemplateDefs.i000066400000000000000000000000501307543307100225030ustar00rootroot00000000000000// SWIG file UncertaintyTemplateDefs.i openturns-1.9/python/src/UncertaintyTransformationTemplateDefs.i000066400000000000000000000000661307543307100254410ustar00rootroot00000000000000// SWIG file UncertaintyTransformationTemplateDefs.i openturns-1.9/python/src/UncertaintyWeightedExperimentTemplateDefs.i000066400000000000000000000000711307543307100262300ustar00rootroot00000000000000// SWIG file UncertaintyWeightedExperimentTemplateDefs.i openturns-1.9/python/src/UniVariateFunction.i000066400000000000000000000005541307543307100214660ustar00rootroot00000000000000// SWIG file UniVariateFunction.i %{ #include "openturns/UniVariateFunction.hxx" %} %include UniVariateFunction_doc.i OTTypedInterfaceObjectHelper(UniVariateFunction) %include openturns/UniVariateFunction.hxx namespace OT { %extend UniVariateFunction { UniVariateFunction(const UniVariateFunction & other) { return new OT::UniVariateFunction(other); } } } openturns-1.9/python/src/UniVariateFunctionFactory.i000066400000000000000000000005551307543307100230170ustar00rootroot00000000000000// SWIG file UniVariateFunctionFactory.i %{ #include "openturns/UniVariateFunctionFactory.hxx" %} %include UniVariateFunctionFactory_doc.i %include openturns/UniVariateFunctionFactory.hxx namespace OT{ %extend UniVariateFunctionFactory { UniVariateFunctionFactory(const UniVariateFunctionFactory & other) { return new OT::UniVariateFunctionFactory(other); } } } openturns-1.9/python/src/UniVariateFunctionFactory_doc.i.in000066400000000000000000000011721307543307100242450ustar00rootroot00000000000000%define OT_UniVariateFunctionFactory_doc "Base class for univariate function factories." %enddef %feature("docstring") OT::UniVariateFunctionFactory OT_UniVariateFunctionFactory_doc // --------------------------------------------------------------------- %define OT_UniVariateFunctionFactory_build_doc "Build the :math:`n`-th order univariate function. Parameters ---------- n : int, :math:`0 \leq n` Function order. Returns ------- function : :class:`~openturns.UniVariateFunction` Requested univariate function." %enddef %feature("docstring") OT::UniVariateFunctionFactory::build OT_UniVariateFunctionFactory_build_doc openturns-1.9/python/src/UniVariateFunctionFamily.i000066400000000000000000000012201307543307100226170ustar00rootroot00000000000000// SWIG file UniVariateFunctionFamily.i %{ #include "openturns/UniVariateFunctionFamily.hxx" %} %include UniVariateFunctionFamily_doc.i OTDefaultCollectionConvertFunctionsMisnamed(UniVariateFunctionFamily, UniVariateFunctionFactory) OTTypedInterfaceObjectImplementationHelper(UniVariateFunctionFamily, UniVariateFunctionFactory) OTTypedCollectionInterfaceObjectMisnamedHelper(UniVariateFunctionFamily, FunctionFamilyCollection) %include openturns/UniVariateFunctionFamily.hxx namespace OT{ %extend UniVariateFunctionFamily { UniVariateFunctionFamily(const UniVariateFunctionFamily & other) { return new OT::UniVariateFunctionFamily(other); } } } openturns-1.9/python/src/UniVariateFunctionFamily_doc.i.in000066400000000000000000000004171307543307100240600ustar00rootroot00000000000000// UniVariateFunctionFamily docstrings are defined in UniVariateFunctionFactory_doc.i.in %feature("docstring") OT::UniVariateFunctionFamily OT_UniVariateFunctionFactory_doc %feature("docstring") OT::UniVariateFunctionFamily::build OT_UniVariateFunctionFactory_build_doc openturns-1.9/python/src/UniVariateFunctionImplementation.i000066400000000000000000000006461307543307100243760ustar00rootroot00000000000000// SWIG file UniVariateFunctionImplementation.i %{ #include "openturns/UniVariateFunctionImplementation.hxx" %} %include UniVariateFunctionImplementation_doc.i %include openturns/UniVariateFunctionImplementation.hxx namespace OT { %extend UniVariateFunctionImplementation { UniVariateFunctionImplementation(const UniVariateFunctionImplementation & other) { return new OT::UniVariateFunctionImplementation(other); } } } openturns-1.9/python/src/UniVariateFunctionImplementation_doc.i.in000066400000000000000000000034431307543307100256260ustar00rootroot00000000000000%define OT_UniVariateFunction_doc "Base class for univariate functions." %enddef %feature("docstring") OT::UniVariateFunctionImplementation OT_UniVariateFunction_doc // --------------------------------------------------------------------- %define OT_UniVariateFunction_gradient_doc "Compute the gradient at point :math:`x`. Returns ------- gradient : float The value of the function's first-order derivative at point :math:`x`. Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.gradient(1.0)) 8.0" %enddef %feature("docstring") OT::UniVariateFunctionImplementation::gradient OT_UniVariateFunction_gradient_doc // --------------------------------------------------------------------- %define OT_UniVariateFunction_hessian_doc "Compute the hessian at point :math:`x`. Parameters ---------- x : float Input value. Returns ------- hessian : float The value of the function's second-order derivative at point :math:`x`." %enddef %feature("docstring") OT::UniVariateFunctionImplementation::hessian OT_UniVariateFunction_hessian_doc // --------------------------------------------------------------------- %define OT_UniVariateFunction_draw_doc "Draw the function. Parameters ---------- x_min : float, optional The starting value that is used for meshing the x-axis. x_max : float, optional, :math:`x_{\max} > x_{\min}` The ending value that is used for meshing the x-axis. n_points : int, optional The number of points that is used for meshing the x-axis. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> f = ot.UniVariatePolynomial([1.0, 2.0, -3.0, 5.0]) >>> View(f.draw(-10.0, 10.0, 100)).show()" %enddef %feature("docstring") OT::UniVariateFunctionImplementation::draw OT_UniVariateFunction_draw_doc openturns-1.9/python/src/UniVariateFunction_doc.i.in000066400000000000000000000006451307543307100227210ustar00rootroot00000000000000// UniVariateFunction docstrings are defined in UniVariateFunctionImplementation_doc.i.in %feature("docstring") OT::UniVariateFunction OT_UniVariateFunction_doc %feature("docstring") OT::UniVariateFunction::gradient OT_UniVariateFunction_gradient_doc %feature("docstring") OT::UniVariateFunction::hessian OT_UniVariateFunction_hessian_doc %feature("docstring") OT::UniVariateFunction::draw OT_UniVariateFunction_draw_docopenturns-1.9/python/src/UniVariatePolynomial.i000066400000000000000000000015211307543307100220170ustar00rootroot00000000000000// SWIG file UniVariatePolynomial.i %{ #include "openturns/UniVariatePolynomial.hxx" namespace OT { template <> struct traitsPythonType { typedef _PySequence_ Type; }; template <> inline OT::UniVariatePolynomial convert<_PySequence_,OT::UniVariatePolynomial>(PyObject * pyObj) { return OT::convert(pyObj); } } /* namespace OT */ %} %include UniVariatePolynomial_doc.i OTTypedInterfaceObjectHelper(UniVariatePolynomial) %include openturns/UniVariatePolynomial.hxx namespace OT { %extend UniVariatePolynomial { UniVariatePolynomial(const UniVariatePolynomial & other) { return new OT::UniVariatePolynomial(other); } UniVariatePolynomial(PyObject * pyObj) { return new OT::UniVariatePolynomial( OT::convert(pyObj) ); } } } openturns-1.9/python/src/UniVariatePolynomialImplementation.i000066400000000000000000000006661307543307100247360ustar00rootroot00000000000000// SWIG file UniVariatePolynomialImplementation.i %{ #include "openturns/UniVariatePolynomialImplementation.hxx" %} %include UniVariatePolynomialImplementation_doc.i %include openturns/UniVariatePolynomialImplementation.hxx namespace OT { %extend UniVariatePolynomialImplementation { UniVariatePolynomialImplementation(const UniVariatePolynomialImplementation & other) { return new OT::UniVariatePolynomialImplementation(other); } } } openturns-1.9/python/src/UniVariatePolynomialImplementation_doc.i.in000066400000000000000000000105701307543307100261630ustar00rootroot00000000000000%define OT_UniVariatePolynomial_doc "Base class for univariate polynomials. Parameters ---------- coefficients : sequence of float Polynomial coefficients in increasing polynomial order. Examples -------- >>> import openturns as ot Create a univariate polynomial from a list of coefficients: >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P) 1 + 2 * X + 3 * X^2 Univariate polynomials are of course callable: >>> print(P(1.0)) 6.0 Addition, subtraction and multiplication of univariate polynomials: >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> Q = ot.UniVariatePolynomial([1.0, 2.0]) >>> print('(%s) + (%s) = %s' % (P, Q, P + Q)) (1 + 2 * X + 3 * X^2) + (1 + 2 * X) = 2 + 4 * X + 3 * X^2 >>> print('(%s) - (%s) = %s' % (P, Q, P - Q)) (1 + 2 * X + 3 * X^2) - (1 + 2 * X) = 3 * X^2 >>> print('(%s) * (%s) = %s' % (P, Q, P * Q)) (1 + 2 * X + 3 * X^2) * (1 + 2 * X) = 1 + 4 * X + 7 * X^2 + 6 * X^3" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation OT_UniVariatePolynomial_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_derivate_doc "Build the first-order derivative polynomial. Returns ------- derivated_polynomial : :class:`~openturns.Univariate` The first-order derivated polynomial. Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.derivate()) 2 + 6 * X" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::derivate OT_UniVariatePolynomial_derivate_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_getCoefficients_doc "Accessor to the polynomials's coefficients. Returns ------- coefficients : :class:`~openturns.Point` Polynomial coefficients in increasing polynomial order. See Also -------- setCoefficients Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.getCoefficients()) [1,2,3]" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::getCoefficients OT_UniVariatePolynomial_getCoefficients_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_getDegree_doc "Accessor to the polynomials's degree. Returns ------- degree : int Polynomial's degree. Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.getDegree()) 2" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::getDegree OT_UniVariatePolynomial_getDegree_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_getRoots_doc "Compute the roots of the polynomial. Returns ------- roots : list of complex values Polynomial's roots. Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.getRoots()) [(-0.333333,0.471405),(-0.333333,-0.471405)]" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::getRoots OT_UniVariatePolynomial_getRoots_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_incrementDegree_doc "Multiply the polynomial by :math:`x^k`. Parameters ---------- degree : int, optional The incremented degree :math:`k`. Default uses :math:`k = 1`. Returns ------- incremented_degree_polynomial : :class:`~openturns.UniVariatePolynomial` Polynomial with incremented degree. Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> print(P.incrementDegree()) X + 2 * X^2 + 3 * X^3 >>> print(P.incrementDegree(2)) X^2 + 2 * X^3 + 3 * X^4" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::incrementDegree OT_UniVariatePolynomial_incrementDegree_doc // --------------------------------------------------------------------- %define OT_UniVariatePolynomial_setCoefficients_doc "Accessor to the polynomials's coefficients. Parameters ---------- coefficients : sequence of float Polynomial coefficients in increasing polynomial order. See Also -------- getCoefficients Examples -------- >>> import openturns as ot >>> P = ot.UniVariatePolynomial([1.0, 2.0, 3.0]) >>> P.setCoefficients([4.0, 2.0, 1.0]) >>> print(P) 4 + 2 * X + X^2" %enddef %feature("docstring") OT::UniVariatePolynomialImplementation::setCoefficients OT_UniVariatePolynomial_setCoefficients_doc openturns-1.9/python/src/UniVariatePolynomial_doc.i.in000066400000000000000000000020241307543307100232500ustar00rootroot00000000000000// UniVariatePolynomial docstrings are defined in UniVariatePolynomialImplementation_doc.i.in %feature("docstring") OT::UniVariatePolynomial OT_UniVariatePolynomial_doc %feature("docstring") OT::UniVariatePolynomial::gradient OT_UniVariateFunction_gradient_doc %feature("docstring") OT::UniVariatePolynomial::hessian OT_UniVariateFunction_hessian_doc %feature("docstring") OT::UniVariatePolynomial::derivate OT_UniVariatePolynomial_derivate_doc %feature("docstring") OT::UniVariatePolynomial::draw OT_UniVariateFunction_draw_doc %feature("docstring") OT::UniVariatePolynomial::getCoefficients OT_UniVariatePolynomial_getCoefficients_doc %feature("docstring") OT::UniVariatePolynomial::getDegree OT_UniVariatePolynomial_getDegree_doc %feature("docstring") OT::UniVariatePolynomial::getRoots OT_UniVariatePolynomial_getRoots_doc %feature("docstring") OT::UniVariatePolynomial::incrementDegree OT_UniVariatePolynomial_incrementDegree_doc %feature("docstring") OT::UniVariatePolynomial::setCoefficients OT_UniVariatePolynomial_setCoefficients_doc openturns-1.9/python/src/Uniform.i000066400000000000000000000003361307543307100173260ustar00rootroot00000000000000// SWIG file Uniform.i %{ #include "openturns/Uniform.hxx" %} %include Uniform_doc.i %include openturns/Uniform.hxx namespace OT { %extend Uniform { Uniform(const Uniform & other) { return new OT::Uniform(other); } } } openturns-1.9/python/src/UniformFactory.i000066400000000000000000000004261307543307100206560ustar00rootroot00000000000000// SWIG file UniformFactory.i %{ #include "openturns/UniformFactory.hxx" %} %include UniformFactory_doc.i %include openturns/UniformFactory.hxx namespace OT { %extend UniformFactory { UniformFactory(const UniformFactory & other) { return new OT::UniformFactory(other); } } } openturns-1.9/python/src/UniformFactory_doc.i.in000066400000000000000000000002171307543307100221060ustar00rootroot00000000000000%feature("docstring") OT::UniformFactory "Uniform factory. Available constructor: UniformFactory() See also -------- DistributionFactory"openturns-1.9/python/src/Uniform_doc.i.in000066400000000000000000000030261307543307100205570ustar00rootroot00000000000000%feature("docstring") OT::Uniform "Uniform distribution. Available constructors: Uniform(*a=-1.0, b=1.0*) Parameters ---------- a : float Lower bound. b : float, :math:`b > a` Upper bound. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{1}{b-a}, \quad x \in [a; b] with :math:`a < b`. Its first moments are defined as: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{a+b}{2} \\ \Var{X} & = & \frac{(b-a)^2}{12} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Uniform(2.0, 3.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Uniform::getA "Accessor to the distribution's lower bound. Returns ------- a : float Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Uniform::getB "Accessor to the distribution's upper bound. Returns ------- b : float Upper bound." // --------------------------------------------------------------------- %feature("docstring") OT::Uniform::setA "Accessor to the distribution's lower bound. Parameters ---------- a : float, :math:`a < b` Lower bound." // --------------------------------------------------------------------- %feature("docstring") OT::Uniform::setB "Accessor to the distribution's upper bound. Parameters ---------- b : float, :math:`a < b` Upper bound." openturns-1.9/python/src/UserDefined.i000066400000000000000000000004411307543307100201010ustar00rootroot00000000000000// SWIG file UserDefined.i %{ #include "openturns/UserDefined.hxx" %} %include UserDefined_doc.i %include openturns/UserDefined.hxx namespace OT { %extend UserDefined { UserDefined(const UserDefined & other) { return new OT::UserDefined(other); } } // UserDefined } // OT openturns-1.9/python/src/UserDefinedCovarianceModel.i000066400000000000000000000005661307543307100230650ustar00rootroot00000000000000// SWIG file UserDefinedCovarianceModel.i %{ #include "openturns/UserDefinedCovarianceModel.hxx" %} %include UserDefinedCovarianceModel_doc.i %include openturns/UserDefinedCovarianceModel.hxx namespace OT{ %extend UserDefinedCovarianceModel { UserDefinedCovarianceModel(const UserDefinedCovarianceModel & other) { return new OT::UserDefinedCovarianceModel(other); } } } openturns-1.9/python/src/UserDefinedCovarianceModel_doc.i.in000066400000000000000000000070121307543307100243100ustar00rootroot00000000000000%feature("docstring") OT::UserDefinedCovarianceModel "Covariance model defined by the User. Parameters ---------- mesh : :class:`~openturns.Mesh` A mesh which contains `N` vertices. sample : :class:`~openturns.CovarianceMatrixCollection` A collection of :math:`N(N+1)/2` covariance matrices. Notes ----- The covariance model is built as follows. We consider a process :math:`X: \Omega \times \cD \rightarrow \Rset^d` with :math:`\cD \in \Rset^n`. We note :math:`(\vect{t}_0,\dots, \vect{t}_{N-1})` the vertices of :math:`\cM \in \cD` and :math:`(\mat{C}_{k,\ell})_{0 \leq \ell \leq k \leq N-1}` where :math:`\mat{C}_{k,\ell} \in \cS_d^+(\Rset)`. Care: The covariance matrices :math:`(\mat{C}_{i,j})_{0 \leq j \leq i \leq N-1}` must be given in the following order: .. math:: \mat{C}_{0,0}, \, \mat{C}_{1, 0}, \, \mat{C}_{1,1}, \, \mat{C}_{2,0}, \,\mat{C}_{2,1},\, \mat{C}_{2,2}, \,\dots which corresponds to the global covariance matrix, which lower part is: .. math:: \left( \begin{array}{cccc} \mat{C}_{0,0}& & & \\ \mat{C}_{1,0}& \mat{C}_{1,1}& & \\ \mat{C}_{2,0}& \mat{C}_{2,1}& \mat{C}_{2,2}& \\ \dots & \dots & \dots & \dots \end{array} \right) We build a covariance function which is a piecewise constant function defined on :math:`\cD \times \cD` by: .. math:: \forall (\vect{s}, \vect{t}) \in \cD \times \cD, \, \quad C(\vect{s}, \vect{t}) = \mat{C}_{k(\vect{s}),k(\vect{t})} where :math:`k(\vect{s})` is such that :math:`\vect{t}_{k(\vect{s})}` is the vertex of :math:`\cM` the nearest to :math:`\vect{s}`. Note that: - the matrix :math:`\mat{C}_{k,\ell}` has the index :math:`n=\ell +\dfrac{k(k+1)}{2}` in the collection of covariance matrcies fixed by the User; - inversely, the matrix stored at index `n` in the collection is the matrix :math:`\mat{C}_{k,\ell}` where: .. math:: k=\left\lfloor \dfrac{1}{2}\left( \sqrt{8n+1}-1 \right) \right\rfloor, \quad \ell= n-\dfrac{k(k+1)}{2} Examples -------- >>> import openturns as ot >>> import math as m Create the covariance function at (s,t): >>> def C(s, t): ... return m.exp( -4.0 * abs(s - t) / (1 + (s * s + t * t))) Create the time grid: >>> N = 32 >>> a = 4.0 >>> myMesh = ot.IntervalMesher([N]).build(ot.Interval(-a, a)) Create the collection of elementary covariance matrices ie the n(n+1)/2 small covariance matrices quantifying the covariance between X(s) and X(t) for s, t in the vertices of the mesh and index(s) <= index(t): >>> myCovarianceCollection = ot.CovarianceMatrixCollection() >>> for k in range(myMesh.getVerticesNumber()): ... t = myMesh.getVertices()[k] ... for l in range(k + 1): ... s = myMesh.getVertices()[l] ... matrix = ot.CovarianceMatrix(1) ... matrix[0, 0] = C(s[0], t[0]) ... myCovarianceCollection.add(matrix) Create the covariance model: >>> myCovarianceModel = ot.UserDefinedCovarianceModel(myMesh, myCovarianceCollection) " // --------------------------------------------------------------------- %feature("docstring") OT::UserDefinedCovarianceModel::getMesh "Accessor to the mesh. Returns ------- mesh : :class:`~openturns.Mesh` The mesh associated to the collection of covariance matrices. " // --------------------------------------------------------------------- %feature("docstring") OT::UserDefinedCovarianceModel::getTimeGrid "Accessor to the time grid. Returns ------- mesh : :class:`~openturns.RegularGrid` The time grid associated to the collection of covariance matrices when the mesh can be interpreted as a regular time grid. " openturns-1.9/python/src/UserDefinedFactory.i000066400000000000000000000004661307543307100214400ustar00rootroot00000000000000// SWIG file UserDefinedFactory.i %{ #include "openturns/UserDefinedFactory.hxx" %} %include UserDefinedFactory_doc.i %include openturns/UserDefinedFactory.hxx namespace OT { %extend UserDefinedFactory { UserDefinedFactory(const UserDefinedFactory & other) { return new OT::UserDefinedFactory(other); } } } openturns-1.9/python/src/UserDefinedFactory_doc.i.in000066400000000000000000000002541307543307100226650ustar00rootroot00000000000000%feature("docstring") OT::UserDefinedFactory "UserDefined factory. Available constructor: UserDefinedFactory() See also -------- DistributionFactory, UserDefined" openturns-1.9/python/src/UserDefinedSpectralModel.i000066400000000000000000000005451307543307100225650ustar00rootroot00000000000000// SWIG file UserDefinedSpectralModel.i %{ #include "openturns/UserDefinedSpectralModel.hxx" %} %include UserDefinedSpectralModel_doc.i %include openturns/UserDefinedSpectralModel.hxx namespace OT{ %extend UserDefinedSpectralModel { UserDefinedSpectralModel(const UserDefinedSpectralModel & other) { return new OT::UserDefinedSpectralModel(other); } } } openturns-1.9/python/src/UserDefinedSpectralModel_doc.i.in000066400000000000000000000066411307543307100240220ustar00rootroot00000000000000%feature("docstring") OT::UserDefinedSpectralModel "Spectral model defined by the User. Parameters ---------- frequency : :class:`~openturns.RegularGrid` The frequency grid :math:`(-f_c, \dots, f_c)` with step :math:`\delta f` on which the model is built. densityCollectionFunction : :class:`~openturns.HermitianMatrixCollection` Collection of hermitian matrices :math:`\in \mathbb{M}_d(\mathbb{C})` which are the images of each point of the frequency grid through the density spectral function. Notes ----- We consider a multivariate process :math:`X: \Omega \times \cD \rightarrow \Rset^d` of dimension :math:`d` where :math:`\cD \in \Rset^n`. We only treat here the case where the domain is of dimension 1: :math:`\cD \in \Rset` (:math:`n=1`). We denote :math:`(\vect{t}_0, \dots, \vect{t}_{N-1})` the time stamps of the time grid. :math:`X` is supposed to be a stationary second order process and we suppose that its spectral density function :math:`S : \Rset \rightarrow \mathcal{H}^+(d)` defined by: .. math:: :label: fourier_transform \forall \vect{f} \in \Rset^n, \,S(\vect{f}) = \int_{\Rset^n}\exp\left\{ -2i\pi <\vect{f},\vect{\tau}> \right\} C^{stat}(\vect{\tau})\di{\vect{\tau}} exists, where :math:`\mathcal{H}^+(d) \in \mathcal{M}_d(\Cset)` is the set of *d*-dimensional positive definite hermitian matrices. We get a piecewise constant function on :math:`[-f_c,f_c]`, where the intervals on which the density spectral function is constant are centered on the points of the frequency grid, of length :math:`\delta f`. Then, it is possible to evaluate the spectral density function for a given frequency thanks to the method *computeSpectralDensity*: if the frequency is not inside the interval :math:`[-f_c,f_c]`, OpenTURNS returns an exception. Otherwise, it returns the hermitian matrix of the subinterval of :math:`[-f_c,f_c]` that contains the given frequency. Examples -------- Create the frequency grid: >>> import openturns as ot >>> from math import exp >>> fmin = 0.1 >>> df = 0.5 >>> N = int((10.0 - fmin)/ df) >>> myFrequencyGrid = ot.RegularGrid(fmin, df, N) Define the spectral function: >>> def s(f): ... if(f <= 5.0): ... return 1.0 ... else: ... x = f - 5.0 ... return exp(-2.0 * x * x) Create the collection of HermitianMatrix: >>> myCollection = ot.HermitianMatrixCollection() >>> for k in range(N): ... frequency = myFrequencyGrid.getValue(k) ... matrix = ot.HermitianMatrix(1) ... matrix[0, 0] = s(frequency) ... myCollection.add(matrix) Create the spectral model: >>> mySpectralModel = ot.UserDefinedSpectralModel(myFrequencyGrid, myCollection) " // --------------------------------------------------------------------- %define OT_UserDefinedSpectralModel_get_frequency_grid_doc "Return the frequency grid associated to the model. Returns ------- grid : :class:`~openturns.RegularGrid` The frequency grid of the model." %enddef %feature("docstring") OT::UserDefinedSpectralModel::getFrequencyGrid OT_UserDefinedSpectralModel_get_frequency_grid_doc // --------------------------------------------------------------------- %define OT_UserDefinedSpectralModel_set_frequency_grid_doc "Set the frequency grid associated to the model. Parameters ---------- grid : :class:`~openturns.RegularGrid` The frequency grid of the model." %enddef %feature("docstring") OT::UserDefinedSpectralModel::setFrequencyGrid OT_UserDefinedSpectralModel_set_frequency_grid_doc openturns-1.9/python/src/UserDefinedStationaryCovarianceModel.i000066400000000000000000000007051307543307100251360ustar00rootroot00000000000000// SWIG file UserDefinedStationaryCovarianceModel.i %{ #include "openturns/UserDefinedStationaryCovarianceModel.hxx" %} %include UserDefinedStationaryCovarianceModel_doc.i %include openturns/UserDefinedStationaryCovarianceModel.hxx namespace OT{ %extend UserDefinedStationaryCovarianceModel { UserDefinedStationaryCovarianceModel(const UserDefinedStationaryCovarianceModel & other) { return new OT::UserDefinedStationaryCovarianceModel(other); } } } openturns-1.9/python/src/UserDefinedStationaryCovarianceModel_doc.i.in000066400000000000000000000047501307543307100263740ustar00rootroot00000000000000%feature("docstring") OT::UserDefinedStationaryCovarianceModel "Stationary covariance model defined by the User. Parameters ---------- mesh : :class:`~openturns.Mesh` A mesh that contains `N` vertices. sample : :class:`~openturns.CovarianceMatrixCollection` A collection of *N* covariance matrices. Notes ----- The covariance model is built as follows. We consider a process :math:`X: \Omega \times\cD \mapsto \Rset^d` with :math:`\cD \in \Rset^n`. We note :math:`(\vect{t}_0,\dots, \vect{t}_{N-1})` the vertices of :math:`\cM \in \cD` and :math:`(\mat{C}_{k})_{0 \leq k \leq N-1}` where :math:`\mat{C}_{k} \in \cS_d^+(\Rset)` the collection of covariance matrices fixed by the User. Then we build a stationary covariance function :math:`C^{stat}` which is a piecewise constant function defined on :math:`\cD \times \cD` by: .. math:: \forall \vect{\tau} \in \cD, \, \quad C^{stat}(\vect{\tau}) = \mat{C}_k where *k* is such that :math:`\vect{t}_k` is the vertex of :math:`\cM` the nearest to :math:`\vect{\tau}`. Examples -------- Create a mesh: >>> import openturns as ot >>> # Create the time grid >>> t0 = 0.0 >>> dt = 0.5 >>> N = int((20.0 - t0)/ dt) >>> myShiftMesh = ot.RegularGrid(t0, dt, N) Create the stationary covariance function: >>> def gamma(tau): ... return 1.0 / (1.0 + tau * tau) Create the collection of N covariance matrices: >>> myCovarianceCollection = ot.CovarianceMatrixCollection() >>> for k in range(N): ... t = myShiftMesh.getValue(k) ... matrix = ot.CovarianceMatrix(1) ... matrix[0, 0] = gamma(t) ... myCovarianceCollection.add(matrix) Create the User defined stationary covariance model: >>> myCovarianceModel = ot.UserDefinedStationaryCovarianceModel(myShiftMesh,myCovarianceCollection) Compute the covariance function at the vertex tau: >>> tau = 1.5 >>> myCovModelMatrix = myCovarianceModel(tau) " // --------------------------------------------------------------------- %feature("docstring") OT::UserDefinedStationaryCovarianceModel::getMesh "Accessor to the mesh. Returns ------- mesh : :class:`~openturns.Mesh` The mesh associated to the collection of covariance matrices. " // --------------------------------------------------------------------- %feature("docstring") OT::UserDefinedStationaryCovarianceModel::getTimeGrid "Accessor to the time grid. Returns ------- mesh : :class:`~openturns.RegularGrid` The time grid associated to the collection of covariance matrices when the mesh can be interpreted as a reglar time grid. " openturns-1.9/python/src/UserDefined_doc.i.in000066400000000000000000000055141307543307100213410ustar00rootroot00000000000000%feature("docstring") OT::UserDefined "UserDefined distribution. Available constructors: UserDefined(*points*) UserDefined(*points, weights*) Parameters ---------- points : 2-d sequence of float `n` lists of `d` points :math:`x_{ij}, i = 1, \ldots, n, j = 1, \ldots, d`. weights : sequence of float List of `n` weights :math:`p_i, i = 1, \ldots, n`. If not :math:`\sum_1^n p_i = 1.0`, the weights are normalized. Notes ----- Its probability density function is defined as: .. math:: \Prob{X = x_{ij}} = p_i, \quad i = 1,\ldots,n where :math:`j =1, \ldots, d`, `d` the distribution's dimension and `n` the size of the multivariate d-dimensional distribution. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X_j} & = & \Tr{(\sum_{i=1}^n x_i p_i)}\\ \Var{X_j} & = & \Expect{X_j} - (\Expect{X_j})^2 \end{eqnarray*} with :math:`j =1, \ldots, d` and `d` the distribution's dimension. Examples -------- Create a distribution: >>> import openturns as ot >>> points = ot.Sample(4, 3) >>> for i in range(4): ... for j in range(3): ... points[i, j] = 10 * (i + 1) + 0.1 * (j + 1) >>> distribution = ot.UserDefined(points, [0.3,0.2,0.25,0.25])" // --------------------------------------------------------------------- %feature("docstring") OT::UserDefined::getX "Accessor to the distribution's :math:`x` parameter. Returns ------- coll : :class:`~openturns.Sample` Collection of points." // --------------------------------------------------------------------- %feature("docstring") OT::UserDefined::getP "Accessor to the distribution's :math:`p` parameter. Returns ------- coll : :class:`~openturns.Point` Collection of weights." // --------------------------------------------------------------------- %feature("docstring") OT::UserDefined::setData "Accessor to the distribution's :math:`x` and :math:`p` parameters. Parameters ---------- points : :class:`~openturns.Sample` Collection of points weights : :class:`~openturns.Point` Associated weights" // --------------------------------------------------------------------- %feature("docstring") OT::UserDefined::compactSupport() "Compact the support of the distribution. Compact by concatenating points of distance less than :math:`\varepsilon` and adding their weights. Notes ----- The :math:`\varepsilon` has a default value stored in the ResourceMap: to change the default value the new value :math:`1.3e-3`, use the command: >>> import openturns as ot >>> ot.ResourceMap.SetAsScalar('DiscreteDistribution-SupportEpsilon', 1e-3) The method is always used for any univariate distributions and for upper dimensions, it is only used when the number of points defining the support is less than a limit specified in the ResourceMap in the key 'UserDefined-SmallSize'. By default, the size limit is equal to :math:`1e4`. " openturns-1.9/python/src/UsualRandomVector.i000066400000000000000000000004521307543307100213230ustar00rootroot00000000000000// SWIG file UsualRandomVector.i OTAutodoc(UsualRandomVector) %{ #include "openturns/UsualRandomVector.hxx" %} %include openturns/UsualRandomVector.hxx namespace OT { %extend UsualRandomVector { UsualRandomVector(const UsualRandomVector & other) { return new OT::UsualRandomVector(other); } } } openturns-1.9/python/src/ValueFunction.i000066400000000000000000000010141307543307100204630ustar00rootroot00000000000000// SWIG file ValueFunction.i %{ #include "openturns/ValueFunction.hxx" %} %include ValueFunction_doc.i %include openturns/ValueFunction.hxx namespace OT { %extend ValueFunction { ValueFunction(const ValueFunction & other) { return new OT::ValueFunction(other); } } } %pythoncode %{ # deprecated class SpatialFunction(ValueFunction): def __init__(self, *args): super(SpatialFunction, self).__init__(*args) openturns.common.Log.Warn('class SpatialFunction is deprecated in favor of ValueFunction') %} openturns-1.9/python/src/ValueFunction_doc.i.in000066400000000000000000000051261307543307100217250ustar00rootroot00000000000000%feature("docstring") OT::ValueFunction "Spatial function. Available constructors: ValueFunction(*meshDimension=1*) ValueFunction(*g, meshDimension=1*) Parameters ---------- g : :class:`~openturns.Function` Function :math:`g: \Rset^d \mapsto \Rset^q`. meshDimension : int, :math:`n \geq 0` Dimension of the vertices of the mesh :math:`\cM`. This data is required for tests on the compatibility of dimension when a composite process is created using the spatial function. Notes ----- A spatial function :math:`f_{spat}: \cD \times \Rset^d \mapsto \cD \times \Rset^q`, with :math:`\cD \in \Rset^n`, is a particular :class:`field function ` that lets invariant the mesh of a field and defined by a function :math:`g : \Rset^d \mapsto \Rset^q` such that: .. math:: f_{spat}(\vect{t}, \vect{x})=(\vect{t}, g(\vect{x})) Let's note that the input dimension of :math:`f_{spat}` still designs the dimension of :math:`\vect{x}`: :math:`d`. Its output dimension is equal to :math:`q`. See also -------- VertexValueFunction Examples -------- >>> import openturns as ot Create a function :math:`g : \Rset^d \mapsto \Rset^q` such as: .. math:: g: \left|\begin{array}{rcl} \Rset & \rightarrow & \Rset \\ x & \mapsto & x^2 \end{array}\right. >>> g = ot.SymbolicFunction(['x'], ['x^2']) Convert :math:`g` into a spatial function with :math:`n` the dimension of the mesh of the field on which :math:`g` will be applied: >>> n = 1 >>> myValueFunction = ot.ValueFunction(g, n) >>> # Create a TimeSeries >>> tg = ot.RegularGrid(0.0, 0.2, 6) >>> data = ot.Sample(tg.getN(), g.getInputDimension()) >>> for i in range(data.getSize()): ... for j in range(data.getDimension()): ... data[i, j] = i * data.getDimension() + j >>> ts = ot.TimeSeries(tg, data) >>> print(ts) [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 2 ] 3 : [ 0.6 3 ] 4 : [ 0.8 4 ] 5 : [ 1 5 ] >>> print(myValueFunction(ts)) [ t y0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 4 ] 3 : [ 0.6 9 ] 4 : [ 0.8 16 ] 5 : [ 1 25 ]" // --------------------------------------------------------------------- %feature("docstring") OT::ValueFunction::getEvaluation "Get the evaluation function of :math:`g`. Returns ------- g : :class:`~openturns.EvaluationImplementation` Evaluation function of :math:`g: \Rset^d \mapsto \Rset^q`. Examples -------- >>> import openturns as ot >>> g = ot.SymbolicFunction(['x'], ['x^2']) >>> n = 1 >>> myValueFunction = ot.ValueFunction(g, n) >>> print(myValueFunction.getEvaluation()) [x]->[x^2]" openturns-1.9/python/src/VertexValueFunction.i000066400000000000000000000011131307543307100216610ustar00rootroot00000000000000// SWIG file VertexValueFunction.i %{ #include "openturns/VertexValueFunction.hxx" %} %include VertexValueFunction_doc.i %include openturns/VertexValueFunction.hxx namespace OT { %extend VertexValueFunction { VertexValueFunction(const VertexValueFunction & other) { return new OT::VertexValueFunction(other); } } } %pythoncode %{ # deprecated class TemporalFunction(VertexValueFunction): def __init__(self, *args): super(TemporalFunction, self).__init__(*args) openturns.common.Log.Warn('class TemporalFunction is deprecated in favor of VertexValueFunction') %} openturns-1.9/python/src/VertexValueFunction_doc.i.in000066400000000000000000000054001307543307100231160ustar00rootroot00000000000000%feature("docstring") OT::VertexValueFunction "Temporal function. Available constructors: VertexValueFunction(*meshDimension=1*) VertexValueFunction(*h, meshDimension=1*) Parameters ---------- h : :class:`~openturns.Function` Function :math:`h: \Rset^n \times \Rset^d \mapsto \Rset^q`. meshDimension : int, :math:`n \geq 0` Dimension of the vertices of the mesh :math:`\cM`. This data is required for tests on the compatibility of dimension when a composite process is created using the temporal function. Notes ----- A temporal function :math:`f_{temp}: \cD \times \Rset^d \mapsto \cD \times \Rset^q`, with :math:`\cD \in \Rset^n`, is a particular :class:`field function ` that lets invariant the mesh of a field and defined by a function :math:`h : \Rset^n \times \Rset^d \mapsto \Rset^q` such that: .. math:: f_{temp}(\vect{t}, \vect{x})=(\vect{t}, h(\vect{t},\vect{x})) Let's note that the input dimension of :math:`f_{temp}` still design the dimension of :math:`\vect{x}`: :math:`d`. Its output dimension is equal to :math:`q`. See also -------- ValueFunction Examples -------- >>> import openturns as ot Create a function :math:`h : \Rset^n \times \Rset^d \mapsto \Rset^q` such as: .. math:: h: \left|\begin{array}{rcl} \Rset \times \Rset & \rightarrow & \Rset \\ (t, x) & \mapsto & (x + t^2) \end{array}\right. >>> h = ot.SymbolicFunction(['t', 'x'], ['x + t^2']) Convert :math:`h` into a temporal function with :math:`n` the dimension of the mesh of the field on which :math:`h` will be applied: >>> n = 1 >>> myVertexValueFunction = ot.VertexValueFunction(h, n) >>> # Create a TimeSeries >>> tg = ot.RegularGrid(0.0, 0.2, 6) >>> data = ot.Sample(tg.getN(), h.getInputDimension()-1) >>> for i in range(data.getSize()): ... for j in range(data.getDimension()): ... data[i, j] = i * data.getDimension() + j >>> ts = ot.TimeSeries(tg, data) >>> print(ts) [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 2 ] 3 : [ 0.6 3 ] 4 : [ 0.8 4 ] 5 : [ 1 5 ] >>> print(myVertexValueFunction(ts)) [ t y0 ] 0 : [ 0 0 ] 1 : [ 0.2 1.04 ] 2 : [ 0.4 2.16 ] 3 : [ 0.6 3.36 ] 4 : [ 0.8 4.64 ] 5 : [ 1 6 ]" // --------------------------------------------------------------------- %feature("docstring") OT::VertexValueFunction::getEvaluation "Get the evaluation function of :math:`h`. Returns ------- h : :class:`~openturns.EvaluationImplementation` Evaluation function of :math:`h: \Rset^n \times \Rset^d \mapsto \Rset^q`. Examples -------- >>> import openturns as ot >>> h = ot.SymbolicFunction(['t', 'x'], ['x + t^2']) >>> n = 1 >>> myVertexValueFunction = ot.ValueFunction(h, n) >>> print(myVertexValueFunction.getEvaluation()) [t,x]->[x + t^2]" openturns-1.9/python/src/VisualTest.i000066400000000000000000000002401307543307100200040ustar00rootroot00000000000000// SWIG file VisualTest.i %{ #include "openturns/VisualTest.hxx" %} %include VisualTest_doc.i %nodefaultctor VisualTest; %include openturns/VisualTest.hxx openturns-1.9/python/src/VisualTest_doc.i.in000066400000000000000000000315621307543307100212510ustar00rootroot00000000000000%feature("docstring") OT::VisualTest::DrawHenryLine "Draw an Henry plot. Parameters ---------- sample : 2-d sequence of float Tested (univariate) sample. normal_distribution : :class:`~openturns.Normal`, optional Tested (univariate) normal distribution. If not given, this will build a :class:`~openturns.Normal` distribution from the given sample using the :class:`~openturns.NormalFactory`. Returns ------- graph : class:`~openturns.Graph` The graph object Notes ----- The Henry plot is a visual fitting test for the normal distribution. It opposes the sample quantiles to those of the standard normal distribution (the one with zero mean and unit variance) by plotting the following points could: .. math:: \left(x^{(i)}, \Phi^{-1}\left(\widehat{F}\left(x^{(i)}\right)\right) \right), \quad i = 1, \ldots, m where :math:`\widehat{F}` denotes the empirical CDF of the sample and :math:`\Phi^{-1}` denotes the quantile function of the standard normal distribution. If the given sample fits to the tested normal distribution (with mean :math:`\mu` and standard deviation :math:`\sigma`), then the points should be close to be aligned (up to the uncertainty associated with the estimation of the empirical probabilities) on the **Henry line** whose equation reads: .. math:: y = \frac{x - \mu}{\sigma}, \quad x \in \Rset The Henry plot is a special case of the more general QQ-plot. See Also -------- VisualTest_DrawQQplot, FittingTest_Kolmogorov Examples -------- >>> import openturns as ot >>> from openturns.viewer import View Generate a random sample from a Normal distribution: >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Normal(2.0, 0.5) >>> sample = distribution.getSample(30) Draw an Henry plot against a given (wrong) Normal distribution: >>> henry_graph = ot.VisualTest.DrawHenryLine(sample, distribution) >>> henry_graph.setTitle('Henry plot against given %s' % ot.Normal(3.0, 1.0)) >>> View(henry_graph).show() Draw an Henry plot against an inferred Normal distribution: >>> henry_graph = ot.VisualTest.DrawHenryLine(sample) >>> henry_graph.setTitle('Henry plot against inferred Normal distribution') >>> View(henry_graph).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawQQplot "Draw a QQ-plot. Available usages: VisualTest.DrawQQplot(*sample1, sample2, n_points*) VisualTest.DrawQQplot(*sample1, distribution*); Parameters ---------- sample1, sample2 : 2-d sequences of float Tested samples. ditribution : :class:`~openturns.Distribution` Tested model. n_points : int, optional The number of points that is used for interpolating the empirical CDF of the two samples (with possibly different sizes). It will default to *DistributionImplementation-DefaultPointNumber* from the :class:`~openturns.ResourceMap`. Returns ------- graph : class:`~openturns.Graph` The graph object Notes ----- The QQ-plot is a visual fitting test for univariate distributions. It opposes the sample quantiles to those of the tested quantity (either a distribution or another sample) by plotting the following points cloud: .. math:: \left(x^{(i)}, \theta\left(\widehat{F}\left(x^{(i)}\right)\right) \right), \quad i = 1, \ldots, m where :math:`\widehat{F}` denotes the empirical CDF of the (first) tested sample and :math:`\theta` denotes either the quantile function of the tested distribution or the empirical quantile function of the second tested sample. If the given sample fits to the tested distribution or sample, then the points should be close to be aligned (up to the uncertainty associated with the estimation of the empirical probabilities) with the **first bissector** whose equation reads: .. math:: y = x, \quad x \in \Rset Examples -------- >>> import openturns as ot >>> from openturns.viewer import View Generate a random sample from a Normal distribution: >>> ot.RandomGenerator.SetSeed(0) >>> distribution = ot.Weibull(2.0, 0.5) >>> sample = distribution.getSample(30) >>> sample.setDescription(['Sample']) Draw a QQ-plot against a given (inferred) distribution: >>> tested_distribution = ot.WeibullFactory().build(sample) >>> QQ_plot = ot.VisualTest.DrawQQplot(sample, tested_distribution) >>> View(QQ_plot).show() Draw a two-sample QQ-plot: >>> another_sample = distribution.getSample(50) >>> another_sample.setDescription(['Another sample']) >>> QQ_plot = ot.VisualTest.DrawQQplot(sample, another_sample) >>> View(QQ_plot).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawCobWeb "Draw a Cobweb plot. Available usages: VisualTest.DrawCobWeb(*inputSample, outputSample, min, max, color, quantileScale=True*) Parameters ---------- inputSample : 2-d sequence of float of dimension :math:`n` Input sample :math:`\vect{X}`. outputSample : 2-d sequence of float of dimension :math:`1` Output sample :math:`Y`. Ymin, Ymax : float such that *Ymax > Ymin* Values to select lines which will colore in *color*. Must be in :math:`[0,1]` if *quantileScale=True*. color : str Color of the specified curves. quantileScale : bool Flag indicating the scale of the *Ymin* and *Ymax*. If *quantileScale=True*, they are expressed in the rank based scale; otherwise, they are expressed in the :math:`Y`-values scale. Returns ------- graph : class:`~openturns.Graph` The graph object Notes ----- Let's suppose a model :math:`f: \Rset^n \mapsto \Rset`, where :math:`f(\vect{X})=Y`. The Cobweb graph enables to visualize all the combinations of the input variables which lead to a specific range of the output variable. Each column represents one component :math:`X_i` of the input vector :math:`\vect{X}`. The last column represents the scalar output variable :math:`Y`. For each point :math:`\vect{X}^j` of *inputSample*, each component :math:`X_i^j` is noted on its respective axe and the last mark is the one which corresponds to the associated :math:`Y^j`. A line joins all the marks. Thus, each point of the sample corresponds to a particular line on the graph. The scale of the axes are quantile based : each axe runs between 0 and 1 and each value is represented by its quantile with respect to its marginal empirical distribution. It is interesting to select, among those lines, the ones which correspond to a specific range of the output variable. These particular lines selected are colored differently in *color*. This specific range is defined with *Ymin* and *Ymax* in the quantile based scale of :math:`Y` or in its specific scale. In that second case, the range is automatically converted into a quantile based scale range. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View Generate a random sample from a Normal distribution: >>> ot.RandomGenerator.SetSeed(0) >>> inputSample = ot.Normal(2).getSample(15) >>> inputSample.setDescription(['X0', 'X1']) >>> formula = ['cos(X0)+cos(2*X1)'] >>> model = ot.SymbolicFunction(['X0', 'X1'], formula) >>> outputSample = model(inputSample) Draw a Cobweb plot: >>> cobweb = ot.VisualTest.DrawCobWeb(inputSample, outputSample, 1.0, 2.0, 'red', False) >>> View(cobweb).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawHistogram "Draw an histogram. Available usages: VisualTest.DrawHistogram(*sample*) VisualTest.DrawHistogram(*sample, barsNumber*) Parameters ---------- sample : 2-d sequence of float Sample to draw. barsNumber : positive int Number of barplots used to draw the histogram. If not specified, it is automatically determined by OpenTURNS according to the Silverman rule. Returns ------- graph : class:`~openturns.Graph` The graph object Examples -------- >>> import openturns as ot >>> from openturns.viewer import View Generate a random sample from a Normal distribution: >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(1).getSample(100) Draw an histogram: >>> hist = ot.VisualTest.DrawHistogram(sample) >>> View(hist).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawEmpiricalCDF "Draw an empirical CDF. Available usages: VisualTest.DrawEmpiricalCDF(*sample, Xmin, Xmax*) Parameters ---------- sample : 2-d sequence of float Sample to draw. Xmin, Xmax : float with *Xmin < Xmax* Lower and upper boundaries of the graph. Returns ------- graph : class:`~openturns.Graph` The graph object Notes ----- The created graph contains a staircase curve which is the empirical CDF of the sample. Examples -------- >>> import openturns as ot >>> from openturns.viewer import View Generate a random sample from a Normal distribution: >>> ot.RandomGenerator.SetSeed(0) >>> sample = ot.Normal(1).getSample(100) >>> Xmin = sample.getMin()[0] >>> Xmax = sample.getMax()[0] Draw an empirical CDF: >>> empiricalCDF = ot.VisualTest.DrawEmpiricalCDF(sample, Xmin - 1.0, Xmax + 1.0) >>> View(empiricalCDF).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawClouds "Draw clouds from samples. Available usages: VisualTest.DrawClouds(*sample, distribution*) VisualTest.DrawClouds(*sample, sample2*) Parameters ---------- sample, sample2 : 2-d sequence of float Samples to draw. distribution : :class:`~openturns.Distribution` Distribution used to plot the second cloud Returns ------- graph : class:`~openturns.Graph` The graph object Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> ot.RandomGenerator.SetSeed(0) >>> sample1 = ot.Normal(2).getSample(50) >>> sample2 = ot.Normal(2).getSample(50) >>> clouds = ot.VisualTest.DrawClouds(sample1, sample2) >>> View(clouds).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawKendallPlot "Draw kendall plot. Available usages: VisualTest.DrawKendallPlot(*sample, distribution*) VisualTest.DrawKendallPlot(*sample, sample2*) Parameters ---------- sample, sample2 : 2-d sequence of float Samples to draw. distribution : :class:`~openturns.Distribution` Distribution used to plot the second cloud Returns ------- graph : class:`~openturns.Graph` The graph object Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> ot.RandomGenerator.SetSeed(0) >>> size = 100 >>> copula1 = ot.FrankCopula(1.5) >>> copula2 = ot.GumbelCopula(4.5) >>> sample1 = copula1.getSample(size) >>> sample1.setName('data 1') >>> sample2 = copula2.getSample(size) >>> sample2.setName('data 2') >>> kendallPlot1 = ot.VisualTest.DrawKendallPlot(sample1, copula2) >>> View(kendallPlot1).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawLinearModel "Draw a linear model plot. Parameters ---------- sample1, sample2 : 2-d sequence of float Samples to draw. linearModel : :class:`~openturns.LinearModel` Linear model to plot. Returns ------- graph : class:`~openturns.Graph` The graph object Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> ot.RandomGenerator.SetSeed(0) >>> dimension = 2 >>> R = ot.CorrelationMatrix(dimension) >>> R[0, 1] = 0.8 >>> distribution = ot.Normal([3.0] * dimension, [2.0]* dimension, R) >>> size = 100 >>> sample2D = distribution.getSample(size) >>> firstSample = ot.Sample(size, 1) >>> secondSample = ot.Sample(size, 1) >>> for i in range(size): ... firstSample[i] = ot.Point(1, sample2D[i, 0]) ... secondSample[i] = ot.Point(1, sample2D[i, 1]) >>> lmtest = ot.LinearModelFactory().build(firstSample, secondSample) >>> drawLinearModelVTest = ot.VisualTest.DrawLinearModel(firstSample, secondSample, lmtest) >>> View(drawLinearModelVTest).show()" // --------------------------------------------------------------------- %feature("docstring") OT::VisualTest::DrawLinearModelResidual "Draw a linear model residual plot. Parameters ---------- sample1, sample2 : 2-d sequence of float Samples to draw. linearModel : :class:`~openturns.LinearModel` Linear model to plot. Returns ------- graph : class:`~openturns.Graph` The graph object Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> ot.RandomGenerator.SetSeed(0) >>> dimension = 2 >>> R = ot.CorrelationMatrix(dimension) >>> R[0, 1] = 0.8 >>> distribution = ot.Normal([3.0] * dimension, [2.0]* dimension, R) >>> size = 100 >>> sample2D = distribution.getSample(size) >>> firstSample = ot.Sample(size, 1) >>> secondSample = ot.Sample(size, 1) >>> for i in range(size): ... firstSample[i] = ot.Point(1, sample2D[i, 0]) ... secondSample[i] = ot.Point(1, sample2D[i, 1]) >>> lmtest = ot.LinearModelFactory().build(firstSample, secondSample) >>> drawLinearModelVTest = ot.VisualTest.DrawLinearModelResidual(firstSample, secondSample, lmtest) >>> View(drawLinearModelVTest).show()" openturns-1.9/python/src/VonMises.i000066400000000000000000000003461307543307100174530ustar00rootroot00000000000000// SWIG file VonMises.i %{ #include "openturns/VonMises.hxx" %} %include VonMises_doc.i %include openturns/VonMises.hxx namespace OT { %extend VonMises { VonMises(const VonMises & other) { return new OT::VonMises(other); } } } openturns-1.9/python/src/VonMises_doc.i.in000066400000000000000000000030471307543307100207060ustar00rootroot00000000000000%feature("docstring") OT::VonMises "von Mises distribution. Available constructors: VonMises(*mu=0.0, kappa=1.0*) Parameters ---------- mu : float Location parameter kappa : float, :math:`\kappa > 0` Concentration parameter Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{e^{\kappa\cos(x-\mu)}} {2\pi \mathrm{I}_0(\kappa)}, \quad x \in [-\pi, \pi] with :math:`\kappa > 0` and :math:`\mathrm{I}_0` the modified Bessel function of order 0. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.VonMises(1.0, 2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::VonMises::getMu "Accessor to the location parameter. Returns ------- mu : float Location parameter." // --------------------------------------------------------------------- %feature("docstring") OT::VonMises::setMu "Accessor to the location parameter. Parameters ---------- mu : float Location parameter." // --------------------------------------------------------------------- %feature("docstring") OT::VonMises::getKappa "Accessor to the concentration parameter. Returns ------- kappa : float Concentration parameter." // --------------------------------------------------------------------- %feature("docstring") OT::VonMises::setKappa "Accessor to the concentration parameter. Parameters ---------- kappa : float, :math:`\kappa > 0` Concentration parameter." openturns-1.9/python/src/Weibull.i000066400000000000000000000003361307543307100173120ustar00rootroot00000000000000// SWIG file Weibull.i %{ #include "openturns/Weibull.hxx" %} %include Weibull_doc.i %include openturns/Weibull.hxx namespace OT { %extend Weibull { Weibull(const Weibull & other) { return new OT::Weibull(other); } } } openturns-1.9/python/src/WeibullFactory.i000066400000000000000000000004261307543307100206420ustar00rootroot00000000000000// SWIG file WeibullFactory.i %{ #include "openturns/WeibullFactory.hxx" %} %include WeibullFactory_doc.i %include openturns/WeibullFactory.hxx namespace OT { %extend WeibullFactory { WeibullFactory(const WeibullFactory & other) { return new OT::WeibullFactory(other); } } } openturns-1.9/python/src/WeibullFactory_doc.i.in000066400000000000000000000002171307543307100220720ustar00rootroot00000000000000%feature("docstring") OT::WeibullFactory "Weibull factory. Available constructor: WeibullFactory() See also -------- DistributionFactory"openturns-1.9/python/src/WeibullMuSigma.i000066400000000000000000000004251307543307100205740ustar00rootroot00000000000000// SWIG file WeibullMuSigma.i %{ #include "openturns/WeibullMuSigma.hxx" %} %include WeibullMuSigma_doc.i %include openturns/WeibullMuSigma.hxx namespace OT{ %extend WeibullMuSigma { WeibullMuSigma(const WeibullMuSigma & other) { return new OT::WeibullMuSigma(other); } } } openturns-1.9/python/src/WeibullMuSigma_doc.i.in000066400000000000000000000021371307543307100220300ustar00rootroot00000000000000%feature("docstring") OT::WeibullMuSigma "Weibull distribution parameters. Available constructors: WeibullMuSigma(*mu=1.0, sigma=1.0, gamma=0.*) Parameters ---------- mu : float Mean. sigma : float Standard deviation :math:`\sigma > 0`. gamma : float, optional Shift parameter :math:`\gamma > \mu`. Notes ----- The native parameters :math:`\alpha` and :math:`\beta` are searched such as: .. math:: \alpha &= \frac{\mu - \gamma}{\Gamma(1+\frac{1}{\beta})} \\ \sigma^2 &= \alpha^2 \Gamma\left(1 + \frac{2}{\beta}\right) - \Gamma^2 \left(1 + \frac{1}{\beta}\right) See also -------- Weibull Examples -------- Create the parameters of the Weibull distribution: >>> import openturns as ot >>> parameters = ot.WeibullMuSigma(1.3, 1.23, -0.5) Convert parameters into the native parameters: >>> print(parameters.evaluate()) [1.99222,1.48961,-0.5] The gradient of the transformation of the native parameters into the new parameters: >>> print(parameters.gradient()) [[ 1.25624 0.897176 0 ] [ -0.218715 -1.31294 0 ] [ -1.25624 -0.897176 1 ]]" openturns-1.9/python/src/Weibull_doc.i.in000066400000000000000000000112411307543307100205410ustar00rootroot00000000000000%feature("docstring") OT::Weibull "Weibull distribution. Available constructors: Weibull(*alpha=1.0, beta=1.0, gamma=0.0*) Parameters ---------- alpha : float scale parameter :math:`\alpha > 0`. beta : float shape parameter :math:`\beta > 0`. gamma : float, optional Location parameter :math:`\gamma < \mu`. Notes ----- Its probability density function is defined as: .. math:: f_X(x) = \frac{\beta}{\alpha} \left(\frac{x - \gamma}{\alpha} \right) ^ {\beta-1} exp \left(-\left(\frac{x - \gamma}{\alpha}\right)^{\beta}\right), \quad x \in [\gamma; +\infty[ Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \alpha \,\Gamma\left(1 + \frac{1}{\beta}\right) + \gamma \\ \Var{X} & = & \alpha^2 \Gamma\left(1 + \frac{2}{\beta}\right) - \Gamma^2 \left(1 + \frac{1}{\beta}\right) \end{eqnarray*} where :math:`\Gamma` denotes Euler's Gamma function :class:`~openturns.SpecFunc_Gamma`. It is possible to create a Weibull distribution from the alternative parametrization :math:`(\mu, \sigma, \gamma)`: see :class:`~openturns.WeibullMuSigma`. In that case, all the results are presented in that new parametrization. In order to use the alternative parametrization :math:`(\mu, \sigma, \gamma)` only to create the distribution, see the example below: all the results will be presented in the native parametrization :math:`(\alpha, \beta, \gamma)`. Examples -------- Create a distribution from its native parameters :math:`(\alpha, \beta, \gamma)`: >>> import openturns as ot >>> myDist = ot.Weibull(2.0, 1.5, 1.0) Create a it from the alternative parametrization :math:`(\mu, \sigma, \gamma)`: >>> myDist2 = ot.Weibull() >>> myDist2.setParameter(ot.WeibullMuSigma()([2.8, 1.2, 1.0])) Create it from :math:`(\mu, \sigma,\gamma)` and keep that parametrization for the remaining study: >>> myParam = ot.WeibullMuSigma(2.8, 1.2, 1.0) >>> myDist3 = ot.ParametrizedDistribution(myParam) Draw a sample: >>> sample = myDist.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::getAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Returns ------- alpha : float Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::getBeta "Accessor to the distribution's shape parameter :math:`\beta`. Returns ------- beta : float Shape parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::getGamma "Accessor to the distribution's shift parameter :math:`\gamma`. Returns ------- gamma : float Location parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::getMu "Accessor to the distribution's mean. Returns ------- mu : float Mean." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::getSigma "Accessor to the distribution's standard deviation. Returns ------- sigma : float, :math:`\sigma > 0` Standard deviation." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::setAlpha "Accessor to the distribution's scale parameter :math:`\alpha`. Parameters ---------- alpha : float, :math:`\alpha > 0` Scale parameter :math:`\alpha`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::setBeta "Accessor to the distribution's shape parameter :math:`\beta`. Parameters ---------- beta : float, :math:`\beta > 0` Shape parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::setAlphaBeta "Accessor to the distribution's scale parameter :math:`\alpha` and shape parameter :math:`\beta`. Parameters ---------- alpha : float, :math:`\alpha > 0` Scale parameter :math:`\alpha`. beta : float, :math:`\beta > 0` Shape parameter :math:`\beta`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::setGamma "Accessor to the distribution's location parameter :math:`\gamma`. Parameters ---------- gamma : float Location parameter :math:`\gamma`." // --------------------------------------------------------------------- %feature("docstring") OT::Weibull::setMuSigma "Accessor to the distribution's mean and standard deviation. Parameters ---------- mu : float Mean. sigma : float, :math:`\sigma > 0` Standard deviation." openturns-1.9/python/src/WeightedExperiment.i000066400000000000000000000014611307543307100215100ustar00rootroot00000000000000// SWIG file WeightedExperiment.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::WeightedExperiment::generateWithWeights(OT::Point & weights) const; %{ #include "openturns/WeightedExperiment.hxx" %} %include WeightedExperiment_doc.i OTTypedInterfaceObjectHelper(WeightedExperiment) %include openturns/WeightedExperiment.hxx namespace OT { %extend WeightedExperiment { WeightedExperiment(const WeightedExperiment & other) { return new OT::WeightedExperiment(other); } } } %clear OT::Sample & weights; openturns-1.9/python/src/WeightedExperimentImplementation.i000066400000000000000000000015751307543307100244240ustar00rootroot00000000000000// SWIG file WeightedExperimentImplementation.i // do not pass argument by reference, return it as tuple item %typemap(in, numinputs=0) OT::Point & weights ($*ltype temp) %{ temp = OT::Point(); $1 = &temp; %} %typemap(argout) OT::Point & weights %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj(new OT::Point(*$1), SWIG_TypeQuery("OT::Point *"), SWIG_POINTER_OWN | 0 )); %} OT::Point OT::WeightedExperimentImplementation::generateWithWeights(OT::Point & weights) const; %{ #include "openturns/WeightedExperimentImplementation.hxx" %} %include WeightedExperimentImplementation_doc.i %include openturns/WeightedExperimentImplementation.hxx namespace OT { %extend WeightedExperimentImplementation { WeightedExperimentImplementation(const WeightedExperimentImplementation & other) { return new OT::WeightedExperimentImplementation(other); } } } %clear OT::Sample & weights; openturns-1.9/python/src/WeightedExperimentImplementation_doc.i.in000066400000000000000000000125771307543307100256620ustar00rootroot00000000000000%define OT_WeightedExperiment_doc "Weighted experiment. Available constructor: WeightedExperiment(*distribution=ot.Uniform(), size=100*) Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution :math:`\mu` used to generate the set of input data. size : positive int Number :math:`cardI` of points that will be generated in the experiment. Notes ----- WeightedExperiment is used to generate the points :math:`\Xi_i` so that the mean :math:`E_{\mu}` is approximated as follows: .. math:: \Expect{ f(\vect{Z})}_{\mu} \simeq \sum_{i \in I} \omega_i f(\Xi_i) where :math:`\mu` is a distribution, :math:`f` is a function :math:`L_1(\mu)` and :math:`\omega_i` are the weights associated with the points. By default, all the weights are equal to :math:`1/cardI`. A WeightedExperiment object can be created only through its derived classes which are distributed in three groups: 1. The first category is made up of the random patterns, where the set of input data is generated from the joint distribution of the input random vector, according to these sampling techniques: - :class:`Monte Carlo ` - :class:`LHS ` - :class:`Bootstrap ` - :class:`Importance Sampling ` 2. The second category contains the :class:`low discrepancy sequences `. OpenTURNS proposes the Faure, Halton, Haselgrove, Reverse Halton and Sobol sequences. 3. The third category consists of deterministic patterns: - :class:`Gauss product ` - :class:`~openturns.FixedExperiment` - :class:`~openturns.LowDiscrepancyExperiment`" %enddef %feature("docstring") OT::WeightedExperimentImplementation OT_WeightedExperiment_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_generate_doc "Generate points according to the type of the experiment. Returns ------- sample : :class:`~openturns.Sample` Points :math:`(\Xi_i)_{i \in I}` which constitute the design of experiments with :math:`card I = size`. The sampling method is defined by the nature of the weighted experiment. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myExperiment = ot.MonteCarloExperiment(ot.Normal(2), 5) >>> sample = myExperiment.generate() >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] 3 : [ -0.355007 1.43725 ] 4 : [ 0.810668 0.793156 ]" %enddef %feature("docstring") OT::WeightedExperimentImplementation::generate OT_WeightedExperiment_generate_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_generateWithWeights_doc "Generate points and their associated weight according to the type of the experiment. Returns ------- sample : :class:`~openturns.Sample` The points which constitute the design of experiments. The sampling method is defined by the nature of the experiment. weights : :class:`~openturns.Point` of size :math:`cardI` Weights :math:`(\omega_i)_{i \in I}` associated with the points. By default, all the weights are equal to :math:`1/cardI`. Examples -------- >>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> myExperiment = ot.MonteCarloExperiment(ot.Normal(2), 5) >>> sample, weights = myExperiment.generateWithWeights() >>> print(sample) [ X0 X1 ] 0 : [ 0.608202 -1.26617 ] 1 : [ -0.438266 1.20548 ] 2 : [ -2.18139 0.350042 ] 3 : [ -0.355007 1.43725 ] 4 : [ 0.810668 0.793156 ] >>> print(weights) [0.2,0.2,0.2,0.2,0.2]" %enddef %feature("docstring") OT::WeightedExperimentImplementation::generateWithWeights OT_WeightedExperiment_generateWithWeights_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_getDistribution_doc "Accessor to the distribution. Returns ------- distribution : :class:`~openturns.Distribution` Distribution used to generate the set of input data." %enddef %feature("docstring") OT::WeightedExperimentImplementation::getDistribution OT_WeightedExperiment_getDistribution_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_setDistribution_doc "Accessor to the distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution used to generate the set of input data." %enddef %feature("docstring") OT::WeightedExperimentImplementation::setDistribution OT_WeightedExperiment_setDistribution_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_getSize_doc "Accessor to the size of the generated sample. Returns ------- size : positive int Number :math:`cardI` of points constituting the design of experiments." %enddef %feature("docstring") OT::WeightedExperimentImplementation::getSize OT_WeightedExperiment_getSize_doc // --------------------------------------------------------------------- %define OT_WeightedExperiment_setSize_doc "Accessor to the size of the generated sample. Parameters ---------- size : positive int Number :math:`cardI` of points constituting the design of experiments." %enddef %feature("docstring") OT::WeightedExperimentImplementation::setSize OT_WeightedExperiment_setSize_doc openturns-1.9/python/src/WeightedExperiment_doc.i.in000066400000000000000000000012211307543307100227340ustar00rootroot00000000000000%feature("docstring") OT::WeightedExperiment OT_WeightedExperiment_doc %feature("docstring") OT::WeightedExperiment::generate OT_WeightedExperiment_generate_doc %feature("docstring") OT::WeightedExperiment::generateWithWeights OT_WeightedExperiment_generateWithWeights_doc %feature("docstring") OT::WeightedExperiment::getDistribution OT_WeightedExperiment_getDistribution_doc %feature("docstring") OT::WeightedExperiment::setDistribution OT_WeightedExperiment_setDistribution_doc %feature("docstring") OT::WeightedExperiment::getSize OT_WeightedExperiment_getSize_doc %feature("docstring") OT::WeightedExperiment::setSize OT_WeightedExperiment_setSize_doc openturns-1.9/python/src/WelchFactory.i000066400000000000000000000004551307543307100203030ustar00rootroot00000000000000// SWIG file WelchFactory.i %{ #include "openturns/WelchFactory.hxx" %} %include WelchFactory_doc.i %include openturns/WelchFactory.hxx namespace OT { %extend WelchFactory { WelchFactory(const WelchFactory & other) { return new OT::WelchFactory(other); } } } openturns-1.9/python/src/WelchFactory_doc.i.in000066400000000000000000000113471307543307100215370ustar00rootroot00000000000000%feature("docstring") OT::WelchFactory "Welch estimator of the spectral model of a stationary process. Parameters ---------- window : :class:`~openturns.FilteringWindows` The filtering window model. By default, the filtering window model is the Hanning model. blockNumber : int Number of blocks. By default, *blockNumber=1*. overlap : float, :math:`0 \leq overlap \leq 0.5`. Overlap rate parameter of the segments of the time series. By default, *overlap=0.5*. Notes ----- Let :math:`X: \Omega \times \cD \rightarrow \Rset^d` be a multivariate second order stationary process, with zero mean, where :math:`\cD \in \Rset^n`. We only treat here the case where the domain is of dimension 1: :math:`\cD \in \Rset` (*n=1*). If we note :math:`C(\vect{s}, \vect{t})=\Expect{(X_{\vect{s}}-m(\vect{s}))\Tr{(X_{\vect{t}}-m(\vect{t}))}}` its covariance function, then for all :math:`(i,j), C^{stat}_{i,j} : \Rset^n \rightarrow \Rset^n` is :math:`\cL^1(\Rset^n)` (ie :math:`\int_{\Rset^n} |C^{stat}_{i,j}(\vect{\tau})|\di{\vect{\tau}}\, < +\infty`), with :math:`C^{stat}(\vect{\tau}) = C(\vect{s}, \vect{s}+\vect{\tau})` as this quantity does not depend on :math:`\vect{s}`. The bilateral spectral density function :math:`S : \Rset^n \rightarrow \mathcal{H}^+(d)` exists and is defined as the Fourier transform of the covariance function :math:`C^{stat}` : .. math:: \forall \vect{f} \in \Rset^n, \,S(\vect{f}) = \int_{\Rset^n}\exp\left\{ -2i\pi <\vect{f},\vect{\tau}> \right\} C^{stat}(\vect{\tau})\di{\vect{\tau}} where :math:`\mathcal{H}^+(d) \in \mathcal{M}_d(\Cset)` is the set of *d*-dimensional positive definite hermitian matrices. The Welch estimator is a non parametric estimator based on the segmentation of the time series into *blockNumber* segments possibly overlapping (size of overlap *overlap*). The length of each segment is deduced. Examples -------- Create a time series from a stationary second order process: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 2**8) >>> model = ot.ExponentialCauchy([5.0], [3.0]) >>> myNormalProcess = ot.SpectralGaussianProcess(model, myTimeGrid) >>> myTimeSeries = myNormalProcess.getRealization() Estimate the spectral model with WelchFactory: >>> mySegmentNumber = 10 >>> myOverlapSize = 0.3 >>> myFactory = ot.WelchFactory(ot.Hanning(), mySegmentNumber , myOverlapSize) >>> myEstimatedModel_TS = myFactory.build(myTimeSeries) Change the filtering window: >>> myFactory.setFilteringWindows(ot.Hamming()) " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::build "Estimate the spetral model. Available usages: build(*myTimeSeries*) build(*myProcessSample*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` One realization of the process. myProcessSample : :class:`~openturns.ProcessSample` Several realizations of the process. Returns ------- mySpectralModel : :class:`~openturns.UserDefinedSpectralModel` The spectral model estimated with the Welch estimator. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::getFilteringWindows "Accessor to the filtering window. Returns ------- filteringWindow : :class:`~openturns.FilteringWindows` The filtering window used. By default, the :class:`~openturns.Hanning` one. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::setFilteringWindows "Accessor to the filtering window. Parameters ---------- filteringWindow : :class:`~openturns.FilteringWindows` The filtering window used. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::getBlockNumber "Accessor to the block number. Returns ------- blockNumber : int The number of blocks used in the Welch estimator. By default, *blockNumber = 1*. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::setBlockNumber "Accessor to the block number. Parameters ---------- blockNumber : positive int The number of blocks used in the Welch estimator. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::getOverlap "Accessor to the overlap rate. Returns ------- overlap : float, :math:`0 \leq overlap \leq 0.5`. The overlap rate of the time series. By default, *overlap = 0.5*. " // --------------------------------------------------------------------- %feature("docstring") OT::WelchFactory::setOverlap "Accessor to the block number. Parameters ---------- blockNumber : int, :math:`0 \leq overlap \leq 0.5`. The overlap rate of the times series. " openturns-1.9/python/src/WhiteNoise.i000066400000000000000000000003671307543307100177710ustar00rootroot00000000000000// SWIG file WhiteNoise.i %{ #include "openturns/WhiteNoise.hxx" %} %include WhiteNoise_doc.i %include openturns/WhiteNoise.hxx namespace OT { %extend WhiteNoise { WhiteNoise(const WhiteNoise & other) { return new OT::WhiteNoise(other); } } } openturns-1.9/python/src/WhiteNoise_doc.i.in000066400000000000000000000045771307543307100212320ustar00rootroot00000000000000%feature("docstring") OT::WhiteNoise "White Noise process. Parameters ---------- distribution : :class:`~openturns.Distribution` Distribution of dimension :math:`d` of the white noise process. mesh : :class:`~openturns.Mesh`, optional Mesh in :math:`\Rset^n` over which the process is discretized. By default, the mesh is reduced to one point in :math:`\Rset` which coordinate is equal to 0. Notes ----- A second order white noise :math:`\varepsilon: \Omega \times \cD \rightarrow \Rset^d` is a stochastic process of dimension :math:`d` such that the covariance function :math:`C(\vect{s},\vect{t})=\delta(\vect{t}-\vect{s})C(\vect{s},\vect{s})` where :math:`C(\vect{s},\vect{s})` is the covariance matrix of the process at vertex :math:`\vect{s}` and :math:`\delta` the Kroenecker function. A process :math:`\varepsilon` is a white noise if all finite family of locations :math:`(\vect{t}_i)_{i=1, \dots, n} \in \cD`, :math:`(\varepsilon_{\vect{t}_i})_{i=1, \dots, n}` is independent and identically distributed. Examples -------- Create a normal normal white noise of dimension 1: >>> import openturns as ot >>> myDist = ot.Normal() >>> myMesh = ot.IntervalMesher([10]*2).build(ot.Interval([0.0]*2, [1.0]*2)) >>> myWN = ot.WhiteNoise(myDist, myMesh) Get a realization: >>> myReal =myWN.getRealization()" // --------------------------------------------------------------------- %feature("docstring") OT::WhiteNoise::getDistribution "Accessor to the distribution. Returns ------- distribution : :class:`~openturns.Distribution` The distribution of dimension :math:`d` of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::WhiteNoise::getMarginal "Accessor to the marginal process. Parameters ---------- N : integer The index of the marginal to be extracted. indices : :class:`~openturns.Indices`, optional The list of the indexes of the marginal to be extracted. Returns ------- wn : :class:`~openturns.WhiteNoise` The marginal white noise." // --------------------------------------------------------------------- %feature("docstring") OT::WhiteNoise::setDistribution "Accessor to the distribution. Parameters ---------- distribution : :class:`~openturns.Distribution` The distribution of dimension :math:`d` of the white noise." // --------------------------------------------------------------------- openturns-1.9/python/src/WhittleFactory.i000066400000000000000000000007311307543307100206560ustar00rootroot00000000000000// SWIG file WhittleFactory.i %{ #include "openturns/WhittleFactory.hxx" %} %template(WhittleFactoryStateCollection) OT::Collection; %template(WhittleFactoryStatePersistentCollection) OT::PersistentCollection; %include WhittleFactory_doc.i %include openturns/WhittleFactory.hxx namespace OT { %extend WhittleFactory { WhittleFactory(const WhittleFactory & other) { return new OT::WhittleFactory(other); } } } openturns-1.9/python/src/WhittleFactoryState.i000066400000000000000000000004761307543307100216650ustar00rootroot00000000000000// SWIG file WhittleFactoryState.i %{ #include "openturns/WhittleFactoryState.hxx" %} %include WhittleFactoryState_doc.i %include openturns/WhittleFactoryState.hxx namespace OT { %extend WhittleFactoryState { WhittleFactoryState(const WhittleFactoryState & other) { return new OT::WhittleFactoryState(other); } } } openturns-1.9/python/src/WhittleFactoryState_doc.i.in000066400000000000000000000112771307543307100231200ustar00rootroot00000000000000%feature("docstring") OT::WhittleFactoryState "Last state recorded of a scalar ARMA process. Parameters ---------- p : int AR order of the estimated :math:`ARMA(p,q)`. ARMACoeff : sequence of float of dimension :math:`p+q` Coefficients of the AR then MA part of the estimated :math:`ARMA(p,q)` process. sigma2 : float Variance of the white noise. criteria : sequence of float of dimension 3 The values of the criteria *AIC*, :math:`AIC_c` (corrected AIC) and *BIC* on the estimated :math:`ARMA(p,q)` process. timeGrid : :class:`~openturns.RegularGrid` Time grid of the :math:`ARMA(p,q)` process. Examples -------- Create a time series from a scalar ARMA(4,2) and a normal white noise: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 20) >>> myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid) >>> myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1]) >>> myMACoef = ot.ARMACoefficients([0.4, 0.3]) >>> myARMAProcess = ot.ARMA(myARCoef, myMACoef, myWhiteNoise) >>> myTimeSeries = myARMAProcess.getRealization() >>> myProcessSample = myARMAProcess.getSample(20) Estimate the ARMA process specifying a range for the orders: >>> pIndices = [1, 2] >>> qIndices = [4, 5] >>> myFactory_Range = ot.WhittleFactory(pIndices, qIndices) Print all the models and their state: >>> myWhittleHistory = myFactory_Range.getHistory() >>> for i in range(myWhittleHistory.getSize()): ... model_i = myWhittleHistory[i] ... arma = model_i.getARMA() ... print('Order(p,q) = '+str(model_i.getP())+', '+str(model_i.getQ())) ... print('AR coeff = '+str(model_i.getARCoefficients())) ... print('MA coeff = '+str(model_i.getMACoefficients())) ... print('White Noise - Sigma = '+str(model_i.getSigma2())) ... print('Criteria AICc, AIC, BIC = '+str(model_i.getInformationCriteria()))" // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getARCoefficients "Accessor to the AR coefficients of the scalar ARMA process. Returns ------- ARCoeff : :class:`~openturns.ARMACoefficients` The AR coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getMACoefficients "Accessor to the MA coefficients of the scalar ARMA process. Returns ------- MACoeff : :class:`~openturns.ARMACoefficients` The MA coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getTheta "Accessor to the coefficients of the scalar ARMA process. Returns ------- coeff : :class:`~openturns.Point` The AR and MA coefficients of the linear recurrence defining the process." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getWhiteNoise "Accessor to the white noise defining the scalar ARMA process. Returns ------- whiteNoise : :class:`~openturns.WhiteNoise` The white noise of the estimated model." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getARMA "Accessor to the estimated scalar ARMA. Returns ------- MACoeff : :class:`~openturns.ARMA` The estimated ARMA model." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getInformationCriteria "Accessor to the values of the criteria *AIC*, :math:`AIC_c` and *BIC*. Returns ------- criteria : :class:`~openturns.Point` of dimension 3 Values of the criteria *AIC*, :math:`AIC_c` (corrected AIC) and *BIC* of the estimated model. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getP "Accessor to AR order. Returns ------- p : int Order of the AR part of the estimated model. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getQ "Accessor to MA order. Returns ------- q : int Order of the MA part of the estimated model." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getSigma2 "Accessor to the variance of the white noise. Parameters ---------- sigma2 : positive float Variance of the white noise." // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactoryState::getTimeGrid "Accessor to the time grid of the scalar ARMA process. Returns ------- timeGrid : :class:`~openturns.RegularGrid` Time grid over which the ARMA process is defined." openturns-1.9/python/src/WhittleFactory_doc.i.in000066400000000000000000000246731307543307100221230ustar00rootroot00000000000000%feature("docstring") OT::WhittleFactory "Whittle estimator of a scalar ARMA normal process. Available constructors: WhittleFactory() WhittleFactory(*p, q, invert*) WhittleFactory(*indP, indQ, invertible*) Parameters ---------- p : int Order of the AR part of the :math:`ARMA(p,q)` process of dimension :math:`d`. q : int Order of the MA part of the :math:`ARMA(p,q)` process of dimension :math:`d`. invertible : bool, optional Restrict the estimation to invertible ARMA processes. By default: True. indP : :class:`~openturns.Indices` All the :math:`p` orders that will be investigated. Care: not yet implemented. indQ : :class:`~openturns.Indices` All the :math:`p` orders that will be investigated. Care: not yet implemented. Notes ----- We suppose here that the white noise is normal with zero mean and variance :math:`\sigma^2`. It implies that the ARMA process estimated is normal. For each order :math:`(p,q)`, the estimation of the coefficients :math:`(a_k)_{1\leq k\leq p}`, :math:`(b_k)_{1\leq k\leq q}` and the variance :math:`\sigma^2` is done using the Whittle estimator which is based on the maximization of the likelihood function in the frequency domain. The principle is detailed hereafter for the case of a time series : in the case of a process sample, the estimator is similar except for the periodogram which is computed differently. Let :math:`(t_i, \vect{X}_i)_{0\leq i \leq n-1}` be a multivariate time series of dimension :math:`d` from an :math:`ARMA(p,q)` process. The spectral density function of the :math:`ARMA(p,q)` process writes : .. math:: f(\lambda, \vect{\theta}, \sigma^2) = \frac{\sigma^2}{2 \pi} \frac{|1 + b_1 \exp(-i \lambda) + \ldots + b_q \exp(-i q \lambda)|^2}{|1 + a_1 \exp(-i \lambda) + \ldots + a_p \exp(-i p \lambda)|^2} = \frac{\sigma^2}{2 \pi} g(\lambda, \vect{\theta}) where :math:`\vect{\theta} = (a_1, a_2,...,a_p,b_1,...,b_q)` and :math:`\lambda` is the frequency value. The Whittle log-likelihood writes : .. math:: \log L_w(\vect{\theta}, \sigma^2) = - \sum_{j=1}^{m} \log f(\lambda_j, \vect{\theta}, \sigma^2) - \frac{1}{2 \pi} \sum_{j=1}^{m} \frac{I(\lambda_j)}{f(\lambda_j, \vect{\theta}, \sigma^2)} where : - :math:`I` is the non parametric estimate of the spectral density, expressed in the Fourier space (frequencies in :math:`[0,2\pi]` instead of :math:`[-f_{max}, f_{max}]`). OpenTURNS uses by default the Welch estimator. - :math:`\lambda_j` is the :math:`j-th` Fourier frequency, :math:`\lambda_j = \frac{2 \pi j}{n}`, :math:`j=1 \ldots m` with :math:`m` the largest integer :math:`\leq \frac{n-1}{2}`. We estimate the :math:`(p+q+1)` scalar coefficients by maximizing the log-likelihood function. The corresponding equations lead to the following relation : .. math:: \sigma^{2*} = \frac{1}{m} \sum_{j=1}^{m} \frac{I(\lambda_j)}{g(\lambda_j, \vect{\theta}^{*})} where :math:`\vect{\theta}^{*}` maximizes : .. math:: \log L_w(\vect{\theta}) = m (\log(2 \pi) - 1) - m \log\left( \frac{1}{m} \sum_{j=1}^{m} \frac{I(\lambda_j)}{g(\lambda_j, \vect{\theta})}\right) - \sum_{j=1}^{m} g(\lambda_j, \vect{\theta}) The Whitle estimation requires that : - the determinant of the eigen values of the companion matrix associated to the polynomial :math:`1 + a_1X + \dots + a_pX^p` are outside the unit disc, which garantees the stationarity of the process; - the determinant of the eigen values of thez companion matrix associated to the polynomial :math:`1 + ba_1X + \dots + b_qX^q` are outside the unit disc, which garantees the invertibility of the process. The criteria *AIC*, :math:`AIC_c` (corrected AIC) and *BIC* are evaluated to help the model selection: .. math:: :nowrap: \begin{eqnarray*} AIC_c & = & -2\log L_w + 2(p + q + 1)\frac{m}{m - p - q - 2}\\ AIC & = & -2\log L_w + 2(p + q + 1)\\ BIC & = & -2\log L_w + 2(p + q + 1)\log(p + q + 1) \end{eqnarray*} where :math:`m` is half the number of points of the time grid of the process sample (if the data are a process sample) or in a block of the time series (if the data are a time series). The *BIC* criterion leads to a model that gives a better prediction. The *AIC* criterion selects the best model that fits the given data. The :math:`AIC_c` criterion improves the previous one by penalizing a too high order that would artificially fit to the data. Examples -------- Create a time series from a scalar ARMA(4,2) and a normal white noise: >>> import openturns as ot >>> myTimeGrid = ot.RegularGrid(0.0, 0.1, 100) >>> myWhiteNoise = ot.WhiteNoise(ot.Triangular(-1.0, 0.0, 1.0), myTimeGrid) >>> myARCoef = ot.ARMACoefficients([0.4, 0.3, 0.2, 0.1]) >>> myMACoef = ot.ARMACoefficients([0.4, 0.3]) >>> myARMAProcess = ot.ARMA(myARCoef, myMACoef, myWhiteNoise) >>> myTimeSeries = myARMAProcess.getRealization() >>> myProcessSample = myARMAProcess.getSample(10) Estimate the ARMA process specifying the orders: >>> myFactory_42 = ot.WhittleFactory(4, 2) Check the default SpectralModelFactory: >>> #print(myFactory_42.getSpectralModelFactory()) Set a particular spectral model: WelchFactory as SpectralModelFactory with the Hanning filtering window: >>> myFilteringWindow = ot. Hanning() >>> mySpectralFactory = ot.WelchFactory(myFilteringWindow, 4, 0) >>> myFactory_42.setSpectralModelFactory(mySpectralFactory) >>> #print(myFactory_42.getSpectralModelFactory()) Estimate the ARMA process specifying a range for the orders: p = [1, 2, 4] and q = [4,5,6]: >>> pIndices = ot.Indices([1, 2, 4]) >>> qIndices = ot.Indices(3) >>> qIndices.fill(4,1) >>> myFactory_Range = ot.WhittleFactory(pIndices, qIndices) To get the quantified AICc, AIC and BIC criteria: >>> myCriterion = ot.Point() >>> myARMA_42 = myFactory_42.build(ot.TimeSeries(myTimeSeries), myCriterion) >>> AICc, AIC, BIC = myCriterion[0:3]" // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::build "Estimate the ARMA process. Available usages: build(*myTimeSeries, criterion*) build(*myProcessSample, criterion*) Parameters ---------- myTimeSeries : :class:`~openturns.TimeSeries` One realization of the process. criterion : :class:`~openturns.Point` with the default implementation, optional To get the evaluation of the AICc, AIC and BIC criteria myProcessSample : :class:`~openturns.ProcessSample` Several realizations of the process. Returns ------- myARMA : :class:`~openturns.ARMA` The process estimated with the Whittle estimator. Notes ----- The model selection is made using the spectral density built using the given data and theoretical spectral density of the ARMA process. The best ARMA process is selected according to the corrected AIC criterion. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::getSpectralModelFactory "Accessor to the spectral factory. Returns ------- initARCoeff : :class:`~openturns.SpectralModelFactory` The spectral factory used to estimate the spectral density based on the data. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::setSpectralModelFactory "Accessor to the spectral factory. Parameters ---------- spectralModelFact : :class:`~openturns.SpectralModelFactory` The spectral factory used to estimate the spectral density based on the data. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::enableHistory "Activate the history of all the estimated models. Notes ----- Activate the history mechanism which is the trace of all the tested models and their associated information criteria. By default, the history mecanism is activated. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::disableHistory "Desactivate the history of all the estimated models. Notes ----- Desactivate the history mechanism which is the trace of all the tested models and their associated information criteria. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::isHistoryEnabled "Check whether the history mecanism is activated. Returns ------- histMec : bool Check whether the history mecanism is activated. By default, the history mecanism is activated. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::isHistoryEnabled "Check whether the history mecanism is activated. Returns ------- histMec : bool Check whether the history mecanism is activated. By default, the history mecanism is activated. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::clearHistory "Clear the history of the factory. Notes ----- Clear the history of the factory. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::getHistory "Check whether the history mecanism is activated. Returns ------- histMec : a list of :class:`~openturns.WhittleFactoryState` Returns the collection of all the states that have been built for the estimation. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::setVerbose "Accessor to the verbose mode. Parameters ---------- verboseMode : bool Set the verbose mode while both the exploration of the possible models and the optimization steps. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::getVerbose "Accessor to the verbose mode. Returns ------- verboseMode : bool Get the verbose mode while both the exploration of the possible models and the optimization steps. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::setStartingPoints "Accessor to the starting points for the optimization step. Parameters ---------- startPointsList : a list of :class:`~openturns.Point` Starting points for the optimization step, for each pair of orders that will be tested. " // --------------------------------------------------------------------- %feature("docstring") OT::WhittleFactory::getStartingPoints "Accessor to the starting points for the optimization step. Returns ------- startPointsList : a list of :class:`~openturns.Point` Starting points for the optimization step, for each pair of orders that will be tested. " openturns-1.9/python/src/Wilks.i000066400000000000000000000003161307543307100167760ustar00rootroot00000000000000// SWIG file Wilks.i %{ #include "openturns/Wilks.hxx" %} %include Wilks_doc.i %include openturns/Wilks.hxx namespace OT { %extend Wilks { Wilks(const Wilks & other) { return new OT::Wilks(other); } } } openturns-1.9/python/src/Wilks_doc.i.in000066400000000000000000000040411307543307100202270ustar00rootroot00000000000000%feature("docstring") OT::Wilks "Class to evaluate the Wilks number. Available constructor: Wilks(*randomVector*) Parameters ---------- randomVector : :class:`~openturns.RandomVector` of dimension 1 Output variable of interest. Notes ----- This class is a static class which enables the evaluation of the Wilks number: the minimal sample size :math:`N_{\alpha, \beta, i}` to perform in order to garantee that the empirical quantile :math:`\alpha`, noted :math:`\tilde{q}_{\alpha} N_{\alpha, \beta, i}` evaluated with the :math:`(n - i)^{th}` maximum of the sample, noted :math:`X_{n - i}` be greater than the theoretical quantile :math:`q_{\alpha}` with a probability at least :math:`\beta`: .. math:: \Pset (\tilde{q}_{\alpha} N_{\alpha, \beta, i} > q_{\alpha}) > \beta where :math:`\tilde{q}_{\alpha} N_{\alpha, \beta, i} = X_{n-i}`." // --------------------------------------------------------------------- %feature("docstring") OT::Wilks::ComputeSampleSize "Evaluate the size of the sample. Parameters ---------- alpha : positive float :math:`< 1` The order of the quantile we want to evaluate. beta : positive float :math:`< 1` Confidence on the evaluation of the empirical quantile. i : int Rank of the maximum which will evaluate the empirical quantile. Default :math:`i = 0` (maximum of the sample) Returns ------- w : int the Wilks number." // --------------------------------------------------------------------- %feature("docstring") OT::Wilks::computeQuantileBound "Evaluate the bound of the quantile. Parameters ---------- alpha : positive float :math:`< 1` The order of the quantile we want to evaluate. beta : positive float :math:`< 1` Confidence on the evaluation of the empirical quantile. i : int Rank of the maximum which will evaluate the empirical quantile. Default :math:`i = 0` (maximum of the sample) Returns ------- q : :class:`~openturns.Point` The estimate of the quantile upper bound for the given quantile level, at the given confidence level and using the given upper statistics."openturns-1.9/python/src/Wishart.i000066400000000000000000000003361307543307100173300ustar00rootroot00000000000000// SWIG file Wishart.i %{ #include "openturns/Wishart.hxx" %} %include Wishart_doc.i %include openturns/Wishart.hxx namespace OT { %extend Wishart { Wishart(const Wishart & other) { return new OT::Wishart(other); } } } openturns-1.9/python/src/Wishart_doc.i.in000066400000000000000000000032041307543307100205570ustar00rootroot00000000000000%feature("docstring") OT::Wishart "Wishart distribution. Parameters ---------- v : 2-d sequence of float Scale matrix, positive definite of size :math:`p`. nu : float, :math:`\nu > p - 1` Degrees of freedom. Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.Wishart(ot.CovarianceMatrix([[1.0]]), 3.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::Wishart::getNu "Accessor to the degrees of freedom parameter. Returns ------- nu : float Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::Wishart::setNu "Accessor to the degrees of freedom parameter. Parameters ---------- nu : float, :math:`\nu > 0` Degrees of freedom." // --------------------------------------------------------------------- %feature("docstring") OT::Wishart::getV "Accessor to the scale parameter. Returns ------- v : :class:`~openturns.CovarianceMatrix` Scale matrix, positive definite of size :math:`p`." // --------------------------------------------------------------------- %feature("docstring") OT::Wishart::setV "Accessor to the scale parameter. Parameters ---------- v : 2-d sequence of float Scale matrix, positive definite of size :math:`p`." // --------------------------------------------------------------------- %feature("docstring") OT::Wishart::getRealizationAsMatrix "Get one realization of the distribution as a covariance matrix. Returns ------- v : :class:`~openturns.CovarianceMatrix` A realization as a matrix" openturns-1.9/python/src/XMLStorageManager.i000066400000000000000000000002371307543307100211670ustar00rootroot00000000000000// SWIG file XMLStorageManager.i %{ #include "openturns/XMLStorageManager.hxx" %} %include XMLStorageManager_doc.i %include openturns/XMLStorageManager.hxx openturns-1.9/python/src/XMLStorageManager_doc.i.in000066400000000000000000000023531307543307100224220ustar00rootroot00000000000000%feature("docstring") OT::XMLStorageManager "Storage manager that drives a XML file. Available constructors: XMLStorageManager(*filename*) Parameters ---------- fileName : str Name of the file containing the study. Notes ----- *XMLStorageManager* enables to read and write OPENTURNS' objects from a XML file. See also -------- StorageManager Examples -------- >>> import openturns as ot >>> # Create a study: >>> myStudy = ot.Study() >>> myStudy.setStorageManager(ot.XMLStorageManager('myStudy.xml')) >>> # Add an object in the study: >>> simulationResult = ot.SimulationResult(ot.Event(), 0.5, 0.01, 150, 4) >>> myStudy.add('simulationResult', simulationResult) >>> # Save the Study in the file myStudy.xml: >>> myStudy.save()" // --------------------------------------------------------------------- %feature("docstring") OT::XMLStorageManager::getFileName "Get the name of the file containing the study. Returns ------- fileName : str Name of the file containing the study." // --------------------------------------------------------------------- %feature("docstring") OT::XMLStorageManager::setFileName "Set the name of the file containing the study. Parameters ---------- fileName : str Name of the file containing the study."openturns-1.9/python/src/ZipfMandelbrot.i000066400000000000000000000004261307543307100206270ustar00rootroot00000000000000// SWIG file ZipfMandelbrot.i %{ #include "openturns/ZipfMandelbrot.hxx" %} %include ZipfMandelbrot_doc.i %include openturns/ZipfMandelbrot.hxx namespace OT { %extend ZipfMandelbrot { ZipfMandelbrot(const ZipfMandelbrot & other) { return new OT::ZipfMandelbrot(other); } } } openturns-1.9/python/src/ZipfMandelbrot_doc.i.in000066400000000000000000000042551307543307100220650ustar00rootroot00000000000000%feature("docstring") OT::ZipfMandelbrot "ZipfMandelbrot distribution. Available constructors: ZipfMandelbrot(*N=1.0, q=0., s=1.0*) Parameters ---------- N : int, :math:`N > 0` q : float, :math:`q \geq 0` s : float, :math:`s > 0` Notes ----- Its probability density function is defined as: .. math:: \Prob{X = k} = \frac{1}{(k+q)^s \mathrm{H}(N,q,s)}, \quad \forall k \in [1, N] where :math:`\mathrm{H}(N,q,s)` is the Generalized Harmonic Number: :math:`\mathrm{H}(N,q,s) = \sum_{i=1}^{N} \frac{1}{(i+q)^s}`. Its first moments are: .. math:: :nowrap: \begin{eqnarray*} \Expect{X} & = & \frac{\mathrm{H}_{N,q,s-1}}{\mathrm{H}_{N,q,s}}-q \\ \Var{X} & = & \frac{\displaystyle \sum_{i=1}^N \frac{(i - \Expect{X})^2}{(i+q)^s}}{\mathrm{H}_{N,q,s}} \end{eqnarray*} Examples -------- Create a distribution: >>> import openturns as ot >>> distribution = ot.ZipfMandelbrot(15, 1.2, 2.0) Draw a sample: >>> sample = distribution.getSample(5)" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::getN "Accessor to the parameter :math:`N`. Returns ------- N : int" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::getQ "Accessor to the parameter :math:`q`. Returns ------- q : float" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::getS "Accessor to the parameter :math:`s`. Returns ------- s : float" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::setN "Accessor to the parameter :math:`N`. Parameters ---------- N : int, :math:`N > 0`" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::setQ "Accessor to the parameter :math:`q`. Parameters ---------- q : float, :math:`q >= 0`" // --------------------------------------------------------------------- %feature("docstring") OT::ZipfMandelbrot::setS "Accessor to the parameter :math:`s`. Parameters ---------- s : float, :math:`s > 0`" openturns-1.9/python/src/__init__.py000066400000000000000000000070031307543307100176440ustar00rootroot00000000000000""" OpenTURNS, uncertainty engineering software. Documentation is available online at http://www.openturns.org. Available submodules -------------------- common --- Utility classes typ --- Internal data types statistics --- Statistical classes graph --- Graphical output geom --- Geometrical primitives func --- Function primitives diff --- Differential algorithms optim --- Optimization routines solver --- Solvers algo --- Approximation algorithms experiment --- Non probabilistic designs of experiments base --- Deterministic meta-package classification --- Classification algorithms model_copula --- Copulas randomvector --- Random vectors dist --- Probabilistic distributions model_process --- Stochastic processes weightedexperiment --- Probabilistic designs of experiments orthogonalbasis --- Polynomial primitives metamodel --- Meta-modelling transformation --- Iso-probabilistic and process transformations analytical --- Analytical uncertainty propagation algorithms simulation --- Simulation uncertainty propagation algorithms stattests --- Statistical tests bayesian --- Bayesian updating uncertainty --- Probabilistic meta-package Utility modules --------------- viewer --- Matplotlib-based viewer coupling_tools --- External code coupling helpers Environment variables --------------------- OPENTURNS_HOME --- Custom installation path OPENTURNS_CONFIG_PATH --- Path to configuration file OPENTURNS_LOG_SEVERITY --- Log severity flag, for example "ALL" """ import sys # SWIG-related: check if interactive mode if not hasattr(sys, 'ps1'): try: # ipython does not define ps1 __IPYTHON__ except: # Reset the default Crtl-C behavior import signal try: signal.signal(signal.SIGINT, signal.SIG_DFL) except ValueError: pass from .common import * from .typ import * from .graph import * from .geom import * from .func import * from .statistics import * from .diff import * from .optim import * from .solver import * from .algo import * from .experiment import * from .base import * from .model_copula import * from .randomvector import * from .dist import * from .model_process import * from .weightedexperiment import * from .classification import * from .orthogonalbasis import * from .metamodel import * from .transformation import * from .analytical import * from .simulation import * from .stattests import * from .bayesian import * from .uncertainty import * from .coupling_tools import * def Show(graph): """ Display a graph pop-up. Parameters ---------- graph : Graph the graph to display """ from .viewer import View view = View(graph) view.ShowAll() __version__ = PlatformInfo.GetVersion() openturns-1.9/python/src/algo_module.i000066400000000000000000000036611307543307100202020ustar00rootroot00000000000000// SWIG file algo_module.i %module(package="openturns", docstring="Approximation algorithms.") algo //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTAlgo.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTFunc.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i %import BaseCommonTemplateDefs.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Func */ %include BaseFuncCollection.i %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i /* Base/Algo */ %include ApproximationAlgorithmImplementation.i %include ApproximationAlgorithm.i %include ApproximationAlgorithmImplementationFactory.i %include ClassifierImplementation.i %include Classifier.i %include FittingAlgorithmImplementation.i %include FittingAlgorithm.i %include KDTree.i %include KFold.i %include CorrectedLeaveOneOut.i %include DesignProxy.i %include LeastSquaresMethodImplementation.i %include LeastSquaresMethod.i %include CholeskyMethod.i %include QRMethod.i %include SVDMethod.i %include SparseMethod.i %include LeastSquaresMetaModelSelection.i %include LeastSquaresMetaModelSelectionFactory.i %include PenalizedLeastSquaresAlgorithm.i %include PenalizedLeastSquaresAlgorithmFactory.i %include KissFFT.i %include IntegrationAlgorithmImplementation.i %include IntegrationAlgorithm.i %include GaussKronrodRule.i %include GaussKronrod.i %include GaussLegendre.i %include IteratedQuadrature.i %include ExpertMixture.i %include KarhunenLoeveP1Factory.i %include KarhunenLoeveResultImplementation.i %include KarhunenLoeveResult.i %include KarhunenLoeveAlgorithmImplementation.i %include KarhunenLoeveAlgorithm.i %include KarhunenLoeveP1Algorithm.i %include KarhunenLoeveSVDAlgorithm.i /* At last we include template definitions */ %include BaseAlgoTemplateDefs.i openturns-1.9/python/src/analytical_module.i000066400000000000000000000021051307543307100213710ustar00rootroot00000000000000// SWIG file analytical_module.i %module(package="openturns", docstring="Analytical uncertainty propagation algorithms.") analytical #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTTransformation.hxx" #include "openturns/OTAnalytical.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import metamodel_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/Algorithm/Transformation */ %import transformation_module.i %import UncertaintyTransformationTemplateDefs.i /* Uncertainty/Algorithm/Analytical */ %include AnalyticalResult.i %include Analytical.i %include FORMResult.i %include FORM.i %include SORMResult.i %include SORM.i %include StrongMaximumTest.i /* At last we include template definitions */ %include UncertaintyAnalyticalTemplateDefs.i openturns-1.9/python/src/base_module.i000066400000000000000000000030321307543307100201620ustar00rootroot00000000000000// SWIG file base_module.i %module(package="openturns", docstring="Deterministic meta-package.") base //#pragma SWIG nowarn=314 //%feature("autodoc","1"); %pythoncode %{ from openturns.common import PlatformInfo def TESTPREAMBLE(): """ TESTPREAMBLE handles command-line arguments. Catch the --version argument on the command line, print a identification string and then exit softly. """ import sys if '--version' in sys.argv: print(sys.argv[0] + ' ' + PlatformInfo.GetVersion()) sys.exit(0) %} %{ #include "openturns/OTconfig.hxx" #include "openturns/OT.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i %import BaseCommonTemplateDefs.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i /* Base/Graph */ %import graph_module.i %import BaseGraphTemplateDefs.i /* Base/Graph */ %import geom_module.i /* Base/Func */ %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Diff */ %import diff_module.i %import BaseDiffTemplateDefs.i /* Base/Optim */ %import optim_module.i %import BaseOptimTemplateDefs.i /* Base/Solver */ %import solver_module.i %import BaseSolverTemplateDefs.i /* Base/Algo */ %import algo_module.i %import BaseAlgoTemplateDefs.i /* Base/Experiments */ %import experiment_module.i %import BaseExperimentTemplateDefs.i /* At last we include template definitions */ %include BaseTemplateDefs.i openturns-1.9/python/src/bayesian_module.i000066400000000000000000000017571307543307100210570ustar00rootroot00000000000000// SWIG file bayesian_module.i %module(package="openturns", docstring="Bayesian algorithms.") bayesian //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTBayesian.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %include UncertaintyModelCopulaCollection.i %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i %import dist_bundle1_module.i %import dist_bundle2_module.i /* Uncertainty/Model */ %import randomvector_module.i /* Uncertainty/Bayesian */ %include CalibrationStrategyImplementation.i %include CalibrationStrategy.i %include SamplerImplementation.i %include Sampler.i %include MCMC.i %include RandomWalkMetropolisHastings.i %include PosteriorRandomVector.i /* At last we include template definitions */ %include UncertaintyBayesianTemplateDefs.i openturns-1.9/python/src/classification_module.i000066400000000000000000000014731307543307100222520ustar00rootroot00000000000000// SWIG file classification_module.i %module(package="openturns", docstring="Classification algorithms.") classification #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTClassification.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i //%import randomvector_module.i %import dist_bundle1_module.i %import dist_bundle2_module.i /* Uncertainty/Algorithm/Classification */ %include MixtureClassifier.i /* At last we include template definitions */ %include UncertaintyClassificationTemplateDefs.i openturns-1.9/python/src/common_module.i000066400000000000000000000020161307543307100205410ustar00rootroot00000000000000// SWIG file common_module.i %module(package="openturns", docstring="Utility classes.") common //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %include Memory.i %include TBB.i %include Object.i %include PersistentObject.i %include SharedPointer.i %include Pointer.i %include InterfaceObject.i %include TypedInterfaceObject.i %include TypedCollectionInterfaceObject.i %include Study.i %include StorageManager.i //%include BinaryStorageManager.i #ifdef OPENTURNS_HAVE_LIBXML2 %include XMLStorageManager.i #endif %include TTY.i %include Log.i %include Path.i %include Catalog.i %include ResourceMap.i %include ComparisonOperatorImplementation.i %include ComparisonOperator.i %include Equal.i %include Greater.i %include GreaterOrEqual.i %include Less.i %include LessOrEqual.i %include PlatformInfo.i /* At last we include template definitions */ %include BaseCommonTemplateDefs.i openturns-1.9/python/src/coupling_tools.py000066400000000000000000000603241307543307100211520ustar00rootroot00000000000000# -*- Python -*- # # @brief Gives functions that help coupling against external code, # .i.e: manipulate template file. # # Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # along with this library. If not, see . # # """ External code helpers. Provides several functions to ease wrapping of an external code: - replace: allows to replace a value in template file - execute: run an external code - get: parse values from a result file """ import re import shutil import os import shlex import subprocess import sys debug = False default_encoding = sys.getdefaultencoding() def check_param(obj, obj_type): """Assert obj as type obj_type.""" # int casts into long ; long is deprecated if (obj_type == int) and (sys.version_info[0] < 3): obj_type = long try: obj_type(obj) except: raise AssertionError("error: parameter (" + str(type(obj)) + ": " + str(obj) + ") must be of " + str(obj_type) + "!") def replace(infile, outfile, tokens, values, formats=None, encoding=default_encoding): """ Replace tokens in a file. Parameters ---------- infile : str, template file that will be parsed outfile : str, file that will received the template parsed. If equal to "None" or to "infile", the result file will be moved to infile. tokens : list, regexes that will be replaced values : list, values (can be string, float, ...) that will replace the tokens. The list must have the same size as tokens. formats : list, optional, a list of formats for printing the values in the parsed files at tokens locations see https://docs.python.org/2/library/string.html#formatspec encoding : str, optional, file encoding see http://docs.python.org/2/library/codecs.html#codec-base-classes Raises ------ AssertionError parameters badly set EOFError a token has not been found Examples -------- template.in = 'E=@E_VAR F=-PF-') >>> # replace(infile="template.in", >>> # outfile="prgm_data.in", >>> # tokens=["@E_VAR", ".PF."], >>> # values=[1.4, "5"]) >>> # prgm_data.in = 'E=1.4 F=5' be careful with overlapping tokens !! template.in = 'E=@E EE=@EE') >>> # replace(infile="template.in", >>> # outfile="prgm_data.in", >>> # tokens=["@E", "@EE"], >>> # values=[1, 2]) It raises exception!! -> @EE token not found! (this is due to the first pass with token "@E" that modify prgm_data.in like this : 'E=1 EE=1E') deals with overlapping tokens : put longest tokens first template.in = 'E=@E EE=@EE') >>> # replace(infile="template.in", >>> # outfile="prgm_data.in", >>> # tokens=["@EE", "@E"], >>> # values=[2, 1]) >>> # prgm_data.in = 'E=1 EE=2') """ if len(tokens) != len(values): raise AssertionError("Error: tokens size is != values size!") check_param(tokens, list) check_param(values, list) if formats is not None: check_param(formats, list) if len(values) != len(formats): raise AssertionError("Error: values size is != formats size!") else: formats = ['{0}'] * len(values) inplace = False if (outfile is None) or (infile == outfile): inplace = True outfile = infile + ".temporary_outfile" infile_handle = open(infile, 'rb') outfile_handle = open(outfile, 'wb') regex_tokens = [] found_tokens = [] for token in tokens: regex_tokens.append(re.compile(token)) found_tokens.append(False) for line in infile_handle: line = line.decode(encoding) i = 0 for regex_token in regex_tokens: found = regex_token.search(line) while found is not None: found_tokens[i] = True line = line.replace( found.group(0), formats[i].format(values[i])) found = regex_token.search(line) i += 1 outfile_handle.write(line.encode(encoding)) infile_handle.close() outfile_handle.close() for token, found_token in zip(tokens, found_tokens): if not found_token: raise EOFError("Error: token '" + token + "' not found!") if inplace: os.remove(infile) shutil.move(outfile, infile) def execute(cmd, workdir=None, is_shell=False, shell_exe=None, hide_win=True, check_exit_code=True, get_stdout=False, get_stderr=False, timeout=None): """ Launch an external processus in a clean way. Parameters ---------- cmd : str, representing the command. e.g.: "ls -l /home" workdir : str, current directory of the executed command is_shell : bool, if set to True, the command is started in a shell (bash). default: False. shell_exe : str, path to the shell. e.g. /bin/zsh. default: None -> /bin/bash. hide_win : str, hide cmd.exe popup on windows check_exit_code : bool, if set to True: raise a RuntimeError exception if return code of process != 0 get_stdout : bool, whether standard output of the command is returned get_stderr : bool, whether standard error of the command is returned timeout : int, child process timeout (Python >= 3.3 only) Returns ------- ret : int the exit code of the command stdout_data : str the stdout data if get_stdout parameter is set stderr_data : str the stderr data if get_stderr parameter is set Raises ------ RuntimeError could not run Examples -------- >>> # ret, stdout = execute('/bin/ls /bin/kill', get_stdout=True). >>> ## => ret = 0, stdout = '/bin/kill' """ # split cmd if not in a shell before passing it to os.execvp() process_args = cmd if is_shell else shlex.split(cmd) # override startupinfo to hide windows console startupinfo = None if hide_win and sys.platform.startswith('win'): startupinfo = subprocess.STARTUPINFO() if hasattr(subprocess, 'STARTF_USESHOWWINDOW'): startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW else: startupinfo.dwFlags |= 1 stdout = subprocess.PIPE if get_stdout else None stderr = subprocess.PIPE if get_stderr else None proc = subprocess.Popen(process_args, shell=is_shell, cwd=workdir, executable=shell_exe, stdout=stdout, stderr=stderr, startupinfo=startupinfo) if sys.version_info >= (3, 3,): try: stdout_data, stderr_data = proc.communicate(timeout=timeout) except subprocess.TimeoutExpired: proc.kill() stdout_data, stderr_data = proc.communicate() raise RuntimeError('Command (' + cmd + ') times out after ' + str(timeout) + 's') else: stdout_data, stderr_data = proc.communicate() ret = proc.poll() # check return code if check_exit_code and ret != 0: raise RuntimeError( 'Command (' + cmd + ') returned exit code ' + str(ret)) if get_stdout and get_stderr: return ret, stdout_data, stderr_data elif get_stdout: return ret, stdout_data elif get_stderr: return ret, stderr_data return ret def get_regex(filename, patterns, encoding=default_encoding): """ Get results from a file using regex. Parameters ---------- filename : str, the file to parse patterns : list, patterns that will permit to get the values see https://docs.python.org/2/library/re.html for available patterns The value to be searched must be surrounded by parenthesis. encoding : str, file encoding see http://docs.python.org/2/library/codecs.html#codec-base-classes Returns ------- results : list, values corresponding to each pattern If nothing has been found, the corresponding value is set to None. Raises ------ AssertionError parameters badly set EOFError no value found Examples -------- >>> ## simple (results.out = '@E=-9.5E8') >>> #Y = get_regex(filename='results.out',patterns=['@E=(\R)']) >>> ## Y = [-9.5E8] """ if not isinstance(patterns, list) or len(patterns) == 0: raise AssertionError("error: patterns parameter badly set!") results = [None] * len(patterns) re_patterns = [] for pattern in patterns: # OT-like shortcuts pattern = pattern.replace('\R', '[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?') pattern = pattern.replace('\I', '[+-]? *\d+') re_patterns.append(re.compile(pattern)) file_handle = open(filename, 'rb') for line in file_handle: line = line.decode(encoding) i = 0 for re_pattern in re_patterns: match = re_pattern.search(line) if match: results[i] = float(match.group(1)) i += 1 file_handle.close() for result, pattern in zip(results, patterns): if result is None: raise EOFError('error: no pattern (' + pattern + ') found!') return results def get_real_from_line(line): """ Try to get a real value from the beginning of a text line. Returns ------- value : float or int Found value. Raise an exception if nothing found. """ result = None # print "token=" + str(token) + ', skip_token=' + str(skip_token) + ','\ # 'skip_line=' + str(skip_line) + ', skip_col=' + str(skip_col) # \S*: spaces are allowed at the beginning of the real real_regex = '\s*[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?' # real_regex = '[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?' re_real = re.compile(real_regex) # get the value match = re_real.match(line) if match: result = float(line[match.start():match.end()]) if result is None: raise EOFError('error: real not found at the beginning of this line: ' '(' + line + ')!') return result def read_line(handle, seek=0, encoding=default_encoding): """ Get next line. Parameters ---------- seek : int if seek < 0: stop reading seek before the end of the file encoding : str file encoding, see http://docs.python.org/2/library/codecs.html#codec-base-classes """ line = handle.readline().decode(encoding) if seek < 0 and line != '': if handle.tell() > -seek: if debug: sys.stderr.write('line before cut ->' + line + '<-\n') # cut the end of the line line = line[:len(line) - (handle.tell() + seek)] # after cut, if the line is empty, add a \n to behave like # readline() python function if line == '': line = '\n' # any further read will return '' handle.seek(0, os.SEEK_END) if debug: sys.stderr.write('line after cut ->' + line + '<-\n') if debug: sys.stderr.write('read_line: ->' + line + '<-\n') return line def get_line_col(filename, skip_line=0, skip_col=0, seek=0, encoding=default_encoding): """ Get a token at specific coordinates. Parameters ---------- skip_line : int, number of lines skipped If skip_line < 0: count lines backward from the end of the file. Be careful: a last empty line is taken into account too! Default: 0: no line skipped skip_col : int, number of columns skipped from the beginning or end of the line. If skip_col < 0: count col backward from the end of the line. Default: 0: no column skipped seek : int, if > 0, consider the file starts at pos seek. if < 0, consider the file ends at pos -seek (and NOT (end-(-seek))!). Default: 0: consider the whole file. encoding : str, file encoding see http://docs.python.org/2/library/codecs.html#codec-base-classes Returns ------- result : float, value to retrieve """ check_param(filename, str) check_param(skip_line, int) check_param(skip_col, int) check_param(seek, int) handle = open(filename, 'rb') if seek > 0: handle.seek(seek) if debug: sys.stderr.write('get_line_col(skip_line=' + str(skip_line) + ', skip_col=' + str(skip_col) + ', seek=' + str(seek) + ')\n') # skip line backward if skip_line < 0: # cache position of each beginning of line # last elt of the list is the last inserted lines_cache = [] # determine number of elt to cache lines_cache_size = -skip_line # build lines cache previous_pos = handle.tell() line = read_line(handle, seek, encoding) while line != '': # append to cache lines_cache.append(previous_pos) if len(lines_cache) > lines_cache_size: # todo: list not optimized to del before the end del lines_cache[0] previous_pos = handle.tell() line = read_line(handle, seek, encoding) if debug: sys.stderr.write('lines_cache: ' + str(lines_cache) + '\n') if len(lines_cache) < lines_cache_size: err_msg = 'error: the file has less than ' + str(lines_cache_size) +\ ' lines!' handle.close() raise EOFError(err_msg) else: handle.seek(lines_cache[0]) line_found = read_line(handle, seek, encoding) if debug: sys.stderr.write('line found: ->' + line_found + '<-\n') # skip line forward else: while skip_line >= 0: line = read_line(handle, seek, encoding) if skip_line > 0 and line == '': handle.close() raise EOFError( 'error: the file has less lines than "skip_line"!') skip_line -= 1 line_found = line handle.close() # get the good col if skip_col != 0: try: line_found = line_found.split()[skip_col] except: raise EOFError('error: value not found on this line: (' + line_found + ')!') # get the value result = get_real_from_line(line_found) return result def get_value(filename, token=None, skip_token=0, skip_line=0, skip_col=0, encoding=default_encoding): """ Get one result from a file using token and/or various offsets. This function is optimized to be rather fast and takes low memory on human readable file. Parameters ---------- filename : str, the file that will be parsed token : str, a regex that will be searched. The value right after the token is returned. Default: None (no token searched) skip_token : int, the number of tokens that will be skipped before getting the value. If set to != 0, the corresponding token parameter must not be equal to None. If skip_tokens < 0: count tokens backward from the end of the file. Default: 0: no token skipped skip_line : int, number of lines skipped from the token found. If corresponding token equal None, skip from the beginning of the file. If corresponding token != None, skip from the token. If skip_line < 0: count lines backward from the token or from the end of the file. Be careful: a last empty line is taken into account too. Default: 0: no line skipped skip_col : int, number of columns skipped from the token found. If corresponding token = None, skip words from the beginning of the line. If corresponding token != None, skip words from the token. If skip_col < 0: count col backward from the end of the line or from the token. Default: 0: no column skipped encoding : str, file encoding see http://docs.python.org/2/library/codecs.html#codec-base-classes Returns ------- value : float Raises ------ AssertionError parameters badly set EOFError no value found Examples -------- simple token (results.out = ' @Y1=2.6, Y2= -6.6E56') >>> # Y = coupling_tools.get_value(filename='results.out', >>> # token='@Y1=', >>> # ) >>> # Y = 2.6 using token ans skip_tokens (results.out = '@Y1=5.9 @Y1=2.6 # temperature 2') >>> # Y = coupling_tools.get_value(filename='results.out', >>> # token='@Y1=', >>> # skip_token=1, >>> # ) >>> # Y = 2.6 using column & line (results.out = ' 2.6 3.5 6.8 9.0 3.6 7.5 6.9 9.8 ') >>> # Y = coupling_tools.get_value(filename='results.out', >>> # skip_line=1, >>> # skip_col=-2, >>> # ) >>> # Y = 6.9 mix it (results.out = ' 2.6 Y1=3.5 Y1=6.8 9.0 temperatures: 88.8 99.9 # ') >>> # Y = coupling_tools.get_value(filename='results.out', >>> # token='Y1=', >>> # skip_token=1, >>> # skip_line=0, >>> # skip_col=1, >>> # ) >>> # Y = 9.0 """ if debug: sys.stderr.write("get_value(token=" + str(token) + ', skip_token=' + str(skip_token) + ', skip_line=' + str(skip_line) + ', skip_col=' + str(skip_col) + ')\n') # check parameters check_param(filename, str) if token is not None: check_param(token, str) elif skip_token != 0: raise AssertionError("error: skip_token parameter needs token " "parameter to be set!") check_param(skip_token, int) check_param(skip_line, int) check_param(skip_col, int) result = None if not token: result = get_line_col(filename, skip_line, skip_col, encoding=encoding) else: handle = open(filename, 'rb') re_token = re.compile(token) # store previous begin of line pos line_pos = handle.tell() # store token pos [elt 0: start pos of the token, elt 1: end of the # token] if skip_token >= 0: token_pos = None else: token_pos_cache = [] line = handle.readline().decode(encoding) while line != '': for token_match in re_token.finditer(line): if skip_token > 0: # token found but it's not the good one skip_token -= 1 elif skip_token == 0: # token found token_pos = [line_pos + token_match.start(), line_pos + token_match.end()] if debug: sys.stderr.write( 'skip_token == 0, line: ' + line + '\n') break else: # token wanted in revert order: we first cache them all token_pos_cache.append([line_pos + token_match.start(), line_pos + token_match.end()]) if skip_token >= 0 and token_pos is not None: # token found break line_pos = handle.tell() line = handle.readline().decode(encoding) # get the token from the cache if skip_token < 0 and len(token_pos_cache) >= -skip_token: token_pos = token_pos_cache[skip_token] if token_pos is None: handle.close() raise EOFError('error: no token (' + token + ') was found!') if skip_line == 0 and skip_col == 0: # get the real right after the token handle.seek(token_pos[1]) line = handle.readline().decode(encoding) if debug: sys.stderr.write('first token, line_found: ' + line + '\n') result = get_real_from_line(line) handle.close() # fixme: no multiple close? else: # get the real by skipping from the token if skip_line < 0 or (skip_line == 0 and skip_col < 0): # search before the token seek_pos = -token_pos[0] skip_line -= 1 # skip line from the token else: # search after the token seek_pos = token_pos[1] handle.close() result = get_line_col( filename, skip_line, skip_col, seek_pos, encoding=encoding) return result def get(filename, tokens=None, skip_tokens=None, skip_lines=None, skip_cols=None, encoding=default_encoding): """ Get results from a file using token and/or various offsets. Parameters ---------- filename : str, the file that will be parsed Each following parameters must be a list. The first element of each list will be used to get the first value, the 2nd ... If the parameter is set to None, the list is set to the default value of get_value(), i.e skip_lines=None => [0, 0, ...]. tokens: skip_tokens: skip_lines: skip_cols: see get_value() function encoding: file encoding, see http://docs.python.org/2/library/codecs.html#codec-base-classes Returns ------- result : list, of real values. Raises ------ AssertionError parameters badly set EOFError no value found Examples -------- simple token (results.out = ' @Y1=2.6, Y2= -6.6E56') >>> # Y = coupling_tools.get(filename='results.out', >>> # tokens=['@Y1=', 'Y2='], >>> # ) >>> # Y = [2.6, -6.6E56] mix (results.out = ' 2.6 Y1=3.5 Y1=6.8 9.0 temperatures: 88.8 99.9 # ') >>> # Y = coupling_tools.get(filename='results.out', >>> # tokens=['Y1=', None], >>> # skip_tokens=[1, 0], >>> # skip_lines=[0, 2], >>> # skip_cols=[1, 1], >>> # ) >>> # Y = [9.0, 99.9] """ # test parameters and determine the number of value to return nb_values = None if tokens is not None: nb_values = len(tokens) err_msg = "error: skip_tokens parameter needs tokens parameter to be set!" if skip_tokens is not None: if nb_values is None: raise AssertionError(err_msg) elif nb_values != len(skip_tokens): raise AssertionError(err_msg) if skip_lines is not None: if nb_values is None: nb_values = len(skip_lines) elif nb_values != len(skip_lines): raise AssertionError(err_msg) if skip_cols is not None: if nb_values is None: nb_values = len(skip_cols) elif nb_values != len(skip_cols): raise AssertionError(err_msg) if nb_values is None: raise AssertionError("error: no parameters have been set!") # init properly every list if tokens is None: tokens = [None] * nb_values if skip_tokens is None: skip_tokens = [0] * nb_values if skip_lines is None: skip_lines = [0] * nb_values if skip_cols is None: skip_cols = [0] * nb_values results = [None] * nb_values # possible optimization: get values in one pass for n in range(nb_values): results[n] = get_value(filename, tokens[n], skip_tokens[n], skip_lines[n], skip_cols[n], encoding=encoding) return results openturns-1.9/python/src/diff_module.i000066400000000000000000000021621307543307100201630ustar00rootroot00000000000000// SWIG file diff_module.i %module(package="openturns", docstring="Differential algorithms.") diff //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTFunc.hxx" #include "openturns/OTDiff.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i /* Base/Func */ %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Diff */ %include FiniteDifferenceStepImplementation.i %include FiniteDifferenceStep.i %include ConstantStep.i %include BlendedStep.i %include FiniteDifferenceGradient.i %include FiniteDifferenceHessian.i %include CenteredFiniteDifferenceGradient.i %include CenteredFiniteDifferenceHessian.i %include NonCenteredFiniteDifferenceGradient.i /* At last we include template definitions */ %include BaseDiffTemplateDefs.i openturns-1.9/python/src/dist.py000066400000000000000000000003031307543307100170440ustar00rootroot00000000000000"""Probabilistic distributions submodule.""" # it's split across several modules to speed-up compilation time from .dist_bundle1 import * from .dist_bundle2 import * from .dist_bundle3 import * openturns-1.9/python/src/dist_bundle1_module.i000066400000000000000000000030471307543307100216330ustar00rootroot00000000000000// SWIG file dist_module.i %module(package="openturns", docstring="Probabilistic distributions.") dist_bundle1 #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i %import model_copula_module.i /* Uncertainty/Distribution (except copulas) */ %include DistFunc.i %include Arcsine.i %include ArcsineFactory.i %include ArcsineMuSigma.i %include Bernoulli.i %include BernoulliFactory.i %include BernsteinCopulaFactory.i %include Beta.i %include BetaFactory.i %include BetaMuSigma.i %include Binomial.i %include BinomialFactory.i %include Burr.i %include BurrFactory.i %include Chi.i %include ChiFactory.i %include ChiSquare.i %include ChiSquareFactory.i %include CompositeDistribution.i %include Dirac.i %include DiracFactory.i %include Dirichlet.i %include DirichletFactory.i %include Epanechnikov.i %include Exponential.i %include ExponentialFactory.i %include FisherSnedecor.i %include FisherSnedecorFactory.i %include Frechet.i %include Gamma.i %include GammaFactory.i %include GammaMuSigma.i %include GeneralizedExtremeValue.i %include GeneralizedPareto.i %include GeneralizedParetoFactory.i %include Geometric.i %include GeometricFactory.i %include Gumbel.i %include GumbelFactory.i %include GumbelAB.i %include GumbelMuSigma.i /* At last we include template definitions */ %include UncertaintyDistTemplateDefs.i openturns-1.9/python/src/dist_bundle2_module.i000066400000000000000000000035421307543307100216340ustar00rootroot00000000000000// SWIG file dist_module.i %module(package="openturns", docstring="Probabilistic distributions.") dist_bundle2 #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i %include UncertaintyModelCopulaCollection.i %import model_copula_module.i /* Uncertainty/Distribution (except copulas) */ %include Histogram.i %include HistogramFactory.i %include BayesDistribution.i %include InverseChiSquare.i %include InverseGamma.i %include InverseNormal.i %include InverseNormalFactory.i %include InverseWishart.i %include KPermutationsDistribution.i %include KernelMixture.i %include KernelSmoothing.i %include Laplace.i %include LaplaceFactory.i %include Logistic.i %include LogisticFactory.i %include LogNormal.i %include LogNormalFactory.i %include LogNormalMuSigma.i %include LogNormalMuSigmaOverMu.i %include LogUniform.i %include LogUniformFactory.i %include MarginalDistribution.i %include MaximumDistribution.i %include MaximumEntropyOrderStatisticsDistribution.i %include MaximumEntropyOrderStatisticsCopula.i %include MaximumLikelihoodFactory.i %include MeixnerDistribution.i %include MeixnerDistributionFactory.i %include MethodOfMomentsFactory.i %include Mixture.i /* Must be after Mixture */ %include ConditionalDistribution.i /* Must be after ConditionalDistribution */ %include PosteriorDistribution.i %include Multinomial.i %include MultinomialFactory.i %include NegativeBinomial.i %include NegativeBinomialFactory.i %include NonCentralChiSquare.i %include NonCentralStudent.i %include Normal.i %include NormalFactory.i %include NormalGamma.i /* At last we include template definitions */ %include UncertaintyDistTemplateDefs.i openturns-1.9/python/src/dist_bundle3_module.i000066400000000000000000000026131307543307100216330ustar00rootroot00000000000000// SWIG file dist_module.i %module(package="openturns", docstring="Probabilistic distributions.") dist_bundle3 #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i %include UncertaintyModelCopulaCollection.i %import model_copula_module.i /* Uncertainty/Distribution (except copulas) */ %include OrderStatisticsMarginalChecker.i %include ParametrizedDistribution.i %include Poisson.i %include PoissonFactory.i %include ProductDistribution.i %include RandomMixture.i %include Rayleigh.i %include RayleighFactory.i %include Rice.i %include RiceFactory.i %include Skellam.i %include SkellamFactory.i %include Student.i %include StudentFactory.i %include Trapezoidal.i %include TrapezoidalFactory.i %include Triangular.i %include TriangularFactory.i %include TruncatedDistribution.i %include TruncatedNormal.i %include TruncatedNormalFactory.i %include Uniform.i %include UniformFactory.i %include UserDefined.i %include UserDefinedFactory.i %include VonMises.i %include Weibull.i %include WeibullFactory.i %include WeibullMuSigma.i %include Wishart.i %include ZipfMandelbrot.i /* At last we include template definitions */ %include UncertaintyDistTemplateDefs.i openturns-1.9/python/src/experiment_module.i000066400000000000000000000014271307543307100214360ustar00rootroot00000000000000// SWIG file experiment_module.i %module(package="openturns", docstring="Designs of experiments.") experiment #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTExperiments.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import common_module.i %import typ_module.i %import statistics_module.i /* Uncertainty/Algorithm/Experiment */ %include ExperimentImplementation.i %include StratifiedExperiment.i %include Experiment.i %include Axial.i %include Composite.i %include Factorial.i %include Box.i %include CombinatorialGeneratorImplementation.i %include CombinatorialGenerator.i %include Combinations.i %include KPermutations.i %include Tuples.i openturns-1.9/python/src/func_module.i000066400000000000000000000072321307543307100202110ustar00rootroot00000000000000// SWIG file func_module.i %module(package="openturns", docstring="Function primitives.") func #pragma SWIG nowarn=302,314,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTFunc.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTAlgo.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i %import BaseCommonTemplateDefs.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Geom */ %import geom_module.i %import BaseGeomTemplateDefs.i /* Base/Func */ %include EnumerateFunctionImplementation.i %include EnumerateFunction.i %include LinearEnumerateFunction.i %include HyperbolicAnisotropicEnumerateFunction.i %include FieldImplementation.i %include Field.i %include TimeSeries.i %include ProcessSample.i %include SpecFunc.i %include EvaluationImplementation.i %include GradientImplementation.i %include HessianImplementation.i %include NoEvaluation.i %include NoGradient.i %include NoHessian.i %include LinearEvaluation.i %include LinearGradient.i %include QuadraticEvaluation.i %include ConstantGradient.i %include ConstantHessian.i %include ComposedEvaluation.i %include ComposedGradient.i %include ComposedHessian.i %include ProductEvaluation.i %include ProductGradient.i %include ProductHessian.i %include FunctionImplementation.i %include ProductFunction.i %include Function.i %include AggregatedFunction.i %include SymbolicFunction.i %include LinearCombinationFunction.i %include ComposedFunction.i %include ParametricFunction.i %include DualLinearCombinationFunction.i %include FieldFunctionImplementation.i %include FieldFunction.i %include IndicatorFunction.i %include ValueFunction.i %include VertexValueFunction.i %include DualLinearCombinationEvaluation.i %include DualLinearCombinationGradient.i %include DualLinearCombinationHessian.i %include LinearCombinationEvaluation.i %include LinearCombinationGradient.i %include LinearCombinationHessian.i %include LinearFunction.i %include QuadraticFunction.i %include UniVariateFunctionImplementation.i %include UniVariateFunction.i %include MonomialFunction.i %include UniVariatePolynomialImplementation.i %include UniVariatePolynomial.i %include AggregatedEvaluation.i %include PiecewiseLinearEvaluation.i %include PiecewiseHermiteEvaluation.i #ifdef OPENTURNS_HAVE_MUPARSER %include SymbolicEvaluation.i %include SymbolicGradient.i %include SymbolicHessian.i #endif %include DatabaseFunction.i %include DatabaseEvaluation.i %include IndicatorEvaluation.i %include ProductPolynomialEvaluation.i %include ParametricEvaluation.i %include ParametricGradient.i %include ParametricHessian.i %include P1LagrangeEvaluation.i %include BasisImplementation.i %include Basis.i %include BasisSequenceImplementation.i %include BasisSequence.i %include FunctionalBasisImplementation.i %include FunctionalBasis.i %include BasisSequenceFactoryImplementation.i %include BasisSequenceFactory.i %include UniVariateFunctionFactory.i %include MonomialFunctionFactory.i %include UniVariateFunctionFamily.i %include TensorizedUniVariateFunctionFactory.i %include LARS.i %include BoxCoxEvaluation.i %include BoxCoxTransform.i %include InverseBoxCoxEvaluation.i %include InverseBoxCoxTransform.i %include TrendEvaluation.i %include TrendTransform.i %include InverseTrendEvaluation.i %include InverseTrendTransform.i %include BasisFactory.i %include ConstantBasisFactory.i %include LinearBasisFactory.i %include QuadraticBasisFactory.i /* At last we include template definitions */ %include BaseFuncTemplateDefs.i openturns-1.9/python/src/geom_module.i000066400000000000000000000012621307543307100202020ustar00rootroot00000000000000// SWIG file geom_module.i %module(package="openturns", docstring="Geometrical classes.") geom //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTType.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Graph */ %import graph_module.i %import BaseGraphTemplateDefs.i /* Base/Geom */ %include Domain.i %include BipartiteGraph.i %include Mesh.i %include RegularGrid.i %include IntervalMesher.i openturns-1.9/python/src/graph_module.i000066400000000000000000000016131307543307100203540ustar00rootroot00000000000000// SWIG file graph_module.i %module(package="openturns", docstring="Graphical output.") graph //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTGeom.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Graph */ %include DrawableImplementation.i %include Drawable.i %include GraphImplementation.i %include Graph.i %include BarPlot.i %include Cloud.i %include Contour.i %include Curve.i %include Pairs.i %include Pie.i %include Polygon.i %include PolygonArray.i %include Staircase.i %include Text.i /* At last we include template definitions */ %include BaseGraphTemplateDefs.i openturns-1.9/python/src/metamodel_module.i000066400000000000000000000043321307543307100212230ustar00rootroot00000000000000// SWIG file metamodel_module.i %module(package="openturns", docstring="Meta-modelling.") metamodel #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTWeightedExperiments.hxx" #include "openturns/OTOrthogonalBasis.hxx" #include "openturns/OTMetaModel.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %include BaseFuncCollection.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i // KrigingResult::operator() returns Normal %import Normal.i /* Uncertainty/Algorithm/WeightedExperiment */ %import weightedexperiment_module.i /* Uncertainty/Algorithm/OrthogonalBasis */ %import orthogonalbasis_module.i %import UncertaintyOrthogonalBasisTemplateDefs.i /* Uncertainty/Model */ %import randomvector_module.i /* Uncertainty/Algorithm/Metamodel */ %include MetaModelResult.i %include KrigingResult.i %include MetaModelAlgorithm.i %include LinearTaylor.i %include QuadraticTaylor.i %include LinearLeastSquares.i %include QuadraticLeastSquares.i %include AdaptiveStrategyImplementation.i %include FixedStrategy.i %include SequentialStrategy.i %include CleaningStrategy.i %include AdaptiveStrategy.i %include ProjectionStrategyImplementation.i %include LeastSquaresStrategy.i %include IntegrationStrategy.i %include ProjectionStrategy.i %include FunctionalChaosResult.i %include FunctionalChaosAlgorithm.i %include KrigingAlgorithm.i %include MetaModelValidation.i %include GeneralLinearModelResult.i %include GeneralLinearModelAlgorithm.i /* Uncertainty/Model */ %include RandomVector.i %include CompositeRandomVector.i %include EventRandomVector.i %include EventDomain.i %include EventProcess.i %include ConditionalRandomVector.i %include Event.i %include StandardEvent.i /* Uncertainty/Algorithm/Metamodel */ %include FunctionalChaosRandomVector.i %include KrigingRandomVector.i %include TensorApproximationResult.i %include TensorApproximationAlgorithm.i /* At last we include template definitions */ %include UncertaintyMetaModelTemplateDefs.i openturns-1.9/python/src/model_copula_module.i000066400000000000000000000030601307543307100217140ustar00rootroot00000000000000// SWIG file model_copula_module.i %module(package="openturns", docstring="Copulas.") model_copula #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ %include DistributionImplementation.i %include Distribution.i %include DistributionFactoryResult.i %include DistributionParametersImplementation.i %include DistributionParameters.i %include DistributionFactoryImplementation.i %include DistributionFactory.i %include ContinuousDistribution.i %include EllipticalDistribution.i %include DiscreteDistribution.i %include CopulaImplementation.i %include Copula.i %include ArchimedeanCopula.i %include SklarCopula.i /* Uncertainty/Distribution (copulas) */ %include AliMikhailHaqCopula.i %include AliMikhailHaqCopulaFactory.i %include IndependentCopula.i %include MinCopula.i %include NormalCopula.i %include NormalCopulaFactory.i %include FarlieGumbelMorgensternCopula.i %include FarlieGumbelMorgensternCopulaFactory.i %include FrankCopula.i %include FrankCopulaFactory.i %include ClaytonCopula.i %include ClaytonCopulaFactory.i %include GumbelCopula.i %include GumbelCopulaFactory.i %include ComposedDistribution.i %include CumulativeDistributionNetwork.i %include ComposedCopula.i %include OrdinalSumCopula.i /* At last we include template definitions */ %include UncertaintyModelCopulaTemplateDefs.i openturns-1.9/python/src/model_process_module.i000066400000000000000000000025151307543307100221130ustar00rootroot00000000000000// SWIG file model_process_module.i %module(package="openturns", docstring="Stochastic process.") model_process #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTProcess.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i %import dist_bundle1_module.i %import dist_bundle2_module.i %import model_copula_module.i %import randomvector_module.i %import weightedexperiment_module.i /* imports for ConditionedNormalProcess */ %import MetaModelResult.i %import KrigingResult.i /* Uncertainty/Process */ %include WhiteNoise.i %include RandomWalk.i %include ARMACoefficients.i %include ARMAState.i %include ARMA.i %include SpectralGaussianProcess.i %include GaussianProcess.i %include AggregatedProcess.i %include CompositeProcess.i %include FunctionalBasisProcess.i %include ARMAFactoryImplementation.i %include WhittleFactoryState.i %include WhittleFactory.i %include ARMALikelihoodFactory.i %include ARMAFactory.i %include ConditionedNormalProcess.i %include KarhunenLoeveQuadratureFactory.i %include KarhunenLoeveQuadratureAlgorithm.i /* At last we include template definitions */ %include UncertaintyProcessTemplateDefs.i openturns-1.9/python/src/openturns/000077500000000000000000000000001307543307100175705ustar00rootroot00000000000000openturns-1.9/python/src/openturns/PythonDistribution.hxx000066400000000000000000000124641307543307100242110ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' Distribution * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONDISTRIBUTION_HXX #define OPENTURNS_PYTHONDISTRIBUTION_HXX #include #include "openturns/DistributionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonDistribution * * This class binds a Python object to an OpenTURNS' RandomVector */ class PythonDistribution : public DistributionImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonDistribution(PyObject * pyObject); /** Copy constructor */ PythonDistribution(const PythonDistribution & other); /** Virtual constructor */ virtual PythonDistribution * clone() const; /** Destructor */ virtual ~PythonDistribution(); /** Comparison operator */ Bool operator ==(const PythonDistribution & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /* Here is the interface that all derived class must implement */ /** Get one realization of the distribution */ Point getRealization() const; /** Get a numerical sample whose elements follow the distributionImplementation */ Sample getSample(const UnsignedInteger size) const; /** Get the DDF of the distribution */ Point computeDDF(const Point & point) const; /** Get the PDF of the distribution */ Scalar computePDF(const Point & point) const; Scalar computeLogPDF(const Point & point) const; /** Get the CDF of the distribution */ Scalar computeCDF(const Point & point) const; /** Get the complementary CDF of the distribution */ Scalar computeComplementaryCDF(const Point & point) const; /** Get the quantile of the distributionImplementation */ virtual Point computeQuantile(const Scalar prob, const Bool tail = false) const; /** Get the characteristic function of the distribution, i.e. phi(u) = E(exp(I*u*X)) */ Complex computeCharacteristicFunction(const Scalar x) const; /** Get the PDFGradient of the distribution */ Point computePDFGradient(const Point & point) const; /** Get the CDFGradient of the distribution */ Point computeCDFGradient(const Point & point) const; /** Get the quantile of the distribution */ Scalar computeScalarQuantile(const Scalar prob, const Bool tail = false) const; /** Get the roughness, i.e. the L2-norm of the PDF */ Scalar getRoughness() const; /** Get the mean of the distribution */ Point getMean() const; /** Get the standard deviation of the distribution */ Point getStandardDeviation() const; /** Get the skewness of the distribution */ Point getSkewness() const; /** Get the kurtosis of the distribution */ Point getKurtosis() const; /** Get the raw moments of the standardized distribution */ Point getStandardMoment(const UnsignedInteger n) const; /** Get the raw moments of the distribution */ Point getMoment(const UnsignedInteger n) const; /** Get the centered moments of the distribution */ Point getCenteredMoment(const UnsignedInteger n) const; /** Parameters value and description accessor */ // PointWithDescriptionCollection getParametersCollection() const; // void setParametersCollection(const PointCollection & parametersCollection); // /** Check if the distribution is a copula */ Bool isCopula() const; /** Check if the distribution is elliptical */ Bool isElliptical() const; /** Check if the distribution is continuous */ Bool isContinuous() const; /** Check if the distribution is integral */ Bool isIntegral() const; /** Tell if the distribution has elliptical copula */ Bool hasEllipticalCopula() const; /** Tell if the distribution has independent copula */ Bool hasIndependentCopula() const; /** Get the distribution of the marginal distribution corresponding to indices dimensions */ virtual Implementation getMarginal(const Indices & indices) const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); /** Compute the numerical range of the distribution given the parameters values */ virtual void computeRange(); protected: private: friend class Factory; /** Default constructor */ PythonDistribution(); /** The underlying Python object */ PyObject * pyObj_; }; /* class PythonDistribution */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONDISTRIBUTION_HXX */ openturns-1.9/python/src/openturns/PythonEvaluation.hxx000066400000000000000000000052011307543307100236300ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonEvaluation declaration * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONEVALUATION_HXX #define OPENTURNS_PYTHONEVALUATION_HXX #include #include "openturns/EvaluationImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonEvaluation * * This class binds a Python function to an OpenTURNS' Function */ class PythonEvaluation : public EvaluationImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonEvaluation(PyObject * pyCallable); /** Copy constructor */ PythonEvaluation(const PythonEvaluation & other); /** Virtual constructor */ virtual PythonEvaluation * clone() const; /** Destructor */ virtual ~PythonEvaluation(); /** Comparison operator */ Bool operator ==(const PythonEvaluation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Point operator() (const Point & inP) const; virtual Sample operator() (const Sample & inS) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonEvaluation(); /** The underlying Python callable object */ PyObject * pyObj_; }; /* class PythonEvaluation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONEVALUATION_HXX */ openturns-1.9/python/src/openturns/PythonExperiment.hxx000066400000000000000000000044711307543307100236510ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' Experiment * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONEXPERIMENT_HXX #define OPENTURNS_PYTHONEXPERIMENT_HXX #include #include "openturns/ExperimentImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonExperiment * * This class binds a Python object to an OpenTURNS' Experiment */ class PythonExperiment : public ExperimentImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonExperiment(PyObject * pyObject); /** Copy constructor */ PythonExperiment(const PythonExperiment & other); /** Virtual constructor */ virtual PythonExperiment * clone() const; /** Destructor */ virtual ~PythonExperiment(); /** Comparison operator */ Bool operator ==(const PythonExperiment & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /* Here is the interface that all derived class must implement */ /** Numerical sample accessor */ virtual Sample generate() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonExperiment(); /** The underlying Python object */ PyObject * pyObj_; }; /* class PythonExperiment */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONEXPERIMENT_HXX */ openturns-1.9/python/src/openturns/PythonFieldFunction.hxx000066400000000000000000000052031307543307100242540ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonFieldFunction declaration * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONFIELDFUNCTION_HXX #define OPENTURNS_PYTHONFIELDFUNCTION_HXX #include #include "openturns/FieldFunctionImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonFieldFunction * * This class binds a Python function to an OpenTURNS' FieldFunction */ class PythonFieldFunction : public FieldFunctionImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonFieldFunction(PyObject * pyCallable); /** Copy constructor */ PythonFieldFunction(const PythonFieldFunction & other); /** Virtual constructor */ virtual PythonFieldFunction * clone() const; /** Destructor */ virtual ~PythonFieldFunction(); /** Comparison operator */ Bool operator ==(const PythonFieldFunction & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /* Here is the interface that all derived class must implement */ /** Operator () */ virtual Field operator() (const Field & inF) const; /** Accessor for mesh dimension */ virtual UnsignedInteger getSpatialDimension() const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonFieldFunction(); /** The underlying Python callable object */ PyObject * pyObj_; }; /* class PythonFieldFunction */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONFIELDFUNCTION_HXX */ openturns-1.9/python/src/openturns/PythonGradient.hxx000066400000000000000000000050521307543307100232620ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonGradient declaration * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONGRADIENT_HXX #define OPENTURNS_PYTHONGRADIENT_HXX #include #include "openturns/GradientImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonGradient * * This class binds a Python function to a GradientImplementation */ class PythonGradient : public GradientImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonGradient(PyObject * pyCallable); /** Copy constructor */ PythonGradient(const PythonGradient & other); /** Virtual constructor */ virtual PythonGradient * clone() const; /** Destructor */ virtual ~PythonGradient(); /** Comparison operator */ Bool operator ==(const PythonGradient & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual Matrix gradient(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonGradient(); /** The underlying Python callable object */ PyObject * pyObj_; }; /* class PythonGradient */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONGRADIENT_HXX */ openturns-1.9/python/src/openturns/PythonHessian.hxx000066400000000000000000000050401307543307100231140ustar00rootroot00000000000000// -*- C++ -*- /** * @brief PythonHessian declaration * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONHESSIAN_HXX #define OPENTURNS_PYTHONHESSIAN_HXX #include #include "openturns/HessianImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonHessian * * This class binds a Python function to a HessianImplementation */ class PythonHessian : public HessianImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonHessian(PyObject * pyCallable); /** Copy constructor */ PythonHessian(const PythonHessian & other); /** Virtual constructor */ virtual PythonHessian * clone() const; /** Destructor */ virtual ~PythonHessian(); /** Comparison operator */ Bool operator ==(const PythonHessian & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /** Test for actual implementation */ virtual Bool isActualImplementation() const; /* Here is the interface that all derived class must implement */ /** Gradient method */ virtual SymmetricTensor hessian(const Point & inP) const; /** Accessor for input point dimension */ virtual UnsignedInteger getInputDimension() const; /** Accessor for output point dimension */ virtual UnsignedInteger getOutputDimension() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonHessian(); /** The underlying Python callable object */ PyObject * pyObj_; }; /* class PythonHessian */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONHESSIAN_HXX */ openturns-1.9/python/src/openturns/PythonRandomVectorImplementation.hxx000066400000000000000000000055311307543307100270400ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This class binds a Python object to an OpenTURNS' RandomVector * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONRANDOMVECTORIMPLEMENTATION_HXX #define OPENTURNS_PYTHONRANDOMVECTORIMPLEMENTATION_HXX #include #include "openturns/RandomVectorImplementation.hxx" BEGIN_NAMESPACE_OPENTURNS /** * @class PythonRandomVectorImplementation * * This class binds a Python object to an OpenTURNS' RandomVector */ class PythonRandomVectorImplementation : public RandomVectorImplementation { CLASSNAME; public: /** Constructor from Python object*/ PythonRandomVectorImplementation(PyObject * pyObject); /** Copy constructor */ PythonRandomVectorImplementation(const PythonRandomVectorImplementation & other); /** Virtual constructor */ virtual PythonRandomVectorImplementation * clone() const; /** Destructor */ virtual ~PythonRandomVectorImplementation(); /** Comparison operator */ Bool operator ==(const PythonRandomVectorImplementation & other) const; /** String converter */ virtual String __repr__() const; virtual String __str__(const String & offset) const; /* Here is the interface that all derived class must implement */ /** Dimension accessor */ virtual UnsignedInteger getDimension() const; /** Realization accessor */ virtual Point getRealization() const; /** Numerical sample accessor */ virtual Sample getSample(const UnsignedInteger size) const; /** Mean accessor */ virtual Point getMean() const; /** Covariance accessor */ virtual CovarianceMatrix getCovariance() const; /** Method save() stores the object through the StorageManager */ virtual void save(Advocate & adv) const; /** Method save() reloads the object from the StorageManager */ virtual void load(Advocate & adv); protected: private: friend class Factory; /** Default constructor */ PythonRandomVectorImplementation(); /** The underlying Python object */ PyObject * pyObj_; }; /* class PythonRandomVectorImplementation */ END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONRANDOMVECTORIMPLEMENTATION_HXX */ openturns-1.9/python/src/openturns/PythonWrappingFunctions.hxx000066400000000000000000001036071307543307100252120ustar00rootroot00000000000000// -*- C++ -*- /** * @brief This file provides functions to ease Python wrapping * * Copyright 2005-2017 Airbus-EDF-IMACS-Phimeca * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * along with this library. If not, see . * */ #ifndef OPENTURNS_PYTHONWRAPPINGFUNCTIONS_HXX #define OPENTURNS_PYTHONWRAPPINGFUNCTIONS_HXX #include #include "openturns/OT.hxx" BEGIN_NAMESPACE_OPENTURNS /** Scoped PyObject pointer: automatically triggers garbage collection */ class ScopedPyObjectPointer { public: explicit ScopedPyObjectPointer( PyObject * pyObj = 0 ) : pyObj_(pyObj) { } ~ScopedPyObjectPointer() { Py_XDECREF( pyObj_ ); } ScopedPyObjectPointer & operator=(PyObject * pyObj) { Py_XDECREF( pyObj_ ); pyObj_ = pyObj; return *this; } PyObject & operator*() const { return *pyObj_; } PyObject * get() const { return pyObj_; } bool isNull() { return !pyObj_; } private: PyObject* pyObj_; }; /** These templates are just declared, not defined. Only specializations are. */ template struct traitsPythonType; template static inline int isAPython(PyObject * pyObj); template static inline const char * namePython(); template static inline CPP_Type convert(PyObject * pyObj); template static inline PyObject * convert(CPP_Type); template static inline bool canConvert(PyObject * pyObj); template static inline void check(PyObject * pyObj); template static inline CPP_Type checkAndConvert(PyObject * pyObj); template static inline T * buildObjectFromPySequence(PyObject * pyObj); /** Specializations */ /* PyObject */ struct _PyObject_ {}; template <> inline int isAPython<_PyObject_>(PyObject * pyObj) { return 1; } template <> inline const char * namePython<_PyObject_>() { return "object"; } /* PyBool */ struct _PyBool_ {}; template <> inline int isAPython<_PyBool_>(PyObject * pyObj) { return PyBool_Check(pyObj); } template <> inline const char * namePython<_PyBool_>() { return "bool"; } template <> struct traitsPythonType { typedef _PyBool_ Type; }; template <> inline Bool convert< _PyBool_, Bool >(PyObject * pyObj) { return pyObj == Py_True; } template <> inline PyObject * convert< Bool, _PyBool_ >(Bool inB) { return PyBool_FromLong(inB ? 1 : 0); } /* PyInt */ struct _PyInt_ {}; template <> inline int isAPython< _PyInt_ >(PyObject * pyObj) { // PyInt type is deprecated #if PY_MAJOR_VERSION >= 3 return PyLong_Check(pyObj); #else return PyInt_Check(pyObj) || PyLong_Check(pyObj); #endif } template <> inline const char * namePython< _PyInt_ >() { return "integer"; } template <> struct traitsPythonType< UnsignedInteger > { typedef _PyInt_ Type; }; template <> inline bool canConvert< _PyInt_, UnsignedInteger >(PyObject * pyObj) { return true; } template <> inline UnsignedInteger convert< _PyInt_, UnsignedInteger >(PyObject * pyObj) { return PyLong_AsUnsignedLong(pyObj); } template <> inline PyObject * convert< UnsignedInteger, _PyInt_ >(UnsignedInteger n) { return PyLong_FromUnsignedLong(n); } /* PyFloat */ struct _PyFloat_ {}; template <> inline int isAPython< _PyFloat_ >(PyObject * pyObj) { // check also against sequence protocol as numpy array complies to several protocols return PyNumber_Check(pyObj) && !PyComplex_Check(pyObj) && !PySequence_Check(pyObj); } template <> inline const char * namePython<_PyFloat_>() { return "double"; } template <> struct traitsPythonType< Scalar > { typedef _PyFloat_ Type; }; template <> inline Scalar convert< _PyFloat_, Scalar >(PyObject * pyObj) { return PyFloat_AsDouble(pyObj); } template <> inline PyObject * convert< Scalar, _PyFloat_ >(Scalar x) { return PyFloat_FromDouble(x); } /* PyComplex */ struct _PyComplex_ {}; template <> inline int isAPython<_PyComplex_>(PyObject * pyObj) { return PyNumber_Check(pyObj); } template <> inline const char * namePython<_PyComplex_>() { return "complex"; } template <> struct traitsPythonType< Complex > { typedef _PyComplex_ Type; }; template <> inline Complex convert< _PyComplex_, Complex >(PyObject * pyObj) { return Complex(PyComplex_RealAsDouble(pyObj), PyComplex_ImagAsDouble(pyObj)); } template <> inline PyObject * convert< Complex, _PyComplex_ >(Complex x) { return PyComplex_FromDoubles(x.real(), x.imag()); } /* PyBytes */ struct _PyBytes_ {}; template <> inline int isAPython< _PyBytes_ >(PyObject * pyObj) { #if PY_MAJOR_VERSION >= 3 return PyBytes_Check(pyObj); #else return PyString_Check(pyObj); #endif } template <> inline const char * namePython< _PyBytes_ >() { return "bytes"; } template <> inline String convert< _PyBytes_, String >(PyObject * pyObj) { #if PY_MAJOR_VERSION >= 3 return PyBytes_AsString(pyObj); #else return PyString_AsString(pyObj); #endif } template <> inline PyObject * convert< String, _PyBytes_ >( String s ) { #if PY_MAJOR_VERSION >= 3 return PyBytes_FromString(s.data()); #else return PyString_FromString(s.data()); #endif } /* PyUnicode */ struct _PyUnicode_ {}; template <> inline int isAPython< _PyUnicode_ >(PyObject * pyObj) { return PyUnicode_Check(pyObj); } template <> inline const char * namePython< _PyUnicode_ >() { return "unicode"; } template <> inline String convert< _PyUnicode_, String >(PyObject * pyObj) { ScopedPyObjectPointer encodedBytes(PyUnicode_AsUTF8String(pyObj)); assert(encodedBytes.get()); return convert<_PyBytes_, String>(encodedBytes.get()); } template <> inline PyObject * convert< String, _PyUnicode_ >(String s) { return PyUnicode_FromString(s.data()); } /* PyString */ struct _PyString_ {}; template <> inline int isAPython< _PyString_ >(PyObject * pyObj) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_Check(pyObj); #else return PyString_Check(pyObj) || PyUnicode_Check(pyObj); #endif } template <> inline const char * namePython<_PyString_>() { return "string"; } template <> struct traitsPythonType< String > { typedef _PyString_ Type; }; template <> inline String convert< _PyString_, String >(PyObject * pyObj) { String result; #if PY_MAJOR_VERSION >= 3 result = convert< _PyUnicode_, String >(pyObj); #else if(isAPython<_PyBytes_>(pyObj)) { result = convert<_PyBytes_, String>(pyObj); } else if (isAPython<_PyUnicode_>(pyObj)) { result = convert<_PyUnicode_, String>(pyObj); } #endif return result; } template <> inline PyObject * convert< String, _PyString_ >( String s ) { #if PY_MAJOR_VERSION >= 3 return convert(s); #else return convert(s); #endif } /* PySequence */ struct _PySequence_ {}; template <> inline int isAPython< _PySequence_ >(PyObject * pyObj) { return PySequence_Check(pyObj); } template <> inline const char * namePython<_PySequence_>() { return "sequence object"; } template static inline int isAPythonSequenceOf(PyObject * pyObj) { int ok = isAPython<_PySequence_>(pyObj) && (! isAPython< _PyString_ >(pyObj)); if ( ok ) { const UnsignedInteger size = PySequence_Size(pyObj); for( UnsignedInteger i = 0; ok && (i < size); ++i ) { ScopedPyObjectPointer elt(PySequence_ITEM( pyObj, i )); int elt_ok = isAPython(elt.get()); ok *= elt_ok; } } return ok; } template static inline void check(PyObject * pyObj) { if (! isAPython(pyObj)) { throw InvalidArgumentException(HERE) << "Object passed as argument is not a " << namePython(); } } template static inline CPP_Type checkAndConvert(PyObject * pyObj) { check(pyObj); return convert< PYTHON_Type, CPP_Type >(pyObj); } template static inline bool canConvertCollectionObjectFromPySequence(PyObject * pyObj) { try { check<_PySequence_>(pyObj); } catch (InvalidArgumentException &) { return false; } ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); const UnsignedInteger size = PySequence_Fast_GET_SIZE( newPyObj.get() ); for(UnsignedInteger i = 0; i < size; ++i) { PyObject * elt = PySequence_Fast_GET_ITEM( newPyObj.get(), i ); if (!canConvert< typename traitsPythonType< T >::Type, T >( elt )) { return false; } } return true; } template static inline Collection * buildCollectionFromPySequence(PyObject * pyObj, int sz = 0) { check<_PySequence_>(pyObj); ScopedPyObjectPointer newPyObj(PySequence_Fast( pyObj, "" )); if (!newPyObj.get()) throw InvalidArgumentException(HERE) << "Not a sequence object"; const UnsignedInteger size = PySequence_Fast_GET_SIZE( newPyObj.get() ); if ((sz != 0) && (sz != (int)size)) { throw InvalidArgumentException(HERE) << "Sequence object has incorrect size " << size << ". Must be " << sz << "."; } Collection * p_coll = new Collection< T >( size ); for(UnsignedInteger i = 0; i < size; ++i) { PyObject * elt = PySequence_Fast_GET_ITEM( newPyObj.get(), i ); try { check::Type>( elt ); } catch (InvalidArgumentException &) { delete p_coll; throw; } (*p_coll)[i] = convert< typename traitsPythonType< T >::Type, T >( elt ); } return p_coll; } template <> struct traitsPythonType< Point > { typedef _PySequence_ Type; }; template <> inline Point convert< _PySequence_, Point >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Point( *ptr ); } template <> inline PyObject * convert< Point, _PySequence_ >(Point inP) { UnsignedInteger dimension = inP.getDimension(); PyObject * point = PyTuple_New( dimension ); for ( UnsignedInteger i = 0; i < dimension; ++ i ) { PyTuple_SetItem( point, i, convert< Scalar, _PyFloat_ >( inP[i] ) ); } return point; } template <> inline PyObject * convert< Description, _PySequence_ >(Description inP) { UnsignedInteger dimension = inP.getSize(); PyObject * point = PyTuple_New(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { PyTuple_SetItem(point, i, convert< String, _PyString_ >(inP[i])); } return point; } template <> struct traitsPythonType< Collection < Complex> > { typedef _PySequence_ Type; }; template <> inline Collection convert<_PySequence_, Collection >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Collection( *ptr ); } template <> struct traitsPythonType< Sample > { typedef _PySequence_ Type; }; template <> inline Sample convert< _PySequence_, Sample >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Sample( *ptr ); } template <> struct traitsPythonType< Collection< UnsignedInteger > > { typedef _PySequence_ Type; }; template <> inline Collection< UnsignedInteger > convert< _PySequence_, Collection >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Collection( ptr->begin(), ptr->end() ); } template <> struct traitsPythonType< Indices > { typedef _PySequence_ Type; }; template <> inline Indices convert< _PySequence_, Indices >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Indices( ptr->begin(), ptr->end() ); } template <> inline PyObject * convert< Indices, _PySequence_ >(Indices inP) { UnsignedInteger dimension = inP.getSize(); PyObject * point = PyTuple_New(dimension); for (UnsignedInteger i = 0; i < dimension; ++ i) { PyTuple_SetItem( point, i, convert< UnsignedInteger, _PyInt_ >(inP[i])); } return point; } template <> struct traitsPythonType< Description > { typedef _PySequence_ Type; }; template <> inline Description convert<_PySequence_, Description>(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Description( *ptr ); } template <> struct traitsPythonType< Collection< Scalar > > { typedef _PySequence_ Type; }; template <> inline Collection convert< _PySequence_, Collection >(PyObject * pyObj) { Pointer > ptr = buildCollectionFromPySequence(pyObj); return Collection( *ptr ); } template <> struct traitsPythonType< MatrixImplementation > { typedef _PySequence_ Type; }; template <> inline MatrixImplementation* convert< _PySequence_, MatrixImplementation* >(PyObject * pyObj) { MatrixImplementation *p_implementation = 0; // use the same conversion function for numpy array/matrix, knowing numpy matrix is not a sequence if ( PyObject_HasAttrString(pyObj, const_cast("shape")) ) { ScopedPyObjectPointer shapeObj(PyObject_GetAttrString( pyObj, "shape" )); if ( shapeObj.get() ) { Indices shape( checkAndConvert< _PySequence_, Indices >( shapeObj.get() ) ); if ( shape.getSize() == 2 ) { UnsignedInteger nbRows = shape[0]; UnsignedInteger nbColumns = shape[1]; ScopedPyObjectPointer askObj(PyTuple_New(2)); ScopedPyObjectPointer methodObj(convert< String, _PyString_ >("__getitem__")); p_implementation = new MatrixImplementation( nbRows, nbColumns ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) { PyTuple_SetItem( askObj.get(), 0, convert< UnsignedInteger, _PyInt_ >(i) ); for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) { PyTuple_SetItem( askObj.get(), 1, convert< UnsignedInteger, _PyInt_ >(j) ); ScopedPyObjectPointer elt(PyObject_CallMethodObjArgs( pyObj, methodObj.get(), askObj.get(), NULL)); if (elt.get()) { try { p_implementation->operator()( i, j ) = checkAndConvert<_PyFloat_, Scalar>(elt.get()); } catch (InvalidArgumentException &) { delete p_implementation; throw; } } } } } else throw InvalidArgumentException(HERE) << "Invalid array dimension: " << shape.getSize(); } } else if ( PyObject_HasAttrString(pyObj, const_cast("getNbColumns")) ) { // case of conversion from XMatrix to YMatrix // X could be Square,Triangular,Identity... // YMatrix might be Matrix of one of its inheritance types ScopedPyObjectPointer colunmsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbColumns" ), const_cast( "()" ) )); ScopedPyObjectPointer rowsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbRows" ), const_cast( "()" ) )); ScopedPyObjectPointer implObj(PyObject_CallMethod ( pyObj, const_cast( "getImplementation" ), const_cast( "()" ) )); Pointer< Collection< Scalar > > ptr = buildCollectionFromPySequence< Scalar >( implObj.get() ); UnsignedInteger nbColumns = checkAndConvert< _PyInt_, UnsignedInteger >( colunmsObj.get() ); UnsignedInteger nbRows = checkAndConvert< _PyInt_, UnsignedInteger >( rowsObj.get() ); p_implementation = new MatrixImplementation( nbRows, nbColumns, *ptr ); } else { // try to convert from a sequence of sequences Pointer< Collection< Point > > ptr = buildCollectionFromPySequence< Point >(pyObj); Sample sample( *ptr ); UnsignedInteger nbRows = sample.getSize(); UnsignedInteger nbColumns = sample.getDimension(); p_implementation = new MatrixImplementation( nbRows, nbColumns ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) p_implementation->operator()( i, j ) = sample[i][j]; } return p_implementation; } template <> inline Matrix convert< _PySequence_, Matrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); return Matrix( p_implementation ); } template <> inline SquareMatrix convert< _PySequence_, SquareMatrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); if ( p_implementation->getNbRows() != p_implementation->getNbColumns() ) throw InvalidArgumentException(HERE) << "The matrix is not square"; return SquareMatrix( p_implementation ); } template <> inline TriangularMatrix convert< _PySequence_, TriangularMatrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); if (!(p_implementation->isTriangular(true) || p_implementation->isTriangular(false))) throw InvalidArgumentException(HERE) << "The matrix is not triangular"; return TriangularMatrix( p_implementation, p_implementation->isTriangular(true) ); } template <> inline SymmetricMatrix convert< _PySequence_, SymmetricMatrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); if (!p_implementation->isSymmetric()) throw InvalidArgumentException(HERE) << "The matrix is not symmetric"; return SymmetricMatrix( p_implementation ); } template <> inline CovarianceMatrix convert< _PySequence_, CovarianceMatrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); if (!p_implementation->isSymmetric()) throw InvalidArgumentException(HERE) << "The matrix is not symmetric"; // SPD check is too expensive return CovarianceMatrix( p_implementation ); } template <> inline CorrelationMatrix convert< _PySequence_, CorrelationMatrix >(PyObject * pyObj) { MatrixImplementation *p_implementation = convert< _PySequence_, MatrixImplementation* >(pyObj); if (!p_implementation->isSymmetric()) throw InvalidArgumentException(HERE) << "The matrix is not symmetric"; // SPD check is too expensive if (!p_implementation->hasUnitRange()) throw InvalidArgumentException(HERE) << "The matrix range is not (-1;1)"; return CorrelationMatrix( p_implementation ); } template <> struct traitsPythonType< TensorImplementation > { typedef _PySequence_ Type; }; template <> inline TensorImplementation* convert< _PySequence_, TensorImplementation* >(PyObject * pyObj) { Pointer< Collection< Sample > > ptr = buildCollectionFromPySequence< Sample >(pyObj); UnsignedInteger nbRows = ptr->getSize(); UnsignedInteger nbColumns = ptr->getSize() > 0 ? (*ptr)[0].getSize() : 0; UnsignedInteger nbSheets = ptr->getSize() > 0 ? (*ptr)[0].getDimension() : 0; TensorImplementation *p_implementation = new TensorImplementation( nbRows, nbColumns, nbSheets ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) for ( UnsignedInteger k = 0; k < nbSheets; ++ k ) p_implementation->operator()( i, j, k ) = (*ptr)[i][j][k]; return p_implementation; } template <> inline Tensor convert< _PySequence_, Tensor >(PyObject * pyObj) { TensorImplementation *p_implementation = convert<_PySequence_, TensorImplementation*>(pyObj); return Tensor( p_implementation ); } template <> inline SymmetricTensor convert< _PySequence_, SymmetricTensor >(PyObject * pyObj) { TensorImplementation *p_implementation = convert< _PySequence_, TensorImplementation* >(pyObj); if (!p_implementation->isSymmetric()) throw InvalidArgumentException(HERE) << "The tensor is not symmetric"; return SymmetricTensor( p_implementation ); } template <> struct traitsPythonType< ComplexMatrixImplementation* > { typedef _PySequence_ Type; }; template <> inline ComplexMatrixImplementation* convert< _PySequence_, ComplexMatrixImplementation* >(PyObject * pyObj) { // use the same conversion function for numpy array/matrix, knowing numpy matrix is not a sequence if ( PyObject_HasAttrString(pyObj, const_cast("shape")) ) { ScopedPyObjectPointer shapeObj(PyObject_GetAttrString( pyObj, "shape" )); if (shapeObj.get()) { Indices shape( checkAndConvert< _PySequence_, Indices >( shapeObj.get() ) ); if ( shape.getSize() == 2 ) { UnsignedInteger nbRows = shape[0]; UnsignedInteger nbColumns = shape[1]; ScopedPyObjectPointer askObj(PyTuple_New(2)); ScopedPyObjectPointer methodObj(convert< String, _PyString_ >("__getitem__")); ComplexMatrixImplementation *p_implementation = new ComplexMatrixImplementation( nbRows, nbColumns ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) { PyTuple_SetItem( askObj.get(), 0, convert< UnsignedInteger, _PyInt_ >(i) ); for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) { PyTuple_SetItem( askObj.get(), 1, convert< UnsignedInteger, _PyInt_ >(j) ); ScopedPyObjectPointer elt(PyObject_CallMethodObjArgs( pyObj, methodObj.get(), askObj.get(), NULL)); if (elt.get()) { try { p_implementation->operator()( i, j ) = checkAndConvert<_PyComplex_, Complex>(elt.get()); } catch (InvalidArgumentException &) { delete p_implementation; throw; } } } } return p_implementation; } else throw InvalidArgumentException(HERE) << "Invalid array dimension: " << shape.getSize(); } } // case of conversion from XMatrix to YMatrix // X could be Square,Triangular,Identity... // YMatrix might be Matrix of one of its inheritance types if ( PyObject_HasAttrString(pyObj, const_cast("getNbColumns")) ) { ScopedPyObjectPointer colunmsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbColumns" ), const_cast( "()" ) )); ScopedPyObjectPointer rowsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbRows" ), const_cast( "()" ) )); ScopedPyObjectPointer implObj(PyObject_CallMethod ( pyObj, const_cast( "getImplementation" ), const_cast( "()" ) )); Pointer< Collection< Complex > > ptr = buildCollectionFromPySequence< Complex >( implObj.get() ); UnsignedInteger nbColumns = checkAndConvert< _PyInt_, UnsignedInteger >( colunmsObj.get() ); UnsignedInteger nbRows = checkAndConvert< _PyInt_, UnsignedInteger >( rowsObj.get() ); ComplexMatrixImplementation *p_implementation = new ComplexMatrixImplementation( nbRows, nbColumns, *ptr ); return p_implementation; } // else try to convert from a sequence of sequences Pointer< Collection< Collection< Complex > > > ptr = buildCollectionFromPySequence< Collection< Complex > >(pyObj); UnsignedInteger nbRows = ptr->getSize(); UnsignedInteger nbColumns = ptr->getSize() > 0 ? (*ptr)[0].getSize() : 0; ComplexMatrixImplementation *p_implementation = new ComplexMatrixImplementation( nbRows, nbColumns ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) p_implementation->operator()( i, j ) = (*ptr)[i][j]; return p_implementation; } template <> inline ComplexMatrix convert< _PySequence_, ComplexMatrix >(PyObject * pyObj) { ComplexMatrixImplementation *p_implementation = convert< _PySequence_, ComplexMatrixImplementation* >(pyObj); return ComplexMatrix( p_implementation ); } template <> inline SquareComplexMatrix convert< _PySequence_, SquareComplexMatrix >(PyObject * pyObj) { ComplexMatrixImplementation *p_implementation = convert< _PySequence_, ComplexMatrixImplementation* >(pyObj); if ( p_implementation->getNbRows() != p_implementation->getNbColumns() ) throw InvalidArgumentException(HERE) << "The matrix is not square"; return SquareComplexMatrix( p_implementation ); } template <> inline TriangularComplexMatrix convert< _PySequence_, TriangularComplexMatrix >(PyObject * pyObj) { ComplexMatrixImplementation *p_implementation = convert< _PySequence_, ComplexMatrixImplementation* >(pyObj); Bool lower = p_implementation->isTriangular(true); if ( !lower && !p_implementation->isTriangular(false) ) throw InvalidArgumentException(HERE) << "The matrix is not triangular"; return TriangularComplexMatrix( p_implementation, lower ); } template <> struct traitsPythonType< HermitianMatrix > { typedef _PySequence_ Type; }; template <> inline HermitianMatrix convert< _PySequence_, HermitianMatrix >(PyObject * pyObj) { ComplexMatrixImplementation *p_implementation = convert< _PySequence_, ComplexMatrixImplementation* >(pyObj); if ( !p_implementation->isHermitian() ) throw InvalidArgumentException(HERE) << "The matrix is not hermitian"; return HermitianMatrix( p_implementation ); } template <> struct traitsPythonType< ComplexTensorImplementation > { typedef _PySequence_ Type; }; template <> inline ComplexTensorImplementation* convert< _PySequence_, ComplexTensorImplementation* >(PyObject * pyObj) { ComplexTensorImplementation *p_implementation = 0; // use the same conversion function for numpy array/matrix, knowing numpy matrix is not a sequence if ( PyObject_HasAttrString(pyObj, const_cast("shape")) ) { ScopedPyObjectPointer shapeObj(PyObject_GetAttrString( pyObj, "shape" )); if (shapeObj.get()) { Indices shape( checkAndConvert< _PySequence_, Indices >( shapeObj.get() ) ); if ( shape.getSize() == 3 ) { UnsignedInteger nbRows = shape[0]; UnsignedInteger nbColumns = shape[1]; UnsignedInteger nbSheets = shape[2]; ScopedPyObjectPointer askObj(PyTuple_New(3)); ScopedPyObjectPointer methodObj(convert< String, _PyString_ >("__getitem__")); p_implementation = new ComplexTensorImplementation( nbRows, nbColumns, nbSheets ); for ( UnsignedInteger i = 0; i < nbRows; ++ i ) { PyTuple_SetItem( askObj.get(), 0, convert< UnsignedInteger, _PyInt_ >(i) ); for ( UnsignedInteger j = 0; j < nbColumns; ++ j ) { PyTuple_SetItem( askObj.get(), 1, convert< UnsignedInteger, _PyInt_ >(j) ); for ( UnsignedInteger k = 0; k < nbSheets; ++ k ) { PyTuple_SetItem( askObj.get(), 2, convert< UnsignedInteger, _PyInt_ >(k) ); ScopedPyObjectPointer elt(PyObject_CallMethodObjArgs( pyObj, methodObj.get(), askObj.get(), NULL)); if (elt.get()) { try { p_implementation->operator()( i, j, k ) = checkAndConvert<_PyComplex_, Complex>(elt.get()); } catch (InvalidArgumentException &) { delete p_implementation; throw; } } } } } } else throw InvalidArgumentException(HERE) << "Invalid array dimension: " << shape.getSize(); } } else if ( PyObject_HasAttrString(pyObj, const_cast("getNbSheets")) ) { // case of conversion from XTensor to YTensor ScopedPyObjectPointer colunmsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbColumns" ), const_cast( "()" ) )); ScopedPyObjectPointer rowsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbRows" ), const_cast( "()" ) )); ScopedPyObjectPointer sheetsObj(PyObject_CallMethod ( pyObj, const_cast( "getNbSheets" ), const_cast( "()" ) )); ScopedPyObjectPointer implObj(PyObject_CallMethod ( pyObj, const_cast( "getImplementation" ), const_cast( "()" ) )); Pointer< Collection< Complex > > ptr = buildCollectionFromPySequence< Complex >( implObj.get() ); UnsignedInteger nbColumns = checkAndConvert< _PyInt_, UnsignedInteger >( colunmsObj.get() ); UnsignedInteger nbRows = checkAndConvert< _PyInt_, UnsignedInteger >( rowsObj.get() ); UnsignedInteger nbSheets = checkAndConvert< _PyInt_, UnsignedInteger >( sheetsObj.get() ); p_implementation = new ComplexTensorImplementation( nbRows, nbColumns, nbSheets, *ptr ); } return p_implementation; } template <> inline ComplexTensor convert< _PySequence_, ComplexTensor >(PyObject * pyObj) { ComplexTensorImplementation *p_implementation = convert<_PySequence_, ComplexTensorImplementation*>(pyObj); return ComplexTensor( p_implementation ); } template <> struct traitsPythonType< WhittleFactoryState > { typedef _PySequence_ Type; }; template <> inline WhittleFactoryState convert< _PySequence_, WhittleFactoryState >(PyObject * pyObj) { return WhittleFactoryState(); } inline void handleException() { PyObject * exception = PyErr_Occurred(); if ( exception ) { PyObject *type = NULL, *value = NULL, *traceback = NULL; PyErr_Fetch( &type, &value, &traceback ); String exceptionMessage("Python exception"); // get the name of the exception if ( type ) { ScopedPyObjectPointer nameObj(PyObject_GetAttrString( type, "__name__" )); if ( nameObj.get() ) { String typeString = checkAndConvert< _PyString_, String >(nameObj.get()); exceptionMessage += ": " + typeString; } } // try to get error msg, value and traceback can be NULL if(value) { try { String valueString = checkAndConvert< _PyString_, String >(value); exceptionMessage += ": " + valueString; } catch (InvalidArgumentException &) { // could not get msg from strings } } PyErr_Restore( type, value, traceback ); PyErr_Print(); throw InternalException(HERE) << exceptionMessage; } } // PySliceObject type is deprecated #if PY_VERSION_HEX >= 0x03020000 inline PyObject* SliceCast(PyObject* pyObj) { return pyObj; } #else inline PySliceObject* SliceCast(PyObject* pyObj) { return (PySliceObject*)pyObj; } #endif inline void pickleSave(Advocate & adv, PyObject * pyObj) { ScopedPyObjectPointer pickleModule(PyImport_ImportModule( "pickle" )); // new reference assert( pickleModule.get() ); PyObject * pickleDict = PyModule_GetDict( pickleModule.get() ); assert(pickleDict); PyObject * dumpsMethod = PyDict_GetItemString( pickleDict, "dumps" ); assert( dumpsMethod ); if ( ! PyCallable_Check( dumpsMethod ) ) throw InternalException(HERE) << "Python 'pickle' module has no 'dumps' method"; assert(pyObj); ScopedPyObjectPointer rawDump(PyObject_CallFunctionObjArgs(dumpsMethod, pyObj, NULL)); // new reference handleException(); assert( rawDump.get() ); ScopedPyObjectPointer base64Module(PyImport_ImportModule( "base64" )); // new reference assert( base64Module.get() ); PyObject * base64Dict = PyModule_GetDict( base64Module.get() ); assert( base64Dict ); PyObject * b64encodeMethod = PyDict_GetItemString( base64Dict, "standard_b64encode" ); assert( b64encodeMethod ); if ( ! PyCallable_Check( b64encodeMethod ) ) throw InternalException(HERE) << "Python 'base64' module has no 'standard_b64encode' method"; ScopedPyObjectPointer base64Dump(PyObject_CallFunctionObjArgs(b64encodeMethod, rawDump.get(), NULL)); // new reference handleException(); assert( base64Dump.get() ); String pyInstanceSt(convert< _PyBytes_, String >( base64Dump.get() )); adv.saveAttribute( "pyInstance_", pyInstanceSt ); } inline void pickleLoad(Advocate & adv, PyObject * & pyObj) { String pyInstanceSt; adv.loadAttribute( "pyInstance_", pyInstanceSt ); ScopedPyObjectPointer base64Dump(convert< String, _PyBytes_ >( pyInstanceSt )); // new reference assert( base64Dump.get() ); ScopedPyObjectPointer base64Module(PyImport_ImportModule( "base64" )); // new reference assert( base64Module.get() ); PyObject * base64Dict = PyModule_GetDict( base64Module.get() ); assert( base64Dict ); PyObject * b64decodeMethod = PyDict_GetItemString( base64Dict, "standard_b64decode" ); assert( b64decodeMethod ); if ( ! PyCallable_Check( b64decodeMethod ) ) throw InternalException(HERE) << "Python 'base64' module has no 'standard_b64decode' method"; ScopedPyObjectPointer rawDump(PyObject_CallFunctionObjArgs(b64decodeMethod, base64Dump.get(), NULL)); // new reference handleException(); assert( rawDump.get() ); ScopedPyObjectPointer pickleModule(PyImport_ImportModule( "pickle" )); // new reference assert( pickleModule.get() ); PyObject * pickleDict = PyModule_GetDict( pickleModule.get() ); assert( pickleDict ); PyObject * loadsMethod = PyDict_GetItemString( pickleDict, "loads" ); assert( loadsMethod ); if ( ! PyCallable_Check( loadsMethod ) ) throw InternalException(HERE) << "Python 'pickle' module has no 'loads' method"; Py_XDECREF(pyObj); pyObj = PyObject_CallFunctionObjArgs(loadsMethod, rawDump.get(), NULL); // new reference handleException(); assert(pyObj); } END_NAMESPACE_OPENTURNS #endif /* OPENTURNS_PYTHONWRAPPINGFUNCTIONS_HXX */ openturns-1.9/python/src/optim_module.i000066400000000000000000000030211307543307100203760ustar00rootroot00000000000000// SWIG file optim_module.i %module(package="openturns", docstring="Optimization routines.") optim //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTFunc.hxx" #include "openturns/OTDiff.hxx" #include "openturns/OTExperiments.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTOptim.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i /* Base/Func */ %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Diff */ %import diff_module.i %import BaseDiffTemplateDefs.i /* Base/Experiment */ %import experiment_module.i %import BaseExperimentTemplateDefs.i /* Base/Optim */ %include OptimizationProblemImplementation.i %include OptimizationProblem.i %include OptimizationResult.i %include OptimizationAlgorithmImplementation.i %include OptimizationAlgorithm.i %include NearestPointCheckerResult.i %include NearestPointChecker.i %include AbdoRackwitz.i %include Cobyla.i %include TNC.i %include SQP.i %include MultiStart.i %include NLopt.i /* Base/Geom */ %import geom_module.i %import BaseGeomTemplateDefs.i %include LevelSet.i %include LevelSetMesher.i /* At last we include template definitions */ %include BaseOptimTemplateDefs.i openturns-1.9/python/src/orthogonalbasis_module.i000066400000000000000000000035441307543307100224560ustar00rootroot00000000000000// SWIG file orthogonalbasis_module.i %module(package="openturns", docstring="Polynomial primitives.") orthogonalbasis #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTOrthogonalBasis.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/Algorithm/WeightedExperiment */ %import weightedexperiment_module.i /* Uncertainty/Algorithm/OrthogonalBasis */ %include OrthogonalUniVariatePolynomial.i %include OrthogonalUniVariatePolynomialFactory.i %include CharlierFactory.i %include ChebychevFactory.i %include HermiteFactory.i %include JacobiFactory.i %include KrawtchoukFactory.i %include LaguerreFactory.i %include LegendreFactory.i %include HistogramPolynomialFactory.i %include MeixnerFactory.i %include OrthogonalUniVariatePolynomialFamily.i %include OrthonormalizationAlgorithmImplementation.i %include OrthonormalizationAlgorithm.i %include AdaptiveStieltjesAlgorithm.i %include ChebychevAlgorithm.i %include GramSchmidtAlgorithm.i %include StandardDistributionPolynomialFactory.i %include OrthogonalFunctionFactory.i %include OrthogonalProductPolynomialFactory.i %include OrthogonalBasis.i %include OrthogonalUniVariateFunctionFactory.i %include OrthogonalUniVariateFunctionFamily.i %include OrthogonalUniVariatePolynomialFunctionFactory.i %include FourierSeriesFactory.i %include HaarWaveletFactory.i %include OrthogonalProductFunctionFactory.i %include SoizeGhanemFactory.i %include CanonicalTensorEvaluation.i %include CanonicalTensorGradient.i /* At last we include template definitions */ %include UncertaintyOrthogonalBasisTemplateDefs.i openturns-1.9/python/src/randomvector_module.i000066400000000000000000000013151307543307100217550ustar00rootroot00000000000000// SWIG file randomvector_module.i %module(package="openturns", docstring="Random vectors.") randomvector #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i %import model_copula_module.i /* Uncertainty/Model */ %include ProcessImplementation.i %include Process.i %include RandomVectorImplementation.i %include ConstantRandomVector.i %include UsualRandomVector.i /* At last we include template definitions */ %include UncertaintyRandomVectorTemplateDefs.i openturns-1.9/python/src/simulation_module.i000066400000000000000000000037251307543307100214450ustar00rootroot00000000000000// SWIG file simulation_module.i %module(package="openturns", docstring="Simulation uncertainty propagation algorithms.") simulation #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTTransformation.hxx" #include "openturns/OTAnalytical.hxx" #include "openturns/OTSimulation.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/Algorithm/Transformation */ %import transformation_module.i %import UncertaintyTransformationTemplateDefs.i /* Uncertainty/Algorithm/Analytical */ %import analytical_module.i %import UncertaintyAnalyticalTemplateDefs.i /* Uncertainty/Algorithm/WeightedExperiment */ %import weightedexperiment_module.i /* Uncertainty/Algorithm/Simulation */ %include SimulationResultImplementation.i %include SimulationResult.i %include Simulation.i %include PostAnalyticalSimulation.i %include Wilks.i %include MonteCarlo.i %include LHS.i %include RandomizedLHS.i %include ImportanceSampling.i %include PostAnalyticalControlledImportanceSampling.i %include PostAnalyticalImportanceSampling.i %include RootStrategyImplementation.i %include RootStrategy.i %include SamplingStrategyImplementation.i %include SamplingStrategy.i %include DirectionalSampling.i %include OrthogonalDirection.i %include RandomDirection.i %include MediumSafe.i %include RiskyAndFast.i %include SafeAndSlow.i %include QuasiMonteCarlo.i %include RandomizedQuasiMonteCarlo.i %include QuasiMonteCarloResult.i %include SimulationSensitivityAnalysis.i %include SubsetSamplingResult.i %include SubsetSampling.i %include AdaptiveDirectionalSampling.i /* At last we include template definitions */ %include UncertaintySimulationTemplateDefs.i openturns-1.9/python/src/solver_module.i000066400000000000000000000022521307543307100205650ustar00rootroot00000000000000// SWIG file solver_module.i %module(package="openturns", docstring="Solvers.") solver //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGraph.hxx" #include "openturns/OTFunc.hxx" #include "openturns/OTDiff.hxx" #include "openturns/OTOptim.hxx" #include "openturns/OTSolver.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i /* Base/Func */ %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Diff */ %import diff_module.i %import BaseDiffTemplateDefs.i /* Base/Optim */ %import optim_module.i %import BaseOptimTemplateDefs.i /* Base/Solver */ %include SolverImplementation.i %include Solver.i %include Bisection.i %include Secant.i %include Brent.i %include ODESolverImplementation.i %include ODESolver.i %include RungeKutta.i /* At last we include template definitions */ %include BaseSolverTemplateDefs.i openturns-1.9/python/src/statistics_module.i000066400000000000000000000047751307543307100214610ustar00rootroot00000000000000// SWIG file statistics_module.i %module(package="openturns", docstring="Statistical classes.") statistics //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTStat.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTFunc.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Graph */ %import graph_module.i %import BaseGraphTemplateDefs.i /* Base / Func */ %import func_module.i %import BaseFuncTemplateDefs.i /* Base/Stat */ %include Compact.i %include Full.i %include Last.i %include Null.i %include HMatrixParameters.i %include LinearModel.i %include LinearModelFactory.i %include TestResult.i %include RandomGeneratorState.i %include RandomGenerator.i %include LowDiscrepancySequenceImplementation.i %include LowDiscrepancySequence.i %include SobolSequence.i %include FaureSequence.i %include HaltonSequence.i %include HaselgroveSequence.i %include ReverseHaltonSequence.i %include CorrelationAnalysis.i %include FilteringWindowsImplementation.i %include FilteringWindows.i %include Hamming.i %include Hanning.i %include FFTImplementation.i %include FFT.i %include SpectralModelImplementation.i %include SpectralModel.i %include CovarianceModelImplementation.i %include CovarianceModel.i %include StationaryCovarianceModel.i %include SecondOrderModelImplementation.i %include ExponentialCauchy.i %include SecondOrderModel.i %include SpectralModelFactoryImplementation.i %include SpectralModelFactory.i %include UserDefinedSpectralModel.i %include WelchFactory.i %include ExponentialModel.i %include ExponentiallyDampedCosineModel.i %include SphericalModel.i %include CauchyModel.i %include CovarianceModelFactoryImplementation.i %include CovarianceModelFactory.i %include UserDefinedCovarianceModel.i %include NonStationaryCovarianceModelFactory.i %include UserDefinedStationaryCovarianceModel.i %include StationaryCovarianceModelFactory.i %include SquaredExponential.i %include GeneralizedExponential.i %include AbsoluteExponential.i %include MaternModel.i %include DiracCovarianceModel.i %include ProductCovarianceModel.i %include RankMCovarianceModel.i %include TensorizedCovarianceModel.i %include HMatrixFactory.i %include HMatrixImplementation.i %include HMatrix.i /* At last we include template definitions */ %include BaseStatisticsTemplateDefs.i openturns-1.9/python/src/stattests_module.i000066400000000000000000000016011307543307100213060ustar00rootroot00000000000000// SWIG file stattests_module.i %module(package="openturns", docstring="Statistical tests.") stattests #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTStatTests.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %include UncertaintyModelCopulaCollection.i %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/StatTests */ %include VisualTest.i %include FittingTest.i %include HypothesisTest.i %include LinearModelTest.i %include NormalityTest.i %include DickeyFullerTest.i /* At last we include template definitions */ %include UncertaintyStatTestsTemplateDefs.i openturns-1.9/python/src/testing_module.i000066400000000000000000000007341307543307100207330ustar00rootroot00000000000000%module(package="openturns", docstring="Test routines.") testing //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OT.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Type */ %import typ_module.i %import BaseTypTemplateDefs.i /* Base/Stat */ %import statistics_module.i %import BaseStatisticsTemplateDefs.i %{ #include "openturns/OTtestcode.hxx" %} %include openturns/OTtestcode.hxx openturns-1.9/python/src/transformation_module.i000066400000000000000000000037641307543307100223320ustar00rootroot00000000000000// SWIG file transformation_module.i %module(package="openturns", docstring="Transformations.") transformation #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTDistribution.hxx" #include "openturns/OTTransformation.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %include BaseFuncCollection.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %include UncertaintyModelCopulaCollection.i %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/Algorithm/Transformation */ %include MarginalTransformationEvaluation.i %include MarginalTransformationGradient.i %include MarginalTransformationHessian.i %include NatafEllipticalCopulaEvaluation.i %include NatafEllipticalCopulaGradient.i %include NatafEllipticalCopulaHessian.i %include InverseNatafEllipticalCopulaEvaluation.i %include InverseNatafEllipticalCopulaGradient.i %include InverseNatafEllipticalCopulaHessian.i %include NatafIndependentCopulaEvaluation.i %include NatafIndependentCopulaGradient.i %include NatafIndependentCopulaHessian.i %include InverseNatafIndependentCopulaEvaluation.i %include InverseNatafIndependentCopulaGradient.i %include InverseNatafIndependentCopulaHessian.i %include NatafEllipticalDistributionEvaluation.i %include NatafEllipticalDistributionGradient.i %include NatafEllipticalDistributionHessian.i %include InverseNatafEllipticalDistributionEvaluation.i %include InverseNatafEllipticalDistributionGradient.i %include InverseNatafEllipticalDistributionHessian.i %include RosenblattEvaluation.i %include InverseRosenblattEvaluation.i %include DistributionTransformation.i /* Uncertainty/Algorithm/Transformation/ProcessTransformation */ %import metamodel_module.i %include BoxCoxFactory.i %include TrendFactory.i /* At last we include template definitions */ %include UncertaintyTransformationTemplateDefs.i openturns-1.9/python/src/typ_module.i000066400000000000000000000044671307543307100201010ustar00rootroot00000000000000// SWIG file typ_module.i %module(package="openturns", docstring="Internal data types.") typ //%feature("autodoc","1"); %pythoncode %{ def getCorrelationMatrixFromMap(Vars, Map): """ Convert dictionary to CorrelationMatrix. Transform a two-dimension dict whose keys are listed in Vars into a CorrelationMatrix. The values are numerical. No need to define all the elements in the map since CorrelationMatrix is symmetric. Examples -------- Vars=['X','Y','Z'] Map={} Map['X']={} Map['X']['Y']= 0.1 Map['X']['Z']= 0.7 Map['Y']={} Map['Y']['Z']= 0.8 R = getCorrelationMatrixFromMap(Vars,Map) """ corr = CorrelationMatrix(len(Vars)) i = 0 for first in Vars: j = 0 for second in Vars: if first in Map and second in Map[first]: corr[i, j] = Map[first][second] j += 1 i += 1 return corr %} %{ #include "openturns/OTconfig.hxx" #include "openturns/OTCommon.hxx" #include "openturns/OTType.hxx" #include "openturns/OTGeom.hxx" #include "openturns/OTStat.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i /* Base/Common */ %import common_module.i /* Base/Type */ %include Collection.i %template (UnsignedIntegerCollection) OT::Collection; %include PersistentCollection.i %include Description.i %include Indices.i %include Point.i %include PointWithDescription.i %include DomainImplementation.i %include Interval.i %include MatrixImplementation.i %include Matrix.i %include SquareMatrix.i %include SymmetricMatrix.i %include TensorImplementation.i %include Tensor.i %include SymmetricTensor.i %include Cache.i %include ComplexMatrixImplementation.i %include ComplexMatrix.i %include SquareComplexMatrix.i %include HermitianMatrix.i %include TriangularMatrix.i %include TriangularComplexMatrix.i %include ComplexTensorImplementation.i %include ComplexTensor.i %include CovarianceMatrix.i %include CorrelationMatrix.i %include IdentityMatrix.i %include Sample.i %include HistoryStrategyImplementation.i %include HistoryStrategy.i /* At last we include template definitions */ %include BaseTypTemplateDefs.i %pythoncode %{ class BoolCollection(UnsignedIntegerCollection): """Proxy of C++ OT::BoolCollection class""" pass %} openturns-1.9/python/src/uncertainty_module.i000066400000000000000000000042661307543307100216270ustar00rootroot00000000000000// SWIG file uncertainty_module.i %module(package="openturns", docstring="Probabilistic meta-package.") uncertainty #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTUncertainty.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i %import randomvector_module.i %import dist_bundle1_module.i %import dist_bundle2_module.i /* FIXME: Wrong place in Base/Stat */ /* Base/Stat */ %include CorrelationAnalysis.i /* Uncertainty/Algorithm/Experiment */ %import weightedexperiment_module.i /* Uncertainty/Algorithm/Classification */ %import classification_module.i %import UncertaintyClassificationTemplateDefs.i /* Uncertainty/Algorithm/OrthogonalBasis */ %import orthogonalbasis_module.i %import UncertaintyOrthogonalBasisTemplateDefs.i /* Uncertainty/Algorithm/MetaModel */ %import metamodel_module.i %import UncertaintyMetaModelTemplateDefs.i /* Uncertainty/Algorithm */ %include TaylorExpansionMoments.i /* Uncertainty/Algorithm/Optimization */ %include EfficientGlobalOptimization.i /* Uncertainty/Algorithm/Sensitivity */ %include ANCOVA.i %include FAST.i %include SobolIndicesAlgorithmImplementation.i %include SobolIndicesAlgorithm.i %include MartinezSensitivityAlgorithm.i %include SaltelliSensitivityAlgorithm.i %include JansenSensitivityAlgorithm.i %include MauntzKucherenkoSensitivityAlgorithm.i /* Uncertainty/Algorithm/Transformation */ %import transformation_module.i %import UncertaintyTransformationTemplateDefs.i /* Uncertainty/Algorithm/Analytical */ %import analytical_module.i %import UncertaintyAnalyticalTemplateDefs.i /* Uncertainty/Algorithm/Simulation */ %import simulation_module.i %import UncertaintySimulationTemplateDefs.i /* Uncertainty/StatTests */ %import stattests_module.i %import UncertaintyStatTestsTemplateDefs.i /* Uncertainty/Process*/ %import model_process_module.i %import UncertaintyProcessTemplateDefs.i /* At last we include template definitions */ %include UncertaintyTemplateDefs.i openturns-1.9/python/src/viewer.py000066400000000000000000000717461307543307100174250ustar00rootroot00000000000000""" Graph viewer. Graph or Drawable viewer using matplotlib Examples -------- >>> import openturns as ot >>> from openturns.viewer import View >>> graph = ot.Normal().drawPDF() >>> view = View(graph, plot_kwargs={'color':'blue'}) >>> view.save('curve.png', dpi=100) >>> view.show() """ import openturns as ot import numpy as np import matplotlib import matplotlib.pyplot as plt from distutils.version import LooseVersion import os import re import warnings import io import sys __all__ = ["View", "PlotDesign"] class View(object): """ Create the figure. Parameters ---------- graph : :class:`~openturns.Graph, :class:`~openturns.Drawable` A Graph or Drawable object. pixelsize : 2-tuple of int The requested size in pixels (width, height). figure : :class:`matplotlib.figure.Figure` The figure to draw on. figure_kwargs : dict, optional Passed on to matplotlib.pyplot.figure kwargs axes : :class:`matplotlib.axes.Axes` The axes to draw on. plot_kwargs : dict, optional Used when drawing Cloud, Curve drawables Passed on as matplotlib.axes.Axes.plot kwargs axes_kwargs : dict, optional Passed on to matplotlib.figure.Figure.add_subplot kwargs bar_kwargs : dict, optional Used when drawing BarPlot drawables Passed on to matplotlib.pyplot.bar kwargs pie_kwargs : dict, optional Used when drawing Pie drawables Passed on to matplotlib.pyplot.pie kwargs polygon_kwargs : dict, optional Used when drawing Polygon drawables Passed on to matplotlib.patches.Polygon kwargs polygoncollection_kwargs : dict, optional Used when drawing PolygonArray drawables Passed on to matplotlib.collection.PolygonCollection kwargs contour_kwargs : dict, optional Used when drawing Contour drawables Passed on to matplotlib.pyplot.contour kwargs clabel_kwargs : dict, optional Used when drawing Contour drawables Passed on to matplotlib.pyplot.clabel kwargs step_kwargs : dict, optional Used when drawing Staircase drawables Passed on to matplotlib.pyplot.step kwargs text_kwargs : dict, optional Used when drawing Pairs, Text drawables Passed on to matplotlib.axes.Axes.text kwargs legend_kwargs : dict, optional Passed on to matplotlib.axes.Axes.legend kwargs add_legend : bool, optional Adds a legend if True. Default is True. """ @staticmethod def CheckDict(arg): """Check that the argument is a python dictionary.""" result = arg if arg is None: result = dict() elif not isinstance(arg, dict): raise TypeError('Argument is not a dict') return result @staticmethod def ToUnicode(s): """Convert to unicode if necessary.""" if isinstance(s, bytes): s = s.decode('utf8') return s def __init__(self, graph, pixelsize=None, figure=None, figure_kwargs=None, axes=[], plot_kwargs=None, axes_kwargs=None, bar_kwargs=None, pie_kwargs=None, polygon_kwargs=None, polygoncollection_kwargs=None, contour_kwargs=None, step_kwargs=None, clabel_kwargs=None, text_kwargs=None, legend_kwargs=None, add_legend=True, **kwargs): # prevent Qt from stopping the interpreter, see matplotlib PR #1905 if LooseVersion(matplotlib.__version__) < LooseVersion('1.3'): # check for DISPLAY env variable on X11 build of Qt if plt.get_backend().startswith('Qt4'): from matplotlib.backends.qt4_compat import QtGui if hasattr(QtGui, 'QX11Info'): display = os.environ.get('DISPLAY') if display is None or not re.search(':\d', display): raise RuntimeError('Invalid DISPLAY variable') if not isinstance(graph, ot.Graph) and not isinstance(graph, ot.GraphImplementation): if not isinstance(graph, ot.Drawable) and not isinstance(graph, ot.DrawableImplementation): raise TypeError( '-- The given object cannot be converted into a Graph nor Drawable.') else: # convert Drawable => Graph drawable = graph graph = ot.Graph() graph.add(drawable) drawables = graph.getDrawables() n_drawables = len(drawables) if n_drawables == 0: warnings.warn('-- Nothing to draw.') return # check that arguments are dictionnaries figure_kwargs = self.CheckDict(figure_kwargs) axes_kwargs = self.CheckDict(axes_kwargs) plot_kwargs_default = self.CheckDict(plot_kwargs) bar_kwargs_default = self.CheckDict(bar_kwargs) pie_kwargs_default = self.CheckDict(pie_kwargs) polygon_kwargs_default = self.CheckDict(polygon_kwargs) polygoncollection_kwargs_default = self.CheckDict( polygoncollection_kwargs) contour_kwargs_default = self.CheckDict(contour_kwargs) step_kwargs_default = self.CheckDict(step_kwargs) clabel_kwargs_default = self.CheckDict(clabel_kwargs) text_kwargs_default = self.CheckDict(text_kwargs) legend_kwargs = self.CheckDict(legend_kwargs) # set image size in pixels if pixelsize is not None: if len(pixelsize) != 2: raise ValueError('-- pixelsize must be a 2-tuple.') figure_kwargs.setdefault('dpi', 100) dpi = figure_kwargs['dpi'] border = 10 # guess width, height = pixelsize width -= border height -= border figure_kwargs.setdefault( 'figsize', (width * 1.0 / dpi, height * 1.0 / dpi)) # set step drawstyle step_kwargs_default.setdefault('where', 'post') # set title axes_kwargs.setdefault('title', self.ToUnicode(graph.getTitle())) # set scale if (graph.getLogScale() == ot.GraphImplementation.LOGX) or (graph.getLogScale() == ot.GraphImplementation.LOGXY): axes_kwargs.setdefault('xscale', 'log') if (graph.getLogScale() == ot.GraphImplementation.LOGY) or (graph.getLogScale() == ot.GraphImplementation.LOGXY): axes_kwargs.setdefault('yscale', 'log') # set bounding box axes_kwargs.setdefault( 'xlim', [graph.getBoundingBox()[0], graph.getBoundingBox()[1]]) axes_kwargs.setdefault( 'ylim', [graph.getBoundingBox()[2], graph.getBoundingBox()[3]]) # set figure if figure is None: if len(axes) == 0: self._fig = plt.figure(**figure_kwargs) else: self._fig = axes[0].get_figure() else: self._fig = figure if len(axes) == 0: axes = self._fig.axes # set axes if len(axes) == 0: self._ax = [self._fig.add_subplot(111, **axes_kwargs)] else: self._ax = axes has_labels = False self._ax[0].grid(b=graph.getGrid()) for drawable in drawables: # reset working dictionaries by excplicitely creating copies plot_kwargs = dict(plot_kwargs_default) bar_kwargs = dict(bar_kwargs_default) pie_kwargs = dict(pie_kwargs_default) polygon_kwargs = dict(polygon_kwargs_default) polygoncollection_kwargs = dict(polygoncollection_kwargs_default) contour_kwargs = dict(contour_kwargs_default) step_kwargs = dict(step_kwargs_default) clabel_kwargs = dict(clabel_kwargs_default) text_kwargs = dict(text_kwargs_default) # set color if ('color' not in plot_kwargs_default) and ('c' not in plot_kwargs_default): plot_kwargs['color'] = drawable.getColorCode() if ('color' not in bar_kwargs_default) and ('c' not in bar_kwargs_default): bar_kwargs['color'] = drawable.getColorCode() if ('color' not in step_kwargs_default) and ('c' not in step_kwargs_default): step_kwargs['color'] = drawable.getColorCode() if ('color' not in text_kwargs_default) and ('c' not in text_kwargs_default): text_kwargs['color'] = drawable.getColorCode() # set marker pointStyleDict = {'square': 's', 'circle': 'o', 'triangleup': '2', 'plus': '+', 'times': '+', 'diamond': '+', 'triangledown': 'v', 'star': '*', 'fsquare': 's', 'fcircle': 'o', 'ftriangleup': '2', 'fdiamond': 'D', 'bullet': '.', 'dot': ',', 'none': 'None'} if 'marker' not in plot_kwargs_default: try: plot_kwargs['marker'] = pointStyleDict[ drawable.getPointStyle()] except: warnings.warn( '-- Unknown marker: ' + drawable.getPointStyle()) # set line style lineStyleDict = {'solid': '-', 'dashed': '--', 'dotted': ':', 'dotdash': '-.', 'longdash': '--', 'twodash': '--'} if ('linestyle' not in plot_kwargs_default) and ('ls' not in plot_kwargs_default): try: plot_kwargs['linestyle'] = lineStyleDict[ drawable.getLineStyle()] except: warnings.warn('-- Unknown line style') if ('linestyle' not in step_kwargs_default) and ('ls' not in step_kwargs_default): try: step_kwargs['linestyle'] = lineStyleDict[ drawable.getLineStyle()] except: warnings.warn('-- Unknown line style') # set line width if ('linewidth' not in plot_kwargs_default) and ('lw' not in plot_kwargs_default): plot_kwargs['linewidth'] = drawable.getLineWidth() if ('linewidth' not in step_kwargs_default) and ('lw' not in step_kwargs_default): step_kwargs['linewidth'] = drawable.getLineWidth() # retrieve data data = drawable.getData() x = data.getMarginal(0) if data.getDimension() > 1: y = data.getMarginal(1) # add label, title drawableKind = drawable.getImplementation().getClassName() if drawableKind != 'Pie': self._ax[0].set_xlabel(self.ToUnicode(graph.getXTitle())) self._ax[0].set_ylabel(self.ToUnicode(graph.getYTitle())) if (len(drawable.getLegend()) > 0) and ((drawableKind != 'Cloud') or (drawable.getPointStyle() != 'none')): label = self.ToUnicode(drawable.getLegend()) has_labels = True plot_kwargs.setdefault('label', label) bar_kwargs.setdefault('label', label) step_kwargs.setdefault('label', label) if drawableKind == 'BarPlot': # linestyle for bar() is different than the one for plot() if 'linestyle' in bar_kwargs_default: bar_kwargs.pop('linestyle') if ('linestyle' not in plot_kwargs_default) and ('ls' not in plot_kwargs_default): lineStyleDict = {'solid': 'solid', 'dashed': 'dashed', 'dotted': 'dotted', 'dotdash': 'dashdot', 'longdash': 'dashed', 'twodash': 'dashed'} if drawable.getLineStyle() in lineStyleDict: bar_kwargs['linestyle'] = lineStyleDict[ drawable.getLineStyle()] else: warnings.warn( '-- Unknown line style: ' + drawable.getLineStyle()) xi = drawable.getOrigin() for i in range(x.getSize()): # label only the first bar to avoid getting several legend # items if (i == 1) and ('label' in bar_kwargs): bar_kwargs.pop('label') self._ax[0].bar( xi, height=y[i][0], width=x[i][0], **bar_kwargs) xi += x[i][0] elif drawableKind == 'Cloud': plot_kwargs['linestyle'] = 'None' self._ax[0].plot(x, y, **plot_kwargs) elif drawableKind == 'Curve': self._ax[0].plot(x, y, **plot_kwargs) elif drawableKind == 'Polygon': if ('facecolor' not in polygon_kwargs_default) and ('fc' not in polygon_kwargs_default): polygon_kwargs['facecolor'] = drawable.getColorCode() if ('edgecolor' not in polygon_kwargs_default) and ('ec' not in polygon_kwargs_default): polygon_kwargs['edgecolor'] = drawable.ConvertFromName( drawable.getEdgeColor()) self._ax[0].add_patch( matplotlib.patches.Polygon(data, **polygon_kwargs)) elif drawableKind == 'PolygonArray': polygonsNumber = drawable.getPalette().getSize() verticesNumber = drawable.getData().getSize() // polygonsNumber colors = drawable.getPalette() colorsRGBA = [] for i in range(polygonsNumber): hex_code = ot.Drawable.ConvertFromName(colors[i]) rgba = ot.Drawable.ConvertToRGBA(hex_code) colorsRGBA.append( (rgba[0] / 255.0, rgba[1] / 255.0, rgba[2] / 255.0, rgba[3] / 255.0)) if 'facecolors' not in polygoncollection_kwargs_default: polygoncollection_kwargs['facecolors'] = colorsRGBA if 'edgecolors' not in polygon_kwargs_default: polygoncollection_kwargs['edgecolors'] = colorsRGBA self._ax[0].add_collection( matplotlib.collections.PolyCollection(np.array(data).reshape((polygonsNumber, verticesNumber, 2)), **polygoncollection_kwargs)) elif drawableKind == 'Pie': pie_kwargs.setdefault( 'labels', list(map(self.ToUnicode, drawable.getLabels()))) pie_kwargs.setdefault('colors', drawable.getPalette()) self._ax[0].set_aspect('equal') self._ax[0].pie(x, **pie_kwargs) elif drawableKind == 'Contour': X, Y = np.meshgrid(drawable.getX(), drawable.getY()) Z = np.reshape(drawable.getData(), ( drawable.getX().getSize(), drawable.getY().getSize())) contour_kwargs.setdefault('levels', drawable.getLevels()) if ('linestyles' not in contour_kwargs_default) and ('ls' not in contour_kwargs_default): try: contour_kwargs['linestyles'] = lineStyleDict[ drawable.getLineStyle()] except: warnings.warn('-- Unknown line style') if 'colors' not in contour_kwargs_default: contour_kwargs['colors'] = [drawable.getColorCode()] contourset = self._ax[0].contour(X, Y, Z, **contour_kwargs) if drawable.getDrawLabels(): clabel_kwargs.setdefault('fontsize', 8) # Use labels fmt = {} for l, s in zip(np.array(drawable.getLevels()), drawable.getLabels()): fmt[l] = s clabel_kwargs.setdefault('fmt', fmt) plt.clabel(contourset, **clabel_kwargs) for i in range(drawable.getLabels().getSize()): contourset.collections[i].set_label( drawable.getLabels()[i]) elif drawableKind == 'Staircase': self._ax[0].step(x, y, **step_kwargs) elif drawableKind == 'Pairs': # disable axis : grid, ticks, axis self._ax[0].axison = False if 'title' in axes_kwargs: axes_kwargs.pop('title') axes_kwargs['xticks'] = [] axes_kwargs['yticks'] = [] dim = drawable.getData().getDimension() labels = drawable.getLabels() # adjust font if ('fontsize' not in text_kwargs_default) and ('size' not in text_kwargs_default): text_kwargs['fontsize'] = max(16 - dim, 4) text_kwargs.setdefault('horizontalalignment', 'center') text_kwargs.setdefault('verticalalignment', 'center') for i in range(dim): for j in range(dim): if len(self._ax) <= dim * dim: self._ax.append(self._fig.add_subplot( dim, dim, 1 + i * dim + j, **axes_kwargs)) if i != j: x = drawable.getData().getMarginal(i) y = drawable.getData().getMarginal(j) x_min = x.getMin()[0] x_max = x.getMax()[0] x_margin = 0.1 * (x_max - x_min) y_min = y.getMin()[0] y_max = y.getMax()[0] y_margin = 0.1 * (y_max - y_min) plot_kwargs['linestyle'] = 'None' self._ax[1 + i * dim + j].plot(x, y, **plot_kwargs) self._ax[1 + i * dim + j].set_xlim( x_min - x_margin, x_max + x_margin) self._ax[1 + i * dim + j].set_ylim( y_min - y_margin, y_max + y_margin) else: text_kwargs['transform'] = self._ax[ 1 + i * dim + j].transAxes self._ax[1 + i * dim + j].text( 0.5, 0.5, labels[i], **text_kwargs) elif drawableKind == 'Text': dim = drawable.getData().getDimension() # adjust font if ('fontsize' not in text_kwargs_default) and ('size' not in text_kwargs_default): text_kwargs['fontsize'] = max(16 - dim, 4) if 'horizontalalignment' in text_kwargs_default: horizontal_default = text_kwargs['horizontalalignment'] del text_kwargs['horizontalalignment'] else: horizontal_default = 'center' if 'verticalalignment' in text_kwargs_default: vertical_default = text_kwargs['verticalalignment'] del text_kwargs['verticalalignment'] else: vertical_default = 'center' positions = drawable.getTextPositions() for i, text in enumerate(drawable.getTextAnnotations()): if len(text) == 0: continue horizontal = horizontal_default vertical = vertical_default # Text.getTextPositions() describes position of text with respect # to given coordinates; in matplotlib, positional argument controls # which side of the text bounding box is positioned, its meaning is # thus inverted. if positions[i] == 'left': horizontal = 'right' elif positions[i] == 'right': horizontal = 'left' elif positions[i] == 'top': vertical = 'bottom' elif positions[i] == 'bottom': vertical = 'top' self._ax[0].text( x[i][0], y[i][0], text, horizontalalignment=horizontal, verticalalignment=vertical, **text_kwargs) else: raise ValueError( 'Drawable type not implemented: ' + drawableKind) # Add legend if add_legend and has_labels and (graph.getLegendPosition() != ''): # set legend position if 'loc' not in legend_kwargs: try: legendPositionDict = {'bottomright': 'lower right', 'bottom': 'lower center', 'bottomleft': 'lower left', 'left': 'center left', 'topleft': 'upper left', 'topright': 'upper right', 'right': 'center right', 'center': 'center'} legend_kwargs['loc'] = legendPositionDict[ graph.getLegendPosition()] except: warnings.warn( '-- Unknown legend position: ' + graph.getLegendPosition()) # set a single legend point legend_kwargs.setdefault('numpoints', 1) # enable round box by default legend_kwargs.setdefault('fancybox', True) # enable shadow by default legend_kwargs.setdefault('shadow', True) # by default legend is a bit too large legend_kwargs.setdefault('prop', {'size': 10}) self._ax[0].legend(**legend_kwargs) def show(self, **kwargs): """ Display the graph. See http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure.show """ if hasattr(self._fig, 'show'): self._fig.show(**kwargs) else: # mpl < 1.3.1, see https://github.com/ipython/ipython/pull/1615 plt.show(**kwargs) @staticmethod def ShowAll(**kwargs): """ Display all graphs. """ plt.show(**kwargs) def save(self, fname, **kwargs): """ Save the graph as file. Parameters ---------- fname: bool, optional A string containing a path to a filename from which file format is deduced. kwargs: Refer to matplotlib.figure.Figure.savefig documentation for valid keyword arguments. """ self._fig.savefig(fname, **kwargs) def getFigure(self): """ Accessor to the underlying figure object. Refer to matplotlib.figure.Figure for further information. """ return self._fig def getAxes(self): """ Get the list of Axes objects. Refer to matplotlib.axes.Axes for further information. """ return self._ax def close(self): """Close the figure.""" plt.close(self._fig) def ToSVGString(graph): """ Convert as SVG file. Parameters ---------- graph : object A Graph or Drawable object. Returns a SVG representation as string """ # save interactive mode state ision = plt.isinteractive() plt.ioff() view = View(graph) output = io.BytesIO() view.save(output, format='svg') view.close() # restore interactive mode state if ision: plt.ion() svgBytes = output.getvalue() return svgBytes.decode('utf-8') def PlotDesign(design, bounds, Nx, Ny, figure=None, axes=[], plot_kwargs={}, axes_kwargs={}, text_kwargs={}): """ Plot a design using a scatter plot approach (plots 2D marginals). In addition, the function plots a grid, i.e. horizontal and vertical lines to distinguish LHS character Parameters ---------- design : 2-d sequence of float Design bounds: :class:`openturns.Interval` Bounds of the underlying distribution nxdiv : int Number of subdivisions in the X axis nydiv : int Number of subdivisions in the Y axis Returns ------- fig : matplotlib figure Figure representing the LHS Examples -------- >>> import openturns as ot >>> from openturns.viewer import PlotDesign >>> # Bounds are [0,1]^5 >>> # Size of sample >>> size = 10 >>> # Factory: lhs generates (here centered) >>> distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)]*5) >>> bounds = distribution.getRange() >>> lhs = ot.LHSExperiment(distribution, size) >>> lhs.setRandomShift(False) # centered >>> lhs.setAlwaysShuffle(True) # randomized >>> # Generate a design >>> design = lhs.generate() >>> # Plot the design >>> fig = PlotDesign(design, bounds, 10, 10) """ # check that arguments are dictionnaries assert(isinstance(axes_kwargs, dict)) assert(isinstance(plot_kwargs, dict)) assert(isinstance(text_kwargs, dict)) # retrieve data data = ot.Sample(design) dim = data.getDimension() if dim < 2: raise TypeError('Expected designs of dimension >=2') labels = data.getDescription() # set bounding box # set figure if figure is None: figure = plt.figure() else: if len(axes) == 0: axes = figure.axes # set axes if len(axes) == 0: axes = [figure.add_subplot(111, **axes_kwargs)] # disable axis : grid, ticks, axis? axes[0].axison = False if 'title' in axes_kwargs: axes_kwargs.pop('title') axes_kwargs['xticks'] = [] axes_kwargs['yticks'] = [] # adjust font if (not 'fontsize' in text_kwargs) and (not 'size' in text_kwargs): text_kwargs['fontsize'] = max(16 - dim, 4) text_kwargs.setdefault('horizontalalignment', 'center') text_kwargs.setdefault('verticalalignment', 'center') # set marker pointStyleDict = {'square': 's', 'circle': 'o', 'triangleup': '2', 'plus': '+', 'times': '+', 'diamond': '+', 'triangledown': 'v', 'star': '*', 'fsquare': 's', 'fcircle': 'o', 'ftriangleup': '2', 'fdiamond': 'D', 'bullet': '.', 'dot': ',', 'none': 'None'} if not 'marker' in plot_kwargs: plot_kwargs['marker'] = pointStyleDict["square"] # Particular case of dim=2 if dim == 2: x = data.getMarginal(0) y = data.getMarginal(1) # x axis x_min = bounds.getLowerBound()[0] x_max = bounds.getUpperBound()[0] dx = x_max - x_min # y axis y_min = bounds.getLowerBound()[1] y_max = bounds.getUpperBound()[1] dy = y_max - y_min # Draw horizontal lines dydiv = float(Ny) xk = [x_min, x_max] for k in range(Ny): yk = [y_min + k * dy / dydiv, y_min + k * dy / dydiv] axes[0].plot(xk, yk, 'k') yk = [y_max, y_max] axes[0].plot(xk, yk, 'k') # Draw vertical lines dxdiv = float(Nx) yk = [y_min, y_max] for k in range(Nx): xk = [x_min + k * dx / dxdiv, x_min + k * dx / dxdiv] axes[0].plot(xk, yk, 'k-') xk = [x_max, x_max] axes[0].plot(xk, yk, 'k-') plot_kwargs['linestyle'] = 'None' axes[0].plot(x, y, **plot_kwargs) axes[0].set_xlabel(labels[0]) axes[0].set_ylabel(labels[1]) axes[0].set_xlim(x_min, x_max) axes[0].set_ylim(y_min, y_max) return figure for i in range(dim): for j in range(dim): if len(axes) <= dim * dim: axes.append( figure.add_subplot(dim, dim, 1 + i * dim + j, **axes_kwargs)) if i != j: x = data.getMarginal(i) y = data.getMarginal(j) # x axis x_min = bounds.getLowerBound()[i] x_max = bounds.getUpperBound()[i] dx = x_max - x_min # y axis y_min = bounds.getLowerBound()[j] y_max = bounds.getUpperBound()[j] dy = y_max - y_min # Draw horizontal lines dydiv = float(Ny) for k in range(Ny): xk = [x_min, x_max] yk = [y_min + k * dy / dydiv, y_min + k * dy / dydiv] axes[1 + i * dim + j].plot(xk, yk, 'k-') # Draw vertical lines dxdiv = float(Nx) for k in range(Nx): xk = [x_min + k * dx / dxdiv, x_min + k * dx / dxdiv] yk = [y_min, y_max] axes[1 + i * dim + j].plot(xk, yk, 'k-') plot_kwargs['linestyle'] = 'None' axes[1 + i * dim + j].plot(x, y, **plot_kwargs) axes[1 + i * dim + j].set_xlim(x_min, x_max) axes[1 + i * dim + j].set_ylim(y_min, y_max) else: text_kwargs['transform'] = axes[1 + i * dim + j].transAxes axes[1 + i * dim + j].text(0.5, 0.5, labels[i], **text_kwargs) # Finally get the figure return figure openturns-1.9/python/src/weightedexperiment_module.i000066400000000000000000000026001307543307100231510ustar00rootroot00000000000000// SWIG file weightedexperiment_module.i %module(package="openturns", docstring="Weighted designs of experiments.") weightedexperiment #pragma SWIG nowarn=302,509 //%feature("autodoc","1"); %{ #include "openturns/OTconfig.hxx" #include "openturns/OTBase.hxx" #include "openturns/OTModel.hxx" #include "openturns/OTWeightedExperiments.hxx" %} %include typemaps.i %include OTtypes.i %include OTexceptions.i %include std_vector.i %import base_module.i /* Uncertainty/Model */ /* Uncertainty/Distribution */ %import model_copula_module.i %import UncertaintyModelCopulaTemplateDefs.i /* Uncertainty/Algorithm/Experiment */ %include WeightedExperimentImplementation.i %include WeightedExperiment.i %include BootstrapExperiment.i %include FixedExperiment.i %include GaussProductExperiment.i %include ImportanceSamplingExperiment.i %include LHSExperiment.i %include TemperatureProfileImplementation.i %include TemperatureProfile.i %include GeometricProfile.i %include LinearProfile.i %include SpaceFillingImplementation.i %include SpaceFilling.i %include SpaceFillingC2.i %include SpaceFillingMinDist.i %include SpaceFillingPhiP.i %include LHSResult.i %include OptimalLHSExperiment.i %include MonteCarloLHS.i %include SimulatedAnnealingLHS.i %include LowDiscrepancyExperiment.i %include MonteCarloExperiment.i /* At last we include template definitions */ %include UncertaintyWeightedExperimentTemplateDefs.i openturns-1.9/python/test/000077500000000000000000000000001307543307100157235ustar00rootroot00000000000000openturns-1.9/python/test/CMakeLists.txt000066400000000000000000000636101307543307100204710ustar00rootroot00000000000000# -*- cmake -*- set (ADAPT_CHECK_TESTS_EXPONENT) set (REPLACE_EOL " | cat ") if (MINGW) # replace dos eols set (REPLACE_EOL " | tr -d '\\\\015' ") # By default, Mingw-g++ puts 3 digits to real exponent whereas g++ puts 2. set (ADAPT_CHECK_TESTS_EXPONENT "PRINTF_EXPONENT_DIGITS=2") endif () set (PYINSTALLCHECK_ENVIRONMENT "OPENTURNS_CONFIG_PATH=${INSTALL_DESTDIR}${SYSCONFIG_PATH}/openturns" "PYTHONPATH=${INSTALL_DESTDIR}${PYTHON_MODULE_PATH}${PATH_SEP}$ENV{PYTHONPATH}" ${ADAPT_CHECK_TESTS_EXPONENT} ) # This macro compiles on the fly and run the corresponding post-installation test # It can have two optional arguments PRE and POST followed by some shell command to be run # before or after the test if needed # PRE and POST options cn be repeated many times: the arguments will be run one after the other # in the order of appearence. If one fails, the whole command fails. macro (ot_pyinstallcheck_test TESTNAME) set (TESTNAME_TGT t_${TESTNAME}) set (TESTNAME_SRC ${TESTNAME_TGT}.py) set (TESTNAME_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_SRC}) set (_CMD) set (_PRE) set (_POST) set (_PARAMS) set (_IGNOREOUT OFF) foreach (_ARG ${ARGN}) string (TOUPPER ${_ARG} ARG) if (${ARG} MATCHES PRE) set (_CMD PRE) elseif (${ARG} MATCHES POST) set (_CMD POST) elseif (${ARG} MATCHES PARAMS) set (_CMD PARAMS) elseif (${ARG} MATCHES IGNOREOUT) set (_IGNOREOUT ON) else (${ARG} MATCHES PRE) if (${_CMD} MATCHES PRE) set (_PRE "${_PRE} ${_ARG} && ") elseif (${_CMD} MATCHES POST) set (_POST "${_POST} && ${_ARG}") elseif (${_CMD} MATCHES PARAMS) set (_PARAMS "${_PARAMS} ${_ARG}") endif (${_CMD} MATCHES PRE) set (_CMD) endif (${ARG} MATCHES PRE) endforeach (_ARG) if (_IGNOREOUT) set (COMMAND "(${PYTHON_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} > /dev/null)") else (_IGNOREOUT) set (TESTNAME_OUT ${TESTNAME_TGT}.expout) get_source_file_property (OUTFILE_LOC ${TESTNAME_OUT} LOCATION) set (OUTFILE_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_OUT}) set (COMMAND "(${PYTHON_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} ${REPLACE_EOL} > ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out) && diff -u ${OUTFILE_LOC} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out") endif (_IGNOREOUT) if (_PRE OR _POST) set (COMMAND "${_PRE}${COMMAND}${_POST}") endif (_PRE OR _POST) add_test (pyinstallcheck_${TESTNAME} "sh" "-c" "${COMMAND}") set_tests_properties (pyinstallcheck_${TESTNAME} PROPERTIES ENVIRONMENT "${PYINSTALLCHECK_ENVIRONMENT}") install (FILES ${TESTNAME_SRC} DESTINATION ${EXAMPLE_PATH} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE ) endmacro (ot_pyinstallcheck_test) ## Python post-installation tests # Common if (LIBXML2_FOUND) ot_pyinstallcheck_test (Object_pickle) endif () ot_pyinstallcheck_test (ComparisonOperator_std) if (LIBXML2_FOUND) ot_pyinstallcheck_test (Study_saveload) endif () ot_pyinstallcheck_test (Path_std IGNOREOUT) ot_pyinstallcheck_test (ResourceMap_std IGNOREOUT) ot_pyinstallcheck_test (Catalog_std IGNOREOUT) # Type ot_pyinstallcheck_test (Collection_std) ot_pyinstallcheck_test (Description_std) ot_pyinstallcheck_test (Indices_std) ot_pyinstallcheck_test (Point_std) ot_pyinstallcheck_test (Point_description) ot_pyinstallcheck_test (Matrix_std) ot_pyinstallcheck_test (SymmetricMatrix_lapack) ot_pyinstallcheck_test (SquareMatrix_lapack) ot_pyinstallcheck_test (SquareMatrix_std) ot_pyinstallcheck_test (TriangularMatrix_std) ot_pyinstallcheck_test (SymmetricMatrix_std) ot_pyinstallcheck_test (Tensor_std) ot_pyinstallcheck_test (ComplexTensor_std) ot_pyinstallcheck_test (SymmetricTensor_std) ot_pyinstallcheck_test (Matrix_solve) ot_pyinstallcheck_test (Matrix_decomposition) ot_pyinstallcheck_test (IdentityMatrix_std) ot_pyinstallcheck_test (RegularGrid_std) ot_pyinstallcheck_test (ComplexMatrix_std) ot_pyinstallcheck_test (SquareComplexMatrix_std) ot_pyinstallcheck_test (HermitianMatrix_std) ot_pyinstallcheck_test (TriangularComplexMatrix_std) ot_pyinstallcheck_test (Matrix_slice) ot_pyinstallcheck_test (Matrix_operators) if (NUMPY_FOUND) ot_pyinstallcheck_test (Matrix_numpy) endif () # Func ot_pyinstallcheck_test (SpecFunc_std) ot_pyinstallcheck_test (Function_std) ot_pyinstallcheck_test (ComposedFunction_std) ot_pyinstallcheck_test (Function_python) if (LIBXML2_FOUND) ot_pyinstallcheck_test (Function_python_saveload) endif () ot_pyinstallcheck_test (DatabaseFunction_std) ot_pyinstallcheck_test (Function_operations) ot_pyinstallcheck_test (ParametricFunction_std) if (R_base_FOUND) ot_pyinstallcheck_test (Function_draw) endif () ot_pyinstallcheck_test (Function_history) ot_pyinstallcheck_test (AggregatedEvaluation_std) ot_pyinstallcheck_test (SymbolicEvaluation_std) ot_pyinstallcheck_test (SymbolicGradient_std) ot_pyinstallcheck_test (SymbolicHessian_std) ot_pyinstallcheck_test (LinearFunction_std) ot_pyinstallcheck_test (LinearEvaluation_std) ot_pyinstallcheck_test (LinearCombinationEvaluation_std) ot_pyinstallcheck_test (LinearCombinationGradient_std) ot_pyinstallcheck_test (LinearCombinationHessian_std) ot_pyinstallcheck_test (PiecewiseLinearEvaluation_std) ot_pyinstallcheck_test (PiecewiseHermiteEvaluation_std) ot_pyinstallcheck_test (QuadraticFunction_std) ot_pyinstallcheck_test (QuadraticEvaluation_std) ot_pyinstallcheck_test (LinearGradient_std) ot_pyinstallcheck_test (AggregatedFunction_std) ot_pyinstallcheck_test (SymbolicFunction_std) ot_pyinstallcheck_test (DualLinearCombinationFunction_std) ot_pyinstallcheck_test (IndicatorFunction_std) ot_pyinstallcheck_test (LinearCombinationFunction_std) ot_pyinstallcheck_test (ConstantGradient_std) ot_pyinstallcheck_test (ConstantHessian_std) ot_pyinstallcheck_test (Basis_std) ot_pyinstallcheck_test (BasisSequence_std) ot_pyinstallcheck_test (LARS_std) ot_pyinstallcheck_test (FieldFunction_std) ot_pyinstallcheck_test (ValueFunction_std) ot_pyinstallcheck_test (VertexValueFunction_std) ot_pyinstallcheck_test (BoxCoxEvaluation_std) ot_pyinstallcheck_test (BoxCoxTransform_std) ot_pyinstallcheck_test (InverseBoxCoxEvaluation_std) ot_pyinstallcheck_test (InverseBoxCoxTransform_std) ot_pyinstallcheck_test (TrendEvaluation_std) ot_pyinstallcheck_test (TrendTransform_std) ot_pyinstallcheck_test (InverseTrendEvaluation_std) ot_pyinstallcheck_test (InverseTrendTransform_std) ot_pyinstallcheck_test (ExpertMixture_std) ot_pyinstallcheck_test (UniVariatePolynomial_std) ot_pyinstallcheck_test (BasisFactory_std) ot_pyinstallcheck_test (Field_std) ot_pyinstallcheck_test (MonomialFunction_std) ot_pyinstallcheck_test (MonomialFunctionFactory_std) ot_pyinstallcheck_test (TensorizedUniVariateFunctionFactory_std) # Stat ot_pyinstallcheck_test (Sample_std) ot_pyinstallcheck_test (Sample_computation) ot_pyinstallcheck_test (Sample_slice) ot_pyinstallcheck_test (Sample_split) ot_pyinstallcheck_test (Sample_large) ot_pyinstallcheck_test (Sample_bug14) ot_pyinstallcheck_test (Sample_csv) ot_pyinstallcheck_test (Sample_operators) ot_pyinstallcheck_test (HistoryStrategy_std) ot_pyinstallcheck_test (CovarianceMatrixLapack_std) ot_pyinstallcheck_test (CorrelationMatrix_std) if (R_rot_FOUND) ot_pyinstallcheck_test (LinearModel_std) ot_pyinstallcheck_test (LinearModelFactory_std) endif () ot_pyinstallcheck_test (Field_draw) ot_pyinstallcheck_test (ProcessSample_std) ot_pyinstallcheck_test (RandomGenerator_std) ot_pyinstallcheck_test (SobolSequence_std) ot_pyinstallcheck_test (FaureSequence_std) ot_pyinstallcheck_test (HaltonSequence_std) ot_pyinstallcheck_test (HaselgroveSequence_std) ot_pyinstallcheck_test (ReverseHaltonSequence_std) ot_pyinstallcheck_test (TestResult_std) ot_pyinstallcheck_test (CorrelationAnalysis_std) ot_pyinstallcheck_test (TimeSeries_std) ot_pyinstallcheck_test (ExponentialCauchy_std) ot_pyinstallcheck_test (FilteringWindows_std) ot_pyinstallcheck_test (WelchFactory_std) ot_pyinstallcheck_test (ExponentialModel_std) ot_pyinstallcheck_test (CovarianceModel_std) ot_pyinstallcheck_test (ExponentiallyDampedCosineModel_std) ot_pyinstallcheck_test (CauchyModel_std) ot_pyinstallcheck_test (SecondOrderModel_std) ot_pyinstallcheck_test (UserDefinedSpectralModel_std) ot_pyinstallcheck_test (UserDefinedCovarianceModel_std) ot_pyinstallcheck_test (UserDefinedStationaryCovarianceModel_std) ot_pyinstallcheck_test (StationaryCovarianceModelFactory_std) ot_pyinstallcheck_test (NonStationaryCovarianceModelFactory_std) if (HMAT_FOUND) ot_pyinstallcheck_test (HMatrix_std) endif () # Geom ot_pyinstallcheck_test (Domain_std) ot_pyinstallcheck_test (Interval_std) ot_pyinstallcheck_test (IntervalMesher_std) ot_pyinstallcheck_test (LevelSet_std) ot_pyinstallcheck_test (LevelSetMesher_std) ot_pyinstallcheck_test (Mesh_std) ## Graph if (R_base_FOUND) ot_pyinstallcheck_test (BarPlot_std) ot_pyinstallcheck_test (Cloud_std) ot_pyinstallcheck_test (Contour_std) ot_pyinstallcheck_test (Curve_std) ot_pyinstallcheck_test (Drawable_std) ot_pyinstallcheck_test (Graph_export) ot_pyinstallcheck_test (Graph_mix) ot_pyinstallcheck_test (Pairs_std) ot_pyinstallcheck_test (Pie_std) ot_pyinstallcheck_test (Polygon_std) ot_pyinstallcheck_test (PolygonArray_std) ot_pyinstallcheck_test (Staircase_std) ot_pyinstallcheck_test (Text_std) endif () ## Diff ot_pyinstallcheck_test (FiniteDifferenceStep_std) ot_pyinstallcheck_test (CenteredFiniteDifferenceGradient_std) ot_pyinstallcheck_test (CenteredFiniteDifferenceHessian_std) ot_pyinstallcheck_test (NonCenteredFiniteDifferenceGradient_std) ## Optim ot_pyinstallcheck_test (AbdoRackwitz_std) ot_pyinstallcheck_test (Cobyla_std) ot_pyinstallcheck_test (SQP_std) ot_pyinstallcheck_test (TNC_std) ot_pyinstallcheck_test (NearestPointChecker_std) if (NLOPT_FOUND) ot_pyinstallcheck_test (NLopt_std) endif () ot_pyinstallcheck_test (MultiStart_std) ot_pyinstallcheck_test (EfficientGlobalOptimization_std) ## Solver ot_pyinstallcheck_test (Brent_std) ot_pyinstallcheck_test (Bisection_std) ot_pyinstallcheck_test (Secant_std) ot_pyinstallcheck_test (RungeKutta_std) # Algo ot_pyinstallcheck_test (PenalizedLeastSquaresAlgorithm_std) ot_pyinstallcheck_test (KFold_std) ot_pyinstallcheck_test (CorrectedLeaveOneOut_std) ot_pyinstallcheck_test (KDTree_std) ot_pyinstallcheck_test (LeastSquaresMetaModelSelectionFactory_std) ot_pyinstallcheck_test (KissFFT_std) ot_pyinstallcheck_test (GaussKronrod_std) ot_pyinstallcheck_test (GaussLegendre_std) ot_pyinstallcheck_test (IteratedQuadrature_std) ot_pyinstallcheck_test (KarhunenLoeveP1Factory_std) ot_pyinstallcheck_test (DesignProxy_std) ot_pyinstallcheck_test (LeastSquaresMethod_std) ot_pyinstallcheck_test (KarhunenLoeveP1Algorithm_std) ot_pyinstallcheck_test (KarhunenLoeveSVDAlgorithm_std) ## Model ot_pyinstallcheck_test (Event_std) ot_pyinstallcheck_test (StandardEvent_std) ot_pyinstallcheck_test (Event_domain) ot_pyinstallcheck_test (RandomVector_constant) ot_pyinstallcheck_test (RandomVector_distribution) ot_pyinstallcheck_test (RandomVector_composite) ot_pyinstallcheck_test (RandomVector_conditional) ot_pyinstallcheck_test (RandomVector_python) ## Process ot_pyinstallcheck_test (WhiteNoise_std) ot_pyinstallcheck_test (RandomWalk_std) ot_pyinstallcheck_test (ARMAState_std) ot_pyinstallcheck_test (ARMACoefficients_std) ot_pyinstallcheck_test (ARMA_std) ot_pyinstallcheck_test (GaussianProcess_std) ot_pyinstallcheck_test (SpectralGaussianProcess_std) ot_pyinstallcheck_test (CompositeProcess_std) ot_pyinstallcheck_test (ARMALikelihoodFactory_std) ot_pyinstallcheck_test (FunctionalBasisProcess_std) ot_pyinstallcheck_test (WhittleFactory_std) ot_pyinstallcheck_test (ConditionedNormalProcess_std) ot_pyinstallcheck_test (KarhunenLoeveQuadratureFactory_std) ot_pyinstallcheck_test (KarhunenLoeveQuadratureAlgorithm_std) ## Transformation ot_pyinstallcheck_test (MarginalTransformationEvaluation_std) ot_pyinstallcheck_test (MarginalTransformationGradient_std) ot_pyinstallcheck_test (MarginalTransformationHessian_std) ot_pyinstallcheck_test (InverseNatafIndependentCopulaEvaluation_std) ot_pyinstallcheck_test (InverseNatafIndependentCopulaGradient_std) ot_pyinstallcheck_test (InverseNatafIndependentCopulaHessian_std) ot_pyinstallcheck_test (NatafIndependentCopulaEvaluation_std) ot_pyinstallcheck_test (NatafIndependentCopulaGradient_std) ot_pyinstallcheck_test (NatafIndependentCopulaHessian_std) ot_pyinstallcheck_test (IsoProbabilisticTransformation_EllipticalDistribution) ot_pyinstallcheck_test (IsoProbabilisticTransformation_EllipticalCopula) ot_pyinstallcheck_test (IsoProbabilisticTransformation_IndependentCopula) ot_pyinstallcheck_test (BoxCoxFactory_std) ot_pyinstallcheck_test (BoxCoxFactory_glm) ot_pyinstallcheck_test (TrendFactory_std) ot_pyinstallcheck_test (DistributionTransformation_std) ## Distribution ot_pyinstallcheck_test (AliMikhailHaqCopula_std) ot_pyinstallcheck_test (AliMikhailHaqCopulaFactory_std) ot_pyinstallcheck_test (Arcsine_std) ot_pyinstallcheck_test (ArcsineFactory_std) ot_pyinstallcheck_test (Bernoulli_std) ot_pyinstallcheck_test (BernoulliFactory_std) ot_pyinstallcheck_test (BernsteinCopulaFactory_std) ot_pyinstallcheck_test (Beta_std) ot_pyinstallcheck_test (BetaFactory_std) ot_pyinstallcheck_test (Binomial_std) ot_pyinstallcheck_test (BinomialFactory_std) ot_pyinstallcheck_test (Burr_std) ot_pyinstallcheck_test (BurrFactory_std) ot_pyinstallcheck_test (Chi_std) ot_pyinstallcheck_test (ChiFactory_std) ot_pyinstallcheck_test (ChiSquare_std) ot_pyinstallcheck_test (ChiSquareFactory_std) ot_pyinstallcheck_test (ClaytonCopula_std) ot_pyinstallcheck_test (ClaytonCopulaFactory_std) ot_pyinstallcheck_test (ComposedCopula_std) ot_pyinstallcheck_test (ComposedDistribution_std) ot_pyinstallcheck_test (ComposedDistribution_large) ot_pyinstallcheck_test (CompositeDistribution_std) ot_pyinstallcheck_test (ConditionalDistribution_std) ot_pyinstallcheck_test (CumulativeDistributionNetwork_std) ot_pyinstallcheck_test (Dirac_std) ot_pyinstallcheck_test (DiracFactory_std) ot_pyinstallcheck_test (Dirichlet_std) ot_pyinstallcheck_test (DirichletFactory_std) ot_pyinstallcheck_test (Epanechnikov_std) ot_pyinstallcheck_test (Exponential_std) ot_pyinstallcheck_test (ExponentialFactory_std) ot_pyinstallcheck_test (FarlieGumbelMorgensternCopula_std) ot_pyinstallcheck_test (FarlieGumbelMorgensternCopulaFactory_std) ot_pyinstallcheck_test (FrankCopula_std) ot_pyinstallcheck_test (FrankCopulaFactory_std) ot_pyinstallcheck_test (FisherSnedecor_std) ot_pyinstallcheck_test (FisherSnedecorFactory_std) ot_pyinstallcheck_test (Frechet_std) ot_pyinstallcheck_test (Gamma_std) ot_pyinstallcheck_test (GammaFactory_std) ot_pyinstallcheck_test (GeneralizedPareto_std) ot_pyinstallcheck_test (GeneralizedParetoFactory_std) ot_pyinstallcheck_test (Geometric_std) ot_pyinstallcheck_test (GeometricFactory_std) ot_pyinstallcheck_test (Gumbel_std) ot_pyinstallcheck_test (GumbelFactory_std) ot_pyinstallcheck_test (GumbelCopula_std) ot_pyinstallcheck_test (GumbelCopulaFactory_std) ot_pyinstallcheck_test (Histogram_std) ot_pyinstallcheck_test (HistogramFactory_std) ot_pyinstallcheck_test (IndependentCopula_std) ot_pyinstallcheck_test (InverseChiSquare_std) ot_pyinstallcheck_test (InverseGamma_std) ot_pyinstallcheck_test (InverseNormal_std) ot_pyinstallcheck_test (InverseNormalFactory_std) ot_pyinstallcheck_test (InverseWishart_std) ot_pyinstallcheck_test (KPermutationsDistribution_std) ot_pyinstallcheck_test (KernelMixture_std) ot_pyinstallcheck_test (KernelSmoothing_std) ot_pyinstallcheck_test (Laplace_std) ot_pyinstallcheck_test (LaplaceFactory_std) ot_pyinstallcheck_test (Logistic_std) ot_pyinstallcheck_test (LogisticFactory_std) ot_pyinstallcheck_test (LogNormal_std) ot_pyinstallcheck_test (LogNormalFactory_std) ot_pyinstallcheck_test (LogUniform_std) ot_pyinstallcheck_test (LogUniformFactory_std) ot_pyinstallcheck_test (OrderStatisticsMarginalChecker_std) #ot_pyinstallcheck_test (MarginalDistribution_std) ot_pyinstallcheck_test (MaximumEntropyOrderStatisticsDistribution_std) ot_pyinstallcheck_test (MaximumEntropyOrderStatisticsCopula_std) ot_pyinstallcheck_test (MaximumLikelihoodFactory_std) ot_pyinstallcheck_test (MeixnerDistribution_std) ot_pyinstallcheck_test (MeixnerDistributionFactory_std) ot_pyinstallcheck_test (MethodOfMomentsFactory_std) ot_pyinstallcheck_test (MinCopula_std) ot_pyinstallcheck_test (Mixture_std) ot_pyinstallcheck_test (Multinomial_std) ot_pyinstallcheck_test (MultinomialFactory_std) ot_pyinstallcheck_test (NegativeBinomial_std) ot_pyinstallcheck_test (NegativeBinomialFactory_std) ot_pyinstallcheck_test (NonCentralChiSquare_std) ot_pyinstallcheck_test (NonCentralStudent_std) ot_pyinstallcheck_test (Normal_std) ot_pyinstallcheck_test (NormalFactory_std) ot_pyinstallcheck_test (Normal_large) ot_pyinstallcheck_test (NormalCopula_std) ot_pyinstallcheck_test (NormalCopulaFactory_std) ot_pyinstallcheck_test (Normal_wrongarg) ot_pyinstallcheck_test (ParametrizedDistribution_std) ot_pyinstallcheck_test (Poisson_std) ot_pyinstallcheck_test (PoissonFactory_std) ot_pyinstallcheck_test (PosteriorDistribution_std) ot_pyinstallcheck_test (RandomMixture_std) ot_pyinstallcheck_test (RandomMixture_simplification) ot_pyinstallcheck_test (RandomMixture_grid1d) ot_pyinstallcheck_test (RandomMixture_grid2d) ot_pyinstallcheck_test (RandomMixture_grid3d) ot_pyinstallcheck_test (Rayleigh_std) ot_pyinstallcheck_test (RayleighFactory_std) ot_pyinstallcheck_test (Rice_std) ot_pyinstallcheck_test (RiceFactory_std) ot_pyinstallcheck_test (Skellam_std) ot_pyinstallcheck_test (SkellamFactory_std) ot_pyinstallcheck_test (SklarCopula_std) ot_pyinstallcheck_test (Student_std) ot_pyinstallcheck_test (StudentFactory_std) ot_pyinstallcheck_test (Trapezoidal_std) ot_pyinstallcheck_test (TrapezoidalFactory_std) ot_pyinstallcheck_test (Triangular_std) ot_pyinstallcheck_test (TriangularFactory_std) ot_pyinstallcheck_test (TruncatedDistribution_std) ot_pyinstallcheck_test (TruncatedNormal_std) ot_pyinstallcheck_test (TruncatedNormalFactory_std) ot_pyinstallcheck_test (Uniform_std) ot_pyinstallcheck_test (UniformFactory_std) ot_pyinstallcheck_test (UserDefined_std) ot_pyinstallcheck_test (UserDefinedFactory_std) ot_pyinstallcheck_test (VonMises_std) ot_pyinstallcheck_test (Weibull_std) ot_pyinstallcheck_test (WeibullFactory_std) ot_pyinstallcheck_test (Wishart_std) ot_pyinstallcheck_test (ZipfMandelbrot_std) ot_pyinstallcheck_test (DistributionParameters_std) ot_pyinstallcheck_test (DistFunc_beta) ot_pyinstallcheck_test (DistFunc_gamma) ot_pyinstallcheck_test (DistFunc_kfactor) ot_pyinstallcheck_test (DistFunc_kolmogorov) ot_pyinstallcheck_test (DistFunc_noncentralchisquare) ot_pyinstallcheck_test (DistFunc_noncentralstudent) ot_pyinstallcheck_test (DistFunc_normal) ot_pyinstallcheck_test (DistFunc_poisson) ot_pyinstallcheck_test (DistFunc_student) if (R_base_FOUND) ot_pyinstallcheck_test (Distribution_draw) endif () ot_pyinstallcheck_test (Distribution_python) ot_pyinstallcheck_test (Distribution_arithmetic) if (SCIPY_FOUND) ot_pyinstallcheck_test (Distribution_scipy) endif () ## Bayesian ot_pyinstallcheck_test (CalibrationStrategy_std) ot_pyinstallcheck_test (RandomWalkMetropolisHastings_std) ot_pyinstallcheck_test (RandomWalkMetropolisHastings_regression IGNOREOUT) ot_pyinstallcheck_test (PosteriorRandomVector_std) ## Classification ot_pyinstallcheck_test (MixtureClassifier_std) ## Experiments ot_pyinstallcheck_test (Axial_std) ot_pyinstallcheck_test (Box_std) ot_pyinstallcheck_test (Composite_std) ot_pyinstallcheck_test (Factorial_std) ot_pyinstallcheck_test (BootstrapExperiment_std) ot_pyinstallcheck_test (FixedExperiment_std) ot_pyinstallcheck_test (GaussProductExperiment_std) ot_pyinstallcheck_test (ImportanceSamplingExperiment_std) ot_pyinstallcheck_test (SpaceFilling_std) ot_pyinstallcheck_test (OptimalLHSExperiment_ishigami IGNOREOUT) ot_pyinstallcheck_test (OptimalLHSExperiment_std) ot_pyinstallcheck_test (MonteCarloLHS_std) ot_pyinstallcheck_test (SimulatedAnnealingLHS_std) ot_pyinstallcheck_test (LHSExperiment_std) ot_pyinstallcheck_test (LowDiscrepancyExperiment_std) ot_pyinstallcheck_test (MonteCarloExperiment_std) ot_pyinstallcheck_test (MinMax_computation) ot_pyinstallcheck_test (CombinatorialGenerator_std) ot_pyinstallcheck_test (Experiment_python) ## OrthogonalBasis ot_pyinstallcheck_test (LinearEnumerateFunction_std) ot_pyinstallcheck_test (HyperbolicAnisotropicEnumerateFunction_std) ot_pyinstallcheck_test (CharlierFactory_std) ot_pyinstallcheck_test (ChebychevFactory_std) ot_pyinstallcheck_test (HermiteFactory_std) ot_pyinstallcheck_test (HistogramPolynomialFactory_std) ot_pyinstallcheck_test (JacobiFactory_std) ot_pyinstallcheck_test (KrawtchoukFactory_std) ot_pyinstallcheck_test (LaguerreFactory_std) ot_pyinstallcheck_test (LegendreFactory_std) ot_pyinstallcheck_test (MeixnerFactory_std) ot_pyinstallcheck_test (SoizeGhanemFactory_std) ot_pyinstallcheck_test (OrthonormalizationAlgorithm_std) ot_pyinstallcheck_test (AdaptiveStieltjesAlgorithm_std) ot_pyinstallcheck_test (ChebychevAlgorithm_std) ot_pyinstallcheck_test (GramSchmidtAlgorithm_std) ot_pyinstallcheck_test (StandardDistributionPolynomialFactory_std) ot_pyinstallcheck_test (OrthogonalBasis_std) ot_pyinstallcheck_test (OrthogonalUniVariatePolynomialFunctionFactory_std) ot_pyinstallcheck_test (FourierSeriesFactory_std) ot_pyinstallcheck_test (HaarWaveletFactory_std) ## Algorithm ot_pyinstallcheck_test (TaylorExpansionMoments_std) ## Analytical ot_pyinstallcheck_test (Analytical_std) ot_pyinstallcheck_test (AnalyticalResult_std) ot_pyinstallcheck_test (FORM_std) if (R_base_FOUND) ot_pyinstallcheck_test (FORM_draw) endif () ot_pyinstallcheck_test (FORM_sensitivity) ot_pyinstallcheck_test (FORM_interval) ot_pyinstallcheck_test (SORM_std) ot_pyinstallcheck_test (StrongMaximumTest_std) ot_pyinstallcheck_test (StrongMaximumTest_other) ot_pyinstallcheck_test (StrongMaximumTest_tabulatedValues) ## MetaModel ot_pyinstallcheck_test (LinearTaylor_std) ot_pyinstallcheck_test (LinearLeastSquares_std) ot_pyinstallcheck_test (QuadraticLeastSquares_std) ot_pyinstallcheck_test (QuadraticTaylor_std) ot_pyinstallcheck_test (FunctionalChaos_ishigami) ot_pyinstallcheck_test (FunctionalChaos_ishigami_sparse) if (NOT MINGW)# FIXME: bad_alloc when run from Makefile with the new archive, ok from ctest ot_pyinstallcheck_test (FunctionalChaos_ishigami_database) endif () ot_pyinstallcheck_test (FunctionalChaos_gsobol) ot_pyinstallcheck_test (FunctionalChaos_gsobol_sparse) ot_pyinstallcheck_test (FunctionalChaos_nd) ot_pyinstallcheck_test (KrigingAlgorithm_std) ot_pyinstallcheck_test (KrigingRandomVector_std) ot_pyinstallcheck_test (MetaModelValidation_std) ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_std) if (HMAT_FOUND) ot_pyinstallcheck_test (KrigingAlgorithm_std_hmat) ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_std_hmat) endif () if (NLOPT_FOUND) ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_nlopt) endif () ot_pyinstallcheck_test (CanonicalTensorEvaluation_std IGNOREOUT) ot_pyinstallcheck_test (CanonicalTensorGradient_std IGNOREOUT) ot_pyinstallcheck_test (TensorApproximationAlgorithm_std) ## Sensitivity ot_pyinstallcheck_test (ANCOVA_std) ot_pyinstallcheck_test (FAST_std) ot_pyinstallcheck_test (SobolIndicesAlgorithm_std) ## Simulation ot_pyinstallcheck_test (Wilks_std) ot_pyinstallcheck_test (SimulationSensitivityAnalysis_std) ot_pyinstallcheck_test (MonteCarlo_std) if (R_base_FOUND) ot_pyinstallcheck_test (MonteCarlo_draw) endif () ot_pyinstallcheck_test (MonteCarlo_sensitivity) ot_pyinstallcheck_test (QuasiMonteCarlo_std) ot_pyinstallcheck_test (RandomizedQuasiMonteCarlo_std) ot_pyinstallcheck_test (LHS_std) ot_pyinstallcheck_test (RandomizedLHS_std) ot_pyinstallcheck_test (ImportanceSampling_std) ot_pyinstallcheck_test (DirectionalSampling_std) ot_pyinstallcheck_test (PostAnalyticalControlledImportanceSampling_std) ot_pyinstallcheck_test (SubsetSampling_R-S) ot_pyinstallcheck_test (SubsetSampling_Waarts_system_series) ot_pyinstallcheck_test (AdaptiveDirectionalSampling_flood) ot_pyinstallcheck_test (AdaptiveDirectionalSampling_hyperplane) ot_pyinstallcheck_test (AdaptiveDirectionalSampling_std) ## StatTests if (R_rot_FOUND) ot_pyinstallcheck_test (VisualTest_std) ot_pyinstallcheck_test (FittingTest_std) ot_pyinstallcheck_test (HypothesisTest_std) ot_pyinstallcheck_test (HypothesisTest_correlation) ot_pyinstallcheck_test (NormalityTest_std) ot_pyinstallcheck_test (LinearModelTest_std) endif () ot_pyinstallcheck_test (DickeyFullerTest_std) ## Waarts ot_pyinstallcheck_test (Waarts_25_quadratic_terms) # ot_pyinstallcheck_test (Waarts_concave) # ot_pyinstallcheck_test (Waarts_convex) # ot_pyinstallcheck_test (Waarts_discontinuous_lsf) # ot_pyinstallcheck_test (Waarts_noisy_lsf) # ot_pyinstallcheck_test (Waarts_RS2) ot_pyinstallcheck_test (Waarts_system_series) ot_pyinstallcheck_test (Waarts_saddle) ## Misc if (NBSPHINX_FOUND) # depends on nbconvert, nbformat ot_pyinstallcheck_test (notebook IGNOREOUT) endif () if (MATPLOTLIB_FOUND) ot_pyinstallcheck_test (Viewer IGNOREOUT) endif () ot_pyinstallcheck_test (features IGNOREOUT) # FIXME: check_get_line_col fails through wine on newer native version if (NOT WIN32) ot_pyinstallcheck_test (coupling_tools) endif () if (MUPARSER_FOUND AND MATPLOTLIB_FOUND AND SCIPY_FOUND AND R_rot_FOUND AND NLOPT_FOUND) # on py3k/swig<3.0.0, doctest fails with "NameError: Unknown C global variable" if (PYTHON_VERSION_MAJOR VERSION_EQUAL "2" OR SWIG_VERSION VERSION_GREATER "3") # source modules file (GLOB modules ${PROJECT_SOURCE_DIR}/python/src/*.py) # swig modules foreach (module ${OPENTURNS_PYTHON_MODULES}) list (APPEND modules ${PROJECT_BINARY_DIR}/python/src/${module}.py) endforeach () foreach (module ${modules}) get_filename_component (module_name ${module} NAME_WE) add_test (pyinstallcheck_docstring_${module_name} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/t_docstring.py ${module}) set_tests_properties (pyinstallcheck_docstring_${module_name} PROPERTIES ENVIRONMENT "${PYINSTALLCHECK_ENVIRONMENT}") endforeach() endif () endif () add_custom_target (pyinstallcheck COMMAND ${CMAKE_CTEST_COMMAND} -R "^pyinstallcheck_" COMMENT "Run Python post-installation tests") add_dependencies (installcheck pyinstallcheck) openturns-1.9/python/test/t_ANCOVA_std.expout000066400000000000000000000003721307543307100213370ustar00rootroot00000000000000ANCOVA index 0 = 0.41107658 absolute error=0.0040177641 ANCOVA uncorrelated index 0 = 0.29867971 absolute error=0.0032070869 ANCOVA index 1 = 0.58892342 absolute error=0.0040177641 ANCOVA uncorrelated index 1 = 0.47652655 absolute error=0.0048284413 openturns-1.9/python/test/t_ANCOVA_std.py000077500000000000000000000045121307543307100204460ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: RandomGenerator.SetSeed(0) # Problem parameters inputDimension = 2 outputDimension = 1 rho = 0.3 a = 4. b = 5. # Reference analytical values covTh = a * a + b * b + 2 * a * b * rho Si = [[(a * a + a * b * rho) / covTh, a * a / covTh], [(b * b + a * b * rho) / covTh, b * b / covTh]] # Model inputName = ["X1", "X2", "a", "b"] formula = ["a * X1 + b * X2"] full = SymbolicFunction(inputName, formula) model = ParametricFunction(full, [2, 3], [a, b]) # Input distribution distribution = ComposedDistribution([Normal()] * inputDimension) # Correlated input distribution S = CorrelationMatrix(inputDimension) S[1, 0] = 0.3 R = NormalCopula().GetCorrelationFromSpearmanCorrelation(S) myCopula = NormalCopula(R) myCorrelatedInputDistribution = ComposedDistribution( [Normal()] * inputDimension, myCopula) sample = myCorrelatedInputDistribution.getSample(2000) # Orthogonal basis enumerateFunction = EnumerateFunction(inputDimension) productBasis = OrthogonalProductPolynomialFactory( [HermiteFactory()] * inputDimension, enumerateFunction) # Adaptive strategy adaptiveStrategy = FixedStrategy( productBasis, enumerateFunction.getStrataCumulatedCardinal(4)) # Projection strategy samplingSize = 250 projectionStrategy = LeastSquaresStrategy( MonteCarloExperiment(samplingSize)) # Polynomial chaos algorithm algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) algo.run() # Post-process the results result = FunctionalChaosResult(algo.getResult()) ancova = ANCOVA(result, sample) indices = ancova.getIndices() uncorrelatedIndices = ancova.getUncorrelatedIndices() for i in range(inputDimension): value = indices[i] print("ANCOVA index", i, "= %.8f" % value, "absolute error=%.10f" % fabs(value - Si[i][0])) value = uncorrelatedIndices[i] print("ANCOVA uncorrelated index", i, "= %.8f" % value, "absolute error=%.10f" % fabs(value - Si[i][1])) except: import sys print("t_ANCOVA_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ARMACoefficients_std.expout000066400000000000000000000051331307543307100234320ustar00rootroot00000000000000Using default constructor coefficients0 = Using constructor based on size / dimension coefficients1 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] SquareMatrix collection = [class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4],class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12],class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667]] Using constructor based on a collection coefficients2 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4], shift=1, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12], shift=2, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.666667,1.33333,2,2.66667] Using Point constructor coefficients3 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1], shift=1, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2], shift=2, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3], shift=3, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4] Using polynomial constructor coefficients4 = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2], shift=1, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4], shift=2, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6], shift=3, value=class=SquareMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[8] openturns-1.9/python/test/t_ARMACoefficients_std.py000077500000000000000000000043431307543307100225430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Constructor with size dimension = 2 squareMatrix1 = SquareMatrix(dimension) squareMatrix1[0, 0] = 1. squareMatrix1[1, 0] = 2. squareMatrix1[0, 1] = 3. squareMatrix1[1, 1] = 4. # Second matrix to add to the ARMACoefficients s = 3. squareMatrix2 = squareMatrix1 * s # Second matrix to add to the ARMACoefficients t = 1.5 squareMatrix3 = squareMatrix1 / t # size : Number of matrix size = 3 # ARMACoefficients with default constructor coefficients0 = ARMACoefficients() print("Using default constructor ") print("coefficients0 = ", coefficients0) # ARMACoefficients with size / dimension constructor coefficients1 = ARMACoefficients(size, dimension) coefficients1[0] = squareMatrix1 coefficients1[1] = squareMatrix2 coefficients1[2] = squareMatrix3 print("Using constructor based on size / dimension ") print("coefficients1 = ", repr(coefficients1)) # constructors with collection of matrix myCollection = SquareMatrixCollection() myCollection.add(squareMatrix1) myCollection.add(squareMatrix2) myCollection.add(squareMatrix3) print("SquareMatrix collection = ", repr(myCollection)) coefficients2 = ARMACoefficients(myCollection) # print of the new collection print("Using constructor based on a collection ") print("coefficients2 = ", repr(coefficients2)) # 1D case point = Point(dimension * dimension, 0.0) point[0] = 1. point[1] = 2. point[2] = 3. point[3] = 4. # ARMACoefficients Point constructor coefficients3 = ARMACoefficients(point) # print of the new collection print("Using Point constructor ") print("coefficients3 = ", repr(coefficients3)) # ARMACoefficients with polynomial constructor point *= 2.0 poly = UniVariatePolynomial(point) coefficients4 = ARMACoefficients(poly) # print of the new collection print("Using polynomial constructor ") print("coefficients4 = ", repr(coefficients4)) except: import sys print("t_ARMACoefficients_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ARMALikelihoodFactory_std.expout000066400000000000000000000006231307543307100244430ustar00rootroot00000000000000factory= class=ARMALikelihoodFactory implementation=class= ARMAFactoryImplementation p=[2] current p=2 q=[1] current q=1 invertible=true dimension=2 original process = ARMA(X_{0,t} - 0.5 X_{0,t-1} - 0.1 X_{1,t-1} = E_{0,t} - 0.4 E_{0,t-1} X_{1,t} - 0.4 X_{0,t-1} - 0.5 X_{1,t-1} - 0.25 X_{0,t-2} = E_{1,t} - 0.4 E_{1,t-1}, E_t ~ Normal(mu = [0,0], sigma = [0.316228,0.447214], R = [[ 1 0 ] [ 0 1 ]])) openturns-1.9/python/test/t_ARMALikelihoodFactory_std.py000077500000000000000000000036761307543307100235650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * # ARMA(p, q) p = 2 q = 1 dimension = 2 # ARMACoefficients intializing # Overwide bug 471 ResourceMap.SetAsScalar('BoxCox-RootEpsilon', 1.0e-6) # Make a realization of an ARMA model # Tmin , Tmax and N points for TimeGrid dt = 1.0 size = 400 timeGrid = RegularGrid(0.0, dt, size) # Fixing the distributions for the WhiteNoise sigma = 0.1 cov = CovarianceMatrix(dimension) cov[0, 0] = sigma cov[1, 1] = 2.0 * sigma whiteNoiseDistribution = Normal(Point(dimension, 0.0), cov) # Building a process from a White Noise whiteNoise = WhiteNoise(whiteNoiseDistribution) whiteNoise.setTimeGrid(timeGrid) arCoefficients = SquareMatrixCollection(p) maCoefficients = SquareMatrixCollection(q) alpha = SquareMatrix(dimension) alpha[0, 0] = -0.5 alpha[0, 1] = -0.1 alpha[1, 0] = -0.4 alpha[1, 1] = -0.5 arCoefficients[0] = alpha alpha[0, 0] = 0.0 alpha[0, 1] = 0.0 alpha[1, 0] = -0.25 alpha[1, 1] = 0.0 arCoefficients[1] = alpha alpha[0, 0] = -0.4 alpha[0, 1] = 0.0 alpha[1, 0] = 0.0 alpha[1, 1] = -0.4 maCoefficients[0] = alpha phi = ARMACoefficients(arCoefficients) theta = ARMACoefficients(maCoefficients) # ARMA model creation myARMA = ARMA(phi, theta, whiteNoise) # Create a realization timeSeries = TimeSeries(myARMA.getRealization()) cov[0, 0] += 0.01 * DistFunc.rNormal() cov[1, 1] += 0.01 * DistFunc.rNormal() for k in range(p): for j in range(dimension): for i in range(dimension): alpha[i, j] = 0.01 * DistFunc.rNormal() phi[k] = phi[k] + alpha # for k in range(q): for j in range(dimension): for i in range(dimension): alpha[i, j] = 0.01 * DistFunc.rNormal() theta[k] = theta[k] + alpha factory = ARMALikelihoodFactory(p, q, dimension) print('factory=', factory) factory.setInitialConditions(phi, theta, cov) result = ARMA(factory.build(timeSeries)) print('original process = ', myARMA) # print('Estimated ARMA= ', result) openturns-1.9/python/test/t_ARMAState_std.expout000066400000000000000000000016421307543307100221120ustar00rootroot00000000000000Last values = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] Last noise values = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.629877],[0.882805],[0.135276],[0.0325028]] ARMAState with default constructor = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] ARMAState = class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[1],[3],[5],[7],[9],[11]] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.629877],[0.882805],[0.135276],[0.0325028]] openturns-1.9/python/test/t_ARMAState_std.py000077500000000000000000000022161307543307100212170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Constructor with size dim = 1 p = 6 q = 4 lastValues = Sample(p, dim) lastNoiseValues = Sample(q, dim) for j in range(dim): # Fill the AR-part (the last p-coefficients X_{-1}, X{-2},..., X_{-p}) for i in range(p): lastValues[i, j] = 2.0 * i + 3.0 * j + 1.0 # Fill the MA-part (the last p-coefficients \epsilon_{-1}, # \epsilon_{-2},..., \epsilon_{-p}) for i in range(q): lastNoiseValues[i, j] = RandomGenerator.Generate() # Print the initial state of the ARMA : coefficients print("Last values = ", repr(lastValues)) print("Last noise values = ", repr(lastNoiseValues)) # default constructor myDefaultState = ARMAState() print("ARMAState with default constructor = ", repr(myDefaultState)) # standard constructor myState = ARMAState(lastValues, lastNoiseValues) print("ARMAState = ", repr(myState)) except: import sys print("t_ARMAState_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ARMA_std.expout000066400000000000000000000056721307543307100211200ustar00rootroot00000000000000coefficientsP = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.2,0.3,0.7,0.4] coefficientsQ = class=ARMACoefficients, shift=0, value=class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.1,0,0,0.5] dist = ComposedDistribution(Normal(mu = 0, sigma = 0.01), Normal(mu = 0, sigma = 0.02), IndependentCopula(dimension = 2)) Last values of the process = 0 : [ 0.629877 0.135276 ] Last innovations of the process = 0 : [ 0.882805 0.0325028 ] process = ARMA(X_{0,t} + 0.2 X_{0,t-1} + 0.7 X_{1,t-1} = E_{0,t} + 0.1 E_{0,t-1} X_{1,t} + 0.3 X_{0,t-1} + 0.4 X_{1,t-1} = E_{1,t} + 0.5 E_{1,t-1}, E_t ~ ComposedDistribution(Normal(mu = 0, sigma = 0.01), Normal(mu = 0, sigma = 0.02), IndependentCopula(dimension = 2))) ARMA process = ARMA(X_{0,t} + 0.2 X_{0,t-1} + 0.7 X_{1,t-1} = E_{0,t} + 0.1 E_{0,t-1} X_{1,t} + 0.3 X_{0,t-1} + 0.4 X_{1,t-1} = E_{1,t} + 0.5 E_{1,t-1}, E_t ~ ComposedDistribution(Normal(mu = 0, sigma = 0.01), Normal(mu = 0, sigma = 0.02), IndependentCopula(dimension = 2))) ARMA process with ARMAstate = ARMA(X_{0,t} + 0.2 X_{0,t-1} + 0.7 X_{1,t-1} = E_{0,t} + 0.1 E_{0,t-1} X_{1,t} + 0.3 X_{0,t-1} + 0.4 X_{1,t-1} = E_{1,t} + 0.5 E_{1,t-1}, E_t ~ ComposedDistribution(Normal(mu = 0, sigma = 0.01), Normal(mu = 0, sigma = 0.02), IndependentCopula(dimension = 2))) One realization= [ t X0 X1 ] 0 : [ 0 0.010204 -0.00744086 ] 1 : [ 0.1 -0.00287281 -0.0293307 ] 2 : [ 0.2 0.0190836 -0.00416576 ] 3 : [ 0.3 0.000428186 -0.0133922 ] 4 : [ 0.4 0.0226688 -0.0154754 ] 5 : [ 0.5 0.0156377 -0.00180096 ] 6 : [ 0.6 -0.00152644 0.0220058 ] 7 : [ 0.7 -0.0290278 -0.000953817 ] 8 : [ 0.8 0.00341936 -0.0137703 ] 9 : [ 0.9 0.00530122 -0.00738418 ] 10 : [ 1 -0.0161936 0.0111398 ] One future= [ t v0 v1 ] 0 : [ 1.1 -0.00486985 0.0088404 ] 1 : [ 1.2 -0.0213829 0.0140495 ] 2 : [ 1.3 -0.0034992 0.00524708 ] 3 : [ 1.4 0.0067867 -0.00506869 ] Some futures= [field 0: [ t v0 v1 ] 0 : [ 1.1 -1.82364e-05 0.0156951 ] 1 : [ 1.2 -0.0150433 -0.0192013 ] 2 : [ 1.3 0.0304955 0.00743803 ] 3 : [ 1.4 -0.00879671 -0.0355234 ] field 1: [ t v0 v1 ] 0 : [ 1.1 -0.0129397 -0.00706455 ] 1 : [ 1.2 0.013426 -0.0179524 ] 2 : [ 1.3 -0.00898944 0.00403051 ] 3 : [ 1.4 -0.00677231 0.00868747 ] field 2: [ t v0 v1 ] 0 : [ 1.1 -0.00500545 -0.0157516 ] 1 : [ 1.2 0.0236257 0.0301551 ] 2 : [ 1.3 -0.0128599 -0.00625936 ] 3 : [ 1.4 -0.00239186 0.000610274 ]] openturns-1.9/python/test/t_ARMA_std.py000077500000000000000000000057311307543307100202230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # 2 D case RandomGenerator.SetSeed(0) # Matrices of the process dim = 2 squareMatrix1 = SquareMatrix(dim) squareMatrix1[0, 0] = 0.2 squareMatrix1[1, 0] = 0.3 squareMatrix1[0, 1] = 0.7 squareMatrix1[1, 1] = 0.4 # Second matrix to add to the ARMACoefficients squareMatrix2 = SquareMatrix(dim) squareMatrix2[0, 0] = 0.1 squareMatrix2[1, 0] = 0. squareMatrix2[0, 1] = 0. squareMatrix2[1, 1] = 0.5 # ARMA(p, q) p = 1 q = 1 # AR coefficients coefficientsP = ARMACoefficients(p, dim) coefficientsP[0] = squareMatrix1 # MA coefficients coefficientsQ = ARMACoefficients(p, dim) coefficientsQ[0] = squareMatrix2 print("coefficientsP = ", repr(coefficientsP)) print("coefficientsQ = ", repr(coefficientsQ)) # Time grid creation and White Noise Tmin = 0.0 deltaT = 0.1 steps = 11 # Initialization of the TimeGrid timeGrid1 timeGrid = RegularGrid(Tmin, deltaT, steps) # Distributions for the choice dist1 = Distribution(Normal(0.0, 0.01)) dist2 = Distribution(Normal(0.0, 0.02)) # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(dist1) aCollection.add(dist2) dist = Distribution(ComposedDistribution(aCollection)) print("dist = ", dist) epsilon = WhiteNoise(dist) # Setting the timeGrid epsilon.setTimeGrid(timeGrid) # Last coefficients values lastValues = Sample(p, dim) lastNoiseValues = Sample(q, dim) # for j in range(dim): # Fill the AR-part (the last p-coefficients X_{-1}, X{-2},..., X_{-p}) for i in range(p): lastValues[i, j] = RandomGenerator.Generate() # Fill the MA-part (the last p-coefficients \epsilon_{-1}, # \epsilon_{-2},..., \epsilon_{-p}) for i in range(q): lastNoiseValues[i, j] = RandomGenerator.Generate() # Print the initial state of the ARMA : coefficients print("Last values of the process = ", lastValues) print("Last innovations of the process = ", lastNoiseValues) # ARMAState creation # instanciation of timeGrid state = ARMAState(lastValues, lastNoiseValues) process = Process(ARMA(coefficientsP, coefficientsQ, epsilon)) process2 = ARMA(coefficientsP, coefficientsQ, epsilon) process3 = ARMA(coefficientsP, coefficientsQ, epsilon, state) print("process = ", process) print("ARMA process = ", process2) print("ARMA process with ARMAstate = ", process3) # Test realization print("One realization=", process2.getRealization()) # Some steps further stepNumber = 4 print("One future=", process2.getFuture(stepNumber)) size = 3 print("Some futures=", process2.getFuture(stepNumber, size)) except: import sys print("t_ARMA_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_AbdoRackwitz_std.expout000066400000000000000000000107541307543307100227610ustar00rootroot00000000000000myGradient = class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] result = class=OptimizationResult optimal point=class=Point name=Unnamed dimension=4 values=[0.1,0.2,-0.3,0.4] optimal value=class=Point name=Unnamed dimension=1 values=[3] iterationNumber=1 absoluteError=0.547723 relativeError=1 residualError=0 constraintError=0 lagrangeMultipliers=class=Point name=Unnamed dimension=1 values=[-0.1] problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 myGradient = class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] myalgorithm= class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=-0.5 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result = class=OptimizationResult optimal point=class=Point name=Unnamed dimension=4 values=[-0.0460242,-0.0133336,0.144901,-0.0266672] optimal value=class=Point name=Unnamed dimension=1 values=[-0.499998] iterationNumber=4 absoluteError=0.00141914 relativeError=0.00915986 residualError=0 constraintError=2.48235e-06 lagrangeMultipliers=class=Point name=Unnamed dimension=1 values=[0.0461761] problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=-0.5 bounds=none minimization=true dimension=4 evaluation calls number= 26 gradient calls number= 0 hessian calls number= 0 openturns-1.9/python/test/t_AbdoRackwitz_std.py000077500000000000000000000030341307543307100220610ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1+2*x2-3*x3+4*x4"]) # Add a finite difference gradient to the function, as Abdo Rackwitz algorithm # needs it myGradient = ot.NonCenteredFiniteDifferenceGradient( 1e-7, levelFunction.getEvaluation()) print("myGradient = ", repr(myGradient)) # Substitute the gradient levelFunction.setGradient( ot.NonCenteredFiniteDifferenceGradient(myGradient)) startingPoint = [0.0] * 4 algo = ot.AbdoRackwitz(ot.OptimizationProblem(levelFunction, 3.0)) algo.setStartingPoint(startingPoint) algo.run() print("result = ", algo.getResult()) levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4"]) # Add a finite difference gradient to the function, as Abdo Rackwitz algorithm # needs it myGradient = ot.NonCenteredFiniteDifferenceGradient( 1e-7, levelFunction.getEvaluation()) print("myGradient = ", repr(myGradient)) # Substitute the gradient levelFunction.setGradient( ot.NonCenteredFiniteDifferenceGradient(myGradient)) startingPoint = [0.0] * 4 algo = ot.AbdoRackwitz(ot.OptimizationProblem(levelFunction, -0.5)) algo.setStartingPoint(startingPoint) print("myalgorithm=", repr(algo)) algo.run() print("result = ", algo.getResult()) print("evaluation calls number=", levelFunction.getEvaluationCallsNumber()) print("gradient calls number=", levelFunction.getGradientCallsNumber()) print("hessian calls number=", levelFunction.getHessianCallsNumber()) openturns-1.9/python/test/t_AdaptiveDirectionalSampling_flood.expout000066400000000000000000000007611307543307100263110ustar00rootroot00000000000000-------------------- model flood S < 0.0 gamma= f( [1219.24,30.0003,50,55] )= [-3.1061] probabilityEstimate=1.256345e-02 varianceEstimate=1.574316e-06 standard deviation=1.25e-03 coefficient of variation=9.99e-02 confidenceLength(0.95)=4.92e-03 outerSampling=7880 blockSize=1 probabilityEstimate=1.206711e-02 varianceEstimate=7.474442e-09 standard deviation=8.65e-05 coefficient of variation=7.16e-03 confidenceLength(0.95)=3.39e-04 outerSampling=988 blockSize=1 callsNumber=18595 gamma=[0.5,0.5] openturns-1.9/python/test/t_AdaptiveDirectionalSampling_flood.py000077500000000000000000000042541307543307100254210ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot import math as m dim = 4 def flood_model(X): L = 5000. # m B = 300. # m Q = X[0] # m^3.s^-1 Ks = X[1] # m^1/3.s^-1 Zv = X[2] # m Zm = X[3] # m Hd = 0. # m Zb = 55.5 # m S = Zv + (Q / (Ks * B * m.sqrt((Zm - Zv) / L))) ** (3. / 5) - (Hd + Zb) return [S] function = ot.PythonFunction(dim, 1, flood_model) Q_law = ot.TruncatedDistribution( ot.Gumbel(1.0 / 558.0, 1013.0), 0.0, ot.TruncatedDistribution.LOWER) # alpha=1/b, beta=a | you can use Gumbel(a, b, Gumbel.AB) starting from OT 1.2 Ks_law = ot.TruncatedDistribution( ot.Normal(30.0, 7.5), 0., ot.TruncatedDistribution.LOWER) Zv_law = ot.Triangular(49., 50., 51.) Zm_law = ot.Triangular(54., 55., 56.) coll = ot.DistributionCollection([Q_law, Ks_law, Zv_law, Zm_law]) distribution = ot.ComposedDistribution(coll) x = list(map(lambda dist: dist.computeQuantile(0.5)[0], coll)) fx = function(x) for k in [0.0, 2.0, 5.0, 8.][0:1]: randomVector = ot.RandomVector(distribution) composite = ot.RandomVector(function, randomVector) print('--------------------') print('model flood S <', k, 'gamma=', end=' ') print('f(', ot.Point(x), ')=', fx) event = ot.Event(composite, ot.Greater(), k) for n in [100, 1000, 5000][1:2]: for gamma1 in [0.25, 0.5, 0.75][1:2]: algo = ot.MonteCarlo(event) algo.setMaximumOuterSampling(100 * n) # algo.setMaximumCoefficientOfVariation(-1.) algo.run() result = algo.getResult() print(result) algo = ot.AdaptiveDirectionalSampling(event) algo.setMaximumOuterSampling(n) algo.setGamma([gamma1, 1.0 - gamma1]) calls0 = function.getEvaluationCallsNumber() algo.run() calls = function.getEvaluationCallsNumber() - calls0 result = algo.getResult() pf = result.getProbabilityEstimate() var = result.getVarianceEstimate() cov = result.getCoefficientOfVariation() print(result, end=' ') print('callsNumber=%d' % calls + ' gamma=' + str(algo.getGamma())) openturns-1.9/python/test/t_AdaptiveDirectionalSampling_hyperplane.expout000066400000000000000000000015121307543307100273500ustar00rootroot00000000000000-------------------- model H0 dim=5 pft=1.00e-06 k=-10.629 probabilityEstimate=8.726674e-07 varianceEstimate=1.599283e-17 standard deviation=4.00e-09 coefficient of variation=4.58e-03 confidenceLength(0.95)=1.57e-08 outerSampling=978 blockSize=1 callsNumber=14147 gamma=[0.5,0.5] -------------------- model H1 dim=5 pft=1.00e-06 k=-9.58083 probabilityEstimate=1.003733e-06 varianceEstimate=5.854253e-17 standard deviation=7.65e-09 coefficient of variation=7.62e-03 confidenceLength(0.95)=3.00e-08 outerSampling=977 blockSize=1 callsNumber=16621 gamma=[0.5,0.5] -------------------- model H2 dim=5 pft=1.00e-06 k=-4.75342 probabilityEstimate=3.772515e-07 varianceEstimate=1.426490e-16 standard deviation=1.19e-08 coefficient of variation=3.17e-02 confidenceLength(0.95)=4.68e-08 outerSampling=974 blockSize=1 callsNumber=15911 gamma=[0.5,0.5] openturns-1.9/python/test/t_AdaptiveDirectionalSampling_hyperplane.py000077500000000000000000000051611307543307100264630ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot import math as m def hyperplane(coefs): """ Generate a linear NMF from its coefficients """ dim = len(coefs) constant = [0.] center = [0.] * len(coefs) linear = ot.Matrix(1, dim) for i in range(dim): linear[0, i] = coefs[i] function = ot.LinearFunction(center, constant, linear) return function for dim in [3, 5, 8][1:2]: functions = [] linears = [] linear = [1.] * dim linears.append(linear) function = hyperplane(linear) function.setName('H1') functions.append(function) linear = list(linear) linear[0] = 0.25 linears.append(linear) function = hyperplane(linear) function.setName('H2') functions.append(function) linear = list(linear) linear = [0.] * dim linear[dim - 1] = 1. linears.append(linear) function = hyperplane(linear) function.setName('H3') functions.append(function) for ih in range(len(functions)): function = functions[ih] distribution = ot.Normal(dim) randomVector = ot.RandomVector(distribution) composite = ot.RandomVector(function, randomVector) for pft in [1e-4, 1e-6, 1e-8][1:2]: k = ot.Normal().computeQuantile(pft)[ 0] * ot.Point(linears[ih]).norm() event = ot.Event(composite, ot.Less(), k) print('--------------------') print('model H' + str(ih) + ' dim=%d' % dim, 'pft=%.2e' % pft, 'k=%g' % k) for n in [100, 1000][1:]: for gamma1 in [0.25, 0.5, 0.75][1:2]: # algo = ot.MonteCarlo(event) # algo.setMaximumOuterSampling(100*n) # algo.setMaximumCoefficientOfVariation(-1.) # algo.run() # result = algo.getResult() # print result algo = ot.AdaptiveDirectionalSampling(event) algo.setMaximumOuterSampling(n) algo.setGamma([gamma1, 1.0 - gamma1]) calls0 = function.getEvaluationCallsNumber() algo.run() calls = function.getEvaluationCallsNumber() - calls0 result = algo.getResult() pf = result.getProbabilityEstimate() var = result.getVarianceEstimate() cov = result.getCoefficientOfVariation() print(result, end=' ') print('callsNumber=%d' % calls + ' gamma=' + str(algo.getGamma())) openturns-1.9/python/test/t_AdaptiveDirectionalSampling_std.expout000066400000000000000000000011411307543307100257710ustar00rootroot00000000000000probabilityEstimate=2.786587e-03 varianceEstimate=2.620335e-11 standard deviation=5.12e-06 coefficient of variation=1.84e-03 confidenceLength(0.95)=2.01e-05 outerSampling=9997 blockSize=1 T= [0.022501,0.0463237,0.00428766,0.0381024] probabilityEstimate=6.950006e-03 varianceEstimate=3.723692e-11 standard deviation=6.10e-06 coefficient of variation=8.78e-04 confidenceLength(0.95)=2.39e-05 outerSampling=9997 blockSize=1 probabilityEstimate=2.529982e-03 varianceEstimate=1.822549e-11 standard deviation=4.27e-06 coefficient of variation=1.69e-03 confidenceLength(0.95)=1.67e-05 outerSampling=9998 blockSize=1 openturns-1.9/python/test/t_AdaptiveDirectionalSampling_std.py000077500000000000000000000016411307543307100251050ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot # create a function dim = 4 function = ot.Function( ['E', 'F', 'L', 'I'], ['d'], ['F*L^3/(3.*E*I)']) # create a distribution distribution = ot.Normal( [50., 1.0, 10.0, 5.0], [1.0] * dim, ot.IdentityMatrix(dim)) vect = ot.RandomVector(distribution) composite = ot.RandomVector(function, vect) event = ot.Event(composite, ot.Less(), -3.0) # create an ADS algorithm n = int(1e4) algo = ot.AdaptiveDirectionalSampling(event) algo.setMaximumOuterSampling(n) algo.setGamma([0.6, 0.4]) algo.run() result = algo.getResult() print(result) # ADS-2+ algo2 = algo algo2.setPartialStratification(True) algo2.run() print('T=', algo2.getTStatistic()) result = algo2.getResult() print(result) # DPADS-2 algo3 = algo2 algo3.setQuadrantOrientation([1.] * dim) # enables DPADS-2, sets design algo3.run() result = algo3.getResult() print(result) openturns-1.9/python/test/t_AdaptiveStieltjesAlgorithm_std.expout000066400000000000000000000025321307543307100256630ustar00rootroot00000000000000class=AdaptiveStieltjesAlgorithm measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=true Uniform Reference( 0 )= [1.732,0,0] Uniform AdaStielj( 0 )= [1.732,0,0] Uniform Reference( 1 )= [1.9364,0,-1.118] Uniform AdaStielj( 1 )= [1.9364,0,-1.118] Uniform Reference( 2 )= [1.972,0,-1.0183] Uniform AdaStielj( 2 )= [1.972,0,-1.0183] Uniform Reference( 3 )= [1.9843,0,-1.0062] Uniform AdaStielj( 3 )= [1.9843,0,-1.0062] Uniform Reference( 4 )= [1.9899,0,-1.0028] Uniform AdaStielj( 4 )= [1.9899,0,-1.0028] class=AdaptiveStieltjesAlgorithm measure=class=Beta name=Beta dimension=1 r=0.5 t=3 a=-1 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0.666667,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=false Beta Reference( 0 )= [2.6832,1.7888,0] Beta AdaStielj( 0 )= [2.6832,1.7888,0] Beta Reference( 1 )= [2.1821,0.2909,-0.8132] Beta AdaStielj( 1 )= [2.1821,0.2909,-0.8132] Beta Reference( 2 )= [2.0869,0.1192,-0.9563] Beta AdaStielj( 2 )= [2.0869,0.1192,-0.9563] Beta Reference( 3 )= [2.0512,0.0651,-0.9828] Beta AdaStielj( 3 )= [2.0512,0.0651,-0.9828] Beta Reference( 4 )= [2.0339,0.041,-0.9915] Beta AdaStielj( 4 )= [2.0339,0.041,-0.9915] openturns-1.9/python/test/t_AdaptiveStieltjesAlgorithm_std.py000077500000000000000000000025641307543307100247770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: def clean(inPoint): dim = inPoint.getDimension() for i in range(dim): if abs(inPoint[i]) < 1.e-10: inPoint[i] = 0.0 else: inPoint[i] = 1e-4 * int(1e4 * inPoint[i]) return inPoint iMax = 5 # First test distribution = Uniform() algo0 = LegendreFactory() algo1 = AdaptiveStieltjesAlgorithm(distribution) print(algo1) for i in range(iMax): print(distribution.getClassName() + " Reference(", i, ")=", clean(algo0.getRecurrenceCoefficients(i))) print(distribution.getClassName() + " AdaStielj(", i, ")=", clean(algo1.getRecurrenceCoefficients(i))) # Second test distribution = Beta(0.5, 3.0, -1.0, 1.0) algo0 = JacobiFactory(0.5, 3.0, 1) algo1 = AdaptiveStieltjesAlgorithm(distribution) print(algo1) for i in range(iMax): print(distribution.getClassName() + " Reference(", i, ")=", clean(algo0.getRecurrenceCoefficients(i))) print(distribution.getClassName() + " AdaStielj(", i, ")=", clean(algo1.getRecurrenceCoefficients(i))) except: import sys print("t_AdaptiveStieltjesAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_AggregatedEvaluation_std.expout000066400000000000000000000003761307543307100244560ustar00rootroot00000000000000evaluation= [[x0,x1,x2]->[x0^2+2*x1+3*x2^3],[x0,x1,x2]->[cos(x0*sin(x2+x1)),exp(x1 - x0 * sin(x2))]] function 1 at [4.0, -4.0, 1.0] = [11] function 2 at [4.0, -4.0, 1.0] = [0.844867,0.000632466] evaluation at [4.0, -4.0, 1.0] = [11,0.844867,0.000632466] openturns-1.9/python/test/t_AggregatedEvaluation_std.py000077500000000000000000000010521307543307100235550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * function1 = Function( ["x0", "x1", "x2"], ["y0"], ["x0^2+2*x1+3*x2^3"]) function2 = Function(["x0", "x1", "x2"], [ "z0", "z1"], ["cos(x0*sin(x2+x1))", "exp(x1 - x0 * sin(x2))"]) evaluation = AggregatedEvaluation( [function1, function2]) print("evaluation=", evaluation) point = [4.0, -4.0, 1.0] print("function 1 at", point, "=", function1(point)) print("function 2 at", point, "=", function2(point)) print("evaluation at", point, "=", evaluation(point)) openturns-1.9/python/test/t_AggregatedFunction_std.expout000066400000000000000000000035631307543307100241350ustar00rootroot00000000000000myFunction= [[x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],[x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1),exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)]] Value at [1.2,2.3,3.4] = [-2.67038,-13.1757,8.17969,-0.00142562] Gradient at [1.2,2.3,3.4] = [[ -4.79497 16.1934 -53.1316 0.000407664 ] [ -0.893127 -4.67213 106.867 0.0043079 ] [ -0.311467 -3.48031 87.1119 0.00392597 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ -7.222 -0.99874 -1.797 ] [ -0.99874 1.5358 4.5394 ] [ -1.797 4.5394 10.178 ]] sheet #1 [[ -10.759 4.5955 5.2391 ] [ 4.5955 -0.81967 -0.81967 ] [ 5.2391 -0.81967 -0.95953 ]] sheet #2 [[ 497.28 -1219.7 -915.82 ] [ -1219.7 3155.2 2362.4 ] [ -915.82 2362.4 1732.7 ]] sheet #3 [[ -0.018954 0.0043086 -0.007232 ] [ 0.0043086 -0.014647 -0.0084823 ] [ -0.007232 -0.0084823 -0.013158 ]] Marginal 0 = [[x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]] Marginal 1 = [[x1,x2,x3]->[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal 2 = [[x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] Marginal 3 = [[x1,x2,x3]->[exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)]] Marginal (0,1)= [[x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2),x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)]] Marginal (0,2)= [[x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)],[x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] Marginal (1,2)= [[x1,x2,x3]->[x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)],[x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]] openturns-1.9/python/test/t_AggregatedFunction_std.py000066400000000000000000000021611307543307100232320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # First, build two functions from R^3->R^2 functions = list() functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], [ 'x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)', 'x1^1 * sin(x3 + 2.5 * x1) - (x2 + x3)^2 / (1.0 + x1^2)'])) functions.append(ot.SymbolicFunction(['x1', 'x2', 'x3'], [ 'exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)', 'exp(-x2 * x3 + x1) / cos(1.0 + x3 * x1 - x2)'])) # Second, build the function myFunction = ot.AggregatedFunction(functions) inPoint = ot.Point([1.2, 2.3, 3.4]) print('myFunction=', myFunction) print('Value at ', inPoint, '=', myFunction(inPoint)) print('Gradient at ', inPoint, '=', myFunction.gradient(inPoint)) ot.PlatformInfo.SetNumericalPrecision(5) print('Hessian at ', inPoint, '=', myFunction.hessian(inPoint)) for i in range(myFunction.getOutputDimension()): print('Marginal ', i, '=', myFunction.getMarginal(i)) print('Marginal (0,1)=', myFunction.getMarginal([0, 1])) print('Marginal (0,2)=', myFunction.getMarginal([0, 2])) print('Marginal (1,2)=', myFunction.getMarginal([1, 2])) openturns-1.9/python/test/t_AggregatedProcess_std.expout000066400000000000000000000026351307543307100237650ustar00rootroot00000000000000myAntecedentProcess = ARMA process dimension = 1 X_{0,t} = E_{0,t} with E_t ~ Normal(mu = 0, sigma = 1) myCompositeProcess = class=CompositeProcess function=class=FieldFunction name=Unnamed implementation=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[2 * x + 5.0] antecedent=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed description=[] implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed description=[] implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] One realization= [ y0 ] 0 : [ 0 0.63723 ] 1 : [ 0.1 5.70008 ] 2 : [ 0.2 4.28999 ] 3 : [ 0.3 7.8745 ] 4 : [ 0.4 6.62134 ] 5 : [ 0.5 6.58631 ] 6 : [ 0.6 4.05895 ] 7 : [ 0.7 5.52204 ] 8 : [ 0.8 0.419876 ] 9 : [ 0.9 2.43423 ] 10 : [ 1 2.37644 ] openturns-1.9/python/test/t_AggregatedProcess_std.py000077500000000000000000000022411307543307100230650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Time grid creation Tmin = 0.0 deltaT = 0.1 steps = 11 # Initialization of the time grid timeGrid1 timeGrid = RegularGrid(Tmin, deltaT, steps) # Default aggregated process creation myProcess = AggregatedProcess() # We fix the time grid to the process myProcess.setTimeGrid(timeGrid) print("myProcess=", myProcess) print("a realization=", myProcess.getRealization()) marginalProcess = myProcess.getMarginal(0) print("a marginal process=", marginalProcess) # Parameter aggregated process creation coll = [WhiteNoise(), ARMA(), GaussianProcess()] myProcess = AggregatedProcess(coll) myProcess.setTimeGrid(timeGrid) print("myProcess=", myProcess) print("a realization=", myProcess.getRealization()) marginalProcess = myProcess.getMarginal(1) print("a marginal process=", marginalProcess) print("another marginal process=", myProcess.getMarginal([0, 2])) except: import sys print("t_AggregatedProcess_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_AliMikhailHaqCopulaFactory_std.expout000066400000000000000000000010651307543307100255220ustar00rootroot00000000000000distribution= class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Estimated distribution= class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.433481 Default distribution= AliMikhailHaqCopula(theta = 0.5) Distribution from parameters= AliMikhailHaqCopula(theta = 0.5) Distribution = AliMikhailHaqCopula(theta = 0.5) Estimated AliMikhailHaqCopula= AliMikhailHaqCopula(theta = 0.433481) Default AliMikhailHaqCopula= AliMikhailHaqCopula(theta = 0.5) AliMikhailHaqCopula from parameters= AliMikhailHaqCopula(theta = 0.5) openturns-1.9/python/test/t_AliMikhailHaqCopulaFactory_std.py000077500000000000000000000024751307543307100246370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = AliMikhailHaqCopula(0.5) size = 1000 sample = distribution.getSample(size) factory = AliMikhailHaqCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedAliMikhailHaqCopula = factory.buildAsAliMikhailHaqCopula(sample) print("Distribution =", distribution) print("Estimated AliMikhailHaqCopula=", estimatedAliMikhailHaqCopula) estimatedAliMikhailHaqCopula = factory.buildAsAliMikhailHaqCopula() print("Default AliMikhailHaqCopula=", estimatedAliMikhailHaqCopula) estimatedAliMikhailHaqCopula = factory.buildAsAliMikhailHaqCopula( distribution.getParameter()) print("AliMikhailHaqCopula from parameters=", estimatedAliMikhailHaqCopula) except: import sys print("t_AliMikhailHaqFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_AliMikhailHaqCopula_std.expout000066400000000000000000000053401307543307100241720ustar00rootroot00000000000000Copula class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 Copula AliMikhailHaqCopula(theta = 0.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0160319,0.0160319,0.0833333] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= class=Point name=Unnamed dimension=2 values=[0.629877,0.895761] oneSample= class=Sample name=AliMikhailHaqCopula implementation=class=SampleImplementation name=AliMikhailHaqCopula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.0211783],[0.347057,0.964145],[0.92068,0.606772],[0.0632061,0.189429],[0.714382,0.449122],[0.373767,0.713037],[0.883503,0.393905],[0.92851,0.86981],[0.684575,0.852794],[0.359802,0.947852]] anotherSample mean= class=Point name=Unnamed dimension=2 values=[0.502777,0.500292] anotherSample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0166341,0.0166341,0.0832656] Point = class=Point name=Unnamed dimension=2 values=[0.2,0.2] pdf=1.208528 cdf=0.058824 Quantile= class=Point name=Unnamed dimension=2 values=[0.689898,0.689898] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=2 values=[0.025625,0.025625] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0126791, 0.987321] [0.0126791, 0.987321] threshold= [0.974642] Minimum volume level set= {x | f(x) <= 0.339383} with f= MinimumVolumeLevelSetEvaluation(AliMikhailHaqCopula(theta = 0.5)) beta= [0.71221] Bilateral confidence interval= [0.0126791, 0.987321] [0.0126791, 0.987321] beta= [0.974642] Unilateral confidence interval (lower tail)= [0, 0.974521] [0, 0.974521] beta= [0.974521] Unilateral confidence interval (upper tail)= [0.025625, 1] [0.025625, 1] beta= [0.974375] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.294088] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.47206] indices= [1,0] margins= class=AliMikhailHaqCopula name=AliMikhailHaqCopula dimension=2 theta=0.5 margins PDF=1.136188 margins CDF=0.086957 margins quantile= class=Point name=Unnamed dimension=2 values=[0.974521,0.974521] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.196586,0.527995] openturns-1.9/python/test/t_AliMikhailHaqCopula_std.py000077500000000000000000000076141307543307100233070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 copula = AliMikhailHaqCopula(0.5) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", repr(copula.getMean())) print("Covariance ", repr(copula.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) print("Point = ", repr(point), " pdf=%.6f" % pointPDF, " cdf=%.6f" % pointCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = Point(margins.computeQuantile(0.95)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) except: import sys print("t_AliMikhailHaqCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_AnalyticalResult_std.expout000066400000000000000000000132741307543307100236550ustar00rootroot00000000000000result= class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=4 values=[1,1,1,1] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[51,2,11,6] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=2 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] standard space design point= [1.000000,1.000000,1.000000,1.000000] physical space design point= [51.000000,2.000000,11.000000,6.000000] is standard point origin in failure space? False importance factors= [0.250000,0.250000,0.250000,0.250000] importance factors(classical)= [0.250000,0.250000,0.250000,0.250000] importance factors(physical) = [0.001091,0.709134,0.210983,0.078793] Hasofer reliability index=2.00000 graph importance factors= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Design Point - Unnamed xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 25.0%,X1 : 25.0%,X2 : 25.0%,X3 : 25.0%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#ccff00,#00ff66,#0066ff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.25],[0.25],[0.25],[0.25]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] graph sensitivity= [class=Graph name=Sensitivity implementation=class=GraphImplementation name=Sensitivity title=Hasofer Reliability Index Sensitivities - Marginal parameters - Unnamed xTitle=parameters yTitle=sensitivities axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=X0 [mean_0,standard_deviation_0] implementation=class=BarPlot name=X0 [mean_0,standard_deviation_0] origin=0 derived from class=DrawableImplementation name=X0 [mean_0,standard_deviation_0] legend=X0 [mean_0,standard_deviation_0] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.0330236],[1,0.0330236]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X1 [mean_1,standard_deviation_1] implementation=class=BarPlot name=X1 [mean_1,standard_deviation_1] origin=3 derived from class=DrawableImplementation name=X1 [mean_1,standard_deviation_1] legend=X1 [mean_1,standard_deviation_1] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,-0.842101],[1,-0.842101]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X2 [mean_2,standard_deviation_2] implementation=class=BarPlot name=X2 [mean_2,standard_deviation_2] origin=6 derived from class=DrawableImplementation name=X2 [mean_2,standard_deviation_2] legend=X2 [mean_2,standard_deviation_2] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,-0.459328],[1,-0.459328]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=X3 [mean_3,standard_deviation_3] implementation=class=BarPlot name=X3 [mean_3,standard_deviation_3] origin=9 derived from class=DrawableImplementation name=X3 [mean_3,standard_deviation_3] legend=X3 [mean_3,standard_deviation_3] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0.2807],[1,0.2807]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1],class=Graph name=Sensitivity implementation=class=GraphImplementation name=Sensitivity title=Hasofer Reliability Index Sensitivities - Other parameters - Unnamed xTitle=parameters yTitle=sensitivities axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] implementation=class=BarPlot name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] origin=0 derived from class=DrawableImplementation name=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] legend=dependence [R_1_0,R_2_0,R_2_1,R_3_0,R_3_1,R_3_2] data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[1,0],[1,0],[1,0],[1,0],[1,0],[1,0]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1]] openturns-1.9/python/test/t_AnalyticalResult_std.py000077500000000000000000000046041307543307100227610ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if fabs(point[i]) < eps: oss += sep + '%.6f' % fabs(point[i]) else: oss += sep + '%.6f' % point[i] sep = "," oss += "]" return oss try: # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) mean[0] = 50.0 # E mean[1] = 1.0 # F mean[2] = 10.0 # L mean[3] = 5.0 # I sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create an AnalyticalResult based on fictive results result = AnalyticalResult(sigma, myEvent, False) print("result=", result) digits = 5 print("standard space design point=", printPoint( result.getStandardSpaceDesignPoint(), digits)) print("physical space design point=", printPoint( result.getPhysicalSpaceDesignPoint(), digits)) print("is standard point origin in failure space? ", result.getIsStandardPointOriginInFailureSpace()) print("importance factors=", printPoint( result.getImportanceFactors(), digits)) print("importance factors(classical)=", printPoint( result.getImportanceFactors(AnalyticalResult.CLASSICAL), digits)) print("importance factors(physical) =", printPoint( result.getImportanceFactors(AnalyticalResult.PHYSICAL), digits)) print("Hasofer reliability index=%.5f" % result.getHasoferReliabilityIndex()) print("graph importance factors=", result.drawImportanceFactors()) print("graph sensitivity=", result.drawHasoferReliabilityIndexSensitivity()) except: import sys print("t_AnalyticalResult_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Analytical_std.expout000066400000000000000000000216001307543307100224460ustar00rootroot00000000000000myCobyla= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 Analytical= class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] physical starting point= [50,1,10,5] event= class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 nearest point algorithm= class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 result= class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[50,1,10,5] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=true hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] result= class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=4 values=[-0.0310354,0.841942,0.445404,-0.332238] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[49.969,1.84194,10.4454,4.66776] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.00925 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] openturns-1.9/python/test/t_Analytical_std.py000077500000000000000000000035451307543307100215650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) mean[0] = 50.0 # E mean[1] = 1.0 # F mean[2] = 10.0 # L mean[3] = 5.0 # I sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create an OptimizationAlgorithm algorithm myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(400) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) print("myCobyla=", myCobyla) # We create a Analytical algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myAlgo = Analytical(myCobyla, myEvent, mean) print("Analytical=", myAlgo) print("physical starting point=", myAlgo.getPhysicalStartingPoint()) print("event=", myAlgo.getEvent()) print("nearest point algorithm=", myAlgo.getNearestPointAlgorithm()) print("result=", myAlgo.getAnalyticalResult()) myAlgo.run() print("result=", myAlgo.getAnalyticalResult()) except: import sys print("t_Analytical_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ArcsineFactory_std.expout000066400000000000000000000006561307543307100233110ustar00rootroot00000000000000distribution= class=Arcsine name=Arcsine dimension=1 a=1 b=2.5 Estimated distribution= class=Arcsine name=Arcsine dimension=1 a=1.00127 b=2.51039 Default distribution= Arcsine(a = -1, b = 1) Distribution from parameters= Arcsine(a = 1, b = 2.5) Arcsine = Arcsine(a = 1, b = 2.5) Estimated Arcsine= Arcsine(a = 1.00127, b = 2.51039) Default Arcsine= Arcsine(a = -1, b = 1) Arcsine from parameters= Arcsine(a = 1, b = 2.5) openturns-1.9/python/test/t_ArcsineFactory_std.py000077500000000000000000000021151307543307100224100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) distribution = Arcsine(1., 2.5) size = 10000 sample = distribution.getSample(size) factory = ArcsineFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) # non-regression for #572 mydist = ArcsineFactory().build(distribution.getSample(10)) myde = MonteCarloExperiment(mydist, 10) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedArcsine = factory.buildAsArcsine(sample) print("Arcsine =", distribution) print("Estimated Arcsine=", estimatedArcsine) estimatedArcsine = factory.buildAsArcsine() print("Default Arcsine=", estimatedArcsine) estimatedArcsine = factory.buildAsArcsine( distribution.getParameter()) print("Arcsine from parameters=", estimatedArcsine) openturns-1.9/python/test/t_Arcsine_std.expout000066400000000000000000000053501307543307100217550ustar00rootroot00000000000000Distribution class=Arcsine name=Arcsine dimension=1 a=5.2 b=11.6 Distribution Arcsine(a = 5.2, b = 11.6) Mean= class=Point name=Unnamed dimension=1 values=[8.4] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.12] Elliptical = True oneRealization= class=Point name=Unnamed dimension=1 values=[9.66973] oneSample first= class=Point name=Unnamed dimension=1 values=[11.3856] last= class=Point name=Unnamed dimension=1 values=[7.65026] mean= class=Point name=Unnamed dimension=1 values=[8.42467] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.18235] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf = class=Point name=Unnamed dimension=1 values=[0.00731882] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0.00731882] log pdf=-2.283364 pdf =0.101941 pdf (FD)=0.101941 cdf=0.570198 ccdf=0.429802 pdf gradient = class=Point name=Unnamed dimension=2 values=[0.0130693,-0.0203881] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0130693,-0.0203881] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0398206,-0.0621201] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0398206,-0.0621201] quantile= class=Point name=Unnamed dimension=1 values=[11.5606] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[5.2394] Survival(inverseSurvival)=0.950000 Minimum volume interval= [5.20986, 11.5901] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.30479} with f= MinimumVolumeLevelSetEvaluation(Arcsine(a = 5.2, b = 11.6)) beta= [0.0997794] Bilateral confidence interval= [5.20986, 11.5901] beta= [0.95] Unilateral confidence interval (lower tail)= [5.2, 11.5606] beta= [0.95] Unilateral confidence interval (upper tail)= [5.2394, 11.6] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[8.4] standard deviation= class=Point name=Unnamed dimension=1 values=[2.26274] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[1.5] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.12] parameters= [class=PointWithDescription name=X0 dimension=2 description=[a,b] values=[5.2,11.6]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [0.5] standard moment n= 3 value= [0] standard moment n= 4 value= [0.375] standard moment n= 5 value= [0] Standard representative= Arcsine(a = -1, b = 1) openturns-1.9/python/test/t_Arcsine_std.py000077500000000000000000000126551307543307100210720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) # Instanciate one distribution object distribution = Arcsine(5.2, 11.6) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print("Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 9.1) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 max = distribution.getB() + distribution.getA() min = distribution.getB() - distribution.getA() # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF(point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) openturns-1.9/python/test/t_Axial_std.expout000066400000000000000000000013711307543307100214260ustar00rootroot00000000000000myPlane = class=Axial name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Axial plane implementation=class=SampleImplementation name=Axial plane size=25 dimension=4 data=[[0.5,1.5,2.5,3.5],[4.5,1.5,2.5,3.5],[-3.5,1.5,2.5,3.5],[0.5,5.5,2.5,3.5],[0.5,-2.5,2.5,3.5],[0.5,1.5,6.5,3.5],[0.5,1.5,-1.5,3.5],[0.5,1.5,2.5,7.5],[0.5,1.5,2.5,-0.5],[8.5,1.5,2.5,3.5],[-7.5,1.5,2.5,3.5],[0.5,9.5,2.5,3.5],[0.5,-6.5,2.5,3.5],[0.5,1.5,10.5,3.5],[0.5,1.5,-5.5,3.5],[0.5,1.5,2.5,11.5],[0.5,1.5,2.5,-4.5],[16.5,1.5,2.5,3.5],[-15.5,1.5,2.5,3.5],[0.5,17.5,2.5,3.5],[0.5,-14.5,2.5,3.5],[0.5,1.5,18.5,3.5],[0.5,1.5,-13.5,3.5],[0.5,1.5,2.5,19.5],[0.5,1.5,2.5,-12.5]] openturns-1.9/python/test/t_Axial_std.py000077500000000000000000000011071307543307100205320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: center = Point(4, 0.0) center.setName("center") center[0] = 0.5 center[1] = 1.5 center[2] = 2.5 center[3] = 3.5 levels = Point(3, 0.0) levels.setName("levels") levels[0] = 4 levels[1] = 8 levels[2] = 16 myPlane = Axial(center, levels) print("myPlane = ", myPlane) sample = myPlane.generate() print("sample = ", repr(sample)) except: import sys print("t_Axial_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BarPlot_std.expout000066400000000000000000000000001307543307100217170ustar00rootroot00000000000000openturns-1.9/python/test/t_BarPlot_std.py000077500000000000000000000036541307543307100210500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 1 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 R = CorrelationMatrix(dim) distribution1 = Normal(meanPoint, sigma, R) # Instanciate another distribution object meanPoint[0] = -1.5 sigma[0] = 4.0 distribution2 = Normal(meanPoint, sigma, R) # Test for sampling size = 2000 nBars = 20 sample1 = distribution1.getSample(size) sample2 = distribution2.getSample(size) # Construct histograms epsilon = 0.1 min1 = sample1.getMin()[0] max1 = sample1.getMax()[0] + epsilon min2 = sample2.getMin()[0] max2 = sample2.getMax()[0] + epsilon tmp = Point(2) tmp[0] = (max1 - min1) / nBars data1 = Sample(nBars, tmp) tmp[0] = (max2 - min2) / nBars data2 = Sample(nBars, tmp) for i in range(size): index = int(floor((sample1[i, 0] - min1) / (max1 - min1) * nBars)) data1[index, 1] += 1 index = int(floor((sample2[i, 0] - min2) / (max2 - min2) * nBars)) data2[index, 1] += 1 # Create an empty graph myGraph = Graph("Some barplots", "y", "frequency", True, "topleft") # Create the first barplot myBarPlot1 = BarPlot(data1, min1, "blue", "shaded", "dashed", "histogram1") # Then, draw it myGraph.add(myBarPlot1) myGraph.draw("Graph_BarPlot_a_OT.png") # Check that the correct files have been generated by computing their # checksum # Create the second barplot myBarPlot2 = BarPlot(data2, min2, "red", "solid", "solid", "histogram2") # Add it to the graph and draw everything myGraph.add(myBarPlot2) myGraph.draw("Graph_BarPlot_b_OT.png") except: import sys print("t_BarPlot_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BasisFactory_std.expout000066400000000000000000000023131307543307100227560ustar00rootroot00000000000000x= [2,3] factory= class=ConstantBasisFactory name=Unnamed basis= Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]]] ) y= [1] factory= class=LinearBasisFactory name=Unnamed basis= Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 1 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 0 ] [ 1 ]]] ) y= [1,2,3] factory= class=QuadraticBasisFactory name=Unnamed basis= Basis( [class=LinearEvaluation name=Unnamed center=[0,0] constant=[1] linear=[[ 0 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 1 ] [ 0 ]],class=LinearEvaluation name=Unnamed center=[0,0] constant=[0] linear=[[ 0 ] [ 1 ]],QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 1 0 ] [ 0 0 ]] ,QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 0 1 ] [ 1 0 ]] ,QuadraticEvaluation center : [0,0] constant : [0] linear : [[ 0 ] [ 0 ]] quadratic : sheet #0 [[ 0 0 ] [ 0 1 ]] ] ) y= [1,2,3,2,6,4.5] openturns-1.9/python/test/t_BasisFactory_std.py000077500000000000000000000016671307543307100221000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 2 x = Point(inputDimension) for i in range(inputDimension): x[i] = 2. + i print("x=", x) factory = ConstantBasisFactory(inputDimension) print("factory=", factory) basis = factory.build() print("basis=", basis) f = AggregatedFunction(basis) y = f(x) print("y=", y) factory = LinearBasisFactory(inputDimension) print("factory=", factory) basis = factory.build() print("basis=", basis) f = AggregatedFunction(basis) y = f(x) print("y=", y) factory = QuadraticBasisFactory(inputDimension) print("factory=", factory) basis = factory.build() print("basis=", basis) f = AggregatedFunction(basis) y = f(x) print("y=", y) except: import sys print("t_BasisFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BasisSequence_std.expout000066400000000000000000000001331307543307100231150ustar00rootroot00000000000000sequence = class=BasisSequenceImplementation collection=[] masterBasis=class=Basis coll=[] openturns-1.9/python/test/t_BasisSequence_std.py000077500000000000000000000004511307543307100222270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: b = Basis() seq = BasisSequence(b) print("sequence =", seq) except: import sys print("t_BasisSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Basis_std.expout000066400000000000000000000001561307543307100214310ustar00rootroot00000000000000basis = Basis( [] ) basis = Basis( [[x]->[x^1],[x]->[x^2],[x]->[x^3]] ) 3 [[x]->[x^2],[x]->[x^3]] False False openturns-1.9/python/test/t_Basis_std.py000077500000000000000000000014101307543307100205320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from math import * ot.TESTPREAMBLE() try: basis = ot.Basis() print('basis =', basis) basisSize = 3 phis = [] for j in range(basisSize): phis.append(ot.Function(['x'], ['y'], ['x^' + str(j + 1)])) basis = ot.Basis(phis) print('basis =', basis) print(basis.getSize()) print(basis.getSubBasis([1, 2])) print(basis.isFunctional()) print(basis.isOrthogonal()) # print(basis[1]) # print(basis[0:2]) # basis[1] = ot.Function(['x'], ['z'], ['x^42']) # print('basis =', basis) # basis[0:2] = basis[1:3] # print('basis =', basis) except: import sys print("t_Basis_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BernoulliFactory_std.expout000066400000000000000000000011001307543307100236410ustar00rootroot00000000000000distribution= class=Bernoulli name=Bernoulli dimension=1 p=0.7 Estimated distribution= class=Bernoulli name=Bernoulli dimension=1 p=0.6916 Default distribution= Bernoulli(p = 0.5) Distribution from parameters= Bernoulli(p = 0.7) Bernoulli = Bernoulli(p = 0.7) Estimated Bernoulli= Bernoulli(p = 0.6916) Default Bernoulli= Bernoulli(p = 0.5) Bernoulli from parameters= Bernoulli(p = 0.7) Estimated distribution = class=Bernoulli name=Bernoulli dimension=1 p=0.6916 Parameter distribution = RandomMixture(0.0001 * Binomial(n = 10000, p = 0.6916)) openturns-1.9/python/test/t_BernoulliFactory_std.py000077500000000000000000000027251307543307100227660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Bernoulli(0.7) size = 10000 sample = distribution.getSample(size) factory = BernoulliFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedBernoulli = factory.buildAsBernoulli(sample) print("Bernoulli =", distribution) print("Estimated Bernoulli=", estimatedBernoulli) estimatedBernoulli = factory.buildAsBernoulli() print("Default Bernoulli=", estimatedBernoulli) estimatedBernoulli = factory.buildAsBernoulli( distribution.getParameter()) print("Bernoulli from parameters=", estimatedBernoulli) result = factory.buildEstimator(sample) estimatedDistribution = result.getDistribution() print('Estimated distribution =', repr(estimatedDistribution)) parameterDistribution = result.getParameterDistribution() print('Parameter distribution =', parameterDistribution) except: import sys print("t_BernoulliFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Bernoulli_std.expout000066400000000000000000000026671307543307100223340ustar00rootroot00000000000000Distribution class=Bernoulli name=Bernoulli dimension=1 p=0.7 Distribution Bernoulli(p = 0.7) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[1] oneSample first= class=Point name=Unnamed dimension=1 values=[0] last= class=Point name=Unnamed dimension=1 values=[1] mean= class=Point name=Unnamed dimension=1 values=[0.6916] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.213311] Point= class=Point name=Unnamed dimension=1 values=[0] pdf =0.300000 pdf (FD)=0.300000 cdf=0.300000 quantile= class=Point name=Unnamed dimension=1 values=[1] cdf(quantile)=1.000000 mean= class=Point name=Unnamed dimension=1 values=[0.7] standard deviation= class=Point name=Unnamed dimension=1 values=[0.458258] skewness= class=Point name=Unnamed dimension=1 values=[-0.872872] kurtosis= class=Point name=Unnamed dimension=1 values=[13.7619] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.21] parameters= [class=PointWithDescription name=X0 dimension=1 description=[p] values=[0.7]] standard moment n= 0 value= [0] standard moment n= 1 value= [0.7] standard moment n= 2 value= [0.7] standard moment n= 3 value= [0.7] standard moment n= 4 value= [0.7] standard moment n= 5 value= [0.7] Standard representative= Bernoulli(p = 0.7) probabilities= [0.3,0.7] openturns-1.9/python/test/t_Bernoulli_std.py000077500000000000000000000047671307543307100214460ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Bernoulli(0.7) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 0.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) print("probabilities=", distribution.getProbabilities()) except: import sys print("t_Bernoulli.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BernsteinCopulaFactory_std.expout000066400000000000000000000002641307543307100250150ustar00rootroot00000000000000Reference copula GumbelCopula(theta = 3) Max. error=0.03963 Reference copula ClaytonCopula(theta = 3) Max. error=0.03785 Reference copula FrankCopula(theta = 3) Max. error=0.01740 openturns-1.9/python/test/t_BernsteinCopulaFactory_std.py000077500000000000000000000015261307543307100241260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: coll = [GumbelCopula(3.0), ClaytonCopula(3.0), FrankCopula(3.0)] size = 1000 for i in range(len(coll)): ref_copula = coll[i] print("Reference copula", str(ref_copula)) sample = ref_copula.getSample(size) est_copula = BernsteinCopulaFactory().build(sample) max_error = 0.0 for m in range(11): for n in range(11): point = [0.1 * m, 0.1 * n] max_error = max(max_error, abs(ref_copula.computeCDF( point) - est_copula.computeCDF(point))) print("Max. error=%.5f" % max_error) except: import sys print("t_BernsteinCopulaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BetaFactory_std.expout000066400000000000000000000022451307543307100225740ustar00rootroot00000000000000distribution= class=Beta name=Beta dimension=1 r=0.2 t=0.6 a=-1 b=2 Estimated distribution= class=Beta name=Beta dimension=1 r=0.2007 t=0.598761 a=-1.0001 b=2.0002 distribution= class=Beta name=Beta dimension=1 r=0.5 t=1.3 a=-1 b=2 Estimated distribution= class=Beta name=Beta dimension=1 r=0.490819 t=1.25193 a=-1.0001 b=2.0002 distribution= class=Beta name=Beta dimension=1 r=0.5 t=2.3 a=-1 b=2 Estimated distribution= class=Beta name=Beta dimension=1 r=0.50081 t=2.29485 a=-1.0001 b=1.98667 distribution= class=Beta name=Beta dimension=1 r=1.5 t=4.3 a=-1 b=2 Estimated distribution= class=Beta name=Beta dimension=1 r=1.43176 t=3.95068 a=-0.995542 b=1.87405 Default distribution= Beta(r = 2, t = 4, a = -1, b = 1) Distribution from parameters= Beta(r = 1.5, t = 4.3, a = -1, b = 2) Beta = Beta(r = 1.5, t = 4.3, a = -1, b = 2) Estimated Beta= Beta(r = 1.43176, t = 3.95068, a = -0.995542, b = 1.87405) Default Beta= Beta(r = 2, t = 4, a = -1, b = 1) Beta from parameters= Beta(r = 1.5, t = 4.3, a = -1, b = 2) Estimated distribution= class=Beta name=Beta dimension=1 r=1 t=2 a=-2.22045e-14 b=2.22045e-14 Estimated distribution= class=Beta name=Beta dimension=1 r=1 t=2 a=1 b=1 openturns-1.9/python/test/t_BetaFactory_std.py000077500000000000000000000041461307543307100217050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Beta(0.2, 0.6, -1.0, 2.0) size = 10000 sample = distribution.getSample(size) factory = BetaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Beta(0.5, 1.3, -1.0, 2.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Beta(0.5, 2.3, -1.0, 2.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Beta(1.5, 4.3, -1.0, 2.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedBeta = factory.buildAsBeta(sample) print("Beta =", distribution) print("Estimated Beta=", estimatedBeta) estimatedBeta = factory.buildAsBeta() print("Default Beta=", estimatedBeta) estimatedBeta = factory.buildAsBeta(distribution.getParameter()) print("Beta from parameters=", estimatedBeta) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_BetaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Beta_std.expout000066400000000000000000000065171307543307100212520ustar00rootroot00000000000000Distribution class=Beta name=Beta dimension=1 r=2 t=5 a=-1 b=2 Distribution Beta(r = 2, t = 5, a = -1, b = 2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.456966] oneSample first= class=Point name=Unnamed dimension=1 values=[-0.504347] last= class=Point name=Unnamed dimension=1 values=[-0.367645] mean= class=Point name=Unnamed dimension=1 values=[0.203901] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.365788] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.444444] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.444444] log pdf=-1.216395 pdf =0.296296 pdf (FD)=0.296296 cdf=0.888889 ccdf=0.111111 pdf gradient = class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] cdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] quantile= class=Point name=Unnamed dimension=1 values=[1.25419] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.707166] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.868627, 1.31692] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.83159} with f= MinimumVolumeLevelSetEvaluation(Beta(r = 2, t = 5, a = -1, b = 2)) beta= [0.160159] Bilateral confidence interval= [-0.797242, 1.41764] beta= [0.95] Unilateral confidence interval (lower tail)= [-1, 1.25419] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.707166, 2] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.2] standard deviation= class=Point name=Unnamed dimension=1 values=[0.6] skewness= class=Point name=Unnamed dimension=1 values=[0.285714] kurtosis= class=Point name=Unnamed dimension=1 values=[2.35714] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.36] parameters= [class=PointWithDescription name=X0 dimension=4 description=[r,t,a,b] values=[2,5,-1,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.2] standard moment n= 2 value= [0.2] standard moment n= 3 value= [-0.0857143] standard moment n= 4 value= [0.0857143] standard moment n= 5 value= [-0.047619] Standard representative= Beta(r = 2, t = 5, a = -1, b = 1) InvalidArgumentException : The first shape parameter must be a real value, here r=inf InvalidArgumentException : The first shape parameter must be a real value, here r=nan InvalidArgumentException : The second shape parameter must be a real value, here t=inf InvalidArgumentException : The second shape parameter must be a real value, here t=nan InvalidArgumentException : The lower bound must be a real value, here a=inf InvalidArgumentException : The lower bound must be a real value, here a=nan InvalidArgumentException : The upper bound must be a real value, here b=inf InvalidArgumentException : The upper bound must be a real value, here b=nan openturns-1.9/python/test/t_Beta_std.py000077500000000000000000000200271307543307100203510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Beta(2.0, 5.0, -1.0, 2.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(4) PDFgrFD[0] = (Beta(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point) - Beta(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Beta(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computePDF(point) - Beta(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Beta(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computePDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[3] = (Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computePDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(4) CDFgrFD[0] = (Beta(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point) - Beta(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Beta(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computeCDF(point) - Beta(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Beta(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computeCDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[3] = (Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computeCDF(point) - Beta(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Test for non-normal parameters inf = float("inf") nan = float("nan") import sys try: d = Beta(inf, 1.0, 0.0, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(nan, 1.0, 0.0, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(1.0, inf, 0.0, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(1.0, nan, 0.0, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(1.0, 2.0, inf, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(1.0, 2.0, nan, 1.0) except: print(sys.exc_info()[1]) try: d = Beta(1.0, 2.0, 1.0, inf) except: print(sys.exc_info()[1]) try: d = Beta(1.0, 2.0, 1.0, nan) except: print(sys.exc_info()[1]) except: import sys print("t_Beta_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BinomialFactory_std.expout000066400000000000000000000007541307543307100234560ustar00rootroot00000000000000distribution= class=Binomial name=Binomial dimension=1 n=15 p=0.7 Estimated distribution= class=Binomial name=Binomial dimension=1 n=15 p=0.69894 Default distribution= class=Binomial name=Binomial dimension=1 n=1 p=0.5 Distribution from parameters= class=Binomial name=Binomial dimension=1 n=15 p=0.7 Binomial = Binomial(n = 15, p = 0.7) Estimated binomial= Binomial(n = 15, p = 0.69894) Default binomial= Binomial(n = 1, p = 0.5) Binomial from parameters= Binomial(n = 15, p = 0.7) openturns-1.9/python/test/t_BinomialFactory_std.py000077500000000000000000000022411307543307100225560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Binomial(15, 0.7) size = 10000 sample = distribution.getSample(size) factory = BinomialFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", repr(estimatedDistribution)) estimatedBinomial = factory.buildAsBinomial(sample) print("Binomial =", distribution) print("Estimated binomial=", estimatedBinomial) estimatedBinomial = factory.buildAsBinomial() print("Default binomial=", estimatedBinomial) estimatedBinomial = factory.buildAsBinomial( distribution.getParameter()) print("Binomial from parameters=", estimatedBinomial) except: import sys print("t_BinomialFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Binomial_std.expout000066400000000000000000000027051307543307100221240ustar00rootroot00000000000000Distribution class=Binomial name=Binomial dimension=1 n=15 p=0.7 Distribution Binomial(n = 15, p = 0.7) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[10] oneSample first= class=Point name=Unnamed dimension=1 values=[8] last= class=Point name=Unnamed dimension=1 values=[12] mean= class=Point name=Unnamed dimension=1 values=[10.4842] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.20027] Point= class=Point name=Unnamed dimension=1 values=[5] pdf =0.002980 pdf (FD)=0.002980 cdf=0.003653 quantile= class=Point name=Unnamed dimension=1 values=[13] cdf(quantile)=0.964732 mean= class=Point name=Unnamed dimension=1 values=[10.5] standard deviation= class=Point name=Unnamed dimension=1 values=[1.77482] skewness= class=Point name=Unnamed dimension=1 values=[-0.225374] kurtosis= class=Point name=Unnamed dimension=1 values=[2.91746] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.15] parameters= [class=PointWithDescription name=X0 dimension=2 description=[n,p] values=[15,0.7]] standard moment n= 0 value= [1] standard moment n= 1 value= [10.5] standard moment n= 2 value= [113.4] standard moment n= 3 value= [1255.59] standard moment n= 4 value= [14214.8] standard moment n= 5 value= [164186] Standard representative= Binomial(n = 15, p = 0.7) openturns-1.9/python/test/t_Binomial_std.py000077500000000000000000000047001307543307100212300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Binomial(15, 0.7) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 5.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Binomial_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Bisection_std.expout000066400000000000000000000006221307543307100223050ustar00rootroot00000000000000myAlgo= class=Bisection derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 Solve x-cos(x) =0.00000 for x x=0.73908 myAlgo= class=Bisection derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=19 openturns-1.9/python/test/t_Bisection_std.py000077500000000000000000000012771307543307100214230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Analytical construction input = Description(1) input[0] = "x" output = Description(1) output[0] = "y" formulas = Description(output.getSize()) formulas[0] = "x-cos(x)" analytical = Function(input, output, formulas) myAlgo = Bisection() print("myAlgo=", myAlgo) value = 0.0 print("Solve ", formulas[0], "=%.5f" % value, " for ", input[0]) print("x=%.5f" % myAlgo.solve(analytical, value, 0.0, 3.0)) print("myAlgo=", myAlgo) except: import sys print("t_Bisection_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BootstrapExperiment_std.expout000066400000000000000000000015531307543307100244100ustar00rootroot00000000000000ref. sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] myPlane = class=BootstrapExperiment name=Unnamed distribution=class=UserDefined name=UserDefined dimension=6 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] probabilities=class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] size=5 sample = class=Sample name=UserDefined implementation=class=SampleImplementation name=UserDefined size=5 dimension=6 description=[v0,v1,v2,v3,v4,v5] data=[[4,5,6,7,8,9],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[2,3,4,5,6,7]] weights = class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] openturns-1.9/python/test/t_BootstrapExperiment_std.py000077500000000000000000000012431307543307100235130ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: size = 5 dim = 6 refSample = Sample(size, dim) for i in range(size): p = Point(dim) for j in range(dim): p[j] = i + j refSample[i] = p print("ref. sample=", repr(refSample)) myPlane = BootstrapExperiment(refSample) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) except: import sys print("t_BootstrapExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BoxCoxEvaluation_std.expout000066400000000000000000000011711307543307100236200ustar00rootroot00000000000000myFunction= BoxCox(lambda=[0,0.5,1], shift=[0,0,0]) myBoxCoxFunction ( [30,30,30] ) = [3.4012,8.95445,29] myBoxCoxFunction ( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6],[7,7,7],[8,8,8],[9,9,9],[10,10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 description=[y0,y1,y2] data=[[0,0,0],[0.693147,0.828427,1],[1.09861,1.4641,2],[1.38629,2,3],[1.60944,2.47214,4],[1.79176,2.89898,5],[1.94591,3.2915,6],[2.07944,3.65685,7],[2.19722,4,8],[2.30259,4.32456,9]] openturns-1.9/python/test/t_BoxCoxEvaluation_std.py000077500000000000000000000021421307543307100227260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Dimension of test dimension = 3 # Lambda lambdaVector = Point(dimension) lambdaVector[0] = 0. lambdaVector[1] = 0.5 lambdaVector[2] = 1 # Init of the function myFunction = BoxCoxEvaluation(lambdaVector) myFunction.setName("myBoxCoxFunction") # We check that for a Point with same values, the function is # done by component inPoint = Point(dimension, 30.0) # result point of the function outPoint = myFunction(inPoint) print("myFunction=", myFunction) print(myFunction.getName(), "( ", inPoint, " ) = ", outPoint) # Creation of a Sample size = 10 inSample = Sample(size, dimension) for index in range(size): inSample[index] = Point(dimension, index + 1) # result of the function outSample = myFunction(inSample) print(myFunction.getName(), "( ", repr(inSample), " ) = ", repr(outSample)) except: import sys print("t__BoxCoxEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BoxCoxFactory_glm.expout000066400000000000000000000005711307543307100231100ustar00rootroot00000000000000myBoxCox (GLM) = BoxCox(lambda=[1.80518], shift=[0.1]) GLM result = GeneralLinearModelResult(covariance models=DiracCovarianceModel(t)=[[ 0.000603916 ]] * t==[0], basis=[Basis( [class=LinearEvaluation name=Unnamed center=[0] constant=[1] linear=[[ 0 ]],class=LinearEvaluation name=Unnamed center=[0] constant=[0] linear=[[ 1 ]]] )], trend coefficients=[[3.33898,3.11022]]) openturns-1.9/python/test/t_BoxCoxFactory_glm.py000077500000000000000000000021211307543307100222100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.RandomGenerator.SetSeed(0) size = 200 # input sample inputSample = ot.Uniform(-1.0, 1.0).getSample(size) outputSample = ot.Sample(inputSample) # Evaluation of y = ax + b (a: scale, b: translate) # scale scale = [3.0] outputSample *= scale # translate sample translate = [3.1] outputSample += translate # Finally inverse transform using an arbitrary lambda lamb = [1.8] boxCoxFunction = ot.InverseBoxCoxEvaluation(lamb) # transform y using BoxCox function outputSample = boxCoxFunction(outputSample) # Add small noise epsilon = ot.Normal(0, 1.0e-2).getSample(size) outputSample += epsilon # Now we build the factory factory = ot.BoxCoxFactory() # Creation of the BoxCoxTransform result = ot.GeneralLinearModelResult() basis = ot.LinearBasisFactory(1).build() covarianceModel = ot.DiracCovarianceModel() shift = [1.0e-1] myBoxCox = factory.build(inputSample, outputSample, covarianceModel, basis, shift, result) print("myBoxCox (GLM) =", myBoxCox) print("GLM result =", result) openturns-1.9/python/test/t_BoxCoxFactory_std.expout000066400000000000000000000110271307543307100231210ustar00rootroot00000000000000myBoxCox (time-series)= BoxCox(lambda=[0.962794], shift=[0]) myBoxCox (sample) = BoxCox(lambda=[0.962794], shift=[0]) myBoxCox with shift (time-series)= BoxCox(lambda=[1.07478], shift=[1]) myBoxCox with shift (sample) = BoxCox(lambda=[1.07478], shift=[1]) BoxCox graph (time-series)= class=Graph name=Box-Cox likelihood implementation=class=GraphImplementation name=Box-Cox likelihood title=Box-Cox likelihood xTitle=lambda yTitle=log-likelihood axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=201 dimension=2 data=[[0,53.6742],[0.01075,53.7109],[0.0215,53.7471],[0.03225,53.783],[0.043,53.8184],[0.05375,53.8536],[0.0645,53.8883],[0.07525,53.9226],[0.086,53.9566],[0.09675,53.9902],[0.1075,54.0234],[0.11825,54.0563],[0.129,54.0887],[0.13975,54.1208],[0.1505,54.1525],[0.16125,54.1839],[0.172,54.2148],[0.18275,54.2454],[0.1935,54.2756],[0.20425,54.3055],[0.215,54.3349],[0.22575,54.364],[0.2365,54.3927],[0.24725,54.4211],[0.258,54.449],[0.26875,54.4766],[0.2795,54.5038],[0.29025,54.5307],[0.301,54.5571],[0.31175,54.5832],[0.3225,54.609],[0.33325,54.6343],[0.344,54.6593],[0.35475,54.6839],[0.3655,54.7081],[0.37625,54.732],[0.387,54.7555],[0.39775,54.7786],[0.4085,54.8013],[0.41925,54.8237],[0.43,54.8457],[0.44075,54.8673],[0.4515,54.8886],[0.46225,54.9095],[0.473,54.93],[0.48375,54.9501],[0.4945,54.9699],[0.50525,54.9893],[0.516,55.0083],[0.52675,55.027],[0.5375,55.0453],[0.54825,55.0632],[0.559,55.0808],[0.56975,55.098],[0.5805,55.1148],[0.59125,55.1313],[0.602,55.1474],[0.61275,55.1631],[0.6235,55.1784],[0.63425,55.1934],[0.645,55.2081],[0.65575,55.2223],[0.6665,55.2362],[0.67725,55.2497],[0.688,55.2629],[0.69875,55.2757],[0.7095,55.2881],[0.72025,55.3002],[0.731,55.3119],[0.74175,55.3232],[0.7525,55.3342],[0.76325,55.3448],[0.774,55.355],[0.78475,55.3649],[0.7955,55.3744],[0.80625,55.3836],[0.817,55.3924],[0.82775,55.4008],[0.8385,55.4089],[0.84925,55.4166],[0.86,55.4239],[0.87075,55.4309],[0.8815,55.4375],[0.89225,55.4438],[0.903,55.4497],[0.91375,55.4552],[0.9245,55.4604],[0.93525,55.4652],[0.946,55.4697],[0.95675,55.4738],[0.9675,55.4775],[0.97825,55.4809],[0.989,55.4839],[0.99975,55.4866],[1.0105,55.4889],[1.02125,55.4909],[1.032,55.4925],[1.04275,55.4937],[1.0535,55.4946],[1.06425,55.4951],[1.075,55.4953],[1.08575,55.4951],[1.0965,55.4946],[1.10725,55.4937],[1.118,55.4924],[1.12875,55.4908],[1.1395,55.4888],[1.15025,55.4865],[1.161,55.4839],[1.17175,55.4808],[1.1825,55.4775],[1.19325,55.4737],[1.204,55.4697],[1.21475,55.4652],[1.2255,55.4605],[1.23625,55.4553],[1.247,55.4498],[1.25775,55.444],[1.2685,55.4378],[1.27925,55.4313],[1.29,55.4244],[1.30075,55.4172],[1.3115,55.4096],[1.32225,55.4016],[1.333,55.3934],[1.34375,55.3847],[1.3545,55.3758],[1.36525,55.3664],[1.376,55.3567],[1.38675,55.3467],[1.3975,55.3364],[1.40825,55.3256],[1.419,55.3146],[1.42975,55.3032],[1.4405,55.2914],[1.45125,55.2793],[1.462,55.2669],[1.47275,55.2541],[1.4835,55.241],[1.49425,55.2275],[1.505,55.2137],[1.51575,55.1995],[1.5265,55.185],[1.53725,55.1702],[1.548,55.155],[1.55875,55.1395],[1.5695,55.1236],[1.58025,55.1074],[1.591,55.0908],[1.60175,55.0739],[1.6125,55.0567],[1.62325,55.0391],[1.634,55.0212],[1.64475,55.0029],[1.6555,54.9844],[1.66625,54.9654],[1.677,54.9462],[1.68775,54.9265],[1.6985,54.9066],[1.70925,54.8863],[1.72,54.8657],[1.73075,54.8448],[1.7415,54.8235],[1.75225,54.8018],[1.763,54.7799],[1.77375,54.7576],[1.7845,54.735],[1.79525,54.712],[1.806,54.6887],[1.81675,54.6651],[1.8275,54.6411],[1.83825,54.6168],[1.849,54.5922],[1.85975,54.5672],[1.8705,54.5419],[1.88125,54.5163],[1.892,54.4903],[1.90275,54.464],[1.9135,54.4374],[1.92425,54.4105],[1.935,54.3832],[1.94575,54.3556],[1.9565,54.3276],[1.96725,54.2994],[1.978,54.2708],[1.98875,54.2419],[1.9995,54.2126],[2.01025,54.183],[2.021,54.1531],[2.03175,54.1229],[2.0425,54.0924],[2.05325,54.0615],[2.064,54.0303],[2.07475,53.9988],[2.0855,53.9669],[2.09625,53.9347],[2.107,53.9022],[2.11775,53.8694],[2.1285,53.8362],[2.13925,53.8028],[2.15,53.769]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=lambda=1.07478 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=2 data=[[1.07478,55.4953]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=circle lineWidth=1] openturns-1.9/python/test/t_BoxCoxFactory_std.py000077500000000000000000000025461307543307100222360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # TimeGrid parameters n = 101 timeStart = 0.0 timeStep = 0.1 timeGrid = RegularGrid(timeStart, timeStep, n) # White noise whiteNoise = WhiteNoise(Uniform(), timeGrid) # Composite process process = CompositeProcess( ValueFunction(SymbolicFunction("x", "x+2")), whiteNoise) # A realization of the process timeSeries = process.getRealization() sample = timeSeries.getSample() # Now we build the factory factory = BoxCoxFactory() # Creation of the BoxCoxTransform myBoxCox = factory.build(timeSeries) print("myBoxCox (time-series)=", myBoxCox) print("myBoxCox (sample) =", factory.build(sample)) # Creation of the BoxCoxTransform using shift shift = Point(1, 1.0) myBoxCoxShift = factory.build(timeSeries, shift) print("myBoxCox with shift (time-series)=", myBoxCoxShift) print("myBoxCox with shift (sample) =", factory.build(sample, shift)) # Creation of the BoxCoxTransform using shift with graph graph = Graph() myBoxCoxShiftGraph = factory.build(timeSeries, shift, graph) print("BoxCox graph (time-series)=", graph) except: import sys print("t_BoxCoxFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BoxCoxTransform_std.expout000066400000000000000000000134641307543307100234740ustar00rootroot00000000000000myBoxCox= BoxCox(lambda=[0.2], shift=[0]) myBoxCox input dimension = 1 myBoxCox output dimension = 1 input time series = [ t X0 ] 0 : [ 0 11.8246 ] 1 : [ 0.1 6.20148 ] 2 : [ 0.2 8.6852 ] 3 : [ 0.3 13.6164 ] 4 : [ 0.4 3.45584 ] 5 : [ 0.5 11.0501 ] 6 : [ 0.6 8.93498 ] 7 : [ 0.7 14.3117 ] 8 : [ 0.8 12.432 ] 9 : [ 0.9 12.3795 ] 10 : [ 1 8.58842 ] 11 : [ 1.1 10.7831 ] 12 : [ 1.2 3.12981 ] 13 : [ 1.3 6.15134 ] 14 : [ 1.4 6.06466 ] 15 : [ 1.5 9.72765 ] 16 : [ 1.6 12.9874 ] 17 : [ 1.7 9.58164 ] 18 : [ 1.8 8.31938 ] 19 : [ 1.9 11.3365 ] 20 : [ 2 10.9688 ] 21 : [ 2.1 11.3374 ] 22 : [ 2.2 6.88577 ] 23 : [ 2.3 7.42986 ] 24 : [ 2.4 11.4209 ] 25 : [ 2.5 9.62351 ] 26 : [ 2.6 11.0543 ] 27 : [ 2.7 15.3471 ] 28 : [ 2.8 10.2106 ] 29 : [ 2.9 7.6559 ] 30 : [ 3 7.8354 ] 31 : [ 3.1 9.27633 ] 32 : [ 3.2 4.63611 ] 33 : [ 3.3 11.2041 ] 34 : [ 3.4 14.1035 ] 35 : [ 3.5 13.013 ] 36 : [ 3.6 12.2246 ] 37 : [ 3.7 9.86916 ] 38 : [ 3.8 11.618 ] 39 : [ 3.9 10.8999 ] 40 : [ 4 11.2232 ] 41 : [ 4.1 8.54466 ] 42 : [ 4.2 8.85102 ] 43 : [ 4.3 7.74155 ] 44 : [ 4.4 10.7738 ] 45 : [ 4.5 15.9063 ] 46 : [ 4.6 7.98613 ] 47 : [ 4.7 15.5674 ] 48 : [ 4.8 10.1565 ] 49 : [ 4.9 12.3713 ] 50 : [ 5 12.1491 ] 51 : [ 5.1 7.76913 ] 52 : [ 5.2 10.5531 ] 53 : [ 5.3 5.4078 ] 54 : [ 5.4 11.9651 ] 55 : [ 5.5 11.6142 ] 56 : [ 5.6 15.2146 ] 57 : [ 5.7 7.12383 ] 58 : [ 5.8 11.1338 ] 59 : [ 5.9 9.45699 ] 60 : [ 6 15.0189 ] 61 : [ 6.1 6.88312 ] 62 : [ 6.2 8.93934 ] 63 : [ 6.3 13.6414 ] 64 : [ 6.4 7.6689 ] 65 : [ 6.5 5.89441 ] 66 : [ 6.6 10.3104 ] 67 : [ 6.7 7.32454 ] 68 : [ 6.8 12.7168 ] 69 : [ 6.9 11.0044 ] 70 : [ 7 8.54908 ] 71 : [ 7.1 12.0339 ] 72 : [ 7.2 15.1281 ] 73 : [ 7.3 13.2119 ] 74 : [ 7.4 8.47923 ] 75 : [ 7.5 5.01741 ] 76 : [ 7.6 16.7387 ] 77 : [ 7.7 12.2788 ] 78 : [ 7.8 8.46771 ] 79 : [ 7.9 8.1008 ] 80 : [ 8 7.12878 ] 81 : [ 8.1 11.6321 ] 82 : [ 8.2 12.4437 ] 83 : [ 8.3 7.79587 ] 84 : [ 8.4 9.66562 ] 85 : [ 8.5 12.9834 ] 86 : [ 8.6 9.51812 ] 87 : [ 8.7 7.18369 ] 88 : [ 8.8 4.09393 ] 89 : [ 8.9 8.02719 ] 90 : [ 9 11.0163 ] 91 : [ 9.1 13.0467 ] 92 : [ 9.2 11.9115 ] 93 : [ 9.3 9.73028 ] 94 : [ 9.4 7.43234 ] 95 : [ 9.5 13.8138 ] 96 : [ 9.6 9.28524 ] 97 : [ 9.7 13.9789 ] 98 : [ 9.8 16.359 ] 99 : [ 9.9 7.29526 ] 100 : [ 10 5.44911 ] output time series = [ t y0 ] 0 : [ 0 3.19459 ] 1 : [ 0.1 2.20226 ] 2 : [ 0.2 2.70417 ] 3 : [ 0.3 3.42913 ] 4 : [ 0.4 1.40739 ] 5 : [ 0.5 3.08432 ] 6 : [ 0.6 2.74798 ] 7 : [ 0.7 3.51351 ] 8 : [ 0.8 3.2771 ] 9 : [ 0.9 3.27009 ] 10 : [ 1 2.68693 ] 11 : [ 1.1 3.04486 ] 12 : [ 1.2 1.28165 ] 13 : [ 1.3 2.19058 ] 14 : [ 1.4 2.1702 ] 15 : [ 1.5 2.88082 ] 16 : [ 1.6 3.34977 ] 17 : [ 1.7 2.85702 ] 18 : [ 1.8 2.63815 ] 19 : [ 1.9 3.12579 ] 20 : [ 2 3.07238 ] 21 : [ 2.1 3.12592 ] 22 : [ 2.2 2.35462 ] 23 : [ 2.3 2.46734 ] 24 : [ 2.4 3.13785 ] 25 : [ 2.5 2.86388 ] 26 : [ 2.6 3.08492 ] 27 : [ 2.7 3.63327 ] 28 : [ 2.8 2.95757 ] 29 : [ 2.9 2.51224 ] 30 : [ 3 2.54714 ] 31 : [ 3.1 2.8063 ] 32 : [ 3.2 1.79518 ] 33 : [ 3.3 3.10672 ] 34 : [ 3.4 3.48858 ] 35 : [ 3.5 3.35306 ] 36 : [ 3.6 3.2493 ] 37 : [ 3.7 2.90362 ] 38 : [ 3.8 3.16576 ] 39 : [ 3.9 3.06221 ] 40 : [ 4 3.10948 ] 41 : [ 4.1 2.67908 ] 42 : [ 4.2 2.73337 ] 43 : [ 4.3 2.52897 ] 44 : [ 4.4 3.04347 ] 45 : [ 4.5 3.69528 ] 46 : [ 4.6 2.57595 ] 47 : [ 4.7 3.65791 ] 48 : [ 4.8 2.94911 ] 49 : [ 4.9 3.26901 ] 50 : [ 5 3.23908 ] 51 : [ 5.1 2.53433 ] 52 : [ 5.2 3.01024 ] 53 : [ 5.3 2.00768 ] 54 : [ 5.4 3.21397 ] 55 : [ 5.5 3.16522 ] 56 : [ 5.6 3.61831 ] 57 : [ 5.7 2.40479 ] 58 : [ 5.8 3.09652 ] 59 : [ 5.9 2.83647 ] 60 : [ 6 3.59602 ] 61 : [ 6.1 2.35406 ] 62 : [ 6.2 2.74874 ] 63 : [ 6.3 3.43222 ] 64 : [ 6.4 2.51479 ] 65 : [ 6.5 2.12948 ] 66 : [ 6.6 2.97306 ] 67 : [ 6.7 2.44605 ] 68 : [ 6.8 3.31468 ] 69 : [ 6.9 3.07761 ] 70 : [ 7 2.67987 ] 71 : [ 7.1 3.22339 ] 72 : [ 7.2 3.60849 ] 73 : [ 7.3 3.37843 ] 74 : [ 7.4 2.66728 ] 75 : [ 7.5 1.90345 ] 76 : [ 7.6 3.78444 ] 77 : [ 7.7 3.2566 ] 78 : [ 7.8 2.66519 ] 79 : [ 7.9 2.59759 ] 80 : [ 8 2.40582 ] 81 : [ 8.1 3.16774 ] 82 : [ 8.2 3.27866 ] 83 : [ 8.3 2.53951 ] 84 : [ 8.4 2.87075 ] 85 : [ 8.5 3.34926 ] 86 : [ 8.6 2.84658 ] 87 : [ 8.7 2.41719 ] 88 : [ 8.8 1.62824 ] 89 : [ 8.9 2.58373 ] 90 : [ 9 3.07936 ] 91 : [ 9.1 3.35738 ] 92 : [ 9.2 3.2066 ] 93 : [ 9.3 2.88125 ] 94 : [ 9.4 2.46784 ] 95 : [ 9.5 3.45343 ] 96 : [ 9.6 2.8078 ] 97 : [ 9.7 3.47353 ] 98 : [ 9.8 3.74423 ] 99 : [ 9.9 2.44009 ] 100 : [ 10 2.01835 ] myInverseBoxCox = InverseBoxCox(lambda=[0.2], shift=[0]) number of call(s) : 101 openturns-1.9/python/test/t_BoxCoxTransform_std.py000077500000000000000000000027041307543307100225760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Realization issued from a SpectralProcess dimension = 1 # Parameters of the distribution N = 101 t0 = 0. dt = 0.1 myTimeGrid = RegularGrid(t0, dt, N) # Create a Sample # parameters of gaussien impose a few risk to get negative values mySample = Normal(10, 3).getSample(N) # get a realization from distribution myRealization = TimeSeries(myTimeGrid, mySample) # Create the lambda parameter lambdaVector = Point(dimension) for index in range(dimension): lambdaVector[index] = (index + 2.) * 0.1 myBoxCox = BoxCoxTransform(lambdaVector) print("myBoxCox=", myBoxCox) # Get the input and output dimension print("myBoxCox input dimension = ", myBoxCox.getInputDimension()) print("myBoxCox output dimension = ", myBoxCox.getOutputDimension()) # Evaluation of the BoxCoxTransform on the realization print("input time series =") print(myRealization) print("output time series = ") print(myBoxCox(myRealization)) # Call the getInverse method myInverseBoxCox = myBoxCox.getInverse() print("myInverseBoxCox = ", myInverseBoxCox) # Get the number of calls print("number of call(s) : ", myBoxCox.getCallsNumber()) except: import sys print("t_BoxCoxTransform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Box_std.expout000066400000000000000000000027451307543307100211260ustar00rootroot00000000000000myPlane = class=Box name=Unnamed levels=class=Point name=Unnamed dimension=2 values=[4,4] bounds=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[0,0],[0.2,0],[0.4,0],[0.6,0],[0.8,0],[1,0],[0,0.2],[0.2,0.2],[0.4,0.2],[0.6,0.2],[0.8,0.2],[1,0.2],[0,0.4],[0.2,0.4],[0.4,0.4],[0.6,0.4],[0.8,0.4],[1,0.4],[0,0.6],[0.2,0.6],[0.4,0.6],[0.6,0.6],[0.8,0.6],[1,0.6],[0,0.8],[0.2,0.8],[0.4,0.8],[0.6,0.8],[0.8,0.8],[1,0.8],[0,1],[0.2,1],[0.4,1],[0.6,1],[0.8,1],[1,1]] myPlane = class=Box name=Unnamed levels=class=Point name=Unnamed dimension=2 values=[4,4] bounds=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[7,8] upper bound=class=Point name=Unnamed dimension=2 values=[9,16] finite lower bound=[1,1] finite upper bound=[1,1] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[7,8],[7.4,8],[7.8,8],[8.2,8],[8.6,8],[9,8],[7,9.6],[7.4,9.6],[7.8,9.6],[8.2,9.6],[8.6,9.6],[9,9.6],[7,11.2],[7.4,11.2],[7.8,11.2],[8.2,11.2],[8.6,11.2],[9,11.2],[7,12.8],[7.4,12.8],[7.8,12.8],[8.2,12.8],[8.6,12.8],[9,12.8],[7,14.4],[7.4,14.4],[7.8,14.4],[8.2,14.4],[8.6,14.4],[9,14.4],[7,16],[7.4,16],[7.8,16],[8.2,16],[8.6,16],[9,16]] openturns-1.9/python/test/t_Box_std.py000077500000000000000000000005641307543307100202320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot levels = [4] * 2 myPlane = ot.Box(levels) print('myPlane = ', myPlane) sample = myPlane.generate() print('sample = ', repr(sample)) myPlane = ot.Box(levels, ot.Interval([7.0, 8.0], [9.0, 16.0])) print('myPlane = ', myPlane) sample = myPlane.generate() print('sample = ', repr(sample)) openturns-1.9/python/test/t_Brent_std.expout000066400000000000000000000006111307543307100214360ustar00rootroot00000000000000myAlgo= class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 Solve x-cos(x) =0.00000 for x x=0.73908 myAlgo= class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=8 openturns-1.9/python/test/t_Brent_std.py000077500000000000000000000012471307543307100205530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Analytical construction input = Description(1) input[0] = "x" output = Description(1) output[0] = "y" formulas = Description(output.getSize()) formulas[0] = "x-cos(x)" analytical = Function(input, output, formulas) myAlgo = Brent() print("myAlgo=", myAlgo) value = 0.0 print("Solve ", formulas[0], "=%.5f" % value, " for ", input[0]) print("x=%.5f" % myAlgo.solve(analytical, value, -4.0, 4.0 / 3.0)) print("myAlgo=", myAlgo) except: import sys print("t_Brent.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_BurrFactory_std.expout000066400000000000000000000006121307543307100226270ustar00rootroot00000000000000distribution= class=Burr name=Burr dimension=1 c=2.5 k=1.5 Estimated distribution= class=Burr name=Burr dimension=1 c=2.48352 k=1.48109 Default distribution= Burr(c = 1, k = 1) Distribution from parameters= Burr(c = 2.5, k = 1.5) Burr = Burr(c = 2.5, k = 1.5) Estimated burr= Burr(c = 2.48352, k = 1.48109) Default burr= Burr(c = 1, k = 1) Burr from parameters= Burr(c = 2.5, k = 1.5) openturns-1.9/python/test/t_BurrFactory_std.py000077500000000000000000000023561307543307100217450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Burr(2.5, 1.5) size = 10000 sample = distribution.getSample(size) factory = BurrFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedBurr = factory.buildAsBurr(sample) print("Burr =", distribution) print("Estimated burr=", estimatedBurr) estimatedBurr = factory.buildAsBurr() print("Default burr=", estimatedBurr) estimatedBurr = factory.buildAsBurr(distribution.getParameter()) print("Burr from parameters=", estimatedBurr) try: estimatedBurr = BurrFactory().build(Normal(1e-3, 1e-5).getSample(100)) print('Estimated burr=', estimatedBurr) except: pass except: import sys print("t_BurrFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Burr_std.expout000066400000000000000000000050401307543307100212770ustar00rootroot00000000000000Distribution class=Burr name=Burr dimension=1 c=1.5 k=4.5 Distribution Burr(c = 1.5, k = 4.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.393842] oneSample first= class=Point name=Unnamed dimension=1 values=[0.719504] last= class=Point name=Unnamed dimension=1 values=[0.257588] mean= class=Point name=Unnamed dimension=1 values=[0.383125] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0960551] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1.5] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0861923] pdf = 0.0267008010312 pdf (FD)= 0.026700801 cdf= 0.990836694178 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.00992994,-0.0219098] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.00992994,-0.0219098] cdf gradient = class=Point name=Unnamed dimension=2 values=[0.0108262,0.00955539] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0108262,0.00955539] quantile= class=Point name=Unnamed dimension=1 values=[0.963592] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0508413] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.000634361, 0.964014] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.77199} with f= MinimumVolumeLevelSetEvaluation(Burr(c = 1.5, k = 4.5)) beta= [0.169994] Bilateral confidence interval= [0.0316926, 1.1727] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.963592] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0508413, 118.536] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.37922] standard deviation= class=Point name=Unnamed dimension=1 values=[0.310221] skewness= class=Point name=Unnamed dimension=1 values=[2.16221] kurtosis= class=Point name=Unnamed dimension=1 values=[13.2624] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0962368] parameters= [class=PointWithDescription name=X0 dimension=2 description=[c,k] values=[1.5,4.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.37922] standard moment n= 2 value= [0.240044] standard moment n= 3 value= [0.228571] standard moment n= 4 value= [0.324466] standard moment n= 5 value= [0.738598] Standard representative= Burr(c = 1.5, k = 4.5) openturns-1.9/python/test/t_Burr_std.py000077500000000000000000000126041307543307100204120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Burr(1.5, 4.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.5) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # DDF = distribution.computeDDF( point ) # print "ddf =", repr(DDF) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) # CF = distribution.computeCharacteristicFunction( point[0] ) # print "characteristic function=", CF PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(2) PDFgrFD[0] = (Burr(distribution.getC() + eps, distribution.getK()).computePDF(point) - Burr(distribution.getC() - eps, distribution.getK()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Burr(distribution.getC(), distribution.getK() + eps).computePDF(point) - Burr(distribution.getC(), distribution.getK() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Burr(distribution.getC() + eps, distribution.getK()).computeCDF(point) - Burr(distribution.getC() - eps, distribution.getK()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Burr(distribution.getC(), distribution.getK() + eps).computeCDF(point) - Burr(distribution.getC(), distribution.getK() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Burr_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CalibrationStrategy_std.expout000066400000000000000000000001101307543307100243300ustar00rootroot00000000000000updateFactor= 0.8 updateFactor= 1.0 updateFactor= 1.0 updateFactor= 1.2 openturns-1.9/python/test/t_CalibrationStrategy_std.py000077500000000000000000000007621307543307100234540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: lowerBound = 0.3 upperBound = 0.5 ii = Interval(lowerBound, upperBound) myAlgo = CalibrationStrategy(Interval(lowerBound, upperBound)) for x in (0.1, 0.3, 0.5, 0.7): updateFactor = myAlgo.computeUpdateFactor(x) print("updateFactor=", updateFactor) except: import sys print("t_CalibrationStrategy_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CanonicalTensorEvaluation_std.py000077500000000000000000000012141307543307100246050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import openturns.testing as ottest dim = 3 factoryCollection = [ot.FourierSeriesFactory()] * dim rank = 2 nk = [10] * dim tensorEval = ot.CanonicalTensorEvaluation(factoryCollection, nk, rank) for r in range(rank): for j in range(dim): tensorEval.setCoefficients(r, j, [1.0] * nk[j]) f = ot.Function(tensorEval) print(tensorEval) x = [1.0] * dim print(x) y = f(x) print(y) ottest.assert_almost_equal(y, [-1.45674]) tensorEval.setRank(1) f = ot.Function(tensorEval) print(tensorEval) y = f(x) print(y) ottest.assert_almost_equal(y, [-0.728368]) openturns-1.9/python/test/t_CanonicalTensorGradient_std.py000077500000000000000000000015031307543307100242340ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import openturns.testing as ottest dim = 3 factoryCollection = [ot.FourierSeriesFactory()] * dim rank = 2 nk = [8] * dim tensorEval = ot.CanonicalTensorEvaluation(factoryCollection, nk, rank) for r in range(rank): for j in range(dim): coefs = ot.Normal(nk[j]).getRealization() tensorEval.setCoefficients(r, j, coefs) tensorGrad = ot.CanonicalTensorGradient(tensorEval) x = [1.0] * dim print(x) df = tensorGrad.gradient(x) * ot.Point([1.0]) print('df=', df) f = ot.Function(tensorEval) fx = f(x)[0] eps = 1e-5 dffd = [0.0] * dim for i in range(dim): xp = ot.Point(x) xp[i] += eps fp = f(xp) dffd[i] = (f(xp)[0] - fx) / eps print('dffd', dffd) # print(tensor) ottest.assert_almost_equal(df, dffd, 1e-4) openturns-1.9/python/test/t_Catalog_std.py000077500000000000000000000004541307543307100210520ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() try: print('Catalog={') for key in ot.Catalog.GetKeys(): print(' %s,' % key) print('}') except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_CauchyModel_std.expout000066400000000000000000000012771307543307100225720ustar00rootroot00000000000000myDefautModel = class=CauchyModel amplitude=[1] scale=[1] no spatial correlation myModel = class=CauchyModel amplitude=[1] scale=[1] no spatial correlation spectral density matrix at f = 1.0 : [[ (0.049409,0) ]] spectral density matrix at f = 10.0 : [[ (0.000506478,0) ]] mySecondOrderModel = class=CauchyModel amplitude=[1,1,1] scale=[1,2,3] spatial correlation= [[ 1 1 0 ] [ 1 1 0.25 ] [ 0 0.25 1 ]] myHighModel = class=CauchyModel amplitude=[1,1,1] scale=[1,2,3] spatial correlation= [[ 1 1 0 ] [ 1 1 0.25 ] [ 0 0.25 1 ]] spectral density matrix at f = 1.0 : [[ (0.049409,0) ]] spectral density matrix at f = 10.0 : [[ (0.000506478,0) ]] openturns-1.9/python/test/t_CauchyModel_std.py000077500000000000000000000040171307543307100216740ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 # Amplitude values amplitude = Point(defaultDimension, 1.0) # Scale values scale = Point(defaultDimension, 1.0) # Default constructor myDefautModel = CauchyModel() print("myDefautModel = ", myDefautModel) # Second order model with parameters myModel = CauchyModel(scale, amplitude) print("myModel = ", myModel) frequencyValue = 1.0 print("spectral density matrix at f = ", frequencyValue, " : ", myModel(frequencyValue)) # Evaluation at time higher to check the decrease of the cauchy values frequencyValueHigh = 10.0 print("spectral density matrix at f = ", frequencyValueHigh, " : ", myModel(frequencyValueHigh)) # Default dimension parameter to evaluate the model highDimension = 3 # Reallocation of adequate sizes amplitude.resize(highDimension) scale.resize(highDimension) spatialCorrelation = CorrelationMatrix(highDimension) for index in range(highDimension): amplitude[index] = 1.0 scale[index] = (index + 1.0) / (defaultDimension * defaultDimension) if index > 0: spatialCorrelation[index, index - 1] = 1.0 / (index * index) # check the cast mySecondOrderModel = SpectralModel( CauchyModel(scale, amplitude, spatialCorrelation)) print("mySecondOrderModel = ", mySecondOrderModel) # checking the cast # Second order model - dimension 10 myHighModel = CauchyModel(scale, amplitude, spatialCorrelation) print("myHighModel = ", myHighModel) print("spectral density matrix at f = ", frequencyValue, " : ", myModel(frequencyValue)) print("spectral density matrix at f = ", frequencyValueHigh, " : ", myModel(frequencyValueHigh)) except: import sys print("t_CauchyModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CenteredFiniteDifferenceGradient_std.expout000066400000000000000000000050231307543307100267070ustar00rootroot00000000000000myFunc (before substitution) = class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myGradient= class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.01,0.01] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540302,-0.909297,-0.909297,0.735759,-1.10364] myGradient.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540293,-0.909282,-0.909282,0.735771,-1.10366] myFunc (after substitution) = class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.01,0.01] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540293,-0.909282,-0.909282,0.735771,-1.10366] (after substitution) openturns-1.9/python/test/t_CenteredFiniteDifferenceGradient_std.py000077500000000000000000000016211307543307100260160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot eps = 1e-2 # Instance creation myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) print("myFunc (before substitution) = ", repr(myFunc)) epsilon = ot.Point(myFunc.getInputDimension(), eps) inPoint = ot.Point(epsilon.getDimension(), 1.0) myGradient = ot.CenteredFiniteDifferenceGradient( epsilon, myFunc.getEvaluation()) print("myGradient=", repr(myGradient)) print("myFunc.gradient(", repr(inPoint), ")=", repr(myFunc.gradient(inPoint))) print("myGradient.gradient(", repr(inPoint), ")=", repr(myGradient.gradient(inPoint))) # Substitute the gradient myFunc.setGradient(myGradient) print("myFunc (after substitution) = ", repr(myFunc)) print("myFunc.gradient(", repr(inPoint), ")=", repr( myFunc.gradient(inPoint)), " (after substitution)") openturns-1.9/python/test/t_CenteredFiniteDifferenceHessian_std.expout000066400000000000000000000021101307543307100265360ustar00rootroot00000000000000myHessian= class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.01,0.01] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.hessian( class=Point name=Unnamed dimension=2 values=[1,1] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540302,0,-0.841471,0.416147,0.416147,0,0.416147,0.735759,-1.10364,0,1.47152] myHessian.hessian( class=Point name=Unnamed dimension=2 values=[1,1] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540293,0,-0.841443,0.416133,0.416133,0,0.416133,0.735783,-1.10368,0,1.47152] myFunc.hessian( class=Point name=Unnamed dimension=2 values=[1,1] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0.540293,0,-0.841443,0.416133,0.416133,0,0.416133,0.735783,-1.10368,0,1.47152] (after substitution) openturns-1.9/python/test/t_CenteredFiniteDifferenceHessian_std.py000077500000000000000000000014671307543307100256630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot eps = 1e-2 # Instance creation myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) epsilon = ot.Point(myFunc.getInputDimension(), eps) inPoint = ot.Point(epsilon.getDimension(), 1.0) myHessian = ot.CenteredFiniteDifferenceHessian( epsilon, myFunc.getEvaluation()) print("myHessian=", repr(myHessian)) print("myFunc.hessian(", repr(inPoint), ")=", repr(myFunc.hessian(inPoint))) print("myHessian.hessian(", repr(inPoint), ")=", repr(myHessian.hessian(inPoint))) # Substitute the hessian myFunc.setHessian(ot.CenteredFiniteDifferenceHessian(myHessian)) print("myFunc.hessian(", repr(inPoint), ")=", repr( myFunc.hessian(inPoint)), " (after substitution)") openturns-1.9/python/test/t_CharlierFactory_std.expout000066400000000000000000000026431307543307100234540ustar00rootroot00000000000000charlier= class=CharlierFactory lambda=2.5 measure=class=Poisson name=Poisson dimension=1 lambda=2.5 charlier( 0 )= 1 charlier( 1 )= 1.58114 - 0.632456 * X charlier( 2 )= 1.76777 - 1.69706 * X + 0.282843 * X^2 charlier( 3 )= 1.61374 - 2.91765 * X + 1.08444 * X^2 - 0.10328 * X^3 charlier( 4 )= 1.27578 - 4.11514 * X + 2.5638 * X^2 - 0.522558 * X^3 + 0.0326599 * X^4 charlier( 5 )= 0.90211 - 5.31682 * X + 4.90748 * X^2 - 1.59349 * X^3 + 0.207846 * X^4 - 0.0092376 * X^5 charlier( 6 )= 0.582309 - 6.7723 * X + 8.53567 * X^2 - 3.87585 * X^3 + 0.784115 * X^4 - 0.0715542 * X^5 + 0.00238514 * X^6 charlier( 7 )= 0.347996 - 8.97735 * X + 14.419 * X^2 - 8.44043 * X^3 + 2.32731 * X^4 - 0.324277 * X^5 + 0.0219511 * X^6 - 0.000570157 * X^7 charlier( 8 )= 0.194536 - 12.8132 * X + 24.6527 * X^2 - 17.5284 * X^3 + 6.09769 * X^4 - 1.14232 * X^5 + 0.116909 * X^6 - 0.00611957 * X^7 + 0.000127491 * X^8 charlier( 9 )= 0.102529 - 19.9402 * X + 43.6781 * X^2 - 36.0402 * X^3 + 14.9989 * X^4 - 3.50841 * X^5 + 0.478916 * X^6 - 0.0376553 * X^7 + 0.00157233 * X^8 - 2.68775e-05 * X^9 charlier(10) roots= class=Point name=Unnamed dimension=10 values=[0.00152556,1.02568,2.14884,3.45871,4.99217,6.76487,8.80524,11.1736,13.9991,17.6303] charlier(10) nodes= [0.00152556,1.02568,2.14884,3.45871,4.99217,6.76487,8.80524,11.1736,13.9991,17.6303]#10 and weights= [0.0827243,0.219515,0.307739,0.252202,0.11091,0.0243651,0.00244673,9.63995e-05,1.10093e-06,1.685e-09]#10 openturns-1.9/python/test/t_CharlierFactory_std.py000077500000000000000000000010511307543307100225530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: charlier = CharlierFactory(2.5) print("charlier=", charlier) for i in range(10): print("charlier(", i, ")=", charlier.build(i)) roots = charlier.getRoots(10) print("charlier(10) roots=", repr(roots)) nodes, weights = charlier.getNodesAndWeights(10) print("charlier(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_CharlierFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ChebychevAlgorithm_std.expout000066400000000000000000000024321307543307100241360ustar00rootroot00000000000000algo= class=ChebychevAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 reference family=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 Triangular polynomial( 0 )= [2.41355,-0.241355,0] Triangular polynomial( 1 )= [2.09874,0.0321942,-0.869564] Triangular polynomial( 2 )= [2.04635,-0.0276334,-0.975039] Triangular polynomial( 3 )= [2.04338,0.00798025,-0.99855] Triangular polynomial( 4 )= [2.01498,-0.00254217,-0.986101] algo= class=ChebychevAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 reference family=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Triangular polynomial( 0 )= [2.41355,-0.241355,0] Triangular polynomial( 1 )= [2.09874,0.0321942,-0.869564] Triangular polynomial( 2 )= [2.04635,-0.0276334,-0.975039] Triangular polynomial( 3 )= [2.04338,0.00798025,-0.99855] Triangular polynomial( 4 )= [2.01498,-0.00254217,-0.986101] openturns-1.9/python/test/t_ChebychevAlgorithm_std.py000077500000000000000000000014101307543307100232400ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: iMax = 5 distribution = Triangular(-1.0, 0.3, 1.0) algo = ChebychevAlgorithm(distribution) print("algo=", repr(algo)) for i in range(iMax): print(distribution.getClassName() + " polynomial(", i, ")=", algo.getRecurrenceCoefficients(i)) algo.setReferenceFamily( OrthogonalUniVariatePolynomialFamily(HermiteFactory())) print("algo=", repr(algo)) for i in range(iMax): print(distribution.getClassName() + " polynomial(", i, ")=", algo.getRecurrenceCoefficients(i)) except: import sys print("t_ChebychevAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ChebychevFactory_std.expout000066400000000000000000000017541307543307100236250ustar00rootroot00000000000000chebychev= class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 chebychev( 0 )= 1 chebychev( 1 )= 1.41421 * X chebychev( 2 )= -1.41421 + 2.82843 * X^2 chebychev( 3 )= -4.24264 * X + 5.65685 * X^3 chebychev( 4 )= 1.41421 - 11.3137 * X^2 + 11.3137 * X^4 chebychev( 5 )= 7.07107 * X - 28.2843 * X^3 + 22.6274 * X^5 chebychev( 6 )= -1.41421 + 25.4558 * X^2 - 67.8823 * X^4 + 45.2548 * X^6 chebychev( 7 )= -9.89949 * X + 79.196 * X^3 - 158.392 * X^5 + 90.5097 * X^7 chebychev( 8 )= 1.41421 - 45.2548 * X^2 + 226.274 * X^4 - 362.039 * X^6 + 181.019 * X^8 chebychev( 9 )= 12.7279 * X - 169.706 * X^3 + 610.94 * X^5 - 814.587 * X^7 + 362.039 * X^9 chebychev(10) roots= class=Point name=Unnamed dimension=10 values=[0.987688,0.891007,0.707107,0.45399,0.156434,-0.156434,-0.45399,-0.707107,-0.891007,-0.987688] chebychev(10) nodes= [0.987688,0.891007,0.707107,0.45399,0.156434,-0.156434,-0.45399,-0.707107,-0.891007,-0.987688]#10 and weights= [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]#10 openturns-1.9/python/test/t_ChebychevFactory_std.py000077500000000000000000000010611307543307100227230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: chebychev = ChebychevFactory() print("chebychev=", chebychev) for i in range(10): print("chebychev(", i, ")=", chebychev.build(i)) roots = chebychev.getRoots(10) print("chebychev(10) roots=", repr(roots)) nodes, weights = chebychev.getNodesAndWeights(10) print("chebychev(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_ChebychevFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ChiFactory_std.expout000066400000000000000000000010501307543307100224150ustar00rootroot00000000000000distribution= class=Chi name=Chi dimension=1 nu=0.5 Estimated distribution= class=Chi name=Chi dimension=1 nu=0.49317 distribution= class=Chi name=Chi dimension=1 nu=1 Estimated distribution= class=Chi name=Chi dimension=1 nu=1.00223 distribution= class=Chi name=Chi dimension=1 nu=2.5 Estimated distribution= class=Chi name=Chi dimension=1 nu=2.48936 Default distribution= Chi(nu = 1) Distribution from parameters= Chi(nu = 2.5) Chi = Chi(nu = 2.5) Estimated chi= Chi(nu = 2.48936) Default chi= Chi(nu = 1) Chi from parameters= Chi(nu = 2.5) openturns-1.9/python/test/t_ChiFactory_std.py000077500000000000000000000030121307543307100215240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Chi(0.5) size = 10000 sample = distribution.getSample(size) factory = ChiFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Chi(1.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Chi(2.5) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedChi = factory.buildAsChi(sample) print("Chi =", distribution) print("Estimated chi=", estimatedChi) estimatedChi = factory.buildAsChi() print("Default chi=", estimatedChi) estimatedChi = factory.buildAsChi(distribution.getParameter()) print("Chi from parameters=", estimatedChi) except: import sys print("t_ChiFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ChiSquareFactory_std.expout000066400000000000000000000012541307543307100236040ustar00rootroot00000000000000distribution= class=ChiSquare name=ChiSquare dimension=1 nu=0.5 Estimated distribution= class=ChiSquare name=ChiSquare dimension=1 nu=0.49317 distribution= class=ChiSquare name=ChiSquare dimension=1 nu=1 Estimated distribution= class=ChiSquare name=ChiSquare dimension=1 nu=1.00223 distribution= class=ChiSquare name=ChiSquare dimension=1 nu=2.5 Estimated distribution= class=ChiSquare name=ChiSquare dimension=1 nu=2.48936 Default distribution= ChiSquare(nu = 1) Distribution from parameters= ChiSquare(nu = 2.5) ChiSquare = ChiSquare(nu = 2.5) Estimated chiSquare= ChiSquare(nu = 2.48936) Default chiSquare= ChiSquare(nu = 1) ChiSquare from parameters= ChiSquare(nu = 2.5) openturns-1.9/python/test/t_ChiSquareFactory_std.py000077500000000000000000000031771307543307100227210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = ChiSquare(0.5) size = 10000 sample = distribution.getSample(size) factory = ChiSquareFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = ChiSquare(1.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = ChiSquare(2.5) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedChiSquare = factory.buildAsChiSquare(sample) print("ChiSquare =", distribution) print("Estimated chiSquare=", estimatedChiSquare) estimatedChiSquare = factory.buildAsChiSquare() print("Default chiSquare=", estimatedChiSquare) estimatedChiSquare = factory.buildAsChiSquare( distribution.getParameter()) print("ChiSquare from parameters=", estimatedChiSquare) except: import sys print("t_ChiSquareFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ChiSquare_std.expout000066400000000000000000000050611307543307100222540ustar00rootroot00000000000000Distribution class=ChiSquare name=ChiSquare dimension=1 nu=1.5 Distribution ChiSquare(nu = 1.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[2.77998] oneSample first= class=Point name=Unnamed dimension=1 values=[2.51653] last= class=Point name=Unnamed dimension=1 values=[1.04578] mean= class=Point name=Unnamed dimension=1 values=[1.49285] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.84211] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.220728] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.220728] pdf = 0.294304204662 pdf (FD)= 0.294304205 cdf= 0.527937109835 characteristic function= (0.368925208371+0.403687932533j) pdf gradient = class=Point name=Unnamed dimension=1 values=[0.0577886] pdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[0.0577886] cdf gradient = class=Point name=Unnamed dimension=1 values=[-0.291714] cdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[-0.291714] quantile= class=Point name=Unnamed dimension=1 values=[4.9802] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0332328] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 4.9802] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.61461} with f= MinimumVolumeLevelSetEvaluation(ChiSquare(nu = 1.5)) beta= [0.0269275] Bilateral confidence interval= [0.013113, 6.27581] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 4.9802] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0332328, 39.9307] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.5] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3] parameters= [class=PointWithDescription name=X0 dimension=1 description=[nu] values=[1.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.5] standard moment n= 2 value= [5.25] standard moment n= 3 value= [28.875] standard moment n= 4 value= [216.56] standard moment n= 5 value= [2057.3] Standard representative= ChiSquare(nu = 1.5) nu= 1.5 standard deviation= class=Point name=Unnamed dimension=1 values=[1.73205] skewness= class=Point name=Unnamed dimension=1 values=[2.3094] kurtosis= class=Point name=Unnamed dimension=1 values=[11] openturns-1.9/python/test/t_ChiSquare_std.py000077500000000000000000000123141307543307100213620ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = ChiSquare(1.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(1) PDFgrFD[0] = (ChiSquare(distribution.getNu() + eps).computePDF(point) - ChiSquare(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(1) CDFgrFD[0] = (ChiSquare(distribution.getNu() + eps).computeCDF(point) - ChiSquare(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) oldPrecision = PlatformInfo.GetNumericalPrecision() PlatformInfo.SetNumericalPrecision(5) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) PlatformInfo.SetNumericalPrecision(oldPrecision) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution nu = distribution.getNu() print("nu=", nu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) except: import sys print("t_ChiSquare_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Chi_std.expout000066400000000000000000000050571307543307100211000ustar00rootroot00000000000000Distribution class=Chi name=Chi dimension=1 nu=1.5 Distribution Chi(nu = 1.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.66733] oneSample first= class=Point name=Unnamed dimension=1 values=[1.58636] last= class=Point name=Unnamed dimension=1 values=[1.02264] mean= class=Point name=Unnamed dimension=1 values=[1.04589] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.399002] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.294304] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.294304] pdf = 0.588608409324 pdf (FD)= 0.588608409 cdf= 0.527937109835 characteristic function= (0.433495931529+0.694719223625j) pdf gradient = class=Point name=Unnamed dimension=1 values=[0.115577] pdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[0.115577] cdf gradient = class=Point name=Unnamed dimension=1 values=[-0.291714] cdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[-0.291714] quantile= class=Point name=Unnamed dimension=1 values=[2.23164] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.182299] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0147509, 2.24137] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.13833} with f= MinimumVolumeLevelSetEvaluation(Chi(nu = 1.5)) beta= [0.117852] Bilateral confidence interval= [0.114512, 2.50516] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 2.23164] beta= [0.95] Unilateral confidence interval (upper tail)= [0.182299, 7.89498] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.04605] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.40578] parameters= [class=PointWithDescription name=X0 dimension=1 description=[nu] values=[1.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.04605] standard moment n= 2 value= [1.5] standard moment n= 3 value= [2.61512] standard moment n= 4 value= [5.25] standard moment n= 5 value= [11.7681] Standard representative= Chi(nu = 1.5) nu= 1.5 standard deviation= class=Point name=Unnamed dimension=1 values=[0.637009] skewness= class=Point name=Unnamed dimension=1 values=[0.762585] kurtosis= class=Point name=Unnamed dimension=1 values=[3.42425] openturns-1.9/python/test/t_Chi_std.py000077500000000000000000000120201307543307100201730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Chi(1.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(1) PDFgrFD[0] = (Chi(distribution.getNu() + eps).computePDF(point) - Chi(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(1) CDFgrFD[0] = (Chi(distribution.getNu() + eps).computeCDF(point) - Chi(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution nu = distribution.getNu() print("nu=", nu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) except: import sys print("t_Chi_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ClaytonCopulaFactory_std.expout000066400000000000000000000007421307543307100244760ustar00rootroot00000000000000distribution= class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.5 Estimated distribution= class=ClaytonCopula name=ClaytonCopula dimension=2 theta=1.33821 Default distribution= ClaytonCopula(theta = 2) Distribution from parameters= ClaytonCopula(theta = 1.5) ClaytonCopula = ClaytonCopula(theta = 1.5) Estimated claytonCopula= ClaytonCopula(theta = 1.33821) Default claytonCopula= ClaytonCopula(theta = 2) ClaytonCopula from parameters= ClaytonCopula(theta = 1.5) openturns-1.9/python/test/t_ClaytonCopulaFactory_std.py000077500000000000000000000023521307543307100236040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = ClaytonCopula(1.5) size = 1000 sample = distribution.getSample(size) factory = ClaytonCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedClaytonCopula = factory.buildAsClaytonCopula(sample) print("ClaytonCopula =", distribution) print("Estimated claytonCopula=", estimatedClaytonCopula) estimatedClaytonCopula = factory.buildAsClaytonCopula() print("Default claytonCopula=", estimatedClaytonCopula) estimatedClaytonCopula = factory.buildAsClaytonCopula( distribution.getParameter()) print("ClaytonCopula from parameters=", estimatedClaytonCopula) except: import sys print("t_ClaytonCopulaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ClaytonCopula_std.expout000066400000000000000000000066051307543307100231520ustar00rootroot00000000000000Copula class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2.5 Copula ClaytonCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0618369,0.0618369,0.0833333] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= class=Point name=Unnamed dimension=2 values=[0.629877,0.901557] oneSample= class=Sample name=ClaytonCopula implementation=class=SampleImplementation name=ClaytonCopula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.0526823],[0.347057,0.895953],[0.92068,0.794201],[0.0632061,0.0551566],[0.714382,0.621802],[0.373767,0.583326],[0.883503,0.65348],[0.92851,0.935197],[0.684575,0.88113],[0.359802,0.865943]] anotherSample mean= class=Point name=Unnamed dimension=2 values=[0.502777,0.50134] anotherSample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0628988,0.0628988,0.0838004] Point = class=Point name=Unnamed dimension=2 values=[0.2,0.2] pdf=3.387901 cdf=0.152117 Quantile= class=Point name=Unnamed dimension=2 values=[0.618165,0.618165] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=2 values=[0.0402547,0.0402547] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0156773, 0.984323] [0.0156773, 0.984323] threshold= [0.968645] Minimum volume level set= {x | f(x) <= 0.815537} with f= MinimumVolumeLevelSetEvaluation(ClaytonCopula(theta = 2.5)) beta= [0.442402] Bilateral confidence interval= [0.0156773, 0.984323] [0.0156773, 0.984323] beta= [0.968645] Unilateral confidence interval (lower tail)= [0, 0.973879] [0, 0.973879] beta= [0.973879] Unilateral confidence interval (upper tail)= [0.0402547, 1] [0.0402547, 1] beta= [0.959745] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.294088] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.47206] indices= [1,0] margins= class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2.5 margins PDF=2.754677 margins CDF=0.190662 margins quantile= class=Point name=Unnamed dimension=2 values=[0.973879,0.973879] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.196586,0.274622] ClaytonCopula(theta = 1e-12) PDF( [1e-12,1e-12] )=1.000000000709e+00 CDF( [1e-12,1e-12] )=1.000000000763e-24 ClaytonCopula(theta = 9e-09) PDF( [1e-07,1e-07] )=1.000002057013e+00 CDF( [1e-07,1e-07] )=1.000002338139e-14 ClaytonCopula(theta = 1.1e-08) PDF( [0.1,0.1] )=1.000000018664e+00 CDF( [0.1,0.1] )=1.000000058321e-02 ClaytonCopula(theta = -0.99) PDF( [0.5,0.5] )=1.386418956876e+00 CDF( [0.5,0.5] )=6.615106628117e-03 ClaytonCopula(theta = 99) PDF( [0.1,0.1] )=2.482557416581e+02 CDF( [0.1,0.1] )=9.930229666324e-02 ClaytonCopula(theta = 110) PDF( [0.1,0.1] )=2.757568764767e+02 CDF( [0.1,0.1] )=9.937184737898e-02 ClaytonCopula(theta = 100000) PDF( [0.1,0.1] )=2.500007671207e+05 CDF( [0.1,0.1] )=9.999930685522e-02 openturns-1.9/python/test/t_ClaytonCopula_std.py000077500000000000000000000110121307543307100222450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 copula = ClaytonCopula(2.5) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", repr(copula.getMean())) print("Covariance ", repr(copula.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) print("Point = ", repr(point), " pdf=%.6f" % pointPDF, " cdf=%.6f" % pointCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = Point(margins.computeQuantile(0.95)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) # Additional tests for PDF/CDF in extreme cases # We focus on the main diagonal as it is the most challenging computation points = [[1.0e-12] * 2, [1.0e-7] * 2, [0.1] * 2, [0.5] * 2, [0.1] * 2, [0.1] * 2, [0.1] * 2] thetas = [1.0e-12, 0.9e-8, 1.1e-8, -0.99, 9.9e1, 1.1e2, 1.0e5] c_py = list() C_py = list() for i in range(len(thetas)): x = Point(points[i]) copula = ClaytonCopula(thetas[i]) print(copula) c_py.append(copula.computePDF(x)) C_py.append(copula.computeCDF(x)) print("PDF(", x, ")=%.12e" % c_py[i]) print("CDF(", x, ")=%.12e" % C_py[i]) except: import sys print("t_ClaytonCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Cloud_std.expout000066400000000000000000000000001307543307100214220ustar00rootroot00000000000000openturns-1.9/python/test/t_Cloud_std.py000077500000000000000000000027331307543307100205500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution1 = Normal(meanPoint, sigma, R) # Instanciate another distribution object meanPoint[0] = -1.5 meanPoint[1] = 0.5 sigma[0] = 4.0 sigma[1] = 1.0 for i in range(1, dim): R[i, i - 1] = -0.25 distribution2 = Normal(meanPoint, sigma, R) # Test for sampling size = 200 sample1 = distribution1.getSample(size) sample2 = distribution2.getSample(size) # Create an empty graph myGraph = Graph("Normal sample", "x1", "x2", True, "topright") # Create the first cloud myCloud1 = Cloud(sample1, "blue", "fsquare", "First Cloud") # Then, draw it myGraph.add(myCloud1) myGraph.draw("Graph_Cloud_a_OT.png") # Check that the correct files have been generated by computing their # checksum # Create the second cloud myCloud2 = Cloud(sample2, "red", "circle", "Second Cloud") # Add it to the graph and draw everything myGraph.add(myCloud2) myGraph.draw("Graph_Cloud_b_OT.png") except: import sys print("t_Cloud_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Cobyla_std.expout000066400000000000000000000126121307543307100216010ustar00rootroot00000000000000algo= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false rhoBeg=0.1 x^= [0.1000,0.2000,-0.3000,0.4000] f(x^)= [0.1500] lambda^= [-0.1000] algo= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 x^= [0.1297,-0.1645,-0.6181,-0.3290] f(x^)= [0.2671] lambda^= [-0.1331] algo= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=150 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false rhoBeg=0.1 x^= [-3.0000,-3.0000,5.0000,-3.0000] f(x^)= [-36.0000] lambda^= [-1.0000,-2.0000,0.0000,-4.0000,0.0000,0.0000,-3.0000,0.0000] algo= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=150 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false rhoBeg=0.1 x^= [5.0000,5.0000,-3.0000,5.0000] f(x^)= [44.0000] lambda^= [0.0000,0.0000,3.0000,0.0000,1.0000,2.0000,0.0000,4.0000] openturns-1.9/python/test/t_Cobyla_std.py000077500000000000000000000045271307543307100207160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) format = "%." + str(digits) + "f" for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if m.fabs(point[i]) < eps: oss += sep + format % m.fabs(point[i]) else: oss += sep + format % point[i] sep = "," oss += "]" return oss # linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1+2*x2-3*x3+4*x4"]) startingPoint = ot.Point(4, 0.0) algo = ot.Cobyla(ot.OptimizationProblem(levelFunction, 3.0)) algo.setStartingPoint(startingPoint) print('algo=', algo) algo.run() result = algo.getResult() print('x^=', printPoint(result.getOptimalPoint(), 4)) print('f(x^)=', printPoint(result.getOptimalValue(), 4)) print('lambda^=', printPoint(result.getLagrangeMultipliers(), 4)) # non-linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4"]) startingPoint = ot.Point(4, 0.0) algo = ot.Cobyla(ot.OptimizationProblem(levelFunction, 3.0)) algo.setStartingPoint(startingPoint) algo.setMaximumIterationNumber(400) algo.setMaximumAbsoluteError(1.0e-10) algo.setMaximumRelativeError(1.0e-10) algo.setMaximumResidualError(1.0e-10) algo.setMaximumConstraintError(1.0e-10) algo.run() print('algo=', algo) algo.run() result = algo.getResult() print('x^=', printPoint(result.getOptimalPoint(), 4)) print('f(x^)=', printPoint(result.getOptimalValue(), 4)) print('lambda^=', printPoint(result.getLagrangeMultipliers(), 4)) # bounds linear = ot.Function( ['x1', 'x2', 'x3', 'x4'], ['y1'], ['x1+2*x2-3*x3+4*x4']) dim = 4 startingPoint = [0.] * dim bounds = ot.Interval([-3.] * dim, [5.] * dim) for minimization in [True, False]: problem = ot.OptimizationProblem( linear, ot.Function(), ot.Function(), bounds) problem.setMinimization(minimization) algo = ot.Cobyla(problem) algo.setMaximumIterationNumber(150) algo.setStartingPoint(startingPoint) print('algo=', algo) algo.run() result = algo.getResult() print('x^=', printPoint(result.getOptimalPoint(), 4)) print('f(x^)=', printPoint(result.getOptimalValue(), 4)) print('lambda^=', printPoint(result.getLagrangeMultipliers(), 4)) openturns-1.9/python/test/t_Collection_std.expout000066400000000000000000000001561307543307100224630ustar00rootroot00000000000000[1,2,100,4,5] 5 1 1 2 100 4 5 [0,1,2,3,4,5,6,7,8,9,10,11]#12 [0,1,2,3,4,5,7,8,9,10,11]#11 [[4,8,15,16,23,42]] openturns-1.9/python/test/t_Collection_std.py000077500000000000000000000012041307543307100215650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # We try to use the Collection as a Python object (sequence) ulc1 = ot.UnsignedIntegerCollection((1, 2, 3, 4, 5)) ulc2 = ot.UnsignedIntegerCollection([1, 2, 3, 4, 5]) t = (1, 2, 3, 4, 5) l = [1, 2, 3, 4, 5] ulc3 = ot.UnsignedIntegerCollection(t) ulc4 = ot.UnsignedIntegerCollection(l) ulc1[2] = 100 print(ulc1) print(len(ulc2), ulc2[0]) for ul in ulc1: print(ul) # Large collection, to see its length ul5 = ot.UnsignedIntegerCollection(list(range(12))) print(ul5) del ul5[6] print(ul5) ic4 = ot.IndicesCollection([[4, 8, 15, 16, 23, 42]]) print(ic4) openturns-1.9/python/test/t_CombinatorialGenerator_std.expout000066400000000000000000000130521307543307100250210ustar00rootroot00000000000000generator: class=Tuples name=Unnamed bounds=[4,6,9] subset: [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[0,1,0],[1,1,0],[2,1,0],[3,1,0],[0,2,0],[1,2,0],[2,2,0],[3,2,0],[0,3,0],[1,3,0],[2,3,0],[3,3,0],[0,4,0],[1,4,0],[2,4,0],[3,4,0],[0,5,0],[1,5,0],[2,5,0],[3,5,0],[0,0,1],[1,0,1],[2,0,1],[3,0,1],[0,1,1],[1,1,1],[2,1,1],[3,1,1],[0,2,1],[1,2,1],[2,2,1],[3,2,1],[0,3,1],[1,3,1],[2,3,1],[3,3,1],[0,4,1],[1,4,1],[2,4,1],[3,4,1],[0,5,1],[1,5,1],[2,5,1],[3,5,1],[0,0,2],[1,0,2],[2,0,2],[3,0,2],[0,1,2],[1,1,2],[2,1,2],[3,1,2],[0,2,2],[1,2,2],[2,2,2],[3,2,2],[0,3,2],[1,3,2],[2,3,2],[3,3,2],[0,4,2],[1,4,2],[2,4,2],[3,4,2],[0,5,2],[1,5,2],[2,5,2],[3,5,2],[0,0,3],[1,0,3],[2,0,3],[3,0,3],[0,1,3],[1,1,3],[2,1,3],[3,1,3],[0,2,3],[1,2,3],[2,2,3],[3,2,3],[0,3,3],[1,3,3],[2,3,3],[3,3,3],[0,4,3],[1,4,3],[2,4,3],[3,4,3],[0,5,3],[1,5,3],[2,5,3],[3,5,3],[0,0,4],[1,0,4],[2,0,4],[3,0,4],[0,1,4],[1,1,4],[2,1,4],[3,1,4],[0,2,4],[1,2,4],[2,2,4],[3,2,4],[0,3,4],[1,3,4],[2,3,4],[3,3,4],[0,4,4],[1,4,4],[2,4,4],[3,4,4],[0,5,4],[1,5,4],[2,5,4],[3,5,4],[0,0,5],[1,0,5],[2,0,5],[3,0,5],[0,1,5],[1,1,5],[2,1,5],[3,1,5],[0,2,5],[1,2,5],[2,2,5],[3,2,5],[0,3,5],[1,3,5],[2,3,5],[3,3,5],[0,4,5],[1,4,5],[2,4,5],[3,4,5],[0,5,5],[1,5,5],[2,5,5],[3,5,5],[0,0,6],[1,0,6],[2,0,6],[3,0,6],[0,1,6],[1,1,6],[2,1,6],[3,1,6],[0,2,6],[1,2,6],[2,2,6],[3,2,6],[0,3,6],[1,3,6],[2,3,6],[3,3,6],[0,4,6],[1,4,6],[2,4,6],[3,4,6],[0,5,6],[1,5,6],[2,5,6],[3,5,6],[0,0,7],[1,0,7],[2,0,7],[3,0,7],[0,1,7],[1,1,7],[2,1,7],[3,1,7],[0,2,7],[1,2,7],[2,2,7],[3,2,7],[0,3,7],[1,3,7],[2,3,7],[3,3,7],[0,4,7],[1,4,7],[2,4,7],[3,4,7],[0,5,7],[1,5,7],[2,5,7],[3,5,7],[0,0,8],[1,0,8],[2,0,8],[3,0,8],[0,1,8],[1,1,8],[2,1,8],[3,1,8],[0,2,8],[1,2,8],[2,2,8],[3,2,8],[0,3,8],[1,3,8],[2,3,8],[3,3,8],[0,4,8],[1,4,8],[2,4,8],[3,4,8],[0,5,8],[1,5,8],[2,5,8],[3,5,8]]#216 generator: class=KPermutations name=Unnamed k=4 n=6 subset: [[0,1,2,3],[0,1,3,2],[0,2,1,3],[0,2,3,1],[0,3,1,2],[0,3,2,1],[1,0,2,3],[1,0,3,2],[1,2,0,3],[1,2,3,0],[1,3,0,2],[1,3,2,0],[2,0,1,3],[2,0,3,1],[2,1,0,3],[2,1,3,0],[2,3,0,1],[2,3,1,0],[3,0,1,2],[3,0,2,1],[3,1,0,2],[3,1,2,0],[3,2,0,1],[3,2,1,0],[0,1,2,4],[0,1,4,2],[0,2,1,4],[0,2,4,1],[0,4,1,2],[0,4,2,1],[1,0,2,4],[1,0,4,2],[1,2,0,4],[1,2,4,0],[1,4,0,2],[1,4,2,0],[2,0,1,4],[2,0,4,1],[2,1,0,4],[2,1,4,0],[2,4,0,1],[2,4,1,0],[4,0,1,2],[4,0,2,1],[4,1,0,2],[4,1,2,0],[4,2,0,1],[4,2,1,0],[0,1,2,5],[0,1,5,2],[0,2,1,5],[0,2,5,1],[0,5,1,2],[0,5,2,1],[1,0,2,5],[1,0,5,2],[1,2,0,5],[1,2,5,0],[1,5,0,2],[1,5,2,0],[2,0,1,5],[2,0,5,1],[2,1,0,5],[2,1,5,0],[2,5,0,1],[2,5,1,0],[5,0,1,2],[5,0,2,1],[5,1,0,2],[5,1,2,0],[5,2,0,1],[5,2,1,0],[0,1,3,4],[0,1,4,3],[0,3,1,4],[0,3,4,1],[0,4,1,3],[0,4,3,1],[1,0,3,4],[1,0,4,3],[1,3,0,4],[1,3,4,0],[1,4,0,3],[1,4,3,0],[3,0,1,4],[3,0,4,1],[3,1,0,4],[3,1,4,0],[3,4,0,1],[3,4,1,0],[4,0,1,3],[4,0,3,1],[4,1,0,3],[4,1,3,0],[4,3,0,1],[4,3,1,0],[0,1,3,5],[0,1,5,3],[0,3,1,5],[0,3,5,1],[0,5,1,3],[0,5,3,1],[1,0,3,5],[1,0,5,3],[1,3,0,5],[1,3,5,0],[1,5,0,3],[1,5,3,0],[3,0,1,5],[3,0,5,1],[3,1,0,5],[3,1,5,0],[3,5,0,1],[3,5,1,0],[5,0,1,3],[5,0,3,1],[5,1,0,3],[5,1,3,0],[5,3,0,1],[5,3,1,0],[0,1,4,5],[0,1,5,4],[0,4,1,5],[0,4,5,1],[0,5,1,4],[0,5,4,1],[1,0,4,5],[1,0,5,4],[1,4,0,5],[1,4,5,0],[1,5,0,4],[1,5,4,0],[4,0,1,5],[4,0,5,1],[4,1,0,5],[4,1,5,0],[4,5,0,1],[4,5,1,0],[5,0,1,4],[5,0,4,1],[5,1,0,4],[5,1,4,0],[5,4,0,1],[5,4,1,0],[0,2,3,4],[0,2,4,3],[0,3,2,4],[0,3,4,2],[0,4,2,3],[0,4,3,2],[2,0,3,4],[2,0,4,3],[2,3,0,4],[2,3,4,0],[2,4,0,3],[2,4,3,0],[3,0,2,4],[3,0,4,2],[3,2,0,4],[3,2,4,0],[3,4,0,2],[3,4,2,0],[4,0,2,3],[4,0,3,2],[4,2,0,3],[4,2,3,0],[4,3,0,2],[4,3,2,0],[0,2,3,5],[0,2,5,3],[0,3,2,5],[0,3,5,2],[0,5,2,3],[0,5,3,2],[2,0,3,5],[2,0,5,3],[2,3,0,5],[2,3,5,0],[2,5,0,3],[2,5,3,0],[3,0,2,5],[3,0,5,2],[3,2,0,5],[3,2,5,0],[3,5,0,2],[3,5,2,0],[5,0,2,3],[5,0,3,2],[5,2,0,3],[5,2,3,0],[5,3,0,2],[5,3,2,0],[0,2,4,5],[0,2,5,4],[0,4,2,5],[0,4,5,2],[0,5,2,4],[0,5,4,2],[2,0,4,5],[2,0,5,4],[2,4,0,5],[2,4,5,0],[2,5,0,4],[2,5,4,0],[4,0,2,5],[4,0,5,2],[4,2,0,5],[4,2,5,0],[4,5,0,2],[4,5,2,0],[5,0,2,4],[5,0,4,2],[5,2,0,4],[5,2,4,0],[5,4,0,2],[5,4,2,0],[0,3,4,5],[0,3,5,4],[0,4,3,5],[0,4,5,3],[0,5,3,4],[0,5,4,3],[3,0,4,5],[3,0,5,4],[3,4,0,5],[3,4,5,0],[3,5,0,4],[3,5,4,0],[4,0,3,5],[4,0,5,3],[4,3,0,5],[4,3,5,0],[4,5,0,3],[4,5,3,0],[5,0,3,4],[5,0,4,3],[5,3,0,4],[5,3,4,0],[5,4,0,3],[5,4,3,0],[1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[1,4,3,2],[2,1,3,4],[2,1,4,3],[2,3,1,4],[2,3,4,1],[2,4,1,3],[2,4,3,1],[3,1,2,4],[3,1,4,2],[3,2,1,4],[3,2,4,1],[3,4,1,2],[3,4,2,1],[4,1,2,3],[4,1,3,2],[4,2,1,3],[4,2,3,1],[4,3,1,2],[4,3,2,1],[1,2,3,5],[1,2,5,3],[1,3,2,5],[1,3,5,2],[1,5,2,3],[1,5,3,2],[2,1,3,5],[2,1,5,3],[2,3,1,5],[2,3,5,1],[2,5,1,3],[2,5,3,1],[3,1,2,5],[3,1,5,2],[3,2,1,5],[3,2,5,1],[3,5,1,2],[3,5,2,1],[5,1,2,3],[5,1,3,2],[5,2,1,3],[5,2,3,1],[5,3,1,2],[5,3,2,1],[1,2,4,5],[1,2,5,4],[1,4,2,5],[1,4,5,2],[1,5,2,4],[1,5,4,2],[2,1,4,5],[2,1,5,4],[2,4,1,5],[2,4,5,1],[2,5,1,4],[2,5,4,1],[4,1,2,5],[4,1,5,2],[4,2,1,5],[4,2,5,1],[4,5,1,2],[4,5,2,1],[5,1,2,4],[5,1,4,2],[5,2,1,4],[5,2,4,1],[5,4,1,2],[5,4,2,1],[1,3,4,5],[1,3,5,4],[1,4,3,5],[1,4,5,3],[1,5,3,4],[1,5,4,3],[3,1,4,5],[3,1,5,4],[3,4,1,5],[3,4,5,1],[3,5,1,4],[3,5,4,1],[4,1,3,5],[4,1,5,3],[4,3,1,5],[4,3,5,1],[4,5,1,3],[4,5,3,1],[5,1,3,4],[5,1,4,3],[5,3,1,4],[5,3,4,1],[5,4,1,3],[5,4,3,1],[2,3,4,5],[2,3,5,4],[2,4,3,5],[2,4,5,3],[2,5,3,4],[2,5,4,3],[3,2,4,5],[3,2,5,4],[3,4,2,5],[3,4,5,2],[3,5,2,4],[3,5,4,2],[4,2,3,5],[4,2,5,3],[4,3,2,5],[4,3,5,2],[4,5,2,3],[4,5,3,2],[5,2,3,4],[5,2,4,3],[5,3,2,4],[5,3,4,2],[5,4,2,3],[5,4,3,2]]#360 generator: class=Combinations name=Unnamed k=4 n=6 subset: [[0,1,2,3],[0,1,2,4],[0,1,2,5],[0,1,3,4],[0,1,3,5],[0,1,4,5],[0,2,3,4],[0,2,3,5],[0,2,4,5],[0,3,4,5],[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5]]#15 openturns-1.9/python/test/t_CombinatorialGenerator_std.py000077500000000000000000000004621307543307100241310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot generators = [ ot.Tuples([4, 6, 9]), ot.KPermutations(4, 6), ot.Combinations(4, 6)] for generator in generators: print ('generator:', generator) subsets = generator.generate() print ('subset:', subsets) openturns-1.9/python/test/t_ComparisonOperator_std.expout000066400000000000000000000005631307543307100242200ustar00rootroot00000000000000Less(10,20) = True Less(20,20) = False Less(30,20) = False LessOrEqual(10,20) = True LessOrEqual(20,20) = True LessOrEqual(30,20) = False Equal(10,20) = False Equal(20,20) = True Equal(30,20) = False GreaterOrEqual(10,20) = False GreaterOrEqual(20,20) = True GreaterOrEqual(30,20) = True Greater(10,20) = False Greater(20,20) = False Greater(30,20) = True openturns-1.9/python/test/t_ComparisonOperator_std.py000077500000000000000000000021441307543307100233240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: less = Less() print("Less(10,20) = ", less(10, 20)) print("Less(20,20) = ", less(20, 20)) print("Less(30,20) = ", less(30, 20)) lessOrEqual = LessOrEqual() print("LessOrEqual(10,20) = ", lessOrEqual(10, 20)) print("LessOrEqual(20,20) = ", lessOrEqual(20, 20)) print("LessOrEqual(30,20) = ", lessOrEqual(30, 20)) equal = ComparisonOperator(Equal()) print("Equal(10,20) = ", equal(10, 20)) print("Equal(20,20) = ", equal(20, 20)) print("Equal(30,20) = ", equal(30, 20)) greaterOrEqual = GreaterOrEqual() print("GreaterOrEqual(10,20) = ", greaterOrEqual(10, 20)) print("GreaterOrEqual(20,20) = ", greaterOrEqual(20, 20)) print("GreaterOrEqual(30,20) = ", greaterOrEqual(30, 20)) greater = Greater() print("Greater(10,20) = ", greater(10, 20)) print("Greater(20,20) = ", greater(20, 20)) print("Greater(30,20) = ", greater(30, 20)) except: import sys print("t_ComparisonOperator_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComplexMatrix_std.expout000066400000000000000000000064711307543307100231720ustar00rootroot00000000000000test 0 : default constructor and string converter matrix0 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter matrix1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(2,4),(3,-1),(4,0)] test 2 : copy constructor and string converter matrix2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(2,4),(3,-1),(4,0)] test 3 : dimension methods matrix1's nbRows = 2 matrix1's nbColumns = 2 test 4 : constructor with collection method elementsValues = [(1,-1),(2,-1),(3,-1),(4,1),(5,1),(6,1)] matrix0bis = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(2,-1),(3,-1),(4,1)] test 5 : transposition / conjugate method matrix1 transposed = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(3,-1),(2,4),(4,0)] matrix1 conjugated = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(2,-4),(3,1),(4,-0)] transposition and conjugate method matrix1 conjugated and transposed = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(3,1),(2,-4),(4,-0)] test 6 : addition method sum1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,2),(5,3),(5,3),(8,0)] sum2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,2),(5,3),(5,3),(8,0)] sum1 equals sum2 = True test 7 : substraction method diff = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(-1,5),(1,-5),(0,0)] test 8 : matrix multiplication method prod = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(8,-4),(10,2),(10,2),(4,16)] test 9 : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(7,-1),(10,4)] test 10 : multiplication and division by a numerical scalar methods scalprod1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,4),(2,14),(10,0),(12,4)] scaldiv1 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.4,0.2),(1,1),(0.8,-0.6),(1.2,-0.4)] test 10 : isEmpty method matrix1 is empty = False matrix5 is empty = True matrix6 is empty = True matrix0 is empty = True test 11 : multiplication with a numerical point method pt_test = class=Point name=Unnamed dimension=2 values=[1,2] A = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,0),(-0.866025,0),(0.866025,0),(0.5,0)] B = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,0),(0.866025,0),(-0.866025,0),(0.5,0)] identity = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(0,0),(0,0),(1,0)] ptResult2 = [(1,0),(2,0)] openturns-1.9/python/test/t_ComplexMatrix_std.py000077500000000000000000000114051307543307100222720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test 0 : default constructor and string converter") # Default constructor matrix0 = ComplexMatrix() # String converter print("matrix0 = ", repr(matrix0)) # CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size matrix1 = ComplexMatrix(2, 2) # Check operator() methods matrix1[0, 0] = 1. + 1j matrix1[1, 0] = 2. + 4j matrix1[0, 1] = 3. - 1j matrix1[1, 1] = 4. # String converter print("matrix1 = ", repr(matrix1)) # COPY CONSTRUCTOR AND STRING CONVERTER print("test 2 : copy constructor and string converter") # Copy constructor matrix2 = ComplexMatrix(matrix1) # String converter print("matrix2 = ", repr(matrix2)) # GET DIMENSIONS METHODS print("test 3 : dimension methods") # Get dimension methods print("matrix1's nbRows = ", matrix1.getNbRows()) print("matrix1's nbColumns = ", matrix1.getNbColumns()) # CONSTRUCTOR WITH COLLECTION print("test 4 : constructor with collection method") # Create the collection of values elementsValues = ComplexCollection() elementsValues.add(1. - 1j) elementsValues.add(2. - 1j) elementsValues.add(3. - 1j) elementsValues.add(4. + 1j) elementsValues.add(5. + 1j) elementsValues.add(6. + 1j) # Check the content of the collection print("elementsValues = ", repr(elementsValues)) # Check the constructor with collection matrix0bis = ComplexMatrix(2, 2, elementsValues) print("matrix0bis = ", repr(matrix0bis)) # TRANSPOSITION METHOD AND CONJUGATE METHOD print("test 5 : transposition / conjugate method") # Check transpose method matrix4 = matrix1.transpose() matrix5 = matrix1.conjugate() print("matrix1 transposed = ", repr(matrix4)) print("matrix1 conjugated = ", repr(matrix5)) # TRANSPOSITION AND CONJUGATE COUPLED METHOD print("transposition and conjugate method") # Check transpose method matrix6 = matrix1.conjugateTranspose() print("matrix1 conjugated and transposed = ", repr(matrix6)) # ADDITION METHOD print("test 6 : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = matrix1 + matrix4 sum2 = matrix4 + matrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # SUBSTRACTION METHOD print("test 7 : substraction method") # Check substraction method diff = matrix1 - matrix4 print("diff = ", repr(diff)) # MATRIX MULTIPLICATION METHOD print("test 8 : matrix multiplication method") # Check multiplication method prod = matrix1 * matrix4 print("prod = ", repr(prod)) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test 9 : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = matrix1 * pt print("ptResult = ", repr(ptResult)) # MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS print( "test 10 : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. + 1j scalprod1 = matrix1 * s print("scalprod1 = ", repr(scalprod1)) # Check the division method scaldiv1 = matrix1 / s print("scaldiv1 = ", repr(scaldiv1)) # ISEMPTY METHOD print("test 10 : isEmpty method") # Check method isEmpty matrix7 = ComplexMatrix() matrix8 = ComplexMatrix() print("matrix1 is empty = ", matrix1.isEmpty()) print("matrix5 is empty = ", matrix7.isEmpty()) print("matrix6 is empty = ", matrix8.isEmpty()) print("matrix0 is empty = ", matrix0.isEmpty()) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test 11 : multiplication with a numerical point method") # Create the numerical point pt_test = Point() pt_test.add(1.) pt_test.add(2.) print("pt_test = ", repr(pt_test)) A = ComplexMatrix(2, 2) A[0, 0] = 0.5 A[1, 0] = -(sqrt(3.) / 2) A[0, 1] = (sqrt(3.) / 2) A[1, 1] = 0.5 B = A.transpose() identity = B * A # Check the product method ptResult2 = identity * pt_test print("A = ", repr(A)) print("B = ", repr(B)) print("identity = ", repr(identity)) print("ptResult2 = ", repr(ptResult2)) except: import sys print("t_ComplexMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComplexTensor_std.expout000066400000000000000000000041021307543307100231650ustar00rootroot00000000000000test number zero : default constructor and string converter tensor0 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] values = (1.000000, 0.100000j) (2.000000, 0.200000j) (3.000000, 0.300000j) (4.000000, 0.400000j) (5.000000, 0.500000j) (6.000000, 0.600000j) (7.000000, 0.700000j) (8.000000, 0.800000j) (9.000000, 0.900000j) (10.000000, 1.000000j) (11.000000, 1.100000j) (12.000000, 1.200000j) test number two : copy constructor and string converter tensor2 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] test number three : get dimensions methods tensor1's nbRows = 2 tensor1's nbColumns = 2 tensor1's nbSheets = 3 test number four : assignment method test number five : isEmpty method tensor1 is empty = False tensor0 is empty = True tensor5 is empty = True tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(5,0.5),(6,0.6),(7,0.7),(8,0.8),(9,0.9),(10,1),(11,1.1),(12,1.2)] tensor1.getSheet(1) = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(5,0.5),(6,0.6),(7,0.7),(8,0.8)] sheet2 = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.5,-0.5),(0.6,-0.5),(0.7,-0.5),(0.8,-0.5)] tensor1 = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[(1,0.1),(2,0.2),(3,0.3),(4,0.4),(0.5,-0.5),(0.6,-0.5),(0.7,-0.5),(0.8,-0.5),(9,0.9),(10,1),(11,1.1),(12,1.2)] openturns-1.9/python/test/t_ComplexTensor_std.py000077500000000000000000000065771307543307100223160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor tensor0 = ComplexTensor() # String converter print("tensor0 = ", repr(tensor0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size tensor1 = ComplexTensor(2, 2, 3) # Check operator() methods tensor1[0, 0, 0] = 1 + 0.1j tensor1[1, 0, 0] = 2 + 0.2j tensor1[0, 1, 0] = 3 + 0.3j tensor1[1, 1, 0] = 4 + 0.4j tensor1[0, 0, 1] = 5 + 0.5j tensor1[1, 0, 1] = 6 + 0.6j tensor1[0, 1, 1] = 7 + 0.7j tensor1[1, 1, 1] = 8 + 0.8j tensor1[0, 0, 2] = 9 + 0.9j tensor1[1, 0, 2] = 10 + 1.0j tensor1[0, 1, 2] = 11 + 1.1j tensor1[1, 1, 2] = 12 + 1.2j # String converter print("tensor1 = ", repr(tensor1)) print("values = (%.6f, %.6fj)" % (tensor1[0, 0, 0].real, tensor1[0, 0, 0].imag), " (%.6f, %.6fj)" % (tensor1[1, 0, 0].real, tensor1[1, 0, 0].imag), " (%.6f, %.6fj)" % (tensor1[0, 1, 0].real, tensor1[0, 1, 0].imag), " (%.6f, %.6fj)" % (tensor1[1, 1, 0].real, tensor1[1, 1, 0].imag), " (%.6f, %.6fj)" % (tensor1[0, 0, 1].real, tensor1[0, 0, 1].imag), " (%.6f, %.6fj)" % (tensor1[1, 0, 1].real, tensor1[ 1, 0, 1].imag), " (%.6f, %.6fj)" % (tensor1[0, 1, 1].real, tensor1[0, 1, 1].imag), " (%.6f, %.6fj)" % (tensor1[1, 1, 1].real, tensor1[1, 1, 1].imag), " (%.6f, %.6fj)" % (tensor1[0, 0, 2].real, tensor1[0, 0, 2].imag), " (%.6f, %.6fj)" % (tensor1[1, 0, 2].real, tensor1[1, 0, 2].imag), " (%.6f, %.6fj)" % (tensor1[0, 1, 2].real, tensor1[0, 1, 2].imag), " (%.6f, %.6fj)" % (tensor1[1, 1, 2].real, tensor1[1, 1, 2].imag)) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER print("test number two : copy constructor and string converter") # Copy constructor tensor2 = (tensor1) # String converter print("tensor2 = ", repr(tensor2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS print("test number three : get dimensions methods") # Get dimension methods print("tensor1's nbRows = ", tensor1.getNbRows(), end=' ') print("tensor1's nbColumns = ", tensor1.getNbColumns()) print("tensor1's nbSheets = ", tensor1.getNbSheets()) # TEST NUMBER FOUR : ASSIGNMENT METHOD print("test number four : assignment method") # TEST NUMBER FIVE : ISEMPTY METHOD print("test number five : isEmpty method") # Check method isEmpty tensor5 = ComplexTensor() print("tensor1 is empty = ", tensor1.isEmpty()) print("tensor0 is empty = ", tensor0.isEmpty()) print("tensor5 is empty = ", tensor5.isEmpty()) # TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS print("tensor1 = ", repr(tensor1)) # ComplexMatrix sheet1(tensor1.getSheet(1)) print("tensor1.getSheet(1) = ", repr(tensor1.getSheet(1))) sheet2 = ComplexMatrix(2, 2) sheet2[0, 0] = 0.5 - 0.5j sheet2[1, 0] = 0.6 - 0.5j sheet2[0, 1] = 0.7 - 0.5j sheet2[1, 1] = 0.8 - 0.5j print("sheet2 = ", repr(sheet2)) tensor1.setSheet(1, sheet2) print("tensor1 = ", repr(tensor1)) except: import sys print("t_ComplexTensor_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComposedCopula_std.expout000066400000000000000000000126461307543307100233140ustar00rootroot00000000000000Copula class=ComposedCopula name=ComposedCopula dimension=7 copula[0]=class=FrankCopula name=FrankCopula dimension=2 theta=3 copula[1]=class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0.25,0.5,1,0,0.25,0,1] copula[2]=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 Copula ComposedCopula(FrankCopula(theta = 3), NormalCopula(R = [[ 1 0.5 0.25 ] [ 0.5 1 0 ] [ 0.25 0 1 ]]), ClaytonCopula(theta = 2)) Elliptical distribution= False Continuous = True Elliptical = False Independent = False oneRealization= class=Point name=Unnamed dimension=7 values=[0.629877,0.893758,0.102726,0.155617,0.816172,0.0632061,0.0560402] oneSample first= class=Point name=Unnamed dimension=7 values=[0.714382,0.535485,0.361292,0.857057,0.68437,0.684575,0.881797] last= class=Point name=Unnamed dimension=7 values=[0.791736,0.439906,0.167406,0.184528,0.064039,0.0580909,0.0426336] mean= class=Point name=Unnamed dimension=7 values=[0.499089,0.499413,0.497874,0.501718,0.499415,0.50039,0.499583] covariance= class=CovarianceMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[0.0852147,0.039409,-0.00137053,-0.00121037,1.81336e-05,0.00156707,0.00146308,0.039409,0.0838797,-0.00165553,-0.000669886,0.000708745,0.00204537,0.0015296,-0.00137053,-0.00165553,0.0831566,0.0407169,0.0200307,0.000666704,-0.00105049,-0.00121037,-0.000669886,0.0407169,0.0830004,2.41466e-06,-0.000754962,-0.00126905,1.81336e-05,0.000708745,0.0200307,2.41466e-06,0.0851139,0.000302005,-0.000421039,0.00156707,0.00204537,0.000666704,-0.000754962,0.000302005,0.0835141,0.057349,0.00146308,0.0015296,-0.00105049,-0.00126905,-0.000421039,0.057349,0.0838099] Point= class=Point name=Unnamed dimension=7 values=[0.6,0.6,0.6,0.6,0.6,0.6,0.6] ddf = class=Point name=Unnamed dimension=7 values=[0.580905,0.580905,0.91183,0.260523,0.130261,0.177648,0.177648] pdf =2.185069 cdf=0.058797 quantile= class=Point name=Unnamed dimension=7 values=[0.992521,0.992521,0.992521,0.992521,0.992521,0.992521,0.992521] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=7 values=[0.00832738,0.00832738,0.00832738,0.00832738,0.00832738,0.00832738,0.00832738] Survival(inverseSurvival)=0.950000 mean= class=Point name=Unnamed dimension=7 values=[0.5,0.5,0.5,0.5,0.5,0.5,0.5] covariance= class=CovarianceMatrix dimension=7 implementation=class=MatrixImplementation name=Unnamed rows=7 columns=7 values=[0.0833333,0.0373929,0,0,0,0,0,0.0373929,0.0833333,0,0,0,0,0,0,0,0.0833333,0.0402153,0.0199465,0,0,0,0,0.0402153,0.0833333,0,0,0,0,0,0.0199465,0,0.0833333,0,0,0,0,0,0,0,0.0833333,0.0568528,0,0,0,0,0,0.0568528,0.0833333] parameters= [class=PointWithDescription name=ComposedCopula dimension=5 description=[copula_0_theta,copula_1_R_2_1,copula_1_R_3_1,copula_1_R_3_2,copula_2_theta] values=[3,0.5,0.25,0,2]] indices= [1,2,3,5,6] margins= class=ComposedCopula name=ComposedCopula dimension=5 copula[0]=class=IndependentCopula name=IndependentCopula dimension=1 copula[1]=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] copula[2]=class=ClaytonCopula name=ClaytonCopula dimension=2 theta=2 margins PDF=3.086065 margins CDF=0.005401 margins quantile= class=Point name=Unnamed dimension=5 values=[0.989493,0.989493,0.989493,0.989493,0.989493] margins CDF(quantile)=0.950000 margins realization= class=Point name=Unnamed dimension=5 values=[0.374352,0.645016,0.316395,0.102431,0.120505] isoprobabilistic transformation (general normal)= [(RosenblattEvaluation(FrankCopula(theta = 3)->Normal(2))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1]),(NatafEllipticalCopulaEvaluation(Copula(cholesky=[[ 1 0 0 ] [ -0.57735 1.1547 0 ] [ -0.348155 0.174078 1.04447 ]], E=Normal(mu = 0, sigma = 1))->Normal(mu = [0,0,0], sigma = [1,1,1], R = [[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]])))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1,x2]),(RosenblattEvaluation(ClaytonCopula(theta = 2)->Normal(2))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1])] isoprobabilistic transformation (general non-normal)= [(RosenblattEvaluation(class=SklarCopula name=SklarCopula dimension=2 distribution=class=Student name=Student dimension=2 nu=3 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1]->Normal(2))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1]),(NatafEllipticalCopulaEvaluation(Copula(cholesky=[[ 1 0 0 ] [ -0.57735 1.1547 0 ] [ -0.348155 0.174078 1.04447 ]], E=Normal(mu = 0, sigma = 1))->Normal(mu = [0,0,0], sigma = [1,1,1], R = [[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]])))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1,x2]),(RosenblattEvaluation(ClaytonCopula(theta = 2)->Normal(2))o([x0,x1,x2,x3,x4,x5,x6]->[x0,x1])] isoprobabilistic transformation (independent)= NatafIndependentCopulaEvaluation(IndependentCopula(6)->Normal(6)) isoprobabilistic transformation (single contributor)= (class=LinearEvaluation name=Unnamed center=[1,1] constant=[0,0] linear=[[ 0.333333 0 ] [ 0 0.333333 ]])o(| y0 = Uniform(a = 0, b = 1) -> y0 : Student(nu = 3, mu = 1, sigma = 3) | y1 = Uniform(a = 0, b = 1) -> y1 : Student(nu = 3, mu = 1, sigma = 3) ) openturns-1.9/python/test/t_ComposedCopula_std.py000077500000000000000000000130431307543307100224130ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object R = CorrelationMatrix(3) R[0, 1] = 0.5 R[0, 2] = 0.25 collection = [FrankCopula(3.0), NormalCopula(R), ClaytonCopula(2.0)] copula = ComposedCopula(collection) print("Copula ", repr(copula)) print("Copula ", copula) # Is this copula elliptical ? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula continuous ? print("Continuous = ", copula.isContinuous()) # Is this copula elliptical ? print("Elliptical = ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent = ", copula.hasIndependentCopula()) # Test for realization of copula oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = copula.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(copula.getDimension(), 0.6) print("Point= ", repr(point)) # Show PDF and CDF of point # Scalar eps(1e-5) DDF = copula.computeDDF(point) print("ddf =", repr(DDF)) PDF = copula.computePDF(point) print("pdf =%.6f" % PDF) CDF = copula.computeCDF(point) print("cdf=%.6f" % CDF) # Point PDFgr = copula.computePDFGradient( point ) # print "pdf gradient =", PDFgr # Point CDFgr = copula.computeCDFGradient( point ) # print "cdf gradient =", CDFgr quantile = copula.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions if copula.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", copula.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = copula.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", copula.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", copula.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", copula.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) mean = copula.getMean() print("mean=", repr(mean)) covariance = copula.getCovariance() print("covariance=", repr(covariance)) parameters = copula.getParametersCollection() print("parameters=", repr(parameters)) # Specific to this copula # Extract a 5-D marginal dim = 5 point = Point(dim, 0.25) indices = Indices(dim, 0) indices[0] = 1 indices[1] = 2 indices[2] = 3 indices[3] = 5 indices[4] = 6 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(point)) print("margins CDF=%.6f" % margins.computeCDF(point)) quantile = margins.computeQuantile(0.95) print("margins quantile=", repr(quantile)) print("margins CDF(quantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) # Tests the isoprobabilistic transformation # General case with normal standard distribution print("isoprobabilistic transformation (general normal)=", copula.getIsoProbabilisticTransformation()) # General case with non-normal standard distribution collection[0] = SklarCopula(Student( 3.0, Point(2, 1.0), Point(2, 3.0), CorrelationMatrix(2))) copula = ComposedCopula(collection) print("isoprobabilistic transformation (general non-normal)=", copula.getIsoProbabilisticTransformation()) # Special case, independent copula collection[0] = SklarCopula(Normal(2)) collection[1] = IndependentCopula(2) collection[2] = NormalCopula(CorrelationMatrix(2)) copula = ComposedCopula(collection) print("isoprobabilistic transformation (independent)=", copula.getIsoProbabilisticTransformation()) # Special case, single contributor collection = [SklarCopula(Student( 3.0, Point(2, 1.0), Point(2, 3.0), CorrelationMatrix(2)))] copula = ComposedCopula(collection) print("isoprobabilistic transformation (single contributor)=", copula.getIsoProbabilisticTransformation()) # test CopulaCollection copulas = CopulaCollection( [FrankCopula(3.0), NormalCopula(R), ClaytonCopula(2.0)]) test_distribution = ComposedDistribution([Normal(), Normal()]) sample_size = 10 sample = test_distribution.getSample(sample_size) myEstimatedDist = KernelSmoothing().build(sample) sklarCopula = myEstimatedDist.getCopula() copulas.add(sklarCopula) except: import sys print("t_ComposedCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComposedDistribution_large.expout000066400000000000000000000362101307543307100250410ustar00rootroot00000000000000Creating a composed distribution of dimension 2000 Distribution created. Elliptical = True Elliptical copula = True Independent copula = True pdf=0.000000 cdf=0.000000 Quantile= class=Point name=Unnamed dimension=2000 values=[13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149,13.149] CDF(quantile)=0.950000 indices= [1,0] margins= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margins PDF=0.015824 margins CDF=0.136487 margins quantile= class=Point name=Unnamed dimension=2 values=[2.63486,2.63486] margins CDF(qantile)=0.500000 margins realization= class=Point name=Unnamed dimension=2 values=[-0.497945,0.0659895] margins sample mean= class=Point name=Unnamed dimension=2 values=[1.09997,1.01432] margins sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[8.58804,0.625979,0.625979,9.07836] openturns-1.9/python/test/t_ComposedDistribution_large.py000077500000000000000000000046711307543307100241560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: meanPoint = Point(1) meanPoint[0] = 1.0 sigma = Point(1) sigma[0] = 3.0 R = CorrelationMatrix(1) R[0, 0] = 1.0 # Create a collection of distribution dimension = 2000 print("Creating a composed distribution of dimension ", dimension) aCollection = DistributionCollection( dimension, Normal(meanPoint, sigma, R)) for i in range(dimension): aCollection[i] = Normal(meanPoint, sigma, R) # Create a a copula aCopula = IndependentCopula(dimension) # Instanciate one distribution object distribution = ComposedDistribution(aCollection, aCopula) print("Distribution created.") # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Has this distribution an elliptical copula? print("Elliptical copula = ", distribution.hasEllipticalCopula()) # Has this distribution an independent copula? print("Independent copula = ", distribution.hasIndependentCopula()) # Test for sampling size = 10 anotherSample = distribution.getSample(size) # Define a point zero = Point(dimension, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print(" pdf=%.6f" % zeroPDF, " cdf=%.6f" % zeroCDF) # Get 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % distribution.computeCDF(quantile)) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = distribution.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2))) print("margins CDF=%.6f" % margins.computeCDF(Point(2))) quantile = Point(margins.computeQuantile(0.5)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) sample = margins.getSample(1000) print("margins sample mean=", repr(sample.computeMean())) print("margins sample covariance=", repr(sample.computeCovariance())) except: import sys print("t_ComposedDistribution_large.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComposedDistribution_std.expout000066400000000000000000000234621307543307100245460ustar00rootroot00000000000000Copula = class=IndependentCopula name=Independent copula dimension=3 Copula = IndependentCopula(dimension = 3) Distribution = class=ComposedDistribution name=myDist dimension=3 copula=class=IndependentCopula name=Independent copula dimension=3 marginal[0]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution = ComposedDistribution(Normal(mu = 1, sigma = 2), Normal(mu = 2, sigma = 3), Normal(mu = 3, sigma = 4), IndependentCopula(dimension = 3)) Parameters = [class=PointWithDescription name=One dimension=2 description=[mean_0_marginal_0,standard_deviation_0_marginal_0] values=[1,2],class=PointWithDescription name=Two dimension=2 description=[mean_0_marginal_1,standard_deviation_0_marginal_1] values=[2,3],class=PointWithDescription name=Three dimension=2 description=[mean_0_marginal_2,standard_deviation_0_marginal_2] values=[3,4],class=PointWithDescription name=Independent copula dimension=0 description=[] values=[]] Mean = class=Point name=Unnamed dimension=3 values=[1,2,3] Covariance = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,0,0,0,9,0,0,0,16] Elliptical = True Elliptical copula = True Independent copula = True oneRealization= class=Point name=Unnamed dimension=3 values=[2.2164,-1.7985,1.2469] oneSample= class=Sample name=myDist implementation=class=SampleImplementation name=myDist size=10 dimension=3 description=[One,Two,Three] data=[[3.411,-1.8487,-0.42685],[-3.3628,-1.9353,4.8945],[1.7001,1.7276,2.498],[0.28999,4.9874,4.4057],[3.8745,1.5816,10.129],[2.6213,0.31938,3.2808],[2.5863,3.3365,-0.12547],[0.058949,2.9688,0.11387],[1.522,3.3374,2.0351],[-3.5801,-1.1142,-4.1519]] anotherSample mean= class=Point name=Unnamed dimension=3 values=[0.97424,2.0042,2.9816] anotherSample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.0088,-0.0041128,-0.046658,-0.0041128,8.9978,-0.0023047,-0.046658,-0.0023047,16.294] Zero point= class=Point name=Unnamed dimension=3 values=[0,0,0] pdf=0.001411 cdf=0.017655 Quantile= class=Point name=Unnamed dimension=3 values=[5.2424,8.3636,11.485] CDF(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[-3.2424,-4.3636,-5.4848] Survival(inverseSurvival)=0.950000 Reference= Zero point= class=Point name=Unnamed dimension=3 values=[0,0,0] pdf= 0.001411 cdf= 0.017655 quantile= class=Point name=Unnamed dimension=3 values=[5.2424,8.3636,11.485] margin= class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.176033 margin CDF=0.308538 margin quantile= class=Point name=Unnamed dimension=1 values=[1] margin realization= class=Point name=Unnamed dimension=1 values=[-0.25313] margin= class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.106483 margin CDF=0.252493 margin quantile= class=Point name=Unnamed dimension=1 values=[2] margin realization= class=Point name=Unnamed dimension=1 values=[1.6826] margin= class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.075284 margin CDF=0.226627 margin quantile= class=Point name=Unnamed dimension=1 values=[3] margin realization= class=Point name=Unnamed dimension=1 values=[4.1999] indices= [1,0] margins= class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margins PDF=0.018744 margins CDF=0.077903 margins quantile= class=Point name=Unnamed dimension=2 values=[3.6349,2.0899] margins CDF(qantile)=0.500000 margins realization= class=Point name=Unnamed dimension=2 values=[2.8045,-2.4028] Distribution class=ComposedDistribution name=myDist dimension=3 copula=class=NormalCopula name=Normal copula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] marginal[0]=class=Normal name=First dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Second dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[2]=class=Normal name=Third dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Parameters [class=PointWithDescription name=One dimension=2 description=[mean_0_marginal_0,standard_deviation_0_marginal_0] values=[1,2],class=PointWithDescription name=Two dimension=2 description=[mean_0_marginal_1,standard_deviation_0_marginal_1] values=[2,3],class=PointWithDescription name=Three dimension=2 description=[mean_0_marginal_2,standard_deviation_0_marginal_2] values=[3,4],class=PointWithDescription name=Normal copula dimension=3 description=[R_2_1_copula,R_3_1_copula,R_3_2_copula] values=[0.25,0,0.25]] PDF =0.001754 PDF (ref)=0.001754 CDF =0.033495 CDF (ref)=0.033495 Survival =0.439015 Survival (ref)=0.439015 Quantile = class=Point name=Unnamed dimension=3 values=[5.2177,8.3266,11.435] Quantile (ref)= class=Point name=Unnamed dimension=3 values=[5.2177,8.3266,11.435] CDF(quantile)=0.950000 Mean = class=Point name=Unnamed dimension=3 values=[1,2,3] Mean (ref)= class=Point name=Unnamed dimension=3 values=[1,2,3] Standard deviation = class=Point name=Unnamed dimension=3 values=[2,3,4] Standard deviation (ref)= class=Point name=Unnamed dimension=3 values=[2,3,4] Skewness = class=Point name=Unnamed dimension=3 values=[0,0,0] Skewness (ref)= class=Point name=Unnamed dimension=3 values=[0,0,0] Kurtosis = class=Point name=Unnamed dimension=3 values=[3,3,3] Kurtosis (ref)= class=Point name=Unnamed dimension=3 values=[3,3,3] Covariance = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,1.5,0,1.5,9,3,0,3,16] Covariance (ref)= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,1.5,0,1.5,9,3,0,3,16] anotherSample mean= class=Point name=Unnamed dimension=3 values=[1.0094,1.9591,3.022] anotherSample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.9732,1.4789,-0.076027,1.4789,9.0962,3.047,-0.076027,3.047,16.185] [ One Two Three ] 0 : [ 4.887 3.7096 3.7362 ] 1 : [ 0.9532 5.5558 -2.5108 ] 2 : [ 2.3698 4.1569 2.7642 ] 3 : [ -0.46209 2.179 5.6653 ] 4 : [ 3.0681 -3.9101 -1.0432 ] 5 : [ -1.3555 -8.0808 -1.865 ] 6 : [ 0.012627 0.41961 7.5117 ] 7 : [ 0.64198 1.6486 -8.6943 ] 8 : [ -0.095161 3.6142 1.7054 ] 9 : [ 1.5687 2.3176 4.3751 ] 0 : [ 1.9435 0.086756 0.16731 ] 1 : [ -0.023402 1.2302 -1.7548 ] 2 : [ 0.68489 0.5657 -0.21222 ] 3 : [ -0.73105 0.25036 0.62279 ] 4 : [ 1.034 -2.3016 -0.43114 ] 5 : [ -1.1777 -3.1664 -0.41268 ] 6 : [ -0.49369 -0.4166 1.2788 ] 7 : [ -0.17901 -0.074757 -3.0062 ] 8 : [ -0.54758 0.6971 -0.52131 ] 9 : [ 0.28437 0.035925 0.34625 ] 0 : [ 4.887 3.7096 3.7362 ] 1 : [ 0.9532 5.5558 -2.5108 ] 2 : [ 2.3698 4.1569 2.7642 ] 3 : [ -0.46209 2.179 5.6653 ] 4 : [ 3.0681 -3.9101 -1.0432 ] 5 : [ -1.3555 -8.0808 -1.865 ] 6 : [ 0.012627 0.41961 7.5117 ] 7 : [ 0.64198 1.6486 -8.6943 ] 8 : [ -0.095161 3.6142 1.7054 ] 9 : [ 1.5687 2.3176 4.3751 ] openturns-1.9/python/test/t_ComposedDistribution_std.py000077500000000000000000000203751307543307100236550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: PlatformInfo.SetNumericalPrecision(5) mean = Point(3) mean[0] = 1.0 mean[1] = 2.0 mean[2] = 3.0 sigma = Point(3) sigma[0] = 2.0 sigma[1] = 3.0 sigma[2] = 4.0 # Create a collection of distribution attente TUI aCollection = [] try: aCollection[10] = Normal() except: pass # Create a marginal : distribution 1D marginal = Normal(mean[0], sigma[0]) marginal.setName("First") component = Description(1) component[0] = "One" marginal.setDescription(component) # Fill the first marginal of aCollection aCollection.append(Distribution(marginal)) aCollection[0].setName("First") # Create a second marginal : distribution 1D marginal = Normal(mean[1], sigma[1]) marginal.setName("Second") component[0] = "Two" marginal.setDescription(component) # Fill the second marginal of aCollection aCollection.append(Distribution(marginal)) aCollection[1].setName("Second") # Create a third marginal : distribution 1D marginal = Normal(mean[2], sigma[2]) marginal.setName("Third") component[0] = "Three" marginal.setDescription(component) # Fill the third marginal of aCollection aCollection.append(Distribution(marginal)) aCollection[2].setName("Third") # Create a copula : IndependentCopula dim = len(aCollection) aCopula = IndependentCopula(dim) aCopula.setName("Independent copula") print("Copula = ", repr(aCopula)) print("Copula = ", aCopula) # Instanciate one distribution object distribution = ComposedDistribution(aCollection, aCopula) distribution.setName("myDist") print("Distribution = ", repr(distribution)) print("Distribution = ", distribution) print("Parameters = ", repr(distribution.getParametersCollection())) print("Mean = ", repr(distribution.getMean())) print("Covariance = ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Has this distribution an elliptical copula? print("Elliptical copula = ", distribution.hasEllipticalCopula()) # Has this distribution an independent copula? print("Independent copula = ", distribution.hasIndependentCopula()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = distribution.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = distribution.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point zero = Point(dim, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point= ", repr(zero), " pdf=%.6f" % zeroPDF, " cdf=%.6f" % zeroCDF) # Get 95% quantile quantile = Point(distribution.computeQuantile(0.95)) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions if distribution.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", distribution.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = distribution.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", distribution.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", distribution.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", distribution.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) # Reference : Normal nD, correlation matrix = identity ref = Normal(mean, sigma, CorrelationMatrix(dim)) print("Reference=") print("Zero point= ", repr(zero), " pdf= %.6f" % ref.computePDF(zero), " cdf= %.6f" % ref.computeCDF(zero), " quantile= ", repr(ref.computeQuantile(0.95))) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1))) print("margin CDF=%.6f" % margin.computeCDF(Point(1))) print("margin quantile=", repr(margin.computeQuantile(0.5))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = distribution.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2))) print("margins CDF=%.6f" % margins.computeCDF(Point(2))) quantile = Point(margins.computeQuantile(0.5)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) # # With a Normal copula correlation = CorrelationMatrix(dim) for i in range(1, dim): correlation[i - 1, i] = 0.25 anotherCopula = NormalCopula(correlation) anotherCopula.setName("Normal copula") # Instanciate one distribution object distribution = ComposedDistribution(aCollection, anotherCopula) distribution.setName("myDist") distributionRef = Normal(mean, sigma, correlation) print("Distribution ", repr(distribution)) print("Parameters ", repr(distribution.getParametersCollection())) # Show PDF and CDF at point point = Point(dim, 0.0) print("PDF =%.6f" % distribution.computePDF(point)) print("PDF (ref)=%.6f" % distributionRef.computePDF(point)) print("CDF =%.6f" % distribution.computeCDF(point)) print("CDF (ref)=%.6f" % distributionRef.computeCDF(point)) print("Survival =%.6f" % distribution.computeSurvivalFunction(point)) print("Survival (ref)=%.6f" % distributionRef.computeSurvivalFunction(point)) # 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile =", repr(quantile)) print("Quantile (ref)=", repr(distributionRef.computeQuantile(0.95))) print("CDF(quantile)=%.6f" % distribution.computeCDF(quantile)) print("Mean =", repr(distribution.getMean())) print("Mean (ref)=", repr(distributionRef.getMean())) print("Standard deviation =", repr( distribution.getStandardDeviation())) print("Standard deviation (ref)=", repr( distributionRef.getStandardDeviation())) print("Skewness =", repr(distribution.getSkewness())) print("Skewness (ref)=", repr(distributionRef.getSkewness())) print("Kurtosis =", repr(distribution.getKurtosis())) print("Kurtosis (ref)=", repr(distributionRef.getKurtosis())) print("Covariance =", repr(distribution.getCovariance())) print("Covariance (ref)=", repr(distributionRef.getCovariance())) anotherSample = distribution.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # test transfo sample = distribution.getSample(10) print(sample) sample_iso = distribution.getIsoProbabilisticTransformation()(sample) print(sample_iso) sample_inv = distribution.getInverseIsoProbabilisticTransformation()( sample_iso) print(sample_inv) except: import sys print("t_ComposedDistribution_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ComposedFunction_std.expout000066400000000000000000000111141307543307100236430ustar00rootroot00000000000000right= class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] left= class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] composed= class=ComposedFunction name=Unnamed description=[x1,x2,x3,x4,y0,y1,y2] left function=class=FunctionImplementation name=Unnamed description=[x1,x2,y0,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y0,y1,y2] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] right function=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y0,y1] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] x= class=Point name=Unnamed dimension=4 values=[1,1,1,1] y=right(x)= class=Point name=Unnamed dimension=2 values=[0.5,-0.138716] z=left(y)= class=Point name=Unnamed dimension=3 values=[-0.0691356,0.935444,1.87405] left(right(x))= class=Point name=Unnamed dimension=3 values=[-0.0691356,0.935444,1.87405] D(right)(x)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0.75,0.75,-0.5,-0.5,0.0924771,-0.606198,0.184954,-0.303099] D(left)(y)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[-0.138271,0.495197,-0.353476,-0.353476,1.87405,-1.57222] prod= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[-0.057909,-0.403891,0.160724,-0.0809583,-0.297795,-0.0508305,0.111361,0.283876,1.26014,2.35861,-1.22781,-0.460485] D(left(right(x)))= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=3 values=[-0.057909,-0.403891,0.160724,-0.0809583,-0.297795,-0.0508305,0.111361,0.283876,1.26014,2.35861,-1.22781,-0.460485] DD(left(right(x)))= 0.053574 -0.289044 0.074356 -0.069107 -0.289044 -1.107986 0.933773 0.328836 0.074356 0.933773 -0.219419 0.116483 -0.069107 0.328836 0.116483 0.444366 -0.829789 -0.521287 0.600561 0.826596 -0.521287 -0.531412 0.021784 0.275073 0.600561 0.021784 -0.291377 -0.733006 0.826596 0.275073 -0.733006 -0.475626 1.811224 2.497746 -1.886630 -1.962054 2.497746 4.931892 -3.938341 -2.885451 -1.886630 -3.938341 1.558095 1.681981 -1.962054 -2.885451 1.681981 -1.274057 openturns-1.9/python/test/t_ComposedFunction_std.py000077500000000000000000000023421307543307100227550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() # Left hand side of the composition left = ot.SymbolicFunction( ['x1', 'x2'], ['x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) # Right hand side of the composition right = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4'], [ '(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)', 'cos(x2*x2+x4)/(x1*x1+1+x3^4)']) # Compositon of left and right composed = ot.ComposedFunction(left, right) print("right=", repr(right)) print("left=", repr(left)) print("composed=", repr(composed)) # Does it work? x = ot.Point(right.getInputDimension(), 1.0) y = right(x) z = left(y) Dy = right.gradient(x) Dz = left.gradient(y) print("x=", repr(x), " y=right(x)=", repr(y), " z=left(y)=", repr(z)) print("left(right(x))=", repr(composed(x))) print("D(right)(x)=", repr(Dy), " D(left)(y)=", repr(Dz)) print(" prod=", repr(Dy * Dz)) print("D(left(right(x)))=", repr(composed.gradient(x))) result = composed.hessian(x) print("DD(left(right(x)))=") for k in range(result.getNbSheets()): for j in range(result.getNbColumns()): for i in range(result.getNbRows()): print("%.6f" % result[i, j, k]) print("") print("") openturns-1.9/python/test/t_CompositeDistribution_std.expout000066400000000000000000000064361307543307100247410ustar00rootroot00000000000000Distribution class=CompositeDistribution name=CompositeDistribution function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[x^2 + 2 * sin(x)] antecedent=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bounds=class=Point name=Unnamed dimension=3 values=[-7.65063,-0.739085,7.65063] values=class=Point name=Unnamed dimension=3 values=[56.5733,-0.800977,60.4909] probabilities=class=Point name=Unnamed dimension=3 values=[1e-14,0.229928,1] increasing=[0,1] Distribution CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)] Elliptical = False Continuous = True oneRealization= [1.51269] oneSample first= [-0.304726] last= [4.32165] mean= [0.981731] covariance= [[ 3.68811 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [1] ddf = [-0.0620066] log pdf= -1.82876523119 pdf = 0.1606117638 pdf (FD)= 0.1606117638 cdf= 0.621614338562 ccdf= 0.378385661438 survival= 0.378385661438 quantile= [4.91251] cdf(quantile)= 0.95 quantile (tail)= [-0.78963] cdf (tail)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.78963] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.800977, 4.91251] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.43805} with f= MinimumVolumeLevelSetEvaluation(CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)]) beta= [0.0321272] Bilateral confidence interval= [-0.79814, 5.94149] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.800977, 4.91251] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.78963, 60.4909] beta= [0.95] characteristic function=(0.421744+0.00166811j) log characteristic function=(-0.863349+0.00395524j) pdf gradient = [0.0164482,-0.0648158] cdf gradient = [-0.274716,-0.309724] mean= [1] standard deviation= [1.93115] skewness= [1.56182] kurtosis= [6.15981] covariance= [[ 3.72933 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mean_0 : 0, standard_deviation_0 : 1]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [1] standard moment n= 2 , value= [4.72933] standard moment n= 3 , value= [23.436] standard moment n= 4 , value= [154.038] standard moment n= 5 , value= [1261.42] Standard representative= CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)] antecedent= Normal(mu = 0, sigma = 1) function= [x]->[x^2 + 2 * sin(x)] newDistribution= CompositeDistribution=f(Normal(mu = 0, sigma = 1)) with f=[x]->[x^2 + 2 * sin(x)] openturns-1.9/python/test/t_CompositeDistribution_std.py000077500000000000000000000130241307543307100240370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object f = SymbolicFunction("x", "x^2 + 2 * sin(x)") distribution = CompositeDistribution(f, Normal()) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # RandomGenerator::SetSeed(0) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf = %.10g" % PDF) print("pdf (FD)= %.10g" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.12g" % Survival) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) quantileTail = distribution.computeQuantile(0.95, True) print("quantile (tail)=", quantileTail) CDFTail = distribution.computeComplementaryCDF(quantileTail) print("cdf (tail)= %.12g" % CDFTail) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g+%.6gj)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g+%.6gj)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution antecedent = distribution.getAntecedent() print("antecedent=", antecedent) function = distribution.getFunction() print("function=", function) newDistribution = CompositeDistribution(function, antecedent) print("newDistribution=", newDistribution) except: import sys print("t_CompositeDistribution_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CompositeProcess_std.expout000066400000000000000000000031741307543307100236740ustar00rootroot00000000000000myAntecedentProcess = ARMA(X_{0,t} = E_{0,t}, E_t ~ Normal(mu = 0, sigma = 1)) myCompositeProcess = class=CompositeProcess function=class=FieldFunction name=Unnamed implementation=class=ValueFunction evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x] outputVariablesNames=[y0] formulas=[2 * x + 5.0] antecedent=class= ARMA timeGrid=class=RegularGrid name=Unnamed start=0 step=0.1 n=11 coefficients AR=class=ARMACoefficients coefficients MA=class=ARMACoefficients noiseDistribution= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] state= class= ARMAState x= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] epsilon= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] One realization= [ t y0 ] 0 : [ 0 0.63723 ] 1 : [ 0.1 5.70008 ] 2 : [ 0.2 4.28999 ] 3 : [ 0.3 7.8745 ] 4 : [ 0.4 6.62134 ] 5 : [ 0.5 6.58631 ] 6 : [ 0.6 4.05895 ] 7 : [ 0.7 5.52204 ] 8 : [ 0.8 0.419876 ] 9 : [ 0.9 2.43423 ] 10 : [ 1 2.37644 ] My antecedent process = CompositeProcess(FieldFunction : [x1,x2]->[x1^2,abs(x2)](GaussianProcess(trend=[x0,x1]->[0.0,0.0], covariance=ExponentialModel(scale=[0.2,0.3], amplitude=[1,1], no spatial correlation))) My dynamical function = FieldFunction : [x1,x2]->[x1^2,x1+x2] openturns-1.9/python/test/t_CompositeProcess_std.py000077500000000000000000000047711307543307100230070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Time grid creation and White Noise Tmin = 0.0 deltaT = 0.1 steps = 11 # Initialization of the TimeGrid timeGrid timeGrid = ot.RegularGrid(Tmin, deltaT, steps) # Creation of the Antecedent myARMAProcess = ot.ARMA() myARMAProcess.setTimeGrid(timeGrid) print('myAntecedentProcess = ', myARMAProcess) # Creation of a function f = ot.SymbolicFunction(['x'], ['2 * x + 5.0']) # We build a dynamical function myFieldFunction = ot.FieldFunction(ot.ValueFunction(f)) # finally we get the compsite process myCompositeProcess = ot.CompositeProcess(myFieldFunction, myARMAProcess) print('myCompositeProcess = ', repr(myCompositeProcess)) # Test realization print('One realization= ') print(myCompositeProcess.getRealization()) # # Create a spatial dynamical function # Create the function g : R^2 --> R^2 # (x1,x2) --> (x1^2, x1+x2) g = ot.SymbolicFunction(['x1', 'x2'], ['x1^2', 'x1+x2']) # Convert g : R --> R into a spatial fucntion # n is the dimension of the mesh # of the field on wich g will be applied nSpat = 2 myDynFunc = ot.ValueFunction(g, nSpat) # Then g acts on processes X: Omega * R^nSpat --> R^2 # # Create a trend function fTrend: R^n --> R^q # for example for myXtProcess of dimension 2 # defined on a bidimensional mesh # fTrend : R^2 --> R^2 # (t1, t2) --> (1+2t1, 1+3t2) fTrend = ot.SymbolicFunction(['t1', 't2'], ['1+2*t1', '1+3*t2']) # # Create a normal process of dimension 2 # which mesh is of box of dimension 2 myIndices = ot.Indices([80, 40]) myMesher = ot.IntervalMesher(myIndices) lowerBound = [0., 0.] upperBound = [2., 1.] myInterval = ot.Interval(lowerBound, upperBound) myMesh = myMesher.build(myInterval) # Define a bidimensional temporal normal process on the mesh # with independent components amplitude = [1.0, 1.0] scale = [0.2, 0.3] myCovModel = ot.ExponentialModel(scale, amplitude) myXtProcess_temp = ot.GaussianProcess(myCovModel, myMesh) # Non linear transformation of myXtProcess # to get a positive process g2 = ot.SymbolicFunction(['x1', 'x2'], ['x1^2', 'abs(x2)']) myDynTransform = ot.ValueFunction(g2, 2) myXtProcess = ot.CompositeProcess(myDynTransform, myXtProcess_temp) # Create the image Y myYtProcess = ot.CompositeProcess(myDynFunc, myXtProcess) # Get the antecedent : myXtProcess print('My antecedent process = ', myYtProcess.getAntecedent()) # Get the dynamical function # which performs the transformation print('My dynamical function = ', myYtProcess.getFunction()) openturns-1.9/python/test/t_Composite_std.expout000066400000000000000000000034251307543307100223340ustar00rootroot00000000000000myPlane = class=Composite name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Composite plane implementation=class=SampleImplementation name=Composite plane size=73 dimension=4 data=[[0.5,1.5,2.5,3.5],[-3.5,-2.5,-1.5,-0.5],[4.5,-2.5,-1.5,-0.5],[-3.5,5.5,-1.5,-0.5],[4.5,5.5,-1.5,-0.5],[-3.5,-2.5,6.5,-0.5],[4.5,-2.5,6.5,-0.5],[-3.5,5.5,6.5,-0.5],[4.5,5.5,6.5,-0.5],[-3.5,-2.5,-1.5,7.5],[4.5,-2.5,-1.5,7.5],[-3.5,5.5,-1.5,7.5],[4.5,5.5,-1.5,7.5],[-3.5,-2.5,6.5,7.5],[4.5,-2.5,6.5,7.5],[-3.5,5.5,6.5,7.5],[4.5,5.5,6.5,7.5],[-7.5,-6.5,-5.5,-4.5],[8.5,-6.5,-5.5,-4.5],[-7.5,9.5,-5.5,-4.5],[8.5,9.5,-5.5,-4.5],[-7.5,-6.5,10.5,-4.5],[8.5,-6.5,10.5,-4.5],[-7.5,9.5,10.5,-4.5],[8.5,9.5,10.5,-4.5],[-7.5,-6.5,-5.5,11.5],[8.5,-6.5,-5.5,11.5],[-7.5,9.5,-5.5,11.5],[8.5,9.5,-5.5,11.5],[-7.5,-6.5,10.5,11.5],[8.5,-6.5,10.5,11.5],[-7.5,9.5,10.5,11.5],[8.5,9.5,10.5,11.5],[-15.5,-14.5,-13.5,-12.5],[16.5,-14.5,-13.5,-12.5],[-15.5,17.5,-13.5,-12.5],[16.5,17.5,-13.5,-12.5],[-15.5,-14.5,18.5,-12.5],[16.5,-14.5,18.5,-12.5],[-15.5,17.5,18.5,-12.5],[16.5,17.5,18.5,-12.5],[-15.5,-14.5,-13.5,19.5],[16.5,-14.5,-13.5,19.5],[-15.5,17.5,-13.5,19.5],[16.5,17.5,-13.5,19.5],[-15.5,-14.5,18.5,19.5],[16.5,-14.5,18.5,19.5],[-15.5,17.5,18.5,19.5],[16.5,17.5,18.5,19.5],[4.5,1.5,2.5,3.5],[-3.5,1.5,2.5,3.5],[0.5,5.5,2.5,3.5],[0.5,-2.5,2.5,3.5],[0.5,1.5,6.5,3.5],[0.5,1.5,-1.5,3.5],[0.5,1.5,2.5,7.5],[0.5,1.5,2.5,-0.5],[8.5,1.5,2.5,3.5],[-7.5,1.5,2.5,3.5],[0.5,9.5,2.5,3.5],[0.5,-6.5,2.5,3.5],[0.5,1.5,10.5,3.5],[0.5,1.5,-5.5,3.5],[0.5,1.5,2.5,11.5],[0.5,1.5,2.5,-4.5],[16.5,1.5,2.5,3.5],[-15.5,1.5,2.5,3.5],[0.5,17.5,2.5,3.5],[0.5,-14.5,2.5,3.5],[0.5,1.5,18.5,3.5],[0.5,1.5,-13.5,3.5],[0.5,1.5,2.5,19.5],[0.5,1.5,2.5,-12.5]] openturns-1.9/python/test/t_Composite_std.py000077500000000000000000000011171307543307100214370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: center = Point(4, 0.0) center.setName("center") center[0] = 0.5 center[1] = 1.5 center[2] = 2.5 center[3] = 3.5 levels = Point(3, 0.0) levels.setName("levels") levels[0] = 4 levels[1] = 8 levels[2] = 16 myPlane = Composite(center, levels) print("myPlane = ", myPlane) sample = myPlane.generate() print("sample = ", repr(sample)) except: import sys print("t_Composite_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ConditionalDistribution_std.expout000066400000000000000000000106331307543307100252340ustar00rootroot00000000000000distribution= ConditionalDistribution(X with X|Theta~ComposedDistribution(Theta), Theta=f(Y), f=[y0,y1,y2,y3]->[y0,y1,y2,y3], Y~ComposedDistribution(Dirac(point = [1]), Dirac(point = [2]), Bernoulli(p = 0.7), Uniform(a = 3, b = 4), IndependentCopula(dimension = 4))) Parameters [[point_0_marginal_0 : 1],[point_0_marginal_1 : 2],[p_marginal_2 : 0.7],[a_marginal_3 : 3, b_marginal_3 : 4],[]] Mean [1.5,2.1] Covariance [[ 0.0833333 0 ] [ 0 0.751111 ]] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= [1.13528,1.0937] oneSample= [ X0 X1 ] 0 : [ 1.92068 2.49374 ] 1 : [ 1.71438 1.87896 ] 2 : [ 1.8835 1.80748 ] 3 : [ 1.68457 3.16374 ] 4 : [ 1.58862 1.53788 ] 5 : [ 1.21044 2.02765 ] 6 : [ 1.98184 3.21605 ] 7 : [ 1.25986 2.2968 ] 8 : [ 1.11108 1.85243 ] 9 : [ 1.97898 2.729 ] anotherSample mean= [1.50538,2.09375] anotherSample covariance= [[ 0.0847776 -0.000929088 ] [ -0.000929088 0.74965 ]] Zero point= [0,0] pdf= 0.0 cdf= 0.0 Quantile= [1.97468,3.60341] CDF(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=2 values=[1.02532,0.293386] Survival(inverseSurvival)=0.950000 Unilateral confidence interval (lower tail)= [-1, 1.97468] [-1, 3.60341] beta= [0.974679] Unilateral confidence interval (upper tail)= [1.02532, 1] [0.293386, 1] beta= [0.974679] conditioning distribution= ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[a_marginal_0 : 0, b_marginal_0 : 1],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean [0.5] Covariance [[ 2.41667 ]] Elliptical distribution= False Elliptical copula= True Independent copula= True oneRealization= [-0.21251] oneSample= [ X0 ] 0 : [ 1.04021 ] 1 : [ -0.768799 ] 2 : [ -0.0327311 ] 3 : [ 1.95381 ] 4 : [ 1.43698 ] 5 : [ 1.31895 ] 6 : [ 2.05226 ] 7 : [ -1.44045 ] 8 : [ 2.03224 ] 9 : [ 0.258808 ] anotherSample mean= [0.503649] anotherSample covariance= [[ 2.41134 ]] Zero point= [0] pdf=0.253748 cdf=0.367604 Quantile= [3.05046] CDF(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-2.05046] Survival(inverseSurvival)=0.950000 conditioning distribution= ComposedDistribution(Binomial(n = 3, p = 0.5), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Binomial(n = 3, p = 0.5), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[n_marginal_0 : 3, p_marginal_0 : 0.5],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean [1.5] Covariance [[ 3.08333 ]] Elliptical distribution= False Elliptical copula= True Independent copula= True oneRealization= [2.22062] oneSample= [ X0 ] 0 : [ 0.106685 ] 1 : [ 1.52532 ] 2 : [ 3.2931 ] 3 : [ 4.70326 ] 4 : [ 2.99546 ] 5 : [ 5.81408 ] 6 : [ 2.47839 ] 7 : [ 3.09905 ] 8 : [ 4.94457 ] 9 : [ -0.310612 ] anotherSample mean= [1.49593] anotherSample covariance= [[ 3.16541 ]] Zero point= [0] pdf=0.156744 cdf=0.192205 Quantile= [4.38019] CDF(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-1.38019] Survival(inverseSurvival)=0.950000 conditioning distribution= ComposedDistribution(Dirac(point = [0.5]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0.5]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))) Parameters [[point_0_marginal_0 : 0.5],[a_marginal_1 : 1, b_marginal_1 : 2],[]] Mean [0.5] Covariance [[ 2.33333 ]] Elliptical distribution= False Elliptical copula= True Independent copula= True oneRealization= [-0.917771] oneSample= [ X0 ] 0 : [ 2.27217 ] 1 : [ -0.858827 ] 2 : [ -0.344631 ] 3 : [ 0.480758 ] 4 : [ 3.19028 ] 5 : [ 0.813164 ] 6 : [ 1.29442 ] 7 : [ -1.95841 ] 8 : [ -1.39477 ] 9 : [ 0.861998 ] anotherSample mean= [0.528452] anotherSample covariance= [[ 2.34096 ]] Zero point= [0] pdf=0.258535 cdf=0.364782 Quantile= [3.00635] CDF(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-2.00635] Survival(inverseSurvival)=0.950000 openturns-1.9/python/test/t_ConditionalDistribution_std.py000077500000000000000000000146771307543307100243570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Multivariate case coll2 = DistributionCollection(0) coll2.add(Dirac(1)) coll2.add(Dirac(2)) coll2.add(Bernoulli(0.7)) coll2.add(Uniform(3.0, 4.0)) d2 = ComposedDistribution(coll2) coll1 = DistributionCollection(0) coll1.add(Uniform()) coll1.add(Uniform()) d1 = ComposedDistribution(coll1) distribution = ConditionalDistribution(d1, d2) dim = distribution.getDimension() print("distribution=", distribution) print("Parameters ", distribution.getParametersCollection()) print("Mean ", distribution.getMean()) print("Covariance ", distribution.getCovariance().clean(1e-10)) # Is this distribution an elliptical distribution? print("Elliptical distribution= ", distribution.isElliptical()) # Has this distribution an elliptical copula? print("Elliptical copula= ", distribution.hasEllipticalCopula()) # Has this distribution an independent copula? print("Independent copula= ", distribution.hasIndependentCopula()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10 oneSample = distribution.getSample(size) print("oneSample=", oneSample) # Test for sampling size = 10000 anotherSample = distribution.getSample(size) print("anotherSample mean=", anotherSample.computeMean()) print("anotherSample covariance=", anotherSample.computeCovariance()) # Define a point zero = Point(dim, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point= ", zero, " pdf=", zeroPDF, " cdf=", zeroCDF) # Get 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile=", quantile) print("CDF(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions # interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95) # print("Minimum volume interval=", interval) # print("threshold=", Point(1, threshold)) # levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) # print("Minimum volume level set=", levelSet) # print("beta=", Point(1, beta)) # interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95) # print("Bilateral confidence interval=", interval) # print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # " # 1D tests # Create a collection of distribution conditionedDistribution = Normal() conditioningDistributionCollection = DistributionCollection(0) # First conditioning distribution: continuous/continuous atoms = DistributionCollection(0) atoms.add(Uniform(0.0, 1.0)) atoms.add(Uniform(1.0, 2.0)) conditioningDistributionCollection.add(ComposedDistribution(atoms)) # Second conditioning distribution: discrete/continuous atoms = DistributionCollection(0) atoms.add(Binomial(3, 0.5)) atoms.add(Uniform(1.0, 2.0)) conditioningDistributionCollection.add(ComposedDistribution(atoms)) # Third conditioning distribution: dirac/continuous atoms = DistributionCollection(0) atoms.add(Dirac(0.5)) atoms.add(Uniform(1.0, 2.0)) conditioningDistributionCollection.add(ComposedDistribution(atoms)) for i in range(conditioningDistributionCollection.getSize()): print("conditioning distribution=", conditioningDistributionCollection[i]) distribution = ConditionalDistribution( conditionedDistribution, conditioningDistributionCollection[i]) dim = distribution.getDimension() print("Distribution ", distribution) print("Parameters ", distribution.getParametersCollection()) print("Mean ", distribution.getMean()) print("Covariance ", distribution.getCovariance()) # Is this distribution an elliptical distribution? print("Elliptical distribution= ", distribution.isElliptical()) # Has this distribution an elliptical copula? print("Elliptical copula= ", distribution.hasEllipticalCopula()) # Has this distribution an independent copula? print("Independent copula= ", distribution.hasIndependentCopula()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10 oneSample = distribution.getSample(size) print("oneSample=", oneSample) # Test for sampling size = 10000 anotherSample = distribution.getSample(size) print("anotherSample mean=", anotherSample.computeMean()) print("anotherSample covariance=", anotherSample.computeCovariance()) # Define a point zero = Point(dim, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point= ", zero, " pdf=%.6f" % zeroPDF, " cdf=%.6f" % zeroCDF) # Get 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile=", quantile) print("CDF(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) except: import sys print("t_ConditionalDistribution_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ConditionedNormalProcess_std.expout000066400000000000000000000020261307543307100253350ustar00rootroot00000000000000realization = class=Field name=Unnamed description=[v0,v1,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,0],[2,0],[2,1],[1,1],[1.5,0.5]] simplices=[[0,1,4],[1,2,4],[2,3,4],[3,0,4]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[y0] data=[[0.88],[0.54],[1.4],[1.7],[1.2]] Mean over 5000 realizations = class=Field name=Unnamed description=[v0,v1,y0] implementation=class=FieldImplementation name=Unnamed mesh=class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,0],[2,0],[2,1],[1,1],[1.5,0.5]] simplices=[[0,1,4],[1,2,4],[2,3,4],[3,0,4]] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[y0] data=[[0.88],[0.54],[1.4],[1.7],[1.2]] openturns-1.9/python/test/t_ConditionedNormalProcess_std.py000077500000000000000000000031721307543307100244470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from math import cos, sin ot.TESTPREAMBLE() try: # Fix numerical precision ot.PlatformInfo.SetNumericalPrecision(2) # Kriging use case spatialDimension = 2 # Learning data levels = [8, 5] box = ot.Box(levels) inputSample = box.generate() # Scale each direction inputSample *= 10 # Define model model = ot.Function( ['x', 'y'], ['z'], ['cos(0.5*x) + sin(y)']) outputSample = model(inputSample) # 2) Definition of exponential model covarianceModel = ot.SquaredExponential([1.988, 0.924], [3.153]) # 3) Basis definition basisCollection = ot.BasisCollection( 1, ot.ConstantBasisFactory(spatialDimension).build()) # Kriring algorithm algo = ot.KrigingAlgorithm(inputSample, outputSample, covarianceModel, basisCollection) algo.run() result = algo.getResult() vertices = [[1.0, 0.0], [2.0, 0.0], [2.0, 1.0], [1.0, 1.0], [1.5, 0.5]] simplicies = [[0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4]] mesh2D = ot.Mesh(vertices, simplicies) process = ot.ConditionedNormalProcess(result, mesh2D) # Get a realization of the process realization = process.getRealization() print("realization = ", repr(realization)) # Get a sample & compare it to expectation sample = process.getSample(5000) mean = sample.computeMean() print("Mean over 5000 realizations = ", repr(mean)) except: import sys print("t_ConditionedNormalProcess_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ConstantGradient_std.expout000066400000000000000000000005441307543307100236400ustar00rootroot00000000000000myGradient= class=ConstantGradient name=constantGradient constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] constantGradient ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] openturns-1.9/python/test/t_ConstantGradient_std.py000077500000000000000000000015161307543307100227470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 3 outputDimension = 2 # Constant term constant = Matrix(inputDimension, outputDimension) constant[0, 0] = 1.0 constant[1, 0] = 2.0 constant[2, 0] = 5.0 constant[0, 1] = 7.0 constant[1, 1] = 9.0 constant[2, 1] = 3.0 myGradient = ConstantGradient(constant) myGradient.setName("constantGradient") inPoint = Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outMatrix = myGradient.gradient(inPoint) print("myGradient=", repr(myGradient)) print(myGradient.getName(), "( ", repr(inPoint), " ) = ", repr(outMatrix)) except: import sys print("t_ConstantGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ConstantHessian_std.expout000066400000000000000000000007141307543307100234740ustar00rootroot00000000000000myHessian= class=ConstantHessian name=constantHessian constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] constantHessian ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] openturns-1.9/python/test/t_ConstantHessian_std.py000077500000000000000000000023011307543307100225750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 3 outputDimension = 2 # Constant term constant = SymmetricTensor(inputDimension, outputDimension) constant[0, 0, 0] = 7.0 constant[0, 0, 1] = -7.0 constant[0, 1, 0] = 8.0 constant[0, 1, 1] = -8.0 constant[0, 2, 0] = 9.0 constant[0, 2, 1] = -9.0 constant[1, 0, 0] = 8.0 constant[1, 0, 1] = -8.0 constant[1, 1, 0] = 10.0 constant[1, 1, 1] = -10.0 constant[1, 2, 0] = 11.0 constant[1, 2, 1] = -11.0 constant[2, 0, 0] = 9.0 constant[2, 0, 1] = -9.0 constant[2, 1, 0] = 11.0 constant[2, 1, 1] = -11.0 constant[2, 2, 0] = 12.0 constant[2, 2, 1] = -12.0 myHessian = ConstantHessian(constant) myHessian.setName("constantHessian") inPoint = Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outTensor = myHessian.hessian(inPoint) print("myHessian=", repr(myHessian)) print(myHessian.getName(), "( ", repr(inPoint), " ) = ", repr(outTensor)) except: import sys print("t_ConstantHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Contour_std.expout000066400000000000000000000003551307543307100220220ustar00rootroot00000000000000contour= Contour(name=Unnamed, color=red, fill=solid, line=solid, point=plus, width=1, data= [ z ] 0 : [ 1.14151 ] 1 : [ 0.398118 ] 2 : [ 0.369272 ] ... 5926 : [ 0.369272 ] 5927 : [ 0.398118 ] 5928 : [ 1.14151 ] openturns-1.9/python/test/t_Contour_std.py000077500000000000000000000024701307543307100211310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a function inputVar = Description(2) inputVar[0] = "x" inputVar[1] = "y" outputVar = Description(1) outputVar[0] = "z" formula = Description(1) formula[0] = "exp(-sin(cos(y)^2*x^2+sin(x)^2*y^2))" f = Function(inputVar, outputVar, formula) # Generate the data for the curves to be drawn discretization = Point(2) nX = 75 nY = 75 discretization[0] = nX discretization[1] = nY inputData = Box(discretization).generate() inputData *= [10.0] * 2 inputData += [-5.0] * 2 data = f(inputData) size = 7 levels = Point(size) for i in range(size): levels[i] = (0.5 + i) / size # Create an empty graph myGraph = Graph("Complex iso lines", "u1", "u2", True, "topright") # Create the first cloud myContour = Contour(nX + 2, nY + 2, data) myContour.setLevels(levels) myContour.setColor("red") print("contour=", myContour) # Then, draw it myGraph.add(myContour) myGraph.draw("Graph_Contour_OT") # Check that the correct files have been generated by computing their # checksum except: import sys print("t_Contour_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CorrectedLeaveOneOut_std.expout000066400000000000000000000000631307543307100244060ustar00rootroot00000000000000algo = class=CorrectedLeaveOneOut result = 5.42565 openturns-1.9/python/test/t_CorrectedLeaveOneOut_std.py000077500000000000000000000013201307543307100235120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: size = 100 xuniform = Uniform(0.9, 1.1) x = xuniform.getSample(size) yuniform = Uniform(1.9, 2.1) y = yuniform.getSample(size) w = [1.0] * size f = Function(['x'], ['y'], ['2.0*x']) coll = [] coll.append(f) basis = Basis(coll) indices = list(range(len(coll))) fittingAlgo = CorrectedLeaveOneOut() print("algo =", fittingAlgo) result = fittingAlgo.run(x, y, w, basis, indices) print("result = %g" % result) except: import sys print("t_CorrectedLeaveOneOut_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CorrelationAnalysis_std.expout000066400000000000000000000027111307543307100243540ustar00rootroot00000000000000composite= class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,f] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[f] formulas=[10+3*x0+x1] antecedent=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] src= [0.895287,0.104713] openturns-1.9/python/test/t_CorrelationAnalysis_std.py000077500000000000000000000017731307543307100234720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) try: dimension = 2 sampleSize = 1000 # we create an analytical function analytical = ot.Function(['x0', 'x1'], ['f'], ['10+3*x0+x1']) # we create a collection of centered and reduced gaussian distributions aCollection = [ot.Normal()] * dimension # we create one distribution object aDistribution = ot.ComposedDistribution(aCollection) # Random vectors randomVector = ot.RandomVector(aDistribution) composite = ot.RandomVector(analytical, randomVector) print("composite=", composite) # we create two input samples for the function inputSample = randomVector.getSample(sampleSize) outputSample = analytical(inputSample) src = ot.CorrelationAnalysis.SRC(inputSample, outputSample) print("src=", src) except: import sys print("t_CorrelationAnalysis_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CorrelationMatrix_std.expout000066400000000000000000000005241307543307100240350ustar00rootroot00000000000000matrix1 = class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[1,0,0,1] matrix1* [1,3] = [1,3] matrix1* 3.0 = [[ 3 0 ] [ 0 3 ]] 3.0 *matrix1= [[ 3 0 ] [ 0 3 ]] matrix1/ 3.0 = [[ 0.333333 0 ] [ 0 0.333333 ]] [[ 1 0.1 0.7 ] [ 0.1 1 0.8 ] [ 0.7 0.8 1 ]] openturns-1.9/python/test/t_CorrelationMatrix_std.py000077500000000000000000000012671307543307100231510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: matrix1 = CorrelationMatrix(2) matrix1.setName("matrix1") print("matrix1 = ", repr(matrix1)) p = Point((1., 3.)) print("matrix1*", p, "=", matrix1 * p) s = 3. print("matrix1*", s, "=", matrix1 * s) print(s, "*matrix1=", s * matrix1) print("matrix1/", s, "=", matrix1 / s) Vars = ['X', 'Y', 'Z'] Map = {} Map['X'] = {} Map['X']['Y'] = 0.1 Map['X']['Z'] = 0.7 Map['Y'] = {} Map['Y']['Z'] = 0.8 matrix2 = getCorrelationMatrixFromMap(Vars, Map) print(matrix2) except: import traceback traceback.print_exc() openturns-1.9/python/test/t_CovarianceMatrixLapack_std.expout000066400000000000000000000014401307543307100247400ustar00rootroot00000000000000matrix1 (default)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] matrix1 (initialized)=class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] pt= class=Point name=Unnamed dimension=2 values=[5,0] result=class=Point name=Unnamed dimension=2 values=[6.66667,-3.33333] determinant=0.750000 ev=class=Point name=Unnamed dimension=2 values=[0.5,1.5] isSPD= true matrix2=class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0,0.866025] result2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[6.66667,-3.33333,12.6667,-5.33333,18.6667,-7.33333] openturns-1.9/python/test/t_CovarianceMatrixLapack_std.py000077500000000000000000000023011307543307100240440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: matrix1 = CovarianceMatrix(2) print("matrix1 (default)=" + repr(matrix1)) matrix1[0, 0] = 1.0 matrix1[1, 0] = 0.5 matrix1[1, 1] = 1.0 print("matrix1 (initialized)=" + repr(matrix1)) pt = Point() pt.add(5.0) pt.add(0.0) print("pt=", repr(pt)) result = Point() result = matrix1.solveLinearSystem(pt) print("result=" + repr(result)) determinant = matrix1.computeDeterminant() print("determinant=%.6f" % determinant) ev = ScalarCollection(2) ev = matrix1.computeEigenValues() print("ev=" + repr(ev)) if matrix1.isPositiveDefinite(): isSPD = "true" else: isSPD = "false" print("isSPD=", isSPD) matrix2 = matrix1.computeCholesky() print("matrix2=" + repr(matrix2)) b = Matrix(2, 3) b[0, 0] = 5.0 b[1, 0] = 0.0 b[0, 1] = 10.0 b[1, 1] = 1.0 b[0, 2] = 15.0 b[1, 2] = 2.0 result2 = matrix1.solveLinearSystem(b, True) print("result2=" + repr(result2)) except: import sys print("t_CovarianceMatrixLapack_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_CovarianceModel_std.expout000066400000000000000000000310101307543307100234140ustar00rootroot00000000000000myDefautModel = SquaredExponential(scale=[2], amplitude=[3]) myModel = SquaredExponential(scale=[2], amplitude=[3]) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.21802] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.21802] dCov (FD)= class=Point name=Unnamed dimension=1 values=[1.21802] dCov/dP= [[ 2.436 ] [ 0.812 ]] myModel = SquaredExponential(scale=[2,2], amplitude=[3]) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0026644] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.0026644,0.0046627] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.00266441,0.00466274] dCov/dP= [[ 0.005329 ] [ 0.01632 ] [ 0.001776 ]] myDefautModel = GeneralizedExponential(scale=[2], amplitude=[3], p=1.5) myModel = GeneralizedExponential(scale=[2], amplitude=[3], p=1.5) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.531952] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.56422] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.564223] dCov/dP= [[ 1.128 ] [ 0.3546 ]] myModel = GeneralizedExponential(scale=[2,2], amplitude=[3], p=1.5) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00274948] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.00205413,0.00359473] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.00205414,0.00359475] dCov/dP= [[ 0.004108 ] [ 0.01258 ] [ 0.001833 ]] myDefautModel = AbsoluteExponential(scale=[2], amplitude=[3]) myModel = AbsoluteExponential(scale=[2], amplitude=[3]) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.21802] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.609009] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.60901] dCov/dP= [[ 1.218 ] [ 0.812 ]] myModel = AbsoluteExponential(scale=[2,2], amplitude=[3]) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0367809] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.0183905,0.0183905] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.0183905,0.0183905] dCov/dP= [[ 0.03678 ] [ 0.06437 ] [ 0.02452 ]] myDefautModel = MaternModel(scale=[2], amplitude=[3], nu=1.5) myModel = MaternModel(scale=[2], amplitude=[3], nu=1.5) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.25758] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.84513] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.845133] dCov/dP= [[ 0 ] [ 0.8384 ]] myModel = MaternModel(scale=[2,2], amplitude=[3], nu=1.5) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0666906] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.025065,0.0438637] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.025065,0.0438639] dCov/dP= [[ 0 ] [ 0 ] [ 0.04446 ]] myDefautModel = class=ExponentiallyDampedCosineModel(scale=[2], amplitude=[3], frequency=1.5) myModel = class=ExponentiallyDampedCosineModel(scale=[2], amplitude=[3], frequency=1.5) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.406006] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.203003] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.202983] dCov/dP= [[ 0.406 ] [ 0.1353 ]] myModel = class=ExponentiallyDampedCosineModel(scale=[2,2], amplitude=[3], frequency=1.5) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0522473] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.0290952,0.0509166] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.0290946,0.0509148] dCov/dP= [[ 0.05819 ] [ 0.1782 ] [ 0.01742 ]] myDefautModel = SphericalModel(scale=[2], amplitude=[3], radius=4.5) myModel = SphericalModel(scale=[2], amplitude=[3], radius=4.5) active= [0,1] parameter= [2,3] parameterDescription= [scale_0,amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.13169] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.401235] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.401235] dCov/dP= [[ 0.8025 ] [ 0.3772 ]] myModel = SphericalModel(scale=[2,2], amplitude=[3], radius=4.5) active= [0,1,2] parameter= [2,2,3] parameterDescription= [scale_0,scale_1,amplitude_0] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0471566] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.0490014,0.0857524] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.0490015,0.0857528] dCov/dP= [[ 0.098 ] [ 0.3001 ] [ 0.01572 ]] myDefautModel = DiracCovarianceModel(t)=[[ 1 ]] * t==[0] myModel = DiracCovarianceModel(t)=[[ 1 ]] * t==[0] active= [0] parameter= [1] parameterDescription= [amplitude_0] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0] dCov/dP= [[ 0 ]] myModel = DiracCovarianceModel(t)=[[ 2.25 2.625 ] [ 2.625 12.25 ]] * t==[0,0] active= [0,1] parameter= [1.5,3.5] parameterDescription= [amplitude_0,amplitude_1] myModel( [0.5, 0.0] , [0.5, 0.0] )= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2.25,2.625,2.625,12.25] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[0,0,0,0,0,0,0,0] dCov (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[-225000,-225000,-262500,-262500,-262500,-262500,-1.225e+06,-1.225e+06] dCov/dP= [[ 3 1.75 0 ] [ 0 0.75 7 ]] myDefautModel = class=ProductCovarianceModel input dimension=1 models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1]] myModel = class=ProductCovarianceModel input dimension=1 models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[1] amplitude=class=Point name=Unnamed dimension=1 values=[1]] active= [0,1] parameter= [1,1] parameterDescription= [scale_0,amplitude] myModel( [-1] , [3] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0183156] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0183156] dCov (FD)= class=Point name=Unnamed dimension=1 values=[0.0183157] dCov/dP= [[ 0.07326 ] [ 0.03663 ]] myModel = class=ProductCovarianceModel input dimension=2 models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=1 values=[2] amplitude=class=Point name=Unnamed dimension=1 values=[1],class=SquaredExponential scale=class=Point name=Unnamed dimension=1 values=[2] amplitude=class=Point name=Unnamed dimension=1 values=[1]] active= [0,1,2] parameter= [2,2,9] parameterDescription= [scale_0,scale_1,amplitude] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0239796] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=1 values=[0.0119898,0.0419643] dCov (FD)= class=Point name=Unnamed dimension=2 values=[0.0119898,0.0419647] dCov/dP= [[ 0.02398 ] [ 0.1469 ] [ 0.005329 ]] myModel = class=TensorizedCovarianceModel input dimension=2, dimension = 4, models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=2 values=[2,2] amplitude=class=Point name=Unnamed dimension=1 values=[3],class=SquaredExponential scale=class=Point name=Unnamed dimension=2 values=[2,2] amplitude=class=Point name=Unnamed dimension=1 values=[3],class=ExponentialModel scale=class=Point name=Unnamed dimension=2 values=[1,1] amplitude=class=Point name=Unnamed dimension=2 values=[4,2] spatial correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.3,0.3,1] isDiagonal=false] active= [0,1,2,3,4] parameter= [1,3,3,4,2] parameterDescription= [scale_0,amplitude_0,amplitude_1,amplitude_2,amplitude_3] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.0367809,0,0,0,0,0.0026644,0,0,0,0,0.00504343,0.000756514,0,0,0.000756514,0.00126086] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[0.0183905,0.0183905,0,0,0,0,0,0,0,0,0.0026644,0.0046627,0,0,0,0,0,0,0,0,0.00250224,0.00437892,0.000375336,0.000656838,0,0,0,0,0.000375336,0.000656838,0.00062556,0.00109473] dCov (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[0.0183905,0.0183905,0,0,0,0,0,0,0,0,0.00266441,0.00466274,0,0,0,0,0,0,0,0,0.00250225,0.00437894,0.000375337,0.000656841,0,0,0,0,0.000375337,0.000656841,0.000625561,0.00109474] myModel = class=TensorizedCovarianceModel input dimension=2, dimension = 4, models=[class=AbsoluteExponential scale=class=Point name=Unnamed dimension=2 values=[2.5,1.5] amplitude=class=Point name=Unnamed dimension=1 values=[3],class=SquaredExponential scale=class=Point name=Unnamed dimension=2 values=[2.5,1.5] amplitude=class=Point name=Unnamed dimension=1 values=[3],class=ExponentialModel scale=class=Point name=Unnamed dimension=2 values=[1.25,0.75] amplitude=class=Point name=Unnamed dimension=2 values=[4,2] spatial correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.3,0.3,1] isDiagonal=false] active= [0,1,2,3,4] parameter= [2.5,1.5,3,3,4] parameterDescription= [scale_0,scale_1,amplitude_0,amplitude_1,amplitude_2] myModel( [-1,-2] , [3,5] )= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.0170869,0,0,0,0,4.67048e-05,0,0,0,0,0.000830006,0.000124501,0,0,0.000124501,0.000207501] dCov = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[0.00683477,0.0113913,0,0,0,0,0,0,0,0,2.98911e-05,0.000145304,0,0,0,0,0,0,0,0,0.000215353,0.00104685,3.23029e-05,0.000157028,0,0,0,0,3.23029e-05,0.000157028,5.38382e-05,0.000261714] dCov (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=16 values=[0.00683478,0.0113913,0,0,0,0,0,0,0,0,2.98911e-05,0.000145306,0,0,0,0,0,0,0,0,0.000215353,0.00104686,3.23029e-05,0.000157029,0,0,0,0,3.23029e-05,0.000157029,5.38382e-05,0.000261715] openturns-1.9/python/test/t_CovarianceModel_std.py000077500000000000000000000120301307543307100225240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot def test_model(myModel, test_grad=True, x1=None, x2=None): print('myModel = ', myModel) spatialDimension = myModel.getSpatialDimension() dimension = myModel.getDimension() active = myModel.getActiveParameter() print('active=', active) print('parameter=', myModel.getParameter()) print('parameterDescription=', myModel.getParameterDescription()) if x1 is None and x2 is None: x1 = ot.Point(spatialDimension) x2 = ot.Point(spatialDimension) for j in range(spatialDimension): x1[j] = -1.0 - j x2[j] = 3.0 + 2.0 * j eps = 1e-5 print('myModel(', x1, ', ', x2, ')=', repr(myModel(x1, x2))) grad = myModel.partialGradient(x1, x2) print('dCov =', repr(grad)) if (dimension == 1): gradfd = ot.Point(spatialDimension) for j in range(spatialDimension): x1_d = ot.Point(x1) x1_d[j] = x1_d[j] + eps gradfd[j] = (myModel(x1_d, x2)[0, 0] - myModel(x1, x2)[0, 0]) / eps else: gradfd = ot.Matrix(spatialDimension, dimension * dimension) covarianceX1X2 = myModel(x1, x2) # Symmetrize matrix covarianceX1X2.getImplementation().symmetrize() centralValue = ot.Point(covarianceX1X2.getImplementation()) # Loop over the shifted points for i in range(spatialDimension): currentPoint = ot.Point(x1) currentPoint[i] += eps localCovariance = myModel(currentPoint, x2) localCovariance.getImplementation().symmetrize() currentValue = ot.Point( localCovariance.getImplementation()) for j in range(currentValue.getSize()): gradfd[i, j] = (currentValue[j] - centralValue[j]) / eps print('dCov (FD)=', repr(gradfd)) if test_grad: pGrad = myModel.parameterGradient(x1, x2) precision = ot.PlatformInfo.GetNumericalPrecision() ot.PlatformInfo.SetNumericalPrecision(4) print('dCov/dP=', pGrad) ot.PlatformInfo.SetNumericalPrecision(precision) spatialDimension = 2 myDefautModel = ot.SquaredExponential([2.0], [3.0]) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.SquaredExponential([2.0] * spatialDimension, [3.0]) test_model(myModel) myDefautModel = ot.GeneralizedExponential([2.0], [3.0], 1.5) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.GeneralizedExponential([2.0] * spatialDimension, [3.0], 1.5) test_model(myModel) myDefautModel = ot.AbsoluteExponential([2.0], [3.0]) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.AbsoluteExponential([2.0] * spatialDimension, [3.0]) test_model(myModel) myDefautModel = ot.MaternModel([2.0], [3.0], 1.5) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.MaternModel([2.0] * spatialDimension, [3.0], 1.5) test_model(myModel) myDefautModel = ot.ExponentiallyDampedCosineModel([2.0], [3.0], 1.5) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.ExponentiallyDampedCosineModel( [2.0] * spatialDimension, [3.0], 1.5) test_model(myModel) myDefautModel = ot.SphericalModel([2.0], [3.0], 4.5) print('myDefautModel = ', myDefautModel) test_model(myDefautModel) myModel = ot.SphericalModel([2.0] * spatialDimension, [3.0], 4.5) test_model(myModel) myDefautModel = ot.DiracCovarianceModel() print('myDefautModel = ', myDefautModel) test_model(myDefautModel) amplitude = list(map(lambda k: 1.5 + 2.0 * k, range(2))) dimension = 2 spatialCorrelation = ot.CorrelationMatrix(dimension) for j in range(dimension): for i in range(j + 1, dimension): spatialCorrelation[i, j] = ( i + 1.0) / dimension - (j + 1.0) / dimension myModel = ot.DiracCovarianceModel( spatialDimension, amplitude, spatialCorrelation) test_model(myModel, x1=[0.5, 0.0], x2=[0.5, 0.0]) myDefautModel = ot.ProductCovarianceModel() print('myDefautModel = ', myDefautModel) test_model(myDefautModel) cov1 = ot.AbsoluteExponential([2.0], [3.0]) cov2 = ot.SquaredExponential([2.0], [3.0]) myModel = ot.ProductCovarianceModel([cov1, cov2]) test_model(myModel) # Collection ==> add covariance models # Add AbsoluteExponentialModel to the collection myAbsoluteExponential = ot.AbsoluteExponential([2.0] * spatialDimension, [3.0]) mySquaredExponential = ot.SquaredExponential([2.0] * spatialDimension, [3.0]) # Add exponentialModel to the collection amplitude = [4.0, 2.0] scale = [1.0] * spatialDimension # Define a spatial correlation spatialCorrelation = ot.CorrelationMatrix(spatialDimension) spatialCorrelation[1, 0] = 0.3 myExponentialModel = ot.ExponentialModel(scale, amplitude, spatialCorrelation) # Build TensorizedCovarianceModel with scale = [1,..,1] myModel = ot.TensorizedCovarianceModel( [myAbsoluteExponential, mySquaredExponential, myExponentialModel]) test_model(myModel, test_grad=False) # Define new scale scale = [2.5, 1.5] myModel.setScale(scale) test_model(myModel, test_grad=False) openturns-1.9/python/test/t_CumulativeDistributionNetwork_std.expout000066400000000000000000000035341307543307100264630ustar00rootroot00000000000000Distribution class=CumulativeDistributionNetwork name=CumulativeDistributionNetwork dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1]] graph=[[0,1],[0,1]] Distribution CumulativeDistributionNetwork([Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]])), Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ] [ 0 1 ]]))][[0,1],[0,1]]) Elliptical = False Continuous = True oneRealization= [0.819143,1.55123] oneSample first= [-0.337688,0.500922] last= [-0.31133,-0.29406] mean= [0.57312,0.562745] covariance= [[ 0.693077 -0.0044764 ] [ -0.0044764 0.685993 ]] Point= [1.0, 1.0] log pdf =-1.7971e+00 pdf =1.6578e-01 cdf =5.0107e-01 ccdf =4.9893e-01 survival=8.5345e-02 quantile= [2.234,2.234] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=2 values=[-0.998063,-0.998063] Survival(inverseSurvival)=0.950000 Unilateral confidence interval (lower tail)= [-7.65063, 2.234] [-7.65063, 2.234] beta= [0.974679] Unilateral confidence interval (upper tail)= [-0.998063, 7.65063] [-0.998063, 7.65063] beta= [0.974679] mean= [0.56419,0.56419] standard deviation= [0.825645,0.825645] skewness= [0.136949,0.136949] kurtosis= [3.06174,3.06174] covariance= [[ 0.68169 0 ] [ 0 0.68169 ]] correlation= [[ 1 0 ] [ 0 1 ]] spearman= [[ 1 0 ] [ 0 1 ]] kendall= [[ 1 0 ] [ 0 1 ]] openturns-1.9/python/test/t_CumulativeDistributionNetwork_std.py000077500000000000000000000075321307543307100255740ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.RandomGenerator.SetSeed(0) try: # Instanciate one distribution object graph = ot.BipartiteGraph([[0, 1], [0, 1]]) distribution = ot.CumulativeDistributionNetwork([ot.Normal(2)] * 2, graph) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # Define a point point = [1.0] * distribution.getDimension() print("Point= ", point) # Show PDF and CDF of point LPDF = distribution.computeLogPDF(point) print("log pdf =%.4e" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.4e" % PDF) CDF = distribution.computeCDF(point) print("cdf =%.4e" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf =%.4e" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival=%.4e" % Survival) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions. Some computations take ages so they are commented if distribution.getDimension() <= 2: # interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability(0.95) # print("Minimum volume interval=", interval) # print("threshold=", ot.Point(1, threshold)) # levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) # print("Minimum volume level set=", levelSet) # print("beta=", ot.Point(1, beta)) # interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability(0.95) # print("Bilateral confidence interval=", interval) # print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) except: import sys print("t_CumulativeDistributionNetwork_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Curve_std.expout000066400000000000000000000000001307543307100214400ustar00rootroot00000000000000openturns-1.9/python/test/t_Curve_std.py000077500000000000000000000025401307543307100205620ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Generate the data for the curves to be drawn size = 50 cursor = Point(2) # curve y = 2x for x in [-25] data1 = Sample(size, 2) # curve y = x*x for x in [-11] data2 = Sample(size, 2) for i in range(size): tmp = 7. * i / size + 2 cursor[0] = tmp cursor[1] = 2 * tmp data1[i] = cursor tmp = 9. * i / size + 1 cursor[0] = tmp cursor[1] = tmp * tmp - (tmp - 5) * tmp * tmp / 60 data2[i] = cursor # Create an empty graph myGraph = Graph("Some curves", "x1", "x2", True, "topright", 1.0, 0) # Create the first curve myCurve1 = Curve(data1, "blue", "dashed", 2, "linear function") # Then, draw it myGraph.add(myCurve1) myGraph.draw("Graph_Curve_a_OT.png") # Check that the correct files have been generated by computing their # checksum # Create the second curve myCurve2 = Curve(data2, "red", "solid", 2, "polynomial function") # Add it to the graph and draw everything myGraph.add(myCurve2) for i in range(4): myGraph.setLogScale(i) myGraph.draw("Graph_Curve_b_OT_" + str(i) + ".png") except: import sys print("t_Curve_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DatabaseFunction_std.expout000066400000000000000000000002511307543307100235760ustar00rootroot00000000000000database= DatabaseEvaluation input sample : [ x0 x1 ] 0 : [ 1 1 ] 1 : [ 2 2 ] output sample : [ y0 ] 0 : [ 4 ] 1 : [ 5 ] x= [1.8,1.8] database(x)= [5] openturns-1.9/python/test/t_DatabaseFunction_std.py000077500000000000000000000011411307543307100227040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Database construction dimension = 2 inputSample = ot.Sample(0, dimension) inputSample.add(ot.Point(dimension, 1.0)) inputSample.add(ot.Point(dimension, 2.0)) inputSample.setDescription(['x0', 'x1']) outputSample = ot.Sample(0, 1) outputSample.add(ot.Point(1, 4.0)) outputSample.add(ot.Point(1, 5.0)) outputSample.setDescription(['y0']) database = ot.DatabaseFunction(inputSample, outputSample) print('database=', database) # Does it work? x = ot.Point(dimension, 1.8) print('x=', x) print('database(x)=', database(x)) openturns-1.9/python/test/t_Description_std.expout000066400000000000000000000005441307543307100226540ustar00rootroot00000000000000size of desc1 = 2 desc1[0] = X desc1[1] = Y desc2[0] = a desc2[1] = b desc3[0] = X desc3[1] = Y desc1 = [X,Y] desc4 = [A,B,C] desc5 = [U,I,O,P] desc5[0,4] = U desc5[1,4] = I desc5[2,4] = O desc5[3,4] = P desc6[2] = S3 desc6[1:3] = [S2,S3] desc6[:] = [S1,S2,S3,S4,S5] desc6 = [S1,88,99,S4,S5] desc7 = [forunicode,r2,n3] True False False True openturns-1.9/python/test/t_Description_std.py000077500000000000000000000027771307543307100217750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() # Default constructor desc1 = Description() ref_desc1 = desc1 # Check method add() desc1.add("X") desc1.add("Y") size = desc1.getSize() print("size of desc1 = ", size) val1 = ref_desc1[0] val2 = ref_desc1[1] print("desc1[0] = ", val1) print("desc1[1] = ", val2) # Constructor with size */ desc2 = Description(2) ref_desc2 = desc2 # Check operator[] methods desc2[0] = "a" desc2[1] = "b" val1 = ref_desc2[0] val2 = ref_desc2[1] print("desc2[0] = ", val1) print("desc2[1] = ", val2) # Copy constructor desc3 = desc1 ref_desc3 = desc3 val1 = ref_desc3[0] val2 = ref_desc3[1] print("desc3[0] = ", val1) print("desc3[1] = ", val2) # Stream operator print("desc1 = ", repr(ref_desc1)) # Construction from sequence desc4 = Description(("A", "B", "C")) print("desc4 = ", repr(desc4)) l = ["U", "I", "O", "P"] desc5 = Description(l) print("desc5 = ", repr(desc5)) sz = len(desc5) i = 0 for x in desc5: print("desc5[%01d,%01d] = %s" % (i, sz, x)) i += 1 # slicing desc6 = Description(('S1', 'S2', 'S3', 'S4', 'S5')) print('desc6[2] = ', desc6[2]) print('desc6[1:3] = ', desc6[1:3]) print('desc6[:] = ', desc6[:]) desc6[1:3] = ('88', '99') print('desc6 = ', desc6) # unicode support desc7 = Description(['forunicode', 'n2', 'n3']) desc7[1] = 'r2' print('desc7 = ', desc7) # comparison a = Description(['n2', 'n3']) print(a == a) print(a == Description(['n2', 'NN'])) print(a != a) print(a != Description(['n2', 'NN'])) openturns-1.9/python/test/t_DesignProxy_std.expout000066400000000000000000000003441307543307100226420ustar00rootroot00000000000000 [ y ] 0 : [ 1 ] 1 : [ 2 ] 2 : [ 3 ] [ y ] 0 : [ 1 ] 1 : [ 4 ] 2 : [ 9 ] [ y ] 0 : [ 1 ] 1 : [ 8 ] 2 : [ 27 ] [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] [[ 0.5 0.5 0.5 ] [ 1 2 4 ] [ 1.5 4.5 13.5 ]] openturns-1.9/python/test/t_DesignProxy_std.py000077500000000000000000000011511307543307100217460ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot basisSize = 3 sampleSize = 3 X = ot.Sample(sampleSize, 1) for i in range(sampleSize): X[i, 0] = i + 1.0 Y = ot.Sample(sampleSize, 1) phis = [] for j in range(basisSize): phis.append(ot.Function(['x'], ['y'], ['x^' + str(j + 1)])) basis = ot.Basis(phis) for i in range(basisSize): print(ot.FunctionCollection(basis)[i](X)) proxy = ot.DesignProxy(X, basis) full = range(basisSize) design = proxy.computeDesign(full) print(design) proxy.setWeight([0.5] * sampleSize) design = proxy.computeDesign(full) print(design) openturns-1.9/python/test/t_DickeyFullerTest_std.expout000066400000000000000000000007661307543307100236210ustar00rootroot00000000000000Drift and linear trend model= class=TestResult name=Unnamed type=DickeyFullerUnitRootInDriftAndLinearTrendModel binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] Drift model= class=TestResult name=Unnamed type=DickeyFullerUnitRootInDriftModel binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] AR1 model= class=TestResult name=Unnamed type=DickeyFullerUnitRootAR1Model binaryQualityMeasure=false p-value threshold=0.05 p-value=0.01 description=[] openturns-1.9/python/test/t_DickeyFullerTest_std.py000077500000000000000000000022141307543307100227160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot size = 100 # ARMA parameters arcoefficients = ot.ARMACoefficients([0.3]) macoefficients = ot.ARMACoefficients(0) timeGrid = ot.RegularGrid(0.0, 0.1, size) # White noise ==> gaussian whiteNoise = ot.WhiteNoise(ot.Normal(), timeGrid) myARMA = ot.ARMA(arcoefficients, macoefficients, whiteNoise) # A realization of the ARMA process # The realization is supposed to be of a stationnary process realization = ot.TimeSeries(myARMA.getRealization()) # In the strategy of tests, one has to detect a trend tendency # We check if the time series writes as x_t = a +b * t + c * x_{t-1} # H0 = c is equal to one and thus # p-value threshold : probability of the H0 reject zone : 1-0.95 # p-value : probability (test variable decision > test variable decision (statistic) evaluated on data) # Test = True <=> p-value > p-value threshold test = ot.DickeyFullerTest(realization) print("Drift and linear trend model=", test.testUnitRootInDriftAndLinearTrendModel(0.95)) print("Drift model=", test.testUnitRootInDriftModel(0.95)) print("AR1 model=", test.testUnitRootInAR1Model(0.95)) openturns-1.9/python/test/t_DiracFactory_std.expout000066400000000000000000000005201307543307100227350ustar00rootroot00000000000000Distribution = Dirac(point = [0.7]) Estimated distribution= Dirac(point = [0.7]) Default distribution= Dirac(point = [0]) Distribution from parameters= Dirac(point = [0.7]) Dirac = Dirac(point = [0.7]) Estimated dirac= Dirac(point = [0.7]) Default dirac= Dirac(point = [0]) Dirac from parameters= Dirac(point = [0.7]) openturns-1.9/python/test/t_DiracFactory_std.py000077500000000000000000000023651307543307100220550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Dirac(0.7) size = 10000 sample = distribution.getSample(size) factory = DiracFactory() covariance = CovarianceMatrix() # Distribution estimatedDistribution(factory.build(sample, covariance)) estimatedDistribution = factory.build(sample) print("Distribution =", distribution) print("Estimated distribution=", estimatedDistribution) # print "Covariance=", covariance estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedDirac = factory.buildAsDirac(sample) print("Dirac =", distribution) print("Estimated dirac=", estimatedDirac) estimatedDirac = factory.buildAsDirac() print("Default dirac=", estimatedDirac) estimatedDirac = factory.buildAsDirac( distribution.getParameter()) print("Dirac from parameters=", estimatedDirac) except: import sys print("t_DiracFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Dirac_std.expout000066400000000000000000000034541307543307100214160ustar00rootroot00000000000000Distribution Dirac(point = [0.7]) Elliptical = True Continuous = False oneRealization= [0.7] oneSample first= [0.7] last= [0.7] mean= [0.7] covariance= 0.0 Point= [0] pdf = 0.0 pdf (FD)= 0.0 cdf= 0.0 Point= [0.7] pdf = 1.0 pdf (FD)= 1.0 cdf= 1.0 characteristic function= (0.939372712847+0.342897807455j) generating function= (0.637047453196+0.253185274612j) quantile= [0.7] cdf(quantile)= 1.0 mean= [0.7] standard deviation= [0] skewness= [0] kurtosis= [0] covariance= [[ 1 ]] parameters= [[point_0 : 0.7]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.7] standard moment n= 2 value= [0.49] standard moment n= 3 value= [0.343] standard moment n= 4 value= [0.2401] standard moment n= 5 value= [0.16807] Standard representative= Dirac(point = [0.7]) Distribution Dirac(point = [2.3,2.3,2.3,2.3]) Elliptical = True Continuous = False oneRealization= [2.3,2.3,2.3,2.3] oneSample first= [2.3,2.3,2.3,2.3] last= [2.3,2.3,2.3,2.3] mean= [2.3,2.3,2.3,2.3] covariance= [[ 0 0 0 0 ] [ 0 0 0 0 ] [ 0 0 0 0 ] [ 0 0 0 0 ]] Point= [0,0,0,0] pdf = 0.0 pdf (FD)= 0.0 cdf= 0.0 Point= [2.3,2.3,2.3,2.3] pdf = 1.0 pdf (FD)= 1.0 cdf= 1.0 quantile= [2.3,2.3,2.3,2.3] cdf(quantile)= 1.0 mean= [2.3,2.3,2.3,2.3] standard deviation= [0,0,0,0] skewness= [0,0,0,0] kurtosis= [0,0,0,0] covariance= [[ 1 0 0 0 ] [ 0 1 0 0 ] [ 0 0 1 0 ] [ 0 0 0 1 ]] parameters= [[point_0 : 2.3],[point_1 : 2.3],[point_2 : 2.3],[point_3 : 2.3]] standard moment n= 0 value= [1,1,1,1] standard moment n= 1 value= [2.3,2.3,2.3,2.3] standard moment n= 2 value= [5.29,5.29,5.29,5.29] standard moment n= 3 value= [12.167,12.167,12.167,12.167] standard moment n= 4 value= [27.9841,27.9841,27.9841,27.9841] standard moment n= 5 value= [64.3634,64.3634,64.3634,64.3634] Standard representative= Dirac(point = [2.3,2.3,2.3,2.3]) openturns-1.9/python/test/t_Dirac_std.py000077500000000000000000000126771307543307100205340ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # 1D tests distribution = Dirac(0.7) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) sampleCovariance = oneSample.computeCovariance()[0, 0] if (fabs(sampleCovariance) < 1.0e-16): sampleCovariance = 0.0 print("covariance=", sampleCovariance) # Define a point point = Point(distribution.getDimension(), 0.0) print("Point= ", point) # Show PDF and CDF of point PDF = distribution.computePDF(point) print("pdf =", PDF) print("pdf (FD)=", (distribution.computeCDF(point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) CDF = distribution.computeCDF(point) print("cdf=", CDF) # Define a point point = Point(distribution.getSupport(distribution.getRange())[0]) print("Point= ", point) # Show PDF and CDF of point PDF = distribution.computePDF(point) print("pdf =", PDF) print("pdf (FD)=", (distribution.computeCDF(point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) CDF = distribution.computeCDF(point) print("cdf=", CDF) CF = distribution.computeCharacteristicFunction(0.5) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) GF = distribution.computeGeneratingFunction(0.5 + 0.3j) print("generating function= (%.12g%+.12gj)" % (GF.real, GF.imag)) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # N-D tests dim = 4 distribution = Dirac(Point(dim, 2.3)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) sampleCovariance = oneSample.computeCovariance() for i in range(dim): for j in range(i + 1): if (fabs(sampleCovariance[i, j]) < 1.0e-16): sampleCovariance[i, j] = 0.0 print("covariance=", sampleCovariance) # Define a point point = Point(dim, 0.0) print("Point= ", point) # Show PDF and CDF of point PDF = distribution.computePDF(point) print("pdf =", PDF) print("pdf (FD)=", (distribution.computeCDF(point + Point(dim, 0)) - distribution.computeCDF(point + Point(dim, -1)))) CDF = distribution.computeCDF(point) print("cdf=", CDF) # Define a point point = Point(distribution.getSupport(distribution.getRange())[0]) print("Point= ", point) # Show PDF and CDF of point PDF = distribution.computePDF(point) print("pdf =", PDF) print("pdf (FD)=", (distribution.computeCDF(point + Point(dim, 0)) - distribution.computeCDF(point + Point(dim, -1)))) CDF = distribution.computeCDF(point) print("cdf=", CDF) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Dirac.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DirectionalSampling_std.expout000066400000000000000000000077671307543307100243370ustar00rootroot00000000000000DirectionalSampling= class=DirectionalSampling rootStrategy=class=RootStrategy implementation=class=SafeAndSlow derived from class=RootStrategyImplementation solver=class=Solver implementation=class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 maximumDistance=8 stepSize=1 samplingStrategy=class=SamplingStrategy implementation=class=RandomDirection derived from class=SamplingStrategyImplementation dimension=4 derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 DirectionalSampling result= probabilityEstimate=1.748122e-01 varianceEstimate=2.978217e-04 standard deviation=1.73e-02 coefficient of variation=9.87e-02 confidenceLength(0.95)=6.76e-02 outerSampling=30 blockSize=4 DirectionalSampling= class=DirectionalSampling rootStrategy=class=RootStrategy implementation=class=MediumSafe derived from class=RootStrategyImplementation solver=class=Solver implementation=class=Brent derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 maximumDistance=8 stepSize=1 samplingStrategy=class=SamplingStrategy implementation=class=OrthogonalDirection derived from class=SamplingStrategyImplementation dimension=4 size=1 derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 DirectionalSampling result= probabilityEstimate=1.459781e-01 varianceEstimate=3.520986e-05 standard deviation=5.93e-03 coefficient of variation=4.06e-02 confidenceLength(0.95)=2.33e-02 outerSampling=1 blockSize=4 openturns-1.9/python/test/t_DirectionalSampling_std.py000077500000000000000000000037541307543307100234360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector */ output = RandomVector(myFunction, vect) # We create an Event from this RandomVector */ myEvent = Event(output, Less(), -3) # TEST ONE : directional sampling from an event (slow and safe strategy by default) # We create a Directional Sampling algorithm */ myAlgo = DirectionalSampling(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.1) print("DirectionalSampling=", myAlgo) # Perform the simulation */ myAlgo.run() # Stream out the result */ print("DirectionalSampling result=", myAlgo.getResult()) # TEST TWO : diectional sampling from an event and a root strategy : Risky And Fast, and a directional sampling strategy : # We create a Directional Sampling algorithm */ myAlgo2 = DirectionalSampling(myEvent, MediumSafe(), OrthogonalDirection()) myAlgo2.setMaximumOuterSampling(250) myAlgo2.setBlockSize(4) myAlgo2.setMaximumCoefficientOfVariation(0.1) print("DirectionalSampling=", myAlgo2) # Perform the simulation */ myAlgo2.run() # Stream out the result */ print("DirectionalSampling result=", myAlgo2.getResult()) except: import sys print("t_DirectionalSampling.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DirichletFactory_std.expout000066400000000000000000000007731307543307100236340ustar00rootroot00000000000000distribution= class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.2,0.3,0.4,0.5] Estimated distribution= class=Dirichlet name=Dirichlet dimension=3 theta=class=Point name=Unnamed dimension=4 values=[0.197715,0.300208,0.398258,0.498906] Default distribution= Dirichlet(theta = [1,1]) Dirichlet = Dirichlet(theta = [0.2,0.3,0.4,0.5]) Estimated dirichlet= Dirichlet(theta = [0.197715,0.300208,0.398258,0.498906]) Default dirichlet= Dirichlet(theta = [1,1]) openturns-1.9/python/test/t_DirichletFactory_std.py000077500000000000000000000016231307543307100227360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Dirichlet(Point([0.2, 0.3, 0.4, 0.5])) size = 10000 sample = distribution.getSample(size) factory = DirichletFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDirichlet = factory.buildAsDirichlet(sample) print("Dirichlet =", distribution) print("Estimated dirichlet=", estimatedDirichlet) estimatedDirichlet = factory.buildAsDirichlet() print("Default dirichlet=", estimatedDirichlet) except: import sys print("t_DirichletFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Dirichlet_std.expout000066400000000000000000000040501307543307100222740ustar00rootroot00000000000000Distribution class=Dirichlet name=Dirichlet dimension=1 theta=class=Point name=Unnamed dimension=2 values=[0.25,0.5] Distribution Dirichlet(theta = [0.25,0.5]) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.168034] oneSample first= class=Point name=Unnamed dimension=1 values=[0.240694] last= class=Point name=Unnamed dimension=1 values=[0.0030253] mean= class=Point name=Unnamed dimension=1 values=[0.335127] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.127543] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] log pdf= -0.79067254 pdf = 0.45353967 cdf= 0.6831129 quantile= class=Point name=Unnamed dimension=1 values=[0.982959] cdf(quantile)= 0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.8464e-05] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 0.983456] threshold= [0.95] Minimum volume level set= {x | f(x) <= 0.807765} with f= MinimumVolumeLevelSetEvaluation(Dirichlet(theta = [0.25,0.5])) beta= [0.445853] Bilateral confidence interval= [1.15401e-06, 0.995712] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.982959] beta= [0.95] Unilateral confidence interval (upper tail)= [1.8464e-05, 1] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.333333] standard deviation= class=Point name=Unnamed dimension=1 values=[0.125988] skewness= class=Point name=Unnamed dimension=1 values=[1.92418] kurtosis= class=Point name=Unnamed dimension=1 values=[1.90909] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.126984] margin= Dirichlet(theta = [0.25,0.5]) margin PDF= 0.45353967 margin CDF= 0.6831129 margin quantile= class=Point name=Unnamed dimension=1 values=[0.982959] margin realization= class=Point name=Unnamed dimension=1 values=[0.599821] openturns-1.9/python/test/t_Dirichlet_std.py000077500000000000000000000127601307543307100214120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object for dim in range(1, 2): theta = Point(dim + 1) for i in range(dim + 1): theta[i] = (i + 1.0) / 4.0 distribution = Dirichlet(theta) description = [''] * dim for j in range(1, dim + 1): oss = 'Marginal ' + str(j) description[j - 1] = oss distribution.setDescription(description) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) if (dim == 1): size = 100 for i in range(2): RandomGenerator.SetSeed(0) msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point( distribution.getDimension(), 0.5 / distribution.getDimension()) print("Point= ", repr(point)) # Show PDF and CDF of point LPDF = distribution.computeLogPDF(point) print("log pdf= %.8g" % LPDF) PDF = distribution.computePDF(point) print("pdf = %.8g" % PDF) CDF = distribution.computeCDF(point) print("cdf= %.8g" % CDF) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)= %.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", margin) print("margin PDF= %.8g" % margin.computePDF(Point(1, 0.5))) print("margin CDF= %.8g" % margin.computeCDF(Point(1, 0.5))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) if (dim >= 2): # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", indices) margins = distribution.getMarginal(indices) print("margins=", margins) print("margins PDF=", margins.computePDF(Point(2, 0.5))) print("margins CDF= %.8g" % margins.computeCDF(Point(2, 0.5))) quantile = margins.computeQuantile(0.95) print("margins quantile=", repr(quantile)) print("margins CDF(quantile)= %.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) except: import sys print("t_Dirichlet_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_beta.expout000066400000000000000000000447701307543307100222420ustar00rootroot00000000000000pBeta( 0.2 , 0.2 , 0.1 )=0.33669 , complementary=0.66331 pBeta( 0.2 , 0.2 , 0.3 )=0.433204 , complementary=0.566796 pBeta( 0.2 , 0.2 , 0.5 )=0.5 , complementary=0.5 pBeta( 0.2 , 0.2 , 0.7 )=0.566796 , complementary=0.433204 pBeta( 0.2 , 0.2 , 0.9 )=0.66331 , complementary=0.33669 pBeta( 0.2 , 1.4 , 0.1 )=0.687341 , complementary=0.312659 pBeta( 0.2 , 1.4 , 0.3 )=0.843889 , complementary=0.156111 pBeta( 0.2 , 1.4 , 0.5 )=0.91974 , complementary=0.0802601 pBeta( 0.2 , 1.4 , 0.7 )=0.9659 , complementary=0.0340998 pBeta( 0.2 , 1.4 , 0.9 )=0.993451 , complementary=0.0065488 pBeta( 0.2 , 2.6 , 0.1 )=0.78472 , complementary=0.21528 pBeta( 0.2 , 2.6 , 0.3 )=0.927628 , complementary=0.0723715 pBeta( 0.2 , 2.6 , 0.5 )=0.976392 , complementary=0.0236082 pBeta( 0.2 , 2.6 , 0.7 )=0.994757 , complementary=0.00524303 pBeta( 0.2 , 2.6 , 0.9 )=0.999738 , complementary=0.000262128 pBeta( 0.2 , 3.8 , 0.1 )=0.839339 , complementary=0.160661 pBeta( 0.2 , 3.8 , 0.3 )=0.96231 , complementary=0.03769 pBeta( 0.2 , 3.8 , 0.5 )=0.992027 , complementary=0.00797294 pBeta( 0.2 , 3.8 , 0.7 )=0.999059 , complementary=0.000940783 pBeta( 0.2 , 3.8 , 0.9 )=0.999988 , complementary=1.24072e-05 pBeta( 0.2 , 5.0 , 0.1 )=0.875479 , complementary=0.124521 pBeta( 0.2 , 5.0 , 0.3 )=0.979271 , complementary=0.0207289 pBeta( 0.2 , 5.0 , 0.5 )=0.997129 , complementary=0.00287138 pBeta( 0.2 , 5.0 , 0.7 )=0.999819 , complementary=0.00018128 pBeta( 0.2 , 5.0 , 0.9 )=0.999999 , complementary=6.34097e-07 pBeta( 1.4 , 0.2 , 0.1 )=0.0065488 , complementary=0.993451 pBeta( 1.4 , 0.2 , 0.3 )=0.0340998 , complementary=0.9659 pBeta( 1.4 , 0.2 , 0.5 )=0.0802601 , complementary=0.91974 pBeta( 1.4 , 0.2 , 0.7 )=0.156111 , complementary=0.843889 pBeta( 1.4 , 0.2 , 0.9 )=0.312659 , complementary=0.687341 pBeta( 1.4 , 1.4 , 0.1 )=0.0591132 , complementary=0.940887 pBeta( 1.4 , 1.4 , 0.3 )=0.260754 , complementary=0.739246 pBeta( 1.4 , 1.4 , 0.5 )=0.5 , complementary=0.5 pBeta( 1.4 , 1.4 , 0.7 )=0.739246 , complementary=0.260754 pBeta( 1.4 , 1.4 , 0.9 )=0.940887 , complementary=0.0591132 pBeta( 1.4 , 2.6 , 0.1 )=0.122223 , complementary=0.877777 pBeta( 1.4 , 2.6 , 0.3 )=0.462386 , complementary=0.537614 pBeta( 1.4 , 2.6 , 0.5 )=0.749929 , complementary=0.250071 pBeta( 1.4 , 2.6 , 0.7 )=0.927944 , complementary=0.0720564 pBeta( 1.4 , 2.6 , 0.9 )=0.995565 , complementary=0.0044346 pBeta( 1.4 , 3.8 , 0.1 )=0.188357 , complementary=0.811643 pBeta( 1.4 , 3.8 , 0.3 )=0.61876 , complementary=0.38124 pBeta( 1.4 , 3.8 , 0.5 )=0.879463 , complementary=0.120537 pBeta( 1.4 , 3.8 , 0.7 )=0.980978 , complementary=0.0190224 pBeta( 1.4 , 3.8 , 0.9 )=0.999684 , complementary=0.000315635 pBeta( 1.4 , 5.0 , 0.1 )=0.25411 , complementary=0.74589 pBeta( 1.4 , 5.0 , 0.3 )=0.733788 , complementary=0.266212 pBeta( 1.4 , 5.0 , 0.5 )=0.943117 , complementary=0.0568833 pBeta( 1.4 , 5.0 , 0.7 )=0.995103 , complementary=0.00489727 pBeta( 1.4 , 5.0 , 0.9 )=0.999978 , complementary=2.18452e-05 pBeta( 2.6 , 0.2 , 0.1 )=0.000262128 , complementary=0.999738 pBeta( 2.6 , 0.2 , 0.3 )=0.00524303 , complementary=0.994757 pBeta( 2.6 , 0.2 , 0.5 )=0.0236082 , complementary=0.976392 pBeta( 2.6 , 0.2 , 0.7 )=0.0723715 , complementary=0.927628 pBeta( 2.6 , 0.2 , 0.9 )=0.21528 , complementary=0.78472 pBeta( 2.6 , 1.4 , 0.1 )=0.0044346 , complementary=0.995565 pBeta( 2.6 , 1.4 , 0.3 )=0.0720564 , complementary=0.927944 pBeta( 2.6 , 1.4 , 0.5 )=0.250071 , complementary=0.749929 pBeta( 2.6 , 1.4 , 0.7 )=0.537614 , complementary=0.462386 pBeta( 2.6 , 1.4 , 0.9 )=0.877777 , complementary=0.122223 pBeta( 2.6 , 2.6 , 0.1 )=0.0136623 , complementary=0.986338 pBeta( 2.6 , 2.6 , 0.3 )=0.181828 , complementary=0.818172 pBeta( 2.6 , 2.6 , 0.5 )=0.5 , complementary=0.5 pBeta( 2.6 , 2.6 , 0.7 )=0.818172 , complementary=0.181828 pBeta( 2.6 , 2.6 , 0.9 )=0.986338 , complementary=0.0136623 pBeta( 2.6 , 3.8 , 0.1 )=0.0281425 , complementary=0.971858 pBeta( 2.6 , 3.8 , 0.3 )=0.309445 , complementary=0.690555 pBeta( 2.6 , 3.8 , 0.5 )=0.694462 , complementary=0.305538 pBeta( 2.6 , 3.8 , 0.7 )=0.936802 , complementary=0.0631984 pBeta( 2.6 , 3.8 , 0.9 )=0.998688 , complementary=0.00131193 pBeta( 2.6 , 5.0 , 0.1 )=0.0476092 , complementary=0.952391 pBeta( 2.6 , 5.0 , 0.3 )=0.436453 , complementary=0.563547 pBeta( 2.6 , 5.0 , 0.5 )=0.823851 , complementary=0.176149 pBeta( 2.6 , 5.0 , 0.7 )=0.979632 , complementary=0.0203678 pBeta( 2.6 , 5.0 , 0.9 )=0.999885 , complementary=0.000115391 pBeta( 3.8 , 0.2 , 0.1 )=1.24072e-05 , complementary=0.999988 pBeta( 3.8 , 0.2 , 0.3 )=0.000940783 , complementary=0.999059 pBeta( 3.8 , 0.2 , 0.5 )=0.00797294 , complementary=0.992027 pBeta( 3.8 , 0.2 , 0.7 )=0.03769 , complementary=0.96231 pBeta( 3.8 , 0.2 , 0.9 )=0.160661 , complementary=0.839339 pBeta( 3.8 , 1.4 , 0.1 )=0.000315635 , complementary=0.999684 pBeta( 3.8 , 1.4 , 0.3 )=0.0190224 , complementary=0.980978 pBeta( 3.8 , 1.4 , 0.5 )=0.120537 , complementary=0.879463 pBeta( 3.8 , 1.4 , 0.7 )=0.38124 , complementary=0.61876 pBeta( 3.8 , 1.4 , 0.9 )=0.811643 , complementary=0.188357 pBeta( 3.8 , 2.6 , 0.1 )=0.00131193 , complementary=0.998688 pBeta( 3.8 , 2.6 , 0.3 )=0.0631984 , complementary=0.936802 pBeta( 3.8 , 2.6 , 0.5 )=0.305538 , complementary=0.694462 pBeta( 3.8 , 2.6 , 0.7 )=0.690555 , complementary=0.309445 pBeta( 3.8 , 2.6 , 0.9 )=0.971858 , complementary=0.0281425 pBeta( 3.8 , 3.8 , 0.1 )=0.00342106 , complementary=0.996579 pBeta( 3.8 , 3.8 , 0.3 )=0.132524 , complementary=0.867476 pBeta( 3.8 , 3.8 , 0.5 )=0.5 , complementary=0.5 pBeta( 3.8 , 3.8 , 0.7 )=0.867476 , complementary=0.132524 pBeta( 3.8 , 3.8 , 0.9 )=0.996579 , complementary=0.00342106 pBeta( 3.8 , 5.0 , 0.1 )=0.00702538 , complementary=0.992975 pBeta( 3.8 , 5.0 , 0.3 )=0.22026 , complementary=0.77974 pBeta( 3.8 , 5.0 , 0.5 )=0.664623 , complementary=0.335377 pBeta( 3.8 , 5.0 , 0.7 )=0.948811 , complementary=0.0511887 pBeta( 3.8 , 5.0 , 0.9 )=0.999633 , complementary=0.000366713 pBeta( 5.0 , 0.2 , 0.1 )=6.34097e-07 , complementary=0.999999 pBeta( 5.0 , 0.2 , 0.3 )=0.00018128 , complementary=0.999819 pBeta( 5.0 , 0.2 , 0.5 )=0.00287138 , complementary=0.997129 pBeta( 5.0 , 0.2 , 0.7 )=0.0207289 , complementary=0.979271 pBeta( 5.0 , 0.2 , 0.9 )=0.124521 , complementary=0.875479 pBeta( 5.0 , 1.4 , 0.1 )=2.18452e-05 , complementary=0.999978 pBeta( 5.0 , 1.4 , 0.3 )=0.00489727 , complementary=0.995103 pBeta( 5.0 , 1.4 , 0.5 )=0.0568833 , complementary=0.943117 pBeta( 5.0 , 1.4 , 0.7 )=0.266212 , complementary=0.733788 pBeta( 5.0 , 1.4 , 0.9 )=0.74589 , complementary=0.25411 pBeta( 5.0 , 2.6 , 0.1 )=0.000115391 , complementary=0.999885 pBeta( 5.0 , 2.6 , 0.3 )=0.0203678 , complementary=0.979632 pBeta( 5.0 , 2.6 , 0.5 )=0.176149 , complementary=0.823851 pBeta( 5.0 , 2.6 , 0.7 )=0.563547 , complementary=0.436453 pBeta( 5.0 , 2.6 , 0.9 )=0.952391 , complementary=0.0476092 pBeta( 5.0 , 3.8 , 0.1 )=0.000366713 , complementary=0.999633 pBeta( 5.0 , 3.8 , 0.3 )=0.0511887 , complementary=0.948811 pBeta( 5.0 , 3.8 , 0.5 )=0.335377 , complementary=0.664623 pBeta( 5.0 , 3.8 , 0.7 )=0.77974 , complementary=0.22026 pBeta( 5.0 , 3.8 , 0.9 )=0.992975 , complementary=0.00702538 pBeta( 5.0 , 5.0 , 0.1 )=0.00089092 , complementary=0.999109 pBeta( 5.0 , 5.0 , 0.3 )=0.0988087 , complementary=0.901191 pBeta( 5.0 , 5.0 , 0.5 )=0.5 , complementary=0.5 pBeta( 5.0 , 5.0 , 0.7 )=0.901191 , complementary=0.0988087 pBeta( 5.0 , 5.0 , 0.9 )=0.999109 , complementary=0.00089092 qBeta( 0.2 , 0.2 , 0.1 )=0.000247765 , complementary=0.999752 qBeta( 0.2 , 0.2 , 0.3 )=0.0578806 , complementary=0.942119 qBeta( 0.2 , 0.2 , 0.5 )=0.5 , complementary=0.5 qBeta( 0.2 , 0.2 , 0.7 )=0.942119 , complementary=0.0578806 qBeta( 0.2 , 0.2 , 0.9 )=0.999752 , complementary=0.000247765 qBeta( 0.2 , 1.4 , 0.1 )=6.30039e-06 , complementary=0.436917 qBeta( 0.2 , 1.4 , 0.3 )=0.00153177 , complementary=0.109934 qBeta( 0.2 , 1.4 , 0.5 )=0.0198197 , complementary=0.0198197 qBeta( 0.2 , 1.4 , 0.7 )=0.109934 , complementary=0.00153177 qBeta( 0.2 , 1.4 , 0.9 )=0.436917 , complementary=6.30039e-06 qBeta( 0.2 , 2.6 , 0.1 )=2.94251e-06 , complementary=0.237904 qBeta( 0.2 , 2.6 , 0.3 )=0.00071571 , complementary=0.0530747 qBeta( 0.2 , 2.6 , 0.5 )=0.00931014 , complementary=0.00931014 qBeta( 0.2 , 2.6 , 0.7 )=0.0530747 , complementary=0.00071571 qBeta( 0.2 , 2.6 , 0.9 )=0.237904 , complementary=2.94251e-06 qBeta( 0.2 , 3.8 , 0.1 )=1.91273e-06 , complementary=0.162223 qBeta( 0.2 , 3.8 , 0.3 )=0.000465297 , complementary=0.0348444 qBeta( 0.2 , 3.8 , 0.5 )=0.00606228 , complementary=0.00606228 qBeta( 0.2 , 3.8 , 0.7 )=0.0348444 , complementary=0.000465297 qBeta( 0.2 , 3.8 , 0.9 )=0.162223 , complementary=1.91273e-06 qBeta( 0.2 , 5.0 , 0.1 )=1.41593e-06 , complementary=0.122897 qBeta( 0.2 , 5.0 , 0.3 )=0.000344465 , complementary=0.0259165 qBeta( 0.2 , 5.0 , 0.5 )=0.00449136 , complementary=0.00449136 qBeta( 0.2 , 5.0 , 0.7 )=0.0259165 , complementary=0.000344465 qBeta( 0.2 , 5.0 , 0.9 )=0.122897 , complementary=1.41593e-06 qBeta( 1.4 , 0.2 , 0.1 )=0.563083 , complementary=0.999994 qBeta( 1.4 , 0.2 , 0.3 )=0.890066 , complementary=0.998468 qBeta( 1.4 , 0.2 , 0.5 )=0.98018 , complementary=0.98018 qBeta( 1.4 , 0.2 , 0.7 )=0.998468 , complementary=0.890066 qBeta( 1.4 , 0.2 , 0.9 )=0.999994 , complementary=0.563083 qBeta( 1.4 , 1.4 , 0.1 )=0.146816 , complementary=0.853184 qBeta( 1.4 , 1.4 , 0.3 )=0.333994 , complementary=0.666006 qBeta( 1.4 , 1.4 , 0.5 )=0.5 , complementary=0.5 qBeta( 1.4 , 1.4 , 0.7 )=0.666006 , complementary=0.333994 qBeta( 1.4 , 1.4 , 0.9 )=0.853184 , complementary=0.146816 qBeta( 1.4 , 2.6 , 0.1 )=0.085789 , complementary=0.657564 qBeta( 1.4 , 2.6 , 0.3 )=0.204845 , complementary=0.4597 qBeta( 1.4 , 2.6 , 0.5 )=0.323041 , complementary=0.323041 qBeta( 1.4 , 2.6 , 0.7 )=0.4597 , complementary=0.204845 qBeta( 1.4 , 2.6 , 0.9 )=0.657564 , complementary=0.085789 qBeta( 1.4 , 3.8 , 0.1 )=0.0606869 , complementary=0.525681 qBeta( 1.4 , 3.8 , 0.3 )=0.147795 , complementary=0.348865 qBeta( 1.4 , 3.8 , 0.5 )=0.238204 , complementary=0.238204 qBeta( 1.4 , 3.8 , 0.7 )=0.348865 , complementary=0.147795 qBeta( 1.4 , 3.8 , 0.9 )=0.525681 , complementary=0.0606869 qBeta( 1.4 , 5.0 , 0.1 )=0.046966 , complementary=0.435859 qBeta( 1.4 , 5.0 , 0.3 )=0.115615 , complementary=0.280684 qBeta( 1.4 , 5.0 , 0.5 )=0.188589 , complementary=0.188589 qBeta( 1.4 , 5.0 , 0.7 )=0.280684 , complementary=0.115615 qBeta( 1.4 , 5.0 , 0.9 )=0.435859 , complementary=0.046966 qBeta( 2.6 , 0.2 , 0.1 )=0.762096 , complementary=0.999997 qBeta( 2.6 , 0.2 , 0.3 )=0.946925 , complementary=0.999284 qBeta( 2.6 , 0.2 , 0.5 )=0.99069 , complementary=0.99069 qBeta( 2.6 , 0.2 , 0.7 )=0.999284 , complementary=0.946925 qBeta( 2.6 , 0.2 , 0.9 )=0.999997 , complementary=0.762096 qBeta( 2.6 , 1.4 , 0.1 )=0.342436 , complementary=0.914211 qBeta( 2.6 , 1.4 , 0.3 )=0.5403 , complementary=0.795155 qBeta( 2.6 , 1.4 , 0.5 )=0.676959 , complementary=0.676959 qBeta( 2.6 , 1.4 , 0.7 )=0.795155 , complementary=0.5403 qBeta( 2.6 , 1.4 , 0.9 )=0.914211 , complementary=0.342436 qBeta( 2.6 , 2.6 , 0.1 )=0.22943 , complementary=0.77057 qBeta( 2.6 , 2.6 , 0.3 )=0.381151 , complementary=0.618849 qBeta( 2.6 , 2.6 , 0.5 )=0.5 , complementary=0.5 qBeta( 2.6 , 2.6 , 0.7 )=0.618849 , complementary=0.381151 qBeta( 2.6 , 2.6 , 0.9 )=0.77057 , complementary=0.22943 qBeta( 2.6 , 3.8 , 0.1 )=0.173278 , complementary=0.654633 qBeta( 2.6 , 3.8 , 0.3 )=0.295079 , complementary=0.503271 qBeta( 2.6 , 3.8 , 0.5 )=0.39593 , complementary=0.39593 qBeta( 2.6 , 3.8 , 0.7 )=0.503271 , complementary=0.295079 qBeta( 2.6 , 3.8 , 0.9 )=0.654633 , complementary=0.173278 qBeta( 2.6 , 5.0 , 0.1 )=0.139386 , complementary=0.565998 qBeta( 2.6 , 5.0 , 0.3 )=0.240882 , complementary=0.423301 qBeta( 2.6 , 5.0 , 0.5 )=0.327633 , complementary=0.327633 qBeta( 2.6 , 5.0 , 0.7 )=0.423301 , complementary=0.240882 qBeta( 2.6 , 5.0 , 0.9 )=0.565998 , complementary=0.139386 qBeta( 3.8 , 0.2 , 0.1 )=0.837777 , complementary=0.999998 qBeta( 3.8 , 0.2 , 0.3 )=0.965156 , complementary=0.999535 qBeta( 3.8 , 0.2 , 0.5 )=0.993938 , complementary=0.993938 qBeta( 3.8 , 0.2 , 0.7 )=0.999535 , complementary=0.965156 qBeta( 3.8 , 0.2 , 0.9 )=0.999998 , complementary=0.837777 qBeta( 3.8 , 1.4 , 0.1 )=0.474319 , complementary=0.939313 qBeta( 3.8 , 1.4 , 0.3 )=0.651135 , complementary=0.852205 qBeta( 3.8 , 1.4 , 0.5 )=0.761796 , complementary=0.761796 qBeta( 3.8 , 1.4 , 0.7 )=0.852205 , complementary=0.651135 qBeta( 3.8 , 1.4 , 0.9 )=0.939313 , complementary=0.474319 qBeta( 3.8 , 2.6 , 0.1 )=0.345367 , complementary=0.826722 qBeta( 3.8 , 2.6 , 0.3 )=0.496729 , complementary=0.704921 qBeta( 3.8 , 2.6 , 0.5 )=0.60407 , complementary=0.60407 qBeta( 3.8 , 2.6 , 0.7 )=0.704921 , complementary=0.496729 qBeta( 3.8 , 2.6 , 0.9 )=0.826722 , complementary=0.345367 qBeta( 3.8 , 3.8 , 0.1 )=0.273162 , complementary=0.726838 qBeta( 3.8 , 3.8 , 0.3 )=0.402671 , complementary=0.597329 qBeta( 3.8 , 3.8 , 0.5 )=0.5 , complementary=0.5 qBeta( 3.8 , 3.8 , 0.7 )=0.597329 , complementary=0.402671 qBeta( 3.8 , 3.8 , 0.9 )=0.726838 , complementary=0.273162 qBeta( 3.8 , 5.0 , 0.1 )=0.226355 , complementary=0.645024 qBeta( 3.8 , 5.0 , 0.3 )=0.338889 , complementary=0.517235 qBeta( 3.8 , 5.0 , 0.5 )=0.426431 , complementary=0.426431 qBeta( 3.8 , 5.0 , 0.7 )=0.517235 , complementary=0.338889 qBeta( 3.8 , 5.0 , 0.9 )=0.645024 , complementary=0.226355 qBeta( 5.0 , 0.2 , 0.1 )=0.877103 , complementary=0.999999 qBeta( 5.0 , 0.2 , 0.3 )=0.974083 , complementary=0.999656 qBeta( 5.0 , 0.2 , 0.5 )=0.995509 , complementary=0.995509 qBeta( 5.0 , 0.2 , 0.7 )=0.999656 , complementary=0.974083 qBeta( 5.0 , 0.2 , 0.9 )=0.999999 , complementary=0.877103 qBeta( 5.0 , 1.4 , 0.1 )=0.564141 , complementary=0.953034 qBeta( 5.0 , 1.4 , 0.3 )=0.719316 , complementary=0.884385 qBeta( 5.0 , 1.4 , 0.5 )=0.811411 , complementary=0.811411 qBeta( 5.0 , 1.4 , 0.7 )=0.884385 , complementary=0.719316 qBeta( 5.0 , 1.4 , 0.9 )=0.953034 , complementary=0.564141 qBeta( 5.0 , 2.6 , 0.1 )=0.434002 , complementary=0.860614 qBeta( 5.0 , 2.6 , 0.3 )=0.576699 , complementary=0.759118 qBeta( 5.0 , 2.6 , 0.5 )=0.672367 , complementary=0.672367 qBeta( 5.0 , 2.6 , 0.7 )=0.759118 , complementary=0.576699 qBeta( 5.0 , 2.6 , 0.9 )=0.860614 , complementary=0.434002 qBeta( 5.0 , 3.8 , 0.1 )=0.354976 , complementary=0.773645 qBeta( 5.0 , 3.8 , 0.3 )=0.482765 , complementary=0.661111 qBeta( 5.0 , 3.8 , 0.5 )=0.573569 , complementary=0.573569 qBeta( 5.0 , 3.8 , 0.7 )=0.661111 , complementary=0.482765 qBeta( 5.0 , 3.8 , 0.9 )=0.773645 , complementary=0.354976 qBeta( 5.0 , 5.0 , 0.1 )=0.300969 , complementary=0.699031 qBeta( 5.0 , 5.0 , 0.3 )=0.415605 , complementary=0.584395 qBeta( 5.0 , 5.0 , 0.5 )=0.5 , complementary=0.5 qBeta( 5.0 , 5.0 , 0.7 )=0.584395 , complementary=0.415605 qBeta( 5.0 , 5.0 , 0.9 )=0.699031 , complementary=0.300969 rBeta( 0.2 , 0.2 )=0.156052 rBeta( 0.2 , 0.2 )=0.9992 rBeta( 0.2 , 0.2 )=0.00584644 rBeta( 0.2 , 0.2 )=0.953567 rBeta( 0.2 , 0.2 )=0.000468873 rBeta( 0.2 , 1.4 )=0.15554 rBeta( 0.2 , 1.4 )=0.00609813 rBeta( 0.2 , 1.4 )=0.450018 rBeta( 0.2 , 1.4 )=0.599953 rBeta( 0.2 , 1.4 )=0.125688 rBeta( 0.2 , 2.6 )=0.00341746 rBeta( 0.2 , 2.6 )=0.0400444 rBeta( 0.2 , 2.6 )=2.63293e-06 rBeta( 0.2 , 2.6 )=0.000233909 rBeta( 0.2 , 2.6 )=5.06383e-09 rBeta( 0.2 , 3.8 )=0.000615211 rBeta( 0.2 , 3.8 )=0.0146319 rBeta( 0.2 , 3.8 )=8.77919e-06 rBeta( 0.2 , 3.8 )=0.0630611 rBeta( 0.2 , 3.8 )=5.66773e-07 rBeta( 0.2 , 5.0 )=0.000291087 rBeta( 0.2 , 5.0 )=0.000244793 rBeta( 0.2 , 5.0 )=0.033274 rBeta( 0.2 , 5.0 )=0.00475718 rBeta( 0.2 , 5.0 )=5.20763e-05 rBeta( 1.4 , 0.2 )=0.999707 rBeta( 1.4 , 0.2 )=0.986968 rBeta( 1.4 , 0.2 )=1 rBeta( 1.4 , 0.2 )=0.999096 rBeta( 1.4 , 0.2 )=0.999884 rBeta( 1.4 , 1.4 )=0.485624 rBeta( 1.4 , 1.4 )=0.933502 rBeta( 1.4 , 1.4 )=0.782887 rBeta( 1.4 , 1.4 )=0.242806 rBeta( 1.4 , 1.4 )=0.893764 rBeta( 1.4 , 2.6 )=0.426686 rBeta( 1.4 , 2.6 )=0.0736164 rBeta( 1.4 , 2.6 )=0.489684 rBeta( 1.4 , 2.6 )=0.295115 rBeta( 1.4 , 2.6 )=0.612222 rBeta( 1.4 , 3.8 )=0.175646 rBeta( 1.4 , 3.8 )=0.280007 rBeta( 1.4 , 3.8 )=0.27002 rBeta( 1.4 , 3.8 )=0.325441 rBeta( 1.4 , 3.8 )=0.424636 rBeta( 1.4 , 5.0 )=0.475496 rBeta( 1.4 , 5.0 )=0.312055 rBeta( 1.4 , 5.0 )=0.367104 rBeta( 1.4 , 5.0 )=0.122461 rBeta( 1.4 , 5.0 )=0.231872 rBeta( 2.6 , 0.2 )=0.999486 rBeta( 2.6 , 0.2 )=0.983949 rBeta( 2.6 , 0.2 )=0.999979 rBeta( 2.6 , 0.2 )=0.999994 rBeta( 2.6 , 0.2 )=0.994164 rBeta( 2.6 , 1.4 )=0.718897 rBeta( 2.6 , 1.4 )=0.900546 rBeta( 2.6 , 1.4 )=0.896262 rBeta( 2.6 , 1.4 )=0.751736 rBeta( 2.6 , 1.4 )=0.882997 rBeta( 2.6 , 2.6 )=0.518813 rBeta( 2.6 , 2.6 )=0.332689 rBeta( 2.6 , 2.6 )=0.779803 rBeta( 2.6 , 2.6 )=0.728029 rBeta( 2.6 , 2.6 )=0.154406 rBeta( 2.6 , 3.8 )=0.324814 rBeta( 2.6 , 3.8 )=0.402559 rBeta( 2.6 , 3.8 )=0.544642 rBeta( 2.6 , 3.8 )=0.438609 rBeta( 2.6 , 3.8 )=0.321803 rBeta( 2.6 , 5.0 )=0.403027 rBeta( 2.6 , 5.0 )=0.283523 rBeta( 2.6 , 5.0 )=0.375099 rBeta( 2.6 , 5.0 )=0.435297 rBeta( 2.6 , 5.0 )=0.314206 rBeta( 3.8 , 0.2 )=0.765236 rBeta( 3.8 , 0.2 )=1 rBeta( 3.8 , 0.2 )=0.771142 rBeta( 3.8 , 0.2 )=0.998233 rBeta( 3.8 , 0.2 )=0.975034 rBeta( 3.8 , 1.4 )=0.402612 rBeta( 3.8 , 1.4 )=0.514468 rBeta( 3.8 , 1.4 )=0.741919 rBeta( 3.8 , 1.4 )=0.646984 rBeta( 3.8 , 1.4 )=0.663609 rBeta( 3.8 , 2.6 )=0.801286 rBeta( 3.8 , 2.6 )=0.744747 rBeta( 3.8 , 2.6 )=0.653823 rBeta( 3.8 , 2.6 )=0.74085 rBeta( 3.8 , 2.6 )=0.813882 rBeta( 3.8 , 3.8 )=0.512431 rBeta( 3.8 , 3.8 )=0.908579 rBeta( 3.8 , 3.8 )=0.350713 rBeta( 3.8 , 3.8 )=0.317657 rBeta( 3.8 , 3.8 )=0.340499 rBeta( 3.8 , 5.0 )=0.505419 rBeta( 3.8 , 5.0 )=0.192688 rBeta( 3.8 , 5.0 )=0.434283 rBeta( 3.8 , 5.0 )=0.26326 rBeta( 3.8 , 5.0 )=0.633409 rBeta( 5.0 , 0.2 )=0.999251 rBeta( 5.0 , 0.2 )=0.971178 rBeta( 5.0 , 0.2 )=0.832947 rBeta( 5.0 , 0.2 )=0.995765 rBeta( 5.0 , 0.2 )=0.999984 rBeta( 5.0 , 1.4 )=0.590906 rBeta( 5.0 , 1.4 )=0.847716 rBeta( 5.0 , 1.4 )=0.881434 rBeta( 5.0 , 1.4 )=0.853464 rBeta( 5.0 , 1.4 )=0.683562 rBeta( 5.0 , 2.6 )=0.540083 rBeta( 5.0 , 2.6 )=0.94074 rBeta( 5.0 , 2.6 )=0.690156 rBeta( 5.0 , 2.6 )=0.597546 rBeta( 5.0 , 2.6 )=0.399028 rBeta( 5.0 , 3.8 )=0.318358 rBeta( 5.0 , 3.8 )=0.268051 rBeta( 5.0 , 3.8 )=0.462067 rBeta( 5.0 , 3.8 )=0.634355 rBeta( 5.0 , 3.8 )=0.341872 rBeta( 5.0 , 5.0 )=0.362547 rBeta( 5.0 , 5.0 )=0.787532 rBeta( 5.0 , 5.0 )=0.2502 rBeta( 5.0 , 5.0 )=0.20747 rBeta( 5.0 , 5.0 )=0.70176 openturns-1.9/python/test/t_DistFunc_beta.py000077500000000000000000000034231307543307100213370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Beta related functions # pBeta p1Min = 0.2 p1Max = 5.0 n1 = 5 p2Min = 0.2 p2Max = 5.0 n2 = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(n1): p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1) for i2 in range(n2): p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pBeta(", p1, ", ", p2, ", %.12g" % x, ")=%.6g" % DistFunc.pBeta( p1, p2, x), ", complementary=%.6g" % DistFunc.pBeta(p1, p2, x, True)) # qBeta p1Min = 0.2 p1Max = 5.0 n1 = 5 p2Min = 0.2 p2Max = 5.0 n2 = 5 qMin = 0.1 qMax = 0.9 nQ = 5 for i1 in range(n1): p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1) for i2 in range(n2): p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1) for iQ in range(nQ): q = qMin + (qMax - qMin) * iQ / (nQ - 1) print("qBeta(", p1, ", ", p2, ", %.12g" % q, ")=%.6g" % DistFunc.qBeta( p1, p2, q), ", complementary=%.6g" % DistFunc.qBeta(p1, p2, q, True)) # rBeta p1Min = 0.2 p1Max = 5.0 n1 = 5 p2Min = 0.2 p2Max = 5.0 n2 = 5 nR = 5 for i1 in range(n1): p1 = p1Min + (p1Max - p1Min) * i1 / (n1 - 1) for i2 in range(n2): p2 = p2Min + (p2Max - p2Min) * i2 / (n2 - 1) for iR in range(nR): print("rBeta(", p1, ", ", p2, ")=%.6g" % DistFunc.rBeta(p1, p2)) except: import sys print("t_DistFunc_beta.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_gamma.expout000066400000000000000000000063551307543307100224060ustar00rootroot00000000000000pGamma( 0.2 , 0.1 )=0.676043 , complementary=0.323957 pGamma( 0.2 , 0.3 )=0.816527 , complementary=0.183473 pGamma( 0.2 , 0.5 )=0.878775 , complementary=0.121225 pGamma( 0.2 , 0.7 )=0.91522 , complementary=0.0847804 pGamma( 0.2 , 0.9 )=0.938827 , complementary=0.0611732 pGamma( 1.4 , 0.1 )=0.0302441 , complementary=0.969756 pGamma( 1.4 , 0.3 )=0.125659 , complementary=0.874341 pGamma( 1.4 , 0.5 )=0.229949 , complementary=0.770051 pGamma( 1.4 , 0.7 )=0.330626 , complementary=0.669374 pGamma( 1.4 , 0.9 )=0.423203 , complementary=0.576797 pGamma( 2.6 , 0.1 )=0.000628831 , complementary=0.999371 pGamma( 2.6 , 0.3 )=0.00948612 , complementary=0.990514 pGamma( 2.6 , 0.5 )=0.0310977 , complementary=0.968902 pGamma( 2.6 , 0.7 )=0.0649097 , complementary=0.93509 pGamma( 2.6 , 0.9 )=0.108786 , complementary=0.891214 pGamma( 3.8 , 0.1 )=8.2099e-06 , complementary=0.999992 pGamma( 3.8 , 0.3 )=0.000456182 , complementary=0.999544 pGamma( 3.8 , 0.5 )=0.00271909 , complementary=0.997281 pGamma( 3.8 , 0.7 )=0.00836579 , complementary=0.991634 pGamma( 3.8 , 0.9 )=0.018647 , complementary=0.981353 pGamma( 5.0 , 0.1 )=7.6678e-08 , complementary=1 pGamma( 5.0 , 0.3 )=1.5785e-05 , complementary=0.999984 pGamma( 5.0 , 0.5 )=0.000172116 , complementary=0.999828 pGamma( 5.0 , 0.7 )=0.000785535 , complementary=0.999214 pGamma( 5.0 , 0.9 )=0.00234412 , complementary=0.997656 qGamma( 0.2 , 0.1 )=6.52552e-06 , complementary=0.604902 qGamma( 0.2 , 0.3 )=0.00158779 , complementary=0.121038 qGamma( 0.2 , 0.5 )=0.0207463 , complementary=0.0207463 qGamma( 0.2 , 0.7 )=0.121038 , complementary=0.00158779 qGamma( 0.2 , 0.9 )=0.604902 , complementary=6.52552e-06 qGamma( 1.4 , 0.1 )=0.249736 , complementary=2.96694 qGamma( 1.4 , 0.3 )=0.637693 , complementary=1.70884 qGamma( 1.4 , 0.5 )=1.08437 , complementary=1.08437 qGamma( 1.4 , 0.7 )=1.70884 , complementary=0.637693 qGamma( 1.4 , 0.9 )=2.96694 , complementary=0.249736 qGamma( 2.6 , 0.1 )=0.862885 , complementary=4.7607 qGamma( 2.6 , 0.3 )=1.58195 , complementary=3.14956 qGamma( 2.6 , 0.5 )=2.27534 , complementary=2.27534 qGamma( 2.6 , 0.7 )=3.14956 , complementary=1.58195 qGamma( 2.6 , 0.9 )=4.7607 , complementary=0.862885 qGamma( 3.8 , 0.1 )=1.61202 , complementary=6.41335 qGamma( 3.8 , 0.3 )=2.59185 , complementary=4.53462 qGamma( 3.8 , 0.5 )=3.47237 , complementary=3.47237 qGamma( 3.8 , 0.7 )=4.53462 , complementary=2.59185 qGamma( 3.8 , 0.9 )=6.41335 , complementary=1.61202 qGamma( 5.0 , 0.1 )=2.43259 , complementary=7.99359 qGamma( 5.0 , 0.3 )=3.63361 , complementary=5.89036 qGamma( 5.0 , 0.5 )=4.67091 , complementary=4.67091 qGamma( 5.0 , 0.7 )=5.89036 , complementary=3.63361 qGamma( 5.0 , 0.9 )=7.99359 , complementary=2.43259 rGamma( 0.2 )=0.180905 rGamma( 0.2 )=0.0210068 rGamma( 0.2 )=3.88934e-07 rGamma( 0.2 )=0.0142227 rGamma( 0.2 )=1.64884 rGamma( 1.4 )=0.650772 rGamma( 1.4 )=0.149491 rGamma( 1.4 )=0.214591 rGamma( 1.4 )=0.764088 rGamma( 1.4 )=1.76641 rGamma( 2.6 )=4.1207 rGamma( 2.6 )=0.882263 rGamma( 2.6 )=3.0057 rGamma( 2.6 )=1.03548 rGamma( 2.6 )=1.37163 rGamma( 3.8 )=3.23821 rGamma( 3.8 )=6.03859 rGamma( 3.8 )=3.59904 rGamma( 3.8 )=3.74936 rGamma( 3.8 )=3.03665 rGamma( 5.0 )=3.17393 rGamma( 5.0 )=2.91779 rGamma( 5.0 )=7.1899 rGamma( 5.0 )=6.60932 rGamma( 5.0 )=5.93144 openturns-1.9/python/test/t_DistFunc_gamma.py000077500000000000000000000024231307543307100215050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Gamma related functions # pGamma kMin = 0.2 kMax = 5.0 nK = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(nK): k = kMin + (kMax - kMin) * i1 / (nK - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pGamma(", k, ", %.12g" % x, ")=%.6g" % DistFunc.pGamma( k, x), ", complementary=%.6g" % DistFunc.pGamma(k, x, True)) # qGamma kMin = 0.2 kMax = 5.0 nK = 5 qMin = 0.1 qMax = 0.9 nQ = 5 for i1 in range(nK): k = kMin + (kMax - kMin) * i1 / (nK - 1) for iQ in range(nQ): q = qMin + (qMax - qMin) * iQ / (nQ - 1) print("qGamma(", k, ", %.12g" % q, ")=%.6g" % DistFunc.qGamma( k, q), ", complementary=%.6g" % DistFunc.qGamma(k, q, True)) # rGamma kMin = 0.2 kMax = 5.0 nK = 5 nR = 5 for i1 in range(nK): k = kMin + (kMax - kMin) * i1 / (nK - 1) for iR in range(nR): print("rGamma(", k, ")=%.6g" % DistFunc.rGamma(k)) except: import sys print("t_DistFunc_gamma.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_kfactor.expout000066400000000000000000000036041307543307100227470ustar00rootroot00000000000000kFactor(4, 0.1, 0.1)=0.0948248 kFactor(4, 0.1, 0.5)=0.159868 kFactor(4, 0.1, 0.9)=0.336537 kFactor(4, 0.5, 0.1)=0.508054 kFactor(4, 0.5, 0.5)=0.852251 kFactor(4, 0.5, 0.9)=1.76562 kFactor(4, 0.9, 0.1)=1.22991 kFactor(4, 0.9, 0.5)=2.03901 kFactor(4, 0.9, 0.9)=4.15708 kFactor(6, 0.1, 0.1)=0.0981609 kFactor(6, 0.1, 0.5)=0.146103 kFactor(6, 0.1, 0.9)=0.246967 kFactor(6, 0.5, 0.1)=0.526396 kFactor(6, 0.5, 0.5)=0.781955 kFactor(6, 0.5, 0.9)=1.31356 kFactor(6, 0.9, 0.1)=1.27862 kFactor(6, 0.9, 0.5)=1.88846 kFactor(6, 0.9, 0.9)=3.14058 kFactorPooled(4, 1, 0.1, 0.1)=0.0948248 kFactorPooled(4, 1, 0.1, 0.5)=0.159868 kFactorPooled(4, 1, 0.1, 0.9)=0.336537 kFactorPooled(4, 1, 0.5, 0.1)=0.508054 kFactorPooled(4, 1, 0.5, 0.5)=0.852251 kFactorPooled(4, 1, 0.5, 0.9)=1.76562 kFactorPooled(4, 1, 0.9, 0.1)=1.22991 kFactorPooled(4, 1, 0.9, 0.5)=2.03901 kFactorPooled(4, 1, 0.9, 0.9)=4.15708 kFactorPooled(4, 2, 0.1, 0.1)=0.101899 kFactorPooled(4, 2, 0.1, 0.5)=0.149319 kFactorPooled(4, 2, 0.1, 0.9)=0.248996 kFactorPooled(4, 2, 0.5, 0.1)=0.546291 kFactorPooled(4, 2, 0.5, 0.5)=0.797623 kFactorPooled(4, 2, 0.5, 0.9)=1.30566 kFactorPooled(4, 2, 0.9, 0.1)=1.32525 kFactorPooled(4, 2, 0.9, 0.5)=1.91438 kFactorPooled(4, 2, 0.9, 0.9)=3.05366 kFactorPooled(6, 1, 0.1, 0.1)=0.0981609 kFactorPooled(6, 1, 0.1, 0.5)=0.146103 kFactorPooled(6, 1, 0.1, 0.9)=0.246967 kFactorPooled(6, 1, 0.5, 0.1)=0.526396 kFactorPooled(6, 1, 0.5, 0.5)=0.781955 kFactorPooled(6, 1, 0.5, 0.9)=1.31356 kFactorPooled(6, 1, 0.9, 0.1)=1.27862 kFactorPooled(6, 1, 0.9, 0.5)=1.88846 kFactorPooled(6, 1, 0.9, 0.9)=3.14058 kFactorPooled(6, 2, 0.1, 0.1)=0.104942 kFactorPooled(6, 2, 0.1, 0.5)=0.140475 kFactorPooled(6, 2, 0.1, 0.9)=0.202791 kFactorPooled(6, 2, 0.5, 0.1)=0.562926 kFactorPooled(6, 2, 0.5, 0.5)=0.752396 kFactorPooled(6, 2, 0.5, 0.9)=1.07853 kFactorPooled(6, 2, 0.9, 0.1)=1.36887 kFactorPooled(6, 2, 0.9, 0.5)=1.82006 kFactorPooled(6, 2, 0.9, 0.9)=2.57114 openturns-1.9/python/test/t_DistFunc_kfactor.py000077500000000000000000000017231307543307100220560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot nMin = 2 nMax = 4 pMin = 0.1 pMax = 0.9 nP = 2 alphaMin = 0.1 alphaMax = 0.9 nAlpha = 2 for n in range(nMin, nMax): for iP in range(nP + 1): p = pMin + (pMax - pMin) * iP / nP for iAlpha in range(nAlpha + 1): alpha = alphaMin + (alphaMax - alphaMin) * iAlpha / nAlpha kF = ot.DistFunc.kFactor(2 * n, p, alpha) print('kFactor(%d, %.12g, %.12g)=%.6g' % (2 * n, p, alpha, kF)) mMin = 1 mMax = 3 for n in range(nMin, nMax): for m in range(mMin, mMax): for iP in range(nP + 1): p = pMin + (pMax - pMin) * iP / nP for iAlpha in range(nAlpha + 1): alpha = alphaMin + (alphaMax - alphaMin) * iAlpha / nAlpha kF = ot.DistFunc.kFactorPooled(2 * n, m, p, alpha) print('kFactorPooled(%d, %.12g, %.12g, %.12g)=%.6g' % (2 * n, m, p, alpha, kF)) openturns-1.9/python/test/t_DistFunc_kolmogorov.expout000066400000000000000000000347241307543307100235230ustar00rootroot00000000000000pKolmogorov( 2 , 0.0001 )=0 , complementary=1 pKolmogorov( 2 , 0.0002 )=0 , complementary=1 pKolmogorov( 2 , 0.0005 )=0 , complementary=1 pKolmogorov( 2 , 0.001 )=0 , complementary=1 pKolmogorov( 2 , 0.002 )=0 , complementary=1 pKolmogorov( 2 , 0.005 )=0 , complementary=1 pKolmogorov( 2 , 0.01 )=0 , complementary=1 pKolmogorov( 2 , 0.02 )=0 , complementary=1 pKolmogorov( 2 , 0.05 )=0 , complementary=1 pKolmogorov( 2 , 0.1 )=0 , complementary=1 pKolmogorov( 2 , 0.2 )=0 , complementary=1 pKolmogorov( 2 , 0.5 )=0.5 , complementary=0.5 pKolmogorov( 2 , 1 )=1 , complementary=0 pKolmogorov( 2 , 1.2 )=1 , complementary=0 pKolmogorov( 2 , 1.5 )=1 , complementary=0 pKolmogorov( 2 , 2 )=1 , complementary=0 pKolmogorov( 2 , 5 )=1 , complementary=0 pKolmogorov( 2 , 10 )=1 , complementary=0 pKolmogorov( 2 , 20 )=1 , complementary=0 pKolmogorov( 2 , 50 )=1 , complementary=0 pKolmogorov( 5 , 0.0001 )=0 , complementary=1 pKolmogorov( 5 , 0.0002 )=0 , complementary=1 pKolmogorov( 5 , 0.0005 )=0 , complementary=1 pKolmogorov( 5 , 0.001 )=0 , complementary=1 pKolmogorov( 5 , 0.002 )=0 , complementary=1 pKolmogorov( 5 , 0.005 )=0 , complementary=1 pKolmogorov( 5 , 0.01 )=0 , complementary=1 pKolmogorov( 5 , 0.02 )=0 , complementary=1 pKolmogorov( 5 , 0.05 )=0 , complementary=1 pKolmogorov( 5 , 0.1 )=0 , complementary=1 pKolmogorov( 5 , 0.2 )=0.0384 , complementary=0.9616 pKolmogorov( 5 , 0.5 )=0.888 , complementary=0.112 pKolmogorov( 5 , 1 )=1 , complementary=0 pKolmogorov( 5 , 1.2 )=1 , complementary=0 pKolmogorov( 5 , 1.5 )=1 , complementary=0 pKolmogorov( 5 , 2 )=1 , complementary=0 pKolmogorov( 5 , 5 )=1 , complementary=0 pKolmogorov( 5 , 10 )=1 , complementary=0 pKolmogorov( 5 , 20 )=1 , complementary=0 pKolmogorov( 5 , 50 )=1 , complementary=0 pKolmogorov( 10 , 0.0001 )=0 , complementary=1 pKolmogorov( 10 , 0.0002 )=0 , complementary=1 pKolmogorov( 10 , 0.0005 )=0 , complementary=1 pKolmogorov( 10 , 0.001 )=0 , complementary=1 pKolmogorov( 10 , 0.002 )=0 , complementary=1 pKolmogorov( 10 , 0.005 )=0 , complementary=1 pKolmogorov( 10 , 0.01 )=0 , complementary=1 pKolmogorov( 10 , 0.02 )=0 , complementary=1 pKolmogorov( 10 , 0.05 )=0 , complementary=1 pKolmogorov( 10 , 0.1 )=0.00036288 , complementary=0.999637 pKolmogorov( 10 , 0.2 )=0.251281 , complementary=0.748719 pKolmogorov( 10 , 0.5 )=0.992223 , complementary=0.00777741 pKolmogorov( 10 , 1 )=1 , complementary=0 pKolmogorov( 10 , 1.2 )=1 , complementary=0 pKolmogorov( 10 , 1.5 )=1 , complementary=0 pKolmogorov( 10 , 2 )=1 , complementary=0 pKolmogorov( 10 , 5 )=1 , complementary=0 pKolmogorov( 10 , 10 )=1 , complementary=0 pKolmogorov( 10 , 20 )=1 , complementary=0 pKolmogorov( 10 , 50 )=1 , complementary=0 pKolmogorov( 20 , 0.0001 )=0 , complementary=1 pKolmogorov( 20 , 0.0002 )=0 , complementary=1 pKolmogorov( 20 , 0.0005 )=0 , complementary=1 pKolmogorov( 20 , 0.001 )=0 , complementary=1 pKolmogorov( 20 , 0.002 )=0 , complementary=1 pKolmogorov( 20 , 0.005 )=0 , complementary=1 pKolmogorov( 20 , 0.01 )=0 , complementary=1 pKolmogorov( 20 , 0.02 )=0 , complementary=1 pKolmogorov( 20 , 0.05 )=2.3202e-08 , complementary=1 pKolmogorov( 20 , 0.1 )=0.0237449 , complementary=0.976255 pKolmogorov( 20 , 0.2 )=0.64728 , complementary=0.35272 pKolmogorov( 20 , 0.5 )=0.999962 , complementary=3.7876e-05 pKolmogorov( 20 , 1 )=1 , complementary=0 pKolmogorov( 20 , 1.2 )=1 , complementary=0 pKolmogorov( 20 , 1.5 )=1 , complementary=0 pKolmogorov( 20 , 2 )=1 , complementary=0 pKolmogorov( 20 , 5 )=1 , complementary=0 pKolmogorov( 20 , 10 )=1 , complementary=0 pKolmogorov( 20 , 20 )=1 , complementary=0 pKolmogorov( 20 , 50 )=1 , complementary=0 pKolmogorov( 50 , 0.0001 )=0 , complementary=1 pKolmogorov( 50 , 0.0002 )=0 , complementary=1 pKolmogorov( 50 , 0.0005 )=0 , complementary=1 pKolmogorov( 50 , 0.001 )=0 , complementary=1 pKolmogorov( 50 , 0.002 )=0 , complementary=1 pKolmogorov( 50 , 0.005 )=0 , complementary=1 pKolmogorov( 50 , 0.01 )=0 , complementary=1 pKolmogorov( 50 , 0.02 )=0 , complementary=1 pKolmogorov( 50 , 0.05 )=0.00097619 , complementary=0.999024 pKolmogorov( 50 , 0.1 )=0.337689 , complementary=0.662311 pKolmogorov( 50 , 0.2 )=0.968561 , complementary=0.0314388 pKolmogorov( 50 , 0.5 )=1 , complementary=4.39285e-12 pKolmogorov( 50 , 1 )=1 , complementary=0 pKolmogorov( 50 , 1.2 )=1 , complementary=0 pKolmogorov( 50 , 1.5 )=1 , complementary=0 pKolmogorov( 50 , 2 )=1 , complementary=0 pKolmogorov( 50 , 5 )=1 , complementary=0 pKolmogorov( 50 , 10 )=1 , complementary=0 pKolmogorov( 50 , 20 )=1 , complementary=0 pKolmogorov( 50 , 50 )=1 , complementary=0 pKolmogorov( 100 , 0.0001 )=0 , complementary=1 pKolmogorov( 100 , 0.0002 )=0 , complementary=1 pKolmogorov( 100 , 0.0005 )=0 , complementary=1 pKolmogorov( 100 , 0.001 )=0 , complementary=1 pKolmogorov( 100 , 0.002 )=0 , complementary=1 pKolmogorov( 100 , 0.005 )=0 , complementary=1 pKolmogorov( 100 , 0.01 )=0 , complementary=1 pKolmogorov( 100 , 0.02 )=2.17379e-11 , complementary=1 pKolmogorov( 100 , 0.05 )=0.046784 , complementary=0.953216 pKolmogorov( 100 , 0.1 )=0.747307 , complementary=0.252693 pKolmogorov( 100 , 0.2 )=0.999445 , complementary=0.000555193 pKolmogorov( 100 , 0.5 )=1 , complementary=0 pKolmogorov( 100 , 1 )=1 , complementary=0 pKolmogorov( 100 , 1.2 )=1 , complementary=0 pKolmogorov( 100 , 1.5 )=1 , complementary=0 pKolmogorov( 100 , 2 )=1 , complementary=0 pKolmogorov( 100 , 5 )=1 , complementary=0 pKolmogorov( 100 , 10 )=1 , complementary=0 pKolmogorov( 100 , 20 )=1 , complementary=0 pKolmogorov( 100 , 50 )=1 , complementary=0 pKolmogorov( 200 , 0.0001 )=0 , complementary=1 pKolmogorov( 200 , 0.0002 )=0 , complementary=1 pKolmogorov( 200 , 0.0005 )=0 , complementary=1 pKolmogorov( 200 , 0.001 )=0 , complementary=1 pKolmogorov( 200 , 0.002 )=0 , complementary=1 pKolmogorov( 200 , 0.005 )=0 , complementary=1 pKolmogorov( 200 , 0.01 )=0 , complementary=1 pKolmogorov( 200 , 0.02 )=5.15198e-06 , complementary=0.999995 pKolmogorov( 200 , 0.05 )=0.319737 , complementary=0.680263 pKolmogorov( 200 , 0.1 )=0.96589 , complementary=0.0341101 pKolmogorov( 200 , 0.2 )=1 , complementary=1.73179e-07 pKolmogorov( 200 , 0.5 )=1 , complementary=0 pKolmogorov( 200 , 1 )=1 , complementary=0 pKolmogorov( 200 , 1.2 )=1 , complementary=0 pKolmogorov( 200 , 1.5 )=1 , complementary=0 pKolmogorov( 200 , 2 )=1 , complementary=0 pKolmogorov( 200 , 5 )=1 , complementary=0 pKolmogorov( 200 , 10 )=1 , complementary=0 pKolmogorov( 200 , 20 )=1 , complementary=0 pKolmogorov( 200 , 50 )=1 , complementary=0 pKolmogorov( 500 , 0.0001 )=0 , complementary=1 pKolmogorov( 500 , 0.0002 )=0 , complementary=1 pKolmogorov( 500 , 0.0005 )=0 , complementary=1 pKolmogorov( 500 , 0.001 )=0 , complementary=1 pKolmogorov( 500 , 0.002 )=0 , complementary=1 pKolmogorov( 500 , 0.005 )=0 , complementary=1 pKolmogorov( 500 , 0.01 )=8.92661e-10 , complementary=1 pKolmogorov( 500 , 0.02 )=0.0140128 , complementary=0.985987 pKolmogorov( 500 , 0.05 )=0.841337 , complementary=0.158663 pKolmogorov( 500 , 0.1 )=0.999917 , complementary=8.34229e-05 pKolmogorov( 500 , 0.2 )=1 , complementary=0 pKolmogorov( 500 , 0.5 )=1 , complementary=0 pKolmogorov( 500 , 1 )=1 , complementary=0 pKolmogorov( 500 , 1.2 )=1 , complementary=0 pKolmogorov( 500 , 1.5 )=1 , complementary=0 pKolmogorov( 500 , 2 )=1 , complementary=0 pKolmogorov( 500 , 5 )=1 , complementary=0 pKolmogorov( 500 , 10 )=1 , complementary=0 pKolmogorov( 500 , 20 )=1 , complementary=0 pKolmogorov( 500 , 50 )=1 , complementary=0 pKolmogorov( 1000 , 0.0001 )=0 , complementary=1 pKolmogorov( 1000 , 0.0002 )=0 , complementary=1 pKolmogorov( 1000 , 0.0005 )=0 , complementary=1 pKolmogorov( 1000 , 0.001 )=0 , complementary=1 pKolmogorov( 1000 , 0.002 )=0 , complementary=1 pKolmogorov( 1000 , 0.005 )=0 , complementary=1 pKolmogorov( 1000 , 0.01 )=5.03255e-05 , complementary=0.99995 pKolmogorov( 1000 , 0.02 )=0.189103 , complementary=0.810897 pKolmogorov( 1000 , 0.05 )=0.986988 , complementary=0.0130121 pKolmogorov( 1000 , 0.1 )=1 , complementary=3.70369e-09 pKolmogorov( 1000 , 0.2 )=1 , complementary=0 pKolmogorov( 1000 , 0.5 )=1 , complementary=0 pKolmogorov( 1000 , 1 )=1 , complementary=0 pKolmogorov( 1000 , 1.2 )=1 , complementary=0 pKolmogorov( 1000 , 1.5 )=1 , complementary=0 pKolmogorov( 1000 , 2 )=1 , complementary=0 pKolmogorov( 1000 , 5 )=1 , complementary=0 pKolmogorov( 1000 , 10 )=1 , complementary=0 pKolmogorov( 1000 , 20 )=1 , complementary=0 pKolmogorov( 1000 , 50 )=1 , complementary=0 pKolmogorov( 2000 , 0.0001 )=0 , complementary=1 pKolmogorov( 2000 , 0.0002 )=0 , complementary=1 pKolmogorov( 2000 , 0.0005 )=0 , complementary=1 pKolmogorov( 2000 , 0.001 )=0 , complementary=1 pKolmogorov( 2000 , 0.002 )=0 , complementary=1 pKolmogorov( 2000 , 0.005 )=4.59041e-10 , complementary=1 pKolmogorov( 2000 , 0.01 )=0.0128626 , complementary=0.987137 pKolmogorov( 2000 , 0.02 )=0.604687 , complementary=0.395313 pKolmogorov( 2000 , 0.05 )=0.999913 , complementary=8.7431e-05 pKolmogorov( 2000 , 0.1 )=1 , complementary=0 pKolmogorov( 2000 , 0.2 )=1 , complementary=0 pKolmogorov( 2000 , 0.5 )=1 , complementary=0 pKolmogorov( 2000 , 1 )=1 , complementary=0 pKolmogorov( 2000 , 1.2 )=1 , complementary=0 pKolmogorov( 2000 , 1.5 )=1 , complementary=0 pKolmogorov( 2000 , 2 )=1 , complementary=0 pKolmogorov( 2000 , 5 )=1 , complementary=0 pKolmogorov( 2000 , 10 )=1 , complementary=0 pKolmogorov( 2000 , 20 )=1 , complementary=0 pKolmogorov( 2000 , 50 )=1 , complementary=0 pKolmogorov( 5000 , 0.0001 )=0 , complementary=1 pKolmogorov( 5000 , 0.0002 )=0 , complementary=1 pKolmogorov( 5000 , 0.0005 )=0 , complementary=1 pKolmogorov( 5000 , 0.001 )=0 , complementary=1 pKolmogorov( 5000 , 0.002 )=0 , complementary=1 pKolmogorov( 5000 , 0.005 )=0.000414155 , complementary=0.999586 pKolmogorov( 5000 , 0.01 )=0.304544 , complementary=0.695456 pKolmogorov( 5000 , 0.02 )=0.963861 , complementary=0.0361394 pKolmogorov( 5000 , 0.05 )=1 , complementary=2.65231e-11 pKolmogorov( 5000 , 0.1 )=1 , complementary=0 pKolmogorov( 5000 , 0.2 )=1 , complementary=0 pKolmogorov( 5000 , 0.5 )=1 , complementary=0 pKolmogorov( 5000 , 1 )=1 , complementary=0 pKolmogorov( 5000 , 1.2 )=1 , complementary=0 pKolmogorov( 5000 , 1.5 )=1 , complementary=0 pKolmogorov( 5000 , 2 )=1 , complementary=0 pKolmogorov( 5000 , 5 )=1 , complementary=0 pKolmogorov( 5000 , 10 )=1 , complementary=0 pKolmogorov( 5000 , 20 )=1 , complementary=0 pKolmogorov( 5000 , 50 )=1 , complementary=0 pKolmogorov( 10000 , 0.0001 )=0 , complementary=1 pKolmogorov( 10000 , 0.0002 )=0 , complementary=1 pKolmogorov( 10000 , 0.0005 )=0 , complementary=1 pKolmogorov( 10000 , 0.001 )=0 , complementary=1 pKolmogorov( 10000 , 0.002 )=8.23909e-13 , complementary=1 pKolmogorov( 10000 , 0.005 )=0.0371222 , complementary=0.962878 pKolmogorov( 10000 , 0.01 )=0.731781 , complementary=0.268219 pKolmogorov( 10000 , 0.02 )=0.999338 , complementary=0.000661685 pKolmogorov( 10000 , 0.05 )=1 , complementary=0 pKolmogorov( 10000 , 0.1 )=1 , complementary=0 pKolmogorov( 10000 , 0.2 )=1 , complementary=0 pKolmogorov( 10000 , 0.5 )=1 , complementary=0 pKolmogorov( 10000 , 1 )=1 , complementary=0 pKolmogorov( 10000 , 1.2 )=1 , complementary=0 pKolmogorov( 10000 , 1.5 )=1 , complementary=0 pKolmogorov( 10000 , 2 )=1 , complementary=0 pKolmogorov( 10000 , 5 )=1 , complementary=0 pKolmogorov( 10000 , 10 )=1 , complementary=0 pKolmogorov( 10000 , 20 )=1 , complementary=0 pKolmogorov( 10000 , 50 )=1 , complementary=0 pKolmogorov( 20000 , 0.0001 )=0 , complementary=1 pKolmogorov( 20000 , 0.0002 )=0 , complementary=1 pKolmogorov( 20000 , 0.0005 )=0 , complementary=1 pKolmogorov( 20000 , 0.001 )=0 , complementary=1 pKolmogorov( 20000 , 0.002 )=2.01046e-06 , complementary=0.999998 pKolmogorov( 20000 , 0.005 )=0.302591 , complementary=0.697409 pKolmogorov( 20000 , 0.01 )=0.963614 , complementary=0.036386 pKolmogorov( 20000 , 0.02 )=1 , complementary=2.21813e-07 pKolmogorov( 20000 , 0.05 )=1 , complementary=0 pKolmogorov( 20000 , 0.1 )=1 , complementary=0 pKolmogorov( 20000 , 0.2 )=1 , complementary=0 pKolmogorov( 20000 , 0.5 )=1 , complementary=0 pKolmogorov( 20000 , 1 )=1 , complementary=0 pKolmogorov( 20000 , 1.2 )=1 , complementary=0 pKolmogorov( 20000 , 1.5 )=1 , complementary=0 pKolmogorov( 20000 , 2 )=1 , complementary=0 pKolmogorov( 20000 , 5 )=1 , complementary=0 pKolmogorov( 20000 , 10 )=1 , complementary=0 pKolmogorov( 20000 , 20 )=1 , complementary=0 pKolmogorov( 20000 , 50 )=1 , complementary=0 pKolmogorov( 100000 , 0.0001 )=0 , complementary=1 pKolmogorov( 100000 , 0.0002 )=0 , complementary=1 pKolmogorov( 100000 , 0.0005 )=0 , complementary=1 pKolmogorov( 100000 , 0.001 )=3.61592e-05 , complementary=0.999964 pKolmogorov( 100000 , 0.002 )=0.182159 , complementary=0.817841 pKolmogorov( 100000 , 0.005 )=0.986569 , complementary=0.0134308 pKolmogorov( 100000 , 0.01 )=1 , complementary=4.09328e-09 pKolmogorov( 100000 , 0.02 )=1 , complementary=0 pKolmogorov( 100000 , 0.05 )=1 , complementary=0 pKolmogorov( 100000 , 0.1 )=1 , complementary=0 pKolmogorov( 100000 , 0.2 )=1 , complementary=0 pKolmogorov( 100000 , 0.5 )=1 , complementary=0 pKolmogorov( 100000 , 1 )=1 , complementary=0 pKolmogorov( 100000 , 1.2 )=1 , complementary=0 pKolmogorov( 100000 , 1.5 )=1 , complementary=0 pKolmogorov( 100000 , 2 )=1 , complementary=0 pKolmogorov( 100000 , 5 )=1 , complementary=0 pKolmogorov( 100000 , 10 )=1 , complementary=0 pKolmogorov( 100000 , 20 )=1 , complementary=0 pKolmogorov( 100000 , 50 )=1 , complementary=0 pKolmogorov( 1000000 , 0.0001 )=0 , complementary=1 pKolmogorov( 1000000 , 0.0002 )=5.31149e-13 , complementary=1 pKolmogorov( 1000000 , 0.0005 )=0.0361614 , complementary=0.963839 pKolmogorov( 1000000 , 0.001 )=0.730179 , complementary=0.269821 pKolmogorov( 1000000 , 0.002 )=0.99933 , complementary=0.000670028 pKolmogorov( 1000000 , 0.005 )=1 , complementary=0 pKolmogorov( 1000000 , 0.01 )=1 , complementary=0 pKolmogorov( 1000000 , 0.02 )=1 , complementary=0 pKolmogorov( 1000000 , 0.05 )=1 , complementary=0 pKolmogorov( 1000000 , 0.1 )=1 , complementary=0 pKolmogorov( 1000000 , 0.2 )=1 , complementary=0 pKolmogorov( 1000000 , 0.5 )=1 , complementary=0 pKolmogorov( 1000000 , 1 )=1 , complementary=0 pKolmogorov( 1000000 , 1.2 )=1 , complementary=0 pKolmogorov( 1000000 , 1.5 )=1 , complementary=0 pKolmogorov( 1000000 , 2 )=1 , complementary=0 pKolmogorov( 1000000 , 5 )=1 , complementary=0 pKolmogorov( 1000000 , 10 )=1 , complementary=0 pKolmogorov( 1000000 , 20 )=1 , complementary=0 pKolmogorov( 1000000 , 50 )=1 , complementary=0 openturns-1.9/python/test/t_DistFunc_kolmogorov.py000077500000000000000000000017241307543307100226240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Kolmogorov related functions nValues = [2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 100000, 1000000] xValues = [0.0001, 0.0002, 0.0005, 0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 1.2, 1.5, 2.0, 5.0, 10.0, 20.0, 50.0] for i in range(len(nValues)): n = nValues[i] for j in range(len(xValues)): x = xValues[j] cdf = DistFunc.pKolmogorov(n, x) if cdf < 1e-16: cdf = 0.0 ccdf = DistFunc.pKolmogorov(n, x, True) if ccdf < 1e-16: ccdf = 0.0 print("pKolmogorov(", n, ", %.12g" % x, ")=%.6g" % cdf, ", complementary=%.6g" % ccdf) except: import sys print("t_DistFunc_kolmogorov.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_noncentralchisquare.expout000066400000000000000000000517131307543307100253720ustar00rootroot00000000000000dNonCentralChiSquare( 0.2 , 0.2 , 0.1 )=0.704123 dNonCentralChiSquare( 0.2 , 0.2 , 0.3 )=0.259812 dNonCentralChiSquare( 0.2 , 0.2 , 0.5 )=0.161577 dNonCentralChiSquare( 0.2 , 0.2 , 0.7 )=0.11686 dNonCentralChiSquare( 0.2 , 0.2 , 0.9 )=0.0907845 dNonCentralChiSquare( 0.2 , 1.4 , 0.1 )=0.498846 dNonCentralChiSquare( 0.2 , 1.4 , 0.3 )=0.260264 dNonCentralChiSquare( 0.2 , 1.4 , 0.5 )=0.204772 dNonCentralChiSquare( 0.2 , 1.4 , 0.7 )=0.176642 dNonCentralChiSquare( 0.2 , 1.4 , 0.9 )=0.157882 dNonCentralChiSquare( 0.2 , 2.6 , 0.1 )=0.337148 dNonCentralChiSquare( 0.2 , 2.6 , 0.3 )=0.212679 dNonCentralChiSquare( 0.2 , 2.6 , 0.5 )=0.184725 dNonCentralChiSquare( 0.2 , 2.6 , 0.7 )=0.170368 dNonCentralChiSquare( 0.2 , 2.6 , 0.9 )=0.160341 dNonCentralChiSquare( 0.2 , 3.8 , 0.1 )=0.220747 dNonCentralChiSquare( 0.2 , 3.8 , 0.3 )=0.158063 dNonCentralChiSquare( 0.2 , 3.8 , 0.5 )=0.146156 dNonCentralChiSquare( 0.2 , 3.8 , 0.7 )=0.140845 dNonCentralChiSquare( 0.2 , 3.8 , 0.9 )=0.13735 dNonCentralChiSquare( 0.2 , 5.0 , 0.1 )=0.14127 dNonCentralChiSquare( 0.2 , 5.0 , 0.3 )=0.111158 dNonCentralChiSquare( 0.2 , 5.0 , 0.5 )=0.107764 dNonCentralChiSquare( 0.2 , 5.0 , 0.7 )=0.107523 dNonCentralChiSquare( 0.2 , 5.0 , 0.9 )=0.107958 dNonCentralChiSquare( 1.4 , 0.2 , 0.1 )=0.820233 dNonCentralChiSquare( 1.4 , 0.2 , 0.3 )=0.541407 dNonCentralChiSquare( 1.4 , 0.2 , 0.5 )=0.426228 dNonCentralChiSquare( 1.4 , 0.2 , 0.7 )=0.353531 dNonCentralChiSquare( 1.4 , 0.2 , 0.9 )=0.300786 dNonCentralChiSquare( 1.4 , 1.4 , 0.1 )=0.469535 dNonCentralChiSquare( 1.4 , 1.4 , 0.3 )=0.335866 dNonCentralChiSquare( 1.4 , 1.4 , 0.5 )=0.285213 dNonCentralChiSquare( 1.4 , 1.4 , 0.7 )=0.254135 dNonCentralChiSquare( 1.4 , 1.4 , 0.9 )=0.231438 dNonCentralChiSquare( 1.4 , 2.6 , 0.1 )=0.268511 dNonCentralChiSquare( 1.4 , 2.6 , 0.3 )=0.206715 dNonCentralChiSquare( 1.4 , 2.6 , 0.5 )=0.187178 dNonCentralChiSquare( 1.4 , 2.6 , 0.7 )=0.176573 dNonCentralChiSquare( 1.4 , 2.6 , 0.9 )=0.169285 dNonCentralChiSquare( 1.4 , 3.8 , 0.1 )=0.153407 dNonCentralChiSquare( 1.4 , 3.8 , 0.3 )=0.126375 dNonCentralChiSquare( 1.4 , 3.8 , 0.5 )=0.120994 dNonCentralChiSquare( 1.4 , 3.8 , 0.7 )=0.119699 dNonCentralChiSquare( 1.4 , 3.8 , 0.9 )=0.119636 dNonCentralChiSquare( 1.4 , 5.0 , 0.1 )=0.087567 dNonCentralChiSquare( 1.4 , 5.0 , 0.3 )=0.0768137 dNonCentralChiSquare( 1.4 , 5.0 , 0.5 )=0.0772675 dNonCentralChiSquare( 1.4 , 5.0 , 0.7 )=0.079638 dNonCentralChiSquare( 1.4 , 5.0 , 0.9 )=0.0824557 dNonCentralChiSquare( 2.6 , 0.2 , 0.1 )=0.195959 dNonCentralChiSquare( 2.6 , 0.2 , 0.3 )=0.248429 dNonCentralChiSquare( 2.6 , 0.2 , 0.5 )=0.264025 dNonCentralChiSquare( 2.6 , 0.2 , 0.7 )=0.266295 dNonCentralChiSquare( 2.6 , 0.2 , 0.9 )=0.261802 dNonCentralChiSquare( 2.6 , 1.4 , 0.1 )=0.110039 dNonCentralChiSquare( 2.6 , 1.4 , 0.3 )=0.145918 dNonCentralChiSquare( 2.6 , 1.4 , 0.5 )=0.162028 dNonCentralChiSquare( 2.6 , 1.4 , 0.7 )=0.170565 dNonCentralChiSquare( 2.6 , 1.4 , 0.9 )=0.174844 dNonCentralChiSquare( 2.6 , 2.6 , 0.1 )=0.061777 dNonCentralChiSquare( 2.6 , 2.6 , 0.3 )=0.0855441 dNonCentralChiSquare( 2.6 , 2.6 , 0.5 )=0.0989422 dNonCentralChiSquare( 2.6 , 2.6 , 0.7 )=0.10825 dNonCentralChiSquare( 2.6 , 2.6 , 0.9 )=0.115102 dNonCentralChiSquare( 2.6 , 3.8 , 0.1 )=0.0346748 dNonCentralChiSquare( 2.6 , 3.8 , 0.3 )=0.0500623 dNonCentralChiSquare( 2.6 , 3.8 , 0.5 )=0.0601544 dNonCentralChiSquare( 2.6 , 3.8 , 0.7 )=0.0681684 dNonCentralChiSquare( 2.6 , 3.8 , 0.9 )=0.0748904 dNonCentralChiSquare( 2.6 , 5.0 , 0.1 )=0.0194585 dNonCentralChiSquare( 2.6 , 5.0 , 0.3 )=0.0292499 dNonCentralChiSquare( 2.6 , 5.0 , 0.5 )=0.0364298 dNonCentralChiSquare( 2.6 , 5.0 , 0.7 )=0.0426416 dNonCentralChiSquare( 2.6 , 5.0 , 0.9 )=0.0482532 dNonCentralChiSquare( 3.8 , 0.2 , 0.1 )=0.0302672 dNonCentralChiSquare( 3.8 , 0.2 , 0.3 )=0.0740002 dNonCentralChiSquare( 3.8 , 0.2 , 0.5 )=0.106597 dNonCentralChiSquare( 3.8 , 0.2 , 0.7 )=0.131252 dNonCentralChiSquare( 3.8 , 0.2 , 0.9 )=0.149684 dNonCentralChiSquare( 3.8 , 1.4 , 0.1 )=0.0168744 dNonCentralChiSquare( 3.8 , 1.4 , 0.3 )=0.0425607 dNonCentralChiSquare( 3.8 , 1.4 , 0.5 )=0.0632196 dNonCentralChiSquare( 3.8 , 1.4 , 0.7 )=0.0802345 dNonCentralChiSquare( 3.8 , 1.4 , 0.9 )=0.094277 dNonCentralChiSquare( 3.8 , 2.6 , 0.1 )=0.00940691 dNonCentralChiSquare( 3.8 , 2.6 , 0.3 )=0.0244605 dNonCentralChiSquare( 3.8 , 2.6 , 0.5 )=0.0374202 dNonCentralChiSquare( 3.8 , 2.6 , 0.7 )=0.0488657 dNonCentralChiSquare( 3.8 , 2.6 , 0.9 )=0.0590282 dNonCentralChiSquare( 3.8 , 3.8 , 0.1 )=0.00524361 dNonCentralChiSquare( 3.8 , 3.8 , 0.3 )=0.0140482 dNonCentralChiSquare( 3.8 , 3.8 , 0.5 )=0.0221091 dNonCentralChiSquare( 3.8 , 3.8 , 0.7 )=0.0296614 dNonCentralChiSquare( 3.8 , 3.8 , 0.9 )=0.0367658 dNonCentralChiSquare( 3.8 , 5.0 , 0.1 )=0.00292266 dNonCentralChiSquare( 3.8 , 5.0 , 0.3 )=0.00806276 dNonCentralChiSquare( 3.8 , 5.0 , 0.5 )=0.0130406 dNonCentralChiSquare( 3.8 , 5.0 , 0.7 )=0.0179496 dNonCentralChiSquare( 3.8 , 5.0 , 0.9 )=0.0227935 dNonCentralChiSquare( 5.0 , 0.2 , 0.1 )=0.00362671 dNonCentralChiSquare( 5.0 , 0.2 , 0.3 )=0.0171199 dNonCentralChiSquare( 5.0 , 0.2 , 0.5 )=0.033464 dNonCentralChiSquare( 5.0 , 0.2 , 0.7 )=0.0503583 dNonCentralChiSquare( 5.0 , 0.2 , 0.9 )=0.0666942 dNonCentralChiSquare( 5.0 , 1.4 , 0.1 )=0.00201435 dNonCentralChiSquare( 5.0 , 1.4 , 0.3 )=0.00973762 dNonCentralChiSquare( 5.0 , 1.4 , 0.5 )=0.019488 dNonCentralChiSquare( 5.0 , 1.4 , 0.7 )=0.0300198 dNonCentralChiSquare( 5.0 , 1.4 , 0.9 )=0.0406898 dNonCentralChiSquare( 5.0 , 2.6 , 0.1 )=0.00111877 dNonCentralChiSquare( 5.0 , 2.6 , 0.3 )=0.00553668 dNonCentralChiSquare( 5.0 , 2.6 , 0.5 )=0.011338 dNonCentralChiSquare( 5.0 , 2.6 , 0.7 )=0.0178624 dNonCentralChiSquare( 5.0 , 2.6 , 0.9 )=0.0247504 dNonCentralChiSquare( 5.0 , 3.8 , 0.1 )=0.00062134 dNonCentralChiSquare( 5.0 , 3.8 , 0.3 )=0.003147 dNonCentralChiSquare( 5.0 , 3.8 , 0.5 )=0.0065903 dNonCentralChiSquare( 5.0 , 3.8 , 0.7 )=0.0106102 dNonCentralChiSquare( 5.0 , 3.8 , 0.9 )=0.0150137 dNonCentralChiSquare( 5.0 , 5.0 , 0.1 )=0.000345064 dNonCentralChiSquare( 5.0 , 5.0 , 0.3 )=0.00178812 dNonCentralChiSquare( 5.0 , 5.0 , 0.5 )=0.00382731 dNonCentralChiSquare( 5.0 , 5.0 , 0.7 )=0.00629217 dNonCentralChiSquare( 5.0 , 5.0 , 0.9 )=0.00908441 pNonCentralChiSquare( 0.2 , 0.2 , 0.1 )=0.704862 , complementary=0.295138 pNonCentralChiSquare( 0.2 , 0.2 , 0.3 )=0.786395 , complementary=0.213605 pNonCentralChiSquare( 0.2 , 0.2 , 0.5 )=0.82698 , complementary=0.17302 pNonCentralChiSquare( 0.2 , 0.2 , 0.7 )=0.854362 , complementary=0.145638 pNonCentralChiSquare( 0.2 , 0.2 , 0.9 )=0.874928 , complementary=0.125072 pNonCentralChiSquare( 0.2 , 1.4 , 0.1 )=0.397213 , complementary=0.602787 pNonCentralChiSquare( 0.2 , 1.4 , 0.3 )=0.465193 , complementary=0.534807 pNonCentralChiSquare( 0.2 , 1.4 , 0.5 )=0.510895 , complementary=0.489105 pNonCentralChiSquare( 0.2 , 1.4 , 0.7 )=0.548804 , complementary=0.451196 pNonCentralChiSquare( 0.2 , 1.4 , 0.9 )=0.582156 , complementary=0.417844 pNonCentralChiSquare( 0.2 , 2.6 , 0.1 )=0.223771 , complementary=0.776229 pNonCentralChiSquare( 0.2 , 2.6 , 0.3 )=0.274526 , complementary=0.725474 pNonCentralChiSquare( 0.2 , 2.6 , 0.5 )=0.313859 , complementary=0.686141 pNonCentralChiSquare( 0.2 , 2.6 , 0.7 )=0.349258 , complementary=0.650742 pNonCentralChiSquare( 0.2 , 2.6 , 0.9 )=0.382285 , complementary=0.617715 pNonCentralChiSquare( 0.2 , 3.8 , 0.1 )=0.126022 , complementary=0.873978 pNonCentralChiSquare( 0.2 , 3.8 , 0.3 )=0.161651 , complementary=0.838349 pNonCentralChiSquare( 0.2 , 3.8 , 0.5 )=0.191869 , complementary=0.808131 pNonCentralChiSquare( 0.2 , 3.8 , 0.7 )=0.220519 , complementary=0.779481 pNonCentralChiSquare( 0.2 , 3.8 , 0.9 )=0.248322 , complementary=0.751678 pNonCentralChiSquare( 0.2 , 5.0 , 0.1 )=0.0709516 , complementary=0.929048 pNonCentralChiSquare( 0.2 , 5.0 , 0.3 )=0.0949936 , complementary=0.905006 pNonCentralChiSquare( 0.2 , 5.0 , 0.5 )=0.116784 , complementary=0.883216 pNonCentralChiSquare( 0.2 , 5.0 , 0.7 )=0.138291 , complementary=0.861709 pNonCentralChiSquare( 0.2 , 5.0 , 0.9 )=0.159835 , complementary=0.840165 pNonCentralChiSquare( 1.4 , 0.2 , 0.1 )=0.120179 , complementary=0.879821 pNonCentralChiSquare( 1.4 , 0.2 , 0.3 )=0.250471 , complementary=0.749529 pNonCentralChiSquare( 1.4 , 0.2 , 0.5 )=0.346152 , complementary=0.653848 pNonCentralChiSquare( 1.4 , 0.2 , 0.7 )=0.423682 , complementary=0.576318 pNonCentralChiSquare( 1.4 , 0.2 , 0.9 )=0.488869 , complementary=0.511131 pNonCentralChiSquare( 1.4 , 1.4 , 0.1 )=0.067112 , complementary=0.932888 pNonCentralChiSquare( 1.4 , 1.4 , 0.3 )=0.144597 , complementary=0.855403 pNonCentralChiSquare( 1.4 , 1.4 , 0.5 )=0.206188 , complementary=0.793812 pNonCentralChiSquare( 1.4 , 1.4 , 0.7 )=0.259929 , complementary=0.740071 pNonCentralChiSquare( 1.4 , 1.4 , 0.9 )=0.308388 , complementary=0.691612 pNonCentralChiSquare( 1.4 , 2.6 , 0.1 )=0.0374735 , complementary=0.962526 pNonCentralChiSquare( 1.4 , 2.6 , 0.3 )=0.0834022 , complementary=0.916598 pNonCentralChiSquare( 1.4 , 2.6 , 0.5 )=0.122545 , complementary=0.877455 pNonCentralChiSquare( 1.4 , 2.6 , 0.7 )=0.158838 , complementary=0.841162 pNonCentralChiSquare( 1.4 , 2.6 , 0.9 )=0.193389 , complementary=0.806611 pNonCentralChiSquare( 1.4 , 3.8 , 0.1 )=0.020922 , complementary=0.979078 pNonCentralChiSquare( 1.4 , 3.8 , 0.3 )=0.0480651 , complementary=0.951935 pNonCentralChiSquare( 1.4 , 3.8 , 0.5 )=0.0726836 , complementary=0.927316 pNonCentralChiSquare( 1.4 , 3.8 , 0.7 )=0.096719 , complementary=0.903281 pNonCentralChiSquare( 1.4 , 3.8 , 0.9 )=0.120642 , complementary=0.879358 pNonCentralChiSquare( 1.4 , 5.0 , 0.1 )=0.0116798 , complementary=0.98832 pNonCentralChiSquare( 1.4 , 5.0 , 0.3 )=0.027678 , complementary=0.972322 pNonCentralChiSquare( 1.4 , 5.0 , 0.5 )=0.043028 , complementary=0.956972 pNonCentralChiSquare( 1.4 , 5.0 , 0.7 )=0.0587043 , complementary=0.941296 pNonCentralChiSquare( 1.4 , 5.0 , 0.9 )=0.0749113 , complementary=0.925089 pNonCentralChiSquare( 2.6 , 0.2 , 0.1 )=0.0153806 , complementary=0.984619 pNonCentralChiSquare( 2.6 , 0.2 , 0.3 )=0.0609317 , complementary=0.939068 pNonCentralChiSquare( 2.6 , 0.2 , 0.5 )=0.112495 , complementary=0.887505 pNonCentralChiSquare( 2.6 , 0.2 , 0.7 )=0.165677 , complementary=0.834323 pNonCentralChiSquare( 2.6 , 0.2 , 0.9 )=0.218569 , complementary=0.781431 pNonCentralChiSquare( 2.6 , 1.4 , 0.1 )=0.00855084 , complementary=0.991449 pNonCentralChiSquare( 2.6 , 1.4 , 0.3 )=0.0347375 , complementary=0.965262 pNonCentralChiSquare( 2.6 , 1.4 , 0.5 )=0.0657071 , complementary=0.934293 pNonCentralChiSquare( 2.6 , 1.4 , 0.7 )=0.0990561 , complementary=0.900944 pNonCentralChiSquare( 2.6 , 1.4 , 0.9 )=0.133653 , complementary=0.866347 pNonCentralChiSquare( 2.6 , 2.6 , 0.1 )=0.0047536 , complementary=0.995246 pNonCentralChiSquare( 2.6 , 2.6 , 0.3 )=0.0197958 , complementary=0.980204 pNonCentralChiSquare( 2.6 , 2.6 , 0.5 )=0.038337 , complementary=0.961663 pNonCentralChiSquare( 2.6 , 2.6 , 0.7 )=0.0591062 , complementary=0.940894 pNonCentralChiSquare( 2.6 , 2.6 , 0.9 )=0.0814749 , complementary=0.918525 pNonCentralChiSquare( 2.6 , 3.8 , 0.1 )=0.00264251 , complementary=0.997357 pNonCentralChiSquare( 2.6 , 3.8 , 0.3 )=0.0112764 , complementary=0.988724 pNonCentralChiSquare( 2.6 , 3.8 , 0.5 )=0.0223448 , complementary=0.977655 pNonCentralChiSquare( 2.6 , 3.8 , 0.7 )=0.0352029 , complementary=0.964797 pNonCentralChiSquare( 2.6 , 3.8 , 0.9 )=0.0495269 , complementary=0.950473 pNonCentralChiSquare( 2.6 , 5.0 , 0.1 )=0.00146889 , complementary=0.998531 pNonCentralChiSquare( 2.6 , 5.0 , 0.3 )=0.00642093 , complementary=0.993579 pNonCentralChiSquare( 2.6 , 5.0 , 0.5 )=0.013011 , complementary=0.986989 pNonCentralChiSquare( 2.6 , 5.0 , 0.7 )=0.02093 , complementary=0.97907 pNonCentralChiSquare( 2.6 , 5.0 , 0.9 )=0.030028 , complementary=0.969972 pNonCentralChiSquare( 3.8 , 0.2 , 0.1 )=0.00161935 , complementary=0.998381 pNonCentralChiSquare( 3.8 , 0.2 , 0.3 )=0.0122783 , complementary=0.987722 pNonCentralChiSquare( 3.8 , 0.2 , 0.5 )=0.0304894 , complementary=0.969511 pNonCentralChiSquare( 3.8 , 0.2 , 0.7 )=0.0543902 , complementary=0.94561 pNonCentralChiSquare( 3.8 , 0.2 , 0.9 )=0.0825763 , complementary=0.917424 pNonCentralChiSquare( 3.8 , 1.4 , 0.1 )=0.000897902 , complementary=0.999102 pNonCentralChiSquare( 3.8 , 1.4 , 0.3 )=0.00694693 , complementary=0.993053 pNonCentralChiSquare( 3.8 , 1.4 , 0.5 )=0.0175934 , complementary=0.982407 pNonCentralChiSquare( 3.8 , 1.4 , 0.7 )=0.031993 , complementary=0.968007 pNonCentralChiSquare( 3.8 , 1.4 , 0.9 )=0.0494895 , complementary=0.950511 pNonCentralChiSquare( 3.8 , 2.6 , 0.1 )=0.000497858 , complementary=0.999502 pNonCentralChiSquare( 3.8 , 2.6 , 0.3 )=0.00392958 , complementary=0.99607 pNonCentralChiSquare( 3.8 , 2.6 , 0.5 )=0.0101458 , complementary=0.989854 pNonCentralChiSquare( 3.8 , 2.6 , 0.7 )=0.0187973 , complementary=0.981203 pNonCentralChiSquare( 3.8 , 2.6 , 0.9 )=0.0296067 , complementary=0.970393 pNonCentralChiSquare( 3.8 , 3.8 , 0.1 )=0.000276039 , complementary=0.999724 pNonCentralChiSquare( 3.8 , 3.8 , 0.3 )=0.0022223 , complementary=0.997778 pNonCentralChiSquare( 3.8 , 3.8 , 0.5 )=0.00584748 , complementary=0.994153 pNonCentralChiSquare( 3.8 , 3.8 , 0.7 )=0.0110323 , complementary=0.988968 pNonCentralChiSquare( 3.8 , 3.8 , 0.9 )=0.0176822 , complementary=0.982318 pNonCentralChiSquare( 3.8 , 5.0 , 0.1 )=0.000153047 , complementary=0.999847 pNonCentralChiSquare( 3.8 , 5.0 , 0.3 )=0.0012565 , complementary=0.998743 pNonCentralChiSquare( 3.8 , 5.0 , 0.5 )=0.00336826 , complementary=0.996632 pNonCentralChiSquare( 3.8 , 5.0 , 0.7 )=0.0064683 , complementary=0.993532 pNonCentralChiSquare( 3.8 , 5.0 , 0.9 )=0.0105438 , complementary=0.989456 pNonCentralChiSquare( 5.0 , 0.2 , 0.1 )=0.000147079 , complementary=0.999853 pNonCentralChiSquare( 5.0 , 0.2 , 0.3 )=0.00214169 , complementary=0.997858 pNonCentralChiSquare( 5.0 , 0.2 , 0.5 )=0.00717736 , complementary=0.992823 pNonCentralChiSquare( 5.0 , 0.2 , 0.7 )=0.0155617 , complementary=0.984438 pNonCentralChiSquare( 5.0 , 0.2 , 0.9 )=0.0272824 , complementary=0.972718 pNonCentralChiSquare( 5.0 , 1.4 , 0.1 )=8.14106e-05 , complementary=0.999919 pNonCentralChiSquare( 5.0 , 1.4 , 0.3 )=0.00120559 , complementary=0.998794 pNonCentralChiSquare( 5.0 , 1.4 , 0.5 )=0.00410761 , complementary=0.995892 pNonCentralChiSquare( 5.0 , 1.4 , 0.7 )=0.00905177 , complementary=0.990948 pNonCentralChiSquare( 5.0 , 1.4 , 0.9 )=0.0161242 , complementary=0.983876 pNonCentralChiSquare( 5.0 , 2.6 , 0.1 )=4.50613e-05 , complementary=0.999955 pNonCentralChiSquare( 5.0 , 2.6 , 0.3 )=0.000678549 , complementary=0.999321 pNonCentralChiSquare( 5.0 , 2.6 , 0.5 )=0.00234991 , complementary=0.99765 pNonCentralChiSquare( 5.0 , 2.6 , 0.7 )=0.0052614 , complementary=0.994739 pNonCentralChiSquare( 5.0 , 2.6 , 0.9 )=0.00951886 , complementary=0.990481 pNonCentralChiSquare( 5.0 , 3.8 , 0.1 )=2.49413e-05 , complementary=0.999975 pNonCentralChiSquare( 5.0 , 3.8 , 0.3 )=0.000381859 , complementary=0.999618 pNonCentralChiSquare( 5.0 , 3.8 , 0.5 )=0.00134386 , complementary=0.998656 pNonCentralChiSquare( 5.0 , 3.8 , 0.7 )=0.00305615 , complementary=0.996944 pNonCentralChiSquare( 5.0 , 3.8 , 0.9 )=0.00561339 , complementary=0.994387 pNonCentralChiSquare( 5.0 , 5.0 , 0.1 )=1.38047e-05 , complementary=0.999986 pNonCentralChiSquare( 5.0 , 5.0 , 0.3 )=0.000214866 , complementary=0.999785 pNonCentralChiSquare( 5.0 , 5.0 , 0.5 )=0.000768256 , complementary=0.999232 pNonCentralChiSquare( 5.0 , 5.0 , 0.7 )=0.00177404 , complementary=0.998226 pNonCentralChiSquare( 5.0 , 5.0 , 0.9 )=0.0033069 , complementary=0.996693 rNonCentralChiSquare( 0.2 , 0.2 )=0.0612653 rNonCentralChiSquare( 0.2 , 0.2 )=4.76134 rNonCentralChiSquare( 0.2 , 0.2 )=0.038133 rNonCentralChiSquare( 0.2 , 0.2 )=1.71477e-05 rNonCentralChiSquare( 0.2 , 0.2 )=0.000417952 rNonCentralChiSquare( 0.2 , 1.4 )=0.00325601 rNonCentralChiSquare( 0.2 , 1.4 )=2.07897 rNonCentralChiSquare( 0.2 , 1.4 )=0.0239742 rNonCentralChiSquare( 0.2 , 1.4 )=0.0361934 rNonCentralChiSquare( 0.2 , 1.4 )=0.561101 rNonCentralChiSquare( 0.2 , 2.6 )=0.608614 rNonCentralChiSquare( 0.2 , 2.6 )=2.47661 rNonCentralChiSquare( 0.2 , 2.6 )=5.28009 rNonCentralChiSquare( 0.2 , 2.6 )=3.31977 rNonCentralChiSquare( 0.2 , 2.6 )=2.93009 rNonCentralChiSquare( 0.2 , 3.8 )=0.934387 rNonCentralChiSquare( 0.2 , 3.8 )=9.20111 rNonCentralChiSquare( 0.2 , 3.8 )=6.10443 rNonCentralChiSquare( 0.2 , 3.8 )=11.642 rNonCentralChiSquare( 0.2 , 3.8 )=1.06002 rNonCentralChiSquare( 0.2 , 5.0 )=3.14006 rNonCentralChiSquare( 0.2 , 5.0 )=3.85811 rNonCentralChiSquare( 0.2 , 5.0 )=5.44288 rNonCentralChiSquare( 0.2 , 5.0 )=16.3424 rNonCentralChiSquare( 0.2 , 5.0 )=9.41437 rNonCentralChiSquare( 1.4 , 0.2 )=0.26634 rNonCentralChiSquare( 1.4 , 0.2 )=2.37055 rNonCentralChiSquare( 1.4 , 0.2 )=3.48665 rNonCentralChiSquare( 1.4 , 0.2 )=0.89323 rNonCentralChiSquare( 1.4 , 0.2 )=1.79408 rNonCentralChiSquare( 1.4 , 1.4 )=0.0821739 rNonCentralChiSquare( 1.4 , 1.4 )=2.20005 rNonCentralChiSquare( 1.4 , 1.4 )=3.39576 rNonCentralChiSquare( 1.4 , 1.4 )=1.23198 rNonCentralChiSquare( 1.4 , 1.4 )=0.991647 rNonCentralChiSquare( 1.4 , 2.6 )=0.375739 rNonCentralChiSquare( 1.4 , 2.6 )=6.61233 rNonCentralChiSquare( 1.4 , 2.6 )=2.81355 rNonCentralChiSquare( 1.4 , 2.6 )=8.49984 rNonCentralChiSquare( 1.4 , 2.6 )=1.07351 rNonCentralChiSquare( 1.4 , 3.8 )=4.59694 rNonCentralChiSquare( 1.4 , 3.8 )=8.596 rNonCentralChiSquare( 1.4 , 3.8 )=4.46206 rNonCentralChiSquare( 1.4 , 3.8 )=6.91333 rNonCentralChiSquare( 1.4 , 3.8 )=7.15488 rNonCentralChiSquare( 1.4 , 5.0 )=2.46596 rNonCentralChiSquare( 1.4 , 5.0 )=0.350294 rNonCentralChiSquare( 1.4 , 5.0 )=2.41434 rNonCentralChiSquare( 1.4 , 5.0 )=1.12 rNonCentralChiSquare( 1.4 , 5.0 )=4.45259 rNonCentralChiSquare( 2.6 , 0.2 )=1.08586 rNonCentralChiSquare( 2.6 , 0.2 )=1.68427 rNonCentralChiSquare( 2.6 , 0.2 )=0.955528 rNonCentralChiSquare( 2.6 , 0.2 )=10.587 rNonCentralChiSquare( 2.6 , 0.2 )=3.40341 rNonCentralChiSquare( 2.6 , 1.4 )=1.00498 rNonCentralChiSquare( 2.6 , 1.4 )=3.55186 rNonCentralChiSquare( 2.6 , 1.4 )=3.70253 rNonCentralChiSquare( 2.6 , 1.4 )=4.49896 rNonCentralChiSquare( 2.6 , 1.4 )=4.58234 rNonCentralChiSquare( 2.6 , 2.6 )=5.95968 rNonCentralChiSquare( 2.6 , 2.6 )=1.0963 rNonCentralChiSquare( 2.6 , 2.6 )=0.981728 rNonCentralChiSquare( 2.6 , 2.6 )=2.7402 rNonCentralChiSquare( 2.6 , 2.6 )=6.14636 rNonCentralChiSquare( 2.6 , 3.8 )=1.09154 rNonCentralChiSquare( 2.6 , 3.8 )=8.64628 rNonCentralChiSquare( 2.6 , 3.8 )=0.0890308 rNonCentralChiSquare( 2.6 , 3.8 )=8.45384 rNonCentralChiSquare( 2.6 , 3.8 )=13.5536 rNonCentralChiSquare( 2.6 , 5.0 )=9.99927 rNonCentralChiSquare( 2.6 , 5.0 )=1.86201 rNonCentralChiSquare( 2.6 , 5.0 )=10.1853 rNonCentralChiSquare( 2.6 , 5.0 )=4.2474 rNonCentralChiSquare( 2.6 , 5.0 )=7.71897 rNonCentralChiSquare( 3.8 , 0.2 )=4.19774 rNonCentralChiSquare( 3.8 , 0.2 )=2.88942 rNonCentralChiSquare( 3.8 , 0.2 )=10.1338 rNonCentralChiSquare( 3.8 , 0.2 )=3.30303 rNonCentralChiSquare( 3.8 , 0.2 )=0.721482 rNonCentralChiSquare( 3.8 , 1.4 )=6.08327 rNonCentralChiSquare( 3.8 , 1.4 )=9.54997 rNonCentralChiSquare( 3.8 , 1.4 )=5.78148 rNonCentralChiSquare( 3.8 , 1.4 )=0.630014 rNonCentralChiSquare( 3.8 , 1.4 )=5.81862 rNonCentralChiSquare( 3.8 , 2.6 )=7.27571 rNonCentralChiSquare( 3.8 , 2.6 )=0.975429 rNonCentralChiSquare( 3.8 , 2.6 )=6.61349 rNonCentralChiSquare( 3.8 , 2.6 )=6.98297 rNonCentralChiSquare( 3.8 , 2.6 )=3.25552 rNonCentralChiSquare( 3.8 , 3.8 )=0.767204 rNonCentralChiSquare( 3.8 , 3.8 )=3.36333 rNonCentralChiSquare( 3.8 , 3.8 )=3.57949 rNonCentralChiSquare( 3.8 , 3.8 )=4.263 rNonCentralChiSquare( 3.8 , 3.8 )=2.89343 rNonCentralChiSquare( 3.8 , 5.0 )=4.22781 rNonCentralChiSquare( 3.8 , 5.0 )=12.4908 rNonCentralChiSquare( 3.8 , 5.0 )=9.15028 rNonCentralChiSquare( 3.8 , 5.0 )=4.54976 rNonCentralChiSquare( 3.8 , 5.0 )=12.439 rNonCentralChiSquare( 5.0 , 0.2 )=1.69273 rNonCentralChiSquare( 5.0 , 0.2 )=2.81985 rNonCentralChiSquare( 5.0 , 0.2 )=7.24405 rNonCentralChiSquare( 5.0 , 0.2 )=11.4825 rNonCentralChiSquare( 5.0 , 0.2 )=2.01198 rNonCentralChiSquare( 5.0 , 1.4 )=2.97689 rNonCentralChiSquare( 5.0 , 1.4 )=4.89329 rNonCentralChiSquare( 5.0 , 1.4 )=3.70067 rNonCentralChiSquare( 5.0 , 1.4 )=4.16863 rNonCentralChiSquare( 5.0 , 1.4 )=11.0268 rNonCentralChiSquare( 5.0 , 2.6 )=2.48859 rNonCentralChiSquare( 5.0 , 2.6 )=6.32029 rNonCentralChiSquare( 5.0 , 2.6 )=5.56539 rNonCentralChiSquare( 5.0 , 2.6 )=9.47491 rNonCentralChiSquare( 5.0 , 2.6 )=13.9559 rNonCentralChiSquare( 5.0 , 3.8 )=10.361 rNonCentralChiSquare( 5.0 , 3.8 )=1.09388 rNonCentralChiSquare( 5.0 , 3.8 )=5.42167 rNonCentralChiSquare( 5.0 , 3.8 )=11.1485 rNonCentralChiSquare( 5.0 , 3.8 )=12.514 rNonCentralChiSquare( 5.0 , 5.0 )=11.3336 rNonCentralChiSquare( 5.0 , 5.0 )=6.2603 rNonCentralChiSquare( 5.0 , 5.0 )=14.7487 rNonCentralChiSquare( 5.0 , 5.0 )=11.6438 rNonCentralChiSquare( 5.0 , 5.0 )=12.4474 openturns-1.9/python/test/t_DistFunc_noncentralchisquare.py000077500000000000000000000040061307543307100244720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # NonCentralChiSquare related functions # dNonCentralChiSquare nuMin = 0.2 nuMax = 5.0 n1 = 5 lambdaMin = 0.2 lambdaMax = 5.0 n2 = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): lambda_ = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("dNonCentralChiSquare(", nu, ", ", lambda_, ", %.12g" % x, ")=%.6g" % DistFunc.dNonCentralChiSquare(nu, lambda_, x)) # pNonCentralChiSquare nuMin = 0.2 nuMax = 5.0 n1 = 5 lambdaMin = 0.2 lambdaMax = 5.0 n2 = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): lambda_ = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pNonCentralChiSquare(", nu, ", ", lambda_, ", %.12g" % x, ")=%.6g" % DistFunc.pNonCentralChiSquare( nu, lambda_, x), ", complementary=%.6g" % DistFunc.pNonCentralChiSquare(nu, lambda_, x, True)) # rNonCentralChiSquare nuMin = 0.2 nuMax = 5.0 n1 = 5 lambdaMin = 0.2 lambdaMax = 5.0 n2 = 5 nR = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): lambda_ = lambdaMin + (lambdaMax - lambdaMin) * i2 / (n2 - 1) for iR in range(nR): print("rNonCentralChiSquare(", nu, ", ", lambda_, ")=%.6g" % DistFunc.rNonCentralChiSquare(nu, lambda_)) except: import sys print("t_DistFunc_noncentralchisquare.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_noncentralstudent.expout000066400000000000000000000504411307543307100250710ustar00rootroot00000000000000dNonCentralStudent( 0.2 , 0.2 , 0.1 )=0.195616 dNonCentralStudent( 0.2 , 0.2 , 0.3 )=0.171706 dNonCentralStudent( 0.2 , 0.2 , 0.5 )=0.136747 dNonCentralStudent( 0.2 , 0.2 , 0.7 )=0.107823 dNonCentralStudent( 0.2 , 0.2 , 0.9 )=0.0866756 dNonCentralStudent( 0.2 , 1.4 , 0.1 )=0.0966703 dNonCentralStudent( 0.2 , 1.4 , 0.3 )=0.137274 dNonCentralStudent( 0.2 , 1.4 , 0.5 )=0.150602 dNonCentralStudent( 0.2 , 1.4 , 0.7 )=0.142532 dNonCentralStudent( 0.2 , 1.4 , 0.9 )=0.127164 dNonCentralStudent( 0.2 , 2.6 , 0.1 )=0.0116755 dNonCentralStudent( 0.2 , 2.6 , 0.3 )=0.0335846 dNonCentralStudent( 0.2 , 2.6 , 0.5 )=0.0655722 dNonCentralStudent( 0.2 , 2.6 , 0.7 )=0.0888641 dNonCentralStudent( 0.2 , 2.6 , 0.9 )=0.0981329 dNonCentralStudent( 0.2 , 3.8 , 0.1 )=0.000346153 dNonCentralStudent( 0.2 , 3.8 , 0.3 )=0.00271108 dNonCentralStudent( 0.2 , 3.8 , 0.5 )=0.0132314 dNonCentralStudent( 0.2 , 3.8 , 0.7 )=0.0321665 dNonCentralStudent( 0.2 , 3.8 , 0.9 )=0.050349 dNonCentralStudent( 0.2 , 5.0 , 0.1 )=2.53101e-06 dNonCentralStudent( 0.2 , 5.0 , 0.3 )=7.65629e-05 dNonCentralStudent( 0.2 , 5.0 , 0.5 )=0.00134722 dNonCentralStudent( 0.2 , 5.0 , 0.7 )=0.0073899 dNonCentralStudent( 0.2 , 5.0 , 0.9 )=0.0187694 dNonCentralStudent( 1.4 , 0.2 , 0.1 )=0.335629 dNonCentralStudent( 1.4 , 0.2 , 0.3 )=0.328809 dNonCentralStudent( 1.4 , 0.2 , 0.5 )=0.303097 dNonCentralStudent( 1.4 , 0.2 , 0.7 )=0.266567 dNonCentralStudent( 1.4 , 0.2 , 0.9 )=0.2272 dNonCentralStudent( 1.4 , 1.4 , 0.1 )=0.148486 dNonCentralStudent( 1.4 , 1.4 , 0.3 )=0.195381 dNonCentralStudent( 1.4 , 1.4 , 0.5 )=0.239006 dNonCentralStudent( 1.4 , 1.4 , 0.7 )=0.270636 dNonCentralStudent( 1.4 , 1.4 , 0.9 )=0.285726 dNonCentralStudent( 1.4 , 2.6 , 0.1 )=0.0156377 dNonCentralStudent( 1.4 , 2.6 , 0.3 )=0.0287285 dNonCentralStudent( 1.4 , 2.6 , 0.5 )=0.0501795 dNonCentralStudent( 1.4 , 2.6 , 0.7 )=0.0803627 dNonCentralStudent( 1.4 , 2.6 , 0.9 )=0.116083 dNonCentralStudent( 1.4 , 3.8 , 0.1 )=0.000392098 dNonCentralStudent( 1.4 , 3.8 , 0.3 )=0.00104998 dNonCentralStudent( 1.4 , 3.8 , 0.5 )=0.00285531 dNonCentralStudent( 1.4 , 3.8 , 0.7 )=0.00725525 dNonCentralStudent( 1.4 , 3.8 , 0.9 )=0.0162246 dNonCentralStudent( 1.4 , 5.0 , 0.1 )=2.34115e-06 dNonCentralStudent( 1.4 , 5.0 , 0.3 )=9.58171e-06 dNonCentralStudent( 1.4 , 5.0 , 0.5 )=4.47804e-05 dNonCentralStudent( 1.4 , 5.0 , 0.7 )=0.000205981 dNonCentralStudent( 1.4 , 5.0 , 0.9 )=0.000820326 dNonCentralStudent( 2.6 , 0.2 , 0.1 )=0.361327 dNonCentralStudent( 2.6 , 0.2 , 0.3 )=0.357305 dNonCentralStudent( 2.6 , 0.2 , 0.5 )=0.335366 dNonCentralStudent( 2.6 , 0.2 , 0.7 )=0.300818 dNonCentralStudent( 2.6 , 0.2 , 0.9 )=0.260202 dNonCentralStudent( 2.6 , 1.4 , 0.1 )=0.158077 dNonCentralStudent( 2.6 , 1.4 , 0.3 )=0.204925 dNonCentralStudent( 2.6 , 1.4 , 0.5 )=0.250973 dNonCentralStudent( 2.6 , 1.4 , 0.7 )=0.28925 dNonCentralStudent( 2.6 , 1.4 , 0.9 )=0.314223 dNonCentralStudent( 2.6 , 2.6 , 0.1 )=0.0164281 dNonCentralStudent( 2.6 , 2.6 , 0.3 )=0.028521 dNonCentralStudent( 2.6 , 2.6 , 0.5 )=0.0475146 dNonCentralStudent( 2.6 , 2.6 , 0.7 )=0.074528 dNonCentralStudent( 2.6 , 2.6 , 0.9 )=0.108753 dNonCentralStudent( 2.6 , 3.8 , 0.1 )=0.000405584 dNonCentralStudent( 2.6 , 3.8 , 0.3 )=0.000964692 dNonCentralStudent( 2.6 , 3.8 , 0.5 )=0.00229004 dNonCentralStudent( 2.6 , 3.8 , 0.7 )=0.00522396 dNonCentralStudent( 2.6 , 3.8 , 0.9 )=0.0110853 dNonCentralStudent( 2.6 , 5.0 , 0.1 )=2.37889e-06 dNonCentralStudent( 2.6 , 5.0 , 0.3 )=7.94166e-06 dNonCentralStudent( 2.6 , 5.0 , 0.5 )=2.82718e-05 dNonCentralStudent( 2.6 , 5.0 , 0.7 )=0.00010105 dNonCentralStudent( 2.6 , 5.0 , 0.9 )=0.00034112 dNonCentralStudent( 3.8 , 0.2 , 0.1 )=0.371953 dNonCentralStudent( 3.8 , 0.2 , 0.3 )=0.369098 dNonCentralStudent( 3.8 , 0.2 , 0.5 )=0.348898 dNonCentralStudent( 3.8 , 0.2 , 0.7 )=0.315562 dNonCentralStudent( 3.8 , 0.2 , 0.9 )=0.274808 dNonCentralStudent( 3.8 , 1.4 , 0.1 )=0.162044 dNonCentralStudent( 3.8 , 1.4 , 0.3 )=0.208819 dNonCentralStudent( 3.8 , 1.4 , 0.5 )=0.255655 dNonCentralStudent( 3.8 , 1.4 , 0.7 )=0.296458 dNonCentralStudent( 3.8 , 1.4 , 0.9 )=0.325742 dNonCentralStudent( 3.8 , 2.6 , 0.1 )=0.0167564 dNonCentralStudent( 3.8 , 2.6 , 0.3 )=0.028458 dNonCentralStudent( 3.8 , 2.6 , 0.5 )=0.0464552 dNonCentralStudent( 3.8 , 2.6 , 0.7 )=0.0719742 dNonCentralStudent( 3.8 , 2.6 , 0.9 )=0.104918 dNonCentralStudent( 3.8 , 3.8 , 0.1 )=0.000411285 dNonCentralStudent( 3.8 , 3.8 , 0.3 )=0.000934893 dNonCentralStudent( 3.8 , 3.8 , 0.5 )=0.00209997 dNonCentralStudent( 3.8 , 3.8 , 0.7 )=0.0045517 dNonCentralStudent( 3.8 , 3.8 , 0.9 )=0.00932118 dNonCentralStudent( 3.8 , 5.0 , 0.1 )=2.39627e-06 dNonCentralStudent( 3.8 , 5.0 , 0.3 )=7.40896e-06 dNonCentralStudent( 3.8 , 5.0 , 0.5 )=2.36895e-05 dNonCentralStudent( 3.8 , 5.0 , 0.7 )=7.55621e-05 dNonCentralStudent( 3.8 , 5.0 , 0.9 )=0.000231695 dNonCentralStudent( 5.0 , 0.2 , 0.1 )=0.377722 dNonCentralStudent( 5.0 , 0.2 , 0.3 )=0.375509 dNonCentralStudent( 5.0 , 0.2 , 0.5 )=0.356303 dNonCentralStudent( 5.0 , 0.2 , 0.7 )=0.323737 dNonCentralStudent( 5.0 , 0.2 , 0.9 )=0.283025 dNonCentralStudent( 5.0 , 1.4 , 0.1 )=0.164197 dNonCentralStudent( 5.0 , 1.4 , 0.3 )=0.21092 dNonCentralStudent( 5.0 , 1.4 , 0.5 )=0.258135 dNonCentralStudent( 5.0 , 1.4 , 0.7 )=0.300249 dNonCentralStudent( 5.0 , 1.4 , 0.9 )=0.33192 dNonCentralStudent( 5.0 , 2.6 , 0.1 )=0.0169347 dNonCentralStudent( 5.0 , 2.6 , 0.3 )=0.028427 dNonCentralStudent( 5.0 , 2.6 , 0.5 )=0.0458856 dNonCentralStudent( 5.0 , 2.6 , 0.7 )=0.0705534 dNonCentralStudent( 5.0 , 2.6 , 0.9 )=0.102642 dNonCentralStudent( 5.0 , 3.8 , 0.1 )=0.000414397 dNonCentralStudent( 5.0 , 3.8 , 0.3 )=0.0009197 dNonCentralStudent( 5.0 , 3.8 , 0.5 )=0.00200509 dNonCentralStudent( 5.0 , 3.8 , 0.7 )=0.00422102 dNonCentralStudent( 5.0 , 3.8 , 0.9 )=0.00844907 dNonCentralStudent( 5.0 , 5.0 , 0.1 )=2.40597e-06 dNonCentralStudent( 5.0 , 5.0 , 0.3 )=7.1458e-06 dNonCentralStudent( 5.0 , 5.0 , 0.5 )=2.15797e-05 dNonCentralStudent( 5.0 , 5.0 , 0.7 )=6.46041e-05 dNonCentralStudent( 5.0 , 5.0 , 0.9 )=0.000186833 pNonCentralStudent( 0.2 , 0.2 , 0.1 )=0.440296 , complementary=0.559704 pNonCentralStudent( 0.2 , 0.2 , 0.3 )=0.477478 , complementary=0.522522 pNonCentralStudent( 0.2 , 0.2 , 0.5 )=0.508294 , complementary=0.491706 pNonCentralStudent( 0.2 , 0.2 , 0.7 )=0.532613 , complementary=0.467387 pNonCentralStudent( 0.2 , 0.2 , 0.9 )=0.551948 , complementary=0.448052 pNonCentralStudent( 0.2 , 1.4 , 0.1 )=0.0892746 , complementary=0.910725 pNonCentralStudent( 0.2 , 1.4 , 0.3 )=0.112986 , complementary=0.887014 pNonCentralStudent( 0.2 , 1.4 , 0.5 )=0.142259 , complementary=0.857741 pNonCentralStudent( 0.2 , 1.4 , 0.7 )=0.171793 , complementary=0.828207 pNonCentralStudent( 0.2 , 1.4 , 0.9 )=0.198805 , complementary=0.801195 pNonCentralStudent( 0.2 , 2.6 , 0.1 )=0.00555527 , complementary=0.994445 pNonCentralStudent( 0.2 , 2.6 , 0.3 )=0.00979229 , complementary=0.990208 pNonCentralStudent( 0.2 , 2.6 , 0.5 )=0.0197091 , complementary=0.980291 pNonCentralStudent( 0.2 , 2.6 , 0.7 )=0.0353949 , complementary=0.964605 pNonCentralStudent( 0.2 , 2.6 , 0.9 )=0.0542989 , complementary=0.945701 pNonCentralStudent( 0.2 , 3.8 , 0.1 )=9.50467e-05 , complementary=0.999905 pNonCentralStudent( 0.2 , 3.8 , 0.3 )=0.000325614 , complementary=0.999674 pNonCentralStudent( 0.2 , 3.8 , 0.5 )=0.00173766 , complementary=0.998262 pNonCentralStudent( 0.2 , 3.8 , 0.7 )=0.00620761 , complementary=0.993792 pNonCentralStudent( 0.2 , 3.8 , 0.9 )=0.0145399 , complementary=0.98546 pNonCentralStudent( 0.2 , 5.0 , 0.1 )=4.26665e-07 , complementary=1 pNonCentralStudent( 0.2 , 5.0 , 0.3 )=4.66282e-06 , complementary=0.999995 pNonCentralStudent( 0.2 , 5.0 , 0.5 )=0.000101887 , complementary=0.999898 pNonCentralStudent( 0.2 , 5.0 , 0.7 )=0.000870284 , complementary=0.99913 pNonCentralStudent( 0.2 , 5.0 , 0.9 )=0.00342707 , complementary=0.996573 pNonCentralStudent( 1.4 , 0.2 , 0.1 )=0.454099 , complementary=0.545901 pNonCentralStudent( 1.4 , 0.2 , 0.3 )=0.520907 , complementary=0.479093 pNonCentralStudent( 1.4 , 0.2 , 0.5 )=0.584352 , complementary=0.415648 pNonCentralStudent( 1.4 , 0.2 , 0.7 )=0.641426 , complementary=0.358574 pNonCentralStudent( 1.4 , 0.2 , 0.9 )=0.690797 , complementary=0.309203 pNonCentralStudent( 1.4 , 1.4 , 0.1 )=0.0944955 , complementary=0.905505 pNonCentralStudent( 1.4 , 1.4 , 0.3 )=0.128858 , complementary=0.871142 pNonCentralStudent( 1.4 , 1.4 , 0.5 )=0.172431 , complementary=0.827569 pNonCentralStudent( 1.4 , 1.4 , 0.7 )=0.22365 , complementary=0.77635 pNonCentralStudent( 1.4 , 1.4 , 0.9 )=0.27957 , complementary=0.72043 pNonCentralStudent( 1.4 , 2.6 , 0.1 )=0.0060064 , complementary=0.993994 pNonCentralStudent( 1.4 , 2.6 , 0.3 )=0.0103213 , complementary=0.989679 pNonCentralStudent( 1.4 , 2.6 , 0.5 )=0.0180598 , complementary=0.98194 pNonCentralStudent( 1.4 , 2.6 , 0.7 )=0.030984 , complementary=0.969016 pNonCentralStudent( 1.4 , 2.6 , 0.9 )=0.0505803 , complementary=0.94942 pNonCentralStudent( 1.4 , 3.8 , 0.1 )=0.000103669 , complementary=0.999896 pNonCentralStudent( 1.4 , 3.8 , 0.3 )=0.000236638 , complementary=0.999763 pNonCentralStudent( 1.4 , 3.8 , 0.5 )=0.000598423 , complementary=0.999402 pNonCentralStudent( 1.4 , 3.8 , 0.7 )=0.00155027 , complementary=0.99845 pNonCentralStudent( 1.4 , 3.8 , 0.9 )=0.00380628 , complementary=0.996194 pNonCentralStudent( 1.4 , 5.0 , 0.1 )=4.60098e-07 , complementary=1 pNonCentralStudent( 1.4 , 5.0 , 0.3 )=1.47182e-06 , complementary=0.999999 pNonCentralStudent( 1.4 , 5.0 , 0.5 )=6.01639e-06 , complementary=0.999994 pNonCentralStudent( 1.4 , 5.0 , 0.7 )=2.73021e-05 , complementary=0.999973 pNonCentralStudent( 1.4 , 5.0 , 0.9 )=0.000117596 , complementary=0.999882 pNonCentralStudent( 2.6 , 0.2 , 0.1 )=0.456644 , complementary=0.543356 pNonCentralStudent( 2.6 , 0.2 , 0.3 )=0.528833 , complementary=0.471167 pNonCentralStudent( 2.6 , 0.2 , 0.5 )=0.598363 , complementary=0.401637 pNonCentralStudent( 2.6 , 0.2 , 0.7 )=0.662136 , complementary=0.337864 pNonCentralStudent( 2.6 , 0.2 , 0.9 )=0.718288 , complementary=0.281712 pNonCentralStudent( 2.6 , 1.4 , 0.1 )=0.0954614 , complementary=0.904539 pNonCentralStudent( 2.6 , 1.4 , 0.3 )=0.131719 , complementary=0.868281 pNonCentralStudent( 2.6 , 1.4 , 0.5 )=0.177381 , complementary=0.822619 pNonCentralStudent( 2.6 , 1.4 , 0.7 )=0.231587 , complementary=0.768413 pNonCentralStudent( 2.6 , 1.4 , 0.9 )=0.292186 , complementary=0.707814 pNonCentralStudent( 2.6 , 2.6 , 0.1 )=0.00609152 , complementary=0.993908 pNonCentralStudent( 2.6 , 2.6 , 0.3 )=0.0104869 , complementary=0.989513 pNonCentralStudent( 2.6 , 2.6 , 0.5 )=0.0179617 , complementary=0.982038 pNonCentralStudent( 2.6 , 2.6 , 0.7 )=0.0300318 , complementary=0.969968 pNonCentralStudent( 2.6 , 2.6 , 0.9 )=0.0482592 , complementary=0.951741 pNonCentralStudent( 2.6 , 3.8 , 0.1 )=0.000105395 , complementary=0.999895 pNonCentralStudent( 2.6 , 3.8 , 0.3 )=0.000234275 , complementary=0.999766 pNonCentralStudent( 2.6 , 3.8 , 0.5 )=0.000541433 , complementary=0.999459 pNonCentralStudent( 2.6 , 3.8 , 0.7 )=0.00125638 , complementary=0.998744 pNonCentralStudent( 2.6 , 3.8 , 0.9 )=0.00282554 , complementary=0.997174 pNonCentralStudent( 2.6 , 5.0 , 0.1 )=4.68022e-07 , complementary=1 pNonCentralStudent( 2.6 , 5.0 , 0.3 )=1.38425e-06 , complementary=0.999999 pNonCentralStudent( 2.6 , 5.0 , 0.5 )=4.57751e-06 , complementary=0.999995 pNonCentralStudent( 2.6 , 5.0 , 0.7 )=1.60321e-05 , complementary=0.999984 pNonCentralStudent( 2.6 , 5.0 , 0.9 )=5.5772e-05 , complementary=0.999944 pNonCentralStudent( 3.8 , 0.2 , 0.1 )=0.457696 , complementary=0.542304 pNonCentralStudent( 3.8 , 0.2 , 0.3 )=0.532111 , complementary=0.467889 pNonCentralStudent( 3.8 , 0.2 , 0.5 )=0.604172 , complementary=0.395828 pNonCentralStudent( 3.8 , 0.2 , 0.7 )=0.670791 , complementary=0.329209 pNonCentralStudent( 3.8 , 0.2 , 0.9 )=0.729903 , complementary=0.270097 pNonCentralStudent( 3.8 , 1.4 , 0.1 )=0.0958609 , complementary=0.904139 pNonCentralStudent( 3.8 , 1.4 , 0.3 )=0.132899 , complementary=0.867101 pNonCentralStudent( 3.8 , 1.4 , 0.5 )=0.179395 , complementary=0.820605 pNonCentralStudent( 3.8 , 1.4 , 0.7 )=0.234758 , complementary=0.765242 pNonCentralStudent( 3.8 , 1.4 , 0.9 )=0.297205 , complementary=0.702795 pNonCentralStudent( 3.8 , 2.6 , 0.1 )=0.00612677 , complementary=0.993873 pNonCentralStudent( 3.8 , 2.6 , 0.3 )=0.0105573 , complementary=0.989443 pNonCentralStudent( 3.8 , 2.6 , 0.5 )=0.0179307 , complementary=0.982069 pNonCentralStudent( 3.8 , 2.6 , 0.7 )=0.0296439 , complementary=0.970356 pNonCentralStudent( 3.8 , 2.6 , 0.9 )=0.0472198 , complementary=0.95278 pNonCentralStudent( 3.8 , 3.8 , 0.1 )=0.000106112 , complementary=0.999894 pNonCentralStudent( 3.8 , 3.8 , 0.3 )=0.000233646 , complementary=0.999766 pNonCentralStudent( 3.8 , 3.8 , 0.5 )=0.000522164 , complementary=0.999478 pNonCentralStudent( 3.8 , 3.8 , 0.7 )=0.00115851 , complementary=0.998841 pNonCentralStudent( 3.8 , 3.8 , 0.9 )=0.00249658 , complementary=0.997503 pNonCentralStudent( 3.8 , 5.0 , 0.1 )=4.71341e-07 , complementary=1 pNonCentralStudent( 3.8 , 5.0 , 0.3 )=1.35595e-06 , complementary=0.999999 pNonCentralStudent( 3.8 , 5.0 , 0.5 )=4.1537e-06 , complementary=0.999996 pNonCentralStudent( 3.8 , 5.0 , 0.7 )=1.3114e-05 , complementary=0.999987 pNonCentralStudent( 3.8 , 5.0 , 0.9 )=4.11142e-05 , complementary=0.999959 pNonCentralStudent( 5.0 , 0.2 , 0.1 )=0.458268 , complementary=0.541732 pNonCentralStudent( 5.0 , 0.2 , 0.3 )=0.53389 , complementary=0.46611 pNonCentralStudent( 5.0 , 0.2 , 0.5 )=0.607332 , complementary=0.392668 pNonCentralStudent( 5.0 , 0.2 , 0.7 )=0.675517 , complementary=0.324483 pNonCentralStudent( 5.0 , 0.2 , 0.9 )=0.736284 , complementary=0.263716 pNonCentralStudent( 5.0 , 1.4 , 0.1 )=0.0960778 , complementary=0.903922 pNonCentralStudent( 5.0 , 1.4 , 0.3 )=0.133539 , complementary=0.866461 pNonCentralStudent( 5.0 , 1.4 , 0.5 )=0.180481 , complementary=0.819519 pNonCentralStudent( 5.0 , 1.4 , 0.7 )=0.236453 , complementary=0.763547 pNonCentralStudent( 5.0 , 1.4 , 0.9 )=0.299881 , complementary=0.700119 pNonCentralStudent( 5.0 , 2.6 , 0.1 )=0.00614591 , complementary=0.993854 pNonCentralStudent( 5.0 , 2.6 , 0.3 )=0.0105958 , complementary=0.989404 pNonCentralStudent( 5.0 , 2.6 , 0.5 )=0.0179152 , complementary=0.982085 pNonCentralStudent( 5.0 , 2.6 , 0.7 )=0.029433 , complementary=0.970567 pNonCentralStudent( 5.0 , 2.6 , 0.9 )=0.046635 , complementary=0.953365 pNonCentralStudent( 5.0 , 3.8 , 0.1 )=0.000106501 , complementary=0.999893 pNonCentralStudent( 5.0 , 3.8 , 0.3 )=0.000233365 , complementary=0.999767 pNonCentralStudent( 5.0 , 3.8 , 0.5 )=0.000512502 , complementary=0.999487 pNonCentralStudent( 5.0 , 3.8 , 0.7 )=0.00111001 , complementary=0.99889 pNonCentralStudent( 5.0 , 3.8 , 0.9 )=0.00233429 , complementary=0.997666 pNonCentralStudent( 5.0 , 5.0 , 0.1 )=4.73149e-07 , complementary=1 pNonCentralStudent( 5.0 , 5.0 , 0.3 )=1.34199e-06 , complementary=0.999999 pNonCentralStudent( 5.0 , 5.0 , 0.5 )=3.95309e-06 , complementary=0.999996 pNonCentralStudent( 5.0 , 5.0 , 0.7 )=1.18148e-05 , complementary=0.999988 pNonCentralStudent( 5.0 , 5.0 , 0.9 )=3.49242e-05 , complementary=0.999965 rNonCentralStudent( 0.2 , 0.2 )=9934.8 rNonCentralStudent( 0.2 , 0.2 )=777147 rNonCentralStudent( 0.2 , 0.2 )=-0.135759 rNonCentralStudent( 0.2 , 0.2 )=21.7255 rNonCentralStudent( 0.2 , 0.2 )=-2527.19 rNonCentralStudent( 0.2 , 1.4 )=3.78141 rNonCentralStudent( 0.2 , 1.4 )=0.717253 rNonCentralStudent( 0.2 , 1.4 )=197250 rNonCentralStudent( 0.2 , 1.4 )=23.9483 rNonCentralStudent( 0.2 , 1.4 )=6.81175 rNonCentralStudent( 0.2 , 2.6 )=2.49802 rNonCentralStudent( 0.2 , 2.6 )=17.6081 rNonCentralStudent( 0.2 , 2.6 )=5.09369 rNonCentralStudent( 0.2 , 2.6 )=8.87474 rNonCentralStudent( 0.2 , 2.6 )=141.296 rNonCentralStudent( 0.2 , 3.8 )=1.64729 rNonCentralStudent( 0.2 , 3.8 )=19.8836 rNonCentralStudent( 0.2 , 3.8 )=12146.3 rNonCentralStudent( 0.2 , 3.8 )=5.31691 rNonCentralStudent( 0.2 , 3.8 )=1923.69 rNonCentralStudent( 0.2 , 5.0 )=5.22208 rNonCentralStudent( 0.2 , 5.0 )=7.04668 rNonCentralStudent( 0.2 , 5.0 )=110.327 rNonCentralStudent( 0.2 , 5.0 )=16.924 rNonCentralStudent( 0.2 , 5.0 )=8.58818 rNonCentralStudent( 1.4 , 0.2 )=-5.57995 rNonCentralStudent( 1.4 , 0.2 )=2.9374 rNonCentralStudent( 1.4 , 0.2 )=-0.833079 rNonCentralStudent( 1.4 , 0.2 )=-0.392505 rNonCentralStudent( 1.4 , 0.2 )=0.0715501 rNonCentralStudent( 1.4 , 1.4 )=0.781103 rNonCentralStudent( 1.4 , 1.4 )=3.18001 rNonCentralStudent( 1.4 , 1.4 )=6.70006 rNonCentralStudent( 1.4 , 1.4 )=1.13151 rNonCentralStudent( 1.4 , 1.4 )=52.0542 rNonCentralStudent( 1.4 , 2.6 )=5.20717 rNonCentralStudent( 1.4 , 2.6 )=2.87432 rNonCentralStudent( 1.4 , 2.6 )=2.04453 rNonCentralStudent( 1.4 , 2.6 )=6.24137 rNonCentralStudent( 1.4 , 2.6 )=3.05677 rNonCentralStudent( 1.4 , 3.8 )=2.84277 rNonCentralStudent( 1.4 , 3.8 )=0.846181 rNonCentralStudent( 1.4 , 3.8 )=1.97535 rNonCentralStudent( 1.4 , 3.8 )=7.66042 rNonCentralStudent( 1.4 , 3.8 )=7.6798 rNonCentralStudent( 1.4 , 5.0 )=29.7351 rNonCentralStudent( 1.4 , 5.0 )=6.75319 rNonCentralStudent( 1.4 , 5.0 )=97.5129 rNonCentralStudent( 1.4 , 5.0 )=37.6912 rNonCentralStudent( 1.4 , 5.0 )=8.98728 rNonCentralStudent( 2.6 , 0.2 )=-0.838138 rNonCentralStudent( 2.6 , 0.2 )=0.196618 rNonCentralStudent( 2.6 , 0.2 )=4.72526 rNonCentralStudent( 2.6 , 0.2 )=0.398024 rNonCentralStudent( 2.6 , 0.2 )=0.353525 rNonCentralStudent( 2.6 , 1.4 )=1.85205 rNonCentralStudent( 2.6 , 1.4 )=2.80567 rNonCentralStudent( 2.6 , 1.4 )=0.922602 rNonCentralStudent( 2.6 , 1.4 )=3.37366 rNonCentralStudent( 2.6 , 1.4 )=0.942145 rNonCentralStudent( 2.6 , 2.6 )=10.9561 rNonCentralStudent( 2.6 , 2.6 )=0.965111 rNonCentralStudent( 2.6 , 2.6 )=5.18197 rNonCentralStudent( 2.6 , 2.6 )=5.11594 rNonCentralStudent( 2.6 , 2.6 )=3.36479 rNonCentralStudent( 2.6 , 3.8 )=5.47612 rNonCentralStudent( 2.6 , 3.8 )=2.66678 rNonCentralStudent( 2.6 , 3.8 )=10.553 rNonCentralStudent( 2.6 , 3.8 )=8.50958 rNonCentralStudent( 2.6 , 3.8 )=14.7761 rNonCentralStudent( 2.6 , 5.0 )=3.29199 rNonCentralStudent( 2.6 , 5.0 )=6.40479 rNonCentralStudent( 2.6 , 5.0 )=8.76698 rNonCentralStudent( 2.6 , 5.0 )=7.18538 rNonCentralStudent( 2.6 , 5.0 )=9.77094 rNonCentralStudent( 3.8 , 0.2 )=2.31629 rNonCentralStudent( 3.8 , 0.2 )=-0.157768 rNonCentralStudent( 3.8 , 0.2 )=4.96538 rNonCentralStudent( 3.8 , 0.2 )=1.3264 rNonCentralStudent( 3.8 , 0.2 )=0.218784 rNonCentralStudent( 3.8 , 1.4 )=2.10245 rNonCentralStudent( 3.8 , 1.4 )=1.49228 rNonCentralStudent( 3.8 , 1.4 )=4.98706 rNonCentralStudent( 3.8 , 1.4 )=0.544448 rNonCentralStudent( 3.8 , 1.4 )=1.36688 rNonCentralStudent( 3.8 , 2.6 )=4.18523 rNonCentralStudent( 3.8 , 2.6 )=4.51351 rNonCentralStudent( 3.8 , 2.6 )=2.53294 rNonCentralStudent( 3.8 , 2.6 )=2.06967 rNonCentralStudent( 3.8 , 2.6 )=2.04626 rNonCentralStudent( 3.8 , 3.8 )=3.04623 rNonCentralStudent( 3.8 , 3.8 )=4.06596 rNonCentralStudent( 3.8 , 3.8 )=4.01627 rNonCentralStudent( 3.8 , 3.8 )=1.6563 rNonCentralStudent( 3.8 , 3.8 )=7.38507 rNonCentralStudent( 3.8 , 5.0 )=5.57045 rNonCentralStudent( 3.8 , 5.0 )=5.58475 rNonCentralStudent( 3.8 , 5.0 )=4.46189 rNonCentralStudent( 3.8 , 5.0 )=6.44042 rNonCentralStudent( 3.8 , 5.0 )=6.56722 rNonCentralStudent( 5.0 , 0.2 )=0.145208 rNonCentralStudent( 5.0 , 0.2 )=0.625313 rNonCentralStudent( 5.0 , 0.2 )=1.14924 rNonCentralStudent( 5.0 , 0.2 )=1.33753 rNonCentralStudent( 5.0 , 0.2 )=0.794765 rNonCentralStudent( 5.0 , 1.4 )=0.449776 rNonCentralStudent( 5.0 , 1.4 )=1.36769 rNonCentralStudent( 5.0 , 1.4 )=2.70149 rNonCentralStudent( 5.0 , 1.4 )=-0.661426 rNonCentralStudent( 5.0 , 1.4 )=1.53251 rNonCentralStudent( 5.0 , 2.6 )=2.20857 rNonCentralStudent( 5.0 , 2.6 )=2.17065 rNonCentralStudent( 5.0 , 2.6 )=0.956197 rNonCentralStudent( 5.0 , 2.6 )=1.76901 rNonCentralStudent( 5.0 , 2.6 )=2.99356 rNonCentralStudent( 5.0 , 3.8 )=4.15438 rNonCentralStudent( 5.0 , 3.8 )=7.95548 rNonCentralStudent( 5.0 , 3.8 )=2.75046 rNonCentralStudent( 5.0 , 3.8 )=13.348 rNonCentralStudent( 5.0 , 3.8 )=2.76854 rNonCentralStudent( 5.0 , 5.0 )=3.89296 rNonCentralStudent( 5.0 , 5.0 )=5.7349 rNonCentralStudent( 5.0 , 5.0 )=3.11155 rNonCentralStudent( 5.0 , 5.0 )=9.62167 rNonCentralStudent( 5.0 , 5.0 )=4.25349 openturns-1.9/python/test/t_DistFunc_noncentralstudent.py000077500000000000000000000037131307543307100242000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # NonCentralStudent related functions # dNonCentralStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 deltaMin = 0.2 deltaMax = 5.0 n2 = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("dNonCentralStudent(", nu, ", ", delta, ", %.12g" % x, ")=%.6g" % DistFunc.dNonCentralStudent(nu, delta, x)) # pNonCentralStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 deltaMin = 0.2 deltaMax = 5.0 n2 = 5 xMin = 0.1 xMax = 0.9 nX = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pNonCentralStudent(", nu, ", ", delta, ", %.12g" % x, ")=%.6g" % DistFunc.pNonCentralStudent( nu, delta, x), ", complementary=%.6g" % DistFunc.pNonCentralStudent(nu, delta, x, True)) # rNonCentralStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 deltaMin = 0.2 deltaMax = 5.0 n2 = 5 nR = 5 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for i2 in range(n2): delta = deltaMin + (deltaMax - deltaMin) * i2 / (n2 - 1) for iR in range(nR): print("rNonCentralStudent(", nu, ", ", delta, ")=%.6g" % DistFunc.rNonCentralStudent(nu, delta)) except: import sys print("t_DistFunc_noncentralstudent.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_normal.expout000066400000000000000000000025041307543307100226040ustar00rootroot00000000000000pNormal( 0.1 )=0.539828 , complementary=0.460172 pNormal( 0.188888888889 )=0.57491 , complementary=0.42509 pNormal( 0.277777777778 )=0.609409 , complementary=0.390591 pNormal( 0.366666666667 )=0.643066 , complementary=0.356934 pNormal( 0.455555555556 )=0.675645 , complementary=0.324355 pNormal( 0.544444444444 )=0.706932 , complementary=0.293068 pNormal( 0.633333333333 )=0.736742 , complementary=0.263258 pNormal( 0.722222222222 )=0.764921 , complementary=0.235079 pNormal( 0.811111111111 )=0.791349 , complementary=0.208651 pNormal( 0.9 )=0.81594 , complementary=0.18406 qNormal( 0.1 )=-1.28155 , complementary=1.28155 qNormal( 0.188888888889 )=-0.881998 , complementary=0.881998 qNormal( 0.277777777778 )=-0.589456 , complementary=0.589456 qNormal( 0.366666666667 )=-0.340695 , complementary=0.340695 qNormal( 0.455555555556 )=-0.111637 , complementary=0.111637 qNormal( 0.544444444444 )=0.111637 , complementary=-0.111637 qNormal( 0.633333333333 )=0.340695 , complementary=-0.340695 qNormal( 0.722222222222 )=0.589456 , complementary=-0.589456 qNormal( 0.811111111111 )=0.881998 , complementary=-0.881998 qNormal( 0.9 )=1.28155 , complementary=-1.28155 rNormal()=0.608202 rNormal()=-1.26617 rNormal()=-0.438266 rNormal()=1.20548 rNormal()=-2.18139 rNormal()=0.350042 rNormal()=-0.355007 rNormal()=1.43725 rNormal()=0.810668 rNormal()=0.793156 openturns-1.9/python/test/t_DistFunc_normal.py000077500000000000000000000015341307543307100217150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # pNormal xMin = 0.1 xMax = 0.9 nX = 10 for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pNormal( %.12g" % x, ")=%.6g" % DistFunc.pNormal( x), ", complementary=%.6g" % DistFunc.pNormal(x, True)) # qNormal qMin = 0.1 qMax = 0.9 nQ = 10 for iQ in range(nQ): q = qMin + (qMax - qMin) * iQ / (nQ - 1) print("qNormal( %.12g" % q, ")=%.6g" % DistFunc.qNormal( q), ", complementary=%.6g" % DistFunc.qNormal(q, True)) # rNormal nR = 10 for iR in range(nR): print("rNormal()=%.6g" % DistFunc.rNormal()) except: import sys print("t_DistFunc_normal.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_poisson.expout000066400000000000000000000007331307543307100230100ustar00rootroot00000000000000rPoisson( 0.2 )= 0 rPoisson( 0.2 )= 1 rPoisson( 0.2 )= 0 rPoisson( 0.2 )= 0 rPoisson( 0.2 )= 0 rPoisson( 1.4 )= 4 rPoisson( 1.4 )= 3 rPoisson( 1.4 )= 1 rPoisson( 1.4 )= 0 rPoisson( 1.4 )= 1 rPoisson( 2.6 )= 3 rPoisson( 2.6 )= 2 rPoisson( 2.6 )= 2 rPoisson( 2.6 )= 4 rPoisson( 2.6 )= 5 rPoisson( 3.8 )= 3 rPoisson( 3.8 )= 7 rPoisson( 3.8 )= 6 rPoisson( 3.8 )= 5 rPoisson( 3.8 )= 6 rPoisson( 5.0 )= 4 rPoisson( 5.0 )= 9 rPoisson( 5.0 )= 5 rPoisson( 5.0 )= 3 rPoisson( 5.0 )= 2 openturns-1.9/python/test/t_DistFunc_poisson.py000077500000000000000000000010321307543307100221100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Poisson related functions # rPoisson lambdaMin = 0.2 lambdaMax = 5.0 n1 = 5 nR = 5 for i1 in range(n1): lambda_ = lambdaMin + (lambdaMax - lambdaMin) * i1 / (n1 - 1) for iR in range(nR): print("rPoisson(", lambda_, ")=", DistFunc.rPoisson(lambda_)) except: import sys print("t_DistFunc_poisson.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistFunc_student.expout000066400000000000000000000172221307543307100230050ustar00rootroot00000000000000pStudent( 0.2 , 0.1 )=0.519555 , complementary=0.480445 pStudent( 0.2 , 0.188888888889 )=0.536073 , complementary=0.463927 pStudent( 0.2 , 0.277777777778 )=0.551258 , complementary=0.448742 pStudent( 0.2 , 0.366666666667 )=0.564919 , complementary=0.435081 pStudent( 0.2 , 0.455555555556 )=0.57708 , complementary=0.42292 pStudent( 0.2 , 0.544444444444 )=0.587878 , complementary=0.412122 pStudent( 0.2 , 0.633333333333 )=0.597486 , complementary=0.402514 pStudent( 0.2 , 0.722222222222 )=0.606072 , complementary=0.393928 pStudent( 0.2 , 0.811111111111 )=0.613789 , complementary=0.386211 pStudent( 0.2 , 0.9 )=0.620766 , complementary=0.379234 pStudent( 1.4 , 0.1 )=0.533632 , complementary=0.466368 pStudent( 1.4 , 0.188888888889 )=0.56307 , complementary=0.43693 pStudent( 1.4 , 0.277777777778 )=0.591695 , complementary=0.408305 pStudent( 1.4 , 0.366666666667 )=0.619199 , complementary=0.380801 pStudent( 1.4 , 0.455555555556 )=0.645341 , complementary=0.354659 pStudent( 1.4 , 0.544444444444 )=0.669952 , complementary=0.330048 pStudent( 1.4 , 0.633333333333 )=0.692939 , complementary=0.307061 pStudent( 1.4 , 0.722222222222 )=0.714268 , complementary=0.285732 pStudent( 1.4 , 0.811111111111 )=0.733956 , complementary=0.266044 pStudent( 1.4 , 0.9 )=0.752058 , complementary=0.247942 pStudent( 2.6 , 0.1 )=0.536228 , complementary=0.463772 pStudent( 2.6 , 0.188888888889 )=0.56803 , complementary=0.43197 pStudent( 2.6 , 0.277777777778 )=0.599113 , complementary=0.400887 pStudent( 2.6 , 0.366666666667 )=0.629184 , complementary=0.370816 pStudent( 2.6 , 0.455555555556 )=0.657993 , complementary=0.342007 pStudent( 2.6 , 0.544444444444 )=0.685348 , complementary=0.314652 pStudent( 2.6 , 0.633333333333 )=0.711109 , complementary=0.288891 pStudent( 2.6 , 0.722222222222 )=0.73519 , complementary=0.26481 pStudent( 2.6 , 0.811111111111 )=0.757555 , complementary=0.242445 pStudent( 2.6 , 0.9 )=0.77821 , complementary=0.22179 pStudent( 3.8 , 0.1 )=0.537302 , complementary=0.462698 pStudent( 3.8 , 0.188888888889 )=0.570082 , complementary=0.429918 pStudent( 3.8 , 0.277777777778 )=0.602182 , complementary=0.397818 pStudent( 3.8 , 0.366666666667 )=0.633317 , complementary=0.366683 pStudent( 3.8 , 0.455555555556 )=0.663241 , complementary=0.336759 pStudent( 3.8 , 0.544444444444 )=0.69175 , complementary=0.30825 pStudent( 3.8 , 0.633333333333 )=0.718689 , complementary=0.281311 pStudent( 3.8 , 0.722222222222 )=0.743953 , complementary=0.256047 pStudent( 3.8 , 0.811111111111 )=0.767481 , complementary=0.232519 pStudent( 3.8 , 0.9 )=0.789252 , complementary=0.210748 pStudent( 5.0 , 0.1 )=0.537885 , complementary=0.462115 pStudent( 5.0 , 0.188888888889 )=0.571196 , complementary=0.428804 pStudent( 5.0 , 0.277777777778 )=0.603849 , complementary=0.396151 pStudent( 5.0 , 0.366666666667 )=0.635563 , complementary=0.364437 pStudent( 5.0 , 0.455555555556 )=0.666095 , complementary=0.333905 pStudent( 5.0 , 0.544444444444 )=0.695236 , complementary=0.304764 pStudent( 5.0 , 0.633333333333 )=0.722825 , complementary=0.277175 pStudent( 5.0 , 0.722222222222 )=0.748744 , complementary=0.251256 pStudent( 5.0 , 0.811111111111 )=0.772918 , complementary=0.227082 pStudent( 5.0 , 0.9 )=0.795314 , complementary=0.204686 qStudent( 0.2 , 0.1 )=-750.829 , complementary=750.829 qStudent( 0.2 , 0.188888888889 )=-31.2237 , complementary=31.2237 qStudent( 0.2 , 0.277777777778 )=-4.52796 , complementary=4.52796 qStudent( 0.2 , 0.366666666667 )=-1.0846 , complementary=1.0846 qStudent( 0.2 , 0.455555555556 )=-0.236812 , complementary=0.236812 qStudent( 0.2 , 0.544444444444 )=0.236812 , complementary=-0.236812 qStudent( 0.2 , 0.633333333333 )=1.0846 , complementary=-1.0846 qStudent( 0.2 , 0.722222222222 )=4.52796 , complementary=-4.52796 qStudent( 0.2 , 0.811111111111 )=31.2237 , complementary=-31.2237 qStudent( 0.2 , 0.9 )=750.829 , complementary=-750.829 qStudent( 1.4 , 0.1 )=-2.29897 , complementary=2.29897 qStudent( 1.4 , 0.188888888889 )=-1.26062 , complementary=1.26062 qStudent( 1.4 , 0.277777777778 )=-0.757262 , complementary=0.757262 qStudent( 1.4 , 0.366666666667 )=-0.414108 , complementary=0.414108 qStudent( 1.4 , 0.455555555556 )=-0.132431 , complementary=0.132431 qStudent( 1.4 , 0.544444444444 )=0.132431 , complementary=-0.132431 qStudent( 1.4 , 0.633333333333 )=0.414108 , complementary=-0.414108 qStudent( 1.4 , 0.722222222222 )=0.757262 , complementary=-0.757262 qStudent( 1.4 , 0.811111111111 )=1.26062 , complementary=-1.26062 qStudent( 1.4 , 0.9 )=2.29897 , complementary=-2.29897 qStudent( 2.6 , 0.1 )=-1.70816 , complementary=1.70816 qStudent( 2.6 , 0.188888888889 )=-1.05942 , complementary=1.05942 qStudent( 2.6 , 0.277777777778 )=-0.673575 , complementary=0.673575 qStudent( 2.6 , 0.366666666667 )=-0.379219 , complementary=0.379219 qStudent( 2.6 , 0.455555555556 )=-0.122822 , complementary=0.122822 qStudent( 2.6 , 0.544444444444 )=0.122822 , complementary=-0.122822 qStudent( 2.6 , 0.633333333333 )=0.379219 , complementary=-0.379219 qStudent( 2.6 , 0.722222222222 )=0.673575 , complementary=-0.673575 qStudent( 2.6 , 0.811111111111 )=1.05942 , complementary=-1.05942 qStudent( 2.6 , 0.9 )=1.70816 , complementary=-1.70816 qStudent( 3.8 , 0.1 )=-1.54894 , complementary=1.54894 qStudent( 3.8 , 0.188888888889 )=-0.997383 , complementary=0.997383 qStudent( 3.8 , 0.277777777778 )=-0.64541 , complementary=0.64541 qStudent( 3.8 , 0.366666666667 )=-0.366713 , complementary=0.366713 qStudent( 3.8 , 0.455555555556 )=-0.119253 , complementary=0.119253 qStudent( 3.8 , 0.544444444444 )=0.119253 , complementary=-0.119253 qStudent( 3.8 , 0.633333333333 )=0.366713 , complementary=-0.366713 qStudent( 3.8 , 0.722222222222 )=0.64541 , complementary=-0.64541 qStudent( 3.8 , 0.811111111111 )=0.997383 , complementary=-0.997383 qStudent( 3.8 , 0.9 )=1.54894 , complementary=-1.54894 qStudent( 5.0 , 0.1 )=-1.47588 , complementary=1.47588 qStudent( 5.0 , 0.188888888889 )=-0.967394 , complementary=0.967394 qStudent( 5.0 , 0.277777777778 )=-0.631332 , complementary=0.631332 qStudent( 5.0 , 0.366666666667 )=-0.360314 , complementary=0.360314 qStudent( 5.0 , 0.455555555556 )=-0.117403 , complementary=0.117403 qStudent( 5.0 , 0.544444444444 )=0.117403 , complementary=-0.117403 qStudent( 5.0 , 0.633333333333 )=0.360314 , complementary=-0.360314 qStudent( 5.0 , 0.722222222222 )=0.631332 , complementary=-0.631332 qStudent( 5.0 , 0.811111111111 )=0.967394 , complementary=-0.967394 qStudent( 5.0 , 0.9 )=1.47588 , complementary=-1.47588 rStudent( 0.2 )=7476.31 rStudent( 0.2 )=666559 rStudent( 0.2 )=-0.310923 rStudent( 0.2 )=17.3504 rStudent( 0.2 )=-2769.01 rStudent( 0.2 )=-0.262211 rStudent( 0.2 )=-0.478461 rStudent( 0.2 )=47638.9 rStudent( 0.2 )=6.05369 rStudent( 0.2 )=3.81509 rStudent( 1.4 )=0.131632 rStudent( 1.4 )=-1.29869 rStudent( 1.4 )=0.679956 rStudent( 1.4 )=0.455992 rStudent( 1.4 )=-0.772744 rStudent( 1.4 )=0.184676 rStudent( 1.4 )=0.916568 rStudent( 1.4 )=1.23578 rStudent( 1.4 )=-1.7993 rStudent( 1.4 )=2.31455 rStudent( 2.6 )=-0.106989 rStudent( 2.6 )=-0.323672 rStudent( 2.6 )=-2.29613 rStudent( 2.6 )=-1.60233 rStudent( 2.6 )=0.507901 rStudent( 2.6 )=-2.79408 rStudent( 2.6 )=-0.823351 rStudent( 2.6 )=-0.851024 rStudent( 2.6 )=0.926106 rStudent( 2.6 )=-0.902698 rStudent( 3.8 )=2.05706 rStudent( 3.8 )=-2.89392 rStudent( 3.8 )=-0.0639838 rStudent( 3.8 )=-0.145949 rStudent( 3.8 )=-0.627063 rStudent( 3.8 )=3.52391 rStudent( 3.8 )=-2.73892 rStudent( 3.8 )=-0.239003 rStudent( 3.8 )=1.59404 rStudent( 3.8 )=-2.43636 rStudent( 5.0 )=-0.619784 rStudent( 5.0 )=-0.620556 rStudent( 5.0 )=-0.772649 rStudent( 5.0 )=1.24861 rStudent( 5.0 )=-0.151396 rStudent( 5.0 )=-0.700545 rStudent( 5.0 )=-1.79918 rStudent( 5.0 )=2.25695 rStudent( 5.0 )=-0.510679 rStudent( 5.0 )=-0.715766 openturns-1.9/python/test/t_DistFunc_student.py000077500000000000000000000024521307543307100221130ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # pStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 xMin = 0.1 xMax = 0.9 nX = 10 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for iX in range(nX): x = xMin + (xMax - xMin) * iX / (nX - 1) print("pStudent(", nu, ", %.12g" % x, ")=%.6g" % DistFunc.pStudent( nu, x), ", complementary=%.6g" % DistFunc.pStudent(nu, x, True)) # qStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 qMin = 0.1 qMax = 0.9 nQ = 10 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for iQ in range(nQ): q = qMin + (qMax - qMin) * iQ / (nQ - 1) print("qStudent(", nu, ", %.12g" % q, ")=%.6g" % DistFunc.qStudent( nu, q), ", complementary=%.6g" % DistFunc.qStudent(nu, q, True)) # rStudent nuMin = 0.2 nuMax = 5.0 n1 = 5 nR = 10 for i1 in range(n1): nu = nuMin + (nuMax - nuMin) * i1 / (n1 - 1) for iR in range(nR): print("rStudent(", nu, ")=%.6g" % DistFunc.rStudent(nu)) except: import sys print("t_DistFunc_student.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DistributionParameters_std.expout000066400000000000000000000074441307543307100251020ustar00rootroot00000000000000Distribution Parameters class=ArcsineMuSigma name=Unnamed mu=8.4 sigma=2.25 Distribution Parameters ArcsineMuSigma(mu = 8.4, sigma = 2.25) non-native= [8.4,2.25] [mu,sigma] native= [5.21802,11.582] non-native= [8.4,2.25] built dist= Arcsine(a = 5.21802, b = 11.582) [[ 1 1 ] [ -1.41421 1.41421 ]] [[ 1 1 ] [ -1.41421 1.41421 ]] Distribution Parameters class=BetaMuSigma name=Unnamed mu=0.2 sigma=0.6 a=-1 b=2 Distribution Parameters BetaMuSigma(mu = 0.2, sigma = 0.6, a = -1, b = 2) non-native= [0.2,0.6,-1,2] [mu,sigma,a,b] native= [2,5,-1,2] non-native= [0.2,0.6,-1,2] built dist= Beta(r = 2, t = 5, a = -1, b = 2) [[ 2.33333 1.66667 0 0 ] [ -8 -20 0 0 ] [ -3 -5 1 0 ] [ 0.666667 3.33333 0 1 ]] [[ 2.33333 1.66667 0 0 ] [ -8 -20 0 0 ] [ -3 -5 1 0 ] [ 0.666667 3.33333 0 1 ]] Distribution Parameters class=GammaMuSigma name=Unnamed mu=1.5 sigma=2.5 gamma=-0.5 Distribution Parameters GammaMuSigma(mu = 1.5, sigma = 2.5, gamma = -0.5) non-native= [1.5,2.5,-0.5] [mu,sigma,gamma] native= [0.64,0.32,-0.5] non-native= [1.5,2.5,-0.5] built dist= Gamma(k = 0.64, lambda = 0.32, gamma = -0.5) [[ 0.64 0.16 0 ] [ -0.512 -0.256 0 ] [ -0.64 -0.16 1 ]] [[ 0.64 0.16 0 ] [ -0.512 -0.256 0 ] [ -0.64 -0.16 1 ]] Distribution Parameters class=GumbelAB name=Unnamed a=-0.5 b=0.5 Distribution Parameters GumbelAB(a = -0.5, b = 0.5) non-native= [-0.5,0.5] [a,b] native= [2,-0.5] non-native= [-0.5,0.5] built dist= Gumbel(alpha = 2, beta = -0.5) [[ 0 1 ] [ -4 0 ]] [[ 0 1 ] [ -4 0 ]] Distribution Parameters class=GumbelMuSigma name=Unnamed mu=1.5 sigma=1.3 Distribution Parameters GumbelMuSigma(mu = 1.5, sigma = 1.3) non-native= [1.5,1.3] [mu,sigma] native= [0.986577,0.914931] non-native= [1.5,1.3] built dist= Gumbel(alpha = 0.986577, beta = 0.914931) [[ 0 1 ] [ -0.758905 -0.450053 ]] [[ 0 1 ] [ -0.758905 -0.450053 ]] Distribution Parameters class=LogNormalMuSigma name=Unnamed mu=0.63 sigma=3.3 gamma=-0.5 Distribution Parameters LogNormalMuSigma(mu = 0.63, sigma = 3.3, gamma = -0.5) non-native= [0.63,3.3,-0.5] [mu,sigma,gamma] native= [-1.00492,1.50143,-0.5] non-native= [0.63,3.3,-0.5] built dist= LogNormal(muLog = -1.00492, sigmaLog = 1.50143, gamma = -0.5) [[ 1.67704 -0.527552 0 ] [ -0.271228 0.180647 0 ] [ -1.67704 0.527552 1 ]] [[ 1.67704 -0.527552 0 ] [ -0.271228 0.180647 0 ] [ -1.67704 0.527552 1 ]] Distribution Parameters class=LogNormalMuSigmaOverMu name=Unnamed mu=0.63 sigmaOverMu=5.24 gamma=-0.5 Distribution Parameters LogNormalMuSigmaOverMu(mu = 0.63, sigmaOverMu = 5.24, gamma = -0.5) non-native= [0.63,5.24,-0.5] [mu,sigmaOverMu,gamma] native= [-1.00525,1.50164,-0.5] non-native= [0.63,5.24,-0.5] built dist= LogNormal(muLog = -1.00525, sigmaLog = 1.50164, gamma = -0.5) [[ 0.256272 0.418663 0 ] [ -0.170824 0.113758 0 ] [ -1.6771 0.527516 1 ]] [[ 0.256272 0.418663 0 ] [ -0.170824 0.113758 0 ] [ -1.6771 0.527516 1 ]] Distribution Parameters class=WeibullMuSigma name=Unnamed mu=1.3 sigma=1.23 gamma=-0.5 Distribution Parameters WeibullMuSigma(mu = 1.3, sigma = 1.23, gamma = -0.5) non-native= [1.3,1.23,-0.5] [mu,sigma,gamma] native= [1.99222,1.48961,-0.5] non-native= [1.3,1.23,-0.5] built dist= Weibull(alpha = 1.99222, beta = 1.48961, gamma = -0.5) [[ 1.25624 0.897176 0 ] [ -0.218715 -1.31294 0 ] [ -1.25624 -0.897176 1 ]] [[ 1.25624 0.897176 0 ] [ -0.218715 -1.31294 0 ] [ -1.25624 -0.897176 1 ]] openturns-1.9/python/test/t_DistributionParameters_std.py000077500000000000000000000030111307543307100241730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot distParams = [] distParams.append(ot.ArcsineMuSigma(8.4, 2.25)) distParams.append(ot.BetaMuSigma(0.2, 0.6, -1, 2)) distParams.append(ot.GammaMuSigma(1.5, 2.5, -0.5)) distParams.append(ot.GumbelAB(-0.5, 0.5)) distParams.append(ot.GumbelMuSigma(1.5, 1.3)) distParams.append(ot.LogNormalMuSigma(0.63, 3.3, -0.5)) distParams.append(ot.LogNormalMuSigmaOverMu(0.63, 5.24, -0.5)) distParams.append(ot.WeibullMuSigma(1.3, 1.23, -0.5)) for distParam in distParams: print('Distribution Parameters ', repr(distParam)) print('Distribution Parameters ', distParam) non_native = distParam.getValues() desc = distParam.getDescription() print('non-native=', non_native, desc) native = distParam.evaluate() print('native=', native) non_native = distParam.inverse(native) print('non-native=', non_native) print('built dist=', distParam.getDistribution()) # derivative of the native parameters with regards the parameters of the # distribution print(distParam.gradient()) # by the finite difference technique eps = 1e-5 dim = len(non_native) nativeParamGrad = ot.SquareMatrix(ot.IdentityMatrix(dim)) for i in range(dim): for j in range(dim): xp = list(non_native) xp[i] += eps xm = list(non_native) xm[i] -= eps nativeParamGrad[i, j] = 0.5 * \ (distParam(xp)[j] - distParam(xm)[j]) / eps print(nativeParamGrad) openturns-1.9/python/test/t_DistributionTransformation_std.expout000066400000000000000000000036121307543307100257760ustar00rootroot00000000000000left= Normal(mu = 0, sigma = 1) right= Normal(mu = 0, sigma = 1) transformation= IdentityEvaluation(dimension=1) inverseTransformation= IdentityEvaluation(dimension=1) ---------------------------------------------------------------------------------------------------- left= ComposedDistribution(Normal(mu = 0, sigma = 1), Gumbel(alpha = 1, beta = 0), IndependentCopula(dimension = 2)) right= ComposedDistribution(Triangular(a = -1, m = 0, b = 1), Triangular(a = -1, m = 0, b = 1), IndependentCopula(dimension = 2)) transformation= | y0 = Normal(mu = 0, sigma = 1) -> y0 : Triangular(a = -1, m = 0, b = 1) | y1 = Gumbel(alpha = 1, beta = 0) -> y1 : Triangular(a = -1, m = 0, b = 1) inverseTransformation= | y0 = Triangular(a = -1, m = 0, b = 1) -> y0 : Normal(mu = 0, sigma = 1) | y1 = Triangular(a = -1, m = 0, b = 1) -> y1 : Gumbel(alpha = 1, beta = 0) ---------------------------------------------------------------------------------------------------- left= ComposedDistribution(Normal(mu = 0, sigma = 1), Gumbel(alpha = 1, beta = 0), IndependentCopula(dimension = 2)) right= ComposedDistribution(Triangular(a = -1, m = 0, b = 1), Triangular(a = -1, m = 0, b = 1), GumbelCopula(theta = 2)) transformation= ((| y0 = Uniform(a = 0, b = 1) -> y0 : Triangular(a = -1, m = 0, b = 1) | y1 = Uniform(a = 0, b = 1) -> y1 : Triangular(a = -1, m = 0, b = 1) )o(InverseRosenblattEvaluation(Normal(2)->GumbelCopula(theta = 2))))o(| y0 = [x0]->[x0] | y1 = Gumbel(alpha = 1, beta = 0) -> y1 : Normal(mu = 0, sigma = 1) ) inverseTransformation= (| y0 = [x0]->[x0] | y1 = Normal(mu = 0, sigma = 1) -> y1 : Gumbel(alpha = 1, beta = 0) )o((RosenblattEvaluation(GumbelCopula(theta = 2)->Normal(2))o(| y0 = Triangular(a = -1, m = 0, b = 1) -> y0 : Uniform(a = 0, b = 1) | y1 = Triangular(a = -1, m = 0, b = 1) -> y1 : Uniform(a = 0, b = 1) )) ---------------------------------------------------------------------------------------------------- openturns-1.9/python/test/t_DistributionTransformation_std.py000077500000000000000000000017621307543307100251110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m # ot.Log.Show(ot.Log.ALL) coll = [] # case 1: no transformation coll.append([ot.Normal(), ot.Normal()]) # case 2: same copula left = ot.ComposedDistribution( [ot.Normal(), ot.Gumbel()], ot.IndependentCopula(2)) right = ot.ComposedDistribution([ot.Triangular()] * 2, ot.IndependentCopula(2)) coll.append([left, right]) # case 3: same standard space left = ot.ComposedDistribution( [ot.Normal(), ot.Gumbel()], ot.IndependentCopula(2)) right = ot.ComposedDistribution([ot.Triangular()] * 2, ot.GumbelCopula()) coll.append([left, right]) # TODO case 4: different standard space for left, right in coll: transformation = ot.DistributionTransformation(left, right) print('left=', left) print('right=', right) print('transformation=', transformation) inverseTransformation = transformation.inverse() print('inverseTransformation=', inverseTransformation) print('-' * 100) openturns-1.9/python/test/t_Distribution_arithmetic.expout000066400000000000000000000057151307543307100244140ustar00rootroot00000000000000dist1: Normal(mu = 1, sigma = 0.5) dist1+2: RandomMixture(Normal(mu = 3, sigma = 0.5)) dist1-2: RandomMixture(Normal(mu = -1, sigma = 0.5)) dist1*2: RandomMixture(Normal(mu = 2, sigma = 1)) dist1/2: RandomMixture(Normal(mu = 0.5, sigma = 0.25)) cos(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[cos(x)] sin(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[sin(x)] tan(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[tan(x)] acos(dist0): CompositeDistribution=f(Uniform(a = -0.999, b = 0.999)) with f=[x]->[acos(x)] asin(dist0): CompositeDistribution=f(Uniform(a = -0.999, b = 0.999)) with f=[x]->[asin(x)] atan(dist0): CompositeDistribution=f(Uniform(a = -0.999, b = 0.999)) with f=[x]->[atan(x)] cosh(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[cosh(x)] sinh(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[sinh(x)] tanh(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[tanh(x)] acosh(distG1): CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[acosh(x)] asinh(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[asinh(x)] atanh(dist0): CompositeDistribution=f(Uniform(a = -0.999, b = 0.999)) with f=[x]->[atanh(x)] exp(dist1): LogNormal(muLog = 1, sigmaLog = 0.5, gamma = 0) log(distG1): CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[log(x)] ln(distG1): CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[log(x)] dist1^3: CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[x^3] dist1^2.5: CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[x^2.5] inverse(distG1): CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[1.0 / x] sqr(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[x^2] sqrt(distG1): CompositeDistribution=f(LogNormal(muLog = 1, sigmaLog = 1, gamma = 1)) with f=[x]->[sqrt(x)] cbrt(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[cbrt(x)] abs(dist1): CompositeDistribution=f(Normal(mu = 1, sigma = 0.5)) with f=[x]->[abs(x)] dist1+dist2: RandomMixture(Normal(mu = -1, sigma = 1.11803)) dist1-dist2: RandomMixture(Normal(mu = 3, sigma = 1.11803)) dist1*dist2: ProductDistribution(Normal(mu = 1, sigma = 0.5) * Normal(mu = -2, sigma = 1)) dist1/dist2: ProductDistribution(Normal(mu = 1, sigma = 0.5) * CompositeDistribution=f(Normal(mu = -2, sigma = 1)) with f=[x]->[1.0 / x]) logn*logn: LogNormal(muLog = 0, sigmaLog = 1.41421, gamma = 0) logu*logu: CompositeDistribution=f(RandomMixture(Triangular(a = -2, m = 0, b = 2))) with f=[x]->[exp(x)] logu*logn: CompositeDistribution=f(RandomMixture(Normal(mu = 0, sigma = 1) + Uniform(a = -1, b = 1))) with f=[x]->[exp(x)] logn*logu: CompositeDistribution=f(RandomMixture(Normal(mu = 0, sigma = 1) + Uniform(a = -1, b = 1))) with f=[x]->[exp(x)] openturns-1.9/python/test/t_Distribution_arithmetic.py000077500000000000000000000056071307543307100235230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot dist1 = ot.Normal(1.0, 0.5) print('dist1:', dist1) result = dist1 + 2.0 print('dist1+2:', result) graph = result.drawPDF() result = dist1 - 2.0 print('dist1-2:', result) graph = result.drawPDF() result = dist1 * 2.0 print('dist1*2:', result) graph = result.drawPDF() result = dist1 / 2.0 print('dist1/2:', result) graph = result.drawPDF() result = dist1.cos() print('cos(dist1):', result) graph = result.drawPDF() result = dist1.sin() print('sin(dist1):', result) graph = result.drawPDF() result = dist1.tan() print('tan(dist1):', result) # graph = result.drawPDF() dist0 = ot.Uniform(-0.999, 0.999) result = dist0.acos() print('acos(dist0):', result) graph = result.drawPDF() result = dist0.asin() print('asin(dist0):', result) graph = result.drawPDF() result = dist0.atan() print('atan(dist0):', result) graph = result.drawPDF() result = dist1.cosh() print('cosh(dist1):', result) graph = result.drawPDF() result = dist1.sinh() print('sinh(dist1):', result) graph = result.drawPDF() result = dist1.tanh() print('tanh(dist1):', result) graph = result.drawPDF() distG1 = ot.LogNormal(1.0, 1.0, 1.0) result = distG1.acosh() print('acosh(distG1):', result) graph = result.drawPDF() result = dist1.asinh() print('asinh(dist1):', result) graph = result.drawPDF() result = dist0.atanh() print('atanh(dist0):', result) graph = result.drawPDF() result = dist1.exp() print('exp(dist1):', result) graph = result.drawPDF() result = distG1.log() print('log(distG1):', result) graph = result.drawPDF() result = distG1.ln() print('ln(distG1):', result) graph = result.drawPDF() result = dist1 ** 3 print('dist1^3:', result) graph = result.drawPDF() result = distG1 ** 2.5 print('dist1^2.5:', result) graph = result.drawPDF() result = distG1.inverse() print('inverse(distG1):', result) graph = result.drawPDF() result = dist1.sqr() print('sqr(dist1):', result) graph = result.drawPDF() result = distG1.sqrt() print('sqrt(distG1):', result) graph = result.drawPDF() result = dist1.cbrt() print('cbrt(dist1):', result) graph = result.drawPDF() result = dist1.abs() print('abs(dist1):', result) graph = result.drawPDF() dist2 = ot.Normal(-2.0, 1.0) result = dist1 + dist2 print('dist1+dist2:', result) graph = result.drawPDF() result = dist1 - dist2 print('dist1-dist2:', result) graph = result.drawPDF() result = dist1 * dist2 print('dist1*dist2:', result) graph = result.drawPDF() result = dist1 / dist2 print('dist1/dist2:', result) graph = result.drawPDF() result = ot.LogNormal() * ot.LogNormal() print('logn*logn:', result) graph = result.drawPDF() result = ot.LogUniform() * ot.LogUniform() print('logu*logu:', result) graph = result.drawPDF() result = ot.LogUniform() * ot.LogNormal() print('logu*logn:', result) graph = result.drawPDF() result = ot.LogNormal() * ot.LogUniform() print('logn*logu:', result) graph = result.drawPDF() openturns-1.9/python/test/t_Distribution_draw.expout000066400000000000000000000000001307543307100231760ustar00rootroot00000000000000openturns-1.9/python/test/t_Distribution_draw.py000077500000000000000000000075641307543307100223330ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() pointNumber = 251 try: dist1D = Normal(2.0, 4.0) dist2D = Normal(Point(2, 2.0), Point(2, 4.0), CorrelationMatrix(2)) distND = Normal(Point(5, 2.0), Point(5, 4.0), CorrelationMatrix(5)) # Check drawing methods for 1D distributions # PDF graphPDF = dist1D.drawPDF() graphPDF.draw("DefaultDrawPDF_1D.png") graphPDF = dist1D.drawPDF(-4.0, 4.0, 101) graphPDF.draw("FullParametersDrawPDF_1D.png") graphPDF = dist1D.drawPDF(-4.0, 4.0) graphPDF.draw("RangeDrawPDF_1D.png") graphPDF = dist1D.drawPDF(101) graphPDF.draw("PointNumberDrawPDF_1D.png") # log-PDF graphLogPDF = dist1D.drawLogPDF() graphLogPDF.draw("DefaultDrawLogPDF_1D.png") graphLogPDF = dist1D.drawLogPDF(-4.0, 4.0, 101) graphLogPDF.draw("FullParametersDrawLogPDF_1D.png") graphLogPDF = dist1D.drawLogPDF(-4.0, 4.0) graphLogPDF.draw("RangeDrawLogPDF_1D.png") graphLogPDF = dist1D.drawLogPDF(101) graphLogPDF.draw("PointNumberDrawLogPDF_1D.png") # CDF graphCDF = dist1D.drawCDF() graphCDF.draw("DefaultDrawCDF_1D.png") graphCDF = dist1D.drawCDF(-4.0, 4.0, 101) graphCDF.draw("FullParametersDrawCDF_1D.png") graphCDF = dist1D.drawCDF(-4.0, 4.0) graphCDF.draw("RangeDrawCDF_1D.png") graphCDF = dist1D.drawCDF(101) graphCDF.draw("PointNumberDrawCDF_1D.png") # Check drawing methods for 2D distributions # PDF graphPDF = dist2D.drawPDF() graphPDF.draw("DefaultDrawPDF_2D.png") graphPDF = dist2D.drawPDF([-4.0, -4.0], [4.0, 4.0], [101, 101]) graphPDF.draw("FullParametersDrawPDF_2D.png") graphPDF = dist2D.drawPDF([-4.0, -4.0], [4.0, 4.0]) graphPDF.draw("RangeDrawPDF_2D.png") graphPDF = dist2D.drawPDF([101, 101]) graphPDF.draw("PointNumberDrawPDF_2D.png") # log-PDF graphLogPDF = dist2D.drawLogPDF() graphLogPDF.draw("DefaultDrawLogPDF_2D.png") graphLogPDF = dist2D.drawLogPDF([-4.0, -4.0], [4.0, 4.0], [101, 101]) graphLogPDF.draw("FullParametersDrawLogPDF_2D.png") graphLogPDF = dist2D.drawLogPDF([-4.0, -4.0], [4.0, 4.0]) graphLogPDF.draw("RangeDrawLogPDF_2D.png") graphLogPDF = dist2D.drawLogPDF([101, 101]) graphLogPDF.draw("PointNumberDrawLogPDF_2D.png") # CDF graphCDF = dist2D.drawCDF() graphCDF.draw("DefaultDrawCDF_2D.png") graphCDF = dist2D.drawCDF([-4.0, -4.0], [4.0, 4.0], [101, 101]) graphCDF.draw("FullParametersDrawCDF_2D.png") graphCDF = dist2D.drawCDF([-4.0, -4.0], [4.0, 4.0]) graphCDF.draw("RangeDrawCDF_2D.png") graphCDF = dist2D.drawCDF([101, 101]) graphCDF.draw("PointNumberDrawCDF_2D.png") # Check drawing methods for ND distributions # PDF graphPDF = distND.drawMarginal1DPDF(2, -4.0, 4.0, 101) graphPDF.draw("FullParametersDrawMarginal1DPDF_ND.png") graphPDF = distND.drawMarginal2DPDF( 2, 3, [-4.0, -4.0], [4.0, 4.0], [101, 101]) graphPDF.draw("FullParametersDrawMarginal2DPDF_ND.png") # log-PDF graphLogPDF = distND.drawMarginal1DLogPDF(2, -4.0, 4.0, 101) graphLogPDF.draw("FullParametersDrawMarginal1DLogPDF_ND.png") graphLogPDF = distND.drawMarginal2DLogPDF( 2, 3, [-4.0, -4.0], [4.0, 4.0], [101, 101]) graphLogPDF.draw("FullParametersDrawMarginal2DLogPDF_ND.png") # CDF graphCDF = distND.drawMarginal1DCDF(2, -4.0, 4.0, 101) graphCDF.draw("FullParametersDrawMarginal1DCDF_ND.png") graphCDF = distND.drawMarginal2DCDF( 2, 3, [-4.0, -4.0], [4.0, 4.0], [101, 101]) graphCDF.draw("FullParametersDrawMarginal2DCDF_ND.png") # Quantile graphQuantile = dist1D.drawQuantile() graphQuantile.draw("DrawQuantile_1D.png") graphQuantile = dist2D.drawQuantile() graphQuantile.draw("DrawQuantile_2D.png") except: import sys print("t_Distributions_draw.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Distribution_python.expout000066400000000000000000000026631307543307100236030ustar00rootroot00000000000000pyDist= PythonDistribution -> #1 myDist= class=PythonDistribution name=UniformNdPy description=[X0] dimension= 1 realization= [0.629877] sample= 0 : [ 0.882805 ] 1 : [ 0.135276 ] 2 : [ 0.0325028 ] 3 : [ 0.347057 ] 4 : [ 0.969423 ] pdf= 1.0 cdf= 0.2 roughness= 42.0 mean= [0.5] standard deviation= [0.288675] skewness= [0] kurtosis= [1.8] standard moment= [0.333333] moment= [-0.3] centered moment= [0] characteristic function= (0.993346653975+0.0996671107938j) isElliptical= False isCopula= True range= [0, 1] marginal= class=PythonDistribution name=UniformNdPy quantile= [42] pyDist= PythonDistribution -> #2 myDist= class=PythonDistribution name=UniformNdPy description=[X0,X1] dimension= 2 realization= [0.92068,0.50304] sample= 0 : [ 0.0632061 0.292757 ] 1 : [ 0.714382 0.383362 ] 2 : [ 0.373767 0.737268 ] 3 : [ 0.883503 0.294994 ] 4 : [ 0.92851 0.820811 ] pdf= 1.0 cdf= 0.2 roughness= 42.0 mean= [0.5,0.5] standard deviation= [0.288675,0.288675] skewness= [0,0] kurtosis= [1.8,1.8] standard moment= [0.333333,0.333333] moment= [-0.3,-0.3] centered moment= [0,0] isElliptical= False isCopula= True range= [0, 1] [0, 1] marginal= class=PythonDistribution name=UniformNdPy quantile= [42,42] ComposedDistribution(Normal(mu = 0, sigma = 1), Normal(mu = 0, sigma = 1), class=PythonDistribution name=UniformNdPy) try with another Python distribution The construction failed on purpose as class=PythonDistribution name=UniformNdPy is not a copula openturns-1.9/python/test/t_Distribution_python.py000077500000000000000000000115431307543307100227070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from math import cos, sin, sqrt class UniformNdPy(ot.PythonDistribution): def __init__(self, a=[0.0], b=[1.0]): super(UniformNdPy, self).__init__(len(a)) self.a = a self.b = b def getRange(self): return ot.Interval(self.a, self.b, [True] * len(self.a), [True] * len(self.a)) def getRealization(self): X = [] for i in range(len(self.a)): X.append( self.a[i] + (self.b[i] - self.a[i]) * ot.RandomGenerator.Generate()) return X def getSample(self, size): X = [] for i in range(size): X.append(self.getRealization()) return X def computeCDF(self, X): return (X[0] - self.a[0]) / (self.b[0] - self.a[0]) def computePDF(self, X): return 1. / (self.b[0] - self.a[0]) def getRoughness(self): return 42. def getMean(self): mu = [] for i in range(len(self.a)): mu.append(0.5 * (self.a[i] + self.b[i])) return mu def getStandardDeviation(self): stdev = [] for i in range(len(self.a)): stdev.append((self.b[i] - self.a[i]) / sqrt(12.)) return stdev def getSkewness(self): return [0.] * len(self.a) def getKurtosis(self): return [1.8] * len(self.a) def getStandardMoment(self, n): if n % 2 == 1: return [0.] * len(self.a) return [1. / (n + 1.)] * len(self.a) def getMoment(self, n): return [-0.1 * n] * len(self.a) def getCenteredMoment(self, n): return [0.] * len(self.a) def computeCharacteristicFunction(self, x): if len(self.a) > 1: raise ValueError('dim>1') ax = self.a[0] * x bx = self.b[0] * x return (sin(bx) - sin(ax) + 1j * (cos(ax) - cos(bx))) / (bx - ax) def isElliptical(self): return (len(self.a) == 1) and (self.a[0] == -self.b[0]) def isCopula(self): for i in range(len(self.a)): if self.a[i] != 0.0: return False if self.b[i] != 1.0: return False return True def getMarginal(self, indices): subA = [] subB = [] for i in indices: subA.append(self.a[i]) subB.append(self.b[i]) return ot.Distribution(UniformNdPy(subA, subB)) def computeQuantile(self, prob, tail=False): q = [42.] * len(self.a) return q for pyDist in [UniformNdPy(), UniformNdPy([0.] * 2, [1.] * 2)]: print("pyDist=", pyDist) # Instance creation myDist = ot.Distribution(pyDist) print("myDist=", repr(myDist)) # Copy constructor newRV = ot.Distribution(myDist) # Dimension dim = myDist.getDimension() print('dimension=', dim) # Realization X = myDist.getRealization() print('realization=', X) # Sample X = myDist.getSample(5) print('sample=', X) # PDF point = [0.2] * dim pdf = myDist.computePDF(point) print('pdf=', pdf) # CDF cdf = myDist.computeCDF(point) print('cdf=', cdf) # roughness roughness = myDist.getRoughness() print('roughness=', roughness) # Mean mean = myDist.getMean() print('mean=', mean) # Standard deviation standardDeviation = myDist.getStandardDeviation() print('standard deviation=', standardDeviation) # Skewness skewness = myDist.getSkewness() print('skewness=', skewness) # Kurtosis kurtosis = myDist.getKurtosis() print('kurtosis=', kurtosis) # standard moment standardMoment = myDist.getStandardMoment(2) print('standard moment=', standardMoment) # Moment moment = myDist.getMoment(3) print('moment=', moment) # Centered moment centeredMoment = myDist.getCenteredMoment(3) print('centered moment=', centeredMoment) if dim == 1: CF = myDist.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) isElliptical = myDist.isElliptical() print('isElliptical=', isElliptical) isCopula = myDist.isCopula() print('isCopula=', isCopula) # Range range_ = myDist.getRange() print('range=', range_) # marginal marginal = myDist.getMarginal([0]) print('marginal=', marginal) # quantile quantile = myDist.computeQuantile(0.5) print('quantile=', quantile) # Use the distribution as a copula myDist = ot.Distribution(UniformNdPy([0.0] * 2, [1.0] * 2)) print(ot.ComposedDistribution([ot.Normal(), ot.Normal()], myDist)) try: print("try with another Python distribution") myDist = ot.Distribution(UniformNdPy([0.0] * 2, [2.0] * 2)) print(ot.ComposedDistribution([ot.Normal(), ot.Normal()], myDist)) except: print("The construction failed on purpose as", myDist, "is not a copula") openturns-1.9/python/test/t_Distribution_scipy.expout000066400000000000000000000010401307543307100233750ustar00rootroot00000000000000distribution=class=PythonDistribution name=SciPyDistribution realization=[0.37454] sample=0 : [ 0.950714 ] 1 : [ 0.731994 ] 2 : [ 0.598658 ] 3 : [ 0.156019 ] 4 : [ 0.155995 ] pdf=1.0 cdf=0.6 mean=[0.5] std=[0.288675] skewness=[0] kurtosis=[-1.2] range=[0, 1] randomVector=class=RandomVector implementation=class=PythonRandomVectorImplementation name=SciPyRandomVector description=[x0] realization=[0.0580836] sample=0 : [ 0.866176 ] 1 : [ 0.601115 ] 2 : [ 0.708073 ] 3 : [ 0.0205845 ] 4 : [ 0.96991 ] mean=[0.5] covariance=[[ 0.0833333 ]] openturns-1.9/python/test/t_Distribution_scipy.py000077500000000000000000000026451307543307100225200ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import scipy as sp import scipy.stats as st try: # create a scipy distribution sp.random.seed(42) scipy_dist = st.uniform() # create an openturns distribution py_dist = ot.SciPyDistribution(scipy_dist) distribution = ot.Distribution(py_dist) print(('distribution=%s' % str(distribution))) print(('realization=%s' % str(distribution.getRealization()))) print(('sample=%s' % str(distribution.getSample(5)))) point = ot.Point(1, 0.6) print(('pdf=%s' % str(distribution.computePDF(point)))) print(('cdf=%s' % str(distribution.computeCDF(point)))) print(('mean=%s' % str(distribution.getMean()))) print(('std=%s' % str(distribution.getStandardDeviation()))) print(('skewness=%s' % str(distribution.getSkewness()))) print(('kurtosis=%s' % str(distribution.getKurtosis()))) print(('range=%s' % str(distribution.getRange()))) # create an openturns random vector py_rv = ot.SciPyRandomVector(scipy_dist) randomVector = ot.RandomVector(py_rv) print(('randomVector=%s' % str(randomVector))) print(('realization=%s' % str(randomVector.getRealization()))) print(('sample=%s' % str(randomVector.getSample(5)))) print(('mean=%s' % str(randomVector.getMean()))) print(('covariance=%s' % str(randomVector.getCovariance()))) except: import sys import traceback traceback.print_exc(file=sys.stdout) openturns-1.9/python/test/t_Domain_std.expout000066400000000000000000000002201307543307100215670ustar00rootroot00000000000000Domain= [-1, 2] [-1, 2] Dimension= 2 is point [0.5,0.5] inside [-1, 2] [-1, 2] ? True is point [2.5,2.5] inside [-1, 2] [-1, 2] ? False openturns-1.9/python/test/t_Domain_std.py000077500000000000000000000011651307543307100207070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # The 1D interface dim = 2 a = Point(dim, -1.0) b = Point(dim, 2.0) domain = Domain(Interval(a, b)) p1 = Point(dim, 0.5) p2 = Point(dim, 2.5) print("Domain=", domain) # Accessors print("Dimension=", domain.getDimension()) # Contains print("is point ", p1, " inside ", domain, "? ", domain.contains(p1)) print("is point ", p2, " inside ", domain, "? ", domain.contains(p2)) except: import sys print("t_Domain_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Drawable_std.expout000066400000000000000000000147711307543307100221210ustar00rootroot00000000000000Named colors= [aliceblue,antiquewhite,antiquewhite1,antiquewhite2,antiquewhite3,antiquewhite4,aquamarine,aquamarine1,aquamarine2,aquamarine3,aquamarine4,azure,azure1,azure2,azure3,azure4,beige,bisque,bisque1,bisque2,bisque3,bisque4,black,blanchedalmond,blue,blue1,blue2,blue3,blue4,blueviolet,brown,brown1,brown2,brown3,brown4,burlywood,burlywood1,burlywood2,burlywood3,burlywood4,cadetblue,cadetblue1,cadetblue2,cadetblue3,cadetblue4,chartreuse,chartreuse1,chartreuse2,chartreuse3,chartreuse4,chocolate,chocolate1,chocolate2,chocolate3,chocolate4,coral,coral1,coral2,coral3,coral4,cornflowerblue,cornsilk,cornsilk1,cornsilk2,cornsilk3,cornsilk4,cyan,cyan1,cyan2,cyan3,cyan4,darkblue,darkcyan,darkgoldenrod,darkgoldenrod1,darkgoldenrod2,darkgoldenrod3,darkgoldenrod4,darkgray,darkgreen,darkgrey,darkkhaki,darkmagenta,darkolivegreen,darkolivegreen1,darkolivegreen2,darkolivegreen3,darkolivegreen4,darkorange,darkorange1,darkorange2,darkorange3,darkorange4,darkorchid,darkorchid1,darkorchid2,darkorchid3,darkorchid4,darkred,darksalmon,darkseagreen,darkseagreen1,darkseagreen2,darkseagreen3,darkseagreen4,darkslateblue,darkslategray,darkslategray1,darkslategray2,darkslategray3,darkslategray4,darkslategrey,darkturquoise,darkviolet,deeppink,deeppink1,deeppink2,deeppink3,deeppink4,deepskyblue,deepskyblue1,deepskyblue2,deepskyblue3,deepskyblue4,dimgray,dimgrey,dodgerblue,dodgerblue1,dodgerblue2,dodgerblue3,dodgerblue4,firebrick,firebrick1,firebrick2,firebrick3,firebrick4,floralwhite,forestgreen,gainsboro,ghostwhite,gold,gold1,gold2,gold3,gold4,goldenrod,goldenrod1,goldenrod2,goldenrod3,goldenrod4,gray,gray0,gray1,gray10,gray100,gray11,gray12,gray13,gray14,gray15,gray16,gray17,gray18,gray19,gray2,gray20,gray21,gray22,gray23,gray24,gray25,gray26,gray27,gray28,gray29,gray3,gray30,gray31,gray32,gray33,gray34,gray35,gray36,gray37,gray38,gray39,gray4,gray40,gray41,gray42,gray43,gray44,gray45,gray46,gray47,gray48,gray49,gray5,gray50,gray51,gray52,gray53,gray54,gray55,gray56,gray57,gray58,gray59,gray6,gray60,gray61,gray62,gray63,gray64,gray65,gray66,gray67,gray68,gray69,gray7,gray70,gray71,gray72,gray73,gray74,gray75,gray76,gray77,gray78,gray79,gray8,gray80,gray81,gray82,gray83,gray84,gray85,gray86,gray87,gray88,gray89,gray9,gray90,gray91,gray92,gray93,gray94,gray95,gray96,gray97,gray98,gray99,green,green1,green2,green3,green4,greenyellow,grey,grey0,grey1,grey10,grey100,grey11,grey12,grey13,grey14,grey15,grey16,grey17,grey18,grey19,grey2,grey20,grey21,grey22,grey23,grey24,grey25,grey26,grey27,grey28,grey29,grey3,grey30,grey31,grey32,grey33,grey34,grey35,grey36,grey37,grey38,grey39,grey4,grey40,grey41,grey42,grey43,grey44,grey45,grey46,grey47,grey48,grey49,grey5,grey50,grey51,grey52,grey53,grey54,grey55,grey56,grey57,grey58,grey59,grey6,grey60,grey61,grey62,grey63,grey64,grey65,grey66,grey67,grey68,grey69,grey7,grey70,grey71,grey72,grey73,grey74,grey75,grey76,grey77,grey78,grey79,grey8,grey80,grey81,grey82,grey83,grey84,grey85,grey86,grey87,grey88,grey89,grey9,grey90,grey91,grey92,grey93,grey94,grey95,grey96,grey97,grey98,grey99,honeydew,honeydew1,honeydew2,honeydew3,honeydew4,hotpink,hotpink1,hotpink2,hotpink3,hotpink4,indianred,indianred1,indianred2,indianred3,indianred4,ivory,ivory1,ivory2,ivory3,ivory4,khaki,khaki1,khaki2,khaki3,khaki4,lavender,lavenderblush,lavenderblush1,lavenderblush2,lavenderblush3,lavenderblush4,lawngreen,lemonchiffon,lemonchiffon1,lemonchiffon2,lemonchiffon3,lemonchiffon4,lightblue,lightblue1,lightblue2,lightblue3,lightblue4,lightcoral,lightcyan,lightcyan1,lightcyan2,lightcyan3,lightcyan4,lightgoldenrod,lightgoldenrod1,lightgoldenrod2,lightgoldenrod3,lightgoldenrod4,lightgoldenrodyellow,lightgray,lightgreen,lightgrey,lightpink,lightpink1,lightpink2,lightpink3,lightpink4,lightsalmon,lightsalmon1,lightsalmon2,lightsalmon3,lightsalmon4,lightseagreen,lightskyblue,lightskyblue1,lightskyblue2,lightskyblue3,lightskyblue4,lightslateblue,lightslategray,lightslategrey,lightsteelblue,lightsteelblue1,lightsteelblue2,lightsteelblue3,lightsteelblue4,lightyellow,lightyellow1,lightyellow2,lightyellow3,lightyellow4,limegreen,linen,magenta,magenta1,magenta2,magenta3,magenta4,maroon,maroon1,maroon2,maroon3,maroon4,mediumaquamarine,mediumblue,mediumorchid,mediumorchid1,mediumorchid2,mediumorchid3,mediumorchid4,mediumpurple,mediumpurple1,mediumpurple2,mediumpurple3,mediumpurple4,mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue,mintcream,mistyrose,mistyrose1,mistyrose2,mistyrose3,mistyrose4,moccasin,navajowhite,navajowhite1,navajowhite2,navajowhite3,navajowhite4,navy,navyblue,oldlace,olivedrab,olivedrab1,olivedrab2,olivedrab3,olivedrab4,orange,orange1,orange2,orange3,orange4,orangered,orangered1,orangered2,orangered3,orangered4,orchid,orchid1,orchid2,orchid3,orchid4,palegoldenrod,palegreen,palegreen1,palegreen2,palegreen3,palegreen4,paleturquoise,paleturquoise1,paleturquoise2,paleturquoise3,paleturquoise4,palevioletred,palevioletred1,palevioletred2,palevioletred3,palevioletred4,papayawhip,peachpuff,peachpuff1,peachpuff2,peachpuff3,peachpuff4,peru,pink,pink1,pink2,pink3,pink4,plum,plum1,plum2,plum3,plum4,powderblue,purple,purple1,purple2,purple3,purple4,red,red1,red2,red3,red4,rosybrown,rosybrown1,rosybrown2,rosybrown3,rosybrown4,royalblue,royalblue1,royalblue2,royalblue3,royalblue4,saddlebrown,salmon,salmon1,salmon2,salmon3,salmon4,sandybrown,seagreen,seagreen1,seagreen2,seagreen3,seagreen4,seashell,seashell1,seashell2,seashell3,seashell4,sienna,sienna1,sienna2,sienna3,sienna4,skyblue,skyblue1,skyblue2,skyblue3,skyblue4,slateblue,slateblue1,slateblue2,slateblue3,slateblue4,slategray,slategray1,slategray2,slategray3,slategray4,slategrey,snow,snow1,snow2,snow3,snow4,springgreen,springgreen1,springgreen2,springgreen3,springgreen4,steelblue,steelblue1,steelblue2,steelblue3,steelblue4,tan,tan1,tan2,tan3,tan4,thistle,thistle1,thistle2,thistle3,thistle4,tomato,tomato1,tomato2,tomato3,tomato4,turquoise,turquoise1,turquoise2,turquoise3,turquoise4,violet,violetred,violetred1,violetred2,violetred3,violetred4,wheat,wheat1,wheat2,wheat3,wheat4,white,whitesmoke,yellow,yellow1,yellow2,yellow3,yellow4,yellowgreen]#657 RGB colors (31, 63, 127)= #1f3f7f RGB colors (0.1, 0.2, 0.3)= #1a334d RGBA colors (31, 63, 127, 191)= #1f3f7fbf RGBA colors (0.1, 0.2, 0.3, 0.4)= #1a334d66 HSV colors (215.0, 0.2, 0.3)= #3d444d HSVA colors (215.0, 0.2, 0.3, 0.4)= #3d444d66 HSV (215.0, 0.2, 0.3) to RGB= [0.24,0.265,0.3] Line styles= [blank,solid,dashed,dotted,dotdash,longdash,twodash] Point styles= [bullet,circle,diamond,dot,fcircle,fdiamond,fsquare,ftriangleup,none,plus,square,star,times,triangledown,triangleup]#15 Fill styles= [solid,shaded] openturns-1.9/python/test/t_Drawable_std.py000077500000000000000000000021511307543307100212150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: print("Named colors=", Drawable.GetValidColors()) print("RGB colors (31, 63, 127)=", Drawable.ConvertFromRGB(31, 63, 127)) print("RGB colors (0.1, 0.2, 0.3)=", Drawable.ConvertFromRGB(0.1, 0.2, 0.3)) print("RGBA colors (31, 63, 127, 191)=", Drawable.ConvertFromRGBA(31, 63, 127, 191)) print("RGBA colors (0.1, 0.2, 0.3, 0.4)=", Drawable.ConvertFromRGBA(0.1, 0.2, 0.3, 0.4)) print("HSV colors (215.0, 0.2, 0.3)=", Drawable.ConvertFromHSV(215.0, 0.2, 0.3)) print("HSVA colors (215.0, 0.2, 0.3, 0.4)=", Drawable.ConvertFromHSVA(215.0, 0.2, 0.3, 0.4)) print("HSV (215.0, 0.2, 0.3) to RGB=", Drawable.ConvertFromHSVIntoRGB(215.0, 0.2, 0.3)) print("Line styles=", Drawable.GetValidLineStyles()) print("Point styles=", Drawable.GetValidPointStyles()) print("Fill styles=", Drawable.GetValidFillStyles()) except: import sys print("t_Drawable_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_DualLinearCombinationFunction_std.expout000066400000000000000000000033361307543307100263040ustar00rootroot00000000000000myFunction= [1.5,2.5,-0.5] * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + [-3.5,0.5,-1.5] * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]) Value at [1.2,2.3,3.4] = [-32.6345,-2.5861,-10.9343] Gradient at [1.2,2.3,3.4] = [[ 178.768 -38.5532 82.095 ] [ -375.374 51.2006 -159.854 ] [ -305.359 42.7773 -130.512 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ -1751.3 4267.4 3202.7 ] [ 4267.4 -11041 -8261.4 ] [ 3202.7 -8261.4 -6049.1 ]] sheet #1 [[ 230.59 -612.35 -462.4 ] [ -612.35 1581.5 1192.5 ] [ -462.4 1192.5 891.78 ]] sheet #2 [[ -742.32 1830 1374.6 ] [ 1830 -4733.6 -3545.8 ] [ 1374.6 -3545.8 -2604.1 ]] Marginal 0 = (1.5 * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) - 3.5 * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)])) Marginal 1 = (2.5 * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + 0.5 * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)])) Marginal 2 = (-0.5 * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) - 1.5 * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)])) Marginal (0,1)= [1.5,2.5] * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + [-3.5,0.5] * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]) Marginal (0,2)= [1.5,-0.5] * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + [-3.5,-1.5] * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]) Marginal (1,2)= [2.5,-0.5] * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + [0.5,-1.5] * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)]) openturns-1.9/python/test/t_DualLinearCombinationFunction_std.py000077500000000000000000000022401307543307100254040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # First, build two functions from R^3->R inVar = ['x1', 'x2', 'x3'] functions = list() functions.append(ot.SymbolicFunction( inVar, ['x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)'])) functions.append( ot.SymbolicFunction(inVar, ['exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)'])) # Second, build the weights coefficients = ot.Sample(0, 3) coefficients.add([1.5, 2.5, -0.5]) coefficients.add([-3.5, 0.5, -1.5]) # Third, build the function myFunction = ot.DualLinearCombinationFunction(functions, coefficients) inPoint = ot.Point([1.2, 2.3, 3.4]) print('myFunction=', myFunction) print('Value at ', inPoint, '=', myFunction(inPoint)) print('Gradient at ', inPoint, '=', myFunction.gradient(inPoint)) ot.PlatformInfo.SetNumericalPrecision(5) print('Hessian at ', inPoint, '=', myFunction.hessian(inPoint)) for i in range(myFunction.getOutputDimension()): print('Marginal ', i, '=', myFunction.getMarginal(i)) print('Marginal (0,1)=', myFunction.getMarginal([0, 1])) print('Marginal (0,2)=', myFunction.getMarginal([0, 2])) print('Marginal (1,2)=', myFunction.getMarginal([1, 2])) openturns-1.9/python/test/t_EfficientGlobalOptimization_std.expout000066400000000000000000000000031307543307100260030ustar00rootroot00000000000000OK openturns-1.9/python/test/t_EfficientGlobalOptimization_std.py000077500000000000000000000114431307543307100251240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m import openturns.testing # ot.Log.Show(ot.Log.INFO) ot.TBB.Disable() # # branin dim = 2 # model branin = ot.SymbolicFunction( ['x1', 'x2'], ['((x2-(5.1/(4*_pi^2))*x1^2+5*x1/_pi-6)^2+10*(1-1/8*_pi)*cos(x1)+10-54.8104)/51.9496', '0.96']) transfo = ot.SymbolicFunction(['u1', 'u2'], ['15*u1-5', '15*u2']) model = ot.ComposedFunction(branin, transfo) # problem problem = ot.OptimizationProblem() problem.setObjective(model) bounds = ot.Interval([0.0] * dim, [1.0] * dim) problem.setBounds(bounds) # design experiment = ot.Box([1, 1]) inputSample = experiment.generate() modelEval = model(inputSample) outputSample = modelEval.getMarginal(0) # first kriging model covarianceModel = ot.SquaredExponential([0.3007, 0.2483], [0.981959]) basis = ot.ConstantBasisFactory(dim).build() kriging = ot.KrigingAlgorithm( inputSample, outputSample, covarianceModel, basis) noise = list(map(lambda x: x[1], modelEval)) kriging.setNoise(noise) kriging.run() # algo algo = ot.EfficientGlobalOptimization(problem, kriging.getResult()) algo.setNoiseModel(ot.SymbolicFunction( ['x1', 'x2'], ['0.96'])) # assume constant noise var algo.setMaximumIterationNumber(20) algo.setImprovementFactor( 0.05) # stop whe improvement is < a% the current optimum algo.setAIETradeoff(0.66744898) algo.run() result = algo.getResult() # print('1st pass result=', result) # print('iteration=', result.getIterationNumber()) assert result.getIterationNumber( ) > 10 and result.getIterationNumber() < 15, 'Too few/much iterations' # print(result.getInputSample()) # print(result.getOutputSample()) # openturns.testing.assert_almost_equal(result.getOptimalPoint(), [0.5, 0.0], 1e-5, 1e-5) # openturns.testing.assert_almost_equal(result.getOptimalValue(), # [-0.802223], 1e-5, 1e-5) # local refinement eventhough the model is noisy (we still want to check # we're not too far from optimum) problem.setObjective(model.getMarginal(0)) algo2 = ot.NLopt(problem, 'LD_LBFGS') algo2.setStartingPoint(result.getOptimalPoint()) algo2.run() result = algo2.getResult() # print(result) # openturns.testing.assert_almost_equal(result.getOptimalPoint(), [0.542773, 0.151666], 1e-5, 1e-5) # openturns.testing.assert_almost_equal(result.getOptimalPoint(), # [0.123895, 0.818329], 1e-5, 1e-5) openturns.testing.assert_almost_equal( result.getOptimalPoint(), [0.961652, 0.165000], 1e-5, 1e-5) openturns.testing.assert_almost_equal( result.getOptimalValue(), [-0.979476], 1e-5, 1e-5) # # ackley 2-d ot.RandomGenerator.SetSeed(0) dim = 2 # model def ackley(X): a = 20.0 b = 0.2 c = 2.0 * m.pi d = len(X) f = -a * m.exp(-b * m.sqrt(sum(x**2 for x in X) / d)) - \ m.exp(sum(m.cos(c * x) for x in X) / d) + a + m.exp(1.0) # print(X, f) return [f] model = ot.PythonFunction(dim, 1, ackley) # problem problem = ot.OptimizationProblem() problem.setObjective(model) bounds = ot.Interval([-15.0] * dim, [15.0] * dim) problem.setBounds(bounds) # design center = [0.5] * dim levels = [2.0, 4.0, 8.0, 14.0] experiment = ot.Factorial(center, levels) inputSample = experiment.generate() outputSample = model(inputSample) # first kriging model covarianceModel = ot.SquaredExponential([2.50057] * dim, [0.1]) basis = ot.ConstantBasisFactory(dim).build() kriging = ot.KrigingAlgorithm( inputSample, outputSample, covarianceModel, basis) kriging.run() # algo algo = ot.EfficientGlobalOptimization(problem, kriging.getResult()) # solver = ot.NLopt('GN_ESCH') # solver = ot.NLopt('GN_MLSL') algo.setMaximumIterationNumber(15) algo.setMaximumAbsoluteError(1e-10) algo.setMaximumRelativeError(1e-10) algo.setMaximumResidualError(1e-10) algo.setMaximumConstraintError(1e-10) algo.setMultiStartExperimentSize( 100) # number of multistart candidates improvement optim algo.setMultiStartNumber( 20) # number of multistart points for improvement optim algo.setParameterEstimationPeriod( 1) # relearn kriging parameters every X iteration algo.setImprovementFactor(1.0) # improvement stopping criterion factor algo.setCorrelationLengthFactor( 1.0) # correlation length stopping criterion factor algo.run() result = algo.getResult() # print('1st pass result=', result) assert result.getIterationNumber( ) > 0 and result.getIterationNumber() < 16, 'Too few/much iterations' # print('iteration=', result.getIterationNumber()) # print(result.getInputSample()) # print(result.getOutputSample()) # local refinement algo2 = ot.NLopt(problem, 'LD_LBFGS') algo2.setStartingPoint(result.getOptimalPoint()) algo2.run() result = algo2.getResult() openturns.testing.assert_almost_equal( result.getOptimalPoint(), [0.0] * dim, 1e-7, 1e-5) openturns.testing.assert_almost_equal( result.getOptimalValue(), [0.0], 1e-15, 1e-5) # ei = algo.getExpectedImprovement() # print(ei) print('OK') openturns-1.9/python/test/t_Epanechnikov_std.expout000066400000000000000000000045051307543307100230040ustar00rootroot00000000000000Distribution class=Epanechnikov name=Epanechnikov dimension=1 Distribution Epanechnikov() Elliptical = True Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.174954] oneSample first= class=Point name=Unnamed dimension=1 values=[0.573175] last= class=Point name=Unnamed dimension=1 values=[-0.100711] mean= class=Point name=Unnamed dimension=1 values=[0.00498178] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.203765] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[0.5] ddf = class=Point name=Unnamed dimension=1 values=[-0.75] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.75] log pdf=-0.575364 pdf =0.562500 pdf (FD)=0.562500 cdf=0.843750 ccdf=0.156250 pdf gradient = class=Point name=Unnamed dimension=0 values=[] cdf gradient = class=Point name=Unnamed dimension=0 values=[] quantile= class=Point name=Unnamed dimension=1 values=[0.729299] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.729299] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.811401, 0.811401] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.36172} with f= MinimumVolumeLevelSetEvaluation(Epanechnikov()) beta= [0.256221] Bilateral confidence interval= [-0.811401, 0.811401] beta= [0.95] Unilateral confidence interval (lower tail)= [-1, 0.729299] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.729299, 1] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0] standard deviation= class=Point name=Unnamed dimension=1 values=[0.447214] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[2.14286] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.2] parameters= [class=PointWithDescription name=X0 dimension=0 description=[] values=[]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [0.2] standard moment n= 3 value= [0] standard moment n= 4 value= [0.0857143] standard moment n= 5 value= [0] Standard representative= Epanechnikov() openturns-1.9/python/test/t_Epanechnikov_std.py000077500000000000000000000115541307543307100221150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Epanechnikov() print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 0.5) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # derivative of the CDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Epanechnikov_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Event_domain.expout000066400000000000000000000006621307543307100221300ustar00rootroot00000000000000sample= [ y0 ] 0 : [ 0 ] 1 : [ 0 ] 2 : [ 0 ] 3 : [ 0 ] 4 : [ 1 ] 5 : [ 0 ] 6 : [ 0 ] 7 : [ 0 ] 8 : [ 0 ] 9 : [ 0 ] sample= [ Unnamed in Unnamed ] 0 : [ 1 ] 1 : [ 0 ] 2 : [ 0 ] 3 : [ 0 ] 4 : [ 0 ] 5 : [ 0 ] 6 : [ 0 ] 7 : [ 0 ] 8 : [ 0 ] 9 : [ 1 ] openturns-1.9/python/test/t_Event_domain.py000077500000000000000000000020121307543307100212260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 distribution = Normal(dim) # # Case 1: composite random vector based event # # The input vector X = RandomVector(distribution) # The model: the identity function inVars = Description(dim) for i in range(dim): inVars[i] = "x" + str(i) model = SymbolicFunction(inVars, inVars) # The output vector Y = RandomVector(model, X) # The domain: [0, 1]^dim domain = Interval(dim) # The event event = Event(Y, domain) print("sample=") print(event.getSample(10)) # # Case 2: process based event # # The input process X = WhiteNoise(distribution) # The domain: [0, 1]^dim domain = Interval(dim) # The event event = Event(X, domain) print("sample=") print(event.getSample(10)) except: import sys print("t_Event_domain.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Event_std.expout000066400000000000000000000033731307543307100214550ustar00rootroot00000000000000point = class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect= class=RandomVector implementation=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect dimension= 4 vect realization (first )= class=Point name=Unnamed dimension=4 values=[101,202,303,404] vect sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=4 description=[x0,x1,x2,x3] data=[[101,202,303,404],[101,202,303,404],[101,202,303,404],[101,202,303,404],[101,202,303,404]] myEvent= class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,202,303,404] operator=class=Less name=Unnamed threshold=50 myEvent realization= class=Point name=Unnamed dimension=1 values=[1] myEvent sample= class=Sample name=EventRandomVector sample implementation=class=SampleImplementation name=EventRandomVector sample size=10 dimension=1 description=[d] data=[[1],[1],[1],[1],[1],[1],[1],[1],[1],[1]] openturns-1.9/python/test/t_Event_std.py000077500000000000000000000024541307543307100205630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical point of dimension 1 point = Point(4) ref_point = point point[0] = 101 point[1] = 202 point[2] = 303 point[3] = 404 print("point = ", repr(ref_point)) # We create a 'constant' RandomVector from the Point vect = RandomVector(point) print("vect=", vect) # Check standard methods of class RandomVector print("vect dimension=", vect.getDimension()) print("vect realization (first )=", repr(vect.getRealization())) print("vect sample =", repr(vect.getSample(5))) # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), 50) print("myEvent=", repr(myEvent)) # We compute one realization of the event print("myEvent realization=", repr(myEvent.getRealization())) # We compute a sample of the event print("myEvent sample=", repr(myEvent.getSample(10))) except: import sys print("t_Event_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Experiment_python.expout000066400000000000000000000004761307543307100232440ustar00rootroot00000000000000class=PythonExperiment name=RandomExp 0 : [ 0.629877 0.882805 ] 1 : [ 0.135276 0.0325028 ] 2 : [ 0.347057 0.969423 ] 3 : [ 0.92068 0.50304 ] 4 : [ 0.0632061 0.292757 ] 5 : [ 0.714382 0.383362 ] 6 : [ 0.373767 0.737268 ] 7 : [ 0.883503 0.294994 ] 8 : [ 0.92851 0.820811 ] 9 : [ 0.684575 0.828027 ] openturns-1.9/python/test/t_Experiment_python.py000077500000000000000000000010321307543307100223400ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot class RandomExp(object): def __init__(self, size, dim): self.size = size self.dim = dim def generate(self): res = ot.Sample(self.size, self.dim) for i in range(self.size): for j in range(self.dim): res[i, j] = ot.RandomGenerator.Generate() return res pyexp = RandomExp(10, 2) experiment = ot.Experiment(pyexp) print(experiment) sample = experiment.generate() print(sample) openturns-1.9/python/test/t_ExpertMixture_std.expout000066400000000000000000000021231307543307100232110ustar00rootroot00000000000000Mixture of experts= experts=Basis( [[x]->[-x],[x]->[x]] ) classifier=class=MixtureClassifier mixture=class=Mixture name=Mixture dimension=2 distributionCollection=[class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[-1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,-0.99,-0.99,1],class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.99,0.99,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5] moe ( -0.3 )= [0.3] moeNMF( -0.3 )= [0.3] moe ( -0.1 )= [0.1] moeNMF( -0.1 )= [0.1] openturns-1.9/python/test/t_ExpertMixture_std.py000077500000000000000000000017101307543307100223210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) aCollection = DistributionCollection(0) R = CorrelationMatrix(2) R[0, 1] = -0.99 aCollection.add(Normal([-1.0, 1.0], [1.0, 1.0], R)) R[0, 1] = 0.99 aCollection.add(Normal([1.0, 1.0], [1.0, 1.0], R)) # Instanciate one distribution object distribution = Mixture(aCollection, Point(aCollection.getSize(), 1.0)) # Create a mixture classifier classifier = MixtureClassifier(distribution) # Create local experts experts = Basis() experts.add(SymbolicFunction("x", "-x")) experts.add(SymbolicFunction("x", "x")) # Create a mixture of experts moe = ExpertMixture(experts, classifier) moeNMF = Function(moe) print("Mixture of experts=", moe) # Evaluate the mixture of experts on some points for i in range(2): p = Point(1, -0.3 + 0.8 * i / 4.0) print("moe ( %.6g )=" % p[0], moe(p)) print("moeNMF( %.6g )=" % p[0], moeNMF(p)) openturns-1.9/python/test/t_ExponentialCauchy_std.expout000066400000000000000000000010211307543307100240030ustar00rootroot00000000000000myDefautModel = class=ExponentialCauchy amplitude=[1] scale=[1] myModel = class=ExponentialCauchy amplitude=[1] scale=[1] covariance matrix at t = 1.0 : [[ 0.367879 ]] covariance matrix at t = -1.0 : [[ 0.367879 ]] covariance matrix at t = 15.0 : [[ 3.05902e-07 ]] discretized covariance over the time grid= RegularGrid(start=0, step=0.333333, n=4) is= [[ 1 0.716531 0.513417 0.367879 ] [ 0.716531 1 0.716531 0.513417 ] [ 0.513417 0.716531 1 0.716531 ] [ 0.367879 0.513417 0.716531 1 ]] openturns-1.9/python/test/t_ExponentialCauchy_std.py000077500000000000000000000025571307543307100231310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 # Default spatial dimension spatialDimension = 1 # Amplitude values amplitude = Point(defaultDimension, 1.0) # Scale values scale = Point(spatialDimension, 1.0) # Default constructor myDefautModel = ExponentialCauchy() print("myDefautModel = ", myDefautModel) # Second order model with parameters myModel = ExponentialCauchy(scale, amplitude) print("myModel = ", myModel) timeValueOne = 1. print("covariance matrix at t = ", timeValueOne, " : ", myModel.computeCovariance(timeValueOne)) print("covariance matrix at t = ", -1.0 * timeValueOne, " : ", myModel.computeCovariance(-1.0 * timeValueOne)) # Evaluation at time higher to check the decrease of the exponential values timeValueHigh = 15. print("covariance matrix at t = ", timeValueHigh, " : ", myModel.computeCovariance(timeValueHigh).__str__()) timeGrid = RegularGrid(0.0, 1.0 / 3.0, 4) print("discretized covariance over the time grid=", timeGrid, "is=", myModel.discretize(timeGrid)) except: import sys print("t_ExponentialCauchy_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ExponentialFactory_std.expout000066400000000000000000000013761307543307100242130ustar00rootroot00000000000000distribution= class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-1.3 Estimated distribution= class=Exponential name=Exponential dimension=1 lambda=2.50961 gamma=-1.30009 Default distribution= Exponential(lambda = 1, gamma = 0) Distribution from parameters= Exponential(lambda = 2.5, gamma = -1.3) Exponential = Exponential(lambda = 2.5, gamma = -1.3) Estimated exponential= Exponential(lambda = 2.50961, gamma = -1.30009) Default exponential= Exponential(lambda = 1, gamma = 0) Exponential from parameters= Exponential(lambda = 2.5, gamma = -1.3) Estimated distribution= class=Exponential name=Exponential dimension=1 lambda=2.53274e+305 gamma=0 Estimated distribution= class=Exponential name=Exponential dimension=1 lambda=10002 gamma=0.9999 openturns-1.9/python/test/t_ExponentialFactory_std.py000077500000000000000000000027471307543307100233250ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Exponential(2.5, -1.3) size = 10000 sample = distribution.getSample(size) factory = ExponentialFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedExponential = factory.buildAsExponential(sample) print("Exponential =", distribution) print("Estimated exponential=", estimatedExponential) estimatedExponential = factory.buildAsExponential() print("Default exponential=", estimatedExponential) estimatedExponential = factory.buildAsExponential( distribution.getParameter()) print("Exponential from parameters=", estimatedExponential) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_ExponentialFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ExponentialModel_std.expout000066400000000000000000000050761307543307100236450ustar00rootroot00000000000000myDefautModel = ExponentialModel(scale=[1], amplitude=[1], no spatial correlation) myModel = ExponentialModel(scale=[1], amplitude=[2], no spatial correlation) covariance matrix at t = 1.0 : [[ 1.47152 ]] covariance matrix at t = -1.0 : [[ 1.47152 ]] covariance matrix at t = 15.0 : [[ 1.22361e-06 ]] discretized covariance over the time grid= RegularGrid(start=0, step=0.333333, n=4) is= [[ 4 2.86613 2.05367 1.47152 ] [ 2.86613 4 2.86613 2.05367 ] [ 2.05367 2.86613 4 2.86613 ] [ 1.47152 2.05367 2.86613 4 ]] mySecondOrderModel = class= StationaryCovarianceModel myHighModel = ExponentialModel(scale=[1], amplitude=[1,2,3], spatial correlation= [[ 1 1 0 ] [ 1 1 0.25 ] [ 0 0.25 1 ]]) covariance matrix at t = 1.0 : [[ 0.367879 0.735759 0 ] [ 0.735759 1.47152 0.551819 ] [ 0 0.551819 3.31091 ]] covariance matrix at t = -1.0 : [[ 0.367879 0.735759 0 ] [ 0.735759 1.47152 0.551819 ] [ 0 0.551819 3.31091 ]] covariance matrix at t = 15.0 : [[ 3.05902e-07 6.11805e-07 0 ] [ 6.11805e-07 1.22361e-06 4.58853e-07 ] [ 0 4.58853e-07 2.75312e-06 ]] discretized covariance over the time grid= RegularGrid(start=0, step=0.333333, n=4) is= 12x12 [[ 1 2 0 0.716531 1.43306 0 0.513417 1.02683 0 0.367879 0.735759 0 ] [ 2 4 1.5 1.43306 2.86613 1.0748 1.02683 2.05367 0.770126 0.735759 1.47152 0.551819 ] [ 0 1.5 9 0 1.0748 6.44878 0 0.770126 4.62075 0 0.551819 3.31091 ] [ 0.716531 1.43306 0 1 2 0 0.716531 1.43306 0 0.513417 1.02683 0 ] [ 1.43306 2.86613 1.0748 2 4 1.5 1.43306 2.86613 1.0748 1.02683 2.05367 0.770126 ] [ 0 1.0748 6.44878 0 1.5 9 0 1.0748 6.44878 0 0.770126 4.62075 ] [ 0.513417 1.02683 0 0.716531 1.43306 0 1 2 0 0.716531 1.43306 0 ] [ 1.02683 2.05367 0.770126 1.43306 2.86613 1.0748 2 4 1.5 1.43306 2.86613 1.0748 ] [ 0 0.770126 4.62075 0 1.0748 6.44878 0 1.5 9 0 1.0748 6.44878 ] [ 0.367879 0.735759 0 0.513417 1.02683 0 0.716531 1.43306 0 1 2 0 ] [ 0.735759 1.47152 0.551819 1.02683 2.05367 0.770126 1.43306 2.86613 1.0748 2 4 1.5 ] [ 0 0.551819 3.31091 0 0.770126 4.62075 0 1.0748 6.44878 0 1.5 9 ]] openturns-1.9/python/test/t_ExponentialModel_std.py000077500000000000000000000047151307543307100227530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 spatialDimension = 1 # Amplitude values amplitude = Point(defaultDimension, 2.0) # Scale values scale = Point(spatialDimension, 1.0) # Default constructor myDefautModel = ExponentialModel() print("myDefautModel = ", myDefautModel) # Second order model with parameters myModel = ExponentialModel(scale, amplitude) print("myModel = ", myModel) timeValueOne = 1. print("covariance matrix at t = ", timeValueOne, " : ", myModel(timeValueOne)) print("covariance matrix at t = ", -1.0 * timeValueOne, " : ", myModel(-1.0 * timeValueOne)) # Evaluation at time higher to check the decrease of the exponential values timeValueHigh = 15. print("covariance matrix at t = ", timeValueHigh, " : ", myModel(timeValueHigh).__str__()) timeGrid = RegularGrid(0.0, 1.0 / 3.0, 4) print("discretized covariance over the time grid=", timeGrid, "is=", myModel.discretize(timeGrid)) # Default dimension parameter to evaluate the model highDimension = 3 # Reallocation of adequate sizes amplitude.resize(highDimension) spatialCorrelation = CorrelationMatrix(highDimension) for index in range(highDimension): amplitude[index] = (index + 1) / (defaultDimension * defaultDimension) if index > 0: spatialCorrelation[index, index - 1] = 1.0 / (index * index) # check the cast mySecondOrderModel = StationaryCovarianceModel( ExponentialModel(scale, amplitude, spatialCorrelation)) print("mySecondOrderModel = ", mySecondOrderModel) # Second order model - dimension 10 myHighModel = ExponentialModel( scale, amplitude, spatialCorrelation) print("myHighModel = ", myHighModel) print("covariance matrix at t = ", timeValueOne, " : ", myHighModel(timeValueOne)) print("covariance matrix at t = ", -1.0 * timeValueOne, " : ", myHighModel(-1.0 * timeValueOne)) print("covariance matrix at t = ", timeValueHigh, " : ", myHighModel(timeValueHigh)) print("discretized covariance over the time grid=", timeGrid, "is=", myHighModel.discretize(timeGrid)) except: import sys print("t_ExponentialModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Exponential_std.expout000066400000000000000000000052701307543307100226600ustar00rootroot00000000000000Distribution class=Exponential name=Exponential dimension=1 lambda=2.5 gamma=-0.5 Distribution Exponential(lambda = 2.5, gamma = -0.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[-0.315107] oneSample first= class=Point name=Unnamed dimension=1 values=[-0.45014] last= class=Point name=Unnamed dimension=1 values=[-0.157472] mean= class=Point name=Unnamed dimension=1 values=[-0.101604] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.160734] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.146986] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.146986] log pdf=-2.833709 pdf =0.058794 pdf (FD)=0.058794 cdf=0.976482 ccdf=0.023518 characteristic function= (0.921855842528-0.110683201593j) pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0646738,0.146986] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0646738,0.146986] cdf gradient = class=Point name=Unnamed dimension=2 values=[0.0352766,-0.0587944] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0352766,-0.0587944] quantile= class=Point name=Unnamed dimension=1 values=[0.698293] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.479483] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.5, 0.698293] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.07944} with f= MinimumVolumeLevelSetEvaluation(Exponential(lambda = 2.5, gamma = -0.5)) beta= [0.125] Bilateral confidence interval= [-0.489873, 0.975552] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 0.698293] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.479483, 12.3945] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[-0.1] standard deviation= class=Point name=Unnamed dimension=1 values=[0.4] skewness= class=Point name=Unnamed dimension=1 values=[2] kurtosis= class=Point name=Unnamed dimension=1 values=[9] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.16] parameters= [class=PointWithDescription name=X0 dimension=2 description=[lambda,gamma] values=[2.5,-0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1] standard moment n= 2 value= [2] standard moment n= 3 value= [6] standard moment n= 4 value= [24] standard moment n= 5 value= [120] Standard representative= Exponential(lambda = 1, gamma = 0) openturns-1.9/python/test/t_Exponential_std.py000077500000000000000000000140751307543307100217720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Exponential(2.5, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (Exponential(distribution.getLambda() + eps, distribution.getGamma()).computePDF(point) - Exponential(distribution.getLambda() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Exponential(distribution.getLambda(), distribution.getGamma() + eps).computePDF(point) - Exponential(distribution.getLambda(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Exponential(distribution.getLambda() + eps, distribution.getGamma()).computeCDF(point) - Exponential(distribution.getLambda() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Exponential(distribution.getLambda(), distribution.getGamma() + eps).computeCDF(point) - Exponential(distribution.getLambda(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Exponential_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ExponentiallyDampedCosineModel_std.expout000066400000000000000000000011331307543307100264540ustar00rootroot00000000000000myDefautModel = class=ExponentiallyDampedCosineModel(scale=[1], amplitude=[1], frequency=1) myModel = class=ExponentiallyDampedCosineModel(scale=[1], amplitude=[1], frequency=0.1) covariance matrix at t = 1.0 : [[ 0.367879 ]] covariance matrix at t = -1.0 : [[ 0.367879 ]] covariance matrix at t = 15.0 : [[ 3.05902e-07 ]] discretized covariance over the time grid= RegularGrid(start=0, step=0.333333, n=4) is= [[ 1 -0.358266 -0.256709 0.367879 ] [ -0.358266 1 -0.358266 -0.256709 ] [ -0.256709 -0.358266 1 -0.358266 ] [ 0.367879 -0.256709 -0.358266 1 ]] openturns-1.9/python/test/t_ExponentiallyDampedCosineModel_std.py000077500000000000000000000025571307543307100255760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 spatialDimension = 1 # Amplitude values amplitude = [1.0] # Scale values scale = [1.0] # Frequency values frequency = 0.1 # Default constructor myDefautModel = ExponentiallyDampedCosineModel() print("myDefautModel = ", myDefautModel) # Second order model with parameters myModel = ExponentiallyDampedCosineModel( scale, amplitude, frequency) print("myModel = ", myModel) timeValueOne = 1. print("covariance matrix at t = ", timeValueOne, " : ", myModel(timeValueOne)) print("covariance matrix at t = ", -1.0 * timeValueOne, " : ", myModel(-1.0 * timeValueOne)) # Evaluation at time higher to check the decrease of the # exponentiallyDampedCosine values timeValueHigh = 15. print("covariance matrix at t = ", timeValueHigh, " : ", myModel(timeValueHigh).__str__()) timeGrid = RegularGrid(0.0, 1.0 / 3.0, 4) print("discretized covariance over the time grid=", timeGrid, "is=", myModel.discretize(timeGrid)) except: import sys print("t_ExponentiallyDampedCosineModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FAST_std.expout000066400000000000000000000016041307543307100211240ustar00rootroot00000000000000Ishigami first order FAST indice 0 = 0.30746126 absolute error=0.00644393 Ishigami first order FAST indice 1 = 0.44252444 absolute error=0.00011330 Ishigami first order FAST indice 2 = 0.00000042 absolute error=0.00000042 Ishigami total order FAST indice 0 = 0.55424701 absolute error=0.00334184 Ishigami total order FAST indice 1 = 0.48710104 absolute error=0.04468990 Ishigami total order FAST indice 2 = 0.23946403 absolute error=0.00421963 G-Sobol first order FAST indice 0 = 0.49826783 absolute error=0.00798217 G-Sobol first order FAST indice 1 = 0.22147229 absolute error=0.00352771 G-Sobol first order FAST indice 2 = 0.12248647 absolute error=0.00407603 G-Sobol total order FAST indices 0 = 0.63490116 absolute error=0.00521366 G-Sobol total order FAST indices 1 = 0.32501154 absolute error=0.00001154 G-Sobol total order FAST indices 2 = 0.19722714 absolute error=0.00347714 openturns-1.9/python/test/t_FAST_std.py000077500000000000000000000071621307543307100202400ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: RandomGenerator.SetSeed(0) inputDimension = 3 outputDimension = 1 inputName = ["X1", "X2", "X3"] outputName = ["Y"] # Test with Ishigami function formulaIshigami = Description(outputDimension) formulaIshigami[ 0] = "sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)" modelIshigami = SymbolicFunction(inputName, formulaIshigami) distributions = ComposedDistribution([Uniform(-1.0, 1.0)] * inputDimension) sensitivityAnalysis = FAST(modelIshigami, distributions, 400) firstOrderIndices = sensitivityAnalysis.getFirstOrderIndices() totalOrderIndices = sensitivityAnalysis.getTotalOrderIndices() # Comparaison with reference analytical values a = 7.0 b = 0.1 covTh = (b ** 2 * pi ** 8) / 18.0 + \ (b * pi ** 4) / 5.0 + (a ** 2) / 8.0 + 1.0 / 2.0 sob_1 = [(b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh, (a ** 2 / 8.0) / covTh, 0.0] sob_2 = [ 0.0, (b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh, 0.0] sob_3 = [0.0] sob_T1 = [sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0], sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0], sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]] for i in range(inputDimension): value = firstOrderIndices[i] print("Ishigami first order FAST indice ", i, "= %.8f" % value, "absolute error=%.8f" % fabs(value - sob_1[i])) print("\n") for i in range(inputDimension): value = totalOrderIndices[i] print("Ishigami total order FAST indice", i, "= %.8f" % value, "absolute error=%.8f" % fabs(value - sob_T1[i])) # Test with G-Sobol function formulaGSobol = ["1.0"] covTh = 1.0 a = Point(inputDimension) for i in range(inputDimension): a[i] = 0.5 * i covTh = covTh * (1.0 + 1.0 / (3.0 * (1.0 + a[i]) ** 2)) formulaGSobol[0] = formulaGSobol[0] + " * ((abs(4.0 * X" + str(i + 1) + " - 2.0) + " + \ str(a[i]) + ") / (1.0 + " + \ str(a[i]) + "))" covTh = covTh - 1.0 modelGSobol = Function(inputName, outputName, formulaGSobol) distributions = ComposedDistribution([Uniform(0.0, 1.0)] * inputDimension) sensitivityAnalysis = FAST(modelGSobol, distributions, 400) # Comparaison with reference analytical values firstOrderIndices = sensitivityAnalysis.getFirstOrderIndices() totalOrderIndices = sensitivityAnalysis.getTotalOrderIndices() # First-order indices V_i = Point(inputDimension) Vtot_i = Point(inputDimension) prod_V_i = 1.0 for i in range(inputDimension): V_i[i] = 1.0 / (3.0 * (1.0 + a[i]) ** 2.0) prod_V_i *= V_i[i] # Total indices Vtot_i[0] = V_i[0] + V_i[0] * V_i[1] + V_i[0] * V_i[2] + prod_V_i Vtot_i[1] = V_i[1] + V_i[0] * V_i[1] + V_i[1] * V_i[2] + prod_V_i Vtot_i[2] = V_i[2] + V_i[0] * V_i[2] + V_i[1] * V_i[2] + prod_V_i # Results print("\n") for i in range(inputDimension): value = firstOrderIndices[i] print("G-Sobol first order FAST indice ", i, "= %.8f" % value, "absolute error=%.8f" % fabs(value - V_i[i] / covTh)) print("\n") for i in range(inputDimension): value = totalOrderIndices[i] print("G-Sobol total order FAST indices ", i, "= %.8f" % value, "absolute error=%.8f" % fabs(value - Vtot_i[i] / covTh)) except: import sys print("t_FAST_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FORM_draw.expout000066400000000000000000000110371307543307100212760ustar00rootroot00000000000000formulas= [-(6+x0^2-x1)] myCobyla= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM= class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] level value=0 bounds=none minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 physicalstartingPoint=class=Point name=Unnamed dimension=2 values=[5,2.1] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] importance factors= [0.502588,0.497412] openturns-1.9/python/test/t_FORM_draw.py000077500000000000000000000075171307543307100204150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if fabs(point[i]) < eps: oss += sep + '%.6f' % fabs(point[i]) else: oss += sep + '%.6f' % point[i] sep = "," oss += "]" return oss TESTPREAMBLE() try: # We create a numerical math function # Analytical construction inputFunc = Description(2) inputFunc[0] = "x0" inputFunc[1] = "x1" outputFunc = Description(1) outputFunc[0] = "y0" formulas = Description(outputFunc.getSize()) formulas[0] = "-(6+x0^2-x1)" print("formulas=", formulas) myFunction = Function(inputFunc, outputFunc, formulas) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # x0 mean[0] = 5.0 # x1 mean[1] = 2.1 sigma = Point(dim, 0.0) # x0 sigma[0] = 3.3 # x1 sigma[1] = 3.0 R = CorrelationMatrix(dim) myDistribution = Normal(mean, sigma, R) # we name the components of the distribution componentDescription = Description(dim) componentDescription[0] = "Marginal 1" componentDescription[1] = "Marginal 2" myDistribution.setDescription(componentDescription) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) outputDescription = Description(1) outputDescription[0] = "Interest Variable 1" output.setDescription(outputDescription) # We create an Event from this RandomVector myEvent = Event(output, Greater(), 0.0) # We create a NearestPoint algorithm myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(200) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) print("myCobyla=", myCobyla) # We create a FORM algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myAlgo = FORM(myCobyla, myEvent, mean) print("FORM=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result result = FORMResult(myAlgo.getResult()) digits = 5 print("importance factors=", printPoint( result.getImportanceFactors(), digits)) # Graph 1 : Importance Factors graph importanceFactorsGraph = result.drawImportanceFactors() importanceFactorsGraph.draw("ImportanceFactorsDrawingFORM.png") # Graph 2 : Hasofer Reliability Index Sensitivity Graphs graph reliabilityIndexSensitivityGraphs = result.drawHasoferReliabilityIndexSensitivity( ) graph2a = reliabilityIndexSensitivityGraphs[0] graph2a.draw("HasoferReliabilityIndexMarginalSensitivityDrawing.png") graph2b = reliabilityIndexSensitivityGraphs[1] graph2b.draw("HasoferReliabilityIndexOtherSensitivityDrawing.png") # Graph 3 : FORM Event Probability Sensitivity Graphs graph eventProbabilitySensitivityGraphs = result.drawEventProbabilitySensitivity( ) graph3a = eventProbabilitySensitivityGraphs[0] graph3a.draw("EventProbabilityIndexMarginalSensitivityDrawing.png") graph3b = eventProbabilitySensitivityGraphs[1] graph3b.draw("EventProbabilityIndexOtherSensitivityDrawing.png") # Graph 4 : Convergence history graph4 = result.getOptimizationResult().drawErrorHistory() graph4.draw("ConvergenceHistory.png") except: import sys print("t_FORM_draw.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FORM_interval.expout000066400000000000000000000041741307543307100221710ustar00rootroot00000000000000################################################## domain= [1, (2) +inf[ MC p=0.1575 FORM p=0.16 ################################################## domain= ]-inf (1), 2] MC p=0.9765 FORM p=0.98 ################################################## domain= [1, 2] MC p=0.134 FORM p=0.16 ################################################## domain= ]-inf (1), (2) +inf[ MC p=1 FORM p=0.50 ################################################## domain= [1, 2] [1, 2] MC p=0.0175 FORM p=0.50 ################################################## domain= [1, 2] [1, (2) +inf[ MC p=0.0202 FORM p=0.50 ################################################## domain= [1, (2) +inf[ [1, 2] MC p=0.0203 FORM p=0.50 ################################################## domain= [1, (2) +inf[ [1, (2) +inf[ MC p=0.0233 FORM p=0.50 ################################################## domain= [1, 2] ]-inf (1), 2] MC p=0.1313 FORM p=0.16 ################################################## domain= [1, 2] ]-inf (1), (2) +inf[ MC p=0.134 FORM p=0.16 ################################################## domain= [1, (2) +inf[ ]-inf (1), 2] MC p=0.1545 FORM p=0.16 ################################################## domain= [1, (2) +inf[ ]-inf (1), (2) +inf[ MC p=0.1575 FORM p=0.16 ################################################## domain= ]-inf (1), 2] [1, 2] MC p=0.1336 FORM p=0.16 ################################################## domain= ]-inf (1), 2] [1, (2) +inf[ MC p=0.1556 FORM p=0.16 ################################################## domain= ]-inf (1), (2) +inf[ [1, 2] MC p=0.1364 FORM p=0.16 ################################################## domain= ]-inf (1), (2) +inf[ [1, (2) +inf[ MC p=0.1587 FORM p=0.16 ################################################## domain= ]-inf (1), 2] ]-inf (1), 2] MC p=0.9545 FORM p=0.98 ################################################## domain= ]-inf (1), 2] ]-inf (1), (2) +inf[ MC p=0.9765 FORM p=0.98 ################################################## domain= ]-inf (1), (2) +inf[ ]-inf (1), 2] MC p=0.9777 FORM p=0.98 ################################################## domain= ]-inf (1), (2) +inf[ ]-inf (1), (2) +inf[ MC p=1 FORM p=0.50 openturns-1.9/python/test/t_FORM_interval.py000077500000000000000000000133421307543307100212750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Build the event 'vector takes its values in interval' # using a comparison operator and a threshold in order # to be compatible with more algorithms than Monte Carlo def buildEvent(vector, interval): dimension = vector.getDimension() if dimension != interval.getDimension(): raise Exception('Dimensions not compatible') finiteLowerBound = interval.getFiniteLowerBound() finiteUpperBound = interval.getFiniteUpperBound() lowerBound = interval.getLowerBound() upperBound = interval.getUpperBound() # Easy case: 1D interval if (dimension == 1): if finiteLowerBound[0] and not finiteUpperBound[0]: print('case 1') return ot.Event(vector, Greater(), lowerBound[0]) if not finiteLowerBound[0] and finiteUpperBound[0]: print('case 2') return ot.Event(vector, Less(), upperBound[0]) if finiteLowerBound[0] and finiteUpperBound[0]: print('case 3') testFunction = ot.SymbolicFunction( 'x', 'min(x-(' + str(lowerBound[0]) + '), (' + str(upperBound[0]) + ') - x)') newVector = ot.RandomVector(ot.Function( testFunction, vector.getFunction()), vector.getAntecedent()) return ot.Event(newVector, Greater(), 0.0) # Here we build an event that is always true and much cheaper to # compute print('case 4') inputDimension = vector.getFunction().getInputDimension() return ot.Event(ot.RandomVector(ot.SymbolicFunction(ot.Description.BuildDefault(inputDimension, 'x'), ['0.0']), vector.getAntecedent()), Less(), 1.0) # General case numConstraints = 0 inVars = ot.Description.BuildDefault(dimension, 'y') slacks = ot.Description(0) for i in range(dimension): if finiteLowerBound[i]: slacks.add(inVars[i] + '-(' + str(lowerBound[i]) + ')') if finiteUpperBound[i]: slacks.add('(' + str(upperBound[i]) + ')-' + inVars[i]) # No constraint if slacks.getSize() == 0: # Here we build an event that is always true and much cheaper to # compute inputDimension = vector.getFunction().getInputDimension() return ot.Event(ot.RandomVector(ot.SymbolicFunction(ot.Description.BuildDefault(inputDimension, 'x'), ['0.0']), vector.getAntecedent()), Less(), 1.0) # Only one constraint if slacks.getSize() == 1: print('case 6') testFunction = ot.SymbolicFunction(inVars, [slacks[0]]) # Several constraints else: print('case 7') formula = 'min(' + slacks[0] for i in range(1, slacks.getSize()): formula += ',' + slacks[i] formula += ')' testFunction = ot.SymbolicFunction(inVars, [formula]) newVector = ot.RandomVector(ot.Function( testFunction, vector.getFunction()), vector.getAntecedent()) return ot.Event(newVector, Greater(), 0.0) # Tests ot.ResourceMap.SetAsUnsignedInteger('Simulation-DefaultBlockSize', 100) ot.ResourceMap.SetAsUnsignedInteger( 'Simulation-DefaultMaximumOuterSampling', 100) ot.ResourceMap.SetAsScalar( 'Simulation-DefaultMaximumCoefficientOfVariation', 0.0) ot.ResourceMap.SetAsScalar( 'Simulation-DefaultMaximumStandardDeviation', 0.0) ot.ResourceMap.SetAsScalar( 'RootStrategyImplementation-DefaultStepSize', 0.1) algorithms = ['MonteCarlo', 'LHS', 'QuasiMonteCarlo', 'DirectionalSampling'] inDim = 4 X = ot.RandomVector(ot.Normal(inDim)) inVars = ot.Description.BuildDefault(inDim, 'x') low = 1.0 up = 2.0 intervals = [ot.Interval([low], [up], [True], [False]), ot.Interval([low], [up], [False], [True]), ot.Interval([low], [up], [True], [True]), ot.Interval([low], [up], [False], [False]), ot.Interval([low] * 2, [up] * 2, [True, True], [True, True]), ot.Interval([low] * 2, [up] * 2, [True, True], [True, False]), ot.Interval([low] * 2, [up] * 2, [True, True], [False, True]), ot.Interval([low] * 2, [up] * 2, [True, True], [False, False]), ot.Interval([low] * 2, [up] * 2, [True, False], [True, True]), ot.Interval([low] * 2, [up] * 2, [True, False], [True, False]), ot.Interval([low] * 2, [up] * 2, [True, False], [False, True]), ot.Interval([low] * 2, [up] * 2, [True, False], [False, False]), ot.Interval([low] * 2, [up] * 2, [False, True], [True, True]), ot.Interval([low] * 2, [up] * 2, [False, True], [True, False]), ot.Interval([low] * 2, [up] * 2, [False, True], [False, True]), ot.Interval([low] * 2, [up] * 2, [False, True], [False, False]), ot.Interval([low] * 2, [up] * 2, [False, False], [True, True]), ot.Interval([low] * 2, [up] * 2, [False, False], [True, False]), ot.Interval([low] * 2, [up] * 2, [False, False], [False, True]), ot.Interval([low] * 2, [up] * 2, [False, False], [False, False])] for domain in intervals: print('#' * 50) print('domain=\n', domain) outDim = domain.getDimension() f = ot.SymbolicFunction(inVars, inVars[0:outDim]) Y = ot.RandomVector(f, X) # event = buildEvent(Y, domain) event = ot.Event(Y, domain) ot.RandomGenerator.SetSeed(0) # algo = getattr(openturns, algoName)(event) algo = ot.MonteCarlo(event) algo.run() res = algo.getResult().getProbabilityEstimate() print('MC p=%.6g' % res) ot.RandomGenerator.SetSeed(0) # algo = getattr(openturns, algoName)(event) algo = ot.FORM(ot.Cobyla(), event, X.getMean()) algo.run() res = algo.getResult().getEventProbability() print('FORM p=%.2f' % res) openturns-1.9/python/test/t_FORM_sensitivity.expout000066400000000000000000000161661307543307100227430ustar00rootroot00000000000000formulas= [-(6+x0^2-x1)] myCobyla= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM= class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] level value=0 bounds=none minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=200 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 physicalstartingPoint=class=Point name=Unnamed dimension=2 values=[5,2.1] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] importance factors= [0.502588,0.497412] Hasofer reliability index=1.941922 result= class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=2 values=[-1.3767,1.36959] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=2 values=[0.456905,6.20876] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[-(6+x0^2-x1)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[5,2.1] sigma=class=Point name=Unnamed dimension=2 values=[3.3,3] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.94192 importanceFactors=class=PointWithDescription name=Importance Factors dimension=2 description=[Marginal 1,Marginal 2] values=[0.502588,0.497412] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=2 description=[,] values=[0,0] hasoferReliabilityIndexSensitivity=[] eventProbability=0.0260733 generalisedReliabilityIndex=1.94192 eventProbabilitySensitivity=[] hasoferReliabilityIndexSensitivity = [class=PointWithDescription name=Marginal 1 dimension=2 description=[mean_0,standard_deviation_0] values=[0.214829,-0.295754],class=PointWithDescription name=Marginal 2 dimension=2 description=[mean_1,standard_deviation_1] values=[-0.235091,-0.321978],class=PointWithDescription name=dependence dimension=1 description=[R_1_0] values=[0]] eventProbabilitySensitivity = [class=PointWithDescription name=Marginal 1 dimension=2 description=[mean_0,standard_deviation_0] values=[-0.0130055,0.0179046],class=PointWithDescription name=Marginal 2 dimension=2 description=[mean_1,standard_deviation_1] values=[0.0142322,0.0194922],class=PointWithDescription name=dependence dimension=1 description=[R_1_0] values=[-0]] openturns-1.9/python/test/t_FORM_sensitivity.py000077500000000000000000000075251307543307100220510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * from math import * def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if fabs(point[i]) < eps: oss += sep + '%.6f' % fabs(point[i]) else: oss += sep + '%.6f' % point[i] sep = "," oss += "]" return oss TESTPREAMBLE() try: # We create a numerical math function # Analytical construction inputFunc = Description(2) inputFunc[0] = "x0" inputFunc[1] = "x1" outputFunc = Description(1) outputFunc[0] = "y0" formulas = Description(outputFunc.getSize()) formulas[0] = "-(6+x0^2-x1)" print("formulas=", formulas) myFunction = Function(inputFunc, outputFunc, formulas) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # x0 mean[0] = 5.0 # x1 mean[1] = 2.1 sigma = Point(dim, 0.0) # x0 sigma[0] = 3.3 # x1 sigma[1] = 3.0 R = IdentityMatrix(dim) # testDistributions = DistributionCollection(2) testDistributions[0] = Normal(mean, sigma, R) marginals = DistributionCollection(2) marginals[0] = testDistributions[0].getMarginal(0) marginals[1] = testDistributions[0].getMarginal(1) testDistributions[1] = ComposedDistribution(marginals, NormalCopula(R)) for i in range(1): myDistribution = testDistributions[i] # We name the components of the distribution componentDescription = Description(dim) componentDescription[0] = "Marginal 1" componentDescription[1] = "Marginal 2" myDistribution.setDescription(componentDescription) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) outputDescription = Description(1) outputDescription[0] = "Interest Variable 1" output.setDescription(outputDescription) # We create an Event from this RandomVector myEvent = Event(output, Greater(), 0.0) # We create a NearestPoint algorithm myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(200) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) print("myCobyla=", myCobyla) # We create a FORM algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myAlgo = FORM(myCobyla, myEvent, mean) print("FORM=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result result = FORMResult(myAlgo.getResult()) digits = 5 print("importance factors=", printPoint( result.getImportanceFactors(), digits)) print("Hasofer reliability index=%.6f" % result.getHasoferReliabilityIndex()) print("result=", result) # Hasofer Reliability Index Sensitivity hasoferReliabilityIndexSensitivity = result.getHasoferReliabilityIndexSensitivity( ) print("hasoferReliabilityIndexSensitivity = ", repr(hasoferReliabilityIndexSensitivity)) # Event Probability Sensitivity eventProbabilitySensitivity = result.getEventProbabilitySensitivity() print("eventProbabilitySensitivity = ", repr(eventProbabilitySensitivity)) except: import sys print("t_FORM_sensitivity.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FORM_std.expout000066400000000000000000000115551307543307100211400ustar00rootroot00000000000000myCobyla= class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 FORM= class=FORM class=Analytical nearestPointAlgorithm=class=OptimizationAlgorithm implementation=class=Cobyla class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] level value=-3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=400 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false rhoBeg=0.1 event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 physicalstartingPoint=class=Point name=Unnamed dimension=4 values=[50,1,10,5] result=class=FORMResult class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] physicalSpaceDesignPoint=class=Point name=Unnamed dimension=0 values=[] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[] outputVariablesNames=[] formulas=[] antecedent=class=ConstantRandomVector description=[] point=class=Point name=Unnamed dimension=0 values=[] operator=class=Less name=Unnamed threshold=0 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=0 importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] hasoferReliabilityIndexSensitivity=[] eventProbability=0 generalisedReliabilityIndex=0 eventProbabilitySensitivity=[] event probability=0.156426 generalized reliability index=1.009255 standard space design point= [-0.031035,0.841942,0.445404,-0.332238] physical space design point= [49.968965,1.841942,10.445404,4.667762] is standard point origin in failure space? false importance factors= [0.000946,0.695925,0.194763,0.108367] Hasofer reliability index=1.009255 openturns-1.9/python/test/t_FORM_std.py000077500000000000000000000054251307543307100202460ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if fabs(point[i]) < eps: oss += sep + '%.6f' % fabs(point[i]) else: oss += sep + '%.6f' % point[i] sep = "," oss += "]" return oss try: # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create a NearestPoint algorithm myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(400) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) print("myCobyla=", myCobyla) # We create a FORM algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myAlgo = FORM(myCobyla, myEvent, mean) print("FORM=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the iresult result = myAlgo.getResult() digits = 5 print("event probability=%.6f" % result.getEventProbability()) print("generalized reliability index=%.6f" % result.getGeneralisedReliabilityIndex()) print("standard space design point=", printPoint( result.getStandardSpaceDesignPoint(), digits)) print("physical space design point=", printPoint( result.getPhysicalSpaceDesignPoint(), digits)) # Is the standard point origin in failure space? print("is standard point origin in failure space? %s" % (result.getIsStandardPointOriginInFailureSpace() and "true" or "false")) print("importance factors=", printPoint( result.getImportanceFactors(), digits)) print("Hasofer reliability index=%.6f" % result.getHasoferReliabilityIndex()) except: import sys print("t_FORM_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Factorial_std.expout000066400000000000000000000025171307543307100222770ustar00rootroot00000000000000myPlane = class=Factorial name=Unnamed center=class=Point name=center dimension=4 values=[0.5,1.5,2.5,3.5] levels=class=Point name=levels dimension=3 values=[4,8,16] sample = class=Sample name=Factorial plane implementation=class=SampleImplementation name=Factorial plane size=49 dimension=4 data=[[0.5,1.5,2.5,3.5],[-3.5,-2.5,-1.5,-0.5],[4.5,-2.5,-1.5,-0.5],[-3.5,5.5,-1.5,-0.5],[4.5,5.5,-1.5,-0.5],[-3.5,-2.5,6.5,-0.5],[4.5,-2.5,6.5,-0.5],[-3.5,5.5,6.5,-0.5],[4.5,5.5,6.5,-0.5],[-3.5,-2.5,-1.5,7.5],[4.5,-2.5,-1.5,7.5],[-3.5,5.5,-1.5,7.5],[4.5,5.5,-1.5,7.5],[-3.5,-2.5,6.5,7.5],[4.5,-2.5,6.5,7.5],[-3.5,5.5,6.5,7.5],[4.5,5.5,6.5,7.5],[-7.5,-6.5,-5.5,-4.5],[8.5,-6.5,-5.5,-4.5],[-7.5,9.5,-5.5,-4.5],[8.5,9.5,-5.5,-4.5],[-7.5,-6.5,10.5,-4.5],[8.5,-6.5,10.5,-4.5],[-7.5,9.5,10.5,-4.5],[8.5,9.5,10.5,-4.5],[-7.5,-6.5,-5.5,11.5],[8.5,-6.5,-5.5,11.5],[-7.5,9.5,-5.5,11.5],[8.5,9.5,-5.5,11.5],[-7.5,-6.5,10.5,11.5],[8.5,-6.5,10.5,11.5],[-7.5,9.5,10.5,11.5],[8.5,9.5,10.5,11.5],[-15.5,-14.5,-13.5,-12.5],[16.5,-14.5,-13.5,-12.5],[-15.5,17.5,-13.5,-12.5],[16.5,17.5,-13.5,-12.5],[-15.5,-14.5,18.5,-12.5],[16.5,-14.5,18.5,-12.5],[-15.5,17.5,18.5,-12.5],[16.5,17.5,18.5,-12.5],[-15.5,-14.5,-13.5,19.5],[16.5,-14.5,-13.5,19.5],[-15.5,17.5,-13.5,19.5],[16.5,17.5,-13.5,19.5],[-15.5,-14.5,18.5,19.5],[16.5,-14.5,18.5,19.5],[-15.5,17.5,18.5,19.5],[16.5,17.5,18.5,19.5]] openturns-1.9/python/test/t_Factorial_std.py000077500000000000000000000011201307543307100213730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: center = Point(4, 0.0) center.setName("center") center[0] = 0.5 center[1] = 1.5 center[2] = 2.5 center[3] = 3.5 levels = Point(3, 0.0) levels.setName("levels") levels[0] = 4 levels[1] = 8 levels[2] = 16 myPlane = Factorial(center, levels) print("myPlane = ", myPlane) sample = myPlane.generate() print("sample = ", repr(sample)) except: import sys print("t_Factorial_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FarlieGumbelMorgensternCopulaFactory_std.expout000066400000000000000000000017641307543307100276540ustar00rootroot00000000000000distribution= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 Estimated distribution= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.616721 Default distribution= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.5 Distribution from parameters= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 FarlieGumbelMorgensternCopula = class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 Estimated farlieGumbelMorgensternCopula= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.616721 Default farlieGumbelMorgensternCopula= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.5 FarlieGumbelMorgensternCopula from parameters= class=FarlieGumbelMorgensternCopula name=FarlieGumbelMorgensternCopula dimension=2 theta=0.7 openturns-1.9/python/test/t_FarlieGumbelMorgensternCopulaFactory_std.py000077500000000000000000000030201307543307100267460ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = FarlieGumbelMorgensternCopula(0.7) size = 1000 sample = distribution.getSample(size) factory = FarlieGumbelMorgensternCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedFarlieGumbelMorgensternCopula = factory.buildAsFarlieGumbelMorgensternCopula( sample) print("FarlieGumbelMorgensternCopula =", distribution) print("Estimated farlieGumbelMorgensternCopula=", estimatedFarlieGumbelMorgensternCopula) estimatedFarlieGumbelMorgensternCopula = factory.buildAsFarlieGumbelMorgensternCopula( ) print("Default farlieGumbelMorgensternCopula=", estimatedFarlieGumbelMorgensternCopula) estimatedFarlieGumbelMorgensternCopula = factory.buildAsFarlieGumbelMorgensternCopula( distribution.getParameter()) print("FarlieGumbelMorgensternCopula from parameters=", estimatedFarlieGumbelMorgensternCopula) except: import sys print("t_FarlieGumbelMorgensternFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FarlieGumbelMorgensternCopula_std.expout000066400000000000000000000041431307543307100263160ustar00rootroot00000000000000Copula class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 Copula class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 Mean [0.5,0.5] Covariance [[ 0.0833333 0.0194444 ] [ 0.0194444 0.0833333 ]] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= [0.629877,0.899275] oneSample= [ X0 X1 ] 0 : [ 0.135276 0.0216751 ] 1 : [ 0.347057 0.961496 ] 2 : [ 0.92068 0.638913 ] 3 : [ 0.0632061 0.196286 ] 4 : [ 0.714382 0.457863 ] 5 : [ 0.373767 0.700168 ] 6 : [ 0.883503 0.426304 ] 7 : [ 0.92851 0.882855 ] 8 : [ 0.684575 0.859274 ] 9 : [ 0.359802 0.944448 ] anotherSample mean= [0.502777,0.500551] anotherSample covariance= [[ 0.0845153 0.0201085 ] [ 0.0201085 0.0833041 ]] point= [0.2,0.2] pdf= 1.252 cdf= 0.05792 Quantile= [0.683555,0.683555] CDF(quantile)= 0.5 InverseSurvival= class=Point name=Unnamed dimension=2 values=[0.0255431,0.0255431] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0126603, 0.98734] [0.0126603, 0.98734] threshold= [0.974679] Minimum volume level set= {x | f(x) <= 0.392698} with f= MinimumVolumeLevelSetEvaluation(class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7) beta= [0.675232] Bilateral confidence interval= [0.0126603, 0.98734] [0.0126603, 0.98734] beta= [0.974679] Unilateral confidence interval (lower tail)= [0, 0.974457] [0, 0.974457] beta= [0.974457] Unilateral confidence interval (upper tail)= [0.0255431, 1] [0.0255431, 1] beta= [0.974457] margin= IndependentCopula(dimension = 1) margin PDF= 1.0 margin CDF= 0.25 margin quantile= [0.95] margin realization= [0.294088] margin= IndependentCopula(dimension = 1) margin PDF= 1.0 margin CDF= 0.25 margin quantile= [0.95] margin realization= [0.47206] indices= [1,0] margins= class=FarlieGumbelMorgensternCopula name=a farlieGumbelMorgenstern copula dimension=2 theta=0.7 margins PDF= 1.175 margins CDF= 0.087109375 margins quantile= [0.974457,0.974457] margins CDF(quantile)= 0.95 margins realization= [0.196586,0.508063] openturns-1.9/python/test/t_FarlieGumbelMorgensternCopula_std.py000077500000000000000000000075461307543307100254370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 copula = FarlieGumbelMorgensternCopula(0.7) copula.setName("a farlieGumbelMorgenstern copula") print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", copula.getMean()) print("Covariance ", copula.getCovariance()) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of copula oneRealization = copula.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", oneSample) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", anotherSample.computeMean()) print("anotherSample covariance=", anotherSample.computeCovariance()) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of zero point zeroPDF = copula.computePDF(point) zeroCDF = copula.computeCDF(point) print("point= ", point, " pdf=", zeroPDF, " cdf= %.12g" % zeroCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", quantile) print("CDF(quantile)= %.12g" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", margin) print("margin PDF=", margin.computePDF(Point(1, 0.25))) print("margin CDF=", margin.computeCDF(Point(1, 0.25))) print("margin quantile=", margin.computeQuantile(0.95)) print("margin realization=", margin.getRealization()) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", indices) margins = copula.getMarginal(indices) print("margins=", margins) print("margins PDF=", margins.computePDF(Point(2, 0.25))) print("margins CDF= %.12g" % margins.computeCDF(Point(2, 0.25))) quantile = margins.computeQuantile(0.95) print("margins quantile=", quantile) print("margins CDF(quantile)= %.12g" % margins.computeCDF(quantile)) print("margins realization=", margins.getRealization()) except: import sys print("t_FarlieGumbelMorgensternCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FaureSequence_std.expout000066400000000000000000002001401307543307100231160ustar00rootroot00000000000000class=FaureSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 modulus=17 seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235,0.0588235],[0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647,0.117647],[0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471,0.176471],[0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294,0.235294],[0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118,0.294118],[0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941,0.352941],[0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765,0.411765],[0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588,0.470588],[0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412,0.529412],[0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235,0.588235]] class=Point name=Unnamed dimension=2 values=[0.5,0.5] class=Point name=Unnamed dimension=2 values=[0.25,0.75] class=Point name=Unnamed dimension=2 values=[0.75,0.25] class=Point name=Unnamed dimension=2 values=[0.125,0.625] class=Point name=Unnamed dimension=2 values=[0.625,0.125] class=Point name=Unnamed dimension=2 values=[0.375,0.375] class=Point name=Unnamed dimension=2 values=[0.875,0.875] class=Point name=Unnamed dimension=2 values=[0.0625,0.9375] class=Point name=Unnamed dimension=2 values=[0.5625,0.4375] class=Point name=Unnamed dimension=2 values=[0.3125,0.1875] class=Point name=Unnamed dimension=2 values=[0.8125,0.6875] class=Point name=Unnamed dimension=2 values=[0.1875,0.3125] class=Point name=Unnamed dimension=2 values=[0.6875,0.8125] class=Point name=Unnamed dimension=2 values=[0.4375,0.5625] class=Point name=Unnamed dimension=2 values=[0.9375,0.0625] class=Point name=Unnamed dimension=2 values=[0.03125,0.53125] class=Point name=Unnamed dimension=2 values=[0.53125,0.03125] class=Point name=Unnamed dimension=2 values=[0.28125,0.28125] class=Point name=Unnamed dimension=2 values=[0.78125,0.78125] class=Point name=Unnamed dimension=2 values=[0.15625,0.15625] class=Point name=Unnamed dimension=2 values=[0.65625,0.65625] class=Point name=Unnamed dimension=2 values=[0.40625,0.90625] class=Point name=Unnamed dimension=2 values=[0.90625,0.40625] class=Point name=Unnamed dimension=2 values=[0.09375,0.46875] class=Point name=Unnamed dimension=2 values=[0.59375,0.96875] class=Point name=Unnamed dimension=2 values=[0.34375,0.71875] class=Point name=Unnamed dimension=2 values=[0.84375,0.21875] class=Point name=Unnamed dimension=2 values=[0.21875,0.84375] class=Point name=Unnamed dimension=2 values=[0.71875,0.34375] class=Point name=Unnamed dimension=2 values=[0.46875,0.09375] class=Point name=Unnamed dimension=2 values=[0.96875,0.59375] class=Point name=Unnamed dimension=2 values=[0.015625,0.796875] class=Point name=Unnamed dimension=2 values=[0.515625,0.296875] class=Point name=Unnamed dimension=2 values=[0.265625,0.046875] class=Point name=Unnamed dimension=2 values=[0.765625,0.546875] class=Point name=Unnamed dimension=2 values=[0.140625,0.421875] class=Point name=Unnamed dimension=2 values=[0.640625,0.921875] class=Point name=Unnamed dimension=2 values=[0.390625,0.671875] class=Point name=Unnamed dimension=2 values=[0.890625,0.171875] class=Point name=Unnamed dimension=2 values=[0.078125,0.234375] class=Point name=Unnamed dimension=2 values=[0.578125,0.734375] class=Point name=Unnamed dimension=2 values=[0.328125,0.984375] class=Point name=Unnamed dimension=2 values=[0.828125,0.484375] class=Point name=Unnamed dimension=2 values=[0.203125,0.609375] class=Point name=Unnamed dimension=2 values=[0.703125,0.109375] class=Point name=Unnamed dimension=2 values=[0.453125,0.359375] class=Point name=Unnamed dimension=2 values=[0.953125,0.859375] class=Point name=Unnamed dimension=2 values=[0.046875,0.265625] class=Point name=Unnamed dimension=2 values=[0.546875,0.765625] class=Point name=Unnamed dimension=2 values=[0.296875,0.515625] class=Point name=Unnamed dimension=2 values=[0.796875,0.015625] class=Point name=Unnamed dimension=2 values=[0.171875,0.890625] class=Point name=Unnamed dimension=2 values=[0.671875,0.390625] class=Point name=Unnamed dimension=2 values=[0.421875,0.140625] class=Point name=Unnamed dimension=2 values=[0.921875,0.640625] class=Point name=Unnamed dimension=2 values=[0.109375,0.703125] class=Point name=Unnamed dimension=2 values=[0.609375,0.203125] class=Point name=Unnamed dimension=2 values=[0.359375,0.453125] class=Point name=Unnamed dimension=2 values=[0.859375,0.953125] class=Point name=Unnamed dimension=2 values=[0.234375,0.078125] class=Point name=Unnamed dimension=2 values=[0.734375,0.578125] class=Point name=Unnamed dimension=2 values=[0.484375,0.828125] class=Point name=Unnamed dimension=2 values=[0.984375,0.328125] class=Point name=Unnamed dimension=2 values=[0.0078125,0.664062] class=Point name=Unnamed dimension=2 values=[0.507812,0.164062] class=Point name=Unnamed dimension=2 values=[0.257812,0.414062] class=Point name=Unnamed dimension=2 values=[0.757812,0.914062] class=Point name=Unnamed dimension=2 values=[0.132812,0.0390625] class=Point name=Unnamed dimension=2 values=[0.632812,0.539062] class=Point name=Unnamed dimension=2 values=[0.382812,0.789062] class=Point name=Unnamed dimension=2 values=[0.882812,0.289062] class=Point name=Unnamed dimension=2 values=[0.0703125,0.351562] class=Point name=Unnamed dimension=2 values=[0.570312,0.851562] class=Point name=Unnamed dimension=2 values=[0.320312,0.601562] class=Point name=Unnamed dimension=2 values=[0.820312,0.101562] class=Point name=Unnamed dimension=2 values=[0.195312,0.976562] class=Point name=Unnamed dimension=2 values=[0.695312,0.476562] class=Point name=Unnamed dimension=2 values=[0.445312,0.226562] class=Point name=Unnamed dimension=2 values=[0.945312,0.726562] class=Point name=Unnamed dimension=2 values=[0.0390625,0.132812] class=Point name=Unnamed dimension=2 values=[0.539062,0.632812] class=Point name=Unnamed dimension=2 values=[0.289062,0.882812] class=Point name=Unnamed dimension=2 values=[0.789062,0.382812] class=Point name=Unnamed dimension=2 values=[0.164062,0.507812] class=Point name=Unnamed dimension=2 values=[0.664062,0.0078125] class=Point name=Unnamed dimension=2 values=[0.414062,0.257812] class=Point name=Unnamed dimension=2 values=[0.914062,0.757812] class=Point name=Unnamed dimension=2 values=[0.101562,0.820312] class=Point name=Unnamed dimension=2 values=[0.601562,0.320312] class=Point name=Unnamed dimension=2 values=[0.351562,0.0703125] class=Point name=Unnamed dimension=2 values=[0.851562,0.570312] class=Point name=Unnamed dimension=2 values=[0.226562,0.445312] class=Point name=Unnamed dimension=2 values=[0.726562,0.945312] class=Point name=Unnamed dimension=2 values=[0.476562,0.695312] class=Point name=Unnamed dimension=2 values=[0.976562,0.195312] class=Point name=Unnamed dimension=2 values=[0.0234375,0.398438] class=Point name=Unnamed dimension=2 values=[0.523438,0.898438] class=Point name=Unnamed dimension=2 values=[0.273438,0.648438] class=Point name=Unnamed dimension=2 values=[0.773438,0.148438] class=Point name=Unnamed dimension=2 values=[0.148438,0.773438] class=Point name=Unnamed dimension=2 values=[0.648438,0.273438] class=Point name=Unnamed dimension=2 values=[0.398438,0.0234375] class=Point name=Unnamed dimension=2 values=[0.898438,0.523438] class=Point name=Unnamed dimension=2 values=[0.0859375,0.585938] class=Point name=Unnamed dimension=2 values=[0.585938,0.0859375] class=Point name=Unnamed dimension=2 values=[0.335938,0.335938] class=Point name=Unnamed dimension=2 values=[0.835938,0.835938] class=Point name=Unnamed dimension=2 values=[0.210938,0.210938] class=Point name=Unnamed dimension=2 values=[0.710938,0.710938] class=Point name=Unnamed dimension=2 values=[0.460938,0.960938] class=Point name=Unnamed dimension=2 values=[0.960938,0.460938] class=Point name=Unnamed dimension=2 values=[0.0546875,0.929688] class=Point name=Unnamed dimension=2 values=[0.554688,0.429688] class=Point name=Unnamed dimension=2 values=[0.304688,0.179688] class=Point name=Unnamed dimension=2 values=[0.804688,0.679688] class=Point name=Unnamed dimension=2 values=[0.179688,0.304688] class=Point name=Unnamed dimension=2 values=[0.679688,0.804688] class=Point name=Unnamed dimension=2 values=[0.429688,0.554688] class=Point name=Unnamed dimension=2 values=[0.929688,0.0546875] class=Point name=Unnamed dimension=2 values=[0.117188,0.117188] class=Point name=Unnamed dimension=2 values=[0.617188,0.617188] class=Point name=Unnamed dimension=2 values=[0.367188,0.867188] class=Point name=Unnamed dimension=2 values=[0.867188,0.367188] class=Point name=Unnamed dimension=2 values=[0.242188,0.742188] class=Point name=Unnamed dimension=2 values=[0.742188,0.242188] class=Point name=Unnamed dimension=2 values=[0.492188,0.492188] class=Point name=Unnamed dimension=2 values=[0.992188,0.992188] class=Point name=Unnamed dimension=2 values=[0.00390625,0.996094] class=Point name=Unnamed dimension=2 values=[0.503906,0.496094] class=Point name=Unnamed dimension=2 values=[0.253906,0.246094] class=Point name=Unnamed dimension=2 values=[0.753906,0.746094] class=Point name=Unnamed dimension=2 values=[0.128906,0.371094] class=Point name=Unnamed dimension=2 values=[0.628906,0.871094] class=Point name=Unnamed dimension=2 values=[0.378906,0.621094] class=Point name=Unnamed dimension=2 values=[0.878906,0.121094] class=Point name=Unnamed dimension=2 values=[0.0664062,0.0585938] class=Point name=Unnamed dimension=2 values=[0.566406,0.558594] class=Point name=Unnamed dimension=2 values=[0.316406,0.808594] class=Point name=Unnamed dimension=2 values=[0.816406,0.308594] class=Point name=Unnamed dimension=2 values=[0.191406,0.683594] class=Point name=Unnamed dimension=2 values=[0.691406,0.183594] class=Point name=Unnamed dimension=2 values=[0.441406,0.433594] class=Point name=Unnamed dimension=2 values=[0.941406,0.933594] class=Point name=Unnamed dimension=2 values=[0.0351562,0.464844] class=Point name=Unnamed dimension=2 values=[0.535156,0.964844] class=Point name=Unnamed dimension=2 values=[0.285156,0.714844] class=Point name=Unnamed dimension=2 values=[0.785156,0.214844] class=Point name=Unnamed dimension=2 values=[0.160156,0.839844] class=Point name=Unnamed dimension=2 values=[0.660156,0.339844] class=Point name=Unnamed dimension=2 values=[0.410156,0.0898438] class=Point name=Unnamed dimension=2 values=[0.910156,0.589844] class=Point name=Unnamed dimension=2 values=[0.0976562,0.527344] class=Point name=Unnamed dimension=2 values=[0.597656,0.0273438] class=Point name=Unnamed dimension=2 values=[0.347656,0.277344] class=Point name=Unnamed dimension=2 values=[0.847656,0.777344] class=Point name=Unnamed dimension=2 values=[0.222656,0.152344] class=Point name=Unnamed dimension=2 values=[0.722656,0.652344] class=Point name=Unnamed dimension=2 values=[0.472656,0.902344] class=Point name=Unnamed dimension=2 values=[0.972656,0.402344] class=Point name=Unnamed dimension=2 values=[0.0195312,0.199219] class=Point name=Unnamed dimension=2 values=[0.519531,0.699219] class=Point name=Unnamed dimension=2 values=[0.269531,0.949219] class=Point name=Unnamed dimension=2 values=[0.769531,0.449219] class=Point name=Unnamed dimension=2 values=[0.144531,0.574219] class=Point name=Unnamed dimension=2 values=[0.644531,0.0742188] class=Point name=Unnamed dimension=2 values=[0.394531,0.324219] class=Point name=Unnamed dimension=2 values=[0.894531,0.824219] class=Point name=Unnamed dimension=2 values=[0.0820312,0.761719] class=Point name=Unnamed dimension=2 values=[0.582031,0.261719] class=Point name=Unnamed dimension=2 values=[0.332031,0.0117188] class=Point name=Unnamed dimension=2 values=[0.832031,0.511719] class=Point name=Unnamed dimension=2 values=[0.207031,0.386719] class=Point name=Unnamed dimension=2 values=[0.707031,0.886719] class=Point name=Unnamed dimension=2 values=[0.457031,0.636719] class=Point name=Unnamed dimension=2 values=[0.957031,0.136719] class=Point name=Unnamed dimension=2 values=[0.0507812,0.730469] class=Point name=Unnamed dimension=2 values=[0.550781,0.230469] class=Point name=Unnamed dimension=2 values=[0.300781,0.480469] class=Point name=Unnamed dimension=2 values=[0.800781,0.980469] class=Point name=Unnamed dimension=2 values=[0.175781,0.105469] class=Point name=Unnamed dimension=2 values=[0.675781,0.605469] class=Point name=Unnamed dimension=2 values=[0.425781,0.855469] class=Point name=Unnamed dimension=2 values=[0.925781,0.355469] class=Point name=Unnamed dimension=2 values=[0.113281,0.292969] class=Point name=Unnamed dimension=2 values=[0.613281,0.792969] class=Point name=Unnamed dimension=2 values=[0.363281,0.542969] class=Point name=Unnamed dimension=2 values=[0.863281,0.0429688] class=Point name=Unnamed dimension=2 values=[0.238281,0.917969] class=Point name=Unnamed dimension=2 values=[0.738281,0.417969] class=Point name=Unnamed dimension=2 values=[0.488281,0.167969] class=Point name=Unnamed dimension=2 values=[0.988281,0.667969] class=Point name=Unnamed dimension=2 values=[0.0117188,0.332031] class=Point name=Unnamed dimension=2 values=[0.511719,0.832031] class=Point name=Unnamed dimension=2 values=[0.261719,0.582031] class=Point name=Unnamed dimension=2 values=[0.761719,0.0820312] class=Point name=Unnamed dimension=2 values=[0.136719,0.957031] class=Point name=Unnamed dimension=2 values=[0.636719,0.457031] class=Point name=Unnamed dimension=2 values=[0.386719,0.207031] class=Point name=Unnamed dimension=2 values=[0.886719,0.707031] class=Point name=Unnamed dimension=2 values=[0.0742188,0.644531] class=Point name=Unnamed dimension=2 values=[0.574219,0.144531] class=Point name=Unnamed dimension=2 values=[0.324219,0.394531] class=Point name=Unnamed dimension=2 values=[0.824219,0.894531] class=Point name=Unnamed dimension=2 values=[0.199219,0.0195312] class=Point name=Unnamed dimension=2 values=[0.699219,0.519531] class=Point name=Unnamed dimension=2 values=[0.449219,0.769531] class=Point name=Unnamed dimension=2 values=[0.949219,0.269531] class=Point name=Unnamed dimension=2 values=[0.0429688,0.863281] class=Point name=Unnamed dimension=2 values=[0.542969,0.363281] class=Point name=Unnamed dimension=2 values=[0.292969,0.113281] class=Point name=Unnamed dimension=2 values=[0.792969,0.613281] class=Point name=Unnamed dimension=2 values=[0.167969,0.488281] class=Point name=Unnamed dimension=2 values=[0.667969,0.988281] class=Point name=Unnamed dimension=2 values=[0.417969,0.738281] class=Point name=Unnamed dimension=2 values=[0.917969,0.238281] class=Point name=Unnamed dimension=2 values=[0.105469,0.175781] class=Point name=Unnamed dimension=2 values=[0.605469,0.675781] class=Point name=Unnamed dimension=2 values=[0.355469,0.925781] class=Point name=Unnamed dimension=2 values=[0.855469,0.425781] class=Point name=Unnamed dimension=2 values=[0.230469,0.550781] class=Point name=Unnamed dimension=2 values=[0.730469,0.0507812] class=Point name=Unnamed dimension=2 values=[0.480469,0.300781] class=Point name=Unnamed dimension=2 values=[0.980469,0.800781] class=Point name=Unnamed dimension=2 values=[0.0273438,0.597656] class=Point name=Unnamed dimension=2 values=[0.527344,0.0976562] class=Point name=Unnamed dimension=2 values=[0.277344,0.347656] class=Point name=Unnamed dimension=2 values=[0.777344,0.847656] class=Point name=Unnamed dimension=2 values=[0.152344,0.222656] class=Point name=Unnamed dimension=2 values=[0.652344,0.722656] class=Point name=Unnamed dimension=2 values=[0.402344,0.972656] class=Point name=Unnamed dimension=2 values=[0.902344,0.472656] class=Point name=Unnamed dimension=2 values=[0.0898438,0.410156] class=Point name=Unnamed dimension=2 values=[0.589844,0.910156] class=Point name=Unnamed dimension=2 values=[0.339844,0.660156] class=Point name=Unnamed dimension=2 values=[0.839844,0.160156] class=Point name=Unnamed dimension=2 values=[0.214844,0.785156] class=Point name=Unnamed dimension=2 values=[0.714844,0.285156] class=Point name=Unnamed dimension=2 values=[0.464844,0.0351562] class=Point name=Unnamed dimension=2 values=[0.964844,0.535156] class=Point name=Unnamed dimension=2 values=[0.0585938,0.0664062] class=Point name=Unnamed dimension=2 values=[0.558594,0.566406] class=Point name=Unnamed dimension=2 values=[0.308594,0.816406] class=Point name=Unnamed dimension=2 values=[0.808594,0.316406] class=Point name=Unnamed dimension=2 values=[0.183594,0.691406] class=Point name=Unnamed dimension=2 values=[0.683594,0.191406] class=Point name=Unnamed dimension=2 values=[0.433594,0.441406] class=Point name=Unnamed dimension=2 values=[0.933594,0.941406] class=Point name=Unnamed dimension=2 values=[0.121094,0.878906] class=Point name=Unnamed dimension=2 values=[0.621094,0.378906] class=Point name=Unnamed dimension=2 values=[0.371094,0.128906] class=Point name=Unnamed dimension=2 values=[0.871094,0.628906] class=Point name=Unnamed dimension=2 values=[0.246094,0.253906] class=Point name=Unnamed dimension=2 values=[0.746094,0.753906] class=Point name=Unnamed dimension=2 values=[0.496094,0.503906] class=Point name=Unnamed dimension=2 values=[0.996094,0.00390625] class=Point name=Unnamed dimension=2 values=[0.00195312,0.501953] class=Point name=Unnamed dimension=2 values=[0.501953,0.00195312] class=Point name=Unnamed dimension=2 values=[0.251953,0.251953] class=Point name=Unnamed dimension=2 values=[0.751953,0.751953] class=Point name=Unnamed dimension=2 values=[0.126953,0.126953] class=Point name=Unnamed dimension=2 values=[0.626953,0.626953] class=Point name=Unnamed dimension=2 values=[0.376953,0.876953] class=Point name=Unnamed dimension=2 values=[0.876953,0.376953] class=Point name=Unnamed dimension=2 values=[0.0644531,0.439453] class=Point name=Unnamed dimension=2 values=[0.564453,0.939453] class=Point name=Unnamed dimension=2 values=[0.314453,0.689453] class=Point name=Unnamed dimension=2 values=[0.814453,0.189453] class=Point name=Unnamed dimension=2 values=[0.189453,0.814453] class=Point name=Unnamed dimension=2 values=[0.689453,0.314453] class=Point name=Unnamed dimension=2 values=[0.439453,0.0644531] class=Point name=Unnamed dimension=2 values=[0.939453,0.564453] class=Point name=Unnamed dimension=2 values=[0.0332031,0.0332031] class=Point name=Unnamed dimension=2 values=[0.533203,0.533203] class=Point name=Unnamed dimension=2 values=[0.283203,0.783203] class=Point name=Unnamed dimension=2 values=[0.783203,0.283203] class=Point name=Unnamed dimension=2 values=[0.158203,0.658203] class=Point name=Unnamed dimension=2 values=[0.658203,0.158203] class=Point name=Unnamed dimension=2 values=[0.408203,0.408203] class=Point name=Unnamed dimension=2 values=[0.908203,0.908203] class=Point name=Unnamed dimension=2 values=[0.0957031,0.970703] class=Point name=Unnamed dimension=2 values=[0.595703,0.470703] class=Point name=Unnamed dimension=2 values=[0.345703,0.220703] class=Point name=Unnamed dimension=2 values=[0.845703,0.720703] class=Point name=Unnamed dimension=2 values=[0.220703,0.345703] class=Point name=Unnamed dimension=2 values=[0.720703,0.845703] class=Point name=Unnamed dimension=2 values=[0.470703,0.595703] class=Point name=Unnamed dimension=2 values=[0.970703,0.0957031] class=Point name=Unnamed dimension=2 values=[0.0175781,0.298828] class=Point name=Unnamed dimension=2 values=[0.517578,0.798828] class=Point name=Unnamed dimension=2 values=[0.267578,0.548828] class=Point name=Unnamed dimension=2 values=[0.767578,0.0488281] class=Point name=Unnamed dimension=2 values=[0.142578,0.923828] class=Point name=Unnamed dimension=2 values=[0.642578,0.423828] class=Point name=Unnamed dimension=2 values=[0.392578,0.173828] class=Point name=Unnamed dimension=2 values=[0.892578,0.673828] class=Point name=Unnamed dimension=2 values=[0.0800781,0.736328] class=Point name=Unnamed dimension=2 values=[0.580078,0.236328] class=Point name=Unnamed dimension=2 values=[0.330078,0.486328] class=Point name=Unnamed dimension=2 values=[0.830078,0.986328] class=Point name=Unnamed dimension=2 values=[0.205078,0.111328] class=Point name=Unnamed dimension=2 values=[0.705078,0.611328] class=Point name=Unnamed dimension=2 values=[0.455078,0.861328] class=Point name=Unnamed dimension=2 values=[0.955078,0.361328] class=Point name=Unnamed dimension=2 values=[0.0488281,0.767578] class=Point name=Unnamed dimension=2 values=[0.548828,0.267578] class=Point name=Unnamed dimension=2 values=[0.298828,0.0175781] class=Point name=Unnamed dimension=2 values=[0.798828,0.517578] class=Point name=Unnamed dimension=2 values=[0.173828,0.392578] class=Point name=Unnamed dimension=2 values=[0.673828,0.892578] class=Point name=Unnamed dimension=2 values=[0.423828,0.642578] class=Point name=Unnamed dimension=2 values=[0.923828,0.142578] class=Point name=Unnamed dimension=2 values=[0.111328,0.205078] class=Point name=Unnamed dimension=2 values=[0.611328,0.705078] class=Point name=Unnamed dimension=2 values=[0.361328,0.955078] class=Point name=Unnamed dimension=2 values=[0.861328,0.455078] class=Point name=Unnamed dimension=2 values=[0.236328,0.580078] class=Point name=Unnamed dimension=2 values=[0.736328,0.0800781] class=Point name=Unnamed dimension=2 values=[0.486328,0.330078] class=Point name=Unnamed dimension=2 values=[0.986328,0.830078] class=Point name=Unnamed dimension=2 values=[0.00976562,0.166016] class=Point name=Unnamed dimension=2 values=[0.509766,0.666016] class=Point name=Unnamed dimension=2 values=[0.259766,0.916016] class=Point name=Unnamed dimension=2 values=[0.759766,0.416016] class=Point name=Unnamed dimension=2 values=[0.134766,0.541016] class=Point name=Unnamed dimension=2 values=[0.634766,0.0410156] class=Point name=Unnamed dimension=2 values=[0.384766,0.291016] class=Point name=Unnamed dimension=2 values=[0.884766,0.791016] class=Point name=Unnamed dimension=2 values=[0.0722656,0.853516] class=Point name=Unnamed dimension=2 values=[0.572266,0.353516] class=Point name=Unnamed dimension=2 values=[0.322266,0.103516] class=Point name=Unnamed dimension=2 values=[0.822266,0.603516] class=Point name=Unnamed dimension=2 values=[0.197266,0.478516] class=Point name=Unnamed dimension=2 values=[0.697266,0.978516] class=Point name=Unnamed dimension=2 values=[0.447266,0.728516] class=Point name=Unnamed dimension=2 values=[0.947266,0.228516] class=Point name=Unnamed dimension=2 values=[0.0410156,0.634766] class=Point name=Unnamed dimension=2 values=[0.541016,0.134766] class=Point name=Unnamed dimension=2 values=[0.291016,0.384766] class=Point name=Unnamed dimension=2 values=[0.791016,0.884766] class=Point name=Unnamed dimension=2 values=[0.166016,0.00976562] class=Point name=Unnamed dimension=2 values=[0.666016,0.509766] class=Point name=Unnamed dimension=2 values=[0.416016,0.759766] class=Point name=Unnamed dimension=2 values=[0.916016,0.259766] class=Point name=Unnamed dimension=2 values=[0.103516,0.322266] class=Point name=Unnamed dimension=2 values=[0.603516,0.822266] class=Point name=Unnamed dimension=2 values=[0.353516,0.572266] class=Point name=Unnamed dimension=2 values=[0.853516,0.0722656] class=Point name=Unnamed dimension=2 values=[0.228516,0.947266] class=Point name=Unnamed dimension=2 values=[0.728516,0.447266] class=Point name=Unnamed dimension=2 values=[0.478516,0.197266] class=Point name=Unnamed dimension=2 values=[0.978516,0.697266] class=Point name=Unnamed dimension=2 values=[0.0253906,0.900391] class=Point name=Unnamed dimension=2 values=[0.525391,0.400391] class=Point name=Unnamed dimension=2 values=[0.275391,0.150391] class=Point name=Unnamed dimension=2 values=[0.775391,0.650391] class=Point name=Unnamed dimension=2 values=[0.150391,0.275391] class=Point name=Unnamed dimension=2 values=[0.650391,0.775391] class=Point name=Unnamed dimension=2 values=[0.400391,0.525391] class=Point name=Unnamed dimension=2 values=[0.900391,0.0253906] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0878906] class=Point name=Unnamed dimension=2 values=[0.587891,0.587891] class=Point name=Unnamed dimension=2 values=[0.337891,0.837891] class=Point name=Unnamed dimension=2 values=[0.837891,0.337891] class=Point name=Unnamed dimension=2 values=[0.212891,0.712891] class=Point name=Unnamed dimension=2 values=[0.712891,0.212891] class=Point name=Unnamed dimension=2 values=[0.462891,0.462891] class=Point name=Unnamed dimension=2 values=[0.962891,0.962891] class=Point name=Unnamed dimension=2 values=[0.0566406,0.431641] class=Point name=Unnamed dimension=2 values=[0.556641,0.931641] class=Point name=Unnamed dimension=2 values=[0.306641,0.681641] class=Point name=Unnamed dimension=2 values=[0.806641,0.181641] class=Point name=Unnamed dimension=2 values=[0.181641,0.806641] class=Point name=Unnamed dimension=2 values=[0.681641,0.306641] class=Point name=Unnamed dimension=2 values=[0.431641,0.0566406] class=Point name=Unnamed dimension=2 values=[0.931641,0.556641] class=Point name=Unnamed dimension=2 values=[0.119141,0.619141] class=Point name=Unnamed dimension=2 values=[0.619141,0.119141] class=Point name=Unnamed dimension=2 values=[0.369141,0.369141] class=Point name=Unnamed dimension=2 values=[0.869141,0.869141] class=Point name=Unnamed dimension=2 values=[0.244141,0.244141] class=Point name=Unnamed dimension=2 values=[0.744141,0.744141] class=Point name=Unnamed dimension=2 values=[0.494141,0.994141] class=Point name=Unnamed dimension=2 values=[0.994141,0.494141] class=Point name=Unnamed dimension=2 values=[0.00585938,0.498047] class=Point name=Unnamed dimension=2 values=[0.505859,0.998047] class=Point name=Unnamed dimension=2 values=[0.255859,0.748047] class=Point name=Unnamed dimension=2 values=[0.755859,0.248047] class=Point name=Unnamed dimension=2 values=[0.130859,0.873047] class=Point name=Unnamed dimension=2 values=[0.630859,0.373047] class=Point name=Unnamed dimension=2 values=[0.380859,0.123047] class=Point name=Unnamed dimension=2 values=[0.880859,0.623047] class=Point name=Unnamed dimension=2 values=[0.0683594,0.560547] class=Point name=Unnamed dimension=2 values=[0.568359,0.0605469] class=Point name=Unnamed dimension=2 values=[0.318359,0.310547] class=Point name=Unnamed dimension=2 values=[0.818359,0.810547] class=Point name=Unnamed dimension=2 values=[0.193359,0.185547] class=Point name=Unnamed dimension=2 values=[0.693359,0.685547] class=Point name=Unnamed dimension=2 values=[0.443359,0.935547] class=Point name=Unnamed dimension=2 values=[0.943359,0.435547] class=Point name=Unnamed dimension=2 values=[0.0371094,0.966797] class=Point name=Unnamed dimension=2 values=[0.537109,0.466797] class=Point name=Unnamed dimension=2 values=[0.287109,0.216797] class=Point name=Unnamed dimension=2 values=[0.787109,0.716797] class=Point name=Unnamed dimension=2 values=[0.162109,0.341797] class=Point name=Unnamed dimension=2 values=[0.662109,0.841797] class=Point name=Unnamed dimension=2 values=[0.412109,0.591797] class=Point name=Unnamed dimension=2 values=[0.912109,0.0917969] class=Point name=Unnamed dimension=2 values=[0.0996094,0.0292969] class=Point name=Unnamed dimension=2 values=[0.599609,0.529297] class=Point name=Unnamed dimension=2 values=[0.349609,0.779297] class=Point name=Unnamed dimension=2 values=[0.849609,0.279297] class=Point name=Unnamed dimension=2 values=[0.224609,0.654297] class=Point name=Unnamed dimension=2 values=[0.724609,0.154297] class=Point name=Unnamed dimension=2 values=[0.474609,0.404297] class=Point name=Unnamed dimension=2 values=[0.974609,0.904297] class=Point name=Unnamed dimension=2 values=[0.0214844,0.701172] class=Point name=Unnamed dimension=2 values=[0.521484,0.201172] class=Point name=Unnamed dimension=2 values=[0.271484,0.451172] class=Point name=Unnamed dimension=2 values=[0.771484,0.951172] class=Point name=Unnamed dimension=2 values=[0.146484,0.0761719] class=Point name=Unnamed dimension=2 values=[0.646484,0.576172] class=Point name=Unnamed dimension=2 values=[0.396484,0.826172] class=Point name=Unnamed dimension=2 values=[0.896484,0.326172] class=Point name=Unnamed dimension=2 values=[0.0839844,0.263672] class=Point name=Unnamed dimension=2 values=[0.583984,0.763672] class=Point name=Unnamed dimension=2 values=[0.333984,0.513672] class=Point name=Unnamed dimension=2 values=[0.833984,0.0136719] class=Point name=Unnamed dimension=2 values=[0.208984,0.888672] class=Point name=Unnamed dimension=2 values=[0.708984,0.388672] class=Point name=Unnamed dimension=2 values=[0.458984,0.138672] class=Point name=Unnamed dimension=2 values=[0.958984,0.638672] class=Point name=Unnamed dimension=2 values=[0.0527344,0.232422] class=Point name=Unnamed dimension=2 values=[0.552734,0.732422] class=Point name=Unnamed dimension=2 values=[0.302734,0.982422] class=Point name=Unnamed dimension=2 values=[0.802734,0.482422] class=Point name=Unnamed dimension=2 values=[0.177734,0.607422] class=Point name=Unnamed dimension=2 values=[0.677734,0.107422] class=Point name=Unnamed dimension=2 values=[0.427734,0.357422] class=Point name=Unnamed dimension=2 values=[0.927734,0.857422] class=Point name=Unnamed dimension=2 values=[0.115234,0.794922] class=Point name=Unnamed dimension=2 values=[0.615234,0.294922] class=Point name=Unnamed dimension=2 values=[0.365234,0.0449219] class=Point name=Unnamed dimension=2 values=[0.865234,0.544922] class=Point name=Unnamed dimension=2 values=[0.240234,0.419922] class=Point name=Unnamed dimension=2 values=[0.740234,0.919922] class=Point name=Unnamed dimension=2 values=[0.490234,0.669922] class=Point name=Unnamed dimension=2 values=[0.990234,0.169922] class=Point name=Unnamed dimension=2 values=[0.0136719,0.833984] class=Point name=Unnamed dimension=2 values=[0.513672,0.333984] class=Point name=Unnamed dimension=2 values=[0.263672,0.0839844] class=Point name=Unnamed dimension=2 values=[0.763672,0.583984] class=Point name=Unnamed dimension=2 values=[0.138672,0.458984] class=Point name=Unnamed dimension=2 values=[0.638672,0.958984] class=Point name=Unnamed dimension=2 values=[0.388672,0.708984] class=Point name=Unnamed dimension=2 values=[0.888672,0.208984] class=Point name=Unnamed dimension=2 values=[0.0761719,0.146484] class=Point name=Unnamed dimension=2 values=[0.576172,0.646484] class=Point name=Unnamed dimension=2 values=[0.326172,0.896484] class=Point name=Unnamed dimension=2 values=[0.826172,0.396484] class=Point name=Unnamed dimension=2 values=[0.201172,0.521484] class=Point name=Unnamed dimension=2 values=[0.701172,0.0214844] class=Point name=Unnamed dimension=2 values=[0.451172,0.271484] class=Point name=Unnamed dimension=2 values=[0.951172,0.771484] class=Point name=Unnamed dimension=2 values=[0.0449219,0.365234] class=Point name=Unnamed dimension=2 values=[0.544922,0.865234] class=Point name=Unnamed dimension=2 values=[0.294922,0.615234] class=Point name=Unnamed dimension=2 values=[0.794922,0.115234] class=Point name=Unnamed dimension=2 values=[0.169922,0.990234] class=Point name=Unnamed dimension=2 values=[0.669922,0.490234] class=Point name=Unnamed dimension=2 values=[0.419922,0.240234] class=Point name=Unnamed dimension=2 values=[0.919922,0.740234] class=Point name=Unnamed dimension=2 values=[0.107422,0.677734] class=Point name=Unnamed dimension=2 values=[0.607422,0.177734] class=Point name=Unnamed dimension=2 values=[0.357422,0.427734] class=Point name=Unnamed dimension=2 values=[0.857422,0.927734] class=Point name=Unnamed dimension=2 values=[0.232422,0.0527344] class=Point name=Unnamed dimension=2 values=[0.732422,0.552734] class=Point name=Unnamed dimension=2 values=[0.482422,0.802734] class=Point name=Unnamed dimension=2 values=[0.982422,0.302734] class=Point name=Unnamed dimension=2 values=[0.0292969,0.0996094] class=Point name=Unnamed dimension=2 values=[0.529297,0.599609] class=Point name=Unnamed dimension=2 values=[0.279297,0.849609] class=Point name=Unnamed dimension=2 values=[0.779297,0.349609] class=Point name=Unnamed dimension=2 values=[0.154297,0.724609] class=Point name=Unnamed dimension=2 values=[0.654297,0.224609] class=Point name=Unnamed dimension=2 values=[0.404297,0.474609] class=Point name=Unnamed dimension=2 values=[0.904297,0.974609] class=Point name=Unnamed dimension=2 values=[0.0917969,0.912109] class=Point name=Unnamed dimension=2 values=[0.591797,0.412109] class=Point name=Unnamed dimension=2 values=[0.341797,0.162109] class=Point name=Unnamed dimension=2 values=[0.841797,0.662109] class=Point name=Unnamed dimension=2 values=[0.216797,0.287109] class=Point name=Unnamed dimension=2 values=[0.716797,0.787109] class=Point name=Unnamed dimension=2 values=[0.466797,0.537109] class=Point name=Unnamed dimension=2 values=[0.966797,0.0371094] class=Point name=Unnamed dimension=2 values=[0.0605469,0.568359] class=Point name=Unnamed dimension=2 values=[0.560547,0.0683594] class=Point name=Unnamed dimension=2 values=[0.310547,0.318359] class=Point name=Unnamed dimension=2 values=[0.810547,0.818359] class=Point name=Unnamed dimension=2 values=[0.185547,0.193359] class=Point name=Unnamed dimension=2 values=[0.685547,0.693359] class=Point name=Unnamed dimension=2 values=[0.435547,0.943359] class=Point name=Unnamed dimension=2 values=[0.935547,0.443359] class=Point name=Unnamed dimension=2 values=[0.123047,0.380859] class=Point name=Unnamed dimension=2 values=[0.623047,0.880859] class=Point name=Unnamed dimension=2 values=[0.373047,0.630859] class=Point name=Unnamed dimension=2 values=[0.873047,0.130859] class=Point name=Unnamed dimension=2 values=[0.248047,0.755859] class=Point name=Unnamed dimension=2 values=[0.748047,0.255859] class=Point name=Unnamed dimension=2 values=[0.498047,0.00585938] class=Point name=Unnamed dimension=2 values=[0.998047,0.505859] class=Point name=Unnamed dimension=2 values=[0.000976562,0.75293] class=Point name=Unnamed dimension=2 values=[0.500977,0.25293] class=Point name=Unnamed dimension=2 values=[0.250977,0.00292969] class=Point name=Unnamed dimension=2 values=[0.750977,0.50293] class=Point name=Unnamed dimension=2 values=[0.125977,0.37793] class=Point name=Unnamed dimension=2 values=[0.625977,0.87793] class=Point name=Unnamed dimension=2 values=[0.375977,0.62793] class=Point name=Unnamed dimension=2 values=[0.875977,0.12793] class=Point name=Unnamed dimension=2 values=[0.0634766,0.19043] class=Point name=Unnamed dimension=2 values=[0.563477,0.69043] class=Point name=Unnamed dimension=2 values=[0.313477,0.94043] class=Point name=Unnamed dimension=2 values=[0.813477,0.44043] class=Point name=Unnamed dimension=2 values=[0.188477,0.56543] class=Point name=Unnamed dimension=2 values=[0.688477,0.0654297] class=Point name=Unnamed dimension=2 values=[0.438477,0.31543] class=Point name=Unnamed dimension=2 values=[0.938477,0.81543] class=Point name=Unnamed dimension=2 values=[0.0322266,0.28418] class=Point name=Unnamed dimension=2 values=[0.532227,0.78418] class=Point name=Unnamed dimension=2 values=[0.282227,0.53418] class=Point name=Unnamed dimension=2 values=[0.782227,0.0341797] class=Point name=Unnamed dimension=2 values=[0.157227,0.90918] class=Point name=Unnamed dimension=2 values=[0.657227,0.40918] class=Point name=Unnamed dimension=2 values=[0.407227,0.15918] class=Point name=Unnamed dimension=2 values=[0.907227,0.65918] class=Point name=Unnamed dimension=2 values=[0.0947266,0.72168] class=Point name=Unnamed dimension=2 values=[0.594727,0.22168] class=Point name=Unnamed dimension=2 values=[0.344727,0.47168] class=Point name=Unnamed dimension=2 values=[0.844727,0.97168] class=Point name=Unnamed dimension=2 values=[0.219727,0.0966797] class=Point name=Unnamed dimension=2 values=[0.719727,0.59668] class=Point name=Unnamed dimension=2 values=[0.469727,0.84668] class=Point name=Unnamed dimension=2 values=[0.969727,0.34668] class=Point name=Unnamed dimension=2 values=[0.0166016,0.0498047] class=Point name=Unnamed dimension=2 values=[0.516602,0.549805] class=Point name=Unnamed dimension=2 values=[0.266602,0.799805] class=Point name=Unnamed dimension=2 values=[0.766602,0.299805] class=Point name=Unnamed dimension=2 values=[0.141602,0.674805] class=Point name=Unnamed dimension=2 values=[0.641602,0.174805] class=Point name=Unnamed dimension=2 values=[0.391602,0.424805] class=Point name=Unnamed dimension=2 values=[0.891602,0.924805] class=Point name=Unnamed dimension=2 values=[0.0791016,0.987305] class=Point name=Unnamed dimension=2 values=[0.579102,0.487305] class=Point name=Unnamed dimension=2 values=[0.329102,0.237305] class=Point name=Unnamed dimension=2 values=[0.829102,0.737305] class=Point name=Unnamed dimension=2 values=[0.204102,0.362305] class=Point name=Unnamed dimension=2 values=[0.704102,0.862305] class=Point name=Unnamed dimension=2 values=[0.454102,0.612305] class=Point name=Unnamed dimension=2 values=[0.954102,0.112305] class=Point name=Unnamed dimension=2 values=[0.0478516,0.518555] class=Point name=Unnamed dimension=2 values=[0.547852,0.0185547] class=Point name=Unnamed dimension=2 values=[0.297852,0.268555] class=Point name=Unnamed dimension=2 values=[0.797852,0.768555] class=Point name=Unnamed dimension=2 values=[0.172852,0.143555] class=Point name=Unnamed dimension=2 values=[0.672852,0.643555] class=Point name=Unnamed dimension=2 values=[0.422852,0.893555] class=Point name=Unnamed dimension=2 values=[0.922852,0.393555] class=Point name=Unnamed dimension=2 values=[0.110352,0.456055] class=Point name=Unnamed dimension=2 values=[0.610352,0.956055] class=Point name=Unnamed dimension=2 values=[0.360352,0.706055] class=Point name=Unnamed dimension=2 values=[0.860352,0.206055] class=Point name=Unnamed dimension=2 values=[0.235352,0.831055] class=Point name=Unnamed dimension=2 values=[0.735352,0.331055] class=Point name=Unnamed dimension=2 values=[0.485352,0.0810547] class=Point name=Unnamed dimension=2 values=[0.985352,0.581055] class=Point name=Unnamed dimension=2 values=[0.00878906,0.416992] class=Point name=Unnamed dimension=2 values=[0.508789,0.916992] class=Point name=Unnamed dimension=2 values=[0.258789,0.666992] class=Point name=Unnamed dimension=2 values=[0.758789,0.166992] class=Point name=Unnamed dimension=2 values=[0.133789,0.791992] class=Point name=Unnamed dimension=2 values=[0.633789,0.291992] class=Point name=Unnamed dimension=2 values=[0.383789,0.0419922] class=Point name=Unnamed dimension=2 values=[0.883789,0.541992] class=Point name=Unnamed dimension=2 values=[0.0712891,0.604492] class=Point name=Unnamed dimension=2 values=[0.571289,0.104492] class=Point name=Unnamed dimension=2 values=[0.321289,0.354492] class=Point name=Unnamed dimension=2 values=[0.821289,0.854492] class=Point name=Unnamed dimension=2 values=[0.196289,0.229492] class=Point name=Unnamed dimension=2 values=[0.696289,0.729492] class=Point name=Unnamed dimension=2 values=[0.446289,0.979492] class=Point name=Unnamed dimension=2 values=[0.946289,0.479492] class=Point name=Unnamed dimension=2 values=[0.0400391,0.885742] class=Point name=Unnamed dimension=2 values=[0.540039,0.385742] class=Point name=Unnamed dimension=2 values=[0.290039,0.135742] class=Point name=Unnamed dimension=2 values=[0.790039,0.635742] class=Point name=Unnamed dimension=2 values=[0.165039,0.260742] class=Point name=Unnamed dimension=2 values=[0.665039,0.760742] class=Point name=Unnamed dimension=2 values=[0.415039,0.510742] class=Point name=Unnamed dimension=2 values=[0.915039,0.0107422] class=Point name=Unnamed dimension=2 values=[0.102539,0.0732422] class=Point name=Unnamed dimension=2 values=[0.602539,0.573242] class=Point name=Unnamed dimension=2 values=[0.352539,0.823242] class=Point name=Unnamed dimension=2 values=[0.852539,0.323242] class=Point name=Unnamed dimension=2 values=[0.227539,0.698242] class=Point name=Unnamed dimension=2 values=[0.727539,0.198242] class=Point name=Unnamed dimension=2 values=[0.477539,0.448242] class=Point name=Unnamed dimension=2 values=[0.977539,0.948242] class=Point name=Unnamed dimension=2 values=[0.0244141,0.651367] class=Point name=Unnamed dimension=2 values=[0.524414,0.151367] class=Point name=Unnamed dimension=2 values=[0.274414,0.401367] class=Point name=Unnamed dimension=2 values=[0.774414,0.901367] class=Point name=Unnamed dimension=2 values=[0.149414,0.0263672] class=Point name=Unnamed dimension=2 values=[0.649414,0.526367] class=Point name=Unnamed dimension=2 values=[0.399414,0.776367] class=Point name=Unnamed dimension=2 values=[0.899414,0.276367] class=Point name=Unnamed dimension=2 values=[0.0869141,0.338867] class=Point name=Unnamed dimension=2 values=[0.586914,0.838867] class=Point name=Unnamed dimension=2 values=[0.336914,0.588867] class=Point name=Unnamed dimension=2 values=[0.836914,0.0888672] class=Point name=Unnamed dimension=2 values=[0.211914,0.963867] class=Point name=Unnamed dimension=2 values=[0.711914,0.463867] class=Point name=Unnamed dimension=2 values=[0.461914,0.213867] class=Point name=Unnamed dimension=2 values=[0.961914,0.713867] class=Point name=Unnamed dimension=2 values=[0.0556641,0.182617] class=Point name=Unnamed dimension=2 values=[0.555664,0.682617] class=Point name=Unnamed dimension=2 values=[0.305664,0.932617] class=Point name=Unnamed dimension=2 values=[0.805664,0.432617] class=Point name=Unnamed dimension=2 values=[0.180664,0.557617] class=Point name=Unnamed dimension=2 values=[0.680664,0.0576172] class=Point name=Unnamed dimension=2 values=[0.430664,0.307617] class=Point name=Unnamed dimension=2 values=[0.930664,0.807617] class=Point name=Unnamed dimension=2 values=[0.118164,0.870117] class=Point name=Unnamed dimension=2 values=[0.618164,0.370117] class=Point name=Unnamed dimension=2 values=[0.368164,0.120117] class=Point name=Unnamed dimension=2 values=[0.868164,0.620117] class=Point name=Unnamed dimension=2 values=[0.243164,0.495117] class=Point name=Unnamed dimension=2 values=[0.743164,0.995117] class=Point name=Unnamed dimension=2 values=[0.493164,0.745117] class=Point name=Unnamed dimension=2 values=[0.993164,0.245117] class=Point name=Unnamed dimension=2 values=[0.00488281,0.249023] class=Point name=Unnamed dimension=2 values=[0.504883,0.749023] class=Point name=Unnamed dimension=2 values=[0.254883,0.999023] class=Point name=Unnamed dimension=2 values=[0.754883,0.499023] class=Point name=Unnamed dimension=2 values=[0.129883,0.624023] class=Point name=Unnamed dimension=2 values=[0.629883,0.124023] class=Point name=Unnamed dimension=2 values=[0.379883,0.374023] class=Point name=Unnamed dimension=2 values=[0.879883,0.874023] class=Point name=Unnamed dimension=2 values=[0.0673828,0.811523] class=Point name=Unnamed dimension=2 values=[0.567383,0.311523] class=Point name=Unnamed dimension=2 values=[0.317383,0.0615234] class=Point name=Unnamed dimension=2 values=[0.817383,0.561523] class=Point name=Unnamed dimension=2 values=[0.192383,0.436523] class=Point name=Unnamed dimension=2 values=[0.692383,0.936523] class=Point name=Unnamed dimension=2 values=[0.442383,0.686523] class=Point name=Unnamed dimension=2 values=[0.942383,0.186523] class=Point name=Unnamed dimension=2 values=[0.0361328,0.717773] class=Point name=Unnamed dimension=2 values=[0.536133,0.217773] class=Point name=Unnamed dimension=2 values=[0.286133,0.467773] class=Point name=Unnamed dimension=2 values=[0.786133,0.967773] class=Point name=Unnamed dimension=2 values=[0.161133,0.0927734] class=Point name=Unnamed dimension=2 values=[0.661133,0.592773] class=Point name=Unnamed dimension=2 values=[0.411133,0.842773] class=Point name=Unnamed dimension=2 values=[0.911133,0.342773] class=Point name=Unnamed dimension=2 values=[0.0986328,0.280273] class=Point name=Unnamed dimension=2 values=[0.598633,0.780273] class=Point name=Unnamed dimension=2 values=[0.348633,0.530273] class=Point name=Unnamed dimension=2 values=[0.848633,0.0302734] class=Point name=Unnamed dimension=2 values=[0.223633,0.905273] class=Point name=Unnamed dimension=2 values=[0.723633,0.405273] class=Point name=Unnamed dimension=2 values=[0.473633,0.155273] class=Point name=Unnamed dimension=2 values=[0.973633,0.655273] class=Point name=Unnamed dimension=2 values=[0.0205078,0.952148] class=Point name=Unnamed dimension=2 values=[0.520508,0.452148] class=Point name=Unnamed dimension=2 values=[0.270508,0.202148] class=Point name=Unnamed dimension=2 values=[0.770508,0.702148] class=Point name=Unnamed dimension=2 values=[0.145508,0.327148] class=Point name=Unnamed dimension=2 values=[0.645508,0.827148] class=Point name=Unnamed dimension=2 values=[0.395508,0.577148] class=Point name=Unnamed dimension=2 values=[0.895508,0.0771484] class=Point name=Unnamed dimension=2 values=[0.0830078,0.0146484] class=Point name=Unnamed dimension=2 values=[0.583008,0.514648] class=Point name=Unnamed dimension=2 values=[0.333008,0.764648] class=Point name=Unnamed dimension=2 values=[0.833008,0.264648] class=Point name=Unnamed dimension=2 values=[0.208008,0.639648] class=Point name=Unnamed dimension=2 values=[0.708008,0.139648] class=Point name=Unnamed dimension=2 values=[0.458008,0.389648] class=Point name=Unnamed dimension=2 values=[0.958008,0.889648] class=Point name=Unnamed dimension=2 values=[0.0517578,0.483398] class=Point name=Unnamed dimension=2 values=[0.551758,0.983398] class=Point name=Unnamed dimension=2 values=[0.301758,0.733398] class=Point name=Unnamed dimension=2 values=[0.801758,0.233398] class=Point name=Unnamed dimension=2 values=[0.176758,0.858398] class=Point name=Unnamed dimension=2 values=[0.676758,0.358398] class=Point name=Unnamed dimension=2 values=[0.426758,0.108398] class=Point name=Unnamed dimension=2 values=[0.926758,0.608398] class=Point name=Unnamed dimension=2 values=[0.114258,0.545898] class=Point name=Unnamed dimension=2 values=[0.614258,0.0458984] class=Point name=Unnamed dimension=2 values=[0.364258,0.295898] class=Point name=Unnamed dimension=2 values=[0.864258,0.795898] class=Point name=Unnamed dimension=2 values=[0.239258,0.170898] class=Point name=Unnamed dimension=2 values=[0.739258,0.670898] class=Point name=Unnamed dimension=2 values=[0.489258,0.920898] class=Point name=Unnamed dimension=2 values=[0.989258,0.420898] class=Point name=Unnamed dimension=2 values=[0.0126953,0.584961] class=Point name=Unnamed dimension=2 values=[0.512695,0.0849609] class=Point name=Unnamed dimension=2 values=[0.262695,0.334961] class=Point name=Unnamed dimension=2 values=[0.762695,0.834961] class=Point name=Unnamed dimension=2 values=[0.137695,0.209961] class=Point name=Unnamed dimension=2 values=[0.637695,0.709961] class=Point name=Unnamed dimension=2 values=[0.387695,0.959961] class=Point name=Unnamed dimension=2 values=[0.887695,0.459961] class=Point name=Unnamed dimension=2 values=[0.0751953,0.397461] class=Point name=Unnamed dimension=2 values=[0.575195,0.897461] class=Point name=Unnamed dimension=2 values=[0.325195,0.647461] class=Point name=Unnamed dimension=2 values=[0.825195,0.147461] class=Point name=Unnamed dimension=2 values=[0.200195,0.772461] class=Point name=Unnamed dimension=2 values=[0.700195,0.272461] class=Point name=Unnamed dimension=2 values=[0.450195,0.0224609] class=Point name=Unnamed dimension=2 values=[0.950195,0.522461] class=Point name=Unnamed dimension=2 values=[0.0439453,0.116211] class=Point name=Unnamed dimension=2 values=[0.543945,0.616211] class=Point name=Unnamed dimension=2 values=[0.293945,0.866211] class=Point name=Unnamed dimension=2 values=[0.793945,0.366211] class=Point name=Unnamed dimension=2 values=[0.168945,0.741211] class=Point name=Unnamed dimension=2 values=[0.668945,0.241211] class=Point name=Unnamed dimension=2 values=[0.418945,0.491211] class=Point name=Unnamed dimension=2 values=[0.918945,0.991211] class=Point name=Unnamed dimension=2 values=[0.106445,0.928711] class=Point name=Unnamed dimension=2 values=[0.606445,0.428711] class=Point name=Unnamed dimension=2 values=[0.356445,0.178711] class=Point name=Unnamed dimension=2 values=[0.856445,0.678711] class=Point name=Unnamed dimension=2 values=[0.231445,0.303711] class=Point name=Unnamed dimension=2 values=[0.731445,0.803711] class=Point name=Unnamed dimension=2 values=[0.481445,0.553711] class=Point name=Unnamed dimension=2 values=[0.981445,0.0537109] class=Point name=Unnamed dimension=2 values=[0.0283203,0.350586] class=Point name=Unnamed dimension=2 values=[0.52832,0.850586] class=Point name=Unnamed dimension=2 values=[0.27832,0.600586] class=Point name=Unnamed dimension=2 values=[0.77832,0.100586] class=Point name=Unnamed dimension=2 values=[0.15332,0.975586] class=Point name=Unnamed dimension=2 values=[0.65332,0.475586] class=Point name=Unnamed dimension=2 values=[0.40332,0.225586] class=Point name=Unnamed dimension=2 values=[0.90332,0.725586] class=Point name=Unnamed dimension=2 values=[0.0908203,0.663086] class=Point name=Unnamed dimension=2 values=[0.59082,0.163086] class=Point name=Unnamed dimension=2 values=[0.34082,0.413086] class=Point name=Unnamed dimension=2 values=[0.84082,0.913086] class=Point name=Unnamed dimension=2 values=[0.21582,0.0380859] class=Point name=Unnamed dimension=2 values=[0.71582,0.538086] class=Point name=Unnamed dimension=2 values=[0.46582,0.788086] class=Point name=Unnamed dimension=2 values=[0.96582,0.288086] class=Point name=Unnamed dimension=2 values=[0.0595703,0.819336] class=Point name=Unnamed dimension=2 values=[0.55957,0.319336] class=Point name=Unnamed dimension=2 values=[0.30957,0.0693359] class=Point name=Unnamed dimension=2 values=[0.80957,0.569336] class=Point name=Unnamed dimension=2 values=[0.18457,0.444336] class=Point name=Unnamed dimension=2 values=[0.68457,0.944336] class=Point name=Unnamed dimension=2 values=[0.43457,0.694336] class=Point name=Unnamed dimension=2 values=[0.93457,0.194336] class=Point name=Unnamed dimension=2 values=[0.12207,0.131836] class=Point name=Unnamed dimension=2 values=[0.62207,0.631836] class=Point name=Unnamed dimension=2 values=[0.37207,0.881836] class=Point name=Unnamed dimension=2 values=[0.87207,0.381836] class=Point name=Unnamed dimension=2 values=[0.24707,0.506836] class=Point name=Unnamed dimension=2 values=[0.74707,0.00683594] class=Point name=Unnamed dimension=2 values=[0.49707,0.256836] class=Point name=Unnamed dimension=2 values=[0.99707,0.756836] class=Point name=Unnamed dimension=2 values=[0.00292969,0.250977] class=Point name=Unnamed dimension=2 values=[0.50293,0.750977] class=Point name=Unnamed dimension=2 values=[0.25293,0.500977] class=Point name=Unnamed dimension=2 values=[0.75293,0.000976562] class=Point name=Unnamed dimension=2 values=[0.12793,0.875977] class=Point name=Unnamed dimension=2 values=[0.62793,0.375977] class=Point name=Unnamed dimension=2 values=[0.37793,0.125977] class=Point name=Unnamed dimension=2 values=[0.87793,0.625977] class=Point name=Unnamed dimension=2 values=[0.0654297,0.688477] class=Point name=Unnamed dimension=2 values=[0.56543,0.188477] class=Point name=Unnamed dimension=2 values=[0.31543,0.438477] class=Point name=Unnamed dimension=2 values=[0.81543,0.938477] class=Point name=Unnamed dimension=2 values=[0.19043,0.0634766] class=Point name=Unnamed dimension=2 values=[0.69043,0.563477] class=Point name=Unnamed dimension=2 values=[0.44043,0.813477] class=Point name=Unnamed dimension=2 values=[0.94043,0.313477] class=Point name=Unnamed dimension=2 values=[0.0341797,0.782227] class=Point name=Unnamed dimension=2 values=[0.53418,0.282227] class=Point name=Unnamed dimension=2 values=[0.28418,0.0322266] class=Point name=Unnamed dimension=2 values=[0.78418,0.532227] class=Point name=Unnamed dimension=2 values=[0.15918,0.407227] class=Point name=Unnamed dimension=2 values=[0.65918,0.907227] class=Point name=Unnamed dimension=2 values=[0.40918,0.657227] class=Point name=Unnamed dimension=2 values=[0.90918,0.157227] class=Point name=Unnamed dimension=2 values=[0.0966797,0.219727] class=Point name=Unnamed dimension=2 values=[0.59668,0.719727] class=Point name=Unnamed dimension=2 values=[0.34668,0.969727] class=Point name=Unnamed dimension=2 values=[0.84668,0.469727] class=Point name=Unnamed dimension=2 values=[0.22168,0.594727] class=Point name=Unnamed dimension=2 values=[0.72168,0.0947266] class=Point name=Unnamed dimension=2 values=[0.47168,0.344727] class=Point name=Unnamed dimension=2 values=[0.97168,0.844727] class=Point name=Unnamed dimension=2 values=[0.0185547,0.547852] class=Point name=Unnamed dimension=2 values=[0.518555,0.0478516] class=Point name=Unnamed dimension=2 values=[0.268555,0.297852] class=Point name=Unnamed dimension=2 values=[0.768555,0.797852] class=Point name=Unnamed dimension=2 values=[0.143555,0.172852] class=Point name=Unnamed dimension=2 values=[0.643555,0.672852] class=Point name=Unnamed dimension=2 values=[0.393555,0.922852] class=Point name=Unnamed dimension=2 values=[0.893555,0.422852] class=Point name=Unnamed dimension=2 values=[0.0810547,0.485352] class=Point name=Unnamed dimension=2 values=[0.581055,0.985352] class=Point name=Unnamed dimension=2 values=[0.331055,0.735352] class=Point name=Unnamed dimension=2 values=[0.831055,0.235352] class=Point name=Unnamed dimension=2 values=[0.206055,0.860352] class=Point name=Unnamed dimension=2 values=[0.706055,0.360352] class=Point name=Unnamed dimension=2 values=[0.456055,0.110352] class=Point name=Unnamed dimension=2 values=[0.956055,0.610352] class=Point name=Unnamed dimension=2 values=[0.0498047,0.0166016] class=Point name=Unnamed dimension=2 values=[0.549805,0.516602] class=Point name=Unnamed dimension=2 values=[0.299805,0.766602] class=Point name=Unnamed dimension=2 values=[0.799805,0.266602] class=Point name=Unnamed dimension=2 values=[0.174805,0.641602] class=Point name=Unnamed dimension=2 values=[0.674805,0.141602] class=Point name=Unnamed dimension=2 values=[0.424805,0.391602] class=Point name=Unnamed dimension=2 values=[0.924805,0.891602] class=Point name=Unnamed dimension=2 values=[0.112305,0.954102] class=Point name=Unnamed dimension=2 values=[0.612305,0.454102] class=Point name=Unnamed dimension=2 values=[0.362305,0.204102] class=Point name=Unnamed dimension=2 values=[0.862305,0.704102] class=Point name=Unnamed dimension=2 values=[0.237305,0.329102] class=Point name=Unnamed dimension=2 values=[0.737305,0.829102] class=Point name=Unnamed dimension=2 values=[0.487305,0.579102] class=Point name=Unnamed dimension=2 values=[0.987305,0.0791016] class=Point name=Unnamed dimension=2 values=[0.0107422,0.915039] class=Point name=Unnamed dimension=2 values=[0.510742,0.415039] class=Point name=Unnamed dimension=2 values=[0.260742,0.165039] class=Point name=Unnamed dimension=2 values=[0.760742,0.665039] class=Point name=Unnamed dimension=2 values=[0.135742,0.290039] class=Point name=Unnamed dimension=2 values=[0.635742,0.790039] class=Point name=Unnamed dimension=2 values=[0.385742,0.540039] class=Point name=Unnamed dimension=2 values=[0.885742,0.0400391] class=Point name=Unnamed dimension=2 values=[0.0732422,0.102539] class=Point name=Unnamed dimension=2 values=[0.573242,0.602539] class=Point name=Unnamed dimension=2 values=[0.323242,0.852539] class=Point name=Unnamed dimension=2 values=[0.823242,0.352539] class=Point name=Unnamed dimension=2 values=[0.198242,0.727539] class=Point name=Unnamed dimension=2 values=[0.698242,0.227539] class=Point name=Unnamed dimension=2 values=[0.448242,0.477539] class=Point name=Unnamed dimension=2 values=[0.948242,0.977539] class=Point name=Unnamed dimension=2 values=[0.0419922,0.383789] class=Point name=Unnamed dimension=2 values=[0.541992,0.883789] class=Point name=Unnamed dimension=2 values=[0.291992,0.633789] class=Point name=Unnamed dimension=2 values=[0.791992,0.133789] class=Point name=Unnamed dimension=2 values=[0.166992,0.758789] class=Point name=Unnamed dimension=2 values=[0.666992,0.258789] class=Point name=Unnamed dimension=2 values=[0.416992,0.00878906] class=Point name=Unnamed dimension=2 values=[0.916992,0.508789] class=Point name=Unnamed dimension=2 values=[0.104492,0.571289] class=Point name=Unnamed dimension=2 values=[0.604492,0.0712891] class=Point name=Unnamed dimension=2 values=[0.354492,0.321289] class=Point name=Unnamed dimension=2 values=[0.854492,0.821289] class=Point name=Unnamed dimension=2 values=[0.229492,0.196289] class=Point name=Unnamed dimension=2 values=[0.729492,0.696289] class=Point name=Unnamed dimension=2 values=[0.479492,0.946289] class=Point name=Unnamed dimension=2 values=[0.979492,0.446289] class=Point name=Unnamed dimension=2 values=[0.0263672,0.149414] class=Point name=Unnamed dimension=2 values=[0.526367,0.649414] class=Point name=Unnamed dimension=2 values=[0.276367,0.899414] class=Point name=Unnamed dimension=2 values=[0.776367,0.399414] class=Point name=Unnamed dimension=2 values=[0.151367,0.524414] class=Point name=Unnamed dimension=2 values=[0.651367,0.0244141] class=Point name=Unnamed dimension=2 values=[0.401367,0.274414] class=Point name=Unnamed dimension=2 values=[0.901367,0.774414] class=Point name=Unnamed dimension=2 values=[0.0888672,0.836914] class=Point name=Unnamed dimension=2 values=[0.588867,0.336914] class=Point name=Unnamed dimension=2 values=[0.338867,0.0869141] class=Point name=Unnamed dimension=2 values=[0.838867,0.586914] class=Point name=Unnamed dimension=2 values=[0.213867,0.461914] class=Point name=Unnamed dimension=2 values=[0.713867,0.961914] class=Point name=Unnamed dimension=2 values=[0.463867,0.711914] class=Point name=Unnamed dimension=2 values=[0.963867,0.211914] class=Point name=Unnamed dimension=2 values=[0.0576172,0.680664] class=Point name=Unnamed dimension=2 values=[0.557617,0.180664] class=Point name=Unnamed dimension=2 values=[0.307617,0.430664] class=Point name=Unnamed dimension=2 values=[0.807617,0.930664] class=Point name=Unnamed dimension=2 values=[0.182617,0.0556641] class=Point name=Unnamed dimension=2 values=[0.682617,0.555664] class=Point name=Unnamed dimension=2 values=[0.432617,0.805664] class=Point name=Unnamed dimension=2 values=[0.932617,0.305664] class=Point name=Unnamed dimension=2 values=[0.120117,0.368164] class=Point name=Unnamed dimension=2 values=[0.620117,0.868164] class=Point name=Unnamed dimension=2 values=[0.370117,0.618164] class=Point name=Unnamed dimension=2 values=[0.870117,0.118164] class=Point name=Unnamed dimension=2 values=[0.245117,0.993164] class=Point name=Unnamed dimension=2 values=[0.745117,0.493164] class=Point name=Unnamed dimension=2 values=[0.495117,0.243164] class=Point name=Unnamed dimension=2 values=[0.995117,0.743164] class=Point name=Unnamed dimension=2 values=[0.00683594,0.74707] class=Point name=Unnamed dimension=2 values=[0.506836,0.24707] class=Point name=Unnamed dimension=2 values=[0.256836,0.49707] class=Point name=Unnamed dimension=2 values=[0.756836,0.99707] class=Point name=Unnamed dimension=2 values=[0.131836,0.12207] class=Point name=Unnamed dimension=2 values=[0.631836,0.62207] class=Point name=Unnamed dimension=2 values=[0.381836,0.87207] class=Point name=Unnamed dimension=2 values=[0.881836,0.37207] class=Point name=Unnamed dimension=2 values=[0.0693359,0.30957] class=Point name=Unnamed dimension=2 values=[0.569336,0.80957] class=Point name=Unnamed dimension=2 values=[0.319336,0.55957] class=Point name=Unnamed dimension=2 values=[0.819336,0.0595703] class=Point name=Unnamed dimension=2 values=[0.194336,0.93457] class=Point name=Unnamed dimension=2 values=[0.694336,0.43457] class=Point name=Unnamed dimension=2 values=[0.444336,0.18457] class=Point name=Unnamed dimension=2 values=[0.944336,0.68457] class=Point name=Unnamed dimension=2 values=[0.0380859,0.21582] class=Point name=Unnamed dimension=2 values=[0.538086,0.71582] class=Point name=Unnamed dimension=2 values=[0.288086,0.96582] class=Point name=Unnamed dimension=2 values=[0.788086,0.46582] class=Point name=Unnamed dimension=2 values=[0.163086,0.59082] class=Point name=Unnamed dimension=2 values=[0.663086,0.0908203] class=Point name=Unnamed dimension=2 values=[0.413086,0.34082] class=Point name=Unnamed dimension=2 values=[0.913086,0.84082] class=Point name=Unnamed dimension=2 values=[0.100586,0.77832] class=Point name=Unnamed dimension=2 values=[0.600586,0.27832] class=Point name=Unnamed dimension=2 values=[0.350586,0.0283203] class=Point name=Unnamed dimension=2 values=[0.850586,0.52832] class=Point name=Unnamed dimension=2 values=[0.225586,0.40332] class=Point name=Unnamed dimension=2 values=[0.725586,0.90332] class=Point name=Unnamed dimension=2 values=[0.475586,0.65332] class=Point name=Unnamed dimension=2 values=[0.975586,0.15332] class=Point name=Unnamed dimension=2 values=[0.0224609,0.450195] class=Point name=Unnamed dimension=2 values=[0.522461,0.950195] class=Point name=Unnamed dimension=2 values=[0.272461,0.700195] class=Point name=Unnamed dimension=2 values=[0.772461,0.200195] class=Point name=Unnamed dimension=2 values=[0.147461,0.825195] class=Point name=Unnamed dimension=2 values=[0.647461,0.325195] class=Point name=Unnamed dimension=2 values=[0.397461,0.0751953] class=Point name=Unnamed dimension=2 values=[0.897461,0.575195] class=Point name=Unnamed dimension=2 values=[0.0849609,0.512695] class=Point name=Unnamed dimension=2 values=[0.584961,0.0126953] class=Point name=Unnamed dimension=2 values=[0.334961,0.262695] class=Point name=Unnamed dimension=2 values=[0.834961,0.762695] class=Point name=Unnamed dimension=2 values=[0.209961,0.137695] class=Point name=Unnamed dimension=2 values=[0.709961,0.637695] class=Point name=Unnamed dimension=2 values=[0.459961,0.887695] class=Point name=Unnamed dimension=2 values=[0.959961,0.387695] class=Point name=Unnamed dimension=2 values=[0.0537109,0.981445] class=Point name=Unnamed dimension=2 values=[0.553711,0.481445] class=Point name=Unnamed dimension=2 values=[0.303711,0.231445] class=Point name=Unnamed dimension=2 values=[0.803711,0.731445] class=Point name=Unnamed dimension=2 values=[0.178711,0.356445] class=Point name=Unnamed dimension=2 values=[0.678711,0.856445] class=Point name=Unnamed dimension=2 values=[0.428711,0.606445] class=Point name=Unnamed dimension=2 values=[0.928711,0.106445] class=Point name=Unnamed dimension=2 values=[0.116211,0.0439453] class=Point name=Unnamed dimension=2 values=[0.616211,0.543945] class=Point name=Unnamed dimension=2 values=[0.366211,0.793945] class=Point name=Unnamed dimension=2 values=[0.866211,0.293945] class=Point name=Unnamed dimension=2 values=[0.241211,0.668945] class=Point name=Unnamed dimension=2 values=[0.741211,0.168945] class=Point name=Unnamed dimension=2 values=[0.491211,0.418945] class=Point name=Unnamed dimension=2 values=[0.991211,0.918945] class=Point name=Unnamed dimension=2 values=[0.0146484,0.0830078] class=Point name=Unnamed dimension=2 values=[0.514648,0.583008] class=Point name=Unnamed dimension=2 values=[0.264648,0.833008] class=Point name=Unnamed dimension=2 values=[0.764648,0.333008] class=Point name=Unnamed dimension=2 values=[0.139648,0.708008] class=Point name=Unnamed dimension=2 values=[0.639648,0.208008] class=Point name=Unnamed dimension=2 values=[0.389648,0.458008] class=Point name=Unnamed dimension=2 values=[0.889648,0.958008] class=Point name=Unnamed dimension=2 values=[0.0771484,0.895508] class=Point name=Unnamed dimension=2 values=[0.577148,0.395508] class=Point name=Unnamed dimension=2 values=[0.327148,0.145508] class=Point name=Unnamed dimension=2 values=[0.827148,0.645508] class=Point name=Unnamed dimension=2 values=[0.202148,0.270508] class=Point name=Unnamed dimension=2 values=[0.702148,0.770508] class=Point name=Unnamed dimension=2 values=[0.452148,0.520508] class=Point name=Unnamed dimension=2 values=[0.952148,0.0205078] class=Point name=Unnamed dimension=2 values=[0.0458984,0.614258] class=Point name=Unnamed dimension=2 values=[0.545898,0.114258] class=Point name=Unnamed dimension=2 values=[0.295898,0.364258] class=Point name=Unnamed dimension=2 values=[0.795898,0.864258] class=Point name=Unnamed dimension=2 values=[0.170898,0.239258] class=Point name=Unnamed dimension=2 values=[0.670898,0.739258] class=Point name=Unnamed dimension=2 values=[0.420898,0.989258] class=Point name=Unnamed dimension=2 values=[0.920898,0.489258] class=Point name=Unnamed dimension=2 values=[0.108398,0.426758] class=Point name=Unnamed dimension=2 values=[0.608398,0.926758] class=Point name=Unnamed dimension=2 values=[0.358398,0.676758] class=Point name=Unnamed dimension=2 values=[0.858398,0.176758] class=Point name=Unnamed dimension=2 values=[0.233398,0.801758] class=Point name=Unnamed dimension=2 values=[0.733398,0.301758] class=Point name=Unnamed dimension=2 values=[0.483398,0.0517578] class=Point name=Unnamed dimension=2 values=[0.983398,0.551758] class=Point name=Unnamed dimension=2 values=[0.0302734,0.848633] class=Point name=Unnamed dimension=2 values=[0.530273,0.348633] class=Point name=Unnamed dimension=2 values=[0.280273,0.0986328] class=Point name=Unnamed dimension=2 values=[0.780273,0.598633] class=Point name=Unnamed dimension=2 values=[0.155273,0.473633] class=Point name=Unnamed dimension=2 values=[0.655273,0.973633] class=Point name=Unnamed dimension=2 values=[0.405273,0.723633] class=Point name=Unnamed dimension=2 values=[0.905273,0.223633] class=Point name=Unnamed dimension=2 values=[0.0927734,0.161133] sample size= 1000 relative error to Pi=7.662822e-04 openturns-1.9/python/test/t_FaureSequence_std.py000077500000000000000000000020441307543307100222300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a Faure sequence = FaureSequence(15) print(sequence) # Create a numerical sample of the sequence faureSample = sequence.generate(10) print(repr(faureSample)) # Create another Faure' sequence of dimension 2 to estimate Pi in [0 1)^2 dimension = 2 sequence = FaureSequence(dimension) pointInsideCircle = 0 sampleSize = 1000 for i in range(sampleSize): faurePoint = sequence.generate() print(faurePoint.__repr__()) if faurePoint.norm() < 1.0: pointInsideCircle = pointInsideCircle + 1 probabilityEstimate = (1.0 * pointInsideCircle) / sampleSize probability = pi / 4.0 relativeError = fabs(probability - probabilityEstimate) / probability print('sample size=', sampleSize) print('relative error to Pi=%e' % relativeError) except: import sys print("t_FaureSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FieldFunction_std.expout000066400000000000000000000031151307543307100231170ustar00rootroot00000000000000myFunc= FieldFunction : class=FieldFunctionImplementation name=Unnamed input description=[] output description=[] number of calls=0 myFunc input description= [] myFunc output description= [] myFunc input dimension= 0 myFunc output dimension= 0 myFunc spatial dimension= 1 called 0 times myFunc= FieldFunction : class=PythonFieldFunction name=OpenTURNSPythonFieldFunction X= [ v0 v1 v2 X0 X1 X2 ] 0 : [ 0 0 0 0.608202 -1.26617 -0.438266 ] 1 : [ 0 0 1 1.20548 -2.18139 0.350042 ] 2 : [ 0 1 0 -0.355007 1.43725 0.810668 ] 3 : [ 0 1 1 0.793156 -0.470526 0.261018 ] 4 : [ 1 0 0 -2.29006 -1.28289 -1.31178 ] 5 : [ 1 0 1 -0.0907838 0.995793 -0.139453 ] 6 : [ 1 1 0 -0.560206 0.44549 0.322925 ] 7 : [ 1 1 1 0.445785 -1.03808 -0.856712 ] Y= [ v0 v1 v2 X0 ] 0 : [ 0 0 0 0.473617 ] 1 : [ 0 0 1 -0.125498 ] 2 : [ 0 1 0 0.351418 ] 3 : [ 0 1 1 1.78236 ] 4 : [ 1 0 0 0.0702074 ] 5 : [ 1 0 1 -0.781366 ] 6 : [ 1 1 0 -0.721533 ] 7 : [ 1 1 1 -0.241223 ] myFunc input dimension= 3 myFunc output dimension= 1 myFunc spatial dimension= 3 called 1 times openturns-1.9/python/test/t_FieldFunction_std.py000077500000000000000000000034501307543307100222300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Create an intance myFunc = ot.FieldFunction() print('myFunc=', myFunc) # Get the input and output description print('myFunc input description=', myFunc.getInputDescription()) print('myFunc output description=', myFunc.getOutputDescription()) # Get the input and output dimension, based on description print('myFunc input dimension=', myFunc.getInputDimension()) print('myFunc output dimension=', myFunc.getOutputDimension()) print('myFunc spatial dimension=', myFunc.getSpatialDimension()) # Get the number of calls print('called ', myFunc.getCallsNumber(), ' times') def myPyFunc(X): mesh = X.getMesh() Y = ot.Field(mesh, ot.Normal().getSample(mesh.getVerticesNumber())) return Y in_dim = 3 out_dim = 1 spatial_dim = 3 myFunc = ot.PythonFieldFunction(in_dim, out_dim, spatial_dim, myPyFunc) print('myFunc=', myFunc) vertices = [] vertices.append([0.0, 0.0, 0.0]) vertices.append([0.0, 0.0, 1.0]) vertices.append([0.0, 1.0, 0.0]) vertices.append([0.0, 1.0, 1.0]) vertices.append([1.0, 0.0, 0.0]) vertices.append([1.0, 0.0, 1.0]) vertices.append([1.0, 1.0, 0.0]) vertices.append([1.0, 1.0, 1.0]) simplicies = [] simplicies.append([0, 1, 2, 4]) simplicies.append([3, 5, 6, 7]) simplicies.append([1, 2, 3, 6]) simplicies.append([1, 2, 4, 6]) simplicies.append([1, 3, 5, 6]) simplicies.append([1, 4, 5, 6]) mesh3D = ot.Mesh(vertices, simplicies) values = ot.Normal(spatial_dim).getSample(mesh3D.getVerticesNumber()) X = ot.Field(mesh3D, values) print('X=', X) Y = myFunc(X) print('Y=', Y) print('myFunc input dimension=', myFunc.getInputDimension()) print('myFunc output dimension=', myFunc.getOutputDimension()) print('myFunc spatial dimension=', myFunc.getSpatialDimension()) print('called ', myFunc.getCallsNumber(), ' times') openturns-1.9/python/test/t_Field_draw.expout000066400000000000000000000000001307543307100215420ustar00rootroot00000000000000openturns-1.9/python/test/t_Field_draw.py000077500000000000000000000017271307543307100206720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # A 1D->1D field mesh = IntervalMesher([10]).build(Interval(-2.0, 2.0)) function = SymbolicFunction("x", "x") field = Field(mesh, function(mesh.getVertices())) graph = field.draw() graph = field.drawMarginal(0, False) graph = field.drawMarginal(0, True) # A 2D->1D field mesh = IntervalMesher([10] * 2).build(Interval([-2.0] * 2, [2.0] * 2)) function = SymbolicFunction(["x0", "x1"], ["x0 - x1"]) field = Field(mesh, function(mesh.getVertices())) graph = field.draw() graph = field.drawMarginal(0, False) graph = field.drawMarginal(0, True) # A 2D->2D field function = SymbolicFunction(["x0", "x1"], ["x0", "x1"]) field = Field(mesh, function(mesh.getVertices())) graph = field.draw() except: import sys print("t_Field_draw.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Field_std.expout000066400000000000000000000042201307543307100214070ustar00rootroot00000000000000field= [ v0 v1 v2 X0 X1 X2 ] 0 : [ 0 0 0 0.608202 -1.26617 -0.438266 ] 1 : [ 0 0 1 1.20548 -2.18139 0.350042 ] 2 : [ 0 1 0 -0.355007 1.43725 0.810668 ] 3 : [ 0 1 1 0.793156 -0.470526 0.261018 ] 4 : [ 1 0 0 -2.29006 -1.28289 -1.31178 ] 5 : [ 1 0 1 -0.0907838 0.995793 -0.139453 ] 6 : [ 1 1 0 -0.560206 0.44549 0.322925 ] 7 : [ 1 1 1 0.445785 -1.03808 -0.856712 ] spatial dim= 3 value[4]= [-2.29006,-1.28289,-1.31178] nearest[2]= [0.793156,-0.470526,0.261018] mesh= class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=3 data=[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] simplices=[[0,1,2,4],[3,5,6,7],[1,2,3,6],[1,2,4,6],[1,3,5,6],[1,4,5,6]] spatial mean= [-0.0859856,-0.496935,0.0517341] deformed= class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=3 data=[[0.608202,-1.26617,-0.438266],[1.20548,-2.18139,1.35004],[-0.355007,2.43725,0.810668],[0.793156,0.529474,1.26102],[-1.29006,-1.28289,-1.31178],[0.909216,0.995793,0.860547],[0.439794,1.44549,0.322925],[1.44579,-0.0380766,0.143288]] simplices=[[0,1,2,4],[3,5,6,7],[1,2,3,6],[1,2,4,6],[1,3,5,6],[1,4,5,6]] description= [v0,v1,v2,X0,X1,X2] # vtk DataFile Version 3.0 Unnamed ASCII DATASET UNSTRUCTURED_GRID POINTS 8 float 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 CELLS 6 30 4 0 1 2 4 4 3 5 6 7 4 1 2 3 6 4 1 2 4 6 4 1 3 5 6 4 1 4 5 6 CELL_TYPES 6 10 10 10 10 10 10 POINT_DATA 8 SCALARS X0 float LOOKUP_TABLE default 0.608202 1.20548 -0.355007 0.793156 -2.29006 -0.0907838 -0.560206 0.445785 SCALARS X1 float LOOKUP_TABLE default -1.26617 -2.18139 1.43725 -0.470526 -1.28289 0.995793 0.44549 -1.03808 SCALARS X2 float LOOKUP_TABLE default -0.438266 0.350042 0.810668 0.261018 -1.31178 -0.139453 0.322925 -0.856712 openturns-1.9/python/test/t_Field_std.py000077500000000000000000000023321307543307100205200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import os import openturns as ot ot.PlatformInfo.SetNumericalPrecision(6) vertices = [] vertices.append([0.0, 0.0, 0.0]) vertices.append([0.0, 0.0, 1.0]) vertices.append([0.0, 1.0, 0.0]) vertices.append([0.0, 1.0, 1.0]) vertices.append([1.0, 0.0, 0.0]) vertices.append([1.0, 0.0, 1.0]) vertices.append([1.0, 1.0, 0.0]) vertices.append([1.0, 1.0, 1.0]) simplicies = [] simplicies.append([0, 1, 2, 4]) simplicies.append([3, 5, 6, 7]) simplicies.append([1, 2, 3, 6]) simplicies.append([1, 2, 4, 6]) simplicies.append([1, 3, 5, 6]) simplicies.append([1, 4, 5, 6]) mesh3D = ot.Mesh(vertices, simplicies) s = 3 values = ot.Normal(s).getSample(mesh3D.getVerticesNumber()) field = ot.Field(mesh3D, values) print('field=', field) print('spatial dim=', field.getSpatialDimension()) print('value[4]=', field.getValueAtIndex(4)) print('nearest[2]=', field.getValueAtNearestPosition(field[2])) print('mesh=', field.getMesh()) print('spatial mean=', field.getSpatialMean()) print('deformed=', field.asDeformedMesh()) print('description=', field.getDescription()) fname = 'field.vtk' field.exportToVTKFile(fname) with open(fname) as f: data = f.read() print(data) os.remove(fname) openturns-1.9/python/test/t_FilteringWindows_std.expout000066400000000000000000000111241307543307100236630ustar00rootroot00000000000000myHanningFilter = class=Hanning myHammingFilter = class=Hamming t = 0 Hanning = 0 Hamming = 0.137563 t = 0.01 Hanning = 0.00161117 Hamming = 0.138989 t = 0.02 Hanning = 0.00643832 Hamming = 0.143258 t = 0.03 Hanning = 0.0144624 Hamming = 0.150356 t = 0.04 Hanning = 0.0256517 Hamming = 0.160253 t = 0.05 Hanning = 0.0399622 Hamming = 0.172911 t = 0.06 Hanning = 0.0573373 Hamming = 0.188279 t = 0.07 Hanning = 0.0777084 Hamming = 0.206298 t = 0.08 Hanning = 0.100995 Hamming = 0.226896 t = 0.09 Hanning = 0.127106 Hamming = 0.249991 t = 0.1 Hanning = 0.155937 Hamming = 0.275493 t = 0.11 Hanning = 0.187375 Hamming = 0.303301 t = 0.12 Hanning = 0.221296 Hamming = 0.333305 t = 0.13 Hanning = 0.257566 Hamming = 0.365386 t = 0.14 Hanning = 0.296042 Hamming = 0.399419 t = 0.15 Hanning = 0.336572 Hamming = 0.435268 t = 0.16 Hanning = 0.378996 Hamming = 0.472793 t = 0.17 Hanning = 0.423146 Hamming = 0.511845 t = 0.18 Hanning = 0.468849 Hamming = 0.55227 t = 0.19 Hanning = 0.515924 Hamming = 0.593909 t = 0.2 Hanning = 0.564185 Hamming = 0.636597 t = 0.21 Hanning = 0.613442 Hamming = 0.680166 t = 0.22 Hanning = 0.6635 Hamming = 0.724443 t = 0.23 Hanning = 0.714162 Hamming = 0.769255 t = 0.24 Hanning = 0.765228 Hamming = 0.814424 t = 0.25 Hanning = 0.816497 Hamming = 0.859772 t = 0.26 Hanning = 0.867765 Hamming = 0.90512 t = 0.27 Hanning = 0.918831 Hamming = 0.950289 t = 0.28 Hanning = 0.969493 Hamming = 0.9951 t = 0.29 Hanning = 1.01955 Hamming = 1.03938 t = 0.3 Hanning = 1.06881 Hamming = 1.08295 t = 0.31 Hanning = 1.11707 Hamming = 1.12563 t = 0.32 Hanning = 1.16414 Hamming = 1.16727 t = 0.33 Hanning = 1.20985 Hamming = 1.2077 t = 0.34 Hanning = 1.254 Hamming = 1.24675 t = 0.35 Hanning = 1.29642 Hamming = 1.28428 t = 0.36 Hanning = 1.33695 Hamming = 1.32012 t = 0.37 Hanning = 1.37543 Hamming = 1.35416 t = 0.38 Hanning = 1.4117 Hamming = 1.38624 t = 0.39 Hanning = 1.44562 Hamming = 1.41624 t = 0.4 Hanning = 1.47706 Hamming = 1.44405 t = 0.41 Hanning = 1.50589 Hamming = 1.46955 t = 0.42 Hanning = 1.532 Hamming = 1.49265 t = 0.43 Hanning = 1.55528 Hamming = 1.51325 t = 0.44 Hanning = 1.57566 Hamming = 1.53126 t = 0.45 Hanning = 1.59303 Hamming = 1.54663 t = 0.46 Hanning = 1.60734 Hamming = 1.55929 t = 0.47 Hanning = 1.61853 Hamming = 1.56919 t = 0.48 Hanning = 1.62655 Hamming = 1.57629 t = 0.49 Hanning = 1.63138 Hamming = 1.58056 t = 0.5 Hanning = 1.63299 Hamming = 1.58198 t = 0.51 Hanning = 1.63138 Hamming = 1.58056 t = 0.52 Hanning = 1.62655 Hamming = 1.57629 t = 0.53 Hanning = 1.61853 Hamming = 1.56919 t = 0.54 Hanning = 1.60734 Hamming = 1.55929 t = 0.55 Hanning = 1.59303 Hamming = 1.54663 t = 0.56 Hanning = 1.57566 Hamming = 1.53126 t = 0.57 Hanning = 1.55528 Hamming = 1.51325 t = 0.58 Hanning = 1.532 Hamming = 1.49265 t = 0.59 Hanning = 1.50589 Hamming = 1.46955 t = 0.6 Hanning = 1.47706 Hamming = 1.44405 t = 0.61 Hanning = 1.44562 Hamming = 1.41624 t = 0.62 Hanning = 1.4117 Hamming = 1.38624 t = 0.63 Hanning = 1.37543 Hamming = 1.35416 t = 0.64 Hanning = 1.33695 Hamming = 1.32012 t = 0.65 Hanning = 1.29642 Hamming = 1.28428 t = 0.66 Hanning = 1.254 Hamming = 1.24675 t = 0.67 Hanning = 1.20985 Hamming = 1.2077 t = 0.68 Hanning = 1.16414 Hamming = 1.16727 t = 0.69 Hanning = 1.11707 Hamming = 1.12563 t = 0.7 Hanning = 1.06881 Hamming = 1.08295 t = 0.71 Hanning = 1.01955 Hamming = 1.03938 t = 0.72 Hanning = 0.969493 Hamming = 0.9951 t = 0.73 Hanning = 0.918831 Hamming = 0.950289 t = 0.74 Hanning = 0.867765 Hamming = 0.90512 t = 0.75 Hanning = 0.816497 Hamming = 0.859772 t = 0.76 Hanning = 0.765228 Hamming = 0.814424 t = 0.77 Hanning = 0.714162 Hamming = 0.769255 t = 0.78 Hanning = 0.6635 Hamming = 0.724443 t = 0.79 Hanning = 0.613442 Hamming = 0.680166 t = 0.8 Hanning = 0.564185 Hamming = 0.636597 t = 0.81 Hanning = 0.515924 Hamming = 0.593909 t = 0.82 Hanning = 0.468849 Hamming = 0.55227 t = 0.83 Hanning = 0.423146 Hamming = 0.511845 t = 0.84 Hanning = 0.378996 Hamming = 0.472793 t = 0.85 Hanning = 0.336572 Hamming = 0.435268 t = 0.86 Hanning = 0.296042 Hamming = 0.399419 t = 0.87 Hanning = 0.257566 Hamming = 0.365386 t = 0.88 Hanning = 0.221296 Hamming = 0.333305 t = 0.89 Hanning = 0.187375 Hamming = 0.303301 t = 0.9 Hanning = 0.155937 Hamming = 0.275493 t = 0.91 Hanning = 0.127106 Hamming = 0.249991 t = 0.92 Hanning = 0.100995 Hamming = 0.226896 t = 0.93 Hanning = 0.0777084 Hamming = 0.206298 t = 0.94 Hanning = 0.0573373 Hamming = 0.188279 t = 0.95 Hanning = 0.0399622 Hamming = 0.172911 t = 0.96 Hanning = 0.0256517 Hamming = 0.160253 t = 0.97 Hanning = 0.0144624 Hamming = 0.150356 t = 0.98 Hanning = 0.00643832 Hamming = 0.143258 t = 0.99 Hanning = 0.00161117 Hamming = 0.138989 t = 1 Hanning = 0 Hamming = 0.137563 openturns-1.9/python/test/t_FilteringWindows_std.py000077500000000000000000000013731307543307100227770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Hanning filter myHanningFilter = Hanning() print("myHanningFilter = ", myHanningFilter) # Hamming filter myHammingFilter = Hamming() print("myHammingFilter = ", myHammingFilter) # Evaluation of values between t=0 and t=1 using a step = 0.01 steps = 100 tMin = 0.0 tMax = 1.0 tStep = (tMax - tMin) / steps for i in range(steps + 1): t = tMin + i * tStep print('t = %g Hanning = %g Hamming = %g' % (t, myHanningFilter(t), myHammingFilter(t))) except: import sys print("t_FilteringWindows_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FiniteDifferenceStep_std.expout000066400000000000000000000001471307543307100244150ustar00rootroot00000000000000step type= ConstantStep step value= [0.0001,0.0001] step type= BlendedStep step value= [0.0003,0.0003] openturns-1.9/python/test/t_FiniteDifferenceStep_std.py000077500000000000000000000011011307543307100235130ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dimension = 2 epsilon = Point(dimension, 1e-4) x = Point(dimension, 2.0) step = ConstantStep(epsilon) print('step type=', step.getClassName(), 'step value=', step(x)) eta = Point(dimension, 1.0) step = BlendedStep(epsilon, eta) print('step type=', step.getClassName(), 'step value=', step(x)) except: import sys print("t_FiniteDifferenceStep_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FisherSnedecorFactory_std.expout000066400000000000000000000013041307543307100246170ustar00rootroot00000000000000Distribution = class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5 d2=8.4 Estimated distribution = class=FisherSnedecor name=FisherSnedecor dimension=1 d1=4.5705 d2=8.2066 Parameter distribution = Normal(mu = [4.5705,8.2066], sigma = [0.093349,0.261], R = [[ 1 -0.41075 ] [ -0.41075 1 ]]) Default distribution = FisherSnedecor(d1 = 1, d2 = 5) Distribution from parameters = FisherSnedecor(d1 = 4.5, d2 = 8.4) Typed estimated distribution = FisherSnedecor(d1 = 4.5705, d2 = 8.2066) Default typed distribution = FisherSnedecor(d1 = 1, d2 = 5) Typed distribution from parameters= FisherSnedecor(d1 = 4.5, d2 = 8.4) openturns-1.9/python/test/t_FisherSnedecorFactory_std.py000077500000000000000000000024261307543307100237340ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot ot.PlatformInfo.SetNumericalPrecision(5) distribution = ot.FisherSnedecor(4.5, 8.4) size = 10000 sample = distribution.getSample(size) factory = ot.FisherSnedecorFactory() print('Distribution =', repr(distribution)) result = factory.buildEstimator(sample) estimatedDistribution = result.getDistribution() print('Estimated distribution =', repr(estimatedDistribution)) parameterDistribution = result.getParameterDistribution() print('Parameter distribution =', parameterDistribution) defaultDistribution = factory.build() print('Default distribution =', defaultDistribution) fromParameterDistribution = factory.build(distribution.getParameter()) print('Distribution from parameters =', fromParameterDistribution) typedEstimatedDistribution = factory.buildAsFisherSnedecor(sample) print('Typed estimated distribution =', typedEstimatedDistribution) defaultTypedDistribution = factory.buildAsFisherSnedecor() print('Default typed distribution =', defaultTypedDistribution) typedFromParameterDistribution = factory.buildAsFisherSnedecor( distribution.getParameter()) print('Typed distribution from parameters=', typedFromParameterDistribution) openturns-1.9/python/test/t_FisherSnedecor_std.expout000066400000000000000000000053561307543307100233020ustar00rootroot00000000000000Distribution class=FisherSnedecor name=FisherSnedecor dimension=1 d1=5.5 d2=10.5 Distribution FisherSnedecor(d1 = 5.5, d2 = 10.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.85322] oneSample first= class=Point name=Unnamed dimension=1 values=[2.55996] last= class=Point name=Unnamed dimension=1 values=[1.06184] mean= class=Point name=Unnamed dimension=1 values=[1.24575] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20146] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] log pdf=-0.659362 pdf =0.517181 pdf (FD)=0.517181 cdf=0.531405 ccdf=0.468595 characteristic function=(0.385738+0.612601j) pdf gradient = class=Point name=Unnamed dimension=2 values=[0.0333323,0.00890862] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0333323,0.00890862] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0101307,0.00377782] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0101307,0.00377782] log-pdf gradient = class=Point name=Unnamed dimension=2 values=[0.0644499,0.0172253] log-pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0644499,0.0172253] quantile= class=Point name=Unnamed dimension=1 values=[3.2027] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.230549] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0385599, 3.21723] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.14683} with f= MinimumVolumeLevelSetEvaluation(FisherSnedecor(d1 = 5.5, d2 = 10.5)) beta= [0.0429883] Bilateral confidence interval= [0.168551, 4.04601] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 3.2027] beta= [0.95] Unilateral confidence interval (upper tail)= [0.230549, 2048] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.23529] standard deviation= class=Point name=Unnamed dimension=1 values=[1.09323] skewness= class=Point name=Unnamed dimension=1 values=[3.56105] kurtosis= class=Point name=Unnamed dimension=1 values=[42.039] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19515] parameters= [class=PointWithDescription name=X0 dimension=2 description=[d1,d2] values=[5.5,10.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.23529] standard moment n= 2 value= [2.7211] standard moment n= 3 value= [10.9669] standard moment n= 4 value= [96.309] standard moment n= 5 value= [4964.29] Standard representative= FisherSnedecor(d1 = 5.5, d2 = 10.5) openturns-1.9/python/test/t_FisherSnedecor_std.py000077500000000000000000000155031307543307100224040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from cmath import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = FisherSnedecor(5.5, 10.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) # print "ddf =" , repr(DDF) # by the finite difference technique # print "ddf (FD)=" ,repr(Point(1, (distribution.computePDF( # point + Point(1, eps) ) - distribution.computePDF( point + # Point(1, -eps) )) / (2.0 * eps))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6f+%.6fj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computePDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computePDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computeCDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computeCDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # derivative of the logPDF with regards the parameters of the distribution logPDFgr = distribution.computeLogPDFGradient(point) print("log-pdf gradient =", repr(logPDFgr)) # by the finite difference technique logPDFgrFD = Point(2) logPDFgrFD[0] = (FisherSnedecor(distribution.getD1() + eps, distribution.getD2()).computeLogPDF(point) - FisherSnedecor(distribution.getD1() - eps, distribution.getD2()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[1] = (FisherSnedecor(distribution.getD1(), distribution.getD2() + eps).computeLogPDF(point) - FisherSnedecor(distribution.getD1(), distribution.getD2() - eps).computeLogPDF(point)) / (2.0 * eps) print("log-pdf gradient (FD)=", repr(logPDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_FisherSnedecor_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FittingTest_std.expout000066400000000000000000000051631307543307100226370ustar00rootroot00000000000000best model BIC= class=Uniform name=Uniform dimension=1 a=-1.39122 b=2.45155 best model Kolmogorov= class=Beta name=Beta dimension=1 r=1.14515 t=2.39684 a=-1.39122 b=2.45155 resultBIC= class=SquareMatrix dimension=14 implementation=class=MatrixImplementation name=Unnamed rows=14 columns=14 values=[-0.506611,1416.79,1260.87,1416.79,1062.8,1133.59,935.04,1416.79,1204.29,1416.79,1416.79,722.564,1062.59,1005.92,1416.79,0.390135,964.655,210.864,1232.77,1148.05,1416.79,26.4376,1232.62,1416.79,865.069,1233.51,1205.07,1416.79,4.94401,3.40566,3.36873,9.04993,7.59532,36.5729,3.45423,15.9133,4.0612,2.44214,2.97694,3.35073,3.97803,2.82863,1416.79,3.02206,512.945,4.87206,993.28,936.458,1163.09,7.11503,781.182,1416.79,4.24283,1063.47,964.471,624.978,2.84271,5.25018,4.44992,10.9583,3.6054,4.34917,3.02071,17.9129,3.54591,2.94694,4.65243,3.81864,3.97857,3.81633,3.25977,4.78199,4.40705,14.8314,3.72037,4.27123,3.35483,23.6423,3.66558,3.31367,4.49168,3.98667,4.03917,3.82167,1.57993,1416.79,455.161,1219.03,412.435,695.404,1.96017,1416.79,285.407,1.79553,554.759,186.174,370.43,3.82754,26.8191,20.1943,22.0736,15.3766,25.307,25.7348,25.4331,3.16515,24.2971,25.0307,21.3014,23.5995,23.4314,23.1683,2.98858,131.382,243.114,851.769,88.0953,342.671,2.52017,1416.79,2.95261,2.20348,102.28,186.341,214.757,2.84408,1416.79,1416.79,1062.59,1416.79,1005.92,1190.11,736.732,1416.79,949.251,0,1416.79,1048.43,963.419,1204.27,1416.79,2.88821,511.803,8.7561,992.328,935.944,1161.87,15.912,779.915,1416.79,2.01493,1063.63,964.559,624.509,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,2.81418,158.758,3.14689,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,3.28126,3.43457,3.06783,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,1416.79,186.366,370.234,1.95746] resultKolmogorov= class=SquareMatrix dimension=11 implementation=class=MatrixImplementation name=Unnamed rows=11 columns=11 values=[0.380754,0,0,0,0,0,0,0,0,0,0,0,0.101178,0,0,0,0,0,0,0,0,0,0,0,0.935178,0,0,0,0,0,6.03204e-05,0,0,0,0,0,0.261505,0,0,0,0,0,0,0,0,0,0,0,0.102296,0.488213,0,0,0,0,0,0,0,0,0,0.0115789,0.979805,0,0,0,0,0,0,0,0,0,0.00855122,0,0.256542,0,0,0,0,0,0,0,0,0,0,0,0.515105,0,0,0,0,0,0,0,0.000639599,0,7.75439e-06,0,0.268376,0,0,0,0,0,0,0,0,0,0,0,0.556345,0,0,0,0,0,0,0,0,0,0,0,0.640406] resultChiSquared= class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0.892467] class=TestResult name=Unnamed type=Kolmogorov Normal/Normal binaryQualityMeasure=true p-value threshold=0.05 p-value=0.554765 description=[sampleNormal vs sample Normal] openturns-1.9/python/test/t_FittingTest_std.py000077500000000000000000000142231307543307100217430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import fabs TESTPREAMBLE() RandomGenerator.SetSeed(0) try: continuousDistributionCollection = DistributionCollection() discreteDistributionCollection = DistributionCollection() distributionCollection = DistributionCollection() beta = Beta(2.0, 3.0, 0.0, 1.0) distributionCollection.add(beta) continuousDistributionCollection.add(beta) gamma = Gamma(1.0, 2.0, 3.0) distributionCollection.add(gamma) continuousDistributionCollection.add(gamma) gumbel = Gumbel(1.0, 2.0) distributionCollection.add(gumbel) continuousDistributionCollection.add(gumbel) lognormal = LogNormal(1.0, 1.0, 2.0) distributionCollection.add(lognormal) continuousDistributionCollection.add(lognormal) logistic = Logistic(1.0, 1.0) distributionCollection.add(logistic) continuousDistributionCollection.add(logistic) normal = Normal(1.0, 2.0) distributionCollection.add(normal) continuousDistributionCollection.add(normal) truncatednormal = TruncatedNormal(1.0, 1.0, 0.0, 3.0) distributionCollection.add(truncatednormal) continuousDistributionCollection.add(truncatednormal) student = Student(10.0, 10.0) distributionCollection.add(student) continuousDistributionCollection.add(student) triangular = Triangular(-1.0, 2.0, 4.0) distributionCollection.add(triangular) continuousDistributionCollection.add(triangular) uniform = Uniform(1.0, 2.0) distributionCollection.add(uniform) continuousDistributionCollection.add(uniform) weibull = Weibull(1.0, 1.0, 2.0) distributionCollection.add(weibull) continuousDistributionCollection.add(weibull) geometric = Geometric(0.5) distributionCollection.add(geometric) discreteDistributionCollection.add(geometric) poisson = Poisson(2.0) distributionCollection.add(poisson) discreteDistributionCollection.add(poisson) x = [[1.0], [2.0], [3.0]] p = [0.3, 0.2, 0.5] userdefined = UserDefined(x, p) distributionCollection.add(userdefined) discreteDistributionCollection.add(userdefined) size = 100 # Number of continuous distributions continuousDistributionNumber = continuousDistributionCollection.getSize() # Number of discrete distributions discreteDistributionNumber = discreteDistributionCollection.getSize() # Number of distributions distributionNumber = continuousDistributionNumber + \ discreteDistributionNumber # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has distributionNumber # Samples sampleCollection = [Sample(size, 1) for i in range(distributionNumber)] # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has # continuousDistributionNumber Samples continuousSampleCollection = [Sample(size, 1) for i in range(continuousDistributionNumber)] # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has # discreteDistributionNumber Samples discreteSampleCollection = [Sample(size, 1) for i in range(discreteDistributionNumber)] for i in range(continuousDistributionNumber): continuousSampleCollection[ i] = continuousDistributionCollection[i].getSample(size) continuousSampleCollection[i].setName( continuousDistributionCollection[i].getName()) sampleCollection[i] = continuousSampleCollection[i] for i in range(discreteDistributionNumber): discreteSampleCollection[ i] = discreteDistributionCollection[i].getSample(size) discreteSampleCollection[i].setName( discreteDistributionCollection[i].getName()) sampleCollection[ continuousDistributionNumber + i] = discreteSampleCollection[i] factoryCollection = DistributionFactoryCollection(3) factoryCollection[0] = UniformFactory() factoryCollection[1] = BetaFactory() factoryCollection[2] = NormalFactory() aSample = Uniform(-1.5, 2.5).getSample(size) model = FittingTest.BestModelBIC(aSample, factoryCollection) print("best model BIC=", repr(model)) model, best_result = FittingTest.BestModelKolmogorov( aSample, factoryCollection) print("best model Kolmogorov=", repr(model)) # BIC ranking resultBIC = SquareMatrix(distributionNumber) for i in range(distributionNumber): for j in range(distributionNumber): value = FittingTest.BIC( sampleCollection[i], distributionCollection[j], 0) resultBIC[i, j] = value print("resultBIC=", repr(resultBIC)) # Kolmogorov ranking resultKolmogorov = SquareMatrix(continuousDistributionNumber) for i in range(continuousDistributionNumber): for j in range(continuousDistributionNumber): value = FittingTest.Kolmogorov(continuousSampleCollection[ i], continuousDistributionCollection[j], 0.95, 0).getPValue() if (fabs(value) < 1.0e-6): value = 0.0 resultKolmogorov[i, j] = value print("resultKolmogorov=", repr(resultKolmogorov)) # ChiSquared ranking resultChiSquared = SquareMatrix(discreteDistributionNumber - 1) for i in range(discreteDistributionNumber - 1): for j in range(discreteDistributionNumber - 1): value = FittingTest.ChiSquared(discreteSampleCollection[ i], discreteDistributionCollection[j], 0.95, 0).getPValue() if (fabs(value) < 1.0e-6): value = 0.0 resultChiSquared[i, j] = value print("resultChiSquared=", repr(resultChiSquared)) RandomGenerator.SetSeed(0) sample1 = Normal().getSample(20) sample2 = Normal(0.1, 1.1).getSample(30) resultTwoSamplesKolmogorov = FittingTest.TwoSamplesKolmogorov( sample1, sample2) print(resultTwoSamplesKolmogorov) except: import sys print("t_FittingTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FixedExperiment_std.expout000066400000000000000000000012511307543307100234650ustar00rootroot00000000000000ref. sample= 0 : [ 0 1 2 3 4 5 ] 1 : [ 1 2 3 4 5 6 ] 2 : [ 2 3 4 5 6 7 ] 3 : [ 3 4 5 6 7 8 ] 4 : [ 4 5 6 7 8 9 ] myPlane = class=FixedExperiment name=Unnamed sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] weights=class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=6 data=[[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9]] weights = class=Point name=Unnamed dimension=5 values=[0.2,0.2,0.2,0.2,0.2] openturns-1.9/python/test/t_FixedExperiment_std.py000077500000000000000000000012251307543307100225750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: size = 5 dim = 6 refSample = Sample(size, dim) for i in range(size): p = Point(dim) for j in range(dim): p[j] = i + j refSample[i] = p print("ref. sample=", refSample) myPlane = FixedExperiment(refSample) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) except: import sys print("t_FixedExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FourierSeriesFactory_std.expout000066400000000000000000000020211307543307100244770ustar00rootroot00000000000000class=FourierSeriesFactory measure=class=Uniform name=Uniform dimension=1 a=-3.14159 b=3.14159 order= 0 f:X -> 1 X= [0.4] f(X)= [1] df(X)= [0] d2f(X)= [0] order= 1 f:X -> sqrt(2) * sin(X) X= [0.4] f(X)= [0.550721] df(X)= [1.30258] d2f(X)= [-0.550721] order= 2 f:X -> sqrt(2) * cos(X) X= [0.4] f(X)= [1.30258] df(X)= [-0.550721] d2f(X)= [-1.30258] order= 3 f:X -> sqrt(2) * sin(2 * X) X= [0.4] f(X)= [1.01449] df(X)= [1.97058] d2f(X)= [-4.05798] order= 4 f:X -> sqrt(2) * cos(2 * X) X= [0.4] f(X)= [0.985292] df(X)= [-2.02899] d2f(X)= [-3.94117] order= 5 f:X -> sqrt(2) * sin(3 * X) X= [0.4] f(X)= [1.3181] df(X)= [1.53735] d2f(X)= [-11.8629] order= 6 f:X -> sqrt(2) * cos(3 * X) X= [0.4] f(X)= [0.512451] df(X)= [-3.95431] d2f(X)= [-4.61206] order= 7 f:X -> sqrt(2) * sin(4 * X) X= [0.4] f(X)= [1.41361] df(X)= [-0.165177] d2f(X)= [-22.6178] order= 8 f:X -> sqrt(2) * cos(4 * X) X= [0.4] f(X)= [-0.0412944] df(X)= [-5.65444] d2f(X)= [0.66071] order= 9 f:X -> sqrt(2) * sin(5 * X) X= [0.4] f(X)= [1.28594] df(X)= [-2.9426] d2f(X)= [-32.1485] openturns-1.9/python/test/t_FourierSeriesFactory_std.py000077500000000000000000000006351307543307100236170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot factory = ot.FourierSeriesFactory() print(factory) x = 0.4 for i in range(10): function = factory.build(i) print('order=', i, function, 'X=', ot.Point([x]), 'f(X)=', ot.Point([function(x)]), 'df(X)=', ot.Point([function.gradient(x)]), 'd2f(X)=', ot.Point([function.hessian(x)])) openturns-1.9/python/test/t_FrankCopulaFactory_std.expout000066400000000000000000000005421307543307100241240ustar00rootroot00000000000000distribution= class=FrankCopula name=FrankCopula dimension=2 theta=1.5 Estimated distribution= class=FrankCopula name=FrankCopula dimension=2 theta=1.31776 FrankCopula = FrankCopula(theta = 1.5) Estimated frankCopula= FrankCopula(theta = 1.31776) Default frankCopula= FrankCopula(theta = 2) FrankCopula from parameters= FrankCopula(theta = 1.5) openturns-1.9/python/test/t_FrankCopulaFactory_std.py000077500000000000000000000017021307543307100232320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = FrankCopula(1.5) size = 1000 sample = distribution.getSample(size) factory = FrankCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedFrankCopula = factory.buildAsFrankCopula(sample) print("FrankCopula =", distribution) print("Estimated frankCopula=", estimatedFrankCopula) estimatedFrankCopula = factory.buildAsFrankCopula() print("Default frankCopula=", estimatedFrankCopula) estimatedFrankCopula = factory.buildAsFrankCopula( distribution.getParameter()) print("FrankCopula from parameters=", estimatedFrankCopula) except: import sys print("t_FrankFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FrankCopula_std.expout000066400000000000000000000052451307543307100226010ustar00rootroot00000000000000Copula class=FrankCopula name=FrankCopula dimension=2 theta=2.5 Copula FrankCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.0321352,0.0321352,0.0833333] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= class=Point name=Unnamed dimension=2 values=[0.629877,0.895308] oneSample= class=Sample name=FrankCopula implementation=class=SampleImplementation name=FrankCopula size=10 dimension=2 description=[X0,X1] data=[[0.135276,0.016871],[0.347057,0.945426],[0.92068,0.721499],[0.0632061,0.142503],[0.714382,0.513452],[0.373767,0.654314],[0.883503,0.519404],[0.92851,0.915709],[0.684575,0.864187],[0.359802,0.923248]] anotherSample mean= class=Point name=Unnamed dimension=2 values=[0.502777,0.501102] anotherSample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0845153,0.0329314,0.0329314,0.0835427] Point = class=Point name=Unnamed dimension=2 values=[0.2,0.2] pdf=1.449735 cdf=0.073888 Quantile= class=Point name=Unnamed dimension=2 values=[0.662772,0.662772] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=2 values=[0.0258555,0.0258555] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0127327, 0.987267] [0.0127327, 0.987267] threshold= [0.974535] Minimum volume level set= {x | f(x) <= 0.654845} with f= MinimumVolumeLevelSetEvaluation(FrankCopula(theta = 2.5)) beta= [0.519522] Bilateral confidence interval= [0.0127327, 0.987267] [0.0127327, 0.987267] beta= [0.974535] Unilateral confidence interval (lower tail)= [0, 0.974144] [0, 0.974144] beta= [0.974144] Unilateral confidence interval (upper tail)= [0.0258555, 1] [0.0258555, 1] beta= [0.974144] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.294088] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.47206] indices= [1,0] margins= class=FrankCopula name=FrankCopula dimension=2 theta=2.5 margins PDF=1.334391 margins CDF=0.107307 margins quantile= class=Point name=Unnamed dimension=2 values=[0.974144,0.974144] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.196586,0.435233] openturns-1.9/python/test/t_FrankCopula_std.py000077500000000000000000000075751307543307100217200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 copula = FrankCopula(2.5) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", repr(copula.getMean())) print("Covariance ", repr(copula.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) print("Point = ", repr(point), " pdf=%.6f" % pointPDF, " cdf=%.6f" % pointCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = Point(margins.computeQuantile(0.95)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) except: import sys print("t_FrankCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Frechet_std.expout000066400000000000000000000034631307543307100217540ustar00rootroot00000000000000Distribution Frechet(alpha = 6, beta = 1.5, gamma = -1) Elliptical = False Continuous = True oneRealization= [0.705878] oneSample first= [1.12231] last= [0.539283] mean= [0.698001] covariance= [[ 0.177003 ]] Kolmogorov test for the generator, sample size= 100 is True Kolmogorov test for the generator, sample size= 1000 is True Point= [1] ddf = [-1.32548] log pdf= -0.805458661668 pdf =0.446883 pdf (FD)=0.446883 cdf= 0.836960404867 ccdf= 0.163039595133 survival= 0.163039595133 characteristic function=(0.72659, 0.574653) log characteristic function=(-0.0764829, 0.669162) pdf gradient = [-0.0311988,1.46939,1.32548] pdf gradient (FD)= [-0.0311988,1.46939,1.32548] cdf gradient = [0.0428534,-0.595844,-0.446883] cdf gradient (FD)= [0.0428534,-0.595844,-0.446883] quantile= [1.46083] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.249321] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.125077, 1.49279] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.21675} with f= MinimumVolumeLevelSetEvaluation(Frechet(alpha = 6, beta = 1.5, gamma = -1)) beta= [0.108963] Bilateral confidence interval= [0.206726, 1.76813] beta= [0.95] Unilateral confidence interval (lower tail)= [-1, 1.46083] beta= [0.95] Unilateral confidence interval (upper tail)= [0.249321, 322.208] beta= [0.95] mean= [0.693181] standard deviation= [0.424152] covariance= [[ 0.179905 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[alpha : 6, beta : 1.5, gamma : -1]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [1.12879] standard moment n= 2 , value= [1.35412] standard moment n= 3 , value= [1.77245] standard moment n= 4 , value= [2.67894] standard moment n= 5 , value= [5.56632] Standard representative= Frechet(alpha = 6, beta = 1, gamma = 0) openturns-1.9/python/test/t_Frechet_std.py000077500000000000000000000136521307543307100210640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # Instanciate one distribution object distribution = ot.Frechet(6.0, 1.5, -1.0) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): print("Kolmogorov test for the generator, sample size=", size, " is ", ot.FittingTest.Kolmogorov( distribution.getSample(size), distribution).getBinaryQualityMeasure()) size *= 10 # Define a point point = ot.Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) print("pdf (FD)=%.6f" % ((distribution.computeCDF( point + [eps]) - distribution.computeCDF(point + [-eps])) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.12g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = ot.Point(3) PDFgrFD[0] = (ot.Frechet(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computePDF(point) - ot.Frechet(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (ot.Frechet(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computePDF(point) - ot.Frechet(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (ot.Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computePDF(point) - ot.Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = ot.Point(3) CDFgrFD[0] = (ot.Frechet(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point) - ot.Frechet(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (ot.Frechet(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computeCDF(point) - ot.Frechet(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (ot.Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computeCDF(point) - ot.Frechet(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", ot.Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) # skewness = distribution.getSkewness() # print("skewness=", skewness) # kurtosis = distribution.getKurtosis() # print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) openturns-1.9/python/test/t_Function_draw.expout000066400000000000000000002735361307543307100223360ustar00rootroot00000000000000f= [x]->[sin(2*_pi*x)*exp(-x^2/2)] graph= class=Graph name=y0 as a function of x implementation=class=GraphImplementation name=y0 as a function of x title=y0 as a function of x xTitle=x yTitle=y0 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=32 dimension=2 data=[[-1.2,-0.462929],[-1.12258,-0.370796],[-1.04516,-0.162143],[-0.967742,0.126031],[-0.890323,0.427794],[-0.812903,0.663231],[-0.735484,0.759851],[-0.658065,0.67465],[-0.580645,0.410016],[-0.503226,0.0178566],[-0.425806,-0.410515],[-0.348387,-0.766947],[-0.270968,-0.955601],[-0.193548,-0.920351],[-0.116129,-0.662137],[-0.0387097,-0.240649],[0.0387097,0.240649],[0.116129,0.662137],[0.193548,0.920351],[0.270968,0.955601],[0.348387,0.766947],[0.425806,0.410515],[0.503226,-0.0178566],[0.580645,-0.410016],[0.658065,-0.67465],[0.735484,-0.759851],[0.812903,-0.663231],[0.890323,-0.427794],[0.967742,-0.126031],[1.04516,0.162143],[1.12258,0.370796],[1.2,0.462929]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] f= [x,y]->[2.0+x-2*y+x*y-x^2-3*y^2+x*y^2] graph= class=Graph name=y0 as a function of (x,y) implementation=class=GraphImplementation name=y0 as a function of (x,y) title=y0 as a function of (x,y) xTitle=x yTitle=y axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-841] labels=[-841] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-841 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-434] labels=[-434] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-434 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-234] labels=[-234] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-234 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-128] labels=[-128] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-128 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-71] labels=[-71] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-71 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-34] labels=[-34] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-34 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[-11] labels=[-11] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=-11 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[1] labels=[1] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[59] labels=[59] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=59 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y0 as a function of (x,y) implementation=class=Contour name=y0 as a function of (x,y) x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-10],[-9],[-8],[-7],[-6],[-5],[-4],[-3],[-2],[-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] levels=class=Point name=Unnamed dimension=1 values=[258] labels=[258] show labels=false derived from class=DrawableImplementation name=y0 as a function of (x,y) legend=258 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y0] data=[[-1288],[-1178],[-1070],[-964],[-860],[-758],[-658],[-560],[-464],[-370],[-278],[-188],[-100],[-14],[70],[152],[232],[310],[386],[460],[532],[-1053],[-961],[-871],[-783],[-697],[-613],[-531],[-451],[-373],[-297],[-223],[-151],[-81],[-13],[53],[117],[179],[239],[297],[353],[407],[-844],[-768],[-694],[-622],[-552],[-484],[-418],[-354],[-292],[-232],[-174],[-118],[-64],[-12],[38],[86],[132],[176],[218],[258],[296],[-661],[-599],[-539],[-481],[-425],[-371],[-319],[-269],[-221],[-175],[-131],[-89],[-49],[-11],[25],[59],[91],[121],[149],[175],[199],[-504],[-454],[-406],[-360],[-316],[-274],[-234],[-196],[-160],[-126],[-94],[-64],[-36],[-10],[14],[36],[56],[74],[90],[104],[116],[-373],[-333],[-295],[-259],[-225],[-193],[-163],[-135],[-109],[-85],[-63],[-43],[-25],[-9],[5],[17],[27],[35],[41],[45],[47],[-268],[-236],[-206],[-178],[-152],[-128],[-106],[-86],[-68],[-52],[-38],[-26],[-16],[-8],[-2],[2],[4],[4],[2],[-2],[-8],[-189],[-163],[-139],[-117],[-97],[-79],[-63],[-49],[-37],[-27],[-19],[-13],[-9],[-7],[-7],[-9],[-13],[-19],[-27],[-37],[-49],[-136],[-114],[-94],[-76],[-60],[-46],[-34],[-24],[-16],[-10],[-6],[-4],[-4],[-6],[-10],[-16],[-24],[-34],[-46],[-60],[-76],[-109],[-89],[-71],[-55],[-41],[-29],[-19],[-11],[-5],[-1],[1],[1],[-1],[-5],[-11],[-19],[-29],[-41],[-55],[-71],[-89],[-108],[-88],[-70],[-54],[-40],[-28],[-18],[-10],[-4],[0],[2],[2],[0],[-4],[-10],[-18],[-28],[-40],[-54],[-70],[-88],[-133],[-111],[-91],[-73],[-57],[-43],[-31],[-21],[-13],[-7],[-3],[-1],[-1],[-3],[-7],[-13],[-21],[-31],[-43],[-57],[-73],[-184],[-158],[-134],[-112],[-92],[-74],[-58],[-44],[-32],[-22],[-14],[-8],[-4],[-2],[-2],[-4],[-8],[-14],[-22],[-32],[-44],[-261],[-229],[-199],[-171],[-145],[-121],[-99],[-79],[-61],[-45],[-31],[-19],[-9],[-1],[5],[9],[11],[11],[9],[5],[-1],[-364],[-324],[-286],[-250],[-216],[-184],[-154],[-126],[-100],[-76],[-54],[-34],[-16],[0],[14],[26],[36],[44],[50],[54],[56],[-493],[-443],[-395],[-349],[-305],[-263],[-223],[-185],[-149],[-115],[-83],[-53],[-25],[1],[25],[47],[67],[85],[101],[115],[127],[-648],[-586],[-526],[-468],[-412],[-358],[-306],[-256],[-208],[-162],[-118],[-76],[-36],[2],[38],[72],[104],[134],[162],[188],[212],[-829],[-753],[-679],[-607],[-537],[-469],[-403],[-339],[-277],[-217],[-159],[-103],[-49],[3],[53],[101],[147],[191],[233],[273],[311],[-1036],[-944],[-854],[-766],[-680],[-596],[-514],[-434],[-356],[-280],[-206],[-134],[-64],[4],[70],[134],[196],[256],[314],[370],[424],[-1269],[-1159],[-1051],[-945],[-841],[-739],[-639],[-541],[-445],[-351],[-259],[-169],[-81],[5],[89],[171],[251],[329],[405],[479],[551],[-1528],[-1398],[-1270],[-1144],[-1020],[-898],[-778],[-660],[-544],[-430],[-318],[-208],[-100],[6],[110],[212],[312],[410],[506],[600],[692]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] graph1D= class=Graph name=y0 as a function of x0 around [1,-0.5,1.5] implementation=class=GraphImplementation name=y0 as a function of x0 around [1,-0.5,1.5] title=y0 as a function of x0 around [1,-0.5,1.5] xTitle=x0 yTitle=y0 axes=ON grid=ON legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=32 dimension=2 data=[[-5,-3.69476],[-4.67742,-3.78391],[-4.35484,-3.02071],[-4.03226,-1.89872],[-3.70968,-1.2221],[-3.3871,-1.40946],[-3.06452,-2.13148],[-2.74194,-2.596],[-2.41935,-2.23377],[-2.09677,-1.19124],[-1.77419,-0.203786],[-1.45161,0.0409039],[-1.12903,-0.501874],[-0.806452,-1.19512],[-0.483871,-1.27159],[-0.16129,-0.497955],[0.16129,0.623188],[0.483871,1.28841],[0.806452,1.08897],[1.12903,0.364642],[1.45161,-0.0904172],[1.77419,0.284854],[2.09677,1.33272],[2.41935,2.31318],[2.74194,2.5446],[3.06452,1.99377],[3.3871,1.30465],[3.70968,1.24093],[4.03226,2.02488],[4.35484,3.14499],[4.67742,3.79872],[5,3.58728]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] graph1D= class=Graph name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=GraphImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] title=y1 as a function of (x1,x2) around [1,-0.5,1.5] xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-4.33184] labels=[-4.33184] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-4.33184 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-2.52913] labels=[-2.52913] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-2.52913 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-1.81489] labels=[-1.81489] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-1.81489 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-1.09649] labels=[-1.09649] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-1.09649 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[-0.370831] labels=[-0.370831] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=-0.370831 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[0.301006] labels=[0.301006] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=0.301006 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[1.0806] labels=[1.0806] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=1.0806 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[1.64977] labels=[1.64977] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=1.64977 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[2.63876] labels=[2.63876] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=2.63876 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=y1 as a function of (x1,x2) around [1,-0.5,1.5] implementation=class=Contour name=y1 as a function of (x1,x2) around [1,-0.5,1.5] x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 data=[[-5],[-4.5],[-4],[-3.5],[-3],[-2.5],[-2],[-1.5],[-1],[-0.5],[0],[0.5],[1],[1.5],[2],[2.5],[3],[3.5],[4],[4.5],[5]] levels=class=Point name=Unnamed dimension=1 values=[4.39464] labels=[4.39464] show labels=false derived from class=DrawableImplementation name=y1 as a function of (x1,x2) around [1,-0.5,1.5] legend=4.39464 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 description=[y1] data=[[1.88312],[-1.32517],[-1.81489],[-1.98688],[-1.69142],[0.893655],[3.33007],[1.63559],[-2.06119],[-2.08237],[1.0806],[1.42834],[-1.82229],[-2.49713],[1.64793],[4.45318],[1.32991],[-3.45086],[-3.95112],[-0.9458],[1.69179],[-0.140698],[-3.38699],[-2.1763],[-0.724957],[-0.251532],[1.28891],[2.71183],[0.897387],[-2.28387],[-1.95662],[1.0806],[1.28694],[-1.63344],[-1.76681],[2.32249],[4.14713],[-0.0787885],[-4.79835],[-3.73698],[1.04702],[3.81682],[-2.59901],[-4.79336],[-1.56052],[0.95112],[0.839072],[1.0738],[1.7988],[0.286486],[-2.26746],[-1.74412],[1.0806],[1.26017],[-1.24844],[-1.06246],[2.56732],[3.30393],[-1.53944],[-5.45932],[-2.60572],[3.27208],[5.07433],[-4.88992],[-5.19994],[-0.118325],[2.63099],[1.31337],[0.301006],[0.814534],[-0.0475419],[-2.01596],[-1.49689],[1.0806],[1.35459],[-0.761556],[-0.55654],[2.32249],[2.13002],[-2.69443],[-5.27194],[-0.834332],[5.18461],[5.15641],[-6.45255],[-4.50719],[1.79719],[3.90336],[1.05525],[-0.840274],[0],[-0.0229159],[-1.59095],[-1.27547],[1.0806],[1.54709],[-0.291991],[-0.372913],[1.64793],[0.912808],[-3.26098],[-4.2821],[1.1435],[6.31636],[4.04299],[-6.90431],[-2.88472],[3.71704],[4.45671],[0.127893],[-2.07061],[-0.445371],[0.354335],[-1.09649],[-1.13406],[1.0806],[1.79053],[0.0452889],[-0.55654],[0.708799],[-0.0496838],[-3.10037],[-2.73213],[2.84353],[6.39024],[2.00665],[-6.13459],[-0.729764],[5.17118],[4.15557],[-1.24164],[-3.08878],[-0.412536],[0.991846],[-0.653644],[-1.10729],[1.0806],[2.02532],[0.167706],[-1.06246],[-0.264969],[-0.521806],[-2.25193],[-1.00153],[3.84953],[5.38816],[-0.454026],[-4.33184],[1.43007],[5.80358],[3.07365],[-2.71805],[-3.64549],[0.090465],[1.73353],[-0.370831],[-1.20172],[1.0806],[2.19396],[0.0452889],[-1.76681],[-1.03496],[-0.387966],[-0.923387],[0.486],[3.9152],[3.55546],[-2.73659],[-1.93745],[3.06597],[5.45941],[1.47586],[-3.93985],[-3.60445],[0.94048],[2.3978],[-0.317295],[-1.39421],[1.0806],[2.25517],[-0.291991],[-2.49713],[-1.41266],[0.319066],[0.559986],[1.36625],[3.02446],[1.34085],[-4.28218],[0.462366],[3.77743],[4.22294],[-0.246614],[-4.60791],[-2.9757],[1.9294],[2.82202],[-0.506144],[-1.63766],[1.0806],[2.19396],[-0.761556],[-3.07463],[-1.30559],[1.42619],[1.83501],[1.42371],[1.39539],[-0.713457],[-4.71239],[2.28004],[3.39024],[2.39689],[-1.67205],[-4.55865],[-1.91318],[2.81509],[2.90233],[-0.89114],[-1.87244],[1.0806],[2.02532],[-1.24844],[-3.3579],[-0.739963],[2.66233],[2.58951],[0.644314],[-0.573149],[-2.10449],[-3.92188],[3.07054],[1.99921],[0.428352],[-2.45145],[-3.80415],[-0.677034],[3.38072],[2.61905],[-1.37802],[-2.04108],[1.0806],[1.79053],[-1.63344],[-3.2776],[0.145733],[3.72485],[2.63876],[-0.781121],[-2.3992],[-2.49168],[-2.10421],[2.64033],[-0.0550984],[-1.20072],[-2.39399],[-2.52913],[0.430085],[3.48779],[2.04156],[-1.84759],[-2.10229],[1.0806],[1.54709],[-1.82229],[-2.85338],[1.13465],[4.3536],[1.97071],[-2.50359],[-3.63567],[-1.78023],[0.295603],[1.09474],[-2.26971],[-2.09146],[-1.51373],[-1.04576],[1.13712],[3.11009],[1.31123],[-2.18487],[-2.04108],[1.0806],[1.35459],[-1.76875],[-2.18911],[1.98466],[4.39464],[0.748906],[-4.10139],[-3.97984],[-0.14432],[2.69],[-1.18782],[-4.10241],[-2.02579],[-0.0262081],[0.282788],[1.27096],[2.3401],[0.606886],[-2.30729],[-1.87244],[1.0806],[1.26017],[-1.48594],[-1.44742],[2.48766],[3.83793],[-0.7275],[-5.1833],[-3.34743],[2.01551],[4.49274],[-3.6485],[-5.10449],[-1.01979],[1.70439],[1.13123],[0.798835],[1.36633],[0.100966],[-2.18487],[-1.63766],[1.0806],[1.28694],[-1.04309],[-0.809909],[2.5205],[2.81976],[-2.09704],[-5.48445],[-1.8933],[4.17047],[5.26247],[-5.68483],[-5.03061],[0.680245],[3.25436],[1.29183],[-0.163657],[0.4272],[-0.0826605],[-1.84759],[-1.39421],[1.0806],[1.42834],[-0.548631],[-0.432658],[2.07513],[1.58943],[-3.02439],[-4.93109],[0.0265542],[5.79294],[4.81071],[-6.79826],[-3.89886],[2.65808],[4.24421],[0.725288],[-1.38087],[-0.247361],[0.100966],[-1.37802],[-1.20172],[1.0806],[1.64977],[-0.123624],[-0.408032],[1.2606],[0.448145],[-3.28252],[-3.65872],[1.94207],[6.48569],[3.24808],[-6.71617],[-1.98633],[4.42947],[4.43158],[-0.429703],[-2.55478],[-0.492195],[0.606886],[-0.89114],[-1.10729],[1.0806],[1.897],[0.127877],[-0.74206],[0.276324],[-0.32465],[-2.80821],[-1.97885],[3.38427],[6.07911],[0.957161],[-5.45867],[0.238733],[5.56072],[3.77061],[-1.89035],[-3.39798],[-0.247361],[1.31123],[-0.506144],[-1.13406],[1.0806],[2.1095],[0.144294],[-1.35296],[-0.636699],[-0.539755],[-1.71761],[-0.302778],[4.00004],[4.67274],[-1.50115],[-3.33363],[2.23155],[5.77486],[2.42312],[-3.29905],[-3.70402],[0.4272],[2.04156],[-0.317295],[-1.27547],[1.0806],[2.23525],[-0.0783914],[-2.09116],[-1.25494],[-0.144504],[-0.277723],[0.959145],[3.63864],[2.61091],[-3.52497]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] openturns-1.9/python/test/t_Function_draw.py000077500000000000000000000025751307543307100214360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Simplified interfaces # First, try 1D drawing f = SymbolicFunction("x", "sin(2*_pi*x)*exp(-x^2/2)") print("f=", f) graph = f.draw(-1.2, 1.2, 32) print("graph=", graph) graph.draw("NMFDraw1D.png") # Second, try 2D drawing f = SymbolicFunction( ["x", "y"], ["2.0+x-2*y+x*y-x^2-3*y^2+x*y^2"]) print("f=", f) graph = f.draw(Point(2, -10.0), Point(2, 10.0), Indices(2, 21)) print("graph=", graph) graph.draw("NMFDraw2D.png") # Full interfaces f = SymbolicFunction(["x0", "x1", "x2"], [ "x0 * sin(x1 + 2.0 * x2) - 2.0 * x1 * cos(3.0 * x0 - x2)", "x1 * cos(x2 + 2.0 * x1) + 2.0 * x0 * cos(3.0 * x1 - x0)"]) centralPoint = Point([1.0, -0.5, 1.5]) # First output as a function of first input around central point graph1D = f.draw(0, 0, centralPoint, -5.0, 5.0, 32) print("graph1D=", graph1D) graph1D.draw("NMFDraw1DFull.png") # Second output as a function of second and third inputs around central # point graph2D = f.draw(1, 2, 1, centralPoint, Point( 2, -5.0), Point(2, 5.0), Indices(2, 21)) print("graph1D=", graph2D) graph2D.draw("NMFDraw2DFull.png") except: import sys print("t_Function_draw.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Function_history.expout000066400000000000000000000024711307543307100230660ustar00rootroot00000000000000Is history enabled for f? False input history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] output history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Is history enabled for f? True input history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1],[2],[3]] output history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1],[4],[9]] Is history enabled for f? True input history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] output history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] input history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[0],[1],[2],[3],[0],[1],[2],[3]] output history= class=Full sample_= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[0],[1],[4],[9],[0],[1],[4],[9]] openturns-1.9/python/test/t_Function_history.py000077500000000000000000000022041307543307100221670ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: f = SymbolicFunction("x", "x^2") size = 4 inputSample = Sample(size, 1) for i in range(size): inputSample[i, 0] = i outputSample = f(inputSample) print("Is history enabled for f? ", f.isHistoryEnabled()) print("input history=", f.getHistoryInput()) print("output history=", f.getHistoryOutput()) f.enableHistory() outputSample = f(inputSample) print("Is history enabled for f? ", f.isHistoryEnabled()) print("input history=", f.getHistoryInput()) print("output history=", f.getHistoryOutput()) f.clearHistory() print("Is history enabled for f? ", f.isHistoryEnabled()) print("input history=", f.getHistoryInput()) print("output history=", f.getHistoryOutput()) # Perform the computation twice outputSample = f(inputSample) outputSample = f(inputSample) print("input history=", f.getHistoryInput()) print("output history=", f.getHistoryOutput()) except: import sys print("t_Function_history.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Function_operations.expout000066400000000000000000000023351307543307100235470ustar00rootroot00000000000000myFunction= class=ProductFunction name=Unnamed description=[x0,x1,x2,y0,y1] left function=[x0,x1,x2]->[x0^2 + 2 * x1 * x2 + 3 * x2] right function=[x0,x1,x2]->[x2 - x0 + x1,x0 + x1 * x0 + x2] Value at [1.2,2.3,3.4] = [122.76,200.781] Gradient at [1.2,2.3,3.4] = [[ -16.48 107.688 ] [ 57.88 82.784 ] [ 61.48 83.216 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ 4.2 -4.4 -5.2 ] [ -4.4 13.6 23.4 ] [ -5.2 23.4 15.2 ]] sheet #1 [[ 30.56 52.6 27.48 ] [ 52.6 16.32 30.64 ] [ 27.48 30.64 15.2 ]] mySum= (([x0,x1,x2]->[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0]) + ([x0,x1,x2]->[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1])) Value at [1.2,2.3,3.4] = [33.94,23.72] Gradient at [1.2,2.3,3.4] = [[ 2 -0.7 ] [ 7.8 10.4 ] [ 8.6 7.9 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ 0 0 0 ] [ 0 0 2 ] [ 0 2 0 ]] sheet #1 [[ 0 1 0 ] [ 1 0 3 ] [ 0 3 0 ]] myDiff= (([x0,x1,x2]->[x0 + 2 * x1 * x2 + 3 * x2,x2 - x0 + x1 * x0]) - ([x0,x1,x2]->[x0 + x1 + x2,-2 * x0 + 3 * x2 * x1 - x1])) Value at [1.2,2.3,3.4] = [20.14,-13.8] Gradient at [1.2,2.3,3.4] = [[ 0 3.3 ] [ 5.8 -8 ] [ 6.6 -5.9 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ 0 0 0 ] [ 0 0 2 ] [ 0 2 0 ]] sheet #1 [[ 0 1 0 ] [ 1 0 -3 ] [ 0 -3 0 ]] openturns-1.9/python/test/t_Function_operations.py000077500000000000000000000042061307543307100226550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Product # First, build a function from R^3->R inVar = ["x0", "x1", "x2"] outVar = ["y0"] formula = ["x0^2 + 2 * x1 * x2 + 3 * x2"] f1 = Function(inVar, outVar, formula) # Second, build a function from R^3->R^2 formula = ["x2 - x0 + x1"] formula.append("x0 + x1 * x0 + x2") outVar = ["y0", "y1"] f2 = Function(inVar, outVar, formula) # Third, build the product function myFunction = f1 * f2 inPoint = Point([1.2, 2.3, 3.4]) print("myFunction=", myFunction) value = myFunction(inPoint) print("Value at %s =\n%s" % (inPoint, value)) gradient = myFunction.gradient(inPoint) print("Gradient at %s =\n%s" % (inPoint, gradient)) hessian = myFunction.hessian(inPoint) print("Hessian at %s =\n%s" % (inPoint, hessian)) # Sum/difference # First, build two functions from R^3->R^2 inVar = ["x0", "x1", "x2"] outVar = ["y0", "y1"] formula = ["x0 + 2 * x1 * x2 + 3 * x2", "x2 - x0 + x1 * x0"] f1 = Function(inVar, outVar, formula) formula = ["x0 + x1 + x2", "-2 * x0 + 3 * x2 * x1 - x1"] f2 = Function(inVar, outVar, formula) # Second, build the function mySum = f1 + f2 print("mySum=", mySum) value = mySum(inPoint) print("Value at %s =\n%s" % (inPoint.clean(1e-5), value.clean(1e-5))) gradient = mySum.gradient(inPoint) print("Gradient at %s =\n%s" % (inPoint.clean(1e-5), gradient.clean(1e-5))) hessian = mySum.hessian(inPoint) print("Hessian at %s =\n%s" % (inPoint.clean(1e-5), hessian.clean(1e-5))) myDiff = f1 - f2 print("myDiff=", myDiff) value = myDiff(inPoint) print("Value at %s =\n%s" % (inPoint.clean(1e-5), value.clean(1e-5))) gradient = myDiff.gradient(inPoint) print("Gradient at %s =\n%s" % (inPoint.clean(1e-5), gradient.clean(1e-5))) hessian = myDiff.hessian(inPoint) print("Hessian at %s =\n%s" % (inPoint.clean(1e-5), hessian.clean(1e-5))) except: import sys print("t_Function_operations.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Function_python.expout000066400000000000000000000036631307543307100227120ustar00rootroot00000000000000in_dim=2 out_dim=1 [15.0] [[15.0], [13.0]] myFunc input dimension= 2 myFunc output dimension= 1 class=Point name=Unnamed dimension=2 values=[2,2] class=Point name=Unnamed dimension=1 values=[4] class=Point name=Unnamed dimension=1 values=[21] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[T] data=[[0],[2],[4],[6],[8],[10],[12],[14],[16],[18]] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 description=[T] data=[[200],[202],[204]] calls = 15 hits = 0 T = class=Point name=Unnamed dimension=1 values=[4] calls = 16 hits = 0 T = class=Point name=Unnamed dimension=1 values=[4] calls = 16 hits = 1 T = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[T] data=[[0],[2],[4],[6],[10],[10],[12],[14],[16],[18]] calls = 24 hits = 2 T = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[T] data=[[0],[2],[4],[6],[10],[10],[12],[14],[16],[18]] calls = 24 hits = 12 T = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[T] data=[[0],[2],[4],[6],[10],[10],[12],[14],[16],[18]] calls = 33 hits = 0 exec [ y0 ] 0 : [ 200 ] 1 : [ 202 ] 2 : [ 204 ] exec + exec_sample [ y0 ] 0 : [ 200 ] 1 : [ 202 ] 2 : [ 204 ] exec_sample only on a point [200] exec_sample only on a sample [ y0 ] 0 : [ 200 ] 1 : [ 202 ] 2 : [ 204 ] distributed exec only on a point [200] distributed exec only on a sample [ y0 ] 0 : [ 200 ] 1 : [ 202 ] 2 : [ 204 ] gradient [[ 1 ] [ -1 ]] hessian sheet #0 [[ 0.1 0.3 ] [ 0.3 0.1 ]] no func no function detected : ok. exception handling: ok exception handling: ok openturns-1.9/python/test/t_Function_python.py000077500000000000000000000103721307543307100220140ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import sys TESTPREAMBLE() class FUNC(OpenTURNSPythonFunction): def __init__(self): super(FUNC, self).__init__(2, 1) self.setInputDescription(['R', 'S']) self.setOutputDescription(['T']) def _exec(self, X): Y = [X[0] + X[1]] return Y F = FUNC() print(('in_dim=' + str(F.getInputDimension()) + ' out_dim=' + str(F.getOutputDimension()))) print((F((10, 5)))) print((F(((10, 5), (6, 7))))) # Instance creation myFunc = Function(F) # Copy constructor newFunc = Function(myFunc) print(('myFunc input dimension= ' + str(myFunc.getInputDimension()))) print(('myFunc output dimension= ' + str(myFunc.getOutputDimension()))) inPt = Point(2, 2.) print((repr(inPt))) outPt = myFunc(inPt) print((repr(outPt))) outPt = myFunc((10., 11.)) print((repr(outPt))) inSample = Sample(10, 2) for i in range(10): inSample[i] = Point((i, i)) print((repr(inSample))) outSample = myFunc(inSample) print((repr(outSample))) outSample = myFunc(((100., 100.), (101., 101.), (102., 102.))) print((repr(outSample))) # Test cache behavior myFunc.enableCache() print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) outPt = myFunc(inPt) print(('T = ' + repr(outPt))) print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) outPt = myFunc(inPt) print(('T = ' + repr(outPt))) print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) # duplicate one value inSample[4] = inSample[5] outSample = myFunc(inSample) print(('T = ' + repr(outSample))) print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) outSample = myFunc(inSample) print(('T = ' + repr(outSample))) print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) myFunc.clearCache() outSample = myFunc(inSample) print(('T = ' + repr(outSample))) print(('calls = ' + str(myFunc.getEvaluationCallsNumber()) + ' hits = ' + str(myFunc.getCacheHits()))) # test PythonFunction def a_exec(X): Y = [0] Y[0] = X[0] + X[1] return Y def a_exec_sample(Xs): Ys = [] for X in Xs: Ys.append([X[0] + X[1]]) return Ys a_sample = ((100., 100.), (101., 101.), (102., 102.)) print('exec') myFunc = PythonFunction(2, 1, a_exec) outSample = myFunc(a_sample) print(outSample) print('exec + exec_sample') myFunc = PythonFunction(2, 1, a_exec, a_exec_sample) outSample = myFunc(a_sample) print(outSample) print('exec_sample only on a point') myFunc = PythonFunction(2, 1, func_sample=a_exec_sample) outSample = myFunc([100., 100.]) print(outSample) print('exec_sample only on a sample') myFunc = PythonFunction(2, 1, func_sample=a_exec_sample) outSample = myFunc(a_sample) print(outSample) print('distributed exec only on a point') myFunc = PythonFunction( 2, 1, a_exec, n_cpus=None if sys.platform.startswith('win') else -1) outSample = myFunc([100., 100.]) print(outSample) print('distributed exec only on a sample') myFunc = PythonFunction( 2, 1, a_exec, n_cpus=None if sys.platform.startswith('win') else -1) outSample = myFunc(a_sample) print(outSample) def a_grad(X): # wrong but allows to verify dY = [[1.], [-1.]] return dY print('gradient') myFunc = PythonFunction(2, 1, a_exec, gradient=a_grad) grad = myFunc.gradient([100., 100.]) print(grad) def a_hess(X): # wrong but allows to verify d2Y = [[[0.1], [0.3]], [[0.3], [0.1]]] return d2Y print('hessian') myFunc = PythonFunction(2, 1, a_exec, hessian=a_hess) hess = myFunc.hessian([100., 100.]) print(hess) print('no func') try: myFunc = PythonFunction(2, 1) outSample = myFunc(a_sample) except: # must raise exception print('no function detected : ok.') else: raise Exception('no function not detected!') def a_exec(X): Y = [0] if X[0] == 0.0: raise RuntimeError('Oups') elif X[0] == 1.0: '2' + 2 return Y for n in range(2): myFunc = PythonFunction(1, 1, a_exec) try: X = Point(1, n) myFunc(X) except Exception as exc: # print exc print('exception handling: ok') openturns-1.9/python/test/t_Function_python_saveload.expout000066400000000000000000000014231307543307100245600ustar00rootroot00000000000000saved f1= class=PythonEvaluation name=FUNC saved f2= class=PythonEvaluation name=OpenTURNSPythonFunction loaded f1= class=PythonEvaluation name=FUNC loaded f2= class=PythonEvaluation name=OpenTURNSPythonFunction class=Point name=Unnamed dimension=1 values=[4] class=Point name=Unnamed dimension=1 values=[21] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[T] data=[[0],[2],[4],[6],[8],[10],[12],[14],[16],[18]] class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 description=[T] data=[[200],[202],[204]] openturns-1.9/python/test/t_Function_python_saveload.py000077500000000000000000000024001307543307100236630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import os import openturns as ot ot.TESTPREAMBLE() class FUNC(ot.OpenTURNSPythonFunction): def __init__(self): ot.OpenTURNSPythonFunction.__init__(self, 2, 1) self.setInputDescription(['R', 'S']) self.setOutputDescription(['T']) def _exec(self, X): return [X[0] + X[1]] F = FUNC() # Instance creation f1 = ot.Function(F) def mul(X): return [X[0] * X[1] * X[2]] f2 = ot.PythonFunction(3, 1, mul) st = ot.Study() fileName = 'PyNMF.xml' st.setStorageManager(ot.XMLStorageManager(fileName)) st.add("f1", f1) st.add("f2", f2) st.save() print('saved f1=', f1) print('saved f2=', f2) f1 = ot.Function() f2 = ot.Function() st = ot.Study() st.setStorageManager(ot.XMLStorageManager(fileName)) st.load() st.fillObject("f1", f1) st.fillObject("f2", f2) print('loaded f1=', f1) print('loaded f2=', f2) inPt = ot.Point(2, 2.) outPt = f1(inPt) print(repr(outPt)) outPt = f1((10., 11.)) print(repr(outPt)) inSample = ot.Sample(10, 2) for i in range(10): inSample[i] = ot.Point((i, i)) print(repr(inSample)) outSample = f1(inSample) print(repr(outSample)) outSample = f1(((100., 100.), (101., 101.), (102., 102.))) print(repr(outSample)) os.remove(fileName) openturns-1.9/python/test/t_Function_std.expout000066400000000000000000000053031307543307100221540ustar00rootroot00000000000000myFunc=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1,y2,y3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1,y2,y3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1,y2,y3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1,y2,y3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc input parameter(s)= x1 x2 myFunc output parameter(s) and marginal(s)= y1 Marginal function 0 = class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[x1*sin(x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[x1*sin(x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[x1*sin(x2)] y2 Marginal function 1 = class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y2] formulas=[cos(x1+x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y2] formulas=[cos(x1+x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y2] formulas=[cos(x1+x2)] y3 Marginal function 2 = class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y3] formulas=[(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y3] formulas=[(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y3] formulas=[(x2+1)*exp(x1-2*x2)] openturns-1.9/python/test/t_Function_std.py000077500000000000000000000014471307543307100212700ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Instance creation myFunc = Function( ['x1', 'x2'], ['y1', 'y2', 'y3'], ['x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) # Copy constructor newFunc = Function(myFunc) print("myFunc=" + repr(myFunc)) print("myFunc input parameter(s)=") for i in range(myFunc.getInputDimension()): print(myFunc.getInputDescription()[i]) print("myFunc output parameter(s) and marginal(s)=") for i in range(myFunc.getOutputDimension()): print(myFunc.getOutputDescription()[i]) print("Marginal function", i, "=", repr(myFunc.getMarginal(i))) except: import sys print("t_Function_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalBasisProcess_std.expout000066400000000000000000000025111307543307100250100ustar00rootroot00000000000000process = class=ProcessImplementation dimension=1 description=[y0] mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] timeSerie = [ t y0 ] 0 : [ 0 0 ] 1 : [ 0.1 15.1214 ] 2 : [ 0.2 19.6823 ] 3 : [ 0.3 10.0388 ] 4 : [ 0.4 -8.19027 ] 5 : [ 0.5 -23.8303 ] 6 : [ 0.6 -27.3493 ] 7 : [ 0.7 -16.7578 ] 8 : [ 0.8 1.53599 ] 9 : [ 0.9 17.1672 ] 10 : [ 1 22.3299 ] One future= [ t v0 ] 0 : [ 1.1 16.0431 ] 1 : [ 1.2 3.69774 ] 2 : [ 1.3 -7.2426 ] 3 : [ 1.4 -12.0885 ] Some futures= [field 0: [ t v0 ] 0 : [ 1.1 16.0431 ] 1 : [ 1.2 3.69774 ] 2 : [ 1.3 -7.2426 ] 3 : [ 1.4 -12.0885 ] field 1: [ t v0 ] 0 : [ 1.1 16.0431 ] 1 : [ 1.2 3.69774 ] 2 : [ 1.3 -7.2426 ] 3 : [ 1.4 -12.0885 ] field 2: [ t v0 ] 0 : [ 1.1 16.0431 ] 1 : [ 1.2 3.69774 ] 2 : [ 1.3 -7.2426 ] 3 : [ 1.4 -12.0885 ]] openturns-1.9/python/test/t_FunctionalBasisProcess_std.py000077500000000000000000000022611307543307100241210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: Tmin = 0.0 deltaT = 0.1 N = 11 # Initialization of the RegularGrid timeGrid1 timeGrid = RegularGrid(Tmin, deltaT, N) # Functional basis basisDimension = 10 basis = [] coefficients = DistributionCollection(basisDimension) for i in range(basisDimension): basis.append(SymbolicFunction("x", "sin(" + str(i) + "*x)")) coefficients[i] = Normal(0.0, (1.0 + i)) process = FunctionalBasisProcess( ComposedDistribution(coefficients), Basis(basis)) # Setting the timeGrid process.setTimeGrid(timeGrid) # Print of the process print("process = ", process) # Initialization of the TimeSeries timeSerie = process.getRealization() # Full prints print("timeSerie = ", timeSerie) # Some steps further stepNumber = 4 print("One future=", process.getFuture(stepNumber)) size = 3 print("Some futures=", process.getFuture(stepNumber, size)) except: import sys print("t_FunctionalBasisProcess_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_gsobol.expout000066400000000000000000000257741307543307100241600ustar00rootroot00000000000000################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=10 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.000573216] relative errors= [0.000137995] mean=1.01345049 absolute error=0.01345049 variance=0.62357821 absolute error=0.03485801 Sobol index 0 = 0.51099735 absolute error=0.00474735 Sobol index 1 = 0.23761293 absolute error=0.01261293 Sobol index 2 = 0.14040033 absolute error=0.01383783 Sobol index [0,1] =0.05867496 absolute error=0.01632504 Sobol index [0,2] =0.03374977 absolute error=0.00843773 Sobol index [1,2] =0.01799886 absolute error=0.00075114 Sobol index [0,1,2] =0.00056580 absolute error=0.00568420 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=10 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.000606884] relative errors= [0.000142703] mean=0.99047885 absolute error=0.00952115 variance=0.63728790 absolute error=0.02114832 Sobol index 0 = 0.52950736 absolute error=0.02325736 Sobol index 1 = 0.21767317 absolute error=0.00732683 Sobol index 2 = 0.12841864 absolute error=0.00185614 Sobol index [0,1] =0.06934461 absolute error=0.00565539 Sobol index [0,2] =0.03519369 absolute error=0.00699381 Sobol index [1,2] =0.01986253 absolute error=0.00111253 Sobol index [0,1,2] =0.00000000 absolute error=0.00625000 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=10 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.000614676] relative errors= [0.000156273] mean=0.99807210 absolute error=0.00192790 variance=0.62703738 absolute error=0.03139883 Sobol index 0 = 0.51256233 absolute error=0.00631233 Sobol index 1 = 0.22938303 absolute error=0.00438303 Sobol index 2 = 0.13219046 absolute error=0.00562796 Sobol index [0,1] =0.06495254 absolute error=0.01004746 Sobol index [0,2] =0.04264964 absolute error=0.00046214 Sobol index [1,2] =0.01826201 absolute error=0.00048799 Sobol index [0,1,2] =0.00000000 absolute error=0.00625000 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.00053851] relative errors= [0.000121791] mean=1.01296639 absolute error=0.01296639 variance=0.63583892 absolute error=0.02259730 Sobol index 0 = 0.50644977 absolute error=0.00019977 Sobol index 1 = 0.23511298 absolute error=0.01011298 Sobol index 2 = 0.14038963 absolute error=0.01382713 Sobol index [0,1] =0.06263251 absolute error=0.01236749 Sobol index [0,2] =0.03523395 absolute error=0.00695355 Sobol index [1,2] =0.01842773 absolute error=0.00032227 Sobol index [0,1,2] =0.00175343 absolute error=0.00449657 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.000557229] relative errors= [0.000120306] mean=0.99116011 absolute error=0.00883989 variance=0.64156015 absolute error=0.01687606 Sobol index 0 = 0.53320841 absolute error=0.02695841 Sobol index 1 = 0.21299125 absolute error=0.01200875 Sobol index 2 = 0.13003303 absolute error=0.00347053 Sobol index [0,1] =0.06467882 absolute error=0.01032118 Sobol index [0,2] =0.03746343 absolute error=0.00472407 Sobol index [1,2] =0.02108508 absolute error=0.00233508 Sobol index [0,1,2] =0.00053997 absolute error=0.00571003 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=35 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.000592361] relative errors= [0.000145133] mean=0.99781283 absolute error=0.00218717 variance=0.63105256 absolute error=0.02738366 Sobol index 0 = 0.50996596 absolute error=0.00371596 Sobol index 1 = 0.23004600 absolute error=0.00504600 Sobol index 2 = 0.13009350 absolute error=0.00353100 Sobol index [0,1] =0.06936377 absolute error=0.00563623 Sobol index [0,2] =0.04285013 absolute error=0.00066263 Sobol index [1,2] =0.01760673 absolute error=0.00114327 Sobol index [0,1,2] =0.00007391 absolute error=0.00617609 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=10 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.00142517] relative errors= [0.000853022] mean=0.98477101 absolute error=0.01522899 variance=0.49567647 absolute error=0.16275974 Sobol index 0 = 0.59011522 absolute error=0.08386522 Sobol index 1 = 0.24981618 absolute error=0.02481618 Sobol index 2 = 0.15539195 absolute error=0.02882945 Sobol index [0,1] =0.00010895 absolute error=0.07489105 Sobol index [0,2] =0.00151309 absolute error=0.04067441 Sobol index [1,2] =0.00305461 absolute error=0.01569539 Sobol index [0,1,2] =0.00000000 absolute error=0.00625000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=10 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.00146567] relative errors= [0.00083233] mean=0.97931574 absolute error=0.02068426 variance=0.52887724 absolute error=0.12955897 Sobol index 0 = 0.59033843 absolute error=0.08408843 Sobol index 1 = 0.24956314 absolute error=0.02456314 Sobol index 2 = 0.15943856 absolute error=0.03287606 Sobol index [0,1] =0.00004136 absolute error=0.07495864 Sobol index [0,2] =0.00052156 absolute error=0.04166594 Sobol index [1,2] =0.00009695 absolute error=0.01865305 Sobol index [0,1,2] =0.00000000 absolute error=0.00625000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=10 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.00140226] relative errors= [0.000813295] mean=0.99281332 absolute error=0.00718668 variance=0.50868979 absolute error=0.14974642 Sobol index 0 = 0.58955707 absolute error=0.08330707 Sobol index 1 = 0.25605117 absolute error=0.03105117 Sobol index 2 = 0.15321069 absolute error=0.02664819 Sobol index [0,1] =0.00000469 absolute error=0.07499531 Sobol index [0,2] =0.00090201 absolute error=0.04128549 Sobol index [1,2] =0.00027437 absolute error=0.01847563 Sobol index [0,1,2] =0.00000000 absolute error=0.00625000 openturns-1.9/python/test/t_FunctionalChaos_gsobol.py000077500000000000000000000125331307543307100232540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def sobol(indice, ai): val = 1.0 for i in range(indice.getSize()): val = val * 1.0 / (3.0 * (1.0 + ai[indice[i]]) ** 2.0) return val try: # Problem parameters dimension = 3 # Create the Sobol function # Reference analytical values meanTh = 1.0 a = Point(dimension) inputVariables = Description(dimension) outputVariables = Description(1) outputVariables[0] = "y" formula = Description(1) formula[0] = "1.0" covTh = 1.0 for i in range(dimension): a[i] = 0.5 * i covTh = covTh * (1.0 + 1.0 / (3.0 * (1.0 + a[i]) ** 2)) inputVariables[i] = "xi" + str(i) formula[0] = formula[0] + \ " * ((abs(4.0 * xi" + str(i) + " - 2.0) + " + \ str(a[i]) + ") / (1.0 + " + str(a[i]) + "))" covTh = covTh - 1.0 model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(0.0, 1.0)] * dimension) # Create the orthogonal basis enumerateFunction = LinearEnumerateFunction(dimension) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * dimension, enumerateFunction) # Create the adaptive strategy # We can choose amongst several strategies # First, the most efficient (but more complex!) strategy listAdaptiveStrategy = list() degree = 4 indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree // 2) threshold = 1.0e-6 listAdaptiveStrategy.append( CleaningStrategy(productBasis, indexMax, basisDimension, threshold, False)) # Second, the most used (and most basic!) strategy listAdaptiveStrategy.append( FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))) # Third, a slight enhancement with respect to the basic strategy listAdaptiveStrategy.append( SequentialStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree // 2), False)) for adaptiveStrategyIndex in range(len(listAdaptiveStrategy)): adaptiveStrategy = listAdaptiveStrategy[adaptiveStrategyIndex] # Create the projection strategy samplingSize = 250 listProjectionStrategy = list() # Monte Carlo sampling listProjectionStrategy.append( LeastSquaresStrategy(MonteCarloExperiment(samplingSize))) # LHS sampling listProjectionStrategy.append( LeastSquaresStrategy(LHSExperiment(samplingSize))) # Low Discrepancy sequence listProjectionStrategy.append(LeastSquaresStrategy( LowDiscrepancyExperiment(SobolSequence(), samplingSize))) for projectionStrategyIndex in range(len(listProjectionStrategy)): projectionStrategy = listProjectionStrategy[ projectionStrategyIndex] # Create the polynomial chaos algorithm maximumResidual = 1.0e-10 algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) algo.setMaximumResidual(maximumResidual) RandomGenerator.SetSeed(0) algo.run() # Examine the results result = FunctionalChaosResult(algo.getResult()) print("###################################") print(algo.getAdaptiveStrategy()) print(algo.getProjectionStrategy()) # print "coefficients=", result.getCoefficients() residuals = result.getResiduals() print("residuals=", residuals) relativeErrors = result.getRelativeErrors() print("relative errors=", relativeErrors) # Post-process the results vector = FunctionalChaosRandomVector(result) mean = vector.getMean()[0] print("mean=%.8f" % mean, "absolute error=%.8f" % fabs(mean - meanTh)) variance = vector.getCovariance()[0, 0] print("variance=%.8f" % variance, "absolute error=%.8f" % fabs(variance - covTh)) indices = Indices(1) for i in range(dimension): indices[0] = i value = vector.getSobolIndex(i) print("Sobol index", i, "= %.8f" % value, "absolute error=%.8f" % fabs(value - sobol(indices, a) / covTh)) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.8f" % fabs( value - sobol(indices, a) / covTh)) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.8f" % fabs(value - sobol(indices, a) / covTh)) except: import sys print("t_FunctionalChaos_gsobol.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_gsobol_sparse.expout000066400000000000000000000035401307543307100255200ustar00rootroot00000000000000coeffs = 0 : [ 0.961893 ] 1 : [ 0.23725 ] 2 : [ 0.157245 ] 3 : [ 0.0611527 ] 4 : [ 0.0204323 ] 5 : [ -0.0015851 ] 6 : [ -0.0412671 ] 7 : [ -0.027549 ] 8 : [ -0.0219898 ] 9 : [ 0.00986382 ] 10 : [ 0.0320248 ] 11 : [ 0.0198174 ] 12 : [ -0.00244136 ] 13 : [ -0.00432115 ] 14 : [ -0.00766779 ] 15 : [ -0.00745624 ] 16 : [ -0.00502061 ] 17 : [ -0.0101333 ] 18 : [ 0.0112252 ] 19 : [ -0.00250379 ] 20 : [ 0.0168928 ] 21 : [ 0.026029 ] 22 : [ 0.00646896 ] 23 : [ 0.0130916 ] 24 : [ 0.00520319 ] 25 : [ 0.0197484 ] 26 : [ -0.000950185 ] 27 : [ -0.0081094 ] 28 : [ 0.00339982 ] 29 : [ -0.0011655 ] 30 : [ -0.0132109 ] 31 : [ -0.0237317 ] 32 : [ -0.026485 ] 33 : [ -0.00367227 ] 34 : [ 0.00358307 ] 35 : [ -0.00730491 ] 36 : [ 0.00413715 ] 37 : [ 0.00217953 ] 38 : [ -0.0048057 ] 39 : [ 0.00262715 ] 40 : [ 0.0172036 ] 41 : [ 0.000815265 ] 42 : [ -0.0083601 ] 43 : [ -0.00927762 ] 44 : [ 0.00473758 ] 45 : [ -0.000907697 ] 46 : [ -0.0129698 ] 47 : [ -0.0180804 ] residuals = [0.000138694] relative errors = [1.80612e-05] coeffs = 0 : [ 0.961274 ] 1 : [ 0.237628 ] 2 : [ 0.155141 ] 3 : [ 0.0656271 ] 4 : [ 0.023241 ] 5 : [ -0.0495285 ] 6 : [ -0.0307734 ] 7 : [ -0.0188016 ] 8 : [ 0.00619862 ] 9 : [ 0.0189202 ] 10 : [ 0.0244676 ] 11 : [ -0.0115662 ] 12 : [ -0.0106377 ] 13 : [ -0.00689405 ] 14 : [ 0.023976 ] 15 : [ 0.0233564 ] 16 : [ 0.0205347 ] 17 : [ 0.00134944 ] 18 : [ 0.00375397 ] 19 : [ -0.00530109 ] 20 : [ -0.0110302 ] 21 : [ -0.0247311 ] 22 : [ -0.0196563 ] 23 : [ -0.00993382 ] 24 : [ 0.00326686 ] 25 : [ 0.00939696 ] 26 : [ 0.00655561 ] 27 : [ 0.0177861 ] 28 : [ 0.00438853 ] 29 : [ -0.014147 ] 30 : [ 0.00803075 ] 31 : [ -0.0131491 ] 32 : [ -0.0216348 ] residuals = [0.00026907] relative errors = [0.000734432] openturns-1.9/python/test/t_FunctionalChaos_gsobol_sparse.py000077500000000000000000000047251307543307100246350ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Log.Show( Log.Flags() | Log.INFO ) # Problem parameters dimension = 8 # Create the Ishigami function # Reference analytical values meanTh = 1.0 covTh = 1.0 a = Point(dimension) a[0] = 1.0 a[1] = 2.0 a[2] = 5.0 a[3] = 10.0 a[4] = 20.0 a[5] = 50.0 a[6] = 100.0 a[7] = 500.0 inputVariables = Description(dimension) outputVariables = Description(1) outputVariables[0] = "y" formula = Description(1) formula[0] = "1.0" for i in range(dimension): covTh = covTh * (1.0 + 1.0 / (3.0 * (1.0 + a[i]) ** 2)) inputVariables[i] = "xi" + str(i) formula[0] = formula[0] + \ " * ((abs(4.0 * xi" + str(i) + " - 2.0) + " + \ str(a[i]) + ") / (1.0 + " + str(a[i]) + "))" covTh = covTh - 1.0 model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(0.0, 1.0)] * dimension) # Create the orthogonal basis q = 0.4 enumerateFunction = HyperbolicAnisotropicEnumerateFunction(dimension, q) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * dimension, enumerateFunction) # design experiment samplingSize = 75 # build basis basisSize = enumerateFunction.getStrataCumulatedCardinal(30) listFittingAlgorithm = list() listFittingAlgorithm.append(KFold()) listFittingAlgorithm.append(CorrectedLeaveOneOut()) for fittingAlgorithmIndex in range(len(listFittingAlgorithm)): fittingAlgorithm = listFittingAlgorithm[fittingAlgorithmIndex] adaptiveStrategy = FixedStrategy(productBasis, basisSize) projectionStrategy = LeastSquaresStrategy(LowDiscrepancyExperiment( SobolSequence(dimension), samplingSize), LeastSquaresMetaModelSelectionFactory(LARS(), fittingAlgorithm)) algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) RandomGenerator.SetSeed(0) algo.run() result = algo.getResult() print("coeffs = ", result.getCoefficients()) print("residuals = ", result.getResiduals()) print("relative errors = ", result.getRelativeErrors()) except: import sys print("t_LeastSquaresMetaModelSelection_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_ishigami.expout000066400000000000000000000457521307543307100244630ustar00rootroot00000000000000################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.00198384] relativeErrors= [7.12093e-05] mean=3.46342005 absolute error=0.0365799482 variance=13.50334313 absolute error=0.3412448109 Sobol index 0 = 0.31585299 absolute error=0.0019477974 Sobol index 1 = 0.42761607 absolute error=0.0147950720 Sobol index 2 = 0.00000169 absolute error=0.0000016866 Sobol index [0,1] =0.00001628 absolute error=0.0000162807 Sobol index [0,2] =0.25602203 absolute error=0.0123383686 Sobol index [1,2] =0.00035373 absolute error=0.0003537299 Sobol index [0,1,2] =0.00013721 absolute error=0.0001372088 Sobol total index 0 =0.57202851 absolute error=0.0144396556 Sobol total index 1 =0.42812329 absolute error=0.0142878525 Sobol total index 2 =0.25651466 absolute error=0.0128309938 Sobol total index [0,1] =0.00001628 absolute error=0.0000162807 Sobol total index [0,2] =0.25602203 absolute error=0.0123383686 Sobol total index [1,2] =0.00035373 absolute error=0.0003537299 Sobol total index [0,1,2] =0.00013721 absolute error=0.0001372088 Sobol grouped index 0 =0.31585299 absolute error=0.2417358667 Sobol grouped index 1 =0.42761607 absolute error=0.0147950720 Sobol grouped index 2 =0.00000169 absolute error=0.2436819775 Sobol grouped index [0,1] =0.74348534 absolute error=0.7434853421 Sobol grouped index [0,2] =0.57187671 absolute error=0.3281930437 Sobol grouped index [1,2] =0.42797149 absolute error=0.4279714892 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.00205131] relativeErrors= [7.8601e-05] mean=3.54042934 absolute error=0.0404293402 variance=13.37475093 absolute error=0.4698370155 Sobol index 0 = 0.31288968 absolute error=0.0010155152 Sobol index 1 = 0.45251412 absolute error=0.0101029787 Sobol index 2 = 0.00039482 absolute error=0.0003948151 Sobol index [0,1] =0.00050315 absolute error=0.0005031478 Sobol index [0,2] =0.23225190 absolute error=0.0114317673 Sobol index [1,2] =0.00130394 absolute error=0.0013039361 Sobol index [0,1,2] =0.00014240 absolute error=0.0001424047 Sobol total index 0 =0.54578713 absolute error=0.0118017299 Sobol total index 1 =0.45446361 absolute error=0.0120524673 Sobol total index 2 =0.23409305 absolute error=0.0095906113 Sobol total index [0,1] =0.00050315 absolute error=0.0005031478 Sobol total index [0,2] =0.23225190 absolute error=0.0114317673 Sobol total index [1,2] =0.00130394 absolute error=0.0013039361 Sobol total index [0,1,2] =0.00014240 absolute error=0.0001424047 Sobol grouped index 0 =0.31288968 absolute error=0.2446991792 Sobol grouped index 1 =0.45251412 absolute error=0.0101029787 Sobol grouped index 2 =0.00039482 absolute error=0.2432888489 Sobol grouped index [0,1] =0.76590695 absolute error=0.7659069473 Sobol grouped index [0,2] =0.54553639 absolute error=0.3018527238 Sobol grouped index [1,2] =0.45421287 absolute error=0.4542128747 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.00183731] relativeErrors= [6.16204e-05] mean=3.52113827 absolute error=0.0211382679 variance=13.62209540 absolute error=0.2224925455 Sobol index 0 = 0.31794192 absolute error=0.0040367337 Sobol index 1 = 0.43569734 absolute error=0.0067138095 Sobol index 2 = 0.00000141 absolute error=0.0000014063 Sobol index [0,1] =0.00004580 absolute error=0.0000458036 Sobol index [0,2] =0.24415868 absolute error=0.0004750191 Sobol index [1,2] =0.00043642 absolute error=0.0004364176 Sobol index [0,1,2] =0.00171843 absolute error=0.0017184293 Sobol total index 0 =0.56386484 absolute error=0.0062759857 Sobol total index 1 =0.43789799 absolute error=0.0045131590 Sobol total index 2 =0.24631494 absolute error=0.0026312723 Sobol total index [0,1] =0.00004580 absolute error=0.0000458036 Sobol total index [0,2] =0.24415868 absolute error=0.0004750191 Sobol total index [1,2] =0.00043642 absolute error=0.0004364176 Sobol total index [0,1,2] =0.00171843 absolute error=0.0017184293 Sobol grouped index 0 =0.31794192 absolute error=0.2396469304 Sobol grouped index 1 =0.43569734 absolute error=0.0067138095 Sobol grouped index 2 =0.00000141 absolute error=0.2436822578 Sobol grouped index [0,1] =0.75368506 absolute error=0.7536850637 Sobol grouped index [0,2] =0.56210201 absolute error=0.3184183502 Sobol grouped index [1,2] =0.43613516 absolute error=0.4361351591 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.00152475] relativeErrors= [4.2065e-05] mean=3.45801565 absolute error=0.0419843459 variance=13.83830987 absolute error=0.0062780708 Sobol index 0 = 0.30611627 absolute error=0.0077889249 Sobol index 1 = 0.43754215 absolute error=0.0048689900 Sobol index 2 = 0.00129087 absolute error=0.0012908667 Sobol index [0,1] =0.00254496 absolute error=0.0025449599 Sobol index [0,2] =0.24156455 absolute error=0.0021191136 Sobol index [1,2] =0.00386170 absolute error=0.0038616988 Sobol index [0,1,2] =0.00707950 absolute error=0.0070795030 Sobol total index 0 =0.55730528 absolute error=0.0002835755 Sobol total index 1 =0.45102832 absolute error=0.0086171717 Sobol total index 2 =0.25379662 absolute error=0.0101129549 Sobol total index [0,1] =0.00254496 absolute error=0.0025449599 Sobol total index [0,2] =0.24156455 absolute error=0.0021191136 Sobol total index [1,2] =0.00386170 absolute error=0.0038616988 Sobol total index [0,1,2] =0.00707950 absolute error=0.0070795030 Sobol grouped index 0 =0.30611627 absolute error=0.2514725889 Sobol grouped index 1 =0.43754215 absolute error=0.0048689900 Sobol grouped index 2 =0.00129087 absolute error=0.2423927974 Sobol grouped index [0,1] =0.74620338 absolute error=0.7462033810 Sobol grouped index [0,2] =0.54897168 absolute error=0.3052880194 Sobol grouped index [1,2] =0.44269472 absolute error=0.4426947203 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.00156941] relativeErrors= [4.60089e-05] mean=3.48612447 absolute error=0.0138755275 variance=14.20287519 absolute error=0.3582872529 Sobol index 0 = 0.30217019 absolute error=0.0117349971 Sobol index 1 = 0.44116695 absolute error=0.0012441910 Sobol index 2 = 0.00453457 absolute error=0.0045345679 Sobol index [0,1] =0.00771703 absolute error=0.0077170275 Sobol index [0,2] =0.23077723 absolute error=0.0129064377 Sobol index [1,2] =0.00605848 absolute error=0.0060584783 Sobol index [0,1,2] =0.00757555 absolute error=0.0075755522 Sobol total index 0 =0.54824000 absolute error=0.0093488551 Sobol total index 1 =0.46251801 absolute error=0.0201068669 Sobol total index 2 =0.24894582 absolute error=0.0052621606 Sobol total index [0,1] =0.00771703 absolute error=0.0077170275 Sobol total index [0,2] =0.23077723 absolute error=0.0129064377 Sobol total index [1,2] =0.00605848 absolute error=0.0060584783 Sobol total index [0,1,2] =0.00757555 absolute error=0.0075755522 Sobol grouped index 0 =0.30217019 absolute error=0.2554186611 Sobol grouped index 1 =0.44116695 absolute error=0.0012441910 Sobol grouped index 2 =0.00453457 absolute error=0.2391490962 Sobol grouped index [0,1] =0.75105418 absolute error=0.7510541753 Sobol grouped index [0,2] =0.53748199 absolute error=0.2937983243 Sobol grouped index [1,2] =0.45176000 absolute error=0.4517599999 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.0015633] relativeErrors= [4.46114e-05] mean=3.52947075 absolute error=0.0294707509 variance=13.72885940 absolute error=0.1157285436 Sobol index 0 = 0.31135035 absolute error=0.0025548383 Sobol index 1 = 0.42587317 absolute error=0.0165379771 Sobol index 2 = 0.00040887 absolute error=0.0004088663 Sobol index [0,1] =0.00314638 absolute error=0.0031463799 Sobol index [0,2] =0.25121369 absolute error=0.0075300230 Sobol index [1,2] =0.00251830 absolute error=0.0025182974 Sobol index [0,1,2] =0.00548925 absolute error=0.0054892488 Sobol total index 0 =0.57119967 absolute error=0.0136108134 Sobol total index 1 =0.43702709 absolute error=0.0053840510 Sobol total index 2 =0.25963010 absolute error=0.0159464355 Sobol total index [0,1] =0.00314638 absolute error=0.0031463799 Sobol total index [0,2] =0.25121369 absolute error=0.0075300230 Sobol total index [1,2] =0.00251830 absolute error=0.0025182974 Sobol total index [0,1,2] =0.00548925 absolute error=0.0054892488 Sobol grouped index 0 =0.31135035 absolute error=0.2462385024 Sobol grouped index 1 =0.42587317 absolute error=0.0165379771 Sobol grouped index 2 =0.00040887 absolute error=0.2432747978 Sobol grouped index [0,1] =0.74036990 absolute error=0.7403699004 Sobol grouped index [0,2] =0.56297291 absolute error=0.3192892421 Sobol grouped index [1,2] =0.42880033 absolute error=0.4288003314 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 residuals= [0.0102878] relativeErrors= [0.00191499] mean=3.28650656 absolute error=0.2134934362 variance=7.75137655 absolute error=6.0932113942 Sobol index 0 = 0.52244589 absolute error=0.2085406983 Sobol index 1 = 0.06987169 absolute error=0.3725394500 Sobol index 2 = 0.00752121 absolute error=0.0075212085 Sobol index [0,1] =0.00019922 absolute error=0.0001992166 Sobol index [0,2] =0.38826631 absolute error=0.1445826450 Sobol index [1,2] =0.00372946 absolute error=0.0037294629 Sobol index [0,1,2] =0.00796622 absolute error=0.0079662188 Sobol total index 0 =0.91887763 absolute error=0.3612887786 Sobol total index 1 =0.08176659 absolute error=0.3606445517 Sobol total index 2 =0.40748320 absolute error=0.1637995351 Sobol total index [0,1] =0.00019922 absolute error=0.0001992166 Sobol total index [0,2] =0.38826631 absolute error=0.1445826450 Sobol total index [1,2] =0.00372946 absolute error=0.0037294629 Sobol total index [0,1,2] =0.00796622 absolute error=0.0079662188 Sobol grouped index 0 =0.52244589 absolute error=0.0351429658 Sobol grouped index 1 =0.06987169 absolute error=0.3725394500 Sobol grouped index 2 =0.00752121 absolute error=0.2361624556 Sobol grouped index [0,1] =0.59251680 absolute error=0.5925168008 Sobol grouped index [0,2] =0.91823341 absolute error=0.6745497429 Sobol grouped index [1,2] =0.08112237 absolute error=0.0811223662 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.0101725] relativeErrors= [0.00193297] mean=3.52041463 absolute error=0.0204146288 variance=7.57391020 absolute error=6.2706777401 Sobol index 0 = 0.53501083 absolute error=0.2211056349 Sobol index 1 = 0.05983606 absolute error=0.3825750812 Sobol index 2 = 0.00081681 absolute error=0.0008168108 Sobol index [0,1] =0.02003858 absolute error=0.0200385798 Sobol index [0,2] =0.37604516 absolute error=0.1323614969 Sobol index [1,2] =0.00825255 absolute error=0.0082525547 Sobol index [0,1,2] =0.00000000 absolute error=0.0000000040 Sobol total index 0 =0.93109457 absolute error=0.3735057157 Sobol total index 1 =0.08812720 absolute error=0.3542839427 Sobol total index 2 =0.38511453 absolute error=0.1414308665 Sobol total index [0,1] =0.02003858 absolute error=0.0200385798 Sobol total index [0,2] =0.37604516 absolute error=0.1323614969 Sobol total index [1,2] =0.00825255 absolute error=0.0082525547 Sobol total index [0,1,2] =0.00000000 absolute error=0.0000000040 Sobol grouped index 0 =0.53501083 absolute error=0.0225780291 Sobol grouped index 1 =0.05983606 absolute error=0.3825750812 Sobol grouped index 2 =0.00081681 absolute error=0.2428668532 Sobol grouped index [0,1] =0.61488547 absolute error=0.6148854694 Sobol grouped index [0,2] =0.91187280 absolute error=0.6681891338 Sobol grouped index [1,2] =0.06890543 absolute error=0.0689054291 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LowDiscrepancyExperiment name=Unnamed sequence=class=LowDiscrepancySequence implementation=class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=3 coefficients=[1747396655419752448,2864289363007635456,4305441243766194176] seed=251 distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 restart=true residuals= [0.0107385] relativeErrors= [0.00210498] mean=3.54673436 absolute error=0.0467343609 variance=6.36939443 absolute error=7.4751935072 Sobol index 0 = 0.66794880 absolute error=0.3540436052 Sobol index 1 = 0.03503890 absolute error=0.4073722398 Sobol index 2 = 0.00167597 absolute error=0.0016759697 Sobol index [0,1] =0.00107792 absolute error=0.0010779238 Sobol index [0,2] =0.29044446 absolute error=0.0467607950 Sobol index [1,2] =0.00310003 absolute error=0.0031000318 Sobol index [0,1,2] =0.00071391 absolute error=0.0007139144 Sobol total index 0 =0.96018509 absolute error=0.4025962383 Sobol total index 1 =0.03993077 absolute error=0.4024803698 Sobol total index 2 =0.29593437 absolute error=0.0522507109 Sobol total index [0,1] =0.00107792 absolute error=0.0010779238 Sobol total index [0,2] =0.29044446 absolute error=0.0467607950 Sobol total index [1,2] =0.00310003 absolute error=0.0031000318 Sobol total index [0,1,2] =0.00071391 absolute error=0.0007139144 Sobol grouped index 0 =0.66794880 absolute error=0.1103599411 Sobol grouped index 1 =0.03503890 absolute error=0.4073722398 Sobol grouped index 2 =0.00167597 absolute error=0.2420076944 Sobol grouped index [0,1] =0.70406563 absolute error=0.7040656250 Sobol grouped index [0,2] =0.96006923 absolute error=0.7163855610 Sobol grouped index [1,2] =0.03981491 absolute error=0.0398149065 Sobol grouped index [0,1,2] =1.00000000 absolute error=1.0000000000 openturns-1.9/python/test/t_FunctionalChaos_ishigami.py000077500000000000000000000171211307543307100235570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Problem parameters dimension = 3 a = 7.0 b = 0.1 # Reference analytical values meanTh = a / 2 covTh = (b ** 2 * pi ** 8) / 18.0 + \ (b * pi ** 4) / 5.0 + (a ** 2) / 8.0 + 1.0 / 2.0 sob_1 = [(b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh, (a ** 2 / 8.0) / covTh, 0.0] sob_2 = [ 0.0, (b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh, 0.0] sob_3 = [0.0] sob_T1 = [sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0], sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0], sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]] sob_T2 = [sob_2[0] + sob_2[1] + sob_3[0], sob_2[0] + sob_2[2] + sob_3[0], sob_2[1] + sob_2[2] + sob_3[0]] sob_T3 = [sob_3[0]] # Create the Ishigami function inputVariables = Description(dimension) inputVariables[0] = "xi1" inputVariables[1] = "xi2" inputVariables[2] = "xi3" outputVariables = Description(1) outputVariables[0] = "y" formula = Description(1) formula[0] = "sin(xi1) + (" + str(a) + \ ") * (sin(xi2)) ^ 2 + (" + str( b) + ") * xi3^4 * sin(xi1)" model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(-pi, pi)] * dimension) # Create the orthogonal basis enumerateFunction = LinearEnumerateFunction(dimension) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * dimension, enumerateFunction) # Create the adaptive strategy # We can choose amongst several strategies # First, the most efficient (but more complex!) strategy listAdaptiveStrategy = list() degree = 6 indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree // 2) threshold = 1.0e-6 listAdaptiveStrategy.append( CleaningStrategy(productBasis, indexMax, basisDimension, threshold, False)) # Second, the most used (and most basic!) strategy listAdaptiveStrategy.append( FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))) # Third, a slight enhancement with respect to the basic strategy listAdaptiveStrategy.append( SequentialStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree // 2), False)) for adaptiveStrategyIndex in range(len(listAdaptiveStrategy)): adaptiveStrategy = listAdaptiveStrategy[adaptiveStrategyIndex] # Create the projection strategy samplingSize = 250 listProjectionStrategy = list() # We have only the LeastSquaresStrategy up to now (0.13.0) but we can choose several sampling schemes # Monte Carlo sampling listProjectionStrategy.append( LeastSquaresStrategy(MonteCarloExperiment(samplingSize))) # LHS sampling listProjectionStrategy.append( LeastSquaresStrategy(LHSExperiment(samplingSize))) # Low Discrepancy sequence listProjectionStrategy.append(LeastSquaresStrategy( LowDiscrepancyExperiment(SobolSequence(), samplingSize))) for projectionStrategyIndex in range(len(listProjectionStrategy)): projectionStrategy = listProjectionStrategy[ projectionStrategyIndex] # Create the polynomial chaos algorithm maximumResidual = 1.0e-10 algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) algo.setMaximumResidual(maximumResidual) RandomGenerator.SetSeed(0) algo.run() # Examine the results result = FunctionalChaosResult(algo.getResult()) print("###################################") print(algo.getAdaptiveStrategy()) print(algo.getProjectionStrategy()) # print "coefficients=", result.getCoefficients() residuals = result.getResiduals() print("residuals=", residuals) relativeErrors = result.getRelativeErrors() print("relativeErrors=", relativeErrors) # Post-process the results vector = FunctionalChaosRandomVector(result) mean = vector.getMean()[0] print("mean=%.8f" % mean, "absolute error=%.10f" % fabs(mean - meanTh)) variance = vector.getCovariance()[0, 0] print("variance=%.8f" % variance, "absolute error=%.10f" % fabs(variance - covTh)) for i in range(dimension): value = vector.getSobolIndex(i) print("Sobol index", i, "= %.8f" % value, "absolute error=%.10f" % fabs(value - sob_1[i])) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_2[k])) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_3[0])) for i in range(dimension): value = vector.getSobolTotalIndex(i) print("Sobol total index", i, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_T1[i])) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolIndex(indices) print("Sobol total index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_2[k])) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolTotalIndex(indices) print("Sobol total index ", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_3[0])) for i in range(dimension): value = vector.getSobolGroupedIndex(i) print("Sobol grouped index", i, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_T1[i])) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolGroupedIndex(indices) print("Sobol grouped index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_2[k])) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolGroupedIndex(indices) print("Sobol grouped index ", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_3[0])) except: import sys print("t_FunctionalChaos_ishigami.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_ishigami_database.expout000066400000000000000000000275521307543307100263050ustar00rootroot00000000000000################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.00183731] relativeErrors= [6.16204e-05] mean=3.52113827 absolute error=0.0211382679 variance=13.62209540 absolute error=0.2224925455 Sobol index 0 = 0.31794192 absolute error=0.0040367337 Sobol index 1 = 0.43569734 absolute error=0.0067138095 Sobol index 2 = 0.00000141 absolute error=0.0000014063 Sobol index [0,1] =0.00004580 absolute error=0.0000458036 Sobol index [0,2] =0.24415868 absolute error=0.0004750191 Sobol index [1,2] =0.00043642 absolute error=0.0004364176 Sobol index [0,1,2] =0.00171843 absolute error=0.0017184293 Sobol total index 0 =0.56386484 absolute error=0.0062759857 Sobol total index 1 =0.43789799 absolute error=0.0045131590 Sobol total index 2 =0.24631494 absolute error=0.0026312723 Sobol total index [0,1] =0.00004580 absolute error=0.0000458036 Sobol total index [0,2] =0.24415868 absolute error=0.0004750191 Sobol total index [1,2] =0.00043642 absolute error=0.0004364176 Sobol total index [0,1,2] =0.00171843 absolute error=0.0017184293 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.00197231] relativeErrors= [8.89613e-05] mean=3.51972123 absolute error=0.0197212272 variance=13.59298523 absolute error=0.2516027058 Sobol index 0 = 0.31923587 absolute error=0.0053306780 Sobol index 1 = 0.43639617 absolute error=0.0060149749 Sobol index 2 = 0.00000000 absolute error=0.0000000000 Sobol index [0,1] =0.00000000 absolute error=0.0000000000 Sobol index [0,2] =0.24436796 absolute error=0.0006842969 Sobol index [1,2] =0.00000000 absolute error=0.0000000000 Sobol index [0,1,2] =0.00000000 absolute error=0.0000000000 Sobol total index 0 =0.56360383 absolute error=0.0060149749 Sobol total index 1 =0.43639617 absolute error=0.0060149749 Sobol total index 2 =0.24436796 absolute error=0.0006842969 Sobol total index [0,1] =0.00000000 absolute error=0.0000000000 Sobol total index [0,2] =0.24436796 absolute error=0.0006842969 Sobol total index [1,2] =0.00000000 absolute error=0.0000000000 Sobol total index [0,1,2] =0.00000000 absolute error=0.0000000000 ################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.0782409] relativeErrors= [0] mean=3.57690572 absolute error=0.0769057245 variance=14.86914494 absolute error=1.0245570037 Sobol index 0 = 0.29130318 absolute error=0.0226020099 Sobol index 1 = 0.39832680 absolute error=0.0440843416 Sobol index 2 = 0.00062391 absolute error=0.0006239110 Sobol index [0,1] =0.00931554 absolute error=0.0093155371 Sobol index [0,2] =0.26319037 absolute error=0.0195067022 Sobol index [1,2] =0.01460970 absolute error=0.0146096968 Sobol index [0,1,2] =0.02263050 absolute error=0.0226305044 Sobol total index 0 =0.58643959 absolute error=0.0288507338 Sobol total index 1 =0.44488254 absolute error=0.0024713967 Sobol total index 2 =0.30105448 absolute error=0.0573708144 Sobol total index [0,1] =0.00931554 absolute error=0.0093155371 Sobol total index [0,2] =0.26319037 absolute error=0.0195067022 Sobol total index [1,2] =0.01460970 absolute error=0.0146096968 Sobol total index [0,1,2] =0.02263050 absolute error=0.0226305044 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.0015633] relativeErrors= [4.46114e-05] mean=3.52947075 absolute error=0.0294707509 variance=13.72885940 absolute error=0.1157285436 Sobol index 0 = 0.31135035 absolute error=0.0025548383 Sobol index 1 = 0.42587317 absolute error=0.0165379771 Sobol index 2 = 0.00040887 absolute error=0.0004088663 Sobol index [0,1] =0.00314638 absolute error=0.0031463799 Sobol index [0,2] =0.25121369 absolute error=0.0075300230 Sobol index [1,2] =0.00251830 absolute error=0.0025182974 Sobol index [0,1,2] =0.00548925 absolute error=0.0054892488 Sobol total index 0 =0.57119967 absolute error=0.0136108134 Sobol total index 1 =0.43702709 absolute error=0.0053840510 Sobol total index 2 =0.25963010 absolute error=0.0159464355 Sobol total index [0,1] =0.00314638 absolute error=0.0031463799 Sobol total index [0,2] =0.25121369 absolute error=0.0075300230 Sobol total index [1,2] =0.00251830 absolute error=0.0025182974 Sobol total index [0,1,2] =0.00548925 absolute error=0.0054892488 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.00186978] relativeErrors= [8.25367e-05] mean=3.52361492 absolute error=0.0236149151 variance=13.62089732 absolute error=0.2236906178 Sobol index 0 = 0.31594346 absolute error=0.0020382686 Sobol index 1 = 0.43512170 absolute error=0.0072894407 Sobol index 2 = 0.00000000 absolute error=0.0000000000 Sobol index [0,1] =0.00000000 absolute error=0.0000000000 Sobol index [0,2] =0.24688054 absolute error=0.0031968719 Sobol index [1,2] =0.00000000 absolute error=0.0000000000 Sobol index [0,1,2] =0.00205430 absolute error=0.0020543003 Sobol total index 0 =0.56487830 absolute error=0.0072894407 Sobol total index 1 =0.43717600 absolute error=0.0052351404 Sobol total index 2 =0.24893484 absolute error=0.0052511721 Sobol total index [0,1] =0.00000000 absolute error=0.0000000000 Sobol total index [0,2] =0.24688054 absolute error=0.0031968719 Sobol total index [1,2] =0.00000000 absolute error=0.0000000000 Sobol total index [0,1,2] =0.00205430 absolute error=0.0020543003 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.0865757] relativeErrors= [0] mean=3.57690572 absolute error=0.0769057245 variance=15.31685750 absolute error=1.4722695545 Sobol index 0 = 0.28586286 absolute error=0.0280423353 Sobol index 1 = 0.38758073 absolute error=0.0548304190 Sobol index 2 = 0.00285725 absolute error=0.0028572505 Sobol index [0,1] =0.01429542 absolute error=0.0142954159 Sobol index [0,2] =0.25857104 absolute error=0.0148873764 Sobol index [1,2] =0.02057755 absolute error=0.0205775453 Sobol index [0,1,2] =0.03025517 absolute error=0.0302551663 Sobol total index 0 =0.58898448 absolute error=0.0313956232 Sobol total index 1 =0.45270885 absolute error=0.0102977084 Sobol total index 2 =0.31226100 absolute error=0.0685773385 Sobol total index [0,1] =0.01429542 absolute error=0.0142954159 Sobol total index [0,2] =0.25857104 absolute error=0.0148873764 Sobol total index [1,2] =0.02057755 absolute error=0.0205775453 Sobol total index [0,1,2] =0.03025517 absolute error=0.0302551663 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.0107385] relativeErrors= [0.00210498] mean=3.54673436 absolute error=0.0467343609 variance=6.36939443 absolute error=7.4751935072 Sobol index 0 = 0.66794880 absolute error=0.3540436052 Sobol index 1 = 0.03503890 absolute error=0.4073722398 Sobol index 2 = 0.00167597 absolute error=0.0016759697 Sobol index [0,1] =0.00107792 absolute error=0.0010779238 Sobol index [0,2] =0.29044446 absolute error=0.0467607950 Sobol index [1,2] =0.00310003 absolute error=0.0031000318 Sobol index [0,1,2] =0.00071391 absolute error=0.0007139144 Sobol total index 0 =0.96018509 absolute error=0.4025962383 Sobol total index 1 =0.03993077 absolute error=0.4024803698 Sobol total index 2 =0.29593437 absolute error=0.0522507109 Sobol total index [0,1] =0.00107792 absolute error=0.0010779238 Sobol total index [0,2] =0.29044446 absolute error=0.0467607950 Sobol total index [1,2] =0.00310003 absolute error=0.0031000318 Sobol total index [0,1,2] =0.00071391 absolute error=0.0007139144 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.0107763] relativeErrors= [0.00230957] mean=3.53848004 absolute error=0.0384800409 variance=6.35015933 absolute error=7.4944286102 Sobol index 0 = 0.67140179 absolute error=0.3574966007 Sobol index 1 = 0.03519957 absolute error=0.4072115718 Sobol index 2 = 0.00000000 absolute error=0.0000000000 Sobol index [0,1] =0.00000000 absolute error=0.0000000000 Sobol index [0,2] =0.29339864 absolute error=0.0497149711 Sobol index [1,2] =0.00000000 absolute error=0.0000000000 Sobol index [0,1,2] =0.00000000 absolute error=0.0000000000 Sobol total index 0 =0.96480043 absolute error=0.4072115718 Sobol total index 1 =0.03519957 absolute error=0.4072115718 Sobol total index 2 =0.29339864 absolute error=0.0497149711 Sobol total index [0,1] =0.00000000 absolute error=0.0000000000 Sobol total index [0,2] =0.29339864 absolute error=0.0497149711 Sobol total index [1,2] =0.00000000 absolute error=0.0000000000 Sobol total index [0,1,2] =0.00000000 absolute error=0.0000000000 ################################### class=AdaptiveStrategy implementation=class=SequentialStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=20 class=ProjectionStrategy implementation=class=IntegrationStrategy experiment=class=MonteCarloExperiment name=Unnamed distribution=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=100 residuals= [0.170595] relativeErrors= [0] mean=3.57690572 absolute error=0.0769057245 variance=6.77931359 absolute error=7.0652743527 Sobol index 0 = 0.63905368 absolute error=0.3251484854 Sobol index 1 = 0.05806625 absolute error=0.3843448970 Sobol index 2 = 0.00230777 absolute error=0.0023077680 Sobol index [0,1] =0.00294293 absolute error=0.0029429332 Sobol index [0,2] =0.29574183 absolute error=0.0520581665 Sobol index [1,2] =0.00055223 absolute error=0.0005522324 Sobol index [0,1,2] =0.00133531 absolute error=0.0013353116 Sobol total index 0 =0.93907375 absolute error=0.3814848966 Sobol total index 1 =0.06289672 absolute error=0.3795144198 Sobol total index 2 =0.29993714 absolute error=0.0562534784 Sobol total index [0,1] =0.00294293 absolute error=0.0029429332 Sobol total index [0,2] =0.29574183 absolute error=0.0520581665 Sobol total index [1,2] =0.00055223 absolute error=0.0005522324 Sobol total index [0,1,2] =0.00133531 absolute error=0.0013353116 openturns-1.9/python/test/t_FunctionalChaos_ishigami_database.py000077500000000000000000000151101307543307100253770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Problem parameters dimension = 3 a = 7.0 b = 0.1 # Reference analytical values meanTh = a / 2 covTh = (b ** 2 * pi ** 8) / 18.0 + \ (b * pi ** 4) / 5.0 + (a ** 2) / 8.0 + 1.0 / 2.0 sob_1 = [(b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh, (a ** 2 / 8.0) / covTh, 0.0] sob_2 = [ 0.0, (b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh, 0.0] sob_3 = [0.0] sob_T1 = [sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0], sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0], sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]] sob_T2 = [sob_2[0] + sob_2[1] + sob_3[0], sob_2[0] + sob_2[2] + sob_3[0], sob_2[1] + sob_2[2] + sob_3[0]] sob_T3 = [sob_3[0]] # Create the Ishigami function inputVariables = Description(dimension) inputVariables[0] = "xi1" inputVariables[1] = "xi2" inputVariables[2] = "xi3" outputVariables = Description(1) outputVariables[0] = "y" formula = Description(1) formula[0] = "sin(xi1) + (" + str(a) + \ ") * (sin(xi2)) ^ 2 + (" + str( b) + ") * xi3^4 * sin(xi1)" model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(-pi, pi)] * dimension) # Create the orthogonal basis enumerateFunction = LinearEnumerateFunction(dimension) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * dimension, enumerateFunction) # Create the projection strategy samplingSize = 250 listProjectionStrategy = list() # Monte Carlo sampling inputSample = LowDiscrepancyExperiment( SobolSequence(), distribution, samplingSize).generate() outputSample = model(inputSample) # From here, the model is no more needed listProjectionStrategy.append(LeastSquaresStrategy()) listProjectionStrategy.append(LeastSquaresStrategy( LeastSquaresMetaModelSelectionFactory(LARS(), CorrectedLeaveOneOut()))) listProjectionStrategy.append(IntegrationStrategy()) # Create the adaptive strategy # We can choose amongst several strategies # First, the most efficient (but more complex!) strategy degree = 6 listAdaptiveStrategy = list() indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree // 2) threshold = 1.0e-6 listAdaptiveStrategy.append( CleaningStrategy(productBasis, indexMax, basisDimension, threshold, False)) # Second, the most used (and most basic!) strategy listAdaptiveStrategy.append( FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))) # Third, a slight enhancement with respect to the basic strategy listAdaptiveStrategy.append( SequentialStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree // 2), False)) for adaptiveStrategyIndex in range(len(listAdaptiveStrategy)): adaptiveStrategy = listAdaptiveStrategy[adaptiveStrategyIndex] for projectionStrategyIndex in range(len(listProjectionStrategy)): projectionStrategy = listProjectionStrategy[ projectionStrategyIndex] # Create the polynomial chaos algorithm maximumResidual = 1.0e-10 algo = FunctionalChaosAlgorithm( inputSample, outputSample, distribution, adaptiveStrategy, projectionStrategy) algo.setMaximumResidual(maximumResidual) RandomGenerator.SetSeed(0) algo.run() # Examine the results result = FunctionalChaosResult(algo.getResult()) print("###################################") print(AdaptiveStrategy(adaptiveStrategy)) print(ProjectionStrategy(projectionStrategy)) # print "coefficients=", result.getCoefficients() residuals = result.getResiduals() print("residuals=", residuals) relativeErrors = result.getRelativeErrors() print("relativeErrors=", relativeErrors) # Post-process the results vector = FunctionalChaosRandomVector(result) mean = vector.getMean()[0] print("mean=%.8f" % mean, "absolute error=%.10f" % fabs(mean - meanTh)) variance = vector.getCovariance()[0, 0] print("variance=%.8f" % variance, "absolute error=%.10f" % fabs(variance - covTh)) for i in range(dimension): value = vector.getSobolIndex(i) print("Sobol index", i, "= %.8f" % value, "absolute error=%.10f" % fabs(value - sob_1[i])) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_2[k])) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolIndex(indices) print("Sobol index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_3[0])) for i in range(dimension): value = vector.getSobolTotalIndex(i) print("Sobol total index", i, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_T1[i])) indices = Indices(2) k = 0 for i in range(dimension): indices[0] = i for j in range(i + 1, dimension): indices[1] = j value = vector.getSobolIndex(indices) print("Sobol total index", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_2[k])) k = k + 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolTotalIndex(indices) print("Sobol total index ", indices, "=%.8f" % value, "absolute error=%.10f" % fabs(value - sob_3[0])) except: import sys print("t_FunctionalChaos_ishigami.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_ishigami_sparse.expout000066400000000000000000000033501307543307100260240ustar00rootroot00000000000000coeffs = 0 : [ 3.50064 ] 1 : [ 1.6251 ] 2 : [ -0.593014 ] 3 : [ -1.29235 ] 4 : [ 1.37183 ] 5 : [ -1.94994 ] 6 : [ 5.71514e-05 ] 7 : [ 0.195858 ] 8 : [ -1.09326 ] 9 : [ 0.409022 ] 10 : [ 0.000563483 ] 11 : [ -0.00015688 ] 12 : [ -8.15185e-05 ] 13 : [ 1.35967 ] 14 : [ -0.00035393 ] 15 : [ -0.010686 ] 16 : [ 0.164277 ] 17 : [ -0.326119 ] 18 : [ 0.00224536 ] 19 : [ 0.000321079 ] 20 : [ 0.00179013 ] 21 : [ -0.336109 ] 22 : [ -0.00115584 ] 23 : [ -0.000608568 ] 24 : [ -0.00787737 ] 25 : [ 0.000510091 ] 26 : [ 0.0514133 ] 27 : [ -0.000369702 ] 28 : [ -0.00118681 ] 29 : [ 0.00142616 ] 30 : [ -0.000686008 ] 31 : [ -0.00267992 ] 32 : [ -0.000924827 ] 33 : [ 0.000407682 ] 34 : [ 0.0473871 ] 35 : [ 0.000960004 ] 36 : [ -0.00215534 ] residuals = [2.81377e-05] relative errors = [3.14134e-09] coeffs = 0 : [ 3.50064 ] 1 : [ 1.6251 ] 2 : [ -0.593014 ] 3 : [ -1.29235 ] 4 : [ 1.37183 ] 5 : [ -1.94994 ] 6 : [ 5.71514e-05 ] 7 : [ 0.195858 ] 8 : [ -1.09326 ] 9 : [ 0.409022 ] 10 : [ 0.000563483 ] 11 : [ -0.00015688 ] 12 : [ -8.15185e-05 ] 13 : [ 1.35967 ] 14 : [ -0.00035393 ] 15 : [ -0.010686 ] 16 : [ 0.164277 ] 17 : [ -0.326119 ] 18 : [ 0.00224536 ] 19 : [ 0.000321079 ] 20 : [ 0.00179013 ] 21 : [ -0.336109 ] 22 : [ -0.00115584 ] 23 : [ -0.000608568 ] 24 : [ -0.00787737 ] 25 : [ 0.000510091 ] 26 : [ 0.0514133 ] 27 : [ -0.000369702 ] 28 : [ -0.00118681 ] 29 : [ 0.00142616 ] 30 : [ -0.000686008 ] 31 : [ -0.00267992 ] 32 : [ -0.000924827 ] 33 : [ 0.000407682 ] 34 : [ 0.0473871 ] 35 : [ 0.000960004 ] 36 : [ -0.00215534 ] residuals = [2.81377e-05] relative errors = [1.43801e-07] openturns-1.9/python/test/t_FunctionalChaos_ishigami_sparse.py000077500000000000000000000055411307543307100251370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Log.Show( Log.Flags() | Log.INFO ) # Problem parameters dimension = 3 a = 7.0 b = 0.1 # Reference analytical values meanTh = a / 2 covTh = (b ** 2 * pi ** 8) / 18.0 + \ (b * pi ** 4) / 5.0 + (a ** 2) / 8.0 + 1.0 / 2.0 sob_1 = [(b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh, (a ** 2 / 8.0) / covTh, 0.0] sob_2 = [ 0.0, (b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh, 0.0] sob_3 = [0.0] sob_T1 = [sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0], sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0], sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]] sob_T2 = [sob_2[0] + sob_2[1] + sob_3[0], sob_2[0] + sob_2[2] + sob_3[0], sob_2[1] + sob_2[2] + sob_3[0]] sob_T3 = [sob_3[0]] # Create the Ishigami function inputVariables = Description(dimension) inputVariables[0] = "xi1" inputVariables[1] = "xi2" inputVariables[2] = "xi3" outputVariables = Description(1) outputVariables[0] = "y" formula = Description(1) formula[0] = "sin(xi1) + (" + str(a) + \ ") * (sin(xi2)) ^ 2 + (" + str( b) + ") * xi3^4 * sin(xi1)" model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(-pi, pi)] * dimension) # Create the orthogonal basis enumerateFunction = LinearEnumerateFunction(dimension) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * dimension, enumerateFunction) # design experiment samplingSize = 75 # build basis degree = 10 basisSize = enumerateFunction.getStrataCumulatedCardinal(degree) # run algorithm lar = LARS() listFittingAlgorithm = list() listFittingAlgorithm.append(KFold()) listFittingAlgorithm.append(CorrectedLeaveOneOut()) for fittingAlgorithmIndex in range(len(listFittingAlgorithm)): fittingAlgorithm = listFittingAlgorithm[fittingAlgorithmIndex] adaptiveStrategy = FixedStrategy(productBasis, basisSize) projectionStrategy = LeastSquaresStrategy(LowDiscrepancyExperiment( SobolSequence(dimension), samplingSize), LeastSquaresMetaModelSelectionFactory(LARS(), fittingAlgorithm)) algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) RandomGenerator.SetSeed(0) algo.run() result = algo.getResult() print("coeffs = ", result.getCoefficients()) print("residuals = ", result.getResiduals()) print("relative errors = ", result.getRelativeErrors()) except: import sys print("t_LeastSquaresMetaModelSelection_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_FunctionalChaos_nd.expout000066400000000000000000000122441307543307100232600ustar00rootroot00000000000000################################### class=AdaptiveStrategy implementation=class=CleaningStrategy maximum size=20 significance factor=1e-06 derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.000333364,0.00205131] relative errors= [4.30584e-05,7.8601e-05] output= 0 mean= 0.99922 absolute error=7.78430e-04 variance=0.64968 absolute error=8.75764e-03 value= 0.51156 Sobol index 0 =0.51156 absolute error=5.30902e-03 value= 0.22835 Sobol index 1 =0.22835 absolute error=3.34656e-03 value= 0.12201 Sobol index 2 =0.12201 absolute error=4.55256e-03 Sobol index [0,1] =0.07645 absolute error=1.45087e-03 Sobol index [0,2] =0.03673 absolute error=5.45355e-03 Sobol index [1,2] =0.01848 absolute error=2.66520e-04 Sobol index [0,1,2] =0.00642 absolute error=1.66182e-04 Sobol total index 0 =0.63116 absolute error=1.47251e-03 Sobol total index 1 =0.32970 absolute error=4.69709e-03 Sobol total index 2 =0.18364 absolute error=1.01065e-02 Sobol total index [0,1] =0.08287 absolute error=1.61705e-03 Sobol total index [0,2] =0.04315 absolute error=5.28737e-03 Sobol total index [1,2] =0.02490 absolute error=1.00338e-04 Sobol total index [0,1,2] =0.00642 absolute error=6.41618e-03 output= 1 mean= 3.54043 absolute error=4.04293e-02 variance=13.37475 absolute error=4.69837e-01 value= 0.31289 Sobol index 0 =0.31289 absolute error=1.01552e-03 value= 0.45251 Sobol index 1 =0.45251 absolute error=1.01030e-02 value= 0.00039482 Sobol index 2 =0.00039 absolute error=3.94815e-04 Sobol index [0,1] =0.00050 absolute error=5.03148e-04 Sobol index [0,2] =0.23225 absolute error=1.14318e-02 Sobol index [1,2] =0.00130 absolute error=1.30394e-03 Sobol index [0,1,2] =0.00014 absolute error=1.42405e-04 Sobol total index 0 =0.54579 absolute error=1.18017e-02 Sobol total index 1 =0.45446 absolute error=1.20525e-02 Sobol total index 2 =0.23409 absolute error=9.59061e-03 Sobol total index [0,1] =0.00065 absolute error=6.45553e-04 Sobol total index [0,2] =0.23239 absolute error=1.12894e-02 Sobol total index [1,2] =0.00145 absolute error=1.44634e-03 Sobol total index [0,1,2] =0.00014 absolute error=1.42405e-04 ################################### class=AdaptiveStrategy implementation=class=FixedStrategy derived from class=AdaptiveStrategyImplementation maximumDimension=84 class=ProjectionStrategy implementation=class=LeastSquaresStrategy experiment=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-1 b=1 size=250 alwaysShuffle=false random shift=true residuals= [0.000270407,0.00156941] relative errors= [2.83306e-05,4.60089e-05] output= 0 mean= 0.99342 absolute error=6.57762e-03 variance=0.63987 absolute error=1.85655e-02 value= 0.5044 Sobol index 0 =0.50440 absolute error=1.85237e-03 value= 0.21952 Sobol index 1 =0.21952 absolute error=5.47532e-03 value= 0.12588 Sobol index 2 =0.12588 absolute error=6.82054e-04 Sobol index [0,1] =0.07467 absolute error=3.25314e-04 Sobol index [0,2] =0.03953 absolute error=2.65394e-03 Sobol index [1,2] =0.02183 absolute error=3.07721e-03 Sobol index [0,1,2] =0.01416 absolute error=7.91178e-03 Sobol total index 0 =0.63277 absolute error=3.08016e-03 Sobol total index 1 =0.33019 absolute error=5.18836e-03 Sobol total index 2 =0.20140 absolute error=7.65300e-03 Sobol total index [0,1] =0.08884 absolute error=7.58646e-03 Sobol total index [0,2] =0.05370 absolute error=5.25784e-03 Sobol total index [1,2] =0.03599 absolute error=1.09890e-02 Sobol total index [0,1,2] =0.01416 absolute error=1.41618e-02 output= 1 mean= 3.48612 absolute error=1.38755e-02 variance=14.20288 absolute error=3.58287e-01 value= 0.30217 Sobol index 0 =0.30217 absolute error=1.17350e-02 value= 0.44117 Sobol index 1 =0.44117 absolute error=1.24419e-03 value= 0.0045346 Sobol index 2 =0.00453 absolute error=4.53457e-03 Sobol index [0,1] =0.00772 absolute error=7.71703e-03 Sobol index [0,2] =0.23078 absolute error=1.29064e-02 Sobol index [1,2] =0.00606 absolute error=6.05848e-03 Sobol index [0,1,2] =0.00758 absolute error=7.57555e-03 Sobol total index 0 =0.54824 absolute error=9.34886e-03 Sobol total index 1 =0.46252 absolute error=2.01069e-02 Sobol total index 2 =0.24895 absolute error=5.26216e-03 Sobol total index [0,1] =0.01529 absolute error=1.52926e-02 Sobol total index [0,2] =0.23835 absolute error=5.33089e-03 Sobol total index [1,2] =0.01363 absolute error=1.36340e-02 Sobol total index [0,1,2] =0.00758 absolute error=7.57555e-03 openturns-1.9/python/test/t_FunctionalChaos_nd.py000077500000000000000000000230031307543307100223620ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def sobol(indices, a): value = 1.0 for i in range(indices.getSize()): value *= 1.0 / (3.0 * (1.0 + a[indices[i]]) ** 2) return value try: # Problem parameters inputDimension = 3 outputDimension = 2 # Reference analytical values meanTh_Sobol = 1.0 covTh_Sobol = 1.0 kappa = Point(inputDimension) a = 7.0 b = 0.1 # Create the gSobol function inputVariables = Description(inputDimension) outputVariables = Description(outputDimension) outputVariables[0] = "y0" outputVariables[1] = "y1" formula = Description(outputDimension) formula[0] = "1.0" for i in range(inputDimension): kappa[i] = 0.5 * i covTh_Sobol *= 1.0 + 1.0 / (3.0 * (1.0 + kappa[i]) ** 2) inputVariables[i] = "xi" + str(i) formula[0] = formula[0] + \ " * ((abs(4.0 * xi" + str(i) + " - 2.0) + " + \ str(kappa[i]) + ") / (1.0 + " + str(kappa[i]) + "))" formula[1] = "sin(" + str(-pi) + " + 2 * " + str(pi) + " * xi0) + (" + str(a) + ") * (sin(" + str(-pi) + " + 2 * " + str(pi) + " * xi1)) ^ 2 + (" + \ str(b) + ") * (" + str(-pi) + " + 2 * " + str( pi) + " * xi2)^4 * sin(" + str(-pi) + " + 2 * " + str(pi) + " * xi0)" covTh_Sobol -= 1 # Reference analytical values meanTh_Ishigami = a / 2.0 covTh_Ishigami = b ** 2 * pi ** 8 / 18.0 + \ (b * pi ** 4) / 5.0 + a ** 2 / 8.0 + 1.0 / 2.0 sob_1_Ishigami = Point(3) sob_1_Ishigami[0] = ( b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh_Ishigami sob_1_Ishigami[1] = (a ** 2 / 8.0) / covTh_Ishigami sob_1_Ishigami[2] = 0.0 sob_2_Ishigami = Point(3) sob_2_Ishigami[0] = 0.0 sob_2_Ishigami[1] = ( b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh_Ishigami sob_2_Ishigami[2] = 0.0 sob_3_Ishigami = Point(1, 0.0) # Multidimensional reference values # Mean meanTh = Point(outputDimension) meanTh[0] = meanTh_Sobol meanTh[1] = meanTh_Ishigami # Covariance covTh = CovarianceMatrix(outputDimension) covTh[0, 0] = covTh_Sobol covTh[1, 1] = covTh_Ishigami # 1rst order Sobol sob_1 = Point(inputDimension * outputDimension) indices = Indices(1) indices[0] = 0 sob_1[0] = sobol(indices, kappa) / covTh_Sobol indices[0] = 1 sob_1[1] = sobol(indices, kappa) / covTh_Sobol indices[0] = 2 sob_1[2] = sobol(indices, kappa) / covTh_Sobol sob_1[3] = sob_1_Ishigami[0] sob_1[4] = sob_1_Ishigami[1] sob_1[5] = sob_1_Ishigami[2] # 2nd order Sobol sob_2 = Point(inputDimension * outputDimension) indices = Indices(2) indices[0] = 0 indices[1] = 1 sob_2[0] = sobol(indices, kappa) / covTh_Sobol indices[1] = 2 sob_2[1] = sobol(indices, kappa) / covTh_Sobol indices[0] = 1 indices[1] = 2 sob_2[2] = sobol(indices, kappa) / covTh_Sobol sob_2[3] = sob_2_Ishigami[0] sob_2[4] = sob_2_Ishigami[1] sob_2[5] = sob_2_Ishigami[2] # 3rd order Sobol sob_3 = Point(outputDimension) indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 sob_3[0] = sobol(indices, kappa) / covTh_Sobol sob_3[1] = sob_3_Ishigami[0] # 1rst order Total Sobol sob_T1 = Point(inputDimension * outputDimension) sob_T1[0] = sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0] sob_T1[1] = sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0] sob_T1[2] = sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0] sob_T1[3] = sob_1[3] + sob_2[3] + sob_2[4] + sob_3[1] sob_T1[4] = sob_1[4] + sob_2[3] + sob_2[5] + sob_3[1] sob_T1[5] = sob_1[5] + sob_2[4] + sob_2[5] + sob_3[1] sob_T2 = Point(inputDimension * outputDimension) sob_T2[0] = sob_2[0] + sob_3[0] sob_T2[1] = sob_2[1] + sob_3[0] sob_T2[2] = sob_2[2] + sob_3[0] sob_T2[3] = sob_2[3] + sob_3[1] sob_T2[4] = sob_2[4] + sob_3[1] sob_T2[5] = sob_2[5] + sob_3[1] # 3rd order Total Sobol sob_T3 = Point(sob_3) model = Function(inputVariables, outputVariables, formula) # Create the input distribution distribution = ComposedDistribution([Uniform(0.0, 1.0)] * inputDimension) # Create the orthogonal basis enumerateFunction = LinearEnumerateFunction(inputDimension) productBasis = OrthogonalProductPolynomialFactory( [LegendreFactory()] * inputDimension, enumerateFunction) # Create the adaptive strategy # We can choose amongst several strategies # First, the most efficient (but more complex!) strategy listAdaptiveStrategy = list() degree = 6 indexMax = enumerateFunction.getStrataCumulatedCardinal(degree) basisDimension = enumerateFunction.getStrataCumulatedCardinal(degree // 2) threshold = 1.0e-6 listAdaptiveStrategy.append( CleaningStrategy(productBasis, indexMax, basisDimension, threshold, False)) # Second, the most used (and most basic!) strategy listAdaptiveStrategy.append( FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(degree))) for adaptiveStrategyIndex in range(len(listAdaptiveStrategy)): adaptiveStrategy = listAdaptiveStrategy[adaptiveStrategyIndex] # Create the projection strategy samplingSize = 250 listProjectionStrategy = list() # LHS experiment listProjectionStrategy.append( LeastSquaresStrategy(LHSExperiment(samplingSize))) for projectionStrategyIndex in range(len(listProjectionStrategy)): projectionStrategy = listProjectionStrategy[ projectionStrategyIndex] # Create the polynomial chaos algorithm maximumResidual = 1.0e-10 algo = FunctionalChaosAlgorithm( model, distribution, adaptiveStrategy, projectionStrategy) algo.setMaximumResidual(maximumResidual) # Reinitialize the RandomGenerator to see the effect of the # sampling method only RandomGenerator.SetSeed(0) algo.run() # Examine the results result = algo.getResult() print("###################################") print(algo.getAdaptiveStrategy()) print(algo.getProjectionStrategy()) residuals = result.getResiduals() print("residuals=", residuals) relativeErrors = result.getRelativeErrors() print("relative errors=", relativeErrors) # Post-process the results vector = FunctionalChaosRandomVector(result) for outputIndex in range(outputDimension): print("output=", outputIndex) mean = vector.getMean()[outputIndex] print("mean= %.5f" % mean, "absolute error=%.5e" % abs(mean - meanTh[outputIndex])) variance = vector.getCovariance()[outputIndex, outputIndex] print("variance=%.5f" % variance, "absolute error=%.5e" % abs(variance - covTh[outputIndex, outputIndex])) indices = Indices(1) for i in range(inputDimension): indices[0] = i value = vector.getSobolIndex(i, outputIndex) print("value= %.5g" % value) print("Sobol index ", i, " =%.5f" % value, "absolute error=%.5e" % abs( value - sob_1[i + inputDimension * outputIndex])) indices = Indices(2) k = 0 for i in range(inputDimension): indices[0] = i for j in range(i + 1, inputDimension): indices[1] = j value = vector.getSobolIndex(indices, outputIndex) print("Sobol index ", indices, " =%.5f" % value, "absolute error=%.5e" % abs( value - sob_2[k + inputDimension * outputIndex])) k += 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolIndex(indices, outputIndex) print("Sobol index ", indices, " =%.5f" % value, "absolute error=%.5e" % abs(value - sob_3[outputIndex])) for i in range(inputDimension): value = vector.getSobolTotalIndex(i, outputIndex) print("Sobol total index ", i, " =%.5f" % value, "absolute error=%.5e" % abs( value - sob_T1[i + inputDimension * outputIndex])) indices = Indices(2) k = 0 for i in range(inputDimension): indices[0] = i for j in range(i + 1, inputDimension): indices[1] = j value = vector.getSobolTotalIndex(indices, outputIndex) print("Sobol total index ", indices, " =%.5f" % value, "absolute error=%.5e" % abs( value - sob_T2[k + inputDimension * outputIndex])) k += 1 indices = Indices(3) indices[0] = 0 indices[1] = 1 indices[2] = 2 value = vector.getSobolTotalIndex(indices, outputIndex) print("Sobol total index ", indices, " =%.5f" % value, "absolute error=%.5e" % abs(value - sob_T3[1])) except: import sys print("t_FunctionalChaos_nd.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GammaFactory_std.expout000066400000000000000000000020111307543307100227320ustar00rootroot00000000000000distribution= class=Gamma name=Gamma dimension=1 k=0.2 lambda=1 gamma=1 Estimated distribution= class=Gamma name=Gamma dimension=1 k=0.222723 lambda=1.12563 gamma=0.9999 distribution= class=Gamma name=Gamma dimension=1 k=2.3 lambda=1 gamma=1 Estimated distribution= class=Gamma name=Gamma dimension=1 k=2.1923 lambda=0.974143 gamma=1.06104 Distribution = Gamma(k = 2.3, lambda = 1, gamma = 1) Estimated distribution= Gamma(k = 2.26872, lambda = 0.995441, gamma = 1.02147) Default distribution= Gamma(k = 1, lambda = 1, gamma = 0) Distribution from parameters= Gamma(k = 2.3, lambda = 1, gamma = 1) Gamma = Gamma(k = 2.3, lambda = 1, gamma = 1) Estimated gamma= Gamma(k = 2.26872, lambda = 0.995441, gamma = 1.02147) Default gamma= Gamma(k = 1, lambda = 1, gamma = 0) Gamma from parameters= Gamma(k = 2.3, lambda = 1, gamma = 1) Estimated distribution= class=Gamma name=Gamma dimension=1 k=2.53274e+305 lambda=1 gamma=0 Estimated distribution= class=Gamma name=Gamma dimension=1 k=2.53274e+305 lambda=1 gamma=0.9999 openturns-1.9/python/test/t_GammaFactory_std.py000077500000000000000000000035631307543307100220560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Gamma(0.2, 1.0, 1.0) size = 10000 sample = distribution.getSample(size) factory = GammaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Gamma(2.3, 1.0, 1.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) distribution = Gamma(2.3, 1.0, 1.0) sample = distribution.getSample(size) estimatedDistribution = factory.build(sample) print("Distribution =", distribution) print("Estimated distribution=", estimatedDistribution) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedGamma = factory.buildAsGamma(sample) print("Gamma =", distribution) print("Estimated gamma=", estimatedGamma) estimatedGamma = factory.buildAsGamma() print("Default gamma=", estimatedGamma) estimatedGamma = factory.buildAsGamma( distribution.getParameter()) print("Gamma from parameters=", estimatedGamma) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_GammaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Gamma_std.expout000066400000000000000000000072501307543307100214140ustar00rootroot00000000000000Distribution Gamma(k = 1.5, lambda = 2.5, gamma = -0.5) Elliptical = False Continuous = True oneRealization= [0.281847] oneSample first= [-0.263977] last= [-0.375541] mean= [0.101621] covariance= [[ 0.247946 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [1] ddf = [-0.278355] ddf (FD)= -0.278355 log pdf= -2.05205 pdf =0.128471 pdf (FD)=0.128471 cdf= 0.942442 ccdf= 0.0575585 survival= 0.0575585 characteristic function=(0.892418, 0.0632527) log characteristic function=(-0.111315, 0.0707596) pdf gradient = [0.16512,-0.115624,0.278355] pdf gradient (FD)= [0.16512,-0.115624,0.278355] cdf gradient = [-0.0875625,0.0770828,-0.128471] cdf gradient (FD)= [-0.0875625,0.0770828,-0.128471] quantile= [1.06295] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.429631] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.499368, 1.06337] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.18978} with f= MinimumVolumeLevelSetEvaluation(Gamma(k = 1.5, lambda = 2.5, gamma = -0.5)) beta= [0.111942] Bilateral confidence interval= [-0.456841, 1.36968] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 1.06295] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.429631, 13.1546] beta= [0.95] mean= [0.1] covariance= [[ 0.24 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[k : 1.5, lambda : 2.5, gamma : -0.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [1.5] standard moment n= 2 , value= [3.75] standard moment n= 3 , value= [13.125] standard moment n= 4 , value= [59.0625] standard moment n= 5 , value= [324.844] Standard representative= Gamma(k = 1.5, lambda = 1, gamma = 0) standard deviation= [0.489898] skewness= [1.63299] kurtosis= [7] Distribution Gamma(k = 15, lambda = 2.5, gamma = 0) Elliptical = False Continuous = True oneRealization= [6.03324] oneSample first= [4.73401] last= [3.93099] mean= [6.02305] covariance= [[ 2.44857 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [1] ddf = [1.00845e-05] ddf (FD)= 1.00845e-05 log pdf= -13.9469 pdf =8.76911e-07 pdf (FD)=8.76911e-07 cdf= 6.91531e-08 ccdf= 1 survival= 1 characteristic function=(0.275588, -0.178824) log characteristic function=(-1.11315, 5.7076) pdf gradient = [-1.54166e-06,4.38456e-06,-1.00845e-05] pdf gradient (FD)= [-1.54166e-06,4.38456e-06,-1.00845e-05] cdf gradient = [-1.26959e-07,3.50764e-07,-8.76911e-07] cdf gradient (FD)= [-1.26959e-07,3.50764e-07,-8.76911e-07] quantile= [8.75459] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[3.69853] Survival(inverseSurvival)=0.950000 Minimum volume interval= [3.1431, 9.09027] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.27167} with f= MinimumVolumeLevelSetEvaluation(Gamma(k = 15, lambda = 2.5, gamma = 0)) beta= [0.037943] Bilateral confidence interval= [3.35815, 9.39585] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 8.75459] beta= [0.95] Unilateral confidence interval (upper tail)= [3.69853, 26.3665] beta= [0.95] mean= [6] covariance= [[ 2.4 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[k : 15, lambda : 2.5, gamma : 0]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [15] standard moment n= 2 , value= [240] standard moment n= 3 , value= [4080] standard moment n= 4 , value= [73440] standard moment n= 5 , value= [1.39536e+06] Standard representative= Gamma(k = 15, lambda = 1, gamma = 0) standard deviation= [1.54919] skewness= [0.516398] kurtosis= [3.4] openturns-1.9/python/test/t_Gamma_std.py000077500000000000000000000150101307543307100205140ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) for distribution in [Gamma(1.5, 2.5, -0.5), Gamma(15.0, 2.5)]: print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is ", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) print("ddf (FD)= %.6g" % ((distribution.computePDF(point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps))) LPDF = distribution.computeLogPDF(point) print("log pdf= %.6g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6g" % PDF) print("pdf (FD)=%.6g" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.6g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.6g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.6g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = Point(3) PDFgrFD[0] = (Gamma(distribution.getK() + eps, distribution.getLambda(), distribution.getGamma()).computePDF(point) - Gamma(distribution.getK() - eps, distribution.getLambda(), distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Gamma(distribution.getK(), distribution.getLambda() + eps, distribution.getGamma()).computePDF(point) - Gamma(distribution.getK(), distribution.getLambda() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() + eps).computePDF(point) - Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = Point(3) CDFgrFD[0] = (Gamma(distribution.getK() + eps, distribution.getLambda(), distribution.getGamma()).computeCDF(point) - Gamma(distribution.getK() - eps, distribution.getLambda(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Gamma(distribution.getK(), distribution.getLambda() + eps, distribution.getGamma()).computeCDF(point) - Gamma(distribution.getK(), distribution.getLambda() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() + eps).computeCDF(point) - Gamma(distribution.getK(), distribution.getLambda(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) openturns-1.9/python/test/t_GaussKronrod_std.expout000066400000000000000000000037531307543307100230170ustar00rootroot00000000000000Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G3K7)) value=-0.590348 , ref=-0.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G7K15)) value=-0.590348 , ref=-0.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G11K23)) value=-0.590348 , ref=-0.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G15K31)) value=-0.590348 , ref=-0.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G25K51)) value=-0.590348 , ref=-0.590348 , true error below bound? True , estimated error below bound? False Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G3K7)) value=4.590348 , ref=4.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G7K15)) value=4.590348 , ref=4.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G11K23)) value=4.590348 , ref=4.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G15K31)) value=4.590348 , ref=4.590348 , true error below bound? True , estimated error below bound? True Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G25K51)) value=4.590347 , ref=4.590348 , true error below bound? False , estimated error below bound? False openturns-1.9/python/test/t_GaussKronrod_std.py000077500000000000000000000054131307543307100221210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import math TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # First, a smooth function f = SymbolicFunction("x", "sin(x)") a = -2.5 b = 4.5 # Default parameters algo = GaussKronrod() rules = [GaussKronrodRule(GaussKronrodRule.G3K7), GaussKronrodRule( GaussKronrodRule.G7K15), GaussKronrodRule(GaussKronrodRule.G11K23), GaussKronrodRule(GaussKronrodRule.G15K31), GaussKronrodRule(GaussKronrodRule.G25K51)] for i in range(len(rules)): algo.setRule(rules[i]) print("Algo=", algo) # High-level interface error = Point() value = algo.integrate(f, Interval(a, b), error)[0] ref = math.cos(a) - math.cos(b) print("value=%.6f" % value, ", ref=%.6f" % ref, ", true error below bound? ", abs(ref - value) < algo.getMaximumError(), ", estimated error below bound? ", error[0] < algo.getMaximumError()) # Low-level interface # ai = Point() # bi = Point() # fi = Sample() # ei = Point() # value2 = algo.integrate(f, a, b, error, ai, bi, fi, ei)[0] # ai.add(b) # g = f.draw(a, b, 512) # lower = Cloud(ai, Point(ai.getDimension())) # lower.setColor("magenta") # g.add(lower) # g.draw("Smooth_function_adaptation_" + str(i)) # Second, a piecewise smooth function f = SymbolicFunction("x", "abs(sin(x))") a = -2.5 b = 4.5 algo = GaussKronrod() rules = [GaussKronrodRule(GaussKronrodRule.G3K7), GaussKronrodRule( GaussKronrodRule.G7K15), GaussKronrodRule(GaussKronrodRule.G11K23), GaussKronrodRule(GaussKronrodRule.G15K31), GaussKronrodRule(GaussKronrodRule.G25K51)] for i in range(len(rules)): algo.setRule(rules[i]) print("Algo=", algo) error = Point() value = algo.integrate(f, Interval(a, b), error)[0] ref = 4.0 + math.cos(b) - math.cos(a) print("value=%.6f" % value, ", ref=%.6f" % ref, ", true error below bound? ", abs(ref - value) < algo.getMaximumError(), ", estimated error below bound? ", error[0] < algo.getMaximumError()) # Low-level interface # ai = Point() # bi = Point() # fi = Sample() # ei = Point() # value2 = algo.integrate(f, a, b, error, ai, bi, fi, ei)[0] # print "ai=", ai # print "bi=", bi # print "fi=", fi # print "ei=", ei # ai.add(b) # g = f.draw(a, b, 512) # lower = Cloud(ai, Point(ai.getDimension())) # lower.setColor("magenta") # g.add(lower) # g.draw("Nonsmooth_function_adaptation_" + str(i)) except: import sys print("t_GaussKronrod_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GaussLegendre_std.expout000066400000000000000000000010631307543307100231160ustar00rootroot00000000000000Algo= GaussKronrod(maximum sub intervals=100, maximum error=1e-12, rule=GaussKronrodRule(pair=G11K23)) value=-0.590348 , ref=-0.590348 value=-0.590348 , ref=-0.590348 , adaptedNodes= 0 : [ -2.47595 ] 1 : [ -2.3739 ] 2 : [ -2.19282 ] 3 : [ -1.93691 ] 4 : [ -1.61216 ] 5 : [ -1.22619 ] 6 : [ -0.788035 ] 7 : [ -0.307971 ] 8 : [ 0.20275 ] 9 : [ 0.732157 ] 10 : [ 1.26784 ] 11 : [ 1.79725 ] 12 : [ 2.30797 ] 13 : [ 2.78803 ] 14 : [ 3.22619 ] 15 : [ 3.61216 ] 16 : [ 3.93691 ] 17 : [ 4.19282 ] 18 : [ 4.3739 ] 19 : [ 4.47595 ] openturns-1.9/python/test/t_GaussLegendre_std.py000077500000000000000000000014111307543307100222220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import math TESTPREAMBLE() RandomGenerator.SetSeed(0) try: f = SymbolicFunction(["x"], ["sin(x)"]) a = -2.5 b = 4.5 # Default parameters algo = GaussKronrod() print("Algo=", algo) # High-level interface value = algo.integrate(f, Interval(a, b))[0] ref = math.cos(a) - math.cos(b) print("value=%.6f" % value, ", ref=%.6f" % ref) # Low-level interface algo = GaussLegendre([20]) value, adaptedNodes = algo.integrateWithNodes(f, Interval(a, b)) print("value=%.6f" % value[0], ", ref=%.6f" % ref, ", adaptedNodes=", adaptedNodes) except: import sys print("t_GaussKronrod_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GaussProductExperiment_std.expout000066400000000000000000000034331307543307100250550ustar00rootroot00000000000000experiment1= class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal degrees=[3,6] experiment2= class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 marginal[1]=class=Triangular name=Triangular dimension=1 a=-1 m=-0.5 b=1 marginal degrees=[5,5] myPlane = class=GaussProductExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Exponential name=Exponential dimension=1 lambda=1 gamma=0 marginal[1]=class=Triangular name=Triangular dimension=1 a=-1 m=-0.5 b=1 marginal degrees=[3,6] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=18 dimension=2 description=[X0,X1] data=[[0.415775,-0.874259],[2.29428,-0.874259],[6.28995,-0.874259],[0.415775,-0.607842],[2.29428,-0.607842],[6.28995,-0.607842],[0.415775,-0.261572],[2.29428,-0.261572],[6.28995,-0.261572],[0.415775,0.158746],[2.29428,0.158746],[6.28995,0.158746],[0.415775,0.559836],[2.29428,0.559836],[6.28995,0.559836],[0.415775,0.860618],[2.29428,0.860618],[6.28995,0.860618]] weights = class=Point name=Unnamed dimension=18 values=[0.0366823,0.0143676,0.000535938,0.174703,0.0684267,0.00255245,0.239237,0.0937032,0.00349531,0.16962,0.066436,0.00247819,0.0757736,0.0296787,0.00110707,0.0150779,0.00590563,0.000220292] openturns-1.9/python/test/t_GaussProductExperiment_std.py000077500000000000000000000016501307543307100241630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: distribution = ComposedDistribution( DistributionCollection([Exponential(), Triangular(-1.0, -0.5, 1.0)])) marginalDegrees = Indices([3, 6]) # Test the constructor based on marginal degrees print("experiment1=", GaussProductExperiment(marginalDegrees)) # Test the constructor based on distribution print("experiment2=", GaussProductExperiment(distribution)) # Test the constructor based on marginal degrees and distribution myPlane = GaussProductExperiment( Distribution(distribution), marginalDegrees) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) except: import sys print("t_GaussProductExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GaussianProcess_std.expout000066400000000000000000000067041307543307100235060ustar00rootroot00000000000000myModel = class=ExponentialCauchy amplitude=[1] scale=[1] mySecondOrderModel = class=SecondOrderModel implementation=class=ExponentialCauchy amplitude=[1] scale=[1] myProcess = GaussianProcess(trend=[x0]->[0.0], covariance=AbsoluteExponential(scale=[1], amplitude=[1])) is stationary? True mean over 25 realizations = [ t y0 ] 0 : [ 0 -0.188307 ] 1 : [ 0.1 -0.276361 ] 2 : [ 0.2 -0.371205 ] 3 : [ 0.3 -0.284791 ] 4 : [ 0.4 -0.412755 ] 5 : [ 0.5 -0.22348 ] 6 : [ 0.6 -0.136958 ] 7 : [ 0.7 -0.0333005 ] 8 : [ 0.8 0.0318759 ] 9 : [ 0.9 -0.0703118 ] 10 : [ 1 -0.196535 ] mean over 25 realizations = [ t y0 ] 0 : [ 0 -0.0240053 ] 1 : [ 0.1 0.0640317 ] 2 : [ 0.2 -0.0209763 ] 3 : [ 0.3 -0.0496144 ] 4 : [ 0.4 -0.0333348 ] 5 : [ 0.5 0.0486537 ] 6 : [ 0.6 -0.00997906 ] 7 : [ 0.7 -0.105565 ] 8 : [ 0.8 -0.13351 ] 9 : [ 0.9 -0.096771 ] 10 : [ 1 -0.075824 ] myCovModel = ExponentialModel(scale=[1], amplitude=[1], no spatial correlation) myProcess1 = GaussianProcess(trend=[x0]->[0.0], covariance=ExponentialModel(scale=[1], amplitude=[1], no spatial correlation)) is stationary? True mean over 25 realizations = [ t y0 ] 0 : [ 0 0.301595 ] 1 : [ 0.1 0.37506 ] 2 : [ 0.2 0.321926 ] 3 : [ 0.3 0.367551 ] 4 : [ 0.4 0.122526 ] 5 : [ 0.5 0.123648 ] 6 : [ 0.6 0.0419671 ] 7 : [ 0.7 -0.0629345 ] 8 : [ 0.8 -0.00632637 ] 9 : [ 0.9 -0.102149 ] 10 : [ 1 -0.137184 ] mean over 25 realizations = [ t y0 ] 0 : [ 0 0.407148 ] 1 : [ 0.1 0.396594 ] 2 : [ 0.2 0.372824 ] 3 : [ 0.3 0.387984 ] 4 : [ 0.4 0.299184 ] 5 : [ 0.5 0.280284 ] 6 : [ 0.6 0.190112 ] 7 : [ 0.7 0.136746 ] 8 : [ 0.8 0.151671 ] 9 : [ 0.9 0.187193 ] 10 : [ 1 0.180541 ] myProcess2 = GaussianProcess(trend=[t]->[4.0], covariance=ExponentialModel(scale=[1], amplitude=[1], no spatial correlation)) is stationary? True mean over 25 realizations= [ t y0 ] 0 : [ 0 4.06085 ] 1 : [ 0.1 3.91689 ] 2 : [ 0.2 3.71348 ] 3 : [ 0.3 3.73513 ] 4 : [ 0.4 3.69784 ] 5 : [ 0.5 3.60562 ] 6 : [ 0.6 3.7151 ] 7 : [ 0.7 3.80805 ] 8 : [ 0.8 3.8367 ] 9 : [ 0.9 3.88025 ] 10 : [ 1 3.88796 ] myProcess3 = GaussianProcess(trend=[t]->[sin(t)], covariance=ExponentialModel(scale=[1], amplitude=[1], no spatial correlation)) is stationary? False mean over 25 realizations = [ t y0 ] 0 : [ 0 -0.186405 ] 1 : [ 0.1 -0.110973 ] 2 : [ 0.2 -0.0395811 ] 3 : [ 0.3 0.0924113 ] 4 : [ 0.4 0.145705 ] 5 : [ 0.5 -0.0487151 ] 6 : [ 0.6 -0.105816 ] 7 : [ 0.7 -0.0996369 ] 8 : [ 0.8 -0.0427676 ] 9 : [ 0.9 -0.0620685 ] 10 : [ 1 -0.0362669 ] mean over 25 realizations = [ t y0 ] 0 : [ 0 0.222489 ] 1 : [ 0.1 0.215815 ] 2 : [ 0.2 0.278172 ] 3 : [ 0.3 0.17039 ] 4 : [ 0.4 0.147758 ] 5 : [ 0.5 0.264245 ] 6 : [ 0.6 0.310447 ] 7 : [ 0.7 0.340922 ] 8 : [ 0.8 0.239586 ] 9 : [ 0.9 0.226955 ] 10 : [ 1 0.214064 ] openturns-1.9/python/test/t_GaussianProcess_std.py000077500000000000000000000052371307543307100226150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 spatialDimension = 1 # Amplitude values amplitude = Point(defaultDimension, 1.0) # Scale values scale = Point(defaultDimension, 1.0) # Second order model with parameters myModel = ExponentialCauchy(scale, amplitude) print("myModel = ", myModel) # checking the copy-cast*/ mySecondOrderModel = SecondOrderModel(myModel) print("mySecondOrderModel = ", mySecondOrderModel) tmin = 0.0 step = 0.1 n = 11 myTimeGrid = RegularGrid(tmin, step, n) size = 25 myProcess = GaussianProcess(myModel, myTimeGrid) print("myProcess = ", myProcess) print("is stationary? ", myProcess.isStationary()) myProcess.setSamplingMethod(0) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) myProcess.setSamplingMethod(2) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) # Second order model with parameters myCovModel = ExponentialModel(scale, amplitude) print("myCovModel = ", myCovModel) myProcess1 = GaussianProcess(myCovModel, myTimeGrid) print("myProcess1 = ", myProcess1) print("is stationary? ", myProcess1.isStationary()) myProcess.setSamplingMethod(0) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) myProcess.setSamplingMethod(2) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) # With constant trend trend = TrendTransform(SymbolicFunction("t", "4.0")) myProcess2 = GaussianProcess(trend, myCovModel, myTimeGrid) myProcess2.setSamplingMethod(2) print("myProcess2 = ", myProcess2) print("is stationary? ", myProcess2.isStationary()) print("mean over ", size, " realizations= ", myProcess2.getSample(size).computeMean()) # With varying trend trend3 = TrendTransform(SymbolicFunction("t", "sin(t)")) myProcess3 = GaussianProcess(trend3, myCovModel, myTimeGrid) print("myProcess3 = ", myProcess3) print("is stationary? ", myProcess3.isStationary()) myProcess.setSamplingMethod(0) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) myProcess.setSamplingMethod(2) print("mean over ", size, " realizations = ", myProcess.getSample(size).computeMean()) except: import sys print("t_GaussianProcess_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_nlopt.expout000066400000000000000000000000731307543307100262700ustar00rootroot00000000000000================ Test using NLOpt ================ Test Ok openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_nlopt.py000077500000000000000000000031061307543307100253770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from openturns.testing import assert_almost_equal ot.TESTPREAMBLE() try: # Set precision ot.PlatformInfo.SetNumericalPrecision(3) print("================") print("Test using NLOpt") print("================") # Calibration of default optimizer ot.ResourceMap.SetAsScalar( 'GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound', 1.0e-5) ot.ResourceMap.SetAsScalar( 'GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound', 100) # Data & estimation spatialDimension = 1 X = ot.Normal().getSample(100) X = X.sortAccordingToAComponent(0) covarianceModel = ot.SquaredExponential([1.0], [1.0]) model = ot.SymbolicFunction(["x"], ["x - 0.6 * cos(x/3)"]) Y = model(X) basis = ot.QuadraticBasisFactory(spatialDimension).build() algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis, True) algo.setOptimizationAlgorithm(ot.NLopt('LN_NELDERMEAD')) algo.run() # perform an evaluation result = algo.getResult() metaModel = result.getMetaModel() conditionalCovariance = result.getCovarianceModel() residual = metaModel(X) - Y assert_almost_equal(residual.computeCenteredMoment(2), [1.06e-05], 1e-5, 1e-5) assert_almost_equal(conditionalCovariance.getParameter(), [ 0.702138, 0.00137], 5e-3, 1e-3) print("Test Ok") except: import sys print("t_GeneralLinearModelAlgorithm_nlopt.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_std.expout000066400000000000000000000016641307543307100257350ustar00rootroot00000000000000=================================================== covariance (dirac, optimized)= DiracCovarianceModel(t)=[[ 0.03832 ]] * t==[0] trend (dirac, optimized)= [[-0.1109,1.015]] =================================================== covariance (dirac, not optimized)= DiracCovarianceModel(t)=[[ 1 ]] * t==[0] trend (dirac, not optimized)= [[6.892,2.373]] =================================================== covariance (reduced, unbiased)= AbsoluteExponential(scale=[0.1328], amplitude=[0.1956]) trend (reduced, unbiased)= [[-0.1034,1.014]] =================================================== covariance (reduced, biased)= AbsoluteExponential(scale=[0.1328], amplitude=[0.1907]) trend (reduced, biased)= [[-0.1034,1.014]] =================================================== covariance (full optim)= AbsoluteExponential(scale=[0.1328], amplitude=[0.1907]) trend (full optim)= [[-0.1034,1.014]] =================================================== openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_std.py000077500000000000000000000062711307543307100250430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() try: # Set Numerical precision to 4 ot.PlatformInfo.SetNumericalPrecision(4) sampleSize = 40 spatialDimension = 1 # Create the function to estimate model = ot.SymbolicFunction(["x0"], ["x0"]) X = ot.Sample(sampleSize, spatialDimension) for i in range(sampleSize): X[i, 0] = 3.0 + (8.0 * i) / sampleSize Y = model(X) # Add a small noise to data Y += ot.GaussianProcess(ot.AbsoluteExponential( [0.1], [0.2]), ot.Mesh(X)).getRealization().getValues() basis = ot.LinearBasisFactory(spatialDimension).build() # Case of a misspecified covariance model covarianceModel = ot.DiracCovarianceModel(spatialDimension) print("===================================================\n") algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis) algo.run() result = algo.getResult() print("\ncovariance (dirac, optimized)=", result.getCovarianceModel()) print("trend (dirac, optimized)=", result.getTrendCoefficients()) print("===================================================\n") # Now without estimating covariance parameters basis = ot.LinearBasisFactory(spatialDimension).build() covarianceModel = ot.DiracCovarianceModel(spatialDimension) algo = ot.GeneralLinearModelAlgorithm( X, Y, covarianceModel, basis, True, True) algo.setOptimizeParameters(False) algo.run() result = algo.getResult() print("\ncovariance (dirac, not optimized)=", result.getCovarianceModel()) print("trend (dirac, not optimized)=", result.getTrendCoefficients()) print("===================================================\n") # Case of a well specified covariance model # Test the optimization when the amplitude is deduced analytically from # the scale covarianceModel = ot.AbsoluteExponential(spatialDimension) algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis) algo.run() result = algo.getResult() print("\ncovariance (reduced, unbiased)=", result.getCovarianceModel()) print("trend (reduced, unbiased)=", result.getTrendCoefficients()) print("===================================================\n") ot.ResourceMap.SetAsBool( "GeneralLinearModelAlgorithm-UnbiasedVariance", False) algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis) algo.run() result = algo.getResult() print("\ncovariance (reduced, biased)=", result.getCovarianceModel()) print("trend (reduced, biased)=", result.getTrendCoefficients()) print("===================================================\n") ot.ResourceMap.SetAsBool( "GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate", False) algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis) algo.run() result = algo.getResult() print("\ncovariance (full optim)=", result.getCovarianceModel()) print("trend (full optim)=", result.getTrendCoefficients()) print("===================================================\n") except: import sys print("t_GeneralLinearModelAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_std_hmat.expout000066400000000000000000000001231307543307100267330ustar00rootroot00000000000000======================== Test standard using HMat ======================== Test Ok openturns-1.9/python/test/t_GeneralLinearModelAlgorithm_std_hmat.py000077500000000000000000000035011307543307100260450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from openturns.testing import assert_almost_equal ot.TESTPREAMBLE() try: # Set precision ot.PlatformInfo.SetNumericalPrecision(3) ot.ResourceMap.Set("GeneralLinearModelAlgorithm-LinearAlgebra", "HMAT") # Test 1 print("========================") print("Test standard using HMat") print("========================") sampleSize = 6 spatialDimension = 1 # Create the function to estimate input_description = ["x0"] foutput = ["f0"] formulas = ["x0"] model = ot.Function(input_description, foutput, formulas) X = ot.Sample(sampleSize, spatialDimension) X2 = ot.Sample(sampleSize, spatialDimension) for i in range(sampleSize): X[i, 0] = 3.0 + i X2[i, 0] = 2.5 + i X[0, 0] = 1.0 X[1, 0] = 3.0 X2[0, 0] = 2.0 X2[1, 0] = 4.0 Y = model(X) # Data validation Y2 = model(X2) for i in range(sampleSize): # Add a small noise to data Y[i, 0] += 0.01 * ot.DistFunc.rNormal() basis = ot.LinearBasisFactory(spatialDimension).build() covarianceModel = ot.DiracCovarianceModel(spatialDimension) algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis) algo.run() # perform an evaluation result = algo.getResult() metaModel = result.getMetaModel() conditionalCovariance = result.getCovarianceModel() residual = metaModel(X) - Y assert_almost_equal(residual.computeCenteredMoment(2), [0.00013144], 1e-5, 1e-5) assert_almost_equal(conditionalCovariance.getParameter(), [ 0.011464782674211804], 1e-5, 1e-3) print("Test Ok") except: import sys print("t_GeneralLinearModelAlgorithm_std_hmat.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralizedExtremeValue_std.expout000066400000000000000000000136021307543307100251500ustar00rootroot00000000000000################################################## Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15) Elliptical = False Continuous = True oneRealization= [2.00915] oneSample first= [0.788048] last= [2.8505] mean= [2.65453] covariance= [[ 2.73151 ]] Kolmogorov test for the generator, sample size= 100 is True Kolmogorov test for the generator, sample size= 10000 is True Point= [1.0] ddf = [0.108952] ddf (FD)= 0.10895225309 log pdf= -1.75315345339 pdf = 0.17322681854 pdf (FD)= 0.173226818544 cdf= 0.151407657069 ccdf= 0.848592342931 survival= 0.848592342931 Inverse survival= [5.59515] Survival(inverse survival)= 0.05 pdf gradient = [] pdf gradient (FD)= [-0.108952,-0.0428497,0.0749046] cdf gradient = [] cdf gradient (FD)= [-0.173227,0.115485,-0.0559084] quantile= [5.59515] cdf(quantile)= 0.95 Minimum volume interval= [-0.359967, 5.97545] threshold= 0.95 Minimum volume level set= {x | f(x) <= 3.31111} with f= MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=-0.15)) beta= 0.036475780379 Bilateral confidence interval= [-0.162817, -0.162817] beta= 0.95 Unilateral confidence interval (lower tail)= [-4.83649, 5.59515] beta= 0.95 Unilateral confidence interval (upper tail)= [5.59515, 12] beta= 0.95 mean= [2.66959] standard deviation= [1.64028] skewness= [0.435743] kurtosis= [3.13766] covariance= [[ 2.69053 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mu : 2, sigma : 1.5, xi : -0.15]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [2.66959] standard moment n= 2 , value= [9.81725] standard moment n= 3 , value= [42.4963] standard moment n= 4 , value= [209.086] standard moment n= 5 , value= [1135.1] Standard representative= RandomMixture(-Weibull(alpha = 10, beta = 6.66667, gamma = -12)) mu= 2.0 sigma= 1.5 xi= -0.15 Actual distribution= RandomMixture(-Weibull(alpha = 10, beta = 6.66667, gamma = -12)) Distribution from actual distribution= GeneralizedExtremeValue(mu=-2, sigma=-1.5, xi=-0.15) ################################################## Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0) Elliptical = False Continuous = True oneRealization= [2.21357] oneSample first= [0.88405] last= [4.65486] mean= [2.86083] covariance= [[ 3.68655 ]] Kolmogorov test for the generator, sample size= 100 is True Kolmogorov test for the generator, sample size= 10000 is True Point= [1.0] ddf = [0.116989] ddf (FD)= 0.116988580193 log pdf= -1.6865324825 pdf = 0.185160459257 pdf (FD)= 0.185160459255 cdf= 0.142596824326 ccdf= 0.857403175674 survival= 0.857403175674 Inverse survival= [0.354217] Survival(inverse survival)= 0.95 pdf gradient = [0.102258,-0.116989] pdf gradient (FD)= [-0.116989,-0.0454479,0.0844441] cdf gradient = [-0.277741,-0.18516] cdf gradient (FD)= [-0.18516,0.12344,-0.0617202] quantile= [6.45529] cdf(quantile)= 0.95 Minimum volume interval= [-0.341999, 6.74221] threshold= 0.95 Minimum volume level set= {x | f(x) <= 3.6093} with f= MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0)) beta= 0.0270707759809 Bilateral confidence interval= [0.0420159, 7.51437] beta= 0.95 Unilateral confidence interval (lower tail)= [-3.20963, 6.45529] beta= 0.95 Unilateral confidence interval (upper tail)= [0.354217, 50.3543] beta= 0.95 mean= [2.86582] standard deviation= [1.92382] skewness= [1.13955] kurtosis= [5.4] covariance= [[ 3.7011 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mu : 2, sigma : 1.5, xi : 0]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.577216] standard moment n= 2 , value= [1.97811] standard moment n= 3 , value= [5.44487] standard moment n= 4 , value= [23.5615] standard moment n= 5 , value= [117.839] Standard representative= Gumbel(alpha = 1, beta = 0) mu= 2.0 sigma= 1.5 xi= 0.0 Actual distribution= Gumbel(alpha = 0.666667, beta = 2) Distribution from actual distribution= GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0) ################################################## Distribution GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15) Elliptical = False Continuous = True oneRealization= [-0.353173] oneSample first= [1.54401] last= [7.90517] mean= [3.13554] covariance= [[ 5.80678 ]] Kolmogorov test for the generator, sample size= 100 is True Kolmogorov test for the generator, sample size= 10000 is True Point= [1.0] ddf = [0.127801] ddf (FD)= 0.12780130326 log pdf= -1.61629961231 pdf = 0.198632357566 pdf (FD)= 0.198632357558 cdf= 0.132841517691 ccdf= 0.867158482309 survival= 0.867158482309 Inverse survival= [0.482513] Survival(inverse survival)= 0.95 pdf gradient = [0.00847762,-0.134884,-0.127801] pdf gradient (FD)= [-0.127801,-0.0472207,0.095424] cdf gradient = [-0.0282528,-0.178769,-0.198632] cdf gradient (FD)= [-0.198632,0.132422,-0.0685353] quantile= [7.61316] cdf(quantile)= 0.95 Minimum volume interval= [-0.261956, 7.81353] threshold= 0.95 Minimum volume level set= {x | f(x) <= 3.47643e+56} with f= MinimumVolumeLevelSetEvaluation(GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15)) beta= 0.0 Bilateral confidence interval= [0.22178, 9.35746] beta= 0.95 Unilateral confidence interval (lower tail)= [-8, 7.61316] beta= 0.95 Unilateral confidence interval (upper tail)= [0.482513, 1251.08] beta= 0.95 mean= [3.12484] standard deviation= [2.45836] skewness= [2.53025] kurtosis= [19.2742] covariance= [[ 6.04353 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mu : 2, sigma : 1.5, xi : 0.15]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [1.11248] standard moment n= 2 , value= [1.29806] standard moment n= 3 , value= [1.61612] standard moment n= 4 , value= [2.21815] standard moment n= 5 , value= [3.62435] Standard representative= Frechet(alpha = 6.66667, beta = 1, gamma = 0) mu= 2.0 sigma= 1.5 xi= 0.15 Actual distribution= Frechet(alpha = 6.66667, beta = 10, gamma = -8) Distribution from actual distribution= GeneralizedExtremeValue(mu=2, sigma=1.5, xi=0.15) openturns-1.9/python/test/t_GeneralizedExtremeValue_std.py000077500000000000000000000164051307543307100242630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: all_cases = [GeneralizedExtremeValue(2.0, 1.5, -0.15), GeneralizedExtremeValue(2.0, 1.5, 0.0), GeneralizedExtremeValue(2.0, 1.5, 0.15)] for i in range(len(all_cases)): distribution = all_cases[i] print("#" * 50) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): print( "Kolmogorov test for the generator, sample size=", size, " is ", FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure()) size *= size # Define a point point = [1.0] * distribution.getDimension() print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) print( "ddf (FD)=", (distribution.computePDF(point[0] + eps) - distribution.computePDF(point[0] - eps)) / (2.0 * eps)) LPDF = distribution.computeLogPDF(point) print("log pdf=", LPDF) PDF = distribution.computePDF(point) print("pdf =", PDF) print( "pdf (FD)=", (distribution.computeCDF(point[0] + eps) - distribution.computeCDF(point[0] - eps)) / (2.0 * eps)) CDF = distribution.computeCDF(point) print("cdf=", CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=", CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival=", Survival) InverseSurvival = distribution.computeInverseSurvivalFunction(0.95) print("Inverse survival=", InverseSurvival) print("Survival(inverse survival)=", distribution.computeSurvivalFunction(InverseSurvival)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = Point(3) PDFgrFD[0] = (GeneralizedExtremeValue(distribution.getMu() + eps, distribution.getSigma(), distribution.getXi()).computePDF(point) - GeneralizedExtremeValue(distribution.getMu() - eps, distribution.getSigma(), distribution.getXi()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() + eps, distribution.getXi()).computePDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() - eps, distribution.getXi()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() + eps).computePDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = Point(3) CDFgrFD[0] = (GeneralizedExtremeValue(distribution.getMu() + eps, distribution.getSigma(), distribution.getXi()).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu() - eps, distribution.getSigma(), distribution.getXi()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() + eps, distribution.getXi()).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma() - eps, distribution.getXi()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() + eps).computeCDF(point) - GeneralizedExtremeValue(distribution.getMu(), distribution.getSigma(), distribution.getXi() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Confidence regions prob, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", prob) print("threshold=", threshold) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", beta) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", beta) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", beta) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", beta) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) print("mu=", distribution.getMu()) print("sigma=", distribution.getSigma()) print("xi=", distribution.getXi()) print("Actual distribution=", distribution.getActualDistribution()) distribution.setActualDistribution( distribution.getActualDistribution()) print("Distribution from actual distribution=", distribution) except: import sys print("t_GeneralizedExtremeValue_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralizedParetoFactory_std.expout000066400000000000000000000020761307543307100253270ustar00rootroot00000000000000Distribution = GeneralizedPareto(sigma = 2.5, xi=-0.75) Estimated distribution= GeneralizedPareto(sigma = 2.431, xi=-0.7464) GeneralizedPareto = GeneralizedPareto(sigma = 2.5, xi=-0.75) Estimated generalizedPareto= GeneralizedPareto(sigma = 2.431, xi=-0.7464) Distribution = GeneralizedPareto(sigma = 2.5, xi=0) Estimated distribution= GeneralizedPareto(sigma = 2.498, xi=0.01582) GeneralizedPareto = GeneralizedPareto(sigma = 2.5, xi=0) Estimated generalizedPareto= GeneralizedPareto(sigma = 2.498, xi=0.01582) Distribution = GeneralizedPareto(sigma = 2.5, xi=0.75) Estimated distribution= GeneralizedPareto(sigma = 2.592, xi=0.7697) GeneralizedPareto = GeneralizedPareto(sigma = 2.5, xi=0.75) Estimated generalizedPareto= GeneralizedPareto(sigma = 2.592, xi=0.7697) Default distribution= GeneralizedPareto(sigma = 1, xi=0) Distribution from parameters= GeneralizedPareto(sigma = 2.5, xi=0.75) Default generalizedPareto= GeneralizedPareto(sigma = 1, xi=0) GeneralizedPareto from parameters= GeneralizedPareto(sigma = 2.5, xi=0.75) openturns-1.9/python/test/t_GeneralizedParetoFactory_std.py000077500000000000000000000031061307543307100244310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) PlatformInfo.SetNumericalPrecision(4) try: xi = [-0.75, 0.0, 0.75] size = 10000 covariance = CovarianceMatrix(2) factory = GeneralizedParetoFactory() for i in range(3): distribution = GeneralizedPareto(2.5, xi[i]) sample = distribution.getSample(size) # Distribution estimatedDistribution(factory.build(sample, covariance)) estimatedDistribution = factory.build(sample) print("Distribution =", distribution) print("Estimated distribution=", estimatedDistribution) estimatedGeneralizedPareto = factory.buildAsGeneralizedPareto(sample) print("GeneralizedPareto =", distribution) print("Estimated generalizedPareto=", estimatedGeneralizedPareto) # print "Covariance=", covariance estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedGeneralizedPareto = factory.buildAsGeneralizedPareto() print("Default generalizedPareto=", estimatedGeneralizedPareto) estimatedGeneralizedPareto = factory.buildAsGeneralizedPareto( distribution.getParameter()) print("GeneralizedPareto from parameters=", estimatedGeneralizedPareto) except: import sys print("t_GenralizedParetoFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeneralizedPareto_std.expout000066400000000000000000000173051307543307100240000ustar00rootroot00000000000000Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=-0.2 Distribution GeneralizedPareto(sigma = 1.5, xi=-0.2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.662264] oneSample first= class=Point name=Unnamed dimension=1 values=[0.184665] last= class=Point name=Unnamed dimension=1 values=[1.18051] mean= class=Point name=Unnamed dimension=1 values=[1.24428] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.12783] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.231453] pdf = 0.376111934156 pdf (FD)= 0.376111934 cdf= 0.511054485597 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.096439,-0.188281] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.096439,-0.188281] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.250741,-0.131347] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.250741,-0.131347] quantile= class=Point name=Unnamed dimension=1 values=[3.3804] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0765466] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 3.3804] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.80205} with f= MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=-0.2)) beta= [0.0606855] Bilateral confidence interval= [0.0378807, 3.91368] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 3.3804] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0765466, 7.5] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.25] standard deviation= class=Point name=Unnamed dimension=1 values=[1.05644] skewness= class=Point name=Unnamed dimension=1 values=[1.18322] kurtosis= class=Point name=Unnamed dimension=1 values=[4.2] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.11607] parameters= [class=PointWithDescription name=X0 dimension=2 description=[sigma,xi] values=[1.5,-0.2]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.833333] standard moment n= 2 value= [1.19048] standard moment n= 3 value= [2.23214] standard moment n= 4 value= [4.96032] standard moment n= 5 value= [12.4008] Standard representative= GeneralizedPareto(sigma = 1, xi=-0.2) Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=0 Distribution GeneralizedPareto(sigma = 1.5, xi=0) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[2.26806] oneSample first= class=Point name=Unnamed dimension=1 values=[0.873113] last= class=Point name=Unnamed dimension=1 values=[1.8084] mean= class=Point name=Unnamed dimension=1 values=[1.49864] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.31994] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.228185] pdf = 0.342278079355 pdf (FD)= 0.342278079 cdf= 0.486582880967 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0760618,-0.152124] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0760618,-0.152124] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.228185,-0.114093] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.228185,-0.114093] quantile= class=Point name=Unnamed dimension=1 values=[4.4936] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0769399] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 4.4936] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.4012} with f= MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0)) beta= [0.0333333] Bilateral confidence interval= [0.0379767, 5.53332] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 4.4936] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0769399, 54.0655] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.5] standard deviation= class=Point name=Unnamed dimension=1 values=[1.5] skewness= class=Point name=Unnamed dimension=1 values=[2] kurtosis= class=Point name=Unnamed dimension=1 values=[9] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.25] parameters= [class=PointWithDescription name=X0 dimension=2 description=[sigma,xi] values=[1.5,0]] standard moment n= 0 value= [1] standard moment n= 1 value= [1] standard moment n= 2 value= [2] standard moment n= 3 value= [6] standard moment n= 4 value= [24] standard moment n= 5 value= [120] Standard representative= GeneralizedPareto(sigma = 1, xi=0) Distribution class=GeneralizedPareto name=GeneralizedPareto dimension=1 sigma=1.5 xi=0.2 Distribution GeneralizedPareto(sigma = 1.5, xi=0.2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.47575] oneSample first= class=Point name=Unnamed dimension=1 values=[5.37434] last= class=Point name=Unnamed dimension=1 values=[0.15915] mean= class=Point name=Unnamed dimension=1 values=[1.88187] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.82491] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.222073] pdf = 0.31460293288 pdf (FD)= 0.314602933 cdf= 0.465175014104 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0616868,-0.125946] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0616868,-0.125946] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.209735,-0.100495] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.209735,-0.100495] quantile= class=Point name=Unnamed dimension=1 values=[6.15423] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0773359] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 6.15423] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.00034} with f= MinimumVolumeLevelSetEvaluation(GeneralizedPareto(sigma = 1.5, xi=0.2)) beta= [0.0183093] Bilateral confidence interval= [0.038073, 8.18459] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 6.15423] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0773359, 10126.3] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.875] standard deviation= class=Point name=Unnamed dimension=1 values=[2.42061] skewness= class=Point name=Unnamed dimension=1 values=[4.64758] kurtosis= class=Point name=Unnamed dimension=1 values=[73.8] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.85938] parameters= [class=PointWithDescription name=X0 dimension=2 description=[sigma,xi] values=[1.5,0.2]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.25] standard moment n= 2 value= [4.16667] standard moment n= 3 value= [31.25] standard moment n= 4 value= [625] NotDefinedException : Error: the standard moments are defined up to order 5 and n=5 Standard representative= GeneralizedPareto(sigma = 1, xi=0.2) openturns-1.9/python/test/t_GeneralizedPareto_std.py000077500000000000000000000141631307543307100231060ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: for xi in [-0.2, 0.0, 0.2]: # Instanciate one distribution object distribution = GeneralizedPareto(1.5, xi) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # DDF = distribution.computeDDF( point ) # print "ddf =", repr(DDF) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) # CF = distribution.computeCharacteristicFunction( point[0] ) # print "characteristic function=", CF PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(2) PDFgrFD[0] = (GeneralizedPareto(distribution.getSigma() + eps, distribution.getXi()).computePDF(point) - GeneralizedPareto(distribution.getSigma() - eps, distribution.getXi()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (GeneralizedPareto(distribution.getSigma(), distribution.getXi() + eps).computePDF(point) - GeneralizedPareto(distribution.getSigma(), distribution.getXi() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (GeneralizedPareto(distribution.getSigma() + eps, distribution.getXi()).computeCDF(point) - GeneralizedPareto(distribution.getSigma() - eps, distribution.getXi()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (GeneralizedPareto(distribution.getSigma(), distribution.getXi() + eps).computeCDF(point) - GeneralizedPareto(distribution.getSigma(), distribution.getXi() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): try: value = distribution.getStandardMoment(i) print("standard moment n=", i, " value=", value) except RuntimeError as ex: print(ex) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_GeneralizedPareto_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GeometricFactory_std.expout000066400000000000000000000006201307543307100236320ustar00rootroot00000000000000distribution= class=Geometric name=Geometric dimension=1 p=0.7 Estimated distribution= class=Geometric name=Geometric dimension=1 p=0.698861 Default distribution= Geometric(p = 0.5) Distribution from parameters= Geometric(p = 0.7) Geometric = Geometric(p = 0.7) Estimated geometric= Geometric(p = 0.698861) Default geometric= Geometric(p = 0.5) Geometric from parameters= Geometric(p = 0.7) openturns-1.9/python/test/t_GeometricFactory_std.py000077500000000000000000000022411307543307100227420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Geometric(0.7) size = 10000 sample = distribution.getSample(size) factory = GeometricFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedGeometric = factory.buildAsGeometric(sample) print("Geometric =", distribution) print("Estimated geometric=", estimatedGeometric) estimatedGeometric = factory.buildAsGeometric() print("Default geometric=", estimatedGeometric) estimatedGeometric = factory.buildAsGeometric( distribution.getParameter()) print("Geometric from parameters=", estimatedGeometric) except: import sys print("t_GeometricFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Geometric_std.expout000066400000000000000000000033221307543307100223040ustar00rootroot00000000000000Distribution class=Geometric name=Geometric dimension=1 p=0.7 Distribution Geometric(p = 0.7) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[1] oneSample first= class=Point name=Unnamed dimension=1 values=[1] last= class=Point name=Unnamed dimension=1 values=[2] mean= class=Point name=Unnamed dimension=1 values=[1.4309] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.618887] Point= class=Point name=Unnamed dimension=1 values=[3] pdf =0.063000 pdf (FD)=0.063000 cdf=0.973000 pdf gradient = class=Point name=Unnamed dimension=1 values=[-0.33] pdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[-0.33] cdf gradient = class=Point name=Unnamed dimension=1 values=[0.27] cdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[0.27] quantile= class=Point name=Unnamed dimension=1 values=[3] cdf(quantile)=0.973000 mean= class=Point name=Unnamed dimension=1 values=[1.42857] standard deviation= class=Point name=Unnamed dimension=1 values=[0.782461] skewness= class=Point name=Unnamed dimension=1 values=[2.37346] kurtosis= class=Point name=Unnamed dimension=1 values=[10.6333] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.612245] parameters= [class=PointWithDescription name=X0 dimension=1 description=[p] values=[0.7]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.42857] standard moment n= 2 value= [2.65306] standard moment n= 3 value= [6.67638] standard moment n= 4 value= [22.1449] standard moment n= 5 value= [91.9266] Standard representative= Geometric(p = 0.7) openturns-1.9/python/test/t_Geometric_std.py000077500000000000000000000063541307543307100214230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Geometric(0.7) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 3.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(1) PDFgrFD[0] = (Geometric(distribution.getP() + eps).computePDF(point) - Geometric(distribution.getP() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # by the finite difference technique CDFgrFD = Point(1) CDFgrFD[0] = (Geometric(distribution.getP() + eps).computeCDF(point) - Geometric(distribution.getP() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Geometric.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GramSchmidtAlgorithm_std.expout000066400000000000000000000007421307543307100244420ustar00rootroot00000000000000algo= class=GramSchmidtAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 Triangular polynomial( 0 )= [2.41355,-0.241355,0] Triangular polynomial( 1 )= [2.09874,0.0321942,-0.869564] Triangular polynomial( 2 )= [2.04635,-0.0276334,-0.975039] Triangular polynomial( 3 )= [2.04338,0.00798025,-0.99855] Triangular polynomial( 4 )= [2.01498,-0.00254217,-0.986101] Reference family= class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 openturns-1.9/python/test/t_GramSchmidtAlgorithm_std.py000077500000000000000000000015451307543307100235530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: def clean(inPoint): dim = inPoint.getDimension() for i in range(dim): if abs(inPoint[i]) < 1.e-10: inPoint[i] = 0.0 return inPoint iMax = 5 distribution = Triangular(-1.0, 0.3, 1.0) algo = GramSchmidtAlgorithm(distribution) print("algo=", repr(algo)) for i in range(iMax): print(distribution.getClassName() + " polynomial(", i, ")=", clean(algo.getRecurrenceCoefficients(i))) algo.setReferenceFamily( OrthogonalUniVariatePolynomialFamily(LegendreFactory())) print("Reference family=", algo.getReferenceFamily()) except: import sys print("t_GramSchmidtAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Graph_export.expout000066400000000000000000000000001307543307100221440ustar00rootroot00000000000000openturns-1.9/python/test/t_Graph_export.py000077500000000000000000000023651307543307100212730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * import os TESTPREAMBLE() try: maxPoint = 101 xMin = -2.0 * pi xMax = 2.0 * pi data = Sample(maxPoint, 2) for i in range(maxPoint): x = xMin + (xMax - xMin) * i / (maxPoint - 1.0) data[i, 0] = x data[i, 1] = sin(x) sinGraph = Graph('Sin function', 'x', 'y', True, 'topright') sinGraph.add(Curve(data, 'red', 'solid', 2, 'sin')) # Test export to all formats sinGraph.draw('sinGraph_ALL', 640, 480, GraphImplementation.ALL) list(map(lambda ext: os.remove('sinGraph_ALL' + ext), ['.eps', '.png', '.fig', '.pdf'])) # Test export to PNG format sinGraph.draw('sinGraph.png', 640, 480, GraphImplementation.PNG) os.remove('sinGraph.png') # Test export to EPS format sinGraph.draw('sinGraph_EPS_PDF', 640, 480, GraphImplementation.EPS | GraphImplementation.PDF) os.remove('sinGraph_EPS_PDF.eps') os.remove('sinGraph_EPS_PDF.pdf') # Test export to FIG format sinGraph.draw('sinGraph', 640, 480, GraphImplementation.FIG) os.remove('sinGraph.fig') except: import sys print('t_Graph_export.py', sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Graph_mix.expout000066400000000000000000000000001307543307100214200ustar00rootroot00000000000000openturns-1.9/python/test/t_Graph_mix.py000077500000000000000000000046361307543307100205520ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 meanPoint = Point(dim, 1.0) meanPoint[0] = 12.0 meanPoint[1] = 5.0 sigma = Point(dim, 1.0) sigma[0] = 3.0 sigma[1] = 1.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.75 distribution = Normal(meanPoint, sigma, R) # Test for sampling size = 200 sample = distribution.getSample(size) tmp = Sample(2, Point(2)) tmp[0, 0] = sample.getMin()[0] tmp[0, 1] = meanPoint[1] - sigma[1] / sigma[0] * (meanPoint[0] - tmp[0, 0]) tmp[1, 0] = sample.getMax()[0] tmp[1, 1] = meanPoint[1] - sigma[1] / sigma[0] * (meanPoint[0] - tmp[1, 0]) # Create the cloud myCloud = Cloud(sample, "blue", "fsquare", "Normal Cloud") # Create the line myLine = Curve(tmp, "red", "solid", 2, "Line") data = Point(0) palette = Description() labels = Description() data.add(5665855) labels.add("Candidate1") palette.add("blue") data.add(4804713) labels.add("Candidate2") palette.add("white") data.add(4610113) labels.add("Candidate3") palette.add("pink") data.add(1949170) labels.add("Candidate4") palette.add("yellow") data.add(1630045) labels.add("Candidate5") palette.add("red") data.add(1518528) labels.add("Candidate6") palette.add("ivory") data.add(1495724) labels.add("Candidate7") palette.add("green") data.add(1210562) labels.add("Candidate8") palette.add("orange") data.add(1204689) labels.add("Candidate9") palette.add("maroon") data.add(1113484) labels.add("Candidate10") palette.add("violet") data.add(3295588) labels.add("cumul candidates < 3.5% ") palette.add("purple") centre = Point(2) centre[0] = 7.0 centre[1] = 10.0 # Create the piechart myPie = Pie(data, labels, centre, 4, palette) # Create an empty graph myGraph = Graph("Cloud/line/pie", "x1", "x2", True, "topright", 1.0) # Then, draw it myGraph.add(myCloud) myGraph.add(myLine) myGraph.add(myPie) myGraph.draw("Graph_mix_OT.png") # Check that the correct files have been generated by computing their # checksum except: import sys print("t_Graph_mix.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GumbelCopulaFactory_std.expout000066400000000000000000000007241307543307100243000ustar00rootroot00000000000000distribution= class=GumbelCopula name=GumbelCopula dimension=2 theta=1.5 Estimated distribution= class=GumbelCopula name=GumbelCopula dimension=2 theta=1.55919 Default distribution= GumbelCopula(theta = 2) Distribution from parameters= GumbelCopula(theta = 1.5) GumbelCopula = GumbelCopula(theta = 1.5) Estimated gumbelCopula= GumbelCopula(theta = 1.55919) Default gumbelCopula= GumbelCopula(theta = 2) GumbelCopula from parameters= GumbelCopula(theta = 1.5) openturns-1.9/python/test/t_GumbelCopulaFactory_std.py000077500000000000000000000023201307543307100234010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = GumbelCopula(1.5) size = 1000 sample = distribution.getSample(size) factory = GumbelCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedGumbelCopula = factory.buildAsGumbelCopula(sample) print("GumbelCopula =", distribution) print("Estimated gumbelCopula=", estimatedGumbelCopula) estimatedGumbelCopula = factory.buildAsGumbelCopula() print("Default gumbelCopula=", estimatedGumbelCopula) estimatedGumbelCopula = factory.buildAsGumbelCopula( distribution.getParameter()) print("GumbelCopula from parameters=", estimatedGumbelCopula) except: import sys print("t_GumbelCopulaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GumbelCopula_std.expout000066400000000000000000000052521307543307100227510ustar00rootroot00000000000000Copula class=GumbelCopula name=GumbelCopula dimension=2 theta=2.5 Copula GumbelCopula(theta = 2.5) Mean class=Point name=Unnamed dimension=2 values=[0.5,0.5] Covariance class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0833333,0.065655,0.065655,0.0833333] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= class=Point name=Unnamed dimension=2 values=[0.659445,0.596689] oneSample= class=Sample name=GumbelCopula implementation=class=SampleImplementation name=GumbelCopula size=10 dimension=2 description=[X0,X1] data=[[0.92546,0.834663],[0.239934,0.114143],[0.705071,0.41781],[0.94214,0.955906],[0.814987,0.721541],[0.254655,0.325386],[0.694987,0.506464],[0.87143,0.917787],[0.191102,0.290004],[0.881289,0.654839]] anotherSample mean= class=Point name=Unnamed dimension=2 values=[0.504187,0.500439] anotherSample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.0840685,0.0659466,0.0659466,0.0842036] Point = class=Point name=Unnamed dimension=2 values=[0.2,0.2] pdf=2.220596 cdf=0.119592 Quantile= class=Point name=Unnamed dimension=2 values=[0.591374,0.591374] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=2 values=[0.0298629,0.0298629] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0164093, 0.983591] [0.0164093, 0.983591] threshold= [0.967181] Minimum volume level set= {x | f(x) <= 0.936314} with f= MinimumVolumeLevelSetEvaluation(GumbelCopula(theta = 2.5)) beta= [0.39207] Bilateral confidence interval= [0.0164093, 0.983591] [0.0164093, 0.983591] beta= [0.967181] Unilateral confidence interval (lower tail)= [0, 0.961873] [0, 0.961873] beta= [0.961873] Unilateral confidence interval (upper tail)= [0.0298629, 1] [0.0298629, 1] beta= [0.970137] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.305358] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.109287] indices= [1,0] margins= class=GumbelCopula name=GumbelCopula dimension=2 theta=2.5 margins PDF=2.034871 margins CDF=0.160538 margins quantile= class=Point name=Unnamed dimension=2 values=[0.961873,0.961873] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.153303,0.00866159] openturns-1.9/python/test/t_GumbelCopula_std.py000077500000000000000000000076001307543307100220570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 copula = GumbelCopula(2.5) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", repr(copula.getMean())) print("Covariance ", repr(copula.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) print("Point = ", repr(point), " pdf=%.6f" % pointPDF, " cdf=%.6f" % pointCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = Point(margins.computeQuantile(0.95)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) except: import sys print("t_NormalCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_GumbelFactory_std.expout000066400000000000000000000020201307543307100231230ustar00rootroot00000000000000Distribution = class=Gumbel name=Gumbel dimension=1 alpha=2 beta=2.5 Estimated distribution = class=Gumbel name=Gumbel dimension=1 alpha=1.98682 beta=2.50626 Parameter distribution = Normal(mu = [1.98645,2.5058], sigma = [0.0197004,0.00534587], R = [[ 1 -0.0721044 ] [ -0.0721044 1 ]]) Default distribution = Gumbel(alpha = 1, beta = 0) Distribution from parameters = Gumbel(alpha = 2, beta = 2.5) Typed estimated distribution = Gumbel(alpha = 1.98682, beta = 2.50626) Default typed distribution = Gumbel(alpha = 1, beta = 0) Typed distribution from parameters= Gumbel(alpha = 2, beta = 2.5) Estimated distribution (AB) = class=ParametrizedDistribution parameters=class=GumbelAB name=Unnamed a=2.50626 b=0.503317 distribution=class=Gumbel name=Gumbel dimension=1 alpha=1.98682 beta=2.50626 Parameter distribution (AB) = Normal(mu = [2.50626,0.503317], sigma = [0.00554983,0.0763013], R = [[ 1 0.234284 ] [ 0.234284 1 ]]) openturns-1.9/python/test/t_GumbelFactory_std.py000077500000000000000000000027661307543307100222530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot distribution = ot.Gumbel(2.0, 2.5) size = 10000 sample = distribution.getSample(size) factory = ot.GumbelFactory() print('Distribution =', repr(distribution)) result = factory.buildEstimator(sample) estimatedDistribution = result.getDistribution() print('Estimated distribution =', repr(estimatedDistribution)) parameterDistribution = result.getParameterDistribution() print('Parameter distribution =', parameterDistribution) defaultDistribution = factory.build() print('Default distribution =', defaultDistribution) fromParameterDistribution = factory.build(distribution.getParameter()) print('Distribution from parameters =', fromParameterDistribution) typedEstimatedDistribution = factory.buildAsGumbel(sample) print('Typed estimated distribution =', typedEstimatedDistribution) defaultTypedDistribution = factory.buildAsGumbel() print('Default typed distribution =', defaultTypedDistribution) typedFromParameterDistribution = factory.buildAsGumbel( distribution.getParameter()) print('Typed distribution from parameters=', typedFromParameterDistribution) result = factory.buildEstimator(sample, ot.GumbelAB()) estimatedDistribution = result.getDistribution() print('Estimated distribution (AB) =', repr(estimatedDistribution)) parameterDistribution = result.getParameterDistribution() print('Parameter distribution (AB) =', parameterDistribution) openturns-1.9/python/test/t_Gumbel_std.expout000066400000000000000000000050051307543307100216010ustar00rootroot00000000000000Distribution class=Gumbel name=Gumbel dimension=1 alpha=2 beta=-0.5 Distribution Gumbel(alpha = 2, beta = -0.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[-0.114155] oneSample first= class=Point name=Unnamed dimension=1 values=[0.54112] last= class=Point name=Unnamed dimension=1 values=[-0.846682] mean= class=Point name=Unnamed dimension=1 values=[-0.20325] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.416712] Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.180043] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.180043] log pdf=-2.356640 pdf =0.094738 pdf (FD)=0.094738 cdf=0.951432 ccdf=0.048568 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0876629,0.180043] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0876629,0.180043] cdf gradient = class=Point name=Unnamed dimension=2 values=[0.0710535,-0.094738] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0710535,-0.094738] quantile= class=Point name=Unnamed dimension=1 values=[0.985098] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-1.04859] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-1.28067, 1.08074] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.51069} with f= MinimumVolumeLevelSetEvaluation(Gumbel(alpha = 2, beta = -0.5)) beta= [0.0812123] Bilateral confidence interval= [-1.15266, 1.33812] beta= [0.95] Unilateral confidence interval (lower tail)= [-2.23654, 0.985098] beta= [0.95] Unilateral confidence interval (upper tail)= [-1.04859, 15.6181] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[-0.211392] standard deviation= class=Point name=Unnamed dimension=1 values=[0.641275] skewness= class=Point name=Unnamed dimension=1 values=[1.13955] kurtosis= class=Point name=Unnamed dimension=1 values=[5.4] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.411234] parameters= [class=PointWithDescription name=X0 dimension=2 description=[alpha,beta] values=[2,-0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.577216] standard moment n= 2 value= [1.97811] standard moment n= 3 value= [5.44487] standard moment n= 4 value= [23.5615] standard moment n= 5 value= [117.839] Standard representative= Gumbel(alpha = 1, beta = 0) openturns-1.9/python/test/t_Gumbel_std.py000077500000000000000000000130521307543307100207110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Gumbel(2.0, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF at point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (Gumbel(distribution.getAlpha() + eps, distribution.getBeta()).computePDF(point) - Gumbel(distribution.getAlpha() - eps, distribution.getBeta()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Gumbel(distribution.getAlpha(), distribution.getBeta() + eps).computePDF(point) - Gumbel(distribution.getAlpha(), distribution.getBeta() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # by the finite difference technique CDFgrFD = Point(2) CDFgrFD[0] = (Gumbel(distribution.getAlpha() + eps, distribution.getBeta()).computeCDF(point) - Gumbel(distribution.getAlpha() - eps, distribution.getBeta()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Gumbel(distribution.getAlpha(), distribution.getBeta() + eps).computeCDF(point) - Gumbel(distribution.getAlpha(), distribution.getBeta() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Gumbel.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HMatrix_std.expout000066400000000000000000000003521307543307100217420ustar00rootroot00000000000000rows= 9 columns= 9 norm= [3] norm(A-LLt) < 1e-10 diagonal= [1,1,1,1,1,1,1,1,1] compressionRatio= (81, 81) fullrkRatio= (81, 0) y= [2.03,2.04,2.03,2.04,2.06,2.04,2.03,2.04,2.03] norm(A-LLt) < 1e-10 |norm(L) - 10 * norm(0.1*L)| < 1e-10 openturns-1.9/python/test/t_HMatrix_std.py000077500000000000000000000057441307543307100210630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m class TestHMatrixRealAssemblyFunction(object): def __init__(self, vertices, scaling=1.0): self.vertices = vertices self.scaling = scaling def __call__(self, i, j): pt1 = self.vertices[i] pt2 = self.vertices[j] difference = pt1 - pt2 val = m.exp(-difference.norm() / self.scaling) return val ot.ResourceMap.SetAsBool('HMatrix-ForceSequential', True) ot.ResourceMap.SetAsUnsignedInteger('HMatrix-MaxLeafSize', 10) ot.PlatformInfo.SetNumericalPrecision(3) n = 2 indices = [n, n] intervalMesher = ot.IntervalMesher(indices) interval = ot.Interval([0.0] * 2, [1.0] * 2) mesh2D = intervalMesher.build(interval) vertices = mesh2D.getVertices() factory = ot.HMatrixFactory() parameters = ot.HMatrixParameters() parameters.setAssemblyEpsilon(1.e-6) parameters.setRecompressionEpsilon(1.e-6) # HMatrix must be symmetric in order to perform Cholesky decomposition hmat = factory.build(vertices, 1, True, parameters) simpleAssembly = TestHMatrixRealAssemblyFunction(vertices, 0.1) hmat.assembleReal(simpleAssembly, 'L') hmatRef = ot.HMatrix(hmat) hmat.factorize('LLt') # Compute A - L*L^T hmatRef.gemm('N', 'T', -1.0, hmat, hmat, 1.0) # Check LU factorization hmat = factory.build(vertices, 1, False, parameters) hmat.assembleReal(simpleAssembly, 'N') hmat.factorize('LU') print('rows=', hmat.getNbRows()) print('columns=', hmat.getNbColumns()) print('norm=', ot.Point(1, hmat.norm())) if hmatRef.norm() < 1e-10: print('norm(A-LLt) < 1e-10') else: print('norm(A-LLt) =', hmatRef.norm()) print('diagonal=', hmat.getDiagonal()) print('compressionRatio= (%d, %d)' % hmat.compressionRatio()) print('fullrkRatio= (%d, %d)' % hmat.fullrkRatio()) # vector multiply y = ot.Point(hmat.getNbColumns()) x = [2.0] * hmat.getNbColumns() hmat.gemv('N', 1.0, x, 3.0, y) print('y=', y) # block assembly class TestHMatrixTensorRealAssemblyFunction(object): def __init__(self, covarianceModel, vertices): self.covarianceModel = covarianceModel self.vertices = vertices def __call__(self, i, j): pt1 = self.vertices[i] pt2 = self.vertices[j] val = self.covarianceModel(pt1, pt2) return val covarianceModel = ot.ExponentialModel([0.1] * 2, [1.0] * 2) hmat = factory.build( vertices, covarianceModel.getDimension(), True, parameters) blockAssembly = TestHMatrixTensorRealAssemblyFunction( covarianceModel, vertices) hmat.assembleTensor(blockAssembly, covarianceModel.getDimension(), 'L') hmatRef = ot.HMatrix(hmat) hmat.factorize('LLt') normL = hmat.norm() hmatRef.gemm('N', 'T', -1.0, hmat, hmat, 1.0) if hmatRef.norm() < 1e-10: print('norm(A-LLt) < 1e-10') else: print('norm(A-LLt) =', hmatRef.norm()) alpha = 0.1 hmat.scale(alpha) normScaled = hmat.norm() if abs(normL - normScaled / alpha) < 1e-10: print('|norm(L) - 10 * norm(0.1*L)| < 1e-10') else: print('|norm(L) - 10 * norm(0.1*L)| > 1e-10') openturns-1.9/python/test/t_HaarWaveletFactory_std.expout000066400000000000000000000023501307543307100241210ustar00rootroot00000000000000class=HaarWaveletFactory measure=class=Uniform name=Uniform dimension=1 a=0 b=1 order= 0 f:X -> {1.0 for 0.0<=X<1.0, 0.0 elsewhere} X= [0.4] f(X)= [1] df(X)= [0] d2f(X)= [0] order= 1 f:X -> {1 for 0<=X<0.5, -1 for 0.5<=X<1, 0.0 elsewhere} X= [0.4] f(X)= [1] df(X)= [0] d2f(X)= [0] order= 2 f:X -> {1.41421 for 0<=X<0.25, -1.41421 for 0.25<=X<0.5, 0.0 elsewhere} X= [0.4] f(X)= [-1.41421] df(X)= [0] d2f(X)= [0] order= 3 f:X -> {1.41421 for 0.5<=X<0.75, -1.41421 for 0.75<=X<1, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] order= 4 f:X -> {2 for 0<=X<0.125, -2 for 0.125<=X<0.25, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] order= 5 f:X -> {2 for 0.25<=X<0.375, -2 for 0.375<=X<0.5, 0.0 elsewhere} X= [0.4] f(X)= [-2] df(X)= [0] d2f(X)= [0] order= 6 f:X -> {2 for 0.5<=X<0.625, -2 for 0.625<=X<0.75, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] order= 7 f:X -> {2 for 0.75<=X<0.875, -2 for 0.875<=X<1, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] order= 8 f:X -> {2.82843 for 0<=X<0.0625, -2.82843 for 0.0625<=X<0.125, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] order= 9 f:X -> {2.82843 for 0.125<=X<0.1875, -2.82843 for 0.1875<=X<0.25, 0.0 elsewhere} X= [0.4] f(X)= [0] df(X)= [0] d2f(X)= [0] openturns-1.9/python/test/t_HaarWaveletFactory_std.py000077500000000000000000000006331307543307100232320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot factory = ot.HaarWaveletFactory() print(factory) x = 0.4 for i in range(10): function = factory.build(i) print('order=', i, function, 'X=', ot.Point([x]), 'f(X)=', ot.Point([function(x)]), 'df(X)=', ot.Point([function.gradient(x)]), 'd2f(X)=', ot.Point([function.hessian(x)])) openturns-1.9/python/test/t_HaltonSequence_std.expout000066400000000000000000002001161307543307100233040ustar00rootroot00000000000000class=HaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.5,0.333333,0.2,0.142857,0.0909091,0.0769231,0.0588235,0.0526316,0.0434783,0.0344828,0.0322581,0.027027,0.0243902,0.0232558,0.0212766],[0.25,0.666667,0.4,0.285714,0.181818,0.153846,0.117647,0.105263,0.0869565,0.0689655,0.0645161,0.0540541,0.0487805,0.0465116,0.0425532],[0.75,0.111111,0.6,0.428571,0.272727,0.230769,0.176471,0.157895,0.130435,0.103448,0.0967742,0.0810811,0.0731707,0.0697674,0.0638298],[0.125,0.444444,0.8,0.571429,0.363636,0.307692,0.235294,0.210526,0.173913,0.137931,0.129032,0.108108,0.097561,0.0930233,0.0851064],[0.625,0.777778,0.04,0.714286,0.454545,0.384615,0.294118,0.263158,0.217391,0.172414,0.16129,0.135135,0.121951,0.116279,0.106383],[0.375,0.222222,0.24,0.857143,0.545455,0.461538,0.352941,0.315789,0.26087,0.206897,0.193548,0.162162,0.146341,0.139535,0.12766],[0.875,0.555556,0.44,0.0204082,0.636364,0.538462,0.411765,0.368421,0.304348,0.241379,0.225806,0.189189,0.170732,0.162791,0.148936],[0.0625,0.888889,0.64,0.163265,0.727273,0.615385,0.470588,0.421053,0.347826,0.275862,0.258065,0.216216,0.195122,0.186047,0.170213],[0.5625,0.037037,0.84,0.306122,0.818182,0.692308,0.529412,0.473684,0.391304,0.310345,0.290323,0.243243,0.219512,0.209302,0.191489],[0.3125,0.37037,0.08,0.44898,0.909091,0.769231,0.588235,0.526316,0.434783,0.344828,0.322581,0.27027,0.243902,0.232558,0.212766]] class=Point name=Unnamed dimension=2 values=[0.5,0.333333] class=Point name=Unnamed dimension=2 values=[0.25,0.666667] class=Point name=Unnamed dimension=2 values=[0.75,0.111111] class=Point name=Unnamed dimension=2 values=[0.125,0.444444] class=Point name=Unnamed dimension=2 values=[0.625,0.777778] class=Point name=Unnamed dimension=2 values=[0.375,0.222222] class=Point name=Unnamed dimension=2 values=[0.875,0.555556] class=Point name=Unnamed dimension=2 values=[0.0625,0.888889] class=Point name=Unnamed dimension=2 values=[0.5625,0.037037] class=Point name=Unnamed dimension=2 values=[0.3125,0.37037] class=Point name=Unnamed dimension=2 values=[0.8125,0.703704] class=Point name=Unnamed dimension=2 values=[0.1875,0.148148] class=Point name=Unnamed dimension=2 values=[0.6875,0.481481] class=Point name=Unnamed dimension=2 values=[0.4375,0.814815] class=Point name=Unnamed dimension=2 values=[0.9375,0.259259] class=Point name=Unnamed dimension=2 values=[0.03125,0.592593] class=Point name=Unnamed dimension=2 values=[0.53125,0.925926] class=Point name=Unnamed dimension=2 values=[0.28125,0.0740741] class=Point name=Unnamed dimension=2 values=[0.78125,0.407407] class=Point name=Unnamed dimension=2 values=[0.15625,0.740741] class=Point name=Unnamed dimension=2 values=[0.65625,0.185185] class=Point name=Unnamed dimension=2 values=[0.40625,0.518519] class=Point name=Unnamed dimension=2 values=[0.90625,0.851852] class=Point name=Unnamed dimension=2 values=[0.09375,0.296296] class=Point name=Unnamed dimension=2 values=[0.59375,0.62963] class=Point name=Unnamed dimension=2 values=[0.34375,0.962963] class=Point name=Unnamed dimension=2 values=[0.84375,0.0123457] class=Point name=Unnamed dimension=2 values=[0.21875,0.345679] class=Point name=Unnamed dimension=2 values=[0.71875,0.679012] class=Point name=Unnamed dimension=2 values=[0.46875,0.123457] class=Point name=Unnamed dimension=2 values=[0.96875,0.45679] class=Point name=Unnamed dimension=2 values=[0.015625,0.790123] class=Point name=Unnamed dimension=2 values=[0.515625,0.234568] class=Point name=Unnamed dimension=2 values=[0.265625,0.567901] class=Point name=Unnamed dimension=2 values=[0.765625,0.901235] class=Point name=Unnamed dimension=2 values=[0.140625,0.0493827] class=Point name=Unnamed dimension=2 values=[0.640625,0.382716] class=Point name=Unnamed dimension=2 values=[0.390625,0.716049] class=Point name=Unnamed dimension=2 values=[0.890625,0.160494] class=Point name=Unnamed dimension=2 values=[0.078125,0.493827] class=Point name=Unnamed dimension=2 values=[0.578125,0.82716] class=Point name=Unnamed dimension=2 values=[0.328125,0.271605] class=Point name=Unnamed dimension=2 values=[0.828125,0.604938] class=Point name=Unnamed dimension=2 values=[0.203125,0.938272] class=Point name=Unnamed dimension=2 values=[0.703125,0.0864198] class=Point name=Unnamed dimension=2 values=[0.453125,0.419753] class=Point name=Unnamed dimension=2 values=[0.953125,0.753086] class=Point name=Unnamed dimension=2 values=[0.046875,0.197531] class=Point name=Unnamed dimension=2 values=[0.546875,0.530864] class=Point name=Unnamed dimension=2 values=[0.296875,0.864198] class=Point name=Unnamed dimension=2 values=[0.796875,0.308642] class=Point name=Unnamed dimension=2 values=[0.171875,0.641975] class=Point name=Unnamed dimension=2 values=[0.671875,0.975309] class=Point name=Unnamed dimension=2 values=[0.421875,0.0246914] class=Point name=Unnamed dimension=2 values=[0.921875,0.358025] class=Point name=Unnamed dimension=2 values=[0.109375,0.691358] class=Point name=Unnamed dimension=2 values=[0.609375,0.135802] class=Point name=Unnamed dimension=2 values=[0.359375,0.469136] class=Point name=Unnamed dimension=2 values=[0.859375,0.802469] class=Point name=Unnamed dimension=2 values=[0.234375,0.246914] class=Point name=Unnamed dimension=2 values=[0.734375,0.580247] class=Point name=Unnamed dimension=2 values=[0.484375,0.91358] class=Point name=Unnamed dimension=2 values=[0.984375,0.0617284] class=Point name=Unnamed dimension=2 values=[0.0078125,0.395062] class=Point name=Unnamed dimension=2 values=[0.507812,0.728395] class=Point name=Unnamed dimension=2 values=[0.257812,0.17284] class=Point name=Unnamed dimension=2 values=[0.757812,0.506173] class=Point name=Unnamed dimension=2 values=[0.132812,0.839506] class=Point name=Unnamed dimension=2 values=[0.632812,0.283951] class=Point name=Unnamed dimension=2 values=[0.382812,0.617284] class=Point name=Unnamed dimension=2 values=[0.882812,0.950617] class=Point name=Unnamed dimension=2 values=[0.0703125,0.0987654] class=Point name=Unnamed dimension=2 values=[0.570312,0.432099] class=Point name=Unnamed dimension=2 values=[0.320312,0.765432] class=Point name=Unnamed dimension=2 values=[0.820312,0.209877] class=Point name=Unnamed dimension=2 values=[0.195312,0.54321] class=Point name=Unnamed dimension=2 values=[0.695312,0.876543] class=Point name=Unnamed dimension=2 values=[0.445312,0.320988] class=Point name=Unnamed dimension=2 values=[0.945312,0.654321] class=Point name=Unnamed dimension=2 values=[0.0390625,0.987654] class=Point name=Unnamed dimension=2 values=[0.539062,0.00411523] class=Point name=Unnamed dimension=2 values=[0.289062,0.337449] class=Point name=Unnamed dimension=2 values=[0.789062,0.670782] class=Point name=Unnamed dimension=2 values=[0.164062,0.115226] class=Point name=Unnamed dimension=2 values=[0.664062,0.44856] class=Point name=Unnamed dimension=2 values=[0.414062,0.781893] class=Point name=Unnamed dimension=2 values=[0.914062,0.226337] class=Point name=Unnamed dimension=2 values=[0.101562,0.559671] class=Point name=Unnamed dimension=2 values=[0.601562,0.893004] class=Point name=Unnamed dimension=2 values=[0.351562,0.0411523] class=Point name=Unnamed dimension=2 values=[0.851562,0.374486] class=Point name=Unnamed dimension=2 values=[0.226562,0.707819] class=Point name=Unnamed dimension=2 values=[0.726562,0.152263] class=Point name=Unnamed dimension=2 values=[0.476562,0.485597] class=Point name=Unnamed dimension=2 values=[0.976562,0.81893] class=Point name=Unnamed dimension=2 values=[0.0234375,0.263374] class=Point name=Unnamed dimension=2 values=[0.523438,0.596708] class=Point name=Unnamed dimension=2 values=[0.273438,0.930041] class=Point name=Unnamed dimension=2 values=[0.773438,0.0781893] class=Point name=Unnamed dimension=2 values=[0.148438,0.411523] class=Point name=Unnamed dimension=2 values=[0.648438,0.744856] class=Point name=Unnamed dimension=2 values=[0.398438,0.1893] class=Point name=Unnamed dimension=2 values=[0.898438,0.522634] class=Point name=Unnamed dimension=2 values=[0.0859375,0.855967] class=Point name=Unnamed dimension=2 values=[0.585938,0.300412] class=Point name=Unnamed dimension=2 values=[0.335938,0.633745] class=Point name=Unnamed dimension=2 values=[0.835938,0.967078] class=Point name=Unnamed dimension=2 values=[0.210938,0.0164609] class=Point name=Unnamed dimension=2 values=[0.710938,0.349794] class=Point name=Unnamed dimension=2 values=[0.460938,0.683128] class=Point name=Unnamed dimension=2 values=[0.960938,0.127572] class=Point name=Unnamed dimension=2 values=[0.0546875,0.460905] class=Point name=Unnamed dimension=2 values=[0.554688,0.794239] class=Point name=Unnamed dimension=2 values=[0.304688,0.238683] class=Point name=Unnamed dimension=2 values=[0.804688,0.572016] class=Point name=Unnamed dimension=2 values=[0.179688,0.90535] class=Point name=Unnamed dimension=2 values=[0.679688,0.0534979] class=Point name=Unnamed dimension=2 values=[0.429688,0.386831] class=Point name=Unnamed dimension=2 values=[0.929688,0.720165] class=Point name=Unnamed dimension=2 values=[0.117188,0.164609] class=Point name=Unnamed dimension=2 values=[0.617188,0.497942] class=Point name=Unnamed dimension=2 values=[0.367188,0.831276] class=Point name=Unnamed dimension=2 values=[0.867188,0.27572] class=Point name=Unnamed dimension=2 values=[0.242188,0.609053] class=Point name=Unnamed dimension=2 values=[0.742188,0.942387] class=Point name=Unnamed dimension=2 values=[0.492188,0.090535] class=Point name=Unnamed dimension=2 values=[0.992188,0.423868] class=Point name=Unnamed dimension=2 values=[0.00390625,0.757202] class=Point name=Unnamed dimension=2 values=[0.503906,0.201646] class=Point name=Unnamed dimension=2 values=[0.253906,0.534979] class=Point name=Unnamed dimension=2 values=[0.753906,0.868313] class=Point name=Unnamed dimension=2 values=[0.128906,0.312757] class=Point name=Unnamed dimension=2 values=[0.628906,0.646091] class=Point name=Unnamed dimension=2 values=[0.378906,0.979424] class=Point name=Unnamed dimension=2 values=[0.878906,0.0288066] class=Point name=Unnamed dimension=2 values=[0.0664062,0.36214] class=Point name=Unnamed dimension=2 values=[0.566406,0.695473] class=Point name=Unnamed dimension=2 values=[0.316406,0.139918] class=Point name=Unnamed dimension=2 values=[0.816406,0.473251] class=Point name=Unnamed dimension=2 values=[0.191406,0.806584] class=Point name=Unnamed dimension=2 values=[0.691406,0.251029] class=Point name=Unnamed dimension=2 values=[0.441406,0.584362] class=Point name=Unnamed dimension=2 values=[0.941406,0.917695] class=Point name=Unnamed dimension=2 values=[0.0351562,0.0658436] class=Point name=Unnamed dimension=2 values=[0.535156,0.399177] class=Point name=Unnamed dimension=2 values=[0.285156,0.73251] class=Point name=Unnamed dimension=2 values=[0.785156,0.176955] class=Point name=Unnamed dimension=2 values=[0.160156,0.510288] class=Point name=Unnamed dimension=2 values=[0.660156,0.843621] class=Point name=Unnamed dimension=2 values=[0.410156,0.288066] class=Point name=Unnamed dimension=2 values=[0.910156,0.621399] class=Point name=Unnamed dimension=2 values=[0.0976562,0.954733] class=Point name=Unnamed dimension=2 values=[0.597656,0.102881] class=Point name=Unnamed dimension=2 values=[0.347656,0.436214] class=Point name=Unnamed dimension=2 values=[0.847656,0.769547] class=Point name=Unnamed dimension=2 values=[0.222656,0.213992] class=Point name=Unnamed dimension=2 values=[0.722656,0.547325] class=Point name=Unnamed dimension=2 values=[0.472656,0.880658] class=Point name=Unnamed dimension=2 values=[0.972656,0.325103] class=Point name=Unnamed dimension=2 values=[0.0195312,0.658436] class=Point name=Unnamed dimension=2 values=[0.519531,0.99177] class=Point name=Unnamed dimension=2 values=[0.269531,0.00823045] class=Point name=Unnamed dimension=2 values=[0.769531,0.341564] class=Point name=Unnamed dimension=2 values=[0.144531,0.674897] class=Point name=Unnamed dimension=2 values=[0.644531,0.119342] class=Point name=Unnamed dimension=2 values=[0.394531,0.452675] class=Point name=Unnamed dimension=2 values=[0.894531,0.786008] class=Point name=Unnamed dimension=2 values=[0.0820312,0.230453] class=Point name=Unnamed dimension=2 values=[0.582031,0.563786] class=Point name=Unnamed dimension=2 values=[0.332031,0.897119] class=Point name=Unnamed dimension=2 values=[0.832031,0.0452675] class=Point name=Unnamed dimension=2 values=[0.207031,0.378601] class=Point name=Unnamed dimension=2 values=[0.707031,0.711934] class=Point name=Unnamed dimension=2 values=[0.457031,0.156379] class=Point name=Unnamed dimension=2 values=[0.957031,0.489712] class=Point name=Unnamed dimension=2 values=[0.0507812,0.823045] class=Point name=Unnamed dimension=2 values=[0.550781,0.26749] class=Point name=Unnamed dimension=2 values=[0.300781,0.600823] class=Point name=Unnamed dimension=2 values=[0.800781,0.934156] class=Point name=Unnamed dimension=2 values=[0.175781,0.0823045] class=Point name=Unnamed dimension=2 values=[0.675781,0.415638] class=Point name=Unnamed dimension=2 values=[0.425781,0.748971] class=Point name=Unnamed dimension=2 values=[0.925781,0.193416] class=Point name=Unnamed dimension=2 values=[0.113281,0.526749] class=Point name=Unnamed dimension=2 values=[0.613281,0.860082] class=Point name=Unnamed dimension=2 values=[0.363281,0.304527] class=Point name=Unnamed dimension=2 values=[0.863281,0.63786] class=Point name=Unnamed dimension=2 values=[0.238281,0.971193] class=Point name=Unnamed dimension=2 values=[0.738281,0.0205761] class=Point name=Unnamed dimension=2 values=[0.488281,0.353909] class=Point name=Unnamed dimension=2 values=[0.988281,0.687243] class=Point name=Unnamed dimension=2 values=[0.0117188,0.131687] class=Point name=Unnamed dimension=2 values=[0.511719,0.465021] class=Point name=Unnamed dimension=2 values=[0.261719,0.798354] class=Point name=Unnamed dimension=2 values=[0.761719,0.242798] class=Point name=Unnamed dimension=2 values=[0.136719,0.576132] class=Point name=Unnamed dimension=2 values=[0.636719,0.909465] class=Point name=Unnamed dimension=2 values=[0.386719,0.0576132] class=Point name=Unnamed dimension=2 values=[0.886719,0.390947] class=Point name=Unnamed dimension=2 values=[0.0742188,0.72428] class=Point name=Unnamed dimension=2 values=[0.574219,0.168724] class=Point name=Unnamed dimension=2 values=[0.324219,0.502058] class=Point name=Unnamed dimension=2 values=[0.824219,0.835391] class=Point name=Unnamed dimension=2 values=[0.199219,0.279835] class=Point name=Unnamed dimension=2 values=[0.699219,0.613169] class=Point name=Unnamed dimension=2 values=[0.449219,0.946502] class=Point name=Unnamed dimension=2 values=[0.949219,0.0946502] class=Point name=Unnamed dimension=2 values=[0.0429688,0.427984] class=Point name=Unnamed dimension=2 values=[0.542969,0.761317] class=Point name=Unnamed dimension=2 values=[0.292969,0.205761] class=Point name=Unnamed dimension=2 values=[0.792969,0.539095] class=Point name=Unnamed dimension=2 values=[0.167969,0.872428] class=Point name=Unnamed dimension=2 values=[0.667969,0.316872] class=Point name=Unnamed dimension=2 values=[0.417969,0.650206] class=Point name=Unnamed dimension=2 values=[0.917969,0.983539] class=Point name=Unnamed dimension=2 values=[0.105469,0.0329218] class=Point name=Unnamed dimension=2 values=[0.605469,0.366255] class=Point name=Unnamed dimension=2 values=[0.355469,0.699588] class=Point name=Unnamed dimension=2 values=[0.855469,0.144033] class=Point name=Unnamed dimension=2 values=[0.230469,0.477366] class=Point name=Unnamed dimension=2 values=[0.730469,0.8107] class=Point name=Unnamed dimension=2 values=[0.480469,0.255144] class=Point name=Unnamed dimension=2 values=[0.980469,0.588477] class=Point name=Unnamed dimension=2 values=[0.0273438,0.921811] class=Point name=Unnamed dimension=2 values=[0.527344,0.0699588] class=Point name=Unnamed dimension=2 values=[0.277344,0.403292] class=Point name=Unnamed dimension=2 values=[0.777344,0.736626] class=Point name=Unnamed dimension=2 values=[0.152344,0.18107] class=Point name=Unnamed dimension=2 values=[0.652344,0.514403] class=Point name=Unnamed dimension=2 values=[0.402344,0.847737] class=Point name=Unnamed dimension=2 values=[0.902344,0.292181] class=Point name=Unnamed dimension=2 values=[0.0898438,0.625514] class=Point name=Unnamed dimension=2 values=[0.589844,0.958848] class=Point name=Unnamed dimension=2 values=[0.339844,0.106996] class=Point name=Unnamed dimension=2 values=[0.839844,0.440329] class=Point name=Unnamed dimension=2 values=[0.214844,0.773663] class=Point name=Unnamed dimension=2 values=[0.714844,0.218107] class=Point name=Unnamed dimension=2 values=[0.464844,0.55144] class=Point name=Unnamed dimension=2 values=[0.964844,0.884774] class=Point name=Unnamed dimension=2 values=[0.0585938,0.329218] class=Point name=Unnamed dimension=2 values=[0.558594,0.662551] class=Point name=Unnamed dimension=2 values=[0.308594,0.995885] class=Point name=Unnamed dimension=2 values=[0.808594,0.00137174] class=Point name=Unnamed dimension=2 values=[0.183594,0.334705] class=Point name=Unnamed dimension=2 values=[0.683594,0.668038] class=Point name=Unnamed dimension=2 values=[0.433594,0.112483] class=Point name=Unnamed dimension=2 values=[0.933594,0.445816] class=Point name=Unnamed dimension=2 values=[0.121094,0.77915] class=Point name=Unnamed dimension=2 values=[0.621094,0.223594] class=Point name=Unnamed dimension=2 values=[0.371094,0.556927] class=Point name=Unnamed dimension=2 values=[0.871094,0.890261] class=Point name=Unnamed dimension=2 values=[0.246094,0.0384088] class=Point name=Unnamed dimension=2 values=[0.746094,0.371742] class=Point name=Unnamed dimension=2 values=[0.496094,0.705075] class=Point name=Unnamed dimension=2 values=[0.996094,0.14952] class=Point name=Unnamed dimension=2 values=[0.00195312,0.482853] class=Point name=Unnamed dimension=2 values=[0.501953,0.816187] class=Point name=Unnamed dimension=2 values=[0.251953,0.260631] class=Point name=Unnamed dimension=2 values=[0.751953,0.593964] class=Point name=Unnamed dimension=2 values=[0.126953,0.927298] class=Point name=Unnamed dimension=2 values=[0.626953,0.0754458] class=Point name=Unnamed dimension=2 values=[0.376953,0.408779] class=Point name=Unnamed dimension=2 values=[0.876953,0.742112] class=Point name=Unnamed dimension=2 values=[0.0644531,0.186557] class=Point name=Unnamed dimension=2 values=[0.564453,0.51989] class=Point name=Unnamed dimension=2 values=[0.314453,0.853224] class=Point name=Unnamed dimension=2 values=[0.814453,0.297668] class=Point name=Unnamed dimension=2 values=[0.189453,0.631001] class=Point name=Unnamed dimension=2 values=[0.689453,0.964335] class=Point name=Unnamed dimension=2 values=[0.439453,0.0137174] class=Point name=Unnamed dimension=2 values=[0.939453,0.347051] class=Point name=Unnamed dimension=2 values=[0.0332031,0.680384] class=Point name=Unnamed dimension=2 values=[0.533203,0.124829] class=Point name=Unnamed dimension=2 values=[0.283203,0.458162] class=Point name=Unnamed dimension=2 values=[0.783203,0.791495] class=Point name=Unnamed dimension=2 values=[0.158203,0.23594] class=Point name=Unnamed dimension=2 values=[0.658203,0.569273] class=Point name=Unnamed dimension=2 values=[0.408203,0.902606] class=Point name=Unnamed dimension=2 values=[0.908203,0.0507545] class=Point name=Unnamed dimension=2 values=[0.0957031,0.384088] class=Point name=Unnamed dimension=2 values=[0.595703,0.717421] class=Point name=Unnamed dimension=2 values=[0.345703,0.161866] class=Point name=Unnamed dimension=2 values=[0.845703,0.495199] class=Point name=Unnamed dimension=2 values=[0.220703,0.828532] class=Point name=Unnamed dimension=2 values=[0.720703,0.272977] class=Point name=Unnamed dimension=2 values=[0.470703,0.60631] class=Point name=Unnamed dimension=2 values=[0.970703,0.939643] class=Point name=Unnamed dimension=2 values=[0.0175781,0.0877915] class=Point name=Unnamed dimension=2 values=[0.517578,0.421125] class=Point name=Unnamed dimension=2 values=[0.267578,0.754458] class=Point name=Unnamed dimension=2 values=[0.767578,0.198903] class=Point name=Unnamed dimension=2 values=[0.142578,0.532236] class=Point name=Unnamed dimension=2 values=[0.642578,0.865569] class=Point name=Unnamed dimension=2 values=[0.392578,0.310014] class=Point name=Unnamed dimension=2 values=[0.892578,0.643347] class=Point name=Unnamed dimension=2 values=[0.0800781,0.97668] class=Point name=Unnamed dimension=2 values=[0.580078,0.0260631] class=Point name=Unnamed dimension=2 values=[0.330078,0.359396] class=Point name=Unnamed dimension=2 values=[0.830078,0.69273] class=Point name=Unnamed dimension=2 values=[0.205078,0.137174] class=Point name=Unnamed dimension=2 values=[0.705078,0.470508] class=Point name=Unnamed dimension=2 values=[0.455078,0.803841] class=Point name=Unnamed dimension=2 values=[0.955078,0.248285] class=Point name=Unnamed dimension=2 values=[0.0488281,0.581619] class=Point name=Unnamed dimension=2 values=[0.548828,0.914952] class=Point name=Unnamed dimension=2 values=[0.298828,0.0631001] class=Point name=Unnamed dimension=2 values=[0.798828,0.396433] class=Point name=Unnamed dimension=2 values=[0.173828,0.729767] class=Point name=Unnamed dimension=2 values=[0.673828,0.174211] class=Point name=Unnamed dimension=2 values=[0.423828,0.507545] class=Point name=Unnamed dimension=2 values=[0.923828,0.840878] class=Point name=Unnamed dimension=2 values=[0.111328,0.285322] class=Point name=Unnamed dimension=2 values=[0.611328,0.618656] class=Point name=Unnamed dimension=2 values=[0.361328,0.951989] class=Point name=Unnamed dimension=2 values=[0.861328,0.100137] class=Point name=Unnamed dimension=2 values=[0.236328,0.433471] class=Point name=Unnamed dimension=2 values=[0.736328,0.766804] class=Point name=Unnamed dimension=2 values=[0.486328,0.211248] class=Point name=Unnamed dimension=2 values=[0.986328,0.544582] class=Point name=Unnamed dimension=2 values=[0.00976562,0.877915] class=Point name=Unnamed dimension=2 values=[0.509766,0.322359] class=Point name=Unnamed dimension=2 values=[0.259766,0.655693] class=Point name=Unnamed dimension=2 values=[0.759766,0.989026] class=Point name=Unnamed dimension=2 values=[0.134766,0.00548697] class=Point name=Unnamed dimension=2 values=[0.634766,0.33882] class=Point name=Unnamed dimension=2 values=[0.384766,0.672154] class=Point name=Unnamed dimension=2 values=[0.884766,0.116598] class=Point name=Unnamed dimension=2 values=[0.0722656,0.449931] class=Point name=Unnamed dimension=2 values=[0.572266,0.783265] class=Point name=Unnamed dimension=2 values=[0.322266,0.227709] class=Point name=Unnamed dimension=2 values=[0.822266,0.561043] class=Point name=Unnamed dimension=2 values=[0.197266,0.894376] class=Point name=Unnamed dimension=2 values=[0.697266,0.042524] class=Point name=Unnamed dimension=2 values=[0.447266,0.375857] class=Point name=Unnamed dimension=2 values=[0.947266,0.709191] class=Point name=Unnamed dimension=2 values=[0.0410156,0.153635] class=Point name=Unnamed dimension=2 values=[0.541016,0.486968] class=Point name=Unnamed dimension=2 values=[0.291016,0.820302] class=Point name=Unnamed dimension=2 values=[0.791016,0.264746] class=Point name=Unnamed dimension=2 values=[0.166016,0.59808] class=Point name=Unnamed dimension=2 values=[0.666016,0.931413] class=Point name=Unnamed dimension=2 values=[0.416016,0.079561] class=Point name=Unnamed dimension=2 values=[0.916016,0.412894] class=Point name=Unnamed dimension=2 values=[0.103516,0.746228] class=Point name=Unnamed dimension=2 values=[0.603516,0.190672] class=Point name=Unnamed dimension=2 values=[0.353516,0.524005] class=Point name=Unnamed dimension=2 values=[0.853516,0.857339] class=Point name=Unnamed dimension=2 values=[0.228516,0.301783] class=Point name=Unnamed dimension=2 values=[0.728516,0.635117] class=Point name=Unnamed dimension=2 values=[0.478516,0.96845] class=Point name=Unnamed dimension=2 values=[0.978516,0.0178326] class=Point name=Unnamed dimension=2 values=[0.0253906,0.351166] class=Point name=Unnamed dimension=2 values=[0.525391,0.684499] class=Point name=Unnamed dimension=2 values=[0.275391,0.128944] class=Point name=Unnamed dimension=2 values=[0.775391,0.462277] class=Point name=Unnamed dimension=2 values=[0.150391,0.79561] class=Point name=Unnamed dimension=2 values=[0.650391,0.240055] class=Point name=Unnamed dimension=2 values=[0.400391,0.573388] class=Point name=Unnamed dimension=2 values=[0.900391,0.906722] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0548697] class=Point name=Unnamed dimension=2 values=[0.587891,0.388203] class=Point name=Unnamed dimension=2 values=[0.337891,0.721536] class=Point name=Unnamed dimension=2 values=[0.837891,0.165981] class=Point name=Unnamed dimension=2 values=[0.212891,0.499314] class=Point name=Unnamed dimension=2 values=[0.712891,0.832647] class=Point name=Unnamed dimension=2 values=[0.462891,0.277092] class=Point name=Unnamed dimension=2 values=[0.962891,0.610425] class=Point name=Unnamed dimension=2 values=[0.0566406,0.943759] class=Point name=Unnamed dimension=2 values=[0.556641,0.0919067] class=Point name=Unnamed dimension=2 values=[0.306641,0.42524] class=Point name=Unnamed dimension=2 values=[0.806641,0.758573] class=Point name=Unnamed dimension=2 values=[0.181641,0.203018] class=Point name=Unnamed dimension=2 values=[0.681641,0.536351] class=Point name=Unnamed dimension=2 values=[0.431641,0.869684] class=Point name=Unnamed dimension=2 values=[0.931641,0.314129] class=Point name=Unnamed dimension=2 values=[0.119141,0.647462] class=Point name=Unnamed dimension=2 values=[0.619141,0.980796] class=Point name=Unnamed dimension=2 values=[0.369141,0.0301783] class=Point name=Unnamed dimension=2 values=[0.869141,0.363512] class=Point name=Unnamed dimension=2 values=[0.244141,0.696845] class=Point name=Unnamed dimension=2 values=[0.744141,0.141289] class=Point name=Unnamed dimension=2 values=[0.494141,0.474623] class=Point name=Unnamed dimension=2 values=[0.994141,0.807956] class=Point name=Unnamed dimension=2 values=[0.00585938,0.252401] class=Point name=Unnamed dimension=2 values=[0.505859,0.585734] class=Point name=Unnamed dimension=2 values=[0.255859,0.919067] class=Point name=Unnamed dimension=2 values=[0.755859,0.0672154] class=Point name=Unnamed dimension=2 values=[0.130859,0.400549] class=Point name=Unnamed dimension=2 values=[0.630859,0.733882] class=Point name=Unnamed dimension=2 values=[0.380859,0.178326] class=Point name=Unnamed dimension=2 values=[0.880859,0.51166] class=Point name=Unnamed dimension=2 values=[0.0683594,0.844993] class=Point name=Unnamed dimension=2 values=[0.568359,0.289438] class=Point name=Unnamed dimension=2 values=[0.318359,0.622771] class=Point name=Unnamed dimension=2 values=[0.818359,0.956104] class=Point name=Unnamed dimension=2 values=[0.193359,0.104252] class=Point name=Unnamed dimension=2 values=[0.693359,0.437586] class=Point name=Unnamed dimension=2 values=[0.443359,0.770919] class=Point name=Unnamed dimension=2 values=[0.943359,0.215364] class=Point name=Unnamed dimension=2 values=[0.0371094,0.548697] class=Point name=Unnamed dimension=2 values=[0.537109,0.88203] class=Point name=Unnamed dimension=2 values=[0.287109,0.326475] class=Point name=Unnamed dimension=2 values=[0.787109,0.659808] class=Point name=Unnamed dimension=2 values=[0.162109,0.993141] class=Point name=Unnamed dimension=2 values=[0.662109,0.00960219] class=Point name=Unnamed dimension=2 values=[0.412109,0.342936] class=Point name=Unnamed dimension=2 values=[0.912109,0.676269] class=Point name=Unnamed dimension=2 values=[0.0996094,0.120713] class=Point name=Unnamed dimension=2 values=[0.599609,0.454047] class=Point name=Unnamed dimension=2 values=[0.349609,0.78738] class=Point name=Unnamed dimension=2 values=[0.849609,0.231824] class=Point name=Unnamed dimension=2 values=[0.224609,0.565158] class=Point name=Unnamed dimension=2 values=[0.724609,0.898491] class=Point name=Unnamed dimension=2 values=[0.474609,0.0466392] class=Point name=Unnamed dimension=2 values=[0.974609,0.379973] class=Point name=Unnamed dimension=2 values=[0.0214844,0.713306] class=Point name=Unnamed dimension=2 values=[0.521484,0.15775] class=Point name=Unnamed dimension=2 values=[0.271484,0.491084] class=Point name=Unnamed dimension=2 values=[0.771484,0.824417] class=Point name=Unnamed dimension=2 values=[0.146484,0.268861] class=Point name=Unnamed dimension=2 values=[0.646484,0.602195] class=Point name=Unnamed dimension=2 values=[0.396484,0.935528] class=Point name=Unnamed dimension=2 values=[0.896484,0.0836763] class=Point name=Unnamed dimension=2 values=[0.0839844,0.41701] class=Point name=Unnamed dimension=2 values=[0.583984,0.750343] class=Point name=Unnamed dimension=2 values=[0.333984,0.194787] class=Point name=Unnamed dimension=2 values=[0.833984,0.528121] class=Point name=Unnamed dimension=2 values=[0.208984,0.861454] class=Point name=Unnamed dimension=2 values=[0.708984,0.305898] class=Point name=Unnamed dimension=2 values=[0.458984,0.639232] class=Point name=Unnamed dimension=2 values=[0.958984,0.972565] class=Point name=Unnamed dimension=2 values=[0.0527344,0.0219479] class=Point name=Unnamed dimension=2 values=[0.552734,0.355281] class=Point name=Unnamed dimension=2 values=[0.302734,0.688615] class=Point name=Unnamed dimension=2 values=[0.802734,0.133059] class=Point name=Unnamed dimension=2 values=[0.177734,0.466392] class=Point name=Unnamed dimension=2 values=[0.677734,0.799726] class=Point name=Unnamed dimension=2 values=[0.427734,0.24417] class=Point name=Unnamed dimension=2 values=[0.927734,0.577503] class=Point name=Unnamed dimension=2 values=[0.115234,0.910837] class=Point name=Unnamed dimension=2 values=[0.615234,0.0589849] class=Point name=Unnamed dimension=2 values=[0.365234,0.392318] class=Point name=Unnamed dimension=2 values=[0.865234,0.725652] class=Point name=Unnamed dimension=2 values=[0.240234,0.170096] class=Point name=Unnamed dimension=2 values=[0.740234,0.503429] class=Point name=Unnamed dimension=2 values=[0.490234,0.836763] class=Point name=Unnamed dimension=2 values=[0.990234,0.281207] class=Point name=Unnamed dimension=2 values=[0.0136719,0.61454] class=Point name=Unnamed dimension=2 values=[0.513672,0.947874] class=Point name=Unnamed dimension=2 values=[0.263672,0.0960219] class=Point name=Unnamed dimension=2 values=[0.763672,0.429355] class=Point name=Unnamed dimension=2 values=[0.138672,0.762689] class=Point name=Unnamed dimension=2 values=[0.638672,0.207133] class=Point name=Unnamed dimension=2 values=[0.388672,0.540466] class=Point name=Unnamed dimension=2 values=[0.888672,0.8738] class=Point name=Unnamed dimension=2 values=[0.0761719,0.318244] class=Point name=Unnamed dimension=2 values=[0.576172,0.651578] class=Point name=Unnamed dimension=2 values=[0.326172,0.984911] class=Point name=Unnamed dimension=2 values=[0.826172,0.0342936] class=Point name=Unnamed dimension=2 values=[0.201172,0.367627] class=Point name=Unnamed dimension=2 values=[0.701172,0.70096] class=Point name=Unnamed dimension=2 values=[0.451172,0.145405] class=Point name=Unnamed dimension=2 values=[0.951172,0.478738] class=Point name=Unnamed dimension=2 values=[0.0449219,0.812071] class=Point name=Unnamed dimension=2 values=[0.544922,0.256516] class=Point name=Unnamed dimension=2 values=[0.294922,0.589849] class=Point name=Unnamed dimension=2 values=[0.794922,0.923182] class=Point name=Unnamed dimension=2 values=[0.169922,0.0713306] class=Point name=Unnamed dimension=2 values=[0.669922,0.404664] class=Point name=Unnamed dimension=2 values=[0.419922,0.737997] class=Point name=Unnamed dimension=2 values=[0.919922,0.182442] class=Point name=Unnamed dimension=2 values=[0.107422,0.515775] class=Point name=Unnamed dimension=2 values=[0.607422,0.849108] class=Point name=Unnamed dimension=2 values=[0.357422,0.293553] class=Point name=Unnamed dimension=2 values=[0.857422,0.626886] class=Point name=Unnamed dimension=2 values=[0.232422,0.960219] class=Point name=Unnamed dimension=2 values=[0.732422,0.108368] class=Point name=Unnamed dimension=2 values=[0.482422,0.441701] class=Point name=Unnamed dimension=2 values=[0.982422,0.775034] class=Point name=Unnamed dimension=2 values=[0.0292969,0.219479] class=Point name=Unnamed dimension=2 values=[0.529297,0.552812] class=Point name=Unnamed dimension=2 values=[0.279297,0.886145] class=Point name=Unnamed dimension=2 values=[0.779297,0.33059] class=Point name=Unnamed dimension=2 values=[0.154297,0.663923] class=Point name=Unnamed dimension=2 values=[0.654297,0.997257] class=Point name=Unnamed dimension=2 values=[0.404297,0.00274348] class=Point name=Unnamed dimension=2 values=[0.904297,0.336077] class=Point name=Unnamed dimension=2 values=[0.0917969,0.66941] class=Point name=Unnamed dimension=2 values=[0.591797,0.113855] class=Point name=Unnamed dimension=2 values=[0.341797,0.447188] class=Point name=Unnamed dimension=2 values=[0.841797,0.780521] class=Point name=Unnamed dimension=2 values=[0.216797,0.224966] class=Point name=Unnamed dimension=2 values=[0.716797,0.558299] class=Point name=Unnamed dimension=2 values=[0.466797,0.891632] class=Point name=Unnamed dimension=2 values=[0.966797,0.0397805] class=Point name=Unnamed dimension=2 values=[0.0605469,0.373114] class=Point name=Unnamed dimension=2 values=[0.560547,0.706447] class=Point name=Unnamed dimension=2 values=[0.310547,0.150892] class=Point name=Unnamed dimension=2 values=[0.810547,0.484225] class=Point name=Unnamed dimension=2 values=[0.185547,0.817558] class=Point name=Unnamed dimension=2 values=[0.685547,0.262003] class=Point name=Unnamed dimension=2 values=[0.435547,0.595336] class=Point name=Unnamed dimension=2 values=[0.935547,0.928669] class=Point name=Unnamed dimension=2 values=[0.123047,0.0768176] class=Point name=Unnamed dimension=2 values=[0.623047,0.410151] class=Point name=Unnamed dimension=2 values=[0.373047,0.743484] class=Point name=Unnamed dimension=2 values=[0.873047,0.187929] class=Point name=Unnamed dimension=2 values=[0.248047,0.521262] class=Point name=Unnamed dimension=2 values=[0.748047,0.854595] class=Point name=Unnamed dimension=2 values=[0.498047,0.29904] class=Point name=Unnamed dimension=2 values=[0.998047,0.632373] class=Point name=Unnamed dimension=2 values=[0.000976562,0.965706] class=Point name=Unnamed dimension=2 values=[0.500977,0.0150892] class=Point name=Unnamed dimension=2 values=[0.250977,0.348422] class=Point name=Unnamed dimension=2 values=[0.750977,0.681756] class=Point name=Unnamed dimension=2 values=[0.125977,0.1262] class=Point name=Unnamed dimension=2 values=[0.625977,0.459534] class=Point name=Unnamed dimension=2 values=[0.375977,0.792867] class=Point name=Unnamed dimension=2 values=[0.875977,0.237311] class=Point name=Unnamed dimension=2 values=[0.0634766,0.570645] class=Point name=Unnamed dimension=2 values=[0.563477,0.903978] class=Point name=Unnamed dimension=2 values=[0.313477,0.0521262] class=Point name=Unnamed dimension=2 values=[0.813477,0.38546] class=Point name=Unnamed dimension=2 values=[0.188477,0.718793] class=Point name=Unnamed dimension=2 values=[0.688477,0.163237] class=Point name=Unnamed dimension=2 values=[0.438477,0.496571] class=Point name=Unnamed dimension=2 values=[0.938477,0.829904] class=Point name=Unnamed dimension=2 values=[0.0322266,0.274348] class=Point name=Unnamed dimension=2 values=[0.532227,0.607682] class=Point name=Unnamed dimension=2 values=[0.282227,0.941015] class=Point name=Unnamed dimension=2 values=[0.782227,0.0891632] class=Point name=Unnamed dimension=2 values=[0.157227,0.422497] class=Point name=Unnamed dimension=2 values=[0.657227,0.75583] class=Point name=Unnamed dimension=2 values=[0.407227,0.200274] class=Point name=Unnamed dimension=2 values=[0.907227,0.533608] class=Point name=Unnamed dimension=2 values=[0.0947266,0.866941] class=Point name=Unnamed dimension=2 values=[0.594727,0.311385] class=Point name=Unnamed dimension=2 values=[0.344727,0.644719] class=Point name=Unnamed dimension=2 values=[0.844727,0.978052] class=Point name=Unnamed dimension=2 values=[0.219727,0.0274348] class=Point name=Unnamed dimension=2 values=[0.719727,0.360768] class=Point name=Unnamed dimension=2 values=[0.469727,0.694102] class=Point name=Unnamed dimension=2 values=[0.969727,0.138546] class=Point name=Unnamed dimension=2 values=[0.0166016,0.471879] class=Point name=Unnamed dimension=2 values=[0.516602,0.805213] class=Point name=Unnamed dimension=2 values=[0.266602,0.249657] class=Point name=Unnamed dimension=2 values=[0.766602,0.58299] class=Point name=Unnamed dimension=2 values=[0.141602,0.916324] class=Point name=Unnamed dimension=2 values=[0.641602,0.0644719] class=Point name=Unnamed dimension=2 values=[0.391602,0.397805] class=Point name=Unnamed dimension=2 values=[0.891602,0.731139] class=Point name=Unnamed dimension=2 values=[0.0791016,0.175583] class=Point name=Unnamed dimension=2 values=[0.579102,0.508916] class=Point name=Unnamed dimension=2 values=[0.329102,0.84225] class=Point name=Unnamed dimension=2 values=[0.829102,0.286694] class=Point name=Unnamed dimension=2 values=[0.204102,0.620027] class=Point name=Unnamed dimension=2 values=[0.704102,0.953361] class=Point name=Unnamed dimension=2 values=[0.454102,0.101509] class=Point name=Unnamed dimension=2 values=[0.954102,0.434842] class=Point name=Unnamed dimension=2 values=[0.0478516,0.768176] class=Point name=Unnamed dimension=2 values=[0.547852,0.21262] class=Point name=Unnamed dimension=2 values=[0.297852,0.545953] class=Point name=Unnamed dimension=2 values=[0.797852,0.879287] class=Point name=Unnamed dimension=2 values=[0.172852,0.323731] class=Point name=Unnamed dimension=2 values=[0.672852,0.657064] class=Point name=Unnamed dimension=2 values=[0.422852,0.990398] class=Point name=Unnamed dimension=2 values=[0.922852,0.00685871] class=Point name=Unnamed dimension=2 values=[0.110352,0.340192] class=Point name=Unnamed dimension=2 values=[0.610352,0.673525] class=Point name=Unnamed dimension=2 values=[0.360352,0.11797] class=Point name=Unnamed dimension=2 values=[0.860352,0.451303] class=Point name=Unnamed dimension=2 values=[0.235352,0.784636] class=Point name=Unnamed dimension=2 values=[0.735352,0.229081] class=Point name=Unnamed dimension=2 values=[0.485352,0.562414] class=Point name=Unnamed dimension=2 values=[0.985352,0.895748] class=Point name=Unnamed dimension=2 values=[0.00878906,0.0438957] class=Point name=Unnamed dimension=2 values=[0.508789,0.377229] class=Point name=Unnamed dimension=2 values=[0.258789,0.710562] class=Point name=Unnamed dimension=2 values=[0.758789,0.155007] class=Point name=Unnamed dimension=2 values=[0.133789,0.48834] class=Point name=Unnamed dimension=2 values=[0.633789,0.821674] class=Point name=Unnamed dimension=2 values=[0.383789,0.266118] class=Point name=Unnamed dimension=2 values=[0.883789,0.599451] class=Point name=Unnamed dimension=2 values=[0.0712891,0.932785] class=Point name=Unnamed dimension=2 values=[0.571289,0.0809328] class=Point name=Unnamed dimension=2 values=[0.321289,0.414266] class=Point name=Unnamed dimension=2 values=[0.821289,0.747599] class=Point name=Unnamed dimension=2 values=[0.196289,0.192044] class=Point name=Unnamed dimension=2 values=[0.696289,0.525377] class=Point name=Unnamed dimension=2 values=[0.446289,0.858711] class=Point name=Unnamed dimension=2 values=[0.946289,0.303155] class=Point name=Unnamed dimension=2 values=[0.0400391,0.636488] class=Point name=Unnamed dimension=2 values=[0.540039,0.969822] class=Point name=Unnamed dimension=2 values=[0.290039,0.0192044] class=Point name=Unnamed dimension=2 values=[0.790039,0.352538] class=Point name=Unnamed dimension=2 values=[0.165039,0.685871] class=Point name=Unnamed dimension=2 values=[0.665039,0.130316] class=Point name=Unnamed dimension=2 values=[0.415039,0.463649] class=Point name=Unnamed dimension=2 values=[0.915039,0.796982] class=Point name=Unnamed dimension=2 values=[0.102539,0.241427] class=Point name=Unnamed dimension=2 values=[0.602539,0.57476] class=Point name=Unnamed dimension=2 values=[0.352539,0.908093] class=Point name=Unnamed dimension=2 values=[0.852539,0.0562414] class=Point name=Unnamed dimension=2 values=[0.227539,0.389575] class=Point name=Unnamed dimension=2 values=[0.727539,0.722908] class=Point name=Unnamed dimension=2 values=[0.477539,0.167353] class=Point name=Unnamed dimension=2 values=[0.977539,0.500686] class=Point name=Unnamed dimension=2 values=[0.0244141,0.834019] class=Point name=Unnamed dimension=2 values=[0.524414,0.278464] class=Point name=Unnamed dimension=2 values=[0.274414,0.611797] class=Point name=Unnamed dimension=2 values=[0.774414,0.94513] class=Point name=Unnamed dimension=2 values=[0.149414,0.0932785] class=Point name=Unnamed dimension=2 values=[0.649414,0.426612] class=Point name=Unnamed dimension=2 values=[0.399414,0.759945] class=Point name=Unnamed dimension=2 values=[0.899414,0.20439] class=Point name=Unnamed dimension=2 values=[0.0869141,0.537723] class=Point name=Unnamed dimension=2 values=[0.586914,0.871056] class=Point name=Unnamed dimension=2 values=[0.336914,0.315501] class=Point name=Unnamed dimension=2 values=[0.836914,0.648834] class=Point name=Unnamed dimension=2 values=[0.211914,0.982167] class=Point name=Unnamed dimension=2 values=[0.711914,0.0315501] class=Point name=Unnamed dimension=2 values=[0.461914,0.364883] class=Point name=Unnamed dimension=2 values=[0.961914,0.698217] class=Point name=Unnamed dimension=2 values=[0.0556641,0.142661] class=Point name=Unnamed dimension=2 values=[0.555664,0.475995] class=Point name=Unnamed dimension=2 values=[0.305664,0.809328] class=Point name=Unnamed dimension=2 values=[0.805664,0.253772] class=Point name=Unnamed dimension=2 values=[0.180664,0.587106] class=Point name=Unnamed dimension=2 values=[0.680664,0.920439] class=Point name=Unnamed dimension=2 values=[0.430664,0.0685871] class=Point name=Unnamed dimension=2 values=[0.930664,0.40192] class=Point name=Unnamed dimension=2 values=[0.118164,0.735254] class=Point name=Unnamed dimension=2 values=[0.618164,0.179698] class=Point name=Unnamed dimension=2 values=[0.368164,0.513032] class=Point name=Unnamed dimension=2 values=[0.868164,0.846365] class=Point name=Unnamed dimension=2 values=[0.243164,0.290809] class=Point name=Unnamed dimension=2 values=[0.743164,0.624143] class=Point name=Unnamed dimension=2 values=[0.493164,0.957476] class=Point name=Unnamed dimension=2 values=[0.993164,0.105624] class=Point name=Unnamed dimension=2 values=[0.00488281,0.438957] class=Point name=Unnamed dimension=2 values=[0.504883,0.772291] class=Point name=Unnamed dimension=2 values=[0.254883,0.216735] class=Point name=Unnamed dimension=2 values=[0.754883,0.550069] class=Point name=Unnamed dimension=2 values=[0.129883,0.883402] class=Point name=Unnamed dimension=2 values=[0.629883,0.327846] class=Point name=Unnamed dimension=2 values=[0.379883,0.66118] class=Point name=Unnamed dimension=2 values=[0.879883,0.994513] class=Point name=Unnamed dimension=2 values=[0.0673828,0.0109739] class=Point name=Unnamed dimension=2 values=[0.567383,0.344307] class=Point name=Unnamed dimension=2 values=[0.317383,0.677641] class=Point name=Unnamed dimension=2 values=[0.817383,0.122085] class=Point name=Unnamed dimension=2 values=[0.192383,0.455418] class=Point name=Unnamed dimension=2 values=[0.692383,0.788752] class=Point name=Unnamed dimension=2 values=[0.442383,0.233196] class=Point name=Unnamed dimension=2 values=[0.942383,0.566529] class=Point name=Unnamed dimension=2 values=[0.0361328,0.899863] class=Point name=Unnamed dimension=2 values=[0.536133,0.048011] class=Point name=Unnamed dimension=2 values=[0.286133,0.381344] class=Point name=Unnamed dimension=2 values=[0.786133,0.714678] class=Point name=Unnamed dimension=2 values=[0.161133,0.159122] class=Point name=Unnamed dimension=2 values=[0.661133,0.492455] class=Point name=Unnamed dimension=2 values=[0.411133,0.825789] class=Point name=Unnamed dimension=2 values=[0.911133,0.270233] class=Point name=Unnamed dimension=2 values=[0.0986328,0.603567] class=Point name=Unnamed dimension=2 values=[0.598633,0.9369] class=Point name=Unnamed dimension=2 values=[0.348633,0.085048] class=Point name=Unnamed dimension=2 values=[0.848633,0.418381] class=Point name=Unnamed dimension=2 values=[0.223633,0.751715] class=Point name=Unnamed dimension=2 values=[0.723633,0.196159] class=Point name=Unnamed dimension=2 values=[0.473633,0.529492] class=Point name=Unnamed dimension=2 values=[0.973633,0.862826] class=Point name=Unnamed dimension=2 values=[0.0205078,0.30727] class=Point name=Unnamed dimension=2 values=[0.520508,0.640604] class=Point name=Unnamed dimension=2 values=[0.270508,0.973937] class=Point name=Unnamed dimension=2 values=[0.770508,0.0233196] class=Point name=Unnamed dimension=2 values=[0.145508,0.356653] class=Point name=Unnamed dimension=2 values=[0.645508,0.689986] class=Point name=Unnamed dimension=2 values=[0.395508,0.134431] class=Point name=Unnamed dimension=2 values=[0.895508,0.467764] class=Point name=Unnamed dimension=2 values=[0.0830078,0.801097] class=Point name=Unnamed dimension=2 values=[0.583008,0.245542] class=Point name=Unnamed dimension=2 values=[0.333008,0.578875] class=Point name=Unnamed dimension=2 values=[0.833008,0.912209] class=Point name=Unnamed dimension=2 values=[0.208008,0.0603567] class=Point name=Unnamed dimension=2 values=[0.708008,0.39369] class=Point name=Unnamed dimension=2 values=[0.458008,0.727023] class=Point name=Unnamed dimension=2 values=[0.958008,0.171468] class=Point name=Unnamed dimension=2 values=[0.0517578,0.504801] class=Point name=Unnamed dimension=2 values=[0.551758,0.838134] class=Point name=Unnamed dimension=2 values=[0.301758,0.282579] class=Point name=Unnamed dimension=2 values=[0.801758,0.615912] class=Point name=Unnamed dimension=2 values=[0.176758,0.949246] class=Point name=Unnamed dimension=2 values=[0.676758,0.0973937] class=Point name=Unnamed dimension=2 values=[0.426758,0.430727] class=Point name=Unnamed dimension=2 values=[0.926758,0.76406] class=Point name=Unnamed dimension=2 values=[0.114258,0.208505] class=Point name=Unnamed dimension=2 values=[0.614258,0.541838] class=Point name=Unnamed dimension=2 values=[0.364258,0.875171] class=Point name=Unnamed dimension=2 values=[0.864258,0.319616] class=Point name=Unnamed dimension=2 values=[0.239258,0.652949] class=Point name=Unnamed dimension=2 values=[0.739258,0.986283] class=Point name=Unnamed dimension=2 values=[0.489258,0.0356653] class=Point name=Unnamed dimension=2 values=[0.989258,0.368999] class=Point name=Unnamed dimension=2 values=[0.0126953,0.702332] class=Point name=Unnamed dimension=2 values=[0.512695,0.146776] class=Point name=Unnamed dimension=2 values=[0.262695,0.48011] class=Point name=Unnamed dimension=2 values=[0.762695,0.813443] class=Point name=Unnamed dimension=2 values=[0.137695,0.257888] class=Point name=Unnamed dimension=2 values=[0.637695,0.591221] class=Point name=Unnamed dimension=2 values=[0.387695,0.924554] class=Point name=Unnamed dimension=2 values=[0.887695,0.0727023] class=Point name=Unnamed dimension=2 values=[0.0751953,0.406036] class=Point name=Unnamed dimension=2 values=[0.575195,0.739369] class=Point name=Unnamed dimension=2 values=[0.325195,0.183813] class=Point name=Unnamed dimension=2 values=[0.825195,0.517147] class=Point name=Unnamed dimension=2 values=[0.200195,0.85048] class=Point name=Unnamed dimension=2 values=[0.700195,0.294925] class=Point name=Unnamed dimension=2 values=[0.450195,0.628258] class=Point name=Unnamed dimension=2 values=[0.950195,0.961591] class=Point name=Unnamed dimension=2 values=[0.0439453,0.109739] class=Point name=Unnamed dimension=2 values=[0.543945,0.443073] class=Point name=Unnamed dimension=2 values=[0.293945,0.776406] class=Point name=Unnamed dimension=2 values=[0.793945,0.22085] class=Point name=Unnamed dimension=2 values=[0.168945,0.554184] class=Point name=Unnamed dimension=2 values=[0.668945,0.887517] class=Point name=Unnamed dimension=2 values=[0.418945,0.331962] class=Point name=Unnamed dimension=2 values=[0.918945,0.665295] class=Point name=Unnamed dimension=2 values=[0.106445,0.998628] class=Point name=Unnamed dimension=2 values=[0.606445,0.000457247] class=Point name=Unnamed dimension=2 values=[0.356445,0.333791] class=Point name=Unnamed dimension=2 values=[0.856445,0.667124] class=Point name=Unnamed dimension=2 values=[0.231445,0.111568] class=Point name=Unnamed dimension=2 values=[0.731445,0.444902] class=Point name=Unnamed dimension=2 values=[0.481445,0.778235] class=Point name=Unnamed dimension=2 values=[0.981445,0.222679] class=Point name=Unnamed dimension=2 values=[0.0283203,0.556013] class=Point name=Unnamed dimension=2 values=[0.52832,0.889346] class=Point name=Unnamed dimension=2 values=[0.27832,0.0374943] class=Point name=Unnamed dimension=2 values=[0.77832,0.370828] class=Point name=Unnamed dimension=2 values=[0.15332,0.704161] class=Point name=Unnamed dimension=2 values=[0.65332,0.148605] class=Point name=Unnamed dimension=2 values=[0.40332,0.481939] class=Point name=Unnamed dimension=2 values=[0.90332,0.815272] class=Point name=Unnamed dimension=2 values=[0.0908203,0.259717] class=Point name=Unnamed dimension=2 values=[0.59082,0.59305] class=Point name=Unnamed dimension=2 values=[0.34082,0.926383] class=Point name=Unnamed dimension=2 values=[0.84082,0.0745313] class=Point name=Unnamed dimension=2 values=[0.21582,0.407865] class=Point name=Unnamed dimension=2 values=[0.71582,0.741198] class=Point name=Unnamed dimension=2 values=[0.46582,0.185642] class=Point name=Unnamed dimension=2 values=[0.96582,0.518976] class=Point name=Unnamed dimension=2 values=[0.0595703,0.852309] class=Point name=Unnamed dimension=2 values=[0.55957,0.296754] class=Point name=Unnamed dimension=2 values=[0.30957,0.630087] class=Point name=Unnamed dimension=2 values=[0.80957,0.96342] class=Point name=Unnamed dimension=2 values=[0.18457,0.0128029] class=Point name=Unnamed dimension=2 values=[0.68457,0.346136] class=Point name=Unnamed dimension=2 values=[0.43457,0.67947] class=Point name=Unnamed dimension=2 values=[0.93457,0.123914] class=Point name=Unnamed dimension=2 values=[0.12207,0.457247] class=Point name=Unnamed dimension=2 values=[0.62207,0.790581] class=Point name=Unnamed dimension=2 values=[0.37207,0.235025] class=Point name=Unnamed dimension=2 values=[0.87207,0.568358] class=Point name=Unnamed dimension=2 values=[0.24707,0.901692] class=Point name=Unnamed dimension=2 values=[0.74707,0.04984] class=Point name=Unnamed dimension=2 values=[0.49707,0.383173] class=Point name=Unnamed dimension=2 values=[0.99707,0.716507] class=Point name=Unnamed dimension=2 values=[0.00292969,0.160951] class=Point name=Unnamed dimension=2 values=[0.50293,0.494284] class=Point name=Unnamed dimension=2 values=[0.25293,0.827618] class=Point name=Unnamed dimension=2 values=[0.75293,0.272062] class=Point name=Unnamed dimension=2 values=[0.12793,0.605396] class=Point name=Unnamed dimension=2 values=[0.62793,0.938729] class=Point name=Unnamed dimension=2 values=[0.37793,0.086877] class=Point name=Unnamed dimension=2 values=[0.87793,0.42021] class=Point name=Unnamed dimension=2 values=[0.0654297,0.753544] class=Point name=Unnamed dimension=2 values=[0.56543,0.197988] class=Point name=Unnamed dimension=2 values=[0.31543,0.531321] class=Point name=Unnamed dimension=2 values=[0.81543,0.864655] class=Point name=Unnamed dimension=2 values=[0.19043,0.309099] class=Point name=Unnamed dimension=2 values=[0.69043,0.642433] class=Point name=Unnamed dimension=2 values=[0.44043,0.975766] class=Point name=Unnamed dimension=2 values=[0.94043,0.0251486] class=Point name=Unnamed dimension=2 values=[0.0341797,0.358482] class=Point name=Unnamed dimension=2 values=[0.53418,0.691815] class=Point name=Unnamed dimension=2 values=[0.28418,0.13626] class=Point name=Unnamed dimension=2 values=[0.78418,0.469593] class=Point name=Unnamed dimension=2 values=[0.15918,0.802926] class=Point name=Unnamed dimension=2 values=[0.65918,0.247371] class=Point name=Unnamed dimension=2 values=[0.40918,0.580704] class=Point name=Unnamed dimension=2 values=[0.90918,0.914037] class=Point name=Unnamed dimension=2 values=[0.0966797,0.0621856] class=Point name=Unnamed dimension=2 values=[0.59668,0.395519] class=Point name=Unnamed dimension=2 values=[0.34668,0.728852] class=Point name=Unnamed dimension=2 values=[0.84668,0.173297] class=Point name=Unnamed dimension=2 values=[0.22168,0.50663] class=Point name=Unnamed dimension=2 values=[0.72168,0.839963] class=Point name=Unnamed dimension=2 values=[0.47168,0.284408] class=Point name=Unnamed dimension=2 values=[0.97168,0.617741] class=Point name=Unnamed dimension=2 values=[0.0185547,0.951075] class=Point name=Unnamed dimension=2 values=[0.518555,0.0992227] class=Point name=Unnamed dimension=2 values=[0.268555,0.432556] class=Point name=Unnamed dimension=2 values=[0.768555,0.765889] class=Point name=Unnamed dimension=2 values=[0.143555,0.210334] class=Point name=Unnamed dimension=2 values=[0.643555,0.543667] class=Point name=Unnamed dimension=2 values=[0.393555,0.877] class=Point name=Unnamed dimension=2 values=[0.893555,0.321445] class=Point name=Unnamed dimension=2 values=[0.0810547,0.654778] class=Point name=Unnamed dimension=2 values=[0.581055,0.988112] class=Point name=Unnamed dimension=2 values=[0.331055,0.00457247] class=Point name=Unnamed dimension=2 values=[0.831055,0.337906] class=Point name=Unnamed dimension=2 values=[0.206055,0.671239] class=Point name=Unnamed dimension=2 values=[0.706055,0.115684] class=Point name=Unnamed dimension=2 values=[0.456055,0.449017] class=Point name=Unnamed dimension=2 values=[0.956055,0.78235] class=Point name=Unnamed dimension=2 values=[0.0498047,0.226795] class=Point name=Unnamed dimension=2 values=[0.549805,0.560128] class=Point name=Unnamed dimension=2 values=[0.299805,0.893461] class=Point name=Unnamed dimension=2 values=[0.799805,0.0416095] class=Point name=Unnamed dimension=2 values=[0.174805,0.374943] class=Point name=Unnamed dimension=2 values=[0.674805,0.708276] class=Point name=Unnamed dimension=2 values=[0.424805,0.152721] class=Point name=Unnamed dimension=2 values=[0.924805,0.486054] class=Point name=Unnamed dimension=2 values=[0.112305,0.819387] class=Point name=Unnamed dimension=2 values=[0.612305,0.263832] class=Point name=Unnamed dimension=2 values=[0.362305,0.597165] class=Point name=Unnamed dimension=2 values=[0.862305,0.930498] class=Point name=Unnamed dimension=2 values=[0.237305,0.0786465] class=Point name=Unnamed dimension=2 values=[0.737305,0.41198] class=Point name=Unnamed dimension=2 values=[0.487305,0.745313] class=Point name=Unnamed dimension=2 values=[0.987305,0.189758] class=Point name=Unnamed dimension=2 values=[0.0107422,0.523091] class=Point name=Unnamed dimension=2 values=[0.510742,0.856424] class=Point name=Unnamed dimension=2 values=[0.260742,0.300869] class=Point name=Unnamed dimension=2 values=[0.760742,0.634202] class=Point name=Unnamed dimension=2 values=[0.135742,0.967535] class=Point name=Unnamed dimension=2 values=[0.635742,0.0169182] class=Point name=Unnamed dimension=2 values=[0.385742,0.350251] class=Point name=Unnamed dimension=2 values=[0.885742,0.683585] class=Point name=Unnamed dimension=2 values=[0.0732422,0.128029] class=Point name=Unnamed dimension=2 values=[0.573242,0.461363] class=Point name=Unnamed dimension=2 values=[0.323242,0.794696] class=Point name=Unnamed dimension=2 values=[0.823242,0.23914] class=Point name=Unnamed dimension=2 values=[0.198242,0.572474] class=Point name=Unnamed dimension=2 values=[0.698242,0.905807] class=Point name=Unnamed dimension=2 values=[0.448242,0.0539552] class=Point name=Unnamed dimension=2 values=[0.948242,0.387289] class=Point name=Unnamed dimension=2 values=[0.0419922,0.720622] class=Point name=Unnamed dimension=2 values=[0.541992,0.165066] class=Point name=Unnamed dimension=2 values=[0.291992,0.4984] class=Point name=Unnamed dimension=2 values=[0.791992,0.831733] class=Point name=Unnamed dimension=2 values=[0.166992,0.276177] class=Point name=Unnamed dimension=2 values=[0.666992,0.609511] class=Point name=Unnamed dimension=2 values=[0.416992,0.942844] class=Point name=Unnamed dimension=2 values=[0.916992,0.0909922] class=Point name=Unnamed dimension=2 values=[0.104492,0.424326] class=Point name=Unnamed dimension=2 values=[0.604492,0.757659] class=Point name=Unnamed dimension=2 values=[0.354492,0.202103] class=Point name=Unnamed dimension=2 values=[0.854492,0.535437] class=Point name=Unnamed dimension=2 values=[0.229492,0.86877] class=Point name=Unnamed dimension=2 values=[0.729492,0.313214] class=Point name=Unnamed dimension=2 values=[0.479492,0.646548] class=Point name=Unnamed dimension=2 values=[0.979492,0.979881] class=Point name=Unnamed dimension=2 values=[0.0263672,0.0292638] class=Point name=Unnamed dimension=2 values=[0.526367,0.362597] class=Point name=Unnamed dimension=2 values=[0.276367,0.69593] class=Point name=Unnamed dimension=2 values=[0.776367,0.140375] class=Point name=Unnamed dimension=2 values=[0.151367,0.473708] class=Point name=Unnamed dimension=2 values=[0.651367,0.807042] class=Point name=Unnamed dimension=2 values=[0.401367,0.251486] class=Point name=Unnamed dimension=2 values=[0.901367,0.584819] class=Point name=Unnamed dimension=2 values=[0.0888672,0.918153] class=Point name=Unnamed dimension=2 values=[0.588867,0.0663009] class=Point name=Unnamed dimension=2 values=[0.338867,0.399634] class=Point name=Unnamed dimension=2 values=[0.838867,0.732968] class=Point name=Unnamed dimension=2 values=[0.213867,0.177412] class=Point name=Unnamed dimension=2 values=[0.713867,0.510745] class=Point name=Unnamed dimension=2 values=[0.463867,0.844079] class=Point name=Unnamed dimension=2 values=[0.963867,0.288523] class=Point name=Unnamed dimension=2 values=[0.0576172,0.621856] class=Point name=Unnamed dimension=2 values=[0.557617,0.95519] class=Point name=Unnamed dimension=2 values=[0.307617,0.103338] class=Point name=Unnamed dimension=2 values=[0.807617,0.436671] class=Point name=Unnamed dimension=2 values=[0.182617,0.770005] class=Point name=Unnamed dimension=2 values=[0.682617,0.214449] class=Point name=Unnamed dimension=2 values=[0.432617,0.547782] class=Point name=Unnamed dimension=2 values=[0.932617,0.881116] class=Point name=Unnamed dimension=2 values=[0.120117,0.32556] class=Point name=Unnamed dimension=2 values=[0.620117,0.658893] class=Point name=Unnamed dimension=2 values=[0.370117,0.992227] class=Point name=Unnamed dimension=2 values=[0.870117,0.0086877] class=Point name=Unnamed dimension=2 values=[0.245117,0.342021] class=Point name=Unnamed dimension=2 values=[0.745117,0.675354] class=Point name=Unnamed dimension=2 values=[0.495117,0.119799] class=Point name=Unnamed dimension=2 values=[0.995117,0.453132] class=Point name=Unnamed dimension=2 values=[0.00683594,0.786465] class=Point name=Unnamed dimension=2 values=[0.506836,0.23091] class=Point name=Unnamed dimension=2 values=[0.256836,0.564243] class=Point name=Unnamed dimension=2 values=[0.756836,0.897577] class=Point name=Unnamed dimension=2 values=[0.131836,0.0457247] class=Point name=Unnamed dimension=2 values=[0.631836,0.379058] class=Point name=Unnamed dimension=2 values=[0.381836,0.712391] class=Point name=Unnamed dimension=2 values=[0.881836,0.156836] class=Point name=Unnamed dimension=2 values=[0.0693359,0.490169] class=Point name=Unnamed dimension=2 values=[0.569336,0.823503] class=Point name=Unnamed dimension=2 values=[0.319336,0.267947] class=Point name=Unnamed dimension=2 values=[0.819336,0.60128] class=Point name=Unnamed dimension=2 values=[0.194336,0.934614] class=Point name=Unnamed dimension=2 values=[0.694336,0.0827618] class=Point name=Unnamed dimension=2 values=[0.444336,0.416095] class=Point name=Unnamed dimension=2 values=[0.944336,0.749428] class=Point name=Unnamed dimension=2 values=[0.0380859,0.193873] class=Point name=Unnamed dimension=2 values=[0.538086,0.527206] class=Point name=Unnamed dimension=2 values=[0.288086,0.86054] class=Point name=Unnamed dimension=2 values=[0.788086,0.304984] class=Point name=Unnamed dimension=2 values=[0.163086,0.638317] class=Point name=Unnamed dimension=2 values=[0.663086,0.971651] class=Point name=Unnamed dimension=2 values=[0.413086,0.0210334] class=Point name=Unnamed dimension=2 values=[0.913086,0.354367] class=Point name=Unnamed dimension=2 values=[0.100586,0.6877] class=Point name=Unnamed dimension=2 values=[0.600586,0.132144] class=Point name=Unnamed dimension=2 values=[0.350586,0.465478] class=Point name=Unnamed dimension=2 values=[0.850586,0.798811] class=Point name=Unnamed dimension=2 values=[0.225586,0.243256] class=Point name=Unnamed dimension=2 values=[0.725586,0.576589] class=Point name=Unnamed dimension=2 values=[0.475586,0.909922] class=Point name=Unnamed dimension=2 values=[0.975586,0.0580704] class=Point name=Unnamed dimension=2 values=[0.0224609,0.391404] class=Point name=Unnamed dimension=2 values=[0.522461,0.724737] class=Point name=Unnamed dimension=2 values=[0.272461,0.169182] class=Point name=Unnamed dimension=2 values=[0.772461,0.502515] class=Point name=Unnamed dimension=2 values=[0.147461,0.835848] class=Point name=Unnamed dimension=2 values=[0.647461,0.280293] class=Point name=Unnamed dimension=2 values=[0.397461,0.613626] class=Point name=Unnamed dimension=2 values=[0.897461,0.946959] class=Point name=Unnamed dimension=2 values=[0.0849609,0.0951075] class=Point name=Unnamed dimension=2 values=[0.584961,0.428441] class=Point name=Unnamed dimension=2 values=[0.334961,0.761774] class=Point name=Unnamed dimension=2 values=[0.834961,0.206219] class=Point name=Unnamed dimension=2 values=[0.209961,0.539552] class=Point name=Unnamed dimension=2 values=[0.709961,0.872885] class=Point name=Unnamed dimension=2 values=[0.459961,0.31733] class=Point name=Unnamed dimension=2 values=[0.959961,0.650663] class=Point name=Unnamed dimension=2 values=[0.0537109,0.983996] class=Point name=Unnamed dimension=2 values=[0.553711,0.0333791] class=Point name=Unnamed dimension=2 values=[0.303711,0.366712] class=Point name=Unnamed dimension=2 values=[0.803711,0.700046] class=Point name=Unnamed dimension=2 values=[0.178711,0.14449] class=Point name=Unnamed dimension=2 values=[0.678711,0.477824] class=Point name=Unnamed dimension=2 values=[0.428711,0.811157] class=Point name=Unnamed dimension=2 values=[0.928711,0.255601] class=Point name=Unnamed dimension=2 values=[0.116211,0.588935] class=Point name=Unnamed dimension=2 values=[0.616211,0.922268] class=Point name=Unnamed dimension=2 values=[0.366211,0.0704161] class=Point name=Unnamed dimension=2 values=[0.866211,0.403749] class=Point name=Unnamed dimension=2 values=[0.241211,0.737083] class=Point name=Unnamed dimension=2 values=[0.741211,0.181527] class=Point name=Unnamed dimension=2 values=[0.491211,0.514861] class=Point name=Unnamed dimension=2 values=[0.991211,0.848194] class=Point name=Unnamed dimension=2 values=[0.0146484,0.292638] class=Point name=Unnamed dimension=2 values=[0.514648,0.625972] class=Point name=Unnamed dimension=2 values=[0.264648,0.959305] class=Point name=Unnamed dimension=2 values=[0.764648,0.107453] class=Point name=Unnamed dimension=2 values=[0.139648,0.440786] class=Point name=Unnamed dimension=2 values=[0.639648,0.77412] class=Point name=Unnamed dimension=2 values=[0.389648,0.218564] class=Point name=Unnamed dimension=2 values=[0.889648,0.551898] class=Point name=Unnamed dimension=2 values=[0.0771484,0.885231] class=Point name=Unnamed dimension=2 values=[0.577148,0.329675] class=Point name=Unnamed dimension=2 values=[0.327148,0.663009] class=Point name=Unnamed dimension=2 values=[0.827148,0.996342] class=Point name=Unnamed dimension=2 values=[0.202148,0.00182899] class=Point name=Unnamed dimension=2 values=[0.702148,0.335162] class=Point name=Unnamed dimension=2 values=[0.452148,0.668496] class=Point name=Unnamed dimension=2 values=[0.952148,0.11294] class=Point name=Unnamed dimension=2 values=[0.0458984,0.446273] class=Point name=Unnamed dimension=2 values=[0.545898,0.779607] class=Point name=Unnamed dimension=2 values=[0.295898,0.224051] class=Point name=Unnamed dimension=2 values=[0.795898,0.557385] class=Point name=Unnamed dimension=2 values=[0.170898,0.890718] class=Point name=Unnamed dimension=2 values=[0.670898,0.038866] class=Point name=Unnamed dimension=2 values=[0.420898,0.372199] class=Point name=Unnamed dimension=2 values=[0.920898,0.705533] class=Point name=Unnamed dimension=2 values=[0.108398,0.149977] class=Point name=Unnamed dimension=2 values=[0.608398,0.48331] class=Point name=Unnamed dimension=2 values=[0.358398,0.816644] class=Point name=Unnamed dimension=2 values=[0.858398,0.261088] class=Point name=Unnamed dimension=2 values=[0.233398,0.594422] class=Point name=Unnamed dimension=2 values=[0.733398,0.927755] class=Point name=Unnamed dimension=2 values=[0.483398,0.0759031] class=Point name=Unnamed dimension=2 values=[0.983398,0.409236] class=Point name=Unnamed dimension=2 values=[0.0302734,0.74257] class=Point name=Unnamed dimension=2 values=[0.530273,0.187014] class=Point name=Unnamed dimension=2 values=[0.280273,0.520348] class=Point name=Unnamed dimension=2 values=[0.780273,0.853681] class=Point name=Unnamed dimension=2 values=[0.155273,0.298125] class=Point name=Unnamed dimension=2 values=[0.655273,0.631459] class=Point name=Unnamed dimension=2 values=[0.405273,0.964792] class=Point name=Unnamed dimension=2 values=[0.905273,0.0141747] class=Point name=Unnamed dimension=2 values=[0.0927734,0.347508] sample size= 1000 relative error to Pi=2.039522e-03 openturns-1.9/python/test/t_HaltonSequence_std.py000077500000000000000000000020641307543307100224150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a Halton sequence = HaltonSequence(15) print(repr(sequence)) # Create a numerical sample of the sequence haltonSample = sequence.generate(10) print(repr(haltonSample)) # Create another Halton' sequence of dimension 2 to estimate Pi in [0 1)^2 dimension = 2 sequence = HaltonSequence(dimension) pointInsideCircle = 0 sampleSize = 1000 for i in range(sampleSize): haltonPoint = sequence.generate() print(haltonPoint.__repr__()) if haltonPoint.norm() < 1.0: pointInsideCircle = pointInsideCircle + 1 probabilityEstimate = (1.0 * pointInsideCircle) / sampleSize probability = pi / 4.0 relativeError = fabs(probability - probabilityEstimate) / probability print('sample size=', sampleSize) print('relative error to Pi=%e' % relativeError) except: import sys print("t_HaltonSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HaselgroveSequence_std.expout000066400000000000000000002004041307543307100241560ustar00rootroot00000000000000class=HaselgroveSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=class=Point name=Unnamed dimension=15 values=[1.41421,1.73205,2.23607,2.64575,3.31662,3.60555,4.12311,4.3589,4.79583,5.38516,5.56776,6.08276,6.40312,6.55744,6.85565] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.414214,0.732051,0.236068,0.645751,0.316625,0.605551,0.123106,0.358899,0.795832,0.385165,0.567764,0.0827625,0.403124,0.557439,0.855655],[0.828427,0.464102,0.472136,0.291503,0.63325,0.211103,0.246211,0.717798,0.591663,0.77033,0.135529,0.165525,0.806248,0.114877,0.711309],[0.242641,0.196152,0.708204,0.937254,0.949874,0.816654,0.369317,0.0766968,0.387495,0.155494,0.703293,0.248288,0.209373,0.672316,0.566964],[0.656854,0.928203,0.944272,0.583005,0.266499,0.422205,0.492423,0.435596,0.183326,0.540659,0.271057,0.33105,0.612497,0.229754,0.422618],[0.0710678,0.660254,0.18034,0.228757,0.583124,0.0277564,0.615528,0.794495,0.979158,0.925824,0.838822,0.413813,0.0156212,0.787193,0.278273],[0.485281,0.392305,0.416408,0.874508,0.899749,0.633308,0.738634,0.153394,0.774989,0.310989,0.406586,0.496575,0.418745,0.344631,0.133928],[0.899495,0.124356,0.652476,0.520259,0.216374,0.238859,0.861739,0.512293,0.570821,0.696154,0.974351,0.579338,0.82187,0.90207,0.989582],[0.313708,0.856406,0.888544,0.16601,0.532998,0.84441,0.984845,0.871192,0.366652,0.0813185,0.542115,0.6621,0.224994,0.459508,0.845237],[0.727922,0.588457,0.124612,0.811762,0.849623,0.449961,0.107951,0.23009,0.162484,0.466483,0.109879,0.744863,0.628118,0.0169467,0.700891],[0.142136,0.320508,0.36068,0.457513,0.166248,0.0555128,0.231056,0.588989,0.958315,0.851648,0.677644,0.827625,0.0312424,0.574385,0.556546]] class=Point name=Unnamed dimension=2 values=[0.414214,0.732051] class=Point name=Unnamed dimension=2 values=[0.828427,0.464102] class=Point name=Unnamed dimension=2 values=[0.242641,0.196152] class=Point name=Unnamed dimension=2 values=[0.656854,0.928203] class=Point name=Unnamed dimension=2 values=[0.0710678,0.660254] class=Point name=Unnamed dimension=2 values=[0.485281,0.392305] class=Point name=Unnamed dimension=2 values=[0.899495,0.124356] class=Point name=Unnamed dimension=2 values=[0.313708,0.856406] class=Point name=Unnamed dimension=2 values=[0.727922,0.588457] class=Point name=Unnamed dimension=2 values=[0.142136,0.320508] class=Point name=Unnamed dimension=2 values=[0.556349,0.0525589] class=Point name=Unnamed dimension=2 values=[0.970563,0.78461] class=Point name=Unnamed dimension=2 values=[0.384776,0.51666] class=Point name=Unnamed dimension=2 values=[0.79899,0.248711] class=Point name=Unnamed dimension=2 values=[0.213203,0.980762] class=Point name=Unnamed dimension=2 values=[0.627417,0.712813] class=Point name=Unnamed dimension=2 values=[0.0416306,0.444864] class=Point name=Unnamed dimension=2 values=[0.455844,0.176915] class=Point name=Unnamed dimension=2 values=[0.870058,0.908965] class=Point name=Unnamed dimension=2 values=[0.284271,0.641016] class=Point name=Unnamed dimension=2 values=[0.698485,0.373067] class=Point name=Unnamed dimension=2 values=[0.112698,0.105118] class=Point name=Unnamed dimension=2 values=[0.526912,0.837169] class=Point name=Unnamed dimension=2 values=[0.941125,0.569219] class=Point name=Unnamed dimension=2 values=[0.355339,0.30127] class=Point name=Unnamed dimension=2 values=[0.769553,0.033321] class=Point name=Unnamed dimension=2 values=[0.183766,0.765372] class=Point name=Unnamed dimension=2 values=[0.59798,0.497423] class=Point name=Unnamed dimension=2 values=[0.0121933,0.229473] class=Point name=Unnamed dimension=2 values=[0.426407,0.961524] class=Point name=Unnamed dimension=2 values=[0.84062,0.693575] class=Point name=Unnamed dimension=2 values=[0.254834,0.425626] class=Point name=Unnamed dimension=2 values=[0.669048,0.157677] class=Point name=Unnamed dimension=2 values=[0.0832611,0.889727] class=Point name=Unnamed dimension=2 values=[0.497475,0.621778] class=Point name=Unnamed dimension=2 values=[0.911688,0.353829] class=Point name=Unnamed dimension=2 values=[0.325902,0.0858799] class=Point name=Unnamed dimension=2 values=[0.740115,0.817931] class=Point name=Unnamed dimension=2 values=[0.154329,0.549981] class=Point name=Unnamed dimension=2 values=[0.568542,0.282032] class=Point name=Unnamed dimension=2 values=[0.982756,0.0140831] class=Point name=Unnamed dimension=2 values=[0.39697,0.746134] class=Point name=Unnamed dimension=2 values=[0.811183,0.478185] class=Point name=Unnamed dimension=2 values=[0.225397,0.210236] class=Point name=Unnamed dimension=2 values=[0.63961,0.942286] class=Point name=Unnamed dimension=2 values=[0.0538239,0.674337] class=Point name=Unnamed dimension=2 values=[0.468037,0.406388] class=Point name=Unnamed dimension=2 values=[0.882251,0.138439] class=Point name=Unnamed dimension=2 values=[0.296465,0.87049] class=Point name=Unnamed dimension=2 values=[0.710678,0.60254] class=Point name=Unnamed dimension=2 values=[0.124892,0.334591] class=Point name=Unnamed dimension=2 values=[0.539105,0.066642] class=Point name=Unnamed dimension=2 values=[0.953319,0.798693] class=Point name=Unnamed dimension=2 values=[0.367532,0.530744] class=Point name=Unnamed dimension=2 values=[0.781746,0.262794] class=Point name=Unnamed dimension=2 values=[0.195959,0.994845] class=Point name=Unnamed dimension=2 values=[0.610173,0.726896] class=Point name=Unnamed dimension=2 values=[0.0243866,0.458947] class=Point name=Unnamed dimension=2 values=[0.4386,0.190998] class=Point name=Unnamed dimension=2 values=[0.852814,0.923048] class=Point name=Unnamed dimension=2 values=[0.267027,0.655099] class=Point name=Unnamed dimension=2 values=[0.681241,0.38715] class=Point name=Unnamed dimension=2 values=[0.0954544,0.119201] class=Point name=Unnamed dimension=2 values=[0.509668,0.851252] class=Point name=Unnamed dimension=2 values=[0.923882,0.583302] class=Point name=Unnamed dimension=2 values=[0.338095,0.315353] class=Point name=Unnamed dimension=2 values=[0.752309,0.0474041] class=Point name=Unnamed dimension=2 values=[0.166522,0.779455] class=Point name=Unnamed dimension=2 values=[0.580736,0.511506] class=Point name=Unnamed dimension=2 values=[0.994949,0.243557] class=Point name=Unnamed dimension=2 values=[0.409163,0.975607] class=Point name=Unnamed dimension=2 values=[0.823376,0.707658] class=Point name=Unnamed dimension=2 values=[0.23759,0.439709] class=Point name=Unnamed dimension=2 values=[0.651804,0.17176] class=Point name=Unnamed dimension=2 values=[0.0660172,0.903811] class=Point name=Unnamed dimension=2 values=[0.480231,0.635861] class=Point name=Unnamed dimension=2 values=[0.894444,0.367912] class=Point name=Unnamed dimension=2 values=[0.308658,0.099963] class=Point name=Unnamed dimension=2 values=[0.722871,0.832014] class=Point name=Unnamed dimension=2 values=[0.137085,0.564065] class=Point name=Unnamed dimension=2 values=[0.551299,0.296115] class=Point name=Unnamed dimension=2 values=[0.965512,0.0281662] class=Point name=Unnamed dimension=2 values=[0.379726,0.760217] class=Point name=Unnamed dimension=2 values=[0.793939,0.492268] class=Point name=Unnamed dimension=2 values=[0.208153,0.224319] class=Point name=Unnamed dimension=2 values=[0.622366,0.956369] class=Point name=Unnamed dimension=2 values=[0.0365799,0.68842] class=Point name=Unnamed dimension=2 values=[0.450793,0.420471] class=Point name=Unnamed dimension=2 values=[0.865007,0.152522] class=Point name=Unnamed dimension=2 values=[0.279221,0.884573] class=Point name=Unnamed dimension=2 values=[0.693434,0.616623] class=Point name=Unnamed dimension=2 values=[0.107648,0.348674] class=Point name=Unnamed dimension=2 values=[0.521861,0.0807251] class=Point name=Unnamed dimension=2 values=[0.936075,0.812776] class=Point name=Unnamed dimension=2 values=[0.350288,0.544827] class=Point name=Unnamed dimension=2 values=[0.764502,0.276878] class=Point name=Unnamed dimension=2 values=[0.178716,0.00892833] class=Point name=Unnamed dimension=2 values=[0.592929,0.740979] class=Point name=Unnamed dimension=2 values=[0.00714267,0.47303] class=Point name=Unnamed dimension=2 values=[0.421356,0.205081] class=Point name=Unnamed dimension=2 values=[0.83557,0.937132] class=Point name=Unnamed dimension=2 values=[0.249783,0.669182] class=Point name=Unnamed dimension=2 values=[0.663997,0.401233] class=Point name=Unnamed dimension=2 values=[0.0782105,0.133284] class=Point name=Unnamed dimension=2 values=[0.492424,0.865335] class=Point name=Unnamed dimension=2 values=[0.906638,0.597386] class=Point name=Unnamed dimension=2 values=[0.320851,0.329436] class=Point name=Unnamed dimension=2 values=[0.735065,0.0614872] class=Point name=Unnamed dimension=2 values=[0.149278,0.793538] class=Point name=Unnamed dimension=2 values=[0.563492,0.525589] class=Point name=Unnamed dimension=2 values=[0.977705,0.25764] class=Point name=Unnamed dimension=2 values=[0.391919,0.98969] class=Point name=Unnamed dimension=2 values=[0.806133,0.721741] class=Point name=Unnamed dimension=2 values=[0.220346,0.453792] class=Point name=Unnamed dimension=2 values=[0.63456,0.185843] class=Point name=Unnamed dimension=2 values=[0.0487732,0.917894] class=Point name=Unnamed dimension=2 values=[0.462987,0.649944] class=Point name=Unnamed dimension=2 values=[0.8772,0.381995] class=Point name=Unnamed dimension=2 values=[0.291414,0.114046] class=Point name=Unnamed dimension=2 values=[0.705627,0.846097] class=Point name=Unnamed dimension=2 values=[0.119841,0.578148] class=Point name=Unnamed dimension=2 values=[0.534055,0.310199] class=Point name=Unnamed dimension=2 values=[0.948268,0.0422493] class=Point name=Unnamed dimension=2 values=[0.362482,0.7743] class=Point name=Unnamed dimension=2 values=[0.776695,0.506351] class=Point name=Unnamed dimension=2 values=[0.190909,0.238402] class=Point name=Unnamed dimension=2 values=[0.605122,0.970453] class=Point name=Unnamed dimension=2 values=[0.019336,0.702503] class=Point name=Unnamed dimension=2 values=[0.43355,0.434554] class=Point name=Unnamed dimension=2 values=[0.847763,0.166605] class=Point name=Unnamed dimension=2 values=[0.261977,0.898656] class=Point name=Unnamed dimension=2 values=[0.67619,0.630707] class=Point name=Unnamed dimension=2 values=[0.0904038,0.362757] class=Point name=Unnamed dimension=2 values=[0.504617,0.0948082] class=Point name=Unnamed dimension=2 values=[0.918831,0.826859] class=Point name=Unnamed dimension=2 values=[0.333044,0.55891] class=Point name=Unnamed dimension=2 values=[0.747258,0.290961] class=Point name=Unnamed dimension=2 values=[0.161472,0.0230114] class=Point name=Unnamed dimension=2 values=[0.575685,0.755062] class=Point name=Unnamed dimension=2 values=[0.989899,0.487113] class=Point name=Unnamed dimension=2 values=[0.404112,0.219164] class=Point name=Unnamed dimension=2 values=[0.818326,0.951215] class=Point name=Unnamed dimension=2 values=[0.232539,0.683265] class=Point name=Unnamed dimension=2 values=[0.646753,0.415316] class=Point name=Unnamed dimension=2 values=[0.0609665,0.147367] class=Point name=Unnamed dimension=2 values=[0.47518,0.879418] class=Point name=Unnamed dimension=2 values=[0.889394,0.611469] class=Point name=Unnamed dimension=2 values=[0.303607,0.34352] class=Point name=Unnamed dimension=2 values=[0.717821,0.0755703] class=Point name=Unnamed dimension=2 values=[0.132034,0.807621] class=Point name=Unnamed dimension=2 values=[0.546248,0.539672] class=Point name=Unnamed dimension=2 values=[0.960461,0.271723] class=Point name=Unnamed dimension=2 values=[0.374675,0.00377356] class=Point name=Unnamed dimension=2 values=[0.788889,0.735824] class=Point name=Unnamed dimension=2 values=[0.203102,0.467875] class=Point name=Unnamed dimension=2 values=[0.617316,0.199926] class=Point name=Unnamed dimension=2 values=[0.0315293,0.931977] class=Point name=Unnamed dimension=2 values=[0.445743,0.664028] class=Point name=Unnamed dimension=2 values=[0.859956,0.396078] class=Point name=Unnamed dimension=2 values=[0.27417,0.128129] class=Point name=Unnamed dimension=2 values=[0.688384,0.86018] class=Point name=Unnamed dimension=2 values=[0.102597,0.592231] class=Point name=Unnamed dimension=2 values=[0.516811,0.324282] class=Point name=Unnamed dimension=2 values=[0.931024,0.0563324] class=Point name=Unnamed dimension=2 values=[0.345238,0.788383] class=Point name=Unnamed dimension=2 values=[0.759451,0.520434] class=Point name=Unnamed dimension=2 values=[0.173665,0.252485] class=Point name=Unnamed dimension=2 values=[0.587878,0.984536] class=Point name=Unnamed dimension=2 values=[0.00209204,0.716586] class=Point name=Unnamed dimension=2 values=[0.416306,0.448637] class=Point name=Unnamed dimension=2 values=[0.830519,0.180688] class=Point name=Unnamed dimension=2 values=[0.244733,0.912739] class=Point name=Unnamed dimension=2 values=[0.658946,0.64479] class=Point name=Unnamed dimension=2 values=[0.0731599,0.376841] class=Point name=Unnamed dimension=2 values=[0.487373,0.108891] class=Point name=Unnamed dimension=2 values=[0.901587,0.840942] class=Point name=Unnamed dimension=2 values=[0.315801,0.572993] class=Point name=Unnamed dimension=2 values=[0.730014,0.305044] class=Point name=Unnamed dimension=2 values=[0.144228,0.0370946] class=Point name=Unnamed dimension=2 values=[0.558441,0.769145] class=Point name=Unnamed dimension=2 values=[0.972655,0.501196] class=Point name=Unnamed dimension=2 values=[0.386868,0.233247] class=Point name=Unnamed dimension=2 values=[0.801082,0.965298] class=Point name=Unnamed dimension=2 values=[0.215295,0.697349] class=Point name=Unnamed dimension=2 values=[0.629509,0.429399] class=Point name=Unnamed dimension=2 values=[0.0437226,0.16145] class=Point name=Unnamed dimension=2 values=[0.457936,0.893501] class=Point name=Unnamed dimension=2 values=[0.87215,0.625552] class=Point name=Unnamed dimension=2 values=[0.286363,0.357603] class=Point name=Unnamed dimension=2 values=[0.700577,0.0896534] class=Point name=Unnamed dimension=2 values=[0.11479,0.821704] class=Point name=Unnamed dimension=2 values=[0.529004,0.553755] class=Point name=Unnamed dimension=2 values=[0.943218,0.285806] class=Point name=Unnamed dimension=2 values=[0.357431,0.0178567] class=Point name=Unnamed dimension=2 values=[0.771645,0.749907] class=Point name=Unnamed dimension=2 values=[0.185858,0.481958] class=Point name=Unnamed dimension=2 values=[0.600072,0.214009] class=Point name=Unnamed dimension=2 values=[0.0142853,0.94606] class=Point name=Unnamed dimension=2 values=[0.428499,0.678111] class=Point name=Unnamed dimension=2 values=[0.842712,0.410162] class=Point name=Unnamed dimension=2 values=[0.256926,0.142212] class=Point name=Unnamed dimension=2 values=[0.67114,0.874263] class=Point name=Unnamed dimension=2 values=[0.0853532,0.606314] class=Point name=Unnamed dimension=2 values=[0.499567,0.338365] class=Point name=Unnamed dimension=2 values=[0.91378,0.0704156] class=Point name=Unnamed dimension=2 values=[0.327994,0.802466] class=Point name=Unnamed dimension=2 values=[0.742207,0.534517] class=Point name=Unnamed dimension=2 values=[0.156421,0.266568] class=Point name=Unnamed dimension=2 values=[0.570635,0.998619] class=Point name=Unnamed dimension=2 values=[0.984848,0.73067] class=Point name=Unnamed dimension=2 values=[0.399062,0.46272] class=Point name=Unnamed dimension=2 values=[0.813275,0.194771] class=Point name=Unnamed dimension=2 values=[0.227489,0.926822] class=Point name=Unnamed dimension=2 values=[0.641702,0.658873] class=Point name=Unnamed dimension=2 values=[0.0559159,0.390924] class=Point name=Unnamed dimension=2 values=[0.470129,0.122974] class=Point name=Unnamed dimension=2 values=[0.884343,0.855025] class=Point name=Unnamed dimension=2 values=[0.298557,0.587076] class=Point name=Unnamed dimension=2 values=[0.71277,0.319127] class=Point name=Unnamed dimension=2 values=[0.126984,0.0511777] class=Point name=Unnamed dimension=2 values=[0.541197,0.783228] class=Point name=Unnamed dimension=2 values=[0.955411,0.515279] class=Point name=Unnamed dimension=2 values=[0.369624,0.24733] class=Point name=Unnamed dimension=2 values=[0.783838,0.979381] class=Point name=Unnamed dimension=2 values=[0.198052,0.711432] class=Point name=Unnamed dimension=2 values=[0.612265,0.443483] class=Point name=Unnamed dimension=2 values=[0.0264787,0.175533] class=Point name=Unnamed dimension=2 values=[0.440692,0.907584] class=Point name=Unnamed dimension=2 values=[0.854906,0.639635] class=Point name=Unnamed dimension=2 values=[0.269119,0.371686] class=Point name=Unnamed dimension=2 values=[0.683333,0.103737] class=Point name=Unnamed dimension=2 values=[0.0975465,0.835787] class=Point name=Unnamed dimension=2 values=[0.51176,0.567838] class=Point name=Unnamed dimension=2 values=[0.925974,0.299889] class=Point name=Unnamed dimension=2 values=[0.340187,0.0319398] class=Point name=Unnamed dimension=2 values=[0.754401,0.763991] class=Point name=Unnamed dimension=2 values=[0.168614,0.496041] class=Point name=Unnamed dimension=2 values=[0.582828,0.228092] class=Point name=Unnamed dimension=2 values=[0.997041,0.960143] class=Point name=Unnamed dimension=2 values=[0.411255,0.692194] class=Point name=Unnamed dimension=2 values=[0.825469,0.424245] class=Point name=Unnamed dimension=2 values=[0.239682,0.156295] class=Point name=Unnamed dimension=2 values=[0.653896,0.888346] class=Point name=Unnamed dimension=2 values=[0.0681092,0.620397] class=Point name=Unnamed dimension=2 values=[0.482323,0.352448] class=Point name=Unnamed dimension=2 values=[0.896536,0.0844987] class=Point name=Unnamed dimension=2 values=[0.31075,0.816549] class=Point name=Unnamed dimension=2 values=[0.724963,0.5486] class=Point name=Unnamed dimension=2 values=[0.139177,0.280651] class=Point name=Unnamed dimension=2 values=[0.553391,0.0127019] class=Point name=Unnamed dimension=2 values=[0.967604,0.744753] class=Point name=Unnamed dimension=2 values=[0.381818,0.476804] class=Point name=Unnamed dimension=2 values=[0.796031,0.208854] class=Point name=Unnamed dimension=2 values=[0.210245,0.940905] class=Point name=Unnamed dimension=2 values=[0.624458,0.672956] class=Point name=Unnamed dimension=2 values=[0.038672,0.405007] class=Point name=Unnamed dimension=2 values=[0.452886,0.137058] class=Point name=Unnamed dimension=2 values=[0.867099,0.869108] class=Point name=Unnamed dimension=2 values=[0.281313,0.601159] class=Point name=Unnamed dimension=2 values=[0.695526,0.33321] class=Point name=Unnamed dimension=2 values=[0.10974,0.0652608] class=Point name=Unnamed dimension=2 values=[0.523953,0.797312] class=Point name=Unnamed dimension=2 values=[0.938167,0.529362] class=Point name=Unnamed dimension=2 values=[0.35238,0.261413] class=Point name=Unnamed dimension=2 values=[0.766594,0.993464] class=Point name=Unnamed dimension=2 values=[0.180808,0.725515] class=Point name=Unnamed dimension=2 values=[0.595021,0.457566] class=Point name=Unnamed dimension=2 values=[0.00923472,0.189616] class=Point name=Unnamed dimension=2 values=[0.423448,0.921667] class=Point name=Unnamed dimension=2 values=[0.837662,0.653718] class=Point name=Unnamed dimension=2 values=[0.251875,0.385769] class=Point name=Unnamed dimension=2 values=[0.666089,0.11782] class=Point name=Unnamed dimension=2 values=[0.0803025,0.84987] class=Point name=Unnamed dimension=2 values=[0.494516,0.581921] class=Point name=Unnamed dimension=2 values=[0.90873,0.313972] class=Point name=Unnamed dimension=2 values=[0.322943,0.0460229] class=Point name=Unnamed dimension=2 values=[0.737157,0.778074] class=Point name=Unnamed dimension=2 values=[0.15137,0.510125] class=Point name=Unnamed dimension=2 values=[0.565584,0.242175] class=Point name=Unnamed dimension=2 values=[0.979797,0.974226] class=Point name=Unnamed dimension=2 values=[0.394011,0.706277] class=Point name=Unnamed dimension=2 values=[0.808225,0.438328] class=Point name=Unnamed dimension=2 values=[0.222438,0.170379] class=Point name=Unnamed dimension=2 values=[0.636652,0.902429] class=Point name=Unnamed dimension=2 values=[0.0508653,0.63448] class=Point name=Unnamed dimension=2 values=[0.465079,0.366531] class=Point name=Unnamed dimension=2 values=[0.879292,0.0985818] class=Point name=Unnamed dimension=2 values=[0.293506,0.830633] class=Point name=Unnamed dimension=2 values=[0.70772,0.562683] class=Point name=Unnamed dimension=2 values=[0.121933,0.294734] class=Point name=Unnamed dimension=2 values=[0.536147,0.026785] class=Point name=Unnamed dimension=2 values=[0.95036,0.758836] class=Point name=Unnamed dimension=2 values=[0.364574,0.490887] class=Point name=Unnamed dimension=2 values=[0.778787,0.222937] class=Point name=Unnamed dimension=2 values=[0.193001,0.954988] class=Point name=Unnamed dimension=2 values=[0.607214,0.687039] class=Point name=Unnamed dimension=2 values=[0.021428,0.41909] class=Point name=Unnamed dimension=2 values=[0.435642,0.151141] class=Point name=Unnamed dimension=2 values=[0.849855,0.883191] class=Point name=Unnamed dimension=2 values=[0.264069,0.615242] class=Point name=Unnamed dimension=2 values=[0.678282,0.347293] class=Point name=Unnamed dimension=2 values=[0.0924958,0.0793439] class=Point name=Unnamed dimension=2 values=[0.506709,0.811395] class=Point name=Unnamed dimension=2 values=[0.920923,0.543446] class=Point name=Unnamed dimension=2 values=[0.335137,0.275496] class=Point name=Unnamed dimension=2 values=[0.74935,0.00754712] class=Point name=Unnamed dimension=2 values=[0.163564,0.739598] class=Point name=Unnamed dimension=2 values=[0.577777,0.471649] class=Point name=Unnamed dimension=2 values=[0.991991,0.2037] class=Point name=Unnamed dimension=2 values=[0.406204,0.93575] class=Point name=Unnamed dimension=2 values=[0.820418,0.667801] class=Point name=Unnamed dimension=2 values=[0.234631,0.399852] class=Point name=Unnamed dimension=2 values=[0.648845,0.131903] class=Point name=Unnamed dimension=2 values=[0.0630586,0.863954] class=Point name=Unnamed dimension=2 values=[0.477272,0.596004] class=Point name=Unnamed dimension=2 values=[0.891486,0.328055] class=Point name=Unnamed dimension=2 values=[0.305699,0.060106] class=Point name=Unnamed dimension=2 values=[0.719913,0.792157] class=Point name=Unnamed dimension=2 values=[0.134126,0.524208] class=Point name=Unnamed dimension=2 values=[0.54834,0.256258] class=Point name=Unnamed dimension=2 values=[0.962554,0.988309] class=Point name=Unnamed dimension=2 values=[0.376767,0.72036] class=Point name=Unnamed dimension=2 values=[0.790981,0.452411] class=Point name=Unnamed dimension=2 values=[0.205194,0.184462] class=Point name=Unnamed dimension=2 values=[0.619408,0.916512] class=Point name=Unnamed dimension=2 values=[0.0336213,0.648563] class=Point name=Unnamed dimension=2 values=[0.447835,0.380614] class=Point name=Unnamed dimension=2 values=[0.862048,0.112665] class=Point name=Unnamed dimension=2 values=[0.276262,0.844716] class=Point name=Unnamed dimension=2 values=[0.690476,0.576766] class=Point name=Unnamed dimension=2 values=[0.104689,0.308817] class=Point name=Unnamed dimension=2 values=[0.518903,0.0408681] class=Point name=Unnamed dimension=2 values=[0.933116,0.772919] class=Point name=Unnamed dimension=2 values=[0.34733,0.50497] class=Point name=Unnamed dimension=2 values=[0.761543,0.237021] class=Point name=Unnamed dimension=2 values=[0.175757,0.969071] class=Point name=Unnamed dimension=2 values=[0.589971,0.701122] class=Point name=Unnamed dimension=2 values=[0.00418408,0.433173] class=Point name=Unnamed dimension=2 values=[0.418398,0.165224] class=Point name=Unnamed dimension=2 values=[0.832611,0.897275] class=Point name=Unnamed dimension=2 values=[0.246825,0.629325] class=Point name=Unnamed dimension=2 values=[0.661038,0.361376] class=Point name=Unnamed dimension=2 values=[0.0752519,0.093427] class=Point name=Unnamed dimension=2 values=[0.489465,0.825478] class=Point name=Unnamed dimension=2 values=[0.903679,0.557529] class=Point name=Unnamed dimension=2 values=[0.317893,0.289579] class=Point name=Unnamed dimension=2 values=[0.732106,0.0216302] class=Point name=Unnamed dimension=2 values=[0.14632,0.753681] class=Point name=Unnamed dimension=2 values=[0.560533,0.485732] class=Point name=Unnamed dimension=2 values=[0.974747,0.217783] class=Point name=Unnamed dimension=2 values=[0.38896,0.949833] class=Point name=Unnamed dimension=2 values=[0.803174,0.681884] class=Point name=Unnamed dimension=2 values=[0.217388,0.413935] class=Point name=Unnamed dimension=2 values=[0.631601,0.145986] class=Point name=Unnamed dimension=2 values=[0.0458146,0.878037] class=Point name=Unnamed dimension=2 values=[0.460028,0.610087] class=Point name=Unnamed dimension=2 values=[0.874242,0.342138] class=Point name=Unnamed dimension=2 values=[0.288455,0.0741891] class=Point name=Unnamed dimension=2 values=[0.702669,0.80624] class=Point name=Unnamed dimension=2 values=[0.116882,0.538291] class=Point name=Unnamed dimension=2 values=[0.531096,0.270342] class=Point name=Unnamed dimension=2 values=[0.94531,0.00239234] class=Point name=Unnamed dimension=2 values=[0.359523,0.734443] class=Point name=Unnamed dimension=2 values=[0.773737,0.466494] class=Point name=Unnamed dimension=2 values=[0.18795,0.198545] class=Point name=Unnamed dimension=2 values=[0.602164,0.930596] class=Point name=Unnamed dimension=2 values=[0.0163774,0.662646] class=Point name=Unnamed dimension=2 values=[0.430591,0.394697] class=Point name=Unnamed dimension=2 values=[0.844805,0.126748] class=Point name=Unnamed dimension=2 values=[0.259018,0.858799] class=Point name=Unnamed dimension=2 values=[0.673232,0.59085] class=Point name=Unnamed dimension=2 values=[0.0874452,0.3229] class=Point name=Unnamed dimension=2 values=[0.501659,0.0549512] class=Point name=Unnamed dimension=2 values=[0.915872,0.787002] class=Point name=Unnamed dimension=2 values=[0.330086,0.519053] class=Point name=Unnamed dimension=2 values=[0.744299,0.251104] class=Point name=Unnamed dimension=2 values=[0.158513,0.983154] class=Point name=Unnamed dimension=2 values=[0.572727,0.715205] class=Point name=Unnamed dimension=2 values=[0.98694,0.447256] class=Point name=Unnamed dimension=2 values=[0.401154,0.179307] class=Point name=Unnamed dimension=2 values=[0.815367,0.911358] class=Point name=Unnamed dimension=2 values=[0.229581,0.643408] class=Point name=Unnamed dimension=2 values=[0.643794,0.375459] class=Point name=Unnamed dimension=2 values=[0.058008,0.10751] class=Point name=Unnamed dimension=2 values=[0.472222,0.839561] class=Point name=Unnamed dimension=2 values=[0.886435,0.571612] class=Point name=Unnamed dimension=2 values=[0.300649,0.303663] class=Point name=Unnamed dimension=2 values=[0.714862,0.0357133] class=Point name=Unnamed dimension=2 values=[0.129076,0.767764] class=Point name=Unnamed dimension=2 values=[0.543289,0.499815] class=Point name=Unnamed dimension=2 values=[0.957503,0.231866] class=Point name=Unnamed dimension=2 values=[0.371716,0.963917] class=Point name=Unnamed dimension=2 values=[0.78593,0.695967] class=Point name=Unnamed dimension=2 values=[0.200144,0.428018] class=Point name=Unnamed dimension=2 values=[0.614357,0.160069] class=Point name=Unnamed dimension=2 values=[0.0285707,0.89212] class=Point name=Unnamed dimension=2 values=[0.442784,0.624171] class=Point name=Unnamed dimension=2 values=[0.856998,0.356221] class=Point name=Unnamed dimension=2 values=[0.271211,0.0882722] class=Point name=Unnamed dimension=2 values=[0.685425,0.820323] class=Point name=Unnamed dimension=2 values=[0.0996385,0.552374] class=Point name=Unnamed dimension=2 values=[0.513852,0.284425] class=Point name=Unnamed dimension=2 values=[0.928066,0.0164755] class=Point name=Unnamed dimension=2 values=[0.342279,0.748526] class=Point name=Unnamed dimension=2 values=[0.756493,0.480577] class=Point name=Unnamed dimension=2 values=[0.170706,0.212628] class=Point name=Unnamed dimension=2 values=[0.58492,0.944679] class=Point name=Unnamed dimension=2 values=[0.999133,0.676729] class=Point name=Unnamed dimension=2 values=[0.413347,0.40878] class=Point name=Unnamed dimension=2 values=[0.827561,0.140831] class=Point name=Unnamed dimension=2 values=[0.241774,0.872882] class=Point name=Unnamed dimension=2 values=[0.655988,0.604933] class=Point name=Unnamed dimension=2 values=[0.0702013,0.336984] class=Point name=Unnamed dimension=2 values=[0.484415,0.0690343] class=Point name=Unnamed dimension=2 values=[0.898628,0.801085] class=Point name=Unnamed dimension=2 values=[0.312842,0.533136] class=Point name=Unnamed dimension=2 values=[0.727056,0.265187] class=Point name=Unnamed dimension=2 values=[0.141269,0.997238] class=Point name=Unnamed dimension=2 values=[0.555483,0.729288] class=Point name=Unnamed dimension=2 values=[0.969696,0.461339] class=Point name=Unnamed dimension=2 values=[0.38391,0.19339] class=Point name=Unnamed dimension=2 values=[0.798123,0.925441] class=Point name=Unnamed dimension=2 values=[0.212337,0.657492] class=Point name=Unnamed dimension=2 values=[0.62655,0.389542] class=Point name=Unnamed dimension=2 values=[0.040764,0.121593] class=Point name=Unnamed dimension=2 values=[0.454978,0.853644] class=Point name=Unnamed dimension=2 values=[0.869191,0.585695] class=Point name=Unnamed dimension=2 values=[0.283405,0.317746] class=Point name=Unnamed dimension=2 values=[0.697618,0.0497964] class=Point name=Unnamed dimension=2 values=[0.111832,0.781847] class=Point name=Unnamed dimension=2 values=[0.526045,0.513898] class=Point name=Unnamed dimension=2 values=[0.940259,0.245949] class=Point name=Unnamed dimension=2 values=[0.354473,0.978] class=Point name=Unnamed dimension=2 values=[0.768686,0.71005] class=Point name=Unnamed dimension=2 values=[0.1829,0.442101] class=Point name=Unnamed dimension=2 values=[0.597113,0.174152] class=Point name=Unnamed dimension=2 values=[0.0113268,0.906203] class=Point name=Unnamed dimension=2 values=[0.42554,0.638254] class=Point name=Unnamed dimension=2 values=[0.839754,0.370305] class=Point name=Unnamed dimension=2 values=[0.253967,0.102355] class=Point name=Unnamed dimension=2 values=[0.668181,0.834406] class=Point name=Unnamed dimension=2 values=[0.0823946,0.566457] class=Point name=Unnamed dimension=2 values=[0.496608,0.298508] class=Point name=Unnamed dimension=2 values=[0.910822,0.0305586] class=Point name=Unnamed dimension=2 values=[0.325035,0.762609] class=Point name=Unnamed dimension=2 values=[0.739249,0.49466] class=Point name=Unnamed dimension=2 values=[0.153462,0.226711] class=Point name=Unnamed dimension=2 values=[0.567676,0.958762] class=Point name=Unnamed dimension=2 values=[0.98189,0.690813] class=Point name=Unnamed dimension=2 values=[0.396103,0.422863] class=Point name=Unnamed dimension=2 values=[0.810317,0.154914] class=Point name=Unnamed dimension=2 values=[0.22453,0.886965] class=Point name=Unnamed dimension=2 values=[0.638744,0.619016] class=Point name=Unnamed dimension=2 values=[0.0529573,0.351067] class=Point name=Unnamed dimension=2 values=[0.467171,0.0831174] class=Point name=Unnamed dimension=2 values=[0.881384,0.815168] class=Point name=Unnamed dimension=2 values=[0.295598,0.547219] class=Point name=Unnamed dimension=2 values=[0.709812,0.27927] class=Point name=Unnamed dimension=2 values=[0.124025,0.0113207] class=Point name=Unnamed dimension=2 values=[0.538239,0.743371] class=Point name=Unnamed dimension=2 values=[0.952452,0.475422] class=Point name=Unnamed dimension=2 values=[0.366666,0.207473] class=Point name=Unnamed dimension=2 values=[0.780879,0.939524] class=Point name=Unnamed dimension=2 values=[0.195093,0.671575] class=Point name=Unnamed dimension=2 values=[0.609307,0.403626] class=Point name=Unnamed dimension=2 values=[0.0235201,0.135676] class=Point name=Unnamed dimension=2 values=[0.437734,0.867727] class=Point name=Unnamed dimension=2 values=[0.851947,0.599778] class=Point name=Unnamed dimension=2 values=[0.266161,0.331829] class=Point name=Unnamed dimension=2 values=[0.680374,0.0638796] class=Point name=Unnamed dimension=2 values=[0.0945879,0.79593] class=Point name=Unnamed dimension=2 values=[0.508801,0.527981] class=Point name=Unnamed dimension=2 values=[0.923015,0.260032] class=Point name=Unnamed dimension=2 values=[0.337229,0.992083] class=Point name=Unnamed dimension=2 values=[0.751442,0.724134] class=Point name=Unnamed dimension=2 values=[0.165656,0.456184] class=Point name=Unnamed dimension=2 values=[0.579869,0.188235] class=Point name=Unnamed dimension=2 values=[0.994083,0.920286] class=Point name=Unnamed dimension=2 values=[0.408296,0.652337] class=Point name=Unnamed dimension=2 values=[0.82251,0.384388] class=Point name=Unnamed dimension=2 values=[0.236724,0.116438] class=Point name=Unnamed dimension=2 values=[0.650937,0.848489] class=Point name=Unnamed dimension=2 values=[0.0651506,0.58054] class=Point name=Unnamed dimension=2 values=[0.479364,0.312591] class=Point name=Unnamed dimension=2 values=[0.893578,0.0446417] class=Point name=Unnamed dimension=2 values=[0.307791,0.776692] class=Point name=Unnamed dimension=2 values=[0.722005,0.508743] class=Point name=Unnamed dimension=2 values=[0.136218,0.240794] class=Point name=Unnamed dimension=2 values=[0.550432,0.972845] class=Point name=Unnamed dimension=2 values=[0.964646,0.704896] class=Point name=Unnamed dimension=2 values=[0.378859,0.436947] class=Point name=Unnamed dimension=2 values=[0.793073,0.168997] class=Point name=Unnamed dimension=2 values=[0.207286,0.901048] class=Point name=Unnamed dimension=2 values=[0.6215,0.633099] class=Point name=Unnamed dimension=2 values=[0.0357134,0.36515] class=Point name=Unnamed dimension=2 values=[0.449927,0.0972006] class=Point name=Unnamed dimension=2 values=[0.86414,0.829251] class=Point name=Unnamed dimension=2 values=[0.278354,0.561302] class=Point name=Unnamed dimension=2 values=[0.692568,0.293353] class=Point name=Unnamed dimension=2 values=[0.106781,0.0254038] class=Point name=Unnamed dimension=2 values=[0.520995,0.757455] class=Point name=Unnamed dimension=2 values=[0.935208,0.489505] class=Point name=Unnamed dimension=2 values=[0.349422,0.221556] class=Point name=Unnamed dimension=2 values=[0.763635,0.953607] class=Point name=Unnamed dimension=2 values=[0.177849,0.685658] class=Point name=Unnamed dimension=2 values=[0.592063,0.417709] class=Point name=Unnamed dimension=2 values=[0.00627612,0.149759] class=Point name=Unnamed dimension=2 values=[0.42049,0.88181] class=Point name=Unnamed dimension=2 values=[0.834703,0.613861] class=Point name=Unnamed dimension=2 values=[0.248917,0.345912] class=Point name=Unnamed dimension=2 values=[0.66313,0.0779627] class=Point name=Unnamed dimension=2 values=[0.0773439,0.810013] class=Point name=Unnamed dimension=2 values=[0.491557,0.542064] class=Point name=Unnamed dimension=2 values=[0.905771,0.274115] class=Point name=Unnamed dimension=2 values=[0.319985,0.0061659] class=Point name=Unnamed dimension=2 values=[0.734198,0.738217] class=Point name=Unnamed dimension=2 values=[0.148412,0.470268] class=Point name=Unnamed dimension=2 values=[0.562625,0.202318] class=Point name=Unnamed dimension=2 values=[0.976839,0.934369] class=Point name=Unnamed dimension=2 values=[0.391052,0.66642] class=Point name=Unnamed dimension=2 values=[0.805266,0.398471] class=Point name=Unnamed dimension=2 values=[0.21948,0.130522] class=Point name=Unnamed dimension=2 values=[0.633693,0.862572] class=Point name=Unnamed dimension=2 values=[0.0479067,0.594623] class=Point name=Unnamed dimension=2 values=[0.46212,0.326674] class=Point name=Unnamed dimension=2 values=[0.876334,0.0587248] class=Point name=Unnamed dimension=2 values=[0.290547,0.790776] class=Point name=Unnamed dimension=2 values=[0.704761,0.522826] class=Point name=Unnamed dimension=2 values=[0.118974,0.254877] class=Point name=Unnamed dimension=2 values=[0.533188,0.986928] class=Point name=Unnamed dimension=2 values=[0.947402,0.718979] class=Point name=Unnamed dimension=2 values=[0.361615,0.45103] class=Point name=Unnamed dimension=2 values=[0.775829,0.18308] class=Point name=Unnamed dimension=2 values=[0.190042,0.915131] class=Point name=Unnamed dimension=2 values=[0.604256,0.647182] class=Point name=Unnamed dimension=2 values=[0.0184694,0.379233] class=Point name=Unnamed dimension=2 values=[0.432683,0.111284] class=Point name=Unnamed dimension=2 values=[0.846897,0.843334] class=Point name=Unnamed dimension=2 values=[0.26111,0.575385] class=Point name=Unnamed dimension=2 values=[0.675324,0.307436] class=Point name=Unnamed dimension=2 values=[0.0895372,0.0394869] class=Point name=Unnamed dimension=2 values=[0.503751,0.771538] class=Point name=Unnamed dimension=2 values=[0.917964,0.503589] class=Point name=Unnamed dimension=2 values=[0.332178,0.235639] class=Point name=Unnamed dimension=2 values=[0.746391,0.96769] class=Point name=Unnamed dimension=2 values=[0.160605,0.699741] class=Point name=Unnamed dimension=2 values=[0.574819,0.431792] class=Point name=Unnamed dimension=2 values=[0.989032,0.163843] class=Point name=Unnamed dimension=2 values=[0.403246,0.895893] class=Point name=Unnamed dimension=2 values=[0.817459,0.627944] class=Point name=Unnamed dimension=2 values=[0.231673,0.359995] class=Point name=Unnamed dimension=2 values=[0.645886,0.0920458] class=Point name=Unnamed dimension=2 values=[0.0601,0.824097] class=Point name=Unnamed dimension=2 values=[0.474314,0.556147] class=Point name=Unnamed dimension=2 values=[0.888527,0.288198] class=Point name=Unnamed dimension=2 values=[0.302741,0.020249] class=Point name=Unnamed dimension=2 values=[0.716954,0.7523] class=Point name=Unnamed dimension=2 values=[0.131168,0.484351] class=Point name=Unnamed dimension=2 values=[0.545381,0.216401] class=Point name=Unnamed dimension=2 values=[0.959595,0.948452] class=Point name=Unnamed dimension=2 values=[0.373808,0.680503] class=Point name=Unnamed dimension=2 values=[0.788022,0.412554] class=Point name=Unnamed dimension=2 values=[0.202236,0.144605] class=Point name=Unnamed dimension=2 values=[0.616449,0.876655] class=Point name=Unnamed dimension=2 values=[0.0306627,0.608706] class=Point name=Unnamed dimension=2 values=[0.444876,0.340757] class=Point name=Unnamed dimension=2 values=[0.85909,0.0728079] class=Point name=Unnamed dimension=2 values=[0.273303,0.804859] class=Point name=Unnamed dimension=2 values=[0.687517,0.53691] class=Point name=Unnamed dimension=2 values=[0.101731,0.26896] class=Point name=Unnamed dimension=2 values=[0.515944,0.00101112] class=Point name=Unnamed dimension=2 values=[0.930158,0.733062] class=Point name=Unnamed dimension=2 values=[0.344371,0.465113] class=Point name=Unnamed dimension=2 values=[0.758585,0.197164] class=Point name=Unnamed dimension=2 values=[0.172798,0.929214] class=Point name=Unnamed dimension=2 values=[0.587012,0.661265] class=Point name=Unnamed dimension=2 values=[0.00122549,0.393316] class=Point name=Unnamed dimension=2 values=[0.415439,0.125367] class=Point name=Unnamed dimension=2 values=[0.829653,0.857418] class=Point name=Unnamed dimension=2 values=[0.243866,0.589468] class=Point name=Unnamed dimension=2 values=[0.65808,0.321519] class=Point name=Unnamed dimension=2 values=[0.0722933,0.05357] class=Point name=Unnamed dimension=2 values=[0.486507,0.785621] class=Point name=Unnamed dimension=2 values=[0.90072,0.517672] class=Point name=Unnamed dimension=2 values=[0.314934,0.249722] class=Point name=Unnamed dimension=2 values=[0.729148,0.981773] class=Point name=Unnamed dimension=2 values=[0.143361,0.713824] class=Point name=Unnamed dimension=2 values=[0.557575,0.445875] class=Point name=Unnamed dimension=2 values=[0.971788,0.177926] class=Point name=Unnamed dimension=2 values=[0.386002,0.909976] class=Point name=Unnamed dimension=2 values=[0.800215,0.642027] class=Point name=Unnamed dimension=2 values=[0.214429,0.374078] class=Point name=Unnamed dimension=2 values=[0.628642,0.106129] class=Point name=Unnamed dimension=2 values=[0.042856,0.83818] class=Point name=Unnamed dimension=2 values=[0.45707,0.570231] class=Point name=Unnamed dimension=2 values=[0.871283,0.302281] class=Point name=Unnamed dimension=2 values=[0.285497,0.0343321] class=Point name=Unnamed dimension=2 values=[0.69971,0.766383] class=Point name=Unnamed dimension=2 values=[0.113924,0.498434] class=Point name=Unnamed dimension=2 values=[0.528137,0.230485] class=Point name=Unnamed dimension=2 values=[0.942351,0.962535] class=Point name=Unnamed dimension=2 values=[0.356565,0.694586] class=Point name=Unnamed dimension=2 values=[0.770778,0.426637] class=Point name=Unnamed dimension=2 values=[0.184992,0.158688] class=Point name=Unnamed dimension=2 values=[0.599205,0.890739] class=Point name=Unnamed dimension=2 values=[0.0134188,0.622789] class=Point name=Unnamed dimension=2 values=[0.427632,0.35484] class=Point name=Unnamed dimension=2 values=[0.841846,0.086891] class=Point name=Unnamed dimension=2 values=[0.256059,0.818942] class=Point name=Unnamed dimension=2 values=[0.670273,0.550993] class=Point name=Unnamed dimension=2 values=[0.0844866,0.283043] class=Point name=Unnamed dimension=2 values=[0.4987,0.0150942] class=Point name=Unnamed dimension=2 values=[0.912914,0.747145] class=Point name=Unnamed dimension=2 values=[0.327127,0.479196] class=Point name=Unnamed dimension=2 values=[0.741341,0.211247] class=Point name=Unnamed dimension=2 values=[0.155554,0.943297] class=Point name=Unnamed dimension=2 values=[0.569768,0.675348] class=Point name=Unnamed dimension=2 values=[0.983982,0.407399] class=Point name=Unnamed dimension=2 values=[0.398195,0.13945] class=Point name=Unnamed dimension=2 values=[0.812409,0.871501] class=Point name=Unnamed dimension=2 values=[0.226622,0.603552] class=Point name=Unnamed dimension=2 values=[0.640836,0.335602] class=Point name=Unnamed dimension=2 values=[0.0550494,0.0676531] class=Point name=Unnamed dimension=2 values=[0.469263,0.799704] class=Point name=Unnamed dimension=2 values=[0.883476,0.531755] class=Point name=Unnamed dimension=2 values=[0.29769,0.263806] class=Point name=Unnamed dimension=2 values=[0.711904,0.995856] class=Point name=Unnamed dimension=2 values=[0.126117,0.727907] class=Point name=Unnamed dimension=2 values=[0.540331,0.459958] class=Point name=Unnamed dimension=2 values=[0.954544,0.192009] class=Point name=Unnamed dimension=2 values=[0.368758,0.92406] class=Point name=Unnamed dimension=2 values=[0.782971,0.65611] class=Point name=Unnamed dimension=2 values=[0.197185,0.388161] class=Point name=Unnamed dimension=2 values=[0.611399,0.120212] class=Point name=Unnamed dimension=2 values=[0.0256121,0.852263] class=Point name=Unnamed dimension=2 values=[0.439826,0.584314] class=Point name=Unnamed dimension=2 values=[0.854039,0.316364] class=Point name=Unnamed dimension=2 values=[0.268253,0.0484152] class=Point name=Unnamed dimension=2 values=[0.682466,0.780466] class=Point name=Unnamed dimension=2 values=[0.0966799,0.512517] class=Point name=Unnamed dimension=2 values=[0.510893,0.244568] class=Point name=Unnamed dimension=2 values=[0.925107,0.976618] class=Point name=Unnamed dimension=2 values=[0.339321,0.708669] class=Point name=Unnamed dimension=2 values=[0.753534,0.44072] class=Point name=Unnamed dimension=2 values=[0.167748,0.172771] class=Point name=Unnamed dimension=2 values=[0.581961,0.904822] class=Point name=Unnamed dimension=2 values=[0.996175,0.636872] class=Point name=Unnamed dimension=2 values=[0.410388,0.368923] class=Point name=Unnamed dimension=2 values=[0.824602,0.100974] class=Point name=Unnamed dimension=2 values=[0.238816,0.833025] class=Point name=Unnamed dimension=2 values=[0.653029,0.565076] class=Point name=Unnamed dimension=2 values=[0.0672427,0.297127] class=Point name=Unnamed dimension=2 values=[0.481456,0.0291773] class=Point name=Unnamed dimension=2 values=[0.89567,0.761228] class=Point name=Unnamed dimension=2 values=[0.309883,0.493279] class=Point name=Unnamed dimension=2 values=[0.724097,0.22533] class=Point name=Unnamed dimension=2 values=[0.13831,0.957381] class=Point name=Unnamed dimension=2 values=[0.552524,0.689431] class=Point name=Unnamed dimension=2 values=[0.966738,0.421482] class=Point name=Unnamed dimension=2 values=[0.380951,0.153533] class=Point name=Unnamed dimension=2 values=[0.795165,0.885584] class=Point name=Unnamed dimension=2 values=[0.209378,0.617635] class=Point name=Unnamed dimension=2 values=[0.623592,0.349685] class=Point name=Unnamed dimension=2 values=[0.0378054,0.0817362] class=Point name=Unnamed dimension=2 values=[0.452019,0.813787] class=Point name=Unnamed dimension=2 values=[0.866233,0.545838] class=Point name=Unnamed dimension=2 values=[0.280446,0.277889] class=Point name=Unnamed dimension=2 values=[0.69466,0.00993946] class=Point name=Unnamed dimension=2 values=[0.108873,0.74199] class=Point name=Unnamed dimension=2 values=[0.523087,0.474041] class=Point name=Unnamed dimension=2 values=[0.9373,0.206092] class=Point name=Unnamed dimension=2 values=[0.351514,0.938143] class=Point name=Unnamed dimension=2 values=[0.765727,0.670193] class=Point name=Unnamed dimension=2 values=[0.179941,0.402244] class=Point name=Unnamed dimension=2 values=[0.594155,0.134295] class=Point name=Unnamed dimension=2 values=[0.00836816,0.866346] class=Point name=Unnamed dimension=2 values=[0.422582,0.598397] class=Point name=Unnamed dimension=2 values=[0.836795,0.330448] class=Point name=Unnamed dimension=2 values=[0.251009,0.0624983] class=Point name=Unnamed dimension=2 values=[0.665222,0.794549] class=Point name=Unnamed dimension=2 values=[0.079436,0.5266] class=Point name=Unnamed dimension=2 values=[0.49365,0.258651] class=Point name=Unnamed dimension=2 values=[0.907863,0.990702] class=Point name=Unnamed dimension=2 values=[0.322077,0.722752] class=Point name=Unnamed dimension=2 values=[0.73629,0.454803] class=Point name=Unnamed dimension=2 values=[0.150504,0.186854] class=Point name=Unnamed dimension=2 values=[0.564717,0.918905] class=Point name=Unnamed dimension=2 values=[0.978931,0.650956] class=Point name=Unnamed dimension=2 values=[0.393144,0.383006] class=Point name=Unnamed dimension=2 values=[0.807358,0.115057] class=Point name=Unnamed dimension=2 values=[0.221572,0.847108] class=Point name=Unnamed dimension=2 values=[0.635785,0.579159] class=Point name=Unnamed dimension=2 values=[0.0499987,0.31121] class=Point name=Unnamed dimension=2 values=[0.464212,0.0432605] class=Point name=Unnamed dimension=2 values=[0.878426,0.775311] class=Point name=Unnamed dimension=2 values=[0.292639,0.507362] class=Point name=Unnamed dimension=2 values=[0.706853,0.239413] class=Point name=Unnamed dimension=2 values=[0.121067,0.971464] class=Point name=Unnamed dimension=2 values=[0.53528,0.703514] class=Point name=Unnamed dimension=2 values=[0.949494,0.435565] class=Point name=Unnamed dimension=2 values=[0.363707,0.167616] class=Point name=Unnamed dimension=2 values=[0.777921,0.899667] class=Point name=Unnamed dimension=2 values=[0.192134,0.631718] class=Point name=Unnamed dimension=2 values=[0.606348,0.363769] class=Point name=Unnamed dimension=2 values=[0.0205615,0.0958193] class=Point name=Unnamed dimension=2 values=[0.434775,0.82787] class=Point name=Unnamed dimension=2 values=[0.848989,0.559921] class=Point name=Unnamed dimension=2 values=[0.263202,0.291972] class=Point name=Unnamed dimension=2 values=[0.677416,0.0240226] class=Point name=Unnamed dimension=2 values=[0.0916293,0.756073] class=Point name=Unnamed dimension=2 values=[0.505843,0.488124] class=Point name=Unnamed dimension=2 values=[0.920056,0.220175] class=Point name=Unnamed dimension=2 values=[0.33427,0.952226] class=Point name=Unnamed dimension=2 values=[0.748484,0.684277] class=Point name=Unnamed dimension=2 values=[0.162697,0.416327] class=Point name=Unnamed dimension=2 values=[0.576911,0.148378] class=Point name=Unnamed dimension=2 values=[0.991124,0.880429] class=Point name=Unnamed dimension=2 values=[0.405338,0.61248] class=Point name=Unnamed dimension=2 values=[0.819551,0.344531] class=Point name=Unnamed dimension=2 values=[0.233765,0.0765814] class=Point name=Unnamed dimension=2 values=[0.647978,0.808632] class=Point name=Unnamed dimension=2 values=[0.062192,0.540683] class=Point name=Unnamed dimension=2 values=[0.476406,0.272734] class=Point name=Unnamed dimension=2 values=[0.890619,0.00478468] class=Point name=Unnamed dimension=2 values=[0.304833,0.736835] class=Point name=Unnamed dimension=2 values=[0.719046,0.468886] class=Point name=Unnamed dimension=2 values=[0.13326,0.200937] class=Point name=Unnamed dimension=2 values=[0.547473,0.932988] class=Point name=Unnamed dimension=2 values=[0.961687,0.665039] class=Point name=Unnamed dimension=2 values=[0.375901,0.39709] class=Point name=Unnamed dimension=2 values=[0.790114,0.12914] class=Point name=Unnamed dimension=2 values=[0.204328,0.861191] class=Point name=Unnamed dimension=2 values=[0.618541,0.593242] class=Point name=Unnamed dimension=2 values=[0.0327548,0.325293] class=Point name=Unnamed dimension=2 values=[0.446968,0.0573436] class=Point name=Unnamed dimension=2 values=[0.861182,0.789394] class=Point name=Unnamed dimension=2 values=[0.275395,0.521445] class=Point name=Unnamed dimension=2 values=[0.689609,0.253496] class=Point name=Unnamed dimension=2 values=[0.103823,0.985547] class=Point name=Unnamed dimension=2 values=[0.518036,0.717598] class=Point name=Unnamed dimension=2 values=[0.93225,0.449648] class=Point name=Unnamed dimension=2 values=[0.346463,0.181699] class=Point name=Unnamed dimension=2 values=[0.760677,0.91375] class=Point name=Unnamed dimension=2 values=[0.17489,0.645801] class=Point name=Unnamed dimension=2 values=[0.589104,0.377852] class=Point name=Unnamed dimension=2 values=[0.00331753,0.109902] class=Point name=Unnamed dimension=2 values=[0.417531,0.841953] class=Point name=Unnamed dimension=2 values=[0.831745,0.574004] class=Point name=Unnamed dimension=2 values=[0.245958,0.306055] class=Point name=Unnamed dimension=2 values=[0.660172,0.0381057] class=Point name=Unnamed dimension=2 values=[0.0743853,0.770156] class=Point name=Unnamed dimension=2 values=[0.488599,0.502207] class=Point name=Unnamed dimension=2 values=[0.902812,0.234258] class=Point name=Unnamed dimension=2 values=[0.317026,0.966309] class=Point name=Unnamed dimension=2 values=[0.73124,0.69836] class=Point name=Unnamed dimension=2 values=[0.145453,0.430411] class=Point name=Unnamed dimension=2 values=[0.559667,0.162461] class=Point name=Unnamed dimension=2 values=[0.97388,0.894512] class=Point name=Unnamed dimension=2 values=[0.388094,0.626563] class=Point name=Unnamed dimension=2 values=[0.802307,0.358614] class=Point name=Unnamed dimension=2 values=[0.216521,0.0906646] class=Point name=Unnamed dimension=2 values=[0.630735,0.822715] class=Point name=Unnamed dimension=2 values=[0.0449481,0.554766] class=Point name=Unnamed dimension=2 values=[0.459162,0.286817] class=Point name=Unnamed dimension=2 values=[0.873375,0.0188678] class=Point name=Unnamed dimension=2 values=[0.287589,0.750919] class=Point name=Unnamed dimension=2 values=[0.701802,0.482969] class=Point name=Unnamed dimension=2 values=[0.116016,0.21502] class=Point name=Unnamed dimension=2 values=[0.530229,0.947071] class=Point name=Unnamed dimension=2 values=[0.944443,0.679122] class=Point name=Unnamed dimension=2 values=[0.358657,0.411173] class=Point name=Unnamed dimension=2 values=[0.77287,0.143223] class=Point name=Unnamed dimension=2 values=[0.187084,0.875274] class=Point name=Unnamed dimension=2 values=[0.601297,0.607325] class=Point name=Unnamed dimension=2 values=[0.0155108,0.339376] class=Point name=Unnamed dimension=2 values=[0.429724,0.0714267] class=Point name=Unnamed dimension=2 values=[0.843938,0.803477] class=Point name=Unnamed dimension=2 values=[0.258152,0.535528] class=Point name=Unnamed dimension=2 values=[0.672365,0.267579] class=Point name=Unnamed dimension=2 values=[0.0865787,0.99963] class=Point name=Unnamed dimension=2 values=[0.500792,0.731681] class=Point name=Unnamed dimension=2 values=[0.915006,0.463732] class=Point name=Unnamed dimension=2 values=[0.329219,0.195782] class=Point name=Unnamed dimension=2 values=[0.743433,0.927833] class=Point name=Unnamed dimension=2 values=[0.157646,0.659884] class=Point name=Unnamed dimension=2 values=[0.57186,0.391935] class=Point name=Unnamed dimension=2 values=[0.986074,0.123986] class=Point name=Unnamed dimension=2 values=[0.400287,0.856036] class=Point name=Unnamed dimension=2 values=[0.814501,0.588087] class=Point name=Unnamed dimension=2 values=[0.228714,0.320138] class=Point name=Unnamed dimension=2 values=[0.642928,0.0521888] class=Point name=Unnamed dimension=2 values=[0.0571414,0.78424] class=Point name=Unnamed dimension=2 values=[0.471355,0.51629] class=Point name=Unnamed dimension=2 values=[0.885569,0.248341] class=Point name=Unnamed dimension=2 values=[0.299782,0.980392] class=Point name=Unnamed dimension=2 values=[0.713996,0.712443] class=Point name=Unnamed dimension=2 values=[0.128209,0.444494] class=Point name=Unnamed dimension=2 values=[0.542423,0.176544] class=Point name=Unnamed dimension=2 values=[0.956636,0.908595] class=Point name=Unnamed dimension=2 values=[0.37085,0.640646] class=Point name=Unnamed dimension=2 values=[0.785063,0.372697] class=Point name=Unnamed dimension=2 values=[0.199277,0.104748] class=Point name=Unnamed dimension=2 values=[0.613491,0.836798] class=Point name=Unnamed dimension=2 values=[0.0277041,0.568849] class=Point name=Unnamed dimension=2 values=[0.441918,0.3009] class=Point name=Unnamed dimension=2 values=[0.856131,0.0329509] class=Point name=Unnamed dimension=2 values=[0.270345,0.765002] class=Point name=Unnamed dimension=2 values=[0.684558,0.497053] class=Point name=Unnamed dimension=2 values=[0.098772,0.229103] class=Point name=Unnamed dimension=2 values=[0.512986,0.961154] class=Point name=Unnamed dimension=2 values=[0.927199,0.693205] class=Point name=Unnamed dimension=2 values=[0.341413,0.425256] class=Point name=Unnamed dimension=2 values=[0.755626,0.157307] class=Point name=Unnamed dimension=2 values=[0.16984,0.889357] class=Point name=Unnamed dimension=2 values=[0.584053,0.621408] class=Point name=Unnamed dimension=2 values=[0.998267,0.353459] class=Point name=Unnamed dimension=2 values=[0.41248,0.0855098] class=Point name=Unnamed dimension=2 values=[0.826694,0.817561] class=Point name=Unnamed dimension=2 values=[0.240908,0.549611] class=Point name=Unnamed dimension=2 values=[0.655121,0.281662] class=Point name=Unnamed dimension=2 values=[0.0693347,0.013713] class=Point name=Unnamed dimension=2 values=[0.483548,0.745764] class=Point name=Unnamed dimension=2 values=[0.897762,0.477815] class=Point name=Unnamed dimension=2 values=[0.311975,0.209865] class=Point name=Unnamed dimension=2 values=[0.726189,0.941916] class=Point name=Unnamed dimension=2 values=[0.140403,0.673967] class=Point name=Unnamed dimension=2 values=[0.554616,0.406018] class=Point name=Unnamed dimension=2 values=[0.96883,0.138069] class=Point name=Unnamed dimension=2 values=[0.383043,0.870119] class=Point name=Unnamed dimension=2 values=[0.797257,0.60217] class=Point name=Unnamed dimension=2 values=[0.21147,0.334221] class=Point name=Unnamed dimension=2 values=[0.625684,0.0662719] class=Point name=Unnamed dimension=2 values=[0.0398975,0.798323] class=Point name=Unnamed dimension=2 values=[0.454111,0.530374] class=Point name=Unnamed dimension=2 values=[0.868325,0.262424] class=Point name=Unnamed dimension=2 values=[0.282538,0.994475] class=Point name=Unnamed dimension=2 values=[0.696752,0.726526] class=Point name=Unnamed dimension=2 values=[0.110965,0.458577] class=Point name=Unnamed dimension=2 values=[0.525179,0.190628] class=Point name=Unnamed dimension=2 values=[0.939392,0.922678] class=Point name=Unnamed dimension=2 values=[0.353606,0.654729] class=Point name=Unnamed dimension=2 values=[0.76782,0.38678] class=Point name=Unnamed dimension=2 values=[0.182033,0.118831] class=Point name=Unnamed dimension=2 values=[0.596247,0.850882] class=Point name=Unnamed dimension=2 values=[0.0104602,0.582932] class=Point name=Unnamed dimension=2 values=[0.424674,0.314983] class=Point name=Unnamed dimension=2 values=[0.838887,0.047034] class=Point name=Unnamed dimension=2 values=[0.253101,0.779085] class=Point name=Unnamed dimension=2 values=[0.667314,0.511136] class=Point name=Unnamed dimension=2 values=[0.081528,0.243186] class=Point name=Unnamed dimension=2 values=[0.495742,0.975237] class=Point name=Unnamed dimension=2 values=[0.909955,0.707288] class=Point name=Unnamed dimension=2 values=[0.324169,0.439339] class=Point name=Unnamed dimension=2 values=[0.738382,0.17139] class=Point name=Unnamed dimension=2 values=[0.152596,0.90344] class=Point name=Unnamed dimension=2 values=[0.566809,0.635491] class=Point name=Unnamed dimension=2 values=[0.981023,0.367542] class=Point name=Unnamed dimension=2 values=[0.395237,0.0995929] class=Point name=Unnamed dimension=2 values=[0.80945,0.831644] class=Point name=Unnamed dimension=2 values=[0.223664,0.563695] class=Point name=Unnamed dimension=2 values=[0.637877,0.295745] class=Point name=Unnamed dimension=2 values=[0.0520908,0.0277961] class=Point name=Unnamed dimension=2 values=[0.466304,0.759847] class=Point name=Unnamed dimension=2 values=[0.880518,0.491898] class=Point name=Unnamed dimension=2 values=[0.294731,0.223949] class=Point name=Unnamed dimension=2 values=[0.708945,0.955999] class=Point name=Unnamed dimension=2 values=[0.123159,0.68805] class=Point name=Unnamed dimension=2 values=[0.537372,0.420101] class=Point name=Unnamed dimension=2 values=[0.951586,0.152152] class=Point name=Unnamed dimension=2 values=[0.365799,0.884203] class=Point name=Unnamed dimension=2 values=[0.780013,0.616253] class=Point name=Unnamed dimension=2 values=[0.194226,0.348304] class=Point name=Unnamed dimension=2 values=[0.60844,0.080355] class=Point name=Unnamed dimension=2 values=[0.0226535,0.812406] class=Point name=Unnamed dimension=2 values=[0.436867,0.544457] class=Point name=Unnamed dimension=2 values=[0.851081,0.276507] class=Point name=Unnamed dimension=2 values=[0.265294,0.00855824] class=Point name=Unnamed dimension=2 values=[0.679508,0.740609] class=Point name=Unnamed dimension=2 values=[0.0937213,0.47266] class=Point name=Unnamed dimension=2 values=[0.507935,0.204711] class=Point name=Unnamed dimension=2 values=[0.922148,0.936761] class=Point name=Unnamed dimension=2 values=[0.336362,0.668812] class=Point name=Unnamed dimension=2 values=[0.750576,0.400863] class=Point name=Unnamed dimension=2 values=[0.164789,0.132914] class=Point name=Unnamed dimension=2 values=[0.579003,0.864965] class=Point name=Unnamed dimension=2 values=[0.993216,0.597016] class=Point name=Unnamed dimension=2 values=[0.40743,0.329066] class=Point name=Unnamed dimension=2 values=[0.821643,0.0611171] class=Point name=Unnamed dimension=2 values=[0.235857,0.793168] class=Point name=Unnamed dimension=2 values=[0.650071,0.525219] class=Point name=Unnamed dimension=2 values=[0.0642841,0.25727] class=Point name=Unnamed dimension=2 values=[0.478498,0.98932] class=Point name=Unnamed dimension=2 values=[0.892711,0.721371] class=Point name=Unnamed dimension=2 values=[0.306925,0.453422] class=Point name=Unnamed dimension=2 values=[0.721138,0.185473] class=Point name=Unnamed dimension=2 values=[0.135352,0.917524] class=Point name=Unnamed dimension=2 values=[0.549565,0.649574] class=Point name=Unnamed dimension=2 values=[0.963779,0.381625] class=Point name=Unnamed dimension=2 values=[0.377993,0.113676] class=Point name=Unnamed dimension=2 values=[0.792206,0.845727] class=Point name=Unnamed dimension=2 values=[0.20642,0.577778] class=Point name=Unnamed dimension=2 values=[0.620633,0.309828] class=Point name=Unnamed dimension=2 values=[0.0348468,0.0418792] class=Point name=Unnamed dimension=2 values=[0.44906,0.77393] class=Point name=Unnamed dimension=2 values=[0.863274,0.505981] class=Point name=Unnamed dimension=2 values=[0.277488,0.238032] class=Point name=Unnamed dimension=2 values=[0.691701,0.970082] class=Point name=Unnamed dimension=2 values=[0.105915,0.702133] class=Point name=Unnamed dimension=2 values=[0.520128,0.434184] class=Point name=Unnamed dimension=2 values=[0.934342,0.166235] class=Point name=Unnamed dimension=2 values=[0.348555,0.898286] class=Point name=Unnamed dimension=2 values=[0.762769,0.630337] class=Point name=Unnamed dimension=2 values=[0.176982,0.362387] class=Point name=Unnamed dimension=2 values=[0.591196,0.0944381] class=Point name=Unnamed dimension=2 values=[0.00540957,0.826489] class=Point name=Unnamed dimension=2 values=[0.419623,0.55854] class=Point name=Unnamed dimension=2 values=[0.833837,0.290591] class=Point name=Unnamed dimension=2 values=[0.24805,0.0226413] class=Point name=Unnamed dimension=2 values=[0.662264,0.754692] class=Point name=Unnamed dimension=2 values=[0.0764774,0.486743] class=Point name=Unnamed dimension=2 values=[0.490691,0.218794] class=Point name=Unnamed dimension=2 values=[0.904905,0.950845] class=Point name=Unnamed dimension=2 values=[0.319118,0.682895] class=Point name=Unnamed dimension=2 values=[0.733332,0.414946] class=Point name=Unnamed dimension=2 values=[0.147545,0.146997] class=Point name=Unnamed dimension=2 values=[0.561759,0.879048] class=Point name=Unnamed dimension=2 values=[0.975972,0.611099] class=Point name=Unnamed dimension=2 values=[0.390186,0.343149] class=Point name=Unnamed dimension=2 values=[0.804399,0.0752002] class=Point name=Unnamed dimension=2 values=[0.218613,0.807251] class=Point name=Unnamed dimension=2 values=[0.632827,0.539302] class=Point name=Unnamed dimension=2 values=[0.0470401,0.271353] class=Point name=Unnamed dimension=2 values=[0.461254,0.00340346] class=Point name=Unnamed dimension=2 values=[0.875467,0.735454] class=Point name=Unnamed dimension=2 values=[0.289681,0.467505] class=Point name=Unnamed dimension=2 values=[0.703894,0.199556] class=Point name=Unnamed dimension=2 values=[0.118108,0.931607] class=Point name=Unnamed dimension=2 values=[0.532322,0.663657] class=Point name=Unnamed dimension=2 values=[0.946535,0.395708] class=Point name=Unnamed dimension=2 values=[0.360749,0.127759] class=Point name=Unnamed dimension=2 values=[0.774962,0.85981] class=Point name=Unnamed dimension=2 values=[0.189176,0.591861] class=Point name=Unnamed dimension=2 values=[0.603389,0.323912] class=Point name=Unnamed dimension=2 values=[0.0176029,0.0559623] class=Point name=Unnamed dimension=2 values=[0.431816,0.788013] class=Point name=Unnamed dimension=2 values=[0.84603,0.520064] class=Point name=Unnamed dimension=2 values=[0.260244,0.252115] class=Point name=Unnamed dimension=2 values=[0.674457,0.984166] class=Point name=Unnamed dimension=2 values=[0.0886707,0.716216] class=Point name=Unnamed dimension=2 values=[0.502884,0.448267] class=Point name=Unnamed dimension=2 values=[0.917098,0.180318] class=Point name=Unnamed dimension=2 values=[0.331311,0.912369] class=Point name=Unnamed dimension=2 values=[0.745525,0.64442] class=Point name=Unnamed dimension=2 values=[0.159739,0.37647] class=Point name=Unnamed dimension=2 values=[0.573952,0.108521] class=Point name=Unnamed dimension=2 values=[0.988166,0.840572] class=Point name=Unnamed dimension=2 values=[0.402379,0.572623] class=Point name=Unnamed dimension=2 values=[0.816593,0.304674] class=Point name=Unnamed dimension=2 values=[0.230806,0.0367245] class=Point name=Unnamed dimension=2 values=[0.64502,0.768775] class=Point name=Unnamed dimension=2 values=[0.0592334,0.500826] class=Point name=Unnamed dimension=2 values=[0.473447,0.232877] class=Point name=Unnamed dimension=2 values=[0.887661,0.964928] class=Point name=Unnamed dimension=2 values=[0.301874,0.696978] class=Point name=Unnamed dimension=2 values=[0.716088,0.429029] class=Point name=Unnamed dimension=2 values=[0.130301,0.16108] class=Point name=Unnamed dimension=2 values=[0.544515,0.893131] class=Point name=Unnamed dimension=2 values=[0.958728,0.625182] class=Point name=Unnamed dimension=2 values=[0.372942,0.357233] class=Point name=Unnamed dimension=2 values=[0.787156,0.0892833] class=Point name=Unnamed dimension=2 values=[0.201369,0.821334] class=Point name=Unnamed dimension=2 values=[0.615583,0.553385] class=Point name=Unnamed dimension=2 values=[0.0297962,0.285436] class=Point name=Unnamed dimension=2 values=[0.44401,0.0174866] class=Point name=Unnamed dimension=2 values=[0.858223,0.749537] class=Point name=Unnamed dimension=2 values=[0.272437,0.481588] class=Point name=Unnamed dimension=2 values=[0.68665,0.213639] class=Point name=Unnamed dimension=2 values=[0.100864,0.94569] class=Point name=Unnamed dimension=2 values=[0.515078,0.677741] class=Point name=Unnamed dimension=2 values=[0.929291,0.409791] class=Point name=Unnamed dimension=2 values=[0.343505,0.141842] class=Point name=Unnamed dimension=2 values=[0.757718,0.873893] class=Point name=Unnamed dimension=2 values=[0.171932,0.605944] class=Point name=Unnamed dimension=2 values=[0.586145,0.337995] class=Point name=Unnamed dimension=2 values=[0.000358937,0.0700455] class=Point name=Unnamed dimension=2 values=[0.414572,0.802096] class=Point name=Unnamed dimension=2 values=[0.828786,0.534147] class=Point name=Unnamed dimension=2 values=[0.243,0.266198] class=Point name=Unnamed dimension=2 values=[0.657213,0.998249] class=Point name=Unnamed dimension=2 values=[0.0714267,0.730299] class=Point name=Unnamed dimension=2 values=[0.48564,0.46235] class=Point name=Unnamed dimension=2 values=[0.899854,0.194401] class=Point name=Unnamed dimension=2 values=[0.314067,0.926452] class=Point name=Unnamed dimension=2 values=[0.728281,0.658503] class=Point name=Unnamed dimension=2 values=[0.142495,0.390554] class=Point name=Unnamed dimension=2 values=[0.556708,0.122604] class=Point name=Unnamed dimension=2 values=[0.970922,0.854655] class=Point name=Unnamed dimension=2 values=[0.385135,0.586706] class=Point name=Unnamed dimension=2 values=[0.799349,0.318757] class=Point name=Unnamed dimension=2 values=[0.213562,0.0508076] sample size= 1000 relative error to Pi=9.419634e-03 openturns-1.9/python/test/t_HaselgroveSequence_std.py000077500000000000000000000021421307543307100232640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a Haselgrove sequence = HaselgroveSequence(15) print(repr(sequence)) # Create a numerical sample of the sequence haselgroveSample = sequence.generate(10) print(repr(haselgroveSample)) # Create another Haselgrove' sequence of dimension 2 to estimate Pi in [0 # 1)^2 dimension = 2 sequence = HaselgroveSequence(dimension) pointInsideCircle = 0 sampleSize = 1000 for i in range(sampleSize): haselgrovePoint = sequence.generate() print(haselgrovePoint.__repr__()) if haselgrovePoint.norm() < 1.0: pointInsideCircle = pointInsideCircle + 1 probabilityEstimate = (1.0 * pointInsideCircle) / sampleSize probability = pi / 4.0 relativeError = fabs(probability - probabilityEstimate) / probability print('sample size=', sampleSize) print('relative error to Pi=%e' % relativeError) except: import sys print("t_HaselgroveSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HermiteFactory_std.expout000066400000000000000000000023771307543307100233240ustar00rootroot00000000000000hermite= class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] hermite( 0 )= 1 hermite( 1 )= X hermite( 2 )= -0.707107 + 0.707107 * X^2 hermite( 3 )= -1.22474 * X + 0.408248 * X^3 hermite( 4 )= 0.612372 - 1.22474 * X^2 + 0.204124 * X^4 hermite( 5 )= 1.36931 * X - 0.912871 * X^3 + 0.0912871 * X^5 hermite( 6 )= -0.559017 + 1.67705 * X^2 - 0.559017 * X^4 + 0.0372678 * X^6 hermite( 7 )= -1.47902 * X + 1.47902 * X^3 - 0.295804 * X^5 + 0.0140859 * X^7 hermite( 8 )= 0.522913 - 2.09165 * X^2 + 1.04583 * X^4 - 0.139443 * X^6 + 0.00498012 * X^8 hermite( 9 )= 1.56874 * X - 2.09165 * X^3 + 0.627495 * X^5 - 0.0597614 * X^7 + 0.00166004 * X^9 hermite(10) roots= class=Point name=Unnamed dimension=10 values=[-4.85946,-3.58182,-2.48433,-1.46599,-0.484936,0.484936,1.46599,2.48433,3.58182,4.85946] hermite(10) nodes= [-4.85946,-3.58182,-2.48433,-1.46599,-0.484936,0.484936,1.46599,2.48433,3.58182,4.85946]#10 and weights= [4.31065e-06,0.000758071,0.0191116,0.135484,0.344642,0.344642,0.135484,0.0191116,0.000758071,4.31065e-06]#10 openturns-1.9/python/test/t_HermiteFactory_std.py000077500000000000000000000010331307543307100224170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: hermite = HermiteFactory() print("hermite=", hermite) for i in range(10): print("hermite(", i, ")=", hermite.build(i)) roots = hermite.getRoots(10) print("hermite(10) roots=", repr(roots)) nodes, weights = hermite.getNodesAndWeights(10) print("hermite(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_HermiteFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HermitianMatrix_std.expout000066400000000000000000000050361307543307100234770ustar00rootroot00000000000000test : default constructor and string converter hermitianMatrix0 = class=HermitianMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test : constructor with size, operator() and string converter hermitianMatrix1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test : copy constructor and string converter hermitianMatrix2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test : get dimensions methods hermitianMatrix1's nbRows = 2 hermitianMatrix1's nbColumns = 2 test : conjugate method hermitianMatrix1 conjugate = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(3,-1),(0,0),(4,-0)] test : addition method sum1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(6,0),(0,0),(8,0)] sum2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(6,0),(0,0),(8,0)] sum1 equals sum2 = True test : substraction method diff = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(0,2),(0,0),(0,0)] test : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(9,-6),(15,-3),(15,-3),(24,6)] test : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(7,-2),(11,1)] test : multiplication and division by a numerical scalar methods scalprod = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(7,9),(0,0),(12,8)] scaldiv1 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv2 = class=HermitianMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv1 equals scaldiv2 = True test : isEmpty method hermitianMatrix0 is empty = True hermitianMatrix1 is empty = False hermitianMatrix5 is empty = True openturns-1.9/python/test/t_HermitianMatrix_std.py000077500000000000000000000071131307543307100226040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test : default constructor and string converter") # Default constructor hermitianMatrix0 = HermitianMatrix() # String converter print("hermitianMatrix0 = ", repr(hermitianMatrix0)) # CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print("test : constructor with size, operator() and string converter") # Constructor with size hermitianMatrix1 = HermitianMatrix(2) # Check operator() methods hermitianMatrix1[0, 0] = 1.0 hermitianMatrix1[1, 0] = 3.0 + 1.0j hermitianMatrix1[1, 1] = 4.0 # String converter print("hermitianMatrix1 = ", repr(hermitianMatrix1)) # COPY CONSTRUCTOR AND STRING CONVERTER print("test : copy constructor and string converter") # Copy constructor hermitianMatrix2 = HermitianMatrix(hermitianMatrix1) # String converter print("hermitianMatrix2 = ", repr(hermitianMatrix2)) # GET DIMENSIONS METHODS print("test : get dimensions methods") # Get dimension methods print("hermitianMatrix1's nbRows = ", hermitianMatrix1.getNbRows()) print("hermitianMatrix1's nbColumns = ", hermitianMatrix1.getNbColumns()) # CONJUGATE METHOD print("test : conjugate method") # Check conjugate method hermitianMatrix4 = hermitianMatrix1.conjugate() print("hermitianMatrix1 conjugate = ", repr(hermitianMatrix4)) # ADDITION METHOD print("test : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = hermitianMatrix1 + hermitianMatrix4 sum2 = hermitianMatrix4 + hermitianMatrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # SUBSTRACTION METHOD print("test : substraction method") # Check substraction method diff = hermitianMatrix1 - hermitianMatrix4 print("diff = ", repr(diff)) # MATRIX MULTIPLICATION METHOD print("test : matrix multiplication method") # Check multiplication method prod = hermitianMatrix1 * hermitianMatrix4 print("prod = ", repr(prod)) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = hermitianMatrix1 * pt print("ptResult = ", repr(ptResult)) # MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS print("test : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. + 2j scalprod = hermitianMatrix1 * s print("scalprod = ", repr(scalprod)) # Check the division method scaldiv1 = hermitianMatrix1 / s scaldiv2 = hermitianMatrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # ISEMPTY METHOD print("test : isEmpty method") # Check method isEmpty hermitianMatrix5 = HermitianMatrix() hermitianMatrix6 = HermitianMatrix() print("hermitianMatrix0 is empty = ", hermitianMatrix0.isEmpty()) print("hermitianMatrix1 is empty = ", hermitianMatrix1.isEmpty()) print("hermitianMatrix5 is empty = ", hermitianMatrix5.isEmpty()) except: import sys print("t_HermitianMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HistogramFactory_std.expout000066400000000000000000000112651307543307100236600ustar00rootroot00000000000000distribution= class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Estimated distribution= class=Histogram name=Histogram dimension=1 first=-1.49739 width=class=Point name=Unnamed dimension=28 values=[0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609,0.135609] height=class=Point name=Unnamed dimension=28 values=[0.0663672,0.0479318,0.0671046,0.0663672,0.0612053,0.0722665,0.0693168,0.143058,0.204263,0.180666,0.174029,0.182141,0.320775,0.418851,0.429912,0.418113,0.414426,0.460883,0.430649,0.432124,0.413689,0.390829,0.285379,0.313401,0.331098,0.314875,0.337735,0.326674] Default distribution= Histogram(origin = 0, {w0 = 1, h0 = 1}) Histogram = Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125}) Estimated histogram= Histogram(origin = -1.49739, {w0 = 0.135609, h0 = 0.0663672}, {w1 = 0.135609, h1 = 0.0479318}, {w2 = 0.135609, h2 = 0.0671046}, {w3 = 0.135609, h3 = 0.0663672}, {w4 = 0.135609, h4 = 0.0612053}, {w5 = 0.135609, h5 = 0.0722665}, {w6 = 0.135609, h6 = 0.0693168}, {w7 = 0.135609, h7 = 0.143058}, {w8 = 0.135609, h8 = 0.204263}, {w9 = 0.135609, h9 = 0.180666}, {w10 = 0.135609, h10 = 0.174029}, {w11 = 0.135609, h11 = 0.182141}, {w12 = 0.135609, h12 = 0.320775}, {w13 = 0.135609, h13 = 0.418851}, {w14 = 0.135609, h14 = 0.429912}, {w15 = 0.135609, h15 = 0.418113}, {w16 = 0.135609, h16 = 0.414426}, {w17 = 0.135609, h17 = 0.460883}, {w18 = 0.135609, h18 = 0.430649}, {w19 = 0.135609, h19 = 0.432124}, {w20 = 0.135609, h20 = 0.413689}, {w21 = 0.135609, h21 = 0.390829}, {w22 = 0.135609, h22 = 0.285379}, {w23 = 0.135609, h23 = 0.313401}, {w24 = 0.135609, h24 = 0.331098}, {w25 = 0.135609, h25 = 0.314875}, {w26 = 0.135609, h26 = 0.337735}, {w27 = 0.135609, h27 = 0.326674}) Histogram = Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125}) Estimated histogram= Histogram(origin = -1.49739, {w0 = 0.0973605, h0 = 0.0667622}, {w1 = 0.0973605, h1 = 0.0544369}, {w2 = 0.0973605, h2 = 0.0472471}, {w3 = 0.0973605, h3 = 0.0677893}, {w4 = 0.0973605, h4 = 0.073952}, {w5 = 0.0973605, h5 = 0.0585453}, {w6 = 0.0973605, h6 = 0.0626538}, {w7 = 0.0973605, h7 = 0.0657351}, {w8 = 0.0973605, h8 = 0.073952}, {w9 = 0.0973605, h9 = 0.0729249}, {w10 = 0.0973605, h10 = 0.15304}, {w11 = 0.0973605, h11 = 0.191043}, {w12 = 0.0973605, h12 = 0.19926}, {w13 = 0.0973605, h13 = 0.190016}, {w14 = 0.0973605, h14 = 0.174609}, {w15 = 0.0973605, h15 = 0.166392}, {w16 = 0.0973605, h16 = 0.200287}, {w17 = 0.0973605, h17 = 0.347164}, {w18 = 0.0973605, h18 = 0.426251}, {w19 = 0.0973605, h19 = 0.419061}, {w20 = 0.0973605, h20 = 0.431387}, {w21 = 0.0973605, h21 = 0.404682}, {w22 = 0.0973605, h22 = 0.404682}, {w23 = 0.0973605, h23 = 0.446793}, {w24 = 0.0973605, h24 = 0.457064}, {w25 = 0.0973605, h25 = 0.441658}, {w26 = 0.0973605, h26 = 0.422143}, {w27 = 0.0973605, h27 = 0.437549}, {w28 = 0.0973605, h28 = 0.419061}, {w29 = 0.0973605, h29 = 0.418034}, {w30 = 0.0973605, h30 = 0.320459}, {w31 = 0.0973605, h31 = 0.283483}, {w32 = 0.0973605, h32 = 0.301971}, {w33 = 0.0973605, h33 = 0.322513}, {w34 = 0.0973605, h34 = 0.334838}, {w35 = 0.0973605, h35 = 0.31635}, {w36 = 0.0973605, h36 = 0.321486}, {w37 = 0.0973605, h37 = 0.351272}, {w38 = 0.0973605, h38 = 0.324567}) Histogram = Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125}) Estimated histogram= Histogram(origin = -1.49739, {w0 = 0.253137, h0 = 0.0588614}, {w1 = 0.253137, h1 = 0.0659721}, {w2 = 0.253137, h2 = 0.0620217}, {w3 = 0.253137, h3 = 0.0797986}, {w4 = 0.253137, h4 = 0.190016}, {w5 = 0.253137, h5 = 0.178164}, {w6 = 0.253137, h6 = 0.270604}, {w7 = 0.253137, h7 = 0.41677}, {w8 = 0.253137, h8 = 0.422696}, {w9 = 0.253137, h9 = 0.446398}, {w10 = 0.253137, h10 = 0.430597}, {w11 = 0.253137, h11 = 0.364624}, {w12 = 0.253137, h12 = 0.301418}, {w13 = 0.253137, h13 = 0.328676}, {w14 = 0.253137, h14 = 0.333811}) Default histogram= Histogram(origin = 0, {w0 = 1, h0 = 1}) Estimated distribution= class=Histogram name=Histogram dimension=1 first=-5e-13 width=class=Point name=Unnamed dimension=1 values=[1e-12] height=class=Point name=Unnamed dimension=1 values=[1e+12] Estimated distribution= class=Histogram name=Histogram dimension=1 first=1 width=class=Point name=Unnamed dimension=1 values=[1e-12] height=class=Point name=Unnamed dimension=1 values=[1e+12] openturns-1.9/python/test/t_HistogramFactory_std.py000077500000000000000000000030451307543307100227640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: l = [1.0, 0.7, 1.2, 0.9] h = [0.5, 1.5, 3.5, 2.5] distribution = Histogram(-1.5, l, h) size = 10000 sample = distribution.getSample(size) factory = HistogramFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedHistogram = factory.buildAsHistogram(sample) print("Histogram =", distribution) print("Estimated histogram=", estimatedHistogram) estimatedHistogram = factory.buildAsHistogram(sample, 0.1) print("Histogram =", distribution) print("Estimated histogram=", estimatedHistogram) estimatedHistogram = factory.buildAsHistogram(sample, 15) print("Histogram =", distribution) print("Estimated histogram=", estimatedHistogram) estimatedHistogram = factory.buildAsHistogram() print("Default histogram=", estimatedHistogram) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_HistogramFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HistogramPolynomialFactory_std.expout000066400000000000000000000034111307543307100257160ustar00rootroot00000000000000histogramPolynomial= class=HistogramPolynomialFactory measure=class=Histogram name=Histogram dimension=1 first=-2 width=class=Point name=Unnamed dimension=3 values=[1,2,1.5] height=class=Point name=Unnamed dimension=3 values=[0.115942,0.289855,0.202899] legendre=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 histogramPolynomial( 0 )= 1 histogramPolynomial( 1 )= -0.311705 + 0.868995 * X histogramPolynomial( 2 )= -0.856068 - 0.53005 * X + 0.720074 * X^2 histogramPolynomial( 3 )= 0.439081 - 1.56306 * X - 0.552709 * X^2 + 0.618088 * X^3 histogramPolynomial( 4 )= 0.811777 + 1.24547 * X - 2.05101 * X^2 - 0.613588 * X^3 + 0.554811 * X^4 histogramPolynomial( 5 )= -0.67725 + 1.90316 * X + 2.26804 * X^2 - 2.25731 * X^3 - 0.711591 * X^4 + 0.494122 * X^5 histogramPolynomial( 6 )= -0.672065 - 2.17033 * X + 3.26047 * X^2 + 3.00751 * X^3 - 2.389 * X^4 - 0.714632 * X^5 + 0.432514 * X^6 histogramPolynomial( 7 )= 0.816364 - 2.08595 * X - 4.85092 * X^2 + 4.56489 * X^3 + 3.8474 * X^4 - 2.46825 * X^5 - 0.716834 * X^6 + 0.38213 * X^7 histogramPolynomial( 8 )= 0.471292 + 3.50174 * X - 3.93381 * X^2 - 8.64894 * X^3 + 5.54451 * X^4 + 4.85041 * X^5 - 2.47959 * X^6 - 0.747288 * X^7 + 0.344731 * X^8 histogramPolynomial( 9 )= -0.893763 + 1.712 * X + 8.62475 * X^2 - 6.09001 * X^3 - 12.507 * X^4 + 6.25895 * X^5 + 5.47892 * X^6 - 2.39409 * X^7 - 0.728754 * X^8 + 0.302869 * X^9 histogramPolynomial(10) roots= class=Point name=Unnamed dimension=10 values=[-1.93832,-1.67917,-1.21469,-0.674631,-0.0599205,0.588202,1.20713,1.7752,2.19553,2.44117] histogramPolynomial(10) nodes= [-1.93832,-1.67917,-1.21469,-0.674631,-0.0599205,0.588202,1.20713,1.7752,2.19553,2.44117]#10 and weights= [0.0182915,0.0415858,0.070671,0.165385,0.186558,0.185533,0.131996,0.100983,0.0684909,0.0305057]#10 openturns-1.9/python/test/t_HistogramPolynomialFactory_std.py000077500000000000000000000013301307543307100250230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: histogramPolynomial = HistogramPolynomialFactory( -2.0, [1.0, 2.0, 1.5], [2.0, 5.0, 3.5]) print("histogramPolynomial=", histogramPolynomial) for i in range(10): print("histogramPolynomial(", i, ")=", histogramPolynomial.build(i)) roots = histogramPolynomial.getRoots(10) print("histogramPolynomial(10) roots=", repr(roots)) nodes, weights = histogramPolynomial.getNodesAndWeights(10) print("histogramPolynomial(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_HistogramPolynomialFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Histogram_std.expout000066400000000000000000000051631307543307100223300ustar00rootroot00000000000000begin histo comp test Distribution class=Histogram name=Histogram dimension=1 first=-1.5 width=class=Point name=Unnamed dimension=4 values=[1,0.7,1.2,0.9] height=class=Point name=Unnamed dimension=4 values=[0.0625,0.1875,0.4375,0.3125] Distribution Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125}) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.19686] oneSample first= class=Point name=Unnamed dimension=1 values=[1.92498] last= class=Point name=Unnamed dimension=1 values=[-0.111859] mean= class=Point name=Unnamed dimension=1 values=[0.866401] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.732365] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[0] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0] log pdf=-0.826679 pdf =0.437500 pdf (FD)=0.437500 cdf=0.543750 ccdf=0.456250 quantile= class=Point name=Unnamed dimension=1 values=[2.14] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.7] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.7, 2.3] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.77259} with f= MinimumVolumeLevelSetEvaluation(Histogram(origin = -1.5, {w0 = 1, h0 = 0.0625}, {w1 = 0.7, h1 = 0.1875}, {w2 = 1.2, h2 = 0.4375}, {w3 = 0.9, h3 = 0.3125})) beta= [0.0625] Bilateral confidence interval= [-1.1, 2.22] beta= [0.95] Unilateral confidence interval (lower tail)= [-1.5, 2.14] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.7, 2.3] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.858125] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.720205] parameters= [class=PointWithDescription name=X0 dimension=9 description=[first,width_0,height_0,width_1,height_1,width_2,height_2,width_3,height_3] values=[-1.5,1,0.0625,0.7,0.1875,1.2,0.4375,0.9,0.3125]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.241118] standard moment n= 2 value= [0.257641] standard moment n= 3 value= [0.120302] standard moment n= 4 value= [0.145552] standard moment n= 5 value= [0.0795608] Standard representative= Histogram(origin = -1, {w0 = 0.526316, h0 = 0.11875}, {w1 = 0.368421, h1 = 0.35625}, {w2 = 0.631579, h2 = 0.83125}, {w3 = 0.473684, h3 = 0.59375}) openturns-1.9/python/test/t_Histogram_std.py000077500000000000000000000114011307543307100214270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object print("begin histo comp test") l = [1.0, 0.7, 1.2, 0.9] h = [0.5, 1.5, 3.5, 2.5] distribution = Histogram(-1.5, l, h) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF at point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) testSize = 0 for i in range(testSize): q = RandomGenerator().Generate() if (fabs(q - distribution.computeCDF(distribution.computeQuantile(q))) > eps): print("q=%.6f" % q, " quantile=%.6f" % distribution.computeQuantile(q)[ 0], " CDF(quantile)=%.6f" % distribution.computeCDF(distribution.computeQuantile(q))) except: import sys print("t_Histogram.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HistoryStrategy_std.expout000066400000000000000000000025041307543307100235530ustar00rootroot00000000000000sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Null strategy sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] Full strategy sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Last strategy sample (large storage)= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Last strategy sample (small storage)= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[7,7.5],[8,8.5],[9,9.5]] Compact strategy sample (large storage)= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0,0.5],[1,1.5],[2,2.5],[3,3.5],[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5]] Compact strategy sample (small storage)= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 data=[[1,1.5],[3,3.5],[5,5.5],[7,7.5],[9,9.5]] openturns-1.9/python/test/t_HistoryStrategy_std.py000077500000000000000000000035501307543307100226640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: size = 10 dimension = 2 sample = Sample(size, dimension) # Fill-in the sample for i in range(size): p = Point(dimension) for j in range(dimension): p[j] = i + j * 1.0 / dimension sample[i] = p print("sample=", repr(sample)) # History using the Null strategy nullStrategy = Null() for i in range(size): nullStrategy.store(sample[i]) print("Null strategy sample=", repr(nullStrategy.getSample())) # History using the Full strategy fullStrategy = Full() for i in range(size): fullStrategy.store(sample[i]) print("Full strategy sample=", repr(fullStrategy.getSample())) # History using the Last strategy, large storage lastStrategy = Last(3 * size) for i in range(size): lastStrategy.store(sample[i]) print("Last strategy sample (large storage)=", repr(lastStrategy.getSample())) lastStrategy = Last(size // 3) # History using the Last strategy, small storage for i in range(size): lastStrategy.store(sample[i]) print("Last strategy sample (small storage)=", repr(lastStrategy.getSample())) # History using the Compact strategy, large storage compactStrategy = Compact(3 * size) for i in range(size): compactStrategy.store(sample[i]) print("Compact strategy sample (large storage)=", repr(compactStrategy.getSample())) compactStrategy = Compact(size // 3) # History using the Compact strategy, small storage for i in range(size): compactStrategy.store(sample[i]) print("Compact strategy sample (small storage)=", repr(compactStrategy.getSample())) except: import sys print("t_HistoryStrategy_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_HyperbolicAnisotropicEnumerateFunction_std.expout000066400000000000000000000132731307543307100302630ustar00rootroot00000000000000Default q : 0.4 First 10 values for dimension 1 index= 0 [0] index= 1 [1] index= 2 [2] index= 3 [3] index= 4 [4] index= 5 [5] index= 6 [6] index= 7 [7] index= 8 [8] index= 9 [9] And first 5 strata cardinals : [1, 1, 1, 1, 1] First 10 values for dimension 2 index= 0 [0,0] index= 1 [1,0] index= 2 [0,1] index= 3 [2,0] index= 4 [1,1] index= 5 [0,2] index= 6 [3,0] index= 7 [2,1] index= 8 [1,2] index= 9 [0,3] And first 5 strata cardinals : [1, 2, 3, 4, 5] First 10 values for dimension 3 index= 0 [0,0,0] index= 1 [1,0,0] index= 2 [0,1,0] index= 3 [0,0,1] index= 4 [2,0,0] index= 5 [1,1,0] index= 6 [1,0,1] index= 7 [0,2,0] index= 8 [0,1,1] index= 9 [0,0,2] And first 5 strata cardinals : [1, 3, 6, 10, 15] First 25 values dimension= 2 q= 0.75 index= 0 [0,0] index= 1 [1,0] index= 2 [0,1] index= 3 [2,0] index= 4 [0,2] index= 5 [1,1] index= 6 [3,0] index= 7 [0,3] index= 8 [2,1] index= 9 [1,2] index= 10 [4,0] index= 11 [0,4] index= 12 [3,1] index= 13 [1,3] index= 14 [5,0] index= 15 [0,5] index= 16 [2,2] index= 17 [4,1] index= 18 [1,4] index= 19 [6,0] index= 20 [0,6] index= 21 [3,2] index= 22 [2,3] index= 23 [7,0] index= 24 [0,7] And first 5 strata cardinals : [1, 2, 2, 1, 2] Cardinals per degree= [1, 3, 6, 10, 14] First 25 values dimension= 2 q= 0.5 index= 0 [0,0] index= 1 [1,0] index= 2 [0,1] index= 3 [2,0] index= 4 [0,2] index= 5 [3,0] index= 6 [0,3] index= 7 [1,1] index= 8 [4,0] index= 9 [0,4] index= 10 [5,0] index= 11 [0,5] index= 12 [2,1] index= 13 [1,2] index= 14 [6,0] index= 15 [0,6] index= 16 [7,0] index= 17 [0,7] index= 18 [3,1] index= 19 [1,3] index= 20 [2,2] index= 21 [8,0] index= 22 [0,8] index= 23 [4,1] index= 24 [1,4] And first 5 strata cardinals : [1, 2, 2, 2, 3] Cardinals per degree= [1, 3, 5, 7, 10] First 25 values dimension= 2 q= 0.25 index= 0 [0,0] index= 1 [1,0] index= 2 [0,1] index= 3 [2,0] index= 4 [0,2] index= 5 [3,0] index= 6 [0,3] index= 7 [4,0] index= 8 [0,4] index= 9 [5,0] index= 10 [0,5] index= 11 [6,0] index= 12 [0,6] index= 13 [7,0] index= 14 [0,7] index= 15 [8,0] index= 16 [0,8] index= 17 [9,0] index= 18 [0,9] index= 19 [10,0] index= 20 [0,10] index= 21 [11,0] index= 22 [0,11] index= 23 [12,0] index= 24 [0,12] And first 5 strata cardinals : [1, 2, 2, 2, 2] Cardinals per degree= [1, 3, 5, 7, 9] First 25 values dimension= 3 q= 0.75 index= 0 [0,0,0] index= 1 [1,0,0] index= 2 [0,1,0] index= 3 [0,0,1] index= 4 [2,0,0] index= 5 [0,2,0] index= 6 [0,0,2] index= 7 [1,1,0] index= 8 [1,0,1] index= 9 [0,1,1] index= 10 [3,0,0] index= 11 [0,3,0] index= 12 [0,0,3] index= 13 [2,1,0] index= 14 [2,0,1] index= 15 [1,2,0] index= 16 [0,2,1] index= 17 [1,0,2] index= 18 [0,1,2] index= 19 [4,0,0] index= 20 [0,4,0] index= 21 [0,0,4] index= 22 [1,1,1] index= 23 [3,1,0] index= 24 [3,0,1] And first 5 strata cardinals : [1, 3, 3, 3, 3] Cardinals per degree= [1, 4, 10, 19, 29] First 25 values dimension= 3 q= 0.5 index= 0 [0,0,0] index= 1 [1,0,0] index= 2 [0,1,0] index= 3 [0,0,1] index= 4 [2,0,0] index= 5 [0,2,0] index= 6 [0,0,2] index= 7 [3,0,0] index= 8 [0,3,0] index= 9 [0,0,3] index= 10 [1,1,0] index= 11 [1,0,1] index= 12 [0,1,1] index= 13 [4,0,0] index= 14 [0,4,0] index= 15 [0,0,4] index= 16 [5,0,0] index= 17 [0,5,0] index= 18 [0,0,5] index= 19 [2,1,0] index= 20 [2,0,1] index= 21 [1,2,0] index= 22 [0,2,1] index= 23 [1,0,2] index= 24 [0,1,2] And first 5 strata cardinals : [1, 3, 3, 3, 6] Cardinals per degree= [1, 4, 7, 10, 16] First 25 values dimension= 3 q= 0.25 index= 0 [0,0,0] index= 1 [1,0,0] index= 2 [0,1,0] index= 3 [0,0,1] index= 4 [2,0,0] index= 5 [0,2,0] index= 6 [0,0,2] index= 7 [3,0,0] index= 8 [0,3,0] index= 9 [0,0,3] index= 10 [4,0,0] index= 11 [0,4,0] index= 12 [0,0,4] index= 13 [5,0,0] index= 14 [0,5,0] index= 15 [0,0,5] index= 16 [6,0,0] index= 17 [0,6,0] index= 18 [0,0,6] index= 19 [7,0,0] index= 20 [0,7,0] index= 21 [0,0,7] index= 22 [8,0,0] index= 23 [0,8,0] index= 24 [0,0,8] And first 5 strata cardinals : [1, 3, 3, 3, 3] Cardinals per degree= [1, 4, 7, 10, 13] First 25 values dimension= 4 q= 0.75 index= 0 [0,0,0,0] index= 1 [1,0,0,0] index= 2 [0,1,0,0] index= 3 [0,0,1,0] index= 4 [0,0,0,1] index= 5 [2,0,0,0] index= 6 [0,2,0,0] index= 7 [0,0,2,0] index= 8 [0,0,0,2] index= 9 [1,1,0,0] index= 10 [1,0,1,0] index= 11 [1,0,0,1] index= 12 [0,1,1,0] index= 13 [0,1,0,1] index= 14 [0,0,1,1] index= 15 [3,0,0,0] index= 16 [0,3,0,0] index= 17 [0,0,3,0] index= 18 [0,0,0,3] index= 19 [2,1,0,0] index= 20 [2,0,1,0] index= 21 [2,0,0,1] index= 22 [1,2,0,0] index= 23 [0,2,1,0] index= 24 [0,2,0,1] And first 5 strata cardinals : [1, 4, 4, 6, 4] Cardinals per degree= [1, 5, 15, 31, 51] First 25 values dimension= 4 q= 0.5 index= 0 [0,0,0,0] index= 1 [1,0,0,0] index= 2 [0,1,0,0] index= 3 [0,0,1,0] index= 4 [0,0,0,1] index= 5 [2,0,0,0] index= 6 [0,2,0,0] index= 7 [0,0,2,0] index= 8 [0,0,0,2] index= 9 [3,0,0,0] index= 10 [0,3,0,0] index= 11 [0,0,3,0] index= 12 [0,0,0,3] index= 13 [1,1,0,0] index= 14 [1,0,1,0] index= 15 [1,0,0,1] index= 16 [0,1,1,0] index= 17 [0,1,0,1] index= 18 [0,0,1,1] index= 19 [4,0,0,0] index= 20 [0,4,0,0] index= 21 [0,0,4,0] index= 22 [0,0,0,4] index= 23 [5,0,0,0] index= 24 [0,5,0,0] And first 5 strata cardinals : [1, 4, 4, 4, 10] Cardinals per degree= [1, 5, 9, 13, 23] First 25 values dimension= 4 q= 0.25 index= 0 [0,0,0,0] index= 1 [1,0,0,0] index= 2 [0,1,0,0] index= 3 [0,0,1,0] index= 4 [0,0,0,1] index= 5 [2,0,0,0] index= 6 [0,2,0,0] index= 7 [0,0,2,0] index= 8 [0,0,0,2] index= 9 [3,0,0,0] index= 10 [0,3,0,0] index= 11 [0,0,3,0] index= 12 [0,0,0,3] index= 13 [4,0,0,0] index= 14 [0,4,0,0] index= 15 [0,0,4,0] index= 16 [0,0,0,4] index= 17 [5,0,0,0] index= 18 [0,5,0,0] index= 19 [0,0,5,0] index= 20 [0,0,0,5] index= 21 [6,0,0,0] index= 22 [0,6,0,0] index= 23 [0,0,6,0] index= 24 [0,0,0,6] And first 5 strata cardinals : [1, 4, 4, 4, 4] Cardinals per degree= [1, 5, 9, 13, 17] openturns-1.9/python/test/t_HyperbolicAnisotropicEnumerateFunction_std.py000077500000000000000000000033511307543307100273660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() print('Default q :', ResourceMap.GetAsScalar( 'HyperbolicAnisotropicEnumerateFunction-DefaultQ'), '\n') # check weight constructor f = HyperbolicAnisotropicEnumerateFunction((1., 2., 3., 4., 5.), 0.75) # verify consistency with LinearEnumerateFunction size = 10 stratas = 5 for dimension in range(1, 4): f = HyperbolicAnisotropicEnumerateFunction(dimension, 1.0) g = LinearEnumerateFunction(dimension) print("First", size, "values for dimension", dimension) for index in range(size): if (not f(index) == g(index)): raise Exception('spam', f(index), g(index)) print("index=", index, repr(f(index))) strataCardinal = [] for index in range(stratas): strataCardinal.append(int(f.getStrataCardinal(index))) print('And first', stratas, 'strata cardinals :', strataCardinal, '\n') # now let q vary size = 25 qValues = [] qValues.append(0.75) qValues.append(0.5) qValues.append(0.25) for dimension in range(2, 5): for j in range(len(qValues)): q = qValues[j] print('First', size, 'values dimension=', dimension, ' q=', q) f = HyperbolicAnisotropicEnumerateFunction(dimension, q) for index in range(size): print("index=", index, repr(f(index))) strataCardinal = [] for index in range(stratas): strataCardinal.append(int(f.getStrataCardinal(index))) print('And first', stratas, 'strata cardinals :', strataCardinal) cardinalsPerDegree = [] for deg in range(5): cardinalsPerDegree.append(int(f.getMaximumDegreeCardinal(deg))) print('Cardinals per degree=', cardinalsPerDegree, '\n') openturns-1.9/python/test/t_HypothesisTest_correlation.expout000066400000000000000000000136361307543307100251250ustar00rootroot00000000000000selection = [0,1,2,3,4] PartialPearsonXY= [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00343681 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.54134e-05 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000370666 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00133147 description=[]] PartialPearsonX0Y= [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] PearsonX0Y= class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[] FullPearsonX0Y= [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] FullPearsonXY= [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00343681 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.54134e-05 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000370666 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00133147 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=6.71397e-06 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.0456e-08 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=5.58992e-09 description=[],class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=1.47753e-11 description=[]] FullPearsonYY= [class=TestResult name=Unnamed type=Pearson binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] PartialSpearmanX0Y= [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[]] SpearmanX0Y= class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[] FullSpearmanX0Y= [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[]] PartialSpearmanXY= [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0889046 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00627948 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=7.32128e-07 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.000464745 description=[],class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0013131 description=[]] FullSpearmanYZ= [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] FullSpearmanYY= [class=TestResult name=Unnamed type=Spearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] PartialRegressionX0Y= [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] FullRegressionX0Y= [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0952637 description=[]] PartialRegressionXY= [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.756546 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.634249 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.0117222 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.138249 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.422638 description=[]] FullRegressionXZ= [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=1.79797e-08 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=5.62147e-07 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=8.59142e-06 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=1.82078e-06 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=1.33973e-07 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0.00271266 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.690999 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=true p-value threshold=0.1 p-value=0.258069 description=[],class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=8.07055e-15 description=[]] FullRegressionZZ= [class=TestResult name=Unnamed type=Regression binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[]] openturns-1.9/python/test/t_HypothesisTest_correlation.py000077500000000000000000000123501307543307100242240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * dim = 10 R = CorrelationMatrix(dim) for i in range(dim): for j in range(i): R[i, j] = (i + j + 1.0) / (2.0 * dim) mean = Point(dim, 2.0) sigma = Point(dim, 3.0) distribution = Normal(mean, sigma, R) size = 100 sample = distribution.getSample(size) sampleX = Sample(size, dim - 1) sampleY = Sample(size, 1) for i in range(size): sampleY[i, 0] = sample[i, 0] for j in range(1, dim): sampleX[i, j - 1] = sample[i, j] sampleZ = Sample(size, 1) for i in range(size): sampleZ[i, 0] = sampleY[i, 0] * sampleY[i, 0] selection = Indices(5) selection.fill() print('selection = ', selection) # PartialPearson : Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample, for i in the selection. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. # Probability of the H0 reject zone : 1-0.90 print('PartialPearsonXY=', HypothesisTest.PartialPearson( sampleX, sampleY, selection, 0.90)) selection2 = Indices(1, 0) sampleX0 = Sample(size, 1) for i in range(size): sampleX0[i, 0] = sampleX[i, 0] # The three tests must be equal print('PartialPearsonX0Y=', HypothesisTest.PartialPearson( sampleX, sampleY, selection2, 0.90)) print('PearsonX0Y=', HypothesisTest.Pearson(sampleX0, sampleY, 0.90)) print('FullPearsonX0Y=', HypothesisTest.FullPearson( sampleX0, sampleY, 0.90)) # FullPearson : Independence Pearson test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullPearson performs the Independence Pearson test simultaneously on firstSample[i] and secondSample. For all i, it is supposed that the couple (firstSample[i] and secondSample) is issued from a gaussian vector. # Probability of the H0 reject zone : 1-0.90 print('FullPearsonXY=', HypothesisTest.FullPearson( sampleX, sampleY, 0.90)) print('FullPearsonYY=', HypothesisTest.FullPearson( sampleY, sampleY, 0.90)) # PartialSpearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), PartialSpearman performs the Independence Spearman test simultaneously on firstSample[i] and secondSample, for i in the selection. # Probability of the H0 reject zone : 1-0.90 # The three tests must be equal print('PartialSpearmanX0Y=', HypothesisTest.PartialSpearman( sampleX, sampleY, selection2, 0.90)) print('SpearmanX0Y=', HypothesisTest.Spearman(sampleX0, sampleY, 0.90)) print('FullSpearmanX0Y=', HypothesisTest.FullSpearman( sampleX0, sampleY, 0.90)) print('PartialSpearmanXY=', HypothesisTest.PartialSpearman( sampleX, sampleY, selection, 0.90)) # FullSpearman : Spearman test between 2 samples : firstSample of dimension n and secondSample of dimension 1. If firstSample[i] is the numerical sample extracted from firstSample (ith coordinate of each point of the numerical sample), FullSpearman performs the Independence Spearman test simultaneously on all firstSample[i] and secondSample. # Probability of the H0 reject zone : 1-0.90 print('FullSpearmanYZ=', HypothesisTest.FullSpearman( sampleY, sampleZ, 0.90)) print('FullSpearmanYY=', HypothesisTest.FullSpearman( sampleY, sampleY, 0.90)) # Regression test between 2 samples : firstSample of dimension n and # secondSample of dimension 1. If firstSample[i] is the numerical sample # extracted from firstSample (ith coordinate of each point of the # numerical sample), PartialRegression performs the Regression test # simultaneously on all firstSample[i] and secondSample, for i in the # selection. The Regression test tests ifthe regression model between two # scalar numerical samples is significant. It is based on the deviation # analysis of the regression. The Fisher distribution is used. # The two tests must be equal print('PartialRegressionX0Y=', HypothesisTest.PartialRegression( sampleX, sampleY, selection2, 0.90)) print('FullRegressionX0Y=', HypothesisTest.FullRegression( sampleX0, sampleY, 0.90)) print('PartialRegressionXY=', HypothesisTest.PartialRegression( sampleX, sampleY, selection, 0.90)) # Regression test between 2 samples : firstSample of dimension n and # secondSample of dimension 1. If firstSample[i] is the numerical sample # extracted from firstSample (ith coordinate of each point of the # numerical sample), FullRegression performs the Regression test # simultaneously on all firstSample[i] and secondSample. The Regression # test tests if the regression model between two scalar numerical samples # is significant. It is based on the deviation analysis of the regression. # The Fisher distribution is used. print('FullRegressionXZ=', HypothesisTest.FullRegression( sampleX, sampleY, 0.90)) print('FullRegressionZZ=', HypothesisTest.FullRegression( sampleZ, sampleZ, 0.90)) openturns-1.9/python/test/t_HypothesisTest_std.expout000066400000000000000000000013261307543307100233670ustar00rootroot00000000000000ChiSquared= class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=true p-value threshold=0.1 p-value=0.985079 description=[] ChiSquared2= class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=false p-value threshold=0.1 p-value=1.15627e-20 description=[] Pearson= class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=false p-value threshold=0.1 p-value=6.40572e-08 description=[] Smirnov= class=TestResult name=Unnamed type=TwoSampleSmirnov binaryQualityMeasure=false p-value threshold=0.1 p-value=7.47514e-11 description=[] Spearman= class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=false p-value threshold=0.1 p-value=0 description=[] openturns-1.9/python/test/t_HypothesisTest_std.py000077500000000000000000000061361307543307100225020ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 10 R = CorrelationMatrix(dim) for i in range(dim): for j in range(i): R[i, j] = (i + j + 1.0) / (2.0 * dim) mean = Point(dim, 2.0) sigma = Point(dim, 3.0) distribution = Normal(mean, sigma, R) size = 100 sample = distribution.getSample(size) sampleX = Sample(size, dim - 1) sampleY = Sample(size, 1) for i in range(size): sampleY[i] = Point(1, sample[i, 0]) p = Point(dim - 1) for j in range(dim - 1): p[j] = sample[i, j + 1] sampleX[i] = p sampleZ = Sample(size, 1) for i in range(size): sampleZ[i] = Point(1, sampleY[i, 0] * sampleY[i, 0]) discreteSample1 = Poisson(0.1).getSample(size) discreteSample2 = Geometric(0.4).getSample(size) # ChiSquared Independance test : test if two samples (of sizes not necessarily equal) are independant ? # Care : discrete samples only # H0 = independent samples # p-value threshold : probability of the H0 reject zone : 1-0.90 # p-value : probability (test variable decision > test variable decision evaluated on the samples) # Test = True <=> p-value > p-value threshold print("ChiSquared=", HypothesisTest.ChiSquared( discreteSample1, discreteSample2, 0.90)) print("ChiSquared2=", HypothesisTest.ChiSquared( discreteSample1, discreteSample1, 0.90)) # Pearson Test : test if two gaussian samples are independent (based on the evaluation of the linear correlation coefficient) # H0 : independent samples (linear correlation coefficient = 0) # Test = True <=> independent samples (linear correlation coefficient = 0) # p-value threshold : probability of the H0 reject zone : 1-0.90 # p-value : probability (test variable decision > test variable decision evaluated on the samples) # Test = True <=> p-value > p-value threshold print("Pearson=", HypothesisTest.Pearson(sampleY, sampleZ, 0.90)) # Smirnov Test : test if two samples (of sizes not necessarily equal) follow the same distribution # Care : continuous distributions only # H0 = same continuous distribution # Test = True <=> same distribution # p-value threshold : probability of the H0 reject zone : 1-0.90 # p-value : probability (test variable decision > test variable decision evaluated on the samples) # Test = True <=> p-value > p-value threshold print("Smirnov=", HypothesisTest.Smirnov(sampleY, sampleZ, 0.90)) # Spearman Test : test if two samples have a monotonous relation # H0 = no monotonous relation between both samples # Test = True <=> no monotonous relation # p-value threshold : probability of the H0 reject zone : 1-0.90 # p-value : probability (test variable decision > test variable decision evaluated on the samples) # Test = True <=> p-value > p-value threshold print("Spearman=", HypothesisTest.Spearman(sampleY, sampleZ, 0.90)) except: import sys print("t_HypothesisTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IdentityMatrix_std.expout000066400000000000000000000007351307543307100233510ustar00rootroot00000000000000matrix1 = class=IdentityMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] pt = class=Point name=Unnamed dimension=2 values=[5,0] result = class=Point name=Unnamed dimension=2 values=[5,0] determinant = 1.000000 ev = class=Point name=Unnamed dimension=2 values=[1,1] isSPD = true matrix2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] openturns-1.9/python/test/t_IdentityMatrix_std.py000077500000000000000000000012301307543307100224470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() matrix1 = IdentityMatrix(2) print("matrix1 = ", repr(matrix1)) pt = Point() pt.add(5.) pt.add(0.) print("pt = ", repr(pt)) result = Point() result = matrix1.solveLinearSystem(pt) print("result = ", repr(result)) determinant = matrix1.computeDeterminant() print("determinant = %.6f" % determinant) ev = ScalarCollection(2) ev = matrix1.computeEigenValues() print("ev = ", repr(ev)) if matrix1.isPositiveDefinite(): isSPD = "true" else: isSPD = "false" print("isSPD = ", isSPD) matrix2 = matrix1.computeCholesky() print("matrix2 = ", repr(matrix2)) openturns-1.9/python/test/t_ImportanceSamplingExperiment_std.expout000066400000000000000000000025771307543307100262360ustar00rootroot00000000000000myPlane = class=ImportanceSamplingExperiment name=Unnamed distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] importance distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[1.6082,-0.266173,0.561734,2.20548],[-1.18139,1.35004,0.644993,2.43725],[1.81067,1.79316,0.529474,1.26102],[-1.29006,-0.282885,-0.311781,0.909216],[1.99579,0.860547,0.439794,1.44549],[1.32293,1.44579,-0.0380766,0.143288],[1.47362,0.874502,1.35142,2.78236],[1.07021,0.218634,0.278467,0.758777],[-0.787964,1.40136,2.36783,2.00434],[1.74155,0.956388,1.53934,1.29995]] weights = class=Point name=Unnamed dimension=10 values=[0.12133,0.286247,0.0335635,19.5997,0.0644655,0.417312,0.011312,0.721745,0.050511,0.0290938] openturns-1.9/python/test/t_ImportanceSamplingExperiment_std.py000077500000000000000000000012161307543307100253320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Normal(4) size = 10 weightingDistribution = Normal(distribution) weightingDistribution.setMean(Point(4, 1.0)) myPlane = ImportanceSamplingExperiment( distribution, weightingDistribution, size) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) except: import sys print("t_ImportanceSamplingExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ImportanceSampling_std.expout000066400000000000000000000030231307543307100241600ustar00rootroot00000000000000ImportanceSampling= class=ImportanceSampling derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 ImportanceSampling result= probabilityEstimate=1.533139e-01 varianceEstimate=2.330392e-04 standard deviation=1.53e-02 coefficient of variation=9.96e-02 confidenceLength(0.95)=5.98e-02 outerSampling=43 blockSize=4 openturns-1.9/python/test/t_ImportanceSampling_std.py000077500000000000000000000030731307543307100232740ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3) # We create an importance sampling Carlo algorithm */ mean[0] = 4.99689645939288809018e+01 mean[1] = 1.84194175946153282375e+00 mean[2] = 1.04454036676956398821e+01 mean[3] = 4.66776215562709406726e+00 myImportance = Normal(mean, sigma, R) myAlgo = ImportanceSampling(myEvent, myImportance) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.1) print("ImportanceSampling=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("ImportanceSampling result=", myAlgo.getResult()) except: import sys print("t_ImportanceSampling_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IndependentCopula_std.expout000066400000000000000000000063261307543307100237760ustar00rootroot00000000000000Copula = class=IndependentCopula name=IndependentCopula dimension=3 Copula = IndependentCopula(dimension = 3) Elliptical distribution = False Continuous copula = True Elliptical copula = True hasIndependentCopula = True oneRealization= class=Point name=Unnamed dimension=3 values=[0.629877,0.882805,0.135276] oneSample first= class=Point name=Unnamed dimension=3 values=[0.0325028,0.347057,0.969423] last= class=Point name=Unnamed dimension=3 values=[0.282986,0.307215,0.899457] mean= class=Point name=Unnamed dimension=3 values=[0.503596,0.496822,0.501632] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0830104,0.000288954,0.000906179,0.000288954,0.0846323,2.63752e-05,0.000906179,2.63752e-05,0.0837848] Point= class=Point name=Unnamed dimension=3 values=[0.6,0.6,0.6] ddf = class=Point name=Unnamed dimension=3 values=[0,0,0] pdf =1.000000 cdf=0.216000 pdf gradient = class=Point name=Unnamed dimension=0 values=[] cdf gradient = class=Point name=Unnamed dimension=0 values=[] quantile= class=Point name=Unnamed dimension=3 values=[0.983048,0.983048,0.983048] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[0.0169524,0.0169524,0.0169524] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.00847621, 0.991524] [0.00847621, 0.991524] [0.00847621, 0.991524] threshold= [0.983048] Minimum volume level set= {x | f(x) <= 0.983048} with f= [x0,x1,x2]->[2*max(abs(x0-0.5),abs(x1-0.5),abs(x2-0.5))] beta= [0.983048] Bilateral confidence interval= [0.00847621, 0.991524] [0.00847621, 0.991524] [0.00847621, 0.991524] beta= [0.983048] Unilateral confidence interval (lower tail)= [0, 0.983048] [0, 0.983048] [0, 0.983048] beta= [0.983048] Unilateral confidence interval (upper tail)= [0.0169524, 1] [0.0169524, 1] [0.0169524, 1] beta= [0.983048] mean= class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0,0,0,0.0833333,0,0,0,0.0833333] parameters= [class=PointWithDescription name=X0 dimension=0 description=[] values=[]] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.575665] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.336563] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.961293] indices= [1,0] margins= class=IndependentCopula name=IndependentCopula dimension=2 margins PDF=1.000000 margins CDF=0.062500 margins quantile= class=Point name=Unnamed dimension=2 values=[0.974679,0.974679] margins CDF(quantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.931788,0.190073] openturns-1.9/python/test/t_IndependentCopula_std.py000077500000000000000000000111431307543307100230760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 3 copula = IndependentCopula(dim) print("Copula =", repr(copula)) print("Copula =", copula) # Is this copula an elliptical distribution? print("Elliptical distribution = ", copula.isElliptical()) # Is this copula continuous ? print("Continuous copula = ", copula.isContinuous()) # Is this copula elliptical ? print("Elliptical copula = ", copula.hasEllipticalCopula()) # Is this copula independant ? print("hasIndependentCopula = ", copula.hasIndependentCopula()) # Test for realization of copula oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = copula.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(copula.getDimension(), 0.6) print("Point= ", repr(point)) # Show PDF and CDF of point # derivative of PDF with regards its arguments DDF = copula.computeDDF(point) print("ddf =", repr(DDF)) # PDF value PDF = copula.computePDF(point) print("pdf =%.6f" % PDF) # CDF value CDF = copula.computeCDF(point) print("cdf=%.6f" % CDF) # derivative of the PDF with regards the parameters of the distribution PDFgr = copula.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # derivative of the CDF with regards the parameters of the distribution CDFgr = copula.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # quantile quantile = copula.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = copula.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = copula.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = copula.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = copula.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # mean mean = copula.getMean() print("mean=", repr(mean)) # covariance covariance = copula.getCovariance() print("covariance=", repr(covariance)) # parameters of the distribution parameters = copula.getParametersCollection() print("parameters=", repr(parameters)) # Specific to this copula # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = margins.computeQuantile(0.95) print("margins quantile=", repr(quantile)) print("margins CDF(quantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) except: import sys print("t_IndependantCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IndicatorFunction_std.expout000066400000000000000000000014611307543307100240120ustar00rootroot00000000000000function= class=SymbolicFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0] formulas=[x0+x1] Value of the function= 2.0 value of the indicator= class=Point name=Unnamed dimension=1 values=[0] Value of the function= -2.0 value of the indicator= class=Point name=Unnamed dimension=1 values=[1] openturns-1.9/python/test/t_IndicatorFunction_std.py000077500000000000000000000014221307543307100231160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Analytical construction analytical = SymbolicFunction(["x0", "x1"], ["x0+x1"]) print("function=", repr(analytical)) # Create indicator function indicator = IndicatorFunction( analytical, Less(), 0.0) # Does it work? x = Point(2, 1.0) value = analytical(x)[0] print("Value of the function=", repr(value), " value of the indicator=", repr(indicator(x))) x = Point(2, -1.0) value = analytical(x)[0] print("Value of the function=", repr(value), " value of the indicator=", repr(indicator(x))) except: import sys print("t_Function_indicator.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Indices_std.expout000066400000000000000000000004221307543307100217420ustar00rootroot00000000000000indices= [0,1,2,3] are indices valid with bound= 4 ? True are indices valid with bound= 2 ? False indices after transformation= [3,1,2,3] are indices valid with bound= 4 ? False indices2[2] = 3 indices2[1:3] = [2,3] indices2[:] = [1,2,3,4,5] indices2 = [1,88,99,4,5] openturns-1.9/python/test/t_Indices_std.py000077500000000000000000000015611307543307100210560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: size = 4 indices = Indices(size, 0) for i in range(size): indices[i] = i print("indices=", repr(indices)) print("are indices valid with bound=", size, "? ", indices.check(size)) print("are indices valid with bound=", size // 2, "? ", indices.check(size // 2)) indices[0] = indices[size - 1] print("indices after transformation=", repr(indices)) print("are indices valid with bound=", size, "? ", indices.check(size)) # slicing indices2 = Indices((1, 2, 3, 4, 5)) print('indices2[2] = ', indices2[2]) print('indices2[1:3] = ', indices2[1:3]) print('indices2[:] = ', indices2[:]) indices2[1:3] = (88, 99) print('indices2 = ', indices2) except: import traceback traceback.print_exc() openturns-1.9/python/test/t_IntervalMesher_std.expout000066400000000000000000000025211307543307100233160ustar00rootroot00000000000000mesher1D= class=IntervalMesher discretization=[5] mesh1D= class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=1 data=[[-1],[-0.4],[0.2],[0.8],[1.4],[2]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5]] mesher2D= class=IntervalMesher discretization=[5,5] mesh2D= class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-1,-1],[-0.4,-1],[0.2,-1],[0.8,-1],[1.4,-1],[2,-1],[-1,-0.4],[-0.4,-0.4],[0.2,-0.4],[0.8,-0.4],[1.4,-0.4],[2,-0.4],[-1,0.2],[-0.4,0.2],[0.2,0.2],[0.8,0.2],[1.4,0.2],[2,0.2],[-1,0.8],[-0.4,0.8],[0.2,0.8],[0.8,0.8],[1.4,0.8],[2,0.8],[-1,1.4],[-0.4,1.4],[0.2,1.4],[0.8,1.4],[1.4,1.4],[2,1.4],[-1,2],[-0.4,2],[0.2,2],[0.8,2],[1.4,2],[2,2]] simplices=[[0,1,6],[1,7,6],[1,2,7],[2,8,7],[2,3,8],[3,9,8],[3,4,9],[4,10,9],[4,5,10],[5,11,10],[6,7,12],[7,13,12],[7,8,13],[8,14,13],[8,9,14],[9,15,14],[9,10,15],[10,16,15],[10,11,16],[11,17,16],[12,13,18],[13,19,18],[13,14,19],[14,20,19],[14,15,20],[15,21,20],[15,16,21],[16,22,21],[16,17,22],[17,23,22],[18,19,24],[19,25,24],[19,20,25],[20,26,25],[20,21,26],[21,27,26],[21,22,27],[22,28,27],[22,23,28],[23,29,28],[24,25,30],[25,31,30],[25,26,31],[26,32,31],[26,27,32],[27,33,32],[27,28,33],[28,34,33],[28,29,34],[29,35,34]] openturns-1.9/python/test/t_IntervalMesher_std.py000077500000000000000000000010341307543307100224230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # The 1D interface mesher1D = IntervalMesher([5]) print("mesher1D=", mesher1D) mesh1D = mesher1D.build(Interval(-1.0, 2.0)) print("mesh1D=", mesh1D) mesher2D = IntervalMesher([5, 5]) print("mesher2D=", mesher2D) mesh2D = mesher2D.build(Interval([-1.0, -1.0], [2.0, 2.0])) print("mesh2D=", mesh2D) except: import sys print("t_IntervalMesher_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Interval_std.expout000066400000000000000000000043051307543307100221540ustar00rootroot00000000000000interval1D= [-3, 5] defaultInterval= class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0,0] upper bound=class=Point name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] interval from 2 points= class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] pretty print= [-1, 2] [-1, 2] interval from 2 points and 2 flags= class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[0,0] finite upper bound=[1,1] pretty print= ]-inf (-1), 2] ]-inf (-1), 2] lower bound= class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound= class=Point name=Unnamed dimension=2 values=[2,2] lower bound flags= [0,0] upper bound flags= [1,1] interval [p1, p2] empty? False interval [p2, p1] empty? True intersection of class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] and class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.5,-1.5] upper bound=class=Point name=Unnamed dimension=2 values=[1.5,2.5] finite lower bound=[1,1] finite upper bound=[1,1] equals class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[0.5,-1] upper bound=class=Point name=Unnamed dimension=2 values=[1.5,2] finite lower bound=[1,1] finite upper bound=[1,1] is point [0.5,0.5] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] ? True is point [4,4] inside class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-1,-1] upper bound=class=Point name=Unnamed dimension=2 values=[2,2] finite lower bound=[1,1] finite upper bound=[1,1] ? False openturns-1.9/python/test/t_Interval_std.py000077500000000000000000000036141307543307100212650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # The 1D interface interval1D = Interval(-3, 5) print("interval1D=", interval1D) # The default interface size = 2 defaultInterval = Interval(2) print("defaultInterval=", repr(defaultInterval)) # Construction from 2 Point p1 = Point(2, -1.0) p2 = Point(2, 2.0) print("interval from 2 points=", repr(Interval(p1, p2))) print("pretty print=") print(Interval(p1, p2)) # Construction from 2 points and 2 flags flag1 = BoolCollection(2, False) flag2 = [True, True] # try automatic conversion to BoolCollection interval = Interval(p1, p2, flag1, flag2) print("interval from 2 points and 2 flags=", repr(interval)) print("pretty print=") print(interval) # Accessors print("lower bound=", repr(interval.getLowerBound())) print("upper bound=", repr(interval.getUpperBound())) print("lower bound flags=", repr(interval.getFiniteLowerBound())) print("upper bound flags=", repr(interval.getFiniteUpperBound())) # Check if a given interval is empty print("interval [p1, p2] empty? ", Interval(p1, p2).isEmpty()) print("interval [p2, p1] empty? ", Interval(p2, p1).isEmpty()) # Intersection interval1 = Interval(p1, p2) p3 = Point(2) p3[0] = 0.5 p3[1] = -1.5 p4 = Point(2) p4[0] = 1.5 p4[1] = 2.5 interval2 = Interval(p3, p4) print("intersection of ", repr(interval1), " and ", repr( interval2), " equals ", repr(interval1.intersect(interval2))) # Inside p5 = (p1 + p2) * 0.5 print("is point", p5, "inside", repr( interval1), "? ", interval1.contains(p5)) p6 = p2 * 2.0 print("is point", p6, "inside", repr( interval1), "? ", interval1.contains(p6)) except: import sys print("t_Interval_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseBoxCoxEvaluation_std.expout000066400000000000000000000014601307543307100251550ustar00rootroot00000000000000myFunction= InverseBoxCox(lambda=[0,0.5,1], shift=[0,0,0]) myInverseBoxCoxFunction ( [2,2,2] ) = [7.38906,4,3] myInverseBoxCoxFunction ( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 data=[[1,1,1],[0.5,0.5,0.5],[0.333333,0.333333,0.333333],[0.25,0.25,0.25],[0.2,0.2,0.2],[0.166667,0.166667,0.166667],[0.142857,0.142857,0.142857],[0.125,0.125,0.125],[0.111111,0.111111,0.111111],[0.1,0.1,0.1]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=3 description=[y0,y1,y2] data=[[2.71828,2.25,2],[1.64872,1.5625,1.5],[1.39561,1.36111,1.33333],[1.28403,1.26562,1.25],[1.2214,1.21,1.2],[1.18136,1.17361,1.16667],[1.15356,1.14796,1.14286],[1.13315,1.12891,1.125],[1.11752,1.1142,1.11111],[1.10517,1.1025,1.1]] openturns-1.9/python/test/t_InverseBoxCoxEvaluation_std.py000077500000000000000000000022001307543307100242550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Dimension of test dimension = 3 # Lambda lambdaVector = Point(dimension) lambdaVector[0] = 0. lambdaVector[1] = 0.5 lambdaVector[2] = 1 # Init of the function myFunction = InverseBoxCoxEvaluation(lambdaVector) myFunction.setName("myInverseBoxCoxFunction") # We check that for a Point with same values, the function is # done by component inPoint = Point(dimension, 2.0) # result point of the function outPoint = myFunction(inPoint) print("myFunction=", myFunction) print(myFunction.getName(), "( ", inPoint, " ) = ", outPoint) # Creation of a Sample size = 10 inSample = Sample(size, dimension) for index in range(size): inSample[index] = Point(dimension, (1.0 / (index + 1))) # result of the function outSample = myFunction(inSample) print(myFunction.getName(), "( ", repr(inSample), " ) = ", repr(outSample)) except: import sys print("t__InverseBoxCoxEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseBoxCoxTransform_std.expout000066400000000000000000000062711307543307100250260ustar00rootroot00000000000000myInverseBoxCox= InverseBoxCox(lambda=[0.2], shift=[0]) myInverseBoxCox input dimension = 1 myInverseBoxCox output dimension = 1 input time series = [ t X0 ] 0 : [ 0 0.259753 ] 1 : [ 0.1 0.76561 ] 2 : [ 0.2 -0.729447 ] 3 : [ 0.3 -0.934994 ] 4 : [ 0.4 -0.305886 ] 5 : [ 0.5 0.938846 ] 6 : [ 0.6 0.841359 ] 7 : [ 0.7 0.0060803 ] 8 : [ 0.8 -0.873588 ] 9 : [ 0.9 -0.414486 ] 10 : [ 1 0.428764 ] 11 : [ 1.1 -0.233276 ] 12 : [ 1.2 -0.252465 ] 13 : [ 1.3 0.474536 ] 14 : [ 1.4 0.767007 ] 15 : [ 1.5 -0.410012 ] 16 : [ 1.6 0.857021 ] 17 : [ 1.7 0.641622 ] 18 : [ 1.8 0.36915 ] 19 : [ 1.9 0.656054 ] 20 : [ 2 -0.280396 ] 21 : [ 2.1 0.909492 ] 22 : [ 2.2 0.177231 ] 23 : [ 2.3 -0.635922 ] 24 : [ 2.4 -0.82843 ] 25 : [ 2.5 0.321455 ] 26 : [ 2.6 -0.579116 ] 27 : [ 2.7 -0.227543 ] 28 : [ 2.8 -0.950881 ] 29 : [ 2.9 -0.162163 ] 30 : [ 3 0.963682 ] 31 : [ 3.1 0.832264 ] 32 : [ 3.2 0.911206 ] 33 : [ 3.3 -0.0540999 ] 34 : [ 3.4 -0.480278 ] 35 : [ 3.5 0.32268 ] 36 : [ 3.6 -0.0204509 ] 37 : [ 3.7 -0.0629513 ] 38 : [ 3.8 -0.777844 ] 39 : [ 3.9 -0.309362 ] 40 : [ 4 0.311954 ] 41 : [ 4.1 0.350177 ] 42 : [ 4.2 0.95796 ] 43 : [ 4.3 0.292669 ] 44 : [ 4.4 -0.871575 ] 45 : [ 4.5 0.546039 ] 46 : [ 4.6 0.988399 ] 47 : [ 4.7 -0.833853 ] 48 : [ 4.8 -0.550266 ] 49 : [ 4.9 -0.394761 ] 50 : [ 5 -0.565578 ] output time series = [ t y0 ] 0 : [ 0 1.28818 ] 1 : [ 0.1 2.03881 ] 2 : [ 0.2 0.454538 ] 3 : [ 0.3 0.355186 ] 4 : [ 0.4 0.72932 ] 5 : [ 0.5 2.36407 ] 6 : [ 0.6 2.1763 ] 7 : [ 0.7 1.0061 ] 8 : [ 0.8 0.382836 ] 9 : [ 0.9 0.648769 ] 10 : [ 1 1.50888 ] 11 : [ 1.1 0.787499 ] 12 : [ 1.2 0.771775 ] 13 : [ 1.3 1.57357 ] 14 : [ 1.4 2.04128 ] 15 : [ 1.5 0.65194 ] 16 : [ 1.6 2.20564 ] 17 : [ 1.7 1.82881 ] 18 : [ 1.8 1.42783 ] 19 : [ 1.9 1.85233 ] 20 : [ 2 0.749338 ] 21 : [ 2.1 2.30622 ] 22 : [ 2.2 1.19025 ] 23 : [ 2.3 0.506539 ] 24 : [ 2.4 0.404248 ] 25 : [ 2.5 1.36553 ] 26 : [ 2.6 0.540375 ] 27 : [ 2.7 0.792246 ] 28 : [ 2.8 0.348299 ] 29 : [ 2.9 0.848021 ] 30 : [ 3 2.41392 ] 31 : [ 3.1 2.15941 ] 32 : [ 3.2 2.30957 ] 33 : [ 3.3 0.947058 ] 34 : [ 3.4 0.603544 ] 35 : [ 3.5 1.3671 ] 36 : [ 3.6 0.979716 ] 37 : [ 3.7 0.938614 ] 38 : [ 3.8 0.42936 ] 39 : [ 3.9 0.726624 ] 40 : [ 4 1.35339 ] 41 : [ 4.1 1.40278 ] 42 : [ 4.2 2.40236 ] 43 : [ 4.3 1.329 ] 44 : [ 4.4 0.383771 ] 45 : [ 4.5 1.67905 ] 46 : [ 4.6 2.46436 ] 47 : [ 4.7 0.401627 ] 48 : [ 4.8 0.558239 ] 49 : [ 4.9 0.662843 ] 50 : [ 5 0.5487 ] myBoxCox = BoxCox(lambda=[0.2], shift=[0]) number of call(s) : 51 openturns-1.9/python/test/t_InverseBoxCoxTransform_std.py000077500000000000000000000030431307543307100241270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Realization issued from a SpectralProcess dimension = 1 # Parameters of the distribution N = 51 t0 = 0. dt = 0.1 myTimeGrid = RegularGrid(t0, dt, N) # Create a Sample # parameters of gaussien impose a few risk to get negative values mySample = Uniform().getSample(N) # get a realization from distribution myRealization = TimeSeries(myTimeGrid, mySample) # Create the lambda parameter lambdaVector = Point(dimension) for index in range(dimension): lambdaVector[index] = (index + 2.) * 0.1 myInverseBoxCox = InverseBoxCoxTransform(lambdaVector) print("myInverseBoxCox=", myInverseBoxCox) # Get the input and output dimension print("myInverseBoxCox input dimension = ", myInverseBoxCox.getInputDimension()) print("myInverseBoxCox output dimension = ", myInverseBoxCox.getOutputDimension()) # Evaluation of the InverseBoxCoxTransform on the realization print("input time series =") print(myRealization) print("output time series = ") print(myInverseBoxCox(myRealization)) # Call the getInverse method myBoxCox = myInverseBoxCox.getInverse() print("myBoxCox = ", myBoxCox) # Get the number of calls print("number of call(s) : ", myInverseBoxCox.getCallsNumber()) except: import sys print("t_InverseBoxCoxTransform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseChiSquare_std.expout000066400000000000000000000070521307543307100236120ustar00rootroot00000000000000Distribution InverseChiSquare(nu = 10.5) Elliptical = False Continuous = True oneRealization= [0.0782188] oneSample first= [0.139041] last= [0.137094] mean= [0.118211] covariance= [[ 0.00448375 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [0.190476] ddf = [-32.6097] ddf (FD)=-32.6097 log pdf= 0.538526870446 pdf =1.71348 pdf (FD)=1.71348 cdf= 0.898124218121 ccdf= 0.101875781879 survival= 0.101875781879 characteristic function=(0.999474, 0.0224004) log characteristic function=(-0.000274906, 0.0224084) pdf gradient = [-1.01934,-6.74683] pdf gradient (FD)= [-0.509672] cdf gradient = [0.0888995,0.163189] cdf gradient (FD)= [0.0444498] quantile= [0.235] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0526499] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0358836, 0.238469] threshold= [0.95] Minimum volume level set= {x | f(x) <= 35.0308} with f= MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 10.5)) beta= [6.11368e-16] Bilateral confidence interval= [0.0471602, 0.283384] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.235] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0526499, 85.793] beta= [0.95] mean= [0.117647] covariance= [[ 0.00425872 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[nu : 10.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.235294] standard moment n= 2 , value= [0.0723982] standard moment n= 3 , value= [0.032177] standard moment n= 4 , value= [0.0257416] standard moment n= 5 , value= [0.102966] Standard representative= InverseChiSquare(nu = 10.5) standard deviation= [0.0652588] skewness= [3.20493] kurtosis= [35.5333] Distribution InverseChiSquare(nu = 15) Elliptical = False Continuous = True oneRealization= [0.0913064] oneSample first= [0.0472117] last= [0.0823255] mean= [0.0764712] covariance= [[ 0.00106545 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [0.133333] ddf = [-67.8131] ddf (FD)=-67.8131 log pdf= 0.643707583651 pdf =1.90353 pdf (FD)=1.90353 cdf= 0.942263113464 ccdf= 0.0577368865356 survival= 0.0577368865356 characteristic function=(0.999938, 0.0102561) log characteristic function=(-9.55898e-06, 0.0102564) pdf gradient = [-1.18971,-10.7073] pdf gradient (FD)= [-0.594853] cdf gradient = [0.0479461,0.126902] cdf gradient (FD)= [0.023973] quantile= [0.137723] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0400067] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0299545, 0.140394] threshold= [0.95] Minimum volume level set= {x | f(x) <= -0.39369} with f= MinimumVolumeLevelSetEvaluation(InverseChiSquare(nu = 15)) beta= [1.48244] Bilateral confidence interval= [0.036379, 0.15969] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.137723] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0400067, 10.2372] beta= [0.95] mean= [0.0769231] covariance= [[ 0.00107585 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[nu : 15]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.153846] standard moment n= 2 , value= [0.027972] standard moment n= 3 , value= [0.00621601] standard moment n= 4 , value= [0.001776] standard moment n= 5 , value= [0.000710401] Standard representative= InverseChiSquare(nu = 15) standard deviation= [0.0328001] skewness= [2.08463] kurtosis= [13.0952] openturns-1.9/python/test/t_InverseChiSquare_std.py000077500000000000000000000140731307543307100227220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: allDistributions = [InverseChiSquare(10.5), InverseChiSquare(15.0)] for n in range(len(allDistributions)): distribution = allDistributions[n] print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is ", msg) size *= 10 # Define a point point = Point( distribution.getDimension(), 2.0 / distribution.getNu()) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) print("ddf (FD)=%.6g" % ((distribution.computePDF(point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps))) LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6g" % PDF) print("pdf (FD)=%.6g" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.12g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = Point(1) PDFgrFD[0] = (InverseChiSquare(distribution.getNu() + eps).computePDF(point) - InverseChiSquare(distribution.getNu() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = Point(1) CDFgrFD[0] = (InverseChiSquare(distribution.getNu() + eps).computeCDF(point) - InverseChiSquare(distribution.getNu() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.2f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) except: import sys print("InverseChiSquare.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseGamma_std.expout000066400000000000000000000072611307543307100227520ustar00rootroot00000000000000Distribution InverseGamma(k = 5.5, lambda = 2.5) Elliptical = False Continuous = True oneRealization= [0.0599153] oneSample first= [0.105001] last= [0.114865] mean= [0.0892908] covariance= [[ 0.00236759 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [0.145455] ddf = [-56.4599] ddf (FD)=-56.4599 log pdf= 0.783882690166 pdf =2.18996 pdf (FD)=2.18996 cdf= 0.904560532377 ccdf= 0.0954394676229 survival= 0.0954394676229 characteristic function=(0.999937, 0.0129291) log characteristic function=(2.03228e-05, 0.0129292) pdf gradient = [-1.31286,-2.40895] pdf gradient (FD)= [-1.31286,-2.40895] cdf gradient = [0.082705,0.127416] cdf gradient (FD)= [0.082705,0.127416] quantile= [0.174871] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0406605] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0280966, 0.177562] threshold= [0.95] Minimum volume level set= {x | f(x) <= 34.4467} with f= MinimumVolumeLevelSetEvaluation(InverseGamma(k = 5.5, lambda = 2.5)) beta= [1.09642e-15] Bilateral confidence interval= [0.0364963, 0.209657] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.174871] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0406605, 50.1015] beta= [0.95] mean= [0.0888889] covariance= [[ 0.0022575 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[k : 5.5, lambda : 2.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.222222] standard moment n= 2 , value= [0.0634921] standard moment n= 3 , value= [0.0253968] standard moment n= 4 , value= [0.0169312] standard moment n= 5 , value= [0.0338624] Standard representative= InverseGamma(k = 5.5, lambda = 1) standard deviation= [0.0475131] skewness= [2.99333] kurtosis= [29.4] Distribution InverseGamma(k = 15, lambda = 2.5) Elliptical = False Continuous = True oneRealization= [0.0272144] oneSample first= [0.0286215] last= [0.0158049] mean= [0.0284817] covariance= [[ 6.38042e-05 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [0.0533333] ddf = [-253.351] ddf (FD)=-253.352 log pdf= 0.463517877812 pdf =1.58966 pdf (FD)=1.58966 cdf= 0.989739572088 ccdf= 0.0102604279123 survival= 0.0102604279123 characteristic function=(0.999999, 0.00152381) log characteristic function=(-8.93075e-08, 0.00152381) pdf gradient = [-1.04829,-4.76897] pdf gradient (FD)= [-1.04829,-4.76897] cdf gradient = [0.00792151,0.0339127] cdf gradient (FD)= [0.00792151,0.0339127] quantile= [0.0432604] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0182761] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0154445, 0.0443646] threshold= [0.95] Minimum volume level set= {x | f(x) <= -1.89324} with f= MinimumVolumeLevelSetEvaluation(InverseGamma(k = 15, lambda = 2.5)) beta= [6.64087] Bilateral confidence interval= [0.0170288, 0.0476452] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.0432604] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0182761, 0.508519] beta= [0.95] mean= [0.0285714] covariance= [[ 6.27943e-05 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[k : 15, lambda : 2.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.0714286] standard moment n= 2 , value= [0.00549451] standard moment n= 3 , value= [0.000457875] standard moment n= 4 , value= [4.1625e-05] standard moment n= 5 , value= [4.1625e-06] Standard representative= InverseGamma(k = 15, lambda = 1) standard deviation= [0.00792429] skewness= [1.20185] kurtosis= [5.90909] openturns-1.9/python/test/t_InverseGamma_std.py000077500000000000000000000151621307543307100220600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: allDistributions = [InverseGamma(5.5, 2.5), InverseGamma(15.0, 2.5)] for n in range(len(allDistributions)): distribution = allDistributions[n] print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is ", msg) size *= 10 # Define a point point = Point( distribution.getDimension(), 2.0 / (distribution.getK() * distribution.getLambda())) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) print("ddf (FD)=%.6g" % ((distribution.computePDF(point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps))) LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6g" % PDF) print("pdf (FD)=%.6g" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.12g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = Point(2) PDFgrFD[0] = (InverseGamma(distribution.getK() + eps, distribution.getLambda()).computePDF(point) - InverseGamma(distribution.getK() - eps, distribution.getLambda()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (InverseGamma(distribution.getK(), distribution.getLambda() + eps).computePDF(point) - InverseGamma(distribution.getK(), distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = Point(2) CDFgrFD[0] = (InverseGamma(distribution.getK() + eps, distribution.getLambda()).computeCDF(point) - InverseGamma(distribution.getK() - eps, distribution.getLambda()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (InverseGamma(distribution.getK(), distribution.getLambda() + eps).computeCDF(point) - InverseGamma(distribution.getK(), distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.2f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) except: import sys print("InverseGamma.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseNatafIndependentCopulaEvaluation_std.expout000066400000000000000000000005551307543307100303320ustar00rootroot00000000000000transformation= class=InverseNatafIndependentCopulaEvaluation description=[X0,X1,Y0,Y1] dimension=2 transformation( [0.75,0.75] )= class=Point name=Unnamed dimension=2 values=[0.773373,0.773373] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=2 values=[] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_InverseNatafIndependentCopulaEvaluation_std.py000077500000000000000000000013651307543307100274410ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = InverseNatafIndependentCopulaEvaluation(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr(transformation(point))) print("transformation parameters gradient=", repr( transformation.parameterGradient(point))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_InverseNatafIndependentCopulaEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseNatafIndependentCopulaGradient_std.expout000066400000000000000000000004021307543307100277470ustar00rootroot00000000000000transformation= class=InverseNatafIndependentCopulaGradient dimension=2 transformation( [0.75,0.75] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.301137,0,0,0.301137] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_InverseNatafIndependentCopulaGradient_std.py000077500000000000000000000012461307543307100270650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = InverseNatafIndependentCopulaGradient(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr( transformation.gradient(point).clean(1e-6))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_InverseNatafIndependentCopulaGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseNatafIndependentCopulaHessian_std.expout000066400000000000000000000004351307543307100276120ustar00rootroot00000000000000transformation= class=InverseNatafIndependentCopulaHessian dimension=2 transformation( [0.75,0.75] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.225853,0,0,0,0,0,0,-0.225853] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_InverseNatafIndependentCopulaHessian_std.py000077500000000000000000000012161307543307100267170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = InverseNatafIndependentCopulaHessian(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr(transformation.hessian(point))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_InverseNatafIndependentCopulaHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseNormalFactory_std.expout000066400000000000000000000010701307543307100245000ustar00rootroot00000000000000distribution= class=InverseNormal name=InverseNormal dimension=1 lambda=2.5 mu=1.5 Estimated distribution= class=InverseNormal name=InverseNormal dimension=1 lambda=2.46246 mu=1.47866 Default distribution= InverseNormal(lambda = 1, mu = 1) Distribution from parameters= InverseNormal(lambda = 2.5, mu = 1.5) InverseNormal = InverseNormal(lambda = 2.5, mu = 1.5) Estimated inverseNormal= InverseNormal(lambda = 2.46246, mu = 1.47866) Default inverseNormal= InverseNormal(lambda = 1, mu = 1) InverseNormal from parameters= InverseNormal(lambda = 2.5, mu = 1.5) openturns-1.9/python/test/t_InverseNormalFactory_std.py000077500000000000000000000023601307543307100236120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = InverseNormal(2.5, 1.5) size = 10000 sample = distribution.getSample(size) factory = InverseNormalFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedInverseNormal = factory.buildAsInverseNormal(sample) print("InverseNormal =", distribution) print("Estimated inverseNormal=", estimatedInverseNormal) estimatedInverseNormal = factory.buildAsInverseNormal() print("Default inverseNormal=", estimatedInverseNormal) estimatedInverseNormal = factory.buildAsInverseNormal( distribution.getParameter()) print("InverseNormal from parameters=", estimatedInverseNormal) except: import sys print("t_InverseNormalFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseNormal_std.expout000066400000000000000000000042011307543307100231470ustar00rootroot00000000000000Distribution InverseNormal(lambda = 0.5, mu = 2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.632204] oneSample first= class=Point name=Unnamed dimension=1 values=[6.88993] last= class=Point name=Unnamed dimension=1 values=[0.573857] mean= class=Point name=Unnamed dimension=1 values=[1.98518] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[14.9406] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[3] log pdf=-2.934264 pdf =0.053170 pdf (FD)=0.053170 cdf=0.834308 ccdf=0.165692 characteristic function= (0.130776955167+0.348768871351j) quantile= class=Point name=Unnamed dimension=1 values=[8.26789] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.117535] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0274495, 8.27076] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.73175} with f= MinimumVolumeLevelSetEvaluation(InverseNormal(lambda = 0.5, mu = 2)) beta= [0.00881103] Bilateral confidence interval= [0.0917281, 12.6739] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 8.26789] beta= [0.95] Unilateral confidence interval (upper tail)= [0.117535, 472.248] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[2] standard deviation= class=Point name=Unnamed dimension=1 values=[4] skewness= class=Point name=Unnamed dimension=1 values=[6] kurtosis= class=Point name=Unnamed dimension=1 values=[63] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[16] parameters= [class=PointWithDescription name=X0 dimension=2 description=[lambda,mu] values=[0.5,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [2] standard moment n= 2 value= [20] standard moment n= 3 value= [488] standard moment n= 4 value= [19600] standard moment n= 5 value= [1.09955e+06] Standard representative= InverseNormal(lambda = 0.5, mu = 2) openturns-1.9/python/test/t_InverseNormal_std.py000077500000000000000000000106261307543307100222660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = InverseNormal(0.5, 2.0) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) RandomGenerator.SetSeed(1) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 3.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # moments mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_InverseNormal_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseTrendEvaluation_std.expout000066400000000000000000000007641307543307100250350ustar00rootroot00000000000000myFunction= [x]->[sin(x)] myInverseTrendFunction ( [30,30] ) = [30.988] myInverseTrendFunction ( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[0.158529],[1.0907],[2.85888],[4.7568],[5.95892],[6.27942],[6.34301],[7.01064],[8.58788],[10.544]] openturns-1.9/python/test/t_InverseTrendEvaluation_std.py000077500000000000000000000020621307543307100241350ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Dimension of test dimension = 2 # function function = SymbolicFunction("x", "sin(x)") # Init of the function myFunction = InverseTrendEvaluation(function) myFunction.setName("myInverseTrendFunction") # We check that for a Point with same values, the function is # done by component inPoint = Point(dimension, 30.0) # result point of the function outPoint = myFunction(inPoint) print("myFunction=", myFunction) print(myFunction.getName(), "( ", inPoint, " ) = ", outPoint) # Creation of a Sample size = 10 inSample = Sample(size, dimension) for index in range(size): inSample[index] = Point(dimension, index + 1) # result of the function outSample = myFunction(inSample) print(myFunction.getName(), "( ", repr(inSample), " ) = ", repr(outSample)) except: import sys print("t__InverseTrendEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseTrendTransform_std.expout000066400000000000000000000017401307543307100246740ustar00rootroot00000000000000myInverseTrendFunc= [t]->[sin(t),cos(t)] myInverseTrendFunc input description= [y0,y1] myInverseTrendFunc input dimension= 2 myInverseTrendFunc output description= [y0,y1] myInverseTrendFunc output dimension= 2 input time series = [ t v0 v1 ] 0 : [ 0 1 1 ] 1 : [ 0.1 2.09983 1.995 ] 2 : [ 0.2 3.19867 2.98007 ] 3 : [ 0.3 4.29552 3.95534 ] 4 : [ 0.4 5.38942 4.92106 ] 5 : [ 0.5 6.47943 5.87758 ] 6 : [ 0.6 7.56464 6.82534 ] 7 : [ 0.7 8.64422 7.76484 ] 8 : [ 0.8 9.71736 8.69671 ] 9 : [ 0.9 10.7833 9.62161 ] 10 : [ 1 11.8415 10.5403 ] output time series = [ t y0 y1 ] 0 : [ 0 1 0 ] 1 : [ 0.1 2 1 ] 2 : [ 0.2 3 2 ] 3 : [ 0.3 4 3 ] 4 : [ 0.4 5 4 ] 5 : [ 0.5 6 5 ] 6 : [ 0.6 7 6 ] 7 : [ 0.7 8 7 ] 8 : [ 0.8 9 8 ] 9 : [ 0.9 10 9 ] 10 : [ 1 11 10 ] called 1 times openturns-1.9/python/test/t_InverseTrendTransform_std.py000077500000000000000000000027521307543307100240070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create an intance inputVars = Description(["t"]) formula = Description(["sin(t)", "cos(t)"]) myFunc = SymbolicFunction(inputVars, formula) myInverseTrendFunc = InverseTrendTransform(myFunc) print("myInverseTrendFunc=", myInverseTrendFunc) # Get the input description and dimension print("myInverseTrendFunc input description=", myInverseTrendFunc.getInputDescription()) print("myInverseTrendFunc input dimension=", myInverseTrendFunc.getInputDimension()) # Get the output description and dimension print("myInverseTrendFunc output description=", myInverseTrendFunc.getOutputDescription()) print("myInverseTrendFunc output dimension=", myInverseTrendFunc.getOutputDimension()) # Create a TimeSeries tg = RegularGrid(0.0, 0.1, 11) data = Sample(tg.getN(), formula.getSize()) for i in range(data.getSize()): t = tg.getStart() + i * tg.getStep() data[i, 0] = i + 1 + sin(t) data[i, 1] = i + cos(t) ts = TimeSeries(tg, data) print("input time series = ") print(ts) print("output time series = ") print(myInverseTrendFunc(ts)) # Get the number of calls print("called ", myInverseTrendFunc.getCallsNumber(), " times") except: import sys print("t_InverseTrendTransform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_InverseWishart_std.expout000066400000000000000000000056771307543307100233620ustar00rootroot00000000000000Distribution class=InverseWishart name=InverseWishart dimension=1 cholesky=class=TriangularMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] nu=5 Distribution InverseWishart(V = [[ 1 ]], nu = 5) Mean= class=Point name=Unnamed dimension=1 values=[0.333333] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Elliptical = False oneRealization= class=Point name=Unnamed dimension=1 values=[0.156697] oneSample first= class=Point name=Unnamed dimension=1 values=[0.374649] last= class=Point name=Unnamed dimension=1 values=[0.381059] mean= class=Point name=Unnamed dimension=1 values=[0.335077] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.249466] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf = class=Point name=Unnamed dimension=1 values=[-2.09622e-05] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-2.09622e-05] log pdf=-9.801456 pdf =0.000055 pdf (FD)=0.000055 cdf=0.999795 ccdf=0.000205 pdf gradient = class=Point name=Unnamed dimension=2 values=[0.000135385,-9.97944e-05] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.000503875,0.000410437] quantile= class=Point name=Unnamed dimension=1 values=[0.872999] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0903302] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.0458714, 0.877774] threshold= [0.95] Minimum volume level set= {x | f(x) <= 16.35} with f= MinimumVolumeLevelSetEvaluation(InverseWishart(V = [[ 1 ]], nu = 5)) beta= [7.92992e-08] Bilateral confidence interval= [0.0779271, 1.20306] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 0.872999] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0903302, 59.8961] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.333333] standard deviation= class=Point name=Unnamed dimension=1 values=[1] skewness= class=Point name=Unnamed dimension=1 values=[18.5998] kurtosis= class=Point name=Unnamed dimension=1 values=[1074.6] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] parameters= [class=PointWithDescription name=X0 dimension=2 description=[nu,] values=[1,5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.333143] standard moment n= 2 value= [0.299063] standard moment n= 3 value= [1.74217] standard moment n= 4 value= [40.1732] standard moment n= 5 value= [1456.57] Standard representative= InverseWishart(V = [[ 1 ]], nu = 5) Run test_computeLogPDF... SUCCESS Run test_computeLogPDF_1D_case... SUCCESS Run test_computeLogPDF_diagonal_case... SUCCESS Run test_getSample_getMean... SUCCESS openturns-1.9/python/test/t_InverseWishart_std.py000077500000000000000000000315451307543307100224620ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function, division import unittest as ut from math import pi, log, log10, floor import openturns as ot from openturns.testing import assert_almost_equal # (value, reference, rtol, atol) ot.TESTPREAMBLE() # Prevent from using unittest.TestLoader.loadTestsFromTestCase # so as not to get the test execution duration def loadTestsFromTestCase(cls): """Launch the tests of the test case class""" import sys from inspect import getmembers members = getmembers(cls) test_names = [] is_tearDownClass_there = False for member in members: member_name = member[0] if member_name[0:5] == 'test_': test_names.append(member_name) elif member_name == 'setUpClass': cls.setUpClass() elif member_name == 'tearDownClass': is_tearDownClass_there = True for test_name in test_names: test = cls(test_name) test.setUp() print("Run " + test_name + "... ", end="") sys.stdout.flush() try: test.debug() print("SUCCESS") except Exception as exception: print("FAILURE") print(exception) test.tearDown() if is_tearDownClass_there: cls.tearDownClass() class TestInverseWishartMethods(ut.TestCase): """Test case for the class InverseWishart""" @classmethod def setUpClass(cls): # attributes to compare a one-dimensional InverseWishart to the # equivalent InverseGamma distribution U = ot.Uniform(0., 1.) scale = 10. * U.getRealization()[0] DoF = 3. + U.getRealization()[0] # Degrees of Freedom cls.k, cls.beta = 0.5 * DoF, 0.5 * scale cls.one_dimensional_inverse_wishart \ = ot.InverseWishart(ot.CovarianceMatrix([[scale]]), DoF) cls.inverse_gamma = ot.InverseGamma(cls.k, 1. / cls.beta) # attributes to test a multi-dimensional InverseWishart cls.dimension = 5 cls.DoF = cls.dimension + 3 + U.getRealization()[0] cls.L = ot.TriangularMatrix(cls.dimension) diagL = ot.Uniform(0.5, 1.).getSample(cls.dimension) cls.determinant = 1. for i in range(cls.dimension): cls.determinant *= diagL[i, 0] cls.L[i, i] = diagL[i, 0] for j in range(i): cls.L[i, j] = U.getRealization()[0] cls.determinant *= cls.determinant cls.Scale = ot.CovarianceMatrix(cls.L * cls.L.transpose()) def test_computeLogPDF_1D_case(self): """Test InverseWishart.computeLogPDF in the one-dimensional case""" k, beta = self.k, self.beta def logPDF(x): if x <= 0.: raise ValueError("math domain error") return k * log(beta) - ot.SpecFunc_LogGamma(k) - (k + 1) * log(x) - beta / x data = ((self.inverse_gamma.drawPDF()).getDrawable(0)).getData() i = 0 while data[i, 0] <= 0.: i += 1 for d in data[i:, 0]: x = d[0] logPDFx = logPDF(x) logPDFx_IW = self.one_dimensional_inverse_wishart.computeLogPDF(x) logPDFx_IG = self.inverse_gamma.computeLogPDF(x) assert_almost_equal(logPDFx_IW, logPDFx) assert_almost_equal(logPDFx_IG, logPDFx) assert_almost_equal(logPDFx_IW, logPDFx_IG) # Not a test # The log multi-gamma function appears in the log PDF def logmultigamma(self, p, x): """Computes the logarithm of the multi-gamma function at x""" logmgpx = 0.25 * p * (p - 1) * log(pi) for i in range(1, p + 1): logmgpx = logmgpx + ot.SpecFunc_LnGamma(x + 0.5 * (1 - i)) return logmgpx # Test InverseWishart.computeLogPDF in the special case of diagonal matrices # (scale covariance matrix and point/matrice at which to evaluate the # PDF) by comparing the logarithm of the ratio of the InverseWishart PDF # by the product of the InverseGamma PDFs def test_computeLogPDF_diagonal_case(self): """Test InverseWishart.computeLogPDF in the case of diagonal matrices""" dimension, DoF = self.dimension, self.DoF k = 0.5 * (DoF + dimension - 1) diagX = ot.Uniform(0.5, 1.).getSample(dimension) Scale = ot.CovarianceMatrix(dimension) X = ot.CovarianceMatrix(dimension) for d in range(dimension): Scale[d, d], X[d, d] = self.Scale[d, d], diagX[d, 0] inverse_wishart = ot.InverseWishart(Scale, DoF) logdensity = inverse_wishart.computeLogPDF(X) logratio = - self.logmultigamma(dimension, 0.5 * DoF) \ + dimension * ot.SpecFunc_LnGamma(0.5 * (DoF + dimension - 1)) for d in range(dimension): inverse_gamma = ot.InverseGamma(k, 2. / Scale[d, d]) logdensity = logdensity - inverse_gamma.computeLogPDF(diagX[d, 0]) logratio = logratio + 0.5 * \ (1 - dimension) * log(0.5 * Scale[d, d]) assert_almost_equal(logdensity, logratio) # Test InverseWishart.computeLogPDF by evaluating the log PDF # at the scale covariance matrix def test_computeLogPDF(self): """Test InverseWishart.computeLogPDF""" dimension, DoF = self.dimension, self.DoF Scale, determinant = self.Scale, self.determinant inverse_wishart = ot.InverseWishart(Scale, DoF) logPDFatX = - self.logmultigamma(dimension, 0.5 * DoF) \ - 0.5 * (DoF * dimension * log(2.) + dimension + (dimension + 1) * log(determinant)) assert_almost_equal(inverse_wishart.computeLogPDF(Scale), logPDFatX) # Compare the empirical expectations of a large matrix sample # and of the corresponding inverse matrix sample # to the corresponding theoretical expectations def test_getSample_getMean(self): """Test InverseWishart.getSample and InverseWishart.getMean""" d, Scale, DoF, N = self.dimension, self.Scale, self.DoF, int(1E+5) Identity = ot.CovarianceMatrix(d) Scale_wishart = ot.CovarianceMatrix(Scale.solveLinearSystem(Identity)) inverse_wishart = ot.InverseWishart(Scale, DoF) sample_inverse = ot.Sample(N, (d * (d + 1)) // 2) sample = ot.Sample(N, (d * (d + 1)) // 2) for i in range(N): M_inverse = inverse_wishart.getRealizationAsMatrix() M = M_inverse.solveLinearSystem(Identity) indice = 0 for j in range(d): for k in range(j + 1): sample_inverse[i, indice] = M_inverse[k, j] sample[i, indice] = M[k, j] indice += 1 mean_inverse = sample_inverse.computeMean() mean = sample.computeMean() theoretical_mean_inverse = inverse_wishart.getMean() theoretical_mean = (ot.Wishart(Scale_wishart, DoF)).getMean() indice, coefficient = 0, 1. / (DoF - d - 1) for j in range(d): for k in range(j + 1): assert_almost_equal(theoretical_mean_inverse[indice], coefficient * Scale[k, j]) assert_almost_equal(theoretical_mean[indice], DoF * Scale_wishart[k, j]) assert_almost_equal(mean_inverse[indice], coefficient * Scale[k, j], 0.1, 1.E-3) assert_almost_equal(mean[indice], DoF * Scale_wishart[k, j], 0.1, 1.E-3) indice += 1 # Instanciate one distribution object distribution = ot.InverseWishart(ot.CovarianceMatrix(1), 5.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if ot.FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print("Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = ot.Point(distribution.getDimension(), 9.1) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # max = distribution.getB() + distribution.getA() # min = distribution.getB() - distribution.getA() # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(ot.Point(1, (distribution.computePDF(point + ot.Point(1, eps)) - distribution.computePDF(point + ot.Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + ot.Point(1, eps)) - distribution.computeCDF(point + ot.Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique # PDFgrFD = Point(2) # PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - # Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) # PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - # Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) # print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # CDFgrFD = Point(2) # CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - # Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) # CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - # Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) # print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", ot.Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) loadTestsFromTestCase(TestInverseWishartMethods) openturns-1.9/python/test/t_IsoProbabilisticTransformation_EllipticalCopula.expout000066400000000000000000000332211307543307100312130ustar00rootroot00000000000000sample first= class=Point name=Unnamed dimension=2 values=[1.18542,0.431558] last= class=Point name=Unnamed dimension=2 values=[-0.0893062,0.97441] sample mean= class=Point name=Unnamed dimension=2 values=[0.502667,0.992171] sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.744767,0.273144,0.273144,0.489568] isoprobabilistic transformation= class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=2 values=[0,0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,-0.57735,1.1547] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,-0.57735,1.1547] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0,0,0,0,0,0,0,0] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed sample first= class=Point name=Unnamed dimension=2 values=[0.608202,-1.26617] last= class=Point name=Unnamed dimension=2 values=[-0.514176,0.52988] transformed sample mean= class=Point name=Unnamed dimension=2 values=[0.00249552,-0.0141031] transformed sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.987375,-0.01342,-0.01342,1.01408] inverse isoprobabilistic transformation= class=Function name=Unnamed implementation=class=ComposedFunction name=Unnamed description=[x0,x1,y0,y1] left function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] right function=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=2 values=[0,0] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0.5,0.866025] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0.5,0.866025] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0,0,0,0,0,0,0,0] transformed back sample first= class=Point name=Unnamed dimension=2 values=[1.18542,0.431558] last= class=Point name=Unnamed dimension=2 values=[-0.0893062,0.97441] transformed back sample mean= class=Point name=Unnamed dimension=2 values=[0.502667,0.992171] transformed back sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.744767,0.273144,0.273144,0.489568] point= class=Point name=Unnamed dimension=2 values=[1,1] transform value at point = class=Point name=Unnamed dimension=2 values=[0.430727,0.0259438] transform gradient at point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,-0.529291,1.61181] transform gradient at point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,-0.529291,1.61181] transform hessian at point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,-0.209,0,0,-1.0767] transform hessian at point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,-0.209,0,0,-1.0767] inverse transform value at transformed point = class=Point name=Unnamed dimension=2 values=[1,1] inverse transform gradient at transformed point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0.358201,0.620422] inverse transform gradient at transformed point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0.358201,0.620422] inverse transform hessian at transformed point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0.0857,0.1485,0,0.2571] inverse transform hessian at transformed point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0.0857,0.1485,0,0.2571] parameters gradient at point= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=2 values=[-0.305586,-0.611173,0,0,0,0,0.17643,0.352861,-0.875379,0.805903,-1.61181,0] parameters gradient (FD) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.305586,-0.611173,0,0,0,0.17643,0.352861,-0.875379,0.805903,-1.61181] (inverse) parameters gradient at point= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0,0.759487,-1.01973,1,0] (inverse) parameters gradient (FD) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0.759487,-1.01973,1] openturns-1.9/python/test/t_IsoProbabilisticTransformation_EllipticalCopula.py000077500000000000000000000225301307543307100303230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanSymmetricTensor(inSymmetricTensor): rowDim = inSymmetricTensor.getNbRows() colDim = inSymmetricTensor.getNbColumns() sheetDim = inSymmetricTensor.getNbSheets() for i in range(rowDim): for j in range(colDim): for k in range(sheetDim): inSymmetricTensor[i, j, k] = 1.e-4 * round( 1.e4 * inSymmetricTensor[i, j, k]) if (abs(inSymmetricTensor[i, j, k]) < 1.e-6): inSymmetricTensor[i, j, k] = 0.0 return inSymmetricTensor try: # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(Uniform(-1.0, 2.0)) aCollection.add(Gamma(2.0, 2.0, 0.0)) dim = aCollection.getSize() # Create a copula RCopula = CorrelationMatrix(dim) for i in range(dim): for j in range(i): RCopula[i, j] = (i + j + 1.0) / (2.0 * dim) # Instanciate one distribution object distribution = ComposedDistribution(aCollection, NormalCopula(RCopula)) # Test for sampling size = 10000 sample = distribution.getSample(size) print("sample first=", repr(sample[0]), " last=", repr(sample[size - 1])) print("sample mean=", repr(sample.computeMean())) print("sample covariance=", repr(sample.computeCovariance())) transform = distribution.getIsoProbabilisticTransformation() print("isoprobabilistic transformation=", repr(transform)) transformedSample = transform(sample) print("transformed sample first=", repr( transformedSample[0]), " last=", repr(transformedSample[size - 1])) print("transformed sample mean=", repr(transformedSample.computeMean())) print("transformed sample covariance=", repr( transformedSample.computeCovariance())) # Test for evaluation inverseTransform = distribution.getInverseIsoProbabilisticTransformation() print("inverse isoprobabilistic transformation=", repr(inverseTransform)) transformedBackSample = inverseTransform(transformedSample) print("transformed back sample first=", repr( transformedBackSample[0]), " last=", repr(transformedBackSample[size - 1])) print("transformed back sample mean=", repr( transformedBackSample.computeMean())) print("transformed back sample covariance=", repr( transformedBackSample.computeCovariance())) point = Point(dim, 1.0) print("point=", repr(point)) transformedPoint = transform(point) print("transform value at point =", repr(transformedPoint)) print("transform gradient at point =", repr( transform.gradient(point).clean(1e-6))) print("transform gradient at point (FD)=", repr(CenteredFiniteDifferenceGradient( 1.0e-5, transform.getEvaluation()).gradient(point).clean(1e-6))) print("transform hessian at point =", repr( cleanSymmetricTensor(transform.hessian(point)))) print("transform hessian at point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)))) print("inverse transform value at transformed point =", repr(inverseTransform(transformedPoint))) print("inverse transform gradient at transformed point =", repr( inverseTransform.gradient(transformedPoint).clean(1e-6))) print("inverse transform gradient at transformed point (FD)=", repr(CenteredFiniteDifferenceGradient( 1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1e-6))) print("inverse transform hessian at transformed point =", repr( cleanSymmetricTensor(inverseTransform.hessian(transformedPoint)))) print("inverse transform hessian at transformed point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)))) # Test for parameters print("parameters gradient at point=", repr( transform.parameterGradient(point))) # Validation using finite difference eps = 1e-5 factor = 1.0 / (2.0 * eps) gradient = Matrix(5, 2) # dT/dp0 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0 + eps, 2.0) coll[1] = aCollection[1] left = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() coll[0] = Uniform(-1.0 - eps, 2.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[0, 0] = dTdp[0] gradient[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0, 2.0 + eps) coll[1] = aCollection[1] left = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() coll[0] = Uniform(-1.0, 2.0 - eps) right = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[1, 0] = dTdp[0] gradient[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0 + eps, 2.0, 0.0) left = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0 - eps, 2.0, 0.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[2, 0] = dTdp[0] gradient[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0 + eps, 0.0) left = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0 - eps, 0.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[3, 0] = dTdp[0] gradient[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0, 0.0 + eps) left = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0, 0.0 - eps) right = ComposedDistribution( coll, NormalCopula(RCopula)).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[4, 0] = dTdp[0] gradient[4, 1] = dTdp[1] print("parameters gradient (FD) =", repr(gradient)) # Test for parameters print("(inverse) parameters gradient at point=", repr( inverseTransform.parameterGradient(point))) # dT/dp0 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0 + eps, 2.0) coll[1] = aCollection[1] left = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() coll[0] = Uniform(-1.0 - eps, 2.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[0, 0] = dTdp[0] gradient[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0, 2.0 + eps) coll[1] = aCollection[1] left = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() coll[0] = Uniform(-1.0, 2.0 - eps) right = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[1, 0] = dTdp[0] gradient[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0 + eps, 2.0, 0.0) left = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0 - eps, 2.0, 0.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[2, 0] = dTdp[0] gradient[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0 + eps, 0.0) left = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0 - eps, 0.0) right = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[3, 0] = dTdp[0] gradient[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0, 0.0 + eps) left = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0, 0.0 - eps) right = ComposedDistribution( coll, NormalCopula(RCopula)).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[4, 0] = dTdp[0] gradient[4, 1] = dTdp[1] print("(inverse) parameters gradient (FD) =", repr(gradient)) except: import sys print("t_IsoProbabilisticTransformation_EllipticalCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IsoProbabilisticTransformation_EllipticalDistribution.expout000066400000000000000000000116341307543307100324530ustar00rootroot00000000000000sample first= class=Point name=Unnamed dimension=3 values=[1.7164,-2.87731,-0.0888678] last= class=Point name=Unnamed dimension=3 values=[-0.227791,-2.59096,1.4601] sample mean= class=Point name=Unnamed dimension=3 values=[0.476599,-0.538382,0.997853] sample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.93982,2.85907,-0.0162011,2.85907,8.94638,1.48782,-0.0162011,1.48782,1.00509] isoprobabilistic transformation= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,-0.288675,0.204124,0,0.3849,-0.272166,0,0,1.22474] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,-0.288675,0.204124,0,0.3849,-0.272166,0,0,1.22474] hessianImplementation=class=NatafEllipticalDistributionHessian transformed sample first= class=Point name=Unnamed dimension=3 values=[0.608202,-1.26617,-0.438266] last= class=Point name=Unnamed dimension=3 values=[-0.363896,-0.594717,0.984039] transformed sample mean= class=Point name=Unnamed dimension=3 values=[-0.0117004,-0.00801788,0.0030405] transformed sample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.984954,-0.0184348,0.00311426,-0.0184348,1.01836,-0.0129937,0.00311426,-0.0129937,1.01684] inverse isoprobabilistic transformation= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=InverseNatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[0,0,0] cholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,1.5,0,0,2.59808,0.57735,0,0,0.816497] gradientImplementation=class=InverseNatafEllipticalDistributionGradient cholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,1.5,0,0,2.59808,0.57735,0,0,0.816497] hessianImplementation=class=InverseNatafEllipticalDistributionHessian transformed back sample first= class=Point name=Unnamed dimension=3 values=[1.7164,-2.87731,-0.0888678] last= class=Point name=Unnamed dimension=3 values=[-0.227791,-2.59096,1.4601] transformed back sample mean= class=Point name=Unnamed dimension=3 values=[0.476599,-0.538382,0.997853] transformed back sample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.93982,2.85907,-0.0162011,2.85907,8.94638,1.48782,-0.0162011,1.48782,1.00509] point= class=Point name=Unnamed dimension=3 values=[1,1,1] transform value at point = class=Point name=Unnamed dimension=3 values=[0.25,0.433013,-0.306186] transform gradient at point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,-0.288675,0.3849,0,0.204124,-0.272166,1.22474] transform gradient at point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,-0.288675,0.3849,0,0.204124,-0.272166,1.22474] transform hessian at point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] transform hessian at point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] inverse transform value at transformed point = class=Point name=Unnamed dimension=3 values=[1,1,1] inverse transform gradient at transformed point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,0,0,1.5,2.59808,0,0,0.57735,0.816497] inverse transform gradient at transformed point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,0,0,1.5,2.59808,0,0,0.57735,0.816497] inverse transform hessian at transformed point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] inverse transform hessian at transformed point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] parameters gradient at point= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=6 columns=3 values=[-0.5,0,0,-0.125,0,0,0.288675,-0.3849,0,0,-0.222222,0,-0.204124,0.272166,-1.22474,0,0,-0] openturns-1.9/python/test/t_IsoProbabilisticTransformation_EllipticalDistribution.py000077500000000000000000000076731307543307100315720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanSymmetricTensor(inSymmetricTensor): rowDim = inSymmetricTensor.getNbRows() colDim = inSymmetricTensor.getNbColumns() sheetDim = inSymmetricTensor.getNbSheets() for i in range(rowDim): for j in range(colDim): for k in range(sheetDim): if (fabs(inSymmetricTensor[i, j, k]) < 1.e-6): inSymmetricTensor[i, j, k] = 0.0 return inSymmetricTensor try: # Instanciate one distribution object dim = 3 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution = Normal(meanPoint, sigma, R) # Test for sampling size = 10000 sample = distribution.getSample(size) print("sample first=", repr(sample[0]), " last=", repr(sample[size - 1])) print("sample mean=", repr(sample.computeMean())) print("sample covariance=", repr(sample.computeCovariance())) transform = distribution.getIsoProbabilisticTransformation() print("isoprobabilistic transformation=", repr(transform)) transformedSample = transform(sample) print("transformed sample first=", repr( transformedSample[0]), " last=", repr(transformedSample[size - 1])) print("transformed sample mean=", repr(transformedSample.computeMean())) print("transformed sample covariance=", repr( transformedSample.computeCovariance())) # Test for evaluation inverseTransform = distribution.getInverseIsoProbabilisticTransformation() print("inverse isoprobabilistic transformation=", repr(inverseTransform)) transformedBackSample = inverseTransform(transformedSample) print("transformed back sample first=", repr( transformedBackSample[0]), " last=", repr(transformedBackSample[size - 1])) print("transformed back sample mean=", repr( transformedBackSample.computeMean())) print("transformed back sample covariance=", repr( transformedBackSample.computeCovariance())) point = Point(dim, 1.0) print("point=", repr(point)) transformedPoint = transform(point) print("transform value at point =", repr(transformedPoint)) print("transform gradient at point =", repr( transform.gradient(point).clean(1e-6))) print("transform gradient at point (FD)=", repr(CenteredFiniteDifferenceGradient( 1.0e-5, transform.getEvaluation()).gradient(point).clean(1e-6))) print("transform hessian at point =", repr( cleanSymmetricTensor(transform.hessian(point)))) print("transform hessian at point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)))) print("inverse transform value at transformed point =", repr(inverseTransform(transformedPoint))) print("inverse transform gradient at transformed point (FD)=", repr( inverseTransform.gradient(transformedPoint).clean(1e-6))) print("inverse transform gradient at transformed point =", repr(CenteredFiniteDifferenceGradient( 1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1e-6))) print("inverse transform hessian at transformed point =", repr( cleanSymmetricTensor(inverseTransform.hessian(transformedPoint)))) print("inverse transform hessian at transformed point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)))) # Test for parameters print("parameters gradient at point=", repr( transform.parameterGradient(point))) except: import sys print("t_IsoProbabilisticTransformation_EllipticalDistribution.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IsoProbabilisticTransformation_IndependentCopula.expout000066400000000000000000000276751307543307100314060ustar00rootroot00000000000000sample first= class=Point name=Unnamed dimension=2 values=[0.88963,0.64148] last= class=Point name=Unnamed dimension=2 values=[-0.637014,0.629913] sample mean= class=Point name=Unnamed dimension=2 values=[0.5097,1.00099] sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.762895,-0.0052843,-0.0052843,0.516961] isoprobabilistic transformation= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed sample first= class=Point name=Unnamed dimension=2 values=[0.331526,-0.33947] last= class=Point name=Unnamed dimension=2 values=[-1.17003,-0.361455] transformed sample mean= class=Point name=Unnamed dimension=2 values=[0.0107197,-0.00573321] transformed sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.01651,-0.00878902,-0.00878902,1.0289] inverse isoprobabilistic transformation= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] gradientImplementation=class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] hessianImplementation=class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] output marginals=[class=Uniform name=Uniform dimension=1 a=-1 b=2,class=Gamma name=Gamma dimension=1 k=2 lambda=2 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformed back sample first= class=Point name=Unnamed dimension=2 values=[0.88963,0.64148] last= class=Point name=Unnamed dimension=2 values=[-0.637014,0.629913] transformed back sample mean= class=Point name=Unnamed dimension=2 values=[0.5097,1.00099] transformed back sample covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.762895,-0.0052843,-0.0052843,0.516961] point= class=Point name=Unnamed dimension=2 values=[1,1] transform value at point = class=Point name=Unnamed dimension=2 values=[0.430727,0.237832] transform gradient at point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,0,1.39587] transform gradient at point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.916759,0,0,1.39587] transform hessian at point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,0,0,0,-0.9325] transform hessian at point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.362,0,0,0,0,0,0,-0.9325] inverse transform value at transformed point = class=Point name=Unnamed dimension=2 values=[1,1] inverse transform gradient at transformed point = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0,0.716401] inverse transform gradient at transformed point (FD)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1.0908,0,0,0.716401] inverse transform hessian at transformed point = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0,0,0,0.3428] inverse transform hessian at transformed point (FD) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.4698,0,0,0,0,0,0,0.3428] parameters gradient at point= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.305586,-0.611173,0,0,0,0,0,-0.758101,0.697933,-1.39587] parameters gradient (FD) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.305586,-0.611173,0,0,0,0,0,-0.758101,0.697933,-1.39587] (inverse) parameters gradient at point= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0.690599,-0.824882,1] (inverse) parameters gradient (FD) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[0.158655,0.841345,0,0,0,0,0,0.690599,-0.824882,1] openturns-1.9/python/test/t_IsoProbabilisticTransformation_IndependentCopula.py000077500000000000000000000213321307543307100304750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanSymmetricTensor(inSymmetricTensor): rowDim = inSymmetricTensor.getNbRows() colDim = inSymmetricTensor.getNbColumns() sheetDim = inSymmetricTensor.getNbSheets() for i in range(rowDim): for j in range(colDim): for k in range(sheetDim): inSymmetricTensor[i, j, k] = 1.e-4 * round( 1.e4 * inSymmetricTensor[i, j, k]) if (abs(inSymmetricTensor[i, j, k]) < 1.e-6): inSymmetricTensor[i, j, k] = 0.0 return inSymmetricTensor try: meanPoint = Point(1) sigma = Point(1) R = CorrelationMatrix(1) # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(Uniform(-1.0, 2.0)) aCollection.add(Gamma(2.0, 2.0, 0.0)) dim = aCollection.getSize() # Instanciate one distribution object distribution = ComposedDistribution(aCollection, IndependentCopula(dim)) # Test for sampling size = 10000 sample = distribution.getSample(size) print("sample first=", repr(sample[0]), " last=", repr(sample[size - 1])) print("sample mean=", repr(sample.computeMean())) print("sample covariance=", repr(sample.computeCovariance())) transform = distribution.getIsoProbabilisticTransformation() print("isoprobabilistic transformation=", repr(transform)) transformedSample = transform(sample) print("transformed sample first=", repr( transformedSample[0]), " last=", repr(transformedSample[size - 1])) print("transformed sample mean=", repr(transformedSample.computeMean())) print("transformed sample covariance=", repr( transformedSample.computeCovariance())) # Test for evaluation inverseTransform = distribution.getInverseIsoProbabilisticTransformation() print("inverse isoprobabilistic transformation=", repr(inverseTransform)) transformedBackSample = inverseTransform(transformedSample) print("transformed back sample first=", repr( transformedBackSample[0]), " last=", repr(transformedBackSample[size - 1])) print("transformed back sample mean=", repr( transformedBackSample.computeMean())) print("transformed back sample covariance=", repr( transformedBackSample.computeCovariance())) point = Point(dim, 1.0) print("point=", repr(point)) transformedPoint = transform(point) print("transform value at point =", repr(transformedPoint)) print("transform gradient at point =", repr( transform.gradient(point).clean(1e-6))) print("transform gradient at point (FD)=", repr(CenteredFiniteDifferenceGradient( 1.0e-5, transform.getEvaluation()).gradient(point).clean(1e-6))) print("transform hessian at point =", repr( cleanSymmetricTensor(transform.hessian(point)))) print("transform hessian at point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, transform.getEvaluation()).hessian(point)))) print("inverse transform value at transformed point =", repr(inverseTransform(transformedPoint))) print("inverse transform gradient at transformed point =", repr( inverseTransform.gradient(transformedPoint).clean(1e-6))) print("inverse transform gradient at transformed point (FD)=", repr(CenteredFiniteDifferenceGradient( 1.0e-5, inverseTransform.getEvaluation()).gradient(transformedPoint).clean(1e-6))) print("inverse transform hessian at transformed point =", repr( cleanSymmetricTensor(inverseTransform.hessian(transformedPoint)))) print("inverse transform hessian at transformed point (FD) =", repr(cleanSymmetricTensor( CenteredFiniteDifferenceHessian(1.0e-4, inverseTransform.getEvaluation()).hessian(transformedPoint)))) # Test for parameters print("parameters gradient at point=", repr( transform.parameterGradient(point))) # Validation using finite difference eps = 1e-5 factor = 1.0 / (2.0 * eps) gradient = Matrix(5, 2) # dT/dp0 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0 + eps, 2.0) coll[1] = aCollection[1] left = ComposedDistribution(coll).getIsoProbabilisticTransformation() coll[0] = Uniform(-1.0 - eps, 2.0) right = ComposedDistribution(coll).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[0, 0] = dTdp[0] gradient[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0, 2.0 + eps) coll[1] = aCollection[1] left = ComposedDistribution(coll).getIsoProbabilisticTransformation() coll[0] = Uniform(-1.0, 2.0 - eps) right = ComposedDistribution(coll).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[1, 0] = dTdp[0] gradient[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0 + eps, 2.0, 0.0) left = ComposedDistribution(coll).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0 - eps, 2.0, 0.0) right = ComposedDistribution(coll).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[2, 0] = dTdp[0] gradient[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0 + eps, 0.0) left = ComposedDistribution(coll).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0 - eps, 0.0) right = ComposedDistribution(coll).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[3, 0] = dTdp[0] gradient[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0, 0.0 + eps) left = ComposedDistribution(coll).getIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0, 0.0 - eps) right = ComposedDistribution(coll).getIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[4, 0] = dTdp[0] gradient[4, 1] = dTdp[1] print("parameters gradient (FD) =", repr(gradient)) # Test for parameters print("(inverse) parameters gradient at point=", repr( inverseTransform.parameterGradient(point))) # dT/dp0 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0 + eps, 2.0) coll[1] = aCollection[1] left = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() coll[0] = Uniform(-1.0 - eps, 2.0) right = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[0, 0] = dTdp[0] gradient[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(dim) coll[0] = Uniform(-1.0, 2.0 + eps) coll[1] = aCollection[1] left = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() coll[0] = Uniform(-1.0, 2.0 - eps) right = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[1, 0] = dTdp[0] gradient[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0 + eps, 2.0, 0.0) left = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0 - eps, 2.0, 0.0) right = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[2, 0] = dTdp[0] gradient[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0 + eps, 0.0) left = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0 - eps, 0.0) right = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[3, 0] = dTdp[0] gradient[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(dim) coll[0] = aCollection[0] coll[1] = Gamma(2.0, 2.0, 0.0 + eps) left = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() coll[1] = Gamma(2.0, 2.0, 0.0 - eps) right = ComposedDistribution( coll).getInverseIsoProbabilisticTransformation() dTdp = (left(point) - right(point)) * factor gradient[4, 0] = dTdp[0] gradient[4, 1] = dTdp[1] print("(inverse) parameters gradient (FD) =", repr(gradient)) except: import sys print("t_IsoProbabilisticTransformation_EllipticalCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_IteratedQuadrature_std.expout000066400000000000000000000002251307543307100241640ustar00rootroot00000000000000dim= 1 , volume= 2 , calls= 14 dim= 2 , volume= 3.141592723 , calls= 3724 dim= 3 , volume= 4.18879029858 , calls= 50960 value= [16,16] , calls= 2744 openturns-1.9/python/test/t_IteratedQuadrature_std.py000077500000000000000000000023611307543307100232760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # First, compute the volume of the unit ball in R^n a = -1.0 b = 1.0 formula = "1.0" lower = list() upper = list() algo = ot.IteratedQuadrature( ot.GaussKronrod(20, 1.0e-6, ot.GaussKronrodRule(ot.GaussKronrodRule.G3K7))) for n in range(3): inVars = ot.Description.BuildDefault(n + 1, "x") inVarsBounds = inVars[0:n] if (n > 0): formula += "-" + inVars[n - 1] + "^2" lower.append( ot.SymbolicFunction(inVarsBounds, ["-sqrt(" + formula + ")"])) upper.append( ot.SymbolicFunction(inVarsBounds, ["sqrt(" + formula + ")"])) integrand = ot.SymbolicFunction(inVars, ["1.0"]) value = algo.integrate(integrand, a, b, lower, upper)[0] print("dim=", n + 1, ", volume= %.12g" % value, ", calls=", integrand.getCallsNumber()) # Second, integrate a multi-valued function bounds = ot.Interval([-1.0] * 3, [1.0] * 3) vars = ["x0", "x1", "x2"] formulas = ["x0^2 + 2*x1^2 + 3*x2^2", "x2^2 + 2*x1^2 + 3*x0^2"] integrand = ot.SymbolicFunction(vars, formulas) value = algo.integrate(integrand, bounds) print("value=", value, ", calls=", integrand.getCallsNumber()) openturns-1.9/python/test/t_JacobiFactory_std.expout000066400000000000000000000031411307543307100231040ustar00rootroot00000000000000jacobi= class=JacobiFactory alpha=0 beta=1.5 measure=class=Beta name=Beta dimension=1 r=2.5 t=3.5 a=-1 b=1 jacobi= class=JacobiFactory alpha=2.5 beta=3.5 measure=class=Beta name=Beta dimension=1 r=4.5 t=8 a=-1 b=1 jacobi= class=JacobiFactory alpha=2.5 beta=3.5 measure=class=Beta name=Beta dimension=1 r=4.5 t=8 a=-1 b=1 jacobi( 0 )= 1 jacobi( 1 )= -0.377964 + 3.02372 * X jacobi( 2 )= -0.755929 - 1.51186 * X + 7.55929 * X^2 jacobi( 3 )= 0.436436 - 4.36436 * X - 4.36436 * X^2 + 17.4574 * X^3 jacobi( 4 )= 0.690066 + 2.76026 * X - 16.5616 * X^2 - 11.041 * X^3 + 38.6437 * X^4 jacobi( 5 )= -0.465242 + 5.58291 * X + 11.1658 * X^2 - 52.1071 * X^3 - 26.0536 * X^4 + 83.3714 * X^5 jacobi( 6 )= -0.657952 - 3.94771 * X + 27.634 * X^2 + 36.8453 * X^3 - 147.381 * X^4 - 58.9525 * X^5 + 176.857 * X^6 jacobi( 7 )= 0.482805 - 6.75926 * X - 20.2778 * X^2 + 108.148 * X^3 + 108.148 * X^4 - 389.334 * X^5 - 129.778 * X^6 + 370.794 * X^7 jacobi( 8 )= 0.63869 + 5.10952 * X - 40.8762 * X^2 - 81.7524 * X^3 + 367.886 * X^4 + 294.309 * X^5 - 981.028 * X^6 - 280.294 * X^7 + 770.808 * X^8 jacobi( 9 )= -0.494727 + 7.91564 * X + 31.6626 * X^2 - 189.975 * X^3 - 284.963 * X^4 + 1139.85 * X^5 + 759.901 * X^6 - 2388.26 * X^7 - 597.065 * X^8 + 1592.17 * X^9 jacobi(10) roots= class=Point name=Unnamed dimension=10 values=[-0.867175,-0.712865,-0.521474,-0.302684,-0.0681347,0.169589,0.397703,0.603939,0.777235,0.908482] jacobi(10) nodes= [-0.867175,-0.712865,-0.521474,-0.302684,-0.0681347,0.169589,0.397703,0.603939,0.777235,0.908482]#10 and weights= [0.000553302,0.00864389,0.0456158,0.12776,0.223552,0.260299,0.202864,0.100618,0.0274194,0.0026748]#10 openturns-1.9/python/test/t_JacobiFactory_std.py000077500000000000000000000013171307543307100222160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: jacobi = JacobiFactory(2.5, 3.5, JacobiFactory.PROBABILITY) print("jacobi=", jacobi) jacobi = JacobiFactory(2.5, 3.5, JacobiFactory.ANALYSIS) print("jacobi=", jacobi) jacobi = JacobiFactory(2.5, 3.5) print("jacobi=", jacobi) for i in range(10): print("jacobi(", i, ")=", jacobi.build(i)) roots = jacobi.getRoots(10) print("jacobi(10) roots=", repr(roots)) nodes, weights = jacobi.getNodesAndWeights(10) print("jacobi(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_JacobiFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KDTree_std.expout000066400000000000000000000042721307543307100215110ustar00rootroot00000000000000tree= class=KDTree root=class=KDNode index=5 left=class=KDNode index=4 left=NULL right=class=KDNode index=6 left=NULL right=class=KDNode index=2 left=NULL right=NULL right=class=KDNode index=7 left=class=KDNode index=0 left=NULL right=class=KDNode index=1 left=NULL right=NULL right=class=KDNode index=9 left=NULL right=class=KDNode index=8 left=NULL right=class=KDNode index=3 left=NULL right=NULL Nearest neighbour of [-0.721533,-0.241223,-1.78796] = [0.445785,-1.03808,-0.856712] index= 7 Nearest neighbour of [0.40136,1.36783,1.00434] = [-0.355007,1.43725,0.810668] index= 2 Nearest neighbour of [0.741548,-0.0436123,0.539345] = [0.473617,-0.125498,0.351418] index= 8 Nearest neighbour of [0.29995,0.407717,-0.485112] = [-0.0907838,0.995793,-0.139453] index= 5 Nearest neighbour of [-0.382992,-0.752817,0.257926] = [0.473617,-0.125498,0.351418] index= 8 Nearest neighbour of [1.96876,-0.671291,1.85579] = [0.793156,-0.470526,0.261018] index= 3 Nearest neighbour of [0.0521593,0.790446,0.716353] = [-0.355007,1.43725,0.810668] index= 2 Nearest neighbour of [-0.743622,0.184356,-1.53073] = [-0.0907838,0.995793,-0.139453] index= 5 Nearest neighbour of [0.655027,0.538071,1.73821] = [0.473617,-0.125498,0.351418] index= 8 Nearest neighbour of [-0.958722,0.377922,-0.181004] = [-0.560206,0.44549,0.322925] index= 6 Nearest neighbour of [1.67297,-1.03896,-0.353552] = [0.608202,-1.26617,-0.438266] index= 0 Nearest neighbour of [1.21381,-0.777033,-1.36853] = [0.445785,-1.03808,-0.856712] index= 7 Nearest neighbour of [0.103474,-0.89182,0.905602] = [0.473617,-0.125498,0.351418] index= 8 Nearest neighbour of [0.334794,-0.483642,0.677958] = [0.473617,-0.125498,0.351418] index= 8 Nearest neighbour of [1.70938,1.07062,-0.506925] = [1.78236,0.0702074,-0.781366] index= 9 Nearest neighbour of [-1.66086,2.24623,0.759602] = [-0.355007,1.43725,0.810668] index= 2 Nearest neighbour of [-0.510764,-0.633066,-0.957072] = [0.445785,-1.03808,-0.856712] index= 7 Nearest neighbour of [0.544047,0.814561,-0.734708] = [-0.0907838,0.995793,-0.139453] index= 5 Nearest neighbour of [-0.111461,0.994482,-0.160625] = [-0.0907838,0.995793,-0.139453] index= 5 Nearest neighbour of [-0.938771,-1.96869,-0.657603] = [-2.29006,-1.28289,-1.31178] index= 4 openturns-1.9/python/test/t_KDTree_std.py000077500000000000000000000006531307543307100206170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() sample = ot.Normal(3).getSample(10) tree = ot.KDTree(sample) print('tree=', tree) test = ot.Normal(3).getSample(20) for i in range(len(test)): index = tree.getNearestNeighbourIndex(test[i]) neighbour = tree.getNearestNeighbour(test[i]) print('Nearest neighbour of', test[i], '=', neighbour, 'index=', index) openturns-1.9/python/test/t_KFold_std.expout000066400000000000000000000000441307543307100213630ustar00rootroot00000000000000algo = class=KFold result = 0.54167 openturns-1.9/python/test/t_KFold_std.py000077500000000000000000000012331307543307100204730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: size = 100 xuniform = Uniform(0.9, 1.1) x = xuniform.getSample(size) yuniform = Uniform(1.9, 2.1) y = yuniform.getSample(size) w = [1.0] * size f = Function(['x'], ['y'], ['2.0*x']) basis = Basis() basis.add(f) indices = list(range(basis.getSize())) fittingAlgo = KFold() print("algo =", fittingAlgo) result = fittingAlgo.run(x, y, w, basis, indices) print("result = %g" % result) except: import sys print("t_KFold_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KPermutationsDistribution_std.expout000066400000000000000000000017461307543307100256030ustar00rootroot00000000000000Distribution KPermutationsDistribution(k = 5, n = 12) Elliptical = False Continuous = False oneRealization= [0,5,3,6,8] oneSample first= [2,6,1,0,8] last= [5,11,1,2,10] mean= [5.3888,5.4518,5.5082,5.4548,5.5287] covariance= 5x5 [[ 11.8336 -1.13537 -1.06199 -1.10364 -0.960355 ] [ -1.13537 12.0819 -1.07121 -1.27841 -0.968764 ] [ -1.06199 -1.07121 11.8851 -1.10004 -0.885674 ] [ -1.10364 -1.27841 -1.10004 11.9077 -1.29858 ] [ -0.960355 -0.968764 -0.885674 -1.29858 11.9054 ]] Point= [4,4,4,4,4] log pdf= 0.0 pdf = 1.0 cdf=0.001263 ccdf=0.998737 quantile= [11,11,11,11,11] cdf(quantile)= 1.0 mean= [5.5,5.5,5.5,5.5,5.5] covariance= 5x5 [[ 11.9167 -1.08333 -1.08333 -1.08333 -1.08333 ] [ -1.08333 11.9167 -1.08333 -1.08333 -1.08333 ] [ -1.08333 -1.08333 11.9167 -1.08333 -1.08333 ] [ -1.08333 -1.08333 -1.08333 11.9167 -1.08333 ] [ -1.08333 -1.08333 -1.08333 -1.08333 11.9167 ]] parameters= [[n : 12],[n : 12],[n : 12],[n : 12],[n : 12],[k : 5, n : 12]] openturns-1.9/python/test/t_KPermutationsDistribution_std.py000077500000000000000000000034051307543307100247040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = KPermutationsDistribution(5, 12) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # Define a point point = Point(distribution.getDimension(), 4.0) print("Point= ", point) # Show PDF and CDF of point LPDF = distribution.computeLogPDF(point) print("log pdf=", LPDF) PDF = distribution.computePDF(point) print("pdf =", PDF) CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) parameters = distribution.getParametersCollection() print("parameters=", parameters) except: import sys print("t_KPermutationsDistribution_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KarhunenLoeveP1Algorithm_std.expout000066400000000000000000001255041307543307100252130ustar00rootroot00000000000000KL modes= [field 0: 0 : [ -1 0.521319 ] 1 : [ -0.777778 0.626964 ] 2 : [ -0.555556 0.709762 ] 3 : [ -0.333333 0.766697 ] 4 : [ -0.111111 0.795692 ] 5 : [ 0.111111 0.795692 ] 6 : [ 0.333333 0.766697 ] 7 : [ 0.555556 0.709762 ] 8 : [ 0.777778 0.626964 ] 9 : [ 1 0.521319 ] field 1: 0 : [ -1 0.834397 ] 1 : [ -0.777778 0.930264 ] 2 : [ -0.555556 0.840221 ] 3 : [ -0.333333 0.582262 ] 4 : [ -0.111111 0.207939 ] 5 : [ 0.111111 -0.207939 ] 6 : [ 0.333333 -0.582262 ] 7 : [ 0.555556 -0.840221 ] 8 : [ 0.777778 -0.930264 ] 9 : [ 1 -0.834397 ] field 2: 0 : [ -1 0.970148 ] 1 : [ -0.777778 0.898034 ] 2 : [ -0.555556 0.330024 ] 3 : [ -0.333333 -0.420226 ] 4 : [ -0.111111 -0.938426 ] 5 : [ 0.111111 -0.938426 ] 6 : [ 0.333333 -0.420226 ] 7 : [ 0.555556 0.330024 ] 8 : [ 0.777778 0.898034 ] 9 : [ 1 0.970148 ] field 3: 0 : [ -1 1.06139 ] 1 : [ -0.777778 0.682251 ] 2 : [ -0.555556 -0.432988 ] 3 : [ -0.333333 -1.08106 ] 4 : [ -0.111111 -0.56274 ] 5 : [ 0.111111 0.56274 ] 6 : [ 0.333333 1.08106 ] 7 : [ 0.555556 0.432988 ] 8 : [ 0.777778 -0.682251 ] 9 : [ 1 -1.06139 ] field 4: 0 : [ -1 1.15742 ] 1 : [ -0.777778 0.344056 ] 2 : [ -0.555556 -1.06189 ] 3 : [ -0.333333 -0.638902 ] 4 : [ -0.111111 0.884491 ] 5 : [ 0.111111 0.884491 ] 6 : [ 0.333333 -0.638902 ] 7 : [ 0.555556 -1.06189 ] 8 : [ 0.777778 0.344056 ] 9 : [ 1 1.15742 ] field 5: 0 : [ -1 1.27398 ] 1 : [ -0.777778 -0.0892214 ] 2 : [ -0.555556 -1.23774 ] 3 : [ -0.333333 0.592071 ] 4 : [ -0.111111 0.997199 ] 5 : [ 0.111111 -0.997199 ] 6 : [ 0.333333 -0.592071 ] 7 : [ 0.555556 1.23774 ] 8 : [ 0.777778 0.0892214 ] 9 : [ 1 -1.27398 ] field 6: 0 : [ -1 1.41501 ] 1 : [ -0.777778 -0.587314 ] 2 : [ -0.555556 -0.799073 ] 3 : [ -0.333333 1.42533 ] 4 : [ -0.111111 -0.695712 ] 5 : [ 0.111111 -0.695712 ] 6 : [ 0.333333 1.42533 ] 7 : [ 0.555556 -0.799073 ] 8 : [ 0.777778 -0.587314 ] 9 : [ 1 1.41501 ] field 7: 0 : [ -1 1.57495 ] 1 : [ -0.777778 -1.09677 ] 2 : [ -0.555556 0.149795 ] 3 : [ -0.333333 0.861206 ] 4 : [ -0.111111 -1.5041 ] 5 : [ 0.111111 1.5041 ] 6 : [ 0.333333 -0.861206 ] 7 : [ 0.555556 -0.149795 ] 8 : [ 0.777778 1.09677 ] 9 : [ 1 -1.57495 ] field 8: 0 : [ -1 1.7998 ] 1 : [ -0.777778 -1.58544 ] 2 : [ -0.555556 1.23813 ] 3 : [ -0.333333 -0.786998 ] 4 : [ -0.111111 0.269876 ] 5 : [ 0.111111 0.269876 ] 6 : [ 0.333333 -0.786998 ] 7 : [ 0.555556 1.23813 ] 8 : [ 0.777778 -1.58544 ] 9 : [ 1 1.7998 ] field 9: 0 : [ -1 1.36677 ] 1 : [ -0.777778 -1.27892 ] 2 : [ -0.555556 1.2144 ] 3 : [ -0.333333 -1.17202 ] 4 : [ -0.111111 1.15103 ] 5 : [ 0.111111 -1.15103 ] 6 : [ 0.333333 1.17202 ] 7 : [ 0.555556 -1.2144 ] 8 : [ 0.777778 1.27892 ] 9 : [ 1 -1.36677 ]] KL eigenvalues= [1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557]#10 KL coefficients= 0 : [ -0.203621 -0.431497 1.51822 -1.01115 0.124251 0.808461 1.53888 1.81086 0.418953 -1.38935 ] 1 : [ -1.76177 -0.159268 1.50613 1.52138 -0.359257 -0.171515 0.573694 -0.992881 -0.684789 -0.881749 ] 2 : [ 0.143707 -0.60078 1.37379 0.706534 -0.0832319 1.09034 -1.47036 -0.279771 -0.196865 -0.165975 ] 3 : [ -0.0545959 -1.88514 -0.262147 1.00909 1.38232 0.140004 0.150435 -0.628133 -0.81918 -0.294412 ] 4 : [ 0.474544 -1.23896 1.01277 0.743111 0.757876 -0.356037 -0.930728 1.03102 1.41191 -1.27186 ] 5 : [ 0.284542 -0.515046 0.607026 1.56395 -0.0511769 -0.850748 0.497779 -0.299238 0.27467 1.99453 ] 6 : [ 0.181463 1.20381 0.630583 -0.710783 0.968057 1.05153 2.11158 0.378122 -0.303388 0.754926 ] 7 : [ 0.939476 -0.285159 -0.13813 -1.24797 -2.80792 1.13789 0.628207 -1.08956 -0.342563 0.801607 ] 8 : [ -0.470737 0.465052 -1.62732 1.20605 -1.4716 -1.11118 -0.693818 0.0154974 0.325176 -0.322025 ] 9 : [ 1.22161 -0.635282 1.50977 -0.864321 -0.291154 -0.770491 -1.0691 1.73122 -1.11705 -0.204718 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]]]#10 ) KL lift= (-0.218409 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.521319],[0.626964],[0.709762],[0.766697],[0.795692],[0.795692],[0.766697],[0.709762],[0.626964],[0.521319]]) - 0.26806 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.834397],[0.930264],[0.840221],[0.582262],[0.207939],[-0.207939],[-0.582262],[-0.840221],[-0.930264],[-0.834397]]) + 0.588482 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.970148],[0.898034],[0.330024],[-0.420226],[-0.938426],[-0.938426],[-0.420226],[0.330024],[0.898034],[0.970148]]) - 0.272021 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.06139],[0.682251],[-0.432988],[-1.08106],[-0.56274],[0.56274],[1.08106],[0.432988],[-0.682251],[-1.06139]]) + 0.0248709 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.15742],[0.344056],[-1.06189],[-0.638902],[0.884491],[0.884491],[-0.638902],[-1.06189],[0.344056],[1.15742]]) + 0.125992 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.27398],[-0.0892214],[-1.23774],[0.592071],[0.997199],[-0.997199],[-0.592071],[1.23774],[0.0892214],[-1.27398]]) + 0.19349 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41501],[-0.587314],[-0.799073],[1.42533],[-0.695712],[-0.695712],[1.42533],[-0.799073],[-0.587314],[1.41501]]) + 0.190979 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.57495],[-1.09677],[0.149795],[0.861206],[-1.5041],[1.5041],[-0.861206],[-0.149795],[1.09677],[-1.57495]]) + 0.0391245 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.7998],[-1.58544],[1.23813],[-0.786998],[0.269876],[0.269876],[-0.786998],[1.23813],[-1.58544],[1.7998]]) - 0.12493 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36677],[-1.27892],[1.2144],[-1.17202],[1.15103],[-1.15103],[1.17202],[-1.2144],[1.27892],[-1.36677]])) KL lift as field= 0 : [ -1 0.608202 ] 1 : [ -0.777778 -0.271448 ] 2 : [ -0.555556 -0.479886 ] 3 : [ -0.333333 0.337837 ] 4 : [ -0.111111 -1.03616 ] 5 : [ 0.111111 -0.620015 ] 6 : [ 0.333333 -0.709124 ] 7 : [ 0.555556 0.293113 ] 8 : [ 0.777778 0.720309 ] 9 : [ 1 1.05189 ] KL modes= [field 0: 0 : [ -1 0.15107 0.498951 ] 1 : [ -0.777778 0.181684 0.600063 ] 2 : [ -0.555556 0.205678 0.679308 ] 3 : [ -0.333333 0.222177 0.733799 ] 4 : [ -0.111111 0.230579 0.76155 ] 5 : [ 0.111111 0.230579 0.76155 ] 6 : [ 0.333333 0.222177 0.733799 ] 7 : [ 0.555556 0.205678 0.679308 ] 8 : [ 0.777778 0.181684 0.600063 ] 9 : [ 1 0.15107 0.498951 ] field 1: 0 : [ -1 0.241795 0.798595 ] 1 : [ -0.777778 0.269576 0.890349 ] 2 : [ -0.555556 0.243483 0.804169 ] 3 : [ -0.333333 0.16873 0.557278 ] 4 : [ -0.111111 0.0602575 0.199017 ] 5 : [ 0.111111 -0.0602575 -0.199017 ] 6 : [ 0.333333 -0.16873 -0.557278 ] 7 : [ 0.555556 -0.243483 -0.804169 ] 8 : [ 0.777778 -0.269576 -0.890349 ] 9 : [ 1 -0.241795 -0.798595 ] field 2: 0 : [ -1 0.498951 -0.15107 ] 1 : [ -0.777778 0.600063 -0.181684 ] 2 : [ -0.555556 0.679308 -0.205678 ] 3 : [ -0.333333 0.733799 -0.222177 ] 4 : [ -0.111111 0.76155 -0.230579 ] 5 : [ 0.111111 0.76155 -0.230579 ] 6 : [ 0.333333 0.733799 -0.222177 ] 7 : [ 0.555556 0.679308 -0.205678 ] 8 : [ 0.777778 0.600063 -0.181684 ] 9 : [ 1 0.498951 -0.15107 ] field 3: 0 : [ -1 0.281134 0.928521 ] 1 : [ -0.777778 0.260236 0.859501 ] 2 : [ -0.555556 0.0956357 0.315863 ] 3 : [ -0.333333 -0.121775 -0.402195 ] 4 : [ -0.111111 -0.271941 -0.89816 ] 5 : [ 0.111111 -0.271941 -0.89816 ] 6 : [ 0.333333 -0.121775 -0.402195 ] 7 : [ 0.555556 0.0956357 0.315863 ] 8 : [ 0.777778 0.260236 0.859501 ] 9 : [ 1 0.281134 0.928521 ] field 4: 0 : [ -1 0.307573 1.01584 ] 1 : [ -0.777778 0.197705 0.652977 ] 2 : [ -0.555556 -0.125473 -0.41441 ] 3 : [ -0.333333 -0.313274 -1.03468 ] 4 : [ -0.111111 -0.163073 -0.538594 ] 5 : [ 0.111111 0.163073 0.538594 ] 6 : [ 0.333333 0.313274 1.03468 ] 7 : [ 0.555556 0.125473 0.41441 ] 8 : [ 0.777778 -0.197705 -0.652977 ] 9 : [ 1 -0.307573 -1.01584 ] field 5: 0 : [ -1 0.798595 -0.241795 ] 1 : [ -0.777778 0.890349 -0.269576 ] 2 : [ -0.555556 0.804169 -0.243483 ] 3 : [ -0.333333 0.557278 -0.16873 ] 4 : [ -0.111111 0.199017 -0.0602575 ] 5 : [ 0.111111 -0.199017 0.0602575 ] 6 : [ 0.333333 -0.557278 0.16873 ] 7 : [ 0.555556 -0.804169 0.243483 ] 8 : [ 0.777778 -0.890349 0.269576 ] 9 : [ 1 -0.798595 0.241795 ] field 6: 0 : [ -1 0.335402 1.10776 ] 1 : [ -0.777778 0.0997019 0.329293 ] 2 : [ -0.555556 -0.307719 -1.01633 ] 3 : [ -0.333333 -0.185144 -0.611488 ] 4 : [ -0.111111 0.256311 0.846539 ] 5 : [ 0.111111 0.256311 0.846539 ] 6 : [ 0.333333 -0.185144 -0.611488 ] 7 : [ 0.555556 -0.307719 -1.01633 ] 8 : [ 0.777778 0.0997019 0.329293 ] 9 : [ 1 0.335402 1.10776 ] field 7: 0 : [ -1 0.928521 -0.281134 ] 1 : [ -0.777778 0.859501 -0.260236 ] 2 : [ -0.555556 0.315863 -0.0956357 ] 3 : [ -0.333333 -0.402195 0.121775 ] 4 : [ -0.111111 -0.89816 0.271941 ] 5 : [ 0.111111 -0.89816 0.271941 ] 6 : [ 0.333333 -0.402195 0.121775 ] 7 : [ 0.555556 0.315863 -0.0956357 ] 8 : [ 0.777778 0.859501 -0.260236 ] 9 : [ 1 0.928521 -0.281134 ] field 8: 0 : [ -1 0.369181 1.21932 ] 1 : [ -0.777778 -0.0258549 -0.085393 ] 2 : [ -0.555556 -0.358677 -1.18463 ] 3 : [ -0.333333 0.171573 0.566667 ] 4 : [ -0.111111 0.288972 0.954411 ] 5 : [ 0.111111 -0.288972 -0.954411 ] 6 : [ 0.333333 -0.171573 -0.566667 ] 7 : [ 0.555556 0.358677 1.18463 ] 8 : [ 0.777778 0.0258549 0.085393 ] 9 : [ 1 -0.369181 -1.21932 ] field 9: 0 : [ -1 0.410047 1.35429 ] 1 : [ -0.777778 -0.170194 -0.562114 ] 2 : [ -0.555556 -0.231559 -0.764786 ] 3 : [ -0.333333 0.413037 1.36417 ] 4 : [ -0.111111 -0.201606 -0.66586 ] 5 : [ 0.111111 -0.201606 -0.66586 ] 6 : [ 0.333333 0.413037 1.36417 ] 7 : [ 0.555556 -0.231559 -0.764786 ] 8 : [ 0.777778 -0.170194 -0.562114 ] 9 : [ 1 0.410047 1.35429 ] field 10: 0 : [ -1 1.01584 -0.307573 ] 1 : [ -0.777778 0.652977 -0.197705 ] 2 : [ -0.555556 -0.41441 0.125473 ] 3 : [ -0.333333 -1.03468 0.313274 ] 4 : [ -0.111111 -0.538594 0.163073 ] 5 : [ 0.111111 0.538594 -0.163073 ] 6 : [ 0.333333 1.03468 -0.313274 ] 7 : [ 0.555556 0.41441 -0.125473 ] 8 : [ 0.777778 -0.652977 0.197705 ] 9 : [ 1 -1.01584 0.307573 ] field 11: 0 : [ -1 0.456396 1.50737 ] 1 : [ -0.777778 -0.317826 -1.04971 ] 2 : [ -0.555556 0.0434081 0.143367 ] 3 : [ -0.333333 0.249564 0.824253 ] 4 : [ -0.111111 -0.435865 -1.43956 ] 5 : [ 0.111111 0.435865 1.43956 ] 6 : [ 0.333333 -0.249564 -0.824253 ] 7 : [ 0.555556 -0.0434081 -0.143367 ] 8 : [ 0.777778 0.317826 1.04971 ] 9 : [ 1 -0.456396 -1.50737 ] field 12: 0 : [ -1 0.521554 1.72258 ] 1 : [ -0.777778 -0.459434 -1.51741 ] 2 : [ -0.555556 0.35879 1.185 ] 3 : [ -0.333333 -0.228059 -0.753229 ] 4 : [ -0.111111 0.0782057 0.258296 ] 5 : [ 0.111111 0.0782057 0.258296 ] 6 : [ 0.333333 -0.228059 -0.753229 ] 7 : [ 0.555556 0.35879 1.185 ] 8 : [ 0.777778 -0.459434 -1.51741 ] 9 : [ 1 0.521554 1.72258 ] field 13: 0 : [ -1 0.396069 1.30813 ] 1 : [ -0.777778 -0.370611 -1.22405 ] 2 : [ -0.555556 0.351913 1.16229 ] 3 : [ -0.333333 -0.339634 -1.12173 ] 4 : [ -0.111111 0.33355 1.10164 ] 5 : [ 0.111111 -0.33355 -1.10164 ] 6 : [ 0.333333 0.339634 1.12173 ] 7 : [ 0.555556 -0.351913 -1.16229 ] 8 : [ 0.777778 0.370611 1.22405 ] 9 : [ 1 -0.396069 -1.30813 ] field 14: 0 : [ -1 1.10776 -0.335402 ] 1 : [ -0.777778 0.329293 -0.0997019 ] 2 : [ -0.555556 -1.01633 0.307719 ] 3 : [ -0.333333 -0.611488 0.185144 ] 4 : [ -0.111111 0.846539 -0.256311 ] 5 : [ 0.111111 0.846539 -0.256311 ] 6 : [ 0.333333 -0.611488 0.185144 ] 7 : [ 0.555556 -1.01633 0.307719 ] 8 : [ 0.777778 0.329293 -0.0997019 ] 9 : [ 1 1.10776 -0.335402 ] field 15: 0 : [ -1 1.21932 -0.369181 ] 1 : [ -0.777778 -0.085393 0.0258549 ] 2 : [ -0.555556 -1.18463 0.358677 ] 3 : [ -0.333333 0.566667 -0.171573 ] 4 : [ -0.111111 0.954411 -0.288972 ] 5 : [ 0.111111 -0.954411 0.288972 ] 6 : [ 0.333333 -0.566667 0.171573 ] 7 : [ 0.555556 1.18463 -0.358677 ] 8 : [ 0.777778 0.085393 -0.0258549 ] 9 : [ 1 -1.21932 0.369181 ] field 16: 0 : [ -1 1.35429 -0.410047 ] 1 : [ -0.777778 -0.562114 0.170194 ] 2 : [ -0.555556 -0.764786 0.231559 ] 3 : [ -0.333333 1.36417 -0.413037 ] 4 : [ -0.111111 -0.66586 0.201606 ] 5 : [ 0.111111 -0.66586 0.201606 ] 6 : [ 0.333333 1.36417 -0.413037 ] 7 : [ 0.555556 -0.764786 0.231559 ] 8 : [ 0.777778 -0.562114 0.170194 ] 9 : [ 1 1.35429 -0.410047 ] field 17: 0 : [ -1 1.50737 -0.456396 ] 1 : [ -0.777778 -1.04971 0.317826 ] 2 : [ -0.555556 0.143367 -0.0434081 ] 3 : [ -0.333333 0.824253 -0.249564 ] 4 : [ -0.111111 -1.43956 0.435865 ] 5 : [ 0.111111 1.43956 -0.435865 ] 6 : [ 0.333333 -0.824253 0.249564 ] 7 : [ 0.555556 -0.143367 0.0434081 ] 8 : [ 0.777778 1.04971 -0.317826 ] 9 : [ 1 -1.50737 0.456396 ] field 18: 0 : [ -1 1.72258 -0.521554 ] 1 : [ -0.777778 -1.51741 0.459434 ] 2 : [ -0.555556 1.185 -0.35879 ] 3 : [ -0.333333 -0.753229 0.228059 ] 4 : [ -0.111111 0.258296 -0.0782057 ] 5 : [ 0.111111 0.258296 -0.0782057 ] 6 : [ 0.333333 -0.753229 0.228059 ] 7 : [ 0.555556 1.185 -0.35879 ] 8 : [ 0.777778 -1.51741 0.459434 ] 9 : [ 1 1.72258 -0.521554 ] field 19: 0 : [ -1 1.30813 -0.396069 ] 1 : [ -0.777778 -1.22405 0.370611 ] 2 : [ -0.555556 1.16229 -0.351913 ] 3 : [ -0.333333 -1.12173 0.339634 ] 4 : [ -0.111111 1.10164 -0.33355 ] 5 : [ 0.111111 -1.10164 0.33355 ] 6 : [ 0.333333 1.12173 -0.339634 ] 7 : [ 0.555556 -1.16229 0.351913 ] 8 : [ 0.777778 1.22405 -0.370611 ] 9 : [ 1 -1.30813 0.396069 ]] KL eigenvalues= [4.95043,1.66056,0.802171,0.64647,0.311402,0.269079,0.172398,0.104754,0.1045,0.0680227,0.0504597,0.0478575,0.0375245,0.0347904,0.0279355,0.0169332,0.0110224,0.00775486,0.00608049,0.00563746]#20 KL coefficients= 0 : [ -1.60239 -3.0203 0.900366 0.263466 -0.640423 0.95979 0.63832 -1.22693 1.8929 -1.07364 -1.1335 0.824662 0.355806 0.534215 0.25566 -2.18519 0.964064 -0.677883 -1.10842 -1.18151 ] 1 : [ -1.27147 0.864476 -0.339286 -2.44528 -0.762951 -1.32054 1.13688 -2.20545 0.640524 0.191444 -1.93962 0.487885 -0.350738 0.298397 0.804342 0.165465 -0.81021 -1.06212 1.20385 -1.34606 ] 2 : [ 0.132977 -0.151807 -0.881459 -0.0936935 -0.194083 -0.168069 0.911533 0.0730198 0.704187 0.987741 0.423058 0.839114 1.05843 0.560032 -0.61264 -0.338296 -0.27073 -0.694375 -0.767607 -0.656371 ] 3 : [ 0.183077 1.17949 0.97213 -0.575322 0.252678 -0.0467502 1.57401 -0.178257 -1.93233 -1.57764 -0.852779 -1.11244 -0.623046 0.0782933 -0.510651 0.656247 -0.222374 -0.19694 -0.250984 0.381449 ] 4 : [ -1.47044 -0.466059 0.119173 0.00106788 0.447117 -0.462723 -1.93382 0.193615 -0.548358 0.229376 -0.0253137 -0.534097 0.380739 1.20099 1.16166 0.452665 -1.65937 0.0902378 2.13384 -0.679656 ] 5 : [ -0.189955 0.115762 0.416216 1.27463 -1.86376 0.0855473 -0.095998 0.136914 -0.088579 -0.475802 0.418669 0.608524 -2.2811 2.41884 0.453642 0.158861 2.40542 0.93329 -1.12723 2.05513 ] 6 : [ -1.27128 0.721345 -0.0506906 0.0389693 1.06691 0.845977 1.02898 1.11837 -1.09343 0.519788 1.03402 -1.17951 0.0856535 1.09831 -0.57238 -0.281692 -1.77329 0.955157 0.798854 0.124055 ] 7 : [ 0.868727 -2.31581 0.293953 0.0616447 1.40545 -0.839921 0.206037 0.242091 1.29223 0.49684 1.0014 0.133985 1.72114 -0.538876 -1.06864 0.422318 -1.02584 0.29418 -0.568828 -0.142982 ] 8 : [ -1.57185 0.188797 -1.90798 -1.28075 -0.304271 -0.164739 0.396813 -1.76934 -0.308602 -0.368116 0.702189 0.279212 1.93849 -0.0951773 -0.202522 -0.768173 -1.13613 0.456591 -1.76618 1.41845 ] 9 : [ 1.86898 0.305721 -0.215186 -0.565808 0.49303 0.950718 -0.382939 -0.120791 0.853218 -0.0347473 0.156629 0.258525 0.256935 0.701716 -1.07751 -0.81906 1.68774 -0.975673 -1.20381 0.351974 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]]]#20 ) KL lift= (-3.56525 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.15107,0.498951],[0.181684,0.600063],[0.205678,0.679308],[0.222177,0.733799],[0.230579,0.76155],[0.230579,0.76155],[0.222177,0.733799],[0.205678,0.679308],[0.181684,0.600063],[0.15107,0.498951]]) - 3.89205 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.241795,0.798595],[0.269576,0.890349],[0.243483,0.804169],[0.16873,0.557278],[0.0602575,0.199017],[-0.0602575,-0.199017],[-0.16873,-0.557278],[-0.243483,-0.804169],[-0.269576,-0.890349],[-0.241795,-0.798595]]) + 0.806404 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.498951,-0.15107],[0.600063,-0.181684],[0.679308,-0.205678],[0.733799,-0.222177],[0.76155,-0.230579],[0.76155,-0.230579],[0.733799,-0.222177],[0.679308,-0.205678],[0.600063,-0.181684],[0.498951,-0.15107]]) + 0.211836 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.281134,0.928521],[0.260236,0.859501],[0.0956357,0.315863],[-0.121775,-0.402195],[-0.271941,-0.89816],[-0.271941,-0.89816],[-0.121775,-0.402195],[0.0956357,0.315863],[0.260236,0.859501],[0.281134,0.928521]]) - 0.357378 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.307573,1.01584],[0.197705,0.652977],[-0.125473,-0.41441],[-0.313274,-1.03468],[-0.163073,-0.538594],[0.163073,0.538594],[0.313274,1.03468],[0.125473,0.41441],[-0.197705,-0.652977],[-0.307573,-1.01584]]) + 0.49787 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.798595,-0.241795],[0.890349,-0.269576],[0.804169,-0.243483],[0.557278,-0.16873],[0.199017,-0.0602575],[-0.199017,0.0602575],[-0.557278,0.16873],[-0.804169,0.243483],[-0.890349,0.269576],[-0.798595,0.241795]]) + 0.265036 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.335402,1.10776],[0.0997019,0.329293],[-0.307719,-1.01633],[-0.185144,-0.611488],[0.256311,0.846539],[0.256311,0.846539],[-0.185144,-0.611488],[-0.307719,-1.01633],[0.0997019,0.329293],[0.335402,1.10776]]) - 0.397105 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.928521,-0.281134],[0.859501,-0.260236],[0.315863,-0.0956357],[-0.402195,0.121775],[-0.89816,0.271941],[-0.89816,0.271941],[-0.402195,0.121775],[0.315863,-0.0956357],[0.859501,-0.260236],[0.928521,-0.281134]]) + 0.611906 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.369181,1.21932],[-0.0258549,-0.085393],[-0.358677,-1.18463],[0.171573,0.566667],[0.288972,0.954411],[-0.288972,-0.954411],[-0.171573,-0.566667],[0.358677,1.18463],[0.0258549,0.085393],[-0.369181,-1.21932]]) - 0.280018 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.410047,1.35429],[-0.170194,-0.562114],[-0.231559,-0.764786],[0.413037,1.36417],[-0.201606,-0.66586],[-0.201606,-0.66586],[0.413037,1.36417],[-0.231559,-0.764786],[-0.170194,-0.562114],[0.410047,1.35429]]) - 0.25462 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.01584,-0.307573],[0.652977,-0.197705],[-0.41441,0.125473],[-1.03468,0.313274],[-0.538594,0.163073],[0.538594,-0.163073],[1.03468,-0.313274],[0.41441,-0.125473],[-0.652977,0.197705],[-1.01584,0.307573]]) + 0.180406 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.456396,1.50737],[-0.317826,-1.04971],[0.0434081,0.143367],[0.249564,0.824253],[-0.435865,-1.43956],[0.435865,1.43956],[-0.249564,-0.824253],[-0.0434081,-0.143367],[0.317826,1.04971],[-0.456396,-1.50737]]) + 0.068924 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.521554,1.72258],[-0.459434,-1.51741],[0.35879,1.185],[-0.228059,-0.753229],[0.0782057,0.258296],[0.0782057,0.258296],[-0.228059,-0.753229],[0.35879,1.185],[-0.459434,-1.51741],[0.521554,1.72258]]) + 0.0996428 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.396069,1.30813],[-0.370611,-1.22405],[0.351913,1.16229],[-0.339634,-1.12173],[0.33355,1.10164],[-0.33355,-1.10164],[0.339634,1.12173],[-0.351913,-1.16229],[0.370611,1.22405],[-0.396069,-1.30813]]) + 0.0427308 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.10776,-0.335402],[0.329293,-0.0997019],[-1.01633,0.307719],[-0.611488,0.185144],[0.846539,-0.256311],[0.846539,-0.256311],[-0.611488,0.185144],[-1.01633,0.307719],[0.329293,-0.0997019],[1.10776,-0.335402]]) - 0.284353 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.21932,-0.369181],[-0.085393,0.0258549],[-1.18463,0.358677],[0.566667,-0.171573],[0.954411,-0.288972],[-0.954411,0.288972],[-0.566667,0.171573],[1.18463,-0.358677],[0.085393,-0.0258549],[-1.21932,0.369181]]) + 0.101215 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.35429,-0.410047],[-0.562114,0.170194],[-0.764786,0.231559],[1.36417,-0.413037],[-0.66586,0.201606],[-0.66586,0.201606],[1.36417,-0.413037],[-0.764786,0.231559],[-0.562114,0.170194],[1.35429,-0.410047]]) - 0.0596955 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.50737,-0.456396],[-1.04971,0.317826],[0.143367,-0.0434081],[0.824253,-0.249564],[-1.43956,0.435865],[1.43956,-0.435865],[-0.824253,0.249564],[-0.143367,0.0434081],[1.04971,-0.317826],[-1.50737,0.456396]]) - 0.0864318 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.72258,-0.521554],[-1.51741,0.459434],[1.185,-0.35879],[-0.753229,0.228059],[0.258296,-0.0782057],[0.258296,-0.0782057],[-0.753229,0.228059],[1.185,-0.35879],[-1.51741,0.459434],[1.72258,-0.521554]]) - 0.0887117 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1.30813,-0.396069],[-1.22405,0.370611],[1.16229,-0.351913],[-1.12173,0.339634],[1.10164,-0.33355],[-1.10164,0.33355],[1.12173,-0.339634],[-1.16229,0.351913],[1.22405,-0.370611],[-1.30813,0.396069]])) KL lift as field= 0 : [ -1 -1.51696 -3.76756 ] 1 : [ -0.777778 -1.07669 -6.09243 ] 2 : [ -0.555556 -0.854224 -6.17513 ] 3 : [ -0.333333 -0.0683646 -5.1242 ] 4 : [ -0.111111 0.075551 -2.88829 ] 5 : [ 0.111111 0.259111 -2.62067 ] 6 : [ 0.333333 -0.0713508 -2.03275 ] 7 : [ 0.555556 -0.157604 1.3975 ] 8 : [ 0.777778 0.438098 2.31818 ] 9 : [ 1 0.717228 0.62749 ] openturns-1.9/python/test/t_KarhunenLoeveP1Algorithm_std.py000077500000000000000000000032211307543307100243110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: mesh = ot.IntervalMesher([9]).build(ot.Interval(-1.0, 1.0)) cov1D = ot.AbsoluteExponential([1.0]) algo = ot.KarhunenLoeveP1Algorithm(mesh, cov1D, 0.0) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) process = ot.GaussianProcess(cov1D, KLModes.getMesh()) coefficients = result.project(process.getSample(10)) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) R = ot.CorrelationMatrix(2) R[0, 1] = 0.5 scale = [1.0] amplitude = [1.0, 2.0] cov2D = ot.ExponentialModel(scale, amplitude, R) algo = ot.KarhunenLoeveP1Algorithm(mesh, cov2D, 0.0) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) process = ot.GaussianProcess(cov2D, KLModes.getMesh()) coefficients = result.project(process.getSample(10)) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) except: import sys print("t_KarhunenLoeveP1Algorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KarhunenLoeveP1Factory_std.expout000066400000000000000000000353421307543307100246740ustar00rootroot00000000000000KL modes= [field 0: 0 : [ -1 0.521319 ] 1 : [ -0.777778 0.626964 ] 2 : [ -0.555556 0.709762 ] 3 : [ -0.333333 0.766697 ] 4 : [ -0.111111 0.795692 ] 5 : [ 0.111111 0.795692 ] 6 : [ 0.333333 0.766697 ] 7 : [ 0.555556 0.709762 ] 8 : [ 0.777778 0.626964 ] 9 : [ 1 0.521319 ] field 1: 0 : [ -1 0.834397 ] 1 : [ -0.777778 0.930264 ] 2 : [ -0.555556 0.840221 ] 3 : [ -0.333333 0.582262 ] 4 : [ -0.111111 0.207939 ] 5 : [ 0.111111 -0.207939 ] 6 : [ 0.333333 -0.582262 ] 7 : [ 0.555556 -0.840221 ] 8 : [ 0.777778 -0.930264 ] 9 : [ 1 -0.834397 ] field 2: 0 : [ -1 0.970148 ] 1 : [ -0.777778 0.898034 ] 2 : [ -0.555556 0.330024 ] 3 : [ -0.333333 -0.420226 ] 4 : [ -0.111111 -0.938426 ] 5 : [ 0.111111 -0.938426 ] 6 : [ 0.333333 -0.420226 ] 7 : [ 0.555556 0.330024 ] 8 : [ 0.777778 0.898034 ] 9 : [ 1 0.970148 ] field 3: 0 : [ -1 1.06139 ] 1 : [ -0.777778 0.682251 ] 2 : [ -0.555556 -0.432988 ] 3 : [ -0.333333 -1.08106 ] 4 : [ -0.111111 -0.56274 ] 5 : [ 0.111111 0.56274 ] 6 : [ 0.333333 1.08106 ] 7 : [ 0.555556 0.432988 ] 8 : [ 0.777778 -0.682251 ] 9 : [ 1 -1.06139 ] field 4: 0 : [ -1 1.15742 ] 1 : [ -0.777778 0.344056 ] 2 : [ -0.555556 -1.06189 ] 3 : [ -0.333333 -0.638902 ] 4 : [ -0.111111 0.884491 ] 5 : [ 0.111111 0.884491 ] 6 : [ 0.333333 -0.638902 ] 7 : [ 0.555556 -1.06189 ] 8 : [ 0.777778 0.344056 ] 9 : [ 1 1.15742 ] field 5: 0 : [ -1 1.27398 ] 1 : [ -0.777778 -0.0892214 ] 2 : [ -0.555556 -1.23774 ] 3 : [ -0.333333 0.592071 ] 4 : [ -0.111111 0.997199 ] 5 : [ 0.111111 -0.997199 ] 6 : [ 0.333333 -0.592071 ] 7 : [ 0.555556 1.23774 ] 8 : [ 0.777778 0.0892214 ] 9 : [ 1 -1.27398 ] field 6: 0 : [ -1 1.41501 ] 1 : [ -0.777778 -0.587314 ] 2 : [ -0.555556 -0.799073 ] 3 : [ -0.333333 1.42533 ] 4 : [ -0.111111 -0.695712 ] 5 : [ 0.111111 -0.695712 ] 6 : [ 0.333333 1.42533 ] 7 : [ 0.555556 -0.799073 ] 8 : [ 0.777778 -0.587314 ] 9 : [ 1 1.41501 ] field 7: 0 : [ -1 1.57495 ] 1 : [ -0.777778 -1.09677 ] 2 : [ -0.555556 0.149795 ] 3 : [ -0.333333 0.861206 ] 4 : [ -0.111111 -1.5041 ] 5 : [ 0.111111 1.5041 ] 6 : [ 0.333333 -0.861206 ] 7 : [ 0.555556 -0.149795 ] 8 : [ 0.777778 1.09677 ] 9 : [ 1 -1.57495 ] field 8: 0 : [ -1 1.7998 ] 1 : [ -0.777778 -1.58544 ] 2 : [ -0.555556 1.23813 ] 3 : [ -0.333333 -0.786998 ] 4 : [ -0.111111 0.269876 ] 5 : [ 0.111111 0.269876 ] 6 : [ 0.333333 -0.786998 ] 7 : [ 0.555556 1.23813 ] 8 : [ 0.777778 -1.58544 ] 9 : [ 1 1.7998 ] field 9: 0 : [ -1 1.36677 ] 1 : [ -0.777778 -1.27892 ] 2 : [ -0.555556 1.2144 ] 3 : [ -0.333333 -1.17202 ] 4 : [ -0.111111 1.15103 ] 5 : [ 0.111111 -1.15103 ] 6 : [ 0.333333 1.17202 ] 7 : [ 0.555556 -1.2144 ] 8 : [ 0.777778 1.27892 ] 9 : [ 1 -1.36677 ]] KL eigenvalues= [1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557]#10 KL functions= Basis( [P1LagrangeEvaluation field : 0 : [ -1 0.521319 ] 1 : [ -0.777778 0.626964 ] 2 : [ -0.555556 0.709762 ] 3 : [ -0.333333 0.766697 ] 4 : [ -0.111111 0.795692 ] 5 : [ 0.111111 0.795692 ] 6 : [ 0.333333 0.766697 ] 7 : [ 0.555556 0.709762 ] 8 : [ 0.777778 0.626964 ] 9 : [ 1 0.521319 ],P1LagrangeEvaluation field : 0 : [ -1 0.834397 ] 1 : [ -0.777778 0.930264 ] 2 : [ -0.555556 0.840221 ] 3 : [ -0.333333 0.582262 ] 4 : [ -0.111111 0.207939 ] 5 : [ 0.111111 -0.207939 ] 6 : [ 0.333333 -0.582262 ] 7 : [ 0.555556 -0.840221 ] 8 : [ 0.777778 -0.930264 ] 9 : [ 1 -0.834397 ],P1LagrangeEvaluation field : 0 : [ -1 0.970148 ] 1 : [ -0.777778 0.898034 ] 2 : [ -0.555556 0.330024 ] 3 : [ -0.333333 -0.420226 ] 4 : [ -0.111111 -0.938426 ] 5 : [ 0.111111 -0.938426 ] 6 : [ 0.333333 -0.420226 ] 7 : [ 0.555556 0.330024 ] 8 : [ 0.777778 0.898034 ] 9 : [ 1 0.970148 ],P1LagrangeEvaluation field : 0 : [ -1 1.06139 ] 1 : [ -0.777778 0.682251 ] 2 : [ -0.555556 -0.432988 ] 3 : [ -0.333333 -1.08106 ] 4 : [ -0.111111 -0.56274 ] 5 : [ 0.111111 0.56274 ] 6 : [ 0.333333 1.08106 ] 7 : [ 0.555556 0.432988 ] 8 : [ 0.777778 -0.682251 ] 9 : [ 1 -1.06139 ],P1LagrangeEvaluation field : 0 : [ -1 1.15742 ] 1 : [ -0.777778 0.344056 ] 2 : [ -0.555556 -1.06189 ] 3 : [ -0.333333 -0.638902 ] 4 : [ -0.111111 0.884491 ] 5 : [ 0.111111 0.884491 ] 6 : [ 0.333333 -0.638902 ] 7 : [ 0.555556 -1.06189 ] 8 : [ 0.777778 0.344056 ] 9 : [ 1 1.15742 ],P1LagrangeEvaluation field : 0 : [ -1 1.27398 ] 1 : [ -0.777778 -0.0892214 ] 2 : [ -0.555556 -1.23774 ] 3 : [ -0.333333 0.592071 ] 4 : [ -0.111111 0.997199 ] 5 : [ 0.111111 -0.997199 ] 6 : [ 0.333333 -0.592071 ] 7 : [ 0.555556 1.23774 ] 8 : [ 0.777778 0.0892214 ] 9 : [ 1 -1.27398 ],P1LagrangeEvaluation field : 0 : [ -1 1.41501 ] 1 : [ -0.777778 -0.587314 ] 2 : [ -0.555556 -0.799073 ] 3 : [ -0.333333 1.42533 ] 4 : [ -0.111111 -0.695712 ] 5 : [ 0.111111 -0.695712 ] 6 : [ 0.333333 1.42533 ] 7 : [ 0.555556 -0.799073 ] 8 : [ 0.777778 -0.587314 ] 9 : [ 1 1.41501 ],P1LagrangeEvaluation field : 0 : [ -1 1.57495 ] 1 : [ -0.777778 -1.09677 ] 2 : [ -0.555556 0.149795 ] 3 : [ -0.333333 0.861206 ] 4 : [ -0.111111 -1.5041 ] 5 : [ 0.111111 1.5041 ] 6 : [ 0.333333 -0.861206 ] 7 : [ 0.555556 -0.149795 ] 8 : [ 0.777778 1.09677 ] 9 : [ 1 -1.57495 ],P1LagrangeEvaluation field : 0 : [ -1 1.7998 ] 1 : [ -0.777778 -1.58544 ] 2 : [ -0.555556 1.23813 ] 3 : [ -0.333333 -0.786998 ] 4 : [ -0.111111 0.269876 ] 5 : [ 0.111111 0.269876 ] 6 : [ 0.333333 -0.786998 ] 7 : [ 0.555556 1.23813 ] 8 : [ 0.777778 -1.58544 ] 9 : [ 1 1.7998 ],P1LagrangeEvaluation field : 0 : [ -1 1.36677 ] 1 : [ -0.777778 -1.27892 ] 2 : [ -0.555556 1.2144 ] 3 : [ -0.333333 -1.17202 ] 4 : [ -0.111111 1.15103 ] 5 : [ 0.111111 -1.15103 ] 6 : [ 0.333333 1.17202 ] 7 : [ 0.555556 -1.2144 ] 8 : [ 0.777778 1.27892 ] 9 : [ 1 -1.36677 ]]#10 ) KL eigenvalues= [1.15052,0.385929,0.150245,0.0723722,0.0400667,0.0242866,0.015809,0.0111225,0.00872099,0.00808557]#10 KL functions= Basis( [P1LagrangeEvaluation field : 0 : [ -1 0.15107 0.498951 ] 1 : [ -0.777778 0.181684 0.600063 ] 2 : [ -0.555556 0.205678 0.679308 ] 3 : [ -0.333333 0.222177 0.733799 ] 4 : [ -0.111111 0.230579 0.76155 ] 5 : [ 0.111111 0.230579 0.76155 ] 6 : [ 0.333333 0.222177 0.733799 ] 7 : [ 0.555556 0.205678 0.679308 ] 8 : [ 0.777778 0.181684 0.600063 ] 9 : [ 1 0.15107 0.498951 ],P1LagrangeEvaluation field : 0 : [ -1 0.241795 0.798595 ] 1 : [ -0.777778 0.269576 0.890349 ] 2 : [ -0.555556 0.243483 0.804169 ] 3 : [ -0.333333 0.16873 0.557278 ] 4 : [ -0.111111 0.0602575 0.199017 ] 5 : [ 0.111111 -0.0602575 -0.199017 ] 6 : [ 0.333333 -0.16873 -0.557278 ] 7 : [ 0.555556 -0.243483 -0.804169 ] 8 : [ 0.777778 -0.269576 -0.890349 ] 9 : [ 1 -0.241795 -0.798595 ],P1LagrangeEvaluation field : 0 : [ -1 0.498951 -0.15107 ] 1 : [ -0.777778 0.600063 -0.181684 ] 2 : [ -0.555556 0.679308 -0.205678 ] 3 : [ -0.333333 0.733799 -0.222177 ] 4 : [ -0.111111 0.76155 -0.230579 ] 5 : [ 0.111111 0.76155 -0.230579 ] 6 : [ 0.333333 0.733799 -0.222177 ] 7 : [ 0.555556 0.679308 -0.205678 ] 8 : [ 0.777778 0.600063 -0.181684 ] 9 : [ 1 0.498951 -0.15107 ],P1LagrangeEvaluation field : 0 : [ -1 0.281134 0.928521 ] 1 : [ -0.777778 0.260236 0.859501 ] 2 : [ -0.555556 0.0956357 0.315863 ] 3 : [ -0.333333 -0.121775 -0.402195 ] 4 : [ -0.111111 -0.271941 -0.89816 ] 5 : [ 0.111111 -0.271941 -0.89816 ] 6 : [ 0.333333 -0.121775 -0.402195 ] 7 : [ 0.555556 0.0956357 0.315863 ] 8 : [ 0.777778 0.260236 0.859501 ] 9 : [ 1 0.281134 0.928521 ],P1LagrangeEvaluation field : 0 : [ -1 0.307573 1.01584 ] 1 : [ -0.777778 0.197705 0.652977 ] 2 : [ -0.555556 -0.125473 -0.41441 ] 3 : [ -0.333333 -0.313274 -1.03468 ] 4 : [ -0.111111 -0.163073 -0.538594 ] 5 : [ 0.111111 0.163073 0.538594 ] 6 : [ 0.333333 0.313274 1.03468 ] 7 : [ 0.555556 0.125473 0.41441 ] 8 : [ 0.777778 -0.197705 -0.652977 ] 9 : [ 1 -0.307573 -1.01584 ],P1LagrangeEvaluation field : 0 : [ -1 0.798595 -0.241795 ] 1 : [ -0.777778 0.890349 -0.269576 ] 2 : [ -0.555556 0.804169 -0.243483 ] 3 : [ -0.333333 0.557278 -0.16873 ] 4 : [ -0.111111 0.199017 -0.0602575 ] 5 : [ 0.111111 -0.199017 0.0602575 ] 6 : [ 0.333333 -0.557278 0.16873 ] 7 : [ 0.555556 -0.804169 0.243483 ] 8 : [ 0.777778 -0.890349 0.269576 ] 9 : [ 1 -0.798595 0.241795 ],P1LagrangeEvaluation field : 0 : [ -1 0.335402 1.10776 ] 1 : [ -0.777778 0.0997019 0.329293 ] 2 : [ -0.555556 -0.307719 -1.01633 ] 3 : [ -0.333333 -0.185144 -0.611488 ] 4 : [ -0.111111 0.256311 0.846539 ] 5 : [ 0.111111 0.256311 0.846539 ] 6 : [ 0.333333 -0.185144 -0.611488 ] 7 : [ 0.555556 -0.307719 -1.01633 ] 8 : [ 0.777778 0.0997019 0.329293 ] 9 : [ 1 0.335402 1.10776 ],P1LagrangeEvaluation field : 0 : [ -1 0.928521 -0.281134 ] 1 : [ -0.777778 0.859501 -0.260236 ] 2 : [ -0.555556 0.315863 -0.0956357 ] 3 : [ -0.333333 -0.402195 0.121775 ] 4 : [ -0.111111 -0.89816 0.271941 ] 5 : [ 0.111111 -0.89816 0.271941 ] 6 : [ 0.333333 -0.402195 0.121775 ] 7 : [ 0.555556 0.315863 -0.0956357 ] 8 : [ 0.777778 0.859501 -0.260236 ] 9 : [ 1 0.928521 -0.281134 ],P1LagrangeEvaluation field : 0 : [ -1 0.369181 1.21932 ] 1 : [ -0.777778 -0.0258549 -0.085393 ] 2 : [ -0.555556 -0.358677 -1.18463 ] 3 : [ -0.333333 0.171573 0.566667 ] 4 : [ -0.111111 0.288972 0.954411 ] 5 : [ 0.111111 -0.288972 -0.954411 ] 6 : [ 0.333333 -0.171573 -0.566667 ] 7 : [ 0.555556 0.358677 1.18463 ] 8 : [ 0.777778 0.0258549 0.085393 ] 9 : [ 1 -0.369181 -1.21932 ],P1LagrangeEvaluation field : 0 : [ -1 0.410047 1.35429 ] 1 : [ -0.777778 -0.170194 -0.562114 ] 2 : [ -0.555556 -0.231559 -0.764786 ] 3 : [ -0.333333 0.413037 1.36417 ] 4 : [ -0.111111 -0.201606 -0.66586 ] 5 : [ 0.111111 -0.201606 -0.66586 ] 6 : [ 0.333333 0.413037 1.36417 ] 7 : [ 0.555556 -0.231559 -0.764786 ] 8 : [ 0.777778 -0.170194 -0.562114 ] 9 : [ 1 0.410047 1.35429 ],P1LagrangeEvaluation field : 0 : [ -1 1.01584 -0.307573 ] 1 : [ -0.777778 0.652977 -0.197705 ] 2 : [ -0.555556 -0.41441 0.125473 ] 3 : [ -0.333333 -1.03468 0.313274 ] 4 : [ -0.111111 -0.538594 0.163073 ] 5 : [ 0.111111 0.538594 -0.163073 ] 6 : [ 0.333333 1.03468 -0.313274 ] 7 : [ 0.555556 0.41441 -0.125473 ] 8 : [ 0.777778 -0.652977 0.197705 ] 9 : [ 1 -1.01584 0.307573 ],P1LagrangeEvaluation field : 0 : [ -1 0.456396 1.50737 ] 1 : [ -0.777778 -0.317826 -1.04971 ] 2 : [ -0.555556 0.0434081 0.143367 ] 3 : [ -0.333333 0.249564 0.824253 ] 4 : [ -0.111111 -0.435865 -1.43956 ] 5 : [ 0.111111 0.435865 1.43956 ] 6 : [ 0.333333 -0.249564 -0.824253 ] 7 : [ 0.555556 -0.0434081 -0.143367 ] 8 : [ 0.777778 0.317826 1.04971 ] 9 : [ 1 -0.456396 -1.50737 ],P1LagrangeEvaluation field : 0 : [ -1 0.521554 1.72258 ] 1 : [ -0.777778 -0.459434 -1.51741 ] 2 : [ -0.555556 0.35879 1.185 ] 3 : [ -0.333333 -0.228059 -0.753229 ] 4 : [ -0.111111 0.0782057 0.258296 ] 5 : [ 0.111111 0.0782057 0.258296 ] 6 : [ 0.333333 -0.228059 -0.753229 ] 7 : [ 0.555556 0.35879 1.185 ] 8 : [ 0.777778 -0.459434 -1.51741 ] 9 : [ 1 0.521554 1.72258 ],P1LagrangeEvaluation field : 0 : [ -1 0.396069 1.30813 ] 1 : [ -0.777778 -0.370611 -1.22405 ] 2 : [ -0.555556 0.351913 1.16229 ] 3 : [ -0.333333 -0.339634 -1.12173 ] 4 : [ -0.111111 0.33355 1.10164 ] 5 : [ 0.111111 -0.33355 -1.10164 ] 6 : [ 0.333333 0.339634 1.12173 ] 7 : [ 0.555556 -0.351913 -1.16229 ] 8 : [ 0.777778 0.370611 1.22405 ] 9 : [ 1 -0.396069 -1.30813 ],P1LagrangeEvaluation field : 0 : [ -1 1.10776 -0.335402 ] 1 : [ -0.777778 0.329293 -0.0997019 ] 2 : [ -0.555556 -1.01633 0.307719 ] 3 : [ -0.333333 -0.611488 0.185144 ] 4 : [ -0.111111 0.846539 -0.256311 ] 5 : [ 0.111111 0.846539 -0.256311 ] 6 : [ 0.333333 -0.611488 0.185144 ] 7 : [ 0.555556 -1.01633 0.307719 ] 8 : [ 0.777778 0.329293 -0.0997019 ] 9 : [ 1 1.10776 -0.335402 ],P1LagrangeEvaluation field : 0 : [ -1 1.21932 -0.369181 ] 1 : [ -0.777778 -0.085393 0.0258549 ] 2 : [ -0.555556 -1.18463 0.358677 ] 3 : [ -0.333333 0.566667 -0.171573 ] 4 : [ -0.111111 0.954411 -0.288972 ] 5 : [ 0.111111 -0.954411 0.288972 ] 6 : [ 0.333333 -0.566667 0.171573 ] 7 : [ 0.555556 1.18463 -0.358677 ] 8 : [ 0.777778 0.085393 -0.0258549 ] 9 : [ 1 -1.21932 0.369181 ],P1LagrangeEvaluation field : 0 : [ -1 1.35429 -0.410047 ] 1 : [ -0.777778 -0.562114 0.170194 ] 2 : [ -0.555556 -0.764786 0.231559 ] 3 : [ -0.333333 1.36417 -0.413037 ] 4 : [ -0.111111 -0.66586 0.201606 ] 5 : [ 0.111111 -0.66586 0.201606 ] 6 : [ 0.333333 1.36417 -0.413037 ] 7 : [ 0.555556 -0.764786 0.231559 ] 8 : [ 0.777778 -0.562114 0.170194 ] 9 : [ 1 1.35429 -0.410047 ],P1LagrangeEvaluation field : 0 : [ -1 1.50737 -0.456396 ] 1 : [ -0.777778 -1.04971 0.317826 ] 2 : [ -0.555556 0.143367 -0.0434081 ] 3 : [ -0.333333 0.824253 -0.249564 ] 4 : [ -0.111111 -1.43956 0.435865 ] 5 : [ 0.111111 1.43956 -0.435865 ] 6 : [ 0.333333 -0.824253 0.249564 ] 7 : [ 0.555556 -0.143367 0.0434081 ] 8 : [ 0.777778 1.04971 -0.317826 ] 9 : [ 1 -1.50737 0.456396 ],P1LagrangeEvaluation field : 0 : [ -1 1.72258 -0.521554 ] 1 : [ -0.777778 -1.51741 0.459434 ] 2 : [ -0.555556 1.185 -0.35879 ] 3 : [ -0.333333 -0.753229 0.228059 ] 4 : [ -0.111111 0.258296 -0.0782057 ] 5 : [ 0.111111 0.258296 -0.0782057 ] 6 : [ 0.333333 -0.753229 0.228059 ] 7 : [ 0.555556 1.185 -0.35879 ] 8 : [ 0.777778 -1.51741 0.459434 ] 9 : [ 1 1.72258 -0.521554 ],P1LagrangeEvaluation field : 0 : [ -1 1.30813 -0.396069 ] 1 : [ -0.777778 -1.22405 0.370611 ] 2 : [ -0.555556 1.16229 -0.351913 ] 3 : [ -0.333333 -1.12173 0.339634 ] 4 : [ -0.111111 1.10164 -0.33355 ] 5 : [ 0.111111 -1.10164 0.33355 ] 6 : [ 0.333333 1.12173 -0.339634 ] 7 : [ 0.555556 -1.16229 0.351913 ] 8 : [ 0.777778 1.22405 -0.370611 ] 9 : [ 1 -1.30813 0.396069 ]]#20 ) KL eigenvalues= [4.95043,1.66056,0.802171,0.64647,0.311402,0.269079,0.172398,0.104754,0.1045,0.0680227,0.0504597,0.0478575,0.0375245,0.0347904,0.0279355,0.0169332,0.0110224,0.00775486,0.00608049,0.00563746]#20 openturns-1.9/python/test/t_KarhunenLoeveP1Factory_std.py000077500000000000000000000017451307543307100240030ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: mesh = ot.IntervalMesher(ot.Indices(1, 9)).build(ot.Interval(-1.0, 1.0)) factory = ot.KarhunenLoeveP1Factory(mesh, 0.0) eigenValues = ot.Point() KLModes = factory.buildAsProcessSample( ot.AbsoluteExponential([1.0]), eigenValues) print("KL modes=", KLModes) print("KL eigenvalues=", eigenValues) cov1D = ot.AbsoluteExponential([1.0]) KLFunctions = factory.build(cov1D, eigenValues) print("KL functions=", KLFunctions) print("KL eigenvalues=", eigenValues) R = ot.CorrelationMatrix(2, [1.0, 0.5, 0.5, 1.0]) scale = [1.0] amplitude = [1.0, 2.0] cov2D = ot.ExponentialModel(scale, amplitude, R) KLFunctions = factory.build(cov2D, eigenValues) print("KL functions=", KLFunctions) print("KL eigenvalues=", eigenValues) except: import sys print("t_KarhunenLoeveP1Factory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KarhunenLoeveQuadratureAlgorithm_std.expout000066400000000000000000000621151307543307100270460ustar00rootroot00000000000000KL modes= [field 0: 0 : [ -0.997152 0.52213 ] 1 : [ -0.975687 0.533176 ] 2 : [ -0.945485 0.54841 ] 3 : [ -0.934372 0.553923 ] 4 : [ -0.905005 0.568246 ] 5 : [ -0.887838 0.57645 ] 6 : [ -0.872969 0.583455 ] 7 : [ -0.85371 0.592384 ] 8 : [ -0.823519 0.606054 ] 9 : [ -0.807677 0.613062 ] 10 : [ -0.794151 0.618956 ] 11 : [ -0.775176 0.627082 ] 12 : [ -0.74529 0.639538 ] 13 : [ -0.723448 0.648374 ] 14 : [ -0.701219 0.657129 ] 15 : [ -0.698789 0.658072 ] 16 : [ -0.667931 0.669788 ] 17 : [ -0.657676 0.673577 ] 18 : [ -0.639273 0.680244 ] 19 : [ -0.618418 0.687592 ] 20 : [ -0.594967 0.695589 ] 21 : [ -0.573032 0.702812 ] 22 : [ -0.555073 0.708538 ] 23 : [ -0.523508 0.71819 ] 24 : [ -0.515387 0.720588 ] 25 : [ -0.497085 0.725862 ] 26 : [ -0.470133 0.733299 ] 27 : [ -0.445757 0.739686 ] 28 : [ -0.423022 0.745348 ] 29 : [ -0.414115 0.747489 ] 30 : [ -0.395004 0.751933 ] 31 : [ -0.363394 0.758837 ] 32 : [ -0.344698 0.762656 ] 33 : [ -0.330302 0.765462 ] 34 : [ -0.307494 0.769667 ] 35 : [ -0.299879 0.771006 ] 36 : [ -0.267949 0.776256 ] 37 : [ -0.255477 0.778147 ] 38 : [ -0.229506 0.781799 ] 39 : [ -0.211218 0.784137 ] 40 : [ -0.186932 0.786942 ] 41 : [ -0.176419 0.78805 ] 42 : [ -0.152021 0.790373 ] 43 : [ -0.135259 0.791767 ] 44 : [ -0.117392 0.793073 ] 45 : [ -0.0829355 0.795063 ] 46 : [ -0.0693938 0.795654 ] 47 : [ -0.0579699 0.796069 ] 48 : [ -0.0265762 0.796816 ] 49 : [ -0.00971196 0.796978 ] 50 : [ 0.0160519 0.796902 ] 51 : [ 0.0281132 0.796733 ] 52 : [ 0.046915 0.796299 ] 53 : [ 0.0624505 0.795783 ] 54 : [ 0.0984453 0.794045 ] 55 : [ 0.109626 0.793351 ] 56 : [ 0.134402 0.791553 ] 57 : [ 0.151197 0.79013 ] 58 : [ 0.179117 0.787402 ] 59 : [ 0.186419 0.786614 ] 60 : [ 0.211151 0.783715 ] 61 : [ 0.229805 0.781295 ] 62 : [ 0.244912 0.779189 ] 63 : [ 0.269095 0.775545 ] 64 : [ 0.280399 0.773727 ] 65 : [ 0.318234 0.767114 ] 66 : [ 0.3363 0.763671 ] 67 : [ 0.34476 0.761996 ] 68 : [ 0.366515 0.757503 ] 69 : [ 0.388858 0.752615 ] 70 : [ 0.405719 0.748743 ] 71 : [ 0.435464 0.741531 ] 72 : [ 0.440186 0.740342 ] 73 : [ 0.462974 0.734432 ] 74 : [ 0.494895 0.725683 ] 75 : [ 0.502946 0.72339 ] 76 : [ 0.537883 0.713043 ] 77 : [ 0.554339 0.707948 ] 78 : [ 0.577697 0.700474 ] 79 : [ 0.587024 0.697411 ] 80 : [ 0.619129 0.686528 ] 81 : [ 0.637203 0.680173 ] 82 : [ 0.656048 0.673373 ] 83 : [ 0.677155 0.66555 ] 84 : [ 0.6909 0.660338 ] 85 : [ 0.714451 0.651196 ] 86 : [ 0.730491 0.644818 ] 87 : [ 0.753776 0.635345 ] 88 : [ 0.778547 0.624991 ] 89 : [ 0.788847 0.620603 ] 90 : [ 0.811293 0.610875 ] 91 : [ 0.828009 0.603484 ] 92 : [ 0.851558 0.592865 ] 93 : [ 0.870026 0.58437 ] 94 : [ 0.887803 0.576057 ] 95 : [ 0.913161 0.563971 ] 96 : [ 0.93174 0.554949 ] 97 : [ 0.955812 0.543055 ] 98 : [ 0.97489 0.533468 ] 99 : [ 0.987574 0.527016 ] field 1: 0 : [ -0.997152 0.798699 ] 1 : [ -0.975687 0.822805 ] 2 : [ -0.945485 0.852162 ] 3 : [ -0.934372 0.86165 ] 4 : [ -0.905005 0.883412 ] 5 : [ -0.887838 0.893951 ] 6 : [ -0.872969 0.901809 ] 7 : [ -0.85371 0.910266 ] 8 : [ -0.823519 0.919714 ] 9 : [ -0.807677 0.922858 ] 10 : [ -0.794151 0.924579 ] 11 : [ -0.775176 0.925526 ] 12 : [ -0.74529 0.923637 ] 13 : [ -0.723448 0.919721 ] 14 : [ -0.701219 0.91361 ] 15 : [ -0.698789 0.912815 ] 16 : [ -0.667931 0.900593 ] 17 : [ -0.657676 0.895678 ] 18 : [ -0.639273 0.885822 ] 19 : [ -0.618418 0.873086 ] 20 : [ -0.594967 0.856841 ] 21 : [ -0.573032 0.839869 ] 22 : [ -0.555073 0.824741 ] 23 : [ -0.523508 0.795572 ] 24 : [ -0.515387 0.787555 ] 25 : [ -0.497085 0.768746 ] 26 : [ -0.470133 0.73924 ] 27 : [ -0.445757 0.71079 ] 28 : [ -0.423022 0.682825 ] 29 : [ -0.414115 0.671507 ] 30 : [ -0.395004 0.646567 ] 31 : [ -0.363394 0.603441 ] 32 : [ -0.344698 0.576899 ] 33 : [ -0.330302 0.555967 ] 34 : [ -0.307494 0.521976 ] 35 : [ -0.299879 0.510411 ] 36 : [ -0.267949 0.460814 ] 37 : [ -0.255477 0.440987 ] 38 : [ -0.229506 0.398953 ] 39 : [ -0.211218 0.368792 ] 40 : [ -0.186932 0.328094 ] 41 : [ -0.176419 0.310267 ] 42 : [ -0.152021 0.268459 ] 43 : [ -0.135259 0.239419 ] 44 : [ -0.117392 0.208214 ] 45 : [ -0.0829355 0.147437 ] 46 : [ -0.0693938 0.123377 ] 47 : [ -0.0579699 0.10302 ] 48 : [ -0.0265762 0.0468749 ] 49 : [ -0.00971196 0.0166392 ] 50 : [ 0.0160519 -0.0295729 ] 51 : [ 0.0281132 -0.0511906 ] 52 : [ 0.046915 -0.0848358 ] 53 : [ 0.0624505 -0.112562 ] 54 : [ 0.0984453 -0.176416 ] 55 : [ 0.109626 -0.196107 ] 56 : [ 0.134402 -0.239438 ] 57 : [ 0.151197 -0.268534 ] 58 : [ 0.179117 -0.316324 ] 59 : [ 0.186419 -0.328689 ] 60 : [ 0.211151 -0.370117 ] 61 : [ 0.229805 -0.400858 ] 62 : [ 0.244912 -0.425403 ] 63 : [ 0.269095 -0.463991 ] 64 : [ 0.280399 -0.481712 ] 65 : [ 0.318234 -0.539413 ] 66 : [ 0.3363 -0.566024 ] 67 : [ 0.34476 -0.578262 ] 68 : [ 0.366515 -0.609048 ] 69 : [ 0.388858 -0.639584 ] 70 : [ 0.405719 -0.661865 ] 71 : [ 0.435464 -0.699474 ] 72 : [ 0.440186 -0.705237 ] 73 : [ 0.462974 -0.732213 ] 74 : [ 0.494895 -0.767572 ] 75 : [ 0.502946 -0.776022 ] 76 : [ 0.537883 -0.810397 ] 77 : [ 0.554339 -0.825248 ] 78 : [ 0.577697 -0.844782 ] 79 : [ 0.587024 -0.852061 ] 80 : [ 0.619129 -0.874759 ] 81 : [ 0.637203 -0.885876 ] 82 : [ 0.656048 -0.896145 ] 83 : [ 0.677155 -0.905996 ] 84 : [ 0.6909 -0.911447 ] 85 : [ 0.714451 -0.918971 ] 86 : [ 0.730491 -0.922749 ] 87 : [ 0.753776 -0.926233 ] 88 : [ 0.778547 -0.927266 ] 89 : [ 0.788847 -0.926863 ] 90 : [ 0.811293 -0.924249 ] 91 : [ 0.828009 -0.920725 ] 92 : [ 0.851558 -0.913417 ] 93 : [ 0.870026 -0.905722 ] 94 : [ 0.887803 -0.896648 ] 95 : [ 0.913161 -0.880805 ] 96 : [ 0.93174 -0.866985 ] 97 : [ 0.955812 -0.846228 ] 98 : [ 0.97489 -0.827441 ] 99 : [ 0.987574 -0.813784 ] field 2: 0 : [ -0.997152 0.850404 ] 1 : [ -0.975687 0.899966 ] 2 : [ -0.945485 0.949806 ] 3 : [ -0.934372 0.962633 ] 4 : [ -0.905005 0.983247 ] 5 : [ -0.887838 0.986893 ] 6 : [ -0.872969 0.985366 ] 7 : [ -0.85371 0.977292 ] 8 : [ -0.823519 0.95181 ] 9 : [ -0.807677 0.932671 ] 10 : [ -0.794151 0.913427 ] 11 : [ -0.775176 0.882224 ] 12 : [ -0.74529 0.823994 ] 13 : [ -0.723448 0.77516 ] 14 : [ -0.701219 0.720684 ] 15 : [ -0.698789 0.71446 ] 16 : [ -0.667931 0.631342 ] 17 : [ -0.657676 0.602196 ] 18 : [ -0.639273 0.548244 ] 19 : [ -0.618418 0.484868 ] 20 : [ -0.594967 0.411275 ] 21 : [ -0.573032 0.340707 ] 22 : [ -0.555073 0.282013 ] 23 : [ -0.523508 0.177624 ] 24 : [ -0.515387 0.15064 ] 25 : [ -0.497085 0.089819 ] 26 : [ -0.470133 0.000632331 ] 27 : [ -0.445757 -0.0791199 ] 28 : [ -0.423022 -0.152267 ] 29 : [ -0.414115 -0.180517 ] 30 : [ -0.395004 -0.240202 ] 31 : [ -0.363394 -0.335692 ] 32 : [ -0.344698 -0.389966 ] 33 : [ -0.330302 -0.430506 ] 34 : [ -0.307494 -0.492299 ] 35 : [ -0.299879 -0.512226 ] 36 : [ -0.267949 -0.591642 ] 37 : [ -0.255477 -0.620747 ] 38 : [ -0.229506 -0.677666 ] 39 : [ -0.211218 -0.714624 ] 40 : [ -0.186932 -0.759516 ] 41 : [ -0.176419 -0.777419 ] 42 : [ -0.152021 -0.815293 ] 43 : [ -0.135259 -0.838262 ] 44 : [ -0.117392 -0.859946 ] 45 : [ -0.0829355 -0.89341 ] 46 : [ -0.0693938 -0.903497 ] 47 : [ -0.0579699 -0.910644 ] 48 : [ -0.0265762 -0.923807 ] 49 : [ -0.00971196 -0.92693 ] 50 : [ 0.0160519 -0.926355 ] 51 : [ 0.0281132 -0.923865 ] 52 : [ 0.046915 -0.917166 ] 53 : [ 0.0624505 -0.909053 ] 54 : [ 0.0984453 -0.881384 ] 55 : [ 0.109626 -0.870299 ] 56 : [ 0.134402 -0.841607 ] 57 : [ 0.151197 -0.81898 ] 58 : [ 0.179117 -0.775834 ] 59 : [ 0.186419 -0.763438 ] 60 : [ 0.211151 -0.71813 ] 61 : [ 0.229805 -0.680665 ] 62 : [ 0.244912 -0.648334 ] 63 : [ 0.269095 -0.593024 ] 64 : [ 0.280399 -0.565735 ] 65 : [ 0.318234 -0.468214 ] 66 : [ 0.3363 -0.418544 ] 67 : [ 0.34476 -0.394651 ] 68 : [ 0.366515 -0.331485 ] 69 : [ 0.388858 -0.264267 ] 70 : [ 0.405719 -0.212149 ] 71 : [ 0.435464 -0.117765 ] 72 : [ 0.440186 -0.102538 ] 73 : [ 0.462974 -0.0283093 ] 74 : [ 0.494895 0.0771572 ] 75 : [ 0.502946 0.103913 ] 76 : [ 0.537883 0.220044 ] 77 : [ 0.554339 0.27444 ] 78 : [ 0.577697 0.35084 ] 79 : [ 0.587024 0.38098 ] 80 : [ 0.619129 0.482495 ] 81 : [ 0.637203 0.537717 ] 82 : [ 0.656048 0.593451 ] 83 : [ 0.677155 0.65324 ] 84 : [ 0.6909 0.69047 ] 85 : [ 0.714451 0.750695 ] 86 : [ 0.730491 0.788842 ] 87 : [ 0.753776 0.839565 ] 88 : [ 0.778547 0.886773 ] 89 : [ 0.788847 0.904155 ] 90 : [ 0.811293 0.937049 ] 91 : [ 0.828009 0.956785 ] 92 : [ 0.851558 0.977092 ] 93 : [ 0.870026 0.986407 ] 94 : [ 0.887803 0.989476 ] 95 : [ 0.913161 0.983106 ] 96 : [ 0.93174 0.969858 ] 97 : [ 0.955812 0.941102 ] 98 : [ 0.97489 0.908426 ] 99 : [ 0.987574 0.881595 ] field 3: 0 : [ -0.997152 2.02098 ] 1 : [ -0.975687 1.79399 ] 2 : [ -0.945485 1.49449 ] 3 : [ -0.934372 1.39003 ] 4 : [ -0.905005 1.12846 ] 5 : [ -0.887838 0.985105 ] 6 : [ -0.872969 0.866508 ] 7 : [ -0.85371 0.720461 ] 8 : [ -0.823519 0.508248 ] 9 : [ -0.807677 0.404882 ] 10 : [ -0.794151 0.320872 ] 11 : [ -0.775176 0.209497 ] 12 : [ -0.74529 0.0490223 ] 13 : [ -0.723448 -0.0570378 ] 14 : [ -0.701219 -0.155543 ] 15 : [ -0.698789 -0.165748 ] 16 : [ -0.667931 -0.285883 ] 17 : [ -0.657676 -0.322008 ] 18 : [ -0.639273 -0.38222 ] 19 : [ -0.618418 -0.443461 ] 20 : [ -0.594967 -0.503728 ] 21 : [ -0.573032 -0.552141 ] 22 : [ -0.555073 -0.586247 ] 23 : [ -0.523508 -0.634605 ] 24 : [ -0.515387 -0.644737 ] 25 : [ -0.497085 -0.664227 ] 26 : [ -0.470133 -0.684776 ] 27 : [ -0.445757 -0.695377 ] 28 : [ -0.423022 -0.698773 ] 29 : [ -0.414115 -0.698464 ] 30 : [ -0.395004 -0.694805 ] 31 : [ -0.363394 -0.680201 ] 32 : [ -0.344698 -0.666832 ] 33 : [ -0.330302 -0.654276 ] 34 : [ -0.307494 -0.630566 ] 35 : [ -0.299879 -0.621653 ] 36 : [ -0.267949 -0.579194 ] 37 : [ -0.255477 -0.560506 ] 38 : [ -0.229506 -0.518113 ] 39 : [ -0.211218 -0.485642 ] 40 : [ -0.186932 -0.439495 ] 41 : [ -0.176419 -0.418535 ] 42 : [ -0.152021 -0.367822 ] 43 : [ -0.135259 -0.331469 ] 44 : [ -0.117392 -0.291521 ] 45 : [ -0.0829355 -0.211564 ] 46 : [ -0.0693938 -0.179279 ] 47 : [ -0.0579699 -0.151743 ] 48 : [ -0.0265762 -0.0749962 ] 49 : [ -0.00971196 -0.0333376 ] 50 : [ 0.0160519 0.0305176 ] 51 : [ 0.0281132 0.0603859 ] 52 : [ 0.046915 0.106764 ] 53 : [ 0.0624505 0.144805 ] 54 : [ 0.0984453 0.231372 ] 55 : [ 0.109626 0.257661 ] 56 : [ 0.134402 0.314615 ] 57 : [ 0.151197 0.352028 ] 58 : [ 0.179117 0.41169 ] 59 : [ 0.186419 0.426709 ] 60 : [ 0.211151 0.475562 ] 61 : [ 0.229805 0.510158 ] 62 : [ 0.244912 0.536615 ] 63 : [ 0.269095 0.57581 ] 64 : [ 0.280399 0.592702 ] 65 : [ 0.318234 0.641984 ] 66 : [ 0.3363 0.661253 ] 67 : [ 0.34476 0.669262 ] 68 : [ 0.366515 0.686738 ] 69 : [ 0.388858 0.699762 ] 70 : [ 0.405719 0.706098 ] 71 : [ 0.435464 0.709499 ] 72 : [ 0.440186 0.709086 ] 73 : [ 0.462974 0.703254 ] 74 : [ 0.494895 0.683893 ] 75 : [ 0.502946 0.676852 ] 76 : [ 0.537883 0.635687 ] 77 : [ 0.554339 0.610081 ] 78 : [ 0.577697 0.56657 ] 79 : [ 0.587024 0.546773 ] 80 : [ 0.619129 0.467648 ] 81 : [ 0.637203 0.415357 ] 82 : [ 0.656048 0.354657 ] 83 : [ 0.677155 0.278952 ] 84 : [ 0.6909 0.225139 ] 85 : [ 0.714451 0.124417 ] 86 : [ 0.730491 0.0494908 ] 87 : [ 0.753776 -0.0686784 ] 88 : [ 0.778547 -0.206985 ] 89 : [ 0.788847 -0.26842 ] 90 : [ 0.811293 -0.410499 ] 91 : [ 0.828009 -0.523758 ] 92 : [ 0.851558 -0.694416 ] 93 : [ 0.870026 -0.837554 ] 94 : [ 0.887803 -0.983247 ] 95 : [ 0.913161 -1.20485 ] 96 : [ 0.93174 -1.37774 ] 97 : [ 0.955812 -1.61533 ] 98 : [ 0.97489 -1.81477 ] 99 : [ 0.987574 -1.95294 ] field 4: 0 : [ -0.997152 2.46699 ] 1 : [ -0.975687 2.0344 ] 2 : [ -0.945485 1.49205 ] 3 : [ -0.934372 1.31107 ] 4 : [ -0.905005 0.878106 ] 5 : [ -0.887838 0.654009 ] 6 : [ -0.872969 0.476278 ] 7 : [ -0.85371 0.267667 ] 8 : [ -0.823519 -0.0132371 ] 9 : [ -0.807677 -0.139473 ] 10 : [ -0.794151 -0.236407 ] 11 : [ -0.775176 -0.356363 ] 12 : [ -0.74529 -0.509818 ] 13 : [ -0.723448 -0.596623 ] 14 : [ -0.701219 -0.664829 ] 15 : [ -0.698789 -0.671123 ] 16 : [ -0.667931 -0.732503 ] 17 : [ -0.657676 -0.745721 ] 18 : [ -0.639273 -0.761184 ] 19 : [ -0.618418 -0.766796 ] 20 : [ -0.594967 -0.759406 ] 21 : [ -0.573032 -0.74075 ] 22 : [ -0.555073 -0.717944 ] 23 : [ -0.523508 -0.663599 ] 24 : [ -0.515387 -0.647027 ] 25 : [ -0.497085 -0.606296 ] 26 : [ -0.470133 -0.538919 ] 27 : [ -0.445757 -0.471847 ] 28 : [ -0.423022 -0.405303 ] 29 : [ -0.414115 -0.37842 ] 30 : [ -0.395004 -0.319602 ] 31 : [ -0.363394 -0.22021 ] 32 : [ -0.344698 -0.161047 ] 33 : [ -0.330302 -0.11568 ] 34 : [ -0.307494 -0.0447051 ] 35 : [ -0.299879 -0.0213674 ] 36 : [ -0.267949 0.0737073 ] 37 : [ -0.255477 0.109342 ] 38 : [ -0.229506 0.180193 ] 39 : [ -0.211218 0.226986 ] 40 : [ -0.186932 0.284623 ] 41 : [ -0.176419 0.307844 ] 42 : [ -0.152021 0.357395 ] 43 : [ -0.135259 0.387717 ] 44 : [ -0.117392 0.416522 ] 45 : [ -0.0829355 0.46129 ] 46 : [ -0.0693938 0.474847 ] 47 : [ -0.0579699 0.484464 ] 48 : [ -0.0265762 0.502158 ] 49 : [ -0.00971196 0.506305 ] 50 : [ 0.0160519 0.505355 ] 51 : [ 0.0281132 0.501884 ] 52 : [ 0.046915 0.492648 ] 53 : [ 0.0624505 0.481532 ] 54 : [ 0.0984453 0.443925 ] 55 : [ 0.109626 0.428963 ] 56 : [ 0.134402 0.39049 ] 57 : [ 0.151197 0.3604 ] 58 : [ 0.179117 0.303636 ] 59 : [ 0.186419 0.287478 ] 60 : [ 0.211151 0.228995 ] 61 : [ 0.229805 0.18134 ] 62 : [ 0.244912 0.14074 ] 63 : [ 0.269095 0.0724551 ] 64 : [ 0.280399 0.0393263 ] 65 : [ 0.318234 -0.0758522 ] 66 : [ 0.3363 -0.132475 ] 67 : [ 0.34476 -0.159193 ] 68 : [ 0.366515 -0.228121 ] 69 : [ 0.388858 -0.298591 ] 70 : [ 0.405719 -0.351037 ] 71 : [ 0.435464 -0.440699 ] 72 : [ 0.440186 -0.454476 ] 73 : [ 0.462974 -0.518666 ] 74 : [ 0.494895 -0.600535 ] 75 : [ 0.502946 -0.619369 ] 76 : [ 0.537883 -0.690685 ] 77 : [ 0.554339 -0.717508 ] 78 : [ 0.577697 -0.746829 ] 79 : [ 0.587024 -0.755378 ] 80 : [ 0.619129 -0.769271 ] 81 : [ 0.637203 -0.765375 ] 82 : [ 0.656048 -0.751285 ] 83 : [ 0.677155 -0.722257 ] 84 : [ 0.6909 -0.695237 ] 85 : [ 0.714451 -0.632843 ] 86 : [ 0.730491 -0.577886 ] 87 : [ 0.753776 -0.478702 ] 88 : [ 0.778547 -0.345996 ] 89 : [ 0.788847 -0.282008 ] 90 : [ 0.811293 -0.123494 ] 91 : [ 0.828009 0.0124232 ] 92 : [ 0.851558 0.23149 ] 93 : [ 0.870026 0.427181 ] 94 : [ 0.887803 0.636528 ] 95 : [ 0.913161 0.972842 ] 96 : [ 0.93174 1.24893 ] 97 : [ 0.955812 1.64622 ] 98 : [ 0.97489 1.99445 ] 99 : [ 0.987574 2.24306 ]] KL eigenvalues= [1.1483,0.391416,0.15749,0.0668318,0.035614] KL coefficients= 0 : [ -0.0925383 0.905465 0.543963 1.25091 -0.560751 ] 1 : [ -0.715549 -0.230914 0.383488 -0.162984 0.961542 ] 2 : [ 0.180671 -0.940989 1.00647 -0.685311 0.897492 ] 3 : [ 0.417306 0.96804 -1.6899 -1.57893 0.755257 ] 4 : [ -1.1978 -1.42051 -2.13492 -1.34067 0.343484 ] 5 : [ 1.15261 1.09864 1.72705 -1.12929 1.03995 ] 6 : [ -1.79776 1.20792 0.946314 -0.614654 -0.0625113 ] 7 : [ 0.642645 1.34378 -0.256209 -0.816543 -1.09532 ] 8 : [ 0.583539 -0.143015 0.19071 -0.457231 0.252681 ] 9 : [ 0.0287311 1.10475 1.26228 0.478788 0.82466 ] KL functions= Basis( [(0.70255 * (1) - 0.000248374 * (1.73205 * x0) - 0.0831356 * (-1.11803 + 3.3541 * x0^2) + 0.000160127 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.00133029 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.000836876 * (1) - 0.690504 * (1.73205 * x0) - 0.000269551 * (-1.11803 + 3.3541 * x0^2) + 0.150655 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.000219221 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.0769408 * (1) - 0.000541 * (1.73205 * x0) + 0.660957 * (-1.11803 + 3.3541 * x0^2) + 0.00192047 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.235948 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.00203533 * (1) - 0.14544 * (1.73205 * x0) + 0.00149293 * (-1.11803 + 3.3541 * x0^2) - 0.688055 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.00857263 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(0.0228608 * (1) - 0.00349991 * (1.73205 * x0) + 0.230003 * (-1.11803 + 3.3541 * x0^2) - 0.00283799 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.658909 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))] ) KL lift= (-0.0991631 * ((0.70255 * (1) - 0.000248374 * (1.73205 * x0) - 0.0831356 * (-1.11803 + 3.3541 * x0^2) + 0.000160127 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.00133029 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.566488 * ((-0.000836876 * (1) - 0.690504 * (1.73205 * x0) - 0.000269551 * (-1.11803 + 3.3541 * x0^2) + 0.150655 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.000219221 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.215872 * ((0.0769408 * (1) - 0.000541 * (1.73205 * x0) + 0.660957 * (-1.11803 + 3.3541 * x0^2) + 0.00192047 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.235948 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.323385 * ((0.00203533 * (1) - 0.14544 * (1.73205 * x0) + 0.00149293 * (-1.11803 + 3.3541 * x0^2) - 0.688055 * (-3.96863 * x0 + 6.61438 * x0^3) - 0.00857263 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) - 0.105823 * ((0.0228608 * (1) - 0.00349991 * (1.73205 * x0) + 0.230003 * (-1.11803 + 3.3541 * x0^2) - 0.00283799 * (-3.96863 * x0 + 6.61438 * x0^3) + 0.658909 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)))) KL lift as field= 0 : [ -0.997152 0.976744 ] 1 : [ -0.975687 0.972378 ] 2 : [ -0.945485 0.958796 ] 3 : [ -0.934372 0.951764 ] 4 : [ -0.905005 0.928351 ] 5 : [ -0.887838 0.911651 ] 6 : [ -0.872969 0.895534 ] 7 : [ -0.85371 0.872543 ] 8 : [ -0.823519 0.832138 ] 9 : [ -0.807677 0.809024 ] 10 : [ -0.794151 0.788351 ] 11 : [ -0.775176 0.758023 ] 12 : [ -0.74529 0.707492 ] 13 : [ -0.723448 0.668743 ] 14 : [ -0.701219 0.628016 ] 15 : [ -0.698789 0.623494 ] 16 : [ -0.667931 0.565112 ] 17 : [ -0.657676 0.545376 ] 18 : [ -0.639273 0.50965 ] 19 : [ -0.618418 0.468815 ] 20 : [ -0.594967 0.422661 ] 21 : [ -0.573032 0.379467 ] 22 : [ -0.555073 0.344216 ] 23 : [ -0.523508 0.282811 ] 24 : [ -0.515387 0.267176 ] 25 : [ -0.497085 0.232255 ] 26 : [ -0.470133 0.181775 ] 27 : [ -0.445757 0.137283 ] 28 : [ -0.423022 0.096949 ] 29 : [ -0.414115 0.081482 ] 30 : [ -0.395004 0.0489878 ] 31 : [ -0.363394 -0.00253585 ] 32 : [ -0.344698 -0.0316039 ] 33 : [ -0.330302 -0.0532319 ] 34 : [ -0.307494 -0.0860872 ] 35 : [ -0.299879 -0.0966605 ] 36 : [ -0.267949 -0.138751 ] 37 : [ -0.255477 -0.154181 ] 38 : [ -0.229506 -0.184431 ] 39 : [ -0.211218 -0.204178 ] 40 : [ -0.186932 -0.228378 ] 41 : [ -0.176419 -0.23813 ] 42 : [ -0.152021 -0.259064 ] 43 : [ -0.135259 -0.272064 ] 44 : [ -0.117392 -0.284682 ] 45 : [ -0.0829355 -0.305413 ] 46 : [ -0.0693938 -0.312274 ] 47 : [ -0.0579699 -0.317502 ] 48 : [ -0.0265762 -0.329277 ] 49 : [ -0.00971196 -0.334063 ] 50 : [ 0.0160519 -0.339359 ] 51 : [ 0.0281132 -0.341025 ] 52 : [ 0.046915 -0.34262 ] 53 : [ 0.0624505 -0.343046 ] 54 : [ 0.0984453 -0.341099 ] 55 : [ 0.109626 -0.339707 ] 56 : [ 0.134402 -0.335392 ] 57 : [ 0.151197 -0.331566 ] 58 : [ 0.179117 -0.323753 ] 59 : [ 0.186419 -0.321437 ] 60 : [ 0.211151 -0.31285 ] 61 : [ 0.229805 -0.305706 ] 62 : [ 0.244912 -0.29957 ] 63 : [ 0.269095 -0.289228 ] 64 : [ 0.280399 -0.284226 ] 65 : [ 0.318234 -0.267081 ] 66 : [ 0.3363 -0.258868 ] 67 : [ 0.34476 -0.255059 ] 68 : [ 0.366515 -0.245472 ] 69 : [ 0.388858 -0.236106 ] 70 : [ 0.405719 -0.229494 ] 71 : [ 0.435464 -0.219122 ] 72 : [ 0.440186 -0.217657 ] 73 : [ 0.462974 -0.211422 ] 74 : [ 0.494895 -0.205414 ] 75 : [ 0.502946 -0.204482 ] 76 : [ 0.537883 -0.203625 ] 77 : [ 0.554339 -0.205232 ] 78 : [ 0.577697 -0.210032 ] 79 : [ 0.587024 -0.212843 ] 80 : [ 0.619129 -0.226825 ] 81 : [ 0.637203 -0.237894 ] 82 : [ 0.656048 -0.252126 ] 83 : [ 0.677155 -0.271577 ] 84 : [ 0.6909 -0.286374 ] 85 : [ 0.714451 -0.315903 ] 86 : [ 0.730491 -0.339221 ] 87 : [ 0.753776 -0.378016 ] 88 : [ 0.778547 -0.426153 ] 89 : [ 0.788847 -0.448376 ] 90 : [ 0.811293 -0.50155 ] 91 : [ 0.828009 -0.54557 ] 92 : [ 0.851558 -0.614364 ] 93 : [ 0.870026 -0.674149 ] 94 : [ 0.887803 -0.73679 ] 95 : [ 0.913161 -0.835245 ] 96 : [ 0.93174 -0.914508 ] 97 : [ 0.955812 -1.02665 ] 98 : [ 0.97489 -1.12346 ] 99 : [ 0.987574 -1.19187 ] KL modes= [field 0: 0 : [ -0.93247 0.58712 ] 1 : [ -0.661209 0.723182 ] 2 : [ -0.238619 0.854036 ] 3 : [ 0.238619 0.854036 ] 4 : [ 0.661209 0.723182 ] 5 : [ 0.93247 0.58712 ] field 1: 0 : [ -0.93247 0.523334 ] 1 : [ -0.661209 0.583789 ] 2 : [ -0.238619 0.278197 ] 3 : [ 0.238619 -0.278197 ] 4 : [ 0.661209 -0.583789 ] 5 : [ 0.93247 -0.523334 ] field 2: 0 : [ -0.93247 0.366872 ] 1 : [ -0.661209 0.292632 ] 2 : [ -0.238619 -0.283396 ] 3 : [ 0.238619 -0.283396 ] 4 : [ 0.661209 0.292632 ] 5 : [ 0.93247 0.366872 ] field 3: 0 : [ -0.93247 0.411878 ] 1 : [ -0.661209 -0.0831715 ] 2 : [ -0.238619 -0.149128 ] 3 : [ 0.238619 0.149128 ] 4 : [ 0.661209 0.0831715 ] 5 : [ 0.93247 -0.411878 ] field 4: 0 : [ -0.93247 0.313285 ] 1 : [ -0.661209 -0.156904 ] 2 : [ -0.238619 0.0235802 ] 3 : [ 0.238619 0.0235802 ] 4 : [ 0.661209 -0.156904 ] 5 : [ 0.93247 0.313285 ]] KL eigenvalues= [1.17804,0.412173,0.183065,0.0839312,0.0519137] KL coefficients= 0 : [ -0.19021 0.66852 0.795856 1.52719 0.248862 ] 1 : [ -0.781867 -0.70339 -0.480362 0.797143 2.32708 ] 2 : [ -0.0570826 -1.01354 1.00877 -1.04659 0.999239 ] 3 : [ 0.541208 1.02116 -1.80074 -0.68054 0.545148 ] 4 : [ -1.29167 -1.21324 -1.96111 -0.940005 0.435274 ] 5 : [ 0.861079 1.51038 2.20132 -0.441706 0.562684 ] 6 : [ -1.80213 1.04687 1.20676 0.0694195 -0.0932428 ] 7 : [ 0.807824 1.17354 -0.572033 -1.02865 -0.436582 ] 8 : [ 0.638359 -0.291622 0.314835 0.183007 1.0017 ] 9 : [ -0.208959 1.31271 1.31898 0.43451 1.0084 ] KL functions= Basis( [(0.701232 * (1) - 0.0909208 * (-1.11803 + 3.3541 * x0^2) + 0.00253805 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.685051 * (1.73205 * x0) + 0.175228 * (-3.96863 * x0 + 6.61438 * x0^3)),(0.0837175 * (1) + 0.63746 * (-1.11803 + 3.3541 * x0^2) - 0.294341 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)),(-0.175228 * (1.73205 * x0) - 0.685051 * (-3.96863 * x0 + 6.61438 * x0^3)),(0.0355587 * (1) + 0.292196 * (-1.11803 + 3.3541 * x0^2) + 0.642928 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))] ) KL lift= (-0.206449 * ((0.701232 * (1) - 0.0909208 * (-1.11803 + 3.3541 * x0^2) + 0.00253805 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.429195 * ((-0.685051 * (1.73205 * x0) + 0.175228 * (-3.96863 * x0 + 6.61438 * x0^3))) + 0.340516 * ((0.0837175 * (1) + 0.63746 * (-1.11803 + 3.3541 * x0^2) - 0.294341 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4))) + 0.442442 * ((-0.175228 * (1.73205 * x0) - 0.685051 * (-3.96863 * x0 + 6.61438 * x0^3))) + 0.0567023 * ((0.0355587 * (1) + 0.292196 * (-1.11803 + 3.3541 * x0^2) + 0.642928 * (1.125 - 11.25 * x0^2 + 13.125 * x0^4)))) KL lift as field= 0 : [ -0.93247 1.23714 ] 1 : [ -0.661209 0.319544 ] 2 : [ -0.238619 -0.423888 ] 3 : [ 0.238619 -0.340353 ] 4 : [ 0.661209 -0.206967 ] 5 : [ 0.93247 -0.72061 ] openturns-1.9/python/test/t_KarhunenLoeveQuadratureAlgorithm_std.py000077500000000000000000000036131307543307100261530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: ot.ResourceMap.SetAsScalar( "LinearCombinationEvaluation-SmallCoefficient", 1.0e-10) domain = ot.Interval(-1.0, 1.0) basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()]) basisSize = 5 experiment = ot.LHSExperiment(basis.getMeasure(), 100) mustScale = False threshold = 0.0001 model = ot.AbsoluteExponential([1.0]) algo = ot.KarhunenLoeveQuadratureAlgorithm( domain, model, experiment, basis, basisSize, mustScale, threshold) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) process = ot.GaussianProcess(model, KLModes.getMesh()) sample = process.getSample(10) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) # Now using Legendre/Gauss quadrature marginalDegree = 5 algo = ot.KarhunenLoeveQuadratureAlgorithm( domain, model, marginalDegree, threshold) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getScaledModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) except: import sys print("t_KarhunenLoeveQuadratureAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KarhunenLoeveQuadratureFactory_std.expout000066400000000000000000000001341307543307100265200ustar00rootroot00000000000000KL eigenvalues= [1.14931,0.390933,0.157068,0.079541,0.047119,0.0308835,0.0204403,0.0145902] openturns-1.9/python/test/t_KarhunenLoeveQuadratureFactory_std.py000077500000000000000000000014161307543307100256330ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: dim = 1 domain = ot.Interval([-1.0] * dim, [1.0] * dim) basis = ot.OrthogonalProductPolynomialFactory([ot.LegendreFactory()] * dim) basisSize = 10 experiment = ot.LHSExperiment(basis.getMeasure(), 1000) mustScale = False threshold = 0.01 factory = ot.KarhunenLoeveQuadratureFactory( domain, experiment, basis, basisSize, mustScale, threshold) model = ot.AbsoluteExponential([1.0] * dim) lambd = ot.Point() KLModes = factory.build(model, lambd) # print("KL modes=", KLModes) print("KL eigenvalues=", lambd) except: import sys print("t_KarhunenLoeveQuadratureFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KarhunenLoeveSVDAlgorithm_std.expout000066400000000000000000001237331307543307100253710ustar00rootroot00000000000000KL modes= [field 0: 0 : [ -1 0.461975 ] 1 : [ -0.777778 0.469819 ] 2 : [ -0.555556 0.680048 ] 3 : [ -0.333333 0.922755 ] 4 : [ -0.111111 0.788249 ] 5 : [ 0.111111 0.92976 ] 6 : [ 0.333333 0.701168 ] 7 : [ 0.555556 0.698245 ] 8 : [ 0.777778 0.566134 ] 9 : [ 1 0.382458 ] field 1: 0 : [ -1 0.51558 ] 1 : [ -0.777778 0.396054 ] 2 : [ -0.555556 0.65763 ] 3 : [ -0.333333 0.841717 ] 4 : [ -0.111111 0.549378 ] 5 : [ 0.111111 -0.149973 ] 6 : [ 0.333333 -0.571052 ] 7 : [ 0.555556 -0.892482 ] 8 : [ 0.777778 -1.14529 ] 9 : [ 1 -0.788227 ] field 2: 0 : [ -1 1.17694 ] 1 : [ -0.777778 0.791241 ] 2 : [ -0.555556 0.25008 ] 3 : [ -0.333333 0.356324 ] 4 : [ -0.111111 -0.574883 ] 5 : [ 0.111111 -0.816454 ] 6 : [ 0.333333 -0.921811 ] 7 : [ 0.555556 0.0783808 ] 8 : [ 0.777778 0.879656 ] 9 : [ 1 0.854495 ] field 3: 0 : [ -1 1.36553 ] 1 : [ -0.777778 0.923253 ] 2 : [ -0.555556 -0.0908243 ] 3 : [ -0.333333 -0.939984 ] 4 : [ -0.111111 -0.649199 ] 5 : [ 0.111111 1.01883 ] 6 : [ 0.333333 0.125186 ] 7 : [ 0.555556 0.0339358 ] 8 : [ 0.777778 -0.558081 ] 9 : [ 1 -0.267217 ] field 4: 0 : [ -1 0.827786 ] 1 : [ -0.777778 -0.278318 ] 2 : [ -0.555556 -1.48247 ] 3 : [ -0.333333 0.334499 ] 4 : [ -0.111111 0.712926 ] 5 : [ 0.111111 0.653745 ] 6 : [ 0.333333 -0.557117 ] 7 : [ 0.555556 -0.581433 ] 8 : [ 0.777778 0.347225 ] 9 : [ 1 0.362361 ] field 5: 0 : [ -1 1.41359 ] 1 : [ -0.777778 0.00171596 ] 2 : [ -0.555556 -0.474516 ] 3 : [ -0.333333 0.131647 ] 4 : [ -0.111111 0.135682 ] 5 : [ 0.111111 -1.04458 ] 6 : [ 0.333333 1.43495 ] 7 : [ 0.555556 -0.229441 ] 8 : [ 0.777778 -0.117446 ] 9 : [ 1 -0.21594 ] field 6: 0 : [ -1 0.568106 ] 1 : [ -0.777778 -0.789771 ] 2 : [ -0.555556 0.841086 ] 3 : [ -0.333333 -0.501649 ] 4 : [ -0.111111 0.100571 ] 5 : [ 0.111111 0.230669 ] 6 : [ 0.333333 0.198091 ] 7 : [ 0.555556 -0.901607 ] 8 : [ 0.777778 -0.0684603 ] 9 : [ 1 1.91607 ] field 7: 0 : [ -1 0.428497 ] 1 : [ -0.777778 -0.81678 ] 2 : [ -0.555556 -0.215719 ] 3 : [ -0.333333 1.1319 ] 4 : [ -0.111111 -1.26659 ] 5 : [ 0.111111 0.354371 ] 6 : [ 0.333333 0.041451 ] 7 : [ 0.555556 0.446069 ] 8 : [ 0.777778 -0.636201 ] 9 : [ 1 0.395102 ] field 8: 0 : [ -1 0.113493 ] 1 : [ -0.777778 0.169623 ] 2 : [ -0.555556 -0.320876 ] 3 : [ -0.333333 -0.277502 ] 4 : [ -0.111111 0.738355 ] 5 : [ 0.111111 -0.456262 ] 6 : [ 0.333333 -0.341375 ] 7 : [ 0.555556 1.15214 ] 8 : [ 0.777778 -1.08306 ] 9 : [ 1 1.3524 ] field 9: 0 : [ -1 1.43812 ] 1 : [ -0.777778 -1.11662 ] 2 : [ -0.555556 0.504433 ] 3 : [ -0.333333 -0.436383 ] 4 : [ -0.111111 0.372397 ] 5 : [ 0.111111 -0.0543671 ] 6 : [ 0.333333 -0.538437 ] 7 : [ 0.555556 0.691826 ] 8 : [ 0.777778 0.256404 ] 9 : [ 1 -1.26353 ]] KL eigenvalues= [1.60029,0.50589,0.153906,0.0878152,0.0611075,0.0301577,0.0274992,0.0223195,0.0146928,0.00912713]#10 KL coefficients= 0 : [ -0.189452 -0.485643 1.70222 -0.517205 0.604995 -0.0950924 0.161491 2.64994 0.142024 0.240817 ] 1 : [ -1.55027 -0.374013 0.635319 1.16055 -0.81997 1.07981 -1.10628 0.879015 0.356346 -1.78017 ] 2 : [ 0.0663551 -0.798178 0.947164 0.558232 -0.503545 0.129052 -1.37747 -1.3402 1.32431 1.32709 ] 3 : [ -0.0629095 -1.58012 -1.04936 0.10463 1.695 0.591773 -0.0205873 -0.314632 0.937786 -1.06325 ] 4 : [ 0.366364 -1.28108 0.47561 0.991608 0.242532 -1.05109 0.632732 0.499147 1.42758 1.01701 ] 5 : [ 0.191036 -0.652312 -0.09382 1.06039 -0.875604 2.06509 1.11739 -0.869261 -0.656068 0.65343 ] 6 : [ 0.139098 0.979987 1.39201 0.013876 0.770315 1.8165 0.530493 -0.112153 -0.561827 -0.397765 ] 7 : [ 0.804564 -0.149545 0.0634084 -2.20233 -1.71693 1.22014 -1.09084 0.466116 0.935362 0.544278 ] 8 : [ -0.342453 0.569126 -1.86364 0.646714 -1.14328 -0.617701 -0.834667 1.12089 -0.859128 0.272345 ] 9 : [ 0.999104 -0.854835 1.57535 -0.257889 -0.70619 -1.21468 0.237331 -0.650056 -1.93085 -0.4816 ] 10 : [ -2.19204 -0.526963 -0.15551 -0.444155 -0.94377 0.0800377 2.05802 0.284214 -0.0177107 1.24097 ] 11 : [ 0.906391 -1.7774 -0.526341 0.940095 0.157656 0.788433 -0.852183 1.07853 -1.57486 0.897874 ] 12 : [ -0.850689 -1.94738 -0.44504 -1.86746 -0.0280599 -0.158892 0.0069756 -0.607254 -0.618841 -1.03922 ] 13 : [ -2.02375 0.209523 0.677198 -0.166232 1.09287 -0.212562 -1.73651 -0.762777 -1.04715 1.30348 ] 14 : [ -0.392083 -0.33658 0.781705 1.01196 -1.59743 -0.863064 -0.0424449 -0.449295 0.366562 -1.23866 ] 15 : [ -0.0635799 -0.20035 0.354385 -0.0212267 -0.139495 -0.468914 0.419792 0.0504802 0.337454 0.132563 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.461975],[0.469819],[0.680048],[0.922755],[0.788249],[0.92976],[0.701168],[0.698245],[0.566134],[0.382458]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.51558],[0.396054],[0.65763],[0.841717],[0.549378],[-0.149973],[-0.571052],[-0.892482],[-1.14529],[-0.788227]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.17694],[0.791241],[0.25008],[0.356324],[-0.574883],[-0.816454],[-0.921811],[0.0783808],[0.879656],[0.854495]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36553],[0.923253],[-0.0908243],[-0.939984],[-0.649199],[1.01883],[0.125186],[0.0339358],[-0.558081],[-0.267217]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.827786],[-0.278318],[-1.48247],[0.334499],[0.712926],[0.653745],[-0.557117],[-0.581433],[0.347225],[0.362361]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41359],[0.00171596],[-0.474516],[0.131647],[0.135682],[-1.04458],[1.43495],[-0.229441],[-0.117446],[-0.21594]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.568106],[-0.789771],[0.841086],[-0.501649],[0.100571],[0.230669],[0.198091],[-0.901607],[-0.0684603],[1.91607]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.428497],[-0.81678],[-0.215719],[1.1319],[-1.26659],[0.354371],[0.041451],[0.446069],[-0.636201],[0.395102]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.113493],[0.169623],[-0.320876],[-0.277502],[0.738355],[-0.456262],[-0.341375],[1.15214],[-1.08306],[1.3524]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.43812],[-1.11662],[0.504433],[-0.436383],[0.372397],[-0.0543671],[-0.538437],[0.691826],[0.256404],[-1.26353]]]#10 ) KL lift= (-0.239661 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.461975],[0.469819],[0.680048],[0.922755],[0.788249],[0.92976],[0.701168],[0.698245],[0.566134],[0.382458]]) - 0.345418 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.51558],[0.396054],[0.65763],[0.841717],[0.549378],[-0.149973],[-0.571052],[-0.892482],[-1.14529],[-0.788227]]) + 0.667795 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.17694],[0.791241],[0.25008],[0.356324],[-0.574883],[-0.816454],[-0.921811],[0.0783808],[0.879656],[0.854495]]) - 0.153267 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.36553],[0.923253],[-0.0908243],[-0.939984],[-0.649199],[1.01883],[0.125186],[0.0339358],[-0.558081],[-0.267217]]) + 0.149554 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.827786],[-0.278318],[-1.48247],[0.334499],[0.712926],[0.653745],[-0.557117],[-0.581433],[0.347225],[0.362361]]) - 0.0165137 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.41359],[0.00171596],[-0.474516],[0.131647],[0.135682],[-1.04458],[1.43495],[-0.229441],[-0.117446],[-0.21594]]) + 0.0267798 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.568106],[-0.789771],[0.841086],[-0.501649],[0.100571],[0.230669],[0.198091],[-0.901607],[-0.0684603],[1.91607]]) + 0.395893 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.428497],[-0.81678],[-0.215719],[1.1319],[-1.26659],[0.354371],[0.041451],[0.446069],[-0.636201],[0.395102]]) + 0.0172152 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.113493],[0.169623],[-0.320876],[-0.277502],[0.738355],[-0.456262],[-0.341375],[1.15214],[-1.08306],[1.3524]]) + 0.0230067 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.43812],[-1.11662],[0.504433],[-0.436383],[0.372397],[-0.0543671],[-0.538437],[0.691826],[0.256404],[-1.26353]])) KL lift as field= 0 : [ -1 0.608202 ] 1 : [ -0.777778 -0.271448 ] 2 : [ -0.555556 -0.479886 ] 3 : [ -0.333333 0.337837 ] 4 : [ -0.111111 -1.03616 ] 5 : [ 0.111111 -0.620015 ] 6 : [ 0.333333 -0.709124 ] 7 : [ 0.555556 0.293113 ] 8 : [ 0.777778 0.720309 ] 9 : [ 1 1.05189 ] KL modes= [field 0: 0 : [ -1 0.353883 ] 1 : [ -0.777778 0.314608 ] 2 : [ -0.555556 0.63721 ] 3 : [ -0.333333 1.04152 ] 4 : [ -0.111111 0.961824 ] 5 : [ 0.111111 0.820085 ] 6 : [ 0.333333 0.812974 ] 7 : [ 0.555556 0.485266 ] 8 : [ 0.777778 0.431062 ] 9 : [ 1 0.579206 ] field 1: 0 : [ -1 0.103867 ] 1 : [ -0.777778 0.868108 ] 2 : [ -0.555556 0.906038 ] 3 : [ -0.333333 -0.395452 ] 4 : [ -0.111111 -1.02558 ] 5 : [ 0.111111 -0.621663 ] 6 : [ 0.333333 0.312119 ] 7 : [ 0.555556 0.888545 ] 8 : [ 0.777778 0.233191 ] 9 : [ 1 0.8765 ] field 2: 0 : [ -1 0.556053 ] 1 : [ -0.777778 -0.144545 ] 2 : [ -0.555556 -0.875082 ] 3 : [ -0.333333 -0.642249 ] 4 : [ -0.111111 -0.590921 ] 5 : [ 0.111111 1.06277 ] 6 : [ 0.333333 0.827956 ] 7 : [ 0.555556 0.846673 ] 8 : [ 0.777778 -0.00614584 ] 9 : [ 1 -0.728266 ] field 3: 0 : [ -1 1.29293 ] 1 : [ -0.777778 0.873918 ] 2 : [ -0.555556 -0.712643 ] 3 : [ -0.333333 0.384458 ] 4 : [ -0.111111 0.514402 ] 5 : [ 0.111111 -0.941549 ] 6 : [ 0.333333 0.262212 ] 7 : [ 0.555556 0.317184 ] 8 : [ 0.777778 -0.876218 ] 9 : [ 1 -0.559498 ] field 4: 0 : [ -1 0.865707 ] 1 : [ -0.777778 0.0792601 ] 2 : [ -0.555556 0.347707 ] 3 : [ -0.333333 -0.160287 ] 4 : [ -0.111111 -0.496796 ] 5 : [ 0.111111 0.316021 ] 6 : [ 0.333333 0.946136 ] 7 : [ 0.555556 -1.40097 ] 8 : [ 0.777778 -0.717634 ] 9 : [ 1 0.711095 ]] KL eigenvalues= [0.960801,0.266034,0.125309,0.040464,0.0211503] KL coefficients= 0 : [ 1.11056 -0.637503 -1.22595 -0.57283 1.2366 ] 1 : [ -1.29291 0.499071 -1.29777 1.01596 0.602439 ] 2 : [ -1.36366 -1.39973 0.443167 -0.816309 0.564281 ] 3 : [ 0.252502 -1.48097 -0.651503 0.931055 -1.20485 ] 4 : [ 0.414392 -0.438186 1.09178 1.45137 1.15664 ] 5 : [ -0.31507 1.24132 2.20024 -1.74222 -3.26887 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.353883],[0.314608],[0.63721],[1.04152],[0.961824],[0.820085],[0.812974],[0.485266],[0.431062],[0.579206]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.103867],[0.868108],[0.906038],[-0.395452],[-1.02558],[-0.621663],[0.312119],[0.888545],[0.233191],[0.8765]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.556053],[-0.144545],[-0.875082],[-0.642249],[-0.590921],[1.06277],[0.827956],[0.846673],[-0.00614584],[-0.728266]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.29293],[0.873918],[-0.712643],[0.384458],[0.514402],[-0.941549],[0.262212],[0.317184],[-0.876218],[-0.559498]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.865707],[0.0792601],[0.347707],[-0.160287],[-0.496796],[0.316021],[0.946136],[-1.40097],[-0.717634],[0.711095]]] ) KL lift= (1.08857 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.353883],[0.314608],[0.63721],[1.04152],[0.961824],[0.820085],[0.812974],[0.485266],[0.431062],[0.579206]]) - 0.328814 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.103867],[0.868108],[0.906038],[-0.395452],[-1.02558],[-0.621663],[0.312119],[0.888545],[0.233191],[0.8765]]) - 0.433974 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.556053],[-0.144545],[-0.875082],[-0.642249],[-0.590921],[1.06277],[0.827956],[0.846673],[-0.00614584],[-0.728266]]) - 0.115229 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.29293],[0.873918],[-0.712643],[0.384458],[0.514402],[-0.941549],[0.262212],[0.317184],[-0.876218],[-0.559498]]) + 0.17984 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.865707],[0.0792601],[0.347707],[-0.160287],[-0.496796],[0.316021],[0.946136],[-1.40097],[-0.717634],[0.711095]])) KL lift as field= 0 : [ -1 0.116468 ] 1 : [ -0.777778 0.0333102 ] 2 : [ -0.555556 0.920143 ] 3 : [ -0.333333 1.46939 ] 4 : [ -0.111111 1.49207 ] 5 : [ 0.111111 0.801246 ] 6 : [ 0.333333 0.56298 ] 7 : [ 0.555556 -0.419852 ] 8 : [ 0.777778 0.367139 ] 9 : [ 1 0.850704 ] KL modes= [field 0: 0 : [ -1 0.452548 ] 1 : [ -0.777778 0.470917 ] 2 : [ -0.555556 0.621654 ] 3 : [ -0.333333 1.07469 ] 4 : [ -0.111111 1.14304 ] 5 : [ 0.111111 0.863697 ] 6 : [ 0.333333 0.569242 ] 7 : [ 0.555556 0.138867 ] 8 : [ 0.777778 0.307918 ] 9 : [ 1 0.536241 ] field 1: 0 : [ -1 0.277702 ] 1 : [ -0.777778 0.408274 ] 2 : [ -0.555556 -0.233513 ] 3 : [ -0.333333 0.0732751 ] 4 : [ -0.111111 0.708964 ] 5 : [ 0.111111 0.084241 ] 6 : [ 0.333333 -1.07101 ] 7 : [ 0.555556 -1.49302 ] 8 : [ 0.777778 -0.544005 ] 9 : [ 1 -0.325665 ] field 2: 0 : [ -1 0.207609 ] 1 : [ -0.777778 1.27101 ] 2 : [ -0.555556 1.1378 ] 3 : [ -0.333333 -0.141282 ] 4 : [ -0.111111 -0.514424 ] 5 : [ 0.111111 -0.808709 ] 6 : [ 0.333333 -0.32939 ] 7 : [ 0.555556 0.0213084 ] 8 : [ 0.777778 -0.0116417 ] 9 : [ 1 1.02049 ] field 3: 0 : [ -1 1.33879 ] 1 : [ -0.777778 1.04557 ] 2 : [ -0.555556 -0.573506 ] 3 : [ -0.333333 -0.688786 ] 4 : [ -0.111111 -0.466726 ] 5 : [ 0.111111 0.96271 ] 6 : [ 0.333333 0.431095 ] 7 : [ 0.555556 0.212104 ] 8 : [ 0.777778 -0.468121 ] 9 : [ 1 -0.474669 ] field 4: 0 : [ -1 0.744662 ] 1 : [ -0.777778 0.372528 ] 2 : [ -0.555556 -0.72965 ] 3 : [ -0.333333 0.597219 ] 4 : [ -0.111111 0.646192 ] 5 : [ 0.111111 -1.30272 ] 6 : [ 0.333333 0.192398 ] 7 : [ 0.555556 0.697549 ] 8 : [ 0.777778 -0.604225 ] 9 : [ 1 -0.619001 ] field 5: 0 : [ -1 0.633334 ] 1 : [ -0.777778 -0.517638 ] 2 : [ -0.555556 0.193187 ] 3 : [ -0.333333 0.18387 ] 4 : [ -0.111111 -0.393596 ] 5 : [ 0.111111 -0.376185 ] 6 : [ 0.333333 1.32469 ] 7 : [ 0.555556 -1.06515 ] 8 : [ 0.777778 -0.741538 ] 9 : [ 1 0.670376 ]] KL eigenvalues= [0.836702,0.488988,0.182274,0.0682204,0.0306418,0.0140851] KL coefficients= 0 : [ 1.26185 0.233111 -0.14905 -1.3376 -0.618721 1.46942 ] 1 : [ -1.30064 0.62174 1.16782 -0.675322 1.07378 0.974123 ] 2 : [ -1.34949 0.922175 -1.47092 0.00373766 -0.978872 0.454594 ] 3 : [ 0.389145 0.691518 -1.18411 -1.00454 1.49653 -0.848272 ] 4 : [ 0.437293 -0.085443 -0.755805 1.47564 1.09157 1.36425 ] 5 : [ -0.743167 -2.05504 -0.690676 -0.753745 0.273619 0.323226 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.452548],[0.470917],[0.621654],[1.07469],[1.14304],[0.863697],[0.569242],[0.138867],[0.307918],[0.536241]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.277702],[0.408274],[-0.233513],[0.0732751],[0.708964],[0.084241],[-1.07101],[-1.49302],[-0.544005],[-0.325665]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.207609],[1.27101],[1.1378],[-0.141282],[-0.514424],[-0.808709],[-0.32939],[0.0213084],[-0.0116417],[1.02049]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.33879],[1.04557],[-0.573506],[-0.688786],[-0.466726],[0.96271],[0.431095],[0.212104],[-0.468121],[-0.474669]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.744662],[0.372528],[-0.72965],[0.597219],[0.646192],[-1.30272],[0.192398],[0.697549],[-0.604225],[-0.619001]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.633334],[-0.517638],[0.193187],[0.18387],[-0.393596],[-0.376185],[1.32469],[-1.06515],[-0.741538],[0.670376]]] ) KL lift= (1.15423 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.452548],[0.470917],[0.621654],[1.07469],[1.14304],[0.863697],[0.569242],[0.138867],[0.307918],[0.536241]]) + 0.163009 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.277702],[0.408274],[-0.233513],[0.0732751],[0.708964],[0.084241],[-1.07101],[-1.49302],[-0.544005],[-0.325665]]) - 0.0636346 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.207609],[1.27101],[1.1378],[-0.141282],[-0.514424],[-0.808709],[-0.32939],[0.0213084],[-0.0116417],[1.02049]]) - 0.349367 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.33879],[1.04557],[-0.573506],[-0.688786],[-0.466726],[0.96271],[0.431095],[0.212104],[-0.468121],[-0.474669]]) - 0.108306 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.744662],[0.372528],[-0.72965],[0.597219],[0.646192],[-1.30272],[0.192398],[0.697549],[-0.604225],[-0.619001]]) + 0.174392 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.633334],[-0.517638],[0.193187],[0.18387],[-0.393596],[-0.376185],[1.32469],[-1.06515],[-0.741538],[0.670376]])) KL lift as field= 0 : [ -1 0.116468 ] 1 : [ -0.777778 0.0333102 ] 2 : [ -0.555556 0.920143 ] 3 : [ -0.333333 1.46939 ] 4 : [ -0.111111 1.49207 ] 5 : [ 0.111111 0.801246 ] 6 : [ 0.333333 0.56298 ] 7 : [ 0.555556 -0.419852 ] 8 : [ 0.777778 0.367139 ] 9 : [ 1 0.850704 ] KL modes= [field 0: 0 : [ -1 0.452548 ] 1 : [ -0.777778 0.470917 ] 2 : [ -0.555556 0.621654 ] 3 : [ -0.333333 1.07469 ] 4 : [ -0.111111 1.14304 ] 5 : [ 0.111111 0.863697 ] 6 : [ 0.333333 0.569242 ] 7 : [ 0.555556 0.138867 ] 8 : [ 0.777778 0.307918 ] 9 : [ 1 0.536241 ] field 1: 0 : [ -1 0.277702 ] 1 : [ -0.777778 0.408274 ] 2 : [ -0.555556 -0.233513 ] 3 : [ -0.333333 0.0732751 ] 4 : [ -0.111111 0.708964 ] 5 : [ 0.111111 0.084241 ] 6 : [ 0.333333 -1.07101 ] 7 : [ 0.555556 -1.49302 ] 8 : [ 0.777778 -0.544005 ] 9 : [ 1 -0.325665 ] field 2: 0 : [ -1 0.207609 ] 1 : [ -0.777778 1.27101 ] 2 : [ -0.555556 1.1378 ] 3 : [ -0.333333 -0.141282 ] 4 : [ -0.111111 -0.514424 ] 5 : [ 0.111111 -0.808709 ] 6 : [ 0.333333 -0.32939 ] 7 : [ 0.555556 0.0213084 ] 8 : [ 0.777778 -0.0116417 ] 9 : [ 1 1.02049 ] field 3: 0 : [ -1 1.33879 ] 1 : [ -0.777778 1.04557 ] 2 : [ -0.555556 -0.573506 ] 3 : [ -0.333333 -0.688786 ] 4 : [ -0.111111 -0.466726 ] 5 : [ 0.111111 0.96271 ] 6 : [ 0.333333 0.431095 ] 7 : [ 0.555556 0.212104 ] 8 : [ 0.777778 -0.468121 ] 9 : [ 1 -0.474669 ] field 4: 0 : [ -1 0.744662 ] 1 : [ -0.777778 0.372528 ] 2 : [ -0.555556 -0.72965 ] 3 : [ -0.333333 0.597219 ] 4 : [ -0.111111 0.646192 ] 5 : [ 0.111111 -1.30272 ] 6 : [ 0.333333 0.192398 ] 7 : [ 0.555556 0.697549 ] 8 : [ 0.777778 -0.604225 ] 9 : [ 1 -0.619001 ] field 5: 0 : [ -1 0.633334 ] 1 : [ -0.777778 -0.517638 ] 2 : [ -0.555556 0.193187 ] 3 : [ -0.333333 0.18387 ] 4 : [ -0.111111 -0.393596 ] 5 : [ 0.111111 -0.376185 ] 6 : [ 0.333333 1.32469 ] 7 : [ 0.555556 -1.06515 ] 8 : [ 0.777778 -0.741538 ] 9 : [ 1 0.670376 ]] KL eigenvalues= [0.836702,0.488988,0.182274,0.0682204,0.0306418,0.0140851] KL coefficients= 0 : [ 1.26185 0.233111 -0.14905 -1.3376 -0.618721 1.46942 ] 1 : [ -1.30064 0.62174 1.16782 -0.675322 1.07378 0.974123 ] 2 : [ -1.34949 0.922175 -1.47092 0.00373766 -0.978872 0.454594 ] 3 : [ 0.389145 0.691518 -1.18411 -1.00454 1.49653 -0.848272 ] 4 : [ 0.437293 -0.085443 -0.755805 1.47564 1.09157 1.36425 ] 5 : [ -0.743167 -2.05504 -0.690676 -0.753745 0.273619 0.323226 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.452548],[0.470917],[0.621654],[1.07469],[1.14304],[0.863697],[0.569242],[0.138867],[0.307918],[0.536241]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.277702],[0.408274],[-0.233513],[0.0732751],[0.708964],[0.084241],[-1.07101],[-1.49302],[-0.544005],[-0.325665]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.207609],[1.27101],[1.1378],[-0.141282],[-0.514424],[-0.808709],[-0.32939],[0.0213084],[-0.0116417],[1.02049]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.33879],[1.04557],[-0.573506],[-0.688786],[-0.466726],[0.96271],[0.431095],[0.212104],[-0.468121],[-0.474669]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.744662],[0.372528],[-0.72965],[0.597219],[0.646192],[-1.30272],[0.192398],[0.697549],[-0.604225],[-0.619001]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.633334],[-0.517638],[0.193187],[0.18387],[-0.393596],[-0.376185],[1.32469],[-1.06515],[-0.741538],[0.670376]]] ) KL lift= (1.15423 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.452548],[0.470917],[0.621654],[1.07469],[1.14304],[0.863697],[0.569242],[0.138867],[0.307918],[0.536241]]) + 0.163009 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.277702],[0.408274],[-0.233513],[0.0732751],[0.708964],[0.084241],[-1.07101],[-1.49302],[-0.544005],[-0.325665]]) - 0.0636346 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.207609],[1.27101],[1.1378],[-0.141282],[-0.514424],[-0.808709],[-0.32939],[0.0213084],[-0.0116417],[1.02049]]) - 0.349367 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[1.33879],[1.04557],[-0.573506],[-0.688786],[-0.466726],[0.96271],[0.431095],[0.212104],[-0.468121],[-0.474669]]) - 0.108306 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.744662],[0.372528],[-0.72965],[0.597219],[0.646192],[-1.30272],[0.192398],[0.697549],[-0.604225],[-0.619001]]) + 0.174392 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 data=[[0.633334],[-0.517638],[0.193187],[0.18387],[-0.393596],[-0.376185],[1.32469],[-1.06515],[-0.741538],[0.670376]])) KL lift as field= 0 : [ -1 0.116468 ] 1 : [ -0.777778 0.0333102 ] 2 : [ -0.555556 0.920143 ] 3 : [ -0.333333 1.46939 ] 4 : [ -0.111111 1.49207 ] 5 : [ 0.111111 0.801246 ] 6 : [ 0.333333 0.56298 ] 7 : [ 0.555556 -0.419852 ] 8 : [ 0.777778 0.367139 ] 9 : [ 1 0.850704 ] KL modes= [field 0: 0 : [ -1 0.250477 0.500999 ] 1 : [ -0.777778 0.289419 0.469217 ] 2 : [ -0.555556 0.251021 0.496283 ] 3 : [ -0.333333 0.39029 0.628769 ] 4 : [ -0.111111 0.268675 0.587815 ] 5 : [ 0.111111 0.216838 0.604943 ] 6 : [ 0.333333 0.382293 0.724876 ] 7 : [ 0.555556 0.385609 0.885258 ] 8 : [ 0.777778 0.298417 0.734921 ] 9 : [ 1 0.274913 0.401522 ] field 1: 0 : [ -1 0.399856 0.563222 ] 1 : [ -0.777778 0.531575 0.820967 ] 2 : [ -0.555556 0.480464 1.0442 ] 3 : [ -0.333333 0.401984 0.551051 ] 4 : [ -0.111111 0.117765 0.0985205 ] 5 : [ 0.111111 -0.128664 -0.36991 ] 6 : [ 0.333333 -0.146667 -0.503309 ] 7 : [ 0.555556 -0.356879 -0.816314 ] 8 : [ 0.777778 -0.217861 -0.347545 ] 9 : [ 1 -0.170901 -0.42443 ] field 2: 0 : [ -1 0.730462 -0.0455262 ] 1 : [ -0.777778 0.674121 0.341766 ] 2 : [ -0.555556 0.366034 -0.382848 ] 3 : [ -0.333333 0.202858 -0.568305 ] 4 : [ -0.111111 0.112711 -0.800353 ] 5 : [ 0.111111 0.19757 -0.708478 ] 6 : [ 0.333333 0.205163 0.0185217 ] 7 : [ 0.555556 0.77513 -0.313959 ] 8 : [ 0.777778 0.734912 0.327928 ] 9 : [ 1 0.847166 0.383935 ] field 3: 0 : [ -1 0.721892 1.04143 ] 1 : [ -0.777778 0.628269 0.0436474 ] 2 : [ -0.555556 0.457769 -0.331842 ] 3 : [ -0.333333 -0.438369 -0.832303 ] 4 : [ -0.111111 -0.34629 0.411379 ] 5 : [ 0.111111 -0.116351 0.336543 ] 6 : [ 0.333333 0.181769 0.911641 ] 7 : [ 0.555556 -0.0723294 -0.209836 ] 8 : [ 0.777778 -0.439048 -0.596182 ] 9 : [ 1 -0.660093 0.0333455 ] field 4: 0 : [ -1 0.0159593 -1.46074 ] 1 : [ -0.777778 0.0411559 0.520037 ] 2 : [ -0.555556 0.270463 -0.704822 ] 3 : [ -0.333333 0.246335 0.14621 ] 4 : [ -0.111111 0.231757 0.391313 ] 5 : [ 0.111111 -0.0417253 0.381146 ] 6 : [ 0.333333 -0.200169 0.670081 ] 7 : [ 0.555556 -0.388355 -0.548562 ] 8 : [ 0.777778 0.0504591 0.0791808 ] 9 : [ 1 0.792689 -1.33507 ]] KL eigenvalues= [9.25094,3.81926,0.912602,0.375081,0.19712] KL coefficients= 0 : [ -0.96542 0.303117 0.631699 1.87556 0.243538 ] 1 : [ 0.7764 -1.49744 0.360374 0.682417 -1.24873 ] 2 : [ -1.25844 -0.268562 -1.59459 0.0487766 -0.893921 ] 3 : [ 1.30962 0.364531 -1.363 1.00505 0.533021 ] 4 : [ 0.407906 1.56869 0.265679 0.063805 -1.51597 ] 5 : [ -0.336561 -0.784441 0.422186 -0.451934 6.58621e-05 ] KL functions= Basis( [class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.250477,0.500999],[0.289419,0.469217],[0.251021,0.496283],[0.39029,0.628769],[0.268675,0.587815],[0.216838,0.604943],[0.382293,0.724876],[0.385609,0.885258],[0.298417,0.734921],[0.274913,0.401522]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.399856,0.563222],[0.531575,0.820967],[0.480464,1.0442],[0.401984,0.551051],[0.117765,0.0985205],[-0.128664,-0.36991],[-0.146667,-0.503309],[-0.356879,-0.816314],[-0.217861,-0.347545],[-0.170901,-0.42443]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.730462,-0.0455262],[0.674121,0.341766],[0.366034,-0.382848],[0.202858,-0.568305],[0.112711,-0.800353],[0.19757,-0.708478],[0.205163,0.0185217],[0.77513,-0.313959],[0.734912,0.327928],[0.847166,0.383935]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.721892,1.04143],[0.628269,0.0436474],[0.457769,-0.331842],[-0.438369,-0.832303],[-0.34629,0.411379],[-0.116351,0.336543],[0.181769,0.911641],[-0.0723294,-0.209836],[-0.439048,-0.596182],[-0.660093,0.0333455]],class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.0159593,-1.46074],[0.0411559,0.520037],[0.270463,-0.704822],[0.246335,0.14621],[0.231757,0.391313],[-0.0417253,0.381146],[-0.200169,0.670081],[-0.388355,-0.548562],[0.0504591,0.0791808],[0.792689,-1.33507]]] ) KL lift= (-2.93636 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.250477,0.500999],[0.289419,0.469217],[0.251021,0.496283],[0.39029,0.628769],[0.268675,0.587815],[0.216838,0.604943],[0.382293,0.724876],[0.385609,0.885258],[0.298417,0.734921],[0.274913,0.401522]]) + 0.592379 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.399856,0.563222],[0.531575,0.820967],[0.480464,1.0442],[0.401984,0.551051],[0.117765,0.0985205],[-0.128664,-0.36991],[-0.146667,-0.503309],[-0.356879,-0.816314],[-0.217861,-0.347545],[-0.170901,-0.42443]]) + 0.603463 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.730462,-0.0455262],[0.674121,0.341766],[0.366034,-0.382848],[0.202858,-0.568305],[0.112711,-0.800353],[0.19757,-0.708478],[0.205163,0.0185217],[0.77513,-0.313959],[0.734912,0.327928],[0.847166,0.383935]]) + 1.14867 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.721892,1.04143],[0.628269,0.0436474],[0.457769,-0.331842],[-0.438369,-0.832303],[-0.34629,0.411379],[-0.116351,0.336543],[0.181769,0.911641],[-0.0723294,-0.209836],[-0.439048,-0.596182],[-0.660093,0.0333455]]) + 0.108126 * (class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=10 values=[-1,-0.777778,-0.555556,-0.333333,-0.111111,0.111111,0.333333,0.555556,0.777778,1] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[0.0159593,-1.46074],[0.0411559,0.520037],[0.270463,-0.704822],[0.246335,0.14621],[0.231757,0.391313],[-0.0417253,0.381146],[-0.200169,0.670081],[-0.388355,-0.548562],[0.0504591,0.0791808],[0.792689,-1.33507]])) KL lift as field= 0 : [ -1 0.773121 -0.126637 ] 1 : [ -0.777778 0.597983 -0.578858 ] 2 : [ -0.555556 0.323484 -1.52713 ] 3 : [ -0.333333 -1.26239 -2.80304 ] 4 : [ -0.111111 -1.02386 -1.63581 ] 5 : [ 0.111111 -0.731867 -1.99521 ] 6 : [ 0.333333 -0.898477 -1.29585 ] 7 : [ 0.555556 -1.001 -3.57281 ] 8 : [ 0.777778 -1.06069 -2.84223 ] 9 : [ 1 -1.06976 -1.3048 ] openturns-1.9/python/test/t_KarhunenLoeveSVDAlgorithm_std.py000077500000000000000000000072101307543307100244670ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: mesh = ot.IntervalMesher([9]).build(ot.Interval(-1.0, 1.0)) # 1D mesh, 1D covariance, uniform weight, automatic centering, more samples # than vertices cov1D = ot.AbsoluteExponential([1.0]) sample = ot.GaussianProcess(cov1D, mesh).getSample(16) algo = ot.KarhunenLoeveSVDAlgorithm(sample, 0.0) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) # 1D mesh, 1D covariance, uniform weight, automatic centering sample = ot.GaussianProcess(cov1D, mesh).getSample(6) algo = ot.KarhunenLoeveSVDAlgorithm(sample, 0.0) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) # 1D mesh, 1D covariance, uniform weight, declared centered algo = ot.KarhunenLoeveSVDAlgorithm(sample, 0.0, True) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) # 1D mesh, 1D covariance, nonuniform weight, automatic centering weights = mesh.computeWeights() algo = ot.KarhunenLoeveSVDAlgorithm(sample, weights, 0.0, True) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) # 1D mesh, 1D covariance, uniform weight, automatic centering R = ot.CorrelationMatrix(2, [1.0, 0.5, 0.5, 1.0]) scale = [1.0] amplitude = [1.0, 2.0] cov2D = ot.ExponentialModel(scale, amplitude, R) sample = ot.GaussianProcess(cov2D, mesh).getSample(6) algo = ot.KarhunenLoeveSVDAlgorithm(sample, 0.0) algo.run() result = algo.getResult() lambd = result.getEigenValues() KLModes = result.getModesAsProcessSample() print("KL modes=", KLModes) print("KL eigenvalues=", lambd) coefficients = result.project(sample) print("KL coefficients=", coefficients) KLFunctions = result.getModes() print("KL functions=", KLFunctions) print("KL lift=", result.lift(coefficients[0])) print("KL lift as field=", result.liftAsField(coefficients[0])) except: import sys print("t_KarhunenLoeveSVDAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KernelMixture_std.expout000066400000000000000000000054361307543307100231740ustar00rootroot00000000000000Distribution class=KernelMixture name=KernelMixture kernel=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] bandwidth=class=Point name=Unnamed dimension=3 values=[2,3,1] sample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=3 data=[[0.5,-0.5,1],[1.5,0.5,2],[2.5,1.5,3]] Distribution KernelMixture(kernel = Normal(mu = 0, sigma = 1), bandwidth = [2,3,1], sample = 0 : [ 0.5 -0.5 1 ] 1 : [ 1.5 0.5 2 ] 2 : [ 2.5 1.5 3 ] Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=3 values=[2.07328,-2.47593,2.92288] oneSample first= class=Point name=Unnamed dimension=3 values=[-1.86277,2.55013,2.64499] last= class=Point name=Unnamed dimension=3 values=[2.81013,-1.29834,1.89856] mean= class=Point name=Unnamed dimension=3 values=[1.63854,0.0623536,2.01459] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.5743,-0.738335,-0.178015,-0.738335,6.42657,0.306325,-0.178015,0.306325,1.37246] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] ddf = class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] ddf (ref)= class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] ddf (FD)= class=Point name=Unnamed dimension=3 values=[1.17543e-05,-0.000596732,0.00275582] log pdf=-5.218101 pdf =0.005418 pdf (ref)=0.005418 cdf=0.081759 ccdf=0.918241 cdf (ref)=0.081759 quantile= class=Point name=Unnamed dimension=3 values=[6.05991,7.07458,4.66827] quantile (ref)= class=Point name=Unnamed dimension=3 values=[6.05991,7.07458,4.66827] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[-3.05991,-6.07458,-0.668274] Survival(inverseSurvival)=0.950000 cond. cdf=0.615836 cond. cdf (vect)= [0.615836,0.657634,0.707868] cond. pdf=0.123311 cond. pdf (vect)= [0.123311,0.118288,0.110573] cond. quantile=-3.77006 cond. quantile (vect)= [-3.77006,-1.28752,2.12927] cond. cdf(cond. quantile)= [0.1,0.3,0.7] mean= class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] mean (ref)= class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,0.666667,0.666667,0.666667,9.66667,0.666667,0.666667,0.666667,1.66667] covariance (ref)= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,0.666667,0.666667,0.666667,9.66667,0.666667,0.666667,0.666667,1.66667] openturns-1.9/python/test/t_KernelMixture_std.py000077500000000000000000000135251307543307100223010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dimension = 3 meanPoint = Point(dimension, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dimension, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 sample = Sample(0, dimension) # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(Normal(meanPoint, sigma, IdentityMatrix(dimension))) sample.add(meanPoint) meanPoint += Point(meanPoint.getDimension(), 1.0) aCollection.add(Normal(meanPoint, sigma, IdentityMatrix(dimension))) sample.add(meanPoint) meanPoint += Point(meanPoint.getDimension(), 1.0) aCollection.add(Normal(meanPoint, sigma, IdentityMatrix(dimension))) sample.add(meanPoint) # Instanciate one distribution object distribution = KernelMixture(Normal(), sigma, sample) print("Distribution ", repr(distribution)) print("Distribution ", distribution) distributionRef = Mixture(aCollection) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 100 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (ref)=", repr(distributionRef.computeDDF(point))) # by the finite difference technique ddfFD = Point(dimension) for i in range(dimension): left = Point(point) left[i] += eps right = Point(point) right[i] -= eps ddfFD[i] = (distribution.computePDF(left) - distribution.computePDF(right)) / (2.0 * eps) print("ddf (FD)=", repr(ddfFD)) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) print("pdf (ref)=%.6f" % distributionRef.computePDF(point)) # by the finite difference technique from CDF if (dimension == 1): print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) print("cdf (ref)=%.6f" % distributionRef.computeCDF(point)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("quantile (ref)=", repr(distributionRef.computeQuantile(0.95))) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions if distribution.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", distribution.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = distribution.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", distribution.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", distribution.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", distribution.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) x = [1.1, 1.6, 2.2] q = [0.1, 0.3, 0.7] y = [[-0.5], [0.5], [1.5]] condCDF = distribution.computeConditionalCDF(x[0], y[0]) print("cond. cdf=%.6f" % condCDF) condCDFs = distribution.computeConditionalCDF(x, y) print("cond. cdf (vect)=", condCDFs) condPDF = distribution.computeConditionalPDF(x[0], y[0]) print("cond. pdf=%.6f" % condPDF) condPDFs = distribution.computeConditionalPDF(x, y) print("cond. pdf (vect)=", condPDFs) condQuantile = distribution.computeConditionalQuantile(q[0], y[0]) print("cond. quantile=%.5f" % condQuantile) condQuantiles = distribution.computeConditionalQuantile(q, y) print("cond. quantile (vect)=", condQuantiles) print("cond. cdf(cond. quantile)=", distribution.computeConditionalCDF(condQuantiles, y)) mean = distribution.getMean() print("mean=", repr(mean)) print("mean (ref)=", repr(distributionRef.getMean())) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) print("covariance (ref)=", repr(distributionRef.getCovariance())) # parameters = distribution.getParametersCollection() # print "parameters=" , parameters except: import sys print("t_KernelMixture_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KernelSmoothing_std.expout000066400000000000000000000231101307543307100234730ustar00rootroot00000000000000kernel= Normal kernel bandwidth=[ 0.745017254401 , 1.51723933597 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.024762 pdf(exact)=0.028050 cdf(smoothed)=0.279515 cdf(exact)=0.305529 kernel= Epanechnikov kernel bandwidth=[ 1.66590922525 , 3.39265029337 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.024591 pdf(exact)=0.028050 cdf(smoothed)=0.278675 cdf(exact)=0.305529 kernel= Uniform kernel bandwidth=[ 1.29040773714 , 2.62793561715 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.023591 pdf(exact)=0.028050 cdf(smoothed)=0.278627 cdf(exact)=0.305529 kernel= Triangular kernel bandwidth=[ 1.82491212285 , 3.71646219081 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.024693 pdf(exact)=0.028050 cdf(smoothed)=0.278851 cdf(exact)=0.305529 kernel= Logistic kernel bandwidth=[ 0.410749539939 , 0.836497887192 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.025411 pdf(exact)=0.028050 cdf(smoothed)=0.280123 cdf(exact)=0.305529 kernel= Beta kernel bandwidth=[ 1.66590922525 , 3.39265029337 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.024591 pdf(exact)=0.028050 cdf(smoothed)=0.278675 cdf(exact)=0.305529 kernel= Beta kernel bandwidth=[ 1.9711303776 , 4.01423796235 ] mean(smoothed)=[ 0.504059916616 , -0.708163693757 ] mean(exact)=[ 0.5 , -0.5 ] covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4.10693,2.78725,2.78725,11.7692] covariance(exact)= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,3,3,9] Point= class=Point name=Unnamed dimension=2 values=[0,0] pdf(smoothed)=0.024498 pdf(exact)=0.028050 cdf(smoothed)=0.278830 cdf(exact)=0.305529 kernel= Normal Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.30285292321 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.206602753426 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.303411047573 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.205159940752 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.340008752088 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0879563419612 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.516733507886 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0500864327464 cdf(exact)= 0.0852121908344 kernel= Epanechnikov Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.302583998811 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208330264188 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.302583998811 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208330264188 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.316809578551 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0889725135795 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.521833645721 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0517197294116 cdf(exact)= 0.0852121908344 kernel= Uniform Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.302200836404 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208886666759 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.302200836404 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208886666759 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.294132562243 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0899223491878 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.482377402078 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0508262439895 cdf(exact)= 0.0852121908344 kernel= Triangular Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.30270050279 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208090874727 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.30270050279 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208090874727 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.334461667351 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0885624082321 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.531650116802 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0527500853222 cdf(exact)= 0.0852121908344 kernel= Logistic Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.303990074026 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.205569852158 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.305224518952 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.202472552453 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.356201577231 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0870209133827 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.502329730526 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0481263803958 cdf(exact)= 0.0852121908344 kernel= Beta Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.302583998811 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208330264188 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.302583998811 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.208330264188 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.316809578551 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0889725135795 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.521833645721 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0517197294116 cdf(exact)= 0.0852121908344 kernel= Beta Bounded underlying distribution? False bounded reconstruction? False pdf(smoothed)= 0.302281963351 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.207750702568 cdf(exact)= 0.184060125347 Bounded underlying distribution? False bounded reconstruction? True pdf(smoothed)= 0.302281963351 pdf(exact)= 0.266085249899 cdf(smoothed)= 0.207750702568 cdf(exact)= 0.184060125347 Bounded underlying distribution? True bounded reconstruction? False pdf(smoothed)= 0.324638535683 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0886618499491 cdf(exact)= 0.0852121908344 Bounded underlying distribution? True bounded reconstruction? True pdf(smoothed)= 0.527875250109 pdf(exact)= 0.597680964865 cdf(smoothed)= 0.0522553592641 cdf(exact)= 0.0852121908344 with low bin count, pdf=0.362958 with high bin count, pdf=0.365081 without binning, pdf=0.365145 openturns-1.9/python/test/t_KernelSmoothing_std.py000077500000000000000000000076321307543307100226150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution = Normal(meanPoint, sigma, R) discretization = 100 kernel = KernelSmoothing() sample = distribution.getSample(discretization) kernels = DistributionCollection(0) kernels.add(Normal()) kernels.add(Epanechnikov()) kernels.add(Uniform()) kernels.add(Triangular()) kernels.add(Logistic()) kernels.add(Beta(2.0, 4.0, -1.0, 1.0)) kernels.add(Beta(3.0, 6.0, -1.0, 1.0)) meanExact = distribution.getMean() covarianceExact = distribution.getCovariance() for i in range(kernels.getSize()): kernel = kernels[i] print("kernel=", kernel.getName()) smoother = KernelSmoothing(kernel) smoothed = smoother.build(sample) bw = smoother.getBandwidth() print("kernel bandwidth=[ %.12g" % bw[0], ", %.12g" % bw[1], "]") meanSmoothed = smoothed.getMean() print("mean(smoothed)=[ %.12g" % meanSmoothed[0], ", %.12g" % meanSmoothed[ 1], "] mean(exact)=[", meanExact[0], ", ", meanExact[1], "]") covarianceSmoothed = smoothed.getCovariance() print("covariance=", repr(covarianceSmoothed), " covariance(exact)=", repr(covarianceExact)) # Define a point point = Point(smoothed.getDimension(), 0.0) # Show PDF and CDF of point point pointPDF = smoothed.computePDF(point) pointCDF = smoothed.computeCDF(point) print("Point= ", repr(point)) print(" pdf(smoothed)=%.6f" % pointPDF) print(" pdf(exact)=%.6f" % distribution.computePDF(point)) print(" cdf(smoothed)=%.6f" % pointCDF) print(" cdf(exact)=%.6f" % distribution.computeCDF(point)) # Test for boundary correction distributionCollection = DistributionCollection(2) distributionCollection[0] = Normal(0.0, 1.0) distributionCollection[1] = Beta(0.7, 1.6, -1.0, 2.0) sampleCollection = [distributionCollection[0].getSample( discretization), distributionCollection[1].getSample(discretization)] for i in range(kernels.getSize()): kernel = kernels[i] print("kernel=", kernel.getName()) smoother = KernelSmoothing(kernel) for j in range(2): for corr in [False, True]: smoother.setBoundaryCorrection(corr) smoothed = smoother.build(sampleCollection[j]) print("Bounded underlying distribution? ", j == 1, " bounded reconstruction? ", corr) # Define a point point = Point(smoothed.getDimension(), -0.9) # Show PDF and CDF of point point pointPDF = smoothed.computePDF(point) pointCDF = smoothed.computeCDF(point) print(" pdf(smoothed)= %.12g" % pointPDF, " pdf(exact)= %.12g" % distributionCollection[j].computePDF(point)) print(" cdf(smoothed)= %.12g" % pointCDF, " cdf(exact)= %.12g" % distributionCollection[j].computeCDF(point)) sample = Normal().getSample(5000) ks1 = KernelSmoothing(Normal(), True, 64).build(sample) ks2 = KernelSmoothing(Normal(), True, 1024).build(sample) ks3 = KernelSmoothing(Normal(), False).build(sample) point = 0.3 print("with low bin count, pdf=%.6f" % ks1.computePDF(point)) print("with high bin count, pdf=%.6f" % ks2.computePDF(point)) print("without binning, pdf=%.6f" % ks3.computePDF(point)) except: import sys print("t_KernelSmoothing_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KissFFT_std.expout000066400000000000000000000526401307543307100216460ustar00rootroot00000000000000myFFT = class=KissFFT collection = [(0.00625,0.01875),(0.0125,0.0375),(0.01875,0.05625),(0.025,0.075),(0.03125,0.09375),(0.0375,0.1125),(0.04375,0.13125),(0.05,0.15),(0.05625,0.16875),(0.0625,0.1875),(0.06875,0.20625),(0.075,0.225),(0.08125,0.24375),(0.0875,0.2625),(0.09375,0.28125),(0.1,0.3)]#16 FFT result = [(0.85,2.55),(-0.804101,0.101367),(-0.412132,-0.0292893),(-0.274491,-0.0751697),(-0.2,-0.1),(-0.150227,-0.116591),(-0.112132,-0.129289),(-0.0798369,-0.140054),(-0.05,-0.15),(-0.0201631,-0.159946),(0.012132,-0.170711),(0.0502268,-0.183409),(0.1,-0.2),(0.174491,-0.22483),(0.312132,-0.270711),(0.704101,-0.401367)]#16 FFT back= [(0.00625,0.01875),(0.0125,0.0375),(0.01875,0.05625),(0.025,0.075),(0.03125,0.09375),(0.0375,0.1125),(0.04375,0.13125),(0.05,0.15),(0.05625,0.16875),(0.0625,0.1875),(0.06875,0.20625),(0.075,0.225),(0.08125,0.24375),(0.0875,0.2625),(0.09375,0.28125),(0.1,0.3)]#16 2D FFT result = class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=16 columns=8 values=[(3.16931,0),(-6.37974,-6.11715),(-3.08415,7.98457),(-3.94566,11.2042),(-6.06117,0.666391),(1.64417,-4.14897),(0.514855,-1.88685),(12.1186,2.12964),(-3.02083,0),(12.1186,-2.12964),(0.514855,1.88685),(1.64417,4.14897),(-6.06117,-0.666391),(-3.94566,-11.2042),(-3.08415,-7.98457),(-6.37974,6.11715),(-5.77029,-7.24883),(2.74425,-11.564),(-0.00975469,7.31483),(0.891148,-9.51602),(6.6154,-6.00256),(6.00561,2.52621),(-15.575,8.59167),(-9.28442,-3.98255),(-5.17818,-10.0408),(4.20585,6.02783),(4.83876,11.9249),(10.0731,-8.599),(-0.0536966,8.00215),(16.0247,18.8431),(15.4013,12.397),(-1.95861,3.56567),(-1.05663,1.32169),(2.09575,-3.59862),(5.99934,-1.77031),(-3.98933,1.22167),(-20.083,-1.39086),(8.94795,0.745915),(9.20289,10.223),(10.2257,2.6964),(-13.419,-4.45021),(17.0168,5.38565),(-2.41489,12.0928),(-13.2123,-1.87316),(5.23849,9.71701),(-13.3254,3.81627),(14.3634,9.2868),(-18.0684,13.5177),(-2.88771,5.28856),(15.1357,-11.4632),(2.07741,-5.21248),(-1.21193,-4.07099),(5.88504,-2.00739),(8.22369,-3.63049),(-1.8181,11.6403),(5.49036,-7.86156),(6.41094,-6.75183),(11.4121,11.911),(16.212,11.8775),(1.5975,3.40853),(-6.17229,13.9538),(-7.20154,9.75362),(-2.26459,4.21167),(9.40803,-11.4716),(1.9222,0),(-14.7845,5.87216),(-1.07367,6.76406),(-14.8554,-8.10692),(0.0676694,-0.429114),(10.2596,8.50865),(-12.6516,3.74506),(-0.975958,1.01511),(0.616574,0),(-0.975958,-1.01511),(-12.6516,-3.74506),(10.2596,-8.50865),(0.0676694,0.429114),(-14.8554,8.10692),(-1.07367,-6.76406),(-14.7845,-5.87216),(-2.88771,-5.28856),(9.40803,11.4716),(-2.26459,-4.21167),(-7.20154,-9.75362),(-6.17229,-13.9538),(1.5975,-3.40853),(16.212,-11.8775),(11.4121,-11.911),(6.41094,6.75183),(5.49036,7.86156),(-1.8181,-11.6403),(8.22369,3.63049),(5.88504,2.00739),(-1.21193,4.07099),(2.07741,5.21248),(15.1357,11.4632),(-1.05663,-1.32169),(-18.0684,-13.5177),(14.3634,-9.2868),(-13.3254,-3.81627),(5.23849,-9.71701),(-13.2123,1.87316),(-2.41489,-12.0928),(17.0168,-5.38565),(-13.419,4.45021),(10.2257,-2.6964),(9.20289,-10.223),(8.94795,-0.745915),(-20.083,1.39086),(-3.98933,-1.22167),(5.99934,1.77031),(2.09575,3.59862),(-5.77029,7.24883),(-1.95861,-3.56567),(15.4013,-12.397),(16.0247,-18.8431),(-0.0536966,-8.00215),(10.0731,8.599),(4.83876,-11.9249),(4.20585,-6.02783),(-5.17818,10.0408),(-9.28442,3.98255),(-15.575,-8.59167),(6.00561,-2.52621),(6.6154,6.00256),(0.891148,9.51602),(-0.00975469,-7.31483),(2.74425,11.564)] 2D FFT back= class=ComplexMatrix implementation=class=ComplexMatrixImplementation name=Unnamed rows=16 columns=8 values=[(0.608202,0),(0.810668,0),(0.995793,0),(0.473617,0),(-1.78796,0),(0.407717,0),(0.0521593,0),(1.73821,0),(-0.777033,0),(1.70938,0),(-0.957072,0),(-1.96869,0),(-0.238253,0),(0.01323,0),(-0.465482,0),(-2.4067,0),(-1.26617,0),(0.793156,0),(-0.139453,0),(-0.125498,0),(0.40136,0),(-0.485112,0),(0.790446,0),(-0.958722,0),(-1.36853,0),(1.07062,0),(0.544047,0),(-0.657603,0),(1.3263,0),(-1.25743,0),(0.332084,0),(0.662936,0),(-0.438266,0),(-0.470526,0),(-0.560206,0),(0.351418,0),(1.36783,0),(-0.382992,0),(0.716353,0),(0.377922,0),(0.103474,0),(-0.506925,0),(0.814561,0),(0.338751,0),(2.11968,0),(1.02776,0),(-0.167726,0),(-0.65616,0),(1.20548,0),(0.261018,0),(0.44549,0),(1.78236,0),(1.00434,0),(-0.752817,0),(-0.743622,0),(-0.181004,0),(-0.89182,0),(-1.66086,0),(-0.734708,0),(1.01556,0),(-0.901581,0),(-0.766431,0),(3.01263,0),(-0.751611,0),(-2.18139,0),(-2.29006,0),(0.322925,0),(0.0702074,0),(0.741548,0),(0.257926,0),(0.184356,0),(1.67297,0),(0.905602,0),(2.24623,0),(-0.111461,0),(0.637167,0),(-1.51696,0),(0.217512,0),(0.94204,0),(0.438177,0),(0.350042,0),(-1.28289,0),(0.445785,0),(-0.781366,0),(-0.0436123,0),(1.96876,0),(-1.53073,0),(-1.03896,0),(0.334794,0),(0.759602,0),(0.994482,0),(-0.0899071,0),(-1.29938,0),(1.04533,0),(0.61189,0),(-0.455335,0),(-0.355007,0),(-1.31178,0),(-1.03808,0),(-0.721533,0),(0.539345,0),(-0.671291,0),(0.655027,0),(-0.353552,0),(-0.483642,0),(-0.510764,0),(-0.160625,0),(-0.855886,0),(0.230372,0),(0.331569,0),(0.611715,0),(1.86038,0),(1.43725,0),(-0.0907838,0),(-0.856712,0),(-0.241223,0),(0.29995,0),(1.85579,0),(0.538071,0),(1.21381,0),(0.677958,0),(-0.633066,0),(-0.938771,0),(1.27128,0),(-3.09737,0),(-0.488205,0),(-1.5375,0),(0.219721,0)] 3D FFT result = class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=8 columns=8 sheets=8 values=[(251.366,0),(-3.67643,-1.97743),(0.372505,-4.42187),(-7.20319,0.900825),(-8.77573,0),(-7.20319,-0.900825),(0.372505,4.42187),(-3.67643,1.97743),(-2.14507,8.76073),(2.19446,-3.88014),(-2.39598,-6.59607),(2.27595,3.05807),(-2.9663,2.53117),(7.70661,-3.78059),(-0.0821367,-1.61704),(-7.25816,-2.70646),(-2.67706,10.7771),(1.03403,2.79299),(6.4127,-7.27683),(5.61049,1.38333),(-1.79031,2.65727),(5.08144,6.4724),(-1.53314,-6.44762),(1.82104,-2.41083),(-4.93371,-3.08283),(3.28991,-0.272426),(7.95986,0.170511),(-1.12441,0.484677),(4.13136,4.90169),(-1.60446,-0.854862),(2.30987,-5.53535),(4.67579,-0.706573),(7.82598,0),(-0.513339,0.799294),(3.11598,1.16338),(3.64803,0.803833),(1.71283,0),(3.64803,-0.803833),(3.11598,-1.16338),(-0.513339,-0.799294),(-4.93371,3.08283),(4.67579,0.706573),(2.30987,5.53535),(-1.60446,0.854862),(4.13136,-4.90169),(-1.12441,-0.484677),(7.95986,-0.170511),(3.28991,0.272426),(-2.67706,-10.7771),(1.82104,2.41083),(-1.53314,6.44762),(5.08144,-6.4724),(-1.79031,-2.65727),(5.61049,-1.38333),(6.4127,7.27683),(1.03403,-2.79299),(-2.14507,-8.76073),(-7.25816,2.70646),(-0.0821367,1.61704),(7.70661,3.78059),(-2.9663,-2.53117),(2.27595,-3.05807),(-2.39598,6.59607),(2.19446,3.88014),(0.187771,2.37335),(-5.43854,0.925472),(-6.08499,-2.14861),(2.78709,-3.27061),(1.33206,-1.95908),(2.75269,-2.44245),(3.6527,3.08883),(0.23898,0.707856),(-1.01381,-1.8573),(7.8854,7.82022),(4.94362,6.49289),(1.83087,4.57766),(6.32501,2.38882),(-0.41581,2.78819),(0.677342,5.61287),(-5.31416,-4.23129),(3.93423,-2.3738),(2.62059,6.40115),(-4.9293,0.371557),(-4.88171,0.0758294),(-2.69103,1.01601),(5.80211,-1.26894),(-4.06134,-4.30177),(3.48867,5.29096),(0.191568,4.97804),(1.34926,-4.53111),(-5.14072,-0.615674),(-0.715909,7.59079),(-2.59928,-5.51526),(6.89393,4.57647),(-6.43395,0.660881),(-1.04376,-2.27764),(12.1179,-0.314082),(-1.16095,3.93147),(0.398535,-5.53735),(4.94985,0.0701975),(-0.669426,-6.85187),(-3.44821,-3.29637),(-3.31997,-9.44573),(-0.942706,1.42498),(1.48589,-2.71922),(-1.22267,1.11963),(5.86752,3.41474),(2.39107,-7.08939),(1.69394,-6.11442),(5.09494,2.59488),(-1.94294,-2.79434),(-1.68045,11.6288),(1.08351,5.19534),(1.08533,13.1807),(-1.03956,1.83316),(-2.11414,7.33073),(2.9152,-3.15176),(7.31179,5.67899),(-0.270706,-0.92924),(-1.78581,-3.31918),(0.829537,-6.70154),(6.32139,2.00577),(-2.25564,3.64862),(-2.19019,5.69749),(-0.957297,-2.60957),(1.36463,3.24401),(3.96438,0.36181),(-1.85744,-1.17386),(-1.85747,4.59885),(1.64041,-3.69481),(-1.88295,-0.394478),(-0.808682,0.463141),(5.17111,-0.36112),(-3.70348,2.67759),(2.09781,-5.47209),(5.12277,-5.29627),(-1.3909,-1.96723),(-3.02798,5.69424),(-0.454061,-4.35633),(2.35871,0.671382),(-9.52424,10.9923),(-11.2803,-0.726768),(1.63589,1.21055),(2.56222,-1.24097),(-1.78297,-11.6813),(5.1908,-7.49652),(1.98751,-6.27251),(6.07422,13.3287),(-0.0701297,7.31216),(3.49661,9.02335),(-1.24376,3.9524),(-10.7391,-0.645528),(2.15762,1.42563),(7.90364,-9.93058),(0.766898,3.77439),(5.55309,-3.77043),(7.03424,0.246925),(-5.48612,2.38607),(1.18055,-2.32142),(-0.619615,1.18021),(3.37304,-5.99618),(9.56121,3.63922),(0.407172,0.0474905),(-2.63397,-2.29265),(-0.063046,-0.0321475),(-7.48226,2.9921),(0.928863,8.2119),(7.61621,6.46902),(-6.31455,-5.64847),(5.53063,-5.30196),(4.54697,4.89516),(-7.40746,-8.27577),(-8.07358,-10.1258),(6.48391,2.14556),(8.14205,-14.1698),(-0.650693,8.00003),(16.4279,-5.58752),(-3.72208,-2.72732),(4.31933,6.16014),(-4.48134,5.57602),(-3.65578,4.97737),(-1.0365,4.83618),(2.87426,1.52784),(3.02034,-2.20162),(7.43833,-0.774667),(8.62474,1.59037),(4.93578,-1.77876),(-5.86654,2.57141),(-6.72208,-2.03671),(2.63962,0.913302),(-2.39201,-6.2213),(-2.22993,5.27745),(-2.57889,3.52221),(-0.489585,-11.4792),(1.89165,-0.284362),(-1.65635,1.72639),(-7.2041,6.86237),(0.810474,0.146287),(-5.52089,-4.36887),(-1.92296,-1.93684),(0.446434,-3.94159),(4.8001,2.34297),(0.359383,1.92795),(7.94462,-1.76607),(0.694383,0.411013),(-4.51274,5.65217),(0.605974,-11.8745),(5.85647,3.57181),(2.23636,5.02514),(-5.07173,1.13531),(-9.03279,4.7894),(-1.96137,0.3007),(-3.15902,-4.20572),(-1.82873,1.35372),(-5.36675,-0.749461),(0.861778,2.39758),(-0.809417,3.61295),(12.3988,3.37519),(-1.94812,0.84198),(1.36025,-3.11121),(-2.56085,0.398625),(1.3224,-4.47159),(1.90939,-3.02468),(-1.52454,2.59174),(1.39788,1.21237),(6.11712,-3.9164),(3.62808,-3.76329),(1.17541,0.518159),(-2.17077,-2.55519),(-7.46629,5.41932),(4.45745,5.87329),(1.9756,1.67657),(3.04835,5.26253),(-0.342992,-8.53416),(-3.2719,3.319),(-1.281,8.93442),(-11.8845,1.76736),(-2.88645,11.6464),(2.91117,2.52709),(6.1425,4.39348),(2.20046,6.8072),(-0.745681,-3.34617),(-2.8726,3.15479),(8.75704,-1.98246),(5.99158,-0.825486),(1.73519,-2.5161),(-5.0841,-2.91958),(0.675155,0.194499),(0.29311,-6.26658),(-0.689971,-4.23263),(4.36803,5.41822),(-0.300137,-5.60686),(-9.24465,1.59788),(6.16626,-5.91503),(12.5004,-1.09081),(-4.71208,-5.51736),(-5.37047,0),(5.26066,-4.75094),(-3.36831,-1.05659),(-6.61605,-0.569846),(-3.25144,0),(-6.61605,0.569846),(-3.36831,1.05659),(5.26066,4.75094),(-1.17868,1.79631),(5.736,5.40956),(4.91792,-2.73938),(-3.00311,0.893223),(3.90236,-1.30788),(-6.63711,0.0680877),(-0.42711,-3.12506),(-4.88687,-6.03725),(-2.23785,8.87241),(0.936285,-3.45642),(-2.71667,0.172025),(4.4879,-5.7004),(-1.19191,9.45947),(-2.62254,6.33042),(7.25843,4.03038),(1.25569,-2.39199),(5.94487,4.04341),(-1.75648,-4.36934),(2.82698,1.92932),(0.70445,3.36571),(6.73257,-7.2905),(-1.46477,2.07726),(-0.524141,-1.35252),(2.00054,-0.826188),(-10.5161,0),(-6.64381,3.85942),(-0.779638,-2.4443),(-0.0896355,-2.6649),(-1.08926,0),(-0.0896355,2.6649),(-0.779638,2.4443),(-6.64381,-3.85942),(5.94487,-4.04341),(2.00054,0.826188),(-0.524141,1.35252),(-1.46477,-2.07726),(6.73257,7.2905),(0.70445,-3.36571),(2.82698,-1.92932),(-1.75648,4.36934),(-2.23785,-8.87241),(1.25569,2.39199),(7.25843,-4.03038),(-2.62254,-6.33042),(-1.19191,-9.45947),(4.4879,5.7004),(-2.71667,-0.172025),(0.936285,3.45642),(-1.17868,-1.79631),(-4.88687,6.03725),(-0.42711,3.12506),(-6.63711,-0.0680877),(3.90236,1.30788),(-3.00311,-0.893223),(4.91792,2.73938),(5.736,-5.40956),(-2.57889,-3.52221),(-1.92296,1.93684),(-5.52089,4.36887),(0.810474,-0.146287),(-7.2041,-6.86237),(-1.65635,-1.72639),(1.89165,0.284362),(-0.489585,11.4792),(0.29311,6.26658),(-4.71208,5.51736),(12.5004,1.09081),(6.16626,5.91503),(-9.24465,-1.59788),(-0.300137,5.60686),(4.36803,-5.41822),(-0.689971,4.23263),(2.20046,-6.8072),(0.675155,-0.194499),(-5.0841,2.91958),(1.73519,2.5161),(5.99158,0.825486),(8.75704,1.98246),(-2.8726,-3.15479),(-0.745681,3.34617),(3.04835,-5.26253),(6.1425,-4.39348),(2.91117,-2.52709),(-2.88645,-11.6464),(-11.8845,-1.76736),(-1.281,-8.93442),(-3.2719,-3.319),(-0.342992,8.53416),(1.39788,-1.21237),(1.9756,-1.67657),(4.45745,-5.87329),(-7.46629,-5.41932),(-2.17077,2.55519),(1.17541,-0.518159),(3.62808,3.76329),(6.11712,3.9164),(-0.809417,-3.61295),(-1.52454,-2.59174),(1.90939,3.02468),(1.3224,4.47159),(-2.56085,-0.398625),(1.36025,3.11121),(-1.94812,-0.84198),(12.3988,-3.37519),(2.23636,-5.02514),(0.861778,-2.39758),(-5.36675,0.749461),(-1.82873,-1.35372),(-3.15902,4.20572),(-1.96137,-0.3007),(-9.03279,-4.7894),(-5.07173,-1.13531),(0.446434,3.94159),(5.85647,-3.57181),(0.605974,11.8745),(-4.51274,-5.65217),(0.694383,-0.411013),(7.94462,1.76607),(0.359383,-1.92795),(4.8001,-2.34297),(-1.85747,-4.59885),(5.12277,5.29627),(2.09781,5.47209),(-3.70348,-2.67759),(5.17111,0.36112),(-0.808682,-0.463141),(-1.88295,0.394478),(1.64041,3.69481),(7.43833,0.774667),(-2.22993,-5.27745),(-2.39201,6.2213),(2.63962,-0.913302),(-6.72208,2.03671),(-5.86654,-2.57141),(4.93578,1.77876),(8.62474,-1.59037),(16.4279,5.58752),(3.02034,2.20162),(2.87426,-1.52784),(-1.0365,-4.83618),(-3.65578,-4.97737),(-4.48134,-5.57602),(4.31933,-6.16014),(-3.72208,2.72732),(-6.31455,5.64847),(-0.650693,-8.00003),(8.14205,14.1698),(6.48391,-2.14556),(-8.07358,10.1258),(-7.40746,8.27577),(4.54697,-4.89516),(5.53063,5.30196),(3.37304,5.99618),(7.61621,-6.46902),(0.928863,-8.2119),(-7.48226,-2.9921),(-0.063046,0.0321475),(-2.63397,2.29265),(0.407172,-0.0474905),(9.56121,-3.63922),(2.15762,-1.42563),(-0.619615,-1.18021),(1.18055,2.32142),(-5.48612,-2.38607),(7.03424,-0.246925),(5.55309,3.77043),(0.766898,-3.77439),(7.90364,9.93058),(-1.78297,11.6813),(-10.7391,0.645528),(-1.24376,-3.9524),(3.49661,-9.02335),(-0.0701297,-7.31216),(6.07422,-13.3287),(1.98751,6.27251),(5.1908,7.49652),(-1.3909,1.96723),(2.56222,1.24097),(1.63589,-1.21055),(-11.2803,0.726768),(-9.52424,-10.9923),(2.35871,-0.671382),(-0.454061,4.35633),(-3.02798,-5.69424),(0.187771,-2.37335),(0.23898,-0.707856),(3.6527,-3.08883),(2.75269,2.44245),(1.33206,1.95908),(2.78709,3.27061),(-6.08499,2.14861),(-5.43854,-0.925472),(0.829537,6.70154),(-1.85744,1.17386),(3.96438,-0.36181),(1.36463,-3.24401),(-0.957297,2.60957),(-2.19019,-5.69749),(-2.25564,-3.64862),(6.32139,-2.00577),(1.08351,-5.19534),(-1.78581,3.31918),(-0.270706,0.92924),(7.31179,-5.67899),(2.9152,3.15176),(-2.11414,-7.33073),(-1.03956,-1.83316),(1.08533,-13.1807),(1.48589,2.71922),(-1.68045,-11.6288),(-1.94294,2.79434),(5.09494,-2.59488),(1.69394,6.11442),(2.39107,7.08939),(5.86752,-3.41474),(-1.22267,-1.11963),(12.1179,0.314082),(-0.942706,-1.42498),(-3.31997,9.44573),(-3.44821,3.29637),(-0.669426,6.85187),(4.94985,-0.0701975),(0.398535,5.53735),(-1.16095,-3.93147),(0.191568,-4.97804),(-1.04376,2.27764),(-6.43395,-0.660881),(6.89393,-4.57647),(-2.59928,5.51526),(-0.715909,-7.59079),(-5.14072,0.615674),(1.34926,4.53111),(3.93423,2.3738),(3.48867,-5.29096),(-4.06134,4.30177),(5.80211,1.26894),(-2.69103,-1.01601),(-4.88171,-0.0758294),(-4.9293,-0.371557),(2.62059,-6.40115),(-1.01381,1.8573),(-5.31416,4.23129),(0.677342,-5.61287),(-0.41581,-2.78819),(6.32501,-2.38882),(1.83087,-4.57766),(4.94362,-6.49289),(7.8854,-7.82022)] 3D FFT back= class=ComplexTensor implementation=class=ComplexTensorImplementation name=Unnamed rows=8 columns=8 sheets=8 values=[(0.901532,0),(0.872797,0),(0.320412,0),(0.996377,0),(0.311808,0),(0.220652,0),(0.349851,0),(0.949285,0),(0.0477304,0),(0.0791328,0),(0.0606909,0),(0.0475671,0),(0.395072,0),(0.871399,0),(0.00775935,0),(0.963321,0),(0.150419,0),(0.768282,0),(0.52002,0),(0.33744,0),(0.819759,0),(0.408766,0),(0.0121888,0),(0.503649,0),(0.294143,0),(0.229737,0),(0.842879,0),(0.626339,0),(0.117037,0),(0.00424093,0),(0.0959054,0),(0.414321,0),(0.241681,0),(0.698317,0),(0.793294,0),(0.315328,0),(0.501471,0),(0.933127,0),(0.971199,0),(0.215199,0),(0.364325,0),(0.713948,0),(0.638032,0),(0.866042,0),(0.482234,0),(0.0693131,0),(0.492862,0),(0.0881152,0),(0.530443,0),(0.908716,0),(0.411431,0),(0.154144,0),(0.448536,0),(0.199529,0),(0.527627,0),(0.493307,0),(0.291282,0),(0.360299,0),(0.6069,0),(0.555687,0),(0.552027,0),(0.600321,0),(0.903757,0),(0.218234,0),(0.534703,0),(0.242476,0),(0.423206,0),(0.139994,0),(0.836659,0),(0.955023,0),(0.798566,0),(0.757314,0),(0.616354,0),(0.960683,0),(0.0493002,0),(0.81209,0),(0.442067,0),(0.533371,0),(0.122134,0),(0.726119,0),(0.938274,0),(0.101407,0),(0.89066,0),(0.536602,0),(0.293536,0),(0.864078,0),(0.627852,0),(0.196993,0),(0.207499,0),(0.996742,0),(0.00143427,0),(0.313233,0),(0.0199802,0),(0.0515033,0),(0.20001,0),(0.0286926,0),(0.562026,0),(0.670163,0),(0.559764,0),(0.592898,0),(0.611045,0),(0.463699,0),(0.367699,0),(0.893983,0),(0.913126,0),(0.121696,0),(0.100329,0),(0.160161,0),(0.743017,0),(0.147739,0),(0.674196,0),(0.240217,0),(0.561498,0),(0.492979,0),(0.618953,0),(0.588282,0),(0.756584,0),(0.436101,0),(0.180434,0),(0.465164,0),(0.189075,0),(0.667181,0),(0.68124,0),(0.00751686,0),(0.199793,0),(0.855826,0),(0.49455,0),(0.153684,0),(0.279509,0),(0.00110479,0),(0.295463,0),(0.449075,0),(0.922485,0),(0.603463,0),(0.975901,0),(0.00510658,0),(0.117853,0),(0.64898,0),(0.232903,0),(0.225701,0),(0.369216,0),(0.0871069,0),(0.595619,0),(0.226544,0),(0.295896,0),(0.32545,0),(0.81107,0),(0.387509,0),(0.336025,0),(0.758478,0),(0.316421,0),(0.520973,0),(0.988946,0),(0.770525,0),(0.644731,0),(0.451343,0),(0.73164,0),(0.288055,0),(0.902017,0),(0.519411,0),(0.372213,0),(0.749742,0),(0.0548972,0),(0.909451,0),(0.464768,0),(0.64036,0),(0.147879,0),(0.145031,0),(0.0854764,0),(0.963641,0),(0.808553,0),(0.300608,0),(0.27324,0),(0.900241,0),(0.0257728,0),(0.42838,0),(0.6675,0),(0.296415,0),(0.969349,0),(0.737274,0),(0.86191,0),(0.899327,0),(0.048745,0),(0.102737,0),(0.0953205,0),(0.942164,0),(0.962162,0),(0.323319,0),(0.315286,0),(0.879535,0),(0.486312,0),(0.558839,0),(0.362054,0),(0.423671,0),(0.410333,0),(0.588362,0),(0.25206,0),(0.295404,0),(0.0616908,0),(0.13637,0),(0.458256,0),(0.240138,0),(0.49155,0),(0.914179,0),(0.610583,0),(0.973747,0),(0.617949,0),(0.00726908,0),(0.340834,0),(0.990126,0),(0.153202,0),(0.0416536,0),(0.585922,0),(0.335709,0),(0.0473599,0),(0.99313,0),(0.0253824,0),(0.726601,0),(0.322316,0),(0.811466,0),(0.597043,0),(0.849425,0),(0.371581,0),(0.80116,0),(0.759207,0),(0.085111,0),(0.486362,0),(0.543351,0),(0.677443,0),(0.431848,0),(0.311368,0),(0.00789952,0),(0.0358374,0),(0.204519,0),(0.351313,0),(0.253795,0),(0.429314,0),(0.0204337,0),(0.51169,0),(0.481518,0),(0.978697,0),(0.725105,0),(0.550516,0),(0.76771,0),(0.569658,0),(0.628995,0),(0.711662,0),(0.972339,0),(0.38338,0),(0.716526,0),(0.883387,0),(0.909294,0),(0.0511235,0),(0.721716,0),(0.877846,0),(0.834947,0),(0.549311,0),(0.796874,0),(0.185003,0),(0.0994375,0),(0.907442,0),(0.249664,0),(0.214906,0),(0.354399,0),(0.105242,0),(0.856746,0),(0.518905,0),(0.0399128,0),(0.211035,0),(0.719794,0),(0.164955,0),(0.998465,0),(0.58276,0),(0.459105,0),(0.282338,0),(0.165129,0),(0.175967,0),(0.401304,0),(0.95512,0),(0.464518,0),(0.91348,0),(0.573855,0),(0.759522,0),(0.685527,0),(0.599481,0),(0.11762,0),(0.490815,0),(0.498501,0),(0.693914,0),(0.723598,0),(0.150939,0),(0.489266,0),(0.38804,0),(0.515168,0),(0.368962,0),(0.333008,0),(0.699854,0),(0.167483,0),(0.0519198,0),(0.272503,0),(0.916083,0),(0.0314856,0),(0.469154,0),(0.783467,0),(0.00444693,0),(0.175808,0),(0.960051,0),(0.319286,0),(0.509083,0),(0.01879,0),(0.58184,0),(0.929952,0),(0.350229,0),(0.753129,0),(0.792789,0),(0.759641,0),(0.633719,0),(0.798922,0),(0.882795,0),(0.260345,0),(0.653773,0),(0.861233,0),(0.439678,0),(0.888738,0),(0.297716,0),(0.621804,0),(0.0308063,0),(0.948673,0),(0.250718,0),(0.256264,0),(0.383321,0),(0.986556,0),(0.859676,0),(0.318308,0),(0.22163,0),(0.663711,0),(0.533507,0),(0.781865,0),(0.665661,0),(0.223279,0),(0.747211,0),(0.00291806,0),(0.412696,0),(0.0158012,0),(0.859267,0),(0.147885,0),(0.34912,0),(0.168197,0),(0.290976,0),(0.823184,0),(0.445103,0),(0.515978,0),(0.238667,0),(0.84527,0),(0.871445,0),(0.34421,0),(0.706781,0),(0.533343,0),(0.936858,0),(0.84254,0),(0.348014,0),(0.71065,0),(0.491741,0),(0.0877009,0),(0.909474,0),(0.175653,0),(0.643057,0),(0.944443,0),(0.308764,0),(0.198332,0),(0.131614,0),(0.7564,0),(0.370018,0),(0.939574,0),(0.339416,0),(0.286888,0),(0.241089,0),(0.295472,0),(0.644726,0),(0.491913,0),(0.331054,0),(0.617105,0),(0.172896,0),(0.0750455,0),(0.511945,0),(0.216676,0),(0.396025,0),(0.026715,0),(0.0187214,0),(0.73757,0),(0.205996,0),(0.377617,0),(0.774303,0),(0.599221,0),(0.207031,0),(0.71844,0),(0.445441,0),(0.0577331,0),(0.0490961,0),(0.242542,0),(0.256608,0),(0.259121,0),(0.00477589,0),(0.484872,0),(0.815318,0),(0.724005,0),(0.580271,0),(0.737812,0),(0.376436,0),(0.7361,0),(0.055602,0),(0.230181,0),(0.932012,0),(0.696571,0),(0.789655,0),(0.987523,0),(0.155707,0),(0.522042,0),(0.259342,0),(0.704798,0),(0.0804176,0),(0.0731289,0),(0.515662,0),(0.753321,0),(0.26725,0),(0.957684,0),(0.744031,0),(0.355983,0),(0.0981987,0),(0.361215,0),(0.0615345,0),(0.749186,0),(0.0222073,0),(0.974322,0),(0.907448,0),(0.912987,0),(0.633564,0),(0.632505,0),(0.481844,0),(0.699357,0),(0.731182,0),(0.637125,0),(0.631382,0),(0.697668,0),(0.510865,0),(0.384866,0),(0.442633,0),(0.715151,0),(0.825944,0),(0.103193,0),(0.687105,0),(0.68598,0),(0.0745197,0),(0.75824,0),(0.42528,0),(0.136291,0),(0.316628,0),(0.409526,0),(0.5318,0),(0.0610748,0),(0.376164,0),(0.510449,0),(0.695705,0),(0.13464,0),(0.251199,0),(0.54046,0),(0.298146,0),(0.849213,0),(0.534008,0),(0.415987,0),(0.897311,0),(0.379349,0),(0.286539,0),(0.548542,0),(0.428038,0),(0.201491,0),(0.627851,0),(0.751972,0),(0.900578,0),(0.607102,0),(0.843256,0),(0.305512,0),(0.280407,0),(0.581616,0),(0.708808,0),(0.890749,0),(0.857314,0),(0.807461,0),(0.337774,0),(0.192927,0),(0.357327,0),(0.935883,0),(0.959454,0),(0.705476,0),(0.141913,0),(0.440722,0),(0.317492,0),(0.830308,0),(0.893418,0),(0.625766,0),(0.944936,0),(0.561536,0),(0.700908,0),(0.798569,0),(0.498973,0),(0.306193,0),(0.642865,0),(0.464905,0),(0.944389,0),(0.73419,0),(0.597932,0),(0.313696,0)] openturns-1.9/python/test/t_KissFFT_std.py000077500000000000000000000040231307543307100207450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import math TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # for fft, the best implementation is given for N = 2^p size = 16 # collection for test collection = ComplexCollection(size) # Fill the data with artificial values # Create a complex gaussian sample for index in range(size): realPart = 0.1 * (index + 1.0) / size imagPart = 0.3 * (index + 1.0) / size collection[index] = realPart + 1j * imagPart # Instanciation of FFT class myFFT = KissFFT() print("myFFT = ", myFFT) # Initial transformation print("collection = ", collection) # FFT transform transformedCollection = ComplexCollection( myFFT.transform(collection)) print("FFT result = ", transformedCollection) # Inverse transformation inverseTransformedCollection = ComplexCollection( myFFT.inverseTransform(transformedCollection)) print("FFT back=", inverseTransformedCollection) # 2D case now N = 8 distribution = Normal(N) sample = distribution.getSample(2 * N) # cleaning parameter threshold = 1e-14 # FFT transform transformedSample = myFFT.transform2D(sample) print("2D FFT result = ", repr(transformedSample.clean(threshold))) # Inverse transformation inverseTransformedSample = myFFT.inverseTransform2D(transformedSample) print("2D FFT back=", repr(inverseTransformedSample.clean(threshold))) # 3D case elements = [RandomGenerator.Generate() for i in range(N * N * N)] tensor = ComplexTensor(N, N, N, elements) # FFT transform transformedTensor = myFFT.transform3D(tensor) print("3D FFT result = ", repr(transformedTensor.clean(threshold))) # Inverse transformation inverseTransformedTensor = myFFT.inverseTransform3D(transformedTensor) print("3D FFT back=", repr(inverseTransformedTensor.clean(threshold))) except: import sys print("t_KissFFT_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KrawtchoukFactory_std.expout000066400000000000000000000025021307543307100240370ustar00rootroot00000000000000krawtchouk( 0 )= 1 krawtchouk( 1 )= -2.0702 + 0.690066 * X krawtchouk( 2 )= 2.87494 - 2.27156 * X + 0.354931 * X^2 krawtchouk( 3 )= -3.07344 + 4.52796 * X - 1.61261 * X^2 + 0.158099 * X^3 krawtchouk( 4 )= 2.66168 - 7.00706 * X + 4.33182 * X^2 - 0.938865 * X^3 + 0.0651989 * X^4 krawtchouk( 5 )= -1.90879 + 9.52774 * X - 9.1726 * X^2 + 3.29374 * X^3 - 0.493542 * X^4 + 0.0259759 * X^5 krawtchouk( 6 )= 1.14072 - 12.7331 * X + 17.7364 * X^2 - 9.27688 * X^3 + 2.23022 * X^4 - 0.248377 * X^5 + 0.010349 * X^6 krawtchouk( 7 )= -0.56451 + 18.964 * X - 35.2541 * X^2 + 24.5639 * X^3 - 8.28138 * X^4 + 1.44595 * X^5 - 0.125475 * X^6 + 0.00426787 * X^7 krawtchouk( 8 )= 0.226308 - 35.492 * X + 80.3695 * X^2 - 69.1447 * X^3 + 29.9279 * X^4 - 7.1562 * X^5 + 0.95707 * X^6 - 0.0669173 * X^7 + 0.00190106 * X^8 krawtchouk( 9 )= -0.06984 + 91.4005 * X - 233.841 * X^2 + 233.472 * X^3 - 121.44 * X^4 + 36.5443 * X^5 - 6.5879 * X^6 + 0.700731 * X^7 - 0.0404809 * X^8 + 0.0009778 * X^9 krawtchouk(10) roots= class=Point name=Unnamed dimension=10 values=[3.92176e-05,1.00077,2.00643,3.03055,4.09408,5.2104,6.3761,7.57396,8.77477,9.9329] krawtchouk(10) nodes= [3.92176e-05,1.00077,2.00643,3.03055,4.09408,5.2104,6.3761,7.57396,8.77477,9.9329]#10 and weights= [0.0282538,0.121381,0.236762,0.276807,0.207965,0.097633,0.0268759,0.00401913,0.000293801,8.47269e-06]#10 openturns-1.9/python/test/t_KrawtchoukFactory_std.py000077500000000000000000000010361307543307100231470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: krawtchouk = KrawtchoukFactory(10, 0.3) for i in range(10): print("krawtchouk(", i, ")=", krawtchouk.build(i)) roots = krawtchouk.getRoots(10) print("krawtchouk(10) roots=", repr(roots)) nodes, weights = krawtchouk.getNodesAndWeights(10) print("krawtchouk(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_KrawtchoukFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_KrigingAlgorithm_cov.expout000066400000000000000000000000001307543307100236120ustar00rootroot00000000000000openturns-1.9/python/test/t_KrigingAlgorithm_std.expout000066400000000000000000000003031307543307100236230ustar00rootroot00000000000000X= 0 : [ 1 ] 1 : [ 3 ] 2 : [ 5 ] 3 : [ 6 ] 4 : [ 7 ] 5 : [ 8 ] f(X)= [ y ] 0 : [ 0.841471 ] 1 : [ 0.42336 ] 2 : [ -4.79462 ] 3 : [ -1.67649 ] 4 : [ 4.59891 ] 5 : [ 7.91487 ] openturns-1.9/python/test/t_KrigingAlgorithm_std.py000077500000000000000000000053631307543307100227450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from openturns.testing import * TESTPREAMBLE() # Test 1 sampleSize = 6 dimension = 1 f = Function(['x0'], ['y'], ['x0 * sin(x0)']) X = Sample(sampleSize, dimension) X2 = Sample(sampleSize, dimension) for i in range(sampleSize): X[i, 0] = 3.0 + i X2[i, 0] = 2.5 + i X[0, 0] = 1.0 X[1, 0] = 3.0 X2[0, 0] = 2.0 X2[1, 0] = 4.0 Y = f(X) Y2 = f(X2) # create algorithm basis = ConstantBasisFactory(dimension).build() covarianceModel = SquaredExponential([1e-05], [4.11749]) algo = KrigingAlgorithm(X, Y, covarianceModel, basis) algo.run() # perform an evaluation result = algo.getResult() print("X=", X) print("f(X)=", Y) assert_almost_equal(result.getMetaModel()(X), Y) assert_almost_equal(result.getResiduals(), [1.32804e-07], 1e-3, 1e-3) assert_almost_equal(result.getRelativeErrors(), [5.20873e-21]) # Kriging variance is 0 on learning points var = result.getConditionalCovariance(X) # assert_almost_equal could not be applied to matrices # application to Point covariancePoint = Point(var.getImplementation()) theoricalVariance = Point(sampleSize * sampleSize) assert_almost_equal(covariancePoint, theoricalVariance, 8.95e-7, 8.95e-7) # Test 2 # Kriging use case spatialDimension = 2 # Learning data levels = [8, 5] box = Box(levels) inputSample = box.generate() # Scale each direction inputSample *= 10.0 model = Function(['x', 'y'], ['z'], ['cos(0.5*x) + sin(y)']) outputSample = model(inputSample) # Validation sampleSize = 10 inputValidSample = ComposedDistribution( 2 * [Uniform(0, 10.0)]).getSample(sampleSize) outputValidSample = model(inputValidSample) # 2) Definition of exponential model # The parameters have been calibrated using TNC optimization # and AbsoluteExponential models covarianceModel = SquaredExponential([1.98824, 0.924731], [3.15352]) # 3) Basis definition basisCollection = BasisCollection( 1, ConstantBasisFactory(spatialDimension).build()) # Kriring algorithm algo = KrigingAlgorithm(inputSample, outputSample, covarianceModel, basisCollection) algo.run() result = algo.getResult() # Get meta model metaModel = result.getMetaModel() outData = metaModel(inputValidSample) # 4) Errors # Interpolation assert_almost_equal(outputSample, metaModel(inputSample), 3.0e-5, 3.0e-5) # 5) Kriging variance is 0 on learning points var = result.getConditionalCovariance(inputSample) # assert_almost_equal could not be applied to matrices # application to Point covariancePoint = Point(var.getImplementation()) theoricalVariance = Point(covariancePoint.getSize(), 0.0) assert_almost_equal(covariancePoint, theoricalVariance, 7e-7, 7e-7) # Estimation assert_almost_equal(outputValidSample, metaModel( inputValidSample), 1.e-1, 1e-1) openturns-1.9/python/test/t_KrigingAlgorithm_std_hmat.expout000066400000000000000000000003031307543307100246340ustar00rootroot00000000000000X= 0 : [ 1 ] 1 : [ 3 ] 2 : [ 5 ] 3 : [ 6 ] 4 : [ 7 ] 5 : [ 8 ] f(X)= [ y ] 0 : [ 0.841471 ] 1 : [ 0.42336 ] 2 : [ -4.79462 ] 3 : [ -1.67649 ] 4 : [ 4.59891 ] 5 : [ 7.91487 ] openturns-1.9/python/test/t_KrigingAlgorithm_std_hmat.py000077500000000000000000000055501307543307100237540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from openturns.testing import * from math import sqrt TESTPREAMBLE() # Set hmat ResourceMap.Set("KrigingAlgorithm-LinearAlgebra", "HMAT") # Test 1 sampleSize = 6 dimension = 1 f = Function(['x0'], ['y'], ['x0 * sin(x0)']) X = Sample(sampleSize, dimension) X2 = Sample(sampleSize, dimension) for i in range(sampleSize): X[i, 0] = 3.0 + i X2[i, 0] = 2.5 + i X[0, 0] = 1.0 X[1, 0] = 3.0 X2[0, 0] = 2.0 X2[1, 0] = 4.0 Y = f(X) Y2 = f(X2) # create algorithm basis = ConstantBasisFactory(dimension).build() covarianceModel = SquaredExponential([1e-05], [4.11749]) algo = KrigingAlgorithm(X, Y, covarianceModel, basis) algo.run() # perform an evaluation result = algo.getResult() print("X=", X) print("f(X)=", Y) assert_almost_equal(result.getMetaModel()(X), Y) assert_almost_equal(result.getResiduals(), [1.32804e-07], 1e-3, 1e-3) assert_almost_equal(result.getRelativeErrors(), [5.20873e-21]) # Kriging variance is 0 on learning points var = result.getConditionalCovariance(X) # assert_almost_equal could not be applied to matrices # application to Point covariancePoint = Point(var.getImplementation()) theoricalVariance = Point(sampleSize * sampleSize) assert_almost_equal(covariancePoint, theoricalVariance, 8.95e-7, 8.95e-7) # Test 2 # Kriging use case spatialDimension = 2 # Learning data levels = [8., 5.] box = Box(levels) inputSample = box.generate() # Scale each direction inputSample *= 10 model = Function(['x', 'y'], ['z'], ['cos(0.5*x) + sin(y)']) outputSample = model(inputSample) # Validation sampleSize = 10 inputValidSample = ComposedDistribution( 2 * [Uniform(0, 10.0)]).getSample(sampleSize) outputValidSample = model(inputValidSample) # 2) Definition of exponential model # The parameters have been calibrated using TNC optimization # and AbsoluteExponential models covarianceModel = SquaredExponential([1.98824, 0.924731], [3.15352]) # 3) Basis definition basisCollection = BasisCollection( 1, ConstantBasisFactory(spatialDimension).build()) # Kriring algorithm algo = KrigingAlgorithm(inputSample, outputSample, covarianceModel, basisCollection) algo.run() result = algo.getResult() # Get meta model metaModel = result.getMetaModel() outData = metaModel(inputValidSample) # 4) Errors # Interpolation assert_almost_equal(outputSample, metaModel(inputSample), 1e-5, 1e-5) # 5) Kriging variance is 0 on learning points var = result.getConditionalCovariance(inputSample) # assert_almost_equal could not be applied to matrices # application to Point covariancePoint = Point(var.getImplementation()) theoricalVariance = Point(covariancePoint.getSize(), 0.0) assert_almost_equal(covariancePoint, theoricalVariance, 7e-7, 7e-7) # Estimation # rtol & a tol fixed to 1e-1 assert_almost_equal( outputValidSample, metaModel(inputValidSample), 1.e-1, 1e-1) openturns-1.9/python/test/t_KrigingRandomVector_std.expout000066400000000000000000000003511307543307100243030ustar00rootroot00000000000000Realization of the KRV= [-0.249] Sample of realizations of the KRV= [ X0 ] 0 : [ -0.244 ] 1 : [ -0.26 ] 2 : [ -0.254 ] 3 : [ -0.254 ] 4 : [ -0.246 ] 5 : [ -0.239 ] 6 : [ -0.246 ] 7 : [ -0.249 ] 8 : [ -0.243 ] 9 : [ -0.243 ] openturns-1.9/python/test/t_KrigingRandomVector_std.py000077500000000000000000000036431307543307100234210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from openturns.testing import * TESTPREAMBLE() PlatformInfo.SetNumericalPrecision(3) # Kriging use case spatialDimension = 2 # Learning data levels = [8., 5.] box = Box(levels) inputSample = box.generate() # Scale each direction inputSample *= 10 model = SymbolicFunction(['x', 'y'], ['cos(0.5*x) + sin(y)']) outputSample = model(inputSample) # Validation data sampleSize = 10 inputValidSample = ComposedDistribution( 2 * [Uniform(0, 10.0)]).getSample(sampleSize) outputValidSample = model(inputValidSample) # 2) Definition of exponential model # The parameters have been calibrated using TNC optimization # and AbsoluteExponential models covarianceModel = SquaredExponential([1.988, 0.924], [3.153]) # 3) Basis definition basisCollection = BasisCollection( 1, ConstantBasisFactory(spatialDimension).build()) # Kriring algorithm algo = KrigingAlgorithm(inputSample, outputSample, covarianceModel, basisCollection) algo.run() result = algo.getResult() # Get meta model metaModel = result.getMetaModel() outData = metaModel(inputValidSample) # 4) Errors # Interpolation assert_almost_equal(outputSample, metaModel(inputSample), 3.0e-5, 3.0e-5) # 5) Kriging variance is 0 on learning points var = result.getConditionalCovariance(inputSample) # assert_almost_equal could not be applied to matrices # application to Point covariancePoint = Point(var.getImplementation()) theoricalVariance = Point(covariancePoint.getSize(), 0.0) assert_almost_equal(covariancePoint, theoricalVariance, 1e-6, 1e-6) # Random vector evaluation rvector = KrigingRandomVector(result, inputValidSample[0]) # Realization of the random vector realization = rvector.getRealization() print("Realization of the KRV=", realization) # Get a sample of size 10 realizations = rvector.getSample(10) print("Sample of realizations of the KRV=", realizations) openturns-1.9/python/test/t_LARS_std.expout000066400000000000000000000001621307543307100211260ustar00rootroot00000000000000factory = class=LARS first 20 indices = [0,30,115,10,1,77,187,15,162,40,89,7,51,55,156,278,179,232,35,157]#20 openturns-1.9/python/test/t_LARS_std.py000077500000000000000000000054421307543307100202430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Log.Show( Log.Flags() | Log.INFO ) # Problem parameters dimension = 3 a = 7.0 b = 0.1 # Reference analytical values meanTh = a / 2 covTh = (b ** 2 * pi ** 8) / 18.0 + \ (b * pi ** 4) / 5.0 + (a ** 2) / 8.0 + 1.0 / 2.0 sob_1 = [(b * pi ** 4 / 5.0 + b ** 2 * pi ** 8 / 50.0 + 1.0 / 2.0) / covTh, (a ** 2 / 8.0) / covTh, 0.0] sob_2 = [ 0.0, (b ** 2 * pi ** 8 / 18.0 - b ** 2 * pi ** 8 / 50.0) / covTh, 0.0] sob_3 = [0.0] sob_T1 = [sob_1[0] + sob_2[0] + sob_2[1] + sob_3[0], sob_1[1] + sob_2[0] + sob_2[2] + sob_3[0], sob_1[2] + sob_2[1] + sob_2[2] + sob_3[0]] sob_T2 = [sob_2[0] + sob_2[1] + sob_3[0], sob_2[0] + sob_2[2] + sob_3[0], sob_2[1] + sob_2[2] + sob_3[0]] sob_T3 = [sob_3[0]] # Create the Ishigami function model = Function(['xi1', 'xi2', 'xi3'], ['y'], [ "sin(xi1) + (" + str(a) + ") * (sin(xi2)) ^ 2 + (" + str(b) + ") * xi3^4 * sin(xi1)"]) # Create the input distribution marginalX = DistributionCollection(dimension) for i in range(dimension): marginalX[i] = Uniform(-pi, pi) distribution = Distribution(ComposedDistribution(marginalX)) # Create the orthogonal basis polynomialCollection = PolynomialFamilyCollection(dimension) for i in range(dimension): polynomialCollection[ i] = OrthogonalUniVariatePolynomialFamily(LegendreFactory()) enumerateFunction = LinearEnumerateFunction(dimension) productBasis = OrthogonalBasis( OrthogonalProductPolynomialFactory(polynomialCollection, enumerateFunction)) # design experiment samplingSize = 75 experiment = Experiment(LowDiscrepancyExperiment( SobolSequence(dimension), distribution, samplingSize)) # iso transfo algo = FunctionalChaosAlgorithm(model, distribution, AdaptiveStrategy( FixedStrategy(productBasis, enumerateFunction.getStrataCumulatedCardinal(1)))) algo.run() result = algo.getResult() xToU = result.getTransformation() # generate samples x = experiment.generate() u = xToU(x) y = model(x) # build basis degree = 10 basisSize = enumerateFunction.getStrataCumulatedCardinal(degree) basis = Basis() for i in range(basisSize): basis.add(productBasis.build(i)) # run algorithm factory = BasisSequenceFactory(LAR()) factory.setVerbose(True) print("factory = ", factory) seq = factory.build(u, y, basis, list(range(basisSize))) first = 20 if (seq.getSize() >= first): print("first ", first, " indices = ", seq.getIndices(first - 1)) except: import sys print("t_LAR.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LHSExperiment_std.expout000066400000000000000000000124031307543307100230550ustar00rootroot00000000000000myPlane = LHSExperiment(distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1], size10, always shuffle=false, random shift=true sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[-0.128245,0.376836,-1.22066,-1.10522],[1.10582,-0.338459,0.24791,-0.346101],[0.54296,-1.42346,0.839551,0.0208249],[-1.16265,0.0759283,-2.01943,1.09374],[0.145939,-1.05065,1.1245,0.752451],[-0.54266,0.796553,-0.152699,-0.0930679],[2.38039,1.23369,-0.479086,1.68956],[-0.466678,-0.566345,1.58492,0.34823],[-3.52623,-0.191816,-0.753697,-0.645958],[0.297406,2.83847,0.380733,-1.46889]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] sample2 = [ X0 X1 X2 X3 ] 0 : [ -0.010542 0.440747 -0.907702 -1.04424 ] 1 : [ 0.917871 -0.318324 0.234117 -0.348873 ] 2 : [ 0.706998 -1.47467 0.547381 0.0632927 ] 3 : [ -0.963304 0.089972 -1.72779 0.962638 ] 4 : [ 0.201535 -1.00455 0.965576 0.831549 ] 5 : [ -0.668953 0.555671 -0.023116 -0.0627709 ] 6 : [ 1.64612 1.04263 -0.276266 1.91121 ] 7 : [ -0.361935 -0.575544 1.89896 0.292035 ] 8 : [ -1.38907 -0.110551 -0.626966 -0.834518 ] 9 : [ 0.44615 1.95064 0.328131 -1.36724 ] sample = [ X0 X1 X2 X3 ] 0 : [ -1.0393 0.335691 -1.45686 -0.25094 ] 1 : [ 1.06144 2.41939 0.626709 -0.314665 ] 2 : [ 0.416873 -0.779287 1.53713 -0.813699 ] 3 : [ 0.142019 0.929935 0.431971 -1.50779 ] 4 : [ -1.70296 -1.44323 -0.0367999 0.0604975 ] 5 : [ 0.534882 -1.05605 0.205732 2.50647 ] 6 : [ -0.56838 0.111106 -0.731972 0.598258 ] 7 : [ -0.373196 0.526136 1.2056 0.974748 ] 8 : [ -0.0568821 -0.356297 -1.04449 0.468425 ] 9 : [ 1.78081 -0.0663524 -0.357779 -1.04292 ] sample2 = [ X0 X1 X2 X3 ] 0 : [ 0.765581 -0.641697 -0.15499 1.02033 ] 1 : [ 0.0316325 -0.216958 -0.928132 -1.17524 ] 2 : [ -1.09931 -1.46787 -1.28836 0.208209 ] 3 : [ -0.446501 1.98151 0.97195 1.93178 ] 4 : [ 1.10742 1.13989 0.178853 -0.225676 ] 5 : [ 1.2938 0.540534 -0.403253 -1.31606 ] 6 : [ -0.63869 -0.441023 0.797084 0.579203 ] 7 : [ 0.494526 0.171276 0.50552 -0.423837 ] 8 : [ -2.05943 -0.845955 1.89207 -0.661324 ] 9 : [ -0.160979 0.496285 -0.561349 0.337265 ] sample = [ X0 X1 X2 X3 ] 0 : [ -0.38532 -1.64485 0.67449 0.38532 ] 1 : [ 0.67449 -1.03643 0.125661 1.64485 ] 2 : [ 1.64485 -0.67449 1.64485 -0.67449 ] 3 : [ 0.38532 1.64485 -0.125661 -1.64485 ] 4 : [ -1.03643 1.03643 -1.64485 -1.03643 ] 5 : [ 1.03643 0.67449 0.38532 1.03643 ] 6 : [ -0.125661 -0.38532 -1.03643 -0.38532 ] 7 : [ -0.67449 0.125661 1.03643 0.125661 ] 8 : [ 0.125661 -0.125661 -0.38532 0.67449 ] 9 : [ -1.64485 0.38532 -0.67449 -0.125661 ] sample2 = [ X0 X1 X2 X3 ] 0 : [ -0.38532 -1.64485 0.67449 0.38532 ] 1 : [ 0.67449 -1.03643 0.125661 1.64485 ] 2 : [ 1.64485 -0.67449 1.64485 -0.67449 ] 3 : [ 0.38532 1.64485 -0.125661 -1.64485 ] 4 : [ -1.03643 1.03643 -1.64485 -1.03643 ] 5 : [ 1.03643 0.67449 0.38532 1.03643 ] 6 : [ -0.125661 -0.38532 -1.03643 -0.38532 ] 7 : [ -0.67449 0.125661 1.03643 0.125661 ] 8 : [ 0.125661 -0.125661 -0.38532 0.67449 ] 9 : [ -1.64485 0.38532 -0.67449 -0.125661 ] sample = [ X0 X1 X2 X3 ] 0 : [ -1.03643 -1.03643 1.03643 0.67449 ] 1 : [ -1.64485 -0.38532 0.125661 1.03643 ] 2 : [ -0.38532 -0.67449 -1.03643 0.38532 ] 3 : [ -0.125661 0.67449 0.67449 0.125661 ] 4 : [ 0.67449 -1.64485 -0.125661 -1.64485 ] 5 : [ 0.125661 1.03643 1.64485 -1.03643 ] 6 : [ -0.67449 0.38532 0.38532 -0.38532 ] 7 : [ 1.64485 -0.125661 -0.38532 -0.125661 ] 8 : [ 0.38532 1.64485 -1.64485 -0.67449 ] 9 : [ 1.03643 0.125661 -0.67449 1.64485 ] sample2 = [ X0 X1 X2 X3 ] 0 : [ 0.38532 0.38532 -1.03643 -0.38532 ] 1 : [ -0.125661 0.67449 0.125661 -1.64485 ] 2 : [ 0.67449 -0.125661 1.64485 1.03643 ] 3 : [ -1.64485 1.64485 1.03643 1.64485 ] 4 : [ -0.38532 -0.67449 -0.125661 -1.03643 ] 5 : [ 1.03643 -1.03643 -1.64485 0.67449 ] 6 : [ 0.125661 -0.38532 0.38532 -0.67449 ] 7 : [ 1.64485 0.125661 0.67449 -0.125661 ] 8 : [ -1.03643 1.03643 -0.67449 0.38532 ] 9 : [ -0.67449 -1.64485 -0.38532 0.125661 ] sample = [ X0 ] 0 : [ 0.037815 ] 1 : [ -0.0665638 ] 2 : [ 0.736248 ] 3 : [ -0.398497 ] 4 : [ 0.839959 ] 5 : [ 0.371165 ] 6 : [ -0.70109 ] 7 : [ 0.430737 ] 8 : [ -0.544098 ] 9 : [ -0.999779 ] sample2 = [ X0 ] 0 : [ 0.0590926 ] 1 : [ -0.110185 ] 2 : [ 0.784497 ] 3 : [ -0.279307 ] 4 : [ 0.99518 ] 5 : [ 0.201021 ] 6 : [ -0.776429 ] 7 : [ 0.529796 ] 8 : [ -0.553419 ] 9 : [ -0.95486 ] openturns-1.9/python/test/t_LHSExperiment_std.py000077500000000000000000000021111307543307100221570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Normal(4) size = 10 myPlane = LHSExperiment(distribution, size) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) print("sample2 = ", myPlane.generate()) myPlane = LHSExperiment(distribution, size, True, True) print("sample = ", myPlane.generate()) print("sample2 = ", myPlane.generate()) myPlane = LHSExperiment(distribution, size, False, False) print("sample = ", myPlane.generate()) print("sample2 = ", myPlane.generate()) myPlane = LHSExperiment(distribution, size, True, False) print("sample = ", myPlane.generate()) print("sample2 = ", myPlane.generate()) myPlane = LHSExperiment(size) print("sample = ", myPlane.generate()) print("sample2 = ", myPlane.generate()) except: import sys print("t_LHSExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LHS_std.expout000066400000000000000000000027441307543307100210230ustar00rootroot00000000000000LHS= class=LHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 LHS result= probabilityEstimate=1.355721e-01 varianceEstimate=1.825027e-04 standard deviation=1.35e-02 coefficient of variation=9.96e-02 confidenceLength(0.95)=5.30e-02 outerSampling=201 blockSize=4 openturns-1.9/python/test/t_LHS_std.py000077500000000000000000000024161307543307100201260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3) # We create a Monte Carlo algorithm myAlgo = LHS(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.1) print("LHS=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("LHS result=", myAlgo.getResult()) except: import sys print("t_LHS_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LaguerreFactory_std.expout000066400000000000000000000032041307543307100234630ustar00rootroot00000000000000laguerre= class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=2.5 lambda=1 gamma=0 laguerre= class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 laguerre= class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 laguerre( 0 )= 1 laguerre( 1 )= -1.87083 + 0.534522 * X laguerre( 2 )= 2.80624 - 1.60357 * X + 0.178174 * X^2 laguerre( 3 )= -3.79967 + 3.25686 * X - 0.723747 * X^2 + 0.0438634 * X^3 laguerre( 4 )= 4.84365 - 5.5356 * X + 1.8452 * X^2 - 0.223661 * X^3 + 0.00860233 * X^4 laguerre( 5 )= -5.93223 + 8.47462 * X - 3.7665 * X^2 + 0.684818 * X^3 - 0.0526783 * X^4 + 0.00140475 * X^5 laguerre( 6 )= 7.06077 - 12.1042 * X + 6.72454 * X^2 - 1.63019 * X^3 + 0.188099 * X^4 - 0.010032 * X^5 + 0.000196705 * X^6 laguerre( 7 )= -8.22555 + 16.4511 * X - 10.9674 * X^2 + 3.32345 * X^3 - 0.511301 * X^4 + 0.0409041 * X^5 - 0.00160408 * X^6 + 2.41215e-05 * X^7 laguerre( 8 )= 9.42355 - 21.5395 * X + 16.753 * X^2 - 6.09199 * X^3 + 1.17154 * X^4 - 0.124964 * X^5 + 0.00735082 * X^6 - 0.000221077 * X^7 + 2.63187e-06 * X^8 laguerre( 9 )= -10.6523 + 27.3916 * X - 24.3481 * X^2 + 10.3295 * X^3 - 2.38373 * X^4 + 0.31783 * X^5 - 0.0249278 * X^6 + 0.00112456 * X^7 - 2.67753e-05 * X^8 + 2.58699e-07 * X^9 laguerre(10) roots= class=Point name=Unnamed dimension=10 values=[0.711476,1.78548,3.31448,5.33305,7.89076,11.0617,14.961,19.7822,25.8977,34.2622] laguerre(10) nodes= [0.711476,1.78548,3.31448,5.33305,7.89076,11.0617,14.961,19.7822,25.8977,34.2622]#10 and weights= [0.0540126,0.27873,0.386588,0.217442,0.0561105,0.00675159,0.000357814,7.2229e-06,4.05914e-08,2.8002e-11]#10 openturns-1.9/python/test/t_LaguerreFactory_std.py000077500000000000000000000013521307543307100225740ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: laguerre = LaguerreFactory(2.5, LaguerreFactory.PROBABILITY) print("laguerre=", laguerre) laguerre = LaguerreFactory(2.5, LaguerreFactory.ANALYSIS) print("laguerre=", laguerre) laguerre = LaguerreFactory(2.5) print("laguerre=", laguerre) for i in range(10): print("laguerre(", i, ")=", laguerre.build(i)) roots = laguerre.getRoots(10) print("laguerre(10) roots=", repr(roots)) nodes, weights = laguerre.getNodesAndWeights(10) print("laguerre(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_LaguerreFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LaplaceFactory_std.expout000066400000000000000000000007521307543307100232630ustar00rootroot00000000000000distribution= class=Laplace name=Laplace dimension=1 lambda=2.5 mu=-1.3 Estimated distribution= class=Laplace name=Laplace dimension=1 lambda=2.46764 mu=-1.29551 Default distribution= Laplace(lambda = 1, mu = 0) Distribution from parameters= Laplace(lambda = 2.5, mu = -1.3) Laplace = Laplace(lambda = 2.5, mu = -1.3) Estimated laplace= Laplace(lambda = 2.46764, mu = -1.29551) Default laplace= Laplace(lambda = 1, mu = 0) Laplace from parameters= Laplace(lambda = 2.5, mu = -1.3) openturns-1.9/python/test/t_LaplaceFactory_std.py000077500000000000000000000022071307543307100223670ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Laplace(2.5, -1.3) size = 10000 sample = distribution.getSample(size) factory = LaplaceFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedLaplace = factory.buildAsLaplace(sample) print("Laplace =", distribution) print("Estimated laplace=", estimatedLaplace) estimatedLaplace = factory.buildAsLaplace() print("Default laplace=", estimatedLaplace) estimatedLaplace = factory.buildAsLaplace( distribution.getParameter()) print("Laplace from parameters=", estimatedLaplace) except: import sys print("t_LaplaceFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Laplace_std.expout000066400000000000000000000052201307543307100217260ustar00rootroot00000000000000Distribution class=Laplace name=Laplace dimension=1 lambda=1.5 mu=0.5 Distribution Laplace(lambda = 1.5, mu = 0.5) Elliptical = True Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.700514] oneSample first= class=Point name=Unnamed dimension=1 values=[1.46718] last= class=Point name=Unnamed dimension=1 values=[0.391218] mean= class=Point name=Unnamed dimension=1 values=[0.509035] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.897085] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.531412] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.531412] pdf = 0.3542749146 pdf (FD)= 0.3542749146 cdf= 0.763816723629 characteristic function= (0.607557158232+0.331909988264j) pdf gradient = class=Point name=Unnamed dimension=2 values=[0.0590458,0.531412] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0590458,0.531412] cdf gradient = class=Point name=Unnamed dimension=2 values=[0.118092,-0.354275] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.118092,-0.354275] quantile= class=Point name=Unnamed dimension=1 values=[2.03506] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-1.03506] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-1.49715, 2.49715] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.28341} with f= MinimumVolumeLevelSetEvaluation(Laplace(lambda = 1.5, mu = 0.5)) beta= [0.0375] Bilateral confidence interval= [-1.49715, 2.49715] beta= [0.95] Unilateral confidence interval (lower tail)= [-20.5292, 2.03506] beta= [0.95] Unilateral confidence interval (upper tail)= [-1.03506, 21.5292] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.5] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.888889] parameters= [class=PointWithDescription name=X0 dimension=2 description=[lambda,mu] values=[1.5,0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [2] standard moment n= 3 value= [0] standard moment n= 4 value= [24] standard moment n= 5 value= [0] Standard representative= Laplace(lambda = 1, mu = 0) lambda= 1.5 mu= 0.5 standard deviation= class=Point name=Unnamed dimension=1 values=[0.942809] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[6] openturns-1.9/python/test/t_Laplace_std.py000077500000000000000000000131571307543307100210450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Laplace(1.5, 0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.10f" % PDF) print("pdf (FD)= %.10f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(2) PDFgrFD[0] = (Laplace(distribution.getLambda() + eps, distribution.getMu()).computePDF(point) - Laplace(distribution.getLambda() - eps, distribution.getMu()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Laplace(distribution.getLambda(), distribution.getMu() + eps).computePDF(point) - Laplace(distribution.getLambda(), distribution.getMu() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Laplace(distribution.getLambda() + eps, distribution.getMu()).computeCDF(point) - Laplace(distribution.getLambda() - eps, distribution.getMu()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Laplace(distribution.getLambda(), distribution.getMu() + eps).computeCDF(point) - Laplace(distribution.getLambda(), distribution.getMu() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution print("lambda=", distribution.getLambda()) mu = distribution.getMu() print("mu=", mu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) except: import sys print("t_Laplace_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LeastSquaresMetaModelSelectionFactory_std.expout000066400000000000000000000000661307543307100277720ustar00rootroot00000000000000factory = class=LeastSquaresMetaModelSelectionFactory openturns-1.9/python/test/t_LeastSquaresMetaModelSelectionFactory_std.py000077500000000000000000000005531307543307100271020ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: f = LeastSquaresMetaModelSelectionFactory(LARS(), CorrectedLeaveOneOut()) print("factory =", f) except: import sys print("t_LeastSquaresMetaModelSelectionFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LeastSquaresMethod_std.expout000066400000000000000000000034261307543307100241500ustar00rootroot00000000000000 [ y0 ] 0 : [ 1 ] 1 : [ 2 ] 2 : [ 3 ] 3 : [ 4 ] 4 : [ 5 ] [ y0 ] 0 : [ 1 ] 1 : [ 4 ] 2 : [ 9 ] 3 : [ 16 ] 4 : [ 25 ] [ y0 ] 0 : [ 1 ] 1 : [ 8 ] 2 : [ 27 ] 3 : [ 64 ] 4 : [ 125 ] design= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] -- method: SVDMethod solve: [1.1215,-0.355781,0.0331317] residual: 0.0828272 solveNormal: [1.1215,-0.355781,0.0331317] getHDiag: [0.562574,0.447462,0.459268,0.571429,0.959268] getGramInverse: [[ 2.06431 -1.16342 0.152433 ] [ -1.16342 0.696429 -0.094697 ] [ 0.152433 -0.094697 0.0132002 ]] getGramInverseDiag: [2.06431,0.696429,0.0132002] getGramInverseTrace: 2.7739 -- method: CholeskyMethod solve: [1.1215,-0.355781,0.0331317] residual: 0.0828272 solveNormal: [1.1215,-0.355781,0.0331317] getHDiag: [0.562574,0.447462,0.459268,0.571429,0.959268] getGramInverse: [[ 2.06431 -1.16342 0.152433 ] [ -1.16342 0.696429 -0.094697 ] [ 0.152433 -0.094697 0.0132002 ]] getGramInverseDiag: [2.06431,0.696429,0.0132002] getGramInverseTrace: 2.7739 -- method: QRMethod solve: [1.1215,-0.355781,0.0331317] residual: 0.0828272 solveNormal: [1.1215,-0.355781,0.0331317] getHDiag: [0.562574,0.447462,0.459268,0.571429,0.959268] getGramInverse: [[ 2.06431 -1.16342 0.152433 ] [ -1.16342 0.696429 -0.094697 ] [ 0.152433 -0.094697 0.0132002 ]] getGramInverseDiag: [2.06431,0.696429,0.0132002] getGramInverseTrace: 2.7739 -- method: SparseMethod solve: [0,0.276282,-0.0496824] residual: 0.176725 -no solveNormal- getHDiag: [0.562574,0.447462,0.459268,0.571429,0.959268] getGramInverse: [[ 2.06431 -1.16342 0.152433 ] [ -1.16342 0.696429 -0.094697 ] [ 0.152433 -0.094697 0.0132002 ]] getGramInverseDiag: [2.06431,0.696429,0.0132002] getGramInverseTrace: 2.7739 openturns-1.9/python/test/t_LeastSquaresMethod_std.py000077500000000000000000000030111307543307100232450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m # ot.Log.Show(ot.Log.ALL) basisSize = 3 sampleSize = 5 X = ot.Sample(sampleSize, 1) for i in range(sampleSize): X[i, 0] = i + 1.0 phis = [] for j in range(basisSize): phis.append(ot.SymbolicFunction(['x'], ['x^' + str(j + 1)])) basis = ot.Basis(phis) for i in range(basisSize): print(ot.FunctionCollection(basis)[i](X)) proxy = ot.DesignProxy(X, basis) full = range(basisSize) design = ot.Matrix(proxy.computeDesign(full)) print('design=', design) methods = [ot.SVDMethod(proxy, full), ot.CholeskyMethod(proxy, full), ot.QRMethod(proxy, full), ot.SparseMethod(ot.QRMethod(proxy, full))] y = ot.Normal([1.0] * sampleSize, [0.1] * sampleSize, ot.CorrelationMatrix(sampleSize)).getRealization() yAt = design.transpose() * y for method in methods: name = method.__class__.__name__ print('-- method:', name) x = method.solve(y) print('solve:', x) residual = m.sqrt((design * x - y).normSquare()) / sampleSize print('residual: %.6g' % residual) try: x = method.solveNormal(yAt) print('solveNormal:', x) except RuntimeError: print('-no solveNormal-') d = method.getHDiag() print('getHDiag:', d) d = method.getGramInverse() print('getGramInverse:', d) d = method.getGramInverseDiag() print('getGramInverseDiag:', d) d = method.getGramInverseTrace() print('getGramInverseTrace: %.5g' % d) openturns-1.9/python/test/t_LegendreFactory_std.expout000066400000000000000000000020171307543307100234430ustar00rootroot00000000000000legendre= class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 legendre( 0 )= 1 legendre( 1 )= 1.73205 * X legendre( 2 )= -1.11803 + 3.3541 * X^2 legendre( 3 )= -3.96863 * X + 6.61438 * X^3 legendre( 4 )= 1.125 - 11.25 * X^2 + 13.125 * X^4 legendre( 5 )= 6.21867 * X - 29.0205 * X^3 + 26.1184 * X^5 legendre( 6 )= -1.12673 + 23.6614 * X^2 - 70.9843 * X^4 + 52.0551 * X^6 legendre( 7 )= -8.47215 * X + 76.2494 * X^3 - 167.749 * X^5 + 103.844 * X^7 legendre( 8 )= 1.12741 - 40.5868 * X^2 + 223.228 * X^4 - 386.928 * X^6 + 207.283 * X^8 legendre( 9 )= 10.727 * X - 157.329 * X^3 + 613.583 * X^5 - 876.547 * X^7 + 413.925 * X^9 legendre(10) roots= class=Point name=Unnamed dimension=10 values=[-0.973907,-0.865063,-0.67941,-0.433395,-0.148874,0.148874,0.433395,0.67941,0.865063,0.973907] legendre(10) nodes= [-0.973907,-0.865063,-0.67941,-0.433395,-0.148874,0.148874,0.433395,0.67941,0.865063,0.973907]#10 and weights= [0.0333357,0.0747257,0.109543,0.134633,0.147762,0.147762,0.134633,0.109543,0.0747257,0.0333357]#10 openturns-1.9/python/test/t_LegendreFactory_std.py000077500000000000000000000010741307543307100225540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: legendre = LegendreFactory() print("legendre=", legendre) for i in range(10): print("legendre(", i, ")=", legendre.build(i)) roots = legendre.getRoots(10) print("legendre(10) roots=", repr(roots)) weights = Point() nodes, weights = legendre.getNodesAndWeights(10) print("legendre(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_LegendreFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LevelSetMesher_std.expout000066400000000000000000000227251307543307100232650ustar00rootroot00000000000000mesher1D= class=LevelSetMesher discretization=[7] mesh1D= class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[0.99],[0.99],[0.99],[0.99],[0.99]] simplices=[[0,1],[1,2],[2,3],[3,4]] mesh1D= class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=1 data=[[-10],[-7.14],[-4.29],[-1.43],[1.43],[4.29],[7.14],[10]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] mesher2D= class=LevelSetMesher discretization=[5,5] mesh2D= class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-3.16,-3.16],[-1.9,-3.16],[-0.632,-3.16],[0.632,-3.16],[1.9,-3.16],[3.16,-3.16],[-3.16,-1.9],[-1.9,-1.9],[-0.632,-1.9],[0.632,-1.9],[1.9,-1.9],[3.16,-1.9],[-3.16,-0.632],[-1.9,-0.632],[-0.967,-0.967],[0.967,-0.967],[1.9,-0.632],[3.16,-0.632],[-3.16,0.632],[-1.9,0.632],[-0.967,0.967],[1.37,-0.661],[1.9,0.632],[3.16,0.632],[-3.16,1.9],[-1.9,1.9],[-0.632,1.9],[0.632,1.9],[1.9,1.9],[3.16,1.9],[-3.16,3.16],[-1.9,3.16],[-0.632,3.16],[0.632,3.16],[1.9,3.16],[3.16,3.16]] simplices=[[0,1,6],[1,7,6],[1,2,7],[2,8,7],[2,3,8],[3,9,8],[3,4,9],[4,10,9],[4,5,10],[5,11,10],[6,7,12],[7,13,12],[7,8,13],[8,14,13],[8,9,14],[9,15,14],[9,10,15],[10,16,15],[10,11,16],[11,17,16],[12,13,18],[13,19,18],[13,14,19],[14,20,19],[15,16,21],[16,22,21],[16,17,22],[17,23,22],[18,19,24],[19,25,24],[19,20,25],[20,26,25],[20,21,26],[21,27,26],[21,22,27],[22,28,27],[22,23,28],[23,29,28],[24,25,30],[25,31,30],[25,26,31],[26,32,31],[26,27,32],[27,33,32],[27,28,33],[28,34,33],[28,29,34],[29,35,34]] mesh2D= class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=36 dimension=2 data=[[-10,-10],[-6,-10],[-2,-10],[2,-10],[6,-10],[10,-10],[-10,-6],[-6,-6],[-2,-6],[2,-6],[6,-6],[10,-6],[-10,-2],[-6,-2],[-2,-2],[2,-2],[6,-2],[10,-2],[-10,2],[-6,2],[-2,2],[2,2],[6,2],[10,2],[-10,6],[-6,6],[-2,6],[2,6],[6,6],[10,6],[-10,10],[-6,10],[-2,10],[2,10],[6,10],[10,10]] simplices=[[0,1,6],[1,7,6],[1,2,7],[2,8,7],[2,3,8],[3,9,8],[3,4,9],[4,10,9],[4,5,10],[5,11,10],[6,7,12],[7,13,12],[7,8,13],[8,14,13],[8,9,14],[9,15,14],[9,10,15],[10,16,15],[10,11,16],[11,17,16],[12,13,18],[13,19,18],[13,14,19],[14,20,19],[14,15,20],[15,21,20],[15,16,21],[16,22,21],[16,17,22],[17,23,22],[18,19,24],[19,25,24],[19,20,25],[20,26,25],[20,21,26],[21,27,26],[21,22,27],[22,28,27],[22,23,28],[23,29,28],[24,25,30],[25,31,30],[25,26,31],[26,32,31],[26,27,32],[27,33,32],[27,28,33],[28,34,33],[28,29,34],[29,35,34]] mesher3D= class=LevelSetMesher discretization=[3,3,3] mesh3D= class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=3 data=[[-3.16,-3.16,-2.33],[-1.05,-3.16,-2.33],[1.05,-3.16,-2.33],[3.16,-3.16,-2.33],[-3.16,-1.05,-2.33],[-1.05,-1.05,-2.33],[1.05,-1.05,-2.33],[3.16,-1.05,-2.33],[-3.16,1.05,-2.33],[-1.05,1.05,-2.33],[1.05,1.05,-2.33],[3.16,1.05,-2.33],[-3.16,3.16,-2.33],[-1.05,3.16,-2.33],[1.05,3.16,-2.33],[3.16,3.16,-2.33],[-3.16,-3.16,-0.777],[-1.05,-3.16,-0.777],[1.05,-3.16,-0.777],[3.16,-3.16,-0.777],[-3.16,-1.05,-0.777],[-1.22,-1.22,-0.666],[1.05,-1.05,-0.777],[3.16,-1.05,-0.777],[-3.16,1.05,-0.777],[-1.05,1.05,-0.777],[1.22,1.22,-0.666],[3.16,1.05,-0.777],[-3.16,3.16,-0.777],[-1.05,3.16,-0.777],[1.05,3.16,-0.777],[3.16,3.16,-0.777],[-3.16,-3.16,0.777],[-1.05,-3.16,0.777],[1.05,-3.16,0.777],[3.16,-3.16,0.777],[-3.16,-1.05,0.777],[-1.05,-1.05,0.777],[0.726,-0.727,1.39],[3.16,-1.05,0.777],[-3.16,1.05,0.777],[-0.727,0.726,1.39],[1.05,1.05,0.777],[3.16,1.05,0.777],[-3.16,3.16,0.777],[-1.05,3.16,0.777],[1.05,3.16,0.777],[3.16,3.16,0.777],[-3.16,-3.16,2.33],[-1.05,-3.16,2.33],[1.05,-3.16,2.33],[3.16,-3.16,2.33],[-3.16,-1.05,2.33],[-1.05,-1.05,2.33],[1.05,-1.05,2.33],[3.16,-1.05,2.33],[-3.16,1.05,2.33],[-1.05,1.05,2.33],[1.05,1.05,2.33],[3.16,1.05,2.33],[-3.16,3.16,2.33],[-1.05,3.16,2.33],[1.05,3.16,2.33],[3.16,3.16,2.33]] simplices=[[0,1,17,21],[0,5,1,21],[0,17,16,21],[0,16,20,21],[0,20,4,21],[0,4,5,21],[1,2,18,22],[1,6,2,22],[1,18,17,22],[1,17,21,22],[1,21,5,22],[1,5,6,22],[2,3,19,23],[2,7,3,23],[2,19,18,23],[2,18,22,23],[2,22,6,23],[2,6,7,23],[4,5,21,25],[4,9,5,25],[4,21,20,25],[4,20,24,25],[4,24,8,25],[4,8,9,25],[5,6,22,26],[5,10,6,26],[5,22,21,26],[5,21,25,26],[5,25,9,26],[5,9,10,26],[6,7,23,27],[6,11,7,27],[6,23,22,27],[6,22,26,27],[6,26,10,27],[6,10,11,27],[8,9,25,29],[8,13,9,29],[8,25,24,29],[8,24,28,29],[8,28,12,29],[8,12,13,29],[9,10,26,30],[9,14,10,30],[9,26,25,30],[9,25,29,30],[9,29,13,30],[9,13,14,30],[10,11,27,31],[10,15,11,31],[10,27,26,31],[10,26,30,31],[10,30,14,31],[10,14,15,31],[16,17,33,37],[16,21,17,37],[16,33,32,37],[16,32,36,37],[16,36,20,37],[16,20,21,37],[17,18,34,38],[17,22,18,38],[17,34,33,38],[17,33,37,38],[17,37,21,38],[17,21,22,38],[18,19,35,39],[18,23,19,39],[18,35,34,39],[18,34,38,39],[18,38,22,39],[18,22,23,39],[20,21,37,41],[20,25,21,41],[20,37,36,41],[20,36,40,41],[20,40,24,41],[20,24,25,41],[21,22,38,42],[21,26,22,42],[21,38,37,42],[21,37,41,42],[21,41,25,42],[21,25,26,42],[22,23,39,43],[22,27,23,43],[22,39,38,43],[22,38,42,43],[22,42,26,43],[22,26,27,43],[24,25,41,45],[24,29,25,45],[24,41,40,45],[24,40,44,45],[24,44,28,45],[24,28,29,45],[25,26,42,46],[25,30,26,46],[25,42,41,46],[25,41,45,46],[25,45,29,46],[25,29,30,46],[26,27,43,47],[26,31,27,47],[26,43,42,47],[26,42,46,47],[26,46,30,47],[26,30,31,47],[32,33,49,53],[32,37,33,53],[32,49,48,53],[32,48,52,53],[32,52,36,53],[32,36,37,53],[33,34,50,54],[33,38,34,54],[33,50,49,54],[33,49,53,54],[33,53,37,54],[33,37,38,54],[34,35,51,55],[34,39,35,55],[34,51,50,55],[34,50,54,55],[34,54,38,55],[34,38,39,55],[36,37,53,57],[36,41,37,57],[36,53,52,57],[36,52,56,57],[36,56,40,57],[36,40,41,57],[37,38,54,58],[37,42,38,58],[37,54,53,58],[37,53,57,58],[37,57,41,58],[37,41,42,58],[38,39,55,59],[38,43,39,59],[38,55,54,59],[38,54,58,59],[38,58,42,59],[38,42,43,59],[40,41,57,61],[40,45,41,61],[40,57,56,61],[40,56,60,61],[40,60,44,61],[40,44,45,61],[41,42,58,62],[41,46,42,62],[41,58,57,62],[41,57,61,62],[41,61,45,62],[41,45,46,62],[42,43,59,63],[42,47,43,63],[42,59,58,63],[42,58,62,63],[42,62,46,63],[42,46,47,63]] mesh3D= class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=64 dimension=3 data=[[-10,-10,-10],[-3.33,-10,-10],[3.33,-10,-10],[10,-10,-10],[-10,-3.33,-10],[-3.33,-3.33,-10],[3.33,-3.33,-10],[10,-3.33,-10],[-10,3.33,-10],[-3.33,3.33,-10],[3.33,3.33,-10],[10,3.33,-10],[-10,10,-10],[-3.33,10,-10],[3.33,10,-10],[10,10,-10],[-10,-10,-3.33],[-3.33,-10,-3.33],[3.33,-10,-3.33],[10,-10,-3.33],[-10,-3.33,-3.33],[-3.33,-3.33,-3.33],[3.33,-3.33,-3.33],[10,-3.33,-3.33],[-10,3.33,-3.33],[-3.33,3.33,-3.33],[3.33,3.33,-3.33],[10,3.33,-3.33],[-10,10,-3.33],[-3.33,10,-3.33],[3.33,10,-3.33],[10,10,-3.33],[-10,-10,3.33],[-3.33,-10,3.33],[3.33,-10,3.33],[10,-10,3.33],[-10,-3.33,3.33],[-3.33,-3.33,3.33],[3.33,-3.33,3.33],[10,-3.33,3.33],[-10,3.33,3.33],[-3.33,3.33,3.33],[3.33,3.33,3.33],[10,3.33,3.33],[-10,10,3.33],[-3.33,10,3.33],[3.33,10,3.33],[10,10,3.33],[-10,-10,10],[-3.33,-10,10],[3.33,-10,10],[10,-10,10],[-10,-3.33,10],[-3.33,-3.33,10],[3.33,-3.33,10],[10,-3.33,10],[-10,3.33,10],[-3.33,3.33,10],[3.33,3.33,10],[10,3.33,10],[-10,10,10],[-3.33,10,10],[3.33,10,10],[10,10,10]] simplices=[[0,1,17,21],[0,5,1,21],[0,17,16,21],[0,16,20,21],[0,20,4,21],[0,4,5,21],[1,2,18,22],[1,6,2,22],[1,18,17,22],[1,17,21,22],[1,21,5,22],[1,5,6,22],[2,3,19,23],[2,7,3,23],[2,19,18,23],[2,18,22,23],[2,22,6,23],[2,6,7,23],[4,5,21,25],[4,9,5,25],[4,21,20,25],[4,20,24,25],[4,24,8,25],[4,8,9,25],[5,6,22,26],[5,10,6,26],[5,22,21,26],[5,21,25,26],[5,25,9,26],[5,9,10,26],[6,7,23,27],[6,11,7,27],[6,23,22,27],[6,22,26,27],[6,26,10,27],[6,10,11,27],[8,9,25,29],[8,13,9,29],[8,25,24,29],[8,24,28,29],[8,28,12,29],[8,12,13,29],[9,10,26,30],[9,14,10,30],[9,26,25,30],[9,25,29,30],[9,29,13,30],[9,13,14,30],[10,11,27,31],[10,15,11,31],[10,27,26,31],[10,26,30,31],[10,30,14,31],[10,14,15,31],[16,17,33,37],[16,21,17,37],[16,33,32,37],[16,32,36,37],[16,36,20,37],[16,20,21,37],[17,18,34,38],[17,22,18,38],[17,34,33,38],[17,33,37,38],[17,37,21,38],[17,21,22,38],[18,19,35,39],[18,23,19,39],[18,35,34,39],[18,34,38,39],[18,38,22,39],[18,22,23,39],[20,21,37,41],[20,25,21,41],[20,37,36,41],[20,36,40,41],[20,40,24,41],[20,24,25,41],[21,22,38,42],[21,26,22,42],[21,38,37,42],[21,37,41,42],[21,41,25,42],[21,25,26,42],[22,23,39,43],[22,27,23,43],[22,39,38,43],[22,38,42,43],[22,42,26,43],[22,26,27,43],[24,25,41,45],[24,29,25,45],[24,41,40,45],[24,40,44,45],[24,44,28,45],[24,28,29,45],[25,26,42,46],[25,30,26,46],[25,42,41,46],[25,41,45,46],[25,45,29,46],[25,29,30,46],[26,27,43,47],[26,31,27,47],[26,43,42,47],[26,42,46,47],[26,46,30,47],[26,30,31,47],[32,33,49,53],[32,37,33,53],[32,49,48,53],[32,48,52,53],[32,52,36,53],[32,36,37,53],[33,34,50,54],[33,38,34,54],[33,50,49,54],[33,49,53,54],[33,53,37,54],[33,37,38,54],[34,35,51,55],[34,39,35,55],[34,51,50,55],[34,50,54,55],[34,54,38,55],[34,38,39,55],[36,37,53,57],[36,41,37,57],[36,53,52,57],[36,52,56,57],[36,56,40,57],[36,40,41,57],[37,38,54,58],[37,42,38,58],[37,54,53,58],[37,53,57,58],[37,57,41,58],[37,41,42,58],[38,39,55,59],[38,43,39,59],[38,55,54,59],[38,54,58,59],[38,58,42,59],[38,42,43,59],[40,41,57,61],[40,45,41,61],[40,57,56,61],[40,56,60,61],[40,60,44,61],[40,44,45,61],[41,42,58,62],[41,46,42,62],[41,58,57,62],[41,57,61,62],[41,61,45,62],[41,45,46,62],[42,43,59,63],[42,47,43,63],[42,59,58,63],[42,58,62,63],[42,62,46,63],[42,46,47,63]] openturns-1.9/python/test/t_LevelSetMesher_std.py000077500000000000000000000044161307543307100223710ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() try: ot.ResourceMap.SetAsUnsignedInteger( "OptimizationAlgorithm-DefaultMaximumIteration", 1000) ot.ResourceMap.SetAsUnsignedInteger( "OptimizationAlgorithm-DefaultMaximumEvaluationNumber", 100000) ot.ResourceMap.SetAsScalar( "OptimizationAlgorithm-DefaultMaximumAbsoluteError", 1.0e-7) ot.ResourceMap.SetAsScalar( "OptimizationAlgorithm-DefaultMaximumRelativeError", 1.0e-7) ot.ResourceMap.SetAsScalar( "OptimizationAlgorithm-DefaultMaximumResidualError", 1.0e-7) ot.ResourceMap.SetAsScalar( "OptimizationAlgorithm-DefaultMaximumConstraintError", 1.0e-7) ot.PlatformInfo.SetNumericalPrecision(3) # The 1D mesher mesher1D = ot.LevelSetMesher([7]) print("mesher1D=", mesher1D) level = 0.5 function1D = ot.SymbolicFunction("x", "cos(x)/(1+0.1*x^2)") levelSet1D = ot.LevelSet(function1D, level) # Automatic bounding box mesh1D = mesher1D.build(levelSet1D) print("mesh1D=", mesh1D) # Manual bounding box mesh1D = mesher1D.build(levelSet1D, ot.Interval(-10.0, 10.0)) print("mesh1D=", mesh1D) # The 2D mesher mesher2D = ot.LevelSetMesher([5] * 2) print("mesher2D=", mesher2D) function2D = ot.SymbolicFunction( ["x0", "x1"], ["cos(x0 * x1)/(1 + 0.1 * (x0^2 + x1^2))"]) levelSet2D = ot.LevelSet(function2D, level) # Automatic bounding box mesh2D = ot.Mesh(mesher2D.build(levelSet2D)) print("mesh2D=", mesh2D) # Manual bounding box mesh2D = mesher2D.build(levelSet2D, ot.Interval([-10.0] * 2, [10.0] * 2)) print("mesh2D=", mesh2D) # The 3D mesher mesher3D = ot.LevelSetMesher([3] * 3) print("mesher3D=", mesher3D) function3D = ot.SymbolicFunction( ["x0", "x1", "x2"], ["cos(x0 * x1 + x2)/(1 + 0.1*(x0^2 + x1^2 + x2^2))"]) levelSet3D = ot.LevelSet(function3D, level) # Automatic bounding box mesh3D = ot.Mesh(mesher3D.build(levelSet3D)) print("mesh3D=", mesh3D) # Manual bounding box mesh3D = mesher3D.build(levelSet3D, ot.Interval([-10.0] * 3, [10.0] * 3)) print("mesh3D=", mesh3D) except: import sys print("t_IntervalMesher_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LevelSet_std.expout000066400000000000000000000020041307543307100221050ustar00rootroot00000000000000levelSet1= {x | f(x) <= 1} with f= [x,y]->[x^4 + y^4] levelSet1 contains [-0.5, -0.5] ? True levelSet1 contains [0.5, 0.0] ? True levelSet1 contains [1.5, 0.0] ? False levelSet2= {x | f(x) <= 1} with f= [x,y]->[(x-1)^2 + y^2] levelSet2 contains [-0.5, -0.5] ? False levelSet2 contains [0.5, 0.0] ? True levelSet2 contains [1.5, 0.0] ? True intersection of {x | f(x) <= 1} with f= [x,y]->[x^4 + y^4] and {x | f(x) <= 1} with f= [x,y]->[(x-1)^2 + y^2] equals {x | f(x) <= 0} with f= ([x0,x1]->[max(x0 - 1, x1 - 1)])o([[x,y]->[x^4 + y^4],[x,y]->[(x-1)^2 + y^2]]) intersection contains [-0.5, -0.5] ? False intersection contains [0.5, 0.0] ? True intersection contains [1.5, 0.0] ? False join of {x | f(x) <= 1} with f= [x,y]->[x^4 + y^4] and {x | f(x) <= 1} with f= [x,y]->[(x-1)^2 + y^2] equals {x | f(x) <= 0} with f= ([x0,x1]->[min(x0 - 1, x1 - 1)])o([[x,y]->[x^4 + y^4],[x,y]->[(x-1)^2 + y^2]]) join contains [-0.5, -0.5] ? True join contains [0.5, 0.0] ? True join contains [1.5, 0.0] ? True openturns-1.9/python/test/t_LevelSet_std.py000077500000000000000000000032731307543307100212250ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # The function defining the level-set inVars = ["x", "y"] formula1 = ["x^4 + y^4"] function1 = SymbolicFunction(inVars, formula1) levelSet1 = LevelSet(function1, 1.0) print("levelSet1=", levelSet1) p0 = [-0.5, -0.5] p1 = [0.5, 0.0] p2 = [1.5, 0.0] print("levelSet1 contains ", p0, "? ", levelSet1.contains(p0)) print("levelSet1 contains ", p1, "? ", levelSet1.contains(p1)) print("levelSet1 contains ", p2, "? ", levelSet1.contains(p2)) # Intersection formula2 = ["(x-1)^2 + y^2"] function2 = SymbolicFunction(inVars, formula2) levelSet2 = LevelSet(function2, 1.0) print("levelSet2=", levelSet2) print("levelSet2 contains ", p0, "? ", levelSet2.contains(p0)) print("levelSet2 contains ", p1, "? ", levelSet2.contains(p1)) print("levelSet2 contains ", p2, "? ", levelSet2.contains(p2)) intersection = levelSet1.intersect(levelSet2) print("intersection of ", levelSet1, " and ", levelSet2, " equals ", intersection) print("intersection contains ", p0, "? ", intersection.contains(p0)) print("intersection contains ", p1, "? ", intersection.contains(p1)) print("intersection contains ", p2, "? ", intersection.contains(p2)) # Union join = levelSet1.join(levelSet2) print("join of ", levelSet1, " and ", levelSet2, " equals ", join) print("join contains ", p0, "? ", join.contains(p0)) print("join contains ", p1, "? ", join.contains(p1)) print("join contains ", p2, "? ", join.contains(p2)) except: import sys print("t_LevelSet_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearCombinationEvaluation_std.expout000066400000000000000000000003041307543307100260100ustar00rootroot00000000000000myEvaluation= (0.3 * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + 2.9 * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)])) Value at [1.2,2.3,3.4] = [22.92] openturns-1.9/python/test/t_LinearCombinationEvaluation_std.py000077500000000000000000000020761307543307100251270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # First, build two functions from R^3->R inVar = Description(3) inVar[0] = "x1" inVar[1] = "x2" inVar[2] = "x3" outVar = Description(1) outVar[0] = "y" formula = Description(1) formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)" functions = [] functions.append(Function(inVar, outVar, formula)) formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)" functions.append(Function(inVar, outVar, formula)) # Second, build the weights coefficients = Point(2) coefficients[0] = 0.3 coefficients[1] = 2.9 myEvaluation = LinearCombinationEvaluation( functions, coefficients) inPoint = Point(3) inPoint[0] = 1.2 inPoint[1] = 2.3 inPoint[2] = 3.4 print("myEvaluation=", myEvaluation) print("Value at ", inPoint, "=", myEvaluation(inPoint)) except: import sys print("t_LinearCombinationEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearCombinationFunction_std.expout000066400000000000000000000006201307543307100254670ustar00rootroot00000000000000myFunction= (0.3 * ([x1,x2,x3]->[x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)]) + 2.9 * ([x1,x2,x3]->[exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)])) Value at [1.2,2.3,3.4] = [22.92] Gradient at [1.2,2.3,3.4] = [[ -155.52 ] [ 309.646 ] [ 252.531 ]] Hessian at [1.2,2.3,3.4] = sheet #0 [[ 1439.96 -3537.43 -2656.41 ] [ -3537.43 9150.61 6852.19 ] [ -2656.41 6852.19 5027.81 ]] openturns-1.9/python/test/t_LinearCombinationFunction_std.py000077500000000000000000000014721307543307100246040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() # First, build two functions from R^3->R inVar = ['x1', 'x2', 'x3'] formula = ['x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)'] functions = [] functions.append(ot.SymbolicFunction(inVar, formula)) formula = ['exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)'] functions.append(ot.SymbolicFunction(inVar, formula)) # Second, build the weights coefficients = [0.3, 2.9] # Third, build the function myFunction = ot.LinearCombinationFunction(functions, coefficients) inPoint = ot.Point([1.2, 2.3, 3.4]) print('myFunction=', myFunction) print('Value at ', inPoint, '=', myFunction(inPoint)) print('Gradient at ', inPoint, '=', myFunction.gradient(inPoint)) print('Hessian at ', inPoint, '=', myFunction.hessian(inPoint)) openturns-1.9/python/test/t_LinearCombinationGradient_std.expout000066400000000000000000000016731307543307100254500ustar00rootroot00000000000000myGradient= (0.3)* | d(y) / d(x1) = ((3*((x1^2)*(sin((x2)+(2.5*x3))))))+((-(((2*x1)+(2*x2))/((1)+(x3^2))))) | d(y) / d(x2) = ((x1^3)*(cos((x2)+(2.5*x3))))+((-(((2*x1)+(2*x2))/((1)+(x3^2))))) | d(y) / d(x3) = ((2.5*((x1^3)*(cos((x2)+(2.5*x3))))))+(((2*((((x1)+(x2))^(2))*(x3))))/(((1)+(x3^2))^(2))) +(2.9)* | d(y) / d(x1) = ((-(((x2)*(exp(((-((x1)*(x2))))+(x3))))/(cos((1)+((x2)*(x3))+(-1*x1))))))+((-(((exp(((-((x1)*(x2))))+(x3)))*(sin((1)+((x2)*(x3))+(-1*x1))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))))) | d(y) / d(x2) = ((-(((x1)*(exp(((-((x1)*(x2))))+(x3))))/(cos((1)+((x2)*(x3))+(-1*x1))))))+(((x3)*(sin((1)+((x2)*(x3))+(-1*x1)))*(exp(((-((x1)*(x2))))+(x3))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))) | d(y) / d(x3) = ((exp(((-((x1)*(x2))))+(x3)))/(cos((1)+((x2)*(x3))+(-1*x1))))+(((x2)*(sin((1)+((x2)*(x3))+(-1*x1)))*(exp(((-((x1)*(x2))))+(x3))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))) Value at [1.2,2.3,3.4] = [[ -155.52 ] [ 309.646 ] [ 252.531 ]] openturns-1.9/python/test/t_LinearCombinationGradient_std.py000077500000000000000000000021301307543307100245440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # First, build two functions from R^3->R inVar = Description(3) inVar[0] = "x1" inVar[1] = "x2" inVar[2] = "x3" outVar = Description(1) outVar[0] = "y" formula = Description(1) formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)" functions = [] functions.append(Function(inVar, outVar, formula)) formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)" functions.append(Function(inVar, outVar, formula)) # Second, build the weights coefficients = Point(2) coefficients[0] = 0.3 coefficients[1] = 2.9 myGradient = LinearCombinationGradient( LinearCombinationEvaluation(functions, coefficients)) inPoint = Point(3) inPoint[0] = 1.2 inPoint[1] = 2.3 inPoint[2] = 3.4 print("myGradient=", myGradient) print("Value at ", inPoint, "=", myGradient.gradient(inPoint)) except: import sys print("t_LinearCombinationGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearCombinationHessian_std.expout000066400000000000000000000017601307543307100253020ustar00rootroot00000000000000myHessian= (0.3)* | d(y) / d(x1) = ((3*((x1^2)*(sin((x2)+(2.5*x3))))))+((-(((2*x1)+(2*x2))/((1)+(x3^2))))) | d(y) / d(x2) = ((x1^3)*(cos((x2)+(2.5*x3))))+((-(((2*x1)+(2*x2))/((1)+(x3^2))))) | d(y) / d(x3) = ((2.5*((x1^3)*(cos((x2)+(2.5*x3))))))+(((2*((((x1)+(x2))^(2))*(x3))))/(((1)+(x3^2))^(2))) +(2.9)* | d(y) / d(x1) = ((-(((x2)*(exp(((-((x1)*(x2))))+(x3))))/(cos((1)+((x2)*(x3))+(-1*x1))))))+((-(((exp(((-((x1)*(x2))))+(x3)))*(sin((1)+((x2)*(x3))+(-1*x1))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))))) | d(y) / d(x2) = ((-(((x1)*(exp(((-((x1)*(x2))))+(x3))))/(cos((1)+((x2)*(x3))+(-1*x1))))))+(((x3)*(sin((1)+((x2)*(x3))+(-1*x1)))*(exp(((-((x1)*(x2))))+(x3))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))) | d(y) / d(x3) = ((exp(((-((x1)*(x2))))+(x3)))/(cos((1)+((x2)*(x3))+(-1*x1))))+(((x2)*(sin((1)+((x2)*(x3))+(-1*x1)))*(exp(((-((x1)*(x2))))+(x3))))/((cos((1)+((x2)*(x3))+(-1*x1)))^(2))) Value at [1.2,2.3,3.4] = sheet #0 [[ 1440 -3537.4 -2656.4 ] [ -3537.4 9150.6 6852.2 ] [ -2656.4 6852.2 5027.8 ]] openturns-1.9/python/test/t_LinearCombinationHessian_std.py000077500000000000000000000023441307543307100244100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # First, build two functions from R^3->R inVar = Description(3) inVar[0] = "x1" inVar[1] = "x2" inVar[2] = "x3" outVar = Description(1) outVar[0] = "y" formula = Description(1) formula[0] = "x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2)" functions = [] functions.append(Function(inVar, outVar, formula)) formula[0] = "exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1)" functions.append(Function(inVar, outVar, formula)) # Second, build the weights coefficients = Point(2) coefficients[0] = 0.3 coefficients[1] = 2.9 myHessian = LinearCombinationHessian( LinearCombinationEvaluation(functions, coefficients)) inPoint = Point(3) inPoint[0] = 1.2 inPoint[1] = 2.3 inPoint[2] = 3.4 print("myHessian=", myHessian) # Reduce the ouput precision because we use finite difference so only 5 # digits are significant PlatformInfo.SetNumericalPrecision(5) print("Value at ", inPoint, "=", myHessian.hessian(inPoint)) except: import sys print("t_LinearCombinationHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearEnumerateFunction_std.expout000066400000000000000000000030031307543307100251500ustar00rootroot00000000000000First 10 values for dimension 1 index= 0 , multi-index= [0] , linear index= 0 index= 1 , multi-index= [1] , linear index= 1 index= 2 , multi-index= [2] , linear index= 2 index= 3 , multi-index= [3] , linear index= 3 index= 4 , multi-index= [4] , linear index= 4 index= 5 , multi-index= [5] , linear index= 5 index= 6 , multi-index= [6] , linear index= 6 index= 7 , multi-index= [7] , linear index= 7 index= 8 , multi-index= [8] , linear index= 8 index= 9 , multi-index= [9] , linear index= 9 First 10 values for dimension 2 index= 0 , multi-index= [0,0] , linear index= 0 index= 1 , multi-index= [1,0] , linear index= 1 index= 2 , multi-index= [0,1] , linear index= 2 index= 3 , multi-index= [2,0] , linear index= 3 index= 4 , multi-index= [1,1] , linear index= 4 index= 5 , multi-index= [0,2] , linear index= 5 index= 6 , multi-index= [3,0] , linear index= 6 index= 7 , multi-index= [2,1] , linear index= 7 index= 8 , multi-index= [1,2] , linear index= 8 index= 9 , multi-index= [0,3] , linear index= 9 First 10 values for dimension 3 index= 0 , multi-index= [0,0,0] , linear index= 0 index= 1 , multi-index= [1,0,0] , linear index= 1 index= 2 , multi-index= [0,1,0] , linear index= 2 index= 3 , multi-index= [0,0,1] , linear index= 3 index= 4 , multi-index= [2,0,0] , linear index= 4 index= 5 , multi-index= [1,1,0] , linear index= 5 index= 6 , multi-index= [1,0,1] , linear index= 6 index= 7 , multi-index= [0,2,0] , linear index= 7 index= 8 , multi-index= [0,1,1] , linear index= 8 index= 9 , multi-index= [0,0,2] , linear index= 9 openturns-1.9/python/test/t_LinearEnumerateFunction_std.py000077500000000000000000000011021307543307100242550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: size = 10 for dimension in range(1, 4): f = LinearEnumerateFunction(dimension) print("First", size, " values for dimension", dimension) for index in range(size): multiIndex = f(index) print("index=", index, ", multi-index=", multiIndex, ", linear index=", f.inverse(multiIndex)) except: import sys print("t_LinearEnumerateFunction_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearEvaluation_std.expout000066400000000000000000000006451307543307100236350ustar00rootroot00000000000000myFunction= class=LinearEvaluation name=linearFunction center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] linearFunction ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[46,119.5] openturns-1.9/python/test/t_LinearEvaluation_std.py000077500000000000000000000021471307543307100227430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 3 outputDimension = 2 # Center center = Point(inputDimension) center[0] = -1 center[1] = 0.5 center[2] = 1 # Constant term constant = Point(outputDimension) constant[0] = -1.0 constant[1] = 2.0 # Linear term linear = Matrix(inputDimension, outputDimension) linear[0, 0] = 1.0 linear[1, 0] = 2.0 linear[2, 0] = 3.0 linear[0, 1] = 4.0 linear[1, 1] = 5.0 linear[2, 1] = 6.0 # myFunction = linear * (X- center) + constant myFunction = LinearEvaluation( center, constant, linear) myFunction.setName("linearFunction") inPoint = Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outPoint = myFunction(inPoint) print("myFunction=", repr(myFunction)) print(myFunction.getName(), "( ", repr(inPoint), " ) = ", repr(outPoint)) # except TestFailed, ex : except: import sys print("t__LinearEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearFunction_std.expout000066400000000000000000000025471307543307100233160ustar00rootroot00000000000000myFunction= class=LinearFunction name=linearFunction implementation=class=FunctionImplementation name=linearFunction description=[x0,x1,x2,y0,y1] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] linearFunction ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[69.5,96] linearFunction .gradient( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,3,5,2,4,6] linearFunction .hessian( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] openturns-1.9/python/test/t_LinearFunction_std.py000077500000000000000000000024471307543307100224240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 3 outputDimension = 2 # Center center = Point(inputDimension) center[0] = -1 center[1] = 0.5 center[2] = 1 # Constant term constant = Point(outputDimension) constant[0] = -1.0 constant[1] = 2.0 # Linear term linear = Matrix(outputDimension, inputDimension) linear[0, 0] = 1.0 linear[1, 0] = 2.0 linear[0, 1] = 3.0 linear[1, 1] = 4.0 linear[0, 2] = 5.0 linear[1, 2] = 6.0 # myFunction = linear * (X- center) + constant myFunction = LinearFunction(center, constant, linear) myFunction.setName("linearFunction") inPoint = Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outPoint = myFunction(inPoint) print("myFunction=", repr(myFunction)) print(myFunction.getName(), "( ", repr(inPoint), " ) = ", repr(outPoint)) print(myFunction.getName(), ".gradient( ", repr(inPoint), " ) = ", repr(myFunction.gradient(inPoint))) print(myFunction.getName(), ".hessian( ", repr(inPoint), " ) = ", repr(myFunction.hessian(inPoint))) except: import sys print("t_LinearFunction_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearGradient_std.expout000066400000000000000000000011261307543307100232560ustar00rootroot00000000000000myGradient= class=LinearGradient name=linearGradient center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,5,7,9,3] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] linearGradient ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[189,229,255.5,-181,-218,-247.5] openturns-1.9/python/test/t_LinearGradient_std.py000077500000000000000000000030611307543307100223650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: inputDimension = 3 outputDimension = 2 # Center center = Point(inputDimension) center[0] = -1 center[1] = 0.5 center[2] = 1 # Constant term constant = Matrix(inputDimension, outputDimension) constant[0, 0] = 1.0 constant[1, 0] = 2.0 constant[2, 0] = 5.0 constant[0, 1] = 7.0 constant[1, 1] = 9.0 constant[2, 1] = 3.0 # Linear term linear = SymmetricTensor(inputDimension, outputDimension) linear[0, 0, 0] = 7.0 linear[0, 0, 1] = -7.0 linear[0, 1, 0] = 8.0 linear[0, 1, 1] = -8.0 linear[0, 2, 0] = 9.0 linear[0, 2, 1] = -9.0 linear[1, 0, 0] = 8.0 linear[1, 0, 1] = -8.0 linear[1, 1, 0] = 10.0 linear[1, 1, 1] = -10.0 linear[1, 2, 0] = 11.0 linear[1, 2, 1] = -11.0 linear[2, 0, 0] = 9.0 linear[2, 0, 1] = -9.0 linear[2, 1, 0] = 11.0 linear[2, 1, 1] = -11.0 linear[2, 2, 0] = 12.0 linear[2, 2, 1] = -12.0 # myFunction = linear * (X- center) + constant myGradient = LinearGradient( center, constant, linear) myGradient.setName("linearGradient") inPoint = Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outMatrix = myGradient.gradient(inPoint) print("myGradient=", repr(myGradient)) print(myGradient.getName(), "( ", repr(inPoint), " ) = ", repr(outMatrix)) except: import sys print("t_LinearGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearLeastSquares_std.expout000066400000000000000000000155411307543307100241430ustar00rootroot00000000000000myLeastSquares= class=LinearLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5],[-0.25,-0.25],[-0.25,0.25],[0.25,-0.25],[0.25,0.25]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[f1,f2,f3] data=[[0.239713,0.540302,0.909796],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796],[0.061851,0.877583,0.963019],[-0.061851,1,0.590458],[-0.061851,1,1.58775],[0.061851,0.877583,0.973501]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc( class=Point name=Unnamed dimension=2 values=[0.1,0.1] )= class=Point name=Unnamed dimension=3 values=[0.00998334,0.980067,0.995321] responseSurface( class=Point name=Unnamed dimension=2 values=[0.1,0.1] )= class=Point name=Unnamed dimension=3 values=[0.0322237,0.812239,1.03617] myLeastSquares= class=LinearLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5],[-0.25,-0.25],[-0.25,0.25],[0.25,-0.25],[0.25,0.25]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[f1,f2,f3] data=[[0.239713,0.540302,0.909796],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796],[0.061851,0.877583,0.963019],[-0.061851,1,0.590458],[-0.061851,1,1.58775],[0.061851,0.877583,0.973501]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.0196486,0.82872,1.03834] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.0628755,0.0628755,-0.082405,-0.082405,0.951099,-0.972737] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc( class=Point name=Unnamed dimension=2 values=[0.1,0.1] )= class=Point name=Unnamed dimension=3 values=[0.00998334,0.980067,0.995321] responseSurface( class=Point name=Unnamed dimension=2 values=[0.1,0.1] )= class=Point name=Unnamed dimension=3 values=[0.0322237,0.812239,1.03617] openturns-1.9/python/test/t_LinearLeastSquares_std.py000077500000000000000000000031321307543307100232430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) data = ot.Sample(9, myFunc.getInputDimension()) point = ot.Point(myFunc.getInputDimension()) point[0] = 0.5 point[1] = 0.5 data[0] = point point[0] = -0.5 point[1] = -0.5 data[1] = point point[0] = -0.5 point[1] = 0.5 data[2] = point point[0] = 0.5 point[1] = -0.5 data[3] = point point[0] = 0.5 point[1] = 0.5 data[4] = point point[0] = -0.25 point[1] = -0.25 data[5] = point point[0] = -0.25 point[1] = 0.25 data[6] = point point[0] = 0.25 point[1] = -0.25 data[7] = point point[0] = 0.25 point[1] = 0.25 data[8] = point myLeastSquares = ot.LinearLeastSquares(data, myFunc) myLeastSquares.run() responseSurface = ot.Function( myLeastSquares.getResponseSurface()) print("myLeastSquares=", repr(myLeastSquares)) print("responseSurface=", repr(responseSurface)) inPoint = ot.Point(myFunc.getInputDimension(), 0.1) print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) dataOut = myFunc(data) myLeastSquares = ot.LinearLeastSquares(data, dataOut) myLeastSquares.run() responseSurface = ot.Function( myLeastSquares.getResponseSurface()) print("myLeastSquares=", repr(myLeastSquares)) print("responseSurface=", repr(responseSurface)) inPoint = ot.Point(myFunc.getInputDimension(), 0.1) print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) openturns-1.9/python/test/t_LinearModelFactory_std.expout000066400000000000000000000007331307543307100241140ustar00rootroot00000000000000test number zero : default constructor and creation of linear model test = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=2 values=[3.01168,-2.00025] confidence intervals=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[2.99572,-2.0033] upper bound=class=Point name=Unnamed dimension=2 values=[3.02763,-1.9972] finite lower bound=[1,1] finite upper bound=[1,1] p-Values=[2.07338e-35,3.81897e-45] openturns-1.9/python/test/t_LinearModelFactory_std.py000077500000000000000000000015661307543307100232300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND CREATION OF LM print( "test number zero : default constructor and creation of linear model") # Default constructor lmfact = LinearModelFactory() # lm build size = 20 oneSample = Sample(size, 1) twoSample = Sample(size, 1) for i in range(size): oneSample[i] = Point( 1, 7.0 * sin(-3.5 + (6.5 * i) / (size - 1.0)) + 2.0) twoSample[i] = Point( 1, -2.0 * oneSample[i, 0] + 3.0 + 0.05 * sin(oneSample[i, 0])) test = lmfact.build(oneSample, twoSample) print("test = ", repr(test)) except: import sys print("t_LinearModelFactory_std_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearModelTest_std.expout000066400000000000000000000014211307543307100234170ustar00rootroot00000000000000LinearModelAdjustedRSquared= class=TestResult name=Unnamed type=AdjustedRSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.251488 description=[] LinearModelFisher= class=TestResult name=Unnamed type=Fisher binaryQualityMeasure=false p-value threshold=0.05 p-value=1 description=[] LinearModelResidualMean= class=TestResult name=Unnamed type=ResidualMean binaryQualityMeasure=true p-value threshold=0.05 p-value=1 description=[] LinearModelRSquared= class=TestResult name=Unnamed type=RSquared binaryQualityMeasure=false p-value threshold=0.95 p-value=0.259049 description=[] Durbin Watson = class=TestResult name=Unnamed type=DurbinWatson binaryQualityMeasure=false p-value threshold=0.95 p-value=0.000219316 description=[Hypothesis test: autocorrelation equals 0.] openturns-1.9/python/test/t_LinearModelTest_std.py000077500000000000000000000035531307543307100225360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) try: size = 100 dim = 10 R = ot.CorrelationMatrix(dim) for i in range(dim): for j in range(i): R[i, j] = (i + j + 1.0) / (2.0 * dim) mean = [2.0] * dim sigma = [3.0] * dim distribution = ot.Normal(mean, sigma, R) sample = distribution.getSample(size) sampleX = ot.Sample(size, dim - 1) sampleY = ot.Sample(size, 1) for i in range(size): sampleY[i] = ot.Point(1, sample[i, 0]) p = ot.Point(dim - 1) for j in range(dim - 1): p[j] = sample[i, j + 1] sampleX[i] = p sampleZ = ot.Sample(size, 1) for i in range(size): sampleZ[i] = ot.Point(1, sampleY[i, 0] * sampleY[i, 0]) print("LinearModelAdjustedRSquared=", ot.LinearModelTest.LinearModelAdjustedRSquared(sampleY, sampleZ)) print("LinearModelFisher=", ot.LinearModelTest.LinearModelFisher(sampleY, sampleZ)) print("LinearModelResidualMean=", ot.LinearModelTest.LinearModelResidualMean(sampleY, sampleZ)) print("LinearModelRSquared=", ot.LinearModelTest.LinearModelRSquared(sampleY, sampleZ)) # Durbin Watson ot.RandomGenerator.SetSeed(5415) eps = ot.Normal(0, 20) f = ot.SymbolicFunction('x', '5+2*x+x^2-0.1*x^3') N = 15 x = ot.Sample([[0], [1.42857], [2.85714], [4.28571], [5.71429], [7.14286], [8.57143], [10], [11.4286], [12.8571], [14.2857], [15.7143], [17.1429], [18.5714], [20]]) y = f(x) + eps.getSample(N) linmodel = ot.LinearModelFactory().build(x, y) dwTest = ot.LinearModelTest.LinearModelDurbinWatson(x, y) print('Durbin Watson = ', dwTest) except: import sys print("t_LinearModelTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearModel_std.expout000066400000000000000000000035251307543307100225660ustar00rootroot00000000000000test number zero : default & copy constructors and string converter LM = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=1 values=[12] confidence intervals=class=Interval name=testInterval dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[36.92] finite lower bound=[1] finite upper bound=[1] p-Values=[1] emptyLM = class=LinearModel name=Unnamed regression=class=Point name=Unnamed dimension=1 values=[12] confidence intervals=class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[12] upper bound=class=Point name=Unnamed dimension=1 values=[12] finite lower bound=[1] finite upper bound=[1] p-Values=[0] test number one : get elements LM.getRegression = class=Point name=Unnamed dimension=1 values=[12] LM.getConfidenceIntervals = class=Interval name=testInterval dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-1] upper bound=class=Point name=Unnamed dimension=1 values=[36.92] finite lower bound=[1] finite upper bound=[1] LM.getPValues = [1] test number two : get predicted/residual LM.getPredicted = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=1 data=[[-5.90042],[-1.21708],[3.49272],[7.6831],[10.8684],[12.6795],[12.9064],[11.5229],[8.68929],[4.734],[0.115426],[-4.63113],[-8.95554],[-12.3566],[-14.4402],[-14.9647],[-13.8695],[-11.2814],[-7.50044],[-2.96476]] LM.getResidual = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=1 data=[[-0.0589069],[0.0316584],[-0.0236475],[-0.0483521],[0.0227129],[0.0367317],[0.0357011],[0.0321055],[-0.0273235],[-0.0498224],[0.0383126],[-0.0421222],[-0.0249526],[0.039543],[0.0227439],[0.0117943],[0.0321329],[0.0281066],[-0.0531531],[-0.00326265]] openturns-1.9/python/test/t_LinearModel_std.py000077500000000000000000000037421307543307100216760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT & COPY CONSTRUCTORs AND STRING CONVERTER print( "test number zero : default & copy constructors and string converter") vectR = Point(1, 12.0) testSample = Sample(1, 1) begin = -1.0 end = 36.92 testInterval = Interval([begin], [end]) testInterval.setName("testInterval") valColl = ScalarCollection() valColl.add(1.0) # Constructor from Point # Y = Somme (ai * Xi), i=0, n # linearModel : (ai), i=0, n LM = LinearModel(vectR, testInterval, valColl) emptyLM = LinearModel(vectR) # String converter # print("LM = ", repr(LM)) print("emptyLM = ", repr(emptyLM)) # * TEST NUMBER ONE : GET ELEMENTS # print("test number one : get elements") # coefficients ai print("LM.getRegression = ", repr(LM.getRegression())) # confidence intervals of the ai coefficients print("LM.getConfidenceIntervals = ", repr(LM.getConfidenceIntervals())) # p values of the (n+1) coefficients ai: print("LM.getPValues = ", repr(LM.getPValues())) # * TEST NUMBER TWO : GET PREDICT/RESIDUAL # print("test number two : get predicted/residual") lmfact = LinearModelFactory() size = 20 oneSample = Sample(size, 1) twoSample = Sample(size, 1) for i in range(size): oneSample[i] = Point( 1, 7.0 * sin(-3.5 + (6.5 * i) / (size - 1.0)) + 2.0) twoSample[i] = Point( 1, -2.0 * oneSample[i, 0] + 3.0 + 0.05 * sin(oneSample[i, 0])) test = lmfact.build(oneSample, twoSample) # evaluate the predictions on sample : predict = Somme(aiXi) print("LM.getPredicted = ", repr(test.getPredicted(oneSample))) # get the residuals epsiloni print("LM.getResidual = ", repr(test.getResidual(oneSample, twoSample))) except: import sys print("t_LinearModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LinearTaylor_std.expout000066400000000000000000000066011307543307100227760ustar00rootroot00000000000000myTaylor= class=LinearTaylor name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=LinearEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] gradientImplementation=class=ConstantGradient name=Unnamed constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,0,0,0,0,0,0,0,0,0,0,0] myFunc( class=Point name=Unnamed dimension=2 values=[1,2] )= class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] responseSurface( class=Point name=Unnamed dimension=2 values=[1,2] )= class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] myFunc( class=Point name=Unnamed dimension=2 values=[1.2,1.9] )= class=Point name=Unnamed dimension=3 values=[1.13556,-0.999135,0.215393] responseSurface( class=Point name=Unnamed dimension=2 values=[1.2,1.9] )= class=Point name=Unnamed dimension=3 values=[1.13277,-1.0041,0.204127] openturns-1.9/python/test/t_LinearTaylor_std.py000077500000000000000000000016011307543307100221000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot eps = 0.2 # Instance creation myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) center = ot.Point(myFunc.getInputDimension()) for i in range(center.getDimension()): center[i] = 1.0 + i myTaylor = ot.LinearTaylor(center, myFunc) myTaylor.run() responseSurface = ot.Function(myTaylor.getResponseSurface()) print("myTaylor=", repr(myTaylor)) print("responseSurface=", repr(responseSurface)) print("myFunc(", repr(center), ")=", repr(myFunc(center))) print("responseSurface(", repr(center), ")=", repr(responseSurface(center))) inPoint = ot.Point(center) inPoint[0] += eps inPoint[1] -= eps / 2 print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) openturns-1.9/python/test/t_LogNormalFactory_std.expout000066400000000000000000000012241307543307100236070ustar00rootroot00000000000000distribution= class=LogNormal name=LogNormal dimension=1 muLog=1.5 sigmaLog=2.5 gamma=-1.5 Estimated distribution= class=LogNormal name=LogNormal dimension=1 muLog=1.46531 sigmaLog=2.50364 gamma=-1.49972 Default distribution= LogNormal(muLog = 0, sigmaLog = 1, gamma = 0) Distribution from parameters= LogNormal(muLog = 1.5, sigmaLog = 2.5, gamma = -1.5) LogNormal = LogNormal(muLog = 1.5, sigmaLog = 2.5, gamma = -1.5) Estimated logNormal= LogNormal(muLog = 1.46531, sigmaLog = 2.50364, gamma = -1.49972) Default logNormal= LogNormal(muLog = 0, sigmaLog = 1, gamma = 0) LogNormal from parameters= LogNormal(muLog = 1.5, sigmaLog = 2.5, gamma = -1.5) openturns-1.9/python/test/t_LogNormalFactory_std.py000077500000000000000000000022541307543307100227220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = LogNormal(1.5, 2.5, -1.5) size = 10000 sample = distribution.getSample(size) factory = LogNormalFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedLogNormal = factory.buildAsLogNormal(sample) print("LogNormal =", distribution) print("Estimated logNormal=", estimatedLogNormal) estimatedLogNormal = factory.buildAsLogNormal() print("Default logNormal=", estimatedLogNormal) estimatedLogNormal = factory.buildAsLogNormal( distribution.getParameter()) print("LogNormal from parameters=", estimatedLogNormal) except: import sys print("t_LogNormalFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LogNormal_std.expout000066400000000000000000000055131307543307100222640ustar00rootroot00000000000000Distribution class=LogNormal name=LogNormal dimension=1 muLog=-1 sigmaLog=1.5 gamma=-0.5 Distribution LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.416038] oneSample first= class=Point name=Unnamed dimension=1 values=[-0.444936] last= class=Point name=Unnamed dimension=1 values=[3.12047] mean= class=Point name=Unnamed dimension=1 values=[0.609446] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[8.23002] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.12381] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.12381] log pdf=-2.168831 pdf =0.114311 pdf (FD)=0.114311 cdf=0.825615 ccdf=0.174385 characteristic function= (0.74087680493-0.0157786395662j) pdf gradient = class=Point name=Unnamed dimension=3 values=[0.0714046,-0.00930299,0.12381] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.0714046,-0.00930299,0.12381] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.171467,-0.16066,-0.114311] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[-0.171467,-0.16066,-0.114311] quantile= class=Point name=Unnamed dimension=1 values=[3.83742] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.468798] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.499653, 3.83753] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.14451} with f= MinimumVolumeLevelSetEvaluation(LogNormal(muLog = -1, sigmaLog = 1.5, gamma = -0.5)) beta= [0.0158512] Bilateral confidence interval= [-0.480551, 6.45838] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 3.83742] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.468798, 35451.8] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.633148] standard deviation= class=Point name=Unnamed dimension=1 values=[3.30128] skewness= class=Point name=Unnamed dimension=1 values=[33.468] kurtosis= class=Point name=Unnamed dimension=1 values=[10078.3] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10.8985] parameters= [class=PointWithDescription name=X0 dimension=3 description=[muLog,sigmaLog,gamma] values=[-1,1.5,-0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.13315] standard moment n= 2 value= [12.1825] standard moment n= 3 value= [1242.65] standard moment n= 4 value= [1.2026e+06] standard moment n= 5 value= [1.10423e+10] Standard representative= LogNormal(muLog = -1, sigmaLog = 1.5, gamma = 0) openturns-1.9/python/test/t_LogNormal_std.py000077500000000000000000000155241307543307100213760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = LogNormal(-1.0, 1.5, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF at point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(3) PDFgrFD[0] = (LogNormal(distribution.getMuLog() + eps, distribution.getSigmaLog(), distribution.getGamma()).computePDF(point) - LogNormal(distribution.getMuLog() - eps, distribution.getSigmaLog(), distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog() + eps, distribution.getGamma()).computePDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() + eps).computePDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # by the finite difference technique CDFgrFD = Point(3) CDFgrFD[0] = (LogNormal(distribution.getMuLog() + eps, distribution.getSigmaLog(), distribution.getGamma()).computeCDF(point) - LogNormal(distribution.getMuLog() - eps, distribution.getSigmaLog(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog() + eps, distribution.getGamma()).computeCDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() + eps).computeCDF(point) - LogNormal(distribution.getMuLog(), distribution.getSigmaLog(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_LogNormal.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LogUniformFactory_std.expout000066400000000000000000000011221307543307100237730ustar00rootroot00000000000000Distribution = LogUniform(aLog = 1, bLog = 2.5) Estimated distribution= LogUniform(aLog = 1.00014, bLog = 2.49994) Default distribution= LogUniform(aLog = -1, bLog = 1) Distribution from parameters= LogUniform(aLog = 1, bLog = 2.5) LogUniform = LogUniform(aLog = 1, bLog = 2.5) Estimated logUniform= LogUniform(aLog = 1.00014, bLog = 2.49994) Default logUniform= LogUniform(aLog = -1, bLog = 1) LogUniform from parameters= LogUniform(aLog = 1, bLog = 2.5) Estimated distribution= class=LogUniform name=LogUniform dimension=1 aLog=-9.9985e-05 bLog=9.9975e-05 a=0.9999 b=1.0001 openturns-1.9/python/test/t_LogUniformFactory_std.py000077500000000000000000000025041307543307100231070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = LogUniform(1.0, 2.5) size = 10000 sample = distribution.getSample(size) factory = LogUniformFactory() estimatedDistribution = factory.build(sample) print("Distribution =", distribution) print("Estimated distribution=", estimatedDistribution) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedLogUniform = factory.buildAsLogUniform(sample) print("LogUniform =", distribution) print("Estimated logUniform=", estimatedLogUniform) estimatedLogUniform = factory.buildAsLogUniform() print("Default logUniform=", estimatedLogUniform) estimatedLogUniform = factory.buildAsLogUniform( distribution.getParameter()) print("LogUniform from parameters=", estimatedLogUniform) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_LogUniformFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LogUniform_std.expout000066400000000000000000000056201307543307100224520ustar00rootroot00000000000000Distribution class=LogUniform name=LogUniform dimension=1 aLog=-0.5 bLog=1.5 a=0.606531 b=4.48169 Distribution LogUniform(aLog = -0.5, bLog = 1.5) Mean= class=Point name=Unnamed dimension=1 values=[1.93758] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.1752] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Elliptical = False oneRealization= class=Point name=Unnamed dimension=1 values=[2.16024] oneSample first= class=Point name=Unnamed dimension=1 values=[3.68269] last= class=Point name=Unnamed dimension=1 values=[1.40286] mean= class=Point name=Unnamed dimension=1 values=[1.94822] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19861] Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.5] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.5] log pdf=-0.693147 pdf =0.500000 pdf (FD)=0.500000 cdf=0.250000 ccdf=0.750000 characteristic function=-0.089620+0.531924j log characteristic function=-0.617260+1.737711j pdf gradient = class=Point name=Unnamed dimension=2 values=[0.25,-0.25] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.25,-0.25] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.375,-0.125] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.375,-0.125] quantile= class=Point name=Unnamed dimension=1 values=[4.0552] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.67032] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.606531, 4.0552] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.09315} with f= MinimumVolumeLevelSetEvaluation(LogUniform(aLog = -0.5, bLog = 1.5)) beta= [0.123298] Bilateral confidence interval= [0.637628, 4.26311] beta= [0.95] Unilateral confidence interval (lower tail)= [0.606531, 4.0552] beta= [0.95] Unilateral confidence interval (upper tail)= [0.67032, 4.48169] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.93758] standard deviation= class=Point name=Unnamed dimension=1 values=[1.08407] skewness= class=Point name=Unnamed dimension=1 values=[0.67539] kurtosis= class=Point name=Unnamed dimension=1 values=[0.623015] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.1752] parameters= [class=PointWithDescription name=X0 dimension=2 description=[aLog,bLog] values=[-0.5,1.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.93758] standard moment n= 2 value= [4.92941] standard moment n= 3 value= [14.9657] standard moment n= 4 value= [50.4117] standard moment n= 5 value= [180.796] Standard representative= LogUniform(aLog = -0.5, bLog = 1.5) openturns-1.9/python/test/t_LogUniform_std.py000077500000000000000000000143271307543307100215650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = LogUniform(-0.5, 1.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=%.6f+%.6fj" % (CF.real, CF.imag)) logCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=%.6f+%.6fj" % (logCF.real, logCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (LogUniform(distribution.getALog() + eps, distribution.getBLog()).computePDF(point) - LogUniform(distribution.getALog() - eps, distribution.getBLog()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (LogUniform(distribution.getALog(), distribution.getBLog() + eps).computePDF(point) - LogUniform(distribution.getALog(), distribution.getBLog() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (LogUniform(distribution.getALog() + eps, distribution.getBLog()).computeCDF(point) - LogUniform(distribution.getALog() - eps, distribution.getBLog()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (LogUniform(distribution.getALog(), distribution.getBLog() + eps).computeCDF(point) - LogUniform(distribution.getALog(), distribution.getBLog() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_LogUniform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LogisticFactory_std.expout000066400000000000000000000007621307543307100235000ustar00rootroot00000000000000distribution= class=Logistic name=Logistic dimension=1 alpha=2 beta=2.5 Estimated distribution= class=Logistic name=Logistic dimension=1 alpha=2.04612 beta=2.51522 Default distribution= Logistic(alpha = 0, beta = 1) Distribution from parameters= Logistic(alpha = 2, beta = 2.5) Logistic = Logistic(alpha = 2, beta = 2.5) Estimated logistic= Logistic(alpha = 2.04612, beta = 2.51522) Default logistic= Logistic(alpha = 0, beta = 1) Logistic from parameters= Logistic(alpha = 2, beta = 2.5) openturns-1.9/python/test/t_LogisticFactory_std.py000077500000000000000000000022261307543307100226040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Logistic(2.0, 2.5) size = 10000 sample = distribution.getSample(size) factory = LogisticFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedLogistic = factory.buildAsLogistic(sample) print("Logistic =", distribution) print("Estimated logistic=", estimatedLogistic) estimatedLogistic = factory.buildAsLogistic() print("Default logistic=", estimatedLogistic) estimatedLogistic = factory.buildAsLogistic( distribution.getParameter()) print("Logistic from parameters=", estimatedLogistic) except: import sys print("t_LogisticFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Logistic_std.expout000066400000000000000000000052611307543307100221470ustar00rootroot00000000000000Distribution class=Logistic name=Logistic dimension=1 alpha=-0.5 beta=1.5 Distribution Logistic(alpha = -0.5, beta = 1.5) Elliptical = True Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.297531] oneSample first= class=Point name=Unnamed dimension=1 values=[2.5289] last= class=Point name=Unnamed dimension=1 values=[-0.955127] mean= class=Point name=Unnamed dimension=1 values=[-0.472451] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[7.49258] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.0403812] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0403812] log pdf=-2.031988 pdf =0.131075 pdf (FD)=0.131075 cdf=0.731059 ccdf=0.268941 characteristic function= (0.0743069833187-0.0405940899998j) pdf gradient = class=Point name=Unnamed dimension=2 values=[0.0403812,-0.0470019] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.0403812,-0.0470019] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.131075,-0.131075] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.131075,-0.131075] quantile= class=Point name=Unnamed dimension=1 values=[3.91666] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-4.91666] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-5.99534, 4.99534] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.11966} with f= MinimumVolumeLevelSetEvaluation(Logistic(alpha = -0.5, beta = 1.5)) beta= [0.01625] Bilateral confidence interval= [-5.99534, 4.99534] beta= [0.95] Unilateral confidence interval (lower tail)= [-48.8543, 3.91666] beta= [0.95] Unilateral confidence interval (upper tail)= [-4.91666, 47.8543] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[-0.5] standard deviation= class=Point name=Unnamed dimension=1 values=[2.7207] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[4.2] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[7.4022] parameters= [class=PointWithDescription name=X0 dimension=2 description=[alpha,beta] values=[-0.5,1.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [3.28987] standard moment n= 3 value= [0] standard moment n= 4 value= [45.4576] standard moment n= 5 value= [0] Standard representative= Logistic(alpha = 0, beta = 1) openturns-1.9/python/test/t_Logistic_std.py000077500000000000000000000146551307543307100212650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Logistic(-0.5, 1.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (Logistic(distribution.getAlpha() + eps, distribution.getBeta()).computePDF(point) - Logistic(distribution.getAlpha() - eps, distribution.getBeta()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Logistic(distribution.getAlpha(), distribution.getBeta() + eps).computePDF(point) - Logistic(distribution.getAlpha(), distribution.getBeta() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Logistic(distribution.getAlpha() + eps, distribution.getBeta()).computeCDF(point) - Logistic(distribution.getAlpha() - eps, distribution.getBeta()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Logistic(distribution.getAlpha(), distribution.getBeta() + eps).computeCDF(point) - Logistic(distribution.getAlpha(), distribution.getBeta() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution # mu = distribution.getMu() # print "mu=%.6f" % mu # sigma = distribution.getSigma() # print "sigma=%.6f" % sigma # newDistribution = Logistic(distribution) # distribution.setMu(mu) # distribution.setSigma(sigma) # print "alpha from (mu, sigma)=%.6f" % newDistribution.getAlpha() # print "beta from (mu, sigma)=%.6f" % newDistribution.getBeta() except: import sys print("t_Logistic.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_LowDiscrepancyExperiment_std.expout000066400000000000000000000077561307543307100253740ustar00rootroot00000000000000myPlane = LowDiscrepancyExperiment(sequence=class=LowDiscrepancySequence implementation=class=HaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=4 base=[2,3,5,7] seed=1, distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[5,5,5,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1], size10, restart=true sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.88715,5.53508,4.41716,5.23227],[4.11285,3.95559,4.94985,5.62707],[5.48878,4.95356,5.4677,6.16283],[4.84269,5.89578,6.17499,3.25871],[6.53412,4.35437,3.82501,4.09855],[3.13727,5.23422,4.5323,4.55049],[5.07841,6.4461,5.05015,4.92319],[4.42087,3.5539,5.58284,5.28517],[5.77642,4.76578,6.40507,5.69063],[3.99001,5.64563,4.00554,6.27001]] sample3 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5,4.56927,4.15838,3.93243],[4.32551,5.43073,4.74665,4.43405],[5.67449,3.77936,5.25335,4.81999],[3.84965,4.86029,5.84162,5.18001],[5.31864,5.76471,3.24931,5.56595],[4.68136,4.23529,4.2937,6.06757],[6.15035,5.13971,4.84903,2.95461],[3.46588,6.22064,5.35846,4.01887],[5.15731,3.21384,5.99446,4.49313],[4.51122,4.66913,3.59493,4.87176]] sample2 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.88715,5.53508,4.41716,5.23227],[4.11285,3.95559,4.94985,5.62707],[5.48878,4.95356,5.4677,6.16283],[4.84269,5.89578,6.17499,3.25871],[6.53412,4.35437,3.82501,4.09855],[3.13727,5.23422,4.5323,4.55049],[5.07841,6.4461,5.05015,4.92319],[4.42087,3.5539,5.58284,5.28517],[5.77642,4.76578,6.40507,5.69063],[3.99001,5.64563,4.00554,6.27001]] sample3 = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 description=[X0,X1,X2,X3] data=[[5.40225,4.10422,4.64154,3.45542],[4.7628,5.04644,5.15097,4.17287],[6.31801,6.04441,5.7063,4.6064],[3.68199,4.46492,6.75069,4.97442],[5.2372,5.33087,2.59108,5.33889],[4.59775,6.78616,4.18662,5.75712],[6.00999,2.7538,4.76731,6.39417],[4.22358,4.60299,5.27411,3.60583],[5.57913,5.46494,5.87055,4.24288],[4.92159,3.84212,3.33544,4.66111]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[X0] data=[[0],[-0.67449],[0.67449],[-1.15035],[0.318639],[-0.318639],[1.15035],[-1.53412],[0.157311],[-0.488776]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 description=[X0,X1] data=[[0,-0.333333],[-0.5,0.333333],[0.5,-0.777778],[-0.75,-0.111111],[0.25,0.555556],[-0.25,-0.555556],[0.75,0.111111],[-0.875,0.777778],[0.125,-0.925926],[-0.375,-0.259259]] openturns-1.9/python/test/t_LowDiscrepancyExperiment_std.py000077500000000000000000000031241307543307100244640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: distribution = Normal(4) distribution.setMean(Point(4, 5.0)) size = 10 myPlane = LowDiscrepancyExperiment(HaltonSequence(), distribution, size) print("myPlane = ", myPlane) # Test sampling with weights sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) # Test sampling with reinitialization each time the distribution is # set (default behaviour) # sample 2 != sample print("sample2 = ", repr(myPlane.generate())) myPlane.setDistribution(distribution) # sample 3 == sample print("sample3 = ", repr(myPlane.generate())) # Test sampling without reinitialization excepted when distribution # dimension changes myPlane = LowDiscrepancyExperiment( HaltonSequence(), distribution, size, False) print("sample = ", repr(myPlane.generate())) # sample 2 != sample print("sample2 = ", repr(myPlane.generate())) myPlane.setDistribution(distribution) # sample 3 != sample && sample 3 != sample 2 print("sample3 = ", repr(myPlane.generate())) # Test dimension change myPlane.setDistribution(Normal()) print("sample = ", repr(myPlane.generate())) # Test constructor with no distribution and dimension>1 myPlane = LowDiscrepancyExperiment(HaltonSequence(2), size) print("sample = ", repr(myPlane.generate())) except: import sys print("t_LowDiscrepancyExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MarginalDistribution_std.expout000066400000000000000000000044261307543307100245260ustar00rootroot00000000000000Distribution class=Beta name=Beta dimension=1 r=2 t=5 a=-1 b=2 Distribution Beta(r = 2, t = 5, a = -1, b = 2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.456966] oneSample first= class=Point name=Unnamed dimension=1 values=[-0.504347] last= class=Point name=Unnamed dimension=1 values=[-0.367645] mean= class=Point name=Unnamed dimension=1 values=[0.203901] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.365788] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.444444] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.444444] log pdf=-1.216395 pdf =0.296296 pdf (FD)=0.296296 cdf=0.888889 ccdf=0.111111 pdf gradient = class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[0.353525,-0.152675,0.246914,0.197531] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] cdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-0.186185,0.0973767,-0.0987654,-0.197531] quantile= class=Point name=Unnamed dimension=1 values=[1.25419] cdf(quantile)=0.950000 mean= class=Point name=Unnamed dimension=1 values=[0.2] standard deviation= class=Point name=Unnamed dimension=1 values=[0.6] skewness= class=Point name=Unnamed dimension=1 values=[0.285714] kurtosis= class=Point name=Unnamed dimension=1 values=[2.35714] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.36] parameters= [class=PointWithDescription name=marginal 1 dimension=4 description=[r,t,a,b] values=[2,5,-1,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.2] standard moment n= 2 value= [0.2] standard moment n= 3 value= [-0.0857143] standard moment n= 4 value= [0.0857143] standard moment n= 5 value= [-0.047619] Standard representative= Beta(r = 2, t = 5, a = -1, b = 1) mu=0.200000 sigma=0.600000 r from (mu, sigma)=2.000000 t from (mu, sigma)=5.000000 openturns-1.9/python/test/t_MarginalDistribution_std.py000077500000000000000000000074541307543307100236410ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) dimension = 5 indices = [2, 0, 1] fullDistribution = ComposedDistribution([Normal(), Uniform(), Exponential( ), Weibull()], ComposedCopula([GumbelCopula(), ClaytonCopula()])) distribution = MarginalDistribution(fullDistribution, indices) print('Distribution ', repr(distribution)) print('Distribution ', distribution) # Is this distribution elliptical ? print('Elliptical = ', distribution.isElliptical()) # Is this distribution continuous ? print('Continuous = ', distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print('oneRealization=', oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print('oneSample first=', oneSample[0], ' last=', oneSample[size - 1]) print('mean=', oneSample.computeMean()) print('covariance=', oneSample.computeCovariance()) if (distribution.getDimension() == 1): size = 100 for i in range(2): print('Kolmogorov test for the generator, sample size=', size, ' is ', FittingTest.Kolmogorov( distribution.getSample(size), distribution).getBinaryQualityMeasure()) size *= 10 # Define a point point = [1.0] * distribution.getDimension() print('Point= ', point) # Show PDF and CDF of point DDF = distribution.computeDDF(point) print('ddf =', DDF) LPDF = distribution.computeLogPDF(point) print('log pdf=', LPDF) PDF = distribution.computePDF(point) print('pdf =', PDF) CDF = distribution.computeCDF(point) print('cdf=', CDF) CCDF = distribution.computeComplementaryCDF(point) print('ccdf=', CCDF) Survival = distribution.computeSurvivalFunction(point) print('survival=', Survival) quantile = distribution.computeQuantile(0.95) print('quantile=', quantile) print('cdf(quantile)=', distribution.computeCDF(quantile)) quantileTail = distribution.computeQuantile(0.95, True) print('quantile (tail)=', quantileTail) CDFTail = distribution.computeComplementaryCDF(quantileTail) print('cdf (tail)=', CDFTail) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions threshold = Point() print("Minimum volume interval=", distribution.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = distribution.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", distribution.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", distribution.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", distribution.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) mean = distribution.getMean() print('mean=', mean) standardDeviation = distribution.getStandardDeviation() print('standard deviation=', standardDeviation) skewness = distribution.getSkewness() print('skewness=', skewness) kurtosis = distribution.getKurtosis() print('kurtosis=', kurtosis) covariance = distribution.getCovariance() print('covariance=', covariance) correlation = distribution.getCorrelation() print('correlation=', correlation) spearman = distribution.getSpearmanCorrelation() print('spearman=', spearman) kendall = distribution.getKendallTau() print('kendall=', kendall) for i in range(6): print('standard moment n=', i, ', value=', distribution.getStandardMoment(i)) print('Standard representative=', distribution.getStandardRepresentative()) openturns-1.9/python/test/t_MarginalTransformationEvaluation_std.expout000066400000000000000000000131661307543307100271060ustar00rootroot00000000000000transformation= class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation( [-0.686224,0.202089] )= class=Point name=Unnamed dimension=2 values=[0.25,0.25] transformation( [2.68622,0.684724] )= class=Point name=Unnamed dimension=2 values=[0.75,0.75] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,0.0857348,0,0,0,0,0,-0.326405,0.0968347,-1.43751] finite difference parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,0.0857348,0,0,0,0,0,-0.326405,0.0968347,-1.43751] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,-0.0857348,0,0,0,0,0,-0.269753,0.141962,-0.621984] finite difference parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[-0.127111,-0.0857348,0,0,0,0,0,-0.269753,0.141962,-0.621984] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation( [0.25,0.25] )= class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] transformation( [0.75,0.75] )= class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,-0.67449,0,0,0,0,0,0.227063,-0.0673629,1] finite difference parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,-0.67449,0,0,0,0,0,0.227063,-0.0673629,1] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,0.67449,0,0,0,0,0,0.433697,-0.228241,1] finite difference parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=5 columns=2 values=[1,0.67449,0,0,0,0,0,0.433697,-0.228241,1] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation( [-0.686224,0.202089] )= class=Point name=Unnamed dimension=2 values=[0.668651,1.98827] transformation( [2.68622,0.684724] )= class=Point name=Unnamed dimension=2 values=[1.65642,4.01173] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_MarginalTransformationEvaluation_std.py000077500000000000000000000204531307543307100262120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: coll1 = DistributionCollection(0) coll1.add(Normal(1.0, 2.5)) coll1.add(Gamma(1.5, 3.0, 0.0)) pointLow = Point(0) pointLow.add(coll1[0].computeQuantile(0.25)[0]) pointLow.add(coll1[1].computeQuantile(0.25)[0]) pointHigh = Point(0) pointHigh.add(coll1[0].computeQuantile(0.75)[0]) pointHigh.add(coll1[1].computeQuantile(0.75)[0]) coll2 = DistributionCollection(0) coll2.add(Gamma(2.5, 2.0, 0.0)) coll2.add(Normal(3.0, 1.5)) # First, check the old constructor transformation = MarginalTransformationEvaluation(coll1) print("transformation=", repr(transformation)) print("transformation(", pointLow, ")=", repr(transformation(pointLow))) print("transformation(", pointHigh, ")=", repr(transformation(pointHigh))) # Validation using finite difference eps = 1e-5 factor = 1.0 / (2.0 * eps) gradientLow = Matrix(5, 2) gradientHigh = Matrix(5, 2) # dT/dp0 coll = DistributionCollection(2) coll[0] = Normal(1.0 + eps, 2.5) coll[1] = coll1[1] left = MarginalTransformationEvaluation(coll) coll[0] = Normal(1.0 - eps, 2.5) right = MarginalTransformationEvaluation(coll) dTdp = (left(pointLow) - right(pointLow)) * factor gradientLow[0, 0] = dTdp[0] gradientLow[0, 1] = dTdp[1] dTdp = (left(pointHigh) - right(pointHigh)) * factor gradientHigh[0, 0] = dTdp[0] gradientHigh[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(2) coll[0] = Normal(1.0, 2.5 + eps) coll[1] = coll1[1] left = MarginalTransformationEvaluation(coll) coll[0] = Normal(1.0, 2.5 - eps) right = MarginalTransformationEvaluation(coll) dTdp = (left(pointLow) - right(pointLow)) * factor gradientLow[1, 0] = dTdp[0] gradientLow[1, 1] = dTdp[1] dTdp = (left(pointHigh) - right(pointHigh)) * factor gradientHigh[1, 0] = dTdp[0] gradientHigh[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5 + eps, 3.0, 0.0) left = MarginalTransformationEvaluation(coll) coll[1] = Gamma(1.5 - eps, 3.0, 0.0) right = MarginalTransformationEvaluation(coll) dTdp = (left(pointLow) - right(pointLow)) * factor gradientLow[2, 0] = dTdp[0] gradientLow[2, 1] = dTdp[1] dTdp = (left(pointHigh) - right(pointHigh)) * factor gradientHigh[2, 0] = dTdp[0] gradientHigh[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5, 3.0 + eps, 0.0) left = MarginalTransformationEvaluation(coll) coll[1] = Gamma(1.5, 3.0 - eps, 0.0) right = MarginalTransformationEvaluation(coll) dTdp = (left(pointLow) - right(pointLow)) * factor gradientLow[3, 0] = dTdp[0] gradientLow[3, 1] = dTdp[1] dTdp = (left(pointHigh) - right(pointHigh)) * factor gradientHigh[3, 0] = dTdp[0] gradientHigh[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5, 3.0, 0.0 + eps) left = MarginalTransformationEvaluation(coll) coll[1] = Gamma(1.5, 3.0, 0.0 - eps) right = MarginalTransformationEvaluation(coll) dTdp = (left(pointLow) - right(pointLow)) * factor gradientLow[4, 0] = dTdp[0] gradientLow[4, 1] = dTdp[1] dTdp = (left(pointHigh) - right(pointHigh)) * factor gradientHigh[4, 0] = dTdp[0] gradientHigh[4, 1] = dTdp[1] print("transformation parameters gradient=", repr( transformation.parameterGradient(pointLow))) print("finite difference parameters gradient=", repr(gradientLow)) print("transformation parameters gradient=", repr( transformation.parameterGradient(pointHigh))) print("finite difference parameters gradient=", repr(gradientHigh)) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Second, check the constructor for old inverse transformation transformation = MarginalTransformationEvaluation( coll1, MarginalTransformationEvaluation.TO) print("transformation=", repr(transformation)) uLow = Point(coll1.getSize(), 0.25) uHigh = Point(coll1.getSize(), 0.75) print("transformation(", uLow, ")=", repr(transformation(uLow))) print("transformation(", uHigh, ")=", repr(transformation(uHigh))) # Validation using finite difference # dT/dp0 coll = DistributionCollection(2) coll[0] = Normal(1.0 + eps, 2.5) coll[1] = coll1[1] left = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) coll[0] = Normal(1.0 - eps, 2.5) right = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) dTdp = (left(uLow) - right(uLow)) * factor gradientLow[0, 0] = dTdp[0] gradientLow[0, 1] = dTdp[1] dTdp = (left(uHigh) - right(uHigh)) * factor gradientHigh[0, 0] = dTdp[0] gradientHigh[0, 1] = dTdp[1] # dT/dp1 coll = DistributionCollection(2) coll[0] = Normal(1.0, 2.5 + eps) coll[1] = coll1[1] left = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) coll[0] = Normal(1.0, 2.5 - eps) right = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) dTdp = (left(uLow) - right(uLow)) * factor gradientLow[1, 0] = dTdp[0] gradientLow[1, 1] = dTdp[1] dTdp = (left(uHigh) - right(uHigh)) * factor gradientHigh[1, 0] = dTdp[0] gradientHigh[1, 1] = dTdp[1] # dT/dp2 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5 + eps, 3.0, 0.0) left = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) coll[1] = Gamma(1.5 - eps, 3.0, 0.0) right = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) dTdp = (left(uLow) - right(uLow)) * factor gradientLow[2, 0] = dTdp[0] gradientLow[2, 1] = dTdp[1] dTdp = (left(uHigh) - right(uHigh)) * factor gradientHigh[2, 0] = dTdp[0] gradientHigh[2, 1] = dTdp[1] # dT/dp3 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5, 3.0 + eps, 0.0) left = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) coll[1] = Gamma(1.5, 3.0 - eps, 0.0) right = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) dTdp = (left(uLow) - right(uLow)) * factor gradientLow[3, 0] = dTdp[0] gradientLow[3, 1] = dTdp[1] dTdp = (left(uHigh) - right(uHigh)) * factor gradientHigh[3, 0] = dTdp[0] gradientHigh[3, 1] = dTdp[1] # dT/dp4 coll = DistributionCollection(2) coll[0] = coll1[0] coll[1] = Gamma(1.5, 3.0, 0.0 + eps) left = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) coll[1] = Gamma(1.5, 3.0, 0.0 - eps) right = MarginalTransformationEvaluation( coll, MarginalTransformationEvaluation.TO) dTdp = (left(uLow) - right(uLow)) * factor gradientLow[4, 0] = dTdp[0] gradientLow[4, 1] = dTdp[1] dTdp = (left(uHigh) - right(uHigh)) * factor gradientHigh[4, 0] = dTdp[0] gradientHigh[4, 1] = dTdp[1] print("transformation parameters gradient=", repr( transformation.parameterGradient(uLow))) print("finite difference parameters gradient=", repr(gradientLow)) print("transformation parameters gradient=", repr( transformation.parameterGradient(uHigh))) print("finite difference parameters gradient=", repr(gradientHigh)) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Third, check the constructor for the new transformation transformation = MarginalTransformationEvaluation(coll1, coll2) print("transformation=", repr(transformation)) print("transformation(", pointLow, ")=", repr(transformation(pointLow))) print("transformation(", pointHigh, ")=", repr(transformation(pointHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_MarginalTransformationEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MarginalTransformationGradient_std.expout000066400000000000000000000142431307543307100265310ustar00rootroot00000000000000transformation= class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient( class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,1.43751] finite difference gradient( class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,1.43751] transformation.gradient( class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,0.621984] finite difference gradient( class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.127111,0,0,0.621984] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient( class=Point name=Unnamed dimension=2 values=[0.25,0.25] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,0.695649] finite difference gradient( class=Point name=Unnamed dimension=2 values=[0.25,0.25] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,0.695649] transformation.gradient( class=Point name=Unnamed dimension=2 values=[0.75,0.75] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,1.60776] finite difference gradient( class=Point name=Unnamed dimension=2 values=[0.75,0.75] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[7.86716,0,0,1.60776] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationGradient evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.gradient( class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.208078,0,0,6.78546] finite difference gradient( class=Point name=Unnamed dimension=2 values=[-0.686224,0.202089] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.208078,0,0,6.78546] transformation.gradient( class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.3848,0,0,2.93595] finite difference gradient( class=Point name=Unnamed dimension=2 values=[2.68622,0.684724] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.3848,0,0,2.93595] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_MarginalTransformationGradient_std.py000077500000000000000000000066731307543307100256500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: coll1 = DistributionCollection(0) coll1.add(Normal(1.0, 2.5)) coll1.add(Gamma(1.5, 3.0)) pointLow = Point(0) pointLow.add(coll1[0].computeQuantile(0.25)[0]) pointLow.add(coll1[1].computeQuantile(0.25)[0]) pointHigh = Point(0) pointHigh.add(coll1[0].computeQuantile(0.75)[0]) pointHigh.add(coll1[1].computeQuantile(0.75)[0]) coll2 = DistributionCollection(0) coll2.add(Gamma(2.5, 2.0)) coll2.add(Normal(3.0, 1.5)) # First, check the old constructor evaluation = MarginalTransformationEvaluation(coll1) transformation = MarginalTransformationGradient(evaluation) print("transformation=", repr(transformation)) print("transformation.gradient(", repr(pointLow), ")=", repr(transformation.gradient(pointLow))) print("finite difference gradient(", repr(pointLow), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(pointLow))) print("transformation.gradient(", repr(pointHigh), ")=", repr(transformation.gradient(pointHigh))) print("finite difference gradient(", repr(pointHigh), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(pointHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Second, check the constructor for old inverse transformation evaluation = MarginalTransformationEvaluation( coll1, MarginalTransformationEvaluation.TO) transformation = MarginalTransformationGradient(evaluation) print("transformation=", repr(transformation)) uLow = Point(coll1.getSize(), 0.25) uHigh = Point(coll1.getSize(), 0.75) print("transformation.gradient(", repr(uLow), ")=", repr(transformation.gradient(uLow))) print("finite difference gradient(", repr(uLow), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(uLow))) print("transformation.gradient(", repr(uHigh), ")=", repr(transformation.gradient(uHigh))) print("finite difference gradient(", repr(uHigh), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(uHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Third, check the constructor for the new transformation evaluation = MarginalTransformationEvaluation(coll1, coll2) transformation = MarginalTransformationGradient(evaluation) print("transformation=", repr(transformation)) print("transformation.gradient(", repr(pointLow), ")=", repr(transformation.gradient(pointLow))) print("finite difference gradient(", repr(pointLow), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(pointLow))) print("transformation.gradient(", repr(pointHigh), ")=", repr(transformation.gradient(pointHigh))) print("finite difference gradient(", repr(pointHigh), ")=", repr( CenteredFiniteDifferenceGradient(1.0e-5, evaluation).gradient(pointHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_MarginalTransformationGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MarginalTransformationHessian_std.expout000066400000000000000000000146161307543307100263720ustar00rootroot00000000000000transformation= class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian( class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.03429,0,0,0,0,0,0,-0.7559] finite difference hessian( class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.03429,0,0,0,0,0,0,-0.7559] transformation.hessian( class=Point name=Unnamed dimension=2 values=[2.686,0.6847] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.03429,0,0,0,0,0,0,-1.412] finite difference hessian( class=Point name=Unnamed dimension=2 values=[2.686,0.6847] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-0.03429,0,0,0,0,0,0,-1.412] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] output marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian( class=Point name=Unnamed dimension=2 values=[0.25,0.25] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-16.7,0,0,0,0,0,0,0.2545] finite difference hessian( class=Point name=Unnamed dimension=2 values=[0.25,0.25] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[-16.7,0,0,0,0,0,0,0.2545] transformation.hessian( class=Point name=Unnamed dimension=2 values=[0.75,0.75] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[16.7,0,0,0,0,0,0,5.867] finite difference hessian( class=Point name=Unnamed dimension=2 values=[0.75,0.75] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[16.7,0,0,0,0,0,0,5.867] input dimension= 2 output dimension= 2 transformation= class=MarginalTransformationHessian evaluation=class=MarginalTransformationEvaluation description=[x0,x1,y0,y1] input marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Gamma name=Gamma dimension=1 k=1.5 lambda=3 gamma=0] output marginals=[class=Gamma name=Gamma dimension=1 k=2.5 lambda=2 gamma=0,class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[3] sigma=class=Point name=Unnamed dimension=1 values=[1.5] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] simplifications=[0,0] expressions=[class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed,class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed] transformation.hessian( class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.0456,0,0,0,0,0,0,-24.27] finite difference hessian( class=Point name=Unnamed dimension=2 values=[-0.6862,0.2021] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.0456,0,0,0,0,0,0,-24.27] transformation.hessian( class=Point name=Unnamed dimension=2 values=[2.686,0.6847] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.05824,0,0,0,0,0,0,-2.788] finite difference hessian( class=Point name=Unnamed dimension=2 values=[2.686,0.6847] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[0.05824,0,0,0,0,0,0,-2.788] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_MarginalTransformationHessian_std.py000077500000000000000000000067041307543307100255000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: PlatformInfo.SetNumericalPrecision(4) coll1 = DistributionCollection(0) coll1.add(Normal(1.0, 2.5)) coll1.add(Gamma(1.5, 3.0)) pointLow = Point(0) pointLow.add(coll1[0].computeQuantile(0.25)[0]) pointLow.add(coll1[1].computeQuantile(0.25)[0]) pointHigh = Point(0) pointHigh.add(coll1[0].computeQuantile(0.75)[0]) pointHigh.add(coll1[1].computeQuantile(0.75)[0]) coll2 = DistributionCollection(0) coll2.add(Gamma(2.5, 2.0)) coll2.add(Normal(3.0, 1.5)) # First, check the old constructor evaluation = MarginalTransformationEvaluation(coll1) transformation = MarginalTransformationHessian(evaluation) print("transformation=", repr(transformation)) print("transformation.hessian(", repr(pointLow), ")=", repr(transformation.hessian(pointLow))) print("finite difference hessian(", repr(pointLow), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(pointLow))) print("transformation.hessian(", repr(pointHigh), ")=", repr(transformation.hessian(pointHigh))) print("finite difference hessian(", repr(pointHigh), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(pointHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Second, check the constructor for old inverse transformation evaluation = MarginalTransformationEvaluation( coll1, MarginalTransformationEvaluation.TO) transformation = MarginalTransformationHessian(evaluation) print("transformation=", repr(transformation)) uLow = Point(coll1.getSize(), 0.25) uHigh = Point(coll1.getSize(), 0.75) print("transformation.hessian(", repr(uLow), ")=", repr(transformation.hessian(uLow))) print("finite difference hessian(", repr(uLow), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(uLow))) print("transformation.hessian(", repr(uHigh), ")=", repr(transformation.hessian(uHigh))) print("finite difference hessian(", repr(uHigh), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(uHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) # Third, check the constructor for the new transformation evaluation = MarginalTransformationEvaluation(coll1, coll2) transformation = MarginalTransformationHessian(evaluation) print("transformation=", repr(transformation)) print("transformation.hessian(", repr(pointLow), ")=", repr(transformation.hessian(pointLow))) print("finite difference hessian(", repr(pointLow), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(pointLow))) print("transformation.hessian(", repr(pointHigh), ")=", repr(transformation.hessian(pointHigh))) print("finite difference hessian(", repr(pointHigh), ")=", repr( CenteredFiniteDifferenceHessian(1.0e-4, evaluation).hessian(pointHigh))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_MarginalTransformationHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Matrix_decomposition.expout000066400000000000000000000200121307543307100237070ustar00rootroot00000000000000matrix1 = class=Matrix implementation=class=MatrixImplementation name=matrix1 rows=3 columns=3 values=[1,2,3,1,4,9,1,8,27] svd (svd only)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] svd (svd + U, V full)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] svd (svd + U, V small)= class=Point name=Unnamed dimension=3 values=[30.0404,1.87808,0.212697] , U= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[-0.0459872,-0.301051,-0.952499,-0.548195,-0.789498,0.275999,-0.835085,0.534847,-0.128728] , v= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[-0.116696,-0.691768,-0.712629,-0.326982,-0.650768,0.685262,-0.937798,0.312984,-0.150254] matrix1 = class=Matrix implementation=class=MatrixImplementation name=matrix1 rows=3 columns=5 values=[1,2,3,1,4,9,1,8,27,1,16,81,1,32,243] svd (svd only)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] svd (svd + U, V full)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] svd (svd + U, V small)= class=Point name=Unnamed dimension=3 values=[260.274,7.40515,0.848945] , U= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[-0.00543408,-0.139192,-0.99025,-0.205213,-0.969034,0.137336,-0.978702,0.203958,-0.0232982] , v= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=5 values=[-0.0125044,-0.233793,-0.754678,-0.0364019,-0.384235,-0.438843,-0.107025,-0.573844,0.0281659,-0.316754,-0.619233,0.468196,-0.941664,0.291474,-0.133706] matrix1 = class=Matrix implementation=class=MatrixImplementation name=matrix1 rows=5 columns=3 values=[1,2,3,4,5,1,4,9,16,25,1,8,27,64,125] svd (svd only)= class=Point name=Unnamed dimension=3 values=[146.689,5.57511,0.603932] svd (svd + U, V full)= class=Point name=Unnamed dimension=3 values=[146.689,5.57511,0.603932] M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= False keep= False Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= [[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] Q*R= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= False keep= False Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= 3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] Q*R= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= False keep= False Q= 5x3 [[ -0.13484 -0.403961 0.61742 ] [ -0.26968 -0.546536 0.275741 ] [ -0.40452 -0.427724 -0.335685 ] [ -0.53936 -0.0475248 -0.527504 ] [ -0.6742 0.594061 0.389634 ]] R= [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ]] Q*R= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= False keep= True Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= [[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] Q*R= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M2= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= False keep= True Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= 3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] Q*R= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M2= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= False keep= True Q= 5x3 [[ -0.13484 -0.403961 0.61742 ] [ -0.26968 -0.546536 0.275741 ] [ -0.40452 -0.427724 -0.335685 ] [ -0.53936 -0.0475248 -0.527504 ] [ -0.6742 0.594061 0.389634 ]] R= [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ]] Q*R= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M2= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= True keep= False Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= [[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] Q*R= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= True keep= False Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= 3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] Q*R= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= True keep= False Q= 5x5 [[ -0.13484 -0.403961 0.61742 0.0097831 -0.66131 ] [ -0.26968 -0.546536 0.275741 0.35776 0.651572 ] [ -0.40452 -0.427724 -0.335685 -0.735087 0.0194756 ] [ -0.53936 -0.0475248 -0.527504 0.556207 -0.345262 ] [ -0.6742 0.594061 0.389634 -0.148974 0.136157 ]] R= 5x3 [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ] [ 0 0 0 ] [ 0 0 0 ]] Q*R= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] full= True keep= True Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= [[ -3.74166 -9.6214 -26.1916 ] [ 0 2.32993 10.3007 ] [ 0 0 -1.37649 ]] Q*R= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M2= [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ]] M= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] full= True keep= True Q= [[ -0.267261 -0.674453 -0.688247 ] [ -0.534522 -0.490511 0.688247 ] [ -0.801784 0.551825 -0.229416 ]] R= 3x5 [[ -3.74166 -9.6214 -26.1916 -73.7641 -212.205 ] [ 0 2.32993 10.3007 36.1752 117.723 ] [ 0 0 -1.37649 -8.25897 -34.4124 ]] Q*R= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M2= 3x5 [[ 1 1 1 1 1 ] [ 2 4 8 16 32 ] [ 3 9 27 81 243 ]] M= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] full= True keep= True Q= 5x5 [[ -0.13484 -0.403961 0.61742 0.0097831 -0.66131 ] [ -0.26968 -0.546536 0.275741 0.35776 0.651572 ] [ -0.40452 -0.427724 -0.335685 -0.735087 0.0194756 ] [ -0.53936 -0.0475248 -0.527504 0.556207 -0.345262 ] [ -0.6742 0.594061 0.389634 -0.148974 0.136157 ]] R= 5x3 [[ -7.4162 -30.339 -132.008 ] [ 0 7.6515 54.8912 ] [ 0 0 8.70382 ] [ 0 0 0 ] [ 0 0 0 ]] Q*R= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] M2= 5x3 [[ 1 1 1 ] [ 2 4 8 ] [ 3 9 27 ] [ 4 16 64 ] [ 5 25 125 ]] openturns-1.9/python/test/t_Matrix_decomposition.py000077500000000000000000000042351307543307100230270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() def quadM(m, n): res = Matrix(m, n) for i in range(m): for j in range(n): res[i, j] = (i + 1.0) ** (j + 1.0) return res def testQR(m, n, full, keep): matrix1 = quadM(m, n) print("M=", matrix1) Q, R = matrix1.computeQR(full, keep) print("full=", full, "keep=", keep) print('Q= ', Q) print('R=', R) print('Q*R=', Q * R) if keep: print('M2=', matrix1) try: # Square case matrix1 = quadM(3, 3) matrix1.setName("matrix1") print("matrix1 = ", repr(matrix1)) result1 = matrix1.computeSingularValues() print("svd (svd only)= ", repr(result1)) result1, u, v = matrix1.computeSVD(True) print("svd (svd + U, V full)= ", repr(result1)) result1, u, v = matrix1.computeSVD(False) print("svd (svd + U, V small)= ", repr(result1), ", U=", repr(u), ", v=", repr(v)) # Rectangular case, m < n matrix1 = quadM(3, 5) matrix1.setName("matrix1") print("matrix1 = ", repr(matrix1)) result1 = matrix1.computeSingularValues() print("svd (svd only)= ", repr(result1)) result1, u, v = matrix1.computeSVD(True) print("svd (svd + U, V full)= ", repr(result1)) result1, u, v = matrix1.computeSVD(False) print("svd (svd + U, V small)= ", repr(result1), ", U=", repr(u), ", v=", repr(v)) # Rectangular case, m > n matrix1 = quadM(5, 3) matrix1.setName("matrix1") print("matrix1 = ", repr(matrix1)) result1 = matrix1.computeSingularValues() print("svd (svd only)= ", repr(result1)) result1, u, v = matrix1.computeSVD(True) print("svd (svd + U, V full)= ", repr(result1)) # result1, u, v = matrix1.computeSVD(False) # print "svd (svd + U, V small)= ", repr(result1), ", U=", repr(u), ", # v=", repr(v) for iFull in range(2): for iKeep in range(2): testQR(3, 3, iFull == 1, iKeep == 1) testQR(3, 5, iFull == 1, iKeep == 1) testQR(5, 3, iFull == 1, iKeep == 1) except: import sys print("t_Matrix_decomposition.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Matrix_numpy.expout000066400000000000000000000171631307543307100222200ustar00rootroot00000000000000tuple (0.5, 1.5) => Point [0.5,1.5] Point [0.5,1.5] => tuple (0.5, 1.5) Point [0.5,1.5] + tuple (0.5, 1.5) => Point [1,3] list [0.5, 1.5] => Point [0.5,1.5] Point [0.5,1.5] => list [0.5, 1.5] Point [0.5,1.5] + list [0.5, 1.5] => Point [1,3] value 0.5 value 1.5 array [ 0.5 1.5] => Point [0.5,1.5] Point [0.5,1.5] => array [ 0.5 1.5] Point [0.5,1.5] + array [ 0.5 1.5] => Point [1,3] array [ 0.5 1.5] + Point [0.5,1.5] => array [ 1. 3.] Conversion from 2d-array => Point failed (as expected :) tuple ((1.0, 2.0), (3.0, 4.0)) => Sample 0 : [ 1 2 ] 1 : [ 3 4 ] tuple ([1.0, 2.0], [3.0, 4.0]) => Sample 0 : [ 1 2 ] 1 : [ 3 4 ] Sample 0 : [ 1 2 ] 1 : [ 3 4 ] => tuple (class=Point name=Unnamed dimension=2 values=[1,2], class=Point name=Unnamed dimension=2 values=[3,4]) list [[1.0, 2.0], [3.0, 4.0]] => Sample 0 : [ 1 2 ] 1 : [ 3 4 ] list [(1.0, 2.0), (3.0, 4.0)] => Sample 0 : [ 1 2 ] 1 : [ 3 4 ] Sample 0 : [ 1 2 ] 1 : [ 3 4 ] => list [class=Point name=Unnamed dimension=2 values=[1,2], class=Point name=Unnamed dimension=2 values=[3,4]] array [[ 1. 2.] [ 3. 4.]] => Sample 0 : [ 1 2 ] 1 : [ 3 4 ] Sample 0 : [ 1 2 ] 1 : [ 3 4 ] => array [[ 1. 2.] [ 3. 4.]] Point [-4.5] = F( tuple (1.0, 2.0, 3.0, 4.0) ) Point [-4.5] = F( list [1.0, 2.0, 3.0, 4.0] ) Point [-4.5] = F( array [ 1. 2. 3. 4.] ) Sample [ d ] 0 : [ -4.5 ] 1 : [ -17.15 ] = F( array [[ 1. 2. 3. 4.] [ 5. 6. 7. 8.]] ) Point [10] = PYNMF( tuple (1.0, 2.0, 3.0, 4.0) ) Point [10] = PYNMF( list [1.0, 2.0, 3.0, 4.0] ) Point [10] = PYNMF( array [ 1. 2. 3. 4.] ) Sample [ y0 ] 0 : [ 10 ] 1 : [ 26 ] = PYNMF( array [[ 1. 2. 3. 4.] [ 5. 6. 7. 8.]] ) Point [2] = PYNMF( array [ 1.] ) Sample [ y0 ] 0 : [ 2 ] 1 : [ 4 ] 2 : [ 6 ] = PYNMF( array [[ 1.] [ 2.] [ 3.]] ) tuple (1, 2) => Indices [1,2] Indices [1,2] => tuple (1, 2) list [3, 4, 5] => Indices [3,4,5] Indices [3,4,5] => list [3, 4, 5] [X0,X1,X2] [X0,X2] [X0,X2] tuple ('blob', 'zou') => Description [blob,zou] Description [blob,zou] => tuple ('blob', 'zou') list ['blob', 'zou'] => Description [blob,zou] Description [blob,zou] => list ['blob', 'zou'] array ['x0' 'x1' 'x2'] => Description [x0,x1,x2] Description [x0,x1,x2] => array ['x0' 'x1' 'x2'] [x0,x1,x2] [y0,y1,y2] [z0,z1,z2] tuple (1.0, 2.0, 3.0, 4.0) => Matrix [[ 1 3 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => SquareMatrix [[ 1 3 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => SymmetricMatrix [[ 1 2 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => Tensor sheet #0 [[ 1 3 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => SymmetricTensor sheet #0 [[ 1 2 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => CorrelationMatrix [[ 1 2 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => CovarianceMatrix [[ 1 2 ] [ 2 4 ]] tuple (1.0, 2.0, 3.0, 4.0) => ComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] tuple ((1+3j), (2-5j), (3+7j), (4-9j)) => ComplexMatrix [[ (1,3) (3,7) ] [ (2,-5) (4,-9) ]] tuple (1.0, 2.0, 3.0, 4.0) => SquareComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] tuple ((1+3j), (2-5j), (3+7j), (4-9j)) => SquareComplexMatrix [[ (1,3) (3,7) ] [ (2,-5) (4,-9) ]] list [1.0, 2.0, 3.0, 4.0] => Matrix [[ 1 3 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => SquareMatrix [[ 1 3 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => SymmetricMatrix [[ 1 2 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => Tensor sheet #0 [[ 1 3 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => SymmetricTensor sheet #0 [[ 1 2 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => CorrelationMatrix [[ 1 2 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => CovarianceMatrix [[ 1 2 ] [ 2 4 ]] list [1.0, 2.0, 3.0, 4.0] => ComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] list [(1+3j), (2-5j), (3+7j), (4-9j)] => ComplexMatrix [[ (1,3) (3,7) ] [ (2,-5) (4,-9) ]] list [1.0, 2.0, 3.0, 4.0] => SquareComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] list [(1+3j), (2-5j), (3+7j), (4-9j)] => SquareComplexMatrix [[ (1,3) (3,7) ] [ (2,-5) (4,-9) ]] array [ 1. 2. 3. 4.] => Matrix [[ 1 3 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => SquareMatrix [[ 1 3 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => SymmetricMatrix [[ 1 2 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => Tensor sheet #0 [[ 1 3 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => SymmetricTensor sheet #0 [[ 1 2 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => CorrelationMatrix [[ 1 2 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => CovarianceMatrix [[ 1 2 ] [ 2 4 ]] array [ 1. 2. 3. 4.] => ComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] array [ 1.+3.j 2.-5.j 3.-7.j 4.+9.j] => ComplexMatrix [[ (1,3) (3,-7) ] [ (2,-5) (4,9) ]] array [ 1. 2. 3. 4.] => SquareComplexMatrix [[ (1,0) (3,0) ] [ (2,0) (4,0) ]] array [ 1.+3.j 2.-5.j 3.-7.j 4.+9.j] => SquareComplexMatrix [[ (1,3) (3,-7) ] [ (2,-5) (4,9) ]] array [[ 1. 2.] [ 3. 4.] [ 5. 6.]] => Matrix [[ 1 2 ] [ 3 4 ] [ 5 6 ]] Matrix [[ 1 2 ] [ 3 4 ] [ 5 6 ]] => array [[ 1. 2.] [ 3. 4.] [ 5. 6.]] array [[ 1. 2.] [ 3. 4.]] => SquareMatrix [[ 1 2 ] [ 3 4 ]] SquareMatrix [[ 1 2 ] [ 3 4 ]] => array [[ 1. 2.] [ 3. 4.]] array [[ 1. 2.] [ 0. 4.]] => TriangularMatrix [[ 1 2 ] [ 0 4 ]] TriangularMatrix [[ 1 2 ] [ 0 4 ]] => array [[ 1. 2.] [ 0. 4.]] array [[ 1. 2.] [ 2. 4.]] => SymmetricMatrix [[ 1 2 ] [ 2 4 ]] SymmetricMatrix [[ 1 3 ] [ 3 4 ]] => array [[ 1. 3.] [ 3. 4.]] array [[[ 1. 2.] [ 3. 4.] [ 5. 6.]] [[ 7. 8.] [ 9. 10.] [ 11. 12.]] [[ 13. 14.] [ 15. 16.] [ 17. 18.]] [[ 19. 20.] [ 21. 22.] [ 23. 24.]]] => Tensor sheet #0 [[ 1 3 5 ] [ 7 9 11 ] [ 13 15 17 ] [ 19 21 23 ]] sheet #1 [[ 2 4 6 ] [ 8 10 12 ] [ 14 16 18 ] [ 20 22 24 ]] Tensor sheet #0 [[ 1 3 5 ] [ 7 9 11 ] [ 13 15 17 ] [ 19 21 23 ]] sheet #1 [[ 2 4 6 ] [ 8 10 12 ] [ 14 16 18 ] [ 20 22 24 ]] => array [[[ 1. 2.] [ 3. 4.] [ 5. 6.]] [[ 7. 8.] [ 9. 10.] [ 11. 12.]] [[ 13. 14.] [ 15. 16.] [ 17. 18.]] [[ 19. 20.] [ 21. 22.] [ 23. 24.]]] array [[[ 1. 2.] [ 3. 4.]] [[ 3. 4.] [ 7. 8.]]] => SymmetricTensor sheet #0 [[ 1 3 ] [ 3 7 ]] sheet #1 [[ 2 4 ] [ 4 8 ]] SymmetricTensor sheet #0 [[ 1 9 ] [ 9 7 ]] sheet #1 [[ 2 4 ] [ 4 8 ]] => array [[[ 1. 2.] [ 9. 4.]] [[ 9. 4.] [ 7. 8.]]] array [[ 2. 1.] [ 1. 2.]] => CovarianceMatrix [[ 2 1 ] [ 1 2 ]] CovarianceMatrix [[ 2 1 ] [ 1 2 ]] => array [[ 2. 1.] [ 1. 2.]] array [[ 1. 0.5] [ 0.5 1. ]] => CorrelationMatrix [[ 1 0.5 ] [ 0.5 1 ]] CorrelationMatrix [[ 1 0.5 ] [ 0.5 1 ]] => array [[ 1. 0.5] [ 0.5 1. ]] array [[ 1. +3.j 2. -5.j 3. +7.j] [ 4. -9.j 5.+11.j 6.-13.j]] => ComplexMatrix [[ (1,3) (2,-5) (3,7) ] [ (4,-9) (5,11) (6,-13) ]] ComplexMatrix [[ (1,3) (2,-5) (3,7) ] [ (4,-9) (5,11) (6,-13) ]] => array [[ 1. +3.j 2. -5.j 3. +7.j] [ 4. -9.j 5.+11.j 6.-13.j]] array [[ 1.+3.j 2.-5.j] [ 3.+7.j 4.-9.j]] => SquareComplexMatrix [[ (1,3) (2,-5) ] [ (3,7) (4,-9) ]] SquareComplexMatrix [[ (1,3) (2,-5) ] [ (3,7) (4,-9) ]] => array [[ 1.+3.j 2.-5.j] [ 3.+7.j 4.-9.j]] array [[ 1.+3.j 0.+0.j] [ 3.+7.j 4.-9.j]] => TriangularComplexMatrix [[ (1,3) (0,0) ] [ (3,7) (4,-9) ]] TriangularComplexMatrix [[ (1,3) (0,0) ] [ (3,7) (4,-9) ]] => array [[ 1.+3.j 0.+0.j] [ 3.+7.j 4.-9.j]] array [[ 1.+3.j 2.-5.j] [ 2.+5.j 4.-9.j]] => HermitianMatrix [[ (1,3) (2,-5) ] [ (2,5) (4,-9) ]] HermitianMatrix [[ (1,3) (3,5) ] [ (3,-5) (4,-9) ]] => array [[ 1.+3.j 3.+5.j] [ 3.-5.j 4.-9.j]] matrix [[ 1. 2.] [ 3. 4.] [ 5. 6.]] => Matrix [[ 1 2 ] [ 3 4 ] [ 5 6 ]] Matrix [[ 1 2 ] [ 3 4 ] [ 5 6 ]] => matrix [[ 1. 2.] [ 3. 4.] [ 5. 6.]] matrix [[ 1. +3.j 2. -5.j 3. +7.j] [ 4. -9.j 5.+11.j 6.-13.j]] => ComplexMatrix [[ (1,3) (2,-5) (3,7) ] [ (4,-9) (5,11) (6,-13) ]] ComplexMatrix [[ (1,3) (2,-5) (3,7) ] [ (4,-9) (5,11) (6,-13) ]] => matrix [[ 1. +3.j 2. -5.j 3. +7.j] [ 4. -9.j 5.+11.j 6.-13.j]] openturns-1.9/python/test/t_Matrix_numpy.py000077500000000000000000000256211307543307100213250ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import numpy as np TESTPREAMBLE() try: # Check tuple / Point conversion t0 = (0.5, 1.5) p0 = Point(t0) print("tuple", t0, "=> Point", p0) t1 = tuple(p0) print("Point", p0, "=> tuple", t1) print("Point", p0, "+ tuple", t0, "=> Point", p0 + t0) # Check list / Point conversion l0 = [0.5, 1.5] p0 = Point(l0) print("list", l0, "=> Point", p0) l1 = list(p0) print("Point", p0, "=> list", l1) print("Point", p0, "+ list", l0, "=> Point", p0 + l0) # Check sequence protocol for Point for x in p0: print("value", x) x0 = p0[0] p0[0] = x0 if x0 not in p0: raise ValueError("Point badly implements __contains__()") # Check array / Point conversion a0 = np.array((0.5, 1.5)) p0 = Point(a0) print("array", a0, "=> Point", p0) a1 = np.array(p0) print("Point", p0, "=> array", a1) print("Point", p0, "+ array", a0, "=> Point", p0 + a0) print("array", a0, "+ Point", p0, "=> array", a0 + p0) # See ticket #423 m0 = np.array([[1, 1], [2, 2], [3, 3]]) try: p0 = Point(m0) print(p0) except: print( 'Conversion from 2d-array => Point failed (as expected :)') # Check tuple / Sample conversion t0 = ((1., 2.), (3., 4.)) s0 = Sample(t0) print("tuple", t0, "=> Sample", s0) t0 = ([1., 2.], [3., 4.]) s0 = Sample(t0) print("tuple", t0, "=> Sample", s0) t1 = tuple(s0) print("Sample", s0, "=> tuple", t1) # Check list / Sample conversion l0 = [[1., 2.], [3., 4.]] s0 = Sample(l0) print("list", l0, "=> Sample", s0) l0 = [(1., 2.), (3., 4.)] s0 = Sample(l0) print("list", l0, "=> Sample", s0) l1 = list(s0) print("Sample", s0, "=> list", l1) # Check array / Sample conversion a0 = np.array(((1., 2.), (3., 4.))) s0 = Sample(a0) print("array", a0, "=> Sample", s0) a1 = np.array(s0) print("Sample", s0, "=> array", a1) # Check tuple / Function interoperability F = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) t0 = (1., 2., 3., 4.) print("Point", F(t0), "= F( tuple", t0, ")") # Check list / Function interoperability l0 = [1., 2., 3., 4.] print("Point", F(l0), "= F( list", l0, ")") # Check array / Function interoperability a0 = np.array((1., 2., 3., 4.)) print("Point", F(a0), "= F( array", a0, ")") a1 = np.array(((1., 2., 3., 4.), (5., 6., 7., 8.))) print("Sample", F(a1), "= F( array", a1, ")") # Check Python function / Function interoperability def aFunc(x): return [x[0] + x[1] + x[2] + x[3]] PYNMF = PythonFunction(4, 1, aFunc) print("Point", PYNMF(t0), "= PYNMF( tuple", t0, ")") print("Point", PYNMF(l0), "= PYNMF( list", l0, ")") print("Point", PYNMF(a0), "= PYNMF( array", a0, ")") print("Sample", PYNMF(a1), "= PYNMF( array", a1, ")") # Check 2-d array which nested dim is size=1 / Function # interoperability def aFunc2(x): return [2.0 * x[0]] PYNMF = PythonFunction(1, 1, aFunc2) a0 = np.array(([1.])) print("Point", PYNMF(a0), "= PYNMF( array", a0, ")") a1 = np.array(([1.], [2.], [3.])) print("Sample", PYNMF(a1), "= PYNMF( array", a1, ")") # Check tuple / Indices conversion t0 = (1, 2) i0 = Indices(t0) print("tuple", t0, "=> Indices", i0) t1 = tuple(i0) print("Indices", i0, "=> tuple", tuple([int(x) for x in t0])) # Check list / Indices conversion l0 = [3, 4, 5] i0 = Indices(l0) print("list", l0, "=> Indices", i0) l1 = list(i0) print("Indices", i0, "=> list", [int(x) for x in l1]) # check Indices typemap sample = Normal(3).getSample(10) print(sample.getDescription()) marginal = sample.getMarginal((0, 2)) print(marginal.getDescription()) marginal = sample.getMarginal([0, 2]) print(marginal.getDescription()) # Check tuple / Description conversion t0 = ('blob', 'zou') i0 = Description(t0) print("tuple", t0, "=> Description", i0) t1 = tuple(i0) print("Description", i0, "=> tuple", t1) # Check list / Description conversion l0 = ['blob', 'zou'] i0 = Description(l0) print("list", l0, "=> Description", i0) l1 = list(i0) print("Description", i0, "=> list", l1) # array / Description conversion a0 = np.array(('x0', 'x1', 'x2')) d0 = Description(a0) print("array", a0, "=> Description", d0) a1 = np.array(d0) print("Description", d0, "=> array", a1) # check Description typemap sample.setDescription(('x0', 'x1', 'x2')) print(sample.getDescription()) sample.setDescription(('y0', 'y1', 'y2')) print(sample.getDescription()) sample.setDescription(np.array(('z0', 'z1', 'z2'))) print(sample.getDescription()) # Check Matrix tuple constructor t0 = (1., 2., 3., 4.) m0 = Matrix(2, 2, t0) print("tuple", t0, "=> Matrix", m0) m0 = SquareMatrix(2, t0) print("tuple", t0, "=> SquareMatrix", m0) m0 = SymmetricMatrix(2, t0) print("tuple", t0, "=> SymmetricMatrix", m0) m0 = Tensor(2, 2, 1, t0) print("tuple", t0, "=> Tensor", m0) m0 = SymmetricTensor(2, 1, t0) print("tuple", t0, "=> SymmetricTensor", m0) m0 = CorrelationMatrix(2, t0) print("tuple", t0, "=> CorrelationMatrix", m0) m0 = CovarianceMatrix(2, t0) print("tuple", t0, "=> CovarianceMatrix", m0) t0c = (1. + 3.j, 2. - 5.j, 3. + 7.j, 4. - 9.j) m0 = ComplexMatrix(2, 2, t0) print("tuple", t0, "=> ComplexMatrix", m0) m0 = ComplexMatrix(2, 2, t0c) print("tuple", t0c, "=> ComplexMatrix", m0) m0 = SquareComplexMatrix(2, t0) print("tuple", t0, "=> SquareComplexMatrix", m0) m0 = SquareComplexMatrix(2, t0c) print("tuple", t0c, "=> SquareComplexMatrix", m0) # Check Matrix list constructor l0 = [1., 2., 3., 4.] m0 = Matrix(2, 2, l0) print("list", l0, "=> Matrix", m0) m0 = SquareMatrix(2, l0) print("list", l0, "=> SquareMatrix", m0) m0 = SymmetricMatrix(2, l0) print("list", l0, "=> SymmetricMatrix", m0) m0 = Tensor(2, 2, 1, l0) print("list", l0, "=> Tensor", m0) m0 = SymmetricTensor(2, 1, l0) print("list", l0, "=> SymmetricTensor", m0) m0 = CorrelationMatrix(2, l0) print("list", l0, "=> CorrelationMatrix", m0) m0 = CovarianceMatrix(2, l0) print("list", l0, "=> CovarianceMatrix", m0) l0c = [1. + 3.j, 2. - 5.j, 3. + 7.j, 4. - 9.j] m0 = ComplexMatrix(2, 2, l0) print("list", l0, "=> ComplexMatrix", m0) m0 = ComplexMatrix(2, 2, l0c) print("list", l0c, "=> ComplexMatrix", m0) m0 = SquareComplexMatrix(2, l0) print("list", l0, "=> SquareComplexMatrix", m0) m0 = SquareComplexMatrix(2, l0c) print("list", l0c, "=> SquareComplexMatrix", m0) # Check Matrix 1-d array constructor a0 = np.array((1., 2., 3., 4.)) m0 = Matrix(2, 2, a0) print("array", a0, "=> Matrix", m0) m0 = SquareMatrix(2, a0) print("array", a0, "=> SquareMatrix", m0) m0 = SymmetricMatrix(2, a0) print("array", a0, "=> SymmetricMatrix", m0) m0 = Tensor(2, 2, 1, a0) print("array", a0, "=> Tensor", m0) m0 = SymmetricTensor(2, 1, a0) print("array", a0, "=> SymmetricTensor", m0) m0 = CorrelationMatrix(2, a0) print("array", a0, "=> CorrelationMatrix", m0) m0 = CovarianceMatrix(2, a0) print("array", a0, "=> CovarianceMatrix", m0) a0c = np.array((1. + 3j, 2. - 5j, 3. - 7j, 4. + 9j)) m0 = ComplexMatrix(2, 2, a0) print("array", a0, "=> ComplexMatrix", m0) m0 = ComplexMatrix(2, 2, a0c) print("array", a0c, "=> ComplexMatrix", m0) m0 = SquareComplexMatrix(2, a0) print("array", a0, "=> SquareComplexMatrix", m0) m0 = SquareComplexMatrix(2, a0c) print("array", a0c, "=> SquareComplexMatrix", m0) # check array / Matrix conversion a0 = np.array(((1., 2.), (3., 4.), (5., 6.))) m0 = Matrix(a0) print("array", a0, "=> Matrix", m0) a1 = np.array(m0) print("Matrix", m0, "=> array", a1) a0 = np.array(((1., 2.), (3., 4.))) m0 = SquareMatrix(a0) print("array", a0, "=> SquareMatrix", m0) a1 = np.array(m0) print("SquareMatrix", m0, "=> array", a1) a0 = np.array(((1., 2.), (0., 4.))) m0 = TriangularMatrix(a0) print("array", a0, "=> TriangularMatrix", m0) a1 = np.array(m0) print("TriangularMatrix", m0, "=> array", a1) a0 = np.array(((1., 2.), (2., 4.))) m0 = SymmetricMatrix(a0) print("array", a0, "=> SymmetricMatrix", m0) m0[1, 0] = 3.0 a1 = np.array(m0) print("SymmetricMatrix", m0, "=> array", a1) a0 = np.array( (((1., 2.), (3., 4.), (5., 6.)), ((7., 8.), (9., 10.), (11., 12.)), ((13., 14.), (15., 16.), (17., 18.)), ((19., 20.), (21., 22.), (23., 24.)))) m0 = Tensor(a0) print("array", a0, "=> Tensor", m0) a1 = np.array(m0) print("Tensor", m0, "=> array", a1) a0 = np.array((((1., 2.), (3., 4.)), ((3., 4.), (7., 8.)))) m0 = SymmetricTensor(a0) print("array", a0, "=> SymmetricTensor", m0) m0[1, 0, 0] = 9.0 a1 = np.array(m0) print("SymmetricTensor", m0, "=> array", a1) a0 = np.array(((2., 1.), (1., 2.))) m0 = CovarianceMatrix(a0) print("array", a0, "=> CovarianceMatrix", m0) a1 = np.array(m0) print("CovarianceMatrix", m0, "=> array", a1) a0 = np.array(((1., 0.5), (0.5, 1.))) m0 = CorrelationMatrix(a0) print("array", a0, "=> CorrelationMatrix", m0) a1 = np.array(m0) print("CorrelationMatrix", m0, "=> array", a1) a0 = np.array(((1. + 3j, 2. - 5j, 3. + 7j), (4. - 9j, 5. + 11j, 6. - 13j))) m0 = ComplexMatrix(a0) print("array", a0, "=> ComplexMatrix", m0) a1 = np.array(m0) print("ComplexMatrix", m0, "=> array", a1) a0 = np.array(((1. + 3j, 2. - 5j), (3. + 7j, 4. - 9j))) m0 = SquareComplexMatrix(a0) print("array", a0, "=> SquareComplexMatrix", m0) a1 = np.array(m0) print("SquareComplexMatrix", m0, "=> array", a1) a0 = np.array(((1. + 3j, 0.), (3. + 7j, 4. - 9j))) m0 = TriangularComplexMatrix(a0) print("array", a0, "=> TriangularComplexMatrix", m0) a1 = np.array(m0) print("TriangularComplexMatrix", m0, "=> array", a1) a0 = np.array(((1. + 3j, 2. - 5j), (2. + 5j, 4. - 9j))) m0 = HermitianMatrix(a0) print("array", a0, "=> HermitianMatrix", m0) m0[1, 0] = 3.0 - 5j a1 = np.array(m0) print("HermitianMatrix", m0, "=> array", a1) # check np.matrix / Matrix conversion a0 = np.matrix(((1., 2.), (3., 4.), (5., 6.))) m0 = Matrix(a0) print("matrix", a0, "=> Matrix", m0) a1 = np.array(m0) print("Matrix", m0, "=> matrix", a1) a0 = np.matrix( ((1. + 3j, 2. - 5j, 3. + 7j), (4. - 9j, 5. + 11j, 6. - 13j))) m0 = ComplexMatrix(a0) print("matrix", a0, "=> ComplexMatrix", m0) a1 = np.array(m0) print("ComplexMatrix", m0, "=> matrix", a1) except: import sys import traceback traceback.print_exc(file=sys.stdout) openturns-1.9/python/test/t_Matrix_operators.expout000066400000000000000000000326711307543307100230670ustar00rootroot00000000000000a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] no pow for Matrix a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for Matrix ComplexMatrix no add for Matrix ComplexMatrix no sub for ComplexMatrix no mul for Matrix HermitianMatrix no add for Matrix HermitianMatrix no sub for HermitianMatrix no mul for Matrix TriangularComplexMatrix no add for Matrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for Matrix SquareComplexMatrix no add for Matrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] a**3= [[ 1 0 ] [ 0 0.125 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] no add for SquareMatrix Matrix no sub for Matrix a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for SquareMatrix ComplexMatrix no add for SquareMatrix ComplexMatrix no sub for ComplexMatrix no mul for SquareMatrix HermitianMatrix no add for SquareMatrix HermitianMatrix no sub for HermitianMatrix no mul for SquareMatrix TriangularComplexMatrix no add for SquareMatrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for SquareMatrix SquareComplexMatrix no add for SquareMatrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] a**3= [[ 1 0 ] [ 0 0.125 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] no add for TriangularMatrix Matrix no sub for Matrix a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for TriangularMatrix ComplexMatrix no add for TriangularMatrix ComplexMatrix no sub for ComplexMatrix no mul for TriangularMatrix HermitianMatrix no add for TriangularMatrix HermitianMatrix no sub for HermitianMatrix no mul for TriangularMatrix TriangularComplexMatrix no add for TriangularMatrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for TriangularMatrix SquareComplexMatrix no add for TriangularMatrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] a**3= [[ 1 0 ] [ 0 0.125 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for SymmetricMatrix ComplexMatrix no add for SymmetricMatrix ComplexMatrix no sub for ComplexMatrix no mul for SymmetricMatrix HermitianMatrix no add for SymmetricMatrix HermitianMatrix no sub for HermitianMatrix no mul for SymmetricMatrix TriangularComplexMatrix no add for SymmetricMatrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for SymmetricMatrix SquareComplexMatrix no add for SymmetricMatrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] a**3= [[ 1 0 ] [ 0 0.125 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for CovarianceMatrix ComplexMatrix no add for CovarianceMatrix ComplexMatrix no sub for ComplexMatrix no mul for CovarianceMatrix HermitianMatrix no add for CovarianceMatrix HermitianMatrix no sub for HermitianMatrix no mul for CovarianceMatrix TriangularComplexMatrix no add for CovarianceMatrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for CovarianceMatrix SquareComplexMatrix no add for CovarianceMatrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ 1 0 ] [ 0 0.5 ]] a*s= [[ 5 0 ] [ 0 2.5 ]] s*a= [[ 5 0 ] [ 0 2.5 ]] a/s= [[ 0.2 0 ] [ 0 0.1 ]] a*x= [6,3.5] a**3= [[ 1 0 ] [ 0 0.125 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] a*b= [[ 1 0 ] [ 0 0.25 ]] a+b= [[ 2 0 ] [ 0 1 ]] a-b= [[ 0 0 ] [ 0 0 ]] no mul for CorrelationMatrix ComplexMatrix no add for CorrelationMatrix ComplexMatrix no sub for ComplexMatrix no mul for CorrelationMatrix HermitianMatrix no add for CorrelationMatrix HermitianMatrix no sub for HermitianMatrix no mul for CorrelationMatrix TriangularComplexMatrix no add for CorrelationMatrix TriangularComplexMatrix no sub for TriangularComplexMatrix no mul for CorrelationMatrix SquareComplexMatrix no add for CorrelationMatrix SquareComplexMatrix no sub for SquareComplexMatrix a= [[ (1,0) (0,0) ] [ (0,0) (0.5,0) ]] a*s= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] s*a= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] a/s= [[ (0.2,0) (0,0) ] [ (0,0) (0.1,0) ]] a*x= [(6,0),(3.5,0)] no pow for ComplexMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,-0) (0,-0) ] [ (0,-0) (0.25,-0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a= [[ (1,0) (0,0) ] [ (0,0) (0.5,0) ]] a*s= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] s*a= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] a/s= [[ (0.2,0) (0,0) ] [ (0,0) (0.1,0) ]] a*x= [(6,0),(3.5,0)] a**3= [[ (1,0) (0,0) ] [ (0,0) (0.125,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix Matrix no sub for Matrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix SquareMatrix no sub for SquareMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix TriangularMatrix no sub for TriangularMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix SymmetricMatrix no sub for SymmetricMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix CovarianceMatrix no sub for CovarianceMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix CorrelationMatrix no sub for CorrelationMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for HermitianMatrix ComplexMatrix no sub for ComplexMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a= [[ (1,0) (0,0) ] [ (0,0) (0.5,0) ]] a*s= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] s*a= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] a/s= [[ (0.2,0) (0,0) ] [ (0,0) (0.1,0) ]] a*x= [(6,0),(3.5,0)] a**3= [[ (1,0) (0,0) ] [ (0,0) (0.125,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix Matrix no sub for Matrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix SquareMatrix no sub for SquareMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix TriangularMatrix no sub for TriangularMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix SymmetricMatrix no sub for SymmetricMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix CovarianceMatrix no sub for CovarianceMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix CorrelationMatrix no sub for CorrelationMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for TriangularComplexMatrix ComplexMatrix no sub for ComplexMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a= [[ (1,0) (0,0) ] [ (0,0) (0.5,0) ]] a*s= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] s*a= [[ (5,0) (0,0) ] [ (0,0) (2.5,0) ]] a/s= [[ (0.2,0) (0,0) ] [ (0,0) (0.1,0) ]] a*x= [(6,0),(3.5,0)] a**3= [[ (1,0) (0,0) ] [ (0,0) (0.125,0) ]] no mul for SquareComplexMatrix Matrix no add for SquareComplexMatrix Matrix no sub for Matrix no mul for SquareComplexMatrix SquareMatrix no add for SquareComplexMatrix SquareMatrix no sub for SquareMatrix no mul for SquareComplexMatrix TriangularMatrix no add for SquareComplexMatrix TriangularMatrix no sub for TriangularMatrix no mul for SquareComplexMatrix SymmetricMatrix no add for SquareComplexMatrix SymmetricMatrix no sub for SymmetricMatrix no mul for SquareComplexMatrix CovarianceMatrix no add for SquareComplexMatrix CovarianceMatrix no sub for CovarianceMatrix no mul for SquareComplexMatrix CorrelationMatrix no add for SquareComplexMatrix CorrelationMatrix no sub for CorrelationMatrix a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] no add for SquareComplexMatrix ComplexMatrix no sub for ComplexMatrix a*b= [[ (1,-0) (0,-0) ] [ (0,-0) (0.25,-0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] a*b= [[ (1,0) (0,0) ] [ (0,0) (0.25,0) ]] a+b= [[ (2,0) (0,0) ] [ (0,0) (1,0) ]] a-b= [[ (0,0) (0,0) ] [ (0,0) (0,0) ]] sm * w= [2.6,6.3] sq * w= [2.6,6.3] sm * w= [(2,-0.6),(6,0.3)] sq * w= [(2,-0.6),(6,0.3)] openturns-1.9/python/test/t_Matrix_operators.py000077500000000000000000000040361307543307100221700ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ref_values = [[1.0, 0.0], [0.0, 0.5]] mats = [ot.Matrix(ref_values), ot.SquareMatrix(ref_values), ot.TriangularMatrix(ref_values), ot.SymmetricMatrix(ref_values), ot.CovarianceMatrix(ref_values), ot.CorrelationMatrix(ref_values)] mats.extend([ ot.ComplexMatrix(ref_values), ot.HermitianMatrix(ref_values), ot.TriangularComplexMatrix(ref_values), ot.SquareComplexMatrix(ref_values)]) for a in mats: # try conversion ref = ot.Matrix([[1.0, 0.0], [0.0, 0.5]]) iname = a.__class__.__name__ print('a=', a) # try scalar mul try: s = 5. ats = a * s print('a*s=', ats) sta = s * a print('s*a=', sta) except: print('no scalar mul for', iname) # try scalar div try: s = 5. ads = a / s print('a/s=', ads) except: print('no scalar div for', iname) # try vec mul try: x = ot.Point(range(6, 6 + a.getNbColumns())) ax = a * x print('a*x=', ax) except: print('no vec mul for', iname) try: a3 = a ** 3 print('a**3=', a3) except: print('no pow for', iname) for b in mats: jname = b.__class__.__name__ try: ab = a * b print('a*b=', ab) except: print('no mul for', iname, jname) try: apb = a + b print('a+b=', apb) except: print('no add for', iname, jname) try: amb = a - b print('a-b=', amb) except: print('no sub for', jname) sm = ot.SymmetricMatrix(2) sm[0, 0] = 2.0 sm[1, 1] = 3.0 sm[0, 1] = 0.3 w = ot.Point([1.0, 2.0]) sq = ot.SquareMatrix(sm) print('sm * w=', sm * w) print('sq * w=', sq * w) sm = ot.HermitianMatrix(2) sm[0, 0] = 2.0 sm[1, 1] = 3.0 sm[1, 0] = 0.3j w = ot.Point([1.0, 2.0]) sq = ot.SquareComplexMatrix(sm) print('sm * w=', sm * w) print('sq * w=', sq * w) openturns-1.9/python/test/t_Matrix_slice.expout000066400000000000000000000267071307543307100221530ustar00rootroot00000000000000matrix= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] rslice[:]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] rslice[2:4]= 2x5 [[ 102 202 302 402 502 ] [ 103 203 303 403 503 ]] rslice[1:8:2]= 4x5 [[ 101 201 301 401 501 ] [ 103 203 303 403 503 ] [ 105 205 305 405 505 ] [ 107 207 307 407 507 ]] rslice[:,:]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] rslice[2:4,2:4]= [[ 302 402 ] [ 303 403 ]] rslice[1:8:2,1:5:3]= [[ 201 501 ] [ 203 503 ] [ 205 505 ] [ 207 507 ]] rslice[:,3]= 10x1 [[ 400 ] [ 401 ] [ 402 ] [ 403 ] [ 404 ] [ 405 ] [ 406 ] [ 407 ] [ 408 ] [ 409 ]] rslice[2:7:2,3]= [[ 402 ] [ 404 ] [ 406 ]] rslice[3,:]= 1x5 [[ 103 203 303 403 503 ]] rslice[3,1:4:2]= [[ 203 403 ]] rslice[3,4]= 503.0 wrslice[:]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[2:4]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[1:8:2]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wrslice[:,:]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[2:4,2:4]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[1:8:2,1:5:3]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[:,3]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[2:7:2,3]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[3,:]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[3,1:4:2]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] wslice[3,4]= 10x5 [[ 100 200 300 400 500 ] [ 101 201 301 401 501 ] [ 102 202 302 402 502 ] [ 103 203 303 403 503 ] [ 104 204 304 404 504 ] [ 105 205 305 405 505 ] [ 106 206 306 406 506 ] [ 107 207 307 407 507 ] [ 108 208 308 408 508 ] [ 109 209 309 409 509 ]] matrix= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] rslice[:]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] rslice[2:4]= 2x5 [[ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ]] rslice[1:8:2]= 4x5 [[ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ]] rslice[:,:]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] rslice[2:4,2:4]= [[ (302,0) (402,0) ] [ (303,0) (403,0) ]] rslice[1:8:2,1:5:3]= [[ (201,0) (501,0) ] [ (203,0) (503,0) ] [ (205,0) (505,0) ] [ (207,0) (507,0) ]] rslice[:,3]= 10x1 [[ (400,0) ] [ (401,0) ] [ (402,0) ] [ (403,0) ] [ (404,0) ] [ (405,0) ] [ (406,0) ] [ (407,0) ] [ (408,0) ] [ (409,0) ]] rslice[2:7:2,3]= [[ (402,0) ] [ (404,0) ] [ (406,0) ]] rslice[3,:]= 1x5 [[ (103,0) (203,0) (303,0) (403,0) (503,0) ]] rslice[3,1:4:2]= [[ (203,0) (403,0) ]] rslice[3,4]= (503+0j) wrslice[:]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[2:4]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[1:8:2]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wrslice[:,:]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[2:4,2:4]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[1:8:2,1:5:3]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[:,3]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[2:7:2,3]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[3,:]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[3,1:4:2]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] wslice[3,4]= 10x5 [[ (100,0) (200,0) (300,0) (400,0) (500,0) ] [ (101,0) (201,0) (301,0) (401,0) (501,0) ] [ (102,0) (202,0) (302,0) (402,0) (502,0) ] [ (103,0) (203,0) (303,0) (403,0) (503,0) ] [ (104,0) (204,0) (304,0) (404,0) (504,0) ] [ (105,0) (205,0) (305,0) (405,0) (505,0) ] [ (106,0) (206,0) (306,0) (406,0) (506,0) ] [ (107,0) (207,0) (307,0) (407,0) (507,0) ] [ (108,0) (208,0) (308,0) (408,0) (508,0) ] [ (109,0) (209,0) (309,0) (409,0) (509,0) ]] openturns-1.9/python/test/t_Matrix_slice.py000077500000000000000000000043631307543307100212540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * # We create an empty Matrix N = 10 d = 5 matrices = [Matrix(N, d), ComplexMatrix(N, d)] for matrix in matrices: # We populate the empty sample with numerous data for i in range(matrix.getNbRows()): for j in range(matrix.getNbColumns()): matrix[i, j] = 100. * (j + 1) + i print('matrix=', str(matrix)) # We try to slice the sample # Reading slicing # case #0 [slice] print('rslice[:]=', matrix[:]) print('rslice[2:4]=', matrix[2:4]) print('rslice[1:8:2]=', matrix[1:8:2]) # case #1 [slice/slice] print('rslice[:,:]=', matrix[:, :]) print('rslice[2:4,2:4]=', matrix[2:4, 2:4]) print('rslice[1:8:2,1:5:3]=', matrix[1:8:2, 1:5:3]) # case #2 [slice/index] print('rslice[:,3]=', matrix[:, 3]) print('rslice[2:7:2,3]=', matrix[2:7:2, 3]) # case #3 [index/slice] print('rslice[3,:]=', matrix[3, :]) print('rslice[3,1:4:2]=', matrix[3, 1:4:2]) # case #4 [index/index] print('rslice[3,4]=', matrix[3, 4]) # Writing slice # case #0 [slice] matrix2 = matrix matrix2[:] = matrix[:] print("wrslice[:]=", matrix2) matrix2 = matrix matrix2[2:4] = matrix[2:4] print('wslice[2:4]=', matrix2) matrix2 = matrix matrix2[1:8:2] = matrix[1:8:2] print('wslice[1:8:2]=', matrix2) # case #1 [slice/slice] matrix2 = matrix matrix2[:, :] = matrix[:, :] print("wrslice[:,:]=", matrix2) matrix2 = matrix matrix2[2:4, 2:4] = matrix[2:4, 2:4] print('wslice[2:4,2:4]=', matrix2) matrix2 = matrix matrix2[1:8:2, 1:5:3] = matrix[1:8:2, 1:5:3] print('wslice[1:8:2,1:5:3]=', matrix2) # case #2 [slice/index] matrix2 = matrix matrix2[:, 3] = matrix[:, 3] print('wslice[:,3]=', matrix2) matrix2 = matrix matrix2[2:7:2, 3] = matrix[2:7:2, 3] print('wslice[2:7:2,3]=', matrix2) # case #3 [index/slice] matrix2 = matrix matrix2[3, :] = matrix[3, :] print('wslice[3,:]=', matrix2) matrix2 = matrix matrix2[3, 1:4:2] = matrix[3, 1:4:2] print('wslice[3,1:4:2]=', matrix2) # case #4 [index/index] matrix2 = matrix matrix2[3, 4] = matrix[3, 4] print('wslice[3,4]=', matrix2) openturns-1.9/python/test/t_Matrix_solve.expout000066400000000000000000000037051307543307100221750ustar00rootroot00000000000000matrix1=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,5,12] pt1=class=Point name=Unnamed dimension=2 values=[5,0] result1=class=Point name=Unnamed dimension=2 values=[30,-5] matrix2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[1,2,5,12,3,4] pt2=class=Point name=Unnamed dimension=2 values=[5,0] result2=class=Point name=Unnamed dimension=3 values=[0.30303,-1.28788,3.71212] matrix3=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,4,5,12,3] pt3=class=Point name=Unnamed dimension=3 values=[5,0,1] result3=class=Point name=Unnamed dimension=2 values=[0.22071,0.106466] b1=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[5,1,10,2,15,3,20,4] result4=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[27.5,-4.5,55,-9,82.5,-13.5,110,-18] result4=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[27.5,-4.5,55,-9,82.5,-13.5,110,-18] result5=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0.287879,-1.09848,3.40152,0.575758,-2.19697,6.80303,0.863636,-3.29545,10.2045,1.15152,-4.39394,13.6061] result5=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[0.287879,-1.09848,3.40152,0.575758,-2.19697,6.80303,0.863636,-3.29545,10.2045,1.15152,-4.39394,13.6061] b2=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[5,1,-2,10,2,-4,15,3,-6,20,4,-8] result6=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[-0.704424,0.336412,-1.40885,0.672825,-2.11327,1.00924,-2.8177,1.34565] result6 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=4 values=[-0.704424,0.336412,-1.40885,0.672825,-2.11327,1.00924,-2.8177,1.34565] openturns-1.9/python/test/t_Matrix_solve.py000077500000000000000000000047411307543307100213050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # First : an n by n case matrix1 = Matrix(2, 2) matrix1[0, 0] = 1.0 matrix1[1, 0] = 2.0 matrix1[0, 1] = 5.0 matrix1[1, 1] = 12.0 print("matrix1=" + repr(matrix1)) pt1 = Point() pt1.add(5.0) pt1.add(0.0) print("pt1=" + repr(pt1)) result1 = Point() result1 = matrix1.solveLinearSystem(pt1) print("result1=" + repr(result1)) # Second : an n by p case, n < p matrix2 = Matrix(2, 3) matrix2[0, 0] = 1.0 matrix2[1, 0] = 2.0 matrix2[0, 1] = 5.0 matrix2[1, 1] = 12.0 matrix2[0, 2] = 3.0 matrix2[1, 2] = 4.0 print("matrix2=" + repr(matrix2)) pt2 = Point() pt2.add(5.0) pt2.add(0.0) print("pt2=" + repr(pt2)) result2 = Point() result2 = matrix2.solveLinearSystem(pt2) print("result2=" + repr(result2)) # Third : an n by p case, n > p matrix3 = Matrix(3, 2) matrix3[0, 0] = 1.0 matrix3[1, 0] = 2.0 matrix3[2, 0] = 4.0 matrix3[0, 1] = 5.0 matrix3[1, 1] = 12.0 matrix3[2, 1] = 3.0 print("matrix3=" + repr(matrix3)) pt3 = Point() pt3.add(5.0) pt3.add(0.0) pt3.add(1.0) print("pt3=" + repr(pt3)) result3 = Point() result3 = matrix3.solveLinearSystem(pt3, True) print("result3=" + repr(result3)) b1 = Matrix(2, 4) b1[0, 0] = 5.0 b1[1, 0] = 1.0 b1[0, 1] = 10.0 b1[1, 1] = 2.0 b1[0, 2] = 15.0 b1[1, 2] = 3.0 b1[0, 3] = 20.0 b1[1, 3] = 4.0 print("b1=" + repr(b1)) result4 = matrix1.solveLinearSystem(b1, True) print("result4=" + repr(result4)) result4 = matrix1.solveLinearSystem(b1, False) print("result4=" + repr(result4)) result5 = matrix2.solveLinearSystem(b1, True) print("result5=" + repr(result5)) result5 = matrix2.solveLinearSystem(b1, False) print("result5=" + repr(result5)) b2 = Matrix(3, 4) b2[0, 0] = 5.0 b2[1, 0] = 1.0 b2[2, 0] = -2.0 b2[0, 1] = 10.0 b2[1, 1] = 2.0 b2[2, 1] = -4.0 b2[0, 2] = 15.0 b2[1, 2] = 3.0 b2[2, 2] = -6.0 b2[0, 3] = 20.0 b2[1, 3] = 4.0 b2[2, 3] = -8.0 print("b2=" + repr(b2)) result6 = matrix3.solveLinearSystem(b2, True) print("result6=" + repr(result6)) result6 = matrix3.solveLinearSystem(b2, False) print("result6 = " + repr(result6)) except: import sys print("t_MatrixSolveLinearSystem_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Matrix_std.expout000066400000000000000000000060651307543307100216410ustar00rootroot00000000000000test number zero : default constructor and string converter matrix0 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter matrix1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number two : copy constructor and string converter matrix2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number three : get dimensions methods matrix1's nbRows = 2 matrix1's nbColumns = 2 test number four : constructor with collection method elementsValues = [1,2,3,4,5,6] matrix0bis = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number five : assignment method test number six : transposition method matrix1 transposed = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] test number seven : addition method sum1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum1 equals sum2 = True test number eight : substraction method diff = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,-1,1,0] test number nine : matrix multiplication method prod = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,14,14,20] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,10] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod3 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod1 equals scalprod3 = True scaldiv1 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv1 equals scaldiv2 = True test number twelve : isEmpty method matrix1 is empty = False matrix5 is empty = True matrix6 is empty = True matrix0 is empty = True test number fourteen : multiplication with a numerical point method pt_test = class=Point name=Unnamed dimension=2 values=[1,2] A = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,-0.866025,0.866025,0.5] B = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,0.866025,-0.866025,0.5] id = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] ptResult2 = class=Point name=Unnamed dimension=2 values=[1,2] openturns-1.9/python/test/t_Matrix_std.py000077500000000000000000000125171307543307100207470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor matrix0 = Matrix() # String converter print("matrix0 = ", repr(matrix0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size matrix1 = Matrix(2, 2) # Check operator() methods matrix1[0, 0] = 1. matrix1[1, 0] = 2. matrix1[0, 1] = 3. matrix1[1, 1] = 4. # String converter print("matrix1 = ", repr(matrix1)) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER print("test number two : copy constructor and string converter") # Copy constructor matrix2 = Matrix(matrix1) # String converter print("matrix2 = ", repr(matrix2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS print("test number three : get dimensions methods") # Get dimension methods print("matrix1's nbRows = ", matrix1.getNbRows()) print("matrix1's nbColumns = ", matrix1.getNbColumns()) # TEST NUMBER FOUR : CONSTRUCTOR WITH COLLECTION print("test number four : constructor with collection method") # Create the collection of values elementsValues = ScalarCollection() elementsValues.add(1.) elementsValues.add(2.) elementsValues.add(3.) elementsValues.add(4.) elementsValues.add(5.) elementsValues.add(6.) # Check the content of the collection print("elementsValues = ", repr(elementsValues)) # Check the constructor with collection matrix0bis = Matrix(2, 2, elementsValues) print("matrix0bis = ", repr(matrix0bis)) # TEST NUMBER FIVE : ASSIGNMENT METHOD print("test number five : assignment method") # Assignment method # No sense with pyton # TEST NUMBER SIX : TRANSPOSITION METHOD print("test number six : transposition method") # Check transpose method matrix4 = matrix1.transpose() print("matrix1 transposed = ", repr(matrix4)) # TEST NUMBER SEVEN : ADDITION METHOD print("test number seven : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = matrix1 + matrix4 sum2 = matrix4 + matrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # TEST NUMBER EIGHT : SUBSTRACTION METHOD print("test number eight : substraction method") # Check substraction method diff = matrix1 - matrix4 print("diff = ", repr(diff)) # TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD print("test number nine : matrix multiplication method") # Check multiplication method prod = matrix1 * matrix4 print("prod = ", repr(prod)) # TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test number ten : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = matrix1 * pt print("ptResult = ", repr(ptResult)) # TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR # METHODS print( "test number eleven : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. scalprod1 = matrix1 * s # bug PYTHON scalprod2 = s * matrix1 scalprod3 = matrix1 * s print("scalprod1 = ", repr(scalprod1)) # print "scalprod2 = " , scalprod2 print("scalprod3 = ", repr(scalprod3)) # print "scalprod1 equals scalprod2 = " , (scalprod1 == scalprod2) print("scalprod1 equals scalprod3 = ", (scalprod1 == scalprod3)) # print "scalprod2 equals scalprod3 = " , (scalprod2 == scalprod3) # Check the division method scaldiv1 = matrix1 / s scaldiv2 = matrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # TEST NUMBER TWELVE : ISEMPTY METHOD print("test number twelve : isEmpty method") # Check method isEmpty matrix5 = Matrix() matrix6 = Matrix() # matrix6.setDimensions(0,3) print("matrix1 is empty = ", matrix1.isEmpty()) print("matrix5 is empty = ", matrix5.isEmpty()) print("matrix6 is empty = ", matrix6.isEmpty()) print("matrix0 is empty = ", matrix0.isEmpty()) # TEST NUMBER FOURTEEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD print( "test number fourteen : multiplication with a numerical point method") # Create the numerical point pt_test = Point() pt_test.add(1.) pt_test.add(2.) print("pt_test = ", repr(pt_test)) A = Matrix(2, 2) A[0, 0] = 0.5 A[1, 0] = -(sqrt(3.) / 2) A[0, 1] = (sqrt(3.) / 2) A[1, 1] = 0.5 B = A.transpose() id = B * A # Check the product method ptResult2 = id * pt_test print("A = ", repr(A)) print("B = ", repr(B)) print("id = ", repr(id)) print("ptResult2 = ", repr(ptResult2)) except: import sys print("t_Matrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MaximumEntropyOrderStatisticsCopula_std.expout000066400000000000000000000122301307543307100275750ustar00rootroot00000000000000Copula MaximumEntropyOrderStatisticsCopula(collection = [Trapezoidal(a = -2, b = -1.1, c = -1, d = 1),LogUniform(aLog = 1, bLog = 1.2),Triangular(a = 3, m = 4.5, b = 5),Beta(r = 2.5, t = 6, a = 4.7, b = 5.2)]) Elliptical copula= False Elliptical copula= False Independent copula= False oneRealization= class=Point name=Unnamed dimension=4 values=[0.629877,0.882805,0.151547,0.0302348] oneSample first= class=Point name=Unnamed dimension=4 values=[0.347057,0.969423,0.923052,0.492666] last= class=Point name=Unnamed dimension=4 values=[0.450413,0.630137,0.137583,0.707768] mean= class=Point name=Unnamed dimension=4 values=[0.499014,0.499206,0.5056,0.499316] covariance= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.0849644,-0.000136295,0.000187446,7.82855e-05,-0.000136295,0.0831311,0.00100951,-1.89497e-05,0.000187446,0.00100951,0.0847861,0.00446144,7.82855e-05,-1.89497e-05,0.00446144,0.0831515] Point= [0.35,0.15,0.02,0.33] ddf = class=Point name=Unnamed dimension=4 values=[0.318639,0.227512,-1.13455,-0.276473] log pdf=-0.450551 pdf =0.637277 condPDF =19.425306 cdf=0.000482 ccdf=0.999518 condCDF =0.611494 quantile= class=Point name=Unnamed dimension=4 values=[0.987341,0.987341,0.987341,0.987341] cdf(quantile)=0.950000 condQuantile =0.588317 mean= class=Point name=Unnamed dimension=4 values=[0.5,0.5,0.5,0.5] standard deviation= class=Point name=Unnamed dimension=4 values=[0.288675,0.288675,0.288675,0.288675] skewness= class=Point name=Unnamed dimension=4 values=[0,0,0,0] kurtosis= class=Point name=Unnamed dimension=4 values=[1.8,1.8,1.8,1.8] covariance= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.0833333,0,0,0,0,0.0833333,0.00140456,0,0,0.00140456,0.0833333,0.00407363,0,0,0.00407363,0.0833333] correlation= class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.0168547,0,0,0.0168547,1,0.0488836,0,0,0.0488836,1] spearman= class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.0168547,0,0,0.0168547,1,0.0488836,0,0,0.0488836,1] parameters= [class=PointWithDescription name=X0 dimension=4 description=[a_marginal_0,b_marginal_0,c_marginal_0,d_marginal_0] values=[-2,-1.1,-1,1],class=PointWithDescription name=X1 dimension=2 description=[aLog_marginal_1,bLog_marginal_1] values=[1,1.2],class=PointWithDescription name=X2 dimension=3 description=[a_marginal_2,m_marginal_2,b_marginal_2] values=[3,4.5,5],class=PointWithDescription name=X3 dimension=4 description=[r_marginal_3,t_marginal_3,a_marginal_3,b_marginal_3] values=[2.5,6,4.7,5.2]] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.350000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.5] margin realization= class=Point name=Unnamed dimension=1 values=[0.481221] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.150000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.5] margin realization= class=Point name=Unnamed dimension=1 values=[0.0673249] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.020000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.5] margin realization= class=Point name=Unnamed dimension=1 values=[0.418102] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.330000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.5] margin realization= class=Point name=Unnamed dimension=1 values=[0.286734] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[0] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] indices= [0, 1] margins= class=MaximumEntropyOrderStatisticsCopula name=MaximumEntropyOrderStatisticsCopula dimension=2 distribution=class=MaximumEntropyOrderStatisticsDistribution name=Unnamed dimension=2 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.645161,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.71828 b=3.32012] margins PDF=1.000000 margins CDF=0.052500 margins quantile= class=Point name=Unnamed dimension=2 values=[0.894427,0.894427] margins CDF(qantile)=0.800000 margins realization= class=Point name=Unnamed dimension=2 values=[0.699898,0.209943] openturns-1.9/python/test/t_MaximumEntropyOrderStatisticsCopula_std.py000077500000000000000000000115561307543307100267160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # Instanciate one copula object copula = ot.MaximumEntropyOrderStatisticsCopula( [ot.Trapezoidal(-2.0, -1.1, -1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.5, 5.0), ot.Beta(2.5, 6.0, 4.7, 5.2)]) dim = copula.getDimension() print("Copula ", copula) # Is this copula an elliptical copula? print("Elliptical copula= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of copula oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = copula.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = ot.Point([0.35, 0.15, 0.02, 0.33]) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = copula.computeDDF(point) print("ddf =", repr(DDF)) # PDF value LPDF = copula.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = copula.computePDF(point) print("pdf =%.6f" % PDF) condPDF = copula.computeConditionalPDF(0.6, point[:3]) print("condPDF =%.6f" % condPDF) # derivative of the PDF with regards the parameters of the copula CDF = copula.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = copula.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) condCDF = copula.computeConditionalCDF(0.6, point[:3]) print("condCDF =%.6f" % condCDF) # PDFgr = copula.computePDFGradient(point) # print "pdf gradient =", repr(PDFgr) # quantile quantile = copula.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function TAKES TOO MUCH TIME # inverseSurvival = ot.Point(copula.computeInverseSurvivalFunction(0.95)) # print("InverseSurvival=", repr(inverseSurvival)) # print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions # threshold = ot.Point() # print("Minimum volume interval=", copula.computeMinimumVolumeInterval(0.95, threshold)) # print("threshold=", threshold) # beta = ot.Point() # levelSet = copula.computeMinimumVolumeLevelSet(0.95, beta) # print("Minimum volume level set=", levelSet) # print("beta=", beta) # print("Bilateral confidence interval=", copula.computeBilateralConfidenceInterval(0.95, beta)) # print("beta=", beta) # print("Unilateral confidence interval (lower tail)=", copula.computeUnilateralConfidenceInterval(0.95, False, beta)) # print("beta=", beta) # print("Unilateral confidence interval (upper tail)=", copula.computeUnilateralConfidenceInterval(0.95, True, beta)) # print("beta=", beta) condQuantile = copula.computeConditionalQuantile(0.6, point[:3]) print("condQuantile =%.6f" % condQuantile) mean = copula.getMean() print("mean=", repr(mean)) standardDeviation = copula.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = copula.getSkewness() print("skewness=", repr(skewness)) kurtosis = copula.getKurtosis() print("kurtosis=", repr(kurtosis)) ot.ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 20) ot.ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-4) covariance = copula.getCovariance() print("covariance=", repr(covariance)) correlation = copula.getCorrelation() print("correlation=", repr(correlation)) spearman = copula.getSpearmanCorrelation() print("spearman=", repr(spearman)) ot.ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 100) ot.ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-12) parameters = copula.getParametersCollection() print("parameters=", repr(parameters)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(point[i])) print("margin CDF=%.6f" % margin.computeCDF(point[i])) print("margin quantile=", repr(margin.computeQuantile(0.5))) print("margin realization=", repr(margin.getRealization())) print("margin range=", repr(margin.getRange())) # Extract a 2-D marginal indices = [0, 1] print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF([point[i] for i in indices])) print("margins CDF=%.6f" % margins.computeCDF([point[i] for i in indices])) quantile = ot.Point(margins.computeQuantile(0.8)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) openturns-1.9/python/test/t_MaximumEntropyOrderStatisticsDistribution_std.expout000066400000000000000000000121351307543307100310350ustar00rootroot00000000000000Distribution MaximumEntropyOrderStatisticsDistribution(collection = [Trapezoidal(a = -2, b = -1.1, c = -1, d = 1),LogUniform(aLog = 1, bLog = 1.2),Triangular(a = 3, m = 4.5, b = 5),Beta(r = 2.5, t = 6, a = 4.7, b = 5.2)]) Elliptical = False oneRealization= class=Point name=Unnamed dimension=4 values=[-0.514848,3.2432,3.67427,4.75124] oneSample first= class=Point name=Unnamed dimension=4 values=[-1.01206,3.29988,4.7226,4.9015] last= class=Point name=Unnamed dimension=4 values=[-0.845925,3.08338,3.64246,4.96147] mean= class=Point name=Unnamed dimension=4 values=[-0.690223,3.00869,4.17387,4.90804] covariance= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.403946,-0.00036587,0.000932395,-5.81027e-05,-0.00036587,0.0300943,0.00129843,-2.28507e-05,0.000932395,0.00129843,0.183603,0.00207535,-5.81027e-05,-2.28507e-05,0.00207535,0.00865565] Point= [0,3.2,4.2,5] ddf = class=Point name=Unnamed dimension=4 values=[-0.645398,0.107242,0.537832,-4.84052] log pdf=-0.437888 pdf =0.645398 condPDF =0.000000 cdf=0.272530 ccdf=0.727470 condCDF =0.000000 quantile= class=Point name=Unnamed dimension=4 values=[0.719851,3.31172,4.88749,5.11511] cdf(quantile)=0.950000 condQuantile =4.088961 mean= class=Point name=Unnamed dimension=4 values=[-0.689247,3.00918,4.16667,4.90833] standard deviation= class=Point name=Unnamed dimension=4 values=[0.627114,0.173677,0.424918,0.0931695] skewness= class=Point name=Unnamed dimension=4 values=[0.33917,0.0692634,-0.422404,0.223607] kurtosis= class=Point name=Unnamed dimension=4 values=[2.39815,1.80525,2.4,2.4] covariance= class=CovarianceMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[0.393268,0,0,0,0,0.0301637,0.00176556,0,0,0.00176556,0.180556,0.00188803,0,0,0.00188803,0.00868056] correlation= class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.023924,0,0,0.023924,1,0.0476904,0,0,0.0476904,1] spearman= class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0.0168547,0,0,0.0168547,1,0.0488836,0,0,0.0488836,1] parameters= [class=PointWithDescription name=X0 dimension=4 description=[a_marginal_0,b_marginal_0,c_marginal_0,d_marginal_0] values=[-2,-1.1,-1,1],class=PointWithDescription name=X1 dimension=2 description=[aLog_marginal_1,bLog_marginal_1] values=[1,1.2],class=PointWithDescription name=X2 dimension=3 description=[a_marginal_2,m_marginal_2,b_marginal_2] values=[3,4.5,5],class=PointWithDescription name=X3 dimension=4 description=[r_marginal_3,t_marginal_3,a_marginal_3,b_marginal_3] values=[2.5,6,4.7,5.2]] margin= class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.645161 margin PDF=0.322581 margin CDF=0.838710 margin quantile= class=Point name=Unnamed dimension=1 values=[-0.760682] margin realization= class=Point name=Unnamed dimension=1 values=[-0.79344] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[-2] upper bound=class=Point name=Unnamed dimension=1 values=[1] finite lower bound=[1] finite upper bound=[1] margin= class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.71828 b=3.32012 margin PDF=1.562500 margin CDF=0.815754 margin quantile= class=Point name=Unnamed dimension=1 values=[3.00417] margin realization= class=Point name=Unnamed dimension=1 values=[2.75513] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[2.71828] upper bound=class=Point name=Unnamed dimension=1 values=[3.32012] finite lower bound=[1] finite upper bound=[1] margin= class=Triangular name=Triangular dimension=1 a=3 m=4.5 b=5 margin PDF=0.800000 margin CDF=0.480000 margin quantile= class=Point name=Unnamed dimension=1 values=[4.22474] margin realization= class=Point name=Unnamed dimension=1 values=[4.11996] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[3] upper bound=class=Point name=Unnamed dimension=1 values=[5] finite lower bound=[1] finite upper bound=[1] margin= class=Beta name=Beta dimension=1 r=2.5 t=6 a=4.7 b=5.2 margin PDF=2.554910 margin CDF=0.819685 margin quantile= class=Point name=Unnamed dimension=1 values=[4.90342] margin realization= class=Point name=Unnamed dimension=1 values=[4.84722] margin range= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[4.7] upper bound=class=Point name=Unnamed dimension=1 values=[5.2] finite lower bound=[1] finite upper bound=[1] indices= [0, 1] margins= class=MaximumEntropyOrderStatisticsDistribution name=Unnamed dimension=2 collection=[class=Trapezoidal name=Trapezoidal dimension=1 a=-2 b=-1.1 c=-1 d=1 h=0.645161,class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.71828 b=3.32012] margins PDF=0.504032 margins CDF=0.684181 margins quantile= class=Point name=Unnamed dimension=2 values=[0.190956,3.25075] margins CDF(qantile)=0.800000 margins realization= class=Point name=Unnamed dimension=2 values=[-1.23466,3.19381] openturns-1.9/python/test/t_MaximumEntropyOrderStatisticsDistribution_std.py000077500000000000000000000116311307543307100301440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # Instanciate one distribution object distribution = ot.MaximumEntropyOrderStatisticsDistribution( [ot.Trapezoidal(-2.0, -1.1, -1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.5, 5.0), ot.Beta(2.5, 6.0, 4.7, 5.2)]) dim = distribution.getDimension() print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = ot.Point([0.0, 3.2, 4.2, 5.0]) print("Point= ", point) # Show PDF and CDF of point # eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) condPDF = distribution.computeConditionalPDF(4.0, [0.0, 2.0]) print("condPDF =%.6f" % condPDF) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) condCDF = distribution.computeConditionalCDF(4.0, [0.0, 2.0]) print("condCDF =%.6f" % condCDF) # PDFgr = distribution.computePDFGradient(point) # print "pdf gradient =", repr(PDFgr) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) condQuantile = distribution.computeConditionalQuantile(0.4, [0.0, 2.0]) print("condQuantile =%.6f" % condQuantile) # Get 95% survival function TAKES TOO MUCH TIME # inverseSurvival = ot.Point(distribution.computeInverseSurvivalFunction(0.95)) # print("InverseSurvival=", repr(inverseSurvival)) # print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions # threshold = ot.Point() # print("Minimum volume interval=", distribution.computeMinimumVolumeInterval(0.95, threshold)) # print("threshold=", threshold) # beta = ot.Point() # levelSet = distribution.computeMinimumVolumeLevelSet(0.95, beta) # print("Minimum volume level set=", levelSet) # print("beta=", beta) # print("Bilateral confidence interval=", distribution.computeBilateralConfidenceInterval(0.95, beta)) # print("beta=", beta) # print("Unilateral confidence interval (lower tail)=", distribution.computeUnilateralConfidenceInterval(0.95, False, beta)) # print("beta=", beta) # print("Unilateral confidence interval (upper tail)=", distribution.computeUnilateralConfidenceInterval(0.95, True, beta)) # print("beta=", beta) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) ot.ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 20) ot.ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-4) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) correlation = distribution.getCorrelation() print("correlation=", repr(correlation)) spearman = distribution.getSpearmanCorrelation() print("spearman=", repr(spearman)) ot.ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 100) ot.ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-12) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(point[i])) print("margin CDF=%.6f" % margin.computeCDF(point[i])) print("margin quantile=", repr(margin.computeQuantile(0.5))) print("margin realization=", repr(margin.getRealization())) print("margin range=", repr(margin.getRange())) # Extract a 2-D marginal indices = [0, 1] print("indices=", repr(indices)) margins = distribution.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF([point[i] for i in indices])) print("margins CDF=%.6f" % margins.computeCDF([point[i] for i in indices])) quantile = ot.Point(margins.computeQuantile(0.8)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) openturns-1.9/python/test/t_MaximumLikelihoodFactory_std.expout000066400000000000000000000003061307543307100253360ustar00rootroot00000000000000distribution= Beta(r = 2.3, t = 4.5, a = -1, b = 1) estimated distribution= Beta(r = 2.12, t = 4.3, a = -0.989, b = 1.01) estimated distribution with bounds= Beta(r = 2.15, t = 4.31, a = -1, b = 1) openturns-1.9/python/test/t_MaximumLikelihoodFactory_std.py000077500000000000000000000010731307543307100244470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.PlatformInfo.SetNumericalPrecision(3) distribution = ot.Beta(2.3, 4.5, -1.0, 1.0) print('distribution=', distribution) sample = distribution.getSample(1000) factory = ot.MaximumLikelihoodFactory(ot.Beta()) inf_distribution = factory.build(sample) print('estimated distribution=', inf_distribution) # set (a,b) out of (r, t, a, b) factory.setKnownParameter([-1.0, 1.0], [2, 3]) inf_distribution = factory.build(sample) print('estimated distribution with bounds=', inf_distribution) openturns-1.9/python/test/t_MeixnerDistributionFactory_std.expout000066400000000000000000000014401307543307100257240ustar00rootroot00000000000000Distribution = MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) Estimated distribution= MeixnerDistribution(alpha = 1.77682, beta = 0.316056, delta = 1.77799, mu = -0.0428205) Default distribution= MeixnerDistribution(alpha = 1, beta = 0, delta = 1, mu = 0) Distribution from parameters= MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) MeixnerDistribution = MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) Estimated meixnerDistribution= MeixnerDistribution(alpha = 1.77682, beta = 0.316056, delta = 1.77799, mu = -0.0428205) Default meixnerDistribution= MeixnerDistribution(alpha = 1, beta = 0, delta = 1, mu = 0) MeixnerDistribution from parameters= MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) openturns-1.9/python/test/t_MeixnerDistributionFactory_std.py000077500000000000000000000040231307543307100250330ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: ResourceMap.SetAsUnsignedInteger( "MeixnerDistribution-CDFIntegrationNodesNumber", 8) ResourceMap.SetAsUnsignedInteger( "MeixnerDistribution-CDFDiscretization", 100) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumAbsoluteError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumRelativeError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumConstraintError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumObjectiveError", 1.0e-6) distribution = MeixnerDistribution(1.5, 0.5, 2.5, -0.5) size = 1000 sample = distribution.getSample(size) factory = MeixnerDistributionFactory() covariance = CovarianceMatrix() # Distribution estimatedDistribution(factory.build(sample, covariance)) estimatedDistribution = factory.build(sample) print("Distribution =", distribution) print("Estimated distribution=", estimatedDistribution) # print "Covariance=", covariance estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedMeixnerDistribution = factory.buildAsMeixnerDistribution(sample) print("MeixnerDistribution =", distribution) print("Estimated meixnerDistribution=", estimatedMeixnerDistribution) estimatedMeixnerDistribution = factory.buildAsMeixnerDistribution() print("Default meixnerDistribution=", estimatedMeixnerDistribution) estimatedMeixnerDistribution = factory.buildAsMeixnerDistribution( distribution.getParameter()) print("MeixnerDistribution from parameters=", estimatedMeixnerDistribution) except: import sys print("t_MeixnerDistributionFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MeixnerDistribution_std.expout000066400000000000000000000034111307543307100243740ustar00rootroot00000000000000Distribution class=MeixnerDistribution name=MeixnerDistribution dimension=1 alpha=1.5 beta=0.5 delta=2.5 mu=-0.5 logNormalizationFactor=-2.11357 b=0.492762 c=-0.56861 dc=1.37171 Distribution MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5) Elliptical = False Continuous = True oneRealization= [2.06954] oneSample first= [0.267624] last= [-2.89629] mean= [0.426758] covariance= [[ 2.89038 ]] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= [1] log pdf=-1.517348 pdf =0.219293 pdf (FD)=0.219283 cdf=0.640774 ccdf=0.359226 characteristic function=(0.0679463313303-0.248507038511j) log characteristic function=(-1.35623659307-1.30390135592j) quantile= [3.39477] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-2.27095] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-2.90577, 3.94843] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.50547} with f= MinimumVolumeLevelSetEvaluation(MeixnerDistribution(alpha = 1.5, beta = 0.5, delta = 2.5, mu = -0.5)) beta= [0.0300325] Bilateral confidence interval= [-2.80555, 4.06095] beta= [0.95] Unilateral confidence interval (lower tail)= [-18.5819, 3.39477] beta= [0.95] Unilateral confidence interval (upper tail)= [-2.27095, 24.6896] beta= [0.95] mean= [0.457532] covariance= [[ 2.99587 ]] parameters= [[alpha : 1.5, beta : 0.5, mu : 2.5, : -0.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [0.638355] standard moment n= 2 , value= [1.739] Standard representative= MeixnerDistribution(alpha = 1, beta = 0.5, delta = 2.5, mu = 0) alpha=1.500000 beta=0.500000 delta=2.500000 mu=-0.500000 standard deviation= [1.73086] skewness= [0.221285] kurtosis= [3.44897] openturns-1.9/python/test/t_MeixnerDistribution_std.py000077500000000000000000000122211307543307100235020ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: ResourceMap.SetAsUnsignedInteger( "MeixnerDistribution-CDFIntegrationNodesNumber", 8) ResourceMap.SetAsUnsignedInteger( "MeixnerDistribution-CDFDiscretization", 100) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumAbsoluteError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumRelativeError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumConstraintError", 1.0e-6) ResourceMap.SetAsScalar( "MeixnerDistribution-MaximumObjectiveError", 1.0e-6) # Instanciate one distribution object distribution = MeixnerDistribution(1.5, 0.5, 2.5, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = rejected print( "Kolmogorov test for the generator, sample size=", size, " is ", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) eps = 1.0e-5 PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.12g%+.12gj)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.12g%+.12gj)" % (LCF.real, LCF.imag)) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(3): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution alpha = distribution.getAlpha() print("alpha=%.6f" % alpha) beta = distribution.getBeta() print("beta=%.6f" % beta) delta = distribution.getDelta() print("delta=%.6f" % delta) mu = distribution.getMu() print("mu=%.6f" % mu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) except: import sys print("t_MeixnerDistribution_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MeixnerFactory_std.expout000066400000000000000000000025031307543307100233250ustar00rootroot00000000000000meixner( 0 )= 1 meixner( 1 )= 1.73205 - 0.404145 * X meixner( 2 )= 2.22486 - 1.14839 * X + 0.110119 * X^2 meixner( 3 )= 2.43721 - 2.11485 * X + 0.432256 * X^2 - 0.0234558 * X^3 meixner( 4 )= 2.40655 - 3.17102 * X + 1.03833 * X^2 - 0.117585 * X^3 + 0.00415705 * X^4 meixner( 5 )= 2.20564 - 4.21901 * X + 1.9698 * X^2 - 0.348796 * X^3 + 0.0254 * X^4 - 0.000635 * X^5 meixner( 6 )= 1.91014 - 5.21408 * X + 3.25397 * X^2 - 0.799357 * X^3 + 0.0897602 * X^4 - 0.00458272 * X^5 + 8.55441e-05 * X^6 meixner( 7 )= 1.58175 - 6.16341 * X + 4.92662 * X^2 - 1.56963 * X^3 + 0.241002 * X^4 - 0.0188088 * X^5 + 0.0007128 * X^6 - 1.03304e-05 * X^7 meixner( 8 )= 1.26292 - 7.11717 * X + 7.05515 * X^2 - 2.78789 * X^3 + 0.547095 * X^4 - 0.0578824 * X^5 + 0.00333388 * X^6 - 9.76844e-05 * X^7 + 1.1321e-06 * X^8 meixner( 9 )= 0.978257 - 8.15986 * X + 9.76169 * X^2 - 4.62899 * X^3 + 1.11071 * X^4 - 0.148959 * X^5 + 0.0115671 * X^6 - 0.000513056 * X^7 + 1.19846e-05 * X^8 - 1.13675e-07 * X^9 meixner(10) roots= class=Point name=Unnamed dimension=10 values=[0.0891767,1.50904,3.36334,5.65802,8.41605,11.6926,15.5849,20.2616,26.0516,33.8023] meixner(10) nodes= [0.0891767,1.50904,3.36334,5.65802,8.41605,11.6926,15.5849,20.2616,26.0516,33.8023]#10 and weights= [0.0395505,0.188007,0.351725,0.289769,0.110216,0.0192414,0.00144917,4.08107e-05,3.16436e-07,3.0345e-10]#10 openturns-1.9/python/test/t_MeixnerFactory_std.py000077500000000000000000000010031307543307100224260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: meixner = MeixnerFactory(10, 0.3) for i in range(10): print("meixner(", i, ")=", meixner.build(i)) roots = meixner.getRoots(10) print("meixner(10) roots=", repr(roots)) nodes, weights = meixner.getNodesAndWeights(10) print("meixner(10) nodes=", nodes, "and weights=", weights) except: import sys print("t_MeixnerFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Mesh_std.expout000066400000000000000000000056401307543307100212670ustar00rootroot00000000000000Default 1D mesh= class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] simplices=[] 1D mesh= class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0.5],[1.5],[2.1],[2.7]] simplices=[[0,1],[1,2],[2,3]] Is empty? False vertices= 0 : [ 0.5 ] 1 : [ 1.5 ] 2 : [ 2.1 ] 3 : [ 2.7 ] simplices= [[0,1],[1,2],[2,3]] volume= 2.2 First simplex volume= 1.0 is p= [1.3] in mesh? True Nearest index( [1.8] )= 1 Nearest index( [1.8] ), simplex and coordinates= [[1,1], class=Point name=Unnamed dimension=2 values=[0.5,0.5]] Nearest index( [-1.8] ), simplex and coordinates= [[0], class=Point name=Unnamed dimension=0 values=[]] Nearest index( [[-0.25], [2.25]] )= [0,2] P1 gram= [[ 0.333333 0.166667 0 0 ] [ 0.166667 0.533333 0.1 0 ] [ 0 0.1 0.4 0.1 ] [ 0 0 0.1 0.2 ]] 2D mesh= class=Mesh name=Unnamed dimension=2 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=2 data=[[0,0],[1,0],[1,1],[1.5,1],[2,1.5],[0.5,1.5]] simplices=[[0,1,2],[1,2,3],[2,3,4],[2,4,5],[0,2,5]] Nearest index( [1.8, 1.8] )= 4 Nearest index( [[-0.25, -0.25], [2.25, 2.25]] )= [0,4] P1 gram= 6x6 [[ 0.125 0.0208333 0.0625 0 0 0.0416667 ] [ 0.0208333 0.0625 0.03125 0.0104167 0 0 ] [ 0.0625 0.03125 0.166667 0.015625 0.0104167 0.046875 ] [ 0 0.0104167 0.015625 0.03125 0.00520833 0 ] [ 0 0 0.0104167 0.00520833 0.0208333 0.00520833 ] [ 0.0416667 0 0.046875 0 0.00520833 0.09375 ]] 3D mesh= class=Mesh name=Unnamed dimension=3 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=8 dimension=3 data=[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] simplices=[[0,1,2,4],[3,5,6,7],[1,2,3,6],[1,2,4,6],[1,3,5,6],[1,4,5,6]] Nearest index( [1.8, 1.8, 1.8] )= 7 Nearest index( [[-0.25, -0.25, -0.25], [2.25, 2.25, 2.25]] )= [0,7] P3 gram= 8x8 [[ 0.00277778 0.00138889 0.00138889 0 0.00138889 0 0 0 ] [ 0.00138889 0.0138889 0.00416667 0.00277778 0.00416667 0.00277778 0.00555556 0 ] [ 0.00138889 0.00416667 0.00833333 0.00138889 0.00277778 0 0.00277778 0 ] [ 0 0.00277778 0.00138889 0.00833333 0 0.00277778 0.00416667 0.00138889 ] [ 0.00138889 0.00416667 0.00277778 0 0.00833333 0.00138889 0.00277778 0 ] [ 0 0.00277778 0 0.00277778 0.00138889 0.00833333 0.00416667 0.00138889 ] [ 0 0.00555556 0.00277778 0.00416667 0.00277778 0.00416667 0.0138889 0.00138889 ] [ 0 0 0 0.00138889 0 0.00138889 0.00138889 0.00277778 ]] openturns-1.9/python/test/t_Mesh_std.py000077500000000000000000000052651307543307100204010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m ot.PlatformInfo.SetNumericalPrecision(6) # 1D example mesh1D = ot.Mesh() print("Default 1D mesh=", mesh1D) vertices = ot.Sample(0, 1) vertices.add([0.5]) vertices.add([1.5]) vertices.add([2.1]) vertices.add([2.7]) simplicies = [[]] * 3 simplicies[0] = [0, 1] simplicies[1] = [1, 2] simplicies[2] = [2, 3] mesh1D = ot.Mesh(vertices, simplicies) print("1D mesh=", mesh1D) print("Is empty? ", mesh1D.isEmpty()) print("vertices=", mesh1D.getVertices()) print("simplices=", mesh1D.getSimplices()) print("volume=", mesh1D.getVolume()) print("First simplex volume=", mesh1D.computeSimplexVolume(0)) p = [1.3] print("is p=", p, " in mesh? ", mesh1D.contains(p)) point = [1.8] print("Nearest index(", point, ")=", mesh1D.getNearestVertexIndex(point)) print("Nearest index(", point, "), simplex and coordinates=", mesh1D.getNearestVertexAndSimplexIndicesWithCoordinates(point)) point = [-1.8] print("Nearest index(", point, "), simplex and coordinates=", mesh1D.getNearestVertexAndSimplexIndicesWithCoordinates(point)) points = [[-0.25], [2.25]] print("Nearest index(", points, ")=", mesh1D.getNearestVertexIndex(points)) print("P1 gram=\n", mesh1D.computeP1Gram()) # 2D case vertices = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [1.5, 1.0], [2.0, 1.5], [0.5, 1.5]] simplicies = [[0, 1, 2], [1, 2, 3], [2, 3, 4], [2, 4, 5], [0, 2, 5]] mesh2D = ot.Mesh(vertices, simplicies) print("2D mesh=", mesh2D) point = [1.8] * 2 print("Nearest index(", point, ")=", mesh2D.getNearestVertexIndex(point)) points = [[-0.25] * 2, [2.25] * 2] print("Nearest index(", points, ")=", mesh2D.getNearestVertexIndex(points)) print("P1 gram=\n", mesh2D.computeP1Gram()) # 3D case vertices = ot.Sample(0, 3) vertices.add([0.0, 0.0, 0.0]) vertices.add([0.0, 0.0, 1.0]) vertices.add([0.0, 1.0, 0.0]) vertices.add([0.0, 1.0, 1.0]) vertices.add([1.0, 0.0, 0.0]) vertices.add([1.0, 0.0, 1.0]) vertices.add([1.0, 1.0, 0.0]) vertices.add([1.0, 1.0, 1.0]) simplicies = [[]] * 6 simplicies[0] = [0, 1, 2, 4] simplicies[1] = [3, 5, 6, 7] simplicies[2] = [1, 2, 3, 6] simplicies[3] = [1, 2, 4, 6] simplicies[4] = [1, 3, 5, 6] simplicies[5] = [1, 4, 5, 6] mesh3D = ot.Mesh(vertices, simplicies) print("3D mesh=", mesh3D) point = [1.8] * 3 print("Nearest index(", point, ")=", mesh3D.getNearestVertexIndex(point)) points = [[-0.25] * 3, [2.25] * 3] print("Nearest index(", points, ")=", mesh3D.getNearestVertexIndex(points)) print("P3 gram=\n", mesh3D.computeP1Gram()) rotation = ot.SquareMatrix(3) rotation[0, 0] = m.cos(m.pi / 3.0) rotation[0, 1] = m.sin(m.pi / 3.0) rotation[1, 0] = -m.sin(m.pi / 3.0) rotation[1, 1] = m.cos(m.pi / 3.0) rotation[2, 2] = 1.0 openturns-1.9/python/test/t_MetaModelValidation_std.expout000066400000000000000000000010061307543307100242450ustar00rootroot00000000000000 Sparse chaos scoring Q2 = 0.99979 Residual sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[0.0413],[-0.0962],[0.0821],[0.0285],[-0.0101],[0.0476],[0.0148],[0.00718],[-0.0501],[0.114]] Kriging scoring Q2 = 0.956 Residual sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[0.82],[-0.065],[-2.1],[0.31],[-0.066],[0.29],[0.64],[-1],[0.35],[0.31]] openturns-1.9/python/test/t_MetaModelValidation_std.py000077500000000000000000000065221307543307100233640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from math import pi ot.TESTPREAMBLE() try: ot.PlatformInfo.SetNumericalPrecision(3) # Problem parameters dimension = 3 a = 7.0 b = 0.1 # Create the Ishigami function inputVariables = ["xi1", "xi2", "xi3"] formula = [ "sin(xi1) + (" + str(a) + ") * (sin(xi2)) ^ 2 + (" + str(b) + ") * xi3^4 * sin(xi1)"] model = ot.SymbolicFunction(inputVariables, formula) # Create the input distribution distribution = ot.ComposedDistribution([ot.Uniform(-pi, pi)] * dimension) # Fix sampling size samplingSize = 100 # Get input & output sample lhs = ot.LHSExperiment(distribution, samplingSize) inputSample = lhs.generate() outputSample = model(inputSample) # Validation of results on independent samples validationSize = 10 inputValidation = distribution.getSample(validationSize) outputValidation = model(inputValidation) # 1) SPC algorithm # Create the orthogonal basis polynomialCollection = [ot.LegendreFactory()] * dimension enumerateFunction = ot.EnumerateFunction(dimension) productBasis = ot.OrthogonalProductPolynomialFactory( polynomialCollection, enumerateFunction) # Create the adaptive strategy degree = 8 basisSize = enumerateFunction.getStrataCumulatedCardinal(degree) adaptiveStrategy = ot.FixedStrategy(productBasis, basisSize) # Select the fitting algorithm fittingAlgorithm = ot.KFold() leastSquaresFactory = ot.LeastSquaresMetaModelSelectionFactory( ot.LARS(), fittingAlgorithm) # Projection strategy projectionStrategy = ot.LeastSquaresStrategy( inputSample, outputSample, leastSquaresFactory) algo = ot.FunctionalChaosAlgorithm( inputSample, outputSample, distribution, adaptiveStrategy, projectionStrategy) # Reinitialize the RandomGenerator to see the effect of the sampling # method only ot.RandomGenerator.SetSeed(0) algo.run() # Get the results result = algo.getResult() # MetaModelValidation - SPC metaModelValidationSPC = ot.MetaModelValidation( inputValidation, outputValidation, result.getMetaModel()) print("") print("Sparse chaos scoring") print( "Q2 = ", round(metaModelValidationSPC.computePredictivityFactor(), 5)) print("Residual sample = ", repr( metaModelValidationSPC.getResidualSample())) # 2) Kriging algorithm # KrigingAlgorithm basis = ot.QuadraticBasisFactory(dimension).build() # model already computed, separatly covarianceModel = ot.GeneralizedExponential( [1.933, 1.18, 1.644], [10.85], 2.0) algo2 = ot.KrigingAlgorithm( inputSample, outputSample, covarianceModel, basis, True) algo2.setOptimizeParameters(False) algo2.run() result2 = algo2.getResult() # MetaModelValidation - KG metaModelValidationKG = ot.MetaModelValidation( inputValidation, outputValidation, result2.getMetaModel()) print("") print("Kriging scoring") print("Q2 = ", round(metaModelValidationKG.computePredictivityFactor(), 3)) ot.PlatformInfo.SetNumericalPrecision(2) print("Residual sample = ", repr( metaModelValidationKG.getResidualSample())) except: import sys print("t_MetaModelValidation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MethodOfMomentsFactory_std.expout000066400000000000000000000003371307543307100247710ustar00rootroot00000000000000distribution= Gumbel(alpha = 1.5, beta = -0.5) estimated distribution= Gumbel(alpha = 1.49, beta = -0.492) distribution= Beta(r = 2.3, t = 4.5, a = -1, b = 1) estimated distribution= Beta(r = 2.28, t = 4.48, a = -1, b = 1) openturns-1.9/python/test/t_MethodOfMomentsFactory_std.py000066400000000000000000000013341307543307100240730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.PlatformInfo.SetNumericalPrecision(3) size = 10000 distribution = ot.Gumbel(1.5, -0.5) print('distribution=', distribution) sample = distribution.getSample(size) factory = ot.MethodOfMomentsFactory(ot.Gumbel()) inf_distribution = factory.build(sample) print('estimated distribution=', inf_distribution) # set (a,b) out of (r, t, a, b) distribution = ot.Beta(2.3, 4.5, -1.0, 1.0) print('distribution=', distribution) sample = distribution.getSample(size) factory = ot.MethodOfMomentsFactory(ot.Beta()) factory.setKnownParameter([-1.0, 1.0], [2, 3]) inf_distribution = factory.build(sample) print('estimated distribution=', inf_distribution) openturns-1.9/python/test/t_MinCopula_std.expout000066400000000000000000000032701307543307100222570ustar00rootroot00000000000000Copula class=MinCopula name=a min copula dimension=3 Copula MinCopula(dim = 3) Mean [0.5,0.5,0.5] Covariance [[ 0.0833333 0.0833333 0.0833333 ] [ 0.0833333 0.0833333 0.0833333 ] [ 0.0833333 0.0833333 0.0833333 ]] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= [0.629877,0.629877,0.629877] oneSample= [ X0 X1 X2 ] 0 : [ 0.882805 0.882805 0.882805 ] 1 : [ 0.135276 0.135276 0.135276 ] 2 : [ 0.0325028 0.0325028 0.0325028 ] 3 : [ 0.347057 0.347057 0.347057 ] 4 : [ 0.969423 0.969423 0.969423 ] 5 : [ 0.92068 0.92068 0.92068 ] 6 : [ 0.50304 0.50304 0.50304 ] 7 : [ 0.0632061 0.0632061 0.0632061 ] 8 : [ 0.292757 0.292757 0.292757 ] 9 : [ 0.714382 0.714382 0.714382 ] anotherSample mean= [0.503282,0.503282,0.503282] anotherSample covariance= [[ 0.0847362 0.0847362 0.0847362 ] [ 0.0847362 0.0847362 0.0847362 ] [ 0.0847362 0.0847362 0.0847362 ]] point= [0.2,0.2,0.2] pdf= 0.2 cdf= 0.2 Quantile= [0.5,0.5,0.5] CDF(quantile)= 0.5 InverseSurvival= class=Point name=Unnamed dimension=3 values=[0.05,0.05,0.05] Survival(inverseSurvival)=0.950000 margin= IndependentCopula(dimension = 1) margin PDF= 1.0 margin CDF= 0.25 margin quantile= [0.95] margin realization= [0.876152] margin= IndependentCopula(dimension = 1) margin PDF= 1.0 margin CDF= 0.25 margin quantile= [0.95] margin realization= [0.445759] margin= IndependentCopula(dimension = 1) margin PDF= 1.0 margin CDF= 0.25 margin quantile= [0.95] margin realization= [0.492964] indices= [1,0] margins= MinCopula(dim = 2) margins PDF= 0.25 margins CDF= 0.25 margins quantile= [0.95,0.95] margins CDF(quantile)= 0.95 margins realization= [0.746851,0.746851] openturns-1.9/python/test/t_MinCopula_std.py000077500000000000000000000053411307543307100213670ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 3 copula = MinCopula(dim) copula.setName("a min copula") print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", copula.getMean()) print("Covariance ", copula.getCovariance()) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of copula oneRealization = copula.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", oneSample) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", anotherSample.computeMean()) print("anotherSample covariance=", anotherSample.computeCovariance()) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of zero point zeroPDF = copula.computePDF(point) zeroCDF = copula.computeCDF(point) print("point= ", point, "pdf=", zeroPDF, "cdf=", zeroCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", quantile) print("CDF(quantile)=", copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", margin) print("margin PDF=", margin.computePDF(Point(1, 0.25))) print("margin CDF=", margin.computeCDF(Point(1, 0.25))) print("margin quantile=", margin.computeQuantile(0.95)) print("margin realization=", margin.getRealization()) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", indices) margins = copula.getMarginal(indices) print("margins=", margins) print("margins PDF=", margins.computePDF(Point(2, 0.25))) print("margins CDF=", margins.computeCDF(Point(2, 0.25))) quantile = margins.computeQuantile(0.95) print("margins quantile=", quantile) print("margins CDF(quantile)=", margins.computeCDF(quantile)) print("margins realization=", margins.getRealization()) except: import sys print("t_MinCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MinMax_computation.expout000066400000000000000000000000341307543307100233240ustar00rootroot00000000000000Min=-0.004842 Max=-0.001452 openturns-1.9/python/test/t_MinMax_computation.py000077500000000000000000000025611307543307100224420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Load the physical model inputVariables = Description(4) inputVariables[0] = "E" inputVariables[1] = "F" inputVariables[2] = "L" inputVariables[3] = "I" outputVariables = Description(1) outputVariables[0] = "d" formula = Description(1) formula[0] = "-F*L^3/(3*E*I)" model = Function(inputVariables, outputVariables, formula) inputDimension = model.getInputDimension() # Define the reference domaine that will be sampled: an hypercube of side # length 2, discretized with 9+2=11 points in each dimension levels = Point(inputDimension) levels[0] = 5. levels[1] = 5. levels[2] = 5. levels[3] = 5. myPlane = Box(levels) sample = myPlane.generate() # Then, scale and move the cube to sample around the point of interrest point = Point(inputDimension) point[0] = 2.1e11 point[1] = 1e3 point[2] = 1.5 point[3] = 2.e-6 sample *= point * 0.2 sample += point * 0.9 # Compute the model over the sample response = model(sample) # Compute the min and max values taken by the model print("Min=%.6f" % response.getMin()[0]) print("Max=%.6f" % response.getMax()[0]) except: import sys print("t_MinMax_computation.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MixtureClassifier_std.expout000066400000000000000000000013751307543307100240360ustar00rootroot00000000000000mixture= Mixture((w = 0.333333, d = Normal(mu = 0, sigma = 4)), (w = 0.333333, d = Uniform(a = 5, b = 7)), (w = 0.333333, d = Triangular(a = 7, m = 8, b = 9))) inP= [2] class= 0 inP= [4] class= 0 inP= [6] class= 1 inP= [8] class= 2 classes= [0,0,1,2] inP= [2] grade| 0 = -3.52885 inP= [2] grade| 1 = -709.495 inP= [2] grade| 2 = -709.495 inP= [4] grade| 0 = -3.90385 inP= [4] grade| 1 = -709.495 inP= [4] grade| 2 = -709.495 inP= [6] grade| 0 = -4.52885 inP= [6] grade| 1 = -1.79176 inP= [6] grade| 2 = -709.495 inP= [8] grade| 0 = -5.40385 inP= [8] grade| 1 = -709.495 inP= [8] grade| 2 = -1.09861 grades| 0 = [-3.52885,-3.90385,-4.52885,-5.40385] grades| 1 = [-709.495,-709.495,-1.79176,-709.495] grades| 2 = [-709.495,-709.495,-709.495,-1.09861] openturns-1.9/python/test/t_MixtureClassifier_std.py000077500000000000000000000023711307543307100231420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(Normal(0., 4)) aCollection.add(Uniform(5., 7.)) aCollection.add(Triangular(7., 8., 9.)) # Instanciate one distribution object distribution = Mixture( aCollection, Point(aCollection.getSize(), 1.0)) print("mixture=", distribution) classifier = Classifier(MixtureClassifier(distribution)) inS = Sample() inS.add(Point(1, 2.)) inS.add(Point(1, 4.)) inS.add(Point(1, 6.)) inS.add(Point(1, 8.)) for i in range(inS.getSize()): print("inP=", inS[i], " class=", classifier.classify(inS[i])) print("classes=", classifier.classify(inS)) for i in range(inS.getSize()): for j in range(aCollection.getSize()): print("inP=", inS[i], " grade|", j, "= %g" % classifier.grade(inS[i], j)) for j in range(aCollection.getSize()): print("grades|", j, "=", classifier.grade( inS, Indices(inS.getSize(), j))) except: import sys print("t_MixtureClassifier_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Mixture_std.expout000066400000000000000000000127751307543307100220370ustar00rootroot00000000000000Distribution class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Weights = class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] After update, new weights = class=Point name=Unnamed dimension=3 values=[0.5,0.25,0.25] Distribution class=Mixture name=Mixture dimension=3 distributionCollection=[class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1],class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[2.5,1.5,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0],[1],[2]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=3 values=[2.07328,-1.03125,2.18976] oneSample first= class=Point name=Unnamed dimension=3 values=[-1.86277,-0.862642,2.91223] last= class=Point name=Unnamed dimension=3 values=[1.56533,-1.10765,2.76013] mean= class=Point name=Unnamed dimension=3 values=[1.64038,0.699193,2.03941] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.88439,3.99293,0.644831,3.99293,9.41608,2.09091,0.644831,2.09091,1.58061] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] ddf = class=Point name=Unnamed dimension=3 values=[0.00119456,-0.00197254,0.00476249] ddf (FD)= class=Point name=Unnamed dimension=3 values=[0.00119456,-0.00197254,0.00476249] log pdf=-5.135163 pdf =0.005886 cdf=0.115110 ccdf=0.884890 quantile= class=Point name=Unnamed dimension=3 values=[5.96551,6.93727,4.61725] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[-2.96551,-5.93727,-0.617253] Survival(inverseSurvival)=0.950000 mean= class=Point name=Unnamed dimension=3 values=[1.5,0.5,2] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4.66667,3.66667,0.666667,3.66667,9.66667,2.16667,0.666667,2.16667,1.66667] parameters= [class=PointWithDescription name=Normal dimension=2 description=[mean_0,standard_deviation_0] values=[0.5,2],class=PointWithDescription name=Normal dimension=2 description=[mean_0,standard_deviation_0] values=[1.5,2],class=PointWithDescription name=Normal dimension=2 description=[mean_0,standard_deviation_0] values=[2.5,2],class=PointWithDescription name=dependence dimension=9 description=[atom_0_R_1_0,atom_0_R_2_0,atom_0_R_2_1,atom_1_R_1_0,atom_1_R_2_0,atom_1_R_2_1,atom_2_R_1_0,atom_2_R_2_0,atom_2_R_2_1] values=[0.5,0,0.5,0.5,0,0.5,0.5,0,0.5]] standard moment n= 0 value= [1,1,1] standard moment n= 1 value= [1.5,0.5,2] standard moment n= 2 value= [6.91667,9.91667,5.66667] standard moment n= 3 value= [24.375,14.625,18] standard moment n= 4 value= [132.729,294.229,63.6667] standard moment n= 5 value= [650.094,711.281,242] Standard representative= Mixture((w = 0.333333, d = Normal(mu = [0.5,-0.5,1], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]])), (w = 0.333333, d = Normal(mu = [1.5,0.5,2], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]])), (w = 0.333333, d = Normal(mu = [2.5,1.5,3], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]]))) newMixture pdf= 0.135652911626 atoms kept in mixture= [Normal(mu = 2, sigma = 2),Normal(mu = 3, sigma = 3)] newMixture= Mixture((w = 0.0724638, d = Normal(mu = 2, sigma = 2)), (w = 0.927536, d = Normal(mu = 3, sigma = 3))) openturns-1.9/python/test/t_Mixture_std.py000077500000000000000000000207001307543307100211310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dimension = 3 meanPoint = Point(dimension, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dimension, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dimension) for i in range(1, dimension): R[i, i - 1] = 0.5 # Create a collection of distribution aCollection = DistributionCollection() aCollection.add(Normal(meanPoint, sigma, R)) meanPoint += Point(meanPoint.getDimension(), 1.0) aCollection.add(Normal(meanPoint, sigma, R)) meanPoint += Point(meanPoint.getDimension(), 1.0) aCollection.add(Normal(meanPoint, sigma, R)) # Instanciate one distribution object distribution = Mixture( aCollection, Point(aCollection.getSize(), 2.0)) print("Distribution ", repr(distribution)) print("Weights = ", repr(distribution.getWeights())) weights = distribution.getWeights() weights[0] = 2.0 * weights[0] distribution.setWeights(weights) print("After update, new weights = ", repr(distribution.getWeights())) distribution = Mixture(aCollection) print("Distribution ", repr(distribution)) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 1000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique ddfFD = Point(dimension) for i in range(dimension): left = Point(point) left[i] += eps right = Point(point) right[i] -= eps ddfFD[i] = (distribution.computePDF(left) - distribution.computePDF(right)) / (2.0 * eps) print("ddf (FD)=", repr(ddfFD)) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF if (dimension == 1): print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) # PDFgr = distribution.computePDFGradient( point ) # print "pdf gradient =" , repr(PDFgr) # by the finite difference technique # PDFgrFD = Point(4) # PDFgrFD[0] = (Mixture(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point) - # Mixture(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) # PDFgrFD[1] = (Mixture(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computePDF(point) - # Mixture(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) # PDFgrFD[2] = (Mixture(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computePDF(point) - # Mixture(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) # PDFgrFD[3] = (Mixture(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computePDF(point) - # Mixture(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) # print "pdf gradient (FD)=" , repr(PDFgrFD) # derivative of the PDF with regards the parameters of the distribution # CDFgr = distribution.computeCDFGradient( point ) # print "cdf gradient =" , repr(CDFgr) # CDFgrFD = Point(4) # CDFgrFD[0] = (Mixture(distribution.getR() + eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point) - # Mixture(distribution.getR() - eps, distribution.getT(), distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) # CDFgrFD[1] = (Mixture(distribution.getR(), distribution.getT() + eps, distribution.getA(), distribution.getB()).computeCDF(point) - # Mixture(distribution.getR(), distribution.getT() - eps, distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) # CDFgrFD[2] = (Mixture(distribution.getR(), distribution.getT(), distribution.getA() + eps, distribution.getB()).computeCDF(point) - # Mixture(distribution.getR(), distribution.getT(), distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) # CDFgrFD[3] = (Mixture(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() + eps).computeCDF(point) - # Mixture(distribution.getR(), distribution.getT(), distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) # print "cdf gradient (FD)=", repr(CDFgrFD) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions if distribution.getDimension() <= 2: interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Constructor with separate weights. Also check small weights removal weights = [1.0e-20, 2.5, 32.0] atoms = DistributionCollection( [Normal(1.0, 1.0), Normal(2.0, 2.0), Normal(3.0, 3.0)]) newMixture = Mixture(atoms, weights) print("newMixture pdf= %.12g" % newMixture.computePDF(2.5)) print("atoms kept in mixture=", newMixture.getDistributionCollection()) print("newMixture=", newMixture) except: import sys print("t_Mixture_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MonomialFunctionFactory_std.expout000066400000000000000000000011761307543307100252040ustar00rootroot00000000000000factory = class=MonomialFunctionFactory Build functions for degrees in 1..9 P_0=[x] -> 1 P_1=[x] --> x P_2=[x] --> x^2 P_3=[x] --> x^3 P_4=[x] --> x^4 P_5=[x] --> x^5 P_6=[x] --> x^6 P_7=[x] --> x^7 P_8=[x] --> x^8 P_9=[x] --> x^9 Build as MonomialFunction for degrees in 1..9 P_0=class=MonomialFunction degree=0 P_1=class=MonomialFunction degree=1 P_2=class=MonomialFunction degree=2 P_3=class=MonomialFunction degree=3 P_4=class=MonomialFunction degree=4 P_5=class=MonomialFunction degree=5 P_6=class=MonomialFunction degree=6 P_7=class=MonomialFunction degree=7 P_8=class=MonomialFunction degree=8 P_9=class=MonomialFunction degree=9 openturns-1.9/python/test/t_MonomialFunctionFactory_std.py000077500000000000000000000007331307543307100243110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Define factory factory = ot.MonomialFunctionFactory() print ("factory = ", factory) print ("Build functions for degrees in 1..9") for i in range(10): print ("P_%d=%s" % (i, factory.build(i).__str__())) # Build as Monomial factory print ("Build as MonomialFunction for degrees in 1..9") for i in range(10): print ("P_%d=%s" % (i, factory.buildAsMonomialFunction(i).__repr__())) openturns-1.9/python/test/t_MonomialFunction_std.expout000066400000000000000000000004721307543307100236520ustar00rootroot00000000000000P0 : [x] -> 1 P0( 1.2 )= 1.0 P : [x] --> x P(1) = 1.0, dP(1) = 1.0, d^2P(1) = 0.0 P : [x] --> x^2 P(1) = 1.0, dP(1) = 2.0, d^2P(1) = 2.0 P : [x] --> x^3 P(1) = 1.0, dP(1) = 3.0, d^2P(1) = 6.0 P : [x] --> x^4 P(1) = 1.0, dP(1) = 4.0, d^2P(1) = 12.0 P : [x] --> x^5 P(1) = 1.0, dP(1) = 5.0, d^2P(1) = 20.0 openturns-1.9/python/test/t_MonomialFunction_std.py000077500000000000000000000007651307543307100227660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Default constructor: null polynomial P0 = ot.MonomialFunction() point = 1.2 print("P0 :", P0) print("P0(", point, ")=", P0(point)) # Standard constructor : set degree/coefficients degrees = range(1, 6) for degree in degrees: print("\n") P = ot.MonomialFunction(degree) print("P :", P) print("P(1) = %1.1f, dP(1) = %1.1f, d^2P(1) = %1.1f" % (P(1.0), P.gradient(1.0), P.hessian(1.0))) openturns-1.9/python/test/t_MonteCarloExperiment_std.expout000066400000000000000000000017761307543307100245050ustar00rootroot00000000000000myPlane = class=MonteCarloExperiment name=Unnamed distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] size=10 sample = class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=10 dimension=4 description=[X0,X1,X2,X3] data=[[0.608202,-1.26617,-0.438266,1.20548],[-2.18139,0.350042,-0.355007,1.43725],[0.810668,0.793156,-0.470526,0.261018],[-2.29006,-1.28289,-1.31178,-0.0907838],[0.995793,-0.139453,-0.560206,0.44549],[0.322925,0.445785,-1.03808,-0.856712],[0.473617,-0.125498,0.351418,1.78236],[0.0702074,-0.781366,-0.721533,-0.241223],[-1.78796,0.40136,1.36783,1.00434],[0.741548,-0.0436123,0.539345,0.29995]] weights = class=Point name=Unnamed dimension=10 values=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1] openturns-1.9/python/test/t_MonteCarloExperiment_std.py000077500000000000000000000007741307543307100236110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Normal(4) size = 10 myPlane = MonteCarloExperiment(distribution, size) print("myPlane = ", myPlane) sample, weights = myPlane.generateWithWeights() print("sample = ", repr(sample)) print("weights = ", repr(weights)) except: import sys print("t_MonteCarloExperiment_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MonteCarloLHS_std.expout000066400000000000000000000116061307543307100230040ustar00rootroot00000000000000lhs= LHSExperiment(distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1, size25, always shuffle=true, random shift=false Bounds of uniform distributions= [0, 1] [0, 1] [0, 1] design= [ X0 X1 X2 ] 0 : [ 0.18 0.86 0.26 ] 1 : [ 0.66 0.22 0.62 ] 2 : [ 0.98 0.34 0.86 ] 3 : [ 0.7 0.26 0.74 ] 4 : [ 0.94 0.54 0.54 ] 5 : [ 0.22 0.66 0.5 ] 6 : [ 0.86 0.9 0.1 ] 7 : [ 0.74 0.1 0.38 ] 8 : [ 0.46 0.78 0.3 ] 9 : [ 0.82 0.7 0.82 ] 10 : [ 0.26 0.62 0.02 ] 11 : [ 0.54 0.06 0.34 ] 12 : [ 0.1 0.58 0.7 ] 13 : [ 0.9 0.74 0.14 ] 14 : [ 0.02 0.3 0.78 ] 15 : [ 0.58 0.14 0.46 ] 16 : [ 0.78 0.46 0.94 ] 17 : [ 0.3 0.42 0.9 ] 18 : [ 0.5 0.5 0.58 ] 19 : [ 0.38 0.82 0.06 ] 20 : [ 0.42 0.02 0.98 ] 21 : [ 0.14 0.98 0.42 ] 22 : [ 0.34 0.18 0.18 ] 23 : [ 0.06 0.94 0.22 ] 24 : [ 0.62 0.38 0.66 ] PhiP=7.538512, C2=0.080495, MinDist=0.132665 optimal lhs= class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true simulation size=1000 Best design with MonteCarlo and C2 space filling= [ X0 X1 X2 ] 0 : [ 0.26 0.22 0.66 ] 1 : [ 0.78 0.74 0.58 ] 2 : [ 0.18 0.9 0.82 ] 3 : [ 0.5 0.7 0.22 ] 4 : [ 0.62 0.98 0.1 ] 5 : [ 0.7 0.46 0.54 ] 6 : [ 0.22 0.66 0.3 ] 7 : [ 0.54 0.58 0.7 ] 8 : [ 0.46 0.34 0.94 ] 9 : [ 0.9 0.62 0.9 ] 10 : [ 0.74 0.38 0.98 ] 11 : [ 0.94 0.06 0.78 ] 12 : [ 0.58 0.5 0.26 ] 13 : [ 0.34 0.54 0.06 ] 14 : [ 0.42 0.02 0.46 ] 15 : [ 0.66 0.82 0.86 ] 16 : [ 0.38 0.18 0.14 ] 17 : [ 0.82 0.26 0.34 ] 18 : [ 0.1 0.42 0.5 ] 19 : [ 0.02 0.3 0.18 ] 20 : [ 0.98 0.78 0.42 ] 21 : [ 0.06 0.94 0.62 ] 22 : [ 0.86 0.1 0.02 ] 23 : [ 0.14 0.14 0.74 ] 24 : [ 0.3 0.86 0.38 ] Final criteria: C2=0.048262, PhiP=6.063391, MinDist=0.164924 optimal lhs= class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 simulation size=1000 Best design with MonteCarlo and PhiP space filling= [ X0 X1 X2 ] 0 : [ 0.7 0.5 0.42 ] 1 : [ 0.66 0.46 0.62 ] 2 : [ 0.46 0.94 0.02 ] 3 : [ 0.42 0.18 0.18 ] 4 : [ 0.3 0.14 0.46 ] 5 : [ 0.74 0.74 0.14 ] 6 : [ 0.22 0.86 0.3 ] 7 : [ 0.94 0.22 0.82 ] 8 : [ 0.98 0.1 0.38 ] 9 : [ 0.38 0.9 0.94 ] 10 : [ 0.5 0.62 0.7 ] 11 : [ 0.58 0.02 0.86 ] 12 : [ 0.14 0.26 0.66 ] 13 : [ 0.62 0.06 0.26 ] 14 : [ 0.86 0.98 0.58 ] 15 : [ 0.26 0.58 0.5 ] 16 : [ 0.54 0.38 0.78 ] 17 : [ 0.78 0.42 0.1 ] 18 : [ 0.1 0.3 0.9 ] 19 : [ 0.82 0.66 0.74 ] 20 : [ 0.18 0.82 0.98 ] 21 : [ 0.34 0.7 0.22 ] 22 : [ 0.02 0.78 0.34 ] 23 : [ 0.9 0.34 0.54 ] 24 : [ 0.06 0.54 0.06 ] Final criteria: C2=0.054637, PhiP=4.849115, MinDist=0.207846 optimal lhs= class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=25 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingMinDist minimization=false simulation size=1000 Best design with MonteCarlo and MinDist space filling= [ X0 X1 X2 ] 0 : [ 0.94 0.82 0.42 ] 1 : [ 0.98 0.06 0.82 ] 2 : [ 0.62 0.26 0.7 ] 3 : [ 0.82 0.1 0.38 ] 4 : [ 0.38 0.62 0.74 ] 5 : [ 0.86 0.22 0.66 ] 6 : [ 0.54 0.34 0.1 ] 7 : [ 0.3 0.9 0.02 ] 8 : [ 0.22 0.7 0.9 ] 9 : [ 0.78 0.42 0.86 ] 10 : [ 0.9 0.3 0.46 ] 11 : [ 0.06 0.46 0.94 ] 12 : [ 0.18 0.94 0.78 ] 13 : [ 0.42 0.58 0.18 ] 14 : [ 0.58 0.74 0.54 ] 15 : [ 0.34 0.78 0.34 ] 16 : [ 0.14 0.54 0.3 ] 17 : [ 0.74 0.66 0.14 ] 18 : [ 0.26 0.02 0.5 ] 19 : [ 0.02 0.86 0.22 ] 20 : [ 0.1 0.5 0.62 ] 21 : [ 0.7 0.98 0.06 ] 22 : [ 0.46 0.14 0.58 ] 23 : [ 0.66 0.18 0.26 ] 24 : [ 0.5 0.38 0.98 ] Final criteria: C2=0.069361, PhiP=4.679805, MinDist=0.215407 openturns-1.9/python/test/t_MonteCarloLHS_std.py000077500000000000000000000047371307543307100221220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Defining parameters dimension = 3 size = 25 # Specifiy if initial LHS is centered or randomized centered = True # Build standard LHS algorithm distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension) lhs = ot.LHSExperiment(distribution, size) lhs.setRandomShift(not centered) # centered lhs.setAlwaysShuffle(True) # randomized # print the object print("lhs=", lhs) print("Bounds of uniform distributions=", distribution.getRange()) # Generate design without optimization design = lhs.generate() print("design=", design) # Defining space fillings spaceFillingPhiP = ot.SpaceFillingPhiP() spaceFillingC2 = ot.SpaceFillingC2() spaceFillingMinDist = ot.SpaceFillingMinDist() # print the criteria on this design print("PhiP=%f, C2=%f, MinDist=%f" % (spaceFillingPhiP.evaluate(design), spaceFillingC2.evaluate(design), spaceFillingMinDist.evaluate(design))) # --------------------------------------------------# # ------------ MonteCarlo algorithm ------------- # # --------------------------------------------------# # RandomBruteForce MonteCarlo with N designs N = 1000 # 1) LHS with C2 optimization optimalLHSAlgorithmC2 = ot.MonteCarloLHS(lhs, N, spaceFillingC2) # print lhs print("optimal lhs=", optimalLHSAlgorithmC2) design = optimalLHSAlgorithmC2.generate() print("Best design with MonteCarlo and C2 space filling=", design) resultC2 = optimalLHSAlgorithmC2.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (resultC2.getC2(), resultC2.getPhiP(), resultC2.getMinDist())) # 2) LHS with PhiP optimization optimalLHSAlgorithmPhiP = ot.MonteCarloLHS(lhs, N, spaceFillingPhiP) print("optimal lhs=", optimalLHSAlgorithmPhiP) design = optimalLHSAlgorithmPhiP.generate() print("Best design with MonteCarlo and PhiP space filling=", design) resultPhiP = optimalLHSAlgorithmPhiP.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (resultPhiP.getC2(), resultPhiP.getPhiP(), resultPhiP.getMinDist())) # 3) LHS with MinDist optimization optimalLHSAlgorithmMinDist = ot.MonteCarloLHS(lhs, N, spaceFillingMinDist) print("optimal lhs=", optimalLHSAlgorithmMinDist) design = optimalLHSAlgorithmMinDist.generate() print("Best design with MonteCarlo and MinDist space filling=", design) resultMinDist = optimalLHSAlgorithmMinDist.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (resultMinDist.getC2(), resultMinDist.getPhiP(), resultMinDist.getMinDist())) openturns-1.9/python/test/t_MonteCarlo_draw.expout000066400000000000000000000027771307543307100226110ustar00rootroot00000000000000MonteCarlo= class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=500 maximumCoefficientOfVariation=0.05 maximumStandardDeviation=0 blockSize=10 MonteCarlo result= probabilityEstimate=1.415730e-01 varianceEstimate=5.008983e-05 standard deviation=7.08e-03 coefficient of variation=5.00e-02 confidenceLength(0.95)=2.77e-02 outerSampling=267 blockSize=10 openturns-1.9/python/test/t_MonteCarlo_draw.py000077500000000000000000000027061307543307100217100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('y',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create a Monte Carlo algorithm myAlgo = MonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(500) myAlgo.setBlockSize(10) myAlgo.setMaximumCoefficientOfVariation(0.05) print("MonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("MonteCarlo result=", myAlgo.getResult()) # Draw the convergence graph convergenceGraph = myAlgo.drawProbabilityConvergence() convergenceGraph.draw("convergenceMonteCarlo.png") except: import sys print("t_MonteCarlo_draw.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MonteCarlo_sensitivity.expout000066400000000000000000000032151307543307100242320ustar00rootroot00000000000000MonteCarlo= class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=500 maximumCoefficientOfVariation=0.05 maximumStandardDeviation=0 blockSize=10 MonteCarlo result= probabilityEstimate=1.415730e-01 varianceEstimate=5.008983e-05 standard deviation=7.08e-03 coefficient of variation=5.00e-02 confidenceLength(0.95)=2.77e-02 outerSampling=267 blockSize=10 mean point in event domain= [49.984,2.30321,10.6115,4.39049] importance factors= [X0 : 0.000105128, X1 : 0.694893, X2 : 0.153, X3 : 0.152001] openturns-1.9/python/test/t_MonteCarlo_sensitivity.py000077500000000000000000000030401307543307100233350ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('y',), ('-F*L^3/(3.*E*I)',)) myFunction.enableHistory() dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create a Monte Carlo algorithm myAlgo = MonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(500) myAlgo.setBlockSize(10) myAlgo.setMaximumCoefficientOfVariation(0.05) print("MonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result result = myAlgo.getResult() print("MonteCarlo result=", result) # Compute sensitivity informations print("mean point in event domain=", result.getMeanPointInEventDomain()) print("importance factors=", result.getImportanceFactors()) except: import sys print("t_MonteCarlo_sensitivity.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_MonteCarlo_std.expout000066400000000000000000000057601307543307100224410ustar00rootroot00000000000000MonteCarlo= class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 MonteCarlo result= probabilityEstimate=1.465054e-01 varianceEstimate=2.109726e-04 standard deviation=1.45e-02 coefficient of variation=9.91e-02 confidenceLength(0.95)=5.69e-02 outerSampling=186 blockSize=4 MonteCarlo= class=MonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0 maximumStandardDeviation=0.1 blockSize=4 MonteCarlo result= probabilityEstimate=1.500000e-01 varianceEstimate=8.250000e-03 standard deviation=9.08e-02 coefficient of variation=6.06e-01 confidenceLength(0.95)=3.56e-01 outerSampling=5 blockSize=4 openturns-1.9/python/test/t_MonteCarlo_std.py000077500000000000000000000032521307543307100215420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import sys import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) def progress(percent): sys.stderr.write('-- progress=' + str(percent) + '%\n') def stop(): sys.stderr.write('-- stop?\n') return False # We create a numerical math function myFunction = ot.Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = [0.0] * dim # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = [1.0] * dim R = ot.IdentityMatrix(dim) myDistribution = ot.Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = ot.RandomVector(myDistribution) # We create a composite random vector output = ot.RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = ot.Event(output, ot.Less(), -3.0) # We create a Monte Carlo algorithm myAlgo = ot.MonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.1) print("MonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("MonteCarlo result=", myAlgo.getResult()) # Use the standard deviation as a stoping rule myAlgo = ot.MonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.0) myAlgo.setMaximumStandardDeviation(0.1) myAlgo.setProgressCallback(progress) myAlgo.setStopCallback(stop) print("MonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("MonteCarlo result=", myAlgo.getResult()) openturns-1.9/python/test/t_MultiStart_std.expout000066400000000000000000000074701307543307100225060ustar00rootroot00000000000000-- local search x*= [0.296446,0.320196] f(x*)= [-0.0649359] -- algo= class=MultiStart class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,z] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-3,-3] upper bound=class=Point name=Unnamed dimension=2 values=[3,3] finite lower bound=[1,1] finite upper bound=[1,1] minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false solver=class=OptimizationAlgorithm implementation=class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x,y,z] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x,y] outputVariablesNames=[z] formulas=[3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=2 lower bound=class=Point name=Unnamed dimension=2 values=[-3,-3] upper bound=class=Point name=Unnamed dimension=2 values=[3,3] finite lower bound=[1,1] finite upper bound=[1,1] minimization=true dimension=2 startingPoint=class=Point name=Unnamed dimension=2 values=[0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 startingPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=20 dimension=2 description=[X0,X1] data=[[-1.64389,1.80999],[1.56336,0.169422],[3.2695,-1.46248],[-2.52693,3.08709],[2.5598,-5.27863],[-0.710275,0.327982],[-1.98185,-0.345198],[-2.82356,0.898389],[-1.13728,1.59249],[-0.267294,-2.12881],[-4.12169,2.36466],[0.747347,-0.529142],[-0.211102,-1.85201],[1.10784,4.89323],[-0.9256,-0.946131],[1.684,1.11831],[0.31593,-0.102432],[3.46619,-1.05533],[0.121142,0.692728],[1.03672,-2.74247]] -- multistart x*= [0.228279,-1.62553] f(x*)= [-6.55113] openturns-1.9/python/test/t_MultiStart_std.py000077500000000000000000000017541307543307100216140ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # ot.Log.Show(ot.Log.ALL) dim = 2 # problem model = ot.Function(['x', 'y'], ['z'], ['3*(1-x)^2*exp(-x^2-(y+1)^2)-10*(x/5-x^3-y^5)*exp(-x^2-y^2)-exp(-(x+1)^2-y^2)/3']) bounds = ot.Interval([-3.0] * dim, [3.0] * dim) problem = ot.OptimizationProblem(model) problem.setBounds(bounds) # solver solver = ot.TNC(problem) # run locally solver.setStartingPoint([0.0] * dim) algo = solver algo.run() result = algo.getResult() print('-- local search x*=', result.getOptimalPoint(), 'f(x*)=', result.getOptimalValue()) # multistart distribution = ot.Normal([0.0] * dim, [2.0] * dim, ot.CorrelationMatrix(dim)) experiment = ot.LHSExperiment(distribution, 20) startingPoints = experiment.generate() algo = ot.MultiStart(solver, startingPoints) print('-- algo=', algo) algo.run() result = algo.getResult() print('-- multistart x*=', result.getOptimalPoint(), 'f(x*)=', result.getOptimalValue()) openturns-1.9/python/test/t_MultinomialFactory_std.expout000066400000000000000000000010011307543307100242000ustar00rootroot00000000000000distribution= class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 Estimated distribution= class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.2527,0.24672,0.25122] n=5 Default distribution= Multinomial(n = 1, p = [0.5]) Multinomial = Multinomial(n = 5, p = [0.25,0.25,0.25]) Estimated multinomial= Multinomial(n = 5, p = [0.2527,0.24672,0.25122]) Default multinomial= Multinomial(n = 1, p = [0.5]) openturns-1.9/python/test/t_MultinomialFactory_std.py000077500000000000000000000016411307543307100233210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Multinomial(5, Point(3, 0.25)) size = 10000 sample = distribution.getSample(size) factory = MultinomialFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedMultinomial = factory.buildAsMultinomial(sample) print("Multinomial =", distribution) print("Estimated multinomial=", estimatedMultinomial) estimatedMultinomial = factory.buildAsMultinomial() print("Default multinomial=", estimatedMultinomial) except: import sys print("t_MultinomialFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Multinomial_std.expout000066400000000000000000000047621307543307100226710ustar00rootroot00000000000000Distribution class=Multinomial name=Multinomial dimension=3 p=class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] n=5 Distribution Multinomial(n = 5, p = [0.25,0.25,0.25]) Elliptical = False Continuous = False oneRealization= [1,2,0] oneSample first= class=Point name=Unnamed dimension=3 values=[0,1,4] last= class=Point name=Unnamed dimension=3 values=[3,1,0] mean= class=Point name=Unnamed dimension=3 values=[1.2635,1.2335,1.2564] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.937762,-0.300457,-0.315593,-0.300457,0.930871,-0.314301,-0.315593,-0.314301,0.947554] support= 0 : [ 0 0 0 ] 1 : [ 1 0 0 ] 2 : [ 0 1 0 ] 3 : [ 0 0 1 ] 4 : [ 2 0 0 ] 5 : [ 1 1 0 ] 6 : [ 1 0 1 ] 7 : [ 0 2 0 ] 8 : [ 0 1 1 ] 9 : [ 0 0 2 ] 10 : [ 3 0 0 ] 11 : [ 2 1 0 ] 12 : [ 2 0 1 ] 13 : [ 1 2 0 ] 14 : [ 1 1 1 ] 15 : [ 1 0 2 ] 16 : [ 0 3 0 ] 17 : [ 0 2 1 ] 18 : [ 0 1 2 ] 19 : [ 0 0 3 ] 20 : [ 4 0 0 ] 21 : [ 3 1 0 ] 22 : [ 3 0 1 ] 23 : [ 2 2 0 ] 24 : [ 2 1 1 ] 25 : [ 2 0 2 ] 26 : [ 1 3 0 ] 27 : [ 1 2 1 ] 28 : [ 1 1 2 ] 29 : [ 1 0 3 ] 30 : [ 0 4 0 ] 31 : [ 0 3 1 ] 32 : [ 0 2 2 ] 33 : [ 0 1 3 ] 34 : [ 0 0 4 ] 35 : [ 5 0 0 ] 36 : [ 4 1 0 ] 37 : [ 4 0 1 ] 38 : [ 3 2 0 ] 39 : [ 3 1 1 ] 40 : [ 3 0 2 ] 41 : [ 2 3 0 ] 42 : [ 2 2 1 ] 43 : [ 2 1 2 ] 44 : [ 2 0 3 ] 45 : [ 1 4 0 ] 46 : [ 1 3 1 ] 47 : [ 1 2 2 ] 48 : [ 1 1 3 ] 49 : [ 1 0 4 ] 50 : [ 0 5 0 ] 51 : [ 0 4 1 ] 52 : [ 0 3 2 ] 53 : [ 0 2 3 ] 54 : [ 0 1 4 ] 55 : [ 0 0 5 ] support restricted to the interval= [1, 3] [1, 3] [1, 3] gives= 0 : [ 1 1 1 ] 1 : [ 2 1 1 ] 2 : [ 1 2 1 ] 3 : [ 1 1 2 ] 4 : [ 3 1 1 ] 5 : [ 2 2 1 ] 6 : [ 2 1 2 ] 7 : [ 1 3 1 ] 8 : [ 1 2 2 ] 9 : [ 1 1 3 ] Point= class=Point name=Unnamed dimension=3 values=[1,1,1] log pdf=-2.837127 pdf =0.058594 cdf=0.13281 quantile= class=Point name=Unnamed dimension=3 values=[3,3,3] cdf(quantile)= 0.953125 mean= class=Point name=Unnamed dimension=3 values=[1.25,1.25,1.25] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.9375,-0.3125,-0.3125,-0.3125,0.9375,-0.3125,-0.3125,-0.3125,0.9375] parameters= [class=PointWithDescription name=X0 dimension=2 description=[n,p_0] values=[5,0.25],class=PointWithDescription name=X1 dimension=2 description=[n,p_1] values=[5,0.25],class=PointWithDescription name=X2 dimension=2 description=[n,p_2] values=[5,0.25],class=PointWithDescription name=dependence dimension=4 description=[n,p_0,p_1,p_2] values=[5,0.25,0.25,0.25]] openturns-1.9/python/test/t_Multinomial_std.py000077500000000000000000000041031307543307100217650ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Multinomial(5, Point(3, 0.25)) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) print("support=\n" + str(distribution.getSupport())) interval = Interval(Point(distribution.getDimension(), 1.0), Point(distribution.getDimension(), 3.0)) print("support restricted to the interval=\n" + str(interval) + " gives=\n" + str(distribution.getSupport(interval))) # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF at point LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) CDF = distribution.computeCDF(point) print("cdf=%.5f" % CDF) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)= %.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) except: import sys print("t_Multinomial.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NLopt_std.expout000066400000000000000000000512061307543307100214260ustar00rootroot00000000000000algo= class=NLopt algorithm=AUGLAG x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=AUGLAG x^= [0.000,0.000,0.000,0.000] algo= class=NLopt algorithm=AUGLAG x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=AUGLAG x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GD_MLSL inequality= True equality= True -- Not supported: algo= GD_MLSL inequality= True equality= False -- Not supported: algo= GD_MLSL inequality= False equality= True algo= class=NLopt algorithm=GD_MLSL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GD_MLSL inequality= True equality= True -- Not supported: algo= GD_MLSL inequality= True equality= False -- Not supported: algo= GD_MLSL inequality= False equality= True algo= class=NLopt algorithm=GD_MLSL x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GD_MLSL_LDS inequality= True equality= True -- Not supported: algo= GD_MLSL_LDS inequality= True equality= False -- Not supported: algo= GD_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=GD_MLSL_LDS x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GD_MLSL_LDS inequality= True equality= True -- Not supported: algo= GD_MLSL_LDS inequality= True equality= False -- Not supported: algo= GD_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=GD_MLSL_LDS x^= [5.000,5.000,-3.000,5.000] -- Skipped: algo= GD_STOGO -- Skipped: algo= GD_STOGO_RAND -- Not supported: algo= GN_CRS2_LM inequality= True equality= True -- Not supported: algo= GN_CRS2_LM inequality= True equality= False -- Not supported: algo= GN_CRS2_LM inequality= False equality= True algo= class=NLopt algorithm=GN_CRS2_LM x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_CRS2_LM inequality= True equality= True -- Not supported: algo= GN_CRS2_LM inequality= True equality= False -- Not supported: algo= GN_CRS2_LM inequality= False equality= True algo= class=NLopt algorithm=GN_CRS2_LM x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT inequality= True equality= True -- Not supported: algo= GN_DIRECT inequality= True equality= False -- Not supported: algo= GN_DIRECT inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT inequality= True equality= True -- Not supported: algo= GN_DIRECT inequality= True equality= False -- Not supported: algo= GN_DIRECT inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT_L inequality= True equality= True -- Not supported: algo= GN_DIRECT_L inequality= True equality= False -- Not supported: algo= GN_DIRECT_L inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT_L inequality= True equality= True -- Not supported: algo= GN_DIRECT_L inequality= True equality= False -- Not supported: algo= GN_DIRECT_L inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_NOSCAL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_NOSCAL x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT_L_RAND inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_RAND inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_RAND inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_RAND x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT_L_RAND inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_RAND inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_RAND inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_RAND x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_RAND_NOSCAL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_L_RAND_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_L_RAND_NOSCAL x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_DIRECT_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_NOSCAL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_DIRECT_NOSCAL inequality= True equality= True -- Not supported: algo= GN_DIRECT_NOSCAL inequality= True equality= False -- Not supported: algo= GN_DIRECT_NOSCAL inequality= False equality= True algo= class=NLopt algorithm=GN_DIRECT_NOSCAL x^= [5.000,5.000,-3.000,5.000] -- Skipped: algo= GN_ESCH algo= class=NLopt algorithm=GN_ISRES x^= [4.743,-2.725,4.575,1.995] algo= class=NLopt algorithm=GN_ISRES x^= [4.942,-2.770,4.868,-2.901] algo= class=NLopt algorithm=GN_ISRES x^= [-2.400,-2.859,4.994,2.001] algo= class=NLopt algorithm=GN_ISRES x^= [-2.621,-2.944,4.946,-2.900] algo= class=NLopt algorithm=GN_ISRES x^= [4.942,4.443,-2.976,1.999] algo= class=NLopt algorithm=GN_ISRES x^= [4.904,4.918,-2.999,4.900] algo= class=NLopt algorithm=GN_ISRES x^= [3.870,4.167,-2.983,2.009] algo= class=NLopt algorithm=GN_ISRES x^= [4.996,4.830,-2.996,4.986] -- Not supported: algo= GN_MLSL inequality= True equality= True -- Not supported: algo= GN_MLSL inequality= True equality= False -- Not supported: algo= GN_MLSL inequality= False equality= True algo= class=NLopt algorithm=GN_MLSL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_MLSL inequality= True equality= True -- Not supported: algo= GN_MLSL inequality= True equality= False -- Not supported: algo= GN_MLSL inequality= False equality= True algo= class=NLopt algorithm=GN_MLSL x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_MLSL_LDS inequality= True equality= True -- Not supported: algo= GN_MLSL_LDS inequality= True equality= False -- Not supported: algo= GN_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=GN_MLSL_LDS x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_MLSL_LDS inequality= True equality= True -- Not supported: algo= GN_MLSL_LDS inequality= True equality= False -- Not supported: algo= GN_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=GN_MLSL_LDS x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_ORIG_DIRECT inequality= True equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT x^= [4.951,-2.995,4.951,-2.998] -- Not supported: algo= GN_ORIG_DIRECT inequality= False equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_ORIG_DIRECT inequality= True equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_ORIG_DIRECT inequality= False equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_ORIG_DIRECT_L inequality= True equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT_L x^= [1.000,-3.000,1.000,-3.000] -- Not supported: algo= GN_ORIG_DIRECT_L inequality= False equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT_L x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= GN_ORIG_DIRECT_L inequality= True equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT_L x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= GN_ORIG_DIRECT_L inequality= False equality= True algo= class=NLopt algorithm=GN_ORIG_DIRECT_L x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= G_MLSL inequality= True equality= True -- Not supported: algo= G_MLSL inequality= True equality= False -- Not supported: algo= G_MLSL inequality= False equality= True algo= class=NLopt algorithm=G_MLSL x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= G_MLSL inequality= True equality= True -- Not supported: algo= G_MLSL inequality= True equality= False -- Not supported: algo= G_MLSL inequality= False equality= True algo= class=NLopt algorithm=G_MLSL x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= G_MLSL_LDS inequality= True equality= True -- Not supported: algo= G_MLSL_LDS inequality= True equality= False -- Not supported: algo= G_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=G_MLSL_LDS x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= G_MLSL_LDS inequality= True equality= True -- Not supported: algo= G_MLSL_LDS inequality= True equality= False -- Not supported: algo= G_MLSL_LDS inequality= False equality= True algo= class=NLopt algorithm=G_MLSL_LDS x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [0.000,0.000,0.000,0.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_CCSAQ inequality= True equality= True algo= class=NLopt algorithm=LD_CCSAQ x^= [5.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_CCSAQ inequality= False equality= True algo= class=NLopt algorithm=LD_CCSAQ x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_CCSAQ inequality= True equality= True algo= class=NLopt algorithm=LD_CCSAQ x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_CCSAQ inequality= False equality= True algo= class=NLopt algorithm=LD_CCSAQ x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_LBFGS inequality= True equality= True -- Not supported: algo= LD_LBFGS inequality= True equality= False -- Not supported: algo= LD_LBFGS inequality= False equality= True algo= class=NLopt algorithm=LD_LBFGS x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_LBFGS inequality= True equality= True -- Not supported: algo= LD_LBFGS inequality= True equality= False -- Not supported: algo= LD_LBFGS inequality= False equality= True algo= class=NLopt algorithm=LD_LBFGS x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= True equality= True -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= True equality= False -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= False equality= True algo= class=NLopt algorithm=LD_LBFGS_NOCEDAL -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= False equality= False -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= True equality= True -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= True equality= False -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= False equality= True algo= class=NLopt algorithm=LD_LBFGS_NOCEDAL -- Not supported: algo= LD_LBFGS_NOCEDAL inequality= False equality= False -- Not supported: algo= LD_MMA inequality= True equality= True algo= class=NLopt algorithm=LD_MMA x^= [5.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_MMA inequality= False equality= True algo= class=NLopt algorithm=LD_MMA x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_MMA inequality= True equality= True algo= class=NLopt algorithm=LD_MMA x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_MMA inequality= False equality= True algo= class=NLopt algorithm=LD_MMA x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LD_SLSQP x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LD_SLSQP x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LD_SLSQP x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_TNEWTON inequality= True equality= True -- Not supported: algo= LD_TNEWTON inequality= True equality= False -- Not supported: algo= LD_TNEWTON inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_TNEWTON inequality= True equality= True -- Not supported: algo= LD_TNEWTON inequality= True equality= False -- Not supported: algo= LD_TNEWTON inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_TNEWTON_PRECOND inequality= True equality= True -- Not supported: algo= LD_TNEWTON_PRECOND inequality= True equality= False -- Not supported: algo= LD_TNEWTON_PRECOND inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_PRECOND x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_TNEWTON_PRECOND inequality= True equality= True -- Not supported: algo= LD_TNEWTON_PRECOND inequality= True equality= False -- Not supported: algo= LD_TNEWTON_PRECOND inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_PRECOND x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= True equality= True -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= True equality= False -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_PRECOND_RESTART x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= True equality= True -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= True equality= False -- Not supported: algo= LD_TNEWTON_PRECOND_RESTART inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_PRECOND_RESTART x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_TNEWTON_RESTART inequality= True equality= True -- Not supported: algo= LD_TNEWTON_RESTART inequality= True equality= False -- Not supported: algo= LD_TNEWTON_RESTART inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_RESTART x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_TNEWTON_RESTART inequality= True equality= True -- Not supported: algo= LD_TNEWTON_RESTART inequality= True equality= False -- Not supported: algo= LD_TNEWTON_RESTART inequality= False equality= True algo= class=NLopt algorithm=LD_TNEWTON_RESTART x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_VAR1 inequality= True equality= True -- Not supported: algo= LD_VAR1 inequality= True equality= False -- Not supported: algo= LD_VAR1 inequality= False equality= True algo= class=NLopt algorithm=LD_VAR1 x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_VAR1 inequality= True equality= True -- Not supported: algo= LD_VAR1 inequality= True equality= False -- Not supported: algo= LD_VAR1 inequality= False equality= True algo= class=NLopt algorithm=LD_VAR1 x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LD_VAR2 inequality= True equality= True -- Not supported: algo= LD_VAR2 inequality= True equality= False -- Not supported: algo= LD_VAR2 inequality= False equality= True algo= class=NLopt algorithm=LD_VAR2 x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LD_VAR2 inequality= True equality= True -- Not supported: algo= LD_VAR2 inequality= True equality= False -- Not supported: algo= LD_VAR2 inequality= False equality= True algo= class=NLopt algorithm=LD_VAR2 x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [0.000,0.000,0.000,0.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [-3.000,-3.000,5.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [-3.000,-3.000,5.000,-3.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,5.000,-3.000,2.000] algo= class=NLopt algorithm=LN_AUGLAG_EQ x^= [5.000,5.000,-3.000,5.000] -- Not supported: algo= LN_BOBYQA inequality= True equality= True -- Not supported: algo= LN_BOBYQA inequality= True equality= False -- Not supported: algo= LN_BOBYQA inequality= False equality= True algo= class=NLopt algorithm=LN_BOBYQA x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LN_BOBYQA inequality= True equality= True -- Not supported: algo= LN_BOBYQA inequality= True equality= False -- Not supported: algo= LN_BOBYQA inequality= False equality= True algo= class=NLopt algorithm=LN_BOBYQA x^= [5.000,5.000,-3.000,5.000] -- Skipped: algo= LN_COBYLA -- Not supported: algo= LN_NELDERMEAD inequality= True equality= True -- Not supported: algo= LN_NELDERMEAD inequality= True equality= False -- Not supported: algo= LN_NELDERMEAD inequality= False equality= True algo= class=NLopt algorithm=LN_NELDERMEAD x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LN_NELDERMEAD inequality= True equality= True -- Not supported: algo= LN_NELDERMEAD inequality= True equality= False -- Not supported: algo= LN_NELDERMEAD inequality= False equality= True algo= class=NLopt algorithm=LN_NELDERMEAD x^= [5.000,5.000,-3.000,5.000] -- Skipped: algo= LN_NEWUOA -- Skipped: algo= LN_NEWUOA_BOUND -- Not supported: algo= LN_PRAXIS inequality= True equality= True -- Not supported: algo= LN_PRAXIS inequality= True equality= False -- Not supported: algo= LN_PRAXIS inequality= False equality= True algo= class=NLopt algorithm=LN_PRAXIS x^= [-3.000,-3.000,4.000,-2.000] -- Not supported: algo= LN_PRAXIS inequality= True equality= True -- Not supported: algo= LN_PRAXIS inequality= True equality= False -- Not supported: algo= LN_PRAXIS inequality= False equality= True algo= class=NLopt algorithm=LN_PRAXIS x^= [5.000,4.000,-3.000,2.000] -- Not supported: algo= LN_SBPLX inequality= True equality= True -- Not supported: algo= LN_SBPLX inequality= True equality= False -- Not supported: algo= LN_SBPLX inequality= False equality= True algo= class=NLopt algorithm=LN_SBPLX x^= [-3.000,-3.000,5.000,-3.000] -- Not supported: algo= LN_SBPLX inequality= True equality= True -- Not supported: algo= LN_SBPLX inequality= True equality= False -- Not supported: algo= LN_SBPLX inequality= False equality= True algo= class=NLopt algorithm=LN_SBPLX x^= [5.000,5.000,-3.000,5.000] generalized reliability index=1.009255 openturns-1.9/python/test/t_NLopt_std.py000077500000000000000000000063111307543307100205320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) format = "%." + str(digits) + "f" for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if m.fabs(point[i]) < eps: oss += sep + format % m.fabs(point[i]) else: oss += sep + format % point[i] sep = "," oss += "]" return oss # bounds linear = ot.Function( ['x1', 'x2', 'x3', 'x4'], ['y1'], ['x1+2*x2-3*x3+4*x4']) dim = 4 startingPoint = [0.0] * dim bounds = ot.Interval([-3.] * dim, [5.] * dim) algoNames = ot.NLopt.GetAlgorithmNames() for algoName in algoNames: # STOGO might not be enabled # NEWUOA nan/-nan # COBYLA crashes on squeeze # ESCH not same results with 2.4.1 if 'STOGO' in algoName or 'NEWUOA' in algoName or 'COBYLA' in algoName or 'ESCH' in algoName: print('-- Skipped: algo=', algoName) continue algo = ot.NLopt(algoName) for minimization in [True, False]: for inequality in [True, False]: for equality in [True, False]: problem = ot.OptimizationProblem( linear, ot.Function(), ot.Function(), bounds) problem.setMinimization(minimization) if inequality: # x3 <= x1 problem.setInequalityConstraint(ot.Function( ['x1', 'x2', 'x3', 'x4'], ['ineq'], ['x1-x3'])) if equality: # x4 = 2 problem.setEqualityConstraint(ot.Function( ['x1', 'x2', 'x3', 'x4'], ['eq'], ['x4-2'])) try: ot.NLopt.SetSeed(0) algo.setProblem(problem) algo.setMaximumEvaluationNumber(5000) algo.setStartingPoint(startingPoint) # algo.setInitialStep([0.1] * dim) localAlgo = ot.NLopt('LD_MMA') algo.setLocalSolver(localAlgo) print('algo=', algo) algo.run() result = algo.getResult() print('x^=', printPoint( result.getOptimalPoint(), 3)) except: print('-- Not supported: algo=', algoName, 'inequality=', inequality, 'equality=', equality) # FORM f = ot.Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = f.getInputDimension() mean = [50.0, 1.0, 10.0, 5.0] sigma = ot.Point(dim, 1.0) R = ot.IdentityMatrix(dim) distribution = ot.Normal(mean, sigma, R) vect = ot.RandomVector(distribution) output = ot.RandomVector(f, vect) myEvent = ot.Event(output, ot.Less(), -3.0) solver = ot.NLopt('LD_AUGLAG') solver.setMaximumIterationNumber(400) solver.setMaximumAbsoluteError(1.0e-10) solver.setMaximumRelativeError(1.0e-10) solver.setMaximumResidualError(1.0e-10) solver.setMaximumConstraintError(1.0e-10) algo = ot.FORM(solver, myEvent, mean) algo.run() result = algo.getResult() print('generalized reliability index=%.6f' % result.getGeneralisedReliabilityIndex()) openturns-1.9/python/test/t_NatafIndependentCopulaEvaluation_std.expout000066400000000000000000000005441307543307100267740ustar00rootroot00000000000000transformation= class=NatafIndependentCopulaEvaluation description=[X0,X1,Y0,Y1] dimension=2 transformation( [0.75,0.75] )= class=Point name=Unnamed dimension=2 values=[0.67449,0.67449] transformation parameters gradient= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=2 values=[] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_NatafIndependentCopulaEvaluation_std.py000077500000000000000000000013471307543307100261050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = NatafIndependentCopulaEvaluation(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr(transformation(point))) print("transformation parameters gradient=", repr( transformation.parameterGradient(point))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_NatafIndependentCopulaEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NatafIndependentCopulaGradient_std.expout000066400000000000000000000003711307543307100264200ustar00rootroot00000000000000transformation= class=NatafIndependentCopulaGradient dimension=2 transformation( [0.75,0.75] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3.14687,0,0,3.14687] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_NatafIndependentCopulaGradient_std.py000077500000000000000000000012031307543307100255220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = NatafIndependentCopulaGradient(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr(transformation.gradient(point))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_NatafIndependentCopulaGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NatafIndependentCopulaHessian_std.expout000066400000000000000000000004221307543307100262520ustar00rootroot00000000000000transformation= class=NatafIndependentCopulaHessian dimension=2 transformation( [0.75,0.75] )= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=2 values=[6.67931,0,0,0,0,0,0,6.67931] input dimension= 2 output dimension= 2 openturns-1.9/python/test/t_NatafIndependentCopulaHessian_std.py000077500000000000000000000012001307543307100253540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 2 transformation = NatafIndependentCopulaHessian(dim) print("transformation=", repr(transformation)) point = Point(dim, 0.75) print("transformation(", point, ")=", repr(transformation.hessian(point))) print("input dimension=", transformation.getInputDimension()) print("output dimension=", transformation.getOutputDimension()) except: import sys print("t_NatafIndependentCopulaHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NearestPointChecker_std.expout000066400000000000000000000076271307543307100243020ustar00rootroot00000000000000class=Point name=Unnamed dimension=4 values=[0.915675,0.0798852,0.204293,0.336783] class=Point name=Unnamed dimension=4 values=[0.533909,0.845333,0.000609217,0.0187757] class=Point name=Unnamed dimension=4 values=[0.248836,0.400249,0.60716,0.639718] class=Point name=Unnamed dimension=4 values=[0.9066,0.103423,0.221248,0.344135] class=Point name=Unnamed dimension=4 values=[0.517309,0.844412,0.0338737,0.134955] class=Point name=Unnamed dimension=4 values=[0.274264,0.403758,0.619934,0.614362] class=Point name=Unnamed dimension=4 values=[0.903505,0.120912,0.226003,0.343485] class=Point name=Unnamed dimension=4 values=[0.498705,0.846084,0.0630262,0.177375] class=Point name=Unnamed dimension=4 values=[0.29698,0.403973,0.632924,0.589929] class=Point name=Unnamed dimension=4 values=[0.914011,0.126829,0.212411,0.321529] class=Point name=Unnamed dimension=4 values=[0.477274,0.850716,0.0882053,0.201772] class=Point name=Unnamed dimension=4 values=[0.384718,0.486831,0.783978,0.0191391] class=Point name=Unnamed dimension=4 values=[0.129338,0.335358,0.511454,0.780526] class=Point name=Unnamed dimension=4 values=[0.450957,0.859521,0.108917,0.214475] class=Point name=Unnamed dimension=4 values=[0.398236,0.471059,0.785637,0.047814] class=Point name=Unnamed dimension=4 values=[0.192942,0.353077,0.49579,0.769612] class=Point name=Unnamed dimension=4 values=[0.412834,0.876648,0.122668,0.214496] class=Point name=Unnamed dimension=4 values=[0.40812,0.45275,0.7894,0.0728271] class=Point name=Unnamed dimension=4 values=[0.226497,0.368298,0.479888,0.763389] class=Point name=Unnamed dimension=4 values=[0.0131352,0.121964,0.530062,0.839039] myNearestPointChecker = class=NearestPointChecker LevelFunction=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] result=class=NearestPointCheckerResult violatingConstraintPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 data=[[0.477274,0.850716,0.0882053,0.201772],[0.129338,0.335358,0.511454,0.780526],[0.450957,0.859521,0.108917,0.214475],[0.498705,0.846084,0.0630262,0.177375],[0.192942,0.353077,0.49579,0.769612],[0.412834,0.876648,0.122668,0.214496],[0.517309,0.844412,0.0338737,0.134955],[0.226497,0.368298,0.479888,0.763389],[0.0131352,0.121964,0.530062,0.839039],[0.533909,0.845333,0.000609217,0.0187757]] violatingConstraintValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y1] data=[[2.72118],[2.3878],[2.70114],[2.7113],[2.49017],[2.65611],[2.64433],[2.57699],[2.02304],[2.29785]] verifyingConstraintPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=4 data=[[0.915675,0.0798852,0.204293,0.336783],[0.40812,0.45275,0.7894,0.0728271],[0.248836,0.400249,0.60716,0.639718],[0.9066,0.103423,0.221248,0.344135],[0.398236,0.471059,0.785637,0.047814],[0.274264,0.403758,0.619934,0.614362],[0.903505,0.120912,0.226003,0.343485],[0.384718,0.486831,0.783978,0.0191391],[0.29698,0.403973,0.632924,0.589929],[0.914011,0.126829,0.212411,0.321529]] verifyingConstraintValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y1] data=[[1.8097],[-0.763272],[1.78673],[1.82624],[-0.825302],[1.67943],[1.84126],[-0.916997],[1.56587],[1.81655]] operator=class=LessOrEqual name=Unnamed threshold=2 openturns-1.9/python/test/t_NearestPointChecker_std.py000077500000000000000000000026511307543307100234010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: try: # Function sampleSize = 20 levelFunction = Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1+2*x2-3*x3+4*x4"]) myOperator = LessOrEqual() threshold = 2.0 mySample = Sample(0, levelFunction.getInputDimension()) random = 0.1 for index in range(sampleSize): point = Point(levelFunction.getInputDimension()) norm = 0.0 for coordinate in range(levelFunction.getInputDimension()): point[coordinate] = sqrt(-2.0 * log(random)) random = fmod(random + sqrt(2.0), 1.0) point[coordinate] *= cos(2.0 * atan(1.0) * random) norm += point[coordinate] * point[coordinate] for coordinate in range(levelFunction.getInputDimension()): point[coordinate] /= sqrt(norm) mySample.add(point) myNearestPointChecker = NearestPointChecker( levelFunction, myOperator, threshold, mySample) for index in range(sampleSize): print(repr(mySample[index])) myNearestPointChecker.run() print("myNearestPointChecker = ", myNearestPointChecker) except: raise except: import sys print("t_NearestPointChecker_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NegativeBinomialFactory_std.expout000066400000000000000000000013571307543307100251410ustar00rootroot00000000000000distribution= class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 Estimated distribution= class=NegativeBinomial name=NegativeBinomial dimension=1 r=15.0803 p=0.699114 Default distribution= class=NegativeBinomial name=NegativeBinomial dimension=1 r=1 p=0.5 Distribution from parameters= class=NegativeBinomial name=NegativeBinomial dimension=1 r=15 p=0.7 Default distribution= NegativeBinomial(r = 1, p = 0.5) Distribution from parameters= NegativeBinomial(r = 15, p = 0.7) NegativeBinomial = NegativeBinomial(r = 15, p = 0.7) Estimated negativeBinomial= NegativeBinomial(r = 15.0803, p = 0.699114) Default negativeBinomial= NegativeBinomial(r = 1, p = 0.5) NegativeBinomial from parameters= NegativeBinomial(r = 15, p = 0.7) openturns-1.9/python/test/t_NegativeBinomialFactory_std.py000077500000000000000000000030431307543307100242420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = NegativeBinomial(15, 0.7) size = 10000 sample = distribution.getSample(size) factory = NegativeBinomialFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedNegativeBinomial = factory.buildAsNegativeBinomial(sample) print("NegativeBinomial =", distribution) print("Estimated negativeBinomial=", estimatedNegativeBinomial) estimatedNegativeBinomial = factory.buildAsNegativeBinomial() print("Default negativeBinomial=", estimatedNegativeBinomial) estimatedNegativeBinomial = factory.buildAsNegativeBinomial( distribution.getParameter()) print("NegativeBinomial from parameters=", estimatedNegativeBinomial) except: import sys print("t_NegativeBinomialFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NegativeBinomial_std.expout000066400000000000000000000027531307543307100236120ustar00rootroot00000000000000Distribution class=NegativeBinomial name=NegativeBinomial dimension=1 r=4.5 p=0.7 Distribution NegativeBinomial(r = 4.5, p = 0.7) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[7] oneSample first= class=Point name=Unnamed dimension=1 values=[10] last= class=Point name=Unnamed dimension=1 values=[20] mean= class=Point name=Unnamed dimension=1 values=[10.4746] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[35.6333] Point= class=Point name=Unnamed dimension=1 values=[5] pdf =0.063727 pdf (FD)=0.063727 cdf=0.203394 quantile= class=Point name=Unnamed dimension=1 values=[22] cdf(quantile)=0.959829 mean= class=Point name=Unnamed dimension=1 values=[10.5] standard deviation= class=Point name=Unnamed dimension=1 values=[5.91608] skewness= class=Point name=Unnamed dimension=1 values=[0.957841] kurtosis= class=Point name=Unnamed dimension=1 values=[4.3619] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[35] parameters= [class=PointWithDescription name=X0 dimension=2 description=[r,p] values=[4.5,0.7]] standard moment n= 0 value= [1] standard moment n= 1 value= [10.5] standard moment n= 2 value= [145.25] standard moment n= 3 value= [2458.46] standard moment n= 4 value= [48980.9] standard moment n= 5 value= [1.12011e+06] Standard representative= NegativeBinomial(r = 4.5, p = 0.7) openturns-1.9/python/test/t_NegativeBinomial_std.py000077500000000000000000000047211307543307100227160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = NegativeBinomial(4.5, 0.7) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 5.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_NegativeBinomial_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NonCenteredFiniteDifferenceGradient_std.expout000066400000000000000000000017251307543307100273670ustar00rootroot00000000000000myGradient= class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] myFunc.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.540302,-0.909297,-0.909297,0.735759,-1.10364] myGradient.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.54026,-0.909277,-0.909277,0.735796,-1.10356] myFunc.gradient( class=Point name=Unnamed dimension=2 values=[1,1] )= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.841471,0.54026,-0.909277,-0.909277,0.735796,-1.10356] (after substitution) openturns-1.9/python/test/t_NonCenteredFiniteDifferenceGradient_std.py000077500000000000000000000015361307543307100264760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot eps = 1e-4 # Instance creation myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) epsilon = ot.Point(myFunc.getInputDimension(), eps) inPoint = ot.Point(epsilon.getDimension(), 1.0) myGradient = ot.NonCenteredFiniteDifferenceGradient( epsilon, myFunc.getEvaluation()) print("myGradient=", repr(myGradient)) print("myFunc.gradient(", repr(inPoint), ")=", repr(myFunc.gradient(inPoint))) print("myGradient.gradient(", repr(inPoint), ")=", repr(myGradient.gradient(inPoint))) # Substitute the gradient # DEBUG ici myFunc.setGradient( ot.NonCenteredFiniteDifferenceGradient(myGradient)) print("myFunc.gradient(", repr(inPoint), ")=", repr( myFunc.gradient(inPoint)), " (after substitution)") openturns-1.9/python/test/t_NonCentralChiSquare_std.expout000066400000000000000000000053121307543307100242370ustar00rootroot00000000000000Distribution class=NonCentralChiSquare name=NonCentralChiSquare dimension=1 nu=1.5 lambda=2.5 Distribution NonCentralChiSquare(nu = 1.5, lambda = 2.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[5.14874] oneSample first= class=Point name=Unnamed dimension=1 values=[10.3181] last= class=Point name=Unnamed dimension=1 values=[3.44075] mean= class=Point name=Unnamed dimension=1 values=[4.01363] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[12.6416] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.0277166] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0277166] pdf = 0.168124667122 pdf (FD)= 0.168124667 cdf= 0.205327699996 characteristic function= (0.0479067415537+0.195396095873j) pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0269116,-0.0447116] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.0269116,-0.0447116] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.127286,-0.0787015] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.127286,-0.0787015] quantile= class=Point name=Unnamed dimension=1 values=[11.1286] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.169073] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0, 11.1286] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.1499} with f= MinimumVolumeLevelSetEvaluation(NonCentralChiSquare(nu = 1.5, lambda = 2.5)) beta= [0.015766] Bilateral confidence interval= [0.068294, 13.2884] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 11.1286] beta= [0.95] Unilateral confidence interval (upper tail)= [0.169073, 127] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[4] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13] parameters= [class=PointWithDescription name=X0 dimension=2 description=[nu,lambda] values=[1.5,2.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [4] standard moment n= 2 value= [29] standard moment n= 3 value= [292] standard moment n= 4 value= [3715] standard moment n= 5 value= [56780] Standard representative= NonCentralChiSquare(nu = 1.5, lambda = 2.5) nu= 1.5 standard deviation= class=Point name=Unnamed dimension=1 values=[3.60555] skewness= class=Point name=Unnamed dimension=1 values=[1.53609] kurtosis= class=Point name=Unnamed dimension=1 values=[6.26627] openturns-1.9/python/test/t_NonCentralChiSquare_std.py000077500000000000000000000132701307543307100233500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = NonCentralChiSquare(1.5, 2.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(2) PDFgrFD[0] = (NonCentralChiSquare(distribution.getNu() + eps, distribution.getLambda()).computePDF(point) - NonCentralChiSquare(distribution.getNu() - eps, distribution.getLambda()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (NonCentralChiSquare(distribution.getNu(), distribution.getLambda() + eps).computePDF(point) - NonCentralChiSquare(distribution.getNu(), distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (NonCentralChiSquare(distribution.getNu() + eps, distribution.getLambda()).computeCDF(point) - NonCentralChiSquare(distribution.getNu() - eps, distribution.getLambda()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (NonCentralChiSquare(distribution.getNu(), distribution.getLambda() + eps).computeCDF(point) - NonCentralChiSquare(distribution.getNu(), distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution nu = distribution.getNu() print("nu=", nu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) except: import sys print("t_NonCentralChiSquare_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NonCentralStudent_std.expout000066400000000000000000000052011307543307100237760ustar00rootroot00000000000000Distribution class=NonCentralStudent name=NonCentralStudent dimension=1 nu=7.2 delta=4.8 gamma=-3.7 Distribution NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[4.76055] oneSample first= class=Point name=Unnamed dimension=1 values=[3.3233] last= class=Point name=Unnamed dimension=1 values=[3.54549] mean= class=Point name=Unnamed dimension=1 values=[1.6744] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.22198] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.0278822] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0278822] log pdf=-1.409597 pdf =0.244242 pdf (FD)=0.244242 cdf=0.426086 ccdf=0.573914 pdf gradient = class=Point name=Unnamed dimension=3 values=[0.0110231,-0.00328889,0.0278822] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.0110231,-0.00328889,0.0278822] cdf gradient = class=Point name=Unnamed dimension=3 values=[0.0041357,-0.246592,-0.244242] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.0041357,-0.246592,-0.244242] quantile= class=Point name=Unnamed dimension=1 values=[5.47724] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.864277] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-1.61544, 5.7747] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.75705} with f= MinimumVolumeLevelSetEvaluation(NonCentralStudent(nu = 7.2, delta = 4.8, gamma = -3.7)) beta= [0.0233525] Bilateral confidence interval= [-1.17995, 6.75359] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.68455] standard deviation= class=Point name=Unnamed dimension=1 values=[2.07189] skewness= class=Point name=Unnamed dimension=1 values=[1.67602] kurtosis= class=Point name=Unnamed dimension=1 values=[10.0582] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4.29272] parameters= [class=PointWithDescription name=X0 dimension=3 description=[nu,delta,gamma] values=[7.2,4.8,-3.7]] standard moment n= 0 value= [1] standard moment n= 1 value= [5.38455] standard moment n= 2 value= [33.2862] standard moment n= 3 value= [240.367] standard moment n= 4 value= [2093.79] standard moment n= 5 value= [23449.8] Standard representative= NonCentralStudent(nu = 7.2, delta = 4.8, gamma = 0) openturns-1.9/python/test/t_NonCentralStudent_std.py000077500000000000000000000153121307543307100231110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = NonCentralStudent(7.2, 4.8, -3.7) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(3) PDFgrFD[0] = (NonCentralStudent(distribution.getNu() + eps, distribution.getDelta(), distribution.getGamma()).computePDF(point) - NonCentralStudent(distribution.getNu() - eps, distribution.getDelta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (NonCentralStudent(distribution.getNu(), distribution.getDelta() + eps, distribution.getGamma()).computePDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() + eps).computePDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(3) CDFgrFD[0] = (NonCentralStudent(distribution.getNu() + eps, distribution.getDelta(), distribution.getGamma()).computeCDF(point) - NonCentralStudent(distribution.getNu() - eps, distribution.getDelta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (NonCentralStudent(distribution.getNu(), distribution.getDelta() + eps, distribution.getGamma()).computeCDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() + eps).computeCDF(point) - NonCentralStudent(distribution.getNu(), distribution.getDelta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) # interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, False) # print("Unilateral confidence interval (lower tail)=", interval) # print("beta=", Point(1, beta)) # interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, True) # print("Unilateral confidence interval (upper tail)=", interval) # print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_NonCentralStudent_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NonStationaryCovarianceModelFactory_std.expout000066400000000000000000000157621307543307100275150ustar00rootroot00000000000000Covariance C( 0 , 0 ) : evaluation = 1.00821 model = 1 Covariance C( 0 , 0.1 ) : evaluation = 0.90204 model = 0.904837 Covariance C( 0 , 0.2 ) : evaluation = 0.816878 model = 0.818731 Covariance C( 0 , 0.3 ) : evaluation = 0.737542 model = 0.740818 Covariance C( 0 , 0.4 ) : evaluation = 0.672768 model = 0.67032 Covariance C( 0 , 0.5 ) : evaluation = 0.606947 model = 0.606531 Covariance C( 0 , 0.6 ) : evaluation = 0.5532 model = 0.548812 Covariance C( 0 , 0.7 ) : evaluation = 0.50249 model = 0.496585 Covariance C( 0 , 0.8 ) : evaluation = 0.459609 model = 0.449329 Covariance C( 0 , 0.9 ) : evaluation = 0.407241 model = 0.40657 Covariance C( 0.1 , 0 ) : evaluation = 0.90204 model = 0.904837 Covariance C( 0.1 , 0.1 ) : evaluation = 0.989988 model = 1 Covariance C( 0.1 , 0.2 ) : evaluation = 0.894201 model = 0.904837 Covariance C( 0.1 , 0.3 ) : evaluation = 0.810409 model = 0.818731 Covariance C( 0.1 , 0.4 ) : evaluation = 0.737446 model = 0.740818 Covariance C( 0.1 , 0.5 ) : evaluation = 0.665085 model = 0.67032 Covariance C( 0.1 , 0.6 ) : evaluation = 0.606272 model = 0.606531 Covariance C( 0.1 , 0.7 ) : evaluation = 0.548287 model = 0.548812 Covariance C( 0.1 , 0.8 ) : evaluation = 0.500625 model = 0.496585 Covariance C( 0.1 , 0.9 ) : evaluation = 0.448074 model = 0.449329 Covariance C( 0.2 , 0 ) : evaluation = 0.816878 model = 0.818731 Covariance C( 0.2 , 0.1 ) : evaluation = 0.894201 model = 0.904837 Covariance C( 0.2 , 0.2 ) : evaluation = 0.990525 model = 1 Covariance C( 0.2 , 0.3 ) : evaluation = 0.897657 model = 0.904837 Covariance C( 0.2 , 0.4 ) : evaluation = 0.812456 model = 0.818731 Covariance C( 0.2 , 0.5 ) : evaluation = 0.729266 model = 0.740818 Covariance C( 0.2 , 0.6 ) : evaluation = 0.665659 model = 0.67032 Covariance C( 0.2 , 0.7 ) : evaluation = 0.600574 model = 0.606531 Covariance C( 0.2 , 0.8 ) : evaluation = 0.545544 model = 0.548812 Covariance C( 0.2 , 0.9 ) : evaluation = 0.490332 model = 0.496585 Covariance C( 0.3 , 0 ) : evaluation = 0.737542 model = 0.740818 Covariance C( 0.3 , 0.1 ) : evaluation = 0.810409 model = 0.818731 Covariance C( 0.3 , 0.2 ) : evaluation = 0.897657 model = 0.904837 Covariance C( 0.3 , 0.3 ) : evaluation = 0.995372 model = 1 Covariance C( 0.3 , 0.4 ) : evaluation = 0.899391 model = 0.904837 Covariance C( 0.3 , 0.5 ) : evaluation = 0.810492 model = 0.818731 Covariance C( 0.3 , 0.6 ) : evaluation = 0.738522 model = 0.740818 Covariance C( 0.3 , 0.7 ) : evaluation = 0.666768 model = 0.67032 Covariance C( 0.3 , 0.8 ) : evaluation = 0.606792 model = 0.606531 Covariance C( 0.3 , 0.9 ) : evaluation = 0.545949 model = 0.548812 Covariance C( 0.4 , 0 ) : evaluation = 0.672768 model = 0.67032 Covariance C( 0.4 , 0.1 ) : evaluation = 0.737446 model = 0.740818 Covariance C( 0.4 , 0.2 ) : evaluation = 0.812456 model = 0.818731 Covariance C( 0.4 , 0.3 ) : evaluation = 0.899391 model = 0.904837 Covariance C( 0.4 , 0.4 ) : evaluation = 0.996354 model = 1 Covariance C( 0.4 , 0.5 ) : evaluation = 0.90106 model = 0.904837 Covariance C( 0.4 , 0.6 ) : evaluation = 0.820803 model = 0.818731 Covariance C( 0.4 , 0.7 ) : evaluation = 0.741337 model = 0.740818 Covariance C( 0.4 , 0.8 ) : evaluation = 0.674105 model = 0.67032 Covariance C( 0.4 , 0.9 ) : evaluation = 0.606897 model = 0.606531 Covariance C( 0.5 , 0 ) : evaluation = 0.606947 model = 0.606531 Covariance C( 0.5 , 0.1 ) : evaluation = 0.665085 model = 0.67032 Covariance C( 0.5 , 0.2 ) : evaluation = 0.729266 model = 0.740818 Covariance C( 0.5 , 0.3 ) : evaluation = 0.810492 model = 0.818731 Covariance C( 0.5 , 0.4 ) : evaluation = 0.90106 model = 0.904837 Covariance C( 0.5 , 0.5 ) : evaluation = 1.00283 model = 1 Covariance C( 0.5 , 0.6 ) : evaluation = 0.91064 model = 0.904837 Covariance C( 0.5 , 0.7 ) : evaluation = 0.826031 model = 0.818731 Covariance C( 0.5 , 0.8 ) : evaluation = 0.74871 model = 0.740818 Covariance C( 0.5 , 0.9 ) : evaluation = 0.675382 model = 0.67032 Covariance C( 0.6 , 0 ) : evaluation = 0.5532 model = 0.548812 Covariance C( 0.6 , 0.1 ) : evaluation = 0.606272 model = 0.606531 Covariance C( 0.6 , 0.2 ) : evaluation = 0.665659 model = 0.67032 Covariance C( 0.6 , 0.3 ) : evaluation = 0.738522 model = 0.740818 Covariance C( 0.6 , 0.4 ) : evaluation = 0.820803 model = 0.818731 Covariance C( 0.6 , 0.5 ) : evaluation = 0.91064 model = 0.904837 Covariance C( 0.6 , 0.6 ) : evaluation = 1.00501 model = 1 Covariance C( 0.6 , 0.7 ) : evaluation = 0.91108 model = 0.904837 Covariance C( 0.6 , 0.8 ) : evaluation = 0.828014 model = 0.818731 Covariance C( 0.6 , 0.9 ) : evaluation = 0.746208 model = 0.740818 Covariance C( 0.7 , 0 ) : evaluation = 0.50249 model = 0.496585 Covariance C( 0.7 , 0.1 ) : evaluation = 0.548287 model = 0.548812 Covariance C( 0.7 , 0.2 ) : evaluation = 0.600574 model = 0.606531 Covariance C( 0.7 , 0.3 ) : evaluation = 0.666768 model = 0.67032 Covariance C( 0.7 , 0.4 ) : evaluation = 0.741337 model = 0.740818 Covariance C( 0.7 , 0.5 ) : evaluation = 0.826031 model = 0.818731 Covariance C( 0.7 , 0.6 ) : evaluation = 0.91108 model = 0.904837 Covariance C( 0.7 , 0.7 ) : evaluation = 1.00954 model = 1 Covariance C( 0.7 , 0.8 ) : evaluation = 0.915118 model = 0.904837 Covariance C( 0.7 , 0.9 ) : evaluation = 0.823575 model = 0.818731 Covariance C( 0.8 , 0 ) : evaluation = 0.459609 model = 0.449329 Covariance C( 0.8 , 0.1 ) : evaluation = 0.500625 model = 0.496585 Covariance C( 0.8 , 0.2 ) : evaluation = 0.545544 model = 0.548812 Covariance C( 0.8 , 0.3 ) : evaluation = 0.606792 model = 0.606531 Covariance C( 0.8 , 0.4 ) : evaluation = 0.674105 model = 0.67032 Covariance C( 0.8 , 0.5 ) : evaluation = 0.74871 model = 0.740818 Covariance C( 0.8 , 0.6 ) : evaluation = 0.828014 model = 0.818731 Covariance C( 0.8 , 0.7 ) : evaluation = 0.915118 model = 0.904837 Covariance C( 0.8 , 0.8 ) : evaluation = 1.00826 model = 1 Covariance C( 0.8 , 0.9 ) : evaluation = 0.911118 model = 0.904837 Covariance C( 0.9 , 0 ) : evaluation = 0.407241 model = 0.40657 Covariance C( 0.9 , 0.1 ) : evaluation = 0.448074 model = 0.449329 Covariance C( 0.9 , 0.2 ) : evaluation = 0.490332 model = 0.496585 Covariance C( 0.9 , 0.3 ) : evaluation = 0.545949 model = 0.548812 Covariance C( 0.9 , 0.4 ) : evaluation = 0.606897 model = 0.606531 Covariance C( 0.9 , 0.5 ) : evaluation = 0.675382 model = 0.67032 Covariance C( 0.9 , 0.6 ) : evaluation = 0.746208 model = 0.740818 Covariance C( 0.9 , 0.7 ) : evaluation = 0.823575 model = 0.818731 Covariance C( 0.9 , 0.8 ) : evaluation = 0.911118 model = 0.904837 Covariance C( 0.9 , 0.9 ) : evaluation = 1.00667 model = 1 openturns-1.9/python/test/t_NonStationaryCovarianceModelFactory_std.py000077500000000000000000000026451307543307100266200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Dimension of the input model # Size of the TimeGrid # dimension parameter dimension = 1 # Amplitude values amplitude = Point(dimension, 1.00) # Scale values scale = Point(dimension, 1.0) size = 10 timeGrid = RegularGrid(0.0, 0.1, size) # Cauchy model model = ExponentialCauchy(scale, amplitude) myProcess = GaussianProcess(model, timeGrid) # Create a Process sample of size N N = 10000 sample = myProcess.getSample(N) # NonStationaryCovarianceModelFactory using default parameter - Factory # initiate myFactory = NonStationaryCovarianceModelFactory() # Build a UserDefinedCovarianceModel using the Welch method myCovarianceModel = myFactory.buildAsUserDefinedCovarianceModel(sample) for i in range(size): t = timeGrid.getValue(i) for j in range(size): s = timeGrid.getValue(j) estimatedValue = myCovarianceModel(t, s)[0, 0] modelValue = model.computeCovariance(t, s)[0, 0] print("Covariance C( %.6g" % t, ", %.6g" % s, ") : ", " evaluation = %.6g" % estimatedValue, " model = %.6g" % modelValue) except: import sys print("t_NonStationaryCovarianceModelFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NormalCopulaFactory_std.expout000066400000000000000000000012301307543307100243060ustar00rootroot00000000000000distribution= NormalCopula(R = [[ 1 0.333333 0.5 ] [ 0.333333 1 0.5 ] [ 0.5 0.5 1 ]]) Estimated distribution= NormalCopula(R = [[ 1 0.313268 0.490701 ] [ 0.313268 1 0.487274 ] [ 0.490701 0.487274 1 ]]) Default distribution= NormalCopula(R = [[ 1 0 ] [ 0 1 ]]) NormalCopula = NormalCopula(R = [[ 1 0.333333 0.5 ] [ 0.333333 1 0.5 ] [ 0.5 0.5 1 ]]) Estimated normalCopula= NormalCopula(R = [[ 1 0.313268 0.490701 ] [ 0.313268 1 0.487274 ] [ 0.490701 0.487274 1 ]]) Default normalCopula= NormalCopula(R = [[ 1 0 ] [ 0 1 ]]) openturns-1.9/python/test/t_NormalCopulaFactory_std.py000077500000000000000000000023521307543307100234230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 3 R = CorrelationMatrix(dim) for i in range(dim): for j in range(i): R[i, j] = 0.5 * (1.0 + i) / dim distribution = NormalCopula(R) size = 10000 sample = distribution.getSample(size) factory = NormalCopulaFactory() estimatedDistribution = factory.build(sample) print("distribution=", distribution) print("Estimated distribution=", estimatedDistribution) # non-regression for #572 estimated_dist = NormalCopulaFactory().build(distribution.getSample(10)) mydist = ComposedDistribution( DistributionCollection(dim, Normal()), estimated_dist) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedNormalCopula = factory.buildAsNormalCopula(sample) print("NormalCopula =", distribution) print("Estimated normalCopula=", estimatedNormalCopula) estimatedNormalCopula = factory.buildAsNormalCopula() print("Default normalCopula=", estimatedNormalCopula) except: import sys print("t_NormalCopulaFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NormalCopula_std.expout000066400000000000000000000065421307543307100227710ustar00rootroot00000000000000Copula class=NormalCopula name=NormalCopula dimension=3 correlation=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Copula NormalCopula(R = [[ 1 0.25 0 ] [ 0.25 1 0.25 ] [ 0 0.25 1 ]]) Mean class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Covariance class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0199465,0,0.0199465,0.0833333,0.0199465,0,0.0199465,0.0833333] Elliptical distribution= False Elliptical copula= True Independent copula= False oneRealization= class=Point name=Unnamed dimension=3 values=[0.728473,0.14143,0.226528] oneSample= class=Sample name=NormalCopula implementation=class=SampleImplementation name=NormalCopula size=10 dimension=3 description=[X0,X1,X2] data=[[0.885991,0.03509,0.410967],[0.361292,0.903689,0.875806],[0.786157,0.398475,0.551985],[0.0110089,0.0347878,0.0549614],[0.463832,0.82677,0.548704],[0.28767,0.614586,0.66531],[0.672124,0.18575,0.136607],[0.682113,0.49876,0.620616],[0.962655,0.696223,0.230639],[0.235291,0.339456,0.0367574]] anotherSample mean= class=Point name=Unnamed dimension=3 values=[0.495928,0.496401,0.501236] anotherSample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0829368,0.0183885,-0.000208548,0.0183885,0.0838067,0.0195431,-0.000208548,0.0195431,0.0843107] Point = class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] pdf=1.376769 cdf=0.017616 Quantile= class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[0.0174781,0.0174781,0.0174781] Survival(inverseSurvival)=0.950000 margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.98013] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.248011] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF=1.000000 margin CDF=0.250000 margin quantile= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.272373] indices= [1,0] margins= class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.25,0.25,1] margins PDF=1.131175 margins CDF=0.089310 margins quantile= class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[0.265472,0.397787] Normal copula correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.261052,0,0.261052,1,0.261052,0,0.261052,1] from the Spearman correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] prob=0.027802 openturns-1.9/python/test/t_NormalCopula_std.py000077500000000000000000000110541307543307100220720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 3 R = CorrelationMatrix(dim) for i in range(dim - 1): R[i, i + 1] = 0.25 copula = NormalCopula(R) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean ", repr(copula.getMean())) print("Covariance ", repr(copula.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 10000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) print("Point = ", repr(point), " pdf=%.6f" % pointPDF, " cdf=%.6f" % pointCDF) # Get 50% quantile quantile = copula.computeQuantile(0.5) print("Quantile=", repr(quantile)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions if copula.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", copula.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = copula.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", copula.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", copula.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", copula.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.25))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = copula.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.25))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.25))) quantile = Point(margins.computeQuantile(0.95)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) # Creation of the correlation matrix from a Spearman correlation matrix spearman = CorrelationMatrix(dim) for i in range(1, dim): spearman[i, i - 1] = 0.25 correlation = NormalCopula.GetCorrelationFromSpearmanCorrelation(spearman) print("Normal copula correlation=", repr(correlation), " from the Spearman correlation=", repr(spearman)) # computeProbability spearman_corr = CorrelationMatrix([[1., .74], [.74, 1.]]) copula = NormalCopula( NormalCopula.GetCorrelationFromSpearmanCorrelation(spearman_corr)) interval = Interval([0.958722, 0.902063], [1., 1.]) prob = copula.computeProbability(interval) print("prob=%.6f" % prob) except: import sys print("t_NormalCopula_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NormalFactory_std.expout000066400000000000000000000040041307543307100231440ustar00rootroot00000000000000distribution= class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,1.5,2.5] sigma=class=Point name=Unnamed dimension=3 values=[1,3,5] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.333333,0.5,0.333333,1,0.5,0.5,0.5,1] Estimated distribution= class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.4883,1.46562,2.46859] sigma=class=Point name=Unnamed dimension=3 values=[0.992448,3.00459,4.99434] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.312825,0.492695,0.312825,1,0.483693,0.492695,0.483693,1] Default distribution= Normal(mu = 0, sigma = 1) Distribution from parameters= Normal(mu = [0.5,1.5,2.5], sigma = [1,3,5], R = [[ 1 0.333333 0.5 ] [ 0.333333 1 0.5 ] [ 0.5 0.5 1 ]]) Normal = Normal(mu = [0.5,1.5,2.5], sigma = [1,3,5], R = [[ 1 0.333333 0.5 ] [ 0.333333 1 0.5 ] [ 0.5 0.5 1 ]]) Estimated normal= Normal(mu = [0.4883,1.46562,2.46859], sigma = [0.992448,3.00459,4.99434], R = [[ 1 0.312825 0.492695 ] [ 0.312825 1 0.483693 ] [ 0.492695 0.483693 1 ]]) Default normal= Normal(mu = 0, sigma = 1) Normal from parameters= Normal(mu = [0.5,1.5,2.5], sigma = [1,3,5], R = [[ 1 0.333333 0.5 ] [ 0.333333 1 0.5 ] [ 0.5 0.5 1 ]]) Estimated distribution = class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0.4883] sigma=class=Point name=Unnamed dimension=1 values=[0.992448] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Parameter distribution = ComposedDistribution(Normal(mu = 0.4883, sigma = 0.00992448), RandomMixture(0.0100005 * Chi(nu = 9999)), IndependentCopula(dimension = 2)) openturns-1.9/python/test/t_NormalFactory_std.py000077500000000000000000000032471307543307100222630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: dim = 3 mean = Point(dim) sigma = Point(dim) R = CorrelationMatrix(dim) for i in range(dim): mean[i] = i + 0.5 sigma[i] = 2 * i + 1.0 for j in range(i): R[i, j] = 0.5 * (1.0 + i) / dim distribution = Normal(mean, sigma, R) size = 10000 sample = distribution.getSample(size) factory = NormalFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedNormal = factory.buildAsNormal(sample) print("Normal =", distribution) print("Estimated normal=", estimatedNormal) estimatedNormal = factory.buildAsNormal() print("Default normal=", estimatedNormal) estimatedNormal = factory.buildAsNormal( distribution.getParameter()) print("Normal from parameters=", estimatedNormal) result = factory.buildEstimator(sample[:, 0]) estimatedDistribution = result.getDistribution() print('Estimated distribution =', repr(estimatedDistribution)) parameterDistribution = result.getParameterDistribution() print('Parameter distribution =', parameterDistribution) except: import sys print("t_NormalFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Normal_large.expout000066400000000000000000000160671307543307100221300ustar00rootroot00000000000000sample of size 1000 first= class=Point name=Unnamed dimension=4 values=[1.6082,0.207563,-0.0888678,1.68463] last= class=Point name=Unnamed dimension=4 values=[2.08213,3.06501,2.58937,-0.0516727] mean error=0.041472 covariance error=0.014498 Zero point = class=Point name=Unnamed dimension=4 values=[0,0,0,0] pdf=0.013648 class=Point name=Unnamed dimension=4 values=[0,0,0,0] cdf=0.006465 density generator=0.025330 margin= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile= class=Point name=Unnamed dimension=1 values=[1] margin realization= class=Point name=Unnamed dimension=1 values=[1.31049] margin= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile= class=Point name=Unnamed dimension=1 values=[1] margin realization= class=Point name=Unnamed dimension=1 values=[1.8214] margin= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile= class=Point name=Unnamed dimension=1 values=[1] margin realization= class=Point name=Unnamed dimension=1 values=[0.258164] margin= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.241971 margin CDF=0.158655 margin quantile= class=Point name=Unnamed dimension=1 values=[1] margin realization= class=Point name=Unnamed dimension=1 values=[1.64156] indices= [1,0] margins= class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[1,1] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.094354 margins CDF=0.062514 margins quantile= class=Point name=Unnamed dimension=2 values=[1.39352,1.39352] margins CDF(qantile)=0.500000 margins realization= class=Point name=Unnamed dimension=2 values=[0.591227,-0.167529] Has independent copula? True sample of size 1000 first= class=Point name=Unnamed dimension=200 values=[-1.1501,0.403327,1.47477,-0.35091,-0.267871,-1.14963,-1.11914,1.98403,-0.241304,1.46431,0.613122,0.892329,-0.0106239,0.118552,1.88662,0.0989573,0.0504324,1.23041,-1.12644,0.649389,0.196965,0.648015,1.5685,-2.59943,-0.558887,-2.35987,0.225587,1.06408,0.816502,1.93148,0.632228,0.20083,1.10128,0.273727,-0.78831,1.00228,0.548311,-1.70706,0.43934,2.02049,0.226454,-0.0947698,1.02129,-0.62555,-0.861517,-0.205614,2.11284,-2.15962,0.249033,0.737666,1.0845,0.083716,0.943283,-0.310263,0.931895,1.48718,0.33657,-0.199284,1.35591,-0.916426,-0.71568,-0.333754,0.376822,-1.13114,-1.44096,0.593294,0.697384,0.686686,-0.755152,-1.96256,-0.0189837,0.0185737,0.135045,0.168296,-0.340433,-0.0636069,-0.0889986,-1.77593,-0.054099,-0.168505,1.91193,-0.528254,-0.548141,-0.229999,-2.18417,1.29765,-0.360289,0.525318,2.23315,0.209252,0.243396,2.08658,-0.147462,0.135149,-0.725006,-0.798797,1.34664,1.24198,0.64236,1.12222,0.0401722,-1.24951,0.637595,-0.966001,0.264217,-0.462955,-0.715986,0.789577,1.6074,0.295437,1.16026,0.667815,-1.67669,0.414452,-1.15907,0.169751,-0.277983,-0.00873008,0.293749,0.727885,-0.607898,1.32303,-1.83188,-1.48107,0.360873,0.577074,-0.271964,1.78921,-1.22937,0.0989726,-0.467947,-0.0922083,-1.12891,-0.739846,0.0121345,-0.522069,-0.236476,1.25348,1.91609,0.249814,0.0792944,-0.710396,-0.861642,-1.27587,-1.17853,-0.665714,-0.16587,-1.48975,-0.0801062,-0.203341,1.33831,-0.336168,1.05683,1.86528,-0.366475,-0.94532,0.750909,2.40667,0.310049,-1.10724,-1.01355,-0.29067,0.273992,0.48738,0.0120011,-0.651962,1.01833,-0.507048,0.958048,0.502256,0.372363,0.304381,-0.506288,-0.525563,0.153626,-0.0182899,0.864303,-1.35688,0.571886,-0.625761,0.120072,0.0886974,0.364812,-1.73088,-0.98306,0.385076,-0.575987,-0.369786,0.522718,-0.32916,-2.54585,-0.624745,1.53553,0.769687,-0.603482,-1.02477,-0.718905,-0.0655556,-0.55849,-0.472014] last= class=Point name=Unnamed dimension=200 values=[0.13954,1.9581,0.0922706,0.491538,-0.320286,0.0835375,0.700305,-0.0735205,0.333354,0.59186,-0.628357,0.194963,-0.735206,1.84353,-0.106715,0.42359,1.60878,1.73368,-0.670801,-1.29848,0.445937,-1.6257,1.33983,-0.855399,0.441167,-0.572371,0.332801,-0.37484,0.0332814,-1.99718,-1.70265,0.0436143,-0.734618,2.02838,0.710772,-0.539924,0.739119,-1.94706,0.235118,0.204566,-1.67498,1.00636,-1.09417,1.16795,-0.0229323,1.92196,1.3142,-0.485167,0.0618486,-0.869981,-0.131949,0.0333078,0.555229,0.463152,-1.24999,-0.79441,-2.43042,0.687239,-1.03986,0.0296275,1.47503,0.673733,0.51614,-0.376395,-0.249593,-0.833331,1.55557,-1.82257,-2.30602,-1.1861,-0.0351426,1.69347,-0.00354013,0.236249,1.74938,0.803329,1.02098,-0.57176,0.981317,0.0169211,0.0318534,-0.327981,0.906673,-0.321252,0.642464,0.530424,0.158765,0.477101,0.304549,-0.615612,0.040652,-0.920223,-1.63003,0.357684,0.649401,0.694008,1.57737,0.490517,-0.448073,1.0005,0.810265,1.98491,-1.24464,-2.14452,-1.3238,0.943986,-0.310782,0.174831,0.97626,1.10243,1.21353,-1.94404,-0.994052,-1.86512,0.505481,1.12256,0.677826,-1.15725,-1.397,1.02297,-0.139832,-0.221172,1.47266,2.72802,-0.903231,0.560507,-0.84642,-0.048026,-1.18694,0.364841,1.30935,0.198992,-0.832509,-0.511336,0.00717079,0.383982,1.96614,0.340665,1.25672,1.39057,-0.175019,-2.17064,0.176446,0.0534574,0.778567,0.469072,-0.996058,1.11127,0.75052,-0.62477,-0.505945,1.59528,0.835833,-2.18023,-0.883523,0.605795,-1.09046,1.13622,0.606439,0.160394,-0.685948,0.587963,-1.14936,-1.03626,0.465891,0.515154,0.0208542,0.493445,1.3369,0.0066312,-0.0954374,-0.86058,-1.29481,0.854114,-0.718946,-2.01076,-0.809356,-0.696743,1.55153,-0.328021,0.111885,-1.86421,-0.248157,2.33908,-0.225724,-0.621094,1.45964,-0.206268,0.636798,-0.357281,0.252898,-0.217682,-1.8027,0.502832,-0.910924,0.26079,-1.25,0.0958104,0.689676,1.10179] mean error=0.956610 covariance error=0.000391 Zero point= class=Point name=Unnamed dimension=200 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] pdf=0.000000 cdf=0.000000 density generator=0.000000 openturns-1.9/python/test/t_Normal_large.py000077500000000000000000000073161307543307100212340ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Big test case for correlated components # Instanciate one distribution object dim = 4 meanPoint = Point(dim, 1.0) sigma = Point(dim, 1.0) R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution = Normal(meanPoint, sigma, R) # Test for sampling size = 1000 oneSample = distribution.getSample(size) print("sample of size ", size, " first=", repr( oneSample[0]), " last=", repr(oneSample[oneSample.getSize() - 1])) mean = oneSample.computeMean() print("mean error=%.6f" % ((mean - meanPoint).norm() / meanPoint.norm())) covariance = oneSample.computeCovariance() errorCovariance = 0.0 for i in range(dim): for j in range(dim): errorCovariance += fabs( covariance[i, j] - sigma[i] * sigma[j] * R[i, j]) print("covariance error=%.6f" % (errorCovariance / (dim * dim))) # Define a point zero = Point(dim, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point = ", repr(zero), " pdf=%.6f" % zeroPDF, repr(zero), " cdf=%.6f" % zeroCDF, " density generator=%.6f" % distribution.computeDensityGenerator(0.0)) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1))) print("margin CDF=%.6f" % margin.computeCDF(Point(1))) print("margin quantile=", repr(margin.computeQuantile(0.5))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = distribution.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2))) print("margins CDF=%.6f" % margins.computeCDF(Point(2))) quantile = Point(margins.computeQuantile(0.5)) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) # Very big test case for independent components dim = 200 meanPoint = Point(dim, 0.1) sigma = Point(dim, 1.0) distribution = Normal(meanPoint, sigma, IdentityMatrix(dim)) print("Has independent copula? ", distribution.hasIndependentCopula()) # Test for sampling oneSample = distribution.getSample(size // 10) print("sample of size ", size, " first=", repr( oneSample[0]), " last=", repr(oneSample[oneSample.getSize() - 1])) mean = oneSample.computeMean() print("mean error=%.6f" % ((mean - meanPoint).norm() / meanPoint.norm())) covariance = oneSample.computeCovariance() errorCovariance = 0.0 for i in range(dim): for j in range(dim): if (i == j): temp = sigma[i] * sigma[j] else: temp = 0.0 errorCovariance += fabs(covariance[i, j] - temp) print("covariance error=%.6f" % (errorCovariance / (dim * dim))) # Define a point zero = Point(dim, 0.0) # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point= ", repr(zero), " pdf=%.6f" % zeroPDF, " cdf=%.6f" % zeroCDF, " density generator=%.6f" % distribution.computeDensityGenerator(0.0)) except: import sys print("t_Normal_large.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Normal_std.expout000066400000000000000000000125261307543307100216240ustar00rootroot00000000000000Parameters collection= [class=PointWithDescription name=Marginal 1 dimension=2 description=[mean_0,standard_deviation_0] values=[0.5,2],class=PointWithDescription name=Marginal 2 dimension=2 description=[mean_1,standard_deviation_1] values=[-0.5,3],class=PointWithDescription name=Marginal 3 dimension=2 description=[mean_2,standard_deviation_2] values=[1,1],class=PointWithDescription name=dependence dimension=3 description=[R_1_0,R_2_0,R_2_1] values=[0.5,0,0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [1] standard moment n= 3 value= [0] standard moment n= 4 value= [3] standard moment n= 5 value= [0] Standard representative= Normal(mu = 0, sigma = 1) Distribution class=Normal name=A normal distribution dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.5,0,0.5,1,0.5,0,0.5,1] Distribution Normal(mu = [0.5,-0.5,1], sigma = [2,3,1], R = [[ 1 0.5 0 ] [ 0.5 1 0.5 ] [ 0 0.5 1 ]]) Covariance class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,3,0,3,9,1.5,0,1.5,1] Elliptical = True Continuous = True oneRealization= class=Point name=Unnamed dimension=3 values=[1.7164,-2.8773,-0.088868] oneSample first= class=Point name=Unnamed dimension=3 values=[2.911,-4.3592,0.026385] last= class=Point name=Unnamed dimension=3 values=[-0.74389,-1.2542,0.21664] mean= class=Point name=Unnamed dimension=3 values=[0.47635,-0.53822,0.99788] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[3.9398,2.8594,-0.015971,2.8594,8.9459,1.4876,-0.015971,1.4876,1.005] Point= class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] ddf = class=Point name=Unnamed dimension=3 values=[0.002741,-0.0036547,0.010181] ddf (FD)= class=Point name=Unnamed dimension=3 values=[0.002741,-0.0036547,0.010181] log pdf=-4.667289 pdf =0.009398 characteristic function=0.049516+0.027050i log characteristic function=-2.874885+0.499990i cdf=0.146342 pdf gradient = class=Point name=Unnamed dimension=6 values=[-0.002741,0.0036547,-0.010181,-0.0046988,-0.0019144,-0.0043071] pdf gradient (FD)= class=Point name=Unnamed dimension=6 values=[-0.002741,0.0036547,-0.010181,-0.0046988,-0.0019144,-0.0043071] quantile= class=Point name=Unnamed dimension=3 values=[4.6596,5.7395,3.0798] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[-3.6596,-6.7395,-1.0798] Survival(inverseSurvival)=0.950000 mean= class=Point name=Unnamed dimension=3 values=[0.5,-0.5,1] standard deviation= class=Point name=Unnamed dimension=3 values=[2,3,1] skewness= class=Point name=Unnamed dimension=3 values=[0,0,0] kurtosis= class=Point name=Unnamed dimension=3 values=[3,3,3] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,3,0,3,9,1.5,0,1.5,1] parameters= [class=PointWithDescription name=Marginal 1 dimension=2 description=[mean_0,standard_deviation_0] values=[0.5,2],class=PointWithDescription name=Marginal 2 dimension=2 description=[mean_1,standard_deviation_1] values=[-0.5,3],class=PointWithDescription name=Marginal 3 dimension=2 description=[mean_2,standard_deviation_2] values=[1,1],class=PointWithDescription name=dependence dimension=3 description=[R_1_0,R_2_0,R_2_1] values=[0.5,0,0.5]] density generator=0.043639 pdf via density generator=0.009398 density generator derivative =-0.021820 density generator derivative (FD)=-0.021820 density generator second derivative =0.010910 density generator second derivative (FD)=0.010910 Radial CDF(2.000000 )=0.738536 margin= class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] margin PDF=0.352065 margin CDF=0.308538 margin quantile= class=Point name=Unnamed dimension=1 values=[2.6449] margin realization= class=Point name=Unnamed dimension=1 values=[-0.19729] indices= [1,0] margins= class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[-0.5,0.5] sigma=class=Point name=Unnamed dimension=2 values=[3,2] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] margins PDF=0.028443 margins CDF=0.393662 margins quantile= class=Point name=Unnamed dimension=2 values=[5.249,4.3327] margins CDF(qantile)=0.950000 margins realization= class=Point name=Unnamed dimension=2 values=[-2.2459,-3.0994] chol= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2,1.5,0,0,2.5981,0.57735,0,0,0.8165] invchol= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,-0.28867,0.20412,0,0.3849,-0.27217,0,0,1.2247] chol*t(chol)= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[4,3,0,3,9,1.5,0,1.5,1] chol*invchol= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0,0,0,1,0,0,0,1] openturns-1.9/python/test/t_Normal_std.py000077500000000000000000000220301307543307100207220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar def cleanPoint(inPoint): dim = inPoint.getDimension() for i in range(dim): if (fabs(inPoint[i]) < 1.e-10): inPoint[i] = 0.0 return inPoint try: PlatformInfo.SetNumericalPrecision(5) # Instanciate one distribution object dim = 3 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution = Normal(meanPoint, sigma, R) distribution.setName("A normal distribution") description = Description(dim) description[0] = "Marginal 1" description[1] = "Marginal 2" description[2] = "Marginal 3" distribution.setDescription(description) print("Parameters collection=", repr( distribution.getParametersCollection())) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) print("Distribution ", repr(distribution)) print("Distribution ", distribution) print("Covariance ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 0.5) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with respect to its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(cleanPoint(DDF))) # by the finite difference technique ddfFD = Point(dim) for i in range(dim): pointEps = point pointEps[i] += eps ddfFD[i] = distribution.computePDF(pointEps) pointEps[i] -= 2.0 * eps ddfFD[i] -= distribution.computePDF(pointEps) ddfFD[i] /= 2.0 * eps print("ddf (FD)=", repr(cleanPoint(ddfFD))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF if dim == 1: print("pdf (FD)=%.6f" % cleanScalar((distribution.computeCDF( point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) CF = distribution.computeCharacteristicFunction(point) print("characteristic function=%.6f+%.6fi" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point) print("log characteristic function=%.6f+%.6fi" % (LCF.real, LCF.imag)) CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2 * dim) for i in range(dim): meanPoint[i] += eps distributionLeft = Normal(meanPoint, sigma, R) meanPoint[i] -= 2.0 * eps distributionRight = Normal(meanPoint, sigma, R) PDFgrFD[i] = (distributionLeft.computePDF(point) - distributionRight.computePDF(point)) / (2.0 * eps) meanPoint[i] += eps for i in range(dim): sigma[i] += eps distributionLeft = Normal(meanPoint, sigma, R) sigma[i] -= 2.0 * eps distributionRight = Normal(meanPoint, sigma, R) PDFgrFD[dim + i] = (distributionLeft.computePDF( point) - distributionRight.computePDF(point)) / (2.0 * eps) sigma[i] += eps print("pdf gradient (FD)=", repr(cleanPoint(PDFgrFD))) # derivative of the PDF with regards the parameters of the distribution # CDFgr = distribution.computeCDFGradient( point ) # print "cdf gradient =" , CDFgr # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions if distribution.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", distribution.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = distribution.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", distribution.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", distribution.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", distribution.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) # Specific to this distribution beta = point.normSquare() densityGenerator = distribution.computeDensityGenerator(beta) print("density generator=%.6f" % densityGenerator) print("pdf via density generator=%.6f" % EllipticalDistribution.computePDF(distribution, point)) densityGeneratorDerivative = distribution.computeDensityGeneratorDerivative( beta) print("density generator derivative =%.6f" % densityGeneratorDerivative) print("density generator derivative (FD)=%.6f" % cleanScalar((distribution.computeDensityGenerator( beta + eps) - distribution.computeDensityGenerator(beta - eps)) / (2.0 * eps))) densityGeneratorSecondDerivative = distribution.computeDensityGeneratorSecondDerivative( beta) print("density generator second derivative =%.6f" % densityGeneratorSecondDerivative) print("density generator second derivative (FD)=%.6f" % cleanScalar((distribution.computeDensityGeneratorDerivative( beta + eps) - distribution.computeDensityGeneratorDerivative(beta - eps)) / (2.0 * eps))) # Compute the radial CDF radius = 2.0 print("Radial CDF(%.6f" % radius, ")=%.6f" % distribution.computeRadialDistributionCDF(radius)) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", repr(margin)) print("margin PDF=%.6f" % margin.computePDF(Point(1, 0.5))) print("margin CDF=%.6f" % margin.computeCDF(Point(1, 0.5))) print("margin quantile=", repr(margin.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) if (dim >= 2): # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margins = distribution.getMarginal(indices) print("margins=", repr(margins)) print("margins PDF=%.6f" % margins.computePDF(Point(2, 0.5))) print("margins CDF=%.6f" % margins.computeCDF(Point(2, 0.5))) quantile = margins.computeQuantile(0.95) print("margins quantile=", repr(quantile)) print("margins CDF(qantile)=%.6f" % margins.computeCDF(quantile)) print("margins realization=", repr(margins.getRealization())) chol = distribution.getCholesky() invChol = distribution.getInverseCholesky() print("chol=", repr(chol.clean(1e-6))) print("invchol=", repr(invChol.clean(1e-6))) print("chol*t(chol)=", repr((chol * chol.transpose()).clean(1e-6))) print("chol*invchol=", repr((chol * invChol).clean(1e-6))) except: import sys print("t_Normal_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Normal_wrongarg.expout000066400000000000000000000004471307543307100226570ustar00rootroot00000000000000Distribution class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] openturns-1.9/python/test/t_Normal_wrongarg.py000077500000000000000000000014351307543307100217640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: try: # Instanciate one distribution object meanPoint = Point(1) meanPoint[0] = 1.0 sigma = Point(1) sigma[0] = 1.0 R = CorrelationMatrix(1) distribution = Normal(meanPoint, sigma, R) print("Distribution ", repr(distribution)) # We try to set an erroneous covariance matrix (wrong dimension) into # distribution newR = CorrelationMatrix(2) distribution.setCorrelationMatrix(newR) # Normally, we should never go here raise except: pass # except TestFailed, ex : except: import sys print("t_Normal_wrongarg.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_NormalityTest_std.expout000066400000000000000000000020111307543307100231760ustar00rootroot00000000000000sample Beta result= 0.0 sample Gamma result= 0.0 sample Gumbel result= 0.0 sample LogNormal result= 0.0 sample Logistic result= 0.0 sample Normal result= 1.0 sample TruncatedNormal result= 0.0 sample Student result= 0.0 sample Triangular result= 0.0 sample Uniform result= 0.0 sample Weibull result= 0.0 sample Geometric result= 0.0 sample Poisson result= 0.0 sample UserDefined result= 0.0 andersonDarlingResult= class=Point name=Unnamed dimension=14 values=[0,0,0,0,0,1,0,0,0,0,0,0,0,0] sample Beta result= 0.0 sample Gamma result= 0.0 sample Gumbel result= 0.0 sample LogNormal result= 0.0 sample Logistic result= 0.0 sample Normal result= 1.0 sample TruncatedNormal result= 0.0 sample Student result= 0.0 sample Triangular result= 0.0 sample Uniform result= 0.0 sample Weibull result= 0.0 sample Geometric result= 0.0 sample Poisson result= 0.0 sample UserDefined result= 0.0 cramerVonMisesResult= class=Point name=Unnamed dimension=14 values=[0,0,0,0,0,1,0,0,0,0,0,0,0,0] openturns-1.9/python/test/t_NormalityTest_std.py000077500000000000000000000117161307543307100223210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: continuousDistributionCollection = DistributionCollection() discreteDistributionCollection = DistributionCollection() distributionCollection = DistributionCollection() beta = Beta(2., 3., 0., 1.) distributionCollection.add(beta) continuousDistributionCollection.add(beta) gamma = Gamma(1., 2., 3.) distributionCollection.add(gamma) continuousDistributionCollection.add(gamma) gumbel = Gumbel(1., 2.) distributionCollection.add(gumbel) continuousDistributionCollection.add(gumbel) lognormal = LogNormal(1., 1., 2.) distributionCollection.add(lognormal) continuousDistributionCollection.add(lognormal) logistic = Logistic(1., 1.) distributionCollection.add(logistic) continuousDistributionCollection.add(logistic) normal = Normal(1., 2.) distributionCollection.add(normal) continuousDistributionCollection.add(normal) truncatednormal = TruncatedNormal(1., 1., 0., 3.) distributionCollection.add(truncatednormal) continuousDistributionCollection.add(truncatednormal) student = Student(10., 10.) distributionCollection.add(student) continuousDistributionCollection.add(student) triangular = Triangular(-1., 2., 4.) distributionCollection.add(triangular) continuousDistributionCollection.add(triangular) uniform = Uniform(1., 2.) distributionCollection.add(uniform) continuousDistributionCollection.add(uniform) weibull = Weibull(1., 1., 2.) distributionCollection.add(weibull) continuousDistributionCollection.add(weibull) geometric = Geometric(.5) distributionCollection.add(geometric) discreteDistributionCollection.add(geometric) poisson = Poisson(2.) distributionCollection.add(poisson) discreteDistributionCollection.add(poisson) x = [[1.0], [2.0], [3.0]] p = [0.3, 0.2, 0.5] userdefined = UserDefined(x, p) distributionCollection.add(userdefined) discreteDistributionCollection.add(userdefined) size = 10000 # Number of continuous distributions continuousDistributionNumber = continuousDistributionCollection.getSize() # Number of discrete distributions discreteDistributionNumber = discreteDistributionCollection.getSize() # Number of distributions distributionNumber = continuousDistributionNumber + \ discreteDistributionNumber # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has distributionNumber # Samples sampleCollection = [Sample(size, 1) for i in range(distributionNumber)] # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has # continuousDistributionNumber Samples continuousSampleCollection = [Sample(size, 1) for i in range(continuousDistributionNumber)] # We create a collection of Sample of size "size" and of # dimension 1 (scalar values) : the collection has # discreteDistributionNumber Samples discreteSampleCollection = [Sample(size, 1) for i in range(discreteDistributionNumber)] for i in range(continuousDistributionNumber): continuousSampleCollection[ i] = continuousDistributionCollection[i].getSample(size) continuousSampleCollection[i].setName( continuousDistributionCollection[i].getName()) sampleCollection[i] = continuousSampleCollection[i] for i in range(discreteDistributionNumber): discreteSampleCollection[ i] = discreteDistributionCollection[i].getSample(size) discreteSampleCollection[i].setName( discreteDistributionCollection[i].getName()) sampleCollection[ continuousDistributionNumber + i] = discreteSampleCollection[i] # Test the normality of several samples using the Anderson Darling test andersonDarlingResult = Point(distributionNumber) for i in range(distributionNumber): result = NormalityTest.AndersonDarlingNormal(sampleCollection[i]) andersonDarlingResult[i] = result.getBinaryQualityMeasure() print("sample ", sampleCollection[ i].getName(), " result=", andersonDarlingResult[i]) print("andersonDarlingResult=", repr(andersonDarlingResult)) # Test the normality of several samples using the Cramer Von Mises test cramerVonMisesResult = Point(distributionNumber) for i in range(distributionNumber): result = NormalityTest.CramerVonMisesNormal(sampleCollection[i]) cramerVonMisesResult[i] = result.getBinaryQualityMeasure() print("sample ", sampleCollection[ i].getName(), " result=", cramerVonMisesResult[i]) print("cramerVonMisesResult=", repr(cramerVonMisesResult)) except: import sys print("t_NormalityTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Object_pickle.expout000066400000000000000000000003361307543307100222530ustar00rootroot00000000000000object: [1.6,-8.7] same: True object: 0 : [ 4.6 -3.7 ] 1 : [ 8.4 6.3 ] same: True object: [x,y,z] same: True object: [1,2,4] same: True object: [[ 1 2 ] [ 3 4 ]] same: True object: [x1,x2]->[y1=x1+x2] same: True openturns-1.9/python/test/t_Object_pickle.py000077500000000000000000000011731307543307100213620ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import pickle from io import BytesIO obj_list = [] obj_list.append(ot.Point([1.6, -8.7])) obj_list.append(ot.Sample([[4.6, -3.7], [8.4, 6.3]])) obj_list.append(ot.Description(['x', 'y', 'z'])) obj_list.append(ot.Indices([1, 2, 4])) obj_list.append(ot.Matrix([[1, 2], [3, 4]])) obj_list.append(ot.Function(['x1', 'x2'], ['y1'], ['y1=x1+x2'])) src = BytesIO() for i in range(len(obj_list)): pickle.dump(obj_list[i], src) src.seek(0) for i in range(len(obj_list)): obj = pickle.load(src) print(('object: ' + str(obj))) print(('same: ' + str(obj_list[i] == obj) + '\n')) openturns-1.9/python/test/t_OptimalLHSExperiment_ishigami.py000077500000000000000000000060361307543307100245170ustar00rootroot00000000000000from __future__ import print_function import openturns as ot from math import sin, pi # import matplotlib # matplotlib.use('Agg') # import matplotlib.pylab as plt # Definition of the Ishigami function dimension = 3 a = 7.0 b = 0.1 input_variables = ['xi1', 'xi2', 'xi3', 'a', 'b'] formula = ['sin(xi1) + a * (sin(xi2)) ^ 2 + b * xi3^4 * sin(xi1)'] full = ot.SymbolicFunction(input_variables, formula) ishigami_model = ot.ParametricFunction(full, [3, 4], [a, b]) # Generating a design of size N = 150 # Considering independent Uniform distributions of dimension 3 # Bounds are (-pi,pi), (-pi,pi) and (-pi,pi) distribution = ot.ComposedDistribution([ot.Uniform(-pi, pi)] * dimension) bounds = distribution.getRange() # Random LHS lhs = ot.LHSExperiment(distribution, N) lhs.setAlwaysShuffle(True) # randomized # Fixing C2 crit space_filling = ot.SpaceFillingC2() # Defining a temperature profile temperatureProfile = ot.GeometricProfile() # Pre conditionning : generate an optimal design with MC nSimu = 100 algo = ot.MonteCarloLHS(lhs, nSimu, space_filling) initialDesign = algo.generate() result = algo.getResult() print('initial design pre-computed. Performing SA optimization...') # Use of initial design algo = ot.SimulatedAnnealingLHS( initialDesign, distribution, temperatureProfile, space_filling) # Retrieve optimal design input_database = algo.generate() result = algo.getResult() print('initial design computed') # Response of the model print('sampling size = ', N) output_database = ishigami_model(input_database) # Learning input/output # Usual chaos meta model enumerate_function = ot.HyperbolicAnisotropicEnumerateFunction(dimension) orthogonal_basis = ot.OrthogonalProductPolynomialFactory( dimension * [ot.LegendreFactory()], enumerate_function) basis_size = 100 # Initial chaos algorithm adaptive_strategy = ot.FixedStrategy(orthogonal_basis, basis_size) # ProjectionStrategy ==> Sparse fitting_algorithm = ot.KFold() approximation_algorithm = ot.LeastSquaresMetaModelSelectionFactory( ot.LARS(), fitting_algorithm) projection_strategy = ot.LeastSquaresStrategy( input_database, output_database, approximation_algorithm) print('Surrogate model...') distribution_ishigami = ot.ComposedDistribution( dimension * [ot.Uniform(-pi, pi)]) algo_pc = ot.FunctionalChaosAlgorithm( input_database, output_database, distribution_ishigami, adaptive_strategy, projection_strategy) algo_pc.run() chaos_result = algo_pc.getResult() print('Surrogate model computed') # Validation lhs_validation = ot.LHSExperiment(distribution_ishigami, 100) input_validation = lhs_validation.generate() output_validation = ishigami_model(input_validation) # Chaos model evaluation output_metamodel_sample = chaos_result.getMetaModel()(input_validation) # Cloud validation ==> change from matplotlib to pure OT # fig = plt.figure() # plt.plot(output_validation, output_validation, 'b-', label='Model') # plt.plot(output_validation, output_metamodel_sample, 'r.', label='SM') # plt.title('Surrogate Model validation - Ishigami use case') # plt.savefig('ishigami_model_validation.png') openturns-1.9/python/test/t_OptimalLHSExperiment_std.expout000066400000000000000000001664671307543307100244270ustar00rootroot00000000000000lhs= LHSExperiment(distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1, size100, always shuffle=true, random shift=false Bounds of uniform distributions= [0, 1] [0, 1] [0, 1] design= [ X0 X1 X2 ] 0 : [ 0.045 0.965 0.815 ] 1 : [ 0.225 0.625 0.935 ] 2 : [ 0.295 0.745 0.095 ] 3 : [ 0.515 0.105 0.345 ] 4 : [ 0.085 0.645 0.285 ] 5 : [ 0.455 0.915 0.525 ] 6 : [ 0.525 0.775 0.575 ] 7 : [ 0.305 0.295 0.845 ] 8 : [ 0.155 0.015 0.265 ] 9 : [ 0.365 0.335 0.065 ] 10 : [ 0.215 0.605 0.965 ] 11 : [ 0.145 0.355 0.175 ] 12 : [ 0.835 0.525 0.085 ] 13 : [ 0.615 0.755 0.455 ] 14 : [ 0.005 0.955 0.465 ] 15 : [ 0.685 0.325 0.905 ] 16 : [ 0.315 0.375 0.325 ] 17 : [ 0.645 0.285 0.135 ] 18 : [ 0.815 0.165 0.185 ] 19 : [ 0.385 0.985 0.205 ] 20 : [ 0.765 0.465 0.695 ] 21 : [ 0.115 0.045 0.655 ] 22 : [ 0.135 0.005 0.025 ] 23 : [ 0.915 0.555 0.535 ] 24 : [ 0.445 0.705 0.495 ] 25 : [ 0.875 0.715 0.385 ] 26 : [ 0.055 0.135 0.445 ] 27 : [ 0.885 0.305 0.125 ] 28 : [ 0.395 0.805 0.425 ] 29 : [ 0.485 0.845 0.295 ] 30 : [ 0.655 0.615 0.585 ] 31 : [ 0.865 0.065 0.825 ] 32 : [ 0.025 0.055 0.155 ] 33 : [ 0.255 0.195 0.035 ] 34 : [ 0.185 0.945 0.235 ] 35 : [ 0.905 0.675 0.715 ] 36 : [ 0.575 0.635 0.735 ] 37 : [ 0.945 0.425 0.765 ] 38 : [ 0.425 0.495 0.915 ] 39 : [ 0.675 0.485 0.145 ] 40 : [ 0.985 0.455 0.555 ] 41 : [ 0.735 0.765 0.665 ] 42 : [ 0.495 0.185 0.485 ] 43 : [ 0.775 0.125 0.725 ] 44 : [ 0.275 0.075 0.545 ] 45 : [ 0.965 0.875 0.895 ] 46 : [ 0.625 0.205 0.885 ] 47 : [ 0.895 0.685 0.985 ] 48 : [ 0.465 0.825 0.595 ] 49 : [ 0.075 0.535 0.355 ] 50 : [ 0.325 0.505 0.165 ] 51 : [ 0.205 0.025 0.565 ] 52 : [ 0.825 0.655 0.875 ] 53 : [ 0.285 0.435 0.045 ] 54 : [ 0.165 0.975 0.805 ] 55 : [ 0.665 0.885 0.775 ] 56 : [ 0.695 0.725 0.505 ] 57 : [ 0.975 0.695 0.945 ] 58 : [ 0.725 0.255 0.625 ] 59 : [ 0.715 0.585 0.685 ] 60 : [ 0.605 0.035 0.675 ] 61 : [ 0.565 0.345 0.225 ] 62 : [ 0.265 0.315 0.615 ] 63 : [ 0.195 0.515 0.925 ] 64 : [ 0.125 0.445 0.435 ] 65 : [ 0.415 0.415 0.475 ] 66 : [ 0.355 0.565 0.975 ] 67 : [ 0.635 0.835 0.255 ] 68 : [ 0.855 0.215 0.515 ] 69 : [ 0.345 0.905 0.275 ] 70 : [ 0.435 0.235 0.305 ] 71 : [ 0.995 0.815 0.075 ] 72 : [ 0.755 0.155 0.115 ] 73 : [ 0.245 0.475 0.365 ] 74 : [ 0.845 0.925 0.855 ] 75 : [ 0.545 0.395 0.335 ] 76 : [ 0.785 0.245 0.395 ] 77 : [ 0.095 0.175 0.755 ] 78 : [ 0.035 0.405 0.705 ] 79 : [ 0.235 0.545 0.055 ] 80 : [ 0.705 0.595 0.005 ] 81 : [ 0.175 0.795 0.795 ] 82 : [ 0.585 0.995 0.015 ] 83 : [ 0.015 0.085 0.955 ] 84 : [ 0.955 0.385 0.375 ] 85 : [ 0.335 0.665 0.785 ] 86 : [ 0.745 0.735 0.645 ] 87 : [ 0.065 0.865 0.745 ] 88 : [ 0.105 0.785 0.245 ] 89 : [ 0.505 0.145 0.315 ] 90 : [ 0.805 0.225 0.635 ] 91 : [ 0.795 0.895 0.995 ] 92 : [ 0.595 0.365 0.605 ] 93 : [ 0.555 0.575 0.405 ] 94 : [ 0.375 0.275 0.415 ] 95 : [ 0.475 0.855 0.105 ] 96 : [ 0.935 0.265 0.835 ] 97 : [ 0.925 0.095 0.215 ] 98 : [ 0.405 0.115 0.865 ] 99 : [ 0.535 0.935 0.195 ] PhiP=27.099207, C2=0.027859 lhs= class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=100 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true simulation size=100 Generating design with MonteCarlo and C2 space filling= [ X0 X1 X2 ] 0 : [ 0.335 0.145 0.885 ] 1 : [ 0.945 0.895 0.305 ] 2 : [ 0.205 0.225 0.005 ] 3 : [ 0.015 0.945 0.895 ] 4 : [ 0.895 0.095 0.685 ] 5 : [ 0.265 0.525 0.375 ] 6 : [ 0.315 0.745 0.945 ] 7 : [ 0.925 0.565 0.285 ] 8 : [ 0.375 0.115 0.775 ] 9 : [ 0.185 0.715 0.395 ] 10 : [ 0.485 0.585 0.525 ] 11 : [ 0.025 0.685 0.565 ] 12 : [ 0.405 0.885 0.105 ] 13 : [ 0.145 0.185 0.385 ] 14 : [ 0.045 0.425 0.905 ] 15 : [ 0.875 0.865 0.115 ] 16 : [ 0.535 0.845 0.205 ] 17 : [ 0.065 0.595 0.655 ] 18 : [ 0.325 0.985 0.835 ] 19 : [ 0.235 0.355 0.925 ] 20 : [ 0.905 0.545 0.195 ] 21 : [ 0.625 0.345 0.615 ] 22 : [ 0.785 0.305 0.855 ] 23 : [ 0.195 0.495 0.125 ] 24 : [ 0.255 0.665 0.405 ] 25 : [ 0.865 0.835 0.915 ] 26 : [ 0.125 0.995 0.235 ] 27 : [ 0.525 0.295 0.055 ] 28 : [ 0.675 0.045 0.155 ] 29 : [ 0.085 0.505 0.735 ] 30 : [ 0.245 0.445 0.275 ] 31 : [ 0.035 0.625 0.365 ] 32 : [ 0.465 0.695 0.045 ] 33 : [ 0.915 0.375 0.955 ] 34 : [ 0.855 0.005 0.675 ] 35 : [ 0.955 0.735 0.745 ] 36 : [ 0.735 0.455 0.335 ] 37 : [ 0.285 0.435 0.545 ] 38 : [ 0.615 0.465 0.825 ] 39 : [ 0.415 0.025 0.605 ] 40 : [ 0.715 0.415 0.265 ] 41 : [ 0.395 0.015 0.425 ] 42 : [ 0.645 0.955 0.705 ] 43 : [ 0.975 0.265 0.145 ] 44 : [ 0.935 0.155 0.355 ] 45 : [ 0.995 0.705 0.485 ] 46 : [ 0.495 0.085 0.445 ] 47 : [ 0.165 0.195 0.225 ] 48 : [ 0.775 0.055 0.935 ] 49 : [ 0.705 0.645 0.625 ] 50 : [ 0.455 0.175 0.815 ] 51 : [ 0.595 0.105 0.795 ] 52 : [ 0.355 0.815 0.535 ] 53 : [ 0.985 0.255 0.975 ] 54 : [ 0.275 0.335 0.035 ] 55 : [ 0.505 0.655 0.325 ] 56 : [ 0.575 0.165 0.215 ] 57 : [ 0.095 0.075 0.765 ] 58 : [ 0.115 0.315 0.715 ] 59 : [ 0.825 0.925 0.295 ] 60 : [ 0.835 0.365 0.495 ] 61 : [ 0.885 0.535 0.845 ] 62 : [ 0.515 0.475 0.435 ] 63 : [ 0.655 0.725 0.725 ] 64 : [ 0.135 0.395 0.585 ] 65 : [ 0.745 0.975 0.455 ] 66 : [ 0.665 0.965 0.785 ] 67 : [ 0.075 0.275 0.865 ] 68 : [ 0.055 0.805 0.475 ] 69 : [ 0.725 0.035 0.095 ] 70 : [ 0.795 0.905 0.665 ] 71 : [ 0.305 0.915 0.985 ] 72 : [ 0.695 0.385 0.255 ] 73 : [ 0.845 0.405 0.345 ] 74 : [ 0.805 0.325 0.635 ] 75 : [ 0.635 0.635 0.415 ] 76 : [ 0.815 0.765 0.165 ] 77 : [ 0.385 0.605 0.245 ] 78 : [ 0.225 0.675 0.965 ] 79 : [ 0.475 0.555 0.805 ] 80 : [ 0.755 0.795 0.755 ] 81 : [ 0.155 0.785 0.555 ] 82 : [ 0.365 0.825 0.075 ] 83 : [ 0.565 0.245 0.515 ] 84 : [ 0.005 0.485 0.595 ] 85 : [ 0.215 0.285 0.315 ] 86 : [ 0.685 0.125 0.645 ] 87 : [ 0.345 0.215 0.465 ] 88 : [ 0.105 0.575 0.015 ] 89 : [ 0.965 0.205 0.025 ] 90 : [ 0.295 0.135 0.065 ] 91 : [ 0.555 0.515 0.575 ] 92 : [ 0.545 0.775 0.505 ] 93 : [ 0.175 0.855 0.085 ] 94 : [ 0.445 0.875 0.875 ] 95 : [ 0.585 0.615 0.995 ] 96 : [ 0.425 0.235 0.135 ] 97 : [ 0.605 0.065 0.175 ] 98 : [ 0.765 0.755 0.695 ] 99 : [ 0.435 0.935 0.185 ] History criterion= [ C2 criterion ] 0 : [ 0.0323174 ] 1 : [ 0.0301089 ] 2 : [ 0.0324575 ] 3 : [ 0.0319669 ] 4 : [ 0.0282157 ] 5 : [ 0.0268695 ] 6 : [ 0.0316291 ] 7 : [ 0.0244881 ] 8 : [ 0.0229737 ] 9 : [ 0.0346399 ] 10 : [ 0.0312176 ] 11 : [ 0.0307778 ] 12 : [ 0.0270968 ] 13 : [ 0.0302116 ] 14 : [ 0.0322865 ] 15 : [ 0.0279143 ] 16 : [ 0.032537 ] 17 : [ 0.0280055 ] 18 : [ 0.0327617 ] 19 : [ 0.0216518 ] 20 : [ 0.0278783 ] 21 : [ 0.0318149 ] 22 : [ 0.0302444 ] 23 : [ 0.0303581 ] 24 : [ 0.0268069 ] 25 : [ 0.0260815 ] 26 : [ 0.0342562 ] 27 : [ 0.0336186 ] 28 : [ 0.0325816 ] 29 : [ 0.0248787 ] 30 : [ 0.0295635 ] 31 : [ 0.0249861 ] 32 : [ 0.036598 ] 33 : [ 0.0329628 ] 34 : [ 0.0338691 ] 35 : [ 0.0368826 ] 36 : [ 0.0343283 ] 37 : [ 0.0265882 ] 38 : [ 0.0235683 ] 39 : [ 0.0372625 ] 40 : [ 0.0344897 ] 41 : [ 0.0302653 ] 42 : [ 0.0274669 ] 43 : [ 0.0303033 ] 44 : [ 0.023746 ] 45 : [ 0.0286645 ] 46 : [ 0.0246026 ] 47 : [ 0.0373565 ] 48 : [ 0.0294653 ] 49 : [ 0.0242962 ] 50 : [ 0.0286519 ] 51 : [ 0.0326638 ] 52 : [ 0.0301761 ] 53 : [ 0.0305994 ] 54 : [ 0.0280652 ] 55 : [ 0.0275332 ] 56 : [ 0.0294543 ] 57 : [ 0.0330477 ] 58 : [ 0.0316796 ] 59 : [ 0.026597 ] 60 : [ 0.0247812 ] 61 : [ 0.0292077 ] 62 : [ 0.0267236 ] 63 : [ 0.0242901 ] 64 : [ 0.033658 ] 65 : [ 0.0304247 ] 66 : [ 0.0287206 ] 67 : [ 0.0395348 ] 68 : [ 0.02877 ] 69 : [ 0.0369848 ] 70 : [ 0.0294479 ] 71 : [ 0.0281751 ] 72 : [ 0.0302096 ] 73 : [ 0.0277725 ] 74 : [ 0.0296492 ] 75 : [ 0.0320841 ] 76 : [ 0.0335318 ] 77 : [ 0.0289551 ] 78 : [ 0.0371076 ] 79 : [ 0.0279657 ] 80 : [ 0.0301941 ] 81 : [ 0.0237623 ] 82 : [ 0.0343735 ] 83 : [ 0.0332064 ] 84 : [ 0.0337802 ] 85 : [ 0.0275825 ] 86 : [ 0.0275936 ] 87 : [ 0.024978 ] 88 : [ 0.028959 ] 89 : [ 0.0262968 ] 90 : [ 0.0254339 ] 91 : [ 0.0298191 ] 92 : [ 0.0309576 ] 93 : [ 0.0347666 ] 94 : [ 0.0315499 ] 95 : [ 0.0332634 ] 96 : [ 0.0300496 ] 97 : [ 0.030695 ] 98 : [ 0.0297715 ] 99 : [ 0.0285167 ] Final criteria: C2=0.021652, PhiP=26.726124 lhs= class=MonteCarloLHS name=Unnamed lhs=class=LHSExperiment name=Unnamed distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1 size=100 alwaysShuffle=true random shift=false spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 simulation size=100 Generating design with MonteCarlo and PhiP optimum= [ X0 X1 X2 ] 0 : [ 0.095 0.625 0.055 ] 1 : [ 0.575 0.605 0.465 ] 2 : [ 0.655 0.615 0.425 ] 3 : [ 0.505 0.495 0.665 ] 4 : [ 0.245 0.365 0.565 ] 5 : [ 0.225 0.055 0.685 ] 6 : [ 0.695 0.865 0.995 ] 7 : [ 0.335 0.805 0.225 ] 8 : [ 0.305 0.955 0.625 ] 9 : [ 0.315 0.175 0.855 ] 10 : [ 0.285 0.555 0.615 ] 11 : [ 0.855 0.165 0.295 ] 12 : [ 0.785 0.305 0.155 ] 13 : [ 0.115 0.995 0.365 ] 14 : [ 0.065 0.535 0.115 ] 15 : [ 0.145 0.245 0.875 ] 16 : [ 0.825 0.515 0.925 ] 17 : [ 0.375 0.155 0.755 ] 18 : [ 0.105 0.145 0.645 ] 19 : [ 0.425 0.025 0.455 ] 20 : [ 0.805 0.045 0.975 ] 21 : [ 0.175 0.745 0.035 ] 22 : [ 0.675 0.215 0.435 ] 23 : [ 0.815 0.355 0.085 ] 24 : [ 0.005 0.265 0.095 ] 25 : [ 0.135 0.275 0.675 ] 26 : [ 0.085 0.385 0.245 ] 27 : [ 0.725 0.185 0.835 ] 28 : [ 0.905 0.775 0.195 ] 29 : [ 0.845 0.325 0.985 ] 30 : [ 0.185 0.315 0.495 ] 31 : [ 0.745 0.875 0.345 ] 32 : [ 0.395 0.435 0.715 ] 33 : [ 0.275 0.375 0.045 ] 34 : [ 0.735 0.505 0.965 ] 35 : [ 0.265 0.395 0.305 ] 36 : [ 0.345 0.225 0.265 ] 37 : [ 0.595 0.575 0.275 ] 38 : [ 0.835 0.035 0.745 ] 39 : [ 0.515 0.075 0.705 ] 40 : [ 0.985 0.125 0.235 ] 41 : [ 0.605 0.935 0.075 ] 42 : [ 0.755 0.655 0.395 ] 43 : [ 0.475 0.925 0.105 ] 44 : [ 0.355 0.135 0.945 ] 45 : [ 0.385 0.565 0.475 ] 46 : [ 0.485 0.765 0.125 ] 47 : [ 0.445 0.345 0.025 ] 48 : [ 0.045 0.965 0.815 ] 49 : [ 0.875 0.545 0.445 ] 50 : [ 0.235 0.595 0.555 ] 51 : [ 0.935 0.095 0.545 ] 52 : [ 0.555 0.335 0.065 ] 53 : [ 0.035 0.015 0.485 ] 54 : [ 0.625 0.815 0.695 ] 55 : [ 0.165 0.755 0.355 ] 56 : [ 0.915 0.525 0.785 ] 57 : [ 0.215 0.695 0.375 ] 58 : [ 0.535 0.285 0.205 ] 59 : [ 0.645 0.415 0.535 ] 60 : [ 0.365 0.975 0.575 ] 61 : [ 0.495 0.685 0.915 ] 62 : [ 0.525 0.785 0.185 ] 63 : [ 0.155 0.205 0.525 ] 64 : [ 0.585 0.065 0.135 ] 65 : [ 0.205 0.915 0.825 ] 66 : [ 0.925 0.845 0.805 ] 67 : [ 0.295 0.465 0.145 ] 68 : [ 0.685 0.825 0.015 ] 69 : [ 0.465 0.725 0.865 ] 70 : [ 0.975 0.715 0.655 ] 71 : [ 0.325 0.105 0.585 ] 72 : [ 0.055 0.195 0.735 ] 73 : [ 0.945 0.235 0.385 ] 74 : [ 0.995 0.835 0.795 ] 75 : [ 0.545 0.905 0.725 ] 76 : [ 0.015 0.645 0.405 ] 77 : [ 0.955 0.255 0.605 ] 78 : [ 0.565 0.455 0.905 ] 79 : [ 0.405 0.895 0.765 ] 80 : [ 0.255 0.405 0.635 ] 81 : [ 0.635 0.475 0.335 ] 82 : [ 0.075 0.675 0.515 ] 83 : [ 0.665 0.005 0.845 ] 84 : [ 0.615 0.735 0.325 ] 85 : [ 0.775 0.085 0.285 ] 86 : [ 0.415 0.295 0.775 ] 87 : [ 0.865 0.635 0.215 ] 88 : [ 0.795 0.115 0.005 ] 89 : [ 0.125 0.585 0.885 ] 90 : [ 0.715 0.855 0.415 ] 91 : [ 0.195 0.445 0.315 ] 92 : [ 0.435 0.795 0.935 ] 93 : [ 0.885 0.945 0.595 ] 94 : [ 0.895 0.705 0.175 ] 95 : [ 0.765 0.665 0.165 ] 96 : [ 0.455 0.985 0.955 ] 97 : [ 0.705 0.885 0.895 ] 98 : [ 0.025 0.485 0.255 ] 99 : [ 0.965 0.425 0.505 ] History criterion= [ PhiP criterion ] 0 : [ 24.2536 ] 1 : [ 30.1511 ] 2 : [ 22.9777 ] 3 : [ 26.7261 ] 4 : [ 33.3378 ] 5 : [ 23.5702 ] 6 : [ 16.2939 ] 7 : [ 19.6224 ] 8 : [ 23.5702 ] 9 : [ 26.7261 ] 10 : [ 23.5703 ] 11 : [ 33.3377 ] 12 : [ 30.1526 ] 13 : [ 21.8218 ] 14 : [ 21.3226 ] 15 : [ 33.3333 ] 16 : [ 19.8981 ] 17 : [ 21.8218 ] 18 : [ 40.8248 ] 19 : [ 26.7261 ] 20 : [ 57.735 ] 21 : [ 19.3074 ] 22 : [ 24.2536 ] 23 : [ 30.1511 ] 24 : [ 23.5702 ] 25 : [ 21.8226 ] 26 : [ 26.7261 ] 27 : [ 40.8248 ] 28 : [ 30.1511 ] 29 : [ 57.735 ] 30 : [ 24.2536 ] 31 : [ 19.6224 ] 32 : [ 21.366 ] 33 : [ 27.0992 ] 34 : [ 30.1511 ] 35 : [ 28.8676 ] 36 : [ 21.3203 ] 37 : [ 18.2584 ] 38 : [ 19.2451 ] 39 : [ 41.7318 ] 40 : [ 21.8226 ] 41 : [ 16.4619 ] 42 : [ 20.414 ] 43 : [ 22.9429 ] 44 : [ 57.735 ] 45 : [ 33.3377 ] 46 : [ 26.7261 ] 47 : [ 21.3201 ] 48 : [ 30.1526 ] 49 : [ 26.7264 ] 50 : [ 22.9419 ] 51 : [ 21.8227 ] 52 : [ 19.6121 ] 53 : [ 23.6815 ] 54 : [ 26.7261 ] 55 : [ 57.735 ] 56 : [ 40.8248 ] 57 : [ 18.2612 ] 58 : [ 23.5702 ] 59 : [ 21.9409 ] 60 : [ 24.2543 ] 61 : [ 33.3333 ] 62 : [ 33.3333 ] 63 : [ 23.5702 ] 64 : [ 21.8218 ] 65 : [ 40.8248 ] 66 : [ 19.6336 ] 67 : [ 40.8248 ] 68 : [ 23.5703 ] 69 : [ 22.9416 ] 70 : [ 16.7537 ] 71 : [ 57.735 ] 72 : [ 23.5702 ] 73 : [ 24.2536 ] 74 : [ 21.824 ] 75 : [ 22.1265 ] 76 : [ 30.1511 ] 77 : [ 24.2536 ] 78 : [ 23.5898 ] 79 : [ 26.7264 ] 80 : [ 30.1511 ] 81 : [ 40.8248 ] 82 : [ 18.5695 ] 83 : [ 23.5706 ] 84 : [ 23.9575 ] 85 : [ 22.9416 ] 86 : [ 30.1511 ] 87 : [ 26.7274 ] 88 : [ 22.1285 ] 89 : [ 21.333 ] 90 : [ 23.8993 ] 91 : [ 24.2543 ] 92 : [ 30.1511 ] 93 : [ 27.0992 ] 94 : [ 21.8218 ] 95 : [ 26.7261 ] 96 : [ 14.313 ] 97 : [ 22.9429 ] 98 : [ 41.3947 ] 99 : [ 17.6512 ] Final criteria: C2=0.025627, PhiP=14.312989 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.95 iMax=2000 Generating design using SimulatedAnnealing geometric temperature & C2 criterion= [ X0 X1 X2 ] 0 : [ 0.655 0.045 0.475 ] 1 : [ 0.965 0.775 0.115 ] 2 : [ 0.565 0.005 0.875 ] 3 : [ 0.575 0.915 0.665 ] 4 : [ 0.215 0.125 0.415 ] 5 : [ 0.515 0.635 0.215 ] 6 : [ 0.935 0.865 0.925 ] 7 : [ 0.535 0.485 0.075 ] 8 : [ 0.115 0.645 0.365 ] 9 : [ 0.545 0.425 0.525 ] 10 : [ 0.915 0.705 0.375 ] 11 : [ 0.645 0.745 0.895 ] 12 : [ 0.285 0.785 0.435 ] 13 : [ 0.955 0.335 0.085 ] 14 : [ 0.015 0.825 0.795 ] 15 : [ 0.205 0.765 0.615 ] 16 : [ 0.365 0.155 0.815 ] 17 : [ 0.265 0.195 0.095 ] 18 : [ 0.375 0.235 0.975 ] 19 : [ 0.555 0.245 0.195 ] 20 : [ 0.865 0.585 0.965 ] 21 : [ 0.445 0.025 0.255 ] 22 : [ 0.295 0.255 0.395 ] 23 : [ 0.765 0.725 0.785 ] 24 : [ 0.025 0.165 0.005 ] 25 : [ 0.355 0.475 0.575 ] 26 : [ 0.345 0.345 0.145 ] 27 : [ 0.055 0.435 0.705 ] 28 : [ 0.085 0.935 0.125 ] 29 : [ 0.605 0.365 0.135 ] 30 : [ 0.945 0.105 0.285 ] 31 : [ 0.075 0.445 0.295 ] 32 : [ 0.035 0.735 0.535 ] 33 : [ 0.685 0.845 0.425 ] 34 : [ 0.335 0.925 0.305 ] 35 : [ 0.675 0.175 0.995 ] 36 : [ 0.905 0.405 0.945 ] 37 : [ 0.625 0.505 0.385 ] 38 : [ 0.185 0.885 0.985 ] 39 : [ 0.315 0.555 0.045 ] 40 : [ 0.755 0.415 0.165 ] 41 : [ 0.975 0.905 0.645 ] 42 : [ 0.855 0.035 0.675 ] 43 : [ 0.095 0.945 0.515 ] 44 : [ 0.995 0.225 0.625 ] 45 : [ 0.475 0.115 0.105 ] 46 : [ 0.005 0.515 0.235 ] 47 : [ 0.485 0.315 0.695 ] 48 : [ 0.615 0.495 0.585 ] 49 : [ 0.805 0.465 0.835 ] 50 : [ 0.495 0.855 0.745 ] 51 : [ 0.325 0.395 0.505 ] 52 : [ 0.255 0.525 0.955 ] 53 : [ 0.785 0.995 0.405 ] 54 : [ 0.305 0.985 0.725 ] 55 : [ 0.695 0.275 0.225 ] 56 : [ 0.745 0.545 0.355 ] 57 : [ 0.155 0.875 0.205 ] 58 : [ 0.635 0.805 0.055 ] 59 : [ 0.275 0.535 0.775 ] 60 : [ 0.985 0.455 0.465 ] 61 : [ 0.105 0.325 0.915 ] 62 : [ 0.435 0.815 0.245 ] 63 : [ 0.885 0.185 0.315 ] 64 : [ 0.505 0.095 0.445 ] 65 : [ 0.225 0.615 0.825 ] 66 : [ 0.125 0.015 0.155 ] 67 : [ 0.415 0.285 0.325 ] 68 : [ 0.395 0.715 0.065 ] 69 : [ 0.725 0.135 0.805 ] 70 : [ 0.245 0.755 0.265 ] 71 : [ 0.585 0.215 0.755 ] 72 : [ 0.045 0.065 0.635 ] 73 : [ 0.845 0.955 0.175 ] 74 : [ 0.145 0.695 0.455 ] 75 : [ 0.895 0.625 0.185 ] 76 : [ 0.825 0.055 0.015 ] 77 : [ 0.875 0.835 0.565 ] 78 : [ 0.385 0.665 0.605 ] 79 : [ 0.715 0.895 0.025 ] 80 : [ 0.815 0.265 0.485 ] 81 : [ 0.195 0.375 0.345 ] 82 : [ 0.795 0.565 0.275 ] 83 : [ 0.175 0.085 0.885 ] 84 : [ 0.525 0.965 0.335 ] 85 : [ 0.595 0.595 0.855 ] 86 : [ 0.065 0.295 0.735 ] 87 : [ 0.925 0.075 0.765 ] 88 : [ 0.775 0.305 0.545 ] 89 : [ 0.455 0.575 0.685 ] 90 : [ 0.165 0.605 0.035 ] 91 : [ 0.665 0.675 0.655 ] 92 : [ 0.135 0.385 0.905 ] 93 : [ 0.465 0.795 0.935 ] 94 : [ 0.705 0.655 0.495 ] 95 : [ 0.235 0.145 0.555 ] 96 : [ 0.425 0.205 0.595 ] 97 : [ 0.835 0.685 0.865 ] 98 : [ 0.735 0.355 0.715 ] 99 : [ 0.405 0.975 0.845 ] History criterion= [ C2 criterion ] 0 : [ 0.0258551 ] 1 : [ 0.0254722 ] 2 : [ 0.0256286 ] ... 1997 : [ 0.0137005 ] 1998 : [ 0.0137005 ] 1999 : [ 0.0137005 ] History temperature= [ Probability ] 0 : [ 0.999994 ] 1 : [ 1 ] 2 : [ 0.999983 ] ... 1997 : [ 0 ] 1998 : [ 0 ] 1999 : [ 0 ] History probability= [ Temperature ] 0 : [ 10 ] 1 : [ 9.5 ] 2 : [ 9.025 ] ... 1997 : [ 3.26618e-44 ] 1998 : [ 3.10287e-44 ] 1999 : [ 2.94773e-44 ] Final criteria: C2=0.013700, PhiP=14.744212 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.95 iMax=2000 Generating design using SimulatedAnnealing geometric temperature & C2 criterion= [ X0 X1 X2 ] 0 : [ 0.955 0.595 0.645 ] 1 : [ 0.175 0.695 0.175 ] 2 : [ 0.055 0.805 0.225 ] 3 : [ 0.885 0.915 0.975 ] 4 : [ 0.155 0.295 0.745 ] 5 : [ 0.145 0.565 0.605 ] 6 : [ 0.295 0.095 0.455 ] 7 : [ 0.805 0.505 0.275 ] 8 : [ 0.865 0.345 0.635 ] 9 : [ 0.775 0.745 0.045 ] 10 : [ 0.195 0.395 0.535 ] 11 : [ 0.265 0.235 0.615 ] 12 : [ 0.765 0.055 0.405 ] 13 : [ 0.665 0.315 0.315 ] 14 : [ 0.395 0.575 0.495 ] 15 : [ 0.785 0.175 0.815 ] 16 : [ 0.685 0.895 0.655 ] 17 : [ 0.845 0.545 0.055 ] 18 : [ 0.075 0.485 0.805 ] 19 : [ 0.575 0.435 0.735 ] 20 : [ 0.525 0.875 0.505 ] 21 : [ 0.615 0.655 0.015 ] 22 : [ 0.105 0.535 0.985 ] 23 : [ 0.245 0.335 0.965 ] 24 : [ 0.535 0.815 0.255 ] 25 : [ 0.915 0.135 0.335 ] 26 : [ 0.505 0.885 0.765 ] 27 : [ 0.715 0.425 0.855 ] 28 : [ 0.565 0.645 0.695 ] 29 : [ 0.325 0.305 0.135 ] 30 : [ 0.985 0.165 0.725 ] 31 : [ 0.405 0.735 0.625 ] 32 : [ 0.735 0.065 0.585 ] 33 : [ 0.645 0.615 0.885 ] 34 : [ 0.965 0.285 0.525 ] 35 : [ 0.205 0.105 0.895 ] 36 : [ 0.015 0.465 0.155 ] 37 : [ 0.005 0.275 0.445 ] 38 : [ 0.755 0.925 0.825 ] 39 : [ 0.555 0.005 0.195 ] 40 : [ 0.255 0.635 0.375 ] 41 : [ 0.235 0.495 0.285 ] 42 : [ 0.895 0.785 0.755 ] 43 : [ 0.375 0.205 0.905 ] 44 : [ 0.605 0.255 0.875 ] 45 : [ 0.835 0.265 0.245 ] 46 : [ 0.335 0.015 0.035 ] 47 : [ 0.495 0.085 0.435 ] 48 : [ 0.095 0.715 0.425 ] 49 : [ 0.825 0.555 0.775 ] 50 : [ 0.705 0.725 0.595 ] 51 : [ 0.745 0.755 0.995 ] 52 : [ 0.215 0.475 0.105 ] 53 : [ 0.485 0.245 0.085 ] 54 : [ 0.035 0.185 0.235 ] 55 : [ 0.465 0.375 0.565 ] 56 : [ 0.285 0.855 0.475 ] 57 : [ 0.855 0.865 0.145 ] 58 : [ 0.655 0.365 0.575 ] 59 : [ 0.585 0.975 0.915 ] 60 : [ 0.385 0.155 0.295 ] 61 : [ 0.315 0.845 0.785 ] 62 : [ 0.025 0.045 0.515 ] 63 : [ 0.355 0.025 0.715 ] 64 : [ 0.675 0.945 0.345 ] 65 : [ 0.275 0.965 0.935 ] 66 : [ 0.515 0.585 0.325 ] 67 : [ 0.725 0.325 0.095 ] 68 : [ 0.115 0.835 0.835 ] 69 : [ 0.795 0.125 0.075 ] 70 : [ 0.125 0.195 0.545 ] 71 : [ 0.875 0.625 0.465 ] 72 : [ 0.365 0.525 0.705 ] 73 : [ 0.595 0.825 0.025 ] 74 : [ 0.345 0.675 0.005 ] 75 : [ 0.435 0.415 0.265 ] 76 : [ 0.545 0.075 0.845 ] 77 : [ 0.135 0.035 0.125 ] 78 : [ 0.635 0.115 0.305 ] 79 : [ 0.085 0.935 0.685 ] 80 : [ 0.185 0.995 0.385 ] 81 : [ 0.415 0.405 0.865 ] 82 : [ 0.065 0.215 0.945 ] 83 : [ 0.225 0.705 0.555 ] 84 : [ 0.695 0.605 0.355 ] 85 : [ 0.045 0.445 0.365 ] 86 : [ 0.455 0.225 0.675 ] 87 : [ 0.945 0.985 0.665 ] 88 : [ 0.925 0.385 0.795 ] 89 : [ 0.815 0.355 0.415 ] 90 : [ 0.905 0.515 0.955 ] 91 : [ 0.995 0.455 0.485 ] 92 : [ 0.935 0.665 0.215 ] 93 : [ 0.625 0.765 0.395 ] 94 : [ 0.305 0.795 0.205 ] 95 : [ 0.445 0.775 0.925 ] 96 : [ 0.975 0.145 0.065 ] 97 : [ 0.165 0.955 0.165 ] 98 : [ 0.425 0.905 0.115 ] 99 : [ 0.475 0.685 0.185 ] History criterion= [ PhiP criterion ] 0 : [ 21.3291 ] 1 : [ 21.3226 ] 2 : [ 21.3226 ] ... 1997 : [ 6.40106 ] 1998 : [ 6.40106 ] 1999 : [ 6.40106 ] History temperature= [ Probability ] 0 : [ 1 ] 1 : [ 1 ] 2 : [ 1 ] ... 1997 : [ 0 ] 1998 : [ 0 ] 1999 : [ 0 ] History probability= [ Temperature ] 0 : [ 10 ] 1 : [ 9.5 ] 2 : [ 9.025 ] ... 1997 : [ 3.26618e-44 ] 1998 : [ 3.10287e-44 ] 1999 : [ 2.94773e-44 ] Final criteria: C2=0.019991, PhiP=6.401057 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true profile=class=TemperatureProfile implementation=class=LinearProfile name=Unnamed T0=10 iMax=2000 Generating design using linear temperature SimulatedAnnealing & C2 criterion = [ X0 X1 X2 ] 0 : [ 0.735 0.565 0.625 ] 1 : [ 0.905 0.865 0.785 ] 2 : [ 0.185 0.345 0.195 ] 3 : [ 0.245 0.905 0.275 ] 4 : [ 0.405 0.715 0.945 ] 5 : [ 0.155 0.245 0.335 ] 6 : [ 0.925 0.415 0.035 ] 7 : [ 0.375 0.385 0.225 ] 8 : [ 0.395 0.435 0.175 ] 9 : [ 0.165 0.935 0.295 ] 10 : [ 0.085 0.295 0.655 ] 11 : [ 0.045 0.335 0.165 ] 12 : [ 0.805 0.795 0.915 ] 13 : [ 0.315 0.005 0.155 ] 14 : [ 0.255 0.465 0.545 ] 15 : [ 0.145 0.125 0.685 ] 16 : [ 0.355 0.325 0.575 ] 17 : [ 0.835 0.965 0.125 ] 18 : [ 0.345 0.705 0.355 ] 19 : [ 0.815 0.945 0.525 ] 20 : [ 0.755 0.045 0.965 ] 21 : [ 0.995 0.105 0.845 ] 22 : [ 0.415 0.805 0.805 ] 23 : [ 0.035 0.225 0.215 ] 24 : [ 0.935 0.765 0.285 ] 25 : [ 0.215 0.545 0.565 ] 26 : [ 0.605 0.665 0.375 ] 27 : [ 0.325 0.625 0.455 ] 28 : [ 0.135 0.065 0.715 ] 29 : [ 0.695 0.695 0.775 ] 30 : [ 0.555 0.265 0.985 ] 31 : [ 0.535 0.155 0.885 ] 32 : [ 0.275 0.555 0.815 ] 33 : [ 0.865 0.595 0.855 ] 34 : [ 0.795 0.895 0.725 ] 35 : [ 0.985 0.085 0.765 ] 36 : [ 0.235 0.825 0.365 ] 37 : [ 0.305 0.685 0.645 ] 38 : [ 0.945 0.655 0.235 ] 39 : [ 0.075 0.215 0.205 ] 40 : [ 0.965 0.835 0.085 ] 41 : [ 0.495 0.845 0.865 ] 42 : [ 0.955 0.635 0.705 ] 43 : [ 0.435 0.425 0.305 ] 44 : [ 0.625 0.485 0.145 ] 45 : [ 0.615 0.855 0.555 ] 46 : [ 0.635 0.305 0.675 ] 47 : [ 0.895 0.475 0.615 ] 48 : [ 0.685 0.025 0.485 ] 49 : [ 0.475 0.315 0.445 ] 50 : [ 0.875 0.235 0.835 ] 51 : [ 0.065 0.095 0.025 ] 52 : [ 0.855 0.535 0.095 ] 53 : [ 0.125 0.185 0.345 ] 54 : [ 0.585 0.275 0.325 ] 55 : [ 0.655 0.145 0.395 ] 56 : [ 0.645 0.955 0.105 ] 57 : [ 0.055 0.525 0.465 ] 58 : [ 0.515 0.175 0.955 ] 59 : [ 0.105 0.875 0.045 ] 60 : [ 0.505 0.775 0.745 ] 61 : [ 0.825 0.815 0.385 ] 62 : [ 0.765 0.365 0.535 ] 63 : [ 0.015 0.205 0.075 ] 64 : [ 0.465 0.505 0.795 ] 65 : [ 0.885 0.755 0.435 ] 66 : [ 0.225 0.735 0.415 ] 67 : [ 0.335 0.725 0.505 ] 68 : [ 0.095 0.925 0.515 ] 69 : [ 0.745 0.405 0.135 ] 70 : [ 0.845 0.675 0.585 ] 71 : [ 0.005 0.015 0.495 ] 72 : [ 0.975 0.445 0.895 ] 73 : [ 0.785 0.995 0.425 ] 74 : [ 0.595 0.575 0.755 ] 75 : [ 0.705 0.115 0.405 ] 76 : [ 0.385 0.885 0.665 ] 77 : [ 0.195 0.375 0.185 ] 78 : [ 0.725 0.455 0.635 ] 79 : [ 0.265 0.075 0.255 ] 80 : [ 0.285 0.585 0.265 ] 81 : [ 0.455 0.195 0.905 ] 82 : [ 0.675 0.055 0.825 ] 83 : [ 0.115 0.975 0.695 ] 84 : [ 0.525 0.035 0.015 ] 85 : [ 0.425 0.515 0.115 ] 86 : [ 0.715 0.785 0.005 ] 87 : [ 0.915 0.615 0.735 ] 88 : [ 0.665 0.165 0.925 ] 89 : [ 0.485 0.985 0.875 ] 90 : [ 0.295 0.355 0.315 ] 91 : [ 0.445 0.135 0.935 ] 92 : [ 0.575 0.255 0.995 ] 93 : [ 0.025 0.495 0.475 ] 94 : [ 0.565 0.395 0.055 ] 95 : [ 0.365 0.605 0.595 ] 96 : [ 0.205 0.645 0.605 ] 97 : [ 0.545 0.285 0.245 ] 98 : [ 0.775 0.915 0.975 ] 99 : [ 0.175 0.745 0.065 ] History criterion= [ C2 criterion ] 0 : [ 0.02892 ] 1 : [ 0.0293007 ] 2 : [ 0.0286445 ] ... 1997 : [ 0.0377695 ] 1998 : [ 0.0382449 ] 1999 : [ 0.0413446 ] History temperature= [ Probability ] 0 : [ 1 ] 1 : [ 0.999962 ] 2 : [ 1 ] ... 1997 : [ 1 ] 1998 : [ 0.953569 ] 1999 : [ 0.537983 ] History probability= [ Temperature ] 0 : [ 10 ] 1 : [ 9.995 ] 2 : [ 9.99 ] ... 1997 : [ 0.015 ] 1998 : [ 0.01 ] 1999 : [ 0.005 ] Final criteria: C2=0.041345, PhiP=40.824829 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 profile=class=TemperatureProfile implementation=class=LinearProfile name=Unnamed T0=10 iMax=2000 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.695 0.165 0.915 ] 1 : [ 0.875 0.375 0.855 ] 2 : [ 0.345 0.265 0.895 ] 3 : [ 0.745 0.435 0.455 ] 4 : [ 0.085 0.305 0.495 ] 5 : [ 0.865 0.895 0.345 ] 6 : [ 0.815 0.945 0.685 ] 7 : [ 0.175 0.055 0.445 ] 8 : [ 0.025 0.315 0.435 ] 9 : [ 0.685 0.935 0.235 ] 10 : [ 0.495 0.505 0.875 ] 11 : [ 0.215 0.335 0.155 ] 12 : [ 0.435 0.475 0.755 ] 13 : [ 0.905 0.955 0.225 ] 14 : [ 0.415 0.095 0.615 ] 15 : [ 0.995 0.255 0.105 ] 16 : [ 0.515 0.075 0.325 ] 17 : [ 0.265 0.605 0.145 ] 18 : [ 0.965 0.735 0.475 ] 19 : [ 0.365 0.995 0.585 ] 20 : [ 0.325 0.085 0.955 ] 21 : [ 0.155 0.025 0.975 ] 22 : [ 0.225 0.665 0.695 ] 23 : [ 0.795 0.205 0.545 ] 24 : [ 0.605 0.135 0.605 ] 25 : [ 0.895 0.145 0.425 ] 26 : [ 0.635 0.655 0.505 ] 27 : [ 0.705 0.515 0.555 ] 28 : [ 0.065 0.385 0.215 ] 29 : [ 0.755 0.645 0.025 ] 30 : [ 0.615 0.195 0.735 ] 31 : [ 0.725 0.835 0.065 ] 32 : [ 0.825 0.725 0.485 ] 33 : [ 0.485 0.965 0.385 ] 34 : [ 0.255 0.755 0.255 ] 35 : [ 0.035 0.915 0.395 ] 36 : [ 0.465 0.225 0.705 ] 37 : [ 0.335 0.865 0.355 ] 38 : [ 0.565 0.045 0.515 ] 39 : [ 0.535 0.775 0.645 ] 40 : [ 0.445 0.125 0.775 ] 41 : [ 0.935 0.415 0.085 ] 42 : [ 0.135 0.805 0.995 ] 43 : [ 0.805 0.215 0.285 ] 44 : [ 0.595 0.615 0.655 ] 45 : [ 0.185 0.485 0.095 ] 46 : [ 0.785 0.625 0.415 ] 47 : [ 0.295 0.585 0.885 ] 48 : [ 0.205 0.815 0.045 ] 49 : [ 0.115 0.185 0.715 ] 50 : [ 0.015 0.575 0.675 ] 51 : [ 0.585 0.235 0.055 ] 52 : [ 0.075 0.705 0.185 ] 53 : [ 0.645 0.495 0.635 ] 54 : [ 0.235 0.455 0.865 ] 55 : [ 0.715 0.875 0.845 ] 56 : [ 0.505 0.425 0.575 ] 57 : [ 0.925 0.555 0.815 ] 58 : [ 0.475 0.975 0.135 ] 59 : [ 0.245 0.595 0.305 ] 60 : [ 0.945 0.545 0.035 ] 61 : [ 0.195 0.535 0.595 ] 62 : [ 0.845 0.825 0.925 ] 63 : [ 0.095 0.845 0.115 ] 64 : [ 0.165 0.345 0.785 ] 65 : [ 0.955 0.765 0.005 ] 66 : [ 0.735 0.155 0.375 ] 67 : [ 0.985 0.905 0.835 ] 68 : [ 0.145 0.445 0.175 ] 69 : [ 0.545 0.885 0.405 ] 70 : [ 0.455 0.785 0.965 ] 71 : [ 0.855 0.795 0.725 ] 72 : [ 0.425 0.355 0.945 ] 73 : [ 0.625 0.855 0.335 ] 74 : [ 0.915 0.015 0.465 ] 75 : [ 0.835 0.925 0.165 ] 76 : [ 0.055 0.105 0.625 ] 77 : [ 0.525 0.275 0.295 ] 78 : [ 0.105 0.525 0.015 ] 79 : [ 0.575 0.635 0.825 ] 80 : [ 0.375 0.295 0.745 ] 81 : [ 0.385 0.565 0.985 ] 82 : [ 0.005 0.365 0.125 ] 83 : [ 0.405 0.465 0.245 ] 84 : [ 0.305 0.175 0.275 ] 85 : [ 0.665 0.745 0.535 ] 86 : [ 0.315 0.065 0.565 ] 87 : [ 0.355 0.115 0.315 ] 88 : [ 0.775 0.675 0.205 ] 89 : [ 0.555 0.035 0.935 ] 90 : [ 0.975 0.395 0.365 ] 91 : [ 0.655 0.325 0.665 ] 92 : [ 0.125 0.285 0.195 ] 93 : [ 0.885 0.405 0.265 ] 94 : [ 0.045 0.005 0.075 ] 95 : [ 0.765 0.985 0.905 ] 96 : [ 0.275 0.695 0.765 ] 97 : [ 0.675 0.685 0.805 ] 98 : [ 0.395 0.715 0.525 ] 99 : [ 0.285 0.245 0.795 ] History criterion= [ PhiP criterion ] 0 : [ 57.735 ] 1 : [ 57.735 ] 2 : [ 57.735 ] ... 1997 : [ 11.7671 ] 1998 : [ 11.7671 ] 1999 : [ 11.7671 ] History temperature= [ Probability ] 0 : [ 1 ] 1 : [ 1 ] 2 : [ 1 ] ... 1997 : [ 1 ] 1998 : [ 8.8464e-22 ] 1999 : [ 1 ] History probability= [ Temperature ] 0 : [ 10 ] 1 : [ 9.995 ] 2 : [ 9.99 ] ... 1997 : [ 0.015 ] 1998 : [ 0.01 ] 1999 : [ 0.005 ] Final criteria: C2=0.034236, PhiP=11.767054 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.635 0.645 0.665 ] 1 : [ 0.235 0.055 0.965 ] 2 : [ 0.895 0.625 0.925 ] 3 : [ 0.365 0.395 0.465 ] 4 : [ 0.225 0.485 0.985 ] 5 : [ 0.285 0.945 0.055 ] 6 : [ 0.975 0.615 0.645 ] 7 : [ 0.605 0.525 0.915 ] 8 : [ 0.535 0.125 0.265 ] 9 : [ 0.995 0.535 0.215 ] 10 : [ 0.735 0.765 0.795 ] 11 : [ 0.325 0.685 0.865 ] 12 : [ 0.935 0.315 0.125 ] 13 : [ 0.265 0.695 0.725 ] 14 : [ 0.165 0.465 0.805 ] 15 : [ 0.405 0.415 0.275 ] 16 : [ 0.455 0.815 0.245 ] 17 : [ 0.775 0.735 0.435 ] 18 : [ 0.195 0.075 0.065 ] 19 : [ 0.585 0.565 0.525 ] 20 : [ 0.815 0.925 0.255 ] 21 : [ 0.185 0.805 0.515 ] 22 : [ 0.525 0.375 0.445 ] 23 : [ 0.595 0.995 0.285 ] 24 : [ 0.905 0.435 0.115 ] 25 : [ 0.395 0.515 0.735 ] 26 : [ 0.025 0.595 0.565 ] 27 : [ 0.475 0.205 0.685 ] 28 : [ 0.825 0.725 0.315 ] 29 : [ 0.515 0.085 0.655 ] 30 : [ 0.385 0.265 0.855 ] 31 : [ 0.125 0.405 0.765 ] 32 : [ 0.295 0.885 0.935 ] 33 : [ 0.135 0.355 0.905 ] 34 : [ 0.245 0.235 0.675 ] 35 : [ 0.175 0.675 0.325 ] 36 : [ 0.445 0.845 0.585 ] 37 : [ 0.745 0.715 0.045 ] 38 : [ 0.425 0.025 0.405 ] 39 : [ 0.945 0.575 0.395 ] 40 : [ 0.565 0.775 0.535 ] 41 : [ 0.335 0.065 0.335 ] 42 : [ 0.145 0.015 0.775 ] 43 : [ 0.015 0.825 0.815 ] 44 : [ 0.305 0.605 0.355 ] 45 : [ 0.035 0.325 0.825 ] 46 : [ 0.765 0.255 0.575 ] 47 : [ 0.155 0.275 0.695 ] 48 : [ 0.115 0.245 0.155 ] 49 : [ 0.715 0.225 0.295 ] 50 : [ 0.965 0.215 0.745 ] 51 : [ 0.205 0.095 0.205 ] 52 : [ 0.575 0.105 0.555 ] 53 : [ 0.045 0.455 0.075 ] 54 : [ 0.345 0.425 0.885 ] 55 : [ 0.875 0.785 0.415 ] 56 : [ 0.865 0.915 0.195 ] 57 : [ 0.665 0.705 0.955 ] 58 : [ 0.505 0.005 0.135 ] 59 : [ 0.105 0.135 0.015 ] 60 : [ 0.985 0.175 0.185 ] 61 : [ 0.095 0.585 0.095 ] 62 : [ 0.655 0.295 0.485 ] 63 : [ 0.685 0.045 0.455 ] 64 : [ 0.705 0.365 0.175 ] 65 : [ 0.785 0.635 0.605 ] 66 : [ 0.465 0.895 0.755 ] 67 : [ 0.555 0.195 0.595 ] 68 : [ 0.005 0.655 0.945 ] 69 : [ 0.315 0.155 0.005 ] 70 : [ 0.885 0.185 0.785 ] 71 : [ 0.915 0.165 0.615 ] 72 : [ 0.545 0.985 0.835 ] 73 : [ 0.625 0.345 0.345 ] 74 : [ 0.435 0.475 0.165 ] 75 : [ 0.615 0.545 0.375 ] 76 : [ 0.755 0.905 0.505 ] 77 : [ 0.855 0.335 0.845 ] 78 : [ 0.415 0.855 0.475 ] 79 : [ 0.835 0.035 0.635 ] 80 : [ 0.485 0.445 0.715 ] 81 : [ 0.925 0.145 0.035 ] 82 : [ 0.065 0.875 0.425 ] 83 : [ 0.055 0.965 0.995 ] 84 : [ 0.675 0.975 0.705 ] 85 : [ 0.085 0.115 0.975 ] 86 : [ 0.955 0.555 0.895 ] 87 : [ 0.215 0.935 0.105 ] 88 : [ 0.495 0.495 0.495 ] 89 : [ 0.805 0.505 0.085 ] 90 : [ 0.695 0.745 0.145 ] 91 : [ 0.255 0.665 0.225 ] 92 : [ 0.725 0.385 0.365 ] 93 : [ 0.845 0.955 0.875 ] 94 : [ 0.075 0.285 0.235 ] 95 : [ 0.645 0.835 0.305 ] 96 : [ 0.795 0.865 0.625 ] 97 : [ 0.375 0.755 0.385 ] 98 : [ 0.275 0.305 0.025 ] 99 : [ 0.355 0.795 0.545 ] History criterion= [ PhiP criterion ] 0 : [ 28.8675 ] 1 : [ 28.8675 ] 2 : [ 28.8675 ] ... 1997 : [ 12.7261 ] 1998 : [ 12.7261 ] 1999 : [ 12.7261 ] Final criteria: C2=0.027655, PhiP=12.726107 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.625 0.785 0.355 ] 1 : [ 0.385 0.275 0.905 ] 2 : [ 0.915 0.075 0.635 ] 3 : [ 0.905 0.665 0.015 ] 4 : [ 0.365 0.135 0.345 ] 5 : [ 0.045 0.185 0.075 ] 6 : [ 0.495 0.635 0.025 ] 7 : [ 0.245 0.315 0.315 ] 8 : [ 0.545 0.055 0.715 ] 9 : [ 0.965 0.175 0.565 ] 10 : [ 0.945 0.425 0.405 ] 11 : [ 0.855 0.685 0.845 ] 12 : [ 0.585 0.585 0.965 ] 13 : [ 0.085 0.655 0.595 ] 14 : [ 0.535 0.415 0.655 ] 15 : [ 0.415 0.995 0.175 ] 16 : [ 0.075 0.915 0.155 ] 17 : [ 0.215 0.625 0.725 ] 18 : [ 0.135 0.715 0.835 ] 19 : [ 0.155 0.765 0.195 ] 20 : [ 0.165 0.545 0.555 ] 21 : [ 0.445 0.745 0.935 ] 22 : [ 0.645 0.875 0.055 ] 23 : [ 0.235 0.645 0.265 ] 24 : [ 0.865 0.015 0.005 ] 25 : [ 0.845 0.705 0.915 ] 26 : [ 0.565 0.525 0.285 ] 27 : [ 0.095 0.355 0.985 ] 28 : [ 0.935 0.985 0.875 ] 29 : [ 0.065 0.845 0.065 ] 30 : [ 0.185 0.735 0.545 ] 31 : [ 0.355 0.485 0.465 ] 32 : [ 0.035 0.675 0.685 ] 33 : [ 0.175 0.395 0.215 ] 34 : [ 0.225 0.255 0.485 ] 35 : [ 0.425 0.365 0.365 ] 36 : [ 0.465 0.775 0.085 ] 37 : [ 0.815 0.955 0.445 ] 38 : [ 0.555 0.105 0.245 ] 39 : [ 0.265 0.725 0.525 ] 40 : [ 0.255 0.465 0.575 ] 41 : [ 0.435 0.165 0.295 ] 42 : [ 0.205 0.865 0.745 ] 43 : [ 0.105 0.555 0.145 ] 44 : [ 0.665 0.385 0.535 ] 45 : [ 0.595 0.265 0.105 ] 46 : [ 0.825 0.975 0.165 ] 47 : [ 0.785 0.835 0.885 ] 48 : [ 0.925 0.755 0.505 ] 49 : [ 0.285 0.965 0.185 ] 50 : [ 0.125 0.335 0.705 ] 51 : [ 0.695 0.195 0.765 ] 52 : [ 0.405 0.035 0.375 ] 53 : [ 0.145 0.535 0.305 ] 54 : [ 0.875 0.085 0.515 ] 55 : [ 0.055 0.795 0.205 ] 56 : [ 0.335 0.895 0.925 ] 57 : [ 0.345 0.885 0.735 ] 58 : [ 0.735 0.005 0.815 ] 59 : [ 0.715 0.805 0.695 ] 60 : [ 0.515 0.155 0.855 ] 61 : [ 0.455 0.945 0.035 ] 62 : [ 0.655 0.115 0.425 ] 63 : [ 0.955 0.605 0.385 ] 64 : [ 0.525 0.435 0.335 ] 65 : [ 0.505 0.575 0.865 ] 66 : [ 0.275 0.565 0.125 ] 67 : [ 0.025 0.405 0.455 ] 68 : [ 0.755 0.925 0.795 ] 69 : [ 0.805 0.375 0.395 ] 70 : [ 0.295 0.095 0.605 ] 71 : [ 0.485 0.515 0.785 ] 72 : [ 0.605 0.455 0.235 ] 73 : [ 0.005 0.025 0.805 ] 74 : [ 0.615 0.125 0.045 ] 75 : [ 0.795 0.225 0.435 ] 76 : [ 0.895 0.815 0.275 ] 77 : [ 0.325 0.935 0.645 ] 78 : [ 0.885 0.295 0.895 ] 79 : [ 0.395 0.905 0.675 ] 80 : [ 0.575 0.305 0.585 ] 81 : [ 0.775 0.695 0.945 ] 82 : [ 0.985 0.065 0.955 ] 83 : [ 0.375 0.475 0.755 ] 84 : [ 0.835 0.345 0.255 ] 85 : [ 0.305 0.205 0.415 ] 86 : [ 0.765 0.505 0.135 ] 87 : [ 0.115 0.145 0.775 ] 88 : [ 0.675 0.595 0.475 ] 89 : [ 0.635 0.245 0.995 ] 90 : [ 0.315 0.495 0.225 ] 91 : [ 0.745 0.825 0.495 ] 92 : [ 0.685 0.325 0.615 ] 93 : [ 0.975 0.855 0.625 ] 94 : [ 0.015 0.235 0.975 ] 95 : [ 0.725 0.215 0.825 ] 96 : [ 0.705 0.445 0.325 ] 97 : [ 0.195 0.285 0.095 ] 98 : [ 0.475 0.615 0.115 ] 99 : [ 0.995 0.045 0.665 ] History criterion= [ PhiP criterion ] 0 : [ 21.3201 ] 1 : [ 21.3226 ] 2 : [ 21.3226 ] ... 1997 : [ 14.3128 ] 1998 : [ 14.3128 ] 1999 : [ 14.3128 ] Final criteria: C2=0.028214, PhiP=14.312763 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.475 0.055 0.935 ] 1 : [ 0.615 0.955 0.755 ] 2 : [ 0.875 0.895 0.515 ] 3 : [ 0.785 0.575 0.205 ] 4 : [ 0.665 0.695 0.495 ] 5 : [ 0.675 0.185 0.225 ] 6 : [ 0.985 0.765 0.445 ] 7 : [ 0.235 0.395 0.505 ] 8 : [ 0.195 0.535 0.925 ] 9 : [ 0.545 0.965 0.995 ] 10 : [ 0.995 0.205 0.165 ] 11 : [ 0.645 0.795 0.805 ] 12 : [ 0.305 0.925 0.315 ] 13 : [ 0.205 0.675 0.285 ] 14 : [ 0.555 0.585 0.895 ] 15 : [ 0.735 0.855 0.415 ] 16 : [ 0.705 0.885 0.025 ] 17 : [ 0.595 0.255 0.235 ] 18 : [ 0.945 0.905 0.145 ] 19 : [ 0.755 0.555 0.795 ] 20 : [ 0.135 0.465 0.215 ] 21 : [ 0.455 0.025 0.645 ] 22 : [ 0.175 0.275 0.475 ] 23 : [ 0.525 0.775 0.365 ] 24 : [ 0.265 0.125 0.865 ] 25 : [ 0.225 0.495 0.085 ] 26 : [ 0.925 0.265 0.325 ] 27 : [ 0.915 0.785 0.655 ] 28 : [ 0.575 0.805 0.675 ] 29 : [ 0.065 0.335 0.435 ] 30 : [ 0.965 0.305 0.575 ] 31 : [ 0.905 0.715 0.375 ] 32 : [ 0.355 0.755 0.105 ] 33 : [ 0.055 0.035 0.585 ] 34 : [ 0.955 0.915 0.275 ] 35 : [ 0.845 0.975 0.695 ] 36 : [ 0.685 0.375 0.125 ] 37 : [ 0.025 0.355 0.115 ] 38 : [ 0.375 0.085 0.595 ] 39 : [ 0.585 0.095 0.765 ] 40 : [ 0.415 0.075 0.005 ] 41 : [ 0.855 0.655 0.425 ] 42 : [ 0.405 0.605 0.735 ] 43 : [ 0.085 0.195 0.605 ] 44 : [ 0.115 0.115 0.705 ] 45 : [ 0.635 0.285 0.715 ] 46 : [ 0.165 0.045 0.305 ] 47 : [ 0.005 0.515 0.355 ] 48 : [ 0.185 0.155 0.835 ] 49 : [ 0.505 0.725 0.785 ] 50 : [ 0.715 0.005 0.555 ] 51 : [ 0.215 0.165 0.385 ] 52 : [ 0.285 0.325 0.985 ] 53 : [ 0.655 0.435 0.885 ] 54 : [ 0.015 0.825 0.335 ] 55 : [ 0.725 0.135 0.725 ] 56 : [ 0.775 0.475 0.155 ] 57 : [ 0.145 0.875 0.135 ] 58 : [ 0.295 0.065 0.625 ] 59 : [ 0.155 0.015 0.855 ] 60 : [ 0.345 0.595 0.395 ] 61 : [ 0.095 0.525 0.455 ] 62 : [ 0.045 0.245 0.875 ] 63 : [ 0.535 0.635 0.255 ] 64 : [ 0.315 0.505 0.775 ] 65 : [ 0.435 0.345 0.615 ] 66 : [ 0.395 0.365 0.095 ] 67 : [ 0.975 0.565 0.745 ] 68 : [ 0.825 0.445 0.945 ] 69 : [ 0.765 0.665 0.815 ] 70 : [ 0.805 0.385 0.685 ] 71 : [ 0.465 0.735 0.075 ] 72 : [ 0.865 0.105 0.035 ] 73 : [ 0.255 0.685 0.845 ] 74 : [ 0.125 0.845 0.245 ] 75 : [ 0.695 0.705 0.405 ] 76 : [ 0.565 0.295 0.015 ] 77 : [ 0.835 0.545 0.965 ] 78 : [ 0.895 0.455 0.175 ] 79 : [ 0.445 0.815 0.905 ] 80 : [ 0.815 0.995 0.295 ] 81 : [ 0.325 0.835 0.825 ] 82 : [ 0.495 0.225 0.345 ] 83 : [ 0.245 0.215 0.065 ] 84 : [ 0.335 0.645 0.915 ] 85 : [ 0.105 0.425 0.975 ] 86 : [ 0.385 0.745 0.635 ] 87 : [ 0.935 0.405 0.485 ] 88 : [ 0.605 0.415 0.955 ] 89 : [ 0.515 0.485 0.535 ] 90 : [ 0.075 0.625 0.265 ] 91 : [ 0.425 0.145 0.545 ] 92 : [ 0.625 0.985 0.465 ] 93 : [ 0.795 0.235 0.665 ] 94 : [ 0.275 0.865 0.565 ] 95 : [ 0.365 0.935 0.045 ] 96 : [ 0.885 0.315 0.195 ] 97 : [ 0.035 0.175 0.185 ] 98 : [ 0.745 0.615 0.525 ] 99 : [ 0.485 0.945 0.055 ] History criterion= [ PhiP criterion ] 0 : [ 57.735 ] 1 : [ 57.735 ] 2 : [ 57.735 ] ... 1997 : [ 11.5635 ] 1998 : [ 11.5635 ] 1999 : [ 11.5635 ] Final criteria: C2=0.031998, PhiP=11.563509 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.775 0.625 0.615 ] 1 : [ 0.865 0.055 0.235 ] 2 : [ 0.215 0.595 0.765 ] 3 : [ 0.895 0.205 0.125 ] 4 : [ 0.065 0.385 0.685 ] 5 : [ 0.015 0.695 0.065 ] 6 : [ 0.405 0.495 0.945 ] 7 : [ 0.245 0.315 0.455 ] 8 : [ 0.665 0.815 0.955 ] 9 : [ 0.605 0.535 0.395 ] 10 : [ 0.685 0.605 0.285 ] 11 : [ 0.755 0.565 0.165 ] 12 : [ 0.515 0.065 0.655 ] 13 : [ 0.995 0.585 0.245 ] 14 : [ 0.195 0.635 0.525 ] 15 : [ 0.765 0.545 0.875 ] 16 : [ 0.255 0.765 0.665 ] 17 : [ 0.085 0.265 0.355 ] 18 : [ 0.915 0.075 0.045 ] 19 : [ 0.525 0.505 0.855 ] 20 : [ 0.165 0.175 0.365 ] 21 : [ 0.955 0.305 0.935 ] 22 : [ 0.425 0.045 0.215 ] 23 : [ 0.075 0.245 0.825 ] 24 : [ 0.365 0.325 0.445 ] 25 : [ 0.675 0.485 0.195 ] 26 : [ 0.545 0.955 0.895 ] 27 : [ 0.055 0.135 0.775 ] 28 : [ 0.485 0.275 0.575 ] 29 : [ 0.835 0.825 0.295 ] 30 : [ 0.535 0.995 0.315 ] 31 : [ 0.145 0.735 0.925 ] 32 : [ 0.105 0.425 0.475 ] 33 : [ 0.985 0.985 0.595 ] 34 : [ 0.935 0.465 0.075 ] 35 : [ 0.335 0.295 0.725 ] 36 : [ 0.705 0.855 0.405 ] 37 : [ 0.115 0.935 0.605 ] 38 : [ 0.505 0.345 0.495 ] 39 : [ 0.005 0.085 0.225 ] 40 : [ 0.305 0.115 0.095 ] 41 : [ 0.285 0.335 0.865 ] 42 : [ 0.825 0.705 0.785 ] 43 : [ 0.095 0.715 0.645 ] 44 : [ 0.385 0.875 0.805 ] 45 : [ 0.945 0.195 0.205 ] 46 : [ 0.725 0.525 0.515 ] 47 : [ 0.325 0.515 0.815 ] 48 : [ 0.845 0.375 0.175 ] 49 : [ 0.445 0.845 0.435 ] 50 : [ 0.355 0.945 0.885 ] 51 : [ 0.595 0.775 0.085 ] 52 : [ 0.875 0.365 0.975 ] 53 : [ 0.655 0.155 0.465 ] 54 : [ 0.925 0.645 0.585 ] 55 : [ 0.495 0.405 0.415 ] 56 : [ 0.565 0.905 0.055 ] 57 : [ 0.715 0.185 0.325 ] 58 : [ 0.295 0.355 0.545 ] 59 : [ 0.275 0.095 0.425 ] 60 : [ 0.265 0.615 0.345 ] 61 : [ 0.645 0.685 0.115 ] 62 : [ 0.785 0.915 0.255 ] 63 : [ 0.745 0.165 0.025 ] 64 : [ 0.795 0.665 0.145 ] 65 : [ 0.345 0.755 0.565 ] 66 : [ 0.465 0.925 0.625 ] 67 : [ 0.965 0.745 0.485 ] 68 : [ 0.375 0.145 0.675 ] 69 : [ 0.235 0.805 0.155 ] 70 : [ 0.855 0.395 0.795 ] 71 : [ 0.695 0.035 0.745 ] 72 : [ 0.415 0.225 0.635 ] 73 : [ 0.885 0.975 0.005 ] 74 : [ 0.125 0.555 0.985 ] 75 : [ 0.185 0.675 0.835 ] 76 : [ 0.135 0.005 0.845 ] 77 : [ 0.395 0.575 0.695 ] 78 : [ 0.635 0.895 0.305 ] 79 : [ 0.585 0.235 0.715 ] 80 : [ 0.805 0.785 0.995 ] 81 : [ 0.225 0.255 0.015 ] 82 : [ 0.575 0.455 0.555 ] 83 : [ 0.435 0.835 0.035 ] 84 : [ 0.045 0.865 0.705 ] 85 : [ 0.815 0.795 0.385 ] 86 : [ 0.905 0.965 0.375 ] 87 : [ 0.615 0.125 0.105 ] 88 : [ 0.205 0.445 0.535 ] 89 : [ 0.975 0.885 0.755 ] 90 : [ 0.175 0.415 0.275 ] 91 : [ 0.555 0.285 0.135 ] 92 : [ 0.455 0.725 0.735 ] 93 : [ 0.625 0.015 0.965 ] 94 : [ 0.475 0.655 0.335 ] 95 : [ 0.735 0.025 0.905 ] 96 : [ 0.025 0.215 0.505 ] 97 : [ 0.315 0.475 0.265 ] 98 : [ 0.035 0.105 0.915 ] 99 : [ 0.155 0.435 0.185 ] History criterion= [ PhiP criterion ] 0 : [ 27.0992 ] 1 : [ 27.0992 ] 2 : [ 27.0992 ] ... 1997 : [ 10.77 ] 1998 : [ 10.77 ] 1999 : [ 10.77 ] Final criteria: C2=0.032172, PhiP=10.769969 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.805 0.685 0.135 ] 1 : [ 0.835 0.455 0.505 ] 2 : [ 0.695 0.565 0.245 ] 3 : [ 0.955 0.585 0.095 ] 4 : [ 0.535 0.945 0.595 ] 5 : [ 0.355 0.445 0.915 ] 6 : [ 0.005 0.935 0.175 ] 7 : [ 0.845 0.195 0.335 ] 8 : [ 0.755 0.675 0.685 ] 9 : [ 0.115 0.615 0.535 ] 10 : [ 0.565 0.115 0.445 ] 11 : [ 0.415 0.825 0.385 ] 12 : [ 0.335 0.795 0.425 ] 13 : [ 0.945 0.105 0.835 ] 14 : [ 0.625 0.635 0.645 ] 15 : [ 0.725 0.885 0.865 ] 16 : [ 0.235 0.975 0.525 ] 17 : [ 0.885 0.015 0.085 ] 18 : [ 0.465 0.925 0.355 ] 19 : [ 0.965 0.545 0.785 ] 20 : [ 0.365 0.145 0.375 ] 21 : [ 0.525 0.665 0.035 ] 22 : [ 0.905 0.555 0.345 ] 23 : [ 0.195 0.575 0.515 ] 24 : [ 0.515 0.745 0.975 ] 25 : [ 0.495 0.155 0.285 ] 26 : [ 0.345 0.915 0.905 ] 27 : [ 0.815 0.965 0.405 ] 28 : [ 0.065 0.535 0.575 ] 29 : [ 0.295 0.625 0.475 ] 30 : [ 0.255 0.785 0.025 ] 31 : [ 0.375 0.805 0.555 ] 32 : [ 0.775 0.645 0.005 ] 33 : [ 0.665 0.005 0.205 ] 34 : [ 0.215 0.225 0.805 ] 35 : [ 0.995 0.985 0.365 ] 36 : [ 0.205 0.475 0.815 ] 37 : [ 0.685 0.365 0.665 ] 38 : [ 0.735 0.415 0.625 ] 39 : [ 0.455 0.525 0.585 ] 40 : [ 0.545 0.905 0.795 ] 41 : [ 0.125 0.735 0.655 ] 42 : [ 0.615 0.205 0.725 ] 43 : [ 0.855 0.815 0.545 ] 44 : [ 0.155 0.865 0.995 ] 45 : [ 0.105 0.845 0.855 ] 46 : [ 0.785 0.755 0.185 ] 47 : [ 0.655 0.295 0.965 ] 48 : [ 0.405 0.715 0.165 ] 49 : [ 0.135 0.235 0.615 ] 50 : [ 0.935 0.895 0.845 ] 51 : [ 0.425 0.495 0.485 ] 52 : [ 0.305 0.305 0.055 ] 53 : [ 0.575 0.185 0.325 ] 54 : [ 0.445 0.435 0.305 ] 55 : [ 0.245 0.605 0.885 ] 56 : [ 0.085 0.955 0.415 ] 57 : [ 0.165 0.995 0.565 ] 58 : [ 0.315 0.075 0.075 ] 59 : [ 0.015 0.095 0.875 ] 60 : [ 0.875 0.285 0.925 ] 61 : [ 0.895 0.325 0.215 ] 62 : [ 0.745 0.265 0.455 ] 63 : [ 0.045 0.125 0.775 ] 64 : [ 0.385 0.405 0.155 ] 65 : [ 0.435 0.375 0.715 ] 66 : [ 0.485 0.315 0.065 ] 67 : [ 0.645 0.245 0.145 ] 68 : [ 0.925 0.355 0.395 ] 69 : [ 0.585 0.255 0.985 ] 70 : [ 0.175 0.035 0.045 ] 71 : [ 0.025 0.595 0.705 ] 72 : [ 0.795 0.165 0.275 ] 73 : [ 0.225 0.025 0.435 ] 74 : [ 0.975 0.045 0.735 ] 75 : [ 0.325 0.695 0.195 ] 76 : [ 0.095 0.055 0.895 ] 77 : [ 0.285 0.385 0.235 ] 78 : [ 0.595 0.505 0.605 ] 79 : [ 0.475 0.335 0.935 ] 80 : [ 0.915 0.275 0.105 ] 81 : [ 0.035 0.875 0.755 ] 82 : [ 0.715 0.135 0.115 ] 83 : [ 0.635 0.065 0.825 ] 84 : [ 0.275 0.855 0.745 ] 85 : [ 0.055 0.835 0.295 ] 86 : [ 0.265 0.085 0.955 ] 87 : [ 0.825 0.725 0.695 ] 88 : [ 0.075 0.425 0.125 ] 89 : [ 0.765 0.485 0.265 ] 90 : [ 0.185 0.705 0.495 ] 91 : [ 0.985 0.175 0.765 ] 92 : [ 0.395 0.215 0.635 ] 93 : [ 0.605 0.345 0.465 ] 94 : [ 0.675 0.655 0.225 ] 95 : [ 0.865 0.765 0.255 ] 96 : [ 0.505 0.515 0.015 ] 97 : [ 0.705 0.775 0.945 ] 98 : [ 0.145 0.395 0.315 ] 99 : [ 0.555 0.465 0.675 ] History criterion= [ PhiP criterion ] 0 : [ 20.4368 ] 1 : [ 20.4368 ] 2 : [ 20.4368 ] ... 1997 : [ 12.4782 ] 1998 : [ 12.4782 ] 1999 : [ 12.4782 ] Final criteria: C2=0.029349, PhiP=12.478212 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.415 0.935 0.435 ] 1 : [ 0.625 0.685 0.855 ] 2 : [ 0.585 0.415 0.005 ] 3 : [ 0.685 0.015 0.195 ] 4 : [ 0.255 0.865 0.145 ] 5 : [ 0.305 0.395 0.365 ] 6 : [ 0.805 0.355 0.595 ] 7 : [ 0.355 0.375 0.615 ] 8 : [ 0.445 0.235 0.045 ] 9 : [ 0.525 0.185 0.085 ] 10 : [ 0.205 0.085 0.015 ] 11 : [ 0.505 0.645 0.305 ] 12 : [ 0.595 0.915 0.395 ] 13 : [ 0.965 0.605 0.065 ] 14 : [ 0.535 0.585 0.175 ] 15 : [ 0.115 0.175 0.345 ] 16 : [ 0.345 0.895 0.625 ] 17 : [ 0.785 0.155 0.545 ] 18 : [ 0.225 0.775 0.635 ] 19 : [ 0.275 0.465 0.975 ] 20 : [ 0.705 0.405 0.795 ] 21 : [ 0.105 0.845 0.775 ] 22 : [ 0.765 0.735 0.315 ] 23 : [ 0.855 0.225 0.805 ] 24 : [ 0.845 0.475 0.475 ] 25 : [ 0.915 0.575 0.675 ] 26 : [ 0.955 0.255 0.445 ] 27 : [ 0.095 0.995 0.035 ] 28 : [ 0.185 0.215 0.055 ] 29 : [ 0.695 0.295 0.565 ] 30 : [ 0.775 0.855 0.555 ] 31 : [ 0.135 0.925 0.375 ] 32 : [ 0.155 0.725 0.845 ] 33 : [ 0.385 0.455 0.515 ] 34 : [ 0.735 0.545 0.165 ] 35 : [ 0.755 0.075 0.335 ] 36 : [ 0.435 0.125 0.225 ] 37 : [ 0.865 0.055 0.905 ] 38 : [ 0.925 0.445 0.325 ] 39 : [ 0.835 0.495 0.115 ] 40 : [ 0.025 0.115 0.125 ] 41 : [ 0.795 0.025 0.765 ] 42 : [ 0.425 0.305 0.155 ] 43 : [ 0.495 0.635 0.605 ] 44 : [ 0.405 0.675 0.705 ] 45 : [ 0.055 0.565 0.815 ] 46 : [ 0.455 0.515 0.205 ] 47 : [ 0.125 0.365 0.215 ] 48 : [ 0.995 0.005 0.995 ] 49 : [ 0.905 0.615 0.525 ] 50 : [ 0.175 0.325 0.655 ] 51 : [ 0.945 0.835 0.785 ] 52 : [ 0.875 0.285 0.535 ] 53 : [ 0.485 0.275 0.245 ] 54 : [ 0.235 0.045 0.485 ] 55 : [ 0.465 0.795 0.695 ] 56 : [ 0.615 0.105 0.895 ] 57 : [ 0.245 0.955 0.275 ] 58 : [ 0.335 0.505 0.875 ] 59 : [ 0.645 0.805 0.945 ] 60 : [ 0.295 0.595 0.865 ] 61 : [ 0.045 0.745 0.265 ] 62 : [ 0.725 0.265 0.825 ] 63 : [ 0.895 0.715 0.385 ] 64 : [ 0.825 0.815 0.025 ] 65 : [ 0.285 0.625 0.735 ] 66 : [ 0.365 0.335 0.725 ] 67 : [ 0.985 0.065 0.095 ] 68 : [ 0.265 0.945 0.965 ] 69 : [ 0.475 0.035 0.355 ] 70 : [ 0.315 0.555 0.455 ] 71 : [ 0.665 0.435 0.935 ] 72 : [ 0.885 0.875 0.925 ] 73 : [ 0.145 0.665 0.255 ] 74 : [ 0.635 0.765 0.285 ] 75 : [ 0.005 0.195 0.295 ] 76 : [ 0.065 0.965 0.915 ] 77 : [ 0.015 0.655 0.405 ] 78 : [ 0.745 0.385 0.885 ] 79 : [ 0.165 0.345 0.755 ] 80 : [ 0.675 0.695 0.955 ] 81 : [ 0.975 0.755 0.105 ] 82 : [ 0.195 0.245 0.415 ] 83 : [ 0.035 0.885 0.645 ] 84 : [ 0.375 0.095 0.135 ] 85 : [ 0.715 0.165 0.425 ] 86 : [ 0.395 0.785 0.505 ] 87 : [ 0.575 0.135 0.185 ] 88 : [ 0.325 0.485 0.745 ] 89 : [ 0.815 0.205 0.665 ] 90 : [ 0.935 0.975 0.465 ] 91 : [ 0.565 0.825 0.585 ] 92 : [ 0.545 0.985 0.715 ] 93 : [ 0.085 0.315 0.495 ] 94 : [ 0.605 0.525 0.835 ] 95 : [ 0.075 0.145 0.235 ] 96 : [ 0.215 0.905 0.575 ] 97 : [ 0.555 0.705 0.075 ] 98 : [ 0.515 0.535 0.985 ] 99 : [ 0.655 0.425 0.685 ] History criterion= [ PhiP criterion ] 0 : [ 23.5764 ] 1 : [ 23.5764 ] 2 : [ 23.5764 ] ... 1997 : [ 10.2338 ] 1998 : [ 10.2338 ] 1999 : [ 10.2338 ] Final criteria: C2=0.031411, PhiP=10.233832 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.445 0.845 0.145 ] 1 : [ 0.525 0.515 0.645 ] 2 : [ 0.135 0.325 0.005 ] 3 : [ 0.835 0.395 0.515 ] 4 : [ 0.175 0.995 0.435 ] 5 : [ 0.075 0.105 0.655 ] 6 : [ 0.535 0.185 0.065 ] 7 : [ 0.285 0.635 0.695 ] 8 : [ 0.045 0.315 0.445 ] 9 : [ 0.165 0.925 0.595 ] 10 : [ 0.475 0.005 0.115 ] 11 : [ 0.335 0.675 0.635 ] 12 : [ 0.465 0.525 0.975 ] 13 : [ 0.295 0.255 0.215 ] 14 : [ 0.815 0.175 0.525 ] 15 : [ 0.215 0.535 0.765 ] 16 : [ 0.205 0.305 0.175 ] 17 : [ 0.715 0.115 0.575 ] 18 : [ 0.035 0.885 0.825 ] 19 : [ 0.845 0.345 0.995 ] 20 : [ 0.225 0.595 0.295 ] 21 : [ 0.945 0.075 0.075 ] 22 : [ 0.385 0.095 0.255 ] 23 : [ 0.145 0.915 0.345 ] 24 : [ 0.685 0.765 0.805 ] 25 : [ 0.855 0.265 0.395 ] 26 : [ 0.765 0.745 0.915 ] 27 : [ 0.345 0.965 0.245 ] 28 : [ 0.575 0.775 0.045 ] 29 : [ 0.825 0.645 0.135 ] 30 : [ 0.495 0.385 0.725 ] 31 : [ 0.865 0.485 0.205 ] 32 : [ 0.555 0.375 0.495 ] 33 : [ 0.355 0.425 0.945 ] 34 : [ 0.775 0.685 0.315 ] 35 : [ 0.185 0.445 0.615 ] 36 : [ 0.805 0.825 0.875 ] 37 : [ 0.645 0.475 0.865 ] 38 : [ 0.885 0.295 0.275 ] 39 : [ 0.665 0.215 0.965 ] 40 : [ 0.105 0.865 0.185 ] 41 : [ 0.005 0.565 0.085 ] 42 : [ 0.875 0.815 0.235 ] 43 : [ 0.115 0.015 0.795 ] 44 : [ 0.935 0.085 0.415 ] 45 : [ 0.615 0.125 0.855 ] 46 : [ 0.785 0.575 0.025 ] 47 : [ 0.155 0.795 0.365 ] 48 : [ 0.095 0.785 0.735 ] 49 : [ 0.365 0.035 0.625 ] 50 : [ 0.725 0.615 0.355 ] 51 : [ 0.425 0.835 0.745 ] 52 : [ 0.755 0.735 0.715 ] 53 : [ 0.695 0.605 0.585 ] 54 : [ 0.585 0.415 0.285 ] 55 : [ 0.435 0.855 0.405 ] 56 : [ 0.915 0.545 0.775 ] 57 : [ 0.995 0.715 0.015 ] 58 : [ 0.275 0.985 0.335 ] 59 : [ 0.505 0.935 0.845 ] 60 : [ 0.065 0.705 0.675 ] 61 : [ 0.605 0.355 0.755 ] 62 : [ 0.315 0.025 0.325 ] 63 : [ 0.375 0.655 0.465 ] 64 : [ 0.395 0.365 0.535 ] 65 : [ 0.305 0.875 0.305 ] 66 : [ 0.905 0.205 0.505 ] 67 : [ 0.245 0.285 0.605 ] 68 : [ 0.485 0.065 0.955 ] 69 : [ 0.625 0.975 0.265 ] 70 : [ 0.595 0.805 0.545 ] 71 : [ 0.015 0.695 0.565 ] 72 : [ 0.965 0.045 0.785 ] 73 : [ 0.455 0.505 0.385 ] 74 : [ 0.515 0.225 0.665 ] 75 : [ 0.635 0.245 0.375 ] 76 : [ 0.975 0.555 0.165 ] 77 : [ 0.325 0.895 0.155 ] 78 : [ 0.925 0.455 0.705 ] 79 : [ 0.895 0.165 0.935 ] 80 : [ 0.565 0.755 0.895 ] 81 : [ 0.125 0.155 0.425 ] 82 : [ 0.735 0.055 0.125 ] 83 : [ 0.545 0.465 0.055 ] 84 : [ 0.955 0.195 0.105 ] 85 : [ 0.745 0.665 0.985 ] 86 : [ 0.655 0.625 0.925 ] 87 : [ 0.055 0.405 0.685 ] 88 : [ 0.195 0.145 0.195 ] 89 : [ 0.985 0.955 0.835 ] 90 : [ 0.265 0.585 0.475 ] 91 : [ 0.405 0.335 0.225 ] 92 : [ 0.415 0.235 0.905 ] 93 : [ 0.675 0.275 0.455 ] 94 : [ 0.795 0.495 0.885 ] 95 : [ 0.705 0.135 0.095 ] 96 : [ 0.235 0.725 0.035 ] 97 : [ 0.025 0.905 0.555 ] 98 : [ 0.085 0.435 0.815 ] 99 : [ 0.255 0.945 0.485 ] History criterion= [ PhiP criterion ] 0 : [ 30.1526 ] 1 : [ 30.1526 ] 2 : [ 30.1526 ] ... 1997 : [ 11.4999 ] 1998 : [ 11.496 ] 1999 : [ 11.4499 ] Final criteria: C2=0.031427, PhiP=11.449867 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.005 0.225 0.655 ] 1 : [ 0.685 0.255 0.355 ] 2 : [ 0.055 0.075 0.875 ] 3 : [ 0.395 0.195 0.295 ] 4 : [ 0.625 0.885 0.405 ] 5 : [ 0.275 0.125 0.605 ] 6 : [ 0.115 0.835 0.305 ] 7 : [ 0.165 0.275 0.205 ] 8 : [ 0.805 0.285 0.685 ] 9 : [ 0.145 0.065 0.365 ] 10 : [ 0.445 0.205 0.835 ] 11 : [ 0.705 0.395 0.235 ] 12 : [ 0.835 0.445 0.955 ] 13 : [ 0.965 0.695 0.395 ] 14 : [ 0.345 0.745 0.765 ] 15 : [ 0.665 0.245 0.985 ] 16 : [ 0.085 0.715 0.865 ] 17 : [ 0.725 0.155 0.335 ] 18 : [ 0.065 0.335 0.045 ] 19 : [ 0.595 0.585 0.095 ] 20 : [ 0.815 0.235 0.115 ] 21 : [ 0.525 0.875 0.785 ] 22 : [ 0.045 0.515 0.105 ] 23 : [ 0.735 0.415 0.505 ] 24 : [ 0.985 0.775 0.015 ] 25 : [ 0.205 0.465 0.445 ] 26 : [ 0.375 0.845 0.155 ] 27 : [ 0.325 0.455 0.755 ] 28 : [ 0.875 0.815 0.545 ] 29 : [ 0.465 0.955 0.135 ] 30 : [ 0.425 0.925 0.245 ] 31 : [ 0.645 0.485 0.165 ] 32 : [ 0.255 0.945 0.795 ] 33 : [ 0.235 0.095 0.745 ] 34 : [ 0.475 0.905 0.945 ] 35 : [ 0.305 0.725 0.705 ] 36 : [ 0.915 0.575 0.035 ] 37 : [ 0.295 0.785 0.005 ] 38 : [ 0.825 0.985 0.715 ] 39 : [ 0.555 0.435 0.805 ] 40 : [ 0.995 0.105 0.325 ] 41 : [ 0.315 0.385 0.255 ] 42 : [ 0.335 0.185 0.625 ] 43 : [ 0.435 0.365 0.225 ] 44 : [ 0.385 0.865 0.275 ] 45 : [ 0.935 0.605 0.345 ] 46 : [ 0.185 0.175 0.905 ] 47 : [ 0.885 0.965 0.455 ] 48 : [ 0.715 0.895 0.415 ] 49 : [ 0.495 0.495 0.775 ] 50 : [ 0.635 0.525 0.065 ] 51 : [ 0.775 0.345 0.385 ] 52 : [ 0.195 0.645 0.675 ] 53 : [ 0.865 0.855 0.145 ] 54 : [ 0.135 0.355 0.425 ] 55 : [ 0.585 0.915 0.485 ] 56 : [ 0.945 0.325 0.885 ] 57 : [ 0.105 0.705 0.085 ] 58 : [ 0.565 0.675 0.635 ] 59 : [ 0.025 0.565 0.815 ] 60 : [ 0.015 0.665 0.025 ] 61 : [ 0.245 0.375 0.725 ] 62 : [ 0.655 0.115 0.435 ] 63 : [ 0.955 0.165 0.055 ] 64 : [ 0.485 0.425 0.215 ] 65 : [ 0.415 0.215 0.495 ] 66 : [ 0.615 0.595 0.995 ] 67 : [ 0.285 0.795 0.475 ] 68 : [ 0.355 0.025 0.825 ] 69 : [ 0.575 0.975 0.895 ] 70 : [ 0.605 0.635 0.175 ] 71 : [ 0.975 0.475 0.665 ] 72 : [ 0.795 0.045 0.695 ] 73 : [ 0.925 0.615 0.555 ] 74 : [ 0.855 0.005 0.925 ] 75 : [ 0.365 0.555 0.185 ] 76 : [ 0.785 0.735 0.265 ] 77 : [ 0.675 0.035 0.615 ] 78 : [ 0.215 0.545 0.525 ] 79 : [ 0.845 0.755 0.935 ] 80 : [ 0.505 0.085 0.315 ] 81 : [ 0.905 0.535 0.845 ] 82 : [ 0.035 0.685 0.465 ] 83 : [ 0.095 0.265 0.975 ] 84 : [ 0.695 0.505 0.965 ] 85 : [ 0.745 0.765 0.915 ] 86 : [ 0.765 0.305 0.075 ] 87 : [ 0.155 0.405 0.565 ] 88 : [ 0.455 0.625 0.375 ] 89 : [ 0.125 0.135 0.645 ] 90 : [ 0.545 0.055 0.585 ] 91 : [ 0.265 0.935 0.575 ] 92 : [ 0.075 0.015 0.735 ] 93 : [ 0.895 0.655 0.195 ] 94 : [ 0.175 0.995 0.285 ] 95 : [ 0.515 0.315 0.125 ] 96 : [ 0.405 0.805 0.515 ] 97 : [ 0.535 0.145 0.535 ] 98 : [ 0.225 0.825 0.595 ] 99 : [ 0.755 0.295 0.855 ] History criterion= [ PhiP criterion ] 0 : [ 33.3333 ] 1 : [ 33.3333 ] 2 : [ 33.3333 ] ... 1997 : [ 13.4364 ] 1998 : [ 13.4364 ] 1999 : [ 13.4364 ] Final criteria: C2=0.026776, PhiP=13.436435 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.305 0.265 0.275 ] 1 : [ 0.255 0.855 0.645 ] 2 : [ 0.995 0.565 0.005 ] 3 : [ 0.265 0.525 0.765 ] 4 : [ 0.565 0.075 0.755 ] 5 : [ 0.445 0.705 0.605 ] 6 : [ 0.055 0.555 0.685 ] 7 : [ 0.195 0.395 0.205 ] 8 : [ 0.865 0.765 0.865 ] 9 : [ 0.845 0.245 0.825 ] 10 : [ 0.005 0.535 0.445 ] 11 : [ 0.525 0.975 0.405 ] 12 : [ 0.895 0.325 0.855 ] 13 : [ 0.875 0.455 0.625 ] 14 : [ 0.775 0.375 0.105 ] 15 : [ 0.155 0.255 0.315 ] 16 : [ 0.185 0.275 0.695 ] 17 : [ 0.345 0.885 0.175 ] 18 : [ 0.655 0.545 0.295 ] 19 : [ 0.035 0.425 0.045 ] 20 : [ 0.295 0.035 0.365 ] 21 : [ 0.235 0.735 0.465 ] 22 : [ 0.585 0.175 0.195 ] 23 : [ 0.575 0.135 0.555 ] 24 : [ 0.795 0.105 0.835 ] 25 : [ 0.205 0.935 0.455 ] 26 : [ 0.285 0.865 0.395 ] 27 : [ 0.415 0.055 0.715 ] 28 : [ 0.635 0.745 0.515 ] 29 : [ 0.475 0.145 0.225 ] 30 : [ 0.975 0.045 0.355 ] 31 : [ 0.715 0.695 0.705 ] 32 : [ 0.315 0.515 0.525 ] 33 : [ 0.735 0.225 0.345 ] 34 : [ 0.245 0.685 0.135 ] 35 : [ 0.395 0.625 0.095 ] 36 : [ 0.685 0.065 0.255 ] 37 : [ 0.855 0.335 0.335 ] 38 : [ 0.785 0.285 0.485 ] 39 : [ 0.165 0.595 0.655 ] 40 : [ 0.015 0.435 0.875 ] 41 : [ 0.335 0.915 0.785 ] 42 : [ 0.725 0.815 0.565 ] 43 : [ 0.625 0.215 0.065 ] 44 : [ 0.065 0.875 0.975 ] 45 : [ 0.675 0.415 0.245 ] 46 : [ 0.135 0.165 0.165 ] 47 : [ 0.695 0.585 0.675 ] 48 : [ 0.495 0.305 0.615 ] 49 : [ 0.025 0.775 0.635 ] 50 : [ 0.555 0.605 0.115 ] 51 : [ 0.425 0.995 0.535 ] 52 : [ 0.665 0.655 0.325 ] 53 : [ 0.645 0.945 0.665 ] 54 : [ 0.375 0.785 0.015 ] 55 : [ 0.905 0.385 0.235 ] 56 : [ 0.515 0.715 0.545 ] 57 : [ 0.925 0.845 0.305 ] 58 : [ 0.435 0.295 0.885 ] 59 : [ 0.355 0.015 0.265 ] 60 : [ 0.365 0.675 0.795 ] 61 : [ 0.115 0.095 0.905 ] 62 : [ 0.945 0.205 0.895 ] 63 : [ 0.605 0.445 0.435 ] 64 : [ 0.455 0.365 0.215 ] 65 : [ 0.595 0.505 0.955 ] 66 : [ 0.835 0.355 0.495 ] 67 : [ 0.915 0.475 0.185 ] 68 : [ 0.485 0.235 0.995 ] 69 : [ 0.325 0.825 0.915 ] 70 : [ 0.535 0.345 0.425 ] 71 : [ 0.225 0.615 0.815 ] 72 : [ 0.075 0.635 0.145 ] 73 : [ 0.885 0.155 0.025 ] 74 : [ 0.985 0.495 0.075 ] 75 : [ 0.405 0.195 0.805 ] 76 : [ 0.215 0.965 0.735 ] 77 : [ 0.615 0.115 0.375 ] 78 : [ 0.965 0.315 0.595 ] 79 : [ 0.705 0.185 0.775 ] 80 : [ 0.545 0.805 0.385 ] 81 : [ 0.755 0.755 0.965 ] 82 : [ 0.045 0.955 0.745 ] 83 : [ 0.935 0.485 0.725 ] 84 : [ 0.385 0.125 0.155 ] 85 : [ 0.095 0.725 0.285 ] 86 : [ 0.805 0.795 0.085 ] 87 : [ 0.125 0.405 0.575 ] 88 : [ 0.955 0.985 0.125 ] 89 : [ 0.275 0.925 0.035 ] 90 : [ 0.505 0.895 0.585 ] 91 : [ 0.105 0.465 0.985 ] 92 : [ 0.175 0.025 0.505 ] 93 : [ 0.465 0.085 0.935 ] 94 : [ 0.825 0.665 0.845 ] 95 : [ 0.815 0.905 0.945 ] 96 : [ 0.085 0.005 0.475 ] 97 : [ 0.145 0.645 0.055 ] 98 : [ 0.745 0.835 0.415 ] 99 : [ 0.765 0.575 0.925 ] History criterion= [ PhiP criterion ] 0 : [ 21.8219 ] 1 : [ 21.8219 ] 2 : [ 21.8219 ] ... 1997 : [ 11.5557 ] 1998 : [ 11.5557 ] 1999 : [ 11.5557 ] Final criteria: C2=0.025318, PhiP=11.555748 Generating design using linear temperature SimulatedAnnealing & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.645 0.065 0.085 ] 1 : [ 0.745 0.725 0.065 ] 2 : [ 0.145 0.145 0.715 ] 3 : [ 0.305 0.895 0.795 ] 4 : [ 0.205 0.915 0.095 ] 5 : [ 0.325 0.175 0.385 ] 6 : [ 0.035 0.735 0.925 ] 7 : [ 0.185 0.325 0.345 ] 8 : [ 0.545 0.975 0.825 ] 9 : [ 0.605 0.545 0.665 ] 10 : [ 0.345 0.005 0.485 ] 11 : [ 0.155 0.515 0.185 ] 12 : [ 0.175 0.505 0.745 ] 13 : [ 0.465 0.455 0.655 ] 14 : [ 0.595 0.295 0.035 ] 15 : [ 0.225 0.265 0.985 ] 16 : [ 0.435 0.435 0.435 ] 17 : [ 0.355 0.055 0.835 ] 18 : [ 0.765 0.785 0.725 ] 19 : [ 0.385 0.125 0.155 ] 20 : [ 0.455 0.965 0.265 ] 21 : [ 0.215 0.245 0.415 ] 22 : [ 0.695 0.565 0.495 ] 23 : [ 0.795 0.855 0.355 ] 24 : [ 0.445 0.615 0.045 ] 25 : [ 0.995 0.415 0.545 ] 26 : [ 0.705 0.385 0.375 ] 27 : [ 0.975 0.365 0.645 ] 28 : [ 0.735 0.955 0.915 ] 29 : [ 0.915 0.355 0.205 ] 30 : [ 0.505 0.235 0.215 ] 31 : [ 0.805 0.835 0.555 ] 32 : [ 0.105 0.845 0.735 ] 33 : [ 0.265 0.465 0.935 ] 34 : [ 0.785 0.395 0.675 ] 35 : [ 0.635 0.255 0.705 ] 36 : [ 0.865 0.905 0.305 ] 37 : [ 0.665 0.795 0.565 ] 38 : [ 0.825 0.095 0.975 ] 39 : [ 0.485 0.655 0.325 ] 40 : [ 0.965 0.645 0.525 ] 41 : [ 0.375 0.305 0.875 ] 42 : [ 0.085 0.105 0.025 ] 43 : [ 0.925 0.195 0.115 ] 44 : [ 0.615 0.815 0.175 ] 45 : [ 0.295 0.535 0.995 ] 46 : [ 0.425 0.715 0.775 ] 47 : [ 0.235 0.985 0.335 ] 48 : [ 0.895 0.865 0.595 ] 49 : [ 0.475 0.155 0.295 ] 50 : [ 0.575 0.045 0.765 ] 51 : [ 0.255 0.595 0.165 ] 52 : [ 0.495 0.775 0.015 ] 53 : [ 0.585 0.805 0.615 ] 54 : [ 0.025 0.575 0.965 ] 55 : [ 0.395 0.165 0.905 ] 56 : [ 0.045 0.225 0.635 ] 57 : [ 0.315 0.475 0.365 ] 58 : [ 0.755 0.405 0.785 ] 59 : [ 0.945 0.765 0.755 ] 60 : [ 0.365 0.995 0.105 ] 61 : [ 0.245 0.115 0.605 ] 62 : [ 0.725 0.495 0.945 ] 63 : [ 0.655 0.485 0.275 ] 64 : [ 0.405 0.755 0.245 ] 65 : [ 0.625 0.885 0.445 ] 66 : [ 0.015 0.875 0.885 ] 67 : [ 0.075 0.825 0.395 ] 68 : [ 0.095 0.705 0.235 ] 69 : [ 0.055 0.285 0.315 ] 70 : [ 0.515 0.585 0.465 ] 71 : [ 0.675 0.665 0.895 ] 72 : [ 0.885 0.745 0.475 ] 73 : [ 0.135 0.375 0.425 ] 74 : [ 0.285 0.345 0.575 ] 75 : [ 0.835 0.025 0.805 ] 76 : [ 0.165 0.625 0.535 ] 77 : [ 0.935 0.605 0.685 ] 78 : [ 0.905 0.445 0.285 ] 79 : [ 0.875 0.635 0.505 ] 80 : [ 0.685 0.675 0.225 ] 81 : [ 0.955 0.275 0.255 ] 82 : [ 0.125 0.035 0.955 ] 83 : [ 0.065 0.335 0.145 ] 84 : [ 0.335 0.085 0.695 ] 85 : [ 0.195 0.075 0.855 ] 86 : [ 0.855 0.925 0.135 ] 87 : [ 0.845 0.425 0.455 ] 88 : [ 0.115 0.185 0.865 ] 89 : [ 0.555 0.935 0.005 ] 90 : [ 0.815 0.205 0.075 ] 91 : [ 0.415 0.945 0.815 ] 92 : [ 0.715 0.695 0.405 ] 93 : [ 0.985 0.525 0.055 ] 94 : [ 0.535 0.215 0.515 ] 95 : [ 0.525 0.135 0.845 ] 96 : [ 0.565 0.315 0.195 ] 97 : [ 0.775 0.555 0.625 ] 98 : [ 0.005 0.015 0.125 ] 99 : [ 0.275 0.685 0.585 ] History criterion= [ PhiP criterion ] 0 : [ 18.5841 ] 1 : [ 18.5837 ] 2 : [ 18.5837 ] ... 1997 : [ 11.4029 ] 1998 : [ 11.4029 ] 1999 : [ 10.8683 ] Final criteria: C2=0.030907, PhiP=10.868263 openturns-1.9/python/test/t_OptimalLHSExperiment_std.py000077500000000000000000000164161307543307100235220ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Defining parameters dimension = 3 size = 100 # Build standard LHS algorithm distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension) lhs = ot.LHSExperiment(distribution, size) lhs.setRandomShift(False) # centered lhs.setAlwaysShuffle(True) # randomized # print the object print("lhs=", lhs) bounds = distribution.getRange() print("Bounds of uniform distributions=", bounds) # Generate design without optimization design = lhs.generate() print("design=", design) # Defining space fillings spaceFillingC2 = ot.SpaceFillingC2() spaceFillingPhiP = ot.SpaceFillingPhiP() # print the criteria on this design print("PhiP=%f, C2=%f" % (ot.SpaceFillingPhiP().evaluate(design), ot.SpaceFillingC2().evaluate(design))) # Parameters for drawing design ==> Number of points are for the "grid" Nx = 50 Ny = 50 # Show the design # ot.Show(lhsGraph) # --------------------------------------------------# # ------------ MonteCarlo algorithm ------------- # # --------------------------------------------------# # RandomBruteForce MonteCarlo with N designs N = 100 # 1) LHS with C2 optimization optimalLHSAlgorithm = ot.MonteCarloLHS(lhs, N, spaceFillingC2) # print lhs print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print("Generating design with MonteCarlo and C2 space filling=", design) result = optimalLHSAlgorithm.getResult() print("History criterion=", result.getAlgoHistory()) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Criterion graph ==> Graph object criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("MC_C2_Criterion") # 2) LHS with PhiP optimization (=mindist optim) optimalLHSAlgorithm = ot.MonteCarloLHS(lhs, N, spaceFillingPhiP) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print("Generating design with MonteCarlo and PhiP optimum=", design) result = optimalLHSAlgorithm.getResult() print("History criterion=", result.getAlgoHistory()) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Graph of criterion criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("MC_PhiP_Criterion") # --------------------------------------------------# # ------------- Simulated annealing ------------- # # --------------------------------------------------# # Defining temperature profil ==> TO, iterations... T0 = 10.0 iMax = 2000 c = 0.95 # Care, c should be in ]0,1[ # Geometric profil geomProfile = ot.GeometricProfile(T0, c, iMax) # 3) Simulated Annealing LHS with geometric temperature, C2 optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, geomProfile, spaceFillingC2) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using SimulatedAnnealing geometric temperature & C2 criterion=", design) result = optimalLHSAlgorithm.getResult() history = result.getAlgoHistory() print("History criterion=", history[:, 0]) print("History temperature=", history[:, 1]) print("History probability=", history[:, 2]) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Criteria drawing # SA algorithms returns also Probability & temperature criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("SA_Geom_C2_Criterion") probaGraph = result.drawHistoryProbability() # probaGraph.draw("SA_Geom_C2_Proba") tempGraph = result.drawHistoryTemperature() # tempGraph.draw("SA_Geom_C2_Temperature") # 4) Simulated Annealing LHS with geometric temperature, PhiP optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, geomProfile, spaceFillingPhiP) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using SimulatedAnnealing geometric temperature & C2 criterion=", design) result = optimalLHSAlgorithm.getResult() history = result.getAlgoHistory() print("History criterion=", history[:, 0]) print("History temperature=", history[:, 1]) print("History probability=", history[:, 2]) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Criteria drawing criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("SA_Geom_PhiP_Criterion") probaGraph = result.drawHistoryProbability() # probaGraph.draw("SA_Geom_PhiP_Proba") tempGraph = result.drawHistoryTemperature() # tempGraph.draw("SA_Geom_PhiP_Temperature") # Linear profil linearProfile = ot.LinearProfile(T0, iMax) # 5) Simulated Annealing LHS with linear temperature, C2 optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, linearProfile, spaceFillingC2) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using linear temperature SimulatedAnnealing & C2 criterion =", design) result = optimalLHSAlgorithm.getResult() history = result.getAlgoHistory() print("History criterion=", history[:, 0]) print("History temperature=", history[:, 1]) print("History probability=", history[:, 2]) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Criteria drawing criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("SA_Lin_C2_Criterion") probaGraph = result.drawHistoryProbability() # probaGraph.draw("SA_Lin_C2_Proba") tempGraph = result.drawHistoryTemperature() # tempGraph.draw("SA_Lin_C2_Temperature") # 6) Simulated Annealing LHS with linear temperature, PhiP optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, linearProfile, spaceFillingPhiP) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using linear temperature SimulatedAnnealing & PhiP criterion =", design) result = optimalLHSAlgorithm.getResult() history = result.getAlgoHistory() print("History criterion=", history[:, 0]) print("History temperature=", history[:, 1]) print("History probability=", history[:, 2]) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(), result.getPhiP())) # Criteria drawing criterionGraph = result.drawHistoryCriterion() # criterionGraph.draw("SA_Lin_PhiP_Criterion") probaGraph = result.drawHistoryProbability() # probaGraph.draw("SA_Lin_PhiP_Proba") tempGraph = result.drawHistoryTemperature() # tempGraph.draw("SA_Lin_PhiP_Temperature") # 7) Simulated Annealing LHS with linear temperature, Phi optimization and nStart > 1 # Result is a collection of LHSResult nStart = 10 optimalDesign = optimalLHSAlgorithm.generateWithRestart(nStart) for i in range(nStart): result = optimalLHSAlgorithm.getResult() design = result.getOptimalDesign(i) history = result.getAlgoHistory(i) print( "Generating design using linear temperature SimulatedAnnealing & PhiP criterion =", design) print("History criterion=", history[:, 0]) # print("History temperature=", history[:,1]) # print("History probability=", history[:,2]) print("Final criteria: C2=%f, PhiP=%f" % (result.getC2(i), result.getPhiP(i))) # decreasing criterion criterionGraph = result.drawHistoryCriterion(i) # criterionGraph.draw("SA_Lin_PhiP_Criterion_MultiRestart_%d"%(i+1)) probaGraph = result.drawHistoryProbability(i) # probaGraph.draw("SA_Lin_PhiP_Proba_MultiRestart_%d"%(i+1)) tempGraph = result.drawHistoryTemperature(i) # tempGraph.draw("SA_Lin_PhiP_Temperature_MultiRestart_%d"%(i+1)) openturns-1.9/python/test/t_OrderStatisticsMarginalChecker_std.expout000066400000000000000000000013231307543307100264530ustar00rootroot00000000000000marginals= [class=Uniform name=Uniform dimension=1 a=-1 b=1, class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.71828 b=3.32012, class=Triangular name=Triangular dimension=1 a=3 m=4 b=5, class=Uniform name=Uniform dimension=1 a=5 b=6, class=Uniform name=Uniform dimension=1 a=5.5 b=6.5] isCompatible= True partition= [0,2] marginals= [class=Uniform name=Uniform dimension=1 a=-1 b=1, class=LogUniform name=LogUniform dimension=1 aLog=1 bLog=1.2 a=2.71828 b=3.32012, class=Triangular name=Triangular dimension=1 a=3 m=4 b=5, class=Uniform name=Uniform dimension=1 a=5 b=6, class=Uniform name=Uniform dimension=1 a=5.5 b=6.5, class=Uniform name=Uniform dimension=1 a=0 b=1] isCompatible= False partition= [0,2] openturns-1.9/python/test/t_OrderStatisticsMarginalChecker_std.py000077500000000000000000000010501307543307100255570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) def checkMarginals(coll): osmc = ot.OrderStatisticsMarginalChecker(coll) print("marginals=", coll) print("isCompatible=", osmc.isCompatible()) print("partition=", osmc.buildPartition()) coll = [ot.Uniform(-1.0, 1.0), ot.LogUniform(1.0, 1.2), ot.Triangular(3.0, 4.0, 5.), ot.Uniform(5.0, 6.0), ot.Uniform(5.5, 6.5)] checkMarginals(coll) coll.append(ot.Uniform(0.0, 1.0)) checkMarginals(coll) openturns-1.9/python/test/t_OrthogonalBasis_std.expout000066400000000000000000000051471307543307100234730ustar00rootroot00000000000000basis= class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=LaguerreFactory k=2.5 measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0,class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1,class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] measure=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginal[2]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] i= 0 f(X)= [1] i= 1 f(X)= [-1.60357] i= 2 f(X)= [0.866025] i= 3 f(X)= [0.5] i= 4 f(X)= [2.049] i= 5 f(X)= [-1.38873] i= 6 f(X)= [-0.801784] i= 7 f(X)= [-0.279508] i= 8 f(X)= [0.433013] i= 9 f(X)= [-0.53033] basis= class=OrthogonalProductFunctionFactory factory=class=TensorizedUniVariateFunctionFactory univariate function collection=[class=UniVariateFunctionFamily implementation=class=OrthogonalUniVariatePolynomialFunctionFactory measure=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0,class=UniVariateFunctionFamily implementation=class=HaarWaveletFactory measure=class=Uniform name=Uniform dimension=1 a=0 b=1,class=UniVariateFunctionFamily implementation=class=FourierSeriesFactory measure=class=Uniform name=Uniform dimension=1 a=-3.14159 b=3.14159] enumerate function=class=LinearEnumerateFunction dimension=3 measure=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Gamma name=Gamma dimension=1 k=3.5 lambda=1 gamma=0 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=-3.14159 b=3.14159 i= 0 f(X)= [1] i= 1 f(X)= [-1.60357] i= 2 f(X)= [-1] i= 3 f(X)= [0.67801] i= 4 f(X)= [2.049] i= 5 f(X)= [1.60357] i= 6 f(X)= [-1.08723] i= 7 f(X)= [0] i= 8 f(X)= [-0.67801] i= 9 f(X)= [1.24109] openturns-1.9/python/test/t_OrthogonalBasis_std.py000077500000000000000000000015751307543307100226030ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Polynomial factories factoryCollection = [ot.LaguerreFactory( 2.5), ot.LegendreFactory(), ot.HermiteFactory()] dim = len(factoryCollection) basisFactory = ot.OrthogonalProductPolynomialFactory(factoryCollection) basis = ot.OrthogonalBasis(basisFactory) print('basis=', basis) x = [0.5] * dim for i in range(10): f = basis.build(i) print('i=', i, 'f(X)=', f(x)) # Other factories factoryCollection = [ot.OrthogonalUniVariatePolynomialFunctionFactory( ot.LaguerreFactory(2.5)), ot.HaarWaveletFactory(), ot.FourierSeriesFactory()] dim = len(factoryCollection) basisFactory = ot.OrthogonalProductFunctionFactory(factoryCollection) basis = ot.OrthogonalBasis(basisFactory) print('basis=', basis) x = [0.5] * dim for i in range(10): f = basis.build(i) print('i=', i, 'f(X)=', f(x)) openturns-1.9/python/test/t_OrthogonalUniVariatePolynomialFunctionFactory_std.expout000066400000000000000000000022511307543307100315740ustar00rootroot00000000000000class=OrthogonalUniVariatePolynomialFunctionFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 order= 0 1 X= [0.4] f(X)= [1] df(X)= [0] d2f(X)= [0] order= 1 1.73205 * X X= [0.4] f(X)= [0.69282] df(X)= [1.73205] d2f(X)= [0] order= 2 -1.11803 + 3.3541 * X^2 X= [0.4] f(X)= [-0.581378] df(X)= [2.68328] d2f(X)= [6.7082] order= 3 -3.96863 * X + 6.61438 * X^3 X= [0.4] f(X)= [-1.16413] df(X)= [-0.793725] d2f(X)= [15.8745] order= 4 1.125 - 11.25 * X^2 + 13.125 * X^4 X= [0.4] f(X)= [-0.339] df(X)= [-5.64] d2f(X)= [2.7] order= 5 6.21867 * X - 29.0205 * X^3 + 26.1184 * X^5 X= [0.4] f(X)= [0.897611] df(X)= [-4.36799] d2f(X)= [-36.2175] order= 6 -1.12673 + 23.6614 * X^2 - 70.9843 * X^4 + 52.0551 * X^6 X= [0.4] f(X)= [1.05511] df(X)= [3.95543] d2f(X)= [-48.9886] order= 7 -8.47215 * X + 76.2494 * X^3 - 167.749 * X^5 + 103.844 * X^7 X= [0.4] f(X)= [-0.0565084] df(X)= [9.63315] d2f(X)= [12.9417] order= 8 1.12741 - 40.5868 * X^2 + 223.228 * X^4 - 386.928 * X^6 + 207.283 * X^8 X= [0.4] f(X)= [-1.10087] df(X)= [3.62085] d2f(X)= [97.8084] order= 9 10.727 * X - 157.329 * X^3 + 613.583 * X^5 - 876.547 * X^7 + 413.925 * X^9 X= [0.4] f(X)= [-0.822801] df(X)= [-8.94324] d2f(X)= [79.6399] openturns-1.9/python/test/t_OrthogonalUniVariatePolynomialFunctionFactory_std.py000077500000000000000000000007611307543307100307070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot polynomialFactory = ot.LegendreFactory() factory = ot.OrthogonalUniVariatePolynomialFunctionFactory(polynomialFactory) print(factory) x = 0.4 for i in range(10): function = factory.build(i) print('order=', i, function, 'X=', ot.Point([x]), 'f(X)=', ot.Point([function(x)]), 'df(X)=', ot.Point([function.gradient(x)]), 'd2f(X)=', ot.Point([function.hessian(x)])) openturns-1.9/python/test/t_OrthonormalizationAlgorithm_std.expout000066400000000000000000000007251307543307100261430ustar00rootroot00000000000000algo= class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.1,0]] monicSquaredNorms=class=Point name=Unnamed dimension=1 values=[1] isElliptical=false measure= class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 new measure= class=Triangular name=Triangular dimension=1 a=-1 m=-0.2 b=1 openturns-1.9/python/test/t_OrthonormalizationAlgorithm_std.py000077500000000000000000000010101307543307100252360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: distribution = Triangular(-1.0, 0.3, 1.0) algo = OrthonormalizationAlgorithm(distribution) print("algo=", algo) print("measure=", repr(algo.getMeasure())) algo.setMeasure(Triangular(-1.0, -0.2, 1.0)) print("new measure=", repr(algo.getMeasure())) except: import sys print("t_OrthonormalizationAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Pairs_std.expout000066400000000000000000000000001307543307100214320ustar00rootroot00000000000000openturns-1.9/python/test/t_Pairs_std.py000077500000000000000000000017271307543307100205620ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: dim = 5 meanPoint = Point(dim, 0.0) sigma = Point(dim, 5.0) R = CorrelationMatrix(dim) distribution = Normal(meanPoint, sigma, R) # Instanciate another distribution object for i in range(1, dim): R[i, i - 1] = -0.25 distribution2 = Normal(meanPoint, sigma, R) # Test for sampling size = 1000 sample = distribution.getSample(size) # Create an empty graph myGraph = Graph("Pairs", " ", " ", True, "topright") # Create the first cloud myPairs = Pairs(sample, "Pairs example", sample.getDescription(), "green", "bullet") # Then, draw it myGraph.add(myPairs) myGraph.draw("Graph_Pairs_OT.png") # Check that the correct files have been generated by computing their # checksum except: import sys print("t_Pairs_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ParametricFunction_std.expout000066400000000000000000000010301307543307100241550ustar00rootroot00000000000000g2= ParametricEvaluation([x0,x1,x2,x3,x4]->[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)], parameters positions=[3,1], parameters=[x3 : 0.85, x1 : 0.85], input positions=[0,2,4]) g2(x)= [0.690284,2.05998,0.190476] g3= ParametricEvaluation([x0,x1,x2,x3,x4]->[sin(x0) + x1 * cos(x2) / exp(x3),-2.0 * x0 + x1 * x2^2 + cos(x3),x0 / (abs(x1) * x2^2 + x3 + 1.0)], parameters positions=[0,2,4], parameters=[x0 : 1, x2 : 2, x4 : 0], input positions=[3,1]) g3(x)= [0.690284,2.05998,0.190476] openturns-1.9/python/test/t_ParametricFunction_std.py000077500000000000000000000014771307543307100233030ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot import math as m f = ot.SymbolicFunction(ot.Description.BuildDefault(5, 'x'), ['sin(x0) + x1 * cos(x2) / exp(x3)', '-2.0 * x0 + x1 * x2^2 + cos(x3)', 'x0 / (abs(x1) * x2^2 + x3 + 1.0)']) pset = [3, 1] # x3, x1 parametersSet = True x = [1.0, 2.0, 0.0] # x0, x2, x4 # with reference point referencePoint = [0.85] * 2 # x3, x1 g2 = ot.ParametricFunction(f, pset, referencePoint, parametersSet) print('g2=', g2) print('g2(x)=', g2(x)) # with complementary parameter set referencePoint = [1.0, 2.0, 0.0] # x0, x2, x4 x = [0.85] * 2 # x3, x1 parametersSet = False g3 = ot.ParametricFunction(f, pset, referencePoint, parametersSet) print('g3=', g3) print('g3(x)=', g3(x)) openturns-1.9/python/test/t_ParametrizedDistribution_std.expout000066400000000000000000000031361307543307100254200ustar00rootroot00000000000000Distribution class=ParametrizedDistribution parameters=class=GammaMuSigma name=Unnamed mu=0.1 sigma=0.489898 gamma=-0.5 distribution=class=Gamma name=Gamma dimension=1 k=1.5 lambda=2.5 gamma=-0.5 Elliptical = False Continuous = True oneRealization= [0.128566] oneSample first= [0.677574] last= [-0.102762] mean= [0.106857] covariance= [[ 0.243092 ]] Point= [1] ddf = [-0.278355] ddf (FD)= -0.278355 log pdf= -2.05205 pdf =0.128471 pdf (FD)=0.128471 cdf= 0.942442 ccdf= 0.0575585 survival= 0.0575585 characteristic function=(0.892418, 0.0632527) log characteristic function=(-0.111315, 0.0707596) quantile= [1.06295] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.429631] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.499368, 1.06337] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.18978} with f= MinimumVolumeLevelSetEvaluation(Gamma(k = 1.5, lambda = 2.5, gamma = -0.5)) beta= [0.111942] Bilateral confidence interval= [-0.456841, 1.36968] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 1.06295] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.429631, 13.1546] beta= [0.95] mean= [0.1] covariance= [[ -0.120326 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mu : 0.1, sigma : 0.489898, gamma : -0.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [1.5] standard moment n= 2 , value= [3.75] standard moment n= 3 , value= [13.125] standard moment n= 4 , value= [59.0625] standard moment n= 5 , value= [324.844] Standard representative= Gamma(k = 1.5, lambda = 1, gamma = 0) openturns-1.9/python/test/t_ParametrizedDistribution_std.py000077500000000000000000000075661307543307100245420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot parameters = ot.GammaMuSigma(0.1, 0.489898, -0.5) distribution = ot.ParametrizedDistribution(parameters) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # Define a point point = ot.Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) print("ddf (FD)= %.6g" % ((distribution.computePDF(point + ot.Point(1, eps)) - distribution.computePDF(point + ot.Point(1, -eps))) / (2.0 * eps))) LPDF = distribution.computeLogPDF(point) print("log pdf= %.6g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6g" % PDF) print("pdf (FD)=%.6g" % ((distribution.computeCDF(point + ot.Point(1, eps)) - distribution.computeCDF(point + ot.Point(1, -eps))) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.6g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.6g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.6g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", ot.Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution.getMean() print("mean=", mean) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) openturns-1.9/python/test/t_Path_std.py000077500000000000000000000023341307543307100203730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot try: # As the result of these methods is installation dependent, don't check # the output print('Installation directory=', ot.Path.GetInstallationDirectory()) configDirectoryList = ot.Path.GetConfigDirectoryList() for i in range(len(configDirectoryList)): print('configDirectoryList[', i, ']=', configDirectoryList[i]) list = ot.DirectoryList(2) directory1 = ot.Path.CreateTemporaryDirectory('testDirectory1') print('Directory 1=', directory1) list[0] = directory1 directory2 = ot.Path.CreateTemporaryDirectory('testDirectory2') print('Directory 2=', directory2) list[1] = directory2 # Create a file in dir2 testFile = open(directory2 + '/testFile', 'w') testFile.write('test') testFile.close() findName = ot.Path.FindFileByNameInDirectoryList('testFile', list) print('Find file=', findName) fileName = ot.Path.BuildTemporaryFileName('testFile') print('Temporary file name=', fileName) ot.Path.DeleteTemporaryDirectory(directory1) ot.Path.DeleteTemporaryDirectory(directory2) except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_PenalizedLeastSquaresAlgorithm_std.expout000066400000000000000000000011001307543307100264750ustar00rootroot00000000000000Uniform weight, no penalization Coefficients= [-0.292364,-0.464364,0.781818,1.38182] Residual=0.0212678 RelativeError=0.20229 Uniform weight, spherical penalization Coefficients= [-0.0288004,0.0729819,0.334311,0.57618] Residual=0.0294134 Non uniform weight, no penalization Coefficients= [-0.244662,-0.45609,0.657895,1.30075] Residual=0.0590532 Non uniform weight, spherical penalization Coefficients= [-0.222214,-0.28088,0.59494,1.07289] Residual=0.065384 Non uniform weight, non spherical penalization Coefficients= [-0.205926,-0.283995,0.575234,1.07306] Residual=0.0657827 openturns-1.9/python/test/t_PenalizedLeastSquaresAlgorithm_std.py000077500000000000000000000050721307543307100256200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function, division from openturns import * TESTPREAMBLE() dimension = 2 inVar = Description(dimension) inVar[0] = "x1" inVar[1] = "x2" outVar = Description(1) outVar[0] = "y" formula = Description(1) formula[0] = "x1^3+1.5*x2^3-x1*x2" model = Function(inVar, outVar, formula) coll = [] formula[0] = "x1" coll.append(Function(inVar, outVar, formula)) formula[0] = "x2" coll.append(Function(inVar, outVar, formula)) formula[0] = "x1^2" coll.append(Function(inVar, outVar, formula)) formula[0] = "x2^2" coll.append(Function(inVar, outVar, formula)) basis = Basis(coll) indices = list(range(len(coll))) size = 5 inputSample = Sample(size * size, dimension) weight = Point(inputSample.getSize(), 1) for i in range(inputSample.getSize()): inputSample[i] = Point( (float(i % size) / size, (1.0 * (i // size)) / size)) weight[i] = (i % size + 1) * ((i // size) + 1) penalizationFactor = 0.25 # Uniform weight, no penalization algo = PenalizedLeastSquaresAlgorithm( inputSample, model(inputSample), Point(inputSample.getSize(), 1.0), basis, indices) print("Uniform weight, no penalization") print("Coefficients=", (algo.getCoefficients())) print("Residual=%g" % algo.getResidual()) print("RelativeError=%g" % algo.getRelativeError()) # Uniform weight, spherical penalization algo = PenalizedLeastSquaresAlgorithm( inputSample, model(inputSample), Point(inputSample.getSize(), 1.0), basis, indices, penalizationFactor) print("Uniform weight, spherical penalization") print("Coefficients=", (algo.getCoefficients())) print("Residual=%g" % algo.getResidual()) # Non uniform weight, spherical penalization algo = PenalizedLeastSquaresAlgorithm( inputSample, model(inputSample), weight, basis, indices) print("Non uniform weight, no penalization") print("Coefficients=", (algo.getCoefficients())) print("Residual=%g" % algo.getResidual()) algo = PenalizedLeastSquaresAlgorithm( inputSample, model(inputSample), weight, basis, indices, penalizationFactor) print("Non uniform weight, spherical penalization") print("Coefficients=", (algo.getCoefficients())) print("Residual=%g" % algo.getResidual()) penalizationMatrix = CovarianceMatrix(4) for i in range(4): penalizationMatrix[i, i] = 1.0 for i in range(3): penalizationMatrix[i, i + 1] = 1.0 / 8.0 algo = PenalizedLeastSquaresAlgorithm( inputSample, model(inputSample), weight, basis, indices, penalizationFactor, penalizationMatrix) print("Non uniform weight, non spherical penalization") print("Coefficients=", (algo.getCoefficients())) print("Residual=%g" % algo.getResidual()) openturns-1.9/python/test/t_Pie_std.expout000066400000000000000000000000001307543307100210710ustar00rootroot00000000000000openturns-1.9/python/test/t_Pie_std.py000077500000000000000000000030111307543307100202050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: data = Point() # DEBUG ; ici attente de la TUI palette = Description() labels = Description() data.add(5665855) labels.add("Candidate1") palette.add("blue") data.add(4804713) labels.add("Candidate2") palette.add("white") data.add(4610113) labels.add("Candidate3") palette.add("pink") data.add(1949170) labels.add("Candidate4") palette.add("yellow") data.add(1630045) labels.add("Candidate5") palette.add("red") data.add(1518528) labels.add("Candidate6") palette.add("ivory") data.add(1495724) labels.add("Candidate7") palette.add("green") data.add(1210562) labels.add("Candidate8") palette.add("orange") data.add(1204689) labels.add("Candidate9") palette.add("maroon") data.add(1113484) labels.add("Candidate10") palette.add("violet") data.add(3295588) labels.add("cumul candidates < 3.5% ") palette.add("purple") # Create an empty graph myGraph = Graph( "Presidentielle 2002 - 1er tour", "x1", "x2", True, "topright") # Create the first cloud myPie1 = Pie(data, labels, Point(2), 1, palette) # Then, draw it myGraph.add(myPie1) myGraph.draw("Graph_Pie_OT.png") # Check that the correct files have been generated by computing their # checksum except: import sys print("t_Pie_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_PiecewiseHermiteEvaluation_std.expout000066400000000000000000000034131307543307100256520ustar00rootroot00000000000000evaluation= PiecewiseHermiteEvaluation(locations=[0,0.0826446,0.330579,0.743802,1.32231,2.06612,2.97521,4.04959,5.28926,6.69421,8.26446,10]#12, values= 0 : [ 0 ] 1 : [ 0.0825506 ] 2 : [ 0.32459 ] 3 : [ 0.67709 ] 4 : [ 0.969287 ] 5 : [ 0.879817 ] 6 : [ 0.165619 ] 7 : [ -0.788271 ] 8 : [ -0.838175 ] 9 : [ 0.399553 ] 10 : [ 0.916929 ] 11 : [ -0.544021 ], derivatives= 0 : [ 1 ] 1 : [ 0.996587 ] 2 : [ 0.945855 ] 3 : [ 0.7359 ] 4 : [ 0.245933 ] 5 : [ -0.475313 ] 6 : [ -0.98619 ] 7 : [ -0.615328 ] 8 : [ 0.545401 ] 9 : [ 0.91671 ] 10 : [ -0.399051 ] 11 : [ -0.839072 ]) f( -1 )= [0] , ref= [-0.841471] f( -0.478260869565 )= [0] , ref= [-0.460236] f( 0.0434782608696 )= [0.0434646] , ref= [0.0434646] f( 0.565217391304 )= [0.535562] , ref= [0.535599] f( 1.08695652174 )= [0.884982] , ref= [0.885215] f( 1.60869565217 )= [0.998578] , ref= [0.999282] f( 2.13043478261 )= [0.847369] , ref= [0.847447] f( 2.65217391304 )= [0.469288] , ref= [0.470113] f( 3.17391304348 )= [-0.0319464] , ref= [-0.0323148] f( 3.69565217391 )= [-0.525091] , ref= [-0.526144] f( 4.21739130435 )= [-0.878671] , ref= [-0.87997] f( 4.73913043478 )= [-0.993802] , ref= [-0.999642] f( 5.26086956522 )= [-0.85327] , ref= [-0.853318] f( 5.78260869565 )= [-0.477262] , ref= [-0.479931] f( 6.30434782609 )= [0.0225884] , ref= [0.0211609] f( 6.82608695652 )= [0.515372] , ref= [0.516623] f( 7.34782608696 )= [0.861406] , ref= [0.874615] f( 7.86956521739 )= [0.991656] , ref= [0.999879] f( 8.39130434783 )= [0.858381] , ref= [0.859082] f( 8.91304347826 )= [0.483184] , ref= [0.48969] f( 9.4347826087 )= [-0.0139713] , ref= [-0.0100045] f( 9.95652173913 )= [-0.507064] , ref= [-0.507037] f( 10.4782608696 )= [-0.544021] , ref= [-0.869151] f( 11 )= [-0.544021] , ref= [-0.99999] openturns-1.9/python/test/t_PiecewiseHermiteEvaluation_std.py000077500000000000000000000013201307543307100247540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * ref = SymbolicFunction("x", "sin(x)") size = 12 locations = Point(size) values = Point(size) derivatives = Point(size) # Build locations/values/derivatives with non-increasing locations for i in range(size): locations[i] = 10.0 * i * i / (size - 1.0) / (size - 1.0) values[i] = ref([locations[i]])[0] derivatives[i] = ref.gradient([locations[i]])[0, 0] evaluation = PiecewiseHermiteEvaluation( locations, values, derivatives) print("evaluation=", evaluation) # Check the values for i in range(2 * size): x = [-1.0 + 12.0 * i / (2.0 * size - 1.0)] print("f( %.12g )=" % x[0], evaluation(x), ", ref=", ref(x)) openturns-1.9/python/test/t_PiecewiseLinearEvaluation_std.expout000066400000000000000000000031021307543307100254620ustar00rootroot00000000000000evaluation= class=PiecewiseLinearEvaluation locations=class=Point name=Unnamed dimension=12 values=[0,0.0826446,0.330579,0.743802,1.32231,2.06612,2.97521,4.04959,5.28926,6.69421,8.26446,10] values=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=12 dimension=1 data=[[0],[0.0825506],[0.32459],[0.67709],[0.969287],[0.879817],[0.165619],[-0.788271],[-0.838175],[0.399553],[0.916929],[-0.544021]] f( -1 )= [0] , ref= [-0.841471] f( -0.478260869565 )= [0] , ref= [-0.460236] f( 0.0434782608696 )= [0.0434288] , ref= [0.0434646] f( 0.565217391304 )= [0.524749] , ref= [0.535599] f( 1.08695652174 )= [0.850412] , ref= [0.885215] f( 1.60869565217 )= [0.934839] , ref= [0.999282] f( 2.13043478261 )= [0.829287] , ref= [0.847447] f( 2.65217391304 )= [0.419399] , ref= [0.470113] f( 3.17391304348 )= [-0.0108025] , ref= [-0.0323148] f( 3.69565217391 )= [-0.47403] , ref= [-0.526144] f( 4.21739130435 )= [-0.795026] , ref= [-0.87997] f( 4.73913043478 )= [-0.816029] , ref= [-0.999642] f( 5.26086956522 )= [-0.837033] , ref= [-0.853318] f( 5.78260869565 )= [-0.403546] , ref= [-0.479931] f( 6.30434782609 )= [0.0560915] , ref= [0.0211609] f( 6.82608695652 )= [0.443003] , ref= [0.516623] f( 7.34782608696 )= [0.614909] , ref= [0.874615] f( 7.86956521739 )= [0.786815] , ref= [0.999879] f( 8.39130434783 )= [0.810156] , ref= [0.859082] f( 8.91304347826 )= [0.370963] , ref= [0.48969] f( 9.4347826087 )= [-0.0682293] , ref= [-0.0100045] f( 9.95652173913 )= [-0.507422] , ref= [-0.507037] f( 10.4782608696 )= [-0.544021] , ref= [-0.869151] f( 11 )= [-0.544021] , ref= [-0.99999] openturns-1.9/python/test/t_PiecewiseLinearEvaluation_std.py000077500000000000000000000011371307543307100245770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * ref = SymbolicFunction("x", "sin(x)") size = 12 locations = Point(size) values = Point(size) # Build locations/values with non-increasing locations for i in range(size): locations[i] = 10.0 * i * i / (size - 1.0) / (size - 1.0) values[i] = ref([locations[i]])[0] evaluation = PiecewiseLinearEvaluation(locations, values) print("evaluation=", evaluation) # Check the values for i in range(2 * size): x = [-1.0 + 12.0 * i / (2.0 * size - 1.0)] print("f( %.12g )=" % x[0], evaluation(x), ", ref=", ref(x)) openturns-1.9/python/test/t_Point_description.expout000066400000000000000000000002141307543307100232050ustar00rootroot00000000000000point1.getDescription() = [,] point2.getDescription() = [,] point1.getDescription() = [point1_X,point1_Y] point2.getDescription() = [,] openturns-1.9/python/test/t_Point_description.py000077500000000000000000000014771307543307100223300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Constructor with size point1 = PointWithDescription(2) point1[0] = 100. point1[1] = 101. # Copy constructor point2 = PointWithDescription(point1) # Description print("point1.getDescription() = ", repr(point1.getDescription())) print("point2.getDescription() = ", repr(point2.getDescription())) description = Description(2) description[0] = "point1_X" description[1] = "point1_Y" point1.setDescription(description) print("point1.getDescription() = ", repr(point1.getDescription())) print("point2.getDescription() = ", repr(point2.getDescription())) except: import sys print("t_Point_description.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Point_std.expout000066400000000000000000000016661307543307100214700ustar00rootroot00000000000000size of point1 = 2 point1 = class=Point name=Unnamed dimension=2 values=[0,1] point1[0] = 0.000000 point1[1] = 1.000000 point2[0] = 10.000000 point2[1] = 11.000000 point3[0] = 0.000000 point3[1] = 1.000000 point= [0,1,2,3,4] point4[0] = 1000.000000 point4[1] = 1001.000000 point5 = class=Point name=Unnamed dimension=2 values=[10,12] point6 = class=Point name=Unnamed dimension=2 values=[-10,-10] point7 = class=Point name=Unnamed dimension=2 values=[20,24] point8 = class=Point name=Unnamed dimension=2 values=[0,0] point9 = [2.5,2.5] point10 = [2.5,2.5] i = class=Point name=Unnamed dimension=2 values=[1,0] j = class=Point name=Unnamed dimension=2 values=[0,1] I = class=Point name=Unnamed dimension=2 values=[2,0] J = class=Point name=Unnamed dimension=2 values=[0,3] dotProduct = 0.000000 point8[2] = 3.0 point8[1:3] = [2,3] point8[:] = [1,2,3,4,5] point8 = [1,88,99,4,5] Equality ? True pt = [-3,-5,6] pt[-1]= 6.0 pt[-1]= 8.0 openturns-1.9/python/test/t_Point_std.py000077500000000000000000000064531307543307100205760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Default constructor */ point1 = Point() ref_point1 = point1 # Check method add() point1.add(0.) point1.add(1.) size = ref_point1.getDimension() print("size of point1 = ", size) val1 = ref_point1[0] val2 = ref_point1[1] print("point1 = ", repr(ref_point1)) print("point1[0] = %.6f" % val1) print("point1[1] = %.6f" % val2) # Constructor with size point2 = Point(2) ref_point2 = point2 # Check operator[] methods point2[0] = 10. point2[1] = 11. val1 = ref_point2[0] val2 = ref_point2[1] print("point2[0] = %.6f" % val1) print("point2[1] = %.6f" % val2) # Copy constructor point3 = Point(ref_point1) ref_point3 = point3 val1 = ref_point3[0] val2 = ref_point3[1] print("point3[0] = %.6f" % val1) print("point3[1] = %.6f" % val2) # Constructor from indices indices = Indices(5) indices.fill() point = Point(indices) print("point=", point) # Constructor from python sequence point4 = Point((1000., 1001.)) i = 0 for coord in point4: print("point4[%d] = %.6f" % (i, coord)) i += 1 # Comparison operator if ref_point2 != ref_point2: print( "OT::Base::Type::Point.operator == does NOT return the correct value. Says that point2 and point2 are DIFFERENT though they are equal.") raise RuntimeError() if ref_point2 == ref_point3: print( "OT::Base::Type::Point.operator == does NOT return the correct value. Says that point2 and point3 are EQUAL though they are different.") raise RuntimeError() # Addition/Substraction/Product operators point5 = ref_point1 + ref_point2 ref_point5 = point5 print("point5 = ", repr(ref_point5)) point6 = ref_point1 - ref_point2 ref_point6 = point6 print("point6 = ", repr(ref_point6)) point7 = ref_point5 point7 += ref_point1 + ref_point2 ref_point7 = point7 print("point7 = ", repr(ref_point7)) point8 = ref_point6 point8 -= ref_point1 - ref_point2 ref_point8 = point8 print("point8 = ", repr(ref_point8)) point9 = Point(2, 5.0) / 2.0 print("point9 = ", point9) point10 = Point(2, 5.0) point10 /= 2.0 print("point10 = ", point10) # We create an orthonormal base (O,i,j) i = Point(2) i[0] = 1 i[1] = 0 print("i = ", repr(i)) j = Point(2) j[0] = 0 j[1] = 1 print("j = ", repr(j)) # BUG PYTHON for I = Point(2. * i) I = Point(i * 2.) print("I = ", repr(I)) J = Point(j * 3.) print("J = ", repr(J)) dotProduct = dot(I, J) print("dotProduct = %.6f" % dotProduct) # slicing point8 = Point((1., 2., 3., 4., 5.)) print('point8[2] = ', point8[2]) print('point8[1:3] = ', point8[1:3]) print('point8[:] = ', point8[:]) point8[1:3] = (88, 99) print('point8 = ', point8) # equality pt1 = Point([1.1, 2.2, 3.3]) pt2 = Point((1.1, 2.2, 3.3)) print("Equality ? ", (pt1 == pt2)) # non-regression for #754 pt = Point([-3, -5, 6]) print('pt = ', pt) # last print('pt[-1]=', pt[-1]) pt[-1] = 8. print('pt[-1]=', pt[-1]) except: import traceback traceback.print_exc() openturns-1.9/python/test/t_PoissonFactory_std.expout000066400000000000000000000006241307543307100233520ustar00rootroot00000000000000distribution= class=Poisson name=Poisson dimension=1 lambda=2.5 Estimated distribution= class=Poisson name=Poisson dimension=1 lambda=2.5153 Default distribution= Poisson(lambda = 1) Distribution from parameters= Poisson(lambda = 2.5) Poisson = Poisson(lambda = 2.5) Estimated poisson= Poisson(lambda = 2.5153) Default poisson= Poisson(lambda = 1) Poisson from parameters= Poisson(lambda = 2.5) openturns-1.9/python/test/t_PoissonFactory_std.py000077500000000000000000000022011307543307100224520ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Poisson(2.5) size = 10000 sample = distribution.getSample(size) factory = PoissonFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedPoisson = factory.buildAsPoisson(sample) print("Poisson =", distribution) print("Estimated poisson=", estimatedPoisson) estimatedPoisson = factory.buildAsPoisson() print("Default poisson=", estimatedPoisson) estimatedPoisson = factory.buildAsPoisson( distribution.getParameter()) print("Poisson from parameters=", estimatedPoisson) except: import sys print("t_PoissonFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Poisson_std.expout000066400000000000000000000043351307543307100220250ustar00rootroot00000000000000Distribution class=Poisson name=Poisson dimension=1 lambda=10 Distribution Poisson(lambda = 10) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[14] oneSample first= class=Point name=Unnamed dimension=1 values=[10] last= class=Point name=Unnamed dimension=1 values=[10] mean= class=Point name=Unnamed dimension=1 values=[9.9873] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.93333] Point= class=Point name=Unnamed dimension=1 values=[12] log pdf=-2.356193 pdf =0.094780 pdf (FD)=0.094780 cdf=0.791556 ccdf=0.208444 pdf gradient = class=Point name=Unnamed dimension=1 values=[0.0189561] pdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[0.0189561] cdf gradient = class=Point name=Unnamed dimension=1 values=[-0.0947803] cdf gradient (FD)= class=Point name=Unnamed dimension=1 values=[-0.0947803] quantile= class=Point name=Unnamed dimension=1 values=[15] cdf(quantile)=0.951260 mean= class=Point name=Unnamed dimension=1 values=[10] standard deviation= class=Point name=Unnamed dimension=1 values=[3.16228] skewness= class=Point name=Unnamed dimension=1 values=[0.316228] kurtosis= class=Point name=Unnamed dimension=1 values=[3.1] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10] parameters= [class=PointWithDescription name=X0 dimension=1 description=[lambda] values=[10]] standard moment n= 0 value= [1] standard moment n= 1 value= [10] standard moment n= 2 value= [110] standard moment n= 3 value= [1310] standard moment n= 4 value= [16710] standard moment n= 5 value= [226510] Standard representative= Poisson(lambda = 10) probabilities= [4.53999e-05,0.000453999,0.00227,0.00756665,0.0189166,0.0378333,0.0630555,0.0900792,0.112599,0.12511,0.12511,0.113736,0.0947803,0.0729079,0.0520771,0.0347181,0.0216988,0.012764,0.00709111,0.00373216,0.00186608,0.00088861,0.000403914,0.000175615,7.31728e-05,2.92691e-05,1.12573e-05,4.16939e-06,1.48907e-06,5.13472e-07,1.71157e-07,5.5212e-08,1.72537e-08,5.22841e-09,1.53777e-09,4.39362e-10,1.22045e-10,3.29851e-11,8.6803e-12,2.22572e-12,5.56429e-13,1.35715e-13,3.2313e-14]#43 openturns-1.9/python/test/t_Poisson_std.py000077500000000000000000000067031307543307100211350ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Poisson(10.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # Define a point point = Point(distribution.getDimension(), 12.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(1) PDFgrFD[0] = (Poisson(distribution.getLambda() + eps).computePDF(point) - Poisson(distribution.getLambda() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(1) CDFgrFD[0] = (Poisson(distribution.getLambda() + eps).computeCDF(point) - Poisson(distribution.getLambda() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) print("probabilities=", distribution.getProbabilities()) except: import sys print("t_Poisson_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_PolygonArray_std.expout000066400000000000000000000000001307543307100230020ustar00rootroot00000000000000openturns-1.9/python/test/t_PolygonArray_std.py000077500000000000000000000010401307543307100221160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # Generate the data for the polygonArrays to be drawn generator = ot.Normal(2) size = 5 array = [] palette = ot.Drawable.BuildDefaultPalette(size) for i in range(size): vertices = generator.getSample(3) array.append(ot.Polygon(vertices, palette[i], palette[size - i - 1])) graph = ot.Graph('An array of polygons', 'x', 'y', True, '') graph.add(ot.PolygonArray(array)) graph.draw('polygon_array.png') openturns-1.9/python/test/t_Polygon_std.expout000066400000000000000000000000001307543307100220030ustar00rootroot00000000000000openturns-1.9/python/test/t_Polygon_std.py000077500000000000000000000025121307543307100211240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Generate the data for the polygons to be drawn size = 50 cursor = Point(2) data1 = Sample(size, 2) # polygon y = 2x for x in [-25] data2 = Sample(size, 2) # polygon y = x*x for x in [-11] for i in range(size): tmp = 7. * i / size + 2 cursor[0] = tmp cursor[1] = 2 * tmp data1[i] = cursor tmp = 9. * i / size + 1 cursor[0] = tmp cursor[1] = tmp * tmp data2[i] = cursor # Create an empty graph myGraph = Graph("Some polygons", "x1", "x2", True, "topright", 1.0) # Create the first polygon myPolygon1 = Polygon(data1) myPolygon1.setColor("blue") # Then, draw it myGraph.add(myPolygon1) myGraph.draw("Graph_Polygon_a_OT.png") # Check that the correct files have been generated by computing their # checksum # Create the second cloud myPolygon2 = Polygon(data2) myPolygon2.setColor("red") # Add it to the graph and draw everything myGraph.add(myPolygon2) for i in range(4): myGraph.setLogScale(i) myGraph.draw("Graph_Polygon_b_OT_" + str(i) + ".png") except: import sys print("t_Polygon_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_PostAnalyticalControlledImportanceSampling_std.expout000066400000000000000000000043011307543307100310560ustar00rootroot00000000000000FORM probability= 0.15642741986 PostAnalyticalControlledImportanceSampling= class=PostAnalyticalControlledImportanceSampling derived from class=PostAnalyticalSimulation analyticalResult=class=AnalyticalResult standardSpaceDesignPoint=class=Point name=Standard Space Design Point dimension=4 values=[-0.0310309,0.841941,0.445397,-0.332234] physicalSpaceDesignPoint=class=Point name=Physical Space Design Point dimension=4 values=[49.969,1.84194,10.4454,4.66777] limitStateVariable=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 isStandardPointOriginInFailureSpace=false hasoferReliabilityIndex=1.00925 importanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] classicalImportanceFactors=class=PointWithDescription name=Unnamed dimension=4 description=[,,,] values=[0,0,0,0] hasoferReliabilityIndexSensitivity=[] controlProbability_=0.156427 PostAnalyticalControlledImportanceSampling result= probabilityEstimate=1.109273e-01 varianceEstimate=7.444407e-04 standard deviation=2.73e-02 coefficient of variation=2.46e-01 confidenceLength(0.95)=1.07e-01 outerSampling=250 blockSize=4 openturns-1.9/python/test/t_PostAnalyticalControlledImportanceSampling_std.py000077500000000000000000000037701307543307100301760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3) # We create a FORM algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(400) myAlgo = FORM(myCobyla, myEvent, mean) # Perform the simulation myAlgo.run() # Create a PostAnalyticalControlledImportanceSampling algorithm based on # the previous FORM result formResult = myAlgo.getResult() mySamplingAlgo = PostAnalyticalControlledImportanceSampling(formResult) print("FORM probability= %.11g" % formResult.getEventProbability()) mySamplingAlgo.setMaximumOuterSampling(250) mySamplingAlgo.setBlockSize(4) mySamplingAlgo.setMaximumCoefficientOfVariation(0.1) print("PostAnalyticalControlledImportanceSampling=", mySamplingAlgo) mySamplingAlgo.run() # Stream out the result print("PostAnalyticalControlledImportanceSampling result=", mySamplingAlgo.getResult()) except: import sys print("t_PostAnalyticalControlledImportanceSampling_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_PosteriorDistribution_std.expout000066400000000000000000000102651307543307100247600ustar00rootroot00000000000000conditioning distribution= ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.4123 ] 1 : [ -1.39926 ] 2 : [ -0.157398 ] 3 : [ 2.30822 ] 4 : [ -2.77208 ]) Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.4123 ] 1 : [ -1.39926 ] 2 : [ -0.157398 ] 3 : [ 2.30822 ] 4 : [ -2.77208 ]) range= [0, 1] [1, 2] Mean [0.366308,1.48584] Covariance [[ 0.0677337 0.0116648 ] [ 0.0116648 0.0730088 ]] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= [0.714382,1.75489] Zero point= [0.0, 0.0] pdf= 0.0 cdf= 0.0 Quantile= [0.974679,1.97468] margin= MarginalDistribution(distribution=PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.4123 ] 1 : [ -1.39926 ] 2 : [ -0.157398 ] 3 : [ 2.30822 ] 4 : [ -2.77208 ]), indices=[0]) margin CDF= [0] margin quantile= [0.95] margin realization= [0.373767] margin= MarginalDistribution(distribution=PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Uniform(a = 0, b = 1), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.4123 ] 1 : [ -1.39926 ] 2 : [ -0.157398 ] 3 : [ 2.30822 ] 4 : [ -2.77208 ]), indices=[1]) margin CDF= [0] margin quantile= [1.95] margin realization= [1.78061] conditioning distribution= ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2)) Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.216 ] 1 : [ 1.18973 ] 2 : [ -0.705788 ] 3 : [ 0.391527 ] 4 : [ -3.43509 ]) Distribution PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.216 ] 1 : [ 1.18973 ] 2 : [ -0.705788 ] 3 : [ 0.391527 ] 4 : [ -3.43509 ]) range= [0, 0] [1, 2] Mean [0,1.23679] Covariance [[ 0 0 ] [ 0 0.151918 ]] Elliptical distribution= False Elliptical copula= False Independent copula= False oneRealization= [0,2] Zero point= [0.0, 0.0] pdf= 0.0 cdf= 0.0 Quantile= [0,1.95] margin= MarginalDistribution(distribution=PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.216 ] 1 : [ 1.18973 ] 2 : [ -0.705788 ] 3 : [ 0.391527 ] 4 : [ -3.43509 ]), indices=[0]) margin CDF= [1] margin quantile= [0] margin realization= [0] margin= MarginalDistribution(distribution=PosteriorDistribution(conditional distribution = ConditionalDistribution(X with X|Theta~Normal(Theta), Theta=f(Y), f=[y0,y1]->[y0,y1], Y~ComposedDistribution(Dirac(point = [0]), Uniform(a = 1, b = 2), IndependentCopula(dimension = 2))), observations = [ X0 ] 0 : [ 1.216 ] 1 : [ 1.18973 ] 2 : [ -0.705788 ] 3 : [ 0.391527 ] 4 : [ -3.43509 ]), indices=[1]) margin CDF= [0] margin quantile= [1.95] margin realization= [2] openturns-1.9/python/test/t_PosteriorDistribution_std.py000077500000000000000000000061601307543307100240660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot observationsSize = 5 # Create a collection of distribution conditionedDistribution = ot.Normal() conditioningDistributionCollection = [] # First conditioning distribution: continuous/continuous atoms = [ot.Uniform(0.0, 1.0), ot.Uniform(1.0, 2.0)] conditioningDistributionCollection.append(ot.ComposedDistribution(atoms)) # Second conditioning distribution: discrete/continuous atoms = [ot.Binomial(3, 0.5), ot.Uniform(1.0, 2.0)] # conditioningDistributionCollection.append(ot.ComposedDistribution(atoms)) # Third conditioning distribution: dirac/continuous atoms = [ot.Dirac(0.0), ot.Uniform(1.0, 2.0)] conditioningDistributionCollection.append(ot.ComposedDistribution(atoms)) for conditioning in conditioningDistributionCollection: print("conditioning distribution=", conditioning) observationsDistribution = ot.Distribution(conditionedDistribution) observationsDistribution.setParameter(conditioning.getMean()) observations = observationsDistribution.getSample(observationsSize) distribution = ot.PosteriorDistribution( ot.ConditionalDistribution(conditionedDistribution, conditioning), observations) dim = distribution.getDimension() print("Distribution ", distribution) print("Distribution ", distribution) print("range=", distribution.getRange()) mean = distribution.getMean() print("Mean ", mean) print("Covariance ", distribution.getCovariance()) # Is this distribution an elliptical distribution? print("Elliptical distribution= ", distribution.isElliptical()) # Has this distribution an elliptical copula? print("Elliptical copula= ", distribution.hasEllipticalCopula()) # Has this distribution an independent copula? print("Independent copula= ", distribution.hasIndependentCopula()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling # size = 10 # oneSample = distribution.getSample(size) # print("oneSample=", oneSample) # Test for sampling # size = 10000 # Sample anotherSample = distribution.getSample(size) # print("anotherSample mean=", anotherSample.computeMean()) # print("anotherSample covariance=", anotherSample.computeCovariance()) # Define a point zero = [0.0] * dim # Show PDF and CDF of zero point zeroPDF = distribution.computePDF(zero) zeroCDF = distribution.computeCDF(zero) print("Zero point= ", zero, " pdf=", zeroPDF, " cdf=", zeroCDF) # Get 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile=", quantile) # print("CDF(quantile)=", distribution.computeCDF(quantile)) # Extract the marginals for i in range(dim): margin = distribution.getMarginal(i) print("margin=", margin) # print("margin PDF=", ot.Point(1, margin.computePDF([0.0]))) print("margin CDF=", ot.Point(1, margin.computeCDF([0.0]))) print("margin quantile=", margin.computeQuantile(0.95)) print("margin realization=", margin.getRealization()) openturns-1.9/python/test/t_PosteriorRandomVector_std.expout000066400000000000000000000105751307543307100247100ustar00rootroot00000000000000randomVector= class=PosteriorRandomVector sampler=class=RandomWalkMetropolisHastings name=Unnamed derived from class=MCMC prior=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[25] sigma=class=Point name=Unnamed dimension=1 values=[0.1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[2] conditional=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] model=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] gradientImplementation=class=ParametricGradient evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] hessianImplementation=class=ParametricHessian evaluation=class=ParametricEvaluation function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x0,x1] outputVariablesNames=[y0,y1] formulas=[x0,x1] parameters positions=[] parameters=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] input positions=[0,1] parameters=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=0 data=[[],[],[],[],[],[],[],[],[],[]] observations=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=10 dimension=1 description=[X0] data=[[31.7298],[29.4806],[30.4741],[32.4466],[28.3823],[31.4201],[30.574],[32.7247],[31.9728],[31.9518]] burnIn=1000 thinning=100 proposal=[class=Uniform name=Uniform dimension=1 a=-2 b=2,class=Uniform name=Uniform dimension=1 a=-2 b=2] calibrationStrategy=[class=CalibrationStrategyImplementation name=Unnamed,class=CalibrationStrategyImplementation name=Unnamed] dimension= 2 realization= [25.1464,2] sample= 0 : [ 25.154 2 ] 1 : [ 25.225 2 ] 2 : [ 25.3727 2 ] 3 : [ 24.9898 2 ] 4 : [ 25.154 2 ] 5 : [ 25.2007 2 ] 6 : [ 25.0898 2 ] 7 : [ 25.0216 2 ] 8 : [ 25.0886 2 ] 9 : [ 25.0441 2 ] openturns-1.9/python/test/t_PosteriorRandomVector_std.py000077500000000000000000000034431307543307100240130ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Log::Show(Log::ALL) # observations size = 10 realDist = Normal(31., 1.2) data = realDist.getSample(size) # calibration parameters calibrationColl = [CalibrationStrategy()] * 2 # proposal distribution proposalColl = DistributionCollection() mean_proposal = Uniform(-2.0, 2.0) std_proposal = Uniform(-2.0, 2.0) proposalColl.add(mean_proposal) proposalColl.add(std_proposal) # prior distribution mu0 = 25. sigma0 = 0.1 mean_prior = Normal(mu0, sigma0) std_prior = Dirac(2.0) # standard dev is known priorColl = DistributionCollection() priorColl.add(mean_prior) priorColl.add(std_prior) prior = ComposedDistribution(priorColl) # choose the initial state within the prior initialState = prior.getRealization() # conditional distribution conditional = Normal() # create a metropolis-hastings sampler sampler = RandomWalkMetropolisHastings( prior, conditional, data, initialState, proposalColl) sampler.setVerbose(True) sampler.setThinning(100) sampler.setBurnIn(1000) sampler.setCalibrationStrategyPerComponent(calibrationColl) # create a PosteriorRandomVector randomVector = PosteriorRandomVector(sampler) print("randomVector=", randomVector) # get the dimension dimension = randomVector.getDimension() print("dimension=", dimension) # get a realization realization = randomVector.getRealization() print("realization=", realization) # get a sample sample = randomVector.getSample(10) print("sample=", sample) except: import sys import traceback traceback.print_exc(file=sys.stdout) openturns-1.9/python/test/t_ProcessSample_std.expout000066400000000000000000000021731307543307100231510ustar00rootroot00000000000000Default constructor psample0= [] Constructor based on size, dimension and timeGrid psample1= [field 0: [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 0 ] 2 : [ 0.4 0 ] 3 : [ 0.6 0 ] 4 : [ 0.8 0 ] 5 : [ 1 0 ] field 1: [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 0 ] 2 : [ 0.4 0 ] 3 : [ 0.6 0 ] 4 : [ 0.8 0 ] 5 : [ 1 0 ] field 2: [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 0 ] 2 : [ 0.4 0 ] 3 : [ 0.6 0 ] 4 : [ 0.8 0 ] 5 : [ 1 0 ] field 3: [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 0 ] 2 : [ 0.4 0 ] 3 : [ 0.6 0 ] 4 : [ 0.8 0 ] 5 : [ 1 0 ]] changing psample1[0] with [] psample1[0]= [ t v0 ] 0 : [ 0 1 ] 1 : [ 0.2 2 ] 2 : [ 0.4 3 ] 3 : [ 0.6 4 ] 4 : [ 0.8 5 ] 5 : [ 1 6 ] Constructor based on size / timeSeries psample2= [field 0: [ t v0 ] 0 : [ 0 1 ] 1 : [ 0.2 2 ] 2 : [ 0.4 3 ] 3 : [ 0.6 4 ] 4 : [ 0.8 5 ] 5 : [ 1 6 ] field 1: [ t v0 ] 0 : [ 0 1 ] 1 : [ 0.2 2 ] 2 : [ 0.4 3 ] 3 : [ 0.6 4 ] 4 : [ 0.8 5 ] 5 : [ 1 6 ] field 2: [ t v0 ] 0 : [ 0 1 ] 1 : [ 0.2 2 ] 2 : [ 0.4 3 ] 3 : [ 0.6 4 ] 4 : [ 0.8 5 ] 5 : [ 1 6 ]] openturns-1.9/python/test/t_ProcessSample_std.py000077500000000000000000000040101307543307100222500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # size of timeGrid size = 6 dimension = 1 sample = Sample(size, dimension) for i in range(size): for j in range(dimension): sample[i, j] = i + j + 1 # TimeGrid timeGrid = RegularGrid(0.0, 1.0 / (size - 1), size) # TimeSeries timeSeries = TimeSeries(timeGrid, sample) # We create an empty ProcessSample with default constructor psample0 = ProcessSample() psample0.setName("PSample0") print("Default constructor") print("psample0=", psample0) # We create an empty ProcessSample with timeGrid, size and dimension # arguments psample1 = ProcessSample(timeGrid, 4, dimension) psample1.setName("PSample1") print("Constructor based on size, dimension and timeGrid") print("psample1=", psample1) # change the first component using operator [] psample1[0] = timeSeries print("changing psample1[0] with []") print("psample1[0]=", (psample1[0])) # We create a ProcessSample with size and timeSeries arguments psample2 = ProcessSample(3, timeSeries) psample2.setName("PSample2") print("Constructor based on size / timeSeries") print("psample2=", psample2) # TimeSeriesCollection # collection = TimeSeriesCollection() # collection.add(timeSeries) # sample *= [0.1] # newtimeSeries = TimeSeries(timeGrid, sample) # collection.add(newtimeSeries) # We create a ProcessSample with collection arguments arguments # psample3 = ProcessSample(collection) # psample3.setName("PSample3") # print "Constructor based on collection " # print "psample3=", psample3 # ts = psample3[1] # print "last element of psample3=", (ts) # print "psample3 mean=", psample3.computeMean() # print "psample3 temporal mean=", psample3.computeTemporalMean() except: import sys print("t_ProcessSample_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_QuadraticEvaluation_std.expout000066400000000000000000000011401307543307100243270ustar00rootroot00000000000000myFunction= class=QuadraticEvaluation name=quadraticFunction center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] quadraticFunction ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[2651.25,-2485.75] openturns-1.9/python/test/t_QuadraticEvaluation_std.py000077500000000000000000000025441307543307100234470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot inputDimension = 3 outputDimension = 2 # Center center = ot.Point(inputDimension) center[0] = -1 center[1] = 0.5 center[2] = 1 # Constant term constant = ot.Point(outputDimension) constant[0] = -1.0 constant[1] = 2.0 # Linear term linear = ot.Matrix(inputDimension, outputDimension) linear[0, 0] = 1.0 linear[1, 0] = 2.0 linear[2, 0] = 3.0 linear[0, 1] = 4.0 linear[1, 1] = 5.0 linear[2, 1] = 6.0 # Quadratic term quadratic = ot.SymmetricTensor(inputDimension, outputDimension) quadratic[0, 0, 0] = 7.0 quadratic[0, 0, 1] = -7.0 quadratic[0, 1, 0] = 8.0 quadratic[0, 1, 1] = -8.0 quadratic[0, 2, 0] = 9.0 quadratic[0, 2, 1] = -9.0 quadratic[1, 0, 0] = 8.0 quadratic[1, 0, 1] = -8.0 quadratic[1, 1, 0] = 10.0 quadratic[1, 1, 1] = -10.0 quadratic[1, 2, 0] = 11.0 quadratic[1, 2, 1] = -11.0 quadratic[2, 0, 0] = 9.0 quadratic[2, 0, 1] = -9.0 quadratic[2, 1, 0] = 11.0 quadratic[2, 1, 1] = -11.0 quadratic[2, 2, 0] = 12.0 quadratic[2, 2, 1] = -12.0 myFunction = ot.QuadraticEvaluation( center, constant, linear, quadratic) myFunction.setName('quadraticFunction') inPoint = ot.Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outPoint = myFunction(inPoint) print('myFunction=', repr(myFunction)) print(myFunction.getName(), '( ', repr(inPoint), ' ) = ', repr(outPoint)) openturns-1.9/python/test/t_QuadraticFunction_std.expout000066400000000000000000000034131307543307100240120ustar00rootroot00000000000000myFunction= class=QuadraticFunction name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Point name=Unnamed dimension=2 values=[-1,2] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=3 values=[-1,0.5,1] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[1,2,3,4,5,6] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] Unnamed ( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Point name=Unnamed dimension=2 values=[2651.25,-2485.75] Unnamed .gradient( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=2 values=[189,229,253.5,-184,-222,-244.5] Unnamed .hessian( class=Point name=Unnamed dimension=3 values=[7,8,9] ) = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=3 columns=3 sheets=2 values=[7,8,9,0,10,11,0,0,12,-7,-8,-9,0,-10,-11,0,0,-12] openturns-1.9/python/test/t_QuadraticFunction_std.py000077500000000000000000000031001307543307100231120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot inputDimension = 3 outputDimension = 2 # Center center = ot.Point(inputDimension) center[0] = -1.0 center[1] = 0.5 center[2] = 1.0 # Constant term constant = ot.Point(outputDimension) constant[0] = -1.0 constant[1] = 2.0 # Linear term linear = ot.Matrix(inputDimension, outputDimension) linear[0, 0] = 1.0 linear[1, 0] = 2.0 linear[2, 0] = 3.0 linear[0, 1] = 4.0 linear[1, 1] = 5.0 linear[2, 1] = 6.0 # Quadratic term quadratic = ot.SymmetricTensor(inputDimension, outputDimension) quadratic[0, 0, 0] = 7.0 quadratic[0, 0, 1] = -7.0 quadratic[0, 1, 0] = 8.0 quadratic[0, 1, 1] = -8.0 quadratic[0, 2, 0] = 9.0 quadratic[0, 2, 1] = -9.0 quadratic[1, 0, 0] = 8.0 quadratic[1, 0, 1] = -8.0 quadratic[1, 1, 0] = 10.0 quadratic[1, 1, 1] = -10.0 quadratic[1, 2, 0] = 11.0 quadratic[1, 2, 1] = -11.0 quadratic[2, 0, 0] = 9.0 quadratic[2, 0, 1] = -9.0 quadratic[2, 1, 0] = 11.0 quadratic[2, 1, 1] = -11.0 quadratic[2, 2, 0] = 12.0 quadratic[2, 2, 1] = -12.0 # myFunction = linear * (X- center) + constant myFunction = ot.QuadraticFunction(center, constant, linear, quadratic) inPoint = ot.Point(inputDimension) inPoint[0] = 7.0 inPoint[1] = 8.0 inPoint[2] = 9.0 outPoint = myFunction(inPoint) print('myFunction=', repr(myFunction)) print(myFunction.getName(), '( ', repr(inPoint), ' ) = ', repr(outPoint)) print(myFunction.getName(), '.gradient( ', repr(inPoint), ' ) = ', repr(myFunction.gradient(inPoint))) print(myFunction.getName(), '.hessian( ', repr(inPoint), ' ) = ', repr(myFunction.hessian(inPoint))) openturns-1.9/python/test/t_QuadraticLeastSquares_std.expout000066400000000000000000000230011307543307100246340ustar00rootroot00000000000000myLeastSquares= class=QuadraticLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-1,-1],[-1,1],[1,-1],[1,1],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[f1,f2,f3] data=[[0.239713,0.540302,0.909796],[0.841471,-0.416147,0],[-0.841471,1,0.0995741],[-0.841471,1,0],[0.841471,-0.416147,0.735759],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] myFunc( class=Point name=Unnamed dimension=2 values=[0.2,0.2] )= class=Point name=Unnamed dimension=3 values=[0.0397339,0.921061,0.982477] responseSurface( class=Point name=Unnamed dimension=2 values=[0.2,0.2] )= class=Point name=Unnamed dimension=3 values=[0.0412683,0.862032,1.29442] myLeastSquares= class=QuadraticLeastSquares name=Unnamed dataIn=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=2 data=[[0.5,0.5],[-1,-1],[-1,1],[1,-1],[1,1],[-0.5,-0.5],[-0.5,0.5],[0.5,-0.5],[0.5,0.5]] dataOut=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=9 dimension=3 description=[f1,f2,f3] data=[[0.239713,0.540302,0.909796],[0.841471,-0.416147,0],[-0.841471,1,0.0995741],[-0.841471,1,0],[0.841471,-0.416147,0.735759],[0.239713,0.540302,0.824361],[-0.239713,1,0.334695],[-0.239713,1,2.24084],[0.239713,0.540302,0.909796]] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0,y1,y2] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Point name=Unnamed dimension=3 values=[0.00674598,0.917414,1.28186] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[0,0] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.00202379,0.00202379,-0.00364348,-0.00364348,0.300868,-0.0405321] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[-0.00674598,0.849566,0,-0.00674598,-0.625488,-0.722647,0,-0.625488,-1.07303,0.0851813,0,-1.07303] myFunc( class=Point name=Unnamed dimension=2 values=[0.2,0.2] )= class=Point name=Unnamed dimension=3 values=[0.0397339,0.921061,0.982477] responseSurface( class=Point name=Unnamed dimension=2 values=[0.2,0.2] )= class=Point name=Unnamed dimension=3 values=[0.0412683,0.862032,1.29442] openturns-1.9/python/test/t_QuadraticLeastSquares_std.py000077500000000000000000000030451307543307100237510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) data = ot.Sample(9, myFunc.getInputDimension()) point = ot.Point(myFunc.getInputDimension()) point[0] = 0.5 point[1] = 0.5 data[0] = point point[0] = -1 point[1] = -1 data[1] = point point[0] = -1 point[1] = 1 data[2] = point point[0] = 1 point[1] = -1 data[3] = point point[0] = 1 point[1] = 1 data[4] = point point[0] = -0.5 point[1] = -0.5 data[5] = point point[0] = -0.5 point[1] = 0.5 data[6] = point point[0] = 0.5 point[1] = -0.5 data[7] = point point[0] = 0.5 point[1] = 0.5 data[8] = point myLeastSquares = ot.QuadraticLeastSquares(data, myFunc) myLeastSquares.run() responseSurface = myLeastSquares.getResponseSurface() print("myLeastSquares=", repr(myLeastSquares)) print("responseSurface=", repr(responseSurface)) inPoint = ot.Point(myFunc.getInputDimension(), 0.2) print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) dataOut = myFunc(data) myLeastSquares = ot.QuadraticLeastSquares(data, dataOut) myLeastSquares.run() responseSurface = myLeastSquares.getResponseSurface() print("myLeastSquares=", repr(myLeastSquares)) print("responseSurface=", repr(responseSurface)) inPoint = ot.Point(myFunc.getInputDimension(), 0.2) print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) openturns-1.9/python/test/t_QuadraticTaylor_std.expout000066400000000000000000000111531307543307100234770ustar00rootroot00000000000000myTaylor= class=QuadraticTaylor name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[f1,f2,f3] formulas=[x1*sin(x2),cos(x1+x2),(x2+1)*exp(x1-2*x2)] responseSurface=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] responseSurface= class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,f1,f2,f3] evaluationImplementation=class=QuadraticEvaluation name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] linear=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] quadratic=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] gradientImplementation=class=LinearGradient name=Unnamed center=class=Point name=Unnamed dimension=2 values=[1,2] constant=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0.909297,-0.416147,-0.14112,-0.14112,0.149361,-0.248935] linear=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] hessianImplementation=class=ConstantHessian name=Unnamed constant=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[0,-0.416147,0,-0.909297,0.989992,0.989992,0,0.989992,0.149361,-0.248935,0,0.398297] myFunc( class=Point name=Unnamed dimension=2 values=[1,2] )= class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] responseSurface( class=Point name=Unnamed dimension=2 values=[1,2] )= class=Point name=Unnamed dimension=3 values=[0.909297,-0.989992,0.149361] myFunc( class=Point name=Unnamed dimension=2 values=[1.4,1.8] )= class=Point name=Unnamed dimension=3 values=[1.36339,-0.998295,0.310249] responseSurface( class=Point name=Unnamed dimension=2 values=[1.4,1.8] )= class=Point name=Unnamed dimension=3 values=[1.37135,-0.998417,0.298722] openturns-1.9/python/test/t_QuadraticTaylor_std.py000077500000000000000000000016031307543307100226050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot eps = 0.4 # Instance creation myFunc = ot.Function(['x1', 'x2'], ['f1', 'f2', 'f3'], [ 'x1*sin(x2)', 'cos(x1+x2)', '(x2+1)*exp(x1-2*x2)']) center = ot.Point(myFunc.getInputDimension()) for i in range(center.getDimension()): center[i] = 1.0 + i myTaylor = ot.QuadraticTaylor(center, myFunc) myTaylor.run() responseSurface = ot.Function(myTaylor.getResponseSurface()) print("myTaylor=", repr(myTaylor)) print("responseSurface=", repr(responseSurface)) print("myFunc(", repr(center), ")=", repr(myFunc(center))) print("responseSurface(", repr(center), ")=", repr(responseSurface(center))) inPoint = ot.Point(center) inPoint[0] += eps inPoint[1] -= eps / 2 print("myFunc(", repr(inPoint), ")=", repr(myFunc(inPoint))) print("responseSurface(", repr(inPoint), ")=", repr(responseSurface(inPoint))) openturns-1.9/python/test/t_QuasiMonteCarlo_std.expout000066400000000000000000000026551307543307100234440ustar00rootroot00000000000000QuasiMonteCarlo= class=QuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 QuasiMonteCarlo result= probabilityEstimate=1.470000e-01 varianceEstimate=1.601410e-04 outerSampling=250 blockSize=4 openturns-1.9/python/test/t_QuasiMonteCarlo_std.py000077500000000000000000000023671307543307100225530ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create a Monte Carlo algorithm myAlgo = QuasiMonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) print("QuasiMonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("QuasiMonteCarlo result=", myAlgo.getResult()) except: import sys print("t_QuasiMonteCarlo_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomGenerator_std.expout000066400000000000000000000427401307543307100234640ustar00rootroot00000000000000initialState= RandomGeneratorState(buffer=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923], index=0) one realization=0.629877 state= RandomGeneratorState(buffer=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923], index=1) new state index= 1 10000 realizations, first=0.882805 , last=0.424722 restoring initial state, one realization=0.629877 mean of 100000 realizations= 0.500415528375 frequency in slice [ 0.0 , 0.1 ]= 0.10026 frequency in slice [ 0.1 , 0.2 ]= 0.09958 frequency in slice [ 0.2 , 0.3 ]= 0.10013 frequency in slice [ 0.3 , 0.4 ]= 0.09987 frequency in slice [ 0.4 , 0.5 ]= 0.10077 frequency in slice [ 0.5 , 0.6 ]= 0.09876 frequency in slice [ 0.6 , 0.7 ]= 0.09938 frequency in slice [ 0.7 , 0.8 ]= 0.09963 frequency in slice [ 0.8 , 0.9 ]= 0.09991 frequency in slice [ 0.9 , 1.0 ]= 0.10171 One integer generation in [[0, 9 ]]= 3 Another integer generation in [[0, 9 ]]= 9 mean of 100000 integer realizations= 4.49773 frequency for value 0 = 0.10274 frequency for value 1 = 0.09951 frequency for value 2 = 0.09856 frequency for value 3 = 0.09951 frequency for value 4 = 0.09961 frequency for value 5 = 0.09898 frequency for value 6 = 0.10056 frequency for value 7 = 0.10003 frequency for value 8 = 0.09884 frequency for value 9 = 0.10166 openturns-1.9/python/test/t_RandomGenerator_std.py000077500000000000000000000045771307543307100226010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Test the initialization method RandomGenerator.SetSeed(0) # Test the state accessor for reading initialState = RandomGenerator.GetState() print("initialState=", repr(initialState)) # Test the generation of one realization realization = RandomGenerator.Generate() print("one realization=%.6f" % realization) state = RandomGenerator.GetState() print("state=", repr(state)) print("new state index=", state.getIndex()) # Test the generation of several realizations size = 10000 several = RandomGenerator.Generate(size) print(size, " realizations, first=%.6f" % several[0], ", last=%.6f" % several[size - 1]) # Test the state accessor for writing RandomGenerator.SetState(initialState) print("restoring initial state, one realization=%.6f" % RandomGenerator.Generate()) # Test the uniformity of the random generator size = 100000 manyPoints = RandomGenerator.Generate(size) slice = 10 frequencies = Point(slice, 0.0) mean = 0.0 for i in range(size): frequencies[int(slice * manyPoints[i])] = frequencies[ int(slice * manyPoints[i])] + 1 mean = mean + manyPoints[i] mean = mean / size print("mean of", size, "realizations= %.12f" % mean) for i in range(slice): frequencies[i] = frequencies[i] / size print("frequency in slice [", ( 1.0 * i) / slice, ",", (i + 1.0) / slice, "]=", frequencies[i]) print("One integer generation in [[0, ", slice - 1, "]]=", RandomGenerator.IntegerGenerate(slice)) print("Another integer generation in [[0, ", slice - 1, "]]=", RandomGenerator.IntegerGenerate(slice)) manyUnsignedInteger = RandomGenerator.IntegerGenerate(size, slice) frequencies = Point(slice, 0.0) mean = 0.0 for i in range(size): frequencies[manyUnsignedInteger[i]] = frequencies[ manyUnsignedInteger[i]] + 1 mean = mean + manyUnsignedInteger[i] mean = mean / size print("mean of ", size, " integer realizations=", mean) for i in range(slice): frequencies[i] = frequencies[i] / size print("frequency for value ", i, "=", frequencies[i]) except: import sys print("t_RandomGenerator.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomMixture_grid1d.expout000066400000000000000000000144151307543307100235510ustar00rootroot00000000000000distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Gamma name=Gamma dimension=1 k=3 lambda=1 gamma=0] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] constant=class=Point name=Unnamed dimension=1 values=[0] range = [0, (38.9173) +inf[ mean = [3] cov = [[ 3 ]] sigma = [1.73205] xMin = [-3.755] xMax = [9.755] x;PDF;reference -3.755;0;0 -3.70202;0;0 -3.64904;0;0 -3.59606;0;0 -3.54308;0;0 -3.4901;0;0 -3.43712;0;0 -3.38414;0;0 -3.33116;0;0 -3.27817;0;0 -3.22519;0;0 -3.17221;0;0 -3.11923;0;0 -3.06625;0;0 -3.01327;0;0 -2.96029;0;0 -2.90731;0;0 -2.85433;0;0 -2.80135;0;0 -2.74837;0;0 -2.69539;0;0 -2.64241;0;0 -2.58943;0;0 -2.53645;0;0 -2.48347;0;0 -2.43049;0;0 -2.37751;0;0 -2.32453;0;0 -2.27155;0;0 -2.21857;0;0 -2.16559;0;0 -2.11261;0;0 -2.05963;0;0 -2.00665;0;0 -1.95367;0;0 -1.90068;0;0 -1.8477;0;0 -1.79472;0;0 -1.74174;0;0 -1.68876;0;0 -1.63578;0;0 -1.5828;0;0 -1.52982;0;0 -1.47684;0;0 -1.42386;0;0 -1.37088;0;0 -1.3179;0;0 -1.26492;0;0 -1.21194;0;0 -1.15896;0;0 -1.10598;0;0 -1.053;0;0 -1.00002;0;0 -0.947038;0;0 -0.894058;0;0 -0.841077;0;0 -0.788097;0;0 -0.735117;0;0 -0.682136;0;0 -0.629156;0;0 -0.576175;0;0 -0.523195;0;0 -0.470215;0;0 -0.417234;0;0 -0.364254;0;0 -0.311274;0;0 -0.258293;0;0 -0.205313;0;0 -0.152332;0;0 -0.0993521;0;0 -0.0463717;0;0 0.00660866;2.16934e-05;2.16934e-05 0.059589;0.00167272;0.00167272 0.112569;0.00566138;0.00566138 0.16555;0.0116126;0.0116126 0.21853;0.0191905;0.0191905 0.271511;0.0280949;0.0280949 0.324491;0.0380584;0.0380584 0.377471;0.0488432;0.0488432 0.430452;0.0602388;0.0602388 0.483432;0.0720591;0.0720591 0.536412;0.0841408;0.0841408 0.589393;0.0963407;0.0963407 0.642373;0.108534;0.108534 0.695354;0.120613;0.120613 0.748334;0.132484;0.132484 0.801314;0.144069;0.144069 0.854295;0.155299;0.155299 0.907275;0.166121;0.166121 0.960255;0.176486;0.176486 1.01324;0.186358;0.186358 1.06622;0.195708;0.195708 1.1192;0.204513;0.204513 1.17218;0.212758;0.212758 1.22516;0.220432;0.220432 1.27814;0.227529;0.227529 1.33112;0.234049;0.234049 1.3841;0.239992;0.239992 1.43708;0.245367;0.245367 1.49006;0.25018;0.25018 1.54304;0.254443;0.254443 1.59602;0.258169;0.258169 1.649;0.261372;0.261372 1.70198;0.26407;0.26407 1.75496;0.266278;0.266278 1.80794;0.268015;0.268015 1.86092;0.269301;0.269301 1.9139;0.270155;0.270155 1.96688;0.270596;0.270596 2.01986;0.270644;0.270644 2.07284;0.27032;0.27032 2.12582;0.269644;0.269644 2.1788;0.268636;0.268636 2.23178;0.267315;0.267315 2.28476;0.2657;0.2657 2.33775;0.263812;0.263812 2.39073;0.261668;0.261668 2.44371;0.259286;0.259286 2.49669;0.256685;0.256685 2.54967;0.253881;0.253881 2.60265;0.250891;0.250891 2.65563;0.247731;0.247731 2.70861;0.244416;0.244416 2.76159;0.24096;0.24096 2.81457;0.237379;0.237379 2.86755;0.233685;0.233685 2.92053;0.229892;0.229892 2.97351;0.226011;0.226011 3.02649;0.222055;0.222055 3.07947;0.218034;0.218034 3.13245;0.21396;0.21396 3.18543;0.209841;0.209841 3.23841;0.205688;0.205688 3.29139;0.20151;0.20151 3.34437;0.197313;0.197313 3.39735;0.193108;0.193108 3.45033;0.1889;0.1889 3.50331;0.184696;0.184696 3.55629;0.180504;0.180504 3.60927;0.176328;0.176328 3.66225;0.172175;0.172175 3.71524;0.168049;0.168049 3.76822;0.163956;0.163956 3.8212;0.159898;0.159898 3.87418;0.155882;0.155882 3.92716;0.151909;0.151909 3.98014;0.147984;0.147984 4.03312;0.144109;0.144109 4.0861;0.140287;0.140287 4.13908;0.136521;0.136521 4.19206;0.132812;0.132812 4.24504;0.129162;0.129162 4.29802;0.125574;0.125574 4.351;0.122049;0.122049 4.40398;0.118587;0.118587 4.45696;0.11519;0.11519 4.50994;0.111859;0.111859 4.56292;0.108594;0.108594 4.6159;0.105396;0.105396 4.66888;0.102265;0.102265 4.72186;0.0992014;0.0992014 4.77484;0.0962056;0.0962056 4.82782;0.0932773;0.0932773 4.8808;0.0904163;0.0904163 4.93378;0.0876224;0.0876224 4.98676;0.0848953;0.0848953 5.03974;0.0822345;0.0822345 5.09272;0.0796394;0.0796394 5.14571;0.0771096;0.0771096 5.19869;0.0746443;0.0746443 5.25167;0.0722428;0.0722428 5.30465;0.0699044;0.0699044 5.35763;0.0676281;0.0676281 5.41061;0.0654132;0.0654132 5.46359;0.0632586;0.0632586 5.51657;0.0611636;0.0611636 5.56955;0.059127;0.059127 5.62253;0.0571479;0.0571479 5.67551;0.0552252;0.0552252 5.72849;0.0533579;0.0533579 5.78147;0.0515449;0.0515449 5.83445;0.0497852;0.0497852 5.88743;0.0480776;0.0480776 5.94041;0.0464211;0.0464211 5.99339;0.0448145;0.0448145 6.04637;0.0432567;0.0432567 6.09935;0.0417467;0.0417467 6.15233;0.0402833;0.0402833 6.20531;0.0388655;0.0388655 6.25829;0.0374921;0.0374921 6.31127;0.036162;0.036162 6.36425;0.0348742;0.0348742 6.41723;0.0336276;0.0336276 6.47021;0.0324212;0.0324212 6.5232;0.0312538;0.0312538 6.57618;0.0301245;0.0301245 6.62916;0.0290322;0.0290322 6.68214;0.027976;0.027976 6.73512;0.0269548;0.0269548 6.7881;0.0259677;0.0259677 6.84108;0.0250136;0.0250136 6.89406;0.0240918;0.0240918 6.94704;0.0232011;0.0232011 7.00002;0.0223408;0.0223408 7.053;0.0215099;0.0215099 7.10598;0.0207076;0.0207076 7.15896;0.019933;0.019933 7.21194;0.0191853;0.0191853 7.26492;0.0184636;0.0184636 7.3179;0.0177672;0.0177672 7.37088;0.0170953;0.0170953 7.42386;0.016447;0.016447 7.47684;0.0158218;0.0158218 7.52982;0.0152188;0.0152188 7.5828;0.0146373;0.0146373 7.63578;0.0140766;0.0140766 7.68876;0.0135362;0.0135362 7.74174;0.0130152;0.0130152 7.79472;0.0125131;0.0125131 7.8477;0.0120293;0.0120293 7.90068;0.0115631;0.0115631 7.95367;0.011114;0.011114 8.00665;0.0106814;0.0106814 8.05963;0.0102648;0.0102648 8.11261;0.00986349;0.00986349 8.16559;0.0094771;0.0094771 8.21857;0.00910508;0.00910508 8.27155;0.00874694;0.00874694 8.32453;0.00840219;0.00840219 8.37751;0.00807038;0.00807038 8.43049;0.00775105;0.00775105 8.48347;0.00744377;0.00744377 8.53645;0.00714812;0.00714812 8.58943;0.00686367;0.00686367 8.64241;0.00659005;0.00659005 8.69539;0.00632686;0.00632686 8.74837;0.00607373;0.00607373 8.80135;0.00583029;0.00583029 8.85433;0.00559621;0.00559621 8.90731;0.00537114;0.00537114 8.96029;0.00515476;0.00515476 9.01327;0.00494675;0.00494675 9.06625;0.00474681;0.00474681 9.11923;0.00455464;0.00455464 9.17221;0.00436995;0.00436995 9.22519;0.00419247;0.00419247 9.27817;0.00402193;0.00402193 9.33116;0.00385808;0.00385808 9.38414;0.00370067;0.00370067 9.43712;0.00354945;0.00354945 9.4901;0.0034042;0.0034042 9.54308;0.00326469;0.00326469 9.59606;0.0031307;0.0031307 9.64904;0.00300202;0.00300202 9.70202;0.00287847;0.00287847 9.755;0.00275983;0.00275983 openturns-1.9/python/test/t_RandomMixture_grid1d.py000077500000000000000000000030471307543307100226570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) PlatformInfo.SetNumericalPrecision(6) ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000) try: # Defining RandomMixture weights = Point(0) coll = DistributionCollection(0) coll.add(Gamma(0.5, 1.0)) weights.add(1.0) coll.add(Gamma(0.5, 1.0)) weights.add(1.0) coll.add(Gamma(0.5, 1.0)) weights.add(1.0) coll.add(Gamma(0.5, 1.0)) weights.add(1.0) coll.add(Gamma(1.0, 1.0)) weights.add(1.0) distribution = RandomMixture(coll, weights) referenceDistribution = Gamma(3.0, 1.0) # Compute PDF on regular grid N = 256 points = Indices(1, N) mean = distribution.getMean() sigma = distribution.getStandardDeviation() xMin = mean - 3.9 * sigma xMax = mean + 3.9 * sigma grid = Sample() print("distribution = ", repr(distribution)) print("range = ", distribution.getRange()) print("mean = ", distribution.getMean()) print("cov = ", distribution.getCovariance()) print("sigma = ", distribution.getStandardDeviation()) print("xMin = ", xMin) print("xMax = ", xMax) result, grid = distribution.computePDF(xMin, xMax, points) print("x;PDF;reference") for i in range(grid.getSize()): ref = referenceDistribution.computePDF(grid[i]) print("%.6g;%.6g;%.6g" % (grid[i][0], result[i][0], ref)) except: import sys print("t_RandomMixture_grid1d.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomMixture_grid2d.expout000066400000000000000000000362641307543307100235600ustar00rootroot00000000000000distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[1,1,-2,1,1,-3] constant=class=Point name=Unnamed dimension=2 values=[0,0] range = [-2, 2] [-3, 2] mean = [0,-0.5] cov = [[ 0.5 -0.333333 ] [ -0.333333 0.916667 ]] sigma = [0.707107,0.957427] xMin = [-2.05061,-3.27654] xMax = [2.05061,2.27654] -1.98874;-3.19276;0 -1.72357;-3.19276;0 -1.45841;-3.19276;0.000146538 -1.19324;-3.19276;0 -0.928078;-3.19276;1.06241e-05 -0.662913;-3.19276;9.41458e-05 -0.397748;-3.19276;0 -0.132583;-3.19276;3.00567e-07 0.132583;-3.19276;0.000108059 0.397748;-3.19276;0 0.662913;-3.19276;0.000108241 0.928078;-3.19276;7.32996e-05 1.19324;-3.19276;0 1.45841;-3.19276;0.000217764 1.72357;-3.19276;0 1.98874;-3.19276;0 -1.98874;-2.83373;0 -1.72357;-2.83373;3.42567e-05 -1.45841;-2.83373;0.000151601 -1.19324;-2.83373;0 -0.928078;-2.83373;0 -0.662913;-2.83373;0.000229642 -0.397748;-2.83373;2.38608e-05 -0.132583;-2.83373;0 0.132583;-2.83373;0.000451838 0.397748;-2.83373;0 0.662913;-2.83373;0.00243717 0.928078;-2.83373;0.0157264 1.19324;-2.83373;0.0003015 1.45841;-2.83373;0.000299886 1.72357;-2.83373;0 1.98874;-2.83373;0 -1.98874;-2.47469;0 -1.72357;-2.47469;0 -1.45841;-2.47469;3.93557e-05 -1.19324;-2.47469;0 -0.928078;-2.47469;0 -0.662913;-2.47469;0.000336767 -0.397748;-2.47469;0 -0.132583;-2.47469;0.000242879 0.132583;-2.47469;0.0112854 0.397748;-2.47469;0.0300339 0.662913;-2.47469;0.0475649 0.928078;-2.47469;0.0500053 1.19324;-2.47469;0.0278951 1.45841;-2.47469;0.00543859 1.72357;-2.47469;0 1.98874;-2.47469;0 -1.98874;-2.11566;0 -1.72357;-2.11566;3.3638e-05 -1.45841;-2.11566;8.59056e-05 -1.19324;-2.11566;0 -0.928078;-2.11566;0 -0.662913;-2.11566;0.00711879 -0.397748;-2.11566;0.0246735 -0.132583;-2.11566;0.0428329 0.132583;-2.11566;0.059896 0.397748;-2.11566;0.0781739 0.662913;-2.11566;0.0957582 0.928078;-2.11566;0.0791185 1.19324;-2.11566;0.0575503 1.45841;-2.11566;0.0353942 1.72357;-2.11566;0.0126813 1.98874;-2.11566;6.89195e-05 -1.98874;-1.75662;0 -1.72357;-1.75662;0 -1.45841;-1.75662;0 -1.19324;-1.75662;0 -0.928078;-1.75662;0.0236811 -0.662913;-1.75662;0.0551255 -0.397748;-1.75662;0.0726184 -0.132583;-1.75662;0.0903174 0.132583;-1.75662;0.107638 0.397748;-1.75662;0.125545 0.662913;-1.75662;0.132658 0.928078;-1.75662;0.109497 1.19324;-1.75662;0.0882011 1.45841;-1.75662;0.0647683 1.72357;-1.75662;0.0304928 1.98874;-1.75662;0 -1.98874;-1.39759;8.63618e-05 -1.72357;-1.39759;0.00014311 -1.45841;-1.39759;0.000195678 -1.19324;-1.39759;0.00251644 -0.928078;-1.39759;0.0412826 -0.662913;-1.39759;0.0801858 -0.397748;-1.39759;0.119099 -0.132583;-1.39759;0.138085 0.132583;-1.39759;0.155676 0.397748;-1.39759;0.174278 0.662913;-1.39759;0.161481 0.928078;-1.39759;0.130803 1.19324;-1.39759;0.0905772 1.45841;-1.39759;0.0504916 1.72357;-1.39759;0.0108231 1.98874;-1.39759;0.000220076 -1.98874;-1.03855;0 -1.72357;-1.03855;1.196e-05 -1.45841;-1.03855;0 -1.19324;-1.03855;0.0186422 -0.928078;-1.03855;0.0590174 -0.662913;-1.03855;0.0982213 -0.397748;-1.03855;0.138449 -0.132583;-1.03855;0.178748 0.132583;-1.03855;0.198861 0.397748;-1.03855;0.193374 0.662913;-1.03855;0.152225 0.928078;-1.03855;0.113235 1.19324;-1.03855;0.0730682 1.45841;-1.03855;0.0334829 1.72357;-1.03855;0 1.98874;-1.03855;0 -1.98874;-0.679518;0 -1.72357;-0.679518;0.000105729 -1.45841;-0.679518;0.000900094 -1.19324;-0.679518;0.0372093 -0.928078;-0.679518;0.0772166 -0.662913;-0.679518;0.116451 -0.397748;-0.679518;0.156759 -0.132583;-0.679518;0.196129 0.132583;-0.679518;0.200527 0.397748;-0.679518;0.174213 0.662913;-0.679518;0.133944 0.928078;-0.679518;0.0947725 1.19324;-0.679518;0.054602 1.45841;-0.679518;0.0145068 1.72357;-0.679518;0.000204619 1.98874;-0.679518;2.30298e-05 -1.98874;-0.320482;2.30298e-05 -1.72357;-0.320482;0.000204619 -1.45841;-0.320482;0.0145068 -1.19324;-0.320482;0.054602 -0.928078;-0.320482;0.0947725 -0.662913;-0.320482;0.133944 -0.397748;-0.320482;0.174213 -0.132583;-0.320482;0.200527 0.132583;-0.320482;0.196129 0.397748;-0.320482;0.156759 0.662913;-0.320482;0.116451 0.928078;-0.320482;0.0772166 1.19324;-0.320482;0.0372093 1.45841;-0.320482;0.000900094 1.72357;-0.320482;0.000105729 1.98874;-0.320482;0 -1.98874;0.0385527;0 -1.72357;0.0385527;0 -1.45841;0.0385527;0.0334829 -1.19324;0.0385527;0.0730682 -0.928078;0.0385527;0.113235 -0.662913;0.0385527;0.152225 -0.397748;0.0385527;0.193374 -0.132583;0.0385527;0.198861 0.132583;0.0385527;0.178748 0.397748;0.0385527;0.138449 0.662913;0.0385527;0.0982213 0.928078;0.0385527;0.0590174 1.19324;0.0385527;0.0186422 1.45841;0.0385527;0 1.72357;0.0385527;1.196e-05 1.98874;0.0385527;0 -1.98874;0.397588;0.000220076 -1.72357;0.397588;0.0108231 -1.45841;0.397588;0.0504916 -1.19324;0.397588;0.0905772 -0.928078;0.397588;0.130803 -0.662913;0.397588;0.161481 -0.397748;0.397588;0.174278 -0.132583;0.397588;0.155676 0.132583;0.397588;0.138085 0.397748;0.397588;0.119099 0.662913;0.397588;0.0801858 0.928078;0.397588;0.0412826 1.19324;0.397588;0.00251644 1.45841;0.397588;0.000195678 1.72357;0.397588;0.00014311 1.98874;0.397588;8.63618e-05 -1.98874;0.756623;0 -1.72357;0.756623;0.0304928 -1.45841;0.756623;0.0647683 -1.19324;0.756623;0.0882011 -0.928078;0.756623;0.109497 -0.662913;0.756623;0.132658 -0.397748;0.756623;0.125545 -0.132583;0.756623;0.107638 0.132583;0.756623;0.0903174 0.397748;0.756623;0.0726184 0.662913;0.756623;0.0551255 0.928078;0.756623;0.0236811 1.19324;0.756623;0 1.45841;0.756623;0 1.72357;0.756623;0 1.98874;0.756623;0 -1.98874;1.11566;6.89195e-05 -1.72357;1.11566;0.0126813 -1.45841;1.11566;0.0353942 -1.19324;1.11566;0.0575503 -0.928078;1.11566;0.0791185 -0.662913;1.11566;0.0957582 -0.397748;1.11566;0.0781739 -0.132583;1.11566;0.059896 0.132583;1.11566;0.0428329 0.397748;1.11566;0.0246735 0.662913;1.11566;0.00711879 0.928078;1.11566;0 1.19324;1.11566;0 1.45841;1.11566;8.59056e-05 1.72357;1.11566;3.3638e-05 1.98874;1.11566;0 -1.98874;1.47469;0 -1.72357;1.47469;0 -1.45841;1.47469;0.00543859 -1.19324;1.47469;0.0278951 -0.928078;1.47469;0.0500053 -0.662913;1.47469;0.0475649 -0.397748;1.47469;0.0300339 -0.132583;1.47469;0.0112854 0.132583;1.47469;0.000242879 0.397748;1.47469;0 0.662913;1.47469;0.000336767 0.928078;1.47469;0 1.19324;1.47469;0 1.45841;1.47469;3.93557e-05 1.72357;1.47469;0 1.98874;1.47469;0 -1.98874;1.83373;0 -1.72357;1.83373;0 -1.45841;1.83373;0.000299886 -1.19324;1.83373;0.0003015 -0.928078;1.83373;0.0157264 -0.662913;1.83373;0.00243717 -0.397748;1.83373;0 -0.132583;1.83373;0.000451838 0.132583;1.83373;0 0.397748;1.83373;2.38608e-05 0.662913;1.83373;0.000229642 0.928078;1.83373;0 1.19324;1.83373;0 1.45841;1.83373;0.000151601 1.72357;1.83373;3.42567e-05 1.98874;1.83373;0 -1.98874;2.19276;0 -1.72357;2.19276;0 -1.45841;2.19276;0.000217764 -1.19324;2.19276;0 -0.928078;2.19276;7.32996e-05 -0.662913;2.19276;0.000108241 -0.397748;2.19276;0 -0.132583;2.19276;0.000108059 0.132583;2.19276;3.00567e-07 0.397748;2.19276;0 0.662913;2.19276;9.41458e-05 0.928078;2.19276;1.06241e-05 1.19324;2.19276;0 1.45841;2.19276;0.000146538 1.72357;2.19276;0 1.98874;2.19276;0 distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[3] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[4] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,2,1,1.4] constant=class=Point name=Unnamed dimension=2 values=[0,0] range = ]-inf (-113.41), (131.41) +inf[ ]-inf (-83.3473), (94.1473) +inf[ mean = [9,5.4] cov = [[ 160 94.4 ] [ 94.4 67.36 ]] sigma = [12.6491,8.20731] x;y;PDF -26.5756;-17.6831;5.84896e-05 -21.8322;-17.6831;6.77066e-05 -17.0888;-17.6831;3.47926e-05 -12.3454;-17.6831;7.93682e-06 -7.60196;-17.6831;8.03728e-07 -2.85854;-17.6831;3.61306e-08 1.88488;-17.6831;7.21014e-10 6.62829;-17.6831;6.38729e-12 11.3717;-17.6831;2.51184e-14 16.1151;-17.6831;4.38501e-17 20.8585;-17.6831;3.39823e-20 25.602;-17.6831;1.16907e-23 30.3454;-17.6831;1.78537e-27 35.0888;-17.6831;1.21037e-31 39.8322;-17.6831;3.64263e-36 44.5756;-17.6831;4.86647e-41 -26.5756;-14.6053;6.77066e-05 -21.8322;-14.6053;0.000164019 -17.0888;-14.6053;0.000176384 -12.3454;-14.6053;8.42033e-05 -7.60196;-14.6053;1.78444e-05 -2.85854;-14.6053;1.67872e-06 1.88488;-14.6053;7.01061e-08 6.62829;-14.6053;1.29969e-09 11.3717;-14.6053;1.06961e-11 16.1151;-14.6053;3.90762e-14 20.8585;-14.6053;6.33731e-17 25.602;-14.6053;4.56247e-20 30.3454;-14.6053;1.45814e-23 35.0888;-14.6053;2.06872e-27 39.8322;-14.6053;1.30289e-31 44.5756;-14.6053;3.64263e-36 -26.5756;-11.5276;3.47926e-05 -21.8322;-11.5276;0.000176384 -17.0888;-11.5276;0.00039695 -12.3454;-11.5276;0.000396565 -7.60196;-11.5276;0.000175872 -2.85854;-11.5276;3.46244e-05 1.88488;-11.5276;3.02602e-06 6.62829;-11.5276;1.17399e-07 11.3717;-11.5276;2.0219e-09 16.1151;-11.5276;1.54582e-11 20.8585;-11.5276;5.24638e-14 25.602;-11.5276;7.90434e-17 30.3454;-11.5276;5.28657e-20 35.0888;-11.5276;1.56959e-23 39.8322;-11.5276;2.06872e-27 44.5756;-11.5276;1.21037e-31 -26.5756;-8.44984;7.93682e-06 -21.8322;-8.44984;8.42033e-05 -17.0888;-8.44984;0.000396565 -12.3454;-8.44984;0.000829094 -7.60196;-8.44984;0.000769477 -2.85854;-8.44984;0.000317023 1.88488;-8.44984;5.79816e-05 6.62829;-8.44984;4.70752e-06 11.3717;-8.44984;1.69667e-07 16.1151;-8.44984;2.7146e-09 20.8585;-8.44984;1.92805e-11 25.602;-8.44984;6.07902e-14 30.3454;-8.44984;8.50849e-17 35.0888;-8.44984;5.28657e-20 39.8322;-8.44984;1.45814e-23 44.5756;-8.44984;1.78537e-27 -26.5756;-5.3721;8.03728e-07 -21.8322;-5.3721;1.78444e-05 -17.0888;-5.3721;0.000175872 -12.3454;-5.3721;0.000769477 -7.60196;-5.3721;0.00149451 -2.85854;-5.3721;0.00128856 1.88488;-5.3721;0.000493188 6.62829;-5.3721;8.37962e-05 11.3717;-5.3721;6.32033e-06 16.1151;-5.3721;2.11621e-07 20.8585;-5.3721;3.14543e-09 25.602;-5.3721;2.07542e-11 30.3454;-5.3721;6.07902e-14 35.0888;-5.3721;7.90434e-17 39.8322;-5.3721;4.56247e-20 44.5756;-5.3721;1.16907e-23 -26.5756;-2.29436;3.61306e-08 -21.8322;-2.29436;1.67872e-06 -17.0888;-2.29436;3.46244e-05 -12.3454;-2.29436;0.000317023 -7.60196;-2.29436;0.00128856 -2.85854;-2.29436;0.00232498 1.88488;-2.29436;0.00186225 6.62829;-2.29436;0.000662155 11.3717;-2.29436;0.000104516 16.1151;-2.29436;7.32341e-06 20.8585;-2.29436;2.27795e-07 25.602;-2.29436;3.14543e-09 30.3454;-2.29436;1.92805e-11 35.0888;-2.29436;5.24638e-14 39.8322;-2.29436;6.33731e-17 44.5756;-2.29436;3.39823e-20 -26.5756;0.783386;7.21014e-10 -21.8322;0.783386;7.01061e-08 -17.0888;0.783386;3.02602e-06 -12.3454;0.783386;5.79816e-05 -7.60196;0.783386;0.000493188 -2.85854;0.783386;0.00186225 1.88488;0.783386;0.00312152 6.62829;0.783386;0.00232273 11.3717;0.783386;0.000767243 16.1151;0.783386;0.000112505 20.8585;0.783386;7.32341e-06 25.602;0.783386;2.11621e-07 30.3454;0.783386;2.7146e-09 35.0888;0.783386;1.54582e-11 39.8322;0.783386;3.90762e-14 44.5756;0.783386;4.38501e-17 -26.5756;3.86113;6.38729e-12 -21.8322;3.86113;1.29969e-09 -17.0888;3.86113;1.17399e-07 -12.3454;3.86113;4.70752e-06 -7.60196;3.86113;8.37962e-05 -2.85854;3.86113;0.000662155 1.88488;3.86113;0.00232273 6.62829;3.86113;0.00361693 11.3717;3.86113;0.00250026 16.1151;3.86113;0.000767243 20.8585;3.86113;0.000104516 25.602;3.86113;6.32033e-06 30.3454;3.86113;1.69667e-07 35.0888;3.86113;2.0219e-09 39.8322;3.86113;1.06961e-11 44.5756;3.86113;2.51184e-14 -26.5756;6.93887;2.51184e-14 -21.8322;6.93887;1.06961e-11 -17.0888;6.93887;2.0219e-09 -12.3454;6.93887;1.69667e-07 -7.60196;6.93887;6.32033e-06 -2.85854;6.93887;0.000104516 1.88488;6.93887;0.000767243 6.62829;6.93887;0.00250026 11.3717;6.93887;0.00361693 16.1151;6.93887;0.00232273 20.8585;6.93887;0.000662155 25.602;6.93887;8.37962e-05 30.3454;6.93887;4.70752e-06 35.0888;6.93887;1.17399e-07 39.8322;6.93887;1.29969e-09 44.5756;6.93887;6.38729e-12 -26.5756;10.0166;4.38501e-17 -21.8322;10.0166;3.90762e-14 -17.0888;10.0166;1.54582e-11 -12.3454;10.0166;2.7146e-09 -7.60196;10.0166;2.11621e-07 -2.85854;10.0166;7.32341e-06 1.88488;10.0166;0.000112505 6.62829;10.0166;0.000767243 11.3717;10.0166;0.00232273 16.1151;10.0166;0.00312152 20.8585;10.0166;0.00186225 25.602;10.0166;0.000493188 30.3454;10.0166;5.79816e-05 35.0888;10.0166;3.02602e-06 39.8322;10.0166;7.01061e-08 44.5756;10.0166;7.21014e-10 -26.5756;13.0944;3.39823e-20 -21.8322;13.0944;6.33731e-17 -17.0888;13.0944;5.24638e-14 -12.3454;13.0944;1.92805e-11 -7.60196;13.0944;3.14543e-09 -2.85854;13.0944;2.27795e-07 1.88488;13.0944;7.32341e-06 6.62829;13.0944;0.000104516 11.3717;13.0944;0.000662155 16.1151;13.0944;0.00186225 20.8585;13.0944;0.00232498 25.602;13.0944;0.00128856 30.3454;13.0944;0.000317023 35.0888;13.0944;3.46244e-05 39.8322;13.0944;1.67872e-06 44.5756;13.0944;3.61306e-08 -26.5756;16.1721;1.16907e-23 -21.8322;16.1721;4.56247e-20 -17.0888;16.1721;7.90434e-17 -12.3454;16.1721;6.07902e-14 -7.60196;16.1721;2.07542e-11 -2.85854;16.1721;3.14543e-09 1.88488;16.1721;2.11621e-07 6.62829;16.1721;6.32033e-06 11.3717;16.1721;8.37962e-05 16.1151;16.1721;0.000493188 20.8585;16.1721;0.00128856 25.602;16.1721;0.00149451 30.3454;16.1721;0.000769477 35.0888;16.1721;0.000175872 39.8322;16.1721;1.78444e-05 44.5756;16.1721;8.03728e-07 -26.5756;19.2498;1.78537e-27 -21.8322;19.2498;1.45814e-23 -17.0888;19.2498;5.28657e-20 -12.3454;19.2498;8.50849e-17 -7.60196;19.2498;6.07902e-14 -2.85854;19.2498;1.92805e-11 1.88488;19.2498;2.7146e-09 6.62829;19.2498;1.69667e-07 11.3717;19.2498;4.70752e-06 16.1151;19.2498;5.79816e-05 20.8585;19.2498;0.000317023 25.602;19.2498;0.000769477 30.3454;19.2498;0.000829094 35.0888;19.2498;0.000396565 39.8322;19.2498;8.42033e-05 44.5756;19.2498;7.93682e-06 -26.5756;22.3276;1.21037e-31 -21.8322;22.3276;2.06872e-27 -17.0888;22.3276;1.56959e-23 -12.3454;22.3276;5.28657e-20 -7.60196;22.3276;7.90434e-17 -2.85854;22.3276;5.24638e-14 1.88488;22.3276;1.54582e-11 6.62829;22.3276;2.0219e-09 11.3717;22.3276;1.17399e-07 16.1151;22.3276;3.02602e-06 20.8585;22.3276;3.46244e-05 25.602;22.3276;0.000175872 30.3454;22.3276;0.000396565 35.0888;22.3276;0.00039695 39.8322;22.3276;0.000176384 44.5756;22.3276;3.47926e-05 -26.5756;25.4053;3.64263e-36 -21.8322;25.4053;1.30289e-31 -17.0888;25.4053;2.06872e-27 -12.3454;25.4053;1.45814e-23 -7.60196;25.4053;4.56247e-20 -2.85854;25.4053;6.33731e-17 1.88488;25.4053;3.90762e-14 6.62829;25.4053;1.06961e-11 11.3717;25.4053;1.29969e-09 16.1151;25.4053;7.01061e-08 20.8585;25.4053;1.67872e-06 25.602;25.4053;1.78444e-05 30.3454;25.4053;8.42033e-05 35.0888;25.4053;0.000176384 39.8322;25.4053;0.000164019 44.5756;25.4053;6.77066e-05 -26.5756;28.4831;4.86647e-41 -21.8322;28.4831;3.64263e-36 -17.0888;28.4831;1.21037e-31 -12.3454;28.4831;1.78537e-27 -7.60196;28.4831;1.16907e-23 -2.85854;28.4831;3.39823e-20 1.88488;28.4831;4.38501e-17 6.62829;28.4831;2.51184e-14 11.3717;28.4831;6.38729e-12 16.1151;28.4831;7.21014e-10 20.8585;28.4831;3.61306e-08 25.602;28.4831;8.03728e-07 30.3454;28.4831;7.93682e-06 35.0888;28.4831;3.47926e-05 39.8322;28.4831;6.77066e-05 44.5756;28.4831;5.84896e-05 openturns-1.9/python/test/t_RandomMixture_grid2d.py000077500000000000000000000043611307543307100226600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) PlatformInfo.SetNumericalPrecision(6) ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000) try: # 2D test using FFT # Collection of distributions coll = DistributionCollection(0) coll.add(Uniform(0, 1)) coll.add(Uniform(0, 1)) coll.add(Uniform(0, 1)) # Set weights weights = Matrix([[1.0, -2.0, 1.0], [1.0, 1.0, -3.0]]) # Build the RandomMixture dist_2D = RandomMixture(coll, weights) # Defining RandomMixture N = 16 points = Indices(2, N) mean = dist_2D.getMean() sigma = dist_2D.getStandardDeviation() xMin = mean - 2.9 * sigma xMax = mean + 2.9 * sigma grid = Sample() print("distribution = ", repr(dist_2D)) print("range = ", dist_2D.getRange()) print("mean = ", dist_2D.getMean()) print("cov = ", dist_2D.getCovariance()) print("sigma = ", dist_2D.getStandardDeviation()) print("xMin = ", xMin) print("xMax = ", xMax) result, grid = dist_2D.computePDF(xMin, xMax, points) for i in range(grid.getSize()): print("%.6g;%.6g;%.6g" % (grid[i][0], grid[i][1], result[i][0])) # Defining new case, involving Normal distributions collection = DistributionCollection(0) collection.add(Normal(2.0, 3.0)) collection.add(Normal(1.0, 4.0)) weights = Matrix([[4.0, 1.0], [2.0, 1.4]]) # Build the RandomMixture distribution2D = RandomMixture(collection, weights) print("distribution = ", repr(distribution2D)) print("range = ", distribution2D.getRange()) print("mean = ", distribution2D.getMean()) print("cov = ", distribution2D.getCovariance()) print("sigma = ", distribution2D.getStandardDeviation()) xMin = distribution2D.getMean() - 2.9 * \ distribution2D.getStandardDeviation() xMax = distribution2D.getMean() + 2.9 * \ distribution2D.getStandardDeviation() result, grid = distribution2D.computePDF(xMin, xMax, points) print("x;y;PDF") for i in range(grid.getSize()): print("%.6g;%.6g;%.6g" % (grid[i][0], grid[i][1], result[i][0])) except: import sys print("t_RandomMixture_grid2d.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomMixture_grid3d.expout000066400000000000000000000144321307543307100235520ustar00rootroot00000000000000distribution= class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=2 b=5,class=Uniform name=Uniform dimension=1 a=2 b=5] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,3,6,2,4,0,4,5,1] constant=class=Point name=Unnamed dimension=3 values=[0,0,0] range = ]-inf (4.34937), (37.6506) +inf[ ]-inf (-4.95188), (67.9519) +inf[ ]-inf (-43.9038), (50.9038) +inf[ mean = [21,31.5,3.5] cov = [[ 16 24 9 ] [ 24 39.75 21.75 ] [ 9 21.75 36.75 ]] sigma = [4,6.30476,6.06218] x;y;z;PDF 12;17.3143;-10.1399;0 18;17.3143;-10.1399;0 24;17.3143;-10.1399;0 30;17.3143;-10.1399;0 12;26.7714;-10.1399;0 18;26.7714;-10.1399;0 24;26.7714;-10.1399;0 30;26.7714;-10.1399;0 12;36.2286;-10.1399;0 18;36.2286;-10.1399;0 24;36.2286;-10.1399;0 30;36.2286;-10.1399;0 12;45.6857;-10.1399;0 18;45.6857;-10.1399;0 24;45.6857;-10.1399;0 30;45.6857;-10.1399;0 12;17.3143;-1.04663;0.0010205 18;17.3143;-1.04663;0 24;17.3143;-1.04663;0 30;17.3143;-1.04663;0 12;26.7714;-1.04663;0 18;26.7714;-1.04663;0.000943767 24;26.7714;-1.04663;0 30;26.7714;-1.04663;0 12;36.2286;-1.04663;0 18;36.2286;-1.04663;0 24;36.2286;-1.04663;0 30;36.2286;-1.04663;0 12;45.6857;-1.04663;0 18;45.6857;-1.04663;0 24;45.6857;-1.04663;0 30;45.6857;-1.04663;0 12;17.3143;8.04663;0 18;17.3143;8.04663;0 24;17.3143;8.04663;0 30;17.3143;8.04663;0 12;26.7714;8.04663;0 18;26.7714;8.04663;0 24;26.7714;8.04663;0 30;26.7714;8.04663;0 12;36.2286;8.04663;0 18;36.2286;8.04663;0 24;36.2286;8.04663;0.000943767 30;36.2286;8.04663;0 12;45.6857;8.04663;0 18;45.6857;8.04663;0 24;45.6857;8.04663;0 30;45.6857;8.04663;0.0010205 12;17.3143;17.1399;0 18;17.3143;17.1399;0 24;17.3143;17.1399;0 30;17.3143;17.1399;0 12;26.7714;17.1399;0 18;26.7714;17.1399;0 24;26.7714;17.1399;0 30;26.7714;17.1399;0 12;36.2286;17.1399;0 18;36.2286;17.1399;0 24;36.2286;17.1399;0 30;36.2286;17.1399;0 12;45.6857;17.1399;0 18;45.6857;17.1399;0 24;45.6857;17.1399;0 30;45.6857;17.1399;0 distribution = class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Mixture name=Mixture dimension=1 distributionCollection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weightsDistribution=class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=1 data=[[0],[1]] probabilities=class=Point name=Unnamed dimension=2 values=[0.5,0.5],class=Uniform name=Uniform dimension=1 a=0 b=1,class=Uniform name=Uniform dimension=1 a=0 b=1] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=4 values=[1,0.5,-0.5,-0.05,1,-0.1,1,-0.05,1.2,-0.5,0.3,-0.8] constant=class=Point name=Unnamed dimension=3 values=[0,0,0] range = [-8.63316, 9.13316] [-13.5259, 13.7759] [-5.59038, 5.99038] mean = [0.25,0.125,0.2] cov = [[ 1.11667 0.233333 -0.341667 ] [ 0.233333 5.25771 -0.775 ] [ -0.341667 -0.775 0.473333 ]] sigma = [1.05672,2.29297,0.687992] xMin = [-2.8145,-6.52461,-1.79518] xMax = [3.3145,6.77461,2.19518] -2.12763;-5.03418;-1.34798;5.16744e-05 -0.542543;-5.03418;-1.34798;0 1.04254;-5.03418;-1.34798;0 2.62763;-5.03418;-1.34798;0 -2.12763;-1.59473;-1.34798;3.04929e-05 -0.542543;-1.59473;-1.34798;0.000197115 1.04254;-1.59473;-1.34798;0.000104477 2.62763;-1.59473;-1.34798;0.000465749 -2.12763;1.84473;-1.34798;0 -0.542543;1.84473;-1.34798;0 1.04254;1.84473;-1.34798;0.00338254 2.62763;1.84473;-1.34798;0.000611914 -2.12763;5.28418;-1.34798;7.88272e-06 -0.542543;5.28418;-1.34798;0.00010546 1.04254;5.28418;-1.34798;0.000601069 2.62763;5.28418;-1.34798;0.000340826 -2.12763;-5.03418;-0.315994;7.55594e-06 -0.542543;-5.03418;-0.315994;0.000860551 1.04254;-5.03418;-0.315994;0.000762193 2.62763;-5.03418;-0.315994;0.000119309 -2.12763;-1.59473;-0.315994;2.65522e-05 -0.542543;-1.59473;-0.315994;0.00993354 1.04254;-1.59473;-0.315994;0.028094 2.62763;-1.59473;-0.315994;0.00430418 -2.12763;1.84473;-0.315994;0.000413983 -0.542543;1.84473;-0.315994;0.0293772 1.04254;1.84473;-0.315994;0.0270409 2.62763;1.84473;-0.315994;0.00194826 -2.12763;5.28418;-0.315994;0 -0.542543;5.28418;-0.315994;0 1.04254;5.28418;-0.315994;0.000107197 2.62763;5.28418;-0.315994;0 -2.12763;-5.03418;0.715994;0 -0.542543;-5.03418;0.715994;0.000107197 1.04254;-5.03418;0.715994;0 2.62763;-5.03418;0.715994;0 -2.12763;-1.59473;0.715994;0.00194826 -0.542543;-1.59473;0.715994;0.0270409 1.04254;-1.59473;0.715994;0.0293772 2.62763;-1.59473;0.715994;0.000413983 -2.12763;1.84473;0.715994;0.00430418 -0.542543;1.84473;0.715994;0.028094 1.04254;1.84473;0.715994;0.00993354 2.62763;1.84473;0.715994;2.65522e-05 -2.12763;5.28418;0.715994;0.000119309 -0.542543;5.28418;0.715994;0.000762193 1.04254;5.28418;0.715994;0.000860551 2.62763;5.28418;0.715994;7.55594e-06 -2.12763;-5.03418;1.74798;0.000340826 -0.542543;-5.03418;1.74798;0.000601069 1.04254;-5.03418;1.74798;0.00010546 2.62763;-5.03418;1.74798;7.88272e-06 -2.12763;-1.59473;1.74798;0.000611914 -0.542543;-1.59473;1.74798;0.00338254 1.04254;-1.59473;1.74798;0 2.62763;-1.59473;1.74798;0 -2.12763;1.84473;1.74798;0.000465749 -0.542543;1.84473;1.74798;0.000104477 1.04254;1.84473;1.74798;0.000197115 2.62763;1.84473;1.74798;3.04929e-05 -2.12763;5.28418;1.74798;0 -0.542543;5.28418;1.74798;0 1.04254;5.28418;1.74798;0 2.62763;5.28418;1.74798;5.16744e-05 openturns-1.9/python/test/t_RandomMixture_grid3d.py000077500000000000000000000046151307543307100226630ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) PlatformInfo.SetNumericalPrecision(6) ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000) try: # 1) Analytical test ==> No FFT coll = DistributionCollection(3) coll[0] = Normal(0.0, 1.0) coll[1] = Uniform(2.0, 5.0) coll[2] = Uniform(2.0, 5.0) weights = Matrix([[1.0, 2.0, 4.0], [3.0, 4.0, 5.0], [6.0, 0.0, 1.0]]) distribution = RandomMixture(coll, weights) print("distribution=", repr(distribution)) print("range = ", distribution.getRange()) print("mean = ", distribution.getMean()) print("cov = ", distribution.getCovariance()) print("sigma = ", distribution.getStandardDeviation()) N = 4 points = Indices(3, N) mean = distribution.getMean() sigma = distribution.getStandardDeviation() xMin = mean - 2.9 * sigma xMax = mean + 2.9 * sigma grid = Sample() result, grid = distribution.computePDF(xMin, xMax, points) print("x;y;z;PDF") for i in range(grid.getSize()): print("%.6g;%.6g;%.6g;%.6g" % (grid[i][0], grid[i][1], grid[i][2], result[i][0])) # 2) 3D test using FFT collection = DistributionCollection(0) mixture = Mixture([Normal(2.0, 1.0), Normal(-2.0, 1.0)]) collection3D = DistributionCollection(0) collection3D.add(Normal(0.0, 1.0)) collection3D.add(mixture) collection3D.add(Uniform(0, 1)) collection3D.add(Uniform(0, 1)) #/ Set weights weights = Matrix( [[1.0, -0.05, 1.0, -0.5], [0.5, 1.0, -0.05, 0.3], [-0.5, -0.1, 1.2, -0.8]]) # Defining RandomMixture dist_3D = RandomMixture(collection3D, weights) mean = dist_3D.getMean() sigma = dist_3D.getStandardDeviation() print("distribution = ", repr(dist_3D)) print("range = ", dist_3D.getRange()) print("mean = ", dist_3D.getMean()) print("cov = ", dist_3D.getCovariance()) print("sigma = ", dist_3D.getStandardDeviation()) xMin = mean - 2.9 * sigma xMax = mean + 2.9 * sigma print("xMin = ", xMin) print("xMax = ", xMax) result, grid = dist_3D.computePDF(xMin, xMax, points) for i in range(grid.getSize()): print("%.6g;%.6g;%.6g;%.6g" % (grid[i][0], grid[i][1], grid[i][2], result[i][0])) except: import sys print("t_RandomMixture_grid3d.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomMixture_simplification.expout000066400000000000000000000051351307543307100254100ustar00rootroot00000000000000d= RandomMixture(Dirac(point = [5.8])) d= RandomMixture(5 + Exponential(lambda = 1, gamma = 0)) d= RandomMixture(11 + 2 * Gumbel(alpha = 1, beta = 0) + 1.5 * Logistic(alpha = 0, beta = 1) + 4.5 * Weibull(alpha = 1, beta = 1, gamma = 0) + 4 * Frechet(alpha = 4, beta = 1, gamma = 0)) d= RandomMixture(2.5 * Logistic(alpha = 0, beta = 1) + Normal(mu = 8.5, sigma = 5)) d= RandomMixture(6.5 + Gamma(k = 3, lambda = 0.5, gamma = 0) + Gamma(k = 8, lambda = 1, gamma = 0) + Exponential(lambda = 2, gamma = 0)) d= RandomMixture(Triangular(a = 0, m = 1, b = 2) + Trapezoidal(a = -1, b = 3, c = 14, d = 18) + Uniform(a = 10, b = 14)) d= RandomMixture(2 + 2 * Binomial(n = 4, p = 0.1) + Binomial(n = 5, p = 0.5) + 1.5 * Bernoulli(p = 0.5) + 4 * Binomial(n = 6, p = 0.5)) d= RandomMixture(2 + Poisson(lambda = 7) + 2 * Poisson(lambda = 12) + 3 * Poisson(lambda = 6)) d= RandomMixture(Logistic(alpha = 0, beta = 1) + Mixture((w = 0.25, d = RandomMixture(Uniform(a = -1, b = 5))), (w = 0.5, d = RandomMixture(Uniform(a = 1, b = 7))), (w = 0.25, d = RandomMixture(Uniform(a = 3, b = 9))))) d= RandomMixture(Mixture((w = 0.25, d = RandomMixture(Uniform(a = -1, b = 5))), (w = 0.5, d = RandomMixture(Uniform(a = 1, b = 7))), (w = 0.25, d = RandomMixture(Uniform(a = 3, b = 9)))) + Bernoulli(p = 0.1)) d= RandomMixture(Mixture((w = 0.9, d = RandomMixture(Logistic(alpha = 0, beta = 1))), (w = 0.1, d = RandomMixture(2 + Logistic(alpha = 0, beta = 1)))) + Mixture((w = 0.25, d = RandomMixture(Uniform(a = -2, b = 6))), (w = 0.5, d = RandomMixture(Uniform(a = 1, b = 9))), (w = 0.25, d = RandomMixture(Uniform(a = 4, b = 12))))) d= RandomMixture(2 + 4 * Geometric(p = 0.5) + 3 * Poisson(lambda = 1) + Binomial(n = 2, p = 0.1) + 2 * Binomial(n = 3, p = 0.5)) d= RandomMixture(2 + 4 * Geometric(p = 0.5) + 3 * Poisson(lambda = 1) + UserDefined({x = [0], p = 0.10125}, {x = [1], p = 0.0225}, {x = [2], p = 0.305}, {x = [3], p = 0.0675}, {x = [4], p = 0.3075}, {x = [5], p = 0.0675}, {x = [6], p = 0.105}, {x = [7], p = 0.0225}, {x = [8], p = 0.00125})) d= RandomMixture(2 + 3 * Poisson(lambda = 1) + UserDefined({x = [0], p = 0.6561}, {x = [1], p = 0.1458}, {x = [2], p = 0.0081}, {x = [4], p = 0.1458}, {x = [5], p = 0.0324}, {x = [6], p = 0.0018}, {x = [8], p = 0.0081}, {x = [9], p = 0.0018}, {x = [10], p = 0.0001}) + 4 * Binomial(n = 3, p = 0.5) + 2 * Binomial(n = 3, p = 0.5)) d= RandomMixture(2 + UserDefined({x = [0], p = 0.3024}, {x = [1], p = 0.0336}, {x = [2], p = 0.0756}, {x = [3], p = 0.138}, {x = [4], p = 0.216}, {x = [5], p = 0.0548}, {x = [6], p = 0.054}, {x = [7], p = 0.092}, {x = [8], p = 0.0096}, {x = [9], p = 0.0216}, {x = [10], p = 0.0024})) openturns-1.9/python/test/t_RandomMixture_simplification.py000077500000000000000000000077761307543307100245340ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import sqrt, pi, exp TESTPREAMBLE() RandomGenerator.SetSeed(0) ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000) TTY.ShowColors(False) try: # Test fusion of Dirac with no other atoms: should be a unique Dirac(5.8) d = RandomMixture([Dirac(1.0), Dirac(2.0), Dirac(3.0)], [0.5, 0.6, 0.7], 2.0) print("d=", d) # Test fusion of Dirac with other atoms: the Dirac should be merged into the constant: 5 + Exponential(lambda=1,gamma=0) d = RandomMixture([Dirac(1.0), Dirac(2.0), Exponential()], 2.0) print("d=", d) # Test flatten RandomMixture atoms: the RandomMixture should have 4 atoms. d = RandomMixture([Gumbel(), RandomMixture([Logistic(), Weibull()], [0.5, 1.5], 3.0), Frechet(4.0)], [2.0, 3.0, 4.0], 2.0) print("d=", d) # Test merge of Normal atoms: d = RandomMixture([Normal(1.0, 8.0), Logistic(), Normal(2.0, 1.0)], [0.5, 2.5, 3.0], 2.0) print("d=", d) # Test merge of Exponential, Gamma and ChiSquare atoms d = RandomMixture([Exponential(1.0, 1.0), Exponential(1.5, -1.0), Exponential(2.0, 1.0), Gamma(4.0, 2.0, -1.0), Gamma(3.0, 1.0, 3.0), ChiSquare(4.0)], [1.0, 1.5, 1.0, 2.0, 2.0, 0.5], 2.0) print("d=", d) # Test merge of Uniform atoms d = RandomMixture([Uniform(0.0, 1.0), Uniform(0.0, 1.0), Uniform(1.0, 3.0), Uniform(-1.0, 4.0), Uniform(2.0, 3.0)], [1.0, 1.0, 2.0, 3.0, 4.0], 2.0) print("d=", d) # Test merge of Bernoulli and Binomial atoms # Deactivate the fusion of discrete atoms ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 0) d = RandomMixture([Bernoulli(0.5), Bernoulli(0.5), Bernoulli(0.1), Binomial(4, 0.5), Binomial(6, 0.5), Binomial(3, 0.1)], [1.0, 1.5, 2.0, 1.0, 4.0, 2.0], 2.0) print("d=", d) # Test merge of Poisson atoms # Deactivate the fusion of discrete atoms ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 0) d = RandomMixture([Poisson(3.0), Poisson(2.0), Poisson(6.0), Poisson(10.0), Poisson(4.0)], [1.0, 2.0, 3.0, 2.0, 1.0], 2.0) print("d=", d) # Test merge of discrete and continuous atoms # Deactivate the fusion of discrete atoms ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 0) # more continuous atoms d = RandomMixture([Logistic(), Binomial(2, 0.5), Uniform()], [1.0, 2.0, 3.0], 2.0) print("d=", d) # more discrete atoms d = RandomMixture([Bernoulli(0.1), Binomial(2, 0.5), Uniform()], [1.0, 2.0, 3.0], 2.0) print("d=", d) # same number of continuous and discrete atoms d = RandomMixture([Logistic(), Bernoulli(0.1), Binomial(2, 0.5), Uniform()], [1.0, 2.0, 3.0, 4.0], 2.0) print("d=", d) # Test the fusion of discrete atoms Log.Show(Log.DBG) print("\n") # All the atoms have a too large support ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 1) d = RandomMixture([Binomial(2, 0.1), Binomial(3, 0.5), Poisson(), Geometric()], [1.0, 2.0, 3.0, 4.0], 2.0) print("d=", d) print("\n") # Some atoms have a too large support, no pending aggregated discrete ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 15) d = RandomMixture([Binomial(2, 0.1), Binomial(3, 0.5), Poisson(), Geometric()], [1.0, 2.0, 3.0, 4.0], 2.0) print("d=", d) print("\n") # Some atoms have a too large support, a pending aggregated discrete ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 15) d = RandomMixture([Binomial(2, 0.1), Binomial(3, 0.5), Poisson(), Binomial(2, 0.1), Binomial(3, 0.5)], [1.0, 2.0, 3.0, 4.0, 5.0], 2.0) print("d=", d) print("\n") # All the atoms can be merged ResourceMap.SetAsUnsignedInteger("RandomMixture-MaximumSupportSize", 100) d = RandomMixture([Bernoulli(0.1), Bernoulli(0.2), Bernoulli(0.3), Bernoulli(0.4)], [1.0, 2.0, 3.0, 4.0], 2.0) print("d=", d) except: import sys print("t_RandomMixture_simplification.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomMixture_std.expout000066400000000000000000000350701307543307100231710ustar00rootroot00000000000000testCases= [[class=Uniform name=Uniform dimension=1 a=-1 b=3,class=Uniform name=Uniform dimension=1 a=-1 b=3], [class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]], [class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0]] references= [Triangular(a = -2, m = 2, b = 6),Normal(mu = -1, sigma = 3),Gamma(k = 3, lambda = 1, gamma = 0)] Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Uniform name=Uniform dimension=1 a=-1 b=3,class=Uniform name=Uniform dimension=1 a=-1 b=3] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=2 values=[1,1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Uniform(a = -1, b = 3) + Uniform(a = -1, b = 3)) Elliptical = True Continuous = True oneRealization= [4.05073] oneSample first= [0.455382] last= [-0.838226] mean= [2.01098] covariance= [[ 2.67867 ]] Point= [0.5] ddf =0.0625 ddf (ref)= [0.0625] pdf =0.156250 pdf (FD)=0.156250 pdf (ref)=0.156250 cdf =0.195313 cdf (ref)=0.195312 characteristic function=0.382574 + 0.595823i log characteristic function=-0.345207 + 1.000000i quantile = [4.73509] quantile (ref)= [4.73509] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.735089] Survival(inverseSurvival)=0.950000 mean = [2] mean (ref)= [2] standard deviation = [1.63299] standard deviation (ref)= [1.63299] skewness = [0] skewness (ref)= [0] kurtosis = [2.4] kurtosis (ref)= [2.4] covariance = [[ 2.66667 ]] covariance (ref)= [[ 2.66667 ]] parameters= [[Uniform_a : -1, Uniform_b : 3, Uniform_a : -1, Uniform_b : 3]] Standard representative= RandomMixture(Uniform(a = -1, b = 3) + Uniform(a = -1, b = 3)) blockMin= 5 blockMax= 20 maxSize= 4000000 alpha= 5.0 beta= 8.5 Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[-2] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1]] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=3 values=[1,1,1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Normal(mu = 0, sigma = 1) + Normal(mu = 1, sigma = 2) + Normal(mu = -2, sigma = 2)) Elliptical = True Continuous = True oneRealization= [2.57239] oneSample first= [-7.73611] last= [0.219605] mean= [-1.00692] covariance= [[ 9.14206 ]] Point= [0.5] ddf =-0.019559 ddf (ref)= [-0.0195592] pdf =0.117355 pdf (FD)=0.117355 pdf (ref)=0.117355 cdf =0.691462 cdf (ref)=0.691462 characteristic function=0.284909 + -0.155647i log characteristic function=-1.125000 + -0.500000i quantile = [3.93456] quantile (ref)= [3.93456] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-5.93456] Survival(inverseSurvival)=0.950000 mean = [-1] mean (ref)= [-1] standard deviation = [3] standard deviation (ref)= [3] skewness = [0] skewness (ref)= [0] kurtosis = [3] kurtosis (ref)= [3] covariance = [[ 9 ]] covariance (ref)= [[ 9 ]] parameters= [[Normal_mean_0 : 0, Normal_standard_deviation_0 : 1, Normal_mean_0 : 1, Normal_standard_deviation_0 : 2, Normal_mean_0 : -2, Normal_standard_deviation_0 : 2]] Standard representative= RandomMixture(Normal(mu = 0, sigma = 1) + Normal(mu = 1, sigma = 2) + Normal(mu = -2, sigma = 2)) blockMin= 5 blockMax= 20 maxSize= 4000000 alpha= 5.0 beta= 8.5 Distribution class=RandomMixture name=RandomMixture distribution collection=[class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0,class=Exponential name=Exponential dimension=1 lambda=1 gamma=0] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=3 values=[1,1,1] constant=class=Point name=Unnamed dimension=1 values=[0] Distribution RandomMixture(Exponential(lambda = 1, gamma = 0) + Exponential(lambda = 1, gamma = 0) + Exponential(lambda = 1, gamma = 0)) Elliptical = False Continuous = True oneRealization= [2.3902] oneSample first= [1.80165] last= [5.94924] mean= [3.00598] covariance= [[ 3.02995 ]] Point= [0.5] ddf =0.22745 ddf (ref)= [0.227449] pdf =0.075816 pdf (FD)=0.075816 pdf (ref)=0.075816 cdf =0.014388 cdf (ref)=0.014388 characteristic function=0.128000 + 0.704000i log characteristic function=-0.334715 + 1.390943i quantile = [6.2957] quantile (ref)= [6.29579] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.817691] Survival(inverseSurvival)=0.950000 mean = [3] mean (ref)= [3] standard deviation = [1.73205] standard deviation (ref)= [1.73205] skewness = [1.1547] skewness (ref)= [1.1547] kurtosis = [5] kurtosis (ref)= [5] covariance = [[ 3 ]] covariance (ref)= [[ 3 ]] parameters= [[Exponential_lambda : 1, Exponential_gamma : 0, Exponential_lambda : 1, Exponential_gamma : 0, Exponential_lambda : 1, Exponential_gamma : 0]] Standard representative= RandomMixture(Exponential(lambda = 1, gamma = 0) + Exponential(lambda = 1, gamma = 0) + Exponential(lambda = 1, gamma = 0)) blockMin= 5 blockMax= 20 maxSize= 4000000 alpha= 5.0 beta= 8.5 distribution= class=RandomMixture name=RandomMixture distribution collection=[class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.5],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-2 b=2,class=Uniform name=Uniform dimension=1 a=2 b=4,class=Exponential name=Exponential dimension=1 lambda=2 gamma=-3,class=Dirac name=Dirac dimension=1 point=class=Point name=Unnamed dimension=1 values=[0.5],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[2] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-2 b=2,class=Uniform name=Uniform dimension=1 a=2 b=4,class=Exponential name=Exponential dimension=1 lambda=2 gamma=-3,class=Gamma name=Gamma dimension=1 k=3 lambda=4 gamma=-2] weights =class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=1 columns=13 values=[1,2,-3,-1,2,1.5,-2.5,-5,7.5,2.5,-5,-3.75,2.5] constant=class=Point name=Unnamed dimension=1 values=[0] distribution= RandomMixture(Dirac(point = [0.5]) + 2 * Normal(mu = 1, sigma = 2) - 3 * Normal(mu = 2, sigma = 1) - Uniform(a = -2, b = 2) + 2 * Uniform(a = 2, b = 4) + 1.5 * Exponential(lambda = 2, gamma = -3) - 2.5 * Dirac(point = [0.5]) - 5 * Normal(mu = 1, sigma = 2) + 7.5 * Normal(mu = 2, sigma = 1) + 2.5 * Uniform(a = -2, b = 2) - 5 * Uniform(a = 2, b = 4) - 3.75 * Exponential(lambda = 2, gamma = -3) + 2.5 * Gamma(k = 3, lambda = 4, gamma = -2)) pdf( -45.042123 )=0.000266 pdf( -35.310540 )=0.001666 pdf( -25.578957 )=0.006605 pdf( -15.847374 )=0.016556 pdf( -6.115791 )=0.026232 pdf( 3.615791 )=0.026262 pdf( 13.347374 )=0.016595 pdf( 23.078957 )=0.006608 pdf( 32.810540 )=0.001654 pdf( 42.542123 )=0.000260 projections= [Normal(mu = -1.24816, sigma = 24.4357),Gamma(k = 9.60684, lambda = 0.126843, gamma = -76.9864),Triangular(a = -76.9864, m = -1.1519, b = 74.3938),Uniform(a = -76.9864, b = 74.3938),Exponential(lambda = 0.0132034, gamma = -76.9864)] norms= [0.125151,0.142711,0.189006,0.294413,0.44751] distribution = RandomMixture( Normal(mu = 0, sigma = 1) - 2 * Normal(mu = 0, sigma = 1) + Normal(mu = 0, sigma = 1) Normal(mu = 0, sigma = 1) + Normal(mu = 0, sigma = 1) - 3 * Normal(mu = 0, sigma = 1) ) range = [-20.8207, 20.8207] [-28.1913, 28.1913] mean = [0,0] cov = [[ 6 -4 ] [ -4 11 ]] sigma = [2.44949,3.31662] pdf = 0.0225079 pdf (ref)= 0.0225079 pdf = 0.0139715 pdf (ref)= 0.0139715 pdf = 0.00334166 pdf (ref)= 0.00334166 pdf = 0.000307961 pdf (ref)= 0.000307961 pdf = 1.09356e-05 pdf (ref)= 1.09356e-05 pdf = 1.49624e-07 pdf (ref)= 1.49624e-07 pdf = 0.0139715 pdf (ref)= 0.0139715 pdf = 0.00542272 pdf (ref)= 0.00542272 pdf = 0.000810972 pdf (ref)= 0.000810972 pdf = 4.67313e-05 pdf (ref)= 4.67313e-05 pdf = 1.03758e-06 pdf (ref)= 1.03758e-06 pdf = 8.8767e-09 pdf (ref)= 8.8767e-09 pdf = 0.00334166 pdf (ref)= 0.00334166 pdf = 0.000810972 pdf (ref)= 0.000810972 pdf = 7.58338e-05 pdf (ref)= 7.58338e-05 pdf = 2.73233e-06 pdf (ref)= 2.73233e-06 pdf = 3.7933e-08 pdf (ref)= 3.7933e-08 pdf = 2.02915e-10 pdf (ref)= 2.02915e-10 pdf = 0.000307961 pdf (ref)= 0.000307961 pdf = 4.67313e-05 pdf (ref)= 4.67313e-05 pdf = 2.73233e-06 pdf (ref)= 2.73233e-06 pdf = 6.15563e-08 pdf (ref)= 6.15563e-08 pdf = 5.34349e-10 pdf (ref)= 5.34349e-10 pdf = 1.78727e-12 pdf (ref)= 1.78727e-12 pdf = 1.09356e-05 pdf (ref)= 1.09356e-05 pdf = 1.03758e-06 pdf (ref)= 1.03758e-06 pdf = 3.7933e-08 pdf (ref)= 3.7933e-08 pdf = 5.34349e-10 pdf (ref)= 5.34349e-10 pdf = 2.90032e-12 pdf (ref)= 2.90032e-12 pdf = 1.49624e-07 pdf (ref)= 1.49624e-07 pdf = 8.8767e-09 pdf (ref)= 8.8767e-09 pdf = 2.02915e-10 pdf (ref)= 2.02915e-10 pdf = 1.78727e-12 pdf (ref)= 1.78727e-12 new distribution = RandomMixture( Uniform(a = 0, b = 1) - 2 * Uniform(a = 0, b = 1) + Uniform(a = 0, b = 1) Uniform(a = 0, b = 1) + Uniform(a = 0, b = 1) - 3 * Uniform(a = 0, b = 1) ) range = [-2, 2] [-3, 2] mean = [0,-0.5] cov = [[ 0.5 -0.333333 ] [ -0.333333 0.916667 ]] sigma = [0.707107,0.957427] pdf = 0.200008 pdf = 0.199953 pdf = 0.18257 pdf = 0.161365 pdf = 0.140147 pdf = 0.11893 pdf = 0.200012 pdf = 0.194237 pdf = 0.172999 pdf = 0.151788 pdf = 0.130572 pdf = 0.109357 pdf = 0.200032 pdf = 0.184647 pdf = 0.163427 pdf = 0.142211 pdf = 0.120996 pdf = 0.099784 pdf = 0.190057 pdf = 0.175051 pdf = 0.153858 pdf = 0.132633 pdf = 0.111423 pdf = 0.0902108 pdf = 0.164538 pdf = 0.155122 pdf = 0.144316 pdf = 0.123061 pdf = 0.101846 pdf = 0.0806394 pdf = 0.13901 pdf = 0.129584 pdf = 0.120154 pdf = 0.110695 pdf = 0.0922665 pdf = 0.0710676 3D distribution = RandomMixture( Normal(mu = 0, sigma = 1) - 0.05 * Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) + Uniform(a = 0, b = 1) - 0.5 * Uniform(a = 0, b = 1) 0.5 * Normal(mu = 0, sigma = 1) + Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) - 0.05 * Uniform(a = 0, b = 1) + 0.3 * Uniform(a = 0, b = 1) -0.5 * Normal(mu = 0, sigma = 1) - 0.1 * Mixture((w = 0.5, d = Normal(mu = 2, sigma = 1)), (w = 0.5, d = Normal(mu = -2, sigma = 1))) + 1.2 * Uniform(a = 0, b = 1) - 0.8 * Uniform(a = 0, b = 1) ) range = [-8.63316, 9.13316] [-13.5259, 13.7759] [-5.59038, 5.99038] mean = [0.25,0.125,0.2] cov = [[ 1.11667 0.233333 -0.341667 ] [ 0.233333 5.25771 -0.775 ] [ -0.341667 -0.775 0.473333 ]] sigma = [1.05672,2.29297,0.687992] pdf = 0.0128814 pdf = 0.0128655 pdf = 0.0122294 pdf = 0.00984818 pdf = 0.0234842 pdf = 0.020225 pdf = 0.0150424 pdf = 0.00949663 pdf = 0.0432697 pdf = 0.0385232 pdf = 0.0281784 pdf = 0.0180749 pdf = 0.044762 pdf = 0.0406428 pdf = 0.0308978 pdf = 0.0210441 pdf = 0.0129975 pdf = 0.0121201 pdf = 0.00968603 pdf = 0.0071769 pdf = 0.0247237 pdf = 0.0192342 pdf = 0.0131031 pdf = 0.00795833 pdf = 0.0400697 pdf = 0.0318194 pdf = 0.0226119 pdf = 0.0136759 pdf = 0.0348167 pdf = 0.0294142 pdf = 0.0218493 pdf = 0.0134862 pdf = 0.011291 pdf = 0.0091266 pdf = 0.00689789 pdf = 0.00454873 pdf = 0.0207392 pdf = 0.0154986 pdf = 0.00997757 pdf = 0.00537413 pdf = 0.0295955 pdf = 0.0230235 pdf = 0.0149557 pdf = 0.00725254 pdf = 0.0229623 pdf = 0.0183174 pdf = 0.0117906 pdf = 0.00422686 pdf = 0.00832467 pdf = 0.00628249 pdf = 0.00406557 pdf = 0.00186481 pdf = 0.0152402 pdf = 0.0104641 pdf = 0.00556431 pdf = 0.00128214 pdf = 0.0189734 pdf = 0.0129675 pdf = 0.00534378 pdf = 0.000220278 pdf = 0.0123168 pdf = 0.00770527 pdf = 0.00160947 pdf = 0 openturns-1.9/python/test/t_RandomMixture_std.py000077500000000000000000000276571307543307100223140ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import sqrt, pi, exp TESTPREAMBLE() RandomGenerator.SetSeed(0) ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 4000000) # Deactivate the simplification mechanism as we want to test the Poisson formula # based algorithm here ResourceMap.SetAsBool("RandomMixture-SimplifyAtoms", False) try: # Create a collection of test-cases and the associated references numberOfTests = 3 testCases = list() references = DistributionCollection(numberOfTests) testCases.append(DistributionCollection(2)) testCases[0][0] = Uniform(-1.0, 3.0) testCases[0][1] = Uniform(-1.0, 3.0) references[0] = Triangular(-2.0, 2.0, 6.0) testCases.append(DistributionCollection(3)) testCases[1][0] = Normal() testCases[1][1] = Normal(1.0, 2.0) testCases[1][2] = Normal(-2.0, 2.0) references[1] = Normal(-1.0, 3.0) testCases.append(DistributionCollection(3)) testCases[2][0] = Exponential() testCases[2][1] = Exponential() testCases[2][2] = Exponential() references[2] = Gamma(3.0, 1.0, 0.0) print("testCases=", testCases) print("references=", references) for testIndex in range(len(testCases)): # Instanciate one distribution object distribution = RandomMixture(testCases[testIndex]) distribution.setBlockMin(5) distribution.setBlockMax(20) distributionReference = references[testIndex] print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # Define a point point = Point(distribution.getDimension(), 0.5) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point)[0] print("ddf =%.5g" % DDF) print("ddf (ref)=", distributionReference.computeDDF(point)) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) print("pdf (ref)=%.6f" % distributionReference.computePDF(point)) CDF = distribution.computeCDF(point) print("cdf =%.6f" % CDF) print("cdf (ref)=%.6f" % distributionReference.computeCDF(point)) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=%.6f + %.6fi" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=%.6f + %.6fi" % (LCF.real, LCF.imag)) quantile = distribution.computeQuantile(0.95) print("quantile =", quantile) print("quantile (ref)=", distributionReference.computeQuantile(0.95)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point( distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions: too expansive for now... if False: print("dimension=", distribution.getDimension(), "test case=", testIndex) interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean =", mean) print("mean (ref)=", distributionReference.getMean()) standardDeviation = distribution.getStandardDeviation() print("standard deviation =", standardDeviation) print("standard deviation (ref)=", distributionReference.getStandardDeviation()) skewness = distribution.getSkewness() print("skewness =", skewness) print("skewness (ref)=", distributionReference.getSkewness()) kurtosis = distribution.getKurtosis() print("kurtosis =", kurtosis) print("kurtosis (ref)=", distributionReference.getKurtosis()) covariance = distribution.getCovariance() print("covariance =", covariance) print("covariance (ref)=", distributionReference.getCovariance()) parameters = distribution.getParametersCollection() print("parameters=", parameters) print("Standard representative=", distribution.getStandardRepresentative()) print("blockMin=", distribution.getBlockMin()) print("blockMax=", distribution.getBlockMax()) print("maxSize=", distribution.getMaxSize()) print("alpha=", distribution.getAlpha()) print("beta=", distribution.getBeta()) # Tests of the simplification mechanism weights = Point(0) coll = DistributionCollection(0) coll.add(Dirac(0.5)) weights.add(1.0) coll.add(Normal(1.0, 2.0)) weights.add(2.0) coll.add(Normal(2.0, 1.0)) weights.add(-3.0) coll.add(Uniform(-2.0, 2.0)) weights.add(-1.0) coll.add(Uniform(2.0, 4.0)) weights.add(2.0) coll.add(Exponential(2.0, -3.0)) weights.add(1.5) rm = RandomMixture(coll, weights) coll.add(rm) weights.add(-2.5) coll.add(Gamma(3.0, 4.0, -2.0)) weights.add(2.5) distribution = RandomMixture(coll, weights) print("distribution=", repr(distribution)) print("distribution=", distribution) mu = distribution.getMean()[0] sigma = distribution.getStandardDeviation()[0] for i in range(10): x = mu + (-3.0 + 6.0 * i / 9.0) * sigma print("pdf( %.6f )=%.6f" % (x, distribution.computePDF(x))) # Tests of the projection mechanism collFactories = [UniformFactory(), NormalFactory( ), TriangularFactory(), ExponentialFactory(), GammaFactory()] #, TrapezoidalFactory() result, norms = distribution.project(collFactories) print("projections=", result) print("norms=", norms) # ------------------------------ Multivariate tests ------------------------------# # 2D RandomMixture collection = DistributionCollection(0) collection.add(Normal(0.0, 1.0)) collection.add(Normal(0.0, 1.0)) collection.add(Normal(0.0, 1.0)) weightMatrix = Matrix(2, 3) weightMatrix[0, 0] = 1.0 weightMatrix[0, 1] = -2.0 weightMatrix[0, 2] = 1.0 weightMatrix[1, 0] = 1.0 weightMatrix[1, 1] = 1.0 weightMatrix[1, 2] = -3.0 # Build the RandomMixture distribution2D = RandomMixture(collection, weightMatrix) print("distribution = ", distribution2D) print("range = ", distribution2D.getRange()) print("mean = ", distribution2D.getMean()) print("cov = ", distribution2D.getCovariance()) print("sigma = ", distribution2D.getStandardDeviation()) distribution2D.setBlockMin(3) distribution2D.setBlockMax(10) # Build a grid for validation xMin = distribution2D.getRange().getLowerBound()[0] xMax = distribution2D.getRange().getUpperBound()[0] yMin = distribution2D.getRange().getLowerBound()[1] yMax = distribution2D.getRange().getUpperBound()[1] # Number of points of discretization nx = 4 ny = 4 boxParameters = Point(2) boxParameters[0] = nx boxParameters[1] = ny boxGrid = Box(boxParameters) grid = boxGrid.generate() # scaling box grid scaleFactor = Point(2) scaleFactor[0] = 0.25 * (xMax - xMin) scaleFactor[1] = 0.25 * (yMax - yMin) grid *= scaleFactor # translating translateFactor = Point(2) translateFactor[0] = distribution2D.getMean()[0] translateFactor[1] = distribution2D.getMean()[1] grid += translateFactor # Compute PDF # parameters for theoritical PDF, obtained thanks to Maple factor = sqrt(2) / (20 * pi) for index in range(grid.getSize()): point = grid[index] PDF = distribution2D.computePDF(point) # Very small values are not very accurate on x86, skip them if (PDF < 1.e-12): continue print("pdf = %.6g" % PDF) x, y = tuple(point) pdf_ref = factor * \ exp(-3.0 / 50.0 * y * y - 2.0 / 25 * x * y - 11.0 / 100 * x * x) print("pdf (ref)= %.6g" % pdf_ref) # 2D test, but too much CPU consuming collUniforme = DistributionCollection(0) collUniforme.add(Uniform(0, 1)) collUniforme.add(Uniform(0, 1)) collUniforme.add(Uniform(0, 1)) # Build the RandomMixture dist_2D = RandomMixture(collUniforme, weightMatrix) dist_2D.setBlockMin(3) dist_2D.setBlockMax(8) print("new distribution = ", dist_2D) print("range = ", dist_2D.getRange()) print("mean = ", dist_2D.getMean()) print("cov = ", dist_2D.getCovariance()) print("sigma = ", dist_2D.getStandardDeviation()) # Discretization on grid mu, mu + \sigma newGrid = boxGrid.generate() # scaling box grid newGrid *= dist_2D.getStandardDeviation() # translating newGrid += dist_2D.getMean() # Compute PDF for index in range(newGrid.getSize()): point = newGrid[index] PDF = dist_2D.computePDF(point) print("pdf = %.6g" % PDF) # 3D test ResourceMap.SetAsUnsignedInteger("RandomMixture-DefaultMaxSize", 8290688) mixture = Mixture([Normal(2, 1), Normal(-2, 1)]) collection = [Normal(0.0, 1.0), mixture, Uniform(0, 1), Uniform(0, 1)] matrix = Matrix( [[1, -0.05, 1, -0.5], [0.5, 1, -0.05, 0.3], [-0.5, -0.1, 1.2, -0.8]]) dist_3D = RandomMixture(collection, matrix) dist_3D.setBlockMin(3) dist_3D.setBlockMax(6) print("3D distribution = ", dist_3D) print("range = ", dist_3D.getRange()) print("mean = ", dist_3D.getMean()) print("cov = ", dist_3D.getCovariance()) print("sigma = ", dist_3D.getStandardDeviation()) # Total number of points (is (2+2)**3) # Test is CPU consuming N = 2 b = Box([N, N, N]) # Grid ==> (mu, mu+sigma) grid3D = b.generate() * dist_3D.getStandardDeviation() + dist_3D.getMean() for i in range(grid3D.getSize()): point = grid3D[i] PDF = dist_3D.computePDF(point) print("pdf = %.6g" % PDF) # For ticket 882 mixture = RandomMixture([Dirac()]) graph = mixture.drawPDF() graph = mixture.drawCDF() except: import sys print("t_RandomMixture_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomVector_composite.expout000066400000000000000000000062461307543307100242110ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0.5,0,0,0.5,1,0.5,0,0,0.5,1] X= class=RandomVector implementation=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0.5,0,0,0.5,1,0.5,0,0,0.5,1] is composite? False X dimension= 4 X realization (first )= class=Point name=Unnamed dimension=4 values=[2.2164,-0.584874,-1.17774,2.36926] X realization (second)= class=Point name=Unnamed dimension=4 values=[-3.36277,-0.575095,0.82447,2.8377] X realization (third )= class=Point name=Unnamed dimension=4 values=[2.62134,3.18445,1.14749,0.836432] X sample = class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=4 description=[X0,X1,X2,X3] data=[[-3.58012,-3.51208,-2.62348,-0.750139],[2.99159,1.75425,-0.0758382,1.01827],[1.64585,2.09505,-0.180423,-1.62596],[1.94723,1.25625,1.42895,4.24855],[1.14041,-0.283159,-1.0805,-0.265102]] Y= class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[1,1,1,1] sigma=class=Point name=Unnamed dimension=4 values=[2,2,2,2] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.5,0,0,0.5,1,0.5,0,0,0.5,1,0.5,0,0,0.5,1] is composite? True Y dimension= 2 Y realization (first )= class=Point name=Unnamed dimension=2 values=[0.0185054,-0.00219281] Y realization (second)= class=Point name=Unnamed dimension=2 values=[0.619855,0.0106974] Y realization (third )= class=Point name=Unnamed dimension=2 values=[2.8838,0.219604] Y sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=2 description=[y1,y2] data=[[1.50051,0.0377816],[0.834465,0.0103864],[-0.048251,0.0320782],[7.45941,-0.0328878],[0.53899,-0.0490936]] openturns-1.9/python/test/t_RandomVector_composite.py000077500000000000000000000033761307543307100233210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a Function myFunction = Function(['x1', 'x2', 'x3', 'x4'], ['y1', 'y2'], [ '(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)', 'cos(x2*x2+x4)/(x1*x1+1+x3^4)']) # We create a distribution dim = myFunction.getInputDimension() R = CorrelationMatrix(dim) for i in range(dim): R[i, i] = 1.0 for i in range(1, dim): R[i, i - 1] = 0.5 m = Point(dim, 1.0) s = Point(dim, 2.0) distribution = Normal(m, s, R) ref_distribution = distribution print("distribution = ", repr(ref_distribution)) # We create a distribution-based RandomVector X = RandomVector(distribution) print("X=", X) print("is composite? ", X.isComposite()) # Check standard methods of class RandomVector print("X dimension=", X.getDimension()) print("X realization (first )=", repr(X.getRealization())) print("X realization (second)=", repr(X.getRealization())) print("X realization (third )=", repr(X.getRealization())) print("X sample =", repr(X.getSample(5))) # We create a composite RandomVector Y from X and myFunction Y = RandomVector(CompositeRandomVector(myFunction, X)) print("Y=", Y) print("is composite? ", Y.isComposite()) # Check standard methods of class RandomVector print("Y dimension=", Y.getDimension()) print("Y realization (first )=", repr(Y.getRealization())) print("Y realization (second)=", repr(Y.getRealization())) print("Y realization (third )=", repr(Y.getRealization())) print("Y sample =", repr(Y.getSample(5))) except: import sys print("t_RandomVector_function.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomVector_conditional.expout000066400000000000000000000042521307543307100245050ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] random parameters= class=RandomVector implementation=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=1.5 vect= class=ConditionalRandomVector distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] random parameters=class=RandomVector implementation=class=UsualRandomVector distribution=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=1 b=1.5 vect dimension= 1 vect realization= class=Point name=Unnamed dimension=1 values=[-0.0949911] parameters value= class=Point name=Unnamed dimension=2 values=[0.608202,1.06764] dist realization= class=Point name=Unnamed dimension=1 values=[-0.0949911] vect sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 description=[X0] data=[[-0.807169],[1.37866],[0.691015],[-2.39773],[-1.04373]] openturns-1.9/python/test/t_RandomVector_conditional.py000077500000000000000000000022511307543307100236110ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # We create a distribution distribution = ot.Normal() print('distribution = ', repr(distribution)) aCollection = [] aCollection.append(ot.Normal(0.0, 1.0)) aCollection.append(ot.Uniform(1.0, 1.5)) distributionParameters = ot.ComposedDistribution(aCollection) randomParameters = ot.RandomVector(distributionParameters) print('random parameters=', randomParameters) # We create a distribution-based conditional RandomVector vect = ot.ConditionalRandomVector(distribution, randomParameters) print('vect=', vect) # Check standard methods of class RandomVector print('vect dimension=', vect.getDimension()) p = ot.Point() r = vect.getRealization(p) print('vect realization=', repr(r)) print('parameters value=', repr(p)) distribution.setParameter(p) ot.RandomGenerator.SetSeed(0) # Generate a parameter set to put the random generator into the proper # state randomParameters.getRealization() # The realization of the distribution should be equal to the realization # of the conditional vector print('dist realization=', repr(distribution.getRealization())) print('vect sample =', repr(vect.getSample(5))) openturns-1.9/python/test/t_RandomVector_constant.expout000066400000000000000000000013621307543307100240320ustar00rootroot00000000000000point = class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect= class=RandomVector implementation=class=ConstantRandomVector description=[x0,x1,x2,x3] point=class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect dimension= 4 vect realization (first )= class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect realization (second)= class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect realization (third )= class=Point name=Unnamed dimension=4 values=[101,102,103,104] vect sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=4 description=[x0,x1,x2,x3] data=[[101,102,103,104],[101,102,103,104],[101,102,103,104],[101,102,103,104],[101,102,103,104]] openturns-1.9/python/test/t_RandomVector_constant.py000077500000000000000000000016631307543307100231450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # We create a numerical point of dimension 4 point = Point(4) ref_point = point point[0] = 101. point[1] = 102. point[2] = 103. point[3] = 104. print("point = ", repr(ref_point)) # We create a 'constant' RandomVector from the Point vect = RandomVector(ConstantRandomVector(point)) print("vect=", vect) # Check standard methods of class RandomVector print("vect dimension=", vect.getDimension()) print("vect realization (first )=", repr(vect.getRealization())) print("vect realization (second)=", repr(vect.getRealization())) print("vect realization (third )=", repr(vect.getRealization())) print("vect sample =", repr(vect.getSample(5))) # except TestFailed, ex : except: import sys print("t_RandomVector_constant.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomVector_distribution.expout000066400000000000000000000021221307543307100247130ustar00rootroot00000000000000distribution = class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] vect= class=RandomVector implementation=class=UsualRandomVector distribution=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] vect dimension= 1 vect realization (first )= class=Point name=Unnamed dimension=1 values=[1.6082] vect realization (second)= class=Point name=Unnamed dimension=1 values=[-0.266173] vect realization (third )= class=Point name=Unnamed dimension=1 values=[0.561734] vect sample = class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=5 dimension=1 description=[X0] data=[[2.20548],[-1.18139],[1.35004],[0.644993],[2.43725]] openturns-1.9/python/test/t_RandomVector_distribution.py000077500000000000000000000020071307543307100240240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a distribution meanPoint = Point(1) meanPoint[0] = 1.0 sigma = Point(1) sigma[0] = 1.0 R = CorrelationMatrix(1) distribution = Normal(meanPoint, sigma, R) ref_distribution = distribution print("distribution = ", repr(ref_distribution)) # We create a distribution-based RandomVector vect = RandomVector(UsualRandomVector(distribution)) print("vect=", vect) # Check standard methods of class RandomVector print("vect dimension=", vect.getDimension()) print("vect realization (first )=", repr(vect.getRealization())) print("vect realization (second)=", repr(vect.getRealization())) print("vect realization (third )=", repr(vect.getRealization())) print("vect sample =", repr(vect.getSample(5))) except: import sys print("t_RandomVector_distribution.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomVector_python.expout000066400000000000000000000006371307543307100235260ustar00rootroot00000000000000PythonRandomVector -> ['R', 'S'] #2 myRV= class=RandomVector implementation=class=PythonRandomVectorImplementation name=RVEC description=[R,S] dimension= 2 realization= [0.629877,2.88281] sample= 0 : [ 0.135276 2.0325 ] 1 : [ 0.347057 2.96942 ] 2 : [ 0.92068 2.50304 ] 3 : [ 0.0632061 2.29276 ] 4 : [ 0.714382 2.38336 ] mean= [0.5,2.5] covariance= [[ 0.0833333 0 ] [ 0 0.0833333 ]] openturns-1.9/python/test/t_RandomVector_python.py000077500000000000000000000025051307543307100226310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) class RVEC(PythonRandomVector): def __init__(self): super(RVEC, self).__init__(2) self.setDescription(['R', 'S']) def getRealization(self): X = [RandomGenerator.Generate(), 2 + RandomGenerator.Generate()] return X def getSample(self, size): X = [] for i in range(size): X.append( [RandomGenerator.Generate(), 2 + RandomGenerator.Generate()]) return X def getMean(self): return [0.5, 2.5] def getCovariance(self): return [[0.0833333, 0.], [0., 0.0833333]] R = RVEC() print(R) try: # Instance creation myRV = RandomVector(R) print("myRV=", repr(myRV)) # Copy constructor newRV = RandomVector(myRV) # Dimension dim = myRV.getDimension() print('dimension=', dim) # Realization X = myRV.getRealization() print('realization=', X) # Sample X = myRV.getSample(5) print('sample=', X) # Mean mean = myRV.getMean() print('mean=', mean) # Covariance covariance = myRV.getCovariance() print('covariance=', covariance) except: import sys print("t_RandomVector_python.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomWalkMetropolisHastings_regression.py000077500000000000000000000067241307543307100267120ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * import math as m TESTPREAMBLE() try: chainDim = 3 obsDim = 1 outputDim = 1 # observations obsSize = 10 y_obs = Sample(obsSize, obsDim) y_obs[0, 0] = -9.50794871493506 y_obs[1, 0] = -3.83296694500105 y_obs[2, 0] = -2.44545713047953 y_obs[3, 0] = 0.0803625289211318 y_obs[4, 0] = 1.01898069723583 y_obs[5, 0] = 0.661725805623086 y_obs[6, 0] = -1.57581204592385 y_obs[7, 0] = -2.95308465670895 y_obs[8, 0] = -8.8878164296758 y_obs[9, 0] = -13.0812290405651 print('y_obs=', y_obs) p = Sample(obsSize, chainDim) for i in range(obsSize): for j in range(chainDim): p[i, j] = (-2 + 5. * i / 9.) ** j print('p=', p) fullModel = SymbolicFunction( ['p1', 'p2', 'p3', 'x1', 'x2', 'x3'], ['p1*x1+p2*x2+p3*x3', '1.0']) model = ParametricFunction(fullModel, range(chainDim), [0.0] * chainDim) # calibration parameters calibrationColl = CalibrationStrategyCollection(chainDim) # proposal distribution proposalColl = [] for i in range(chainDim): proposalColl.append(Uniform(-1., 1.)) # prior distribution sigma0 = Point(chainDim, 10.) # sigma0= (10.,10.,10.) Q0 = CorrelationMatrix(chainDim) # precision matrix Q0_inv = CorrelationMatrix(chainDim) # variance matrix for i in range(chainDim): Q0_inv[i, i] = sigma0[i] * sigma0[i] Q0[i, i] = 1.0 / Q0_inv[i, i] print('Q0=', Q0) mu0 = Point(chainDim, 0.0) # mu0 = (0.,0.,0.) prior = Normal(mu0, Q0_inv) # x0 ~ N(mu0, sigma0) print('x~', prior) # start from te mean x0=(0.,0.,0.) print('x0=', mu0) # conditional distribution y~N(z, 1.0) conditional = Normal() print('y~', conditional) # create a metropolis-hastings sampler sampler = RandomWalkMetropolisHastings( prior, conditional, model, p, y_obs, mu0, proposalColl) sampler.setVerbose(True) sampler.setThinning(4) sampler.setBurnIn(2000) sampler.setCalibrationStrategyPerComponent(calibrationColl) # get a realization realization = sampler.getRealization() print('y1=', realization) # try to generate a sample sampleSize = 1000 sample = sampler.getSample(sampleSize) x_mu = sample.computeMean() x_sigma = sample.computeStandardDeviationPerComponent() # print acceptance rate print('acceptance rate=', sampler.getAcceptanceRate()) # compute covariance x_cov = sample.computeCovariance() P = Matrix(obsSize, chainDim) for i in range(obsSize): for j in range(chainDim): P[i, j] = p[i, j] Qn = P.transpose() * P + Q0 Qn_inv = SquareMatrix(chainDim) for j in range(chainDim): I_j = Point(chainDim) I_j[j] = 1.0 Qn_inv_j = Qn.solveLinearSystem(I_j) for i in range(chainDim): Qn_inv[i, j] = Qn_inv_j[i] sigma_exp = Point(chainDim) for i in range(chainDim): sigma_exp[i] = m.sqrt(Qn_inv[i, i]) y_vec = Point(obsSize) for i in range(obsSize): y_vec[i] = y_obs[i, 0] x_emp = Qn.solveLinearSystem(P.transpose() * y_vec) mu_exp = Qn.solveLinearSystem( (P.transpose() * P) * x_emp + Matrix(Q0) * mu0) print('sample mean=', x_mu) print('expected mean=', mu_exp) print('covariance=', x_cov) print('expected covariance=', Qn_inv) except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_RandomWalkMetropolisHastings_std.expout000066400000000000000000000006641307543307100262120ustar00rootroot00000000000000prior variance= 0.01 realization= [25.2184,2] w= 0.0243309002433 expected posterior ~N( 25.1487998956 , 0.0987759636631 ) obtained posterior ~N( 25.2096496573 , 0.117599770139 ) acceptance rate= [0.0946844,0] prior variance= 1 realization= [29.8912,2] w= 0.666666666667 expected posterior ~N( 29.0771171389 , 0.577350269189 ) obtained posterior ~N( 29.4172027776 , 0.468900115002 ) acceptance rate= [0.420266,0] openturns-1.9/python/test/t_RandomWalkMetropolisHastings_std.py000077500000000000000000000060511307543307100253150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # this analitycal example is taken from "Bayesian Modeling Using WinBUGS" - Ioannis Ntzoufras # 1.5.3: Inference for the mean or normal data with known variance # Variable of interest: Y=N(mu, sigma) # Prior for mu: Normal(mu0, sigma0), sigma is known # Posterior for mu: E(mu|y)=w*y_mean+(1-w)*mu0, and Var(mu|y)=w*(sigmay^2)/n # => weighted average of the prior an the sample mean # with w = n*sigma0^2 / (n*sigma0^2 + sigma^2) # Log::Show(Log::ALL) # observations size = 10 realDist = Normal(31., 1.2) data = realDist.getSample(size) # calibration parameters calibrationColl = [CalibrationStrategy()] * 2 # proposal distribution proposalColl = DistributionCollection() mean_proposal = Uniform(-2.0, 2.0) std_proposal = Uniform(-2.0, 2.0) proposalColl.add(mean_proposal) proposalColl.add(std_proposal) # prior distribution mu0 = 25. sigma0s = [0.1, 1.0] # sigma0s.append(2.0) # play with the variance of the prior: # if the prior variance is low (information concernig the mu parameter is strong) # then the posterior mean will be equal to the prior mean # if large, the the posterior distribution is equivalent to the # distribution of the sample mean for i in range(len(sigma0s)): sigma0 = sigma0s[i] mean_prior = Normal(mu0, sigma0) std_prior = Dirac(2.0) # standard dev is known prior = ComposedDistribution([mean_prior, std_prior]) # choose the initial state within the prior initialState = prior.getRealization() # conditional distribution conditional = Normal() # create a metropolis-hastings sampler sampler = RandomWalkMetropolisHastings( prior, conditional, data, initialState, proposalColl) sampler.setVerbose(True) sampler.setThinning(2) sampler.setBurnIn(500) sampler.setCalibrationStrategyPerComponent(calibrationColl) realization = sampler.getRealization() sigmay = ConditionalDistribution( Normal(), prior).getStandardDeviation()[0] w = size * sigma0 ** 2. / (size * sigma0 ** 2. + sigmay ** 2.0) print("prior variance= %.12g" % (sigma0 ** 2.)) print(" realization=", realization) print(" w= %.12g" % w) # the posterior for mu is analytical print(" expected posterior ~N( %.12g" % (w * data.computeMean() [0] + (1. - w) * mu0), ", %.12g" % ((w * sigmay ** 2.0 / size) ** 0.5), ")") # try to generate a sample sample = sampler.getSample(50) print(" obtained posterior ~N( %.12g" % sample.computeMean()[ 0], ", %.12g" % sample.computeStandardDeviationPerComponent()[0], ")") print(" acceptance rate=", sampler.getAcceptanceRate()) except: import sys import traceback traceback.print_exc(file=sys.stdout) openturns-1.9/python/test/t_RandomWalk_std.expout000066400000000000000000000026451307543307100224340ustar00rootroot00000000000000dist = Uniform(a = -1, b = 1) process = class=ProcessImplementation dimension=1 description=[X0] mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=11 dimension=1 description=[t] data=[[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] simplices=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]] timeSerie = [ t X0 ] 0 : [ 0 0 ] 1 : [ 1 0.259753 ] 2 : [ 2 1.02536 ] 3 : [ 3 0.295916 ] 4 : [ 4 -0.639078 ] 5 : [ 5 -0.944964 ] 6 : [ 6 -0.00611811 ] 7 : [ 7 0.835241 ] 8 : [ 8 0.841321 ] 9 : [ 9 -0.0322665 ] 10 : [ 10 -0.446753 ] One future= [ t v0 ] 0 : [ 11 -0.0179887 ] 1 : [ 12 -0.251265 ] 2 : [ 13 -0.50373 ] 3 : [ 14 -0.0291936 ] Some futures= [field 0: [ t v0 ] 0 : [ 11 0.320254 ] 1 : [ 12 -0.0897576 ] 2 : [ 13 0.767263 ] 3 : [ 14 1.40888 ] field 1: [ t v0 ] 0 : [ 11 -0.0776029 ] 1 : [ 12 0.578452 ] 2 : [ 13 0.298056 ] 3 : [ 14 1.20755 ] field 2: [ t v0 ] 0 : [ 11 -0.269522 ] 1 : [ 12 -0.905444 ] 2 : [ 13 -1.73387 ] 3 : [ 14 -1.41242 ]] openturns-1.9/python/test/t_RandomWalk_std.py000077500000000000000000000017231307543307100215370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Tmin , time step and step number for TimeGrid Tmin = 0.0 deltaT = 1.0 N = 11 timeGrid = RegularGrid(Tmin, deltaT, N) # Fixing the distribution for the RandomWalk dist = Distribution(Uniform()) print("dist = ", dist) origin = Point(dist.getDimension()) # Building a random walk process = RandomWalk(origin, dist) # print the process process.setTimeGrid(timeGrid) print("process = ", process) # Get a realization of the process timeSerie = process.getRealization() print("timeSerie = ", timeSerie) # Some steps further stepNumber = 4 print("One future=", process.getFuture(stepNumber)) size = 3 print("Some futures=", process.getFuture(stepNumber, size)) except: import sys print("t_RandomWalk_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomizedLHS_std.expout000066400000000000000000000030051307543307100230270ustar00rootroot00000000000000RandomizedLHS= class=RandomizedLHS derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,y] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[y] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 RandomizedLHS result= probabilityEstimate=1.360294e-01 varianceEstimate=1.844504e-04 standard deviation=1.36e-02 coefficient of variation=9.98e-02 confidenceLength(0.95)=5.32e-02 outerSampling=204 blockSize=4 openturns-1.9/python/test/t_RandomizedLHS_std.py000077500000000000000000000024711307543307100221440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('y',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3) # We create a Monte Carlo algorithm myAlgo = RandomizedLHS(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) myAlgo.setMaximumCoefficientOfVariation(0.1) print("RandomizedLHS=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("RandomizedLHS result=", myAlgo.getResult()) except: import sys print("t_RandomizedLHS_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RandomizedQuasiMonteCarlo_std.expout000066400000000000000000000030511307543307100254500ustar00rootroot00000000000000RandomizedQuasiMonteCarlo= class=RandomizedQuasiMonteCarlo derived from class=Simulation event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3.*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[50,1,10,5] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=-3 maximumOuterSampling=250 maximumCoefficientOfVariation=0.1 maximumStandardDeviation=0 blockSize=4 RandomizedQuasiMonteCarlo result= probabilityEstimate=1.511299e-01 varianceEstimate=2.275829e-04 standard deviation=1.51e-02 coefficient of variation=9.98e-02 confidenceLength(0.95)=5.91e-02 outerSampling=177 blockSize=4 openturns-1.9/python/test/t_RandomizedQuasiMonteCarlo_std.py000077500000000000000000000025041307543307100245610ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function myFunction = Function( ('E', 'F', 'L', 'I'), ('d',), ('-F*L^3/(3.*E*I)',)) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -3.0) # We create a Monte Carlo algorithm myAlgo = RandomizedQuasiMonteCarlo(myEvent) myAlgo.setMaximumOuterSampling(250) myAlgo.setBlockSize(4) print("RandomizedQuasiMonteCarlo=", myAlgo) # Perform the simulation myAlgo.run() # Stream out the result print("RandomizedQuasiMonteCarlo result=", myAlgo.getResult()) except: import sys print("t_RandomizedQuasiMonteCarlo_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RayleighFactory_std.expout000066400000000000000000000012751307543307100234670ustar00rootroot00000000000000distribution= class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-1 Estimated distribution= class=Rayleigh name=Rayleigh dimension=1 sigma=2.47251 gamma=-0.964078 Default distribution= Rayleigh(sigma = 1, gamma = 0) Distribution from parameters= Rayleigh(sigma = 2.5, gamma = -1) Rayleigh = Rayleigh(sigma = 2.5, gamma = -1) Estimated rayleigh= Rayleigh(sigma = 2.47251, gamma = -0.964078) Default rayleigh= Rayleigh(sigma = 1, gamma = 0) Rayleigh from parameters= Rayleigh(sigma = 2.5, gamma = -1) Estimated distribution= class=Rayleigh name=Rayleigh dimension=1 sigma=4.93038e-30 gamma=0 Estimated distribution= class=Rayleigh name=Rayleigh dimension=1 sigma=7.06965e-05 gamma=0.9999 openturns-1.9/python/test/t_RayleighFactory_std.py000077500000000000000000000026671307543307100226040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Rayleigh(2.5, -1.0) size = 10000 sample = distribution.getSample(size) factory = RayleighFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedRayleigh = factory.buildAsRayleigh(sample) print("Rayleigh =", distribution) print("Estimated rayleigh=", estimatedRayleigh) estimatedRayleigh = factory.buildAsRayleigh() print("Default rayleigh=", estimatedRayleigh) estimatedRayleigh = factory.buildAsRayleigh( distribution.getParameter()) print("Rayleigh from parameters=", estimatedRayleigh) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_RayleighFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Rayleigh_std.expout000066400000000000000000000053131307543307100221340ustar00rootroot00000000000000Distribution class=Rayleigh name=Rayleigh dimension=1 sigma=2.5 gamma=-0.5 Distribution Rayleigh(sigma = 2.5, gamma = -0.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.90372] oneSample first= class=Point name=Unnamed dimension=1 values=[0.748252] last= class=Point name=Unnamed dimension=1 values=[2.7717] mean= class=Point name=Unnamed dimension=1 values=[2.61902] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.72183] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[0.0855317] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0.0855317] pdf = 0.200464850739 pdf (FD)= 0.200464851 cdf= 0.164729788589 characteristic function= (-0.157515303917+0.242921656409j) pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.131505,-0.0855317] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.131505,-0.0855317] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.120279,-0.200465] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.120279,-0.200465] quantile= class=Point name=Unnamed dimension=1 values=[5.61937] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.300729] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.223821, 5.75046] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.12539} with f= MinimumVolumeLevelSetEvaluation(Rayleigh(sigma = 2.5, gamma = -0.5)) beta= [0.0439198] Bilateral confidence interval= [0.062559, 6.29051] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 5.61937] beta= [0.95] Unilateral confidence interval (upper tail)= [0.300729, 19.5737] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[2.63329] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68252] parameters= [class=PointWithDescription name=X0 dimension=2 description=[sigma,gamma] values=[2.5,-0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [1.25331] standard moment n= 2 value= [2] standard moment n= 3 value= [3.75994] standard moment n= 4 value= [8] standard moment n= 5 value= [18.7997] Standard representative= Rayleigh(sigma = 1, gamma = 0) gamma= -0.5 standard deviation= class=Point name=Unnamed dimension=1 values=[1.63784] skewness= class=Point name=Unnamed dimension=1 values=[0.631111] kurtosis= class=Point name=Unnamed dimension=1 values=[3.24509] sigma= 2.5 openturns-1.9/python/test/t_Rayleigh_std.py000077500000000000000000000132461307543307100212470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Rayleigh(2.5, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) PDFgrFD = Point(2) PDFgrFD[0] = (Rayleigh(distribution.getSigma() + eps, distribution.getGamma()).computePDF(point) - Rayleigh(distribution.getSigma() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Rayleigh(distribution.getSigma(), distribution.getGamma() + eps).computePDF(point) - Rayleigh(distribution.getSigma(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Rayleigh(distribution.getSigma() + eps, distribution.getGamma()).computeCDF(point) - Rayleigh(distribution.getSigma() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Rayleigh(distribution.getSigma(), distribution.getGamma() + eps).computeCDF(point) - Rayleigh(distribution.getSigma(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=", distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution gamma = distribution.getGamma() print("gamma=", gamma) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) sigma = distribution.getSigma() print("sigma=", sigma) except: import sys print("t_Rayleigh_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RegularGrid_std.expout000066400000000000000000000001611307543307100225730ustar00rootroot00000000000000regularGrid = RegularGrid(start=-2, step=0.1, n=10) Start time = -2.0 End time = -1.0 Time step = 0.1 Steps = 10 openturns-1.9/python/test/t_RegularGrid_std.py000077500000000000000000000011411307543307100217010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # start and step start = -2.0 step = 0.1 # Number of steps for the RegularGrid n = 10 regularGrid = RegularGrid(start, step, n) print("regularGrid =", regularGrid) print("Start time =", regularGrid.getStart()) print("End time =", regularGrid.getEnd()) print("Time step =", regularGrid.getStep()) print("Steps =", regularGrid.getN()) except: import sys print("t_RegularGrid_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ResourceMap_std.py000077500000000000000000000007131307543307100217230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() try: print('ResourceMap={') for key in ot.ResourceMap.GetKeys(): print(' %s => %s,' % (key, ot.ResourceMap.Get(key))) print('}') print('Extract from ResourceMap : R-executable-command -> ', ot.ResourceMap.Get('R-executable-command')) except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_ReverseHaltonSequence_std.expout000066400000000000000000002001031307543307100246340ustar00rootroot00000000000000class=ReverseHaltonSequence derived from class=LowDiscrepancySequenceImplementation dimension=15 base=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=15 data=[[0.5,0.666667,0.8,0.857143,0.909091,0.923077,0.941176,0.947368,0.956522,0.965517,0.967742,0.972973,0.97561,0.976744,0.978723],[0.25,0.333333,0.6,0.714286,0.818182,0.846154,0.882353,0.894737,0.913043,0.931034,0.935484,0.945946,0.95122,0.953488,0.957447],[0.75,0.222222,0.4,0.571429,0.727273,0.769231,0.823529,0.842105,0.869565,0.896552,0.903226,0.918919,0.926829,0.930233,0.93617],[0.125,0.888889,0.2,0.428571,0.636364,0.692308,0.764706,0.789474,0.826087,0.862069,0.870968,0.891892,0.902439,0.906977,0.914894],[0.625,0.555556,0.16,0.285714,0.545455,0.615385,0.705882,0.736842,0.782609,0.827586,0.83871,0.864865,0.878049,0.883721,0.893617],[0.375,0.111111,0.96,0.142857,0.454545,0.538462,0.647059,0.684211,0.73913,0.793103,0.806452,0.837838,0.853659,0.860465,0.87234],[0.875,0.777778,0.76,0.122449,0.363636,0.461538,0.588235,0.631579,0.695652,0.758621,0.774194,0.810811,0.829268,0.837209,0.851064],[0.0625,0.444444,0.56,0.979592,0.272727,0.384615,0.529412,0.578947,0.652174,0.724138,0.741935,0.783784,0.804878,0.813953,0.829787],[0.5625,0.0740741,0.36,0.836735,0.181818,0.307692,0.470588,0.526316,0.608696,0.689655,0.709677,0.756757,0.780488,0.790698,0.808511],[0.3125,0.740741,0.12,0.693878,0.0909091,0.230769,0.411765,0.473684,0.565217,0.655172,0.677419,0.72973,0.756098,0.767442,0.787234]] class=Point name=Unnamed dimension=2 values=[0.5,0.666667] class=Point name=Unnamed dimension=2 values=[0.25,0.333333] class=Point name=Unnamed dimension=2 values=[0.75,0.222222] class=Point name=Unnamed dimension=2 values=[0.125,0.888889] class=Point name=Unnamed dimension=2 values=[0.625,0.555556] class=Point name=Unnamed dimension=2 values=[0.375,0.111111] class=Point name=Unnamed dimension=2 values=[0.875,0.777778] class=Point name=Unnamed dimension=2 values=[0.0625,0.444444] class=Point name=Unnamed dimension=2 values=[0.5625,0.0740741] class=Point name=Unnamed dimension=2 values=[0.3125,0.740741] class=Point name=Unnamed dimension=2 values=[0.8125,0.407407] class=Point name=Unnamed dimension=2 values=[0.1875,0.296296] class=Point name=Unnamed dimension=2 values=[0.6875,0.962963] class=Point name=Unnamed dimension=2 values=[0.4375,0.62963] class=Point name=Unnamed dimension=2 values=[0.9375,0.185185] class=Point name=Unnamed dimension=2 values=[0.03125,0.851852] class=Point name=Unnamed dimension=2 values=[0.53125,0.518519] class=Point name=Unnamed dimension=2 values=[0.28125,0.037037] class=Point name=Unnamed dimension=2 values=[0.78125,0.703704] class=Point name=Unnamed dimension=2 values=[0.15625,0.37037] class=Point name=Unnamed dimension=2 values=[0.65625,0.259259] class=Point name=Unnamed dimension=2 values=[0.40625,0.925926] class=Point name=Unnamed dimension=2 values=[0.90625,0.592593] class=Point name=Unnamed dimension=2 values=[0.09375,0.148148] class=Point name=Unnamed dimension=2 values=[0.59375,0.814815] class=Point name=Unnamed dimension=2 values=[0.34375,0.481481] class=Point name=Unnamed dimension=2 values=[0.84375,0.0246914] class=Point name=Unnamed dimension=2 values=[0.21875,0.691358] class=Point name=Unnamed dimension=2 values=[0.71875,0.358025] class=Point name=Unnamed dimension=2 values=[0.46875,0.246914] class=Point name=Unnamed dimension=2 values=[0.96875,0.91358] class=Point name=Unnamed dimension=2 values=[0.015625,0.580247] class=Point name=Unnamed dimension=2 values=[0.515625,0.135802] class=Point name=Unnamed dimension=2 values=[0.265625,0.802469] class=Point name=Unnamed dimension=2 values=[0.765625,0.469136] class=Point name=Unnamed dimension=2 values=[0.140625,0.0987654] class=Point name=Unnamed dimension=2 values=[0.640625,0.765432] class=Point name=Unnamed dimension=2 values=[0.390625,0.432099] class=Point name=Unnamed dimension=2 values=[0.890625,0.320988] class=Point name=Unnamed dimension=2 values=[0.078125,0.987654] class=Point name=Unnamed dimension=2 values=[0.578125,0.654321] class=Point name=Unnamed dimension=2 values=[0.328125,0.209877] class=Point name=Unnamed dimension=2 values=[0.828125,0.876543] class=Point name=Unnamed dimension=2 values=[0.203125,0.54321] class=Point name=Unnamed dimension=2 values=[0.703125,0.0617284] class=Point name=Unnamed dimension=2 values=[0.453125,0.728395] class=Point name=Unnamed dimension=2 values=[0.953125,0.395062] class=Point name=Unnamed dimension=2 values=[0.046875,0.283951] class=Point name=Unnamed dimension=2 values=[0.546875,0.950617] class=Point name=Unnamed dimension=2 values=[0.296875,0.617284] class=Point name=Unnamed dimension=2 values=[0.796875,0.17284] class=Point name=Unnamed dimension=2 values=[0.171875,0.839506] class=Point name=Unnamed dimension=2 values=[0.671875,0.506173] class=Point name=Unnamed dimension=2 values=[0.421875,0.0123457] class=Point name=Unnamed dimension=2 values=[0.921875,0.679012] class=Point name=Unnamed dimension=2 values=[0.109375,0.345679] class=Point name=Unnamed dimension=2 values=[0.609375,0.234568] class=Point name=Unnamed dimension=2 values=[0.359375,0.901235] class=Point name=Unnamed dimension=2 values=[0.859375,0.567901] class=Point name=Unnamed dimension=2 values=[0.234375,0.123457] class=Point name=Unnamed dimension=2 values=[0.734375,0.790123] class=Point name=Unnamed dimension=2 values=[0.484375,0.45679] class=Point name=Unnamed dimension=2 values=[0.984375,0.0864198] class=Point name=Unnamed dimension=2 values=[0.0078125,0.753086] class=Point name=Unnamed dimension=2 values=[0.507812,0.419753] class=Point name=Unnamed dimension=2 values=[0.257812,0.308642] class=Point name=Unnamed dimension=2 values=[0.757812,0.975309] class=Point name=Unnamed dimension=2 values=[0.132812,0.641975] class=Point name=Unnamed dimension=2 values=[0.632812,0.197531] class=Point name=Unnamed dimension=2 values=[0.382812,0.864198] class=Point name=Unnamed dimension=2 values=[0.882812,0.530864] class=Point name=Unnamed dimension=2 values=[0.0703125,0.0493827] class=Point name=Unnamed dimension=2 values=[0.570312,0.716049] class=Point name=Unnamed dimension=2 values=[0.320312,0.382716] class=Point name=Unnamed dimension=2 values=[0.820312,0.271605] class=Point name=Unnamed dimension=2 values=[0.195312,0.938272] class=Point name=Unnamed dimension=2 values=[0.695312,0.604938] class=Point name=Unnamed dimension=2 values=[0.445312,0.160494] class=Point name=Unnamed dimension=2 values=[0.945312,0.82716] class=Point name=Unnamed dimension=2 values=[0.0390625,0.493827] class=Point name=Unnamed dimension=2 values=[0.539062,0.00823045] class=Point name=Unnamed dimension=2 values=[0.289062,0.674897] class=Point name=Unnamed dimension=2 values=[0.789062,0.341564] class=Point name=Unnamed dimension=2 values=[0.164062,0.230453] class=Point name=Unnamed dimension=2 values=[0.664062,0.897119] class=Point name=Unnamed dimension=2 values=[0.414062,0.563786] class=Point name=Unnamed dimension=2 values=[0.914062,0.119342] class=Point name=Unnamed dimension=2 values=[0.101562,0.786008] class=Point name=Unnamed dimension=2 values=[0.601562,0.452675] class=Point name=Unnamed dimension=2 values=[0.351562,0.0823045] class=Point name=Unnamed dimension=2 values=[0.851562,0.748971] class=Point name=Unnamed dimension=2 values=[0.226562,0.415638] class=Point name=Unnamed dimension=2 values=[0.726562,0.304527] class=Point name=Unnamed dimension=2 values=[0.476562,0.971193] class=Point name=Unnamed dimension=2 values=[0.976562,0.63786] class=Point name=Unnamed dimension=2 values=[0.0234375,0.193416] class=Point name=Unnamed dimension=2 values=[0.523438,0.860082] class=Point name=Unnamed dimension=2 values=[0.273438,0.526749] class=Point name=Unnamed dimension=2 values=[0.773438,0.0452675] class=Point name=Unnamed dimension=2 values=[0.148438,0.711934] class=Point name=Unnamed dimension=2 values=[0.648438,0.378601] class=Point name=Unnamed dimension=2 values=[0.398438,0.26749] class=Point name=Unnamed dimension=2 values=[0.898438,0.934156] class=Point name=Unnamed dimension=2 values=[0.0859375,0.600823] class=Point name=Unnamed dimension=2 values=[0.585938,0.156379] class=Point name=Unnamed dimension=2 values=[0.335938,0.823045] class=Point name=Unnamed dimension=2 values=[0.835938,0.489712] class=Point name=Unnamed dimension=2 values=[0.210938,0.0329218] class=Point name=Unnamed dimension=2 values=[0.710938,0.699588] class=Point name=Unnamed dimension=2 values=[0.460938,0.366255] class=Point name=Unnamed dimension=2 values=[0.960938,0.255144] class=Point name=Unnamed dimension=2 values=[0.0546875,0.921811] class=Point name=Unnamed dimension=2 values=[0.554688,0.588477] class=Point name=Unnamed dimension=2 values=[0.304688,0.144033] class=Point name=Unnamed dimension=2 values=[0.804688,0.8107] class=Point name=Unnamed dimension=2 values=[0.179688,0.477366] class=Point name=Unnamed dimension=2 values=[0.679688,0.106996] class=Point name=Unnamed dimension=2 values=[0.429688,0.773663] class=Point name=Unnamed dimension=2 values=[0.929688,0.440329] class=Point name=Unnamed dimension=2 values=[0.117188,0.329218] class=Point name=Unnamed dimension=2 values=[0.617188,0.995885] class=Point name=Unnamed dimension=2 values=[0.367188,0.662551] class=Point name=Unnamed dimension=2 values=[0.867188,0.218107] class=Point name=Unnamed dimension=2 values=[0.242188,0.884774] class=Point name=Unnamed dimension=2 values=[0.742188,0.55144] class=Point name=Unnamed dimension=2 values=[0.492188,0.0699588] class=Point name=Unnamed dimension=2 values=[0.992188,0.736626] class=Point name=Unnamed dimension=2 values=[0.00390625,0.403292] class=Point name=Unnamed dimension=2 values=[0.503906,0.292181] class=Point name=Unnamed dimension=2 values=[0.253906,0.958848] class=Point name=Unnamed dimension=2 values=[0.753906,0.625514] class=Point name=Unnamed dimension=2 values=[0.128906,0.18107] class=Point name=Unnamed dimension=2 values=[0.628906,0.847737] class=Point name=Unnamed dimension=2 values=[0.378906,0.514403] class=Point name=Unnamed dimension=2 values=[0.878906,0.0205761] class=Point name=Unnamed dimension=2 values=[0.0664062,0.687243] class=Point name=Unnamed dimension=2 values=[0.566406,0.353909] class=Point name=Unnamed dimension=2 values=[0.316406,0.242798] class=Point name=Unnamed dimension=2 values=[0.816406,0.909465] class=Point name=Unnamed dimension=2 values=[0.191406,0.576132] class=Point name=Unnamed dimension=2 values=[0.691406,0.131687] class=Point name=Unnamed dimension=2 values=[0.441406,0.798354] class=Point name=Unnamed dimension=2 values=[0.941406,0.465021] class=Point name=Unnamed dimension=2 values=[0.0351562,0.0946502] class=Point name=Unnamed dimension=2 values=[0.535156,0.761317] class=Point name=Unnamed dimension=2 values=[0.285156,0.427984] class=Point name=Unnamed dimension=2 values=[0.785156,0.316872] class=Point name=Unnamed dimension=2 values=[0.160156,0.983539] class=Point name=Unnamed dimension=2 values=[0.660156,0.650206] class=Point name=Unnamed dimension=2 values=[0.410156,0.205761] class=Point name=Unnamed dimension=2 values=[0.910156,0.872428] class=Point name=Unnamed dimension=2 values=[0.0976562,0.539095] class=Point name=Unnamed dimension=2 values=[0.597656,0.0576132] class=Point name=Unnamed dimension=2 values=[0.347656,0.72428] class=Point name=Unnamed dimension=2 values=[0.847656,0.390947] class=Point name=Unnamed dimension=2 values=[0.222656,0.279835] class=Point name=Unnamed dimension=2 values=[0.722656,0.946502] class=Point name=Unnamed dimension=2 values=[0.472656,0.613169] class=Point name=Unnamed dimension=2 values=[0.972656,0.168724] class=Point name=Unnamed dimension=2 values=[0.0195312,0.835391] class=Point name=Unnamed dimension=2 values=[0.519531,0.502058] class=Point name=Unnamed dimension=2 values=[0.269531,0.00411523] class=Point name=Unnamed dimension=2 values=[0.769531,0.670782] class=Point name=Unnamed dimension=2 values=[0.144531,0.337449] class=Point name=Unnamed dimension=2 values=[0.644531,0.226337] class=Point name=Unnamed dimension=2 values=[0.394531,0.893004] class=Point name=Unnamed dimension=2 values=[0.894531,0.559671] class=Point name=Unnamed dimension=2 values=[0.0820312,0.115226] class=Point name=Unnamed dimension=2 values=[0.582031,0.781893] class=Point name=Unnamed dimension=2 values=[0.332031,0.44856] class=Point name=Unnamed dimension=2 values=[0.832031,0.0781893] class=Point name=Unnamed dimension=2 values=[0.207031,0.744856] class=Point name=Unnamed dimension=2 values=[0.707031,0.411523] class=Point name=Unnamed dimension=2 values=[0.457031,0.300412] class=Point name=Unnamed dimension=2 values=[0.957031,0.967078] class=Point name=Unnamed dimension=2 values=[0.0507812,0.633745] class=Point name=Unnamed dimension=2 values=[0.550781,0.1893] class=Point name=Unnamed dimension=2 values=[0.300781,0.855967] class=Point name=Unnamed dimension=2 values=[0.800781,0.522634] class=Point name=Unnamed dimension=2 values=[0.175781,0.0411523] class=Point name=Unnamed dimension=2 values=[0.675781,0.707819] class=Point name=Unnamed dimension=2 values=[0.425781,0.374486] class=Point name=Unnamed dimension=2 values=[0.925781,0.263374] class=Point name=Unnamed dimension=2 values=[0.113281,0.930041] class=Point name=Unnamed dimension=2 values=[0.613281,0.596708] class=Point name=Unnamed dimension=2 values=[0.363281,0.152263] class=Point name=Unnamed dimension=2 values=[0.863281,0.81893] class=Point name=Unnamed dimension=2 values=[0.238281,0.485597] class=Point name=Unnamed dimension=2 values=[0.738281,0.0288066] class=Point name=Unnamed dimension=2 values=[0.488281,0.695473] class=Point name=Unnamed dimension=2 values=[0.988281,0.36214] class=Point name=Unnamed dimension=2 values=[0.0117188,0.251029] class=Point name=Unnamed dimension=2 values=[0.511719,0.917695] class=Point name=Unnamed dimension=2 values=[0.261719,0.584362] class=Point name=Unnamed dimension=2 values=[0.761719,0.139918] class=Point name=Unnamed dimension=2 values=[0.136719,0.806584] class=Point name=Unnamed dimension=2 values=[0.636719,0.473251] class=Point name=Unnamed dimension=2 values=[0.386719,0.102881] class=Point name=Unnamed dimension=2 values=[0.886719,0.769547] class=Point name=Unnamed dimension=2 values=[0.0742188,0.436214] class=Point name=Unnamed dimension=2 values=[0.574219,0.325103] class=Point name=Unnamed dimension=2 values=[0.324219,0.99177] class=Point name=Unnamed dimension=2 values=[0.824219,0.658436] class=Point name=Unnamed dimension=2 values=[0.199219,0.213992] class=Point name=Unnamed dimension=2 values=[0.699219,0.880658] class=Point name=Unnamed dimension=2 values=[0.449219,0.547325] class=Point name=Unnamed dimension=2 values=[0.949219,0.0658436] class=Point name=Unnamed dimension=2 values=[0.0429688,0.73251] class=Point name=Unnamed dimension=2 values=[0.542969,0.399177] class=Point name=Unnamed dimension=2 values=[0.292969,0.288066] class=Point name=Unnamed dimension=2 values=[0.792969,0.954733] class=Point name=Unnamed dimension=2 values=[0.167969,0.621399] class=Point name=Unnamed dimension=2 values=[0.667969,0.176955] class=Point name=Unnamed dimension=2 values=[0.417969,0.843621] class=Point name=Unnamed dimension=2 values=[0.917969,0.510288] class=Point name=Unnamed dimension=2 values=[0.105469,0.0164609] class=Point name=Unnamed dimension=2 values=[0.605469,0.683128] class=Point name=Unnamed dimension=2 values=[0.355469,0.349794] class=Point name=Unnamed dimension=2 values=[0.855469,0.238683] class=Point name=Unnamed dimension=2 values=[0.230469,0.90535] class=Point name=Unnamed dimension=2 values=[0.730469,0.572016] class=Point name=Unnamed dimension=2 values=[0.480469,0.127572] class=Point name=Unnamed dimension=2 values=[0.980469,0.794239] class=Point name=Unnamed dimension=2 values=[0.0273438,0.460905] class=Point name=Unnamed dimension=2 values=[0.527344,0.090535] class=Point name=Unnamed dimension=2 values=[0.277344,0.757202] class=Point name=Unnamed dimension=2 values=[0.777344,0.423868] class=Point name=Unnamed dimension=2 values=[0.152344,0.312757] class=Point name=Unnamed dimension=2 values=[0.652344,0.979424] class=Point name=Unnamed dimension=2 values=[0.402344,0.646091] class=Point name=Unnamed dimension=2 values=[0.902344,0.201646] class=Point name=Unnamed dimension=2 values=[0.0898438,0.868313] class=Point name=Unnamed dimension=2 values=[0.589844,0.534979] class=Point name=Unnamed dimension=2 values=[0.339844,0.0534979] class=Point name=Unnamed dimension=2 values=[0.839844,0.720165] class=Point name=Unnamed dimension=2 values=[0.214844,0.386831] class=Point name=Unnamed dimension=2 values=[0.714844,0.27572] class=Point name=Unnamed dimension=2 values=[0.464844,0.942387] class=Point name=Unnamed dimension=2 values=[0.964844,0.609053] class=Point name=Unnamed dimension=2 values=[0.0585938,0.164609] class=Point name=Unnamed dimension=2 values=[0.558594,0.831276] class=Point name=Unnamed dimension=2 values=[0.308594,0.497942] class=Point name=Unnamed dimension=2 values=[0.808594,0.00274348] class=Point name=Unnamed dimension=2 values=[0.183594,0.66941] class=Point name=Unnamed dimension=2 values=[0.683594,0.336077] class=Point name=Unnamed dimension=2 values=[0.433594,0.224966] class=Point name=Unnamed dimension=2 values=[0.933594,0.891632] class=Point name=Unnamed dimension=2 values=[0.121094,0.558299] class=Point name=Unnamed dimension=2 values=[0.621094,0.113855] class=Point name=Unnamed dimension=2 values=[0.371094,0.780521] class=Point name=Unnamed dimension=2 values=[0.871094,0.447188] class=Point name=Unnamed dimension=2 values=[0.246094,0.0768176] class=Point name=Unnamed dimension=2 values=[0.746094,0.743484] class=Point name=Unnamed dimension=2 values=[0.496094,0.410151] class=Point name=Unnamed dimension=2 values=[0.996094,0.29904] class=Point name=Unnamed dimension=2 values=[0.00195312,0.965706] class=Point name=Unnamed dimension=2 values=[0.501953,0.632373] class=Point name=Unnamed dimension=2 values=[0.251953,0.187929] class=Point name=Unnamed dimension=2 values=[0.751953,0.854595] class=Point name=Unnamed dimension=2 values=[0.126953,0.521262] class=Point name=Unnamed dimension=2 values=[0.626953,0.0397805] class=Point name=Unnamed dimension=2 values=[0.376953,0.706447] class=Point name=Unnamed dimension=2 values=[0.876953,0.373114] class=Point name=Unnamed dimension=2 values=[0.0644531,0.262003] class=Point name=Unnamed dimension=2 values=[0.564453,0.928669] class=Point name=Unnamed dimension=2 values=[0.314453,0.595336] class=Point name=Unnamed dimension=2 values=[0.814453,0.150892] class=Point name=Unnamed dimension=2 values=[0.189453,0.817558] class=Point name=Unnamed dimension=2 values=[0.689453,0.484225] class=Point name=Unnamed dimension=2 values=[0.439453,0.0274348] class=Point name=Unnamed dimension=2 values=[0.939453,0.694102] class=Point name=Unnamed dimension=2 values=[0.0332031,0.360768] class=Point name=Unnamed dimension=2 values=[0.533203,0.249657] class=Point name=Unnamed dimension=2 values=[0.283203,0.916324] class=Point name=Unnamed dimension=2 values=[0.783203,0.58299] class=Point name=Unnamed dimension=2 values=[0.158203,0.138546] class=Point name=Unnamed dimension=2 values=[0.658203,0.805213] class=Point name=Unnamed dimension=2 values=[0.408203,0.471879] class=Point name=Unnamed dimension=2 values=[0.908203,0.101509] class=Point name=Unnamed dimension=2 values=[0.0957031,0.768176] class=Point name=Unnamed dimension=2 values=[0.595703,0.434842] class=Point name=Unnamed dimension=2 values=[0.345703,0.323731] class=Point name=Unnamed dimension=2 values=[0.845703,0.990398] class=Point name=Unnamed dimension=2 values=[0.220703,0.657064] class=Point name=Unnamed dimension=2 values=[0.720703,0.21262] class=Point name=Unnamed dimension=2 values=[0.470703,0.879287] class=Point name=Unnamed dimension=2 values=[0.970703,0.545953] class=Point name=Unnamed dimension=2 values=[0.0175781,0.0644719] class=Point name=Unnamed dimension=2 values=[0.517578,0.731139] class=Point name=Unnamed dimension=2 values=[0.267578,0.397805] class=Point name=Unnamed dimension=2 values=[0.767578,0.286694] class=Point name=Unnamed dimension=2 values=[0.142578,0.953361] class=Point name=Unnamed dimension=2 values=[0.642578,0.620027] class=Point name=Unnamed dimension=2 values=[0.392578,0.175583] class=Point name=Unnamed dimension=2 values=[0.892578,0.84225] class=Point name=Unnamed dimension=2 values=[0.0800781,0.508916] class=Point name=Unnamed dimension=2 values=[0.580078,0.0150892] class=Point name=Unnamed dimension=2 values=[0.330078,0.681756] class=Point name=Unnamed dimension=2 values=[0.830078,0.348422] class=Point name=Unnamed dimension=2 values=[0.205078,0.237311] class=Point name=Unnamed dimension=2 values=[0.705078,0.903978] class=Point name=Unnamed dimension=2 values=[0.455078,0.570645] class=Point name=Unnamed dimension=2 values=[0.955078,0.1262] class=Point name=Unnamed dimension=2 values=[0.0488281,0.792867] class=Point name=Unnamed dimension=2 values=[0.548828,0.459534] class=Point name=Unnamed dimension=2 values=[0.298828,0.0891632] class=Point name=Unnamed dimension=2 values=[0.798828,0.75583] class=Point name=Unnamed dimension=2 values=[0.173828,0.422497] class=Point name=Unnamed dimension=2 values=[0.673828,0.311385] class=Point name=Unnamed dimension=2 values=[0.423828,0.978052] class=Point name=Unnamed dimension=2 values=[0.923828,0.644719] class=Point name=Unnamed dimension=2 values=[0.111328,0.200274] class=Point name=Unnamed dimension=2 values=[0.611328,0.866941] class=Point name=Unnamed dimension=2 values=[0.361328,0.533608] class=Point name=Unnamed dimension=2 values=[0.861328,0.0521262] class=Point name=Unnamed dimension=2 values=[0.236328,0.718793] class=Point name=Unnamed dimension=2 values=[0.736328,0.38546] class=Point name=Unnamed dimension=2 values=[0.486328,0.274348] class=Point name=Unnamed dimension=2 values=[0.986328,0.941015] class=Point name=Unnamed dimension=2 values=[0.00976562,0.607682] class=Point name=Unnamed dimension=2 values=[0.509766,0.163237] class=Point name=Unnamed dimension=2 values=[0.259766,0.829904] class=Point name=Unnamed dimension=2 values=[0.759766,0.496571] class=Point name=Unnamed dimension=2 values=[0.134766,0.0109739] class=Point name=Unnamed dimension=2 values=[0.634766,0.677641] class=Point name=Unnamed dimension=2 values=[0.384766,0.344307] class=Point name=Unnamed dimension=2 values=[0.884766,0.233196] class=Point name=Unnamed dimension=2 values=[0.0722656,0.899863] class=Point name=Unnamed dimension=2 values=[0.572266,0.566529] class=Point name=Unnamed dimension=2 values=[0.322266,0.122085] class=Point name=Unnamed dimension=2 values=[0.822266,0.788752] class=Point name=Unnamed dimension=2 values=[0.197266,0.455418] class=Point name=Unnamed dimension=2 values=[0.697266,0.085048] class=Point name=Unnamed dimension=2 values=[0.447266,0.751715] class=Point name=Unnamed dimension=2 values=[0.947266,0.418381] class=Point name=Unnamed dimension=2 values=[0.0410156,0.30727] class=Point name=Unnamed dimension=2 values=[0.541016,0.973937] class=Point name=Unnamed dimension=2 values=[0.291016,0.640604] class=Point name=Unnamed dimension=2 values=[0.791016,0.196159] class=Point name=Unnamed dimension=2 values=[0.166016,0.862826] class=Point name=Unnamed dimension=2 values=[0.666016,0.529492] class=Point name=Unnamed dimension=2 values=[0.416016,0.048011] class=Point name=Unnamed dimension=2 values=[0.916016,0.714678] class=Point name=Unnamed dimension=2 values=[0.103516,0.381344] class=Point name=Unnamed dimension=2 values=[0.603516,0.270233] class=Point name=Unnamed dimension=2 values=[0.353516,0.9369] class=Point name=Unnamed dimension=2 values=[0.853516,0.603567] class=Point name=Unnamed dimension=2 values=[0.228516,0.159122] class=Point name=Unnamed dimension=2 values=[0.728516,0.825789] class=Point name=Unnamed dimension=2 values=[0.478516,0.492455] class=Point name=Unnamed dimension=2 values=[0.978516,0.0356653] class=Point name=Unnamed dimension=2 values=[0.0253906,0.702332] class=Point name=Unnamed dimension=2 values=[0.525391,0.368999] class=Point name=Unnamed dimension=2 values=[0.275391,0.257888] class=Point name=Unnamed dimension=2 values=[0.775391,0.924554] class=Point name=Unnamed dimension=2 values=[0.150391,0.591221] class=Point name=Unnamed dimension=2 values=[0.650391,0.146776] class=Point name=Unnamed dimension=2 values=[0.400391,0.813443] class=Point name=Unnamed dimension=2 values=[0.900391,0.48011] class=Point name=Unnamed dimension=2 values=[0.0878906,0.109739] class=Point name=Unnamed dimension=2 values=[0.587891,0.776406] class=Point name=Unnamed dimension=2 values=[0.337891,0.443073] class=Point name=Unnamed dimension=2 values=[0.837891,0.331962] class=Point name=Unnamed dimension=2 values=[0.212891,0.998628] class=Point name=Unnamed dimension=2 values=[0.712891,0.665295] class=Point name=Unnamed dimension=2 values=[0.462891,0.22085] class=Point name=Unnamed dimension=2 values=[0.962891,0.887517] class=Point name=Unnamed dimension=2 values=[0.0566406,0.554184] class=Point name=Unnamed dimension=2 values=[0.556641,0.0727023] class=Point name=Unnamed dimension=2 values=[0.306641,0.739369] class=Point name=Unnamed dimension=2 values=[0.806641,0.406036] class=Point name=Unnamed dimension=2 values=[0.181641,0.294925] class=Point name=Unnamed dimension=2 values=[0.681641,0.961591] class=Point name=Unnamed dimension=2 values=[0.431641,0.628258] class=Point name=Unnamed dimension=2 values=[0.931641,0.183813] class=Point name=Unnamed dimension=2 values=[0.119141,0.85048] class=Point name=Unnamed dimension=2 values=[0.619141,0.517147] class=Point name=Unnamed dimension=2 values=[0.369141,0.0233196] class=Point name=Unnamed dimension=2 values=[0.869141,0.689986] class=Point name=Unnamed dimension=2 values=[0.244141,0.356653] class=Point name=Unnamed dimension=2 values=[0.744141,0.245542] class=Point name=Unnamed dimension=2 values=[0.494141,0.912209] class=Point name=Unnamed dimension=2 values=[0.994141,0.578875] class=Point name=Unnamed dimension=2 values=[0.00585938,0.134431] class=Point name=Unnamed dimension=2 values=[0.505859,0.801097] class=Point name=Unnamed dimension=2 values=[0.255859,0.467764] class=Point name=Unnamed dimension=2 values=[0.755859,0.0973937] class=Point name=Unnamed dimension=2 values=[0.130859,0.76406] class=Point name=Unnamed dimension=2 values=[0.630859,0.430727] class=Point name=Unnamed dimension=2 values=[0.380859,0.319616] class=Point name=Unnamed dimension=2 values=[0.880859,0.986283] class=Point name=Unnamed dimension=2 values=[0.0683594,0.652949] class=Point name=Unnamed dimension=2 values=[0.568359,0.208505] class=Point name=Unnamed dimension=2 values=[0.318359,0.875171] class=Point name=Unnamed dimension=2 values=[0.818359,0.541838] class=Point name=Unnamed dimension=2 values=[0.193359,0.0603567] class=Point name=Unnamed dimension=2 values=[0.693359,0.727023] class=Point name=Unnamed dimension=2 values=[0.443359,0.39369] class=Point name=Unnamed dimension=2 values=[0.943359,0.282579] class=Point name=Unnamed dimension=2 values=[0.0371094,0.949246] class=Point name=Unnamed dimension=2 values=[0.537109,0.615912] class=Point name=Unnamed dimension=2 values=[0.287109,0.171468] class=Point name=Unnamed dimension=2 values=[0.787109,0.838134] class=Point name=Unnamed dimension=2 values=[0.162109,0.504801] class=Point name=Unnamed dimension=2 values=[0.662109,0.00685871] class=Point name=Unnamed dimension=2 values=[0.412109,0.673525] class=Point name=Unnamed dimension=2 values=[0.912109,0.340192] class=Point name=Unnamed dimension=2 values=[0.0996094,0.229081] class=Point name=Unnamed dimension=2 values=[0.599609,0.895748] class=Point name=Unnamed dimension=2 values=[0.349609,0.562414] class=Point name=Unnamed dimension=2 values=[0.849609,0.11797] class=Point name=Unnamed dimension=2 values=[0.224609,0.784636] class=Point name=Unnamed dimension=2 values=[0.724609,0.451303] class=Point name=Unnamed dimension=2 values=[0.474609,0.0809328] class=Point name=Unnamed dimension=2 values=[0.974609,0.747599] class=Point name=Unnamed dimension=2 values=[0.0214844,0.414266] class=Point name=Unnamed dimension=2 values=[0.521484,0.303155] class=Point name=Unnamed dimension=2 values=[0.271484,0.969822] class=Point name=Unnamed dimension=2 values=[0.771484,0.636488] class=Point name=Unnamed dimension=2 values=[0.146484,0.192044] class=Point name=Unnamed dimension=2 values=[0.646484,0.858711] class=Point name=Unnamed dimension=2 values=[0.396484,0.525377] class=Point name=Unnamed dimension=2 values=[0.896484,0.0438957] class=Point name=Unnamed dimension=2 values=[0.0839844,0.710562] class=Point name=Unnamed dimension=2 values=[0.583984,0.377229] class=Point name=Unnamed dimension=2 values=[0.333984,0.266118] class=Point name=Unnamed dimension=2 values=[0.833984,0.932785] class=Point name=Unnamed dimension=2 values=[0.208984,0.599451] class=Point name=Unnamed dimension=2 values=[0.708984,0.155007] class=Point name=Unnamed dimension=2 values=[0.458984,0.821674] class=Point name=Unnamed dimension=2 values=[0.958984,0.48834] class=Point name=Unnamed dimension=2 values=[0.0527344,0.0315501] class=Point name=Unnamed dimension=2 values=[0.552734,0.698217] class=Point name=Unnamed dimension=2 values=[0.302734,0.364883] class=Point name=Unnamed dimension=2 values=[0.802734,0.253772] class=Point name=Unnamed dimension=2 values=[0.177734,0.920439] class=Point name=Unnamed dimension=2 values=[0.677734,0.587106] class=Point name=Unnamed dimension=2 values=[0.427734,0.142661] class=Point name=Unnamed dimension=2 values=[0.927734,0.809328] class=Point name=Unnamed dimension=2 values=[0.115234,0.475995] class=Point name=Unnamed dimension=2 values=[0.615234,0.105624] class=Point name=Unnamed dimension=2 values=[0.365234,0.772291] class=Point name=Unnamed dimension=2 values=[0.865234,0.438957] class=Point name=Unnamed dimension=2 values=[0.240234,0.327846] class=Point name=Unnamed dimension=2 values=[0.740234,0.994513] class=Point name=Unnamed dimension=2 values=[0.490234,0.66118] class=Point name=Unnamed dimension=2 values=[0.990234,0.216735] class=Point name=Unnamed dimension=2 values=[0.0136719,0.883402] class=Point name=Unnamed dimension=2 values=[0.513672,0.550069] class=Point name=Unnamed dimension=2 values=[0.263672,0.0685871] class=Point name=Unnamed dimension=2 values=[0.763672,0.735254] class=Point name=Unnamed dimension=2 values=[0.138672,0.40192] class=Point name=Unnamed dimension=2 values=[0.638672,0.290809] class=Point name=Unnamed dimension=2 values=[0.388672,0.957476] class=Point name=Unnamed dimension=2 values=[0.888672,0.624143] class=Point name=Unnamed dimension=2 values=[0.0761719,0.179698] class=Point name=Unnamed dimension=2 values=[0.576172,0.846365] class=Point name=Unnamed dimension=2 values=[0.326172,0.513032] class=Point name=Unnamed dimension=2 values=[0.826172,0.0192044] class=Point name=Unnamed dimension=2 values=[0.201172,0.685871] class=Point name=Unnamed dimension=2 values=[0.701172,0.352538] class=Point name=Unnamed dimension=2 values=[0.451172,0.241427] class=Point name=Unnamed dimension=2 values=[0.951172,0.908093] class=Point name=Unnamed dimension=2 values=[0.0449219,0.57476] class=Point name=Unnamed dimension=2 values=[0.544922,0.130316] class=Point name=Unnamed dimension=2 values=[0.294922,0.796982] class=Point name=Unnamed dimension=2 values=[0.794922,0.463649] class=Point name=Unnamed dimension=2 values=[0.169922,0.0932785] class=Point name=Unnamed dimension=2 values=[0.669922,0.759945] class=Point name=Unnamed dimension=2 values=[0.419922,0.426612] class=Point name=Unnamed dimension=2 values=[0.919922,0.315501] class=Point name=Unnamed dimension=2 values=[0.107422,0.982167] class=Point name=Unnamed dimension=2 values=[0.607422,0.648834] class=Point name=Unnamed dimension=2 values=[0.357422,0.20439] class=Point name=Unnamed dimension=2 values=[0.857422,0.871056] class=Point name=Unnamed dimension=2 values=[0.232422,0.537723] class=Point name=Unnamed dimension=2 values=[0.732422,0.0562414] class=Point name=Unnamed dimension=2 values=[0.482422,0.722908] class=Point name=Unnamed dimension=2 values=[0.982422,0.389575] class=Point name=Unnamed dimension=2 values=[0.0292969,0.278464] class=Point name=Unnamed dimension=2 values=[0.529297,0.94513] class=Point name=Unnamed dimension=2 values=[0.279297,0.611797] class=Point name=Unnamed dimension=2 values=[0.779297,0.167353] class=Point name=Unnamed dimension=2 values=[0.154297,0.834019] class=Point name=Unnamed dimension=2 values=[0.654297,0.500686] class=Point name=Unnamed dimension=2 values=[0.404297,0.00137174] class=Point name=Unnamed dimension=2 values=[0.904297,0.668038] class=Point name=Unnamed dimension=2 values=[0.0917969,0.334705] class=Point name=Unnamed dimension=2 values=[0.591797,0.223594] class=Point name=Unnamed dimension=2 values=[0.341797,0.890261] class=Point name=Unnamed dimension=2 values=[0.841797,0.556927] class=Point name=Unnamed dimension=2 values=[0.216797,0.112483] class=Point name=Unnamed dimension=2 values=[0.716797,0.77915] class=Point name=Unnamed dimension=2 values=[0.466797,0.445816] class=Point name=Unnamed dimension=2 values=[0.966797,0.0754458] class=Point name=Unnamed dimension=2 values=[0.0605469,0.742112] class=Point name=Unnamed dimension=2 values=[0.560547,0.408779] class=Point name=Unnamed dimension=2 values=[0.310547,0.297668] class=Point name=Unnamed dimension=2 values=[0.810547,0.964335] class=Point name=Unnamed dimension=2 values=[0.185547,0.631001] class=Point name=Unnamed dimension=2 values=[0.685547,0.186557] class=Point name=Unnamed dimension=2 values=[0.435547,0.853224] class=Point name=Unnamed dimension=2 values=[0.935547,0.51989] class=Point name=Unnamed dimension=2 values=[0.123047,0.0384088] class=Point name=Unnamed dimension=2 values=[0.623047,0.705075] class=Point name=Unnamed dimension=2 values=[0.373047,0.371742] class=Point name=Unnamed dimension=2 values=[0.873047,0.260631] class=Point name=Unnamed dimension=2 values=[0.248047,0.927298] class=Point name=Unnamed dimension=2 values=[0.748047,0.593964] class=Point name=Unnamed dimension=2 values=[0.498047,0.14952] class=Point name=Unnamed dimension=2 values=[0.998047,0.816187] class=Point name=Unnamed dimension=2 values=[0.000976562,0.482853] class=Point name=Unnamed dimension=2 values=[0.500977,0.0260631] class=Point name=Unnamed dimension=2 values=[0.250977,0.69273] class=Point name=Unnamed dimension=2 values=[0.750977,0.359396] class=Point name=Unnamed dimension=2 values=[0.125977,0.248285] class=Point name=Unnamed dimension=2 values=[0.625977,0.914952] class=Point name=Unnamed dimension=2 values=[0.375977,0.581619] class=Point name=Unnamed dimension=2 values=[0.875977,0.137174] class=Point name=Unnamed dimension=2 values=[0.0634766,0.803841] class=Point name=Unnamed dimension=2 values=[0.563477,0.470508] class=Point name=Unnamed dimension=2 values=[0.313477,0.100137] class=Point name=Unnamed dimension=2 values=[0.813477,0.766804] class=Point name=Unnamed dimension=2 values=[0.188477,0.433471] class=Point name=Unnamed dimension=2 values=[0.688477,0.322359] class=Point name=Unnamed dimension=2 values=[0.438477,0.989026] class=Point name=Unnamed dimension=2 values=[0.938477,0.655693] class=Point name=Unnamed dimension=2 values=[0.0322266,0.211248] class=Point name=Unnamed dimension=2 values=[0.532227,0.877915] class=Point name=Unnamed dimension=2 values=[0.282227,0.544582] class=Point name=Unnamed dimension=2 values=[0.782227,0.0631001] class=Point name=Unnamed dimension=2 values=[0.157227,0.729767] class=Point name=Unnamed dimension=2 values=[0.657227,0.396433] class=Point name=Unnamed dimension=2 values=[0.407227,0.285322] class=Point name=Unnamed dimension=2 values=[0.907227,0.951989] class=Point name=Unnamed dimension=2 values=[0.0947266,0.618656] class=Point name=Unnamed dimension=2 values=[0.594727,0.174211] class=Point name=Unnamed dimension=2 values=[0.344727,0.840878] class=Point name=Unnamed dimension=2 values=[0.844727,0.507545] class=Point name=Unnamed dimension=2 values=[0.219727,0.0137174] class=Point name=Unnamed dimension=2 values=[0.719727,0.680384] class=Point name=Unnamed dimension=2 values=[0.469727,0.347051] class=Point name=Unnamed dimension=2 values=[0.969727,0.23594] class=Point name=Unnamed dimension=2 values=[0.0166016,0.902606] class=Point name=Unnamed dimension=2 values=[0.516602,0.569273] class=Point name=Unnamed dimension=2 values=[0.266602,0.124829] class=Point name=Unnamed dimension=2 values=[0.766602,0.791495] class=Point name=Unnamed dimension=2 values=[0.141602,0.458162] class=Point name=Unnamed dimension=2 values=[0.641602,0.0877915] class=Point name=Unnamed dimension=2 values=[0.391602,0.754458] class=Point name=Unnamed dimension=2 values=[0.891602,0.421125] class=Point name=Unnamed dimension=2 values=[0.0791016,0.310014] class=Point name=Unnamed dimension=2 values=[0.579102,0.97668] class=Point name=Unnamed dimension=2 values=[0.329102,0.643347] class=Point name=Unnamed dimension=2 values=[0.829102,0.198903] class=Point name=Unnamed dimension=2 values=[0.204102,0.865569] class=Point name=Unnamed dimension=2 values=[0.704102,0.532236] class=Point name=Unnamed dimension=2 values=[0.454102,0.0507545] class=Point name=Unnamed dimension=2 values=[0.954102,0.717421] class=Point name=Unnamed dimension=2 values=[0.0478516,0.384088] class=Point name=Unnamed dimension=2 values=[0.547852,0.272977] class=Point name=Unnamed dimension=2 values=[0.297852,0.939643] class=Point name=Unnamed dimension=2 values=[0.797852,0.60631] class=Point name=Unnamed dimension=2 values=[0.172852,0.161866] class=Point name=Unnamed dimension=2 values=[0.672852,0.828532] class=Point name=Unnamed dimension=2 values=[0.422852,0.495199] class=Point name=Unnamed dimension=2 values=[0.922852,0.00960219] class=Point name=Unnamed dimension=2 values=[0.110352,0.676269] class=Point name=Unnamed dimension=2 values=[0.610352,0.342936] class=Point name=Unnamed dimension=2 values=[0.360352,0.231824] class=Point name=Unnamed dimension=2 values=[0.860352,0.898491] class=Point name=Unnamed dimension=2 values=[0.235352,0.565158] class=Point name=Unnamed dimension=2 values=[0.735352,0.120713] class=Point name=Unnamed dimension=2 values=[0.485352,0.78738] class=Point name=Unnamed dimension=2 values=[0.985352,0.454047] class=Point name=Unnamed dimension=2 values=[0.00878906,0.0836763] class=Point name=Unnamed dimension=2 values=[0.508789,0.750343] class=Point name=Unnamed dimension=2 values=[0.258789,0.41701] class=Point name=Unnamed dimension=2 values=[0.758789,0.305898] class=Point name=Unnamed dimension=2 values=[0.133789,0.972565] class=Point name=Unnamed dimension=2 values=[0.633789,0.639232] class=Point name=Unnamed dimension=2 values=[0.383789,0.194787] class=Point name=Unnamed dimension=2 values=[0.883789,0.861454] class=Point name=Unnamed dimension=2 values=[0.0712891,0.528121] class=Point name=Unnamed dimension=2 values=[0.571289,0.0466392] class=Point name=Unnamed dimension=2 values=[0.321289,0.713306] class=Point name=Unnamed dimension=2 values=[0.821289,0.379973] class=Point name=Unnamed dimension=2 values=[0.196289,0.268861] class=Point name=Unnamed dimension=2 values=[0.696289,0.935528] class=Point name=Unnamed dimension=2 values=[0.446289,0.602195] class=Point name=Unnamed dimension=2 values=[0.946289,0.15775] class=Point name=Unnamed dimension=2 values=[0.0400391,0.824417] class=Point name=Unnamed dimension=2 values=[0.540039,0.491084] class=Point name=Unnamed dimension=2 values=[0.290039,0.0342936] class=Point name=Unnamed dimension=2 values=[0.790039,0.70096] class=Point name=Unnamed dimension=2 values=[0.165039,0.367627] class=Point name=Unnamed dimension=2 values=[0.665039,0.256516] class=Point name=Unnamed dimension=2 values=[0.415039,0.923182] class=Point name=Unnamed dimension=2 values=[0.915039,0.589849] class=Point name=Unnamed dimension=2 values=[0.102539,0.145405] class=Point name=Unnamed dimension=2 values=[0.602539,0.812071] class=Point name=Unnamed dimension=2 values=[0.352539,0.478738] class=Point name=Unnamed dimension=2 values=[0.852539,0.108368] class=Point name=Unnamed dimension=2 values=[0.227539,0.775034] class=Point name=Unnamed dimension=2 values=[0.727539,0.441701] class=Point name=Unnamed dimension=2 values=[0.477539,0.33059] class=Point name=Unnamed dimension=2 values=[0.977539,0.997257] class=Point name=Unnamed dimension=2 values=[0.0244141,0.663923] class=Point name=Unnamed dimension=2 values=[0.524414,0.219479] class=Point name=Unnamed dimension=2 values=[0.274414,0.886145] class=Point name=Unnamed dimension=2 values=[0.774414,0.552812] class=Point name=Unnamed dimension=2 values=[0.149414,0.0713306] class=Point name=Unnamed dimension=2 values=[0.649414,0.737997] class=Point name=Unnamed dimension=2 values=[0.399414,0.404664] class=Point name=Unnamed dimension=2 values=[0.899414,0.293553] class=Point name=Unnamed dimension=2 values=[0.0869141,0.960219] class=Point name=Unnamed dimension=2 values=[0.586914,0.626886] class=Point name=Unnamed dimension=2 values=[0.336914,0.182442] class=Point name=Unnamed dimension=2 values=[0.836914,0.849108] class=Point name=Unnamed dimension=2 values=[0.211914,0.515775] class=Point name=Unnamed dimension=2 values=[0.711914,0.0219479] class=Point name=Unnamed dimension=2 values=[0.461914,0.688615] class=Point name=Unnamed dimension=2 values=[0.961914,0.355281] class=Point name=Unnamed dimension=2 values=[0.0556641,0.24417] class=Point name=Unnamed dimension=2 values=[0.555664,0.910837] class=Point name=Unnamed dimension=2 values=[0.305664,0.577503] class=Point name=Unnamed dimension=2 values=[0.805664,0.133059] class=Point name=Unnamed dimension=2 values=[0.180664,0.799726] class=Point name=Unnamed dimension=2 values=[0.680664,0.466392] class=Point name=Unnamed dimension=2 values=[0.430664,0.0960219] class=Point name=Unnamed dimension=2 values=[0.930664,0.762689] class=Point name=Unnamed dimension=2 values=[0.118164,0.429355] class=Point name=Unnamed dimension=2 values=[0.618164,0.318244] class=Point name=Unnamed dimension=2 values=[0.368164,0.984911] class=Point name=Unnamed dimension=2 values=[0.868164,0.651578] class=Point name=Unnamed dimension=2 values=[0.243164,0.207133] class=Point name=Unnamed dimension=2 values=[0.743164,0.8738] class=Point name=Unnamed dimension=2 values=[0.493164,0.540466] class=Point name=Unnamed dimension=2 values=[0.993164,0.0589849] class=Point name=Unnamed dimension=2 values=[0.00488281,0.725652] class=Point name=Unnamed dimension=2 values=[0.504883,0.392318] class=Point name=Unnamed dimension=2 values=[0.254883,0.281207] class=Point name=Unnamed dimension=2 values=[0.754883,0.947874] class=Point name=Unnamed dimension=2 values=[0.129883,0.61454] class=Point name=Unnamed dimension=2 values=[0.629883,0.170096] class=Point name=Unnamed dimension=2 values=[0.379883,0.836763] class=Point name=Unnamed dimension=2 values=[0.879883,0.503429] class=Point name=Unnamed dimension=2 values=[0.0673828,0.00548697] class=Point name=Unnamed dimension=2 values=[0.567383,0.672154] class=Point name=Unnamed dimension=2 values=[0.317383,0.33882] class=Point name=Unnamed dimension=2 values=[0.817383,0.227709] class=Point name=Unnamed dimension=2 values=[0.192383,0.894376] class=Point name=Unnamed dimension=2 values=[0.692383,0.561043] class=Point name=Unnamed dimension=2 values=[0.442383,0.116598] class=Point name=Unnamed dimension=2 values=[0.942383,0.783265] class=Point name=Unnamed dimension=2 values=[0.0361328,0.449931] class=Point name=Unnamed dimension=2 values=[0.536133,0.079561] class=Point name=Unnamed dimension=2 values=[0.286133,0.746228] class=Point name=Unnamed dimension=2 values=[0.786133,0.412894] class=Point name=Unnamed dimension=2 values=[0.161133,0.301783] class=Point name=Unnamed dimension=2 values=[0.661133,0.96845] class=Point name=Unnamed dimension=2 values=[0.411133,0.635117] class=Point name=Unnamed dimension=2 values=[0.911133,0.190672] class=Point name=Unnamed dimension=2 values=[0.0986328,0.857339] class=Point name=Unnamed dimension=2 values=[0.598633,0.524005] class=Point name=Unnamed dimension=2 values=[0.348633,0.042524] class=Point name=Unnamed dimension=2 values=[0.848633,0.709191] class=Point name=Unnamed dimension=2 values=[0.223633,0.375857] class=Point name=Unnamed dimension=2 values=[0.723633,0.264746] class=Point name=Unnamed dimension=2 values=[0.473633,0.931413] class=Point name=Unnamed dimension=2 values=[0.973633,0.59808] class=Point name=Unnamed dimension=2 values=[0.0205078,0.153635] class=Point name=Unnamed dimension=2 values=[0.520508,0.820302] class=Point name=Unnamed dimension=2 values=[0.270508,0.486968] class=Point name=Unnamed dimension=2 values=[0.770508,0.0301783] class=Point name=Unnamed dimension=2 values=[0.145508,0.696845] class=Point name=Unnamed dimension=2 values=[0.645508,0.363512] class=Point name=Unnamed dimension=2 values=[0.395508,0.252401] class=Point name=Unnamed dimension=2 values=[0.895508,0.919067] class=Point name=Unnamed dimension=2 values=[0.0830078,0.585734] class=Point name=Unnamed dimension=2 values=[0.583008,0.141289] class=Point name=Unnamed dimension=2 values=[0.333008,0.807956] class=Point name=Unnamed dimension=2 values=[0.833008,0.474623] class=Point name=Unnamed dimension=2 values=[0.208008,0.104252] class=Point name=Unnamed dimension=2 values=[0.708008,0.770919] class=Point name=Unnamed dimension=2 values=[0.458008,0.437586] class=Point name=Unnamed dimension=2 values=[0.958008,0.326475] class=Point name=Unnamed dimension=2 values=[0.0517578,0.993141] class=Point name=Unnamed dimension=2 values=[0.551758,0.659808] class=Point name=Unnamed dimension=2 values=[0.301758,0.215364] class=Point name=Unnamed dimension=2 values=[0.801758,0.88203] class=Point name=Unnamed dimension=2 values=[0.176758,0.548697] class=Point name=Unnamed dimension=2 values=[0.676758,0.0672154] class=Point name=Unnamed dimension=2 values=[0.426758,0.733882] class=Point name=Unnamed dimension=2 values=[0.926758,0.400549] class=Point name=Unnamed dimension=2 values=[0.114258,0.289438] class=Point name=Unnamed dimension=2 values=[0.614258,0.956104] class=Point name=Unnamed dimension=2 values=[0.364258,0.622771] class=Point name=Unnamed dimension=2 values=[0.864258,0.178326] class=Point name=Unnamed dimension=2 values=[0.239258,0.844993] class=Point name=Unnamed dimension=2 values=[0.739258,0.51166] class=Point name=Unnamed dimension=2 values=[0.489258,0.0178326] class=Point name=Unnamed dimension=2 values=[0.989258,0.684499] class=Point name=Unnamed dimension=2 values=[0.0126953,0.351166] class=Point name=Unnamed dimension=2 values=[0.512695,0.240055] class=Point name=Unnamed dimension=2 values=[0.262695,0.906722] class=Point name=Unnamed dimension=2 values=[0.762695,0.573388] class=Point name=Unnamed dimension=2 values=[0.137695,0.128944] class=Point name=Unnamed dimension=2 values=[0.637695,0.79561] class=Point name=Unnamed dimension=2 values=[0.387695,0.462277] class=Point name=Unnamed dimension=2 values=[0.887695,0.0919067] class=Point name=Unnamed dimension=2 values=[0.0751953,0.758573] class=Point name=Unnamed dimension=2 values=[0.575195,0.42524] class=Point name=Unnamed dimension=2 values=[0.325195,0.314129] class=Point name=Unnamed dimension=2 values=[0.825195,0.980796] class=Point name=Unnamed dimension=2 values=[0.200195,0.647462] class=Point name=Unnamed dimension=2 values=[0.700195,0.203018] class=Point name=Unnamed dimension=2 values=[0.450195,0.869684] class=Point name=Unnamed dimension=2 values=[0.950195,0.536351] class=Point name=Unnamed dimension=2 values=[0.0439453,0.0548697] class=Point name=Unnamed dimension=2 values=[0.543945,0.721536] class=Point name=Unnamed dimension=2 values=[0.293945,0.388203] class=Point name=Unnamed dimension=2 values=[0.793945,0.277092] class=Point name=Unnamed dimension=2 values=[0.168945,0.943759] class=Point name=Unnamed dimension=2 values=[0.668945,0.610425] class=Point name=Unnamed dimension=2 values=[0.418945,0.165981] class=Point name=Unnamed dimension=2 values=[0.918945,0.832647] class=Point name=Unnamed dimension=2 values=[0.106445,0.499314] class=Point name=Unnamed dimension=2 values=[0.606445,0.000914495] class=Point name=Unnamed dimension=2 values=[0.356445,0.667581] class=Point name=Unnamed dimension=2 values=[0.856445,0.334248] class=Point name=Unnamed dimension=2 values=[0.231445,0.223137] class=Point name=Unnamed dimension=2 values=[0.731445,0.889803] class=Point name=Unnamed dimension=2 values=[0.481445,0.55647] class=Point name=Unnamed dimension=2 values=[0.981445,0.112026] class=Point name=Unnamed dimension=2 values=[0.0283203,0.778692] class=Point name=Unnamed dimension=2 values=[0.52832,0.445359] class=Point name=Unnamed dimension=2 values=[0.27832,0.0749886] class=Point name=Unnamed dimension=2 values=[0.77832,0.741655] class=Point name=Unnamed dimension=2 values=[0.15332,0.408322] class=Point name=Unnamed dimension=2 values=[0.65332,0.297211] class=Point name=Unnamed dimension=2 values=[0.40332,0.963877] class=Point name=Unnamed dimension=2 values=[0.90332,0.630544] class=Point name=Unnamed dimension=2 values=[0.0908203,0.1861] class=Point name=Unnamed dimension=2 values=[0.59082,0.852766] class=Point name=Unnamed dimension=2 values=[0.34082,0.519433] class=Point name=Unnamed dimension=2 values=[0.84082,0.0379515] class=Point name=Unnamed dimension=2 values=[0.21582,0.704618] class=Point name=Unnamed dimension=2 values=[0.71582,0.371285] class=Point name=Unnamed dimension=2 values=[0.46582,0.260174] class=Point name=Unnamed dimension=2 values=[0.96582,0.92684] class=Point name=Unnamed dimension=2 values=[0.0595703,0.593507] class=Point name=Unnamed dimension=2 values=[0.55957,0.149063] class=Point name=Unnamed dimension=2 values=[0.30957,0.815729] class=Point name=Unnamed dimension=2 values=[0.80957,0.482396] class=Point name=Unnamed dimension=2 values=[0.18457,0.0256059] class=Point name=Unnamed dimension=2 values=[0.68457,0.692273] class=Point name=Unnamed dimension=2 values=[0.43457,0.358939] class=Point name=Unnamed dimension=2 values=[0.93457,0.247828] class=Point name=Unnamed dimension=2 values=[0.12207,0.914495] class=Point name=Unnamed dimension=2 values=[0.62207,0.581161] class=Point name=Unnamed dimension=2 values=[0.37207,0.136717] class=Point name=Unnamed dimension=2 values=[0.87207,0.803384] class=Point name=Unnamed dimension=2 values=[0.24707,0.47005] class=Point name=Unnamed dimension=2 values=[0.74707,0.0996799] class=Point name=Unnamed dimension=2 values=[0.49707,0.766347] class=Point name=Unnamed dimension=2 values=[0.99707,0.433013] class=Point name=Unnamed dimension=2 values=[0.00292969,0.321902] class=Point name=Unnamed dimension=2 values=[0.50293,0.988569] class=Point name=Unnamed dimension=2 values=[0.25293,0.655235] class=Point name=Unnamed dimension=2 values=[0.75293,0.210791] class=Point name=Unnamed dimension=2 values=[0.12793,0.877458] class=Point name=Unnamed dimension=2 values=[0.62793,0.544124] class=Point name=Unnamed dimension=2 values=[0.37793,0.0626429] class=Point name=Unnamed dimension=2 values=[0.87793,0.72931] class=Point name=Unnamed dimension=2 values=[0.0654297,0.395976] class=Point name=Unnamed dimension=2 values=[0.56543,0.284865] class=Point name=Unnamed dimension=2 values=[0.31543,0.951532] class=Point name=Unnamed dimension=2 values=[0.81543,0.618198] class=Point name=Unnamed dimension=2 values=[0.19043,0.173754] class=Point name=Unnamed dimension=2 values=[0.69043,0.840421] class=Point name=Unnamed dimension=2 values=[0.44043,0.507087] class=Point name=Unnamed dimension=2 values=[0.94043,0.0132602] class=Point name=Unnamed dimension=2 values=[0.0341797,0.679927] class=Point name=Unnamed dimension=2 values=[0.53418,0.346594] class=Point name=Unnamed dimension=2 values=[0.28418,0.235482] class=Point name=Unnamed dimension=2 values=[0.78418,0.902149] class=Point name=Unnamed dimension=2 values=[0.15918,0.568816] class=Point name=Unnamed dimension=2 values=[0.65918,0.124371] class=Point name=Unnamed dimension=2 values=[0.40918,0.791038] class=Point name=Unnamed dimension=2 values=[0.90918,0.457705] class=Point name=Unnamed dimension=2 values=[0.0966797,0.0873342] class=Point name=Unnamed dimension=2 values=[0.59668,0.754001] class=Point name=Unnamed dimension=2 values=[0.34668,0.420668] class=Point name=Unnamed dimension=2 values=[0.84668,0.309556] class=Point name=Unnamed dimension=2 values=[0.22168,0.976223] class=Point name=Unnamed dimension=2 values=[0.72168,0.64289] class=Point name=Unnamed dimension=2 values=[0.47168,0.198445] class=Point name=Unnamed dimension=2 values=[0.97168,0.865112] class=Point name=Unnamed dimension=2 values=[0.0185547,0.531779] class=Point name=Unnamed dimension=2 values=[0.518555,0.0502972] class=Point name=Unnamed dimension=2 values=[0.268555,0.716964] class=Point name=Unnamed dimension=2 values=[0.768555,0.383631] class=Point name=Unnamed dimension=2 values=[0.143555,0.272519] class=Point name=Unnamed dimension=2 values=[0.643555,0.939186] class=Point name=Unnamed dimension=2 values=[0.393555,0.605853] class=Point name=Unnamed dimension=2 values=[0.893555,0.161408] class=Point name=Unnamed dimension=2 values=[0.0810547,0.828075] class=Point name=Unnamed dimension=2 values=[0.581055,0.494742] class=Point name=Unnamed dimension=2 values=[0.331055,0.00914495] class=Point name=Unnamed dimension=2 values=[0.831055,0.675812] class=Point name=Unnamed dimension=2 values=[0.206055,0.342478] class=Point name=Unnamed dimension=2 values=[0.706055,0.231367] class=Point name=Unnamed dimension=2 values=[0.456055,0.898034] class=Point name=Unnamed dimension=2 values=[0.956055,0.564701] class=Point name=Unnamed dimension=2 values=[0.0498047,0.120256] class=Point name=Unnamed dimension=2 values=[0.549805,0.786923] class=Point name=Unnamed dimension=2 values=[0.299805,0.453589] class=Point name=Unnamed dimension=2 values=[0.799805,0.083219] class=Point name=Unnamed dimension=2 values=[0.174805,0.749886] class=Point name=Unnamed dimension=2 values=[0.674805,0.416552] class=Point name=Unnamed dimension=2 values=[0.424805,0.305441] class=Point name=Unnamed dimension=2 values=[0.924805,0.972108] class=Point name=Unnamed dimension=2 values=[0.112305,0.638775] class=Point name=Unnamed dimension=2 values=[0.612305,0.19433] class=Point name=Unnamed dimension=2 values=[0.362305,0.860997] class=Point name=Unnamed dimension=2 values=[0.862305,0.527663] class=Point name=Unnamed dimension=2 values=[0.237305,0.046182] class=Point name=Unnamed dimension=2 values=[0.737305,0.712849] class=Point name=Unnamed dimension=2 values=[0.487305,0.379515] class=Point name=Unnamed dimension=2 values=[0.987305,0.268404] class=Point name=Unnamed dimension=2 values=[0.0107422,0.935071] class=Point name=Unnamed dimension=2 values=[0.510742,0.601738] class=Point name=Unnamed dimension=2 values=[0.260742,0.157293] class=Point name=Unnamed dimension=2 values=[0.760742,0.82396] class=Point name=Unnamed dimension=2 values=[0.135742,0.490626] class=Point name=Unnamed dimension=2 values=[0.635742,0.0338363] class=Point name=Unnamed dimension=2 values=[0.385742,0.700503] class=Point name=Unnamed dimension=2 values=[0.885742,0.36717] class=Point name=Unnamed dimension=2 values=[0.0732422,0.256059] class=Point name=Unnamed dimension=2 values=[0.573242,0.922725] class=Point name=Unnamed dimension=2 values=[0.323242,0.589392] class=Point name=Unnamed dimension=2 values=[0.823242,0.144947] class=Point name=Unnamed dimension=2 values=[0.198242,0.811614] class=Point name=Unnamed dimension=2 values=[0.698242,0.478281] class=Point name=Unnamed dimension=2 values=[0.448242,0.10791] class=Point name=Unnamed dimension=2 values=[0.948242,0.774577] class=Point name=Unnamed dimension=2 values=[0.0419922,0.441244] class=Point name=Unnamed dimension=2 values=[0.541992,0.330133] class=Point name=Unnamed dimension=2 values=[0.291992,0.996799] class=Point name=Unnamed dimension=2 values=[0.791992,0.663466] class=Point name=Unnamed dimension=2 values=[0.166992,0.219021] class=Point name=Unnamed dimension=2 values=[0.666992,0.885688] class=Point name=Unnamed dimension=2 values=[0.416992,0.552355] class=Point name=Unnamed dimension=2 values=[0.916992,0.0708733] class=Point name=Unnamed dimension=2 values=[0.104492,0.73754] class=Point name=Unnamed dimension=2 values=[0.604492,0.404207] class=Point name=Unnamed dimension=2 values=[0.354492,0.293096] class=Point name=Unnamed dimension=2 values=[0.854492,0.959762] class=Point name=Unnamed dimension=2 values=[0.229492,0.626429] class=Point name=Unnamed dimension=2 values=[0.729492,0.181984] class=Point name=Unnamed dimension=2 values=[0.479492,0.848651] class=Point name=Unnamed dimension=2 values=[0.979492,0.515318] class=Point name=Unnamed dimension=2 values=[0.0263672,0.0214906] class=Point name=Unnamed dimension=2 values=[0.526367,0.688157] class=Point name=Unnamed dimension=2 values=[0.276367,0.354824] class=Point name=Unnamed dimension=2 values=[0.776367,0.243713] class=Point name=Unnamed dimension=2 values=[0.151367,0.91038] class=Point name=Unnamed dimension=2 values=[0.651367,0.577046] class=Point name=Unnamed dimension=2 values=[0.401367,0.132602] class=Point name=Unnamed dimension=2 values=[0.901367,0.799268] class=Point name=Unnamed dimension=2 values=[0.0888672,0.465935] class=Point name=Unnamed dimension=2 values=[0.588867,0.0955647] class=Point name=Unnamed dimension=2 values=[0.338867,0.762231] class=Point name=Unnamed dimension=2 values=[0.838867,0.428898] class=Point name=Unnamed dimension=2 values=[0.213867,0.317787] class=Point name=Unnamed dimension=2 values=[0.713867,0.984454] class=Point name=Unnamed dimension=2 values=[0.463867,0.65112] class=Point name=Unnamed dimension=2 values=[0.963867,0.206676] class=Point name=Unnamed dimension=2 values=[0.0576172,0.873342] class=Point name=Unnamed dimension=2 values=[0.557617,0.540009] class=Point name=Unnamed dimension=2 values=[0.307617,0.0585277] class=Point name=Unnamed dimension=2 values=[0.807617,0.725194] class=Point name=Unnamed dimension=2 values=[0.182617,0.391861] class=Point name=Unnamed dimension=2 values=[0.682617,0.28075] class=Point name=Unnamed dimension=2 values=[0.432617,0.947417] class=Point name=Unnamed dimension=2 values=[0.932617,0.614083] class=Point name=Unnamed dimension=2 values=[0.120117,0.169639] class=Point name=Unnamed dimension=2 values=[0.620117,0.836305] class=Point name=Unnamed dimension=2 values=[0.370117,0.502972] class=Point name=Unnamed dimension=2 values=[0.870117,0.00502972] class=Point name=Unnamed dimension=2 values=[0.245117,0.671696] class=Point name=Unnamed dimension=2 values=[0.745117,0.338363] class=Point name=Unnamed dimension=2 values=[0.495117,0.227252] class=Point name=Unnamed dimension=2 values=[0.995117,0.893919] class=Point name=Unnamed dimension=2 values=[0.00683594,0.560585] class=Point name=Unnamed dimension=2 values=[0.506836,0.116141] class=Point name=Unnamed dimension=2 values=[0.256836,0.782807] class=Point name=Unnamed dimension=2 values=[0.756836,0.449474] class=Point name=Unnamed dimension=2 values=[0.131836,0.0791038] class=Point name=Unnamed dimension=2 values=[0.631836,0.74577] class=Point name=Unnamed dimension=2 values=[0.381836,0.412437] class=Point name=Unnamed dimension=2 values=[0.881836,0.301326] class=Point name=Unnamed dimension=2 values=[0.0693359,0.967993] class=Point name=Unnamed dimension=2 values=[0.569336,0.634659] class=Point name=Unnamed dimension=2 values=[0.319336,0.190215] class=Point name=Unnamed dimension=2 values=[0.819336,0.856882] class=Point name=Unnamed dimension=2 values=[0.194336,0.523548] class=Point name=Unnamed dimension=2 values=[0.694336,0.0420668] class=Point name=Unnamed dimension=2 values=[0.444336,0.708733] class=Point name=Unnamed dimension=2 values=[0.944336,0.3754] class=Point name=Unnamed dimension=2 values=[0.0380859,0.264289] class=Point name=Unnamed dimension=2 values=[0.538086,0.930956] class=Point name=Unnamed dimension=2 values=[0.288086,0.597622] class=Point name=Unnamed dimension=2 values=[0.788086,0.153178] class=Point name=Unnamed dimension=2 values=[0.163086,0.819845] class=Point name=Unnamed dimension=2 values=[0.663086,0.486511] class=Point name=Unnamed dimension=2 values=[0.413086,0.0297211] class=Point name=Unnamed dimension=2 values=[0.913086,0.696388] class=Point name=Unnamed dimension=2 values=[0.100586,0.363054] class=Point name=Unnamed dimension=2 values=[0.600586,0.251943] class=Point name=Unnamed dimension=2 values=[0.350586,0.91861] class=Point name=Unnamed dimension=2 values=[0.850586,0.585277] class=Point name=Unnamed dimension=2 values=[0.225586,0.140832] class=Point name=Unnamed dimension=2 values=[0.725586,0.807499] class=Point name=Unnamed dimension=2 values=[0.475586,0.474166] class=Point name=Unnamed dimension=2 values=[0.975586,0.103795] class=Point name=Unnamed dimension=2 values=[0.0224609,0.770462] class=Point name=Unnamed dimension=2 values=[0.522461,0.437128] class=Point name=Unnamed dimension=2 values=[0.272461,0.326017] class=Point name=Unnamed dimension=2 values=[0.772461,0.992684] class=Point name=Unnamed dimension=2 values=[0.147461,0.659351] class=Point name=Unnamed dimension=2 values=[0.647461,0.214906] class=Point name=Unnamed dimension=2 values=[0.397461,0.881573] class=Point name=Unnamed dimension=2 values=[0.897461,0.54824] class=Point name=Unnamed dimension=2 values=[0.0849609,0.0667581] class=Point name=Unnamed dimension=2 values=[0.584961,0.733425] class=Point name=Unnamed dimension=2 values=[0.334961,0.400091] class=Point name=Unnamed dimension=2 values=[0.834961,0.28898] class=Point name=Unnamed dimension=2 values=[0.209961,0.955647] class=Point name=Unnamed dimension=2 values=[0.709961,0.622314] class=Point name=Unnamed dimension=2 values=[0.459961,0.177869] class=Point name=Unnamed dimension=2 values=[0.959961,0.844536] class=Point name=Unnamed dimension=2 values=[0.0537109,0.511203] class=Point name=Unnamed dimension=2 values=[0.553711,0.0173754] class=Point name=Unnamed dimension=2 values=[0.303711,0.684042] class=Point name=Unnamed dimension=2 values=[0.803711,0.350709] class=Point name=Unnamed dimension=2 values=[0.178711,0.239598] class=Point name=Unnamed dimension=2 values=[0.678711,0.906264] class=Point name=Unnamed dimension=2 values=[0.428711,0.572931] class=Point name=Unnamed dimension=2 values=[0.928711,0.128487] class=Point name=Unnamed dimension=2 values=[0.116211,0.795153] class=Point name=Unnamed dimension=2 values=[0.616211,0.46182] class=Point name=Unnamed dimension=2 values=[0.366211,0.0914495] class=Point name=Unnamed dimension=2 values=[0.866211,0.758116] class=Point name=Unnamed dimension=2 values=[0.241211,0.424783] class=Point name=Unnamed dimension=2 values=[0.741211,0.313672] class=Point name=Unnamed dimension=2 values=[0.491211,0.980338] class=Point name=Unnamed dimension=2 values=[0.991211,0.647005] class=Point name=Unnamed dimension=2 values=[0.0146484,0.202561] class=Point name=Unnamed dimension=2 values=[0.514648,0.869227] class=Point name=Unnamed dimension=2 values=[0.264648,0.535894] class=Point name=Unnamed dimension=2 values=[0.764648,0.0544124] class=Point name=Unnamed dimension=2 values=[0.139648,0.721079] class=Point name=Unnamed dimension=2 values=[0.639648,0.387746] class=Point name=Unnamed dimension=2 values=[0.389648,0.276635] class=Point name=Unnamed dimension=2 values=[0.889648,0.943301] class=Point name=Unnamed dimension=2 values=[0.0771484,0.609968] class=Point name=Unnamed dimension=2 values=[0.577148,0.165524] class=Point name=Unnamed dimension=2 values=[0.327148,0.83219] class=Point name=Unnamed dimension=2 values=[0.827148,0.498857] class=Point name=Unnamed dimension=2 values=[0.202148,0.00365798] class=Point name=Unnamed dimension=2 values=[0.702148,0.670325] class=Point name=Unnamed dimension=2 values=[0.452148,0.336991] class=Point name=Unnamed dimension=2 values=[0.952148,0.22588] class=Point name=Unnamed dimension=2 values=[0.0458984,0.892547] class=Point name=Unnamed dimension=2 values=[0.545898,0.559214] class=Point name=Unnamed dimension=2 values=[0.295898,0.114769] class=Point name=Unnamed dimension=2 values=[0.795898,0.781436] class=Point name=Unnamed dimension=2 values=[0.170898,0.448102] class=Point name=Unnamed dimension=2 values=[0.670898,0.0777321] class=Point name=Unnamed dimension=2 values=[0.420898,0.744399] class=Point name=Unnamed dimension=2 values=[0.920898,0.411065] class=Point name=Unnamed dimension=2 values=[0.108398,0.299954] class=Point name=Unnamed dimension=2 values=[0.608398,0.966621] class=Point name=Unnamed dimension=2 values=[0.358398,0.633288] class=Point name=Unnamed dimension=2 values=[0.858398,0.188843] class=Point name=Unnamed dimension=2 values=[0.233398,0.85551] class=Point name=Unnamed dimension=2 values=[0.733398,0.522176] class=Point name=Unnamed dimension=2 values=[0.483398,0.040695] class=Point name=Unnamed dimension=2 values=[0.983398,0.707362] class=Point name=Unnamed dimension=2 values=[0.0302734,0.374028] class=Point name=Unnamed dimension=2 values=[0.530273,0.262917] class=Point name=Unnamed dimension=2 values=[0.280273,0.929584] class=Point name=Unnamed dimension=2 values=[0.780273,0.596251] class=Point name=Unnamed dimension=2 values=[0.155273,0.151806] class=Point name=Unnamed dimension=2 values=[0.655273,0.818473] class=Point name=Unnamed dimension=2 values=[0.405273,0.485139] class=Point name=Unnamed dimension=2 values=[0.905273,0.0283493] class=Point name=Unnamed dimension=2 values=[0.0927734,0.695016] sample size= 1000 relative error to Pi=2.039522e-03 openturns-1.9/python/test/t_ReverseHaltonSequence_std.py000077500000000000000000000022041307543307100237450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a ReverseHalton sequence = ReverseHaltonSequence(15) print(sequence) # Create a numerical sample of the sequence reverseHaltonSample = sequence.generate(10) print(repr(reverseHaltonSample)) # Create another ReverseHalton' sequence of dimension 2 to estimate Pi in # [0 1)^2 dimension = 2 sequence = ReverseHaltonSequence(dimension) pointInsideCircle = 0 sampleSize = 1000 for i in range(sampleSize): reverseHaltonPoint = sequence.generate() print(reverseHaltonPoint.__repr__()) if reverseHaltonPoint.norm() < 1.0: pointInsideCircle = pointInsideCircle + 1 probabilityEstimate = (1.0 * pointInsideCircle) / sampleSize probability = pi / 4.0 relativeError = fabs(probability - probabilityEstimate) / probability print('sample size=', sampleSize) print('relative error to Pi=%e' % relativeError) except: import sys print("t_ReverseHaltonSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RiceFactory_std.expout000066400000000000000000000006641307543307100226060ustar00rootroot00000000000000distribution= class=Rice name=Rice dimension=1 sigma=0.5 nu=1.5 Estimated distribution= class=Rice name=Rice dimension=1 sigma=0.498532 nu=1.50235 Distribution from parameters= Rice(sigma = 0.5, nu = 1.5) Default distribution= Rice(sigma = 1, nu = 0) Rice = Rice(sigma = 0.5, nu = 1.5) Estimated rice= Rice(sigma = 0.498532, nu = 1.50235) Rice from parameters= Rice(sigma = 0.5, nu = 1.5) Default rice= Rice(sigma = 1, nu = 0) openturns-1.9/python/test/t_RiceFactory_std.py000077500000000000000000000021151307543307100217060ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Rice(0.5, 1.5) size = 10000 sample = distribution.getSample(size) factory = RiceFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedRice = factory.buildAsRice(sample) print("Rice =", distribution) print("Estimated rice=", estimatedRice) estimatedRice = factory.buildAsRice(distribution.getParameter()) print("Rice from parameters=", estimatedRice) estimatedRice = factory.buildAsRice() print("Default rice=", estimatedRice) except: import sys print("t_RiceFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Rice_std.expout000066400000000000000000000044451307543307100212570ustar00rootroot00000000000000Distribution class=Rice name=Rice dimension=1 sigma=5 nu=4 Distribution Rice(sigma = 5, nu = 4) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[9.46867] oneSample first= class=Point name=Unnamed dimension=1 values=[6.29291] last= class=Point name=Unnamed dimension=1 values=[2.16415] mean= class=Point name=Unnamed dimension=1 values=[7.26091] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13.4082] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] pdf = 0.0286533178617 pdf (FD)= 0.028653318 cdf= 0.0144246216851 pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.00771071,-0.00449313] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.00390269,-0.00470084] quantile= class=Point name=Unnamed dimension=1 values=[13.9273] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.87781] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.68836, 14.2519] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.91877} with f= MinimumVolumeLevelSetEvaluation(Rice(sigma = 5, nu = 4)) beta= [0.0198656] Bilateral confidence interval= [1.31981, 15.3859] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 13.9273] beta= [0.95] Unilateral confidence interval (upper tail)= [1.87781, 63] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[7.23115] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[13.7104] parameters= [class=PointWithDescription name=X0 dimension=2 description=[sigma,nu] values=[5,4]] standard moment n= 0 value= [1] standard moment n= 1 value= [7.23115] standard moment n= 2 value= [66] standard moment n= 3 value= [704.457] standard moment n= 4 value= [8456] standard moment n= 5 value= [111488] Standard representative= Rice(sigma = 5, nu = 4) nu= 4.0 standard deviation= class=Point name=Unnamed dimension=1 values=[3.70276] skewness= class=Point name=Unnamed dimension=1 values=[0.569607] kurtosis= class=Point name=Unnamed dimension=1 values=[3.10633] sigma= 5.0 openturns-1.9/python/test/t_Rice_std.py000077500000000000000000000122201307543307100203540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Rice(5, 4) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.9f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps), )) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) # CF = distribution.computeCharacteristicFunction( point[0] ) # print "characteristic function=", CF PDFgrFD = Point(2) PDFgrFD[0] = (Rice(distribution.getSigma() + eps, distribution.getNu()).computePDF(point) - Rice(distribution.getSigma() - eps, distribution.getNu()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Rice(distribution.getSigma(), distribution.getNu() + eps).computePDF(point) - Rice(distribution.getSigma(), distribution.getNu() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) CDFgrFD = Point(2) CDFgrFD[0] = (Rice(distribution.getSigma() + eps, distribution.getNu()).computeCDF(point) - Rice(distribution.getSigma() - eps, distribution.getNu()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Rice(distribution.getNu() + eps, distribution.getNu()).computeCDF(point) - Rice(distribution.getNu() - eps, distribution.getNu()).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution nu = distribution.getNu() print("nu=", nu) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) sigma = distribution.getSigma() print("sigma=", sigma) except: import sys print("t_Rice_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_RungeKutta_std.expout000066400000000000000000000075371307543307100224730ustar00rootroot00000000000000ODE solver= class=RungeKutta time grid= [0,0.00010203,0.000408122,0.000918274,0.00163249,0.00255076,0.00367309,0.00499949,0.00652995,0.00826446,0.010203,0.0123457,0.0146924,0.0172431,0.019998,0.0229568,0.0261198,0.0294868,0.0330579,0.036833,0.0408122,0.0449954,0.0493827,0.0539741,0.0587695,0.063769,0.0689726,0.0743802,0.0799918,0.0858076,0.0918274,0.0980512,0.104479,0.111111,0.117947,0.124987,0.132231,0.13968,0.147332,0.155188,0.163249,0.171513,0.179982,0.188654,0.197531,0.206612,0.215896,0.225385,0.235078,0.244975,0.255076,0.265381,0.27589,0.286603,0.297521,0.308642,0.319967,0.331497,0.34323,0.355168,0.367309,0.379655,0.392205,0.404959,0.417917,0.431078,0.444444,0.458014,0.471789,0.485767,0.499949,0.514335,0.528926,0.54372,0.558718,0.573921,0.589328,0.604938,0.620753,0.636772,0.652995,0.669421,0.686052,0.702887,0.719927,0.73717,0.754617,0.772268,0.790123,0.808183,0.826446,0.844914,0.863585,0.882461,0.901541,0.920824,0.940312,0.960004,0.9799,1]#100 result= 0 : [ 1 -1 ] 1 : [ 0.999898 -1.0001 ] 2 : [ 0.999592 -1.00041 ] 3 : [ 0.999083 -1.00092 ] 4 : [ 0.99837 -1.00163 ] 5 : [ 0.997456 -1.00255 ] 6 : [ 0.99634 -1.00368 ] 7 : [ 0.995025 -1.00501 ] 8 : [ 0.993513 -1.00655 ] 9 : [ 0.991804 -1.0083 ] 10 : [ 0.989901 -1.01025 ] 11 : [ 0.987806 -1.01242 ] 12 : [ 0.985522 -1.0148 ] 13 : [ 0.983052 -1.01739 ] 14 : [ 0.980399 -1.0202 ] 15 : [ 0.977566 -1.02322 ] 16 : [ 0.974557 -1.02646 ] 17 : [ 0.971374 -1.02992 ] 18 : [ 0.968023 -1.0336 ] 19 : [ 0.964507 -1.0375 ] 20 : [ 0.960831 -1.04163 ] 21 : [ 0.956999 -1.04599 ] 22 : [ 0.953016 -1.05058 ] 23 : [ 0.948887 -1.0554 ] 24 : [ 0.944618 -1.06046 ] 25 : [ 0.940212 -1.06576 ] 26 : [ 0.935677 -1.0713 ] 27 : [ 0.931018 -1.07708 ] 28 : [ 0.92624 -1.0831 ] 29 : [ 0.921349 -1.08938 ] 30 : [ 0.916353 -1.09591 ] 31 : [ 0.911256 -1.1027 ] 32 : [ 0.906066 -1.10974 ] 33 : [ 0.90079 -1.11705 ] 34 : [ 0.895433 -1.12462 ] 35 : [ 0.890004 -1.13246 ] 36 : [ 0.884508 -1.14058 ] 37 : [ 0.878953 -1.14896 ] 38 : [ 0.873347 -1.15763 ] 39 : [ 0.867696 -1.16658 ] 40 : [ 0.862009 -1.17582 ] 41 : [ 0.856292 -1.18534 ] 42 : [ 0.850553 -1.19516 ] 43 : [ 0.8448 -1.20528 ] 44 : [ 0.83904 -1.21569 ] 45 : [ 0.833283 -1.22641 ] 46 : [ 0.827534 -1.23743 ] 47 : [ 0.821803 -1.24876 ] 48 : [ 0.816096 -1.26041 ] 49 : [ 0.810423 -1.27237 ] 50 : [ 0.804791 -1.28466 ] 51 : [ 0.799208 -1.29726 ] 52 : [ 0.793683 -1.31019 ] 53 : [ 0.788222 -1.32345 ] 54 : [ 0.782835 -1.33704 ] 55 : [ 0.777529 -1.35097 ] 56 : [ 0.772313 -1.36523 ] 57 : [ 0.767194 -1.37983 ] 58 : [ 0.76218 -1.39477 ] 59 : [ 0.757279 -1.41006 ] 60 : [ 0.7525 -1.42569 ] 61 : [ 0.74785 -1.44167 ] 62 : [ 0.743336 -1.45799 ] 63 : [ 0.738967 -1.47467 ] 64 : [ 0.734751 -1.49169 ] 65 : [ 0.730694 -1.50907 ] 66 : [ 0.726805 -1.5268 ] 67 : [ 0.723091 -1.54487 ] 68 : [ 0.719559 -1.5633 ] 69 : [ 0.716217 -1.58208 ] 70 : [ 0.713072 -1.60121 ] 71 : [ 0.710131 -1.62068 ] 72 : [ 0.707401 -1.64051 ] 73 : [ 0.704889 -1.66067 ] 74 : [ 0.702602 -1.68117 ] 75 : [ 0.700546 -1.70201 ] 76 : [ 0.698728 -1.72319 ] 77 : [ 0.697155 -1.74469 ] 78 : [ 0.695832 -1.76651 ] 79 : [ 0.694767 -1.78865 ] 80 : [ 0.693964 -1.81111 ] 81 : [ 0.693431 -1.83386 ] 82 : [ 0.693172 -1.85691 ] 83 : [ 0.693194 -1.88025 ] 84 : [ 0.693503 -1.90387 ] 85 : [ 0.694102 -1.92775 ] 86 : [ 0.694998 -1.95188 ] 87 : [ 0.696196 -1.97626 ] 88 : [ 0.697701 -2.00087 ] 89 : [ 0.699517 -2.0257 ] 90 : [ 0.70165 -2.05072 ] 91 : [ 0.704103 -2.07593 ] 92 : [ 0.706881 -2.1013 ] 93 : [ 0.709988 -2.12682 ] 94 : [ 0.713428 -2.15246 ] 95 : [ 0.717206 -2.17821 ] 96 : [ 0.721324 -2.20403 ] 97 : [ 0.725787 -2.22991 ] 98 : [ 0.730597 -2.25581 ] 99 : [ 0.735759 -2.28172 ] last value= [0.735759,-2.28172] ref. value= [0.735759,-2.28172] openturns-1.9/python/test/t_RungeKutta_std.py000077500000000000000000000012551307543307100215710ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m ot.TESTPREAMBLE() f = ot.Function(['t', 'y0', 'y1'], ['dy0', 'dy1'], ['t - y0', 'y1 + t^2']) phi = ot.VertexValueFunction(f) solver = ot.RungeKutta(phi) print('ODE solver=', solver) initialState = [1.0, -1.0] nt = 100 timeGrid = list(map(lambda i: (i**2.0) / (nt - 1.0)**2.0, range(nt))) print('time grid=', ot.Point(timeGrid)) result = solver.solve(initialState, timeGrid) print('result=', result) print('last value=', result[nt - 1]) t = timeGrid[nt - 1] ref = ot.Point(2) ref[0] = -1.0 + t + 2.0 * m.exp(-t) ref[1] = -2.0 + -2.0 * t - t * t + m.exp(t) print('ref. value=', ref) openturns-1.9/python/test/t_SORM_std.expout000066400000000000000000000025701307543307100211520ustar00rootroot00000000000000myAbdoRackwitz= class=AbdoRackwitz class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[] evaluationImplementation=class=NoEvaluation name=Unnamed gradientImplementation=class=NoGradient name=Unnamed hessianImplementation=class=NoHessian name=Unnamed equality constraint=none inequality constraint=none bounds=none minimization=true dimension=0 startingPoint=class=Point name=Unnamed dimension=0 values=[] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-10 maximumRelativeError=1e-10 maximumResidualError=1e-10 maximumConstraintError=1e-10 verbose=false tau=0.5 omega=0.0001 smooth=1.2 Breitung event probability=0.451173 Breitung generalized reliability index=0.122699 HohenBichler event probability=0.435230 HohenBichler generalized reliability index=0.163074 Tvedt event probability=0.433548 Tvedt generalized reliability index=0.167348 sorted curvatures= [-0.025678,-0.000273,0.000000,0.128951] standard space design point= [-0.002385,0.107665,0.035650,-0.023966] physical space design point= [49.997615,1.107665,10.035650,4.976034] is standard point origin in failure space? False importance factors= [0.000423,0.862305,0.094543,0.042728] Hasofer reliability index=0.115943 openturns-1.9/python/test/t_SORM_std.py000077500000000000000000000064751307543307100202710ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if fabs(point[i]) < eps: oss += sep + '%.6f' % fabs(point[i]) else: oss += sep + '%.6f' % point[i] sep = "," oss += "]" return oss TESTPREAMBLE() try: # We create a numerical math function myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) # E mean[0] = 50.0 # F mean[1] = 1.0 # L mean[2] = 10.0 # I mean[3] = 5.0 sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an Event from this RandomVector myEvent = Event(output, Less(), -1.5) # We create a NearestPoint algorithm myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) print("myAbdoRackwitz=", myAbdoRackwitz) # We create a FORM algorithm # The first parameter is an OptimizationAlgorithm # The second parameter is an event # The third parameter is a starting point for the design point research myAlgo = SORM(myAbdoRackwitz, myEvent, mean) # Perform the simulation myAlgo.run() # Stream out the result result = myAlgo.getResult() digits = 5 print("Breitung event probability=%.6f" % result.getEventProbabilityBreitung()) print("Breitung generalized reliability index=%.6f" % result.getGeneralisedReliabilityIndexBreitung()) print("HohenBichler event probability=%.6f" % result.getEventProbabilityHohenBichler()) print("HohenBichler generalized reliability index=%.6f" % result.getGeneralisedReliabilityIndexHohenBichler()) print("Tvedt event probability=%.6f" % result.getEventProbabilityTvedt()) print("Tvedt generalized reliability index=%.6f" % result.getGeneralisedReliabilityIndexTvedt()) print("sorted curvatures=", printPoint( result.getSortedCurvatures(), digits)) print("standard space design point=", printPoint( result.getStandardSpaceDesignPoint(), digits)) print("physical space design point=", printPoint( result.getPhysicalSpaceDesignPoint(), digits)) # Is the standard point origin in failure space? print("is standard point origin in failure space? ", result.getIsStandardPointOriginInFailureSpace()) print("importance factors=", printPoint( result.getImportanceFactors(), digits)) print("Hasofer reliability index=%.6f" % result.getHasoferReliabilityIndex()) except: import sys print("t_SORM_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SQP_std.expout000066400000000000000000000125111307543307100210310ustar00rootroot00000000000000myGradient = class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] algo= class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result= class=OptimizationResult optimal point=class=Point name=Unnamed dimension=4 values=[0.1,0.2,-0.3,0.4] optimal value=class=Point name=Unnamed dimension=1 values=[3] iterationNumber=2 absoluteError=2.432e-10 relativeError=4.441e-10 residualError=2.432e-10 constraintError=0 lagrangeMultipliers=class=Point name=Unnamed dimension=1 values=[-0.1] problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] level value=3 bounds=none minimization=true dimension=4 algo= class=SQP class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=-0.5 bounds=none minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false tau=0.5 omega=0.0001 smooth=1.2 result= class=OptimizationResult optimal point=class=Point name=Unnamed dimension=4 values=[-0.04608,-0.01339,0.1449,-0.02678] optimal value=class=Point name=Unnamed dimension=1 values=[-0.5] iterationNumber=13 absoluteError=6.138e-06 relativeError=3.962e-05 residualError=6.391e-06 constraintError=1.023e-11 lagrangeMultipliers=class=Point name=Unnamed dimension=1 values=[0.04622] problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation level function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=NonCenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=4 values=[1e-07,1e-07,1e-07,1e-07] evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] level value=-0.5 bounds=none minimization=true dimension=4 openturns-1.9/python/test/t_SQP_std.py000077500000000000000000000024621307543307100201440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.PlatformInfo.SetNumericalPrecision(4) # linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1+2*x2-3*x3+4*x4"]) # Add a finite difference gradient to the function myGradient = ot.NonCenteredFiniteDifferenceGradient( 1e-7, levelFunction.getEvaluation()) print("myGradient = ", repr(myGradient)) # Substitute the gradient levelFunction.setGradient( ot.NonCenteredFiniteDifferenceGradient(myGradient)) startingPoint = ot.Point(4, 0.0) algo = ot.SQP(ot.OptimizationProblem(levelFunction, 3.0)) algo.setStartingPoint(startingPoint) print('algo=', algo) algo.run() result = algo.getResult() print('result=', result) # non-linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4"]) # Add a finite difference gradient to the function, # needs it myGradient = ot.NonCenteredFiniteDifferenceGradient( 1e-7, levelFunction.getEvaluation()) # Substitute the gradient levelFunction.setGradient( ot.NonCenteredFiniteDifferenceGradient(myGradient)) startingPoint = ot.Point(4, 0.0) algo = ot.SQP(ot.OptimizationProblem(levelFunction, -0.5)) algo.setStartingPoint(startingPoint) print('algo=', algo) algo.run() result = algo.getResult() print('result=', result) openturns-1.9/python/test/t_Sample_bug14.expout000066400000000000000000000013531307543307100217410ustar00rootroot00000000000000sample1= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[2],[2],[2],[2],[2]] sample2= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[3],[2],[2],[2],[2]] sample1= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[2],[-5],[2],[2],[2]] sample2= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[3],[2],[2],[2],[2]] sample1= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=1 data=[[2],[-5],[2],[6],[2]] sample1[2][0]= 2.0 sample1[2, 0]= 2.0 set item failed on purpose openturns-1.9/python/test/t_Sample_bug14.py000077500000000000000000000013221307543307100210440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: sample1 = Sample(5, Point(1, 2.0)) sample2 = Sample(sample1) sample2[0] = Point(1, 3.0) print("sample1=", repr(sample1)) print("sample2=", repr(sample2)) sample1[1] = Point(1, -5.0) print("sample1=", repr(sample1)) print("sample2=", repr(sample2)) sample1[3, 0] = 6.0 print("sample1=", repr(sample1)) print("sample1[2][0]=", sample1[2][0]) print("sample1[2, 0]=", sample1[2, 0]) try: sample1[1, 2] = -4.0 except: print("set item failed on purpose") except: import sys print("t_Sample_bug14.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Sample_computation.expout000066400000000000000000000133441307543307100233640ustar00rootroot00000000000000sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] min= class=Point name=Unnamed dimension=3 values=[1,0,2] max= class=Point name=Unnamed dimension=3 values=[6,7,9] mean= class=Point name=Unnamed dimension=3 values=[3.5,2.75,6] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[5.66667,4.83333,-4.33333,4.83333,9.58333,-9.66667,-4.33333,-9.66667,10] standard deviation= class=TriangularMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[2.38048,2.03041,-1.82036,0,2.33683,-2.55499,0,0,0.397855] standard deviation per component= class=Point name=Unnamed dimension=3 values=[2.38048,3.0957,3.16228] Pearson correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.65588,-0.57565,0.65588,1,-0.987458,-0.57565,-0.987458,1] Spearman correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.8,-0.8,0.8,1,-1,-0.8,-1,1] Kendall tau= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.666667,-0.666667,0.666667,1,-1,-0.666667,-1,1] range per component= class=Point name=Unnamed dimension=3 values=[5,7,7] median per component= class=Point name=Unnamed dimension=3 values=[3.5,2,6.5] Variance= class=Point name=Unnamed dimension=3 values=[5.66667,9.58333,10] Skewness= class=Point name=Unnamed dimension=3 values=[0,1.13762,-0.632456] Kurtosis= class=Point name=Unnamed dimension=3 values=[-1.3391,3.75766,1.3] Centered moment of order 0 = [1,1,1] Centered moment of order 1 = [0,0,0] Centered moment of order 2 = [4.25,7.1875,7.5] Centered moment of order 3 = [0,12.6562,-7.5] Centered moment of order 4 = [22.0625,98.207,88.5] Centered moment of order 5 = [0,303.223,-187.5] Centered moment of order 6 = [127.766,1588.55,1222.5] Centered moment of order 7 = [0,5951.35,-3517.5] Centered moment of order 8 = [775.754,27450.1,18088.5] Centered moment of order 9 = [0,110807,-60487.5] Marginal 1= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[3],[1],[7]] Marginal [2, 0]= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[9,1],[5,2],[8,5],[2,6]] Rank= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[0,0,3],[1,2,1],[2,1,2],[3,3,0]] Sort= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] Sort according to component 0= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,5],[5,1,8],[6,7,2]] Quantile per component( 0.25 )= class=Point name=Unnamed dimension=3 values=[1.5,0.5,3.5] Empirical CDF( class=Point name=Unnamed dimension=3 values=[0.25,0.25,0.25] = 0.0 Pearson correlation (exact)= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Spearman correlation (exact)= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.239359,0,0.239359,1,0.239359,0,0.239359,1] Rank= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[0,0,1.5],[1.5,3,1.5],[3,1,1.5],[1.5,2,1.5]] Rank component 0= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=1 data=[[0],[1.5],[3],[1.5]] Sort= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9],[5,1,9]] Sort according to component 0= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,3,9],[2,2,9],[5,1,9]] Spearman correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.316228,0,0.316228,1,0,0,0,1] Kendall tau= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.182574,0,0.182574,1,0,0,0,1] Normal= class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[0,0,0] sigma=class=Point name=Unnamed dimension=3 values=[1,1,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Empirical covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.984954,0.228389,-0.00175117,0.228389,1.00735,0.241997,-0.00175117,0.241997,1.01046] Pearson correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.229286,-0.00175534,0.229286,1,0.239862,-0.00175534,0.239862,1] Spearman correlation= class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.219846,-0.00317292,0.219846,1,0.23306,-0.00317292,0.23306,1] Unique= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9],[5,1,9]] Unique= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=3 data=[[1,0,9],[2,2,9],[2,3,9]] openturns-1.9/python/test/t_Sample_computation.py000077500000000000000000000067731307543307100225030ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: sample = Sample(4, 3) sample[0] = Point((1, 0, 9)) sample[1] = Point((2, 3, 5)) sample[2] = Point((5, 1, 8)) sample[3] = Point((6, 7, 2)) print("sample=", repr(sample)) print("min=", repr(sample.getMin())) print("max=", repr(sample.getMax())) print("mean=", repr(sample.computeMean())) print("covariance=", repr(sample.computeCovariance())) print("standard deviation=", repr(sample.computeStandardDeviation())) print("standard deviation per component=", repr( sample.computeStandardDeviationPerComponent())) print("Pearson correlation=", repr(sample.computePearsonCorrelation())) print("Spearman correlation=", repr(sample.computeSpearmanCorrelation())) print("Kendall tau=", repr(sample.computeKendallTau())) print("range per component=", repr(sample.computeRange())) print("median per component=", repr(sample.computeMedian())) print("Variance=", repr(sample.computeVariance())) print("Skewness=", repr(sample.computeSkewness())) print("Kurtosis=", repr(sample.computeKurtosis())) for i in range(10): print("Centered moment of order ", i, "=", sample.computeCenteredMoment(i)) print("Marginal 1=", repr(sample.getMarginal(1))) indices = Indices(2) indices[0] = 2 indices[1] = 0 print("Marginal [2, 0]=", repr(sample.getMarginal(indices))) print("Rank=", repr(sample.rank())) print("Sort=", repr(sample.sort())) print("Sort according to component 0=", repr( sample.sortAccordingToAComponent(0))) prob = 0.25 print("Quantile per component(", prob, ")=", repr( sample.computeQuantilePerComponent(prob))) pointCDF = Point(sample.getDimension(), 0.25) print( "Empirical CDF(", repr(pointCDF), "=", sample.computeEmpiricalCDF(pointCDF)) dim = 3 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.25 Rtmp = CorrelationMatrix(dim) for i in range(dim): for j in range(i): Rtmp[i, j] = 6.0 * asin(R[i, j] / 2.0) / pi print("Pearson correlation (exact)=", repr(R)) print("Spearman correlation (exact)=", repr(Rtmp)) sample[0] = Point((1, 0, 9)) sample[1] = Point((2, 3, 9)) sample[2] = Point((5, 1, 9)) sample[3] = Point((2, 2, 9)) print("Rank=", repr(sample.rank())) print("Rank component 0=", repr(sample.rank(0))) print("Sort=", repr(sample.sort())) print("Sort according to component 0=", repr( sample.sortAccordingToAComponent(0))) print("Spearman correlation=", repr(sample.computeSpearmanCorrelation())) print("Kendall tau=", repr(sample.computeKendallTau())) size = 10000 normal = Normal(Point(dim, 0.0), Point(dim, 1.0), R) print("Normal=", repr(normal)) print("covariance=", repr(normal.getCovariance())) normalSample = normal.getSample(size) print("Empirical covariance=", repr(normalSample.computeCovariance())) RPearson = normalSample.computePearsonCorrelation() print("Pearson correlation=", repr(RPearson)) RSpearman = normalSample.computeSpearmanCorrelation() print("Spearman correlation=", repr(RSpearman)) print("Unique=", repr(sample.sortUnique())) sample[2] = Point((1, 0, 9)) print("Unique=", repr(sample.sortUnique())) # except TestFailed, ex : except: import sys print("t_Sample_computation.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Sample_csv.expout000066400000000000000000000055771307543307100216260ustar00rootroot00000000000000aSample= class=Sample name=a good sample implementation=class=SampleImplementation name=a good sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample= class=Sample name=a good sample implementation=class=SampleImplementation name=a good sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample= class=Sample name=a good coma separated sample implementation=class=SampleImplementation name=a good coma separated sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample= class=Sample name=a good coma separated sample implementation=class=SampleImplementation name=a good coma separated sample size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] "X1";"X2";"X3";"X4" -1.2000000000000000e+00;2.2999999999999998e+00;3.3999999999999999e+00;-4.5000000000000000e+00 5.5999999999999996e+00;-6.7000000000000002e+00;7.7999999999999998e+00;8.9000000000000004e+00 -1.0000000000000001e-01;3.2000000000000002e+00;5.0999999999999996e+00;7.5000000000000000e+00 import with quotes: class=Sample name=sample.csv implementation=class=SampleImplementation name=sample.csv size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample= class=Sample name=a good sample with spaces implementation=class=SampleImplementation name=a good sample with spaces size=3 dimension=4 description=[X1,X2,X3,X4] data=[[-1.2,2.3,3.4,-4.5],[5.6,-6.7,7.8,8.9],[-0.1,3.2,5.1,7.5]] aSample with bad entries (see log)= class=Sample name=a sample with bad entries implementation=class=SampleImplementation name=a sample with bad entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[0.9,9.8,8.4,5.4]] aSample with bad entries (see log)= class=Sample name=a sample with bad entries implementation=class=SampleImplementation name=a sample with bad entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[0.9,9.8,8.4,5.4]] aSample with missing entries (see log)= class=Sample name=a sample with missing entries implementation=class=SampleImplementation name=a sample with missing entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[6.5,9,7.3,-3.7]] aSample with missing entries (see log)= class=Sample name=a sample with missing entries implementation=class=SampleImplementation name=a sample with missing entries size=2 dimension=4 description=[data_0,data_1,data_2,data_3] data=[[-1.2,2.3,3.4,-4.5],[6.5,9,7.3,-3.7]] aSample with special chars= class=Sample name=sample.csv implementation=class=SampleImplementation name=sample.csv size=2 dimension=3 description=[X1,X2!()#{}%&<=>^$+-*./:\|`?,X3[unit]] data=[[5.6,-6.7,7.8],[-0.1,3.2,7.5]] openturns-1.9/python/test/t_Sample_csv.py000077500000000000000000000056611307543307100207270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from os import getenv TESTPREAMBLE() try: Log.Show(Log.INFO) # 1st sample f = open('sample.csv', 'w') f.write( "X1;X2;X3;X4\n-1.2;2.3;3.4;-4.5\n5.6;-6.7;7.8;8.9\n-0.1;3.2;5.1;7.5\n") f.close() aSample = Sample.ImportFromCSVFile("sample.csv", ';') aSample.setName("a good sample") print("aSample=", repr(aSample)) aSample = Sample.ImportFromTextFile("sample.csv", ";") aSample.setName("a good sample") print("aSample=", repr(aSample)) # 2nd sample f = open('sample.csv', 'w') f.write( "X1,X2,X3,X4\n-1.2,2.3,3.4,-4.5\n5.6,-6.7,7.8,8.9\n-0.1,3.2,5.1,7.5\n") f.close() aSample = Sample.ImportFromCSVFile("sample.csv", ",") aSample.setName("a good coma separated sample") print("aSample=", repr(aSample)) aSample = Sample.ImportFromTextFile("sample.csv", ",") aSample.setName("a good coma separated sample") print("aSample=", repr(aSample)) # export aSample.exportToCSVFile('sample.csv') with open('sample.csv') as f: print((f.read())) # import with quotes in description aSample = Sample.ImportFromTextFile('sample.csv', ';') print('import with quotes:', repr(aSample)) # 3rd sample f = open('sample.csv', 'w') f.write( "X1 X2 X3 X4\n-1.2 2.3 3.4 -4.5\n5.6 -6.7 7.8 8.9\n-0.1 3.2 5.1 7.5\n") f.close() aSample = Sample.ImportFromTextFile("sample.csv") aSample.setName("a good sample with spaces") print("aSample=", repr(aSample)) # 4th sample f = open('sample.csv', 'w') f.write( "-1.2;2.3;3.4;-4.5\n5.6;-xxx;7.8;8.9\n-0.1;3.2;5..1;7.5\n0.9;9.8;8.4;5.4\n") f.close() aSample = Sample.ImportFromCSVFile("sample.csv", ';') aSample.setName("a sample with bad entries") print("aSample with bad entries (see log)=", repr(aSample)) aSample = Sample.ImportFromTextFile("sample.csv", ";") aSample.setName("a sample with bad entries") print("aSample with bad entries (see log)=", repr(aSample)) # 5th sample f = open('sample.csv', 'w') f.write( "-1.2;2.3;3.4;-4.5\n5.6;-6.7;7.8\n-0.1;3.2;;7.5\n6.5;9.0;7.3;-3.7\n") f.close() aSample = Sample.ImportFromCSVFile("sample.csv", ';') aSample.setName("a sample with missing entries") print("aSample with missing entries (see log)=", repr(aSample)) aSample = Sample.ImportFromTextFile("sample.csv", ";") aSample.setName("a sample with missing entries") print("aSample with missing entries (see log)=", repr(aSample)) f = open('sample.csv', 'w') f.write( '"X1";"X2!()#{}%&<=>^$+-*./:\\|`?";"X3[unit]"\n5.6;-6.7;7.8\n-0.1;3.2;7.5 \n') f.close() aSample = Sample.ImportFromCSVFile('sample.csv', ';') print('aSample with special chars=', repr(aSample)) os.remove('sample.csv') except: import sys print("t_Sample_csv.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Sample_large.expout000066400000000000000000000007101307543307100221050ustar00rootroot00000000000000sample= class=Sample name=EmptySample implementation=class=SampleImplementation name=EmptySample size=0 dimension=2 data=[] sample= class=Sample name=SmallSample implementation=class=SampleImplementation name=SmallSample size=1 dimension=2 data=[[0,0]] p= class=Point name=Unnamed dimension=2 values=[0,0] sample first point= class=Point name=Unnamed dimension=2 values=[0,0] sample last point= class=Point name=Unnamed dimension=2 values=[999999,999999] openturns-1.9/python/test/t_Sample_large.py000077500000000000000000000025661307543307100212270ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # We create an empty Sample sample = Sample(0, 2) sample.setName("EmptySample") print("sample=", repr(sample)) try: # We access the element of the sample p = sample[0] print("p=", repr(p)) # We should NEVER go here # no TestFailed available raise # except OutOfBoundException, ex : except: pass # We create an small Sample sample = Sample(1, 2) sample.setName("SmallSample") print("sample=", repr(sample)) # We access the element of the sample p = Point(sample[0]) print("p=", repr(p)) try: # We try to access past the last element of the point p0, p1, p2 = p[0], p[1], p[2] print("p[0]=", p0, " p[1]=", p1, " p[2]=", p2) # We should NEVER go here raise except: pass # We create a big Sample sample = Sample(1000000, 2) sample.setName("BigSample") # We populate the sample for i in range(sample.getSize()): sample[i, 0] = i sample[i, 1] = i print("sample first point=", repr(sample[0])) print("sample last point=", repr(sample[sample.getSize() - 1])) # except TestFailed, ex : except: import sys print("t_Sample_large.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Sample_operators.expout000066400000000000000000000040321307543307100230320ustar00rootroot00000000000000sample1= class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 description=[a0,a1] data=[[10,20],[11,21],[12,22]] sample2= class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 description=[a0,a1] data=[[30,40],[31,41],[32,42]] sample1 + sample2= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 description=[a0,a1] data=[[40,60],[42,62],[44,64]] sample2 - sample1= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 description=[a0,a1] data=[[20,20],[20,20],[20,20]] sample3= class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 description=[a0,a1] data=[[40,60],[42,62],[44,64]] sample4= class=Sample name=Sample2 implementation=class=SampleImplementation name=Sample2 size=3 dimension=2 description=[a0,a1] data=[[20,20],[20,20],[20,20]] sample5 = [ a0 a1 ] 0 : [ 30 40 ] 1 : [ 31 41 ] 2 : [ 32 42 ] sample*2: [ a0 a1 ] 0 : [ 60 80 ] 1 : [ 62 82 ] 2 : [ 64 84 ] sample/2: [ a0 a1 ] 0 : [ 15 20 ] 1 : [ 15.5 20.5 ] 2 : [ 16 21 ] sample*v: [ a0 a1 ] 0 : [ 90 120 ] 1 : [ 93 123 ] 2 : [ 96 126 ] sample/v: [ a0 a1 ] 0 : [ 10 13.3333 ] 1 : [ 10.3333 13.6667 ] 2 : [ 10.6667 14 ] sample*m: [ a0 a1 ] 0 : [ 110 290 ] 1 : [ 113 298 ] 2 : [ 116 306 ] sample/m: [ a0 a1 ] 0 : [ -70 50 ] 1 : [ -73 52 ] 2 : [ -76 54 ] sample+=t: [ a0 a1 ] 0 : [ 35 45 ] 1 : [ 36 46 ] 2 : [ 37 47 ] sample-=t: [ a0 a1 ] 0 : [ 30 40 ] 1 : [ 31 41 ] 2 : [ 32 42 ] sample*=2: [ a0 a1 ] 0 : [ 60 80 ] 1 : [ 62 82 ] 2 : [ 64 84 ] sample/=2: [ a0 a1 ] 0 : [ 30 40 ] 1 : [ 31 41 ] 2 : [ 32 42 ] sample*=v: [ a0 a1 ] 0 : [ 90 120 ] 1 : [ 93 123 ] 2 : [ 96 126 ] sample/=v: [ a0 a1 ] 0 : [ 30 40 ] 1 : [ 31 41 ] 2 : [ 32 42 ] sample*=m: [ a0 a1 ] 0 : [ 110 290 ] 1 : [ 113 298 ] 2 : [ 116 306 ] sample/=m: [ a0 a1 ] 0 : [ 30 40 ] 1 : [ 31 41 ] 2 : [ 32 42 ] openturns-1.9/python/test/t_Sample_operators.py000077500000000000000000000031121307543307100221370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # We create an empty ot.Sample sample1 = ot.Sample(0, 2) sample1.setName('Sample1') sample1.setDescription(['a0', 'a1']) sample1.add([10., 20.]) sample1.add([11., 21.]) sample1.add([12., 22.]) print('sample1=', repr(sample1)) # We create a new empty ot.Sample sample2 = ot.Sample(0, 2) sample2.setName('Sample2') sample2.setDescription(['a0', 'a1']) sample2.add([30., 40.]) sample2.add([31., 41.]) sample2.add([32., 42.]) print('sample2=', repr(sample2)) # Operator +|- summation = ot.Sample(sample1 + sample2) substraction = ot.Sample(sample2 - sample1) print('sample1 + sample2=', repr(summation)) print('sample2 - sample1=', repr(substraction)) # Operator +=|-= sample3 = ot.Sample(sample2) sample4 = ot.Sample(sample2) sample3 += sample1 sample4 -= sample1 print('sample3=', repr(sample3)) print('sample4=', repr(sample4)) sample5 = ot.Sample(sample2) m = ot.SquareMatrix([[1, 2], [3, 5]]) v = ot.Point(2, 3.0) t = ot.Point(2, 5.0) print('sample5 =', sample5) print('sample*2:', sample5 * 2.) print('sample/2:', sample5 / 2.) print('sample*v:', sample5 * v) print('sample/v:', sample5 / v) print('sample*m:', sample5 * m) print('sample/m:', sample5 / m) # in-place sample5 += t print('sample+=t:', sample5) sample5 -= t print('sample-=t:', sample5) sample5 *= 2. print('sample*=2:', sample5) sample5 /= 2. print('sample/=2:', sample5) sample5 *= v print('sample*=v:', sample5) sample5 /= v print('sample/=v:', sample5) sample5 *= m print('sample*=m:', sample5) sample5 /= m print('sample/=m:', sample5) openturns-1.9/python/test/t_Sample_slice.expout000066400000000000000000000133651307543307100221240ustar00rootroot00000000000000sample[-1] [0,0,0,0,0] sample[-1]=-1 [-1,-1,-1,-1,-1] sample= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 203 303 403 503 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] rslice[:]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 203 303 403 503 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] rslice[2:4]= [ V1 V2 V3 V4 V5 ] 0 : [ 102 202 302 402 502 ] 1 : [ 103 203 303 403 503 ] rslice[1:8:2]= [ V1 V2 V3 V4 V5 ] 0 : [ 101 201 301 401 501 ] 1 : [ 103 203 303 403 503 ] 2 : [ 105 205 305 405 505 ] 3 : [ 107 207 307 407 507 ] rslice[:,:]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 203 303 403 503 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] rslice[2:4,2:4]= [ V3 V4 ] 0 : [ 302 402 ] 1 : [ 303 403 ] rslice[1:8:2,1:5:3]= [ V2 V5 ] 0 : [ 201 501 ] 1 : [ 203 503 ] 2 : [ 205 505 ] 3 : [ 207 507 ] rslice[:,3]= [ V4 ] 0 : [ 400 ] 1 : [ 401 ] 2 : [ 402 ] 3 : [ 403 ] 4 : [ 404 ] 5 : [ 405 ] 6 : [ 406 ] 7 : [ 407 ] 8 : [ 408 ] 9 : [ 409 ] rslice[2:7:2,3]= [ V4 ] 0 : [ 402 ] 1 : [ 404 ] 2 : [ 406 ] rslice[3,:]= [103,203,303,403,503] rslice[3,1:4:2]= [203,403] rslice[3,4]= 503.0 wrslice[:]= [ V1 V2 V3 V4 V5 ] 0 : [ 1000 2000 3000 4000 5000 ] 1 : [ 1010 2010 3010 4010 5010 ] 2 : [ 1020 2020 3020 4020 5020 ] 3 : [ 1030 2030 3030 4030 5030 ] 4 : [ 1040 2040 3040 4040 5040 ] 5 : [ 1050 2050 3050 4050 5050 ] 6 : [ 1060 2060 3060 4060 5060 ] 7 : [ 1070 2070 3070 4070 5070 ] 8 : [ 1080 2080 3080 4080 5080 ] 9 : [ 1090 2090 3090 4090 5090 ] wslice[2:4]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 1020 2020 3020 4020 5020 ] 3 : [ 1030 2030 3030 4030 5030 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[1:8:2]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 1010 2010 3010 4010 5010 ] 2 : [ 102 202 302 402 502 ] 3 : [ 1030 2030 3030 4030 5030 ] 4 : [ 104 204 304 404 504 ] 5 : [ 1050 2050 3050 4050 5050 ] 6 : [ 106 206 306 406 506 ] 7 : [ 1070 2070 3070 4070 5070 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wrslice[:,:]= [ V1 V2 V3 V4 V5 ] 0 : [ 1000 2000 3000 4000 5000 ] 1 : [ 1010 2010 3010 4010 5010 ] 2 : [ 1020 2020 3020 4020 5020 ] 3 : [ 1030 2030 3030 4030 5030 ] 4 : [ 1040 2040 3040 4040 5040 ] 5 : [ 1050 2050 3050 4050 5050 ] 6 : [ 1060 2060 3060 4060 5060 ] 7 : [ 1070 2070 3070 4070 5070 ] 8 : [ 1080 2080 3080 4080 5080 ] 9 : [ 1090 2090 3090 4090 5090 ] wslice[2:4,2:4]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 3020 4020 502 ] 3 : [ 103 203 3030 4030 503 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[1:8:2,1:5:3]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 2010 301 401 5010 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 2030 303 403 5030 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 2050 305 405 5050 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 2070 307 407 5070 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[:,3]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 4000 500 ] 1 : [ 101 201 301 4010 501 ] 2 : [ 102 202 302 4020 502 ] 3 : [ 103 203 303 4030 503 ] 4 : [ 104 204 304 4040 504 ] 5 : [ 105 205 305 4050 505 ] 6 : [ 106 206 306 4060 506 ] 7 : [ 107 207 307 4070 507 ] 8 : [ 108 208 308 4080 508 ] 9 : [ 109 209 309 4090 509 ] wslice[2:7:2,3]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 4020 502 ] 3 : [ 103 203 303 403 503 ] 4 : [ 104 204 304 4040 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 4060 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[3,:]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 1030 2030 3030 4030 5030 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[3,1:4:2]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 2030 303 4030 503 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] wslice[3,4]= [ V1 V2 V3 V4 V5 ] 0 : [ 100 200 300 400 500 ] 1 : [ 101 201 301 401 501 ] 2 : [ 102 202 302 402 502 ] 3 : [ 103 203 303 403 5030 ] 4 : [ 104 204 304 404 504 ] 5 : [ 105 205 305 405 505 ] 6 : [ 106 206 306 406 506 ] 7 : [ 107 207 307 407 507 ] 8 : [ 108 208 308 408 508 ] 9 : [ 109 209 309 409 509 ] openturns-1.9/python/test/t_Sample_slice.py000077500000000000000000000043541307543307100212310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # We create an empty sample N = 10 d = 5 sample = ot.Sample(N, d) print('sample[-1]', sample[-1]) sample[-1] = [-1.] * d print('sample[-1]=-1', sample[-1]) # We populate the empty sample with numerous data for i in range(N): for j in range(d): sample[i, j] = 100. * (j + 1) + i description = [] for j in range(d): description.append('V' + str(j + 1)) sample.setDescription(description) print('sample=', str(sample)) # case #0 [slice] print('rslice[:]=', sample[:]) print('rslice[2:4]=', sample[2:4]) print('rslice[1:8:2]=', sample[1:8:2]) # case #1 [slice/slice] print('rslice[:,:]=', sample[:, :]) print('rslice[2:4,2:4]=', sample[2:4, 2:4]) print('rslice[1:8:2,1:5:3]=', sample[1:8:2, 1:5:3]) # case #2 [slice/index] print('rslice[:,3]=', sample[:, 3]) print('rslice[2:7:2,3]=', sample[2:7:2, 3]) # case #3 [index/slice] print('rslice[3,:]=', sample[3, :]) print('rslice[3,1:4:2]=', sample[3, 1:4:2]) # case #4 [index/index] print('rslice[3,4]=', sample[3, 4]) # Writing slice sample2 = ot.Sample(sample) sample2 *= [10.] * d # case #0 [slice] sample3 = ot.Sample(sample) sample3[:] = sample2 print("wrslice[:]=", sample3) sample3 = ot.Sample(sample) sample3[2:4] = sample2[2:4] print('wslice[2:4]=', sample3) sample3 = ot.Sample(sample) sample3[1:8:2] = sample2[1:8:2] print('wslice[1:8:2]=', sample3) # case #1 [slice/slice] sample3 = ot.Sample(sample) sample3[:, :] = sample2 print("wrslice[:,:]=", sample3) sample3 = ot.Sample(sample) sample3[2:4, 2:4] = sample2[2:4, 2:4] print('wslice[2:4,2:4]=', sample3) sample3 = ot.Sample(sample) sample3[1:8:2, 1:5:3] = sample2[1:8:2, 1:5:3] print('wslice[1:8:2,1:5:3]=', sample3) # case #2 [slice/index] sample3 = ot.Sample(sample) sample3[:, 3] = sample2[:, 3] print('wslice[:,3]=', sample3) sample3 = ot.Sample(sample) sample3[2:7:2, 3] = sample2[2:7:2, 3] print('wslice[2:7:2,3]=', sample3) # case #3 [index/slice] sample3 = ot.Sample(sample) sample3[3, :] = sample2[3, :] print('wslice[3,:]=', sample3) sample3 = ot.Sample(sample) sample3[3, 1:4:2] = sample2[3, 1:4:2] print('wslice[3,1:4:2]=', sample3) # case #4 [index/index] sample3 = ot.Sample(sample) sample3[3, 4] = sample2[3, 4] print('wslice[3,4]=', sample3) openturns-1.9/python/test/t_Sample_split.expout000066400000000000000000000055101307543307100221510ustar00rootroot00000000000000Sample size= 100 sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[1000,2000],[1001,2001],[1002,2002],[1003,2003],[1004,2004],[1005,2005],[1006,2006],[1007,2007],[1008,2008],[1009,2009],[1010,2010],[1011,2011],[1012,2012],[1013,2013],[1014,2014],[1015,2015],[1016,2016],[1017,2017],[1018,2018],[1019,2019],[1020,2020],[1021,2021],[1022,2022],[1023,2023],[1024,2024],[1025,2025],[1026,2026],[1027,2027],[1028,2028],[1029,2029],[1030,2030],[1031,2031],[1032,2032],[1033,2033],[1034,2034],[1035,2035],[1036,2036],[1037,2037],[1038,2038],[1039,2039],[1040,2040],[1041,2041],[1042,2042],[1043,2043],[1044,2044],[1045,2045],[1046,2046],[1047,2047],[1048,2048],[1049,2049],[1050,2050],[1051,2051],[1052,2052],[1053,2053],[1054,2054],[1055,2055],[1056,2056],[1057,2057],[1058,2058],[1059,2059],[1060,2060],[1061,2061],[1062,2062],[1063,2063],[1064,2064],[1065,2065],[1066,2066],[1067,2067],[1068,2068],[1069,2069],[1070,2070],[1071,2071],[1072,2072],[1073,2073],[1074,2074],[1075,2075],[1076,2076],[1077,2077],[1078,2078],[1079,2079],[1080,2080],[1081,2081],[1082,2082],[1083,2083],[1084,2084],[1085,2085],[1086,2086],[1087,2087],[1088,2088],[1089,2089],[1090,2090],[1091,2091],[1092,2092],[1093,2093],[1094,2094],[1095,2095],[1096,2096],[1097,2097],[1098,2098],[1099,2099]] sample = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1000,2000],[1001,2001],[1002,2002],[1003,2003],[1004,2004],[1005,2005],[1006,2006],[1007,2007],[1008,2008],[1009,2009]] sample10= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[1010,2010],[1011,2011],[1012,2012],[1013,2013],[1014,2014],[1015,2015],[1016,2016],[1017,2017],[1018,2018],[1019,2019],[1020,2020],[1021,2021],[1022,2022],[1023,2023],[1024,2024],[1025,2025],[1026,2026],[1027,2027],[1028,2028],[1029,2029],[1030,2030],[1031,2031],[1032,2032],[1033,2033],[1034,2034],[1035,2035],[1036,2036],[1037,2037],[1038,2038],[1039,2039],[1040,2040],[1041,2041],[1042,2042],[1043,2043],[1044,2044],[1045,2045],[1046,2046],[1047,2047],[1048,2048],[1049,2049],[1050,2050],[1051,2051],[1052,2052],[1053,2053],[1054,2054],[1055,2055],[1056,2056],[1057,2057],[1058,2058],[1059,2059],[1060,2060],[1061,2061],[1062,2062],[1063,2063],[1064,2064],[1065,2065],[1066,2066],[1067,2067],[1068,2068],[1069,2069],[1070,2070],[1071,2071],[1072,2072],[1073,2073],[1074,2074],[1075,2075],[1076,2076],[1077,2077],[1078,2078],[1079,2079],[1080,2080],[1081,2081],[1082,2082],[1083,2083],[1084,2084],[1085,2085],[1086,2086],[1087,2087],[1088,2088],[1089,2089]] sample90= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1090,2090],[1091,2091],[1092,2092],[1093,2093],[1094,2094],[1095,2095],[1096,2096],[1097,2097],[1098,2098],[1099,2099]] openturns-1.9/python/test/t_Sample_split.py000077500000000000000000000014061307543307100212600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # We create an empty Sample N = 100 sample = Sample(N, 2) print("Sample size=", sample.getSize()) # We populate the empty sample with numerous data for i in range(N): point = Point(2) point[0] = 1000 + i point[1] = 2000 + i sample[i] = point print("sample=", repr(sample)) # We try to split the sample sample90 = sample.split(90) sample10 = sample.split(10) print("sample =", repr(sample)) print("sample10=", repr(sample10)) print("sample90=", repr(sample90)) # except TestFailed, ex : except: import sys print("t_Sample_split.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Sample_std.expout000066400000000000000000000034241307543307100216120ustar00rootroot00000000000000sample1= class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 description=[a0,a1] data=[[10,20],[11,21],[12,22]] second element= class=Point name=Unnamed dimension=2 values=[11,21] sample1= class=Sample name=Sample1 implementation=class=SampleImplementation name=Sample1 size=3 dimension=2 description=[a0,a1] data=[[10,20],[11,21],[1000,2000]] sample2= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[10,20],[10,20],[10,20],[10,20],[10,20],[10,20],[10,20],[10,20],[10,20],[10,20]] sample2= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[10,20],[10,20],[10,20],[10,20],[10,20],[11,21],[10,20],[10,20],[10,20],[10,20]] sample3= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=5 dimension=3 data=[[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000]] sample3= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=3 data=[[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[-1000,-2000,-3000]] sample3= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=3 data=[[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[-1000,-2000,-3000],[1000,2000,3000]] sample3= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=6 dimension=3 data=[[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000],[1000,2000,3000]] sample4= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=4 dimension=2 data=[[10,20],[11,21],[10,20],[10,20]] openturns-1.9/python/test/t_Sample_std.py000077500000000000000000000044121307543307100207170ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # We create an empty Sample sample1 = Sample(0, 2) sample1.setName("Sample1") sample1.setDescription(('a0', 'a1')) # We populate the empty sample point1 = Point(2) point1[0] = 10. point1[1] = 20. point2 = Point(2) point2[0] = 11. point2[1] = 21. point3 = Point(2) point3[0] = 12. point3[1] = 22. sample1.add(point1) sample1.add(point2) sample1.add(point3) print("sample1=", repr(sample1)) # We get the second element of the sample secondElement = sample1[1] print("second element=", repr(secondElement)) # We set the third element to a valid new element newPoint = Point(2) newPoint[0] = 1000 newPoint[1] = 2000 sample1[2] = newPoint print("sample1=", repr(sample1)) sample2 = Sample(10, point1) print("sample2=", repr(sample2)) sample2[5] = point2 print("sample2=", repr(sample2)) try: # We get the tenth element of the sample # THIS SHOULD NORMALLY FAIL tenthElement = sample1[9] # Normally, we should never go here raise except: pass # We try to create a sample with 5 times the same point samePoint = Point(3) samePoint[0] = 1000. samePoint[1] = 2000. samePoint[2] = 3000. sample3 = Sample(5, samePoint) print("sample3=", repr(sample3)) # We append a new point to the sample... anotherNewPoint = Point(3) anotherNewPoint[0] = -1000. anotherNewPoint[1] = -2000. anotherNewPoint[2] = -3000. sample3.add(anotherNewPoint) print("sample3=", repr(sample3)) #... then the first point again sample3.add(samePoint) print("sample3=", repr(sample3)) # We find the new point into the sample pos = sample3.find(anotherNewPoint) if (pos != 5): print("Error in finding point into sample. Expected 5. Got ", pos) # We erase the new point from the sample sample3.erase(pos) print("sample3=", repr(sample3)) # Partial copy constructor containing sample2[4:7] sample4 = Sample(sample2, 4, 8) print("sample4=", repr(sample4)) except: import sys print("t_Sample_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Secant_std.expout000066400000000000000000000006131307543307100216030ustar00rootroot00000000000000myAlgo= class=Secant derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=0 Solve x-cos(x) =0.00000 for x x=0.73908 myAlgo= class=Secant derived from class=SolverImplementation absoluteError=1e-05 relativeError=1e-05 residualError=1e-08 maximumFunctionEvaluation=100 usedFunctionEvaluation=7 openturns-1.9/python/test/t_Secant_std.py000077500000000000000000000012741307543307100207160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Analytical construction */ input = Description(1) input[0] = "x" output = Description(1) output[0] = "y" formulas = Description(output.getSize()) formulas[0] = "x-cos(x)" analytical = Function(input, output, formulas) myAlgo = Secant() print("myAlgo=", myAlgo) value = 0.0 print("Solve ", formulas[0], "=%.5f" % value, " for ", input[0]) print("x=%.5f" % myAlgo.solve(analytical, value, 0.0, 3.0)) print("myAlgo=", myAlgo) except: import sys print("t_Secant_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SecondOrderModel_std.expout000066400000000000000000000041331307543307100235570ustar00rootroot00000000000000myCovarianceModel = ExponentialModel(scale=[1], amplitude=[1], no spatial correlation) mySpectralModel = class=CauchyModel amplitude=[1] scale=[1] no spatial correlation myModel = class=SecondOrderModel implementation=class= SecondOrderModelImplementationExponentialModel(scale=[1], amplitude=[1], no spatial correlation)class=CauchyModel amplitude=[1] scale=[1] no spatial correlation covariance matrix at t = 1.0 : [[ 0.367879 ]] covariance matrix at t = -1.0 : [[ 0.367879 ]] spectral density at f = 0.5 : [[ (0.183999,0) ]] discretized covariance over the time grid = RegularGrid(start=0, step=1, n=11) is 11x11 [[ 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 0.00247875 0.000911882 0.000335463 0.00012341 4.53999e-05 ] [ 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 0.00247875 0.000911882 0.000335463 0.00012341 ] [ 0.135335 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 0.00247875 0.000911882 0.000335463 ] [ 0.0497871 0.135335 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 0.00247875 0.000911882 ] [ 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 0.00247875 ] [ 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 0.00673795 ] [ 0.00247875 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 0.135335 0.0497871 0.0183156 ] [ 0.000911882 0.00247875 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 0.135335 0.0497871 ] [ 0.000335463 0.000911882 0.00247875 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 0.135335 ] [ 0.00012341 0.000335463 0.000911882 0.00247875 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 0.367879 ] [ 4.53999e-05 0.00012341 0.000335463 0.000911882 0.00247875 0.00673795 0.0183156 0.0497871 0.135335 0.367879 1 ]] openturns-1.9/python/test/t_SecondOrderModel_std.py000077500000000000000000000027621307543307100226740ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model dimension = 1 spatialDimension = 1 # Amplitude values amplitude = Point(dimension, 1.0) # Scale values scale = Point(dimension, 1.0) # Covariance model myCovarianceModel = ExponentialModel(scale, amplitude) print("myCovarianceModel = ", myCovarianceModel) # Spectral model mySpectralModel = CauchyModel(scale, amplitude) print("mySpectralModel = ", mySpectralModel) # We build the second order model using covariance and spectral models myModel = SecondOrderModel(myCovarianceModel, mySpectralModel) print("myModel = ", myModel) # Some computations ==> call the sub models methods instant = 1.0 frequency = 0.5 # print("covariance matrix at t = ", instant, " : ", myModel.computeCovariance(instant)) print("covariance matrix at t = ", -1.0 * instant, " : ", myModel.computeCovariance(-1.0 * instant)) print("spectral density at f = ", frequency, " : ", myModel.computeSpectralDensity(frequency)) # Discretize the process on a small time grid timeGrid = RegularGrid(0.0, 1.0, 11) print("discretized covariance over the time grid = ", timeGrid, " is ") print(myModel.discretize(timeGrid)) except: import sys print("t_SecondOrderModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SimulatedAnnealingLHS_std.expout000066400000000000000000000324031307543307100245030ustar00rootroot00000000000000lhs= LHSExperiment(distribution=class=ComposedDistribution name=ComposedDistribution dimension=3 copula=class=IndependentCopula name=IndependentCopula dimension=3 marginal[0]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[1]=class=Uniform name=Uniform dimension=1 a=0 b=1 marginal[2]=class=Uniform name=Uniform dimension=1 a=0 b=1, size25, always shuffle=true, random shift=false Bounds of uniform distributions= [0, 1] [0, 1] [0, 1] design= [ X0 X1 X2 ] 0 : [ 0.18 0.86 0.26 ] 1 : [ 0.66 0.22 0.62 ] 2 : [ 0.98 0.34 0.86 ] 3 : [ 0.7 0.26 0.74 ] 4 : [ 0.94 0.54 0.54 ] 5 : [ 0.22 0.66 0.5 ] 6 : [ 0.86 0.9 0.1 ] 7 : [ 0.74 0.1 0.38 ] 8 : [ 0.46 0.78 0.3 ] 9 : [ 0.82 0.7 0.82 ] 10 : [ 0.26 0.62 0.02 ] 11 : [ 0.54 0.06 0.34 ] 12 : [ 0.1 0.58 0.7 ] 13 : [ 0.9 0.74 0.14 ] 14 : [ 0.02 0.3 0.78 ] 15 : [ 0.58 0.14 0.46 ] 16 : [ 0.78 0.46 0.94 ] 17 : [ 0.3 0.42 0.9 ] 18 : [ 0.5 0.5 0.58 ] 19 : [ 0.38 0.82 0.06 ] 20 : [ 0.42 0.02 0.98 ] 21 : [ 0.14 0.98 0.42 ] 22 : [ 0.34 0.18 0.18 ] 23 : [ 0.06 0.94 0.22 ] 24 : [ 0.62 0.38 0.66 ] PhiP=7.538512, C2=0.080495 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingC2 minimization=true profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.95 iMax=2000 Generating design using geometric temperature profile & C2 criterion= [ X0 X1 X2 ] 0 : [ 0.06 0.1 0.3 ] 1 : [ 0.26 0.82 0.26 ] 2 : [ 0.34 0.62 0.74 ] 3 : [ 0.3 0.22 0.42 ] 4 : [ 0.22 0.18 0.9 ] 5 : [ 0.86 0.66 0.38 ] 6 : [ 0.78 0.94 0.22 ] 7 : [ 0.98 0.38 0.18 ] 8 : [ 0.46 0.34 0.82 ] 9 : [ 0.94 0.78 0.94 ] 10 : [ 0.58 0.42 0.98 ] 11 : [ 0.38 0.3 0.06 ] 12 : [ 0.02 0.46 0.62 ] 13 : [ 0.14 0.58 0.14 ] 14 : [ 0.82 0.06 0.78 ] 15 : [ 0.42 0.98 0.46 ] 16 : [ 0.74 0.54 0.7 ] 17 : [ 0.1 0.9 0.86 ] 18 : [ 0.9 0.26 0.58 ] 19 : [ 0.18 0.74 0.54 ] 20 : [ 0.66 0.5 0.34 ] 21 : [ 0.7 0.14 0.1 ] 22 : [ 0.62 0.86 0.66 ] 23 : [ 0.5 0.02 0.5 ] 24 : [ 0.54 0.7 0.02 ] Final criteria: C2=0.039557, PhiP=4.642392, MinDist=0.215407 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=10 profile=class=TemperatureProfile implementation=class=LinearProfile name=Unnamed T0=10 iMax=2000 Generating design using linear temperature profile & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.74 0.58 0.46 ] 1 : [ 0.82 0.42 0.22 ] 2 : [ 0.7 0.86 0.14 ] 3 : [ 0.94 0.06 0.86 ] 4 : [ 0.78 0.14 0.74 ] 5 : [ 0.62 0.7 0.1 ] 6 : [ 0.54 0.98 0.9 ] 7 : [ 0.18 0.18 0.54 ] 8 : [ 0.86 0.62 0.98 ] 9 : [ 0.14 0.54 0.62 ] 10 : [ 0.06 0.38 0.82 ] 11 : [ 0.46 0.82 0.02 ] 12 : [ 0.42 0.02 0.3 ] 13 : [ 0.5 0.3 0.18 ] 14 : [ 0.98 0.9 0.7 ] 15 : [ 0.38 0.46 0.58 ] 16 : [ 0.26 0.78 0.34 ] 17 : [ 0.3 0.26 0.06 ] 18 : [ 0.02 0.5 0.26 ] 19 : [ 0.34 0.22 0.38 ] 20 : [ 0.22 0.74 0.78 ] 21 : [ 0.9 0.1 0.5 ] 22 : [ 0.1 0.66 0.42 ] 23 : [ 0.58 0.34 0.94 ] 24 : [ 0.66 0.94 0.66 ] Final criteria: C2=0.057259, PhiP=5.455553, MinDist=0.183303 lhs= class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=3 lower bound=class=Point name=Unnamed dimension=3 values=[0,0,0] upper bound=class=Point name=Unnamed dimension=3 values=[1,1,1] finite lower bound=[1,1,1] finite upper bound=[1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=10 profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.95 iMax=2000 initial design= [ X0 X1 X2 ] 0 : [ 0.74 0.58 0.46 ] 1 : [ 0.82 0.42 0.22 ] 2 : [ 0.7 0.86 0.14 ] 3 : [ 0.94 0.06 0.86 ] 4 : [ 0.78 0.14 0.74 ] 5 : [ 0.62 0.7 0.1 ] 6 : [ 0.54 0.98 0.9 ] 7 : [ 0.18 0.18 0.54 ] 8 : [ 0.86 0.62 0.98 ] 9 : [ 0.14 0.54 0.62 ] 10 : [ 0.06 0.38 0.82 ] 11 : [ 0.46 0.82 0.02 ] 12 : [ 0.42 0.02 0.3 ] 13 : [ 0.5 0.3 0.18 ] 14 : [ 0.98 0.9 0.7 ] 15 : [ 0.38 0.46 0.58 ] 16 : [ 0.26 0.78 0.34 ] 17 : [ 0.3 0.26 0.06 ] 18 : [ 0.02 0.5 0.26 ] 19 : [ 0.34 0.22 0.38 ] 20 : [ 0.22 0.74 0.78 ] 21 : [ 0.9 0.1 0.5 ] 22 : [ 0.1 0.66 0.42 ] 23 : [ 0.58 0.34 0.94 ] 24 : [ 0.66 0.94 0.66 ] PhiP=5.455553, C2=0.057259 Generating design using linear temperature profile & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.14 0.3 0.22 ] 1 : [ 0.1 0.14 0.62 ] 2 : [ 0.78 0.1 0.26 ] 3 : [ 0.42 0.46 0.06 ] 4 : [ 0.9 0.54 0.74 ] 5 : [ 0.06 0.82 0.46 ] 6 : [ 0.86 0.78 0.38 ] 7 : [ 0.58 0.66 0.5 ] 8 : [ 0.02 0.62 0.86 ] 9 : [ 0.22 0.5 0.58 ] 10 : [ 0.26 0.18 0.94 ] 11 : [ 0.18 0.86 0.02 ] 12 : [ 0.5 0.42 0.82 ] 13 : [ 0.54 0.34 0.42 ] 14 : [ 0.82 0.22 0.9 ] 15 : [ 0.66 0.94 0.14 ] 16 : [ 0.46 0.74 0.98 ] 17 : [ 0.62 0.06 0.66 ] 18 : [ 0.34 0.98 0.7 ] 19 : [ 0.38 0.02 0.34 ] 20 : [ 0.94 0.26 0.54 ] 21 : [ 0.74 0.58 0.1 ] 22 : [ 0.3 0.7 0.3 ] 23 : [ 0.7 0.9 0.78 ] 24 : [ 0.98 0.38 0.18 ] Final criteria: C2=0.045191, PhiP=3.222263, MinDist=0.312410 Generating design using linear temperature profile & PhiP criterion = [ X0 X1 X2 ] 0 : [ 0.86 0.38 0.9 ] 1 : [ 0.7 0.58 0.66 ] 2 : [ 0.74 0.22 0.1 ] 3 : [ 0.94 0.74 0.18 ] 4 : [ 0.18 0.82 0.14 ] 5 : [ 0.9 0.86 0.58 ] 6 : [ 0.66 0.1 0.78 ] 7 : [ 0.5 0.18 0.38 ] 8 : [ 0.54 0.98 0.62 ] 9 : [ 0.1 0.5 0.22 ] 10 : [ 0.98 0.42 0.42 ] 11 : [ 0.78 0.78 0.98 ] 12 : [ 0.26 0.02 0.74 ] 13 : [ 0.06 0.46 0.82 ] 14 : [ 0.58 0.9 0.26 ] 15 : [ 0.14 0.94 0.7 ] 16 : [ 0.02 0.14 0.3 ] 17 : [ 0.62 0.54 0.34 ] 18 : [ 0.22 0.3 0.54 ] 19 : [ 0.46 0.62 0.02 ] 20 : [ 0.82 0.06 0.46 ] 21 : [ 0.3 0.66 0.5 ] 22 : [ 0.38 0.7 0.94 ] 23 : [ 0.42 0.34 0.86 ] 24 : [ 0.34 0.26 0.06 ] Final criteria: C2=0.045505, PhiP=3.054091, MinDist=0.332265 Intermediate design for restart iteration number 0 [ X0 X1 X2 ] 0 : [ 0.78 0.9 0.5 ] 1 : [ 0.42 0.3 0.86 ] 2 : [ 0.74 0.1 0.9 ] 3 : [ 0.7 0.5 0.78 ] 4 : [ 0.14 0.86 0.74 ] 5 : [ 0.58 0.46 0.38 ] 6 : [ 0.66 0.06 0.3 ] 7 : [ 0.18 0.02 0.7 ] 8 : [ 0.1 0.74 0.18 ] 9 : [ 0.26 0.54 0.62 ] 10 : [ 0.94 0.58 0.54 ] 11 : [ 0.06 0.34 0.82 ] 12 : [ 0.46 0.66 0.06 ] 13 : [ 0.86 0.18 0.58 ] 14 : [ 0.98 0.62 0.94 ] 15 : [ 0.54 0.98 0.22 ] 16 : [ 0.02 0.42 0.34 ] 17 : [ 0.62 0.26 0.02 ] 18 : [ 0.9 0.38 0.26 ] 19 : [ 0.34 0.22 0.46 ] 20 : [ 0.3 0.14 0.14 ] 21 : [ 0.5 0.82 0.66 ] 22 : [ 0.38 0.7 0.98 ] 23 : [ 0.82 0.78 0.1 ] 24 : [ 0.22 0.94 0.42 ] Final criteria: C2=0.045937, PhiP=3.096597, MinDist=0.332265 Intermediate design for restart iteration number 1 [ X0 X1 X2 ] 0 : [ 0.1 0.9 0.5 ] 1 : [ 0.66 0.74 0.22 ] 2 : [ 0.14 0.22 0.34 ] 3 : [ 0.38 0.86 0.14 ] 4 : [ 0.86 0.1 0.26 ] 5 : [ 0.94 0.62 0.06 ] 6 : [ 0.3 0.14 0.74 ] 7 : [ 0.34 0.66 0.98 ] 8 : [ 0.82 0.7 0.7 ] 9 : [ 0.54 0.42 0.18 ] 10 : [ 0.98 0.38 0.78 ] 11 : [ 0.58 0.54 0.54 ] 12 : [ 0.06 0.78 0.82 ] 13 : [ 0.9 0.46 0.38 ] 14 : [ 0.78 0.98 0.46 ] 15 : [ 0.74 0.18 0.58 ] 16 : [ 0.26 0.5 0.66 ] 17 : [ 0.22 0.3 0.02 ] 18 : [ 0.7 0.94 0.94 ] 19 : [ 0.42 0.82 0.62 ] 20 : [ 0.5 0.06 0.1 ] 21 : [ 0.02 0.34 0.86 ] 22 : [ 0.46 0.02 0.42 ] 23 : [ 0.62 0.26 0.9 ] 24 : [ 0.18 0.58 0.3 ] Final criteria: C2=0.047119, PhiP=3.200459, MinDist=0.314960 Intermediate design for restart iteration number 2 [ X0 X1 X2 ] 0 : [ 0.66 0.7 0.34 ] 1 : [ 0.86 0.42 0.38 ] 2 : [ 0.7 0.74 0.66 ] 3 : [ 0.9 0.94 0.22 ] 4 : [ 0.22 0.1 0.62 ] 5 : [ 0.02 0.18 0.14 ] 6 : [ 0.98 0.54 0.74 ] 7 : [ 0.74 0.62 0.02 ] 8 : [ 0.58 0.34 0.06 ] 9 : [ 0.34 0.58 0.42 ] 10 : [ 0.26 0.46 0.82 ] 11 : [ 0.5 0.06 0.3 ] 12 : [ 0.1 0.66 0.1 ] 13 : [ 0.18 0.82 0.94 ] 14 : [ 0.82 0.02 0.46 ] 15 : [ 0.46 0.14 0.9 ] 16 : [ 0.54 0.26 0.54 ] 17 : [ 0.42 0.98 0.7 ] 18 : [ 0.78 0.22 0.78 ] 19 : [ 0.62 0.5 0.98 ] 20 : [ 0.94 0.9 0.86 ] 21 : [ 0.38 0.86 0.18 ] 22 : [ 0.3 0.3 0.26 ] 23 : [ 0.14 0.78 0.58 ] 24 : [ 0.06 0.38 0.5 ] Final criteria: C2=0.048239, PhiP=3.247425, MinDist=0.314960 Intermediate design for restart iteration number 3 [ X0 X1 X2 ] 0 : [ 0.66 0.98 0.38 ] 1 : [ 0.02 0.3 0.74 ] 2 : [ 0.94 0.62 0.9 ] 3 : [ 0.46 0.82 0.06 ] 4 : [ 0.78 0.1 0.3 ] 5 : [ 0.62 0.22 0.98 ] 6 : [ 0.86 0.34 0.02 ] 7 : [ 0.06 0.7 0.54 ] 8 : [ 0.14 0.46 0.18 ] 9 : [ 0.18 0.9 0.26 ] 10 : [ 0.58 0.54 0.78 ] 11 : [ 0.82 0.74 0.14 ] 12 : [ 0.42 0.66 0.34 ] 13 : [ 0.7 0.94 0.86 ] 14 : [ 0.22 0.02 0.82 ] 15 : [ 0.1 0.18 0.42 ] 16 : [ 0.26 0.58 0.94 ] 17 : [ 0.3 0.42 0.58 ] 18 : [ 0.9 0.26 0.7 ] 19 : [ 0.98 0.78 0.5 ] 20 : [ 0.54 0.14 0.62 ] 21 : [ 0.38 0.06 0.22 ] 22 : [ 0.5 0.38 0.1 ] 23 : [ 0.34 0.86 0.66 ] 24 : [ 0.74 0.5 0.46 ] Final criteria: C2=0.046129, PhiP=3.091662, MinDist=0.324962 Intermediate design for restart iteration number 4 [ X0 X1 X2 ] 0 : [ 0.86 0.38 0.9 ] 1 : [ 0.7 0.58 0.66 ] 2 : [ 0.74 0.22 0.1 ] 3 : [ 0.94 0.74 0.18 ] 4 : [ 0.18 0.82 0.14 ] 5 : [ 0.9 0.86 0.58 ] 6 : [ 0.66 0.1 0.78 ] 7 : [ 0.5 0.18 0.38 ] 8 : [ 0.54 0.98 0.62 ] 9 : [ 0.1 0.5 0.22 ] 10 : [ 0.98 0.42 0.42 ] 11 : [ 0.78 0.78 0.98 ] 12 : [ 0.26 0.02 0.74 ] 13 : [ 0.06 0.46 0.82 ] 14 : [ 0.58 0.9 0.26 ] 15 : [ 0.14 0.94 0.7 ] 16 : [ 0.02 0.14 0.3 ] 17 : [ 0.62 0.54 0.34 ] 18 : [ 0.22 0.3 0.54 ] 19 : [ 0.46 0.62 0.02 ] 20 : [ 0.82 0.06 0.46 ] 21 : [ 0.3 0.66 0.5 ] 22 : [ 0.38 0.7 0.94 ] 23 : [ 0.42 0.34 0.86 ] 24 : [ 0.34 0.26 0.06 ] Final criteria: C2=0.045505, PhiP=3.054091, MinDist=0.332265 Intermediate design for restart iteration number 5 [ X0 X1 X2 ] 0 : [ 0.86 0.38 0.94 ] 1 : [ 0.78 0.78 0.82 ] 2 : [ 0.74 0.26 0.06 ] 3 : [ 0.9 0.5 0.58 ] 4 : [ 0.1 0.7 0.9 ] 5 : [ 0.18 0.1 0.46 ] 6 : [ 0.54 0.14 0.38 ] 7 : [ 0.62 0.82 0.5 ] 8 : [ 0.26 0.18 0.1 ] 9 : [ 0.14 0.3 0.86 ] 10 : [ 0.66 0.66 0.14 ] 11 : [ 0.06 0.86 0.54 ] 12 : [ 0.42 0.02 0.74 ] 13 : [ 0.94 0.22 0.34 ] 14 : [ 0.3 0.58 0.62 ] 15 : [ 0.02 0.42 0.42 ] 16 : [ 0.34 0.9 0.22 ] 17 : [ 0.46 0.94 0.78 ] 18 : [ 0.5 0.54 0.98 ] 19 : [ 0.38 0.46 0.3 ] 20 : [ 0.22 0.62 0.02 ] 21 : [ 0.7 0.98 0.18 ] 22 : [ 0.98 0.74 0.26 ] 23 : [ 0.58 0.34 0.7 ] 24 : [ 0.82 0.06 0.66 ] Final criteria: C2=0.046928, PhiP=3.089224, MinDist=0.324962 Intermediate design for restart iteration number 6 [ X0 X1 X2 ] 0 : [ 0.7 0.46 0.02 ] 1 : [ 0.82 0.14 0.86 ] 2 : [ 0.46 0.26 0.26 ] 3 : [ 0.22 0.54 0.34 ] 4 : [ 0.42 0.78 0.94 ] 5 : [ 0.02 0.94 0.78 ] 6 : [ 0.06 0.34 0.14 ] 7 : [ 0.62 0.5 0.9 ] 8 : [ 0.14 0.62 0.82 ] 9 : [ 0.9 0.98 0.46 ] 10 : [ 0.98 0.38 0.3 ] 11 : [ 0.58 0.86 0.58 ] 12 : [ 0.34 0.3 0.98 ] 13 : [ 0.78 0.18 0.5 ] 14 : [ 0.54 0.9 0.22 ] 15 : [ 0.94 0.74 0.1 ] 16 : [ 0.5 0.06 0.66 ] 17 : [ 0.66 0.58 0.38 ] 18 : [ 0.3 0.7 0.06 ] 19 : [ 0.26 0.82 0.54 ] 20 : [ 0.18 0.1 0.42 ] 21 : [ 0.74 0.02 0.18 ] 22 : [ 0.86 0.66 0.7 ] 23 : [ 0.1 0.22 0.74 ] 24 : [ 0.38 0.42 0.62 ] Final criteria: C2=0.047943, PhiP=3.142412, MinDist=0.324962 Intermediate design for restart iteration number 7 [ X0 X1 X2 ] 0 : [ 0.26 0.18 0.14 ] 1 : [ 0.82 0.38 0.18 ] 2 : [ 0.62 0.78 0.9 ] 3 : [ 0.54 0.5 0.02 ] 4 : [ 0.74 0.06 0.66 ] 5 : [ 0.06 0.86 0.34 ] 6 : [ 0.46 0.66 0.58 ] 7 : [ 0.1 0.58 0.62 ] 8 : [ 0.7 0.62 0.38 ] 9 : [ 0.02 0.26 0.82 ] 10 : [ 0.22 0.74 0.98 ] 11 : [ 0.18 0.54 0.22 ] 12 : [ 0.42 0.9 0.3 ] 13 : [ 0.66 0.46 0.78 ] 14 : [ 0.86 0.7 0.06 ] 15 : [ 0.38 0.14 0.74 ] 16 : [ 0.78 0.94 0.54 ] 17 : [ 0.34 0.42 0.94 ] 18 : [ 0.94 0.34 0.5 ] 19 : [ 0.3 0.98 0.7 ] 20 : [ 0.98 0.82 0.86 ] 21 : [ 0.9 0.02 0.26 ] 22 : [ 0.5 0.3 0.42 ] 23 : [ 0.58 0.1 0.1 ] 24 : [ 0.14 0.22 0.46 ] Final criteria: C2=0.050139, PhiP=3.187333, MinDist=0.314960 Intermediate design for restart iteration number 8 [ X0 X1 X2 ] 0 : [ 0.1 0.7 0.26 ] 1 : [ 0.02 0.34 0.3 ] 2 : [ 0.5 0.98 0.38 ] 3 : [ 0.78 0.9 0.14 ] 4 : [ 0.34 0.42 0.18 ] 5 : [ 0.74 0.58 0.98 ] 6 : [ 0.18 0.78 0.86 ] 7 : [ 0.9 0.82 0.82 ] 8 : [ 0.82 0.1 0.42 ] 9 : [ 0.14 0.38 0.62 ] 10 : [ 0.7 0.54 0.02 ] 11 : [ 0.98 0.62 0.34 ] 12 : [ 0.26 0.06 0.22 ] 13 : [ 0.62 0.14 0.1 ] 14 : [ 0.54 0.86 0.74 ] 15 : [ 0.58 0.18 0.78 ] 16 : [ 0.46 0.26 0.46 ] 17 : [ 0.06 0.22 0.94 ] 18 : [ 0.94 0.3 0.7 ] 19 : [ 0.38 0.46 0.9 ] 20 : [ 0.3 0.66 0.54 ] 21 : [ 0.66 0.5 0.58 ] 22 : [ 0.42 0.74 0.06 ] 23 : [ 0.22 0.02 0.66 ] 24 : [ 0.86 0.94 0.5 ] Final criteria: C2=0.050769, PhiP=3.097313, MinDist=0.329848 Intermediate design for restart iteration number 9 [ X0 X1 X2 ] 0 : [ 0.9 0.62 0.54 ] 1 : [ 0.02 0.5 0.5 ] 2 : [ 0.06 0.22 0.26 ] 3 : [ 0.74 0.34 0.74 ] 4 : [ 0.82 0.38 0.02 ] 5 : [ 0.18 0.94 0.66 ] 6 : [ 0.7 0.06 0.22 ] 7 : [ 0.46 0.1 0.78 ] 8 : [ 0.94 0.26 0.46 ] 9 : [ 0.98 0.18 0.9 ] 10 : [ 0.22 0.42 0.82 ] 11 : [ 0.5 0.46 0.58 ] 12 : [ 0.34 0.02 0.34 ] 13 : [ 0.1 0.9 0.18 ] 14 : [ 0.3 0.7 0.42 ] 15 : [ 0.14 0.14 0.62 ] 16 : [ 0.62 0.58 0.98 ] 17 : [ 0.38 0.66 0.06 ] 18 : [ 0.42 0.3 0.14 ] 19 : [ 0.58 0.98 0.38 ] 20 : [ 0.54 0.78 0.7 ] 21 : [ 0.26 0.74 0.94 ] 22 : [ 0.66 0.54 0.3 ] 23 : [ 0.86 0.86 0.86 ] 24 : [ 0.78 0.82 0.1 ] Final criteria: C2=0.045404, PhiP=3.210266, MinDist=0.312410 openturns-1.9/python/test/t_SimulatedAnnealingLHS_std.py000077500000000000000000000067621307543307100236230ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Defining parameters dimension = 3 bounds = ot.Interval(dimension) size = 25 # Build standard LHS algorithm distribution = ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension) lhs = ot.LHSExperiment(distribution, size) lhs.setRandomShift(False) # centered lhs.setAlwaysShuffle(True) # randomized # print the object print("lhs=", lhs) print("Bounds of uniform distributions=", distribution.getRange()) # Generate design without optimization design = lhs.generate() print("design=", design) # Defining space fillings spaceFillingC2 = ot.SpaceFillingC2() spaceFillingPhiP = ot.SpaceFillingPhiP(10) # print the criteria on this design print("PhiP=%f, C2=%f" % (ot.SpaceFillingPhiP().evaluate(design), ot.SpaceFillingC2().evaluate(design))) # --------------------------------------------------# # ------------- Simulated annealing ------------- # # --------------------------------------------------# # Geometric profile T0 = 10.0 iMax = 2000 c = 0.95 geomProfile = ot.GeometricProfile(T0, c, iMax) # 1) Simulated Annealing LHS with geometric temperature profile, C2 # optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, geomProfile, spaceFillingC2) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using geometric temperature profile & C2 criterion=", design) result = optimalLHSAlgorithm.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (result.getC2(), result.getPhiP(), result.getMinDist())) # Linear profile linearProfile = ot.LinearProfile(T0, iMax) # 2) Simulated Annealing LHS with linear temperature profile, PhiP optimization optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( lhs, linearProfile, spaceFillingPhiP) print("lhs=", optimalLHSAlgorithm) design = optimalLHSAlgorithm.generate() print( "Generating design using linear temperature profile & PhiP criterion =", design) result = optimalLHSAlgorithm.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (result.getC2(), result.getPhiP(), result.getMinDist())) # 3) Simulated Annealing LHS with geometric temperature profile, PhiP # optimization & initial design initialDesign = ot.Sample(design) optimalLHSAlgorithm = ot.SimulatedAnnealingLHS( initialDesign, distribution, geomProfile, spaceFillingPhiP) print("lhs=", optimalLHSAlgorithm) print("initial design=", initialDesign) print("PhiP=%f, C2=%f" % (ot.SpaceFillingPhiP().evaluate(design), ot.SpaceFillingC2().evaluate(design))) design = optimalLHSAlgorithm.generate() print( "Generating design using linear temperature profile & PhiP criterion =", design) result = optimalLHSAlgorithm.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (result.getC2(), result.getPhiP(), result.getMinDist())) # 4) Simulated Annealing LHS with linear temperature profile, PhiP # optimization and nStart > 1 nStart = 10 design = optimalLHSAlgorithm.generateWithRestart(nStart) print( "Generating design using linear temperature profile & PhiP criterion =", design) results = optimalLHSAlgorithm.getResult() print("Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (results.getC2(), results.getPhiP(), results.getMinDist())) for i in range(nStart): design = results.getOptimalDesign(i) print(" Intermediate design for restart iteration number ", i, design) print(" Final criteria: C2=%f, PhiP=%f, MinDist=%f" % (results.getC2(i), results.getPhiP(i), results.getMinDist(i))) openturns-1.9/python/test/t_SimulationSensitivityAnalysis_std.expout000066400000000000000000004104001307543307100264700ustar00rootroot00000000000000algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Less name=Unnamed threshold=3 Mean point in event domain= [0.609686,1.6494,0.21546] Importance factors at 3.0 = [X0 : 0.128068, X1 : 0.354514, X2 : 0.517419] Importance factors at 1.5 = [X0 : 0.215365, X1 : 0.226243, X2 : 0.558392] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 12.8%,X1 : 35.5%,X2 : 51.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.128068],[0.354514],[0.517419]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,33.0455],[0.11,34.6717],[0.12,30.491],[0.13,38.8489],[0.14,21.6304],[0.15,20.073],[0.16,23.9852],[0.17,25.2596],[0.18,21.4179],[0.19,20.0526],[0.2,17.0918],[0.21,23.534],[0.22,22.4666],[0.23,21.6594],[0.24,23.6049],[0.25,18.9406],[0.26,18.3071],[0.27,19.0503],[0.28,19.7914],[0.29,20.5208],[0.3,24.3662],[0.31,24.3851],[0.32,22.0299],[0.33,20.6752],[0.34,22.1577],[0.35,22.8756],[0.36,18.2841],[0.37,17.9786],[0.38,15.0368],[0.39,15.5422],[0.4,18.5603],[0.41,17.8078],[0.42,21.7413],[0.43,21.5245],[0.44,21.7411],[0.45,22.8073],[0.46,24.0631],[0.47,25.1721],[0.48,22.0509],[0.49,20.8489],[0.5,22.576],[0.51,23.4527],[0.52,21.5365],[0.53,20.6595],[0.54,19.9895],[0.55,20.0865],[0.56,16.2057],[0.57,16.6082],[0.58,16.7596],[0.59,15.8378],[0.6,15.8784],[0.61,15.1861],[0.62,14.7117],[0.63,14.8308],[0.64,13.5094],[0.65,15.7348],[0.66,12.8068],[0.67,16.2639],[0.68,17.6836],[0.69,16.1371],[0.7,18.3225],[0.71,19.7684],[0.72,19.1421],[0.73,19.2583],[0.74,18.3487],[0.75,17.2129],[0.76,19.1209],[0.77,20.8909],[0.78,19.5731],[0.79,18.4289],[0.8,18.5831],[0.81,17.0154],[0.82,13.0984],[0.83,12.0743],[0.84,15.9875],[0.85,18.9779],[0.86,23.2251],[0.87,18.1725],[0.88,19.2234],[0.89,21.0074]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,27.5291],[0.11,28.0499],[0.12,29.042],[0.13,18.684],[0.14,25.9848],[0.15,38.8321],[0.16,35.1422],[0.17,34.5962],[0.18,39.4493],[0.19,36.2533],[0.2,37.9764],[0.21,32.886],[0.22,33.1524],[0.23,35.5354],[0.24,35.1303],[0.25,32.393],[0.26,34.6821],[0.27,29.5455],[0.28,30.7185],[0.29,27.4871],[0.3,24.6397],[0.31,22.8436],[0.32,20.5764],[0.33,21.1681],[0.34,16.4838],[0.35,21.4516],[0.36,24.2366],[0.37,25.4071],[0.38,27.7357],[0.39,31.6021],[0.4,28.4427],[0.41,31.2027],[0.42,28.54],[0.43,29.9333],[0.44,30.9467],[0.45,31.7898],[0.46,27.8971],[0.47,25.5396],[0.48,23.4975],[0.49,20.8545],[0.5,19.106],[0.51,18.8331],[0.52,22.6243],[0.53,22.9717],[0.54,25.772],[0.55,24.6245],[0.56,24.9839],[0.57,26.3266],[0.58,26.3501],[0.59,23.6426],[0.6,25.9829],[0.61,30.1549],[0.62,31.9527],[0.63,34.2647],[0.64,36.8162],[0.65,31.1057],[0.66,35.4514],[0.67,33.8048],[0.68,32.8586],[0.69,30.8159],[0.7,29.8716],[0.71,28.2245],[0.72,28.72],[0.73,29.398],[0.74,26.3517],[0.75,27.4483],[0.76,21.4578],[0.77,27.0062],[0.78,26.7962],[0.79,27.3995],[0.8,27.344],[0.81,23.5608],[0.82,21.3038],[0.83,21.2733],[0.84,19.5937],[0.85,15.3306],[0.86,8.25913],[0.87,11.9417],[0.88,12.1025],[0.89,10.2991]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,39.4255],[0.11,37.2783],[0.12,40.467],[0.13,42.4671],[0.14,52.3848],[0.15,41.0949],[0.16,40.8727],[0.17,40.1443],[0.18,39.1327],[0.19,43.6941],[0.2,44.9318],[0.21,43.58],[0.22,44.3811],[0.23,42.8052],[0.24,41.2648],[0.25,48.6663],[0.26,47.0107],[0.27,51.4042],[0.28,49.4901],[0.29,51.9921],[0.3,50.9942],[0.31,52.7713],[0.32,57.3937],[0.33,58.1567],[0.34,61.3586],[0.35,55.6729],[0.36,57.4793],[0.37,56.6143],[0.38,57.2274],[0.39,52.8557],[0.4,52.997],[0.41,50.9896],[0.42,49.7187],[0.43,48.5422],[0.44,47.3121],[0.45,45.4029],[0.46,48.0398],[0.47,49.2883],[0.48,54.4516],[0.49,58.2966],[0.5,58.318],[0.51,57.7142],[0.52,55.8392],[0.53,56.3688],[0.54,54.2385],[0.55,55.2891],[0.56,58.8103],[0.57,57.0652],[0.58,56.8903],[0.59,60.5197],[0.6,58.1387],[0.61,54.6591],[0.62,53.3357],[0.63,50.9045],[0.64,49.6745],[0.65,53.1595],[0.66,51.7419],[0.67,49.9312],[0.68,49.4578],[0.69,53.047],[0.7,51.8059],[0.71,52.0071],[0.72,52.1379],[0.73,51.3438],[0.74,55.2996],[0.75,55.3388],[0.76,59.4213],[0.77,52.1029],[0.78,53.6307],[0.79,54.1716],[0.8,54.073],[0.81,59.4238],[0.82,65.5978],[0.83,66.6524],[0.84,64.4188],[0.85,65.6916],[0.86,68.5158],[0.87,69.8858],[0.88,68.6742],[0.89,68.6934]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66,0],[0.66,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,33.0455],[-4.5309,34.6717],[-4.47859,30.491],[-4.12148,38.8489],[-4.10517,21.6304],[-3.75041,20.073],[-3.13909,23.9852],[-3.0607,25.2596],[-2.81501,21.4179],[-2.79442,20.0526],[-2.48686,17.0918],[-2.4416,23.534],[-2.34887,22.4666],[-2.27523,21.6594],[-2.26291,23.6049],[-2.22676,18.9406],[-2.20558,18.3071],[-1.45566,19.0503],[-1.45062,19.7914],[-1.19895,20.5208],[-1.19137,24.3662],[-1.15069,24.3851],[-1.0637,22.0299],[-0.949787,20.6752],[-0.70966,22.1577],[-0.320802,22.8756],[-0.315157,18.2841],[-0.288348,17.9786],[-0.27909,15.0368],[-0.035681,15.5422],[0.1253,18.5603],[0.233188,17.8078],[0.246357,21.7413],[0.328182,21.5245],[0.33482,21.7411],[0.379378,22.8073],[0.59061,24.0631],[0.784601,25.1721],[0.984863,22.0509],[1.37923,20.8489],[1.46952,22.576],[1.48069,23.4527],[1.51924,21.5365],[1.6795,20.6595],[1.71187,19.9895],[1.72863,20.0865],[1.96847,16.2057],[1.98399,16.6082],[2.07895,16.7596],[2.09839,15.8378],[2.21662,15.8784],[2.53454,15.1861],[2.73875,14.7117],[2.8277,14.8308],[2.89812,13.5094],[2.9207,15.7348],[3.17236,12.8068],[3.24837,16.2639],[3.78926,17.6836],[3.94215,16.1371],[4.02417,18.3225],[4.2294,19.7684],[4.57202,19.1421],[4.76186,19.2583],[5.27131,18.3487],[5.34578,17.2129],[5.5233,19.1209],[5.54196,20.8909],[5.61784,19.5731],[6.33235,18.4289],[6.36116,18.5831],[6.5486,17.0154],[6.75573,13.0984],[7.09018,12.0743],[7.09831,15.9875],[7.14207,18.9779],[7.60731,23.2251],[7.73314,18.1725],[8.00481,19.2234],[8.14869,21.0074]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,27.5291],[-4.5309,28.0499],[-4.47859,29.042],[-4.12148,18.684],[-4.10517,25.9848],[-3.75041,38.8321],[-3.13909,35.1422],[-3.0607,34.5962],[-2.81501,39.4493],[-2.79442,36.2533],[-2.48686,37.9764],[-2.4416,32.886],[-2.34887,33.1524],[-2.27523,35.5354],[-2.26291,35.1303],[-2.22676,32.393],[-2.20558,34.6821],[-1.45566,29.5455],[-1.45062,30.7185],[-1.19895,27.4871],[-1.19137,24.6397],[-1.15069,22.8436],[-1.0637,20.5764],[-0.949787,21.1681],[-0.70966,16.4838],[-0.320802,21.4516],[-0.315157,24.2366],[-0.288348,25.4071],[-0.27909,27.7357],[-0.035681,31.6021],[0.1253,28.4427],[0.233188,31.2027],[0.246357,28.54],[0.328182,29.9333],[0.33482,30.9467],[0.379378,31.7898],[0.59061,27.8971],[0.784601,25.5396],[0.984863,23.4975],[1.37923,20.8545],[1.46952,19.106],[1.48069,18.8331],[1.51924,22.6243],[1.6795,22.9717],[1.71187,25.772],[1.72863,24.6245],[1.96847,24.9839],[1.98399,26.3266],[2.07895,26.3501],[2.09839,23.6426],[2.21662,25.9829],[2.53454,30.1549],[2.73875,31.9527],[2.8277,34.2647],[2.89812,36.8162],[2.9207,31.1057],[3.17236,35.4514],[3.24837,33.8048],[3.78926,32.8586],[3.94215,30.8159],[4.02417,29.8716],[4.2294,28.2245],[4.57202,28.72],[4.76186,29.398],[5.27131,26.3517],[5.34578,27.4483],[5.5233,21.4578],[5.54196,27.0062],[5.61784,26.7962],[6.33235,27.3995],[6.36116,27.344],[6.5486,23.5608],[6.75573,21.3038],[7.09018,21.2733],[7.09831,19.5937],[7.14207,15.3306],[7.60731,8.25913],[7.73314,11.9417],[8.00481,12.1025],[8.14869,10.2991]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,39.4255],[-4.5309,37.2783],[-4.47859,40.467],[-4.12148,42.4671],[-4.10517,52.3848],[-3.75041,41.0949],[-3.13909,40.8727],[-3.0607,40.1443],[-2.81501,39.1327],[-2.79442,43.6941],[-2.48686,44.9318],[-2.4416,43.58],[-2.34887,44.3811],[-2.27523,42.8052],[-2.26291,41.2648],[-2.22676,48.6663],[-2.20558,47.0107],[-1.45566,51.4042],[-1.45062,49.4901],[-1.19895,51.9921],[-1.19137,50.9942],[-1.15069,52.7713],[-1.0637,57.3937],[-0.949787,58.1567],[-0.70966,61.3586],[-0.320802,55.6729],[-0.315157,57.4793],[-0.288348,56.6143],[-0.27909,57.2274],[-0.035681,52.8557],[0.1253,52.997],[0.233188,50.9896],[0.246357,49.7187],[0.328182,48.5422],[0.33482,47.3121],[0.379378,45.4029],[0.59061,48.0398],[0.784601,49.2883],[0.984863,54.4516],[1.37923,58.2966],[1.46952,58.318],[1.48069,57.7142],[1.51924,55.8392],[1.6795,56.3688],[1.71187,54.2385],[1.72863,55.2891],[1.96847,58.8103],[1.98399,57.0652],[2.07895,56.8903],[2.09839,60.5197],[2.21662,58.1387],[2.53454,54.6591],[2.73875,53.3357],[2.8277,50.9045],[2.89812,49.6745],[2.9207,53.1595],[3.17236,51.7419],[3.24837,49.9312],[3.78926,49.4578],[3.94215,53.047],[4.02417,51.8059],[4.2294,52.0071],[4.57202,52.1379],[4.76186,51.3438],[5.27131,55.2996],[5.34578,55.3388],[5.5233,59.4213],[5.54196,52.1029],[5.61784,53.6307],[6.33235,54.1716],[6.36116,54.073],[6.5486,59.4238],[6.75573,65.5978],[7.09018,66.6524],[7.09831,64.4188],[7.14207,65.6916],[7.60731,68.5158],[7.73314,69.8858],[8.00481,68.6742],[8.14869,68.6934]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[4.4789,2.87188,3.55023],[-0.190007,0.953983,4.70675],[1.71238,-1.6353,-1.38999],[0.112632,-0.652409,-0.497633],[1.86807,-0.288417,-0.119804],[1.10934,0.887042,2.51507],[-0.326315,2.36729,2.18209],[-3.41744,-0.558063,-0.406172],[0.886609,2.1762,2.47768],[2.45426,-1.3662,2.7064],[3.06396,1.20893,2.03102],[-2.46502,1.73846,2.33421],[-0.0256198,0.0444923,3.52528],[4.15692,4.78011,1.78059],[1.47152,1.4899,2.14338],[0.158916,2.10651,-3.38764],[1.84256,2.50752,-0.0248387],[0.387549,-1.42206,1.03496],[-1.33003,1.12878,2.43522],[0.391464,0.21725,1.51643],[-1.98155,3.12364,1.74994],[0.669065,1.71574,2.77024],[4.4758,-0.426391,4.41285],[1.85727,0.44481,1.82259],[1.74089,1.37571,3.86531],[0.167744,0.754263,2.90098],[0.177744,-0.96098,2.12839],[-2.11333,2.24978,3.11595],[-0.539057,4.08473,1.7496],[2.01221,1.83954,4.16256],[1.01913,0.23396,1.3274],[3.51221,1.01241,1.54401],[0.692432,0.191668,5.18449],[2.35009,0.233583,0.289521],[-1.61059,-2.03153,1.34432],[2.15536,0.653901,2.32434],[2.39568,2.57916,1.95861],[0.101134,4.53141,1.56332],[1.25596,-0.495932,2.02578],[3.17226,-0.103903,4.15781],[0.555213,1.41101,3.67702],[1.09051,5.31299,3.0197],[3.37796,3.5753,0.440306],[-0.134684,1.15789,0.251803],[1.73782,0.567502,-0.928986],[3.28509,1.54391,-0.25352],[-1.49109,-0.587738,2.6173],[2.1038,3.52428,0.202539],[-3.2701,1.84134,0.670087],[-1.55578,-0.49667,1.89526],[4.21299,-1.47664,-0.714225],[-0.592025,6.11066,-1.81931],[1.32351,3.14305,0.84877],[0.22838,-0.391797,0.519658],[1.02807,-1.65566,0.15639],[-1.62914,0.371516,2.74019],[-1.10057,-0.323497,0.202086],[0.386261,5.48194,-2.68451],[-1.25257,0.313818,3.71413],[-1.28289,2.43982,2.38258],[1.03148,2.79571,0.946217],[-1.34506,-1.44645,3.67458],[0.175825,3.81015,2.67988],[0.656348,-0.224273,1.86638],[3.51978,-3.30271,2.27677],[3.39719,2.1521,-4.44212],[0.0867313,2.6689,1.37945],[-2.11979,1.28341,0.374247],[-1.19338,3.61256,-0.207086],[1.16894,-1.02313,0.0917397],[1.36865,3.22206,1.06653],[0.194547,2.62427,1.27592],[-0.104793,2.4246,2.3156],[0.405799,1.57628,-0.687002],[3.9628,2.80972,2.80108],[1.42276,1.81643,0.418583],[-1.07537,1.80735,0.927751],[0.912009,4.15713,3.89007],[-0.816687,-1.65801,0.0475713],[3.04477,-1.39575,6.19205],[1.29971,0.218748,0.376689],[0.0971018,1.47419,2.24877],[-0.1106,2.53129,2.01851],[1.83226,-1.85651,0.689515],[3.39729,0.620378,-1.19962],[2.45439,2.13294,-1.87401],[0.492815,2.79647,2.46535],[0.780903,0.0280615,0.286559],[-1.51877,1.06995,0.180725],[2.59103,-3.21629,-0.829769],[3.19004,0.87343,5.00726],[0.750237,1.12082,0.100649],[1.31818,-3.08635,3.12288],[-1.88831,2.5022,2.68812],[-1.47815,2.48721,3.86927],[1.154,-3.37477,1.47523],[2.61006,2.56839,3.04265],[0.281941,-1.33305,3.03573],[1.55168,2.81469,1.71986],[3.35656,4.15706,5.1498]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[7.27154],[7.79251],[1.38535],[0.095979],[2.06109],[4.80891],[0.486921],[-3.39268],[2.57766],[9.91636],[5.3126],[-0.404296],[6.9582],[0.547938],[3.52344],[-9.77613],[-1.96839],[4.59057],[1.84724],[3.09845],[-3.16713],[3.63593],[13.9411],[4.83524],[7.40795],[4.8383],[5.876],[0.743905],[-3.16695],[7.57803],[3.32298],[5.08161],[10.7739],[2.57875],[4.12534],[5.8232],[2.44417],[-3.56935],[6.05143],[11.6437],[5.79274],[-0.839581],[-1.10438],[-1.36791],[-0.971405],[0.462197],[4.62513],[-2.77754],[-4.69194],[2.97973],[4.9995],[-13.3966],[-1.69352],[1.85539],[3.82433],[3.29397],[-0.211155],[-13.2057],[5.70497],[-0.177466],[-1.26965],[8.17378],[-0.179641],[4.72551],[13.0274],[-8.71519],[-1.15773],[-3.29642],[-7.0264],[2.88712],[-1.33139],[-1.19003],[0.889504],[-3.33263],[5.35039],[-0.464728],[-1.93089],[2.45644],[1.76546],[17.5225],[1.72497],[2.38336],[0.129485],[5.99606],[0.0674878],[-4.49303],[1.2288],[1.31193],[-2.76225],[5.75593],[11.8944],[-0.729691],[12.1935],[-0.265379],[2.52958],[9.16661],[4.84278],[8.35299],[0.769358],[7.42057]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Less name=Unnamed threshold=3 Mean point in event domain= [0.339512,1.98322,0.750264] Importance factors at threshold 3.0 = [X0 : 0.297712, X1 : 0.659726, X2 : 0.0425626] Importance factors at threshold/2 1.5 = [X0 : 0.197376, X1 : 0.710002, X2 : 0.0926222] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 29.8%,X1 : 66.0%,X2 : 4.3%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.297712],[0.659726],[0.0425626]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,12.9187],[0.11,18.627],[0.12,23.9104],[0.13,25.102],[0.14,20.5508],[0.15,24.5146],[0.16,21.3221],[0.17,24.2244],[0.18,22.1203],[0.19,23.4127],[0.2,21.4298],[0.21,20.2654],[0.22,20.5734],[0.23,21.0085],[0.24,16.2897],[0.25,15.005],[0.26,13.6465],[0.27,13.6796],[0.28,12.7837],[0.29,16.6768],[0.3,19.7456],[0.31,22.7563],[0.32,22.5981],[0.33,24.7704],[0.34,21.6611],[0.35,23.1871],[0.36,23.8839],[0.37,20.6727],[0.38,21.732],[0.39,16.7691],[0.4,19.7678],[0.41,18.4892],[0.42,19.1428],[0.43,19.0277],[0.44,19.5882],[0.45,19.7376],[0.46,19.6935],[0.47,22.7441],[0.48,25.4997],[0.49,27.0677],[0.5,26.6141],[0.51,27.6507],[0.52,25.3684],[0.53,24.1975],[0.54,26.4034],[0.55,26.0252],[0.56,24.9795],[0.57,25.8767],[0.58,29.7712],[0.59,31.0799],[0.6,34.7392],[0.61,35.3773],[0.62,34.6557],[0.63,34.7025],[0.64,36.7169],[0.65,42.3946],[0.66,45.4221],[0.67,50.0608],[0.68,51.8769],[0.69,52.1112],[0.7,51.912],[0.71,53.2479],[0.72,49.867],[0.73,48.929],[0.74,45.905],[0.75,43.0842],[0.76,37.2184],[0.77,40.7653],[0.78,43.5825],[0.79,43.4467],[0.8,42.0606],[0.81,45.362],[0.82,47.9682],[0.83,49.3621],[0.84,51.2147],[0.85,42.5462],[0.86,39.6153],[0.87,30.9307],[0.88,27.3784],[0.89,27.3826]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,34.7978],[0.11,32.0604],[0.12,35.0508],[0.13,40.7637],[0.14,45.7129],[0.15,42.2422],[0.16,44.509],[0.17,43.7937],[0.18,47.4283],[0.19,45.7544],[0.2,49.557],[0.21,52.106],[0.22,53.8536],[0.23,55.5359],[0.24,60.2995],[0.25,58.3081],[0.26,65.2949],[0.27,64.248],[0.28,64.7892],[0.29,63.9273],[0.3,64.2499],[0.31,60.3079],[0.32,63.5584],[0.33,63.6352],[0.34,64.0169],[0.35,60.5124],[0.36,61.6939],[0.37,63.3249],[0.38,64.2349],[0.39,70.6233],[0.4,70.2512],[0.41,72.4583],[0.42,73.186],[0.43,74.6395],[0.44,73.4719],[0.45,71.0002],[0.46,70.3305],[0.47,66.0679],[0.48,64.8833],[0.49,62.7179],[0.5,61.743],[0.51,62.0563],[0.52,65.2838],[0.53,69.2052],[0.54,69.1558],[0.55,70.4271],[0.56,70.9662],[0.57,69.3348],[0.58,65.9726],[0.59,64.9162],[0.6,62.2515],[0.61,61.7173],[0.62,62.9651],[0.63,63.6612],[0.64,61.2086],[0.65,55.632],[0.66,52.5364],[0.67,48.5527],[0.68,47.0029],[0.69,47.1965],[0.7,47.5722],[0.71,46.5747],[0.72,50.1218],[0.73,50.9145],[0.74,53.9958],[0.75,56.8953],[0.76,62.7525],[0.77,58.8331],[0.78,56.2984],[0.79,55.8642],[0.8,56.7511],[0.81,52.8985],[0.82,50.2709],[0.83,48.1907],[0.84,44.5632],[0.85,50.731],[0.86,50.5558],[0.87,54.7106],[0.88,54.27],[0.89,49.8326]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,52.2836],[0.11,49.3126],[0.12,41.0389],[0.13,34.1343],[0.14,33.7362],[0.15,33.2432],[0.16,34.169],[0.17,31.9818],[0.18,30.4514],[0.19,30.8328],[0.2,29.0132],[0.21,27.6286],[0.22,25.573],[0.23,23.4556],[0.24,23.4108],[0.25,26.6869],[0.26,21.0586],[0.27,22.0724],[0.28,22.427],[0.29,19.3959],[0.3,16.0046],[0.31,16.9357],[0.32,13.8434],[0.33,11.5944],[0.34,14.322],[0.35,16.3004],[0.36,14.4223],[0.37,16.0023],[0.38,14.0331],[0.39,12.6076],[0.4,9.98102],[0.41,9.0525],[0.42,7.67117],[0.43,6.33283],[0.44,6.93996],[0.45,9.26222],[0.46,9.97599],[0.47,11.1881],[0.48,9.61701],[0.49,10.2144],[0.5,11.6429],[0.51,10.2929],[0.52,9.34775],[0.53,6.59723],[0.54,4.44077],[0.55,3.54774],[0.56,4.05429],[0.57,4.78856],[0.58,4.25626],[0.59,4.00395],[0.6,3.00938],[0.61,2.90542],[0.62,2.37925],[0.63,1.63637],[0.64,2.07448],[0.65,1.97342],[0.66,2.04152],[0.67,1.38657],[0.68,1.12022],[0.69,0.692307],[0.7,0.515795],[0.71,0.177396],[0.72,0.0112638],[0.73,0.156418],[0.74,0.099164],[0.75,0.0204638],[0.76,0.0290438],[0.77,0.401621],[0.78,0.119076],[0.79,0.68903],[0.8,1.18832],[0.81,1.73954],[0.82,1.76085],[0.83,2.44715],[0.84,4.22206],[0.85,6.72284],[0.86,9.82893],[0.87,14.3587],[0.88,18.3515],[0.89,22.7848]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.58,0],[0.58,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,12.9187],[-3.16713,18.627],[-3.16695,23.9104],[-2.77754,25.102],[-2.76225,20.5508],[-1.96839,24.5146],[-1.93089,21.3221],[-1.69352,24.2244],[-1.36791,22.1203],[-1.33139,23.4127],[-1.26965,21.4298],[-1.19003,20.2654],[-1.15773,20.5734],[-1.10438,21.0085],[-0.971405,16.2897],[-0.839581,15.005],[-0.729691,13.6465],[-0.464728,13.6796],[-0.404296,12.7837],[-0.265379,16.6768],[-0.211155,19.7456],[-0.179641,22.7563],[-0.177466,22.5981],[0.0674878,24.7704],[0.095979,21.6611],[0.129485,23.1871],[0.462197,23.8839],[0.486921,20.6727],[0.547938,21.732],[0.743905,16.7691],[0.769358,19.7678],[0.889504,18.4892],[1.2288,19.1428],[1.31193,19.0277],[1.38535,19.5882],[1.72497,19.7376],[1.76546,19.6935],[1.84724,22.7441],[1.85539,25.4997],[2.06109,27.0677],[2.38336,26.6141],[2.44417,27.6507],[2.45644,25.3684],[2.52958,24.1975],[2.57766,26.4034],[2.57875,26.0252],[2.88712,24.9795],[2.97973,25.8767],[3.09845,29.7712],[3.29397,31.0799],[3.32298,34.7392],[3.52344,35.3773],[3.63593,34.6557],[3.82433,34.7025],[4.12534,36.7169],[4.59057,42.3946],[4.62513,45.4221],[4.72551,50.0608],[4.80891,51.8769],[4.83524,52.1112],[4.8383,51.912],[4.84278,53.2479],[4.9995,49.867],[5.08161,48.929],[5.3126,45.905],[5.35039,43.0842],[5.70497,37.2184],[5.75593,40.7653],[5.79274,43.5825],[5.8232,43.4467],[5.876,42.0606],[5.99606,45.362],[6.05143,47.9682],[6.9582,49.3621],[7.27154,51.2147],[7.40795,42.5462],[7.42057,39.6153],[7.57803,30.9307],[7.79251,27.3784],[8.17378,27.3826]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,34.7978],[-3.16713,32.0604],[-3.16695,35.0508],[-2.77754,40.7637],[-2.76225,45.7129],[-1.96839,42.2422],[-1.93089,44.509],[-1.69352,43.7937],[-1.36791,47.4283],[-1.33139,45.7544],[-1.26965,49.557],[-1.19003,52.106],[-1.15773,53.8536],[-1.10438,55.5359],[-0.971405,60.2995],[-0.839581,58.3081],[-0.729691,65.2949],[-0.464728,64.248],[-0.404296,64.7892],[-0.265379,63.9273],[-0.211155,64.2499],[-0.179641,60.3079],[-0.177466,63.5584],[0.0674878,63.6352],[0.095979,64.0169],[0.129485,60.5124],[0.462197,61.6939],[0.486921,63.3249],[0.547938,64.2349],[0.743905,70.6233],[0.769358,70.2512],[0.889504,72.4583],[1.2288,73.186],[1.31193,74.6395],[1.38535,73.4719],[1.72497,71.0002],[1.76546,70.3305],[1.84724,66.0679],[1.85539,64.8833],[2.06109,62.7179],[2.38336,61.743],[2.44417,62.0563],[2.45644,65.2838],[2.52958,69.2052],[2.57766,69.1558],[2.57875,70.4271],[2.88712,70.9662],[2.97973,69.3348],[3.09845,65.9726],[3.29397,64.9162],[3.32298,62.2515],[3.52344,61.7173],[3.63593,62.9651],[3.82433,63.6612],[4.12534,61.2086],[4.59057,55.632],[4.62513,52.5364],[4.72551,48.5527],[4.80891,47.0029],[4.83524,47.1965],[4.8383,47.5722],[4.84278,46.5747],[4.9995,50.1218],[5.08161,50.9145],[5.3126,53.9958],[5.35039,56.8953],[5.70497,62.7525],[5.75593,58.8331],[5.79274,56.2984],[5.8232,55.8642],[5.876,56.7511],[5.99606,52.8985],[6.05143,50.2709],[6.9582,48.1907],[7.27154,44.5632],[7.40795,50.731],[7.42057,50.5558],[7.57803,54.7106],[7.79251,54.27],[8.17378,49.8326]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-3.29642,52.2836],[-3.16713,49.3126],[-3.16695,41.0389],[-2.77754,34.1343],[-2.76225,33.7362],[-1.96839,33.2432],[-1.93089,34.169],[-1.69352,31.9818],[-1.36791,30.4514],[-1.33139,30.8328],[-1.26965,29.0132],[-1.19003,27.6286],[-1.15773,25.573],[-1.10438,23.4556],[-0.971405,23.4108],[-0.839581,26.6869],[-0.729691,21.0586],[-0.464728,22.0724],[-0.404296,22.427],[-0.265379,19.3959],[-0.211155,16.0046],[-0.179641,16.9357],[-0.177466,13.8434],[0.0674878,11.5944],[0.095979,14.322],[0.129485,16.3004],[0.462197,14.4223],[0.486921,16.0023],[0.547938,14.0331],[0.743905,12.6076],[0.769358,9.98102],[0.889504,9.0525],[1.2288,7.67117],[1.31193,6.33283],[1.38535,6.93996],[1.72497,9.26222],[1.76546,9.97599],[1.84724,11.1881],[1.85539,9.61701],[2.06109,10.2144],[2.38336,11.6429],[2.44417,10.2929],[2.45644,9.34775],[2.52958,6.59723],[2.57766,4.44077],[2.57875,3.54774],[2.88712,4.05429],[2.97973,4.78856],[3.09845,4.25626],[3.29397,4.00395],[3.32298,3.00938],[3.52344,2.90542],[3.63593,2.37925],[3.82433,1.63637],[4.12534,2.07448],[4.59057,1.97342],[4.62513,2.04152],[4.72551,1.38657],[4.80891,1.12022],[4.83524,0.692307],[4.8383,0.515795],[4.84278,0.177396],[4.9995,0.0112638],[5.08161,0.156418],[5.3126,0.099164],[5.35039,0.0204638],[5.70497,0.0290438],[5.75593,0.401621],[5.79274,0.119076],[5.8232,0.68903],[5.876,1.18832],[5.99606,1.73954],[6.05143,1.76085],[6.9582,2.44715],[7.27154,4.22206],[7.40795,6.72284],[7.42057,9.82893],[7.57803,14.3587],[7.79251,18.3515],[8.17378,22.7848]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=LessOrEqual name=Unnamed threshold=3 Mean point in event domain= [0.609686,1.6494,0.21546] Importance factors at 3.0 = [X0 : 0.128068, X1 : 0.354514, X2 : 0.517419] Importance factors at 1.5 = [X0 : 0.215365, X1 : 0.226243, X2 : 0.558392] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 12.8%,X1 : 35.5%,X2 : 51.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.128068],[0.354514],[0.517419]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,34.6717],[0.12,30.491],[0.13,38.8489],[0.14,21.6304],[0.15,20.073],[0.16,23.9852],[0.17,25.2596],[0.18,21.4179],[0.19,20.0526],[0.2,17.0918],[0.21,23.534],[0.22,22.4666],[0.23,21.6594],[0.24,23.6049],[0.25,18.9406],[0.26,18.3071],[0.27,19.0503],[0.28,19.7914],[0.29,20.5208],[0.3,24.3662],[0.31,24.3851],[0.32,22.0299],[0.33,20.6752],[0.34,22.1577],[0.35,22.8756],[0.36,18.2841],[0.37,17.9786],[0.38,15.0368],[0.39,15.5422],[0.4,18.5603],[0.41,17.8078],[0.42,21.7413],[0.43,21.5245],[0.44,21.7411],[0.45,22.8073],[0.46,24.0631],[0.47,25.1721],[0.48,22.0509],[0.49,20.8489],[0.5,22.576],[0.51,23.4527],[0.52,21.5365],[0.53,20.6595],[0.54,19.9895],[0.55,20.0865],[0.56,16.2057],[0.57,16.6082],[0.58,16.7596],[0.59,15.8378],[0.6,15.8784],[0.61,15.1861],[0.62,14.7117],[0.63,14.8308],[0.64,13.5094],[0.65,15.7348],[0.66,12.8068],[0.67,16.2639],[0.68,17.6836],[0.69,16.1371],[0.7,18.3225],[0.71,19.7684],[0.72,19.1421],[0.73,19.2583],[0.74,18.3487],[0.75,17.2129],[0.76,19.1209],[0.77,20.8909],[0.78,19.5731],[0.79,18.4289],[0.8,18.5831],[0.81,17.0154],[0.82,13.0984],[0.83,12.0743],[0.84,15.9875],[0.85,18.9779],[0.86,23.2251],[0.87,18.1725],[0.88,19.2234],[0.89,21.0074],[0.9,21.2549]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,28.0499],[0.12,29.042],[0.13,18.684],[0.14,25.9848],[0.15,38.8321],[0.16,35.1422],[0.17,34.5962],[0.18,39.4493],[0.19,36.2533],[0.2,37.9764],[0.21,32.886],[0.22,33.1524],[0.23,35.5354],[0.24,35.1303],[0.25,32.393],[0.26,34.6821],[0.27,29.5455],[0.28,30.7185],[0.29,27.4871],[0.3,24.6397],[0.31,22.8436],[0.32,20.5764],[0.33,21.1681],[0.34,16.4838],[0.35,21.4516],[0.36,24.2366],[0.37,25.4071],[0.38,27.7357],[0.39,31.6021],[0.4,28.4427],[0.41,31.2027],[0.42,28.54],[0.43,29.9333],[0.44,30.9467],[0.45,31.7898],[0.46,27.8971],[0.47,25.5396],[0.48,23.4975],[0.49,20.8545],[0.5,19.106],[0.51,18.8331],[0.52,22.6243],[0.53,22.9717],[0.54,25.772],[0.55,24.6245],[0.56,24.9839],[0.57,26.3266],[0.58,26.3501],[0.59,23.6426],[0.6,25.9829],[0.61,30.1549],[0.62,31.9527],[0.63,34.2647],[0.64,36.8162],[0.65,31.1057],[0.66,35.4514],[0.67,33.8048],[0.68,32.8586],[0.69,30.8159],[0.7,29.8716],[0.71,28.2245],[0.72,28.72],[0.73,29.398],[0.74,26.3517],[0.75,27.4483],[0.76,21.4578],[0.77,27.0062],[0.78,26.7962],[0.79,27.3995],[0.8,27.344],[0.81,23.5608],[0.82,21.3038],[0.83,21.2733],[0.84,19.5937],[0.85,15.3306],[0.86,8.25913],[0.87,11.9417],[0.88,12.1025],[0.89,10.2991],[0.9,14.4442]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,37.2783],[0.12,40.467],[0.13,42.4671],[0.14,52.3848],[0.15,41.0949],[0.16,40.8727],[0.17,40.1443],[0.18,39.1327],[0.19,43.6941],[0.2,44.9318],[0.21,43.58],[0.22,44.3811],[0.23,42.8052],[0.24,41.2648],[0.25,48.6663],[0.26,47.0107],[0.27,51.4042],[0.28,49.4901],[0.29,51.9921],[0.3,50.9942],[0.31,52.7713],[0.32,57.3937],[0.33,58.1567],[0.34,61.3586],[0.35,55.6729],[0.36,57.4793],[0.37,56.6143],[0.38,57.2274],[0.39,52.8557],[0.4,52.997],[0.41,50.9896],[0.42,49.7187],[0.43,48.5422],[0.44,47.3121],[0.45,45.4029],[0.46,48.0398],[0.47,49.2883],[0.48,54.4516],[0.49,58.2966],[0.5,58.318],[0.51,57.7142],[0.52,55.8392],[0.53,56.3688],[0.54,54.2385],[0.55,55.2891],[0.56,58.8103],[0.57,57.0652],[0.58,56.8903],[0.59,60.5197],[0.6,58.1387],[0.61,54.6591],[0.62,53.3357],[0.63,50.9045],[0.64,49.6745],[0.65,53.1595],[0.66,51.7419],[0.67,49.9312],[0.68,49.4578],[0.69,53.047],[0.7,51.8059],[0.71,52.0071],[0.72,52.1379],[0.73,51.3438],[0.74,55.2996],[0.75,55.3388],[0.76,59.4213],[0.77,52.1029],[0.78,53.6307],[0.79,54.1716],[0.8,54.073],[0.81,59.4238],[0.82,65.5978],[0.83,66.6524],[0.84,64.4188],[0.85,65.6916],[0.86,68.5158],[0.87,69.8858],[0.88,68.6742],[0.89,68.6934],[0.9,64.3009]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.66,0],[0.66,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,34.6717],[-4.5309,30.491],[-4.47859,38.8489],[-4.12148,21.6304],[-4.10517,20.073],[-3.75041,23.9852],[-3.13909,25.2596],[-3.0607,21.4179],[-2.81501,20.0526],[-2.79442,17.0918],[-2.48686,23.534],[-2.4416,22.4666],[-2.34887,21.6594],[-2.27523,23.6049],[-2.26291,18.9406],[-2.22676,18.3071],[-2.20558,19.0503],[-1.45566,19.7914],[-1.45062,20.5208],[-1.19895,24.3662],[-1.19137,24.3851],[-1.15069,22.0299],[-1.0637,20.6752],[-0.949787,22.1577],[-0.70966,22.8756],[-0.320802,18.2841],[-0.315157,17.9786],[-0.288348,15.0368],[-0.27909,15.5422],[-0.035681,18.5603],[0.1253,17.8078],[0.233188,21.7413],[0.246357,21.5245],[0.328182,21.7411],[0.33482,22.8073],[0.379378,24.0631],[0.59061,25.1721],[0.784601,22.0509],[0.984863,20.8489],[1.37923,22.576],[1.46952,23.4527],[1.48069,21.5365],[1.51924,20.6595],[1.6795,19.9895],[1.71187,20.0865],[1.72863,16.2057],[1.96847,16.6082],[1.98399,16.7596],[2.07895,15.8378],[2.09839,15.8784],[2.21662,15.1861],[2.53454,14.7117],[2.73875,14.8308],[2.8277,13.5094],[2.89812,15.7348],[2.9207,12.8068],[3.17236,16.2639],[3.24837,17.6836],[3.78926,16.1371],[3.94215,18.3225],[4.02417,19.7684],[4.2294,19.1421],[4.57202,19.2583],[4.76186,18.3487],[5.27131,17.2129],[5.34578,19.1209],[5.5233,20.8909],[5.54196,19.5731],[5.61784,18.4289],[6.33235,18.5831],[6.36116,17.0154],[6.5486,13.0984],[6.75573,12.0743],[7.09018,15.9875],[7.09831,18.9779],[7.14207,23.2251],[7.60731,18.1725],[7.73314,19.2234],[8.00481,21.0074],[8.14869,21.2549]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,28.0499],[-4.5309,29.042],[-4.47859,18.684],[-4.12148,25.9848],[-4.10517,38.8321],[-3.75041,35.1422],[-3.13909,34.5962],[-3.0607,39.4493],[-2.81501,36.2533],[-2.79442,37.9764],[-2.48686,32.886],[-2.4416,33.1524],[-2.34887,35.5354],[-2.27523,35.1303],[-2.26291,32.393],[-2.22676,34.6821],[-2.20558,29.5455],[-1.45566,30.7185],[-1.45062,27.4871],[-1.19895,24.6397],[-1.19137,22.8436],[-1.15069,20.5764],[-1.0637,21.1681],[-0.949787,16.4838],[-0.70966,21.4516],[-0.320802,24.2366],[-0.315157,25.4071],[-0.288348,27.7357],[-0.27909,31.6021],[-0.035681,28.4427],[0.1253,31.2027],[0.233188,28.54],[0.246357,29.9333],[0.328182,30.9467],[0.33482,31.7898],[0.379378,27.8971],[0.59061,25.5396],[0.784601,23.4975],[0.984863,20.8545],[1.37923,19.106],[1.46952,18.8331],[1.48069,22.6243],[1.51924,22.9717],[1.6795,25.772],[1.71187,24.6245],[1.72863,24.9839],[1.96847,26.3266],[1.98399,26.3501],[2.07895,23.6426],[2.09839,25.9829],[2.21662,30.1549],[2.53454,31.9527],[2.73875,34.2647],[2.8277,36.8162],[2.89812,31.1057],[2.9207,35.4514],[3.17236,33.8048],[3.24837,32.8586],[3.78926,30.8159],[3.94215,29.8716],[4.02417,28.2245],[4.2294,28.72],[4.57202,29.398],[4.76186,26.3517],[5.27131,27.4483],[5.34578,21.4578],[5.5233,27.0062],[5.54196,26.7962],[5.61784,27.3995],[6.33235,27.344],[6.36116,23.5608],[6.5486,21.3038],[6.75573,21.2733],[7.09018,19.5937],[7.09831,15.3306],[7.14207,8.25913],[7.60731,11.9417],[7.73314,12.1025],[8.00481,10.2991],[8.14869,14.4442]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-4.89021,37.2783],[-4.5309,40.467],[-4.47859,42.4671],[-4.12148,52.3848],[-4.10517,41.0949],[-3.75041,40.8727],[-3.13909,40.1443],[-3.0607,39.1327],[-2.81501,43.6941],[-2.79442,44.9318],[-2.48686,43.58],[-2.4416,44.3811],[-2.34887,42.8052],[-2.27523,41.2648],[-2.26291,48.6663],[-2.22676,47.0107],[-2.20558,51.4042],[-1.45566,49.4901],[-1.45062,51.9921],[-1.19895,50.9942],[-1.19137,52.7713],[-1.15069,57.3937],[-1.0637,58.1567],[-0.949787,61.3586],[-0.70966,55.6729],[-0.320802,57.4793],[-0.315157,56.6143],[-0.288348,57.2274],[-0.27909,52.8557],[-0.035681,52.997],[0.1253,50.9896],[0.233188,49.7187],[0.246357,48.5422],[0.328182,47.3121],[0.33482,45.4029],[0.379378,48.0398],[0.59061,49.2883],[0.784601,54.4516],[0.984863,58.2966],[1.37923,58.318],[1.46952,57.7142],[1.48069,55.8392],[1.51924,56.3688],[1.6795,54.2385],[1.71187,55.2891],[1.72863,58.8103],[1.96847,57.0652],[1.98399,56.8903],[2.07895,60.5197],[2.09839,58.1387],[2.21662,54.6591],[2.53454,53.3357],[2.73875,50.9045],[2.8277,49.6745],[2.89812,53.1595],[2.9207,51.7419],[3.17236,49.9312],[3.24837,49.4578],[3.78926,53.047],[3.94215,51.8059],[4.02417,52.0071],[4.2294,52.1379],[4.57202,51.3438],[4.76186,55.2996],[5.27131,55.3388],[5.34578,59.4213],[5.5233,52.1029],[5.54196,53.6307],[5.61784,54.1716],[6.33235,54.073],[6.36116,59.4238],[6.5486,65.5978],[6.75573,66.6524],[7.09018,64.4188],[7.09831,65.6916],[7.14207,68.5158],[7.60731,69.8858],[7.73314,68.6742],[8.00481,68.6934],[8.14869,64.3009]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.91317,-0.110719,1.06505],[1.28794,1.89919,1.47383],[2.08501,0.503423,3.43982],[2.23935,-4.32385,3.33727],[1.234,4.78542,0.719989],[3.50064,-0.336183,-1.45142],[-0.630501,2.1418,1.25805],[-2.45336,0.862952,0.985818],[1.18601,-0.952067,-0.0362525],[2.26934,-0.895221,-1.27649],[1.21943,2.6942,-1.54308],[-0.581161,4.17279,-0.224464],[4.67873,0.417293,-0.201367],[-0.234817,3.57293,1.92257],[1.74265,3.73461,-2.53147],[3.20234,1.96713,-1.73002],[1.55585,2.25189,3.09561],[0.0682857,-2.28397,0.985556],[-0.961249,-2.48094,-0.209828],[-0.104407,-0.231619,0.174068],[2.56781,1.93839,0.122275],[-0.332102,1.64599,4.38088],[0.632607,1.28824,0.178664],[1.51249,-1.60159,-0.411577],[-0.473549,-0.933038,1.89779],[7.31916,0.463827,4.11734],[-2.15823,2.19271,3.61927],[3.80213,3.29212,3.99904],[3.10563,1.73223,1.77573],[0.65691,2.45182,-1.22671],[-2.56237,1.55073,1.71766],[0.875437,5.35904,2.89315],[1.43984,0.862202,-0.358575],[2.76301,-1.56421,-2.78303],[1.04589,-1.08049,4.27581],[1.53173,1.23168,0.715899],[3.57058,0.577734,0.992697],[1.03531,1.04104,0.59975],[1.14645,-1.42447,2.28104],[-1.73534,-2.25314,1.30014],[2.55425,1.50984,1.80917],[2.53367,0.543523,-0.953988],[-0.470758,0.720007,0.639245],[-1.07314,-0.145007,-1.12389],[-0.639648,0.737415,-2.56723],[-1.85635,4.59439,2.59405],[-0.505387,0.390798,-4.9707],[0.11911,0.240733,-0.761493],[-0.568099,1.64466,-2.75668],[1.18641,-0.34667,-0.373187],[0.102107,1.07402,-1.76167],[-1.21156,0.832363,3.88913],[1.52728,3.74626,0.299455],[-0.432554,2.51157,3.22505],[0.830034,1.11935,-0.220175],[-2.56078,0.639792,-1.00444],[3.4933,2.76084,-2.11972],[-0.133359,1.00827,1.6899],[1.73224,1.36321,-2.5873],[0.149686,-0.0908521,3.53023],[-1.22909,-0.725009,-1.77288],[0.959441,3.70543,1.77511],[-1.00292,1.65481,-1.56802],[2.85235,3.61063,5.08196],[0.849862,-0.0600909,3.36915],[2.76496,1.52909,1.51679],[0.92653,1.79238,2.31364],[3.54421,4.8585,-0.368456],[0.138875,2.16669,1.60089],[-1.3516,2.85085,0.429532],[1.71844,3.90585,-1.28832],[3.33189,-2.36515,1.94089],[1.5439,0.14549,-0.0320811],[6.38797,4.53938,0.884756],[0.309125,1.21444,1.39354],[-0.216987,3.25555,3.74745],[0.744819,-2.04478,-0.558684],[-0.0522542,0.700735,1.2957],[3.6464,2.6031,0.907777],[-1.77659,0.666884,0.302492],[-2.99071,0.787796,-1.81848],[0.733252,0.20003,-0.670399],[1.71615,3.23959,0.619258],[-1.09564,0.861173,2.04707],[1.33693,-2.26741,1.73851],[2.87811,1.32029,2.45232],[0.719039,0.738519,2.30726],[0.0572024,3.90347,1.21145],[2.00576,-0.79575,1.42233],[-1.55112,-0.277042,2.30629],[-2.90481,0.240713,-0.270203],[-0.830914,2.00319,1.25869],[1.30981,3.2887,3.36589],[-1.10567,-1.13891,4.30473],[0.63667,0.606523,-1.3547],[-0.763052,-1.03839,-1.54836],[2.77344,1.83973,3.11602],[1.6063,3.86149,-0.0979818],[-2.16164,5.1424,-2.07746],[2.36019,-1.95768,0.627234]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[5.20935],[1.3868],[8.20951],[15.3997],[-4.50415],[1.10208],[-1.32709],[-1.77615],[2.5416],[1.05919],[-5.90802],[-7.28927],[3.65005],[-1.74907],[-8.92221],[-3.2084],[4.36923],[5.46535],[2.3405],[0.591158],[-0.0952245],[5.96067],[-0.942421],[3.09172],[4.7216],[14.8581],[1.79124],[6.86203],[4.05873],[-5.47425],[-1.45314],[-1.37682],[-0.570608],[-0.456735],[11.2182],[1.11601],[4.68937],[0.673257],[7.84523],[4.24465],[3.90784],[-0.18959],[-0.272278],[-3.1034],[-6.88023],[-3.55983],[-11.033],[-1.76498],[-8.54845],[0.960039],[-5.03225],[5.31815],[-3.4932],[2.25018],[-1.28933],[-5.52935],[-4.8874],[1.73405],[-5.48718],[7.34642],[-3.68735],[-1.04848],[-6.62117],[7.60032],[7.6783],[3.50491],[2.86524],[-4.48044],[0.0906129],[-4.7688],[-6.71696],[10.7614],[1.2615],[1.34842],[1.27453],[2.39459],[2.69462],[1.48804],[1.55731],[-2.17193],[-7.80936],[-0.907592],[-1.90472],[1.70673],[8.21508],[5.80232],[4.22577],[-3.37509],[6.04405],[3.47701],[-3.80629],[-1.31833],[3.10855],[9.21217],[-2.98252],[-2.30218],[6.24589],[-4.38191],[-14.0302],[6.55118]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=LessOrEqual name=Unnamed threshold=3 Mean point in event domain= [0.427001,1.63218,-0.049732] Importance factors at threshold 3.0 = [X0 : 0.179423, X1 : 0.218397, X2 : 0.60218] Importance factors at threshold/2 1.5 = [X0 : 0.103276, X1 : 0.217728, X2 : 0.678996] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 17.9%,X1 : 21.8%,X2 : 60.2%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.179423],[0.218397],[0.60218]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,18.5046],[0.12,14.8033],[0.13,13.75],[0.14,13.5712],[0.15,9.07706],[0.16,11.208],[0.17,10.2421],[0.18,6.90979],[0.19,5.89524],[0.2,9.01693],[0.21,10.5837],[0.22,13.1647],[0.23,11.9153],[0.24,12.2735],[0.25,9.55593],[0.26,10.9412],[0.27,10.7357],[0.28,11.8281],[0.29,13.9869],[0.3,12.9237],[0.31,15.819],[0.32,16.1399],[0.33,16.9956],[0.34,20.195],[0.35,19.9348],[0.36,21.1384],[0.37,22.5384],[0.38,22.2025],[0.39,21.7724],[0.4,21.7174],[0.41,21.5777],[0.42,20.7974],[0.43,18.759],[0.44,19.8518],[0.45,18.1446],[0.46,16.545],[0.47,17.1384],[0.48,17.9498],[0.49,17.7984],[0.5,17.501],[0.51,16.2435],[0.52,14.0452],[0.53,13.5884],[0.54,13.0875],[0.55,13.6139],[0.56,9.79187],[0.57,9.61606],[0.58,10.3276],[0.59,8.60715],[0.6,10.0131],[0.61,10.8299],[0.62,13.2599],[0.63,14.5246],[0.64,16.179],[0.65,17.4265],[0.66,17.3572],[0.67,17.6328],[0.68,17.9423],[0.69,17.5837],[0.7,17.6638],[0.71,20.3242],[0.72,18.9901],[0.73,15.8791],[0.74,14.8456],[0.75,13.3664],[0.76,13.9433],[0.77,16.7219],[0.78,16.6866],[0.79,14.688],[0.8,16.5129],[0.81,15.1435],[0.82,18.0275],[0.83,19.5806],[0.84,18.3411],[0.85,20.8266],[0.86,20.4815],[0.87,19.3871],[0.88,18.5904],[0.89,16.3646],[0.9,18.5948]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,12.9638],[0.12,11.8794],[0.13,12.7611],[0.14,11.4625],[0.15,12.7054],[0.16,14.3235],[0.17,19.0105],[0.18,23.735],[0.19,26.7917],[0.2,24.0508],[0.21,19.8867],[0.22,24.2417],[0.23,27.1315],[0.24,30.3076],[0.25,30.1824],[0.26,27.0545],[0.27,25.2037],[0.28,21.4893],[0.29,20.304],[0.3,22.4003],[0.31,21.5276],[0.32,19.9188],[0.33,22.3572],[0.34,22.314],[0.35,27.0714],[0.36,27.7477],[0.37,28.206],[0.38,27.6992],[0.39,30.4342],[0.4,30.1748],[0.41,28.625],[0.42,28.0236],[0.43,24.7042],[0.44,23.9819],[0.45,23.1923],[0.46,23.9382],[0.47,24.9377],[0.48,23.3812],[0.49,23.2678],[0.5,21.7377],[0.51,19.7203],[0.52,18.312],[0.53,18.4691],[0.54,17.5933],[0.55,17.7771],[0.56,21.1343],[0.57,22.0442],[0.58,21.7728],[0.59,23.3674],[0.6,23.3675],[0.61,23.4708],[0.62,24.9278],[0.63,26.8019],[0.64,23.1039],[0.65,25.7523],[0.66,23.7993],[0.67,20.7574],[0.68,21.8397],[0.69,19.398],[0.7,22.1124],[0.71,21.0349],[0.72,22.0292],[0.73,21.8458],[0.74,22.9062],[0.75,24.2931],[0.76,24.592],[0.77,21.317],[0.78,23.4028],[0.79,23.5993],[0.8,21.9226],[0.81,21.353],[0.82,21.9495],[0.83,18.7012],[0.84,19.9913],[0.85,21.7477],[0.86,20.4135],[0.87,22.7359],[0.88,19.8221],[0.89,24.6314],[0.9,24.5649]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,68.5316],[0.12,73.3174],[0.13,73.4889],[0.14,74.9663],[0.15,78.2175],[0.16,74.4685],[0.17,70.7475],[0.18,69.3552],[0.19,67.3131],[0.2,66.9323],[0.21,69.5295],[0.22,62.5936],[0.23,60.9532],[0.24,57.4189],[0.25,60.2617],[0.26,62.0043],[0.27,64.0605],[0.28,66.6826],[0.29,65.7092],[0.3,64.6759],[0.31,62.6534],[0.32,63.9412],[0.33,60.6472],[0.34,57.491],[0.35,52.9938],[0.36,51.1139],[0.37,49.2556],[0.38,50.0983],[0.39,47.7934],[0.4,48.1077],[0.41,49.7973],[0.42,51.179],[0.43,56.5367],[0.44,56.1663],[0.45,58.6631],[0.46,59.5168],[0.47,57.9239],[0.48,58.669],[0.49,58.9339],[0.5,60.7613],[0.51,64.0362],[0.52,67.6429],[0.53,67.9426],[0.54,69.3192],[0.55,68.609],[0.56,69.0738],[0.57,68.3397],[0.58,67.8996],[0.59,68.0254],[0.6,66.6194],[0.61,65.6993],[0.62,61.8124],[0.63,58.6735],[0.64,60.7171],[0.65,56.8213],[0.66,58.8435],[0.67,61.6098],[0.68,60.218],[0.69,63.0184],[0.7,60.2239],[0.71,58.6409],[0.72,58.9807],[0.73,62.2751],[0.74,62.2482],[0.75,62.3406],[0.76,61.4647],[0.77,61.9611],[0.78,59.9105],[0.79,61.7128],[0.8,61.5645],[0.81,63.5035],[0.82,60.023],[0.83,61.7182],[0.84,61.6676],[0.85,57.4257],[0.86,59.105],[0.87,57.877],[0.88,61.5874],[0.89,59.004],[0.9,56.8402]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.68,0],[0.68,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,18.5046],[-5.48718,14.8033],[-5.47425,13.75],[-5.03225,13.5712],[-4.8874,9.07706],[-4.7688,11.208],[-4.50415,10.2421],[-4.48044,6.90979],[-4.38191,5.89524],[-3.80629,9.01693],[-3.68735,10.5837],[-3.55983,13.1647],[-3.4932,11.9153],[-3.37509,12.2735],[-3.2084,9.55593],[-3.1034,10.9412],[-2.98252,10.7357],[-2.30218,11.8281],[-2.17193,13.9869],[-1.90472,12.9237],[-1.77615,15.819],[-1.76498,16.1399],[-1.74907,16.9956],[-1.45314,20.195],[-1.37682,19.9348],[-1.32709,21.1384],[-1.31833,22.5384],[-1.28933,22.2025],[-1.04848,21.7724],[-0.942421,21.7174],[-0.907592,21.5777],[-0.570608,20.7974],[-0.456735,18.759],[-0.272278,19.8518],[-0.18959,18.1446],[-0.0952245,16.545],[0.0906129,17.1384],[0.591158,17.9498],[0.673257,17.7984],[0.960039,17.501],[1.05919,16.2435],[1.10208,14.0452],[1.11601,13.5884],[1.2615,13.0875],[1.27453,13.6139],[1.34842,9.79187],[1.3868,9.61606],[1.48804,10.3276],[1.55731,8.60715],[1.70673,10.0131],[1.73405,10.8299],[1.79124,13.2599],[2.25018,14.5246],[2.3405,16.179],[2.39459,17.4265],[2.5416,17.3572],[2.69462,17.6328],[2.86524,17.9423],[3.09172,17.5837],[3.10855,17.6638],[3.47701,20.3242],[3.50491,18.9901],[3.65005,15.8791],[3.90784,14.8456],[4.05873,13.3664],[4.22577,13.9433],[4.24465,16.7219],[4.36923,16.6866],[4.68937,14.688],[4.7216,16.5129],[5.20935,15.1435],[5.31815,18.0275],[5.46535,19.5806],[5.80232,18.3411],[5.96067,20.8266],[6.04405,20.4815],[6.24589,19.3871],[6.55118,18.5904],[6.86203,16.3646],[7.34642,18.5948]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,12.9638],[-5.48718,11.8794],[-5.47425,12.7611],[-5.03225,11.4625],[-4.8874,12.7054],[-4.7688,14.3235],[-4.50415,19.0105],[-4.48044,23.735],[-4.38191,26.7917],[-3.80629,24.0508],[-3.68735,19.8867],[-3.55983,24.2417],[-3.4932,27.1315],[-3.37509,30.3076],[-3.2084,30.1824],[-3.1034,27.0545],[-2.98252,25.2037],[-2.30218,21.4893],[-2.17193,20.304],[-1.90472,22.4003],[-1.77615,21.5276],[-1.76498,19.9188],[-1.74907,22.3572],[-1.45314,22.314],[-1.37682,27.0714],[-1.32709,27.7477],[-1.31833,28.206],[-1.28933,27.6992],[-1.04848,30.4342],[-0.942421,30.1748],[-0.907592,28.625],[-0.570608,28.0236],[-0.456735,24.7042],[-0.272278,23.9819],[-0.18959,23.1923],[-0.0952245,23.9382],[0.0906129,24.9377],[0.591158,23.3812],[0.673257,23.2678],[0.960039,21.7377],[1.05919,19.7203],[1.10208,18.312],[1.11601,18.4691],[1.2615,17.5933],[1.27453,17.7771],[1.34842,21.1343],[1.3868,22.0442],[1.48804,21.7728],[1.55731,23.3674],[1.70673,23.3675],[1.73405,23.4708],[1.79124,24.9278],[2.25018,26.8019],[2.3405,23.1039],[2.39459,25.7523],[2.5416,23.7993],[2.69462,20.7574],[2.86524,21.8397],[3.09172,19.398],[3.10855,22.1124],[3.47701,21.0349],[3.50491,22.0292],[3.65005,21.8458],[3.90784,22.9062],[4.05873,24.2931],[4.22577,24.592],[4.24465,21.317],[4.36923,23.4028],[4.68937,23.5993],[4.7216,21.9226],[5.20935,21.353],[5.31815,21.9495],[5.46535,18.7012],[5.80232,19.9913],[5.96067,21.7477],[6.04405,20.4135],[6.24589,22.7359],[6.55118,19.8221],[6.86203,24.6314],[7.34642,24.5649]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[-5.52935,68.5316],[-5.48718,73.3174],[-5.47425,73.4889],[-5.03225,74.9663],[-4.8874,78.2175],[-4.7688,74.4685],[-4.50415,70.7475],[-4.48044,69.3552],[-4.38191,67.3131],[-3.80629,66.9323],[-3.68735,69.5295],[-3.55983,62.5936],[-3.4932,60.9532],[-3.37509,57.4189],[-3.2084,60.2617],[-3.1034,62.0043],[-2.98252,64.0605],[-2.30218,66.6826],[-2.17193,65.7092],[-1.90472,64.6759],[-1.77615,62.6534],[-1.76498,63.9412],[-1.74907,60.6472],[-1.45314,57.491],[-1.37682,52.9938],[-1.32709,51.1139],[-1.31833,49.2556],[-1.28933,50.0983],[-1.04848,47.7934],[-0.942421,48.1077],[-0.907592,49.7973],[-0.570608,51.179],[-0.456735,56.5367],[-0.272278,56.1663],[-0.18959,58.6631],[-0.0952245,59.5168],[0.0906129,57.9239],[0.591158,58.669],[0.673257,58.9339],[0.960039,60.7613],[1.05919,64.0362],[1.10208,67.6429],[1.11601,67.9426],[1.2615,69.3192],[1.27453,68.609],[1.34842,69.0738],[1.3868,68.3397],[1.48804,67.8996],[1.55731,68.0254],[1.70673,66.6194],[1.73405,65.6993],[1.79124,61.8124],[2.25018,58.6735],[2.3405,60.7171],[2.39459,56.8213],[2.5416,58.8435],[2.69462,61.6098],[2.86524,60.218],[3.09172,63.0184],[3.10855,60.2239],[3.47701,58.6409],[3.50491,58.9807],[3.65005,62.2751],[3.90784,62.2482],[4.05873,62.3406],[4.22577,61.4647],[4.24465,61.9611],[4.36923,59.9105],[4.68937,61.7128],[4.7216,61.5645],[5.20935,63.5035],[5.31815,60.023],[5.46535,61.7182],[5.80232,61.6676],[5.96067,57.4257],[6.04405,59.105],[6.24589,57.877],[6.55118,61.5874],[6.86203,59.004],[7.34642,56.8402]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Greater name=Unnamed threshold=3 Mean point in event domain= [1.54574,-0.546511,2.35839] Importance factors at 3.0 = [X0 : 0.0656771, X1 : 0.527414, X2 : 0.406909] Importance factors at 1.5 = [X0 : 0.143018, X1 : 0.381311, X2 : 0.475671] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 6.6%,X1 : 52.7%,X2 : 40.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0656771],[0.527414],[0.406909]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,7.09257],[0.11,8.26966],[0.12,7.5128],[0.13,7.38524],[0.14,12.3166],[0.15,8.59696],[0.16,6.59265],[0.17,4.29606],[0.18,5.18914],[0.19,8.03663],[0.2,9.26253],[0.21,9.4081],[0.22,10.5172],[0.23,11.7406],[0.24,10.8641],[0.25,9.2509],[0.26,10.3346],[0.27,11.0494],[0.28,11.1169],[0.29,11.751],[0.3,10.6311],[0.31,8.98826],[0.32,10.1977],[0.33,9.13187],[0.34,6.56771],[0.35,8.90574],[0.36,7.1326],[0.37,8.21234],[0.38,8.21788],[0.39,8.66401],[0.4,9.36874],[0.41,9.44638],[0.42,10.094],[0.43,9.9883],[0.44,9.73254],[0.45,12.9446],[0.46,12.812],[0.47,13.5324],[0.48,14.3018],[0.49,16.2322],[0.5,15.4387],[0.51,13.8168],[0.52,14.665],[0.53,17.206],[0.54,16.0676],[0.55,14.7594],[0.56,13.8655],[0.57,13.6885],[0.58,13.8888],[0.59,10.5294],[0.6,11.1886],[0.61,8.65621],[0.62,8.33403],[0.63,10.6711],[0.64,10.9057],[0.65,14.8119],[0.66,14.4957],[0.67,12.7801],[0.68,13.8414],[0.69,15.5354],[0.7,15.251],[0.71,11.8059],[0.72,10.9403],[0.73,10.2795],[0.74,9.34766],[0.75,9.70543],[0.76,12.8913],[0.77,11.1637],[0.78,11.6182],[0.79,12.1558],[0.8,7.16062],[0.81,8.91671],[0.82,9.42586],[0.83,11.9156],[0.84,10.5485],[0.85,7.37444],[0.86,8.36039],[0.87,21.4621],[0.88,12.6282],[0.89,14.5912]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,47.7404],[0.11,38.3646],[0.12,39.1561],[0.13,37.0008],[0.14,29.3615],[0.15,39.3988],[0.16,43.7724],[0.17,44.3424],[0.18,43.5918],[0.19,45.9172],[0.2,49.6649],[0.21,48.9968],[0.22,47.7976],[0.23,47.5533],[0.24,40.3748],[0.25,46.8775],[0.26,45.2581],[0.27,48.3607],[0.28,47.2735],[0.29,46.462],[0.3,47.963],[0.31,48.6294],[0.32,50.685],[0.33,51.4393],[0.34,52.7414],[0.35,48.2546],[0.36,53.9521],[0.37,51.3092],[0.38,48.7507],[0.39,46.7506],[0.4,42.0649],[0.41,39.2894],[0.42,42.4353],[0.43,42.3601],[0.44,40.7539],[0.45,40.4862],[0.46,41.7944],[0.47,38.5232],[0.48,38.1311],[0.49,33.5128],[0.5,33.8424],[0.51,35.9815],[0.52,39.2402],[0.53,41.7362],[0.54,44.4787],[0.55,48.8154],[0.56,47.99],[0.57,46.9869],[0.58,45.5681],[0.59,48.4569],[0.6,45.5907],[0.61,49.023],[0.62,44.9064],[0.63,42.5933],[0.64,41.4163],[0.65,38.4097],[0.66,32.255],[0.67,38.4707],[0.68,38.0519],[0.69,41.1861],[0.7,43.6347],[0.71,47.1234],[0.72,51.0178],[0.73,50.0772],[0.74,55.9485],[0.75,54.1163],[0.76,57.6299],[0.77,58.5422],[0.78,56.7596],[0.79,57.168],[0.8,62.5356],[0.81,61.8401],[0.82,65.7008],[0.83,62.1686],[0.84,63.6801],[0.85,68.0815],[0.86,56.8933],[0.87,49.9031],[0.88,64.0736],[0.89,65.1755]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,45.1671],[0.11,53.3657],[0.12,53.3311],[0.13,55.614],[0.14,58.3219],[0.15,52.0042],[0.16,49.6349],[0.17,51.3615],[0.18,51.2191],[0.19,46.0462],[0.2,41.0726],[0.21,41.5951],[0.22,41.6852],[0.23,40.7061],[0.24,48.7612],[0.25,43.8716],[0.26,44.4073],[0.27,40.5898],[0.28,41.6095],[0.29,41.7871],[0.3,41.4059],[0.31,42.3824],[0.32,39.1173],[0.33,39.4288],[0.34,40.6909],[0.35,42.8396],[0.36,38.9153],[0.37,40.4784],[0.38,43.0314],[0.39,44.5853],[0.4,48.5664],[0.41,51.2642],[0.42,47.4707],[0.43,47.6516],[0.44,49.5135],[0.45,46.5692],[0.46,45.3936],[0.47,47.9444],[0.48,47.5671],[0.49,50.255],[0.5,50.7189],[0.51,50.2017],[0.52,46.0949],[0.53,41.0578],[0.54,39.4537],[0.55,36.4253],[0.56,38.1444],[0.57,39.3246],[0.58,40.5431],[0.59,41.0137],[0.6,43.2206],[0.61,42.3208],[0.62,46.7596],[0.63,46.7356],[0.64,47.678],[0.65,46.7784],[0.66,53.2493],[0.67,48.7492],[0.68,48.1066],[0.69,43.2785],[0.7,41.1143],[0.71,41.0707],[0.72,38.0419],[0.73,39.6433],[0.74,34.7039],[0.75,36.1783],[0.76,29.4788],[0.77,30.2941],[0.78,31.6222],[0.79,30.6762],[0.8,30.3038],[0.81,29.2432],[0.82,24.8733],[0.83,25.9157],[0.84,25.7715],[0.85,24.544],[0.86,34.7463],[0.87,28.6349],[0.88,23.2982],[0.89,20.2333]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.34,0],[0.34,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,7.09257],[8.00481,8.26966],[7.73314,7.5128],[7.60731,7.38524],[7.14207,12.3166],[7.09831,8.59696],[7.09018,6.59265],[6.75573,4.29606],[6.5486,5.18914],[6.36116,8.03663],[6.33235,9.26253],[5.61784,9.4081],[5.54196,10.5172],[5.5233,11.7406],[5.34578,10.8641],[5.27131,9.2509],[4.76186,10.3346],[4.57202,11.0494],[4.2294,11.1169],[4.02417,11.751],[3.94215,10.6311],[3.78926,8.98826],[3.24837,10.1977],[3.17236,9.13187],[2.9207,6.56771],[2.89812,8.90574],[2.8277,7.1326],[2.73875,8.21234],[2.53454,8.21788],[2.21662,8.66401],[2.09839,9.36874],[2.07895,9.44638],[1.98399,10.094],[1.96847,9.9883],[1.72863,9.73254],[1.71187,12.9446],[1.6795,12.812],[1.51924,13.5324],[1.48069,14.3018],[1.46952,16.2322],[1.37923,15.4387],[0.984863,13.8168],[0.784601,14.665],[0.59061,17.206],[0.379378,16.0676],[0.33482,14.7594],[0.328182,13.8655],[0.246357,13.6885],[0.233188,13.8888],[0.1253,10.5294],[-0.035681,11.1886],[-0.27909,8.65621],[-0.288348,8.33403],[-0.315157,10.6711],[-0.320802,10.9057],[-0.70966,14.8119],[-0.949787,14.4957],[-1.0637,12.7801],[-1.15069,13.8414],[-1.19137,15.5354],[-1.19895,15.251],[-1.45062,11.8059],[-1.45566,10.9403],[-2.20558,10.2795],[-2.22676,9.34766],[-2.26291,9.70543],[-2.27523,12.8913],[-2.34887,11.1637],[-2.4416,11.6182],[-2.48686,12.1558],[-2.79442,7.16062],[-2.81501,8.91671],[-3.0607,9.42586],[-3.13909,11.9156],[-3.75041,10.5485],[-4.10517,7.37444],[-4.12148,8.36039],[-4.47859,21.4621],[-4.5309,12.6282],[-4.89021,14.5912]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,47.7404],[8.00481,38.3646],[7.73314,39.1561],[7.60731,37.0008],[7.14207,29.3615],[7.09831,39.3988],[7.09018,43.7724],[6.75573,44.3424],[6.5486,43.5918],[6.36116,45.9172],[6.33235,49.6649],[5.61784,48.9968],[5.54196,47.7976],[5.5233,47.5533],[5.34578,40.3748],[5.27131,46.8775],[4.76186,45.2581],[4.57202,48.3607],[4.2294,47.2735],[4.02417,46.462],[3.94215,47.963],[3.78926,48.6294],[3.24837,50.685],[3.17236,51.4393],[2.9207,52.7414],[2.89812,48.2546],[2.8277,53.9521],[2.73875,51.3092],[2.53454,48.7507],[2.21662,46.7506],[2.09839,42.0649],[2.07895,39.2894],[1.98399,42.4353],[1.96847,42.3601],[1.72863,40.7539],[1.71187,40.4862],[1.6795,41.7944],[1.51924,38.5232],[1.48069,38.1311],[1.46952,33.5128],[1.37923,33.8424],[0.984863,35.9815],[0.784601,39.2402],[0.59061,41.7362],[0.379378,44.4787],[0.33482,48.8154],[0.328182,47.99],[0.246357,46.9869],[0.233188,45.5681],[0.1253,48.4569],[-0.035681,45.5907],[-0.27909,49.023],[-0.288348,44.9064],[-0.315157,42.5933],[-0.320802,41.4163],[-0.70966,38.4097],[-0.949787,32.255],[-1.0637,38.4707],[-1.15069,38.0519],[-1.19137,41.1861],[-1.19895,43.6347],[-1.45062,47.1234],[-1.45566,51.0178],[-2.20558,50.0772],[-2.22676,55.9485],[-2.26291,54.1163],[-2.27523,57.6299],[-2.34887,58.5422],[-2.4416,56.7596],[-2.48686,57.168],[-2.79442,62.5356],[-2.81501,61.8401],[-3.0607,65.7008],[-3.13909,62.1686],[-3.75041,63.6801],[-4.10517,68.0815],[-4.12148,56.8933],[-4.47859,49.9031],[-4.5309,64.0736],[-4.89021,65.1755]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,45.1671],[8.00481,53.3657],[7.73314,53.3311],[7.60731,55.614],[7.14207,58.3219],[7.09831,52.0042],[7.09018,49.6349],[6.75573,51.3615],[6.5486,51.2191],[6.36116,46.0462],[6.33235,41.0726],[5.61784,41.5951],[5.54196,41.6852],[5.5233,40.7061],[5.34578,48.7612],[5.27131,43.8716],[4.76186,44.4073],[4.57202,40.5898],[4.2294,41.6095],[4.02417,41.7871],[3.94215,41.4059],[3.78926,42.3824],[3.24837,39.1173],[3.17236,39.4288],[2.9207,40.6909],[2.89812,42.8396],[2.8277,38.9153],[2.73875,40.4784],[2.53454,43.0314],[2.21662,44.5853],[2.09839,48.5664],[2.07895,51.2642],[1.98399,47.4707],[1.96847,47.6516],[1.72863,49.5135],[1.71187,46.5692],[1.6795,45.3936],[1.51924,47.9444],[1.48069,47.5671],[1.46952,50.255],[1.37923,50.7189],[0.984863,50.2017],[0.784601,46.0949],[0.59061,41.0578],[0.379378,39.4537],[0.33482,36.4253],[0.328182,38.1444],[0.246357,39.3246],[0.233188,40.5431],[0.1253,41.0137],[-0.035681,43.2206],[-0.27909,42.3208],[-0.288348,46.7596],[-0.315157,46.7356],[-0.320802,47.678],[-0.70966,46.7784],[-0.949787,53.2493],[-1.0637,48.7492],[-1.15069,48.1066],[-1.19137,43.2785],[-1.19895,41.1143],[-1.45062,41.0707],[-1.45566,38.0419],[-2.20558,39.6433],[-2.22676,34.7039],[-2.26291,36.1783],[-2.27523,29.4788],[-2.34887,30.2941],[-2.4416,31.6222],[-2.48686,30.6762],[-2.79442,30.3038],[-2.81501,29.2432],[-3.0607,24.8733],[-3.13909,25.9157],[-3.75041,25.7715],[-4.10517,24.544],[-4.12148,34.7463],[-4.47859,28.6349],[-4.5309,23.2982],[-4.89021,20.2333]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[5.63465,0.0602427,-0.603406],[0.978303,0.889217,-2.50961],[-0.789076,0.279502,-0.541955],[2.11766,4.2585,3.68097],[1.98963,0.963867,0.926941],[-1.02739,3.07176,0.754481],[0.645949,3.81159,1.19629],[3.03552,2.66644,5.24618],[-2.31782,4.82214,0.00129137],[-0.415984,-0.673385,0.83104],[0.845586,-0.508305,3.71438],[0.474924,1.86564,-2.76657],[3.3388,0.857649,-2.15845],[3.15921,2.63662,-0.538475],[-2.27918,-3.98396,1.78563],[4.09004,-0.184174,5.73799],[-0.63958,0.792352,-0.971021],[2.97463,0.307713,-1.69007],[3.14023,2.85458,0.689704],[0.0767714,4.36922,2.42493],[2.85998,0.0324442,0.651082],[2.32401,-0.397526,0.946109],[-1.56368,1.77385,1.30598],[0.0646295,-0.0283882,1.76892],[1.52227,-0.156423,-1.6649],[2.72995,2.88337,1.65906],[1.08244,1.28233,0.921285],[1.54236,0.233116,2.52191],[1.07027,0.409096,1.2797],[-0.727617,3.47317,3.81891],[2.36271,0.558869,3.50873],[-0.167472,-1.52782,0.528134],[-0.266958,5.01016,-1.12319],[-0.946931,1.36409,1.93206],[-3.808,-0.351608,0.134839],[2.23117,2.89253,1.50955],[0.652852,2.48376,0.833023],[-1.46072,-1.92357,-0.0384577],[4.81774,-1.30385,3.04655],[1.33997,0.804473,0.153316],[-0.277345,0.479692,-1.87155],[3.31468,-1.36896,0.515763],[-2.51967,1.44871,0.00434747],[2.78964,2.19046,0.502041],[1.18535,-0.649198,2.64985],[-2.29028,0.372972,3.14514],[0.437226,3.03081,0.312976],[4.47008,-2.09811,-0.140787],[-0.269837,1.79438,0.0868794],[-0.707117,1.08063,0.400903],[1.90165,1.06797,0.142799],[2.75428,1.5257,1.53934],[-0.73626,0.353477,-0.438173],[-2.34535,0.960574,-1.24071],[-0.195222,0.338541,0.926703],[0.809966,2.82489,3.26842],[1.31841,-0.235145,3.94377],[3.8347,0.699285,0.0737891],[-1.49972,-2.70277,3.43123],[0.232383,0.728034,-0.932428],[7.1576,-0.421654,0.567064],[0.547164,1.05173,2.84242],[1.08398,1.20717,1.49895],[-0.335868,1.2473,0.706039],[0.456662,1.97,1.40271],[0.480876,1.01007,-2.99264],[-0.471795,1.48897,-2.87638],[2.10799,-0.758226,3.20991],[2.0678,1.08712,-0.186513],[2.91041,3.89511,0.159573],[-1.04619,-0.135648,-0.264272],[-0.343404,-0.124782,1.10442],[2.13577,-0.608209,-1.0548],[1.04153,3.73942,2.45338],[3.49181,4.99089,0.17794],[1.53205,4.86247,2.97446],[1.81439,1.44751,-0.613744],[-0.760712,-1.77115,3.95306],[1.97459,-0.233206,0.459024],[5.44812,2.86809,3.16697],[1.82492,-1.10225,0.507005],[1.47266,2.76017,-0.246228],[-1.11526,0.349151,2.4513],[-1.43773,1.4407,5.03681],[2.51834,5.98997,2.60635],[-1.17615,0.357677,6.27642],[-0.32524,-0.290789,0.119343],[3.63033,1.76377,1.45285],[1.69211,2.4876,-1.79782],[1.24978,2.01532,0.794449],[1.38358,0.37941,1.12814],[-1.19273,0.39525,1.77498],[-1.88264,-0.147935,0.803808],[1.46083,-1.71739,-0.968027],[3.32882,-0.26805,1.07652],[2.34548,0.546559,2.00859],[-1.70487,0.837598,1.94412],[3.85449,1.22454,-0.741503],[0.504805,1.27921,3.08803],[1.06118,-0.690944,0.452225]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[4.33748],[-5.37474],[-2.29224],[3.09186],[2.39771],[-4.12606],[-2.67887],[9.52822],[-9.54844],[2.25617],[9.03681],[-7.85667],[-2.26457],[-1.87267],[7.26802],[15.8423],[-3.77015],[-0.867086],[0.237775],[-1.6272],[4.11348],[4.81252],[-1.6125],[3.64506],[-1.5729],[1.723],[1.00151],[6.2365],[3.01602],[1.70045],[8.54188],[3.18053],[-10.0286],[0.871059],[-3.01091],[0.911481],[-1.40675],[1.34771],[12.8666],[0.439897],[-4.73998],[6.39965],[-4.68403],[0.508032],[7.45885],[3.44055],[-3.48304],[7.33568],[-2.78765],[-1.52626],[0.585297],[3.5444],[-2.14282],[-6.26763],[1.15037],[3.10948],[9.55868],[2.93335],[9.41691],[-2.72452],[8.92421],[4.65441],[2.27112],[-0.794738],[0.307076],[-7.01952],[-8.458],[9.66516],[0.0640958],[-2.61311],[-1.37126],[2.05262],[0.938479],[0.339178],[-3.63865],[0.187272],[-1.58437],[9.80213],[3.24244],[7.47993],[4.4923],[-3.16005],[3.26362],[6.47484],[-1.25392],[10.8402],[0.349631],[3.89037],[-5.63493],[-0.184294],[3.07075],[1.76436],[-0.0531215],[2.10087],[5.88394],[5.54282],[0.926974],[0.53468],[4.76205],[3.00205]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=Greater name=Unnamed threshold=3 Mean point in event domain= [1.71595,0.072233,2.36426] Importance factors at threshold 3.0 = [X0 : 0.158471, X1 : 0.266112, X2 : 0.575417] Importance factors at threshold/2 1.5 = [X0 : 0.142988, X1 : 0.278352, X2 : 0.57866] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 15.8%,X1 : 26.6%,X2 : 57.5%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.158471],[0.266112],[0.575417]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,8.45335],[0.11,9.36928],[0.12,15.7839],[0.13,14.6038],[0.14,19.9788],[0.15,12.8162],[0.16,8.37958],[0.17,10.7591],[0.18,10.7059],[0.19,13.1318],[0.2,14.2334],[0.21,15.4595],[0.22,14.1027],[0.23,12.9218],[0.24,13.5035],[0.25,19.1994],[0.26,21.2412],[0.27,24.4767],[0.28,22.5431],[0.29,24.5348],[0.3,19.4589],[0.31,16.3681],[0.32,17.2662],[0.33,15.5181],[0.34,15.0249],[0.35,15.9689],[0.36,16.1613],[0.37,15.9902],[0.38,15.8471],[0.39,18.9626],[0.4,19.999],[0.41,19.9356],[0.42,18.0961],[0.43,18.5145],[0.44,16.8272],[0.45,14.3483],[0.46,16.2447],[0.47,14.2988],[0.48,11.8003],[0.49,10.6847],[0.5,10.8215],[0.51,11.9743],[0.52,9.47294],[0.53,10.6981],[0.54,8.97347],[0.55,9.8864],[0.56,12.8345],[0.57,14.941],[0.58,15.4974],[0.59,14.1567],[0.6,14.4198],[0.61,13.9927],[0.62,16.7026],[0.63,17.4596],[0.64,19.1336],[0.65,15.8565],[0.66,16.4462],[0.67,15.2112],[0.68,18.2831],[0.69,20.6936],[0.7,18.6248],[0.71,18.7077],[0.72,17.0027],[0.73,18.599],[0.74,20.6329],[0.75,17.4387],[0.76,16.4915],[0.77,20.6529],[0.78,18.948],[0.79,24.3739],[0.8,22.4739],[0.81,27.4458],[0.82,27.9623],[0.83,28.3866],[0.84,27.4363],[0.85,19.0158],[0.86,21.6415],[0.87,22.0792],[0.88,29.8457],[0.89,28.8043]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,18.9097],[0.11,17.1846],[0.12,11.4878],[0.13,13.0887],[0.14,17.5433],[0.15,26.4563],[0.16,23.1041],[0.17,26.4634],[0.18,26.163],[0.19,27.1374],[0.2,26.493],[0.21,27.9801],[0.22,26.2269],[0.23,25.009],[0.24,27.8362],[0.25,28.4087],[0.26,29.0781],[0.27,26.691],[0.28,27.8744],[0.29,26.1816],[0.3,26.9309],[0.31,27.5507],[0.32,29.0104],[0.33,32.7653],[0.34,29.1347],[0.35,23.4621],[0.36,23.9705],[0.37,24.4474],[0.38,26.6112],[0.39,26.5644],[0.4,26.3111],[0.41,25.7835],[0.42,28.1766],[0.43,32.2038],[0.44,33.9004],[0.45,34.8729],[0.46,31.7235],[0.47,27.8352],[0.48,32.4502],[0.49,33.6022],[0.5,33.3228],[0.51,36.2068],[0.52,36.5914],[0.53,33.726],[0.54,33.2336],[0.55,33.5167],[0.56,33.59],[0.57,31.9571],[0.58,32.6361],[0.59,35.2544],[0.6,31.054],[0.61,29.8492],[0.62,27.1885],[0.63,21.5393],[0.64,21.7481],[0.65,24.0085],[0.66,22.8799],[0.67,23.144],[0.68,24.9372],[0.69,17.787],[0.7,20.2828],[0.71,18.7046],[0.72,19.3832],[0.73,22.1842],[0.74,22.2886],[0.75,21.9695],[0.76,17.0097],[0.77,15.1337],[0.78,17.1661],[0.79,18.3265],[0.8,21.0023],[0.81,16.4804],[0.82,12.5815],[0.83,14.0737],[0.84,13.7757],[0.85,18.2682],[0.86,15.8794],[0.87,13.0144],[0.88,6.63323],[0.89,7.94111]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.1,72.6369],[0.11,73.4461],[0.12,72.7283],[0.13,72.3075],[0.14,62.4779],[0.15,60.7275],[0.16,68.5163],[0.17,62.7775],[0.18,63.1312],[0.19,59.7308],[0.2,59.2736],[0.21,56.5605],[0.22,59.6704],[0.23,62.0692],[0.24,58.6602],[0.25,52.3919],[0.26,49.6807],[0.27,48.8322],[0.28,49.5825],[0.29,49.2836],[0.3,53.6102],[0.31,56.0812],[0.32,53.7234],[0.33,51.7166],[0.34,55.8403],[0.35,60.569],[0.36,59.8681],[0.37,59.5624],[0.38,57.5417],[0.39,54.473],[0.4,53.6898],[0.41,54.2809],[0.42,53.7274],[0.43,49.2817],[0.44,49.2724],[0.45,50.7789],[0.46,52.0317],[0.47,57.866],[0.48,55.7495],[0.49,55.7131],[0.5,55.8557],[0.51,51.8189],[0.52,53.9357],[0.53,55.5758],[0.54,57.7929],[0.55,56.5969],[0.56,53.5755],[0.57,53.1019],[0.58,51.8665],[0.59,50.589],[0.6,54.5262],[0.61,56.1582],[0.62,56.109],[0.63,61.0011],[0.64,59.1183],[0.65,60.135],[0.66,60.674],[0.67,61.6448],[0.68,56.7797],[0.69,61.5193],[0.7,61.0924],[0.71,62.5878],[0.72,63.6142],[0.73,59.2168],[0.74,57.0785],[0.75,60.5918],[0.76,66.4988],[0.77,64.2134],[0.78,63.8858],[0.79,57.2995],[0.8,56.5238],[0.81,56.0737],[0.82,59.4561],[0.83,57.5397],[0.84,58.788],[0.85,62.716],[0.86,62.479],[0.87,64.9064],[0.88,63.521],[0.89,63.2546]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.38,0],[0.38,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,8.45335],[7.47993,9.36928],[7.45885,15.7839],[7.33568,14.6038],[7.26802,19.9788],[6.47484,12.8162],[6.39965,8.37958],[6.2365,10.7591],[5.88394,10.7059],[5.54282,13.1318],[4.81252,14.2334],[4.76205,15.4595],[4.65441,14.1027],[4.4923,12.9218],[4.33748,13.5035],[4.11348,19.1994],[3.89037,21.2412],[3.64506,24.4767],[3.5444,22.5431],[3.44055,24.5348],[3.26362,19.4589],[3.24244,16.3681],[3.18053,17.2662],[3.10948,15.5181],[3.09186,15.0249],[3.07075,15.9689],[3.01602,16.1613],[3.00205,15.9902],[2.93335,15.8471],[2.39771,18.9626],[2.27112,19.999],[2.25617,19.9356],[2.10087,18.0961],[2.05262,18.5145],[1.76436,16.8272],[1.723,14.3483],[1.70045,16.2447],[1.34771,14.2988],[1.15037,11.8003],[1.00151,10.6847],[0.938479,10.8215],[0.926974,11.9743],[0.911481,9.47294],[0.871059,10.6981],[0.585297,8.97347],[0.53468,9.8864],[0.508032,12.8345],[0.439897,14.941],[0.349631,15.4974],[0.339178,14.1567],[0.307076,14.4198],[0.237775,13.9927],[0.187272,16.7026],[0.0640958,17.4596],[-0.0531215,19.1336],[-0.184294,15.8565],[-0.794738,16.4462],[-0.867086,15.2112],[-1.25392,18.2831],[-1.37126,20.6936],[-1.40675,18.6248],[-1.52626,18.7077],[-1.5729,17.0027],[-1.58437,18.599],[-1.6125,20.6329],[-1.6272,17.4387],[-1.87267,16.4915],[-2.14282,20.6529],[-2.26457,18.948],[-2.29224,24.3739],[-2.61311,22.4739],[-2.67887,27.4458],[-2.72452,27.9623],[-2.78765,28.3866],[-3.01091,27.4363],[-3.16005,19.0158],[-3.48304,21.6415],[-3.63865,22.0792],[-3.77015,29.8457],[-4.12606,28.8043]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,18.9097],[7.47993,17.1846],[7.45885,11.4878],[7.33568,13.0887],[7.26802,17.5433],[6.47484,26.4563],[6.39965,23.1041],[6.2365,26.4634],[5.88394,26.163],[5.54282,27.1374],[4.81252,26.493],[4.76205,27.9801],[4.65441,26.2269],[4.4923,25.009],[4.33748,27.8362],[4.11348,28.4087],[3.89037,29.0781],[3.64506,26.691],[3.5444,27.8744],[3.44055,26.1816],[3.26362,26.9309],[3.24244,27.5507],[3.18053,29.0104],[3.10948,32.7653],[3.09186,29.1347],[3.07075,23.4621],[3.01602,23.9705],[3.00205,24.4474],[2.93335,26.6112],[2.39771,26.5644],[2.27112,26.3111],[2.25617,25.7835],[2.10087,28.1766],[2.05262,32.2038],[1.76436,33.9004],[1.723,34.8729],[1.70045,31.7235],[1.34771,27.8352],[1.15037,32.4502],[1.00151,33.6022],[0.938479,33.3228],[0.926974,36.2068],[0.911481,36.5914],[0.871059,33.726],[0.585297,33.2336],[0.53468,33.5167],[0.508032,33.59],[0.439897,31.9571],[0.349631,32.6361],[0.339178,35.2544],[0.307076,31.054],[0.237775,29.8492],[0.187272,27.1885],[0.0640958,21.5393],[-0.0531215,21.7481],[-0.184294,24.0085],[-0.794738,22.8799],[-0.867086,23.144],[-1.25392,24.9372],[-1.37126,17.787],[-1.40675,20.2828],[-1.52626,18.7046],[-1.5729,19.3832],[-1.58437,22.1842],[-1.6125,22.2886],[-1.6272,21.9695],[-1.87267,17.0097],[-2.14282,15.1337],[-2.26457,17.1661],[-2.29224,18.3265],[-2.61311,21.0023],[-2.67887,16.4804],[-2.72452,12.5815],[-2.78765,14.0737],[-3.01091,13.7757],[-3.16005,18.2682],[-3.48304,15.8794],[-3.63865,13.0144],[-3.77015,6.63323],[-4.12606,7.94111]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.54188,72.6369],[7.47993,73.4461],[7.45885,72.7283],[7.33568,72.3075],[7.26802,62.4779],[6.47484,60.7275],[6.39965,68.5163],[6.2365,62.7775],[5.88394,63.1312],[5.54282,59.7308],[4.81252,59.2736],[4.76205,56.5605],[4.65441,59.6704],[4.4923,62.0692],[4.33748,58.6602],[4.11348,52.3919],[3.89037,49.6807],[3.64506,48.8322],[3.5444,49.5825],[3.44055,49.2836],[3.26362,53.6102],[3.24244,56.0812],[3.18053,53.7234],[3.10948,51.7166],[3.09186,55.8403],[3.07075,60.569],[3.01602,59.8681],[3.00205,59.5624],[2.93335,57.5417],[2.39771,54.473],[2.27112,53.6898],[2.25617,54.2809],[2.10087,53.7274],[2.05262,49.2817],[1.76436,49.2724],[1.723,50.7789],[1.70045,52.0317],[1.34771,57.866],[1.15037,55.7495],[1.00151,55.7131],[0.938479,55.8557],[0.926974,51.8189],[0.911481,53.9357],[0.871059,55.5758],[0.585297,57.7929],[0.53468,56.5969],[0.508032,53.5755],[0.439897,53.1019],[0.349631,51.8665],[0.339178,50.589],[0.307076,54.5262],[0.237775,56.1582],[0.187272,56.109],[0.0640958,61.0011],[-0.0531215,59.1183],[-0.184294,60.135],[-0.794738,60.674],[-0.867086,61.6448],[-1.25392,56.7797],[-1.37126,61.5193],[-1.40675,61.0924],[-1.52626,62.5878],[-1.5729,63.6142],[-1.58437,59.2168],[-1.6125,57.0785],[-1.6272,60.5918],[-1.87267,66.4988],[-2.14282,64.2134],[-2.26457,63.8858],[-2.29224,57.2995],[-2.61311,56.5238],[-2.67887,56.0737],[-2.72452,59.4561],[-2.78765,57.5397],[-3.01091,58.788],[-3.16005,62.716],[-3.48304,62.479],[-3.63865,64.9064],[-3.77015,63.521],[-4.12606,63.2546]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[2.2164,-1.53235,0.123469],[3.41096,-3.36277,1.70008],[0.289986,3.8745,2.62134],[2.58631,0.0589488,1.52204],[-3.58012,-1.56577,-1.62356],[0.818432,2.99159,0.721094],[-0.120411,1.89098,1.64585],[1.89157,-1.07615,-0.713425],[1.94723,0.749005,1.70284],[4.56472,1.14041,-0.562733],[-0.443067,0.517553,-2.57593],[1.80272,3.73565,3.00869],[2.4831,0.912775,2.07869],[1.5999,1.81543,0.0297761],[0.234016,-0.505633,1.51585],[4.93752,-0.342581,4.71158],[1.10432,2.58089,2.43271],[-0.487244,1.36871,-2.06147],[2.31005,2.07614,4.47643],[-0.917445,1.75584,0.637992],[4.34593,-1.07792,0.292895],[3.42763,-0.554066,-1.73706],[1.20695,-0.783639,2.8112],[1.66959,0.0327168,2.35592],[4.41876,3.14124,-0.0138495],[-2.32173,5.49246,2.5192],[-0.0215276,-0.266132,-0.914144],[2.08809,2.62912,-0.469417],[0.777078,2.98896,0.678749],[-0.877541,-2.93738,-0.315207],[1.6775,3.03112,2.27433],[0.820186,-0.711773,3.54257],[0.523495,3.6526,5.23935],[-0.803163,-2.03393,-1.59876],[1.46074,-5.19475,1.02646],[-1.51486,3.05552,-0.532861],[1.43502,3.09067,1.66314],[0.0235905,0.0690359,1.66417],[0.664548,7.02525,2.88408],[2.22378,2.22343,-2.07499],[-3.8134,2.32587,-0.31232],[-0.503223,1.87635,0.0893308],[4.72076,1.43944,4.45093],[-0.086811,-0.473498,-0.0164129],[-3.51734,-0.1928,0.37064],[-2.56548,-0.369468,1.12223],[2.74744,-1.92591,0.362429],[3.52628,0.146549,-2.78469],[-0.0287811,2.29446,1.0074],[2.45938,0.505532,1.95838],[0.93278,0.926546,1.22051],[0.246259,0.808821,1.21824],[0.602492,1.94724,1.32327],[1.76897,1.23294,0.799839],[3.98313,3.44601,2.05329],[-0.313847,0.737544,-1.90694],[3.34829,2.85879,0.325773],[2.15738,-0.164918,-1.77772],[0.000503317,-2.11032,1.96617],[1.41001,0.805495,2.18513],[-0.204089,-1.42017,-0.773396],[0.717773,1.88397,2.03832],[-2.0291,-0.353835,2.33536],[-1.81169,0.940933,-0.263657],[0.315686,5.10677,3.31741],[-1.91434,-0.688733,0.422779],[1.83854,-0.672129,2.71654],[-0.813132,-0.83362,3.32644],[1.60384,1.98066,1.95085],[-0.577409,-0.338898,0.724144],[-0.943062,-1.37568,3.85641],[-0.17846,-2.46435,2.64999],[7.05598,4.38959,-2.29653],[-0.992939,2.54624,-0.0389516],[0.929605,0.120269,0.481336],[-0.750838,-4.07973,0.886658],[0.956544,2.19844,1.29374],[-0.490721,-0.043192,2.18404],[0.0599226,-3.34422,0.134765],[1.5355,0.264021,3.29683],[0.931343,1.92216,-0.244849],[-2.25011,-0.0861984,0.46093],[1.04176,2.24771,2.53427],[2.7776,3.96061,2.322],[3.8179,2.15225,4.78653],[2.71722,-0.814696,-0.0750054],[-0.276867,3.69713,-3.53217],[1.84646,-0.992282,-1.17501],[1.22216,2.35533,-1.11004],[0.991807,2.12567,0.940768],[1.14041,0.52946,-1.58062],[-1.03728,-2.42262,2.88665],[-0.084639,-0.998223,-1.80914],[4.89212,2.55914,3.27695],[2.4223,0.0932285,2.23664],[2.44409,2.32004,1.93184],[0.18454,3.91838,0.176869],[2.09888,3.90039,0.345501],[-1.79591,3.6023,0.0294813],[0.455187,0.322354,-0.581513]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 description=[y0] data=[[4.76186],[11.8553],[-0.27909],[5.54196],[-4.47859],[-2.22676],[0.33482],[2.07895],[4.2294],[1.72863],[-6.37125],[2.21662],[5.27131],[-1.0637],[4.02417],[14.8746],[2.09839],[-6.66325],[8.14869],[-2.27523],[6.5486],[0.784601],[8.00481],[6.33235],[-0.320802],[-5.52201],[-1.45062],[-2.79442],[-2.34887],[2.89812],[1.6795],[8.97298],[5.5233],[-0.949787],[11.3058],[-7.16386],[0.1253],[3.24837],[-4.10517],[-5.26135],[-7.92685],[-3.13909],[11.4634],[0.59061],[-2.48686],[0.233188],[6.36116],[-2.26291],[-1.45566],[5.61784],[1.98399],[1.46952],[0.328182],[1.51924],[2.9207],[-5.23405],[-0.288348],[-1.15069],[7.09831],[4.57202],[0.379378],[1.96847],[3.17236],[-3.75041],[-0.70966],[-0.035681],[8.27981],[7.09018],[2.53454],[1.37923],[8.83326],[8.81804],[-4.12148],[-4.89021],[1.71187],[7.14207],[0.246357],[3.94215],[5.34578],[7.73314],[-2.4416],[-1.19895],[2.73875],[1.48069],[10.1626],[3.78926],[-12.8869],[0.984863],[-4.5309],[-0.315157],[-2.81501],[8.36995],[-2.20558],[7.60731],[6.75573],[2.8277],[-5.33929],[-3.0607],[-7.1404],[-1.19137]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=GreaterOrEqual name=Unnamed threshold=3 Mean point in event domain= [1.54574,-0.546511,2.35839] Importance factors at 3.0 = [X0 : 0.0656771, X1 : 0.527414, X2 : 0.406909] Importance factors at 1.5 = [X0 : 0.143018, X1 : 0.381311, X2 : 0.475671] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - y0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 6.6%,X1 : 52.7%,X2 : 40.7%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0656771],[0.527414],[0.406909]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,8.26966],[0.12,7.5128],[0.13,7.38524],[0.14,12.3166],[0.15,8.59696],[0.16,6.59265],[0.17,4.29606],[0.18,5.18914],[0.19,8.03663],[0.2,9.26253],[0.21,9.4081],[0.22,10.5172],[0.23,11.7406],[0.24,10.8641],[0.25,9.2509],[0.26,10.3346],[0.27,11.0494],[0.28,11.1169],[0.29,11.751],[0.3,10.6311],[0.31,8.98826],[0.32,10.1977],[0.33,9.13187],[0.34,6.56771],[0.35,8.90574],[0.36,7.1326],[0.37,8.21234],[0.38,8.21788],[0.39,8.66401],[0.4,9.36874],[0.41,9.44638],[0.42,10.094],[0.43,9.9883],[0.44,9.73254],[0.45,12.9446],[0.46,12.812],[0.47,13.5324],[0.48,14.3018],[0.49,16.2322],[0.5,15.4387],[0.51,13.8168],[0.52,14.665],[0.53,17.206],[0.54,16.0676],[0.55,14.7594],[0.56,13.8655],[0.57,13.6885],[0.58,13.8888],[0.59,10.5294],[0.6,11.1886],[0.61,8.65621],[0.62,8.33403],[0.63,10.6711],[0.64,10.9057],[0.65,14.8119],[0.66,14.4957],[0.67,12.7801],[0.68,13.8414],[0.69,15.5354],[0.7,15.251],[0.71,11.8059],[0.72,10.9403],[0.73,10.2795],[0.74,9.34766],[0.75,9.70543],[0.76,12.8913],[0.77,11.1637],[0.78,11.6182],[0.79,12.1558],[0.8,7.16062],[0.81,8.91671],[0.82,9.42586],[0.83,11.9156],[0.84,10.5485],[0.85,7.37444],[0.86,8.36039],[0.87,21.4621],[0.88,12.6282],[0.89,14.5912],[0.9,12.2164]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,38.3646],[0.12,39.1561],[0.13,37.0008],[0.14,29.3615],[0.15,39.3988],[0.16,43.7724],[0.17,44.3424],[0.18,43.5918],[0.19,45.9172],[0.2,49.6649],[0.21,48.9968],[0.22,47.7976],[0.23,47.5533],[0.24,40.3748],[0.25,46.8775],[0.26,45.2581],[0.27,48.3607],[0.28,47.2735],[0.29,46.462],[0.3,47.963],[0.31,48.6294],[0.32,50.685],[0.33,51.4393],[0.34,52.7414],[0.35,48.2546],[0.36,53.9521],[0.37,51.3092],[0.38,48.7507],[0.39,46.7506],[0.4,42.0649],[0.41,39.2894],[0.42,42.4353],[0.43,42.3601],[0.44,40.7539],[0.45,40.4862],[0.46,41.7944],[0.47,38.5232],[0.48,38.1311],[0.49,33.5128],[0.5,33.8424],[0.51,35.9815],[0.52,39.2402],[0.53,41.7362],[0.54,44.4787],[0.55,48.8154],[0.56,47.99],[0.57,46.9869],[0.58,45.5681],[0.59,48.4569],[0.6,45.5907],[0.61,49.023],[0.62,44.9064],[0.63,42.5933],[0.64,41.4163],[0.65,38.4097],[0.66,32.255],[0.67,38.4707],[0.68,38.0519],[0.69,41.1861],[0.7,43.6347],[0.71,47.1234],[0.72,51.0178],[0.73,50.0772],[0.74,55.9485],[0.75,54.1163],[0.76,57.6299],[0.77,58.5422],[0.78,56.7596],[0.79,57.168],[0.8,62.5356],[0.81,61.8401],[0.82,65.7008],[0.83,62.1686],[0.84,63.6801],[0.85,68.0815],[0.86,56.8933],[0.87,49.9031],[0.88,64.0736],[0.89,65.1755],[0.9,67.3667]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,53.3657],[0.12,53.3311],[0.13,55.614],[0.14,58.3219],[0.15,52.0042],[0.16,49.6349],[0.17,51.3615],[0.18,51.2191],[0.19,46.0462],[0.2,41.0726],[0.21,41.5951],[0.22,41.6852],[0.23,40.7061],[0.24,48.7612],[0.25,43.8716],[0.26,44.4073],[0.27,40.5898],[0.28,41.6095],[0.29,41.7871],[0.3,41.4059],[0.31,42.3824],[0.32,39.1173],[0.33,39.4288],[0.34,40.6909],[0.35,42.8396],[0.36,38.9153],[0.37,40.4784],[0.38,43.0314],[0.39,44.5853],[0.4,48.5664],[0.41,51.2642],[0.42,47.4707],[0.43,47.6516],[0.44,49.5135],[0.45,46.5692],[0.46,45.3936],[0.47,47.9444],[0.48,47.5671],[0.49,50.255],[0.5,50.7189],[0.51,50.2017],[0.52,46.0949],[0.53,41.0578],[0.54,39.4537],[0.55,36.4253],[0.56,38.1444],[0.57,39.3246],[0.58,40.5431],[0.59,41.0137],[0.6,43.2206],[0.61,42.3208],[0.62,46.7596],[0.63,46.7356],[0.64,47.678],[0.65,46.7784],[0.66,53.2493],[0.67,48.7492],[0.68,48.1066],[0.69,43.2785],[0.7,41.1143],[0.71,41.0707],[0.72,38.0419],[0.73,39.6433],[0.74,34.7039],[0.75,36.1783],[0.76,29.4788],[0.77,30.2941],[0.78,31.6222],[0.79,30.6762],[0.8,30.3038],[0.81,29.2432],[0.82,24.8733],[0.83,25.9157],[0.84,25.7715],[0.85,24.544],[0.86,34.7463],[0.87,28.6349],[0.88,23.2982],[0.89,20.2333],[0.9,20.4169]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.34,0],[0.34,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,8.26966],[8.00481,7.5128],[7.73314,7.38524],[7.60731,12.3166],[7.14207,8.59696],[7.09831,6.59265],[7.09018,4.29606],[6.75573,5.18914],[6.5486,8.03663],[6.36116,9.26253],[6.33235,9.4081],[5.61784,10.5172],[5.54196,11.7406],[5.5233,10.8641],[5.34578,9.2509],[5.27131,10.3346],[4.76186,11.0494],[4.57202,11.1169],[4.2294,11.751],[4.02417,10.6311],[3.94215,8.98826],[3.78926,10.1977],[3.24837,9.13187],[3.17236,6.56771],[2.9207,8.90574],[2.89812,7.1326],[2.8277,8.21234],[2.73875,8.21788],[2.53454,8.66401],[2.21662,9.36874],[2.09839,9.44638],[2.07895,10.094],[1.98399,9.9883],[1.96847,9.73254],[1.72863,12.9446],[1.71187,12.812],[1.6795,13.5324],[1.51924,14.3018],[1.48069,16.2322],[1.46952,15.4387],[1.37923,13.8168],[0.984863,14.665],[0.784601,17.206],[0.59061,16.0676],[0.379378,14.7594],[0.33482,13.8655],[0.328182,13.6885],[0.246357,13.8888],[0.233188,10.5294],[0.1253,11.1886],[-0.035681,8.65621],[-0.27909,8.33403],[-0.288348,10.6711],[-0.315157,10.9057],[-0.320802,14.8119],[-0.70966,14.4957],[-0.949787,12.7801],[-1.0637,13.8414],[-1.15069,15.5354],[-1.19137,15.251],[-1.19895,11.8059],[-1.45062,10.9403],[-1.45566,10.2795],[-2.20558,9.34766],[-2.22676,9.70543],[-2.26291,12.8913],[-2.27523,11.1637],[-2.34887,11.6182],[-2.4416,12.1558],[-2.48686,7.16062],[-2.79442,8.91671],[-2.81501,9.42586],[-3.0607,11.9156],[-3.13909,10.5485],[-3.75041,7.37444],[-4.10517,8.36039],[-4.12148,21.4621],[-4.47859,12.6282],[-4.5309,14.5912],[-4.89021,12.2164]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,38.3646],[8.00481,39.1561],[7.73314,37.0008],[7.60731,29.3615],[7.14207,39.3988],[7.09831,43.7724],[7.09018,44.3424],[6.75573,43.5918],[6.5486,45.9172],[6.36116,49.6649],[6.33235,48.9968],[5.61784,47.7976],[5.54196,47.5533],[5.5233,40.3748],[5.34578,46.8775],[5.27131,45.2581],[4.76186,48.3607],[4.57202,47.2735],[4.2294,46.462],[4.02417,47.963],[3.94215,48.6294],[3.78926,50.685],[3.24837,51.4393],[3.17236,52.7414],[2.9207,48.2546],[2.89812,53.9521],[2.8277,51.3092],[2.73875,48.7507],[2.53454,46.7506],[2.21662,42.0649],[2.09839,39.2894],[2.07895,42.4353],[1.98399,42.3601],[1.96847,40.7539],[1.72863,40.4862],[1.71187,41.7944],[1.6795,38.5232],[1.51924,38.1311],[1.48069,33.5128],[1.46952,33.8424],[1.37923,35.9815],[0.984863,39.2402],[0.784601,41.7362],[0.59061,44.4787],[0.379378,48.8154],[0.33482,47.99],[0.328182,46.9869],[0.246357,45.5681],[0.233188,48.4569],[0.1253,45.5907],[-0.035681,49.023],[-0.27909,44.9064],[-0.288348,42.5933],[-0.315157,41.4163],[-0.320802,38.4097],[-0.70966,32.255],[-0.949787,38.4707],[-1.0637,38.0519],[-1.15069,41.1861],[-1.19137,43.6347],[-1.19895,47.1234],[-1.45062,51.0178],[-1.45566,50.0772],[-2.20558,55.9485],[-2.22676,54.1163],[-2.26291,57.6299],[-2.27523,58.5422],[-2.34887,56.7596],[-2.4416,57.168],[-2.48686,62.5356],[-2.79442,61.8401],[-2.81501,65.7008],[-3.0607,62.1686],[-3.13909,63.6801],[-3.75041,68.0815],[-4.10517,56.8933],[-4.12148,49.9031],[-4.47859,64.0736],[-4.5309,65.1755],[-4.89021,67.3667]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[8.14869,53.3657],[8.00481,53.3311],[7.73314,55.614],[7.60731,58.3219],[7.14207,52.0042],[7.09831,49.6349],[7.09018,51.3615],[6.75573,51.2191],[6.5486,46.0462],[6.36116,41.0726],[6.33235,41.5951],[5.61784,41.6852],[5.54196,40.7061],[5.5233,48.7612],[5.34578,43.8716],[5.27131,44.4073],[4.76186,40.5898],[4.57202,41.6095],[4.2294,41.7871],[4.02417,41.4059],[3.94215,42.3824],[3.78926,39.1173],[3.24837,39.4288],[3.17236,40.6909],[2.9207,42.8396],[2.89812,38.9153],[2.8277,40.4784],[2.73875,43.0314],[2.53454,44.5853],[2.21662,48.5664],[2.09839,51.2642],[2.07895,47.4707],[1.98399,47.6516],[1.96847,49.5135],[1.72863,46.5692],[1.71187,45.3936],[1.6795,47.9444],[1.51924,47.5671],[1.48069,50.255],[1.46952,50.7189],[1.37923,50.2017],[0.984863,46.0949],[0.784601,41.0578],[0.59061,39.4537],[0.379378,36.4253],[0.33482,38.1444],[0.328182,39.3246],[0.246357,40.5431],[0.233188,41.0137],[0.1253,43.2206],[-0.035681,42.3208],[-0.27909,46.7596],[-0.288348,46.7356],[-0.315157,47.678],[-0.320802,46.7784],[-0.70966,53.2493],[-0.949787,48.7492],[-1.0637,48.1066],[-1.15069,43.2785],[-1.19137,41.1143],[-1.19895,41.0707],[-1.45062,38.0419],[-1.45566,39.6433],[-2.20558,34.7039],[-2.22676,36.1783],[-2.26291,29.4788],[-2.27523,30.2941],[-2.34887,31.6222],[-2.4416,30.6762],[-2.48686,30.3038],[-2.79442,29.2432],[-2.81501,24.8733],[-3.0607,25.9157],[-3.13909,25.7715],[-3.75041,24.544],[-4.10517,34.7463],[-4.12148,28.6349],[-4.47859,23.2982],[-4.5309,20.2333],[-4.89021,20.4169]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] algo= class=SimulationSensitivityAnalysis inputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=3 description=[X0,X1,X2] data=[[-0.76659,1.02413,0.955199],[2.07402,-0.237599,-0.564887],[2.83979,0.165144,-0.223561],[5.04589,-3.73433,1.79733],[3.86728,1.67142,2.88598],[1.54107,-0.163431,-0.34603],[-2.42036,5.17366,-0.782465],[0.739761,-5.49274,2.42864],[3.35295,2.07511,1.93341],[3.09188,2.71589,3.03904],[-2.57103,-0.447255,0.418262],[3.54553,1.20922,2.3312],[2.29581,-0.424354,-0.949287],[-0.60412,-2.87935,0.431504],[-0.525739,-0.763888,1.4012],[1.2487,2.66104,-0.265927],[1.33988,0.96831,2.00305],[0.554074,2.76295,2.12141],[-0.22398,3.35568,-0.71722],[-0.111075,-0.494206,3.90565],[1.55094,-0.906343,1.66737],[0.540286,-0.495296,-0.436894],[2.31418,-1.84824,3.53625],[-0.0552651,0.455564,5.35845],[0.546311,2.14108,2.10063],[-2.40012,-0.891979,0.460628],[1.89407,1.19384,6.0076],[0.0842579,-2.13035,-2.71747],[-3.57745,0.442287,0.716671],[-0.396348,3.72754,2.08429],[0.678045,0.649217,5.27437],[0.441514,-0.402572,-0.488853],[2.05453,0.891867,2.39629],[2.63152,-2.23392,0.569344],[1.78884,1.65532,1.09771],[0.787155,3.44106,-4.98427],[0.674359,-1.66983,0.935858],[0.67995,2.3672,1.24843],[-1.29078,-1.07088,0.69049],[-1.68015,1.29967,-2.17458],[0.972254,3.58574,-0.595173],[0.778862,-0.603328,3.50788],[3.97496,1.01119,0.310016],[4.77826,4.08191,-1.36588],[2.21775,3.624,2.42492],[-0.288325,0.687539,1.07585],[1.25216,4.33651,0.343447],[2.2758,0.557925,1.66454],[0.26219,-1.32492,2.35089],[1.48015,1.99557,1.05442],[5.58372,2.23563,-0.210575],[-0.0627019,-1.99297,2.02121],[-0.0539979,-0.714038,5.39547],[1.46072,-2.18971,3.07229],[0.19478,2.22852,-0.248643],[4.08312,1.18932,3.72334],[-3.03745,-0.351882,-2.703],[3.3948,0.751386,-2.29854],[-1.66871,-2.76204,0.97268],[0.888994,-0.414813,0.851624],[0.167797,-1.44429,-0.973224],[-3.20065,1.19864,1.57194],[2.781,-1.42168,3.86832],[0.674051,0.544874,3.07019],[1.11989,-2.97252,-2.10804],[5.09815,-1.46912,4.0089],[0.693653,1.89799,5.09289],[1.31305,3.22929,-1.18428],[2.27456,2.01573,0.693532],[1.90329,3.32492,2.39397],[3.20852,-1.02536,0.842116],[0.1378,0.24748,2.86212],[1.13309,2.23718,0.574203],[0.465329,2.04901,2.0632],[4.75205,-1.75757,2.58498],[-1.65656,3.34417,5.22273],[-0.595161,0.743947,2.74621],[1.89311,-0.827214,4.22082],[-1.34676,-1.2611,2.9855],[-0.00806769,-1.514,-2.68786],[2.75008,-1.30107,2.07475],[-0.190073,-1.10031,3.96264],[1.10557,5.56205,-1.94414],[0.860611,2.50929,4.26284],[-0.959471,0.844543,-0.903491],[1.40749,2.17747,-0.835543],[0.886599,-0.374074,5.34504],[-0.145188,0.941921,-2.12356],[-0.366098,-0.150601,1.62142],[-0.906543,0.567482,1.3403],[4.02691,2.26866,5.53043],[1.45382,3.92713,1.06002],[1.62941,3.43329,0.206599],[4.06884,-1.30036,-5.19667],[1.30511,0.254844,1.75137],[1.75601,0.289451,2.68443],[1.0963,1.52179,0.525386],[0.961,-5.04251,0.438343],[-0.598072,3.99355,1.78888],[-2.94737,4.82057,5.36213]] outputSample=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=1 data=[[-0.392392],[1.30065],[2.14495],[14.242],[7.13211],[1.09416],[-11.7458],[13.8362],[4.10709],[5.09613],[-1.06363],[6.39411],[1.03376],[4.57792],[3.4225],[-3.27472],[3.89351],[0.652457],[-6.69194],[8.44153],[6.24519],[0.409442],[12.159],[9.97829],[1.53594],[-0.140895],[12.1185],[-2.15515],[-2.80754],[-1.81908],[10.253],[0.0676661],[5.50932],[7.12108],[1.50129],[-14.343],[5.05082],[-0.373998],[1.69651],[-7.97881],[-5.5967],[8.69961],[3.07821],[-4.07635],[1.63158],[0.832057],[-4.56571],[4.768],[6.95135],[0.59564],[1.80913],[6.96917],[11.808],[10.8899],[-3.64529],[9.74582],[-7.91563],[-2.32935],[4.41971],[3.21446],[0.387785],[-1.85473],[12.6502],[5.99713],[1.36259],[15.3196],[8.03245],[-5.89943],[0.638032],[1.70385],[6.4308],[5.49083],[-1.07427],[1.51822],[12.5584],[3.77265],[3.78134],[11.5756],[6.5159],[-3.11279],[8.8512],[9.38567],[-11.1258],[5.62236],[-4.03327],[-3.5298],[12.1378],[-5.8052],[3.10265],[0.922837],[11.6848],[-2.31684],[-3.10733],[-4.37397],[4.42559],[6.6907],[-0.135607],[9.40145],[-3.01065],[0.546046]] transformation=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,x2,y0,y1,y2] evaluationImplementation=class=NatafEllipticalDistributionEvaluation mean=class=Point name=Unnamed dimension=3 values=[1,1,1] inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] gradientImplementation=class=NatafEllipticalDistributionGradient inverseCholesky=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.5,0,0,0,0.5,0,0,0,0.5] hessianImplementation=class=NatafEllipticalDistributionHessian operator=class=GreaterOrEqual name=Unnamed threshold=3 Mean point in event domain= [1.48029,-0.397202,2.85309] Importance factors at threshold 3.0 = [X0 : 0.0410691, X1 : 0.347559, X2 : 0.611372] Importance factors at threshold/2 1.5 = [X0 : 0.0657106, X1 : 0.288027, X2 : 0.646263] importanceFactorsGraph= class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Importance Factors from Simulation - v0 xTitle= yTitle= axes=OFF grid=OFF legendposition= legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Pie name=Unnamed labels=[X0 : 4.1%,X1 : 34.8%,X2 : 61.1%] radius=1 center=class=Point name=Unnamed dimension=2 values=[0,0] color palette=[#ff0000,#80ff00,#00ffff] derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[0.0410691],[0.347559],[0.611372]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] importanceFactorsRangeGraphProbability= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=probability yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,16.0151],[0.12,14.5392],[0.13,12.3635],[0.14,9.72532],[0.15,12.0916],[0.16,10.995],[0.17,8.85427],[0.18,9.71332],[0.19,8.77969],[0.2,7.28393],[0.21,6.5821],[0.22,8.24504],[0.23,9.04851],[0.24,7.82808],[0.25,6.953],[0.26,7.10977],[0.27,5.4344],[0.28,6.42502],[0.29,7.67596],[0.3,7.70745],[0.31,7.24118],[0.32,6.92992],[0.33,7.29991],[0.34,6.6061],[0.35,7.54509],[0.36,7.1778],[0.37,7.69435],[0.38,6.67955],[0.39,6.69065],[0.4,5.28638],[0.41,6.27166],[0.42,6.32837],[0.43,5.49912],[0.44,4.31421],[0.45,3.69457],[0.46,3.61257],[0.47,3.11622],[0.48,4.10691],[0.49,4.79422],[0.5,6.78953],[0.51,7.21617],[0.52,6.12942],[0.53,6.68281],[0.54,6.46417],[0.55,6.21145],[0.56,6.57106],[0.57,6.65151],[0.58,7.1758],[0.59,7.45941],[0.6,8.1333],[0.61,7.19834],[0.62,6.60843],[0.63,6.44627],[0.64,7.10012],[0.65,7.38648],[0.66,5.56385],[0.67,5.41034],[0.68,5.09561],[0.69,4.908],[0.7,5.00619],[0.71,3.71228],[0.72,3.64857],[0.73,3.07698],[0.74,2.03624],[0.75,2.1134],[0.76,1.787],[0.77,0.890209],[0.78,0.749258],[0.79,0.854182],[0.8,1.39176],[0.81,0.533508],[0.82,0.336913],[0.83,0.432135],[0.84,0.315474],[0.85,0.36013],[0.86,0.433245],[0.87,0.338903],[0.88,0.137738],[0.89,0.687946],[0.9,1.50587]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,30.0564],[0.12,32.9651],[0.13,29.7373],[0.14,27.3116],[0.15,24.2133],[0.16,32.2431],[0.17,32.869],[0.18,34.1804],[0.19,34.1666],[0.2,33.968],[0.21,30.35],[0.22,27.9458],[0.23,30.9906],[0.24,33.4644],[0.25,34.9378],[0.26,34.3678],[0.27,35.6145],[0.28,37.0219],[0.29,35.5001],[0.3,36.5774],[0.31,35.8206],[0.32,32.8394],[0.33,32.0121],[0.34,31.804],[0.35,29.168],[0.36,31.2716],[0.37,31.0749],[0.38,34.5003],[0.39,34.6153],[0.4,37.7877],[0.41,36.1464],[0.42,35.6067],[0.43,35.171],[0.44,31.8829],[0.45,33.0904],[0.46,34.1414],[0.47,34.7772],[0.48,34.7559],[0.49,35.6687],[0.5,34.7262],[0.51,32.3649],[0.52,34.2609],[0.53,31.6563],[0.54,30.471],[0.55,29.3863],[0.56,28.8027],[0.57,32.8095],[0.58,34.1986],[0.59,35.5315],[0.6,37.2063],[0.61,37.6832],[0.62,38.0851],[0.63,36.4023],[0.64,35.6415],[0.65,34.8474],[0.66,30.7977],[0.67,32.54],[0.68,35.2925],[0.69,37.095],[0.7,36.9605],[0.71,39.0519],[0.72,38.0086],[0.73,38.2424],[0.74,39.986],[0.75,39.3402],[0.76,36.9327],[0.77,36.81],[0.78,41.251],[0.79,39.058],[0.8,41.0228],[0.81,41.9726],[0.82,39.311],[0.83,37.8837],[0.84,42.2531],[0.85,41.7776],[0.86,42.0584],[0.87,41.9649],[0.88,43.5552],[0.89,42.4456],[0.9,49.028]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[0.11,53.9285],[0.12,52.4956],[0.13,57.8992],[0.14,62.9631],[0.15,63.695],[0.16,56.7619],[0.17,58.2768],[0.18,56.1063],[0.19,57.0538],[0.2,58.7481],[0.21,63.0679],[0.22,63.8092],[0.23,59.9609],[0.24,58.7075],[0.25,58.1092],[0.26,58.5225],[0.27,58.9511],[0.28,56.5531],[0.29,56.824],[0.3,55.7152],[0.31,56.9382],[0.32,60.2307],[0.33,60.688],[0.34,61.5899],[0.35,63.2869],[0.36,61.5506],[0.37,61.2307],[0.38,58.8201],[0.39,58.6941],[0.4,56.9259],[0.41,57.5819],[0.42,58.065],[0.43,59.3299],[0.44,63.8029],[0.45,63.2151],[0.46,62.246],[0.47,62.1066],[0.48,61.1372],[0.49,59.537],[0.5,58.4843],[0.51,60.4189],[0.52,59.6097],[0.53,61.6609],[0.54,63.0648],[0.55,64.4022],[0.56,64.6263],[0.57,60.539],[0.58,58.6256],[0.59,57.0091],[0.6,54.6604],[0.61,55.1184],[0.62,55.3065],[0.63,57.1515],[0.64,57.2584],[0.65,57.7661],[0.66,63.6384],[0.67,62.0496],[0.68,59.6119],[0.69,57.997],[0.7,58.0333],[0.71,57.2358],[0.72,58.3428],[0.73,58.6806],[0.74,57.9778],[0.75,58.5464],[0.76,61.2803],[0.77,62.2998],[0.78,57.9997],[0.79,60.0878],[0.8,57.5854],[0.81,57.4939],[0.82,60.3521],[0.83,61.6842],[0.84,57.4314],[0.85,57.8623],[0.86,57.5084],[0.87,57.6962],[0.88,56.307],[0.89,56.8664],[0.9,49.4662]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0.48,0],[0.48,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] importanceFactorsRangeGraphThreshold= class=Graph name=Importance factors range implementation=class=GraphImplementation name=Importance factors range title=Importance factors range xTitle=threshold yTitle=Importance (%) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,16.0151],[10.8899,14.5392],[10.253,12.3635],[9.97829,9.72532],[9.74582,12.0916],[9.40145,10.995],[9.38567,8.85427],[8.8512,9.71332],[8.69961,8.77969],[8.44153,7.28393],[8.03245,6.5821],[7.13211,8.24504],[7.12108,9.04851],[6.96917,7.82808],[6.95135,6.953],[6.6907,7.10977],[6.5159,5.4344],[6.4308,6.42502],[6.39411,7.67596],[6.24519,7.70745],[5.99713,7.24118],[5.62236,6.92992],[5.50932,7.29991],[5.49083,6.6061],[5.09613,7.54509],[5.05082,7.1778],[4.768,7.69435],[4.57792,6.67955],[4.42559,6.69065],[4.41971,5.28638],[4.10709,6.27166],[3.89351,6.32837],[3.78134,5.49912],[3.77265,4.31421],[3.4225,3.69457],[3.21446,3.61257],[3.10265,3.11622],[3.07821,4.10691],[2.14495,4.79422],[1.80913,6.78953],[1.70385,7.21617],[1.69651,6.12942],[1.63158,6.68281],[1.53594,6.46417],[1.51822,6.21145],[1.50129,6.57106],[1.36259,6.65151],[1.30065,7.1758],[1.09416,7.45941],[1.03376,8.1333],[0.922837,7.19834],[0.832057,6.60843],[0.652457,6.44627],[0.638032,7.10012],[0.59564,7.38648],[0.546046,5.56385],[0.409442,5.41034],[0.387785,5.09561],[0.0676661,4.908],[-0.135607,5.00619],[-0.140895,3.71228],[-0.373998,3.64857],[-0.392392,3.07698],[-1.06363,2.03624],[-1.07427,2.1134],[-1.81908,1.787],[-1.85473,0.890209],[-2.15515,0.749258],[-2.31684,0.854182],[-2.32935,1.39176],[-2.80754,0.533508],[-3.01065,0.336913],[-3.10733,0.432135],[-3.11279,0.315474],[-3.27472,0.36013],[-3.5298,0.433245],[-3.64529,0.338903],[-4.03327,0.137738],[-4.07635,0.687946],[-4.37397,1.50587]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,30.0564],[10.8899,32.9651],[10.253,29.7373],[9.97829,27.3116],[9.74582,24.2133],[9.40145,32.2431],[9.38567,32.869],[8.8512,34.1804],[8.69961,34.1666],[8.44153,33.968],[8.03245,30.35],[7.13211,27.9458],[7.12108,30.9906],[6.96917,33.4644],[6.95135,34.9378],[6.6907,34.3678],[6.5159,35.6145],[6.4308,37.0219],[6.39411,35.5001],[6.24519,36.5774],[5.99713,35.8206],[5.62236,32.8394],[5.50932,32.0121],[5.49083,31.804],[5.09613,29.168],[5.05082,31.2716],[4.768,31.0749],[4.57792,34.5003],[4.42559,34.6153],[4.41971,37.7877],[4.10709,36.1464],[3.89351,35.6067],[3.78134,35.171],[3.77265,31.8829],[3.4225,33.0904],[3.21446,34.1414],[3.10265,34.7772],[3.07821,34.7559],[2.14495,35.6687],[1.80913,34.7262],[1.70385,32.3649],[1.69651,34.2609],[1.63158,31.6563],[1.53594,30.471],[1.51822,29.3863],[1.50129,28.8027],[1.36259,32.8095],[1.30065,34.1986],[1.09416,35.5315],[1.03376,37.2063],[0.922837,37.6832],[0.832057,38.0851],[0.652457,36.4023],[0.638032,35.6415],[0.59564,34.8474],[0.546046,30.7977],[0.409442,32.54],[0.387785,35.2925],[0.0676661,37.095],[-0.135607,36.9605],[-0.140895,39.0519],[-0.373998,38.0086],[-0.392392,38.2424],[-1.06363,39.986],[-1.07427,39.3402],[-1.81908,36.9327],[-1.85473,36.81],[-2.15515,41.251],[-2.31684,39.058],[-2.32935,41.0228],[-2.80754,41.9726],[-3.01065,39.311],[-3.10733,37.8837],[-3.11279,42.2531],[-3.27472,41.7776],[-3.5298,42.0584],[-3.64529,41.9649],[-4.03327,43.5552],[-4.07635,42.4456],[-4.37397,49.028]] color=#80ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=80 dimension=2 data=[[11.5756,53.9285],[10.8899,52.4956],[10.253,57.8992],[9.97829,62.9631],[9.74582,63.695],[9.40145,56.7619],[9.38567,58.2768],[8.8512,56.1063],[8.69961,57.0538],[8.44153,58.7481],[8.03245,63.0679],[7.13211,63.8092],[7.12108,59.9609],[6.96917,58.7075],[6.95135,58.1092],[6.6907,58.5225],[6.5159,58.9511],[6.4308,56.5531],[6.39411,56.824],[6.24519,55.7152],[5.99713,56.9382],[5.62236,60.2307],[5.50932,60.688],[5.49083,61.5899],[5.09613,63.2869],[5.05082,61.5506],[4.768,61.2307],[4.57792,58.8201],[4.42559,58.6941],[4.41971,56.9259],[4.10709,57.5819],[3.89351,58.065],[3.78134,59.3299],[3.77265,63.8029],[3.4225,63.2151],[3.21446,62.246],[3.10265,62.1066],[3.07821,61.1372],[2.14495,59.537],[1.80913,58.4843],[1.70385,60.4189],[1.69651,59.6097],[1.63158,61.6609],[1.53594,63.0648],[1.51822,64.4022],[1.50129,64.6263],[1.36259,60.539],[1.30065,58.6256],[1.09416,57.0091],[1.03376,54.6604],[0.922837,55.1184],[0.832057,55.3065],[0.652457,57.1515],[0.638032,57.2584],[0.59564,57.7661],[0.546046,63.6384],[0.409442,62.0496],[0.387785,59.6119],[0.0676661,57.997],[-0.135607,58.0333],[-0.140895,57.2358],[-0.373998,58.3428],[-0.392392,58.6806],[-1.06363,57.9778],[-1.07427,58.5464],[-1.81908,61.2803],[-1.85473,62.2998],[-2.15515,57.9997],[-2.31684,60.0878],[-2.32935,57.5854],[-2.80754,57.4939],[-3.01065,60.3521],[-3.10733,61.6842],[-3.11279,57.4314],[-3.27472,57.8623],[-3.5298,57.5084],[-3.64529,57.6962],[-4.03327,56.307],[-4.07635,56.8664],[-4.37397,49.4662]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=current thres. data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=2] openturns-1.9/python/test/t_SimulationSensitivityAnalysis_std.py000077500000000000000000000072671307543307100256140ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Uncertain parameters distribution = Normal( Point(3, 1.0), Point(3, 2.0), CorrelationMatrix(3)) distribution.setName("Unnamed") # Model inputVar = Description(["x", "y", "z"]) formulas = Description(["x-1.5*y+2*z"]) f = SymbolicFunction(inputVar, formulas) # Must activate the history mechanism if one want to perform sensitivity # analysis f.enableHistory() # Sampling size = 100 inputSample = distribution.getSample(size) outputSample = f(inputSample) comparisonOperators = [Less(), LessOrEqual(), Greater(), GreaterOrEqual()] threshold = 3.0 ResourceMap.SetAsUnsignedInteger( "SimulationSensitivityAnalysis-DefaultSampleMargin", 10) for i in range(4): algo = SimulationSensitivityAnalysis( inputSample, outputSample, distribution.getIsoProbabilisticTransformation(), comparisonOperators[i], threshold) print("algo=", algo) # Perform the analysis print("Mean point in event domain=", algo.computeMeanPointInEventDomain()) print("Importance factors at ", threshold, " =", algo.computeImportanceFactors()) print("Importance factors at ", threshold / 2, " =", algo.computeImportanceFactors(threshold / 2)) importanceFactorsGraph = algo.drawImportanceFactors() print("importanceFactorsGraph=", importanceFactorsGraph) # Importance factors evolution on probability scale importanceFactorsRangeGraphProbability = algo.drawImportanceFactorsRange( ) print("importanceFactorsRangeGraphProbability=", importanceFactorsRangeGraphProbability) # Importance factors evolution on threshold scale importanceFactorsRangeGraphThreshold = algo.drawImportanceFactorsRange( False) print("importanceFactorsRangeGraphThreshold=", importanceFactorsRangeGraphThreshold) # Reset the history of the model f.clearHistory() # Analysis based on an event X = RandomVector(distribution) Y = RandomVector(f, X) event = Event(Y, comparisonOperators[i], threshold) # Get a sample of the event to simulate a Monte Carlo analysis. We # don't care of the result as the interesting values are stored in the # model history event.getSample(size) algo = SimulationSensitivityAnalysis(event) print("algo=", algo) # Perform the analysis print("Mean point in event domain=", algo.computeMeanPointInEventDomain()) print("Importance factors at threshold ", threshold, " =", algo.computeImportanceFactors()) print("Importance factors at threshold/2 ", threshold / 2, " =", algo.computeImportanceFactors(threshold / 2)) importanceFactorsGraph = algo.drawImportanceFactors() print("importanceFactorsGraph=", importanceFactorsGraph) # Importance factors evolution on probability scale importanceFactorsRangeGraphProbability = algo.drawImportanceFactorsRange( ) print("importanceFactorsRangeGraphProbability=", importanceFactorsRangeGraphProbability) # Importance factors evolution on threshold scale importanceFactorsRangeGraphThreshold = algo.drawImportanceFactorsRange( False) print("importanceFactorsRangeGraphThreshold=", importanceFactorsRangeGraphThreshold) except: import sys print("t_SimulationSensitivityAnalysis_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SkellamFactory_std.expout000066400000000000000000000010061307543307100233030ustar00rootroot00000000000000distribution= class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Estimated distribution= class=Skellam name=Skellam dimension=1 lambda1=10.1554 lambda2=5.1667 Default distribution= Skellam(lambda1 = 1, lambda2 = 1) Distribution from parameters= Skellam(lambda1 = 10, lambda2 = 5) Skellam = Skellam(lambda1 = 10, lambda2 = 5) Estimated skellam= Skellam(lambda1 = 10.1554, lambda2 = 5.1667) Default skellam= Skellam(lambda1 = 1, lambda2 = 1) Skellam from parameters= Skellam(lambda1 = 10, lambda2 = 5) openturns-1.9/python/test/t_SkellamFactory_std.py000077500000000000000000000022071307543307100224160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Skellam(10.0, 5.0) size = 10000 sample = distribution.getSample(size) factory = SkellamFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedSkellam = factory.buildAsSkellam(sample) print("Skellam =", distribution) print("Estimated skellam=", estimatedSkellam) estimatedSkellam = factory.buildAsSkellam() print("Default skellam=", estimatedSkellam) estimatedSkellam = factory.buildAsSkellam( distribution.getParameter()) print("Skellam from parameters=", estimatedSkellam) except: import sys print("t_SkellamFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Skellam_std.expout000066400000000000000000000021011307543307100217500ustar00rootroot00000000000000Distribution class=Skellam name=Skellam dimension=1 lambda1=10 lambda2=5 Distribution Skellam(lambda1 = 10, lambda2 = 5) Elliptical = False Continuous = False oneRealization= [11] oneSample first= [11] last= [7] mean= [4.9883] covariance= [[ 15.3189 ]] Point= [12] log pdf= -3.91245138189 pdf = 0.0199914343056 pdf (FD)= 0.0199914343056 cdf= 0.971360859022 ccdf= 0.028639140978 characteristic function= (-0.0861799503022-0.0425613135496j) log characteristic function= (-2.34219061901-2.68286459j) generating function= (4.64245238616e-05+6.70957137037e-05j) log generating function= (-9.41379310345+0.965517241379j) quantile= [11] cdf(quantile)= 0.951369424716 mean= [5] standard deviation= [3.87298] skewness= [0.0860663] kurtosis= [3.06667] covariance= [[ 15 ]] parameters= [[lambda1 : 10, lambda2 : 5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [5] standard moment n= 2 , value= [40] standard moment n= 3 , value= [355] standard moment n= 4 , value= [3665] standard moment n= 5 , value= [41130] Standard representative= Skellam(lambda1 = 10, lambda2 = 5) openturns-1.9/python/test/t_Skellam_std.py000077500000000000000000000056641307543307100211000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Skellam(10.0, 5.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) # Define a point point = Point(distribution.getDimension(), 12.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf = %.12g" % PDF) print("pdf (FD)= %.12g" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function= (%.12g%+.12gj)" % (LCF.real, LCF.imag)) GF = distribution.computeGeneratingFunction(0.3 + 0.7j) print("generating function= (%.12g%+.12gj)" % (GF.real, GF.imag)) LGF = distribution.computeLogGeneratingFunction(0.3 + 0.7j) print("log generating function= (%.12g%+.12gj)" % (LGF.real, LGF.imag)) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Skellam_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SklarCopula_std.expout000066400000000000000000000111651307543307100226120ustar00rootroot00000000000000Copula class=SklarCopula name=SklarCopula dimension=3 distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1,2,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Copula class=SklarCopula name=SklarCopula dimension=3 distribution=class=Normal name=Normal dimension=3 mean=class=Point name=Unnamed dimension=3 values=[1,2,3] sigma=class=Point name=Unnamed dimension=3 values=[2,3,1] correlationMatrix=class=CorrelationMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[1,0.25,0,0.25,1,0.25,0,0.25,1] Mean = class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Mean (ref)= class=Point name=Unnamed dimension=3 values=[0.5,0.5,0.5] Covariance = class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0199415,0,0.0199415,0.0833333,0.0199415,0,0.0199415,0.0833333] Covariance (ref)= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0833333,0.0199465,0,0.0199465,0.0833333,0.0199465,0,0.0199465,0.0833333] Elliptical distribution= False Elliptical copula= True Independent copula= False oneRealization= class=Point name=Unnamed dimension=3 values=[0.728473,0.14143,0.226528] oneSample= class=Sample name=SklarCopula implementation=class=SampleImplementation name=SklarCopula size=10 dimension=3 description=[X0,X1,X2] data=[[0.885991,0.03509,0.410967],[0.361292,0.903689,0.875806],[0.786157,0.398475,0.551985],[0.0110089,0.0347878,0.0549614],[0.463832,0.82677,0.548704],[0.28767,0.614586,0.66531],[0.672124,0.18575,0.136607],[0.682113,0.49876,0.620616],[0.962655,0.696223,0.230639],[0.235291,0.339456,0.0367574]] anotherSample mean= class=Point name=Unnamed dimension=3 values=[0.500491,0.497339,0.510215] anotherSample covariance= class=CovarianceMatrix dimension=3 implementation=class=MatrixImplementation name=Unnamed rows=3 columns=3 values=[0.0807623,0.0187494,0.00159833,0.0187494,0.0838893,0.0218797,0.00159833,0.0218797,0.08306] Point = class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] pdf =1.376769 cdf =0.017616 Point = class=Point name=Unnamed dimension=3 values=[0.2,0.2,0.2] pdf (ref)=1.376769 cdf (ref)=0.017616 Quantile = class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] Quantile (ref)= class=Point name=Unnamed dimension=3 values=[0.773909,0.773909,0.773909] CDF(quantile)=0.500000 InverseSurvival= class=Point name=Unnamed dimension=3 values=[0.0174781,0.0174781,0.0174781] Survival(inverseSurvival)=0.950000 margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1.000000 margin PDF (ref)=1.000000 margin CDF =0.250000 margin CDF (ref)=0.250000 margin quantile = class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.274671] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1.000000 margin PDF (ref)=1.000000 margin CDF =0.250000 margin CDF (ref)=0.250000 margin quantile = class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.418694] margin= class=IndependentCopula name=IndependentCopula dimension=1 margin PDF =1.000000 margin PDF (ref)=1.000000 margin CDF =0.250000 margin CDF (ref)=0.250000 margin quantile = class=Point name=Unnamed dimension=1 values=[0.95] margin quantile (ref)= class=Point name=Unnamed dimension=1 values=[0.95] margin realization= class=Point name=Unnamed dimension=1 values=[0.865595] indices= [1,0] margin= class=SklarCopula name=SklarCopula dimension=2 distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[2,1] sigma=class=Point name=Unnamed dimension=2 values=[3,2] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.25,0.25,1] margin PDF =1.131175 margin PDF (ref)=1.131175 margin CDF =0.089310 margin CDF (ref)=0.089310 margin quantile = class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margin quantile (ref)= class=Point name=Unnamed dimension=2 values=[0.97395,0.97395] margin realization= class=Point name=Unnamed dimension=2 values=[0.0536055,0.320679] openturns-1.9/python/test/t_SklarCopula_std.py000077500000000000000000000122711307543307100217200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 3 R = CorrelationMatrix(dim) for i in range(dim - 1): R[i, i + 1] = 0.25 copula = SklarCopula( Distribution(Normal([1.0, 2.0, 3.0], [2.0, 3.0, 1.0], R))) copulaRef = NormalCopula(R) print("Copula ", repr(copula)) print("Copula ", copula) print("Mean =", repr(copula.getMean())) print("Mean (ref)=", repr(copulaRef.getMean())) ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 20) ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-4) print("Covariance =", repr(copula.getCovariance())) ResourceMap.SetAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 100) ResourceMap.SetAsScalar("GaussKronrod-MaximumError", 1.0e-12) print("Covariance (ref)=", repr(copulaRef.getCovariance())) # Is this copula an elliptical distribution? print("Elliptical distribution= ", copula.isElliptical()) # Is this copula elliptical ? print("Elliptical copula= ", copula.hasEllipticalCopula()) # Is this copula independent ? print("Independent copula= ", copula.hasIndependentCopula()) # Test for realization of distribution oneRealization = copula.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = copula.getSample(size) print("oneSample=", repr(oneSample)) # Test for sampling size = 1000 anotherSample = copula.getSample(size) print("anotherSample mean=", repr(anotherSample.computeMean())) print("anotherSample covariance=", repr(anotherSample.computeCovariance())) # Define a point point = Point(dim, 0.2) # Show PDF and CDF of point pointPDF = copula.computePDF(point) pointCDF = copula.computeCDF(point) pointPDFRef = copulaRef.computePDF(point) pointCDFRef = copulaRef.computeCDF(point) print("Point = ", repr(point), " pdf =%.6f" % pointPDF, " cdf =%.6f" % pointCDF) print("Point = ", repr(point), " pdf (ref)=%.6f" % pointPDFRef, " cdf (ref)=%.6f" % pointCDFRef) # Get 50% quantile quantile = copula.computeQuantile(0.5) quantileRef = copulaRef.computeQuantile(0.5) print("Quantile =", repr(quantile)) print("Quantile (ref)=", repr(quantileRef)) print("CDF(quantile)=%.6f" % copula.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(copula.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % copula.computeSurvivalFunction(inverseSurvival)) # Confidence regions if copula.getDimension() <= 2: threshold = Point() print("Minimum volume interval=", copula.computeMinimumVolumeInterval(0.95, threshold)) print("threshold=", threshold) beta = Point() levelSet = copula.computeMinimumVolumeLevelSet(0.95, beta) print("Minimum volume level set=", levelSet) print("beta=", beta) print("Bilateral confidence interval=", copula.computeBilateralConfidenceInterval(0.95, beta)) print("beta=", beta) print("Unilateral confidence interval (lower tail)=", copula.computeUnilateralConfidenceInterval(0.95, False, beta)) print("beta=", beta) print("Unilateral confidence interval (upper tail)=", copula.computeUnilateralConfidenceInterval(0.95, True, beta)) print("beta=", beta) # Extract the marginals for i in range(dim): margin = copula.getMarginal(i) marginRef = copulaRef.getMarginal(i) print("margin=", repr(margin)) print("margin PDF =%.6f" % margin.computePDF(Point(1, 0.25))) print("margin PDF (ref)=%.6f" % marginRef.computePDF(Point(1, 0.25))) print("margin CDF =%.6f" % margin.computeCDF(Point(1, 0.25))) print("margin CDF (ref)=%.6f" % marginRef.computeCDF(Point(1, 0.25))) print("margin quantile =", repr(margin.computeQuantile(0.95))) print("margin quantile (ref)=", repr(marginRef.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) # Extract a 2-D marginal indices = Indices(2, 0) indices[0] = 1 indices[1] = 0 print("indices=", repr(indices)) margin = copula.getMarginal(indices) marginRef = copulaRef.getMarginal(indices) print("margin=", repr(margin)) print("margin PDF =%.6f" % margin.computePDF(Point(2, 0.25))) print("margin PDF (ref)=%.6f" % marginRef.computePDF(Point(2, 0.25))) print("margin CDF =%.6f" % margin.computeCDF(Point(2, 0.25))) print("margin CDF (ref)=%.6f" % marginRef.computeCDF(Point(2, 0.25))) print("margin quantile =", repr(margin.computeQuantile(0.95))) print("margin quantile (ref)=", repr(marginRef.computeQuantile(0.95))) print("margin realization=", repr(margin.getRealization())) except: import sys print("t_SklarCopula.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SobolIndicesAlgorithm_std.expout000066400000000000000000000022271307543307100246150ustar00rootroot00000000000000Method of evaluation= Saltelli First order indices = [0.293134,0.451208,-0.00292283] Total order indices = [0.57499,0.427147,0.256687] Method of evaluation= Jansen First order indices = [0.322419,0.457314,0.0260925] Total order indices = [0.55841,0.433746,0.240408] Method of evaluation= MauntzKucherenko First order indices = [0.293133,0.451207,-0.00292379] Total order indices = [0.57499,0.427147,0.256687] Method of evaluation= Martinez First order indices = [0.308902,0.459187,0.00683867] Total order indices = [0.567786,0.430754,0.244293] Martinez method : indices First order indices = [0.308902,0.459187,0.00683867] Total order indices = [0.567786,0.430754,0.244293] Martinez method : bootstrap intervals First order indices interval = [0.293839, 0.325449] [0.444118, 0.472919] [-0.0221776, 0.0299202] Total order indices interval = [0.533427, 0.600547] [0.379899, 0.459605] [0.208616, 0.270619] Martinez method : asymptotic intervals First order indices interval = [0.308335, 0.309469] [0.458692, 0.459682] [0.00621153, 0.0074658] Total order indices interval = [0.567276, 0.568296] [0.43033, 0.431178] [0.244024, 0.244562] [0.0101493,0.60453,0.304954] openturns-1.9/python/test/t_SobolIndicesAlgorithm_std.py000077500000000000000000000066251307543307100237320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # from openturns.viewer import PlotSensitivity ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) try: input_dimension = 3 output_dimension = 1 formula = [ 'sin(_pi*X1)+7*sin(_pi*X2)*sin(_pi*X2)+0.1*((_pi*X3)*(_pi*X3)*(_pi*X3)*(_pi*X3))*sin(_pi*X1)'] model = ot.SymbolicFunction(['X1', 'X2', 'X3'], formula) distribution = ot.ComposedDistribution( [ot.Uniform(-1.0, 1.0)] * input_dimension) # Size of simulation size = 10000 # Test with the various implementation methods methods = ["Saltelli", "Jansen", "MauntzKucherenko", "Martinez"] # Use of Generate method to build input/output designs computeSO = True inputDesign = ot.SaltelliSensitivityAlgorithm.Generate( distribution, size, computeSO) outputDesign = model(inputDesign) # Case 1 : Estimation of sensitivity using estimator and no bootstrap for method in methods: sensitivity_algorithm = eval( 'ot.' + method + "SensitivityAlgorithm(inputDesign, outputDesign, size)") # Get first order indices fo = sensitivity_algorithm.getFirstOrderIndices() print("Method of evaluation=", method) print("First order indices = ", fo) # Get total order indices to = sensitivity_algorithm.getTotalOrderIndices() print("Total order indices = ", to) # Case 2 : Estimation of sensitivity using Martinez estimator and bootstrap nr_bootstrap = 100 confidence_level = 0.95 sensitivity_algorithm = ot.MartinezSensitivityAlgorithm( inputDesign, outputDesign, size) sensitivity_algorithm.setBootstrapSize(nr_bootstrap) sensitivity_algorithm.setBootstrapConfidenceLevel(confidence_level) # Get first order indices fo = sensitivity_algorithm.getFirstOrderIndices() to = sensitivity_algorithm.getTotalOrderIndices() print("Martinez method : indices") print("First order indices = ", fo) print("Total order indices = ", to) # Get the confidence interval thanks to Bootstrap interval_fo = sensitivity_algorithm.getFirstOrderIndicesInterval() interval_to = sensitivity_algorithm.getTotalOrderIndicesInterval() print("Martinez method : bootstrap intervals") print("First order indices interval = ", interval_fo) print("Total order indices interval = ", interval_to) # In the case of Martinez, if output is Gaussian, we may use the Fisher # transform and get an asymptotic confidence interval ot.ResourceMap.SetAsBool( "MartinezSensitivityAlgorithm-UseAsymptoticInterval", True) interval_fo_asymptotic = sensitivity_algorithm.getFirstOrderIndicesInterval( ) interval_to_asymptotic = sensitivity_algorithm.getTotalOrderIndicesInterval( ) print("Martinez method : asymptotic intervals") print("First order indices interval = ", interval_fo_asymptotic) print("Total order indices interval = ", interval_to_asymptotic) # with experiment sequence = ot.SobolSequence(input_dimension) experiment = ot.LowDiscrepancyExperiment(sequence, ot.ComposedDistribution( [ot.Uniform(0.0, 1.0)] * input_dimension), size) sensitivity_algorithm = ot.SaltelliSensitivityAlgorithm(experiment, model) print(sensitivity_algorithm.getFirstOrderIndices()) except: import sys print("t_SensitivityAlgorithm_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SobolSequence_std.expout000066400000000000000000002035711307543307100231450ustar00rootroot00000000000000class=SobolSequence derived from class=LowDiscrepancySequenceImplementation dimension=40 coefficients=[2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952,2305843009213693952] seed=1 class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=40 data=[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5],[0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25],[0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.75,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.25,0.75,0.25,0.75,0.25,0.75,0.25,0.75],[0.375,0.375,0.625,0.125,0.875,0.875,0.125,0.625,0.125,0.875,0.375,0.625,0.125,0.375,0.625,0.125,0.625,0.375,0.375,0.875,0.875,0.625,0.125,0.875,0.125,0.875,0.875,0.125,0.625,0.625,0.375,0.375,0.375,0.375,0.625,0.125,0.875,0.875,0.125,0.625],[0.875,0.875,0.125,0.625,0.375,0.375,0.625,0.125,0.625,0.375,0.875,0.125,0.625,0.875,0.125,0.625,0.125,0.875,0.875,0.375,0.375,0.125,0.625,0.375,0.625,0.375,0.375,0.625,0.125,0.125,0.875,0.875,0.875,0.875,0.125,0.625,0.375,0.375,0.625,0.125],[0.625,0.125,0.375,0.375,0.125,0.625,0.875,0.875,0.375,0.125,0.125,0.375,0.375,0.625,0.875,0.875,0.375,0.125,0.625,0.625,0.125,0.875,0.875,0.625,0.375,0.125,0.625,0.875,0.875,0.375,0.125,0.625,0.625,0.125,0.375,0.375,0.125,0.625,0.875,0.875],[0.125,0.625,0.875,0.875,0.625,0.125,0.375,0.375,0.875,0.625,0.625,0.875,0.875,0.125,0.375,0.375,0.875,0.625,0.125,0.125,0.625,0.375,0.375,0.125,0.875,0.625,0.125,0.375,0.375,0.875,0.625,0.125,0.125,0.625,0.875,0.875,0.625,0.125,0.375,0.375],[0.1875,0.3125,0.3125,0.6875,0.5625,0.1875,0.0625,0.9375,0.1875,0.0625,0.6875,0.8125,0.5625,0.6875,0.1875,0.6875,0.1875,0.0625,0.0625,0.8125,0.9375,0.3125,0.5625,0.3125,0.4375,0.4375,0.6875,0.4375,0.8125,0.5625,0.9375,0.8125,0.1875,0.3125,0.3125,0.6875,0.5625,0.1875,0.0625,0.9375],[0.6875,0.8125,0.8125,0.1875,0.0625,0.6875,0.5625,0.4375,0.6875,0.5625,0.1875,0.3125,0.0625,0.1875,0.6875,0.1875,0.6875,0.5625,0.5625,0.3125,0.4375,0.8125,0.0625,0.8125,0.9375,0.9375,0.1875,0.9375,0.3125,0.0625,0.4375,0.3125,0.6875,0.8125,0.8125,0.1875,0.0625,0.6875,0.5625,0.4375],[0.9375,0.0625,0.5625,0.9375,0.3125,0.4375,0.8125,0.6875,0.4375,0.8125,0.9375,0.0625,0.8125,0.4375,0.4375,0.4375,0.9375,0.3125,0.8125,0.5625,0.1875,0.0625,0.3125,0.0625,0.1875,0.6875,0.9375,0.6875,0.5625,0.3125,0.6875,0.0625,0.9375,0.0625,0.5625,0.9375,0.3125,0.4375,0.8125,0.6875]] class=Point name=Unnamed dimension=2 values=[0.5,0.5] class=Point name=Unnamed dimension=2 values=[0.75,0.25] class=Point name=Unnamed dimension=2 values=[0.25,0.75] class=Point name=Unnamed dimension=2 values=[0.375,0.375] class=Point name=Unnamed dimension=2 values=[0.875,0.875] class=Point name=Unnamed dimension=2 values=[0.625,0.125] class=Point name=Unnamed dimension=2 values=[0.125,0.625] class=Point name=Unnamed dimension=2 values=[0.1875,0.3125] class=Point name=Unnamed dimension=2 values=[0.6875,0.8125] class=Point name=Unnamed dimension=2 values=[0.9375,0.0625] class=Point name=Unnamed dimension=2 values=[0.4375,0.5625] class=Point name=Unnamed dimension=2 values=[0.3125,0.1875] class=Point name=Unnamed dimension=2 values=[0.8125,0.6875] class=Point name=Unnamed dimension=2 values=[0.5625,0.4375] class=Point name=Unnamed dimension=2 values=[0.0625,0.9375] class=Point name=Unnamed dimension=2 values=[0.09375,0.46875] class=Point name=Unnamed dimension=2 values=[0.59375,0.96875] class=Point name=Unnamed dimension=2 values=[0.84375,0.21875] class=Point name=Unnamed dimension=2 values=[0.34375,0.71875] class=Point name=Unnamed dimension=2 values=[0.46875,0.09375] class=Point name=Unnamed dimension=2 values=[0.96875,0.59375] class=Point name=Unnamed dimension=2 values=[0.71875,0.34375] class=Point name=Unnamed dimension=2 values=[0.21875,0.84375] class=Point name=Unnamed dimension=2 values=[0.15625,0.15625] class=Point name=Unnamed dimension=2 values=[0.65625,0.65625] class=Point name=Unnamed dimension=2 values=[0.90625,0.40625] class=Point name=Unnamed dimension=2 values=[0.40625,0.90625] class=Point name=Unnamed dimension=2 values=[0.28125,0.28125] class=Point name=Unnamed dimension=2 values=[0.78125,0.78125] class=Point name=Unnamed dimension=2 values=[0.53125,0.03125] class=Point name=Unnamed dimension=2 values=[0.03125,0.53125] class=Point name=Unnamed dimension=2 values=[0.046875,0.265625] class=Point name=Unnamed dimension=2 values=[0.546875,0.765625] class=Point name=Unnamed dimension=2 values=[0.796875,0.015625] class=Point name=Unnamed dimension=2 values=[0.296875,0.515625] class=Point name=Unnamed dimension=2 values=[0.421875,0.140625] class=Point name=Unnamed dimension=2 values=[0.921875,0.640625] class=Point name=Unnamed dimension=2 values=[0.671875,0.390625] class=Point name=Unnamed dimension=2 values=[0.171875,0.890625] class=Point name=Unnamed dimension=2 values=[0.234375,0.078125] class=Point name=Unnamed dimension=2 values=[0.734375,0.578125] class=Point name=Unnamed dimension=2 values=[0.984375,0.328125] class=Point name=Unnamed dimension=2 values=[0.484375,0.828125] class=Point name=Unnamed dimension=2 values=[0.359375,0.453125] class=Point name=Unnamed dimension=2 values=[0.859375,0.953125] class=Point name=Unnamed dimension=2 values=[0.609375,0.203125] class=Point name=Unnamed dimension=2 values=[0.109375,0.703125] class=Point name=Unnamed dimension=2 values=[0.078125,0.234375] class=Point name=Unnamed dimension=2 values=[0.578125,0.734375] class=Point name=Unnamed dimension=2 values=[0.828125,0.484375] class=Point name=Unnamed dimension=2 values=[0.328125,0.984375] class=Point name=Unnamed dimension=2 values=[0.453125,0.359375] class=Point name=Unnamed dimension=2 values=[0.953125,0.859375] class=Point name=Unnamed dimension=2 values=[0.703125,0.109375] class=Point name=Unnamed dimension=2 values=[0.203125,0.609375] class=Point name=Unnamed dimension=2 values=[0.140625,0.421875] class=Point name=Unnamed dimension=2 values=[0.640625,0.921875] class=Point name=Unnamed dimension=2 values=[0.890625,0.171875] class=Point name=Unnamed dimension=2 values=[0.390625,0.671875] class=Point name=Unnamed dimension=2 values=[0.265625,0.046875] class=Point name=Unnamed dimension=2 values=[0.765625,0.546875] class=Point name=Unnamed dimension=2 values=[0.515625,0.296875] class=Point name=Unnamed dimension=2 values=[0.015625,0.796875] class=Point name=Unnamed dimension=2 values=[0.0234375,0.398438] class=Point name=Unnamed dimension=2 values=[0.523438,0.898438] class=Point name=Unnamed dimension=2 values=[0.773438,0.148438] class=Point name=Unnamed dimension=2 values=[0.273438,0.648438] class=Point name=Unnamed dimension=2 values=[0.398438,0.0234375] class=Point name=Unnamed dimension=2 values=[0.898438,0.523438] class=Point name=Unnamed dimension=2 values=[0.648438,0.273438] class=Point name=Unnamed dimension=2 values=[0.148438,0.773438] class=Point name=Unnamed dimension=2 values=[0.210938,0.210938] class=Point name=Unnamed dimension=2 values=[0.710938,0.710938] class=Point name=Unnamed dimension=2 values=[0.960938,0.460938] class=Point name=Unnamed dimension=2 values=[0.460938,0.960938] class=Point name=Unnamed dimension=2 values=[0.335938,0.335938] class=Point name=Unnamed dimension=2 values=[0.835938,0.835938] class=Point name=Unnamed dimension=2 values=[0.585938,0.0859375] class=Point name=Unnamed dimension=2 values=[0.0859375,0.585938] class=Point name=Unnamed dimension=2 values=[0.117188,0.117188] class=Point name=Unnamed dimension=2 values=[0.617188,0.617188] class=Point name=Unnamed dimension=2 values=[0.867188,0.367188] class=Point name=Unnamed dimension=2 values=[0.367188,0.867188] class=Point name=Unnamed dimension=2 values=[0.492188,0.492188] class=Point name=Unnamed dimension=2 values=[0.992188,0.992188] class=Point name=Unnamed dimension=2 values=[0.742188,0.242188] class=Point name=Unnamed dimension=2 values=[0.242188,0.742188] class=Point name=Unnamed dimension=2 values=[0.179688,0.304688] class=Point name=Unnamed dimension=2 values=[0.679688,0.804688] class=Point name=Unnamed dimension=2 values=[0.929688,0.0546875] class=Point name=Unnamed dimension=2 values=[0.429688,0.554688] class=Point name=Unnamed dimension=2 values=[0.304688,0.179688] class=Point name=Unnamed dimension=2 values=[0.804688,0.679688] class=Point name=Unnamed dimension=2 values=[0.554688,0.429688] class=Point name=Unnamed dimension=2 values=[0.0546875,0.929688] class=Point name=Unnamed dimension=2 values=[0.0390625,0.132812] class=Point name=Unnamed dimension=2 values=[0.539062,0.632812] class=Point name=Unnamed dimension=2 values=[0.789062,0.382812] class=Point name=Unnamed dimension=2 values=[0.289062,0.882812] class=Point name=Unnamed dimension=2 values=[0.414062,0.257812] class=Point name=Unnamed dimension=2 values=[0.914062,0.757812] class=Point name=Unnamed dimension=2 values=[0.664062,0.0078125] class=Point name=Unnamed dimension=2 values=[0.164062,0.507812] class=Point name=Unnamed dimension=2 values=[0.226562,0.445312] class=Point name=Unnamed dimension=2 values=[0.726562,0.945312] class=Point name=Unnamed dimension=2 values=[0.976562,0.195312] class=Point name=Unnamed dimension=2 values=[0.476562,0.695312] class=Point name=Unnamed dimension=2 values=[0.351562,0.0703125] class=Point name=Unnamed dimension=2 values=[0.851562,0.570312] class=Point name=Unnamed dimension=2 values=[0.601562,0.320312] class=Point name=Unnamed dimension=2 values=[0.101562,0.820312] class=Point name=Unnamed dimension=2 values=[0.0703125,0.351562] class=Point name=Unnamed dimension=2 values=[0.570312,0.851562] class=Point name=Unnamed dimension=2 values=[0.820312,0.101562] class=Point name=Unnamed dimension=2 values=[0.320312,0.601562] class=Point name=Unnamed dimension=2 values=[0.445312,0.226562] class=Point name=Unnamed dimension=2 values=[0.945312,0.726562] class=Point name=Unnamed dimension=2 values=[0.695312,0.476562] class=Point name=Unnamed dimension=2 values=[0.195312,0.976562] class=Point name=Unnamed dimension=2 values=[0.132812,0.0390625] class=Point name=Unnamed dimension=2 values=[0.632812,0.539062] class=Point name=Unnamed dimension=2 values=[0.882812,0.289062] class=Point name=Unnamed dimension=2 values=[0.382812,0.789062] class=Point name=Unnamed dimension=2 values=[0.257812,0.414062] class=Point name=Unnamed dimension=2 values=[0.757812,0.914062] class=Point name=Unnamed dimension=2 values=[0.507812,0.164062] class=Point name=Unnamed dimension=2 values=[0.0078125,0.664062] class=Point name=Unnamed dimension=2 values=[0.0117188,0.332031] class=Point name=Unnamed dimension=2 values=[0.511719,0.832031] class=Point name=Unnamed dimension=2 values=[0.761719,0.0820312] class=Point name=Unnamed dimension=2 values=[0.261719,0.582031] class=Point name=Unnamed dimension=2 values=[0.386719,0.207031] class=Point name=Unnamed dimension=2 values=[0.886719,0.707031] class=Point name=Unnamed dimension=2 values=[0.636719,0.457031] class=Point name=Unnamed dimension=2 values=[0.136719,0.957031] class=Point name=Unnamed dimension=2 values=[0.199219,0.0195312] class=Point name=Unnamed dimension=2 values=[0.699219,0.519531] class=Point name=Unnamed dimension=2 values=[0.949219,0.269531] class=Point name=Unnamed dimension=2 values=[0.449219,0.769531] class=Point name=Unnamed dimension=2 values=[0.324219,0.394531] class=Point name=Unnamed dimension=2 values=[0.824219,0.894531] class=Point name=Unnamed dimension=2 values=[0.574219,0.144531] class=Point name=Unnamed dimension=2 values=[0.0742188,0.644531] class=Point name=Unnamed dimension=2 values=[0.105469,0.175781] class=Point name=Unnamed dimension=2 values=[0.605469,0.675781] class=Point name=Unnamed dimension=2 values=[0.855469,0.425781] class=Point name=Unnamed dimension=2 values=[0.355469,0.925781] class=Point name=Unnamed dimension=2 values=[0.480469,0.300781] class=Point name=Unnamed dimension=2 values=[0.980469,0.800781] class=Point name=Unnamed dimension=2 values=[0.730469,0.0507812] class=Point name=Unnamed dimension=2 values=[0.230469,0.550781] class=Point name=Unnamed dimension=2 values=[0.167969,0.488281] class=Point name=Unnamed dimension=2 values=[0.667969,0.988281] class=Point name=Unnamed dimension=2 values=[0.917969,0.238281] class=Point name=Unnamed dimension=2 values=[0.417969,0.738281] class=Point name=Unnamed dimension=2 values=[0.292969,0.113281] class=Point name=Unnamed dimension=2 values=[0.792969,0.613281] class=Point name=Unnamed dimension=2 values=[0.542969,0.363281] class=Point name=Unnamed dimension=2 values=[0.0429688,0.863281] class=Point name=Unnamed dimension=2 values=[0.0585938,0.0664062] class=Point name=Unnamed dimension=2 values=[0.558594,0.566406] class=Point name=Unnamed dimension=2 values=[0.808594,0.316406] class=Point name=Unnamed dimension=2 values=[0.308594,0.816406] class=Point name=Unnamed dimension=2 values=[0.433594,0.441406] class=Point name=Unnamed dimension=2 values=[0.933594,0.941406] class=Point name=Unnamed dimension=2 values=[0.683594,0.191406] class=Point name=Unnamed dimension=2 values=[0.183594,0.691406] class=Point name=Unnamed dimension=2 values=[0.246094,0.253906] class=Point name=Unnamed dimension=2 values=[0.746094,0.753906] class=Point name=Unnamed dimension=2 values=[0.996094,0.00390625] class=Point name=Unnamed dimension=2 values=[0.496094,0.503906] class=Point name=Unnamed dimension=2 values=[0.371094,0.128906] class=Point name=Unnamed dimension=2 values=[0.871094,0.628906] class=Point name=Unnamed dimension=2 values=[0.621094,0.378906] class=Point name=Unnamed dimension=2 values=[0.121094,0.878906] class=Point name=Unnamed dimension=2 values=[0.0898438,0.410156] class=Point name=Unnamed dimension=2 values=[0.589844,0.910156] class=Point name=Unnamed dimension=2 values=[0.839844,0.160156] class=Point name=Unnamed dimension=2 values=[0.339844,0.660156] class=Point name=Unnamed dimension=2 values=[0.464844,0.0351562] class=Point name=Unnamed dimension=2 values=[0.964844,0.535156] class=Point name=Unnamed dimension=2 values=[0.714844,0.285156] class=Point name=Unnamed dimension=2 values=[0.214844,0.785156] class=Point name=Unnamed dimension=2 values=[0.152344,0.222656] class=Point name=Unnamed dimension=2 values=[0.652344,0.722656] class=Point name=Unnamed dimension=2 values=[0.902344,0.472656] class=Point name=Unnamed dimension=2 values=[0.402344,0.972656] class=Point name=Unnamed dimension=2 values=[0.277344,0.347656] class=Point name=Unnamed dimension=2 values=[0.777344,0.847656] class=Point name=Unnamed dimension=2 values=[0.527344,0.0976562] class=Point name=Unnamed dimension=2 values=[0.0273438,0.597656] class=Point name=Unnamed dimension=2 values=[0.0195312,0.199219] class=Point name=Unnamed dimension=2 values=[0.519531,0.699219] class=Point name=Unnamed dimension=2 values=[0.769531,0.449219] class=Point name=Unnamed dimension=2 values=[0.269531,0.949219] class=Point name=Unnamed dimension=2 values=[0.394531,0.324219] class=Point name=Unnamed dimension=2 values=[0.894531,0.824219] class=Point name=Unnamed dimension=2 values=[0.644531,0.0742188] class=Point name=Unnamed dimension=2 values=[0.144531,0.574219] class=Point name=Unnamed dimension=2 values=[0.207031,0.386719] class=Point name=Unnamed dimension=2 values=[0.707031,0.886719] class=Point name=Unnamed dimension=2 values=[0.957031,0.136719] class=Point name=Unnamed dimension=2 values=[0.457031,0.636719] class=Point name=Unnamed dimension=2 values=[0.332031,0.0117188] class=Point name=Unnamed dimension=2 values=[0.832031,0.511719] class=Point name=Unnamed dimension=2 values=[0.582031,0.261719] class=Point name=Unnamed dimension=2 values=[0.0820312,0.761719] class=Point name=Unnamed dimension=2 values=[0.113281,0.292969] class=Point name=Unnamed dimension=2 values=[0.613281,0.792969] class=Point name=Unnamed dimension=2 values=[0.863281,0.0429688] class=Point name=Unnamed dimension=2 values=[0.363281,0.542969] class=Point name=Unnamed dimension=2 values=[0.488281,0.167969] class=Point name=Unnamed dimension=2 values=[0.988281,0.667969] class=Point name=Unnamed dimension=2 values=[0.738281,0.417969] class=Point name=Unnamed dimension=2 values=[0.238281,0.917969] class=Point name=Unnamed dimension=2 values=[0.175781,0.105469] class=Point name=Unnamed dimension=2 values=[0.675781,0.605469] class=Point name=Unnamed dimension=2 values=[0.925781,0.355469] class=Point name=Unnamed dimension=2 values=[0.425781,0.855469] class=Point name=Unnamed dimension=2 values=[0.300781,0.480469] class=Point name=Unnamed dimension=2 values=[0.800781,0.980469] class=Point name=Unnamed dimension=2 values=[0.550781,0.230469] class=Point name=Unnamed dimension=2 values=[0.0507812,0.730469] class=Point name=Unnamed dimension=2 values=[0.0351562,0.464844] class=Point name=Unnamed dimension=2 values=[0.535156,0.964844] class=Point name=Unnamed dimension=2 values=[0.785156,0.214844] class=Point name=Unnamed dimension=2 values=[0.285156,0.714844] class=Point name=Unnamed dimension=2 values=[0.410156,0.0898438] class=Point name=Unnamed dimension=2 values=[0.910156,0.589844] class=Point name=Unnamed dimension=2 values=[0.660156,0.339844] class=Point name=Unnamed dimension=2 values=[0.160156,0.839844] class=Point name=Unnamed dimension=2 values=[0.222656,0.152344] class=Point name=Unnamed dimension=2 values=[0.722656,0.652344] class=Point name=Unnamed dimension=2 values=[0.972656,0.402344] class=Point name=Unnamed dimension=2 values=[0.472656,0.902344] class=Point name=Unnamed dimension=2 values=[0.347656,0.277344] class=Point name=Unnamed dimension=2 values=[0.847656,0.777344] class=Point name=Unnamed dimension=2 values=[0.597656,0.0273438] class=Point name=Unnamed dimension=2 values=[0.0976562,0.527344] class=Point name=Unnamed dimension=2 values=[0.0664062,0.0585938] class=Point name=Unnamed dimension=2 values=[0.566406,0.558594] class=Point name=Unnamed dimension=2 values=[0.816406,0.308594] class=Point name=Unnamed dimension=2 values=[0.316406,0.808594] class=Point name=Unnamed dimension=2 values=[0.441406,0.433594] class=Point name=Unnamed dimension=2 values=[0.941406,0.933594] class=Point name=Unnamed dimension=2 values=[0.691406,0.183594] class=Point name=Unnamed dimension=2 values=[0.191406,0.683594] class=Point name=Unnamed dimension=2 values=[0.128906,0.371094] class=Point name=Unnamed dimension=2 values=[0.628906,0.871094] class=Point name=Unnamed dimension=2 values=[0.878906,0.121094] class=Point name=Unnamed dimension=2 values=[0.378906,0.621094] class=Point name=Unnamed dimension=2 values=[0.253906,0.246094] class=Point name=Unnamed dimension=2 values=[0.753906,0.746094] class=Point name=Unnamed dimension=2 values=[0.503906,0.496094] class=Point name=Unnamed dimension=2 values=[0.00390625,0.996094] class=Point name=Unnamed dimension=2 values=[0.00585938,0.498047] class=Point name=Unnamed dimension=2 values=[0.505859,0.998047] class=Point name=Unnamed dimension=2 values=[0.755859,0.248047] class=Point name=Unnamed dimension=2 values=[0.255859,0.748047] class=Point name=Unnamed dimension=2 values=[0.380859,0.123047] class=Point name=Unnamed dimension=2 values=[0.880859,0.623047] class=Point name=Unnamed dimension=2 values=[0.630859,0.373047] class=Point name=Unnamed dimension=2 values=[0.130859,0.873047] class=Point name=Unnamed dimension=2 values=[0.193359,0.185547] class=Point name=Unnamed dimension=2 values=[0.693359,0.685547] class=Point name=Unnamed dimension=2 values=[0.943359,0.435547] class=Point name=Unnamed dimension=2 values=[0.443359,0.935547] class=Point name=Unnamed dimension=2 values=[0.318359,0.310547] class=Point name=Unnamed dimension=2 values=[0.818359,0.810547] class=Point name=Unnamed dimension=2 values=[0.568359,0.0605469] class=Point name=Unnamed dimension=2 values=[0.0683594,0.560547] class=Point name=Unnamed dimension=2 values=[0.0996094,0.0292969] class=Point name=Unnamed dimension=2 values=[0.599609,0.529297] class=Point name=Unnamed dimension=2 values=[0.849609,0.279297] class=Point name=Unnamed dimension=2 values=[0.349609,0.779297] class=Point name=Unnamed dimension=2 values=[0.474609,0.404297] class=Point name=Unnamed dimension=2 values=[0.974609,0.904297] class=Point name=Unnamed dimension=2 values=[0.724609,0.154297] class=Point name=Unnamed dimension=2 values=[0.224609,0.654297] class=Point name=Unnamed dimension=2 values=[0.162109,0.341797] class=Point name=Unnamed dimension=2 values=[0.662109,0.841797] class=Point name=Unnamed dimension=2 values=[0.912109,0.0917969] class=Point name=Unnamed dimension=2 values=[0.412109,0.591797] class=Point name=Unnamed dimension=2 values=[0.287109,0.216797] class=Point name=Unnamed dimension=2 values=[0.787109,0.716797] class=Point name=Unnamed dimension=2 values=[0.537109,0.466797] class=Point name=Unnamed dimension=2 values=[0.0371094,0.966797] class=Point name=Unnamed dimension=2 values=[0.0527344,0.232422] class=Point name=Unnamed dimension=2 values=[0.552734,0.732422] class=Point name=Unnamed dimension=2 values=[0.802734,0.482422] class=Point name=Unnamed dimension=2 values=[0.302734,0.982422] class=Point name=Unnamed dimension=2 values=[0.427734,0.357422] class=Point name=Unnamed dimension=2 values=[0.927734,0.857422] class=Point name=Unnamed dimension=2 values=[0.677734,0.107422] class=Point name=Unnamed dimension=2 values=[0.177734,0.607422] class=Point name=Unnamed dimension=2 values=[0.240234,0.419922] class=Point name=Unnamed dimension=2 values=[0.740234,0.919922] class=Point name=Unnamed dimension=2 values=[0.990234,0.169922] class=Point name=Unnamed dimension=2 values=[0.490234,0.669922] class=Point name=Unnamed dimension=2 values=[0.365234,0.0449219] class=Point name=Unnamed dimension=2 values=[0.865234,0.544922] class=Point name=Unnamed dimension=2 values=[0.615234,0.294922] class=Point name=Unnamed dimension=2 values=[0.115234,0.794922] class=Point name=Unnamed dimension=2 values=[0.0839844,0.263672] class=Point name=Unnamed dimension=2 values=[0.583984,0.763672] class=Point name=Unnamed dimension=2 values=[0.833984,0.0136719] class=Point name=Unnamed dimension=2 values=[0.333984,0.513672] class=Point name=Unnamed dimension=2 values=[0.458984,0.138672] class=Point name=Unnamed dimension=2 values=[0.958984,0.638672] class=Point name=Unnamed dimension=2 values=[0.708984,0.388672] class=Point name=Unnamed dimension=2 values=[0.208984,0.888672] class=Point name=Unnamed dimension=2 values=[0.146484,0.0761719] class=Point name=Unnamed dimension=2 values=[0.646484,0.576172] class=Point name=Unnamed dimension=2 values=[0.896484,0.326172] class=Point name=Unnamed dimension=2 values=[0.396484,0.826172] class=Point name=Unnamed dimension=2 values=[0.271484,0.451172] class=Point name=Unnamed dimension=2 values=[0.771484,0.951172] class=Point name=Unnamed dimension=2 values=[0.521484,0.201172] class=Point name=Unnamed dimension=2 values=[0.0214844,0.701172] class=Point name=Unnamed dimension=2 values=[0.0292969,0.0996094] class=Point name=Unnamed dimension=2 values=[0.529297,0.599609] class=Point name=Unnamed dimension=2 values=[0.779297,0.349609] class=Point name=Unnamed dimension=2 values=[0.279297,0.849609] class=Point name=Unnamed dimension=2 values=[0.404297,0.474609] class=Point name=Unnamed dimension=2 values=[0.904297,0.974609] class=Point name=Unnamed dimension=2 values=[0.654297,0.224609] class=Point name=Unnamed dimension=2 values=[0.154297,0.724609] class=Point name=Unnamed dimension=2 values=[0.216797,0.287109] class=Point name=Unnamed dimension=2 values=[0.716797,0.787109] class=Point name=Unnamed dimension=2 values=[0.966797,0.0371094] class=Point name=Unnamed dimension=2 values=[0.466797,0.537109] class=Point name=Unnamed dimension=2 values=[0.341797,0.162109] class=Point name=Unnamed dimension=2 values=[0.841797,0.662109] class=Point name=Unnamed dimension=2 values=[0.591797,0.412109] class=Point name=Unnamed dimension=2 values=[0.0917969,0.912109] class=Point name=Unnamed dimension=2 values=[0.123047,0.380859] class=Point name=Unnamed dimension=2 values=[0.623047,0.880859] class=Point name=Unnamed dimension=2 values=[0.873047,0.130859] class=Point name=Unnamed dimension=2 values=[0.373047,0.630859] class=Point name=Unnamed dimension=2 values=[0.498047,0.00585938] class=Point name=Unnamed dimension=2 values=[0.998047,0.505859] class=Point name=Unnamed dimension=2 values=[0.748047,0.255859] class=Point name=Unnamed dimension=2 values=[0.248047,0.755859] class=Point name=Unnamed dimension=2 values=[0.185547,0.193359] class=Point name=Unnamed dimension=2 values=[0.685547,0.693359] class=Point name=Unnamed dimension=2 values=[0.935547,0.443359] class=Point name=Unnamed dimension=2 values=[0.435547,0.943359] class=Point name=Unnamed dimension=2 values=[0.310547,0.318359] class=Point name=Unnamed dimension=2 values=[0.810547,0.818359] class=Point name=Unnamed dimension=2 values=[0.560547,0.0683594] class=Point name=Unnamed dimension=2 values=[0.0605469,0.568359] class=Point name=Unnamed dimension=2 values=[0.0449219,0.365234] class=Point name=Unnamed dimension=2 values=[0.544922,0.865234] class=Point name=Unnamed dimension=2 values=[0.794922,0.115234] class=Point name=Unnamed dimension=2 values=[0.294922,0.615234] class=Point name=Unnamed dimension=2 values=[0.419922,0.240234] class=Point name=Unnamed dimension=2 values=[0.919922,0.740234] class=Point name=Unnamed dimension=2 values=[0.669922,0.490234] class=Point name=Unnamed dimension=2 values=[0.169922,0.990234] class=Point name=Unnamed dimension=2 values=[0.232422,0.0527344] class=Point name=Unnamed dimension=2 values=[0.732422,0.552734] class=Point name=Unnamed dimension=2 values=[0.982422,0.302734] class=Point name=Unnamed dimension=2 values=[0.482422,0.802734] class=Point name=Unnamed dimension=2 values=[0.357422,0.427734] class=Point name=Unnamed dimension=2 values=[0.857422,0.927734] class=Point name=Unnamed dimension=2 values=[0.607422,0.177734] class=Point name=Unnamed dimension=2 values=[0.107422,0.677734] class=Point name=Unnamed dimension=2 values=[0.0761719,0.146484] class=Point name=Unnamed dimension=2 values=[0.576172,0.646484] class=Point name=Unnamed dimension=2 values=[0.826172,0.396484] class=Point name=Unnamed dimension=2 values=[0.326172,0.896484] class=Point name=Unnamed dimension=2 values=[0.451172,0.271484] class=Point name=Unnamed dimension=2 values=[0.951172,0.771484] class=Point name=Unnamed dimension=2 values=[0.701172,0.0214844] class=Point name=Unnamed dimension=2 values=[0.201172,0.521484] class=Point name=Unnamed dimension=2 values=[0.138672,0.458984] class=Point name=Unnamed dimension=2 values=[0.638672,0.958984] class=Point name=Unnamed dimension=2 values=[0.888672,0.208984] class=Point name=Unnamed dimension=2 values=[0.388672,0.708984] class=Point name=Unnamed dimension=2 values=[0.263672,0.0839844] class=Point name=Unnamed dimension=2 values=[0.763672,0.583984] class=Point name=Unnamed dimension=2 values=[0.513672,0.333984] class=Point name=Unnamed dimension=2 values=[0.0136719,0.833984] class=Point name=Unnamed dimension=2 values=[0.00976562,0.166016] class=Point name=Unnamed dimension=2 values=[0.509766,0.666016] class=Point name=Unnamed dimension=2 values=[0.759766,0.416016] class=Point name=Unnamed dimension=2 values=[0.259766,0.916016] class=Point name=Unnamed dimension=2 values=[0.384766,0.291016] class=Point name=Unnamed dimension=2 values=[0.884766,0.791016] class=Point name=Unnamed dimension=2 values=[0.634766,0.0410156] class=Point name=Unnamed dimension=2 values=[0.134766,0.541016] class=Point name=Unnamed dimension=2 values=[0.197266,0.478516] class=Point name=Unnamed dimension=2 values=[0.697266,0.978516] class=Point name=Unnamed dimension=2 values=[0.947266,0.228516] class=Point name=Unnamed dimension=2 values=[0.447266,0.728516] class=Point name=Unnamed dimension=2 values=[0.322266,0.103516] class=Point name=Unnamed dimension=2 values=[0.822266,0.603516] class=Point name=Unnamed dimension=2 values=[0.572266,0.353516] class=Point name=Unnamed dimension=2 values=[0.0722656,0.853516] class=Point name=Unnamed dimension=2 values=[0.103516,0.322266] class=Point name=Unnamed dimension=2 values=[0.603516,0.822266] class=Point name=Unnamed dimension=2 values=[0.853516,0.0722656] class=Point name=Unnamed dimension=2 values=[0.353516,0.572266] class=Point name=Unnamed dimension=2 values=[0.478516,0.197266] class=Point name=Unnamed dimension=2 values=[0.978516,0.697266] class=Point name=Unnamed dimension=2 values=[0.728516,0.447266] class=Point name=Unnamed dimension=2 values=[0.228516,0.947266] class=Point name=Unnamed dimension=2 values=[0.166016,0.00976562] class=Point name=Unnamed dimension=2 values=[0.666016,0.509766] class=Point name=Unnamed dimension=2 values=[0.916016,0.259766] class=Point name=Unnamed dimension=2 values=[0.416016,0.759766] class=Point name=Unnamed dimension=2 values=[0.291016,0.384766] class=Point name=Unnamed dimension=2 values=[0.791016,0.884766] class=Point name=Unnamed dimension=2 values=[0.541016,0.134766] class=Point name=Unnamed dimension=2 values=[0.0410156,0.634766] class=Point name=Unnamed dimension=2 values=[0.0566406,0.431641] class=Point name=Unnamed dimension=2 values=[0.556641,0.931641] class=Point name=Unnamed dimension=2 values=[0.806641,0.181641] class=Point name=Unnamed dimension=2 values=[0.306641,0.681641] class=Point name=Unnamed dimension=2 values=[0.431641,0.0566406] class=Point name=Unnamed dimension=2 values=[0.931641,0.556641] class=Point name=Unnamed dimension=2 values=[0.681641,0.306641] class=Point name=Unnamed dimension=2 values=[0.181641,0.806641] class=Point name=Unnamed dimension=2 values=[0.244141,0.244141] class=Point name=Unnamed dimension=2 values=[0.744141,0.744141] class=Point name=Unnamed dimension=2 values=[0.994141,0.494141] class=Point name=Unnamed dimension=2 values=[0.494141,0.994141] class=Point name=Unnamed dimension=2 values=[0.369141,0.369141] class=Point name=Unnamed dimension=2 values=[0.869141,0.869141] class=Point name=Unnamed dimension=2 values=[0.619141,0.119141] class=Point name=Unnamed dimension=2 values=[0.119141,0.619141] class=Point name=Unnamed dimension=2 values=[0.0878906,0.0878906] class=Point name=Unnamed dimension=2 values=[0.587891,0.587891] class=Point name=Unnamed dimension=2 values=[0.837891,0.337891] class=Point name=Unnamed dimension=2 values=[0.337891,0.837891] class=Point name=Unnamed dimension=2 values=[0.462891,0.462891] class=Point name=Unnamed dimension=2 values=[0.962891,0.962891] class=Point name=Unnamed dimension=2 values=[0.712891,0.212891] class=Point name=Unnamed dimension=2 values=[0.212891,0.712891] class=Point name=Unnamed dimension=2 values=[0.150391,0.275391] class=Point name=Unnamed dimension=2 values=[0.650391,0.775391] class=Point name=Unnamed dimension=2 values=[0.900391,0.0253906] class=Point name=Unnamed dimension=2 values=[0.400391,0.525391] class=Point name=Unnamed dimension=2 values=[0.275391,0.150391] class=Point name=Unnamed dimension=2 values=[0.775391,0.650391] class=Point name=Unnamed dimension=2 values=[0.525391,0.400391] class=Point name=Unnamed dimension=2 values=[0.0253906,0.900391] class=Point name=Unnamed dimension=2 values=[0.0175781,0.298828] class=Point name=Unnamed dimension=2 values=[0.517578,0.798828] class=Point name=Unnamed dimension=2 values=[0.767578,0.0488281] class=Point name=Unnamed dimension=2 values=[0.267578,0.548828] class=Point name=Unnamed dimension=2 values=[0.392578,0.173828] class=Point name=Unnamed dimension=2 values=[0.892578,0.673828] class=Point name=Unnamed dimension=2 values=[0.642578,0.423828] class=Point name=Unnamed dimension=2 values=[0.142578,0.923828] class=Point name=Unnamed dimension=2 values=[0.205078,0.111328] class=Point name=Unnamed dimension=2 values=[0.705078,0.611328] class=Point name=Unnamed dimension=2 values=[0.955078,0.361328] class=Point name=Unnamed dimension=2 values=[0.455078,0.861328] class=Point name=Unnamed dimension=2 values=[0.330078,0.486328] class=Point name=Unnamed dimension=2 values=[0.830078,0.986328] class=Point name=Unnamed dimension=2 values=[0.580078,0.236328] class=Point name=Unnamed dimension=2 values=[0.0800781,0.736328] class=Point name=Unnamed dimension=2 values=[0.111328,0.205078] class=Point name=Unnamed dimension=2 values=[0.611328,0.705078] class=Point name=Unnamed dimension=2 values=[0.861328,0.455078] class=Point name=Unnamed dimension=2 values=[0.361328,0.955078] class=Point name=Unnamed dimension=2 values=[0.486328,0.330078] class=Point name=Unnamed dimension=2 values=[0.986328,0.830078] class=Point name=Unnamed dimension=2 values=[0.736328,0.0800781] class=Point name=Unnamed dimension=2 values=[0.236328,0.580078] class=Point name=Unnamed dimension=2 values=[0.173828,0.392578] class=Point name=Unnamed dimension=2 values=[0.673828,0.892578] class=Point name=Unnamed dimension=2 values=[0.923828,0.142578] class=Point name=Unnamed dimension=2 values=[0.423828,0.642578] class=Point name=Unnamed dimension=2 values=[0.298828,0.0175781] class=Point name=Unnamed dimension=2 values=[0.798828,0.517578] class=Point name=Unnamed dimension=2 values=[0.548828,0.267578] class=Point name=Unnamed dimension=2 values=[0.0488281,0.767578] class=Point name=Unnamed dimension=2 values=[0.0332031,0.0332031] class=Point name=Unnamed dimension=2 values=[0.533203,0.533203] class=Point name=Unnamed dimension=2 values=[0.783203,0.283203] class=Point name=Unnamed dimension=2 values=[0.283203,0.783203] class=Point name=Unnamed dimension=2 values=[0.408203,0.408203] class=Point name=Unnamed dimension=2 values=[0.908203,0.908203] class=Point name=Unnamed dimension=2 values=[0.658203,0.158203] class=Point name=Unnamed dimension=2 values=[0.158203,0.658203] class=Point name=Unnamed dimension=2 values=[0.220703,0.345703] class=Point name=Unnamed dimension=2 values=[0.720703,0.845703] class=Point name=Unnamed dimension=2 values=[0.970703,0.0957031] class=Point name=Unnamed dimension=2 values=[0.470703,0.595703] class=Point name=Unnamed dimension=2 values=[0.345703,0.220703] class=Point name=Unnamed dimension=2 values=[0.845703,0.720703] class=Point name=Unnamed dimension=2 values=[0.595703,0.470703] class=Point name=Unnamed dimension=2 values=[0.0957031,0.970703] class=Point name=Unnamed dimension=2 values=[0.0644531,0.439453] class=Point name=Unnamed dimension=2 values=[0.564453,0.939453] class=Point name=Unnamed dimension=2 values=[0.814453,0.189453] class=Point name=Unnamed dimension=2 values=[0.314453,0.689453] class=Point name=Unnamed dimension=2 values=[0.439453,0.0644531] class=Point name=Unnamed dimension=2 values=[0.939453,0.564453] class=Point name=Unnamed dimension=2 values=[0.689453,0.314453] class=Point name=Unnamed dimension=2 values=[0.189453,0.814453] class=Point name=Unnamed dimension=2 values=[0.126953,0.126953] class=Point name=Unnamed dimension=2 values=[0.626953,0.626953] class=Point name=Unnamed dimension=2 values=[0.876953,0.376953] class=Point name=Unnamed dimension=2 values=[0.376953,0.876953] class=Point name=Unnamed dimension=2 values=[0.251953,0.251953] class=Point name=Unnamed dimension=2 values=[0.751953,0.751953] class=Point name=Unnamed dimension=2 values=[0.501953,0.00195312] class=Point name=Unnamed dimension=2 values=[0.00195312,0.501953] class=Point name=Unnamed dimension=2 values=[0.00292969,0.250977] class=Point name=Unnamed dimension=2 values=[0.50293,0.750977] class=Point name=Unnamed dimension=2 values=[0.75293,0.000976562] class=Point name=Unnamed dimension=2 values=[0.25293,0.500977] class=Point name=Unnamed dimension=2 values=[0.37793,0.125977] class=Point name=Unnamed dimension=2 values=[0.87793,0.625977] class=Point name=Unnamed dimension=2 values=[0.62793,0.375977] class=Point name=Unnamed dimension=2 values=[0.12793,0.875977] class=Point name=Unnamed dimension=2 values=[0.19043,0.0634766] class=Point name=Unnamed dimension=2 values=[0.69043,0.563477] class=Point name=Unnamed dimension=2 values=[0.94043,0.313477] class=Point name=Unnamed dimension=2 values=[0.44043,0.813477] class=Point name=Unnamed dimension=2 values=[0.31543,0.438477] class=Point name=Unnamed dimension=2 values=[0.81543,0.938477] class=Point name=Unnamed dimension=2 values=[0.56543,0.188477] class=Point name=Unnamed dimension=2 values=[0.0654297,0.688477] class=Point name=Unnamed dimension=2 values=[0.0966797,0.219727] class=Point name=Unnamed dimension=2 values=[0.59668,0.719727] class=Point name=Unnamed dimension=2 values=[0.84668,0.469727] class=Point name=Unnamed dimension=2 values=[0.34668,0.969727] class=Point name=Unnamed dimension=2 values=[0.47168,0.344727] class=Point name=Unnamed dimension=2 values=[0.97168,0.844727] class=Point name=Unnamed dimension=2 values=[0.72168,0.0947266] class=Point name=Unnamed dimension=2 values=[0.22168,0.594727] class=Point name=Unnamed dimension=2 values=[0.15918,0.407227] class=Point name=Unnamed dimension=2 values=[0.65918,0.907227] class=Point name=Unnamed dimension=2 values=[0.90918,0.157227] class=Point name=Unnamed dimension=2 values=[0.40918,0.657227] class=Point name=Unnamed dimension=2 values=[0.28418,0.0322266] class=Point name=Unnamed dimension=2 values=[0.78418,0.532227] class=Point name=Unnamed dimension=2 values=[0.53418,0.282227] class=Point name=Unnamed dimension=2 values=[0.0341797,0.782227] class=Point name=Unnamed dimension=2 values=[0.0498047,0.0166016] class=Point name=Unnamed dimension=2 values=[0.549805,0.516602] class=Point name=Unnamed dimension=2 values=[0.799805,0.266602] class=Point name=Unnamed dimension=2 values=[0.299805,0.766602] class=Point name=Unnamed dimension=2 values=[0.424805,0.391602] class=Point name=Unnamed dimension=2 values=[0.924805,0.891602] class=Point name=Unnamed dimension=2 values=[0.674805,0.141602] class=Point name=Unnamed dimension=2 values=[0.174805,0.641602] class=Point name=Unnamed dimension=2 values=[0.237305,0.329102] class=Point name=Unnamed dimension=2 values=[0.737305,0.829102] class=Point name=Unnamed dimension=2 values=[0.987305,0.0791016] class=Point name=Unnamed dimension=2 values=[0.487305,0.579102] class=Point name=Unnamed dimension=2 values=[0.362305,0.204102] class=Point name=Unnamed dimension=2 values=[0.862305,0.704102] class=Point name=Unnamed dimension=2 values=[0.612305,0.454102] class=Point name=Unnamed dimension=2 values=[0.112305,0.954102] class=Point name=Unnamed dimension=2 values=[0.0810547,0.485352] class=Point name=Unnamed dimension=2 values=[0.581055,0.985352] class=Point name=Unnamed dimension=2 values=[0.831055,0.235352] class=Point name=Unnamed dimension=2 values=[0.331055,0.735352] class=Point name=Unnamed dimension=2 values=[0.456055,0.110352] class=Point name=Unnamed dimension=2 values=[0.956055,0.610352] class=Point name=Unnamed dimension=2 values=[0.706055,0.360352] class=Point name=Unnamed dimension=2 values=[0.206055,0.860352] class=Point name=Unnamed dimension=2 values=[0.143555,0.172852] class=Point name=Unnamed dimension=2 values=[0.643555,0.672852] class=Point name=Unnamed dimension=2 values=[0.893555,0.422852] class=Point name=Unnamed dimension=2 values=[0.393555,0.922852] class=Point name=Unnamed dimension=2 values=[0.268555,0.297852] class=Point name=Unnamed dimension=2 values=[0.768555,0.797852] class=Point name=Unnamed dimension=2 values=[0.518555,0.0478516] class=Point name=Unnamed dimension=2 values=[0.0185547,0.547852] class=Point name=Unnamed dimension=2 values=[0.0263672,0.149414] class=Point name=Unnamed dimension=2 values=[0.526367,0.649414] class=Point name=Unnamed dimension=2 values=[0.776367,0.399414] class=Point name=Unnamed dimension=2 values=[0.276367,0.899414] class=Point name=Unnamed dimension=2 values=[0.401367,0.274414] class=Point name=Unnamed dimension=2 values=[0.901367,0.774414] class=Point name=Unnamed dimension=2 values=[0.651367,0.0244141] class=Point name=Unnamed dimension=2 values=[0.151367,0.524414] class=Point name=Unnamed dimension=2 values=[0.213867,0.461914] class=Point name=Unnamed dimension=2 values=[0.713867,0.961914] class=Point name=Unnamed dimension=2 values=[0.963867,0.211914] class=Point name=Unnamed dimension=2 values=[0.463867,0.711914] class=Point name=Unnamed dimension=2 values=[0.338867,0.0869141] class=Point name=Unnamed dimension=2 values=[0.838867,0.586914] class=Point name=Unnamed dimension=2 values=[0.588867,0.336914] class=Point name=Unnamed dimension=2 values=[0.0888672,0.836914] class=Point name=Unnamed dimension=2 values=[0.120117,0.368164] class=Point name=Unnamed dimension=2 values=[0.620117,0.868164] class=Point name=Unnamed dimension=2 values=[0.870117,0.118164] class=Point name=Unnamed dimension=2 values=[0.370117,0.618164] class=Point name=Unnamed dimension=2 values=[0.495117,0.243164] class=Point name=Unnamed dimension=2 values=[0.995117,0.743164] class=Point name=Unnamed dimension=2 values=[0.745117,0.493164] class=Point name=Unnamed dimension=2 values=[0.245117,0.993164] class=Point name=Unnamed dimension=2 values=[0.182617,0.0556641] class=Point name=Unnamed dimension=2 values=[0.682617,0.555664] class=Point name=Unnamed dimension=2 values=[0.932617,0.305664] class=Point name=Unnamed dimension=2 values=[0.432617,0.805664] class=Point name=Unnamed dimension=2 values=[0.307617,0.430664] class=Point name=Unnamed dimension=2 values=[0.807617,0.930664] class=Point name=Unnamed dimension=2 values=[0.557617,0.180664] class=Point name=Unnamed dimension=2 values=[0.0576172,0.680664] class=Point name=Unnamed dimension=2 values=[0.0419922,0.383789] class=Point name=Unnamed dimension=2 values=[0.541992,0.883789] class=Point name=Unnamed dimension=2 values=[0.791992,0.133789] class=Point name=Unnamed dimension=2 values=[0.291992,0.633789] class=Point name=Unnamed dimension=2 values=[0.416992,0.00878906] class=Point name=Unnamed dimension=2 values=[0.916992,0.508789] class=Point name=Unnamed dimension=2 values=[0.666992,0.258789] class=Point name=Unnamed dimension=2 values=[0.166992,0.758789] class=Point name=Unnamed dimension=2 values=[0.229492,0.196289] class=Point name=Unnamed dimension=2 values=[0.729492,0.696289] class=Point name=Unnamed dimension=2 values=[0.979492,0.446289] class=Point name=Unnamed dimension=2 values=[0.479492,0.946289] class=Point name=Unnamed dimension=2 values=[0.354492,0.321289] class=Point name=Unnamed dimension=2 values=[0.854492,0.821289] class=Point name=Unnamed dimension=2 values=[0.604492,0.0712891] class=Point name=Unnamed dimension=2 values=[0.104492,0.571289] class=Point name=Unnamed dimension=2 values=[0.0732422,0.102539] class=Point name=Unnamed dimension=2 values=[0.573242,0.602539] class=Point name=Unnamed dimension=2 values=[0.823242,0.352539] class=Point name=Unnamed dimension=2 values=[0.323242,0.852539] class=Point name=Unnamed dimension=2 values=[0.448242,0.477539] class=Point name=Unnamed dimension=2 values=[0.948242,0.977539] class=Point name=Unnamed dimension=2 values=[0.698242,0.227539] class=Point name=Unnamed dimension=2 values=[0.198242,0.727539] class=Point name=Unnamed dimension=2 values=[0.135742,0.290039] class=Point name=Unnamed dimension=2 values=[0.635742,0.790039] class=Point name=Unnamed dimension=2 values=[0.885742,0.0400391] class=Point name=Unnamed dimension=2 values=[0.385742,0.540039] class=Point name=Unnamed dimension=2 values=[0.260742,0.165039] class=Point name=Unnamed dimension=2 values=[0.760742,0.665039] class=Point name=Unnamed dimension=2 values=[0.510742,0.415039] class=Point name=Unnamed dimension=2 values=[0.0107422,0.915039] class=Point name=Unnamed dimension=2 values=[0.0146484,0.0830078] class=Point name=Unnamed dimension=2 values=[0.514648,0.583008] class=Point name=Unnamed dimension=2 values=[0.764648,0.333008] class=Point name=Unnamed dimension=2 values=[0.264648,0.833008] class=Point name=Unnamed dimension=2 values=[0.389648,0.458008] class=Point name=Unnamed dimension=2 values=[0.889648,0.958008] class=Point name=Unnamed dimension=2 values=[0.639648,0.208008] class=Point name=Unnamed dimension=2 values=[0.139648,0.708008] class=Point name=Unnamed dimension=2 values=[0.202148,0.270508] class=Point name=Unnamed dimension=2 values=[0.702148,0.770508] class=Point name=Unnamed dimension=2 values=[0.952148,0.0205078] class=Point name=Unnamed dimension=2 values=[0.452148,0.520508] class=Point name=Unnamed dimension=2 values=[0.327148,0.145508] class=Point name=Unnamed dimension=2 values=[0.827148,0.645508] class=Point name=Unnamed dimension=2 values=[0.577148,0.395508] class=Point name=Unnamed dimension=2 values=[0.0771484,0.895508] class=Point name=Unnamed dimension=2 values=[0.108398,0.426758] class=Point name=Unnamed dimension=2 values=[0.608398,0.926758] class=Point name=Unnamed dimension=2 values=[0.858398,0.176758] class=Point name=Unnamed dimension=2 values=[0.358398,0.676758] class=Point name=Unnamed dimension=2 values=[0.483398,0.0517578] class=Point name=Unnamed dimension=2 values=[0.983398,0.551758] class=Point name=Unnamed dimension=2 values=[0.733398,0.301758] class=Point name=Unnamed dimension=2 values=[0.233398,0.801758] class=Point name=Unnamed dimension=2 values=[0.170898,0.239258] class=Point name=Unnamed dimension=2 values=[0.670898,0.739258] class=Point name=Unnamed dimension=2 values=[0.920898,0.489258] class=Point name=Unnamed dimension=2 values=[0.420898,0.989258] class=Point name=Unnamed dimension=2 values=[0.295898,0.364258] class=Point name=Unnamed dimension=2 values=[0.795898,0.864258] class=Point name=Unnamed dimension=2 values=[0.545898,0.114258] class=Point name=Unnamed dimension=2 values=[0.0458984,0.614258] class=Point name=Unnamed dimension=2 values=[0.0615234,0.317383] class=Point name=Unnamed dimension=2 values=[0.561523,0.817383] class=Point name=Unnamed dimension=2 values=[0.811523,0.0673828] class=Point name=Unnamed dimension=2 values=[0.311523,0.567383] class=Point name=Unnamed dimension=2 values=[0.436523,0.192383] class=Point name=Unnamed dimension=2 values=[0.936523,0.692383] class=Point name=Unnamed dimension=2 values=[0.686523,0.442383] class=Point name=Unnamed dimension=2 values=[0.186523,0.942383] class=Point name=Unnamed dimension=2 values=[0.249023,0.00488281] class=Point name=Unnamed dimension=2 values=[0.749023,0.504883] class=Point name=Unnamed dimension=2 values=[0.999023,0.254883] class=Point name=Unnamed dimension=2 values=[0.499023,0.754883] class=Point name=Unnamed dimension=2 values=[0.374023,0.379883] class=Point name=Unnamed dimension=2 values=[0.874023,0.879883] class=Point name=Unnamed dimension=2 values=[0.624023,0.129883] class=Point name=Unnamed dimension=2 values=[0.124023,0.629883] class=Point name=Unnamed dimension=2 values=[0.0927734,0.161133] class=Point name=Unnamed dimension=2 values=[0.592773,0.661133] class=Point name=Unnamed dimension=2 values=[0.842773,0.411133] class=Point name=Unnamed dimension=2 values=[0.342773,0.911133] class=Point name=Unnamed dimension=2 values=[0.467773,0.286133] class=Point name=Unnamed dimension=2 values=[0.967773,0.786133] class=Point name=Unnamed dimension=2 values=[0.717773,0.0361328] class=Point name=Unnamed dimension=2 values=[0.217773,0.536133] class=Point name=Unnamed dimension=2 values=[0.155273,0.473633] class=Point name=Unnamed dimension=2 values=[0.655273,0.973633] class=Point name=Unnamed dimension=2 values=[0.905273,0.223633] class=Point name=Unnamed dimension=2 values=[0.405273,0.723633] class=Point name=Unnamed dimension=2 values=[0.280273,0.0986328] class=Point name=Unnamed dimension=2 values=[0.780273,0.598633] class=Point name=Unnamed dimension=2 values=[0.530273,0.348633] class=Point name=Unnamed dimension=2 values=[0.0302734,0.848633] class=Point name=Unnamed dimension=2 values=[0.0224609,0.450195] class=Point name=Unnamed dimension=2 values=[0.522461,0.950195] class=Point name=Unnamed dimension=2 values=[0.772461,0.200195] class=Point name=Unnamed dimension=2 values=[0.272461,0.700195] class=Point name=Unnamed dimension=2 values=[0.397461,0.0751953] class=Point name=Unnamed dimension=2 values=[0.897461,0.575195] class=Point name=Unnamed dimension=2 values=[0.647461,0.325195] class=Point name=Unnamed dimension=2 values=[0.147461,0.825195] class=Point name=Unnamed dimension=2 values=[0.209961,0.137695] class=Point name=Unnamed dimension=2 values=[0.709961,0.637695] class=Point name=Unnamed dimension=2 values=[0.959961,0.387695] class=Point name=Unnamed dimension=2 values=[0.459961,0.887695] class=Point name=Unnamed dimension=2 values=[0.334961,0.262695] class=Point name=Unnamed dimension=2 values=[0.834961,0.762695] class=Point name=Unnamed dimension=2 values=[0.584961,0.0126953] class=Point name=Unnamed dimension=2 values=[0.0849609,0.512695] class=Point name=Unnamed dimension=2 values=[0.116211,0.0439453] class=Point name=Unnamed dimension=2 values=[0.616211,0.543945] class=Point name=Unnamed dimension=2 values=[0.866211,0.293945] class=Point name=Unnamed dimension=2 values=[0.366211,0.793945] class=Point name=Unnamed dimension=2 values=[0.491211,0.418945] class=Point name=Unnamed dimension=2 values=[0.991211,0.918945] class=Point name=Unnamed dimension=2 values=[0.741211,0.168945] class=Point name=Unnamed dimension=2 values=[0.241211,0.668945] class=Point name=Unnamed dimension=2 values=[0.178711,0.356445] class=Point name=Unnamed dimension=2 values=[0.678711,0.856445] class=Point name=Unnamed dimension=2 values=[0.928711,0.106445] class=Point name=Unnamed dimension=2 values=[0.428711,0.606445] class=Point name=Unnamed dimension=2 values=[0.303711,0.231445] class=Point name=Unnamed dimension=2 values=[0.803711,0.731445] class=Point name=Unnamed dimension=2 values=[0.553711,0.481445] class=Point name=Unnamed dimension=2 values=[0.0537109,0.981445] class=Point name=Unnamed dimension=2 values=[0.0380859,0.21582] class=Point name=Unnamed dimension=2 values=[0.538086,0.71582] class=Point name=Unnamed dimension=2 values=[0.788086,0.46582] class=Point name=Unnamed dimension=2 values=[0.288086,0.96582] class=Point name=Unnamed dimension=2 values=[0.413086,0.34082] class=Point name=Unnamed dimension=2 values=[0.913086,0.84082] class=Point name=Unnamed dimension=2 values=[0.663086,0.0908203] class=Point name=Unnamed dimension=2 values=[0.163086,0.59082] class=Point name=Unnamed dimension=2 values=[0.225586,0.40332] class=Point name=Unnamed dimension=2 values=[0.725586,0.90332] class=Point name=Unnamed dimension=2 values=[0.975586,0.15332] class=Point name=Unnamed dimension=2 values=[0.475586,0.65332] class=Point name=Unnamed dimension=2 values=[0.350586,0.0283203] class=Point name=Unnamed dimension=2 values=[0.850586,0.52832] class=Point name=Unnamed dimension=2 values=[0.600586,0.27832] class=Point name=Unnamed dimension=2 values=[0.100586,0.77832] class=Point name=Unnamed dimension=2 values=[0.0693359,0.30957] class=Point name=Unnamed dimension=2 values=[0.569336,0.80957] class=Point name=Unnamed dimension=2 values=[0.819336,0.0595703] class=Point name=Unnamed dimension=2 values=[0.319336,0.55957] class=Point name=Unnamed dimension=2 values=[0.444336,0.18457] class=Point name=Unnamed dimension=2 values=[0.944336,0.68457] class=Point name=Unnamed dimension=2 values=[0.694336,0.43457] class=Point name=Unnamed dimension=2 values=[0.194336,0.93457] class=Point name=Unnamed dimension=2 values=[0.131836,0.12207] class=Point name=Unnamed dimension=2 values=[0.631836,0.62207] class=Point name=Unnamed dimension=2 values=[0.881836,0.37207] class=Point name=Unnamed dimension=2 values=[0.381836,0.87207] class=Point name=Unnamed dimension=2 values=[0.256836,0.49707] class=Point name=Unnamed dimension=2 values=[0.756836,0.99707] class=Point name=Unnamed dimension=2 values=[0.506836,0.24707] class=Point name=Unnamed dimension=2 values=[0.00683594,0.74707] class=Point name=Unnamed dimension=2 values=[0.00488281,0.249023] class=Point name=Unnamed dimension=2 values=[0.504883,0.749023] class=Point name=Unnamed dimension=2 values=[0.754883,0.499023] class=Point name=Unnamed dimension=2 values=[0.254883,0.999023] class=Point name=Unnamed dimension=2 values=[0.379883,0.374023] class=Point name=Unnamed dimension=2 values=[0.879883,0.874023] class=Point name=Unnamed dimension=2 values=[0.629883,0.124023] class=Point name=Unnamed dimension=2 values=[0.129883,0.624023] class=Point name=Unnamed dimension=2 values=[0.192383,0.436523] class=Point name=Unnamed dimension=2 values=[0.692383,0.936523] class=Point name=Unnamed dimension=2 values=[0.942383,0.186523] class=Point name=Unnamed dimension=2 values=[0.442383,0.686523] class=Point name=Unnamed dimension=2 values=[0.317383,0.0615234] class=Point name=Unnamed dimension=2 values=[0.817383,0.561523] class=Point name=Unnamed dimension=2 values=[0.567383,0.311523] class=Point name=Unnamed dimension=2 values=[0.0673828,0.811523] class=Point name=Unnamed dimension=2 values=[0.0986328,0.280273] class=Point name=Unnamed dimension=2 values=[0.598633,0.780273] class=Point name=Unnamed dimension=2 values=[0.848633,0.0302734] class=Point name=Unnamed dimension=2 values=[0.348633,0.530273] class=Point name=Unnamed dimension=2 values=[0.473633,0.155273] class=Point name=Unnamed dimension=2 values=[0.973633,0.655273] class=Point name=Unnamed dimension=2 values=[0.723633,0.405273] class=Point name=Unnamed dimension=2 values=[0.223633,0.905273] class=Point name=Unnamed dimension=2 values=[0.161133,0.0927734] class=Point name=Unnamed dimension=2 values=[0.661133,0.592773] class=Point name=Unnamed dimension=2 values=[0.911133,0.342773] class=Point name=Unnamed dimension=2 values=[0.411133,0.842773] class=Point name=Unnamed dimension=2 values=[0.286133,0.467773] class=Point name=Unnamed dimension=2 values=[0.786133,0.967773] class=Point name=Unnamed dimension=2 values=[0.536133,0.217773] class=Point name=Unnamed dimension=2 values=[0.0361328,0.717773] class=Point name=Unnamed dimension=2 values=[0.0517578,0.483398] class=Point name=Unnamed dimension=2 values=[0.551758,0.983398] class=Point name=Unnamed dimension=2 values=[0.801758,0.233398] class=Point name=Unnamed dimension=2 values=[0.301758,0.733398] class=Point name=Unnamed dimension=2 values=[0.426758,0.108398] class=Point name=Unnamed dimension=2 values=[0.926758,0.608398] class=Point name=Unnamed dimension=2 values=[0.676758,0.358398] class=Point name=Unnamed dimension=2 values=[0.176758,0.858398] class=Point name=Unnamed dimension=2 values=[0.239258,0.170898] class=Point name=Unnamed dimension=2 values=[0.739258,0.670898] class=Point name=Unnamed dimension=2 values=[0.989258,0.420898] class=Point name=Unnamed dimension=2 values=[0.489258,0.920898] class=Point name=Unnamed dimension=2 values=[0.364258,0.295898] class=Point name=Unnamed dimension=2 values=[0.864258,0.795898] class=Point name=Unnamed dimension=2 values=[0.614258,0.0458984] class=Point name=Unnamed dimension=2 values=[0.114258,0.545898] class=Point name=Unnamed dimension=2 values=[0.0830078,0.0146484] class=Point name=Unnamed dimension=2 values=[0.583008,0.514648] class=Point name=Unnamed dimension=2 values=[0.833008,0.264648] class=Point name=Unnamed dimension=2 values=[0.333008,0.764648] class=Point name=Unnamed dimension=2 values=[0.458008,0.389648] class=Point name=Unnamed dimension=2 values=[0.958008,0.889648] class=Point name=Unnamed dimension=2 values=[0.708008,0.139648] class=Point name=Unnamed dimension=2 values=[0.208008,0.639648] class=Point name=Unnamed dimension=2 values=[0.145508,0.327148] class=Point name=Unnamed dimension=2 values=[0.645508,0.827148] class=Point name=Unnamed dimension=2 values=[0.895508,0.0771484] class=Point name=Unnamed dimension=2 values=[0.395508,0.577148] class=Point name=Unnamed dimension=2 values=[0.270508,0.202148] class=Point name=Unnamed dimension=2 values=[0.770508,0.702148] class=Point name=Unnamed dimension=2 values=[0.520508,0.452148] class=Point name=Unnamed dimension=2 values=[0.0205078,0.952148] class=Point name=Unnamed dimension=2 values=[0.0283203,0.350586] class=Point name=Unnamed dimension=2 values=[0.52832,0.850586] class=Point name=Unnamed dimension=2 values=[0.77832,0.100586] class=Point name=Unnamed dimension=2 values=[0.27832,0.600586] class=Point name=Unnamed dimension=2 values=[0.40332,0.225586] class=Point name=Unnamed dimension=2 values=[0.90332,0.725586] class=Point name=Unnamed dimension=2 values=[0.65332,0.475586] class=Point name=Unnamed dimension=2 values=[0.15332,0.975586] class=Point name=Unnamed dimension=2 values=[0.21582,0.0380859] class=Point name=Unnamed dimension=2 values=[0.71582,0.538086] class=Point name=Unnamed dimension=2 values=[0.96582,0.288086] class=Point name=Unnamed dimension=2 values=[0.46582,0.788086] class=Point name=Unnamed dimension=2 values=[0.34082,0.413086] class=Point name=Unnamed dimension=2 values=[0.84082,0.913086] class=Point name=Unnamed dimension=2 values=[0.59082,0.163086] class=Point name=Unnamed dimension=2 values=[0.0908203,0.663086] class=Point name=Unnamed dimension=2 values=[0.12207,0.131836] class=Point name=Unnamed dimension=2 values=[0.62207,0.631836] class=Point name=Unnamed dimension=2 values=[0.87207,0.381836] class=Point name=Unnamed dimension=2 values=[0.37207,0.881836] class=Point name=Unnamed dimension=2 values=[0.49707,0.256836] class=Point name=Unnamed dimension=2 values=[0.99707,0.756836] class=Point name=Unnamed dimension=2 values=[0.74707,0.00683594] class=Point name=Unnamed dimension=2 values=[0.24707,0.506836] class=Point name=Unnamed dimension=2 values=[0.18457,0.444336] class=Point name=Unnamed dimension=2 values=[0.68457,0.944336] class=Point name=Unnamed dimension=2 values=[0.93457,0.194336] class=Point name=Unnamed dimension=2 values=[0.43457,0.694336] class=Point name=Unnamed dimension=2 values=[0.30957,0.0693359] class=Point name=Unnamed dimension=2 values=[0.80957,0.569336] class=Point name=Unnamed dimension=2 values=[0.55957,0.319336] class=Point name=Unnamed dimension=2 values=[0.0595703,0.819336] class=Point name=Unnamed dimension=2 values=[0.0439453,0.116211] class=Point name=Unnamed dimension=2 values=[0.543945,0.616211] class=Point name=Unnamed dimension=2 values=[0.793945,0.366211] class=Point name=Unnamed dimension=2 values=[0.293945,0.866211] class=Point name=Unnamed dimension=2 values=[0.418945,0.491211] class=Point name=Unnamed dimension=2 values=[0.918945,0.991211] class=Point name=Unnamed dimension=2 values=[0.668945,0.241211] class=Point name=Unnamed dimension=2 values=[0.168945,0.741211] class=Point name=Unnamed dimension=2 values=[0.231445,0.303711] class=Point name=Unnamed dimension=2 values=[0.731445,0.803711] class=Point name=Unnamed dimension=2 values=[0.981445,0.0537109] class=Point name=Unnamed dimension=2 values=[0.481445,0.553711] class=Point name=Unnamed dimension=2 values=[0.356445,0.178711] class=Point name=Unnamed dimension=2 values=[0.856445,0.678711] class=Point name=Unnamed dimension=2 values=[0.606445,0.428711] class=Point name=Unnamed dimension=2 values=[0.106445,0.928711] class=Point name=Unnamed dimension=2 values=[0.0751953,0.397461] class=Point name=Unnamed dimension=2 values=[0.575195,0.897461] class=Point name=Unnamed dimension=2 values=[0.825195,0.147461] class=Point name=Unnamed dimension=2 values=[0.325195,0.647461] class=Point name=Unnamed dimension=2 values=[0.450195,0.0224609] class=Point name=Unnamed dimension=2 values=[0.950195,0.522461] class=Point name=Unnamed dimension=2 values=[0.700195,0.272461] class=Point name=Unnamed dimension=2 values=[0.200195,0.772461] class=Point name=Unnamed dimension=2 values=[0.137695,0.209961] class=Point name=Unnamed dimension=2 values=[0.637695,0.709961] class=Point name=Unnamed dimension=2 values=[0.887695,0.459961] class=Point name=Unnamed dimension=2 values=[0.387695,0.959961] class=Point name=Unnamed dimension=2 values=[0.262695,0.334961] class=Point name=Unnamed dimension=2 values=[0.762695,0.834961] class=Point name=Unnamed dimension=2 values=[0.512695,0.0849609] class=Point name=Unnamed dimension=2 values=[0.0126953,0.584961] class=Point name=Unnamed dimension=2 values=[0.00878906,0.416992] class=Point name=Unnamed dimension=2 values=[0.508789,0.916992] class=Point name=Unnamed dimension=2 values=[0.758789,0.166992] class=Point name=Unnamed dimension=2 values=[0.258789,0.666992] class=Point name=Unnamed dimension=2 values=[0.383789,0.0419922] class=Point name=Unnamed dimension=2 values=[0.883789,0.541992] class=Point name=Unnamed dimension=2 values=[0.633789,0.291992] class=Point name=Unnamed dimension=2 values=[0.133789,0.791992] class=Point name=Unnamed dimension=2 values=[0.196289,0.229492] class=Point name=Unnamed dimension=2 values=[0.696289,0.729492] class=Point name=Unnamed dimension=2 values=[0.946289,0.479492] class=Point name=Unnamed dimension=2 values=[0.446289,0.979492] class=Point name=Unnamed dimension=2 values=[0.321289,0.354492] class=Point name=Unnamed dimension=2 values=[0.821289,0.854492] class=Point name=Unnamed dimension=2 values=[0.571289,0.104492] class=Point name=Unnamed dimension=2 values=[0.0712891,0.604492] class=Point name=Unnamed dimension=2 values=[0.102539,0.0732422] class=Point name=Unnamed dimension=2 values=[0.602539,0.573242] class=Point name=Unnamed dimension=2 values=[0.852539,0.323242] class=Point name=Unnamed dimension=2 values=[0.352539,0.823242] class=Point name=Unnamed dimension=2 values=[0.477539,0.448242] class=Point name=Unnamed dimension=2 values=[0.977539,0.948242] class=Point name=Unnamed dimension=2 values=[0.727539,0.198242] class=Point name=Unnamed dimension=2 values=[0.227539,0.698242] class=Point name=Unnamed dimension=2 values=[0.165039,0.260742] class=Point name=Unnamed dimension=2 values=[0.665039,0.760742] class=Point name=Unnamed dimension=2 values=[0.915039,0.0107422] class=Point name=Unnamed dimension=2 values=[0.415039,0.510742] class=Point name=Unnamed dimension=2 values=[0.290039,0.135742] class=Point name=Unnamed dimension=2 values=[0.790039,0.635742] class=Point name=Unnamed dimension=2 values=[0.540039,0.385742] class=Point name=Unnamed dimension=2 values=[0.0400391,0.885742] class=Point name=Unnamed dimension=2 values=[0.0556641,0.182617] class=Point name=Unnamed dimension=2 values=[0.555664,0.682617] class=Point name=Unnamed dimension=2 values=[0.805664,0.432617] class=Point name=Unnamed dimension=2 values=[0.305664,0.932617] class=Point name=Unnamed dimension=2 values=[0.430664,0.307617] class=Point name=Unnamed dimension=2 values=[0.930664,0.807617] class=Point name=Unnamed dimension=2 values=[0.680664,0.0576172] class=Point name=Unnamed dimension=2 values=[0.180664,0.557617] class=Point name=Unnamed dimension=2 values=[0.243164,0.495117] class=Point name=Unnamed dimension=2 values=[0.743164,0.995117] class=Point name=Unnamed dimension=2 values=[0.993164,0.245117] class=Point name=Unnamed dimension=2 values=[0.493164,0.745117] class=Point name=Unnamed dimension=2 values=[0.368164,0.120117] class=Point name=Unnamed dimension=2 values=[0.868164,0.620117] class=Point name=Unnamed dimension=2 values=[0.618164,0.370117] class=Point name=Unnamed dimension=2 values=[0.118164,0.870117] class=Point name=Unnamed dimension=2 values=[0.0869141,0.338867] class=Point name=Unnamed dimension=2 values=[0.586914,0.838867] class=Point name=Unnamed dimension=2 values=[0.836914,0.0888672] class=Point name=Unnamed dimension=2 values=[0.336914,0.588867] class=Point name=Unnamed dimension=2 values=[0.461914,0.213867] class=Point name=Unnamed dimension=2 values=[0.961914,0.713867] class=Point name=Unnamed dimension=2 values=[0.711914,0.463867] class=Point name=Unnamed dimension=2 values=[0.211914,0.963867] class=Point name=Unnamed dimension=2 values=[0.149414,0.0263672] class=Point name=Unnamed dimension=2 values=[0.649414,0.526367] class=Point name=Unnamed dimension=2 values=[0.899414,0.276367] class=Point name=Unnamed dimension=2 values=[0.399414,0.776367] class=Point name=Unnamed dimension=2 values=[0.274414,0.401367] class=Point name=Unnamed dimension=2 values=[0.774414,0.901367] class=Point name=Unnamed dimension=2 values=[0.524414,0.151367] class=Point name=Unnamed dimension=2 values=[0.0244141,0.651367] class=Point name=Unnamed dimension=2 values=[0.0166016,0.0498047] class=Point name=Unnamed dimension=2 values=[0.516602,0.549805] class=Point name=Unnamed dimension=2 values=[0.766602,0.299805] class=Point name=Unnamed dimension=2 values=[0.266602,0.799805] class=Point name=Unnamed dimension=2 values=[0.391602,0.424805] class=Point name=Unnamed dimension=2 values=[0.891602,0.924805] class=Point name=Unnamed dimension=2 values=[0.641602,0.174805] class=Point name=Unnamed dimension=2 values=[0.141602,0.674805] class=Point name=Unnamed dimension=2 values=[0.204102,0.362305] class=Point name=Unnamed dimension=2 values=[0.704102,0.862305] class=Point name=Unnamed dimension=2 values=[0.954102,0.112305] class=Point name=Unnamed dimension=2 values=[0.454102,0.612305] class=Point name=Unnamed dimension=2 values=[0.329102,0.237305] class=Point name=Unnamed dimension=2 values=[0.829102,0.737305] class=Point name=Unnamed dimension=2 values=[0.579102,0.487305] class=Point name=Unnamed dimension=2 values=[0.0791016,0.987305] class=Point name=Unnamed dimension=2 values=[0.110352,0.456055] class=Point name=Unnamed dimension=2 values=[0.610352,0.956055] class=Point name=Unnamed dimension=2 values=[0.860352,0.206055] class=Point name=Unnamed dimension=2 values=[0.360352,0.706055] class=Point name=Unnamed dimension=2 values=[0.485352,0.0810547] class=Point name=Unnamed dimension=2 values=[0.985352,0.581055] class=Point name=Unnamed dimension=2 values=[0.735352,0.331055] class=Point name=Unnamed dimension=2 values=[0.235352,0.831055] class=Point name=Unnamed dimension=2 values=[0.172852,0.143555] class=Point name=Unnamed dimension=2 values=[0.672852,0.643555] class=Point name=Unnamed dimension=2 values=[0.922852,0.393555] class=Point name=Unnamed dimension=2 values=[0.422852,0.893555] class=Point name=Unnamed dimension=2 values=[0.297852,0.268555] class=Point name=Unnamed dimension=2 values=[0.797852,0.768555] class=Point name=Unnamed dimension=2 values=[0.547852,0.0185547] class=Point name=Unnamed dimension=2 values=[0.0478516,0.518555] class=Point name=Unnamed dimension=2 values=[0.0322266,0.28418] class=Point name=Unnamed dimension=2 values=[0.532227,0.78418] class=Point name=Unnamed dimension=2 values=[0.782227,0.0341797] class=Point name=Unnamed dimension=2 values=[0.282227,0.53418] class=Point name=Unnamed dimension=2 values=[0.407227,0.15918] class=Point name=Unnamed dimension=2 values=[0.907227,0.65918] class=Point name=Unnamed dimension=2 values=[0.657227,0.40918] class=Point name=Unnamed dimension=2 values=[0.157227,0.90918] class=Point name=Unnamed dimension=2 values=[0.219727,0.0966797] sample size= 1000 relative error to Pi=7.662822e-04 openturns-1.9/python/test/t_SobolSequence_std.py000077500000000000000000000021471307543307100222500ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create a Sobol' sequence of maximum dimension sequence = SobolSequence(SobolSequence.MaximumNumberOfDimension) print(sequence) # Create a numerical sample of the sequence sobolSample = sequence.generate(10) print(repr(sobolSample)) # Create another Sobol' sequence of dimension 2 to estimate Pi in [0 1)^2 dimension = 2 sequence = SobolSequence(dimension) pointInsideCircle = 0 sampleSize = 1000 for i in range(sampleSize): sobolPoint = sequence.generate() print(sobolPoint.__repr__()) if sobolPoint.norm() < 1.0: pointInsideCircle = pointInsideCircle + 1 probabilityEstimate = (1.0 * pointInsideCircle) / sampleSize probability = pi / 4.0 relativeError = fabs(probability - probabilityEstimate) / probability print('sample size=', sampleSize) print('relative error to Pi=%e' % relativeError) except: import sys print("t_SobolSequence_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SoizeGhanemFactory_std.expout000066400000000000000000000405021307543307100241300ustar00rootroot00000000000000SoizeGhanem= class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=true SoizeGhanem( 0 )= 1 SoizeGhanem( 0 )( [0.5, 0.5] = [1] SoizeGhanem( 1 )= x0 SoizeGhanem( 1 )( [0.5, 0.5] = [0.5] SoizeGhanem( 2 )= 1.73205 * x1 SoizeGhanem( 2 )( [0.5, 0.5] = [0.866025] SoizeGhanem( 3 )= -0.707107 + 0.707107 * x0^2 SoizeGhanem( 3 )( [0.5, 0.5] = [-0.53033] SoizeGhanem( 4 )= (x0) * (1.73205 * x1) SoizeGhanem( 4 )( [0.5, 0.5] = [0.433013] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] SoizeGhanem= class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=false adaptationFactor=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=false SoizeGhanem( 0 )= (1) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem( 0 )( [0.5, 0.5] = [0.881976] SoizeGhanem( 1 )= (x0) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem( 1 )( [0.5, 0.5] = [0.440988] SoizeGhanem( 2 )= (1.73205 * x1) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem( 2 )( [0.5, 0.5] = [0.763813] SoizeGhanem( 3 )= (-0.707107 + 0.707107 * x0^2) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem( 3 )( [0.5, 0.5] = [-0.467738] SoizeGhanem( 4 )= ((x0) * (1.73205 * x1)) * (([X0,X1]->1/sqrt(ComposedDistribution(Normal(mu = 0, sigma = 1), Uniform(a = -1, b = 1), NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]])).computePDF(X0, X1)) SoizeGhanem( 4 )( [0.5, 0.5] = [0.381907] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] SoizeGhanem= class=SoizeGhanemFactory productPolynomial=class=OrthogonalProductPolynomialFactory univariate polynomial collection=[class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=OrthogonalUniVariatePolynomialFamily implementation=class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1] measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=IndependentCopula name=IndependentCopula dimension=2 marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 phi=class=LinearEnumerateFunction dimension=2 measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 hasIndependentCopula=false adaptationFactor=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x0,x1,y0] evaluationImplementation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] gradientImplementation=class=CenteredFiniteDifferenceGradient name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[1e-05,1e-05] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] hessianImplementation=class=CenteredFiniteDifferenceHessian name=Unnamed epsilon=class=Point name=Unnamed dimension=2 values=[0.0001,0.0001] evaluation=class=SoizeGhanemFactorEvaluation measure=class=ComposedDistribution name=ComposedDistribution dimension=2 copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] marginal[0]=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] marginal[1]=class=Uniform name=Uniform dimension=1 a=-1 b=1 marginals=[class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1],class=Uniform name=Uniform dimension=1 a=-1 b=1] useCopula=true copula=class=NormalCopula name=NormalCopula dimension=2 correlation=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0.5,0.5,1] SoizeGhanem( 0 )= (1) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem( 0 )( [0.5, 0.5] = [0.881976] SoizeGhanem( 1 )= (x0) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem( 1 )( [0.5, 0.5] = [0.440988] SoizeGhanem( 2 )= (1.73205 * x1) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem( 2 )( [0.5, 0.5] = [0.763813] SoizeGhanem( 3 )= (-0.707107 + 0.707107 * x0^2) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem( 3 )( [0.5, 0.5] = [-0.467738] SoizeGhanem( 4 )= ((x0) * (1.73205 * x1)) * (([X0,X1]->1/sqrt(NormalCopula(R = [[ 1 0.5 ] [ 0.5 1 ]]).computePDF(Normal(mu = 0, sigma = 1).computeCDF(X0), Uniform(a = -1, b = 1).computeCDF(X1))) SoizeGhanem( 4 )( [0.5, 0.5] = [0.381907] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] openturns-1.9/python/test/t_SoizeGhanemFactory_std.py000077500000000000000000000027061307543307100232430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() marginals = [ot.Normal(), ot.Uniform()] R = ot.CorrelationMatrix(2, [1.0, 0.5, 0.5, 1.0]) copula = ot.NormalCopula(R) factories = [ot.SoizeGhanemFactory(ot.ComposedDistribution(marginals)), ot.SoizeGhanemFactory( ot.ComposedDistribution(marginals, copula), False), ot.SoizeGhanemFactory(ot.ComposedDistribution(marginals, copula), True)] x = [0.5] * 2 kMax = 5 ot.ResourceMap.SetAsUnsignedInteger( "IteratedQuadrature-MaximumSubIntervals", 2048) ot.ResourceMap.SetAsScalar( "IteratedQuadrature-MaximumError", 1.0e-6) for soize in factories: distribution = soize.getMeasure() print('SoizeGhanem=', soize) functions = list() for k in range(kMax): functions.append(soize.build(k)) print('SoizeGhanem(', k, ')=', functions[k].getEvaluation()) print('SoizeGhanem(', k, ')(', x, '=', functions[k](x)) M = ot.SymmetricMatrix(kMax) for m in range(kMax): for n in range(m + 1): def wrapper(x): return functions[m](x) * functions[n](x)[0] * distribution.computePDF(x) kernel = ot.PythonFunction(distribution.getDimension(), 1, wrapper) value = ot.IteratedQuadrature().integrate( kernel, distribution.getRange())[0] if abs(value) >= 1.0e-6: M[m, n] = value print('M=\n', M) openturns-1.9/python/test/t_SpaceFilling_std.expout000066400000000000000000000000761307543307100227310ustar00rootroot00000000000000C2=0.064616 MinDist=0.168465 PhiP=3.011540, PhiP(50)=3.011540 openturns-1.9/python/test/t_SpaceFilling_std.py000077500000000000000000000013121307543307100220320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Defining parameters dimension = 5 size = 100 # Build OT LHS algorithm lhs = ot.LHSExperiment( ot.ComposedDistribution([ot.Uniform()] * dimension), size) # Generate design without optimization design = lhs.generate() # Defining space fillings spaceFillingC2 = ot.SpaceFillingC2() spaceFillingMinDist = ot.SpaceFillingMinDist() spaceFillingPhiP = ot.SpaceFillingPhiP() spaceFillingPhiP50 = ot.SpaceFillingPhiP(50) # print the criteria on this design print("C2=%f MinDist=%f PhiP=%f, PhiP(50)=%f" % tuple([sf.evaluate(design) for sf in [spaceFillingC2, spaceFillingMinDist, spaceFillingPhiP, spaceFillingPhiP50]])) openturns-1.9/python/test/t_SpecFunc_std.expout000066400000000000000000000011661307543307100221000ustar00rootroot00000000000000x= 1 log2= 0 x= 2 log2= 1 x= 4 log2= 2 x= 8 log2= 3 x= 16 log2= 4 x= 32 log2= 5 x= 64 log2= 6 x= 128 log2= 7 x= 256 log2= 8 x= 512 log2= 9 x= 0 bits= 0 x= 1 bits= 1 x= 3 bits= 2 x= 7 bits= 3 x= 15 bits= 4 x= 31 bits= 5 x= 63 bits= 6 x= 127 bits= 7 x= 255 bits= 8 x= 511 bits= 9 x= 0 nextpow2= 1 x= 1 nextpow2= 1 x= 2 nextpow2= 2 x= 3 nextpow2= 4 x= 4 nextpow2= 4 x= 10 nextpow2= 16 x= 100 nextpow2= 128 x= 1000 nextpow2= 1024 n= 4 k= 2 binom= 6 n= 4 k= 0 binom= 1 n= 4 k= 3 binom= 4 n= 5 k= 2 binom= 10 n= 5 k= 0 binom= 1 n= 5 k= 3 binom= 10 n= 17 k= 2 binom= 136 n= 17 k= 0 binom= 1 n= 17 k= 7 binom= 19448 n= 17 k= 3 binom= 680 openturns-1.9/python/test/t_SpecFunc_std.py000077500000000000000000000010321307543307100211770ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import openturns as ot for lx in range(10): x = 2**lx print('x=', x, 'log2=', ot.SpecFunc.Log2(x)) for lx in range(10): x = 2**lx - 1 print('x=', x, 'bits=', ot.SpecFunc.BitCount(x)) for x in [0, 1, 2, 3, 4, 10, 100, 1000]: print('x=', x, 'nextpow2=', ot.SpecFunc.NextPowerOfTwo(x)) for n in [4, 5, 17]: for k in [2, 0, 7, 3]: if k <= n: print('n=', n, 'k=', k, 'binom=', ot.SpecFunc.BinomialCoefficient(n, k)) openturns-1.9/python/test/t_SpectralGaussianProcess_std.expout000066400000000000000000000062121307543307100251760ustar00rootroot00000000000000mySpectralProcess0 = SpectralGaussianProcess=SpectralGaussianProcess dimension=1 spectralModel=class=CauchyModel amplitude=[1] scale=[1] no spatial correlation maximal frequency=3.5 n frequency=4 Realization = [ t x0 ] 0 : [ 0 -0.541695 ] 1 : [ 0.142857 -0.17745 ] 2 : [ 0.285714 -0.0349748 ] 3 : [ 0.428571 0.787511 ] 4 : [ 0.571429 0.116564 ] 5 : [ 0.714286 -0.267239 ] 6 : [ 0.857143 -0.318985 ] 7 : [ 1 -0.442252 ] mySpectralProcess1 = SpectralGaussianProcess=SpectralGaussianProcess dimension=1 spectralModel=class=CauchyModel amplitude=[1] scale=[1] no spatial correlation maximal frequency=10 n frequency=8 Realization = [ t x0 ] 0 : [ 0 0.120989 ] 1 : [ 0.05 -0.00948819 ] 2 : [ 0.1 0.0601334 ] 3 : [ 0.15 0.1043 ] 4 : [ 0.2 0.0610709 ] 5 : [ 0.25 0.154619 ] 6 : [ 0.3 0.412502 ] 7 : [ 0.35 -0.250428 ] 8 : [ 0.4 -0.278895 ] 9 : [ 0.45 -0.497166 ] 10 : [ 0.5 -0.136631 ] 11 : [ 0.55 -0.212243 ] 12 : [ 0.6 -0.0581267 ] 13 : [ 0.65 -0.216907 ] 14 : [ 0.7 -0.178035 ] 15 : [ 0.75 -0.21869 ] mySpecModel = class=CauchyModel amplitude=[1,1,1] scale=[1] no spatial correlation mySpectralProcess2 = SpectralGaussianProcess=SpectralGaussianProcess dimension=3 spectralModel=class=CauchyModel amplitude=[1,1,1] scale=[1] no spatial correlation maximal frequency=3.5 n frequency=4 Realization = [ t x0 x1 x2 ] 0 : [ 0 0.654415 0.327034 0.995509 ] 1 : [ 0.142857 0.391645 0.83302 0.963103 ] 2 : [ 0.285714 -0.0696653 0.74527 0.923086 ] 3 : [ 0.428571 0.0185515 0.700052 0.753238 ] 4 : [ 0.571429 0.0671541 0.101402 0.776123 ] 5 : [ 0.714286 -0.0868007 -0.182155 0.158721 ] 6 : [ 0.857143 -0.0743807 0.450592 -0.333411 ] 7 : [ 1 -0.357537 0.134426 -0.894867 ] mySpectralProcess3 = SpectralGaussianProcess=SpectralGaussianProcess dimension=3 spectralModel=class=CauchyModel amplitude=[1,1,1] scale=[1] no spatial correlation maximal frequency=10 n frequency=8 Realization = [ t x0 x1 x2 ] 0 : [ 0 0.375052 -0.406979 0.694822 ] 1 : [ 0.05 0.599149 -0.253222 0.973576 ] 2 : [ 0.1 0.940377 -0.376011 0.912676 ] 3 : [ 0.15 0.686041 0.0312133 0.803473 ] 4 : [ 0.2 0.145005 0.25063 0.650052 ] 5 : [ 0.25 0.165941 1.24729 0.590029 ] 6 : [ 0.3 0.00289084 1.98871 0.703721 ] 7 : [ 0.35 -0.0107257 1.97658 0.890105 ] 8 : [ 0.4 -0.333973 2.20943 0.569659 ] 9 : [ 0.45 -0.0979509 1.94076 0.762396 ] 10 : [ 0.5 -0.0178465 1.72497 0.579794 ] 11 : [ 0.55 -0.297363 1.58461 0.588862 ] 12 : [ 0.6 -0.804947 1.18118 0.55475 ] 13 : [ 0.65 -1.20212 1.07139 0.312167 ] 14 : [ 0.7 -0.923351 0.878606 -0.0436966 ] 15 : [ 0.75 -0.677219 0.610963 -0.170533 ] openturns-1.9/python/test/t_SpectralGaussianProcess_std.py000077500000000000000000000037301307543307100243070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default dimension parameter to evaluate the model defaultDimension = 1 # Amplitude values amplitude = Point(defaultDimension, 1.0) # Scale values scale = Point(defaultDimension, 1.0) # Second order model with parameters myModel = ExponentialCauchy(scale, amplitude) # checking the copy-cast*/ mySecondOrderModel = SecondOrderModel(myModel) points = 8 tMin = 0.0 tStep = 1.0 / (points - 1) # RegularGrid --> Build list of frequencies using the RegularGrid myTimeGrid = RegularGrid(tMin, tStep, points) mySpectralProcess0 = SpectralGaussianProcess(myModel, myTimeGrid) print("mySpectralProcess0 = ", mySpectralProcess0) print("Realization = ", mySpectralProcess0.getRealization()) # Constructor using maximalFrequency value and size of discretization maximalFrequency = 10.0 mySpectralProcess1 = SpectralGaussianProcess( myModel, maximalFrequency, points) tg = RegularGrid(mySpectralProcess1.getTimeGrid()) print("mySpectralProcess1 = ", mySpectralProcess1) print("Realization = ", mySpectralProcess1.getRealization()) # 3D model highDimension = 3 amplitude = Point(highDimension, 1.0) # Second order model with parameters mySpecModel = CauchyModel(scale, amplitude) print("mySpecModel = ", mySpecModel) mySpectralProcess2 = SpectralGaussianProcess(mySpecModel, myTimeGrid) print("mySpectralProcess2 = ", mySpectralProcess2) print("Realization = ", mySpectralProcess2.getRealization()) mySpectralProcess3 = SpectralGaussianProcess( mySpecModel, maximalFrequency, points) print("mySpectralProcess3 = ", mySpectralProcess3) print("Realization = ", mySpectralProcess3.getRealization()) except: import sys print("t_SpectralGaussianProcess_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SquareComplexMatrix_std.expout000066400000000000000000000051431307543307100243460ustar00rootroot00000000000000test : default constructor and string converter squareComplexMatrix0 = class=SquareComplexMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test : constructor with size, operator() and string converter squareComplexMatrix1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] test : copy constructor and string converter squareComplexMatrix2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,1),(0,1),(3,1),(5,1)] test : get dimensions methods squareComplexMatrix1's nbRows = 2 squareComplexMatrix1's nbColumns = 2 test : conjugate method squareComplexMatrix1 conjugate = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-1),(0,-1),(3,-1),(5,-1)] test : addition method sum1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(0,0),(6,0),(10,0)] sum2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(0,0),(6,0),(10,0)] sum1 equals sum2 = True test : substraction method diff = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,2),(0,2),(0,2),(0,2)] test : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,-3),(2,-4),(20,4),(27,3)] test : multiplication with a numerical point method pt = [(1,1),(0,1)] ptResult = [(-1,5),(-2,6)] test : multiplication and division by a numerical scalar methods scalprod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,5),(-2,3),(7,9),(13,13)] scaldiv1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.384615,0.0769231),(0.153846,0.230769),(0.846154,-0.230769),(1.30769,-0.538462)] scaldiv2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.384615,0.0769231),(0.153846,0.230769),(0.846154,-0.230769),(1.30769,-0.538462)] scaldiv1 equals scaldiv2 = True test : isEmpty method squareComplexMatrix0 is empty = True squareComplexMatrix1 is empty = False squareComplexMatrix5 is empty = True openturns-1.9/python/test/t_SquareComplexMatrix_std.py000077500000000000000000000066321307543307100234610ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot from math import * # DEFAULT CONSTRUCTOR AND STRING CONVERTER print('test : default constructor and string converter') # Default constructor squareComplexMatrix0 = ot.SquareComplexMatrix() # String converter print('squareComplexMatrix0 = ', repr(squareComplexMatrix0)) # CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print('test : constructor with size, operator() and string converter') # Constructor with size squareComplexMatrix1 = ot.SquareComplexMatrix(2) # Check operator() methods squareComplexMatrix1[0, 0] = 1. + 1j squareComplexMatrix1[0, 1] = 3. + 1j squareComplexMatrix1[1, 0] = 1.0j squareComplexMatrix1[1, 1] = 5. + 1.j # String converter print('squareComplexMatrix1 = ', repr(squareComplexMatrix1)) # COPY CONSTRUCTOR AND STRING CONVERTER print('test : copy constructor and string converter') # Copy constructor squareComplexMatrix2 = ot.SquareComplexMatrix(squareComplexMatrix1) # String converter print('squareComplexMatrix2 = ', repr(squareComplexMatrix2)) # GET DIMENSIONS METHODS print('test : get dimensions methods') # Get dimension methods print('squareComplexMatrix1\'s nbRows = ', squareComplexMatrix1.getNbRows()) print('squareComplexMatrix1\'s nbColumns = ', squareComplexMatrix1.getNbColumns()) # CONJUGATE METHOD print('test : conjugate method') # Check conjugate method squareComplexMatrix4 = squareComplexMatrix1.conjugate() print('squareComplexMatrix1 conjugate = ', repr(squareComplexMatrix4)) # ADDITION METHOD print('test : addition method') # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = squareComplexMatrix1 + squareComplexMatrix4 sum2 = squareComplexMatrix4 + squareComplexMatrix1 print('sum1 = ', repr(sum1)) print('sum2 = ', repr(sum2)) print('sum1 equals sum2 = ', sum1 == sum2) # SUBSTRACTION METHOD print('test : substraction method') # Check substraction method diff = squareComplexMatrix1 - squareComplexMatrix4 print('diff = ', repr(diff)) # MATRIX MULTIPLICATION METHOD print('test : matrix multiplication method') # Check multiplication method prod = squareComplexMatrix1 * squareComplexMatrix4 print('prod = ', repr(prod)) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print('test : multiplication with a numerical point method') # Create the numerical point pt = ot.ComplexCollection(2) pt[0] = 1. + 1j pt[1] = 1j print('pt = ', repr(pt)) # Check the product method ptResult = squareComplexMatrix1 * pt print('ptResult = ', repr(ptResult)) # MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS print('test : multiplication and division by a numerical scalar methods') # Check the multiplication method s = 3. + 2j scalprod = squareComplexMatrix1 * s print('scalprod = ', repr(scalprod)) # Check the division method scaldiv1 = squareComplexMatrix1 / s scaldiv2 = squareComplexMatrix1 / s print('scaldiv1 = ', repr(scaldiv1)) print('scaldiv2 = ', repr(scaldiv2)) print('scaldiv1 equals scaldiv2 = ', (scaldiv1 == scaldiv2)) # ISEMPTY METHOD print('test : isEmpty method') # Check method isEmpty squareComplexMatrix5 = ot.SquareComplexMatrix() squareComplexMatrix6 = ot.SquareComplexMatrix() print('squareComplexMatrix0 is empty = ', squareComplexMatrix0.isEmpty()) print('squareComplexMatrix1 is empty = ', squareComplexMatrix1.isEmpty()) print('squareComplexMatrix5 is empty = ', squareComplexMatrix5.isEmpty()) openturns-1.9/python/test/t_SquareMatrix_lapack.expout000066400000000000000000000005751307543307100234630ustar00rootroot00000000000000matrix1 = [[ 1 5 ] [ 2 12 ]] pt = [5,0] result = [30,-5] determinant = 2 ev = [(0.155711,0),(12.8443,0)] ev= [(0.155711,0),(12.8443,0)] evect= [[ (-0.986041,0) (-0.388911,0) ] [ (0.166501,0) (-0.921275,0) ]] evect= [[ (-0.986041,0) (-0.388911,0) ] [ (0.166501,0) (-0.921275,0) ]] matrix2= [[ 1 2 3 ] [ -1.5 2.5 -3.5 ] [ 1.5 -3.5 2.5 ]] determinant = -4.5 openturns-1.9/python/test/t_SquareMatrix_lapack.py000077500000000000000000000027151307543307100225700ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: matrix1 = SquareMatrix(2) matrix1.setName("matrix1") matrix1[0, 0] = 1.0 matrix1[1, 0] = 2.0 matrix1[0, 1] = 5.0 matrix1[1, 1] = 12.0 print("matrix1 = ", matrix1) pt = Point() pt.add(5.0) pt.add(0.0) print("pt = ", pt) result = matrix1.solveLinearSystem(pt) print("result = ", result) determinant = matrix1.computeDeterminant() print("determinant = %.6g" % determinant) ev = matrix1.computeEigenValues() print("ev = ", ev) ev, evect = matrix1.computeEV() print("ev=", ev) print("evect=", evect) print("evect=") print(evect.__str__()) # Check the high dimension determinant computation matrix2 = SquareMatrix(3) matrix2[0, 0] = 1.0 matrix2[0, 1] = 2.0 matrix2[0, 2] = 3.0 matrix2[1, 0] = -1.5 matrix2[1, 1] = 2.5 matrix2[1, 2] = -3.5 matrix2[2, 0] = 1.5 matrix2[2, 1] = -3.5 matrix2[2, 2] = 2.5 print("matrix2=") print(matrix2.__str__()) # Need a specific Python wrapping, e.g returning both value and sign # sign = 0.0 # value = matrix2.computeLogAbsoluteDeterminant(sign) # print "log(|det|)=", value, ", sign=", sign determinant = matrix2.computeDeterminant() print("determinant = %.6g" % determinant) except: import sys print("t_SquareMatrixLapack_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SquareMatrix_std.expout000066400000000000000000000053141307543307100230160ustar00rootroot00000000000000test number zero : default constructor and string converter squareMatrix0 = class=SquareMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter squareMatrix1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number two : copy constructor and string converter squareMatrix2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,2,3,4] test number three : get dimensions methods squareMatrix1's nbRows = 2 squareMatrix1's nbColumns = 2 test number five : assignment method test number six : transposition method squareMatrix1 transposed = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] squareMatrix1 transposed = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,2,4] test number seven : addition method sum1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,5,5,8] sum1 equals sum2 = True test number eight : substraction method diff = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,-1,1,0] test number nine : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,14,14,20] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,10] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,6,9,12] scalprod1 equals scalprod2 = True scaldiv1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,0.666667,1,1.33333] scaldiv1 equals scaldiv2 = True test number twelve : isEmpty method squareMatrix0 is empty = True squareMatrix1 is empty = False squareMatrix5 is empty = True openturns-1.9/python/test/t_SquareMatrix_std.py000077500000000000000000000104131307543307100221210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER */ print("test number zero : default constructor and string converter") # Default constructor */ squareMatrix0 = SquareMatrix() # String converter */ print("squareMatrix0 = ", repr(squareMatrix0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER # */ print( "test number one : constructor with size, operator() and string converter") # Constructor with size */ squareMatrix1 = SquareMatrix(2) # Check operator() methods */ squareMatrix1[0, 0] = 1. squareMatrix1[1, 0] = 2. squareMatrix1[0, 1] = 3. squareMatrix1[1, 1] = 4. # String converter */ print("squareMatrix1 = ", repr(squareMatrix1)) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER */ print("test number two : copy constructor and string converter") # Copy constructor */ squareMatrix2 = SquareMatrix(squareMatrix1) # String converter */ print("squareMatrix2 = ", repr(squareMatrix2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS */ print("test number three : get dimensions methods") # Get dimension methods */ print("squareMatrix1's nbRows = ", squareMatrix1.getNbRows()) print("squareMatrix1's nbColumns = ", squareMatrix1.getNbColumns()) # TEST NUMBER FIVE : ASSIGNMENT METHOD */ print("test number five : assignment method") # Assignment method */ # non sense with python # TEST NUMBER SIX : TRANSPOSITION METHOD */ print("test number six : transposition method") # Check transpose method */ squareMatrix4 = squareMatrix1.transpose() print("squareMatrix1 transposed = ", repr(squareMatrix4)) print("squareMatrix1 transposed = ", repr(squareMatrix1.transpose())) # TEST NUMBER SEVEN : ADDITION METHOD */ print("test number seven : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator */ sum1 = squareMatrix1 + squareMatrix4 sum2 = squareMatrix4 + squareMatrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", (sum1 == sum2)) # TEST NUMBER EIGHT : SUBSTRACTION METHOD */ print("test number eight : substraction method") # Check substraction method */ diff = squareMatrix1 - squareMatrix4 print("diff = ", repr(diff)) # TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD */ print("test number nine : matrix multiplication method") # Check multiplication method */ prod = squareMatrix1 * squareMatrix4 print("prod = ", repr(prod)) # TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD */ print("test number ten : multiplication with a numerical point method") # Create the numerical point */ pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method */ ptResult = squareMatrix1 * pt print("ptResult = ", repr(ptResult)) # TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR # METHODS */ print( "test number eleven : multiplication and division by a numerical scalar methods") # Check the multiplication method */ s = 3. scalprod1 = squareMatrix1 * s # bug PYTHON scalprod2 = s * matrix1 scalprod2 = squareMatrix1 * s print("scalprod1 = ", repr(scalprod1)) print("scalprod2 = ", repr(scalprod2)) print("scalprod1 equals scalprod2 = ", (scalprod1 == scalprod2)) # Check the division method */ scaldiv1 = squareMatrix1 / s scaldiv2 = squareMatrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # TEST NUMBER TWELVE : ISEMPTY METHOD */ print("test number twelve : isEmpty method") # Check method isEmpty */ squareMatrix5 = SquareMatrix() print("squareMatrix0 is empty = ", squareMatrix0.isEmpty()) print("squareMatrix1 is empty = ", squareMatrix1.isEmpty()) print("squareMatrix5 is empty = ", squareMatrix5.isEmpty()) except: import sys print("t_SquareMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Staircase_std.expout000066400000000000000000000000001307543307100222720ustar00rootroot00000000000000openturns-1.9/python/test/t_Staircase_std.py000077500000000000000000000042341307543307100214160ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 1 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 R = CorrelationMatrix(dim) distribution1 = Normal(meanPoint, sigma, R) # Instanciate another distribution object meanPoint[0] = -1.5 sigma[0] = 4.0 distribution2 = Normal(meanPoint, sigma, R) # Test for sampling size = 200 nPoints = 20 sample1 = distribution1.getSample(size) sample2 = distribution2.getSample(size) # Construct empirical CDF for each sample data1 = Sample(nPoints, 2) data2 = Sample(nPoints, 2) cursor1 = Point(2) cursor2 = Point(2) for i in range(nPoints): cursor1[0] = 13. * i / nPoints - 6.5 count1 = 0. cursor2[0] = 24. * i / nPoints - 13.5 count2 = 0. for j in range(size): if(sample1[j, 0] < cursor1[0]): count1 += 1. if(sample2[j, 0] < cursor2[0]): count2 += 1. cursor1[1] = count1 / size cursor2[1] = count2 / size data1[i] = cursor1 data2[i] = cursor2 # Create an empty graph myGraph = Graph("Some curves", "x1", "x2", True, "bottomright") # Create the first staircase myStaircase1 = Staircase(data1, "blue", "solid", "s", "") myStaircase1b = Staircase(myStaircase1) myStaircase1b.setPattern("S") myStaircase1b.setColor("green") myStaircase1b.setLineStyle("dashed") myStaircase1b.setLegend("eCDF1b, pat=S") # Then, draw it myGraph.add(myStaircase1) myGraph.add(myStaircase1b) myGraph.draw("Graph_Staircase_a_OT.png") # Check that the correct files have been generated by computing their # checksum # Create the second staircase myStaircase2 = Staircase(data2, "red", "dashed", "S", "eCDF2, pat=S") # Add it to the graph and draw everything myGraph.add(myStaircase2) myGraph.draw("Graph_Staircase_b_OT.png") except: import sys print("t_Staircase_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StandardDistributionPolynomialFactory_std.expout000066400000000000000000000356011307543307100301270ustar00rootroot00000000000000polynomialFactory( Laplace = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Laplace name=Laplace dimension=1 lambda=1 mu=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-2]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,2] isElliptical=true ) Laplace polynomial( 0 )= 1 Laplace polynomial( 1 )= 0.707107 * X Laplace polynomial( 2 )= -0.447214 + 0.223607 * X^2 Laplace polynomial( 3 )= -0.57735 * X + 0.0481125 * X^3 Laplace polynomial( 4 )= 0.329735 - 0.25646 * X^2 + 0.00763275 * X^4 Laplace polynomial( 4 ) roots= [-5.67987,-1.15719,1.15719,5.67987] Laplace polynomial( 4 ) nodes= [-5.67987,-1.15719,1.15719,5.67987] and weights= [0.0106869,0.489313,0.489313,0.0106869] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Logistic = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Logistic name=Logistic dimension=1 alpha=0 beta=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-3.28987]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,3.28987] isElliptical=true ) Logistic polynomial( 0 )= 1 Logistic polynomial( 1 )= 0.551329 * X Logistic polynomial( 2 )= -0.559017 + 0.169921 * X^2 Logistic polynomial( 3 )= -0.491265 * X + 0.035554 * X^3 Logistic polynomial( 4 )= 0.421875 - 0.205809 * X^2 + 0.00561421 * X^4 Logistic polynomial( 4 ) roots= [-5.87189,-1.47628,1.47628,5.87189] Logistic polynomial( 4 ) nodes= [-5.87189,-1.47628,1.47628,5.87189] and weights= [0.0171899,0.48281,0.48281,0.0171899] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Normal = class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=HermiteFactory measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] ) Normal polynomial( 0 )= 1 Normal polynomial( 1 )= X Normal polynomial( 2 )= -0.707107 + 0.707107 * X^2 Normal polynomial( 3 )= -1.22474 * X + 0.408248 * X^3 Normal polynomial( 4 )= 0.612372 - 1.22474 * X^2 + 0.204124 * X^4 Normal polynomial( 4 ) roots= [-2.33441,-0.741964,0.741964,2.33441] Normal polynomial( 4 ) nodes= [-2.33441,-0.741964,0.741964,2.33441] and weights= [0.0458759,0.454124,0.454124,0.0458759] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Normal = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Normal name=Normal dimension=1 mean=class=Point name=Unnamed dimension=1 values=[1] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1,0],class=Point name=Unnamed dimension=3 values=[1,-1,-1]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1] isElliptical=true ) Normal polynomial( 0 )= 1 Normal polynomial( 1 )= -1 + X Normal polynomial( 2 )= -1.41421 * X + 0.707107 * X^2 Normal polynomial( 3 )= 0.816497 + 2.89382e-11 * X - 1.22474 * X^2 + 0.408248 * X^3 Normal polynomial( 4 )= -0.408248 + 1.63299 * X + 4.02503e-10 * X^2 - 0.816497 * X^3 + 0.204124 * X^4 Normal polynomial( 4 ) roots= [-1.33441,0.258036,1.74196,3.33441] Normal polynomial( 4 ) nodes= [-1.33441,0.258036,1.74196,3.33441] and weights= [0.0458759,0.454124,0.454124,0.0458759] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Rayleigh = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Rayleigh name=Rayleigh dimension=1 sigma=1 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1.25331,0],class=Point name=Unnamed dimension=3 values=[1,-1.66678,-0.429204]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.429204] isElliptical=false ) Rayleigh polynomial( 0 )= 1 Rayleigh polynomial( 1 )= -1.91306 + 1.5264 * X Rayleigh polynomial( 2 )= 2.84565 - 5.00639 * X + 1.71446 * X^2 Rayleigh polynomial( 3 )= -3.78384 + 10.859 * X - 7.93394 * X^2 + 1.60694 * X^3 Rayleigh polynomial( 4 )= 4.72402 - 19.4426 * X + 22.5685 * X^2 - 9.59251 * X^3 + 1.32173 * X^4 Rayleigh polynomial( 4 ) roots= [0.396121,1.17673,2.20107,3.48361] Rayleigh polynomial( 4 ) nodes= [0.396121,1.17673,2.20107,3.48361] and weights= [0.227998,0.538465,0.221578,0.0119592] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Student = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Student name=Student dimension=1 nu=22 mean=class=Point name=Unnamed dimension=1 values=[0] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,0,0],class=Point name=Unnamed dimension=3 values=[1,0,-1.1]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1.1] isElliptical=true ) Student polynomial( 0 )= 1 Student polynomial( 1 )= 0.953463 * X Student polynomial( 2 )= -0.654654 + 0.59514 * X^2 Student polynomial( 3 )= -1.01929 * X + 0.277989 * X^3 Student polynomial( 4 )= 0.51299 - 0.839438 * X^2 + 0.10175 * X^4 Student polynomial( 4 ) roots= [-2.75415,-0.815266,0.815266,2.75415] Student polynomial( 4 ) nodes= [-2.75415,-0.815266,0.815266,2.75415] and weights= [0.0314522,0.468548,0.468548,0.0314522] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Triangular = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Triangular name=Triangular dimension=1 a=-1 m=0.3 b=1 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.1,0],class=Point name=Unnamed dimension=3 values=[1,0.0153398,-0.171667]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.171667] isElliptical=false ) Triangular polynomial( 0 )= 1 Triangular polynomial( 1 )= -0.241355 + 2.41355 * X Triangular polynomial( 2 )= -0.877334 - 0.428839 * X + 5.06542 * X^2 Triangular polynomial( 3 )= 0.259575 - 4.13679 * X - 1.01753 * X^2 + 10.3656 * X^3 Triangular polynomial( 4 )= 0.878133 + 0.925615 * X - 13.5192 * X^2 - 1.99648 * X^3 + 21.1809 * X^4 Triangular polynomial( 4 ) roots= [-0.742936,-0.235772,0.310364,0.762603] Triangular polynomial( 4 ) nodes= [-0.742936,-0.235772,0.310364,0.762603] and weights= [0.0810886,0.334646,0.456437,0.127828] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Uniform = class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=LegendreFactory measure=class=Uniform name=Uniform dimension=1 a=-1 b=1 ) Uniform polynomial( 0 )= 1 Uniform polynomial( 1 )= 1.73205 * X Uniform polynomial( 2 )= -1.11803 + 3.3541 * X^2 Uniform polynomial( 3 )= -3.96863 * X + 6.61438 * X^3 Uniform polynomial( 4 )= 1.125 - 11.25 * X^2 + 13.125 * X^4 Uniform polynomial( 4 ) roots= [-0.861136,-0.339981,0.339981,0.861136] Uniform polynomial( 4 ) nodes= [-0.861136,-0.339981,0.339981,0.861136] and weights= [0.173927,0.326073,0.326073,0.173927] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Uniform = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Uniform name=Uniform dimension=1 a=-1 b=3 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-1,0],class=Point name=Unnamed dimension=3 values=[1,-1,-1.33333]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,1.33333] isElliptical=true ) Uniform polynomial( 0 )= 1 Uniform polynomial( 1 )= -0.866025 + 0.866025 * X Uniform polynomial( 2 )= -0.279508 - 1.67705 * X + 0.838525 * X^2 Uniform polynomial( 3 )= 1.15752 + 0.496078 * X - 2.48039 * X^2 + 0.826797 * X^3 Uniform polynomial( 4 )= -0.867188 + 2.34375 * X + 2.10938 * X^2 - 3.28125 * X^3 + 0.820313 * X^4 Uniform polynomial( 4 ) roots= [-0.722273,0.320038,1.67996,2.72227] Uniform polynomial( 4 ) nodes= [-0.722273,0.320038,1.67996,2.72227] and weights= [0.173927,0.326073,0.326073,0.173927] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Weibull = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Weibull name=Weibull dimension=1 alpha=1 beta=3 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.89298,0],class=Point name=Unnamed dimension=3 values=[1,-0.947537,-0.105333]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.105333] isElliptical=false ) Weibull polynomial( 0 )= 1 Weibull polynomial( 1 )= -2.75144 + 3.08119 * X Weibull polynomial( 2 )= 5.3921 - 13.3967 * X + 7.27876 * X^2 Weibull polynomial( 3 )= -8.91794 + 36.5275 * X - 42.8504 * X^2 + 14.9827 * X^3 Weibull polynomial( 4 )= 13.3264 - 79.2309 * X + 149.529 * X^2 - 111.023 * X^3 + 28.1044 * X^4 Weibull polynomial( 4 ) roots= [0.315842,0.737023,1.19993,1.69759] Weibull polynomial( 4 ) nodes= [0.315842,0.737023,1.19993,1.69759] and weights= [0.109605,0.491205,0.364361,0.03483] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Beta = class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=JacobiFactory alpha=1 beta=0 measure=class=Beta name=Beta dimension=1 r=1 t=3 a=-1 b=1 ) Beta polynomial( 0 )= 1 Beta polynomial( 1 )= 0.707107 + 2.12132 * X Beta polynomial( 2 )= -0.866025 + 1.73205 * X + 4.33013 * X^2 Beta polynomial( 3 )= -0.75 - 3.75 * X + 3.75 * X^2 + 8.75 * X^3 Beta polynomial( 4 )= 0.838525 - 3.3541 * X - 11.7394 * X^2 + 7.82624 * X^3 + 17.609 * X^4 Beta polynomial( 4 ) roots= [-0.885792,-0.446314,0.167181,0.72048] Beta polynomial( 4 ) nodes= [-0.885792,-0.446314,0.167181,0.72048] and weights= [0.271014,0.406929,0.259695,0.0623619] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Beta = class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 ) Beta polynomial( 0 )= 1 Beta polynomial( 1 )= 1.41421 * X Beta polynomial( 2 )= -1.41421 + 2.82843 * X^2 Beta polynomial( 3 )= -4.24264 * X + 5.65685 * X^3 Beta polynomial( 4 )= 1.41421 - 11.3137 * X^2 + 11.3137 * X^4 Beta polynomial( 4 ) roots= [-0.92388,-0.382683,0.382683,0.92388] Beta polynomial( 4 ) nodes= [-0.92388,-0.382683,0.382683,0.92388] and weights= [0.25,0.25,0.25,0.25] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Beta = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Beta name=Beta dimension=1 r=0.5 t=1 a=-2 b=3 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.5,0],class=Point name=Unnamed dimension=3 values=[1,-0.5,-3.125]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,3.125] isElliptical=true ) Beta polynomial( 0 )= 1 Beta polynomial( 1 )= -0.282843 + 0.565685 * X Beta polynomial( 2 )= -1.30108 - 0.452548 * X + 0.452548 * X^2 Beta polynomial( 3 )= 0.803273 - 1.42553 * X - 0.543058 * X^2 + 0.362039 * X^3 Beta polynomial( 4 )= 0.979767 + 1.66538 * X - 1.37575 * X^2 - 0.579262 * X^3 + 0.289631 * X^4 Beta polynomial( 4 ) roots= [-1.8097,-0.456709,1.45671,2.8097] Beta polynomial( 4 ) nodes= [-1.8097,-0.456709,1.45671,2.8097] and weights= [0.25,0.25,0.25,0.25] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Gamma = class=StandardDistributionPolynomialFactory hasSpecificFamily=false orthonormalization algorithm=class=OrthonormalizationAlgorithm implementation=class=AdaptiveStieltjesAlgorithm measure=class=Gamma name=Gamma dimension=1 k=1 lambda=3 gamma=0 monicRecurrenceCoefficients=[class=Point name=Unnamed dimension=3 values=[1,-0.333333,0],class=Point name=Unnamed dimension=3 values=[1,-1,-0.111111]] monicSquaredNorms=class=Point name=Unnamed dimension=2 values=[1,0.111111] isElliptical=false ) Gamma polynomial( 0 )= 1 Gamma polynomial( 1 )= -1 + 3 * X Gamma polynomial( 2 )= 1 - 6 * X + 4.5 * X^2 Gamma polynomial( 3 )= -1 + 9 * X - 13.5 * X^2 + 4.5 * X^3 Gamma polynomial( 4 )= 1 - 12 * X + 27.0001 * X^2 - 18.0001 * X^3 + 3.37502 * X^4 Gamma polynomial( 4 ) roots= [0.107516,0.58192,1.51221,3.13169] Gamma polynomial( 4 ) nodes= [0.107516,0.58192,1.51221,3.13169] and weights= [0.603154,0.357419,0.0388879,0.000539296] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] polynomialFactory( Arcsine = class=StandardDistributionPolynomialFactory hasSpecificFamily=true specificFamily=class=OrthogonalUniVariatePolynomialFamily implementation=class=ChebychevFactory measure=class=Arcsine name=Arcsine dimension=1 a=-1 b=1 ) Arcsine polynomial( 0 )= 1 Arcsine polynomial( 1 )= 1.41421 * X Arcsine polynomial( 2 )= -1.41421 + 2.82843 * X^2 Arcsine polynomial( 3 )= -4.24264 * X + 5.65685 * X^3 Arcsine polynomial( 4 )= 1.41421 - 11.3137 * X^2 + 11.3137 * X^4 Arcsine polynomial( 4 ) roots= [-0.92388,-0.382683,0.382683,0.92388] Arcsine polynomial( 4 ) nodes= [-0.92388,-0.382683,0.382683,0.92388] and weights= [0.25,0.25,0.25,0.25] M= 5x5 [[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ]] openturns-1.9/python/test/t_StandardDistributionPolynomialFactory_std.py000077500000000000000000000043301307543307100272310ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) def clean(polynomial): coefficients = polynomial.getCoefficients() for i in range(coefficients.getDimension()): if abs(coefficients[i]) < 1.0e-12: coefficients[i] = 0.0 return ot.UniVariatePolynomial(coefficients) iMax = 5 distributionCollection = [ot.Laplace(1.0, 0.0), ot.Logistic(0.0, 1.0), ot.Normal(0.0, 1.0), ot.Normal(1.0, 1.0), ot.Rayleigh(1.0), ot.Student(22.0), ot.Triangular(-1.0, 0.3, 1.0), ot.Uniform(-1.0, 1.0), ot.Uniform(-1.0, 3.0), ot.Weibull(1.0, 3.0), ot.Beta(1.0, 3.0, -1.0, 1.0), ot.Beta(0.5, 1.0, -1.0, 1.0), ot.Beta(0.5, 1.0, -2.0, 3.0), ot.Gamma(1.0, 3.0), ot.Arcsine()] for n in range(len(distributionCollection)): distribution = distributionCollection[n] name = distribution.getClassName() polynomialFactory = ot.StandardDistributionPolynomialFactory( ot.AdaptiveStieltjesAlgorithm(distribution)) print("polynomialFactory(", name, "=", polynomialFactory, ")") for i in range(iMax): print(name, " polynomial(", i, ")=", clean(polynomialFactory.build(i))) roots = polynomialFactory.getRoots(iMax - 1) print(name, " polynomial(", iMax - 1, ") roots=", roots) nodes, weights = polynomialFactory.getNodesAndWeights(iMax - 1) print(name, " polynomial(", iMax - 1, ") nodes=", nodes, " and weights=", weights) M = ot.SymmetricMatrix(iMax) for i in range(iMax): pI = polynomialFactory.build(i) for j in range(i + 1): pJ = polynomialFactory.build(j) def kernel(x): return [pI(x[0]) * pJ(x[0]) * distribution.computePDF(x)] M[i, j] = ot.GaussKronrod().integrate( ot.PythonFunction(1, 1, kernel), distribution.getRange())[0] print("M=\n", M.clean(1.0e-6)) openturns-1.9/python/test/t_StandardEvent_std.expout000066400000000000000000000032341307543307100231320ustar00rootroot00000000000000myStandardEvent= class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[E,F,L,I,d] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[E,F,L,I] outputVariablesNames=[d] formulas=[-F*L^3/(3*E*I)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0,0,0,0] sigma=class=Point name=Unnamed dimension=4 values=[1,1,1,1] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] operator=class=Less name=Unnamed threshold=1 myStandardEvent (as a RandomVector) realization = class=Point name=Unnamed dimension=1 values=[1] myStandardEvent realization= class=Point name=Unnamed dimension=1 values=[1] myStandardEvent sample= class=Sample name=EventRandomVector sample implementation=class=SampleImplementation name=EventRandomVector sample size=10 dimension=1 description=[d] data=[[1],[1],[1],[1],[1],[0],[1],[1],[1],[1]] Failure probability (Event)=0.873500 Failure probability (StandardEvent)=0.864500 Error trying to build myStandardEvent3 openturns-1.9/python/test/t_StandardEvent_std.py000077500000000000000000000055221307543307100222430ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # We create a numerical math function */ myFunction = Function( ["E", "F", "L", "I"], ["d"], ["-F*L^3/(3*E*I)"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension dim myDistribution = Normal(dim) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create an StandardEvent from this RandomVector myStandardEvent = StandardEvent(output, Less(), 1.0) print("myStandardEvent=", myStandardEvent) # We compute one realization of the event # E = (Y=f(X), operator, threshold) # E as a RandomVector : Y print("myStandardEvent (as a RandomVector) realization =", repr(RandomVector.getRealization(myStandardEvent))) # E as a Bernoulli print("myStandardEvent realization=", repr( myStandardEvent.getRealization())) # We compute a sample of the event print("myStandardEvent sample=", repr(myStandardEvent.getSample(10))) # Build a standard event based on an event R = CorrelationMatrix(dim) for i in range(dim - 1): R[i + 1, i] = 0.5 mean = Point(dim, 0.0) sigma = Point(dim, 1.0) myDistribution2 = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect2 = RandomVector(myDistribution2) # We create a composite random vector output2 = RandomVector(myFunction, vect2) # We create an Event from this RandomVector */ myEvent = Event(output2, Less(), 1.0) # Create a StandardEvent based on this Event */ stdEvent = StandardEvent(myEvent) # Check if the StandardEvent is really a StandardEvent */ # Get a sample from the second antecedent of the standard event */ size = 2000 # Check if the failure probabilities are the same */ print("Failure probability (Event)=%.6f" % myEvent.getSample(size).computeMean()[0]) print("Failure probability (StandardEvent)=%.6f" % stdEvent.getSample(size).computeMean()[0]) x = [[1.0, 0.5, 1.0, 0.5], [2.0, 1.0, 2.0, 1.0], [3.0, 1.5, 3.0, 1.5]] p = [0.3, 0.325, 0.375] myDistribution3 = UserDefined(x, p) # We create a 'usual' RandomVector from the Distribution */ vect3 = RandomVector(myDistribution3) # We create a composite random vector */ output3 = RandomVector(myFunction, vect3) # We try to create a StandardEvent from this RandomVector */ try: myStandardEvent3 = StandardEvent(output3, Less(), 1.0) except: print("Error trying to build myStandardEvent3") except: import sys print("t_StandardEvent_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StationaryCovarianceModelFactory_std.expout000066400000000000000000000104451307543307100270330ustar00rootroot00000000000000Covariance C( 0.05 ) : evaluation = 0.952813 model = 0.951229 Covariance C( 0.15 ) : evaluation = 0.851701 model = 0.860708 Covariance C( 0.25 ) : evaluation = 0.774636 model = 0.778801 Covariance C( 0.35 ) : evaluation = 0.69505 model = 0.704688 Covariance C( 0.45 ) : evaluation = 0.629322 model = 0.637628 Covariance C( 0.55 ) : evaluation = 0.563779 model = 0.57695 Covariance C( 0.65 ) : evaluation = 0.509125 model = 0.522046 Covariance C( 0.75 ) : evaluation = 0.455973 model = 0.472367 Covariance C( 0.85 ) : evaluation = 0.411085 model = 0.427415 Covariance C( 0.95 ) : evaluation = 0.366338 model = 0.386741 Covariance C( 1.05 ) : evaluation = 0.328287 model = 0.349938 Covariance C( 1.15 ) : evaluation = 0.292459 model = 0.316637 Covariance C( 1.25 ) : evaluation = 0.263724 model = 0.286505 Covariance C( 1.35 ) : evaluation = 0.235846 model = 0.25924 Covariance C( 1.45 ) : evaluation = 0.212404 model = 0.23457 Covariance C( 1.55 ) : evaluation = 0.190039 model = 0.212248 Covariance C( 1.65 ) : evaluation = 0.172422 model = 0.19205 Covariance C( 1.75 ) : evaluation = 0.155391 model = 0.173774 Covariance C( 1.85 ) : evaluation = 0.142235 model = 0.157237 Covariance C( 1.95 ) : evaluation = 0.129403 model = 0.142274 Covariance C( 2.05 ) : evaluation = 0.118796 model = 0.128735 Covariance C( 2.15 ) : evaluation = 0.107692 model = 0.116484 Covariance C( 2.25 ) : evaluation = 0.0995027 model = 0.105399 Covariance C( 2.35 ) : evaluation = 0.0911084 model = 0.0953692 Covariance C( 2.45 ) : evaluation = 0.0844851 model = 0.0862936 Covariance C( 2.55 ) : evaluation = 0.0779474 model = 0.0780817 Covariance C( 2.65 ) : evaluation = 0.0730345 model = 0.0706512 Covariance C( 2.75 ) : evaluation = 0.0668881 model = 0.0639279 Covariance C( 2.85 ) : evaluation = 0.0620959 model = 0.0578443 Covariance C( 2.95 ) : evaluation = 0.0563529 model = 0.0523397 Covariance C( 3.05 ) : evaluation = 0.052184 model = 0.0473589 Covariance C( 3.15 ) : evaluation = 0.0479696 model = 0.0428521 Covariance C( 3.25 ) : evaluation = 0.0455056 model = 0.0387742 Covariance C( 3.35 ) : evaluation = 0.0420295 model = 0.0350844 Covariance C( 3.45 ) : evaluation = 0.0390671 model = 0.0317456 Covariance C( 3.55 ) : evaluation = 0.0356304 model = 0.0287246 Covariance C( 3.65 ) : evaluation = 0.0338527 model = 0.0259911 Covariance C( 3.75 ) : evaluation = 0.0316484 model = 0.0235177 Covariance C( 3.85 ) : evaluation = 0.0299391 model = 0.0212797 Covariance C( 3.95 ) : evaluation = 0.0270063 model = 0.0192547 Covariance C( 4.05 ) : evaluation = 0.0248966 model = 0.0174224 Covariance C( 4.15 ) : evaluation = 0.0224647 model = 0.0157644 Covariance C( 4.25 ) : evaluation = 0.0209557 model = 0.0142642 Covariance C( 4.35 ) : evaluation = 0.0184385 model = 0.0129068 Covariance C( 4.45 ) : evaluation = 0.0164608 model = 0.0116786 Covariance C( 4.55 ) : evaluation = 0.013993 model = 0.0105672 Covariance C( 4.65 ) : evaluation = 0.0126192 model = 0.0095616 Covariance C( 4.75 ) : evaluation = 0.011048 model = 0.0086517 Covariance C( 4.85 ) : evaluation = 0.0100203 model = 0.00782838 Covariance C( 4.95 ) : evaluation = 0.00859069 model = 0.00708341 Covariance C( 5.05 ) : evaluation = 0.00806562 model = 0.00640933 Covariance C( 5.15 ) : evaluation = 0.00721709 model = 0.0057994 Covariance C( 5.25 ) : evaluation = 0.00722149 model = 0.00524752 Covariance C( 5.35 ) : evaluation = 0.0066365 model = 0.00474815 Covariance C( 5.45 ) : evaluation = 0.00684391 model = 0.0042963 Covariance C( 5.55 ) : evaluation = 0.00640845 model = 0.00388746 Covariance C( 5.65 ) : evaluation = 0.00657612 model = 0.00351752 Covariance C( 5.75 ) : evaluation = 0.00607451 model = 0.00318278 Covariance C( 5.85 ) : evaluation = 0.00621686 model = 0.0028799 Covariance C( 5.95 ) : evaluation = 0.0056124 model = 0.00260584 Covariance C( 6.05 ) : evaluation = 0.00513386 model = 0.00235786 Covariance C( 6.15 ) : evaluation = 0.00374051 model = 0.00213348 Covariance C( 6.25 ) : evaluation = 0.00241149 model = 0.00193045 Covariance C( 6.35 ) : evaluation = 0.00056868 model = 0.00174675 openturns-1.9/python/test/t_StationaryCovarianceModelFactory_std.py000077500000000000000000000026211307543307100261370ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Dimension of the input model # Size of the TimeGrid # dimension parameter dimension = 1 # Amplitude values amplitude = Point(dimension, 1.00) # Scale values scale = Point(dimension, 1.0) size = 128 timeGrid = RegularGrid(0., 0.1, size) # Cauchy model model = ExponentialCauchy(scale, amplitude) myProcess = SpectralGaussianProcess(model, timeGrid) # Create a sample of size N = 1000 sample = myProcess.getSample(1000) # StationaryCovarianceModelFactory using default parameter - Factory # initiate myFactory = StationaryCovarianceModelFactory() # Build a UserDefinedCovarianceModel using the Wellch method myCovarianceModel = myFactory.buildAsUserDefinedStationaryCovarianceModel( sample) tg = myCovarianceModel.getTimeGrid() # Get the time grid of the model for i in range(tg.getN()): t = tg.getValue(i) estimatedValue = myCovarianceModel(t)[0, 0] modelValue = model.computeCovariance(t)[0, 0] print("Covariance C( %.6g" % t, ") : ", " evaluation = %.6g" % estimatedValue, " model = %.6g" % modelValue) except: import sys print("t_StationaryCovarianceModelFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StrongMaximumTest_other.expout000066400000000000000000000101131307543307100243630ustar00rootroot00000000000000myTest= class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.6)*(x1-0.6)-x2*x2] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=40 standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[-5.72456,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999 designPointVicinity=0.791343 pointNumber=44 deltaEpsilon=0.131837 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Beta = 5.724555 Discretised sphere radius = 7.233974 PointNumber = 44 DesignPointVicinity Angle (rad)= 0.657794 DesignPointVicinity Angle (deg)= 37.688799 Near Design Point Verifying Event Points Number = 4 Near Design Point Violating Event Points Number = 3 Far Design Point Verifying Event Points Number = 2 Far Design Point Violating Event Points Number = 35 ////// importanceLevel=0.010000 accuracyLevel=2.000000 confidenceLevel=0.999000 standardSpaceDesignPoint=[-5.724555 ,0.000000 ] pseudoStandardSpaceDesignPoint=[6.924555 ,0.000000 ] NearDesignPointVerifyingEventPointsSample=[[-7.216712,-0.499444];[-7.058323,1.584443];[-7.142598,1.146157];[-6.860716,-2.293679]] NearDesignPointViolatingEventPoints=[[-6.288905,3.574921];[-6.325828,3.509171];[-6.311157,-3.535489]] FarDesignPointVerifyingEventPoints=[[7.164065,-1.003270];[7.221496,-0.424714]] FarDesignPointViolatingEventPoints=[[3.132201,-6.520713];[-1.220016,-7.130354];[-5.661948,4.502525];[4.243788,5.858383];[-5.579305,-4.604534];[6.992651,-1.852894];[1.399343,7.097339];[0.647379,-7.204949];[5.170736,5.059038];[-1.734690,7.022908];[5.830928,4.281432];[-2.471712,6.798605];[6.322066,3.515945];[4.654328,-5.537835];[-3.280162,-6.447551];[0.939690,7.172682];[-2.460686,6.802603];[0.476314,7.218276];[5.018775,-5.209825];[0.864982,-7.182074];[5.589826,4.591756];[6.334356,-3.493754];[6.524276,-3.124774];[6.145343,-3.816431];[-2.023000,6.945348];[-3.571769,-6.290695];[0.833737,-7.185768];[6.785146,2.508420];[-4.201128,5.889050];[6.130755,3.839822];[-2.111762,-6.918876];[6.852748,2.317377];[-4.542366,-5.630035];[-0.805734,7.188962];[5.371709,-4.845114]] openturns-1.9/python/test/t_StrongMaximumTest_other.py000077500000000000000000000102241307543307100234750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def printSample(name, sample): oss = name + "=[" for counter in range(sample.getSize()): if (counter != 0): oss += ";" oss += "[" point = sample[counter] for coordinate in range(point.getDimension()): if (coordinate != 0): oss += "," oss += "%.6f" % point[coordinate] oss += "]" oss += "]" return oss try: # We create a numerical math function myFunction = Function( ["x1", "x2"], ["y1"], ["(x1-0.6)*(x1-0.6)-x2*x2"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create a StandardEvent from this RandomVector : RandomVector > 4.0 seuil = 40 myStandardEvent = StandardEvent( output, Greater(), seuil) # We create the design point designPoint = Point(dim, 0.0) C = 0.6 designPoint[0] = - sqrt(seuil) + C # We create the "second" design point pseudoDesignPoint = Point(dim, 0.0) pseudoDesignPoint[0] = sqrt(seuil) + C importanceLevel = 0.01 accuracyLevel = 2 confidenceLevel = 0.999 myTest = StrongMaximumTest( myStandardEvent, designPoint, importanceLevel, accuracyLevel, confidenceLevel) print("myTest=", myTest) myTest.run() print("Beta = %.6f" % designPoint.norm()) print("Discretised sphere radius = %6f" % ( designPoint.norm() * (1 + myTest.getAccuracyLevel() * myTest.getDeltaEpsilon()))) print("PointNumber = ", myTest.getPointNumber()) print("DesignPointVicinity Angle (rad)= %.6f" % acos(myTest.getDesignPointVicinity())) print("DesignPointVicinity Angle (deg)= %.6f" % (acos(myTest.getDesignPointVicinity()) * 180 / pi)) print("Near Design Point Verifying Event Points Number = ", ( myTest.getNearDesignPointVerifyingEventPoints()).getSize()) print("Near Design Point Violating Event Points Number = ", ( myTest.getNearDesignPointViolatingEventPoints()).getSize()) print("Far Design Point Verifying Event Points Number = ", ( myTest.getFarDesignPointVerifyingEventPoints()).getSize()) print("Far Design Point Violating Event Points Number = ", ( myTest.getFarDesignPointViolatingEventPoints()).getSize()) print("//////") # parameters of the test print("importanceLevel=%.6f" % myTest.getImportanceLevel()) print("accuracyLevel=%.6f" % myTest.getAccuracyLevel()) print("confidenceLevel=%.6f" % myTest.getConfidenceLevel()) # design point coordinates print("standardSpaceDesignPoint=[%.6f" % myTest.getStandardSpaceDesignPoint()[ 0], ",%.6f" % myTest.getStandardSpaceDesignPoint()[1], "]") # pseudo design point coordinates print("pseudoStandardSpaceDesignPoint=[%.6f" % pseudoDesignPoint[ 0], ",%.6f" % pseudoDesignPoint[1], "]") # cout of the coordinates of the points of the 4 samples # NearDesignPointVerifyingEventPoints print(printSample("NearDesignPointVerifyingEventPointsSample", myTest.getNearDesignPointVerifyingEventPoints())) # NearDesignPointViolatingEventPoints print(printSample("NearDesignPointViolatingEventPoints", myTest.getNearDesignPointViolatingEventPoints())) # FarDesignPointVerifyingEventPoints print(printSample("FarDesignPointVerifyingEventPoints", myTest.getFarDesignPointVerifyingEventPoints())) # FarDesignPointViolatingEventPoints print(printSample("FarDesignPointViolatingEventPoints", myTest.getFarDesignPointViolatingEventPoints())) # print "myTest (after run())=" , myTest except: import sys print("t_strongMaxTest_other.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StrongMaximumTest_std.expout000066400000000000000000000104421307543307100240410ustar00rootroot00000000000000myTest= class=StrongMaximumTest event=class=Event name=Unnamed implementation=class=EventRandomVector antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2] outputVariablesNames=[y1] formulas=[(x1-0.3)*(x1-0.3)-x2*x2] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=2 mean=class=Point name=Unnamed dimension=2 values=[0,0] sigma=class=Point name=Unnamed dimension=2 values=[1,1] correlationMatrix=class=CorrelationMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,0,1] operator=class=Greater name=Unnamed threshold=10 standardSpaceDesignPoint=class=Point name=Unnamed dimension=2 values=[-2.86228,0] importanceLevel=0.01 accuracyLevel=2 confidenceLevel=0.999999 designPointVicinity=0.522209 pointNumber=54 deltaEpsilon=0.457471 nearDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointVerifyingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointVerifyingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] nearDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] nearDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] farDesignPointViolatingEventPoints=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=2 data=[] farDesignPointViolatingEventValues=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=0 dimension=1 data=[] Beta = 2.862278 Discretised sphere radius = 5.481097 PointNumber = 54 DesignPointVicinity Angle (rad)= 1.021357 DesignPointVicinity Angle (deg)= 58.519460 Near Design Point Verifying Event Points Number = 8 Near Design Point Violating Event Points Number = 6 Far Design Point Verifying Event Points Number = 12 Far Design Point Violating Event Points Number = 28 ////// importanceLevel=0.010000 accuracyLevel=2.000000 confidenceLevel=0.999999 standardSpaceDesignPoint=[-2.862278 ,0.000000 ] pseudoStandardSpaceDesignPoint=[3.462278 ,0.000000 ] NearDesignPointVerifyingEventPointsSample=[[-5.348008,1.200513];[-5.198283,-1.737893];[-5.411862,0.868430];[-5.198736,-1.736538];[-4.765029,2.708675];[-4.793005,2.658857];[-4.781889,-2.678798];[-5.468018,-0.378423]] NearDesignPointViolatingEventPoints=[[-4.162746,-3.565665];[-3.061045,4.546694];[-4.289991,3.411510];[-3.441697,-4.265811];[-4.227374,-3.488801];[-3.183145,4.462063]] FarDesignPointVerifyingEventPoints=[[5.192246,1.755849];[4.645200,2.909388];[5.141025,1.900600];[5.298249,-1.403916];[4.656254,-2.891664];[4.943366,-2.367604];[5.428128,-0.760166];[5.427333,-0.765821];[4.799466,-2.647176];[5.471642,-0.321801];[4.790154,2.663990];[5.043806,-2.145329]] FarDesignPointViolatingEventPoints=[[-2.485340,-4.885233];[0.711992,5.434656];[-1.864433,5.154252];[0.360897,5.469202];[3.802666,-3.947423];[0.655387,-5.441773];[4.235345,3.479119];[3.526529,-4.195952];[4.418025,3.243991];[0.490512,-5.459104];[-1.532803,5.262408];[-2.706287,-4.766385];[0.631713,-5.444572];[1.060266,5.377570];[2.373232,-4.940667];[4.393869,-3.276635];[-1.600057,-5.242350];[3.215468,4.438827];[0.057666,-5.480793];[0.406543,-5.465999];[4.070080,-3.671085];[-0.610495,5.446991];[-0.924392,-5.402585];[3.917806,3.833174];[1.734343,5.199469];[-1.314354,5.321174];[-1.872787,5.151222];[-0.969097,5.394745]] openturns-1.9/python/test/t_StrongMaximumTest_std.py000077500000000000000000000102251307543307100231470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def printSample(name, sample): oss = name + "=[" for counter in range(sample.getSize()): if (counter != 0): oss += ";" oss += "[" point = sample[counter] for coordinate in range(point.getDimension()): if (coordinate != 0): oss += "," oss += "%.6f" % point[coordinate] oss += "]" oss += "]" return oss try: # We create a numerical math function myFunction = Function( ["x1", "x2"], ["y1"], ["(x1-0.3)*(x1-0.3)-x2*x2"]) dim = myFunction.getInputDimension() # We create a normal distribution point of dimension 1 mean = Point(dim, 0.0) sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create a StandardEvent from this RandomVector : RandomVector > 0.0 seuil = 10 myStandardEvent = StandardEvent( output, Greater(), seuil) # We create the design point designPoint = Point(dim, 0.0) C = 0.3 designPoint[0] = - sqrt(seuil) + C # We create the "second" design point pseudoDesignPoint = Point(dim, 0.0) pseudoDesignPoint[0] = sqrt(seuil) + C importanceLevel = 0.01 accuracyLevel = 2 confidenceLevel = 0.999999 myTest = StrongMaximumTest( myStandardEvent, designPoint, importanceLevel, accuracyLevel, confidenceLevel) print("myTest=", myTest) myTest.run() print("Beta = %.6f" % designPoint.norm()) print("Discretised sphere radius = %.6f" % ( designPoint.norm() * (1 + myTest.getAccuracyLevel() * myTest.getDeltaEpsilon()))) print("PointNumber = ", myTest.getPointNumber()) print("DesignPointVicinity Angle (rad)= %.6f" % acos(myTest.getDesignPointVicinity())) print("DesignPointVicinity Angle (deg)= %.6f" % (acos(myTest.getDesignPointVicinity()) * 180 / pi)) print("Near Design Point Verifying Event Points Number = ", ( myTest.getNearDesignPointVerifyingEventPoints()).getSize()) print("Near Design Point Violating Event Points Number = ", ( myTest.getNearDesignPointViolatingEventPoints()).getSize()) print("Far Design Point Verifying Event Points Number = ", ( myTest.getFarDesignPointVerifyingEventPoints()).getSize()) print("Far Design Point Violating Event Points Number = ", ( myTest.getFarDesignPointViolatingEventPoints()).getSize()) print("//////") # parameters of the test print("importanceLevel=%.6f" % myTest.getImportanceLevel()) print("accuracyLevel=%.6f" % myTest.getAccuracyLevel()) print("confidenceLevel=%.6f" % myTest.getConfidenceLevel()) # design point coordinates print("standardSpaceDesignPoint=[%.6f" % myTest.getStandardSpaceDesignPoint()[ 0], ",%.6f" % myTest.getStandardSpaceDesignPoint()[1], "]") # pseudo design point coordinates print("pseudoStandardSpaceDesignPoint=[%.6f" % pseudoDesignPoint[ 0], ",%.6f" % pseudoDesignPoint[1], "]") # cout of the coordinates of the points of the 4 samples # NearDesignPointVerifyingEventPoints print(printSample("NearDesignPointVerifyingEventPointsSample", myTest.getNearDesignPointVerifyingEventPoints())) # NearDesignPointViolatingEventPoints print(printSample("NearDesignPointViolatingEventPoints", myTest.getNearDesignPointViolatingEventPoints())) # FarDesignPointVerifyingEventPoints print(printSample("FarDesignPointVerifyingEventPoints", myTest.getFarDesignPointVerifyingEventPoints())) # FarDesignPointViolatingEventPoints print(printSample("FarDesignPointViolatingEventPoints", myTest.getFarDesignPointViolatingEventPoints())) # print "myTest (after run())=" , myTest except: import sys print("t_strongMaxTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StrongMaximumTest_tabulatedValues.expout000066400000000000000000000727461307543307100264130ustar00rootroot00000000000000dimension = 2 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3.000000 0.010000 1.500000 0.900000 0.422453 13.000000 3.000000 0.010000 1.500000 0.950000 0.422453 17.000000 3.000000 0.010000 1.500000 0.990000 0.422453 26.000000 3.000000 0.010000 2.000000 0.900000 0.422453 9.000000 3.000000 0.010000 2.000000 0.950000 0.422453 12.000000 3.000000 0.010000 2.000000 0.990000 0.422453 19.000000 3.000000 0.010000 4.000000 0.900000 0.422453 6.000000 3.000000 0.010000 4.000000 0.950000 0.422453 8.000000 3.000000 0.010000 4.000000 0.990000 0.422453 12.000000 3.000000 0.050000 1.500000 0.900000 0.290627 15.000000 3.000000 0.050000 1.500000 0.950000 0.290627 19.000000 3.000000 0.050000 1.500000 0.990000 0.290627 30.000000 3.000000 0.050000 2.000000 0.900000 0.290627 11.000000 3.000000 0.050000 2.000000 0.950000 0.290627 14.000000 3.000000 0.050000 2.000000 0.990000 0.290627 21.000000 3.000000 0.050000 4.000000 0.900000 0.290627 7.000000 3.000000 0.050000 4.000000 0.950000 0.290627 9.000000 3.000000 0.050000 4.000000 0.990000 0.290627 13.000000 3.000000 0.100000 1.500000 0.900000 0.229506 16.000000 3.000000 0.100000 1.500000 0.950000 0.229506 21.000000 3.000000 0.100000 1.500000 0.990000 0.229506 32.000000 3.000000 0.100000 2.000000 0.900000 0.229506 12.000000 3.000000 0.100000 2.000000 0.950000 0.229506 15.000000 3.000000 0.100000 2.000000 0.990000 0.229506 23.000000 3.000000 0.100000 4.000000 0.900000 0.229506 7.000000 3.000000 0.100000 4.000000 0.950000 0.229506 9.000000 3.000000 0.100000 4.000000 0.990000 0.229506 14.000000 4.000000 0.010000 1.500000 0.900000 0.255248 16.000000 4.000000 0.010000 1.500000 0.950000 0.255248 20.000000 4.000000 0.010000 1.500000 0.990000 0.255248 31.000000 4.000000 0.010000 2.000000 0.900000 0.255248 11.000000 4.000000 0.010000 2.000000 0.950000 0.255248 14.000000 4.000000 0.010000 2.000000 0.990000 0.255248 22.000000 4.000000 0.010000 4.000000 0.900000 0.255248 7.000000 4.000000 0.010000 4.000000 0.950000 0.255248 9.000000 4.000000 0.010000 4.000000 0.990000 0.255248 14.000000 4.000000 0.050000 1.500000 0.900000 0.172376 18.000000 4.000000 0.050000 1.500000 0.950000 0.172376 24.000000 4.000000 0.050000 1.500000 0.990000 0.172376 37.000000 4.000000 0.050000 2.000000 0.900000 0.172376 13.000000 4.000000 0.050000 2.000000 0.950000 0.172376 17.000000 4.000000 0.050000 2.000000 0.990000 0.172376 26.000000 4.000000 0.050000 4.000000 0.900000 0.172376 8.000000 4.000000 0.050000 4.000000 0.950000 0.172376 10.000000 4.000000 0.050000 4.000000 0.990000 0.172376 16.000000 4.000000 0.100000 1.500000 0.900000 0.134823 20.000000 4.000000 0.100000 1.500000 0.950000 0.134823 26.000000 4.000000 0.100000 1.500000 0.990000 0.134823 41.000000 4.000000 0.100000 2.000000 0.900000 0.134823 14.000000 4.000000 0.100000 2.000000 0.950000 0.134823 19.000000 4.000000 0.100000 2.000000 0.990000 0.134823 29.000000 4.000000 0.100000 4.000000 0.900000 0.134823 9.000000 4.000000 0.100000 4.000000 0.950000 0.134823 11.000000 4.000000 0.100000 4.000000 0.990000 0.134823 17.000000 5.000000 0.010000 1.500000 0.900000 0.169792 18.000000 5.000000 0.010000 1.500000 0.950000 0.169792 24.000000 5.000000 0.010000 1.500000 0.990000 0.169792 37.000000 5.000000 0.010000 2.000000 0.900000 0.169792 13.000000 5.000000 0.010000 2.000000 0.950000 0.169792 17.000000 5.000000 0.010000 2.000000 0.990000 0.169792 26.000000 5.000000 0.010000 4.000000 0.900000 0.169792 8.000000 5.000000 0.010000 4.000000 0.950000 0.169792 10.000000 5.000000 0.010000 4.000000 0.990000 0.169792 16.000000 5.000000 0.050000 1.500000 0.900000 0.113400 22.000000 5.000000 0.050000 1.500000 0.950000 0.113400 29.000000 5.000000 0.050000 1.500000 0.990000 0.113400 44.000000 5.000000 0.050000 2.000000 0.900000 0.113400 16.000000 5.000000 0.050000 2.000000 0.950000 0.113400 20.000000 5.000000 0.050000 2.000000 0.990000 0.113400 31.000000 5.000000 0.050000 4.000000 0.900000 0.113400 9.000000 5.000000 0.050000 4.000000 0.950000 0.113400 12.000000 5.000000 0.050000 4.000000 0.990000 0.113400 18.000000 5.000000 0.100000 1.500000 0.900000 0.088213 25.000000 5.000000 0.100000 1.500000 0.950000 0.088213 32.000000 5.000000 0.100000 1.500000 0.990000 0.088213 49.000000 5.000000 0.100000 2.000000 0.900000 0.088213 17.000000 5.000000 0.100000 2.000000 0.950000 0.088213 23.000000 5.000000 0.100000 2.000000 0.990000 0.088213 35.000000 5.000000 0.100000 4.000000 0.900000 0.088213 10.000000 5.000000 0.100000 4.000000 0.950000 0.088213 13.000000 5.000000 0.100000 4.000000 0.990000 0.088213 20.000000 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3.000000 0.010000 1.500000 10.000000 0.422453 0.832577 3.000000 0.010000 1.500000 100.000000 0.422453 1.000000 3.000000 0.010000 1.500000 1000.000000 0.422453 1.000000 3.000000 0.010000 2.000000 10.000000 0.422453 0.916373 3.000000 0.010000 2.000000 100.000000 0.422453 1.000000 3.000000 0.010000 2.000000 1000.000000 0.422453 1.000000 3.000000 0.010000 4.000000 10.000000 0.422453 0.979665 3.000000 0.010000 4.000000 100.000000 0.422453 1.000000 3.000000 0.010000 4.000000 1000.000000 0.422453 1.000000 3.000000 0.050000 1.500000 10.000000 0.290627 0.789858 3.000000 0.050000 1.500000 100.000000 0.290627 1.000000 3.000000 0.050000 1.500000 1000.000000 0.290627 1.000000 3.000000 0.050000 2.000000 10.000000 0.290627 0.887239 3.000000 0.050000 2.000000 100.000000 0.290627 1.000000 3.000000 0.050000 2.000000 1000.000000 0.290627 1.000000 3.000000 0.050000 4.000000 10.000000 0.290627 0.970279 3.000000 0.050000 4.000000 100.000000 0.290627 1.000000 3.000000 0.050000 4.000000 1000.000000 0.290627 1.000000 3.000000 0.100000 1.500000 10.000000 0.229506 0.758563 3.000000 0.100000 1.500000 100.000000 0.229506 0.999999 3.000000 0.100000 1.500000 1000.000000 0.229506 1.000000 3.000000 0.100000 2.000000 10.000000 0.229506 0.864163 3.000000 0.100000 2.000000 100.000000 0.229506 1.000000 3.000000 0.100000 2.000000 1000.000000 0.229506 1.000000 3.000000 0.100000 4.000000 10.000000 0.229506 0.961778 3.000000 0.100000 4.000000 100.000000 0.229506 1.000000 3.000000 0.100000 4.000000 1000.000000 0.229506 1.000000 4.000000 0.010000 1.500000 10.000000 0.255248 0.773046 4.000000 0.010000 1.500000 100.000000 0.255248 1.000000 4.000000 0.010000 1.500000 1000.000000 0.255248 1.000000 4.000000 0.010000 2.000000 10.000000 0.255248 0.875018 4.000000 0.010000 2.000000 100.000000 0.255248 1.000000 4.000000 0.010000 2.000000 1000.000000 0.255248 1.000000 4.000000 0.010000 4.000000 10.000000 0.255248 0.965895 4.000000 0.010000 4.000000 100.000000 0.255248 1.000000 4.000000 0.010000 4.000000 1000.000000 0.255248 1.000000 4.000000 0.050000 1.500000 10.000000 0.172376 0.716665 4.000000 0.050000 1.500000 100.000000 0.172376 0.999997 4.000000 0.050000 1.500000 1000.000000 0.172376 1.000000 4.000000 0.050000 2.000000 10.000000 0.172376 0.831130 4.000000 0.050000 2.000000 100.000000 0.172376 1.000000 4.000000 0.050000 2.000000 1000.000000 0.172376 1.000000 4.000000 0.050000 4.000000 10.000000 0.172376 0.947951 4.000000 0.050000 4.000000 100.000000 0.172376 1.000000 4.000000 0.050000 4.000000 1000.000000 0.172376 1.000000 4.000000 0.100000 1.500000 10.000000 0.134823 0.677871 4.000000 0.100000 1.500000 100.000000 0.134823 0.999988 4.000000 0.100000 1.500000 1000.000000 0.134823 1.000000 4.000000 0.100000 2.000000 10.000000 0.134823 0.798496 4.000000 0.100000 2.000000 100.000000 0.134823 1.000000 4.000000 0.100000 2.000000 1000.000000 0.134823 1.000000 4.000000 0.100000 4.000000 10.000000 0.134823 0.932361 4.000000 0.100000 4.000000 100.000000 0.134823 1.000000 4.000000 0.100000 4.000000 1000.000000 0.134823 1.000000 5.000000 0.010000 1.500000 10.000000 0.169792 0.714348 5.000000 0.010000 1.500000 100.000000 0.169792 0.999996 5.000000 0.010000 1.500000 1000.000000 0.169792 1.000000 5.000000 0.010000 2.000000 10.000000 0.169792 0.829235 5.000000 0.010000 2.000000 100.000000 0.169792 1.000000 5.000000 0.010000 2.000000 1000.000000 0.169792 1.000000 5.000000 0.010000 4.000000 10.000000 0.169792 0.947099 5.000000 0.010000 4.000000 100.000000 0.169792 1.000000 5.000000 0.010000 4.000000 1000.000000 0.169792 1.000000 5.000000 0.050000 1.500000 10.000000 0.113400 0.649371 5.000000 0.050000 1.500000 100.000000 0.113400 0.999972 5.000000 0.050000 1.500000 1000.000000 0.113400 1.000000 5.000000 0.050000 2.000000 10.000000 0.113400 0.773338 5.000000 0.050000 2.000000 100.000000 0.113400 1.000000 5.000000 0.050000 2.000000 1000.000000 0.113400 1.000000 5.000000 0.050000 4.000000 10.000000 0.113400 0.919030 5.000000 0.050000 4.000000 100.000000 0.113400 1.000000 5.000000 0.050000 4.000000 1000.000000 0.113400 1.000000 5.000000 0.100000 1.500000 10.000000 0.088213 0.606869 5.000000 0.100000 1.500000 100.000000 0.088213 0.999912 5.000000 0.100000 1.500000 1000.000000 0.088213 1.000000 5.000000 0.100000 2.000000 10.000000 0.088213 0.734057 5.000000 0.100000 2.000000 100.000000 0.088213 0.999998 5.000000 0.100000 2.000000 1000.000000 0.088213 1.000000 5.000000 0.100000 4.000000 10.000000 0.088213 0.895928 5.000000 0.100000 4.000000 100.000000 0.088213 1.000000 5.000000 0.100000 4.000000 1000.000000 0.088213 1.000000 dimension = 5 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3.000000 0.010000 1.500000 0.900000 0.422453 191.000000 3.000000 0.010000 1.500000 0.950000 0.422453 248.000000 3.000000 0.010000 1.500000 0.990000 0.422453 382.000000 3.000000 0.010000 2.000000 0.900000 0.422453 62.000000 3.000000 0.010000 2.000000 0.950000 0.422453 81.000000 3.000000 0.010000 2.000000 0.990000 0.422453 124.000000 3.000000 0.010000 4.000000 0.900000 0.422453 15.000000 3.000000 0.010000 4.000000 0.950000 0.422453 20.000000 3.000000 0.010000 4.000000 0.990000 0.422453 30.000000 3.000000 0.050000 1.500000 0.900000 0.290627 309.000000 3.000000 0.050000 1.500000 0.950000 0.290627 402.000000 3.000000 0.050000 1.500000 0.990000 0.290627 618.000000 3.000000 0.050000 2.000000 0.900000 0.290627 96.000000 3.000000 0.050000 2.000000 0.950000 0.290627 124.000000 3.000000 0.050000 2.000000 0.990000 0.290627 191.000000 3.000000 0.050000 4.000000 0.900000 0.290627 21.000000 3.000000 0.050000 4.000000 0.950000 0.290627 27.000000 3.000000 0.050000 4.000000 0.990000 0.290627 41.000000 3.000000 0.100000 1.500000 0.900000 0.229506 432.000000 3.000000 0.100000 1.500000 0.950000 0.229506 563.000000 3.000000 0.100000 1.500000 0.990000 0.229506 865.000000 3.000000 0.100000 2.000000 0.900000 0.229506 130.000000 3.000000 0.100000 2.000000 0.950000 0.229506 169.000000 3.000000 0.100000 2.000000 0.990000 0.229506 260.000000 3.000000 0.100000 4.000000 0.900000 0.229506 26.000000 3.000000 0.100000 4.000000 0.950000 0.229506 34.000000 3.000000 0.100000 4.000000 0.990000 0.229506 52.000000 4.000000 0.010000 1.500000 0.900000 0.255248 371.000000 4.000000 0.010000 1.500000 0.950000 0.255248 482.000000 4.000000 0.010000 1.500000 0.990000 0.255248 741.000000 4.000000 0.010000 2.000000 0.900000 0.255248 113.000000 4.000000 0.010000 2.000000 0.950000 0.255248 147.000000 4.000000 0.010000 2.000000 0.990000 0.255248 226.000000 4.000000 0.010000 4.000000 0.900000 0.255248 23.000000 4.000000 0.010000 4.000000 0.950000 0.255248 30.000000 4.000000 0.010000 4.000000 0.990000 0.255248 47.000000 4.000000 0.050000 1.500000 0.900000 0.172376 669.000000 4.000000 0.050000 1.500000 0.950000 0.172376 870.000000 4.000000 0.050000 1.500000 0.990000 0.172376 1338.000000 4.000000 0.050000 2.000000 0.900000 0.172376 194.000000 4.000000 0.050000 2.000000 0.950000 0.172376 252.000000 4.000000 0.050000 2.000000 0.990000 0.172376 388.000000 4.000000 0.050000 4.000000 0.900000 0.172376 35.000000 4.000000 0.050000 4.000000 0.950000 0.172376 46.000000 4.000000 0.050000 4.000000 0.990000 0.172376 71.000000 4.000000 0.100000 1.500000 0.900000 0.134823 994.000000 4.000000 0.100000 1.500000 0.950000 0.134823 1293.000000 4.000000 0.100000 1.500000 0.990000 0.134823 1988.000000 4.000000 0.100000 2.000000 0.900000 0.134823 281.000000 4.000000 0.100000 2.000000 0.950000 0.134823 366.000000 4.000000 0.100000 2.000000 0.990000 0.134823 562.000000 4.000000 0.100000 4.000000 0.900000 0.134823 48.000000 4.000000 0.100000 4.000000 0.950000 0.134823 62.000000 4.000000 0.100000 4.000000 0.990000 0.134823 95.000000 5.000000 0.010000 1.500000 0.900000 0.169792 685.000000 5.000000 0.010000 1.500000 0.950000 0.169792 891.000000 5.000000 0.010000 1.500000 0.990000 0.169792 1370.000000 5.000000 0.010000 2.000000 0.900000 0.169792 198.000000 5.000000 0.010000 2.000000 0.950000 0.169792 258.000000 5.000000 0.010000 2.000000 0.990000 0.169792 397.000000 5.000000 0.010000 4.000000 0.900000 0.169792 36.000000 5.000000 0.010000 4.000000 0.950000 0.169792 47.000000 5.000000 0.010000 4.000000 0.990000 0.169792 72.000000 5.000000 0.050000 1.500000 0.900000 0.113400 1328.000000 5.000000 0.050000 1.500000 0.950000 0.113400 1728.000000 5.000000 0.050000 1.500000 0.990000 0.113400 2656.000000 5.000000 0.050000 2.000000 0.900000 0.113400 370.000000 5.000000 0.050000 2.000000 0.950000 0.113400 481.000000 5.000000 0.050000 2.000000 0.990000 0.113400 739.000000 5.000000 0.050000 4.000000 0.900000 0.113400 60.000000 5.000000 0.050000 4.000000 0.950000 0.113400 78.000000 5.000000 0.050000 4.000000 0.990000 0.113400 119.000000 5.000000 0.100000 1.500000 0.900000 0.088213 2049.000000 5.000000 0.100000 1.500000 0.950000 0.088213 2666.000000 5.000000 0.100000 1.500000 0.990000 0.088213 4098.000000 5.000000 0.100000 2.000000 0.900000 0.088213 559.000000 5.000000 0.100000 2.000000 0.950000 0.088213 727.000000 5.000000 0.100000 2.000000 0.990000 0.088213 1118.000000 5.000000 0.100000 4.000000 0.900000 0.088213 85.000000 5.000000 0.100000 4.000000 0.950000 0.088213 110.000000 5.000000 0.100000 4.000000 0.990000 0.088213 169.000000 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3.000000 0.010000 1.500000 10.000000 0.422453 0.113701 3.000000 0.010000 1.500000 100.000000 0.422453 0.700909 3.000000 0.010000 1.500000 1000.000000 0.422453 0.999994 3.000000 0.010000 2.000000 10.000000 0.422453 0.309263 3.000000 0.010000 2.000000 100.000000 0.422453 0.975275 3.000000 0.010000 2.000000 1000.000000 0.422453 1.000000 3.000000 0.010000 4.000000 10.000000 0.422453 0.779599 3.000000 0.010000 4.000000 100.000000 0.422453 1.000000 3.000000 0.010000 4.000000 1000.000000 0.422453 1.000000 3.000000 0.050000 1.500000 10.000000 0.290627 0.071786 3.000000 0.050000 1.500000 100.000000 0.290627 0.525232 3.000000 0.050000 1.500000 1000.000000 0.290627 0.999418 3.000000 0.050000 2.000000 10.000000 0.290627 0.213928 3.000000 0.050000 2.000000 100.000000 0.290627 0.909922 3.000000 0.050000 2.000000 1000.000000 0.290627 1.000000 3.000000 0.050000 4.000000 10.000000 0.290627 0.672168 3.000000 0.050000 4.000000 100.000000 0.290627 0.999986 3.000000 0.050000 4.000000 1000.000000 0.290627 1.000000 3.000000 0.100000 1.500000 10.000000 0.229506 0.051848 3.000000 0.100000 1.500000 100.000000 0.229506 0.412809 3.000000 0.100000 1.500000 1000.000000 0.229506 0.995127 3.000000 0.100000 2.000000 10.000000 0.229506 0.162567 3.000000 0.100000 2.000000 100.000000 0.229506 0.830371 3.000000 0.100000 2.000000 1000.000000 0.229506 1.000000 3.000000 0.100000 4.000000 10.000000 0.229506 0.589017 3.000000 0.100000 4.000000 100.000000 0.229506 0.999863 3.000000 0.100000 4.000000 1000.000000 0.229506 1.000000 4.000000 0.010000 1.500000 10.000000 0.255248 0.060217 4.000000 0.010000 1.500000 100.000000 0.255248 0.462629 4.000000 0.010000 1.500000 1000.000000 0.255248 0.997992 4.000000 0.010000 2.000000 10.000000 0.255248 0.184677 4.000000 0.010000 2.000000 100.000000 0.255248 0.870193 4.000000 0.010000 2.000000 1000.000000 0.255248 1.000000 4.000000 0.010000 4.000000 10.000000 0.255248 0.627664 4.000000 0.010000 4.000000 100.000000 0.255248 0.999949 4.000000 0.010000 4.000000 1000.000000 0.255248 1.000000 4.000000 0.050000 1.500000 10.000000 0.172376 0.033843 4.000000 0.050000 1.500000 100.000000 0.172376 0.291277 4.000000 0.050000 1.500000 1000.000000 0.172376 0.968028 4.000000 0.050000 2.000000 10.000000 0.172376 0.111899 4.000000 0.050000 2.000000 100.000000 0.172376 0.694774 4.000000 0.050000 2.000000 1000.000000 0.172376 0.999993 4.000000 0.050000 4.000000 10.000000 0.172376 0.478865 4.000000 0.050000 4.000000 100.000000 0.172376 0.998523 4.000000 0.050000 4.000000 1000.000000 0.172376 1.000000 4.000000 0.100000 1.500000 10.000000 0.134823 0.022900 4.000000 0.100000 1.500000 100.000000 0.134823 0.206788 4.000000 0.100000 1.500000 1000.000000 0.134823 0.901396 4.000000 0.100000 2.000000 10.000000 0.134823 0.078647 4.000000 0.100000 2.000000 100.000000 0.134823 0.559183 4.000000 0.100000 2.000000 1000.000000 0.134823 0.999723 4.000000 0.100000 4.000000 10.000000 0.134823 0.383689 4.000000 0.100000 4.000000 100.000000 0.134823 0.992093 4.000000 0.100000 4.000000 1000.000000 0.134823 1.000000 5.000000 0.010000 1.500000 10.000000 0.169792 0.033060 5.000000 0.010000 1.500000 100.000000 0.169792 0.285514 5.000000 0.010000 1.500000 1000.000000 0.169792 0.965331 5.000000 0.010000 2.000000 10.000000 0.169792 0.109589 5.000000 0.010000 2.000000 100.000000 0.169792 0.686739 5.000000 0.010000 2.000000 1000.000000 0.169792 0.999991 5.000000 0.010000 4.000000 10.000000 0.169792 0.472946 5.000000 0.010000 4.000000 100.000000 0.169792 0.998346 5.000000 0.010000 4.000000 1000.000000 0.169792 1.000000 5.000000 0.050000 1.500000 10.000000 0.113400 0.017192 5.000000 0.050000 1.500000 100.000000 0.113400 0.159210 5.000000 0.050000 1.500000 1000.000000 0.113400 0.823447 5.000000 0.050000 2.000000 10.000000 0.113400 0.060400 5.000000 0.050000 2.000000 100.000000 0.113400 0.463674 5.000000 0.050000 2.000000 1000.000000 0.113400 0.998031 5.000000 0.050000 4.000000 10.000000 0.113400 0.320310 5.000000 0.050000 4.000000 100.000000 0.113400 0.978957 5.000000 0.050000 4.000000 1000.000000 0.113400 1.000000 5.000000 0.100000 1.500000 10.000000 0.088213 0.011175 5.000000 0.100000 1.500000 100.000000 0.088213 0.106296 5.000000 0.100000 1.500000 1000.000000 0.088213 0.674961 5.000000 0.100000 2.000000 10.000000 0.088213 0.040363 5.000000 0.100000 2.000000 100.000000 0.088213 0.337675 5.000000 0.100000 2.000000 1000.000000 0.088213 0.983755 5.000000 0.100000 4.000000 10.000000 0.088213 0.238100 5.000000 0.100000 4.000000 100.000000 0.088213 0.934086 5.000000 0.100000 4.000000 1000.000000 0.088213 1.000000 dimension = 10 beta importanceLevel accuracyLevel confidenceLevel deltaEpsilon pointNumber 3.000000 0.010000 1.500000 0.900000 0.422453 9464.000000 3.000000 0.010000 1.500000 0.950000 0.422453 12313.000000 3.000000 0.010000 1.500000 0.990000 0.422453 18927.000000 3.000000 0.010000 2.000000 0.900000 0.422453 841.000000 3.000000 0.010000 2.000000 0.950000 0.422453 1094.000000 3.000000 0.010000 2.000000 0.990000 0.422453 1682.000000 3.000000 0.010000 4.000000 0.900000 0.422453 48.000000 3.000000 0.010000 4.000000 0.950000 0.422453 62.000000 3.000000 0.010000 4.000000 0.990000 0.422453 95.000000 3.000000 0.050000 1.500000 0.900000 0.290627 27334.000000 3.000000 0.050000 1.500000 0.950000 0.290627 35562.000000 3.000000 0.050000 1.500000 0.990000 0.290627 54667.000000 3.000000 0.050000 2.000000 0.900000 0.290627 2111.000000 3.000000 0.050000 2.000000 0.950000 0.290627 2746.000000 3.000000 0.050000 2.000000 0.990000 0.290627 4222.000000 3.000000 0.050000 4.000000 0.900000 0.290627 86.000000 3.000000 0.050000 4.000000 0.950000 0.290627 112.000000 3.000000 0.050000 4.000000 0.990000 0.290627 173.000000 3.000000 0.100000 1.500000 0.900000 0.229506 57412.000000 3.000000 0.100000 1.500000 0.950000 0.229506 74695.000000 3.000000 0.100000 1.500000 0.990000 0.229506 114824.000000 3.000000 0.100000 2.000000 0.900000 0.229506 4085.000000 3.000000 0.100000 2.000000 0.950000 0.229506 5315.000000 3.000000 0.100000 2.000000 0.990000 0.229506 8170.000000 3.000000 0.100000 4.000000 0.900000 0.229506 136.000000 3.000000 0.100000 4.000000 0.950000 0.229506 177.000000 3.000000 0.100000 4.000000 0.990000 0.229506 272.000000 4.000000 0.010000 1.500000 0.900000 0.255248 40836.000000 4.000000 0.010000 1.500000 0.950000 0.255248 53129.000000 4.000000 0.010000 1.500000 0.990000 0.255248 81672.000000 4.000000 0.010000 2.000000 0.900000 0.255248 3012.000000 4.000000 0.010000 2.000000 0.950000 0.255248 3919.000000 4.000000 0.010000 2.000000 0.990000 0.255248 6025.000000 4.000000 0.010000 4.000000 0.900000 0.255248 110.000000 4.000000 0.010000 4.000000 0.950000 0.255248 143.000000 4.000000 0.010000 4.000000 0.990000 0.255248 220.000000 4.000000 0.050000 1.500000 0.900000 0.172376 150970.000000 4.000000 0.050000 1.500000 0.950000 0.172376 196416.000000 4.000000 0.050000 1.500000 0.990000 0.172376 301939.000000 4.000000 0.050000 2.000000 0.900000 0.172376 9822.000000 4.000000 0.050000 2.000000 0.950000 0.172376 12779.000000 4.000000 0.050000 2.000000 0.990000 0.172376 19644.000000 4.000000 0.050000 4.000000 0.900000 0.172376 257.000000 4.000000 0.050000 4.000000 0.950000 0.172376 334.000000 4.000000 0.050000 4.000000 0.990000 0.172376 514.000000 4.000000 0.100000 1.500000 0.900000 0.134823 364516.000000 4.000000 0.100000 1.500000 0.950000 0.134823 474246.000000 4.000000 0.100000 1.500000 0.990000 0.134823 729032.000000 4.000000 0.100000 2.000000 0.900000 0.134823 22173.000000 4.000000 0.100000 2.000000 0.950000 0.134823 28847.000000 4.000000 0.100000 2.000000 0.990000 0.134823 44345.000000 4.000000 0.100000 4.000000 0.900000 0.134823 477.000000 4.000000 0.100000 4.000000 0.950000 0.134823 621.000000 4.000000 0.100000 4.000000 0.990000 0.134823 954.000000 5.000000 0.010000 1.500000 0.900000 0.169792 159170.000000 5.000000 0.010000 1.500000 0.950000 0.169792 207085.000000 5.000000 0.010000 1.500000 0.990000 0.169792 318339.000000 5.000000 0.010000 2.000000 0.900000 0.169792 10310.000000 5.000000 0.010000 2.000000 0.950000 0.169792 13414.000000 5.000000 0.010000 2.000000 0.990000 0.169792 20620.000000 5.000000 0.010000 4.000000 0.900000 0.169792 266.000000 5.000000 0.010000 4.000000 0.950000 0.169792 346.000000 5.000000 0.010000 4.000000 0.990000 0.169792 532.000000 5.000000 0.050000 1.500000 0.900000 0.113400 695225.000000 5.000000 0.050000 1.500000 0.950000 0.113400 904508.000000 5.000000 0.050000 1.500000 0.990000 0.113400 1390449.000000 5.000000 0.050000 2.000000 0.900000 0.113400 40555.000000 5.000000 0.050000 2.000000 0.950000 0.113400 52763.000000 5.000000 0.050000 2.000000 0.990000 0.113400 81110.000000 5.000000 0.050000 4.000000 0.900000 0.113400 768.000000 5.000000 0.050000 4.000000 0.950000 0.113400 1000.000000 5.000000 0.050000 4.000000 0.990000 0.113400 1537.000000 5.000000 0.100000 1.500000 0.900000 0.088213 1831624.000000 5.000000 0.100000 1.500000 0.950000 0.088213 2382998.000000 5.000000 0.100000 1.500000 0.990000 0.088213 3663249.000000 5.000000 0.100000 2.000000 0.900000 0.088213 101337.000000 5.000000 0.100000 2.000000 0.950000 0.088213 131843.000000 5.000000 0.100000 2.000000 0.990000 0.088213 202674.000000 5.000000 0.100000 4.000000 0.900000 0.088213 1624.000000 5.000000 0.100000 4.000000 0.950000 0.088213 2112.000000 5.000000 0.100000 4.000000 0.990000 0.088213 3247.000000 beta importanceLevel accuracyLevel pointNumber deltaEpsilon confidenceLevel 3.000000 0.010000 1.500000 10.000000 0.422453 0.002430 3.000000 0.010000 1.500000 100.000000 0.422453 0.024037 3.000000 0.010000 1.500000 1000.000000 0.422453 0.215968 3.000000 0.010000 2.000000 10.000000 0.422453 0.027000 3.000000 0.010000 2.000000 100.000000 0.422453 0.239448 3.000000 0.010000 2.000000 1000.000000 0.422453 0.935242 3.000000 0.010000 4.000000 10.000000 0.422453 0.383414 3.000000 0.010000 4.000000 100.000000 0.422453 0.992058 3.000000 0.010000 4.000000 1000.000000 0.422453 1.000000 3.000000 0.050000 1.500000 10.000000 0.290627 0.000842 3.000000 0.050000 1.500000 100.000000 0.290627 0.008389 3.000000 0.050000 1.500000 1000.000000 0.290627 0.080790 3.000000 0.050000 2.000000 10.000000 0.290627 0.010849 3.000000 0.050000 2.000000 100.000000 0.290627 0.103341 3.000000 0.050000 2.000000 1000.000000 0.290627 0.664052 3.000000 0.050000 4.000000 10.000000 0.290627 0.233851 3.000000 0.050000 4.000000 100.000000 0.290627 0.930316 3.000000 0.050000 4.000000 1000.000000 0.290627 1.000000 3.000000 0.100000 1.500000 10.000000 0.229506 0.000401 3.000000 0.100000 1.500000 100.000000 0.229506 0.004003 3.000000 0.100000 1.500000 1000.000000 0.229506 0.039313 3.000000 0.100000 2.000000 10.000000 0.229506 0.005621 3.000000 0.100000 2.000000 100.000000 0.229506 0.054807 3.000000 0.100000 2.000000 1000.000000 0.229506 0.430881 3.000000 0.100000 4.000000 10.000000 0.229506 0.155650 3.000000 0.100000 4.000000 100.000000 0.229506 0.815827 3.000000 0.100000 4.000000 1000.000000 0.229506 1.000000 4.000000 0.010000 1.500000 10.000000 0.255248 0.000564 4.000000 0.010000 1.500000 100.000000 0.255248 0.005623 4.000000 0.010000 1.500000 1000.000000 0.255248 0.054826 4.000000 0.010000 2.000000 10.000000 0.255248 0.007615 4.000000 0.010000 2.000000 100.000000 0.255248 0.073590 4.000000 0.010000 2.000000 1000.000000 0.255248 0.534381 4.000000 0.010000 4.000000 10.000000 0.255248 0.188731 4.000000 0.010000 4.000000 100.000000 0.255248 0.876505 4.000000 0.010000 4.000000 1000.000000 0.255248 1.000000 4.000000 0.050000 1.500000 10.000000 0.172376 0.000153 4.000000 0.050000 1.500000 100.000000 0.172376 0.001524 4.000000 0.050000 1.500000 1000.000000 0.172376 0.015136 4.000000 0.050000 2.000000 10.000000 0.172376 0.002342 4.000000 0.050000 2.000000 100.000000 0.172376 0.023171 4.000000 0.050000 2.000000 1000.000000 0.172376 0.208981 4.000000 0.050000 4.000000 10.000000 0.172376 0.085760 4.000000 0.050000 4.000000 100.000000 0.172376 0.592055 4.000000 0.050000 4.000000 1000.000000 0.172376 0.999872 4.000000 0.100000 1.500000 10.000000 0.134823 0.000063 4.000000 0.100000 1.500000 100.000000 0.134823 0.000631 4.000000 0.100000 1.500000 1000.000000 0.134823 0.006297 4.000000 0.100000 2.000000 10.000000 0.134823 0.001038 4.000000 0.100000 2.000000 100.000000 0.134823 0.010331 4.000000 0.100000 2.000000 1000.000000 0.134823 0.098638 4.000000 0.100000 4.000000 10.000000 0.134823 0.047111 4.000000 0.100000 4.000000 100.000000 0.134823 0.382806 4.000000 0.100000 4.000000 1000.000000 0.134823 0.991979 5.000000 0.010000 1.500000 10.000000 0.169792 0.000145 5.000000 0.010000 1.500000 100.000000 0.169792 0.001446 5.000000 0.010000 1.500000 1000.000000 0.169792 0.014362 5.000000 0.010000 2.000000 10.000000 0.169792 0.002231 5.000000 0.010000 2.000000 100.000000 0.169792 0.022086 5.000000 0.010000 2.000000 1000.000000 0.169792 0.200154 5.000000 0.010000 4.000000 10.000000 0.169792 0.082848 5.000000 0.010000 4.000000 100.000000 0.169792 0.578874 5.000000 0.010000 4.000000 1000.000000 0.169792 0.999825 5.000000 0.050000 1.500000 10.000000 0.113400 0.000033 5.000000 0.050000 1.500000 100.000000 0.113400 0.000331 5.000000 0.050000 1.500000 1000.000000 0.113400 0.003307 5.000000 0.050000 2.000000 10.000000 0.113400 0.000568 5.000000 0.050000 2.000000 100.000000 0.113400 0.005662 5.000000 0.050000 2.000000 1000.000000 0.113400 0.055195 5.000000 0.050000 4.000000 10.000000 0.113400 0.029519 5.000000 0.050000 4.000000 100.000000 0.113400 0.258909 5.000000 0.050000 4.000000 1000.000000 0.113400 0.950030 5.000000 0.100000 1.500000 10.000000 0.088213 0.000013 5.000000 0.100000 1.500000 100.000000 0.088213 0.000126 5.000000 0.100000 1.500000 1000.000000 0.088213 0.001256 5.000000 0.100000 2.000000 10.000000 0.088213 0.000227 5.000000 0.100000 2.000000 100.000000 0.088213 0.002270 5.000000 0.100000 2.000000 1000.000000 0.088213 0.022466 5.000000 0.100000 4.000000 10.000000 0.088213 0.014081 5.000000 0.100000 4.000000 100.000000 0.088213 0.132216 5.000000 0.100000 4.000000 1000.000000 0.088213 0.757833 openturns-1.9/python/test/t_StrongMaximumTest_tabulatedValues.py000077500000000000000000000122011307543307100254760ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: for dim in [2, 5, 10]: print("dimension = ", dim) # We create a numerical math function inputVar = list(['X' + str(i) for i in range(dim)]) myFunction = Function(inputVar, ['y'], ['0']) # We create a normal distribution point of dimension 1 mean = [0.] * dim sigma = [1.0] * dim R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) # We create a 'usual' RandomVector from the Distribution vect = RandomVector(myDistribution) # We create a composite random vector output = RandomVector(myFunction, vect) # We create a StandardEvent from this RandomVector myStandardEvent = StandardEvent( output, Less(), 2.0) std = Normal() beta = Point(3) beta[0] = round(-std.computeQuantile(1e-3)[0]) beta[1] = round(-std.computeQuantile(1e-5)[0]) beta[2] = round(-std.computeQuantile(1e-7)[0]) importanceLevel = Point(3) importanceLevel[0] = 0.01 importanceLevel[1] = 0.05 importanceLevel[2] = 0.10 accuracyLevel = Point(3) accuracyLevel[0] = 1.5 accuracyLevel[1] = 2.0 accuracyLevel[2] = 4.0 confidenceLevel = Point(3) confidenceLevel[0] = 0.90 confidenceLevel[1] = 0.95 confidenceLevel[2] = 0.99 pointNumber = UnsignedIntegerCollection(3) pointNumber[0] = 10 pointNumber[1] = 100 pointNumber[2] = 1000 # TABLE 1 : we impose beta, the importance level, the accuracy level, # tne confidence level and we calculate the corresponding deltaEpsilon # and pointNumber N print("beta ", "importanceLevel ", "accuracyLevel ", "confidenceLevel ", "deltaEpsilon ", "pointNumber") # loop on beta for indexBeta in range(beta.getDimension()): # We create the design point designPoint = Point(dim, 0.0) designPoint[0] = beta[indexBeta] # loop on the importance level epsilon for indexImportanceLevel in range(importanceLevel.getDimension()): # loop on the accuracy level tau for indexAccuracyLevel in range(accuracyLevel.getDimension()): # loop on the confidence level (1-q) for indexConfidenceLevel in range(confidenceLevel.getDimension()): # we calculate the corresponding deltaEpsilon and # pointNumber N myTest = StrongMaximumTest(myStandardEvent, designPoint, importanceLevel[ indexImportanceLevel], accuracyLevel[indexAccuracyLevel], confidenceLevel[indexConfidenceLevel]) print("%.6f" % beta[indexBeta], " %.6f" % importanceLevel[indexImportanceLevel], " %.6f" % accuracyLevel[ indexAccuracyLevel], " %.6f" % confidenceLevel[indexConfidenceLevel], " %.6f" % myTest.getDeltaEpsilon(), " %.6f" % myTest.getPointNumber()) # TABLE 2 : we impose beta, the importance level, the accuracy level, the pointNumber N and we calculate the corresponding deltaEpsilon and confidence level # std::cout << std::right # << std::setw(10) << "beta " # << std::setw(16) << "importanceLevel " # << "accuracyLevel " << "pointNumber " << "deltaEpsilon " << "confidenceLevel" << std::endl print("beta ", "importanceLevel ", "accuracyLevel ", "pointNumber", "deltaEpsilon ", "confidenceLevel") # loop on beta for indexBeta in range(beta.getDimension()): # We create the design point designPoint = Point(dim, 0.0) designPoint[0] = beta[indexBeta] # loop on the importance level epsilon for indexImportanceLevel in range(importanceLevel.getDimension()): # loop on the accuracy level tau for indexAccuracyLevel in range(accuracyLevel.getDimension()): # loop on the pointNumber N for indexPointNumber in range(pointNumber.getSize()): # we calculate the corresponding deltaEpsilon and # confidenceLevel myTest = StrongMaximumTest(myStandardEvent, designPoint, importanceLevel[ indexImportanceLevel], accuracyLevel[indexAccuracyLevel], pointNumber[indexPointNumber]) print("%.6f" % beta[indexBeta], " %.6f" % importanceLevel[indexImportanceLevel], " %.6f" % accuracyLevel[ indexAccuracyLevel], " %.6f" % pointNumber[indexPointNumber], " %.6f" % myTest.getDeltaEpsilon(), " %.6f" % myTest.getConfidenceLevel()) except: import sys print("t_strongMaximumTest_tabulatedValues.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_StudentFactory_std.expout000066400000000000000000000015371307543307100233520ustar00rootroot00000000000000distribution= class=Student name=Student dimension=1 nu=3.5 mean=class=Point name=Unnamed dimension=1 values=[2.5] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Estimated distribution= class=Student name=Student dimension=1 nu=3.58491 mean=class=Point name=Unnamed dimension=1 values=[2.52108] sigma=class=Point name=Unnamed dimension=1 values=[1] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Default distribution= Student(nu = 3, mu = 0, sigma = 1) Student = Student(nu = 3.5, mu = 2.5, sigma = 1) Estimated student= Student(nu = 3.58491, mu = 2.52108, sigma = 1) Default student= Student(nu = 3, mu = 0, sigma = 1) openturns-1.9/python/test/t_StudentFactory_std.py000077500000000000000000000015501307543307100224540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Student(3.5, 2.5) size = 10000 sample = distribution.getSample(size) factory = StudentFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedStudent = factory.buildAsStudent(sample) print("Student =", distribution) print("Estimated student=", estimatedStudent) estimatedStudent = factory.buildAsStudent() print("Default student=", estimatedStudent) except: import sys print("t_StudentFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Student_std.expout000066400000000000000000000062501307543307100220170ustar00rootroot00000000000000Distribution class=Student name=Student dimension=1 nu=6.5 mean=class=Point name=Unnamed dimension=1 values=[-0.5] sigma=class=Point name=Unnamed dimension=1 values=[2] correlationMatrix=class=CorrelationMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] Distribution Student(nu = 6.5, mu = -0.5, sigma = 2) Elliptical = True Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.46561] oneSample first= class=Point name=Unnamed dimension=1 values=[3.53872] last= class=Point name=Unnamed dimension=1 values=[-0.636935] mean= class=Point name=Unnamed dimension=1 values=[-0.517373] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.598] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.0560023] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0560023] log pdf=-1.961638 pdf =0.140628 pdf (FD)=0.140628 cdf=0.760243 ccdf=0.239757 pdf gradient = class=Point name=Unnamed dimension=3 values=[0.00144865,0.0560023,-0.0283123] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.00144865,0.0560023,-0.0283123] cdf gradient = class=Point name=Unnamed dimension=3 values=[0.00194826,-0.140628,-0.105471] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.00194826,-0.140628,-0.105471] quantile= class=Point name=Unnamed dimension=1 values=[3.33347] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-4.33347] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-5.304, 4.304] threshold= [0.95] Minimum volume level set= {x | f(x) <= 4.03286} with f= MinimumVolumeLevelSetEvaluation(Student(nu = 6.5, mu = -0.5, sigma = 2)) beta= [0.0177235] Bilateral confidence interval= [-5.304, 4.304] beta= [0.95] Unilateral confidence interval (lower tail)= [-543.532, 3.33347] beta= [0.95] Unilateral confidence interval (upper tail)= [-4.33347, 542.532] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[-0.5] standard deviation= class=Point name=Unnamed dimension=1 values=[2.4037] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[5.4] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[5.77778] parameters= [class=PointWithDescription name=Unnamed dimension=3 description=[nu,mean_0,standard_deviation_0] values=[6.5,-0.5,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [1.44444] standard moment n= 3 value= [0] standard moment n= 4 value= [11.2667] standard moment n= 5 value= [0] Standard representative= Student(nu = 6.5, mu = 0, sigma = 1) density generator=0.224500 pdf via density generator=0.140628 density generator derivative =-0.112250 density generator derivative (FD)=-0.112250 density generator second derivative =0.071092 density generator second derivative (FD)=0.071092 openturns-1.9/python/test/t_Student_std.py000077500000000000000000000172021307543307100211250ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Student(6.5, -0.5, 2.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(3) PDFgrFD[0] = (Student(distribution.getNu() + eps, distribution.getMu(), distribution.getSigma()[0]).computePDF(point) - Student(distribution.getNu() - eps, distribution.getMu(), distribution.getSigma()[0]).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Student(distribution.getNu(), distribution.getMu() + eps, distribution.getSigma()[0]).computePDF(point) - Student(distribution.getNu(), distribution.getMu() - eps, distribution.getSigma()[0]).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Student(distribution.getNu(), distribution.getMu(), distribution.getSigma()[0] + eps).computePDF(point) - Student(distribution.getNu(), distribution.getMu(), distribution.getSigma()[0] - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(3) CDFgrFD[0] = (Student(distribution.getNu() + eps, distribution.getMu(), distribution.getSigma()[0]).computeCDF(point) - Student(distribution.getNu() - eps, distribution.getMu(), distribution.getSigma()[0]).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Student(distribution.getNu(), distribution.getMu() + eps, distribution.getSigma()[0]).computeCDF(point) - Student(distribution.getNu(), distribution.getMu() - eps, distribution.getSigma()[0]).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Student(distribution.getNu(), distribution.getMu(), distribution.getSigma()[0] + eps).computeCDF(point) - Student(distribution.getNu(), distribution.getMu(), distribution.getSigma()[0] - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # Specific to this distribution beta = point.normSquare() densityGenerator = distribution.computeDensityGenerator(beta) print("density generator=%.6f" % densityGenerator) print("pdf via density generator=%.6f" % EllipticalDistribution.computePDF(distribution, point)) densityGeneratorDerivative = distribution.computeDensityGeneratorDerivative( beta) print("density generator derivative =%.6f" % densityGeneratorDerivative) print("density generator derivative (FD)=%.6f" % ((distribution.computeDensityGenerator( beta + eps) - distribution.computeDensityGenerator(beta - eps)) / (2.0 * eps))) densityGeneratorSecondDerivative = distribution.computeDensityGeneratorSecondDerivative( beta) print("density generator second derivative =%.6f" % densityGeneratorSecondDerivative) print("density generator second derivative (FD)=%.6f" % ((distribution.computeDensityGeneratorDerivative( beta + eps) - distribution.computeDensityGeneratorDerivative(beta - eps)) / (2.0 * eps))) except: import sys print("t_Student_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Study_saveload.expout000066400000000000000000000226461307543307100225140ustar00rootroot00000000000000point = class=Point name=point dimension=2 values=[1000,1000] sample = class=Sample name=mySample implementation=class=SampleImplementation name=mySample size=3 dimension=2 data=[[100,200],[101,201],[102,202]] matrix = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=3 values=[0,3,1,4,2,5] simulation result = probabilityEstimate=5.000000e-01 varianceEstimate=1.000000e-02 standard deviation=1.00e-01 coefficient of variation=2.00e-01 confidenceLength(0.95)=3.92e-01 outerSampling=150 blockSize=4 beta = Beta(r = 3, t = 5, a = -1, b = 4) randomGeneratorState = RandomGeneratorState(buffer=[1890737188,1073353721,1590283140,1073618936,2297104061,1072835095,2597797607,1072727329,2937961684,1073057163,3065789070,1073709761,2256077441,1073658650,3564162236,1073220723,1610122029,1072759524,3661968236,1073000225,3510470221,1073442331,718282459,1073095232,2662413988,1073085171,2544014140,1073466329,2206071736,1073619668,3065856244,1073002571,2967741035,1073666861,2052071287,1073553930,3427127794,1073411076,2051962679,1073561497,3969065265,1073070527,3679785981,1073694371,128801527,1073310456,3503793218,1072884129,268772075,1072783200,3348386174,1073386070,2014236806,1072913912,555546619,1073098238,2011487224,1072719000,630016907,1073132516,3349003319,1073722782,80421448,1073653882,1859412796,1073695270,295866472,1073189172,70079837,1072965732,70477955,1073386713,3530593831,1073206813,1579224232,1073184531,2113224206,1072809721,318776053,1073055341,3269002993,1073381089,1822731361,1073401129,155705917,1073719783,2621975809,1073370978,1927848312,1072760579,3336074386,1073503817,2558944891,1073735741,3317965269,1072780356,1342854847,1072929038,1821498585,1073010567,264853472,1072921010,1078583985,1073353499,3388430205,1073301582,513947381,1073183025,3057843613,1073423050,657284973,1073470347,3422045664,1073675573,2118351037,1073607027,1024508187,1073105527,2266768141,1073353062,3960969464,1073651152,1643289418,1073651018,574708353,1072860376,3263398707,1073264132,1306430447,1072906793,1129644556,1073590614,3064192051,1073149460,2839812396,1073072480,4272638491,1072695457,1365530707,1072944312,3432166056,1072960798,2622857553,1073313516,1661163016,1072870684,1965792142,1073718057,1338131061,1073199701,4154231727,1073437010,1001715446,1073697725,2117057298,1073430415,2036628273,1073553267,3323405507,1073198536,545515120,1072909850,439519564,1073480932,2358049172,1073663737,3783586707,1073360061,2947758363,1073324660,1265973140,1073428829,2498489974,1072776520,954937024,1072957838,2187386820,1073403108,3189979293,1073069112,1669992795,1073133785,3717156109,1073030212,796454452,1073530641,3284256525,1073296768,3433531503,1073037934,484020502,1073712131,3625560580,1073236019,3757124903,1072806305,2463458990,1073645133,954281281,1073479412,1861076104,1073218906,2401068099,1073232637,892395097,1073649256,3637830876,1073448342,2079555611,1073308763,2254212394,1073557921,1095880965,1073439992,2733117083,1072849173,2535978261,1073557334,2517735963,1073280304,631174501,1073378394,1831607011,1072714163,3575835786,1073450903,1596019424,1073473915,983801082,1072993075,2911964491,1073592666,128874615,1073243421,2657103436,1073695530,1235138404,1072951561,1609929604,1072930395,2816592934,1073696169,3161789173,1073326027,1081032139,1073207321,2295362066,1073153679,2469846436,1072829984,1571124320,1073665630,1744574591,1072799682,4239758944,1073034843,2173140260,1073113142,1920925868,1073118614,3883812207,1073111601,72476458,1073630809,734738916,1072815100,1412951256,1072919348,4168783586,1072821724,1646049347,1072847729,1309086505,1073058582,2193856426,1073243283,231319820,1072842560,4148992360,1072999919,1611019088,1073249320,3366616615,1073445042,3662038791,1072950753,1616762589,1073299230,701952342,1073621058,3068631378,1073001816,2195771627,1073563871,4099365294,1073415496,196326096,1072756735,970501878,1073534641,2787176770,1073061502,98563788,1073522272,74003588,1073210537,3620174911,1073023002,1860013769,1073454271,1812320306,1072703000,3021039054,1073277873,3125026173,1073660314,828536771,1073055792,609518019,1073495493,1661909956,1073339320,1668425205,1072880999,2209618016,1073090340,1162450271,1072776177,4182590788,1073285351,730293221,1072942785,2723117139,1073397039,750084791,1073383256,2830387601,1073157639,1059186648,1073474199,220746646,1073587917,2353530561,1072946167,3922659499,1072731357,1920029493,1073170071,4244615948,1073547834,1850015709,1073677891,1870802260,1073583369,2970380973,1073157074,2161518767,1073029764,809972376,1072957132,2252946544,1073264736,4012356192,1072699573,2522853983,1073595164,1776375492,1073061899,761012489,1073504002,3517909283,1073330875,4010799110,1073197912,2148045415,1073534830,2210430992,1073348907,1508237144,1073464461,173634216,1073325059,2564764239,1073201726,1926987695,1072846067,2610351516,1072988291,3212415504,1072935110,4212975750,1073561063,1632696600,1073102326,1672585072,1072955186,3499542950,1072941787,4155693124,1073487842,2123030827,1072828529,3620546496,1073662590,2173720898,1073242931,3449272499,1073726401,3694870513,1073730032,1534566768,1073018658,2353575862,1072935851,2704379496,1073159582,3975451328,1072886039,2921816484,1072701763,3348825575,1072919822,1603573900,1073320598,2026311488,1073373526,3801692642,1073591015,2344337092,1072780456,3990407304,1073169149,1259304547,1073222988,3163433159,1072714671,771973281,1072874756,1837803549,1072887393,2559694029,1073580119,3572335211,1073220454,826441374,1072978077,1308554372,1073365674,3598558187,1073284353,4235806020,1072751221,4292641945,1073533272,1568269288,1072846337,2705261378,1073511528,2250280684,1073328002,666316820,1073096056,2983347578,1073177843,2203402738,1072825551,1437904140,1072841314,1166397664,1073497185,2374443701,1072902431,1210896726,1073068818,2614270572,1073438466,1359347168,1073729356,2865180584,1073557977,3439311161,1072982841,3651614549,1073492607,2323842989,1073054612,888312499,1073461923,1690588,1073384716,3557355698,1073456962,1875235826,1073437457,4023395779,1072805725,2095214301,1072715612,2627579008,1072751815,4172478542,1073148130,997251113,1073679719,147663499,1073338250,2798470660,1073003608,1486957908,1073608644,3831751773,1072890104,3647664156,1073632065,2672983984,1073406245,596225943,1073672650,2803798684,1073069083,987440599,1072900097,265746779,1073729125,2710593339,1073435213,843041260,1073261599,537760487,1073071310,1355615652,1073638572,1650582064,1073608442,3433246482,1073029224,1626573923,1073738025,4067700234,1073020201,37082869,1072924618,2874522308,1073060093,4044051822,1073688645,4098553756,1072743296,3031111805,1072776224,4195959468,1072756886,3177294151,1072743125,1083186096,1073107511,1698665719,1073606976,1130196376,1072701384,2341458683,1073703363,2235791467,1072850973,894367578,1073498850,1316199924,1073238528,4293672883,1073047079,1336794804,1073552827,2125403925,1073121870,3671377193,1072706028,177256501,1073221362,3977472339,1073001678,1902159692,1072934144,1859737948,1073577070,3647856985,1073350011,1572562071,1072815970,4026802472,1072697694,550731272,1072793812,4161792649,1073127694,1695287479,1072946669,2606795676,1073425486,2679756001,1073525076,734464784,1073023893,1494575934,1073219078,3926856252,1073671702,1544694344,1073711624,1449200151,1072918900,2977290261,1073075270,594012026,1073441877,4116560245,1073362272,2165186213,1073601358,929233982,1073198907,260907278,1072765928,3534839526,1073210050,1911061793,1072785643,821107272,1073249458,1460412131,1073646105,2975675436,1073124664,612130006,1072854880,540108154,1073163572,2674886945,1072902469,3564824478,1073246504,3155639637,1073210517,3119882177,1072998679,338002372,1073071049,2873848423,1073329628,127904902,1073275928,3608826199,1073272089,4187153180,1073322729,3297601273,1073640905,1018868165,1072922083,1805443876,1073253924,4293168844,1072947502,2640792626,1073137011,969673456,1072840042,396126515,1073570548,255789181,1073694662,2486681799,1073530605,2817893679,1073487349,1487157741,1073339542,1896383174,1073700597,115768796,1072744943,3628756266,1073544785,704877892,1073156789,774677333,1073252528,2723018129,1072821314,2879470297,1073454638,828560609,1073677099,1923681570,1072799581,1872567119,1073627172,811678637,1073255916,3879187146,1073001042,2120283879,1073599299,3133047086,1073351598,2327443823,1072899810,397657556,1072910826,3094752120,1073738407,4061114503,1072694751,4096421460,1073021696,3053100338,1072714198,348936412,1072747253,3738288559,1072902973,1413993209,1072723334,2403601698,1073282574,1218530455,1073395965,749107289,1073280203,3347652542,1073314946,3050642155,1073333974,593598364,1073179471,1235246650,1073078808,3933306805,1073630656,721268809,1073650730,2506656982,1072820855,3552260260,1072798450,1507599986,1072861189,903705278,1073472358,2173196567,1072848163,2286506124,1073400193,2864658807,1072945133,2143581820,1073282021,3141578166,1073210173,1806190664,1073342267,699502963,1073310106,3941107913,1073486583,1743639782,1072776463,2979426022,1072887923]#768, index=0) analytical = [a,b,c]->[a+b+c,a-b*c,(a+2*b^2+3*c^3)/6] generalizedLinearModelResult = GeneralLinearModelResult(covariance models=ExponentialModel(scale=[1], amplitude=[1], no spatial correlation), basis=[], trend coefficients=[]) kDTree = class=KDTree root=class=KDNode index=5 left=class=KDNode index=4 left=NULL right=class=KDNode index=6 left=NULL right=class=KDNode index=2 left=NULL right=NULL right=class=KDNode index=7 left=class=KDNode index=0 left=NULL right=class=KDNode index=1 left=NULL right=NULL right=class=KDNode index=9 left=NULL right=class=KDNode index=8 left=NULL right=class=KDNode index=3 left=NULL right=NULL openturns-1.9/python/test/t_Study_saveload.py000077500000000000000000000201051307543307100216070ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import openturns.testing import os ot.TESTPREAMBLE() try: fileName = 'myStudy.xml' # Create a Study Object myStudy = ot.Study() myStudy.setStorageManager(ot.XMLStorageManager(fileName)) # Add a PersistentObject to the Study (here a Point) p1 = ot.Point(3, 0.) p1.setName('Good') p1[0] = 10. p1[1] = 11. p1[2] = 12. myStudy.add(p1) # Add another PersistentObject to the Study (here a Sample) s1 = ot.Sample(3, 2) s1.setName('mySample') p2 = ot.Point(2, 0.) p2.setName('One') p2[0] = 100. p2[1] = 200. s1[0] = p2 p3 = ot.Point(2, 0.) p3.setName('Two') p3[0] = 101. p3[1] = 201. s1[1] = p3 p4 = ot.Point(2, 0.) p4.setName('Three') p4[0] = 102. p4[1] = 202. s1[2] = p4 myStudy.add('mySample', s1) # Add a point with a description pDesc = ot.PointWithDescription(p1) desc = pDesc.getDescription() desc[0] = 'x' desc[1] = 'y' desc[2] = 'z' pDesc.setDescription(desc) myStudy.add(pDesc) # Add a matrix matrix = ot.Matrix(2, 3) matrix[0, 0] = 0 matrix[0, 1] = 1 matrix[0, 2] = 2 matrix[1, 0] = 3 matrix[1, 1] = 4 matrix[1, 2] = 5 myStudy.add('m', matrix) # Create a Point that we will try to reinstaciate after reloading point = ot.Point(2, 1000.) point.setName('point') myStudy.add('point', point) # Create a Simulation::Result simulationResult = ot.SimulationResult(ot.Event(), 0.5, 0.01, 150, 4) myStudy.add('simulationResult', simulationResult) cNameList = [ 'MonteCarlo', 'LHS', 'QuasiMonteCarlo', 'RandomizedQuasiMonteCarlo', 'DirectionalSampling', 'RandomizedLHS', 'SimulationSensitivityAnalysis'] for cName in cNameList: otClass = getattr(ot, cName) instance = otClass() myStudy.add(cName, instance) # Create a Beta distribution beta = ot.Beta(3.0, 5.0, -1.0, 4.0) myStudy.add('beta', beta) # Create an analytical Function input = ot.Description(3) input[0] = 'a' input[1] = 'b' input[2] = 'c' output = ot.Description(3) output[0] = 'squaresum' output[1] = 'prod' output[2] = 'complex' formulas = ot.Description(output.getSize()) formulas[0] = 'a+b+c' formulas[1] = 'a-b*c' formulas[2] = '(a+2*b^2+3*c^3)/6' analytical = ot.Function(input, output, formulas) analytical.setName('analytical') myStudy.add('analytical', analytical) # Create a TaylorExpansionMoments algorithm antecedent = ot.RandomVector( ot.IndependentCopula(analytical.getInputDimension())) antecedent.setName('antecedent') composite = ot.RandomVector(analytical, antecedent) composite.setName('composite') taylorExpansionsMoments = ot.TaylorExpansionMoments(composite) taylorExpansionsMoments.setName('taylorExpansionsMoments') taylorExpansionsMoments.getMeanFirstOrder() taylorExpansionsMoments.getMeanSecondOrder() taylorExpansionsMoments.getCovariance() myStudy.add('taylorExpansionsMoments', taylorExpansionsMoments) # Create a FORMResult input2 = ot.Description(2) input2[0] = 'x' input2[1] = 'y' output2 = ot.Description(1) output2[0] = 'd' formula2 = ot.Description(1) formula2[0] = 'y^2-x' model = ot.Function(input2, output2, formula2) model.setName('sum') input3 = ot.RandomVector(ot.Normal(2)) input3.setName('input') output3 = ot.RandomVector(model, input3) output3.setName('output') event = ot.Event(output3, ot.Greater(), 1.0) event.setName('failureEvent') designPoint = ot.Point(2, 0.0) designPoint[0] = 1.0 formResult = ot.FORMResult(ot.Point(2, 1.0), event, False) formResult.setName('formResult') formResult.getImportanceFactors() formResult.getEventProbabilitySensitivity() myStudy.add('formResult', formResult) # Create a SORMResult sormResult = ot.SORMResult([1.0] * 2, event, False) sormResult.setName('sormResult') sormResult.getEventProbabilityBreitung() sormResult.getEventProbabilityHohenBichler() sormResult.getEventProbabilityTvedt() sormResult.getGeneralisedReliabilityIndexBreitung() sormResult.getGeneralisedReliabilityIndexHohenBichler() sormResult.getGeneralisedReliabilityIndexTvedt() myStudy.add('sormResult', sormResult) # Create a RandomGeneratorState ot.RandomGenerator.SetSeed(0) randomGeneratorState = ot.RandomGeneratorState( ot.RandomGenerator.GetState()) myStudy.add('randomGeneratorState', randomGeneratorState) # Create a GeneralLinearModelResult generalizedLinearModelResult = ot.GeneralLinearModelResult() generalizedLinearModelResult.setName('generalizedLinearModelResult') myStudy.add('generalizedLinearModelResult', generalizedLinearModelResult) # KDTree sample = ot.Normal(3).getSample(10) kDTree = ot.KDTree(sample) myStudy.add('kDTree', kDTree) # TensorApproximationAlgorithm/Result dim = 1 model = ot.Function(['x'], ['y'], ['x*sin(x)']) distribution = ot.ComposedDistribution([ot.Uniform()] * dim) factoryCollection = [ot.FourierSeriesFactory()] * dim functionFactory = ot.OrthogonalProductFunctionFactory(factoryCollection) size = 10 X = distribution.getSample(size) Y = model(X) nk = [5] * dim rank = 1 algo = ot.TensorApproximationAlgorithm( X, Y, distribution, functionFactory, nk, rank) algo.run() tensorResult = algo.getResult() myStudy.add('tensorResult', tensorResult) tensorIn = [0.4] tensorRef = tensorResult.getMetaModel()(tensorIn) # print 'Study = ' , myStudy myStudy.save() # Create a new Study Object myStudy = ot.Study() myStudy.setStorageManager(ot.XMLStorageManager(fileName)) myStudy.load() # print 'loaded Study = ' , myStudy # Create a Point from the one stored in the Study point = ot.Point() myStudy.fillObject('point', point) print('point = ', repr(point)) # Create a Sample from the one stored in the Study sample = ot.Sample() myStudy.fillObject('mySample', sample) print('sample = ', repr(sample)) # Create a Matrix from the one stored in the Study matrix = ot.Matrix() myStudy.fillObject('m', matrix) print('matrix = ', repr(matrix)) # Create a Simulation::Result from the one stored in the Study simulationResult = ot.SimulationResult() myStudy.fillObject('simulationResult', simulationResult) print('simulation result = ', simulationResult) for cName in cNameList: otClass = getattr(ot, cName) instance = otClass() saved = repr(instance) myStudy.fillObject(cName, instance) loaded = repr(instance) if saved != loaded: print('saved=', saved) print('loaded=', loaded) # Create a Beta distribution from the one stored in the Study beta = ot.Beta() myStudy.fillObject('beta', beta) print('beta = ', beta) randomGeneratorState = ot.RandomGeneratorState() myStudy.fillObject('randomGeneratorState', randomGeneratorState) print('randomGeneratorState = ', randomGeneratorState) # Create an analytical Function from the one stored in the # Study analytical = ot.Function() myStudy.fillObject('analytical', analytical) print('analytical = ', analytical) # Create a GeneralLinearModelResult from the one stored in the Study generalizedLinearModelResult = ot.GeneralLinearModelResult() myStudy.fillObject('generalizedLinearModelResult', generalizedLinearModelResult) print('generalizedLinearModelResult = ', generalizedLinearModelResult) # KDTree kDTree = ot.KDTree() myStudy.fillObject('kDTree', kDTree) print('kDTree = ', kDTree) # Tensor tensorResult = ot.MetaModelResult() myStudy.fillObject('tensorResult', tensorResult) ot.testing.assert_almost_equal( tensorResult.getMetaModel()(tensorIn), tensorRef) # cleanup os.remove(fileName) except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_SubsetSampling_R-S.expout000066400000000000000000000022071307543307100231360ustar00rootroot00000000000000 ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 2.00000e-04 Pf Variance estimation = 1.99960e-10 CoV = 0.07070 90% Confidence Interval = 4.65188e-05 CI at 90% =[ 1.76741e-04 ; 2.23259e-04 ] Limit state calls = 1000000 ************************************************************************************************ ************************************************************************************************ ******************************************* SUBSET SAMPLING ********************************************** ************************************************************************************************ Pf estimation = 2.02700e-04 Pf Variance estimation = 3.01140e-10 CoV = 0.08561 90% Confidence Interval = 5.70876e-05 CI at 90% =[ 1.74156e-04 ; 2.31244e-04 ] Limit state calls = 40000 ************************************************************************************************ openturns-1.9/python/test/t_SubsetSampling_R-S.py000077500000000000000000000057101307543307100222470ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function, division import openturns as ot # # Physical model # limitState = ot.Function(['u1', 'u2'], ['g'], ['u1-u2']) dim = limitState.getInputDimension() # # Probabilistic model # mean = ot.Point(dim, 0.0) mean[0] = 7. mean[1] = 2. sigma = ot.Point(dim, 1.0) R = ot.IdentityMatrix(dim) myDistribution = ot.Normal(mean, sigma, R) # # Limit state # vect = ot.RandomVector(myDistribution) output = ot.RandomVector(limitState, vect) myEvent = ot.Event(output, ot.Less(), 0.0) # # Computation # bs = 1 # Monte Carlo myMC = ot.MonteCarlo(myEvent) myMC.setMaximumOuterSampling(int(1e6) // bs) myMC.setBlockSize(bs) myMC.setMaximumCoefficientOfVariation(-1.0) myMC.run() # # SubsetSampling mySS = ot.SubsetSampling(myEvent) mySS.setMaximumOuterSampling(10000 // bs) mySS.setBlockSize(bs) mySS.run() # # Results # # Monte Carlo resultMC = myMC.getResult() PFMC = resultMC.getProbabilityEstimate() CVMC = resultMC.getCoefficientOfVariation() variance_PF_MC = resultMC.getVarianceEstimate() length90MC = resultMC.getConfidenceLength(0.90) N_MC = resultMC.getOuterSampling() * resultMC.getBlockSize() # # SubsetSampling resultSS = mySS.getResult() PFSS = resultSS.getProbabilityEstimate() CVSS = resultSS.getCoefficientOfVariation() variance_PF_SS = resultSS.getVarianceEstimate() length90SS = resultSS.getConfidenceLength(0.90) N_SS = resultSS.getOuterSampling() * resultSS.getBlockSize() # print('') print( '************************************************************************************************') print( '**************************************** MONTE CARLO *******************************************') print( '************************************************************************************************') print('Pf estimation = %.5e' % PFMC) print('Pf Variance estimation = %.5e' % variance_PF_MC) print('CoV = %.5f' % CVMC) print('90% Confidence Interval =', '%.5e' % length90MC) print('CI at 90% =[', '%.5e' % (PFMC - 0.5 * length90MC), '; %.5e' % (PFMC + 0.5 * length90MC), ']') print('Limit state calls =', N_MC) print( '************************************************************************************************') print('') print( '************************************************************************************************') print( '******************************************* SUBSET SAMPLING **********************************************') print( '************************************************************************************************') print('Pf estimation = %.5e' % PFSS) print('Pf Variance estimation = %.5e' % variance_PF_SS) print('CoV = %.5f' % CVSS) print('90% Confidence Interval =', '%.5e' % length90SS) print('CI at 90% =[', '%.5e' % (PFSS - 0.5 * length90SS), '; %.5e' % (PFSS + 0.5 * length90SS), ']') print('Limit state calls =', N_SS) print( '************************************************************************************************') print('') openturns-1.9/python/test/t_SubsetSampling_Waarts_system_series.expout000066400000000000000000000022071307543307100267540ustar00rootroot00000000000000 ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 2.21600e-03 Pf Variance estimation = 2.21109e-09 CoV = 0.02122 90% Confidence Interval = 1.54689e-04 CI at 90% =[ 2.13866e-03 ; 2.29334e-03 ] Limit state calls = 1000000 ************************************************************************************************ ************************************************************************************************ ******************************************* SUBSET SAMPLING ********************************************** ************************************************************************************************ Pf estimation = 2.10600e-03 Pf Variance estimation = 1.78738e-08 CoV = 0.06348 90% Confidence Interval = 4.39810e-04 CI at 90% =[ 1.88609e-03 ; 2.32591e-03 ] Limit state calls = 30000 ************************************************************************************************ openturns-1.9/python/test/t_SubsetSampling_Waarts_system_series.py000077500000000000000000000061421307543307100260650ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function, division import openturns as ot # # Physical model # formulas = [ 'min(0.1 * (u1 - u2)^2.0 - (u1 + u2) / sqrt(2.0) + 3.0, 0.1 * (u1 - u2)^2.0 + (u1 + u2) / sqrt(2.0) + 3.0, u1 - u2 + 3.5 * sqrt(2.0), -u1 + u2 + 3.5 * sqrt(2.0))'] limitState = ot.Function(['u1', 'u2'], ['g'], formulas) dim = limitState.getInputDimension() # # Probabilistic model # mean = ot.Point(dim, 0.0) sigma = ot.Point(dim, 1.0) R = ot.IdentityMatrix(dim) myDistribution = ot.Normal(mean, sigma, R) # # Limit state # vect = ot.RandomVector(myDistribution) output = ot.RandomVector(limitState, vect) myEvent = ot.Event(output, ot.Less(), 0.0) # # Computation # bs = 1 # Monte Carlo myMC = ot.MonteCarlo(myEvent) myMC.setMaximumOuterSampling(int(1e6) // bs) myMC.setBlockSize(bs) myMC.setMaximumCoefficientOfVariation(-1.0) myMC.run() # # SubsetSampling mySS = ot.SubsetSampling(myEvent) mySS.setMaximumOuterSampling(10000 // bs) mySS.setBlockSize(bs) mySS.run() # # Results # # Monte Carlo resultMC = myMC.getResult() PFMC = resultMC.getProbabilityEstimate() CVMC = resultMC.getCoefficientOfVariation() variance_PF_MC = resultMC.getVarianceEstimate() length90MC = resultMC.getConfidenceLength(0.90) N_MC = resultMC.getOuterSampling() * resultMC.getBlockSize() # # SubsetSampling resultSS = mySS.getResult() PFSS = resultSS.getProbabilityEstimate() CVSS = resultSS.getCoefficientOfVariation() variance_PF_SS = resultSS.getVarianceEstimate() length90SS = resultSS.getConfidenceLength(0.90) N_SS = resultSS.getOuterSampling() * resultSS.getBlockSize() # print('') print( '************************************************************************************************') print( '**************************************** MONTE CARLO *******************************************') print( '************************************************************************************************') print('Pf estimation = %.5e' % PFMC) print('Pf Variance estimation = %.5e' % variance_PF_MC) print('CoV = %.5f' % CVMC) print('90% Confidence Interval =', '%.5e' % length90MC) print('CI at 90% =[', '%.5e' % (PFMC - 0.5 * length90MC), '; %.5e' % (PFMC + 0.5 * length90MC), ']') print('Limit state calls =', N_MC) print( '************************************************************************************************') print('') print( '************************************************************************************************') print( '******************************************* SUBSET SAMPLING **********************************************') print( '************************************************************************************************') print('Pf estimation = %.5e' % PFSS) print('Pf Variance estimation = %.5e' % variance_PF_SS) print('CoV = %.5f' % CVSS) print('90% Confidence Interval =', '%.5e' % length90SS) print('CI at 90% =[', '%.5e' % (PFSS - 0.5 * length90SS), '; %.5e' % (PFSS + 0.5 * length90SS), ']') print('Limit state calls =', N_SS) print( '************************************************************************************************') print('') openturns-1.9/python/test/t_SymbolicEvaluation_std.expout000066400000000000000000000003121307543307100241730ustar00rootroot00000000000000evaluation= [x0,x1,x2]->[x0^2+2*x1+3*x2^3,cos(x0-sin(x1 * x2))] value at [-1.0, 4.0, -4.0] = [-183,0.279135] marginal 0 = [x0,x1,x2]->[x0^2+2*x1+3*x2^3] marginal 1 = [x0,x1,x2]->[cos(x0-sin(x1 * x2))] openturns-1.9/python/test/t_SymbolicEvaluation_std.py000077500000000000000000000011051307543307100233030ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: evaluation = SymbolicEvaluation( ["x0", "x1", "x2"], ["y0", "y1"], ["x0^2+2*x1+3*x2^3", "cos(x0-sin(x1 * x2))"]) point = [-1.0, 4.0, -4.0] print("evaluation=", evaluation) print("value at ", point, "=", evaluation(point)) for i in range(evaluation.getOutputDimension()): print("marginal", i, "=", evaluation.getMarginal(i)) except: import sys print("t_SymbolicEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SymbolicFunction_std.expout000066400000000000000000000122631307543307100236610ustar00rootroot00000000000000f= [x]->[2.0*sin(x)] f( 0.4 )=7.7884e-01 df( 0.4 )=1.8421e+00 df (FD)=1.8421e+00 d2f( 0.4 )=-7.7884e-01 d2f (FD)=-7.7884e-01 f= [x]->[2.0*cos(x)] f( 0.4 )=1.8421e+00 df( 0.4 )=-7.7884e-01 df (FD)=-7.7884e-01 d2f( 0.4 )=-1.8421e+00 d2f (FD)=-1.8421e+00 f= [x]->[2.0*tan(x)] f( 0.4 )=8.4559e-01 df( 0.4 )=2.3575e+00 df (FD)=2.3575e+00 d2f( 0.4 )=1.9935e+00 d2f (FD)=1.9935e+00 f= [x]->[2.0*asin(x)] f( 0.4 )=8.2303e-01 df( 0.4 )=2.1822e+00 df (FD)=2.1822e+00 d2f( 0.4 )=1.0391e+00 d2f (FD)=1.0391e+00 f= [x]->[2.0*acos(x)] f( 0.4 )=2.3186e+00 df( 0.4 )=-2.1822e+00 df (FD)=-2.1822e+00 d2f( 0.4 )=-1.0391e+00 d2f (FD)=-1.0391e+00 f= [x]->[2.0*atan(x)] f( 0.4 )=7.6101e-01 df( 0.4 )=1.7241e+00 df (FD)=1.7241e+00 d2f( 0.4 )=-1.1891e+00 d2f (FD)=-1.1891e+00 f= [x]->[2.0*sinh(x)] f( 0.4 )=8.2150e-01 df( 0.4 )=2.1621e+00 df (FD)=2.1621e+00 d2f( 0.4 )=8.2150e-01 d2f (FD)=8.2150e-01 f= [x]->[2.0*cosh(x)] f( 0.4 )=2.1621e+00 df( 0.4 )=8.2150e-01 df (FD)=8.2150e-01 d2f( 0.4 )=2.1621e+00 d2f (FD)=2.1621e+00 f= [x]->[2.0*tanh(x)] f( 0.4 )=7.5990e-01 df( 0.4 )=1.7113e+00 df (FD)=1.7113e+00 d2f( 0.4 )=-1.3004e+00 d2f (FD)=-1.3004e+00 f= [x]->[2.0*asinh(x)] f( 0.4 )=7.8007e-01 df( 0.4 )=1.8570e+00 df (FD)=1.8570e+00 d2f( 0.4 )=-6.4033e-01 d2f (FD)=-6.4033e-01 f= [x]->[2.0*acosh(x)] f( 1.4 )=1.7340e+00 df( 1.4 )=2.0412e+00 df (FD)=2.0412e+00 d2f( 1.4 )=-2.9768e+00 d2f (FD)=-2.9768e+00 f= [x]->[2.0*atanh(x)] f( 0.4 )=8.4730e-01 df( 0.4 )=2.3810e+00 df (FD)=2.3810e+00 d2f( 0.4 )=2.2676e+00 d2f (FD)=2.2676e+00 f= [x]->[2.0*log2(x)] f( 0.4 )=-2.6439e+00 df( 0.4 )=7.2135e+00 df (FD)=7.2135e+00 d2f( 0.4 )=-1.8034e+01 d2f (FD)=-1.8034e+01 f= [x]->[2.0*log10(x)] f( 0.4 )=-7.9588e-01 df( 0.4 )=2.1715e+00 df (FD)=2.1715e+00 d2f( 0.4 )=-5.4287e+00 d2f (FD)=-5.4287e+00 f= [x]->[2.0*log(x)] f( 0.4 )=-1.8326e+00 df( 0.4 )=5.0000e+00 df (FD)=5.0000e+00 d2f( 0.4 )=-1.2500e+01 d2f (FD)=-1.2500e+01 f= [x]->[2.0*ln(x)] f( 0.4 )=-1.8326e+00 df( 0.4 )=5.0000e+00 df (FD)=5.0000e+00 d2f( 0.4 )=-1.2500e+01 d2f (FD)=-1.2500e+01 f= [x]->[2.0*lngamma(x)] f( 0.4 )=1.5934e+00 df( 0.4 )=-5.1228e+00 df (FD)=-5.1228e+00 d2f( 0.4 )=1.4551e+01 d2f (FD)=1.4551e+01 f= [x]->[2.0*gamma(x)] f( 0.4 )=4.4363e+00 df( 0.4 )=-1.1363e+01 df (FD)=-1.1363e+01 d2f( 0.4 )=6.1381e+01 d2f (FD)=6.1381e+01 f= [x]->[2.0*exp(x)] f( 0.4 )=2.9836e+00 df( 0.4 )=2.9836e+00 df (FD)=2.9836e+00 d2f( 0.4 )=2.9836e+00 d2f (FD)=2.9836e+00 f= [x]->[2.0*erf(x)] f( 0.4 )=8.5678e-01 df( 0.4 )=1.9231e+00 df (FD)=1.9231e+00 d2f( 0.4 )=-1.5385e+00 d2f (FD)=-1.5385e+00 f= [x]->[2.0*erfc(x)] f( 0.4 )=1.1432e+00 df( 0.4 )=-1.9231e+00 df (FD)=-1.9231e+00 d2f( 0.4 )=1.5385e+00 d2f (FD)=1.5385e+00 f= [x]->[2.0*sqrt(x)] f( 0.4 )=1.2649e+00 df( 0.4 )=1.5811e+00 df (FD)=1.5811e+00 d2f( 0.4 )=-1.9764e+00 d2f (FD)=-1.9764e+00 f= [x]->[2.0*cbrt(x)] f( 0.4 )=1.4736e+00 df( 0.4 )=1.2280e+00 df (FD)=1.2280e+00 d2f( 0.4 )=-2.0467e+00 d2f (FD)=-2.0467e+00 f= [x]->[2.0*besselJ0(x)] f( 0.4 )=1.9208e+00 df( 0.4 )=-3.9205e-01 df (FD)=-3.9205e-01 d2f( 0.4 )=-9.4066e-01 d2f (FD)=-9.4066e-01 f= [x]->[2.0*besselJ1(x)] f( 0.4 )=3.9205e-01 df( 0.4 )=9.4066e-01 df (FD)=9.4066e-01 d2f( 0.4 )=-2.9338e-01 d2f (FD)=-2.9338e-01 f= [x]->[2.0*besselY0(x)] f( 0.4 )=-1.2120e+00 df( 0.4 )=3.5617e+00 df (FD)=3.5617e+00 d2f( 0.4 )=-7.6923e+00 d2f (FD)=-7.6923e+00 f= [x]->[2.0*besselY1(x)] f( 0.4 )=-3.5617e+00 df( 0.4 )=7.6923e+00 df (FD)=7.6923e+00 d2f( 0.4 )=-3.7930e+01 d2f (FD)=-3.7930e+01 f= [x]->[2.0*sign(x)] f( 0.4 )=2.0000e+00 df( 0.4 )=0.0000e+00 df (FD)=0.0000e+00 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*rint(x)] f( 0.4 )=0.0000e+00 df( 0.4 )=0.0000e+00 df (FD)=0.0000e+00 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*abs(x)] f( 0.4 )=8.0000e-01 df( 0.4 )=2.0000e+00 df (FD)=2.0000e+00 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*min(x)] f( 0.4 )=8.0000e-01 df( 0.4 )=1.0000e+00 df (FD)=2.0000e+00 GRADIENT ERROR! check min gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*max(x)] f( 0.4 )=8.0000e-01 df( 0.4 )=1.0000e+00 df (FD)=2.0000e+00 GRADIENT ERROR! check max gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*sum(x)] f( 0.4 )=8.0000e-01 df( 0.4 )=1.0000e+00 df (FD)=2.0000e+00 GRADIENT ERROR! check sum gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*avg(x)] f( 0.4 )=8.0000e-01 df( 0.4 )=1.0000e+00 df (FD)=2.0000e+00 GRADIENT ERROR! check avg gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*floor(x)] f( 0.4 )=0.0000e+00 df( 0.4 )=1.0000e+00 df (FD)=0.0000e+00 GRADIENT ERROR! check floor gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*ceil(x)] f( 0.4 )=2.0000e+00 df( 0.4 )=1.0000e+00 df (FD)=0.0000e+00 GRADIENT ERROR! check ceil gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*trunc(x)] f( 0.4 )=0.0000e+00 df( 0.4 )=1.0000e+00 df (FD)=0.0000e+00 GRADIENT ERROR! check trunc gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 f= [x]->[2.0*round(x)] f( 0.4 )=0.0000e+00 df( 0.4 )=1.0000e+00 df (FD)=0.0000e+00 GRADIENT ERROR! check round gradient, err=1 d2f( 0.4 )=0.0000e+00 d2f (FD)=0.0000e+00 marginal 0= [x0,x1]->[x0+x1] marginal 1= [x0,x1]->[x0-x1] First reference value : 2.8794e+00 First result calculated : 2.8794e+00 Constants: [3.14159,2.71828] empty eval [] OK openturns-1.9/python/test/t_SymbolicFunction_std.py000077500000000000000000000102211307543307100227600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m elementaryFunctions = ['sin', 'cos', 'tan'] elementaryFunctions.append('asin') elementaryFunctions.append('acos') elementaryFunctions.append('atan') elementaryFunctions.append('sinh') elementaryFunctions.append('cosh') elementaryFunctions.append('tanh') elementaryFunctions.append('asinh') elementaryFunctions.append('acosh') elementaryFunctions.append('atanh') elementaryFunctions.append('log2') elementaryFunctions.append('log10') elementaryFunctions.append('log') elementaryFunctions.append('ln') elementaryFunctions.append('lngamma') elementaryFunctions.append('gamma') elementaryFunctions.append('exp') elementaryFunctions.append('erf') elementaryFunctions.append('erfc') elementaryFunctions.append('sqrt') elementaryFunctions.append('cbrt') elementaryFunctions.append('besselJ0') elementaryFunctions.append('besselJ1') elementaryFunctions.append('besselY0') elementaryFunctions.append('besselY1') elementaryFunctions.append('sign') elementaryFunctions.append('rint') elementaryFunctions.append('abs') elementaryFunctions.append('min') elementaryFunctions.append('max') elementaryFunctions.append('sum') elementaryFunctions.append('avg') elementaryFunctions.append('floor') elementaryFunctions.append('ceil') elementaryFunctions.append('trunc') elementaryFunctions.append('round') # Check the creation of the elementary functions for func in elementaryFunctions: x = [0.4] # acosh only defined for 1 <= x <= pi if func == 'acosh': x[0] = 1.4 f = ot.SymbolicFunction(['x'], ['2.0*' + func + '(x)']) print('f=', f) print('f(', x[0], ')=%.4e' % f(x)[0]) try: df = f.gradient(x)[0, 0] except: pass else: f.setGradient(ot.CenteredFiniteDifferenceGradient(ot.ResourceMap.GetAsScalar( 'CenteredFiniteDifferenceGradient-DefaultEpsilon'), f.getEvaluation())) df2 = f.gradient(x)[0, 0] print('df(', x[0], ')=%.4e' % df, 'df (FD)=%.4e' % df2) if abs(df) > 1e-5: err_g = abs(df2 / df - 1.) else: err_g = abs(df - df2) if err_g > 1e-5: print('GRADIENT ERROR! check ' + func + ' gradient, err=%.12g' % err_g) try: d2f = f.hessian(x)[0, 0, 0] except: pass else: f.setHessian(ot.CenteredFiniteDifferenceHessian(ot.ResourceMap.GetAsScalar( 'CenteredFiniteDifferenceHessian-DefaultEpsilon'), f.getEvaluation())) d2f2 = f.hessian(x)[0, 0, 0] print('d2f(', x[0], ')=%.4e' % d2f, 'd2f (FD)=%.4e' % d2f2) if abs(d2f) > 1e-5: err_h = abs(d2f2 / d2f - 1.) else: err_h = abs(d2f - d2f2) if err_h > 1e-4: print('HESSIAN ERROR! check ' + func + ' hessian, err=%.12g' % err_h) nmf = ot.SymbolicFunction(['x0', 'x1'], ['x0+x1', 'x0-x1']) marginal0 = nmf.getMarginal(0) marginal1 = nmf.getMarginal(1) print('marginal 0=', marginal0) print('marginal 1=', marginal1) # test sample as input of a function formula = ['sin(xi1) + 7. * (sin(xi2)) ^ 2 + 0.1 * xi3^4 * sin(xi1)'] model = ot.SymbolicFunction(['xi1', 'xi2', 'xi3'], formula) # Create an input distribution to calculate reference values distribution = ot.ComposedDistribution([ot.Uniform(-m.pi, m.pi)] * 3) inSample = distribution.getSample(100) resultSample = model(inSample) refResultValues = [m.sin(inSample[i][0]) + 7.0 * (m.sin(inSample[i][1])) ** 2 + 0.1 * (inSample[i][2])**4 * m.sin(inSample[i][0]) for i in range(100)] print('First reference value : %.4e' % refResultValues[0]) print('First result calculated : %.4e' % resultSample[0][0]) model = ot.SymbolicFunction(['x'], ['_pi', '_e']) print('Constants:', model([0])) empty = model.getMarginal([]) x = [42.0] y = empty(x) print('empty eval', y) constants = ot.SymbolicFunction.GetValidConstants() assert len(constants) > 0, 'empty' funcs = ot.SymbolicFunction.GetValidFunctions() assert len(funcs) > 0, 'empty' ops = ot.SymbolicFunction.GetValidOperators() assert len(ops) > 0, 'empty' print('OK') # str ctor model = ot.SymbolicFunction('x', '3*x') assert model(x)[0] == 3.0 * x[0], 'str ctor eval' openturns-1.9/python/test/t_SymbolicGradient_std.expout000066400000000000000000000002171307543307100236250ustar00rootroot00000000000000gradient= | d(y0) / d(x0) = 2*x0 | d(y0) / d(x1) = 2 | d(y0) / d(x2) = 9*x2^2 value at point [-1.0, 4.0, -4.0] = [[ -2 ] [ 2 ] [ 144 ]] openturns-1.9/python/test/t_SymbolicGradient_std.py000077500000000000000000000007471307543307100227440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: evaluation = SymbolicEvaluation( ["x0", "x1", "x2"], ["y0"], ["x0^2+2*x1+3*x2^3"]) gradient = SymbolicGradient(evaluation) point = [-1.0, 4.0, -4.0] print("gradient=", gradient) print("value at point", point, "=", gradient.gradient(point)) except: import sys print("t_SymbolicGradient_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SymbolicHessian_std.expout000066400000000000000000000004131307543307100234600ustar00rootroot00000000000000hessian= | d^2(y0) / d(x0)^2 = 2 | d^2(y0) / d(x1)d(x0) = 0 | d^2(y0) / d(x1)^2 = 0 | d^2(y0) / d(x2)d(x0) = 0 | d^2(y0) / d(x2)d(x1) = 0 | d^2(y0) / d(x2)^2 = 18*x2 value at [-1.0, 4.0, -4.0] = sheet #0 [[ 2 0 0 ] [ 0 0 0 ] [ 0 0 -72 ]] openturns-1.9/python/test/t_SymbolicHessian_std.py000077500000000000000000000007321307543307100225730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: evaluation = SymbolicEvaluation( ["x0", "x1", "x2"], ["y0"], ["x0^2+2*x1+3*x2^3"]) hessian = SymbolicHessian(evaluation) point = [-1.0, 4.0, -4.0] print("hessian=", hessian) print("value at", point, "=", hessian.hessian(point)) except: import sys print("t_SymbolicHessian_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SymmetricMatrix_lapack.expout000066400000000000000000000011551307543307100241720ustar00rootroot00000000000000matrix1= [[ 1 5 ] [ 5 12 ]] matrix1= [[ 1 5 ] [ 5 12 ]] pt= [5,0] result= [-4.61538,1.92308] determinant= -13.0 result2= [[ -4.61538 -8.84615 -13.0769 ] [ 1.92308 3.76923 5.61538 ]] result2= [[ -4.61538 -8.84615 -13.0769 ] [ 1.92308 3.76923 5.61538 ]] ev= [-0.933034,13.933] ev= [-0.933034,13.933] evect= class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=matrix1 rows=2 columns=2 values=[-0.932722,0.360597,0.360597,0.932722] evect= [[ -0.932722 0.360597 ] [ 0.360597 0.932722 ]] matrix3= [[ 1 2 3 ] [ 2 2.5 -3.5 ] [ 3 -3.5 2.5 ]] det= -80.5 openturns-1.9/python/test/t_SymmetricMatrix_lapack.py000077500000000000000000000032241307543307100233000ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: matrix1 = SymmetricMatrix(2) matrix1.setName("matrix1") matrix1[0, 0] = 1.0 matrix1[1, 0] = 5.0 matrix1[1, 1] = 12.0 print("matrix1=", matrix1) print("matrix1=") print(matrix1.__str__()) pt = Point(0) pt.add(5.0) pt.add(0.0) print("pt=", pt) result = matrix1.solveLinearSystem(pt) print("result=", result) # print "verif. ", matrix1 * result - pt determinant = matrix1.computeDeterminant() print("determinant= %.1f" % determinant) b = Matrix(2, 3) b[0, 0] = 5.0 b[1, 0] = 0.0 b[0, 1] = 10.0 b[1, 1] = 1.0 b[0, 2] = 15.0 b[1, 2] = 2.0 result2 = Matrix() result2 = matrix1.solveLinearSystem(b) print("result2=", result2) print("result2=") print(result2.__str__()) ev = matrix1.computeEigenValues() print("ev=", ev) ev, evect = matrix1.computeEV() print("ev=", ev) print("evect=", repr(evect)) print("evect=") print(evect.__str__()) # Check the high dimension determinant computation matrix3 = SymmetricMatrix(3) matrix3[0, 0] = 1.0 matrix3[0, 1] = 2.0 matrix3[0, 2] = 3.0 matrix3[1, 1] = 2.5 matrix3[1, 2] = -3.5 matrix3[2, 2] = 2.5 print("matrix3=") print(matrix3.__str__()) # sign = 0.0 # value = matrix3.computeLogAbsoluteDeterminant(sign) # print "log(|det|)=", value, ", sign=", sign value = matrix3.computeDeterminant() print("det=", value) except: import sys print("t_SymmetricMatrixLapack_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SymmetricMatrix_std.expout000066400000000000000000000051451307543307100235340ustar00rootroot00000000000000test number zero : default constructor and string converter symmetricMatrix0 = class=SymmetricMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test number one : constructor with size, operator() and string converter symmetricMatrix1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] test number two : copy constructor and string converter symmetricMatrix2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] test number three : get dimensions methods symmetricMatrix1's nbRows = 2 symmetricMatrix1's nbColumns = 2 test number five : assignment method test number six : transposition method symmetricMatrix1 transposed = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] test number seven : addition method sum1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,6,0,8] sum2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,6,0,8] sum1 equals sum2 = True test number eight : substraction method diff = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,0,0,0] test number nine : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[10,15,15,25] test number ten : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = class=Point name=Unnamed dimension=2 values=[7,11] test number eleven : multiplication and division by a numerical scalar methods scalprod1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,9,9,12] scalprod3 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,9,9,12] scalprod1 equals scalprod3 = True scaldiv1 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,1,1.33333] scaldiv2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,1,1.33333] scaldiv1 equals scaldiv2 = True test number twelve : isEmpty method symmetricMatrix0 is empty = True symmetricMatrix1 is empty = False symmetricMatrix5 is empty = True openturns-1.9/python/test/t_SymmetricMatrix_std.py000077500000000000000000000107471307543307100226470ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor symmetricMatrix0 = SymmetricMatrix() # String converter print("symmetricMatrix0 = ", repr(symmetricMatrix0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size symmetricMatrix1 = SymmetricMatrix(2) # Check operator() methods symmetricMatrix1[0, 0] = 1. symmetricMatrix1[1, 0] = 2. symmetricMatrix1[0, 1] = 3. symmetricMatrix1[1, 1] = 4. # String converter print("symmetricMatrix1 = ", repr(symmetricMatrix1)) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER print("test number two : copy constructor and string converter") # Copy constructor symmetricMatrix2 = SymmetricMatrix(symmetricMatrix1) # String converter print("symmetricMatrix2 = ", repr(symmetricMatrix2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS print("test number three : get dimensions methods") # Get dimension methods print("symmetricMatrix1's nbRows = ", symmetricMatrix1.getNbRows()) print("symmetricMatrix1's nbColumns = ", symmetricMatrix1.getNbColumns()) # TEST NUMBER FIVE : ASSIGNMENT METHOD print("test number five : assignment method") # Assignment method # No sense with pyton # TEST NUMBER SIX : TRANSPOSITION METHOD print("test number six : transposition method") # Check transpose method symmetricMatrix4 = symmetricMatrix1.transpose() print("symmetricMatrix1 transposed = ", repr(symmetricMatrix4)) # TEST NUMBER SEVEN : ADDITION METHOD print("test number seven : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = symmetricMatrix1 + symmetricMatrix4 sum2 = symmetricMatrix4 + symmetricMatrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # TEST NUMBER EIGHT : SUBSTRACTION METHOD print("test number eight : substraction method") # Check substraction method diff = symmetricMatrix1 - symmetricMatrix4 print("diff = ", repr(diff)) # TEST NUMBER NINE : MATRIX MULTIPLICATION METHOD print("test number nine : matrix multiplication method") # Check multiplication method prod = symmetricMatrix1 * symmetricMatrix4 print("prod = ", repr(prod)) # TEST NUMBER TEN : MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test number ten : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = symmetricMatrix1 * pt print("ptResult = ", repr(ptResult)) # TEST NUMBER ELEVEN : MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR # METHODS print( "test number eleven : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. scalprod1 = symmetricMatrix1 * s # bug PYTHON scalprod2 = s * symmetricMatrix1 scalprod3 = symmetricMatrix1 * s print("scalprod1 = ", repr(scalprod1)) # print "scalprod2 = " , scalprod2 print("scalprod3 = ", repr(scalprod3)) # print "scalprod1 equals scalprod2 = " , (scalprod1 == scalprod2) print("scalprod1 equals scalprod3 = ", (scalprod1 == scalprod3)) # print "scalprod2 equals scalprod3 = " , (scalprod2 == scalprod3) # Check the division method scaldiv1 = symmetricMatrix1 / s scaldiv2 = symmetricMatrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # TEST NUMBER TWELVE : ISEMPTY METHOD print("test number twelve : isEmpty method") # Check method isEmpty symmetricMatrix5 = SymmetricMatrix() symmetricMatrix6 = SymmetricMatrix() print("symmetricMatrix0 is empty = ", symmetricMatrix0.isEmpty()) print("symmetricMatrix1 is empty = ", symmetricMatrix1.isEmpty()) print("symmetricMatrix5 is empty = ", symmetricMatrix5.isEmpty()) except: import sys print("t_SymmetricMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_SymmetricTensor_std.expout000066400000000000000000000033101307543307100235320ustar00rootroot00000000000000test number zero : default constructor and string converter symmetricTensor0 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter symmetricTensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] values = 1.000000 2.000000 2.000000 3.000000 4.000000 5.000000 5.000000 6.000000 7.000000 8.000000 8.000000 9.000000 test number two : copy constructor and string converter symmetricTensor2 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] test number three : get dimensions methods symmetricTensor1's nbRows = 2 symmetricTensor1's nbColumns = 2 symmetricTensor1's nbSheets = 3 test number four : assignment method test number five : isEmpty method symmetricTensor1 is empty = False symmetricTensor0 is empty = True symmetricTensor5 is empty = True symmetricTensor6 is empty = True symmetricTensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,0,3,4,5,0,6,7,8,0,9] symmetricTensor1.getSheet(1) = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[4,5,5,6] sheet2 = class=SymmetricMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.4,0.5,0,0.6] symmetricTensor1 = class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,0,3,0.4,0.5,0.5,0.6,7,8,0,9] openturns-1.9/python/test/t_SymmetricTensor_std.py000077500000000000000000000064421307543307100226520ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor symmetricTensor0 = SymmetricTensor() # String converter print("symmetricTensor0 = ", repr(symmetricTensor0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size symmetricTensor1 = SymmetricTensor(2, 3) # Check operator() methods symmetricTensor1[0, 0, 0] = 1. symmetricTensor1[1, 0, 0] = 2. symmetricTensor1[1, 1, 0] = 3. symmetricTensor1[0, 0, 1] = 4. symmetricTensor1[1, 0, 1] = 5. symmetricTensor1[1, 1, 1] = 6. symmetricTensor1[0, 0, 2] = 7. symmetricTensor1[1, 0, 2] = 8. symmetricTensor1[1, 1, 2] = 9. # String converter print("symmetricTensor1 = ", repr(symmetricTensor1)) print("values = %.6f" % symmetricTensor1[0, 0, 0], " %.6f" % symmetricTensor1[0, 1, 0], " %.6f" % symmetricTensor1[1, 0, 0], " %.6f" % symmetricTensor1[1, 1, 0], " %.6f" % symmetricTensor1[0, 0, 1], " %.6f" % symmetricTensor1[ 0, 1, 1], " %.6f" % symmetricTensor1[1, 0, 1], " %.6f" % symmetricTensor1[1, 1, 1], " %.6f" % symmetricTensor1[0, 0, 2], " %.6f" % symmetricTensor1[0, 1, 2], " %.6f" % symmetricTensor1[1, 0, 2], " %.6f" % symmetricTensor1[1, 1, 2]) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER print("test number two : copy constructor and string converter") # Copy constructor symmetricTensor2 = SymmetricTensor(symmetricTensor1) # String converter print("symmetricTensor2 = ", repr(symmetricTensor2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS print("test number three : get dimensions methods") # Get dimension methods print("symmetricTensor1's nbRows = ", symmetricTensor1.getNbRows()) print("symmetricTensor1's nbColumns = ", symmetricTensor1.getNbColumns()) print("symmetricTensor1's nbSheets = ", symmetricTensor1.getNbSheets()) # TEST NUMBER FOUR : ASSIGNMENT METHOD print("test number four : assignment method") # no sense with python # TEST NUMBER FIVE : ISEMPTY METHOD print("test number five : isEmpty method") # Check method isEmpty symmetricTensor5 = SymmetricTensor() symmetricTensor6 = SymmetricTensor() print("symmetricTensor1 is empty = ", symmetricTensor1.isEmpty()) print("symmetricTensor0 is empty = ", symmetricTensor0.isEmpty()) print("symmetricTensor5 is empty = ", symmetricTensor5.isEmpty()) print("symmetricTensor6 is empty = ", symmetricTensor6.isEmpty()) # TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS print("symmetricTensor1 = ", repr(symmetricTensor1)) sheet1 = symmetricTensor1.getSheet(1) print("symmetricTensor1.getSheet(1) = ", repr(sheet1)) sheet2 = SymmetricMatrix(2) sheet2[0, 0] = 0.4 sheet2[1, 0] = 0.5 sheet2[1, 1] = 0.6 print("sheet2 = ", repr(sheet2)) symmetricTensor1.setSheet(1, sheet2) print("symmetricTensor1 = ", repr(symmetricTensor1)) except: import sys print("t_SymmetricTensor_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TNC_std.expout000066400000000000000000000152161307543307100210170ustar00rootroot00000000000000algo= class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 result= [-3.0000,-3.0000,5.0000,-3.0000] multipliers= [-1.0000,-2.0000,0.0000,-4.0000,0.0000,0.0000,-3.0000,0.0000] algo= class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1+2*x2-3*x3+4*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[0,0,0,0] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 result= [5.0000,5.0000,-3.0000,5.0000] multipliers= [0.0000,0.0000,3.0000,0.0000,1.0000,2.0000,0.0000,4.0000] algo= class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=true dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[3,-2.5,4.5,-2.5] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 result= [3.4256,-3.0000,5.0000,-3.0000] multipliers= [0.0000,-10.0000,0.0000,-20.0000,0.0000,0.0000,-21.0000,0.0000] algo= class=TNC class=OptimizationAlgorithmImplementation problem=class=OptimizationProblem implementation=class=OptimizationProblemImplementation objective=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1] formulas=[x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4] equality constraint=none inequality constraint=none bounds=class=Interval name=Unnamed dimension=4 lower bound=class=Point name=Unnamed dimension=4 values=[-3,-3,-3,-3] upper bound=class=Point name=Unnamed dimension=4 values=[5,5,5,5] finite lower bound=[1,1,1,1] finite upper bound=[1,1,1,1] minimization=false dimension=4 startingPoint=class=Point name=Unnamed dimension=4 values=[3,-2.5,4.5,-2.5] maximumIterationNumber=100 maximumEvaluationNumber=100000 maximumAbsoluteError=1e-05 maximumRelativeError=1e-05 maximumResidualError=1e-05 maximumConstraintError=1e-05 verbose=false scale=class=Point name=Unnamed dimension=0 values=[] offset=class=Point name=Unnamed dimension=0 values=[] maxCGit=50 eta=0.25 stepmx=10 accuracy=0.0001 fmin=1 rescale=1.3 result= [-3.0000,5.0000,5.0000,5.0000] multipliers= [1.4134,0.0000,0.0000,0.0000,0.0000,10.0000,27.0000,20.0000] openturns-1.9/python/test/t_TNC_std.py000077500000000000000000000052111307543307100201200ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m def printPoint(point, digits): oss = "[" eps = pow(0.1, digits) format = "%." + str(digits) + "f" for i in range(point.getDimension()): if i == 0: sep = "" else: sep = "," if m.fabs(point[i]) < eps: oss += sep + format % m.fabs(point[i]) else: oss += sep + format % point[i] sep = "," oss += "]" return oss # linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1+2*x2-3*x3+4*x4"]) startingPoint = ot.Point(4, 0.0) bounds = ot.Interval(ot.Point(4, -3.0), ot.Point(4, 5.0)) algo = ot.TNC() algo.setStartingPoint(startingPoint) problem = ot.OptimizationProblem(levelFunction) problem.setBounds(bounds) problem.setMinimization(True) algo.setProblem(problem) print('algo=', algo) algo.run() result = algo.getResult() print('result=', printPoint(result.getOptimalPoint(), 4)) print('multipliers=', printPoint(result.getLagrangeMultipliers(), 4)) problem.setMinimization(False) algo.setProblem(problem) print('algo=', algo) algo.run() result = algo.getResult() print('result=', printPoint(result.getOptimalPoint(), 4)) print('multipliers=', printPoint(result.getLagrangeMultipliers(), 4)) # non-linear levelFunction = ot.Function( ["x1", "x2", "x3", "x4"], ["y1"], ["x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4"]) startingPoint = ot.Point(4, -0.01) startingPointNearMinimizationCorner = ot.Point(4) startingPointNearMinimizationCorner[0] = 3.0 startingPointNearMinimizationCorner[1] = -2.5 startingPointNearMinimizationCorner[2] = 4.5 startingPointNearMinimizationCorner[3] = -2.5 startingPointNearMaximizationCorner = ot.Point(4) startingPointNearMaximizationCorner[0] = -2.5 startingPointNearMaximizationCorner[1] = 4.5 startingPointNearMaximizationCorner[2] = 4.5 startingPointNearMaximizationCorner[3] = 4.5 bounds = ot.Interval(ot.Point(4, -3.0), ot.Point(4, 5.0)) algo = ot.TNC() problem = ot.OptimizationProblem(levelFunction) problem.setBounds(bounds) problem.setMinimization(True) algo.setProblem(problem) algo.setStartingPoint(startingPointNearMinimizationCorner) print('algo=', algo) algo.run() result = algo.getResult() print('result=', printPoint(result.getOptimalPoint(), 4)) print('multipliers=', printPoint(result.getLagrangeMultipliers(), 4)) problem.setMinimization(False) algo.setProblem(problem) print('algo=', algo) algo.setStartingPoint(startingPointNearMaximizationCorner) algo.run() result = algo.getResult() print('result=', printPoint(result.getOptimalPoint(), 4)) print('multipliers=', printPoint(result.getLagrangeMultipliers(), 4)) openturns-1.9/python/test/t_TaylorExpansionMoments_std.expout000066400000000000000000000062741307543307100251010ustar00rootroot00000000000000algo= limitStateVariable=class=RandomVector implementation=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,y1,y2] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4] outputVariablesNames=[y1,y2] formulas=[(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1),cos(x2*x2+x4)/(x1*x1+1+x3^4)] antecedent=class=UsualRandomVector distribution=class=Normal name=Normal dimension=4 mean=class=Point name=Unnamed dimension=4 values=[0.2,0.2,0.2,0.2] sigma=class=Point name=Unnamed dimension=4 values=[0.1,0.2,0.3,0.4] correlationMatrix=class=CorrelationMatrix dimension=4 implementation=class=MatrixImplementation name=Unnamed rows=4 columns=4 values=[1,0.25,0,0,0.25,1,0.25,0,0,0.25,1,0.25,0,0,0.25,1] meanInputVector=class=Point name=Unnamed dimension=0 values=[] hessianAtMean=class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] gradientAtMean=class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] valueAtMean=class=Point name=Unnamed dimension=0 values=[] meanFirstOrder=class=Point name=Unnamed dimension=0 values=[] meanSecondOrder=class=Point name=Unnamed dimension=0 values=[] covariance=class=CovarianceMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] inputCovariance=class=CovarianceMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] importanceFactors=class=PointWithDescription name=Unnamed dimension=0 description=[] values=[] First order mean= class=Point name=Unnamed dimension=2 values=[0.0384615,0.932544] Second order mean= class=Point name=Unnamed dimension=2 values=[0.0466369,0.819419] Covariance= class=CovarianceMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.00158239,-0.00130376,-0.00130376,0.01082] Value at mean= class=Point name=Unnamed dimension=2 values=[0.0384615,0.932544] Gradient at mean= class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=4 columns=2 values=[0.377219,0.0221893,-0.0284479,-0.00113792,-0.35812,-0.0912837,-0.0286496,-0.228209] Hessian at mean= class=SymmetricTensor implementation=class=TensorImplementation name=Unnamed rows=4 columns=4 sheets=2 values=[1.84911,0.110947,-0.279008,-0.0111603,0,0.221893,-0.0164122,-0.00065649,0,0,-0.100157,0.00168331,0,0,0,-0.0170014,-1.51555,0.0350552,0.0220043,0.0876379,0,-0.605625,0.00280441,-0.373018,0,0,-0.427983,0.00701103,0,0,0,-0.932544] Importance factors= class=PointWithDescription name=Unnamed dimension=4 description=[X0,X1,X2,X3] values=[0.925686,0.0329106,0.0406588,0.000744644] openturns-1.9/python/test/t_TaylorExpansionMoments_std.py000077500000000000000000000025731307543307100242060ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # We create a Function myFunc = ot.Function(['x1', 'x2', 'x3', 'x4'], ['y1', 'y2'], ['(x1*x1+x2^3*x1)/(2*x3*x3+x4^4+1)', 'cos(x2*x2+x4)/(x1*x1+1+x3^4)']) # We create a distribution dim = myFunc.getInputDimension() meanPoint = [0.2] * dim sigma = [0.] * dim for i in range(dim): sigma[i] = 0.1 * (i + 1) R = ot.CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.25 distribution = ot.Normal(meanPoint, sigma, R) # We create a distribution-based RandomVector X = ot.RandomVector(distribution) # We create a composite RandomVector Y from X and myFunction Y = ot.RandomVector(myFunc, X) # We create a quadraticCumul algorithm algo = ot.TaylorExpansionMoments(Y) # We test the attributes here print('algo=', algo) # We compute the several elements provided by the quadratic cumul algorithm print('First order mean=', repr(algo.getMeanFirstOrder())) print('Second order mean=', repr(algo.getMeanSecondOrder())) print('Covariance=', repr(algo.getCovariance())) print('Value at mean=', repr(algo.getValueAtMean())) print('Gradient at mean=', repr(algo.getGradientAtMean())) print('Hessian at mean=', repr(algo.getHessianAtMean())) algo_1 = ot.TaylorExpansionMoments(Y.getMarginal(0)) print('Importance factors=', repr( algo_1.getImportanceFactors())) openturns-1.9/python/test/t_TensorApproximationAlgorithm_std.expout000066400000000000000000000001131307543307100262550ustar00rootroot00000000000000x= [0,0,0] f(x)= [0,-30] f^(x)= [0.00192036,-30] rank[ 0 ]= 2 rank[ 1 ]= 1 openturns-1.9/python/test/t_TensorApproximationAlgorithm_std.py000066400000000000000000000037051307543307100253730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import openturns.testing as ott ot.Log.Show(ot.Log.ALL) dim = 3 model = ot.SymbolicFunction(['x0', 'x1', 'x2'], ['sin(x0)*cos(x1)*exp(x2)+x0*x1*x2', '(-1+x0*x0^2+x0^3)*(2+x1+2*x1^2+3*x1^5)*(15+2*x2+5*x2^7)']) coll = [ot.Uniform()] * dim # friedman # dim = 5 # model = ot.SymbolicFunction(['x1', 'x2', 'x3', 'x4', 'x5'], #['10*sin(_pi*x1*x2)+20*(x3-0.5)^2+10*x4+5*x5']) # coll = [ot.Uniform(0., 1.)] * dim # borehole # dim = 8 # model = ot.SymbolicFunction(['rw', 'r', 'Tu', 'Hu', 'Tl', 'Hl', 'L', 'Kw'], #['(2*_pi*Tu*(Hu-Hl))/(ln(r/rw)*(1+(2*L*Tu)/(ln(r/rw)*rw^2*Kw)+Tu/Tl))']) # coll = [ot.Normal(0.1, 0.0161812), # ot.LogNormal(7.71, 1.0056), # ot.Uniform(63070.0, 115600.0), # ot.Uniform(990.0, 1110.0), # ot.Uniform(63.1, 116.0), # ot.Uniform(700.0, 820.0), # ot.Uniform(1120.0, 1680.0), # ot.Uniform(9855.0, 12045.0)] distribution = ot.ComposedDistribution(coll) factoryCollection = list(map(lambda dist: ot.OrthogonalUniVariateFunctionFamily( ot.OrthogonalUniVariatePolynomialFunctionFactory(ot.StandardDistributionPolynomialFactory(dist))), coll)) functionFactory = ot.OrthogonalProductFunctionFactory(factoryCollection) size = 1000 X = distribution.getSample(size) Y = model(X) # ot.ResourceMap.Set('TensorApproximationAlgorithm-Method', 'RankM') # n-d nk = [10] * dim maxRank = 5 algo = ot.TensorApproximationAlgorithm( X, Y, distribution, functionFactory, nk, maxRank) algo.run() result = algo.getResult() # print('residuals=', result.getResiduals()) ott.assert_almost_equal(result.getResiduals(), [0.000466643, 0.0]) metamodel = result.getMetaModel() x = distribution.getMean() print('x=', ot.Point(x), 'f(x)=', model(x), 'f^(x)=', metamodel(x)) for i in range(model.getOutputDimension()): print('rank[', i, ']=', result.getTensor(i).getRank()) openturns-1.9/python/test/t_Tensor_std.expout000066400000000000000000000030151307543307100216370ustar00rootroot00000000000000test number zero : default constructor and string converter tensor0 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=0 columns=0 sheets=0 values=[] test number one : constructor with size, operator() and string converter tensor1 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] values = 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 11.000000 12.000000 test number two : copy constructor and string converter tensor2 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] test number three : get dimensions methods tensor1's nbRows = 2 tensor1's nbColumns = 2 tensor1's nbSheets = 3 test number four : assignment method test number five : isEmpty method tensor1 is empty = False tensor0 is empty = True tensor5 is empty = True tensor6 is empty = True tensor1 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,3,4,5,6,7,8,9,10,11,12] tensor1.getSheet(1) = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[5,6,7,8] sheet2 = class=Matrix implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.5,0.6,0.7,0.8] tensor1 = class=Tensor implementation=class=TensorImplementation name=Unnamed rows=2 columns=2 sheets=3 values=[1,2,3,4,0.5,0.6,0.7,0.8,9,10,11,12] openturns-1.9/python/test/t_Tensor_std.py000077500000000000000000000056341307543307100207570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor tensor0 = Tensor() # String converter print("tensor0 = ", repr(tensor0)) # TEST NUMBER ONE : CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print( "test number one : constructor with size, operator() and string converter") # Constructor with size tensor1 = Tensor(2, 2, 3) # Check operator() methods tensor1[0, 0, 0] = 1. tensor1[1, 0, 0] = 2. tensor1[0, 1, 0] = 3. tensor1[1, 1, 0] = 4. tensor1[0, 0, 1] = 5. tensor1[1, 0, 1] = 6. tensor1[0, 1, 1] = 7. tensor1[1, 1, 1] = 8. tensor1[0, 0, 2] = 9. tensor1[1, 0, 2] = 10. tensor1[0, 1, 2] = 11. tensor1[1, 1, 2] = 12. # String converter print("tensor1 = ", repr(tensor1)) print("values = %.6f" % tensor1[0, 0, 0], " %.6f" % tensor1[1, 0, 0], " %.6f" % tensor1[0, 1, 0], " %.6f" % tensor1[1, 1, 0], " %.6f" % tensor1[0, 0, 1], " %.6f" % tensor1[ 1, 0, 1], " %.6f" % tensor1[0, 1, 1], " %.6f" % tensor1[1, 1, 1], " %.6f" % tensor1[0, 0, 2], " %.6f" % tensor1[1, 0, 2], " %.6f" % tensor1[0, 1, 2], " %.6f" % tensor1[1, 1, 2]) # TEST NUMBER TWO : COPY CONSTRUCTOR AND STRING CONVERTER print("test number two : copy constructor and string converter") # Copy constructor tensor2 = (tensor1) # String converter print("tensor2 = ", repr(tensor2)) # TEST NUMBER THREE : GET DIMENSIONS METHODS print("test number three : get dimensions methods") # Get dimension methods print("tensor1's nbRows = ", tensor1.getNbRows(), end=' ') print("tensor1's nbColumns = ", tensor1.getNbColumns()) print("tensor1's nbSheets = ", tensor1.getNbSheets()) # TEST NUMBER FOUR : ASSIGNMENT METHOD print("test number four : assignment method") # Assignment method # no sense with python # TEST NUMBER FIVE : ISEMPTY METHOD print("test number five : isEmpty method") # Check method isEmpty tensor5 = Tensor() tensor6 = Tensor() print("tensor1 is empty = ", tensor1.isEmpty()) print("tensor0 is empty = ", tensor0.isEmpty()) print("tensor5 is empty = ", tensor5.isEmpty()) print("tensor6 is empty = ", tensor6.isEmpty()) # TEST NUMBER SIX : GETSHEET AND SETSHEET METHODS print("tensor1 = ", repr(tensor1)) # Matrix sheet1(tensor1.getSheet(1)) print("tensor1.getSheet(1) = ", repr(tensor1.getSheet(1))) sheet2 = Matrix(2, 2) sheet2[0, 0] = 0.5 sheet2[1, 0] = 0.6 sheet2[0, 1] = 0.7 sheet2[1, 1] = 0.8 print("sheet2 = ", repr(sheet2)) tensor1.setSheet(1, sheet2) print("tensor1 = ", repr(tensor1)) except: import sys print("t_Tensor_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TensorizedUniVariateFunctionFactory_std.expout000066400000000000000000000010341307543307100275400ustar00rootroot00000000000000factory= class=TensorizedUniVariateFunctionFactory univariate function collection=[class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory,class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory,class=UniVariateFunctionFamily implementation=class=MonomialFunctionFactory] enumerate function=class=LinearEnumerateFunction dimension=3 i= 0 f(X)= [1] i= 1 f(X)= [0.5] i= 2 f(X)= [1] i= 3 f(X)= [1.5] i= 4 f(X)= [0.25] i= 5 f(X)= [0.5] i= 6 f(X)= [0.75] i= 7 f(X)= [1] i= 8 f(X)= [1.5] i= 9 f(X)= [2.25] openturns-1.9/python/test/t_TensorizedUniVariateFunctionFactory_std.py000077500000000000000000000006041307543307100266510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot # Polynomial factories factoryCollection = [ot.MonomialFunctionFactory()] * 3 dim = len(factoryCollection) factory = ot.TensorizedUniVariateFunctionFactory(factoryCollection) print('factory=', factory) x = [0.5, 1.0, 1.5] for i in range(10): f = factory.build(i) print('i=', i, 'f(X)=', f(x)) openturns-1.9/python/test/t_TestResult_std.expout000066400000000000000000000012171307543307100225050ustar00rootroot00000000000000test number zero : default constructor and string converter testResultTest = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] test number one : string converter testResultTest = class=TestResult name=Unnamed type=testResult binaryQualityMeasure=true p-value threshold=0.42 p-value=0.372 description=[] test number two : elements accessors testResultTest2 binary quality measure = True testResultTest2 p value = 0.372000 testResultTest2 p value threshold = 0.420000 testResultTest2 test type = testResult test number three : equality testResultTestDiff = testResultTest False openturns-1.9/python/test/t_TestResult_std.py000077500000000000000000000030451307543307100216150ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # TEST NUMBER ZERO : DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test number zero : default constructor and string converter") # Default constructor type = "testResult" testBool = True testVal = 0.372 testThres = 0.42 testResultTest = TestResult(type, testBool, testVal, testThres) # String converter print("testResultTest = ", testResultTest) # TEST NUMBER ONE : STRING CONVERTER print("test number one : string converter") # String converter print("testResultTest = ", testResultTest) # TEST NUMBER TWO : ELEMENTS ACCESSORS print("test number two : elements accessors") print("testResultTest2 binary quality measure = ", testResultTest.getBinaryQualityMeasure()) print("testResultTest2 p value = %.6f" % testResultTest.getPValue()) print("testResultTest2 p value threshold = %.6f" % testResultTest.getThreshold()) print("testResultTest2 test type = ", testResultTest.getTestType()) # TEST NUMBER THREE : EQUALITY print("test number three : equality") typeDiff = "testResult2" testBoolDiff = False testValDiff = 0.02 testThresDiff = 0.12 testResultTestDiff = TestResult( typeDiff, testBoolDiff, testValDiff, testThresDiff) print("testResultTestDiff = testResultTest ", ( testResultTestDiff == testResultTest)) except: import sys print("t_TestResult_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Text_std.expout000066400000000000000000000000001307543307100213000ustar00rootroot00000000000000openturns-1.9/python/test/t_Text_std.py000077500000000000000000000027011307543307100204210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object dim = 2 meanPoint = Point(dim, 1.0) meanPoint[0] = 0.5 meanPoint[1] = -0.5 sigma = Point(dim, 1.0) sigma[0] = 2.0 sigma[1] = 3.0 R = CorrelationMatrix(dim) for i in range(1, dim): R[i, i - 1] = 0.5 distribution = Normal(meanPoint, sigma, R) # Test for sampling size = 30 sample = distribution.getSample(size) # Create an empty graph myGraph = Graph("Normal sample", "x1", "x2", True, "topright") # Display extrema indices x1 = [x[0] for x in sample[:, 0]] x2 = [x[0] for x in sample[:, 1]] idx = [0] * 4 idx[0] = x1.index(min(x1)) idx[1] = x1.index(max(x1)) idx[2] = x2.index(min(x2)) idx[3] = x2.index(max(x2)) sample.add(distribution.getSample(5)) labels = Description(sample.getSize(), ".") for i in range(4): labels[idx[i]] = str(idx[i]) position = Description(sample.getSize(), "top") position[idx[0]] = "right" position[idx[1]] = "left" position[idx[2]] = "top" position[idx[3]] = "bottom" myText = Text(sample, labels) myText.setColor("red") myText.setTextPositions(position) myGraph.add(myText) myGraph.draw("Graph_Text_a_OT.png") except: import sys print("t_Text_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TimeSeries_std.expout000066400000000000000000000032661307543307100224460ustar00rootroot00000000000000ts1= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0 10 11 ] 2 : [ 1 20 21 ] 3 : [ 2 30 31 ] second element= [10,11] ts1= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0 10 11 ] 2 : [ 1 20 21 ] 3 : [ 2 30 31 ] values of the second element= [10,11] ts1= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0 20 22 ] 2 : [ 1 20 21 ] 3 : [ 2 30 31 ] modified values of the second element= [20,22] should be [20,22] values at t=-1.0 = [0,0] values at t=1.45 = [20,21] values at t=1.54 = [30,31] values at t=14.5 = [30,31] ts1= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0 20 22 ] 2 : [ 1 20 21 ] 3 : [ 2 -30 -31 ] ts2= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 1 0 0 ] 2 : [ 2 0 0 ] 3 : [ 3 0 0 ] 4 : [ 4 0 0 ] 5 : [ 5 0 0 ] 6 : [ 6 0 0 ] 7 : [ 7 0 0 ] 8 : [ 8 0 0 ] 9 : [ 9 0 0 ] Expected failure ts3= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0.1 0 0 ] 2 : [ 0.2 0 0 ] 3 : [ 0.3 0 0 ] 4 : [ 0.4 0 0 ] 5 : [ 0.5 0 0 ] 6 : [ 0.6 0 0 ] 7 : [ 0.7 0 0 ] 8 : [ 0.8 0 0 ] 9 : [ 0.9 0 0 ] 10 : [ 1 0 0 ] ts4= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0.2 0 0 ] 2 : [ 0.4 0 0 ] 3 : [ 0.6 0 0 ] 4 : [ 0.8 0 0 ] 5 : [ 1 0 0 ] ts5= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 1 0 0 ] 2 : [ 2 0 0 ] ts5= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 1 0 0 ] 2 : [ 2 0 0 ] 3 : [ 3 99.9 99.9 ] 4 : [ 4 99.9 99.9 ] 5 : [ 5 99.9 99.9 ] ns2= 0 : [ 0 0 ] 1 : [ 0 0 ] 2 : [ 0 0 ] 3 : [ 99.9 99.9 ] 4 : [ 99.9 99.9 ] 5 : [ 99.9 99.9 ] ts6= [ t v0 v1 ] 0 : [ 0 0 0 ] 1 : [ 0.2 0 0 ] 2 : [ 0.4 0 0 ] 3 : [ 0.6 0 0 ] 4 : [ 0.8 0 0 ] 5 : [ 1 0 0 ] openturns-1.9/python/test/t_TimeSeries_std.py000077500000000000000000000043361307543307100215540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot dim = 2 # We create an empty series ts1 = ot.TimeSeries(0, dim) ts1.setName('Ts1') # We populate the empty ts for p in range(3): pt = ot.Point(dim) for i in range(dim): pt[i] = 10. * (p + 1) + i ts1.add(pt) print('ts1=', ts1) # We get the second element of the ts secondElement = ts1[1] print('second element=', secondElement) # We set the third element to a valid new element newPoint = ot.Point(dim + 1) for i in range(dim): newPoint[i + 1] = 1000. * (i + 1) ts1[2] = newPoint print('ts1=', ts1) # We get the values of the second element of the ts values1 = ts1.getValueAtIndex(1) print('values of the second element=', values1) # We set new values for the second element of the ts newValues = values1 * 2. ts1.setValueAtIndex(1, newValues) values2 = ts1.getValueAtIndex(1) print('ts1=', ts1) print('modified values of the second element=', values2, ' should be ', newValues) # We get the values of the second element of the ts values3 = ts1.getValueAtNearestTime(-1.0) print('values at t=-1.0 =', values3) values4 = ts1.getValueAtNearestTime(1.45) print('values at t=1.45 =', values4) values5 = ts1.getValueAtNearestTime(1.54) print('values at t=1.54 =', values5) values6 = ts1.getValueAtNearestTime(14.5) print('values at t=14.5 =', values6) # We set new values for the third element of the ts ts1.setValueAtNearestTime(1.54, values6 * -1.0) print('ts1=', ts1) ts2 = ot.TimeSeries(10, dim) print('ts2=', ts2) # ts2[5] = point2 # print 'ts2=', ts2 try: # We get the tenth element of the ts # THIS SHOULD NORMALLY FAIL tenthElement = ts1.at(9) except: print('Expected failure') tg1 = ot.RegularGrid(0.0, 0.1, 11) ts3 = ot.TimeSeries(tg1, dim) print('ts3=', ts3) tg2 = ot.RegularGrid(0.0, 0.2, 6) ts4 = ot.TimeSeries(tg2, dim) print('ts4=', ts4) # We append a sample to a time series ts5 = ot.TimeSeries(3, dim) ns1 = ot.Sample(3, [99.9] * dim) print('ts5=', ts5) ts5.add(ns1) print('ts5=', ts5) # We retrieve the values of the time series as a sample ns2 = ts5.getSample() print('ns2=', ns2) # We build a time series from a time grid and a sample ns3 = ts4.getSample() ts6 = ot.TimeSeries(tg2, ns3) print('ts6=', ts6) openturns-1.9/python/test/t_TrapezoidalFactory_std.expout000066400000000000000000000015131307543307100241740ustar00rootroot00000000000000distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=2.3 c=4.5 d=5 h=0.322581 Estimated distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1.006 b=2.275 c=4.545 d=4.99 h=0.3198 Default distribution= Trapezoidal(a = -2, b = -1, c = 1, d = 2) Distribution from parameters= Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) Trapezoidal = Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) Estimated trapezoidal= Trapezoidal(a = 1.006, b = 2.275, c = 4.545, d = 4.99) Default trapezoidal= Trapezoidal(a = -2, b = -1, c = 1, d = 2) Trapezoidal from parameters= Trapezoidal(a = 1, b = 2.3, c = 4.5, d = 5) Estimated distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=-2.22045e-15 b=0 c=0 d=2.22045e-15 h=4.5036e+14 Estimated distribution= class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1 c=1 d=1 h=4.5036e+14 openturns-1.9/python/test/t_TrapezoidalFactory_std.py000077500000000000000000000030631307543307100233050ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.RandomGenerator.SetSeed(0) distribution = ot.Trapezoidal(1.0, 2.3, 4.5, 5.0) size = 10000 sample = distribution.getSample(size) factory = ot.TrapezoidalFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) oldPrecision = ot.PlatformInfo.GetNumericalPrecision() ot.PlatformInfo.SetNumericalPrecision(4) print("Estimated distribution=", repr(estimatedDistribution)) ot.PlatformInfo.SetNumericalPrecision(oldPrecision) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build(distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedTrapezoidal = factory.buildAsTrapezoidal(sample) print("Trapezoidal =", distribution) oldPrecision = ot.PlatformInfo.GetNumericalPrecision() ot.PlatformInfo.SetNumericalPrecision(4) print("Estimated trapezoidal=", estimatedTrapezoidal) ot.PlatformInfo.SetNumericalPrecision(oldPrecision) estimatedTrapezoidal = factory.buildAsTrapezoidal() print("Default trapezoidal=", estimatedTrapezoidal) estimatedTrapezoidal = factory.buildAsTrapezoidal(distribution.getParameter()) print("Trapezoidal from parameters=", estimatedTrapezoidal) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) openturns-1.9/python/test/t_Trapezoidal_std.expout000066400000000000000000000063771307543307100226610ustar00rootroot00000000000000Distribution class=Trapezoidal name=Trapezoidal dimension=1 a=1 b=1.2 c=3 d=14 h=0.135135 Distribution Trapezoidal(a = 1, b = 1.2, c = 3, d = 14) Mean= class=Point name=Unnamed dimension=1 values=[5.48108] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.1428] Elliptical = False oneRealization= class=Point name=Unnamed dimension=1 values=[6.23752] oneSample first= class=Point name=Unnamed dimension=1 values=[9.63201] last= class=Point name=Unnamed dimension=1 values=[4.32244] mean= class=Point name=Unnamed dimension=1 values=[5.52363] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.34744] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1.1] ddf = class=Point name=Unnamed dimension=1 values=[0.675676] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0.675676] log pdf=-2.694627 pdf =0.067568 pdf (FD)=0.067568 cdf=0.003378 ccdf=0.996622 characteristic function= (-0.115059431951+0.0386019620712j) pdf gradient = class=Point name=Unnamed dimension=4 values=[-0.333272,-0.333272,-0.00456538,-0.00456538] pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-0.333272,-0.333272,-0.00456538,-0.00456538] log-pdf gradient = class=Point name=Unnamed dimension=4 values=[-4.93243,-4.93243,-0.0675676,-0.0675676] log-pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-4.93243,-4.93243,-0.0675676,-0.0675676] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.0504474,-0.0166636,-0.000228269,-0.000228269] cdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-0.0504474,-0.0166636,-0.000228269,-0.000228269] quantile= class=Point name=Unnamed dimension=1 values=[11.1469] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.47] Survival(inverseSurvival)=0.950000 Minimum volume interval= [1.05141, 11.1725] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.35999} with f= MinimumVolumeLevelSetEvaluation(Trapezoidal(a = 1, b = 1.2, c = 3, d = 14)) beta= [0.0347356] Bilateral confidence interval= [1.285, 11.9826] beta= [0.95] Unilateral confidence interval (lower tail)= [1, 11.1469] beta= [0.95] Unilateral confidence interval (upper tail)= [1.47, 14] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[5.48108] standard deviation= class=Point name=Unnamed dimension=1 values=[3.02371] skewness= class=Point name=Unnamed dimension=1 values=[0.548305] kurtosis= class=Point name=Unnamed dimension=1 values=[2.39403] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.1428] parameters= [class=PointWithDescription name=X0 dimension=4 description=[a,b,c,d] values=[1,1.2,3,14]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.310603] standard moment n= 2 value= [0.312872] standard moment n= 3 value= [-0.176411] standard moment n= 4 value= [0.1781] standard moment n= 5 value= [-0.120255] Standard representative= Trapezoidal(a = -1, b = -0.969231, c = -0.692308, d = 1) roughness= [0.101047] openturns-1.9/python/test/t_Trapezoidal_std.py000077500000000000000000000221441307543307100217560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Trapezoidal(1.0, 1.2, 3.0, 14.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.1) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(4) PDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computePDF(point)) / (2.0 * eps) PDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computePDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the logPDF with regards the parameters of the distribution logPDFgr = distribution.computeLogPDFGradient(point) print("log-pdf gradient =", repr(logPDFgr)) # by the finite difference technique logPDFgrFD = Point(4) logPDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computeLogPDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computeLogPDF(point)) / (2.0 * eps) print("log-pdf gradient (FD)=", repr(logPDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(4) CDFgrFD[0] = (Trapezoidal(distribution.getA() + eps, distribution.getB(), distribution.getC(), distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA() - eps, distribution.getB(), distribution.getC(), distribution.getD()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Trapezoidal(distribution.getA(), distribution.getB() + eps, distribution.getC(), distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB() - eps, distribution.getC(), distribution.getD()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() + eps, distribution.getD()).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC() - eps, distribution.getD()).computeCDF(point)) / (2.0 * eps) CDFgrFD[3] = (Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() + eps).computeCDF(point) - Trapezoidal(distribution.getA(), distribution.getB(), distribution.getC(), distribution.getD() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) roughness = distribution.getRoughness() print("roughness=", Point(1, roughness)) except: import sys print("t_Trapezoidal_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TrendEvaluation_std.expout000066400000000000000000000007461307543307100235010ustar00rootroot00000000000000myFunction= [x]->[sin(x)] myTrendFunction ( [30,30] ) = [29.012] myTrendFunction ( class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=2 data=[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]] ) = class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=10 dimension=1 description=[y0] data=[[1.84147],[2.9093],[3.14112],[3.2432],[4.04108],[5.72058],[7.65699],[8.98936],[9.41212],[9.45598]] openturns-1.9/python/test/t_TrendEvaluation_std.py000077500000000000000000000020351307543307100226010ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Dimension of test dimension = 2 # function function = SymbolicFunction("x", "sin(x)") # Init of the function myFunction = TrendEvaluation(function) myFunction.setName("myTrendFunction") # We check that for a Point with same values, the function is # done by component inPoint = Point(dimension, 30.0) # result point of the function outPoint = myFunction(inPoint) print("myFunction=", myFunction) print(myFunction.getName(), "( ", inPoint, " ) = ", outPoint) # Creation of a Sample size = 10 inSample = Sample(size, dimension) for index in range(size): inSample[index] = Point(dimension, index + 1) # result of the function outSample = myFunction(inSample) print(myFunction.getName(), "( ", repr(inSample), " ) = ", repr(outSample)) except: import sys print("t__TrendEvaluation_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TrendFactory_std.expout000066400000000000000000000021521307543307100227720ustar00rootroot00000000000000White noise realization = [ t X0 X1 ] 0 : [ 0 0.608202 -1.26617 ] 1 : [ 0.1 -0.438266 1.20548 ] 2 : [ 0.2 -2.18139 0.350042 ] ... 997 : [ 99.7 -0.560957 0.476333 ] 998 : [ 99.8 0.259183 -0.591989 ] 999 : [ 99.9 -0.773031 0.711512 ] myTimeSeries = [ t v0 v1 ] 0 : [ 0 1.6082 1.73383 ] 1 : [ 0.1 0.77037 4.39418 ] 2 : [ 0.2 -0.752497 3.69999 ] ... 997 : [ 99.7 -0.0113032 1.93498 ] 998 : [ 99.8 0.710777 0.968257 ] 999 : [ 99.9 -0.377699 2.41082 ] myDefaultFactory = class=TrendFactory fittingAlgorithm = class=CorrectedLeaveOneOut basisSequenceFactory = class=LARS myEstimateTrend = [1.47317,2.50233] * ([t]->[1]) + [-0.49061,0.441109] * ([t]->[cos(2 * t)]) + [1.0026,0.964772] * ([t]->[sin(2 * t)]) myDefaultFactory = class=TrendFactory fittingAlgorithm = class=KFold basisSequenceFactory = class=LARS myNewEstimateTrend = [1.47317,2.50233] * ([t]->[1]) + [-0.49061,0.441109] * ([t]->[cos(2 * t)]) + [1.0026,0.964772] * ([t]->[sin(2 * t)]) openturns-1.9/python/test/t_TrendFactory_std.py000077500000000000000000000041641307543307100221060ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: inVar = ['t'] functions = [] functions.append(SymbolicFunction(inVar, ['1'])) functions.append(SymbolicFunction(inVar, ['cos(2 * t)'])) functions.append(SymbolicFunction(inVar, ['sin(2 * t)'])) # We build the weights coefficients = Sample(0, 2) p = Point(2) p[0] = 1.5 p[1] = 2.5 coefficients.add(p) p[0] = -0.5 p[1] = 0.5 coefficients.add(p) p[0] = 1. p[1] = 1. coefficients.add(p) # Third, build the function myFunction = DualLinearCombinationFunction(functions, coefficients) # Fourth : we build a time series for estimation # it issued from a white noise dimension = 2 # Fix the realization as a Normal noiseDistribution = Normal(dimension) # TimeGrid parameters N = 1000 timeStart = 0. timeStep = 0.1 timeGrid = RegularGrid(timeStart, timeStep, N) # White noise myWhiteNoise = WhiteNoise(noiseDistribution, timeGrid) realization = TimeSeries(myWhiteNoise.getRealization()) print("White noise realization = ", realization) # We make a trend transform to the time series # We get a time series which contains values of time myTransformFunction = TrendTransform(myFunction) myTimeSeries = TimeSeries(myTransformFunction(realization)) print("myTimeSeries = ", myTimeSeries) # We wants to get the coefficients using a factory # Build a factory using default constructor myDefaultFactory = TrendFactory() print("myDefaultFactory = ", myDefaultFactory) myEstimateTrend = myDefaultFactory.build(myTimeSeries, Basis(functions)) print("myEstimateTrend = ", myEstimateTrend) # We fix a new fitting algorithm myDefaultFactory.setFittingAlgorithm(KFold()) print("myDefaultFactory = ", myDefaultFactory) myNewEstimateTrend = myDefaultFactory.build(myTimeSeries, Basis(functions)) print("myNewEstimateTrend = ", myNewEstimateTrend) except: import sys print("t_TrendTransform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TrendTransform_std.expout000066400000000000000000000016751307543307100233470ustar00rootroot00000000000000myTrendFunc= [t]->[sin(t),cos(t)] myTrendFunc input description= [y0,y1] myTrendFunc input dimension= 2 myTrendFunc output description= [y0,y1] myTrendFunc output dimension= 2 input time series = [ t v0 v1 ] 0 : [ 0 0 1 ] 1 : [ 0.1 2 3 ] 2 : [ 0.2 4 5 ] 3 : [ 0.3 6 7 ] 4 : [ 0.4 8 9 ] 5 : [ 0.5 10 11 ] 6 : [ 0.6 12 13 ] 7 : [ 0.7 14 15 ] 8 : [ 0.8 16 17 ] 9 : [ 0.9 18 19 ] 10 : [ 1 20 21 ] output time series = [ t y0 y1 ] 0 : [ 0 0 2 ] 1 : [ 0.1 2.09983 3.995 ] 2 : [ 0.2 4.19867 5.98007 ] 3 : [ 0.3 6.29552 7.95534 ] 4 : [ 0.4 8.38942 9.92106 ] 5 : [ 0.5 10.4794 11.8776 ] 6 : [ 0.6 12.5646 13.8253 ] 7 : [ 0.7 14.6442 15.7648 ] 8 : [ 0.8 16.7174 17.6967 ] 9 : [ 0.9 18.7833 19.6216 ] 10 : [ 1 20.8415 21.5403 ] called 1 times openturns-1.9/python/test/t_TrendTransform_std.py000077500000000000000000000025121307543307100224450ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # Create an intance inputVars = Description(["t"]) formula = Description(["sin(t)", "cos(t)"]) myFunc = SymbolicFunction(inputVars, formula) myTrendFunc = TrendTransform(myFunc) print("myTrendFunc=", myTrendFunc) # Get the input description and dimension print("myTrendFunc input description=", myTrendFunc.getInputDescription()) print("myTrendFunc input dimension=", myTrendFunc.getInputDimension()) # Get the output description and dimension print("myTrendFunc output description=", myTrendFunc.getOutputDescription()) print("myTrendFunc output dimension=", myTrendFunc.getOutputDimension()) # Create a TimeSeries tg = RegularGrid(0.0, 0.1, 11) data = Sample(tg.getN(), formula.getSize()) for i in range(data.getSize()): for j in range(data.getDimension()): data[i, j] = i * data.getDimension() + j ts = TimeSeries(tg, data) print("input time series = ") print(ts) print("output time series = ") print(myTrendFunc(ts)) # Get the number of calls print("called ", myTrendFunc.getCallsNumber(), " times") except: import sys print("t_TrendTransform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TriangularComplexMatrix_std.expout000066400000000000000000000061341307543307100252170ustar00rootroot00000000000000test : default constructor and string converter triangularMatrix0 = class=TriangularComplexMatrix dimension=0 implementation=class=ComplexMatrixImplementation name=Unnamed rows=0 columns=0 values=[] test : constructor with size, operator() and string converter triangularMatrix1 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test : copy constructor and string converter triangularMatrix2 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(0,0),(4,0)] test : get dimensions methods triangularMatrix1's nbRows = 2 triangularMatrix1's nbColumns = 2 isLower? True test : transpose and conjugate methods triangularMatrix1 conjugate = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(3,-1),(0,-0),(4,-0)] is conjugate Lower? True triangularMatrix1 transpose = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(0,0),(3,1),(4,0)] is transpose Lower? False triangularMatrix1 conjugate and transpose = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,-0),(0,-0),(3,-1),(4,-0)] is conjugate Lower? False test : addition method sum1 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(3,1),(3,-1),(8,0)] sum2 = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(2,0),(3,1),(3,-1),(8,0)] sum1 equals sum2 = True test : substraction method diff = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0,0),(3,1),(-3,1),(0,0)] test : matrix multiplication method prod = class=SquareComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(1,0),(3,1),(3,-1),(26,0)] test : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [(1,0),(11,1)] test : multiplication and division by a numerical scalar methods scalprod = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(3,2),(7,9),(0,0),(12,8)] scaldiv1 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv2 = class=TriangularComplexMatrix dimension=2 implementation=class=ComplexMatrixImplementation name=Unnamed rows=2 columns=2 values=[(0.230769,-0.153846),(0.846154,-0.230769),(0,0),(0.923077,-0.615385)] scaldiv1 equals scaldiv2 = True test : isEmpty method triangularMatrix0 is empty = True triangularMatrix1 is empty = False triangularMatrix5 is empty = True openturns-1.9/python/test/t_TriangularComplexMatrix_std.py000077500000000000000000000103451307543307100243250ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test : default constructor and string converter") # Default constructor triangularMatrix0 = TriangularComplexMatrix() # String converter print("triangularMatrix0 = ", repr(triangularMatrix0)) # CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print("test : constructor with size, operator() and string converter") # Constructor with size triangularMatrix1 = TriangularComplexMatrix(2) # Check operator() methods triangularMatrix1[0, 0] = 1. triangularMatrix1[1, 0] = 3. + 1j triangularMatrix1[1, 1] = 4. # String converter print("triangularMatrix1 = ", repr(triangularMatrix1)) # COPY CONSTRUCTOR AND STRING CONVERTER print("test : copy constructor and string converter") # Copy constructor triangularMatrix2 = TriangularComplexMatrix(triangularMatrix1) # String converter print("triangularMatrix2 = ", repr(triangularMatrix2)) # GET DIMENSIONS METHODS print("test : get dimensions methods") # Get dimension methods print("triangularMatrix1's nbRows = ", triangularMatrix1.getNbRows()) print("triangularMatrix1's nbColumns = ", triangularMatrix1.getNbColumns()) print("isLower? ", triangularMatrix1.isLowerTriangular()) # TRANSPOSE AND CONJUGATE METHOD print("test : transpose and conjugate methods") # Check conjugate method print("triangularMatrix1 conjugate = ", repr(triangularMatrix1.conjugate())) print("is conjugate Lower? ", triangularMatrix1.conjugate().isLowerTriangular()) print("triangularMatrix1 transpose = ", repr(triangularMatrix1.transpose())) print("is transpose Lower? ", triangularMatrix1.transpose().isLowerTriangular()) triangularMatrix4 = triangularMatrix1.conjugateTranspose() print("triangularMatrix1 conjugate and transpose = ", repr(triangularMatrix4)) print("is conjugate Lower? ", triangularMatrix4.isLowerTriangular()) # ADDITION METHOD print("test : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = triangularMatrix1 + triangularMatrix4 sum2 = triangularMatrix4 + triangularMatrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # SUBSTRACTION METHOD print("test : substraction method") # Check substraction method diff = triangularMatrix1 - triangularMatrix4 print("diff = ", repr(diff)) # MATRIX MULTIPLICATION METHOD print("test : matrix multiplication method") # Check multiplication method prod = triangularMatrix1 * triangularMatrix4 print("prod = ", repr(prod)) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = triangularMatrix1 * pt print("ptResult = ", repr(ptResult)) # MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS print("test : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. + 2j scalprod = triangularMatrix1 * s print("scalprod = ", repr(scalprod)) # Check the division method scaldiv1 = triangularMatrix1 / s scaldiv2 = triangularMatrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # ISEMPTY METHOD print("test : isEmpty method") # Check method isEmpty triangularMatrix5 = TriangularComplexMatrix() triangularMatrix6 = TriangularComplexMatrix() print("triangularMatrix0 is empty = ", triangularMatrix0.isEmpty()) print("triangularMatrix1 is empty = ", triangularMatrix1.isEmpty()) print("triangularMatrix5 is empty = ", triangularMatrix5.isEmpty()) except: import sys print("t_TriangularComplexMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TriangularFactory_std.expout000066400000000000000000000013151307543307100240260ustar00rootroot00000000000000distribution= class=Triangular name=Triangular dimension=1 a=1 m=2.5 b=4 Estimated distribution= class=Triangular name=Triangular dimension=1 a=1.02699 m=2.51471 b=3.97879 Default distribution= Triangular(a = -1, m = 0, b = 1) Distribution from parameters= Triangular(a = 1, m = 2.5, b = 4) Triangular = Triangular(a = 1, m = 2.5, b = 4) Estimated triangular= Triangular(a = 1.02699, m = 2.51471, b = 3.97879) Default triangular= Triangular(a = -1, m = 0, b = 1) Triangular from parameters= Triangular(a = 1, m = 2.5, b = 4) Estimated distribution= class=Triangular name=Triangular dimension=1 a=-2.22045e-15 m=0 b=2.22045e-15 Estimated distribution= class=Triangular name=Triangular dimension=1 a=1 m=1 b=1 openturns-1.9/python/test/t_TriangularFactory_std.py000077500000000000000000000027331307543307100231420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Triangular(1.0, 2.5, 4.0) size = 10000 sample = distribution.getSample(size) factory = TriangularFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedTriangular = factory.buildAsTriangular(sample) print("Triangular =", distribution) print("Estimated triangular=", estimatedTriangular) estimatedTriangular = factory.buildAsTriangular() print("Default triangular=", estimatedTriangular) estimatedTriangular = factory.buildAsTriangular( distribution.getParameter()) print("Triangular from parameters=", estimatedTriangular) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_TriangularFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TriangularMatrix_std.expout000077500000000000000000000047361307543307100237000ustar00rootroot00000000000000test : default constructor and string converter triangularMatrix0 = class=TriangularMatrix dimension=0 implementation=class=MatrixImplementation name=Unnamed rows=0 columns=0 values=[] test : constructor with size, operator() and string converter triangularMatrix1 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] test : copy constructor and string converter triangularMatrix2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,0,4] test : get dimensions methods triangularMatrix1's nbRows = 2 triangularMatrix1's nbColumns = 2 isLower? True test : transpose and conjugate methods triangularMatrix1 transpose = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,3,4] is transpose Lower? False triangularMatrix1 conjugate and transpose = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,0,3,4] is conjugate Lower? False test : addition method sum1 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,3,3,8] sum2 = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[2,3,3,8] sum1 equals sum2 = True test : substraction method diff = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0,3,-3,0] test : matrix multiplication method prod = class=SquareMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[1,3,3,25] test : multiplication with a numerical point method pt = class=Point name=Unnamed dimension=2 values=[1,2] ptResult = [1,11] test : multiplication and division by a numerical scalar methods scalprod = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[3,9,0,12] scaldiv1 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,0,1.33333] scaldiv2 = class=TriangularMatrix dimension=2 implementation=class=MatrixImplementation name=Unnamed rows=2 columns=2 values=[0.333333,1,0,1.33333] scaldiv1 equals scaldiv2 = True test : isEmpty method triangularMatrix0 is empty = True triangularMatrix1 is empty = False triangularMatrix5 is empty = True openturns-1.9/python/test/t_TriangularMatrix_std.py000077500000000000000000000077061307543307100230040ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() try: # DEFAULT CONSTRUCTOR AND STRING CONVERTER print("test : default constructor and string converter") # Default constructor triangularMatrix0 = TriangularMatrix() # String converter print("triangularMatrix0 = ", repr(triangularMatrix0)) # CONSTRUCTOR WITH SIZE, OPERATOR() AND STRING CONVERTER print("test : constructor with size, operator() and string converter") # Constructor with size triangularMatrix1 = TriangularMatrix(2) # Check operator() methods triangularMatrix1[0, 0] = 1. triangularMatrix1[1, 0] = 3. triangularMatrix1[1, 1] = 4. # String converter print("triangularMatrix1 = ", repr(triangularMatrix1)) # COPY CONSTRUCTOR AND STRING CONVERTER print("test : copy constructor and string converter") # Copy constructor triangularMatrix2 = TriangularMatrix(triangularMatrix1) # String converter print("triangularMatrix2 = ", repr(triangularMatrix2)) # GET DIMENSIONS METHODS print("test : get dimensions methods") # Get dimension methods print("triangularMatrix1's nbRows = ", triangularMatrix1.getNbRows()) print("triangularMatrix1's nbColumns = ", triangularMatrix1.getNbColumns()) print("isLower? ", triangularMatrix1.isLowerTriangular()) # TRANSPOSE AND CONJUGATE METHOD print("test : transpose and conjugate methods") print("triangularMatrix1 transpose = ", repr(triangularMatrix1.transpose())) print("is transpose Lower? ", triangularMatrix1.transpose().isLowerTriangular()) triangularMatrix4 = triangularMatrix1.transpose() print("triangularMatrix1 conjugate and transpose = ", repr(triangularMatrix4)) print("is conjugate Lower? ", triangularMatrix4.isLowerTriangular()) # ADDITION METHOD print("test : addition method") # Check addition method : we check the operator and the symmetry of the # operator, thus testing the comparison operator sum1 = triangularMatrix1 + triangularMatrix4 sum2 = triangularMatrix4 + triangularMatrix1 print("sum1 = ", repr(sum1)) print("sum2 = ", repr(sum2)) print("sum1 equals sum2 = ", sum1 == sum2) # SUBSTRACTION METHOD print("test : substraction method") # Check substraction method diff = triangularMatrix1 - triangularMatrix4 print("diff = ", repr(diff)) # MATRIX MULTIPLICATION METHOD print("test : matrix multiplication method") # Check multiplication method prod = triangularMatrix1 * triangularMatrix4 print("prod = ", repr(prod)) # MULTIPLICATION WITH A NUMERICAL POINT METHOD print("test : multiplication with a numerical point method") # Create the numerical point pt = Point() pt.add(1.) pt.add(2.) print("pt = ", repr(pt)) # Check the product method ptResult = triangularMatrix1 * pt print("ptResult = ", repr(ptResult)) # MULTIPLICATION AND DIVISION BY A NUMERICAL SCALAR METHODS print("test : multiplication and division by a numerical scalar methods") # Check the multiplication method s = 3. scalprod = triangularMatrix1 * s print("scalprod = ", repr(scalprod)) # Check the division method scaldiv1 = triangularMatrix1 / s scaldiv2 = triangularMatrix1 / s print("scaldiv1 = ", repr(scaldiv1)) print("scaldiv2 = ", repr(scaldiv2)) print("scaldiv1 equals scaldiv2 = ", (scaldiv1 == scaldiv2)) # ISEMPTY METHOD print("test : isEmpty method") # Check method isEmpty triangularMatrix5 = TriangularMatrix() triangularMatrix6 = TriangularMatrix() print("triangularMatrix0 is empty = ", triangularMatrix0.isEmpty()) print("triangularMatrix1 is empty = ", triangularMatrix1.isEmpty()) print("triangularMatrix5 is empty = ", triangularMatrix5.isEmpty()) except: import sys print("t_TriangularMatrix_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Triangular_std.expout000066400000000000000000000061221307543307100224770ustar00rootroot00000000000000Distribution Triangular(a = -0.5, m = 1.5, b = 2.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.44403] oneSample first= class=Point name=Unnamed dimension=1 values=[1.90705] last= class=Point name=Unnamed dimension=1 values=[1.09635] mean= class=Point name=Unnamed dimension=1 values=[1.17256] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.39567] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[0.333333] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0.333333] log pdf=-0.693147 pdf =0.500000 pdf (FD)=0.500000 cdf=0.375000 ccdf=0.625000 characteristic function= (0.312305424736+0.758322070069j) pdf gradient = class=Point name=Unnamed dimension=3 values=[0.0833333,-0.25,-0.166667] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.0833333,-0.25,-0.166667] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.1875,-0.1875,-0.5] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[-0.1875,-0.1875,-0.125] quantile= class=Point name=Unnamed dimension=1 values=[0.724745] cdf(quantile)=0.250000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.0477226] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.0527864, 2.27639] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.90333} with f= MinimumVolumeLevelSetEvaluation(Triangular(a = -0.5, m = 1.5, b = 2.5)) beta= [0.149071] Bilateral confidence interval= [-0.112702, 2.22614] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 2.1127] beta= [0.95] Unilateral confidence interval (upper tail)= [0.0477226, 2.5] beta= [0.95] Point= class=Point name=Unnamed dimension=1 values=[2] ddf = class=Point name=Unnamed dimension=1 values=[-0.666667] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.666667] log pdf=-1.098612 pdf =0.333333 pdf (FD)=0.333333 cdf=0.916667 ccdf=0.083333 pdf gradient = class=Point name=Unnamed dimension=3 values=[0.111111,0.333333,0.222222] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[0.111111,0.333333,0.222222] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.0277778,-0.0833333,-0.222222] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[-0.0277778,-0.0833333,-0.222222] quantile= class=Point name=Unnamed dimension=1 values=[2.1127] cdf(quantile)=0.950000 mean= class=Point name=Unnamed dimension=1 values=[1.16667] standard deviation= class=Point name=Unnamed dimension=1 values=[0.62361] skewness= class=Point name=Unnamed dimension=1 values=[-0.305441] kurtosis= class=Point name=Unnamed dimension=1 values=[2.4] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.388889] parameters= [class=PointWithDescription name=X0 dimension=3 description=[a,m,b] values=[-0.5,1.5,2.5]] openturns-1.9/python/test/t_Triangular_std.py000077500000000000000000000230351307543307100216100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Triangular(-0.5, 1.5, 2.5) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point, left part of the support point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(3) PDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computePDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computePDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computePDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(3) CDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computeCDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computeCDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computeCDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.25) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) # Define a point, right part of the support point = Point(distribution.getDimension(), 2.0) print("Point= ", repr(point)) # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computePDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computePDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computePDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(3) CDFgrFD[0] = (Triangular(distribution.getA() + eps, distribution.getM(), distribution.getB()).computeCDF(point) - Triangular(distribution.getA() - eps, distribution.getM(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Triangular(distribution.getA(), distribution.getM() + eps, distribution.getB()).computeCDF(point) - Triangular(distribution.getA(), distribution.getM() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Triangular(distribution.getA(), distribution.getM(), distribution.getB() + eps).computeCDF(point) - Triangular(distribution.getA(), distribution.getM(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) except: import sys print("t_Triangular_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_TruncatedDistribution_std.expout000066400000000000000000000323401307543307100247210ustar00rootroot00000000000000Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[2.9123] oneSample first= class=Point name=Unnamed dimension=1 values=[1.3426] last= class=Point name=Unnamed dimension=1 values=[3.87446] mean= class=Point name=Unnamed dimension=1 values=[2.34616] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.63794] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf = class=Point name=Unnamed dimension=1 values=[-0.0851881] ddf (ref)= class=Point name=Unnamed dimension=1 values=[-0.0851881] pdf =0.383346 pdf (ref)=0.383346 cdf=0.576060 ccdf=0.423940 cdf (ref)=0.576060 pdf gradient = class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] pdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] cdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] quantile= class=Point name=Unnamed dimension=1 values=[3.73264] quantile= class=Point name=Unnamed dimension=1 values=[3.73264] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.14928] Survival(inverseSurvival)=0.950000 Minimum volume interval= [1, 3.73264] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.57038} with f= MinimumVolumeLevelSetEvaluation(TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4)) beta= [0.207966] Bilateral confidence interval= [1.07578, 3.85894] beta= [0.95] Unilateral confidence interval (lower tail)= [1, 3.73264] beta= [0.95] Unilateral confidence interval (upper tail)= [1.14928, 4] beta= [0.95] mean = class=Point name=Unnamed dimension=1 values=[2.35526] mean (ref)= class=Point name=Unnamed dimension=1 values=[2.35526] standard deviation = class=Point name=Unnamed dimension=1 values=[0.802475] standard deviation (ref)= class=Point name=Unnamed dimension=1 values=[0.802475] skewness = class=Point name=Unnamed dimension=1 values=[0.190048] skewness (ref)= class=Point name=Unnamed dimension=1 values=[0.190048] kurtosis = class=Point name=Unnamed dimension=1 values=[1.9933] kurtosis (ref)= class=Point name=Unnamed dimension=1 values=[1.9933] covariance = class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] covariance (ref)= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] parameters = [class=PointWithDescription name=X0 dimension=6 description=[mean_0,standard_deviation_0,finiteLowerBound,lowerBound,finiteUpperBound,upperBound] values=[2,1.5,1,1,1,4]] parameters (ref)= [class=PointWithDescription name=X0 dimension=4 description=[mu,sigma,a,b] values=[2,1.5,1,4]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.0964922] standard moment n= 2 value= [0.295518] standard moment n= 3 value= [-0.0546493] standard moment n= 4 value= [0.168124] standard moment n= 5 value= [-0.0377976] Standard representative= TruncatedNormal(mu = -0.333333, sigma = 1, a = -1, b = 1) Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = +inf) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[2.69199] oneSample first= class=Point name=Unnamed dimension=1 values=[2.79367] last= class=Point name=Unnamed dimension=1 values=[1.76978] mean= class=Point name=Unnamed dimension=1 values=[2.64435] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.23607] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf = class=Point name=Unnamed dimension=1 values=[-0.0747934] ddf (ref)= class=Point name=Unnamed dimension=1 values=[-0.0747934] pdf =0.336570 pdf (ref)=0.336570 cdf=0.505769 ccdf=0.494231 cdf (ref)=0.505769 pdf gradient = class=Point name=Unnamed dimension=3 values=[-0.0210957,-0.135523,0.0958891] pdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[-0.0210957,-0.135523,0.0958891,0] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.195764,-0.206061,-0.140807] cdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[-0.195764,-0.206061,-0.140807,0] quantile= class=Point name=Unnamed dimension=1 values=[4.67299] quantile= class=Point name=Unnamed dimension=1 values=[4.67299] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.16934] Survival(inverseSurvival)=0.950000 Minimum volume interval= [1, 4.67299] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.62114} with f= MinimumVolumeLevelSetEvaluation(TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = +inf)) beta= [0.0727201] Bilateral confidence interval= [1.08613, 5.12246] beta= [0.95] Unilateral confidence interval (lower tail)= [1, 4.67299] beta= [0.95] Unilateral confidence interval (upper tail)= [1.16934, 13.4759] beta= [0.95] mean = class=Point name=Unnamed dimension=1 values=[2.64103] mean (ref)= class=Point name=Unnamed dimension=1 values=[2.64103] standard deviation = class=Point name=Unnamed dimension=1 values=[1.09456] standard deviation (ref)= class=Point name=Unnamed dimension=1 values=[1.09456] skewness = class=Point name=Unnamed dimension=1 values=[0.730758] skewness (ref)= class=Point name=Unnamed dimension=1 values=[0.730758] kurtosis = class=Point name=Unnamed dimension=1 values=[3.23251] kurtosis (ref)= class=Point name=Unnamed dimension=1 values=[3.23251] covariance = class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19806] covariance (ref)= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.19806] parameters = [class=PointWithDescription name=X0 dimension=6 description=[mean_0,standard_deviation_0,finiteLowerBound,lowerBound,finiteUpperBound,upperBound] values=[2,1.5,1,1,0,13.4759]] parameters (ref)= [class=PointWithDescription name=X0 dimension=4 description=[mu,sigma,a,b] values=[2,1.5,1,200]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.983507] standard moment n= 2 value= [0.967408] standard moment n= 3 value= [-0.951689] standard moment n= 4 value= [0.936342] standard moment n= 5 value= [-0.921354] Standard representative= TruncatedNormal(mu = -0.98995, sigma = 0.0150754, a = -1, b = 1) Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = -inf, b = 4) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[2.38239] oneSample first= class=Point name=Unnamed dimension=1 values=[1.09659] last= class=Point name=Unnamed dimension=1 values=[0.440643] mean= class=Point name=Unnamed dimension=1 values=[1.72507] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.64216] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf = class=Point name=Unnamed dimension=1 values=[-0.0615199] ddf (ref)= class=Point name=Unnamed dimension=1 values=[-0.0615199] pdf =0.276840 pdf (ref)=0.276840 cdf=0.693845 ccdf=0.306155 cdf (ref)=0.693845 pdf gradient = class=Point name=Unnamed dimension=3 values=[0.0948276,-0.119643,-0.0333077] pdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[0.0948276,-0.119643,0,-0.0333077] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.19336,0.0190258,-0.0834793] cdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[-0.19336,0.0190258,0,-0.0834793] quantile= class=Point name=Unnamed dimension=1 values=[3.64324] quantile= class=Point name=Unnamed dimension=1 values=[3.64324] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.53617] Survival(inverseSurvival)=0.950000 Minimum volume interval= [4, 4] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.65813} with f= MinimumVolumeLevelSetEvaluation(TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = -inf, b = 4)) beta= [0.0700792] Bilateral confidence interval= [-1.00085, 3.80883] beta= [0.95] Unilateral confidence interval (lower tail)= [-9.47594, 3.64324] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.53617, 4] beta= [0.95] mean = class=Point name=Unnamed dimension=1 values=[1.72929] mean (ref)= class=Point name=Unnamed dimension=1 values=[1.72929] standard deviation = class=Point name=Unnamed dimension=1 values=[1.27879] standard deviation (ref)= class=Point name=Unnamed dimension=1 values=[1.27879] skewness = class=Point name=Unnamed dimension=1 values=[-0.455767] skewness (ref)= class=Point name=Unnamed dimension=1 values=[-0.455767] kurtosis = class=Point name=Unnamed dimension=1 values=[2.84601] kurtosis (ref)= class=Point name=Unnamed dimension=1 values=[2.84601] covariance = class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.6353] covariance (ref)= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.6353] parameters = [class=PointWithDescription name=X0 dimension=6 description=[mean_0,standard_deviation_0,finiteLowerBound,lowerBound,finiteUpperBound,upperBound] values=[2,1.5,0,-9.47594,1,4]] parameters (ref)= [class=PointWithDescription name=X0 dimension=4 description=[mu,sigma,a,b] values=[2,1.5,-200,4]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.977738] standard moment n= 2 value= [0.956129] standard moment n= 3 value= [0.93515] standard moment n= 4 value= [0.91478] standard moment n= 5 value= [0.894999] Standard representative= TruncatedNormal(mu = 0.980392, sigma = 0.0147059, a = -1, b = 1) Distribution TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.19283] oneSample first= class=Point name=Unnamed dimension=1 values=[1.7907] last= class=Point name=Unnamed dimension=1 values=[3.44825] mean= class=Point name=Unnamed dimension=1 values=[2.35742] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643133] Point= class=Point name=Unnamed dimension=1 values=[2.5] ddf = class=Point name=Unnamed dimension=1 values=[-0.0851881] ddf (ref)= class=Point name=Unnamed dimension=1 values=[-0.0851881] pdf =0.383346 pdf (ref)=0.383346 cdf=0.576060 ccdf=0.423940 cdf (ref)=0.576060 pdf gradient = class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] pdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[0.02466,-0.0590839,0.124394,-0.0638662] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] cdf gradient (ref)= class=Point name=Unnamed dimension=4 values=[-0.149807,-0.0915298,-0.137567,-0.0959726] quantile= class=Point name=Unnamed dimension=1 values=[3.73264] quantile= class=Point name=Unnamed dimension=1 values=[3.73264] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[1.14928] Survival(inverseSurvival)=0.950000 Minimum volume interval= [1, 3.73264] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.57038} with f= MinimumVolumeLevelSetEvaluation(TruncatedDistribution(Normal(mu = 2, sigma = 1.5), a = 1, b = 4)) beta= [0.207966] Bilateral confidence interval= [1.07578, 3.85894] beta= [0.95] Unilateral confidence interval (lower tail)= [1, 3.73264] beta= [0.95] Unilateral confidence interval (upper tail)= [1.14928, 4] beta= [0.95] mean = class=Point name=Unnamed dimension=1 values=[2.35526] mean (ref)= class=Point name=Unnamed dimension=1 values=[2.35526] standard deviation = class=Point name=Unnamed dimension=1 values=[0.802475] standard deviation (ref)= class=Point name=Unnamed dimension=1 values=[0.802475] skewness = class=Point name=Unnamed dimension=1 values=[0.190048] skewness (ref)= class=Point name=Unnamed dimension=1 values=[0.190048] kurtosis = class=Point name=Unnamed dimension=1 values=[1.9933] kurtosis (ref)= class=Point name=Unnamed dimension=1 values=[1.9933] covariance = class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] covariance (ref)= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.643966] parameters = [class=PointWithDescription name=X0 dimension=6 description=[mean_0,standard_deviation_0,finiteLowerBound,lowerBound,finiteUpperBound,upperBound] values=[2,1.5,1,1,1,4]] parameters (ref)= [class=PointWithDescription name=X0 dimension=4 description=[mu,sigma,a,b] values=[2,1.5,1,4]] standard moment n= 0 value= [1] standard moment n= 1 value= [-0.0964922] standard moment n= 2 value= [0.295518] standard moment n= 3 value= [-0.0546493] standard moment n= 4 value= [0.168124] standard moment n= 5 value= [-0.0377976] Standard representative= TruncatedNormal(mu = -0.333333, sigma = 1, a = -1, b = 1) openturns-1.9/python/test/t_TruncatedDistribution_std.py000077500000000000000000000140451307543307100240320ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot import math as m def cleanPoint(inPoint): dim = inPoint.getDimension() for i in range(dim): if (m.fabs(inPoint[i]) < 1.e-10): inPoint[i] = 0.0 return inPoint # Instanciate one distribution object referenceDistribution = [ot.TruncatedNormal(2.0, 1.5, 1.0, 4.0), ot.TruncatedNormal(2.0, 1.5, 1.0, 200.0), ot.TruncatedNormal(2.0, 1.5, -200.0, 4.0), ot.TruncatedNormal(2.0, 1.5, 1.0, 4.0)] distribution = [ot.TruncatedDistribution(ot.Normal(2.0, 1.5), 1.0, 4.0), ot.TruncatedDistribution( ot.Normal(2.0, 1.5), 1.0, ot.TruncatedDistribution.LOWER), ot.TruncatedDistribution( ot.Normal(2.0, 1.5), 4.0, ot.TruncatedDistribution.UPPER), ot.TruncatedDistribution(ot.Normal(2.0, 1.5), ot.Interval([1.0], [4.0], [True], [True]))] for testCase in range(len(distribution)): print('Distribution ', distribution[testCase]) # Is this distribution elliptical ? print('Elliptical = ', distribution[testCase].isElliptical()) # Is this distribution continuous ? print('Continuous = ', distribution[testCase].isContinuous()) # Test for realization of distribution oneRealization = distribution[testCase].getRealization() print('oneRealization=', repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution[testCase].getSample(size) print('oneSample first=', repr( oneSample[0]), ' last=', repr(oneSample[size - 1])) print('mean=', repr(oneSample.computeMean())) print('covariance=', repr(oneSample.computeCovariance())) # Define a point point = ot.Point(distribution[testCase].getDimension(), 2.5) print('Point= ', repr(point)) # Show PDF and CDF of point eps = 1e-5 DDF = distribution[testCase].computeDDF(point) print('ddf =', repr(DDF)) print('ddf (ref)=', repr( referenceDistribution[testCase].computeDDF(point))) PDF = distribution[testCase].computePDF(point) print('pdf =%.6f' % PDF) print('pdf (ref)=%.6f' % referenceDistribution[testCase].computePDF(point)) CDF = distribution[testCase].computeCDF(point) print('cdf=%.6f' % CDF) CCDF = distribution[testCase].computeComplementaryCDF(point) print('ccdf=%.6f' % CCDF) print('cdf (ref)=%.6f' % referenceDistribution[testCase].computeCDF(point)) PDFgr = distribution[testCase].computePDFGradient(point) print('pdf gradient =', repr(cleanPoint(PDFgr))) print('pdf gradient (ref)=', repr( cleanPoint(referenceDistribution[testCase].computePDFGradient(point)))) CDFgr = distribution[testCase].computeCDFGradient(point) print('cdf gradient =', repr(cleanPoint(CDFgr))) print('cdf gradient (ref)=', repr( cleanPoint(referenceDistribution[testCase].computeCDFGradient(point)))) # quantile quantile = distribution[testCase].computeQuantile(0.95) print('quantile=', repr(quantile)) print( 'quantile=', repr(referenceDistribution[testCase].computeQuantile(0.95))) print('cdf(quantile)=%.6f' % distribution[testCase].computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point( distribution[testCase].computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution[testCase].computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution[ testCase].computeMinimumVolumeIntervalWithMarginalProbability(0.95) print("Minimum volume interval=", interval) print("threshold=", ot.Point(1, threshold)) levelSet, beta = distribution[ testCase].computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", ot.Point(1, beta)) interval, beta = distribution[ testCase].computeBilateralConfidenceIntervalWithMarginalProbability(0.95) print("Bilateral confidence interval=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution[ testCase].computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution[ testCase].computeUnilateralConfidenceIntervalWithMarginalProbability(0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution[testCase].getMean() print('mean =', repr(mean)) print('mean (ref)=', repr(referenceDistribution[testCase].getMean())) standardDeviation = distribution[testCase].getStandardDeviation() print('standard deviation =', repr(standardDeviation)) print('standard deviation (ref)=', repr( referenceDistribution[testCase].getStandardDeviation())) skewness = distribution[testCase].getSkewness() print('skewness =', repr(skewness)) print('skewness (ref)=', repr( referenceDistribution[testCase].getSkewness())) kurtosis = distribution[testCase].getKurtosis() print('kurtosis =', repr(kurtosis)) print('kurtosis (ref)=', repr( referenceDistribution[testCase].getKurtosis())) covariance = distribution[testCase].getCovariance() print('covariance =', repr(covariance)) print('covariance (ref)=', repr( referenceDistribution[testCase].getCovariance())) parameters = distribution[testCase].getParametersCollection() print('parameters =', repr(parameters)) print('parameters (ref)=', repr( referenceDistribution[testCase].getParametersCollection())) for i in range(6): print('standard moment n=', i, ' value=', referenceDistribution[testCase].getStandardMoment(i)) print('Standard representative=', referenceDistribution[ testCase].getStandardRepresentative()) openturns-1.9/python/test/t_TruncatedNormalFactory_std.expout000066400000000000000000000054731307543307100250310ustar00rootroot00000000000000distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-4 b=4 Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.013 sigma=1 a=-3.6 b=3.6 Default distribution= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) Distribution from parameters= TruncatedNormal(mu = 0, sigma = 1, a = -4, b = 4) TruncatedNormal = TruncatedNormal(mu = 0, sigma = 1, a = -4, b = 4) Estimated TruncatedNormal= TruncatedNormal(mu = -0.013, sigma = 1, a = -3.6, b = 3.6) Default TruncatedNormal= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) TruncatedNormal from parameters= TruncatedNormal(mu = 0, sigma = 1, a = -4, b = 4) distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-1 b=4 Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0.0092 sigma=1 a=-1 b=3.3 Default distribution= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) Distribution from parameters= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 4) TruncatedNormal = TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 4) Estimated TruncatedNormal= TruncatedNormal(mu = 0.0092, sigma = 1, a = -1, b = 3.3) Default TruncatedNormal= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) TruncatedNormal from parameters= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 4) distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=1 b=2 Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.09 sigma=1 a=1 b=2 Default distribution= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) Distribution from parameters= TruncatedNormal(mu = 0, sigma = 1, a = 1, b = 2) TruncatedNormal = TruncatedNormal(mu = 0, sigma = 1, a = 1, b = 2) Estimated TruncatedNormal= TruncatedNormal(mu = -0.09, sigma = 1, a = 1, b = 2) Default TruncatedNormal= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) TruncatedNormal from parameters= TruncatedNormal(mu = 0, sigma = 1, a = 1, b = 2) distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=3 b=6 Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=-0.072 sigma=1 a=3 b=5 Default distribution= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) Distribution from parameters= TruncatedNormal(mu = 0, sigma = 1, a = 3, b = 6) TruncatedNormal = TruncatedNormal(mu = 0, sigma = 1, a = 3, b = 6) Estimated TruncatedNormal= TruncatedNormal(mu = -0.072, sigma = 1, a = 3, b = 5) Default TruncatedNormal= TruncatedNormal(mu = 0, sigma = 1, a = -1, b = 1) TruncatedNormal from parameters= TruncatedNormal(mu = 0, sigma = 1, a = 3, b = 6) Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=0 sigma=1 a=-2.2e-15 b=2.2e-15 Estimated distribution= class=TruncatedNormal name=TruncatedNormal dimension=1 mu=1 sigma=1 a=1 b=1 openturns-1.9/python/test/t_TruncatedNormalFactory_std.py000077500000000000000000000031341307543307100241300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) mu = [0.0] * 4 sigma = [1.0] * 4 a = [-4., -1., 1., 3.] b = [4., 4., 2., 6.] for i in range(4): ot.PlatformInfo.SetNumericalPrecision(1 if i == 2 else 2) distribution = ot.TruncatedNormal(mu[i], sigma[i], a[i], b[i]) size = 10000 sample = distribution.getSample(size) factory = ot.TruncatedNormalFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedTruncatedNormal = factory.buildAsTruncatedNormal(sample) print("TruncatedNormal =", distribution) print("Estimated TruncatedNormal=", estimatedTruncatedNormal) estimatedTruncatedNormal = factory.buildAsTruncatedNormal() print("Default TruncatedNormal=", estimatedTruncatedNormal) estimatedTruncatedNormal = factory.buildAsTruncatedNormal( distribution.getParameter()) print("TruncatedNormal from parameters=", estimatedTruncatedNormal) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) openturns-1.9/python/test/t_TruncatedNormal_std.expout000066400000000000000000000056701307543307100235000ustar00rootroot00000000000000Distribution TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[-0.814797] oneSample first= class=Point name=Unnamed dimension=1 values=[1.55013] last= class=Point name=Unnamed dimension=1 values=[-0.505664] mean= class=Point name=Unnamed dimension=1 values=[0.0635542] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.25177] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.0148955] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.0148955] log pdf=-1.316321 pdf =0.268120 pdf (FD)=0.268120 cdf=0.743877 ccdf=0.256123 pdf gradient = class=Point name=Unnamed dimension=4 values=[0.0277138,-0.0118013,0.0515102,-0.0643285] pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[0.0277138,-0.0118013,0.0515102,-0.0643285] log-pdf gradient = class=Point name=Unnamed dimension=4 values=[0.103363,-0.0440151,0.192116,-0.239924] log-pdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[0.103363,-0.0440151,0.192116,-0.239924] cdf gradient = class=Point name=Unnamed dimension=4 values=[-0.0404404,0.00354582,-0.0492055,-0.178474] cdf gradient (FD)= class=Point name=Unnamed dimension=4 values=[-0.0404404,0.00354582,-0.0492055,-0.178474] quantile= class=Point name=Unnamed dimension=1 values=[1.79498] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-1.74843] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-1.74843, 2] threshold= [0.95] Minimum volume level set= {x | f(x) <= 1.58329} with f= MinimumVolumeLevelSetEvaluation(TruncatedNormal(mu = 0.5, sigma = 3, a = -2, b = 2)) beta= [0.205299] Bilateral confidence interval= [-1.87213, 1.89667] beta= [0.95] Unilateral confidence interval (lower tail)= [-2, 1.79498] beta= [0.95] Unilateral confidence interval (upper tail)= [-1.74843, 2] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[0.0697287] standard deviation= class=Point name=Unnamed dimension=1 values=[1.1195] skewness= class=Point name=Unnamed dimension=1 values=[-0.0708515] kurtosis= class=Point name=Unnamed dimension=1 values=[1.86887] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.25327] parameters= [class=PointWithDescription name=X0 dimension=4 description=[mu,sigma,a,b] values=[0.5,3,-2,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.0348644] standard moment n= 2 value= [0.314534] standard moment n= 3 value= [0.0203874] standard moment n= 4 value= [0.184018] standard moment n= 5 value= [0.0143554] Standard representative= TruncatedNormal(mu = 0.25, sigma = 1.5, a = -1, b = 1) openturns-1.9/python/test/t_TruncatedNormal_std.py000077500000000000000000000220111307543307100225730ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = TruncatedNormal(0.5, 3.0, -2.0, 2.0) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(4) PDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computePDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the logPDF with regards the parameters of the distribution logPDFgr = distribution.computeLogPDFGradient(point) print("log-pdf gradient =", repr(logPDFgr)) # by the finite difference technique logPDFgrFD = Point(4) logPDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computeLogPDF(point)) / (2.0 * eps) logPDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computeLogPDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computeLogPDF(point)) / (2.0 * eps) print("log-pdf gradient (FD)=", repr(logPDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(4) CDFgrFD[0] = (TruncatedNormal(distribution.getMu() + eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu() - eps, distribution.getSigma(), distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (TruncatedNormal(distribution.getMu(), distribution.getSigma() + eps, distribution.getA(), distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma() - eps, distribution.getA(), distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() + eps, distribution.getB()).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[3] = (TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() + eps).computeCDF(point) - TruncatedNormal(distribution.getMu(), distribution.getSigma(), distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_TruncatedNormal_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UniVariatePolynomial_std.expout000066400000000000000000000020431307543307100245000ustar00rootroot00000000000000P= 0 P( 1.2 )= 0.0 Initial coefficients= [1.3,2.4,2,-0.5,4,0] P1= class=UniVariatePolynomial coefficients=class=Point name=Unnamed dimension=5 values=[1.3,2.4,2,-0.5,4] P1= 1.3 + 2.4 * X + 2 * X^2 - 0.5 * X^3 + 4 * X^4 P1= 1.3 + 2.4 * Y + 2 * Y^2 - 0.5 * Y^3 + 4 * Y^4 P1 degree= 4 P1 roots= [(0.495448,0.89576),(0.495448,-0.89576),(-0.432948,0.350305),(-0.432948,-0.350305)] P1( 1.2 )= 14.4904 P1*2.0 = 2.6 + 4.8 * X + 4 * X^2 - X^3 + 8 * X^4 P1.incrementDegree(3)= 1.3 * X^3 + 2.4 * X^4 + 2 * X^5 - 0.5 * X^6 + 4 * X^7 P1.incrementDegree(0)= 1.3 + 2.4 * X + 2 * X^2 - 0.5 * X^3 + 4 * X^4 P1.incrementDegree(1)= 1.3 * X + 2.4 * X^2 + 2 * X^3 - 0.5 * X^4 + 4 * X^5 P1.incrementDegree()= 1.3 * X + 2.4 * X^2 + 2 * X^3 - 0.5 * X^4 + 4 * X^5 P2= -2.5 + 3.5 * X - 1.2 * X^2 P1+P2= -1.2 + 5.9 * X + 0.8 * X^2 - 0.5 * X^3 + 4 * X^4 P1-P2= 3.8 - 1.1 * X + 3.2 * X^2 - 0.5 * X^3 + 4 * X^4 P1*P2= -3.25 - 1.45 * X + 1.84 * X^2 + 5.37 * X^3 - 14.15 * X^4 + 14.6 * X^5 - 4.8 * X^6 P1*P2= -3.25 - 1.45 * X + 1.84 * X^2 + 5.37 * X^3 - 14.15 * X^4 + 14.6 * X^5 - 4.8 * X^6 openturns-1.9/python/test/t_UniVariatePolynomial_std.py000077500000000000000000000035561307543307100236210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Default constructor: null polynomial P = UniVariatePolynomial() point = 1.2 print("P=", P) print("P(", point, ")=", P(point)) # Constructor: construct the 1D polynomial with a vector of Point # e.g. UniVariatePolynomial P1 ( coefficients ) coefficients = Point(6) coefficients[0] = 1.3 coefficients[1] = 2.4 coefficients[2] = 2.0 coefficients[3] = -0.5 coefficients[4] = 4.0 coefficients[5] = 0.0 print("Initial coefficients=", coefficients) P1 = UniVariatePolynomial(coefficients) print("P1=", repr(P1)) print("P1=", P1) print("P1=", P1.__str__("Y", "")) print("P1 degree=", P1.getDegree()) print("P1 roots=", P1.getRoots()) print("P1(", point, ")=", P1(point)) # Multiplication by a scalar (postfix only) print("P1*2.0 =", P1 * 2.0) # P1.incrementDegree(incDeg) : multiply P1 by X^incDeg print("P1.incrementDegree(3)=", P1.incrementDegree(3)) print("P1.incrementDegree(0)=", P1.incrementDegree(0)) print("P1.incrementDegree(1)=", P1.incrementDegree(1)) print("P1.incrementDegree()=", P1.incrementDegree()) # Sum of two polynomials coefficients = Point(3) coefficients[0] = -2.5 coefficients[1] = 3.5 coefficients[2] = -1.2 P2 = UniVariatePolynomial(coefficients) print("P2=", P2) print("P1+P2=", P1 + P2) # Substraction of two polynomials print("P1-P2=", P1 - P2) # Multiplication of two polynomials print("P1*P2=", P1 * P2) # Multiplication of two polynomials using FFT ResourceMap.SetAsUnsignedInteger( "UniVariatePolynomialImplementation-LargeDegree", 0) print("P1*P2=", P1 * P2) except: import sys print("t_UniVariatePolynomial_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UniformFactory_std.expout000066400000000000000000000011211307543307100233300ustar00rootroot00000000000000distribution= class=Uniform name=Uniform dimension=1 a=1 b=2.5 Estimated distribution= class=Uniform name=Uniform dimension=1 a=1.00014 b=2.50009 Default distribution= Uniform(a = -1, b = 1) Distribution from parameters= Uniform(a = 1, b = 2.5) Uniform = Uniform(a = 1, b = 2.5) Estimated uniform= Uniform(a = 1.00014, b = 2.50009) Default uniform= Uniform(a = -1, b = 1) Uniform from parameters= Uniform(a = 1, b = 2.5) Estimated distribution= class=Uniform name=Uniform dimension=1 a=-2.22045e-15 b=2.22045e-15 Estimated distribution= class=Uniform name=Uniform dimension=1 a=1 b=1 openturns-1.9/python/test/t_UniformFactory_std.py000077500000000000000000000026461307543307100224540ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Uniform(1.0, 2.5) size = 10000 sample = distribution.getSample(size) factory = UniformFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedUniform = factory.buildAsUniform(sample) print("Uniform =", distribution) print("Estimated uniform=", estimatedUniform) estimatedUniform = factory.buildAsUniform() print("Default uniform=", estimatedUniform) estimatedUniform = factory.buildAsUniform( distribution.getParameter()) print("Uniform from parameters=", estimatedUniform) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_UniformFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Uniform_std.expout000066400000000000000000000052571307543307100220160ustar00rootroot00000000000000Distribution class=Uniform name=Uniform dimension=1 a=-0.5 b=1.5 Distribution Uniform(a = -0.5, b = 1.5) Mean= class=Point name=Unnamed dimension=1 values=[0.5] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.333333] Elliptical = True oneRealization= class=Point name=Unnamed dimension=1 values=[0.759753] oneSample first= class=Point name=Unnamed dimension=1 values=[1.26561] last= class=Point name=Unnamed dimension=1 values=[0.349444] mean= class=Point name=Unnamed dimension=1 values=[0.506426] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.339061] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[0] ddf (FD)= class=Point name=Unnamed dimension=1 values=[0] log pdf=-0.693147 pdf =0.500000 pdf (FD)=0.500000 cdf=0.750000 ccdf=0.250000 characteristic function= (0.738460262604+0.403422680111j) pdf gradient = class=Point name=Unnamed dimension=2 values=[0.25,-0.25] pdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[0.25,-0.25] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.125,-0.375] cdf gradient (FD)= class=Point name=Unnamed dimension=2 values=[-0.125,-0.375] quantile= class=Point name=Unnamed dimension=1 values=[1.4] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.4] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.45, 1.45] threshold= 0.95 Minimum volume level set= {x | f(x) <= 0.95} with f= [x]->[1 * abs(x - (0.5))] beta= 0.95 Bilateral confidence interval= [-0.45, 1.45] beta= 0.95 Unilateral confidence interval (lower tail)= [-0.5, 1.4] beta= 0.95 Unilateral confidence interval (upper tail)= [-0.4, 1.5] beta= 0.95 mean= class=Point name=Unnamed dimension=1 values=[0.5] standard deviation= class=Point name=Unnamed dimension=1 values=[0.57735] skewness= class=Point name=Unnamed dimension=1 values=[0] kurtosis= class=Point name=Unnamed dimension=1 values=[1.8] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.333333] parameters= [class=PointWithDescription name=X0 dimension=2 description=[a,b] values=[-0.5,1.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0] standard moment n= 2 value= [0.333333] standard moment n= 3 value= [0] standard moment n= 4 value= [0.2] standard moment n= 5 value= [0] Standard representative= Uniform(a = -1, b = 1) openturns-1.9/python/test/t_Uniform_std.py000077500000000000000000000137071307543307100211240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Uniform(-0.5, 1.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function= (%.12g%+.12gj)" % (CF.real, CF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(2) PDFgrFD[0] = (Uniform(distribution.getA() + eps, distribution.getB()).computePDF(point) - Uniform(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Uniform(distribution.getA(), distribution.getB() + eps).computePDF(point) - Uniform(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(2) CDFgrFD[0] = (Uniform(distribution.getA() + eps, distribution.getB()).computeCDF(point) - Uniform(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Uniform(distribution.getA(), distribution.getB() + eps).computeCDF(point) - Uniform(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", threshold) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", beta) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", beta) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", beta) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", beta) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Uniform_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UserDefinedCovarianceModel_std.expout000066400000000000000000004613241307543307100255510ustar00rootroot00000000000000myDefautModel = class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=1 n=0 covarianceCollection=[] myModel= class=UserDefinedCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=20 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.807586],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.730734],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.807586],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.661196],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.730734],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.807586],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.598274],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.661196],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.730734],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.807586],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4]] myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.730734 , referenceModel= 0.730734 myModel = 0.661196 , referenceModel= 0.661196 myModel = 0.598274 , referenceModel= 0.598274 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.730734 , referenceModel= 0.730734 myModel = 0.661196 , referenceModel= 0.661196 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.730734 , referenceModel= 0.730734 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.807586 , referenceModel= 0.807586 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 0.892521 , referenceModel= 0.892521 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 0.986388 , referenceModel= 0.986388 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 1.98634 , referenceModel= 1.98634 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.19525 , referenceModel= 2.19525 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.42612 , referenceModel= 2.42612 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 2.68128 , referenceModel= 2.68128 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 2.96327 , referenceModel= 2.96327 myModel = 0.730734 , referenceModel= 0.730734 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 3.27492 , referenceModel= 3.27492 myModel = 0.661196 , referenceModel= 0.661196 myModel = 0.730734 , referenceModel= 0.730734 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel = 3.61935 , referenceModel= 3.61935 myModel = 0.598274 , referenceModel= 0.598274 myModel = 0.661196 , referenceModel= 0.661196 myModel = 0.730734 , referenceModel= 0.730734 myModel = 0.807586 , referenceModel= 0.807586 myModel = 0.892521 , referenceModel= 0.892521 myModel = 0.986388 , referenceModel= 0.986388 myModel = 1.09013 , referenceModel= 1.09013 myModel = 1.20478 , referenceModel= 1.20478 myModel = 1.33148 , referenceModel= 1.33148 myModel = 1.47152 , referenceModel= 1.47152 myModel = 1.62628 , referenceModel= 1.62628 myModel = 1.79732 , referenceModel= 1.79732 myModel = 1.98634 , referenceModel= 1.98634 myModel = 2.19525 , referenceModel= 2.19525 myModel = 2.42612 , referenceModel= 2.42612 myModel = 2.68128 , referenceModel= 2.68128 myModel = 2.96327 , referenceModel= 2.96327 myModel = 3.27492 , referenceModel= 3.27492 myModel = 3.61935 , referenceModel= 3.61935 myModel = 4 , referenceModel= 4 myModel.discretize()= 20x20 [[ 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 0.892521 0.807586 0.730734 0.661196 0.598274 ] [ 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 0.892521 0.807586 0.730734 0.661196 ] [ 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 0.892521 0.807586 0.730734 ] [ 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 0.892521 0.807586 ] [ 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 0.892521 ] [ 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 0.986388 ] [ 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 1.09013 ] [ 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 1.20478 ] [ 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 1.33148 ] [ 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 1.47152 ] [ 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 1.62628 ] [ 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 1.79732 ] [ 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 1.98634 ] [ 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 2.19525 ] [ 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 2.42612 ] [ 0.892521 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 2.68128 ] [ 0.807586 0.892521 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 2.96327 ] [ 0.730734 0.807586 0.892521 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 3.27492 ] [ 0.661196 0.730734 0.807586 0.892521 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 3.61935 ] [ 0.598274 0.661196 0.730734 0.807586 0.892521 0.986388 1.09013 1.20478 1.33148 1.47152 1.62628 1.79732 1.98634 2.19525 2.42612 2.68128 2.96327 3.27492 3.61935 4 ]] class=Graph name=Unnamed covariance implementation=class=GraphImplementation name=Unnamed covariance title=Unnamed covariance xTitle=s yTitle=t axes=ON grid=ON legendposition=bottomright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.807586] labels=[0.807586] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.807586 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1.09013] labels=[1.09013] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1.09013 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1.47152] labels=[1.47152] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1.47152 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1.79732] labels=[1.79732] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1.79732 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1.98634] labels=[1.98634] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1.98634 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[2.42612] labels=[2.42612] show labels=false derived from class=DrawableImplementation name=Unnamed legend=2.42612 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[2.68128] labels=[2.68128] show labels=false derived from class=DrawableImplementation name=Unnamed legend=2.68128 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[2.96327] labels=[2.96327] show labels=false derived from class=DrawableImplementation name=Unnamed legend=2.96327 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[3.27492] labels=[3.27492] show labels=false derived from class=DrawableImplementation name=Unnamed legend=3.27492 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[4] labels=[4] show labels=false derived from class=DrawableImplementation name=Unnamed legend=4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.598274],[0.598274],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.661196],[0.661196],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.730734],[0.730734],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.807586],[0.807586],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.892521],[0.892521],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[0.986388],[0.986388],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.09013],[1.09013],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.20478],[1.20478],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.33148],[1.33148],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.47152],[1.47152],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.62628],[1.62628],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.79732],[1.79732],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[1.98634],[1.98634],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.19525],[2.19525],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.42612],[2.42612],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.68128],[2.68128],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[2.96327],[2.96327],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.27492],[3.27492],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[3.61935],[3.61935],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4],[0.598274],[0.661196],[0.730734],[0.807586],[0.892521],[0.986388],[1.09013],[1.20478],[1.33148],[1.47152],[1.62628],[1.79732],[1.98634],[2.19525],[2.42612],[2.68128],[2.96327],[3.27492],[3.61935],[4],[4]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] class=Graph name=Unnamed correlation implementation=class=GraphImplementation name=Unnamed correlation title=Unnamed correlation xTitle=s yTitle=t axes=ON grid=ON legendposition=bottomright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.201897] labels=[0.201897] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.201897 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.272532] labels=[0.272532] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.272532 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff9900 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.367879] labels=[0.367879] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.367879 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ccff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.449329] labels=[0.449329] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.449329 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#33ff00 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.496585] labels=[0.496585] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.496585 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ff66 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.606531] labels=[0.606531] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.606531 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#00ffff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.67032] labels=[0.67032] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.67032 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#0066ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.740818] labels=[0.740818] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.740818 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#3300ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[0.818731] labels=[0.818731] show labels=false derived from class=DrawableImplementation name=Unnamed legend=0.818731 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#cc00ff fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1,class=Drawable name=Unnamed implementation=class=Contour name=Unnamed x=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] y=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=1 description=[t] data=[[0],[0.1],[0.2],[0.3],[0.4],[0.5],[0.6],[0.7],[0.8],[0.9],[1],[1.1],[1.2],[1.3],[1.4],[1.5],[1.6],[1.7],[1.8],[1.9],[2]] levels=class=Point name=Unnamed dimension=1 values=[1] labels=[1] show labels=false derived from class=DrawableImplementation name=Unnamed legend=1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=441 dimension=1 data=[[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.149569],[0.149569],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.165299],[0.165299],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.182684],[0.182684],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.201897],[0.201897],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.22313],[0.22313],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.246597],[0.246597],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.272532],[0.272532],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.301194],[0.301194],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.332871],[0.332871],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.367879],[0.367879],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.40657],[0.40657],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.449329],[0.449329],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.496585],[0.496585],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.548812],[0.548812],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.606531],[0.606531],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.67032],[0.67032],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.740818],[0.740818],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.818731],[0.818731],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[0.904837],[0.904837],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1],[0.149569],[0.165299],[0.182684],[0.201897],[0.22313],[0.246597],[0.272532],[0.301194],[0.332871],[0.367879],[0.40657],[0.449329],[0.496585],[0.548812],[0.606531],[0.67032],[0.740818],[0.818731],[0.904837],[1],[1]] color=#ff0099 fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] openturns-1.9/python/test/t_UserDefinedCovarianceModel_std.py000077500000000000000000000036451307543307100246560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function, division from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) # Default constructor myDefautModel = UserDefinedCovarianceModel() print("myDefautModel = ", myDefautModel) # Default dimension parameter to evaluate the model dimension = 1 spatialDimension = 1 # Amplitude values amplitude = Point(dimension) # Scale values scale = Point(dimension) # Spatial correlation spatialCorrelation = CorrelationMatrix(dimension) for index in range(dimension): # constant amplitude amplitude[index] = 2.0 scale[index] = (index + 1.0) / dimension # Sample an ExponentialModel referenceModel = ExponentialModel( scale, amplitude, spatialCorrelation) size = 20 timeGrid = RegularGrid(0.0, 0.1, size) covarianceCollection = CovarianceMatrixCollection((size * (size + 1)) // 2) k = 0 for i in range(timeGrid.getN()): t = timeGrid.getValue(i) for j in range(i + 1): s = timeGrid.getValue(j) covarianceCollection[k] = referenceModel(t, s) k = k + 1 # Create a UserDefinedCovarianceModel myModel = UserDefinedCovarianceModel(timeGrid, covarianceCollection) print("myModel=", myModel) for i in range(timeGrid.getN()): t = timeGrid.getValue(i) for j in range(timeGrid.getN()): s = timeGrid.getValue(j) # We look for cov(s,t) ==> when adding to the collection, we compute cov(t,s) # Because of symmetry, we check the right index computation print("myModel = %.6g" % myModel(s, t)[ 0, 0], ", referenceModel= %.6g" % referenceModel(s, t)[0, 0]) print("myModel.discretize()=", myModel.discretize(timeGrid)) # Test the drawing method as a nonstationary model, in the covariance range graph = myModel.draw(0, 0, 0.0, 2.0, 21, False, False) print(graph) # Test the drawing method as a nonstationary model, in the correlation range graph = myModel.draw(0, 0, 0.0, 2.0, 21, False, True) print(graph) openturns-1.9/python/test/t_UserDefinedFactory_std.expout000066400000000000000000000017301307543307100241140ustar00rootroot00000000000000sample= class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] Estimated distribution= class=UserDefined name=UserDefined dimension=2 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=2 data=[[1,1.5],[2,2.5],[3,3.5]] probabilities=class=Point name=Unnamed dimension=3 values=[0.333333,0.333333,0.333333] Default distribution= UserDefined({x = [0], p = 1}) Sample = 0 : [ 1 1.5 ] 1 : [ 2 2.5 ] 2 : [ 3 3.5 ] Estimated UserDefined= UserDefined({x = [1,1.5], p = 0.333333}, {x = [2,2.5], p = 0.333333}, {x = [3,3.5], p = 0.333333}) Default UserDefined= UserDefined({x = [0], p = 1}) Estimated distribution= class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[10]] probabilities=class=Point name=Unnamed dimension=1 values=[1] openturns-1.9/python/test/t_UserDefinedFactory_std.py000077500000000000000000000020371307543307100232240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: sample = Sample(3, 2) sample[0] = Point((1.0, 1.5)) sample[1] = Point((2.0, 2.5)) sample[2] = Point((3.0, 3.5)) factory = UserDefinedFactory() estimatedDistribution = factory.build(sample) print("sample=", repr(sample)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedUserDefined = factory.buildAsUserDefined(sample) print("Sample =", sample) print("Estimated UserDefined=", estimatedUserDefined) estimatedUserDefined = factory.buildAsUserDefined() print("Default UserDefined=", estimatedUserDefined) estimatedDistribution = factory.build([[10]] * 2000) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_UserDefinedFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UserDefinedSpectralModel_std.expout000066400000000000000000000116761307543307100252550ustar00rootroot00000000000000myDefautModel = frequency=RegularGrid(start=0, step=1, n=0) dimension=0 DSPCollection=[] myModel= frequency=RegularGrid(start=0, step=0.4, n=5) dimension=2 DSPCollection=[[[ (0.5,0) (1,0) ] [ (1,0) (2,0) ]],[[ (0.0683382,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]],[[ (0.0190359,0) (0.0380718,0) ] [ (0.0380718,0) (0.0761435,0) ]],[[ (0.0086432,0) (0.0172864,0) ] [ (0.0172864,0) (0.0345728,0) ]],[[ (0.00489885,0) (0.0097977,0) ] [ (0.0097977,0) (0.0195954,0) ]]] frequency= -0.4 myModel= [[ (0.068338,0) (0,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.068338,0) (0,0) ] [ (0.136676,0) (0.273353,0) ]] frequency= -0.3375 myModel= [[ (0.068338,0) (0,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.090961,0) (0,0) ] [ (0.181923,0) (0.363846,0) ]] frequency= -0.275 myModel= [[ (0.068338,0) (0,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.125453,0) (0,0) ] [ (0.250906,0) (0.501812,0) ]] frequency= -0.2125 myModel= [[ (0.068338,0) (0,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.179682,0) (0,0) ] [ (0.359364,0) (0.718727,0) ]] frequency= -0.15 myModel= [[ (0.5,0) (0,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.264793,0) (0,0) ] [ (0.529587,0) (1.05917,0) ]] frequency= -0.0875 myModel= [[ (0.5,0) (0,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.383949,0) (0,0) ] [ (0.767898,0) (1.5358,0) ]] frequency= -0.025 myModel= [[ (0.5,0) (0,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.48796,0) (0,0) ] [ (0.97592,0) (1.95184,0) ]] frequency= 0.0375 myModel= [[ (0.5,0) (1,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.473702,0) (0,0) ] [ (0.947403,0) (1.89481,0) ]] frequency= 0.1 myModel= [[ (0.5,0) (1,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.358478,0) (0,0) ] [ (0.716957,0) (1.43391,0) ]] frequency= 0.1625 myModel= [[ (0.5,0) (1,0) ] [ (1,0) (2,0) ]] , referenceModel= [[ (0.244801,0) (0,0) ] [ (0.489602,0) (0.979203,0) ]] frequency= 0.225 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.166745,0) (0,0) ] [ (0.33349,0) (0.666979,0) ]] frequency= 0.2875 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.117284,0) (0,0) ] [ (0.234569,0) (0.469138,0) ]] frequency= 0.35 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.085674,0) (0,0) ] [ (0.171347,0) (0.342694,0) ]] frequency= 0.4125 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.064788,0) (0,0) ] [ (0.129576,0) (0.259151,0) ]] frequency= 0.475 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.050468,0) (0,0) ] [ (0.100935,0) (0.201871,0) ]] frequency= 0.5375 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.040305,0) (0,0) ] [ (0.080609,0) (0.161218,0) ]] frequency= 0.6 myModel= [[ (0.068338,0) (0.136676,0) ] [ (0.136676,0) (0.273353,0) ]] , referenceModel= [[ (0.032868,0) (0,0) ] [ (0.065737,0) (0.131473,0) ]] frequency= 0.6625 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.027282,0) (0,0) ] [ (0.054563,0) (0.109127,0) ]] frequency= 0.725 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.022988,0) (0,0) ] [ (0.045975,0) (0.09195,0) ]] frequency= 0.7875 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.019621,0) (0,0) ] [ (0.039242,0) (0.078484,0) ]] frequency= 0.85 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.016936,0) (0,0) ] [ (0.033872,0) (0.067743,0) ]] frequency= 0.9125 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.014761,0) (0,0) ] [ (0.029523,0) (0.059046,0) ]] frequency= 0.975 myModel= [[ (0.019036,0) (0.038072,0) ] [ (0.038072,0) (0.076144,0) ]] , referenceModel= [[ (0.012977,0) (0,0) ] [ (0.025954,0) (0.051909,0) ]] frequency= 1.0375 myModel= [[ (0.008643,0) (0.017286,0) ] [ (0.017286,0) (0.034573,0) ]] , referenceModel= [[ (0.011496,0) (0,0) ] [ (0.022991,0) (0.045982,0) ]] frequency= 1.1 myModel= [[ (0.008643,0) (0.017286,0) ] [ (0.017286,0) (0.034573,0) ]] , referenceModel= [[ (0.010252,0) (0,0) ] [ (0.020505,0) (0.04101,0) ]] openturns-1.9/python/test/t_UserDefinedSpectralModel_std.py000077500000000000000000000034531307543307100243560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (abs(inScalar) < 1.e-6): return 0.0 return inScalar try: # Default constructor myDefautModel = UserDefinedSpectralModel() print("myDefautModel = ", myDefautModel) # Default dimension parameter to evaluate the model dimension = 2 spatialDimension = 1 # Amplitude values amplitude = Point(dimension) # Scale values scale = Point(spatialDimension, 1.0) # Spatial correlation spatialCorrelation = CorrelationMatrix(dimension) for index in range(dimension): # constant amplitude amplitude[index] = (index + 1.0) / dimension if (index > 0): spatialCorrelation[index, index - 1] = 1.0 / index # Sample a CauchyModel referenceModel = CauchyModel(scale, amplitude, spatialCorrelation) size = 5 frequencyGrid = RegularGrid(0.0, 2.0 / size, size) dspCollection = HermitianMatrixCollection(frequencyGrid.getN()) for i in range(frequencyGrid.getN()): dspCollection[i] = referenceModel(frequencyGrid.getValue(i)) # Create a UserDefinedSpectralModel myModel = UserDefinedSpectralModel(frequencyGrid, dspCollection) print("myModel=", myModel) # Sample the UserDefinedSpectralModel samplingGrid = RegularGrid(-0.4, 1.0 / 16, 5 * size) for i in range(samplingGrid.getN()): frequency = samplingGrid.getValue(i) print("frequency= %g myModel=" % cleanScalar(frequency)) print(myModel(frequency).clean(1e-6), ", referenceModel=") print(referenceModel(frequency).clean(1e-6)) except: import sys print("t_UserDefinedSpectralModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UserDefinedStationaryCovarianceModel_std.expout000066400000000000000000000475741307543307100276360ustar00rootroot00000000000000myDefautModel = class=UserDefinedStationaryCovarianceModel mesh=class=Mesh name=Unnamed dimension=1 vertices=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=1 dimension=1 data=[[0]] simplices=[] covarianceCollection=[] reference model= ExponentialModel(scale=[1], amplitude=[2], no spatial correlation) myModel= class=UserDefinedStationaryCovarianceModel mesh=class=RegularGrid name=Unnamed start=0 step=0.1 n=100 covarianceCollection=[class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[4],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.61935],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[3.27492],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.96327],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.68128],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.42612],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[2.19525],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.98634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.79732],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.62628],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.47152],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.33148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.20478],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.09013],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.986388],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.892521],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.807586],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.730734],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.661196],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.598274],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.541341],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.489826],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.443213],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.401035],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.362872],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.32834],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.297094],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.268822],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.24324],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.220093],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.199148],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.180197],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.163049],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.147533],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.133493],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.12079],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.109295],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0988941],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0894831],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0809676],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0732626],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0662907],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0599823],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0542742],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0491094],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.044436],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0402073],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0363811],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.032919],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0297863],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0269518],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.024387],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0220663],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0199664],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0180663],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0163471],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0147915],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0133839],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0121102],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0109578],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00991501],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00897147],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00811772],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00734522],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00664623],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00601376],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00544147],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00492365],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.0044551],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00403114],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00364753],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00330042],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00298634],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00270216],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00244501],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00221234],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00200181],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00181131],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00163894],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00148297],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00134185],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00121416],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.00109861],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000994067],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000899469],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000813873],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000736423],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000666343],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000602932],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000545556],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000493639],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000446663],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000404158],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000365697],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000330896],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000299407],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000270915],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000245134],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000221806],class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[0.000200699]] t= 0 myModel = 4 , referenceModel= 4 t= 0.1 myModel = 3.61935 , referenceModel= 3.61935 t= 0.2 myModel = 3.27492 , referenceModel= 3.27492 t= 0.3 myModel = 2.96327 , referenceModel= 2.96327 t= 0.4 myModel = 2.68128 , referenceModel= 2.68128 t= 0.5 myModel = 2.42612 , referenceModel= 2.42612 t= 0.6 myModel = 2.19525 , referenceModel= 2.19525 t= 0.7 myModel = 1.98634 , referenceModel= 1.98634 t= 0.8 myModel = 1.79732 , referenceModel= 1.79732 t= 0.9 myModel = 1.62628 , referenceModel= 1.62628 t= 1 myModel = 1.47152 , referenceModel= 1.47152 t= 1.1 myModel = 1.33148 , referenceModel= 1.33148 t= 1.2 myModel = 1.20478 , referenceModel= 1.20478 t= 1.3 myModel = 1.09013 , referenceModel= 1.09013 t= 1.4 myModel = 0.986388 , referenceModel= 0.986388 t= 1.5 myModel = 0.892521 , referenceModel= 0.892521 t= 1.6 myModel = 0.807586 , referenceModel= 0.807586 t= 1.7 myModel = 0.730734 , referenceModel= 0.730734 t= 1.8 myModel = 0.661196 , referenceModel= 0.661196 t= 1.9 myModel = 0.598274 , referenceModel= 0.598274 t= 2 myModel = 0.541341 , referenceModel= 0.541341 t= 2.1 myModel = 0.489826 , referenceModel= 0.489826 t= 2.2 myModel = 0.443213 , referenceModel= 0.443213 t= 2.3 myModel = 0.401035 , referenceModel= 0.401035 t= 2.4 myModel = 0.362872 , referenceModel= 0.362872 t= 2.5 myModel = 0.32834 , referenceModel= 0.32834 t= 2.6 myModel = 0.297094 , referenceModel= 0.297094 t= 2.7 myModel = 0.268822 , referenceModel= 0.268822 t= 2.8 myModel = 0.24324 , referenceModel= 0.24324 t= 2.9 myModel = 0.220093 , referenceModel= 0.220093 t= 3 myModel = 0.199148 , referenceModel= 0.199148 t= 3.1 myModel = 0.180197 , referenceModel= 0.180197 t= 3.2 myModel = 0.163049 , referenceModel= 0.163049 t= 3.3 myModel = 0.147533 , referenceModel= 0.147533 t= 3.4 myModel = 0.133493 , referenceModel= 0.133493 t= 3.5 myModel = 0.12079 , referenceModel= 0.12079 t= 3.6 myModel = 0.109295 , referenceModel= 0.109295 t= 3.7 myModel = 0.0988941 , referenceModel= 0.0988941 t= 3.8 myModel = 0.0894831 , referenceModel= 0.0894831 t= 3.9 myModel = 0.0809676 , referenceModel= 0.0809676 t= 4 myModel = 0.0732626 , referenceModel= 0.0732626 t= 4.1 myModel = 0.0662907 , referenceModel= 0.0662907 t= 4.2 myModel = 0.0599823 , referenceModel= 0.0599823 t= 4.3 myModel = 0.0542742 , referenceModel= 0.0542742 t= 4.4 myModel = 0.0491094 , referenceModel= 0.0491094 t= 4.5 myModel = 0.044436 , referenceModel= 0.044436 t= 4.6 myModel = 0.0402073 , referenceModel= 0.0402073 t= 4.7 myModel = 0.0363811 , referenceModel= 0.0363811 t= 4.8 myModel = 0.032919 , referenceModel= 0.032919 t= 4.9 myModel = 0.0297863 , referenceModel= 0.0297863 t= 5 myModel = 0.0269518 , referenceModel= 0.0269518 t= 5.1 myModel = 0.024387 , referenceModel= 0.024387 t= 5.2 myModel = 0.0220663 , referenceModel= 0.0220663 t= 5.3 myModel = 0.0199664 , referenceModel= 0.0199664 t= 5.4 myModel = 0.0180663 , referenceModel= 0.0180663 t= 5.5 myModel = 0.0163471 , referenceModel= 0.0163471 t= 5.6 myModel = 0.0147915 , referenceModel= 0.0147915 t= 5.7 myModel = 0.0133839 , referenceModel= 0.0133839 t= 5.8 myModel = 0.0121102 , referenceModel= 0.0121102 t= 5.9 myModel = 0.0109578 , referenceModel= 0.0109578 t= 6 myModel = 0.00991501 , referenceModel= 0.00991501 t= 6.1 myModel = 0.00897147 , referenceModel= 0.00897147 t= 6.2 myModel = 0.00811772 , referenceModel= 0.00811772 t= 6.3 myModel = 0.00734522 , referenceModel= 0.00734522 t= 6.4 myModel = 0.00664623 , referenceModel= 0.00664623 t= 6.5 myModel = 0.00601376 , referenceModel= 0.00601376 t= 6.6 myModel = 0.00544147 , referenceModel= 0.00544147 t= 6.7 myModel = 0.00492365 , referenceModel= 0.00492365 t= 6.8 myModel = 0.0044551 , referenceModel= 0.0044551 t= 6.9 myModel = 0.00403114 , referenceModel= 0.00403114 t= 7 myModel = 0.00364753 , referenceModel= 0.00364753 t= 7.1 myModel = 0.00330042 , referenceModel= 0.00330042 t= 7.2 myModel = 0.00298634 , referenceModel= 0.00298634 t= 7.3 myModel = 0.00270216 , referenceModel= 0.00270216 t= 7.4 myModel = 0.00244501 , referenceModel= 0.00244501 t= 7.5 myModel = 0.00221234 , referenceModel= 0.00221234 t= 7.6 myModel = 0.00200181 , referenceModel= 0.00200181 t= 7.7 myModel = 0.00181131 , referenceModel= 0.00181131 t= 7.8 myModel = 0.00163894 , referenceModel= 0.00163894 t= 7.9 myModel = 0.00148297 , referenceModel= 0.00148297 t= 8 myModel = 0.00134185 , referenceModel= 0.00134185 t= 8.1 myModel = 0.00121416 , referenceModel= 0.00121416 t= 8.2 myModel = 0.00109861 , referenceModel= 0.00109861 t= 8.3 myModel = 0.000994067 , referenceModel= 0.000994067 t= 8.4 myModel = 0.000899469 , referenceModel= 0.000899469 t= 8.5 myModel = 0.000813873 , referenceModel= 0.000813873 t= 8.6 myModel = 0.000736423 , referenceModel= 0.000736423 t= 8.7 myModel = 0.000666343 , referenceModel= 0.000666343 t= 8.8 myModel = 0.000602932 , referenceModel= 0.000602932 t= 8.9 myModel = 0.000545556 , referenceModel= 0.000545556 t= 9 myModel = 0.000493639 , referenceModel= 0.000493639 t= 9.1 myModel = 0.000446663 , referenceModel= 0.000446663 t= 9.2 myModel = 0.000404158 , referenceModel= 0.000404158 t= 9.3 myModel = 0.000365697 , referenceModel= 0.000365697 t= 9.4 myModel = 0.000330896 , referenceModel= 0.000330896 t= 9.5 myModel = 0.000299407 , referenceModel= 0.000299407 t= 9.6 myModel = 0.000270915 , referenceModel= 0.000270915 t= 9.7 myModel = 0.000245134 , referenceModel= 0.000245134 t= 9.8 myModel = 0.000221806 , referenceModel= 0.000221806 t= 9.9 myModel = 0.000200699 , referenceModel= 0.000200699 class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Unnamed xTitle=tau yTitle=covariance axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=2 data=[[2,0.541341],[1.8,0.661196],[1.6,0.807586],[1.4,0.986388],[1.2,1.20478],[1,1.47152],[0.8,1.79732],[0.6,2.19525],[0.4,2.68128],[0.2,3.27492],[0,4],[-0.2,3.27492],[-0.4,2.68128],[-0.6,2.19525],[-0.8,1.79732],[-1,1.47152],[-1.2,1.20478],[-1.4,0.986388],[-1.6,0.807586],[-1.8,0.661196],[-2,0.541341]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] class=Graph name=Unnamed implementation=class=GraphImplementation name=Unnamed title=Unnamed xTitle=tau yTitle=correlation axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=21 dimension=2 data=[[2,0.135335],[1.8,0.165299],[1.6,0.201897],[1.4,0.246597],[1.2,0.301194],[1,0.367879],[0.8,0.449329],[0.6,0.548812],[0.4,0.67032],[0.2,0.818731],[0,1],[-0.2,0.818731],[-0.4,0.67032],[-0.6,0.548812],[-0.8,0.449329],[-1,0.367879],[-1.2,0.301194],[-1.4,0.246597],[-1.6,0.201897],[-1.8,0.165299],[-2,0.135335]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] openturns-1.9/python/test/t_UserDefinedStationaryCovarianceModel_std.py000077500000000000000000000040461307543307100267300ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Default constructor myDefautModel = UserDefinedStationaryCovarianceModel() print("myDefautModel = ", myDefautModel) # Default dimension parameter to evaluate the model dimension = 1 spatialDimension = 1 # Amplitude values amplitude = Point(dimension) # Scale values scale = Point(dimension) # Spatial correclation spatialCorrelation = CorrelationMatrix(dimension) for index in range(dimension): # constant amplitude amplitude[index] = 2.0 scale[index] = (index + 1.0) / dimension # Sample a ExponentialModel referenceModel = ExponentialModel( scale, amplitude, spatialCorrelation) print("reference model=", referenceModel) size = 100 timeGrid = RegularGrid(0.0, 0.1, size) covarianceCollection = CovarianceMatrixCollection(size) for i in range(timeGrid.getN()): t = timeGrid.getValue(i) covarianceCollection[i] = referenceModel(t) # Create a UserDefinedStationaryCovarianceModel myModel = UserDefinedStationaryCovarianceModel( timeGrid, covarianceCollection) print("myModel=", myModel) for i in range(timeGrid.getN()): t = timeGrid.getValue(i) # We look for cov(s,t) ==> when adding to the collection, we compute cov(t,s) # Because of symmetry, we check the right index computation print("t= %.6g" % t, "myModel = %.6g" % myModel(t)[0, 0], ", referenceModel= %.6g" % referenceModel(t)[0, 0]) # Test the drawing method as a nonstationary model, in the covariance range graph = myModel.draw(0, 0, -2.0, 2.0, 21, True, False) print(graph) # Test the drawing method as a nonstationary model, in the correlation # range graph = myModel.draw(0, 0, -2.0, 2.0, 21, True, True) print(graph) except: import sys print("t_UserDefinedStationaryCovarianceModel_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_UserDefined_std.expout000066400000000000000000000064121307543307100225660ustar00rootroot00000000000000Distribution class=UserDefined name=UserDefined dimension=1 points=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=3 dimension=1 data=[[1],[2],[3]] probabilities=class=Point name=Unnamed dimension=3 values=[0.1875,0.0625,0.75] Distribution UserDefined({x = [1], p = 0.1875}, {x = [2], p = 0.0625}, {x = [3], p = 0.75}) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[3] oneSample=Ok class=Sample name=UserDefined implementation=class=SampleImplementation name=UserDefined size=10 dimension=1 description=[v0] data=[[3],[1],[1],[3],[3],[3],[3],[1],[3],[3]] point= class=Point name=Unnamed dimension=1 values=[2] pdf= 0.0625 cdf= 0.25 Quantile= class=Point name=Unnamed dimension=1 values=[3] standard moment n= 0 value= [1] standard moment n= 1 value= [2.5625] standard moment n= 2 value= [7.1875] standard moment n= 3 value= [20.9375] standard moment n= 4 value= [61.9375] standard moment n= 5 value= [184.438] Standard representative= UserDefined({x = [1], p = 0.1875}, {x = [2], p = 0.0625}, {x = [3], p = 0.75}) Multivariate UserDefined= UserDefined({x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [0,0,0], p = 0.025}, {x = [10.1,10.2,10.3], p = 0.025}, {x = [10.1,10.2,10.3], p = 0.025}, {x = [10.1,10.2,10.3], p = 0.025}, {x = [20.1,20.2,20.3], p = 0.025}) Marginal 0= UserDefined({x = [0], p = 0.9}, {x = [10.1], p = 0.075}, {x = [20.1], p = 0.025}) Marginal (2, 0)= UserDefined({x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [0,0], p = 0.025}, {x = [10.3,10.1], p = 0.025}, {x = [10.3,10.1], p = 0.025}, {x = [10.3,10.1], p = 0.025}, {x = [20.3,20.1], p = 0.025}) openturns-1.9/python/test/t_UserDefined_std.py000077500000000000000000000040511307543307100216720ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object x = [[1.0], [2.0], [3.0], [3.0]] p = [0.3, 0.1, 0.6, 0.6] distribution = UserDefined(x, p) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10 oneSample = distribution.getSample(size) print("oneSample=Ok", repr(oneSample)) # Define a point point = Point(distribution.getDimension(), 2.0) # Show PDF and CDF of a point pointPDF = distribution.computePDF(point) pointCDF = distribution.computeCDF(point) print("point= ", repr(point), " pdf= %.12g" % pointPDF, " cdf=", pointCDF) # Get 95% quantile quantile = distribution.computeQuantile(0.95) print("Quantile=", repr(quantile)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) # To prevent automatic compaction ResourceMap.SetAsUnsignedInteger("UserDefined-SmallSize", 5) sample = Sample(40, 3) for i in range(4): for j in range(3): sample[i, j] = 10 * (i // 3 + 1) + 0.1 * (j + 1) multivariateUserDefined = UserDefined(sample) print("Multivariate UserDefined=", multivariateUserDefined) print("Marginal 0=", multivariateUserDefined.getMarginal(0)) indices = Indices(2) indices[0] = 2 indices[1] = 0 print("Marginal (2, 0)=", multivariateUserDefined.getMarginal(indices)) except: import sys print("t_UserDefined_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_ValueFunction_std.expout000066400000000000000000000007171307543307100231550ustar00rootroot00000000000000mySpatialFunc= [x]->[x^2] mySpatialFunc input description= [x] mySpatialFunc output description= [y0] mySpatialFunc input dimension= 1 mySpatialFunc output dimension= 1 input time series= [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 2 ] 3 : [ 0.6 3 ] 4 : [ 0.8 4 ] 5 : [ 1 5 ] output time series= [ t y0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 4 ] 3 : [ 0.6 9 ] 4 : [ 0.8 16 ] 5 : [ 1 25 ] called 1 times openturns-1.9/python/test/t_ValueFunction_std.py000077500000000000000000000024041307543307100222570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Create an intance myFunc = SymbolicFunction("x", "x^2") mySpatialFunc = ValueFunction(myFunc) print("mySpatialFunc=", mySpatialFunc) # Get the input and output description print("mySpatialFunc input description=", mySpatialFunc.getInputDescription()) print("mySpatialFunc output description=", mySpatialFunc.getOutputDescription()) # Get the input and output dimension, based on description print("mySpatialFunc input dimension=", mySpatialFunc.getInputDimension()) print("mySpatialFunc output dimension=", mySpatialFunc.getOutputDimension()) # Create a TimeSeries tg = RegularGrid(0.0, 0.2, 6) data = Sample(tg.getN(), myFunc.getInputDimension()) for i in range(data.getSize()): for j in range(data.getDimension()): data[i, j] = i * data.getDimension() + j ts = TimeSeries(tg, data) print("input time series=", ts) print("output time series=", mySpatialFunc(ts)) # Get the number of calls print("called ", mySpatialFunc.getCallsNumber(), " times") except: import sys print("t_ValueFunction_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_VertexValueFunction_std.expout000066400000000000000000000007321307543307100243500ustar00rootroot00000000000000myTemporalFunc= [t,x]->[x + t^2] myTemporalFunc input description= [x] myTemporalFunc output description= [y0] myTemporalFunc input dimension= 1 myTemporalFunc output dimension= 1 input time series= [ t v0 ] 0 : [ 0 0 ] 1 : [ 0.2 1 ] 2 : [ 0.4 2 ] 3 : [ 0.6 3 ] 4 : [ 0.8 4 ] 5 : [ 1 5 ] output time series= [ t y0 ] 0 : [ 0 0 ] 1 : [ 0.2 1.04 ] 2 : [ 0.4 2.16 ] 3 : [ 0.6 3.36 ] 4 : [ 0.8 4.64 ] 5 : [ 1 6 ] called 1 times openturns-1.9/python/test/t_VertexValueFunction_std.py000077500000000000000000000024701307543307100234600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: # Create an intance myFunc = SymbolicFunction(["t", "x"], ["x + t^2"]) myTemporalFunc = VertexValueFunction(myFunc) print("myTemporalFunc=", myTemporalFunc) # Get the input and output description print("myTemporalFunc input description=", myTemporalFunc.getInputDescription()) print("myTemporalFunc output description=", myTemporalFunc.getOutputDescription()) # Get the input and output dimension, based on description print("myTemporalFunc input dimension=", myTemporalFunc.getInputDimension()) print("myTemporalFunc output dimension=", myTemporalFunc.getOutputDimension()) # Create a TimeSeries tg = RegularGrid(0.0, 0.2, 6) data = Sample(tg.getN(), myFunc.getInputDimension() - 1) for i in range(data.getSize()): for j in range(data.getDimension()): data[i, j] = i * data.getDimension() + j ts = TimeSeries(tg, data) print("input time series=", ts) print("output time series=", myTemporalFunc(ts)) # Get the number of calls print("called ", myTemporalFunc.getCallsNumber(), " times") except: import sys print("t_VertexValueFunction_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Viewer.py000077500000000000000000000150551307543307100200720ustar00rootroot00000000000000#! /usr/bin/env python import os import traceback try: # use non-interactive backend import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from openturns.viewer import View import openturns as ot # Curve graph = ot.Normal().drawCDF() # graph.draw('curve1.png') view = View(graph, pixelsize=(800, 600), plot_kwargs={'color': 'blue'}) # view.save('curve1.png') view.show() # Contour graph = ot.Normal([1, 2], [3, 5], ot.CorrelationMatrix(2)).drawPDF() # graph.draw('curve2.png') view = View(graph) # view.save('curve2.png') view.show() # Histogram tests normal = ot.Normal(1) size = 100 sample = normal.getSample(size) graph = ot.VisualTest.DrawHistogram(sample, 10) # graph.draw('curve3.png') view = View(graph) # view.save('curve3.png') view.show() # QQPlot tests size = 100 normal = ot.Normal(1) sample = normal.getSample(size) sample2 = ot.Gamma(3.0, 4.0, 0.0).getSample(size) graph = ot.VisualTest.DrawQQplot(sample, sample2, 100) # graph.draw('curve4.png') view = View(graph) # view.save('curve4.png') plt.show(block=True) # Clouds tests dimension = (2) R = ot.CorrelationMatrix(dimension) R[0, 1] = 0.8 distribution = ot.Normal( ot.Point(dimension, 3.0), ot.Point(dimension, 2.0), R) size = 100 sample2D = distribution.getSample(size) firstSample = ot.Sample(size, 1) secondSample = ot.Sample(size, 1) for i in range(size): firstSample[i] = ot.Point(1, sample2D[i, 0]) secondSample[i] = ot.Point(1, sample2D[i, 1]) graph = ot.VisualTest.DrawClouds( sample2D, ot.Normal(ot.Point(dimension, 2.0), ot.Point(dimension, 3.0), R).getSample(size // 2)) # graph.draw('curve5.png') view = View(graph) # view.save('curve5.png') View.ShowAll() # Text graph = ot.Graph('Annotated cloud', 'x', 'y', True, '') distribution = ot.Normal(2) size = 30 sample2D = distribution.getSample(size) cloud = ot.Cloud(sample2D, "red", "fsquare", "Sample2D Cloud") graph.add(cloud) # Display extrema indices x1 = [x[0] for x in sample2D[:, 0]] x2 = [x[0] for x in sample2D[:, 1]] idx = [0] * 4 idx[0] = x1.index(min(x1)) idx[1] = x1.index(max(x1)) idx[2] = x2.index(min(x2)) idx[3] = x2.index(max(x2)) labels = ot.Description(sample2D.getSize()) for i in range(4): labels[idx[i]] = str(idx[i]) position = ot.Description(sample2D.getSize(), "top") position[idx[0]] = "right" position[idx[1]] = "left" position[idx[2]] = "top" position[idx[3]] = "bottom" text = ot.Text(sample2D, labels) text.setColor("red") text.setTextPositions(position) graph.add(text) view = View(graph) view.show() # CobWeb tests size = 100 dim = 6 inputSample = ot.Normal(dim).getSample(size) inputVar = list(['X' + str(i) for i in range(dim)]) expression = '' for i in range(dim): if i > 0: expression += '+' expression += 'cos(' + str(i + 1) + '*' + inputVar[i] + ')' model = ot.Function(inputVar, ['y'], [expression]) outputSample = model(inputSample) graph = ot.VisualTest.DrawCobWeb( inputSample, outputSample, 2.5, 3.0, 'red', False) # graph.draw('curve6.png') view = View(graph, legend_kwargs={'loc': 'lower center'}) # view.save('curve6.png') view.show() # Staircase distribution = ot.Poisson(10.0) graph = distribution.drawCDF() # graph.draw('curve7.png') view = View(graph) # view.save('curve7.png') view.show() # Pie graph = ot.SobolIndicesAlgorithmImplementation.DrawImportanceFactors( [.4, .3, .2, .1], ['a0', 'a1', 'a2', 'a3'], 'Zou') # graph.draw('curve8.png') view = View(graph) # view.save('curve8.png') plt.show(block=True) # Pairs dim = 5 meanPoint = ot.Point(dim, 0.0) sigma = ot.Point(dim, 1.0) R = ot.CorrelationMatrix(dim) for i in range(dim): meanPoint[i] = (i + 1) * dim distribution = ot.Normal(meanPoint, sigma, R) size = 1000 sample = distribution.getSample(size) graph = ot.Graph('Pairs', ' ', ' ', True, 'topright') labels = list(['x' + str(i) for i in range(dim)]) myPairs = ot.Pairs(sample, 'Pairs example', labels, 'green', 'bullet') graph.add(myPairs) # graph.draw('curve9.png') view = View(graph) # view.save('curve9.png') View.ShowAll() # Convergence graph curve aCollection = [] aCollection.append(ot.LogNormalFactory().build( ot.LogNormalMuSigma()([300.0, 30.0, 0.0]))) aCollection.append(ot.Normal(75e3, 5e3)) myDistribution = ot.ComposedDistribution(aCollection) vect = ot.RandomVector(myDistribution) LimitState = ot.SymbolicFunction( ('R', 'F'), ('R-F/(_pi*100.0)',)) G = ot.RandomVector(LimitState, vect) myEvent = ot.Event(G, ot.Less(), 0.0) myAlgo = ot.MonteCarlo(myEvent) myAlgo.setMaximumCoefficientOfVariation(0.05) myAlgo.setMaximumOuterSampling(int(1e5)) myAlgo.run() graph = myAlgo.drawProbabilityConvergence() # graph.draw('curve10.png') view = View(graph) # view.save('curve10.png') view.show() # Polygon size = 50 cursor = [0.] * 2 data1 = ot.Sample(size, 2) # polygon y = 2x for x in [-25] data2 = ot.Sample(size, 2) # polygon y = x*x for x in [-11] for i in range(size): tmp = 7. * i / size + 2 cursor[0] = tmp cursor[1] = 2 * tmp data1[i] = cursor tmp = 9. * i / size + 1 cursor[0] = tmp cursor[1] = tmp * tmp data2[i] = cursor graph = ot.Graph('Some polygons', 'x1', 'x2', True, 'topright', 1.0) myPolygon1 = ot.Polygon(data1) myPolygon1.setColor('blue') graph.add(myPolygon1) myPolygon2 = ot.Polygon(data2) myPolygon2.setColor('red') graph.add(myPolygon2) # graph.draw('curve11.png') view = View(graph) # view.save('curve11.png') view.show() # PolygonArray generator = ot.Normal(2) size = 5 array = ot.PolygonCollection(size) palette = ot.Drawable.BuildDefaultPalette(size) palette[0] = 'blue' for i in range(size): vertices = generator.getSample(3) array[i] = ot.Polygon(vertices, palette[i], palette[size - i - 1]) graph = ot.Graph('An array of polygons', 'x', 'y', True, '') graph.add(ot.PolygonArray(array)) # graph.draw('curve12.png') view = View(graph) # view.save('curve12.png') View.ShowAll() except: traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_VisualTest_std.expout000066400000000000000000003372031307543307100225010ustar00rootroot00000000000000sampleCDF = class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=102 dimension=2 data=[[-3.29006,0],[-2.29006,0.01],[-2.18139,0.02],[-1.96869,0.03],[-1.78796,0.04],[-1.66086,0.05],[-1.53073,0.06],[-1.36853,0.07],[-1.31178,0.08],[-1.28289,0.09],[-1.26617,0.1],[-1.03896,0.11],[-1.03808,0.12],[-0.958722,0.13],[-0.957072,0.14],[-0.938771,0.15],[-0.901581,0.16],[-0.89182,0.17],[-0.856712,0.18],[-0.855886,0.19],[-0.781366,0.2],[-0.777033,0.21],[-0.752817,0.22],[-0.743622,0.23],[-0.734708,0.24],[-0.721533,0.25],[-0.671291,0.26],[-0.657603,0.27],[-0.633066,0.28],[-0.560206,0.29],[-0.510764,0.3],[-0.506925,0.31],[-0.485112,0.32],[-0.483642,0.33],[-0.470526,0.34],[-0.438266,0.35],[-0.382992,0.36],[-0.355007,0.37],[-0.353552,0.38],[-0.241223,0.39],[-0.238253,0.4],[-0.181004,0.41],[-0.160625,0.42],[-0.139453,0.43],[-0.125498,0.44],[-0.111461,0.45],[-0.0907838,0.46],[-0.0899071,0.47],[-0.0436123,0.48],[0.0521593,0.49],[0.0702074,0.5],[0.103474,0.51],[0.184356,0.52],[0.257926,0.53],[0.261018,0.54],[0.29995,0.55],[0.322925,0.56],[0.334794,0.57],[0.338751,0.58],[0.350042,0.59],[0.351418,0.6],[0.377922,0.61],[0.40136,0.62],[0.407717,0.63],[0.44549,0.64],[0.445785,0.65],[0.473617,0.66],[0.538071,0.67],[0.539345,0.68],[0.544047,0.69],[0.608202,0.7],[0.637167,0.71],[0.655027,0.72],[0.677958,0.73],[0.716353,0.74],[0.741548,0.75],[0.759602,0.76],[0.790446,0.77],[0.793156,0.78],[0.810668,0.79],[0.814561,0.8],[0.905602,0.81],[0.994482,0.82],[0.995793,0.83],[1.00434,0.84],[1.01556,0.85],[1.07062,0.86],[1.20548,0.87],[1.21381,0.88],[1.27128,0.89],[1.3263,0.9],[1.36783,0.91],[1.43725,0.92],[1.67297,0.93],[1.70938,0.94],[1.73821,0.95],[1.78236,0.96],[1.85579,0.97],[1.96876,0.98],[2.11968,0.99],[2.24623,1],[3.24623,1]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2] sampleCDFZoom = class=Graph name=X0 CDF implementation=class=GraphImplementation name=X0 CDF title=X0 CDF xTitle=X0 yTitle=CDF axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=X0 CDF implementation=class=Staircase name=X0 CDF pattern=s derived from class=DrawableImplementation name=X0 CDF legend=X0 CDF data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=37 dimension=2 data=[[-0.5,0.31],[-0.485112,0.32],[-0.483642,0.33],[-0.470526,0.34],[-0.438266,0.35],[-0.382992,0.36],[-0.355007,0.37],[-0.353552,0.38],[-0.241223,0.39],[-0.238253,0.4],[-0.181004,0.41],[-0.160625,0.42],[-0.139453,0.43],[-0.125498,0.44],[-0.111461,0.45],[-0.0907838,0.46],[-0.0899071,0.47],[-0.0436123,0.48],[0.0521593,0.49],[0.0702074,0.5],[0.103474,0.51],[0.184356,0.52],[0.257926,0.53],[0.261018,0.54],[0.29995,0.55],[0.322925,0.56],[0.334794,0.57],[0.338751,0.58],[0.350042,0.59],[0.351418,0.6],[0.377922,0.61],[0.40136,0.62],[0.407717,0.63],[0.44549,0.64],[0.445785,0.65],[0.473617,0.66],[0.5,0.66]] color=red fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=2] sampleHist = class=Graph name=sample histogram implementation=class=GraphImplementation name=sample histogram title=sample histogram xTitle=realizations yTitle=frequency axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Normal histogram data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=44 dimension=2 data=[[-3.40287,0],[-3.09737,0],[-3.09737,0],[-3.09737,0.0163666],[-2.48637,0.0163666],[-2.48637,0],[-2.48637,0],[-2.48637,0.0490998],[-1.87537,0.0490998],[-1.87537,0],[-1.87537,0],[-1.87537,0.180033],[-1.26437,0.180033],[-1.26437,0],[-1.26437,0],[-1.26437,0.196399],[-0.653374,0.196399],[-0.653374,0],[-0.653374,0],[-0.653374,0.425532],[-0.0423737,0.425532],[-0.0423737,0],[-0.0423737,0],[-0.0423737,0.409165],[0.568626,0.409165],[0.568626,0],[0.568626,0],[0.568626,0.245499],[1.17963,0.245499],[1.17963,0],[1.17963,0],[1.17963,0.0654664],[1.79063,0.0654664],[1.79063,0],[1.79063,0],[1.79063,0.0327332],[2.40163,0.0327332],[2.40163,0],[2.40163,0],[2.40163,0.0163666],[3.01263,0.0163666],[3.01263,0],[3.01263,0],[3.31813,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] sampleHistOpt = class=Graph name=sample histogram implementation=class=GraphImplementation name=sample histogram title=sample histogram xTitle=realizations yTitle=frequency axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Normal histogram data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=48 dimension=2 data=[[-3.3751,0],[-3.09737,0],[-3.09737,0],[-3.09737,0.0180033],[-2.54192,0.0180033],[-2.54192,0],[-2.54192,0],[-2.54192,0.0360065],[-1.98646,0.0360065],[-1.98646,0],[-1.98646,0],[-1.98646,0.162029],[-1.43101,0.162029],[-1.43101,0],[-1.43101,0],[-1.43101,0.10802],[-0.875556,0.10802],[-0.875556,0],[-0.875556,0],[-0.875556,0.432078],[-0.320101,0.432078],[-0.320101,0],[-0.320101,0],[-0.320101,0.450082],[0.235354,0.450082],[0.235354,0],[0.235354,0],[0.235354,0.342062],[0.790808,0.342062],[0.790808,0],[0.790808,0],[0.790808,0.162029],[1.34626,0.162029],[1.34626,0],[1.34626,0],[1.34626,0.0540098],[1.90172,0.0540098],[1.90172,0],[1.90172,0],[1.90172,0.0180033],[2.45717,0.0180033],[2.45717,0],[2.45717,0],[2.45717,0.0180033],[3.01263,0.0180033],[3.01263,0],[3.01263,0],[3.29035,0]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2] twoSamplesQQPlot = class=Graph name=Two sample QQ-plot implementation=class=GraphImplementation name=Two sample QQ-plot title=Two sample QQ-plot xTitle=X0 yTitle=X0 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Test line implementation=class=Curve name=Test line derived from class=DrawableImplementation name=Test line legend=Test line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.53986,-2.53986],[3.02799,3.02799]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=129 dimension=2 data=[[-2.53986,0.130531],[-2.3584,0.141065],[-2.22492,0.172603],[-2.07833,0.209048],[-1.73729,0.219418],[-1.71624,0.220038],[-1.67734,0.231799],[-1.64098,0.247931],[-1.6054,0.262937],[-1.43448,0.27588],[-1.40034,0.282152],[-1.35331,0.287111],[-1.27085,0.294035],[-1.19141,0.306743],[-1.11356,0.327211],[-1.07076,0.337779],[-1.04444,0.356007],[-1.01735,0.392534],[-1.00221,0.395843],[-0.997483,0.402025],[-0.996341,0.405493],[-0.99204,0.405807],[-0.972962,0.406961],[-0.932293,0.41335],[-0.912152,0.427012],[-0.907139,0.442158],[-0.905238,0.452256],[-0.881093,0.455715],[-0.825212,0.459285],[-0.790001,0.461885],[-0.782488,0.463199],[-0.748888,0.463733],[-0.692693,0.465162],[-0.654903,0.466362],[-0.634524,0.467129],[-0.621781,0.467453],[-0.596049,0.468737],[-0.562946,0.472978],[-0.54283,0.480789],[-0.541741,0.491399],[-0.538007,0.500248],[-0.526837,0.501781],[-0.520651,0.507723],[-0.511916,0.515879],[-0.485392,0.519296],[-0.473519,0.521494],[-0.460938,0.522176],[-0.449036,0.522932],[-0.439163,0.527872],[-0.433544,0.55514],[-0.418991,0.559943],[-0.409945,0.566226],[-0.399874,0.576097],[-0.369068,0.582016],[-0.346171,0.583751],[-0.332767,0.591706],[-0.310882,0.604236],[-0.272195,0.619067],[-0.269969,0.632891],[-0.263168,0.639578],[-0.249726,0.645534],[-0.218292,0.653529],[-0.142833,0.665311],[-0.0790324,0.668342],[-0.0459341,0.675827],[-0.0349582,0.684318],[-0.0340909,0.689421],[-0.0304379,0.692289],[-0.024877,0.693154],[-0.0150991,0.6956],[-0.000320788,0.700593],[0.0190423,0.706621],[0.0554855,0.709324],[0.0896927,0.710849],[0.120096,0.720131],[0.150148,0.745698],[0.243855,0.746206],[0.287483,0.747346],[0.344707,0.749668],[0.428074,0.752775],[0.457414,0.753981],[0.464363,0.766082],[0.47023,0.777283],[0.478833,0.783956],[0.49056,0.78406],[0.53638,0.802417],[0.556863,0.816107],[0.567212,0.822991],[0.577788,0.823215],[0.59011,0.823634],[0.596736,0.827205],[0.607437,0.839415],[0.619456,0.853229],[0.623746,0.853566],[0.651189,0.858448],[0.660542,0.89134],[0.666104,0.921469],[0.680389,0.927852],[0.706346,0.935347],[0.718031,0.948716],[0.740396,0.962109],[0.768227,0.974195],[0.772866,0.985881],[0.777847,1.0141],[0.802635,1.03411],[0.834408,1.05487],[0.858288,1.08503],[0.858554,1.1117],[0.876981,1.16215],[0.909722,1.19474],[0.974338,1.20216],[1.12562,1.20835],[1.14553,1.25293],[1.15559,1.27228],[1.19904,1.28728],[1.3028,1.32666],[1.33956,1.33948],[1.38391,1.34555],[1.41589,1.3563],[1.43119,1.38387],[1.44823,1.45346],[1.45637,1.49845],[1.46893,1.58152],[1.53102,1.66345],[1.69711,1.67919],[1.85096,1.723],[1.92294,1.75708],[2.3109,1.96794],[3.02799,2.34863]] color=blue fillStyle=solid lineStyle=solid pointStyle=bullet lineWidth=1] sampleDistributionQQPlot = class=Graph name=Sample versus model QQ-plot implementation=class=GraphImplementation name=Sample versus model QQ-plot title=Sample versus model QQ-plot xTitle=X0 yTitle=Normal(mu = 0, sigma = 1) axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Test line implementation=class=Curve name=Test line derived from class=DrawableImplementation name=Test line legend=Test line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.53986,-2.53986],[3.02799,3.02799]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-2.53986,-2.57583],[-2.26608,-2.17009],[-2.17211,-1.95996],[-1.73218,-1.81191],[-1.71131,-1.6954],[-1.64827,-1.59819],[-1.62506,-1.5141],[-1.40457,-1.43953],[-1.39796,-1.3722],[-1.29031,-1.31058],[-1.18784,-1.25357],[-1.08751,-1.20036],[-1.05502,-1.15035],[-1.01864,-1.10306],[-0.999111,-1.05812],[-0.996469,-1.01522],[-0.996141,-0.974114],[-0.971531,-0.934589],[-0.91681,-0.896473],[-0.907348,-0.859617],[-0.906566,-0.823894],[-0.875419,-0.789192],[-0.790757,-0.755415],[-0.788704,-0.722479],[-0.74536,-0.690309],[-0.669449,-0.658838],[-0.638434,-0.628006],[-0.622424,-0.59776],[-0.58923,-0.568051],[-0.543099,-0.538836],[-0.542319,-0.510073],[-0.537503,-0.481727],[-0.521596,-0.453762],[-0.519476,-0.426148],[-0.485259,-0.398855],[-0.470039,-0.371856],[-0.453386,-0.345126],[-0.439866,-0.318639],[-0.432617,-0.292375],[-0.411565,-0.266311],[-0.40773,-0.240426],[-0.36799,-0.214702],[-0.338823,-0.189118],[-0.327249,-0.163658],[-0.272407,-0.138304],[-0.269535,-0.113039],[-0.259332,-0.0878448],[-0.23527,-0.0627068],[-0.137928,-0.0376083],[-0.0566709,-0.0125335],[-0.0351973,0.0125335],[-0.0343283,0.0376083],[-0.029616,0.0627068],[-0.0217279,0.0878448],[-0.00409659,0.113039],[0.0208818,0.138304],[0.0702065,0.163658],[0.11108,0.189118],[0.146868,0.214702],[0.26775,0.240426],[0.301918,0.266311],[0.423232,0.292375],[0.461082,0.318639],[0.465919,0.345126],[0.475425,0.371856],[0.490331,0.398855],[0.549439,0.426148],[0.562833,0.453762],[0.576125,0.481727],[0.59202,0.510073],[0.59922,0.538836],[0.618319,0.568051],[0.623854,0.59776],[0.660021,0.628006],[0.661002,0.658838],[0.677663,0.690309],[0.711148,0.722479],[0.722044,0.755415],[0.767137,0.789192],[0.773121,0.823894],[0.779572,0.859617],[0.824993,0.896473],[0.858269,0.934589],[0.858611,0.974114],[0.888798,1.01522],[0.943326,1.05812],[1.13848,1.10306],[1.14842,1.15035],[1.16322,1.20036],[1.30115,1.25357],[1.34856,1.31058],[1.40895,1.3722],[1.4282,1.43953],[1.45019,1.5141],[1.45919,1.59819],[1.48031,1.6954],[1.6948,1.81191],[1.89326,1.95996],[1.94606,2.17009],[3.02799,2.57583]] color=blue fillStyle=solid lineStyle=solid pointStyle=bullet lineWidth=1] HenryPlot = class=Graph name=Henry plot implementation=class=GraphImplementation name=Henry plot title=Henry plot xTitle=Sample yTitle=Standard normal quantiles axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Henry line implementation=class=Curve name=Henry line derived from class=DrawableImplementation name=Henry line legend=Henry line data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[-2.72106,-2.71811],[2.59603,2.63247]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Data implementation=class=Cloud name=Data derived from class=DrawableImplementation name=Data legend=Data data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-2.72106,-2.57583],[-2.26914,-2.17009],[-2.15135,-1.95996],[-1.98318,-1.81191],[-1.84225,-1.6954],[-1.5599,-1.59819],[-1.42826,-1.5141],[-1.329,-1.43953],[-1.32783,-1.3722],[-1.31457,-1.31058],[-1.22323,-1.25357],[-1.19788,-1.20036],[-1.17253,-1.15035],[-1.14144,-1.10306],[-1.12629,-1.05812],[-1.09981,-1.01522],[-1.09669,-0.974114],[-1.05029,-0.934589],[-1.03768,-0.896473],[-1.01157,-0.859617],[-0.908343,-0.823894],[-0.843501,-0.789192],[-0.661749,-0.755415],[-0.612136,-0.722479],[-0.603543,-0.690309],[-0.5553,-0.658838],[-0.552396,-0.628006],[-0.476214,-0.59776],[-0.456634,-0.568051],[-0.45413,-0.538836],[-0.451449,-0.510073],[-0.421805,-0.481727],[-0.412087,-0.453762],[-0.402727,-0.426148],[-0.398957,-0.398855],[-0.390626,-0.371856],[-0.343091,-0.345126],[-0.314242,-0.318639],[-0.312877,-0.292375],[-0.311655,-0.266311],[-0.306869,-0.240426],[-0.2971,-0.214702],[-0.290709,-0.189118],[-0.240171,-0.163658],[-0.189811,-0.138304],[-0.171826,-0.113039],[-0.155242,-0.0878448],[-0.0439957,-0.0627068],[-0.0361247,-0.0376083],[-0.0268917,-0.0125335],[0.0140339,0.0125335],[0.0157415,0.0376083],[0.0332655,0.0627068],[0.0844715,0.0878448],[0.137958,0.113039],[0.141706,0.138304],[0.149855,0.163658],[0.184323,0.189118],[0.189723,0.214702],[0.211378,0.240426],[0.237096,0.266311],[0.288142,0.292375],[0.371376,0.318639],[0.403674,0.345126],[0.408217,0.371856],[0.416132,0.398855],[0.43319,0.426148],[0.509255,0.453762],[0.566469,0.481727],[0.576051,0.510073],[0.624386,0.538836],[0.638385,0.568051],[0.657798,0.59776],[0.691288,0.628006],[0.712298,0.658838],[0.719911,0.690309],[0.727195,0.722479],[0.765645,0.755415],[0.812135,0.789192],[0.834452,0.823894],[0.839941,0.859617],[0.870097,0.896473],[0.897854,0.934589],[0.90054,0.974114],[0.904859,1.01522],[1.02238,1.05812],[1.11103,1.10306],[1.1986,1.15035],[1.19865,1.20036],[1.22242,1.25357],[1.25989,1.31058],[1.30628,1.3722],[1.33729,1.43953],[1.35707,1.5141],[1.40508,1.59819],[1.44503,1.6954],[1.4814,1.81191],[1.57857,1.95996],[2.24097,2.17009],[2.59603,2.57583]] color=blue fillStyle=solid lineStyle=solid pointStyle=plus lineWidth=1] sampleSampleClouds = class=Graph name=two samples clouds implementation=class=GraphImplementation name=two samples clouds title=two samples clouds xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Sample1 Cloud implementation=class=Cloud name=Sample1 Cloud derived from class=DrawableImplementation name=Sample1 Cloud legend=Sample1 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[0.125995,0.396485],[4.79647,5.31639],[2.7809,2.24156],[2.28656,0.917983],[3.06995,2.5644],[4.59103,1.74305],[1.17023,2.85021],[2.87343,5.3031],[2.75024,2.87268],[2.10065,2.47143],[-1.08635,1.00465],[0.111691,1.59067],[4.68812,2.8636],[4.48721,5.91133],[3.154,0.498338],[3.47523,4.34622],[4.56839,5.48031],[2.28194,1.02572],[5.03573,4.95959],[4.81469,4.88366],[5.35656,6.77948],[7.1498,7.46774],[1.88928,2.15046],[3.28794,3.76987],[3.47383,4.03007],[2.50342,4.06663],[4.23935,0.797167],[5.33727,5.01021],[6.78542,5.86033],[5.50064,4.1988],[0.548584,0.0605662],[4.1418,4.06827],[-0.453363,0.15508],[2.98582,3.10026],[1.04793,0.816595],[4.26934,2.87834],[0.723509,1.31047],[4.6942,2.82951],[1.41884,3.63874],[1.77554,4.22767],[2.41729,1.81301],[1.76518,3.5559],[3.92257,4.18364],[5.73461,3.06881],[5.20234,5.34215],[0.269983,1.14949],[4.25189,5.25888],[2.06829,0.284247],[2.98556,1.8117],[-0.480938,-0.510648],[1.89559,1.3775],[2.17407,3.27994],[3.93839,3.22408],[1.6679,2.32191],[6.38088,5.48427],[3.28824,2.73779],[3.51249,1.84904],[1.58842,0.986609],[1.06696,1.99225],[9.31916,7.73362],[6.11734,3.59893],[4.19271,5.52573],[5.80213,6.61698],[5.99904,6.66261],[3.73223,4.05122],[2.65691,3.59662],[0.773285,-0.918796],[3.55073,3.87118],[2.87544,5.51578],[4.89315,4.77843],[2.8622,2.07462],[4.76301,2.87188],[-0.783026,0.00111393],[0.919508,3.30109],[3.53173,3.56439],[2.7159,4.31507],[2.57773,2.65781],[3.03531,3.05287],[2.59975,2.76767],[0.575533,1.82905],[0.26466,-1.14015],[3.30014,4.17267],[3.50984,3.89338],[4.53367,3.95305],[1.04601,0.554355],[2.72001,2.55955],[0.926859,0.654482],[0.876114,0.317103],[2.73742,0.649595],[0.143648,2.87155],[4.59405,3.37201],[2.3908,-1.06978],[2.11911,1.83973],[1.23851,0.649946],[3.64466,1.26172],[3.18641,2.34112],[1.62681,1.36271],[3.07402,1.40221],[0.788444,1.13017],[5.88913,5.62767]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Sample2 Cloud implementation=class=Cloud name=Sample2 Cloud derived from class=DrawableImplementation name=Sample2 Cloud legend=Sample2 Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=50 dimension=2 description=[X0,X1] data=[[6.11939,4.66502],[-0.14883,1.64135],[5.33757,4.51709],[2.17902,1.04506],[-3.34117,-2.59713],[-1.00666,1.83865],[4.64126,1.30526],[0.299961,0.647409],[3.03486,3.4869],[2.54481,-0.792723],[0.724529,-0.00214369],[5.79534,3.03009],[-0.587514,-2.56561],[1.93916,4.38621],[3.16266,1.1275],[2.98221,0.474553],[4.77853,6.5724],[8.12294,6.76323],[0.409864,2.86013],[4.64744,4.59414],[2.77519,2.55403],[3.18857,4.13313],[5.81632,8.5257],[-0.0526846,-0.41716],[3.75004,3.94083],[-1.5274,0.843844],[1.1443,1.96204],[6.35878,3.42754],[5.49784,1.76964],[3.41134,3.61858],[0.718236,0.0457155],[10.082,11.651],[1.82713,1.23992],[2.32166,2.61151],[0.174519,2.56961],[6.12118,5.06728],[-2.56717,-3.05655],[0.421619,0.467957],[2.44355,4.7366],[4.40465,3.84072],[-2.16488,-1.63171],[0.953737,-2.42865],[1.68169,-0.791276],[1.59988,0.95993],[-0.505599,0.640056],[5.35939,4.34485],[-1.14346,-0.639716],[3.5706,3.55972],[-2.90112,-1.25623],[4.81717,4.542]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] sampleDistributionClouds = class=Graph name=two samples clouds implementation=class=GraphImplementation name=two samples clouds title=two samples clouds xTitle=x1 yTitle=x2 axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Sample Cloud implementation=class=Cloud name=Sample Cloud derived from class=DrawableImplementation name=Sample Cloud legend=Sample Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[0.125995,0.396485],[4.79647,5.31639],[2.7809,2.24156],[2.28656,0.917983],[3.06995,2.5644],[4.59103,1.74305],[1.17023,2.85021],[2.87343,5.3031],[2.75024,2.87268],[2.10065,2.47143],[-1.08635,1.00465],[0.111691,1.59067],[4.68812,2.8636],[4.48721,5.91133],[3.154,0.498338],[3.47523,4.34622],[4.56839,5.48031],[2.28194,1.02572],[5.03573,4.95959],[4.81469,4.88366],[5.35656,6.77948],[7.1498,7.46774],[1.88928,2.15046],[3.28794,3.76987],[3.47383,4.03007],[2.50342,4.06663],[4.23935,0.797167],[5.33727,5.01021],[6.78542,5.86033],[5.50064,4.1988],[0.548584,0.0605662],[4.1418,4.06827],[-0.453363,0.15508],[2.98582,3.10026],[1.04793,0.816595],[4.26934,2.87834],[0.723509,1.31047],[4.6942,2.82951],[1.41884,3.63874],[1.77554,4.22767],[2.41729,1.81301],[1.76518,3.5559],[3.92257,4.18364],[5.73461,3.06881],[5.20234,5.34215],[0.269983,1.14949],[4.25189,5.25888],[2.06829,0.284247],[2.98556,1.8117],[-0.480938,-0.510648],[1.89559,1.3775],[2.17407,3.27994],[3.93839,3.22408],[1.6679,2.32191],[6.38088,5.48427],[3.28824,2.73779],[3.51249,1.84904],[1.58842,0.986609],[1.06696,1.99225],[9.31916,7.73362],[6.11734,3.59893],[4.19271,5.52573],[5.80213,6.61698],[5.99904,6.66261],[3.73223,4.05122],[2.65691,3.59662],[0.773285,-0.918796],[3.55073,3.87118],[2.87544,5.51578],[4.89315,4.77843],[2.8622,2.07462],[4.76301,2.87188],[-0.783026,0.00111393],[0.919508,3.30109],[3.53173,3.56439],[2.7159,4.31507],[2.57773,2.65781],[3.03531,3.05287],[2.59975,2.76767],[0.575533,1.82905],[0.26466,-1.14015],[3.30014,4.17267],[3.50984,3.89338],[4.53367,3.95305],[1.04601,0.554355],[2.72001,2.55955],[0.926859,0.654482],[0.876114,0.317103],[2.73742,0.649595],[0.143648,2.87155],[4.59405,3.37201],[2.3908,-1.06978],[2.11911,1.83973],[1.23851,0.649946],[3.64466,1.26172],[3.18641,2.34112],[1.62681,1.36271],[3.07402,1.40221],[0.788444,1.13017],[5.88913,5.62767]] color=blue fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Model Cloud implementation=class=Cloud name=Model Cloud derived from class=DrawableImplementation name=Model Cloud legend=Model Cloud data=class=Sample name=Normal implementation=class=SampleImplementation name=Normal size=100 dimension=2 description=[X0,X1] data=[[3.22616,2.99664],[2.36926,2.78758],[2.0286,2.99392],[2.60573,2.88631],[1.60212,1.9084],[1.22444,1.09644],[3.15314,1.85107],[2.12036,1.81522],[1.58454,2.06859],[2.62934,2.69642],[3.64435,4.12525],[1.44717,1.01606],[4.15237,3.71289],[2.30326,1.6362],[1.61847,1.18326],[1.22582,2.01269],[2.91986,3.4707],[2.80315,3.60097],[1.95101,1.11232],[4.5712,3.23372],[3.18009,2.15677],[2.31362,3.74129],[2.03012,1.64308],[2.48915,2.45809],[0.745196,0.559434],[2.13975,1.74921],[3.05883,3.92461],[3.84049,3.86928],[2.48193,2.46363],[1.48631,2.31057],[2.37724,2.29558],[3.9058,3.68352],[3.51776,3.81414],[4.62309,3.20313],[4.41107,3.72924],[1.79201,1.43159],[2.41552,2.38609],[1.74585,2.71099],[2.23746,2.54966],[0.616716,1.69501],[2.42882,1.49552],[3.57961,3.85467],[1.73076,0.900856],[0.00801832,0.742103],[4.04502,3.38076],[4.86899,3.90332],[2.39618,1.82563],[3.48731,3.08216],[1.15496,2.06604],[3.42729,3.14874],[2.03839,3.14147],[3.21246,3.62797],[2.01622,2.0083],[3.16201,2.61035],[2.47305,1.70934],[2.88692,2.90133],[2.03231,1.81734],[2.88446,2.96425],[1.92179,1.23796],[3.36497,3.75699],[2.82953,2.78835],[2.64117,2.58932],[2.77118,2.48688],[3.26095,3.12984],[2.20455,2.34755],[1.63619,2.5509],[3.90946,4.03638],[2.27943,3.07617],[1.91626,1.27466],[2.26407,1.93117],[4.50508,3.46711],[1.52653,1.83045],[2.96603,1.43042],[1.8242,1.69981],[3.11558,3.56023],[2.75478,2.59968],[3.24188,3.04341],[1.26964,0.638641],[1.98077,3.22994],[1.34807,2.19242],[2.66999,2.57733],[2.07666,1.77812],[2.23985,1.43041],[3.65734,2.71519],[2.25788,1.25041],[2.72435,2.38079],[3.39482,3.573],[2.25102,2.35642],[1.6754,2.33528],[0.854861,0.99578],[3.57257,3.18922],[3.51541,3.10622],[4.23504,2.9586],[1.92961,1.66273],[2.89719,2.54382],[1.64644,1.84134],[2.20045,2.53086],[2.53398,2.27003],[3.37714,3.35942],[2.76967,2.19486]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] LinearModelV = class=Graph name=original sample versus Linear Model one implementation=class=GraphImplementation name=original sample versus Linear Model one title=original sample versus Linear Model one xTitle=x yTitle=y axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Cloud name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Original Sample data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[2.35348,1.61988],[-0.345352,0.300063],[0.759291,0.4903],[2.33854,2.42685],[2.80997,3.9429],[5.26842,5.00578],[1.76486,3.77815],[5.8347,5.08733],[2.07379,0.759202],[-0.702773,1.49652],[2.23238,2.22273],[1.06757,5.14862],[1.57835,1.60292],[2.54716,2.66877],[4.84242,4.52432],[3.20717,3.46511],[1.66413,2.07969],[2.70604,2.43883],[3.97,4.01763],[2.48088,2.59074],[-0.992644,-1.07719],[3.48897,1.06535],[4.10799,2.83146],[5.20991,5.40861],[3.08712,2.35779],[4.91041,6.26539],[2.15957,1.09995],[1.86435,1.33292],[1.6566,1.25041],[3.10442,3.765],[1.39179,0.480552],[3.04153,4.67688],[4.45338,5.65779],[6.99089,5.69948],[3.53205,5.74312],[4.97446,5.0682],[3.44751,2.38976],[1.23929,-0.0712617],[5.95306,5.9472],[1.76679,1.68885],[7.44812,7.67935],[5.16697,5.22853],[0.897754,1.02241],[3.47266,4.43423],[1.75377,0.733864],[2.34915,3.3501],[0.562274,1.31424],[7.03681,7.14045],[7.98997,7.95578],[0.823848,0.873685],[8.27642,6.42599],[1.70921,1.43897],[5.63033,5.56252],[3.45285,3.77754],[4.4876,2.51139],[3.24978,3.80901],[2.79445,3.06571],[2.37941,2.58041],[0.807274,0.882969],[3.77498,1.8904],[1.85207,1.96394],[3.46083,1.73823],[1.03197,2.82287],[1.73195,2.03147],[4.34548,3.80432],[4.00859,2.18395],[2.8376,3.43655],[5.85449,5.41832],[1.2585,1.30968],[3.27921,4.47618],[3.06118,2.03438],[2.45223,1.50183],[3.02413,2.99243],[4.07402,3.11666],[1.43511,2.85196],[2.16514,1.59798],[7.04589,3.39612],[3.79733,5.35823],[3.67142,4.66872],[3.54107,2.7348],[1.65397,-0.12904],[7.17366,5.26945],[2.73976,-1.10383],[4.42864,5.55468],[4.07511,4.42013],[5.09188,5.70304],[5.03904,2.48861],[1.55275,1.49315],[5.54553,5.16195],[4.3312,4.84245],[1.57565,0.690944],[1.39588,-0.610908],[2.4315,1.62976],[1.23611,1.82961],[3.2487,4.19558],[1.73407,2.19119],[2.96831,3.57648],[2.55407,3.70103],[4.12141,3.16274],[5.35568,3.85421]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=Unnamed LinearModel visualTest data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[-0.992644,-0.397841],[-0.702773,-0.158624],[-0.345352,0.136339],[0.562274,0.88536],[0.759291,1.04795],[0.807274,1.08755],[0.823848,1.10122],[0.897754,1.16222],[1.03197,1.27298],[1.06757,1.30236],[1.23611,1.44145],[1.23929,1.44407],[1.2585,1.45992],[1.39179,1.56992],[1.39588,1.5733],[1.43511,1.60567],[1.55275,1.70275],[1.57565,1.72165],[1.57835,1.72388],[1.65397,1.78629],[1.6566,1.78845],[1.66413,1.79467],[1.70921,1.83187],[1.73195,1.85064],[1.73407,1.85239],[1.75377,1.86865],[1.76486,1.87779],[1.76679,1.87939],[1.85207,1.94977],[1.86435,1.9599],[2.07379,2.13274],[2.15957,2.20354],[2.16514,2.20813],[2.23238,2.26362],[2.33854,2.35123],[2.34915,2.35999],[2.35348,2.36356],[2.37941,2.38496],[2.4315,2.42795],[2.45223,2.44505],[2.48088,2.46869],[2.54716,2.5234],[2.55407,2.5291],[2.70604,2.65451],[2.73976,2.68234],[2.79445,2.72747],[2.80997,2.74028],[2.8376,2.76308],[2.96831,2.87095],[3.02413,2.91702],[3.04153,2.93138],[3.06118,2.94759],[3.08712,2.96899],[3.10442,2.98328],[3.20717,3.06807],[3.2487,3.10234],[3.24978,3.10323],[3.27921,3.12752],[3.44751,3.26641],[3.45285,3.27082],[3.46083,3.27741],[3.47266,3.28716],[3.48897,3.30062],[3.53205,3.33618],[3.54107,3.34363],[3.67142,3.45119],[3.77498,3.53666],[3.79733,3.5551],[3.97,3.6976],[4.00859,3.72944],[4.07402,3.78344],[4.07511,3.78434],[4.10799,3.81148],[4.12141,3.82255],[4.3312,3.99568],[4.34548,4.00746],[4.42864,4.07609],[4.45338,4.09651],[4.4876,4.12475],[4.84242,4.41756],[4.91041,4.47367],[4.97446,4.52653],[5.03904,4.57983],[5.09188,4.62344],[5.16697,4.68541],[5.20991,4.72084],[5.26842,4.76913],[5.35568,4.84113],[5.54553,4.99781],[5.63033,5.06779],[5.8347,5.23645],[5.85449,5.25278],[5.95306,5.33412],[6.99089,6.1906],[7.03681,6.22849],[7.04589,6.23599],[7.17366,6.34143],[7.44812,6.56793],[7.98997,7.01509],[8.27642,7.25149]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] LinearModelR = class=Graph name=residual(i) versus residual(i-1) implementation=class=GraphImplementation name=residual(i) versus residual(i-1) title=residual(i) versus residual(i-1) xTitle=redidual(i-1) yTitle=residual(i) axes=ON grid=ON legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed LinearModel residual Test implementation=class=Cloud name=Unnamed LinearModel residual Test derived from class=DrawableImplementation name=Unnamed LinearModel residual Test legend=Unnamed LinearModel residual Test data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=99 dimension=2 data=[[-0.743679,0.163724],[0.163724,-0.55765],[-0.55765,0.0756241],[0.0756241,1.20263],[1.20263,0.236659],[0.236659,1.90035],[1.90035,-0.149117],[-0.149117,-1.37354],[-1.37354,1.65515],[1.65515,-0.0408969],[-0.0408969,3.84626],[3.84626,-0.120962],[-0.120962,0.14537],[0.14537,0.106759],[0.106759,0.397036],[0.397036,0.285013],[0.285013,-0.215681],[-0.215681,0.320028],[0.320028,0.12205],[0.12205,-0.679351],[-0.679351,-2.23528],[-2.23528,-0.980018],[-0.980018,0.687767],[0.687767,-0.61121],[-0.61121,1.79172],[1.79172,-1.10359],[-1.10359,-0.626986],[-0.626986,-0.538046],[-0.538046,0.781724],[0.781724,-1.08937],[-1.08937,1.7455],[1.7455,1.56128],[1.56128,-0.491122],[-0.491122,2.40694],[2.40694,0.541672],[0.541672,-0.87665],[-0.87665,-1.51533],[-1.51533,0.613076],[0.613076,-0.190545],[-0.190545,1.11142],[1.11142,0.543129],[0.543129,-0.13981],[-0.13981,1.14706],[1.14706,-1.13478],[-1.13478,0.990114],[0.990114,0.428881],[0.428881,0.911957],[0.911957,0.940693],[0.940693,-0.22754],[-0.22754,-0.825494],[-0.825494,-0.392899],[-0.392899,0.494734],[0.494734,0.506727],[0.506727,-1.61336],[-1.61336,0.705779],[0.705779,0.338239],[0.338239,0.195454],[0.195454,-0.204578],[-0.204578,-1.64626],[-1.64626,0.014172],[0.014172,-1.53917],[-1.53917,1.54989],[1.54989,0.180833],[0.180833,-0.203144],[-0.203144,-1.5455],[-1.5455,0.673472],[0.673472,0.165535],[0.165535,-0.15024],[-0.15024,1.34866],[1.34866,-0.913214],[-0.913214,-0.943223],[-0.943223,0.0754082],[0.0754082,-0.666784],[-0.666784,1.24629],[1.24629,-0.610156],[-0.610156,-2.83987],[-2.83987,1.80313],[1.80313,1.21753],[1.21753,-0.608824],[-0.608824,-1.91533],[-1.91533,-1.07198],[-1.07198,-3.78617],[-3.78617,1.47859],[1.47859,0.635792],[0.635792,1.0796],[1.0796,-2.09121],[-2.09121,-0.209597],[-0.209597,0.164144],[0.164144,0.846765],[0.846765,-1.0307],[-1.0307,-2.1842],[-2.1842,-0.798189],[-0.798189,0.388164],[0.388164,1.09324],[1.09324,0.338797],[0.338797,0.705525],[0.705525,1.17193],[1.17193,-0.659809],[-0.659809,-0.986923]] color=red fillStyle=solid lineStyle=solid pointStyle=fsquare lineWidth=1] cobwebValue = class=Graph name=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] implementation=class=GraphImplementation name=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] title=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] xTitle= yTitle= axes=OFF grid=OFF legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,27],[1,27],[2,89],[3,64],[4,19],[5,65],[6,47]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,41],[1,26],[2,27],[3,76],[4,5],[5,90],[6,42]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,31],[1,43],[2,98],[3,33],[4,78],[5,74],[6,58]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,5],[1,21],[2,34],[3,70],[4,58],[5,99],[6,34]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,33],[1,9],[2,4],[3,0],[4,42],[5,46],[6,41]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,21],[1,92],[2,69],[3,36],[4,44],[5,94],[6,80]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,39],[1,29],[2,24],[3,73],[4,50],[5,79],[6,38]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,81],[1,7],[2,37],[3,68],[4,67],[5,56],[6,59]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,48],[1,89],[2,1],[3,35],[4,8],[5,51],[6,74]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,11],[1,64],[2,8],[3,42],[4,92],[5,18],[6,97]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,47],[1,24],[2,86],[3,91],[4,52],[5,33],[6,66]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,92],[1,95],[2,18],[3,74],[4,93],[5,80],[6,3]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,62],[1,69],[2,47],[3,98],[4,81],[5,25],[6,22]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,29],[1,10],[2,67],[3,27],[4,23],[5,97],[6,30]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,61],[1,8],[2,81],[3,29],[4,80],[5,24],[6,1]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,89],[1,61],[2,87],[3,1],[4,28],[5,2],[6,17]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,86],[1,51],[2,6],[3,5],[4,1],[5,52],[6,78]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,51],[1,28],[2,44],[3,28],[4,10],[5,11],[6,98]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,0],[1,62],[2,58],[3,83],[4,11],[5,91],[6,40]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,45],[1,45],[2,80],[3,48],[4,0],[5,3],[6,31]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,93],[1,15],[2,92],[3,37],[4,70],[5,93],[6,24]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,57],[1,84],[2,19],[3,75],[4,73],[5,45],[6,5]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,69],[1,85],[2,70],[3,86],[4,18],[5,48],[6,46]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,37],[1,41],[2,79],[3,49],[4,82],[5,40],[6,53]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,13],[1,87],[2,97],[3,19],[4,46],[5,84],[6,51]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,32],[1,14],[2,5],[3,82],[4,14],[5,73],[6,25]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,24],[1,19],[2,91],[3,46],[4,99],[5,5],[6,44]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,50],[1,78],[2,95],[3,15],[4,47],[5,13],[6,82]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,59],[1,73],[2,22],[3,39],[4,27],[5,95],[6,57]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,26],[1,55],[2,9],[3,22],[4,33],[5,63],[6,20]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,60],[1,94],[2,48],[3,65],[4,91],[5,31],[6,65]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,88],[1,17],[2,0],[3,56],[4,39],[5,68],[6,4]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,65],[1,42],[2,76],[3,45],[4,63],[5,38],[6,81]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,52],[1,0],[2,33],[3,18],[4,96],[5,70],[6,56]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,3],[1,97],[2,99],[3,78],[4,34],[5,55],[6,13]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,98],[1,58],[2,3],[3,2],[4,97],[5,41],[6,69]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,77],[1,4],[2,56],[3,69],[4,68],[5,20],[6,39]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,25],[1,68],[2,64],[3,11],[4,55],[5,29],[6,60]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,2],[1,54],[2,93],[3,62],[4,65],[5,32],[6,43]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,90],[1,93],[2,60],[3,13],[4,76],[5,61],[6,7]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,91],[1,66],[2,83],[3,38],[4,86],[5,57],[6,33]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,73],[1,86],[2,65],[3,99],[4,66],[5,7],[6,45]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,79],[1,88],[2,88],[3,14],[4,72],[5,47],[6,12]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,20],[1,18],[2,40],[3,63],[4,24],[5,88],[6,68]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,82],[1,5],[2,51],[3,61],[4,95],[5,53],[6,96]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,74],[1,80],[2,28],[3,32],[4,16],[5,17],[6,67]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,78],[1,67],[2,72],[3,87],[4,22],[5,6],[6,21]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,18],[1,31],[2,74],[3,43],[4,9],[5,78],[6,63]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,96],[1,48],[2,45],[3,47],[4,74],[5,62],[6,54]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,36],[1,13],[2,26],[3,8],[4,56],[5,16],[6,55]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,1],[1,33],[2,75],[3,34],[4,59],[5,30],[6,29]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,84],[1,83],[2,35],[3,95],[4,36],[5,86],[6,61]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,44],[1,96],[2,23],[3,59],[4,71],[5,58],[6,28]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,54],[1,79],[2,85],[3,44],[4,4],[5,4],[6,48]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,56],[1,11],[2,38],[3,93],[4,12],[5,69],[6,77]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,34],[1,81],[2,63],[3,72],[4,87],[5,37],[6,27]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,87],[1,12],[2,17],[3,97],[4,35],[5,14],[6,9]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,10],[1,38],[2,66],[3,67],[4,84],[5,92],[6,14]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,15],[1,34],[2,96],[3,85],[4,79],[5,67],[6,16]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,19],[1,16],[2,16],[3,90],[4,89],[5,1],[6,49]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,66],[1,35],[2,15],[3,84],[4,31],[5,34],[6,10]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,97],[1,99],[2,53],[3,17],[4,57],[5,21],[6,32]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,14],[1,3],[2,42],[3,26],[4,85],[5,50],[6,26]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,22],[1,30],[2,73],[3,50],[4,40],[5,89],[6,72]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,12],[1,82],[2,29],[3,55],[4,41],[5,42],[6,52]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,7],[1,57],[2,14],[3,41],[4,7],[5,49],[6,95]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,70],[1,53],[2,90],[3,81],[4,29],[5,76],[6,11]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,63],[1,36],[2,52],[3,51],[4,69],[5,27],[6,73]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,55],[1,1],[2,11],[3,71],[4,43],[5,9],[6,70]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,43],[1,56],[2,77],[3,25],[4,30],[5,0],[6,18]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,28],[1,50],[2,25],[3,77],[4,21],[5,64],[6,19]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,30],[1,37],[2,78],[3,40],[4,64],[5,81],[6,64]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,80],[1,22],[2,7],[3,79],[4,53],[5,12],[6,62]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,9],[1,90],[2,30],[3,89],[4,75],[5,22],[6,6]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,16],[1,63],[2,39],[3,57],[4,54],[5,19],[6,99]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,71],[1,25],[2,20],[3,4],[4,90],[5,96],[6,76]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,35],[1,75],[2,82],[3,80],[4,26],[5,75],[6,2]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,38],[1,40],[2,57],[3,21],[4,77],[5,28],[6,23]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,99],[1,77],[2,21],[3,24],[4,88],[5,71],[6,0]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,67],[1,72],[2,31],[3,53],[4,20],[5,36],[6,75]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,83],[1,20],[2,43],[3,16],[4,3],[5,85],[6,36]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,58],[1,59],[2,32],[3,20],[4,32],[5,39],[6,50]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,94],[1,52],[2,12],[3,58],[4,51],[5,10],[6,79]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,53],[1,76],[2,41],[3,66],[4,25],[5,83],[6,71]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,42],[1,60],[2,62],[3,12],[4,94],[5,66],[6,83]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,8],[1,6],[2,46],[3,52],[4,38],[5,8],[6,35]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,85],[1,91],[2,71],[3,88],[4,45],[5,72],[6,15]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,4],[1,2],[2,36],[3,94],[4,37],[5,15],[6,37]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,95],[1,65],[2,84],[3,23],[4,2],[5,54],[6,8]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,46],[1,74],[2,54],[3,10],[4,17],[5,43],[6,94]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,23],[1,49],[2,49],[3,54],[4,98],[5,35],[6,90]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,75],[1,46],[2,61],[3,30],[4,13],[5,77],[6,87]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,40],[1,70],[2,68],[3,96],[4,6],[5,82],[6,88]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,68],[1,23],[2,94],[3,9],[4,15],[5,87],[6,84]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,17],[1,47],[2,55],[3,92],[4,83],[5,98],[6,93]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,6],[1,71],[2,50],[3,7],[4,62],[5,59],[6,85]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,64],[1,98],[2,59],[3,3],[4,60],[5,26],[6,86]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,72],[1,32],[2,10],[3,6],[4,49],[5,44],[6,91]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,76],[1,39],[2,2],[3,60],[4,48],[5,23],[6,89]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,49],[1,44],[2,13],[3,31],[4,61],[5,60],[6,92]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[0,100]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0],[1,100]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0],[2,100]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X3 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4,0],[4,100]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X5 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[5,0],[5,100]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[6,0],[6,100]] color=black fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3] cobwebQuantile = class=Graph name=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] implementation=class=GraphImplementation name=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] title=Cobweb graph - [y] vs [X0,X1,X2,X3,X4,X5] xTitle= yTitle= axes=OFF grid=OFF legendposition=topright legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,27],[1,27],[2,89],[3,64],[4,19],[5,65],[6,47]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,41],[1,26],[2,27],[3,76],[4,5],[5,90],[6,42]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,31],[1,43],[2,98],[3,33],[4,78],[5,74],[6,58]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,5],[1,21],[2,34],[3,70],[4,58],[5,99],[6,34]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,33],[1,9],[2,4],[3,0],[4,42],[5,46],[6,41]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,21],[1,92],[2,69],[3,36],[4,44],[5,94],[6,80]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,39],[1,29],[2,24],[3,73],[4,50],[5,79],[6,38]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,81],[1,7],[2,37],[3,68],[4,67],[5,56],[6,59]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,48],[1,89],[2,1],[3,35],[4,8],[5,51],[6,74]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,46],[1,74],[2,54],[3,10],[4,17],[5,43],[6,94]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,11],[1,64],[2,8],[3,42],[4,92],[5,18],[6,97]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,47],[1,24],[2,86],[3,91],[4,52],[5,33],[6,66]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,92],[1,95],[2,18],[3,74],[4,93],[5,80],[6,3]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,23],[1,49],[2,49],[3,54],[4,98],[5,35],[6,90]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,75],[1,46],[2,61],[3,30],[4,13],[5,77],[6,87]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,62],[1,69],[2,47],[3,98],[4,81],[5,25],[6,22]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,29],[1,10],[2,67],[3,27],[4,23],[5,97],[6,30]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,61],[1,8],[2,81],[3,29],[4,80],[5,24],[6,1]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,89],[1,61],[2,87],[3,1],[4,28],[5,2],[6,17]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,86],[1,51],[2,6],[3,5],[4,1],[5,52],[6,78]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,51],[1,28],[2,44],[3,28],[4,10],[5,11],[6,98]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,0],[1,62],[2,58],[3,83],[4,11],[5,91],[6,40]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,45],[1,45],[2,80],[3,48],[4,0],[5,3],[6,31]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,93],[1,15],[2,92],[3,37],[4,70],[5,93],[6,24]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,57],[1,84],[2,19],[3,75],[4,73],[5,45],[6,5]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,69],[1,85],[2,70],[3,86],[4,18],[5,48],[6,46]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,40],[1,70],[2,68],[3,96],[4,6],[5,82],[6,88]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,68],[1,23],[2,94],[3,9],[4,15],[5,87],[6,84]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,32],[1,14],[2,5],[3,82],[4,14],[5,73],[6,25]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,24],[1,19],[2,91],[3,46],[4,99],[5,5],[6,44]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,50],[1,78],[2,95],[3,15],[4,47],[5,13],[6,82]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,59],[1,73],[2,22],[3,39],[4,27],[5,95],[6,57]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,26],[1,55],[2,9],[3,22],[4,33],[5,63],[6,20]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,17],[1,47],[2,55],[3,92],[4,83],[5,98],[6,93]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,60],[1,94],[2,48],[3,65],[4,91],[5,31],[6,65]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,88],[1,17],[2,0],[3,56],[4,39],[5,68],[6,4]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,65],[1,42],[2,76],[3,45],[4,63],[5,38],[6,81]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,52],[1,0],[2,33],[3,18],[4,96],[5,70],[6,56]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,3],[1,97],[2,99],[3,78],[4,34],[5,55],[6,13]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,98],[1,58],[2,3],[3,2],[4,97],[5,41],[6,69]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,77],[1,4],[2,56],[3,69],[4,68],[5,20],[6,39]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,25],[1,68],[2,64],[3,11],[4,55],[5,29],[6,60]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,2],[1,54],[2,93],[3,62],[4,65],[5,32],[6,43]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,90],[1,93],[2,60],[3,13],[4,76],[5,61],[6,7]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,6],[1,71],[2,50],[3,7],[4,62],[5,59],[6,85]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,64],[1,98],[2,59],[3,3],[4,60],[5,26],[6,86]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,91],[1,66],[2,83],[3,38],[4,86],[5,57],[6,33]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,73],[1,86],[2,65],[3,99],[4,66],[5,7],[6,45]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,79],[1,88],[2,88],[3,14],[4,72],[5,47],[6,12]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,20],[1,18],[2,40],[3,63],[4,24],[5,88],[6,68]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,82],[1,5],[2,51],[3,61],[4,95],[5,53],[6,96]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,74],[1,80],[2,28],[3,32],[4,16],[5,17],[6,67]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,78],[1,67],[2,72],[3,87],[4,22],[5,6],[6,21]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,18],[1,31],[2,74],[3,43],[4,9],[5,78],[6,63]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,96],[1,48],[2,45],[3,47],[4,74],[5,62],[6,54]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,36],[1,13],[2,26],[3,8],[4,56],[5,16],[6,55]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,1],[1,33],[2,75],[3,34],[4,59],[5,30],[6,29]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,84],[1,83],[2,35],[3,95],[4,36],[5,86],[6,61]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,44],[1,96],[2,23],[3,59],[4,71],[5,58],[6,28]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,54],[1,79],[2,85],[3,44],[4,4],[5,4],[6,48]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,56],[1,11],[2,38],[3,93],[4,12],[5,69],[6,77]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,34],[1,81],[2,63],[3,72],[4,87],[5,37],[6,27]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,87],[1,12],[2,17],[3,97],[4,35],[5,14],[6,9]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,10],[1,38],[2,66],[3,67],[4,84],[5,92],[6,14]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,72],[1,32],[2,10],[3,6],[4,49],[5,44],[6,91]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,15],[1,34],[2,96],[3,85],[4,79],[5,67],[6,16]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,19],[1,16],[2,16],[3,90],[4,89],[5,1],[6,49]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,66],[1,35],[2,15],[3,84],[4,31],[5,34],[6,10]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,97],[1,99],[2,53],[3,17],[4,57],[5,21],[6,32]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,14],[1,3],[2,42],[3,26],[4,85],[5,50],[6,26]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,22],[1,30],[2,73],[3,50],[4,40],[5,89],[6,72]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,7],[1,57],[2,14],[3,41],[4,7],[5,49],[6,95]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,70],[1,53],[2,90],[3,81],[4,29],[5,76],[6,11]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,63],[1,36],[2,52],[3,51],[4,69],[5,27],[6,73]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,55],[1,1],[2,11],[3,71],[4,43],[5,9],[6,70]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,43],[1,56],[2,77],[3,25],[4,30],[5,0],[6,18]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,28],[1,50],[2,25],[3,77],[4,21],[5,64],[6,19]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,30],[1,37],[2,78],[3,40],[4,64],[5,81],[6,64]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,80],[1,22],[2,7],[3,79],[4,53],[5,12],[6,62]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,9],[1,90],[2,30],[3,89],[4,75],[5,22],[6,6]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,76],[1,39],[2,2],[3,60],[4,48],[5,23],[6,89]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,16],[1,63],[2,39],[3,57],[4,54],[5,19],[6,99]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,71],[1,25],[2,20],[3,4],[4,90],[5,96],[6,76]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,35],[1,75],[2,82],[3,80],[4,26],[5,75],[6,2]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,38],[1,40],[2,57],[3,21],[4,77],[5,28],[6,23]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,99],[1,77],[2,21],[3,24],[4,88],[5,71],[6,0]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,67],[1,72],[2,31],[3,53],[4,20],[5,36],[6,75]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,83],[1,20],[2,43],[3,16],[4,3],[5,85],[6,36]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,94],[1,52],[2,12],[3,58],[4,51],[5,10],[6,79]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,53],[1,76],[2,41],[3,66],[4,25],[5,83],[6,71]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,42],[1,60],[2,62],[3,12],[4,94],[5,66],[6,83]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,8],[1,6],[2,46],[3,52],[4,38],[5,8],[6,35]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,85],[1,91],[2,71],[3,88],[4,45],[5,72],[6,15]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,4],[1,2],[2,36],[3,94],[4,37],[5,15],[6,37]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,49],[1,44],[2,13],[3,31],[4,61],[5,60],[6,92]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,95],[1,65],[2,84],[3,23],[4,2],[5,54],[6,8]] color=grey fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,37],[1,41],[2,79],[3,49],[4,82],[5,40],[6,53]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,13],[1,87],[2,97],[3,19],[4,46],[5,84],[6,51]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,12],[1,82],[2,29],[3,55],[4,41],[5,42],[6,52]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=7 dimension=2 data=[[0,58],[1,59],[2,32],[3,20],[4,32],[5,39],[6,50]] color=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[0,100]] color=#ff0000 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X1 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[1,0],[1,100]] color=#ffdb00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X2 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[2,0],[2,100]] color=#49ff00 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X3 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[3,0],[3,100]] color=#00ff92 fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X4 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[4,0],[4,100]] color=#0092ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X5 data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[5,0],[5,100]] color=#4900ff fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=y data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[6,0],[6,100]] color=black fillStyle=solid lineStyle=solid pointStyle=none lineWidth=3] KendallPlot1 = class=Graph name=Kendall Plot implementation=class=GraphImplementation name=Kendall Plot title=Kendall Plot xTitle=GumbelCopula yTitle=data 1 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[1,1]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0,0],[0.00444444,0],[0.00949495,0],[0.0153535,0],[0.0211111,0.010101],[0.0270707,0.010101],[0.0340404,0.010101],[0.0408081,0.020202],[0.0479798,0.020202],[0.0548485,0.020202],[0.0626263,0.020202],[0.07,0.030303],[0.0777778,0.030303],[0.0848485,0.040404],[0.0932323,0.040404],[0.100505,0.040404],[0.108586,0.040404],[0.114747,0.040404],[0.122727,0.0505051],[0.130202,0.0505051],[0.140505,0.0505051],[0.148889,0.0606061],[0.158081,0.0707071],[0.16596,0.0707071],[0.173939,0.0808081],[0.182323,0.0808081],[0.190808,0.0808081],[0.199091,0.0808081],[0.207879,0.0909091],[0.217071,0.0909091],[0.225354,0.0909091],[0.233636,0.111111],[0.24303,0.111111],[0.252323,0.121212],[0.261313,0.121212],[0.27202,0.121212],[0.282727,0.141414],[0.293636,0.141414],[0.30303,0.141414],[0.310404,0.151515],[0.319091,0.151515],[0.330404,0.161616],[0.340808,0.171717],[0.350404,0.171717],[0.359394,0.181818],[0.369596,0.181818],[0.38,0.181818],[0.391111,0.191919],[0.402626,0.191919],[0.413232,0.212121],[0.423737,0.222222],[0.433838,0.222222],[0.446465,0.232323],[0.45798,0.252525],[0.46697,0.272727],[0.479293,0.272727],[0.489697,0.272727],[0.500303,0.272727],[0.51101,0.282828],[0.520707,0.292929],[0.53,0.30303],[0.540808,0.323232],[0.551212,0.323232],[0.561717,0.333333],[0.574949,0.333333],[0.586566,0.343434],[0.597475,0.353535],[0.608889,0.353535],[0.620606,0.373737],[0.631515,0.393939],[0.642323,0.40404],[0.65303,0.40404],[0.664242,0.40404],[0.676566,0.414141],[0.687677,0.424242],[0.699697,0.464646],[0.710808,0.464646],[0.721919,0.474747],[0.733535,0.494949],[0.745657,0.505051],[0.759293,0.515152],[0.768788,0.535354],[0.779192,0.535354],[0.793434,0.555556],[0.807172,0.555556],[0.821818,0.555556],[0.835758,0.565657],[0.846768,0.59596],[0.859293,0.606061],[0.873737,0.636364],[0.884646,0.636364],[0.897475,0.656566],[0.91,0.717172],[0.921818,0.727273],[0.933939,0.727273],[0.946667,0.747475],[0.959091,0.858586],[0.972222,0.878788],[0.983838,0.878788],[0.997576,0.909091]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] KendallPlot2 = class=Graph name=Kendall Plot implementation=class=GraphImplementation name=Kendall Plot title=Kendall Plot xTitle=data 2 yTitle=data 1 axes=ON grid=ON legendposition=topleft legendFontSize=1 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=2 dimension=2 data=[[0,0],[1,1]] color=red fillStyle=solid lineStyle=dashed pointStyle=none lineWidth=1,class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend= data=class=Sample name=Unnamed implementation=class=SampleImplementation name=Unnamed size=100 dimension=2 data=[[0,0],[0,0],[0.010101,0],[0.020202,0],[0.020202,0.010101],[0.020202,0.010101],[0.030303,0.010101],[0.030303,0.020202],[0.040404,0.020202],[0.040404,0.020202],[0.0505051,0.020202],[0.0606061,0.030303],[0.0707071,0.030303],[0.0707071,0.040404],[0.0808081,0.040404],[0.10101,0.040404],[0.10101,0.040404],[0.10101,0.040404],[0.111111,0.0505051],[0.111111,0.0505051],[0.121212,0.0505051],[0.141414,0.0606061],[0.141414,0.0707071],[0.171717,0.0707071],[0.171717,0.0808081],[0.181818,0.0808081],[0.181818,0.0808081],[0.191919,0.0808081],[0.20202,0.0909091],[0.212121,0.0909091],[0.222222,0.0909091],[0.222222,0.111111],[0.232323,0.111111],[0.242424,0.121212],[0.242424,0.121212],[0.262626,0.121212],[0.30303,0.141414],[0.323232,0.141414],[0.333333,0.141414],[0.333333,0.151515],[0.353535,0.151515],[0.353535,0.161616],[0.363636,0.171717],[0.363636,0.171717],[0.373737,0.181818],[0.373737,0.181818],[0.393939,0.181818],[0.40404,0.191919],[0.414141,0.191919],[0.414141,0.212121],[0.424242,0.222222],[0.424242,0.222222],[0.434343,0.232323],[0.454545,0.252525],[0.464646,0.272727],[0.464646,0.272727],[0.464646,0.272727],[0.494949,0.272727],[0.515152,0.282828],[0.525253,0.292929],[0.525253,0.30303],[0.525253,0.323232],[0.535354,0.323232],[0.555556,0.333333],[0.565657,0.333333],[0.575758,0.343434],[0.606061,0.353535],[0.616162,0.353535],[0.626263,0.373737],[0.636364,0.393939],[0.636364,0.40404],[0.646465,0.40404],[0.666667,0.40404],[0.69697,0.414141],[0.707071,0.424242],[0.717172,0.464646],[0.727273,0.464646],[0.727273,0.474747],[0.737374,0.494949],[0.757576,0.505051],[0.757576,0.515152],[0.767677,0.535354],[0.777778,0.535354],[0.79798,0.555556],[0.828283,0.555556],[0.838384,0.555556],[0.838384,0.565657],[0.848485,0.59596],[0.848485,0.606061],[0.858586,0.636364],[0.868687,0.636364],[0.888889,0.656566],[0.888889,0.717172],[0.919192,0.727273],[0.939394,0.727273],[0.949495,0.747475],[0.949495,0.858586],[0.959596,0.878788],[0.989899,0.878788],[1,0.909091]] color=blue fillStyle=solid lineStyle=solid pointStyle=none lineWidth=1] openturns-1.9/python/test/t_VisualTest_std.py000077500000000000000000000105461307543307100216060ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Generate a Normal sample normal = Normal(1) size = 100 sample = normal.getSample(size) sampleCDF = VisualTest.DrawEmpiricalCDF( sample, sample.getMin()[0] - 1.0, sample.getMax()[0] + 1.0) print("sampleCDF = ", sampleCDF) sampleCDF = VisualTest.DrawEmpiricalCDF(sample, -0.5, 0.5) print("sampleCDFZoom = ", sampleCDF) # Histogram tests normal = Normal(1) size = 100 sample = normal.getSample(size) sampleHist = VisualTest.DrawHistogram(sample, 10) print("sampleHist = ", sampleHist) sampleHist = VisualTest.DrawHistogram(sample) print("sampleHistOpt = ", sampleHist) # QQPlot tests size = 100 normal = Normal(1) sample = normal.getSample(size) sample2 = Gamma(3.0, 4.0, 0.0).getSample(size) twoSamplesQQPlot = VisualTest.DrawQQplot(sample, sample2) print("twoSamplesQQPlot = ", twoSamplesQQPlot) sampleDistributionQQPlot = VisualTest.DrawQQplot(sample, normal) print("sampleDistributionQQPlot = ", sampleDistributionQQPlot) # HenryLine test size = 100 normal = Normal(1) sample = normal.getSample(size) henryPlot = VisualTest.DrawHenryLine(sample) print("HenryPlot = ", henryPlot) # Clouds tests dimension = (2) R = CorrelationMatrix(dimension) R[0, 1] = 0.8 distribution = Normal( Point(dimension, 3.0), Point(dimension, 2.0), R) size = 100 sample2D = distribution.getSample(size) firstSample = Sample(size, 1) secondSample = Sample(size, 1) for i in range(size): firstSample[i] = Point(1, sample2D[i, 0]) secondSample[i] = Point(1, sample2D[i, 1]) sampleSampleClouds = VisualTest.DrawClouds( sample2D, Normal(Point(dimension, 2.0), Point(dimension, 3.0), R).getSample(size // 2)) print("sampleSampleClouds = ", sampleSampleClouds) sampleDistributionClouds = VisualTest.DrawClouds( sample2D, Normal(Point(dimension, 2.5), Point(dimension, 1.0), R)) print("sampleDistributionClouds = ", sampleDistributionClouds) # LinearModel tests dimension = 2 R = CorrelationMatrix(dimension) R[0, 1] = 0.8 distribution = Normal( Point(dimension, 3.0), Point(dimension, 2.0), R) size = 100 sample2D = distribution.getSample(size) firstSample = Sample(size, 1) secondSample = Sample(size, 1) for i in range(size): firstSample[i] = Point(1, sample2D[i, 0]) secondSample[i] = Point(1, sample2D[i, 1]) lmtest = LinearModelFactory().build(firstSample, secondSample) drawLinearModelVTest = VisualTest.DrawLinearModel( firstSample, secondSample, lmtest) print("LinearModelV = ", drawLinearModelVTest) drawLinearModelResidualTest = VisualTest.DrawLinearModelResidual( firstSample, secondSample, lmtest) print("LinearModelR = ", drawLinearModelResidualTest) # CobWeb tests size = 100 inputDimension = 6 inputSample = Normal(inputDimension).getSample(size) inputVar = Description(inputDimension) for i in range(inputDimension): inputVar[i] = "X" + str(i) formula = Description(1) expression = "" for i in range(inputDimension): if i > 0: expression += "+" expression += "cos(" + str(i + 1) + "*" + inputVar[i] + ")" formula[0] = expression outputVar = Description(1) outputVar[0] = "y" model = Function(inputVar, outputVar, formula) outputSample = model(inputSample) cobwebValue = VisualTest.DrawCobWeb( inputSample, outputSample, 2.5, 3.0, "red", False) print("cobwebValue = ", cobwebValue) cobwebQuantile = VisualTest.DrawCobWeb( inputSample, outputSample, 0.7, 0.9, "red", False) print("cobwebQuantile = ", cobwebQuantile) # KendallPlot tests size = 100 copula1 = FrankCopula(1.5) copula2 = GumbelCopula(4.5) sample1 = copula1.getSample(size) sample1.setName("data 1") sample2 = copula2.getSample(size) sample2.setName("data 2") kendallPlot1 = VisualTest.DrawKendallPlot(sample1, copula2) print("KendallPlot1 = ", kendallPlot1) kendallPlot2 = VisualTest.DrawKendallPlot(sample2, sample1) print("KendallPlot2 = ", kendallPlot2) except: import sys print("t_VisualTest_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_VonMises_std.expout000066400000000000000000000035151307543307100221350ustar00rootroot00000000000000Distribution VonMises(mu = -0.5, kappa=1.5) Elliptical = False Continuous = True oneRealization= [0.492446] oneSample first= [-0.494608] last= [0.388969] mean= [-0.474891] covariance= [[ 0.986948 ]] Kolmogorov test for the generator, sample size= 100 is True Kolmogorov test for the generator, sample size= 1000 is True Point= [1] ddf = [-0.160799] log pdf= -2.23055863162 pdf =0.107468 pdf (FD)=0.107468 cdf= 0.915928213128 ccdf= 0.0840717868715 survival= 0.0840717868715 characteristic function=(0.523156, -0.285801) log characteristic function=(-0.517291, -0.5) pdf gradient = [0.160799,-0.0564635] pdf gradient (FD)= [0.160799,-0.0564635] cdf gradient = [-0.0815561,0.0925495] cdf gradient (FD)= [-0.0815561,0.0925495] quantile= [1.42908] cdf(quantile)= 0.95 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-2.1122] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-2.71399, 1.71399] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.2363} with f= MinimumVolumeLevelSetEvaluation(VonMises(mu = -0.5, kappa=1.5)) beta= [0.0393091] Bilateral confidence interval= [-2.46547, 2.0656] beta= [0.95] Unilateral confidence interval (lower tail)= [-3.14159, 1.42908] beta= [0.95] Unilateral confidence interval (upper tail)= [-2.1122, 3.14159] beta= [0.95] mean= [-0.427827] standard deviation= [1.05959] skewness= [0.410037] kurtosis= [3.70254] covariance= [[ 1.12273 ]] correlation= [[ 1 ]] spearman= [[ 1 ]] kendall= [[ 1 ]] parameters= [[mu : -0.5, kappa : 1.5]] standard moment n= 0 , value= [1] standard moment n= 1 , value= [-0.427827] standard moment n= 2 , value= [1.30577] standard moment n= 3 , value= [-1.03152] standard moment n= 4 , value= [5.0989] standard moment n= 5 , value= [-4.03982] Standard representative= VonMises(mu = -0.5, kappa=1.5) Circular mean= -0.5 Circular variance= 0.403866761169 openturns-1.9/python/test/t_VonMises_std.py000077500000000000000000000125001307543307100212360ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import openturns as ot ot.TESTPREAMBLE() ot.RandomGenerator.SetSeed(0) # Instanciate one distribution object distribution = ot.VonMises(-0.5, 1.5) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", oneRealization) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", oneSample[0], " last=", oneSample[size - 1]) print("mean=", oneSample.computeMean()) print("covariance=", oneSample.computeCovariance()) size = 100 for i in range(2): print("Kolmogorov test for the generator, sample size=", size, " is ", ot.FittingTest.Kolmogorov( distribution.getSample(size), distribution).getBinaryQualityMeasure()) size *= 10 # Define a point point = ot.Point(distribution.getDimension(), 1.0) print("Point= ", point) # Show PDF and CDF of point eps = 1e-5 DDF = distribution.computeDDF(point) print("ddf =", DDF) LPDF = distribution.computeLogPDF(point) print("log pdf= %.12g" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) print("pdf (FD)=%.6f" % ((distribution.computeCDF( point + [eps]) - distribution.computeCDF(point + [-eps])) / (2.0 * eps))) CDF = distribution.computeCDF(point) print("cdf= %.12g" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf= %.12g" % CCDF) Survival = distribution.computeSurvivalFunction(point) print("survival= %.12g" % Survival) CF = distribution.computeCharacteristicFunction(point[0]) print("characteristic function=(%.6g, %.6g)" % (CF.real, CF.imag)) LCF = distribution.computeLogCharacteristicFunction(point[0]) print("log characteristic function=(%.6g, %.6g)" % (LCF.real, LCF.imag)) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", PDFgr) PDFgrFD = ot.Point(2) PDFgrFD[0] = (ot.VonMises(distribution.getMu() + eps, distribution.getKappa()).computePDF(point) - ot.VonMises(distribution.getMu() - eps, distribution.getKappa()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (ot.VonMises(distribution.getMu(), distribution.getKappa() + eps).computePDF(point) - ot.VonMises(distribution.getMu(), distribution.getKappa() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", PDFgrFD) CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", CDFgr) CDFgrFD = ot.Point(2) CDFgrFD[0] = (ot.VonMises(distribution.getMu() + eps, distribution.getKappa()).computeCDF(point) - ot.VonMises(distribution.getMu() - eps, distribution.getKappa()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (ot.VonMises(distribution.getMu(), distribution.getKappa() + eps).computeCDF(point) - ot.VonMises(distribution.getMu(), distribution.getKappa() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", CDFgrFD) quantile = distribution.computeQuantile(0.95) print("quantile=", quantile) print("cdf(quantile)= %.12g" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = ot.Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", ot.Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", ot.Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", ot.Point(1, beta)) mean = distribution.getMean() print("mean=", mean) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", standardDeviation) skewness = distribution.getSkewness() print("skewness=", skewness) kurtosis = distribution.getKurtosis() print("kurtosis=", kurtosis) covariance = distribution.getCovariance() print("covariance=", covariance) correlation = distribution.getCorrelation() print("correlation=", correlation) spearman = distribution.getSpearmanCorrelation() print("spearman=", spearman) kendall = distribution.getKendallTau() print("kendall=", kendall) parameters = distribution.getParametersCollection() print("parameters=", parameters) for i in range(6): print("standard moment n=", i, ", value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) print("Circular mean=", distribution.getCircularMean()) print("Circular variance= %.12g" % distribution.getCircularVariance()) openturns-1.9/python/test/t_Waarts_25_quadratic_terms.expout000066400000000000000000001122221307543307100245320ustar00rootroot00000000000000 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 1.76092e-03 generalized reliability index = 2.91809 ************************************************************************************************ standard space design point = -2.2586 standard space design point = 1.6477 standard space design point = 0.5835 standard space design point = 0.3545 standard space design point = 0.2546 standard space design point = 0.1986 standard space design point = 0.1628 standard space design point = 0.1380 standard space design point = 0.1197 standard space design point = 0.1057 standard space design point = 0.0946 standard space design point = 0.0856 standard space design point = 0.0782 standard space design point = 0.0720 standard space design point = 0.0667 standard space design point = 0.0621 standard space design point = 0.0581 standard space design point = 0.0546 standard space design point = 0.0515 standard space design point = 0.0487 standard space design point = 0.0462 standard space design point = 0.0440 standard space design point = 0.0419 standard space design point = 0.0401 standard space design point = 0.0384 standard space design point = 0.0368 ************************************************************************************************ physical space design point = 0.27414 physical space design point = 0.36477 physical space design point = 0.25835 physical space design point = 0.23545 physical space design point = 0.22546 physical space design point = 0.21986 physical space design point = 0.21628 physical space design point = 0.21380 physical space design point = 0.21197 physical space design point = 0.21057 physical space design point = 0.20946 physical space design point = 0.20856 physical space design point = 0.20782 physical space design point = 0.20720 physical space design point = 0.20667 physical space design point = 0.20621 physical space design point = 0.20581 physical space design point = 0.20546 physical space design point = 0.20515 physical space design point = 0.20487 physical space design point = 0.20462 physical space design point = 0.20440 physical space design point = 0.20419 physical space design point = 0.20401 physical space design point = 0.20384 physical space design point = 0.20368 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.59906 importance factors = 0.31885 importance factors = 0.03998 importance factors = 0.01476 importance factors = 0.00761 importance factors = 0.00463 importance factors = 0.00311 importance factors = 0.00224 importance factors = 0.00168 importance factors = 0.00131 importance factors = 0.00105 importance factors = 0.00086 importance factors = 0.00072 importance factors = 0.00061 importance factors = 0.00052 importance factors = 0.00045 importance factors = 0.00040 importance factors = 0.00035 importance factors = 0.00031 importance factors = 0.00028 importance factors = 0.00025 importance factors = 0.00023 importance factors = 0.00021 importance factors = 0.00019 importance factors = 0.00017 importance factors = 0.00016 ************************************************************************************************ Hasofer reliability index = 2.91809 ************************************************************************************************ Pf sensitivity = -0.04371 Pf sensitivity = 0.09872 Pf sensitivity = 0.03189 Pf sensitivity = 0.05254 Pf sensitivity = 0.01129 Pf sensitivity = 0.00659 Pf sensitivity = 0.00686 Pf sensitivity = 0.00243 Pf sensitivity = 0.00493 Pf sensitivity = 0.00125 Pf sensitivity = 0.00384 Pf sensitivity = 0.00076 Pf sensitivity = 0.00315 Pf sensitivity = 0.00051 Pf sensitivity = 0.00267 Pf sensitivity = 0.00037 Pf sensitivity = 0.00232 Pf sensitivity = 0.00028 Pf sensitivity = 0.00205 Pf sensitivity = 0.00022 Pf sensitivity = 0.00183 Pf sensitivity = 0.00017 Pf sensitivity = 0.00166 Pf sensitivity = 0.00014 Pf sensitivity = 0.00151 Pf sensitivity = 0.00012 Pf sensitivity = 0.00139 Pf sensitivity = 0.00010 Pf sensitivity = 0.00129 Pf sensitivity = 0.00009 Pf sensitivity = 0.00120 Pf sensitivity = 0.00007 Pf sensitivity = 0.00112 Pf sensitivity = 0.00007 Pf sensitivity = 0.00106 Pf sensitivity = 0.00006 Pf sensitivity = 0.00100 Pf sensitivity = 0.00005 Pf sensitivity = 0.00094 Pf sensitivity = 0.00005 Pf sensitivity = 0.00089 Pf sensitivity = 0.00004 Pf sensitivity = 0.00085 Pf sensitivity = 0.00004 Pf sensitivity = 0.00081 Pf sensitivity = 0.00003 Pf sensitivity = 0.00078 Pf sensitivity = 0.00003 Pf sensitivity = 0.00074 Pf sensitivity = 0.00003 Pf sensitivity = 0.00071 Pf sensitivity = 0.00003 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 1.76092e-03 generalized reliability index = 2.91809 ************************************************************************************************ standard space design point = -2.2586 standard space design point = 1.6477 standard space design point = 0.5835 standard space design point = 0.3545 standard space design point = 0.2546 standard space design point = 0.1986 standard space design point = 0.1628 standard space design point = 0.1380 standard space design point = 0.1197 standard space design point = 0.1057 standard space design point = 0.0946 standard space design point = 0.0856 standard space design point = 0.0782 standard space design point = 0.0720 standard space design point = 0.0667 standard space design point = 0.0621 standard space design point = 0.0581 standard space design point = 0.0546 standard space design point = 0.0515 standard space design point = 0.0487 standard space design point = 0.0462 standard space design point = 0.0440 standard space design point = 0.0419 standard space design point = 0.0401 standard space design point = 0.0384 standard space design point = 0.0368 ************************************************************************************************ physical space design point = 0.27414 physical space design point = 0.36477 physical space design point = 0.25835 physical space design point = 0.23545 physical space design point = 0.22546 physical space design point = 0.21986 physical space design point = 0.21628 physical space design point = 0.21380 physical space design point = 0.21197 physical space design point = 0.21057 physical space design point = 0.20946 physical space design point = 0.20856 physical space design point = 0.20782 physical space design point = 0.20720 physical space design point = 0.20667 physical space design point = 0.20621 physical space design point = 0.20581 physical space design point = 0.20546 physical space design point = 0.20515 physical space design point = 0.20487 physical space design point = 0.20462 physical space design point = 0.20440 physical space design point = 0.20419 physical space design point = 0.20401 physical space design point = 0.20384 physical space design point = 0.20368 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.59907 importance factors = 0.31884 importance factors = 0.03999 importance factors = 0.01476 importance factors = 0.00761 importance factors = 0.00463 importance factors = 0.00311 importance factors = 0.00224 importance factors = 0.00168 importance factors = 0.00131 importance factors = 0.00105 importance factors = 0.00086 importance factors = 0.00072 importance factors = 0.00061 importance factors = 0.00052 importance factors = 0.00045 importance factors = 0.00040 importance factors = 0.00035 importance factors = 0.00031 importance factors = 0.00028 importance factors = 0.00025 importance factors = 0.00023 importance factors = 0.00021 importance factors = 0.00019 importance factors = 0.00017 importance factors = 0.00016 ************************************************************************************************ Hasofer reliability index = 2.91809 ************************************************************************************************ Pf sensitivity = -0.04371 Pf sensitivity = 0.09872 Pf sensitivity = 0.03189 Pf sensitivity = 0.05254 Pf sensitivity = 0.01129 Pf sensitivity = 0.00659 Pf sensitivity = 0.00686 Pf sensitivity = 0.00243 Pf sensitivity = 0.00493 Pf sensitivity = 0.00125 Pf sensitivity = 0.00384 Pf sensitivity = 0.00076 Pf sensitivity = 0.00315 Pf sensitivity = 0.00051 Pf sensitivity = 0.00267 Pf sensitivity = 0.00037 Pf sensitivity = 0.00232 Pf sensitivity = 0.00028 Pf sensitivity = 0.00205 Pf sensitivity = 0.00022 Pf sensitivity = 0.00183 Pf sensitivity = 0.00017 Pf sensitivity = 0.00166 Pf sensitivity = 0.00014 Pf sensitivity = 0.00151 Pf sensitivity = 0.00012 Pf sensitivity = 0.00139 Pf sensitivity = 0.00010 Pf sensitivity = 0.00129 Pf sensitivity = 0.00009 Pf sensitivity = 0.00120 Pf sensitivity = 0.00007 Pf sensitivity = 0.00112 Pf sensitivity = 0.00007 Pf sensitivity = 0.00106 Pf sensitivity = 0.00006 Pf sensitivity = 0.00100 Pf sensitivity = 0.00005 Pf sensitivity = 0.00094 Pf sensitivity = 0.00005 Pf sensitivity = 0.00089 Pf sensitivity = 0.00004 Pf sensitivity = 0.00085 Pf sensitivity = 0.00004 Pf sensitivity = 0.00081 Pf sensitivity = 0.00003 Pf sensitivity = 0.00078 Pf sensitivity = 0.00003 Pf sensitivity = 0.00074 Pf sensitivity = 0.00003 Pf sensitivity = 0.00071 Pf sensitivity = 0.00003 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 4.11118e-03 Breitung generalized reliability index = 2.64280 HohenBichler event probability = 4.51026e-03 HohenBichler generalized reliability index = 2.61128 Tvedt event probability = 4.29501e-03 Tvedt generalized reliability index = 2.62795 ************************************************************************************************ sorted curvatures = -0.11054 sorted curvatures = -0.07081 sorted curvatures = -0.04994 sorted curvatures = -0.03808 sorted curvatures = -0.03067 sorted curvatures = -0.02564 sorted curvatures = -0.02202 sorted curvatures = -0.01929 sorted curvatures = -0.01716 sorted curvatures = -0.01545 sorted curvatures = -0.01405 sorted curvatures = -0.01288 sorted curvatures = -0.01189 sorted curvatures = -0.01105 sorted curvatures = -0.01031 sorted curvatures = -0.00967 sorted curvatures = -0.00910 sorted curvatures = -0.00860 sorted curvatures = -0.00814 sorted curvatures = -0.00774 sorted curvatures = -0.00737 sorted curvatures = -0.00703 sorted curvatures = -0.00673 sorted curvatures = -0.00645 sorted curvatures = -0.00619 sorted curvatures = 0.00000 ************************************************************************************************ standard space design point = -2.2586 standard space design point = 1.6477 standard space design point = 0.5835 standard space design point = 0.3545 standard space design point = 0.2546 standard space design point = 0.1986 standard space design point = 0.1628 standard space design point = 0.1380 standard space design point = 0.1197 standard space design point = 0.1057 standard space design point = 0.0946 standard space design point = 0.0856 standard space design point = 0.0782 standard space design point = 0.0720 standard space design point = 0.0667 standard space design point = 0.0621 standard space design point = 0.0581 standard space design point = 0.0546 standard space design point = 0.0515 standard space design point = 0.0487 standard space design point = 0.0462 standard space design point = 0.0440 standard space design point = 0.0419 standard space design point = 0.0401 standard space design point = 0.0384 standard space design point = 0.0368 ************************************************************************************************ physical space design point = 0.27414 physical space design point = 0.36477 physical space design point = 0.25835 physical space design point = 0.23545 physical space design point = 0.22546 physical space design point = 0.21986 physical space design point = 0.21628 physical space design point = 0.21380 physical space design point = 0.21197 physical space design point = 0.21057 physical space design point = 0.20946 physical space design point = 0.20856 physical space design point = 0.20782 physical space design point = 0.20720 physical space design point = 0.20667 physical space design point = 0.20621 physical space design point = 0.20581 physical space design point = 0.20546 physical space design point = 0.20515 physical space design point = 0.20487 physical space design point = 0.20462 physical space design point = 0.20440 physical space design point = 0.20419 physical space design point = 0.20401 physical space design point = 0.20384 physical space design point = 0.20368 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.59906 importance factors = 0.31885 importance factors = 0.03998 importance factors = 0.01476 importance factors = 0.00761 importance factors = 0.00463 importance factors = 0.00311 importance factors = 0.00224 importance factors = 0.00168 importance factors = 0.00131 importance factors = 0.00105 importance factors = 0.00086 importance factors = 0.00072 importance factors = 0.00061 importance factors = 0.00052 importance factors = 0.00045 importance factors = 0.00040 importance factors = 0.00035 importance factors = 0.00031 importance factors = 0.00028 importance factors = 0.00025 importance factors = 0.00023 importance factors = 0.00021 importance factors = 0.00019 importance factors = 0.00017 importance factors = 0.00016 ************************************************************************************************ Hasofer reliability index = 2.91809 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 4.11119e-03 Breitung generalized reliability index = 2.64280 HohenBichler event probability = 4.51027e-03 HohenBichler generalized reliability index = 2.61127 Tvedt event probability = 4.29502e-03 Tvedt generalized reliability index = 2.62795 ************************************************************************************************ sorted curvatures = -0.11054 sorted curvatures = -0.07081 sorted curvatures = -0.04994 sorted curvatures = -0.03808 sorted curvatures = -0.03067 sorted curvatures = -0.02564 sorted curvatures = -0.02202 sorted curvatures = -0.01929 sorted curvatures = -0.01716 sorted curvatures = -0.01545 sorted curvatures = -0.01405 sorted curvatures = -0.01288 sorted curvatures = -0.01189 sorted curvatures = -0.01105 sorted curvatures = -0.01031 sorted curvatures = -0.00967 sorted curvatures = -0.00910 sorted curvatures = -0.00860 sorted curvatures = -0.00814 sorted curvatures = -0.00774 sorted curvatures = -0.00737 sorted curvatures = -0.00703 sorted curvatures = -0.00673 sorted curvatures = -0.00645 sorted curvatures = -0.00619 sorted curvatures = 0.00000 ************************************************************************************************ standard space design point = -2.2586 standard space design point = 1.6477 standard space design point = 0.5835 standard space design point = 0.3545 standard space design point = 0.2546 standard space design point = 0.1986 standard space design point = 0.1628 standard space design point = 0.1380 standard space design point = 0.1197 standard space design point = 0.1057 standard space design point = 0.0946 standard space design point = 0.0856 standard space design point = 0.0782 standard space design point = 0.0720 standard space design point = 0.0667 standard space design point = 0.0621 standard space design point = 0.0581 standard space design point = 0.0546 standard space design point = 0.0515 standard space design point = 0.0487 standard space design point = 0.0462 standard space design point = 0.0440 standard space design point = 0.0419 standard space design point = 0.0401 standard space design point = 0.0384 standard space design point = 0.0368 ************************************************************************************************ physical space design point = 0.27414 physical space design point = 0.36477 physical space design point = 0.25835 physical space design point = 0.23545 physical space design point = 0.22546 physical space design point = 0.21986 physical space design point = 0.21628 physical space design point = 0.21380 physical space design point = 0.21197 physical space design point = 0.21057 physical space design point = 0.20946 physical space design point = 0.20856 physical space design point = 0.20782 physical space design point = 0.20720 physical space design point = 0.20667 physical space design point = 0.20621 physical space design point = 0.20581 physical space design point = 0.20546 physical space design point = 0.20515 physical space design point = 0.20487 physical space design point = 0.20462 physical space design point = 0.20440 physical space design point = 0.20419 physical space design point = 0.20401 physical space design point = 0.20384 physical space design point = 0.20368 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.59907 importance factors = 0.31884 importance factors = 0.03999 importance factors = 0.01476 importance factors = 0.00761 importance factors = 0.00463 importance factors = 0.00311 importance factors = 0.00224 importance factors = 0.00168 importance factors = 0.00131 importance factors = 0.00105 importance factors = 0.00086 importance factors = 0.00072 importance factors = 0.00061 importance factors = 0.00052 importance factors = 0.00045 importance factors = 0.00040 importance factors = 0.00035 importance factors = 0.00031 importance factors = 0.00028 importance factors = 0.00025 importance factors = 0.00023 importance factors = 0.00021 importance factors = 0.00019 importance factors = 0.00017 importance factors = 0.00016 ************************************************************************************************ Hasofer reliability index = 2.91809 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 3.37553e-03 Pf Variance estimation = 2.83893e-06 CoV = 0.49916 90% Confidence Interval = 5.54287e-03 CI at 90% =[ 6.04093e-04 ; 6.14696e-03 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 4.62500e-03 Pf Variance estimation = 5.75451e-07 CoV = 0.16402 90% Confidence Interval = 2.49552e-03 CI at 90% =[ 3.37724e-03 ; 5.87276e-03 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_25_quadratic_terms.py000077500000000000000000000367731307543307100236610ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar try: # # Physical model # dim = 26 inputFunction = Description(dim) inputFunction[0] = "r" for i in range(1, dim): inputFunction[i] = "s" + str(i) outputFunction = Description(1) outputFunction[0] = "g" formulas = Description(outputFunction.getSize()) formulas[0] = "r" for i in range(1, dim): formulas[0] = formulas[0] + \ " - (" + inputFunction[i] + " ^ 2.0) / " + str(i) limitState = Function(inputFunction, outputFunction, formulas) # # Probabilistic model # mean = Point(dim, 0.2) mean[0] = 0.5 sigma = Point(dim, 0.1) R = CorrelationMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(limitState, vect) myEvent = Event(output, Less(), 0.0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(8000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(8000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # # Results # # # FORM/SORM Cobyla PfC = resultC.getEventProbability() Beta_generalizedC = resultC.getGeneralisedReliabilityIndex() u_starC = resultC.getStandardSpaceDesignPoint() x_starC = resultC.getPhysicalSpaceDesignPoint() PtC = resultC.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC = resultC.getImportanceFactors() beta_hasoferC = resultC.getHasoferReliabilityIndex() SensitivityC = resultC.getEventProbabilitySensitivity() PFBreitC2 = resultC2.getEventProbabilityBreitung() BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung() PFHBC2 = resultC2.getEventProbabilityHohenBichler() BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtC2 = resultC2.getEventProbabilityTvedt() BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt() CurvC2 = resultC2.getSortedCurvatures() u_starC2 = resultC2.getStandardSpaceDesignPoint() x_starC2 = resultC2.getPhysicalSpaceDesignPoint() PtC2 = resultC2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC2 = resultC2.getImportanceFactors() beta_hasoferC2 = resultC2.getHasoferReliabilityIndex() # # FORM/SORM Abdo Rackwitz PfAR = resultAR.getEventProbability() Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex() u_starAR = resultAR.getStandardSpaceDesignPoint() x_starAR = resultAR.getPhysicalSpaceDesignPoint() PtAR = resultAR.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR = resultAR.getImportanceFactors() beta_hasoferAR = resultAR.getHasoferReliabilityIndex() SensitivityAR = resultAR.getEventProbabilitySensitivity() PFBreitAR2 = resultAR2.getEventProbabilityBreitung() BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung() PFHBAR2 = resultAR2.getEventProbabilityHohenBichler() BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtAR2 = resultAR2.getEventProbabilityTvedt() BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt() CurvAR2 = resultAR2.getSortedCurvatures() u_starAR2 = resultAR2.getStandardSpaceDesignPoint() x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint() PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR2 = resultAR2.getImportanceFactors() beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex() # # Monte Carlo ResultMC = myMC.getResult() PFMC = ResultMC.getProbabilityEstimate() CVMC = ResultMC.getCoefficientOfVariation() Variance_PF_MC = ResultMC.getVarianceEstimate() length90MC = ResultMC.getConfidenceLength(0.90) # # LHS ResultLHS = myLHS.getResult() PFLHS = ResultLHS.getProbabilityEstimate() CVLHS = ResultLHS.getCoefficientOfVariation() Variance_PF_LHS = ResultLHS.getVarianceEstimate() length90LHS = ResultLHS.getConfidenceLength(0.90) # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.4f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.4f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.4f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.4f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_25_quadratic_terms.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_RS2.expout000066400000000000000000000171651307543307100214550ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 0.000258969616588 generalized reliability index = 3.47130298848 ************************************************************************************************ standard space design point = -1.04883301769 standard space design point = 3.30906236551 ************************************************************************************************ physical space design point = 9.95116698231 physical space design point = 3.15453118276 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.0912909353793 importance factors = 0.908709064621 ************************************************************************************************ Hasofer reliability index = 3.47130298848 ************************************************************************************************ Pf sensitivity = -0.000291453758233 Pf sensitivity = 0.000305686324765 Pf sensitivity = 0.00183879993742 Pf sensitivity = 0.00608470367063 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 0.000258940022644 generalized reliability index = 3.47133367362 ************************************************************************************************ standard space design point = -1.0485985729 standard space design point = 3.30916885434 ************************************************************************************************ physical space design point = 9.9514014271 physical space design point = 3.15458442717 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.0912485143455 importance factors = 0.908751485655 ************************************************************************************************ Hasofer reliability index = 3.47133367362 ************************************************************************************************ Pf sensitivity = -0.000291418245237 Pf sensitivity = 0.000305580756074 Pf sensitivity = 0.00183860691652 Pf sensitivity = 0.00608426074351 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 0.000265403155187 Breitung generalized reliability index = 3.46470859332 HohenBichler event probability = 0.000265891079637 HohenBichler generalized reliability index = 3.46421456604 Tvedt event probability = 0.000265871448362 Tvedt generalized reliability index = 3.46423442654 ************************************************************************************************ sorted curvatures = -0.0137970220467 sorted curvatures = -0.0 ************************************************************************************************ standard space design point = -1.04883301769 standard space design point = 3.30906236551 ************************************************************************************************ physical space design point = 9.95116698231 physical space design point = 3.15453118276 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.0912909353793 importance factors = 0.908709064621 ************************************************************************************************ Hasofer reliability index = 3.47130298848 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 0.000265372577944 Breitung generalized reliability index = 3.46473958119 HohenBichler event probability = 0.000265860419338 HohenBichler generalized reliability index = 3.46424558495 Tvedt event probability = 0.000265840792185 Tvedt generalized reliability index = 3.46426544341 ************************************************************************************************ sorted curvatures = -0.0137963872331 sorted curvatures = -0.0 ************************************************************************************************ standard space design point = -1.0485985729 standard space design point = 3.30916885434 ************************************************************************************************ physical space design point = 9.9514014271 physical space design point = 3.15458442717 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.0912485143455 importance factors = 0.908751485655 ************************************************************************************************ Hasofer reliability index = 3.47133367362 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 0.00025831202046 Pf Variance estimation = 6.61134296923e-10 CoV = 0.0995405938072 90% Confidence Interval = 8.45867027214e-05 CI at 90% =[ 0.0002160186691 ; 0.000300605371821 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 0.000295408014039 Pf Variance estimation = 8.7240370952e-10 CoV = 0.0999853747714 90% Confidence Interval = 9.71663757813e-05 CI at 90% =[ 0.000246824826149 ; 0.00034399120193 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_RS2.py000077500000000000000000000307331307543307100205600ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar try: # # Physical model # inputFunction = Description(2) inputFunction[0] = "r" inputFunction[1] = "s" outputFunction = Description(1) outputFunction[0] = "g" formulas = Description(outputFunction.getSize()) formulas[0] = "r - s^2" limitState = Function(inputFunction, outputFunction, formulas) dim = limitState.getInputDimension() # # Probabilistic model # mean = Point(dim) mean[0] = 11.0 mean[1] = 1.5 sigma = Point(dim) sigma[0] = 1.0 sigma[1] = 0.5 R = CorrelationMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(limitState, vect) myEvent = Event(output, Less(), 0.0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(1000 * dim) myCobyla.setMaximumAbsoluteError(1.0e-4) myCobyla.setMaximumRelativeError(1.0e-4) myCobyla.setMaximumResidualError(1.0e-4) myCobyla.setMaximumConstraintError(1.0e-4) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(1000) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-4) myAbdoRackwitz.setMaximumRelativeError(1.0e-4) myAbdoRackwitz.setMaximumResidualError(1.0e-4) myAbdoRackwitz.setMaximumConstraintError(1.0e-4) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.1 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(1000000) myMC.setBlockSize(1000) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(1000000) myLHS.setBlockSize(100) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_RS2.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_concave.expout000066400000000000000000000142141307543307100224550ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 0.0486272142225 generalized reliability index = 1.65831239515 ************************************************************************************************ standard space design point = 1.47158736741 standard space design point = -0.764480621066 ************************************************************************************************ physical space design point = 1.47158736741 physical space design point = -0.764480621066 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.787479774543 importance factors = 0.212520225457 ************************************************************************************************ Hasofer reliability index = 1.65831239515 ************************************************************************************************ Pf sensitivity = 0.089510680855 Pf sensitivity = 0.131722787194 Pf sensitivity = -0.0465002486686 Pf sensitivity = 0.0355485389819 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 0.00134989803167 generalized reliability index = 2.99999999999 ************************************************************************************************ standard space design point = 2.12132034355 standard space design point = 2.12132034355 ************************************************************************************************ physical space design point = 2.12132034355 physical space design point = 2.12132034355 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.5 importance factors = 0.5 ************************************************************************************************ Hasofer reliability index = 2.99999999999 ************************************************************************************************ Pf sensitivity = 0.00313379006535 Pf sensitivity = 0.00664777261806 Pf sensitivity = 0.00313379006535 Pf sensitivity = 0.00664777261806 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 0.0510006527436 Breitung generalized reliability index = 1.6352277855 HohenBichler event probability = 0.0516526523302 HohenBichler generalized reliability index = 1.62903644178 Tvedt event probability = 0.0515941195386 Tvedt generalized reliability index = 1.62958971736 ************************************************************************************************ sorted curvatures = -0.05482024888 sorted curvatures = -3.34744835441e-17 ************************************************************************************************ standard space design point = 1.47158736741 standard space design point = -0.764480621066 ************************************************************************************************ physical space design point = 1.47158736741 physical space design point = -0.764480621066 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.787479774543 importance factors = 0.212520225457 ************************************************************************************************ Hasofer reliability index = 1.65831239515 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ convergence error ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 0.129032258065 Pf Variance estimation = 0.00362525594978 CoV = 0.466628262629 90% Confidence Interval = 0.198073597477 CI at 90% =[ 0.0299954593261 ; 0.228069056803 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 0.107270560191 Pf Variance estimation = 0.000114140151498 CoV = 0.0995952609208 90% Confidence Interval = 0.0351460461353 CI at 90% =[ 0.0896975371231 ; 0.124843583258 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_concave.py000077500000000000000000000302541307543307100215660ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * # from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # # Physical model # EtatLimite = Function( ['X1', 'X2'], ['G'], ["-0.5*(X1-X2)*(X1-X2) - (X1+X2)/(sqrt(2)) + 3"]) dim = EtatLimite.getInputDimension() print(dim) # # probabilistic model # mean = [0.] * dim sigma = [1.] * dim R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() Covariance = myDistribution.getCovariance() # # limit state # vect = RandomVector(myDistribution) output = RandomVector(EtatLimite, vect) myEvent = Event(output, Less(), 0.0) # # Calculation # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() # myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) # resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(100000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(100000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_concave.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_convex.expout000066400000000000000000000170661307543307100223510ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 0.00620966532753 generalized reliability index = 2.4999999999 ************************************************************************************************ standard space design point = 1.76776695202 standard space design point = 1.76776695377 ************************************************************************************************ physical space design point = 1.76776695202 physical space design point = 1.76776695377 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.499999999504 importance factors = 0.500000000496 ************************************************************************************************ Hasofer reliability index = 2.4999999999 ************************************************************************************************ Pf sensitivity = 0.012394380151 Pf sensitivity = 0.0219103756217 Pf sensitivity = 0.0123943801385 Pf sensitivity = 0.0219103756214 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 0.00620966532603 generalized reliability index = 2.49999999999 ************************************************************************************************ standard space design point = 1.76776695296 standard space design point = 1.76776695296 ************************************************************************************************ physical space design point = 1.76776695296 physical space design point = 1.76776695296 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.5 importance factors = 0.5 ************************************************************************************************ Hasofer reliability index = 2.49999999999 ************************************************************************************************ Pf sensitivity = 0.0123943801421 Pf sensitivity = 0.0219103756176 Pf sensitivity = 0.0123943801421 Pf sensitivity = 0.0219103756176 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 0.0043908964931 Breitung generalized reliability index = 2.62043398853 HohenBichler event probability = 0.00425569387071 HohenBichler generalized reliability index = 2.63108048112 Tvedt event probability = 0.00419512348628 Tvedt generalized reliability index = 2.6359484789 ************************************************************************************************ sorted curvatures = 2.77555756153e-17 sorted curvatures = 0.399999988683 ************************************************************************************************ standard space design point = 1.76776695202 standard space design point = 1.76776695377 ************************************************************************************************ physical space design point = 1.76776695202 physical space design point = 1.76776695377 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.499999999504 importance factors = 0.500000000496 ************************************************************************************************ Hasofer reliability index = 2.4999999999 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 0.004390896492 Breitung generalized reliability index = 2.62043398862 HohenBichler event probability = 0.00425569386965 HohenBichler generalized reliability index = 2.6310804812 Tvedt event probability = 0.00419512348524 Tvedt generalized reliability index = 2.63594847899 ************************************************************************************************ sorted curvatures = 2.77555756153e-17 sorted curvatures = 0.399999988683 ************************************************************************************************ standard space design point = 1.76776695296 standard space design point = 1.76776695296 ************************************************************************************************ physical space design point = 1.76776695296 physical space design point = 1.76776695296 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.5 importance factors = 0.5 ************************************************************************************************ Hasofer reliability index = 2.49999999999 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 0.0042735042735 Pf Variance estimation = 4.54619811403e-06 CoV = 0.498930480059 90% Confidence Interval = 0.00701425307454 CI at 90% =[ 0.000766377736234 ; 0.00778063081077 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 0.0048602673147 Pf Variance estimation = 2.35073881717e-07 CoV = 0.099756690637 90% Confidence Interval = 0.00159499542558 CI at 90% =[ 0.00406276960191 ; 0.00565776502749 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_convex.py000077500000000000000000000307531307543307100214560ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * # from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # # Physical model # inputFunction = Description(2) inputFunction[0] = "X1" inputFunction[1] = "X2" outputFunction = Description(1) outputFunction[0] = "G" formulas = Description(outputFunction.getSize()) formulas[0] = "2.5 + 0.1*(X1-X2)^2.0 - (X1+X2)/sqrt(2.0)" EtatLimite = Function(inputFunction, outputFunction, formulas) dim = EtatLimite.getInputDimension() print(dim) # # Probabilistic model # mean = Point(dim, 0.0) mean[0] = 0.0 mean[1] = 0.0 sigma = Point(dim, 0.0) sigma[0] = 1.0 sigma[1] = 1.0 R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() Covariance = myDistribution.getCovariance() # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(EtatLimite, vect) myEvent = Event(output, Less(), 0.0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(100000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(100000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_convex.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_discontinuous_lsf.expout000066400000000000000000000213751307543307100246170ustar00rootroot000000000000002 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 6.55814879738e-05 generalized reliability index = 3.82426463516 ************************************************************************************************ standard space design point = -3.75000000693 standard space design point = 0.749999965159 ************************************************************************************************ physical space design point = 5.62499998268 physical space design point = 5.37499998258 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.961538465111 importance factors = 0.0384615348889 ************************************************************************************************ Hasofer reliability index = 3.82426463516 ************************************************************************************************ Pf sensitivity = -0.00010439386783 Pf sensitivity = 0.000391477005084 Pf sensitivity = 0.00010439386783 Pf sensitivity = 7.8295397235e-05 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 6.55814879608e-05 generalized reliability index = 3.8242646352 ************************************************************************************************ standard space design point = -3.75000000001 standard space design point = 0.750000000002 ************************************************************************************************ physical space design point = 5.62499999998 physical space design point = 5.375 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.961538461538 importance factors = 0.0384615384615 ************************************************************************************************ Hasofer reliability index = 3.8242646352 ************************************************************************************************ Pf sensitivity = -0.00010439386781 Pf sensitivity = 0.000391477004289 Pf sensitivity = 0.00010439386781 Pf sensitivity = 7.82954008578e-05 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 6.55814879738e-05 Breitung generalized reliability index = 3.82426463516 HohenBichler event probability = 6.55814879738e-05 HohenBichler generalized reliability index = 3.82426463516 Tvedt event probability = 6.55814879738e-05 Tvedt generalized reliability index = 3.82426463516 ************************************************************************************************ sorted curvatures = -0.0 sorted curvatures = 7.40291005713e-16 ************************************************************************************************ standard space design point = -3.75000000693 standard space design point = 0.749999965159 ************************************************************************************************ physical space design point = 5.62499998268 physical space design point = 5.37499998258 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.961538465111 importance factors = 0.0384615348889 ************************************************************************************************ Hasofer reliability index = 3.82426463516 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 6.55814879608e-05 Breitung generalized reliability index = 3.8242646352 HohenBichler event probability = 6.55814879608e-05 HohenBichler generalized reliability index = 3.8242646352 Tvedt event probability = 6.55814879608e-05 Tvedt generalized reliability index = 3.8242646352 ************************************************************************************************ sorted curvatures = -4.57246431725e-16 sorted curvatures = 1.34035304893e-17 ************************************************************************************************ standard space design point = -3.75000000001 standard space design point = 0.750000000002 ************************************************************************************************ physical space design point = 5.62499999998 physical space design point = 5.375 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.961538461538 importance factors = 0.0384615384615 ************************************************************************************************ Hasofer reliability index = 3.8242646352 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 5e-05 Pf Variance estimation = 5.00024998e-10 CoV = 0.447224774806 90% Confidence Interval = 7.35619292902e-05 CI at 90% =[ 1.32190353549e-05 ; 8.67809646451e-05 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 6.44790602656e-05 Pf Variance estimation = 4.15727555848e-11 CoV = 0.0999967088934 90% Confidence Interval = 2.12110251276e-05 CI at 90% =[ 5.38735477018e-05 ; 7.50845728294e-05 ] ************************************************************************************************ ************************************************************************************************ ******************************************* D S ************************************************ ************************************************************************************************ Pf estimation = 6.48513778214e-05 Pf Variance estimation = 1.12187135741e-11 CoV = 0.0516478589453 90% Confidence Interval = 1.10186600045e-05 CI at 90% =[ 5.93420478191e-05 ; 7.03607078236e-05 ] ************************************************************************************************ Pf estimation = 6.58328597209e-05 Pf Variance estimation = 1.1732789195e-11 CoV = 0.0520304896496 90% Confidence Interval = 1.12682866497e-05 CI at 90% =[ 6.01987163961e-05 ; 7.14670030458e-05 ] ************************************************************************************************ Pf estimation = 6.46450266495e-05 Pf Variance estimation = 1.08800612532e-11 CoV = 0.0510247107395 90% Confidence Interval = 1.08510789332e-05 CI at 90% =[ 5.92194871829e-05 ; 7.00705661161e-05 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_discontinuous_lsf.py000077500000000000000000000427571307543307100237350ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar try: # # Modele physique # inputFunction = Description(2) inputFunction[0] = "x1" inputFunction[1] = "x2" outputFunction = Description(1) outputFunction[0] = "g" formula = Description(outputFunction.getSize()) formula[0] = "if( x2 <= x1,-0.5+sqrt(x1-x2),-0.5 )" EtatLimite = Function(inputFunction, outputFunction, formula) dim = EtatLimite.getInputDimension() print(dim) # # Modele probabiliste # mean = Point(dim, 0.0) mean[0] = 15.0 mean[1] = 5.0 sigma = Point(dim, 0.0) sigma[0] = 2.5 sigma[1] = 0.5 R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() Covariance = myDistribution.getCovariance() # # Etat limite # vect = RandomVector(myDistribution) output = RandomVector(EtatLimite, vect) myEvent = Event(output, Less(), 0.0) # # Autres parametres # RandomGenerator.SetSeed(0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(1000 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(10000000) myMC.setBlockSize(10000) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(100000) myLHS.setBlockSize(100) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Directional Sampling CoV_DS = 0.1 myDS1 = DirectionalSampling(myEvent, RootStrategy( RiskyAndFast()), SamplingStrategy(RandomDirection())) myDS1.setMaximumOuterSampling(100000) myDS1.setBlockSize(1000) myDS1.setMaximumCoefficientOfVariation(CoV_DS) myDS1.run() myDS2 = DirectionalSampling(myEvent, RootStrategy( MediumSafe()), SamplingStrategy(RandomDirection())) myDS2.setMaximumOuterSampling(100000) myDS2.setBlockSize(1000) myDS2.setMaximumCoefficientOfVariation(CoV_DS) myDS2.run() myDS3 = DirectionalSampling(myEvent, RootStrategy( SafeAndSlow()), SamplingStrategy(RandomDirection())) myDS3.setMaximumOuterSampling(100000) myDS3.setBlockSize(1000) myDS3.setMaximumCoefficientOfVariation(CoV_DS) myDS3.run() # # Importance Sampling avec Standard Event meanSE = Point(dim, 0.0) for i in range(resultAR.getStandardSpaceDesignPoint().getDimension()): meanSE[i] = resultAR.getStandardSpaceDesignPoint()[i] sigmaSE = Point(dim, 1.0) CorrSE = IdentityMatrix(dim) myImportanceSE = Normal(meanSE, sigmaSE, CorrSE) myStandardEvent = StandardEvent(myEvent) # # # Resultats # # # FORM/SORM Cobyla PfC = resultC.getEventProbability() Beta_generalizedC = resultC.getGeneralisedReliabilityIndex() u_starC = resultC.getStandardSpaceDesignPoint() x_starC = resultC.getPhysicalSpaceDesignPoint() PtC = resultC.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC = resultC.getImportanceFactors() beta_hasoferC = resultC.getHasoferReliabilityIndex() SensitivityC = resultC.getEventProbabilitySensitivity() PFBreitC2 = resultC2.getEventProbabilityBreitung() BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung() PFHBC2 = resultC2.getEventProbabilityHohenBichler() BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtC2 = resultC2.getEventProbabilityTvedt() BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt() CurvC2 = resultC2.getSortedCurvatures() u_starC2 = resultC2.getStandardSpaceDesignPoint() x_starC2 = resultC2.getPhysicalSpaceDesignPoint() PtC2 = resultC2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC2 = resultC2.getImportanceFactors() beta_hasoferC2 = resultC2.getHasoferReliabilityIndex() # # FORM/SORM Abdo Rackwitz PfAR = resultAR.getEventProbability() Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex() u_starAR = resultAR.getStandardSpaceDesignPoint() x_starAR = resultAR.getPhysicalSpaceDesignPoint() PtAR = resultAR.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR = resultAR.getImportanceFactors() beta_hasoferAR = resultAR.getHasoferReliabilityIndex() SensitivityAR = resultAR.getEventProbabilitySensitivity() PFBreitAR2 = resultAR2.getEventProbabilityBreitung() BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung() PFHBAR2 = resultAR2.getEventProbabilityHohenBichler() BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtAR2 = resultAR2.getEventProbabilityTvedt() BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt() CurvAR2 = resultAR2.getSortedCurvatures() u_starAR2 = resultAR2.getStandardSpaceDesignPoint() x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint() PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR2 = resultAR2.getImportanceFactors() beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex() # # Monte Carlo ResultMC = myMC.getResult() PFMC = ResultMC.getProbabilityEstimate() CVMC = ResultMC.getCoefficientOfVariation() Variance_PF_MC = ResultMC.getVarianceEstimate() length90MC = ResultMC.getConfidenceLength(0.90) # # LHS ResultLHS = myLHS.getResult() PFLHS = ResultLHS.getProbabilityEstimate() CVLHS = ResultLHS.getCoefficientOfVariation() Variance_PF_LHS = ResultLHS.getVarianceEstimate() length90LHS = ResultLHS.getConfidenceLength(0.90) # # Directional Sampling ResultDS1 = myDS1.getResult() PFDS1 = ResultDS1.getProbabilityEstimate() CVDS1 = ResultDS1.getCoefficientOfVariation() Variance_PF_DS1 = ResultDS1.getVarianceEstimate() length90DS1 = ResultDS1.getConfidenceLength(0.90) ResultDS2 = myDS2.getResult() PFDS2 = ResultDS2.getProbabilityEstimate() CVDS2 = ResultDS2.getCoefficientOfVariation() Variance_PF_DS2 = ResultDS2.getVarianceEstimate() length90DS2 = ResultDS2.getConfidenceLength(0.90) ResultDS3 = myDS3.getResult() PFDS3 = ResultDS3.getProbabilityEstimate() CVDS3 = ResultDS3.getCoefficientOfVariation() Variance_PF_DS3 = ResultDS3.getVarianceEstimate() length90DS3 = ResultDS3.getConfidenceLength(0.90) # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_discontinuous_lsf.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_noisy_lsf.expout000066400000000000000000000176571307543307100230620ustar00rootroot000000000000006 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 0.00943254415626 generalized reliability index = 2.34818619143 ************************************************************************************************ standard space design point = -0.189252774875 standard space design point = -0.352285955875 standard space design point = -0.362847082371 standard space design point = -0.178977417898 standard space design point = 1.89047179088 standard space design point = 1.27140940247 ************************************************************************************************ physical space design point = 117.171463089 physical space design point = 115.281340449 physical space design point = 115.159957054 physical space design point = 117.291623145 physical space design point = 83.4211415565 physical space design point = 55.6468811603 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.0064956026787 importance factors = 0.0225074140553 importance factors = 0.0238771347804 importance factors = 0.00580940182459 importance factors = 0.648149727762 importance factors = 0.293160718899 ************************************************************************************************ Hasofer reliability index = 2.34818619143 ************************************************************************************************ Pf sensitivity = -0.0204450473518 Pf sensitivity = 0.00386928194378 Pf sensitivity = -0.000174488282495 Pf sensitivity = -0.0382648930129 Pf sensitivity = 0.0134801844115 Pf sensitivity = -0.000331926163106 Pf sensitivity = -0.0390038645807 Pf sensitivity = 0.0141524384643 Pf sensitivity = -0.000338692941354 Pf sensitivity = -0.0194588126474 Pf sensitivity = 0.00348268804298 Pf sensitivity = -0.000165901128534 Pf sensitivity = 0.0695364792203 Pf sensitivity = 0.131456752403 Pf sensitivity = 0.000833559430175 Pf sensitivity = 0.0465913570121 Pf sensitivity = 0.0592366893791 Pf sensitivity = 0.00083726807398 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 0.00943256502124 generalized reliability index = 2.34818536757 ************************************************************************************************ standard space design point = -0.174028239559 standard space design point = -0.347432887392 standard space design point = -0.347432887382 standard space design point = -0.1740282392 standard space design point = 1.90098167905 standard space design point = 1.26422003532 ************************************************************************************************ physical space design point = 117.349542814 physical space design point = 115.337161669 physical space design point = 115.337161669 physical space design point = 117.349542818 physical space design point = 83.6789171511 physical space design point = 55.5295615208 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.00549255859843 importance factors = 0.0218915794394 importance factors = 0.0218915794382 importance factors = 0.00549255857579 importance factors = 0.655376866663 importance factors = 0.289854857285 ************************************************************************************************ Hasofer reliability index = 2.34818536757 ************************************************************************************************ Pf sensitivity = -0.0188118412447 Pf sensitivity = 0.00327379161467 Pf sensitivity = -0.000160306046309 Pf sensitivity = -0.0375568401135 Pf sensitivity = 0.013048481402 Pf sensitivity = -0.000325626533288 Pf sensitivity = -0.0375568401296 Pf sensitivity = 0.0130484814072 Pf sensitivity = -0.000325626533427 Pf sensitivity = -0.0188118418726 Pf sensitivity = 0.00327379171719 Pf sensitivity = -0.000160306051654 Pf sensitivity = 0.0698598906619 Pf sensitivity = 0.132802372249 Pf sensitivity = 0.000834856533047 Pf sensitivity = 0.0464214712582 Pf sensitivity = 0.0586869540335 Pf sensitivity = 0.000835977630415 ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 0.00833333333333 Pf Variance estimation = 1.3912037037e-05 CoV = 0.447586118343 90% Confidence Interval = 0.0122702275022 CI at 90% =[ 0.00219821958225 ; 0.0144684470844 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 0.0110659898477 Pf Variance estimation = 1.22198947433e-06 CoV = 0.0998949341895 90% Confidence Interval = 0.00363656190556 CI at 90% =[ 0.00924770889493 ; 0.0128842708005 ] ************************************************************************************************ ************************************************************************************************ ******************************************* D S ************************************************ ************************************************************************************************ Pf estimation = 0.0101672062017 Pf Variance estimation = 1.03011177529e-06 CoV = 0.0998252816569 90% Confidence Interval = 0.00333886937188 CI at 90% =[ 0.00849777151574 ; 0.0118366408876 ] ************************************************************************************************ Pf estimation = 0.0111345335107 Pf Variance estimation = 1.23126272905e-06 CoV = 0.0996559744295 90% Confidence Interval = 0.00365033413092 CI at 90% =[ 0.00930936644524 ; 0.0129597005762 ] ************************************************************************************************ Pf estimation = 0.0119779874835 Pf Variance estimation = 1.43243731172e-06 CoV = 0.099920352506 90% Confidence Interval = 0.00393726879556 CI at 90% =[ 0.0100093530858 ; 0.0139466218813 ] ************************************************************************************************ ************************************************************************************************ ******************************************* I S ************************************************ ************************************************************************************************ Pf estimation = 0.0130919526774 Pf Variance estimation = 1.70126128276e-06 CoV = 0.0996279243713 90% Confidence Interval = 0.00429084435852 CI at 90% =[ 0.0109465304981 ; 0.0152373748567 ] ************************************************************************************************ Pf estimation = 0.0135908214915 Pf Variance estimation = 1.84511010445e-06 CoV = 0.0999460040718 90% Confidence Interval = 0.00446856825625 CI at 90% =[ 0.0113565373633 ; 0.0158251056196 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_noisy_lsf.py000077500000000000000000000413061307543307100221550ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # # Physical model # inputFunction = Description(6) inputFunction[0] = "X1" inputFunction[1] = "X2" inputFunction[2] = "X3" inputFunction[3] = "X4" inputFunction[4] = "X5" inputFunction[5] = "X6" outputFunction = Description(1) outputFunction[0] = "G" formulas = Description(outputFunction.getSize()) formulas[ 0] = "X1 + 2*X2 + 2*X3 + X4 - 5*X5 - 5*X6 +0.001*(sin(100*X1)+sin(100*X2)+sin(100*X3)+sin(100*X4)+sin(100*X5)+sin(100*X6))" EtatLimite = Function(inputFunction, outputFunction, formulas) d * dimim = EtatLimite.getInputDimension() print(dim) # # Probabilistic model # mean = Point(dim, 0.0) mean[0] = 120.0 mean[1] = 120.0 mean[2] = 120.0 mean[3] = 120.0 mean[4] = 50.0 mean[5] = 40.0 sigma = Point(dim, 0.0) sigma[0] = 12.0 sigma[1] = 12.0 sigma[2] = 12.0 sigma[3] = 12.0 sigma[4] = 15.0 sigma[5] = 12.0 BorneInf = 0.0 component = Description(1) aCollection = DistributionCollection() marginal = LogNormal(mean[0], sigma[0], BorneInf, LogNormal.MUSIGMA) marginal.setName("First") component[0] = "One" marginal.setDescription(component) # Fill the first marginal of aCollection aCollection.add(Distribution(marginal, "First")) # Create a second marginal : distribution 1D marginal = LogNormal(mean[1], sigma[1], BorneInf, LogNormal.MUSIGMA) marginal.setName("Second") component[0] = "Two" marginal.setDescription(component) # Fill the second marginal of aCollection aCollection.add(Distribution(marginal, "Second")) # Create a third marginal : distribution 1D marginal = LogNormal(mean[2], sigma[2], BorneInf, LogNormal.MUSIGMA) marginal.setName("Third") component[0] = "Three" marginal.setDescription(component) # Fill the third marginal of aCollection aCollection.add(Distribution(marginal, "Third")) # Create a forth marginal : distribution 1D marginal = LogNormal(mean[3], sigma[3], BorneInf, LogNormal.MUSIGMA) marginal.setName("Forth") component[0] = "Four" marginal.setDescription(component) # Fill the forth marginal of aCollection aCollection.add(Distribution(marginal, "Forth")) # Create a fifth marginal : distribution 1D marginal = LogNormal(mean[4], sigma[4], BorneInf, LogNormal.MUSIGMA) marginal.setName("Fifth") component[0] = "Five" marginal.setDescription(component) # Fill the fifth marginal of aCollection aCollection.add(Distribution(marginal, "Fifth")) # Create a sixth marginal : distribution 1D marginal = LogNormal(mean[5], sigma[5], BorneInf, LogNormal.MUSIGMA) marginal.setName("Sixth") component[0] = "Six" marginal.setDescription(component) # Fill the sixth marginal of aCollection aCollection.add(Distribution(marginal, "Sixth")) # Create a copula : IndependentCopula (pas de correlation aCopula = IndependentCopula(aCollection.getSize()) aCopula.setName("Independent copula") # Instanciate one distribution object myDistribution = ComposedDistribution(aCollection, aCopula) myDistribution.setName("myDist") start = myDistribution.getMean() Covariance = myDistribution.getCovariance() # # limit state # vect = RandomVector(myDistribution) output = RandomVector(EtatLimite, vect) myEvent = Event(output, Less(), 0.0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() parameters.setRhoBeg(0.1) myCobyla.setMaximumIterationNumber(1000 * dim) myCobyla.setMaximumAbsoluteError(1.0e-4) myCobyla.setMaximumRelativeError(1.0e-4) myCobyla.setMaximumResidualError(1.0e-4) myCobyla.setMaximumConstraintError(1.0e-4) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC.run() resultC = FORMResult(myAlgoC.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(1000 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-6) myAbdoRackwitz.setMaximumRelativeError(1.0e-6) myAbdoRackwitz.setMaximumResidualError(1.0e-6) myAbdoRackwitz.setMaximumConstraintError(1.0e-6) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() resultAR = FORMResult(myAlgoAR.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(1000) myMC.setBlockSize(100) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(1000) myLHS.setBlockSize(10) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Directional Sampling CoV_DS = 0.1 myDS1 = DirectionalSampling(myEvent, RootStrategy( RiskyAndFast()), SamplingStrategy(RandomDirection())) myDS1.setMaximumOuterSampling(1000) myDS1.setBlockSize(10) myDS1.setMaximumCoefficientOfVariation(CoV_DS) myDS1.run() myDS2 = DirectionalSampling(myEvent, RootStrategy( MediumSafe()), SamplingStrategy(RandomDirection())) myDS2.setMaximumOuterSampling(1000) myDS2.setBlockSize(10) myDS2.setMaximumCoefficientOfVariation(CoV_DS) myDS2.run() myDS3 = DirectionalSampling(myEvent, RootStrategy( SafeAndSlow()), SamplingStrategy(RandomDirection())) myDS3.setMaximumOuterSampling(1000) myDS3.setBlockSize(10) myDS3.setMaximumCoefficientOfVariation(CoV_DS) myDS3.run() # # Importance Sampling avec Standard Event meanSE = Point(dim, 0.0) for i in range(resultAR.getStandardSpaceDesignPoint().getDimension()): meanSE[i] = resultAR.getStandardSpaceDesignPoint()[i] sigmaSE = Point(dim, 1.0) CorrSE = IdentityMatrix(dim) myImportanceSE = Normal(meanSE, sigmaSE, CorrSE) myStandardEvent = StandardEvent(myEvent) myISS = ImportanceSampling(myStandardEvent, myImportanceSE) myISS.setMaximumOuterSampling(1000) myISS.setBlockSize(10) myISS.setMaximumCoefficientOfVariation(0.1) myISS.run() # Importance Sampling avec Event meanE = Point(dim, 0.0) for i in range(resultC.getPhysicalSpaceDesignPoint().getDimension()): meanE[i] = resultC.getPhysicalSpaceDesignPoint()[i] sigmaE = Point(dim, 0.0) for i in range(resultC.getPhysicalSpaceDesignPoint().getDimension()): sigmaE[i] = sqrt(Covariance[i, i]) CorrE = IdentityMatrix(dim) myImportanceE = Normal(meanE, sigmaE, CorrE) myIS = ImportanceSampling(myEvent, myImportanceE) myIS.setMaximumOuterSampling(1000) myIS.setBlockSize(10) myIS.setMaximumCoefficientOfVariation(0.1) myIS.run() # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_noisy_lsf.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_oblate.expout000066400000000000000000000234521307543307100223110ustar00rootroot0000000000000010 class=Point name=Unnamed dimension=1 values=[-16.7509] ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 0.000455586449898 generalized reliability index = 3.31660822337 ************************************************************************************************ standard space design point = 3.31660806393 standard space design point = 0.00102490981331 standard space design point = 4.2800666018e-05 standard space design point = 4.34337272867e-05 standard space design point = 2.69323332735e-05 standard space design point = 1.87922212154e-05 standard space design point = 4.66592814897e-05 standard space design point = 9.84035113373e-06 standard space design point = -7.60552214126e-06 standard space design point = 5.40261898638e-06 ************************************************************************************************ physical space design point = 3.31660806393 physical space design point = 0.00102490981331 physical space design point = 4.2800666018e-05 physical space design point = 4.34337272867e-05 physical space design point = 2.69323332735e-05 physical space design point = 1.87922212154e-05 physical space design point = 4.66592814897e-05 physical space design point = 9.84035113373e-06 physical space design point = -7.60552214126e-06 physical space design point = 5.40261898638e-06 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.999999903854 importance factors = 9.54955108798e-08 importance factors = 1.66537755714e-10 importance factors = 1.71500682972e-10 importance factors = 6.59416201864e-11 importance factors = 3.21046460252e-11 importance factors = 1.9791911809e-10 importance factors = 8.80304343848e-12 importance factors = 5.25859499295e-12 importance factors = 2.65350759194e-12 ************************************************************************************************ Hasofer reliability index = 3.31660822337 ************************************************************************************************ Pf sensitivity = 0.00163047543762 Pf sensitivity = 0.00540764798445 Pf sensitivity = 4.61867281092e-07 Pf sensitivity = 4.73372308838e-10 Pf sensitivity = 1.78040899658e-08 Pf sensitivity = 7.6202690838e-13 Pf sensitivity = 1.67768953686e-08 Pf sensitivity = 7.28683098157e-13 Pf sensitivity = 9.70946609316e-09 Pf sensitivity = 2.61498576728e-13 Pf sensitivity = 6.35142135184e-09 Pf sensitivity = 1.19357315076e-13 Pf sensitivity = 1.48423411411e-08 Pf sensitivity = 6.9253297327e-13 Pf sensitivity = 2.95632142937e-09 Pf sensitivity = 2.90912409292e-14 Pf sensitivity = -2.16464216696e-09 Pf sensitivity = 1.64632339287e-14 Pf sensitivity = 1.46078584523e-09 Pf sensitivity = 7.89206934249e-15 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 0.000455281387745 generalized reliability index = 3.31679538156 ************************************************************************************************ standard space design point = 3.31492186028 standard space design point = 0.111357486779 standard space design point = 0.00490904798976 standard space design point = 0.000272768700029 standard space design point = 1.85024051556e-05 standard space design point = 1.49314278675e-06 standard space design point = 1.40359232613e-07 standard space design point = 1.51449224191e-08 standard space design point = 1.8076197726e-09 standard space design point = 2.44272942243e-10 ************************************************************************************************ physical space design point = 3.31492186028 physical space design point = 0.111357486779 physical space design point = 0.00490904798976 physical space design point = 0.000272768700029 physical space design point = 1.85024051556e-05 physical space design point = 1.49314278675e-06 physical space design point = 1.40359232613e-07 physical space design point = 1.51449224191e-08 physical space design point = 1.8076197726e-09 physical space design point = 2.44272942243e-10 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.998870601334 importance factors = 0.00112720130156 importance factors = 2.19057030087e-06 importance factors = 6.7631918606e-09 importance factors = 3.11185257022e-11 importance factors = 2.0265873202e-13 importance factors = 1.79078979149e-15 importance factors = 2.08495534104e-17 importance factors = 2.97013893153e-19 importance factors = 5.4239216309e-21 ************************************************************************************************ Hasofer reliability index = 3.31679538156 ************************************************************************************************ Pf sensitivity = 0.00162869041553 Pf sensitivity = 0.00539898146207 Pf sensitivity = 5.01529062912e-05 Pf sensitivity = 5.58490159925e-06 Pf sensitivity = 2.04085362879e-06 Pf sensitivity = 1.00186484038e-08 Pf sensitivity = 1.05299059827e-07 Pf sensitivity = 2.87222876633e-11 Pf sensitivity = 6.6664515588e-09 Pf sensitivity = 1.23345387691e-13 Pf sensitivity = 5.04355637125e-10 Pf sensitivity = 7.53074981532e-16 Pf sensitivity = 4.4617737195e-11 Pf sensitivity = 6.26251135361e-18 Pf sensitivity = 4.56017755086e-12 Pf sensitivity = 6.90635352249e-20 Pf sensitivity = 5.28020558521e-13 Pf sensitivity = 9.5446040192e-22 Pf sensitivity = 7.20028034347e-14 Pf sensitivity = 1.75883366447e-23 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ No Convergence ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ No Convergence ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 0.0869565217391 Pf Variance estimation = 0.00172598011013 CoV = 0.477766542953 90% Confidence Interval = 0.136670614089 CI at 90% =[ 0.0186212146946 ; 0.155291828784 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 0.130434782609 Pf Variance estimation = 0.000170047301491 CoV = 0.0999750093711 90% Confidence Interval = 0.0428985017657 CI at 90% =[ 0.108985531726 ; 0.151884033492 ] ************************************************************************************************ ************************************************************************************************ ******************************************* D S ************************************************ ************************************************************************************************ Pf estimation = 0.134653829611 Pf Variance estimation = 0.0 CoV = 0.0 90% Confidence Interval = 0.0 CI at 90% =[ 0.134653829611 ; 0.134653829611 ] ************************************************************************************************ Pf estimation = 0.0791728932749 Pf Variance estimation = 0.0 CoV = 0.0 90% Confidence Interval = 0.0 CI at 90% =[ 0.0791728932749 ; 0.0791728932749 ] ************************************************************************************************ Pf estimation = 0.195745748137 Pf Variance estimation = 0.0 CoV = 0.0 90% Confidence Interval = 0.0 CI at 90% =[ 0.195745748137 ; 0.195745748137 ] ************************************************************************************************ ************************************************************************************************ ******************************************* I S ************************************************ ************************************************************************************************ Pf estimation = 4.54974078381e-05 Pf Variance estimation = 0.0 CoV = 0.0 90% Confidence Interval = 0.0 CI at 90% =[ 4.54974078381e-05 ; 4.54974078381e-05 ] ************************************************************************************************ Pf estimation = 0.0462666758447 Pf Variance estimation = 2.14052411107e-05 CoV = 0.0999981037276 90% Confidence Interval = 0.0152200932941 CI at 90% =[ 0.0386566291976 ; 0.0538767224917 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_oblate.py000077500000000000000000000452471307543307100214260ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # # Physical model # dim = 10 inputFunction = Description(dim) for i in range(dim): inputFunction[i] = "s0" + str(i + 1) outputFunction = Description(1) outputFunction[0] = "g" formulas = Description(outputFunction.getSize()) formulas[0] = "10.0 - (" for i in range(dim): formulas[0] = formulas[0] + inputFunction[i] + \ "^2 / (1.0 + 0.1 * (1.0 + " + str(i) + "))" if (i > 0): formulas[0] = formulas[0] + " + " limitState = Function(inputFunction, outputFunction, formulas) dim = limitState.getInputDimension() # # Probabilistic model # mean = Point(dim, 0.0) sigma = Point(dim, 1.0) R = CorrelationMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getSigma() # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(limitState, vect) myEvent = Event(output, Less(), 0.0) # # Calculs # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-4) myCobyla.setMaximumRelativeError(1.0e-4) myCobyla.setMaximumResidualError(1.0e-4) myCobyla.setMaximumConstraintError(1.0e-4) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() # myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) # resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100 * dim) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-4) myAbdoRackwitz.setMaximumRelativeError(1.0e-4) myAbdoRackwitz.setMaximumResidualError(1.0e-4) myAbdoRackwitz.setMaximumConstraintError(1.0e-4) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.5 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(1000000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(1000000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Directional Sampling CoV_DS = 0.1 myDS1 = DirectionalSampling(myEvent, RootStrategy( RiskyAndFast()), SamplingStrategy(RandomDirection())) myDS1.setMaximumOuterSampling(1000000) myDS1.setBlockSize(1) myDS1.setMaximumCoefficientOfVariation(CoV_DS) myDS1.run() myDS2 = DirectionalSampling(myEvent, RootStrategy( MediumSafe()), SamplingStrategy(RandomDirection())) myDS2.setMaximumOuterSampling(1000000) myDS2.setBlockSize(1) myDS2.setMaximumCoefficientOfVariation(CoV_DS) myDS2.run() myDS3 = DirectionalSampling(myEvent, RootStrategy( SafeAndSlow()), SamplingStrategy(RandomDirection())) myDS3.setMaximumOuterSampling(1000000) myDS3.setBlockSize(1) myDS3.setMaximumCoefficientOfVariation(CoV_DS) myDS3.run() # # Importance Sampling with Standard Event meanSE = Point(dim, 0.0) for i in range(resultAR.getStandardSpaceDesignPoint().getDimension()): meanSE[i] = resultAR.getStandardSpaceDesignPoint()[i] sigmaSE = Point(dim, 1.0) CorrSE = IdentityMatrix(dim) myImportanceSE = Normal(meanSE, sigmaSE, CorrSE) myStandardEvent = StandardEvent(myEvent) myISS = ImportanceSampling(myStandardEvent, myImportanceSE) myISS.setMaximumOuterSampling(1000000) myISS.setBlockSize(1) myISS.setMaximumCoefficientOfVariation(0.1) myISS.run() # Importance Sampling avec Event meanE = Point(dim, 0.0) for i in range(resultC.getPhysicalSpaceDesignPoint().getDimension()): meanE[i] = resultC.getPhysicalSpaceDesignPoint()[i] sigmaE = Point(dim, 0.0) for i in range(resultC.getPhysicalSpaceDesignPoint().getDimension()): sigmaE[i] = sqrt(Covariance[i, i]) CorrE = IdentityMatrix(dim) myImportanceE = Normal(meanE, sigmaE, CorrE) myIS = ImportanceSampling(myEvent, myImportanceE) myIS.setMaximumOuterSampling(1000000) myIS.setBlockSize(1) myIS.setMaximumCoefficientOfVariation(0.1) myIS.run() # # # Results # # # FORM/SORM Cobyla PfC = resultC.getEventProbability() Beta_generalizedC = resultC.getGeneralisedReliabilityIndex() u_starC = resultC.getStandardSpaceDesignPoint() x_starC = resultC.getPhysicalSpaceDesignPoint() PtC = resultC.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC = resultC.getImportanceFactors() beta_hasoferC = resultC.getHasoferReliabilityIndex() SensitivityC = resultC.getEventProbabilitySensitivity() # PFBreitC2 = resultC2.getEventProbabilityBreitung() # BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung() # PFHBC2=resultC2.getEventProbabilityHohenBichler() # BetaHBC2=resultC2.getGeneralisedReliabilityIndexHohenBichler() # PFTvedtC2 = resultC2.getEventProbabilityTvedt() # BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt() # CurvC2 = resultC2.getSortedCurvatures() # u_starC2 = resultC2.getStandardSpaceDesignPoint() # x_starC2 = resultC2.getPhysicalSpaceDesignPoint() # PtC2 = resultC2.getIsStandardPointOriginInFailureSpace() and "true" or "false" # gammaC2 = resultC2.getImportanceFactors() # beta_hasoferC2 = resultC2.getHasoferReliabilityIndex() # # FORM/SORM Abdo Rackwitz PfAR = resultAR.getEventProbability() Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex() u_starAR = resultAR.getStandardSpaceDesignPoint() x_starAR = resultAR.getPhysicalSpaceDesignPoint() PtAR = resultAR.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR = resultAR.getImportanceFactors() beta_hasoferAR = resultAR.getHasoferReliabilityIndex() SensitivityAR = resultAR.getEventProbabilitySensitivity() # PFBreitAR2 = resultAR2.getEventProbabilityBreitung() # BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung() # PFHBAR2=resultAR2.getEventProbabilityHohenBichler() # BetaHBAR2=resultAR2.getGeneralisedReliabilityIndexHohenBichler() # PFTvedtAR2 = resultAR2.getEventProbabilityTvedt() # BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt() # CurvAR2 = resultAR2.getSortedCurvatures() # u_starAR2 = resultAR2.getStandardSpaceDesignPoint() # x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint() # PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace() and "true" or "false" # gammaAR2 = resultAR2.getImportanceFactors() # beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex() # # Monte Carlo ResultMC = myMC.getResult() PFMC = ResultMC.getProbabilityEstimate() CVMC = ResultMC.getCoefficientOfVariation() Variance_PF_MC = ResultMC.getVarianceEstimate() length90MC = ResultMC.getConfidenceLength(0.90) # # LHS ResultLHS = myLHS.getResult() PFLHS = ResultLHS.getProbabilityEstimate() CVLHS = ResultLHS.getCoefficientOfVariation() Variance_PF_LHS = ResultLHS.getVarianceEstimate() length90LHS = ResultLHS.getConfidenceLength(0.90) # # Directional Sampling ResultDS1 = myDS1.getResult() PFDS1 = ResultDS1.getProbabilityEstimate() CVDS1 = ResultDS1.getCoefficientOfVariation() Variance_PF_DS1 = ResultDS1.getVarianceEstimate() length90DS1 = ResultDS1.getConfidenceLength(0.90) ResultDS2 = myDS2.getResult() PFDS2 = ResultDS2.getProbabilityEstimate() CVDS2 = ResultDS2.getCoefficientOfVariation() Variance_PF_DS2 = ResultDS2.getVarianceEstimate() length90DS2 = ResultDS2.getConfidenceLength(0.90) ResultDS3 = myDS3.getResult() PFDS3 = ResultDS3.getProbabilityEstimate() CVDS3 = ResultDS3.getCoefficientOfVariation() Variance_PF_DS3 = ResultDS3.getVarianceEstimate() length90DS3 = ResultDS3.getConfidenceLength(0.90) # # Importance Sampling ResultISS = myISS.getResult() PFISS = ResultISS.getProbabilityEstimate() CVISS = ResultISS.getCoefficientOfVariation() Variance_PF_ISS = ResultISS.getVarianceEstimate() length90ISS = ResultISS.getConfidenceLength(0.90) ResultIS = myIS.getResult() PFIS = ResultIS.getProbabilityEstimate() CVIS = ResultIS.getCoefficientOfVariation() Variance_PF_IS = ResultIS.getVarianceEstimate() length90IS = ResultIS.getConfidenceLength(0.90) # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_oblate.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_saddle.expout000066400000000000000000000163621307543307100223010ustar00rootroot00000000000000 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 7.15294e-03 generalized reliability index = 2.44949 ************************************************************************************************ standard space design point = 1.73205 standard space design point = 1.73205 ************************************************************************************************ physical space design point = 1.73205 physical space design point = 1.73205 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 2.44949 ************************************************************************************************ Pf sensitivity = 0.01404 Pf sensitivity = 0.02433 Pf sensitivity = 0.01404 Pf sensitivity = 0.02433 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 7.15294e-03 generalized reliability index = 2.44949 ************************************************************************************************ standard space design point = 1.73205 standard space design point = 1.73205 ************************************************************************************************ physical space design point = 1.73205 physical space design point = 1.73205 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 2.44949 ************************************************************************************************ Pf sensitivity = 0.01404 Pf sensitivity = 0.02433 Pf sensitivity = 0.01404 Pf sensitivity = 0.02433 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 5.05789e-03 Breitung generalized reliability index = 2.57185 HohenBichler event probability = 4.89696e-03 HohenBichler generalized reliability index = 2.58302 Tvedt event probability = 4.82446e-03 Tvedt generalized reliability index = 2.58816 ************************************************************************************************ sorted curvatures = 0.00000 sorted curvatures = 0.40825 ************************************************************************************************ standard space design point = 1.73205 standard space design point = 1.73205 ************************************************************************************************ physical space design point = 1.73205 physical space design point = 1.73205 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 2.44949 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 5.05789e-03 Breitung generalized reliability index = 2.57185 HohenBichler event probability = 4.89696e-03 HohenBichler generalized reliability index = 2.58302 Tvedt event probability = 4.82446e-03 Tvedt generalized reliability index = 2.58816 ************************************************************************************************ sorted curvatures = 0.00000 sorted curvatures = 0.40825 ************************************************************************************************ standard space design point = 1.73205 standard space design point = 1.73205 ************************************************************************************************ physical space design point = 1.73205 physical space design point = 1.73205 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 2.44949 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 7.00000e-03 Pf Variance estimation = 8.68875e-07 CoV = 0.13316 90% Confidence Interval = 3.06645e-03 CI at 90% =[ 5.46677e-03 ; 8.53323e-03 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 8.62500e-03 Pf Variance estimation = 1.06883e-06 CoV = 0.11987 90% Confidence Interval = 3.40103e-03 CI at 90% =[ 6.92448e-03 ; 1.03255e-02 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_saddle.py000077500000000000000000000365041307543307100214100ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() RandomGenerator.SetSeed(0) def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar try: # # Physical model # inputFunction = Description(2) inputFunction[0] = "u1" inputFunction[1] = "u2" outputFunction = Description(1) outputFunction[0] = "g" formulas = Description(outputFunction.getSize()) formulas[0] = "3.0 - u1 * u2" limitState = Function(inputFunction, outputFunction, formulas) dim = limitState.getInputDimension() # # Probabilistic model # mean = Point(dim, 0.0) sigma = Point(dim, 1.0) R = CorrelationMatrix(dim) myDistribution = Normal(mean, sigma, R) start = Point(dim, 1.0) # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(limitState, vect) myEvent = Event(output, Less(), 0.0) # # Computation # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.1 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(8000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(8000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Results # # # FORM/SORM Cobyla PfC = resultC.getEventProbability() Beta_generalizedC = resultC.getGeneralisedReliabilityIndex() u_starC = resultC.getStandardSpaceDesignPoint() x_starC = resultC.getPhysicalSpaceDesignPoint() PtC = resultC.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC = resultC.getImportanceFactors() beta_hasoferC = resultC.getHasoferReliabilityIndex() SensitivityC = resultC.getEventProbabilitySensitivity() PFBreitC2 = resultC2.getEventProbabilityBreitung() BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung() PFHBC2 = resultC2.getEventProbabilityHohenBichler() BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtC2 = resultC2.getEventProbabilityTvedt() BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt() CurvC2 = resultC2.getSortedCurvatures() u_starC2 = resultC2.getStandardSpaceDesignPoint() x_starC2 = resultC2.getPhysicalSpaceDesignPoint() PtC2 = resultC2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC2 = resultC2.getImportanceFactors() beta_hasoferC2 = resultC2.getHasoferReliabilityIndex() # # FORM/SORM Abdo Rackwitz PfAR = resultAR.getEventProbability() Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex() u_starAR = resultAR.getStandardSpaceDesignPoint() x_starAR = resultAR.getPhysicalSpaceDesignPoint() PtAR = resultAR.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR = resultAR.getImportanceFactors() beta_hasoferAR = resultAR.getHasoferReliabilityIndex() SensitivityAR = resultAR.getEventProbabilitySensitivity() PFBreitAR2 = resultAR2.getEventProbabilityBreitung() BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung() PFHBAR2 = resultAR2.getEventProbabilityHohenBichler() BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtAR2 = resultAR2.getEventProbabilityTvedt() BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt() CurvAR2 = resultAR2.getSortedCurvatures() u_starAR2 = resultAR2.getStandardSpaceDesignPoint() x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint() PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR2 = resultAR2.getImportanceFactors() beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex() # # Monte Carlo ResultMC = myMC.getResult() PFMC = ResultMC.getProbabilityEstimate() CVMC = ResultMC.getCoefficientOfVariation() Variance_PF_MC = ResultMC.getVarianceEstimate() length90MC = ResultMC.getConfidenceLength(0.90) # # LHS ResultLHS = myLHS.getResult() PFLHS = ResultLHS.getProbabilityEstimate() CVLHS = ResultLHS.getCoefficientOfVariation() Variance_PF_LHS = ResultLHS.getVarianceEstimate() length90LHS = ResultLHS.getConfidenceLength(0.90) # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_saddle.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Waarts_system_series.expout000066400000000000000000000163621307543307100237430ustar00rootroot00000000000000 ************************************************************************************************ ***************************************** FORM COBYLA ***************************************** ************************************************************************************************ event probability = 1.34990e-03 generalized reliability index = 3.00000 ************************************************************************************************ standard space design point = 2.12132 standard space design point = 2.12132 ************************************************************************************************ physical space design point = 2.12132 physical space design point = 2.12132 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 3.00000 ************************************************************************************************ Pf sensitivity = 0.00313 Pf sensitivity = 0.00665 Pf sensitivity = 0.00313 Pf sensitivity = 0.00665 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ************************************** FORM ABDO RACKWITZ ************************************** ************************************************************************************************ event probability = 1.34990e-03 generalized reliability index = 3.00000 ************************************************************************************************ standard space design point = 2.12132 standard space design point = 2.12132 ************************************************************************************************ physical space design point = 2.12132 physical space design point = 2.12132 ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 3.00000 ************************************************************************************************ Pf sensitivity = 0.00313 Pf sensitivity = 0.00665 Pf sensitivity = 0.00313 Pf sensitivity = 0.00665 Pf sensitivity = -0.00000 ************************************************************************************************ ************************************************************************************************ ***************************************** SORM COBYLA ***************************************** ************************************************************************************************ Breitung event probability = 9.10101e-04 Breitung generalized reliability index = 3.11810 HohenBichler event probability = 8.87546e-04 HohenBichler generalized reliability index = 3.12549 Tvedt event probability = 8.76979e-04 Tvedt generalized reliability index = 3.12901 ************************************************************************************************ sorted curvatures = 0.00000 sorted curvatures = 0.40000 ************************************************************************************************ standard space design point = 2.12132 standard space design point = 2.12132 ************************************************************************************************ physical space design point = 2.12132 physical space design point = 2.12132 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 3.00000 ************************************************************************************************ ************************************************************************************************ ************************************** SORM ABDO RACKWITZ ************************************** ************************************************************************************************ Breitung event probability = 9.10101e-04 Breitung generalized reliability index = 3.11810 HohenBichler event probability = 8.87546e-04 HohenBichler generalized reliability index = 3.12549 Tvedt event probability = 8.76979e-04 Tvedt generalized reliability index = 3.12901 ************************************************************************************************ sorted curvatures = 0.00000 sorted curvatures = 0.40000 ************************************************************************************************ standard space design point = 2.12132 standard space design point = 2.12132 ************************************************************************************************ physical space design point = 2.12132 physical space design point = 2.12132 ************************************************************************************************ ************************************************************************************************ is standard point origin in failure space? false ************************************************************************************************ importance factors = 0.50000 importance factors = 0.50000 ************************************************************************************************ Hasofer reliability index = 3.00000 ************************************************************************************************ ************************************************************************************************ **************************************** MONTE CARLO ******************************************* ************************************************************************************************ Pf estimation = 2.36144e-03 Pf Variance estimation = 5.56324e-08 CoV = 0.09988 90% Confidence Interval = 7.75928e-04 CI at 90% =[ 1.97348e-03 ; 2.74941e-03 ] ************************************************************************************************ ************************************************************************************************ ******************************************* L H S ********************************************** ************************************************************************************************ Pf estimation = 2.43540e-03 Pf Variance estimation = 5.91673e-08 CoV = 0.09988 90% Confidence Interval = 8.00199e-04 CI at 90% =[ 2.03530e-03 ; 2.83550e-03 ] ************************************************************************************************ openturns-1.9/python/test/t_Waarts_system_series.py000077500000000000000000000376161307543307100230570ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * from math import * TESTPREAMBLE() def cleanScalar(inScalar): if (fabs(inScalar) < 1.e-10): inScalar = 0.0 return inScalar # # initialize the random generator # RandomGenerator.SetSeed(0) try: # # Physical model # inputFunction = Description(2) inputFunction[0] = "u1" inputFunction[1] = "u2" outputFunction = Description(1) outputFunction[0] = "g" formulas = Description(outputFunction.getSize()) formulas[ 0] = "min(0.1 * (u1 - u2)^2.0 - (u1 + u2) / sqrt(2.0) + 3.0, 0.1 * (u1 - u2)^2.0 + (u1 + u2) / sqrt(2.0) + 3.0, u1 - u2 + 3.5 * sqrt(2.0), -u1 + u2 + 3.5 * sqrt(2.0))" limitState = Function(inputFunction, outputFunction, formulas) limitState.setGradient(CenteredFiniteDifferenceGradient(ResourceMap.GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon"), limitState.getEvaluation())) limitState.setHessian(CenteredFiniteDifferenceHessian(ResourceMap.GetAsScalar( "CenteredFiniteDifferenceHessian-DefaultEpsilon"), limitState.getEvaluation())) dim = limitState.getInputDimension() # # Probabilistic model # mean = Point(dim, 0.0) sigma = Point(dim, 1.0) R = IdentityMatrix(dim) myDistribution = Normal(mean, sigma, R) start = myDistribution.getMean() # # Limit state # vect = RandomVector(myDistribution) output = RandomVector(limitState, vect) myEvent = Event(output, Less(), 0.0) # # Computation # # # FORM/SORM Cobyla myCobyla = Cobyla() myCobyla.setMaximumIterationNumber(100 * dim) myCobyla.setMaximumAbsoluteError(1.0e-10) myCobyla.setMaximumRelativeError(1.0e-10) myCobyla.setMaximumResidualError(1.0e-10) myCobyla.setMaximumConstraintError(1.0e-10) myAlgoC = FORM(myCobyla, myEvent, start) myAlgoC2 = SORM(myCobyla, myEvent, start) myAlgoC.run() myAlgoC2.run() resultC = FORMResult(myAlgoC.getResult()) resultC2 = SORMResult(myAlgoC2.getResult()) # # FORM/SORM Abdo Rackwitz myAbdoRackwitz = AbdoRackwitz() myAbdoRackwitz.setMaximumIterationNumber(100) myAbdoRackwitz.setMaximumAbsoluteError(1.0e-10) myAbdoRackwitz.setMaximumRelativeError(1.0e-10) myAbdoRackwitz.setMaximumResidualError(1.0e-10) myAbdoRackwitz.setMaximumConstraintError(1.0e-10) myAlgoAR = FORM(myAbdoRackwitz, myEvent, start + Point(2, 1)) myAlgoAR2 = SORM(myAbdoRackwitz, myEvent, start + Point(2, 1)) myAlgoAR.run() myAlgoAR2.run() resultAR = FORMResult(myAlgoAR.getResult()) resultAR2 = SORMResult(myAlgoAR2.getResult()) # # Monte Carlo CoV_MC = 0.1 myMC = MonteCarlo(myEvent) myMC.setMaximumOuterSampling(1000000) myMC.setBlockSize(1) myMC.setMaximumCoefficientOfVariation(CoV_MC) myMC.run() # # LHS CoV_LHS = 0.1 myLHS = LHS(myEvent) myLHS.setMaximumOuterSampling(1000000) myLHS.setBlockSize(1) myLHS.setMaximumCoefficientOfVariation(CoV_LHS) myLHS.run() # # Results # # # FORM/SORM Cobyla PfC = resultC.getEventProbability() Beta_generalizedC = resultC.getGeneralisedReliabilityIndex() u_starC = resultC.getStandardSpaceDesignPoint() x_starC = resultC.getPhysicalSpaceDesignPoint() PtC = resultC.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC = resultC.getImportanceFactors() beta_hasoferC = resultC.getHasoferReliabilityIndex() SensitivityC = resultC.getEventProbabilitySensitivity() PFBreitC2 = resultC2.getEventProbabilityBreitung() BetaBreitC2 = resultC2.getGeneralisedReliabilityIndexBreitung() PFHBC2 = resultC2.getEventProbabilityHohenBichler() BetaHBC2 = resultC2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtC2 = resultC2.getEventProbabilityTvedt() BetaTvedtC2 = resultC2.getGeneralisedReliabilityIndexTvedt() CurvC2 = resultC2.getSortedCurvatures() u_starC2 = resultC2.getStandardSpaceDesignPoint() x_starC2 = resultC2.getPhysicalSpaceDesignPoint() PtC2 = resultC2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaC2 = resultC2.getImportanceFactors() beta_hasoferC2 = resultC2.getHasoferReliabilityIndex() # # FORM/SORM Abdo Rackwitz PfAR = resultAR.getEventProbability() Beta_generalizedAR = resultAR.getGeneralisedReliabilityIndex() u_starAR = resultAR.getStandardSpaceDesignPoint() x_starAR = resultAR.getPhysicalSpaceDesignPoint() PtAR = resultAR.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR = resultAR.getImportanceFactors() beta_hasoferAR = resultAR.getHasoferReliabilityIndex() SensitivityAR = resultAR.getEventProbabilitySensitivity() PFBreitAR2 = resultAR2.getEventProbabilityBreitung() BetaBreitAR2 = resultAR2.getGeneralisedReliabilityIndexBreitung() PFHBAR2 = resultAR2.getEventProbabilityHohenBichler() BetaHBAR2 = resultAR2.getGeneralisedReliabilityIndexHohenBichler() PFTvedtAR2 = resultAR2.getEventProbabilityTvedt() BetaTvedtAR2 = resultAR2.getGeneralisedReliabilityIndexTvedt() CurvAR2 = resultAR2.getSortedCurvatures() u_starAR2 = resultAR2.getStandardSpaceDesignPoint() x_starAR2 = resultAR2.getPhysicalSpaceDesignPoint() PtAR2 = resultAR2.getIsStandardPointOriginInFailureSpace( ) and "true" or "false" gammaAR2 = resultAR2.getImportanceFactors() beta_hasoferAR2 = resultAR2.getHasoferReliabilityIndex() # # Monte Carlo ResultMC = myMC.getResult() PFMC = ResultMC.getProbabilityEstimate() CVMC = ResultMC.getCoefficientOfVariation() Variance_PF_MC = ResultMC.getVarianceEstimate() length90MC = ResultMC.getConfidenceLength(0.90) # # LHS ResultLHS = myLHS.getResult() PFLHS = ResultLHS.getProbabilityEstimate() CVLHS = ResultLHS.getCoefficientOfVariation() Variance_PF_LHS = ResultLHS.getVarianceEstimate() length90LHS = ResultLHS.getConfidenceLength(0.90) # # # Outputs # print("") print("") print( "************************************************************************************************") print( "***************************************** FORM COBYLA *****************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfC) print("generalized reliability index = %.5f" % Beta_generalizedC) print( "************************************************************************************************") for i in range(u_starC.getDimension()): print("standard space design point = %.5f" % u_starC[i]) print( "************************************************************************************************") for i in range(x_starC.getDimension()): print("physical space design point = %.5f" % x_starC[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC) print( "************************************************************************************************") for i in range(gammaC.getDimension()): print("importance factors = %.5f" % gammaC[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC) print( "************************************************************************************************") for i in range(SensitivityC.getSize()): for j in range(SensitivityC[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityC[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** FORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("event probability = %.5e" % PfAR) print("generalized reliability index = %.5f" % Beta_generalizedAR) print( "************************************************************************************************") for i in range(u_starAR.getDimension()): print("standard space design point = %.5f" % u_starAR[i]) print( "************************************************************************************************") for i in range(x_starAR.getDimension()): print("physical space design point = %.5f" % x_starAR[i]) print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR) print( "************************************************************************************************") for i in range(gammaAR.getDimension()): print("importance factors = %.5f" % gammaAR[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR) print( "************************************************************************************************") for i in range(SensitivityAR.getSize()): for j in range(SensitivityAR[i].getDimension()): print("Pf sensitivity = %.5f" % SensitivityAR[i][j]) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "***************************************** SORM COBYLA *****************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitC2) print("Breitung generalized reliability index = %.5f" % BetaBreitC2) print("HohenBichler event probability = %.5e" % PFHBC2) print("HohenBichler generalized reliability index = %.5f" % BetaHBC2) print("Tvedt event probability = %.5e" % PFTvedtC2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtC2) print( "************************************************************************************************") for i in range(CurvC2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvC2[i])) print( "************************************************************************************************") for i in range(u_starC2.getDimension()): print("standard space design point = %.5f" % u_starC2[i]) print( "************************************************************************************************") for i in range(x_starC2.getDimension()): print("physical space design point = %.5f" % x_starC2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtC2) print( "************************************************************************************************") for i in range(gammaC2.getDimension()): print("importance factors = %.5f" % gammaC2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferC2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "************************************** SORM ABDO RACKWITZ **************************************") print( "************************************************************************************************") print("Breitung event probability = %.5e" % PFBreitAR2) print("Breitung generalized reliability index = %.5f" % BetaBreitAR2) print("HohenBichler event probability = %.5e" % PFHBAR2) print("HohenBichler generalized reliability index = %.5f" % BetaHBAR2) print("Tvedt event probability = %.5e" % PFTvedtAR2) print("Tvedt generalized reliability index = %.5f" % BetaTvedtAR2) print( "************************************************************************************************") for i in range(CurvAR2.getDimension()): print("sorted curvatures = %.5f" % cleanScalar(CurvAR2[i])) print( "************************************************************************************************") for i in range(u_starAR2.getDimension()): print("standard space design point = %.5f" % u_starAR2[i]) print( "************************************************************************************************") for i in range(x_starAR2.getDimension()): print("physical space design point = %.5f" % x_starAR2[i]) print( "************************************************************************************************") print( "************************************************************************************************") print("is standard point origin in failure space? ", PtAR2) print( "************************************************************************************************") for i in range(gammaAR2.getDimension()): print("importance factors = %.5f" % gammaAR2[i]) print( "************************************************************************************************") print("Hasofer reliability index = %.5f" % beta_hasoferAR2) print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "**************************************** MONTE CARLO *******************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFMC) print("Pf Variance estimation = %.5e" % Variance_PF_MC) print("CoV = %.5f" % CVMC) print("90% Confidence Interval =", "%.5e" % length90MC) print("CI at 90% =[", "%.5e" % (PFMC - 0.5 * length90MC), "; %.5e" % (PFMC + 0.5 * length90MC), "]") print( "************************************************************************************************") print("") print( "************************************************************************************************") print( "******************************************* L H S **********************************************") print( "************************************************************************************************") print("Pf estimation = %.5e" % PFLHS) print("Pf Variance estimation = %.5e" % Variance_PF_LHS) print("CoV = %.5f" % CVLHS) print("90% Confidence Interval =", "%.5e" % length90LHS) print("CI at 90% =[", "%.5e" % (PFLHS - 0.5 * length90LHS), "; %.5e" % (PFLHS + 0.5 * length90LHS), "]") print( "************************************************************************************************") print("") except: import sys print("t_Waarts_system_series.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_WeibullFactory_std.expout000066400000000000000000000013351307543307100233230ustar00rootroot00000000000000distribution= class=Weibull name=Weibull dimension=1 alpha=1 beta=2.5 gamma=-1 Estimated distribution= class=Weibull name=Weibull dimension=1 alpha=0.971656 beta=2.39412 gamma=-0.969546 Default distribution= Weibull(alpha = 1, beta = 1, gamma = 0) Distribution from parameters= Weibull(alpha = 1, beta = 2.5, gamma = -1) Estimated weibull= Weibull(alpha = 0.971656, beta = 2.39412, gamma = -0.969546) Default weibull= Weibull(alpha = 1, beta = 1, gamma = 0) Weibull from parameters= Weibull(alpha = 1, beta = 2.5, gamma = -1) Estimated distribution= class=Weibull name=Weibull dimension=1 alpha=4.93038e-30 beta=1 gamma=2.22045e-16 Estimated distribution= class=Weibull name=Weibull dimension=1 alpha=2.22022e-14 beta=1 gamma=0.9999 openturns-1.9/python/test/t_WeibullFactory_std.py000077500000000000000000000025761307543307100224420ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: distribution = Weibull(1.0, 2.5, -1.0) size = 10000 sample = distribution.getSample(size) factory = WeibullFactory() estimatedDistribution = factory.build(sample) print("distribution=", repr(distribution)) print("Estimated distribution=", repr(estimatedDistribution)) estimatedDistribution = factory.build() print("Default distribution=", estimatedDistribution) estimatedDistribution = factory.build( distribution.getParameter()) print("Distribution from parameters=", estimatedDistribution) estimatedWeibull = factory.buildAsWeibull(sample) print("Estimated weibull=", estimatedWeibull) estimatedWeibull = factory.buildAsWeibull() print("Default weibull=", estimatedWeibull) estimatedWeibull = factory.buildAsWeibull( distribution.getParameter()) print("Weibull from parameters=", estimatedWeibull) sample = [[0.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) sample = [[1.0]] * size estimatedDistribution = factory.build(sample) print("Estimated distribution=", repr(estimatedDistribution)) except: import sys print("t_WeibullFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Weibull_std.expout000066400000000000000000000053231307543307100217740ustar00rootroot00000000000000Distribution class=Weibull name=Weibull dimension=1 alpha=2 beta=1.5 gamma=-0.5 Distribution Weibull(alpha = 2, beta = 1.5, gamma = -0.5) Elliptical = False Continuous = True oneRealization= class=Point name=Unnamed dimension=1 values=[1.49188] oneSample first= class=Point name=Unnamed dimension=1 values=[2.82534] last= class=Point name=Unnamed dimension=1 values=[0.847293] mean= class=Point name=Unnamed dimension=1 values=[1.32223] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.52908] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[1] ddf = class=Point name=Unnamed dimension=1 values=[-0.107263] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.107263] log pdf=-1.081042 pdf =0.339242 pdf (FD)=0.339242 cdf=0.477703 pdf gradient = class=Point name=Unnamed dimension=3 values=[-0.0891733,0.191956,0.107263] pdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[-0.0891733,0.191956,0.107263] cdf gradient = class=Point name=Unnamed dimension=3 values=[-0.254431,-0.0975938,-0.339242] cdf gradient (FD)= class=Point name=Unnamed dimension=3 values=[-0.254431,-0.0975938,-0.339242] quantile= class=Point name=Unnamed dimension=1 values=[3.65622] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[-0.223897] Survival(inverseSurvival)=0.950000 Minimum volume interval= [-0.489737, 3.66304] threshold= [0.95] Minimum volume level set= {x | f(x) <= 2.92424} with f= MinimumVolumeLevelSetEvaluation(Weibull(alpha = 2, beta = 1.5, gamma = -0.5)) beta= [0.0537054] Bilateral confidence interval= [-0.327556, 4.27485] beta= [0.95] Unilateral confidence interval (lower tail)= [-0.5, 3.65622] beta= [0.95] Unilateral confidence interval (upper tail)= [-0.223897, 19.7578] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[1.30549] standard deviation= class=Point name=Unnamed dimension=1 values=[1.22587] skewness= class=Point name=Unnamed dimension=1 values=[1.07199] kurtosis= class=Point name=Unnamed dimension=1 values=[4.3904] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1.50276] parameters= [class=PointWithDescription name=X0 dimension=3 description=[alpha,beta,gamma] values=[2,1.5,-0.5]] standard moment n= 0 value= [1] standard moment n= 1 value= [0.902745] standard moment n= 2 value= [1.19064] standard moment n= 3 value= [2] standard moment n= 4 value= [4.0122] standard moment n= 5 value= [9.26053] Standard representative= Weibull(alpha = 1, beta = 1.5, gamma = 0) openturns-1.9/python/test/t_Weibull_std.py000077500000000000000000000150101307543307100210750ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = Weibull(2.0, 1.5, -0.5) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print( "Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 1.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF( point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique PDFgrFD = Point(3) PDFgrFD[0] = (Weibull(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computePDF(point) - Weibull(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[1] = (Weibull(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computePDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computePDF(point)) / (2.0 * eps) PDFgrFD[2] = (Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computePDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computePDF(point)) / (2.0 * eps) print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) CDFgrFD = Point(3) CDFgrFD[0] = (Weibull(distribution.getAlpha() + eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point) - Weibull(distribution.getAlpha() - eps, distribution.getBeta(), distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[1] = (Weibull(distribution.getAlpha(), distribution.getBeta() + eps, distribution.getGamma()).computeCDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta() - eps, distribution.getGamma()).computeCDF(point)) / (2.0 * eps) CDFgrFD[2] = (Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() + eps).computeCDF(point) - Weibull(distribution.getAlpha(), distribution.getBeta(), distribution.getGamma() - eps).computeCDF(point)) / (2.0 * eps) print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold( 0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_Weibull_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_WelchFactory_std.expout000066400000000000000000000104361307543307100227640ustar00rootroot00000000000000Spectre 0 - 0 Frequency = 0.078125 , evaluation = 7.22072557 model = 6.44663683 Frequency = 0.234375 , evaluation = 2.73055725 model = 2.52476300 Frequency = 0.390625 , evaluation = 1.17632172 model = 1.13896376 Frequency = 0.546875 , evaluation = 0.67666135 model = 0.62466328 Frequency = 0.703125 , evaluation = 0.43220716 model = 0.38991051 Frequency = 0.859375 , evaluation = 0.23431758 model = 0.26528881 Frequency = 1.015625 , evaluation = 0.17972130 model = 0.19174648 Frequency = 1.171875 , evaluation = 0.13744372 model = 0.14488723 Frequency = 1.328125 , evaluation = 0.11388777 model = 0.11325571 Frequency = 1.484375 , evaluation = 0.09216205 model = 0.09092404 Frequency = 1.640625 , evaluation = 0.06552918 model = 0.07458366 Frequency = 1.796875 , evaluation = 0.06496619 model = 0.06227313 Frequency = 1.953125 , evaluation = 0.05320855 model = 0.05277107 Frequency = 2.109375 , evaluation = 0.04438331 model = 0.04528530 Frequency = 2.265625 , evaluation = 0.03668859 model = 0.03928406 Frequency = 2.421875 , evaluation = 0.03780654 model = 0.03439975 Frequency = 2.578125 , evaluation = 0.03365413 model = 0.03037179 Frequency = 2.734375 , evaluation = 0.02906321 model = 0.02701129 Frequency = 2.890625 , evaluation = 0.02789249 model = 0.02417866 Frequency = 3.046875 , evaluation = 0.02118695 model = 0.02176896 Frequency = 3.203125 , evaluation = 0.01811007 model = 0.01970206 Frequency = 3.359375 , evaluation = 0.01802368 model = 0.01791594 Frequency = 3.515625 , evaluation = 0.01679746 model = 0.01636199 Frequency = 3.671875 , evaluation = 0.01466807 model = 0.01500166 Frequency = 3.828125 , evaluation = 0.01417864 model = 0.01380410 Frequency = 3.984375 , evaluation = 0.01338177 model = 0.01274434 Frequency = 4.140625 , evaluation = 0.01001630 model = 0.01180205 Frequency = 4.296875 , evaluation = 0.00921753 model = 0.01096048 Frequency = 4.453125 , evaluation = 0.00909719 model = 0.01020578 Frequency = 4.609375 , evaluation = 0.00861848 model = 0.00952640 Frequency = 4.765625 , evaluation = 0.00894934 model = 0.00891264 Frequency = 4.921875 , evaluation = 0.00940174 model = 0.00835632 Spectre 0 - 0 Frequency = 0.078125 , evaluation = 9.22383273 model = 6.44663683 Frequency = 0.234375 , evaluation = 1.27340967 model = 2.52476300 Frequency = 0.390625 , evaluation = 0.70527709 model = 1.13896376 Frequency = 0.546875 , evaluation = 1.00013721 model = 0.62466328 Frequency = 0.703125 , evaluation = 0.31148959 model = 0.38991051 Frequency = 0.859375 , evaluation = 0.23859253 model = 0.26528881 Frequency = 1.015625 , evaluation = 0.08354953 model = 0.19174648 Frequency = 1.171875 , evaluation = 0.13806896 model = 0.14488723 Frequency = 1.328125 , evaluation = 0.08659210 model = 0.11325571 Frequency = 1.484375 , evaluation = 0.04943012 model = 0.09092404 Frequency = 1.640625 , evaluation = 0.02398314 model = 0.07458366 Frequency = 1.796875 , evaluation = 0.00755319 model = 0.06227313 Frequency = 1.953125 , evaluation = 0.01841253 model = 0.05277107 Frequency = 2.109375 , evaluation = 0.04455976 model = 0.04528530 Frequency = 2.265625 , evaluation = 0.00997343 model = 0.03928406 Frequency = 2.421875 , evaluation = 0.03889101 model = 0.03439975 Frequency = 2.578125 , evaluation = 0.02286161 model = 0.03037179 Frequency = 2.734375 , evaluation = 0.00183134 model = 0.02701129 Frequency = 2.890625 , evaluation = 0.00755024 model = 0.02417866 Frequency = 3.046875 , evaluation = 0.02071916 model = 0.02176896 Frequency = 3.203125 , evaluation = 0.01670411 model = 0.01970206 Frequency = 3.359375 , evaluation = 0.04123525 model = 0.01791594 Frequency = 3.515625 , evaluation = 0.01367570 model = 0.01636199 Frequency = 3.671875 , evaluation = 0.02229660 model = 0.01500166 Frequency = 3.828125 , evaluation = 0.01733352 model = 0.01380410 Frequency = 3.984375 , evaluation = 0.00557949 model = 0.01274434 Frequency = 4.140625 , evaluation = 0.00396908 model = 0.01180205 Frequency = 4.296875 , evaluation = 0.00799104 model = 0.01096048 Frequency = 4.453125 , evaluation = 0.02438903 model = 0.01020578 Frequency = 4.609375 , evaluation = 0.02777117 model = 0.00952640 Frequency = 4.765625 , evaluation = 0.00349674 model = 0.00891264 Frequency = 4.921875 , evaluation = 0.01122435 model = 0.00835632 openturns-1.9/python/test/t_WelchFactory_std.py000077500000000000000000000046351307543307100220770ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Dimension of the input model # Size of the TimeGrid size = 64 dimension = 1 timeGrid = RegularGrid(0.0, 0.1, size) amplitude = Point(dimension, 2.0) scale = Point(dimension, 1.0) model = ExponentialCauchy(scale, amplitude) myProcess = SpectralGaussianProcess(model, timeGrid) # Create a Process sample N = 100 sample = ProcessSample(myProcess.getSample(N)) # Filtering Windows myFactory = WelchFactory() # Build a UserDefinedSpectralModel using the Wellch method mySpectralModel = myFactory.buildAsUserDefinedSpectralModel(sample) # Get the frequency grid of the model myFrequencyGrid = mySpectralModel.getFrequencyGrid() for i in range(dimension): for j in range(dimension): print("Spectre ", i, "-", j) for k in range(myFrequencyGrid.getN()): frequency = myFrequencyGrid.getStart( ) + k * myFrequencyGrid.getStep() estimatedValue = ( mySpectralModel(frequency)[i, j]).real modelValue = ( model.computeSpectralDensity(frequency)[i, j]).real print("Frequency = %.6f" % frequency, ", evaluation = %.8f" % estimatedValue, " model = %.8f" % modelValue) # Create a Time Series timeSeries = myProcess.getRealization() # Build a UserDefinedSpectralModel using the Wellch method mySpectralModel2 = myFactory.buildAsUserDefinedSpectralModel(timeSeries) # Get the frequency grid of the model myFrequencyGrid = mySpectralModel2.getFrequencyGrid() for i in range(dimension): for j in range(dimension): print("Spectre ", i, "-", j) for k in range(myFrequencyGrid.getN()): frequency = myFrequencyGrid.getStart( ) + k * myFrequencyGrid.getStep() estimatedValue = ( mySpectralModel2(frequency)[i, j]).real modelValue = ( model.computeSpectralDensity(frequency)[i, j]).real print("Frequency = %.6f" % frequency, ", evaluation = %.8f" % estimatedValue, " model = %.8f" % modelValue) except: import sys print("t_WelchFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_WhiteNoise_std.expout000066400000000000000000000007161307543307100224500ustar00rootroot00000000000000dist = Uniform(a = -1, b = 1) process = WhiteNoise(Uniform(a = -1, b = 1)) timeSerie = [ t X0 ] 0 : [ 0 0.259753 ] 1 : [ 1 0.76561 ] 2 : [ 2 -0.729447 ] 3 : [ 3 -0.934994 ] 4 : [ 4 -0.305886 ] 5 : [ 5 0.938846 ] 6 : [ 6 0.841359 ] 7 : [ 7 0.0060803 ] 8 : [ 8 -0.873588 ] 9 : [ 9 -0.414486 ] 10 : [ 10 0.428764 ] openturns-1.9/python/test/t_WhiteNoise_std.py000077500000000000000000000014121307543307100215510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Tmin , time step and step number for TimeGrid Tmin = 0.0 deltaT = 1.0 N = 11 timeGrid = RegularGrid(Tmin, deltaT, N) # Fixing the distribution for the WhiteNoise dist = Distribution(Uniform()) print("dist = ", dist) # Building a process from a White Noise process = Process(WhiteNoise(dist)) # print the process process.setTimeGrid(timeGrid) print("process = ", process) # Get a realization of the process timeSerie = process.getRealization() print("timeSerie = ", timeSerie) except: import sys print("t_WhiteNoise_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_WhittleFactory_std.expout000066400000000000000000000012721307543307100233400ustar00rootroot00000000000000myARMA process= ARMA(X_{0,t} + 0.8 X_{0,t-1} = E_{0,t} + 0.5 E_{0,t-1}, E_t ~ Normal(mu = 0, sigma = 0.05)) factory= class= WhittleFactory p = [1] q = [1] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 factory as an ARMA factory= class=ARMAFactory implementation=class= WhittleFactory p = [1] q = [1] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 factory= class= WhittleFactory p = [0,1] q = [0,1] spectralModelFactory = class=WelchFactory window = class=FilteringWindows implementation=class=Hamming blockNumber = 1 overlap = 0 openturns-1.9/python/test/t_WhittleFactory_std.py000077500000000000000000000044061307543307100224510ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Reduce the precision output as the estimation is based on a lazy # optimizer PlatformInfo.SetNumericalPrecision(4) # ARMA(p, q) p = 1 q = 1 # ARMACoefficients intializing arCoefficients = Point(p, 0.80) maCoefficients = Point(q, 0.50) # ARMA creation myARMA = ARMA(ARMACoefficients(arCoefficients), ARMACoefficients(maCoefficients), WhiteNoise(Normal(0.0, 0.05))) myARMA.setTimeGrid(RegularGrid(0.0, 0.1, 256)) print("myARMA process=", myARMA) # Create a realization timeSeries = myARMA.getRealization() # Create a sample sample = myARMA.getSample(100) # First, build an ARMA based on a given order using the WhittleFactory factory = WhittleFactory(p, q) # factory.setVerbose(False) print("factory=", factory) print("factory as an ARMA factory=", ARMAFactory(factory)) informationCriteria = Point() result = factory.build(TimeSeries(timeSeries), informationCriteria) # print "Estimated ARMA=", result # print "Information criteria=", informationCriteria result2 = factory.build(sample, informationCriteria) # print "Estimated ARMA=", result2 # print "Information criteria=", informationCriteria # Second, build the best ARMA based on a given range of order using the # WhittleFactory pIndices = Indices(p + 1) pIndices.fill() qIndices = Indices(q + 1) qIndices.fill() factory = WhittleFactory(pIndices, qIndices) print("factory=", factory) informationCriteria = Point() result = factory.build(TimeSeries(timeSeries), informationCriteria) # print "Estimated ARMA=", result # print "Information criteria=", informationCriteria # print "History=", factory.getHistory() result2 = factory.build(sample, informationCriteria) # print "Estimated ARMA=", result2 # print "Information criteria=", informationCriteria history = WhittleFactoryStateCollection(factory.getHistory()) firstTestes = WhittleFactoryState(history[0]) # print "History=", factory.getHistory() except: import sys print("t_WhittleFactory_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Wilks_std.expout000066400000000000000000000010761307543307100214630ustar00rootroot00000000000000alpha= 0.9 beta= 0.9 n( 0.9 , 0.9 , 0 )= 22 n( 0.9 , 0.9 , 1 )= 38 n( 0.9 , 0.9 , 2 )= 52 n( 0.9 , 0.9 , 3 )= 65 n( 0.9 , 0.9 , 4 )= 78 alpha= 0.9 beta= 0.95 n( 0.9 , 0.95 , 0 )= 29 n( 0.9 , 0.95 , 1 )= 46 n( 0.9 , 0.95 , 2 )= 61 n( 0.9 , 0.95 , 3 )= 76 n( 0.9 , 0.95 , 4 )= 89 alpha= 0.95 beta= 0.9 n( 0.95 , 0.9 , 0 )= 45 n( 0.95 , 0.9 , 1 )= 77 n( 0.95 , 0.9 , 2 )= 105 n( 0.95 , 0.9 , 3 )= 132 n( 0.95 , 0.9 , 4 )= 158 alpha= 0.95 beta= 0.95 n( 0.95 , 0.95 , 0 )= 59 n( 0.95 , 0.95 , 1 )= 93 n( 0.95 , 0.95 , 2 )= 124 n( 0.95 , 0.95 , 3 )= 153 n( 0.95 , 0.95 , 4 )= 181 openturns-1.9/python/test/t_Wilks_std.py000077500000000000000000000011151307543307100205640ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() try: alpha = Point(2) alpha[0] = 0.90 alpha[1] = 0.95 beta = Point(2) beta[0] = 0.90 beta[1] = 0.95 for a in range(2): for b in range(2): print("alpha=", alpha[a], "beta=", beta[b]) for i in range(5): print("n(", alpha[a], ",", beta[b], ",", i, ")=", Wilks.ComputeSampleSize(alpha[a], beta[b], i)) except: import sys print("t_Wilks_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_Wishart_std.expout000066400000000000000000000054161307543307100220150ustar00rootroot00000000000000Distribution class=Wishart name=Wishart dimension=1 cholesky=class=TriangularMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[1] nu=3 Distribution Wishart(V = [[ 1 ]], nu = 3) Mean= class=Point name=Unnamed dimension=1 values=[3] Covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6] Elliptical = False oneRealization= class=Point name=Unnamed dimension=1 values=[3.90923] oneSample first= class=Point name=Unnamed dimension=1 values=[1.18011] last= class=Point name=Unnamed dimension=1 values=[0.622293] mean= class=Point name=Unnamed dimension=1 values=[3.00811] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6.19866] Kolmogorov test for the generator, sample size= 100 is accepted Kolmogorov test for the generator, sample size= 1000 is accepted Point= class=Point name=Unnamed dimension=1 values=[9.1] ddf = class=Point name=Unnamed dimension=1 values=[-0.00565984] ddf (FD)= class=Point name=Unnamed dimension=1 values=[-0.00565984] log pdf=-4.364801 pdf =0.012717 pdf (FD)=0.012717 cdf=0.972010 ccdf=0.027990 pdf gradient = class=Point name=Unnamed dimension=2 values=[-0.00474156,-0.144349] cdf gradient = class=Point name=Unnamed dimension=2 values=[-0.0581774,-1.33806] quantile= class=Point name=Unnamed dimension=1 values=[7.81473] cdf(quantile)=0.950000 InverseSurvival= class=Point name=Unnamed dimension=1 values=[0.351846] Survival(inverseSurvival)=0.950000 Minimum volume interval= [0.00315933, 7.81683] threshold= [0.95] Minimum volume level set= {x | f(x) <= 3.79922} with f= MinimumVolumeLevelSetEvaluation(Wishart(V = [[ 1 ]], nu = 3)) beta= [0.0223883] Bilateral confidence interval= [0.215795, 9.3484] beta= [0.95] Unilateral confidence interval (lower tail)= [0, 7.81473] beta= [0.95] Unilateral confidence interval (upper tail)= [0.351846, 59.8961] beta= [0.95] mean= class=Point name=Unnamed dimension=1 values=[3] standard deviation= class=Point name=Unnamed dimension=1 values=[2.44949] skewness= class=Point name=Unnamed dimension=1 values=[1.63299] kurtosis= class=Point name=Unnamed dimension=1 values=[7] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[6] parameters= [class=PointWithDescription name=Unnamed dimension=0 description=[] values=[],class=PointWithDescription name=Unnamed dimension=0 description=[] values=[]] standard moment n= 0 value= [1] standard moment n= 1 value= [3] standard moment n= 2 value= [15] standard moment n= 3 value= [105] standard moment n= 4 value= [945] standard moment n= 5 value= [10395] Standard representative= Wishart(V = [[ 1 ]], nu = 3) openturns-1.9/python/test/t_Wishart_std.py000077500000000000000000000127301307543307100211210ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) # Instanciate one distribution object distribution = Wishart(CovarianceMatrix(1), 3.0) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Get mean and covariance print("Mean= ", repr(distribution.getMean())) print("Covariance= ", repr(distribution.getCovariance())) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for sampling size = 10000 oneSample = distribution.getSample(size) print("oneSample first=", repr( oneSample[0]), " last=", repr(oneSample[size - 1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) size = 100 for i in range(2): msg = '' if FittingTest.Kolmogorov(distribution.getSample(size), distribution).getBinaryQualityMeasure(): msg = "accepted" else: msg = "rejected" print("Kolmogorov test for the generator, sample size=", size, " is", msg) size *= 10 # Define a point point = Point(distribution.getDimension(), 9.1) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # max = distribution.getB() + distribution.getA() # min = distribution.getB() - distribution.getA() # derivative of PDF with regards its arguments DDF = distribution.computeDDF(point) print("ddf =", repr(DDF)) # by the finite difference technique print("ddf (FD)=", repr(Point(1, (distribution.computePDF(point + Point(1, eps)) - distribution.computePDF(point + Point(1, -eps))) / (2.0 * eps)))) # PDF value LPDF = distribution.computeLogPDF(point) print("log pdf=%.6f" % LPDF) PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % ((distribution.computeCDF(point + Point(1, eps)) - distribution.computeCDF(point + Point(1, -eps))) / (2.0 * eps))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) CCDF = distribution.computeComplementaryCDF(point) print("ccdf=%.6f" % CCDF) PDFgr = distribution.computePDFGradient(point) print("pdf gradient =", repr(PDFgr)) # by the finite difference technique # PDFgrFD = Point(2) # PDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computePDF(point) - # Arcsine(distribution.getA() - eps, distribution.getB()).computePDF(point)) / (2.0 * eps) # PDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computePDF(point) - # Arcsine(distribution.getA(), distribution.getB() - eps).computePDF(point)) / (2.0 * eps) # print("pdf gradient (FD)=", repr(PDFgrFD)) # derivative of the PDF with regards the parameters of the distribution CDFgr = distribution.computeCDFGradient(point) print("cdf gradient =", repr(CDFgr)) # CDFgrFD = Point(2) # CDFgrFD[0] = (Arcsine(distribution.getA() + eps, distribution.getB()).computeCDF(point) - # Arcsine(distribution.getA() - eps, distribution.getB()).computeCDF(point)) / (2.0 * eps) # CDFgrFD[1] = (Arcsine(distribution.getA(), distribution.getB() + eps).computeCDF(point) - # Arcsine(distribution.getA(), distribution.getB() - eps).computeCDF(point)) / (2.0 * eps) # print("cdf gradient (FD)=", repr(CDFgrFD)) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) # Get 95% survival function inverseSurvival = Point(distribution.computeInverseSurvivalFunction(0.95)) print("InverseSurvival=", repr(inverseSurvival)) print("Survival(inverseSurvival)=%.6f" % distribution.computeSurvivalFunction(inverseSurvival)) # Confidence regions interval, threshold = distribution.computeMinimumVolumeIntervalWithMarginalProbability( 0.95) print("Minimum volume interval=", interval) print("threshold=", Point(1, threshold)) levelSet, beta = distribution.computeMinimumVolumeLevelSetWithThreshold(0.95) print("Minimum volume level set=", levelSet) print("beta=", Point(1, beta)) interval, beta = distribution.computeBilateralConfidenceIntervalWithMarginalProbability( 0.95) print("Bilateral confidence interval=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, False) print("Unilateral confidence interval (lower tail)=", interval) print("beta=", Point(1, beta)) interval, beta = distribution.computeUnilateralConfidenceIntervalWithMarginalProbability( 0.95, True) print("Unilateral confidence interval (upper tail)=", interval) print("beta=", Point(1, beta)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) openturns-1.9/python/test/t_ZipfMandelbrot_std.expout000066400000000000000000000033221307543307100233060ustar00rootroot00000000000000Distribution class=ZipfMandelbrot name=ZipfMandelbrot dimension=1 n=15 q=1.2 s=2 Distribution ZipfMandelbrot(n = 15, q = 1.2, s = 2) Elliptical = False Continuous = False oneRealization= class=Point name=Unnamed dimension=1 values=[1] getRange= class=Interval name=Unnamed dimension=1 lower bound=class=Point name=Unnamed dimension=1 values=[1] upper bound=class=Point name=Unnamed dimension=1 values=[15] finite lower bound=[1] finite upper bound=[1] oneSample first= class=Point name=Unnamed dimension=1 values=[1] last= class=Point name=Unnamed dimension=1 values=[7] mean= class=Point name=Unnamed dimension=1 values=[3.256] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[10.2227] Point= class=Point name=Unnamed dimension=1 values=[5] pdf =0.050704 pdf (FD)=0.050704 cdf=0.826308 quantile= class=Point name=Unnamed dimension=1 values=[10] cdf(quantile)=0.950190 mean= class=Point name=Unnamed dimension=1 values=[3.22681] standard deviation= class=Point name=Unnamed dimension=1 values=[3.10469] skewness= class=Point name=Unnamed dimension=1 values=[1.81133] kurtosis= class=Point name=Unnamed dimension=1 values=[5.84423] covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplementation name=Unnamed rows=1 columns=1 values=[9.63912] parameters= [class=PointWithDescription name=X0 dimension=3 description=[n,q,s] values=[15,1.2,2]] standard moment n= 0 value= [1] standard moment n= 1 value= [3.22681] standard moment n= 2 value= [20.0514] standard moment n= 3 value= [181.116] standard moment n= 4 value= [1953.27] standard moment n= 5 value= [23117.7] Standard representative= ZipfMandelbrot(n = 15, q = 1.2, s = 2) openturns-1.9/python/test/t_ZipfMandelbrot_std.py000077500000000000000000000055341307543307100224240ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function from openturns import * TESTPREAMBLE() RandomGenerator.SetSeed(0) try: # Instanciate one distribution object distribution = ZipfMandelbrot(15, 1.2, 2.) print("Distribution ", repr(distribution)) print("Distribution ", distribution) # Is this distribution elliptical ? print("Elliptical = ", distribution.isElliptical()) # Is this distribution continuous ? print("Continuous = ", distribution.isContinuous()) # Test for realization of distribution oneRealization = distribution.getRealization() print("oneRealization=", repr(oneRealization)) # Test for getRange print("getRange=", repr(distribution.getRange())) # Test for sampling size = 1000 oneSample = distribution.getSample(size) print("oneSample first=", repr(oneSample[0]), " last=", repr(oneSample[1])) print("mean=", repr(oneSample.computeMean())) print("covariance=", repr(oneSample.computeCovariance())) # size = 100; # for i in range(2): # msg = '' # if FittingTest::ChiSquared(distribution.getSample(size), distribution).getBinaryQualityMeasure(): # msg = "accepted" # else: # msg = "rejected" # print "ChiSquare test for the generator, sample size=", size, " is", msg # size *= 10; # Define a point point = Point(distribution.getDimension(), 5.0) print("Point= ", repr(point)) # Show PDF and CDF of point eps = 1e-5 # PDF value PDF = distribution.computePDF(point) print("pdf =%.6f" % PDF) # by the finite difference technique from CDF print("pdf (FD)=%.6f" % (distribution.computeCDF( point + Point(1, 0)) - distribution.computeCDF(point + Point(1, -1)))) # derivative of the PDF with regards the parameters of the distribution CDF = distribution.computeCDF(point) print("cdf=%.6f" % CDF) # quantile quantile = distribution.computeQuantile(0.95) print("quantile=", repr(quantile)) print("cdf(quantile)=%.6f" % distribution.computeCDF(quantile)) mean = distribution.getMean() print("mean=", repr(mean)) standardDeviation = distribution.getStandardDeviation() print("standard deviation=", repr(standardDeviation)) skewness = distribution.getSkewness() print("skewness=", repr(skewness)) kurtosis = distribution.getKurtosis() print("kurtosis=", repr(kurtosis)) covariance = distribution.getCovariance() print("covariance=", repr(covariance)) parameters = distribution.getParametersCollection() print("parameters=", repr(parameters)) for i in range(6): print("standard moment n=", i, " value=", distribution.getStandardMoment(i)) print("Standard representative=", distribution.getStandardRepresentative()) except: import sys print("t_ZipfMandelbrot_std.py", sys.exc_info()[0], sys.exc_info()[1]) openturns-1.9/python/test/t_coupling_tools.expout000066400000000000000000000016471307543307100225640ustar00rootroot00000000000000=== check_execute /bin/kill hi hi execute ok === check_replace = check replace std check template.in.replaced: ok = check replace more vars check template.in.replaced: ok = check replace inplace check template.in: ok = check replace inplace with None check template.in: ok = check replace big template create template file of 128Mo check template_big.in.replaced: ok check replace big template: ok === check_get_token_escaped ok === check_get_regex ok === check_get_regex_perf create file of 128Mo ok get regex in file: ok === check_get_line_col ok === check_get_tokens ok === check_get_tokens_skip ok === check_get_tokens_skip2 ok === check_get_array ok === check_get_tokens_line_col ok === check_get_tokens_skip_line_col ok === check_get_tokens_perf create file of 128Mo ok get tokens: ok === check_get_tokens_skip_perf create file of 128Mo ok get tokens skip: ok === check_get_line_col_perf create file of 128Mo ok get line col: ok openturns-1.9/python/test/t_coupling_tools.py000077500000000000000000000525701307543307100216740ustar00rootroot00000000000000#! /usr/bin/env python from openturns import coupling_tools import os import time import sys wanted_lines = '# ooo\nE=@E\nE1=@E\nFE1=@F#oo\nZ=@Z@Z\n# ooo\n' semi_parsed = '# ooo\nE=2\nE1=2\nFE1=@F#oo\nZ=@Z@Z\n# ooo\n' parsed = '# ooo\nE=1.6\nE1=1.6\nFE1=5#oo\nZ=66\n# ooo\n' # how many Mo for perf file howbig = 128 max_time = howbig // 5 # enable it manually, see #600 max_time = sys.maxsize def create_template(): template_name = 'template.in' template_handle = open(template_name, 'wb') template_handle.write(wanted_lines.encode()) template_handle.close() return template_name def create_big_template(): template_name = 'template_big.in' template_handle = open(template_name, 'wb') print(('create template file of ' + str(howbig) + 'Mo')) template_handle.write(wanted_lines.encode()) for i in range(howbig): for i in range(1024): # line of 1024 octets template_handle.write(b'u' * 1024) template_handle.write(b'\n') template_handle.write(b'# ooo\n') template_handle.close() return template_name def remove_file(filename, quiet=False): if quiet: try: os.remove(filename) except: pass else: os.remove(filename) def check_outfile(filename, wanted_result): """ wanted_result: a string """ is_ok = True handle = open(filename) for wanted_line, result_line in zip(wanted_result.splitlines(True), handle): if wanted_line != result_line: print(('Aaaaarg, result is not what we wanted (result:' + result_line + ', should be:' + wanted_line.decode() + ')')) is_ok = False handle.close() if is_ok: print(('check ' + filename + ': ok')) else: exit(1) # return is_ok def check_replace(): print(("=== " + sys._getframe().f_code.co_name)) print("= check replace std") template = create_template() template_out = template + ".replaced" coupling_tools.replace(infile=template, outfile=template_out, tokens=["@E"], values=[2]) check_outfile(template_out, semi_parsed) remove_file(template_out) remove_file(template) print("= check replace more vars") template = create_template() coupling_tools.replace(infile=template, outfile=template_out, tokens=["@E", "@F", "@Z"], values=[1.6, 5, 6]) check_outfile(template_out, parsed) remove_file(template_out) remove_file(template) print("= check replace inplace") template = create_template() coupling_tools.replace(infile=template, outfile=template, tokens=["@E", "@F", "@Z"], values=[1.6, 5, 6]) check_outfile(template, parsed) remove_file(template) print("= check replace inplace with None") template = create_template() coupling_tools.replace(infile=template, outfile=None, tokens=["@E", "@F", "@Z"], values=[1.6, 5, 6]) check_outfile(template, parsed) remove_file(template) print("= check replace big template") start_time = time.time() template = create_big_template() sys.stderr.write( "big template created in : " + str(time.time() - start_time) + "s\n") template_out = template + ".replaced" start_time = time.time() coupling_tools.replace(infile=template, outfile=template_out, tokens=["@E"], values=[2]) time_to_parse = str(int(time.time() - start_time)) check_outfile(template_out, semi_parsed) remove_file(template_out) remove_file(template) sys.stderr.write("parsed template in: " + time_to_parse + "s\n") # parsed template=3G -> 25s on bx (ssd, core i7@2.5GHz) if int(time_to_parse) > max_time: print(('time to get token took too long (should be ' + str(max_time) + 's max)')) exit(1) else: print('check replace big template: ok') def create_results(tokens, values=None, big=False): filename = "results.out" handle = open(filename, "wb") if big: print(("create file of " + str(howbig) + "Mo")) for i in range(howbig): for i in range(1024): # line of 1024 octets handle.write(b'u' * 1024) handle.write(b'\n') handle.write(b'# ooo\n') if values == None: handle.write(tokens.encode()) else: n = 0 for t, v in zip(tokens, values): handle.write((t + str(v)).encode()) # go to next line sometimes if n % 3 == 0: handle.write(b'\n') n += 1 handle.close() return filename def check_results(ok_values, values): if ok_values == values: print("ok") else: print( ("Error: found: " + str(values) + " should be: " + str(ok_values))) exit(1) def check_get_line_col(): print(("=== " + sys._getframe().f_code.co_name)) content = """01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 """ result_file = create_results(content) value = 1 result = coupling_tools.get_line_col(result_file) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 3 result = coupling_tools.get_line_col(result_file, skip_col=2) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 11 result = coupling_tools.get_line_col(result_file, 1) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 16 result = coupling_tools.get_line_col(result_file, 1, 5) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 9 result = coupling_tools.get_line_col(result_file, skip_col=-1) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 17 result = coupling_tools.get_line_col(result_file, 1, -3) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 31 result = coupling_tools.get_line_col(result_file, -1) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 14 result = coupling_tools.get_line_col(result_file, -3, -6) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 3 result = coupling_tools.get_line_col(result_file, seek=6) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 23 result = coupling_tools.get_line_col( result_file, skip_line=1, skip_col=2, seek=30) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 31 result = coupling_tools.get_line_col(result_file, skip_line=-1, seek=-100) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) # coupling_tools.debug = True value = 21 just_before_line_ret = 80 sys.stderr.write('char at pos ' + str(just_before_line_ret) + ':->' + content[just_before_line_ret] + '<-\n') result = coupling_tools.get_line_col(result_file, skip_line=-1, seek=-just_before_line_ret) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 21 just_after_line_ret = just_before_line_ret + 1 sys.stderr.write('char at pos ' + str(just_after_line_ret) + ':->' + content[just_after_line_ret] + '<-\n') result = coupling_tools.get_line_col(result_file, skip_line=-2, seek=-just_after_line_ret) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) try: result = coupling_tools.get_line_col(result_file, skip_line=4) except: pass else: raise Exception("! should have fail !") try: result = coupling_tools.get_line_col(result_file, skip_line=-5) except: pass else: raise Exception("! should have fail !") os.remove(result_file) # test with a last empty line content = """01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 """ result_file = create_results(content) value = 19 result = coupling_tools.get_line_col( result_file, skip_line=-2, skip_col=-1) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) value = 1 result = coupling_tools.get_line_col(result_file, skip_line=-3) if value != result: raise Exception("! got " + str(result) + ' instead of ' + str(value)) try: result = coupling_tools.get_line_col(result_file, skip_line=-1) except: pass else: raise Exception("! should have fail !") os.remove(result_file) print("ok") def check_get(): print(("=== " + sys._getframe().f_code.co_name)) tokens = ["@Y1=", "@Y2="] values = [5.4, 6.5] result_file = create_results(tokens, values) results = coupling_tools.get(filename=result_file, tokens=tokens) check_results(values, results) remove(result_file) # Y = coupling_tools.get(outfile="output.py", tokens=["@Y1=", "@Y2="], # occurence=[0, 0], col=[0, 3], line=[0, 2]) def check_get_token_escaped(): print(("=== " + sys._getframe().f_code.co_name)) result_file = "results.out" handle = open(result_file, "wb") handle.write(b'FOO (BAR\n') handle.write(b'1.0 1.1 1.2 1.3\n') handle.write(b'2.0 2.1 2.2 2.3\n') handle.close() results = coupling_tools.get( filename=result_file, tokens=['FOO \(BAR'], skip_lines=[1], skip_cols=[1]) check_results([1.1], results) os.remove(result_file) def check_get_regex(): print(("=== " + sys._getframe().f_code.co_name)) tokens = ["@E=", "02=", " 01 = "] values = [-9.55555E5, 8, 5.4] result_file = create_results(tokens, values) results = coupling_tools.get_regex(filename=result_file, patterns=['@E=(\R)', '02\s*=\s*(\I)\s*', '01 =\s*(\R)'] ) check_results(values, results) remove_file(result_file) def check_get_regex_perf(): print(("=== " + sys._getframe().f_code.co_name)) tokens = ["@E=", "02=", " 01 = "] values = [-9.55555E5, 8, 5.4] start_time = time.time() result_file = create_results(tokens, values, big=True) sys.stderr.write( "big file created in : " + str(time.time() - start_time) + "s\n") start_time = time.time() results = coupling_tools.get_regex(filename=result_file, patterns=['@E=(\R)', '02\s*=\s*(\I)\s*', '01 =\s*(\R)'] ) time_to_parse = str(int(time.time() - start_time)) check_results(values, results) remove_file(result_file) # get file=3G -> 16s on bx (ssd, core i7@2.5GHz) sys.stderr.write("get regex in file in: " + time_to_parse + "s\n") if int(time_to_parse) > max_time: print(('time to get token took too long (should be ' + str(max_time) + 's max)')) exit(1) else: print("get regex in file: ok") def check_get_tokens(): print(("=== " + sys._getframe().f_code.co_name)) tokens = ["@E=", " pp", ",virg", " normal="] values = [-9.55555E6, 56.666, -12345678912.2, 0] result_file = create_results(tokens, values) results = coupling_tools.get(filename=result_file, tokens=tokens) check_results(values, results) remove_file(result_file) def check_get_tokens_skip(): print(("=== " + sys._getframe().f_code.co_name)) content = "@E=99 @E=-9.55555E6 pp88 pp 56.666,virg-12345678912.2 normal=0" values = [-9.55555E6, 56.666, -12345678912.2, 0] result_file = create_results(content) results = coupling_tools.get(filename=result_file, tokens=["@E=", "pp", ",virg", "normal="], skip_tokens=[1, -1, 0, 0] ) check_results(values, results) remove_file(result_file) print(("=== " + sys._getframe().f_code.co_name + "2")) tokens = '@E=99 @E=7899 pp88 pp pp\n'\ 'pp999 pp56.666E-9pp,virg-12345678912.2 uu88 uuuu\n'\ 'uu999uu\n' values = [99, 56.666E-9, -12345678912.2, 999] result_file = create_results(tokens) results = coupling_tools.get(filename=result_file, tokens=["@E=", "pp", ",virg", "uu"], skip_tokens=[0, 4, -1, 3] ) check_results(values, results) remove_file(result_file) def check_get_array(): print(("=== " + sys._getframe().f_code.co_name)) tokens = '11.0E-9 22.0crap 33.0 44.0 55.0\n'\ '11.1 22.1 33.1 44.1\n'\ '11.2 22.2 33.2 44.2' values = [11.0E-9, 22.0, 55.0, 11.1, 33.2, 22.2, 33.2] result_file = create_results(tokens) results = coupling_tools.get(filename=result_file, skip_lines=[0, 0, 0, 1, 2, 2, -1], skip_cols=[0, 1, -1, 0, 2, 1, -2] ) check_results(values, results) remove_file(result_file) def check_get_tokens_line_col(): print(("=== " + sys._getframe().f_code.co_name)) tokens = '11.0E-9 22.0crap 33.0 44.0 55.0\n'\ '11.1 22.1 33.1 44.1 middle\n'\ '11.2 22.2 33.2 44.2\n'\ '@E=1111.1E11 666' values = [1111.1E11, 22.0, 33.1, 666, 33.2, 44.1, 55.0] result_file = create_results(tokens) results = coupling_tools.get(filename=result_file, tokens=['@E=', None, '@E=', '@E=', 'middle', 'middle', 'middle'], skip_lines=[0, 0, -2, 0, 1, 0, -1], skip_cols=[0, 1, 2, 1, -2, -1, -1] ) check_results(values, results) remove_file(result_file) def check_get_tokens_skip_line_col(): print(("=== " + sys._getframe().f_code.co_name)) tokens = '11.0E-9 22.0crap 33.0 44.0 55.0\n'\ '11.1 22.1 33.1 44.1 middle\n'\ '11.2 22.2 middle 33.2 44.2\n'\ '@E=1111.1E11 666\n'\ '@E=999 8888 @E=95\n' values = [1111.1E11, 33.2, 666, 8888, 8888, 666] result_file = create_results(tokens) results = coupling_tools.get(filename=result_file, tokens=[ '@E=', 'middle', 'middle', '@E=', '@E=', '@E='], skip_tokens=[0, 1, -1, -2, -1, -2], skip_lines=[0, 0, 1, 0, 0, -1], skip_cols=[0, 0, 1, 1, -1, -1] ) check_results(values, results) remove_file(result_file) def check_get_tokens_perf(): print(("=== " + sys._getframe().f_code.co_name)) tokens = ["@E=", " pp", ",virg", " normal="] values = [-9.55555E6, 56.666, -12345678912.2, 0] tokens = ["@E="] values = [-9.55555E6] start_time = time.time() result_file = create_results(tokens, values, big=True) sys.stderr.write( "big file created in : " + str(time.time() - start_time) + "s\n") start_time = time.time() results = coupling_tools.get(filename=result_file, tokens=tokens) time_to_parse = str(int(time.time() - start_time)) check_results(values, results) remove_file(result_file) # get file=3G -> 18s on bx (ssd, core i7@2.5GHz) sys.stderr.write('get token in file in: ' + time_to_parse + 's\n') if int(time_to_parse) > max_time: print(('time to get token took too long (should be ' + str(max_time) + 's max)')) exit(1) else: print('get tokens: ok') def check_get_tokens_skip_perf(): print(("=== " + sys._getframe().f_code.co_name)) content = "@E=99 @E=-9.55555E6 pp88 pp 56.666,virg-12345678912.2 normal=0" values = [-9.55555E6, 56.666, -12345678912.2, 0] content = "@E=99 @E=-9.55555E6 pp88 pp 56.666,virg-12345678912.2 normal=0" values = [-9.55555E6] start_time = time.time() result_file = create_results(content, big=True) sys.stderr.write( "big file created in : " + str(time.time() - start_time) + "s\n") start_time = time.time() results = coupling_tools.get(filename=result_file, tokens=["@E="], skip_tokens=[-1] ) time_to_parse = str(int(time.time() - start_time)) check_results(values, results) remove_file(result_file) # get file=3G -> 21s on bx (ssd, core i7@2.5GHz) sys.stderr.write("get token skip in file in: " + time_to_parse + "s\n") if int(time_to_parse) > max_time: print(('time to get token took too long (should be ' + str(max_time) + 's max)')) exit(1) else: print('get tokens skip: ok') def check_get_line_col_perf(): print(("=== " + sys._getframe().f_code.co_name)) tokens = '11.0E-9 22.0 33.0 44.0 55.0\n'\ '11.1 22.1 33.1 44.1\n'\ '11.2 22.2 33.2 44.2'\ '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'\ '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'\ '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' values = [22.0] start_time = time.time() result_file = create_results(tokens, big=True) sys.stderr.write( 'big file created in : ' + str(time.time() - start_time) + 's\n') start_time = time.time() results = coupling_tools.get(filename=result_file, skip_lines=[-92], skip_cols=[1] ) time_to_parse = str(int(time.time() - start_time)) check_results(values, results) remove_file(result_file) # get file=3G -> 15s on bx (ssd, core i7@2.5GHz) sys.stderr.write( 'get token skip line col in file in: ' + time_to_parse + 's\n') if int(time_to_parse) > max_time: print(('time to get token took too long (should be ' + str(max_time) + 's max)')) exit(1) else: print('get line col: ok') def check_execute(): print(("=== " + sys._getframe().f_code.co_name)) # ensure previous print is print before following command output sys.stdout.flush() # Care with -darwin systems if ('darwin' in sys.platform) or ('win' not in sys.platform): coupling_tools.execute('/bin/ls /bin/kill') coupling_tools.execute('echo "hi"', is_shell=True) coupling_tools.execute('echo "hi"', is_shell=True, shell_exe='/bin/bash') ret, stdout = coupling_tools.execute('/bin/ls /bin/kill', get_stdout=True) if stdout != b'/bin/kill\n': raise Exception("coupling_tools.execute error!") ret, stdout, stderr = coupling_tools.execute('/bin/ls /bin/kill', get_stdout=True, get_stderr=True) if stdout != b'/bin/kill\n' and stderr != b'': raise Exception("coupling_tools.execute error!") ret, stderr = coupling_tools.execute('/bin/ls /bin/kill 1>&2', is_shell=True, get_stderr=True) if stderr != b'/bin/kill\n': raise Exception("coupling_tools.execute error!") else: coupling_tools.execute('cmd.exe /c echo /bin/kill') exec_in_wine = os.path.exists('/boot') if exec_in_wine: # command 'echo' do not work in python on wine for an unknown # reason print('hi') print('hi') else: # native windows coupling_tools.execute('echo hi', is_shell=True) coupling_tools.execute('echo hi', is_shell=True, hide_win=False) ret, stdout = coupling_tools.execute('echo hello', is_shell=True, get_stdout=True) if ret != 0 or not str(stdout).startswith('hello'): raise Exception("coupling_tools.execute error!") print("execute ok") check_execute() check_replace() check_get_token_escaped() check_get_regex() check_get_regex_perf() check_get_line_col() check_get_tokens() check_get_tokens_skip() check_get_array() check_get_tokens_line_col() check_get_tokens_skip_line_col() check_get_tokens_perf() check_get_tokens_skip_perf() check_get_line_col_perf() openturns-1.9/python/test/t_docstring.py000077500000000000000000000023401307543307100206160ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import sys import os import shutil from glob import glob from tempfile import mkdtemp import doctest use_matplotlib = False try: import matplotlib matplotlib.use('Agg') use_matplotlib = True except: pass py_files = sys.argv[1:] total_failure_count = 0 total_test_count = 0 # Temporary working directory for IO tests work_dir = mkdtemp() os.chdir(work_dir) for py_file in py_files: if (not use_matplotlib) and (os.path.basename(py_file) == 'viewer.py'): failure_count, test_count = 0, 0 else: py_basename = os.path.splitext(os.path.basename(py_file))[0] module = __import__('openturns.' + py_basename, fromlist=[py_basename]) failure_count, test_count = doctest.testmod( module, verbose=False, optionflags=doctest.ELLIPSIS) total_failure_count += failure_count total_test_count += test_count print(('%s %5d tests failed' % ((py_basename + ' ').ljust(60, '.'), failure_count))) print(('-' * 79)) print(('%s %5d tests failed' % ('TOTAL '.ljust(60, '.'), total_failure_count))) # Delete temporary working directory for IO tests os.chdir('..') shutil.rmtree(work_dir) sys.exit(total_failure_count) openturns-1.9/python/test/t_features.py000077500000000000000000000045131307543307100204440ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import os try: width = 40 # check that python can load OpenTURNS module print('1: Python module load'.ljust(width), end=' ') try: import openturns as ot print('OK') except: print('no') # check that python can find the Viewer module # If it fails, check that matplotlib package is installed print('2: Viewer (matplotlib)'.ljust(width), end=' ') try: import openturns.viewer print('OK') except: print('no') # check that OpenTURNS can run R # It should produce a file named testDraw.png print('3: drawing (R)'.ljust(width), end=' ') try: graph = ot.Normal().drawPDF() fname = 'testDraw.png' try: graph.draw(fname) os.remove(fname) except: raise print('OK') except: print('no') # check that rot package is installed print('4: linear model (R.rot)'.ljust(width), end=' ') try: lm = ot.LinearModelFactory().build( ot.Normal(2).getSample(10), ot.Normal().getSample(10)) print('OK') except: print('no') # check XML support print('5: serialization (LibXML2)'.ljust(width), end=' ') try: storageManager = ot.XMLStorageManager('myFile.xml') print('OK') except: print('no') # check that analytical function are available print('6: analytical function (muParser)'.ljust(width), end=' ') try: f = ot.SymbolicFunction(['x1', 'x2'], ['x1+x2']) print('OK') except: print('no') # check that hmat library was found print('7: HMatrix (hmat-oss)'.ljust(width), end=' ') if ot.HMatrixFactory.IsAvailable(): print('OK') else: print('no') # check that nlopt library was found print('8: optimization (NLopt)'.ljust(width), end=' ') try: problem = ot.OptimizationProblem() algo = ot.NLopt('LD_SLSQP') algo.setProblem(problem) print('OK') except: print('no') # check that TBB library was found print('9: multithreading (TBB)'.ljust(width), end=' ') if ot.TBB.IsAvailable(): print('OK') else: print('no') except: import os import traceback traceback.print_exc() os._exit(1) openturns-1.9/python/test/t_notebook.py000077500000000000000000000021221307543307100204400ustar00rootroot00000000000000#! /usr/bin/env python from __future__ import print_function import os import fnmatch import sys import glob import traceback import nbformat import nbconvert current_path = os.path.dirname(os.path.realpath(__file__)) ipynb_path = current_path + '/../doc/examples' print('ipynb_path=', ipynb_path) ipynbs = [] for root, dirnames, filenames in os.walk(ipynb_path): for filename in fnmatch.filter(filenames, '*.ipynb'): ipynb = os.path.join(root, filename) if not 'ipynb_checkpoints' in ipynb: # exclude automatic backups ipynbs.append(ipynb) n_fail = 0 for ipynb in ipynbs: with open(ipynb) as fh: nb = nbformat.reads(fh.read(), 4) exporter = nbconvert.PythonExporter() # source is a tuple of python source code # meta contains metadata source, meta = exporter.from_notebook_node(nb) b_name = os.path.basename(ipynb) print('--', b_name) try: exec(source.encode()) print('--', b_name, 'OK') except: n_fail += 1 print('--', b_name, '***Failed') traceback.print_exc() sys.exit(n_fail) openturns-1.9/utils/000077500000000000000000000000001307543307100145635ustar00rootroot00000000000000openturns-1.9/utils/copyright.sh000077500000000000000000000004411307543307100171310ustar00rootroot00000000000000#!/bin/sh # update copyright date newyear=`date +%Y` oldyear=`expr $newyear - 1` for subdir in lib python cmake do grep -lr "2005-$oldyear Airbus-EDF-IMACS-Phimeca" $subdir|grep -v '~'|xargs sed -i "s|2005-$oldyear Airbus-EDF-IMACS-Phimeca|2005-$newyear Airbus-EDF-IMACS-Phimeca|g" done openturns-1.9/utils/indent.sh000077500000000000000000000012031307543307100163770ustar00rootroot00000000000000#!/bin/sh # indent some code, requires python, astyle and autopep8: # cd /tmp && git clone https://github.com/hhatto/autopep8.git && cd autopep8 && ./setup.py install --user astyle --suffix=none --style=ansi --recursive --indent=spaces=2 --indent-switches --pad-oper --break-closing-brackets --max-instatement-indent=40 lib/*.?xx astyle --suffix=none --style=ansi --indent=spaces=2 --indent-switches --pad-oper --break-closing-brackets --max-instatement-indent=40 python/src/*.?xx # python /usr/share/doc/python2.7/examples/Tools/scripts/reindent.py --verbose --recurse python/ autopep8 --verbose --in-place --recursive python/ openturns-1.9/utils/package.sh000077500000000000000000000033251307543307100165200ustar00rootroot00000000000000#!/bin/sh # this script creates source package set -e path=. pkgname=openturns obs=~/projects/science:openturns/$pkgname pkgver=0.0 debver=$pkgver rel=0.1 usage() { echo "generate source package" echo "" echo "\t-h --help" echo "\t--path=$path" echo "\t--pkgname=$pkgname" echo "\t--pkgver=$pkgver" echo "\t--debver=$debver" echo "\t--rel=$rel" echo "" } while [ "$1" != "" ]; do PARAM=`echo $1 | awk -F= '{print $1}'` VALUE=`echo $1 | awk -F= '{print $2}'` case $PARAM in -h | --help) usage exit ;; --path) path=$VALUE ;; --pkgname) pkgname=$VALUE obs=~/projects/science:openturns/$pkgname ;; --pkgver) pkgver=$VALUE debver=$pkgver ;; --debver) debver=$VALUE ;; --rel) rel=$VALUE ;; --obs) obs=$VALUE ;; *) echo "ERROR: unknown parameter \"$PARAM\"" usage exit 1 ;; esac shift done echo "-- Creating $pkgname-$pkgver tarball from $path" rm -rf /tmp/$pkgname-$pkgver git archive HEAD --prefix=$pkgname-$pkgver/ | bzip2 > /tmp/$pkgname-$pkgver.tar.bz2 cd /tmp tar xjf $pkgname-$pkgver.tar.bz2 rm -f "$pkgname"_$debver* cp $pkgname-$pkgver.tar.bz2 "$pkgname"_$debver.orig.tar.bz2 cd /tmp/$pkgname-$pkgver cp -r distro/debian . # build source package echo "-- Creating source package "$pkgname"_$debver-$rel" debuild -us -uc -S # rpm files echo "-- Copying files to $obs" cp -v /tmp/$pkgname-$pkgver/distro/rpm/$pkgname.spec /tmp/$pkgname-$pkgver.tar.bz2 $obs cp -v /tmp/"$pkgname"_$debver.orig.tar.bz2 /tmp/"$pkgname"_$debver-$rel.dsc /tmp/"$pkgname"_$debver-$rel.debian.tar.xz $obs # build binary packages #DEB_BUILD_OPTIONS="parallel=16" debuild -us -uc openturns-1.9/utils/rename.sh000077500000000000000000000010431307543307100163670ustar00rootroot00000000000000#!/bin/sh # rename a class usage() { echo "Usage: $0 OldClass NewClass" exit 1 } test $# = 2 || usage files=`find lib python -name ${1}*` t_files=`find lib python -name t_${1}*` for src_file in ${files} ${t_files} do dest_file=`echo ${src_file} | sed "s|$1|$2|g"` git mv ${src_file} ${dest_file} done upper_src=`echo $1 | tr "[:lower:]" "[:upper:]"` upper_dest=`echo $2 | tr "[:lower:]" "[:upper:]"` find lib python -name $2.hxx | xargs sed -i "s|$upper_src|$upper_dest|g" grep -lr $1 lib python|grep -v '~'|xargs sed -i "s|$1|$2|g" openturns-1.9/utils/rot_1.4.6.tar.gz000066400000000000000000000151041307543307100172450ustar00rootroot00000000000000KT=s63P7Kzs¡䝏o9Yk=D9S*cl MM'azN!=_NO4Aj`zllIM֬.uVkuթ2Lgs^P=1.:9vm>-y+~#.׾&y~͞O,@f 1 CzC-rHZSSIN4bBCư)Κ EOF3S]/uٙzְ&5N7Ouޡӹ589JbڬCuA>Nq ^\8=Y%_ ҧ%:sbk(M@L3rەB YW;hZh>9GkQ\/gMF3ɀ0 㚅#|Hvs(M*_&.&5Rcg^jC#!gp ~Eۊ^ӭB(7mҁ;s{ȺC>`bpz 똒`\+JyZsBdddNEGR^٘Mߚބ+\ [{lw[O[/vUG>h WW}ʚz?}#{^7݆*("6< aG|M{D>q;15mv53s\}c^GsP> r <2;uN݁fn^^~\h?t(!{=9̩iL-E ?#RX]#Ⱦr{ u<6}X~)hE&#dh2 Vs:AzͫёГxP`-J =/vSIU@ Ӗv\PͭTEߚϧSý?֬iz`A+lCȋyoL#@D ˡCcshR>6(&Jי$"/e(!|8/n>䩌pwjϵN} oLfG5f3 *H/b1s4g֛r5f4;T3mܞ3OL{gDUZ~jWMN j؁4N `Gbd#K@Nž3dv ;ZvLʀY4:T420iѧG:iz]L L^` By :J!F]G7ӂ u% svቾK?}Wze+*n^\LVqZ \3 DL0Z$$XF"G%wCMMḿBӕ:?07*^2`7A,'@e&.De9gO?hSزleF.T/tt7een*+G$VΙ' y;.x$Vc R'F)s"d!ZM搅=|S^<[Ab'lk?bcS;d_\It/R7;n_l]O\ 33!WZʵ|z\>9EVPb뿫Wn& 0U]UR 5)Τ&i"NB SLTdcRs1Y'Th^^*Óƅ *&l  5`GB25y+TrL)~WK`H%ϭ+j>t׎ZUw9$R[~sMrfyͅ| LU|+2w ~MF*, $Z{C1?;]_2`7JWnf%v)r+rm G7tlOE;H/RH_p 2-w Բ.cyzxe✥ތQL,9<$f6ǤP<߁`|Մ!j{"HٙLrװw{uQQ ?7> HãD' R⇖{:+K~նCBǯN"R`7I$.qQv_(\<8x;qoӭ?KS y{rD=;UK' '-g'_10E?=5ЫʁRGOpxWl@jcb؞)2cX7DTu߫_)ȫ36S%)9jsSBOUO)9׾?{ ~QlӾ6Xm2τ/V û A/ }oO{/У_f/M^NiuћE?Wz W[]7bps{;ZIލɽ3'2Kib bF ͷM˼C8AmC,\ SP5$#g&Ԛ1'gjQ/D4D&9_C&6T?wCt`9 hgch OnΧ6Z1d 669\0kEz_X HZFOk[ A_JOqxȡɰL+(e<3iQ)eM(: }И{E /Tf,L5D+~O/6o((Mx rN۰C-Ay-#M>đ=>'m^ +d,Lmɣ0%Q|`H5Z ց~ uN9ĉAG nwS @ȯ-D.ygW~ʝ Gnd!2 'v"gG Wg$+UԤoĤsq3Mi,ow|j?h)Lo3u1\ԭM )?qN\ʁQ?M'$(C?AG{V U@ ̀,f!gq+KAb  !Ex\8=OZ\wT~|=%hA4?ؽ `[S.{'Fdt~t*MWW'^IfHM3-, ؾ[H8*"R1?QН֭k|jHLUon譺̌aMoF^ Le 1WoxH~L:[ DH؏H{^~ɞ--ߕ[x}MnQ8%B09h)j! w YoN9w3˰ lRי_O%ʏlpm0t [ӟs=-딪7*+R@t*?"ږP!C=> S 6HlDt)iHM}!NKFz k3YB;2Z/L8AcL@>E*bG騦551Az Db]sR vk,|O?hTe;h_H{]D~">sN޿L $gD Rc@+ G_"۩.WC.Ž<2ZT˼A<-YS~&%>>#60KDUk@ЬlJ# lRxmC5mFX摧x<ٶPd\`˂!H#i#Qx&fiX԰I(/l9yԽuKWF0̦DP_2 3QL" h<>G4'S`!hE+UM;s8XhDuay~pC:|MdMOO+!qԗE.nuz{/Z/Ty &}AÉI1kT"oHU #wKx2H@ !ĜdvtA$L/}bQ%\IZ.z=ld$q͊qŵ'kݷZsl2?C4P_R ;3~nhXNh\ H/cqˇc)Ya@h1*00;⛒r鱳@*ZoaϠ7) %ekfßR6F2W^~QYqj,ԇɹpGZѹ/ fiCMQ _R[g6ͧ+)=x] '3'$P^LO^Q^ާ ?+8qݐ)oYUho^"ߪ?Kd'~jg*%SQbg/pf&[Y m͍̞FR)1mz=@+ԏ g,;#e('ON`@U"Di*v `270ODsNX\* NĹ()$#s trhA̿דc$p))cxb3<7oe w4kqTv+UW9ŨKLZ|N^r uΥ#)Z^ZelTU62 M*=Hs*O0'H<5]% >HWn+@R?yw.k@L KA5x50hsh~(֐2}v%ꟁP /PBNQ_ֺT^[ X!Qy0p}z~I^SAv9lU?. ~W@ya٧?o *`?o: BIuVik:9=a7t}:ȒfBZ&(&,qvM L7|cEh*JV֑GHAK@k>ΰ6dD)I,8uQTHI@a?.{r !r6qSR6|cSUM[GRiXђI?y{B_|2;쿥R?{Ź|HVy# .=jjGb &%(? SgPu]T~R_| Wq~YU@?AT@?9)erNAbW}|VgH'hu7c?ZuWR {yVzIOSJ.cd~9Ҭ"L*L ""bT>s&o\?K~Pzsk8S)}r:@gnWP?(؂w@UJ:ho}%\1 @Iz%R R}ops s@E}Z3W8-6PܱX@openturns-1.9/utils/setVersionNumber.sh000077500000000000000000000021271307543307100204360ustar00rootroot00000000000000#!/bin/bash usage() { echo "Usage: $0 new_version" exit 1 } error() { echo "File VERSION is missing. Abort." exit 1 } [[ $# == 1 ]] || usage version=$1 [[ -f VERSION ]] || error oldversion=`cat VERSION` echo "Changing version from $oldversion to $version" files="" for file in $files do sed -i "s/\[$oldversion\]/\[$version\]/g" $file done oldmajor=`echo $oldversion | cut -d "." -f 1` oldminor=`echo $oldversion | cut -d "." -f 2` oldpatch=`echo $oldversion | cut -d "." -f 3` major=`echo $version | cut -d "." -f 1` minor=`echo $version | cut -d "." -f 2` patch=`echo $version | cut -d "." -f 3` sed -i "s/CPACK_PACKAGE_VERSION_MAJOR $oldmajor/CPACK_PACKAGE_VERSION_MAJOR $major/g" CMakeLists.txt sed -i "s/CPACK_PACKAGE_VERSION_MINOR $oldminor/CPACK_PACKAGE_VERSION_MINOR $minor/g" CMakeLists.txt number_of_dots=`grep -o '\.' <<< $version | wc -l` if test $number_of_dots -ge 2 then sed -i "s/set ( CPACK_PACKAGE_VERSION_PATCH $oldpatch/set ( CPACK_PACKAGE_VERSION_PATCH $patch/g" CMakeLists.txt fi echo $version > VERSION echo "Updated file VERSION with new version $version" exit 0 openturns-1.9/validation/000077500000000000000000000000001307543307100155555ustar00rootroot00000000000000openturns-1.9/validation/CMakeLists.txt000066400000000000000000000001271307543307100203150ustar00rootroot00000000000000# -*- cmake -*- add_subdirectory (src) openturns-1.9/validation/src/000077500000000000000000000000001307543307100163445ustar00rootroot00000000000000openturns-1.9/validation/src/AbdoRackwitz.mws000066400000000000000000000057131307543307100214660ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 407 "restart:\nwith(Line arAlgebra):\nabs_e:=proc(x)\n if evalf(x) < -0.0001 then\n -x\n \+ else\n if evalf(x) > 0.0001 then\n x\n else\n x* x/0.0001\n fi:\n fi:\nend: \nG:=proc(u)\nlocal G1,G2;\n G1: =2-u[2]+exp(-0.1*u[1]^2)+(0.2*u[2])^4;\n G2:=4.5-u[1]*u[2];\n(G1+G2+a bs_e(evalf(G1-G2))/2)\nend;\ngradG:=proc(u)\n local x;\n x:=; \n subs(x1=u[1],x2=u[2],)\nend;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GGf*6#%\"uG6$%#G1G%#G2G6\"F+C%>8$, *\"\"#\"\"\"&9$6#F0!\"\"-%$expG6#,$*&$F1F5F1*$)&F36#F1F0F1F1F5F1*&)$F0 F5\"\"%F1)F2FCF1F1>8%,&$\"#XF5F1*&F>F1F2F1F5,(F.F1FFF1*&#F1F0F1-%&abs_ eG6#-%&evalfG6#,&F.F1FFF5F1F1F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%&gradGGf*6#%\"uG6#%\"xG6\"F*C$>8$-%$<,>G6$%#x1G%#x2G-%%subsG6%/F1&9 $6#\"\"\"/F2&F86#\"\"#-F/6$-%%diffG6$-%\"GG6#F-F1-FB6$FDF2F*F*F*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 241 "u:=<1.,1.>;\nlambda:=0;\n \+ print(evalf([u, lambda, G(u), gradG(u)]));\nfor i from 1 to 20 do\n l ambda:=evalf((G(u)-Transpose(u).gradG(u))/(Transpose(gradG(u)).gradG(u )));\n u:=evalf(-lambda.gradG(u));\n print([u, lambda, G(u), gradG(u )]);\nod: " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"uG-%'RTABLEG6%\"*/H WN\"-%'MATRIXG6#7$7#$\"\"\"\"\"!F-&%'VectorG6#%'columnG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%'lambdaG\"\"!" }}{PARA 8 "" 1 "" {TEXT -1 120 "Error, (in abs_e) cannot determine if this expression is true or fals e: -1.*x2+exp(-.1*x1^2)+.16e-2*x2^4+x1*x2 < 2.4999\n" }}{PARA 8 "" 1 " " {TEXT -1 120 "Error, (in abs_e) cannot determine if this expression \+ is true or false: -1.*x2+exp(-.1*x1^2)+.16e-2*x2^4+x1*x2 < 2.4999\n" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "gradG();" }}{PARA 8 " " 1 "" {TEXT -1 54 "Error, (in PiecewiseTools:-Convert) unable to conv ert\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "x(3,4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 135442904 }{RTABLE M7R0 I6RTABLE_SAVE/135442904X*%)anythingG6"6"[gl!#%!!!"#"#$"""""!F'F& } openturns-1.9/validation/src/AbdoRackwitz.txt000066400000000000000000000030041307543307100214660ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > abs_e:=proc(x) > if evalf(x) < -0.0001 then > -x > else > if evalf(x) > 0.0001 then > x > else > x*x/0.0001 > fi: > fi: > end: > G:=proc(u) > local G1,G2; > G1:=2-u[2]+exp(-0.1*u[1]^2)+(0.2*u[2])^4; > G2:=4.5-u[1]*u[2]; > (G1+G2+abs_e(evalf(G1-G2))/2) > end; > gradG:=proc(u) > local x; > x:=; > subs(x1=u[1],x2=u[2],) > end; G := proc(u) local G1, G2; G1 := 2 - u[2] + exp(-0.1*u[1]^2) + 0.2^4*u[2]^4; G2 := 4.5 - u[1]*u[2]; G1 + G2 + 1/2*abs_e(evalf(G1 - G2)) end proc gradG := proc(u) local x; x := ; subs(x1 = u[1], x2 = u[2], ) end proc > u:=<1.,1.>; > lambda:=0; > print(evalf([u, lambda, G(u), gradG(u)])); > for i from 1 to 20 do > > lambda:=evalf((G(u)-Transpose(u).gradG(u))/(Transpose(gradG(u)).gradG( > u))); > u:=evalf(-lambda.gradG(u)); > print([u, lambda, G(u), gradG(u)]); > od: [1.] u := [ ] [1.] lambda := 0 Error, (in abs_e) cannot determine if this expression is true or false: -1.*x2+exp(-.1*x1^2)+.16e-2*x2^4+x1*x2 < 2.4999 Error, (in abs_e) cannot determine if this expression is true or false: -1.*x2+exp(-.1*x1^2)+.16e-2*x2^4+x1*x2 < 2.4999 > gradG(); Error, (in PiecewiseTools:-Convert) unable to convert > x(3,4); 4 > openturns-1.9/validation/src/Airy.mw000066400000000000000000000575251307543307100176330ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZdci1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GLDYlUSdEaWdpdHNGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIzMwRidGOUY1Rk8tRiw2JVEleG1pbkYnRi9GMkZqbi1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GaG8tRl5vNiRRIzEwRidGOUY1Rk8tRiw2JVEleG1heEYnRi9GMkZqbkZqb0Y1Rk8tRiw2JVEleW1pbkYnRi9GMkZqbkZkb0Zqb0Y1Rk8tRiw2JVEleW1heEYnRi9GMkZqbkZqb0Y1Rk8tRiw2JVEibkYnRi9GMkZqbi1GXm82JFEkMjAxRidGOUY1Rk8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVEjZmRGJ0YvRjJGam4tRiw2JVEmZm9wZW5GJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Ji1GLDYjUSFGJy1JI21zR0YkNiNRKUFpcnkuY3N2RictRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZfcS9GTlEsMC4zMzMzMzMzZW1GJy1GLDYlUSZXUklURUYnRi9GMkY5RjVGTy1GNjYvUSRmb3JGJy8lJWJvbGRHRjEvRjNRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmJzRjtGPkZARkJGREZGRkhGX3FGYHFGXHEtRiw2JVEiaUYnRi9GMkZccS1GNjYvUSVmcm9tRidGX3NGYXNGY3NGO0Y+RkBGQkZERkZGSEZfcUZgcUZccS1GXm82JFEiMEYnRjlGXHEtRjY2L1EjdG9GJ0Zfc0Zhc0Zjc0Y7Rj5GQEZCRkRGRkZIRl9xRmBxRlxxRmZwLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZ29GaW8tRl5vNiRRIjFGJ0Y5RlxxLUY2Ni9RI2RvRidGX3NGYXNGY3NGO0Y+RkBGQkZERkZGSEZfcUZgcUZPRlxxRlxxRlxxLUYsNiVRInhGJ0YvRjJGam5GYW8tRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZnb0Zpby1JJm1mcmFjR0YkNigtRiM2JS1GaHE2JC1GIzYlRl1wRmF0RmFvRjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRl9xRmBxRmVzLUYjNiQtRmhxNiQtRiM2JUZmcEZhdEZkdEY5RlxyLyUubGluZXRoaWNrbmVzc0dGZnQvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZnYvJSliZXZlbGxlZEdGPUY1Rk9GXHNGXHEtRiw2JVEiakYnRi9GMkZccUZoc0ZccUZbdEZccUZedEZccUZmcEZhdEZkdEZccUZndEZPRlxxRlxxRlxxLUYsNiVRInlGJ0YvRjJGam5GYHBGXXUtRmF1NigtRiM2JS1GaHE2JC1GIzYlRmNwRmF0RmBwRjlGaXVGW3dGXHZGYnZGZHZGZ3ZGaXZGNUZPRlxxRlxxRlxxLUYsNiVRKGZwcmludGZGJ0YvRjItRmhxNiQtRiM2OUZhcUZjci1GYHI2I1FKJS4yMHo7ZTslLjIwejtlOyUuMjB6O2U7JS4yMHo7ZTslLjIwejtlXG5GJ0ZjckZqdEZddS1GLDYlUSJJRidGL0YyRml1Rl53RmNyLUYsNiVRJmV2YWxmRidGL0YyLUZocTYkLUYjNiQtRiw2JVEnQWlyeUFpRicvRjBGPUY5LUZocTYkLUYjNidGanRGXXVGY3hGaXVGXndGOUY5RmNyRlxxRmZ4LUZocTYkLUYjNiRGXXktRmhxNiQtRiM2KkZkdEZjckZccUZqdEZddUZjeEZpdUZed0Y5RjlGY3JGZngtRmhxNiQtRiM2JC1GLDYlUSdBaXJ5QmlGJ0ZgeUY5RmF5RjlGY3JGXHFGZngtRmhxNiQtRiM2JEZhekZpeUY5RjktRjY2LVEiO0YnRjlGO0ZmckZARkJGREZGRkhGX3FGTUZPRlxxLUY2Ni9RI29kRidGX3NGYXNGY3NGO0Y+RkBGQkZERkZGSEZfcUZgcUY1Rk9GXHFGW1tsRjVGT0ZccS1GLDYlUSdmY2xvc2VGJ0YvRjItRmhxNiQtRiM2I0ZhcUY5RjU= %; JSFH openturns-1.9/validation/src/AliMikhailHaq.mw000066400000000000000000001735701307543307100213640ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZQNiZGUkZVRlgvRmVuUSVhdXRvRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVEld2l0aEYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRL0NvZGVHZW5lcmF0aW9uRidGL0YyRjlGNUZPLUYsNiVRJG1hcEYnRi9GMi1GZG82JC1GIzYmLUYsNiVRKXNpbXBsaWZ5RidGL0YyLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGXm8vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEoY29sbGVjdEYnRi9GMi1GZG82JC1GIzYtLUkjbW5HRiQ2JFEiMUYnRjktRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZqcS1GLDYlUSZ0aGV0YUYnL0YwRj1GOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGXm9GX28tRmRvNiQtRiM2LS1GY3E2JFEiMkYnRjktRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZpcUZbci1GY3E2JFEiNEYnRjlGYHItRiw2JVEiYUYnRi9GMkZmcUZdc0ZgckZgc0Zgci1GLDYlUSJ0RidGL0YyRjlGZnEtSSVtc3VwR0YkNiUtRiw2JVEoJnRoZXRhO0YnRl9yRjktRiM2I0Znci8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGYHItRmRvNiQtRiM2L0ZicUZqckZdc0ZgckZgc0ZgckZjc0ZmcUZdc0Zgci1GZ3M2JUZgc0ZcdEZedEZgckZjc0Y5RmVwRmNzRjlGOS1GNjYtUSI7RidGOUY7RmhwRkBGQkZERkZGSEZeb0ZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCoqKkkmdGhldGFHNiIiIiJJImFHRiVGJiwoRiZGJkYkISIiKiZGJEYmRidGJkYmRiZJInRHRiVGJiIiJUYmRiYqJkYkRiYsJkYpRiZGJyIiI0YmISIjKiRGJEYvRiY= Qy4+SSRjZGZHNiIqKEkidUdGJSIiIkkidkdGJUYoLCZGKEYoKihJJnRoZXRhR0YlRigsJkYoRihGJyEiIkYoLCZGKEYoRilGLkYoRi5GLkYoPkkkcGRmR0YlLUkpc2ltcGxpZnlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2Iy1JJWRpZmZHRjU2JC1GOTYkRiRGJ0YpRig+SSRkZGZHRiU3JC1GOTYkRjFGJy1GOTYkRjFGKUYoLUkiQ0dGJTYkJkY+NiNGKEkpb3B0aW1pemVHRiVGKC1GRTYkJkY+NiMiIiNGSUYoPkkkc29sR0YlLUkmc29sdmVHRjQ2JC8tSSVzdWJzR0Y1NiUvRidJInRHRiUvRilGWUYkSSJxR0YlRllGKA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KihJInVHNiIiIiJJInZHRiRGJSwmRiVGJSooSSZ0aGV0YUdGJEYlLCZGJUYlRiMhIiJGJSwmRiVGJUYmRitGJUYrRis= LCQqJiw0IiIiRiUqJkkmdGhldGFHNiJGJUkidkdGKEYlRiUqJkYnRiVJInVHRihGJUYlKiZGJyIiI0YpRiUhIiIqJkYnRi1GK0YlRi4qKEYnRi1GK0YlRilGJUYlKihGJ0YlRitGJUYpRiVGJSokRidGLUYlRichIiNGJSwsRi5GJUYnRiVGJkYuRipGLkYxRiUhIiRGLg== NyQsJiomLCpJJnRoZXRhRzYiIiIiKiRGJiIiIyEiIiomRiZGKkkidkdGJ0YoRigqJkYmRihGLUYoRihGKCwsRitGKEYmRihGLkYrKiZGJkYoSSJ1R0YnRihGKyooRiZGKEYxRihGLUYoRighIiRGKyooLDRGKEYoRi5GKEYwRihGLEYrKiZGJkYqRjFGKEYrKihGJkYqRjFGKEYtRihGKEYyRihGKUYoRiYhIiNGKEYvISIlLCZGJkYrRi5GKEYoIiIkLCYqJiwqRiZGKEYpRitGNkYoRjBGKEYoRi9GM0YrKihGNUYoRi9GOSwmRiZGK0YwRihGKEY7 t1 = (int) ((double) theta * (double) theta); t2 = (int) ((double) t1 * (double) v); t3 = (int) ((double) theta * (double) v); t5 = (int) ((double) theta * u); t6 = (int) ((double) t5 * (double) v); t7 = -1 + theta - t3 - t5 + t6; t8 = t7 * t7; t12 = (int) ((double) t1 * u); t16 = t8 * t8; t22 = -(theta - t1 + t2 + t3) / t8 / t7 + 3 * (1 + t3 + t5 - t2 - t12 + t12 * v + t6 + t1 - 2 * theta) / t16 * (-theta + t3); t1 = (int) ((double) theta * (double) theta); t2 = (int) ((double) t1 * u); t3 = (int) ((double) theta * u); t5 = (int) ((double) theta * (double) v); t6 = (int) ((double) t3 * (double) v); t7 = -1 + theta - t3 - t5 + t6; t8 = t7 * t7; t16 = t8 * t8; t22 = -(theta - t1 + t2 + t3) / t8 / t7 + 3 * (1 + t3 + t5 - t2 - t1 * v + t2 * v + t6 + t1 - 2 * theta) / t16 * (-theta + t3); NiQqJiwmKiZJInFHNiIiIiJJJnRoZXRhR0YnRihGKCokLChGJkYoRiUhIiIqJkYmIiIjRilGKEYoI0YoRi5GKEYoLCZGKEYoRiVGKEYsLCQqJiwmRiVGLEYqRihGKEYwRixGLA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYqLUYsNiVRJXN1YnNGJ0YvRjItRjY2JC1GIzYoLUYsNiVRJnRoZXRhRicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUkjbW9HRiQ2LVEiPUYnRkYvJSZmZW5jZUdGRS8lKnNlcGFyYXRvckdGRS8lKXN0cmV0Y2h5R0ZFLyUqc3ltbWV0cmljR0ZFLyUobGFyZ2VvcEdGRS8lLm1vdmFibGVsaW1pdHNHRkUvJSdhY2NlbnRHRkUvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0Zmbi1JI21uR0YkNiRRJDAuNUYnRkYtRkk2LVEiLEYnRkZGTC9GT0YxRlBGUkZURlZGWC9GZW5RJjAuMGVtRicvRmhuUSwwLjMzMzMzMzNlbUYnLUYsNiVRJHNvbEYnRi9GMi1GNjYmLUYjNiMtRmpuNiRRIjJGJ0ZGRkYvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGRkZdby1GLDYlUSJxRidGL0YyRkgtRmpuNiRRIjBGJ0ZGLUZJNi1RIy4uRidGRkZMRk5GUEZSRlRGVkZYL0ZlblEsMC4yMjIyMjIyZW1GJy9GaG5GYm8tRmpuNiRRIjFGJ0ZGRkYtRkk2LVEiO0YnRkZGTEZgb0ZQRlJGVEZWRlhGYW9GZ24= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdlbjckJCIiISEiIiQhIiEhIiI3JCQiMm1tO2E4QUJPIiEjPiQhMihRO0w4ZiQ9YSMhIz03JCQiMUxMJDNGV1lzIyEjPSQhMXgqb3RgOVxiJCEjPDckJCItRDFrJ3AzJSEjOSQhMic+WSlHRFxsSiUhIz03JCQiMW1tbVQmKUdcYSEjPSQhMXYwJTQ8cCFbXCEjPDckJCIsRCJHJFI8KSEjOCQhMkMoKjQ4YV9lKWYhIz03JCQiMkxMTCQzeCYpKjMiISM9JCExREJMaWQlKVJvISM8NyQkIixEYyd5TTshIzckITFDenomPjwqSCMpISM8NyQkIjJtbW1tVDooekAhIz0kIS9EV1QvIjRPKiEjOjckJCItRCJ5JSp6NyQhIzgkITJBViYpZT9mazQiISM8NyQkIjJOTExlOXVpMiUhIz0kITJHLG5LKWVnRjchIzw3JCQiMW5tbSJ6XyI0aSEjPCQhMmA8dD1TcytZIiEjPDckJCIxbW1tVCZwaE4pISM8JCEyMTIoKik0KFI4ayIhIzw3JCQiMktMJGUqPSlIXDUhIzwkITIwRD5GcHkiKnkiISM8NyQkIjJtbTt6LzN1QyIhIzwkITI3YzFSIT4sMT4hIzw3JCQiMikqKipcN0xSRFgiISM8JCExcyk9UDFnOywjISM7NyQkIjJsbTt6UidvazshIzwkITIxMk5GTT4iM0AhIzw3JCQiMikqKipcaTVgaCg9ISM8JCEyYSV6QSo+JSpRPiMhIzw3JCQiMk5MTCQzRW4kNCMhIzwkITAlcGVBLUh0QSEjOjckJCIybm1tVCFSRSZHIyEjPCQhMllvI3lJVitQQiEjPDckJCIrRC4mNF0jISM1JCExbS0vQyMzR1MjISM7NyQkIit2Ql88RiEjNSQhMlA0VDRNWU1ZIyEjPDckJCIrdidIaSNIISM1JCEyTyU9VDBiVDxEISM8NyQkIjJtbTt6KmV2OkohIzwkITAmNHYhUiUzakQhIzo3JCQiMUxMTDM0N1RMISM7JCExM2g+M3RzOEUhIzs3JCQiMUxMTExZLktOISM7JCEwMG5WMlpRbCMhIzo3JCQiLUQibzdUdiQhIzckITIxInAwN3RrKHAjISM8NyQkIjFMTEwkUSpvXVIhIzskITJYaV85dSQ0TUYhIzw3JCQiLUQiPWxqOyUhIzckITExJz4rYzc9eCMhIzs3JCQiLXZWJlI8UCUhIzckITEjXD0pUUFzMEchIzs3JCQiMk5MTGU5RWdlJSEjPCQhMUosYVQ6P1JHISM7NyQkIjJMTCRlUiIzR3klISM8JCExWTIjM3V4JG9HISM7NyQkIjJtbW1UNWtdKlwhIzwkITFRaVckcCwkKSpHISM7NyQkIjFtbSJ6UlFiQCYhIzskITEkKXBbbSM+eSNIISM7NyQkIi12PT5ZMmEhIzckITFMeSc0KltKX0ghIzs3JCQiMW1tO3pYdTljISM7JCEyJGVJR0AmM3coSCEjPDckJCIqJnkpKUdlISIqJCEyV3MicHUxYy1JISM8NyQkIjEqKioqXGlfUVFnISM7JCEyOWZLRmokKmUtJCEjPDckJCIxKioqXDd5JTNUaSEjOyQhMmFVbGFZQnYvJCEjPDckJCIxKioqKlxQIVtoWSchIzskITBrIik+Z0EwMiQhIzo3JCQiMUxMTCRReCRvbSEjOyQhMUBDUCRITS40JCEjOzckJCIrdi5JJSlvISM1JCExdnEnXExfMTYkISM7NyQkIjFtbSJ6cGUqenEhIzskITJiP3BLN2okR0ohIzw3JCQiK0RcJ1FIKCEjNSQhMlh3ZngtNHE5JCEjPDckJCIxS0xlOVM4JlwoISM7JCExV2MhPmYzUjskISM7NyQkIjEqKipcaT89YnEoISM7JCExI0h4ND9WND0kISM7NyQkIjFMTEwzcz82eiEjOyQhMV95PF8qM3E+JCEjOzckJCItREpYYUUiKSEjNyQhMUdLYiQpKVFLQCQhIzs3JCQiMW5tbW0qUlJMKSEjOyQhMU90dFQyTEdLISM7NyQkIjFtbTthPC5ZJikhIzskITJuSD4oW2VDVkshIzw3JCQiMUxMZTl0T2MoKSEjOyQhMiQzMmclSFl2RCQhIzw3JCQiKiZRa1wqKSEiKiQhMTFPPDJxRnFLISM7NyQkIjFMTCQzZGc2PCohIzskITE3YydIdzNXRyQhIzs3JCQiMW1tbW14R3AkKiEjOyQhMSUzJ0dYRWwnSCQhIzs3JCQiLUQib0swZSohIzckITFlNXohRzokNEwhIzs3JCQiLXY9NXMjeSohIzckITFWS3grTjJATCEjOzckJCIjNSEiIiQhMUxMTExMTExMISM7LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQiIiEhIiIkIiM1ISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJxNiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkNSYhIiItJSlCT1VORFNfWUc2IyQiJD8iISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlNU0hIiItJS5CT1VORFNfSEVJR0hURzYjJCIlP1EhIiItJSlDSElMRFJFTkc2Ig== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYzLUkjbWlHRiQ2JVEkc29sRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtRiw2JVEmc29sdmVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Ki1GLDYlUSdmYWN0b3JGJ0YvRjItRlM2JC1GIzYmLUYsNiVRJWRpZmZGJ0YvRjItRlM2JC1GIzYnLUYsNiVRJGNkZkYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRInVGJ0YvRjIvJStleGVjdXRhYmxlR0Y9RjlGOUZdcEY5RjktRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEicUYnRi9GMkZiby1GLDYlUSJ2RidGL0YyRl1wRjlGOS1GNjYtUSI7RidGOUY7RmVvRkBGQkZERkZGSEZmb0ZNLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRmdvLyUmZGVwdGhHRmBxLyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGZm8vRk5GZ28tRiw2JVElcGxvdEYnRi9GMi1GUzYkLUYjNiwtRiw2JVElc3Vic0YnRi9GMi1GUzYkLUYjNi4tRiw2JVEmdGhldGFGJy9GMEY9RjlGX3AtSSNtbkdGJDYkUSQwLjVGJ0Y5RmJvRmpvRl9wRl5zRmJvRistRlM2Ji1GIzYlLUZfczYkUSIyRidGOUZdcEY5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGXXBGOUY5RmJvRmJwRl9wLUZfczYkUSIwRidGOS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJ0Zbci1GX3M2JFEiMUYnRjlGXXBGOUY5RmhwRltxRmhxLUYsNiVRIkNGJ0YvRjItRlM2JC1GIzYoRitGYnNGYm8tRiw2JVEpb3B0aW1pemVGJ0YvRjJGXXBGOUY5RmhwRl1wRjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; NiQsJCooLDJJJnRoZXRhRzYiISIiKihJInFHRiciIiJGJiIiI0kidUdGJ0YrISIlKihGKkYrRiZGLEYtRixGLEYrRisqJkYqRitGJkYrISIjKihGKkYrRiZGK0YtRitGLComRipGK0YmRixGLCokLC5GK0YrKiRGJkYsRitGLyIiJUYyRjdGKUYuRiZGMSNGK0YsRitGK0YmRigsKkYoRitGMkYxKihGKkYrRiZGK0YtRixGK0YwRitGKEY4LCQqKCwyRiZGK0YpRjdGL0YxRihGK0YwRixGMkYxRjNGMUY0RitGK0YmRihGOUYoI0YoRiw= LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdTNyQkIiIhISIiJCIiISEiIjckJCIybW1tbVQ6KHpAISM9JCIyJkdiSXJJI0hWIyEjPTckJCIyTkxMZTl1aTIlISM9JCIxQlViSSxwP1ghIzw3JCQiMW5tbSJ6XyI0aSEjPCQiMXgpR2RGTSdSbyEjPDckJCIxbW1tVCZwaE4pISM8JCIxTHcyK0k2WSIqISM8NyQkIjJLTCRlKj0pSFw1ISM8JCIyayxqR3R1OzkiISM8NyQkIjJtbTt6LzN1QyIhIzwkIjF1WVAhbyM+XTghIzs3JCQiMikqKipcN0xSRFgiISM8JCIxNCtEciJvVWMiISM7NyQkIjJsbTt6UidvazshIzwkIjJYXFNZPCopUXkiISM8NyQkIjIpKioqXGk1YGgoPSEjPCQiMW4qPSFmMj0sPyEjOzckJCIyTkxMJDNFbiQ0IyEjPCQiMlo8J2ZPUztCQSEjPDckJCIybm1tVCFSRSZHIyEjPCQiMikpXCIpZU1EdlQjISM8NyQkIitELiY0XSMhIzUkIjE9KlxORGBeaiMhIzs3JCQiK3ZCXzxGISM1JCIyJyozUiVIQGFfRyEjPDckJCIrdidIaSNIISM1JCIxI29obFdyNTEkISM7NyQkIjJtbTt6KmV2OkohIzwkIjElW1ttLyhwXEshIzs3JCQiMUxMTDM0N1RMISM7JCIyTUlySVlxSlokISM8NyQkIjFMTExMWS5LTiEjOyQiMm40YGkkcCY9bSQhIzw3JCQiLUQibzdUdiQhIzckIjBVVyFRYHEhKVEhIzo3JCQiMUxMTCRRKm9dUiEjOyQiMk9FR250OlIyJSEjPDckJCItRCI9bGo7JSEjNyQiMjA/UEUmKj1hRyUhIzw3JCQiLXZWJlI8UCUhIzckIjE0JkdBRTprWyUhIzs3JCQiMk5MTGU5RWdlJSEjPCQiMjEmKT0wXXVkcCUhIzw3JCQiMkxMJGVSIjNHeSUhIzwkIjApKm9SMWZ4KVshIzo3JCQiMm1tbVQ1a10qXCEjPCQiMSw+SyNwKmYlNCYhIzs3JCQiMW1tInpSUWJAJiEjOyQiMUNnL2MqUSM0YCEjOzckJCItdj0+WTJhISM3JCIwT3doTV5mXCYhIzo3JCQiMW1tO3pYdTljISM7JCIxJGUjMzYrXihwJiEjOzckJCIqJnkpKUdlISIqJCIxTSQ0JFIkeWMhZiEjOzckJCIxKioqKlxpX1FRZyEjOyQiMSQqKSkqb1o2JDRoISM7NyQkIjEqKipcN3klM1RpISM7JCIxb1FNP2lOMWohIzs3JCQiMSoqKipcUCFbaFknISM7JCIvUClcWy9fXychIzk3JCQiMUxMTCRReCRvbSEjOyQiMXhqWlw9JT5zJyEjOzckJCIrdi5JJSlvISM1JCIxWXAlXHVMQCRwISM7NyQkIjFtbSJ6cGUqenEhIzskIjFOd0RVb3VBciEjOzckJCIrRFwnUUgoISM1JCIxKCk9WTkqSDhMKCEjOzckJCIxS0xlOVM4JlwoISM7JCIxX2xoWUMheV8oISM7NyQkIjEqKipcaT89YnEoISM7JCIxLUQ/UD1VTHghIzs3JCQiMUxMTDNzPzZ6ISM7JCIwImY7OWZzTXohIzo3JCQiLURKWGFFIikhIzckIjFyOyJcRiJ6WCIpISM7NyQkIjFubW1tKlJSTCkhIzskIjF2aGAmUjIlXCQpISM7NyQkIjFtbTthPC5ZJikhIzskIjEkeUdbPCwhZSYpISM7NyQkIjFMTGU5dE9jKCkhIzskIjB2UydcKmZfdykhIzo3JCQiKiZRa1wqKSEiKiQiMW5zMGBfMmMqKSEjOzckJCIxTEwkM2RnNjwqISM7JCIxMkJaZXVBdiIqISM7NyQkIjFtbW1teEdwJCohIzskIjEncGg3ZXU7UCohIzs3JCQiLUQib0swZSohIzckIjFZSC0kRy47ZSohIzs3JCQiLXY9NXMjeSohIzckIjF6OSRmMDdJeSohIzs3JCQiIzUhIiIkIiM1ISIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQiIiEhIiIkIiM1ISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJxNiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkSSUhIiItJSlCT1VORFNfWUc2IyQiJD8iISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlIVwkISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJWdNISIiLSUpQ0hJTERSRU5HNiI= t1 = (int) ((double) theta * (double) theta); t2 = (int) (q * (double) t1); t4 = 4 * t2 * u; t5 = u * u; t6 = t2 * t5; t8 = (int) (q * (double) theta); t10 = t8 * u; t11 = 2 * t10; t17 = sqrt((double) (1 + t1 + 4 * t6 + 4 * t10 - t4 - 2 * theta)); t26 = -((double) theta + (double) t4 - (double) (2 * t6) - 0.1e1 + (double) (2 * t8) - (double) t11 - (double) (2 * t2) + t17) / (double) theta / (double) (-1 - t11 + t8 * t5 + t8) / 0.2e1; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEkcGhpRicvJSdpdGFsaWNHUSZmYWxzZUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnRjIvJSZmZW5jZUdGMS8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0YxLyUqc3ltbWV0cmljR0YxLyUobGFyZ2VvcEdGMS8lLm1vdmFibGVsaW1pdHNHRjEvJSdhY2NlbnRHRjEvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZJLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGxvZ0YnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYnLUkjbW5HRiQ2JFEiMUYnRjItRjY2LVEoJm1pbnVzO0YnRjJGOUY7Rj1GP0ZBRkNGRS9GSFEsMC4yMjIyMjIyZW1GJy9GS0Zbby1GLDYlUSZ0aGV0YUYnRi9GMi1GNjYtUScmc2RvdDtGJ0YyRjlGO0Y9Rj9GQUZDRkUvRkhRJjAuMGVtRicvRktGZG8tRlU2JC1GIzYlRllGZ24tRiw2JVEidEYnL0YwUSV0cnVlRicvRjNRJ2l0YWxpY0YnRjJGMi1GIzYjRmpvLyUubGluZXRoaWNrbmVzc0dGZm4vJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZ3AvJSliZXZlbGxlZEdGMS1GNjYtUSI7RidGMkY5L0Y8Rl5wRj1GP0ZBRkNGRUZjb0ZKLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRmRvLyUmZGVwdGhHRmVxLyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0YyRjlGO0Y9Rj9GQUZDRkVGY29GZW8tRiw2JVEmc29sdmVGJ0ZdcEZfcC1GVTYkLUYjNidGKy1GNjYtUSI9RidGMkY5RjtGPUY/RkFGQ0ZFRkdGSi1GLDYlUSJ5RidGXXBGX3AtRjY2LVEiLEYnRjJGOUZfcUY9Rj9GQUZDRkVGY28vRktRLDAuMzMzMzMzM2VtRidGam9GMkZccQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCYiIiJGKyomSSZ0aGV0YUdGKEYrLCZGK0YrSSJ0R0YoISIiRitGMEYrRi9GMA== KiYsJi1JKUxhbWJlcnRXRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCooSSJ5R0YpIiIiSSZ0aGV0YUdGKSEiIi1JJGV4cEdGJjYjKihGLUYuLCZGMEYuRi9GLkYuRi9GMEYuRjBGMEY0Ri5GLkYtRjA= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElZGlmZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYnLUYsNiVRJHBoaUYnL0YwUSZmYWxzZUYnL0YzUSdub3JtYWxGJy1JI21vR0YkNi1RIixGJ0Y/LyUmZmVuY2VHRj4vJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGPi8lKnN5bW1ldHJpY0dGPi8lKGxhcmdlb3BHRj4vJS5tb3ZhYmxlbGltaXRzR0Y+LyUnYWNjZW50R0Y+LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRiw2JVEidEYnRi9GMi1GQjYtUSIkRidGP0ZFL0ZIRj5GSUZLRk1GT0ZRRlMvRldGVS1JI21uR0YkNiRRIjJGJ0Y/Rj8tRkI2LVEiO0YnRj9GRUZHRklGS0ZNRk9GUUZTL0ZXUSwwLjI3Nzc3NzhlbUYn LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqKEkmdGhldGFHNiIiIiMsJiIiIkYoKiZGJEYoLCZGKEYoSSJ0R0YlISIiRihGLCEiI0YrRixGLCooRiRGKEYnRixGK0YtRi0qJi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNGJ0YoRishIiRGJg== JSFH openturns-1.9/validation/src/Analytical.mw000066400000000000000000000761741307543307100210110ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZhci1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSJ5RidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoLUYjNiUtRiw2JVEiRkYnRi9GMi1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tSSVtc3VwR0YkNiUtRiw2JVEiTEYnRi9GMi1GIzYjLUkjbW5HRiQ2JFEiM0YnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYjNidGZXBGam8tRiw2JVEiWUYnRi9GMkZqby1GLDYlUSJKRidGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZpcS8lKWJldmVsbGVkR0Y9LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRJXZhcnNGJ0YvRjJGX28tSShtZmVuY2VkR0YkNiYtRiM2KUZecS1GNjYtUSIsRidGOUY7RmFyRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Znb0ZqckZgcEZqckZhcUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRjVGT0Znbi1GLDYlUSlncmFkaWVudEYnRi9GMkZfby1GLDYlUSZhcnJheUYnRi9GMi1GZnI2JC1GIzYlLUZmcDYkRmZxRjktRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRidGW28tRmZwNiRRIjRGJ0Y5RjlGNUZPRmduLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGX3VGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GLDYlUSJpRidGL0YyRmduLUY2Ni9RJWZyb21GJ0ZcdUZedUZgdUY7Rj5GQEZCRkRGRkZIRmpuRltvRmduRl90RmduLUY2Ni9RI3RvRidGXHVGXnVGYHVGO0Y+RkBGQkZERkZGSEZqbkZbb0ZnbkZmdEZnbi1GNjYvUSNkb0YnRlx1Rl51RmB1RjtGPkZARkJGREZGRkhGam5GW29GT0ZnbkZnbkZnbkZlcy1GZnI2Ji1GIzYjRmJ1RjlGX3NGYnNGX28tRiw2JVElZGlmZkYnRi9GMi1GZnI2JC1GIzYmRlxvRmpyRmJyRl52RjlGXnJGT0Znbi1GNjYvUSNvZEYnRlx1Rl51RmB1RjtGPkZARkJGREZGRkhGam5GW29GNUZPRmduLUYsNiVRJnByaW50RidGL0YyLUZmcjYkLUYjNiQtRiw2JVEkbWFwRidGL0YyLUZmcjYkLUYjNiUtRiw2JVEmZXZhbGZGJ0YvRjJGanJGZXNGOUY5Rl5yRk9GT0Znbi1GLDYlUShoZXNzaWFuRidGL0YyRl9vRmhzLUZmcjYkLUYjNilGX3RGYXRGZnRGanJGX3RGYXRGZnRGOUY1Rk9GZ25GaXRGZ25GYnVGZ25GZXVGZ25GX3RGZ25GaHVGZ25GZnRGZ25GW3ZGT0ZnbkZpdEZnbi1GLDYlUSJqRidGL0YyRmduRmV1RmduRl90RmduRmh1RmduRmJ1RmduRlt2Rk9GZ25GZ25GZ25GXXgtRmZyNiYtRiM2JUZidUZqckZkeEY5Rl9zRmJzRl9vRmJ2LUZmcjYkLUYjNidGYnZGZXZGanJGYnItRmZyNiYtRiM2I0ZkeEY5Rl9zRmJzRjlGXnJGT0ZnbkZpdkY1Rk9GZ25GaXZGNUZPRmduRlx3LUZmcjYkLUYjNiRGY3ctRmZyNiQtRiM2JUZqd0ZqckZdeEY5RjlGXnJGZ24= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKkkiRkc2IiIiIkkiTEdGJSIiJEkiWUdGJSEiIkkiSkdGJUYqI0YmRig= PTYiNiM7IiIiIiIlRVxbbCVGJiwkKipJIkZHRiNGJkkiTEdGIyIiJEkiWUdGIyEiI0kiSkdGIyEiIiQhK0xMTExMISM1IiIjLCQqKEYsRi1GLkYxRjBGMSQiK0xMTExMRjRGLSoqRitGJkYsRjVGLkYxRjBGMUYnLCQqKkYrRiZGLEYtRi5GMUYwRi9GMg== PTYiNiQ7IiIiIiIlRiVFXFtsKzYkIiIjRiokIiIhRiw2JEYnIiIkLCQqKkkiRkdGI0YmSSJMR0YjRipJIllHRiMhIiJJIkpHRiMhIiMkRjRGLDYkRiZGJiwkKipGMUYmRjJGLkYzISIkRjVGNCQiK25tbW1tISM1NiRGJ0YqLCQqKEYyRi5GM0Y0RjVGNiQhK0xMTExMRj42JEYuRiYsJCoqRjFGJkYyRipGM0Y2RjVGNEY3NiRGLkYqKihGMkYqRjNGNEY1RjQ2JEYnRicsJCoqRjFGJkYyRi5GM0Y0RjVGO0Y8NiRGKkYmLCQqKEYyRi5GM0Y2RjVGNEZCNiRGLkYuLCQqKkYxRiZGMkYmRjNGNEY1RjQkRipGLDYkRidGJiwkKipGMUYmRjJGLkYzRjZGNUY2JCIrTExMTExGPg== JSFH openturns-1.9/validation/src/Bessel.mw000066400000000000000000002221161307543307100201320ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZbby1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSdhc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2KS1GLDYlUSNudUYnL0YwRj1GOS1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIjBGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEieEYnRi9GMkZob0ZbcEY5LUY2Ni1RIjtGJ0Y5RjtGYnBGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSJ6RidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoRmVwLUYjNiNGZG8vJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRltyLyUpYmV2ZWxsZWRHRj1GNUZPRmduLUYsNiVRJWRpZmZGJ0YvRjItRmBvNiQtRiM2JUZbcUZfcEZlcEY5RmhwRk9GZ24tRiw2JVEjenpGJ0YvRjJGXnEtRiw2JVElc3FydEYnRmdvRjktRmBvNiQtRiM2Jy1GXHA2JEZocUY5LUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GZ3NGW3EtRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRltxRjlGNUZPRmduRmByLUZgbzYkLUYjNiVGZ3JGX3BGZXBGOUZocEZPRmduLUYsNiVRJGV0YUYnRmdvRjlGXnFGZ3JGY3MtRiw2JVEkbG9nRidGZ29GOS1GYG82JC1GIzYjLUZicTYoRltxLUYjNiVGYXNGY3NGZ3JGZnFGaXFGXHJGXnJGOUY1Rk9GZ25GYHItRmBvNiQtRiM2JUZgdEZfcEZlcEY5RmhwRk9GZ24tRiw2JVEicEYnRi9GMkZecS1GYnE2KEZhcy1GIzYjRmdyRmZxRmlxRlxyRl5yRmhwRk9GZ24tRiw2JVEiZkYnRi9GMkZecS1GYnE2KC1GIzYmLUklbXN1cEdGJDYlLUZgbzYkLUYjNiMtRmJxNigtRiw2JVEjUGlGJ0Znb0Y5LUYjNiUtRlxwNiRRIjJGJ0Y5RmlzRmRvRmZxRmlxRlxyRl5yRjktRiM2Iy1GYnE2KEZhcy1GIzYjRl53RmZxRmlxRlxyRl5yLyUxc3VwZXJzY3JpcHRzaGlmdEdGXnBGaXMtRiw2JVEkZXhwRidGZ29GOS1GYG82JC1GIzYmLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZmc0Zoc0Zkb0Zpc0ZgdEY5LUYjNiRGanItRmBvNiRGZ3VGOUZmcUZpcUZcckZeckZpcy1GYG82JC1GIzYpRmFzLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZnNGaHMtRmJxNigtRiM2JUZidUZpcy1GYG82JC1GIzYnLUZccDYkUSIzRidGOUZbeS1GXHA2JFEiNUYnRjlGaXMtRmF2NiVGYnVGZXdGZ3dGOS1GIzYlLUZccDYkUSMyNEYnRjlGaXNGZG9GZnFGaXFGXHJGXnJGY3MtRmJxNigtRiM2JUZcekZpcy1GYG82JC1GIzYrLUZccDYkUSM4MUYnRjlGW3ktRlxwNiRRJDQ2MkYnRjlGaXNGXHpGY3MtRlxwNiRRJDM4NUYnRjlGaXMtRmF2NiVGYnUtRiM2Iy1GXHA2JFEiNEYnRjlGZ3dGOS1GIzYlLUZccDYkUSUxMTUyRidGOUZpcy1GYXY2JS1GLDYlUSUmbnU7RidGZ29GOUZld0Znd0ZmcUZpcUZcckZeckZbeS1GYnE2KC1GIzYlLUZhdjYlRmJ1LUYjNiNGZnlGZ3dGaXMtRmBvNiQtRiM2Ly1GXHA2JFEmMzAzNzVGJ0Y5Rlt5LUZccDYkUSczNjk2MDNGJ0Y5RmlzRlx6RmNzLUZccDYkUSc3NjU3NjVGJ0Y5RmlzRmRbbEZbeS1GXHA2JFEnNDI1NDI1RidGOUZpcy1GYXY2JUZidS1GIzYjLUZccDYkUSI2RidGOUZnd0Y5LUYjNiUtRlxwNiRRJzQxNDcyMEYnRjlGaXMtRmF2NiVGYlxsRltdbEZnd0ZmcUZpcUZcckZeckY5RmhwRk9GZ24tRiw2JVEpc2ltcGxpZnlGJ0YvRjItRmBvNiQtRiM2JEZgci1GYG82JC1GIzYlRml1Rl9wRmVwRjlGOUZocA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiRJJG51fGlyRzYiISIi KigsJiIiIkYkKiZJI3h8aXJHNiIiIiNJJG51fGlyR0YnISIjRiQjISIiRihGJkYkRilGKg== LCYqKCwmIiIiRiUqJkkjeHxpckc2IiIiI0kkbnV8aXJHRighIiNGJSMhIiJGKUYnRiVGKkYrRiUqKiwmKiZGKkYtLCZGJUYlKiRGJCNGJUYpRiVGLUYlKipGJ0YpRiohIiRGMUYrRiRGLEYtRiVGJ0YtRipGJUYxRiVGJQ== KiQsJiIiIkYkKiZJI3h8aXJHNiIiIiNJJG51fGlyR0YnISIjRiQjISIiRig= LCQqLCIiIyMiIiJGJComSSNQaUclKnByb3RlY3RlZEdGJkkkbnV8aXJHNiIhIiJGJS1JJGV4cEc2JEYpSShfc3lzbGliR0YrNiMsJComRipGJiwmKiQsJkYmRiYqJkkjeHxpckdGK0YkRiohIiNGJkYlRiYtSSNsbkdGLzYjKihGOEYmRipGLCwmRiZGJkY1RiZGLEYmRiZGLEYmLCpGJkYmKihGNiNGLEYkLCYiIiRGJiokRjZGLCEiJkYmRipGLCNGLCIjQyooRjZGLCwoIiMiKUYmRkQhJGklKiRGNkY5IiQmUUYmRipGOSNGJiIlXzYqKEY2IyEiJEYkLCoiJnYuJEYmRkQhJy4ncCRGTCInbGR3KiRGNkZSISdEYVVGJkYqRlIjRiwiJz9aVEYmRjYjRiwiIiVGJQ== LCQqMCxgciokSSRudXxpckc2IiIjNyImPyJwKiRJI3h8aXJHRidGKCInUzVKKiRGJiIjNSElQ0EqJEYrRi4iJl1dKSomRiYiIzZGKyIiIyIoU20oXComRiYiIipGKyIiJSIpKztXNyomRiYiIihGKyIiJyIpKykpZTsqJkYmIiImRisiIilGOSomRiYiIiRGK0YuRjUqJkYrRihGJiIiIiInUyVIKSomRitGNEYmRjsiJzMnXCUqJkYrRkBGJkZEISdERUAqJkYrRjRGJkY3Iic/PkMqJkYrRi5GJkZEISYrcyoqJkYrRjhGJkY/ISglMyQqUiomRitGPEYmRkIiKGV4VSQqJkYrRjhGJkY7IichRzYnKiZGK0ZARiZGQiEmPyRlKiZGK0Y8RiZGPyInPzZUKiZGJkYuRitGNCInU21sKiZGJkZARitGOCIoK2tDIyomRiZGPEYrRjwiKCs7IVEqJkYmRjhGK0ZAIigrZ1gkKiZGJkY0RitGLiIoP1ZpIiomRiZGQEYrRjQiJy80QComRiZGPEYrRjghJ1cpPiMqJkYmRjhGK0Y8ISdZaSoqKiZGJkY0RitGQCEnQyN5JSokRiYiIzhGRSokRiZGMyIlISlHKiYsJiokRiZGNEZEKiRGK0Y0RkQjRkRGNEYrRkBGSSomRitGLkZpb0ZccEZNKiZGJkYuRmlvRlxwRmdvKiZGJkY3RmlvRlxwRi8qJkYrRihGaW9GXHBGRSomRiZGKEZpb0ZccEZFKiZGJkYzRmlvRlxwRikqKEYrRjRGaW9GXHBGJkZARksqKEZpb0ZccEYmRjxGK0Y0RkcqKEZpb0ZccEYmRjhGK0Y4Rk8qKEZpb0ZccEYmRjRGK0Y8RlEqKEYrRjhGaW9GXHBGJkY8RlMqKEYrRjxGaW9GXHBGJkY4RlcqKEYrRkBGaW9GXHBGJkY0RlUqKEYmRjtGaW9GXHBGK0Y0IidHSkAqKEYmRj9GaW9GXHBGK0Y4ISdzSFYqKEYmRkJGaW9GXHBGK0Y8ISd1S2MqKEYmRkRGaW9GXHBGK0ZARjEqKEYrRjRGaW9GXHBGJkYuRjUqKEYrRjhGaW9GXHBGJkZARjkqKEYrRjxGaW9GXHBGJkY8Rj0qKEYrRkBGaW9GXHBGJkY4RjkqKEYrRi5GaW9GXHBGJkY0RjUqKEYmRjdGaW9GXHBGK0Y0Iic/dmUqKEYmRjtGaW9GXHBGK0Y4IighKSllOyooRiZGP0Zpb0ZccEYrRjwiKD9GOSMqKEYmRkJGaW9GXHBGK0ZAIighRzg4KihGJkZERmlvRlxwRitGLkYsRkQtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRic2IywkKiRGaW9GXHAhIiJGRClGKywmRiZGZ3JGZ3JGREZEKSwmRiZGREZmckZELCZGJkZERmdyRkRGREkjUGlHRmJyRlxwRjRGXHBGaW8jISNCRjgjRmdyRmlx LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYyLUkjbWlHRiQ2JVEiZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJGV4cEYnL0YwRj1GOS1JKG1mZW5jZWRHRiQ2JC1GIzYnLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZmbi1GLDYlUSJ4RidGL0YyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZfby1GLDYlUSVjb3NoRidGUkY5LUZUNiQtRiM2Iy1GLDYlUSJ0RidGL0YyRjlGOUZbb0Zhby1GVDYkLUYjNiUtRiw2JVEjbnVGJ0ZSRjlGW29GaG9GOS1GNjYtUSI7RidGOUY7L0Y/RjFGQEZCRkRGRkZIRl5vRk0tSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGX28vJSZkZXB0aEdGW3EvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2JVEiZ0YnRi9GMkY1LUYsNiVRKXNpbXBsaWZ5RidGL0YyLUZUNiQtRiM2JC1GLDYlUSdleHBhbmRGJ0YvRjItRlQ2JC1GIzYkLUYsNiVRKGNvbnZlcnRGJ0YvRjItRlQ2JC1GIzYmLUYsNiVRJWRpZmZGJ0YvRjItRlQ2JC1GIzYlRistRjY2LVEiLEYnRjlGO0ZlcEZARkJGREZGRkhGXm8vRk5RLDAuMzMzMzMzM2VtRidGaG5GOUZic0ZPRjlGOUY5RmJwLUZncDYmRmlwRlxxRl5xL0ZhcVElYXV0b0YnLUYsNiNRIUYn LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiZJI3h8aXJHRigiIiItSSVjb3NoR0YlNiNJInRHRihGLSEiIkYtLUYvNiMqJkkkbnV8aXJHRihGLUYxRi1GLQ== LCotSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywqKiZJI3h8aXJHRigiIiItRiQ2I0kidEdGKEYtIyEiIiIiIyomRixGLS1GJDYjLCRGMEYyRi1GMUYwRi0qJkkkbnV8aXJHRihGLUYwRi1GLSNGMiIiJS1GJDYjLCpGK0YxRjRGMUYwRi1GOEYyRjotRiQ2IywqRitGMUY0RjFGOEYtRjBGMkY6LUYkNiMsKkYrRjFGNEYxRjBGMkY4RjJGOg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JVEiaEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJnNvbHZlRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiotSSZtZnJhY0dGJDYoLUkjbW5HRiQ2JFEiMUYnRjktRmVuNiRRIjRGJ0Y5LyUubGluZXRoaWNrbmVzc0dGZ24vJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGX28vJSliZXZlbGxlZEdGPS1GNjYtUTEmSW52aXNpYmxlVGltZXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORmhvLUklbXN1cEdGJDYlLUY2Ni1RLyZFeHBvbmVudGlhbEU7RidGOUY7Rj5GQEZCRkRGRkZIRmdvL0ZOUSwwLjExMTExMTFlbUYnLUYjNi8tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmhwLUZYNihGWi1GZW42JFEiMkYnRjlGW29GXW9GYG9GYm9GZG8tRiw2JVEieEYnRi9GMi1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGZ29GaW9GZG8tRltwNiVGXXAtRiw2JVEidEYnRi9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZncEZpcEZncUZdci1GLDYlUSUmbnU7RicvRjBGPUY5RmJxRmdxRmpxLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRKGVwc2lsb25GJ0ZjckY5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGZ28vRk5RLDAuMzMzMzMzM2VtRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZnb0Zpb0ZncUY5RmBzLUY2Ni1RKWFzc3VtaW5nRidGOUY7Rj5GQEZCRkRGRkZIRmdvRmlvRmBzRmdyLUY2Ni1RIj5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZlbjYkRlxyRjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYsKC1JKUxhbWJlcnRXRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCooSSN4fGlyR0YpIiIiLCZGLkYuSSRudXxpckdGKUYuISIiLUkkZXhwR0YmNiMqJi1JI2xuR0YmNiMsJEkoZXBzaWxvbkdGKSIiJUYuRi9GMUYuI0YxIiIjRjEqJkYkRi5GMEYuRjFGNkYuRi5GL0Yx LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYrLUYsNiVRJXN1YnNGJ0YvRjItRjY2JC1GIzYsLUYsNiVRInhGJ0YvRjItSSNtb0dGJDYtUSI9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZMLyUpc3RyZXRjaHlHRkwvJSpzeW1tZXRyaWNHRkwvJShsYXJnZW9wR0ZMLyUubW92YWJsZWxpbWl0c0dGTC8lJ2FjY2VudEdGTC8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmVuLUkjbW5HRiQ2JFEiMUYnRkgtRkU2LVEiLEYnRkhGSi9GTkYxRk9GUUZTRlVGVy9GWlEmMC4wZW1GJy9GZ25RLDAuMzMzMzMzM2VtRictRiw2JVEjbnVGJy9GMEZMRkhGRC1GaW42JFEjMTBGJ0ZIRlxvLUZFNi1RIn5GJ0ZIRkpGTUZPRlFGU0ZVRldGYG8vRmduRmFvLUkmbWZyYWNHRiQ2KC1GIzYuLUZFNi1RKiZ1bWludXMwO0YnRkhGSkZNRk9GUUZTRlVGVy9GWlEsMC4yMjIyMjIyZW1GJy9GZ25GaHAtRiw2JVEpTGFtYmVydFdGJ0Znb0ZILUY2NiQtRiM2KUZkcEZobkZcb0ZkcC1GYHA2KEZobi1GaW42JFEiMkYnRkgvJS5saW5ldGhpY2tuZXNzR0Zbby8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZqcS8lKWJldmVsbGVkR0ZMLUZFNi1RJyZzZG90O0YnRkhGSkZNRk9GUUZTRlVGV0Zgb0ZecC1GYHA2KC1GIzYmRkFGX3ItRkU2LVExJkludmlzaWJsZVRpbWVzO0YnRkhGSkZNRk9GUUZTRlVGV0Zgb0ZecC1JJW1zdXBHRiQ2JS1GRTYtUS8mRXhwb25lbnRpYWxFO0YnRkhGSkZNRk9GUUZTRlVGV0Zgby9GZ25RLDAuMTExMTExMWVtRictRmBwNigtRiM2Iy1GIzYlLUYsNiVRI2xuRidGZ29GSC1GRTYtUTAmQXBwbHlGdW5jdGlvbjtGJ0ZIRkpGTUZPRlFGU0ZVRldGYG9GXnAtRjY2JC1GIzYlLUZpbjYkUSI0RidGSEZfci1GLDYlUS0mdmFyZXBzaWxvbjtGJ0Znb0ZIRkgtRiM2JUZobi1GRTYtUSIrRidGSEZKRk1GT0ZRRlNGVUZXRmdwRmlwLUYsNiVRJSZudTtGJ0Znb0ZIRmZxRmhxRltyRl1yLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZndEZmcUZocUZbckZdckZILUZFNi1RKCZtaW51cztGJ0ZIRkpGTUZPRlFGU0ZVRldGZ3BGaXBGanAtRjY2JC1GIzYpRmRwRmhuRlxvRmRwRmFxRmZyRmJyRkhGZnJGX3JGXHVGaXRGZ3MtRjY2JC1GIzYmRmF0Rl9yRmZyRmR0RkhGZ3RGZnFGaHFGW3JGXXJGSEZcb0ZbcC1GLDYlUShlcHNpbG9uRidGZ29GSEZELUZpbjYkUSsxZSZtaW51czs1RidGSC1GRTYtUSMuLkYnRkhGSkZNRk9GUUZTRlVGV0ZncEZecC1GaW42JFErMWUmbWludXM7M0YnRkhGSA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdYNyQkIiM1ISInJCIrWUJfVVshIio3JCQiK20meiVSOiEjOSQiK3BrQ01bISIqNyQkIitKImYqeT8hIzkkIisxV1ZHWyEiKjckJCIrJ3BRJT1FISM5JCIrO0klUiNbISIqNyQkIitpIz16OiQhIzkkIitXekY/WyEiKjckJCIrTFtyJzQlISM5JCIrUidlXiJbISIqNyQkIisvOV5OXSEjOSQiK1x2MjZbISIqNyQkIitOakciNCchIzkkIituWEgyWyEiKjckJCIrazcxWnIhIzkkIituVTUvWyEiKjckJCIrWXlncyMqISM5JCIrOTQpKSl6JSEiKjckJCIrM18hKVE2ISM4JCIrZlh0JXolISIqNyQkIituUiRcTCIhIzgkIitNUl4ieiUhIio3JCQiK1FSLFE6ISM4JCIrX0lqKXklISIqNyQkIitNJlIhWzwhIzgkIipBP2d5JSEiKTckJCIrdjpSZD4hIzgkIitYVXEkeSUhIio3JCQiKyMpZXRzQCEjOCQiK1E5YyJ5JSEiKjckJCIrbDdUaUIhIzgkIispM1IpelohIio3JCQiK0EzJWZkIyEjOCQiK09YMHlaISIqNyQkIiteck0heiMhIzgkIitBQVN3WiEiKjckJCIreXQncCpIISM4JCIrb0kjXHglISIqNyQkIitSJClmJT0kISM4JCIrYk5tdFohIio3JCQiKypwNHhTJCEjOCQiKyJ5Y0F4JSEiKjckJCIrKEc5bmYkISM4JCIrKGVMNnglISIqNyQkIithOmQ7USEjOCQiK15zKilwWiEiKjckJCIqXCM9NlMhIzckIipaZilvWiEiKTckJCIrSDpxQ1UhIzgkIitfZXhuWiEiKjckJCIrW0AtR1chIzgkIipcI3ptWiEiKTckJCIrJSllO1NZISM4JCIrI0c3ZXclISIqNyQkIitlKylcJFshIzgkIitsKVxcdyUhIio3JCQiK2pNNlhdISM4JCIrJ3ljU3clISIqNyQkIis5SVFqXyEjOCQiKy1uO2paISIqNyQkIil0UWBhISM2JCIrJW8/Q3clISIqNyQkIitMcmZlYyEjOCQiKyQpR2toWiEiKjckJCIrcyopZnFlISM4JCIrd3cnM3clISIqNyQkIipULCF5ZyEjNyQiK1FfOGdaISIqNyQkIitMUm55aSEjOCQiK3kkXCVmWiEiKjckJCIrZGxbLGwhIzgkIitGQ3JlWiEiKjckJCIqaCRwLG4hIzckIiokNDJlWiEiKTckJCIrcnRYOnAhIzgkIit6aVNkWiEiKjckJCIrNiJmIjRyISM4JCIrbDUjb3YlISIqNyQkIit3aSM0SyghIzgkIisieSk+Y1ohIio3JCQiK3VFPT92ISM4JCIrbCFIY3YlISIqNyQkIitDSVlHeCEjOCQiKjBcXXYlISIpNyQkIitPXjRLeiEjOCQiKzZsXGFaISIqNyQkIisnM3pfOSkhIzgkIitrRSRSdiUhIio3JCQiK24wZ10kKSEjOCQiK01JU2BaISIqNyQkIitQOWRnJikhIzgkIitvVihHdiUhIio3JCQiK1RPISlvKCkhIzgkIiswQ09fWiEiKjckJCIrN3U5ZyopISM4JCIrJUgtPnYlISIqNyQkIitsKlsleiIqISM4JCIreWxRXlohIio3JCQiKyopW2Z2JCohIzgkIipRTjR2JSEiKTckJCIrYXRzJWUqISM4JCIrQVZZXVohIio3JCQiKzRRKlt5KiEjOCQiK1FGLV1aISIqNyQkIiM1ISIlJCIrJyp5YlxaISIqLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQiIzUhIickIiM1ISIlJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1UScmIzk0OTs2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJmZhbHNlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1Enbm9ybWFsNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkIVwhIiItJSlCT1VORFNfWUc2IyQiIyEpISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlK0whIiItJS5CT1VORFNfSEVJR0hURzYjJCIlcU0hIiItJSlDSElMRFJFTkc2Ig== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElaGVscEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRKUxhbWJlcnRXRicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnRj8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY0LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZQNiZGUkZVRlgvRmVuUSVhdXRvRictRiw2JVEiZkYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRJGV4cEYnL0YwRj1GOS1JKG1mZW5jZWRHRiQ2JC1GIzYnLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZecC1GLDYlUSJ6RidGL0YyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVElY29zaEYnRmRvRjktRmZvNiQtRiM2Iy1GLDYlUSJ0RidGL0YyRjlGOUZjcC1JJW1zdXBHRiQ2JS1GZm82JC1GIzYkLUYsNiVRJXNpbmhGJ0Zkb0Y5RltxRjktRiM2JS1JI21uR0YkNiRRIjJGJ0Y5RmNwLUYsNiVRI251RidGZG9GOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZmcEZNRk8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZmcEZncC1GLDYlUSVmbWF4RidGL0YyRl5vLUYsNiVRKGNvbWJpbmVGJ0YvRjItRmZvNiQtRiM2KUZhb0Zlb0ZjcEZhby1GZm82JC1GIzYqRl5yRmNwRmJyRmNwLUZfcjYkRmdyRjlGY3BGXHNGX3FGOS1GNjYtUSIsRidGOUY7RltzRkBGQkZERkZGSEZmcC9GTlEsMC4zMzMzMzMzZW1GJ0Zhb0Y5Rmhy LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiZJInpHRigiIiItSSVjb3NoR0YlNiNJInRHRihGLSEiIkYtKS1JJXNpbmhHRiVGMCwkSSNudUdGKCIiI0Yt LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJComSSJ6R0YnIiIiLUklY29zaEdGJDYjSSJ0R0YnRiwhIiI= LUkmc29sdmVHNiI2JC9JJWZtYXhHRiRJKGVwc2lsb25HRiRJInRHRiQ= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkoYXJjY29zaEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQqJi1JI2xuR0YkNiNJKGVwc2lsb25HRiciIiJJInpHRichIiJGMQ== KiYtSSVzcXJ0RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJI1BpR0YmIiIiLUkmR0FNTUFHRiU2IyNGKyIiIyEiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiIi JSFH openturns-1.9/validation/src/BurrFactory.mw000066400000000000000000001452221307543307100211610ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYvLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYtLUYsNiVRInhGJ0YvRjItRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRImtGJ0YvRjJGZ29Gam9GXnAtRiw2JVEiY0YnRi9GMkZnb0Zqb0Y5LUY2Ni1RIjtGJ0Y5RjtGYXBGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSRwZGZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJm1mcmFjR0YkNigtRiM2J0ZncC1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW29GZHBGaHEtSSVtc3VwR0YkNiVGZG8tRiM2JUZncC1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmRyLUZbcDYkUSIxRidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHRl1wLUYjNiMtRlxyNiUtRmBvNiQtRiM2JUZmci1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmNyRmVyLUZccjYlRmRvLUYjNiNGZ3BGaXJGOS1GIzYlRmRwRmNzRmZyRmlyLyUubGluZXRoaWNrbmVzc0dGaHIvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYHQvJSliZXZlbGxlZEdGPUZqcA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KipJI2N8aXJHNiIiIiJJI2t8aXJHRiRGJSlJI3h8aXJHRiQsJkYjRiUhIiJGJUYlKSwmRiVGJSlGKEYjRiUsJkYmRiVGJUYlRio= PkknbG9nUERGRzYiLUknZXhwYW5kRyUqcHJvdGVjdGVkRzYjLUkkbG9nRzYkRidJKF9zeXNsaWJHRiQ2I0kkcGRmR0Yk LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCwtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSNjfGlyR0YoIiIiLUYkNiNJI2t8aXJHRihGKyomLCZGKkYrISIiRitGKy1GJDYjSSN4fGlyR0YoRitGKyomLUYkNiMsJkYrRispRjRGKkYrRitGLkYrRjFGNkYx QyQ+SS5sb2dMaWtlbGlob29kRzYiLUkkc3VtR0YlNiQtSSVzdWJzRyUqcHJvdGVjdGVkRzYkL0kieEdGJSZJIlhHRiU2I0kiaUdGJUknbG9nUERGR0YlL0YyOyIiIkkiTkdGJUY2 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqJkkiTkc2IiIiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNJI2N8aXJHRiVGJkYmKiZGJEYmLUYoNiNJI2t8aXJHRiVGJkYmLUkkc3VtR0YpNiQsKiomLUYoNiMsJkYmRiYpJkkiWEdGJTYjSSJpR0YlRi1GJkYmRjFGJiEiIkY3Rj8qJi1GKDYjRjtGJkYtRiZGJkZBRj8vRj47RiZGJEYm QyY+SSRlcUNHNiItSSVkaWZmRyUqcHJvdGVjdGVkRzYkSS5sb2dMaWtlbGlob29kR0YlSSJjR0YlIiIiLUknZmFjdG9yRzYkRihJKF9zeXNsaWJHRiU2I0YkRiw= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkiTkc2IiIiIkkjY3xpckdGJSEiIkYmLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQsKCoqKSZJIlhHRiU2I0kiaUdGJUYnRiYtSSNsbkdGKzYjRjJGJiwmRiZGJkYxRiZGKEkja3xpckdGJUYmRigqKEYxRiZGNkYmRjlGKEYoRjZGJi9GNTtGJkYkRiY= KiYsJkkiTkc2IiIiIiomLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQsJCooLUkjbG5HRio2IyZJIlhHRiU2I0kiaUdGJUYmLCYqJilGM0kjY3xpckdGJUYmSSNrfGlyR0YlRiZGJiEiIkYmRiYsJkYmRiZGOUYmRjxGPC9GNjtGJkYkRiZGOkYmRiZGJkY6Rjw= PkkkZXFLRzYiLUklZGlmZkclKnByb3RlY3RlZEc2JEkubG9nTGlrZWxpaG9vZEdGJEkia0dGJA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkiTkc2IiIiIkkja3xpckdGJSEiIkYmLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQsJC1JI2xuR0YrNiMsJkYmRiYpJkkiWEdGJTYjSSJpR0YlSSNjfGlyR0YlRiZGKC9GODtGJkYkRiY= QyQ+SSVzb2xLRzYiLUkmc29sdmVHRiU2JEkkZXFLR0YlSSJrR0YlIiIi LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Warning, solve may be ignoring assumptions on the input variables. LCQqJkkiTkc2IiIiIi1JJHN1bUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkLCQtSSNsbkdGKTYjLCZGJkYmKSZJIlhHRiU2I0kiaUdGJUkjY3xpckdGJUYmISIiL0Y2O0YmRiRGOEY4 LUklc3Vic0clKnByb3RlY3RlZEc2JC9JImtHNiJJJXNvbEtHRihJJGVxQ0dGKA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkiTkc2IiIiIkkjY3xpckdGJSEiIkYmLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQsKCosKSZJIlhHRiU2I0kiaUdGJUYnRiYtSSNsbkdGKzYjRjJGJiwmRiZGJkYxRiZGKEYkRiYtRio2JCwkLUY3NiNGOUYoL0Y1O0YmRiRGKEYmKihGMUYmRjZGJkY5RihGKEY2RiZGP0Ym JSFH openturns-1.9/validation/src/CMakeLists.txt000066400000000000000000000067341307543307100211160ustar00rootroot00000000000000# -*- cmake -*- install (FILES ValidSolveLinearSystemRect.sce AbdoRackwitz.txt Cas1_eads.txt Cas1.txt Cas2.txt Cas3_eads.txt Cas4.txt Cas5.txt Cas6.txt Cas7_eads.txt CoefficientOfVariation.txt Curvature.txt Debye.txt DefaultDistribution.txt DirectionalSampling.txt dProb.txt equality_constrained_quadratic_quadratic.txt GeneralizedNataf.txt IntegrationND.txt InverseErf.txt lambda_U.txt LambertW.txt NonCentralStudent.txt PSORM.txt qnorm.txt Sensibilite_ref1.txt Sensibilite_ref2.txt Sensibilite_ref3.txt SensibiliteValidBeta.txt SinhTanh.txt Student2D.txt ti.txt truncnorm.txt ValidAbdoMixture.txt ValidAndersonDarling.txt ValidBeta.txt ValidBoundConstrainedAlgoithm.txt ValidChiSquare.txt ValidClaytonCopula.txt ValidConditionalArchimedean.txt ValidCovarianceAlgorithm.txt ValidCovarianceGauss.txt ValidCovarianceMatrixLapack.sce ValidCovariance.txt ValidCramerVonMises.txt ValidDiff.txt ValidDistFunc.txt ValidDistribution.txt ValidElliptical.txt validElliptical.sce validEnumerate.txt ValidEpanechnikov.txt ValidEstimatedTruncatedNormal.txt ValidEstimateLogistic.txt ValidEstimate.txt ValidExponential.txt ValidFORMKernelMixture.txt ValidFrankCopula.txt ValidGammaEstimate.txt ValidGamma.txt ValidGeometric.txt ValidGumbelCopula.txt ValidGumbelEstimate.txt ValidGumbel.txt ValidHisto.txt ValidIndependentCopula.txt ValidInverseIsoprobabilisticTransformationEllipticalCopula.txt ValidInverseNatafCopula2.txt ValidInverseNatafCopula.txt ValidIsoProbabilisicTransformationEllipticalCopula.txt ValidLeastSquareAlgorithm.txt ValidLinearCombination.txt ValidLaplace.txt ValidLogistic.txt ValidLogNormal.txt ValidMultiNomial.txt ValidMultiStudent.txt ValidNatafEllipticalcopula.txt ValidNormal1.txt ValidNormalCopula.txt ValidNumericalSample.R ValidOrthogonalProductFactory.txt ValidOrthogonalUniVariateFactory.txt ValidPoisson.txt ValidPoutreArticle.txt ValidProductFunction.txt ValidSampleComputation.sce ValidQuadraticFunction.txt ValidQuadraticTaylor.txt ValidRayleigh.txt valid_SORM.txt ValidSpecFunc.txt ValidStudentEstimate.txt ValidStudent.txt ValidTriangular.txt ValidTruncatedNormalFactory.txt ValidTruncatedNormal.txt ValidUniform.txt ValidUniVariatePolynomial.txt ValidWeibull.txt ValidWilks.txt Variance.txt Weibull_moment.txt ziggurat_exponential.txt ziggurat_exponential.mws ziggurat_normal.txt ziggurat_normal.mws ValidZipfMandelbrot.mw DESTINATION ${OPENTURNS_VALIDATION_PATH} ) openturns-1.9/validation/src/Cas1.mws000066400000000000000000000152621307543307100176710ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 175 "restart:\nDigits:=1 00:\nphi:=proc(x,mu,sigma)\n 1/(sqrt(2*Pi)*sigma^2)*exp(-(x-mu)^ 2/(2*sigma^2))\nend:\nPHI:=proc(x,mu,sigma)\n int(phi(t,mu,sigma ),t=-infinity..x)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 122 "LOGN:=proc(x,mu,sigma)\n PHI((ln(x)-mu)/sigma,0,1)\nend:\nlogn :=proc(x,mu,sigma)\n diff(LOGN(x,mu,sigma),x)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "logn(x,mu,sigma);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&#\"\"\"\"\"#F&*,%#PiG#!\"\"F'-%$expG6#,$*&#F&F'F &*&,&-%#lnG6#%\"xGF+%#muGF&F'%&sigmaG!\"#F&F+F&F'F%F7F+F9F+F&F&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 619 "sol:=allvalues(solve(\{exp( 1/2*sigma_l^2+mu_l)=mu,exp(1/2*sigma_l^2+mu_l)*sqrt(exp(1/2*sigma_l^2) -1)=sigma\},\{mu_l,sigma_l\}));\nPdef:=(Int(\n Int(\n \+ Int(\n Int(\n Int(\n int(\n \+ (logn(x1,mu1,sigma1)*\n logn(x2,mu1,sig ma2)*\n logn(x3,mu1,sigma3)*\n logn( x4,mu1,sigma4)*\n logn(x5,mu1,sigma5)*\n \+ logn(x6,mu1,sigma6)),\n x1=a..2*x2+2*x3+1*x4-5*x 5-5*x6),\n x2=a..b),\n x3=a..b),\n \+ x4=a..b),\n x5=a..b),\n x6=a..b));" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG6$<$ /%%mu_lG-%#lnG6#*&%#muG\"\"$,&*$)F-\"\"#\"\"\"F3*$)%&sigmaGF2F3F3!\"\" /%(sigma_lG*&F2#F3F2-F*6#*&F/F3F-!\"#F;<$F'/F9,$F:F7" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%PdefG-%$IntG6$-F&6$-F&6$-F&6$-F&6$,$*&#\"\"\"\"#; F3*<\"\"##F3F6,&*B-%$erfG6#,$*&F7F3*(F6F7,&-%#lnG6#,,*&F6F3%#x2GF3F3*& F6F3%#x3GF3F3%#x4GF3*&\"\"&F3%#x5GF3!\"\"*&FKF3%#x6GF3FMFM%$mu1GF3F3%' sigma1GFMF3F3F3-%$expG6#,$*&#F3F6F3*&%'sigma2G!\"#-FB6#FFF6F3FMF3)FF*& FYFZFPF3F3-FS6#,$*(F6FMFYFZFPF6FMF3-FS6#,$*&#F3F6F3*&%'sigma3GFZ-FB6#F HF6F3FMF3)FH*&FcoFZFPF3F3-FS6#,$*(F6FMFcoFZFPF6FMF3-FS6#,$*&#F3F6F3*&% 'sigma4GFZ-FB6#FIF6F3FMF3)FI*&FbpFZFPF3F3-FS6#,$*(F6FMFbpFZFPF6FMF3-FS 6#,$*&#F3F6F3*&%'sigma5GFZ-FB6#FLF6F3FMF3)FL*&FaqFZFPF3F3-FS6#,$*(F6FM FaqFZFPF6FMF3-FS6#,$*&#F3F6F3*&%'sigma6GFZ-FB6#FOF6F3FMF3)FO*&F`rFZFPF 3F3-FS6#,$*(F6FMF`rFZFPF6FMF3F3*.-FS6#,$*&#F3F6F3*&,&FenFMFPF3F6FYFZF3 FMF3-FS6#,$*&#F3F6F3*&,&FdoFMFPF3F6FcoFZF3FMF3-FS6#,$*&#F3F6F3*&,&FcpF MFPF3F6FbpFZF3FMF3-FS6#,$*&#F3F6F3*&,&FbqF3FPFMF6FaqFZF3FMF3-FS6#,$*&# F3F6F3*&,&FarF3FPFMF6F`rFZF3FMF3-F;6#,$*&F7F3*(F6F7,&-FB6#%\"aGF3FPFMF 3FQFMF3F3F3F3F3%#PiG#!\"&F6FFFMFYFMFHFMFcoFMFIFMFbpFMFLFMFaqFMFOFMF`rF MF3FM/FF;Feu%\"bG/FHFju/FIFju/FLFju/FOFju" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 620 "mu1:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l));\n sigma1:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l));\nmu2:=evalf(sub s(sol[1],mu=120.,sigma=12.,mu_l));\nsigma2:=evalf(subs(sol[1],mu=120., sigma=12.,sigma_l));\nmu3:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l)); \nsigma3:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l));\nmu4:=evalf(s ubs(sol[1],mu=120.,sigma=12.,mu_l));\nsigma4:=evalf(subs(sol[1],mu=120 .,sigma=12.,sigma_l));\nmu5:=evalf(subs(sol[1],mu=50.,sigma=15.,mu_l)) ;\nsigma5:=evalf(subs(sol[1],mu=50.,sigma=15.,sigma_l));\nmu6:=evalf(s ubs(sol[1],mu=40.,sigma=12.,mu_l));\nsigma6:=evalf(subs(sol[1],mu=40., sigma=12.,sigma_l));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu1G$\"_q ,wSLt\"Rl)Gn>r(e#[()\\#QpsZ9QT(>B0F\"4r1B)*ypd&[*R6z()G>TTvx%!#**" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'sigma1G$\"_q-cB#*3$>%>4#Q)o)>iX)eX^ <$G!***)zldwC4edRp!)\\uEb9#z=(3L^qp59!$+\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu2G$\"_q,wSLt\"Rl)Gn>r(e#[()\\#QpsZ9QT(>B0F\"4r1B)* ypd&[*R6z()G>TTvx%!#**" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'sigma2G$ \"_q-cB#*3$>%>4#Q)o)>iX)eX^<$G!***)zldwC4edRp!)\\uEb9#z=(3L^qp59!$+\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu3G$\"_q,wSLt\"Rl)Gn>r(e#[()\\ #QpsZ9QT(>B0F\"4r1B)*ypd&[*R6z()G>TTvx%!#**" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'sigma3G$\"_q-cB#*3$>%>4#Q)o)>iX)eX^<$G!***)zldwC4edR p!)\\uEb9#z=(3L^qp59!$+\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu4G$ \"_q,wSLt\"Rl)Gn>r(e#[()\\#QpsZ9QT(>B0F\"4r1B)*ypd&[*R6z()G>TTvx%!#** " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'sigma4G$\"_q-cB#*3$>%>4#Q)o)>iX )eX^<$G!***)zldwC4edRp!)\\uEb9#z=(3L^qp59!$+\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu5G$\"_qL<_+9A>TfBAbWD`$*fpR!ex$p\\0;lOpbo7hy+2XsTx is$4(=4`%e#Q!#**" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'sigma5G$\"_qk`w EGSP>.$y21w:UjE\"Q(yY=poRib*ftk\"GLAv#HQJzy.K3_'pq::%!$+\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu6G$\"_q)\\z,I(*>rv,*QGw()y,'3s;qkE$G)f. 6&e&R*y5W-wa@760(R)G(yv,Fg$!#**" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%' sigma6G$\"_qk`wEGSP>.$y21w:UjE\"Q(yY=poRib*ftk\"GLAv#HQJzy.K3_'pq::%!$ +\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "expand(evalf(subs(a= 0.01,b=0.02,Pdef)));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%$IntG6$-F$6$ -F$6$-F$6$,$,$-F$6$,&*:$\"_q'=g&f\"R6.i%3vHxt'R`oL'Q`M-dyO4#!$/*\"\"\")%#x2G$\"_qC0MOh?u'ek9\">L->L-0p)\\AN#>y)HpgOt GwK!e%)z:lIlF**y(>v%p!R#!#(*F5-%$erfG6#,&*&$\"_q=31*Hv\"\\(=foA7DS^&eH \"RvJ#)f?*pwWZ,=2IuB%=4P#>th%[2dtjC,&!#**F5-%#lnG6#,,*&$\"\"#\"\"!F5F7 F5F5*&FHF5%#x3GF5F5%#x4GF5*&$\"\"&FJF5%#x5GF5!\"\"*&$FPFJF5%#x6GF5FRF5 F5$\"_qZ?]%o-$fA]G&Rt:qFL]#Qm#zgWS3V]#p`PY/h\\\"*Ruxn()RBMJ2`s%R#!#)*F RF5-%$expG6#,$*&$\"_q#4.7spc9jl2#>0Ch5Tb_T_\\Z*))e^s5d+(*Qyo>l@fm-?KEy ,FzC^#FXF5)-FD6#F7FIF5FRF5-FZ6#,$*&$\"_q#4.7spc9jl2#>0Ch5Tb_T_\\Z*))e^ s5d+(*Qyo>l@fm-?KEy,FzC^#FXF5)-FD6#FLFIF5FRF5)FL$\"_qC0MOh?u'ek9\">L-> L-0p)\\AN#>y)HpgOtGwK!e%)z:lIlF**y(>v%p+CF:F5-FZ6#,$*&$\"_q#4.7spc9jl2 #>0Ch5Tb_T_\\Z*))e^s5d+(*Qyo>l@fm-?KEy,FzC^#FXF5)-FD6#FMFIF5FRF5)FMFgo F5-FZ6#,$*&$\"_q7c!\\o&**p[c3()RCzYWn-)G=;&H+8%GhR%\\e()3_E2s7aYnw69HJ E)4!HFBF5)-FD6#FQFIF5FRF5)FQ$\"_q#*='>P#)471,&obU#>_Wp5'f%>U\"3nft#GsQ !*>JI]l$[))oBcCiDJH\">x#FXF5-FZ6#,$*&$\"_q7c!\\o&**p[c3()RCzYWn-)G=;&H +8%GhR%\\e()3_E2s7aYnw69HJE)4!HFBF5)-FD6#FUFIF5FRF5)FUF]qF5F5*8$\"_qJ2 cf\"R6.i%3vHxt'R`oL'Q`M-dyO4#F4F5F6F5FYF5F]oF5 FfoF5FioF5FbpF5FcpF5F\\qF5F_qF5FhqF5F5/F7;$F5!\"#$FIF_r*,$\"_q]HpAy&4+ v$fPIUE/BKDdL]#QcQo$HPL1w%)*z]D4vGCP(=(oV&H_AW5FXF5FLFRFMFRFQFRFUFRF5/ FLF]r/FMF]r/FQF]r/FUF]r" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 " " }}}}{MARK "0 0 0" 9 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas1.txt000066400000000000000000000275661307543307100177140ustar00rootroot00000000000000> restart: > Digits:=100: > phi:=proc(x,mu,sigma) > 1/(sqrt(2*Pi)*sigma^2)*exp(-(x-mu)^2/(2*sigma^2)) > end: > PHI:=proc(x,mu,sigma) > int(phi(t,mu,sigma),t=-infinity..x) > end: > LOGN:=proc(x,mu,sigma) > PHI((ln(x)-mu)/sigma,0,1) > end: > logn:=proc(x,mu,sigma) > diff(LOGN(x,mu,sigma),x) > end: > logn(x,mu,sigma); 2 (-ln(x) + mu) 1/2 exp(-1/2 --------------) 2 2 sigma 1/2 ----------------------------- 1/2 Pi x sigma > sol:=allvalues(solve({exp(1/2*sigma_l^2+mu_l)=mu,exp(1/2*sigma_l^2+mu_ > l)*sqrt(exp(1/2*sigma_l^2)-1)=sigma},{mu_l,sigma_l})); > Pdef:=(Int( > Int( > Int( > Int( > Int( > int( > (logn(x1,mu1,sigma1)* > logn(x2,mu1,sigma2)* > logn(x3,mu1,sigma3)* > logn(x4,mu1,sigma4)* > logn(x5,mu1,sigma5)* > logn(x6,mu1,sigma6)), > x1=a..2*x2+2*x3+1*x4-5*x5-5*x6), > x2=a..b), > x3=a..b), > x4=a..b), > x5=a..b), > x6=a..b)); > 3 mu 1/2 %1 1/2 sol := {mu_l = ln(---), sigma_l = 2 ln(---) }, %1 2 mu 3 mu 1/2 %1 1/2 {mu_l = ln(---), sigma_l = -2 ln(---) } %1 2 mu 2 2 %1 := mu + sigma b b b b b / / / / / / | | | | | | | | | | | | 1/2 | Pdef := | | | | | -1/16 2 | | | | | | | | | | | | \ / / / / / a a a a a 1/2 2 (-ln(2 x2 + 2 x3 + x4 - 5 x5 - 5 x6) + mu1) erf(1/2 ------------------------------------------------) sigma1 / mu1 \ |-------| 2 | 2| 2 ln(x2) \sigma2 / mu1 exp(-1/2 -------) x2 exp(- ---------) 2 2 sigma2 2 sigma2 / mu1 \ |-------| 2 | 2| 2 ln(x3) \sigma3 / mu1 exp(-1/2 -------) x3 exp(- ---------) 2 2 sigma3 2 sigma3 / mu1 \ |-------| 2 | 2| 2 ln(x4) \sigma4 / mu1 exp(-1/2 -------) x4 exp(- ---------) 2 2 sigma4 2 sigma4 / mu1 \ |-------| 2 | 2| 2 ln(x5) \sigma5 / mu1 exp(-1/2 -------) x5 exp(- ---------) 2 2 sigma5 2 sigma5 / mu1 \ |-------| 2 | 2| 2 ln(x6) \sigma6 / mu1 exp(-1/2 -------) x6 exp(- ---------) + 2 2 sigma6 2 sigma6 2 2 (-ln(x2) + mu1) (-ln(x3) + mu1) exp(-1/2 ----------------) exp(-1/2 ----------------) 2 2 sigma2 sigma3 2 2 (-ln(x4) + mu1) (ln(x5) - mu1) exp(-1/2 ----------------) exp(-1/2 ---------------) 2 2 sigma4 sigma5 \ | 2 1/2 | (ln(x6) - mu1) 2 (ln(a) - mu1) | / exp(-1/2 ---------------) erf(1/2 ------------------)| / ( 2 sigma1 | / sigma6 / 5/2 Pi x2 sigma2 x3 sigma3 x4 sigma4 x5 sigma5 x6 sigma6) dx2 dx3 dx4 dx5 dx6 > mu1:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l)); > sigma1:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l)); > mu2:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l)); > sigma2:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l)); > mu3:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l)); > sigma3:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l)); > mu4:=evalf(subs(sol[1],mu=120.,sigma=12.,mu_l)); > sigma4:=evalf(subs(sol[1],mu=120.,sigma=12.,sigma_l)); > mu5:=evalf(subs(sol[1],mu=50.,sigma=15.,mu_l)); > sigma5:=evalf(subs(sol[1],mu=50.,sigma=15.,sigma_l)); > mu6:=evalf(subs(sol[1],mu=40.,sigma=12.,mu_l)); > sigma6:=evalf(subs(sol[1],mu=40.,sigma=12.,sigma_l)); > mu1 := 4.7775414119288779113994855769789823067109127052319741381\ 44772693824987482587711967288653917333407601 sigma1 := 0.1410697051330871879214552674498069395758092476576579\ 899902831751455884562198688382091941930892235602 mu2 := 4.7775414119288779113994855769789823067109127052319741381\ 44772693824987482587711967288653917333407601 sigma2 := 0.1410697051330871879214552674498069395758092476576579\ 899902831751455884562198688382091941930892235602 mu3 := 4.7775414119288779113994855769789823067109127052319741381\ 44772693824987482587711967288653917333407601 sigma3 := 0.1410697051330871879214552674498069395758092476576579\ 899902831751455884562198688382091941930892235602 mu4 := 4.7775414119288779113994855769789823067109127052319741381\ 44772693824987482587711967288653917333407601 sigma4 := 0.1410697051330871879214552674498069395758092476576579\ 899902831751455884562198688382091941930892235602 mu5 := 3.8258453091870937262774172450700786112685569366516054969\ 37758039695993532544552223594119221400521733 sigma5 := 0.4151570696520832037879313829275223328164735995562396\ 869184678738126634215760607783031937402826765364 mu6 := 3.6027017578728839705111221547602441078939558511035982832\ 66470167208601788776283890175711997300179498 sigma6 := 0.4151570696520832037879313829275223328164735995562396\ 869184678738126634215760607783031937402826765364 > expand(evalf(subs(a=0.01,b=0.02,Pdef))); 0.02 0.02 0.02 0.02 / / / / | | | | | | | | | | | | 10.442252295436871873724287509255\ | | | | | | | | / / / / 0.01 0.01 0.01 0.01 0799847606333729368385638250335725322304264230375937500095\ 0.02 / | 7822692950/(x3 x4 x5 x6) | 0.209367819403727254079308\ | / 0.01 8776308477890822693716722917570234533863368533967377297508\ -804 239.06947519778992765306515798\ 462031139159560186 10 x2 4580327628733660692987819235224986905023319023319114645867\ 4206136340524 erf(5.01246373570748461731923709184237430071\ 8014744766992059823175391295855140251222685918749175299060\ 818 ln(2. x2 + 2. x3 + x4 - 5. x5 - 5. x6) - 23.9472530731\ 3423398767777439914961044637536925043084044607926638250332\ 770157339528502259302684502047) exp(-25.124792701782632200\ 2665921651968783897005710725158889474952415255411061240519\ 2 2076563145669721203092 ln(x2) ) exp(-25.124792701782632200\ 2665921651968783897005710725158889474952415255411061240519\ 2 240.06947519778992765306\ 2076563145669721203092 ln(x3) ) x3 5157984580327628733660692987819235224986905023319023319114\ 6458674206136340524 exp(-25.124792701782632200266592165196\ 8783897005710725158889474952415255411061240519207656314566\ 2 240.06947519778992765306515798458032\ 9721203092 ln(x4) ) x4 7628733660692987819235224986905023319023319114645867420613\ 6340524 exp(-2.9009826312914117667465412720726520887584943\ 96128413002951618288026744467924398708564869995684905612 2 27.71912931256224562368884836550303119903872282\ ln(x5) ) x5 735967081421945961069445219242556850106120982371961892 exp(- 2.90098263129141176674654127207265208875849439612841300295\ 2 27.\ 1618288026744467924398708564869995684905612 ln(x6) ) x6 7191293125622456236888483655030311990387228273596708142194\ 5961069445219242556850106120982371961892 + 0.2093678194037\ 2725407930887763084778908226937167229175702345338633685339\ -804 239.069475197789927\ 67377297508462031139159560731 10 x2 6530651579845803276287336606929878192352249869050233190233\ 191146458674206136340524 exp(-25.1247927017826322002665921\ 6519687838970057107251588894749524152554110612405192076563\ 2 145669721203092 ln(x2) ) exp(-25.1247927017826322002665921\ 6519687838970057107251588894749524152554110612405192076563\ 2 240.069475197789927653065157984\ 145669721203092 ln(x3) ) x3 5803276287336606929878192352249869050233190233191146458674\ 206136340524 exp(-25.1247927017826322002665921651968783897\ 0057107251588894749524152554110612405192076563145669721203\ 2 240.069475197789927653065157984580327628733\ 092 ln(x4) ) x4 6606929878192352249869050233190233191146458674206136340524 exp(-2.900982631291411766746541272072652088758494396128413\ 2 002951618288026744467924398708564869995684905612 ln(x5) ) x5^ 27.7191293125622456236888483655030311990387228273596708142\ 1945961069445219242556850106120982371961892 exp(-2.9009826\ 3129141176674654127207265208875849439612841300295161828802\ 2 27.719129312\ 6744467924398708564869995684905612 ln(x6) ) x6 5622456236888483655030311990387228273596708142194596106944\ 5219242556850106120982371961892 dx2 dx3 dx4 dx5 dx6 > openturns-1.9/validation/src/Cas1_eads.mws000066400000000000000000000034131307543307100206600ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 506 "restart:\nPdef:=Int (\n Int(\n Int(\n Int(\n Int( \n Int(\n Heaviside(x1+2*x2+2*x3+x4-5* x5-5*x6+\n 1/1000*(sin(100*x1)+sin(100*x2)+ sin(100*x3)+sin(100*x4)+sin(100*x5)+sin(100*x6)))*\n \+ 1/sqrt(2*Pi)*exp(-(x1^2)/(2*sigma1^2)),\n x1= 0..infinity),\n x2=0..infinity),\n x3=0..infin ity),\n x4=0..infinity),\n x5=0..infinity),\n x6= 0..infinity);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%PdefG-%$IntG6$-F&6 $-F&6$-F&6$-F&6$-F&6$,$*&#\"\"\"\"\"#F5**-%*HeavisideG6#,:%#x1GF5*&F6F 5%#x2GF5F5*&F6F5%#x3GF5F5%#x4GF5*&\"\"&F5%#x5GF5!\"\"*&FCF5%#x6GF5FE*& #F5\"%+5F5-%$sinG6#,$*&\"$+\"F5FF5F5F5F5 *&FIF5-FL6#,$*&FPF5F@F5F5F5F5*&FIF5-FL6#,$*&FPF5FAF5F5F5F5*&FIF5-FL6#, $*&FPF5FDF5F5F5F5*&FIF5-FL6#,$*&FPF5FGF5F5F5F5F5F6F4%#PiG#FEF6-%$expG6 #,$*(F6FEFF^p/F@F^p/FAF ^p/FDF^p/FGF^p" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 65 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas1_eads.txt000066400000000000000000000027531307543307100206770ustar00rootroot00000000000000> restart: > Pdef:=Int( > Int( > Int( > Int( > Int( > Int( > Heaviside(x1+2*x2+2*x3+x4-5*x5-5*x6+ > > 1/1000*(sin(100*x1)+sin(100*x2)+sin(100*x3)+sin(100*x4)+sin(100*x5)+si > n(100*x6)))* > 1/sqrt(2*Pi)*exp(-(x1^2)/(2*sigma1^2)), > x1=0..infinity), > x2=0..infinity), > x3=0..infinity), > x4=0..infinity), > x5=0..infinity), > x6=0..infinity); infinity infinity infinity infinity infinity / / / / / | | | | | Pdef := | | | | | | | | | | / / / / / 0 0 0 0 0 infinity / | | 1/2 Heaviside(x1 + 2 x2 + 2 x3 + x4 - 5 x5 - 5 x6 | / 0 + 1/1000 sin(100 x1) + 1/1000 sin(100 x2) + 1/1000 sin(100 x3) + 1/1000 sin(100 x4) 1/2 + 1/1000 sin(100 x5) + 1/1000 sin(100 x6)) 2 2 x1 / 1/2 exp(- ---------) / Pi dx1 dx2 dx3 dx4 dx5 dx6 2 / 2 sigma1 > openturns-1.9/validation/src/Cas2.mws000066400000000000000000073564111307543307100177050ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "restart:\nN:=3;\nG:= x[1]-sum(x[i]^2/i,i=2..N):" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"NG\" \"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "Gu:=expand(subs(x[1] =1/2+1/10*u[1],seq(x[i]=1/5+1/10*u[i],i=2..N),G)):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "L:=1/2*sum(u[i]^2,i=1..N)+lambda*Gu:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "sol:=fsolve(\{seq(diff(L,u[i ]),i=1..N),diff(L,lambda)\},\{seq(u[i],i=1..N),lambda\});" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<&/&%\"uG6#\"\"#$\"+()*[QU\"!\"*/&F(6#\" \"\"$!+w3ieTF-/&F(6#\"\"$$\"+)>c " 0 "" {MPLTEXT 1 0 36 "subs(sol,[seq(u[i],i=1..N),l ambda]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!+w3ieT!\"*$\"+()*[QU\" F&$\"+)>c " 0 "" {MPLTEXT 1 0 417 "with(plots):\nwith(plottools):\np1:=implicitplot3d(-Gu,u[1]=-5. .0,u[2]=-10..10,u[3]=-10..10,grid=[31,31,31],style=PATCHNOGRID,axes=fr amed,scaling=constrained):\np2:=pointplot3d([subs(sol,[seq(u[i],i=1..N )]),[seq(0,i=1..N)]],symbol=circle,symbolsize=20,color=red):\np3:=spac ecurve(subs(sol,[seq(u[i]*t,i=1..N)]),t=0..1,color=black):\np4:=sphere ([seq(0,i=1..N)],sqrt(subs(sol,sum(u[i]^2,i=1..N)))):\ndisplay3d([p1,p 2,p3,p4]);" }}{PARA 7 "" 1 "" {TEXT -1 43 "Warning, the name arrow has been redefined\n" }}{PARA 7 "" 1 "" {TEXT -1 43 "Warning, the name ar row has been redefined\n" }}{PARA 13 "" 1 "" {GLPLOT3D 1539 929 929 {PLOTDATA 3 "6(-%+ISOSURFACEG6$X0%)anythingG6\"6\"[gl'!%\"!!%gb\\hl\"@ \"@\"@\"%C014000000000000C024000000000000C0240000000000003FE1111111111 112C014000000000000C024000000000000C022AAAAAAAAAAAB3FDFF3DD1BAF98D9C01 4000000000000C024000000000000C0215555555555563FDDF623A67EAC31C01400000 0000000C024000000000000C0200000000000013FDC28F5C28F5C2BC01400000000000 0C024000000000000C01D5555555555573FDA8C536FE1A8C7C014000000000000C0240 00000000000C01AAAAAAAAAAAAC3FD9203CAE759205C014000000000000C0240000000 00000C0180000000000013FD7E4B17E4B17E6C014000000000000C024000000000000C 0155555555555563FD6D9B1DF623A69C014000000000000C024000000000000C012AAA AAAAAAAAB3FD5FF3DD1BAF98EC014000000000000C024000000000000C010000000000 0003FD5555555555556C014000000000000C024000000000000C00AAAAAAAAAAAAB3FD 4DBF86A314DC0C014000000000000C024000000000000C0055555555555563FD493271 04EE2CDC014000000000000C024000000000000C0000000000000013FD47AE147AE147 CC014000000000000C024000000000000BFF55555555555583FD49327104EE2CDC0140 00000000000C024000000000000BFE555555555555B3FD4DBF86A314DC0C0140000000 00000C024000000000000BCC80000000000003FD5555555555556C014000000000000C 0240000000000003FE555555555554F3FD5FF3DD1BAF98EC014000000000000C024000 0000000003FF55555555555523FD6D9B1DF623A69C014000000000000C024000000000 0003FFFFFFFFFFFFFFC3FD7E4B17E4B17E5C014000000000000C024000000000000400 55555555555533FD9203CAE759204C014000000000000C024000000000000400AAAAAA AAAAAA83FDA8C536FE1A8C6C014000000000000C024000000000000400FFFFFFFFFFFF D3FDC28F5C28F5C29C014000000000000C0240000000000004012AAAAAAAAAAA93FDDF 623A67EAC2EC014000000000000C02400000000000040155555555555543FDFF3DD1BA F98D8C014000000000000C0240000000000004017FFFFFFFFFFFF3FE1111111111111C 014000000000000C024000000000000401AAAAAAAAAAAAA3FE240795CEB2408C014000 000000000C024000000000000401D5555555555553FE3882771660550C014000000000 000C02400000000000040200000000000003FE4E81B4E81B4E9C014000000000000C02 400000000000040215555555555553FE66054F43E32D2C014000000000000C02400000 00000004022AAAAAAAAAAAA3FE7F0D4629B7F0DC014000000000000C02400000000000 04023FFFFFFFFFFFF3FE9999999999999C014000000000000C022AAAAAAAAAAABC0240 000000000003FDEDCBA98765434C014000000000000C022AAAAAAAAAAABC022AAAAAAA AAAAB3FDCAE759203CAEAC014000000000000C022AAAAAAAAAAABC0215555555555563 FDAB0BC1CD2DE42C014000000000000C022AAAAAAAAAAABC0200000000000013FD8E38 E38E38E3CC014000000000000C022AAAAAAAAAAABC01D5555555555573FD746EBE635D AD8C014000000000000C022AAAAAAAAAAABC01AAAAAAAAAAAAC3FD5DAD524C9C416C01 4000000000000C022AAAAAAAAAAABC0180000000000013FD49F49F49F49F7C01400000 0000000C022AAAAAAAAAAABC0155555555555563FD3944A55B66C7AC01400000000000 0C022AAAAAAAAAAABC012AAAAAAAAAAAB3FD2B9D6480F2B9FC014000000000000C022A AAAAAAAAAABC0100000000000003FD20FEDCBA98767C014000000000000C022AAAAAAA AAAABC00AAAAAAAAAAAAB3FD19690E0857FD1C014000000000000C022AAAAAAAAAAABC 0055555555555563FD14DBF86A314DEC014000000000000C022AAAAAAAAAAABC000000 0000000013FD13579BE02468DC014000000000000C022AAAAAAAAAAABBFF5555555555 5583FD14DBF86A314DEC014000000000000C022AAAAAAAAAAABBFE555555555555B3FD 19690E0857FD1C014000000000000C022AAAAAAAAAAABBCC80000000000003FD20FEDC BA98767C014000000000000C022AAAAAAAAAAAB3FE555555555554F3FD2B9D6480F2B9 FC014000000000000C022AAAAAAAAAAAB3FF55555555555523FD3944A55B66C7AC0140 00000000000C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FD49F49F49F49F6C0140000000 00000C022AAAAAAAAAAAB40055555555555533FD5DAD524C9C415C014000000000000C 022AAAAAAAAAAAB400AAAAAAAAAAAA83FD746EBE635DAD7C014000000000000C022AAA AAAAAAAAB400FFFFFFFFFFFFD3FD8E38E38E38E3AC014000000000000C022AAAAAAAAA AAB4012AAAAAAAAAAA93FDAB0BC1CD2DE3FC014000000000000C022AAAAAAAAAAAB401 55555555555543FDCAE759203CAE9C014000000000000C022AAAAAAAAAAAB4017FFFFF FFFFFFF3FDEDCBA98765433C014000000000000C022AAAAAAAAAAAB401AAAAAAAAAAAA A3FE09DC598153D10C014000000000000C022AAAAAAAAAAAB401D5555555555553FE1E 573AC901E58C014000000000000C022AAAAAAAAAAAB40200000000000003FE3456789A BCDF1C014000000000000C022AAAAAAAAAAAB40215555555555553FE4BDA12F684BDBC 014000000000000C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE64E209DC59815C014000 000000000C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE7F6E5D4C3B2A2C014000000000 000C021555555555556C0240000000000003FDBE02468ACF137C014000000000000C02 1555555555556C022AAAAAAAAAAAB3FD9B1DF623A67EDC014000000000000C02155555 5555556C0215555555555563FD7B425ED097B45C014000000000000C02155555555555 6C0200000000000013FD5E6F8091A2B3FC014000000000000C021555555555556C01D5 555555555573FD44A55B66C77DBC014000000000000C021555555555556C01AAAAAAAA AAAAC3FD2DE3EF5006119C014000000000000C021555555555556C0180000000000013 FD1A2B3C4D5E6FAC014000000000000C021555555555556C0155555555555563FD097B 425ED097DC014000000000000C021555555555556C012AAAAAAAAAAAB3FCF7A80308B9 145C014000000000000C021555555555556C0100000000000003FCE26AF37C048D4C01 4000000000000C021555555555556C00AAAAAAAAAAAAB3FCD33F5617839A8C01400000 0000000C021555555555556C0055555555555563FCCA252ADB363C1C01400000000000 0C021555555555556C0000000000000013FCC71C71C71C71FC014000000000000C0215 55555555556BFF55555555555583FCCA252ADB363C2C014000000000000C0215555555 55556BFE555555555555B3FCD33F5617839A8C014000000000000C021555555555556B CC80000000000003FCE26AF37C048D4C014000000000000C0215555555555563FE5555 55555554F3FCF7A80308B9144C014000000000000C0215555555555563FF5555555555 5523FD097B425ED097DC014000000000000C0215555555555563FFFFFFFFFFFFFFC3FD 1A2B3C4D5E6F9C014000000000000C02155555555555640055555555555533FD2DE3EF 5006118C014000000000000C021555555555556400AAAAAAAAAAAA83FD44A55B66C77D AC014000000000000C021555555555556400FFFFFFFFFFFFD3FD5E6F8091A2B3DC0140 00000000000C0215555555555564012AAAAAAAAAAA93FD7B425ED097B42C0140000000 00000C02155555555555640155555555555543FD9B1DF623A67ECC014000000000000C 0215555555555564017FFFFFFFFFFFF3FDBE02468ACF136C014000000000000C021555 555555556401AAAAAAAAAAAAA3FDE3EF500611724C014000000000000C021555555555 556401D5555555555553FE0672894AB6CDAC014000000000000C021555555555556402 00000000000003FE1C71C71C71C73C014000000000000C021555555555556402155555 55555553FE33F5617839A5CC014000000000000C0215555555555564022AAAAAAAAAAA A3FE4CFD585E0E697C014000000000000C0215555555555564023FFFFFFFFFFFF3FE67 89ABCDF0123C014000000000000C020000000000001C0240000000000003FD92C5F92C 5F92FC014000000000000C020000000000001C022AAAAAAAAAAAB3FD6FE1A8C536FE5C 014000000000000C020000000000001C0215555555555563FD500611722833DC014000 000000000C020000000000001C0200000000000013FD3333333333337C014000000000 000C020000000000001C01D5555555555573FD19690E0857FD3C014000000000000C02 0000000000001C01AAAAAAAAAAAAC3FD02A7A1F196911C014000000000000C02000000 0000001C0180000000000013FCDDDDDDDDDDDE4C014000000000000C02000000000000 1C0155555555555563FCBC7DEA00C22EAC014000000000000C020000000000001C012A AAAAAAAAAAB3FCA12F684BDA135C014000000000000C020000000000001C0100000000 000003FC8BF258BF258C4C014000000000000C020000000000001C00AAAAAAAAAAAAB3 FC7CC6BB5AA4998C014000000000000C020000000000001C0055555555555563FC73AC 901E573B1C014000000000000C020000000000001C0000000000000013FC70A3D70A3D 70FC014000000000000C020000000000001BFF55555555555583FC73AC901E573B2C01 4000000000000C020000000000001BFE555555555555B3FC7CC6BB5AA4998C01400000 0000000C020000000000001BCC80000000000003FC8BF258BF258C4C01400000000000 0C0200000000000013FE555555555554F3FCA12F684BDA134C014000000000000C0200 000000000013FF55555555555523FCBC7DEA00C22E9C014000000000000C0200000000 000013FFFFFFFFFFFFFFC3FCDDDDDDDDDDDE2C014000000000000C0200000000000014 0055555555555533FD02A7A1F196910C014000000000000C020000000000001400AAAA AAAAAAAA83FD19690E0857FD1C014000000000000C020000000000001400FFFFFFFFFF FFD3FD3333333333335C014000000000000C0200000000000014012AAAAAAAAAAA93FD 500611722833AC014000000000000C02000000000000140155555555555543FD6FE1A8 C536FE4C014000000000000C0200000000000014017FFFFFFFFFFFF3FD92C5F92C5F92 EC014000000000000C020000000000001401AAAAAAAAAAAAA3FDB8B302A7A1F1CC0140 00000000000C020000000000001401D5555555555553FDE1A8C536FE1ABC0140000000 00000C02000000000000140200000000000003FE06D3A06D3A06FC014000000000000C 02000000000000140215555555555553FE1E573AC901E58C014000000000000C020000 0000000014022AAAAAAAAAAAA3FE375F31AED6A93C014000000000000C020000000000 0014023FFFFFFFFFFFF3FE51EB851EB851FC014000000000000C01D555555555557C02 40000000000003FD6C16C16C16C19C014000000000000C01D555555555557C022AAAAA AAAAAAB3FD49327104EE2CFC014000000000000C01D555555555557C02155555555555 63FD2956D9B1DF627C014000000000000C01D555555555557C0200000000000013FD0C 83FB72EA621C014000000000000C01D555555555557C01D5555555555573FCE573AC90 1E57AC014000000000000C01D555555555557C01AAAAAAAAAAAAC3FCB7F0D4629B7F6C 014000000000000C01D555555555557C0180000000000013FC907F6E5D4C3B8C014000 000000000C01D555555555557C0155555555555563FC6F1F7A80308BEC014000000000 000C01D555555555557C012AAAAAAAAAAAB3FC53D0F8CB48709C014000000000000C01 D555555555557C0100000000000003FC3E93E93E93E98C014000000000000C01D55555 5555557C00AAAAAAAAAAAAB3FC2F684BDA12F6CC014000000000000C01D55555555555 7C0055555555555563FC264E209DC5985C014000000000000C01D555555555557C0000 000000000013FC23456789ABCE3C014000000000000C01D555555555557BFF55555555 555583FC264E209DC5986C014000000000000C01D555555555557BFE555555555555B3 FC2F684BDA12F6CC014000000000000C01D555555555557BCC80000000000003FC3E93 E93E93E98C014000000000000C01D5555555555573FE555555555554F3FC53D0F8CB48 708C014000000000000C01D5555555555573FF55555555555523FC6F1F7A80308BDC01 4000000000000C01D5555555555573FFFFFFFFFFFFFFC3FC907F6E5D4C3B6C01400000 0000000C01D55555555555740055555555555533FCB7F0D4629B7F4C01400000000000 0C01D555555555557400AAAAAAAAAAAA83FCE573AC901E576C014000000000000C01D5 55555555557400FFFFFFFFFFFFD3FD0C83FB72EA61FC014000000000000C01D5555555 555574012AAAAAAAAAAA93FD2956D9B1DF625C014000000000000C01D5555555555574 0155555555555543FD49327104EE2CDC014000000000000C01D5555555555574017FFF FFFFFFFFF3FD6C16C16C16C18C014000000000000C01D555555555557401AAAAAAAAAA AAA3FD9203CAE759205C014000000000000C01D555555555557401D5555555555553FD BAF98D76B5495C014000000000000C01D55555555555740200000000000003FDE6F809 1A2B3C8C014000000000000C01D55555555555740215555555555553FE0AFF9EE8DD7C DC014000000000000C01D5555555555574022AAAAAAAAAAAA3FE240795CEB2408C0140 00000000000C01D5555555555574023FFFFFFFFFFFF3FE3E93E93E93E94C0140000000 00000C01AAAAAAAAAAAACC0240000000000003FD49F49F49F49F6C014000000000000C 01AAAAAAAAAAAACC022AAAAAAAAAAAB3FD27104EE2CC0ACC014000000000000C01AAAA AAAAAAAACC0215555555555563FD0734B78FBD404C014000000000000C01AAAAAAAAAA AACC0200000000000013FCD4C3B2A1907FCC014000000000000C01AAAAAAAAAAAACC01 D5555555555573FCA12F684BDA134C014000000000000C01AAAAAAAAAAAACC01AAAAAA AAAAAAC3FC73AC901E573B0C014000000000000C01AAAAAAAAAAAACC01800000000000 13FC4C3B2A1907F72C014000000000000C01AAAAAAAAAAAACC0155555555555563FC2A DB363BEC478C014000000000000C01AAAAAAAAAAAACC012AAAAAAAAAAAB3FC0F8CB487 042C3C014000000000000C01AAAAAAAAAAAACC0100000000000003FBF49F49F49F4A4C 014000000000000C01AAAAAAAAAAAACC00AAAAAAAAAAAAB3FBD6480F2B9D64DC014000 000000000C01AAAAAAAAAAAACC0055555555555563FBC413B8B302A7FC014000000000 000C01AAAAAAAAAAAACC0000000000000013FBBE02468ACF13AC014000000000000C01 AAAAAAAAAAAACBFF55555555555583FBC413B8B302A7FC014000000000000C01AAAAAA AAAAAACBFE555555555555B3FBD6480F2B9D64CC014000000000000C01AAAAAAAAAAAA CBCC80000000000003FBF49F49F49F4A3C014000000000000C01AAAAAAAAAAAAC3FE55 5555555554F3FC0F8CB487042C2C014000000000000C01AAAAAAAAAAAAC3FF55555555 555523FC2ADB363BEC477C014000000000000C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3 FC4C3B2A1907F70C014000000000000C01AAAAAAAAAAAAC40055555555555533FC73AC 901E573AEC014000000000000C01AAAAAAAAAAAAC400AAAAAAAAAAAA83FCA12F684BDA 130C014000000000000C01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FCD4C3B2A1907F7C01 4000000000000C01AAAAAAAAAAAAC4012AAAAAAAAAAA93FD0734B78FBD402C01400000 0000000C01AAAAAAAAAAAAC40155555555555543FD27104EE2CC0AAC01400000000000 0C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FD49F49F49F49F5C014000000000000C01AA AAAAAAAAAAC401AAAAAAAAAAAAA3FD6FE1A8C536FE2C014000000000000C01AAAAAAAA AAAAC401D5555555555553FD98D76B5493272C014000000000000C01AAAAAAAAAAAAC4 0200000000000003FDC4D5E6F8091A4C014000000000000C01AAAAAAAAAAAAC4021555 5555555553FDF3DD1BAF98D77C014000000000000C01AAAAAAAAAAAAC4022AAAAAAAAA AAA3FE12F684BDA12F6C014000000000000C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FE 2D82D82D82D83C014000000000000C018000000000001C0240000000000003FD2C5F92 C5F92C7C014000000000000C018000000000001C022AAAAAAAAAAAB3FD097B425ED097 EC014000000000000C018000000000001C0215555555555563FCD33F5617839AAC0140 00000000000C018000000000001C0200000000000013FC999999999999FC0140000000 00000C018000000000001C01D5555555555573FC66054F43E32D7C014000000000000C 018000000000001C01AAAAAAAAAAAAC3FC3882771660553C014000000000000C018000 000000001C0180000000000013FC1111111111115C014000000000000C018000000000 001C0155555555555563FBDF623A67EAC35C014000000000000C018000000000001C01 2AAAAAAAAAAAB3FBA8C536FE1A8CBC014000000000000C018000000000001C01000000 00000003FB7E4B17E4B17EAC014000000000000C018000000000001C00AAAAAAAAAAAA B3FB5FF3DD1BAF993C014000000000000C018000000000001C0055555555555563FB4D BF86A314DC5C014000000000000C018000000000001C0000000000000013FB47AE147A E1480C014000000000000C018000000000001BFF55555555555583FB4DBF86A314DC5C 014000000000000C018000000000001BFE555555555555B3FB5FF3DD1BAF992C014000 000000000C018000000000001BCC80000000000003FB7E4B17E4B17E9C014000000000 000C0180000000000013FE555555555554F3FBA8C536FE1A8C9C014000000000000C01 80000000000013FF55555555555523FBDF623A67EAC33C014000000000000C01800000 00000013FFFFFFFFFFFFFFC3FC1111111111113C014000000000000C01800000000000 140055555555555533FC3882771660551C014000000000000C018000000000001400AA AAAAAAAAAA83FC66054F43E32D3C014000000000000C018000000000001400FFFFFFFF FFFFD3FC999999999999AC014000000000000C0180000000000014012AAAAAAAAAAA93 FCD33F5617839A6C014000000000000C01800000000000140155555555555543FD097B 425ED097CC014000000000000C0180000000000014017FFFFFFFFFFFF3FD2C5F92C5F9 2C6C014000000000000C018000000000001401AAAAAAAAAAAAA3FD524C9C413B8B4C01 4000000000000C018000000000001401D5555555555553FD7B425ED097B43C01400000 0000000C01800000000000140200000000000003FDA740DA740DA76C01400000000000 0C01800000000000140215555555555553FDD6480F2B9D649C014000000000000C0180 000000000014022AAAAAAAAAAAA3FE042BFE7BA375FC014000000000000C0180000000 000014023FFFFFFFFFFFF3FE1EB851EB851ECC014000000000000C015555555555556C 0240000000000003FD13579BE02468BC014000000000000C015555555555556C022AAA AAAAAAAAB3FCE0E696F1F7A83C014000000000000C015555555555556C021555555555 5563FCA12F684BDA132C014000000000000C015555555555556C0200000000000013FC 6789ABCDF0127C014000000000000C015555555555556C01D5555555555573FC33F561 7839A5FC014000000000000C015555555555556C01AAAAAAAAAAAAC3FC0672894AB6CD BC014000000000000C015555555555556C0180000000000013FBBE02468ACF13AC0140 00000000000C015555555555556C0155555555555563FB7B425ED097B45C0140000000 00000C015555555555556C012AAAAAAAAAAAB3FB44A55B66C77DBC014000000000000C 015555555555556C0100000000000003FB1A2B3C4D5E6FAC014000000000000C015555 555555556C00AAAAAAAAAAAAB3FAF7A80308B9146C014000000000000C015555555555 556C0055555555555563FAD33F5617839AAC014000000000000C015555555555556C00 00000000000013FAC71C71C71C721C014000000000000C015555555555556BFF555555 55555583FAD33F5617839A9C014000000000000C015555555555556BFE555555555555 B3FAF7A80308B9145C014000000000000C015555555555556BCC80000000000003FB1A 2B3C4D5E6F9C014000000000000C0155555555555563FE555555555554F3FB44A55B66 C77D9C014000000000000C0155555555555563FF55555555555523FB7B425ED097B43C 014000000000000C0155555555555563FFFFFFFFFFFFFFC3FBBE02468ACF136C014000 000000000C01555555555555640055555555555533FC0672894AB6CD9C014000000000 000C015555555555556400AAAAAAAAAAAA83FC33F5617839A5BC014000000000000C01 5555555555556400FFFFFFFFFFFFD3FC6789ABCDF0122C014000000000000C01555555 55555564012AAAAAAAAAAA93FCA12F684BDA12EC014000000000000C01555555555555 640155555555555543FCE0E696F1F7A7FC014000000000000C0155555555555564017F FFFFFFFFFFF3FD13579BE02468AC014000000000000C015555555555556401AAAAAAAA AAAAA3FD3944A55B66C78C014000000000000C015555555555556401D5555555555553 FD623A67EAC2F07C014000000000000C01555555555555640200000000000003FD8E38 E38E38E3AC014000000000000C01555555555555640215555555555553FDBD401845C8 A0DC014000000000000C0155555555555564022AAAAAAAAAAAA3FDEF50061172282C01 4000000000000C0155555555555564023FFFFFFFFFFFF3FE123456789ABCEC01400000 0000000C012AAAAAAAAAAABC0240000000000003FCFDB97530ECA88C01400000000000 0C012AAAAAAAAAAABC022AAAAAAAAAAAB3FCB7F0D4629B7F4C014000000000000C012A AAAAAAAAAABC0215555555555563FC7839A5BC7DEA3C014000000000000C012AAAAAAA AAAABC0200000000000013FC3E93E93E93E98C014000000000000C012AAAAAAAAAAABC 01D5555555555573FC0AFF9EE8DD7D0C014000000000000C012AAAAAAAAAAABC01AAAA AAAAAAAAC3FBBAF98D76B5497C014000000000000C012AAAAAAAAAAABC018000000000 0013FB6C16C16C16C1CC014000000000000C012AAAAAAAAAAABC0155555555555563FB 2956D9B1DF627C014000000000000C012AAAAAAAAAAABC012AAAAAAAAAAAB3FAE573AC 901E57AC014000000000000C012AAAAAAAAAAABC0100000000000003FA907F6E5D4C3B 7C014000000000000C012AAAAAAAAAAABC00AAAAAAAAAAAAB3FA53D0F8CB48709C0140 00000000000C012AAAAAAAAAAABC0055555555555563FA2F684BDA12F6DC0140000000 00000C012AAAAAAAAAAABC0000000000000013FA23456789ABCE3C014000000000000C 012AAAAAAAAAAABBFF55555555555583FA2F684BDA12F6CC014000000000000C012AAA AAAAAAAABBFE555555555555B3FA53D0F8CB48708C014000000000000C012AAAAAAAAA AABBCC80000000000003FA907F6E5D4C3B6C014000000000000C012AAAAAAAAAAAB3FE 555555555554F3FAE573AC901E576C014000000000000C012AAAAAAAAAAAB3FF555555 55555523FB2956D9B1DF625C014000000000000C012AAAAAAAAAAAB3FFFFFFFFFFFFFF C3FB6C16C16C16C17C014000000000000C012AAAAAAAAAAAB40055555555555533FBBA F98D76B5493C014000000000000C012AAAAAAAAAAAB400AAAAAAAAAAAA83FC0AFF9EE8 DD7CCC014000000000000C012AAAAAAAAAAAB400FFFFFFFFFFFFD3FC3E93E93E93E93C 014000000000000C012AAAAAAAAAAAB4012AAAAAAAAAAA93FC7839A5BC7DE9FC014000 000000000C012AAAAAAAAAAAB40155555555555543FCB7F0D4629B7F0C014000000000 000C012AAAAAAAAAAAB4017FFFFFFFFFFFF3FCFDB97530ECA86C014000000000000C01 2AAAAAAAAAAAB401AAAAAAAAAAAAA3FD24C9C413B8B30C014000000000000C012AAAAA AAAAAAB401D5555555555553FD4DBF86A314DC0C014000000000000C012AAAAAAAAAAA B40200000000000003FD79BE02468ACF2C014000000000000C012AAAAAAAAAAAB40215 555555555553FDA8C536FE1A8C5C014000000000000C012AAAAAAAAAAAB4022AAAAAAA AAAAA3FDDAD524C9C413BC014000000000000C012AAAAAAAAAAAB4023FFFFFFFFFFFF3 FE07F6E5D4C3B2AC014000000000000C010000000000000C0240000000000003FCDDDD DDDDDDDDFC014000000000000C010000000000000C022AAAAAAAAAAAB3FC98153D0F8C B4CC014000000000000C010000000000000C0215555555555563FC585E0E696F1FAC01 4000000000000C010000000000000C0200000000000013FC1EB851EB851EFC01400000 0000000C010000000000000C01D5555555555573FBD6480F2B9D64DC01400000000000 0C010000000000000C01AAAAAAAAAAAAC3FB7B425ED097B46C014000000000000C0100 00000000000C0180000000000013FB2C5F92C5F92CAC014000000000000C0100000000 00000C0155555555555563FAD33F5617839AAC014000000000000C010000000000000C 012AAAAAAAAAAAB3FA66054F43E32D7C014000000000000C010000000000000C010000 0000000003FA1111111111114C014000000000000C010000000000000C00AAAAAAAAAA AAB3F9A8C536FE1A8CCC014000000000000C010000000000000C0055555555555563F9 5FF3DD1BAF993C014000000000000C010000000000000C0000000000000013F947AE14 7AE1480C014000000000000C010000000000000BFF55555555555583F95FF3DD1BAF99 3C014000000000000C010000000000000BFE555555555555B3F9A8C536FE1A8C9C0140 00000000000C010000000000000BCC80000000000003FA1111111111113C0140000000 00000C0100000000000003FE555555555554F3FA66054F43E32D3C014000000000000C 0100000000000003FF55555555555523FAD33F5617839A6C014000000000000C010000 0000000003FFFFFFFFFFFFFFC3FB2C5F92C5F92C6C014000000000000C010000000000 00040055555555555533FB7B425ED097B42C014000000000000C010000000000000400 AAAAAAAAAAAA83FBD6480F2B9D647C014000000000000C010000000000000400FFFFFF FFFFFFD3FC1EB851EB851EAC014000000000000C0100000000000004012AAAAAAAAAAA 93FC585E0E696F1F6C014000000000000C01000000000000040155555555555543FC98 153D0F8CB47C014000000000000C0100000000000004017FFFFFFFFFFFF3FCDDDDDDDD DDDDDC014000000000000C010000000000000401AAAAAAAAAAAAA3FD14DBF86A314DCC 014000000000000C010000000000000401D5555555555553FD3DD1BAF98D76BC014000 000000000C01000000000000040200000000000003FD69D0369D0369EC014000000000 000C01000000000000040215555555555553FD98D76B5493271C014000000000000C01 00000000000004022AAAAAAAAAAAA3FDCAE759203CAE6C014000000000000C01000000 00000004023FFFFFFFFFFFF3FDFFFFFFFFFFFFFC014000000000000C00AAAAAAAAAAAA BC0240000000000003FCC71C71C71C71DC014000000000000C00AAAAAAAAAAAABC022A AAAAAAAAAAB3FC8153D0F8CB48AC014000000000000C00AAAAAAAAAAAABC0215555555 555563FC419CA252ADB39C014000000000000C00AAAAAAAAAAAABC0200000000000013 FC07F6E5D4C3B2EC014000000000000C00AAAAAAAAAAAABC01D5555555555573FBA8C5 36FE1A8CBC014000000000000C00AAAAAAAAAAAABC01AAAAAAAAAAAAC3FB4DBF86A314 DC3C014000000000000C00AAAAAAAAAAAABC0180000000000013FAFDB97530ECA8FC01 4000000000000C00AAAAAAAAAAAABC0155555555555563FA7839A5BC7DEA5C01400000 0000000C00AAAAAAAAAAAABC012AAAAAAAAAAAB3FA0AFF9EE8DD7D1C01400000000000 0C00AAAAAAAAAAAABC0100000000000003F96C16C16C16C1DC014000000000000C00AA AAAAAAAAAABC00AAAAAAAAAAAAB3F8E573AC901E581C014000000000000C00AAAAAAAA AAAABC0055555555555563F853D0F8CB48710C014000000000000C00AAAAAAAAAAAABC 0000000000000013F823456789ABCEBC014000000000000C00AAAAAAAAAAAABBFF5555 5555555583F853D0F8CB4870FC014000000000000C00AAAAAAAAAAAABBFE5555555555 55B3F8E573AC901E57DC014000000000000C00AAAAAAAAAAAABBCC80000000000003F9 6C16C16C16C1AC014000000000000C00AAAAAAAAAAAAB3FE555555555554F3FA0AFF9E E8DD7CEC014000000000000C00AAAAAAAAAAAAB3FF55555555555523FA7839A5BC7DEA 1C014000000000000C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFC3FAFDB97530ECA86C0140 00000000000C00AAAAAAAAAAAAB40055555555555533FB4DBF86A314DBFC0140000000 00000C00AAAAAAAAAAAAB400AAAAAAAAAAAA83FBA8C536FE1A8C5C014000000000000C 00AAAAAAAAAAAAB400FFFFFFFFFFFFD3FC07F6E5D4C3B29C014000000000000C00AAAA AAAAAAAAB4012AAAAAAAAAAA93FC419CA252ADB35C014000000000000C00AAAAAAAAAA AAB40155555555555543FC8153D0F8CB486C014000000000000C00AAAAAAAAAAAAB401 7FFFFFFFFFFFF3FCC71C71C71C71CC014000000000000C00AAAAAAAAAAAAB401AAAAAA AAAAAAA3FD097B425ED097BC014000000000000C00AAAAAAAAAAAAB401D55555555555 53FD327104EE2CC0BC014000000000000C00AAAAAAAAAAAAB40200000000000003FD5E 6F8091A2B3DC014000000000000C00AAAAAAAAAAAAB40215555555555553FD8D76B549 32710C014000000000000C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FDBF86A314DBF85C 014000000000000C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FDF49F49F49F49EC014000 000000000C005555555555556C0240000000000003FCB97530ECA8643C014000000000 000C005555555555556C022AAAAAAAAAAAB3FC73AC901E573B0C014000000000000C00 5555555555556C0215555555555563FC33F5617839A5EC014000000000000C00555555 5555556C0200000000000013FBF49F49F49F4A7C014000000000000C00555555555555 6C01D5555555555573FB8D76B54932716C014000000000000C005555555555556C01AA AAAAAAAAAAC3FB327104EE2CC0EC014000000000000C005555555555556C0180000000 000013FAC71C71C71C725C014000000000000C005555555555556C0155555555555563 FA419CA252ADB3BC014000000000000C005555555555556C012AAAAAAAAAAAB3F9A8C5 36FE1A8CEC014000000000000C005555555555556C0100000000000003F8FDB97530EC A94C014000000000000C005555555555556C00AAAAAAAAAAAAB3F80AFF9EE8DD7D9C01 4000000000000C005555555555556C0055555555555563F6E573AC901E5A1C01400000 0000000C005555555555556C0000000000000013F623456789ABD0EC01400000000000 0C005555555555556BFF55555555555583F6E573AC901E59BC014000000000000C0055 55555555556BFE555555555555B3F80AFF9EE8DD7D5C014000000000000C0055555555 55556BCC80000000000003F8FDB97530ECA8DC014000000000000C0055555555555563 FE555555555554F3F9A8C536FE1A8C8C014000000000000C0055555555555563FF5555 5555555523FA419CA252ADB37C014000000000000C0055555555555563FFFFFFFFFFFF FFC3FAC71C71C71C71CC014000000000000C00555555555555640055555555555533FB 327104EE2CC0AC014000000000000C005555555555556400AAAAAAAAAAAA83FB8D76B5 493270FC014000000000000C005555555555556400FFFFFFFFFFFFD3FBF49F49F49F49 DC014000000000000C0055555555555564012AAAAAAAAAAA93FC33F5617839A5AC0140 00000000000C00555555555555640155555555555543FC73AC901E573ABC0140000000 00000C0055555555555564017FFFFFFFFFFFF3FCB97530ECA8641C014000000000000C 005555555555556401AAAAAAAAAAAAA3FD02A7A1F19690EC014000000000000C005555 555555556401D5555555555553FD2B9D6480F2B9EC014000000000000C005555555555 55640200000000000003FD579BE02468AD0C014000000000000C005555555555556402 15555555555553FD86A314DBF86A3C014000000000000C0055555555555564022AAAAA AAAAAAA3FDB8B302A7A1F18C014000000000000C0055555555555564023FFFFFFFFFFF F3FDEDCBA98765431C014000000000000C000000000000001C0240000000000003FCB4 E81B4E81B4FC014000000000000C000000000000001C022AAAAAAAAAAAB3FC6F1F7A80 308BCC014000000000000C000000000000001C0215555555555563FC2F684BDA12F6BC 014000000000000C000000000000001C0200000000000013FBEB851EB851EC0C014000 000000000C000000000000001C01D5555555555573FB845C8A0CE512FC014000000000 000C000000000000001C01AAAAAAAAAAAAC3FB2956D9B1DF627C014000000000000C00 0000000000001C0180000000000013FAB4E81B4E81B57C014000000000000C00000000 0000001C0155555555555563FA2F684BDA12F6DC014000000000000C00000000000000 1C012AAAAAAAAAAAB3F9845C8A0CE5132C014000000000000C000000000000001C0100 000000000003F8B4E81B4E81B5CC014000000000000C000000000000001C00AAAAAAAA AAAAB3F7845C8A0CE5142C014000000000000C000000000000001C0055555555555563 F5845C8A0CE5182C014000000000000C000000000000001C0000000000000013C76D3C 000000000C014000000000000C000000000000001BFF55555555555583F5845C8A0CE5 179C014000000000000C000000000000001BFE555555555555B3F7845C8A0CE513AC01 4000000000000C000000000000001BCC80000000000003F8B4E81B4E81B55C01400000 0000000C0000000000000013FE555555555554F3F9845C8A0CE512CC01400000000000 0C0000000000000013FF55555555555523FA2F684BDA12F69C014000000000000C0000 000000000013FFFFFFFFFFFFFFC3FAB4E81B4E81B4EC014000000000000C0000000000 0000140055555555555533FB2956D9B1DF623C014000000000000C0000000000000014 00AAAAAAAAAAAA83FB845C8A0CE5128C014000000000000C000000000000001400FFFF FFFFFFFFD3FBEB851EB851EB6C014000000000000C0000000000000014012AAAAAAAAA AA93FC2F684BDA12F67C014000000000000C00000000000000140155555555555543FC 6F1F7A80308B8C014000000000000C0000000000000014017FFFFFFFFFFFF3FCB4E81B 4E81B4EC014000000000000C000000000000001401AAAAAAAAAAAAA3FD006117228339 4C014000000000000C000000000000001401D5555555555553FD2956D9B1DF624C0140 00000000000C00000000000000140200000000000003FD5555555555556C0140000000 00000C00000000000000140215555555555553FD845C8A0CE5129C014000000000000C 0000000000000014022AAAAAAAAAAAA3FDB66C77D88E99EC014000000000000C000000 0000000014023FFFFFFFFFFFF3FDEB851EB851EB7C014000000000000BFF5555555555 558C0240000000000003FCB97530ECA8643C014000000000000BFF5555555555558C02 2AAAAAAAAAAAB3FC73AC901E573B0C014000000000000BFF5555555555558C02155555 55555563FC33F5617839A5EC014000000000000BFF5555555555558C02000000000000 13FBF49F49F49F4A6C014000000000000BFF5555555555558C01D5555555555573FB8D 76B54932715C014000000000000BFF5555555555558C01AAAAAAAAAAAAC3FB327104EE 2CC0EC014000000000000BFF5555555555558C0180000000000013FAC71C71C71C725C 014000000000000BFF5555555555558C0155555555555563FA419CA252ADB3AC014000 000000000BFF5555555555558C012AAAAAAAAAAAB3F9A8C536FE1A8CEC014000000000 000BFF5555555555558C0100000000000003F8FDB97530ECA90C014000000000000BFF 5555555555558C00AAAAAAAAAAAAB3F80AFF9EE8DD7D7C014000000000000BFF555555 5555558C0055555555555563F6E573AC901E599C014000000000000BFF555555555555 8C0000000000000013F623456789ABD06C014000000000000BFF5555555555558BFF55 555555555583F6E573AC901E593C014000000000000BFF5555555555558BFE55555555 5555B3F80AFF9EE8DD7D3C014000000000000BFF5555555555558BCC80000000000003 F8FDB97530ECA8BC014000000000000BFF55555555555583FE555555555554F3F9A8C5 36FE1A8C7C014000000000000BFF55555555555583FF55555555555523FA419CA252AD B36C014000000000000BFF55555555555583FFFFFFFFFFFFFFC3FAC71C71C71C71CC01 4000000000000BFF555555555555840055555555555533FB327104EE2CC0AC01400000 0000000BFF5555555555558400AAAAAAAAAAAA83FB8D76B5493270FC01400000000000 0BFF5555555555558400FFFFFFFFFFFFD3FBF49F49F49F49DC014000000000000BFF55 555555555584012AAAAAAAAAAA93FC33F5617839A5AC014000000000000BFF55555555 5555840155555555555543FC73AC901E573ABC014000000000000BFF55555555555584 017FFFFFFFFFFFF3FCB97530ECA8641C014000000000000BFF5555555555558401AAAA AAAAAAAAA3FD02A7A1F19690EC014000000000000BFF5555555555558401D555555555 5553FD2B9D6480F2B9EC014000000000000BFF555555555555840200000000000003FD 579BE02468AD0C014000000000000BFF555555555555840215555555555553FD86A314 DBF86A3C014000000000000BFF55555555555584022AAAAAAAAAAAA3FDB8B302A7A1F1 8C014000000000000BFF55555555555584023FFFFFFFFFFFF3FDEDCBA98765431C0140 00000000000BFE555555555555BC0240000000000003FCC71C71C71C71DC0140000000 00000BFE555555555555BC022AAAAAAAAAAAB3FC8153D0F8CB48AC014000000000000B FE555555555555BC0215555555555563FC419CA252ADB38C014000000000000BFE5555 55555555BC0200000000000013FC07F6E5D4C3B2DC014000000000000BFE5555555555 55BC01D5555555555573FBA8C536FE1A8CAC014000000000000BFE555555555555BC01 AAAAAAAAAAAAC3FB4DBF86A314DC2C014000000000000BFE555555555555BC01800000 00000013FAFDB97530ECA8EC014000000000000BFE555555555555BC01555555555555 63FA7839A5BC7DEA3C014000000000000BFE555555555555BC012AAAAAAAAAAAB3FA0A FF9EE8DD7D0C014000000000000BFE555555555555BC0100000000000003F96C16C16C 16C1AC014000000000000BFE555555555555BC00AAAAAAAAAAAAB3F8E573AC901E57BC 014000000000000BFE555555555555BC0055555555555563F853D0F8CB4870AC014000 000000000BFE555555555555BC0000000000000013F823456789ABCE5C014000000000 000BFE555555555555BBFF55555555555583F853D0F8CB48709C014000000000000BFE 555555555555BBFE555555555555B3F8E573AC901E577C014000000000000BFE555555 555555BBCC80000000000003F96C16C16C16C17C014000000000000BFE555555555555 B3FE555555555554F3FA0AFF9EE8DD7CCC014000000000000BFE555555555555B3FF55 555555555523FA7839A5BC7DE9FC014000000000000BFE555555555555B3FFFFFFFFFF FFFFC3FAFDB97530ECA85C014000000000000BFE555555555555B40055555555555533 FB4DBF86A314DBEC014000000000000BFE555555555555B400AAAAAAAAAAAA83FBA8C5 36FE1A8C4C014000000000000BFE555555555555B400FFFFFFFFFFFFD3FC07F6E5D4C3 B29C014000000000000BFE555555555555B4012AAAAAAAAAAA93FC419CA252ADB34C01 4000000000000BFE555555555555B40155555555555543FC8153D0F8CB486C01400000 0000000BFE555555555555B4017FFFFFFFFFFFF3FCC71C71C71C71BC01400000000000 0BFE555555555555B401AAAAAAAAAAAAA3FD097B425ED097BC014000000000000BFE55 5555555555B401D5555555555553FD327104EE2CC0BC014000000000000BFE55555555 5555B40200000000000003FD5E6F8091A2B3DC014000000000000BFE555555555555B4 0215555555555553FD8D76B54932710C014000000000000BFE555555555555B4022AAA AAAAAAAAA3FDBF86A314DBF85C014000000000000BFE555555555555B4023FFFFFFFFF FFF3FDF49F49F49F49EC014000000000000BCC8000000000000C0240000000000003FC DDDDDDDDDDDDEC014000000000000BCC8000000000000C022AAAAAAAAAAAB3FC98153D 0F8CB4BC014000000000000BCC8000000000000C0215555555555563FC585E0E696F1F AC014000000000000BCC8000000000000C0200000000000013FC1EB851EB851EEC0140 00000000000BCC8000000000000C01D5555555555573FBD6480F2B9D64CC0140000000 00000BCC8000000000000C01AAAAAAAAAAAAC3FB7B425ED097B45C014000000000000B CC8000000000000C0180000000000013FB2C5F92C5F92C9C014000000000000BCC8000 000000000C0155555555555563FAD33F5617839A8C014000000000000BCC8000000000 000C012AAAAAAAAAAAB3FA66054F43E32D5C014000000000000BCC8000000000000C01 00000000000003FA1111111111112C014000000000000BCC8000000000000C00AAAAAA AAAAAAB3F9A8C536FE1A8C8C014000000000000BCC8000000000000C00555555555555 63F95FF3DD1BAF98FC014000000000000BCC8000000000000C0000000000000013F947 AE147AE147CC014000000000000BCC8000000000000BFF55555555555583F95FF3DD1B AF98FC014000000000000BCC8000000000000BFE555555555555B3F9A8C536FE1A8C5C 014000000000000BCC8000000000000BCC80000000000003FA1111111111111C014000 000000000BCC80000000000003FE555555555554F3FA66054F43E32D1C014000000000 000BCC80000000000003FF55555555555523FAD33F5617839A4C014000000000000BCC 80000000000003FFFFFFFFFFFFFFC3FB2C5F92C5F92C5C014000000000000BCC800000 000000040055555555555533FB7B425ED097B41C014000000000000BCC800000000000 0400AAAAAAAAAAAA83FBD6480F2B9D646C014000000000000BCC8000000000000400FF FFFFFFFFFFD3FC1EB851EB851EAC014000000000000BCC80000000000004012AAAAAAA AAAA93FC585E0E696F1F6C014000000000000BCC800000000000040155555555555543 FC98153D0F8CB47C014000000000000BCC80000000000004017FFFFFFFFFFFF3FCDDDD DDDDDDDDCC014000000000000BCC8000000000000401AAAAAAAAAAAAA3FD14DBF86A31 4DCC014000000000000BCC8000000000000401D5555555555553FD3DD1BAF98D76BC01 4000000000000BCC800000000000040200000000000003FD69D0369D0369EC01400000 0000000BCC800000000000040215555555555553FD98D76B5493271C01400000000000 0BCC80000000000004022AAAAAAAAAAAA3FDCAE759203CAE6C014000000000000BCC80 000000000004023FFFFFFFFFFFF3FDFFFFFFFFFFFFFC0140000000000003FE55555555 5554FC0240000000000003FCFDB97530ECA87C0140000000000003FE555555555554FC 022AAAAAAAAAAAB3FCB7F0D4629B7F3C0140000000000003FE555555555554FC021555 5555555563FC7839A5BC7DEA2C0140000000000003FE555555555554FC020000000000 0013FC3E93E93E93E97C0140000000000003FE555555555554FC01D5555555555573FC 0AFF9EE8DD7CFC0140000000000003FE555555555554FC01AAAAAAAAAAAAC3FBBAF98D 76B5495C0140000000000003FE555555555554FC0180000000000013FB6C16C16C16C1 AC0140000000000003FE555555555554FC0155555555555563FB2956D9B1DF625C0140 000000000003FE555555555554FC012AAAAAAAAAAAB3FAE573AC901E576C0140000000 000003FE555555555554FC0100000000000003FA907F6E5D4C3B3C0140000000000003 FE555555555554FC00AAAAAAAAAAAAB3FA53D0F8CB48705C0140000000000003FE5555 55555554FC0055555555555563FA2F684BDA12F69C0140000000000003FE5555555555 54FC0000000000000013FA23456789ABCDFC0140000000000003FE555555555554FBFF 55555555555583FA2F684BDA12F68C0140000000000003FE555555555554FBFE555555 555555B3FA53D0F8CB48704C0140000000000003FE555555555554FBCC800000000000 03FA907F6E5D4C3B2C0140000000000003FE555555555554F3FE555555555554F3FAE5 73AC901E572C0140000000000003FE555555555554F3FF55555555555523FB2956D9B1 DF623C0140000000000003FE555555555554F3FFFFFFFFFFFFFFC3FB6C16C16C16C15C 0140000000000003FE555555555554F40055555555555533FBBAF98D76B5491C014000 0000000003FE555555555554F400AAAAAAAAAAAA83FC0AFF9EE8DD7CBC014000000000 0003FE555555555554F400FFFFFFFFFFFFD3FC3E93E93E93E92C0140000000000003FE 555555555554F4012AAAAAAAAAAA93FC7839A5BC7DE9EC0140000000000003FE555555 555554F40155555555555543FCB7F0D4629B7EFC0140000000000003FE555555555554 F4017FFFFFFFFFFFF3FCFDB97530ECA85C0140000000000003FE555555555554F401AA AAAAAAAAAAA3FD24C9C413B8B30C0140000000000003FE555555555554F401D5555555 555553FD4DBF86A314DBFC0140000000000003FE555555555554F40200000000000003 FD79BE02468ACF2C0140000000000003FE555555555554F40215555555555553FDA8C5 36FE1A8C5C0140000000000003FE555555555554F4022AAAAAAAAAAAA3FDDAD524C9C4 13AC0140000000000003FE555555555554F4023FFFFFFFFFFFF3FE07F6E5D4C3B29C01 40000000000003FF5555555555552C0240000000000003FD13579BE02468BC01400000 00000003FF5555555555552C022AAAAAAAAAAAB3FCE0E696F1F7A82C01400000000000 03FF5555555555552C0215555555555563FCA12F684BDA131C0140000000000003FF55 55555555552C0200000000000013FC6789ABCDF0126C0140000000000003FF55555555 55552C01D5555555555573FC33F5617839A5EC0140000000000003FF5555555555552C 01AAAAAAAAAAAAC3FC0672894AB6CDAC0140000000000003FF5555555555552C018000 0000000013FBBE02468ACF138C0140000000000003FF5555555555552C015555555555 5563FB7B425ED097B43C0140000000000003FF5555555555552C012AAAAAAAAAAAB3FB 44A55B66C77D9C0140000000000003FF5555555555552C0100000000000003FB1A2B3C 4D5E6F8C0140000000000003FF5555555555552C00AAAAAAAAAAAAB3FAF7A80308B914 2C0140000000000003FF5555555555552C0055555555555563FAD33F5617839A6C0140 000000000003FF5555555555552C0000000000000013FAC71C71C71C71DC0140000000 000003FF5555555555552BFF55555555555583FAD33F5617839A5C0140000000000003 FF5555555555552BFE555555555555B3FAF7A80308B9141C0140000000000003FF5555 555555552BCC80000000000003FB1A2B3C4D5E6F7C0140000000000003FF5555555555 5523FE555555555554F3FB44A55B66C77D7C0140000000000003FF55555555555523FF 55555555555523FB7B425ED097B41C0140000000000003FF55555555555523FFFFFFFF FFFFFFC3FBBE02468ACF134C0140000000000003FF5555555555552400555555555555 33FC0672894AB6CD8C0140000000000003FF5555555555552400AAAAAAAAAAAA83FC33 F5617839A5AC0140000000000003FF5555555555552400FFFFFFFFFFFFD3FC6789ABCD F0121C0140000000000003FF55555555555524012AAAAAAAAAAA93FCA12F684BDA12DC 0140000000000003FF555555555555240155555555555543FCE0E696F1F7A7EC014000 0000000003FF55555555555524017FFFFFFFFFFFF3FD13579BE02468AC014000000000 0003FF5555555555552401AAAAAAAAAAAAA3FD3944A55B66C77C0140000000000003FF 5555555555552401D5555555555553FD623A67EAC2F07C0140000000000003FF555555 555555240200000000000003FD8E38E38E38E3AC0140000000000003FF555555555555 240215555555555553FDBD401845C8A0CC0140000000000003FF55555555555524022A AAAAAAAAAAA3FDEF50061172282C0140000000000003FF55555555555524023FFFFFFF FFFFF3FE123456789ABCDC0140000000000003FFFFFFFFFFFFFFCC0240000000000003 FD2C5F92C5F92C6C0140000000000003FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FD097B 425ED097CC0140000000000003FFFFFFFFFFFFFFCC0215555555555563FCD33F561783 9A7C0140000000000003FFFFFFFFFFFFFFCC0200000000000013FC999999999999CC01 40000000000003FFFFFFFFFFFFFFCC01D5555555555573FC66054F43E32D3C01400000 00000003FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3FC388277166054FC01400000000000 03FFFFFFFFFFFFFFCC0180000000000013FC1111111111112C0140000000000003FFFF FFFFFFFFFFCC0155555555555563FBDF623A67EAC2EC0140000000000003FFFFFFFFFF FFFFCC012AAAAAAAAAAAB3FBA8C536FE1A8C4C0140000000000003FFFFFFFFFFFFFFCC 0100000000000003FB7E4B17E4B17E3C0140000000000003FFFFFFFFFFFFFFCC00AAAA AAAAAAAAB3FB5FF3DD1BAF98CC0140000000000003FFFFFFFFFFFFFFCC005555555555 5563FB4DBF86A314DBEC0140000000000003FFFFFFFFFFFFFFCC0000000000000013FB 47AE147AE1479C0140000000000003FFFFFFFFFFFFFFCBFF55555555555583FB4DBF86 A314DBEC0140000000000003FFFFFFFFFFFFFFCBFE555555555555B3FB5FF3DD1BAF98 BC0140000000000003FFFFFFFFFFFFFFCBCC80000000000003FB7E4B17E4B17E2C0140 000000000003FFFFFFFFFFFFFFC3FE555555555554F3FBA8C536FE1A8C2C0140000000 000003FFFFFFFFFFFFFFC3FF55555555555523FBDF623A67EAC2CC0140000000000003 FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FC1111111111110C0140000000000003FFFFFF FFFFFFFFC40055555555555533FC388277166054EC0140000000000003FFFFFFFFFFFF FFC400AAAAAAAAAAAA83FC66054F43E32D0C0140000000000003FFFFFFFFFFFFFFC400 FFFFFFFFFFFFD3FC9999999999997C0140000000000003FFFFFFFFFFFFFFC4012AAAAA AAAAAA93FCD33F5617839A2C0140000000000003FFFFFFFFFFFFFFC401555555555555 43FD097B425ED097AC0140000000000003FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FD2C 5F92C5F92C5C0140000000000003FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FD524C9C41 3B8B2C0140000000000003FFFFFFFFFFFFFFC401D5555555555553FD7B425ED097B42C 0140000000000003FFFFFFFFFFFFFFC40200000000000003FDA740DA740DA74C014000 0000000003FFFFFFFFFFFFFFC40215555555555553FDD6480F2B9D647C014000000000 0003FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FE042BFE7BA375EC0140000000000003FF FFFFFFFFFFFFC4023FFFFFFFFFFFF3FE1EB851EB851EBC014000000000000400555555 5555553C0240000000000003FD49F49F49F49F4C014000000000000400555555555555 3C022AAAAAAAAAAAB3FD27104EE2CC0AAC0140000000000004005555555555553C0215 555555555563FD0734B78FBD402C0140000000000004005555555555553C0200000000 000013FCD4C3B2A1907F9C0140000000000004005555555555553C01D5555555555573 FCA12F684BDA130C0140000000000004005555555555553C01AAAAAAAAAAAAC3FC73AC 901E573ACC0140000000000004005555555555553C0180000000000013FC4C3B2A1907 F6FC0140000000000004005555555555553C0155555555555563FC2ADB363BEC474C01 40000000000004005555555555553C012AAAAAAAAAAAB3FC0F8CB487042BFC01400000 00000004005555555555553C0100000000000003FBF49F49F49F49EC01400000000000 04005555555555553C00AAAAAAAAAAAAB3FBD6480F2B9D646C01400000000000040055 55555555553C0055555555555563FBC413B8B302A78C01400000000000040055555555 55553C0000000000000013FBBE02468ACF133C0140000000000004005555555555553B FF55555555555583FBC413B8B302A78C0140000000000004005555555555553BFE5555 55555555B3FBD6480F2B9D645C0140000000000004005555555555553BCC8000000000 0003FBF49F49F49F49CC01400000000000040055555555555533FE555555555554F3FC 0F8CB487042BEC01400000000000040055555555555533FF55555555555523FC2ADB36 3BEC473C01400000000000040055555555555533FFFFFFFFFFFFFFC3FC4C3B2A1907F6 DC014000000000000400555555555555340055555555555533FC73AC901E573ABC0140 000000000004005555555555553400AAAAAAAAAAAA83FCA12F684BDA12DC0140000000 000004005555555555553400FFFFFFFFFFFFD3FCD4C3B2A1907F4C0140000000000004 0055555555555534012AAAAAAAAAAA93FD0734B78FBD400C0140000000000004005555 55555555340155555555555543FD27104EE2CC0A9C0140000000000004005555555555 5534017FFFFFFFFFFFF3FD49F49F49F49F3C0140000000000004005555555555553401 AAAAAAAAAAAAA3FD6FE1A8C536FE1C0140000000000004005555555555553401D55555 55555553FD98D76B5493270C0140000000000004005555555555553402000000000000 03FDC4D5E6F8091A2C014000000000000400555555555555340215555555555553FDF3 DD1BAF98D76C01400000000000040055555555555534022AAAAAAAAAAAA3FE12F684BD A12F5C01400000000000040055555555555534023FFFFFFFFFFFF3FE2D82D82D82D82C 014000000000000400AAAAAAAAAAAA8C0240000000000003FD6C16C16C16C16C014000 000000000400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FD49327104EE2CCC014000000000 000400AAAAAAAAAAAA8C0215555555555563FD2956D9B1DF624C014000000000000400 AAAAAAAAAAAA8C0200000000000013FD0C83FB72EA61EC014000000000000400AAAAAA AAAAAA8C01D5555555555573FCE573AC901E574C014000000000000400AAAAAAAAAAAA 8C01AAAAAAAAAAAAC3FCB7F0D4629B7F0C014000000000000400AAAAAAAAAAAA8C0180 000000000013FC907F6E5D4C3B2C014000000000000400AAAAAAAAAAAA8C0155555555 555563FC6F1F7A80308B8C014000000000000400AAAAAAAAAAAA8C012AAAAAAAAAAAB3 FC53D0F8CB48703C014000000000000400AAAAAAAAAAAA8C0100000000000003FC3E93 E93E93E92C014000000000000400AAAAAAAAAAAA8C00AAAAAAAAAAAAB3FC2F684BDA12 F66C014000000000000400AAAAAAAAAAAA8C0055555555555563FC264E209DC597FC01 4000000000000400AAAAAAAAAAAA8C0000000000000013FC23456789ABCDDC01400000 0000000400AAAAAAAAAAAA8BFF55555555555583FC264E209DC5980C01400000000000 0400AAAAAAAAAAAA8BFE555555555555B3FC2F684BDA12F66C014000000000000400AA AAAAAAAAAA8BCC80000000000003FC3E93E93E93E92C014000000000000400AAAAAAAA AAAA83FE555555555554F3FC53D0F8CB48702C014000000000000400AAAAAAAAAAAA83 FF55555555555523FC6F1F7A80308B7C014000000000000400AAAAAAAAAAAA83FFFFFF FFFFFFFFC3FC907F6E5D4C3B0C014000000000000400AAAAAAAAAAAA84005555555555 5533FCB7F0D4629B7EEC014000000000000400AAAAAAAAAAAA8400AAAAAAAAAAAA83FC E573AC901E570C014000000000000400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FD0C83FB 72EA61CC014000000000000400AAAAAAAAAAAA84012AAAAAAAAAAA93FD2956D9B1DF62 2C014000000000000400AAAAAAAAAAAA840155555555555543FD49327104EE2CAC0140 00000000000400AAAAAAAAAAAA84017FFFFFFFFFFFF3FD6C16C16C16C15C0140000000 00000400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD9203CAE759202C0140000000000004 00AAAAAAAAAAAA8401D5555555555553FDBAF98D76B5492C014000000000000400AAAA AAAAAAAA840200000000000003FDE6F8091A2B3C4C014000000000000400AAAAAAAAAA AA840215555555555553FE0AFF9EE8DD7CCC014000000000000400AAAAAAAAAAAA8402 2AAAAAAAAAAAA3FE240795CEB2406C014000000000000400AAAAAAAAAAAA84023FFFFF FFFFFFF3FE3E93E93E93E93C014000000000000400FFFFFFFFFFFFDC02400000000000 03FD92C5F92C5F92BC014000000000000400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FD6F E1A8C536FE2C014000000000000400FFFFFFFFFFFFDC0215555555555563FD50061172 28339C014000000000000400FFFFFFFFFFFFDC0200000000000013FD3333333333333C 014000000000000400FFFFFFFFFFFFDC01D5555555555573FD19690E0857FCFC014000 000000000400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FD02A7A1F19690EC014000000000 000400FFFFFFFFFFFFDC0180000000000013FCDDDDDDDDDDDDDC014000000000000400 FFFFFFFFFFFFDC0155555555555563FCBC7DEA00C22E3C014000000000000400FFFFFF FFFFFFDC012AAAAAAAAAAAB3FCA12F684BDA12EC014000000000000400FFFFFFFFFFFF DC0100000000000003FC8BF258BF258BDC014000000000000400FFFFFFFFFFFFDC00AA AAAAAAAAAAB3FC7CC6BB5AA4991C014000000000000400FFFFFFFFFFFFDC0055555555 555563FC73AC901E573AAC014000000000000400FFFFFFFFFFFFDC0000000000000013 FC70A3D70A3D708C014000000000000400FFFFFFFFFFFFDBFF55555555555583FC73AC 901E573ABC014000000000000400FFFFFFFFFFFFDBFE555555555555B3FC7CC6BB5AA4 991C014000000000000400FFFFFFFFFFFFDBCC80000000000003FC8BF258BF258BDC01 4000000000000400FFFFFFFFFFFFD3FE555555555554F3FCA12F684BDA12DC01400000 0000000400FFFFFFFFFFFFD3FF55555555555523FCBC7DEA00C22E2C01400000000000 0400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FCDDDDDDDDDDDDBC014000000000000400FF FFFFFFFFFFD40055555555555533FD02A7A1F19690CC014000000000000400FFFFFFFF FFFFD400AAAAAAAAAAAA83FD19690E0857FCEC014000000000000400FFFFFFFFFFFFD4 00FFFFFFFFFFFFD3FD3333333333331C014000000000000400FFFFFFFFFFFFD4012AAA AAAAAAAA93FD5006117228337C014000000000000400FFFFFFFFFFFFD4015555555555 5543FD6FE1A8C536FE0C014000000000000400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FD 92C5F92C5F92AC014000000000000400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FDB8B302 A7A1F18C014000000000000400FFFFFFFFFFFFD401D5555555555553FDE1A8C536FE1A 7C014000000000000400FFFFFFFFFFFFD40200000000000003FE06D3A06D3A06DC0140 00000000000400FFFFFFFFFFFFD40215555555555553FE1E573AC901E56C0140000000 00000400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FE375F31AED6A91C0140000000000004 00FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE51EB851EB851EC0140000000000004012AAA AAAAAAAA9C0240000000000003FDBE02468ACF134C0140000000000004012AAAAAAAAA AA9C022AAAAAAAAAAAB3FD9B1DF623A67EAC0140000000000004012AAAAAAAAAAA9C02 15555555555563FD7B425ED097B42C0140000000000004012AAAAAAAAAAA9C02000000 00000013FD5E6F8091A2B3CC0140000000000004012AAAAAAAAAAA9C01D55555555555 73FD44A55B66C77D8C0140000000000004012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FD2D E3EF5006116C0140000000000004012AAAAAAAAAAA9C0180000000000013FD1A2B3C4D 5E6F7C0140000000000004012AAAAAAAAAAA9C0155555555555563FD097B425ED097AC 0140000000000004012AAAAAAAAAAA9C012AAAAAAAAAAAB3FCF7A80308B913FC014000 0000000004012AAAAAAAAAAA9C0100000000000003FCE26AF37C048CEC014000000000 0004012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FCD33F5617839A2C014000000000000401 2AAAAAAAAAAA9C0055555555555563FCCA252ADB363BBC0140000000000004012AAAAA AAAAAA9C0000000000000013FCC71C71C71C719C0140000000000004012AAAAAAAAAAA 9BFF55555555555583FCCA252ADB363BCC0140000000000004012AAAAAAAAAAA9BFE55 5555555555B3FCD33F5617839A2C0140000000000004012AAAAAAAAAAA9BCC80000000 000003FCE26AF37C048CEC0140000000000004012AAAAAAAAAAA93FE555555555554F3 FCF7A80308B913EC0140000000000004012AAAAAAAAAAA93FF55555555555523FD097B 425ED097AC0140000000000004012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FD1A2B3C4D5E 6F6C0140000000000004012AAAAAAAAAAA940055555555555533FD2DE3EF5006115C01 40000000000004012AAAAAAAAAAA9400AAAAAAAAAAAA83FD44A55B66C77D7C01400000 00000004012AAAAAAAAAAA9400FFFFFFFFFFFFD3FD5E6F8091A2B3AC01400000000000 04012AAAAAAAAAAA94012AAAAAAAAAAA93FD7B425ED097B3FC0140000000000004012A AAAAAAAAAA940155555555555543FD9B1DF623A67E9C0140000000000004012AAAAAAA AAAA94017FFFFFFFFFFFF3FDBE02468ACF133C0140000000000004012AAAAAAAAAAA94 01AAAAAAAAAAAAA3FDE3EF500611721C0140000000000004012AAAAAAAAAAA9401D555 5555555553FE0672894AB6CD8C0140000000000004012AAAAAAAAAAA94020000000000 0003FE1C71C71C71C71C0140000000000004012AAAAAAAAAAA940215555555555553FE 33F5617839A5BC0140000000000004012AAAAAAAAAAA94022AAAAAAAAAAAA3FE4CFD58 5E0E695C0140000000000004012AAAAAAAAAAA94023FFFFFFFFFFFF3FE6789ABCDF012 2C0140000000000004015555555555554C0240000000000003FDEDCBA98765431C0140 000000000004015555555555554C022AAAAAAAAAAAB3FDCAE759203CAE7C0140000000 000004015555555555554C0215555555555563FDAB0BC1CD2DE3FC0140000000000004 015555555555554C0200000000000013FD8E38E38E38E39C0140000000000004015555 555555554C01D5555555555573FD746EBE635DAD5C0140000000000004015555555555 554C01AAAAAAAAAAAAC3FD5DAD524C9C413C0140000000000004015555555555554C01 80000000000013FD49F49F49F49F4C0140000000000004015555555555554C01555555 55555563FD3944A55B66C77C0140000000000004015555555555554C012AAAAAAAAAAA B3FD2B9D6480F2B9CC0140000000000004015555555555554C0100000000000003FD20 FEDCBA98764C0140000000000004015555555555554C00AAAAAAAAAAAAB3FD19690E08 57FCEC0140000000000004015555555555554C0055555555555563FD14DBF86A314DBC 0140000000000004015555555555554C0000000000000013FD13579BE02468AC014000 0000000004015555555555554BFF55555555555583FD14DBF86A314DBC014000000000 0004015555555555554BFE555555555555B3FD19690E0857FCEC014000000000000401 5555555555554BCC80000000000003FD20FEDCBA98764C014000000000000401555555 55555543FE555555555554F3FD2B9D6480F2B9CC014000000000000401555555555555 43FF55555555555523FD3944A55B66C77C01400000000000040155555555555543FFFF FFFFFFFFFFC3FD49F49F49F49F3C014000000000000401555555555555440055555555 555533FD5DAD524C9C412C0140000000000004015555555555554400AAAAAAAAAAAA83 FD746EBE635DAD4C0140000000000004015555555555554400FFFFFFFFFFFFD3FD8E38 E38E38E37C01400000000000040155555555555544012AAAAAAAAAAA93FDAB0BC1CD2D E3CC014000000000000401555555555555440155555555555543FDCAE759203CAE6C01 400000000000040155555555555544017FFFFFFFFFFFF3FDEDCBA98765430C01400000 00000004015555555555554401AAAAAAAAAAAAA3FE09DC598153D0FC01400000000000 04015555555555554401D5555555555553FE1E573AC901E57C01400000000000040155 5555555555440200000000000003FE3456789ABCDF0C01400000000000040155555555 5555440215555555555553FE4BDA12F684BD9C01400000000000040155555555555544 022AAAAAAAAAAAA3FE64E209DC59814C01400000000000040155555555555544023FFF FFFFFFFFF3FE7F6E5D4C3B2A0C0140000000000004017FFFFFFFFFFFFC024000000000 0003FE1111111111111C0140000000000004017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD FF3DD1BAF98D7C0140000000000004017FFFFFFFFFFFFC0215555555555563FDDF623A 67EAC2FC0140000000000004017FFFFFFFFFFFFC0200000000000013FDC28F5C28F5C2 9C0140000000000004017FFFFFFFFFFFFC01D5555555555573FDA8C536FE1A8C5C0140 000000000004017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD9203CAE759203C0140000000 000004017FFFFFFFFFFFFC0180000000000013FD7E4B17E4B17E4C0140000000000004 017FFFFFFFFFFFFC0155555555555563FD6D9B1DF623A67C0140000000000004017FFF FFFFFFFFFC012AAAAAAAAAAAB3FD5FF3DD1BAF98CC0140000000000004017FFFFFFFFF FFFC0100000000000003FD5555555555554C0140000000000004017FFFFFFFFFFFFC00 AAAAAAAAAAAAB3FD4DBF86A314DBEC0140000000000004017FFFFFFFFFFFFC00555555 55555563FD49327104EE2CBC0140000000000004017FFFFFFFFFFFFC00000000000000 13FD47AE147AE147AC0140000000000004017FFFFFFFFFFFFBFF55555555555583FD49 327104EE2CBC0140000000000004017FFFFFFFFFFFFBFE555555555555B3FD4DBF86A3 14DBEC0140000000000004017FFFFFFFFFFFFBCC80000000000003FD5555555555554C 0140000000000004017FFFFFFFFFFFF3FE555555555554F3FD5FF3DD1BAF98CC014000 0000000004017FFFFFFFFFFFF3FF55555555555523FD6D9B1DF623A67C014000000000 0004017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD7E4B17E4B17E3C014000000000000401 7FFFFFFFFFFFF40055555555555533FD9203CAE759202C0140000000000004017FFFFF FFFFFFF400AAAAAAAAAAAA83FDA8C536FE1A8C4C0140000000000004017FFFFFFFFFFF F400FFFFFFFFFFFFD3FDC28F5C28F5C27C0140000000000004017FFFFFFFFFFFF4012A AAAAAAAAAA93FDDF623A67EAC2CC0140000000000004017FFFFFFFFFFFF40155555555 555543FDFF3DD1BAF98D6C0140000000000004017FFFFFFFFFFFF4017FFFFFFFFFFFF3 FE1111111111110C0140000000000004017FFFFFFFFFFFF401AAAAAAAAAAAAA3FE2407 95CEB2407C0140000000000004017FFFFFFFFFFFF401D5555555555553FE3882771660 54FC0140000000000004017FFFFFFFFFFFF40200000000000003FE4E81B4E81B4E8C01 40000000000004017FFFFFFFFFFFF40215555555555553FE66054F43E32D1C01400000 00000004017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE7F0D4629B7F0CC01400000000000 04017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE9999999999998C014000000000000401AA AAAAAAAAAAAC0240000000000003FE2D82D82D82D83C014000000000000401AAAAAAAA AAAAAC022AAAAAAAAAAAB3FE1C10AFF9EE8DEC014000000000000401AAAAAAAAAAAAAC 0215555555555563FE0C22E4506728AC014000000000000401AAAAAAAAAAAAAC020000 0000000013FDFB72EA61D950EC014000000000000401AAAAAAAAAAAAAC01D555555555 5573FDE1A8C536FE1AAC014000000000000401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD CAE759203CAE8C014000000000000401AAAAAAAAAAAAAC0180000000000013FDB72EA6 1D950C9C014000000000000401AAAAAAAAAAAAAC0155555555555563FDA67EAC2F0734 CC014000000000000401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD98D76B5493271C0140 00000000000401AAAAAAAAAAAAAC0100000000000003FD8E38E38E38E39C0140000000 00000401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FD86A314DBF86A3C0140000000000004 01AAAAAAAAAAAAAC0055555555555563FD8215FF3DD1BB0C014000000000000401AAAA AAAAAAAAAC0000000000000013FD8091A2B3C4D5FC014000000000000401AAAAAAAAAA AAABFF55555555555583FD8215FF3DD1BB0C014000000000000401AAAAAAAAAAAAABFE 555555555555B3FD86A314DBF86A3C014000000000000401AAAAAAAAAAAAABCC800000 00000003FD8E38E38E38E39C014000000000000401AAAAAAAAAAAAA3FE555555555554 F3FD98D76B5493271C014000000000000401AAAAAAAAAAAAA3FF55555555555523FDA6 7EAC2F0734CC014000000000000401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FDB72EA61D 950C8C014000000000000401AAAAAAAAAAAAA40055555555555533FDCAE759203CAE7C 014000000000000401AAAAAAAAAAAAA400AAAAAAAAAAAA83FDE1A8C536FE1A9C014000 000000000401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FDFB72EA61D950CC014000000000 000401AAAAAAAAAAAAA4012AAAAAAAAAAA93FE0C22E45067289C014000000000000401 AAAAAAAAAAAAA40155555555555543FE1C10AFF9EE8DDC014000000000000401AAAAAA AAAAAAA4017FFFFFFFFFFFF3FE2D82D82D82D83C014000000000000401AAAAAAAAAAAA A401AAAAAAAAAAAAA3FE40795CEB24079C014000000000000401AAAAAAAAAAAAA401D5 555555555553FE54F43E32D21C1C014000000000000401AAAAAAAAAAAAA40200000000 000003FE6AF37C048D15AC014000000000000401AAAAAAAAAAAAA40215555555555553 FE8277166054F44C014000000000000401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE9B7F 0D4629B7EC014000000000000401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FEB60B60B60B 60BC014000000000000401D555555555555C0240000000000003FE4C3B2A1907F6EC01 4000000000000401D555555555555C022AAAAAAAAAAAB3FE3AC901E573ACAC01400000 0000000401D555555555555C0215555555555563FE2ADB363BEC475C01400000000000 0401D555555555555C0200000000000013FE1C71C71C71C73C014000000000000401D5 55555555555C01D5555555555573FE0F8CB487042C1C014000000000000401D5555555 55555C01AAAAAAAAAAAAC3FE042BFE7BA3760C014000000000000401D555555555555C 0180000000000013FDF49F49F49F4A0C014000000000000401D555555555555C015555 5555555563FDE3EF500611723C014000000000000401D555555555555C012AAAAAAAAA AAB3FDD6480F2B9D648C014000000000000401D555555555555C0100000000000003FD CBA9876543210C014000000000000401D555555555555C00AAAAAAAAAAAAB3FDC413B8 B302A7AC014000000000000401D555555555555C0055555555555563FDBF86A314DBF8 7C014000000000000401D555555555555C0000000000000013FDBE02468ACF136C0140 00000000000401D555555555555BFF55555555555583FDBF86A314DBF87C0140000000 00000401D555555555555BFE555555555555B3FDC413B8B302A7AC0140000000000004 01D555555555555BCC80000000000003FDCBA9876543210C014000000000000401D555 5555555553FE555555555554F3FDD6480F2B9D648C014000000000000401D555555555 5553FF55555555555523FDE3EF500611723C014000000000000401D5555555555553FF FFFFFFFFFFFFC3FDF49F49F49F49FC014000000000000401D555555555555400555555 55555533FE042BFE7BA375FC014000000000000401D555555555555400AAAAAAAAAAAA 83FE0F8CB487042C0C014000000000000401D555555555555400FFFFFFFFFFFFD3FE1C 71C71C71C72C014000000000000401D5555555555554012AAAAAAAAAAA93FE2ADB363B EC474C014000000000000401D55555555555540155555555555543FE3AC901E573AC9C 014000000000000401D5555555555554017FFFFFFFFFFFF3FE4C3B2A1907F6EC014000 000000000401D555555555555401AAAAAAAAAAAAA3FE5F31AED6A9265C014000000000 000401D555555555555401D5555555555553FE73AC901E573ACC014000000000000401 D55555555555540200000000000003FE89ABCDF012346C014000000000000401D55555 555555540215555555555553FEA12F684BDA12FC014000000000000401D55555555555 54022AAAAAAAAAAAA3FEBA375F31AED6AC014000000000000401D5555555555554023F FFFFFFFFFFF3FED4C3B2A1907F6C0140000000000004020000000000000C0240000000 000003FE6D3A06D3A06D4C0140000000000004020000000000000C022AAAAAAAAAAAB3 FE5BC7DEA00C230C0140000000000004020000000000000C0215555555555563FE4BDA 12F684BDBC0140000000000004020000000000000C0200000000000013FE3D70A3D70A 3D9C0140000000000004020000000000000C01D5555555555573FE308B91419CA27C01 40000000000004020000000000000C01AAAAAAAAAAAAC3FE252ADB363BEC6C01400000 00000004020000000000000C0180000000000013FE1B4E81B4E81B6C01400000000000 04020000000000000C0155555555555563FE12F684BDA12F7C01400000000000040200 00000000000C012AAAAAAAAAAAB3FE0C22E4506728AC01400000000000040200000000 00000C0100000000000003FE06D3A06D3A06EC0140000000000004020000000000000C 00AAAAAAAAAAAAB3FE0308B91419CA3C0140000000000004020000000000000C005555 5555555563FE00C22E4506729C0140000000000004020000000000000C000000000000 0013FE0000000000001C0140000000000004020000000000000BFF55555555555583FE 00C22E4506729C0140000000000004020000000000000BFE555555555555B3FE0308B9 1419CA3C0140000000000004020000000000000BCC80000000000003FE06D3A06D3A06 EC01400000000000040200000000000003FE555555555554F3FE0C22E4506728AC0140 0000000000040200000000000003FF55555555555523FE12F684BDA12F7C0140000000 0000040200000000000003FFFFFFFFFFFFFFC3FE1B4E81B4E81B5C0140000000000004 02000000000000040055555555555533FE252ADB363BEC5C0140000000000004020000 000000000400AAAAAAAAAAAA83FE308B91419CA25C0140000000000004020000000000 000400FFFFFFFFFFFFD3FE3D70A3D70A3D8C0140000000000004020000000000000401 2AAAAAAAAAAA93FE4BDA12F684BDAC0140000000000004020000000000000401555555 55555543FE5BC7DEA00C22FC01400000000000040200000000000004017FFFFFFFFFFF F3FE6D3A06D3A06D4C0140000000000004020000000000000401AAAAAAAAAAAAA3FE80 308B91419CBC0140000000000004020000000000000401D5555555555553FE94AB6CD8 EFB12C014000000000000402000000000000040200000000000003FEAAAAAAAAAAAACC 014000000000000402000000000000040215555555555553FEC22E450672895C014000 00000000040200000000000004022AAAAAAAAAAAA3FEDB363BEC474D0C014000000000 00040200000000000004023FFFFFFFFFFFF3FEF5C28F5C28F5CC014000000000000402 1555555555555C0240000000000003FE907F6E5D4C3B2C014000000000000402155555 5555555C022AAAAAAAAAAAB3FE7F0D4629B7F0EC014000000000000402155555555555 5C0215555555555563FE6F1F7A80308B9C0140000000000004021555555555555C0200 000000000013FE60B60B60B60B7C0140000000000004021555555555555C01D5555555 555573FE53D0F8CB48705C0140000000000004021555555555555C01AAAAAAAAAAAAC3 FE487042BFE7BA4C0140000000000004021555555555555C0180000000000013FE3E93 E93E93E94C0140000000000004021555555555555C0155555555555563FE363BEC474C FD5C0140000000000004021555555555555C012AAAAAAAAAAAB3FE2F684BDA12F69C01 40000000000004021555555555555C0100000000000003FE2A1907F6E5D4CC01400000 00000004021555555555555C00AAAAAAAAAAAAB3FE264E209DC5982C01400000000000 04021555555555555C0055555555555563FE240795CEB2407C01400000000000040215 55555555555C0000000000000013FE23456789ABCDEC01400000000000040215555555 55555BFF55555555555583FE240795CEB2407C0140000000000004021555555555555B FE555555555555B3FE264E209DC5981C0140000000000004021555555555555BCC8000 0000000003FE2A1907F6E5D4CC01400000000000040215555555555553FE5555555555 54F3FE2F684BDA12F68C01400000000000040215555555555553FF55555555555523FE 363BEC474CFD5C01400000000000040215555555555553FFFFFFFFFFFFFFC3FE3E93E9 3E93E93C014000000000000402155555555555540055555555555533FE487042BFE7BA 3C0140000000000004021555555555555400AAAAAAAAAAAA83FE53D0F8CB48703C0140 000000000004021555555555555400FFFFFFFFFFFFD3FE60B60B60B60B6C0140000000 0000040215555555555554012AAAAAAAAAAA93FE6F1F7A80308B8C0140000000000004 02155555555555540155555555555543FE7F0D4629B7F0DC0140000000000004021555 5555555554017FFFFFFFFFFFF3FE907F6E5D4C3B2C0140000000000004021555555555 555401AAAAAAAAAAAAA3FEA375F31AED6A9C0140000000000004021555555555555401 D5555555555553FEB7F0D4629B7F0C0140000000000004021555555555555402000000 00000003FECDF012345678AC0140000000000004021555555555555402155555555555 53FEE573AC901E573C01400000000000040215555555555554022AAAAAAAAAAAA3FEFE 7BA375F31AEC01400000000000040215555555555554023FFFFFFFFFFFF3FF0C83FB72 EA61DC0140000000000004022AAAAAAAAAAAAC0240000000000003FEB60B60B60B60BC 0140000000000004022AAAAAAAAAAAAC022AAAAAAAAAAAB3FEA499388277166C014000 0000000004022AAAAAAAAAAAAC0215555555555563FE94AB6CD8EFB11C014000000000 0004022AAAAAAAAAAAAC0200000000000013FE8641FDB97530FC014000000000000402 2AAAAAAAAAAAAC01D5555555555573FE795CEB240795CC0140000000000004022AAAAA AAAAAAAC01AAAAAAAAAAAAC3FE6DFC3518A6DFCC0140000000000004022AAAAAAAAAAA AC0180000000000013FE641FDB97530ECC0140000000000004022AAAAAAAAAAAAC0155 555555555563FE5BC7DEA00C22DC0140000000000004022AAAAAAAAAAAAC012AAAAAAA AAAAB3FE54F43E32D21C1C0140000000000004022AAAAAAAAAAAAC0100000000000003 FE4FA4FA4FA4FA4C0140000000000004022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE4BDA 12F684BDAC0140000000000004022AAAAAAAAAAAAC0055555555555563FE4993882771 65FC0140000000000004022AAAAAAAAAAAAC0000000000000013FE48D159E26AF36C01 40000000000004022AAAAAAAAAAAABFF55555555555583FE499388277165FC01400000 00000004022AAAAAAAAAAAABFE555555555555B3FE4BDA12F684BD9C01400000000000 04022AAAAAAAAAAAABCC80000000000003FE4FA4FA4FA4FA4C0140000000000004022A AAAAAAAAAAA3FE555555555554F3FE54F43E32D21C0C0140000000000004022AAAAAAA AAAAA3FF55555555555523FE5BC7DEA00C22DC0140000000000004022AAAAAAAAAAAA3 FFFFFFFFFFFFFFC3FE641FDB97530EBC0140000000000004022AAAAAAAAAAAA4005555 5555555533FE6DFC3518A6DFBC0140000000000004022AAAAAAAAAAAA400AAAAAAAAAA AA83FE795CEB240795BC0140000000000004022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE 8641FDB97530EC0140000000000004022AAAAAAAAAAAA4012AAAAAAAAAAA93FE94AB6C D8EFB10C0140000000000004022AAAAAAAAAAAA40155555555555543FEA49938827716 5C0140000000000004022AAAAAAAAAAAA4017FFFFFFFFFFFF3FEB60B60B60B60AC0140 000000000004022AAAAAAAAAAAA401AAAAAAAAAAAAA3FEC901E573AC901C0140000000 000004022AAAAAAAAAAAA401D5555555555553FEDD7CC6BB5AA48C0140000000000004 022AAAAAAAAAAAA40200000000000003FEF37C048D159E2C0140000000000004022AAA AAAAAAAAA40215555555555553FF057FCF746EBE5C0140000000000004022AAAAAAAAA AAA4022AAAAAAAAAAAA3FF1203CAE759203C0140000000000004022AAAAAAAAAAAA402 3FFFFFFFFFFFF3FF1F49F49F49F49C0140000000000004023FFFFFFFFFFFFC02400000 00000003FEDDDDDDDDDDDDDC0140000000000004023FFFFFFFFFFFFC022AAAAAAAAAAA B3FECC6BB5AA49938C0140000000000004023FFFFFFFFFFFFC0215555555555563FEBC 7DEA00C22E3C0140000000000004023FFFFFFFFFFFFC0200000000000013FEAE147AE1 47AE1C0140000000000004023FFFFFFFFFFFFC01D5555555555573FEA12F684BDA12EC 0140000000000004023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE95CEB240795CEC014000 0000000004023FFFFFFFFFFFFC0180000000000013FE8BF258BF258BEC014000000000 0004023FFFFFFFFFFFFC0155555555555563FE839A5BC7DE9FFC014000000000000402 3FFFFFFFFFFFFC012AAAAAAAAAAAB3FE7CC6BB5AA4993C0140000000000004023FFFFF FFFFFFFC0100000000000003FE7777777777776C0140000000000004023FFFFFFFFFFF FC00AAAAAAAAAAAAB3FE73AC901E573ACC0140000000000004023FFFFFFFFFFFFC0055 555555555563FE7166054F43E31C0140000000000004023FFFFFFFFFFFFC0000000000 000013FE70A3D70A3D708C0140000000000004023FFFFFFFFFFFFBFF55555555555583 FE7166054F43E31C0140000000000004023FFFFFFFFFFFFBFE555555555555B3FE73AC 901E573ABC0140000000000004023FFFFFFFFFFFFBCC80000000000003FE7777777777 776C0140000000000004023FFFFFFFFFFFF3FE555555555554F3FE7CC6BB5AA4992C01 40000000000004023FFFFFFFFFFFF3FF55555555555523FE839A5BC7DE9FFC01400000 00000004023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE8BF258BF258BDC01400000000000 04023FFFFFFFFFFFF40055555555555533FE95CEB240795CDC0140000000000004023F FFFFFFFFFFF400AAAAAAAAAAAA83FEA12F684BDA12DC0140000000000004023FFFFFFF FFFFF400FFFFFFFFFFFFD3FEAE147AE147AE0C0140000000000004023FFFFFFFFFFFF4 012AAAAAAAAAAA93FEBC7DEA00C22E2C0140000000000004023FFFFFFFFFFFF4015555 5555555543FECC6BB5AA49937C0140000000000004023FFFFFFFFFFFF4017FFFFFFFFF FFF3FEDDDDDDDDDDDDCC0140000000000004023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE F0D4629B7F0D3C0140000000000004023FFFFFFFFFFFF401D5555555555553FF02A7A1 F19690DC0140000000000004023FFFFFFFFFFFF40200000000000003FF0DA740DA740D AC0140000000000004023FFFFFFFFFFFF40215555555555553FF19690E0857FCEC0140 000000000004023FFFFFFFFFFFF4022AAAAAAAAAAAA3FF25ED097B425ECC0140000000 000004023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF3333333333332C013555555555555C 024000000000000C0240000000000003FE0888888888889C013555555555555C024000 000000000C022AAAAAAAAAAAB3FDEE2CC0A9E87C7C013555555555555C024000000000 000C0215555555555563FDCE512956D9B1FC013555555555555C024000000000000C02 00000000000013FDB17E4B17E4B19C013555555555555C024000000000000C01D55555 55555573FD97B425ED097B5C013555555555555C024000000000000C01AAAAAAAAAAAA C3FD80F2B9D6480F3C013555555555555C024000000000000C0180000000000013FD6D 3A06D3A06D4C013555555555555C024000000000000C0155555555555563FD5C8A0CE5 12957C013555555555555C024000000000000C012AAAAAAAAAAAB3FD4EE2CC0A9E87CC 013555555555555C024000000000000C0100000000000003FD4444444444444C013555 555555555C024000000000000C00AAAAAAAAAAAAB3FD3CAE759203CAEC013555555555 555C024000000000000C0055555555555563FD38215FF3DD1BBC013555555555555C02 4000000000000C0000000000000013FD369D0369D036AC013555555555555C02400000 0000000BFF55555555555583FD38215FF3DD1BBC013555555555555C02400000000000 0BFE555555555555B3FD3CAE759203CAEC013555555555555C024000000000000BCC80 000000000003FD4444444444444C013555555555555C0240000000000003FE55555555 5554F3FD4EE2CC0A9E87CC013555555555555C0240000000000003FF55555555555523 FD5C8A0CE512957C013555555555555C0240000000000003FFFFFFFFFFFFFFC3FD6D3A 06D3A06D3C013555555555555C02400000000000040055555555555533FD80F2B9D648 0F2C013555555555555C024000000000000400AAAAAAAAAAAA83FD97B425ED097B4C01 3555555555555C024000000000000400FFFFFFFFFFFFD3FDB17E4B17E4B17C01355555 5555555C0240000000000004012AAAAAAAAAAA93FDCE512956D9B1CC01355555555555 5C02400000000000040155555555555543FDEE2CC0A9E87C6C013555555555555C0240 000000000004017FFFFFFFFFFFF3FE0888888888888C013555555555555C0240000000 00000401AAAAAAAAAAAAA3FE1B7F0D4629B7FC013555555555555C0240000000000004 01D5555555555553FE2FF9EE8DD7CC7C013555555555555C0240000000000004020000 0000000003FE45F92C5F92C60C013555555555555C0240000000000004021555555555 5553FE5D7CC6BB5AA49C013555555555555C0240000000000004022AAAAAAAAAAAA3FE 7684BDA12F684C013555555555555C0240000000000004023FFFFFFFFFFFF3FE911111 1111110C013555555555555C022AAAAAAAAAAABC0240000000000003FDDCBA98765432 2C013555555555555C022AAAAAAAAAAABC022AAAAAAAAAAAB3FDB9D6480F2B9D8C0135 55555555555C022AAAAAAAAAAABC0215555555555563FD99FAB0BC1CD30C0135555555 55555C022AAAAAAAAAAABC0200000000000013FD7D27D27D27D2AC013555555555555C 022AAAAAAAAAAABC01D5555555555573FD635DAD524C9C6C013555555555555C022AAA AAAAAAAABC01AAAAAAAAAAAAC3FD4C9C413B8B304C013555555555555C022AAAAAAAAA AABC0180000000000013FD38E38E38E38E5C013555555555555C022AAAAAAAAAAABC01 55555555555563FD2833944A55B68C013555555555555C022AAAAAAAAAAABC012AAAAA AAAAAAB3FD1A8C536FE1A8DC013555555555555C022AAAAAAAAAAABC01000000000000 03FD0FEDCBA987655C013555555555555C022AAAAAAAAAAABC00AAAAAAAAAAAAB3FD08 57FCF746EBFC013555555555555C022AAAAAAAAAAABC0055555555555563FD03CAE759 203CCC013555555555555C022AAAAAAAAAAABC0000000000000013FD02468ACF1357BC 013555555555555C022AAAAAAAAAAABBFF55555555555583FD03CAE759203CCC013555 555555555C022AAAAAAAAAAABBFE555555555555B3FD0857FCF746EBFC013555555555 555C022AAAAAAAAAAABBCC80000000000003FD0FEDCBA987655C013555555555555C02 2AAAAAAAAAAAB3FE555555555554F3FD1A8C536FE1A8DC013555555555555C022AAAAA AAAAAAB3FF55555555555523FD2833944A55B68C013555555555555C022AAAAAAAAAAA B3FFFFFFFFFFFFFFC3FD38E38E38E38E4C013555555555555C022AAAAAAAAAAAB40055 555555555533FD4C9C413B8B303C013555555555555C022AAAAAAAAAAAB400AAAAAAAA AAAA83FD635DAD524C9C5C013555555555555C022AAAAAAAAAAAB400FFFFFFFFFFFFD3 FD7D27D27D27D28C013555555555555C022AAAAAAAAAAAB4012AAAAAAAAAAA93FD99FA B0BC1CD2DC013555555555555C022AAAAAAAAAAAB40155555555555543FDB9D6480F2B 9D7C013555555555555C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FDDCBA987654321C01 3555555555555C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FE0153D0F8CB487C01355555 5555555C022AAAAAAAAAAAB401D5555555555553FE15CEB240795CFC01355555555555 5C022AAAAAAAAAAAB40200000000000003FE2BCDF01234568C013555555555555C022A AAAAAAAAAAB40215555555555553FE43518A6DFC352C013555555555555C022AAAAAAA AAAAB4022AAAAAAAAAAAA3FE5C598153D0F8CC013555555555555C022AAAAAAAAAAAB4 023FFFFFFFFFFFF3FE76E5D4C3B2A19C013555555555555C021555555555556C024000 0000000003FDACF13579BE025C013555555555555C021555555555556C022AAAAAAAAA AAB3FD8A0CE512956DCC013555555555555C021555555555556C0215555555555563FD 6A314DBF86A33C013555555555555C021555555555556C0200000000000013FD4D5E6F 8091A2DC013555555555555C021555555555556C01D5555555555573FD33944A55B66C 9C013555555555555C021555555555556C01AAAAAAAAAAAAC3FD1CD2DE3EF5008C0135 55555555555C021555555555556C0180000000000013FD091A2B3C4D5E9C0135555555 55555C021555555555556C0155555555555563FCF0D4629B7F0D7C013555555555555C 021555555555556C012AAAAAAAAAAAB3FCD585E0E696F22C013555555555555C021555 555555556C0100000000000003FCC048D159E26B1C013555555555555C021555555555 556C00AAAAAAAAAAAAB3FCB11D33F561785C013555555555555C021555555555556C00 55555555555563FCA80308B91419EC013555555555555C021555555555556C00000000 00000013FCA4FA4FA4FA4FCC013555555555555C021555555555556BFF555555555555 83FCA80308B91419FC013555555555555C021555555555556BFE555555555555B3FCB1 1D33F561785C013555555555555C021555555555556BCC80000000000003FCC048D159 E26B1C013555555555555C0215555555555563FE555555555554F3FCD585E0E696F21C 013555555555555C0215555555555563FF55555555555523FCF0D4629B7F0D6C013555 555555555C0215555555555563FFFFFFFFFFFFFFC3FD091A2B3C4D5E7C013555555555 555C02155555555555640055555555555533FD1CD2DE3EF5006C013555555555555C02 1555555555556400AAAAAAAAAAAA83FD33944A55B66C8C013555555555555C02155555 5555556400FFFFFFFFFFFFD3FD4D5E6F8091A2BC013555555555555C02155555555555 64012AAAAAAAAAAA93FD6A314DBF86A31C013555555555555C02155555555555640155 555555555543FD8A0CE512956DAC013555555555555C0215555555555564017FFFFFFF FFFFF3FDACF13579BE024C013555555555555C021555555555556401AAAAAAAAAAAAA3 FDD2DE3EF500612C013555555555555C021555555555556401D5555555555553FDFBD4 01845C8A1C013555555555555C02155555555555640200000000000003FE13E93E93E9 3EAC013555555555555C02155555555555640215555555555553FE2B6CD8EFB11D3C01 3555555555555C0215555555555564022AAAAAAAAAAAA3FE4474CFD585E0EC01355555 5555555C0215555555555564023FFFFFFFFFFFF3FE5F0123456789BC01355555555555 5C020000000000001C0240000000000003FD81B4E81B4E81DC013555555555555C0200 00000000001C022AAAAAAAAAAAB3FD5ED097B425ED3C013555555555555C0200000000 00001C0215555555555563FD3EF500611722BC013555555555555C020000000000001C 0200000000000013FD2222222222225C013555555555555C020000000000001C01D555 5555555573FD0857FCF746EC1C013555555555555C020000000000001C01AAAAAAAAAA AAC3FCE32D21C10AFFEC013555555555555C020000000000001C0180000000000013FC BBBBBBBBBBBC0C013555555555555C020000000000001C0155555555555563FC9A5BC7 DEA00C6C013555555555555C020000000000001C012AAAAAAAAAAAB3FC7F0D4629B7F1 1C013555555555555C020000000000001C0100000000000003FC69D0369D036A0C0135 55555555555C020000000000001C00AAAAAAAAAAAAB3FC5AA4993882774C0135555555 55555C020000000000001C0055555555555563FC518A6DFC3518DC013555555555555C 020000000000001C0000000000000013FC4E81B4E81B4EBC013555555555555C020000 000000001BFF55555555555583FC518A6DFC3518EC013555555555555C020000000000 001BFE555555555555B3FC5AA4993882774C013555555555555C020000000000001BCC 80000000000003FC69D0369D036A0C013555555555555C0200000000000013FE555555 555554F3FC7F0D4629B7F10C013555555555555C0200000000000013FF555555555555 23FC9A5BC7DEA00C5C013555555555555C0200000000000013FFFFFFFFFFFFFFC3FCBB BBBBBBBBBBEC013555555555555C02000000000000140055555555555533FCE32D21C1 0AFFCC013555555555555C020000000000001400AAAAAAAAAAAA83FD0857FCF746EBFC 013555555555555C020000000000001400FFFFFFFFFFFFD3FD2222222222223C013555 555555555C0200000000000014012AAAAAAAAAAA93FD3EF5006117229C013555555555 555C02000000000000140155555555555543FD5ED097B425ED1C013555555555555C02 00000000000014017FFFFFFFFFFFF3FD81B4E81B4E81CC013555555555555C02000000 0000001401AAAAAAAAAAAAA3FDA7A1F19690E0AC013555555555555C02000000000000 1401D5555555555553FDD097B425ED099C013555555555555C02000000000000140200 000000000003FDFC962FC962FCCC013555555555555C02000000000000140215555555 555553FE15CEB240795CFC013555555555555C0200000000000014022AAAAAAAAAAAA3 FE2ED6A9264E20AC013555555555555C0200000000000014023FFFFFFFFFFFF3FE4962 FC962FC96C013555555555555C01D555555555557C0240000000000003FD5B05B05B05 B08C013555555555555C01D555555555557C022AAAAAAAAAAAB3FD38215FF3DD1BEC01 3555555555555C01D555555555557C0215555555555563FD1845C8A0CE515C01355555 5555555C01D555555555557C0200000000000013FCF6E5D4C3B2A1FC01355555555555 5C01D555555555557C01D5555555555573FCC3518A6DFC357C013555555555555C01D5 55555555557C01AAAAAAAAAAAAC3FC95CEB240795D3C013555555555555C01D5555555 55557C0180000000000013FC6E5D4C3B2A195C013555555555555C01D555555555557C 0155555555555563FC4CFD585E0E69BC013555555555555C01D555555555557C012AAA AAAAAAAAB3FC31AED6A9264E6C013555555555555C01D555555555557C010000000000 0003FC1C71C71C71C75C013555555555555C01D555555555557C00AAAAAAAAAAAAB3FC 0D4629B7F0D49C013555555555555C01D555555555557C0055555555555563FC042BFE 7BA3762C013555555555555C01D555555555557C0000000000000013FC0123456789AC 0C013555555555555C01D555555555557BFF55555555555583FC042BFE7BA3763C0135 55555555555C01D555555555557BFE555555555555B3FC0D4629B7F0D49C0135555555 55555C01D555555555557BCC80000000000003FC1C71C71C71C75C013555555555555C 01D5555555555573FE555555555554F3FC31AED6A9264E5C013555555555555C01D555 5555555573FF55555555555523FC4CFD585E0E69AC013555555555555C01D555555555 5573FFFFFFFFFFFFFFC3FC6E5D4C3B2A193C013555555555555C01D555555555557400 55555555555533FC95CEB240795D1C013555555555555C01D555555555557400AAAAAA AAAAAA83FCC3518A6DFC353C013555555555555C01D555555555557400FFFFFFFFFFFF D3FCF6E5D4C3B2A1AC013555555555555C01D5555555555574012AAAAAAAAAAA93FD18 45C8A0CE513C013555555555555C01D55555555555740155555555555543FD38215FF3 DD1BCC013555555555555C01D5555555555574017FFFFFFFFFFFF3FD5B05B05B05B06C 013555555555555C01D555555555557401AAAAAAAAAAAAA3FD80F2B9D6480F4C013555 555555555C01D555555555557401D5555555555553FDA9E87C65A4383C013555555555 555C01D55555555555740200000000000003FDD5E6F8091A2B6C013555555555555C01 D55555555555740215555555555553FE0277166054F44C013555555555555C01D55555 55555574022AAAAAAAAAAAA3FE1B7F0D4629B7FC013555555555555C01D55555555555 74023FFFFFFFFFFFF3FE360B60B60B60CC013555555555555C01AAAAAAAAAAAACC0240 000000000003FD38E38E38E38E4C013555555555555C01AAAAAAAAAAAACC022AAAAAAA AAAAB3FD15FF3DD1BAF9AC013555555555555C01AAAAAAAAAAAACC0215555555555563 FCEC474CFD585E4C013555555555555C01AAAAAAAAAAAACC0200000000000013FCB2A1 907F6E5D9C013555555555555C01AAAAAAAAAAAACC01D5555555555573FC7F0D4629B7 F10C013555555555555C01AAAAAAAAAAAACC01AAAAAAAAAAAAC3FC518A6DFC3518DC01 3555555555555C01AAAAAAAAAAAACC0180000000000013FC2A1907F6E5D4FC01355555 5555555C01AAAAAAAAAAAACC0155555555555563FC08B91419CA254C01355555555555 5C01AAAAAAAAAAAACC012AAAAAAAAAAAB3FBDAD524C9C413FC013555555555555C01AA AAAAAAAAAACC0100000000000003FBB05B05B05B05DC013555555555555C01AAAAAAAA AAAACC00AAAAAAAAAAAAB3FB9203CAE759206C013555555555555C01AAAAAAAAAAAACC 0055555555555563FB7FCF746EBE638C013555555555555C01AAAAAAAAAAAACC000000 0000000013FB79BE02468ACF3C013555555555555C01AAAAAAAAAAAACBFF5555555555 5583FB7FCF746EBE638C013555555555555C01AAAAAAAAAAAACBFE555555555555B3FB 9203CAE759205C013555555555555C01AAAAAAAAAAAACBCC80000000000003FBB05B05 B05B05CC013555555555555C01AAAAAAAAAAAAC3FE555555555554F3FBDAD524C9C413 CC013555555555555C01AAAAAAAAAAAAC3FF55555555555523FC08B91419CA253C0135 55555555555C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FC2A1907F6E5D4DC0135555555 55555C01AAAAAAAAAAAAC40055555555555533FC518A6DFC3518BC013555555555555C 01AAAAAAAAAAAAC400AAAAAAAAAAAA83FC7F0D4629B7F0DC013555555555555C01AAAA AAAAAAAAC400FFFFFFFFFFFFD3FCB2A1907F6E5D4C013555555555555C01AAAAAAAAAA AAC4012AAAAAAAAAAA93FCEC474CFD585DFC013555555555555C01AAAAAAAAAAAAC401 55555555555543FD15FF3DD1BAF99C013555555555555C01AAAAAAAAAAAAC4017FFFFF FFFFFFF3FD38E38E38E38E3C013555555555555C01AAAAAAAAAAAAC401AAAAAAAAAAAA A3FD5ED097B425ED1C013555555555555C01AAAAAAAAAAAAC401D5555555555553FD87 C65A4382160C013555555555555C01AAAAAAAAAAAAC40200000000000003FDB3C4D5E6 F8092C013555555555555C01AAAAAAAAAAAAC40215555555555553FDE2CC0A9E87C66C 013555555555555C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FE0A6DFC3518A6DC013555 555555555C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FE24FA4FA4FA4FAC013555555555 555C018000000000001C0240000000000003FD1B4E81B4E81B6C013555555555555C01 8000000000001C022AAAAAAAAAAAB3FCF0D4629B7F0D8C013555555555555C01800000 0000001C0215555555555563FCB11D33F561787C013555555555555C01800000000000 1C0200000000000013FC777777777777CC013555555555555C018000000000001C01D5 555555555573FC43E32D21C10B4C013555555555555C018000000000001C01AAAAAAAA AAAAC3FC166054F43E330C013555555555555C018000000000001C0180000000000013 FBDDDDDDDDDDDE4C013555555555555C018000000000001C0155555555555563FB9B1D F623A67EFC013555555555555C018000000000001C012AAAAAAAAAAAB3FB6480F2B9D6 485C013555555555555C018000000000001C0100000000000003FB3A06D3A06D3A4C01 3555555555555C018000000000001C00AAAAAAAAAAAAB3FB1BAF98D76B54DC01355555 5555555C018000000000001C0055555555555563FB097B425ED097FC01355555555555 5C018000000000001C0000000000000013FB0369D0369D03AC013555555555555C0180 00000000001BFF55555555555583FB097B425ED097FC013555555555555C0180000000 00001BFE555555555555B3FB1BAF98D76B54CC013555555555555C018000000000001B CC80000000000003FB3A06D3A06D3A3C013555555555555C0180000000000013FE5555 55555554F3FB6480F2B9D6483C013555555555555C0180000000000013FF5555555555 5523FB9B1DF623A67EDC013555555555555C0180000000000013FFFFFFFFFFFFFFC3FB DDDDDDDDDDDE0C013555555555555C01800000000000140055555555555533FC166054 F43E32EC013555555555555C018000000000001400AAAAAAAAAAAA83FC43E32D21C10B 0C013555555555555C018000000000001400FFFFFFFFFFFFD3FC7777777777777C0135 55555555555C0180000000000014012AAAAAAAAAAA93FCB11D33F561783C0135555555 55555C01800000000000140155555555555543FCF0D4629B7F0D4C013555555555555C 0180000000000014017FFFFFFFFFFFF3FD1B4E81B4E81B5C013555555555555C018000 000000001401AAAAAAAAAAAAA3FD413B8B302A7A2C013555555555555C018000000000 001401D5555555555553FD6A314DBF86A32C013555555555555C018000000000001402 00000000000003FD962FC962FC964C013555555555555C018000000000001402155555 55555553FDC536FE1A8C537C013555555555555C0180000000000014022AAAAAAAAAAA A3FDF746EBE635DADC013555555555555C0180000000000014023FFFFFFFFFFFF3FE16 2FC962FC963C013555555555555C015555555555556C0240000000000003FD02468ACF 1357AC013555555555555C015555555555556C022AAAAAAAAAAAB3FCBEC474CFD5861C 013555555555555C015555555555556C0215555555555563FC7F0D4629B7F0FC013555 555555555C015555555555556C0200000000000013FC456789ABCDF04C013555555555 555C015555555555556C01D5555555555573FC11D33F561783CC013555555555555C01 5555555555556C01AAAAAAAAAAAAC3FBC8A0CE5129570C013555555555555C01555555 5555556C0180000000000013FB79BE02468ACF4C013555555555555C01555555555555 6C0155555555555563FB36FE1A8C536FFC013555555555555C015555555555556C012A AAAAAAAAAAB3FB0061172283395C013555555555555C015555555555556C0100000000 000003FAABCDF01234568C013555555555555C015555555555556C00AAAAAAAAAAAAB3 FA6F1F7A80308BAC013555555555555C015555555555556C0055555555555563FA4AB6 CD8EFB11EC013555555555555C015555555555556C0000000000000013FA3E93E93E93 E94C013555555555555C015555555555556BFF55555555555583FA4AB6CD8EFB11DC01 3555555555555C015555555555556BFE555555555555B3FA6F1F7A80308B9C01355555 5555555C015555555555556BCC80000000000003FAABCDF01234567C01355555555555 5C0155555555555563FE555555555554F3FB0061172283393C013555555555555C0155 555555555563FF55555555555523FB36FE1A8C536FDC013555555555555C0155555555 555563FFFFFFFFFFFFFFC3FB79BE02468ACF0C013555555555555C0155555555555564 0055555555555533FBC8A0CE512956CC013555555555555C015555555555556400AAAA AAAAAAAA83FC11D33F5617838C013555555555555C015555555555556400FFFFFFFFFF FFD3FC456789ABCDEFFC013555555555555C0155555555555564012AAAAAAAAAAA93FC 7F0D4629B7F0BC013555555555555C01555555555555640155555555555543FCBEC474 CFD585CC013555555555555C0155555555555564017FFFFFFFFFFFF3FD02468ACF1357 9C013555555555555C015555555555556401AAAAAAAAAAAAA3FD2833944A55B66C0135 55555555555C015555555555556401D5555555555553FD512956D9B1DF6C0135555555 55555C01555555555555640200000000000003FD7D27D27D27D28C013555555555555C 01555555555555640215555555555553FDAC2F0734B78FBC013555555555555C015555 5555555564022AAAAAAAAAAAA3FDDE3EF50061171C013555555555555C015555555555 5564023FFFFFFFFFFFF3FE09ABCDF012345C013555555555555C012AAAAAAAAAAABC02 40000000000003FCDB97530ECA864C013555555555555C012AAAAAAAAAAABC022AAAAA AAAAAAB3FC95CEB240795D1C013555555555555C012AAAAAAAAAAABC02155555555555 63FC5617839A5BC80C013555555555555C012AAAAAAAAAAABC0200000000000013FC1C 71C71C71C74C013555555555555C012AAAAAAAAAAABC01D5555555555573FBD1BAF98D 76B58C013555555555555C012AAAAAAAAAAABC01AAAAAAAAAAAAC3FB76B5493271051C 013555555555555C012AAAAAAAAAAABC0180000000000013FB27D27D27D27D5C013555 555555555C012AAAAAAAAAAABC0155555555555563FACA252ADB363C0C013555555555 555C012AAAAAAAAAAABC012AAAAAAAAAAAB3FA5CEB240795CEDC013555555555555C01 2AAAAAAAAAAABC0100000000000003FA07F6E5D4C3B2AC013555555555555C012AAAAA AAAAAABC00AAAAAAAAAAAAB3F99690E0857FCF8C013555555555555C012AAAAAAAAAAA BC0055555555555563F94DBF86A314DBFC013555555555555C012AAAAAAAAAAABC0000 000000000013F93579BE02468ACC013555555555555C012AAAAAAAAAAABBFF55555555 555583F94DBF86A314DBFC013555555555555C012AAAAAAAAAAABBFE555555555555B3 F99690E0857FCF5C013555555555555C012AAAAAAAAAAABBCC80000000000003FA07F6 E5D4C3B29C013555555555555C012AAAAAAAAAAAB3FE555555555554F3FA5CEB240795 CE9C013555555555555C012AAAAAAAAAAAB3FF55555555555523FACA252ADB363BCC01 3555555555555C012AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FB27D27D27D27D1C01355555 5555555C012AAAAAAAAAAAB40055555555555533FB76B549327104DC01355555555555 5C012AAAAAAAAAAAB400AAAAAAAAAAAA83FBD1BAF98D76B52C013555555555555C012A AAAAAAAAAAB400FFFFFFFFFFFFD3FC1C71C71C71C70C013555555555555C012AAAAAAA AAAAB4012AAAAAAAAAAA93FC5617839A5BC7CC013555555555555C012AAAAAAAAAAAB4 0155555555555543FC95CEB240795CDC013555555555555C012AAAAAAAAAAAB4017FFF FFFFFFFFF3FCDB97530ECA862C013555555555555C012AAAAAAAAAAAB401AAAAAAAAAA AAA3FD13B8B302A7A1FC013555555555555C012AAAAAAAAAAAB401D5555555555553FD 3CAE759203CAEC013555555555555C012AAAAAAAAAAAB40200000000000003FD68ACF1 3579BE0C013555555555555C012AAAAAAAAAAAB40215555555555553FD97B425ED097B 4C013555555555555C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FDC9C413B8B3029C0135 55555555555C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FDFEDCBA9876542C0135555555 55555C010000000000000C0240000000000003FCBBBBBBBBBBBBBC013555555555555C 010000000000000C022AAAAAAAAAAAB3FC75F31AED6A928C013555555555555C010000 000000000C0215555555555563FC363BEC474CFD7C013555555555555C010000000000 000C0200000000000013FBF92C5F92C5F97C013555555555555C010000000000000C01 D5555555555573FB9203CAE759206C013555555555555C010000000000000C01AAAAAA AAAAAAC3FB36FE1A8C536FFC013555555555555C010000000000000C01800000000000 13FAD0369D0369D07C013555555555555C010000000000000C0155555555555563FA4A B6CD8EFB11CC013555555555555C010000000000000C012AAAAAAAAAAAB3F9BAF98D76 B5492C013555555555555C010000000000000C0100000000000003F9111111111110CC 013555555555555C010000000000000C00AAAAAAAAAAAAB3F82F684BDA12F5FC013555 555555555C010000000000000C0055555555555563F73B8B302A7A1DCC013555555555 555C010000000000000C0000000000000013F6B4E81B4E81B26C013555555555555C01 0000000000000BFF55555555555583F73B8B302A7A1DAC013555555555555C01000000 0000000BFE555555555555B3F82F684BDA12F5BC013555555555555C01000000000000 0BCC80000000000003F91111111111109C013555555555555C0100000000000003FE55 5555555554F3F9BAF98D76B548BC013555555555555C0100000000000003FF55555555 555523FA4AB6CD8EFB118C013555555555555C0100000000000003FFFFFFFFFFFFFFC3 FAD0369D0369CFEC013555555555555C01000000000000040055555555555533FB36FE 1A8C536FBC013555555555555C010000000000000400AAAAAAAAAAAA83FB9203CAE759 200C013555555555555C010000000000000400FFFFFFFFFFFFD3FBF92C5F92C5F8EC01 3555555555555C0100000000000004012AAAAAAAAAAA93FC363BEC474CFD3C01355555 5555555C01000000000000040155555555555543FC75F31AED6A924C01355555555555 5C0100000000000004017FFFFFFFFFFFF3FCBBBBBBBBBBBB9C013555555555555C0100 00000000000401AAAAAAAAAAAAA3FD03CAE759203CAC013555555555555C0100000000 00000401D5555555555553FD2CC0A9E87C65AC013555555555555C0100000000000004 0200000000000003FD58BF258BF258CC013555555555555C0100000000000004021555 5555555553FD87C65A438215FC013555555555555C0100000000000004022AAAAAAAAA AAA3FDB9D6480F2B9D4C013555555555555C0100000000000004023FFFFFFFFFFFF3FD EEEEEEEEEEEEDC013555555555555C00AAAAAAAAAAAABC0240000000000003FCA4FA4F A4FA4FAC013555555555555C00AAAAAAAAAAAABC022AAAAAAAAAAAB3FC5F31AED6A926 7C013555555555555C00AAAAAAAAAAAABC0215555555555563FC1F7A80308B916C0135 55555555555C00AAAAAAAAAAAABC0200000000000013FBCBA9876543215C0135555555 55555C00AAAAAAAAAAAABC01D5555555555573FB6480F2B9D6484C013555555555555C 00AAAAAAAAAAAABC01AAAAAAAAAAAAC3FB097B425ED097DC013555555555555C00AAAA AAAAAAAABC0180000000000013FA7530ECA864203C013555555555555C00AAAAAAAAAA AABC0155555555555563F9DF623A67EAC30C013555555555555C00AAAAAAAAAAAABC01 2AAAAAAAAAAAB3F904EE2CC0A9E88C013555555555555C00AAAAAAAAAAAABC01000000 00000003F76C16C16C16C10C013555555555555C00AAAAAAAAAAAABC00AAAAAAAAAAAA BBF5E573AC901E596C013555555555555C00AAAAAAAAAAAABC005555555555556BF79C A252ADB3648C013555555555555C00AAAAAAAAAAAABC000000000000001BF7FDB97530 ECA8FC013555555555555C00AAAAAAAAAAAABBFF5555555555558BF79CA252ADB364AC 013555555555555C00AAAAAAAAAAAABBFE555555555555BBF5E573AC901E5B7C013555 555555555C00AAAAAAAAAAAABBCC80000000000003F76C16C16C16C03C013555555555 555C00AAAAAAAAAAAAB3FE555555555554F3F904EE2CC0A9E82C013555555555555C00 AAAAAAAAAAAAB3FF55555555555523F9DF623A67EAC29C013555555555555C00AAAAAA AAAAAAB3FFFFFFFFFFFFFFC3FA7530ECA8641F9C013555555555555C00AAAAAAAAAAAA B40055555555555533FB097B425ED0979C013555555555555C00AAAAAAAAAAAAB400AA AAAAAAAAAA83FB6480F2B9D647EC013555555555555C00AAAAAAAAAAAAB400FFFFFFFF FFFFD3FBCBA987654320CC013555555555555C00AAAAAAAAAAAAB4012AAAAAAAAAAA93 FC1F7A80308B912C013555555555555C00AAAAAAAAAAAAB40155555555555543FC5F31 AED6A9263C013555555555555C00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FCA4FA4FA4FA 4F8C013555555555555C00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FCF0D4629B7F0D3C01 3555555555555C00AAAAAAAAAAAAB401D5555555555553FD215FF3DD1BAF9C01355555 5555555C00AAAAAAAAAAAAB40200000000000003FD4D5E6F8091A2CC01355555555555 5C00AAAAAAAAAAAAB40215555555555553FD7C65A438215FFC013555555555555C00AA AAAAAAAAAAB4022AAAAAAAAAAAA3FDAE759203CAE74C013555555555555C00AAAAAAAA AAAAB4023FFFFFFFFFFFF3FDE38E38E38E38DC013555555555555C005555555555556C 0240000000000003FC97530ECA8641FC013555555555555C005555555555556C022AAA AAAAAAAAB3FC518A6DFC3518CC013555555555555C005555555555556C021555555555 5563FC11D33F561783BC013555555555555C005555555555556C0200000000000013FB B05B05B05B060C013555555555555C005555555555556C01D5555555555573FB493271 04EE2CFC013555555555555C005555555555556C01AAAAAAAAAAAAC3FADC598153D0F8 FC013555555555555C005555555555556C0180000000000013FA3E93E93E93E97C0135 55555555555C005555555555556C0155555555555563F9722833944A55CC0135555555 55555C005555555555556C012AAAAAAAAAAAB3F82F684BDA12F68C013555555555555C 005555555555556C010000000000000BF523456789ABD20C013555555555555C005555 555555556C00AAAAAAAAAAAABBF81722833944A5BC013555555555555C005555555555 556C005555555555556BF8A8C536FE1A8CEC013555555555555C005555555555556C00 0000000000001BF8D950C83FB72F4C013555555555555C005555555555556BFF555555 5555558BF8A8C536FE1A8CEC013555555555555C005555555555556BFE555555555555 BBF81722833944A61C013555555555555C005555555555556BCC8000000000000BF523 456789ABD46C013555555555555C0055555555555563FE555555555554F3F82F684BDA 12F5AC013555555555555C0055555555555563FF55555555555523F9722833944A554C 013555555555555C0055555555555563FFFFFFFFFFFFFFC3FA3E93E93E93E8FC013555 555555555C00555555555555640055555555555533FADC598153D0F86C013555555555 555C005555555555556400AAAAAAAAAAAA83FB49327104EE2C9C013555555555555C00 5555555555556400FFFFFFFFFFFFD3FBB05B05B05B057C013555555555555C00555555 55555564012AAAAAAAAAAA93FC11D33F5617837C013555555555555C00555555555555 640155555555555543FC518A6DFC35188C013555555555555C0055555555555564017F FFFFFFFFFFF3FC97530ECA8641EC013555555555555C005555555555556401AAAAAAAA AAAAA3FCE32D21C10AFF9C013555555555555C005555555555556401D5555555555553 FD1A8C536FE1A8CC013555555555555C00555555555555640200000000000003FD468A CF13579BEC013555555555555C00555555555555640215555555555553FD759203CAE7 591C013555555555555C0055555555555564022AAAAAAAAAAAA3FDA7A1F19690E07C01 3555555555555C0055555555555564023FFFFFFFFFFFF3FDDCBA98765431FC01355555 5555555C000000000000001C0240000000000003FC92C5F92C5F92CC01355555555555 5C000000000000001C022AAAAAAAAAAAB3FC4CFD585E0E699C013555555555555C0000 00000000001C0215555555555563FC0D4629B7F0D48C013555555555555C0000000000 00001C0200000000000013FBA740DA740DA79C013555555555555C000000000000001C 01D5555555555573FB401845C8A0CE8C013555555555555C000000000000001C01AAAA AAAAAAAAC3FACA252ADB363C1C013555555555555C000000000000001C018000000000 0013FA2C5F92C5F92CBC013555555555555C000000000000001C0155555555555563F9 4DBF86A314DC0C013555555555555C000000000000001C012AAAAAAAAAAAB3F7CD2DE3 EF50060C013555555555555C000000000000001C010000000000000BF6B4E81B4E81B7 0C013555555555555C000000000000001C00AAAAAAAAAAAABBF85FF3DD1BAF993C0135 55555555555C000000000000001C005555555555556BF8F19690E085806C0135555555 55555C000000000000001C000000000000001BF91111111111115C013555555555555C 000000000000001BFF5555555555558BF8F19690E085806C013555555555555C000000 000000001BFE555555555555BBF85FF3DD1BAF998C013555555555555C000000000000 001BCC8000000000000BF6B4E81B4E81B80C013555555555555C0000000000000013FE 555555555554F3F7CD2DE3EF50045C013555555555555C0000000000000013FF555555 55555523F94DBF86A314DB8C013555555555555C0000000000000013FFFFFFFFFFFFFF C3FA2C5F92C5F92C1C013555555555555C00000000000000140055555555555533FACA 252ADB363B9C013555555555555C000000000000001400AAAAAAAAAAAA83FB401845C8 A0CE2C013555555555555C000000000000001400FFFFFFFFFFFFD3FBA740DA740DA70C 013555555555555C0000000000000014012AAAAAAAAAAA93FC0D4629B7F0D44C013555 555555555C00000000000000140155555555555543FC4CFD585E0E695C013555555555 555C0000000000000014017FFFFFFFFFFFF3FC92C5F92C5F92AC013555555555555C00 0000000000001401AAAAAAAAAAAAA3FCDEA00C22E4505C013555555555555C00000000 0000001401D5555555555553FD1845C8A0CE512C013555555555555C00000000000000 140200000000000003FD4444444444444C013555555555555C00000000000000140215 555555555553FD734B78FBD4018C013555555555555C0000000000000014022AAAAAAA AAAAA3FDA55B66C77D88DC013555555555555C0000000000000014023FFFFFFFFFFFF3 FDDA740DA740DA6C013555555555555BFF5555555555558C0240000000000003FC9753 0ECA8641FC013555555555555BFF5555555555558C022AAAAAAAAAAAB3FC518A6DFC35 18CC013555555555555BFF5555555555558C0215555555555563FC11D33F561783BC01 3555555555555BFF5555555555558C0200000000000013FBB05B05B05B060C01355555 5555555BFF5555555555558C01D5555555555573FB49327104EE2CFC01355555555555 5BFF5555555555558C01AAAAAAAAAAAAC3FADC598153D0F8FC013555555555555BFF55 55555555558C0180000000000013FA3E93E93E93E97C013555555555555BFF55555555 55558C0155555555555563F9722833944A55CC013555555555555BFF5555555555558C 012AAAAAAAAAAAB3F82F684BDA12F68C013555555555555BFF5555555555558C010000 000000000BF523456789ABD20C013555555555555BFF5555555555558C00AAAAAAAAAA AABBF81722833944A5BC013555555555555BFF5555555555558C005555555555556BF8 A8C536FE1A8CEC013555555555555BFF5555555555558C000000000000001BF8D950C8 3FB72F4C013555555555555BFF5555555555558BFF5555555555558BF8A8C536FE1A8D 0C013555555555555BFF5555555555558BFE555555555555BBF81722833944A61C0135 55555555555BFF5555555555558BCC8000000000000BF523456789ABD49C0135555555 55555BFF55555555555583FE555555555554F3F82F684BDA12F59C013555555555555B FF55555555555583FF55555555555523F9722833944A553C013555555555555BFF5555 5555555583FFFFFFFFFFFFFFC3FA3E93E93E93E8FC013555555555555BFF5555555555 55840055555555555533FADC598153D0F86C013555555555555BFF5555555555558400 AAAAAAAAAAAA83FB49327104EE2C9C013555555555555BFF5555555555558400FFFFFF FFFFFFD3FBB05B05B05B056C013555555555555BFF55555555555584012AAAAAAAAAAA 93FC11D33F5617837C013555555555555BFF555555555555840155555555555543FC51 8A6DFC35188C013555555555555BFF55555555555584017FFFFFFFFFFFF3FC97530ECA 8641EC013555555555555BFF5555555555558401AAAAAAAAAAAAA3FCE32D21C10AFF9C 013555555555555BFF5555555555558401D5555555555553FD1A8C536FE1A8CC013555 555555555BFF555555555555840200000000000003FD468ACF13579BEC013555555555 555BFF555555555555840215555555555553FD759203CAE7591C013555555555555BFF 55555555555584022AAAAAAAAAAAA3FDA7A1F19690E07C013555555555555BFF555555 55555584023FFFFFFFFFFFF3FDDCBA98765431FC013555555555555BFE555555555555 BC0240000000000003FCA4FA4FA4FA4FAC013555555555555BFE555555555555BC022A AAAAAAAAAAB3FC5F31AED6A9267C013555555555555BFE555555555555BC0215555555 555563FC1F7A80308B915C013555555555555BFE555555555555BC0200000000000013 FBCBA9876543214C013555555555555BFE555555555555BC01D5555555555573FB6480 F2B9D6484C013555555555555BFE555555555555BC01AAAAAAAAAAAAC3FB097B425ED0 97CC013555555555555BFE555555555555BC0180000000000013FA7530ECA864201C01 3555555555555BFE555555555555BC0155555555555563F9DF623A67EAC2CC01355555 5555555BFE555555555555BC012AAAAAAAAAAAB3F904EE2CC0A9E86C01355555555555 5BFE555555555555BC0100000000000003F76C16C16C16C00C013555555555555BFE55 5555555555BC00AAAAAAAAAAAABBF5E573AC901E5B6C013555555555555BFE55555555 5555BC005555555555556BF79CA252ADB3654C013555555555555BFE555555555555BC 000000000000001BF7FDB97530ECA9BC013555555555555BFE555555555555BBFF5555 555555558BF79CA252ADB3656C013555555555555BFE555555555555BBFE5555555555 55BBF5E573AC901E5E7C013555555555555BFE555555555555BBCC80000000000003F7 6C16C16C16BF7C013555555555555BFE555555555555B3FE555555555554F3F904EE2C C0A9E7FC013555555555555BFE555555555555B3FF55555555555523F9DF623A67EAC2 6C013555555555555BFE555555555555B3FFFFFFFFFFFFFFC3FA7530ECA8641F8C0135 55555555555BFE555555555555B40055555555555533FB097B425ED0978C0135555555 55555BFE555555555555B400AAAAAAAAAAAA83FB6480F2B9D647DC013555555555555B FE555555555555B400FFFFFFFFFFFFD3FBCBA987654320BC013555555555555BFE5555 55555555B4012AAAAAAAAAAA93FC1F7A80308B911C013555555555555BFE5555555555 55B40155555555555543FC5F31AED6A9262C013555555555555BFE555555555555B401 7FFFFFFFFFFFF3FCA4FA4FA4FA4F8C013555555555555BFE555555555555B401AAAAAA AAAAAAA3FCF0D4629B7F0D3C013555555555555BFE555555555555B401D55555555555 53FD215FF3DD1BAF9C013555555555555BFE555555555555B40200000000000003FD4D 5E6F8091A2BC013555555555555BFE555555555555B40215555555555553FD7C65A438 215FEC013555555555555BFE555555555555B4022AAAAAAAAAAAA3FDAE759203CAE74C 013555555555555BFE555555555555B4023FFFFFFFFFFFF3FDE38E38E38E38DC013555 555555555BCC8000000000000C0240000000000003FCBBBBBBBBBBBBBC013555555555 555BCC8000000000000C022AAAAAAAAAAAB3FC75F31AED6A928C013555555555555BCC 8000000000000C0215555555555563FC363BEC474CFD6C013555555555555BCC800000 0000000C0200000000000013FBF92C5F92C5F97C013555555555555BCC800000000000 0C01D5555555555573FB9203CAE759206C013555555555555BCC8000000000000C01AA AAAAAAAAAAC3FB36FE1A8C536FEC013555555555555BCC8000000000000C0180000000 000013FAD0369D0369D05C013555555555555BCC8000000000000C0155555555555563 FA4AB6CD8EFB11BC013555555555555BCC8000000000000C012AAAAAAAAAAAB3F9BAF9 8D76B5490C013555555555555BCC8000000000000C0100000000000003F91111111111 10AC013555555555555BCC8000000000000C00AAAAAAAAAAAAB3F82F684BDA12F5BC01 3555555555555BCC8000000000000C0055555555555563F73B8B302A7A1D4C01355555 5555555BCC8000000000000C0000000000000013F6B4E81B4E81B16C01355555555555 5BCC8000000000000BFF55555555555583F73B8B302A7A1D2C013555555555555BCC80 00000000000BFE555555555555B3F82F684BDA12F57C013555555555555BCC80000000 00000BCC80000000000003F91111111111107C013555555555555BCC80000000000003 FE555555555554F3F9BAF98D76B5489C013555555555555BCC80000000000003FF5555 5555555523FA4AB6CD8EFB117C013555555555555BCC80000000000003FFFFFFFFFFFF FFC3FAD0369D0369CFDC013555555555555BCC800000000000040055555555555533FB 36FE1A8C536FAC013555555555555BCC8000000000000400AAAAAAAAAAAA83FB9203CA E759200C013555555555555BCC8000000000000400FFFFFFFFFFFFD3FBF92C5F92C5F8 EC013555555555555BCC80000000000004012AAAAAAAAAAA93FC363BEC474CFD2C0135 55555555555BCC800000000000040155555555555543FC75F31AED6A924C0135555555 55555BCC80000000000004017FFFFFFFFFFFF3FCBBBBBBBBBBBB9C013555555555555B CC8000000000000401AAAAAAAAAAAAA3FD03CAE759203CAC013555555555555BCC8000 000000000401D5555555555553FD2CC0A9E87C65AC013555555555555BCC8000000000 00040200000000000003FD58BF258BF258CC013555555555555BCC8000000000000402 15555555555553FD87C65A438215FC013555555555555BCC80000000000004022AAAAA AAAAAAA3FDB9D6480F2B9D4C013555555555555BCC80000000000004023FFFFFFFFFFF F3FDEEEEEEEEEEEEDC0135555555555553FE555555555554FC0240000000000003FCDB 97530ECA863C0135555555555553FE555555555554FC022AAAAAAAAAAAB3FC95CEB240 795D0C0135555555555553FE555555555554FC0215555555555563FC5617839A5BC7FC 0135555555555553FE555555555554FC0200000000000013FC1C71C71C71C73C013555 5555555553FE555555555554FC01D5555555555573FBD1BAF98D76B56C013555555555 5553FE555555555554FC01AAAAAAAAAAAAC3FB76B549327104FC0135555555555553FE 555555555554FC0180000000000013FB27D27D27D27D3C0135555555555553FE555555 555554FC0155555555555563FACA252ADB363BCC0135555555555553FE555555555554 FC012AAAAAAAAAAAB3FA5CEB240795CE9C0135555555555553FE555555555554FC0100 000000000003FA07F6E5D4C3B26C0135555555555553FE555555555554FC00AAAAAAAA AAAAB3F99690E0857FCF0C0135555555555553FE555555555554FC0055555555555563 F94DBF86A314DB7C0135555555555553FE555555555554FC0000000000000013F93579 BE02468A4C0135555555555553FE555555555554FBFF55555555555583F94DBF86A314 DB7C0135555555555553FE555555555554FBFE555555555555B3F99690E0857FCEDC01 35555555555553FE555555555554FBCC80000000000003FA07F6E5D4C3B25C01355555 55555553FE555555555554F3FE555555555554F3FA5CEB240795CE5C01355555555555 53FE555555555554F3FF55555555555523FACA252ADB363B8C0135555555555553FE55 5555555554F3FFFFFFFFFFFFFFC3FB27D27D27D27CFC0135555555555553FE55555555 5554F40055555555555533FB76B549327104BC0135555555555553FE555555555554F4 00AAAAAAAAAAAA83FBD1BAF98D76B50C0135555555555553FE555555555554F400FFFF FFFFFFFFD3FC1C71C71C71C6FC0135555555555553FE555555555554F4012AAAAAAAAA AA93FC5617839A5BC7BC0135555555555553FE555555555554F40155555555555543FC 95CEB240795CCC0135555555555553FE555555555554F4017FFFFFFFFFFFF3FCDB9753 0ECA861C0135555555555553FE555555555554F401AAAAAAAAAAAAA3FD13B8B302A7A1 EC0135555555555553FE555555555554F401D5555555555553FD3CAE759203CAEC0135 555555555553FE555555555554F40200000000000003FD68ACF13579BE0C0135555555 555553FE555555555554F40215555555555553FD97B425ED097B3C0135555555555553 FE555555555554F4022AAAAAAAAAAAA3FDC9C413B8B3028C0135555555555553FE5555 55555554F4023FFFFFFFFFFFF3FDFEDCBA9876541C0135555555555553FF5555555555 552C0240000000000003FD02468ACF13579C0135555555555553FF5555555555552C02 2AAAAAAAAAAAB3FCBEC474CFD585FC0135555555555553FF5555555555552C02155555 55555563FC7F0D4629B7F0EC0135555555555553FF5555555555552C02000000000000 13FC456789ABCDF03C0135555555555553FF5555555555552C01D5555555555573FC11 D33F561783AC0135555555555553FF5555555555552C01AAAAAAAAAAAAC3FBC8A0CE51 2956DC0135555555555553FF5555555555552C0180000000000013FB79BE02468ACF1C 0135555555555553FF5555555555552C0155555555555563FB36FE1A8C536FCC013555 5555555553FF5555555555552C012AAAAAAAAAAAB3FB0061172283392C013555555555 5553FF5555555555552C0100000000000003FAABCDF01234562C0135555555555553FF 5555555555552C00AAAAAAAAAAAAB3FA6F1F7A80308B4C0135555555555553FF555555 5555552C0055555555555563FA4AB6CD8EFB118C0135555555555553FF555555555555 2C0000000000000013FA3E93E93E93E8EC0135555555555553FF5555555555552BFF55 555555555583FA4AB6CD8EFB117C0135555555555553FF5555555555552BFE55555555 5555B3FA6F1F7A80308B3C0135555555555553FF5555555555552BCC80000000000003 FAABCDF01234561C0135555555555553FF55555555555523FE555555555554F3FB0061 172283390C0135555555555553FF55555555555523FF55555555555523FB36FE1A8C53 6FAC0135555555555553FF55555555555523FFFFFFFFFFFFFFC3FB79BE02468ACEDC01 35555555555553FF555555555555240055555555555533FBC8A0CE5129569C01355555 55555553FF5555555555552400AAAAAAAAAAAA83FC11D33F5617837C01355555555555 53FF5555555555552400FFFFFFFFFFFFD3FC456789ABCDEFEC0135555555555553FF55 555555555524012AAAAAAAAAAA93FC7F0D4629B7F0AC0135555555555553FF55555555 5555240155555555555543FCBEC474CFD585BC0135555555555553FF55555555555524 017FFFFFFFFFFFF3FD02468ACF13578C0135555555555553FF5555555555552401AAAA AAAAAAAAA3FD2833944A55B66C0135555555555553FF5555555555552401D555555555 5553FD512956D9B1DF5C0135555555555553FF555555555555240200000000000003FD 7D27D27D27D28C0135555555555553FF555555555555240215555555555553FDAC2F07 34B78FBC0135555555555553FF55555555555524022AAAAAAAAAAAA3FDDE3EF5006117 0C0135555555555553FF55555555555524023FFFFFFFFFFFF3FE09ABCDF012344C0135 555555555553FFFFFFFFFFFFFFCC0240000000000003FD1B4E81B4E81B4C0135555555 555553FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FCF0D4629B7F0D5C0135555555555553 FFFFFFFFFFFFFFCC0215555555555563FCB11D33F561784C0135555555555553FFFFFF FFFFFFFFCC0200000000000013FC7777777777779C0135555555555553FFFFFFFFFFFF FFCC01D5555555555573FC43E32D21C10B0C0135555555555553FFFFFFFFFFFFFFCC01 AAAAAAAAAAAAC3FC166054F43E32DC0135555555555553FFFFFFFFFFFFFFCC01800000 00000013FBDDDDDDDDDDDDDC0135555555555553FFFFFFFFFFFFFFCC01555555555555 63FB9B1DF623A67E8C0135555555555553FFFFFFFFFFFFFFCC012AAAAAAAAAAAB3FB64 80F2B9D647EC0135555555555553FFFFFFFFFFFFFFCC0100000000000003FB3A06D3A0 6D39DC0135555555555553FFFFFFFFFFFFFFCC00AAAAAAAAAAAAB3FB1BAF98D76B546C 0135555555555553FFFFFFFFFFFFFFCC0055555555555563FB097B425ED0978C013555 5555555553FFFFFFFFFFFFFFCC0000000000000013FB0369D0369D033C013555555555 5553FFFFFFFFFFFFFFCBFF55555555555583FB097B425ED0978C0135555555555553FF FFFFFFFFFFFFCBFE555555555555B3FB1BAF98D76B545C0135555555555553FFFFFFFF FFFFFFCBCC80000000000003FB3A06D3A06D39CC0135555555555553FFFFFFFFFFFFFF C3FE555555555554F3FB6480F2B9D647CC0135555555555553FFFFFFFFFFFFFFC3FF55 555555555523FB9B1DF623A67E6C0135555555555553FFFFFFFFFFFFFFC3FFFFFFFFFF FFFFC3FBDDDDDDDDDDDD9C0135555555555553FFFFFFFFFFFFFFC40055555555555533 FC166054F43E32BC0135555555555553FFFFFFFFFFFFFFC400AAAAAAAAAAAA83FC43E3 2D21C10ADC0135555555555553FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FC7777777777 774C0135555555555553FFFFFFFFFFFFFFC4012AAAAAAAAAAA93FCB11D33F56177FC01 35555555555553FFFFFFFFFFFFFFC40155555555555543FCF0D4629B7F0D1C01355555 55555553FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FD1B4E81B4E81B3C01355555555555 53FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FD413B8B302A7A1C0135555555555553FFFF FFFFFFFFFFC401D5555555555553FD6A314DBF86A30C0135555555555553FFFFFFFFFF FFFFC40200000000000003FD962FC962FC962C0135555555555553FFFFFFFFFFFFFFC4 0215555555555553FDC536FE1A8C536C0135555555555553FFFFFFFFFFFFFFC4022AAA AAAAAAAAA3FDF746EBE635DABC0135555555555553FFFFFFFFFFFFFFC4023FFFFFFFFF FFF3FE162FC962FC962C0135555555555554005555555555553C0240000000000003FD 38E38E38E38E3C0135555555555554005555555555553C022AAAAAAAAAAAB3FD15FF3D D1BAF99C0135555555555554005555555555553C0215555555555563FCEC474CFD585E 0C0135555555555554005555555555553C0200000000000013FCB2A1907F6E5D5C0135 555555555554005555555555553C01D5555555555573FC7F0D4629B7F0DC0135555555 555554005555555555553C01AAAAAAAAAAAAC3FC518A6DFC35189C0135555555555554 005555555555553C0180000000000013FC2A1907F6E5D4BC0135555555555554005555 555555553C0155555555555563FC08B91419CA251C0135555555555554005555555555 553C012AAAAAAAAAAAB3FBDAD524C9C4138C0135555555555554005555555555553C01 00000000000003FBB05B05B05B056C0135555555555554005555555555553C00AAAAAA AAAAAAB3FB9203CAE7591FFC0135555555555554005555555555553C00555555555555 63FB7FCF746EBE631C0135555555555554005555555555553C0000000000000013FB79 BE02468ACECC0135555555555554005555555555553BFF55555555555583FB7FCF746E BE631C0135555555555554005555555555553BFE555555555555B3FB9203CAE7591FEC 0135555555555554005555555555553BCC80000000000003FBB05B05B05B055C013555 55555555540055555555555533FE555555555554F3FBDAD524C9C4135C013555555555 55540055555555555533FF55555555555523FC08B91419CA250C013555555555555400 55555555555533FFFFFFFFFFFFFFC3FC2A1907F6E5D49C013555555555555400555555 555555340055555555555533FC518A6DFC35187C013555555555555400555555555555 3400AAAAAAAAAAAA83FC7F0D4629B7F09C0135555555555554005555555555553400FF FFFFFFFFFFD3FCB2A1907F6E5D0C01355555555555540055555555555534012AAAAAAA AAAA93FCEC474CFD585DCC013555555555555400555555555555340155555555555543 FD15FF3DD1BAF97C01355555555555540055555555555534017FFFFFFFFFFFF3FD38E3 8E38E38E1C0135555555555554005555555555553401AAAAAAAAAAAAA3FD5ED097B425 ECFC0135555555555554005555555555553401D5555555555553FD87C65A438215EC01 3555555555555400555555555555340200000000000003FDB3C4D5E6F8090C01355555 5555555400555555555555340215555555555553FDE2CC0A9E87C64C01355555555555 540055555555555534022AAAAAAAAAAAA3FE0A6DFC3518A6DC01355555555555540055 555555555534023FFFFFFFFFFFF3FE24FA4FA4FA4F9C013555555555555400AAAAAAAA AAAA8C0240000000000003FD5B05B05B05B05C013555555555555400AAAAAAAAAAAA8C 022AAAAAAAAAAAB3FD38215FF3DD1BBC013555555555555400AAAAAAAAAAAA8C021555 5555555563FD1845C8A0CE512C013555555555555400AAAAAAAAAAAA8C020000000000 0013FCF6E5D4C3B2A19C013555555555555400AAAAAAAAAAAA8C01D5555555555573FC C3518A6DFC351C013555555555555400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FC95CEB2 40795CDC013555555555555400AAAAAAAAAAAA8C0180000000000013FC6E5D4C3B2A18 FC013555555555555400AAAAAAAAAAAA8C0155555555555563FC4CFD585E0E695C0135 55555555555400AAAAAAAAAAAA8C012AAAAAAAAAAAB3FC31AED6A9264E0C0135555555 55555400AAAAAAAAAAAA8C0100000000000003FC1C71C71C71C6FC0135555555555554 00AAAAAAAAAAAA8C00AAAAAAAAAAAAB3FC0D4629B7F0D43C013555555555555400AAAA AAAAAAAA8C0055555555555563FC042BFE7BA375CC013555555555555400AAAAAAAAAA AA8C0000000000000013FC0123456789ABAC013555555555555400AAAAAAAAAAAA8BFF 55555555555583FC042BFE7BA375DC013555555555555400AAAAAAAAAAAA8BFE555555 555555B3FC0D4629B7F0D43C013555555555555400AAAAAAAAAAAA8BCC800000000000 03FC1C71C71C71C6FC013555555555555400AAAAAAAAAAAA83FE555555555554F3FC31 AED6A9264DFC013555555555555400AAAAAAAAAAAA83FF55555555555523FC4CFD585E 0E694C013555555555555400AAAAAAAAAAAA83FFFFFFFFFFFFFFC3FC6E5D4C3B2A18DC 013555555555555400AAAAAAAAAAAA840055555555555533FC95CEB240795CBC013555 555555555400AAAAAAAAAAAA8400AAAAAAAAAAAA83FCC3518A6DFC34DC013555555555 555400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FCF6E5D4C3B2A14C013555555555555400 AAAAAAAAAAAA84012AAAAAAAAAAA93FD1845C8A0CE510C013555555555555400AAAAAA AAAAAA840155555555555543FD38215FF3DD1B9C013555555555555400AAAAAAAAAAAA 84017FFFFFFFFFFFF3FD5B05B05B05B03C013555555555555400AAAAAAAAAAAA8401AA AAAAAAAAAAA3FD80F2B9D6480F1C013555555555555400AAAAAAAAAAAA8401D5555555 555553FDA9E87C65A4380C013555555555555400AAAAAAAAAAAA840200000000000003 FDD5E6F8091A2B2C013555555555555400AAAAAAAAAAAA840215555555555553FE0277 166054F43C013555555555555400AAAAAAAAAAAA84022AAAAAAAAAAAA3FE1B7F0D4629 B7EC013555555555555400AAAAAAAAAAAA84023FFFFFFFFFFFF3FE360B60B60B60AC01 3555555555555400FFFFFFFFFFFFDC0240000000000003FD81B4E81B4E81AC01355555 5555555400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FD5ED097B425ED0C01355555555555 5400FFFFFFFFFFFFDC0215555555555563FD3EF5006117228C013555555555555400FF FFFFFFFFFFDC0200000000000013FD2222222222222C013555555555555400FFFFFFFF FFFFDC01D5555555555573FD0857FCF746EBEC013555555555555400FFFFFFFFFFFFDC 01AAAAAAAAAAAAC3FCE32D21C10AFF8C013555555555555400FFFFFFFFFFFFDC018000 0000000013FCBBBBBBBBBBBBAC013555555555555400FFFFFFFFFFFFDC015555555555 5563FC9A5BC7DEA00C0C013555555555555400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FC 7F0D4629B7F0BC013555555555555400FFFFFFFFFFFFDC0100000000000003FC69D036 9D0369AC013555555555555400FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FC5AA499388276 EC013555555555555400FFFFFFFFFFFFDC0055555555555563FC518A6DFC35187C0135 55555555555400FFFFFFFFFFFFDC0000000000000013FC4E81B4E81B4E5C0135555555 55555400FFFFFFFFFFFFDBFF55555555555583FC518A6DFC35188C0135555555555554 00FFFFFFFFFFFFDBFE555555555555B3FC5AA499388276EC013555555555555400FFFF FFFFFFFFDBCC80000000000003FC69D0369D0369AC013555555555555400FFFFFFFFFF FFD3FE555555555554F3FC7F0D4629B7F0AC013555555555555400FFFFFFFFFFFFD3FF 55555555555523FC9A5BC7DEA00BFC013555555555555400FFFFFFFFFFFFD3FFFFFFFF FFFFFFC3FCBBBBBBBBBBBB8C013555555555555400FFFFFFFFFFFFD400555555555555 33FCE32D21C10AFF6C013555555555555400FFFFFFFFFFFFD400AAAAAAAAAAAA83FD08 57FCF746EBCC013555555555555400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FD22222222 22220C013555555555555400FFFFFFFFFFFFD4012AAAAAAAAAAA93FD3EF5006117226C 013555555555555400FFFFFFFFFFFFD40155555555555543FD5ED097B425ECEC013555 555555555400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FD81B4E81B4E819C013555555555 555400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FDA7A1F19690E07C013555555555555400 FFFFFFFFFFFFD401D5555555555553FDD097B425ED096C013555555555555400FFFFFF FFFFFFD40200000000000003FDFC962FC962FC8C013555555555555400FFFFFFFFFFFF D40215555555555553FE15CEB240795CEC013555555555555400FFFFFFFFFFFFD4022A AAAAAAAAAAA3FE2ED6A9264E208C013555555555555400FFFFFFFFFFFFD4023FFFFFFF FFFFF3FE4962FC962FC95C0135555555555554012AAAAAAAAAAA9C0240000000000003 FDACF13579BE022C0135555555555554012AAAAAAAAAAA9C022AAAAAAAAAAAB3FD8A0C E512956D9C0135555555555554012AAAAAAAAAAA9C0215555555555563FD6A314DBF86 A30C0135555555555554012AAAAAAAAAAA9C0200000000000013FD4D5E6F8091A2AC01 35555555555554012AAAAAAAAAAA9C01D5555555555573FD33944A55B66C6C01355555 55555554012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FD1CD2DE3EF5005C01355555555555 54012AAAAAAAAAAA9C0180000000000013FD091A2B3C4D5E6C0135555555555554012A AAAAAAAAAA9C0155555555555563FCF0D4629B7F0D1C0135555555555554012AAAAAAA AAAA9C012AAAAAAAAAAAB3FCD585E0E696F1CC0135555555555554012AAAAAAAAAAA9C 0100000000000003FCC048D159E26ABC0135555555555554012AAAAAAAAAAA9C00AAAA AAAAAAAAB3FCB11D33F56177FC0135555555555554012AAAAAAAAAAA9C005555555555 5563FCA80308B914198C0135555555555554012AAAAAAAAAAA9C0000000000000013FC A4FA4FA4FA4F6C0135555555555554012AAAAAAAAAAA9BFF55555555555583FCA80308 B914199C0135555555555554012AAAAAAAAAAA9BFE555555555555B3FCB11D33F56177 FC0135555555555554012AAAAAAAAAAA9BCC80000000000003FCC048D159E26ABC0135 555555555554012AAAAAAAAAAA93FE555555555554F3FCD585E0E696F1BC0135555555 555554012AAAAAAAAAAA93FF55555555555523FCF0D4629B7F0D0C0135555555555554 012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FD091A2B3C4D5E4C0135555555555554012AAA AAAAAAAA940055555555555533FD1CD2DE3EF5003C0135555555555554012AAAAAAAAA AA9400AAAAAAAAAAAA83FD33944A55B66C5C0135555555555554012AAAAAAAAAAA9400 FFFFFFFFFFFFD3FD4D5E6F8091A28C0135555555555554012AAAAAAAAAAA94012AAAAA AAAAAA93FD6A314DBF86A2EC0135555555555554012AAAAAAAAAAA9401555555555555 43FD8A0CE512956D7C0135555555555554012AAAAAAAAAAA94017FFFFFFFFFFFF3FDAC F13579BE021C0135555555555554012AAAAAAAAAAA9401AAAAAAAAAAAAA3FDD2DE3EF5 0060FC0135555555555554012AAAAAAAAAAA9401D5555555555553FDFBD401845C89EC 0135555555555554012AAAAAAAAAAA940200000000000003FE13E93E93E93E8C013555 5555555554012AAAAAAAAAAA940215555555555553FE2B6CD8EFB11D2C013555555555 5554012AAAAAAAAAAA94022AAAAAAAAAAAA3FE4474CFD585E0DC013555555555555401 2AAAAAAAAAAA94023FFFFFFFFFFFF3FE5F01234567899C013555555555555401555555 5555554C0240000000000003FDDCBA98765431FC013555555555555401555555555555 4C022AAAAAAAAAAAB3FDB9D6480F2B9D5C0135555555555554015555555555554C0215 555555555563FD99FAB0BC1CD2DC0135555555555554015555555555554C0200000000 000013FD7D27D27D27D27C0135555555555554015555555555554C01D5555555555573 FD635DAD524C9C3C0135555555555554015555555555554C01AAAAAAAAAAAAC3FD4C9C 413B8B301C0135555555555554015555555555554C0180000000000013FD38E38E38E3 8E2C0135555555555554015555555555554C0155555555555563FD2833944A55B65C01 35555555555554015555555555554C012AAAAAAAAAAAB3FD1A8C536FE1A8AC01355555 55555554015555555555554C0100000000000003FD0FEDCBA987652C01355555555555 54015555555555554C00AAAAAAAAAAAAB3FD0857FCF746EBCC01355555555555540155 55555555554C0055555555555563FD03CAE759203C9C01355555555555540155555555 55554C0000000000000013FD02468ACF13578C0135555555555554015555555555554B FF55555555555583FD03CAE759203C9C0135555555555554015555555555554BFE5555 55555555B3FD0857FCF746EBCC0135555555555554015555555555554BCC8000000000 0003FD0FEDCBA987652C01355555555555540155555555555543FE555555555554F3FD 1A8C536FE1A8AC01355555555555540155555555555543FF55555555555523FD283394 4A55B65C01355555555555540155555555555543FFFFFFFFFFFFFFC3FD38E38E38E38E 1C013555555555555401555555555555440055555555555533FD4C9C413B8B300C0135 555555555554015555555555554400AAAAAAAAAAAA83FD635DAD524C9C2C0135555555 555554015555555555554400FFFFFFFFFFFFD3FD7D27D27D27D25C0135555555555554 0155555555555544012AAAAAAAAAAA93FD99FAB0BC1CD2AC0135555555555554015555 55555555440155555555555543FDB9D6480F2B9D4C0135555555555554015555555555 5544017FFFFFFFFFFFF3FDDCBA98765431EC0135555555555554015555555555554401 AAAAAAAAAAAAA3FE0153D0F8CB486C0135555555555554015555555555554401D55555 55555553FE15CEB240795CEC0135555555555554015555555555554402000000000000 03FE2BCDF01234567C013555555555555401555555555555440215555555555553FE43 518A6DFC350C01355555555555540155555555555544022AAAAAAAAAAAA3FE5C598153 D0F8BC01355555555555540155555555555544023FFFFFFFFFFFF3FE76E5D4C3B2A17C 0135555555555554017FFFFFFFFFFFFC0240000000000003FE0888888888888C013555 5555555554017FFFFFFFFFFFFC022AAAAAAAAAAAB3FDEE2CC0A9E87C5C013555555555 5554017FFFFFFFFFFFFC0215555555555563FDCE512956D9B1DC013555555555555401 7FFFFFFFFFFFFC0200000000000013FDB17E4B17E4B17C0135555555555554017FFFFF FFFFFFFC01D5555555555573FD97B425ED097B3C0135555555555554017FFFFFFFFFFF FC01AAAAAAAAAAAAC3FD80F2B9D6480F1C0135555555555554017FFFFFFFFFFFFC0180 000000000013FD6D3A06D3A06D2C0135555555555554017FFFFFFFFFFFFC0155555555 555563FD5C8A0CE512955C0135555555555554017FFFFFFFFFFFFC012AAAAAAAAAAAB3 FD4EE2CC0A9E87AC0135555555555554017FFFFFFFFFFFFC0100000000000003FD4444 444444442C0135555555555554017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD3CAE759203 CACC0135555555555554017FFFFFFFFFFFFC0055555555555563FD38215FF3DD1B9C01 35555555555554017FFFFFFFFFFFFC0000000000000013FD369D0369D0368C01355555 55555554017FFFFFFFFFFFFBFF55555555555583FD38215FF3DD1B9C01355555555555 54017FFFFFFFFFFFFBFE555555555555B3FD3CAE759203CACC0135555555555554017F FFFFFFFFFFFBCC80000000000003FD4444444444442C0135555555555554017FFFFFFF FFFFF3FE555555555554F3FD4EE2CC0A9E87AC0135555555555554017FFFFFFFFFFFF3 FF55555555555523FD5C8A0CE512955C0135555555555554017FFFFFFFFFFFF3FFFFFF FFFFFFFFC3FD6D3A06D3A06D1C0135555555555554017FFFFFFFFFFFF4005555555555 5533FD80F2B9D6480F0C0135555555555554017FFFFFFFFFFFF400AAAAAAAAAAAA83FD 97B425ED097B2C0135555555555554017FFFFFFFFFFFF400FFFFFFFFFFFFD3FDB17E4B 17E4B15C0135555555555554017FFFFFFFFFFFF4012AAAAAAAAAAA93FDCE512956D9B1 AC0135555555555554017FFFFFFFFFFFF40155555555555543FDEE2CC0A9E87C4C0135 555555555554017FFFFFFFFFFFF4017FFFFFFFFFFFF3FE0888888888887C0135555555 555554017FFFFFFFFFFFF401AAAAAAAAAAAAA3FE1B7F0D4629B7EC0135555555555554 017FFFFFFFFFFFF401D5555555555553FE2FF9EE8DD7CC6C0135555555555554017FFF FFFFFFFFF40200000000000003FE45F92C5F92C5FC0135555555555554017FFFFFFFFF FFF40215555555555553FE5D7CC6BB5AA48C0135555555555554017FFFFFFFFFFFF402 2AAAAAAAAAAAA3FE7684BDA12F683C0135555555555554017FFFFFFFFFFFF4023FFFFF FFFFFFF3FE911111111110FC013555555555555401AAAAAAAAAAAAAC02400000000000 03FE24FA4FA4FA4FAC013555555555555401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FE13 88277166055C013555555555555401AAAAAAAAAAAAAC0215555555555563FE039A5BC7 DEA01C013555555555555401AAAAAAAAAAAAAC0200000000000013FDEA61D950C83FCC 013555555555555401AAAAAAAAAAAAAC01D5555555555573FDD097B425ED098C013555 555555555401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FDB9D6480F2B9D6C013555555555 555401AAAAAAAAAAAAAC0180000000000013FDA61D950C83FB7C013555555555555401 AAAAAAAAAAAAAC0155555555555563FD956D9B1DF623AC013555555555555401AAAAAA AAAAAAAC012AAAAAAAAAAAB3FD87C65A438215FC013555555555555401AAAAAAAAAAAA AC0100000000000003FD7D27D27D27D27C013555555555555401AAAAAAAAAAAAAC00AA AAAAAAAAAAB3FD759203CAE7591C013555555555555401AAAAAAAAAAAAAC0055555555 555563FD7104EE2CC0A9EC013555555555555401AAAAAAAAAAAAAC0000000000000013 FD6F8091A2B3C4DC013555555555555401AAAAAAAAAAAAABFF55555555555583FD7104 EE2CC0A9EC013555555555555401AAAAAAAAAAAAABFE555555555555B3FD759203CAE7 591C013555555555555401AAAAAAAAAAAAABCC80000000000003FD7D27D27D27D27C01 3555555555555401AAAAAAAAAAAAA3FE555555555554F3FD87C65A438215FC01355555 5555555401AAAAAAAAAAAAA3FF55555555555523FD956D9B1DF623AC01355555555555 5401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FDA61D950C83FB6C013555555555555401AA AAAAAAAAAAA40055555555555533FDB9D6480F2B9D5C013555555555555401AAAAAAAA AAAAA400AAAAAAAAAAAA83FDD097B425ED097C013555555555555401AAAAAAAAAAAAA4 00FFFFFFFFFFFFD3FDEA61D950C83FAC013555555555555401AAAAAAAAAAAAA4012AAA AAAAAAAA93FE039A5BC7DEA00C013555555555555401AAAAAAAAAAAAA4015555555555 5543FE1388277166054C013555555555555401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FE 24FA4FA4FA4FAC013555555555555401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FE37F0D4 629B7F0C013555555555555401AAAAAAAAAAAAA401D5555555555553FE4C6BB5AA4993 8C013555555555555401AAAAAAAAAAAAA40200000000000003FE626AF37C048D1C0135 55555555555401AAAAAAAAAAAAA40215555555555553FE79EE8DD7CC6BBC0135555555 55555401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE92F684BDA12F5C0135555555555554 01AAAAAAAAAAAAA4023FFFFFFFFFFFF3FEAD82D82D82D82C013555555555555401D555 555555555C0240000000000003FE43B2A1907F6E5C013555555555555401D555555555 555C022AAAAAAAAAAAB3FE3240795CEB241C013555555555555401D555555555555C02 15555555555563FE2252ADB363BECC013555555555555401D555555555555C02000000 00000013FE13E93E93E93EAC013555555555555401D555555555555C01D55555555555 73FE07042BFE7BA38C013555555555555401D555555555555C01AAAAAAAAAAAAC3FDF7 46EBE635DADC013555555555555401D555555555555C0180000000000013FDE38E38E3 8E38EC013555555555555401D555555555555C0155555555555563FDD2DE3EF500611C 013555555555555401D555555555555C012AAAAAAAAAAAB3FDC536FE1A8C536C013555 555555555401D555555555555C0100000000000003FDBA987654320FEC013555555555 555401D555555555555C00AAAAAAAAAAAAB3FDB302A7A1F1968C013555555555555401 D555555555555C0055555555555563FDAE759203CAE75C013555555555555401D55555 5555555C0000000000000013FDACF13579BE024C013555555555555401D55555555555 5BFF55555555555583FDAE759203CAE75C013555555555555401D555555555555BFE55 5555555555B3FDB302A7A1F1968C013555555555555401D555555555555BCC80000000 000003FDBA987654320FEC013555555555555401D5555555555553FE555555555554F3 FDC536FE1A8C536C013555555555555401D5555555555553FF55555555555523FDD2DE 3EF500611C013555555555555401D5555555555553FFFFFFFFFFFFFFC3FDE38E38E38E 38DC013555555555555401D55555555555540055555555555533FDF746EBE635DACC01 3555555555555401D555555555555400AAAAAAAAAAAA83FE07042BFE7BA37C01355555 5555555401D555555555555400FFFFFFFFFFFFD3FE13E93E93E93E9C01355555555555 5401D5555555555554012AAAAAAAAAAA93FE2252ADB363BEBC013555555555555401D5 5555555555540155555555555543FE3240795CEB240C013555555555555401D5555555 555554017FFFFFFFFFFFF3FE43B2A1907F6E5C013555555555555401D5555555555554 01AAAAAAAAAAAAA3FE56A9264E209DCC013555555555555401D555555555555401D555 5555555553FE6B240795CEB23C013555555555555401D5555555555554020000000000 0003FE8123456789ABDC013555555555555401D55555555555540215555555555553FE 98A6DFC3518A6C013555555555555401D5555555555554022AAAAAAAAAAAA3FEB1AED6 A9264E1C013555555555555401D5555555555554023FFFFFFFFFFFF3FECC3B2A1907F6 DC0135555555555554020000000000000C0240000000000003FE64B17E4B17E4BC0135 555555555554020000000000000C022AAAAAAAAAAAB3FE533F5617839A7C0135555555 555554020000000000000C0215555555555563FE43518A6DFC352C0135555555555554 020000000000000C0200000000000013FE34E81B4E81B50C0135555555555554020000 000000000C01D5555555555573FE280308B91419EC0135555555555554020000000000 000C01AAAAAAAAAAAAC3FE1CA252ADB363DC0135555555555554020000000000000C01 80000000000013FE12C5F92C5F92DC0135555555555554020000000000000C01555555 55555563FE0A6DFC3518A6EC0135555555555554020000000000000C012AAAAAAAAAAA B3FE039A5BC7DEA01C0135555555555554020000000000000C0100000000000003FDFC 962FC962FCAC0135555555555554020000000000000C00AAAAAAAAAAAAB3FDF5006117 22834C0135555555555554020000000000000C0055555555555563FDF0734B78FBD41C 0135555555555554020000000000000C0000000000000013FDEEEEEEEEEEEF0C013555 5555555554020000000000000BFF55555555555583FDF0734B78FBD41C013555555555 5554020000000000000BFE555555555555B3FDF500611722834C013555555555555402 0000000000000BCC80000000000003FDFC962FC962FCAC013555555555555402000000 00000003FE555555555554F3FE039A5BC7DEA01C013555555555555402000000000000 03FF55555555555523FE0A6DFC3518A6EC01355555555555540200000000000003FFFF FFFFFFFFFFC3FE12C5F92C5F92CC013555555555555402000000000000040055555555 555533FE1CA252ADB363CC0135555555555554020000000000000400AAAAAAAAAAAA83 FE280308B91419CC0135555555555554020000000000000400FFFFFFFFFFFFD3FE34E8 1B4E81B4FC01355555555555540200000000000004012AAAAAAAAAAA93FE43518A6DFC 351C013555555555555402000000000000040155555555555543FE533F5617839A6C01 355555555555540200000000000004017FFFFFFFFFFFF3FE64B17E4B17E4BC01355555 55555554020000000000000401AAAAAAAAAAAAA3FE77A80308B9142C01355555555555 54020000000000000401D5555555555553FE8C22E45067289C01355555555555540200 0000000000040200000000000003FEA222222222223C01355555555555540200000000 0000040215555555555553FEB9A5BC7DEA00CC01355555555555540200000000000004 022AAAAAAAAAAAA3FED2ADB363BEC47C01355555555555540200000000000004023FFF FFFFFFFFF3FEED3A06D3A06D3C0135555555555554021555555555555C024000000000 0003FE87F6E5D4C3B29C0135555555555554021555555555555C022AAAAAAAAAAAB3FE 7684BDA12F685C0135555555555554021555555555555C0215555555555563FE6696F1 F7A8030C0135555555555554021555555555555C0200000000000013FE582D82D82D82 EC0135555555555554021555555555555C01D5555555555573FE4B487042BFE7CC0135 555555555554021555555555555C01AAAAAAAAAAAAC3FE3FE7BA375F31BC0135555555 555554021555555555555C0180000000000013FE360B60B60B60BC0135555555555554 021555555555555C0155555555555563FE2DB363BEC474CC0135555555555554021555 555555555C012AAAAAAAAAAAB3FE26DFC3518A6E0C0135555555555554021555555555 555C0100000000000003FE21907F6E5D4C3C0135555555555554021555555555555C00 AAAAAAAAAAAAB3FE1DC598153D0F9C0135555555555554021555555555555C00555555 55555563FE1B7F0D4629B7EC0135555555555554021555555555555C00000000000000 13FE1ABCDF0123455C0135555555555554021555555555555BFF55555555555583FE1B 7F0D4629B7EC0135555555555554021555555555555BFE555555555555B3FE1DC59815 3D0F8C0135555555555554021555555555555BCC80000000000003FE21907F6E5D4C3C 01355555555555540215555555555553FE555555555554F3FE26DFC3518A6DFC013555 55555555540215555555555553FF55555555555523FE2DB363BEC474CC013555555555 55540215555555555553FFFFFFFFFFFFFFC3FE360B60B60B60AC013555555555555402 155555555555540055555555555533FE3FE7BA375F31AC013555555555555402155555 5555555400AAAAAAAAAAAA83FE4B487042BFE7AC013555555555555402155555555555 5400FFFFFFFFFFFFD3FE582D82D82D82DC01355555555555540215555555555554012A AAAAAAAAAA93FE6696F1F7A802FC013555555555555402155555555555540155555555 555543FE7684BDA12F684C01355555555555540215555555555554017FFFFFFFFFFFF3 FE87F6E5D4C3B29C0135555555555554021555555555555401AAAAAAAAAAAAA3FE9AED 6A9264E20C0135555555555554021555555555555401D5555555555553FEAF684BDA12 F67C013555555555555402155555555555540200000000000003FEC56789ABCDF01C01 3555555555555402155555555555540215555555555553FEDCEB240795CEAC01355555 555555540215555555555554022AAAAAAAAAAAA3FEF5F31AED6A925C01355555555555 540215555555555554023FFFFFFFFFFFF3FF083FB72EA61D9C0135555555555554022A AAAAAAAAAAAC0240000000000003FEAD82D82D82D82C0135555555555554022AAAAAAA AAAAAC022AAAAAAAAAAAB3FE9C10AFF9EE8DDC0135555555555554022AAAAAAAAAAAAC 0215555555555563FE8C22E45067288C0135555555555554022AAAAAAAAAAAAC020000 0000000013FE7DB97530ECA86C0135555555555554022AAAAAAAAAAAAC01D555555555 5573FE70D4629B7F0D3C0135555555555554022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE 6573AC901E573C0135555555555554022AAAAAAAAAAAAC0180000000000013FE5B9753 0ECA863C0135555555555554022AAAAAAAAAAAAC0155555555555563FE533F5617839A 4C0135555555555554022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE4C6BB5AA49938C0135 555555555554022AAAAAAAAAAAAC0100000000000003FE471C71C71C71BC0135555555 555554022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE43518A6DFC351C0135555555555554 022AAAAAAAAAAAAC0055555555555563FE410AFF9EE8DD6C0135555555555554022AAA AAAAAAAAAC0000000000000013FE4048D159E26ADC0135555555555554022AAAAAAAAA AAABFF55555555555583FE410AFF9EE8DD6C0135555555555554022AAAAAAAAAAAABFE 555555555555B3FE43518A6DFC350C0135555555555554022AAAAAAAAAAAABCC800000 00000003FE471C71C71C71BC0135555555555554022AAAAAAAAAAAA3FE555555555554 F3FE4C6BB5AA49937C0135555555555554022AAAAAAAAAAAA3FF55555555555523FE53 3F5617839A4C0135555555555554022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE5B97530E CA862C0135555555555554022AAAAAAAAAAAA40055555555555533FE6573AC901E572C 0135555555555554022AAAAAAAAAAAA400AAAAAAAAAAAA83FE70D4629B7F0D2C013555 5555555554022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE7DB97530ECA85C013555555555 5554022AAAAAAAAAAAA4012AAAAAAAAAAA93FE8C22E45067287C013555555555555402 2AAAAAAAAAAAA40155555555555543FE9C10AFF9EE8DCC0135555555555554022AAAAA AAAAAAA4017FFFFFFFFFFFF3FEAD82D82D82D81C0135555555555554022AAAAAAAAAAA A401AAAAAAAAAAAAA3FEC0795CEB24078C0135555555555554022AAAAAAAAAAAA401D5 555555555553FED4F43E32D21BFC0135555555555554022AAAAAAAAAAAA40200000000 000003FEEAF37C048D159C0135555555555554022AAAAAAAAAAAA40215555555555553 FF013B8B302A7A1C0135555555555554022AAAAAAAAAAAA4022AAAAAAAAAAAA3FF0DBF 86A314DBFC0135555555555554022AAAAAAAAAAAA4023FFFFFFFFFFFF3FF1B05B05B05 B05C0135555555555554023FFFFFFFFFFFFC0240000000000003FED555555555554C01 35555555555554023FFFFFFFFFFFFC022AAAAAAAAAAAB3FEC3E32D21C10AFC01355555 55555554023FFFFFFFFFFFFC0215555555555563FEB3F5617839A5AC01355555555555 54023FFFFFFFFFFFFC0200000000000013FEA58BF258BF258C0135555555555554023F FFFFFFFFFFFC01D5555555555573FE98A6DFC3518A5C0135555555555554023FFFFFFF FFFFFC01AAAAAAAAAAAAC3FE8D4629B7F0D45C0135555555555554023FFFFFFFFFFFFC 0180000000000013FE8369D0369D035C0135555555555554023FFFFFFFFFFFFC015555 5555555563FE7B11D33F56176C0135555555555554023FFFFFFFFFFFFC012AAAAAAAAA AAB3FE743E32D21C10AC0135555555555554023FFFFFFFFFFFFC0100000000000003FE 6EEEEEEEEEEEDC0135555555555554023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE6B2407 95CEB23C0135555555555554023FFFFFFFFFFFFC0055555555555563FE68DD7CC6BB5A 8C0135555555555554023FFFFFFFFFFFFC0000000000000013FE681B4E81B4E7FC0135 555555555554023FFFFFFFFFFFFBFF55555555555583FE68DD7CC6BB5A8C0135555555 555554023FFFFFFFFFFFFBFE555555555555B3FE6B240795CEB22C0135555555555554 023FFFFFFFFFFFFBCC80000000000003FE6EEEEEEEEEEEDC0135555555555554023FFF FFFFFFFFF3FE555555555554F3FE743E32D21C109C0135555555555554023FFFFFFFFF FFF3FF55555555555523FE7B11D33F56176C0135555555555554023FFFFFFFFFFFF3FF FFFFFFFFFFFFC3FE8369D0369D034C0135555555555554023FFFFFFFFFFFF400555555 55555533FE8D4629B7F0D44C0135555555555554023FFFFFFFFFFFF400AAAAAAAAAAAA 83FE98A6DFC3518A4C0135555555555554023FFFFFFFFFFFF400FFFFFFFFFFFFD3FEA5 8BF258BF257C0135555555555554023FFFFFFFFFFFF4012AAAAAAAAAAA93FEB3F56178 39A59C0135555555555554023FFFFFFFFFFFF40155555555555543FEC3E32D21C10AEC 0135555555555554023FFFFFFFFFFFF4017FFFFFFFFFFFF3FED555555555553C013555 5555555554023FFFFFFFFFFFF401AAAAAAAAAAAAA3FEE84BDA12F684AC013555555555 5554023FFFFFFFFFFFF401D5555555555553FEFCC6BB5AA4991C013555555555555402 3FFFFFFFFFFFF40200000000000003FF0962FC962FC95C0135555555555554023FFFFF FFFFFFF40215555555555553FF1524C9C413B8AC0135555555555554023FFFFFFFFFFF F4022AAAAAAAAAAAA3FF21A8C536FE1A8C0135555555555554023FFFFFFFFFFFF4023F FFFFFFFFFFF3FF2EEEEEEEEEEEEC012AAAAAAAAAAAAC024000000000000C0240000000 000003FE0000000000000C012AAAAAAAAAAAAC024000000000000C022AAAAAAAAAAAB3 FDDD1BAF98D76B6C012AAAAAAAAAAAAC024000000000000C0215555555555563FDBD40 1845C8A0EC012AAAAAAAAAAAAC024000000000000C0200000000000013FDA06D3A06D3 A08C012AAAAAAAAAAAAC024000000000000C01D5555555555573FD86A314DBF86A4C01 2AAAAAAAAAAAAC024000000000000C01AAAAAAAAAAAAC3FD6FE1A8C536FE2C012AAAAA AAAAAAAC024000000000000C0180000000000013FD5C28F5C28F5C3C012AAAAAAAAAAA AC024000000000000C0155555555555563FD4B78FBD401846C012AAAAAAAAAAAAC0240 00000000000C012AAAAAAAAAAAB3FD3DD1BAF98D76BC012AAAAAAAAAAAAC0240000000 00000C0100000000000003FD3333333333333C012AAAAAAAAAAAAC024000000000000C 00AAAAAAAAAAAAB3FD2B9D6480F2B9DC012AAAAAAAAAAAAC024000000000000C005555 5555555563FD27104EE2CC0AAC012AAAAAAAAAAAAC024000000000000C000000000000 0013FD258BF258BF259C012AAAAAAAAAAAAC024000000000000BFF55555555555583FD 27104EE2CC0AAC012AAAAAAAAAAAAC024000000000000BFE555555555555B3FD2B9D64 80F2B9DC012AAAAAAAAAAAAC024000000000000BCC80000000000003FD333333333333 3C012AAAAAAAAAAAAC0240000000000003FE555555555554F3FD3DD1BAF98D76BC012A AAAAAAAAAAAC0240000000000003FF55555555555523FD4B78FBD401846C012AAAAAAA AAAAAC0240000000000003FFFFFFFFFFFFFFC3FD5C28F5C28F5C2C012AAAAAAAAAAAAC 02400000000000040055555555555533FD6FE1A8C536FE1C012AAAAAAAAAAAAC024000 000000000400AAAAAAAAAAAA83FD86A314DBF86A3C012AAAAAAAAAAAAC024000000000 000400FFFFFFFFFFFFD3FDA06D3A06D3A06C012AAAAAAAAAAAAC024000000000000401 2AAAAAAAAAAA93FDBD401845C8A0BC012AAAAAAAAAAAAC024000000000000401555555 55555543FDDD1BAF98D76B5C012AAAAAAAAAAAAC0240000000000004017FFFFFFFFFFF F3FDFFFFFFFFFFFFFC012AAAAAAAAAAAAC024000000000000401AAAAAAAAAAAAA3FE12 F684BDA12F6C012AAAAAAAAAAAAC024000000000000401D5555555555553FE27716605 4F43EC012AAAAAAAAAAAAC02400000000000040200000000000003FE3D70A3D70A3D7C 012AAAAAAAAAAAAC02400000000000040215555555555553FE54F43E32D21C1C012AAA AAAAAAAAAC0240000000000004022AAAAAAAAAAAA3FE6DFC3518A6DFBC012AAAAAAAAA AAAC0240000000000004023FFFFFFFFFFFF3FE8888888888888C012AAAAAAAAAAAAC02 2AAAAAAAAAAABC0240000000000003FDCBA9876543210C012AAAAAAAAAAAAC022AAAAA AAAAAABC022AAAAAAAAAAAB3FDA8C536FE1A8C7C012AAAAAAAAAAAAC022AAAAAAAAAAA BC0215555555555563FD88E99FAB0BC1EC012AAAAAAAAAAAAC022AAAAAAAAAAABC0200 000000000013FD6C16C16C16C19C012AAAAAAAAAAAAC022AAAAAAAAAAABC01D5555555 555573FD524C9C413B8B5C012AAAAAAAAAAAAC022AAAAAAAAAAABC01AAAAAAAAAAAAC3 FD3B8B302A7A1F3C012AAAAAAAAAAAAC022AAAAAAAAAAABC0180000000000013FD27D2 7D27D27D4C012AAAAAAAAAAAAC022AAAAAAAAAAABC0155555555555563FD1722833944 A56C012AAAAAAAAAAAAC022AAAAAAAAAAABC012AAAAAAAAAAAB3FD097B425ED097CC01 2AAAAAAAAAAAAC022AAAAAAAAAAABC0100000000000003FCFDB97530ECA87C012AAAAA AAAAAAAC022AAAAAAAAAAABC00AAAAAAAAAAAAB3FCEE8DD7CC6BB5BC012AAAAAAAAAAA AC022AAAAAAAAAAABC0055555555555563FCE573AC901E574C012AAAAAAAAAAAAC022A AAAAAAAAAABC0000000000000013FCE26AF37C048D2C012AAAAAAAAAAAAC022AAAAAAA AAAABBFF55555555555583FCE573AC901E575C012AAAAAAAAAAAAC022AAAAAAAAAAABB FE555555555555B3FCEE8DD7CC6BB5BC012AAAAAAAAAAAAC022AAAAAAAAAAABBCC8000 0000000003FCFDB97530ECA87C012AAAAAAAAAAAAC022AAAAAAAAAAAB3FE5555555555 54F3FD097B425ED097BC012AAAAAAAAAAAAC022AAAAAAAAAAAB3FF55555555555523FD 1722833944A56C012AAAAAAAAAAAAC022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FD27D27D 27D27D2C012AAAAAAAAAAAAC022AAAAAAAAAAAB40055555555555533FD3B8B302A7A1F 1C012AAAAAAAAAAAAC022AAAAAAAAAAAB400AAAAAAAAAAAA83FD524C9C413B8B3C012A AAAAAAAAAAAC022AAAAAAAAAAAB400FFFFFFFFFFFFD3FD6C16C16C16C16C012AAAAAAA AAAAAC022AAAAAAAAAAAB4012AAAAAAAAAAA93FD88E99FAB0BC1CC012AAAAAAAAAAAAC 022AAAAAAAAAAAB40155555555555543FDA8C536FE1A8C5C012AAAAAAAAAAAAC022AAA AAAAAAAAB4017FFFFFFFFFFFF3FDCBA987654320FC012AAAAAAAAAAAAC022AAAAAAAAA AAB401AAAAAAAAAAAAA3FDF19690E0857FDC012AAAAAAAAAAAAC022AAAAAAAAAAAB401 D5555555555553FE0D4629B7F0D46C012AAAAAAAAAAAAC022AAAAAAAAAAAB402000000 00000003FE23456789ABCDFC012AAAAAAAAAAAAC022AAAAAAAAAAAB402155555555555 53FE3AC901E573AC9C012AAAAAAAAAAAAC022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE53 D0F8CB48704C012AAAAAAAAAAAAC022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE6E5D4C3B 2A190C012AAAAAAAAAAAAC021555555555556C0240000000000003FD9BE02468ACF14C 012AAAAAAAAAAAAC021555555555556C022AAAAAAAAAAAB3FD78FBD401845CAC012AAA AAAAAAAAAC021555555555556C0215555555555563FD59203CAE75922C012AAAAAAAAA AAAC021555555555556C0200000000000013FD3C4D5E6F8091CC012AAAAAAAAAAAAC02 1555555555556C01D5555555555573FD22833944A55B8C012AAAAAAAAAAAAC02155555 5555556C01AAAAAAAAAAAAC3FD0BC1CD2DE3EF6C012AAAAAAAAAAAAC02155555555555 6C0180000000000013FCF0123456789AEC012AAAAAAAAAAAAC021555555555556C0155 555555555563FCCEB240795CEB4C012AAAAAAAAAAAAC021555555555556C012AAAAAAA AAAAB3FCB363BEC474CFFC012AAAAAAAAAAAAC021555555555556C0100000000000003 FC9E26AF37C048EC012AAAAAAAAAAAAC021555555555556C00AAAAAAAAAAAAB3FC8EFB 11D33F562C012AAAAAAAAAAAAC021555555555556C0055555555555563FC85E0E696F1 F7BC012AAAAAAAAAAAAC021555555555556C0000000000000013FC82D82D82D82D9C01 2AAAAAAAAAAAAC021555555555556BFF55555555555583FC85E0E696F1F7CC012AAAAA AAAAAAAC021555555555556BFE555555555555B3FC8EFB11D33F562C012AAAAAAAAAAA AC021555555555556BCC80000000000003FC9E26AF37C048EC012AAAAAAAAAAAAC0215 555555555563FE555555555554F3FCB363BEC474CFEC012AAAAAAAAAAAAC0215555555 555563FF55555555555523FCCEB240795CEB3C012AAAAAAAAAAAAC0215555555555563 FFFFFFFFFFFFFFC3FCF0123456789ACC012AAAAAAAAAAAAC0215555555555564005555 5555555533FD0BC1CD2DE3EF5C012AAAAAAAAAAAAC021555555555556400AAAAAAAAAA AA83FD22833944A55B6C012AAAAAAAAAAAAC021555555555556400FFFFFFFFFFFFD3FD 3C4D5E6F8091AC012AAAAAAAAAAAAC0215555555555564012AAAAAAAAAAA93FD59203C AE7591FC012AAAAAAAAAAAAC02155555555555640155555555555543FD78FBD401845C 9C012AAAAAAAAAAAAC0215555555555564017FFFFFFFFFFFF3FD9BE02468ACF13C012A AAAAAAAAAAAC021555555555556401AAAAAAAAAAAAA3FDC1CD2DE3EF501C012AAAAAAA AAAAAC021555555555556401D5555555555553FDEAC2F0734B790C012AAAAAAAAAAAAC 02155555555555640200000000000003FE0B60B60B60B61C012AAAAAAAAAAAAC021555 55555555640215555555555553FE22E450672894BC012AAAAAAAAAAAAC021555555555 5564022AAAAAAAAAAAA3FE3BEC474CFD585C012AAAAAAAAAAAAC021555555555556402 3FFFFFFFFFFFF3FE56789ABCDF012C012AAAAAAAAAAAAC020000000000001C02400000 00000003FD70A3D70A3D70CC012AAAAAAAAAAAAC020000000000001C022AAAAAAAAAAA B3FD4DBF86A314DC2C012AAAAAAAAAAAAC020000000000001C0215555555555563FD2D E3EF5006119C012AAAAAAAAAAAAC020000000000001C0200000000000013FD11111111 11114C012AAAAAAAAAAAAC020000000000001C01D5555555555573FCEE8DD7CC6BB5FC 012AAAAAAAAAAAAC020000000000001C01AAAAAAAAAAAAC3FCC10AFF9EE8DDBC012AAA AAAAAAAAAC020000000000001C0180000000000013FC999999999999DC012AAAAAAAAA AAAC020000000000001C0155555555555563FC7839A5BC7DEA3C012AAAAAAAAAAAAC02 0000000000001C012AAAAAAAAAAAB3FC5CEB240795CEEC012AAAAAAAAAAAAC02000000 0000001C0100000000000003FC47AE147AE147DC012AAAAAAAAAAAAC02000000000000 1C00AAAAAAAAAAAAB3FC3882771660551C012AAAAAAAAAAAAC020000000000001C0055 555555555563FC2F684BDA12F6AC012AAAAAAAAAAAAC020000000000001C0000000000 000013FC2C5F92C5F92C8C012AAAAAAAAAAAAC020000000000001BFF55555555555583 FC2F684BDA12F6BC012AAAAAAAAAAAAC020000000000001BFE555555555555B3FC3882 771660551C012AAAAAAAAAAAAC020000000000001BCC80000000000003FC47AE147AE1 47DC012AAAAAAAAAAAAC0200000000000013FE555555555554F3FC5CEB240795CEDC01 2AAAAAAAAAAAAC0200000000000013FF55555555555523FC7839A5BC7DEA2C012AAAAA AAAAAAAC0200000000000013FFFFFFFFFFFFFFC3FC999999999999BC012AAAAAAAAAAA AC02000000000000140055555555555533FCC10AFF9EE8DD9C012AAAAAAAAAAAAC0200 00000000001400AAAAAAAAAAAA83FCEE8DD7CC6BB5BC012AAAAAAAAAAAAC0200000000 00001400FFFFFFFFFFFFD3FD1111111111111C012AAAAAAAAAAAAC0200000000000014 012AAAAAAAAAAA93FD2DE3EF5006117C012AAAAAAAAAAAAC0200000000000014015555 5555555543FD4DBF86A314DC0C012AAAAAAAAAAAAC0200000000000014017FFFFFFFFF FFF3FD70A3D70A3D70AC012AAAAAAAAAAAAC020000000000001401AAAAAAAAAAAAA3FD 9690E0857FCF8C012AAAAAAAAAAAAC020000000000001401D5555555555553FDBF86A3 14DBF87C012AAAAAAAAAAAAC02000000000000140200000000000003FDEB851EB851EB AC012AAAAAAAAAAAAC02000000000000140215555555555553FE0D4629B7F0D46C012A AAAAAAAAAAAC0200000000000014022AAAAAAAAAAAA3FE264E209DC5981C012AAAAAAA AAAAAC0200000000000014023FFFFFFFFFFFF3FE40DA740DA740EC012AAAAAAAAAAAAC 01D555555555557C0240000000000003FD49F49F49F49F6C012AAAAAAAAAAAAC01D555 555555557C022AAAAAAAAAAAB3FD27104EE2CC0ACC012AAAAAAAAAAAAC01D555555555 557C0215555555555563FD0734B78FBD403C012AAAAAAAAAAAAC01D555555555557C02 00000000000013FCD4C3B2A1907FBC012AAAAAAAAAAAAC01D555555555557C01D55555 55555573FCA12F684BDA133C012AAAAAAAAAAAAC01D555555555557C01AAAAAAAAAAAA C3FC73AC901E573AFC012AAAAAAAAAAAAC01D555555555557C0180000000000013FC4C 3B2A1907F71C012AAAAAAAAAAAAC01D555555555557C0155555555555563FC2ADB363B EC477C012AAAAAAAAAAAAC01D555555555557C012AAAAAAAAAAAB3FC0F8CB487042C2C 012AAAAAAAAAAAAC01D555555555557C0100000000000003FBF49F49F49F4A2C012AAA AAAAAAAAAC01D555555555557C00AAAAAAAAAAAAB3FBD6480F2B9D64BC012AAAAAAAAA AAAC01D555555555557C0055555555555563FBC413B8B302A7DC012AAAAAAAAAAAAC01 D555555555557C0000000000000013FBBE02468ACF138C012AAAAAAAAAAAAC01D55555 5555557BFF55555555555583FBC413B8B302A7DC012AAAAAAAAAAAAC01D55555555555 7BFE555555555555B3FBD6480F2B9D64AC012AAAAAAAAAAAAC01D555555555557BCC80 000000000003FBF49F49F49F4A1C012AAAAAAAAAAAAC01D5555555555573FE55555555 5554F3FC0F8CB487042C1C012AAAAAAAAAAAAC01D5555555555573FF55555555555523 FC2ADB363BEC476C012AAAAAAAAAAAAC01D5555555555573FFFFFFFFFFFFFFC3FC4C3B 2A1907F6FC012AAAAAAAAAAAAC01D55555555555740055555555555533FC73AC901E57 3ADC012AAAAAAAAAAAAC01D555555555557400AAAAAAAAAAAA83FCA12F684BDA12FC01 2AAAAAAAAAAAAC01D555555555557400FFFFFFFFFFFFD3FCD4C3B2A1907F6C012AAAAA AAAAAAAC01D5555555555574012AAAAAAAAAAA93FD0734B78FBD401C012AAAAAAAAAAA AC01D55555555555740155555555555543FD27104EE2CC0AAC012AAAAAAAAAAAAC01D5 555555555574017FFFFFFFFFFFF3FD49F49F49F49F4C012AAAAAAAAAAAAC01D5555555 55557401AAAAAAAAAAAAA3FD6FE1A8C536FE2C012AAAAAAAAAAAAC01D5555555555574 01D5555555555553FD98D76B5493271C012AAAAAAAAAAAAC01D5555555555574020000 0000000003FDC4D5E6F8091A4C012AAAAAAAAAAAAC01D5555555555574021555555555 5553FDF3DD1BAF98D77C012AAAAAAAAAAAAC01D5555555555574022AAAAAAAAAAAA3FE 12F684BDA12F6C012AAAAAAAAAAAAC01D5555555555574023FFFFFFFFFFFF3FE2D82D8 2D82D83C012AAAAAAAAAAAAC01AAAAAAAAAAAACC0240000000000003FD27D27D27D27D 3C012AAAAAAAAAAAAC01AAAAAAAAAAAACC022AAAAAAAAAAAB3FD04EE2CC0A9E89C012A AAAAAAAAAAAC01AAAAAAAAAAAACC0215555555555563FCCA252ADB363C1C012AAAAAAA AAAAAC01AAAAAAAAAAAACC0200000000000013FC907F6E5D4C3B6C012AAAAAAAAAAAAC 01AAAAAAAAAAAACC01D5555555555573FC5CEB240795CEEC012AAAAAAAAAAAAC01AAAA AAAAAAAACC01AAAAAAAAAAAAC3FC2F684BDA12F6AC012AAAAAAAAAAAAC01AAAAAAAAAA AACC0180000000000013FC07F6E5D4C3B2CC012AAAAAAAAAAAAC01AAAAAAAAAAAACC01 55555555555563FBCD2DE3EF50063C012AAAAAAAAAAAAC01AAAAAAAAAAAACC012AAAAA AAAAAAB3FB9690E0857FCF9C012AAAAAAAAAAAAC01AAAAAAAAAAAACC01000000000000 03FB6C16C16C16C18C012AAAAAAAAAAAAC01AAAAAAAAAAAACC00AAAAAAAAAAAAB3FB4D BF86A314DC1C012AAAAAAAAAAAAC01AAAAAAAAAAAACC0055555555555563FB3B8B302A 7A1F3C012AAAAAAAAAAAAC01AAAAAAAAAAAACC0000000000000013FB3579BE02468AEC 012AAAAAAAAAAAAC01AAAAAAAAAAAACBFF55555555555583FB3B8B302A7A1F3C012AAA AAAAAAAAAC01AAAAAAAAAAAACBFE555555555555B3FB4DBF86A314DC0C012AAAAAAAAA AAAC01AAAAAAAAAAAACBCC80000000000003FB6C16C16C16C17C012AAAAAAAAAAAAC01 AAAAAAAAAAAAC3FE555555555554F3FB9690E0857FCF7C012AAAAAAAAAAAAC01AAAAAA AAAAAAC3FF55555555555523FBCD2DE3EF50061C012AAAAAAAAAAAAC01AAAAAAAAAAAA C3FFFFFFFFFFFFFFC3FC07F6E5D4C3B2AC012AAAAAAAAAAAAC01AAAAAAAAAAAAC40055 555555555533FC2F684BDA12F68C012AAAAAAAAAAAAC01AAAAAAAAAAAAC400AAAAAAAA AAAA83FC5CEB240795CEAC012AAAAAAAAAAAAC01AAAAAAAAAAAAC400FFFFFFFFFFFFD3 FC907F6E5D4C3B1C012AAAAAAAAAAAAC01AAAAAAAAAAAAC4012AAAAAAAAAAA93FCCA25 2ADB363BDC012AAAAAAAAAAAAC01AAAAAAAAAAAAC40155555555555543FD04EE2CC0A9 E87C012AAAAAAAAAAAAC01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FD27D27D27D27D2C01 2AAAAAAAAAAAAC01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FD4DBF86A314DBFC012AAAAA AAAAAAAC01AAAAAAAAAAAAC401D5555555555553FD76B549327104FC012AAAAAAAAAAA AC01AAAAAAAAAAAAC40200000000000003FDA2B3C4D5E6F82C012AAAAAAAAAAAAC01AA AAAAAAAAAAC40215555555555553FDD1BAF98D76B54C012AAAAAAAAAAAAC01AAAAAAAA AAAAC4022AAAAAAAAAAAA3FE01E573AC901E5C012AAAAAAAAAAAAC01AAAAAAAAAAAAC4 023FFFFFFFFFFFF3FE1C71C71C71C71C012AAAAAAAAAAAAC018000000000001C024000 0000000003FD0A3D70A3D70A4C012AAAAAAAAAAAAC018000000000001C022AAAAAAAAA AAB3FCCEB240795CEB5C012AAAAAAAAAAAAC018000000000001C0215555555555563FC 8EFB11D33F564C012AAAAAAAAAAAAC018000000000001C0200000000000013FC555555 5555559C012AAAAAAAAAAAAC018000000000001C01D5555555555573FC21C10AFF9EE9 0C012AAAAAAAAAAAAC018000000000001C01AAAAAAAAAAAAC3FBE87C65A438219C012A AAAAAAAAAAAC018000000000001C0180000000000013FB999999999999DC012AAAAAAA AAAAAC018000000000001C0155555555555563FB56D9B1DF623A8C012AAAAAAAAAAAAC 018000000000001C012AAAAAAAAAAAB3FB203CAE759203EC012AAAAAAAAAAAAC018000 000000001C0100000000000003FAEB851EB851EBAC012AAAAAAAAAAAAC018000000000 001C00AAAAAAAAAAAAB3FAAED6A9264E20CC012AAAAAAAAAAAAC018000000000001C00 55555555555563FA8A6DFC3518A70C012AAAAAAAAAAAAC018000000000001C00000000 00000013FA7E4B17E4B17E7C012AAAAAAAAAAAAC018000000000001BFF555555555555 83FA8A6DFC3518A6FC012AAAAAAAAAAAAC018000000000001BFE555555555555B3FAAE D6A9264E20BC012AAAAAAAAAAAAC018000000000001BCC80000000000003FAEB851EB8 51EB9C012AAAAAAAAAAAAC0180000000000013FE555555555554F3FB203CAE759203CC 012AAAAAAAAAAAAC0180000000000013FF55555555555523FB56D9B1DF623A6C012AAA AAAAAAAAAC0180000000000013FFFFFFFFFFFFFFC3FB9999999999999C012AAAAAAAAA AAAC01800000000000140055555555555533FBE87C65A438215C012AAAAAAAAAAAAC01 8000000000001400AAAAAAAAAAAA83FC21C10AFF9EE8DC012AAAAAAAAAAAAC01800000 0000001400FFFFFFFFFFFFD3FC5555555555554C012AAAAAAAAAAAAC01800000000000 14012AAAAAAAAAAA93FC8EFB11D33F560C012AAAAAAAAAAAAC01800000000000140155 555555555543FCCEB240795CEB1C012AAAAAAAAAAAAC0180000000000014017FFFFFFF FFFFF3FD0A3D70A3D70A3C012AAAAAAAAAAAAC018000000000001401AAAAAAAAAAAAA3 FD302A7A1F19691C012AAAAAAAAAAAAC018000000000001401D5555555555553FD5920 3CAE75920C012AAAAAAAAAAAAC01800000000000140200000000000003FD851EB851EB 852C012AAAAAAAAAAAAC01800000000000140215555555555553FDB425ED097B426C01 2AAAAAAAAAAAAC0180000000000014022AAAAAAAAAAAA3FDE635DAD524C9BC012AAAAA AAAAAAAC0180000000000014023FFFFFFFFFFFF3FE0DA740DA740DAC012AAAAAAAAAAA AC015555555555556C0240000000000003FCE26AF37C048D1C012AAAAAAAAAAAAC0155 55555555556C022AAAAAAAAAAAB3FC9CA252ADB363EC012AAAAAAAAAAAAC0155555555 55556C0215555555555563FC5CEB240795CECC012AAAAAAAAAAAAC015555555555556C 0200000000000013FC23456789ABCE1C012AAAAAAAAAAAAC015555555555556C01D555 5555555573FBDF623A67EAC32C012AAAAAAAAAAAAC015555555555556C01AAAAAAAAAA AAC3FB845C8A0CE512AC012AAAAAAAAAAAAC015555555555556C0180000000000013FB 3579BE02468AEC012AAAAAAAAAAAAC015555555555556C0155555555555563FAE573AC 901E572C012AAAAAAAAAAAAC015555555555556C012AAAAAAAAAAAB3FA7839A5BC7DE9 FC012AAAAAAAAAAAAC015555555555556C0100000000000003FA23456789ABCDCC012A AAAAAAAAAAAC015555555555556C00AAAAAAAAAAAAB3F9CD2DE3EF5005CC012AAAAAAA AAAAAC015555555555556C0055555555555563F9845C8A0CE5123C012AAAAAAAAAAAAC 015555555555556C0000000000000013F96C16C16C16C11C012AAAAAAAAAAAAC015555 555555556BFF55555555555583F9845C8A0CE5122C012AAAAAAAAAAAAC015555555555 556BFE555555555555B3F9CD2DE3EF50059C012AAAAAAAAAAAAC015555555555556BCC 80000000000003FA23456789ABCDBC012AAAAAAAAAAAAC0155555555555563FE555555 555554F3FA7839A5BC7DE9BC012AAAAAAAAAAAAC0155555555555563FF555555555555 23FAE573AC901E56EC012AAAAAAAAAAAAC0155555555555563FFFFFFFFFFFFFFC3FB35 79BE02468AAC012AAAAAAAAAAAAC01555555555555640055555555555533FB845C8A0C E5126C012AAAAAAAAAAAAC015555555555556400AAAAAAAAAAAA83FBDF623A67EAC2BC 012AAAAAAAAAAAAC015555555555556400FFFFFFFFFFFFD3FC23456789ABCDCC012AAA AAAAAAAAAC0155555555555564012AAAAAAAAAAA93FC5CEB240795CE8C012AAAAAAAAA AAAC01555555555555640155555555555543FC9CA252ADB3639C012AAAAAAAAAAAAC01 55555555555564017FFFFFFFFFFFF3FCE26AF37C048CFC012AAAAAAAAAAAAC01555555 5555556401AAAAAAAAAAAAA3FD1722833944A55C012AAAAAAAAAAAAC01555555555555 6401D5555555555553FD401845C8A0CE4C012AAAAAAAAAAAAC01555555555555640200 000000000003FD6C16C16C16C16C012AAAAAAAAAAAAC01555555555555640215555555 555553FD9B1DF623A67EAC012AAAAAAAAAAAAC0155555555555564022AAAAAAAAAAAA3 FDCD2DE3EF5005FC012AAAAAAAAAAAAC0155555555555564023FFFFFFFFFFFF3FE0123 456789ABCC012AAAAAAAAAAAAC012AAAAAAAAAAABC0240000000000003FCB97530ECA8 641C012AAAAAAAAAAAAC012AAAAAAAAAAABC022AAAAAAAAAAAB3FC73AC901E573AEC01 2AAAAAAAAAAAAC012AAAAAAAAAAABC0215555555555563FC33F5617839A5DC012AAAAA AAAAAAAC012AAAAAAAAAAABC0200000000000013FBF49F49F49F4A4C012AAAAAAAAAAA AC012AAAAAAAAAAABC01D5555555555573FB8D76B54932713C012AAAAAAAAAAAAC012A AAAAAAAAAABC01AAAAAAAAAAAAC3FB327104EE2CC0BC012AAAAAAAAAAAAC012AAAAAAA AAAABC0180000000000013FAC71C71C71C71FC012AAAAAAAAAAAAC012AAAAAAAAAAABC 0155555555555563FA419CA252ADB35C012AAAAAAAAAAAAC012AAAAAAAAAAABC012AAA AAAAAAAAB3F9A8C536FE1A8C2C012AAAAAAAAAAAAC012AAAAAAAAAAABC010000000000 0003F8FDB97530ECA7CC012AAAAAAAAAAAAC012AAAAAAAAAAABC00AAAAAAAAAAAAB3F8 0AFF9EE8DD7C1C012AAAAAAAAAAAAC012AAAAAAAAAAABC0055555555555563F6E573AC 901E541C012AAAAAAAAAAAAC012AAAAAAAAAAABC0000000000000013F623456789ABCA EC012AAAAAAAAAAAAC012AAAAAAAAAAABBFF55555555555583F6E573AC901E53BC012A AAAAAAAAAAAC012AAAAAAAAAAABBFE555555555555B3F80AFF9EE8DD7BDC012AAAAAAA AAAAAC012AAAAAAAAAAABBCC80000000000003F8FDB97530ECA75C012AAAAAAAAAAAAC 012AAAAAAAAAAAB3FE555555555554F3F9A8C536FE1A8BCC012AAAAAAAAAAAAC012AAA AAAAAAAAB3FF55555555555523FA419CA252ADB31C012AAAAAAAAAAAAC012AAAAAAAAA AAB3FFFFFFFFFFFFFFC3FAC71C71C71C716C012AAAAAAAAAAAAC012AAAAAAAAAAAB400 55555555555533FB327104EE2CC07C012AAAAAAAAAAAAC012AAAAAAAAAAAB400AAAAAA AAAAAA83FB8D76B5493270CC012AAAAAAAAAAAAC012AAAAAAAAAAAB400FFFFFFFFFFFF D3FBF49F49F49F49AC012AAAAAAAAAAAAC012AAAAAAAAAAAB4012AAAAAAAAAAA93FC33 F5617839A59C012AAAAAAAAAAAAC012AAAAAAAAAAAB40155555555555543FC73AC901E 573AAC012AAAAAAAAAAAAC012AAAAAAAAAAAB4017FFFFFFFFFFFF3FCB97530ECA8640C 012AAAAAAAAAAAAC012AAAAAAAAAAAB401AAAAAAAAAAAAA3FD02A7A1F19690DC012AAA AAAAAAAAAC012AAAAAAAAAAAB401D5555555555553FD2B9D6480F2B9DC012AAAAAAAAA AAAC012AAAAAAAAAAAB40200000000000003FD579BE02468ACFC012AAAAAAAAAAAAC01 2AAAAAAAAAAAB40215555555555553FD86A314DBF86A2C012AAAAAAAAAAAAC012AAAAA AAAAAAB4022AAAAAAAAAAAA3FDB8B302A7A1F17C012AAAAAAAAAAAAC012AAAAAAAAAAA B4023FFFFFFFFFFFF3FDEDCBA98765430C012AAAAAAAAAAAAC010000000000000C0240 000000000003FC9999999999998C012AAAAAAAAAAAAC010000000000000C022AAAAAAA AAAAB3FC53D0F8CB48705C012AAAAAAAAAAAAC010000000000000C0215555555555563 FC1419CA252ADB4C012AAAAAAAAAAAAC010000000000000C0200000000000013FBB4E8 1B4E81B51C012AAAAAAAAAAAAC010000000000000C01D5555555555573FB4DBF86A314 DC0C012AAAAAAAAAAAAC010000000000000C01AAAAAAAAAAAAC3FAE573AC901E573C01 2AAAAAAAAAAAAC010000000000000C0180000000000013FA47AE147AE147BC012AAAAA AAAAAAAC010000000000000C0155555555555563F9845C8A0CE5120C012AAAAAAAAAAA AC010000000000000C012AAAAAAAAAAAB3F853D0F8CB486F4C012AAAAAAAAAAAAC0100 00000000000C010000000000000BC88000000000000C012AAAAAAAAAAAAC0100000000 00000C00AAAAAAAAAAAABBF7E573AC901E59EC012AAAAAAAAAAAAC010000000000000C 005555555555556BF8845C8A0CE5142C012AAAAAAAAAAAAC010000000000000C000000 000000001BF8B4E81B4E81B68C012AAAAAAAAAAAAC010000000000000BFF5555555555 558BF8845C8A0CE5144C012AAAAAAAAAAAAC010000000000000BFE555555555555BBF7 E573AC901E5AAC012AAAAAAAAAAAAC010000000000000BCC8000000000000BC8D1EB85 1EB851FC012AAAAAAAAAAAAC0100000000000003FE555555555554F3F853D0F8CB486E 5C012AAAAAAAAAAAAC0100000000000003FF55555555555523F9845C8A0CE5119C012A AAAAAAAAAAAC0100000000000003FFFFFFFFFFFFFFC3FA47AE147AE1472C012AAAAAAA AAAAAC01000000000000040055555555555533FAE573AC901E569C012AAAAAAAAAAAAC 010000000000000400AAAAAAAAAAAA83FB4DBF86A314DBAC012AAAAAAAAAAAAC010000 000000000400FFFFFFFFFFFFD3FBB4E81B4E81B48C012AAAAAAAAAAAAC010000000000 0004012AAAAAAAAAAA93FC1419CA252ADB0C012AAAAAAAAAAAAC010000000000000401 55555555555543FC53D0F8CB48701C012AAAAAAAAAAAAC0100000000000004017FFFFF FFFFFFF3FC9999999999996C012AAAAAAAAAAAAC010000000000000401AAAAAAAAAAAA A3FCE573AC901E572C012AAAAAAAAAAAAC010000000000000401D5555555555553FD1B AF98D76B548C012AAAAAAAAAAAAC01000000000000040200000000000003FD47AE147A E147AC012AAAAAAAAAAAAC01000000000000040215555555555553FD76B549327104EC 012AAAAAAAAAAAAC0100000000000004022AAAAAAAAAAAA3FDA8C536FE1A8C3C012AAA AAAAAAAAAC0100000000000004023FFFFFFFFFFFF3FDDDDDDDDDDDDDCC012AAAAAAAAA AAAC00AAAAAAAAAAAABC0240000000000003FC82D82D82D82D7C012AAAAAAAAAAAAC00 AAAAAAAAAAAABC022AAAAAAAAAAAB3FC3D0F8CB487044C012AAAAAAAAAAAAC00AAAAAA AAAAAABC0215555555555563FBFAB0BC1CD2DE4C012AAAAAAAAAAAAC00AAAAAAAAAAAA BC0200000000000013FB87654320FEDCFC012AAAAAAAAAAAAC00AAAAAAAAAAAABC01D5 555555555573FB203CAE759203EC012AAAAAAAAAAAAC00AAAAAAAAAAAABC01AAAAAAAA AAAAC3FA8A6DFC3518A6DC012AAAAAAAAAAAAC00AAAAAAAAAAAABC0180000000000013 F9D950C83FB72EDC012AAAAAAAAAAAAC00AAAAAAAAAAAABC0155555555555563F89CA2 52ADB3631C012AAAAAAAAAAAAC00AAAAAAAAAAAABC012AAAAAAAAAAABBF4845C8A0CE5 1FCC012AAAAAAAAAAAAC00AAAAAAAAAAAABC010000000000000BF86C16C16C16C2CC01 2AAAAAAAAAAAAC00AAAAAAAAAAAABC00AAAAAAAAAAAABBF92F684BDA12F71C012AAAAA AAAAAAAC00AAAAAAAAAAAABC005555555555556BF97839A5BC7DEA9C012AAAAAAAAAAA AC00AAAAAAAAAAAABC000000000000001BF9907F6E5D4C3BDC012AAAAAAAAAAAAC00AA AAAAAAAAAABBFF5555555555558BF97839A5BC7DEABC012AAAAAAAAAAAAC00AAAAAAAA AAAABBFE555555555555BBF92F684BDA12F74C012AAAAAAAAAAAAC00AAAAAAAAAAAABB CC8000000000000BF86C16C16C16C2FC012AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE5555 55555554FBF4845C8A0CE52C9C012AAAAAAAAAAAAC00AAAAAAAAAAAAB3FF5555555555 5523F89CA252ADB3620C012AAAAAAAAAAAAC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFC3F9 D950C83FB72DBC012AAAAAAAAAAAAC00AAAAAAAAAAAAB40055555555555533FA8A6DFC 3518A65C012AAAAAAAAAAAAC00AAAAAAAAAAAAB400AAAAAAAAAAAA83FB203CAE759203 8C012AAAAAAAAAAAAC00AAAAAAAAAAAAB400FFFFFFFFFFFFD3FB87654320FEDC6C012A AAAAAAAAAAAC00AAAAAAAAAAAAB4012AAAAAAAAAAA93FBFAB0BC1CD2DDDC012AAAAAAA AAAAAC00AAAAAAAAAAAAB40155555555555543FC3D0F8CB487040C012AAAAAAAAAAAAC 00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FC82D82D82D82D5C012AAAAAAAAAAAAC00AAAA AAAAAAAAB401AAAAAAAAAAAAA3FCCEB240795CEB0C012AAAAAAAAAAAAC00AAAAAAAAAA AAB401D5555555555553FD104EE2CC0A9E8C012AAAAAAAAAAAAC00AAAAAAAAAAAAB402 00000000000003FD3C4D5E6F8091AC012AAAAAAAAAAAAC00AAAAAAAAAAAAB402155555 55555553FD6B549327104EDC012AAAAAAAAAAAAC00AAAAAAAAAAAAB4022AAAAAAAAAAA A3FD9D6480F2B9D62C012AAAAAAAAAAAAC00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FDD2 7D27D27D27BC012AAAAAAAAAAAAC005555555555556C0240000000000003FC7530ECA8 641FCC012AAAAAAAAAAAAC005555555555556C022AAAAAAAAAAAB3FC2F684BDA12F69C 012AAAAAAAAAAAAC005555555555556C0215555555555563FBDF623A67EAC30C012AAA AAAAAAAAAC005555555555556C0200000000000013FB6C16C16C16C1AC012AAAAAAAAA AAAC005555555555556C01D5555555555573FB04EE2CC0A9E89C012AAAAAAAAAAAAC00 5555555555556C01AAAAAAAAAAAAC3FA53D0F8CB48703C012AAAAAAAAAAAAC00555555 5555556C0180000000000013F96C16C16C16C15C012AAAAAAAAAAAAC00555555555555 6C0155555555555563F7845C8A0CE5112C012AAAAAAAAAAAAC005555555555556C012A AAAAAAAAAABBF7E573AC901E590C012AAAAAAAAAAAAC005555555555556C0100000000 00000BF923456789ABCEAC012AAAAAAAAAAAAC005555555555556C00AAAAAAAAAAAABB F99CA252ADB3645C012AAAAAAAAAAAAC005555555555556C005555555555556BF9E573 AC901E57FC012AAAAAAAAAAAAC005555555555556C000000000000001BF9FDB97530EC A91C012AAAAAAAAAAAAC005555555555556BFF5555555555558BF9E573AC901E580C01 2AAAAAAAAAAAAC005555555555556BFE555555555555BBF99CA252ADB3649C012AAAAA AAAAAAAC005555555555556BCC8000000000000BF923456789ABCEDC012AAAAAAAAAAA AC0055555555555563FE555555555554FBF7E573AC901E5ADC012AAAAAAAAAAAAC0055 555555555563FF55555555555523F7845C8A0CE50EDC012AAAAAAAAAAAAC0055555555 555563FFFFFFFFFFFFFFC3F96C16C16C16C06C012AAAAAAAAAAAAC0055555555555564 0055555555555533FA53D0F8CB486FBC012AAAAAAAAAAAAC005555555555556400AAAA AAAAAAAA83FB04EE2CC0A9E83C012AAAAAAAAAAAAC005555555555556400FFFFFFFFFF FFD3FB6C16C16C16C10C012AAAAAAAAAAAAC0055555555555564012AAAAAAAAAAA93FB DF623A67EAC28C012AAAAAAAAAAAAC00555555555555640155555555555543FC2F684B DA12F65C012AAAAAAAAAAAAC0055555555555564017FFFFFFFFFFFF3FC7530ECA8641F BC012AAAAAAAAAAAAC005555555555556401AAAAAAAAAAAAA3FCC10AFF9EE8DD6C012A AAAAAAAAAAAC005555555555556401D5555555555553FD097B425ED097AC012AAAAAAA AAAAAC00555555555555640200000000000003FD3579BE02468ACC012AAAAAAAAAAAAC 00555555555555640215555555555553FD6480F2B9D6480C012AAAAAAAAAAAAC005555 5555555564022AAAAAAAAAAAA3FD9690E0857FCF5C012AAAAAAAAAAAAC005555555555 5564023FFFFFFFFFFFF3FDCBA987654320EC012AAAAAAAAAAAAC000000000000001C02 40000000000003FC70A3D70A3D709C012AAAAAAAAAAAAC000000000000001C022AAAAA AAAAAAB3FC2ADB363BEC476C012AAAAAAAAAAAAC000000000000001C02155555555555 63FBD6480F2B9D648C012AAAAAAAAAAAAC000000000000001C0200000000000013FB62 FC962FC9633C012AAAAAAAAAAAAC000000000000001C01D5555555555573FAF7A80308 B9145C012AAAAAAAAAAAAC000000000000001C01AAAAAAAAAAAAC3FA419CA252ADB35C 012AAAAAAAAAAAAC000000000000001C0180000000000013F947AE147AE1479C012AAA AAAAAAAAAC000000000000001C0155555555555563F6E573AC901E543C012AAAAAAAAA AAAC000000000000001C012AAAAAAAAAAABBF83B8B302A7A200C012AAAAAAAAAAAAC00 0000000000001C010000000000000BF947AE147AE1486C012AAAAAAAAAAAAC00000000 0000001C00AAAAAAAAAAAABBF9C10AFF9EE8DE1C012AAAAAAAAAAAAC00000000000000 1C005555555555556BFA04EE2CC0A9E8DC012AAAAAAAAAAAAC000000000000001C0000 00000000001BFA1111111111116C012AAAAAAAAAAAAC000000000000001BFF55555555 55558BFA04EE2CC0A9E8EC012AAAAAAAAAAAAC000000000000001BFE555555555555BB F9C10AFF9EE8DE5C012AAAAAAAAAAAAC000000000000001BCC8000000000000BF947AE 147AE1489C012AAAAAAAAAAAAC0000000000000013FE555555555554FBF83B8B302A7A 20FC012AAAAAAAAAAAAC0000000000000013FF55555555555523F6E573AC901E4F9C01 2AAAAAAAAAAAAC0000000000000013FFFFFFFFFFFFFFC3F947AE147AE146AC012AAAAA AAAAAAAC00000000000000140055555555555533FA419CA252ADB2CC012AAAAAAAAAAA AC000000000000001400AAAAAAAAAAAA83FAF7A80308B9137C012AAAAAAAAAAAAC0000 00000000001400FFFFFFFFFFFFD3FB62FC962FC9629C012AAAAAAAAAAAAC0000000000 000014012AAAAAAAAAAA93FBD6480F2B9D641C012AAAAAAAAAAAAC0000000000000014 0155555555555543FC2ADB363BEC472C012AAAAAAAAAAAAC0000000000000014017FFF FFFFFFFFF3FC70A3D70A3D707C012AAAAAAAAAAAAC000000000000001401AAAAAAAAAA AAA3FCBC7DEA00C22E2C012AAAAAAAAAAAAC000000000000001401D5555555555553FD 0734B78FBD401C012AAAAAAAAAAAAC00000000000000140200000000000003FD333333 3333333C012AAAAAAAAAAAAC00000000000000140215555555555553FD623A67EAC2F0 6C012AAAAAAAAAAAAC0000000000000014022AAAAAAAAAAAA3FD944A55B66C77BC012A AAAAAAAAAAAC0000000000000014023FFFFFFFFFFFF3FDC962FC962FC94C012AAAAAAA AAAAABFF5555555555558C0240000000000003FC7530ECA8641FCC012AAAAAAAAAAAAB FF5555555555558C022AAAAAAAAAAAB3FC2F684BDA12F69C012AAAAAAAAAAAABFF5555 555555558C0215555555555563FBDF623A67EAC2EC012AAAAAAAAAAAABFF5555555555 558C0200000000000013FB6C16C16C16C19C012AAAAAAAAAAAABFF5555555555558C01 D5555555555573FB04EE2CC0A9E88C012AAAAAAAAAAAABFF5555555555558C01AAAAAA AAAAAAC3FA53D0F8CB48703C012AAAAAAAAAAAABFF5555555555558C01800000000000 13F96C16C16C16C15C012AAAAAAAAAAAABFF5555555555558C0155555555555563F784 5C8A0CE5102C012AAAAAAAAAAAABFF5555555555558C012AAAAAAAAAAABBF7E573AC90 1E5A0C012AAAAAAAAAAAABFF5555555555558C010000000000000BF923456789ABCEAC 012AAAAAAAAAAAABFF5555555555558C00AAAAAAAAAAAABBF99CA252ADB3647C012AAA AAAAAAAAABFF5555555555558C005555555555556BF9E573AC901E581C012AAAAAAAAA AAABFF5555555555558C000000000000001BF9FDB97530ECA93C012AAAAAAAAAAAABFF 5555555555558BFF5555555555558BF9E573AC901E582C012AAAAAAAAAAAABFF555555 5555558BFE555555555555BBF99CA252ADB364BC012AAAAAAAAAAAABFF555555555555 8BCC8000000000000BF923456789ABCEFC012AAAAAAAAAAAABFF55555555555583FE55 5555555554FBF7E573AC901E5B5C012AAAAAAAAAAAABFF55555555555583FF55555555 555523F7845C8A0CE50E5C012AAAAAAAAAAAABFF55555555555583FFFFFFFFFFFFFFC3 F96C16C16C16C04C012AAAAAAAAAAAABFF555555555555840055555555555533FA53D0 F8CB486FAC012AAAAAAAAAAAABFF5555555555558400AAAAAAAAAAAA83FB04EE2CC0A9 E82C012AAAAAAAAAAAABFF5555555555558400FFFFFFFFFFFFD3FB6C16C16C16C10C01 2AAAAAAAAAAAABFF55555555555584012AAAAAAAAAAA93FBDF623A67EAC28C012AAAAA AAAAAAABFF555555555555840155555555555543FC2F684BDA12F65C012AAAAAAAAAAA ABFF55555555555584017FFFFFFFFFFFF3FC7530ECA8641FAC012AAAAAAAAAAAABFF55 55555555558401AAAAAAAAAAAAA3FCC10AFF9EE8DD6C012AAAAAAAAAAAABFF55555555 55558401D5555555555553FD097B425ED097AC012AAAAAAAAAAAABFF55555555555584 0200000000000003FD3579BE02468ACC012AAAAAAAAAAAABFF55555555555584021555 5555555553FD6480F2B9D6480C012AAAAAAAAAAAABFF55555555555584022AAAAAAAAA AAA3FD9690E0857FCF5C012AAAAAAAAAAAABFF55555555555584023FFFFFFFFFFFF3FD CBA987654320EC012AAAAAAAAAAAABFE555555555555BC0240000000000003FC82D82D 82D82D6C012AAAAAAAAAAAABFE555555555555BC022AAAAAAAAAAAB3FC3D0F8CB48704 3C012AAAAAAAAAAAABFE555555555555BC0215555555555563FBFAB0BC1CD2DE4C012A AAAAAAAAAAABFE555555555555BC0200000000000013FB87654320FEDCEC012AAAAAAA AAAAABFE555555555555BC01D5555555555573FB203CAE759203DC012AAAAAAAAAAAAB FE555555555555BC01AAAAAAAAAAAAC3FA8A6DFC3518A6BC012AAAAAAAAAAAABFE5555 55555555BC0180000000000013F9D950C83FB72E9C012AAAAAAAAAAAABFE5555555555 55BC0155555555555563F89CA252ADB3629C012AAAAAAAAAAAABFE555555555555BC01 2AAAAAAAAAAABBF4845C8A0CE527CC012AAAAAAAAAAAABFE555555555555BC01000000 0000000BF86C16C16C16C34C012AAAAAAAAAAAABFE555555555555BC00AAAAAAAAAAAA BBF92F684BDA12F75C012AAAAAAAAAAAABFE555555555555BC005555555555556BF978 39A5BC7DEAFC012AAAAAAAAAAAABFE555555555555BC000000000000001BF9907F6E5D 4C3C1C012AAAAAAAAAAAABFE555555555555BBFF5555555555558BF97839A5BC7DEAFC 012AAAAAAAAAAAABFE555555555555BBFE555555555555BBF92F684BDA12F79C012AAA AAAAAAAAABFE555555555555BBCC8000000000000BF86C16C16C16C38C012AAAAAAAAA AAABFE555555555555B3FE555555555554FBF4845C8A0CE5359C012AAAAAAAAAAAABFE 555555555555B3FF55555555555523F89CA252ADB3617C012AAAAAAAAAAAABFE555555 555555B3FFFFFFFFFFFFFFC3F9D950C83FB72D6C012AAAAAAAAAAAABFE555555555555 B40055555555555533FA8A6DFC3518A63C012AAAAAAAAAAAABFE555555555555B400AA AAAAAAAAAA83FB203CAE7592037C012AAAAAAAAAAAABFE555555555555B400FFFFFFFF FFFFD3FB87654320FEDC5C012AAAAAAAAAAAABFE555555555555B4012AAAAAAAAAAA93 FBFAB0BC1CD2DDCC012AAAAAAAAAAAABFE555555555555B40155555555555543FC3D0F 8CB48703FC012AAAAAAAAAAAABFE555555555555B4017FFFFFFFFFFFF3FC82D82D82D8 2D5C012AAAAAAAAAAAABFE555555555555B401AAAAAAAAAAAAA3FCCEB240795CEB0C01 2AAAAAAAAAAAABFE555555555555B401D5555555555553FD104EE2CC0A9E7C012AAAAA AAAAAAABFE555555555555B40200000000000003FD3C4D5E6F8091AC012AAAAAAAAAAA ABFE555555555555B40215555555555553FD6B549327104EDC012AAAAAAAAAAAABFE55 5555555555B4022AAAAAAAAAAAA3FD9D6480F2B9D62C012AAAAAAAAAAAABFE55555555 5555B4023FFFFFFFFFFFF3FDD27D27D27D27BC012AAAAAAAAAAAABCC8000000000000C 0240000000000003FC9999999999998C012AAAAAAAAAAAABCC8000000000000C022AAA AAAAAAAAB3FC53D0F8CB48705C012AAAAAAAAAAAABCC8000000000000C021555555555 5563FC1419CA252ADB3C012AAAAAAAAAAAABCC8000000000000C0200000000000013FB B4E81B4E81B50C012AAAAAAAAAAAABCC8000000000000C01D5555555555573FB4DBF86 A314DC0C012AAAAAAAAAAAABCC8000000000000C01AAAAAAAAAAAAC3FAE573AC901E57 1C012AAAAAAAAAAAABCC8000000000000C0180000000000013FA47AE147AE1479C012A AAAAAAAAAAABCC8000000000000C0155555555555563F9845C8A0CE511CC012AAAAAAA AAAAABCC8000000000000C012AAAAAAAAAAAB3F853D0F8CB486ECC012AAAAAAAAAAAAB CC8000000000000C010000000000000BC90000000000000C012AAAAAAAAAAAABCC8000 000000000C00AAAAAAAAAAAABBF7E573AC901E5AEC012AAAAAAAAAAAABCC8000000000 000C005555555555556BF8845C8A0CE514AC012AAAAAAAAAAAABCC8000000000000C00 0000000000001BF8B4E81B4E81B6EC012AAAAAAAAAAAABCC8000000000000BFF555555 5555558BF8845C8A0CE514AC012AAAAAAAAAAAABCC8000000000000BFE555555555555 BBF7E573AC901E5B8C012AAAAAAAAAAAABCC8000000000000BCC8000000000000BC922 26666666666C012AAAAAAAAAAAABCC80000000000003FE555555555554F3F853D0F8CB 486DEC012AAAAAAAAAAAABCC80000000000003FF55555555555523F9845C8A0CE5116C 012AAAAAAAAAAAABCC80000000000003FFFFFFFFFFFFFFC3FA47AE147AE1470C012AAA AAAAAAAAABCC800000000000040055555555555533FAE573AC901E568C012AAAAAAAAA AAABCC8000000000000400AAAAAAAAAAAA83FB4DBF86A314DB9C012AAAAAAAAAAAABCC 8000000000000400FFFFFFFFFFFFD3FBB4E81B4E81B47C012AAAAAAAAAAAABCC800000 00000004012AAAAAAAAAAA93FC1419CA252ADAFC012AAAAAAAAAAAABCC800000000000 040155555555555543FC53D0F8CB48700C012AAAAAAAAAAAABCC80000000000004017F FFFFFFFFFFF3FC9999999999996C012AAAAAAAAAAAABCC8000000000000401AAAAAAAA AAAAA3FCE573AC901E571C012AAAAAAAAAAAABCC8000000000000401D5555555555553 FD1BAF98D76B548C012AAAAAAAAAAAABCC800000000000040200000000000003FD47AE 147AE147AC012AAAAAAAAAAAABCC800000000000040215555555555553FD76B5493271 04DC012AAAAAAAAAAAABCC80000000000004022AAAAAAAAAAAA3FDA8C536FE1A8C3C01 2AAAAAAAAAAAABCC80000000000004023FFFFFFFFFFFF3FDDDDDDDDDDDDDCC012AAAAA AAAAAAA3FE555555555554FC0240000000000003FCB97530ECA8640C012AAAAAAAAAAA A3FE555555555554FC022AAAAAAAAAAAB3FC73AC901E573ADC012AAAAAAAAAAAA3FE55 5555555554FC0215555555555563FC33F5617839A5BC012AAAAAAAAAAAA3FE55555555 5554FC0200000000000013FBF49F49F49F4A1C012AAAAAAAAAAAA3FE555555555554FC 01D5555555555573FB8D76B54932710C012AAAAAAAAAAAA3FE555555555554FC01AAAA AAAAAAAAC3FB327104EE2CC08C012AAAAAAAAAAAA3FE555555555554FC018000000000 0013FAC71C71C71C719C012AAAAAAAAAAAA3FE555555555554FC0155555555555563FA 419CA252ADB2FC012AAAAAAAAAAAA3FE555555555554FC012AAAAAAAAAAAB3F9A8C536 FE1A8B8C012AAAAAAAAAAAA3FE555555555554FC0100000000000003F8FDB97530ECA6 4C012AAAAAAAAAAAA3FE555555555554FC00AAAAAAAAAAAAB3F80AFF9EE8DD7ABC012A AAAAAAAAAAA3FE555555555554FC0055555555555563F6E573AC901E4E9C012AAAAAAA AAAAA3FE555555555554FC0000000000000013F623456789ABC56C012AAAAAAAAAAAA3 FE555555555554FBFF55555555555583F6E573AC901E4E3C012AAAAAAAAAAAA3FE5555 55555554FBFE555555555555B3F80AFF9EE8DD7A7C012AAAAAAAAAAAA3FE5555555555 54FBCC80000000000003F8FDB97530ECA5FC012AAAAAAAAAAAA3FE555555555554F3FE 555555555554F3F9A8C536FE1A8B1C012AAAAAAAAAAAA3FE555555555554F3FF555555 55555523FA419CA252ADB2BC012AAAAAAAAAAAA3FE555555555554F3FFFFFFFFFFFFFF C3FAC71C71C71C711C012AAAAAAAAAAAA3FE555555555554F40055555555555533FB32 7104EE2CC04C012AAAAAAAAAAAA3FE555555555554F400AAAAAAAAAAAA83FB8D76B549 3270AC012AAAAAAAAAAAA3FE555555555554F400FFFFFFFFFFFFD3FBF49F49F49F498C 012AAAAAAAAAAAA3FE555555555554F4012AAAAAAAAAAA93FC33F5617839A57C012AAA AAAAAAAAA3FE555555555554F40155555555555543FC73AC901E573A9C012AAAAAAAAA AAA3FE555555555554F4017FFFFFFFFFFFF3FCB97530ECA863EC012AAAAAAAAAAAA3FE 555555555554F401AAAAAAAAAAAAA3FD02A7A1F19690DC012AAAAAAAAAAAA3FE555555 555554F401D5555555555553FD2B9D6480F2B9CC012AAAAAAAAAAAA3FE555555555554 F40200000000000003FD579BE02468ACEC012AAAAAAAAAAAA3FE555555555554F40215 555555555553FD86A314DBF86A1C012AAAAAAAAAAAA3FE555555555554F4022AAAAAAA AAAAA3FDB8B302A7A1F17C012AAAAAAAAAAAA3FE555555555554F4023FFFFFFFFFFFF3 FDEDCBA98765430C012AAAAAAAAAAAA3FF5555555555552C0240000000000003FCE26A F37C048CFC012AAAAAAAAAAAA3FF5555555555552C022AAAAAAAAAAAB3FC9CA252ADB3 63CC012AAAAAAAAAAAA3FF5555555555552C0215555555555563FC5CEB240795CEBC01 2AAAAAAAAAAAA3FF5555555555552C0200000000000013FC23456789ABCDFC012AAAAA AAAAAAA3FF5555555555552C01D5555555555573FBDF623A67EAC2FC012AAAAAAAAAAA A3FF5555555555552C01AAAAAAAAAAAAC3FB845C8A0CE5127C012AAAAAAAAAAAA3FF55 55555555552C0180000000000013FB3579BE02468ABC012AAAAAAAAAAAA3FF55555555 55552C0155555555555563FAE573AC901E56CC012AAAAAAAAAAAA3FF5555555555552C 012AAAAAAAAAAAB3FA7839A5BC7DE99C012AAAAAAAAAAAA3FF5555555555552C010000 0000000003FA23456789ABCD6C012AAAAAAAAAAAA3FF5555555555552C00AAAAAAAAAA AAB3F9CD2DE3EF50050C012AAAAAAAAAAAA3FF5555555555552C0055555555555563F9 845C8A0CE5117C012AAAAAAAAAAAA3FF5555555555552C0000000000000013F96C16C1 6C16C05C012AAAAAAAAAAAA3FF5555555555552BFF55555555555583F9845C8A0CE511 6C012AAAAAAAAAAAA3FF5555555555552BFE555555555555B3F9CD2DE3EF5004DC012A AAAAAAAAAAA3FF5555555555552BCC80000000000003FA23456789ABCD5C012AAAAAAA AAAAA3FF55555555555523FE555555555554F3FA7839A5BC7DE95C012AAAAAAAAAAAA3 FF55555555555523FF55555555555523FAE573AC901E568C012AAAAAAAAAAAA3FF5555 5555555523FFFFFFFFFFFFFFC3FB3579BE02468A7C012AAAAAAAAAAAA3FF5555555555 55240055555555555533FB845C8A0CE5123C012AAAAAAAAAAAA3FF5555555555552400 AAAAAAAAAAAA83FBDF623A67EAC28C012AAAAAAAAAAAA3FF5555555555552400FFFFFF FFFFFFD3FC23456789ABCDBC012AAAAAAAAAAAA3FF55555555555524012AAAAAAAAAAA 93FC5CEB240795CE7C012AAAAAAAAAAAA3FF555555555555240155555555555543FC9C A252ADB3638C012AAAAAAAAAAAA3FF55555555555524017FFFFFFFFFFFF3FCE26AF37C 048CDC012AAAAAAAAAAAA3FF5555555555552401AAAAAAAAAAAAA3FD1722833944A54C 012AAAAAAAAAAAA3FF5555555555552401D5555555555553FD401845C8A0CE4C012AAA AAAAAAAAA3FF555555555555240200000000000003FD6C16C16C16C16C012AAAAAAAAA AAA3FF555555555555240215555555555553FD9B1DF623A67E9C012AAAAAAAAAAAA3FF 55555555555524022AAAAAAAAAAAA3FDCD2DE3EF5005EC012AAAAAAAAAAAA3FF555555 55555524023FFFFFFFFFFFF3FE0123456789ABCC012AAAAAAAAAAAA3FFFFFFFFFFFFFF CC0240000000000003FD0A3D70A3D70A3C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC022A AAAAAAAAAAB3FCCEB240795CEB2C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0215555555 555563FC8EFB11D33F561C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0200000000000013 FC5555555555556C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC01D5555555555573FC21C1 0AFF9EE8DC012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3FBE87C65A438 213C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0180000000000013FB9999999999997C01 2AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0155555555555563FB56D9B1DF623A2C012AAAAA AAAAAAA3FFFFFFFFFFFFFFCC012AAAAAAAAAAAB3FB203CAE7592038C012AAAAAAAAAAA A3FFFFFFFFFFFFFFCC0100000000000003FAEB851EB851EAEC012AAAAAAAAAAAA3FFFF FFFFFFFFFFCC00AAAAAAAAAAAAB3FAAED6A9264E200C012AAAAAAAAAAAA3FFFFFFFFFF FFFFCC0055555555555563FA8A6DFC3518A64C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCC 0000000000000013FA7E4B17E4B17DBC012AAAAAAAAAAAA3FFFFFFFFFFFFFFCBFF5555 5555555583FA8A6DFC3518A63C012AAAAAAAAAAAA3FFFFFFFFFFFFFFCBFE5555555555 55B3FAAED6A9264E1FFC012AAAAAAAAAAAA3FFFFFFFFFFFFFFCBCC80000000000003FA EB851EB851EADC012AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE555555555554F3FB203CAE 7592036C012AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FF55555555555523FB56D9B1DF623A 0C012AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FB9999999999993C012A AAAAAAAAAAA3FFFFFFFFFFFFFFC40055555555555533FBE87C65A43820FC012AAAAAAA AAAAA3FFFFFFFFFFFFFFC400AAAAAAAAAAAA83FC21C10AFF9EE8AC012AAAAAAAAAAAA3 FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FC5555555555551C012AAAAAAAAAAAA3FFFFFF FFFFFFFFC4012AAAAAAAAAAA93FC8EFB11D33F55DC012AAAAAAAAAAAA3FFFFFFFFFFFF FFC40155555555555543FCCEB240795CEAEC012AAAAAAAAAAAA3FFFFFFFFFFFFFFC401 7FFFFFFFFFFFF3FD0A3D70A3D70A2C012AAAAAAAAAAAA3FFFFFFFFFFFFFFC401AAAAAA AAAAAAA3FD302A7A1F1968FC012AAAAAAAAAAAA3FFFFFFFFFFFFFFC401D55555555555 53FD59203CAE7591FC012AAAAAAAAAAAA3FFFFFFFFFFFFFFC40200000000000003FD85 1EB851EB851C012AAAAAAAAAAAA3FFFFFFFFFFFFFFC40215555555555553FDB425ED09 7B424C012AAAAAAAAAAAA3FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FDE635DAD524C99C 012AAAAAAAAAAAA3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FE0DA740DA740D9C012AAA AAAAAAAAA4005555555555553C0240000000000003FD27D27D27D27D1C012AAAAAAAAA AAA4005555555555553C022AAAAAAAAAAAB3FD04EE2CC0A9E87C012AAAAAAAAAAAA400 5555555555553C0215555555555563FCCA252ADB363BDC012AAAAAAAAAAAA400555555 5555553C0200000000000013FC907F6E5D4C3B2C012AAAAAAAAAAAA400555555555555 3C01D5555555555573FC5CEB240795CEAC012AAAAAAAAAAAA4005555555555553C01AA AAAAAAAAAAC3FC2F684BDA12F66C012AAAAAAAAAAAA4005555555555553C0180000000 000013FC07F6E5D4C3B28C012AAAAAAAAAAAA4005555555555553C0155555555555563 FBCD2DE3EF5005BC012AAAAAAAAAAAA4005555555555553C012AAAAAAAAAAAB3FB9690 E0857FCF1C012AAAAAAAAAAAA4005555555555553C0100000000000003FB6C16C16C16 C10C012AAAAAAAAAAAA4005555555555553C00AAAAAAAAAAAAB3FB4DBF86A314DB9C01 2AAAAAAAAAAAA4005555555555553C0055555555555563FB3B8B302A7A1EBC012AAAAA AAAAAAA4005555555555553C0000000000000013FB3579BE02468A6C012AAAAAAAAAAA A4005555555555553BFF55555555555583FB3B8B302A7A1EBC012AAAAAAAAAAAA40055 55555555553BFE555555555555B3FB4DBF86A314DB8C012AAAAAAAAAAAA40055555555 55553BCC80000000000003FB6C16C16C16C0FC012AAAAAAAAAAAA40055555555555533 FE555555555554F3FB9690E0857FCEFC012AAAAAAAAAAAA40055555555555533FF5555 5555555523FBCD2DE3EF50059C012AAAAAAAAAAAA40055555555555533FFFFFFFFFFFF FFC3FC07F6E5D4C3B26C012AAAAAAAAAAAA400555555555555340055555555555533FC 2F684BDA12F64C012AAAAAAAAAAAA4005555555555553400AAAAAAAAAAAA83FC5CEB24 0795CE6C012AAAAAAAAAAAA4005555555555553400FFFFFFFFFFFFD3FC907F6E5D4C3A DC012AAAAAAAAAAAA40055555555555534012AAAAAAAAAAA93FCCA252ADB363B9C012A AAAAAAAAAAA400555555555555340155555555555543FD04EE2CC0A9E85C012AAAAAAA AAAAA40055555555555534017FFFFFFFFFFFF3FD27D27D27D27D0C012AAAAAAAAAAAA4 005555555555553401AAAAAAAAAAAAA3FD4DBF86A314DBDC012AAAAAAAAAAAA4005555 555555553401D5555555555553FD76B549327104DC012AAAAAAAAAAAA4005555555555 55340200000000000003FDA2B3C4D5E6F80C012AAAAAAAAAAAA4005555555555553402 15555555555553FDD1BAF98D76B52C012AAAAAAAAAAAA40055555555555534022AAAAA AAAAAAA3FE01E573AC901E4C012AAAAAAAAAAAA40055555555555534023FFFFFFFFFFF F3FE1C71C71C71C70C012AAAAAAAAAAAA400AAAAAAAAAAAA8C0240000000000003FD49 F49F49F49F3C012AAAAAAAAAAAA400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FD27104EE2 CC0A9C012AAAAAAAAAAAA400AAAAAAAAAAAA8C0215555555555563FD0734B78FBD401C 012AAAAAAAAAAAA400AAAAAAAAAAAA8C0200000000000013FCD4C3B2A1907F7C012AAA AAAAAAAAA400AAAAAAAAAAAA8C01D5555555555573FCA12F684BDA12EC012AAAAAAAAA AAA400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FC73AC901E573AAC012AAAAAAAAAAAA400 AAAAAAAAAAAA8C0180000000000013FC4C3B2A1907F6DC012AAAAAAAAAAAA400AAAAAA AAAAAA8C0155555555555563FC2ADB363BEC472C012AAAAAAAAAAAA400AAAAAAAAAAAA 8C012AAAAAAAAAAAB3FC0F8CB487042BDC012AAAAAAAAAAAA400AAAAAAAAAAAA8C0100 000000000003FBF49F49F49F49AC012AAAAAAAAAAAA400AAAAAAAAAAAA8C00AAAAAAAA AAAAB3FBD6480F2B9D642C012AAAAAAAAAAAA400AAAAAAAAAAAA8C0055555555555563 FBC413B8B302A74C012AAAAAAAAAAAA400AAAAAAAAAAAA8C0000000000000013FBBE02 468ACF12FC012AAAAAAAAAAAA400AAAAAAAAAAAA8BFF55555555555583FBC413B8B302 A74C012AAAAAAAAAAAA400AAAAAAAAAAAA8BFE555555555555B3FBD6480F2B9D641C01 2AAAAAAAAAAAA400AAAAAAAAAAAA8BCC80000000000003FBF49F49F49F498C012AAAAA AAAAAAA400AAAAAAAAAAAA83FE555555555554F3FC0F8CB487042BCC012AAAAAAAAAAA A400AAAAAAAAAAAA83FF55555555555523FC2ADB363BEC471C012AAAAAAAAAAAA400AA AAAAAAAAAA83FFFFFFFFFFFFFFC3FC4C3B2A1907F6BC012AAAAAAAAAAAA400AAAAAAAA AAAA840055555555555533FC73AC901E573A9C012AAAAAAAAAAAA400AAAAAAAAAAAA84 00AAAAAAAAAAAA83FCA12F684BDA12BC012AAAAAAAAAAAA400AAAAAAAAAAAA8400FFFF FFFFFFFFD3FCD4C3B2A1907F2C012AAAAAAAAAAAA400AAAAAAAAAAAA84012AAAAAAAAA AA93FD0734B78FBD3FFC012AAAAAAAAAAAA400AAAAAAAAAAAA840155555555555543FD 27104EE2CC0A8C012AAAAAAAAAAAA400AAAAAAAAAAAA84017FFFFFFFFFFFF3FD49F49F 49F49F2C012AAAAAAAAAAAA400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD6FE1A8C536FE 0C012AAAAAAAAAAAA400AAAAAAAAAAAA8401D5555555555553FD98D76B549326FC012A AAAAAAAAAAA400AAAAAAAAAAAA840200000000000003FDC4D5E6F8091A2C012AAAAAAA AAAAA400AAAAAAAAAAAA840215555555555553FDF3DD1BAF98D75C012AAAAAAAAAAAA4 00AAAAAAAAAAAA84022AAAAAAAAAAAA3FE12F684BDA12F5C012AAAAAAAAAAAA400AAAA AAAAAAAA84023FFFFFFFFFFFF3FE2D82D82D82D82C012AAAAAAAAAAAA400FFFFFFFFFF FFDC0240000000000003FD70A3D70A3D709C012AAAAAAAAAAAA400FFFFFFFFFFFFDC02 2AAAAAAAAAAAB3FD4DBF86A314DBFC012AAAAAAAAAAAA400FFFFFFFFFFFFDC02155555 55555563FD2DE3EF5006116C012AAAAAAAAAAAA400FFFFFFFFFFFFDC02000000000000 13FD1111111111111C012AAAAAAAAAAAA400FFFFFFFFFFFFDC01D5555555555573FCEE 8DD7CC6BB59C012AAAAAAAAAAAA400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FCC10AFF9E E8DD5C012AAAAAAAAAAAA400FFFFFFFFFFFFDC0180000000000013FC9999999999997C 012AAAAAAAAAAAA400FFFFFFFFFFFFDC0155555555555563FC7839A5BC7DE9DC012AAA AAAAAAAAA400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FC5CEB240795CE8C012AAAAAAAAA AAA400FFFFFFFFFFFFDC0100000000000003FC47AE147AE1477C012AAAAAAAAAAAA400 FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FC388277166054BC012AAAAAAAAAAAA400FFFFFF FFFFFFDC0055555555555563FC2F684BDA12F64C012AAAAAAAAAAAA400FFFFFFFFFFFF DC0000000000000013FC2C5F92C5F92C2C012AAAAAAAAAAAA400FFFFFFFFFFFFDBFF55 555555555583FC2F684BDA12F65C012AAAAAAAAAAAA400FFFFFFFFFFFFDBFE55555555 5555B3FC388277166054BC012AAAAAAAAAAAA400FFFFFFFFFFFFDBCC80000000000003 FC47AE147AE1477C012AAAAAAAAAAAA400FFFFFFFFFFFFD3FE555555555554F3FC5CEB 240795CE7C012AAAAAAAAAAAA400FFFFFFFFFFFFD3FF55555555555523FC7839A5BC7D E9CC012AAAAAAAAAAAA400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FC9999999999995C01 2AAAAAAAAAAAA400FFFFFFFFFFFFD40055555555555533FCC10AFF9EE8DD3C012AAAAA AAAAAAA400FFFFFFFFFFFFD400AAAAAAAAAAAA83FCEE8DD7CC6BB55C012AAAAAAAAAAA A400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FD111111111110EC012AAAAAAAAAAAA400FF FFFFFFFFFFD4012AAAAAAAAAAA93FD2DE3EF5006114C012AAAAAAAAAAAA400FFFFFFFF FFFFD40155555555555543FD4DBF86A314DBDC012AAAAAAAAAAAA400FFFFFFFFFFFFD4 017FFFFFFFFFFFF3FD70A3D70A3D707C012AAAAAAAAAAAA400FFFFFFFFFFFFD401AAAA AAAAAAAAA3FD9690E0857FCF5C012AAAAAAAAAAAA400FFFFFFFFFFFFD401D555555555 5553FDBF86A314DBF84C012AAAAAAAAAAAA400FFFFFFFFFFFFD40200000000000003FD EB851EB851EB6C012AAAAAAAAAAAA400FFFFFFFFFFFFD40215555555555553FE0D4629 B7F0D45C012AAAAAAAAAAAA400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FE264E209DC598 0C012AAAAAAAAAAAA400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE40DA740DA740CC012A AAAAAAAAAAA4012AAAAAAAAAAA9C0240000000000003FD9BE02468ACF11C012AAAAAAA AAAAA4012AAAAAAAAAAA9C022AAAAAAAAAAAB3FD78FBD401845C7C012AAAAAAAAAAAA4 012AAAAAAAAAAA9C0215555555555563FD59203CAE7591FC012AAAAAAAAAAAA4012AAA AAAAAAAA9C0200000000000013FD3C4D5E6F80919C012AAAAAAAAAAAA4012AAAAAAAAA AA9C01D5555555555573FD22833944A55B5C012AAAAAAAAAAAA4012AAAAAAAAAAA9C01 AAAAAAAAAAAAC3FD0BC1CD2DE3EF3C012AAAAAAAAAAAA4012AAAAAAAAAAA9C01800000 00000013FCF0123456789A8C012AAAAAAAAAAAA4012AAAAAAAAAAA9C01555555555555 63FCCEB240795CEAEC012AAAAAAAAAAAA4012AAAAAAAAAAA9C012AAAAAAAAAAAB3FCB3 63BEC474CF9C012AAAAAAAAAAAA4012AAAAAAAAAAA9C0100000000000003FC9E26AF37 C0488C012AAAAAAAAAAAA4012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FC8EFB11D33F55CC 012AAAAAAAAAAAA4012AAAAAAAAAAA9C0055555555555563FC85E0E696F1F75C012AAA AAAAAAAAA4012AAAAAAAAAAA9C0000000000000013FC82D82D82D82D3C012AAAAAAAAA AAA4012AAAAAAAAAAA9BFF55555555555583FC85E0E696F1F76C012AAAAAAAAAAAA401 2AAAAAAAAAAA9BFE555555555555B3FC8EFB11D33F55CC012AAAAAAAAAAAA4012AAAAA AAAAAA9BCC80000000000003FC9E26AF37C0488C012AAAAAAAAAAAA4012AAAAAAAAAAA 93FE555555555554F3FCB363BEC474CF8C012AAAAAAAAAAAA4012AAAAAAAAAAA93FF55 555555555523FCCEB240795CEADC012AAAAAAAAAAAA4012AAAAAAAAAAA93FFFFFFFFFF FFFFC3FCF0123456789A6C012AAAAAAAAAAAA4012AAAAAAAAAAA940055555555555533 FD0BC1CD2DE3EF2C012AAAAAAAAAAAA4012AAAAAAAAAAA9400AAAAAAAAAAAA83FD2283 3944A55B3C012AAAAAAAAAAAA4012AAAAAAAAAAA9400FFFFFFFFFFFFD3FD3C4D5E6F80 917C012AAAAAAAAAAAA4012AAAAAAAAAAA94012AAAAAAAAAAA93FD59203CAE7591CC01 2AAAAAAAAAAAA4012AAAAAAAAAAA940155555555555543FD78FBD401845C6C012AAAAA AAAAAAA4012AAAAAAAAAAA94017FFFFFFFFFFFF3FD9BE02468ACF10C012AAAAAAAAAAA A4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FDC1CD2DE3EF4FEC012AAAAAAAAAAAA4012A AAAAAAAAAA9401D5555555555553FDEAC2F0734B78DC012AAAAAAAAAAAA4012AAAAAAA AAAA940200000000000003FE0B60B60B60B60C012AAAAAAAAAAAA4012AAAAAAAAAAA94 0215555555555553FE22E4506728949C012AAAAAAAAAAAA4012AAAAAAAAAAA94022AAA AAAAAAAAA3FE3BEC474CFD584C012AAAAAAAAAAAA4012AAAAAAAAAAA94023FFFFFFFFF FFF3FE56789ABCDF010C012AAAAAAAAAAAA4015555555555554C0240000000000003FD CBA987654320EC012AAAAAAAAAAAA4015555555555554C022AAAAAAAAAAAB3FDA8C536 FE1A8C4C012AAAAAAAAAAAA4015555555555554C0215555555555563FD88E99FAB0BC1 CC012AAAAAAAAAAAA4015555555555554C0200000000000013FD6C16C16C16C16C012A AAAAAAAAAAA4015555555555554C01D5555555555573FD524C9C413B8B2C012AAAAAAA AAAAA4015555555555554C01AAAAAAAAAAAAC3FD3B8B302A7A1F0C012AAAAAAAAAAAA4 015555555555554C0180000000000013FD27D27D27D27D1C012AAAAAAAAAAAA4015555 555555554C0155555555555563FD1722833944A54C012AAAAAAAAAAAA4015555555555 554C012AAAAAAAAAAAB3FD097B425ED0979C012AAAAAAAAAAAA4015555555555554C01 00000000000003FCFDB97530ECA82C012AAAAAAAAAAAA4015555555555554C00AAAAAA AAAAAAB3FCEE8DD7CC6BB56C012AAAAAAAAAAAA4015555555555554C00555555555555 63FCE573AC901E56FC012AAAAAAAAAAAA4015555555555554C0000000000000013FCE2 6AF37C048CDC012AAAAAAAAAAAA4015555555555554BFF55555555555583FCE573AC90 1E570C012AAAAAAAAAAAA4015555555555554BFE555555555555B3FCEE8DD7CC6BB56C 012AAAAAAAAAAAA4015555555555554BCC80000000000003FCFDB97530ECA82C012AAA AAAAAAAAA40155555555555543FE555555555554F3FD097B425ED0979C012AAAAAAAAA AAA40155555555555543FF55555555555523FD1722833944A54C012AAAAAAAAAAAA401 55555555555543FFFFFFFFFFFFFFC3FD27D27D27D27D0C012AAAAAAAAAAAA401555555 555555440055555555555533FD3B8B302A7A1EFC012AAAAAAAAAAAA401555555555555 4400AAAAAAAAAAAA83FD524C9C413B8B1C012AAAAAAAAAAAA4015555555555554400FF FFFFFFFFFFD3FD6C16C16C16C14C012AAAAAAAAAAAA40155555555555544012AAAAAAA AAAA93FD88E99FAB0BC19C012AAAAAAAAAAAA401555555555555440155555555555543 FDA8C536FE1A8C3C012AAAAAAAAAAAA40155555555555544017FFFFFFFFFFFF3FDCBA9 87654320DC012AAAAAAAAAAAA4015555555555554401AAAAAAAAAAAAA3FDF19690E085 7FBC012AAAAAAAAAAAA4015555555555554401D5555555555553FE0D4629B7F0D45C01 2AAAAAAAAAAAA401555555555555440200000000000003FE23456789ABCDEC012AAAAA AAAAAAA401555555555555440215555555555553FE3AC901E573AC8C012AAAAAAAAAAA A40155555555555544022AAAAAAAAAAAA3FE53D0F8CB48702C012AAAAAAAAAAAA40155 555555555544023FFFFFFFFFFFF3FE6E5D4C3B2A18FC012AAAAAAAAAAAA4017FFFFFFF FFFFFC0240000000000003FDFFFFFFFFFFFFEC012AAAAAAAAAAAA4017FFFFFFFFFFFFC 022AAAAAAAAAAAB3FDDD1BAF98D76B4C012AAAAAAAAAAAA4017FFFFFFFFFFFFC021555 5555555563FDBD401845C8A0CC012AAAAAAAAAAAA4017FFFFFFFFFFFFC020000000000 0013FDA06D3A06D3A06C012AAAAAAAAAAAA4017FFFFFFFFFFFFC01D5555555555573FD 86A314DBF86A2C012AAAAAAAAAAAA4017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD6FE1A8 C536FE0C012AAAAAAAAAAAA4017FFFFFFFFFFFFC0180000000000013FD5C28F5C28F5C 1C012AAAAAAAAAAAA4017FFFFFFFFFFFFC0155555555555563FD4B78FBD401844C012A AAAAAAAAAAA4017FFFFFFFFFFFFC012AAAAAAAAAAAB3FD3DD1BAF98D769C012AAAAAAA AAAAA4017FFFFFFFFFFFFC0100000000000003FD3333333333331C012AAAAAAAAAAAA4 017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD2B9D6480F2B9BC012AAAAAAAAAAAA4017FFF FFFFFFFFFC0055555555555563FD27104EE2CC0A8C012AAAAAAAAAAAA4017FFFFFFFFF FFFC0000000000000013FD258BF258BF257C012AAAAAAAAAAAA4017FFFFFFFFFFFFBFF 55555555555583FD27104EE2CC0A8C012AAAAAAAAAAAA4017FFFFFFFFFFFFBFE555555 555555B3FD2B9D6480F2B9BC012AAAAAAAAAAAA4017FFFFFFFFFFFFBCC800000000000 03FD3333333333331C012AAAAAAAAAAAA4017FFFFFFFFFFFF3FE555555555554F3FD3D D1BAF98D769C012AAAAAAAAAAAA4017FFFFFFFFFFFF3FF55555555555523FD4B78FBD4 01844C012AAAAAAAAAAAA4017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD5C28F5C28F5C0C 012AAAAAAAAAAAA4017FFFFFFFFFFFF40055555555555533FD6FE1A8C536FDFC012AAA AAAAAAAAA4017FFFFFFFFFFFF400AAAAAAAAAAAA83FD86A314DBF86A1C012AAAAAAAAA AAA4017FFFFFFFFFFFF400FFFFFFFFFFFFD3FDA06D3A06D3A04C012AAAAAAAAAAAA401 7FFFFFFFFFFFF4012AAAAAAAAAAA93FDBD401845C8A09C012AAAAAAAAAAAA4017FFFFF FFFFFFF40155555555555543FDDD1BAF98D76B3C012AAAAAAAAAAAA4017FFFFFFFFFFF F4017FFFFFFFFFFFF3FDFFFFFFFFFFFFDC012AAAAAAAAAAAA4017FFFFFFFFFFFF401AA AAAAAAAAAAA3FE12F684BDA12F5C012AAAAAAAAAAAA4017FFFFFFFFFFFF401D5555555 555553FE277166054F43DC012AAAAAAAAAAAA4017FFFFFFFFFFFF40200000000000003 FE3D70A3D70A3D6C012AAAAAAAAAAAA4017FFFFFFFFFFFF40215555555555553FE54F4 3E32D21C0C012AAAAAAAAAAAA4017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE6DFC3518A6 DFAC012AAAAAAAAAAAA4017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE8888888888887C01 2AAAAAAAAAAAA401AAAAAAAAAAAAAC0240000000000003FE1C71C71C71C71C012AAAAA AAAAAAA401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FE0AFF9EE8DD7CCC012AAAAAAAAAAA A401AAAAAAAAAAAAAC0215555555555563FDF623A67EAC2F0C012AAAAAAAAAAAA401AA AAAAAAAAAAAC0200000000000013FDD950C83FB72EAC012AAAAAAAAAAAA401AAAAAAAA AAAAAC01D5555555555573FDBF86A314DBF86C012AAAAAAAAAAAA401AAAAAAAAAAAAAC 01AAAAAAAAAAAAC3FDA8C536FE1A8C4C012AAAAAAAAAAAA401AAAAAAAAAAAAAC018000 0000000013FD950C83FB72EA5C012AAAAAAAAAAAA401AAAAAAAAAAAAAC015555555555 5563FD845C8A0CE5128C012AAAAAAAAAAAA401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD 76B549327104DC012AAAAAAAAAAAA401AAAAAAAAAAAAAC0100000000000003FD6C16C1 6C16C15C012AAAAAAAAAAAA401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FD6480F2B9D647 FC012AAAAAAAAAAAA401AAAAAAAAAAAAAC0055555555555563FD5FF3DD1BAF98CC012A AAAAAAAAAAA401AAAAAAAAAAAAAC0000000000000013FD5E6F8091A2B3BC012AAAAAAA AAAAA401AAAAAAAAAAAAABFF55555555555583FD5FF3DD1BAF98CC012AAAAAAAAAAAA4 01AAAAAAAAAAAAABFE555555555555B3FD6480F2B9D647FC012AAAAAAAAAAAA401AAAA AAAAAAAAABCC80000000000003FD6C16C16C16C15C012AAAAAAAAAAAA401AAAAAAAAAA AAA3FE555555555554F3FD76B549327104DC012AAAAAAAAAAAA401AAAAAAAAAAAAA3FF 55555555555523FD845C8A0CE5128C012AAAAAAAAAAAA401AAAAAAAAAAAAA3FFFFFFFF FFFFFFC3FD950C83FB72EA4C012AAAAAAAAAAAA401AAAAAAAAAAAAA400555555555555 33FDA8C536FE1A8C3C012AAAAAAAAAAAA401AAAAAAAAAAAAA400AAAAAAAAAAAA83FDBF 86A314DBF85C012AAAAAAAAAAAA401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FDD950C83F B72E8C012AAAAAAAAAAAA401AAAAAAAAAAAAA4012AAAAAAAAAAA93FDF623A67EAC2EDC 012AAAAAAAAAAAA401AAAAAAAAAAAAA40155555555555543FE0AFF9EE8DD7CBC012AAA AAAAAAAAA401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FE1C71C71C71C71C012AAAAAAAAA AAA401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FE2F684BDA12F67C012AAAAAAAAAAAA401 AAAAAAAAAAAAA401D5555555555553FE43E32D21C10AFC012AAAAAAAAAAAA401AAAAAA AAAAAAA40200000000000003FE59E26AF37C048C012AAAAAAAAAAAA401AAAAAAAAAAAA A40215555555555553FE7166054F43E32C012AAAAAAAAAAAA401AAAAAAAAAAAAA4022A AAAAAAAAAAA3FE8A6DFC3518A6CC012AAAAAAAAAAAA401AAAAAAAAAAAAA4023FFFFFFF FFFFF3FEA4FA4FA4FA4F9C012AAAAAAAAAAAA401D555555555555C0240000000000003 FE3B2A1907F6E5CC012AAAAAAAAAAAA401D555555555555C022AAAAAAAAAAAB3FE29B7 F0D4629B8C012AAAAAAAAAAAA401D555555555555C0215555555555563FE19CA252ADB 363C012AAAAAAAAAAAA401D555555555555C0200000000000013FE0B60B60B60B61C01 2AAAAAAAAAAAA401D555555555555C01D5555555555573FDFCF746EBE635DC012AAAAA AAAAAAA401D555555555555C01AAAAAAAAAAAAC3FDE635DAD524C9BC012AAAAAAAAAAA A401D555555555555C0180000000000013FDD27D27D27D27CC012AAAAAAAAAAAA401D5 55555555555C0155555555555563FDC1CD2DE3EF4FFC012AAAAAAAAAAAA401D5555555 55555C012AAAAAAAAAAAB3FDB425ED097B424C012AAAAAAAAAAAA401D555555555555C 0100000000000003FDA987654320FECC012AAAAAAAAAAAA401D555555555555C00AAAA AAAAAAAAB3FDA1F19690E0856C012AAAAAAAAAAAA401D555555555555C005555555555 5563FD9D6480F2B9D63C012AAAAAAAAAAAA401D555555555555C0000000000000013FD 9BE02468ACF12C012AAAAAAAAAAAA401D555555555555BFF55555555555583FD9D6480 F2B9D63C012AAAAAAAAAAAA401D555555555555BFE555555555555B3FDA1F19690E085 6C012AAAAAAAAAAAA401D555555555555BCC80000000000003FDA987654320FECC012A AAAAAAAAAAA401D5555555555553FE555555555554F3FDB425ED097B424C012AAAAAAA AAAAA401D5555555555553FF55555555555523FDC1CD2DE3EF4FFC012AAAAAAAAAAAA4 01D5555555555553FFFFFFFFFFFFFFC3FDD27D27D27D27BC012AAAAAAAAAAAA401D555 55555555540055555555555533FDE635DAD524C9AC012AAAAAAAAAAAA401D555555555 555400AAAAAAAAAAAA83FDFCF746EBE635CC012AAAAAAAAAAAA401D555555555555400 FFFFFFFFFFFFD3FE0B60B60B60B60C012AAAAAAAAAAAA401D5555555555554012AAAAA AAAAAA93FE19CA252ADB362C012AAAAAAAAAAAA401D555555555555401555555555555 43FE29B7F0D4629B7C012AAAAAAAAAAAA401D5555555555554017FFFFFFFFFFFF3FE3B 2A1907F6E5CC012AAAAAAAAAAAA401D555555555555401AAAAAAAAAAAAA3FE4E209DC5 98153C012AAAAAAAAAAAA401D555555555555401D5555555555553FE629B7F0D4629AC 012AAAAAAAAAAAA401D55555555555540200000000000003FE789ABCDF01234C012AAA AAAAAAAAA401D55555555555540215555555555553FE901E573AC901DC012AAAAAAAAA AAA401D5555555555554022AAAAAAAAAAAA3FEA9264E209DC58C012AAAAAAAAAAAA401 D5555555555554023FFFFFFFFFFFF3FEC3B2A1907F6E4C012AAAAAAAAAAAA402000000 0000000C0240000000000003FE5C28F5C28F5C2C012AAAAAAAAAAAA402000000000000 0C022AAAAAAAAAAAB3FE4AB6CD8EFB11EC012AAAAAAAAAAAA4020000000000000C0215 555555555563FE3AC901E573AC9C012AAAAAAAAAAAA4020000000000000C0200000000 000013FE2C5F92C5F92C7C012AAAAAAAAAAAA4020000000000000C01D5555555555573 FE1F7A80308B915C012AAAAAAAAAAAA4020000000000000C01AAAAAAAAAAAAC3FE1419 CA252ADB4C012AAAAAAAAAAAA4020000000000000C0180000000000013FE0A3D70A3D7 0A4C012AAAAAAAAAAAA4020000000000000C0155555555555563FE01E573AC901E5C01 2AAAAAAAAAAAA4020000000000000C012AAAAAAAAAAAB3FDF623A67EAC2F0C012AAAAA AAAAAAA4020000000000000C0100000000000003FDEB851EB851EB8C012AAAAAAAAAAA A4020000000000000C00AAAAAAAAAAAAB3FDE3EF500611722C012AAAAAAAAAAAA40200 00000000000C0055555555555563FDDF623A67EAC2FC012AAAAAAAAAAAA40200000000 00000C0000000000000013FDDDDDDDDDDDDDEC012AAAAAAAAAAAA4020000000000000B FF55555555555583FDDF623A67EAC2FC012AAAAAAAAAAAA4020000000000000BFE5555 55555555B3FDE3EF500611722C012AAAAAAAAAAAA4020000000000000BCC8000000000 0003FDEB851EB851EB8C012AAAAAAAAAAAA40200000000000003FE555555555554F3FD F623A67EAC2F0C012AAAAAAAAAAAA40200000000000003FF55555555555523FE01E573 AC901E5C012AAAAAAAAAAAA40200000000000003FFFFFFFFFFFFFFC3FE0A3D70A3D70A 3C012AAAAAAAAAAAA402000000000000040055555555555533FE1419CA252ADB3C012A AAAAAAAAAAA4020000000000000400AAAAAAAAAAAA83FE1F7A80308B913C012AAAAAAA AAAAA4020000000000000400FFFFFFFFFFFFD3FE2C5F92C5F92C6C012AAAAAAAAAAAA4 0200000000000004012AAAAAAAAAAA93FE3AC901E573AC8C012AAAAAAAAAAAA4020000 00000000040155555555555543FE4AB6CD8EFB11DC012AAAAAAAAAAAA4020000000000 0004017FFFFFFFFFFFF3FE5C28F5C28F5C2C012AAAAAAAAAAAA4020000000000000401 AAAAAAAAAAAAA3FE6F1F7A80308B9C012AAAAAAAAAAAA4020000000000000401D55555 55555553FE839A5BC7DEA00C012AAAAAAAAAAAA4020000000000000402000000000000 03FE999999999999AC012AAAAAAAAAAAA402000000000000040215555555555553FEB1 1D33F561783C012AAAAAAAAAAAA40200000000000004022AAAAAAAAAAAA3FECA252ADB 363BEC012AAAAAAAAAAAA40200000000000004023FFFFFFFFFFFF3FEE4B17E4B17E4AC 012AAAAAAAAAAAA4021555555555555C0240000000000003FE7F6E5D4C3B2A0C012AAA AAAAAAAAA4021555555555555C022AAAAAAAAAAAB3FE6DFC3518A6DFCC012AAAAAAAAA AAA4021555555555555C0215555555555563FE5E0E696F1F7A7C012AAAAAAAAAAAA402 1555555555555C0200000000000013FE4FA4FA4FA4FA5C012AAAAAAAAAAAA402155555 5555555C01D5555555555573FE42BFE7BA375F3C012AAAAAAAAAAAA402155555555555 5C01AAAAAAAAAAAAC3FE375F31AED6A92C012AAAAAAAAAAAA4021555555555555C0180 000000000013FE2D82D82D82D82C012AAAAAAAAAAAA4021555555555555C0155555555 555563FE252ADB363BEC3C012AAAAAAAAAAAA4021555555555555C012AAAAAAAAAAAB3 FE1E573AC901E56C012AAAAAAAAAAAA4021555555555555C0100000000000003FE1907 F6E5D4C3AC012AAAAAAAAAAAA4021555555555555C00AAAAAAAAAAAAB3FE153D0F8CB4 870C012AAAAAAAAAAAA4021555555555555C0055555555555563FE12F684BDA12F5C01 2AAAAAAAAAAAA4021555555555555C0000000000000013FE123456789ABCCC012AAAAA AAAAAAA4021555555555555BFF55555555555583FE12F684BDA12F5C012AAAAAAAAAAA A4021555555555555BFE555555555555B3FE153D0F8CB486FC012AAAAAAAAAAAA40215 55555555555BCC80000000000003FE1907F6E5D4C3AC012AAAAAAAAAAAA40215555555 555553FE555555555554F3FE1E573AC901E56C012AAAAAAAAAAAA40215555555555553 FF55555555555523FE252ADB363BEC3C012AAAAAAAAAAAA40215555555555553FFFFFF FFFFFFFFC3FE2D82D82D82D81C012AAAAAAAAAAAA40215555555555554005555555555 5533FE375F31AED6A91C012AAAAAAAAAAAA4021555555555555400AAAAAAAAAAAA83FE 42BFE7BA375F1C012AAAAAAAAAAAA4021555555555555400FFFFFFFFFFFFD3FE4FA4FA 4FA4FA4C012AAAAAAAAAAAA40215555555555554012AAAAAAAAAAA93FE5E0E696F1F7A 6C012AAAAAAAAAAAA402155555555555540155555555555543FE6DFC3518A6DFBC012A AAAAAAAAAAA40215555555555554017FFFFFFFFFFFF3FE7F6E5D4C3B2A0C012AAAAAAA AAAAA4021555555555555401AAAAAAAAAAAAA3FE9264E209DC597C012AAAAAAAAAAAA4 021555555555555401D5555555555553FEA6DFC3518A6DEC012AAAAAAAAAAAA4021555 55555555540200000000000003FEBCDF012345678C012AAAAAAAAAAAA4021555555555 55540215555555555553FED4629B7F0D461C012AAAAAAAAAAAA4021555555555555402 2AAAAAAAAAAAA3FEED6A9264E209CC012AAAAAAAAAAAA40215555555555554023FFFFF FFFFFFF3FF03FB72EA61D94C012AAAAAAAAAAAA4022AAAAAAAAAAAAC02400000000000 03FEA4FA4FA4FA4F8C012AAAAAAAAAAAA4022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE93 88277166054C012AAAAAAAAAAAA4022AAAAAAAAAAAAC0215555555555563FE839A5BC7 DE9FFC012AAAAAAAAAAAA4022AAAAAAAAAAAAC0200000000000013FE7530ECA8641FDC 012AAAAAAAAAAAA4022AAAAAAAAAAAAC01D5555555555573FE684BDA12F684AC012AAA AAAAAAAAA4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE5CEB240795CEAC012AAAAAAAAA AAA4022AAAAAAAAAAAAC0180000000000013FE530ECA8641FDAC012AAAAAAAAAAAA402 2AAAAAAAAAAAAC0155555555555563FE4AB6CD8EFB11BC012AAAAAAAAAAAA4022AAAAA AAAAAAAC012AAAAAAAAAAAB3FE43E32D21C10AFC012AAAAAAAAAAAA4022AAAAAAAAAAA AC0100000000000003FE3E93E93E93E92C012AAAAAAAAAAAA4022AAAAAAAAAAAAC00AA AAAAAAAAAAB3FE3AC901E573AC8C012AAAAAAAAAAAA4022AAAAAAAAAAAAC0055555555 555563FE388277166054DC012AAAAAAAAAAAA4022AAAAAAAAAAAAC0000000000000013 FE37C048D159E24C012AAAAAAAAAAAA4022AAAAAAAAAAAABFF55555555555583FE3882 77166054DC012AAAAAAAAAAAA4022AAAAAAAAAAAABFE555555555555B3FE3AC901E573 AC7C012AAAAAAAAAAAA4022AAAAAAAAAAAABCC80000000000003FE3E93E93E93E92C01 2AAAAAAAAAAAA4022AAAAAAAAAAAA3FE555555555554F3FE43E32D21C10AEC012AAAAA AAAAAAA4022AAAAAAAAAAAA3FF55555555555523FE4AB6CD8EFB11BC012AAAAAAAAAAA A4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE530ECA8641FD9C012AAAAAAAAAAAA4022A AAAAAAAAAAA40055555555555533FE5CEB240795CE9C012AAAAAAAAAAAA4022AAAAAAA AAAAA400AAAAAAAAAAAA83FE684BDA12F6849C012AAAAAAAAAAAA4022AAAAAAAAAAAA4 00FFFFFFFFFFFFD3FE7530ECA8641FCC012AAAAAAAAAAAA4022AAAAAAAAAAAA4012AAA AAAAAAAA93FE839A5BC7DE9FEC012AAAAAAAAAAAA4022AAAAAAAAAAAA4015555555555 5543FE9388277166053C012AAAAAAAAAAAA4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE A4FA4FA4FA4F8C012AAAAAAAAAAAA4022AAAAAAAAAAAA401AAAAAAAAAAAAA3FEB7F0D4 629B7EFC012AAAAAAAAAAAA4022AAAAAAAAAAAA401D5555555555553FECC6BB5AA4993 6C012AAAAAAAAAAAA4022AAAAAAAAAAAA40200000000000003FEE26AF37C048D0C012A AAAAAAAAAAA4022AAAAAAAAAAAA40215555555555553FEF9EE8DD7CC6B9C012AAAAAAA AAAAA4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FF097B425ED097AC012AAAAAAAAAAAA4 022AAAAAAAAAAAA4023FFFFFFFFFFFF3FF16C16C16C16C0C012AAAAAAAAAAAA4023FFF FFFFFFFFFC0240000000000003FECCCCCCCCCCCCCC012AAAAAAAAAAAA4023FFFFFFFFF FFFC022AAAAAAAAAAAB3FEBB5AA49938827C012AAAAAAAAAAAA4023FFFFFFFFFFFFC02 15555555555563FEAB6CD8EFB11D2C012AAAAAAAAAAAA4023FFFFFFFFFFFFC02000000 00000013FE9D0369D0369D0C012AAAAAAAAAAAA4023FFFFFFFFFFFFC01D55555555555 73FE901E573AC901DC012AAAAAAAAAAAA4023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE84 BDA12F684BDC012AAAAAAAAAAAA4023FFFFFFFFFFFFC0180000000000013FE7AE147AE 147ADC012AAAAAAAAAAAA4023FFFFFFFFFFFFC0155555555555563FE72894AB6CD8EEC 012AAAAAAAAAAAA4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE6BB5AA4993882C012AAA AAAAAAAAA4023FFFFFFFFFFFFC0100000000000003FE6666666666665C012AAAAAAAAA AAA4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE629B7F0D4629BC012AAAAAAAAAAAA402 3FFFFFFFFFFFFC0055555555555563FE6054F43E32D20C012AAAAAAAAAAAA4023FFFFF FFFFFFFC0000000000000013FE5F92C5F92C5F7C012AAAAAAAAAAAA4023FFFFFFFFFFF FBFF55555555555583FE6054F43E32D20C012AAAAAAAAAAAA4023FFFFFFFFFFFFBFE55 5555555555B3FE629B7F0D4629AC012AAAAAAAAAAAA4023FFFFFFFFFFFFBCC80000000 000003FE6666666666665C012AAAAAAAAAAAA4023FFFFFFFFFFFF3FE555555555554F3 FE6BB5AA4993881C012AAAAAAAAAAAA4023FFFFFFFFFFFF3FF55555555555523FE7289 4AB6CD8EEC012AAAAAAAAAAAA4023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE7AE147AE14 7ACC012AAAAAAAAAAAA4023FFFFFFFFFFFF40055555555555533FE84BDA12F684BCC01 2AAAAAAAAAAAA4023FFFFFFFFFFFF400AAAAAAAAAAAA83FE901E573AC901CC012AAAAA AAAAAAA4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE9D0369D0369CFC012AAAAAAAAAAA A4023FFFFFFFFFFFF4012AAAAAAAAAAA93FEAB6CD8EFB11D1C012AAAAAAAAAAAA4023F FFFFFFFFFFF40155555555555543FEBB5AA49938826C012AAAAAAAAAAAA4023FFFFFFF FFFFF4017FFFFFFFFFFFF3FECCCCCCCCCCCCBC012AAAAAAAAAAAA4023FFFFFFFFFFFF4 01AAAAAAAAAAAAA3FEDFC3518A6DFC2C012AAAAAAAAAAAA4023FFFFFFFFFFFF401D555 5555555553FEF43E32D21C109C012AAAAAAAAAAAA4023FFFFFFFFFFFF4020000000000 0003FF051EB851EB851C012AAAAAAAAAAAA4023FFFFFFFFFFFF40215555555555553FF 10E0857FCF746C012AAAAAAAAAAAA4023FFFFFFFFFFFF4022AAAAAAAAAAAA3FF1D6480 F2B9D64C012AAAAAAAAAAAA4023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF2AAAAAAAAAAA AC011FFFFFFFFFFFFC024000000000000C0240000000000003FDEEEEEEEEEEEEEC011F FFFFFFFFFFFC024000000000000C022AAAAAAAAAAAB3FDCC0A9E87C65A4C011FFFFFFF FFFFFC024000000000000C0215555555555563FDAC2F0734B78FCC011FFFFFFFFFFFFC 024000000000000C0200000000000013FD8F5C28F5C28F6C011FFFFFFFFFFFFC024000 000000000C01D5555555555573FD759203CAE7592C011FFFFFFFFFFFFC024000000000 000C01AAAAAAAAAAAAC3FD5ED097B425ED0C011FFFFFFFFFFFFC024000000000000C01 80000000000013FD4B17E4B17E4B1C011FFFFFFFFFFFFC024000000000000C01555555 55555563FD3A67EAC2F0734C011FFFFFFFFFFFFC024000000000000C012AAAAAAAAAAA B3FD2CC0A9E87C659C011FFFFFFFFFFFFC024000000000000C0100000000000003FD22 22222222221C011FFFFFFFFFFFFC024000000000000C00AAAAAAAAAAAAB3FD1A8C536F E1A8BC011FFFFFFFFFFFFC024000000000000C0055555555555563FD15FF3DD1BAF98C 011FFFFFFFFFFFFC024000000000000C0000000000000013FD147AE147AE147C011FFF FFFFFFFFFC024000000000000BFF55555555555583FD15FF3DD1BAF98C011FFFFFFFFF FFFC024000000000000BFE555555555555B3FD1A8C536FE1A8BC011FFFFFFFFFFFFC02 4000000000000BCC80000000000003FD2222222222221C011FFFFFFFFFFFFC02400000 00000003FE555555555554F3FD2CC0A9E87C659C011FFFFFFFFFFFFC02400000000000 03FF55555555555523FD3A67EAC2F0734C011FFFFFFFFFFFFC0240000000000003FFFF FFFFFFFFFFC3FD4B17E4B17E4B0C011FFFFFFFFFFFFC02400000000000040055555555 555533FD5ED097B425ECFC011FFFFFFFFFFFFC024000000000000400AAAAAAAAAAAA83 FD759203CAE7591C011FFFFFFFFFFFFC024000000000000400FFFFFFFFFFFFD3FD8F5C 28F5C28F4C011FFFFFFFFFFFFC0240000000000004012AAAAAAAAAAA93FDAC2F0734B7 8F9C011FFFFFFFFFFFFC02400000000000040155555555555543FDCC0A9E87C65A3C01 1FFFFFFFFFFFFC0240000000000004017FFFFFFFFFFFF3FDEEEEEEEEEEEEDC011FFFFF FFFFFFFC024000000000000401AAAAAAAAAAAAA3FE0A6DFC3518A6DC011FFFFFFFFFFF FC024000000000000401D5555555555553FE1EE8DD7CC6BB5C011FFFFFFFFFFFFC0240 0000000000040200000000000003FE34E81B4E81B4EC011FFFFFFFFFFFFC0240000000 0000040215555555555553FE4C6BB5AA49938C011FFFFFFFFFFFFC0240000000000004 022AAAAAAAAAAAA3FE6573AC901E572C011FFFFFFFFFFFFC0240000000000004023FFF FFFFFFFFF3FE7FFFFFFFFFFFFC011FFFFFFFFFFFFC022AAAAAAAAAAABC024000000000 0003FDBA987654320FFC011FFFFFFFFFFFFC022AAAAAAAAAAABC022AAAAAAAAAAAB3FD 97B425ED097B5C011FFFFFFFFFFFFC022AAAAAAAAAAABC0215555555555563FD77D88E 99FAB0DC011FFFFFFFFFFFFC022AAAAAAAAAAABC0200000000000013FD5B05B05B05B0 7C011FFFFFFFFFFFFC022AAAAAAAAAAABC01D5555555555573FD413B8B302A7A3C011F FFFFFFFFFFFC022AAAAAAAAAAABC01AAAAAAAAAAAAC3FD2A7A1F19690E1C011FFFFFFF FFFFFC022AAAAAAAAAAABC0180000000000013FD16C16C16C16C2C011FFFFFFFFFFFFC 022AAAAAAAAAAABC0155555555555563FD0611722833945C011FFFFFFFFFFFFC022AAA AAAAAAAABC012AAAAAAAAAAAB3FCF0D4629B7F0D5C011FFFFFFFFFFFFC022AAAAAAAAA AABC0100000000000003FCDB97530ECA864C011FFFFFFFFFFFFC022AAAAAAAAAAABC00 AAAAAAAAAAAAB3FCCC6BB5AA49938C011FFFFFFFFFFFFC022AAAAAAAAAAABC00555555 55555563FCC3518A6DFC351C011FFFFFFFFFFFFC022AAAAAAAAAAABC00000000000000 13FCC048D159E26AFC011FFFFFFFFFFFFC022AAAAAAAAAAABBFF55555555555583FCC3 518A6DFC352C011FFFFFFFFFFFFC022AAAAAAAAAAABBFE555555555555B3FCCC6BB5AA 49938C011FFFFFFFFFFFFC022AAAAAAAAAAABBCC80000000000003FCDB97530ECA864C 011FFFFFFFFFFFFC022AAAAAAAAAAAB3FE555555555554F3FCF0D4629B7F0D4C011FFF FFFFFFFFFC022AAAAAAAAAAAB3FF55555555555523FD0611722833945C011FFFFFFFFF FFFC022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FD16C16C16C16C1C011FFFFFFFFFFFFC02 2AAAAAAAAAAAB40055555555555533FD2A7A1F19690E0C011FFFFFFFFFFFFC022AAAAA AAAAAAB400AAAAAAAAAAAA83FD413B8B302A7A2C011FFFFFFFFFFFFC022AAAAAAAAAAA B400FFFFFFFFFFFFD3FD5B05B05B05B05C011FFFFFFFFFFFFC022AAAAAAAAAAAB4012A AAAAAAAAAA93FD77D88E99FAB0AC011FFFFFFFFFFFFC022AAAAAAAAAAAB40155555555 555543FD97B425ED097B4C011FFFFFFFFFFFFC022AAAAAAAAAAAB4017FFFFFFFFFFFF3 FDBA987654320FEC011FFFFFFFFFFFFC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FDE085 7FCF746ECC011FFFFFFFFFFFFC022AAAAAAAAAAAB401D5555555555553FE04BDA12F68 4BEC011FFFFFFFFFFFFC022AAAAAAAAAAAB40200000000000003FE1ABCDF0123457C01 1FFFFFFFFFFFFC022AAAAAAAAAAAB40215555555555553FE3240795CEB240C011FFFFF FFFFFFFC022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE4B487042BFE7BC011FFFFFFFFFFF FC022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE65D4C3B2A1907C011FFFFFFFFFFFFC0215 55555555556C0240000000000003FD8ACF13579BE02C011FFFFFFFFFFFFC0215555555 55556C022AAAAAAAAAAAB3FD67EAC2F0734B8C011FFFFFFFFFFFFC021555555555556C 0215555555555563FD480F2B9D64810C011FFFFFFFFFFFFC021555555555556C020000 0000000013FD2B3C4D5E6F80AC011FFFFFFFFFFFFC021555555555556C01D555555555 5573FD11722833944A6C011FFFFFFFFFFFFC021555555555556C01AAAAAAAAAAAAC3FC F5617839A5BC8C011FFFFFFFFFFFFC021555555555556C0180000000000013FCCDF012 345678AC011FFFFFFFFFFFFC021555555555556C0155555555555563FCAC901E573AC9 0C011FFFFFFFFFFFFC021555555555556C012AAAAAAAAAAAB3FC91419CA252ADBC011F FFFFFFFFFFFC021555555555556C0100000000000003FC7C048D159E26AC011FFFFFFF FFFFFC021555555555556C00AAAAAAAAAAAAB3FC6CD8EFB11D33EC011FFFFFFFFFFFFC 021555555555556C0055555555555563FC63BEC474CFD57C011FFFFFFFFFFFFC021555 555555556C0000000000000013FC60B60B60B60B5C011FFFFFFFFFFFFC021555555555 556BFF55555555555583FC63BEC474CFD58C011FFFFFFFFFFFFC021555555555556BFE 555555555555B3FC6CD8EFB11D33EC011FFFFFFFFFFFFC021555555555556BCC800000 00000003FC7C048D159E26AC011FFFFFFFFFFFFC0215555555555563FE555555555554 F3FC91419CA252ADAC011FFFFFFFFFFFFC0215555555555563FF55555555555523FCAC 901E573AC8FC011FFFFFFFFFFFFC0215555555555563FFFFFFFFFFFFFFC3FCCDF01234 56788C011FFFFFFFFFFFFC02155555555555640055555555555533FCF5617839A5BC6C 011FFFFFFFFFFFFC021555555555556400AAAAAAAAAAAA83FD11722833944A4C011FFF FFFFFFFFFC021555555555556400FFFFFFFFFFFFD3FD2B3C4D5E6F808C011FFFFFFFFF FFFC0215555555555564012AAAAAAAAAAA93FD480F2B9D6480EC011FFFFFFFFFFFFC02 155555555555640155555555555543FD67EAC2F0734B7C011FFFFFFFFFFFFC02155555 55555564017FFFFFFFFFFFF3FD8ACF13579BE01C011FFFFFFFFFFFFC02155555555555 6401AAAAAAAAAAAAA3FDB0BC1CD2DE3EFC011FFFFFFFFFFFFC021555555555556401D5 555555555553FDD9B1DF623A67EC011FFFFFFFFFFFFC02155555555555640200000000 000003FE02D82D82D82D8C011FFFFFFFFFFFFC02155555555555640215555555555553 FE1A5BC7DEA00C2C011FFFFFFFFFFFFC0215555555555564022AAAAAAAAAAAA3FE3363 BEC474CFCC011FFFFFFFFFFFFC0215555555555564023FFFFFFFFFFFF3FE4DF0123456 789C011FFFFFFFFFFFFC020000000000001C0240000000000003FD5F92C5F92C5FAC01 1FFFFFFFFFFFFC020000000000001C022AAAAAAAAAAAB3FD3CAE759203CB0C011FFFFF FFFFFFFC020000000000001C0215555555555563FD1CD2DE3EF5008C011FFFFFFFFFFF FC020000000000001C0200000000000013FD0000000000002C011FFFFFFFFFFFFC0200 00000000001C01D5555555555573FCCC6BB5AA4993CC011FFFFFFFFFFFFC0200000000 00001C01AAAAAAAAAAAAC3FC9EE8DD7CC6BB8C011FFFFFFFFFFFFC020000000000001C 0180000000000013FC777777777777AC011FFFFFFFFFFFFC020000000000001C015555 5555555563FC5617839A5BC80C011FFFFFFFFFFFFC020000000000001C012AAAAAAAAA AAB3FC3AC901E573ACBC011FFFFFFFFFFFFC020000000000001C0100000000000003FC 258BF258BF25AC011FFFFFFFFFFFFC020000000000001C00AAAAAAAAAAAAB3FC166054 F43E32EC011FFFFFFFFFFFFC020000000000001C0055555555555563FC0D4629B7F0D4 7C011FFFFFFFFFFFFC020000000000001C0000000000000013FC0A3D70A3D70A5C011F FFFFFFFFFFFC020000000000001BFF55555555555583FC0D4629B7F0D48C011FFFFFFF FFFFFC020000000000001BFE555555555555B3FC166054F43E32EC011FFFFFFFFFFFFC 020000000000001BCC80000000000003FC258BF258BF25AC011FFFFFFFFFFFFC020000 0000000013FE555555555554F3FC3AC901E573ACAC011FFFFFFFFFFFFC020000000000 0013FF55555555555523FC5617839A5BC7FC011FFFFFFFFFFFFC0200000000000013FF FFFFFFFFFFFFC3FC7777777777778C011FFFFFFFFFFFFC020000000000001400555555 55555533FC9EE8DD7CC6BB6C011FFFFFFFFFFFFC020000000000001400AAAAAAAAAAAA 83FCCC6BB5AA49938C011FFFFFFFFFFFFC020000000000001400FFFFFFFFFFFFD3FCFF FFFFFFFFFFFC011FFFFFFFFFFFFC0200000000000014012AAAAAAAAAAA93FD1CD2DE3E F5006C011FFFFFFFFFFFFC02000000000000140155555555555543FD3CAE759203CAEC 011FFFFFFFFFFFFC0200000000000014017FFFFFFFFFFFF3FD5F92C5F92C5F9C011FFF FFFFFFFFFC020000000000001401AAAAAAAAAAAAA3FD857FCF746EBE6C011FFFFFFFFF FFFC020000000000001401D5555555555553FDAE759203CAE76C011FFFFFFFFFFFFC02 000000000000140200000000000003FDDA740DA740DA8C011FFFFFFFFFFFFC02000000 000000140215555555555553FE04BDA12F684BEC011FFFFFFFFFFFFC02000000000000 14022AAAAAAAAAAAA3FE1DC598153D0F8C011FFFFFFFFFFFFC0200000000000014023F FFFFFFFFFFF3FE3851EB851EB85C011FFFFFFFFFFFFC01D555555555557C0240000000 000003FD38E38E38E38E4C011FFFFFFFFFFFFC01D555555555557C022AAAAAAAAAAAB3 FD15FF3DD1BAF9AC011FFFFFFFFFFFFC01D555555555557C0215555555555563FCEC47 4CFD585E3C011FFFFFFFFFFFFC01D555555555557C0200000000000013FCB2A1907F6E 5D8C011FFFFFFFFFFFFC01D555555555557C01D5555555555573FC7F0D4629B7F10C01 1FFFFFFFFFFFFC01D555555555557C01AAAAAAAAAAAAC3FC518A6DFC3518CC011FFFFF FFFFFFFC01D555555555557C0180000000000013FC2A1907F6E5D4EC011FFFFFFFFFFF FC01D555555555557C0155555555555563FC08B91419CA254C011FFFFFFFFFFFFC01D5 55555555557C012AAAAAAAAAAAB3FBDAD524C9C413EC011FFFFFFFFFFFFC01D5555555 55557C0100000000000003FBB05B05B05B05CC011FFFFFFFFFFFFC01D555555555557C 00AAAAAAAAAAAAB3FB9203CAE759205C011FFFFFFFFFFFFC01D555555555557C005555 5555555563FB7FCF746EBE637C011FFFFFFFFFFFFC01D555555555557C000000000000 0013FB79BE02468ACF2C011FFFFFFFFFFFFC01D555555555557BFF55555555555583FB 7FCF746EBE637C011FFFFFFFFFFFFC01D555555555557BFE555555555555B3FB9203CA E759204C011FFFFFFFFFFFFC01D555555555557BCC80000000000003FBB05B05B05B05 BC011FFFFFFFFFFFFC01D5555555555573FE555555555554F3FBDAD524C9C413BC011F FFFFFFFFFFFC01D5555555555573FF55555555555523FC08B91419CA253C011FFFFFFF FFFFFC01D5555555555573FFFFFFFFFFFFFFC3FC2A1907F6E5D4CC011FFFFFFFFFFFFC 01D55555555555740055555555555533FC518A6DFC3518AC011FFFFFFFFFFFFC01D555 555555557400AAAAAAAAAAAA83FC7F0D4629B7F0CC011FFFFFFFFFFFFC01D555555555 557400FFFFFFFFFFFFD3FCB2A1907F6E5D3C011FFFFFFFFFFFFC01D555555555557401 2AAAAAAAAAAA93FCEC474CFD585DFC011FFFFFFFFFFFFC01D555555555557401555555 55555543FD15FF3DD1BAF98C011FFFFFFFFFFFFC01D5555555555574017FFFFFFFFFFF F3FD38E38E38E38E3C011FFFFFFFFFFFFC01D555555555557401AAAAAAAAAAAAA3FD5E D097B425ED0C011FFFFFFFFFFFFC01D555555555557401D5555555555553FD87C65A43 82160C011FFFFFFFFFFFFC01D55555555555740200000000000003FDB3C4D5E6F8092C 011FFFFFFFFFFFFC01D55555555555740215555555555553FDE2CC0A9E87C65C011FFF FFFFFFFFFC01D5555555555574022AAAAAAAAAAAA3FE0A6DFC3518A6DC011FFFFFFFFF FFFC01D5555555555574023FFFFFFFFFFFF3FE24FA4FA4FA4FAC011FFFFFFFFFFFFC01 AAAAAAAAAAAACC0240000000000003FD16C16C16C16C1C011FFFFFFFFFFFFC01AAAAAA AAAAAACC022AAAAAAAAAAAB3FCE7BA375F31AEEC011FFFFFFFFFFFFC01AAAAAAAAAAAA CC0215555555555563FCA80308B91419DC011FFFFFFFFFFFFC01AAAAAAAAAAAACC0200 000000000013FC6E5D4C3B2A192C011FFFFFFFFFFFFC01AAAAAAAAAAAACC01D5555555 555573FC3AC901E573ACAC011FFFFFFFFFFFFC01AAAAAAAAAAAACC01AAAAAAAAAAAAC3 FC0D4629B7F0D46C011FFFFFFFFFFFFC01AAAAAAAAAAAACC0180000000000013FBCBA9 876543210C011FFFFFFFFFFFFC01AAAAAAAAAAAACC0155555555555563FB88E99FAB0B C1BC011FFFFFFFFFFFFC01AAAAAAAAAAAACC012AAAAAAAAAAAB3FB524C9C413B8B1C01 1FFFFFFFFFFFFC01AAAAAAAAAAAACC0100000000000003FB27D27D27D27D0C011FFFFF FFFFFFFC01AAAAAAAAAAAACC00AAAAAAAAAAAAB3FB097B425ED0979C011FFFFFFFFFFF FC01AAAAAAAAAAAACC0055555555555563FAEE8DD7CC6BB56C011FFFFFFFFFFFFC01AA AAAAAAAAAACC0000000000000013FAE26AF37C048CDC011FFFFFFFFFFFFC01AAAAAAAA AAAACBFF55555555555583FAEE8DD7CC6BB55C011FFFFFFFFFFFFC01AAAAAAAAAAAACB FE555555555555B3FB097B425ED0978C011FFFFFFFFFFFFC01AAAAAAAAAAAACBCC8000 0000000003FB27D27D27D27CFC011FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE5555555555 54F3FB524C9C413B8AFC011FFFFFFFFFFFFC01AAAAAAAAAAAAC3FF55555555555523FB 88E99FAB0BC19C011FFFFFFFFFFFFC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FBCBA987 654320CC011FFFFFFFFFFFFC01AAAAAAAAAAAAC40055555555555533FC0D4629B7F0D4 4C011FFFFFFFFFFFFC01AAAAAAAAAAAAC400AAAAAAAAAAAA83FC3AC901E573AC6C011F FFFFFFFFFFFC01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FC6E5D4C3B2A18DC011FFFFFFF FFFFFC01AAAAAAAAAAAAC4012AAAAAAAAAAA93FCA80308B914199C011FFFFFFFFFFFFC 01AAAAAAAAAAAAC40155555555555543FCE7BA375F31AEAC011FFFFFFFFFFFFC01AAAA AAAAAAAAC4017FFFFFFFFFFFF3FD16C16C16C16C0C011FFFFFFFFFFFFC01AAAAAAAAAA AAC401AAAAAAAAAAAAA3FD3CAE759203CADC011FFFFFFFFFFFFC01AAAAAAAAAAAAC401 D5555555555553FD65A438215FF3DC011FFFFFFFFFFFFC01AAAAAAAAAAAAC402000000 00000003FD91A2B3C4D5E70C011FFFFFFFFFFFFC01AAAAAAAAAAAAC402155555555555 53FDC0A9E87C65A42C011FFFFFFFFFFFFC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FDF2 B9D6480F2B8C011FFFFFFFFFFFFC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FE13E93E93 E93E8C011FFFFFFFFFFFFC018000000000001C0240000000000003FCF258BF258BF25C 011FFFFFFFFFFFFC018000000000001C022AAAAAAAAAAAB3FCAC901E573AC92C011FFF FFFFFFFFFC018000000000001C0215555555555563FC6CD8EFB11D340C011FFFFFFFFF FFFC018000000000001C0200000000000013FC3333333333335C011FFFFFFFFFFFFC01 8000000000001C01D5555555555573FBFF3DD1BAF98DAC011FFFFFFFFFFFFC01800000 0000001C01AAAAAAAAAAAAC3FBA438215FF3DD2C011FFFFFFFFFFFFC01800000000000 1C0180000000000013FB5555555555556C011FFFFFFFFFFFFC018000000000001C0155 555555555563FB12956D9B1DF61C011FFFFFFFFFFFFC018000000000001C012AAAAAAA AAAAB3FAB7F0D4629B7EFC011FFFFFFFFFFFFC018000000000001C0100000000000003 FA62FC962FC962CC011FFFFFFFFFFFFC018000000000001C00AAAAAAAAAAAAB3FA264E 209DC597EC011FFFFFFFFFFFFC018000000000001C0055555555555563FA01E573AC90 1E2C011FFFFFFFFFFFFC018000000000001C0000000000000013F9EB851EB851EB0C01 1FFFFFFFFFFFFC018000000000001BFF55555555555583FA01E573AC901E1C011FFFFF FFFFFFFC018000000000001BFE555555555555B3FA264E209DC597DC011FFFFFFFFFFF FC018000000000001BCC80000000000003FA62FC962FC962BC011FFFFFFFFFFFFC0180 000000000013FE555555555554F3FAB7F0D4629B7EBC011FFFFFFFFFFFFC0180000000 000013FF55555555555523FB12956D9B1DF5FC011FFFFFFFFFFFFC0180000000000013 FFFFFFFFFFFFFFC3FB5555555555552C011FFFFFFFFFFFFC0180000000000014005555 5555555533FBA438215FF3DCEC011FFFFFFFFFFFFC018000000000001400AAAAAAAAAA AA83FBFF3DD1BAF98D3C011FFFFFFFFFFFFC018000000000001400FFFFFFFFFFFFD3FC 3333333333330C011FFFFFFFFFFFFC0180000000000014012AAAAAAAAAAA93FC6CD8EF B11D33CC011FFFFFFFFFFFFC01800000000000140155555555555543FCAC901E573AC8 DC011FFFFFFFFFFFFC0180000000000014017FFFFFFFFFFFF3FCF258BF258BF23C011F FFFFFFFFFFFC018000000000001401AAAAAAAAAAAAA3FD1F19690E0857FC011FFFFFFF FFFFFC018000000000001401D5555555555553FD480F2B9D6480EC011FFFFFFFFFFFFC 01800000000000140200000000000003FD740DA740DA740C011FFFFFFFFFFFFC018000 00000000140215555555555553FDA314DBF86A314C011FFFFFFFFFFFFC018000000000 0014022AAAAAAAAAAAA3FDD524C9C413B89C011FFFFFFFFFFFFC018000000000001402 3FFFFFFFFFFFF3FE051EB851EB851C011FFFFFFFFFFFFC015555555555556C02400000 00000003FCC048D159E26ADC011FFFFFFFFFFFFC015555555555556C022AAAAAAAAAAA B3FC7A80308B9141AC011FFFFFFFFFFFFC015555555555556C0215555555555563FC3A C901E573AC9C011FFFFFFFFFFFFC015555555555556C0200000000000013FC01234567 89ABEC011FFFFFFFFFFFFC015555555555556C01D5555555555573FB9B1DF623A67EBC 011FFFFFFFFFFFFC015555555555556C01AAAAAAAAAAAAC3FB401845C8A0CE3C011FFF FFFFFFFFFC015555555555556C0180000000000013FAE26AF37C048CFC011FFFFFFFFF FFFC015555555555556C0155555555555563FA5CEB240795CE5C011FFFFFFFFFFFFC01 5555555555556C012AAAAAAAAAAAB3F9DF623A67EAC22C011FFFFFFFFFFFFC01555555 5555556C0100000000000003F93579BE024689EC011FFFFFFFFFFFFC01555555555555 6C00AAAAAAAAAAAAB3F87839A5BC7DE81C011FFFFFFFFFFFFC015555555555556C0055 555555555563F7CD2DE3EF50020C011FFFFFFFFFFFFC015555555555556C0000000000 000013F76C16C16C16BD6C011FFFFFFFFFFFFC015555555555556BFF55555555555583 F7CD2DE3EF5001EC011FFFFFFFFFFFFC015555555555556BFE555555555555B3F87839 A5BC7DE7DC011FFFFFFFFFFFFC015555555555556BCC80000000000003F93579BE0246 89AC011FFFFFFFFFFFFC0155555555555563FE555555555554F3F9DF623A67EAC1CC01 1FFFFFFFFFFFFC0155555555555563FF55555555555523FA5CEB240795CE1C011FFFFF FFFFFFFC0155555555555563FFFFFFFFFFFFFFC3FAE26AF37C048C6C011FFFFFFFFFFF FC01555555555555640055555555555533FB401845C8A0CDFC011FFFFFFFFFFFFC0155 55555555556400AAAAAAAAAAAA83FB9B1DF623A67E5C011FFFFFFFFFFFFC0155555555 55556400FFFFFFFFFFFFD3FC0123456789AB9C011FFFFFFFFFFFFC0155555555555564 012AAAAAAAAAAA93FC3AC901E573AC5C011FFFFFFFFFFFFC0155555555555564015555 5555555543FC7A80308B91416C011FFFFFFFFFFFFC0155555555555564017FFFFFFFFF FFF3FCC048D159E26ACC011FFFFFFFFFFFFC015555555555556401AAAAAAAAAAAAA3FD 0611722833943C011FFFFFFFFFFFFC015555555555556401D5555555555553FD2F0734 B78FBD3C011FFFFFFFFFFFFC01555555555555640200000000000003FD5B05B05B05B0 5C011FFFFFFFFFFFFC01555555555555640215555555555553FD8A0CE512956D8C011F FFFFFFFFFFFC0155555555555564022AAAAAAAAAAAA3FDBC1CD2DE3EF4DC011FFFFFFF FFFFFC0155555555555564023FFFFFFFFFFFF3FDF13579BE02466C011FFFFFFFFFFFFC 012AAAAAAAAAAABC0240000000000003FC97530ECA8641EC011FFFFFFFFFFFFC012AAA AAAAAAAABC022AAAAAAAAAAAB3FC518A6DFC3518AC011FFFFFFFFFFFFC012AAAAAAAAA AABC0215555555555563FC11D33F5617839C011FFFFFFFFFFFFC012AAAAAAAAAAABC02 00000000000013FBB05B05B05B05CC011FFFFFFFFFFFFC012AAAAAAAAAAABC01D55555 55555573FB49327104EE2CCC011FFFFFFFFFFFFC012AAAAAAAAAAABC01AAAAAAAAAAAA C3FADC598153D0F89C011FFFFFFFFFFFFC012AAAAAAAAAAABC0180000000000013FA3E 93E93E93E91C011FFFFFFFFFFFFC012AAAAAAAAAAABC0155555555555563F972283394 4A54CC011FFFFFFFFFFFFC012AAAAAAAAAAABC012AAAAAAAAAAAB3F82F684BDA12F50C 011FFFFFFFFFFFFC012AAAAAAAAAAABC010000000000000BF523456789ABE00C011FFF FFFFFFFFFC012AAAAAAAAAAABC00AAAAAAAAAAAABBF81722833944A77C011FFFFFFFFF FFFC012AAAAAAAAAAABC005555555555556BF8A8C536FE1A8E6C011FFFFFFFFFFFFC01 2AAAAAAAAAAABC000000000000001BF8D950C83FB730EC011FFFFFFFFFFFFC012AAAAA AAAAAABBFF5555555555558BF8A8C536FE1A8EAC011FFFFFFFFFFFFC012AAAAAAAAAAA BBFE555555555555BBF81722833944A7CC011FFFFFFFFFFFFC012AAAAAAAAAAABBCC80 00000000000BF523456789ABE1CC011FFFFFFFFFFFFC012AAAAAAAAAAAB3FE55555555 5554F3F82F684BDA12F3FC011FFFFFFFFFFFFC012AAAAAAAAAAAB3FF55555555555523 F9722833944A546C011FFFFFFFFFFFFC012AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FA3E93 E93E93E88C011FFFFFFFFFFFFC012AAAAAAAAAAAB40055555555555533FADC598153D0 F80C011FFFFFFFFFFFFC012AAAAAAAAAAAB400AAAAAAAAAAAA83FB49327104EE2C5C01 1FFFFFFFFFFFFC012AAAAAAAAAAAB400FFFFFFFFFFFFD3FBB05B05B05B053C011FFFFF FFFFFFFC012AAAAAAAAAAAB4012AAAAAAAAAAA93FC11D33F5617835C011FFFFFFFFFFF FC012AAAAAAAAAAAB40155555555555543FC518A6DFC35186C011FFFFFFFFFFFFC012A AAAAAAAAAAB4017FFFFFFFFFFFF3FC97530ECA8641CC011FFFFFFFFFFFFC012AAAAAAA AAAAB401AAAAAAAAAAAAA3FCE32D21C10AFF7C011FFFFFFFFFFFFC012AAAAAAAAAAAB4 01D5555555555553FD1A8C536FE1A8BC011FFFFFFFFFFFFC012AAAAAAAAAAAB4020000 0000000003FD468ACF13579BDC011FFFFFFFFFFFFC012AAAAAAAAAAAB4021555555555 5553FD759203CAE7591C011FFFFFFFFFFFFC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD A7A1F19690E06C011FFFFFFFFFFFFC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FDDCBA98 765431FC011FFFFFFFFFFFFC010000000000000C0240000000000003FC777777777777 5C011FFFFFFFFFFFFC010000000000000C022AAAAAAAAAAAB3FC31AED6A9264E2C011F FFFFFFFFFFFC010000000000000C0215555555555563FBE3EF500611720C011FFFFFFF FFFFFC010000000000000C0200000000000013FB70A3D70A3D70BC011FFFFFFFFFFFFC 010000000000000C01D5555555555573FB097B425ED097AC011FFFFFFFFFFFFC010000 000000000C01AAAAAAAAAAAAC3FA5CEB240795CE7C011FFFFFFFFFFFFC010000000000 000C0180000000000013F97E4B17E4B17DDC011FFFFFFFFFFFFC010000000000000C01 55555555555563F7CD2DE3EF50022C011FFFFFFFFFFFFC010000000000000C012AAAAA AAAAAABBF79CA252ADB3680C011FFFFFFFFFFFFC010000000000000C01000000000000 0BF91111111111122C011FFFFFFFFFFFFC010000000000000C00AAAAAAAAAAAABBF98A 6DFC3518A7FC011FFFFFFFFFFFFC010000000000000C005555555555556BF9D33F5617 839B9C011FFFFFFFFFFFFC010000000000000C000000000000001BF9EB851EB851ECBC 011FFFFFFFFFFFFC010000000000000BFF5555555555558BF9D33F5617839BAC011FFF FFFFFFFFFC010000000000000BFE555555555555BBF98A6DFC3518A83C011FFFFFFFFF FFFC010000000000000BCC8000000000000BF91111111111127C011FFFFFFFFFFFFC01 00000000000003FE555555555554FBF79CA252ADB3695C011FFFFFFFFFFFFC01000000 00000003FF55555555555523F7CD2DE3EF50005C011FFFFFFFFFFFFC01000000000000 03FFFFFFFFFFFFFFC3F97E4B17E4B17CCC011FFFFFFFFFFFFC01000000000000040055 555555555533FA5CEB240795CDEC011FFFFFFFFFFFFC010000000000000400AAAAAAAA AAAA83FB097B425ED0974C011FFFFFFFFFFFFC010000000000000400FFFFFFFFFFFFD3 FB70A3D70A3D702C011FFFFFFFFFFFFC0100000000000004012AAAAAAAAAAA93FBE3EF 50061171AC011FFFFFFFFFFFFC01000000000000040155555555555543FC31AED6A926 4DEC011FFFFFFFFFFFFC0100000000000004017FFFFFFFFFFFF3FC7777777777773C01 1FFFFFFFFFFFFC010000000000000401AAAAAAAAAAAAA3FCC3518A6DFC34FC011FFFFF FFFFFFFC010000000000000401D5555555555553FD0A9E87C65A437C011FFFFFFFFFFF FC01000000000000040200000000000003FD369D0369D0369C011FFFFFFFFFFFFC0100 0000000000040215555555555553FD65A438215FF3CC011FFFFFFFFFFFFC0100000000 000004022AAAAAAAAAAAA3FD97B425ED097B2C011FFFFFFFFFFFFC0100000000000004 023FFFFFFFFFFFF3FDCCCCCCCCCCCCAC011FFFFFFFFFFFFC00AAAAAAAAAAAABC024000 0000000003FC60B60B60B60B3C011FFFFFFFFFFFFC00AAAAAAAAAAAABC022AAAAAAAAA AAB3FC1AED6A9264E20C011FFFFFFFFFFFFC00AAAAAAAAAAAABC0215555555555563FB B66C77D88E99EC011FFFFFFFFFFFFC00AAAAAAAAAAAABC0200000000000013FB4320FE DCBA989C011FFFFFFFFFFFFC00AAAAAAAAAAAABC01D5555555555573FAB7F0D4629B7F 1C011FFFFFFFFFFFFC00AAAAAAAAAAAABC01AAAAAAAAAAAAC3FA01E573AC901DFC011F FFFFFFFFFFFC00AAAAAAAAAAAABC0180000000000013F8907F6E5D4C3A2C011FFFFFFF FFFFFC00AAAAAAAAAAAABC015555555555556BF70AFF9EE8DD80EC011FFFFFFFFFFFFC 00AAAAAAAAAAAABC012AAAAAAAAAAABBF91D33F561783ACC011FFFFFFFFFFFFC00AAAA AAAAAAAABC010000000000000BF9C71C71C71C732C011FFFFFFFFFFFFC00AAAAAAAAAA AABC00AAAAAAAAAAAABBFA203CAE7592047C011FFFFFFFFFFFFC00AAAAAAAAAAAABC00 5555555555556BFA44A55B66C77E2C011FFFFFFFFFFFFC00AAAAAAAAAAAABC00000000 0000001BFA50C83FB72EA6CC011FFFFFFFFFFFFC00AAAAAAAAAAAABBFF555555555555 8BFA44A55B66C77E3C011FFFFFFFFFFFFC00AAAAAAAAAAAABBFE555555555555BBFA20 3CAE7592048C011FFFFFFFFFFFFC00AAAAAAAAAAAABBCC8000000000000BF9C71C71C7 1C734C011FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE555555555554FBF91D33F561783B2C 011FFFFFFFFFFFFC00AAAAAAAAAAAAB3FF5555555555552BF70AFF9EE8DD82FC011FFF FFFFFFFFFC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFC3F8907F6E5D4C37DC011FFFFFFFFF FFFC00AAAAAAAAAAAAB40055555555555533FA01E573AC901D7C011FFFFFFFFFFFFC00 AAAAAAAAAAAAB400AAAAAAAAAAAA83FAB7F0D4629B7E2C011FFFFFFFFFFFFC00AAAAAA AAAAAAB400FFFFFFFFFFFFD3FB4320FEDCBA97FC011FFFFFFFFFFFFC00AAAAAAAAAAAA B4012AAAAAAAAAAA93FBB66C77D88E996C011FFFFFFFFFFFFC00AAAAAAAAAAAAB40155 555555555543FC1AED6A9264E1CC011FFFFFFFFFFFFC00AAAAAAAAAAAAB4017FFFFFFF FFFFF3FC60B60B60B60B2C011FFFFFFFFFFFFC00AAAAAAAAAAAAB401AAAAAAAAAAAAA3 FCAC901E573AC8DC011FFFFFFFFFFFFC00AAAAAAAAAAAAB401D5555555555553FCFE7B A375F31ACC011FFFFFFFFFFFFC00AAAAAAAAAAAAB40200000000000003FD2B3C4D5E6F 808C011FFFFFFFFFFFFC00AAAAAAAAAAAAB40215555555555553FD5A438215FF3DBC01 1FFFFFFFFFFFFC00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD8C536FE1A8C51C011FFFFF FFFFFFFC00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FDC16C16C16C169C011FFFFFFFFFFF FC005555555555556C0240000000000003FC530ECA8641FD9C011FFFFFFFFFFFFC0055 55555555556C022AAAAAAAAAAAB3FC0D4629B7F0D46C011FFFFFFFFFFFFC0055555555 55556C0215555555555563FB9B1DF623A67E8C011FFFFFFFFFFFFC005555555555556C 0200000000000013FB27D27D27D27D3C011FFFFFFFFFFFFC005555555555556C01D555 5555555573FA8153D0F8CB485C011FFFFFFFFFFFFC005555555555556C01AAAAAAAAAA AAC3F99690E0857FCEDC011FFFFFFFFFFFFC005555555555556C0180000000000013F7 6C16C16C16BF5C011FFFFFFFFFFFFC005555555555556C015555555555556BF85FF3DD 1BAF9AFC011FFFFFFFFFFFFC005555555555556C012AAAAAAAAAAABBF98A6DFC3518A8 0C011FFFFFFFFFFFFC005555555555556C010000000000000BFA1A2B3C4D5E701C011F FFFFFFFFFFFC005555555555556C00AAAAAAAAAAAABBFA56D9B1DF623B1C011FFFFFFF FFFFFC005555555555556C005555555555556BFA7B425ED097B4CC011FFFFFFFFFFFFC 005555555555556C000000000000001BFA87654320FEDD5C011FFFFFFFFFFFFC005555 555555556BFF5555555555558BFA7B425ED097B4DC011FFFFFFFFFFFFC005555555555 556BFE555555555555BBFA56D9B1DF623B1C011FFFFFFFFFFFFC005555555555556BCC 8000000000000BFA1A2B3C4D5E703C011FFFFFFFFFFFFC0055555555555563FE555555 555554FBF98A6DFC3518A85C011FFFFFFFFFFFFC0055555555555563FF555555555555 2BF85FF3DD1BAF9BFC011FFFFFFFFFFFFC0055555555555563FFFFFFFFFFFFFFC3F76C 16C16C16BAEC011FFFFFFFFFFFFC00555555555555640055555555555533F99690E085 7FCDBC011FFFFFFFFFFFFC005555555555556400AAAAAAAAAAAA83FA8153D0F8CB478C 011FFFFFFFFFFFFC005555555555556400FFFFFFFFFFFFD3FB27D27D27D27CAC011FFF FFFFFFFFFC0055555555555564012AAAAAAAAAAA93FB9B1DF623A67E2C011FFFFFFFFF FFFC00555555555555640155555555555543FC0D4629B7F0D42C011FFFFFFFFFFFFC00 55555555555564017FFFFFFFFFFFF3FC530ECA8641FD7C011FFFFFFFFFFFFC00555555 5555556401AAAAAAAAAAAAA3FC9EE8DD7CC6BB2C011FFFFFFFFFFFFC00555555555555 6401D5555555555553FCF0D4629B7F0D2C011FFFFFFFFFFFFC00555555555555640200 000000000003FD2468ACF13579BC011FFFFFFFFFFFFC00555555555555640215555555 555553FD536FE1A8C536EC011FFFFFFFFFFFFC0055555555555564022AAAAAAAAAAAA3 FD857FCF746EBE4C011FFFFFFFFFFFFC0055555555555564023FFFFFFFFFFFF3FDBA98 7654320FCC011FFFFFFFFFFFFC000000000000001C0240000000000003FC4E81B4E81B 4E6C011FFFFFFFFFFFFC000000000000001C022AAAAAAAAAAAB3FC08B91419CA252C01 1FFFFFFFFFFFFC000000000000001C0215555555555563FB9203CAE759202C011FFFFF FFFFFFFC000000000000001C0200000000000013FB1EB851EB851EDC011FFFFFFFFFFF FC000000000000001C01D5555555555573FA6F1F7A80308B9C011FFFFFFFFFFFFC0000 00000000001C01AAAAAAAAAAAAC3F9722833944A551C011FFFFFFFFFFFFC0000000000 00001C0180000000000013F6B4E81B4E81B09C011FFFFFFFFFFFFC000000000000001C 015555555555556BF8A8C536FE1A8E7C011FFFFFFFFFFFFC000000000000001C012AAA AAAAAAAABBF9AED6A9264E21CC011FFFFFFFFFFFFC000000000000001C010000000000 000BFA2C5F92C5F92D1C011FFFFFFFFFFFFC000000000000001C00AAAAAAAAAAAABBFA 690E0857FCF7FC011FFFFFFFFFFFFC000000000000001C005555555555556BFA8D76B5 493271AC011FFFFFFFFFFFFC000000000000001C000000000000001BFA99999999999A 3C011FFFFFFFFFFFFC000000000000001BFF5555555555558BFA8D76B5493271BC011F FFFFFFFFFFFC000000000000001BFE555555555555BBFA690E0857FCF7FC011FFFFFFF FFFFFC000000000000001BCC8000000000000BFA2C5F92C5F92D1C011FFFFFFFFFFFFC 0000000000000013FE555555555554FBF9AED6A9264E221C011FFFFFFFFFFFFC000000 0000000013FF5555555555552BF8A8C536FE1A8F7C011FFFFFFFFFFFFC000000000000 0013FFFFFFFFFFFFFFC3F6B4E81B4E81A7DC011FFFFFFFFFFFFC000000000000001400 55555555555533F9722833944A53FC011FFFFFFFFFFFFC000000000000001400AAAAAA AAAAAA83FA6F1F7A80308AAC011FFFFFFFFFFFFC000000000000001400FFFFFFFFFFFF D3FB1EB851EB851E3C011FFFFFFFFFFFFC0000000000000014012AAAAAAAAAAA93FB92 03CAE7591FBC011FFFFFFFFFFFFC00000000000000140155555555555543FC08B91419 CA24EC011FFFFFFFFFFFFC0000000000000014017FFFFFFFFFFFF3FC4E81B4E81B4E4C 011FFFFFFFFFFFFC000000000000001401AAAAAAAAAAAAA3FC9A5BC7DEA00BFC011FFF FFFFFFFFFC000000000000001401D5555555555553FCEC474CFD585DEC011FFFFFFFFF FFFC00000000000000140200000000000003FD2222222222221C011FFFFFFFFFFFFC00 000000000000140215555555555553FD512956D9B1DF4C011FFFFFFFFFFFFC00000000 00000014022AAAAAAAAAAAA3FD833944A55B66AC011FFFFFFFFFFFFC00000000000000 14023FFFFFFFFFFFF3FDB851EB851EB82C011FFFFFFFFFFFFBFF5555555555558C0240 000000000003FC530ECA8641FD9C011FFFFFFFFFFFFBFF5555555555558C022AAAAAAA AAAAB3FC0D4629B7F0D46C011FFFFFFFFFFFFBFF5555555555558C0215555555555563 FB9B1DF623A67E8C011FFFFFFFFFFFFBFF5555555555558C0200000000000013FB27D2 7D27D27D3C011FFFFFFFFFFFFBFF5555555555558C01D5555555555573FA8153D0F8CB 485C011FFFFFFFFFFFFBFF5555555555558C01AAAAAAAAAAAAC3F99690E0857FCE9C01 1FFFFFFFFFFFFBFF5555555555558C0180000000000013F76C16C16C16BE5C011FFFFF FFFFFFFBFF5555555555558C015555555555556BF85FF3DD1BAF9AFC011FFFFFFFFFFF FBFF5555555555558C012AAAAAAAAAAABBF98A6DFC3518A80C011FFFFFFFFFFFFBFF55 55555555558C010000000000000BFA1A2B3C4D5E703C011FFFFFFFFFFFFBFF55555555 55558C00AAAAAAAAAAAABBFA56D9B1DF623B1C011FFFFFFFFFFFFBFF5555555555558C 005555555555556BFA7B425ED097B4CC011FFFFFFFFFFFFBFF5555555555558C000000 000000001BFA87654320FEDD6C011FFFFFFFFFFFFBFF5555555555558BFF5555555555 558BFA7B425ED097B4EC011FFFFFFFFFFFFBFF5555555555558BFE555555555555BBFA 56D9B1DF623B2C011FFFFFFFFFFFFBFF5555555555558BCC8000000000000BFA1A2B3C 4D5E704C011FFFFFFFFFFFFBFF55555555555583FE555555555554FBF98A6DFC3518A8 7C011FFFFFFFFFFFFBFF55555555555583FF5555555555552BF85FF3DD1BAF9C3C011F FFFFFFFFFFFBFF55555555555583FFFFFFFFFFFFFFC3F76C16C16C16BA6C011FFFFFFF FFFFFBFF555555555555840055555555555533F99690E0857FCD9C011FFFFFFFFFFFFB FF5555555555558400AAAAAAAAAAAA83FA8153D0F8CB477C011FFFFFFFFFFFFBFF5555 555555558400FFFFFFFFFFFFD3FB27D27D27D27CAC011FFFFFFFFFFFFBFF5555555555 5584012AAAAAAAAAAA93FB9B1DF623A67E1C011FFFFFFFFFFFFBFF5555555555558401 55555555555543FC0D4629B7F0D42C011FFFFFFFFFFFFBFF55555555555584017FFFFF FFFFFFF3FC530ECA8641FD7C011FFFFFFFFFFFFBFF5555555555558401AAAAAAAAAAAA A3FC9EE8DD7CC6BB2C011FFFFFFFFFFFFBFF5555555555558401D5555555555553FCF0 D4629B7F0D1C011FFFFFFFFFFFFBFF555555555555840200000000000003FD2468ACF1 3579BC011FFFFFFFFFFFFBFF555555555555840215555555555553FD536FE1A8C536EC 011FFFFFFFFFFFFBFF55555555555584022AAAAAAAAAAAA3FD857FCF746EBE3C011FFF FFFFFFFFFBFF55555555555584023FFFFFFFFFFFF3FDBA987654320FCC011FFFFFFFFF FFFBFE555555555555BC0240000000000003FC60B60B60B60B3C011FFFFFFFFFFFFBFE 555555555555BC022AAAAAAAAAAAB3FC1AED6A9264E20C011FFFFFFFFFFFFBFE555555 555555BC0215555555555563FBB66C77D88E99CC011FFFFFFFFFFFFBFE555555555555 BC0200000000000013FB4320FEDCBA987C011FFFFFFFFFFFFBFE555555555555BC01D5 555555555573FAB7F0D4629B7EDC011FFFFFFFFFFFFBFE555555555555BC01AAAAAAAA AAAAC3FA01E573AC901DFC011FFFFFFFFFFFFBFE555555555555BC0180000000000013 F8907F6E5D4C39AC011FFFFFFFFFFFFBFE555555555555BC015555555555556BF70AFF 9EE8DD81EC011FFFFFFFFFFFFBFE555555555555BC012AAAAAAAAAAABBF91D33F56178 3B0C011FFFFFFFFFFFFBFE555555555555BC010000000000000BF9C71C71C71C732C01 1FFFFFFFFFFFFBFE555555555555BC00AAAAAAAAAAAABBFA203CAE7592049C011FFFFF FFFFFFFBFE555555555555BC005555555555556BFA44A55B66C77E4C011FFFFFFFFFFF FBFE555555555555BC000000000000001BFA50C83FB72EA6DC011FFFFFFFFFFFFBFE55 5555555555BBFF5555555555558BFA44A55B66C77E5C011FFFFFFFFFFFFBFE55555555 5555BBFE555555555555BBFA203CAE7592049C011FFFFFFFFFFFFBFE555555555555BB CC8000000000000BF9C71C71C71C737C011FFFFFFFFFFFFBFE555555555555B3FE5555 55555554FBF91D33F561783B5C011FFFFFFFFFFFFBFE555555555555B3FF5555555555 552BF70AFF9EE8DD83BC011FFFFFFFFFFFFBFE555555555555B3FFFFFFFFFFFFFFC3F8 907F6E5D4C377C011FFFFFFFFFFFFBFE555555555555B40055555555555533FA01E573 AC901D6C011FFFFFFFFFFFFBFE555555555555B400AAAAAAAAAAAA83FAB7F0D4629B7E 0C011FFFFFFFFFFFFBFE555555555555B400FFFFFFFFFFFFD3FB4320FEDCBA97EC011F FFFFFFFFFFFBFE555555555555B4012AAAAAAAAAAA93FBB66C77D88E996C011FFFFFFF FFFFFBFE555555555555B40155555555555543FC1AED6A9264E1CC011FFFFFFFFFFFFB FE555555555555B4017FFFFFFFFFFFF3FC60B60B60B60B1C011FFFFFFFFFFFFBFE5555 55555555B401AAAAAAAAAAAAA3FCAC901E573AC8CC011FFFFFFFFFFFFBFE5555555555 55B401D5555555555553FCFE7BA375F31ACC011FFFFFFFFFFFFBFE555555555555B402 00000000000003FD2B3C4D5E6F808C011FFFFFFFFFFFFBFE555555555555B402155555 55555553FD5A438215FF3DBC011FFFFFFFFFFFFBFE555555555555B4022AAAAAAAAAAA A3FD8C536FE1A8C51C011FFFFFFFFFFFFBFE555555555555B4023FFFFFFFFFFFF3FDC1 6C16C16C169C011FFFFFFFFFFFFBCC8000000000000C0240000000000003FC77777777 77774C011FFFFFFFFFFFFBCC8000000000000C022AAAAAAAAAAAB3FC31AED6A9264E1C 011FFFFFFFFFFFFBCC8000000000000C0215555555555563FBE3EF500611720C011FFF FFFFFFFFFBCC8000000000000C0200000000000013FB70A3D70A3D70AC011FFFFFFFFF FFFBCC8000000000000C01D5555555555573FB097B425ED0979C011FFFFFFFFFFFFBCC 8000000000000C01AAAAAAAAAAAAC3FA5CEB240795CE3C011FFFFFFFFFFFFBCC800000 0000000C0180000000000013F97E4B17E4B17D5C011FFFFFFFFFFFFBCC800000000000 0C0155555555555563F7CD2DE3EF50012C011FFFFFFFFFFFFBCC8000000000000C012A AAAAAAAAAABBF79CA252ADB3690C011FFFFFFFFFFFFBCC8000000000000C0100000000 00000BF9111111111112AC011FFFFFFFFFFFFBCC8000000000000C00AAAAAAAAAAAABB F98A6DFC3518A85C011FFFFFFFFFFFFBCC8000000000000C005555555555556BF9D33F 5617839BFC011FFFFFFFFFFFFBCC8000000000000C000000000000001BF9EB851EB851 ED1C011FFFFFFFFFFFFBCC8000000000000BFF5555555555558BF9D33F5617839C0C01 1FFFFFFFFFFFFBCC8000000000000BFE555555555555BBF98A6DFC3518A89C011FFFFF FFFFFFFBCC8000000000000BCC8000000000000BF9111111111112DC011FFFFFFFFFFF FBCC80000000000003FE555555555554FBF79CA252ADB36ADC011FFFFFFFFFFFFBCC80 000000000003FF55555555555523F7CD2DE3EF4FFEDC011FFFFFFFFFFFFBCC80000000 000003FFFFFFFFFFFFFFC3F97E4B17E4B17C6C011FFFFFFFFFFFFBCC80000000000004 0055555555555533FA5CEB240795CDBC011FFFFFFFFFFFFBCC8000000000000400AAAA AAAAAAAA83FB097B425ED0973C011FFFFFFFFFFFFBCC8000000000000400FFFFFFFFFF FFD3FB70A3D70A3D700C011FFFFFFFFFFFFBCC80000000000004012AAAAAAAAAAA93FB E3EF500611718C011FFFFFFFFFFFFBCC800000000000040155555555555543FC31AED6 A9264DDC011FFFFFFFFFFFFBCC80000000000004017FFFFFFFFFFFF3FC777777777777 3C011FFFFFFFFFFFFBCC8000000000000401AAAAAAAAAAAAA3FCC3518A6DFC34EC011F FFFFFFFFFFFBCC8000000000000401D5555555555553FD0A9E87C65A436C011FFFFFFF FFFFFBCC800000000000040200000000000003FD369D0369D0368C011FFFFFFFFFFFFB CC800000000000040215555555555553FD65A438215FF3CC011FFFFFFFFFFFFBCC8000 0000000004022AAAAAAAAAAAA3FD97B425ED097B1C011FFFFFFFFFFFFBCC8000000000 0004023FFFFFFFFFFFF3FDCCCCCCCCCCCCAC011FFFFFFFFFFFF3FE555555555554FC02 40000000000003FC97530ECA8641DC011FFFFFFFFFFFF3FE555555555554FC022AAAAA AAAAAAB3FC518A6DFC35189C011FFFFFFFFFFFF3FE555555555554FC02155555555555 63FC11D33F5617838C011FFFFFFFFFFFF3FE555555555554FC0200000000000013FBB0 5B05B05B05AC011FFFFFFFFFFFF3FE555555555554FC01D5555555555573FB49327104 EE2C9C011FFFFFFFFFFFF3FE555555555554FC01AAAAAAAAAAAAC3FADC598153D0F85C 011FFFFFFFFFFFF3FE555555555554FC0180000000000013FA3E93E93E93E8DC011FFF FFFFFFFFF3FE555555555554FC0155555555555563F9722833944A544C011FFFFFFFFF FFF3FE555555555554FC012AAAAAAAAAAAB3F82F684BDA12F38C011FFFFFFFFFFFF3FE 555555555554FC010000000000000BF523456789ABE80C011FFFFFFFFFFFF3FE555555 555554FC00AAAAAAAAAAAABBF81722833944A8BC011FFFFFFFFFFFF3FE555555555554 FC005555555555556BF8A8C536FE1A8FAC011FFFFFFFFFFFF3FE555555555554FC0000 00000000001BF8D950C83FB7320C011FFFFFFFFFFFF3FE555555555554FBFF55555555 55558BF8A8C536FE1A8FCC011FFFFFFFFFFFF3FE555555555554FBFE555555555555BB F81722833944A8EC011FFFFFFFFFFFF3FE555555555554FBCC8000000000000BF52345 6789ABEACC011FFFFFFFFFFFF3FE555555555554F3FE555555555554F3F82F684BDA12 F2DC011FFFFFFFFFFFF3FE555555555554F3FF55555555555523F9722833944A53DC01 1FFFFFFFFFFFF3FE555555555554F3FFFFFFFFFFFFFFC3FA3E93E93E93E84C011FFFFF FFFFFFF3FE555555555554F40055555555555533FADC598153D0F7BC011FFFFFFFFFFF F3FE555555555554F400AAAAAAAAAAAA83FB49327104EE2C3C011FFFFFFFFFFFF3FE55 5555555554F400FFFFFFFFFFFFD3FBB05B05B05B051C011FFFFFFFFFFFF3FE55555555 5554F4012AAAAAAAAAAA93FC11D33F5617834C011FFFFFFFFFFFF3FE555555555554F4 0155555555555543FC518A6DFC35185C011FFFFFFFFFFFF3FE555555555554F4017FFF FFFFFFFFF3FC97530ECA8641BC011FFFFFFFFFFFF3FE555555555554F401AAAAAAAAAA AAA3FCE32D21C10AFF6C011FFFFFFFFFFFF3FE555555555554F401D5555555555553FD 1A8C536FE1A8BC011FFFFFFFFFFFF3FE555555555554F40200000000000003FD468ACF 13579BDC011FFFFFFFFFFFF3FE555555555554F40215555555555553FD759203CAE759 0C011FFFFFFFFFFFF3FE555555555554F4022AAAAAAAAAAAA3FDA7A1F19690E05C011F FFFFFFFFFFF3FE555555555554F4023FFFFFFFFFFFF3FDDCBA98765431EC011FFFFFFF FFFFF3FF5555555555552C0240000000000003FCC048D159E26ACC011FFFFFFFFFFFF3 FF5555555555552C022AAAAAAAAAAAB3FC7A80308B91419C011FFFFFFFFFFFF3FF5555 555555552C0215555555555563FC3AC901E573AC7C011FFFFFFFFFFFF3FF5555555555 552C0200000000000013FC0123456789ABCC011FFFFFFFFFFFF3FF5555555555552C01 D5555555555573FB9B1DF623A67E8C011FFFFFFFFFFFF3FF5555555555552C01AAAAAA AAAAAAC3FB401845C8A0CE0C011FFFFFFFFFFFF3FF5555555555552C01800000000000 13FAE26AF37C048C9C011FFFFFFFFFFFF3FF5555555555552C0155555555555563FA5C EB240795CDFC011FFFFFFFFFFFF3FF5555555555552C012AAAAAAAAAAAB3F9DF623A67 EAC16C011FFFFFFFFFFFF3FF5555555555552C0100000000000003F93579BE0246892C 011FFFFFFFFFFFF3FF5555555555552C00AAAAAAAAAAAAB3F87839A5BC7DE69C011FFF FFFFFFFFF3FF5555555555552C0055555555555563F7CD2DE3EF4FFF0C011FFFFFFFFF FFF3FF5555555555552C0000000000000013F76C16C16C16BA6C011FFFFFFFFFFFF3FF 5555555555552BFF55555555555583F7CD2DE3EF4FFEEC011FFFFFFFFFFFF3FF555555 5555552BFE555555555555B3F87839A5BC7DE65C011FFFFFFFFFFFF3FF555555555555 2BCC80000000000003F93579BE024688EC011FFFFFFFFFFFF3FF55555555555523FE55 5555555554F3F9DF623A67EAC10C011FFFFFFFFFFFF3FF55555555555523FF55555555 555523FA5CEB240795CDBC011FFFFFFFFFFFF3FF55555555555523FFFFFFFFFFFFFFC3 FAE26AF37C048C0C011FFFFFFFFFFFF3FF555555555555240055555555555533FB4018 45C8A0CDCC011FFFFFFFFFFFF3FF5555555555552400AAAAAAAAAAAA83FB9B1DF623A6 7E2C011FFFFFFFFFFFF3FF5555555555552400FFFFFFFFFFFFD3FC0123456789AB7C01 1FFFFFFFFFFFF3FF55555555555524012AAAAAAAAAAA93FC3AC901E573AC3C011FFFFF FFFFFFF3FF555555555555240155555555555543FC7A80308B91414C011FFFFFFFFFFF F3FF55555555555524017FFFFFFFFFFFF3FCC048D159E26AAC011FFFFFFFFFFFF3FF55 55555555552401AAAAAAAAAAAAA3FD0611722833943C011FFFFFFFFFFFF3FF55555555 55552401D5555555555553FD2F0734B78FBD2C011FFFFFFFFFFFF3FF55555555555524 0200000000000003FD5B05B05B05B04C011FFFFFFFFFFFF3FF55555555555524021555 5555555553FD8A0CE512956D7C011FFFFFFFFFFFF3FF55555555555524022AAAAAAAAA AAA3FDBC1CD2DE3EF4DC011FFFFFFFFFFFF3FF55555555555524023FFFFFFFFFFFF3FD F13579BE02466C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC0240000000000003FCF258BF 258BF22C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FCAC901E573AC8 FC011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC0215555555555563FC6CD8EFB11D33DC011F FFFFFFFFFFF3FFFFFFFFFFFFFFCC0200000000000013FC3333333333332C011FFFFFFF FFFFF3FFFFFFFFFFFFFFCC01D5555555555573FBFF3DD1BAF98D4C011FFFFFFFFFFFF3 FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3FBA438215FF3DCCC011FFFFFFFFFFFF3FFFFFF FFFFFFFFCC0180000000000013FB5555555555550C011FFFFFFFFFFFF3FFFFFFFFFFFF FFCC0155555555555563FB12956D9B1DF5BC011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC01 2AAAAAAAAAAAB3FAB7F0D4629B7E3C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC01000000 00000003FA62FC962FC9620C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC00AAAAAAAAAAAA B3FA264E209DC5972C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC0055555555555563FA01 E573AC901D6C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCC0000000000000013F9EB851EB8 51E98C011FFFFFFFFFFFF3FFFFFFFFFFFFFFCBFF55555555555583FA01E573AC901D5C 011FFFFFFFFFFFF3FFFFFFFFFFFFFFCBFE555555555555B3FA264E209DC5971C011FFF FFFFFFFFF3FFFFFFFFFFFFFFCBCC80000000000003FA62FC962FC961FC011FFFFFFFFF FFF3FFFFFFFFFFFFFFC3FE555555555554F3FAB7F0D4629B7DFC011FFFFFFFFFFFF3FF FFFFFFFFFFFFC3FF55555555555523FB12956D9B1DF59C011FFFFFFFFFFFF3FFFFFFFF FFFFFFC3FFFFFFFFFFFFFFC3FB555555555554CC011FFFFFFFFFFFF3FFFFFFFFFFFFFF C40055555555555533FBA438215FF3DC8C011FFFFFFFFFFFF3FFFFFFFFFFFFFFC400AA AAAAAAAAAA83FBFF3DD1BAF98CDC011FFFFFFFFFFFF3FFFFFFFFFFFFFFC400FFFFFFFF FFFFD3FC333333333332DC011FFFFFFFFFFFF3FFFFFFFFFFFFFFC4012AAAAAAAAAAA93 FC6CD8EFB11D339C011FFFFFFFFFFFF3FFFFFFFFFFFFFFC40155555555555543FCAC90 1E573AC8AC011FFFFFFFFFFFF3FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FCF258BF258B F20C011FFFFFFFFFFFF3FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FD1F19690E0857DC01 1FFFFFFFFFFFF3FFFFFFFFFFFFFFC401D5555555555553FD480F2B9D6480DC011FFFFF FFFFFFF3FFFFFFFFFFFFFFC40200000000000003FD740DA740DA740C011FFFFFFFFFFF F3FFFFFFFFFFFFFFC40215555555555553FDA314DBF86A312C011FFFFFFFFFFFF3FFFF FFFFFFFFFFC4022AAAAAAAAAAAA3FDD524C9C413B88C011FFFFFFFFFFFF3FFFFFFFFFF FFFFC4023FFFFFFFFFFFF3FE051EB851EB850C011FFFFFFFFFFFF4005555555555553C 0240000000000003FD16C16C16C16BFC011FFFFFFFFFFFF4005555555555553C022AAA AAAAAAAAB3FCE7BA375F31AEBC011FFFFFFFFFFFF4005555555555553C021555555555 5563FCA80308B91419AC011FFFFFFFFFFFF4005555555555553C0200000000000013FC 6E5D4C3B2A18FC011FFFFFFFFFFFF4005555555555553C01D5555555555573FC3AC901 E573AC7C011FFFFFFFFFFFF4005555555555553C01AAAAAAAAAAAAC3FC0D4629B7F0D4 3C011FFFFFFFFFFFF4005555555555553C0180000000000013FBCBA987654320AC011F FFFFFFFFFFF4005555555555553C0155555555555563FB88E99FAB0BC15C011FFFFFFF FFFFF4005555555555553C012AAAAAAAAAAAB3FB524C9C413B8ABC011FFFFFFFFFFFF4 005555555555553C0100000000000003FB27D27D27D27CAC011FFFFFFFFFFFF4005555 555555553C00AAAAAAAAAAAAB3FB097B425ED0973C011FFFFFFFFFFFF4005555555555 553C0055555555555563FAEE8DD7CC6BB4AC011FFFFFFFFFFFF4005555555555553C00 00000000000013FAE26AF37C048C1C011FFFFFFFFFFFF4005555555555553BFF555555 55555583FAEE8DD7CC6BB49C011FFFFFFFFFFFF4005555555555553BFE555555555555 B3FB097B425ED0972C011FFFFFFFFFFFF4005555555555553BCC80000000000003FB27 D27D27D27C9C011FFFFFFFFFFFF40055555555555533FE555555555554F3FB524C9C41 3B8A9C011FFFFFFFFFFFF40055555555555533FF55555555555523FB88E99FAB0BC13C 011FFFFFFFFFFFF40055555555555533FFFFFFFFFFFFFFC3FBCBA9876543206C011FFF FFFFFFFFF400555555555555340055555555555533FC0D4629B7F0D41C011FFFFFFFFF FFF4005555555555553400AAAAAAAAAAAA83FC3AC901E573AC3C011FFFFFFFFFFFF400 5555555555553400FFFFFFFFFFFFD3FC6E5D4C3B2A18AC011FFFFFFFFFFFF400555555 55555534012AAAAAAAAAAA93FCA80308B914196C011FFFFFFFFFFFF400555555555555 340155555555555543FCE7BA375F31AE7C011FFFFFFFFFFFF40055555555555534017F FFFFFFFFFFF3FD16C16C16C16BEC011FFFFFFFFFFFF4005555555555553401AAAAAAAA AAAAA3FD3CAE759203CACC011FFFFFFFFFFFF4005555555555553401D5555555555553 FD65A438215FF3BC011FFFFFFFFFFFF400555555555555340200000000000003FD91A2 B3C4D5E6EC011FFFFFFFFFFFF400555555555555340215555555555553FDC0A9E87C65 A41C011FFFFFFFFFFFF40055555555555534022AAAAAAAAAAAA3FDF2B9D6480F2B6C01 1FFFFFFFFFFFF40055555555555534023FFFFFFFFFFFF3FE13E93E93E93E8C011FFFFF FFFFFFF400AAAAAAAAAAAA8C0240000000000003FD38E38E38E38E2C011FFFFFFFFFFF F400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FD15FF3DD1BAF98C011FFFFFFFFFFFF400AA AAAAAAAAAA8C0215555555555563FCEC474CFD585DEC011FFFFFFFFFFFF400AAAAAAAA AAAA8C0200000000000013FCB2A1907F6E5D3C011FFFFFFFFFFFF400AAAAAAAAAAAA8C 01D5555555555573FC7F0D4629B7F0BC011FFFFFFFFFFFF400AAAAAAAAAAAA8C01AAAA AAAAAAAAC3FC518A6DFC35187C011FFFFFFFFFFFF400AAAAAAAAAAAA8C018000000000 0013FC2A1907F6E5D49C011FFFFFFFFFFFF400AAAAAAAAAAAA8C0155555555555563FC 08B91419CA24FC011FFFFFFFFFFFF400AAAAAAAAAAAA8C012AAAAAAAAAAAB3FBDAD524 C9C4134C011FFFFFFFFFFFF400AAAAAAAAAAAA8C0100000000000003FBB05B05B05B05 2C011FFFFFFFFFFFF400AAAAAAAAAAAA8C00AAAAAAAAAAAAB3FB9203CAE7591FBC011F FFFFFFFFFFF400AAAAAAAAAAAA8C0055555555555563FB7FCF746EBE62DC011FFFFFFF FFFFF400AAAAAAAAAAAA8C0000000000000013FB79BE02468ACE8C011FFFFFFFFFFFF4 00AAAAAAAAAAAA8BFF55555555555583FB7FCF746EBE62DC011FFFFFFFFFFFF400AAAA AAAAAAAA8BFE555555555555B3FB9203CAE7591FAC011FFFFFFFFFFFF400AAAAAAAAAA AA8BCC80000000000003FBB05B05B05B051C011FFFFFFFFFFFF400AAAAAAAAAAAA83FE 555555555554F3FBDAD524C9C4131C011FFFFFFFFFFFF400AAAAAAAAAAAA83FF555555 55555523FC08B91419CA24EC011FFFFFFFFFFFF400AAAAAAAAAAAA83FFFFFFFFFFFFFF C3FC2A1907F6E5D47C011FFFFFFFFFFFF400AAAAAAAAAAAA840055555555555533FC51 8A6DFC35185C011FFFFFFFFFFFF400AAAAAAAAAAAA8400AAAAAAAAAAAA83FC7F0D4629 B7F07C011FFFFFFFFFFFF400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FCB2A1907F6E5CEC 011FFFFFFFFFFFF400AAAAAAAAAAAA84012AAAAAAAAAAA93FCEC474CFD585DAC011FFF FFFFFFFFF400AAAAAAAAAAAA840155555555555543FD15FF3DD1BAF96C011FFFFFFFFF FFF400AAAAAAAAAAAA84017FFFFFFFFFFFF3FD38E38E38E38E0C011FFFFFFFFFFFF400 AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD5ED097B425ECEC011FFFFFFFFFFFF400AAAAAA AAAAAA8401D5555555555553FD87C65A438215DC011FFFFFFFFFFFF400AAAAAAAAAAAA 840200000000000003FDB3C4D5E6F8090C011FFFFFFFFFFFF400AAAAAAAAAAAA840215 555555555553FDE2CC0A9E87C63C011FFFFFFFFFFFF400AAAAAAAAAAAA84022AAAAAAA AAAAA3FE0A6DFC3518A6CC011FFFFFFFFFFFF400AAAAAAAAAAAA84023FFFFFFFFFFFF3 FE24FA4FA4FA4F9C011FFFFFFFFFFFF400FFFFFFFFFFFFDC0240000000000003FD5F92 C5F92C5F7C011FFFFFFFFFFFF400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FD3CAE759203 CADC011FFFFFFFFFFFF400FFFFFFFFFFFFDC0215555555555563FD1CD2DE3EF5005C01 1FFFFFFFFFFFF400FFFFFFFFFFFFDC0200000000000013FCFFFFFFFFFFFFEC011FFFFF FFFFFFF400FFFFFFFFFFFFDC01D5555555555573FCCC6BB5AA49936C011FFFFFFFFFFF F400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FC9EE8DD7CC6BB2C011FFFFFFFFFFFF400FF FFFFFFFFFFDC0180000000000013FC7777777777774C011FFFFFFFFFFFF400FFFFFFFF FFFFDC0155555555555563FC5617839A5BC7AC011FFFFFFFFFFFF400FFFFFFFFFFFFDC 012AAAAAAAAAAAB3FC3AC901E573AC5C011FFFFFFFFFFFF400FFFFFFFFFFFFDC010000 0000000003FC258BF258BF254C011FFFFFFFFFFFF400FFFFFFFFFFFFDC00AAAAAAAAAA AAB3FC166054F43E328C011FFFFFFFFFFFF400FFFFFFFFFFFFDC0055555555555563FC 0D4629B7F0D41C011FFFFFFFFFFFF400FFFFFFFFFFFFDC0000000000000013FC0A3D70 A3D709FC011FFFFFFFFFFFF400FFFFFFFFFFFFDBFF55555555555583FC0D4629B7F0D4 2C011FFFFFFFFFFFF400FFFFFFFFFFFFDBFE555555555555B3FC166054F43E328C011F FFFFFFFFFFF400FFFFFFFFFFFFDBCC80000000000003FC258BF258BF254C011FFFFFFF FFFFF400FFFFFFFFFFFFD3FE555555555554F3FC3AC901E573AC4C011FFFFFFFFFFFF4 00FFFFFFFFFFFFD3FF55555555555523FC5617839A5BC79C011FFFFFFFFFFFF400FFFF FFFFFFFFD3FFFFFFFFFFFFFFC3FC7777777777772C011FFFFFFFFFFFF400FFFFFFFFFF FFD40055555555555533FC9EE8DD7CC6BB0C011FFFFFFFFFFFF400FFFFFFFFFFFFD400 AAAAAAAAAAAA83FCCC6BB5AA49932C011FFFFFFFFFFFF400FFFFFFFFFFFFD400FFFFFF FFFFFFD3FCFFFFFFFFFFFF9C011FFFFFFFFFFFF400FFFFFFFFFFFFD4012AAAAAAAAAAA 93FD1CD2DE3EF5003C011FFFFFFFFFFFF400FFFFFFFFFFFFD40155555555555543FD3C AE759203CABC011FFFFFFFFFFFF400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FD5F92C5F9 2C5F6C011FFFFFFFFFFFF400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FD857FCF746EBE3C 011FFFFFFFFFFFF400FFFFFFFFFFFFD401D5555555555553FDAE759203CAE73C011FFF FFFFFFFFF400FFFFFFFFFFFFD40200000000000003FDDA740DA740DA6C011FFFFFFFFF FFF400FFFFFFFFFFFFD40215555555555553FE04BDA12F684BCC011FFFFFFFFFFFF400 FFFFFFFFFFFFD4022AAAAAAAAAAAA3FE1DC598153D0F7C011FFFFFFFFFFFF400FFFFFF FFFFFFD4023FFFFFFFFFFFF3FE3851EB851EB83C011FFFFFFFFFFFF4012AAAAAAAAAAA 9C0240000000000003FD8ACF13579BDFFC011FFFFFFFFFFFF4012AAAAAAAAAAA9C022A AAAAAAAAAAB3FD67EAC2F0734B6C011FFFFFFFFFFFF4012AAAAAAAAAAA9C0215555555 555563FD480F2B9D6480DC011FFFFFFFFFFFF4012AAAAAAAAAAA9C0200000000000013 FD2B3C4D5E6F807C011FFFFFFFFFFFF4012AAAAAAAAAAA9C01D5555555555573FD1172 2833944A3C011FFFFFFFFFFFF4012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FCF5617839A5 BC3C011FFFFFFFFFFFF4012AAAAAAAAAAA9C0180000000000013FCCDF0123456785C01 1FFFFFFFFFFFF4012AAAAAAAAAAA9C0155555555555563FCAC901E573AC8BC011FFFFF FFFFFFF4012AAAAAAAAAAA9C012AAAAAAAAAAAB3FC91419CA252AD6C011FFFFFFFFFFF F4012AAAAAAAAAAA9C0100000000000003FC7C048D159E265C011FFFFFFFFFFFF4012A AAAAAAAAAA9C00AAAAAAAAAAAAB3FC6CD8EFB11D339C011FFFFFFFFFFFF4012AAAAAAA AAAA9C0055555555555563FC63BEC474CFD52C011FFFFFFFFFFFF4012AAAAAAAAAAA9C 0000000000000013FC60B60B60B60B0C011FFFFFFFFFFFF4012AAAAAAAAAAA9BFF5555 5555555583FC63BEC474CFD53C011FFFFFFFFFFFF4012AAAAAAAAAAA9BFE5555555555 55B3FC6CD8EFB11D339C011FFFFFFFFFFFF4012AAAAAAAAAAA9BCC80000000000003FC 7C048D159E265C011FFFFFFFFFFFF4012AAAAAAAAAAA93FE555555555554F3FC91419C A252AD5C011FFFFFFFFFFFF4012AAAAAAAAAAA93FF55555555555523FCAC901E573AC8 AC011FFFFFFFFFFFF4012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FCCDF0123456783C011F FFFFFFFFFFF4012AAAAAAAAAAA940055555555555533FCF5617839A5BC1C011FFFFFFF FFFFF4012AAAAAAAAAAA9400AAAAAAAAAAAA83FD11722833944A2C011FFFFFFFFFFFF4 012AAAAAAAAAAA9400FFFFFFFFFFFFD3FD2B3C4D5E6F805C011FFFFFFFFFFFF4012AAA AAAAAAAA94012AAAAAAAAAAA93FD480F2B9D6480BC011FFFFFFFFFFFF4012AAAAAAAAA AA940155555555555543FD67EAC2F0734B4C011FFFFFFFFFFFF4012AAAAAAAAAAA9401 7FFFFFFFFFFFF3FD8ACF13579BDFEC011FFFFFFFFFFFF4012AAAAAAAAAAA9401AAAAAA AAAAAAA3FDB0BC1CD2DE3ECC011FFFFFFFFFFFF4012AAAAAAAAAAA9401D55555555555 53FDD9B1DF623A67BC011FFFFFFFFFFFF4012AAAAAAAAAAA940200000000000003FE02 D82D82D82D7C011FFFFFFFFFFFF4012AAAAAAAAAAA940215555555555553FE1A5BC7DE A00C0C011FFFFFFFFFFFF4012AAAAAAAAAAA94022AAAAAAAAAAAA3FE3363BEC474CFBC 011FFFFFFFFFFFF4012AAAAAAAAAAA94023FFFFFFFFFFFF3FE4DF0123456788C011FFF FFFFFFFFF4015555555555554C0240000000000003FDBA987654320FCC011FFFFFFFFF FFF4015555555555554C022AAAAAAAAAAAB3FD97B425ED097B2C011FFFFFFFFFFFF401 5555555555554C0215555555555563FD77D88E99FAB0AC011FFFFFFFFFFFF401555555 5555554C0200000000000013FD5B05B05B05B04C011FFFFFFFFFFFF401555555555555 4C01D5555555555573FD413B8B302A7A0C011FFFFFFFFFFFF4015555555555554C01AA AAAAAAAAAAC3FD2A7A1F19690DEC011FFFFFFFFFFFF4015555555555554C0180000000 000013FD16C16C16C16BFC011FFFFFFFFFFFF4015555555555554C0155555555555563 FD0611722833942C011FFFFFFFFFFFF4015555555555554C012AAAAAAAAAAAB3FCF0D4 629B7F0CFC011FFFFFFFFFFFF4015555555555554C0100000000000003FCDB97530ECA 85EC011FFFFFFFFFFFF4015555555555554C00AAAAAAAAAAAAB3FCCC6BB5AA49932C01 1FFFFFFFFFFFF4015555555555554C0055555555555563FCC3518A6DFC34BC011FFFFF FFFFFFF4015555555555554C0000000000000013FCC048D159E26A9C011FFFFFFFFFFF F4015555555555554BFF55555555555583FCC3518A6DFC34CC011FFFFFFFFFFFF40155 55555555554BFE555555555555B3FCCC6BB5AA49932C011FFFFFFFFFFFF40155555555 55554BCC80000000000003FCDB97530ECA85EC011FFFFFFFFFFFF40155555555555543 FE555555555554F3FCF0D4629B7F0CEC011FFFFFFFFFFFF40155555555555543FF5555 5555555523FD0611722833942C011FFFFFFFFFFFF40155555555555543FFFFFFFFFFFF FFC3FD16C16C16C16BEC011FFFFFFFFFFFF401555555555555440055555555555533FD 2A7A1F19690DDC011FFFFFFFFFFFF4015555555555554400AAAAAAAAAAAA83FD413B8B 302A79FC011FFFFFFFFFFFF4015555555555554400FFFFFFFFFFFFD3FD5B05B05B05B0 2C011FFFFFFFFFFFF40155555555555544012AAAAAAAAAAA93FD77D88E99FAB07C011F FFFFFFFFFFF401555555555555440155555555555543FD97B425ED097B1C011FFFFFFF FFFFF40155555555555544017FFFFFFFFFFFF3FDBA987654320FBC011FFFFFFFFFFFF4 015555555555554401AAAAAAAAAAAAA3FDE0857FCF746E9C011FFFFFFFFFFFF4015555 555555554401D5555555555553FE04BDA12F684BCC011FFFFFFFFFFFF4015555555555 55440200000000000003FE1ABCDF0123455C011FFFFFFFFFFFF4015555555555554402 15555555555553FE3240795CEB23FC011FFFFFFFFFFFF40155555555555544022AAAAA AAAAAAA3FE4B487042BFE79C011FFFFFFFFFFFF40155555555555544023FFFFFFFFFFF F3FE65D4C3B2A1906C011FFFFFFFFFFFF4017FFFFFFFFFFFFC0240000000000003FDEE EEEEEEEEEECC011FFFFFFFFFFFF4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FDCC0A9E87 C65A2C011FFFFFFFFFFFF4017FFFFFFFFFFFFC0215555555555563FDAC2F0734B78FAC 011FFFFFFFFFFFF4017FFFFFFFFFFFFC0200000000000013FD8F5C28F5C28F4C011FFF FFFFFFFFF4017FFFFFFFFFFFFC01D5555555555573FD759203CAE7590C011FFFFFFFFF FFF4017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD5ED097B425ECEC011FFFFFFFFFFFF401 7FFFFFFFFFFFFC0180000000000013FD4B17E4B17E4AFC011FFFFFFFFFFFF4017FFFFF FFFFFFFC0155555555555563FD3A67EAC2F0732C011FFFFFFFFFFFF4017FFFFFFFFFFF FC012AAAAAAAAAAAB3FD2CC0A9E87C657C011FFFFFFFFFFFF4017FFFFFFFFFFFFC0100 000000000003FD222222222221FC011FFFFFFFFFFFF4017FFFFFFFFFFFFC00AAAAAAAA AAAAB3FD1A8C536FE1A89C011FFFFFFFFFFFF4017FFFFFFFFFFFFC0055555555555563 FD15FF3DD1BAF96C011FFFFFFFFFFFF4017FFFFFFFFFFFFC0000000000000013FD147A E147AE145C011FFFFFFFFFFFF4017FFFFFFFFFFFFBFF55555555555583FD15FF3DD1BA F96C011FFFFFFFFFFFF4017FFFFFFFFFFFFBFE555555555555B3FD1A8C536FE1A89C01 1FFFFFFFFFFFF4017FFFFFFFFFFFFBCC80000000000003FD222222222221FC011FFFFF FFFFFFF4017FFFFFFFFFFFF3FE555555555554F3FD2CC0A9E87C657C011FFFFFFFFFFF F4017FFFFFFFFFFFF3FF55555555555523FD3A67EAC2F0732C011FFFFFFFFFFFF4017F FFFFFFFFFFF3FFFFFFFFFFFFFFC3FD4B17E4B17E4AEC011FFFFFFFFFFFF4017FFFFFFF FFFFF40055555555555533FD5ED097B425ECDC011FFFFFFFFFFFF4017FFFFFFFFFFFF4 00AAAAAAAAAAAA83FD759203CAE758FC011FFFFFFFFFFFF4017FFFFFFFFFFFF400FFFF FFFFFFFFD3FD8F5C28F5C28F2C011FFFFFFFFFFFF4017FFFFFFFFFFFF4012AAAAAAAAA AA93FDAC2F0734B78F7C011FFFFFFFFFFFF4017FFFFFFFFFFFF40155555555555543FD CC0A9E87C65A1C011FFFFFFFFFFFF4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FDEEEEEE EEEEEEBC011FFFFFFFFFFFF4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FE0A6DFC3518A6 CC011FFFFFFFFFFFF4017FFFFFFFFFFFF401D5555555555553FE1EE8DD7CC6BB4C011F FFFFFFFFFFF4017FFFFFFFFFFFF40200000000000003FE34E81B4E81B4DC011FFFFFFF FFFFF4017FFFFFFFFFFFF40215555555555553FE4C6BB5AA49937C011FFFFFFFFFFFF4 017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE6573AC901E571C011FFFFFFFFFFFF4017FFF FFFFFFFFF4023FFFFFFFFFFFF3FE7FFFFFFFFFFFEC011FFFFFFFFFFFF401AAAAAAAAAA AAAC0240000000000003FE13E93E93E93E9C011FFFFFFFFFFFF401AAAAAAAAAAAAAC02 2AAAAAAAAAAAB3FE0277166054F44C011FFFFFFFFFFFF401AAAAAAAAAAAAAC02155555 55555563FDE512956D9B1DFC011FFFFFFFFFFFF401AAAAAAAAAAAAAC02000000000000 13FDC83FB72EA61D9C011FFFFFFFFFFFF401AAAAAAAAAAAAAC01D5555555555573FDAE 759203CAE75C011FFFFFFFFFFFF401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD97B425ED 097B3C011FFFFFFFFFFFF401AAAAAAAAAAAAAC0180000000000013FD83FB72EA61D94C 011FFFFFFFFFFFF401AAAAAAAAAAAAAC0155555555555563FD734B78FBD4017C011FFF FFFFFFFFF401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD65A438215FF3CC011FFFFFFFFF FFF401AAAAAAAAAAAAAC0100000000000003FD5B05B05B05B04C011FFFFFFFFFFFF401 AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FD536FE1A8C536EC011FFFFFFFFFFFF401AAAAAA AAAAAAAC0055555555555563FD4EE2CC0A9E87BC011FFFFFFFFFFFF401AAAAAAAAAAAA AC0000000000000013FD4D5E6F8091A2AC011FFFFFFFFFFFF401AAAAAAAAAAAAABFF55 555555555583FD4EE2CC0A9E87BC011FFFFFFFFFFFF401AAAAAAAAAAAAABFE55555555 5555B3FD536FE1A8C536EC011FFFFFFFFFFFF401AAAAAAAAAAAAABCC80000000000003 FD5B05B05B05B04C011FFFFFFFFFFFF401AAAAAAAAAAAAA3FE555555555554F3FD65A4 38215FF3CC011FFFFFFFFFFFF401AAAAAAAAAAAAA3FF55555555555523FD734B78FBD4 017C011FFFFFFFFFFFF401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD83FB72EA61D93C01 1FFFFFFFFFFFF401AAAAAAAAAAAAA40055555555555533FD97B425ED097B2C011FFFFF FFFFFFF401AAAAAAAAAAAAA400AAAAAAAAAAAA83FDAE759203CAE74C011FFFFFFFFFFF F401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FDC83FB72EA61D7C011FFFFFFFFFFFF401AA AAAAAAAAAAA4012AAAAAAAAAAA93FDE512956D9B1DCC011FFFFFFFFFFFF401AAAAAAAA AAAAA40155555555555543FE0277166054F43C011FFFFFFFFFFFF401AAAAAAAAAAAAA4 017FFFFFFFFFFFF3FE13E93E93E93E8C011FFFFFFFFFFFF401AAAAAAAAAAAAA401AAAA AAAAAAAAA3FE26DFC3518A6DFC011FFFFFFFFFFFF401AAAAAAAAAAAAA401D555555555 5553FE3B5AA49938827C011FFFFFFFFFFFF401AAAAAAAAAAAAA40200000000000003FE 5159E26AF37C0C011FFFFFFFFFFFF401AAAAAAAAAAAAA40215555555555553FE68DD7C C6BB5A9C011FFFFFFFFFFFF401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE81E573AC901E 4C011FFFFFFFFFFFF401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE9C71C71C71C70C011F FFFFFFFFFFF401D555555555555C0240000000000003FE32A1907F6E5D4C011FFFFFFF FFFFF401D555555555555C022AAAAAAAAAAAB3FE212F684BDA12FC011FFFFFFFFFFFF4 01D555555555555C0215555555555563FE11419CA252ADBC011FFFFFFFFFFFF401D555 555555555C0200000000000013FE02D82D82D82D8C011FFFFFFFFFFFF401D555555555 555C01D5555555555573FDEBE635DAD524CC011FFFFFFFFFFFF401D555555555555C01 AAAAAAAAAAAAC3FDD524C9C413B8AC011FFFFFFFFFFFF401D555555555555C01800000 00000013FDC16C16C16C16BC011FFFFFFFFFFFF401D555555555555C01555555555555 63FDB0BC1CD2DE3EEC011FFFFFFFFFFFF401D555555555555C012AAAAAAAAAAAB3FDA3 14DBF86A313C011FFFFFFFFFFFF401D555555555555C0100000000000003FD98765432 0FEDBC011FFFFFFFFFFFF401D555555555555C00AAAAAAAAAAAAB3FD90E0857FCF745C 011FFFFFFFFFFFF401D555555555555C0055555555555563FD8C536FE1A8C52C011FFF FFFFFFFFF401D555555555555C0000000000000013FD8ACF13579BE01C011FFFFFFFFF FFF401D555555555555BFF55555555555583FD8C536FE1A8C52C011FFFFFFFFFFFF401 D555555555555BFE555555555555B3FD90E0857FCF745C011FFFFFFFFFFFF401D55555 5555555BCC80000000000003FD987654320FEDBC011FFFFFFFFFFFF401D55555555555 53FE555555555554F3FDA314DBF86A313C011FFFFFFFFFFFF401D5555555555553FF55 555555555523FDB0BC1CD2DE3EEC011FFFFFFFFFFFF401D5555555555553FFFFFFFFFF FFFFC3FDC16C16C16C16AC011FFFFFFFFFFFF401D55555555555540055555555555533 FDD524C9C413B89C011FFFFFFFFFFFF401D555555555555400AAAAAAAAAAAA83FDEBE6 35DAD524BC011FFFFFFFFFFFF401D555555555555400FFFFFFFFFFFFD3FE02D82D82D8 2D7C011FFFFFFFFFFFF401D5555555555554012AAAAAAAAAAA93FE11419CA252ADAC01 1FFFFFFFFFFFF401D55555555555540155555555555543FE212F684BDA12EC011FFFFF FFFFFFF401D5555555555554017FFFFFFFFFFFF3FE32A1907F6E5D4C011FFFFFFFFFFF F401D555555555555401AAAAAAAAAAAAA3FE4598153D0F8CAC011FFFFFFFFFFFF401D5 55555555555401D5555555555553FE5A12F684BDA12C011FFFFFFFFFFFF401D5555555 5555540200000000000003FE70123456789ABC011FFFFFFFFFFFF401D5555555555554 0215555555555553FE8795CEB240795C011FFFFFFFFFFFF401D5555555555554022AAA AAAAAAAAA3FEA09DC598153CFC011FFFFFFFFFFFF401D5555555555554023FFFFFFFFF FFF3FEBB2A1907F6E5CC011FFFFFFFFFFFF4020000000000000C0240000000000003FE 53A06D3A06D39C011FFFFFFFFFFFF4020000000000000C022AAAAAAAAAAAB3FE422E45 0672895C011FFFFFFFFFFFF4020000000000000C0215555555555563FE3240795CEB24 0C011FFFFFFFFFFFF4020000000000000C0200000000000013FE23D70A3D70A3EC011F FFFFFFFFFFF4020000000000000C01D5555555555573FE16F1F7A80308CC011FFFFFFF FFFFF4020000000000000C01AAAAAAAAAAAAC3FE0B91419CA252BC011FFFFFFFFFFFF4 020000000000000C0180000000000013FE01B4E81B4E81BC011FFFFFFFFFFFF4020000 000000000C0155555555555563FDF2B9D6480F2B9C011FFFFFFFFFFFF4020000000000 000C012AAAAAAAAAAAB3FDE512956D9B1DEC011FFFFFFFFFFFF4020000000000000C01 00000000000003FDDA740DA740DA6C011FFFFFFFFFFFF4020000000000000C00AAAAAA AAAAAAB3FDD2DE3EF500610C011FFFFFFFFFFFF4020000000000000C00555555555555 63FDCE512956D9B1DC011FFFFFFFFFFFF4020000000000000C0000000000000013FDCC CCCCCCCCCCCC011FFFFFFFFFFFF4020000000000000BFF55555555555583FDCE512956 D9B1DC011FFFFFFFFFFFF4020000000000000BFE555555555555B3FDD2DE3EF500610C 011FFFFFFFFFFFF4020000000000000BCC80000000000003FDDA740DA740DA6C011FFF FFFFFFFFF40200000000000003FE555555555554F3FDE512956D9B1DEC011FFFFFFFFF FFF40200000000000003FF55555555555523FDF2B9D6480F2B9C011FFFFFFFFFFFF402 00000000000003FFFFFFFFFFFFFFC3FE01B4E81B4E81BC011FFFFFFFFFFFF402000000 000000040055555555555533FE0B91419CA252AC011FFFFFFFFFFFF402000000000000 0400AAAAAAAAAAAA83FE16F1F7A80308AC011FFFFFFFFFFFF4020000000000000400FF FFFFFFFFFFD3FE23D70A3D70A3DC011FFFFFFFFFFFF40200000000000004012AAAAAAA AAAA93FE3240795CEB23FC011FFFFFFFFFFFF402000000000000040155555555555543 FE422E450672894C011FFFFFFFFFFFF40200000000000004017FFFFFFFFFFFF3FE53A0 6D3A06D39C011FFFFFFFFFFFF4020000000000000401AAAAAAAAAAAAA3FE6696F1F7A8 030C011FFFFFFFFFFFF4020000000000000401D5555555555553FE7B11D33F56177C01 1FFFFFFFFFFFF402000000000000040200000000000003FE9111111111111C011FFFFF FFFFFFF402000000000000040215555555555553FEA894AB6CD8EFAC011FFFFFFFFFFF F40200000000000004022AAAAAAAAAAAA3FEC19CA252ADB35C011FFFFFFFFFFFF40200 000000000004023FFFFFFFFFFFF3FEDC28F5C28F5C1C011FFFFFFFFFFFF40215555555 55555C0240000000000003FE76E5D4C3B2A18C011FFFFFFFFFFFF4021555555555555C 022AAAAAAAAAAAB3FE6573AC901E574C011FFFFFFFFFFFF4021555555555555C021555 5555555563FE5585E0E696F1FC011FFFFFFFFFFFF4021555555555555C020000000000 0013FE471C71C71C71DC011FFFFFFFFFFFF4021555555555555C01D5555555555573FE 3A375F31AED6BC011FFFFFFFFFFFF4021555555555555C01AAAAAAAAAAAAC3FE2ED6A9 264E20AC011FFFFFFFFFFFF4021555555555555C0180000000000013FE24FA4FA4FA4F AC011FFFFFFFFFFFF4021555555555555C0155555555555563FE1CA252ADB363BC011F FFFFFFFFFFF4021555555555555C012AAAAAAAAAAAB3FE15CEB240795CEC011FFFFFFF FFFFF4021555555555555C0100000000000003FE107F6E5D4C3B2C011FFFFFFFFFFFF4 021555555555555C00AAAAAAAAAAAAB3FE0CB487042BFE7C011FFFFFFFFFFFF4021555 555555555C0055555555555563FE0A6DFC3518A6DC011FFFFFFFFFFFF4021555555555 555C0000000000000013FE09ABCDF012344C011FFFFFFFFFFFF4021555555555555BFF 55555555555583FE0A6DFC3518A6DC011FFFFFFFFFFFF4021555555555555BFE555555 555555B3FE0CB487042BFE7C011FFFFFFFFFFFF4021555555555555BCC800000000000 03FE107F6E5D4C3B2C011FFFFFFFFFFFF40215555555555553FE555555555554F3FE15 CEB240795CEC011FFFFFFFFFFFF40215555555555553FF55555555555523FE1CA252AD B363BC011FFFFFFFFFFFF40215555555555553FFFFFFFFFFFFFFC3FE24FA4FA4FA4F9C 011FFFFFFFFFFFF402155555555555540055555555555533FE2ED6A9264E209C011FFF FFFFFFFFF4021555555555555400AAAAAAAAAAAA83FE3A375F31AED69C011FFFFFFFFF FFF4021555555555555400FFFFFFFFFFFFD3FE471C71C71C71CC011FFFFFFFFFFFF402 15555555555554012AAAAAAAAAAA93FE5585E0E696F1EC011FFFFFFFFFFFF402155555 555555540155555555555543FE6573AC901E573C011FFFFFFFFFFFF402155555555555 54017FFFFFFFFFFFF3FE76E5D4C3B2A18C011FFFFFFFFFFFF4021555555555555401AA AAAAAAAAAAA3FE89DC598153D0FC011FFFFFFFFFFFF4021555555555555401D5555555 555553FE9E573AC901E56C011FFFFFFFFFFFF402155555555555540200000000000003 FEB456789ABCDF0C011FFFFFFFFFFFF402155555555555540215555555555553FECBDA 12F684BD9C011FFFFFFFFFFFF40215555555555554022AAAAAAAAAAAA3FEE4E209DC59 814C011FFFFFFFFFFFF40215555555555554023FFFFFFFFFFFF3FEFF6E5D4C3B2A0C01 1FFFFFFFFFFFF4022AAAAAAAAAAAAC0240000000000003FE9C71C71C71C6FC011FFFFF FFFFFFF4022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE8AFF9EE8DD7CBC011FFFFFFFFFFF F4022AAAAAAAAAAAAC0215555555555563FE7B11D33F56176C011FFFFFFFFFFFF4022A AAAAAAAAAAAC0200000000000013FE6CA8641FDB974C011FFFFFFFFFFFF4022AAAAAAA AAAAAC01D5555555555573FE5FC3518A6DFC1C011FFFFFFFFFFFF4022AAAAAAAAAAAAC 01AAAAAAAAAAAAC3FE54629B7F0D461C011FFFFFFFFFFFF4022AAAAAAAAAAAAC018000 0000000013FE4A8641FDB9751C011FFFFFFFFFFFF4022AAAAAAAAAAAAC015555555555 5563FE422E450672892C011FFFFFFFFFFFF4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE 3B5AA49938826C011FFFFFFFFFFFF4022AAAAAAAAAAAAC0100000000000003FE360B60 B60B609C011FFFFFFFFFFFF4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE3240795CEB23 FC011FFFFFFFFFFFF4022AAAAAAAAAAAAC0055555555555563FE2FF9EE8DD7CC4C011F FFFFFFFFFFF4022AAAAAAAAAAAAC0000000000000013FE2F37C048D159BC011FFFFFFF FFFFF4022AAAAAAAAAAAABFF55555555555583FE2FF9EE8DD7CC4C011FFFFFFFFFFFF4 022AAAAAAAAAAAABFE555555555555B3FE3240795CEB23EC011FFFFFFFFFFFF4022AAA AAAAAAAAABCC80000000000003FE360B60B60B609C011FFFFFFFFFFFF4022AAAAAAAAA AAA3FE555555555554F3FE3B5AA49938825C011FFFFFFFFFFFF4022AAAAAAAAAAAA3FF 55555555555523FE422E450672892C011FFFFFFFFFFFF4022AAAAAAAAAAAA3FFFFFFFF FFFFFFC3FE4A8641FDB9750C011FFFFFFFFFFFF4022AAAAAAAAAAAA400555555555555 33FE54629B7F0D460C011FFFFFFFFFFFF4022AAAAAAAAAAAA400AAAAAAAAAAAA83FE5F C3518A6DFC0C011FFFFFFFFFFFF4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE6CA8641F DB973C011FFFFFFFFFFFF4022AAAAAAAAAAAA4012AAAAAAAAAAA93FE7B11D33F56175C 011FFFFFFFFFFFF4022AAAAAAAAAAAA40155555555555543FE8AFF9EE8DD7CAC011FFF FFFFFFFFF4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE9C71C71C71C6FC011FFFFFFFFF FFF4022AAAAAAAAAAAA401AAAAAAAAAAAAA3FEAF684BDA12F66C011FFFFFFFFFFFF402 2AAAAAAAAAAAA401D5555555555553FEC3E32D21C10ADC011FFFFFFFFFFFF4022AAAAA AAAAAAA40200000000000003FED9E26AF37C047C011FFFFFFFFFFFF4022AAAAAAAAAAA A40215555555555553FEF166054F43E30C011FFFFFFFFFFFF4022AAAAAAAAAAAA4022A AAAAAAAAAAA3FF0536FE1A8C536C011FFFFFFFFFFFF4022AAAAAAAAAAAA4023FFFFFFF FFFFF3FF127D27D27D27CC011FFFFFFFFFFFF4023FFFFFFFFFFFFC0240000000000003 FEC444444444443C011FFFFFFFFFFFF4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FEB2D2 1C10AFF9EC011FFFFFFFFFFFF4023FFFFFFFFFFFFC0215555555555563FEA2E4506728 949C011FFFFFFFFFFFF4023FFFFFFFFFFFFC0200000000000013FE947AE147AE147C01 1FFFFFFFFFFFF4023FFFFFFFFFFFFC01D5555555555573FE8795CEB240794C011FFFFF FFFFFFF4023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE7C3518A6DFC34C011FFFFFFFFFFF F4023FFFFFFFFFFFFC0180000000000013FE7258BF258BF24C011FFFFFFFFFFFF4023F FFFFFFFFFFFC0155555555555563FE6A00C22E45065C011FFFFFFFFFFFF4023FFFFFFF FFFFFC012AAAAAAAAAAAB3FE632D21C10AFF9C011FFFFFFFFFFFF4023FFFFFFFFFFFFC 0100000000000003FE5DDDDDDDDDDDCC011FFFFFFFFFFFF4023FFFFFFFFFFFFC00AAAA AAAAAAAAB3FE5A12F684BDA12C011FFFFFFFFFFFF4023FFFFFFFFFFFFC005555555555 5563FE57CC6BB5AA497C011FFFFFFFFFFFF4023FFFFFFFFFFFFC0000000000000013FE 570A3D70A3D6EC011FFFFFFFFFFFF4023FFFFFFFFFFFFBFF55555555555583FE57CC6B B5AA497C011FFFFFFFFFFFF4023FFFFFFFFFFFFBFE555555555555B3FE5A12F684BDA1 1C011FFFFFFFFFFFF4023FFFFFFFFFFFFBCC80000000000003FE5DDDDDDDDDDDCC011F FFFFFFFFFFF4023FFFFFFFFFFFF3FE555555555554F3FE632D21C10AFF8C011FFFFFFF FFFFF4023FFFFFFFFFFFF3FF55555555555523FE6A00C22E45065C011FFFFFFFFFFFF4 023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE7258BF258BF23C011FFFFFFFFFFFF4023FFF FFFFFFFFF40055555555555533FE7C3518A6DFC33C011FFFFFFFFFFFF4023FFFFFFFFF FFF400AAAAAAAAAAAA83FE8795CEB240793C011FFFFFFFFFFFF4023FFFFFFFFFFFF400 FFFFFFFFFFFFD3FE947AE147AE146C011FFFFFFFFFFFF4023FFFFFFFFFFFF4012AAAAA AAAAAA93FEA2E4506728948C011FFFFFFFFFFFF4023FFFFFFFFFFFF401555555555555 43FEB2D21C10AFF9DC011FFFFFFFFFFFF4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FEC4 44444444442C011FFFFFFFFFFFF4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FED73AC901 E5739C011FFFFFFFFFFFF4023FFFFFFFFFFFF401D5555555555553FEEBB5AA4993880C 011FFFFFFFFFFFF4023FFFFFFFFFFFF40200000000000003FF00DA740DA740DC011FFF FFFFFFFFF4023FFFFFFFFFFFF40215555555555553FF0C9C413B8B301C011FFFFFFFFF FFF4023FFFFFFFFFFFF4022AAAAAAAAAAAA3FF19203CAE7591FC011FFFFFFFFFFFF402 3FFFFFFFFFFFF4023FFFFFFFFFFFF3FF2666666666665C011555555555554C02400000 0000000C0240000000000003FDDDDDDDDDDDDDCC011555555555554C02400000000000 0C022AAAAAAAAAAAB3FDBAF98D76B5492C011555555555554C024000000000000C0215 555555555563FD9B1DF623A67EAC011555555555554C024000000000000C0200000000 000013FD7E4B17E4B17E4C011555555555554C024000000000000C01D5555555555573 FD6480F2B9D6480C011555555555554C024000000000000C01AAAAAAAAAAAAC3FD4DBF 86A314DBEC011555555555554C024000000000000C0180000000000013FD3A06D3A06D 39FC011555555555554C024000000000000C0155555555555563FD2956D9B1DF622C01 1555555555554C024000000000000C012AAAAAAAAAAAB3FD1BAF98D76B547C01155555 5555554C024000000000000C0100000000000003FD111111111110FC01155555555555 4C024000000000000C00AAAAAAAAAAAAB3FD097B425ED0979C011555555555554C0240 00000000000C0055555555555563FD04EE2CC0A9E86C011555555555554C0240000000 00000C0000000000000013FD0369D0369D035C011555555555554C024000000000000B FF55555555555583FD04EE2CC0A9E86C011555555555554C024000000000000BFE5555 55555555B3FD097B425ED0979C011555555555554C024000000000000BCC8000000000 0003FD111111111110FC011555555555554C0240000000000003FE555555555554F3FD 1BAF98D76B547C011555555555554C0240000000000003FF55555555555523FD2956D9 B1DF622C011555555555554C0240000000000003FFFFFFFFFFFFFFC3FD3A06D3A06D39 EC011555555555554C02400000000000040055555555555533FD4DBF86A314DBDC0115 55555555554C024000000000000400AAAAAAAAAAAA83FD6480F2B9D647FC0115555555 55554C024000000000000400FFFFFFFFFFFFD3FD7E4B17E4B17E2C011555555555554C 0240000000000004012AAAAAAAAAAA93FD9B1DF623A67E7C011555555555554C024000 00000000040155555555555543FDBAF98D76B5491C011555555555554C024000000000 0004017FFFFFFFFFFFF3FDDDDDDDDDDDDDBC011555555555554C024000000000000401 AAAAAAAAAAAAA3FE01E573AC901E4C011555555555554C024000000000000401D55555 55555553FE166054F43E32CC011555555555554C024000000000000402000000000000 03FE2C5F92C5F92C5C011555555555554C02400000000000040215555555555553FE43 E32D21C10AFC011555555555554C0240000000000004022AAAAAAAAAAAA3FE5CEB2407 95CE9C011555555555554C0240000000000004023FFFFFFFFFFFF3FE7777777777776C 011555555555554C022AAAAAAAAAAABC0240000000000003FDA987654320FEDC011555 555555554C022AAAAAAAAAAABC022AAAAAAAAAAAB3FD86A314DBF86A4C011555555555 554C022AAAAAAAAAAABC0215555555555563FD66C77D88E99FBC011555555555554C02 2AAAAAAAAAAABC0200000000000013FD49F49F49F49F5C011555555555554C022AAAAA AAAAAABC01D5555555555573FD302A7A1F19691C011555555555554C022AAAAAAAAAAA BC01AAAAAAAAAAAAC3FD19690E0857FD0C011555555555554C022AAAAAAAAAAABC0180 000000000013FD05B05B05B05B1C011555555555554C022AAAAAAAAAAABC0155555555 555563FCEA00C22E45067C011555555555554C022AAAAAAAAAAABC012AAAAAAAAAAAB3 FCCEB240795CEB2C011555555555554C022AAAAAAAAAAABC0100000000000003FCB975 30ECA8641C011555555555554C022AAAAAAAAAAABC00AAAAAAAAAAAAB3FCAA49938827 715C011555555555554C022AAAAAAAAAAABC0055555555555563FCA12F684BDA12EC01 1555555555554C022AAAAAAAAAAABC0000000000000013FC9E26AF37C048CC01155555 5555554C022AAAAAAAAAAABBFF55555555555583FCA12F684BDA12FC01155555555555 4C022AAAAAAAAAAABBFE555555555555B3FCAA49938827715C011555555555554C022A AAAAAAAAAABBCC80000000000003FCB97530ECA8641C011555555555554C022AAAAAAA AAAAB3FE555555555554F3FCCEB240795CEB1C011555555555554C022AAAAAAAAAAAB3 FF55555555555523FCEA00C22E45066C011555555555554C022AAAAAAAAAAAB3FFFFFF FFFFFFFFC3FD05B05B05B05AFC011555555555554C022AAAAAAAAAAAB4005555555555 5533FD19690E0857FCEC011555555555554C022AAAAAAAAAAAB400AAAAAAAAAAAA83FD 302A7A1F19690C011555555555554C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FD49F49F 49F49F3C011555555555554C022AAAAAAAAAAAB4012AAAAAAAAAAA93FD66C77D88E99F 9C011555555555554C022AAAAAAAAAAAB40155555555555543FD86A314DBF86A2C0115 55555555554C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FDA987654320FECC0115555555 55554C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FDCF746EBE635DAC011555555555554C 022AAAAAAAAAAAB401D5555555555553FDF86A314DBF869C011555555555554C022AAA AAAAAAAAB40200000000000003FE123456789ABCEC011555555555554C022AAAAAAAAA AAB40215555555555553FE29B7F0D4629B7C011555555555554C022AAAAAAAAAAAB402 2AAAAAAAAAAAA3FE42BFE7BA375F2C011555555555554C022AAAAAAAAAAAB4023FFFFF FFFFFFF3FE5D4C3B2A1907FC011555555555554C021555555555556C02400000000000 03FD79BE02468ACF0C011555555555554C021555555555556C022AAAAAAAAAAAB3FD56 D9B1DF623A7C011555555555554C021555555555556C0215555555555563FD36FE1A8C 536FEC011555555555554C021555555555556C0200000000000013FD1A2B3C4D5E6F9C 011555555555554C021555555555556C01D5555555555573FD0061172283394C011555 555555554C021555555555556C01AAAAAAAAAAAAC3FCD33F5617839A5C011555555555 554C021555555555556C0180000000000013FCABCDF01234567C011555555555554C02 1555555555556C0155555555555563FC8A6DFC3518A6DC011555555555554C02155555 5555556C012AAAAAAAAAAAB3FC6F1F7A80308B8C011555555555554C02155555555555 6C0100000000000003FC59E26AF37C047C011555555555554C021555555555556C00AA AAAAAAAAAAB3FC4AB6CD8EFB11BC011555555555554C021555555555556C0055555555 555563FC419CA252ADB34C011555555555554C021555555555556C0000000000000013 FC3E93E93E93E92C011555555555554C021555555555556BFF55555555555583FC419C A252ADB35C011555555555554C021555555555556BFE555555555555B3FC4AB6CD8EFB 11BC011555555555554C021555555555556BCC80000000000003FC59E26AF37C047C01 1555555555554C0215555555555563FE555555555554F3FC6F1F7A80308B7C01155555 5555554C0215555555555563FF55555555555523FC8A6DFC3518A6CC01155555555555 4C0215555555555563FFFFFFFFFFFFFFC3FCABCDF01234565C011555555555554C0215 5555555555640055555555555533FCD33F5617839A3C011555555555554C0215555555 55556400AAAAAAAAAAAA83FD0061172283393C011555555555554C0215555555555564 00FFFFFFFFFFFFD3FD1A2B3C4D5E6F6C011555555555554C0215555555555564012AAA AAAAAAAA93FD36FE1A8C536FCC011555555555554C0215555555555564015555555555 5543FD56D9B1DF623A5C011555555555554C0215555555555564017FFFFFFFFFFFF3FD 79BE02468ACEFC011555555555554C021555555555556401AAAAAAAAAAAAA3FD9FAB0B C1CD2DDC011555555555554C021555555555556401D5555555555553FDC8A0CE512956 CC011555555555554C02155555555555640200000000000003FDF49F49F49F49EC0115 55555555554C02155555555555640215555555555553FE11D33F5617839C0115555555 55554C0215555555555564022AAAAAAAAAAAA3FE2ADB363BEC474C011555555555554C 0215555555555564023FFFFFFFFFFFF3FE456789ABCDF00C011555555555554C020000 000000001C0240000000000003FD4E81B4E81B4E9C011555555555554C020000000000 001C022AAAAAAAAAAAB3FD2B9D6480F2B9FC011555555555554C020000000000001C02 15555555555563FD0BC1CD2DE3EF6C011555555555554C020000000000001C02000000 00000013FCDDDDDDDDDDDE1C011555555555554C020000000000001C01D55555555555 73FCAA49938827719C011555555555554C020000000000001C01AAAAAAAAAAAAC3FC7C C6BB5AA4995C011555555555554C020000000000001C0180000000000013FC55555555 55557C011555555555554C020000000000001C0155555555555563FC33F5617839A5DC 011555555555554C020000000000001C012AAAAAAAAAAAB3FC18A6DFC3518A8C011555 555555554C020000000000001C0100000000000003FC0369D0369D037C011555555555 554C020000000000001C00AAAAAAAAAAAAB3FBE87C65A438217C011555555555554C02 0000000000001C0055555555555563FBD6480F2B9D649C011555555555554C02000000 0000001C0000000000000013FBD0369D0369D04C011555555555554C02000000000000 1BFF55555555555583FBD6480F2B9D649C011555555555554C020000000000001BFE55 5555555555B3FBE87C65A438216C011555555555554C020000000000001BCC80000000 000003FC0369D0369D037C011555555555554C0200000000000013FE555555555554F3 FC18A6DFC3518A7C011555555555554C0200000000000013FF55555555555523FC33F5 617839A5CC011555555555554C0200000000000013FFFFFFFFFFFFFFC3FC5555555555 555C011555555555554C02000000000000140055555555555533FC7CC6BB5AA4993C01 1555555555554C020000000000001400AAAAAAAAAAAA83FCAA49938827715C01155555 5555554C020000000000001400FFFFFFFFFFFFD3FCDDDDDDDDDDDDCC01155555555555 4C0200000000000014012AAAAAAAAAAA93FD0BC1CD2DE3EF4C011555555555554C0200 0000000000140155555555555543FD2B9D6480F2B9DC011555555555554C0200000000 000014017FFFFFFFFFFFF3FD4E81B4E81B4E7C011555555555554C0200000000000014 01AAAAAAAAAAAAA3FD746EBE635DAD5C011555555555554C020000000000001401D555 5555555553FD9D6480F2B9D64C011555555555554C0200000000000014020000000000 0003FDC962FC962FC96C011555555555554C02000000000000140215555555555553FD F86A314DBF86AC011555555555554C0200000000000014022AAAAAAAAAAAA3FE153D0F 8CB4870C011555555555554C0200000000000014023FFFFFFFFFFFF3FE2FC962FC962F CC011555555555554C01D555555555557C0240000000000003FD27D27D27D27D2C0115 55555555554C01D555555555557C022AAAAAAAAAAAB3FD04EE2CC0A9E89C0115555555 55554C01D555555555557C0215555555555563FCCA252ADB363C0C011555555555554C 01D555555555557C0200000000000013FC907F6E5D4C3B5C011555555555554C01D555 555555557C01D5555555555573FC5CEB240795CEDC011555555555554C01D555555555 557C01AAAAAAAAAAAAC3FC2F684BDA12F69C011555555555554C01D555555555557C01 80000000000013FC07F6E5D4C3B2BC011555555555554C01D555555555557C01555555 55555563FBCD2DE3EF50061C011555555555554C01D555555555557C012AAAAAAAAAAA B3FB9690E0857FCF7C011555555555554C01D555555555557C0100000000000003FB6C 16C16C16C16C011555555555554C01D555555555557C00AAAAAAAAAAAAB3FB4DBF86A3 14DBFC011555555555554C01D555555555557C0055555555555563FB3B8B302A7A1F1C 011555555555554C01D555555555557C0000000000000013FB3579BE02468ACC011555 555555554C01D555555555557BFF55555555555583FB3B8B302A7A1F1C011555555555 554C01D555555555557BFE555555555555B3FB4DBF86A314DBEC011555555555554C01 D555555555557BCC80000000000003FB6C16C16C16C15C011555555555554C01D55555 55555573FE555555555554F3FB9690E0857FCF5C011555555555554C01D55555555555 73FF55555555555523FBCD2DE3EF5005FC011555555555554C01D5555555555573FFFF FFFFFFFFFFC3FC07F6E5D4C3B29C011555555555554C01D55555555555740055555555 555533FC2F684BDA12F67C011555555555554C01D555555555557400AAAAAAAAAAAA83 FC5CEB240795CE9C011555555555554C01D555555555557400FFFFFFFFFFFFD3FC907F 6E5D4C3B0C011555555555554C01D5555555555574012AAAAAAAAAAA93FCCA252ADB36 3BCC011555555555554C01D55555555555740155555555555543FD04EE2CC0A9E87C01 1555555555554C01D5555555555574017FFFFFFFFFFFF3FD27D27D27D27D1C01155555 5555554C01D555555555557401AAAAAAAAAAAAA3FD4DBF86A314DBFC01155555555555 4C01D555555555557401D5555555555553FD76B549327104EC011555555555554C01D5 5555555555740200000000000003FDA2B3C4D5E6F80C011555555555554C01D5555555 5555740215555555555553FDD1BAF98D76B54C011555555555554C01D5555555555574 022AAAAAAAAAAAA3FE01E573AC901E5C011555555555554C01D5555555555574023FFF FFFFFFFFF3FE1C71C71C71C71C011555555555554C01AAAAAAAAAAAACC024000000000 0003FD05B05B05B05AFC011555555555554C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FC C598153D0F8CCC011555555555554C01AAAAAAAAAAAACC0215555555555563FC85E0E6 96F1F7AC011555555555554C01AAAAAAAAAAAACC0200000000000013FC4C3B2A1907F6 FC011555555555554C01AAAAAAAAAAAACC01D5555555555573FC18A6DFC3518A7C0115 55555555554C01AAAAAAAAAAAACC01AAAAAAAAAAAAC3FBD6480F2B9D646C0115555555 55554C01AAAAAAAAAAAACC0180000000000013FB87654320FEDCAC011555555555554C 01AAAAAAAAAAAACC0155555555555563FB44A55B66C77D5C011555555555554C01AAAA AAAAAAAACC012AAAAAAAAAAAB3FB0E0857FCF746BC011555555555554C01AAAAAAAAAA AACC0100000000000003FAC71C71C71C714C011555555555554C01AAAAAAAAAAAACC00 AAAAAAAAAAAAB3FA8A6DFC3518A66C011555555555554C01AAAAAAAAAAAACC00555555 55555563FA66054F43E32CAC011555555555554C01AAAAAAAAAAAACC00000000000000 13FA59E26AF37C040C011555555555554C01AAAAAAAAAAAACBFF55555555555583FA66 054F43E32C9C011555555555554C01AAAAAAAAAAAACBFE555555555555B3FA8A6DFC35 18A65C011555555555554C01AAAAAAAAAAAACBCC80000000000003FAC71C71C71C713C 011555555555554C01AAAAAAAAAAAAC3FE555555555554F3FB0E0857FCF7469C011555 555555554C01AAAAAAAAAAAAC3FF55555555555523FB44A55B66C77D3C011555555555 554C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FB87654320FEDC6C011555555555554C01 AAAAAAAAAAAAC40055555555555533FBD6480F2B9D642C011555555555554C01AAAAAA AAAAAAC400AAAAAAAAAAAA83FC18A6DFC3518A3C011555555555554C01AAAAAAAAAAAA C400FFFFFFFFFFFFD3FC4C3B2A1907F6AC011555555555554C01AAAAAAAAAAAAC4012A AAAAAAAAAA93FC85E0E696F1F76C011555555555554C01AAAAAAAAAAAAC40155555555 555543FCC598153D0F8C7C011555555555554C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3 FD05B05B05B05AEC011555555555554C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FD2B9D 6480F2B9CC011555555555554C01AAAAAAAAAAAAC401D5555555555553FD549327104E E2BC011555555555554C01AAAAAAAAAAAAC40200000000000003FD8091A2B3C4D5EC01 1555555555554C01AAAAAAAAAAAAC40215555555555553FDAF98D76B54931C01155555 5555554C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FDE1A8C536FE1A6C01155555555555 4C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FE0B60B60B60B60C011555555555554C0180 00000000001C0240000000000003FCD0369D0369D02C011555555555554C0180000000 00001C022AAAAAAAAAAAB3FC8A6DFC3518A6EC011555555555554C018000000000001C 0215555555555563FC4AB6CD8EFB11DC011555555555554C018000000000001C020000 0000000013FC1111111111112C011555555555554C018000000000001C01D555555555 5573FBBAF98D76B5493C011555555555554C018000000000001C01AAAAAAAAAAAAC3FB 5FF3DD1BAF98CC011555555555554C018000000000001C0180000000000013FB111111 1111110C011555555555554C018000000000001C0155555555555563FA9CA252ADB363 6C011555555555554C018000000000001C012AAAAAAAAAAAB3FA2F684BDA12F62C0115 55555555554C018000000000001C0100000000000003F9B4E81B4E81B3FC0115555555 55554C018000000000001C00AAAAAAAAAAAAB3F93B8B302A7A1E3C011555555555554C 018000000000001C0055555555555563F8E573AC901E554C011555555555554C018000 000000001C0000000000000013F8B4E81B4E81B2FC011555555555554C018000000000 001BFF55555555555583F8E573AC901E553C011555555555554C018000000000001BFE 555555555555B3F93B8B302A7A1E0C011555555555554C018000000000001BCC800000 00000003F9B4E81B4E81B3CC011555555555554C0180000000000013FE555555555554 F3FA2F684BDA12F5FC011555555555554C0180000000000013FF55555555555523FA9C A252ADB3632C011555555555554C0180000000000013FFFFFFFFFFFFFFC3FB11111111 1110CC011555555555554C01800000000000140055555555555533FB5FF3DD1BAF988C 011555555555554C018000000000001400AAAAAAAAAAAA83FBBAF98D76B548DC011555 555555554C018000000000001400FFFFFFFFFFFFD3FC111111111110DC011555555555 554C0180000000000014012AAAAAAAAAAA93FC4AB6CD8EFB119C011555555555554C01 800000000000140155555555555543FC8A6DFC3518A6AC011555555555554C01800000 00000014017FFFFFFFFFFFF3FCD0369D0369D00C011555555555554C01800000000000 1401AAAAAAAAAAAAA3FD0E0857FCF746DC011555555555554C018000000000001401D5 555555555553FD36FE1A8C536FDC011555555555554C01800000000000140200000000 000003FD62FC962FC962FC011555555555554C01800000000000140215555555555553 FD9203CAE759202C011555555555554C0180000000000014022AAAAAAAAAAAA3FDC413 B8B302A78C011555555555554C0180000000000014023FFFFFFFFFFFF3FDF92C5F92C5 F90C011555555555554C015555555555556C0240000000000003FC9E26AF37C048AC01 1555555555554C015555555555556C022AAAAAAAAAAAB3FC585E0E696F1F7C01155555 5555554C015555555555556C0215555555555563FC18A6DFC3518A5C01155555555555 4C015555555555556C0200000000000013FBBE02468ACF135C011555555555554C0155 55555555556C01D5555555555573FB56D9B1DF623A4C011555555555554C0155555555 55556C01AAAAAAAAAAAAC3FAF7A80308B9139C011555555555554C015555555555556C 0180000000000013FA59E26AF37C041C011555555555554C015555555555556C015555 5555555563F9A8C536FE1A8ACC011555555555554C015555555555556C012AAAAAAAAA AAB3F89CA252ADB360CC011555555555554C015555555555556C0100000000000003F6 23456789ABC00C011555555555554C015555555555556C00AAAAAAAAAAAABBF753D0F8 CB4876EC011555555555554C015555555555556C005555555555556BF83B8B302A7A22 6C011555555555554C015555555555556C000000000000001BF86C16C16C16C4EC0115 55555555554C015555555555556BFF5555555555558BF83B8B302A7A229C0115555555 55554C015555555555556BFE555555555555BBF753D0F8CB48777C011555555555554C 015555555555556BCC80000000000003F623456789ABBF3C011555555555554C015555 5555555563FE555555555554F3F89CA252ADB35FFC011555555555554C015555555555 5563FF55555555555523F9A8C536FE1A8A6C011555555555554C0155555555555563FF FFFFFFFFFFFFC3FA59E26AF37C038C011555555555554C015555555555556400555555 55555533FAF7A80308B9130C011555555555554C015555555555556400AAAAAAAAAAAA 83FB56D9B1DF6239DC011555555555554C015555555555556400FFFFFFFFFFFFD3FBBE 02468ACF12BC011555555555554C0155555555555564012AAAAAAAAAAA93FC18A6DFC3 518A1C011555555555554C01555555555555640155555555555543FC585E0E696F1F2C 011555555555554C0155555555555564017FFFFFFFFFFFF3FC9E26AF37C0488C011555 555555554C015555555555556401AAAAAAAAAAAAA3FCEA00C22E45063C011555555555 554C015555555555556401D5555555555553FD1DF623A67EAC1C011555555555554C01 555555555555640200000000000003FD49F49F49F49F3C011555555555554C01555555 555555640215555555555553FD78FBD401845C7C011555555555554C01555555555555 64022AAAAAAAAAAAA3FDAB0BC1CD2DE3CC011555555555554C0155555555555564023F FFFFFFFFFFF3FDE02468ACF1355C011555555555554C012AAAAAAAAAAABC0240000000 000003FC7530ECA8641FAC011555555555554C012AAAAAAAAAAABC022AAAAAAAAAAAB3 FC2F684BDA12F67C011555555555554C012AAAAAAAAAAABC0215555555555563FBDF62 3A67EAC2CC011555555555554C012AAAAAAAAAAABC0200000000000013FB6C16C16C16 C16C011555555555554C012AAAAAAAAAAABC01D5555555555573FB04EE2CC0A9E85C01 1555555555554C012AAAAAAAAAAABC01AAAAAAAAAAAAC3FA53D0F8CB486FBC01155555 5555554C012AAAAAAAAAAABC0180000000000013F96C16C16C16C05C01155555555555 4C012AAAAAAAAAAABC0155555555555563F7845C8A0CE50C2C011555555555554C012A AAAAAAAAAABC012AAAAAAAAAAABBF7E573AC901E5D0C011555555555554C012AAAAAAA AAAABC010000000000000BF923456789ABCFAC011555555555554C012AAAAAAAAAAABC 00AAAAAAAAAAAABBF99CA252ADB3657C011555555555554C012AAAAAAAAAAABC005555 555555556BF9E573AC901E58FC011555555555554C012AAAAAAAAAAABC000000000000 001BF9FDB97530ECAA3C011555555555554C012AAAAAAAAAAABBFF5555555555558BF9 E573AC901E590C011555555555554C012AAAAAAAAAAABBFE555555555555BBF99CA252 ADB365AC011555555555554C012AAAAAAAAAAABBCC8000000000000BF923456789ABCF EC011555555555554C012AAAAAAAAAAAB3FE555555555554FBF7E573AC901E5F1C0115 55555555554C012AAAAAAAAAAAB3FF55555555555523F7845C8A0CE50A9C0115555555 55554C012AAAAAAAAAAAB3FFFFFFFFFFFFFFC3F96C16C16C16BF5C011555555555554C 012AAAAAAAAAAAB40055555555555533FA53D0F8CB486F2C011555555555554C012AAA AAAAAAAAB400AAAAAAAAAAAA83FB04EE2CC0A9E7EC011555555555554C012AAAAAAAAA AAB400FFFFFFFFFFFFD3FB6C16C16C16C0CC011555555555554C012AAAAAAAAAAAB401 2AAAAAAAAAAA93FBDF623A67EAC24C011555555555554C012AAAAAAAAAAAB401555555 55555543FC2F684BDA12F63C011555555555554C012AAAAAAAAAAAB4017FFFFFFFFFFF F3FC7530ECA8641F8C011555555555554C012AAAAAAAAAAAB401AAAAAAAAAAAAA3FCC1 0AFF9EE8DD4C011555555555554C012AAAAAAAAAAAB401D5555555555553FD097B425E D0979C011555555555554C012AAAAAAAAAAAB40200000000000003FD3579BE02468ACC 011555555555554C012AAAAAAAAAAAB40215555555555553FD6480F2B9D647FC011555 555555554C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD9690E0857FCF4C011555555555 554C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FDCBA987654320DC011555555555554C01 0000000000000C0240000000000003FC5555555555552C011555555555554C01000000 0000000C022AAAAAAAAAAAB3FC0F8CB487042BEC011555555555554C01000000000000 0C0215555555555563FB9FAB0BC1CD2DAC011555555555554C010000000000000C0200 000000000013FB2C5F92C5F92C5C011555555555554C010000000000000C01D5555555 555573FA8A6DFC3518A69C011555555555554C010000000000000C01AAAAAAAAAAAAC3 F9A8C536FE1A8B1C011555555555554C010000000000000C0180000000000013F7B4E8 1B4E81B05C011555555555554C010000000000000C015555555555556BF83B8B302A7A 227C011555555555554C010000000000000C012AAAAAAAAAAABBF97839A5BC7DEBCC01 1555555555554C010000000000000C010000000000000BFA1111111111121C01155555 5555554C010000000000000C00AAAAAAAAAAAABBFA4DBF86A314DCFC01155555555555 4C010000000000000C005555555555556BFA722833944A56AC011555555555554C0100 00000000000C000000000000001BFA7E4B17E4B17F3C011555555555554C0100000000 00000BFF5555555555558BFA722833944A56BC011555555555554C010000000000000B FE555555555555BBFA4DBF86A314DCFC011555555555554C010000000000000BCC8000 000000000BFA1111111111121C011555555555554C0100000000000003FE5555555555 54FBF97839A5BC7DEC1C011555555555554C0100000000000003FF5555555555552BF8 3B8B302A7A236C011555555555554C0100000000000003FFFFFFFFFFFFFFC3F7B4E81B 4E81ABEC011555555555554C01000000000000040055555555555533F9A8C536FE1A89 FC011555555555554C010000000000000400AAAAAAAAAAAA83FA8A6DFC3518A5AC0115 55555555554C010000000000000400FFFFFFFFFFFFD3FB2C5F92C5F92BBC0115555555 55554C0100000000000004012AAAAAAAAAAA93FB9FAB0BC1CD2D3C011555555555554C 01000000000000040155555555555543FC0F8CB487042BAC011555555555554C010000 0000000004017FFFFFFFFFFFF3FC5555555555550C011555555555554C010000000000 000401AAAAAAAAAAAAA3FCA12F684BDA12BC011555555555554C010000000000000401 D5555555555553FCF31AED6A9264AC011555555555554C010000000000000402000000 00000003FD258BF258BF257C011555555555554C010000000000000402155555555555 53FD549327104EE2AC011555555555554C0100000000000004022AAAAAAAAAAAA3FD86 A314DBF86A0C011555555555554C0100000000000004023FFFFFFFFFFFF3FDBBBBBBBB BBBB8C011555555555554C00AAAAAAAAAAAABC0240000000000003FC3E93E93E93E91C 011555555555554C00AAAAAAAAAAAABC022AAAAAAAAAAAB3FBF19690E0857FAC011555 555555554C00AAAAAAAAAAAABC0215555555555563FB722833944A558C011555555555 554C00AAAAAAAAAAAABC0200000000000013FAFDB97530ECA86C011555555555554C00 AAAAAAAAAAAABC01D5555555555573FA2F684BDA12F65C011555555555554C00AAAAAA AAAAAABC01AAAAAAAAAAAAC3F8E573AC901E552C011555555555554C00AAAAAAAAAAAA BC018000000000001BF723456789ABD1BC011555555555554C00AAAAAAAAAAAABC0155 55555555556BF953D0F8CB4871CC011555555555554C00AAAAAAAAAAAABC012AAAAAAA AAAABBFA1722833944A62C011555555555554C00AAAAAAAAAAAABC010000000000000B FA6C16C16C16C25C011555555555554C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFAA8C5 36FE1A8D3C011555555555554C00AAAAAAAAAAAABC005555555555556BFACD2DE3EF50 06EC011555555555554C00AAAAAAAAAAAABC000000000000001BFAD950C83FB72F7C01 1555555555554C00AAAAAAAAAAAABBFF5555555555558BFACD2DE3EF5006FC01155555 5555554C00AAAAAAAAAAAABBFE555555555555BBFAA8C536FE1A8D3C01155555555555 4C00AAAAAAAAAAAABBCC8000000000000BFA6C16C16C16C25C011555555555554C00AA AAAAAAAAAAB3FE555555555554FBFA1722833944A65C011555555555554C00AAAAAAAA AAAAB3FF5555555555552BF953D0F8CB48723C011555555555554C00AAAAAAAAAAAAB3 FFFFFFFFFFFFFFCBF723456789ABD60C011555555555554C00AAAAAAAAAAAAB4005555 5555555533F8E573AC901E52EC011555555555554C00AAAAAAAAAAAAB400AAAAAAAAAA AA83FA2F684BDA12F56C011555555555554C00AAAAAAAAAAAAB400FFFFFFFFFFFFD3FA FDB97530ECA72C011555555555554C00AAAAAAAAAAAAB4012AAAAAAAAAAA93FB722833 944A551C011555555555554C00AAAAAAAAAAAAB40155555555555543FBF19690E0857F 3C011555555555554C00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FC3E93E93E93E8FC0115 55555555554C00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FC8A6DFC3518A6AC0115555555 55554C00AAAAAAAAAAAAB401D5555555555553FCDC598153D0F89C011555555555554C 00AAAAAAAAAAAAB40200000000000003FD1A2B3C4D5E6F7C011555555555554C00AAAA AAAAAAAAB40215555555555553FD49327104EE2CAC011555555555554C00AAAAAAAAAA AAB4022AAAAAAAAAAAA3FD7B425ED097B3FC011555555555554C00AAAAAAAAAAAAB402 3FFFFFFFFFFFF3FDB05B05B05B058C011555555555554C005555555555556C02400000 00000003FC30ECA8641FDB6C011555555555554C005555555555556C022AAAAAAAAAAA B3FBD6480F2B9D644C011555555555554C005555555555556C0215555555555563FB56 D9B1DF623A2C011555555555554C005555555555556C0200000000000013FAC71C71C7 1C71AC011555555555554C005555555555556C01D5555555555573F9F19690E0857F1C 011555555555554C005555555555556C01AAAAAAAAAAAAC3F80AFF9EE8DD7A2C011555 555555554C005555555555556C018000000000001BF86C16C16C16C3EC011555555555 554C005555555555556C015555555555556BF9C10AFF9EE8DF4C011555555555554C00 5555555555556C012AAAAAAAAAAABBFA4DBF86A314DCEC011555555555554C00555555 5555556C010000000000000BFAA2B3C4D5E6F91C011555555555554C00555555555555 6C00AAAAAAAAAAAABBFADF623A67EAC3FC011555555555554C005555555555556C0055 55555555556BFB01E573AC901EDC011555555555554C005555555555556C0000000000 00001BFB07F6E5D4C3B32C011555555555554C005555555555556BFF5555555555558B FB01E573AC901EDC011555555555554C005555555555556BFE555555555555BBFADF62 3A67EAC3FC011555555555554C005555555555556BCC8000000000000BFAA2B3C4D5E6 F91C011555555555554C0055555555555563FE555555555554FBFA4DBF86A314DD1C01 1555555555554C0055555555555563FF5555555555552BF9C10AFF9EE8DFBC01155555 5555554C0055555555555563FFFFFFFFFFFFFFCBF86C16C16C16C60C01155555555555 4C00555555555555640055555555555533F80AFF9EE8DD77EC011555555555554C0055 55555555556400AAAAAAAAAAAA83F9F19690E0857D4C011555555555554C0055555555 55556400FFFFFFFFFFFFD3FAC71C71C71C706C011555555555554C0055555555555564 012AAAAAAAAAAA93FB56D9B1DF6239BC011555555555554C0055555555555564015555 5555555543FBD6480F2B9D63DC011555555555554C0055555555555564017FFFFFFFFF FFF3FC30ECA8641FDB4C011555555555554C005555555555556401AAAAAAAAAAAAA3FC 7CC6BB5AA498FC011555555555554C005555555555556401D5555555555553FCCEB240 795CEAEC011555555555554C00555555555555640200000000000003FD13579BE02468 9C011555555555554C00555555555555640215555555555553FD425ED097B425CC0115 55555555554C0055555555555564022AAAAAAAAAAAA3FD746EBE635DAD2C0115555555 55554C0055555555555564023FFFFFFFFFFFF3FDA987654320FEAC011555555555554C 000000000000001C0240000000000003FC2C5F92C5F92C2C011555555555554C000000 000000001C022AAAAAAAAAAAB3FBCD2DE3EF5005EC011555555555554C000000000000 001C0215555555555563FB4DBF86A314DBCC011555555555554C000000000000001C02 00000000000013FAB4E81B4E81B4AC011555555555554C000000000000001C01D55555 55555573F9CD2DE3EF50051C011555555555554C000000000000001C01AAAAAAAAAAAA C3F7845C8A0CE50E5C011555555555554C000000000000001C018000000000001BF8B4 E81B4E81B6EC011555555555554C000000000000001C015555555555556BF9E573AC90 1E58CC011555555555554C000000000000001C012AAAAAAAAAAABBFA5FF3DD1BAF99AC 011555555555554C000000000000001C010000000000000BFAB4E81B4E81B5DC011555 555555554C000000000000001C00AAAAAAAAAAAABBFAF19690E08580BC011555555555 554C000000000000001C005555555555556BFB0AFF9EE8DD7D3C011555555555554C00 0000000000001C000000000000001BFB1111111111119C011555555555554C00000000 0000001BFF5555555555558BFB0AFF9EE8DD7D4C011555555555554C00000000000000 1BFE555555555555BBFAF19690E08580CC011555555555554C000000000000001BCC80 00000000000BFAB4E81B4E81B5EC011555555555554C0000000000000013FE55555555 5554FBFA5FF3DD1BAF99EC011555555555554C0000000000000013FF5555555555552B F9E573AC901E595C011555555555554C0000000000000013FFFFFFFFFFFFFFCBF8B4E8 1B4E81B94C011555555555554C00000000000000140055555555555533F7845C8A0CE5 095C011555555555554C000000000000001400AAAAAAAAAAAA83F9CD2DE3EF5003AC01 1555555555554C000000000000001400FFFFFFFFFFFFD3FAB4E81B4E81B39C01155555 5555554C0000000000000014012AAAAAAAAAAA93FB4DBF86A314DB4C01155555555555 4C00000000000000140155555555555543FBCD2DE3EF50057C011555555555554C0000 000000000014017FFFFFFFFFFFF3FC2C5F92C5F92C1C011555555555554C0000000000 00001401AAAAAAAAAAAAA3FC7839A5BC7DE9CC011555555555554C0000000000000014 01D5555555555553FCCA252ADB363BBC011555555555554C0000000000000014020000 0000000003FD1111111111110C011555555555554C0000000000000014021555555555 5553FD401845C8A0CE3C011555555555554C0000000000000014022AAAAAAAAAAAA3FD 722833944A558C011555555555554C0000000000000014023FFFFFFFFFFFF3FDA740DA 740DA71C011555555555554BFF5555555555558C0240000000000003FC30ECA8641FDB 6C011555555555554BFF5555555555558C022AAAAAAAAAAAB3FBD6480F2B9D644C0115 55555555554BFF5555555555558C0215555555555563FB56D9B1DF623A2C0115555555 55554BFF5555555555558C0200000000000013FAC71C71C71C71AC011555555555554B FF5555555555558C01D5555555555573F9F19690E0857F1C011555555555554BFF5555 555555558C01AAAAAAAAAAAAC3F80AFF9EE8DD7A2C011555555555554BFF5555555555 558C018000000000001BF86C16C16C16C3EC011555555555554BFF5555555555558C01 5555555555556BF9C10AFF9EE8DF4C011555555555554BFF5555555555558C012AAAAA AAAAAABBFA4DBF86A314DCEC011555555555554BFF5555555555558C01000000000000 0BFAA2B3C4D5E6F91C011555555555554BFF5555555555558C00AAAAAAAAAAAABBFADF 623A67EAC3FC011555555555554BFF5555555555558C005555555555556BFB01E573AC 901EDC011555555555554BFF5555555555558C000000000000001BFB07F6E5D4C3B32C 011555555555554BFF5555555555558BFF5555555555558BFB01E573AC901EDC011555 555555554BFF5555555555558BFE555555555555BBFADF623A67EAC3FC011555555555 554BFF5555555555558BCC8000000000000BFAA2B3C4D5E6F91C011555555555554BFF 55555555555583FE555555555554FBFA4DBF86A314DD1C011555555555554BFF555555 55555583FF5555555555552BF9C10AFF9EE8DFBC011555555555554BFF555555555555 83FFFFFFFFFFFFFFCBF86C16C16C16C60C011555555555554BFF555555555555840055 555555555533F80AFF9EE8DD77EC011555555555554BFF5555555555558400AAAAAAAA AAAA83F9F19690E0857D4C011555555555554BFF5555555555558400FFFFFFFFFFFFD3 FAC71C71C71C706C011555555555554BFF55555555555584012AAAAAAAAAAA93FB56D9 B1DF6239BC011555555555554BFF555555555555840155555555555543FBD6480F2B9D 63DC011555555555554BFF55555555555584017FFFFFFFFFFFF3FC30ECA8641FDB4C01 1555555555554BFF5555555555558401AAAAAAAAAAAAA3FC7CC6BB5AA498FC01155555 5555554BFF5555555555558401D5555555555553FCCEB240795CEAEC01155555555555 4BFF555555555555840200000000000003FD13579BE024689C011555555555554BFF55 5555555555840215555555555553FD425ED097B425CC011555555555554BFF55555555 555584022AAAAAAAAAAAA3FD746EBE635DAD2C011555555555554BFF55555555555584 023FFFFFFFFFFFF3FDA987654320FEAC011555555555554BFE555555555555BC024000 0000000003FC3E93E93E93E90C011555555555554BFE555555555555BC022AAAAAAAAA AAB3FBF19690E0857FAC011555555555554BFE555555555555BC0215555555555563FB 722833944A556C011555555555554BFE555555555555BC0200000000000013FAFDB975 30ECA82C011555555555554BFE555555555555BC01D5555555555573FA2F684BDA12F6 1C011555555555554BFE555555555555BC01AAAAAAAAAAAAC3F8E573AC901E542C0115 55555555554BFE555555555555BC018000000000001BF723456789ABD2BC0115555555 55554BFE555555555555BC015555555555556BF953D0F8CB48720C011555555555554B FE555555555555BC012AAAAAAAAAAABBFA1722833944A64C011555555555554BFE5555 55555555BC010000000000000BFA6C16C16C16C25C011555555555554BFE5555555555 55BC00AAAAAAAAAAAABBFAA8C536FE1A8D5C011555555555554BFE555555555555BC00 5555555555556BFACD2DE3EF50070C011555555555554BFE555555555555BC00000000 0000001BFAD950C83FB72F9C011555555555554BFE555555555555BBFF555555555555 8BFACD2DE3EF50071C011555555555554BFE555555555555BBFE555555555555BBFAA8 C536FE1A8D5C011555555555554BFE555555555555BBCC8000000000000BFA6C16C16C 16C27C011555555555554BFE555555555555B3FE555555555554FBFA1722833944A67C 011555555555554BFE555555555555B3FF5555555555552BF953D0F8CB48727C011555 555555554BFE555555555555B3FFFFFFFFFFFFFFCBF723456789ABD70C011555555555 554BFE555555555555B40055555555555533F8E573AC901E526C011555555555554BFE 555555555555B400AAAAAAAAAAAA83FA2F684BDA12F54C011555555555554BFE555555 555555B400FFFFFFFFFFFFD3FAFDB97530ECA70C011555555555554BFE555555555555 B4012AAAAAAAAAAA93FB722833944A550C011555555555554BFE555555555555B40155 555555555543FBF19690E0857F2C011555555555554BFE555555555555B4017FFFFFFF FFFFF3FC3E93E93E93E8EC011555555555554BFE555555555555B401AAAAAAAAAAAAA3 FC8A6DFC3518A69C011555555555554BFE555555555555B401D5555555555553FCDC59 8153D0F89C011555555555554BFE555555555555B40200000000000003FD1A2B3C4D5E 6F6C011555555555554BFE555555555555B40215555555555553FD49327104EE2CAC01 1555555555554BFE555555555555B4022AAAAAAAAAAAA3FD7B425ED097B3FC01155555 5555554BFE555555555555B4023FFFFFFFFFFFF3FDB05B05B05B058C01155555555555 4BCC8000000000000C0240000000000003FC5555555555551C011555555555554BCC80 00000000000C022AAAAAAAAAAAB3FC0F8CB487042BEC011555555555554BCC80000000 00000C0215555555555563FB9FAB0BC1CD2D8C011555555555554BCC8000000000000C 0200000000000013FB2C5F92C5F92C3C011555555555554BCC8000000000000C01D555 5555555573FA8A6DFC3518A65C011555555555554BCC8000000000000C01AAAAAAAAAA AAC3F9A8C536FE1A8ADC011555555555554BCC8000000000000C0180000000000013F7 B4E81B4E81AF5C011555555555554BCC8000000000000C015555555555556BF83B8B30 2A7A22FC011555555555554BCC8000000000000C012AAAAAAAAAAABBF97839A5BC7DEC 0C011555555555554BCC8000000000000C010000000000000BFA1111111111121C0115 55555555554BCC8000000000000C00AAAAAAAAAAAABBFA4DBF86A314DD1C0115555555 55554BCC8000000000000C005555555555556BFA722833944A56CC011555555555554B CC8000000000000C000000000000001BFA7E4B17E4B17F5C011555555555554BCC8000 000000000BFF5555555555558BFA722833944A56DC011555555555554BCC8000000000 000BFE555555555555BBFA4DBF86A314DD1C011555555555554BCC8000000000000BCC 8000000000000BFA1111111111123C011555555555554BCC80000000000003FE555555 555554FBF97839A5BC7DEC5C011555555555554BCC80000000000003FF555555555555 2BF83B8B302A7A23EC011555555555554BCC80000000000003FFFFFFFFFFFFFFC3F7B4 E81B4E81AAEC011555555555554BCC800000000000040055555555555533F9A8C536FE 1A89BC011555555555554BCC8000000000000400AAAAAAAAAAAA83FA8A6DFC3518A58C 011555555555554BCC8000000000000400FFFFFFFFFFFFD3FB2C5F92C5F92BAC011555 555555554BCC80000000000004012AAAAAAAAAAA93FB9FAB0BC1CD2D2C011555555555 554BCC800000000000040155555555555543FC0F8CB487042BAC011555555555554BCC 80000000000004017FFFFFFFFFFFF3FC555555555554FC011555555555554BCC800000 0000000401AAAAAAAAAAAAA3FCA12F684BDA12AC011555555555554BCC800000000000 0401D5555555555553FCF31AED6A9264AC011555555555554BCC800000000000040200 000000000003FD258BF258BF257C011555555555554BCC800000000000040215555555 555553FD549327104EE2AC011555555555554BCC80000000000004022AAAAAAAAAAAA3 FD86A314DBF86A0C011555555555554BCC80000000000004023FFFFFFFFFFFF3FDBBBB BBBBBBBB8C0115555555555543FE555555555554FC0240000000000003FC7530ECA864 1F9C0115555555555543FE555555555554FC022AAAAAAAAAAAB3FC2F684BDA12F66C01 15555555555543FE555555555554FC0215555555555563FBDF623A67EAC2AC01155555 55555543FE555555555554FC0200000000000013FB6C16C16C16C14C01155555555555 43FE555555555554FC01D5555555555573FB04EE2CC0A9E83C0115555555555543FE55 5555555554FC01AAAAAAAAAAAAC3FA53D0F8CB486F7C0115555555555543FE55555555 5554FC0180000000000013F96C16C16C16BFDC0115555555555543FE555555555554FC 0155555555555563F7845C8A0CE50B2C0115555555555543FE555555555554FC012AAA AAAAAAAABBF7E573AC901E5F0C0115555555555543FE555555555554FC010000000000 000BF923456789ABD02C0115555555555543FE555555555554FC00AAAAAAAAAAAABBF9 9CA252ADB365DC0115555555555543FE555555555554FC005555555555556BF9E573AC 901E597C0115555555555543FE555555555554FC000000000000001BF9FDB97530ECAA 9C0115555555555543FE555555555554FBFF5555555555558BF9E573AC901E598C0115 555555555543FE555555555554FBFE555555555555BBF99CA252ADB3661C0115555555 555543FE555555555554FBCC8000000000000BF923456789ABD05C0115555555555543 FE555555555554F3FE555555555554FBF7E573AC901E60DC0115555555555543FE5555 55555554F3FF55555555555523F7845C8A0CE508DC0115555555555543FE5555555555 54F3FFFFFFFFFFFFFFC3F96C16C16C16BEEC0115555555555543FE555555555554F400 55555555555533FA53D0F8CB486EFC0115555555555543FE555555555554F400AAAAAA AAAAAA83FB04EE2CC0A9E7DC0115555555555543FE555555555554F400FFFFFFFFFFFF D3FB6C16C16C16C0AC0115555555555543FE555555555554F4012AAAAAAAAAAA93FBDF 623A67EAC22C0115555555555543FE555555555554F40155555555555543FC2F684BDA 12F62C0115555555555543FE555555555554F4017FFFFFFFFFFFF3FC7530ECA8641F8C 0115555555555543FE555555555554F401AAAAAAAAAAAAA3FCC10AFF9EE8DD3C011555 5555555543FE555555555554F401D5555555555553FD097B425ED0979C011555555555 5543FE555555555554F40200000000000003FD3579BE02468ABC0115555555555543FE 555555555554F40215555555555553FD6480F2B9D647EC0115555555555543FE555555 555554F4022AAAAAAAAAAAA3FD9690E0857FCF4C0115555555555543FE555555555554 F4023FFFFFFFFFFFF3FDCBA987654320CC0115555555555543FF5555555555552C0240 000000000003FC9E26AF37C0489C0115555555555543FF5555555555552C022AAAAAAA AAAAB3FC585E0E696F1F5C0115555555555543FF5555555555552C0215555555555563 FC18A6DFC3518A4C0115555555555543FF5555555555552C0200000000000013FBBE02 468ACF132C0115555555555543FF5555555555552C01D5555555555573FB56D9B1DF62 3A1C0115555555555543FF5555555555552C01AAAAAAAAAAAAC3FAF7A80308B9135C01 15555555555543FF5555555555552C0180000000000013FA59E26AF37C03DC01155555 55555543FF5555555555552C0155555555555563F9A8C536FE1A8A4C01155555555555 43FF5555555555552C012AAAAAAAAAAAB3F89CA252ADB35F8C0115555555555543FF55 55555555552C0100000000000003F623456789ABBC0C0115555555555543FF55555555 55552C00AAAAAAAAAAAABBF753D0F8CB48796C0115555555555543FF5555555555552C 005555555555556BF83B8B302A7A23AC0115555555555543FF5555555555552C000000 000000001BF86C16C16C16C60C0115555555555543FF5555555555552BFF5555555555 558BF83B8B302A7A23CC0115555555555543FF5555555555552BFE555555555555BBF7 53D0F8CB4879DC0115555555555543FF5555555555552BCC80000000000003F6234567 89ABBA7C0115555555555543FF55555555555523FE555555555554F3F89CA252ADB35E CC0115555555555543FF55555555555523FF55555555555523F9A8C536FE1A89DC0115 555555555543FF55555555555523FFFFFFFFFFFFFFC3FA59E26AF37C034C0115555555 555543FF555555555555240055555555555533FAF7A80308B912BC0115555555555543 FF5555555555552400AAAAAAAAAAAA83FB56D9B1DF6239BC0115555555555543FF5555 555555552400FFFFFFFFFFFFD3FBBE02468ACF129C0115555555555543FF5555555555 5524012AAAAAAAAAAA93FC18A6DFC3518A0C0115555555555543FF5555555555552401 55555555555543FC585E0E696F1F1C0115555555555543FF55555555555524017FFFFF FFFFFFF3FC9E26AF37C0487C0115555555555543FF5555555555552401AAAAAAAAAAAA A3FCEA00C22E45062C0115555555555543FF5555555555552401D5555555555553FD1D F623A67EAC1C0115555555555543FF555555555555240200000000000003FD49F49F49 F49F3C0115555555555543FF555555555555240215555555555553FD78FBD401845C6C 0115555555555543FF55555555555524022AAAAAAAAAAAA3FDAB0BC1CD2DE3BC011555 5555555543FF55555555555524023FFFFFFFFFFFF3FDE02468ACF1354C011555555555 5543FFFFFFFFFFFFFFCC0240000000000003FCD0369D0369CFFC0115555555555543FF FFFFFFFFFFFFCC022AAAAAAAAAAAB3FC8A6DFC3518A6BC0115555555555543FFFFFFFF FFFFFFCC0215555555555563FC4AB6CD8EFB11AC0115555555555543FFFFFFFFFFFFFF CC0200000000000013FC111111111110FC0115555555555543FFFFFFFFFFFFFFCC01D5 555555555573FBBAF98D76B548DC0115555555555543FFFFFFFFFFFFFFCC01AAAAAAAA AAAAC3FB5FF3DD1BAF986C0115555555555543FFFFFFFFFFFFFFCC0180000000000013 FB111111111110AC0115555555555543FFFFFFFFFFFFFFCC0155555555555563FA9CA2 52ADB362AC0115555555555543FFFFFFFFFFFFFFCC012AAAAAAAAAAAB3FA2F684BDA12 F56C0115555555555543FFFFFFFFFFFFFFCC0100000000000003F9B4E81B4E81B27C01 15555555555543FFFFFFFFFFFFFFCC00AAAAAAAAAAAAB3F93B8B302A7A1CBC01155555 55555543FFFFFFFFFFFFFFCC0055555555555563F8E573AC901E524C01155555555555 43FFFFFFFFFFFFFFCC0000000000000013F8B4E81B4E81AFFC0115555555555543FFFF FFFFFFFFFFCBFF55555555555583F8E573AC901E523C0115555555555543FFFFFFFFFF FFFFCBFE555555555555B3F93B8B302A7A1C8C0115555555555543FFFFFFFFFFFFFFCB CC80000000000003F9B4E81B4E81B24C0115555555555543FFFFFFFFFFFFFFC3FE5555 55555554F3FA2F684BDA12F53C0115555555555543FFFFFFFFFFFFFFC3FF5555555555 5523FA9CA252ADB3626C0115555555555543FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FB 1111111111106C0115555555555543FFFFFFFFFFFFFFC40055555555555533FB5FF3DD 1BAF982C0115555555555543FFFFFFFFFFFFFFC400AAAAAAAAAAAA83FBBAF98D76B548 7C0115555555555543FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FC111111111110AC0115 555555555543FFFFFFFFFFFFFFC4012AAAAAAAAAAA93FC4AB6CD8EFB116C0115555555 555543FFFFFFFFFFFFFFC40155555555555543FC8A6DFC3518A67C0115555555555543 FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FCD0369D0369CFDC0115555555555543FFFFFF FFFFFFFFC401AAAAAAAAAAAAA3FD0E0857FCF746CC0115555555555543FFFFFFFFFFFF FFC401D5555555555553FD36FE1A8C536FCC0115555555555543FFFFFFFFFFFFFFC402 00000000000003FD62FC962FC962EC0115555555555543FFFFFFFFFFFFFFC402155555 55555553FD9203CAE759201C0115555555555543FFFFFFFFFFFFFFC4022AAAAAAAAAAA A3FDC413B8B302A76C0115555555555543FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FDF9 2C5F92C5F8FC0115555555555544005555555555553C0240000000000003FD05B05B05 B05AEC0115555555555544005555555555553C022AAAAAAAAAAAB3FCC598153D0F8C8C 0115555555555544005555555555553C0215555555555563FC85E0E696F1F77C011555 5555555544005555555555553C0200000000000013FC4C3B2A1907F6CC011555555555 5544005555555555553C01D5555555555573FC18A6DFC3518A3C011555555555554400 5555555555553C01AAAAAAAAAAAAC3FBD6480F2B9D63FC011555555555554400555555 5555553C0180000000000013FB87654320FEDC3C011555555555554400555555555555 3C0155555555555563FB44A55B66C77CEC0115555555555544005555555555553C012A AAAAAAAAAAB3FB0E0857FCF7464C0115555555555544005555555555553C0100000000 000003FAC71C71C71C706C0115555555555544005555555555553C00AAAAAAAAAAAAB3 FA8A6DFC3518A58C0115555555555544005555555555553C0055555555555563FA6605 4F43E32BCC0115555555555544005555555555553C0000000000000013FA59E26AF37C 032C0115555555555544005555555555553BFF55555555555583FA66054F43E32BBC01 15555555555544005555555555553BFE555555555555B3FA8A6DFC3518A57C01155555 55555544005555555555553BCC80000000000003FAC71C71C71C705C01155555555555 440055555555555533FE555555555554F3FB0E0857FCF7462C01155555555555440055 555555555533FF55555555555523FB44A55B66C77CCC01155555555555440055555555 555533FFFFFFFFFFFFFFC3FB87654320FEDBFC01155555555555440055555555555534 0055555555555533FBD6480F2B9D63BC0115555555555544005555555555553400AAAA AAAAAAAA83FC18A6DFC3518A0C0115555555555544005555555555553400FFFFFFFFFF FFD3FC4C3B2A1907F67C01155555555555440055555555555534012AAAAAAAAAAA93FC 85E0E696F1F73C011555555555554400555555555555340155555555555543FCC59815 3D0F8C4C01155555555555440055555555555534017FFFFFFFFFFFF3FD05B05B05B05A DC0115555555555544005555555555553401AAAAAAAAAAAAA3FD2B9D6480F2B9AC0115 555555555544005555555555553401D5555555555553FD549327104EE2AC0115555555 55554400555555555555340200000000000003FD8091A2B3C4D5CC0115555555555544 00555555555555340215555555555553FDAF98D76B5492FC0115555555555544005555 5555555534022AAAAAAAAAAAA3FDE1A8C536FE1A4C0115555555555544005555555555 5534023FFFFFFFFFFFF3FE0B60B60B60B5FC011555555555554400AAAAAAAAAAAA8C02 40000000000003FD27D27D27D27D0C011555555555554400AAAAAAAAAAAA8C022AAAAA AAAAAAB3FD04EE2CC0A9E86C011555555555554400AAAAAAAAAAAA8C02155555555555 63FCCA252ADB363BBC011555555555554400AAAAAAAAAAAA8C0200000000000013FC90 7F6E5D4C3B0C011555555555554400AAAAAAAAAAAA8C01D5555555555573FC5CEB2407 95CE7C011555555555554400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FC2F684BDA12F64C 011555555555554400AAAAAAAAAAAA8C0180000000000013FC07F6E5D4C3B26C011555 555555554400AAAAAAAAAAAA8C0155555555555563FBCD2DE3EF50056C011555555555 554400AAAAAAAAAAAA8C012AAAAAAAAAAAB3FB9690E0857FCECC011555555555554400 AAAAAAAAAAAA8C0100000000000003FB6C16C16C16C0BC011555555555554400AAAAAA AAAAAA8C00AAAAAAAAAAAAB3FB4DBF86A314DB4C011555555555554400AAAAAAAAAAAA 8C0055555555555563FB3B8B302A7A1E6C011555555555554400AAAAAAAAAAAA8C0000 000000000013FB3579BE02468A1C011555555555554400AAAAAAAAAAAA8BFF55555555 555583FB3B8B302A7A1E6C011555555555554400AAAAAAAAAAAA8BFE555555555555B3 FB4DBF86A314DB3C011555555555554400AAAAAAAAAAAA8BCC80000000000003FB6C16 C16C16C0AC011555555555554400AAAAAAAAAAAA83FE555555555554F3FB9690E0857F CEAC011555555555554400AAAAAAAAAAAA83FF55555555555523FBCD2DE3EF50054C01 1555555555554400AAAAAAAAAAAA83FFFFFFFFFFFFFFC3FC07F6E5D4C3B24C01155555 5555554400AAAAAAAAAAAA840055555555555533FC2F684BDA12F62C01155555555555 4400AAAAAAAAAAAA8400AAAAAAAAAAAA83FC5CEB240795CE4C011555555555554400AA AAAAAAAAAA8400FFFFFFFFFFFFD3FC907F6E5D4C3ABC011555555555554400AAAAAAAA AAAA84012AAAAAAAAAAA93FCCA252ADB363B6C011555555555554400AAAAAAAAAAAA84 0155555555555543FD04EE2CC0A9E84C011555555555554400AAAAAAAAAAAA84017FFF FFFFFFFFF3FD27D27D27D27CFC011555555555554400AAAAAAAAAAAA8401AAAAAAAAAA AAA3FD4DBF86A314DBCC011555555555554400AAAAAAAAAAAA8401D5555555555553FD 76B549327104CC011555555555554400AAAAAAAAAAAA840200000000000003FDA2B3C4 D5E6F7EC011555555555554400AAAAAAAAAAAA840215555555555553FDD1BAF98D76B5 1C011555555555554400AAAAAAAAAAAA84022AAAAAAAAAAAA3FE01E573AC901E3C0115 55555555554400AAAAAAAAAAAA84023FFFFFFFFFFFF3FE1C71C71C71C70C0115555555 55554400FFFFFFFFFFFFDC0240000000000003FD4E81B4E81B4E5C0115555555555544 00FFFFFFFFFFFFDC022AAAAAAAAAAAB3FD2B9D6480F2B9BC011555555555554400FFFF FFFFFFFFDC0215555555555563FD0BC1CD2DE3EF3C011555555555554400FFFFFFFFFF FFDC0200000000000013FCDDDDDDDDDDDDAC011555555555554400FFFFFFFFFFFFDC01 D5555555555573FCAA49938827712C011555555555554400FFFFFFFFFFFFDC01AAAAAA AAAAAAC3FC7CC6BB5AA498EC011555555555554400FFFFFFFFFFFFDC01800000000000 13FC5555555555550C011555555555554400FFFFFFFFFFFFDC0155555555555563FC33 F5617839A56C011555555555554400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FC18A6DFC3 518A1C011555555555554400FFFFFFFFFFFFDC0100000000000003FC0369D0369D030C 011555555555554400FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FBE87C65A438209C011555 555555554400FFFFFFFFFFFFDC0055555555555563FBD6480F2B9D63BC011555555555 554400FFFFFFFFFFFFDC0000000000000013FBD0369D0369CF6C011555555555554400 FFFFFFFFFFFFDBFF55555555555583FBD6480F2B9D63BC011555555555554400FFFFFF FFFFFFDBFE555555555555B3FBE87C65A438208C011555555555554400FFFFFFFFFFFF DBCC80000000000003FC0369D0369D030C011555555555554400FFFFFFFFFFFFD3FE55 5555555554F3FC18A6DFC3518A0C011555555555554400FFFFFFFFFFFFD3FF55555555 555523FC33F5617839A55C011555555555554400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3 FC555555555554EC011555555555554400FFFFFFFFFFFFD40055555555555533FC7CC6 BB5AA498CC011555555555554400FFFFFFFFFFFFD400AAAAAAAAAAAA83FCAA49938827 70EC011555555555554400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FCDDDDDDDDDDDD5C01 1555555555554400FFFFFFFFFFFFD4012AAAAAAAAAAA93FD0BC1CD2DE3EF1C01155555 5555554400FFFFFFFFFFFFD40155555555555543FD2B9D6480F2B99C01155555555555 4400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FD4E81B4E81B4E4C011555555555554400FF FFFFFFFFFFD401AAAAAAAAAAAAA3FD746EBE635DAD1C011555555555554400FFFFFFFF FFFFD401D5555555555553FD9D6480F2B9D61C011555555555554400FFFFFFFFFFFFD4 0200000000000003FDC962FC962FC94C011555555555554400FFFFFFFFFFFFD4021555 5555555553FDF86A314DBF866C011555555555554400FFFFFFFFFFFFD4022AAAAAAAAA AAA3FE153D0F8CB486EC011555555555554400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE 2FC962FC962FAC0115555555555544012AAAAAAAAAAA9C0240000000000003FD79BE02 468ACEEC0115555555555544012AAAAAAAAAAA9C022AAAAAAAAAAAB3FD56D9B1DF623A 4C0115555555555544012AAAAAAAAAAA9C0215555555555563FD36FE1A8C536FCC0115 555555555544012AAAAAAAAAAA9C0200000000000013FD1A2B3C4D5E6F6C0115555555 555544012AAAAAAAAAAA9C01D5555555555573FD0061172283392C0115555555555544 012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FCD33F5617839A0C0115555555555544012AAA AAAAAAAA9C0180000000000013FCABCDF01234562C0115555555555544012AAAAAAAAA AA9C0155555555555563FC8A6DFC3518A68C0115555555555544012AAAAAAAAAAA9C01 2AAAAAAAAAAAB3FC6F1F7A80308B3C0115555555555544012AAAAAAAAAAA9C01000000 00000003FC59E26AF37C042C0115555555555544012AAAAAAAAAAA9C00AAAAAAAAAAAA B3FC4AB6CD8EFB116C0115555555555544012AAAAAAAAAAA9C0055555555555563FC41 9CA252ADB2FC0115555555555544012AAAAAAAAAAA9C0000000000000013FC3E93E93E 93E8DC0115555555555544012AAAAAAAAAAA9BFF55555555555583FC419CA252ADB30C 0115555555555544012AAAAAAAAAAA9BFE555555555555B3FC4AB6CD8EFB116C011555 5555555544012AAAAAAAAAAA9BCC80000000000003FC59E26AF37C042C011555555555 5544012AAAAAAAAAAA93FE555555555554F3FC6F1F7A80308B2C011555555555554401 2AAAAAAAAAAA93FF55555555555523FC8A6DFC3518A67C0115555555555544012AAAAA AAAAAA93FFFFFFFFFFFFFFC3FCABCDF01234560C0115555555555544012AAAAAAAAAAA 940055555555555533FCD33F56178399EC0115555555555544012AAAAAAAAAAA9400AA AAAAAAAAAA83FD0061172283390C0115555555555544012AAAAAAAAAAA9400FFFFFFFF FFFFD3FD1A2B3C4D5E6F4C0115555555555544012AAAAAAAAAAA94012AAAAAAAAAAA93 FD36FE1A8C536FAC0115555555555544012AAAAAAAAAAA940155555555555543FD56D9 B1DF623A2C0115555555555544012AAAAAAAAAAA94017FFFFFFFFFFFF3FD79BE02468A CEDC0115555555555544012AAAAAAAAAAA9401AAAAAAAAAAAAA3FD9FAB0BC1CD2DBC01 15555555555544012AAAAAAAAAAA9401D5555555555553FDC8A0CE512956AC01155555 55555544012AAAAAAAAAAA940200000000000003FDF49F49F49F49CC01155555555555 44012AAAAAAAAAAA940215555555555553FE11D33F5617838C0115555555555544012A AAAAAAAAAA94022AAAAAAAAAAAA3FE2ADB363BEC472C0115555555555544012AAAAAAA AAAA94023FFFFFFFFFFFF3FE456789ABCDEFFC0115555555555544015555555555554C 0240000000000003FDA987654320FEAC0115555555555544015555555555554C022AAA AAAAAAAAB3FD86A314DBF86A1C0115555555555544015555555555554C021555555555 5563FD66C77D88E99F8C0115555555555544015555555555554C0200000000000013FD 49F49F49F49F2C0115555555555544015555555555554C01D5555555555573FD302A7A 1F1968EC0115555555555544015555555555554C01AAAAAAAAAAAAC3FD19690E0857FC DC0115555555555544015555555555554C0180000000000013FD05B05B05B05AEC0115 555555555544015555555555554C0155555555555563FCEA00C22E45061C0115555555 555544015555555555554C012AAAAAAAAAAAB3FCCEB240795CEACC0115555555555544 015555555555554C0100000000000003FCB97530ECA863BC0115555555555544015555 555555554C00AAAAAAAAAAAAB3FCAA4993882770FC0115555555555544015555555555 554C0055555555555563FCA12F684BDA128C0115555555555544015555555555554C00 00000000000013FC9E26AF37C0486C0115555555555544015555555555554BFF555555 55555583FCA12F684BDA129C0115555555555544015555555555554BFE555555555555 B3FCAA4993882770FC0115555555555544015555555555554BCC80000000000003FCB9 7530ECA863BC01155555555555440155555555555543FE555555555554F3FCCEB24079 5CEABC01155555555555440155555555555543FF55555555555523FCEA00C22E45060C 01155555555555440155555555555543FFFFFFFFFFFFFFC3FD05B05B05B05ACC011555 555555554401555555555555440055555555555533FD19690E0857FCBC011555555555 5544015555555555554400AAAAAAAAAAAA83FD302A7A1F1968DC011555555555554401 5555555555554400FFFFFFFFFFFFD3FD49F49F49F49F0C011555555555554401555555 55555544012AAAAAAAAAAA93FD66C77D88E99F6C011555555555554401555555555555 440155555555555543FD86A314DBF869FC01155555555555440155555555555544017F FFFFFFFFFFF3FDA987654320FE9C0115555555555544015555555555554401AAAAAAAA AAAAA3FDCF746EBE635D7C0115555555555544015555555555554401D5555555555553 FDF86A314DBF866C011555555555554401555555555555440200000000000003FE1234 56789ABCCC011555555555554401555555555555440215555555555553FE29B7F0D462 9B6C01155555555555440155555555555544022AAAAAAAAAAAA3FE42BFE7BA375F1C01 155555555555440155555555555544023FFFFFFFFFFFF3FE5D4C3B2A1907DC01155555 55555544017FFFFFFFFFFFFC0240000000000003FDDDDDDDDDDDDDBC01155555555555 44017FFFFFFFFFFFFC022AAAAAAAAAAAB3FDBAF98D76B5491C0115555555555544017F FFFFFFFFFFFC0215555555555563FD9B1DF623A67E9C0115555555555544017FFFFFFF FFFFFC0200000000000013FD7E4B17E4B17E3C0115555555555544017FFFFFFFFFFFFC 01D5555555555573FD6480F2B9D647FC0115555555555544017FFFFFFFFFFFFC01AAAA AAAAAAAAC3FD4DBF86A314DBDC0115555555555544017FFFFFFFFFFFFC018000000000 0013FD3A06D3A06D39EC0115555555555544017FFFFFFFFFFFFC0155555555555563FD 2956D9B1DF621C0115555555555544017FFFFFFFFFFFFC012AAAAAAAAAAAB3FD1BAF98 D76B546C0115555555555544017FFFFFFFFFFFFC0100000000000003FD111111111110 EC0115555555555544017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD097B425ED0978C0115 555555555544017FFFFFFFFFFFFC0055555555555563FD04EE2CC0A9E85C0115555555 555544017FFFFFFFFFFFFC0000000000000013FD0369D0369D034C0115555555555544 017FFFFFFFFFFFFBFF55555555555583FD04EE2CC0A9E85C0115555555555544017FFF FFFFFFFFFBFE555555555555B3FD097B425ED0978C0115555555555544017FFFFFFFFF FFFBCC80000000000003FD111111111110EC0115555555555544017FFFFFFFFFFFF3FE 555555555554F3FD1BAF98D76B546C0115555555555544017FFFFFFFFFFFF3FF555555 55555523FD2956D9B1DF621C0115555555555544017FFFFFFFFFFFF3FFFFFFFFFFFFFF C3FD3A06D3A06D39DC0115555555555544017FFFFFFFFFFFF40055555555555533FD4D BF86A314DBCC0115555555555544017FFFFFFFFFFFF400AAAAAAAAAAAA83FD6480F2B9 D647EC0115555555555544017FFFFFFFFFFFF400FFFFFFFFFFFFD3FD7E4B17E4B17E1C 0115555555555544017FFFFFFFFFFFF4012AAAAAAAAAAA93FD9B1DF623A67E6C011555 5555555544017FFFFFFFFFFFF40155555555555543FDBAF98D76B5490C011555555555 5544017FFFFFFFFFFFF4017FFFFFFFFFFFF3FDDDDDDDDDDDDDAC011555555555554401 7FFFFFFFFFFFF401AAAAAAAAAAAAA3FE01E573AC901E4C0115555555555544017FFFFF FFFFFFF401D5555555555553FE166054F43E32CC0115555555555544017FFFFFFFFFFF F40200000000000003FE2C5F92C5F92C5C0115555555555544017FFFFFFFFFFFF40215 555555555553FE43E32D21C10AEC0115555555555544017FFFFFFFFFFFF4022AAAAAAA AAAAA3FE5CEB240795CE9C0115555555555544017FFFFFFFFFFFF4023FFFFFFFFFFFF3 FE7777777777775C011555555555554401AAAAAAAAAAAAAC0240000000000003FE0B60 B60B60B60C011555555555554401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FDF3DD1BAF98 D75C011555555555554401AAAAAAAAAAAAAC0215555555555563FDD401845C8A0CDC01 1555555555554401AAAAAAAAAAAAAC0200000000000013FDB72EA61D950C7C01155555 5555554401AAAAAAAAAAAAAC01D5555555555573FD9D6480F2B9D63C01155555555555 4401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD86A314DBF86A1C011555555555554401AA AAAAAAAAAAAC0180000000000013FD72EA61D950C82C011555555555554401AAAAAAAA AAAAAC0155555555555563FD623A67EAC2F05C011555555555554401AAAAAAAAAAAAAC 012AAAAAAAAAAAB3FD549327104EE2AC011555555555554401AAAAAAAAAAAAAC010000 0000000003FD49F49F49F49F2C011555555555554401AAAAAAAAAAAAAC00AAAAAAAAAA AAB3FD425ED097B425CC011555555555554401AAAAAAAAAAAAAC0055555555555563FD 3DD1BAF98D769C011555555555554401AAAAAAAAAAAAAC0000000000000013FD3C4D5E 6F80918C011555555555554401AAAAAAAAAAAAABFF55555555555583FD3DD1BAF98D76 9C011555555555554401AAAAAAAAAAAAABFE555555555555B3FD425ED097B425CC0115 55555555554401AAAAAAAAAAAAABCC80000000000003FD49F49F49F49F2C0115555555 55554401AAAAAAAAAAAAA3FE555555555554F3FD549327104EE2AC0115555555555544 01AAAAAAAAAAAAA3FF55555555555523FD623A67EAC2F05C011555555555554401AAAA AAAAAAAAA3FFFFFFFFFFFFFFC3FD72EA61D950C81C011555555555554401AAAAAAAAAA AAA40055555555555533FD86A314DBF86A0C011555555555554401AAAAAAAAAAAAA400 AAAAAAAAAAAA83FD9D6480F2B9D62C011555555555554401AAAAAAAAAAAAA400FFFFFF FFFFFFD3FDB72EA61D950C5C011555555555554401AAAAAAAAAAAAA4012AAAAAAAAAAA 93FDD401845C8A0CAC011555555555554401AAAAAAAAAAAAA40155555555555543FDF3 DD1BAF98D74C011555555555554401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FE0B60B60B 60B5FC011555555555554401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FE1E573AC901E56C 011555555555554401AAAAAAAAAAAAA401D5555555555553FE32D21C10AFF9EC011555 555555554401AAAAAAAAAAAAA40200000000000003FE48D159E26AF37C011555555555 554401AAAAAAAAAAAAA40215555555555553FE6054F43E32D20C011555555555554401 AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE795CEB240795BC011555555555554401AAAAAA AAAAAAA4023FFFFFFFFFFFF3FE93E93E93E93E7C011555555555554401D55555555555 5C0240000000000003FE2A1907F6E5D4BC011555555555554401D555555555555C022A AAAAAAAAAAB3FE18A6DFC3518A6C011555555555554401D555555555555C0215555555 555563FE08B91419CA252C011555555555554401D555555555555C0200000000000013 FDF49F49F49F49EC011555555555554401D555555555555C01D5555555555573FDDAD5 24C9C413AC011555555555554401D555555555555C01AAAAAAAAAAAAC3FDC413B8B302 A78C011555555555554401D555555555555C0180000000000013FDB05B05B05B059C01 1555555555554401D555555555555C0155555555555563FD9FAB0BC1CD2DCC01155555 5555554401D555555555555C012AAAAAAAAAAAB3FD9203CAE759201C01155555555555 4401D555555555555C0100000000000003FD87654320FEDC9C011555555555554401D5 55555555555C00AAAAAAAAAAAAB3FD7FCF746EBE633C011555555555554401D5555555 55555C0055555555555563FD7B425ED097B40C011555555555554401D555555555555C 0000000000000013FD79BE02468ACEFC011555555555554401D555555555555BFF5555 5555555583FD7B425ED097B40C011555555555554401D555555555555BFE5555555555 55B3FD7FCF746EBE633C011555555555554401D555555555555BCC80000000000003FD 87654320FEDC9C011555555555554401D5555555555553FE555555555554F3FD9203CA E759201C011555555555554401D5555555555553FF55555555555523FD9FAB0BC1CD2D CC011555555555554401D5555555555553FFFFFFFFFFFFFFC3FDB05B05B05B058C0115 55555555554401D55555555555540055555555555533FDC413B8B302A77C0115555555 55554401D555555555555400AAAAAAAAAAAA83FDDAD524C9C4139C0115555555555544 01D555555555555400FFFFFFFFFFFFD3FDF49F49F49F49CC011555555555554401D555 5555555554012AAAAAAAAAAA93FE08B91419CA251C011555555555554401D555555555 55540155555555555543FE18A6DFC3518A5C011555555555554401D555555555555401 7FFFFFFFFFFFF3FE2A1907F6E5D4BC011555555555554401D555555555555401AAAAAA AAAAAAA3FE3D0F8CB487041C011555555555554401D555555555555401D55555555555 53FE518A6DFC35189C011555555555554401D55555555555540200000000000003FE67 89ABCDF0122C011555555555554401D55555555555540215555555555553FE7F0D4629 B7F0CC011555555555554401D5555555555554022AAAAAAAAAAAA3FE98153D0F8CB46C 011555555555554401D5555555555554023FFFFFFFFFFFF3FEB2A1907F6E5D3C011555 5555555544020000000000000C0240000000000003FE4B17E4B17E4B0C011555555555 5544020000000000000C022AAAAAAAAAAAB3FE39A5BC7DEA00CC011555555555554402 0000000000000C0215555555555563FE29B7F0D4629B7C011555555555554402000000 0000000C0200000000000013FE1B4E81B4E81B5C011555555555554402000000000000 0C01D5555555555573FE0E696F1F7A803C0115555555555544020000000000000C01AA AAAAAAAAAAC3FE0308B91419CA2C0115555555555544020000000000000C0180000000 000013FDF258BF258BF24C0115555555555544020000000000000C0155555555555563 FDE1A8C536FE1A7C0115555555555544020000000000000C012AAAAAAAAAAAB3FDD401 845C8A0CCC0115555555555544020000000000000C0100000000000003FDC962FC962F C94C0115555555555544020000000000000C00AAAAAAAAAAAAB3FDC1CD2DE3EF4FEC01 15555555555544020000000000000C0055555555555563FDBD401845C8A0BC01155555 55555544020000000000000C0000000000000013FDBBBBBBBBBBBBAC01155555555555 44020000000000000BFF55555555555583FDBD401845C8A0BC01155555555555440200 00000000000BFE555555555555B3FDC1CD2DE3EF4FEC01155555555555440200000000 00000BCC80000000000003FDC962FC962FC94C01155555555555440200000000000003 FE555555555554F3FDD401845C8A0CCC01155555555555440200000000000003FF5555 5555555523FDE1A8C536FE1A7C01155555555555440200000000000003FFFFFFFFFFFF FFC3FDF258BF258BF23C011555555555554402000000000000040055555555555533FE 0308B91419CA1C0115555555555544020000000000000400AAAAAAAAAAAA83FE0E696F 1F7A802C0115555555555544020000000000000400FFFFFFFFFFFFD3FE1B4E81B4E81B 4C01155555555555440200000000000004012AAAAAAAAAAA93FE29B7F0D4629B6C0115 55555555554402000000000000040155555555555543FE39A5BC7DEA00BC0115555555 5555440200000000000004017FFFFFFFFFFFF3FE4B17E4B17E4B0C0115555555555544 020000000000000401AAAAAAAAAAAAA3FE5E0E696F1F7A7C0115555555555544020000 000000000401D5555555555553FE72894AB6CD8EEC0115555555555544020000000000 00040200000000000003FE8888888888888C0115555555555544020000000000000402 15555555555553FEA00C22E450671C01155555555555440200000000000004022AAAAA AAAAAAA3FEB91419CA252ACC01155555555555440200000000000004023FFFFFFFFFFF F3FED3A06D3A06D38C0115555555555544021555555555555C0240000000000003FE6E 5D4C3B2A18FC0115555555555544021555555555555C022AAAAAAAAAAAB3FE5CEB2407 95CEBC0115555555555544021555555555555C0215555555555563FE4CFD585E0E696C 0115555555555544021555555555555C0200000000000013FE3E93E93E93E94C011555 5555555544021555555555555C01D5555555555573FE31AED6A9264E2C011555555555 5544021555555555555C01AAAAAAAAAAAAC3FE264E209DC5981C011555555555554402 1555555555555C0180000000000013FE1C71C71C71C71C011555555555554402155555 5555555C0155555555555563FE1419CA252ADB2C011555555555554402155555555555 5C012AAAAAAAAAAAB3FE0D4629B7F0D45C0115555555555544021555555555555C0100 000000000003FE07F6E5D4C3B29C0115555555555544021555555555555C00AAAAAAAA AAAAB3FE042BFE7BA375EC0115555555555544021555555555555C0055555555555563 FE01E573AC901E4C0115555555555544021555555555555C0000000000000013FE0123 456789ABCC0115555555555544021555555555555BFF55555555555583FE01E573AC90 1E4C0115555555555544021555555555555BFE555555555555B3FE042BFE7BA375EC01 15555555555544021555555555555BCC80000000000003FE07F6E5D4C3B29C01155555 555555440215555555555553FE555555555554F3FE0D4629B7F0D45C01155555555555 440215555555555553FF55555555555523FE1419CA252ADB2C01155555555555440215 555555555553FFFFFFFFFFFFFFC3FE1C71C71C71C70C01155555555555440215555555 5555540055555555555533FE264E209DC5980C01155555555555440215555555555554 00AAAAAAAAAAAA83FE31AED6A9264E0C0115555555555544021555555555555400FFFF FFFFFFFFD3FE3E93E93E93E93C01155555555555440215555555555554012AAAAAAAAA AA93FE4CFD585E0E695C011555555555554402155555555555540155555555555543FE 5CEB240795CEAC01155555555555440215555555555554017FFFFFFFFFFFF3FE6E5D4C 3B2A18FC0115555555555544021555555555555401AAAAAAAAAAAAA3FE8153D0F8CB48 6C0115555555555544021555555555555401D5555555555553FE95CEB240795CDC0115 55555555554402155555555555540200000000000003FEABCDF01234567C0115555555 55554402155555555555540215555555555553FEC3518A6DFC350C0115555555555544 0215555555555554022AAAAAAAAAAAA3FEDC598153D0F8BC0115555555555544021555 5555555554023FFFFFFFFFFFF3FEF6E5D4C3B2A17C0115555555555544022AAAAAAAAA AAAC0240000000000003FE93E93E93E93E7C0115555555555544022AAAAAAAAAAAAC02 2AAAAAAAAAAAB3FE8277166054F43C0115555555555544022AAAAAAAAAAAAC02155555 55555563FE72894AB6CD8EEC0115555555555544022AAAAAAAAAAAAC02000000000000 13FE641FDB97530ECC0115555555555544022AAAAAAAAAAAAC01D5555555555573FE57 3AC901E573AC0115555555555544022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE4BDA12F6 84BD9C0115555555555544022AAAAAAAAAAAAC0180000000000013FE41FDB97530EC9C 0115555555555544022AAAAAAAAAAAAC0155555555555563FE39A5BC7DEA00AC011555 5555555544022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE32D21C10AFF9EC011555555555 5544022AAAAAAAAAAAAC0100000000000003FE2D82D82D82D81C011555555555554402 2AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE29B7F0D4629B7C0115555555555544022AAAAA AAAAAAAC0055555555555563FE277166054F43CC0115555555555544022AAAAAAAAAAA AC0000000000000013FE26AF37C048D13C0115555555555544022AAAAAAAAAAAABFF55 555555555583FE277166054F43CC0115555555555544022AAAAAAAAAAAABFE55555555 5555B3FE29B7F0D4629B6C0115555555555544022AAAAAAAAAAAABCC80000000000003 FE2D82D82D82D81C0115555555555544022AAAAAAAAAAAA3FE555555555554F3FE32D2 1C10AFF9DC0115555555555544022AAAAAAAAAAAA3FF55555555555523FE39A5BC7DEA 00AC0115555555555544022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE41FDB97530EC8C01 15555555555544022AAAAAAAAAAAA40055555555555533FE4BDA12F684BD8C01155555 55555544022AAAAAAAAAAAA400AAAAAAAAAAAA83FE573AC901E5738C01155555555555 44022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE641FDB97530EBC0115555555555544022A AAAAAAAAAAA4012AAAAAAAAAAA93FE72894AB6CD8EDC0115555555555544022AAAAAAA AAAAA40155555555555543FE8277166054F42C0115555555555544022AAAAAAAAAAAA4 017FFFFFFFFFFFF3FE93E93E93E93E7C0115555555555544022AAAAAAAAAAAA401AAAA AAAAAAAAA3FEA6DFC3518A6DEC0115555555555544022AAAAAAAAAAAA401D555555555 5553FEBB5AA49938825C0115555555555544022AAAAAAAAAAAA40200000000000003FE D159E26AF37BFC0115555555555544022AAAAAAAAAAAA40215555555555553FEE8DD7C C6BB5A8C0115555555555544022AAAAAAAAAAAA4022AAAAAAAAAAAA3FF00F2B9D6480F 2C0115555555555544022AAAAAAAAAAAA4023FFFFFFFFFFFF3FF0E38E38E38E38C0115 555555555544023FFFFFFFFFFFFC0240000000000003FEBBBBBBBBBBBBAC0115555555 555544023FFFFFFFFFFFFC022AAAAAAAAAAAB3FEAA49938827715C0115555555555544 023FFFFFFFFFFFFC0215555555555563FE9A5BC7DEA00C0C0115555555555544023FFF FFFFFFFFFC0200000000000013FE8BF258BF258BEC0115555555555544023FFFFFFFFF FFFC01D5555555555573FE7F0D4629B7F0BC0115555555555544023FFFFFFFFFFFFC01 AAAAAAAAAAAAC3FE73AC901E573ABC0115555555555544023FFFFFFFFFFFFC01800000 00000013FE69D0369D0369BC0115555555555544023FFFFFFFFFFFFC01555555555555 63FE617839A5BC7DCC0115555555555544023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE5A A4993882770C0115555555555544023FFFFFFFFFFFFC0100000000000003FE55555555 55553C0115555555555544023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE518A6DFC35189C 0115555555555544023FFFFFFFFFFFFC0055555555555563FE4F43E32D21C0EC011555 5555555544023FFFFFFFFFFFFC0000000000000013FE4E81B4E81B4E5C011555555555 5544023FFFFFFFFFFFFBFF55555555555583FE4F43E32D21C0EC011555555555554402 3FFFFFFFFFFFFBFE555555555555B3FE518A6DFC35188C0115555555555544023FFFFF FFFFFFFBCC80000000000003FE5555555555553C0115555555555544023FFFFFFFFFFF F3FE555555555554F3FE5AA499388276FC0115555555555544023FFFFFFFFFFFF3FF55 555555555523FE617839A5BC7DCC0115555555555544023FFFFFFFFFFFF3FFFFFFFFFF FFFFC3FE69D0369D0369AC0115555555555544023FFFFFFFFFFFF40055555555555533 FE73AC901E573AAC0115555555555544023FFFFFFFFFFFF400AAAAAAAAAAAA83FE7F0D 4629B7F0AC0115555555555544023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE8BF258BF25 8BDC0115555555555544023FFFFFFFFFFFF4012AAAAAAAAAAA93FE9A5BC7DEA00BFC01 15555555555544023FFFFFFFFFFFF40155555555555543FEAA49938827714C01155555 55555544023FFFFFFFFFFFF4017FFFFFFFFFFFF3FEBBBBBBBBBBBB9C01155555555555 44023FFFFFFFFFFFF401AAAAAAAAAAAAA3FECEB240795CEB0C0115555555555544023F FFFFFFFFFFF401D5555555555553FEE32D21C10AFF7C0115555555555544023FFFFFFF FFFFF40200000000000003FEF92C5F92C5F91C0115555555555544023FFFFFFFFFFFF4 0215555555555553FF0857FCF746EBDC0115555555555544023FFFFFFFFFFFF4022AAA AAAAAAAAA3FF14DBF86A314DBC0115555555555544023FFFFFFFFFFFF4023FFFFFFFFF FFF3FF2222222222221C010AAAAAAAAAAA9C024000000000000C0240000000000003FD CCCCCCCCCCCCBC010AAAAAAAAAAA9C024000000000000C022AAAAAAAAAAAB3FDA9E87C 65A4381C010AAAAAAAAAAA9C024000000000000C0215555555555563FD8A0CE512956D 9C010AAAAAAAAAAA9C024000000000000C0200000000000013FD6D3A06D3A06D3C010A AAAAAAAAAA9C024000000000000C01D5555555555573FD536FE1A8C536FC010AAAAAAA AAAA9C024000000000000C01AAAAAAAAAAAAC3FD3CAE759203CADC010AAAAAAAAAAA9C 024000000000000C0180000000000013FD28F5C28F5C28EC010AAAAAAAAAAA9C024000 000000000C0155555555555563FD1845C8A0CE511C010AAAAAAAAAAA9C024000000000 000C012AAAAAAAAAAAB3FD0A9E87C65A436C010AAAAAAAAAAA9C024000000000000C01 00000000000003FCFFFFFFFFFFFFCC010AAAAAAAAAAA9C024000000000000C00AAAAAA AAAAAAB3FCF0D4629B7F0D0C010AAAAAAAAAAA9C024000000000000C00555555555555 63FCE7BA375F31AE9C010AAAAAAAAAAA9C024000000000000C0000000000000013FCE4 B17E4B17E47C010AAAAAAAAAAA9C024000000000000BFF55555555555583FCE7BA375F 31AEAC010AAAAAAAAAAA9C024000000000000BFE555555555555B3FCF0D4629B7F0D0C 010AAAAAAAAAAA9C024000000000000BCC80000000000003FCFFFFFFFFFFFFCC010AAA AAAAAAAA9C0240000000000003FE555555555554F3FD0A9E87C65A436C010AAAAAAAAA AA9C0240000000000003FF55555555555523FD1845C8A0CE511C010AAAAAAAAAAA9C02 40000000000003FFFFFFFFFFFFFFC3FD28F5C28F5C28DC010AAAAAAAAAAA9C02400000 000000040055555555555533FD3CAE759203CACC010AAAAAAAAAAA9C02400000000000 0400AAAAAAAAAAAA83FD536FE1A8C536EC010AAAAAAAAAAA9C024000000000000400FF FFFFFFFFFFD3FD6D3A06D3A06D1C010AAAAAAAAAAA9C0240000000000004012AAAAAAA AAAA93FD8A0CE512956D6C010AAAAAAAAAAA9C02400000000000040155555555555543 FDA9E87C65A4380C010AAAAAAAAAAA9C0240000000000004017FFFFFFFFFFFF3FDCCCC CCCCCCCCAC010AAAAAAAAAAA9C024000000000000401AAAAAAAAAAAAA3FDF2B9D6480F 2B8C010AAAAAAAAAAA9C024000000000000401D5555555555553FE0DD7CC6BB5AA4C01 0AAAAAAAAAAA9C02400000000000040200000000000003FE23D70A3D70A3DC010AAAAA AAAAAA9C02400000000000040215555555555553FE3B5AA49938826C010AAAAAAAAAAA 9C0240000000000004022AAAAAAAAAAAA3FE54629B7F0D461C010AAAAAAAAAAA9C0240 000000000004023FFFFFFFFFFFF3FE6EEEEEEEEEEEDC010AAAAAAAAAAA9C022AAAAAAA AAAABC0240000000000003FD987654320FEDBC010AAAAAAAAAAA9C022AAAAAAAAAAABC 022AAAAAAAAAAAB3FD759203CAE7592C010AAAAAAAAAAA9C022AAAAAAAAAAABC021555 5555555563FD55B66C77D88E9C010AAAAAAAAAAA9C022AAAAAAAAAAABC020000000000 0013FD38E38E38E38E3C010AAAAAAAAAAA9C022AAAAAAAAAAABC01D5555555555573FD 1F19690E0857FC010AAAAAAAAAAA9C022AAAAAAAAAAABC01AAAAAAAAAAAAC3FD0857FC F746EBEC010AAAAAAAAAAA9C022AAAAAAAAAAABC0180000000000013FCE93E93E93E93 DC010AAAAAAAAAAA9C022AAAAAAAAAAABC0155555555555563FCC7DEA00C22E43C010A AAAAAAAAAA9C022AAAAAAAAAAABC012AAAAAAAAAAAB3FCAC901E573AC8EC010AAAAAAA AAAA9C022AAAAAAAAAAABC0100000000000003FC97530ECA8641DC010AAAAAAAAAAA9C 022AAAAAAAAAAABC00AAAAAAAAAAAAB3FC88277166054F1C010AAAAAAAAAAA9C022AAA AAAAAAAABC0055555555555563FC7F0D4629B7F0AC010AAAAAAAAAAA9C022AAAAAAAAA AABC0000000000000013FC7C048D159E268C010AAAAAAAAAAA9C022AAAAAAAAAAABBFF 55555555555583FC7F0D4629B7F0BC010AAAAAAAAAAA9C022AAAAAAAAAAABBFE555555 555555B3FC88277166054F1C010AAAAAAAAAAA9C022AAAAAAAAAAABBCC800000000000 03FC97530ECA8641DC010AAAAAAAAAAA9C022AAAAAAAAAAAB3FE555555555554F3FCAC 901E573AC8DC010AAAAAAAAAAA9C022AAAAAAAAAAAB3FF55555555555523FCC7DEA00C 22E42C010AAAAAAAAAAA9C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FCE93E93E93E93BC 010AAAAAAAAAAA9C022AAAAAAAAAAAB40055555555555533FD0857FCF746EBCC010AAA AAAAAAAA9C022AAAAAAAAAAAB400AAAAAAAAAAAA83FD1F19690E0857EC010AAAAAAAAA AA9C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FD38E38E38E38E1C010AAAAAAAAAAA9C02 2AAAAAAAAAAAB4012AAAAAAAAAAA93FD55B66C77D88E7C010AAAAAAAAAAA9C022AAAAA AAAAAAB40155555555555543FD759203CAE7590C010AAAAAAAAAAA9C022AAAAAAAAAAA B4017FFFFFFFFFFFF3FD987654320FEDAC010AAAAAAAAAAA9C022AAAAAAAAAAAB401AA AAAAAAAAAAA3FDBE635DAD524C8C010AAAAAAAAAAA9C022AAAAAAAAAAAB401D5555555 555553FDE759203CAE757C010AAAAAAAAAAA9C022AAAAAAAAAAAB40200000000000003 FE09ABCDF012345C010AAAAAAAAAAA9C022AAAAAAAAAAAB40215555555555553FE212F 684BDA12EC010AAAAAAAAAAA9C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE3A375F31AE D69C010AAAAAAAAAAA9C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE54C3B2A1907F6C01 0AAAAAAAAAAA9C021555555555556C0240000000000003FD68ACF13579BDFC010AAAAA AAAAAA9C021555555555556C022AAAAAAAAAAAB3FD45C8A0CE51295C010AAAAAAAAAAA 9C021555555555556C0215555555555563FD25ED097B425EDC010AAAAAAAAAAA9C0215 55555555556C0200000000000013FD091A2B3C4D5E7C010AAAAAAAAAAA9C0215555555 55556C01D5555555555573FCDEA00C22E4506C010AAAAAAAAAAA9C021555555555556C 01AAAAAAAAAAAAC3FCB11D33F561782C010AAAAAAAAAAA9C021555555555556C018000 0000000013FC89ABCDF012344C010AAAAAAAAAAA9C021555555555556C015555555555 5563FC684BDA12F684AC010AAAAAAAAAAA9C021555555555556C012AAAAAAAAAAAB3FC 4CFD585E0E695C010AAAAAAAAAAA9C021555555555556C0100000000000003FC37C048 D159E24C010AAAAAAAAAAA9C021555555555556C00AAAAAAAAAAAAB3FC2894AB6CD8EF 8C010AAAAAAAAAAA9C021555555555556C0055555555555563FC1F7A80308B911C010A AAAAAAAAAA9C021555555555556C0000000000000013FC1C71C71C71C6FC010AAAAAAA AAAA9C021555555555556BFF55555555555583FC1F7A80308B912C010AAAAAAAAAAA9C 021555555555556BFE555555555555B3FC2894AB6CD8EF8C010AAAAAAAAAAA9C021555 555555556BCC80000000000003FC37C048D159E24C010AAAAAAAAAAA9C021555555555 5563FE555555555554F3FC4CFD585E0E694C010AAAAAAAAAAA9C0215555555555563FF 55555555555523FC684BDA12F6849C010AAAAAAAAAAA9C0215555555555563FFFFFFFF FFFFFFC3FC89ABCDF012342C010AAAAAAAAAAA9C021555555555556400555555555555 33FCB11D33F561780C010AAAAAAAAAAA9C021555555555556400AAAAAAAAAAAA83FCDE A00C22E4502C010AAAAAAAAAAA9C021555555555556400FFFFFFFFFFFFD3FD091A2B3C 4D5E5C010AAAAAAAAAAA9C0215555555555564012AAAAAAAAAAA93FD25ED097B425EBC 010AAAAAAAAAAA9C02155555555555640155555555555543FD45C8A0CE51293C010AAA AAAAAAAA9C0215555555555564017FFFFFFFFFFFF3FD68ACF13579BDEC010AAAAAAAAA AA9C021555555555556401AAAAAAAAAAAAA3FD8E99FAB0BC1CBC010AAAAAAAAAAA9C02 1555555555556401D5555555555553FDB78FBD401845BC010AAAAAAAAAAA9C02155555 555555640200000000000003FDE38E38E38E38EC010AAAAAAAAAAA9C02155555555555 640215555555555553FE094AB6CD8EFB0C010AAAAAAAAAAA9C0215555555555564022A AAAAAAAAAAA3FE2252ADB363BEBC010AAAAAAAAAAA9C0215555555555564023FFFFFFF FFFFF3FE3CDF012345677C010AAAAAAAAAAA9C020000000000001C0240000000000003 FD3D70A3D70A3D7C010AAAAAAAAAAA9C020000000000001C022AAAAAAAAAAAB3FD1A8C 536FE1A8DC010AAAAAAAAAAA9C020000000000001C0215555555555563FCF5617839A5 BC8C010AAAAAAAAAAA9C020000000000001C0200000000000013FCBBBBBBBBBBBBDC01 0AAAAAAAAAAA9C020000000000001C01D5555555555573FC88277166054F5C010AAAAA AAAAAA9C020000000000001C01AAAAAAAAAAAAC3FC5AA4993882771C010AAAAAAAAAAA 9C020000000000001C0180000000000013FC3333333333333C010AAAAAAAAAAA9C0200 00000000001C0155555555555563FC11D33F5617839C010AAAAAAAAAAA9C0200000000 00001C012AAAAAAAAAAAB3FBED097B425ED08C010AAAAAAAAAAA9C020000000000001C 0100000000000003FBC28F5C28F5C26C010AAAAAAAAAAA9C020000000000001C00AAAA AAAAAAAAB3FBA438215FF3DCFC010AAAAAAAAAAA9C020000000000001C005555555555 5563FB9203CAE759201C010AAAAAAAAAAA9C020000000000001C0000000000000013FB 8BF258BF258BCC010AAAAAAAAAAA9C020000000000001BFF55555555555583FB9203CA E759201C010AAAAAAAAAAA9C020000000000001BFE555555555555B3FBA438215FF3DC EC010AAAAAAAAAAA9C020000000000001BCC80000000000003FBC28F5C28F5C25C010A AAAAAAAAAA9C0200000000000013FE555555555554F3FBED097B425ED05C010AAAAAAA AAAA9C0200000000000013FF55555555555523FC11D33F5617838C010AAAAAAAAAAA9C 0200000000000013FFFFFFFFFFFFFFC3FC3333333333331C010AAAAAAAAAAA9C020000 00000000140055555555555533FC5AA499388276FC010AAAAAAAAAAA9C020000000000 001400AAAAAAAAAAAA83FC88277166054F1C010AAAAAAAAAAA9C020000000000001400 FFFFFFFFFFFFD3FCBBBBBBBBBBBB8C010AAAAAAAAAAA9C0200000000000014012AAAAA AAAAAA93FCF5617839A5BC4C010AAAAAAAAAAA9C020000000000001401555555555555 43FD1A8C536FE1A8BC010AAAAAAAAAAA9C0200000000000014017FFFFFFFFFFFF3FD3D 70A3D70A3D5C010AAAAAAAAAAA9C020000000000001401AAAAAAAAAAAAA3FD635DAD52 4C9C3C010AAAAAAAAAAA9C020000000000001401D5555555555553FD8C536FE1A8C52C 010AAAAAAAAAAA9C02000000000000140200000000000003FDB851EB851EB84C010AAA AAAAAAAA9C02000000000000140215555555555553FDE759203CAE758C010AAAAAAAAA AA9C0200000000000014022AAAAAAAAAAAA3FE0CB487042BFE7C010AAAAAAAAAAA9C02 00000000000014023FFFFFFFFFFFF3FE2740DA740DA73C010AAAAAAAAAAA9C01D55555 5555557C0240000000000003FD16C16C16C16C1C010AAAAAAAAAAA9C01D55555555555 7C022AAAAAAAAAAAB3FCE7BA375F31AEEC010AAAAAAAAAAA9C01D555555555557C0215 555555555563FCA80308B91419DC010AAAAAAAAAAA9C01D555555555557C0200000000 000013FC6E5D4C3B2A192C010AAAAAAAAAAA9C01D555555555557C01D5555555555573 FC3AC901E573ACAC010AAAAAAAAAAA9C01D555555555557C01AAAAAAAAAAAAC3FC0D46 29B7F0D46C010AAAAAAAAAAA9C01D555555555557C0180000000000013FBCBA9876543 210C010AAAAAAAAAAA9C01D555555555557C0155555555555563FB88E99FAB0BC1BC01 0AAAAAAAAAAA9C01D555555555557C012AAAAAAAAAAAB3FB524C9C413B8B1C010AAAAA AAAAAA9C01D555555555557C0100000000000003FB27D27D27D27D0C010AAAAAAAAAAA 9C01D555555555557C00AAAAAAAAAAAAB3FB097B425ED0979C010AAAAAAAAAAA9C01D5 55555555557C0055555555555563FAEE8DD7CC6BB56C010AAAAAAAAAAA9C01D5555555 55557C0000000000000013FAE26AF37C048CDC010AAAAAAAAAAA9C01D555555555557B FF55555555555583FAEE8DD7CC6BB55C010AAAAAAAAAAA9C01D555555555557BFE5555 55555555B3FB097B425ED0978C010AAAAAAAAAAA9C01D555555555557BCC8000000000 0003FB27D27D27D27CFC010AAAAAAAAAAA9C01D5555555555573FE555555555554F3FB 524C9C413B8AFC010AAAAAAAAAAA9C01D5555555555573FF55555555555523FB88E99F AB0BC19C010AAAAAAAAAAA9C01D5555555555573FFFFFFFFFFFFFFC3FBCBA987654320 CC010AAAAAAAAAAA9C01D55555555555740055555555555533FC0D4629B7F0D44C010A AAAAAAAAAA9C01D555555555557400AAAAAAAAAAAA83FC3AC901E573AC6C010AAAAAAA AAAA9C01D555555555557400FFFFFFFFFFFFD3FC6E5D4C3B2A18DC010AAAAAAAAAAA9C 01D5555555555574012AAAAAAAAAAA93FCA80308B914199C010AAAAAAAAAAA9C01D555 55555555740155555555555543FCE7BA375F31AEAC010AAAAAAAAAAA9C01D555555555 5574017FFFFFFFFFFFF3FD16C16C16C16C0C010AAAAAAAAAAA9C01D555555555557401 AAAAAAAAAAAAA3FD3CAE759203CADC010AAAAAAAAAAA9C01D555555555557401D55555 55555553FD65A438215FF3DC010AAAAAAAAAAA9C01D555555555557402000000000000 03FD91A2B3C4D5E70C010AAAAAAAAAAA9C01D55555555555740215555555555553FDC0 A9E87C65A42C010AAAAAAAAAAA9C01D5555555555574022AAAAAAAAAAAA3FDF2B9D648 0F2B8C010AAAAAAAAAAA9C01D5555555555574023FFFFFFFFFFFF3FE13E93E93E93E8C 010AAAAAAAAAAA9C01AAAAAAAAAAAACC0240000000000003FCE93E93E93E93CC010AAA AAAAAAAA9C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FCA375F31AED6A9C010AAAAAAAAA AA9C01AAAAAAAAAAAACC0215555555555563FC63BEC474CFD57C010AAAAAAAAAAA9C01 AAAAAAAAAAAACC0200000000000013FC2A1907F6E5D4CC010AAAAAAAAAAA9C01AAAAAA AAAAAACC01D5555555555573FBED097B425ED08C010AAAAAAAAAAA9C01AAAAAAAAAAAA CC01AAAAAAAAAAAAC3FB9203CAE759200C010AAAAAAAAAAA9C01AAAAAAAAAAAACC0180 000000000013FB4320FEDCBA984C010AAAAAAAAAAA9C01AAAAAAAAAAAACC0155555555 555563FB006117228338FC010AAAAAAAAAAA9C01AAAAAAAAAAAACC012AAAAAAAAAAAB3 FA938827716604BC010AAAAAAAAAAA9C01AAAAAAAAAAAACC0100000000000003FA3E93 E93E93E88C010AAAAAAAAAAA9C01AAAAAAAAAAAACC00AAAAAAAAAAAAB3FA01E573AC90 1DAC010AAAAAAAAAAA9C01AAAAAAAAAAAACC0055555555555563F9BAF98D76B547BC01 0AAAAAAAAAAA9C01AAAAAAAAAAAACC0000000000000013F9A2B3C4D5E6F69C010AAAAA AAAAAA9C01AAAAAAAAAAAACBFF55555555555583F9BAF98D76B547AC010AAAAAAAAAAA 9C01AAAAAAAAAAAACBFE555555555555B3FA01E573AC901D9C010AAAAAAAAAAA9C01AA AAAAAAAAAACBCC80000000000003FA3E93E93E93E87C010AAAAAAAAAAA9C01AAAAAAAA AAAAC3FE555555555554F3FA9388277166047C010AAAAAAAAAAA9C01AAAAAAAAAAAAC3 FF55555555555523FB006117228338DC010AAAAAAAAAAA9C01AAAAAAAAAAAAC3FFFFFF FFFFFFFFC3FB4320FEDCBA980C010AAAAAAAAAAA9C01AAAAAAAAAAAAC4005555555555 5533FB9203CAE7591FCC010AAAAAAAAAAA9C01AAAAAAAAAAAAC400AAAAAAAAAAAA83FB ED097B425ED01C010AAAAAAAAAAA9C01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FC2A1907 F6E5D47C010AAAAAAAAAAA9C01AAAAAAAAAAAAC4012AAAAAAAAAAA93FC63BEC474CFD5 3C010AAAAAAAAAAA9C01AAAAAAAAAAAAC40155555555555543FCA375F31AED6A4C010A AAAAAAAAAA9C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FCE93E93E93E93AC010AAAAAAA AAAA9C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FD1A8C536FE1A8AC010AAAAAAAAAAA9C 01AAAAAAAAAAAAC401D5555555555553FD438215FF3DD1AC010AAAAAAAAAAA9C01AAAA AAAAAAAAC40200000000000003FD6F8091A2B3C4CC010AAAAAAAAAAA9C01AAAAAAAAAA AAC40215555555555553FD9E87C65A4381FC010AAAAAAAAAAA9C01AAAAAAAAAAAAC402 2AAAAAAAAAAAA3FDD097B425ED095C010AAAAAAAAAAA9C01AAAAAAAAAAAAC4023FFFFF FFFFFFF3FE02D82D82D82D7C010AAAAAAAAAAA9C018000000000001C02400000000000 03FCAE147AE147ADFC010AAAAAAAAAAA9C018000000000001C022AAAAAAAAAAAB3FC68 4BDA12F684BC010AAAAAAAAAAA9C018000000000001C0215555555555563FC2894AB6C D8EFAC010AAAAAAAAAAA9C018000000000001C0200000000000013FBDDDDDDDDDDDDEC 010AAAAAAAAAAA9C018000000000001C01D5555555555573FB76B549327104DC010AAA AAAAAAAA9C018000000000001C01AAAAAAAAAAAAC3FB1BAF98D76B546C010AAAAAAAAA AA9C018000000000001C0180000000000013FA9999999999995C010AAAAAAAAAAA9C01 8000000000001C0155555555555563FA1419CA252ADAAC010AAAAAAAAAAA9C01800000 0000001C012AAAAAAAAAAAB3F94DBF86A314DACC010AAAAAAAAAAA9C01800000000000 1C0100000000000003F847AE147AE1450C010AAAAAAAAAAA9C018000000000001C00AA AAAAAAAAAAB3F653D0F8CB48655C010AAAAAAAAAAA9C018000000000001C0055555555 55556BF5E573AC901E6CEC010AAAAAAAAAAA9C018000000000001C000000000000001B F6B4E81B4E81BFEC010AAAAAAAAAAA9C018000000000001BFF5555555555558BF5E573 AC901E6DFC010AAAAAAAAAAA9C018000000000001BFE555555555555B3F653D0F8CB48 647C010AAAAAAAAAAA9C018000000000001BCC80000000000003F847AE147AE144AC01 0AAAAAAAAAAA9C0180000000000013FE555555555554F3F94DBF86A314DA6C010AAAAA AAAAAA9C0180000000000013FF55555555555523FA1419CA252ADA6C010AAAAAAAAAAA 9C0180000000000013FFFFFFFFFFFFFFC3FA999999999998CC010AAAAAAAAAAA9C0180 0000000000140055555555555533FB1BAF98D76B542C010AAAAAAAAAAA9C0180000000 00001400AAAAAAAAAAAA83FB76B5493271047C010AAAAAAAAAAA9C0180000000000014 00FFFFFFFFFFFFD3FBDDDDDDDDDDDD5C010AAAAAAAAAAA9C0180000000000014012AAA AAAAAAAA93FC2894AB6CD8EF6C010AAAAAAAAAAA9C0180000000000014015555555555 5543FC684BDA12F6847C010AAAAAAAAAAA9C0180000000000014017FFFFFFFFFFFF3FC AE147AE147ADDC010AAAAAAAAAAA9C018000000000001401AAAAAAAAAAAAA3FCF9EE8D D7CC6B8C010AAAAAAAAAAA9C018000000000001401D5555555555553FD25ED097B425E CC010AAAAAAAAAAA9C01800000000000140200000000000003FD51EB851EB851EC010A AAAAAAAAAA9C01800000000000140215555555555553FD80F2B9D6480F1C010AAAAAAA AAAA9C0180000000000014022AAAAAAAAAAAA3FDB302A7A1F1966C010AAAAAAAAAAA9C 0180000000000014023FFFFFFFFFFFF3FDE81B4E81B4E7FC010AAAAAAAAAAA9C015555 555555556C0240000000000003FC7C048D159E267C010AAAAAAAAAAA9C015555555555 556C022AAAAAAAAAAAB3FC363BEC474CFD3C010AAAAAAAAAAA9C015555555555556C02 15555555555563FBED097B425ED04C010AAAAAAAAAAA9C015555555555556C02000000 00000013FB79BE02468ACEFC010AAAAAAAAAAA9C015555555555556C01D55555555555 73FB12956D9B1DF5EC010AAAAAAAAAAA9C015555555555556C01AAAAAAAAAAAAC3FA6F 1F7A80308ADC010AAAAAAAAAAA9C015555555555556C0180000000000013F9A2B3C4D5 E6F69C010AAAAAAAAAAA9C015555555555556C0155555555555563F82F684BDA12F29C 010AAAAAAAAAAA9C015555555555556C012AAAAAAAAAAABBF70AFF9EE8DD840C010AAA AAAAAAAA9C015555555555556C010000000000000BF8D950C83FB732CC010AAAAAAAAA AA9C015555555555556C00AAAAAAAAAAAABBF966054F43E32F3C010AAAAAAAAAAA9C01 5555555555556C005555555555556BF9AED6A9264E22BC010AAAAAAAAAAA9C01555555 5555556C000000000000001BF9C71C71C71C73FC010AAAAAAAAAAA9C01555555555555 6BFF5555555555558BF9AED6A9264E22CC010AAAAAAAAAAA9C015555555555556BFE55 5555555555BBF966054F43E32F6C010AAAAAAAAAAA9C015555555555556BCC80000000 00000BF8D950C83FB7333C010AAAAAAAAAAA9C0155555555555563FE555555555554FB F70AFF9EE8DD861C010AAAAAAAAAAA9C0155555555555563FF55555555555523F82F68 4BDA12F1CC010AAAAAAAAAAA9C0155555555555563FFFFFFFFFFFFFFC3F9A2B3C4D5E6 F59C010AAAAAAAAAAA9C01555555555555640055555555555533FA6F1F7A80308A4C01 0AAAAAAAAAAA9C015555555555556400AAAAAAAAAAAA83FB12956D9B1DF57C010AAAAA AAAAAA9C015555555555556400FFFFFFFFFFFFD3FB79BE02468ACE5C010AAAAAAAAAAA 9C0155555555555564012AAAAAAAAAAA93FBED097B425ECFDC010AAAAAAAAAAA9C0155 5555555555640155555555555543FC363BEC474CFD0C010AAAAAAAAAAA9C0155555555 555564017FFFFFFFFFFFF3FC7C048D159E265C010AAAAAAAAAAA9C0155555555555564 01AAAAAAAAAAAAA3FCC7DEA00C22E40C010AAAAAAAAAAA9C015555555555556401D555 5555555553FD0CE512956D9B0C010AAAAAAAAAAA9C0155555555555564020000000000 0003FD38E38E38E38E2C010AAAAAAAAAAA9C01555555555555640215555555555553FD 67EAC2F0734B5C010AAAAAAAAAAA9C0155555555555564022AAAAAAAAAAAA3FD99FAB0 BC1CD2AC010AAAAAAAAAAA9C0155555555555564023FFFFFFFFFFFF3FDCF13579BE024 3C010AAAAAAAAAAA9C012AAAAAAAAAAABC0240000000000003FC530ECA8641FD7C010A AAAAAAAAAA9C012AAAAAAAAAAABC022AAAAAAAAAAAB3FC0D4629B7F0D44C010AAAAAAA AAAA9C012AAAAAAAAAAABC0215555555555563FB9B1DF623A67E4C010AAAAAAAAAAA9C 012AAAAAAAAAAABC0200000000000013FB27D27D27D27CFC010AAAAAAAAAAA9C012AAA AAAAAAAABC01D5555555555573FA8153D0F8CB47DC010AAAAAAAAAAA9C012AAAAAAAAA AABC01AAAAAAAAAAAAC3F99690E0857FCDDC010AAAAAAAAAAA9C012AAAAAAAAAAABC01 80000000000013F76C16C16C16BB5C010AAAAAAAAAAA9C012AAAAAAAAAAABC01555555 5555556BF85FF3DD1BAF9CFC010AAAAAAAAAAA9C012AAAAAAAAAAABC012AAAAAAAAAAA BBF98A6DFC3518A90C010AAAAAAAAAAA9C012AAAAAAAAAAABC010000000000000BFA1A 2B3C4D5E709C010AAAAAAAAAAA9C012AAAAAAAAAAABC00AAAAAAAAAAAABBFA56D9B1DF 623B9C010AAAAAAAAAAA9C012AAAAAAAAAAABC005555555555556BFA7B425ED097B54C 010AAAAAAAAAAA9C012AAAAAAAAAAABC000000000000001BFA87654320FEDDDC010AAA AAAAAAAA9C012AAAAAAAAAAABBFF5555555555558BFA7B425ED097B55C010AAAAAAAAA AA9C012AAAAAAAAAAABBFE555555555555BBFA56D9B1DF623B9C010AAAAAAAAAAA9C01 2AAAAAAAAAAABBCC8000000000000BFA1A2B3C4D5E70BC010AAAAAAAAAAA9C012AAAAA AAAAAAB3FE555555555554FBF98A6DFC3518A95C010AAAAAAAAAAA9C012AAAAAAAAAAA B3FF5555555555552BF85FF3DD1BAF9DFC010AAAAAAAAAAA9C012AAAAAAAAAAAB3FFFF FFFFFFFFFFC3F76C16C16C16B6EC010AAAAAAAAAAA9C012AAAAAAAAAAAB40055555555 555533F99690E0857FCCBC010AAAAAAAAAAA9C012AAAAAAAAAAAB400AAAAAAAAAAAA83 FA8153D0F8CB470C010AAAAAAAAAAA9C012AAAAAAAAAAAB400FFFFFFFFFFFFD3FB27D2 7D27D27C6C010AAAAAAAAAAA9C012AAAAAAAAAAAB4012AAAAAAAAAAA93FB9B1DF623A6 7DEC010AAAAAAAAAAA9C012AAAAAAAAAAAB40155555555555543FC0D4629B7F0D40C01 0AAAAAAAAAAA9C012AAAAAAAAAAAB4017FFFFFFFFFFFF3FC530ECA8641FD5C010AAAAA AAAAAA9C012AAAAAAAAAAAB401AAAAAAAAAAAAA3FC9EE8DD7CC6BB0C010AAAAAAAAAAA 9C012AAAAAAAAAAAB401D5555555555553FCF0D4629B7F0D0C010AAAAAAAAAAA9C012A AAAAAAAAAAB40200000000000003FD2468ACF13579AC010AAAAAAAAAAA9C012AAAAAAA AAAAB40215555555555553FD536FE1A8C536DC010AAAAAAAAAAA9C012AAAAAAAAAAAB4 022AAAAAAAAAAAA3FD857FCF746EBE3C010AAAAAAAAAAA9C012AAAAAAAAAAAB4023FFF FFFFFFFFF3FDBA987654320FBC010AAAAAAAAAAA9C010000000000000C024000000000 0003FC333333333332EC010AAAAAAAAAAA9C010000000000000C022AAAAAAAAAAAB3FB DAD524C9C4136C010AAAAAAAAAAA9C010000000000000C0215555555555563FB5B66C7 7D88E92C010AAAAAAAAAAA9C010000000000000C0200000000000013FAD0369D0369CF AC010AAAAAAAAAAA9C010000000000000C01D5555555555573FA01E573AC901D9C010A AAAAAAAAAA9C010000000000000C01AAAAAAAAAAAAC3F82F684BDA12F22C010AAAAAAA AAAA9C010000000000000C018000000000001BF847AE147AE14BEC010AAAAAAAAAAA9C 010000000000000C015555555555556BF9AED6A9264E230C010AAAAAAAAAAA9C010000 000000000C012AAAAAAAAAAABBFA44A55B66C77ECC010AAAAAAAAAAA9C010000000000 000C010000000000000BFA99999999999ADC010AAAAAAAAAAA9C010000000000000C00 AAAAAAAAAAAABBFAD6480F2B9D65DC010AAAAAAAAAAA9C010000000000000C00555555 5555556BFAFAB0BC1CD2DF8C010AAAAAAAAAAA9C010000000000000C00000000000000 1BFB0369D0369D041C010AAAAAAAAAAA9C010000000000000BFF5555555555558BFAFA B0BC1CD2DF8C010AAAAAAAAAAA9C010000000000000BFE555555555555BBFAD6480F2B 9D65DC010AAAAAAAAAAA9C010000000000000BCC8000000000000BFA99999999999AFC 010AAAAAAAAAAA9C0100000000000003FE555555555554FBFA44A55B66C77EFC010AAA AAAAAAAA9C0100000000000003FF5555555555552BF9AED6A9264E237C010AAAAAAAAA AA9C0100000000000003FFFFFFFFFFFFFFCBF847AE147AE14D8C010AAAAAAAAAAA9C01 000000000000040055555555555533F82F684BDA12F06C010AAAAAAAAAAA9C01000000 0000000400AAAAAAAAAAAA83FA01E573AC901CCC010AAAAAAAAAAA9C01000000000000 0400FFFFFFFFFFFFD3FAD0369D0369CE8C010AAAAAAAAAAA9C0100000000000004012A AAAAAAAAAA93FB5B66C77D88E8CC010AAAAAAAAAAA9C01000000000000040155555555 555543FBDAD524C9C412EC010AAAAAAAAAAA9C0100000000000004017FFFFFFFFFFFF3 FC333333333332CC010AAAAAAAAAAA9C010000000000000401AAAAAAAAAAAAA3FC7F0D 4629B7F07C010AAAAAAAAAAA9C010000000000000401D5555555555553FCD0F8CB4870 427C010AAAAAAAAAAA9C01000000000000040200000000000003FD147AE147AE146C01 0AAAAAAAAAAA9C01000000000000040215555555555553FD438215FF3DD19C010AAAAA AAAAAA9C0100000000000004022AAAAAAAAAAAA3FD759203CAE758EC010AAAAAAAAAAA 9C0100000000000004023FFFFFFFFFFFF3FDAAAAAAAAAAAA7C010AAAAAAAAAAA9C00AA AAAAAAAAAABC0240000000000003FC1C71C71C71C6DC010AAAAAAAAAAA9C00AAAAAAAA AAAABC022AAAAAAAAAAAB3FBAD524C9C413B4C010AAAAAAAAAAA9C00AAAAAAAAAAAABC 0215555555555563FB2DE3EF5006110C010AAAAAAAAAAA9C00AAAAAAAAAAAABC020000 0000000013FA7530ECA8641F6C010AAAAAAAAAAA9C00AAAAAAAAAAAABC01D555555555 5573F94DBF86A314DA9C010AAAAAAAAAAA9C00AAAAAAAAAAAABC01AAAAAAAAAAAACBF5 E573AC901E76CC010AAAAAAAAAAA9C00AAAAAAAAAAAABC018000000000001BF959E26A F37C067C010AAAAAAAAAAA9C00AAAAAAAAAAAABC015555555555556BFA327104EE2CC1 AC010AAAAAAAAAAA9C00AAAAAAAAAAAABC012AAAAAAAAAAABBFA9FAB0BC1CD2F0C010A AAAAAAAAAA9C00AAAAAAAAAAAABC010000000000000BFAF49F49F49F4B1C010AAAAAAA AAAA9C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFB18A6DFC3518B0C010AAAAAAAAAAA9C 00AAAAAAAAAAAABC005555555555556BFB2ADB363BEC47EC010AAAAAAAAAAA9C00AAAA AAAAAAAABC000000000000001BFB30ECA8641FDC3C010AAAAAAAAAAA9C00AAAAAAAAAA AABBFF5555555555558BFB2ADB363BEC47EC010AAAAAAAAAAA9C00AAAAAAAAAAAABBFE 555555555555BBFB18A6DFC3518B1C010AAAAAAAAAAA9C00AAAAAAAAAAAABBCC800000 0000000BFAF49F49F49F4B3C010AAAAAAAAAAA9C00AAAAAAAAAAAAB3FE555555555554 FBFA9FAB0BC1CD2F3C010AAAAAAAAAAA9C00AAAAAAAAAAAAB3FF5555555555552BFA32 7104EE2CC20C010AAAAAAAAAAA9C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBF959E26AF3 7C074C010AAAAAAAAAAA9C00AAAAAAAAAAAAB4005555555555553BF5E573AC901E84CC 010AAAAAAAAAAA9C00AAAAAAAAAAAAB400AAAAAAAAAAAA83F94DBF86A314D90C010AAA AAAAAAAA9C00AAAAAAAAAAAAB400FFFFFFFFFFFFD3FA7530ECA8641E4C010AAAAAAAAA AA9C00AAAAAAAAAAAAB4012AAAAAAAAAAA93FB2DE3EF500610AC010AAAAAAAAAAA9C00 AAAAAAAAAAAAB40155555555555543FBAD524C9C413ACC010AAAAAAAAAAA9C00AAAAAA AAAAAAB4017FFFFFFFFFFFF3FC1C71C71C71C6BC010AAAAAAAAAAA9C00AAAAAAAAAAAA B401AAAAAAAAAAAAA3FC684BDA12F6846C010AAAAAAAAAAA9C00AAAAAAAAAAAAB401D5 555555555553FCBA375F31AED66C010AAAAAAAAAAA9C00AAAAAAAAAAAAB40200000000 000003FD091A2B3C4D5E5C010AAAAAAAAAAA9C00AAAAAAAAAAAAB40215555555555553 FD38215FF3DD1B8C010AAAAAAAAAAA9C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD6A31 4DBF86A2EC010AAAAAAAAAAA9C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD9F49F49F49 F46C010AAAAAAAAAAA9C005555555555556C0240000000000003FC0ECA8641FDB93C01 0AAAAAAAAAAA9C005555555555556C022AAAAAAAAAAAB3FB9203CAE7591FEC010AAAAA AAAAAA9C005555555555556C0215555555555563FB12956D9B1DF5CC010AAAAAAAAAAA 9C005555555555556C0200000000000013FA3E93E93E93E8EC010AAAAAAAAAAA9C0055 55555555556C01D5555555555573F8C10AFF9EE8DB2C010AAAAAAAAAAA9C0055555555 55556C01AAAAAAAAAAAACBF81722833944A8EC010AAAAAAAAAAA9C005555555555556C 018000000000001BF9C71C71C71C737C010AAAAAAAAAAA9C005555555555556C015555 555555556BFA690E0857FCF86C010AAAAAAAAAAA9C005555555555556C012AAAAAAAAA AABBFAD6480F2B9D65AC010AAAAAAAAAAA9C005555555555556C010000000000000BFB 159E26AF37C0EC010AAAAAAAAAAA9C005555555555556C00AAAAAAAAAAAABBFB33F561 7839A65C010AAAAAAAAAAA9C005555555555556C005555555555556BFB4629B7F0D463 3C010AAAAAAAAAAA9C005555555555556C000000000000001BFB4C3B2A1907F78C010A AAAAAAAAAA9C005555555555556BFF5555555555558BFB4629B7F0D4633C010AAAAAAA AAAA9C005555555555556BFE555555555555BBFB33F5617839A66C010AAAAAAAAAAA9C 005555555555556BCC8000000000000BFB159E26AF37C0FC010AAAAAAAAAAA9C005555 5555555563FE555555555554FBFAD6480F2B9D65DC010AAAAAAAAAAA9C005555555555 5563FF5555555555552BFA690E0857FCF8AC010AAAAAAAAAAA9C0055555555555563FF FFFFFFFFFFFFCBF9C71C71C71C748C010AAAAAAAAAAA9C005555555555556400555555 5555553BF81722833944AB3C010AAAAAAAAAAA9C005555555555556400AAAAAAAAAAAA 83F8C10AFF9EE8D78C010AAAAAAAAAAA9C005555555555556400FFFFFFFFFFFFD3FA3E 93E93E93E7AC010AAAAAAAAAAA9C0055555555555564012AAAAAAAAAAA93FB12956D9B 1DF55C010AAAAAAAAAAA9C00555555555555640155555555555543FB9203CAE7591F7C 010AAAAAAAAAAA9C0055555555555564017FFFFFFFFFFFF3FC0ECA8641FDB91C010AAA AAAAAAAA9C005555555555556401AAAAAAAAAAAAA3FC5AA499388276CC010AAAAAAAAA AA9C005555555555556401D5555555555553FCAC901E573AC8BC010AAAAAAAAAAA9C00 555555555555640200000000000003FD02468ACF13578C010AAAAAAAAAAA9C00555555 555555640215555555555553FD314DBF86A314BC010AAAAAAAAAAA9C00555555555555 64022AAAAAAAAAAAA3FD635DAD524C9C0C010AAAAAAAAAAA9C0055555555555564023F FFFFFFFFFFF3FD987654320FED9C010AAAAAAAAAAA9C000000000000001C0240000000 000003FC0A3D70A3D709FC010AAAAAAAAAAA9C000000000000001C022AAAAAAAAAAAB3 FB88E99FAB0BC16C010AAAAAAAAAAA9C000000000000001C0215555555555563FB097B 425ED0974C010AAAAAAAAAAA9C000000000000001C0200000000000013FA2C5F92C5F9 2BEC010AAAAAAAAAAA9C000000000000001C01D5555555555573F87839A5BC7DE72C01 0AAAAAAAAAAA9C000000000000001C01AAAAAAAAAAAACBF85FF3DD1BAF9CEC010AAAAA AAAAAA9C000000000000001C018000000000001BF9EB851EB851ED7C010AAAAAAAAAAA 9C000000000000001C015555555555556BFA7B425ED097B56C010AAAAAAAAAAA9C0000 00000000001C012AAAAAAAAAAABBFAE87C65A43822AC010AAAAAAAAAAA9C0000000000 00001C010000000000000BFB1EB851EB851F6C010AAAAAAAAAAA9C000000000000001C 00AAAAAAAAAAAABBFB3D0F8CB48704DC010AAAAAAAAAAA9C000000000000001C005555 555555556BFB4F43E32D21C1BC010AAAAAAAAAAA9C000000000000001C000000000000 001BFB5555555555560C010AAAAAAAAAAA9C000000000000001BFF5555555555558BFB 4F43E32D21C1BC010AAAAAAAAAAA9C000000000000001BFE555555555555BBFB3D0F8C B48704EC010AAAAAAAAAAA9C000000000000001BCC8000000000000BFB1EB851EB851F 7C010AAAAAAAAAAA9C0000000000000013FE555555555554FBFAE87C65A43822DC010A AAAAAAAAAA9C0000000000000013FF5555555555552BFA7B425ED097B5AC010AAAAAAA AAAA9C0000000000000013FFFFFFFFFFFFFFCBF9EB851EB851EE8C010AAAAAAAAAAA9C 0000000000000014005555555555553BF85FF3DD1BAF9F3C010AAAAAAAAAAA9C000000 000000001400AAAAAAAAAAAA83F87839A5BC7DE38C010AAAAAAAAAAA9C000000000000 001400FFFFFFFFFFFFD3FA2C5F92C5F92AAC010AAAAAAAAAAA9C000000000000001401 2AAAAAAAAAAA93FB097B425ED096DC010AAAAAAAAAAA9C000000000000001401555555 55555543FB88E99FAB0BC0FC010AAAAAAAAAAA9C0000000000000014017FFFFFFFFFFF F3FC0A3D70A3D709DC010AAAAAAAAAAA9C000000000000001401AAAAAAAAAAAAA3FC56 17839A5BC78C010AAAAAAAAAAA9C000000000000001401D5555555555553FCA80308B9 14197C010AAAAAAAAAAA9C00000000000000140200000000000003FCFFFFFFFFFFFFCC 010AAAAAAAAAAA9C00000000000000140215555555555553FD2F0734B78FBD1C010AAA AAAAAAAA9C0000000000000014022AAAAAAAAAAAA3FD6117228339446C010AAAAAAAAA AA9C0000000000000014023FFFFFFFFFFFF3FD962FC962FC95FC010AAAAAAAAAAA9BFF 5555555555558C0240000000000003FC0ECA8641FDB92C010AAAAAAAAAAA9BFF555555 5555558C022AAAAAAAAAAAB3FB9203CAE7591FEC010AAAAAAAAAAA9BFF555555555555 8C0215555555555563FB12956D9B1DF5AC010AAAAAAAAAAA9BFF5555555555558C0200 000000000013FA3E93E93E93E8AC010AAAAAAAAAAA9BFF5555555555558C01D5555555 555573F8C10AFF9EE8DA2C010AAAAAAAAAAA9BFF5555555555558C01AAAAAAAAAAAACB F81722833944A9EC010AAAAAAAAAAA9BFF5555555555558C018000000000001BF9C71C 71C71C73FC010AAAAAAAAAAA9BFF5555555555558C015555555555556BFA690E0857FC F86C010AAAAAAAAAAA9BFF5555555555558C012AAAAAAAAAAABBFAD6480F2B9D65AC01 0AAAAAAAAAAA9BFF5555555555558C010000000000000BFB159E26AF37C0EC010AAAAA AAAAAA9BFF5555555555558C00AAAAAAAAAAAABBFB33F5617839A66C010AAAAAAAAAAA 9BFF5555555555558C005555555555556BFB4629B7F0D4634C010AAAAAAAAAAA9BFF55 55555555558C000000000000001BFB4C3B2A1907F79C010AAAAAAAAAAA9BFF55555555 55558BFF5555555555558BFB4629B7F0D4634C010AAAAAAAAAAA9BFF5555555555558B FE555555555555BBFB33F5617839A67C010AAAAAAAAAAA9BFF5555555555558BCC8000 000000000BFB159E26AF37C10C010AAAAAAAAAAA9BFF55555555555583FE5555555555 54FBFAD6480F2B9D65FC010AAAAAAAAAAA9BFF55555555555583FF5555555555552BFA 690E0857FCF8CC010AAAAAAAAAAA9BFF55555555555583FFFFFFFFFFFFFFCBF9C71C71 C71C74CC010AAAAAAAAAAA9BFF55555555555584005555555555553BF81722833944AB BC010AAAAAAAAAAA9BFF5555555555558400AAAAAAAAAAAA83F8C10AFF9EE8D70C010A AAAAAAAAAA9BFF5555555555558400FFFFFFFFFFFFD3FA3E93E93E93E78C010AAAAAAA AAAA9BFF55555555555584012AAAAAAAAAAA93FB12956D9B1DF54C010AAAAAAAAAAA9B FF555555555555840155555555555543FB9203CAE7591F6C010AAAAAAAAAAA9BFF5555 5555555584017FFFFFFFFFFFF3FC0ECA8641FDB90C010AAAAAAAAAAA9BFF5555555555 558401AAAAAAAAAAAAA3FC5AA499388276BC010AAAAAAAAAAA9BFF5555555555558401 D5555555555553FCAC901E573AC8BC010AAAAAAAAAAA9BFF5555555555558402000000 00000003FD02468ACF13578C010AAAAAAAAAAA9BFF5555555555558402155555555555 53FD314DBF86A314BC010AAAAAAAAAAA9BFF55555555555584022AAAAAAAAAAAA3FD63 5DAD524C9C0C010AAAAAAAAAAA9BFF55555555555584023FFFFFFFFFFFF3FD98765432 0FED9C010AAAAAAAAAAA9BFE555555555555BC0240000000000003FC1C71C71C71C6DC 010AAAAAAAAAAA9BFE555555555555BC022AAAAAAAAAAAB3FBAD524C9C413B4C010AAA AAAAAAAA9BFE555555555555BC0215555555555563FB2DE3EF5006110C010AAAAAAAAA AA9BFE555555555555BC0200000000000013FA7530ECA8641F6C010AAAAAAAAAAA9BFE 555555555555BC01D5555555555573F94DBF86A314DA9C010AAAAAAAAAAA9BFE555555 555555BC01AAAAAAAAAAAACBF5E573AC901E76CC010AAAAAAAAAAA9BFE555555555555 BC018000000000001BF959E26AF37C067C010AAAAAAAAAAA9BFE555555555555BC0155 55555555556BFA327104EE2CC1EC010AAAAAAAAAAA9BFE555555555555BC012AAAAAAA AAAABBFA9FAB0BC1CD2F0C010AAAAAAAAAAA9BFE555555555555BC010000000000000B FAF49F49F49F4B3C010AAAAAAAAAAA9BFE555555555555BC00AAAAAAAAAAAABBFB18A6 DFC3518B0C010AAAAAAAAAAA9BFE555555555555BC005555555555556BFB2ADB363BEC 47EC010AAAAAAAAAAA9BFE555555555555BC000000000000001BFB30ECA8641FDC4C01 0AAAAAAAAAAA9BFE555555555555BBFF5555555555558BFB2ADB363BEC47FC010AAAAA AAAAAA9BFE555555555555BBFE555555555555BBFB18A6DFC3518B1C010AAAAAAAAAAA 9BFE555555555555BBCC8000000000000BFAF49F49F49F4B4C010AAAAAAAAAAA9BFE55 5555555555B3FE555555555554FBFA9FAB0BC1CD2F4C010AAAAAAAAAAA9BFE55555555 5555B3FF5555555555552BFA327104EE2CC21C010AAAAAAAAAAA9BFE555555555555B3 FFFFFFFFFFFFFFCBF959E26AF37C076C010AAAAAAAAAAA9BFE555555555555B4005555 555555553BF5E573AC901E86CC010AAAAAAAAAAA9BFE555555555555B400AAAAAAAAAA AA83F94DBF86A314D8EC010AAAAAAAAAAA9BFE555555555555B400FFFFFFFFFFFFD3FA 7530ECA8641E3C010AAAAAAAAAAA9BFE555555555555B4012AAAAAAAAAAA93FB2DE3EF 5006109C010AAAAAAAAAAA9BFE555555555555B40155555555555543FBAD524C9C413A CC010AAAAAAAAAAA9BFE555555555555B4017FFFFFFFFFFFF3FC1C71C71C71C6BC010A AAAAAAAAAA9BFE555555555555B401AAAAAAAAAAAAA3FC684BDA12F6846C010AAAAAAA AAAA9BFE555555555555B401D5555555555553FCBA375F31AED65C010AAAAAAAAAAA9B FE555555555555B40200000000000003FD091A2B3C4D5E5C010AAAAAAAAAAA9BFE5555 55555555B40215555555555553FD38215FF3DD1B8C010AAAAAAAAAAA9BFE5555555555 55B4022AAAAAAAAAAAA3FD6A314DBF86A2DC010AAAAAAAAAAA9BFE555555555555B402 3FFFFFFFFFFFF3FD9F49F49F49F46C010AAAAAAAAAAA9BCC8000000000000C02400000 00000003FC333333333332EC010AAAAAAAAAAA9BCC8000000000000C022AAAAAAAAAAA B3FBDAD524C9C4136C010AAAAAAAAAAA9BCC8000000000000C0215555555555563FB5B 66C77D88E92C010AAAAAAAAAAA9BCC8000000000000C0200000000000013FAD0369D03 69CFAC010AAAAAAAAAAA9BCC8000000000000C01D5555555555573FA01E573AC901D9C 010AAAAAAAAAAA9BCC8000000000000C01AAAAAAAAAAAAC3F82F684BDA12F22C010AAA AAAAAAAA9BCC8000000000000C018000000000001BF847AE147AE14BEC010AAAAAAAAA AA9BCC8000000000000C015555555555556BF9AED6A9264E230C010AAAAAAAAAAA9BCC 8000000000000C012AAAAAAAAAAABBFA44A55B66C77ECC010AAAAAAAAAAA9BCC800000 0000000C010000000000000BFA99999999999AFC010AAAAAAAAAAA9BCC800000000000 0C00AAAAAAAAAAAABBFAD6480F2B9D65DC010AAAAAAAAAAA9BCC8000000000000C0055 55555555556BFAFAB0BC1CD2DF8C010AAAAAAAAAAA9BCC8000000000000C0000000000 00001BFB0369D0369D042C010AAAAAAAAAAA9BCC8000000000000BFF5555555555558B FAFAB0BC1CD2DFAC010AAAAAAAAAAA9BCC8000000000000BFE555555555555BBFAD648 0F2B9D65EC010AAAAAAAAAAA9BCC8000000000000BCC8000000000000BFA9999999999 9B0C010AAAAAAAAAAA9BCC80000000000003FE555555555554FBFA44A55B66C77F0C01 0AAAAAAAAAAA9BCC80000000000003FF5555555555552BF9AED6A9264E239C010AAAAA AAAAAA9BCC80000000000003FFFFFFFFFFFFFFCBF847AE147AE14DCC010AAAAAAAAAAA 9BCC800000000000040055555555555533F82F684BDA12F02C010AAAAAAAAAAA9BCC80 00000000000400AAAAAAAAAAAA83FA01E573AC901CBC010AAAAAAAAAAA9BCC80000000 00000400FFFFFFFFFFFFD3FAD0369D0369CE7C010AAAAAAAAAAA9BCC80000000000004 012AAAAAAAAAAA93FB5B66C77D88E8BC010AAAAAAAAAAA9BCC80000000000004015555 5555555543FBDAD524C9C412EC010AAAAAAAAAAA9BCC80000000000004017FFFFFFFFF FFF3FC333333333332CC010AAAAAAAAAAA9BCC8000000000000401AAAAAAAAAAAAA3FC 7F0D4629B7F07C010AAAAAAAAAAA9BCC8000000000000401D5555555555553FCD0F8CB 4870426C010AAAAAAAAAAA9BCC800000000000040200000000000003FD147AE147AE14 5C010AAAAAAAAAAA9BCC800000000000040215555555555553FD438215FF3DD19C010A AAAAAAAAAA9BCC80000000000004022AAAAAAAAAAAA3FD759203CAE758EC010AAAAAAA AAAA9BCC80000000000004023FFFFFFFFFFFF3FDAAAAAAAAAAAA7C010AAAAAAAAAAA93 FE555555555554FC0240000000000003FC530ECA8641FD6C010AAAAAAAAAAA93FE5555 55555554FC022AAAAAAAAAAAB3FC0D4629B7F0D43C010AAAAAAAAAAA93FE5555555555 54FC0215555555555563FB9B1DF623A67E2C010AAAAAAAAAAA93FE555555555554FC02 00000000000013FB27D27D27D27CDC010AAAAAAAAAAA93FE555555555554FC01D55555 55555573FA8153D0F8CB479C010AAAAAAAAAAA93FE555555555554FC01AAAAAAAAAAAA C3F99690E0857FCD5C010AAAAAAAAAAA93FE555555555554FC0180000000000013F76C 16C16C16B95C010AAAAAAAAAAA93FE555555555554FC015555555555556BF85FF3DD1B AF9DFC010AAAAAAAAAAA93FE555555555554FC012AAAAAAAAAAABBF98A6DFC3518A98C 010AAAAAAAAAAA93FE555555555554FC010000000000000BFA1A2B3C4D5E70DC010AAA AAAAAAAA93FE555555555554FC00AAAAAAAAAAAABBFA56D9B1DF623BDC010AAAAAAAAA AA93FE555555555554FC005555555555556BFA7B425ED097B58C010AAAAAAAAAAA93FE 555555555554FC000000000000001BFA87654320FEDE1C010AAAAAAAAAAA93FE555555 555554FBFF5555555555558BFA7B425ED097B59C010AAAAAAAAAAA93FE555555555554 FBFE555555555555BBFA56D9B1DF623BDC010AAAAAAAAAAA93FE555555555554FBCC80 00000000000BFA1A2B3C4D5E70FC010AAAAAAAAAAA93FE555555555554F3FE55555555 5554FBF98A6DFC3518A9DC010AAAAAAAAAAA93FE555555555554F3FF5555555555552B F85FF3DD1BAF9EFC010AAAAAAAAAAA93FE555555555554F3FFFFFFFFFFFFFFC3F76C16 C16C16B4EC010AAAAAAAAAAA93FE555555555554F40055555555555533F99690E0857F CC3C010AAAAAAAAAAA93FE555555555554F400AAAAAAAAAAAA83FA8153D0F8CB46CC01 0AAAAAAAAAAA93FE555555555554F400FFFFFFFFFFFFD3FB27D27D27D27C4C010AAAAA AAAAAA93FE555555555554F4012AAAAAAAAAAA93FB9B1DF623A67DCC010AAAAAAAAAAA 93FE555555555554F40155555555555543FC0D4629B7F0D3FC010AAAAAAAAAAA93FE55 5555555554F4017FFFFFFFFFFFF3FC530ECA8641FD4C010AAAAAAAAAAA93FE55555555 5554F401AAAAAAAAAAAAA3FC9EE8DD7CC6BAFC010AAAAAAAAAAA93FE555555555554F4 01D5555555555553FCF0D4629B7F0CFC010AAAAAAAAAAA93FE555555555554F4020000 0000000003FD2468ACF13579AC010AAAAAAAAAAA93FE555555555554F4021555555555 5553FD536FE1A8C536DC010AAAAAAAAAAA93FE555555555554F4022AAAAAAAAAAAA3FD 857FCF746EBE2C010AAAAAAAAAAA93FE555555555554F4023FFFFFFFFFFFF3FDBA9876 54320FBC010AAAAAAAAAAA93FF5555555555552C0240000000000003FC7C048D159E26 5C010AAAAAAAAAAA93FF5555555555552C022AAAAAAAAAAAB3FC363BEC474CFD2C010A AAAAAAAAAA93FF5555555555552C0215555555555563FBED097B425ED02C010AAAAAAA AAAA93FF5555555555552C0200000000000013FB79BE02468ACECC010AAAAAAAAAAA93 FF5555555555552C01D5555555555573FB12956D9B1DF5BC010AAAAAAAAAAA93FF5555 555555552C01AAAAAAAAAAAAC3FA6F1F7A80308A7C010AAAAAAAAAAA93FF5555555555 552C0180000000000013F9A2B3C4D5E6F5DC010AAAAAAAAAAA93FF5555555555552C01 55555555555563F82F684BDA12F11C010AAAAAAAAAAA93FF5555555555552C012AAAAA AAAAAABBF70AFF9EE8DD870C010AAAAAAAAAAA93FF5555555555552C01000000000000 0BF8D950C83FB7344C010AAAAAAAAAAA93FF5555555555552C00AAAAAAAAAAAABBF966 054F43E32FFC010AAAAAAAAAAA93FF5555555555552C005555555555556BF9AED6A926 4E237C010AAAAAAAAAAA93FF5555555555552C000000000000001BF9C71C71C71C74BC 010AAAAAAAAAAA93FF5555555555552BFF5555555555558BF9AED6A9264E238C010AAA AAAAAAAA93FF5555555555552BFE555555555555BBF966054F43E3302C010AAAAAAAAA AA93FF5555555555552BCC8000000000000BF8D950C83FB734BC010AAAAAAAAAAA93FF 55555555555523FE555555555554FBF70AFF9EE8DD891C010AAAAAAAAAAA93FF555555 55555523FF55555555555523F82F684BDA12F04C010AAAAAAAAAAA93FF555555555555 23FFFFFFFFFFFFFFC3F9A2B3C4D5E6F4DC010AAAAAAAAAAA93FF555555555555240055 555555555533FA6F1F7A803089EC010AAAAAAAAAAA93FF5555555555552400AAAAAAAA AAAA83FB12956D9B1DF54C010AAAAAAAAAAA93FF5555555555552400FFFFFFFFFFFFD3 FB79BE02468ACE2C010AAAAAAAAAAA93FF55555555555524012AAAAAAAAAAA93FBED09 7B425ECFAC010AAAAAAAAAAA93FF555555555555240155555555555543FC363BEC474C FCEC010AAAAAAAAAAA93FF55555555555524017FFFFFFFFFFFF3FC7C048D159E264C01 0AAAAAAAAAAA93FF5555555555552401AAAAAAAAAAAAA3FCC7DEA00C22E3FC010AAAAA AAAAAA93FF5555555555552401D5555555555553FD0CE512956D9AFC010AAAAAAAAAAA 93FF555555555555240200000000000003FD38E38E38E38E1C010AAAAAAAAAAA93FF55 5555555555240215555555555553FD67EAC2F0734B4C010AAAAAAAAAAA93FF55555555 555524022AAAAAAAAAAAA3FD99FAB0BC1CD2AC010AAAAAAAAAAA93FF55555555555524 023FFFFFFFFFFFF3FDCF13579BE0242C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC024000 0000000003FCAE147AE147ADBC010AAAAAAAAAAA93FFFFFFFFFFFFFFCC022AAAAAAAAA AAB3FC684BDA12F6848C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC0215555555555563FC 2894AB6CD8EF7C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC0200000000000013FBDDDDDD DDDDDD8C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC01D5555555555573FB76B549327104 7C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3FB1BAF98D76B53FC010A AAAAAAAAAA93FFFFFFFFFFFFFFCC0180000000000013FA9999999999987C010AAAAAAA AAAA93FFFFFFFFFFFFFFCC0155555555555563FA1419CA252AD9DC010AAAAAAAAAAA93 FFFFFFFFFFFFFFCC012AAAAAAAAAAAB3F94DBF86A314D92C010AAAAAAAAAAA93FFFFFF FFFFFFFFCC0100000000000003F847AE147AE141CC010AAAAAAAAAAA93FFFFFFFFFFFF FFCC00AAAAAAAAAAAAB3F653D0F8CB48585C010AAAAAAAAAAA93FFFFFFFFFFFFFFCC00 5555555555556BF5E573AC901E87EC010AAAAAAAAAAA93FFFFFFFFFFFFFFCC00000000 0000001BF6B4E81B4E81CD6C010AAAAAAAAAAA93FFFFFFFFFFFFFFCBFF555555555555 8BF5E573AC901E887C010AAAAAAAAAAA93FFFFFFFFFFFFFFCBFE555555555555B3F653 D0F8CB48573C010AAAAAAAAAAA93FFFFFFFFFFFFFFCBCC80000000000003F847AE147A E1415C010AAAAAAAAAAA93FFFFFFFFFFFFFFC3FE555555555554F3F94DBF86A314D8CC 010AAAAAAAAAAA93FFFFFFFFFFFFFFC3FF55555555555523FA1419CA252AD99C010AAA AAAAAAAA93FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FA999999999997EC010AAAAAAAAA AA93FFFFFFFFFFFFFFC40055555555555533FB1BAF98D76B53BC010AAAAAAAAAAA93FF FFFFFFFFFFFFC400AAAAAAAAAAAA83FB76B5493271040C010AAAAAAAAAAA93FFFFFFFF FFFFFFC400FFFFFFFFFFFFD3FBDDDDDDDDDDDCEC010AAAAAAAAAAA93FFFFFFFFFFFFFF C4012AAAAAAAAAAA93FC2894AB6CD8EF3C010AAAAAAAAAAA93FFFFFFFFFFFFFFC40155 555555555543FC684BDA12F6844C010AAAAAAAAAAA93FFFFFFFFFFFFFFC4017FFFFFFF FFFFF3FCAE147AE147ADAC010AAAAAAAAAAA93FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3 FCF9EE8DD7CC6B5C010AAAAAAAAAAA93FFFFFFFFFFFFFFC401D5555555555553FD25ED 097B425EAC010AAAAAAAAAAA93FFFFFFFFFFFFFFC40200000000000003FD51EB851EB8 51CC010AAAAAAAAAAA93FFFFFFFFFFFFFFC40215555555555553FD80F2B9D6480EFC01 0AAAAAAAAAAA93FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FDB302A7A1F1964C010AAAAA AAAAAA93FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FDE81B4E81B4E7DC010AAAAAAAAAAA 94005555555555553C0240000000000003FCE93E93E93E938C010AAAAAAAAAAA940055 55555555553C022AAAAAAAAAAAB3FCA375F31AED6A5C010AAAAAAAAAAA940055555555 55553C0215555555555563FC63BEC474CFD54C010AAAAAAAAAAA94005555555555553C 0200000000000013FC2A1907F6E5D48C010AAAAAAAAAAA94005555555555553C01D555 5555555573FBED097B425ED01C010AAAAAAAAAAA94005555555555553C01AAAAAAAAAA AAC3FB9203CAE7591F9C010AAAAAAAAAAA94005555555555553C0180000000000013FB 4320FEDCBA97DC010AAAAAAAAAAA94005555555555553C0155555555555563FB006117 2283388C010AAAAAAAAAAA94005555555555553C012AAAAAAAAAAAB3FA938827716603 DC010AAAAAAAAAAA94005555555555553C0100000000000003FA3E93E93E93E7AC010A AAAAAAAAAA94005555555555553C00AAAAAAAAAAAAB3FA01E573AC901CCC010AAAAAAA AAAA94005555555555553C0055555555555563F9BAF98D76B545FC010AAAAAAAAAAA94 005555555555553C0000000000000013F9A2B3C4D5E6F4DC010AAAAAAAAAAA94005555 555555553BFF55555555555583F9BAF98D76B545EC010AAAAAAAAAAA94005555555555 553BFE555555555555B3FA01E573AC901CBC010AAAAAAAAAAA94005555555555553BCC 80000000000003FA3E93E93E93E79C010AAAAAAAAAAA940055555555555533FE555555 555554F3FA9388277166039C010AAAAAAAAAAA940055555555555533FF555555555555 23FB0061172283386C010AAAAAAAAAAA940055555555555533FFFFFFFFFFFFFFC3FB43 20FEDCBA979C010AAAAAAAAAAA9400555555555555340055555555555533FB9203CAE7 591F5C010AAAAAAAAAAA94005555555555553400AAAAAAAAAAAA83FBED097B425ECFAC 010AAAAAAAAAAA94005555555555553400FFFFFFFFFFFFD3FC2A1907F6E5D44C010AAA AAAAAAAA940055555555555534012AAAAAAAAAAA93FC63BEC474CFD50C010AAAAAAAAA AA9400555555555555340155555555555543FCA375F31AED6A1C010AAAAAAAAAAA9400 55555555555534017FFFFFFFFFFFF3FCE93E93E93E936C010AAAAAAAAAAA9400555555 5555553401AAAAAAAAAAAAA3FD1A8C536FE1A89C010AAAAAAAAAAA9400555555555555 3401D5555555555553FD438215FF3DD18C010AAAAAAAAAAA9400555555555555340200 000000000003FD6F8091A2B3C4AC010AAAAAAAAAAA9400555555555555340215555555 555553FD9E87C65A4381EC010AAAAAAAAAAA940055555555555534022AAAAAAAAAAAA3 FDD097B425ED093C010AAAAAAAAAAA940055555555555534023FFFFFFFFFFFF3FE02D8 2D82D82D6C010AAAAAAAAAAA9400AAAAAAAAAAAA8C0240000000000003FD16C16C16C1 6BEC010AAAAAAAAAAA9400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FCE7BA375F31AE9C01 0AAAAAAAAAAA9400AAAAAAAAAAAA8C0215555555555563FCA80308B914198C010AAAAA AAAAAA9400AAAAAAAAAAAA8C0200000000000013FC6E5D4C3B2A18DC010AAAAAAAAAAA 9400AAAAAAAAAAAA8C01D5555555555573FC3AC901E573AC4C010AAAAAAAAAAA9400AA AAAAAAAAAA8C01AAAAAAAAAAAAC3FC0D4629B7F0D41C010AAAAAAAAAAA9400AAAAAAAA AAAA8C0180000000000013FBCBA9876543205C010AAAAAAAAAAA9400AAAAAAAAAAAA8C 0155555555555563FB88E99FAB0BC10C010AAAAAAAAAAA9400AAAAAAAAAAAA8C012AAA AAAAAAAAB3FB524C9C413B8A6C010AAAAAAAAAAA9400AAAAAAAAAAAA8C010000000000 0003FB27D27D27D27C5C010AAAAAAAAAAA9400AAAAAAAAAAAA8C00AAAAAAAAAAAAB3FB 097B425ED096EC010AAAAAAAAAAA9400AAAAAAAAAAAA8C0055555555555563FAEE8DD7 CC6BB40C010AAAAAAAAAAA9400AAAAAAAAAAAA8C0000000000000013FAE26AF37C048B 7C010AAAAAAAAAAA9400AAAAAAAAAAAA8BFF55555555555583FAEE8DD7CC6BB3FC010A AAAAAAAAAA9400AAAAAAAAAAAA8BFE555555555555B3FB097B425ED096DC010AAAAAAA AAAA9400AAAAAAAAAAAA8BCC80000000000003FB27D27D27D27C4C010AAAAAAAAAAA94 00AAAAAAAAAAAA83FE555555555554F3FB524C9C413B8A4C010AAAAAAAAAAA9400AAAA AAAAAAAA83FF55555555555523FB88E99FAB0BC0EC010AAAAAAAAAAA9400AAAAAAAAAA AA83FFFFFFFFFFFFFFC3FBCBA9876543201C010AAAAAAAAAAA9400AAAAAAAAAAAA8400 55555555555533FC0D4629B7F0D3FC010AAAAAAAAAAA9400AAAAAAAAAAAA8400AAAAAA AAAAAA83FC3AC901E573AC1C010AAAAAAAAAAA9400AAAAAAAAAAAA8400FFFFFFFFFFFF D3FC6E5D4C3B2A188C010AAAAAAAAAAA9400AAAAAAAAAAAA84012AAAAAAAAAAA93FCA8 0308B914193C010AAAAAAAAAAA9400AAAAAAAAAAAA840155555555555543FCE7BA375F 31AE5C010AAAAAAAAAAA9400AAAAAAAAAAAA84017FFFFFFFFFFFF3FD16C16C16C16BDC 010AAAAAAAAAAA9400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD3CAE759203CABC010AAA AAAAAAAA9400AAAAAAAAAAAA8401D5555555555553FD65A438215FF3AC010AAAAAAAAA AA9400AAAAAAAAAAAA840200000000000003FD91A2B3C4D5E6CC010AAAAAAAAAAA9400 AAAAAAAAAAAA840215555555555553FDC0A9E87C65A40C010AAAAAAAAAAA9400AAAAAA AAAAAA84022AAAAAAAAAAAA3FDF2B9D6480F2B5C010AAAAAAAAAAA9400AAAAAAAAAAAA 84023FFFFFFFFFFFF3FE13E93E93E93E7C010AAAAAAAAAAA9400FFFFFFFFFFFFDC0240 000000000003FD3D70A3D70A3D4C010AAAAAAAAAAA9400FFFFFFFFFFFFDC022AAAAAAA AAAAB3FD1A8C536FE1A8AC010AAAAAAAAAAA9400FFFFFFFFFFFFDC0215555555555563 FCF5617839A5BC2C010AAAAAAAAAAA9400FFFFFFFFFFFFDC0200000000000013FCBBBB BBBBBBBB7C010AAAAAAAAAAA9400FFFFFFFFFFFFDC01D5555555555573FC8827716605 4EFC010AAAAAAAAAAA9400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FC5AA499388276BC01 0AAAAAAAAAAA9400FFFFFFFFFFFFDC0180000000000013FC333333333332DC010AAAAA AAAAAA9400FFFFFFFFFFFFDC0155555555555563FC11D33F5617833C010AAAAAAAAAAA 9400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FBED097B425ECFCC010AAAAAAAAAAA9400FF FFFFFFFFFFDC0100000000000003FBC28F5C28F5C1AC010AAAAAAAAAAA9400FFFFFFFF FFFFDC00AAAAAAAAAAAAB3FBA438215FF3DC3C010AAAAAAAAAAA9400FFFFFFFFFFFFDC 0055555555555563FB9203CAE7591F5C010AAAAAAAAAAA9400FFFFFFFFFFFFDC000000 0000000013FB8BF258BF258B0C010AAAAAAAAAAA9400FFFFFFFFFFFFDBFF5555555555 5583FB9203CAE7591F5C010AAAAAAAAAAA9400FFFFFFFFFFFFDBFE555555555555B3FB A438215FF3DC2C010AAAAAAAAAAA9400FFFFFFFFFFFFDBCC80000000000003FBC28F5C 28F5C19C010AAAAAAAAAAA9400FFFFFFFFFFFFD3FE555555555554F3FBED097B425ECF 9C010AAAAAAAAAAA9400FFFFFFFFFFFFD3FF55555555555523FC11D33F5617832C010A AAAAAAAAAA9400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FC333333333332BC010AAAAAAA AAAA9400FFFFFFFFFFFFD40055555555555533FC5AA4993882769C010AAAAAAAAAAA94 00FFFFFFFFFFFFD400AAAAAAAAAAAA83FC88277166054EBC010AAAAAAAAAAA9400FFFF FFFFFFFFD400FFFFFFFFFFFFD3FCBBBBBBBBBBBB2C010AAAAAAAAAAA9400FFFFFFFFFF FFD4012AAAAAAAAAAA93FCF5617839A5BBEC010AAAAAAAAAAA9400FFFFFFFFFFFFD401 55555555555543FD1A8C536FE1A88C010AAAAAAAAAAA9400FFFFFFFFFFFFD4017FFFFF FFFFFFF3FD3D70A3D70A3D2C010AAAAAAAAAAA9400FFFFFFFFFFFFD401AAAAAAAAAAAA A3FD635DAD524C9C0C010AAAAAAAAAAA9400FFFFFFFFFFFFD401D5555555555553FD8C 536FE1A8C4FC010AAAAAAAAAAA9400FFFFFFFFFFFFD40200000000000003FDB851EB85 1EB82C010AAAAAAAAAAA9400FFFFFFFFFFFFD40215555555555553FDE759203CAE755C 010AAAAAAAAAAA9400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FE0CB487042BFE5C010AAA AAAAAAAA9400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE2740DA740DA72C010AAAAAAAAA AA94012AAAAAAAAAAA9C0240000000000003FD68ACF13579BDCC010AAAAAAAAAAA9401 2AAAAAAAAAAA9C022AAAAAAAAAAAB3FD45C8A0CE51292C010AAAAAAAAAAA94012AAAAA AAAAAA9C0215555555555563FD25ED097B425EAC010AAAAAAAAAAA94012AAAAAAAAAAA 9C0200000000000013FD091A2B3C4D5E4C010AAAAAAAAAAA94012AAAAAAAAAAA9C01D5 555555555573FCDEA00C22E4500C010AAAAAAAAAAA94012AAAAAAAAAAA9C01AAAAAAAA AAAAC3FCB11D33F56177CC010AAAAAAAAAAA94012AAAAAAAAAAA9C0180000000000013 FC89ABCDF01233EC010AAAAAAAAAAA94012AAAAAAAAAAA9C0155555555555563FC684B DA12F6844C010AAAAAAAAAAA94012AAAAAAAAAAA9C012AAAAAAAAAAAB3FC4CFD585E0E 68FC010AAAAAAAAAAA94012AAAAAAAAAAA9C0100000000000003FC37C048D159E1EC01 0AAAAAAAAAAA94012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FC2894AB6CD8EF2C010AAAAA AAAAAA94012AAAAAAAAAAA9C0055555555555563FC1F7A80308B90BC010AAAAAAAAAAA 94012AAAAAAAAAAA9C0000000000000013FC1C71C71C71C69C010AAAAAAAAAAA94012A AAAAAAAAAA9BFF55555555555583FC1F7A80308B90CC010AAAAAAAAAAA94012AAAAAAA AAAA9BFE555555555555B3FC2894AB6CD8EF2C010AAAAAAAAAAA94012AAAAAAAAAAA9B CC80000000000003FC37C048D159E1EC010AAAAAAAAAAA94012AAAAAAAAAAA93FE5555 55555554F3FC4CFD585E0E68EC010AAAAAAAAAAA94012AAAAAAAAAAA93FF5555555555 5523FC684BDA12F6843C010AAAAAAAAAAA94012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FC 89ABCDF01233CC010AAAAAAAAAAA94012AAAAAAAAAAA940055555555555533FCB11D33 F56177AC010AAAAAAAAAAA94012AAAAAAAAAAA9400AAAAAAAAAAAA83FCDEA00C22E44F CC010AAAAAAAAAAA94012AAAAAAAAAAA9400FFFFFFFFFFFFD3FD091A2B3C4D5E2C010A AAAAAAAAAA94012AAAAAAAAAAA94012AAAAAAAAAAA93FD25ED097B425E8C010AAAAAAA AAAA94012AAAAAAAAAAA940155555555555543FD45C8A0CE51290C010AAAAAAAAAAA94 012AAAAAAAAAAA94017FFFFFFFFFFFF3FD68ACF13579BDBC010AAAAAAAAAAA94012AAA AAAAAAAA9401AAAAAAAAAAAAA3FD8E99FAB0BC1C8C010AAAAAAAAAAA94012AAAAAAAAA AA9401D5555555555553FDB78FBD4018458C010AAAAAAAAAAA94012AAAAAAAAAAA9402 00000000000003FDE38E38E38E38AC010AAAAAAAAAAA94012AAAAAAAAAAA9402155555 55555553FE094AB6CD8EFAFC010AAAAAAAAAAA94012AAAAAAAAAAA94022AAAAAAAAAAA A3FE2252ADB363BE9C010AAAAAAAAAAA94012AAAAAAAAAAA94023FFFFFFFFFFFF3FE3C DF012345676C010AAAAAAAAAAA94015555555555554C0240000000000003FD98765432 0FED9C010AAAAAAAAAAA94015555555555554C022AAAAAAAAAAAB3FD759203CAE758FC 010AAAAAAAAAAA94015555555555554C0215555555555563FD55B66C77D88E7C010AAA AAAAAAAA94015555555555554C0200000000000013FD38E38E38E38E1C010AAAAAAAAA AA94015555555555554C01D5555555555573FD1F19690E0857DC010AAAAAAAAAAA9401 5555555555554C01AAAAAAAAAAAAC3FD0857FCF746EBBC010AAAAAAAAAAA9401555555 5555554C0180000000000013FCE93E93E93E938C010AAAAAAAAAAA9401555555555555 4C0155555555555563FCC7DEA00C22E3EC010AAAAAAAAAAA94015555555555554C012A AAAAAAAAAAB3FCAC901E573AC89C010AAAAAAAAAAA94015555555555554C0100000000 000003FC97530ECA86418C010AAAAAAAAAAA94015555555555554C00AAAAAAAAAAAAB3 FC88277166054ECC010AAAAAAAAAAA94015555555555554C0055555555555563FC7F0D 4629B7F05C010AAAAAAAAAAA94015555555555554C0000000000000013FC7C048D159E 263C010AAAAAAAAAAA94015555555555554BFF55555555555583FC7F0D4629B7F06C01 0AAAAAAAAAAA94015555555555554BFE555555555555B3FC88277166054ECC010AAAAA AAAAAA94015555555555554BCC80000000000003FC97530ECA86418C010AAAAAAAAAAA 940155555555555543FE555555555554F3FCAC901E573AC88C010AAAAAAAAAAA940155 555555555543FF55555555555523FCC7DEA00C22E3DC010AAAAAAAAAAA940155555555 555543FFFFFFFFFFFFFFC3FCE93E93E93E936C010AAAAAAAAAAA940155555555555544 0055555555555533FD0857FCF746EBAC010AAAAAAAAAAA94015555555555554400AAAA AAAAAAAA83FD1F19690E0857BC010AAAAAAAAAAA94015555555555554400FFFFFFFFFF FFD3FD38E38E38E38DFC010AAAAAAAAAAA940155555555555544012AAAAAAAAAAA93FD 55B66C77D88E4C010AAAAAAAAAAA9401555555555555440155555555555543FD759203 CAE758EC010AAAAAAAAAAA940155555555555544017FFFFFFFFFFFF3FD987654320FED 8C010AAAAAAAAAAA94015555555555554401AAAAAAAAAAAAA3FDBE635DAD524C6C010A AAAAAAAAAA94015555555555554401D5555555555553FDE759203CAE755C010AAAAAAA AAAA9401555555555555440200000000000003FE09ABCDF012344C010AAAAAAAAAAA94 01555555555555440215555555555553FE212F684BDA12DC010AAAAAAAAAAA94015555 5555555544022AAAAAAAAAAAA3FE3A375F31AED68C010AAAAAAAAAAA94015555555555 5544023FFFFFFFFFFFF3FE54C3B2A1907F4C010AAAAAAAAAAA94017FFFFFFFFFFFFC02 40000000000003FDCCCCCCCCCCCC9C010AAAAAAAAAAA94017FFFFFFFFFFFFC022AAAAA AAAAAAB3FDA9E87C65A437FC010AAAAAAAAAAA94017FFFFFFFFFFFFC02155555555555 63FD8A0CE512956D7C010AAAAAAAAAAA94017FFFFFFFFFFFFC0200000000000013FD6D 3A06D3A06D1C010AAAAAAAAAAA94017FFFFFFFFFFFFC01D5555555555573FD536FE1A8 C536DC010AAAAAAAAAAA94017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD3CAE759203CABC 010AAAAAAAAAAA94017FFFFFFFFFFFFC0180000000000013FD28F5C28F5C28CC010AAA AAAAAAAA94017FFFFFFFFFFFFC0155555555555563FD1845C8A0CE50FC010AAAAAAAAA AA94017FFFFFFFFFFFFC012AAAAAAAAAAAB3FD0A9E87C65A434C010AAAAAAAAAAA9401 7FFFFFFFFFFFFC0100000000000003FCFFFFFFFFFFFF8C010AAAAAAAAAAA94017FFFFF FFFFFFFC00AAAAAAAAAAAAB3FCF0D4629B7F0CCC010AAAAAAAAAAA94017FFFFFFFFFFF FC0055555555555563FCE7BA375F31AE5C010AAAAAAAAAAA94017FFFFFFFFFFFFC0000 000000000013FCE4B17E4B17E43C010AAAAAAAAAAA94017FFFFFFFFFFFFBFF55555555 555583FCE7BA375F31AE6C010AAAAAAAAAAA94017FFFFFFFFFFFFBFE555555555555B3 FCF0D4629B7F0CCC010AAAAAAAAAAA94017FFFFFFFFFFFFBCC80000000000003FCFFFF FFFFFFFF8C010AAAAAAAAAAA94017FFFFFFFFFFFF3FE555555555554F3FD0A9E87C65A 434C010AAAAAAAAAAA94017FFFFFFFFFFFF3FF55555555555523FD1845C8A0CE50FC01 0AAAAAAAAAAA94017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD28F5C28F5C28BC010AAAAA AAAAAA94017FFFFFFFFFFFF40055555555555533FD3CAE759203CAAC010AAAAAAAAAAA 94017FFFFFFFFFFFF400AAAAAAAAAAAA83FD536FE1A8C536CC010AAAAAAAAAAA94017F FFFFFFFFFFF400FFFFFFFFFFFFD3FD6D3A06D3A06CFC010AAAAAAAAAAA94017FFFFFFF FFFFF4012AAAAAAAAAAA93FD8A0CE512956D4C010AAAAAAAAAAA94017FFFFFFFFFFFF4 0155555555555543FDA9E87C65A437EC010AAAAAAAAAAA94017FFFFFFFFFFFF4017FFF FFFFFFFFF3FDCCCCCCCCCCCC8C010AAAAAAAAAAA94017FFFFFFFFFFFF401AAAAAAAAAA AAA3FDF2B9D6480F2B6C010AAAAAAAAAAA94017FFFFFFFFFFFF401D5555555555553FE 0DD7CC6BB5AA3C010AAAAAAAAAAA94017FFFFFFFFFFFF40200000000000003FE23D70A 3D70A3CC010AAAAAAAAAAA94017FFFFFFFFFFFF40215555555555553FE3B5AA4993882 5C010AAAAAAAAAAA94017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE54629B7F0D460C010A AAAAAAAAAA94017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE6EEEEEEEEEEECC010AAAAAAA AAAA9401AAAAAAAAAAAAAC0240000000000003FE02D82D82D82D7C010AAAAAAAAAAA94 01AAAAAAAAAAAAAC022AAAAAAAAAAAB3FDE2CC0A9E87C63C010AAAAAAAAAAA9401AAAA AAAAAAAAAC0215555555555563FDC2F0734B78FBBC010AAAAAAAAAAA9401AAAAAAAAAA AAAC0200000000000013FDA61D950C83FB5C010AAAAAAAAAAA9401AAAAAAAAAAAAAC01 D5555555555573FD8C536FE1A8C51C010AAAAAAAAAAA9401AAAAAAAAAAAAAC01AAAAAA AAAAAAC3FD759203CAE758FC010AAAAAAAAAAA9401AAAAAAAAAAAAAC01800000000000 13FD61D950C83FB70C010AAAAAAAAAAA9401AAAAAAAAAAAAAC0155555555555563FD51 2956D9B1DF3C010AAAAAAAAAAA9401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD438215FF 3DD18C010AAAAAAAAAAA9401AAAAAAAAAAAAAC0100000000000003FD38E38E38E38E0C 010AAAAAAAAAAA9401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FD314DBF86A314AC010AAA AAAAAAAA9401AAAAAAAAAAAAAC0055555555555563FD2CC0A9E87C657C010AAAAAAAAA AA9401AAAAAAAAAAAAAC0000000000000013FD2B3C4D5E6F806C010AAAAAAAAAAA9401 AAAAAAAAAAAAABFF55555555555583FD2CC0A9E87C657C010AAAAAAAAAAA9401AAAAAA AAAAAAABFE555555555555B3FD314DBF86A314AC010AAAAAAAAAAA9401AAAAAAAAAAAA ABCC80000000000003FD38E38E38E38E0C010AAAAAAAAAAA9401AAAAAAAAAAAAA3FE55 5555555554F3FD438215FF3DD18C010AAAAAAAAAAA9401AAAAAAAAAAAAA3FF55555555 555523FD512956D9B1DF3C010AAAAAAAAAAA9401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3 FD61D950C83FB6FC010AAAAAAAAAAA9401AAAAAAAAAAAAA40055555555555533FD7592 03CAE758EC010AAAAAAAAAAA9401AAAAAAAAAAAAA400AAAAAAAAAAAA83FD8C536FE1A8 C50C010AAAAAAAAAAA9401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FDA61D950C83FB3C01 0AAAAAAAAAAA9401AAAAAAAAAAAAA4012AAAAAAAAAAA93FDC2F0734B78FB8C010AAAAA AAAAAA9401AAAAAAAAAAAAA40155555555555543FDE2CC0A9E87C62C010AAAAAAAAAAA 9401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FE02D82D82D82D6C010AAAAAAAAAAA9401AA AAAAAAAAAAA401AAAAAAAAAAAAA3FE15CEB240795CDC010AAAAAAAAAAA9401AAAAAAAA AAAAA401D5555555555553FE2A49938827715C010AAAAAAAAAAA9401AAAAAAAAAAAAA4 0200000000000003FE4048D159E26AEC010AAAAAAAAAAA9401AAAAAAAAAAAAA4021555 5555555553FE57CC6BB5AA497C010AAAAAAAAAAA9401AAAAAAAAAAAAA4022AAAAAAAAA AAA3FE70D4629B7F0D2C010AAAAAAAAAAA9401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE 8B60B60B60B5EC010AAAAAAAAAAA9401D555555555555C0240000000000003FE21907F 6E5D4C3C010AAAAAAAAAAA9401D555555555555C022AAAAAAAAAAAB3FE101E573AC901 EC010AAAAAAAAAAA9401D555555555555C0215555555555563FE00308B91419C9C010A AAAAAAAAAA9401D555555555555C0200000000000013FDE38E38E38E38DC010AAAAAAA AAAA9401D555555555555C01D5555555555573FDC9C413B8B3029C010AAAAAAAAAAA94 01D555555555555C01AAAAAAAAAAAAC3FDB302A7A1F1967C010AAAAAAAAAAA9401D555 555555555C0180000000000013FD9F49F49F49F48C010AAAAAAAAAAA9401D555555555 555C0155555555555563FD8E99FAB0BC1CBC010AAAAAAAAAAA9401D555555555555C01 2AAAAAAAAAAAB3FD80F2B9D6480F0C010AAAAAAAAAAA9401D555555555555C01000000 00000003FD7654320FEDCB8C010AAAAAAAAAAA9401D555555555555C00AAAAAAAAAAAA B3FD6EBE635DAD522C010AAAAAAAAAAA9401D555555555555C0055555555555563FD6A 314DBF86A2FC010AAAAAAAAAAA9401D555555555555C0000000000000013FD68ACF135 79BDEC010AAAAAAAAAAA9401D555555555555BFF55555555555583FD6A314DBF86A2FC 010AAAAAAAAAAA9401D555555555555BFE555555555555B3FD6EBE635DAD522C010AAA AAAAAAAA9401D555555555555BCC80000000000003FD7654320FEDCB8C010AAAAAAAAA AA9401D5555555555553FE555555555554F3FD80F2B9D6480F0C010AAAAAAAAAAA9401 D5555555555553FF55555555555523FD8E99FAB0BC1CBC010AAAAAAAAAAA9401D55555 55555553FFFFFFFFFFFFFFC3FD9F49F49F49F47C010AAAAAAAAAAA9401D55555555555 540055555555555533FDB302A7A1F1966C010AAAAAAAAAAA9401D555555555555400AA AAAAAAAAAA83FDC9C413B8B3028C010AAAAAAAAAAA9401D555555555555400FFFFFFFF FFFFD3FDE38E38E38E38BC010AAAAAAAAAAA9401D5555555555554012AAAAAAAAAAA93 FE00308B91419C8C010AAAAAAAAAAA9401D55555555555540155555555555543FE101E 573AC901DC010AAAAAAAAAAA9401D5555555555554017FFFFFFFFFFFF3FE21907F6E5D 4C2C010AAAAAAAAAAA9401D555555555555401AAAAAAAAAAAAA3FE3487042BFE7B9C01 0AAAAAAAAAAA9401D555555555555401D5555555555553FE4901E573AC901C010AAAAA AAAAAA9401D55555555555540200000000000003FE5F0123456789AC010AAAAAAAAAAA 9401D55555555555540215555555555553FE7684BDA12F683C010AAAAAAAAAAA9401D5 555555555554022AAAAAAAAAAAA3FE8F8CB487042BEC010AAAAAAAAAAA9401D5555555 555554023FFFFFFFFFFFF3FEAA1907F6E5D4AC010AAAAAAAAAAA94020000000000000C 0240000000000003FE428F5C28F5C28C010AAAAAAAAAAA94020000000000000C022AAA AAAAAAAAB3FE311D33F561783C010AAAAAAAAAAA94020000000000000C021555555555 5563FE212F684BDA12FC010AAAAAAAAAAA94020000000000000C0200000000000013FE 12C5F92C5F92CC010AAAAAAAAAAA94020000000000000C01D5555555555573FE05E0E6 96F1F7AC010AAAAAAAAAAA94020000000000000C01AAAAAAAAAAAAC3FDF50061172283 2C010AAAAAAAAAAA94020000000000000C0180000000000013FDE147AE147AE13C010A AAAAAAAAAA94020000000000000C0155555555555563FDD097B425ED096C010AAAAAAA AAAA94020000000000000C012AAAAAAAAAAAB3FDC2F0734B78FBBC010AAAAAAAAAAA94 020000000000000C0100000000000003FDB851EB851EB83C010AAAAAAAAAAA94020000 000000000C00AAAAAAAAAAAAB3FDB0BC1CD2DE3EDC010AAAAAAAAAAA94020000000000 000C0055555555555563FDAC2F0734B78FAC010AAAAAAAAAAA94020000000000000C00 00000000000013FDAAAAAAAAAAAA9C010AAAAAAAAAAA94020000000000000BFF555555 55555583FDAC2F0734B78FAC010AAAAAAAAAAA94020000000000000BFE555555555555 B3FDB0BC1CD2DE3EDC010AAAAAAAAAAA94020000000000000BCC80000000000003FDB8 51EB851EB83C010AAAAAAAAAAA940200000000000003FE555555555554F3FDC2F0734B 78FBBC010AAAAAAAAAAA940200000000000003FF55555555555523FDD097B425ED096C 010AAAAAAAAAAA940200000000000003FFFFFFFFFFFFFFC3FDE147AE147AE12C010AAA AAAAAAAA9402000000000000040055555555555533FDF500611722831C010AAAAAAAAA AA94020000000000000400AAAAAAAAAAAA83FE05E0E696F1F79C010AAAAAAAAAAA9402 0000000000000400FFFFFFFFFFFFD3FE12C5F92C5F92BC010AAAAAAAAAAA9402000000 00000004012AAAAAAAAAAA93FE212F684BDA12EC010AAAAAAAAAAA9402000000000000 040155555555555543FE311D33F561782C010AAAAAAAAAAA940200000000000004017F FFFFFFFFFFF3FE428F5C28F5C28C010AAAAAAAAAAA94020000000000000401AAAAAAAA AAAAA3FE5585E0E696F1EC010AAAAAAAAAAA94020000000000000401D5555555555553 FE6A00C22E45066C010AAAAAAAAAAA9402000000000000040200000000000003FE7FFF FFFFFFFFFC010AAAAAAAAAAA9402000000000000040215555555555553FE97839A5BC7 DE9C010AAAAAAAAAAA940200000000000004022AAAAAAAAAAAA3FEB08B91419CA23C01 0AAAAAAAAAAA940200000000000004023FFFFFFFFFFFF3FECB17E4B17E4B0C010AAAAA AAAAAA94021555555555555C0240000000000003FE65D4C3B2A1906C010AAAAAAAAAAA 94021555555555555C022AAAAAAAAAAAB3FE54629B7F0D462C010AAAAAAAAAAA940215 55555555555C0215555555555563FE4474CFD585E0DC010AAAAAAAAAAA940215555555 55555C0200000000000013FE360B60B60B60BC010AAAAAAAAAAA94021555555555555C 01D5555555555573FE29264E209DC59C010AAAAAAAAAAA94021555555555555C01AAAA AAAAAAAAC3FE1DC598153D0F8C010AAAAAAAAAAA94021555555555555C018000000000 0013FE13E93E93E93E8C010AAAAAAAAAAA94021555555555555C0155555555555563FE 0B91419CA2529C010AAAAAAAAAAA94021555555555555C012AAAAAAAAAAAB3FE04BDA1 2F684BCC010AAAAAAAAAAA94021555555555555C0100000000000003FDFEDCBA987654 0C010AAAAAAAAAAA94021555555555555C00AAAAAAAAAAAAB3FDF746EBE635DAAC010A AAAAAAAAAA94021555555555555C0055555555555563FDF2B9D6480F2B7C010AAAAAAA AAAA94021555555555555C0000000000000013FDF13579BE02466C010AAAAAAAAAAA94 021555555555555BFF55555555555583FDF2B9D6480F2B7C010AAAAAAAAAAA94021555 555555555BFE555555555555B3FDF746EBE635DAAC010AAAAAAAAAAA94021555555555 555BCC80000000000003FDFEDCBA9876540C010AAAAAAAAAAA940215555555555553FE 555555555554F3FE04BDA12F684BCC010AAAAAAAAAAA940215555555555553FF555555 55555523FE0B91419CA2529C010AAAAAAAAAAA940215555555555553FFFFFFFFFFFFFF C3FE13E93E93E93E7C010AAAAAAAAAAA9402155555555555540055555555555533FE1D C598153D0F7C010AAAAAAAAAAA94021555555555555400AAAAAAAAAAAA83FE29264E20 9DC57C010AAAAAAAAAAA94021555555555555400FFFFFFFFFFFFD3FE360B60B60B60AC 010AAAAAAAAAAA940215555555555554012AAAAAAAAAAA93FE4474CFD585E0CC010AAA AAAAAAAA9402155555555555540155555555555543FE54629B7F0D461C010AAAAAAAAA AA940215555555555554017FFFFFFFFFFFF3FE65D4C3B2A1906C010AAAAAAAAAAA9402 1555555555555401AAAAAAAAAAAAA3FE78CB487042BFDC010AAAAAAAAAAA9402155555 5555555401D5555555555553FE8D4629B7F0D44C010AAAAAAAAAAA9402155555555555 540200000000000003FEA3456789ABCDEC010AAAAAAAAAAA9402155555555555540215 555555555553FEBAC901E573AC7C010AAAAAAAAAAA940215555555555554022AAAAAAA AAAAA3FED3D0F8CB48702C010AAAAAAAAAAA940215555555555554023FFFFFFFFFFFF3 FEEE5D4C3B2A18EC010AAAAAAAAAAA94022AAAAAAAAAAAAC0240000000000003FE8B60 B60B60B5EC010AAAAAAAAAAA94022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE79EE8DD7CC 6BAC010AAAAAAAAAAA94022AAAAAAAAAAAAC0215555555555563FE6A00C22E45065C01 0AAAAAAAAAAA94022AAAAAAAAAAAAC0200000000000013FE5B97530ECA863C010AAAAA AAAAAA94022AAAAAAAAAAAAC01D5555555555573FE4EB240795CEB1C010AAAAAAAAAAA 94022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE43518A6DFC350C010AAAAAAAAAAA94022A AAAAAAAAAAAC0180000000000013FE397530ECA8640C010AAAAAAAAAAA94022AAAAAAA AAAAAC0155555555555563FE311D33F561781C010AAAAAAAAAAA94022AAAAAAAAAAAAC 012AAAAAAAAAAAB3FE2A49938827715C010AAAAAAAAAAA94022AAAAAAAAAAAAC010000 0000000003FE24FA4FA4FA4F8C010AAAAAAAAAAA94022AAAAAAAAAAAAC00AAAAAAAAAA AAB3FE212F684BDA12EC010AAAAAAAAAAA94022AAAAAAAAAAAAC0055555555555563FE 1EE8DD7CC6BB3C010AAAAAAAAAAA94022AAAAAAAAAAAAC0000000000000013FE1E26AF 37C048AC010AAAAAAAAAAA94022AAAAAAAAAAAABFF55555555555583FE1EE8DD7CC6BB 3C010AAAAAAAAAAA94022AAAAAAAAAAAABFE555555555555B3FE212F684BDA12DC010A AAAAAAAAAA94022AAAAAAAAAAAABCC80000000000003FE24FA4FA4FA4F8C010AAAAAAA AAAA94022AAAAAAAAAAAA3FE555555555554F3FE2A49938827714C010AAAAAAAAAAA94 022AAAAAAAAAAAA3FF55555555555523FE311D33F561781C010AAAAAAAAAAA94022AAA AAAAAAAAA3FFFFFFFFFFFFFFC3FE397530ECA863FC010AAAAAAAAAAA94022AAAAAAAAA AAA40055555555555533FE43518A6DFC34FC010AAAAAAAAAAA94022AAAAAAAAAAAA400 AAAAAAAAAAAA83FE4EB240795CEAFC010AAAAAAAAAAA94022AAAAAAAAAAAA400FFFFFF FFFFFFD3FE5B97530ECA862C010AAAAAAAAAAA94022AAAAAAAAAAAA4012AAAAAAAAAAA 93FE6A00C22E45064C010AAAAAAAAAAA94022AAAAAAAAAAAA40155555555555543FE79 EE8DD7CC6B9C010AAAAAAAAAAA94022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE8B60B60B 60B5EC010AAAAAAAAAAA94022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE9E573AC901E55C 010AAAAAAAAAAA94022AAAAAAAAAAAA401D5555555555553FEB2D21C10AFF9CC010AAA AAAAAAAA94022AAAAAAAAAAAA40200000000000003FEC8D159E26AF36C010AAAAAAAAA AA94022AAAAAAAAAAAA40215555555555553FEE054F43E32D1FC010AAAAAAAAAAA9402 2AAAAAAAAAAAA4022AAAAAAAAAAAA3FEF95CEB240795AC010AAAAAAAAAAA94022AAAAA AAAAAAA4023FFFFFFFFFFFF3FF09F49F49F49F3C010AAAAAAAAAAA94023FFFFFFFFFFF FC0240000000000003FEB333333333331C010AAAAAAAAAAA94023FFFFFFFFFFFFC022A AAAAAAAAAAB3FEA1C10AFF9EE8CC010AAAAAAAAAAA94023FFFFFFFFFFFFC0215555555 555563FE91D33F5617837C010AAAAAAAAAAA94023FFFFFFFFFFFFC0200000000000013 FE8369D0369D035C010AAAAAAAAAAA94023FFFFFFFFFFFFC01D5555555555573FE7684 BDA12F682C010AAAAAAAAAAA94023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE6B240795CE B22C010AAAAAAAAAAA94023FFFFFFFFFFFFC0180000000000013FE6147AE147AE12C01 0AAAAAAAAAAA94023FFFFFFFFFFFFC0155555555555563FE58EFB11D33F53C010AAAAA AAAAAA94023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE521C10AFF9EE7C010AAAAAAAAAAA 94023FFFFFFFFFFFFC0100000000000003FE4CCCCCCCCCCCAC010AAAAAAAAAAA94023F FFFFFFFFFFFC00AAAAAAAAAAAAB3FE4901E573AC900C010AAAAAAAAAAA94023FFFFFFF FFFFFC0055555555555563FE46BB5AA499385C010AAAAAAAAAAA94023FFFFFFFFFFFFC 0000000000000013FE45F92C5F92C5CC010AAAAAAAAAAA94023FFFFFFFFFFFFBFF5555 5555555583FE46BB5AA499385C010AAAAAAAAAAA94023FFFFFFFFFFFFBFE5555555555 55B3FE4901E573AC8FFC010AAAAAAAAAAA94023FFFFFFFFFFFFBCC80000000000003FE 4CCCCCCCCCCCAC010AAAAAAAAAAA94023FFFFFFFFFFFF3FE555555555554F3FE521C10 AFF9EE6C010AAAAAAAAAAA94023FFFFFFFFFFFF3FF55555555555523FE58EFB11D33F5 3C010AAAAAAAAAAA94023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE6147AE147AE11C010A AAAAAAAAAA94023FFFFFFFFFFFF40055555555555533FE6B240795CEB21C010AAAAAAA AAAA94023FFFFFFFFFFFF400AAAAAAAAAAAA83FE7684BDA12F681C010AAAAAAAAAAA94 023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE8369D0369D034C010AAAAAAAAAAA94023FFF FFFFFFFFF4012AAAAAAAAAAA93FE91D33F5617836C010AAAAAAAAAAA94023FFFFFFFFF FFF40155555555555543FEA1C10AFF9EE8BC010AAAAAAAAAAA94023FFFFFFFFFFFF401 7FFFFFFFFFFFF3FEB333333333330C010AAAAAAAAAAA94023FFFFFFFFFFFF401AAAAAA AAAAAAA3FEC629B7F0D4627C010AAAAAAAAAAA94023FFFFFFFFFFFF401D55555555555 53FEDAA499388276EC010AAAAAAAAAAA94023FFFFFFFFFFFF40200000000000003FEF0 A3D70A3D708C010AAAAAAAAAAA94023FFFFFFFFFFFF40215555555555553FF0413B8B3 02A78C010AAAAAAAAAAA94023FFFFFFFFFFFF4022AAAAAAAAAAAA3FF1097B425ED096C 010AAAAAAAAAAA94023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF1DDDDDDDDDDDCC00FFFF FFFFFFFFDC024000000000000C0240000000000003FDBBBBBBBBBBBBAC00FFFFFFFFFF FFDC024000000000000C022AAAAAAAAAAAB3FD98D76B5493270C00FFFFFFFFFFFFDC02 4000000000000C0215555555555563FD78FBD401845C8C00FFFFFFFFFFFFDC02400000 0000000C0200000000000013FD5C28F5C28F5C2C00FFFFFFFFFFFFDC02400000000000 0C01D5555555555573FD425ED097B425EC00FFFFFFFFFFFFDC024000000000000C01AA AAAAAAAAAAC3FD2B9D6480F2B9CC00FFFFFFFFFFFFDC024000000000000C0180000000 000013FD17E4B17E4B17DC00FFFFFFFFFFFFDC024000000000000C0155555555555563 FD0734B78FBD400C00FFFFFFFFFFFFDC024000000000000C012AAAAAAAAAAAB3FCF31A ED6A9264BC00FFFFFFFFFFFFDC024000000000000C0100000000000003FCDDDDDDDDDD DDAC00FFFFFFFFFFFFDC024000000000000C00AAAAAAAAAAAAB3FCCEB240795CEAEC00 FFFFFFFFFFFFDC024000000000000C0055555555555563FCC598153D0F8C7C00FFFFFF FFFFFFDC024000000000000C0000000000000013FCC28F5C28F5C25C00FFFFFFFFFFFF DC024000000000000BFF55555555555583FCC598153D0F8C8C00FFFFFFFFFFFFDC0240 00000000000BFE555555555555B3FCCEB240795CEAEC00FFFFFFFFFFFFDC0240000000 00000BCC80000000000003FCDDDDDDDDDDDDAC00FFFFFFFFFFFFDC0240000000000003 FE555555555554F3FCF31AED6A9264AC00FFFFFFFFFFFFDC0240000000000003FF5555 5555555523FD0734B78FBD400C00FFFFFFFFFFFFDC0240000000000003FFFFFFFFFFFF FFC3FD17E4B17E4B17CC00FFFFFFFFFFFFDC02400000000000040055555555555533FD 2B9D6480F2B9BC00FFFFFFFFFFFFDC024000000000000400AAAAAAAAAAAA83FD425ED0 97B425DC00FFFFFFFFFFFFDC024000000000000400FFFFFFFFFFFFD3FD5C28F5C28F5C 0C00FFFFFFFFFFFFDC0240000000000004012AAAAAAAAAAA93FD78FBD401845C5C00FF FFFFFFFFFFDC02400000000000040155555555555543FD98D76B549326FC00FFFFFFFF FFFFDC0240000000000004017FFFFFFFFFFFF3FDBBBBBBBBBBBB9C00FFFFFFFFFFFFDC 024000000000000401AAAAAAAAAAAAA3FDE1A8C536FE1A7C00FFFFFFFFFFFFDC024000 000000000401D5555555555553FE054F43E32D21BC00FFFFFFFFFFFFDC024000000000 00040200000000000003FE1B4E81B4E81B4C00FFFFFFFFFFFFDC024000000000000402 15555555555553FE32D21C10AFF9EC00FFFFFFFFFFFFDC0240000000000004022AAAAA AAAAAAA3FE4BDA12F684BD8C00FFFFFFFFFFFFDC0240000000000004023FFFFFFFFFFF F3FE6666666666665C00FFFFFFFFFFFFDC022AAAAAAAAAAABC0240000000000003FD87 654320FEDCBC00FFFFFFFFFFFFDC022AAAAAAAAAAABC022AAAAAAAAAAAB3FD6480F2B9 D6481C00FFFFFFFFFFFFDC022AAAAAAAAAAABC0215555555555563FD44A55B66C77D9C 00FFFFFFFFFFFFDC022AAAAAAAAAAABC0200000000000013FD27D27D27D27D3C00FFFF FFFFFFFFDC022AAAAAAAAAAABC01D5555555555573FD0E0857FCF746FC00FFFFFFFFFF FFDC022AAAAAAAAAAABC01AAAAAAAAAAAAC3FCEE8DD7CC6BB5AC00FFFFFFFFFFFFDC02 2AAAAAAAAAAABC0180000000000013FCC71C71C71C71CC00FFFFFFFFFFFFDC022AAAAA AAAAAABC0155555555555563FCA5BC7DEA00C22C00FFFFFFFFFFFFDC022AAAAAAAAAAA BC012AAAAAAAAAAAB3FC8A6DFC3518A6DC00FFFFFFFFFFFFDC022AAAAAAAAAAABC0100 000000000003FC7530ECA8641FCC00FFFFFFFFFFFFDC022AAAAAAAAAAABC00AAAAAAAA AAAAB3FC66054F43E32D0C00FFFFFFFFFFFFDC022AAAAAAAAAAABC0055555555555563 FC5CEB240795CE9C00FFFFFFFFFFFFDC022AAAAAAAAAAABC0000000000000013FC59E2 6AF37C047C00FFFFFFFFFFFFDC022AAAAAAAAAAABBFF55555555555583FC5CEB240795 CEAC00FFFFFFFFFFFFDC022AAAAAAAAAAABBFE555555555555B3FC66054F43E32D0C00 FFFFFFFFFFFFDC022AAAAAAAAAAABBCC80000000000003FC7530ECA8641FCC00FFFFFF FFFFFFDC022AAAAAAAAAAAB3FE555555555554F3FC8A6DFC3518A6CC00FFFFFFFFFFFF DC022AAAAAAAAAAAB3FF55555555555523FCA5BC7DEA00C21C00FFFFFFFFFFFFDC022A AAAAAAAAAAB3FFFFFFFFFFFFFFC3FCC71C71C71C71AC00FFFFFFFFFFFFDC022AAAAAAA AAAAB40055555555555533FCEE8DD7CC6BB58C00FFFFFFFFFFFFDC022AAAAAAAAAAAB4 00AAAAAAAAAAAA83FD0E0857FCF746DC00FFFFFFFFFFFFDC022AAAAAAAAAAAB400FFFF FFFFFFFFD3FD27D27D27D27D1C00FFFFFFFFFFFFDC022AAAAAAAAAAAB4012AAAAAAAAA AA93FD44A55B66C77D7C00FFFFFFFFFFFFDC022AAAAAAAAAAAB40155555555555543FD 6480F2B9D6480C00FFFFFFFFFFFFDC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FD876543 20FEDCAC00FFFFFFFFFFFFDC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FDAD524C9C413B 8C00FFFFFFFFFFFFDC022AAAAAAAAAAAB401D5555555555553FDD6480F2B9D647C00FF FFFFFFFFFFDC022AAAAAAAAAAAB40200000000000003FE0123456789ABDC00FFFFFFFF FFFFDC022AAAAAAAAAAAB40215555555555553FE18A6DFC3518A6C00FFFFFFFFFFFFDC 022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE31AED6A9264E1C00FFFFFFFFFFFFDC022AAA AAAAAAAAB4023FFFFFFFFFFFF3FE4C3B2A1907F6DC00FFFFFFFFFFFFDC021555555555 556C0240000000000003FD579BE02468ACEC00FFFFFFFFFFFFDC021555555555556C02 2AAAAAAAAAAAB3FD34B78FBD40184C00FFFFFFFFFFFFDC021555555555556C02155555 55555563FD14DBF86A314DCC00FFFFFFFFFFFFDC021555555555556C02000000000000 13FCF0123456789ACC00FFFFFFFFFFFFDC021555555555556C01D5555555555573FCBC 7DEA00C22E4C00FFFFFFFFFFFFDC021555555555556C01AAAAAAAAAAAAC3FC8EFB11D3 3F560C00FFFFFFFFFFFFDC021555555555556C0180000000000013FC6789ABCDF0122C 00FFFFFFFFFFFFDC021555555555556C0155555555555563FC4629B7F0D4628C00FFFF FFFFFFFFDC021555555555556C012AAAAAAAAAAAB3FC2ADB363BEC473C00FFFFFFFFFF FFDC021555555555556C0100000000000003FC159E26AF37C02C00FFFFFFFFFFFFDC02 1555555555556C00AAAAAAAAAAAAB3FC0672894AB6CD6C00FFFFFFFFFFFFDC02155555 5555556C0055555555555563FBFAB0BC1CD2DDFC00FFFFFFFFFFFFDC02155555555555 6C0000000000000013FBF49F49F49F49AC00FFFFFFFFFFFFDC021555555555556BFF55 555555555583FBFAB0BC1CD2DDFC00FFFFFFFFFFFFDC021555555555556BFE55555555 5555B3FC0672894AB6CD6C00FFFFFFFFFFFFDC021555555555556BCC80000000000003 FC159E26AF37C02C00FFFFFFFFFFFFDC0215555555555563FE555555555554F3FC2ADB 363BEC472C00FFFFFFFFFFFFDC0215555555555563FF55555555555523FC4629B7F0D4 627C00FFFFFFFFFFFFDC0215555555555563FFFFFFFFFFFFFFC3FC6789ABCDF0120C00 FFFFFFFFFFFFDC02155555555555640055555555555533FC8EFB11D33F55EC00FFFFFF FFFFFFDC021555555555556400AAAAAAAAAAAA83FCBC7DEA00C22E0C00FFFFFFFFFFFF DC021555555555556400FFFFFFFFFFFFD3FCF0123456789A7C00FFFFFFFFFFFFDC0215 555555555564012AAAAAAAAAAA93FD14DBF86A314DAC00FFFFFFFFFFFFDC0215555555 5555640155555555555543FD34B78FBD40182C00FFFFFFFFFFFFDC0215555555555564 017FFFFFFFFFFFF3FD579BE02468ACDC00FFFFFFFFFFFFDC021555555555556401AAAA AAAAAAAAA3FD7D88E99FAB0BAC00FFFFFFFFFFFFDC021555555555556401D555555555 5553FDA67EAC2F0734AC00FFFFFFFFFFFFDC02155555555555640200000000000003FD D27D27D27D27CC00FFFFFFFFFFFFDC02155555555555640215555555555553FE00C22E 4506728C00FFFFFFFFFFFFDC0215555555555564022AAAAAAAAAAAA3FE19CA252ADB36 2C00FFFFFFFFFFFFDC0215555555555564023FFFFFFFFFFFF3FE3456789ABCDEFC00FF FFFFFFFFFFDC020000000000001C0240000000000003FD2C5F92C5F92C6C00FFFFFFFF FFFFDC020000000000001C022AAAAAAAAAAAB3FD097B425ED097CC00FFFFFFFFFFFFDC 020000000000001C0215555555555563FCD33F5617839A7C00FFFFFFFFFFFFDC020000 000000001C0200000000000013FC999999999999CC00FFFFFFFFFFFFDC020000000000 001C01D5555555555573FC66054F43E32D4C00FFFFFFFFFFFFDC020000000000001C01 AAAAAAAAAAAAC3FC3882771660550C00FFFFFFFFFFFFDC020000000000001C01800000 00000013FC1111111111112C00FFFFFFFFFFFFDC020000000000001C01555555555555 63FBDF623A67EAC2FC00FFFFFFFFFFFFDC020000000000001C012AAAAAAAAAAAB3FBA8 C536FE1A8C5C00FFFFFFFFFFFFDC020000000000001C0100000000000003FB7E4B17E4 B17E4C00FFFFFFFFFFFFDC020000000000001C00AAAAAAAAAAAAB3FB5FF3DD1BAF98DC 00FFFFFFFFFFFFDC020000000000001C0055555555555563FB4DBF86A314DBFC00FFFF FFFFFFFFDC020000000000001C0000000000000013FB47AE147AE147AC00FFFFFFFFFF FFDC020000000000001BFF55555555555583FB4DBF86A314DBFC00FFFFFFFFFFFFDC02 0000000000001BFE555555555555B3FB5FF3DD1BAF98CC00FFFFFFFFFFFFDC02000000 0000001BCC80000000000003FB7E4B17E4B17E3C00FFFFFFFFFFFFDC02000000000000 13FE555555555554F3FBA8C536FE1A8C3C00FFFFFFFFFFFFDC0200000000000013FF55 555555555523FBDF623A67EAC2DC00FFFFFFFFFFFFDC0200000000000013FFFFFFFFFF FFFFC3FC1111111111110C00FFFFFFFFFFFFDC02000000000000140055555555555533 FC388277166054EC00FFFFFFFFFFFFDC020000000000001400AAAAAAAAAAAA83FC6605 4F43E32D0C00FFFFFFFFFFFFDC020000000000001400FFFFFFFFFFFFD3FC9999999999 997C00FFFFFFFFFFFFDC0200000000000014012AAAAAAAAAAA93FCD33F5617839A3C00 FFFFFFFFFFFFDC02000000000000140155555555555543FD097B425ED097AC00FFFFFF FFFFFFDC0200000000000014017FFFFFFFFFFFF3FD2C5F92C5F92C5C00FFFFFFFFFFFF DC020000000000001401AAAAAAAAAAAAA3FD524C9C413B8B2C00FFFFFFFFFFFFDC0200 00000000001401D5555555555553FD7B425ED097B42C00FFFFFFFFFFFFDC0200000000 0000140200000000000003FDA740DA740DA74C00FFFFFFFFFFFFDC0200000000000014 0215555555555553FDD6480F2B9D647C00FFFFFFFFFFFFDC0200000000000014022AAA AAAAAAAAA3FE042BFE7BA375EC00FFFFFFFFFFFFDC0200000000000014023FFFFFFFFF FFF3FE1EB851EB851EBC00FFFFFFFFFFFFDC01D555555555557C0240000000000003FD 05B05B05B05B0C00FFFFFFFFFFFFDC01D555555555557C022AAAAAAAAAAAB3FCC59815 3D0F8CCC00FFFFFFFFFFFFDC01D555555555557C0215555555555563FC85E0E696F1F7 BC00FFFFFFFFFFFFDC01D555555555557C0200000000000013FC4C3B2A1907F70C00FF FFFFFFFFFFDC01D555555555557C01D5555555555573FC18A6DFC3518A8C00FFFFFFFF FFFFDC01D555555555557C01AAAAAAAAAAAAC3FBD6480F2B9D647C00FFFFFFFFFFFFDC 01D555555555557C0180000000000013FB87654320FEDCCC00FFFFFFFFFFFFDC01D555 555555557C0155555555555563FB44A55B66C77D7C00FFFFFFFFFFFFDC01D555555555 557C012AAAAAAAAAAAB3FB0E0857FCF746DC00FFFFFFFFFFFFDC01D555555555557C01 00000000000003FAC71C71C71C717C00FFFFFFFFFFFFDC01D555555555557C00AAAAAA AAAAAAB3FA8A6DFC3518A69C00FFFFFFFFFFFFDC01D555555555557C00555555555555 63FA66054F43E32CDC00FFFFFFFFFFFFDC01D555555555557C0000000000000013FA59 E26AF37C043C00FFFFFFFFFFFFDC01D555555555557BFF55555555555583FA66054F43 E32CCC00FFFFFFFFFFFFDC01D555555555557BFE555555555555B3FA8A6DFC3518A68C 00FFFFFFFFFFFFDC01D555555555557BCC80000000000003FAC71C71C71C716C00FFFF FFFFFFFFDC01D5555555555573FE555555555554F3FB0E0857FCF746BC00FFFFFFFFFF FFDC01D5555555555573FF55555555555523FB44A55B66C77D5C00FFFFFFFFFFFFDC01 D5555555555573FFFFFFFFFFFFFFC3FB87654320FEDC7C00FFFFFFFFFFFFDC01D55555 555555740055555555555533FBD6480F2B9D643C00FFFFFFFFFFFFDC01D55555555555 7400AAAAAAAAAAAA83FC18A6DFC3518A4C00FFFFFFFFFFFFDC01D555555555557400FF FFFFFFFFFFD3FC4C3B2A1907F6BC00FFFFFFFFFFFFDC01D5555555555574012AAAAAAA AAAA93FC85E0E696F1F77C00FFFFFFFFFFFFDC01D55555555555740155555555555543 FCC598153D0F8C8C00FFFFFFFFFFFFDC01D5555555555574017FFFFFFFFFFFF3FD05B0 5B05B05AFC00FFFFFFFFFFFFDC01D555555555557401AAAAAAAAAAAAA3FD2B9D6480F2 B9CC00FFFFFFFFFFFFDC01D555555555557401D5555555555553FD549327104EE2CC00 FFFFFFFFFFFFDC01D55555555555740200000000000003FD8091A2B3C4D5EC00FFFFFF FFFFFFDC01D55555555555740215555555555553FDAF98D76B54931C00FFFFFFFFFFFF DC01D5555555555574022AAAAAAAAAAAA3FDE1A8C536FE1A7C00FFFFFFFFFFFFDC01D5 555555555574023FFFFFFFFFFFF3FE0B60B60B60B60C00FFFFFFFFFFFFDC01AAAAAAAA AAAACC0240000000000003FCC71C71C71C71AC00FFFFFFFFFFFFDC01AAAAAAAAAAAACC 022AAAAAAAAAAAB3FC8153D0F8CB486C00FFFFFFFFFFFFDC01AAAAAAAAAAAACC021555 5555555563FC419CA252ADB35C00FFFFFFFFFFFFDC01AAAAAAAAAAAACC020000000000 0013FC07F6E5D4C3B2AC00FFFFFFFFFFFFDC01AAAAAAAAAAAACC01D5555555555573FB A8C536FE1A8C3C00FFFFFFFFFFFFDC01AAAAAAAAAAAACC01AAAAAAAAAAAAC3FB4DBF86 A314DBBC00FFFFFFFFFFFFDC01AAAAAAAAAAAACC0180000000000013FAFDB97530ECA8 0C00FFFFFFFFFFFFDC01AAAAAAAAAAAACC0155555555555563FA7839A5BC7DE96C00FF FFFFFFFFFFDC01AAAAAAAAAAAACC012AAAAAAAAAAAB3FA0AFF9EE8DD7C2C00FFFFFFFF FFFFDC01AAAAAAAAAAAACC0100000000000003F96C16C16C16BFFC00FFFFFFFFFFFFDC 01AAAAAAAAAAAACC00AAAAAAAAAAAAB3F8E573AC901E545C00FFFFFFFFFFFFDC01AAAA AAAAAAAACC0055555555555563F853D0F8CB486D4C00FFFFFFFFFFFFDC01AAAAAAAAAA AACC0000000000000013F823456789ABCAFC00FFFFFFFFFFFFDC01AAAAAAAAAAAACBFF 55555555555583F853D0F8CB486D3C00FFFFFFFFFFFFDC01AAAAAAAAAAAACBFE555555 555555B3F8E573AC901E541C00FFFFFFFFFFFFDC01AAAAAAAAAAAACBCC800000000000 03F96C16C16C16BFCC00FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FE555555555554F3FA0A FF9EE8DD7BFC00FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FF55555555555523FA7839A5BC 7DE92C00FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FAFDB97530ECA77C 00FFFFFFFFFFFFDC01AAAAAAAAAAAAC40055555555555533FB4DBF86A314DB8C00FFFF FFFFFFFFDC01AAAAAAAAAAAAC400AAAAAAAAAAAA83FBA8C536FE1A8BDC00FFFFFFFFFF FFDC01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FC07F6E5D4C3B25C00FFFFFFFFFFFFDC01 AAAAAAAAAAAAC4012AAAAAAAAAAA93FC419CA252ADB31C00FFFFFFFFFFFFDC01AAAAAA AAAAAAC40155555555555543FC8153D0F8CB482C00FFFFFFFFFFFFDC01AAAAAAAAAAAA C4017FFFFFFFFFFFF3FCC71C71C71C718C00FFFFFFFFFFFFDC01AAAAAAAAAAAAC401AA AAAAAAAAAAA3FD097B425ED0979C00FFFFFFFFFFFFDC01AAAAAAAAAAAAC401D5555555 555553FD327104EE2CC09C00FFFFFFFFFFFFDC01AAAAAAAAAAAAC40200000000000003 FD5E6F8091A2B3BC00FFFFFFFFFFFFDC01AAAAAAAAAAAAC40215555555555553FD8D76 B5493270EC00FFFFFFFFFFFFDC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FDBF86A314DB F84C00FFFFFFFFFFFFDC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FDF49F49F49F49CC00 FFFFFFFFFFFFDC018000000000001C0240000000000003FC8BF258BF258BDC00FFFFFF FFFFFFDC018000000000001C022AAAAAAAAAAAB3FC4629B7F0D4629C00FFFFFFFFFFFF DC018000000000001C0215555555555563FC0672894AB6CD8C00FFFFFFFFFFFFDC0180 00000000001C0200000000000013FB999999999999AC00FFFFFFFFFFFFDC0180000000 00001C01D5555555555573FB327104EE2CC09C00FFFFFFFFFFFFDC018000000000001C 01AAAAAAAAAAAAC3FAAED6A9264E205C00FFFFFFFFFFFFDC018000000000001C018000 0000000013FA111111111110DC00FFFFFFFFFFFFDC018000000000001C015555555555 5563F91722833944A44C00FFFFFFFFFFFFDC018000000000001C012AAAAAAAAAAAB3F6 E573AC901E4E1C00FFFFFFFFFFFFDC018000000000001C010000000000000BF7B4E81B 4E81BA0C00FFFFFFFFFFFFDC018000000000001C00AAAAAAAAAAAABBF8CD2DE3EF5008 BC00FFFFFFFFFFFFDC018000000000001C005555555555556BF92F684BDA12F7DC00FF FFFFFFFFFFDC018000000000001C000000000000001BF947AE147AE1491C00FFFFFFFF FFFFDC018000000000001BFF5555555555558BF92F684BDA12F7EC00FFFFFFFFFFFFDC 018000000000001BFE555555555555BBF8CD2DE3EF5008EC00FFFFFFFFFFFFDC018000 000000001BCC8000000000000BF7B4E81B4E81BACC00FFFFFFFFFFFFDC018000000000 0013FE555555555554F3F6E573AC901E4B2C00FFFFFFFFFFFFDC0180000000000013FF 55555555555523F91722833944A3DC00FFFFFFFFFFFFDC0180000000000013FFFFFFFF FFFFFFC3FA1111111111104C00FFFFFFFFFFFFDC018000000000001400555555555555 33FAAED6A9264E1FBC00FFFFFFFFFFFFDC018000000000001400AAAAAAAAAAAA83FB32 7104EE2CC03C00FFFFFFFFFFFFDC018000000000001400FFFFFFFFFFFFD3FB99999999 99991C00FFFFFFFFFFFFDC0180000000000014012AAAAAAAAAAA93FC0672894AB6CD4C 00FFFFFFFFFFFFDC01800000000000140155555555555543FC4629B7F0D4625C00FFFF FFFFFFFFDC0180000000000014017FFFFFFFFFFFF3FC8BF258BF258BBC00FFFFFFFFFF FFDC018000000000001401AAAAAAAAAAAAA3FCD7CC6BB5AA496C00FFFFFFFFFFFFDC01 8000000000001401D5555555555553FD14DBF86A314DBC00FFFFFFFFFFFFDC01800000 000000140200000000000003FD40DA740DA740DC00FFFFFFFFFFFFDC01800000000000 140215555555555553FD6FE1A8C536FE0C00FFFFFFFFFFFFDC0180000000000014022A AAAAAAAAAAA3FDA1F19690E0855C00FFFFFFFFFFFFDC0180000000000014023FFFFFFF FFFFF3FDD70A3D70A3D6EC00FFFFFFFFFFFFDC015555555555556C0240000000000003 FC59E26AF37C045C00FFFFFFFFFFFFDC015555555555556C022AAAAAAAAAAAB3FC1419 CA252ADB1C00FFFFFFFFFFFFDC015555555555556C0215555555555563FBA8C536FE1A 8C0C00FFFFFFFFFFFFDC015555555555556C0200000000000013FB3579BE02468ABC00 FFFFFFFFFFFFDC015555555555556C01D5555555555573FA9CA252ADB3635C00FFFFFF FFFFFFDC015555555555556C01AAAAAAAAAAAAC3F9CD2DE3EF50049C00FFFFFFFFFFFF DC015555555555556C0180000000000013F823456789ABCB2C00FFFFFFFFFFFFDC0155 55555555556C015555555555556BF7E573AC901E5EEC00FFFFFFFFFFFFDC0155555555 55556C012AAAAAAAAAAABBF953D0F8CB48720C00FFFFFFFFFFFFDC015555555555556C 010000000000000BF9FDB97530ECAA6C00FFFFFFFFFFFFDC015555555555556C00AAAA AAAAAAAABBFA3B8B302A7A201C00FFFFFFFFFFFFDC015555555555556C005555555555 556BFA5FF3DD1BAF99EC00FFFFFFFFFFFFDC015555555555556C000000000000001BFA 6C16C16C16C27C00FFFFFFFFFFFFDC015555555555556BFF5555555555558BFA5FF3DD 1BAF99EC00FFFFFFFFFFFFDC015555555555556BFE555555555555BBFA3B8B302A7A20 3C00FFFFFFFFFFFFDC015555555555556BCC8000000000000BF9FDB97530ECAAAC00FF FFFFFFFFFFDC0155555555555563FE555555555554FBF953D0F8CB48728C00FFFFFFFF FFFFDC0155555555555563FF5555555555552BF7E573AC901E607C00FFFFFFFFFFFFDC 0155555555555563FFFFFFFFFFFFFFC3F823456789ABC91C00FFFFFFFFFFFFDC015555 55555555640055555555555533F9CD2DE3EF50038C00FFFFFFFFFFFFDC015555555555 556400AAAAAAAAAAAA83FA9CA252ADB3627C00FFFFFFFFFFFFDC015555555555556400 FFFFFFFFFFFFD3FB3579BE02468A1C00FFFFFFFFFFFFDC0155555555555564012AAAAA AAAAAA93FBA8C536FE1A8B9C00FFFFFFFFFFFFDC015555555555556401555555555555 43FC1419CA252ADAEC00FFFFFFFFFFFFDC0155555555555564017FFFFFFFFFFFF3FC59 E26AF37C043C00FFFFFFFFFFFFDC015555555555556401AAAAAAAAAAAAA3FCA5BC7DEA 00C1EC00FFFFFFFFFFFFDC015555555555556401D5555555555553FCF7A80308B913DC 00FFFFFFFFFFFFDC01555555555555640200000000000003FD27D27D27D27D1C00FFFF FFFFFFFFDC01555555555555640215555555555553FD56D9B1DF623A4C00FFFFFFFFFF FFDC0155555555555564022AAAAAAAAAAAA3FD88E99FAB0BC19C00FFFFFFFFFFFFDC01 55555555555564023FFFFFFFFFFFF3FDBE02468ACF132C00FFFFFFFFFFFFDC012AAAAA AAAAAABC0240000000000003FC30ECA8641FDB5C00FFFFFFFFFFFFDC012AAAAAAAAAAA BC022AAAAAAAAAAAB3FBD6480F2B9D644C00FFFFFFFFFFFFDC012AAAAAAAAAAABC0215 555555555563FB56D9B1DF623A0C00FFFFFFFFFFFFDC012AAAAAAAAAAABC0200000000 000013FAC71C71C71C716C00FFFFFFFFFFFFDC012AAAAAAAAAAABC01D5555555555573 F9F19690E0857E9C00FFFFFFFFFFFFDC012AAAAAAAAAAABC01AAAAAAAAAAAAC3F80AFF 9EE8DD792C00FFFFFFFFFFFFDC012AAAAAAAAAAABC018000000000001BF86C16C16C16 C4EC00FFFFFFFFFFFFDC012AAAAAAAAAAABC015555555555556BF9C10AFF9EE8DF8C00 FFFFFFFFFFFFDC012AAAAAAAAAAABC012AAAAAAAAAAABBFA4DBF86A314DD0C00FFFFFF FFFFFFDC012AAAAAAAAAAABC010000000000000BFAA2B3C4D5E6F91C00FFFFFFFFFFFF DC012AAAAAAAAAAABC00AAAAAAAAAAAABBFADF623A67EAC41C00FFFFFFFFFFFFDC012A AAAAAAAAAABC005555555555556BFB01E573AC901EEC00FFFFFFFFFFFFDC012AAAAAAA AAAABC000000000000001BFB07F6E5D4C3B33C00FFFFFFFFFFFFDC012AAAAAAAAAAABB FF5555555555558BFB01E573AC901EEC00FFFFFFFFFFFFDC012AAAAAAAAAAABBFE5555 55555555BBFADF623A67EAC41C00FFFFFFFFFFFFDC012AAAAAAAAAAABBCC8000000000 000BFAA2B3C4D5E6F93C00FFFFFFFFFFFFDC012AAAAAAAAAAAB3FE555555555554FBFA 4DBF86A314DD3C00FFFFFFFFFFFFDC012AAAAAAAAAAAB3FF5555555555552BF9C10AFF 9EE8DFFC00FFFFFFFFFFFFDC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBF86C16C16C16C6 8C00FFFFFFFFFFFFDC012AAAAAAAAAAAB40055555555555533F80AFF9EE8DD776C00FF FFFFFFFFFFDC012AAAAAAAAAAAB400AAAAAAAAAAAA83F9F19690E0857D0C00FFFFFFFF FFFFDC012AAAAAAAAAAAB400FFFFFFFFFFFFD3FAC71C71C71C704C00FFFFFFFFFFFFDC 012AAAAAAAAAAAB4012AAAAAAAAAAA93FB56D9B1DF6239AC00FFFFFFFFFFFFDC012AAA AAAAAAAAB40155555555555543FBD6480F2B9D63CC00FFFFFFFFFFFFDC012AAAAAAAAA AAB4017FFFFFFFFFFFF3FC30ECA8641FDB3C00FFFFFFFFFFFFDC012AAAAAAAAAAAB401 AAAAAAAAAAAAA3FC7CC6BB5AA498EC00FFFFFFFFFFFFDC012AAAAAAAAAAAB401D55555 55555553FCCEB240795CEAEC00FFFFFFFFFFFFDC012AAAAAAAAAAAB402000000000000 03FD13579BE024689C00FFFFFFFFFFFFDC012AAAAAAAAAAAB40215555555555553FD42 5ED097B425CC00FFFFFFFFFFFFDC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD746EBE63 5DAD2C00FFFFFFFFFFFFDC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FDA987654320FEAC 00FFFFFFFFFFFFDC010000000000000C0240000000000003FC111111111110DC00FFFF FFFFFFFFDC010000000000000C022AAAAAAAAAAAB3FB9690E0857FCF4C00FFFFFFFFFF FFDC010000000000000C0215555555555563FB1722833944A50C00FFFFFFFFFFFFDC01 0000000000000C0200000000000013FA47AE147AE1476C00FFFFFFFFFFFFDC01000000 0000000C01D5555555555573F8E573AC901E552C00FFFFFFFFFFFFDC01000000000000 0C01AAAAAAAAAAAACBF7E573AC901E5DBC00FFFFFFFFFFFFDC010000000000000C0180 00000000001BF9B4E81B4E81B67C00FFFFFFFFFFFFDC010000000000000C0155555555 55556BFA5FF3DD1BAF99AC00FFFFFFFFFFFFDC010000000000000C012AAAAAAAAAAABB FACD2DE3EF5006EC00FFFFFFFFFFFFDC010000000000000C010000000000000BFB1111 111111118C00FFFFFFFFFFFFDC010000000000000C00AAAAAAAAAAAABBFB2F684BDA12 F70C00FFFFFFFFFFFFDC010000000000000C005555555555556BFB419CA252ADB3EC00 FFFFFFFFFFFFDC010000000000000C000000000000001BFB47AE147AE1483C00FFFFFF FFFFFFDC010000000000000BFF5555555555558BFB419CA252ADB3EC00FFFFFFFFFFFF DC010000000000000BFE555555555555BBFB2F684BDA12F71C00FFFFFFFFFFFFDC0100 00000000000BCC8000000000000BFB111111111111AC00FFFFFFFFFFFFDC0100000000 000003FE555555555554FBFACD2DE3EF50073C00FFFFFFFFFFFFDC0100000000000003 FF5555555555552BFA5FF3DD1BAF9A0C00FFFFFFFFFFFFDC0100000000000003FFFFFF FFFFFFFFCBF9B4E81B4E81B74C00FFFFFFFFFFFFDC0100000000000004005555555555 553BF7E573AC901E613C00FFFFFFFFFFFFDC010000000000000400AAAAAAAAAAAA83F8 E573AC901E520C00FFFFFFFFFFFFDC010000000000000400FFFFFFFFFFFFD3FA47AE14 7AE1464C00FFFFFFFFFFFFDC0100000000000004012AAAAAAAAAAA93FB1722833944A4 AC00FFFFFFFFFFFFDC01000000000000040155555555555543FB9690E0857FCECC00FF FFFFFFFFFFDC0100000000000004017FFFFFFFFFFFF3FC111111111110BC00FFFFFFFF FFFFDC010000000000000401AAAAAAAAAAAAA3FC5CEB240795CE6C00FFFFFFFFFFFFDC 010000000000000401D5555555555553FCAED6A9264E206C00FFFFFFFFFFFFDC010000 00000000040200000000000003FD0369D0369D035C00FFFFFFFFFFFFDC010000000000 00040215555555555553FD327104EE2CC08C00FFFFFFFFFFFFDC010000000000000402 2AAAAAAAAAAAA3FD6480F2B9D647EC00FFFFFFFFFFFFDC0100000000000004023FFFFF FFFFFFF3FD9999999999996C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC02400000000000 03FBF49F49F49F497C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC022AAAAAAAAAAAB3FB69 0E0857FCF70C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC0215555555555563FAD33F5617 83999C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC0200000000000013F9D950C83FB72DBC 00FFFFFFFFFFFFDC00AAAAAAAAAAAABC01D5555555555573F6E573AC901E4C9C00FFFF FFFFFFFFDC00AAAAAAAAAAAABC01AAAAAAAAAAAACBF92F684BDA12F87C00FFFFFFFFFF FFDC00AAAAAAAAAAAABC018000000000001BFA3579BE02468BBC00FFFFFFFFFFFFDC00 AAAAAAAAAAAABC015555555555556BFABAF98D76B54A2C00FFFFFFFFFFFFDC00AAAAAA AAAAAABC012AAAAAAAAAAABBFB1419CA252ADBBC00FFFFFFFFFFFFDC00AAAAAAAAAAAA BC010000000000000BFB3E93E93E93E9CC00FFFFFFFFFFFFDC00AAAAAAAAAAAABC00AA AAAAAAAAAABBFB5CEB240795CF4C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC0055555555 55556BFB6F1F7A80308C2C00FFFFFFFFFFFFDC00AAAAAAAAAAAABC000000000000001B FB7530ECA864207C00FFFFFFFFFFFFDC00AAAAAAAAAAAABBFF5555555555558BFB6F1F 7A80308C2C00FFFFFFFFFFFFDC00AAAAAAAAAAAABBFE555555555555BBFB5CEB240795 CF5C00FFFFFFFFFFFFDC00AAAAAAAAAAAABBCC8000000000000BFB3E93E93E93E9EC00 FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FE555555555554FBFB1419CA252ADBEC00FFFFFF FFFFFFDC00AAAAAAAAAAAAB3FF5555555555552BFABAF98D76B54A8C00FFFFFFFFFFFF DC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFA3579BE02468C2C00FFFFFFFFFFFFDC00AA AAAAAAAAAAB4005555555555553BF92F684BDA12F96C00FFFFFFFFFFFFDC00AAAAAAAA AAAAB400AAAAAAAAAAAA83F6E573AC901E401C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB4 00FFFFFFFFFFFFD3F9D950C83FB72B9C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB4012AAA AAAAAAAA93FAD33F56178398CC00FFFFFFFFFFFFDC00AAAAAAAAAAAAB4015555555555 5543FB690E0857FCF68C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FB F49F49F49F493C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FC4629B7 F0D4624C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB401D5555555555553FC98153D0F8CB4 4C00FFFFFFFFFFFFDC00AAAAAAAAAAAAB40200000000000003FCF0123456789A8C00FF FFFFFFFFFFDC00AAAAAAAAAAAAB40215555555555553FD27104EE2CC0A7C00FFFFFFFF FFFFDC00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD59203CAE7591DC00FFFFFFFFFFFFDC 00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD8E38E38E38E35C00FFFFFFFFFFFFDC005555 555555556C0240000000000003FBD950C83FB72E3C00FFFFFFFFFFFFDC005555555555 556C022AAAAAAAAAAAB3FB4DBF86A314DBAC00FFFFFFFFFFFFDC005555555555556C02 15555555555563FA9CA252ADB3631C00FFFFFFFFFFFFDC005555555555556C02000000 00000013F96C16C16C16C0BC00FFFFFFFFFFFFDC005555555555556C01D55555555555 7BF6845C8A0CE51B7C00FFFFFFFFFFFFDC005555555555556C01AAAAAAAAAAAACBF99C A252ADB3657C00FFFFFFFFFFFFDC005555555555556C018000000000001BFA6C16C16C 16C23C00FFFFFFFFFFFFDC005555555555556C015555555555556BFAF19690E08580EC 00FFFFFFFFFFFFDC005555555555556C012AAAAAAAAAAABBFB2F684BDA12F71C00FFFF FFFFFFFFDC005555555555556C010000000000000BFB59E26AF37C052C00FFFFFFFFFF FFDC005555555555556C00AAAAAAAAAAAABBFB7839A5BC7DEA9C00FFFFFFFFFFFFDC00 5555555555556C005555555555556BFB8A6DFC3518A77C00FFFFFFFFFFFFDC00555555 5555556C000000000000001BFB907F6E5D4C3BCC00FFFFFFFFFFFFDC00555555555555 6BFF5555555555558BFB8A6DFC3518A77C00FFFFFFFFFFFFDC005555555555556BFE55 5555555555BBFB7839A5BC7DEAAC00FFFFFFFFFFFFDC005555555555556BCC80000000 00000BFB59E26AF37C053C00FFFFFFFFFFFFDC0055555555555563FE555555555554FB FB2F684BDA12F73C00FFFFFFFFFFFFDC0055555555555563FF5555555555552BFAF196 90E085812C00FFFFFFFFFFFFDC0055555555555563FFFFFFFFFFFFFFCBFA6C16C16C16 C2CC00FFFFFFFFFFFFDC0055555555555564005555555555553BF99CA252ADB366AC00 FFFFFFFFFFFFDC005555555555556400AAAAAAAAAAAA8BF6845C8A0CE529FC00FFFFFF FFFFFFDC005555555555556400FFFFFFFFFFFFD3F96C16C16C16BE5C00FFFFFFFFFFFF DC0055555555555564012AAAAAAAAAAA93FA9CA252ADB3622C00FFFFFFFFFFFFDC0055 5555555555640155555555555543FB4DBF86A314DB3C00FFFFFFFFFFFFDC0055555555 555564017FFFFFFFFFFFF3FBD950C83FB72DEC00FFFFFFFFFFFFDC0055555555555564 01AAAAAAAAAAAAA3FC388277166054AC00FFFFFFFFFFFFDC005555555555556401D555 5555555553FC8A6DFC3518A69C00FFFFFFFFFFFFDC0055555555555564020000000000 0003FCE26AF37C048CEC00FFFFFFFFFFFFDC00555555555555640215555555555553FD 203CAE759203AC00FFFFFFFFFFFFDC0055555555555564022AAAAAAAAAAAA3FD524C9C 413B8AFC00FFFFFFFFFFFFDC0055555555555564023FFFFFFFFFFFF3FD87654320FEDC 8C00FFFFFFFFFFFFDC000000000000001C0240000000000003FBD0369D0369CFBC00FF FFFFFFFFFFDC000000000000001C022AAAAAAAAAAAB3FB44A55B66C77D4C00FFFFFFFF FFFFDC000000000000001C0215555555555563FA8A6DFC3518A61C00FFFFFFFFFFFFDC 000000000000001C0200000000000013F947AE147AE146BC00FFFFFFFFFFFFDC000000 000000001C01D555555555557BF753D0F8CB4875BC00FFFFFFFFFFFFDC000000000000 001C01AAAAAAAAAAAACBF9C10AFF9EE8DF7C00FFFFFFFFFFFFDC000000000000001C01 8000000000001BFA7E4B17E4B17F3C00FFFFFFFFFFFFDC000000000000001C01555555 5555556BFB01E573AC901EDC00FFFFFFFFFFFFDC000000000000001C012AAAAAAAAAAA BBFB3882771660557C00FFFFFFFFFFFFDC000000000000001C010000000000000BFB62 FC962FC9638C00FFFFFFFFFFFFDC000000000000001C00AAAAAAAAAAAABBFB8153D0F8 CB48FC00FFFFFFFFFFFFDC000000000000001C005555555555556BFB938827716605EC 00FFFFFFFFFFFFDC000000000000001C000000000000001BFB99999999999A3C00FFFF FFFFFFFFDC000000000000001BFF5555555555558BFB938827716605EC00FFFFFFFFFF FFDC000000000000001BFE555555555555BBFB8153D0F8CB491C00FFFFFFFFFFFFDC00 0000000000001BCC8000000000000BFB62FC962FC963AC00FFFFFFFFFFFFDC00000000 00000013FE555555555554FBFB388277166055AC00FFFFFFFFFFFFDC00000000000000 13FF5555555555552BFB01E573AC901F0C00FFFFFFFFFFFFDC0000000000000013FFFF FFFFFFFFFFCBFA7E4B17E4B17FAC00FFFFFFFFFFFFDC00000000000000140055555555 55553BF9C10AFF9EE8E06C00FFFFFFFFFFFFDC000000000000001400AAAAAAAAAAAA8B F753D0F8CB487C0C00FFFFFFFFFFFFDC000000000000001400FFFFFFFFFFFFD3F947AE 147AE1448C00FFFFFFFFFFFFDC0000000000000014012AAAAAAAAAAA93FA8A6DFC3518 A54C00FFFFFFFFFFFFDC00000000000000140155555555555543FB44A55B66C77CCC00 FFFFFFFFFFFFDC0000000000000014017FFFFFFFFFFFF3FBD0369D0369CF7C00FFFFFF FFFFFFDC000000000000001401AAAAAAAAAAAAA3FC33F5617839A56C00FFFFFFFFFFFF DC000000000000001401D5555555555553FC85E0E696F1F76C00FFFFFFFFFFFFDC0000 0000000000140200000000000003FCDDDDDDDDDDDDAC00FFFFFFFFFFFFDC0000000000 0000140215555555555553FD1DF623A67EAC0C00FFFFFFFFFFFFDC0000000000000014 022AAAAAAAAAAAA3FD5006117228336C00FFFFFFFFFFFFDC0000000000000014023FFF FFFFFFFFF3FD851EB851EB84EC00FFFFFFFFFFFFDBFF5555555555558C024000000000 0003FBD950C83FB72E1C00FFFFFFFFFFFFDBFF5555555555558C022AAAAAAAAAAAB3FB 4DBF86A314DBAC00FFFFFFFFFFFFDBFF5555555555558C0215555555555563FA9CA252 ADB362DC00FFFFFFFFFFFFDBFF5555555555558C0200000000000013F96C16C16C16C0 3C00FFFFFFFFFFFFDBFF5555555555558C01D555555555557BF6845C8A0CE51F7C00FF FFFFFFFFFFDBFF5555555555558C01AAAAAAAAAAAACBF99CA252ADB365FC00FFFFFFFF FFFFDBFF5555555555558C018000000000001BFA6C16C16C16C27C00FFFFFFFFFFFFDB FF5555555555558C015555555555556BFAF19690E08580EC00FFFFFFFFFFFFDBFF5555 555555558C012AAAAAAAAAAABBFB2F684BDA12F71C00FFFFFFFFFFFFDBFF5555555555 558C010000000000000BFB59E26AF37C052C00FFFFFFFFFFFFDBFF5555555555558C00 AAAAAAAAAAAABBFB7839A5BC7DEA9C00FFFFFFFFFFFFDBFF5555555555558C00555555 5555556BFB8A6DFC3518A78C00FFFFFFFFFFFFDBFF5555555555558C00000000000000 1BFB907F6E5D4C3BDC00FFFFFFFFFFFFDBFF5555555555558BFF5555555555558BFB8A 6DFC3518A78C00FFFFFFFFFFFFDBFF5555555555558BFE555555555555BBFB7839A5BC 7DEABC00FFFFFFFFFFFFDBFF5555555555558BCC8000000000000BFB59E26AF37C054C 00FFFFFFFFFFFFDBFF55555555555583FE555555555554FBFB2F684BDA12F74C00FFFF FFFFFFFFDBFF55555555555583FF5555555555552BFAF19690E085814C00FFFFFFFFFF FFDBFF55555555555583FFFFFFFFFFFFFFCBFA6C16C16C16C2EC00FFFFFFFFFFFFDBFF 55555555555584005555555555553BF99CA252ADB366EC00FFFFFFFFFFFFDBFF555555 5555558400AAAAAAAAAAAA8BF6845C8A0CE52BFC00FFFFFFFFFFFFDBFF555555555555 8400FFFFFFFFFFFFD3F96C16C16C16BE1C00FFFFFFFFFFFFDBFF55555555555584012A AAAAAAAAAA93FA9CA252ADB3620C00FFFFFFFFFFFFDBFF555555555555840155555555 555543FB4DBF86A314DB2C00FFFFFFFFFFFFDBFF55555555555584017FFFFFFFFFFFF3 FBD950C83FB72DDC00FFFFFFFFFFFFDBFF5555555555558401AAAAAAAAAAAAA3FC3882 771660549C00FFFFFFFFFFFFDBFF5555555555558401D5555555555553FC8A6DFC3518 A69C00FFFFFFFFFFFFDBFF555555555555840200000000000003FCE26AF37C048CDC00 FFFFFFFFFFFFDBFF555555555555840215555555555553FD203CAE759203AC00FFFFFF FFFFFFDBFF55555555555584022AAAAAAAAAAAA3FD524C9C413B8AFC00FFFFFFFFFFFF DBFF55555555555584023FFFFFFFFFFFF3FD87654320FEDC8C00FFFFFFFFFFFFDBFE55 5555555555BC0240000000000003FBF49F49F49F497C00FFFFFFFFFFFFDBFE55555555 5555BC022AAAAAAAAAAAB3FB690E0857FCF6EC00FFFFFFFFFFFFDBFE555555555555BC 0215555555555563FAD33F561783999C00FFFFFFFFFFFFDBFE555555555555BC020000 0000000013F9D950C83FB72DBC00FFFFFFFFFFFFDBFE555555555555BC01D555555555 5573F6E573AC901E4C9C00FFFFFFFFFFFFDBFE555555555555BC01AAAAAAAAAAAACBF9 2F684BDA12F87C00FFFFFFFFFFFFDBFE555555555555BC018000000000001BFA3579BE 02468BBC00FFFFFFFFFFFFDBFE555555555555BC015555555555556BFABAF98D76B54A 6C00FFFFFFFFFFFFDBFE555555555555BC012AAAAAAAAAAABBFB1419CA252ADBDC00FF FFFFFFFFFFDBFE555555555555BC010000000000000BFB3E93E93E93E9EC00FFFFFFFF FFFFDBFE555555555555BC00AAAAAAAAAAAABBFB5CEB240795CF5C00FFFFFFFFFFFFDB FE555555555555BC005555555555556BFB6F1F7A80308C3C00FFFFFFFFFFFFDBFE5555 55555555BC000000000000001BFB7530ECA864208C00FFFFFFFFFFFFDBFE5555555555 55BBFF5555555555558BFB6F1F7A80308C3C00FFFFFFFFFFFFDBFE555555555555BBFE 555555555555BBFB5CEB240795CF6C00FFFFFFFFFFFFDBFE555555555555BBCC800000 0000000BFB3E93E93E93E9FC00FFFFFFFFFFFFDBFE555555555555B3FE555555555554 FBFB1419CA252ADBFC00FFFFFFFFFFFFDBFE555555555555B3FF5555555555552BFABA F98D76B54AAC00FFFFFFFFFFFFDBFE555555555555B3FFFFFFFFFFFFFFCBFA3579BE02 468C4C00FFFFFFFFFFFFDBFE555555555555B4005555555555553BF92F684BDA12F9AC 00FFFFFFFFFFFFDBFE555555555555B400AAAAAAAAAAAA83F6E573AC901E3E1C00FFFF FFFFFFFFDBFE555555555555B400FFFFFFFFFFFFD3F9D950C83FB72B5C00FFFFFFFFFF FFDBFE555555555555B4012AAAAAAAAAAA93FAD33F56178398AC00FFFFFFFFFFFFDBFE 555555555555B40155555555555543FB690E0857FCF67C00FFFFFFFFFFFFDBFE555555 555555B4017FFFFFFFFFFFF3FBF49F49F49F492C00FFFFFFFFFFFFDBFE555555555555 B401AAAAAAAAAAAAA3FC4629B7F0D4624C00FFFFFFFFFFFFDBFE555555555555B401D5 555555555553FC98153D0F8CB43C00FFFFFFFFFFFFDBFE555555555555B40200000000 000003FCF0123456789A8C00FFFFFFFFFFFFDBFE555555555555B40215555555555553 FD27104EE2CC0A7C00FFFFFFFFFFFFDBFE555555555555B4022AAAAAAAAAAAA3FD5920 3CAE7591CC00FFFFFFFFFFFFDBFE555555555555B4023FFFFFFFFFFFF3FD8E38E38E38 E35C00FFFFFFFFFFFFDBCC8000000000000C0240000000000003FC111111111110CC00 FFFFFFFFFFFFDBCC8000000000000C022AAAAAAAAAAAB3FB9690E0857FCF2C00FFFFFF FFFFFFDBCC8000000000000C0215555555555563FB1722833944A4EC00FFFFFFFFFFFF DBCC8000000000000C0200000000000013FA47AE147AE1472C00FFFFFFFFFFFFDBCC80 00000000000C01D5555555555573F8E573AC901E542C00FFFFFFFFFFFFDBCC80000000 00000C01AAAAAAAAAAAACBF7E573AC901E5FBC00FFFFFFFFFFFFDBCC8000000000000C 018000000000001BF9B4E81B4E81B6FC00FFFFFFFFFFFFDBCC8000000000000C015555 555555556BFA5FF3DD1BAF99EC00FFFFFFFFFFFFDBCC8000000000000C012AAAAAAAAA AABBFACD2DE3EF50072C00FFFFFFFFFFFFDBCC8000000000000C010000000000000BFB 111111111111AC00FFFFFFFFFFFFDBCC8000000000000C00AAAAAAAAAAAABBFB2F684B DA12F72C00FFFFFFFFFFFFDBCC8000000000000C005555555555556BFB419CA252ADB4 0C00FFFFFFFFFFFFDBCC8000000000000C000000000000001BFB47AE147AE1485C00FF FFFFFFFFFFDBCC8000000000000BFF5555555555558BFB419CA252ADB40C00FFFFFFFF FFFFDBCC8000000000000BFE555555555555BBFB2F684BDA12F73C00FFFFFFFFFFFFDB CC8000000000000BCC8000000000000BFB111111111111CC00FFFFFFFFFFFFDBCC8000 0000000003FE555555555554FBFACD2DE3EF50077C00FFFFFFFFFFFFDBCC8000000000 0003FF5555555555552BFA5FF3DD1BAF9A4C00FFFFFFFFFFFFDBCC80000000000003FF FFFFFFFFFFFFCBF9B4E81B4E81B7CC00FFFFFFFFFFFFDBCC8000000000000400555555 5555553BF7E573AC901E633C00FFFFFFFFFFFFDBCC8000000000000400AAAAAAAAAAAA 83F8E573AC901E510C00FFFFFFFFFFFFDBCC8000000000000400FFFFFFFFFFFFD3FA47 AE147AE1460C00FFFFFFFFFFFFDBCC80000000000004012AAAAAAAAAAA93FB17228339 44A48C00FFFFFFFFFFFFDBCC800000000000040155555555555543FB9690E0857FCEAC 00FFFFFFFFFFFFDBCC80000000000004017FFFFFFFFFFFF3FC111111111110AC00FFFF FFFFFFFFDBCC8000000000000401AAAAAAAAAAAAA3FC5CEB240795CE5C00FFFFFFFFFF FFDBCC8000000000000401D5555555555553FCAED6A9264E205C00FFFFFFFFFFFFDBCC 800000000000040200000000000003FD0369D0369D034C00FFFFFFFFFFFFDBCC800000 000000040215555555555553FD327104EE2CC08C00FFFFFFFFFFFFDBCC800000000000 04022AAAAAAAAAAAA3FD6480F2B9D647DC00FFFFFFFFFFFFDBCC80000000000004023F FFFFFFFFFFF3FD9999999999996C00FFFFFFFFFFFFD3FE555555555554FC0240000000 000003FC30ECA8641FDB4C00FFFFFFFFFFFFD3FE555555555554FC022AAAAAAAAAAAB3 FBD6480F2B9D642C00FFFFFFFFFFFFD3FE555555555554FC0215555555555563FB56D9 B1DF623A0C00FFFFFFFFFFFFD3FE555555555554FC0200000000000013FAC71C71C71C 712C00FFFFFFFFFFFFD3FE555555555554FC01D5555555555573F9F19690E0857E1C00 FFFFFFFFFFFFD3FE555555555554FC01AAAAAAAAAAAAC3F80AFF9EE8DD792C00FFFFFF FFFFFFD3FE555555555554FC018000000000001BF86C16C16C16C4EC00FFFFFFFFFFFF D3FE555555555554FC015555555555556BF9C10AFF9EE8DFCC00FFFFFFFFFFFFD3FE55 5555555554FC012AAAAAAAAAAABBFA4DBF86A314DD2C00FFFFFFFFFFFFD3FE55555555 5554FC010000000000000BFAA2B3C4D5E6F95C00FFFFFFFFFFFFD3FE555555555554FC 00AAAAAAAAAAAABBFADF623A67EAC43C00FFFFFFFFFFFFD3FE555555555554FC005555 555555556BFB01E573AC901EFC00FFFFFFFFFFFFD3FE555555555554FC000000000000 001BFB07F6E5D4C3B35C00FFFFFFFFFFFFD3FE555555555554FBFF5555555555558BFB 01E573AC901F0C00FFFFFFFFFFFFD3FE555555555554FBFE555555555555BBFADF623A 67EAC44C00FFFFFFFFFFFFD3FE555555555554FBCC8000000000000BFAA2B3C4D5E6F9 6C00FFFFFFFFFFFFD3FE555555555554F3FE555555555554FBFA4DBF86A314DD6C00FF FFFFFFFFFFD3FE555555555554F3FF5555555555552BF9C10AFF9EE8E05C00FFFFFFFF FFFFD3FE555555555554F3FFFFFFFFFFFFFFCBF86C16C16C16C74C00FFFFFFFFFFFFD3 FE555555555554F40055555555555533F80AFF9EE8DD76AC00FFFFFFFFFFFFD3FE5555 55555554F400AAAAAAAAAAAA83F9F19690E0857CAC00FFFFFFFFFFFFD3FE5555555555 54F400FFFFFFFFFFFFD3FAC71C71C71C701C00FFFFFFFFFFFFD3FE555555555554F401 2AAAAAAAAAAA93FB56D9B1DF62398C00FFFFFFFFFFFFD3FE555555555554F401555555 55555543FBD6480F2B9D63BC00FFFFFFFFFFFFD3FE555555555554F4017FFFFFFFFFFF F3FC30ECA8641FDB3C00FFFFFFFFFFFFD3FE555555555554F401AAAAAAAAAAAAA3FC7C C6BB5AA498EC00FFFFFFFFFFFFD3FE555555555554F401D5555555555553FCCEB24079 5CEADC00FFFFFFFFFFFFD3FE555555555554F40200000000000003FD13579BE024689C 00FFFFFFFFFFFFD3FE555555555554F40215555555555553FD425ED097B425CC00FFFF FFFFFFFFD3FE555555555554F4022AAAAAAAAAAAA3FD746EBE635DAD1C00FFFFFFFFFF FFD3FE555555555554F4023FFFFFFFFFFFF3FDA987654320FEAC00FFFFFFFFFFFFD3FF 5555555555552C0240000000000003FC59E26AF37C043C00FFFFFFFFFFFFD3FF555555 5555552C022AAAAAAAAAAAB3FC1419CA252ADB0C00FFFFFFFFFFFFD3FF555555555555 2C0215555555555563FBA8C536FE1A8BEC00FFFFFFFFFFFFD3FF5555555555552C0200 000000000013FB3579BE02468A9C00FFFFFFFFFFFFD3FF5555555555552C01D5555555 555573FA9CA252ADB3631C00FFFFFFFFFFFFD3FF5555555555552C01AAAAAAAAAAAAC3 F9CD2DE3EF5003DC00FFFFFFFFFFFFD3FF5555555555552C0180000000000013F82345 6789ABCA2C00FFFFFFFFFFFFD3FF5555555555552C015555555555556BF7E573AC901E 60EC00FFFFFFFFFFFFD3FF5555555555552C012AAAAAAAAAAABBF953D0F8CB4872CC00 FFFFFFFFFFFFD3FF5555555555552C010000000000000BF9FDB97530ECAB2C00FFFFFF FFFFFFD3FF5555555555552C00AAAAAAAAAAAABBFA3B8B302A7A207C00FFFFFFFFFFFF D3FF5555555555552C005555555555556BFA5FF3DD1BAF9A2C00FFFFFFFFFFFFD3FF55 55555555552C000000000000001BFA6C16C16C16C2CC00FFFFFFFFFFFFD3FF55555555 55552BFF5555555555558BFA5FF3DD1BAF9A3C00FFFFFFFFFFFFD3FF5555555555552B FE555555555555BBFA3B8B302A7A208C00FFFFFFFFFFFFD3FF5555555555552BCC8000 000000000BF9FDB97530ECAB4C00FFFFFFFFFFFFD3FF55555555555523FE5555555555 54FBF953D0F8CB48732C00FFFFFFFFFFFFD3FF55555555555523FF5555555555552BF7 E573AC901E62FC00FFFFFFFFFFFFD3FF55555555555523FFFFFFFFFFFFFFC3F8234567 89ABC7DC00FFFFFFFFFFFFD3FF555555555555240055555555555533F9CD2DE3EF5002 EC00FFFFFFFFFFFFD3FF5555555555552400AAAAAAAAAAAA83FA9CA252ADB3622C00FF FFFFFFFFFFD3FF5555555555552400FFFFFFFFFFFFD3FB3579BE024689FC00FFFFFFFF FFFFD3FF55555555555524012AAAAAAAAAAA93FBA8C536FE1A8B7C00FFFFFFFFFFFFD3 FF555555555555240155555555555543FC1419CA252ADACC00FFFFFFFFFFFFD3FF5555 5555555524017FFFFFFFFFFFF3FC59E26AF37C042C00FFFFFFFFFFFFD3FF5555555555 552401AAAAAAAAAAAAA3FCA5BC7DEA00C1DC00FFFFFFFFFFFFD3FF5555555555552401 D5555555555553FCF7A80308B913CC00FFFFFFFFFFFFD3FF5555555555552402000000 00000003FD27D27D27D27D0C00FFFFFFFFFFFFD3FF5555555555552402155555555555 53FD56D9B1DF623A3C00FFFFFFFFFFFFD3FF55555555555524022AAAAAAAAAAAA3FD88 E99FAB0BC19C00FFFFFFFFFFFFD3FF55555555555524023FFFFFFFFFFFF3FDBE02468A CF131C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC0240000000000003FC8BF258BF258B9C 00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FC4629B7F0D4626C00FFFF FFFFFFFFD3FFFFFFFFFFFFFFCC0215555555555563FC0672894AB6CD5C00FFFFFFFFFF FFD3FFFFFFFFFFFFFFCC0200000000000013FB9999999999994C00FFFFFFFFFFFFD3FF FFFFFFFFFFFFCC01D5555555555573FB327104EE2CC03C00FFFFFFFFFFFFD3FFFFFFFF FFFFFFCC01AAAAAAAAAAAAC3FAAED6A9264E1F7C00FFFFFFFFFFFFD3FFFFFFFFFFFFFF CC0180000000000013FA1111111111101C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC0155 555555555563F91722833944A2CC00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC012AAAAAAA AAAAB3F6E573AC901E421C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC010000000000000B F7B4E81B4E81C08C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBF8CD2D E3EF500BBC00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC005555555555556BF92F684BDA12 F95C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCC000000000000001BF947AE147AE14A9C00 FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFF5555555555558BF92F684BDA12F97C00FFFFFF FFFFFFD3FFFFFFFFFFFFFFCBFE555555555555BBF8CD2DE3EF500BFC00FFFFFFFFFFFF D3FFFFFFFFFFFFFFCBCC8000000000000BF7B4E81B4E81C0EC00FFFFFFFFFFFFD3FFFF FFFFFFFFFFC3FE555555555554F3F6E573AC901E3EEC00FFFFFFFFFFFFD3FFFFFFFFFF FFFFC3FF55555555555523F91722833944A24C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3 FFFFFFFFFFFFFFC3FA11111111110F8C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC4005555 5555555533FAAED6A9264E1EFC00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC400AAAAAAAAAA AA83FB327104EE2CBFDC00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FB 999999999998BC00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC4012AAAAAAAAAAA93FC067289 4AB6CD1C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC40155555555555543FC4629B7F0D462 2C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FC8BF258BF258B8C00FF FFFFFFFFFFD3FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FCD7CC6BB5AA493C00FFFFFFFF FFFFD3FFFFFFFFFFFFFFC401D5555555555553FD14DBF86A314D9C00FFFFFFFFFFFFD3 FFFFFFFFFFFFFFC40200000000000003FD40DA740DA740BC00FFFFFFFFFFFFD3FFFFFF FFFFFFFFC40215555555555553FD6FE1A8C536FDEC00FFFFFFFFFFFFD3FFFFFFFFFFFF FFC4022AAAAAAAAAAAA3FDA1F19690E0854C00FFFFFFFFFFFFD3FFFFFFFFFFFFFFC402 3FFFFFFFFFFFF3FDD70A3D70A3D6CC00FFFFFFFFFFFFD4005555555555553C02400000 00000003FCC71C71C71C716C00FFFFFFFFFFFFD4005555555555553C022AAAAAAAAAAA B3FC8153D0F8CB483C00FFFFFFFFFFFFD4005555555555553C0215555555555563FC41 9CA252ADB32C00FFFFFFFFFFFFD4005555555555553C0200000000000013FC07F6E5D4 C3B27C00FFFFFFFFFFFFD4005555555555553C01D5555555555573FBA8C536FE1A8BDC 00FFFFFFFFFFFFD4005555555555553C01AAAAAAAAAAAAC3FB4DBF86A314DB5C00FFFF FFFFFFFFD4005555555555553C0180000000000013FAFDB97530ECA73C00FFFFFFFFFF FFD4005555555555553C0155555555555563FA7839A5BC7DE89C00FFFFFFFFFFFFD400 5555555555553C012AAAAAAAAAAAB3FA0AFF9EE8DD7B5C00FFFFFFFFFFFFD400555555 5555553C0100000000000003F96C16C16C16BE5C00FFFFFFFFFFFFD400555555555555 3C00AAAAAAAAAAAAB3F8E573AC901E511C00FFFFFFFFFFFFD4005555555555553C0055 555555555563F853D0F8CB486A0C00FFFFFFFFFFFFD4005555555555553C0000000000 000013F823456789ABC7BC00FFFFFFFFFFFFD4005555555555553BFF55555555555583 F853D0F8CB4869FC00FFFFFFFFFFFFD4005555555555553BFE555555555555B3F8E573 AC901E50DC00FFFFFFFFFFFFD4005555555555553BCC80000000000003F96C16C16C16 BE2C00FFFFFFFFFFFFD40055555555555533FE555555555554F3FA0AFF9EE8DD7B2C00 FFFFFFFFFFFFD40055555555555533FF55555555555523FA7839A5BC7DE85C00FFFFFF FFFFFFD40055555555555533FFFFFFFFFFFFFFC3FAFDB97530ECA6AC00FFFFFFFFFFFF D400555555555555340055555555555533FB4DBF86A314DB1C00FFFFFFFFFFFFD40055 55555555553400AAAAAAAAAAAA83FBA8C536FE1A8B7C00FFFFFFFFFFFFD40055555555 55553400FFFFFFFFFFFFD3FC07F6E5D4C3B22C00FFFFFFFFFFFFD40055555555555534 012AAAAAAAAAAA93FC419CA252ADB2EC00FFFFFFFFFFFFD40055555555555534015555 5555555543FC8153D0F8CB47FC00FFFFFFFFFFFFD40055555555555534017FFFFFFFFF FFF3FCC71C71C71C715C00FFFFFFFFFFFFD4005555555555553401AAAAAAAAAAAAA3FD 097B425ED0978C00FFFFFFFFFFFFD4005555555555553401D5555555555553FD327104 EE2CC07C00FFFFFFFFFFFFD400555555555555340200000000000003FD5E6F8091A2B3 AC00FFFFFFFFFFFFD400555555555555340215555555555553FD8D76B5493270DC00FF FFFFFFFFFFD40055555555555534022AAAAAAAAAAAA3FDBF86A314DBF82C00FFFFFFFF FFFFD40055555555555534023FFFFFFFFFFFF3FDF49F49F49F49BC00FFFFFFFFFFFFD4 00AAAAAAAAAAAA8C0240000000000003FD05B05B05B05ADC00FFFFFFFFFFFFD400AAAA AAAAAAAA8C022AAAAAAAAAAAB3FCC598153D0F8C7C00FFFFFFFFFFFFD400AAAAAAAAAA AA8C0215555555555563FC85E0E696F1F76C00FFFFFFFFFFFFD400AAAAAAAAAAAA8C02 00000000000013FC4C3B2A1907F6BC00FFFFFFFFFFFFD400AAAAAAAAAAAA8C01D55555 55555573FC18A6DFC3518A2C00FFFFFFFFFFFFD400AAAAAAAAAAAA8C01AAAAAAAAAAAA C3FBD6480F2B9D63DC00FFFFFFFFFFFFD400AAAAAAAAAAAA8C0180000000000013FB87 654320FEDC1C00FFFFFFFFFFFFD400AAAAAAAAAAAA8C0155555555555563FB44A55B66 C77CCC00FFFFFFFFFFFFD400AAAAAAAAAAAA8C012AAAAAAAAAAAB3FB0E0857FCF7462C 00FFFFFFFFFFFFD400AAAAAAAAAAAA8C0100000000000003FAC71C71C71C702C00FFFF FFFFFFFFD400AAAAAAAAAAAA8C00AAAAAAAAAAAAB3FA8A6DFC3518A54C00FFFFFFFFFF FFD400AAAAAAAAAAAA8C0055555555555563FA66054F43E32B8C00FFFFFFFFFFFFD400 AAAAAAAAAAAA8C0000000000000013FA59E26AF37C02EC00FFFFFFFFFFFFD400AAAAAA AAAAAA8BFF55555555555583FA66054F43E32B7C00FFFFFFFFFFFFD400AAAAAAAAAAAA 8BFE555555555555B3FA8A6DFC3518A53C00FFFFFFFFFFFFD400AAAAAAAAAAAA8BCC80 000000000003FAC71C71C71C701C00FFFFFFFFFFFFD400AAAAAAAAAAAA83FE55555555 5554F3FB0E0857FCF7460C00FFFFFFFFFFFFD400AAAAAAAAAAAA83FF55555555555523 FB44A55B66C77CAC00FFFFFFFFFFFFD400AAAAAAAAAAAA83FFFFFFFFFFFFFFC3FB8765 4320FEDBDC00FFFFFFFFFFFFD400AAAAAAAAAAAA840055555555555533FBD6480F2B9D 639C00FFFFFFFFFFFFD400AAAAAAAAAAAA8400AAAAAAAAAAAA83FC18A6DFC35189FC00 FFFFFFFFFFFFD400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FC4C3B2A1907F66C00FFFFFF FFFFFFD400AAAAAAAAAAAA84012AAAAAAAAAAA93FC85E0E696F1F72C00FFFFFFFFFFFF D400AAAAAAAAAAAA840155555555555543FCC598153D0F8C3C00FFFFFFFFFFFFD400AA AAAAAAAAAA84017FFFFFFFFFFFF3FD05B05B05B05ACC00FFFFFFFFFFFFD400AAAAAAAA AAAA8401AAAAAAAAAAAAA3FD2B9D6480F2B9AC00FFFFFFFFFFFFD400AAAAAAAAAAAA84 01D5555555555553FD549327104EE29C00FFFFFFFFFFFFD400AAAAAAAAAAAA84020000 0000000003FD8091A2B3C4D5CC00FFFFFFFFFFFFD400AAAAAAAAAAAA84021555555555 5553FDAF98D76B5492FC00FFFFFFFFFFFFD400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD E1A8C536FE1A4C00FFFFFFFFFFFFD400AAAAAAAAAAAA84023FFFFFFFFFFFF3FE0B60B6 0B60B5EC00FFFFFFFFFFFFD400FFFFFFFFFFFFDC0240000000000003FD2C5F92C5F92C 2C00FFFFFFFFFFFFD400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FD097B425ED0979C00FF FFFFFFFFFFD400FFFFFFFFFFFFDC0215555555555563FCD33F5617839A0C00FFFFFFFF FFFFD400FFFFFFFFFFFFDC0200000000000013FC9999999999995C00FFFFFFFFFFFFD4 00FFFFFFFFFFFFDC01D5555555555573FC66054F43E32CDC00FFFFFFFFFFFFD400FFFF FFFFFFFFDC01AAAAAAAAAAAAC3FC3882771660549C00FFFFFFFFFFFFD400FFFFFFFFFF FFDC0180000000000013FC111111111110BC00FFFFFFFFFFFFD400FFFFFFFFFFFFDC01 55555555555563FBDF623A67EAC21C00FFFFFFFFFFFFD400FFFFFFFFFFFFDC012AAAAA AAAAAAB3FBA8C536FE1A8B7C00FFFFFFFFFFFFD400FFFFFFFFFFFFDC01000000000000 03FB7E4B17E4B17D6C00FFFFFFFFFFFFD400FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FB5F F3DD1BAF97FC00FFFFFFFFFFFFD400FFFFFFFFFFFFDC0055555555555563FB4DBF86A3 14DB1C00FFFFFFFFFFFFD400FFFFFFFFFFFFDC0000000000000013FB47AE147AE146CC 00FFFFFFFFFFFFD400FFFFFFFFFFFFDBFF55555555555583FB4DBF86A314DB1C00FFFF FFFFFFFFD400FFFFFFFFFFFFDBFE555555555555B3FB5FF3DD1BAF97EC00FFFFFFFFFF FFD400FFFFFFFFFFFFDBCC80000000000003FB7E4B17E4B17D5C00FFFFFFFFFFFFD400 FFFFFFFFFFFFD3FE555555555554F3FBA8C536FE1A8B5C00FFFFFFFFFFFFD400FFFFFF FFFFFFD3FF55555555555523FBDF623A67EAC1FC00FFFFFFFFFFFFD400FFFFFFFFFFFF D3FFFFFFFFFFFFFFC3FC1111111111109C00FFFFFFFFFFFFD400FFFFFFFFFFFFD40055 555555555533FC3882771660547C00FFFFFFFFFFFFD400FFFFFFFFFFFFD400AAAAAAAA AAAA83FC66054F43E32C9C00FFFFFFFFFFFFD400FFFFFFFFFFFFD400FFFFFFFFFFFFD3 FC9999999999990C00FFFFFFFFFFFFD400FFFFFFFFFFFFD4012AAAAAAAAAAA93FCD33F 56178399CC00FFFFFFFFFFFFD400FFFFFFFFFFFFD40155555555555543FD097B425ED0 977C00FFFFFFFFFFFFD400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FD2C5F92C5F92C1C00 FFFFFFFFFFFFD400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FD524C9C413B8AFC00FFFFFF FFFFFFD400FFFFFFFFFFFFD401D5555555555553FD7B425ED097B3EC00FFFFFFFFFFFF D400FFFFFFFFFFFFD40200000000000003FDA740DA740DA70C00FFFFFFFFFFFFD400FF FFFFFFFFFFD40215555555555553FDD6480F2B9D644C00FFFFFFFFFFFFD400FFFFFFFF FFFFD4022AAAAAAAAAAAA3FE042BFE7BA375DC00FFFFFFFFFFFFD400FFFFFFFFFFFFD4 023FFFFFFFFFFFF3FE1EB851EB851E9C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C024000 0000000003FD579BE02468ACCC00FFFFFFFFFFFFD4012AAAAAAAAAAA9C022AAAAAAAAA AAB3FD34B78FBD40182C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C0215555555555563FD 14DBF86A314D9C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C0200000000000013FCF01234 56789A7C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C01D5555555555573FCBC7DEA00C22D FC00FFFFFFFFFFFFD4012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FC8EFB11D33F55BC00FF FFFFFFFFFFD4012AAAAAAAAAAA9C0180000000000013FC6789ABCDF011DC00FFFFFFFF FFFFD4012AAAAAAAAAAA9C0155555555555563FC4629B7F0D4623C00FFFFFFFFFFFFD4 012AAAAAAAAAAA9C012AAAAAAAAAAAB3FC2ADB363BEC46EC00FFFFFFFFFFFFD4012AAA AAAAAAAA9C0100000000000003FC159E26AF37BFDC00FFFFFFFFFFFFD4012AAAAAAAAA AA9C00AAAAAAAAAAAAB3FC0672894AB6CD1C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C00 55555555555563FBFAB0BC1CD2DD5C00FFFFFFFFFFFFD4012AAAAAAAAAAA9C00000000 00000013FBF49F49F49F490C00FFFFFFFFFFFFD4012AAAAAAAAAAA9BFF555555555555 83FBFAB0BC1CD2DD5C00FFFFFFFFFFFFD4012AAAAAAAAAAA9BFE555555555555B3FC06 72894AB6CD1C00FFFFFFFFFFFFD4012AAAAAAAAAAA9BCC80000000000003FC159E26AF 37BFDC00FFFFFFFFFFFFD4012AAAAAAAAAAA93FE555555555554F3FC2ADB363BEC46DC 00FFFFFFFFFFFFD4012AAAAAAAAAAA93FF55555555555523FC4629B7F0D4622C00FFFF FFFFFFFFD4012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FC6789ABCDF011BC00FFFFFFFFFF FFD4012AAAAAAAAAAA940055555555555533FC8EFB11D33F559C00FFFFFFFFFFFFD401 2AAAAAAAAAAA9400AAAAAAAAAAAA83FCBC7DEA00C22DBC00FFFFFFFFFFFFD4012AAAAA AAAAAA9400FFFFFFFFFFFFD3FCF0123456789A2C00FFFFFFFFFFFFD4012AAAAAAAAAAA 94012AAAAAAAAAAA93FD14DBF86A314D7C00FFFFFFFFFFFFD4012AAAAAAAAAAA940155 555555555543FD34B78FBD40180C00FFFFFFFFFFFFD4012AAAAAAAAAAA94017FFFFFFF FFFFF3FD579BE02468ACAC00FFFFFFFFFFFFD4012AAAAAAAAAAA9401AAAAAAAAAAAAA3 FD7D88E99FAB0B8C00FFFFFFFFFFFFD4012AAAAAAAAAAA9401D5555555555553FDA67E AC2F07347C00FFFFFFFFFFFFD4012AAAAAAAAAAA940200000000000003FDD27D27D27D 27AC00FFFFFFFFFFFFD4012AAAAAAAAAAA940215555555555553FE00C22E4506726C00 FFFFFFFFFFFFD4012AAAAAAAAAAA94022AAAAAAAAAAAA3FE19CA252ADB361C00FFFFFF FFFFFFD4012AAAAAAAAAAA94023FFFFFFFFFFFF3FE3456789ABCDEEC00FFFFFFFFFFFF D4015555555555554C0240000000000003FD87654320FEDC8C00FFFFFFFFFFFFD40155 55555555554C022AAAAAAAAAAAB3FD6480F2B9D647EC00FFFFFFFFFFFFD40155555555 55554C0215555555555563FD44A55B66C77D6C00FFFFFFFFFFFFD4015555555555554C 0200000000000013FD27D27D27D27D0C00FFFFFFFFFFFFD4015555555555554C01D555 5555555573FD0E0857FCF746CC00FFFFFFFFFFFFD4015555555555554C01AAAAAAAAAA AAC3FCEE8DD7CC6BB54C00FFFFFFFFFFFFD4015555555555554C0180000000000013FC C71C71C71C716C00FFFFFFFFFFFFD4015555555555554C0155555555555563FCA5BC7D EA00C1CC00FFFFFFFFFFFFD4015555555555554C012AAAAAAAAAAAB3FC8A6DFC3518A6 7C00FFFFFFFFFFFFD4015555555555554C0100000000000003FC7530ECA8641F6C00FF FFFFFFFFFFD4015555555555554C00AAAAAAAAAAAAB3FC66054F43E32CAC00FFFFFFFF FFFFD4015555555555554C0055555555555563FC5CEB240795CE3C00FFFFFFFFFFFFD4 015555555555554C0000000000000013FC59E26AF37C041C00FFFFFFFFFFFFD4015555 555555554BFF55555555555583FC5CEB240795CE4C00FFFFFFFFFFFFD4015555555555 554BFE555555555555B3FC66054F43E32CAC00FFFFFFFFFFFFD4015555555555554BCC 80000000000003FC7530ECA8641F6C00FFFFFFFFFFFFD40155555555555543FE555555 555554F3FC8A6DFC3518A66C00FFFFFFFFFFFFD40155555555555543FF555555555555 23FCA5BC7DEA00C1BC00FFFFFFFFFFFFD40155555555555543FFFFFFFFFFFFFFC3FCC7 1C71C71C714C00FFFFFFFFFFFFD401555555555555440055555555555533FCEE8DD7CC 6BB52C00FFFFFFFFFFFFD4015555555555554400AAAAAAAAAAAA83FD0E0857FCF746AC 00FFFFFFFFFFFFD4015555555555554400FFFFFFFFFFFFD3FD27D27D27D27CEC00FFFF FFFFFFFFD40155555555555544012AAAAAAAAAAA93FD44A55B66C77D4C00FFFFFFFFFF FFD401555555555555440155555555555543FD6480F2B9D647DC00FFFFFFFFFFFFD401 55555555555544017FFFFFFFFFFFF3FD87654320FEDC7C00FFFFFFFFFFFFD401555555 5555554401AAAAAAAAAAAAA3FDAD524C9C413B5C00FFFFFFFFFFFFD401555555555555 4401D5555555555553FDD6480F2B9D644C00FFFFFFFFFFFFD401555555555555440200 000000000003FE0123456789ABBC00FFFFFFFFFFFFD401555555555555440215555555 555553FE18A6DFC3518A5C00FFFFFFFFFFFFD40155555555555544022AAAAAAAAAAAA3 FE31AED6A9264DFC00FFFFFFFFFFFFD40155555555555544023FFFFFFFFFFFF3FE4C3B 2A1907F6CC00FFFFFFFFFFFFD4017FFFFFFFFFFFFC0240000000000003FDBBBBBBBBBB BB8C00FFFFFFFFFFFFD4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD98D76B549326EC00 FFFFFFFFFFFFD4017FFFFFFFFFFFFC0215555555555563FD78FBD401845C6C00FFFFFF FFFFFFD4017FFFFFFFFFFFFC0200000000000013FD5C28F5C28F5C0C00FFFFFFFFFFFF D4017FFFFFFFFFFFFC01D5555555555573FD425ED097B425CC00FFFFFFFFFFFFD4017F FFFFFFFFFFFC01AAAAAAAAAAAAC3FD2B9D6480F2B9AC00FFFFFFFFFFFFD4017FFFFFFF FFFFFC0180000000000013FD17E4B17E4B17BC00FFFFFFFFFFFFD4017FFFFFFFFFFFFC 0155555555555563FD0734B78FBD3FEC00FFFFFFFFFFFFD4017FFFFFFFFFFFFC012AAA AAAAAAAAB3FCF31AED6A92647C00FFFFFFFFFFFFD4017FFFFFFFFFFFFC010000000000 0003FCDDDDDDDDDDDD6C00FFFFFFFFFFFFD4017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FC CEB240795CEAAC00FFFFFFFFFFFFD4017FFFFFFFFFFFFC0055555555555563FCC59815 3D0F8C3C00FFFFFFFFFFFFD4017FFFFFFFFFFFFC0000000000000013FCC28F5C28F5C2 1C00FFFFFFFFFFFFD4017FFFFFFFFFFFFBFF55555555555583FCC598153D0F8C4C00FF FFFFFFFFFFD4017FFFFFFFFFFFFBFE555555555555B3FCCEB240795CEAAC00FFFFFFFF FFFFD4017FFFFFFFFFFFFBCC80000000000003FCDDDDDDDDDDDD6C00FFFFFFFFFFFFD4 017FFFFFFFFFFFF3FE555555555554F3FCF31AED6A92646C00FFFFFFFFFFFFD4017FFF FFFFFFFFF3FF55555555555523FD0734B78FBD3FEC00FFFFFFFFFFFFD4017FFFFFFFFF FFF3FFFFFFFFFFFFFFC3FD17E4B17E4B17AC00FFFFFFFFFFFFD4017FFFFFFFFFFFF400 55555555555533FD2B9D6480F2B99C00FFFFFFFFFFFFD4017FFFFFFFFFFFF400AAAAAA AAAAAA83FD425ED097B425BC00FFFFFFFFFFFFD4017FFFFFFFFFFFF400FFFFFFFFFFFF D3FD5C28F5C28F5BEC00FFFFFFFFFFFFD4017FFFFFFFFFFFF4012AAAAAAAAAAA93FD78 FBD401845C3C00FFFFFFFFFFFFD4017FFFFFFFFFFFF40155555555555543FD98D76B54 9326DC00FFFFFFFFFFFFD4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FDBBBBBBBBBBBB7C 00FFFFFFFFFFFFD4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FDE1A8C536FE1A5C00FFFF FFFFFFFFD4017FFFFFFFFFFFF401D5555555555553FE054F43E32D21AC00FFFFFFFFFF FFD4017FFFFFFFFFFFF40200000000000003FE1B4E81B4E81B3C00FFFFFFFFFFFFD401 7FFFFFFFFFFFF40215555555555553FE32D21C10AFF9DC00FFFFFFFFFFFFD4017FFFFF FFFFFFF4022AAAAAAAAAAAA3FE4BDA12F684BD7C00FFFFFFFFFFFFD4017FFFFFFFFFFF F4023FFFFFFFFFFFF3FE6666666666664C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC0240 000000000003FDF49F49F49F49CC00FFFFFFFFFFFFD401AAAAAAAAAAAAAC022AAAAAAA AAAAB3FDD1BAF98D76B52C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC0215555555555563 FDB1DF623A67EAAC00FFFFFFFFFFFFD401AAAAAAAAAAAAAC0200000000000013FD950C 83FB72EA4C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC01D5555555555573FD7B425ED097 B40C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD6480F2B9D647EC00 FFFFFFFFFFFFD401AAAAAAAAAAAAAC0180000000000013FD50C83FB72EA5FC00FFFFFF FFFFFFD401AAAAAAAAAAAAAC0155555555555563FD401845C8A0CE2C00FFFFFFFFFFFF D401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD327104EE2CC07C00FFFFFFFFFFFFD401AA AAAAAAAAAAAC0100000000000003FD27D27D27D27CFC00FFFFFFFFFFFFD401AAAAAAAA AAAAAC00AAAAAAAAAAAAB3FD203CAE7592039C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC 0055555555555563FD1BAF98D76B546C00FFFFFFFFFFFFD401AAAAAAAAAAAAAC000000 0000000013FD1A2B3C4D5E6F5C00FFFFFFFFFFFFD401AAAAAAAAAAAAABFF5555555555 5583FD1BAF98D76B546C00FFFFFFFFFFFFD401AAAAAAAAAAAAABFE555555555555B3FD 203CAE7592039C00FFFFFFFFFFFFD401AAAAAAAAAAAAABCC80000000000003FD27D27D 27D27CFC00FFFFFFFFFFFFD401AAAAAAAAAAAAA3FE555555555554F3FD327104EE2CC0 7C00FFFFFFFFFFFFD401AAAAAAAAAAAAA3FF55555555555523FD401845C8A0CE2C00FF FFFFFFFFFFD401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD50C83FB72EA5EC00FFFFFFFF FFFFD401AAAAAAAAAAAAA40055555555555533FD6480F2B9D647DC00FFFFFFFFFFFFD4 01AAAAAAAAAAAAA400AAAAAAAAAAAA83FD7B425ED097B3FC00FFFFFFFFFFFFD401AAAA AAAAAAAAA400FFFFFFFFFFFFD3FD950C83FB72EA2C00FFFFFFFFFFFFD401AAAAAAAAAA AAA4012AAAAAAAAAAA93FDB1DF623A67EA7C00FFFFFFFFFFFFD401AAAAAAAAAAAAA401 55555555555543FDD1BAF98D76B51C00FFFFFFFFFFFFD401AAAAAAAAAAAAA4017FFFFF FFFFFFF3FDF49F49F49F49BC00FFFFFFFFFFFFD401AAAAAAAAAAAAA401AAAAAAAAAAAA A3FE0D4629B7F0D44C00FFFFFFFFFFFFD401AAAAAAAAAAAAA401D5555555555553FE21 C10AFF9EE8CC00FFFFFFFFFFFFD401AAAAAAAAAAAAA40200000000000003FE37C048D1 59E25C00FFFFFFFFFFFFD401AAAAAAAAAAAAA40215555555555553FE4F43E32D21C0FC 00FFFFFFFFFFFFD401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE684BDA12F6849C00FFFF FFFFFFFFD401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE82D82D82D82D6C00FFFFFFFFFF FFD401D555555555555C0240000000000003FE1907F6E5D4C3AC00FFFFFFFFFFFFD401 D555555555555C022AAAAAAAAAAAB3FE0795CEB240795C00FFFFFFFFFFFFD401D55555 5555555C0215555555555563FDEF50061172282C00FFFFFFFFFFFFD401D55555555555 5C0200000000000013FDD27D27D27D27CC00FFFFFFFFFFFFD401D555555555555C01D5 555555555573FDB8B302A7A1F18C00FFFFFFFFFFFFD401D555555555555C01AAAAAAAA AAAAC3FDA1F19690E0856C00FFFFFFFFFFFFD401D555555555555C0180000000000013 FD8E38E38E38E37C00FFFFFFFFFFFFD401D555555555555C0155555555555563FD7D88 E99FAB0BAC00FFFFFFFFFFFFD401D555555555555C012AAAAAAAAAAAB3FD6FE1A8C536 FDFC00FFFFFFFFFFFFD401D555555555555C0100000000000003FD654320FEDCBA7C00 FFFFFFFFFFFFD401D555555555555C00AAAAAAAAAAAAB3FD5DAD524C9C411C00FFFFFF FFFFFFD401D555555555555C0055555555555563FD59203CAE7591EC00FFFFFFFFFFFF D401D555555555555C0000000000000013FD579BE02468ACDC00FFFFFFFFFFFFD401D5 55555555555BFF55555555555583FD59203CAE7591EC00FFFFFFFFFFFFD401D5555555 55555BFE555555555555B3FD5DAD524C9C411C00FFFFFFFFFFFFD401D555555555555B CC80000000000003FD654320FEDCBA7C00FFFFFFFFFFFFD401D5555555555553FE5555 55555554F3FD6FE1A8C536FDFC00FFFFFFFFFFFFD401D5555555555553FF5555555555 5523FD7D88E99FAB0BAC00FFFFFFFFFFFFD401D5555555555553FFFFFFFFFFFFFFC3FD 8E38E38E38E36C00FFFFFFFFFFFFD401D55555555555540055555555555533FDA1F196 90E0855C00FFFFFFFFFFFFD401D555555555555400AAAAAAAAAAAA83FDB8B302A7A1F1 7C00FFFFFFFFFFFFD401D555555555555400FFFFFFFFFFFFD3FDD27D27D27D27AC00FF FFFFFFFFFFD401D5555555555554012AAAAAAAAAAA93FDEF5006117227FC00FFFFFFFF FFFFD401D55555555555540155555555555543FE0795CEB240794C00FFFFFFFFFFFFD4 01D5555555555554017FFFFFFFFFFFF3FE1907F6E5D4C3AC00FFFFFFFFFFFFD401D555 555555555401AAAAAAAAAAAAA3FE2BFE7BA375F30C00FFFFFFFFFFFFD401D555555555 555401D5555555555553FE40795CEB24078C00FFFFFFFFFFFFD401D555555555555402 00000000000003FE56789ABCDF011C00FFFFFFFFFFFFD401D555555555555402155555 55555553FE6DFC3518A6DFBC00FFFFFFFFFFFFD401D5555555555554022AAAAAAAAAAA A3FE87042BFE7BA35C00FFFFFFFFFFFFD401D5555555555554023FFFFFFFFFFFF3FEA1 907F6E5D4C2C00FFFFFFFFFFFFD4020000000000000C0240000000000003FE3A06D3A0 6D39FC00FFFFFFFFFFFFD4020000000000000C022AAAAAAAAAAAB3FE2894AB6CD8EFBC 00FFFFFFFFFFFFD4020000000000000C0215555555555563FE18A6DFC3518A6C00FFFF FFFFFFFFD4020000000000000C0200000000000013FE0A3D70A3D70A4C00FFFFFFFFFF FFD4020000000000000C01D5555555555573FDFAB0BC1CD2DE3C00FFFFFFFFFFFFD402 0000000000000C01AAAAAAAAAAAAC3FDE3EF500611721C00FFFFFFFFFFFFD402000000 0000000C0180000000000013FDD0369D0369D02C00FFFFFFFFFFFFD402000000000000 0C0155555555555563FDBF86A314DBF85C00FFFFFFFFFFFFD4020000000000000C012A AAAAAAAAAAB3FDB1DF623A67EAAC00FFFFFFFFFFFFD4020000000000000C0100000000 000003FDA740DA740DA72C00FFFFFFFFFFFFD4020000000000000C00AAAAAAAAAAAAB3 FD9FAB0BC1CD2DCC00FFFFFFFFFFFFD4020000000000000C0055555555555563FD9B1D F623A67E9C00FFFFFFFFFFFFD4020000000000000C0000000000000013FD9999999999 998C00FFFFFFFFFFFFD4020000000000000BFF55555555555583FD9B1DF623A67E9C00 FFFFFFFFFFFFD4020000000000000BFE555555555555B3FD9FAB0BC1CD2DCC00FFFFFF FFFFFFD4020000000000000BCC80000000000003FDA740DA740DA72C00FFFFFFFFFFFF D40200000000000003FE555555555554F3FDB1DF623A67EAAC00FFFFFFFFFFFFD40200 000000000003FF55555555555523FDBF86A314DBF85C00FFFFFFFFFFFFD40200000000 000003FFFFFFFFFFFFFFC3FDD0369D0369D01C00FFFFFFFFFFFFD40200000000000004 0055555555555533FDE3EF500611720C00FFFFFFFFFFFFD4020000000000000400AAAA AAAAAAAA83FDFAB0BC1CD2DE2C00FFFFFFFFFFFFD4020000000000000400FFFFFFFFFF FFD3FE0A3D70A3D70A3C00FFFFFFFFFFFFD40200000000000004012AAAAAAAAAAA93FE 18A6DFC3518A5C00FFFFFFFFFFFFD402000000000000040155555555555543FE2894AB 6CD8EFAC00FFFFFFFFFFFFD40200000000000004017FFFFFFFFFFFF3FE3A06D3A06D39 FC00FFFFFFFFFFFFD4020000000000000401AAAAAAAAAAAAA3FE4CFD585E0E696C00FF FFFFFFFFFFD4020000000000000401D5555555555553FE617839A5BC7DDC00FFFFFFFF FFFFD402000000000000040200000000000003FE7777777777777C00FFFFFFFFFFFFD4 02000000000000040215555555555553FE8EFB11D33F560C00FFFFFFFFFFFFD4020000 0000000004022AAAAAAAAAAAA3FEA80308B91419BC00FFFFFFFFFFFFD4020000000000 0004023FFFFFFFFFFFF3FEC28F5C28F5C27C00FFFFFFFFFFFFD4021555555555555C02 40000000000003FE5D4C3B2A1907EC00FFFFFFFFFFFFD4021555555555555C022AAAAA AAAAAAB3FE4BDA12F684BD9C00FFFFFFFFFFFFD4021555555555555C02155555555555 63FE3BEC474CFD585C00FFFFFFFFFFFFD4021555555555555C0200000000000013FE2D 82D82D82D82C00FFFFFFFFFFFFD4021555555555555C01D5555555555573FE209DC598 153D0C00FFFFFFFFFFFFD4021555555555555C01AAAAAAAAAAAAC3FE153D0F8CB486FC 00FFFFFFFFFFFFD4021555555555555C0180000000000013FE0B60B60B60B60C00FFFF FFFFFFFFD4021555555555555C0155555555555563FE0308B91419CA1C00FFFFFFFFFF FFD4021555555555555C012AAAAAAAAAAAB3FDF86A314DBF867C00FFFFFFFFFFFFD402 1555555555555C0100000000000003FDEDCBA9876542FC00FFFFFFFFFFFFD402155555 5555555C00AAAAAAAAAAAAB3FDE635DAD524C99C00FFFFFFFFFFFFD402155555555555 5C0055555555555563FDE1A8C536FE1A6C00FFFFFFFFFFFFD4021555555555555C0000 000000000013FDE02468ACF1355C00FFFFFFFFFFFFD4021555555555555BFF55555555 555583FDE1A8C536FE1A6C00FFFFFFFFFFFFD4021555555555555BFE555555555555B3 FDE635DAD524C99C00FFFFFFFFFFFFD4021555555555555BCC80000000000003FDEDCB A9876542FC00FFFFFFFFFFFFD40215555555555553FE555555555554F3FDF86A314DBF 867C00FFFFFFFFFFFFD40215555555555553FF55555555555523FE0308B91419CA1C00 FFFFFFFFFFFFD40215555555555553FFFFFFFFFFFFFFC3FE0B60B60B60B5FC00FFFFFF FFFFFFD402155555555555540055555555555533FE153D0F8CB486EC00FFFFFFFFFFFF D4021555555555555400AAAAAAAAAAAA83FE209DC598153CFC00FFFFFFFFFFFFD40215 55555555555400FFFFFFFFFFFFD3FE2D82D82D82D81C00FFFFFFFFFFFFD40215555555 555554012AAAAAAAAAAA93FE3BEC474CFD584C00FFFFFFFFFFFFD40215555555555554 0155555555555543FE4BDA12F684BD8C00FFFFFFFFFFFFD40215555555555554017FFF FFFFFFFFF3FE5D4C3B2A1907EC00FFFFFFFFFFFFD4021555555555555401AAAAAAAAAA AAA3FE7042BFE7BA374C00FFFFFFFFFFFFD4021555555555555401D5555555555553FE 84BDA12F684BCC00FFFFFFFFFFFFD402155555555555540200000000000003FE9ABCDF 0123455C00FFFFFFFFFFFFD402155555555555540215555555555553FEB240795CEB23 FC00FFFFFFFFFFFFD40215555555555554022AAAAAAAAAAAA3FECB487042BFE79C00FF FFFFFFFFFFD40215555555555554023FFFFFFFFFFFF3FEE5D4C3B2A1906C00FFFFFFFF FFFFD4022AAAAAAAAAAAAC0240000000000003FE82D82D82D82D5C00FFFFFFFFFFFFD4 022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE7166054F43E31C00FFFFFFFFFFFFD4022AAA AAAAAAAAAC0215555555555563FE617839A5BC7DCC00FFFFFFFFFFFFD4022AAAAAAAAA AAAC0200000000000013FE530ECA8641FDAC00FFFFFFFFFFFFD4022AAAAAAAAAAAAC01 D5555555555573FE4629B7F0D4628C00FFFFFFFFFFFFD4022AAAAAAAAAAAAC01AAAAAA AAAAAAC3FE3AC901E573AC7C00FFFFFFFFFFFFD4022AAAAAAAAAAAAC01800000000000 13FE30ECA8641FDB7C00FFFFFFFFFFFFD4022AAAAAAAAAAAAC0155555555555563FE28 94AB6CD8EF8C00FFFFFFFFFFFFD4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE21C10AFF 9EE8BC00FFFFFFFFFFFFD4022AAAAAAAAAAAAC0100000000000003FE1C71C71C71C6FC 00FFFFFFFFFFFFD4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE18A6DFC3518A5C00FFFF FFFFFFFFD4022AAAAAAAAAAAAC0055555555555563FE166054F43E32AC00FFFFFFFFFF FFD4022AAAAAAAAAAAAC0000000000000013FE159E26AF37C01C00FFFFFFFFFFFFD402 2AAAAAAAAAAAABFF55555555555583FE166054F43E32AC00FFFFFFFFFFFFD4022AAAAA AAAAAAABFE555555555555B3FE18A6DFC3518A4C00FFFFFFFFFFFFD4022AAAAAAAAAAA ABCC80000000000003FE1C71C71C71C6FC00FFFFFFFFFFFFD4022AAAAAAAAAAAA3FE55 5555555554F3FE21C10AFF9EE8BC00FFFFFFFFFFFFD4022AAAAAAAAAAAA3FF55555555 555523FE2894AB6CD8EF8C00FFFFFFFFFFFFD4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3 FE30ECA8641FDB6C00FFFFFFFFFFFFD4022AAAAAAAAAAAA40055555555555533FE3AC9 01E573AC6C00FFFFFFFFFFFFD4022AAAAAAAAAAAA400AAAAAAAAAAAA83FE4629B7F0D4 626C00FFFFFFFFFFFFD4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE530ECA8641FD9C00 FFFFFFFFFFFFD4022AAAAAAAAAAAA4012AAAAAAAAAAA93FE617839A5BC7DBC00FFFFFF FFFFFFD4022AAAAAAAAAAAA40155555555555543FE7166054F43E30C00FFFFFFFFFFFF D4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE82D82D82D82D5C00FFFFFFFFFFFFD4022A AAAAAAAAAAA401AAAAAAAAAAAAA3FE95CEB240795CCC00FFFFFFFFFFFFD4022AAAAAAA AAAAA401D5555555555553FEAA49938827713C00FFFFFFFFFFFFD4022AAAAAAAAAAAA4 0200000000000003FEC048D159E26ADC00FFFFFFFFFFFFD4022AAAAAAAAAAAA4021555 5555555553FED7CC6BB5AA496C00FFFFFFFFFFFFD4022AAAAAAAAAAAA4022AAAAAAAAA AAA3FEF0D4629B7F0D1C00FFFFFFFFFFFFD4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FF 05B05B05B05AFC00FFFFFFFFFFFFD4023FFFFFFFFFFFFC0240000000000003FEAAAAAA AAAAAA8C00FFFFFFFFFFFFD4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE993882771660 4C00FFFFFFFFFFFFD4023FFFFFFFFFFFFC0215555555555563FE894AB6CD8EFAFC00FF FFFFFFFFFFD4023FFFFFFFFFFFFC0200000000000013FE7AE147AE147ADC00FFFFFFFF FFFFD4023FFFFFFFFFFFFC01D5555555555573FE6DFC3518A6DFAC00FFFFFFFFFFFFD4 023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE629B7F0D4629AC00FFFFFFFFFFFFD4023FFF FFFFFFFFFC0180000000000013FE58BF258BF258AC00FFFFFFFFFFFFD4023FFFFFFFFF FFFC0155555555555563FE50672894AB6CBC00FFFFFFFFFFFFD4023FFFFFFFFFFFFC01 2AAAAAAAAAAAB3FE499388277165FC00FFFFFFFFFFFFD4023FFFFFFFFFFFFC01000000 00000003FE4444444444442C00FFFFFFFFFFFFD4023FFFFFFFFFFFFC00AAAAAAAAAAAA B3FE40795CEB24078C00FFFFFFFFFFFFD4023FFFFFFFFFFFFC0055555555555563FE3E 32D21C10AFDC00FFFFFFFFFFFFD4023FFFFFFFFFFFFC0000000000000013FE3D70A3D7 0A3D4C00FFFFFFFFFFFFD4023FFFFFFFFFFFFBFF55555555555583FE3E32D21C10AFDC 00FFFFFFFFFFFFD4023FFFFFFFFFFFFBFE555555555555B3FE40795CEB24077C00FFFF FFFFFFFFD4023FFFFFFFFFFFFBCC80000000000003FE4444444444442C00FFFFFFFFFF FFD4023FFFFFFFFFFFF3FE555555555554F3FE499388277165EC00FFFFFFFFFFFFD402 3FFFFFFFFFFFF3FF55555555555523FE50672894AB6CBC00FFFFFFFFFFFFD4023FFFFF FFFFFFF3FFFFFFFFFFFFFFC3FE58BF258BF2589C00FFFFFFFFFFFFD4023FFFFFFFFFFF F40055555555555533FE629B7F0D46299C00FFFFFFFFFFFFD4023FFFFFFFFFFFF400AA AAAAAAAAAA83FE6DFC3518A6DF9C00FFFFFFFFFFFFD4023FFFFFFFFFFFF400FFFFFFFF FFFFD3FE7AE147AE147ACC00FFFFFFFFFFFFD4023FFFFFFFFFFFF4012AAAAAAAAAAA93 FE894AB6CD8EFAEC00FFFFFFFFFFFFD4023FFFFFFFFFFFF40155555555555543FE9938 827716603C00FFFFFFFFFFFFD4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FEAAAAAAAAAA AA8C00FFFFFFFFFFFFD4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FEBDA12F684BD9FC00 FFFFFFFFFFFFD4023FFFFFFFFFFFF401D5555555555553FED21C10AFF9EE6C00FFFFFF FFFFFFD4023FFFFFFFFFFFF40200000000000003FEE81B4E81B4E80C00FFFFFFFFFFFF D4023FFFFFFFFFFFF40215555555555553FEFF9EE8DD7CC69C00FFFFFFFFFFFFD4023F FFFFFFFFFFF4022AAAAAAAAAAAA3FF0C536FE1A8C52C00FFFFFFFFFFFFD4023FFFFFFF FFFFF4023FFFFFFFFFFFF3FF1999999999998C00EAAAAAAAAAAA8C024000000000000C 0240000000000003FDAAAAAAAAAAAA9C00EAAAAAAAAAAA8C024000000000000C022AAA AAAAAAAAB3FD87C65A438215FC00EAAAAAAAAAAA8C024000000000000C021555555555 5563FD67EAC2F0734B7C00EAAAAAAAAAAA8C024000000000000C0200000000000013FD 4B17E4B17E4B1C00EAAAAAAAAAAA8C024000000000000C01D5555555555573FD314DBF 86A314DC00EAAAAAAAAAAA8C024000000000000C01AAAAAAAAAAAAC3FD1A8C536FE1A8 BC00EAAAAAAAAAAA8C024000000000000C0180000000000013FD06D3A06D3A06CC00EA AAAAAAAAAA8C024000000000000C0155555555555563FCEC474CFD585DEC00EAAAAAAA AAAA8C024000000000000C012AAAAAAAAAAAB3FCD0F8CB4870429C00EAAAAAAAAAAA8C 024000000000000C0100000000000003FCBBBBBBBBBBBB8C00EAAAAAAAAAAA8C024000 000000000C00AAAAAAAAAAAAB3FCAC901E573AC8CC00EAAAAAAAAAAA8C024000000000 000C0055555555555563FCA375F31AED6A5C00EAAAAAAAAAAA8C024000000000000C00 00000000000013FCA06D3A06D3A03C00EAAAAAAAAAAA8C024000000000000BFF555555 55555583FCA375F31AED6A6C00EAAAAAAAAAAA8C024000000000000BFE555555555555 B3FCAC901E573AC8CC00EAAAAAAAAAAA8C024000000000000BCC80000000000003FCBB BBBBBBBBBB8C00EAAAAAAAAAAA8C0240000000000003FE555555555554F3FCD0F8CB48 70428C00EAAAAAAAAAAA8C0240000000000003FF55555555555523FCEC474CFD585DDC 00EAAAAAAAAAAA8C0240000000000003FFFFFFFFFFFFFFC3FD06D3A06D3A06BC00EAAA AAAAAAAA8C02400000000000040055555555555533FD1A8C536FE1A8AC00EAAAAAAAAA AA8C024000000000000400AAAAAAAAAAAA83FD314DBF86A314CC00EAAAAAAAAAAA8C02 4000000000000400FFFFFFFFFFFFD3FD4B17E4B17E4AFC00EAAAAAAAAAAA8C02400000 00000004012AAAAAAAAAAA93FD67EAC2F0734B4C00EAAAAAAAAAAA8C02400000000000 040155555555555543FD87C65A438215EC00EAAAAAAAAAAA8C0240000000000004017F FFFFFFFFFFF3FDAAAAAAAAAAAA8C00EAAAAAAAAAAA8C024000000000000401AAAAAAAA AAAAA3FDD097B425ED096C00EAAAAAAAAAAA8C024000000000000401D5555555555553 FDF98D76B549325C00EAAAAAAAAAAA8C02400000000000040200000000000003FE12C5 F92C5F92CC00EAAAAAAAAAAA8C02400000000000040215555555555553FE2A49938827 715C00EAAAAAAAAAAA8C0240000000000004022AAAAAAAAAAAA3FE43518A6DFC350C00 EAAAAAAAAAAA8C0240000000000004023FFFFFFFFFFFF3FE5DDDDDDDDDDDCC00EAAAAA AAAAAA8C022AAAAAAAAAAABC0240000000000003FD7654320FEDCBAC00EAAAAAAAAAAA 8C022AAAAAAAAAAABC022AAAAAAAAAAAB3FD536FE1A8C5370C00EAAAAAAAAAAA8C022A AAAAAAAAAABC0215555555555563FD33944A55B66C8C00EAAAAAAAAAAA8C022AAAAAAA AAAABC0200000000000013FD16C16C16C16C2C00EAAAAAAAAAAA8C022AAAAAAAAAAABC 01D5555555555573FCF9EE8DD7CC6BCC00EAAAAAAAAAAA8C022AAAAAAAAAAABC01AAAA AAAAAAAAC3FCCC6BB5AA49938C00EAAAAAAAAAAA8C022AAAAAAAAAAABC018000000000 0013FCA4FA4FA4FA4FAC00EAAAAAAAAAAA8C022AAAAAAAAAAABC0155555555555563FC 839A5BC7DEA00C00EAAAAAAAAAAA8C022AAAAAAAAAAABC012AAAAAAAAAAAB3FC684BDA 12F684BC00EAAAAAAAAAAA8C022AAAAAAAAAAABC0100000000000003FC530ECA8641FD AC00EAAAAAAAAAAA8C022AAAAAAAAAAABC00AAAAAAAAAAAAB3FC43E32D21C10AEC00EA AAAAAAAAAA8C022AAAAAAAAAAABC0055555555555563FC3AC901E573AC7C00EAAAAAAA AAAA8C022AAAAAAAAAAABC0000000000000013FC37C048D159E25C00EAAAAAAAAAAA8C 022AAAAAAAAAAABBFF55555555555583FC3AC901E573AC8C00EAAAAAAAAAAA8C022AAA AAAAAAAABBFE555555555555B3FC43E32D21C10AEC00EAAAAAAAAAAA8C022AAAAAAAAA AABBCC80000000000003FC530ECA8641FDAC00EAAAAAAAAAAA8C022AAAAAAAAAAAB3FE 555555555554F3FC684BDA12F684AC00EAAAAAAAAAAA8C022AAAAAAAAAAAB3FF555555 55555523FC839A5BC7DE9FFC00EAAAAAAAAAAA8C022AAAAAAAAAAAB3FFFFFFFFFFFFFF C3FCA4FA4FA4FA4F8C00EAAAAAAAAAAA8C022AAAAAAAAAAAB40055555555555533FCCC 6BB5AA49936C00EAAAAAAAAAAA8C022AAAAAAAAAAAB400AAAAAAAAAAAA83FCF9EE8DD7 CC6B8C00EAAAAAAAAAAA8C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FD16C16C16C16C0C 00EAAAAAAAAAAA8C022AAAAAAAAAAAB4012AAAAAAAAAAA93FD33944A55B66C6C00EAAA AAAAAAAA8C022AAAAAAAAAAAB40155555555555543FD536FE1A8C536EC00EAAAAAAAAA AA8C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FD7654320FEDCB9C00EAAAAAAAAAAA8C02 2AAAAAAAAAAAB401AAAAAAAAAAAAA3FD9C413B8B302A7C00EAAAAAAAAAAA8C022AAAAA AAAAAAB401D5555555555553FDC536FE1A8C536C00EAAAAAAAAAAA8C022AAAAAAAAAAA B40200000000000003FDF13579BE02468C00EAAAAAAAAAAA8C022AAAAAAAAAAAB40215 555555555553FE101E573AC901EC00EAAAAAAAAAAA8C022AAAAAAAAAAAB4022AAAAAAA AAAAA3FE29264E209DC58C00EAAAAAAAAAAA8C022AAAAAAAAAAAB4023FFFFFFFFFFFF3 FE43B2A1907F6E5C00EAAAAAAAAAAA8C021555555555556C0240000000000003FD468A CF13579BDC00EAAAAAAAAAAA8C021555555555556C022AAAAAAAAAAAB3FD23A67EAC2F 073C00EAAAAAAAAAAA8C021555555555556C0215555555555563FD03CAE759203CBC00 EAAAAAAAAAAA8C021555555555556C0200000000000013FCCDF012345678BC00EAAAAA AAAAAA8C021555555555556C01D5555555555573FC9A5BC7DEA00C2C00EAAAAAAAAAAA 8C021555555555556C01AAAAAAAAAAAAC3FC6CD8EFB11D33FC00EAAAAAAAAAAA8C0215 55555555556C0180000000000013FC456789ABCDF01C00EAAAAAAAAAAA8C0215555555 55556C0155555555555563FC240795CEB2406C00EAAAAAAAAAAA8C021555555555556C 012AAAAAAAAAAAB3FC08B91419CA251C00EAAAAAAAAAAA8C021555555555556C010000 0000000003FBE6F8091A2B3C2C00EAAAAAAAAAAA8C021555555555556C00AAAAAAAAAA AAB3FBC8A0CE512956AC00EAAAAAAAAAAA8C021555555555556C0055555555555563FB B66C77D88E99CC00EAAAAAAAAAAA8C021555555555556C0000000000000013FBB05B05 B05B057C00EAAAAAAAAAAA8C021555555555556BFF55555555555583FBB66C77D88E99 CC00EAAAAAAAAAAA8C021555555555556BFE555555555555B3FBC8A0CE5129569C00EA AAAAAAAAAA8C021555555555556BCC80000000000003FBE6F8091A2B3C0C00EAAAAAAA AAAA8C0215555555555563FE555555555554F3FC08B91419CA250C00EAAAAAAAAAAA8C 0215555555555563FF55555555555523FC240795CEB2405C00EAAAAAAAAAAA8C021555 5555555563FFFFFFFFFFFFFFC3FC456789ABCDEFFC00EAAAAAAAAAAA8C021555555555 55640055555555555533FC6CD8EFB11D33DC00EAAAAAAAAAAA8C021555555555556400 AAAAAAAAAAAA83FC9A5BC7DEA00BFC00EAAAAAAAAAAA8C021555555555556400FFFFFF FFFFFFD3FCCDF0123456786C00EAAAAAAAAAAA8C0215555555555564012AAAAAAAAAAA 93FD03CAE759203C9C00EAAAAAAAAAAA8C02155555555555640155555555555543FD23 A67EAC2F072C00EAAAAAAAAAAA8C0215555555555564017FFFFFFFFFFFF3FD468ACF13 579BCC00EAAAAAAAAAAA8C021555555555556401AAAAAAAAAAAAA3FD6C77D88E99FAAC 00EAAAAAAAAAAA8C021555555555556401D5555555555553FD956D9B1DF6239C00EAAA AAAAAAAA8C02155555555555640200000000000003FDC16C16C16C16CC00EAAAAAAAAA AA8C02155555555555640215555555555553FDF0734B78FBD3FC00EAAAAAAAAAAA8C02 15555555555564022AAAAAAAAAAAA3FE11419CA252ADAC00EAAAAAAAAAAA8C02155555 55555564023FFFFFFFFFFFF3FE2BCDF01234567C00EAAAAAAAAAAA8C02000000000000 1C0240000000000003FD1B4E81B4E81B5C00EAAAAAAAAAAA8C020000000000001C022A AAAAAAAAAAB3FCF0D4629B7F0D6C00EAAAAAAAAAAA8C020000000000001C0215555555 555563FCB11D33F561785C00EAAAAAAAAAAA8C020000000000001C0200000000000013 FC777777777777AC00EAAAAAAAAAAA8C020000000000001C01D5555555555573FC43E3 2D21C10B2C00EAAAAAAAAAAA8C020000000000001C01AAAAAAAAAAAAC3FC166054F43E 32EC00EAAAAAAAAAAA8C020000000000001C0180000000000013FBDDDDDDDDDDDE0C00 EAAAAAAAAAAA8C020000000000001C0155555555555563FB9B1DF623A67EBC00EAAAAA AAAAAA8C020000000000001C012AAAAAAAAAAAB3FB6480F2B9D6481C00EAAAAAAAAAAA 8C020000000000001C0100000000000003FB3A06D3A06D3A0C00EAAAAAAAAAAA8C0200 00000000001C00AAAAAAAAAAAAB3FB1BAF98D76B549C00EAAAAAAAAAAA8C0200000000 00001C0055555555555563FB097B425ED097BC00EAAAAAAAAAAA8C020000000000001C 0000000000000013FB0369D0369D036C00EAAAAAAAAAAA8C020000000000001BFF5555 5555555583FB097B425ED097BC00EAAAAAAAAAAA8C020000000000001BFE5555555555 55B3FB1BAF98D76B548C00EAAAAAAAAAAA8C020000000000001BCC80000000000003FB 3A06D3A06D39FC00EAAAAAAAAAAA8C0200000000000013FE555555555554F3FB6480F2 B9D647FC00EAAAAAAAAAAA8C0200000000000013FF55555555555523FB9B1DF623A67E 9C00EAAAAAAAAAAA8C0200000000000013FFFFFFFFFFFFFFC3FBDDDDDDDDDDDDCC00EA AAAAAAAAAA8C02000000000000140055555555555533FC166054F43E32CC00EAAAAAAA AAAA8C020000000000001400AAAAAAAAAAAA83FC43E32D21C10AEC00EAAAAAAAAAAA8C 020000000000001400FFFFFFFFFFFFD3FC7777777777775C00EAAAAAAAAAAA8C020000 0000000014012AAAAAAAAAAA93FCB11D33F561781C00EAAAAAAAAAAA8C020000000000 00140155555555555543FCF0D4629B7F0D2C00EAAAAAAAAAAA8C020000000000001401 7FFFFFFFFFFFF3FD1B4E81B4E81B4C00EAAAAAAAAAAA8C020000000000001401AAAAAA AAAAAAA3FD413B8B302A7A1C00EAAAAAAAAAAA8C020000000000001401D55555555555 53FD6A314DBF86A31C00EAAAAAAAAAAA8C02000000000000140200000000000003FD96 2FC962FC964C00EAAAAAAAAAAA8C02000000000000140215555555555553FDC536FE1A 8C536C00EAAAAAAAAAAA8C0200000000000014022AAAAAAAAAAAA3FDF746EBE635DACC 00EAAAAAAAAAAA8C0200000000000014023FFFFFFFFFFFF3FE162FC962FC962C00EAAA AAAAAAAA8C01D555555555557C0240000000000003FCE93E93E93E93EC00EAAAAAAAAA AA8C01D555555555557C022AAAAAAAAAAAB3FCA375F31AED6AAC00EAAAAAAAAAAA8C01 D555555555557C0215555555555563FC63BEC474CFD59C00EAAAAAAAAAAA8C01D55555 5555557C0200000000000013FC2A1907F6E5D4EC00EAAAAAAAAAAA8C01D55555555555 7C01D5555555555573FBED097B425ED0BC00EAAAAAAAAAAA8C01D555555555557C01AA AAAAAAAAAAC3FB9203CAE759203C00EAAAAAAAAAAA8C01D555555555557C0180000000 000013FB4320FEDCBA988C00EAAAAAAAAAAA8C01D555555555557C0155555555555563 FB0061172283393C00EAAAAAAAAAAA8C01D555555555557C012AAAAAAAAAAAB3FA9388 277166052C00EAAAAAAAAAAA8C01D555555555557C0100000000000003FA3E93E93E93 E8FC00EAAAAAAAAAAA8C01D555555555557C00AAAAAAAAAAAAB3FA01E573AC901E1C00 EAAAAAAAAAAA8C01D555555555557C0055555555555563F9BAF98D76B5489C00EAAAAA AAAAAA8C01D555555555557C0000000000000013F9A2B3C4D5E6F77C00EAAAAAAAAAAA 8C01D555555555557BFF55555555555583F9BAF98D76B5488C00EAAAAAAAAAAA8C01D5 55555555557BFE555555555555B3FA01E573AC901E0C00EAAAAAAAAAAA8C01D5555555 55557BCC80000000000003FA3E93E93E93E8EC00EAAAAAAAAAAA8C01D5555555555573 FE555555555554F3FA938827716604EC00EAAAAAAAAAAA8C01D5555555555573FF5555 5555555523FB0061172283391C00EAAAAAAAAAAA8C01D5555555555573FFFFFFFFFFFF FFC3FB4320FEDCBA983C00EAAAAAAAAAAA8C01D55555555555740055555555555533FB 9203CAE7591FFC00EAAAAAAAAAAA8C01D555555555557400AAAAAAAAAAAA83FBED097B 425ED05C00EAAAAAAAAAAA8C01D555555555557400FFFFFFFFFFFFD3FC2A1907F6E5D4 9C00EAAAAAAAAAAA8C01D5555555555574012AAAAAAAAAAA93FC63BEC474CFD55C00EA AAAAAAAAAA8C01D55555555555740155555555555543FCA375F31AED6A6C00EAAAAAAA AAAA8C01D5555555555574017FFFFFFFFFFFF3FCE93E93E93E93CC00EAAAAAAAAAAA8C 01D555555555557401AAAAAAAAAAAAA3FD1A8C536FE1A8BC00EAAAAAAAAAAA8C01D555 555555557401D5555555555553FD438215FF3DD1BC00EAAAAAAAAAAA8C01D555555555 55740200000000000003FD6F8091A2B3C4DC00EAAAAAAAAAAA8C01D555555555557402 15555555555553FD9E87C65A43820C00EAAAAAAAAAAA8C01D5555555555574022AAAAA AAAAAAA3FDD097B425ED096C00EAAAAAAAAAAA8C01D5555555555574023FFFFFFFFFFF F3FE02D82D82D82D7C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC0240000000000003FCA4 FA4FA4FA4F7C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FC5F31AED6 A9264C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC0215555555555563FC1F7A80308B913C 00EAAAAAAAAAAA8C01AAAAAAAAAAAACC0200000000000013FBCBA9876543210C00EAAA AAAAAAAA8C01AAAAAAAAAAAACC01D5555555555573FB6480F2B9D647FC00EAAAAAAAAA AA8C01AAAAAAAAAAAACC01AAAAAAAAAAAAC3FB097B425ED0977C00EAAAAAAAAAAA8C01 AAAAAAAAAAAACC0180000000000013FA7530ECA8641F9C00EAAAAAAAAAAA8C01AAAAAA AAAAAACC0155555555555563F9DF623A67EAC1CC00EAAAAAAAAAAA8C01AAAAAAAAAAAA CC012AAAAAAAAAAAB3F904EE2CC0A9E74C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC0100 000000000003F76C16C16C16BB8C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC00AAAAAAAA AAAABBF5E573AC901E6D6C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC005555555555556B F79CA252ADB3698C00EAAAAAAAAAAA8C01AAAAAAAAAAAACC000000000000001BF7FDB9 7530ECAE3C00EAAAAAAAAAAA8C01AAAAAAAAAAAACBFF5555555555558BF79CA252ADB3 69AC00EAAAAAAAAAAA8C01AAAAAAAAAAAACBFE555555555555BBF5E573AC901E6FBC00 EAAAAAAAAAAA8C01AAAAAAAAAAAACBCC80000000000003F76C16C16C16BB2C00EAAAAA AAAAAA8C01AAAAAAAAAAAAC3FE555555555554F3F904EE2CC0A9E6EC00EAAAAAAAAAAA 8C01AAAAAAAAAAAAC3FF55555555555523F9DF623A67EAC14C00EAAAAAAAAAAA8C01AA AAAAAAAAAAC3FFFFFFFFFFFFFFC3FA7530ECA8641EFC00EAAAAAAAAAAA8C01AAAAAAAA AAAAC40055555555555533FB097B425ED0974C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC4 00AAAAAAAAAAAA83FB6480F2B9D6479C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC400FFFF FFFFFFFFD3FBCBA9876543207C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC4012AAAAAAAAA AA93FC1F7A80308B90FC00EAAAAAAAAAAA8C01AAAAAAAAAAAAC40155555555555543FC 5F31AED6A9260C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FCA4FA4F A4FA4F6C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FCF0D4629B7F0D 1C00EAAAAAAAAAAA8C01AAAAAAAAAAAAC401D5555555555553FD215FF3DD1BAF8C00EA AAAAAAAAAA8C01AAAAAAAAAAAAC40200000000000003FD4D5E6F8091A2AC00EAAAAAAA AAAA8C01AAAAAAAAAAAAC40215555555555553FD7C65A438215FDC00EAAAAAAAAAAA8C 01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FDAE759203CAE73C00EAAAAAAAAAAA8C01AAAA AAAAAAAAC4023FFFFFFFFFFFF3FDE38E38E38E38BC00EAAAAAAAAAAA8C018000000000 001C0240000000000003FC69D0369D0369BC00EAAAAAAAAAAA8C018000000000001C02 2AAAAAAAAAAAB3FC240795CEB2408C00EAAAAAAAAAAA8C018000000000001C02155555 55555563FBC8A0CE512956EC00EAAAAAAAAAAA8C018000000000001C02000000000000 13FB5555555555559C00EAAAAAAAAAAA8C018000000000001C01D5555555555573FADC 598153D0F8FC00EAAAAAAAAAAA8C018000000000001C01AAAAAAAAAAAAC3FA264E209D C597FC00EAAAAAAAAAAA8C018000000000001C0180000000000013F91111111111111C 00EAAAAAAAAAAA8C018000000000001C0155555555555563F3845C8A0CE4F1BC00EAAA AAAAAAAA8C018000000000001C012AAAAAAAAAAABBF8A8C536FE1A8D8C00EAAAAAAAAA AA8C018000000000001C010000000000000BF97E4B17E4B17F2C00EAAAAAAAAAAA8C01 8000000000001C00AAAAAAAAAAAABBF9F7A80308B914DC00EAAAAAAAAAAA8C01800000 0000001C005555555555556BFA203CAE7592042C00EAAAAAAAAAAA8C01800000000000 1C000000000000001BFA2C5F92C5F92CCC00EAAAAAAAAAAA8C018000000000001BFF55 55555555558BFA203CAE7592043C00EAAAAAAAAAAA8C018000000000001BFE55555555 5555BBF9F7A80308B9151C00EAAAAAAAAAAA8C018000000000001BCC8000000000000B F97E4B17E4B17F4C00EAAAAAAAAAAA8C0180000000000013FE555555555554FBF8A8C5 36FE1A8E5C00EAAAAAAAAAAA8C0180000000000013FF55555555555523F3845C8A0CE4 D09C00EAAAAAAAAAAA8C0180000000000013FFFFFFFFFFFFFFC3F911111111110FFC00 EAAAAAAAAAAA8C01800000000000140055555555555533FA264E209DC5977C00EAAAAA AAAAAA8C018000000000001400AAAAAAAAAAAA83FADC598153D0F82C00EAAAAAAAAAAA 8C018000000000001400FFFFFFFFFFFFD3FB555555555554FC00EAAAAAAAAAAA8C0180 000000000014012AAAAAAAAAAA93FBC8A0CE5129566C00EAAAAAAAAAAA8C0180000000 0000140155555555555543FC240795CEB2404C00EAAAAAAAAAAA8C0180000000000014 017FFFFFFFFFFFF3FC69D0369D0369AC00EAAAAAAAAAAA8C018000000000001401AAAA AAAAAAAAA3FCB5AA499388275C00EAAAAAAAAAAA8C018000000000001401D555555555 5553FD03CAE759203CAC00EAAAAAAAAAAA8C01800000000000140200000000000003FD 2FC962FC962FCC00EAAAAAAAAAAA8C01800000000000140215555555555553FD5ED097 B425ECFC00EAAAAAAAAAAA8C0180000000000014022AAAAAAAAAAAA3FD90E0857FCF74 5C00EAAAAAAAAAAA8C0180000000000014023FFFFFFFFFFFF3FDC5F92C5F92C5DC00EA AAAAAAAAAA8C015555555555556C0240000000000003FC37C048D159E24C00EAAAAAAA AAAA8C015555555555556C022AAAAAAAAAAAB3FBE3EF500611720C00EAAAAAAAAAAA8C 015555555555556C0215555555555563FB6480F2B9D647EC00EAAAAAAAAAAA8C015555 555555556C0200000000000013FAE26AF37C048D2C00EAAAAAAAAAAA8C015555555555 556C01D5555555555573FA1419CA252ADB1C00EAAAAAAAAAAA8C015555555555556C01 AAAAAAAAAAAAC3F87839A5BC7DE82C00EAAAAAAAAAAA8C015555555555556C01800000 0000001BF7FDB97530ECABBC00EAAAAAAAAAAA8C015555555555556C01555555555555 6BF98A6DFC3518A84C00EAAAAAAAAAAA8C015555555555556C012AAAAAAAAAAABBFA32 7104EE2CC16C00EAAAAAAAAAAA8C015555555555556C010000000000000BFA87654320 FEDD9C00EAAAAAAAAAAA8C015555555555556C00AAAAAAAAAAAABBFAC413B8B302A87C 00EAAAAAAAAAAA8C015555555555556C005555555555556BFAE87C65A438222C00EAAA AAAAAAAA8C015555555555556C000000000000001BFAF49F49F49F4ABC00EAAAAAAAAA AA8C015555555555556BFF5555555555558BFAE87C65A438222C00EAAAAAAAAAAA8C01 5555555555556BFE555555555555BBFAC413B8B302A87C00EAAAAAAAAAAA8C01555555 5555556BCC8000000000000BFA87654320FEDD9C00EAAAAAAAAAAA8C01555555555555 63FE555555555554FBFA327104EE2CC19C00EAAAAAAAAAAA8C0155555555555563FF55 55555555552BF98A6DFC3518A8BC00EAAAAAAAAAAA8C0155555555555563FFFFFFFFFF FFFFCBF7FDB97530ECB00C00EAAAAAAAAAAA8C01555555555555640055555555555533 F87839A5BC7DE5EC00EAAAAAAAAAAA8C015555555555556400AAAAAAAAAAAA83FA1419 CA252ADA2C00EAAAAAAAAAAA8C015555555555556400FFFFFFFFFFFFD3FAE26AF37C04 8BEC00EAAAAAAAAAAA8C0155555555555564012AAAAAAAAAAA93FB6480F2B9D6477C00 EAAAAAAAAAAA8C01555555555555640155555555555543FBE3EF500611719C00EAAAAA AAAAAA8C0155555555555564017FFFFFFFFFFFF3FC37C048D159E22C00EAAAAAAAAAAA 8C015555555555556401AAAAAAAAAAAAA3FC839A5BC7DE9FDC00EAAAAAAAAAAA8C0155 55555555556401D5555555555553FCD585E0E696F1CC00EAAAAAAAAAAA8C0155555555 5555640200000000000003FD16C16C16C16C0C00EAAAAAAAAAAA8C0155555555555564 0215555555555553FD45C8A0CE51293C00EAAAAAAAAAAA8C0155555555555564022AAA AAAAAAAAA3FD77D88E99FAB09C00EAAAAAAAAAAA8C0155555555555564023FFFFFFFFF FFF3FDACF13579BE021C00EAAAAAAAAAAA8C012AAAAAAAAAAABC0240000000000003FC 0ECA8641FDB94C00EAAAAAAAAAAA8C012AAAAAAAAAAABC022AAAAAAAAAAAB3FB9203CA E759202C00EAAAAAAAAAAA8C012AAAAAAAAAAABC0215555555555563FB12956D9B1DF5 EC00EAAAAAAAAAAA8C012AAAAAAAAAAABC0200000000000013FA3E93E93E93E92C00EA AAAAAAAAAA8C012AAAAAAAAAAABC01D5555555555573F8C10AFF9EE8DC2C00EAAAAAAA AAAA8C012AAAAAAAAAAABC01AAAAAAAAAAAACBF81722833944A7EC00EAAAAAAAAAAA8C 012AAAAAAAAAAABC018000000000001BF9C71C71C71C72FC00EAAAAAAAAAAA8C012AAA AAAAAAAABC015555555555556BFA690E0857FCF7EC00EAAAAAAAAAAA8C012AAAAAAAAA AABC012AAAAAAAAAAABBFAD6480F2B9D652C00EAAAAAAAAAAA8C012AAAAAAAAAAABC01 0000000000000BFB159E26AF37C0AC00EAAAAAAAAAAA8C012AAAAAAAAAAABC00AAAAAA AAAAAABBFB33F5617839A62C00EAAAAAAAAAAA8C012AAAAAAAAAAABC00555555555555 6BFB4629B7F0D4630C00EAAAAAAAAAAA8C012AAAAAAAAAAABC000000000000001BFB4C 3B2A1907F75C00EAAAAAAAAAAA8C012AAAAAAAAAAABBFF5555555555558BFB4629B7F0 D4630C00EAAAAAAAAAAA8C012AAAAAAAAAAABBFE555555555555BBFB33F5617839A63C 00EAAAAAAAAAAA8C012AAAAAAAAAAABBCC8000000000000BFB159E26AF37C0CC00EAAA AAAAAAAA8C012AAAAAAAAAAAB3FE555555555554FBFAD6480F2B9D657C00EAAAAAAAAA AA8C012AAAAAAAAAAAB3FF5555555555552BFA690E0857FCF84C00EAAAAAAAAAAA8C01 2AAAAAAAAAAAB3FFFFFFFFFFFFFFCBF9C71C71C71C73CC00EAAAAAAAAAAA8C012AAAAA AAAAAAB4005555555555553BF81722833944A9BC00EAAAAAAAAAAA8C012AAAAAAAAAAA B400AAAAAAAAAAAA83F8C10AFF9EE8D90C00EAAAAAAAAAAA8C012AAAAAAAAAAAB400FF FFFFFFFFFFD3FA3E93E93E93E80C00EAAAAAAAAAAA8C012AAAAAAAAAAAB4012AAAAAAA AAAA93FB12956D9B1DF58C00EAAAAAAAAAAA8C012AAAAAAAAAAAB40155555555555543 FB9203CAE7591FAC00EAAAAAAAAAAA8C012AAAAAAAAAAAB4017FFFFFFFFFFFF3FC0ECA 8641FDB92C00EAAAAAAAAAAA8C012AAAAAAAAAAAB401AAAAAAAAAAAAA3FC5AA4993882 76DC00EAAAAAAAAAAA8C012AAAAAAAAAAAB401D5555555555553FCAC901E573AC8DC00 EAAAAAAAAAAA8C012AAAAAAAAAAAB40200000000000003FD02468ACF13578C00EAAAAA AAAAAA8C012AAAAAAAAAAAB40215555555555553FD314DBF86A314CC00EAAAAAAAAAAA 8C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD635DAD524C9C1C00EAAAAAAAAAAA8C012A AAAAAAAAAAB4023FFFFFFFFFFFF3FD987654320FEDAC00EAAAAAAAAAAA8C0100000000 00000C0240000000000003FBDDDDDDDDDDDD7C00EAAAAAAAAAAA8C010000000000000C 022AAAAAAAAAAAB3FB524C9C413B8B0C00EAAAAAAAAAAA8C010000000000000C021555 5555555563FAA5BC7DEA00C19C00EAAAAAAAAAAA8C010000000000000C020000000000 0013F97E4B17E4B17DBC00EAAAAAAAAAAA8C010000000000000C01D555555555557BF5 E573AC901E66DC00EAAAAAAAAAAA8C010000000000000C01AAAAAAAAAAAACBF98A6DFC 3518A87C00EAAAAAAAAAAA8C010000000000000C018000000000001BFA62FC962FC963 BC00EAAAAAAAAAAA8C010000000000000C015555555555556BFAE87C65A438222C00EA AAAAAAAAAA8C010000000000000C012AAAAAAAAAAABBFB2ADB363BEC47BC00EAAAAAAA AAAA8C010000000000000C010000000000000BFB555555555555CC00EAAAAAAAAAAA8C 010000000000000C00AAAAAAAAAAAABBFB73AC901E573B3C00EAAAAAAAAAAA8C010000 000000000C005555555555556BFB85E0E696F1F82C00EAAAAAAAAAAA8C010000000000 000C000000000000001BFB8BF258BF258C7C00EAAAAAAAAAAA8C010000000000000BFF 5555555555558BFB85E0E696F1F82C00EAAAAAAAAAAA8C010000000000000BFE555555 555555BBFB73AC901E573B5C00EAAAAAAAAAAA8C010000000000000BCC800000000000 0BFB555555555555EC00EAAAAAAAAAAA8C0100000000000003FE555555555554FBFB2A DB363BEC47EC00EAAAAAAAAAAA8C0100000000000003FF5555555555552BFAE87C65A4 38228C00EAAAAAAAAAAA8C0100000000000003FFFFFFFFFFFFFFCBFA62FC962FC9642C 00EAAAAAAAAAAA8C0100000000000004005555555555553BF98A6DFC3518A96C00EAAA AAAAAAAA8C010000000000000400AAAAAAAAAAAA8BF5E573AC901E7FFC00EAAAAAAAAA AA8C010000000000000400FFFFFFFFFFFFD3F97E4B17E4B17B9C00EAAAAAAAAAAA8C01 00000000000004012AAAAAAAAAAA93FAA5BC7DEA00C0CC00EAAAAAAAAAAA8C01000000 000000040155555555555543FB524C9C413B8A8C00EAAAAAAAAAAA8C01000000000000 04017FFFFFFFFFFFF3FBDDDDDDDDDDDD3C00EAAAAAAAAAAA8C010000000000000401AA AAAAAAAAAAA3FC3AC901E573AC4C00EAAAAAAAAAAA8C010000000000000401D5555555 555553FC8CB487042BFE4C00EAAAAAAAAAAA8C01000000000000040200000000000003 FCE4B17E4B17E48C00EAAAAAAAAAAA8C01000000000000040215555555555553FD215F F3DD1BAF7C00EAAAAAAAAAAA8C0100000000000004022AAAAAAAAAAAA3FD536FE1A8C5 36DC00EAAAAAAAAAAA8C0100000000000004023FFFFFFFFFFFF3FD8888888888885C00 EAAAAAAAAAAA8C00AAAAAAAAAAAABC0240000000000003FBB05B05B05B055C00EAAAAA AAAAAA8C00AAAAAAAAAAAABC022AAAAAAAAAAAB3FB24C9C413B8B2EC00EAAAAAAAAAAA 8C00AAAAAAAAAAAABC0215555555555563FA4AB6CD8EFB115C00EAAAAAAAAAAA8C00AA AAAAAAAAAABC0200000000000013F8907F6E5D4C3A7C00EAAAAAAAAAAA8C00AAAAAAAA AAAABC01D555555555557BF8A8C536FE1A8DEC00EAAAAAAAAAAA8C00AAAAAAAAAAAABC 01AAAAAAAAAAAACBFA203CAE7592047C00EAAAAAAAAAAA8C00AAAAAAAAAAAABC018000 000000001BFABE02468ACF13FC00EAAAAAAAAAAA8C00AAAAAAAAAAAABC015555555555 556BFB21C10AFF9EE93C00EAAAAAAAAAAA8C00AAAAAAAAAAAABC012AAAAAAAAAAABBFB 585E0E696F1FDC00EAAAAAAAAAAA8C00AAAAAAAAAAAABC010000000000000BFB82D82D 82D82DEC00EAAAAAAAAAAA8C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFBA12F684BDA13 5C00EAAAAAAAAAAA8C00AAAAAAAAAAAABC005555555555556BFBB363BEC474D03C00EA AAAAAAAAAA8C00AAAAAAAAAAAABC000000000000001BFBB97530ECA8649C00EAAAAAAA AAAA8C00AAAAAAAAAAAABBFF5555555555558BFBB363BEC474D04C00EAAAAAAAAAAA8C 00AAAAAAAAAAAABBFE555555555555BBFBA12F684BDA137C00EAAAAAAAAAAA8C00AAAA AAAAAAAABBCC8000000000000BFB82D82D82D82E0C00EAAAAAAAAAAA8C00AAAAAAAAAA AAB3FE555555555554FBFB585E0E696F200C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB3FF 5555555555552BFB21C10AFF9EE96C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB3FFFFFFFF FFFFFFCBFABE02468ACF146C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB400555555555555 3BFA203CAE759204FC00EAAAAAAAAAAA8C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BF8A8 C536FE1A910C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB400FFFFFFFFFFFFD3F8907F6E5D 4C360C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB4012AAAAAAAAAAA93FA4AB6CD8EFB108C 00EAAAAAAAAAAA8C00AAAAAAAAAAAAB40155555555555543FB24C9C413B8B26C00EAAA AAAAAAAA8C00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FBB05B05B05B051C00EAAAAAAAAA AA8C00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FC240795CEB2403C00EAAAAAAAAAAA8C00 AAAAAAAAAAAAB401D5555555555553FC75F31AED6A923C00EAAAAAAAAAAA8C00AAAAAA AAAAAAB40200000000000003FCCDF0123456787C00EAAAAAAAAAAA8C00AAAAAAAAAAAA B40215555555555553FD15FF3DD1BAF97C00EAAAAAAAAAAA8C00AAAAAAAAAAAAB4022A AAAAAAAAAAA3FD480F2B9D6480CC00EAAAAAAAAAAA8C00AAAAAAAAAAAAB4023FFFFFFF FFFFF3FD7D27D27D27D25C00EAAAAAAAAAAA8C005555555555556C0240000000000003 FB950C83FB72EA1C00EAAAAAAAAAAA8C005555555555556C022AAAAAAAAAAAB3FB097B 425ED0978C00EAAAAAAAAAAA8C005555555555556C0215555555555563FA1419CA252A DADC00EAAAAAAAAAAA8C005555555555556C0200000000000013F76C16C16C16C0DC00 EAAAAAAAAAAA8C005555555555556C01D555555555557BF9419CA252ADB3FC00EAAAAA AAAAAA8C005555555555556C01AAAAAAAAAAAACBFA56D9B1DF623AFC00EAAAAAAAAAAA 8C005555555555556C018000000000001BFAF49F49F49F4A7C00EAAAAAAAAAAA8C0055 55555555556C015555555555556BFB3D0F8CB487049C00EAAAAAAAAAAA8C0055555555 55556C012AAAAAAAAAAABBFB73AC901E573B3C00EAAAAAAAAAAA8C005555555555556C 010000000000000BFB9E26AF37C0494C00EAAAAAAAAAAA8C005555555555556C00AAAA AAAAAAAABBFBBC7DEA00C22EBC00EAAAAAAAAAAA8C005555555555556C005555555555 556BFBCEB240795CEB9C00EAAAAAAAAAAA8C005555555555556C000000000000001BFB D4C3B2A1907FEC00EAAAAAAAAAAA8C005555555555556BFF5555555555558BFBCEB240 795CEB9C00EAAAAAAAAAAA8C005555555555556BFE555555555555BBFBBC7DEA00C22E CC00EAAAAAAAAAAA8C005555555555556BCC8000000000000BFB9E26AF37C0495C00EA AAAAAAAAAA8C0055555555555563FE555555555554FBFB73AC901E573B5C00EAAAAAAA AAAA8C0055555555555563FF5555555555552BFB3D0F8CB48704BC00EAAAAAAAAAAA8C 0055555555555563FFFFFFFFFFFFFFCBFAF49F49F49F4B0C00EAAAAAAAAAAA8C005555 5555555564005555555555553BFA56D9B1DF623B8C00EAAAAAAAAAAA8C005555555555 556400AAAAAAAAAAAA8BF9419CA252ADB5CC00EAAAAAAAAAAA8C005555555555556400 FFFFFFFFFFFFD3F76C16C16C16B6FC00EAAAAAAAAAAA8C0055555555555564012AAAAA AAAAAA93FA1419CA252AD9EC00EAAAAAAAAAAA8C005555555555556401555555555555 43FB097B425ED0971C00EAAAAAAAAAAA8C0055555555555564017FFFFFFFFFFFF3FB95 0C83FB72E9CC00EAAAAAAAAAAA8C005555555555556401AAAAAAAAAAAAA3FC166054F4 3E329C00EAAAAAAAAAAA8C005555555555556401D5555555555553FC684BDA12F6848C 00EAAAAAAAAAAA8C00555555555555640200000000000003FCC048D159E26ACC00EAAA AAAAAAAA8C00555555555555640215555555555553FD0F2B9D6480F2AC00EAAAAAAAAA AA8C0055555555555564022AAAAAAAAAAAA3FD413B8B302A79FC00EAAAAAAAAAAA8C00 55555555555564023FFFFFFFFFFFF3FD7654320FEDCB7C00EAAAAAAAAAAA8C00000000 0000001C0240000000000003FB8BF258BF258B9C00EAAAAAAAAAAA8C00000000000000 1C022AAAAAAAAAAAB3FB0061172283390C00EAAAAAAAAAAA8C000000000000001C0215 555555555563FA01E573AC901DDC00EAAAAAAAAAAA8C000000000000001C0200000000 000013F6B4E81B4E81B1AC00EAAAAAAAAAAA8C000000000000001C01D555555555557B F966054F43E32DFC00EAAAAAAAAAAA8C000000000000001C01AAAAAAAAAAAACBFA690E 0857FCF7FC00EAAAAAAAAAAA8C000000000000001C018000000000001BFB0369D0369D 03CC00EAAAAAAAAAAA8C000000000000001C015555555555556BFB4629B7F0D4631C00 EAAAAAAAAAAA8C000000000000001C012AAAAAAAAAAABBFB7CC6BB5AA499BC00EAAAAA AAAAAA8C000000000000001C010000000000000BFBA740DA740DA7CC00EAAAAAAAAAAA 8C000000000000001C00AAAAAAAAAAAABBFBC598153D0F8D3C00EAAAAAAAAAAA8C0000 00000000001C005555555555556BFBD7CC6BB5AA4A1C00EAAAAAAAAAAA8C0000000000 00001C000000000000001BFBDDDDDDDDDDDE6C00EAAAAAAAAAAA8C000000000000001B FF5555555555558BFBD7CC6BB5AA4A1C00EAAAAAAAAAAA8C000000000000001BFE5555 55555555BBFBC598153D0F8D4C00EAAAAAAAAAAA8C000000000000001BCC8000000000 000BFBA740DA740DA7DC00EAAAAAAAAAAA8C0000000000000013FE555555555554FBFB 7CC6BB5AA499DC00EAAAAAAAAAAA8C0000000000000013FF5555555555552BFB4629B7 F0D4633C00EAAAAAAAAAAA8C0000000000000013FFFFFFFFFFFFFFCBFB0369D0369D04 0C00EAAAAAAAAAAA8C0000000000000014005555555555553BFA690E0857FCF88C00EA AAAAAAAAAA8C000000000000001400AAAAAAAAAAAA8BF966054F43E32FCC00EAAAAAAA AAAA8C000000000000001400FFFFFFFFFFFFD3F6B4E81B4E819DEC00EAAAAAAAAAAA8C 0000000000000014012AAAAAAAAAAA93FA01E573AC901CEC00EAAAAAAAAAAA8C000000 00000000140155555555555543FB0061172283389C00EAAAAAAAAAAA8C000000000000 0014017FFFFFFFFFFFF3FB8BF258BF258B4C00EAAAAAAAAAAA8C000000000000001401 AAAAAAAAAAAAA3FC11D33F5617835C00EAAAAAAAAAAA8C000000000000001401D55555 55555553FC63BEC474CFD54C00EAAAAAAAAAAA8C000000000000001402000000000000 03FCBBBBBBBBBBBB8C00EAAAAAAAAAAA8C00000000000000140215555555555553FD0C E512956D9B0C00EAAAAAAAAAAA8C0000000000000014022AAAAAAAAAAAA3FD3EF50061 17225C00EAAAAAAAAAAA8C0000000000000014023FFFFFFFFFFFF3FD740DA740DA73DC 00EAAAAAAAAAAA8BFF5555555555558C0240000000000003FB950C83FB72E9FC00EAAA AAAAAAAA8BFF5555555555558C022AAAAAAAAAAAB3FB097B425ED0976C00EAAAAAAAAA AA8BFF5555555555558C0215555555555563FA1419CA252ADA9C00EAAAAAAAAAAA8BFF 5555555555558C0200000000000013F76C16C16C16BEDC00EAAAAAAAAAAA8BFF555555 5555558C01D555555555557BF9419CA252ADB47C00EAAAAAAAAAAA8BFF555555555555 8C01AAAAAAAAAAAACBFA56D9B1DF623B3C00EAAAAAAAAAAA8BFF5555555555558C0180 00000000001BFAF49F49F49F4ABC00EAAAAAAAAAAA8BFF5555555555558C0155555555 55556BFB3D0F8CB48704BC00EAAAAAAAAAAA8BFF5555555555558C012AAAAAAAAAAABB FB73AC901E573B5C00EAAAAAAAAAAA8BFF5555555555558C010000000000000BFB9E26 AF37C0496C00EAAAAAAAAAAA8BFF5555555555558C00AAAAAAAAAAAABBFBBC7DEA00C2 2EDC00EAAAAAAAAAAA8BFF5555555555558C005555555555556BFBCEB240795CEBBC00 EAAAAAAAAAAA8BFF5555555555558C000000000000001BFBD4C3B2A190800C00EAAAAA AAAAAA8BFF5555555555558BFF5555555555558BFBCEB240795CEBBC00EAAAAAAAAAAA 8BFF5555555555558BFE555555555555BBFBBC7DEA00C22EEC00EAAAAAAAAAAA8BFF55 55555555558BCC8000000000000BFB9E26AF37C0497C00EAAAAAAAAAAA8BFF55555555 555583FE555555555554FBFB73AC901E573B7C00EAAAAAAAAAAA8BFF55555555555583 FF5555555555552BFB3D0F8CB48704DC00EAAAAAAAAAAA8BFF55555555555583FFFFFF FFFFFFFFCBFAF49F49F49F4B4C00EAAAAAAAAAAA8BFF55555555555584005555555555 553BFA56D9B1DF623BCC00EAAAAAAAAAAA8BFF5555555555558400AAAAAAAAAAAA8BF9 419CA252ADB64C00EAAAAAAAAAAA8BFF5555555555558400FFFFFFFFFFFFD3F76C16C1 6C16B4FC00EAAAAAAAAAAA8BFF55555555555584012AAAAAAAAAAA93FA1419CA252AD9 AC00EAAAAAAAAAAA8BFF555555555555840155555555555543FB097B425ED096FC00EA AAAAAAAAAA8BFF55555555555584017FFFFFFFFFFFF3FB950C83FB72E9AC00EAAAAAAA AAAA8BFF5555555555558401AAAAAAAAAAAAA3FC166054F43E328C00EAAAAAAAAAAA8B FF5555555555558401D5555555555553FC684BDA12F6847C00EAAAAAAAAAAA8BFF5555 55555555840200000000000003FCC048D159E26ACC00EAAAAAAAAAAA8BFF5555555555 55840215555555555553FD0F2B9D6480F29C00EAAAAAAAAAAA8BFF5555555555558402 2AAAAAAAAAAAA3FD413B8B302A79EC00EAAAAAAAAAAA8BFF55555555555584023FFFFF FFFFFFF3FD7654320FEDCB7C00EAAAAAAAAAAA8BFE555555555555BC02400000000000 03FBB05B05B05B053C00EAAAAAAAAAAA8BFE555555555555BC022AAAAAAAAAAAB3FB24 C9C413B8B2CC00EAAAAAAAAAAA8BFE555555555555BC0215555555555563FA4AB6CD8E FB111C00EAAAAAAAAAAA8BFE555555555555BC0200000000000013F8907F6E5D4C397C 00EAAAAAAAAAAA8BFE555555555555BC01D555555555557BF8A8C536FE1A8EEC00EAAA AAAAAAAA8BFE555555555555BC01AAAAAAAAAAAACBFA203CAE759204BC00EAAAAAAAAA AA8BFE555555555555BC018000000000001BFABE02468ACF143C00EAAAAAAAAAAA8BFE 555555555555BC015555555555556BFB21C10AFF9EE95C00EAAAAAAAAAAA8BFE555555 555555BC012AAAAAAAAAAABBFB585E0E696F1FFC00EAAAAAAAAAAA8BFE555555555555 BC010000000000000BFB82D82D82D82E0C00EAAAAAAAAAAA8BFE555555555555BC00AA AAAAAAAAAABBFBA12F684BDA137C00EAAAAAAAAAAA8BFE555555555555BC0055555555 55556BFBB363BEC474D05C00EAAAAAAAAAAA8BFE555555555555BC000000000000001B FBB97530ECA864BC00EAAAAAAAAAAA8BFE555555555555BBFF5555555555558BFBB363 BEC474D06C00EAAAAAAAAAAA8BFE555555555555BBFE555555555555BBFBA12F684BDA 139C00EAAAAAAAAAAA8BFE555555555555BBCC8000000000000BFB82D82D82D82E2C00 EAAAAAAAAAAA8BFE555555555555B3FE555555555554FBFB585E0E696F202C00EAAAAA AAAAAA8BFE555555555555B3FF5555555555552BFB21C10AFF9EE98C00EAAAAAAAAAAA 8BFE555555555555B3FFFFFFFFFFFFFFCBFABE02468ACF14AC00EAAAAAAAAAAA8BFE55 5555555555B4005555555555553BFA203CAE7592053C00EAAAAAAAAAAA8BFE55555555 5555B400AAAAAAAAAAAA8BF8A8C536FE1A920C00EAAAAAAAAAAA8BFE555555555555B4 00FFFFFFFFFFFFD3F8907F6E5D4C350C00EAAAAAAAAAAA8BFE555555555555B4012AAA AAAAAAAA93FA4AB6CD8EFB104C00EAAAAAAAAAAA8BFE555555555555B4015555555555 5543FB24C9C413B8B24C00EAAAAAAAAAAA8BFE555555555555B4017FFFFFFFFFFFF3FB B05B05B05B04FC00EAAAAAAAAAAA8BFE555555555555B401AAAAAAAAAAAAA3FC240795 CEB2402C00EAAAAAAAAAAA8BFE555555555555B401D5555555555553FC75F31AED6A92 2C00EAAAAAAAAAAA8BFE555555555555B40200000000000003FCCDF0123456786C00EA AAAAAAAAAA8BFE555555555555B40215555555555553FD15FF3DD1BAF96C00EAAAAAAA AAAA8BFE555555555555B4022AAAAAAAAAAAA3FD480F2B9D6480CC00EAAAAAAAAAAA8B FE555555555555B4023FFFFFFFFFFFF3FD7D27D27D27D24C00EAAAAAAAAAAA8BCC8000 000000000C0240000000000003FBDDDDDDDDDDDD7C00EAAAAAAAAAAA8BCC8000000000 000C022AAAAAAAAAAAB3FB524C9C413B8AEC00EAAAAAAAAAAA8BCC8000000000000C02 15555555555563FAA5BC7DEA00C19C00EAAAAAAAAAAA8BCC8000000000000C02000000 00000013F97E4B17E4B17DBC00EAAAAAAAAAAA8BCC8000000000000C01D55555555555 7BF5E573AC901E66DC00EAAAAAAAAAAA8BCC8000000000000C01AAAAAAAAAAAACBF98A 6DFC3518A87C00EAAAAAAAAAAA8BCC8000000000000C018000000000001BFA62FC962F C963BC00EAAAAAAAAAAA8BCC8000000000000C015555555555556BFAE87C65A438226C 00EAAAAAAAAAAA8BCC8000000000000C012AAAAAAAAAAABBFB2ADB363BEC47DC00EAAA AAAAAAAA8BCC8000000000000C010000000000000BFB555555555555EC00EAAAAAAAAA AA8BCC8000000000000C00AAAAAAAAAAAABBFB73AC901E573B5C00EAAAAAAAAAAA8BCC 8000000000000C005555555555556BFB85E0E696F1F83C00EAAAAAAAAAAA8BCC800000 0000000C000000000000001BFB8BF258BF258C8C00EAAAAAAAAAAA8BCC800000000000 0BFF5555555555558BFB85E0E696F1F83C00EAAAAAAAAAAA8BCC8000000000000BFE55 5555555555BBFB73AC901E573B6C00EAAAAAAAAAAA8BCC8000000000000BCC80000000 00000BFB555555555555FC00EAAAAAAAAAAA8BCC80000000000003FE555555555554FB FB2ADB363BEC47FC00EAAAAAAAAAAA8BCC80000000000003FF5555555555552BFAE87C 65A43822AC00EAAAAAAAAAAA8BCC80000000000003FFFFFFFFFFFFFFCBFA62FC962FC9 644C00EAAAAAAAAAAA8BCC80000000000004005555555555553BF98A6DFC3518A9AC00 EAAAAAAAAAAA8BCC8000000000000400AAAAAAAAAAAA8BF5E573AC901E83FC00EAAAAA AAAAAA8BCC8000000000000400FFFFFFFFFFFFD3F97E4B17E4B17B5C00EAAAAAAAAAAA 8BCC80000000000004012AAAAAAAAAAA93FAA5BC7DEA00C0AC00EAAAAAAAAAAA8BCC80 0000000000040155555555555543FB524C9C413B8A7C00EAAAAAAAAAAA8BCC80000000 000004017FFFFFFFFFFFF3FBDDDDDDDDDDDD2C00EAAAAAAAAAAA8BCC80000000000004 01AAAAAAAAAAAAA3FC3AC901E573AC4C00EAAAAAAAAAAA8BCC8000000000000401D555 5555555553FC8CB487042BFE3C00EAAAAAAAAAAA8BCC80000000000004020000000000 0003FCE4B17E4B17E48C00EAAAAAAAAAAA8BCC800000000000040215555555555553FD 215FF3DD1BAF7C00EAAAAAAAAAAA8BCC80000000000004022AAAAAAAAAAAA3FD536FE1 A8C536CC00EAAAAAAAAAAA8BCC80000000000004023FFFFFFFFFFFF3FD888888888888 5C00EAAAAAAAAAAA83FE555555555554FC0240000000000003FC0ECA8641FDB93C00EA AAAAAAAAAA83FE555555555554FC022AAAAAAAAAAAB3FB9203CAE759200C00EAAAAAAA AAAA83FE555555555554FC0215555555555563FB12956D9B1DF5CC00EAAAAAAAAAAA83 FE555555555554FC0200000000000013FA3E93E93E93E8EC00EAAAAAAAAAAA83FE5555 55555554FC01D5555555555573F8C10AFF9EE8DB2C00EAAAAAAAAAAA83FE5555555555 54FC01AAAAAAAAAAAACBF81722833944A8EC00EAAAAAAAAAAA83FE555555555554FC01 8000000000001BF9C71C71C71C737C00EAAAAAAAAAAA83FE555555555554FC01555555 5555556BFA690E0857FCF82C00EAAAAAAAAAAA83FE555555555554FC012AAAAAAAAAAA BBFAD6480F2B9D656C00EAAAAAAAAAAA83FE555555555554FC010000000000000BFB15 9E26AF37C0CC00EAAAAAAAAAAA83FE555555555554FC00AAAAAAAAAAAABBFB33F56178 39A64C00EAAAAAAAAAAA83FE555555555554FC005555555555556BFB4629B7F0D4632C 00EAAAAAAAAAAA83FE555555555554FC000000000000001BFB4C3B2A1907F77C00EAAA AAAAAAAA83FE555555555554FBFF5555555555558BFB4629B7F0D4632C00EAAAAAAAAA AA83FE555555555554FBFE555555555555BBFB33F5617839A65C00EAAAAAAAAAAA83FE 555555555554FBCC8000000000000BFB159E26AF37C0EC00EAAAAAAAAAAA83FE555555 555554F3FE555555555554FBFAD6480F2B9D65BC00EAAAAAAAAAAA83FE555555555554 F3FF5555555555552BFA690E0857FCF88C00EAAAAAAAAAAA83FE555555555554F3FFFF FFFFFFFFFFCBF9C71C71C71C744C00EAAAAAAAAAAA83FE555555555554F40055555555 55553BF81722833944AABC00EAAAAAAAAAAA83FE555555555554F400AAAAAAAAAAAA83 F8C10AFF9EE8D80C00EAAAAAAAAAAA83FE555555555554F400FFFFFFFFFFFFD3FA3E93 E93E93E7CC00EAAAAAAAAAAA83FE555555555554F4012AAAAAAAAAAA93FB12956D9B1D F56C00EAAAAAAAAAAA83FE555555555554F40155555555555543FB9203CAE7591F8C00 EAAAAAAAAAAA83FE555555555554F4017FFFFFFFFFFFF3FC0ECA8641FDB91C00EAAAAA AAAAAA83FE555555555554F401AAAAAAAAAAAAA3FC5AA499388276CC00EAAAAAAAAAAA 83FE555555555554F401D5555555555553FCAC901E573AC8CC00EAAAAAAAAAAA83FE55 5555555554F40200000000000003FD02468ACF13578C00EAAAAAAAAAAA83FE55555555 5554F40215555555555553FD314DBF86A314BC00EAAAAAAAAAAA83FE555555555554F4 022AAAAAAAAAAAA3FD635DAD524C9C1C00EAAAAAAAAAAA83FE555555555554F4023FFF FFFFFFFFF3FD987654320FED9C00EAAAAAAAAAAA83FF5555555555552C024000000000 0003FC37C048D159E22C00EAAAAAAAAAAA83FF5555555555552C022AAAAAAAAAAAB3FB E3EF50061171EC00EAAAAAAAAAAA83FF5555555555552C0215555555555563FB6480F2 B9D647AC00EAAAAAAAAAAA83FF5555555555552C0200000000000013FAE26AF37C048C AC00EAAAAAAAAAAA83FF5555555555552C01D5555555555573FA1419CA252ADA9C00EA AAAAAAAAAA83FF5555555555552C01AAAAAAAAAAAAC3F87839A5BC7DE62C00EAAAAAAA AAAA83FF5555555555552C018000000000001BF7FDB97530ECAFBC00EAAAAAAAAAAA83 FF5555555555552C015555555555556BF98A6DFC3518A90C00EAAAAAAAAAAA83FF5555 555555552C012AAAAAAAAAAABBFA327104EE2CC1CC00EAAAAAAAAAAA83FF5555555555 552C010000000000000BFA87654320FEDDFC00EAAAAAAAAAAA83FF5555555555552C00 AAAAAAAAAAAABBFAC413B8B302A8DC00EAAAAAAAAAAA83FF5555555555552C00555555 5555556BFAE87C65A438228C00EAAAAAAAAAAA83FF5555555555552C00000000000000 1BFAF49F49F49F4B3C00EAAAAAAAAAAA83FF5555555555552BFF5555555555558BFAE8 7C65A43822AC00EAAAAAAAAAAA83FF5555555555552BFE555555555555BBFAC413B8B3 02A8EC00EAAAAAAAAAAA83FF5555555555552BCC8000000000000BFA87654320FEDE0C 00EAAAAAAAAAAA83FF55555555555523FE555555555554FBFA327104EE2CC20C00EAAA AAAAAAAA83FF55555555555523FF5555555555552BF98A6DFC3518A99C00EAAAAAAAAA AA83FF55555555555523FFFFFFFFFFFFFFCBF7FDB97530ECB38C00EAAAAAAAAAAA83FF 555555555555240055555555555533F87839A5BC7DE42C00EAAAAAAAAAAA83FF555555 5555552400AAAAAAAAAAAA83FA1419CA252AD9BC00EAAAAAAAAAAA83FF555555555555 2400FFFFFFFFFFFFD3FAE26AF37C048B7C00EAAAAAAAAAAA83FF55555555555524012A AAAAAAAAAA93FB6480F2B9D6473C00EAAAAAAAAAAA83FF555555555555240155555555 555543FBE3EF500611716C00EAAAAAAAAAAA83FF55555555555524017FFFFFFFFFFFF3 FC37C048D159E20C00EAAAAAAAAAAA83FF5555555555552401AAAAAAAAAAAAA3FC839A 5BC7DE9FBC00EAAAAAAAAAAA83FF5555555555552401D5555555555553FCD585E0E696 F1AC00EAAAAAAAAAAA83FF555555555555240200000000000003FD16C16C16C16BFC00 EAAAAAAAAAAA83FF555555555555240215555555555553FD45C8A0CE51293C00EAAAAA AAAAAA83FF55555555555524022AAAAAAAAAAAA3FD77D88E99FAB08C00EAAAAAAAAAAA 83FF55555555555524023FFFFFFFFFFFF3FDACF13579BE021C00EAAAAAAAAAAA83FFFF FFFFFFFFFFCC0240000000000003FC69D0369D03698C00EAAAAAAAAAAA83FFFFFFFFFF FFFFCC022AAAAAAAAAAAB3FC240795CEB2405C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC 0215555555555563FBC8A0CE5129566C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC020000 0000000013FB5555555555551C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC01D555555555 5573FADC598153D0F81C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3FA 264E209DC5971C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC0180000000000013F9111111 11110F1C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC0155555555555563F3845C8A0CE481 BC00EAAAAAAAAAAA83FFFFFFFFFFFFFFCC012AAAAAAAAAAABBF8A8C536FE1A910C00EA AAAAAAAAAA83FFFFFFFFFFFFFFCC010000000000000BF97E4B17E4B180EC00EAAAAAAA AAAA83FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBF9F7A80308B9169C00EAAAAAAAAAAA83 FFFFFFFFFFFFFFCC005555555555556BFA203CAE7592051C00EAAAAAAAAAAA83FFFFFF FFFFFFFFCC000000000000001BFA2C5F92C5F92DAC00EAAAAAAAAAAA83FFFFFFFFFFFF FFCBFF5555555555558BFA203CAE7592052C00EAAAAAAAAAAA83FFFFFFFFFFFFFFCBFE 555555555555BBF9F7A80308B916DC00EAAAAAAAAAAA83FFFFFFFFFFFFFFCBCC800000 0000000BF97E4B17E4B1811C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC3FE555555555554 FBF8A8C536FE1A91FC00EAAAAAAAAAAA83FFFFFFFFFFFFFFC3FF55555555555523F384 5C8A0CE45C9C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3F911111111 110E2C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC40055555555555533FA264E209DC5968C 00EAAAAAAAAAAA83FFFFFFFFFFFFFFC400AAAAAAAAAAAA83FADC598153D0F73C00EAAA AAAAAAAA83FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FB5555555555548C00EAAAAAAAAA AA83FFFFFFFFFFFFFFC4012AAAAAAAAAAA93FBC8A0CE512955FC00EAAAAAAAAAAA83FF FFFFFFFFFFFFC40155555555555543FC240795CEB2401C00EAAAAAAAAAAA83FFFFFFFF FFFFFFC4017FFFFFFFFFFFF3FC69D0369D03696C00EAAAAAAAAAAA83FFFFFFFFFFFFFF C401AAAAAAAAAAAAA3FCB5AA499388271C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC401D5 555555555553FD03CAE759203C8C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC40200000000 000003FD2FC962FC962FAC00EAAAAAAAAAAA83FFFFFFFFFFFFFFC40215555555555553 FD5ED097B425ECEC00EAAAAAAAAAAA83FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FD90E0 857FCF743C00EAAAAAAAAAAA83FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FDC5F92C5F92 C5CC00EAAAAAAAAAAA84005555555555553C0240000000000003FCA4FA4FA4FA4F5C00 EAAAAAAAAAAA84005555555555553C022AAAAAAAAAAAB3FC5F31AED6A9262C00EAAAAA AAAAAA84005555555555553C0215555555555563FC1F7A80308B910C00EAAAAAAAAAAA 84005555555555553C0200000000000013FBCBA987654320BC00EAAAAAAAAAAA840055 55555555553C01D5555555555573FB6480F2B9D647AC00EAAAAAAAAAAA840055555555 55553C01AAAAAAAAAAAAC3FB097B425ED0972C00EAAAAAAAAAAA84005555555555553C 0180000000000013FA7530ECA8641EDC00EAAAAAAAAAAA84005555555555553C015555 5555555563F9DF623A67EAC04C00EAAAAAAAAAAA84005555555555553C012AAAAAAAAA AAB3F904EE2CC0A9E5EC00EAAAAAAAAAAA84005555555555553C0100000000000003F7 6C16C16C16B68C00EAAAAAAAAAAA84005555555555553C00AAAAAAAAAAAABBF5E573AC 901E836C00EAAAAAAAAAAA84005555555555553C005555555555556BF79CA252ADB36F 0C00EAAAAAAAAAAA84005555555555553C000000000000001BF7FDB97530ECB3BC00EA AAAAAAAAAA84005555555555553BFF5555555555558BF79CA252ADB36F2C00EAAAAAAA AAAA84005555555555553BFE555555555555BBF5E573AC901E85BC00EAAAAAAAAAAA84 005555555555553BCC80000000000003F76C16C16C16B5AC00EAAAAAAAAAAA84005555 5555555533FE555555555554F3F904EE2CC0A9E58C00EAAAAAAAAAAA84005555555555 5533FF55555555555523F9DF623A67EABFEC00EAAAAAAAAAAA840055555555555533FF FFFFFFFFFFFFC3FA7530ECA8641E4C00EAAAAAAAAAAA84005555555555553400555555 55555533FB097B425ED096EC00EAAAAAAAAAAA84005555555555553400AAAAAAAAAAAA 83FB6480F2B9D6473C00EAAAAAAAAAAA84005555555555553400FFFFFFFFFFFFD3FBCB A9876543201C00EAAAAAAAAAAA840055555555555534012AAAAAAAAAAA93FC1F7A8030 8B90CC00EAAAAAAAAAAA8400555555555555340155555555555543FC5F31AED6A925DC 00EAAAAAAAAAAA840055555555555534017FFFFFFFFFFFF3FCA4FA4FA4FA4F3C00EAAA AAAAAAAA84005555555555553401AAAAAAAAAAAAA3FCF0D4629B7F0CEC00EAAAAAAAAA AA84005555555555553401D5555555555553FD215FF3DD1BAF7C00EAAAAAAAAAAA8400 555555555555340200000000000003FD4D5E6F8091A29C00EAAAAAAAAAAA8400555555 555555340215555555555553FD7C65A438215FCC00EAAAAAAAAAAA8400555555555555 34022AAAAAAAAAAAA3FDAE759203CAE71C00EAAAAAAAAAAA840055555555555534023F FFFFFFFFFFF3FDE38E38E38E38AC00EAAAAAAAAAAA8400AAAAAAAAAAAA8C0240000000 000003FCE93E93E93E939C00EAAAAAAAAAAA8400AAAAAAAAAAAA8C022AAAAAAAAAAAB3 FCA375F31AED6A6C00EAAAAAAAAAAA8400AAAAAAAAAAAA8C0215555555555563FC63BE C474CFD54C00EAAAAAAAAAAA8400AAAAAAAAAAAA8C0200000000000013FC2A1907F6E5 D49C00EAAAAAAAAAAA8400AAAAAAAAAAAA8C01D5555555555573FBED097B425ED02C00 EAAAAAAAAAAA8400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FB9203CAE7591FAC00EAAAAA AAAAAA8400AAAAAAAAAAAA8C0180000000000013FB4320FEDCBA97EC00EAAAAAAAAAAA 8400AAAAAAAAAAAA8C0155555555555563FB0061172283389C00EAAAAAAAAAAA8400AA AAAAAAAAAA8C012AAAAAAAAAAAB3FA938827716603FC00EAAAAAAAAAAA8400AAAAAAAA AAAA8C0100000000000003FA3E93E93E93E7CC00EAAAAAAAAAAA8400AAAAAAAAAAAA8C 00AAAAAAAAAAAAB3FA01E573AC901CEC00EAAAAAAAAAAA8400AAAAAAAAAAAA8C005555 5555555563F9BAF98D76B5463C00EAAAAAAAAAAA8400AAAAAAAAAAAA8C000000000000 0013F9A2B3C4D5E6F51C00EAAAAAAAAAAA8400AAAAAAAAAAAA8BFF55555555555583F9 BAF98D76B5462C00EAAAAAAAAAAA8400AAAAAAAAAAAA8BFE555555555555B3FA01E573 AC901CDC00EAAAAAAAAAAA8400AAAAAAAAAAAA8BCC80000000000003FA3E93E93E93E7 BC00EAAAAAAAAAAA8400AAAAAAAAAAAA83FE555555555554F3FA938827716603BC00EA AAAAAAAAAA8400AAAAAAAAAAAA83FF55555555555523FB0061172283387C00EAAAAAAA AAAA8400AAAAAAAAAAAA83FFFFFFFFFFFFFFC3FB4320FEDCBA97AC00EAAAAAAAAAAA84 00AAAAAAAAAAAA840055555555555533FB9203CAE7591F6C00EAAAAAAAAAAA8400AAAA AAAAAAAA8400AAAAAAAAAAAA83FBED097B425ECFBC00EAAAAAAAAAAA8400AAAAAAAAAA AA8400FFFFFFFFFFFFD3FC2A1907F6E5D44C00EAAAAAAAAAAA8400AAAAAAAAAAAA8401 2AAAAAAAAAAA93FC63BEC474CFD50C00EAAAAAAAAAAA8400AAAAAAAAAAAA8401555555 55555543FCA375F31AED6A1C00EAAAAAAAAAAA8400AAAAAAAAAAAA84017FFFFFFFFFFF F3FCE93E93E93E937C00EAAAAAAAAAAA8400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD1A 8C536FE1A89C00EAAAAAAAAAAA8400AAAAAAAAAAAA8401D5555555555553FD438215FF 3DD18C00EAAAAAAAAAAA8400AAAAAAAAAAAA840200000000000003FD6F8091A2B3C4AC 00EAAAAAAAAAAA8400AAAAAAAAAAAA840215555555555553FD9E87C65A4381EC00EAAA AAAAAAAA8400AAAAAAAAAAAA84022AAAAAAAAAAAA3FDD097B425ED093C00EAAAAAAAAA AA8400AAAAAAAAAAAA84023FFFFFFFFFFFF3FE02D82D82D82D6C00EAAAAAAAAAAA8400 FFFFFFFFFFFFDC0240000000000003FD1B4E81B4E81B2C00EAAAAAAAAAAA8400FFFFFF FFFFFFDC022AAAAAAAAAAAB3FCF0D4629B7F0D0C00EAAAAAAAAAAA8400FFFFFFFFFFFF DC0215555555555563FCB11D33F56177FC00EAAAAAAAAAAA8400FFFFFFFFFFFFDC0200 000000000013FC7777777777774C00EAAAAAAAAAAA8400FFFFFFFFFFFFDC01D5555555 555573FC43E32D21C10ABC00EAAAAAAAAAAA8400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3 FC166054F43E328C00EAAAAAAAAAAA8400FFFFFFFFFFFFDC0180000000000013FBDDDD DDDDDDDD3C00EAAAAAAAAAAA8400FFFFFFFFFFFFDC0155555555555563FB9B1DF623A6 7DEC00EAAAAAAAAAAA8400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FB6480F2B9D6474C00 EAAAAAAAAAAA8400FFFFFFFFFFFFDC0100000000000003FB3A06D3A06D393C00EAAAAA AAAAAA8400FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FB1BAF98D76B53CC00EAAAAAAAAAAA 8400FFFFFFFFFFFFDC0055555555555563FB097B425ED096EC00EAAAAAAAAAAA8400FF FFFFFFFFFFDC0000000000000013FB0369D0369D029C00EAAAAAAAAAAA8400FFFFFFFF FFFFDBFF55555555555583FB097B425ED096EC00EAAAAAAAAAAA8400FFFFFFFFFFFFDB FE555555555555B3FB1BAF98D76B53BC00EAAAAAAAAAAA8400FFFFFFFFFFFFDBCC8000 0000000003FB3A06D3A06D392C00EAAAAAAAAAAA8400FFFFFFFFFFFFD3FE5555555555 54F3FB6480F2B9D6472C00EAAAAAAAAAAA8400FFFFFFFFFFFFD3FF55555555555523FB 9B1DF623A67DCC00EAAAAAAAAAAA8400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FBDDDDDD DDDDDCFC00EAAAAAAAAAAA8400FFFFFFFFFFFFD40055555555555533FC166054F43E32 6C00EAAAAAAAAAAA8400FFFFFFFFFFFFD400AAAAAAAAAAAA83FC43E32D21C10A8C00EA AAAAAAAAAA8400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FC777777777776FC00EAAAAAAA AAAA8400FFFFFFFFFFFFD4012AAAAAAAAAAA93FCB11D33F56177AC00EAAAAAAAAAAA84 00FFFFFFFFFFFFD40155555555555543FCF0D4629B7F0CCC00EAAAAAAAAAAA8400FFFF FFFFFFFFD4017FFFFFFFFFFFF3FD1B4E81B4E81B1C00EAAAAAAAAAAA8400FFFFFFFFFF FFD401AAAAAAAAAAAAA3FD413B8B302A79EC00EAAAAAAAAAAA8400FFFFFFFFFFFFD401 D5555555555553FD6A314DBF86A2EC00EAAAAAAAAAAA8400FFFFFFFFFFFFD402000000 00000003FD962FC962FC960C00EAAAAAAAAAAA8400FFFFFFFFFFFFD402155555555555 53FDC536FE1A8C533C00EAAAAAAAAAAA8400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FDF7 46EBE635DA8C00EAAAAAAAAAAA8400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE162FC962 FC961C00EAAAAAAAAAAA84012AAAAAAAAAAA9C0240000000000003FD468ACF13579BBC 00EAAAAAAAAAAA84012AAAAAAAAAAA9C022AAAAAAAAAAAB3FD23A67EAC2F071C00EAAA AAAAAAAA84012AAAAAAAAAAA9C0215555555555563FD03CAE759203C8C00EAAAAAAAAA AA84012AAAAAAAAAAA9C0200000000000013FCCDF0123456786C00EAAAAAAAAAAA8401 2AAAAAAAAAAA9C01D5555555555573FC9A5BC7DEA00BDC00EAAAAAAAAAAA84012AAAAA AAAAAA9C01AAAAAAAAAAAAC3FC6CD8EFB11D33AC00EAAAAAAAAAAA84012AAAAAAAAAAA 9C0180000000000013FC456789ABCDEFCC00EAAAAAAAAAAA84012AAAAAAAAAAA9C0155 555555555563FC240795CEB2401C00EAAAAAAAAAAA84012AAAAAAAAAAA9C012AAAAAAA AAAAB3FC08B91419CA24CC00EAAAAAAAAAAA84012AAAAAAAAAAA9C0100000000000003 FBE6F8091A2B3B8C00EAAAAAAAAAAA84012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FBC8A0 CE5129560C00EAAAAAAAAAAA84012AAAAAAAAAAA9C0055555555555563FBB66C77D88E 992C00EAAAAAAAAAAA84012AAAAAAAAAAA9C0000000000000013FBB05B05B05B04DC00 EAAAAAAAAAAA84012AAAAAAAAAAA9BFF55555555555583FBB66C77D88E992C00EAAAAA AAAAAA84012AAAAAAAAAAA9BFE555555555555B3FBC8A0CE512955FC00EAAAAAAAAAAA 84012AAAAAAAAAAA9BCC80000000000003FBE6F8091A2B3B6C00EAAAAAAAAAAA84012A AAAAAAAAAA93FE555555555554F3FC08B91419CA24BC00EAAAAAAAAAAA84012AAAAAAA AAAA93FF55555555555523FC240795CEB2400C00EAAAAAAAAAAA84012AAAAAAAAAAA93 FFFFFFFFFFFFFFC3FC456789ABCDEFAC00EAAAAAAAAAAA84012AAAAAAAAAAA94005555 5555555533FC6CD8EFB11D338C00EAAAAAAAAAAA84012AAAAAAAAAAA9400AAAAAAAAAA AA83FC9A5BC7DEA00BAC00EAAAAAAAAAAA84012AAAAAAAAAAA9400FFFFFFFFFFFFD3FC CDF0123456781C00EAAAAAAAAAAA84012AAAAAAAAAAA94012AAAAAAAAAAA93FD03CAE7 59203C6C00EAAAAAAAAAAA84012AAAAAAAAAAA940155555555555543FD23A67EAC2F06 FC00EAAAAAAAAAAA84012AAAAAAAAAAA94017FFFFFFFFFFFF3FD468ACF13579BAC00EA AAAAAAAAAA84012AAAAAAAAAAA9401AAAAAAAAAAAAA3FD6C77D88E99FA7C00EAAAAAAA AAAA84012AAAAAAAAAAA9401D5555555555553FD956D9B1DF6237C00EAAAAAAAAAAA84 012AAAAAAAAAAA940200000000000003FDC16C16C16C169C00EAAAAAAAAAAA84012AAA AAAAAAAA940215555555555553FDF0734B78FBD3CC00EAAAAAAAAAAA84012AAAAAAAAA AA94022AAAAAAAAAAAA3FE11419CA252AD9C00EAAAAAAAAAAA84012AAAAAAAAAAA9402 3FFFFFFFFFFFF3FE2BCDF01234565C00EAAAAAAAAAAA84015555555555554C02400000 00000003FD7654320FEDCB7C00EAAAAAAAAAAA84015555555555554C022AAAAAAAAAAA B3FD536FE1A8C536EC00EAAAAAAAAAAA84015555555555554C0215555555555563FD33 944A55B66C5C00EAAAAAAAAAAA84015555555555554C0200000000000013FD16C16C16 C16C0C00EAAAAAAAAAAA84015555555555554C01D5555555555573FCF9EE8DD7CC6B7C 00EAAAAAAAAAAA84015555555555554C01AAAAAAAAAAAAC3FCCC6BB5AA49933C00EAAA AAAAAAAA84015555555555554C0180000000000013FCA4FA4FA4FA4F5C00EAAAAAAAAA AA84015555555555554C0155555555555563FC839A5BC7DE9FBC00EAAAAAAAAAAA8401 5555555555554C012AAAAAAAAAAAB3FC684BDA12F6846C00EAAAAAAAAAAA8401555555 5555554C0100000000000003FC530ECA8641FD5C00EAAAAAAAAAAA8401555555555555 4C00AAAAAAAAAAAAB3FC43E32D21C10A9C00EAAAAAAAAAAA84015555555555554C0055 555555555563FC3AC901E573AC2C00EAAAAAAAAAAA84015555555555554C0000000000 000013FC37C048D159E20C00EAAAAAAAAAAA84015555555555554BFF55555555555583 FC3AC901E573AC3C00EAAAAAAAAAAA84015555555555554BFE555555555555B3FC43E3 2D21C10A9C00EAAAAAAAAAAA84015555555555554BCC80000000000003FC530ECA8641 FD5C00EAAAAAAAAAAA840155555555555543FE555555555554F3FC684BDA12F6845C00 EAAAAAAAAAAA840155555555555543FF55555555555523FC839A5BC7DE9FAC00EAAAAA AAAAAA840155555555555543FFFFFFFFFFFFFFC3FCA4FA4FA4FA4F3C00EAAAAAAAAAAA 8401555555555555440055555555555533FCCC6BB5AA49931C00EAAAAAAAAAAA840155 55555555554400AAAAAAAAAAAA83FCF9EE8DD7CC6B3C00EAAAAAAAAAAA840155555555 55554400FFFFFFFFFFFFD3FD16C16C16C16BDC00EAAAAAAAAAAA840155555555555544 012AAAAAAAAAAA93FD33944A55B66C3C00EAAAAAAAAAAA840155555555555544015555 5555555543FD536FE1A8C536CC00EAAAAAAAAAAA840155555555555544017FFFFFFFFF FFF3FD7654320FEDCB6C00EAAAAAAAAAAA84015555555555554401AAAAAAAAAAAAA3FD 9C413B8B302A4C00EAAAAAAAAAAA84015555555555554401D5555555555553FDC536FE 1A8C533C00EAAAAAAAAAAA8401555555555555440200000000000003FDF13579BE0246 6C00EAAAAAAAAAAA8401555555555555440215555555555553FE101E573AC901CC00EA AAAAAAAAAA840155555555555544022AAAAAAAAAAAA3FE29264E209DC57C00EAAAAAAA AAAA840155555555555544023FFFFFFFFFFFF3FE43B2A1907F6E4C00EAAAAAAAAAAA84 017FFFFFFFFFFFFC0240000000000003FDAAAAAAAAAAAA7C00EAAAAAAAAAAA84017FFF FFFFFFFFFC022AAAAAAAAAAAB3FD87C65A438215EC00EAAAAAAAAAAA84017FFFFFFFFF FFFC0215555555555563FD67EAC2F0734B5C00EAAAAAAAAAAA84017FFFFFFFFFFFFC02 00000000000013FD4B17E4B17E4AFC00EAAAAAAAAAAA84017FFFFFFFFFFFFC01D55555 55555573FD314DBF86A314BC00EAAAAAAAAAAA84017FFFFFFFFFFFFC01AAAAAAAAAAAA C3FD1A8C536FE1A8AC00EAAAAAAAAAAA84017FFFFFFFFFFFFC0180000000000013FD06 D3A06D3A06BC00EAAAAAAAAAAA84017FFFFFFFFFFFFC0155555555555563FCEC474CFD 585DBC00EAAAAAAAAAAA84017FFFFFFFFFFFFC012AAAAAAAAAAAB3FCD0F8CB4870426C 00EAAAAAAAAAAA84017FFFFFFFFFFFFC0100000000000003FCBBBBBBBBBBBB5C00EAAA AAAAAAAA84017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FCAC901E573AC89C00EAAAAAAAAA AA84017FFFFFFFFFFFFC0055555555555563FCA375F31AED6A2C00EAAAAAAAAAAA8401 7FFFFFFFFFFFFC0000000000000013FCA06D3A06D3A00C00EAAAAAAAAAAA84017FFFFF FFFFFFFBFF55555555555583FCA375F31AED6A3C00EAAAAAAAAAAA84017FFFFFFFFFFF FBFE555555555555B3FCAC901E573AC89C00EAAAAAAAAAAA84017FFFFFFFFFFFFBCC80 000000000003FCBBBBBBBBBBBB5C00EAAAAAAAAAAA84017FFFFFFFFFFFF3FE55555555 5554F3FCD0F8CB4870425C00EAAAAAAAAAAA84017FFFFFFFFFFFF3FF55555555555523 FCEC474CFD585DAC00EAAAAAAAAAAA84017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD06D3 A06D3A069C00EAAAAAAAAAAA84017FFFFFFFFFFFF40055555555555533FD1A8C536FE1 A88C00EAAAAAAAAAAA84017FFFFFFFFFFFF400AAAAAAAAAAAA83FD314DBF86A314AC00 EAAAAAAAAAAA84017FFFFFFFFFFFF400FFFFFFFFFFFFD3FD4B17E4B17E4ADC00EAAAAA AAAAAA84017FFFFFFFFFFFF4012AAAAAAAAAAA93FD67EAC2F0734B3C00EAAAAAAAAAAA 84017FFFFFFFFFFFF40155555555555543FD87C65A438215CC00EAAAAAAAAAAA84017F FFFFFFFFFFF4017FFFFFFFFFFFF3FDAAAAAAAAAAAA6C00EAAAAAAAAAAA84017FFFFFFF FFFFF401AAAAAAAAAAAAA3FDD097B425ED094C00EAAAAAAAAAAA84017FFFFFFFFFFFF4 01D5555555555553FDF98D76B549323C00EAAAAAAAAAAA84017FFFFFFFFFFFF4020000 0000000003FE12C5F92C5F92BC00EAAAAAAAAAAA84017FFFFFFFFFFFF4021555555555 5553FE2A49938827714C00EAAAAAAAAAAA84017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE 43518A6DFC34FC00EAAAAAAAAAAA84017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE5DDDDD DDDDDDCC00EAAAAAAAAAAA8401AAAAAAAAAAAAAC0240000000000003FDE38E38E38E38 CC00EAAAAAAAAAAA8401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FDC0A9E87C65A42C00EA AAAAAAAAAA8401AAAAAAAAAAAAAC0215555555555563FDA0CE512956D9AC00EAAAAAAA AAAA8401AAAAAAAAAAAAAC0200000000000013FD83FB72EA61D94C00EAAAAAAAAAAA84 01AAAAAAAAAAAAAC01D5555555555573FD6A314DBF86A30C00EAAAAAAAAAAA8401AAAA AAAAAAAAAC01AAAAAAAAAAAAC3FD536FE1A8C536EC00EAAAAAAAAAAA8401AAAAAAAAAA AAAC0180000000000013FD3FB72EA61D94FC00EAAAAAAAAAAA8401AAAAAAAAAAAAAC01 55555555555563FD2F0734B78FBD2C00EAAAAAAAAAAA8401AAAAAAAAAAAAAC012AAAAA AAAAAAB3FD215FF3DD1BAF7C00EAAAAAAAAAAA8401AAAAAAAAAAAAAC01000000000000 03FD16C16C16C16BFC00EAAAAAAAAAAA8401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FD0F 2B9D6480F29C00EAAAAAAAAAAA8401AAAAAAAAAAAAAC0055555555555563FD0A9E87C6 5A436C00EAAAAAAAAAAA8401AAAAAAAAAAAAAC0000000000000013FD091A2B3C4D5E5C 00EAAAAAAAAAAA8401AAAAAAAAAAAAABFF55555555555583FD0A9E87C65A436C00EAAA AAAAAAAA8401AAAAAAAAAAAAABFE555555555555B3FD0F2B9D6480F29C00EAAAAAAAAA AA8401AAAAAAAAAAAAABCC80000000000003FD16C16C16C16BFC00EAAAAAAAAAAA8401 AAAAAAAAAAAAA3FE555555555554F3FD215FF3DD1BAF7C00EAAAAAAAAAAA8401AAAAAA AAAAAAA3FF55555555555523FD2F0734B78FBD2C00EAAAAAAAAAAA8401AAAAAAAAAAAA A3FFFFFFFFFFFFFFC3FD3FB72EA61D94EC00EAAAAAAAAAAA8401AAAAAAAAAAAAA40055 555555555533FD536FE1A8C536DC00EAAAAAAAAAAA8401AAAAAAAAAAAAA400AAAAAAAA AAAA83FD6A314DBF86A2FC00EAAAAAAAAAAA8401AAAAAAAAAAAAA400FFFFFFFFFFFFD3 FD83FB72EA61D92C00EAAAAAAAAAAA8401AAAAAAAAAAAAA4012AAAAAAAAAAA93FDA0CE 512956D97C00EAAAAAAAAAAA8401AAAAAAAAAAAAA40155555555555543FDC0A9E87C65 A41C00EAAAAAAAAAAA8401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FDE38E38E38E38BC00 EAAAAAAAAAAA8401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FE04BDA12F684BCC00EAAAAA AAAAAA8401AAAAAAAAAAAAA401D5555555555553FE1938827716604C00EAAAAAAAAAAA 8401AAAAAAAAAAAAA40200000000000003FE2F37C048D159DC00EAAAAAAAAAAA8401AA AAAAAAAAAAA40215555555555553FE46BB5AA499387C00EAAAAAAAAAAA8401AAAAAAAA AAAAA4022AAAAAAAAAAAA3FE5FC3518A6DFC1C00EAAAAAAAAAAA8401AAAAAAAAAAAAA4 023FFFFFFFFFFFF3FE7A4FA4FA4FA4EC00EAAAAAAAAAAA8401D555555555555C024000 0000000003FE107F6E5D4C3B2C00EAAAAAAAAAAA8401D555555555555C022AAAAAAAAA AAB3FDFE1A8C536FE19C00EAAAAAAAAAAA8401D555555555555C0215555555555563FD DE3EF50061171C00EAAAAAAAAAAA8401D555555555555C0200000000000013FDC16C16 C16C16BC00EAAAAAAAAAAA8401D555555555555C01D5555555555573FDA7A1F19690E0 7C00EAAAAAAAAAAA8401D555555555555C01AAAAAAAAAAAAC3FD90E0857FCF745C00EA AAAAAAAAAA8401D555555555555C0180000000000013FD7D27D27D27D26C00EAAAAAAA AAAA8401D555555555555C0155555555555563FD6C77D88E99FA9C00EAAAAAAAAAAA84 01D555555555555C012AAAAAAAAAAAB3FD5ED097B425ECEC00EAAAAAAAAAAA8401D555 555555555C0100000000000003FD54320FEDCBA96C00EAAAAAAAAAAA8401D555555555 555C00AAAAAAAAAAAAB3FD4C9C413B8B300C00EAAAAAAAAAAA8401D555555555555C00 55555555555563FD480F2B9D6480DC00EAAAAAAAAAAA8401D555555555555C00000000 00000013FD468ACF13579BCC00EAAAAAAAAAAA8401D555555555555BFF555555555555 83FD480F2B9D6480DC00EAAAAAAAAAAA8401D555555555555BFE555555555555B3FD4C 9C413B8B300C00EAAAAAAAAAAA8401D555555555555BCC80000000000003FD54320FED CBA96C00EAAAAAAAAAAA8401D5555555555553FE555555555554F3FD5ED097B425ECEC 00EAAAAAAAAAAA8401D5555555555553FF55555555555523FD6C77D88E99FA9C00EAAA AAAAAAAA8401D5555555555553FFFFFFFFFFFFFFC3FD7D27D27D27D25C00EAAAAAAAAA AA8401D55555555555540055555555555533FD90E0857FCF744C00EAAAAAAAAAAA8401 D555555555555400AAAAAAAAAAAA83FDA7A1F19690E06C00EAAAAAAAAAAA8401D55555 5555555400FFFFFFFFFFFFD3FDC16C16C16C169C00EAAAAAAAAAAA8401D55555555555 54012AAAAAAAAAAA93FDDE3EF5006116EC00EAAAAAAAAAAA8401D55555555555540155 555555555543FDFE1A8C536FE18C00EAAAAAAAAAAA8401D5555555555554017FFFFFFF FFFFF3FE107F6E5D4C3B1C00EAAAAAAAAAAA8401D555555555555401AAAAAAAAAAAAA3 FE2375F31AED6A8C00EAAAAAAAAAAA8401D555555555555401D5555555555553FE37F0 D4629B7F0C00EAAAAAAAAAAA8401D55555555555540200000000000003FE4DF0123456 789C00EAAAAAAAAAAA8401D55555555555540215555555555553FE6573AC901E572C00 EAAAAAAAAAAA8401D5555555555554022AAAAAAAAAAAA3FE7E7BA375F31ADC00EAAAAA AAAAAA8401D5555555555554023FFFFFFFFFFFF3FE9907F6E5D4C39C00EAAAAAAAAAAA 84020000000000000C0240000000000003FE317E4B17E4B17C00EAAAAAAAAAAA840200 00000000000C022AAAAAAAAAAAB3FE200C22E450672C00EAAAAAAAAAAA840200000000 00000C0215555555555563FE101E573AC901EC00EAAAAAAAAAAA84020000000000000C 0200000000000013FE01B4E81B4E81BC00EAAAAAAAAAAA84020000000000000C01D555 5555555573FDE99FAB0BC1CD2C00EAAAAAAAAAAA84020000000000000C01AAAAAAAAAA AAC3FDD2DE3EF500610C00EAAAAAAAAAAA84020000000000000C0180000000000013FD BF258BF258BF1C00EAAAAAAAAAAA84020000000000000C0155555555555563FDAE7592 03CAE74C00EAAAAAAAAAAA84020000000000000C012AAAAAAAAAAAB3FDA0CE512956D9 9C00EAAAAAAAAAAA84020000000000000C0100000000000003FD962FC962FC961C00EA AAAAAAAAAA84020000000000000C00AAAAAAAAAAAAB3FD8E99FAB0BC1CBC00EAAAAAAA AAAA84020000000000000C0055555555555563FD8A0CE512956D8C00EAAAAAAAAAAA84 020000000000000C0000000000000013FD8888888888887C00EAAAAAAAAAAA84020000 000000000BFF55555555555583FD8A0CE512956D8C00EAAAAAAAAAAA84020000000000 000BFE555555555555B3FD8E99FAB0BC1CBC00EAAAAAAAAAAA84020000000000000BCC 80000000000003FD962FC962FC961C00EAAAAAAAAAAA840200000000000003FE555555 555554F3FDA0CE512956D99C00EAAAAAAAAAAA840200000000000003FF555555555555 23FDAE759203CAE74C00EAAAAAAAAAAA840200000000000003FFFFFFFFFFFFFFC3FDBF 258BF258BF0C00EAAAAAAAAAAA8402000000000000040055555555555533FDD2DE3EF5 0060FC00EAAAAAAAAAAA84020000000000000400AAAAAAAAAAAA83FDE99FAB0BC1CD1C 00EAAAAAAAAAAA84020000000000000400FFFFFFFFFFFFD3FE01B4E81B4E81AC00EAAA AAAAAAAA840200000000000004012AAAAAAAAAAA93FE101E573AC901DC00EAAAAAAAAA AA8402000000000000040155555555555543FE200C22E450671C00EAAAAAAAAAAA8402 00000000000004017FFFFFFFFFFFF3FE317E4B17E4B17C00EAAAAAAAAAAA8402000000 0000000401AAAAAAAAAAAAA3FE4474CFD585E0DC00EAAAAAAAAAAA8402000000000000 0401D5555555555553FE58EFB11D33F55C00EAAAAAAAAAAA8402000000000000040200 000000000003FE6EEEEEEEEEEEEC00EAAAAAAAAAAA8402000000000000040215555555 555553FE8672894AB6CD8C00EAAAAAAAAAAA840200000000000004022AAAAAAAAAAAA3 FE9F7A80308B912C00EAAAAAAAAAAA840200000000000004023FFFFFFFFFFFF3FEBA06 D3A06D39FC00EAAAAAAAAAAA84021555555555555C0240000000000003FE54C3B2A190 7F5C00EAAAAAAAAAAA84021555555555555C022AAAAAAAAAAAB3FE43518A6DFC351C00 EAAAAAAAAAAA84021555555555555C0215555555555563FE3363BEC474CFCC00EAAAAA AAAAAA84021555555555555C0200000000000013FE24FA4FA4FA4FAC00EAAAAAAAAAAA 84021555555555555C01D5555555555573FE18153D0F8CB48C00EAAAAAAAAAAA840215 55555555555C01AAAAAAAAAAAAC3FE0CB487042BFE7C00EAAAAAAAAAAA840215555555 55555C0180000000000013FE02D82D82D82D7C00EAAAAAAAAAAA84021555555555555C 0155555555555563FDF500611722831C00EAAAAAAAAAAA84021555555555555C012AAA AAAAAAAAB3FDE759203CAE756C00EAAAAAAAAAAA84021555555555555C010000000000 0003FDDCBA98765431EC00EAAAAAAAAAAA84021555555555555C00AAAAAAAAAAAAB3FD D524C9C413B88C00EAAAAAAAAAAA84021555555555555C0055555555555563FDD097B4 25ED095C00EAAAAAAAAAAA84021555555555555C0000000000000013FDCF13579BE024 4C00EAAAAAAAAAAA84021555555555555BFF55555555555583FDD097B425ED095C00EA AAAAAAAAAA84021555555555555BFE555555555555B3FDD524C9C413B88C00EAAAAAAA AAAA84021555555555555BCC80000000000003FDDCBA98765431EC00EAAAAAAAAAAA84 0215555555555553FE555555555554F3FDE759203CAE756C00EAAAAAAAAAAA84021555 5555555553FF55555555555523FDF500611722831C00EAAAAAAAAAAA84021555555555 5553FFFFFFFFFFFFFFC3FE02D82D82D82D7C00EAAAAAAAAAAA84021555555555555400 55555555555533FE0CB487042BFE6C00EAAAAAAAAAAA84021555555555555400AAAAAA AAAAAA83FE18153D0F8CB46C00EAAAAAAAAAAA84021555555555555400FFFFFFFFFFFF D3FE24FA4FA4FA4F9C00EAAAAAAAAAAA840215555555555554012AAAAAAAAAAA93FE33 63BEC474CFBC00EAAAAAAAAAAA8402155555555555540155555555555543FE43518A6D FC350C00EAAAAAAAAAAA840215555555555554017FFFFFFFFFFFF3FE54C3B2A1907F5C 00EAAAAAAAAAAA84021555555555555401AAAAAAAAAAAAA3FE67BA375F31AECC00EAAA AAAAAAAA84021555555555555401D5555555555553FE7C3518A6DFC33C00EAAAAAAAAA AA8402155555555555540200000000000003FE923456789ABCDC00EAAAAAAAAAAA8402 155555555555540215555555555553FEA9B7F0D4629B6C00EAAAAAAAAAAA8402155555 55555554022AAAAAAAAAAAA3FEC2BFE7BA375F1C00EAAAAAAAAAAA8402155555555555 54023FFFFFFFFFFFF3FEDD4C3B2A1907DC00EAAAAAAAAAAA84022AAAAAAAAAAAAC0240 000000000003FE7A4FA4FA4FA4DC00EAAAAAAAAAAA84022AAAAAAAAAAAAC022AAAAAAA AAAAB3FE68DD7CC6BB5A9C00EAAAAAAAAAAA84022AAAAAAAAAAAAC0215555555555563 FE58EFB11D33F54C00EAAAAAAAAAAA84022AAAAAAAAAAAAC0200000000000013FE4A86 41FDB9752C00EAAAAAAAAAAA84022AAAAAAAAAAAAC01D5555555555573FE3DA12F684B DA0C00EAAAAAAAAAAA84022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE3240795CEB23FC00 EAAAAAAAAAAA84022AAAAAAAAAAAAC0180000000000013FE28641FDB9752FC00EAAAAA AAAAAA84022AAAAAAAAAAAAC0155555555555563FE200C22E450670C00EAAAAAAAAAAA 84022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE1938827716603C00EAAAAAAAAAAA84022A AAAAAAAAAAAC0100000000000003FE13E93E93E93E7C00EAAAAAAAAAAA84022AAAAAAA AAAAAC00AAAAAAAAAAAAB3FE101E573AC901CC00EAAAAAAAAAAA84022AAAAAAAAAAAAC 0055555555555563FE0DD7CC6BB5AA2C00EAAAAAAAAAAA84022AAAAAAAAAAAAC000000 0000000013FE0D159E26AF379C00EAAAAAAAAAAA84022AAAAAAAAAAAABFF5555555555 5583FE0DD7CC6BB5AA2C00EAAAAAAAAAAA84022AAAAAAAAAAAABFE555555555555B3FE 101E573AC901CC00EAAAAAAAAAAA84022AAAAAAAAAAAABCC80000000000003FE13E93E 93E93E7C00EAAAAAAAAAAA84022AAAAAAAAAAAA3FE555555555554F3FE193882771660 3C00EAAAAAAAAAAA84022AAAAAAAAAAAA3FF55555555555523FE200C22E450670C00EA AAAAAAAAAA84022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE28641FDB9752EC00EAAAAAAA AAAA84022AAAAAAAAAAAA40055555555555533FE3240795CEB23EC00EAAAAAAAAAAA84 022AAAAAAAAAAAA400AAAAAAAAAAAA83FE3DA12F684BD9EC00EAAAAAAAAAAA84022AAA AAAAAAAAA400FFFFFFFFFFFFD3FE4A8641FDB9751C00EAAAAAAAAAAA84022AAAAAAAAA AAA4012AAAAAAAAAAA93FE58EFB11D33F53C00EAAAAAAAAAAA84022AAAAAAAAAAAA401 55555555555543FE68DD7CC6BB5A8C00EAAAAAAAAAAA84022AAAAAAAAAAAA4017FFFFF FFFFFFF3FE7A4FA4FA4FA4DC00EAAAAAAAAAAA84022AAAAAAAAAAAA401AAAAAAAAAAAA A3FE8D4629B7F0D44C00EAAAAAAAAAAA84022AAAAAAAAAAAA401D5555555555553FEA1 C10AFF9EE8BC00EAAAAAAAAAAA84022AAAAAAAAAAAA40200000000000003FEB7C048D1 59E25C00EAAAAAAAAAAA84022AAAAAAAAAAAA40215555555555553FECF43E32D21C0EC 00EAAAAAAAAAAA84022AAAAAAAAAAAA4022AAAAAAAAAAAA3FEE84BDA12F6849C00EAAA AAAAAAAA84022AAAAAAAAAAAA4023FFFFFFFFFFFF3FF016C16C16C16BC00EAAAAAAAAA AA84023FFFFFFFFFFFFC0240000000000003FEA22222222221FC00EAAAAAAAAAAA8402 3FFFFFFFFFFFFC022AAAAAAAAAAAB3FE90AFF9EE8DD7BC00EAAAAAAAAAAA84023FFFFF FFFFFFFC0215555555555563FE80C22E4506726C00EAAAAAAAAAAA84023FFFFFFFFFFF FC0200000000000013FE7258BF258BF24C00EAAAAAAAAAAA84023FFFFFFFFFFFFC01D5 555555555573FE6573AC901E571C00EAAAAAAAAAAA84023FFFFFFFFFFFFC01AAAAAAAA AAAAC3FE5A12F684BDA11C00EAAAAAAAAAAA84023FFFFFFFFFFFFC0180000000000013 FE50369D0369D01C00EAAAAAAAAAAA84023FFFFFFFFFFFFC0155555555555563FE47DE A00C22E42C00EAAAAAAAAAAA84023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE410AFF9EE8 DD6C00EAAAAAAAAAAA84023FFFFFFFFFFFFC0100000000000003FE3BBBBBBBBBBB9C00 EAAAAAAAAAAA84023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE37F0D4629B7EFC00EAAAAA AAAAAA84023FFFFFFFFFFFFC0055555555555563FE35AA499388274C00EAAAAAAAAAAA 84023FFFFFFFFFFFFC0000000000000013FE34E81B4E81B4BC00EAAAAAAAAAAA84023F FFFFFFFFFFFBFF55555555555583FE35AA499388274C00EAAAAAAAAAAA84023FFFFFFF FFFFFBFE555555555555B3FE37F0D4629B7EEC00EAAAAAAAAAAA84023FFFFFFFFFFFFB CC80000000000003FE3BBBBBBBBBBB9C00EAAAAAAAAAAA84023FFFFFFFFFFFF3FE5555 55555554F3FE410AFF9EE8DD5C00EAAAAAAAAAAA84023FFFFFFFFFFFF3FF5555555555 5523FE47DEA00C22E42C00EAAAAAAAAAAA84023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE 50369D0369D00C00EAAAAAAAAAAA84023FFFFFFFFFFFF40055555555555533FE5A12F6 84BDA10C00EAAAAAAAAAAA84023FFFFFFFFFFFF400AAAAAAAAAAAA83FE6573AC901E57 0C00EAAAAAAAAAAA84023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE7258BF258BF23C00EA AAAAAAAAAA84023FFFFFFFFFFFF4012AAAAAAAAAAA93FE80C22E4506725C00EAAAAAAA AAAA84023FFFFFFFFFFFF40155555555555543FE90AFF9EE8DD7AC00EAAAAAAAAAAA84 023FFFFFFFFFFFF4017FFFFFFFFFFFF3FEA22222222221FC00EAAAAAAAAAAA84023FFF FFFFFFFFF401AAAAAAAAAAAAA3FEB518A6DFC3516C00EAAAAAAAAAAA84023FFFFFFFFF FFF401D5555555555553FEC99388277165DC00EAAAAAAAAAAA84023FFFFFFFFFFFF402 00000000000003FEDF92C5F92C5F7C00EAAAAAAAAAAA84023FFFFFFFFFFFF402155555 55555553FEF7166054F43E0C00EAAAAAAAAAAA84023FFFFFFFFFFFF4022AAAAAAAAAAA A3FF080F2B9D6480EC00EAAAAAAAAAAA84023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF15 55555555554C00D555555555553C024000000000000C0240000000000003FD99999999 99998C00D555555555553C024000000000000C022AAAAAAAAAAAB3FD76B549327104EC 00D555555555553C024000000000000C0215555555555563FD56D9B1DF623A6C00D555 555555553C024000000000000C0200000000000013FD3A06D3A06D3A0C00D555555555 553C024000000000000C01D5555555555573FD203CAE759203CC00D555555555553C02 4000000000000C01AAAAAAAAAAAAC3FD097B425ED097AC00D555555555553C02400000 0000000C0180000000000013FCEB851EB851EB6C00D555555555553C02400000000000 0C0155555555555563FCCA252ADB363BCC00D555555555553C024000000000000C012A AAAAAAAAAAB3FCAED6A9264E207C00D555555555553C024000000000000C0100000000 000003FC9999999999996C00D555555555553C024000000000000C00AAAAAAAAAAAAB3 FC8A6DFC3518A6AC00D555555555553C024000000000000C0055555555555563FC8153 D0F8CB483C00D555555555553C024000000000000C0000000000000013FC7E4B17E4B1 7E1C00D555555555553C024000000000000BFF55555555555583FC8153D0F8CB484C00 D555555555553C024000000000000BFE555555555555B3FC8A6DFC3518A6AC00D55555 5555553C024000000000000BCC80000000000003FC9999999999996C00D55555555555 3C0240000000000003FE555555555554F3FCAED6A9264E206C00D555555555553C0240 000000000003FF55555555555523FCCA252ADB363BBC00D555555555553C0240000000 000003FFFFFFFFFFFFFFC3FCEB851EB851EB4C00D555555555553C0240000000000004 0055555555555533FD097B425ED0979C00D555555555553C024000000000000400AAAA AAAAAAAA83FD203CAE759203AC00D555555555553C024000000000000400FFFFFFFFFF FFD3FD3A06D3A06D39EC00D555555555553C0240000000000004012AAAAAAAAAAA93FD 56D9B1DF623A3C00D555555555553C02400000000000040155555555555543FD76B549 327104DC00D555555555553C0240000000000004017FFFFFFFFFFFF3FD999999999999 7C00D555555555553C024000000000000401AAAAAAAAAAAAA3FDBF86A314DBF85C00D5 55555555553C024000000000000401D5555555555553FDE87C65A438214C00D5555555 55553C02400000000000040200000000000003FE0A3D70A3D70A3C00D555555555553C 02400000000000040215555555555553FE21C10AFF9EE8DC00D555555555553C024000 0000000004022AAAAAAAAAAAA3FE3AC901E573AC7C00D555555555553C024000000000 0004023FFFFFFFFFFFF3FE5555555555554C00D555555555553C022AAAAAAAAAAABC02 40000000000003FD654320FEDCBA9C00D555555555553C022AAAAAAAAAAABC022AAAAA AAAAAAB3FD425ED097B425FC00D555555555553C022AAAAAAAAAAABC02155555555555 63FD22833944A55B7C00D555555555553C022AAAAAAAAAAABC0200000000000013FD05 B05B05B05B1C00D555555555553C022AAAAAAAAAAABC01D5555555555573FCD7CC6BB5 AA49AC00D555555555553C022AAAAAAAAAAABC01AAAAAAAAAAAAC3FCAA49938827716C 00D555555555553C022AAAAAAAAAAABC0180000000000013FC82D82D82D82D8C00D555 555555553C022AAAAAAAAAAABC0155555555555563FC617839A5BC7DEC00D555555555 553C022AAAAAAAAAAABC012AAAAAAAAAAAB3FC4629B7F0D4629C00D555555555553C02 2AAAAAAAAAAABC0100000000000003FC30ECA8641FDB8C00D555555555553C022AAAAA AAAAAABC00AAAAAAAAAAAAB3FC21C10AFF9EE8CC00D555555555553C022AAAAAAAAAAA BC0055555555555563FC18A6DFC3518A5C00D555555555553C022AAAAAAAAAAABC0000 000000000013FC159E26AF37C03C00D555555555553C022AAAAAAAAAAABBFF55555555 555583FC18A6DFC3518A6C00D555555555553C022AAAAAAAAAAABBFE555555555555B3 FC21C10AFF9EE8CC00D555555555553C022AAAAAAAAAAABBCC80000000000003FC30EC A8641FDB8C00D555555555553C022AAAAAAAAAAAB3FE555555555554F3FC4629B7F0D4 628C00D555555555553C022AAAAAAAAAAAB3FF55555555555523FC617839A5BC7DDC00 D555555555553C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FC82D82D82D82D6C00D55555 5555553C022AAAAAAAAAAAB40055555555555533FCAA49938827714C00D55555555555 3C022AAAAAAAAAAAB400AAAAAAAAAAAA83FCD7CC6BB5AA496C00D555555555553C022A AAAAAAAAAAB400FFFFFFFFFFFFD3FD05B05B05B05AFC00D555555555553C022AAAAAAA AAAAB4012AAAAAAAAAAA93FD22833944A55B5C00D555555555553C022AAAAAAAAAAAB4 0155555555555543FD425ED097B425DC00D555555555553C022AAAAAAAAAAAB4017FFF FFFFFFFFF3FD654320FEDCBA8C00D555555555553C022AAAAAAAAAAAB401AAAAAAAAAA AAA3FD8B302A7A1F195C00D555555555553C022AAAAAAAAAAAB401D5555555555553FD B425ED097B425C00D555555555553C022AAAAAAAAAAAB40200000000000003FDE02468 ACF1358C00D555555555553C022AAAAAAAAAAAB40215555555555553FE0795CEB24079 5C00D555555555553C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE209DC598153D0C00D5 55555555553C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE3B2A1907F6E5CC00D5555555 55553C021555555555556C0240000000000003FD3579BE02468ADC00D555555555553C 021555555555556C022AAAAAAAAAAAB3FD12956D9B1DF63C00D555555555553C021555 555555556C0215555555555563FCE573AC901E576C00D555555555553C021555555555 556C0200000000000013FCABCDF0123456BC00D555555555553C021555555555556C01 D5555555555573FC7839A5BC7DEA2C00D555555555553C021555555555556C01AAAAAA AAAAAAC3FC4AB6CD8EFB11FC00D555555555553C021555555555556C01800000000000 13FC23456789ABCE1C00D555555555553C021555555555556C0155555555555563FC01 E573AC901E6C00D555555555553C021555555555556C012AAAAAAAAAAAB3FBCD2DE3EF 50063C00D555555555553C021555555555556C0100000000000003FBA2B3C4D5E6F81C 00D555555555553C021555555555556C00AAAAAAAAAAAAB3FB845C8A0CE512AC00D555 555555553C021555555555556C0055555555555563FB722833944A55CC00D555555555 553C021555555555556C0000000000000013FB6C16C16C16C17C00D555555555553C02 1555555555556BFF55555555555583FB722833944A55CC00D555555555553C02155555 5555556BFE555555555555B3FB845C8A0CE5129C00D555555555553C02155555555555 6BCC80000000000003FBA2B3C4D5E6F80C00D555555555553C0215555555555563FE55 5555555554F3FBCD2DE3EF50060C00D555555555553C0215555555555563FF55555555 555523FC01E573AC901E5C00D555555555553C0215555555555563FFFFFFFFFFFFFFC3 FC23456789ABCDFC00D555555555553C02155555555555640055555555555533FC4AB6 CD8EFB11DC00D555555555553C021555555555556400AAAAAAAAAAAA83FC7839A5BC7D E9FC00D555555555553C021555555555556400FFFFFFFFFFFFD3FCABCDF01234566C00 D555555555553C0215555555555564012AAAAAAAAAAA93FCE573AC901E571C00D55555 5555553C02155555555555640155555555555543FD12956D9B1DF62C00D55555555555 3C0215555555555564017FFFFFFFFFFFF3FD3579BE02468ACC00D555555555553C0215 55555555556401AAAAAAAAAAAAA3FD5B66C77D88E9AC00D555555555553C0215555555 55556401D5555555555553FD845C8A0CE5129C00D555555555553C0215555555555564 0200000000000003FDB05B05B05B05CC00D555555555553C0215555555555564021555 5555555553FDDF623A67EAC2FC00D555555555553C0215555555555564022AAAAAAAAA AAA3FE08B91419CA252C00D555555555553C0215555555555564023FFFFFFFFFFFF3FE 23456789ABCDEC00D555555555553C020000000000001C0240000000000003FD0A3D70 A3D70A4C00D555555555553C020000000000001C022AAAAAAAAAAAB3FCCEB240795CEB 6C00D555555555553C020000000000001C0215555555555563FC8EFB11D33F564C00D5 55555555553C020000000000001C0200000000000013FC5555555555559C00D5555555 55553C020000000000001C01D5555555555573FC21C10AFF9EE91C00D555555555553C 020000000000001C01AAAAAAAAAAAAC3FBE87C65A43821AC00D555555555553C020000 000000001C0180000000000013FB999999999999EC00D555555555553C020000000000 001C0155555555555563FB56D9B1DF623A9C00D555555555553C020000000000001C01 2AAAAAAAAAAAB3FB203CAE759203FC00D555555555553C020000000000001C01000000 00000003FAEB851EB851EBCC00D555555555553C020000000000001C00AAAAAAAAAAAA B3FAAED6A9264E20EC00D555555555553C020000000000001C0055555555555563FA8A 6DFC3518A72C00D555555555553C020000000000001C0000000000000013FA7E4B17E4 B17E9C00D555555555553C020000000000001BFF55555555555583FA8A6DFC3518A71C 00D555555555553C020000000000001BFE555555555555B3FAAED6A9264E20DC00D555 555555553C020000000000001BCC80000000000003FAEB851EB851EBBC00D555555555 553C0200000000000013FE555555555554F3FB203CAE759203DC00D555555555553C02 00000000000013FF55555555555523FB56D9B1DF623A7C00D555555555553C02000000 00000013FFFFFFFFFFFFFFC3FB999999999999AC00D555555555553C02000000000000 140055555555555533FBE87C65A438216C00D555555555553C020000000000001400AA AAAAAAAAAA83FC21C10AFF9EE8DC00D555555555553C020000000000001400FFFFFFFF FFFFD3FC5555555555554C00D555555555553C0200000000000014012AAAAAAAAAAA93 FC8EFB11D33F560C00D555555555553C02000000000000140155555555555543FCCEB2 40795CEB1C00D555555555553C0200000000000014017FFFFFFFFFFFF3FD0A3D70A3D7 0A3C00D555555555553C020000000000001401AAAAAAAAAAAAA3FD302A7A1F19691C00 D555555555553C020000000000001401D5555555555553FD59203CAE75920C00D55555 5555553C02000000000000140200000000000003FD851EB851EB852C00D55555555555 3C02000000000000140215555555555553FDB425ED097B426C00D555555555553C0200 000000000014022AAAAAAAAAAAA3FDE635DAD524C9BC00D555555555553C0200000000 000014023FFFFFFFFFFFF3FE0DA740DA740DAC00D555555555553C01D555555555557C 0240000000000003FCC71C71C71C71DC00D555555555553C01D555555555557C022AAA AAAAAAAAB3FC8153D0F8CB489C00D555555555553C01D555555555557C021555555555 5563FC419CA252ADB38C00D555555555553C01D555555555557C0200000000000013FC 07F6E5D4C3B2DC00D555555555553C01D555555555557C01D5555555555573FBA8C536 FE1A8C9C00D555555555553C01D555555555557C01AAAAAAAAAAAAC3FB4DBF86A314DC 1C00D555555555553C01D555555555557C0180000000000013FAFDB97530ECA8CC00D5 55555555553C01D555555555557C0155555555555563FA7839A5BC7DEA1C00D5555555 55553C01D555555555557C012AAAAAAAAAAAB3FA0AFF9EE8DD7CEC00D555555555553C 01D555555555557C0100000000000003F96C16C16C16C16C00D555555555553C01D555 555555557C00AAAAAAAAAAAAB3F8E573AC901E573C00D555555555553C01D555555555 557C0055555555555563F853D0F8CB48702C00D555555555553C01D555555555557C00 00000000000013F823456789ABCDDC00D555555555553C01D555555555557BFF555555 55555583F853D0F8CB48701C00D555555555553C01D555555555557BFE555555555555 B3F8E573AC901E56FC00D555555555553C01D555555555557BCC80000000000003F96C 16C16C16C13C00D555555555553C01D5555555555573FE555555555554F3FA0AFF9EE8 DD7CAC00D555555555553C01D5555555555573FF55555555555523FA7839A5BC7DE9DC 00D555555555553C01D5555555555573FFFFFFFFFFFFFFC3FAFDB97530ECA83C00D555 555555553C01D55555555555740055555555555533FB4DBF86A314DBDC00D555555555 553C01D555555555557400AAAAAAAAAAAA83FBA8C536FE1A8C3C00D555555555553C01 D555555555557400FFFFFFFFFFFFD3FC07F6E5D4C3B28C00D555555555553C01D55555 55555574012AAAAAAAAAAA93FC419CA252ADB34C00D555555555553C01D55555555555 740155555555555543FC8153D0F8CB485C00D555555555553C01D5555555555574017F FFFFFFFFFFF3FCC71C71C71C71BC00D555555555553C01D555555555557401AAAAAAAA AAAAA3FD097B425ED097BC00D555555555553C01D555555555557401D5555555555553 FD327104EE2CC0AC00D555555555553C01D55555555555740200000000000003FD5E6F 8091A2B3CC00D555555555553C01D55555555555740215555555555553FD8D76B54932 710C00D555555555553C01D5555555555574022AAAAAAAAAAAA3FDBF86A314DBF85C00 D555555555553C01D5555555555574023FFFFFFFFFFFF3FDF49F49F49F49EC00D55555 5555553C01AAAAAAAAAAAACC0240000000000003FC82D82D82D82D7C00D55555555555 3C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FC3D0F8CB487043C00D555555555553C01AA AAAAAAAAAACC0215555555555563FBFAB0BC1CD2DE4C00D555555555553C01AAAAAAAA AAAACC0200000000000013FB87654320FEDCEC00D555555555553C01AAAAAAAAAAAACC 01D5555555555573FB203CAE759203DC00D555555555553C01AAAAAAAAAAAACC01AAAA AAAAAAAAC3FA8A6DFC3518A6BC00D555555555553C01AAAAAAAAAAAACC018000000000 0013F9D950C83FB72E9C00D555555555553C01AAAAAAAAAAAACC0155555555555563F8 9CA252ADB3629C00D555555555553C01AAAAAAAAAAAACC012AAAAAAAAAAABBF4845C8A 0CE527CC00D555555555553C01AAAAAAAAAAAACC010000000000000BF86C16C16C16C3 4C00D555555555553C01AAAAAAAAAAAACC00AAAAAAAAAAAABBF92F684BDA12F75C00D5 55555555553C01AAAAAAAAAAAACC005555555555556BF97839A5BC7DEADC00D5555555 55553C01AAAAAAAAAAAACC000000000000001BF9907F6E5D4C3C1C00D555555555553C 01AAAAAAAAAAAACBFF5555555555558BF97839A5BC7DEAFC00D555555555553C01AAAA AAAAAAAACBFE555555555555BBF92F684BDA12F78C00D555555555553C01AAAAAAAAAA AACBCC8000000000000BF86C16C16C16C37C00D555555555553C01AAAAAAAAAAAAC3FE 555555555554FBF4845C8A0CE5349C00D555555555553C01AAAAAAAAAAAAC3FF555555 55555523F89CA252ADB3618C00D555555555553C01AAAAAAAAAAAAC3FFFFFFFFFFFFFF C3F9D950C83FB72D7C00D555555555553C01AAAAAAAAAAAAC40055555555555533FA8A 6DFC3518A63C00D555555555553C01AAAAAAAAAAAAC400AAAAAAAAAAAA83FB203CAE75 92037C00D555555555553C01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FB87654320FEDC5C 00D555555555553C01AAAAAAAAAAAAC4012AAAAAAAAAAA93FBFAB0BC1CD2DDCC00D555 555555553C01AAAAAAAAAAAAC40155555555555543FC3D0F8CB48703FC00D555555555 553C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FC82D82D82D82D5C00D555555555553C01 AAAAAAAAAAAAC401AAAAAAAAAAAAA3FCCEB240795CEB0C00D555555555553C01AAAAAA AAAAAAC401D5555555555553FD104EE2CC0A9E8C00D555555555553C01AAAAAAAAAAAA C40200000000000003FD3C4D5E6F8091AC00D555555555553C01AAAAAAAAAAAAC40215 555555555553FD6B549327104EDC00D555555555553C01AAAAAAAAAAAAC4022AAAAAAA AAAAA3FD9D6480F2B9D62C00D555555555553C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3 FDD27D27D27D27BC00D555555555553C018000000000001C0240000000000003FC47AE 147AE147AC00D555555555553C018000000000001C022AAAAAAAAAAAB3FC01E573AC90 1E6C00D555555555553C018000000000001C0215555555555563FB845C8A0CE512AC00 D555555555553C018000000000001C0200000000000013FB1111111111115C00D55555 5555553C018000000000001C01D5555555555573FA53D0F8CB48709C00D55555555555 3C018000000000001C01AAAAAAAAAAAAC3F93B8B302A7A1F1C00D555555555553C0180 00000000001C0180000000000013C52780000000000C00D555555555553C0180000000 00001C015555555555556BF90AFF9EE8DD7D4C00D555555555553C018000000000001C 012AAAAAAAAAAABBF9E573AC901E57CC00D555555555553C018000000000001C010000 000000000BFA47AE147AE1481C00D555555555553C018000000000001C00AAAAAAAAAA AABBFA845C8A0CE512FC00D555555555553C018000000000001C005555555555556BFA A8C536FE1A8CAC00D555555555553C018000000000001C000000000000001BFAB4E81B 4E81B53C00D555555555553C018000000000001BFF5555555555558BFAA8C536FE1A8C BC00D555555555553C018000000000001BFE555555555555BBFA845C8A0CE512FC00D5 55555555553C018000000000001BCC8000000000000BFA47AE147AE1481C00D5555555 55553C0180000000000013FE555555555554FBF9E573AC901E581C00D555555555553C 0180000000000013FF5555555555552BF90AFF9EE8DD7DBC00D555555555553C018000 0000000013FFFFFFFFFFFFFFCBC9069D000000000C00D555555555553C018000000000 00140055555555555533F93B8B302A7A1DFC00D555555555553C018000000000001400 AAAAAAAAAAAA83FA53D0F8CB486FAC00D555555555553C018000000000001400FFFFFF FFFFFFD3FB111111111110BC00D555555555553C0180000000000014012AAAAAAAAAAA 93FB845C8A0CE5123C00D555555555553C01800000000000140155555555555543FC01 E573AC901E3C00D555555555553C0180000000000014017FFFFFFFFFFFF3FC47AE147A E1478C00D555555555553C018000000000001401AAAAAAAAAAAAA3FC9388277166053C 00D555555555553C018000000000001401D5555555555553FCE573AC901E572C00D555 555555553C01800000000000140200000000000003FD1EB851EB851EBC00D555555555 553C01800000000000140215555555555553FD4DBF86A314DBEC00D555555555553C01 80000000000014022AAAAAAAAAAAA3FD7FCF746EBE634C00D555555555553C01800000 00000014023FFFFFFFFFFFF3FDB4E81B4E81B4CC00D555555555553C01555555555555 6C0240000000000003FC159E26AF37C02C00D555555555553C015555555555556C022A AAAAAAAAAAB3FB9FAB0BC1CD2DCC00D555555555553C015555555555556C0215555555 555563FB203CAE759203AC00D555555555553C015555555555556C0200000000000013 FA59E26AF37C04AC00D555555555553C015555555555556C01D5555555555573F91722 833944A51C00D555555555553C015555555555556C01AAAAAAAAAAAACBF753D0F8CB48 73BC00D555555555553C015555555555556C018000000000001BF9907F6E5D4C3BFC00 D555555555553C015555555555556C015555555555556BFA4DBF86A314DCAC00D55555 5555553C015555555555556C012AAAAAAAAAAABBFABAF98D76B549EC00D55555555555 3C015555555555556C010000000000000BFB07F6E5D4C3B30C00D555555555553C0155 55555555556C00AAAAAAAAAAAABBFB264E209DC5987C00D555555555553C0155555555 55556C005555555555556BFB3882771660555C00D555555555553C015555555555556C 000000000000001BFB3E93E93E93E9AC00D555555555553C015555555555556BFF5555 555555558BFB3882771660555C00D555555555553C015555555555556BFE5555555555 55BBFB264E209DC5988C00D555555555553C015555555555556BCC8000000000000BFB 07F6E5D4C3B31C00D555555555553C0155555555555563FE555555555554FBFABAF98D 76B54A1C00D555555555553C0155555555555563FF5555555555552BFA4DBF86A314DC EC00D555555555553C0155555555555563FFFFFFFFFFFFFFCBF9907F6E5D4C3D0C00D5 55555555553C0155555555555564005555555555553BF753D0F8CB48783C00D5555555 55553C015555555555556400AAAAAAAAAAAA83F91722833944A34C00D555555555553C 015555555555556400FFFFFFFFFFFFD3FA59E26AF37C036C00D555555555553C015555 5555555564012AAAAAAAAAAA93FB203CAE7592033C00D555555555553C015555555555 55640155555555555543FB9FAB0BC1CD2D5C00D555555555553C015555555555556401 7FFFFFFFFFFFF3FC159E26AF37C00C00D555555555553C015555555555556401AAAAAA AAAAAAA3FC617839A5BC7DBC00D555555555553C015555555555556401D55555555555 53FCB363BEC474CFAC00D555555555553C01555555555555640200000000000003FD05 B05B05B05AFC00D555555555553C01555555555555640215555555555553FD34B78FBD 40183C00D555555555553C0155555555555564022AAAAAAAAAAAA3FD66C77D88E99F8C 00D555555555553C0155555555555564023FFFFFFFFFFFF3FD9BE02468ACF10C00D555 555555553C012AAAAAAAAAAABC0240000000000003FBD950C83FB72E5C00D555555555 553C012AAAAAAAAAAABC022AAAAAAAAAAAB3FB4DBF86A314DBEC00D555555555553C01 2AAAAAAAAAAABC0215555555555563FA9CA252ADB3635C00D555555555553C012AAAAA AAAAAABC0200000000000013F96C16C16C16C13C00D555555555553C012AAAAAAAAAAA BC01D555555555557BF6845C8A0CE5177C00D555555555553C012AAAAAAAAAAABC01AA AAAAAAAAAACBF99CA252ADB364FC00D555555555553C012AAAAAAAAAAABC0180000000 00001BFA6C16C16C16C1FC00D555555555553C012AAAAAAAAAAABC015555555555556B FAF19690E085806C00D555555555553C012AAAAAAAAAAABC012AAAAAAAAAAABBFB2F68 4BDA12F6DC00D555555555553C012AAAAAAAAAAABC010000000000000BFB59E26AF37C 04EC00D555555555553C012AAAAAAAAAAABC00AAAAAAAAAAAABBFB7839A5BC7DEA5C00 D555555555553C012AAAAAAAAAAABC005555555555556BFB8A6DFC3518A74C00D55555 5555553C012AAAAAAAAAAABC000000000000001BFB907F6E5D4C3B9C00D55555555555 3C012AAAAAAAAAAABBFF5555555555558BFB8A6DFC3518A74C00D555555555553C012A AAAAAAAAAABBFE555555555555BBFB7839A5BC7DEA7C00D555555555553C012AAAAAAA AAAABBCC8000000000000BFB59E26AF37C050C00D555555555553C012AAAAAAAAAAAB3 FE555555555554FBFB2F684BDA12F70C00D555555555553C012AAAAAAAAAAAB3FF5555 555555552BFAF19690E08580CC00D555555555553C012AAAAAAAAAAAB3FFFFFFFFFFFF FFCBFA6C16C16C16C26C00D555555555553C012AAAAAAAAAAAB4005555555555553BF9 9CA252ADB365EC00D555555555553C012AAAAAAAAAAAB400AAAAAAAAAAAA8BF6845C8A 0CE523FC00D555555555553C012AAAAAAAAAAAB400FFFFFFFFFFFFD3F96C16C16C16BF 1C00D555555555553C012AAAAAAAAAAAB4012AAAAAAAAAAA93FA9CA252ADB3628C00D5 55555555553C012AAAAAAAAAAAB40155555555555543FB4DBF86A314DB6C00D5555555 55553C012AAAAAAAAAAAB4017FFFFFFFFFFFF3FBD950C83FB72E1C00D555555555553C 012AAAAAAAAAAAB401AAAAAAAAAAAAA3FC388277166054BC00D555555555553C012AAA AAAAAAAAB401D5555555555553FC8A6DFC3518A6BC00D555555555553C012AAAAAAAAA AAB40200000000000003FCE26AF37C048CFC00D555555555553C012AAAAAAAAAAAB402 15555555555553FD203CAE759203BC00D555555555553C012AAAAAAAAAAAB4022AAAAA AAAAAAA3FD524C9C413B8B0C00D555555555553C012AAAAAAAAAAAB4023FFFFFFFFFFF F3FD87654320FEDC9C00D555555555553C010000000000000C0240000000000003FB99 99999999993C00D555555555553C010000000000000C022AAAAAAAAAAAB3FB0E0857FC F746CC00D555555555553C010000000000000C0215555555555563FA1D33F56178391C 00D555555555553C010000000000000C0200000000000013F7B4E81B4E81B2DC00D555 555555553C010000000000000C01D555555555557BF92F684BDA12F77C00D555555555 553C010000000000000C01AAAAAAAAAAAACBFA4DBF86A314DCBC00D555555555553C01 0000000000000C018000000000001BFAEB851EB851EC3C00D555555555553C01000000 0000000C015555555555556BFB3882771660555C00D555555555553C01000000000000 0C012AAAAAAAAAAABBFB6F1F7A80308BFC00D555555555553C010000000000000C0100 00000000000BFB99999999999A0C00D555555555553C010000000000000C00AAAAAAAA AAAABBFBB7F0D4629B7F7C00D555555555553C010000000000000C005555555555556B FBCA252ADB363C5C00D555555555553C010000000000000C000000000000001BFBD036 9D0369D0CC00D555555555553C010000000000000BFF5555555555558BFBCA252ADB36 3C6C00D555555555553C010000000000000BFE555555555555BBFBB7F0D4629B7F9C00 D555555555553C010000000000000BCC8000000000000BFB99999999999A2C00D55555 5555553C0100000000000003FE555555555554FBFB6F1F7A80308C2C00D55555555555 3C0100000000000003FF5555555555552BFB3882771660558C00D555555555553C0100 000000000003FFFFFFFFFFFFFFCBFAEB851EB851ECAC00D555555555553C0100000000 000004005555555555553BFA4DBF86A314DD2C00D555555555553C0100000000000004 00AAAAAAAAAAAA8BF92F684BDA12F90C00D555555555553C010000000000000400FFFF FFFFFFFFD3F7B4E81B4E81A9FC00D555555555553C0100000000000004012AAAAAAAAA AA93FA1D33F56178384C00D555555555553C01000000000000040155555555555543FB 0E0857FCF7464C00D555555555553C0100000000000004017FFFFFFFFFFFF3FB999999 999998FC00D555555555553C010000000000000401AAAAAAAAAAAAA3FC18A6DFC3518A 2C00D555555555553C010000000000000401D5555555555553FC6A9264E209DC2C00D5 55555555553C01000000000000040200000000000003FCC28F5C28F5C26C00D5555555 55553C01000000000000040215555555555553FD104EE2CC0A9E6C00D555555555553C 0100000000000004022AAAAAAAAAAAA3FD425ED097B425CC00D555555555553C010000 0000000004023FFFFFFFFFFFF3FD7777777777774C00D555555555553C00AAAAAAAAAA AABC0240000000000003FB6C16C16C16C11C00D555555555553C00AAAAAAAAAAAABC02 2AAAAAAAAAAAB3FAC10AFF9EE8DD4C00D555555555553C00AAAAAAAAAAAABC02155555 55555563F9845C8A0CE511AC00D555555555553C00AAAAAAAAAAAABC02000000000000 1BF723456789ABCF3C00D555555555553C00AAAAAAAAAAAABC01D555555555557BF9E5 73AC901E57FC00D555555555553C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFAA8C536FE 1A8CFC00D555555555553C00AAAAAAAAAAAABC018000000000001BFB23456789ABCE4C 00D555555555553C00AAAAAAAAAAAABC015555555555556BFB66054F43E32D7C00D555 555555553C00AAAAAAAAAAAABC012AAAAAAAAAAABBFB9CA252ADB3641C00D555555555 553C00AAAAAAAAAAAABC010000000000000BFBC71C71C71C722C00D555555555553C00 AAAAAAAAAAAABC00AAAAAAAAAAAABBFBE573AC901E579C00D555555555553C00AAAAAA AAAAAABC005555555555556BFBF7A80308B9147C00D555555555553C00AAAAAAAAAAAA BC000000000000001BFBFDB97530ECA8EC00D555555555553C00AAAAAAAAAAAABBFF55 55555555558BFBF7A80308B9149C00D555555555553C00AAAAAAAAAAAABBFE55555555 5555BBFBE573AC901E57BC00D555555555553C00AAAAAAAAAAAABBCC8000000000000B FBC71C71C71C724C00D555555555553C00AAAAAAAAAAAAB3FE555555555554FBFB9CA2 52ADB3644C00D555555555553C00AAAAAAAAAAAAB3FF5555555555552BFB66054F43E3 2DAC00D555555555553C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFB23456789ABCE7C00 D555555555553C00AAAAAAAAAAAAB4005555555555553BFAA8C536FE1A8D6C00D55555 5555553C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BF9E573AC901E59AC00D55555555555 3C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBF723456789ABD81C00D555555555553C00AA AAAAAAAAAAB4012AAAAAAAAAAA93F9845C8A0CE50FFC00D555555555553C00AAAAAAAA AAAAB40155555555555543FAC10AFF9EE8DC4C00D555555555553C00AAAAAAAAAAAAB4 017FFFFFFFFFFFF3FB6C16C16C16C0DC00D555555555553C00AAAAAAAAAAAAB401AAAA AAAAAAAAA3FC01E573AC901E1C00D555555555553C00AAAAAAAAAAAAB401D555555555 5553FC53D0F8CB48701C00D555555555553C00AAAAAAAAAAAAB40200000000000003FC ABCDF01234565C00D555555555553C00AAAAAAAAAAAAB40215555555555553FD04EE2C C0A9E86C00D555555555553C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD36FE1A8C536F BC00D555555555553C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD6C16C16C16C14C00D5 55555555553C005555555555556C0240000000000003FB50C83FB72EA5BC00D5555555 55553C005555555555556C022AAAAAAAAAAAB3FA8A6DFC3518A68C00D555555555553C 005555555555556C0215555555555563F91722833944A4AC00D555555555553C005555 555555556C020000000000001BF86C16C16C16C19C00D555555555553C005555555555 556C01D555555555557BFA2956D9B1DF627C00D555555555553C005555555555556C01 AAAAAAAAAAAACBFADF623A67EAC37C00D555555555553C005555555555556C01800000 0000001BFB3E93E93E93E98C00D555555555553C005555555555556C01555555555555 6BFB8153D0F8CB48DC00D555555555553C005555555555556C012AAAAAAAAAAABBFBB7 F0D4629B7F7C00D555555555553C005555555555556C010000000000000BFBE26AF37C 048D8C00D555555555553C005555555555556C00AAAAAAAAAAAABBFC0061172283398C 00D555555555553C005555555555556C005555555555556BFC097B425ED097FC00D555 555555553C005555555555556C000000000000001BFC0C83FB72EA621C00D555555555 553C005555555555556BFF5555555555558BFC097B425ED097EC00D555555555553C00 5555555555556BFE555555555555BBFC0061172283398C00D555555555553C00555555 5555556BCC8000000000000BFBE26AF37C048D9C00D555555555553C00555555555555 63FE555555555554FBFBB7F0D4629B7F9C00D555555555553C0055555555555563FF55 55555555552BFB8153D0F8CB48FC00D555555555553C0055555555555563FFFFFFFFFF FFFFCBFB3E93E93E93E9CC00D555555555553C0055555555555564005555555555553B FADF623A67EAC40C00D555555555553C005555555555556400AAAAAAAAAAAA8BFA2956 D9B1DF637C00D555555555553C005555555555556400FFFFFFFFFFFFDBF86C16C16C16 C68C00D555555555553C0055555555555564012AAAAAAAAAAA93F91722833944A2BC00 D555555555553C00555555555555640155555555555543FA8A6DFC3518A5AC00D55555 5555553C0055555555555564017FFFFFFFFFFFF3FB50C83FB72EA58C00D55555555555 3C005555555555556401AAAAAAAAAAAAA3FBE87C65A43820EC00D555555555553C0055 55555555556401D5555555555553FC4629B7F0D4626C00D555555555553C0055555555 5555640200000000000003FC9E26AF37C048AC00D555555555553C0055555555555564 0215555555555553FCFC3518A6DFC31C00D555555555553C0055555555555564022AAA AAAAAAAAA3FD302A7A1F1968EC00D555555555553C0055555555555564023FFFFFFFFF FFF3FD654320FEDCBA6C00D555555555553C000000000000001C0240000000000003FB 47AE147AE1477C00D555555555553C000000000000001C022AAAAAAAAAAAB3FA7839A5 BC7DE9CC00D555555555553C000000000000001C0215555555555563F8E573AC901E55 4C00D555555555553C000000000000001C020000000000001BF8B4E81B4E81B59C00D5 55555555553C000000000000001C01D555555555557BFA3B8B302A7A1F7C00D5555555 55553C000000000000001C01AAAAAAAAAAAACBFAF19690E085807C00D555555555553C 000000000000001C018000000000001BFB47AE147AE1480C00D555555555553C000000 000000001C015555555555556BFB8A6DFC3518A73C00D555555555553C000000000000 001C012AAAAAAAAAAABBFBC10AFF9EE8DDDC00D555555555553C000000000000001C01 0000000000000BFBEB851EB851EBEC00D555555555553C000000000000001C00AAAAAA AAAAAABBFC04EE2CC0A9E8BC00D555555555553C000000000000001C00555555555555 6BFC0E0857FCF7472C00D555555555553C000000000000001C000000000000001BFC11 11111111115C00D555555555553C000000000000001BFF5555555555558BFC0E0857FC F7472C00D555555555553C000000000000001BFE555555555555BBFC04EE2CC0A9E8CC 00D555555555553C000000000000001BCC8000000000000BFBEB851EB851EC0C00D555 555555553C0000000000000013FE555555555554FBFBC10AFF9EE8DE0C00D555555555 553C0000000000000013FF5555555555552BFB8A6DFC3518A76C00D555555555553C00 00000000000013FFFFFFFFFFFFFFCBFB47AE147AE1483C00D555555555553C00000000 00000014005555555555553BFAF19690E08580EC00D555555555553C00000000000000 1400AAAAAAAAAAAA8BFA3B8B302A7A205C00D555555555553C000000000000001400FF FFFFFFFFFFDBF8B4E81B4E81BA0C00D555555555553C0000000000000014012AAAAAAA AAAA93F8E573AC901E51EC00D555555555553C00000000000000140155555555555543 FA7839A5BC7DE8CC00D555555555553C0000000000000014017FFFFFFFFFFFF3FB47AE 147AE1471C00D555555555553C000000000000001401AAAAAAAAAAAAA3FBDF623A67EA C27C00D555555555553C000000000000001401D5555555555553FC419CA252ADB33C00 D555555555553C00000000000000140200000000000003FC9999999999997C00D55555 5555553C00000000000000140215555555555553FCF7A80308B913EC00D55555555555 3C0000000000000014022AAAAAAAAAAAA3FD2DE3EF5006114C00D555555555553C0000 000000000014023FFFFFFFFFFFF3FD62FC962FC962DC00D555555555553BFF55555555 55558C0240000000000003FB50C83FB72EA5BC00D555555555553BFF5555555555558C 022AAAAAAAAAAAB3FA8A6DFC3518A68C00D555555555553BFF5555555555558C021555 5555555563F91722833944A4AC00D555555555553BFF5555555555558C020000000000 001BF86C16C16C16C19C00D555555555553BFF5555555555558C01D555555555557BFA 2956D9B1DF627C00D555555555553BFF5555555555558C01AAAAAAAAAAAACBFADF623A 67EAC37C00D555555555553BFF5555555555558C018000000000001BFB3E93E93E93E9 8C00D555555555553BFF5555555555558C015555555555556BFB8153D0F8CB48DC00D5 55555555553BFF5555555555558C012AAAAAAAAAAABBFBB7F0D4629B7F7C00D5555555 55553BFF5555555555558C010000000000000BFBE26AF37C048D8C00D555555555553B FF5555555555558C00AAAAAAAAAAAABBFC0061172283398C00D555555555553BFF5555 555555558C005555555555556BFC097B425ED097FC00D555555555553BFF5555555555 558C000000000000001BFC0C83FB72EA621C00D555555555553BFF5555555555558BFF 5555555555558BFC097B425ED097EC00D555555555553BFF5555555555558BFE555555 555555BBFC0061172283398C00D555555555553BFF5555555555558BCC800000000000 0BFBE26AF37C048D9C00D555555555553BFF55555555555583FE555555555554FBFBB7 F0D4629B7F9C00D555555555553BFF55555555555583FF5555555555552BFB8153D0F8 CB48FC00D555555555553BFF55555555555583FFFFFFFFFFFFFFCBFB3E93E93E93E9CC 00D555555555553BFF55555555555584005555555555553BFADF623A67EAC40C00D555 555555553BFF5555555555558400AAAAAAAAAAAA8BFA2956D9B1DF637C00D555555555 553BFF5555555555558400FFFFFFFFFFFFDBF86C16C16C16C68C00D555555555553BFF 55555555555584012AAAAAAAAAAA93F91722833944A2BC00D555555555553BFF555555 555555840155555555555543FA8A6DFC3518A5AC00D555555555553BFF555555555555 84017FFFFFFFFFFFF3FB50C83FB72EA58C00D555555555553BFF5555555555558401AA AAAAAAAAAAA3FBE87C65A43820EC00D555555555553BFF5555555555558401D5555555 555553FC4629B7F0D4626C00D555555555553BFF555555555555840200000000000003 FC9E26AF37C048AC00D555555555553BFF555555555555840215555555555553FCFC35 18A6DFC31C00D555555555553BFF55555555555584022AAAAAAAAAAAA3FD302A7A1F19 68EC00D555555555553BFF55555555555584023FFFFFFFFFFFF3FD654320FEDCBA6C00 D555555555553BFE555555555555BC0240000000000003FB6C16C16C16C11C00D55555 5555553BFE555555555555BC022AAAAAAAAAAAB3FAC10AFF9EE8DD0C00D55555555555 3BFE555555555555BC0215555555555563F9845C8A0CE511AC00D555555555553BFE55 5555555555BC020000000000001BF723456789ABCF3C00D555555555553BFE55555555 5555BC01D555555555557BF9E573AC901E57FC00D555555555553BFE555555555555BC 01AAAAAAAAAAAACBFAA8C536FE1A8CFC00D555555555553BFE555555555555BC018000 000000001BFB23456789ABCE4C00D555555555553BFE555555555555BC015555555555 556BFB66054F43E32D9C00D555555555553BFE555555555555BC012AAAAAAAAAAABBFB 9CA252ADB3643C00D555555555553BFE555555555555BC010000000000000BFBC71C71 C71C724C00D555555555553BFE555555555555BC00AAAAAAAAAAAABBFBE573AC901E57 BC00D555555555553BFE555555555555BC005555555555556BFBF7A80308B9149C00D5 55555555553BFE555555555555BC000000000000001BFBFDB97530ECA8EC00D5555555 55553BFE555555555555BBFF5555555555558BFBF7A80308B9149C00D555555555553B FE555555555555BBFE555555555555BBFBE573AC901E57CC00D555555555553BFE5555 55555555BBCC8000000000000BFBC71C71C71C725C00D555555555553BFE5555555555 55B3FE555555555554FBFB9CA252ADB3645C00D555555555553BFE555555555555B3FF 5555555555552BFB66054F43E32DBC00D555555555553BFE555555555555B3FFFFFFFF FFFFFFCBFB23456789ABCE8C00D555555555553BFE555555555555B400555555555555 3BFAA8C536FE1A8D8C00D555555555553BFE555555555555B400AAAAAAAAAAAA8BF9E5 73AC901E59EC00D555555555553BFE555555555555B400FFFFFFFFFFFFDBF723456789 ABD91C00D555555555553BFE555555555555B4012AAAAAAAAAAA93F9845C8A0CE50FBC 00D555555555553BFE555555555555B40155555555555543FAC10AFF9EE8DC2C00D555 555555553BFE555555555555B4017FFFFFFFFFFFF3FB6C16C16C16C0CC00D555555555 553BFE555555555555B401AAAAAAAAAAAAA3FC01E573AC901E1C00D555555555553BFE 555555555555B401D5555555555553FC53D0F8CB48700C00D555555555553BFE555555 555555B40200000000000003FCABCDF01234564C00D555555555553BFE555555555555 B40215555555555553FD04EE2CC0A9E86C00D555555555553BFE555555555555B4022A AAAAAAAAAAA3FD36FE1A8C536FBC00D555555555553BFE555555555555B4023FFFFFFF FFFFF3FD6C16C16C16C13C00D555555555553BCC8000000000000C0240000000000003 FB9999999999993C00D555555555553BCC8000000000000C022AAAAAAAAAAAB3FB0E08 57FCF746CC00D555555555553BCC8000000000000C0215555555555563FA1D33F56178 391C00D555555555553BCC8000000000000C0200000000000013F7B4E81B4E81B2DC00 D555555555553BCC8000000000000C01D555555555557BF92F684BDA12F77C00D55555 5555553BCC8000000000000C01AAAAAAAAAAAACBFA4DBF86A314DCBC00D55555555555 3BCC8000000000000C018000000000001BFAEB851EB851EC3C00D555555555553BCC80 00000000000C015555555555556BFB3882771660555C00D555555555553BCC80000000 00000C012AAAAAAAAAAABBFB6F1F7A80308BFC00D555555555553BCC8000000000000C 010000000000000BFB99999999999A0C00D555555555553BCC8000000000000C00AAAA AAAAAAAABBFBB7F0D4629B7F7C00D555555555553BCC8000000000000C005555555555 556BFBCA252ADB363C5C00D555555555553BCC8000000000000C000000000000001BFB D0369D0369D0CC00D555555555553BCC8000000000000BFF5555555555558BFBCA252A DB363C6C00D555555555553BCC8000000000000BFE555555555555BBFBB7F0D4629B7F 9C00D555555555553BCC8000000000000BCC8000000000000BFB99999999999A2C00D5 55555555553BCC80000000000003FE555555555554FBFB6F1F7A80308C2C00D5555555 55553BCC80000000000003FF5555555555552BFB3882771660558C00D555555555553B CC80000000000003FFFFFFFFFFFFFFCBFAEB851EB851ECAC00D555555555553BCC8000 0000000004005555555555553BFA4DBF86A314DD2C00D555555555553BCC8000000000 000400AAAAAAAAAAAA8BF92F684BDA12F90C00D555555555553BCC8000000000000400 FFFFFFFFFFFFD3F7B4E81B4E81A9FC00D555555555553BCC80000000000004012AAAAA AAAAAA93FA1D33F56178384C00D555555555553BCC8000000000000401555555555555 43FB0E0857FCF7464C00D555555555553BCC80000000000004017FFFFFFFFFFFF3FB99 9999999998FC00D555555555553BCC8000000000000401AAAAAAAAAAAAA3FC18A6DFC3 518A2C00D555555555553BCC8000000000000401D5555555555553FC6A9264E209DC2C 00D555555555553BCC800000000000040200000000000003FCC28F5C28F5C26C00D555 555555553BCC800000000000040215555555555553FD104EE2CC0A9E6C00D555555555 553BCC80000000000004022AAAAAAAAAAAA3FD425ED097B425CC00D555555555553BCC 80000000000004023FFFFFFFFFFFF3FD7777777777774C00D5555555555533FE555555 555554FC0240000000000003FBD950C83FB72E5C00D5555555555533FE555555555554 FC022AAAAAAAAAAAB3FB4DBF86A314DBCC00D5555555555533FE555555555554FC0215 555555555563FA9CA252ADB3635C00D5555555555533FE555555555554FC0200000000 000013F96C16C16C16C13C00D5555555555533FE555555555554FC01D555555555557B F6845C8A0CE5177C00D5555555555533FE555555555554FC01AAAAAAAAAAAACBF99CA2 52ADB364FC00D5555555555533FE555555555554FC018000000000001BFA6C16C16C16 C1FC00D5555555555533FE555555555554FC015555555555556BFAF19690E08580AC00 D5555555555533FE555555555554FC012AAAAAAAAAAABBFB2F684BDA12F6FC00D55555 55555533FE555555555554FC010000000000000BFB59E26AF37C050C00D55555555555 33FE555555555554FC00AAAAAAAAAAAABBFB7839A5BC7DEA7C00D5555555555533FE55 5555555554FC005555555555556BFB8A6DFC3518A75C00D5555555555533FE55555555 5554FC000000000000001BFB907F6E5D4C3BAC00D5555555555533FE555555555554FB FF5555555555558BFB8A6DFC3518A75C00D5555555555533FE555555555554FBFE5555 55555555BBFB7839A5BC7DEA8C00D5555555555533FE555555555554FBCC8000000000 000BFB59E26AF37C051C00D5555555555533FE555555555554F3FE555555555554FBFB 2F684BDA12F71C00D5555555555533FE555555555554F3FF5555555555552BFAF19690 E08580EC00D5555555555533FE555555555554F3FFFFFFFFFFFFFFCBFA6C16C16C16C2 8C00D5555555555533FE555555555554F4005555555555553BF99CA252ADB3662C00D5 555555555533FE555555555554F400AAAAAAAAAAAA8BF6845C8A0CE525FC00D5555555 555533FE555555555554F400FFFFFFFFFFFFD3F96C16C16C16BEDC00D5555555555533 FE555555555554F4012AAAAAAAAAAA93FA9CA252ADB3626C00D5555555555533FE5555 55555554F40155555555555543FB4DBF86A314DB5C00D5555555555533FE5555555555 54F4017FFFFFFFFFFFF3FBD950C83FB72E0C00D5555555555533FE555555555554F401 AAAAAAAAAAAAA3FC388277166054BC00D5555555555533FE555555555554F401D55555 55555553FC8A6DFC3518A6AC00D5555555555533FE555555555554F402000000000000 03FCE26AF37C048CEC00D5555555555533FE555555555554F40215555555555553FD20 3CAE759203AC00D5555555555533FE555555555554F4022AAAAAAAAAAAA3FD524C9C41 3B8B0C00D5555555555533FE555555555554F4023FFFFFFFFFFFF3FD87654320FEDC8C 00D5555555555533FF5555555555552C0240000000000003FC159E26AF37C01C00D555 5555555533FF5555555555552C022AAAAAAAAAAAB3FB9FAB0BC1CD2DAC00D555555555 5533FF5555555555552C0215555555555563FB203CAE7592038C00D5555555555533FF 5555555555552C0200000000000013FA59E26AF37C046C00D5555555555533FF555555 5555552C01D5555555555573F91722833944A49C00D5555555555533FF555555555555 2C01AAAAAAAAAAAACBF753D0F8CB4875BC00D5555555555533FF5555555555552C0180 00000000001BF9907F6E5D4C3C7C00D5555555555533FF5555555555552C0155555555 55556BFA4DBF86A314DCEC00D5555555555533FF5555555555552C012AAAAAAAAAAABB FABAF98D76B54A2C00D5555555555533FF5555555555552C010000000000000BFB07F6 E5D4C3B32C00D5555555555533FF5555555555552C00AAAAAAAAAAAABBFB264E209DC5 989C00D5555555555533FF5555555555552C005555555555556BFB3882771660557C00 D5555555555533FF5555555555552C000000000000001BFB3E93E93E93E9CC00D55555 55555533FF5555555555552BFF5555555555558BFB3882771660557C00D55555555555 33FF5555555555552BFE555555555555BBFB264E209DC598AC00D5555555555533FF55 55555555552BCC8000000000000BFB07F6E5D4C3B33C00D5555555555533FF55555555 555523FE555555555554FBFABAF98D76B54A5C00D5555555555533FF55555555555523 FF5555555555552BFA4DBF86A314DD2C00D5555555555533FF55555555555523FFFFFF FFFFFFFFCBF9907F6E5D4C3D8C00D5555555555533FF55555555555524005555555555 553BF753D0F8CB487A3C00D5555555555533FF5555555555552400AAAAAAAAAAAA83F9 1722833944A2CC00D5555555555533FF5555555555552400FFFFFFFFFFFFD3FA59E26A F37C032C00D5555555555533FF55555555555524012AAAAAAAAAAA93FB203CAE759203 1C00D5555555555533FF555555555555240155555555555543FB9FAB0BC1CD2D3C00D5 555555555533FF55555555555524017FFFFFFFFFFFF3FC159E26AF37BFFC00D5555555 555533FF5555555555552401AAAAAAAAAAAAA3FC617839A5BC7DAC00D5555555555533 FF5555555555552401D5555555555553FCB363BEC474CF9C00D5555555555533FF5555 55555555240200000000000003FD05B05B05B05AFC00D5555555555533FF5555555555 55240215555555555553FD34B78FBD40182C00D5555555555533FF5555555555552402 2AAAAAAAAAAAA3FD66C77D88E99F7C00D5555555555533FF55555555555524023FFFFF FFFFFFF3FD9BE02468ACF10C00D5555555555533FFFFFFFFFFFFFFCC02400000000000 03FC47AE147AE1476C00D5555555555533FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FC01 E573AC901E3C00D5555555555533FFFFFFFFFFFFFFCC0215555555555563FB845C8A0C E5124C00D5555555555533FFFFFFFFFFFFFFCC0200000000000013FB111111111110DC 00D5555555555533FFFFFFFFFFFFFFCC01D5555555555573FA53D0F8CB486F9C00D555 5555555533FFFFFFFFFFFFFFCC01AAAAAAAAAAAAC3F93B8B302A7A1D9C00D555555555 5533FFFFFFFFFFFFFFCC018000000000001BC9AD88000000000C00D5555555555533FF FFFFFFFFFFFFCC015555555555556BF90AFF9EE8DD7ECC00D5555555555533FFFFFFFF FFFFFFCC012AAAAAAAAAAABBF9E573AC901E594C00D5555555555533FFFFFFFFFFFFFF CC010000000000000BFA47AE147AE148DC00D5555555555533FFFFFFFFFFFFFFCC00AA AAAAAAAAAABBFA845C8A0CE513BC00D5555555555533FFFFFFFFFFFFFFCC0055555555 55556BFAA8C536FE1A8D6C00D5555555555533FFFFFFFFFFFFFFCC000000000000001B FAB4E81B4E81B61C00D5555555555533FFFFFFFFFFFFFFCBFF5555555555558BFAA8C5 36FE1A8D8C00D5555555555533FFFFFFFFFFFFFFCBFE555555555555BBFA845C8A0CE5 13CC00D5555555555533FFFFFFFFFFFFFFCBCC8000000000000BFA47AE147AE148EC00 D5555555555533FFFFFFFFFFFFFFC3FE555555555554FBF9E573AC901E59BC00D55555 55555533FFFFFFFFFFFFFFC3FF5555555555552BF90AFF9EE8DD7F5C00D55555555555 33FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBCA534E800000000C00D5555555555533FFFF FFFFFFFFFFC40055555555555533F93B8B302A7A1C5C00D5555555555533FFFFFFFFFF FFFFC400AAAAAAAAAAAA83FA53D0F8CB486EDC00D5555555555533FFFFFFFFFFFFFFC4 00FFFFFFFFFFFFD3FB1111111111105C00D5555555555533FFFFFFFFFFFFFFC4012AAA AAAAAAAA93FB845C8A0CE511CC00D5555555555533FFFFFFFFFFFFFFC4015555555555 5543FC01E573AC901DFC00D5555555555533FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FC 47AE147AE1475C00D5555555555533FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FC938827 7166050C00D5555555555533FFFFFFFFFFFFFFC401D5555555555553FCE573AC901E56 FC00D5555555555533FFFFFFFFFFFFFFC40200000000000003FD1EB851EB851EAC00D5 555555555533FFFFFFFFFFFFFFC40215555555555553FD4DBF86A314DBDC00D5555555 555533FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FD7FCF746EBE632C00D5555555555533 FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FDB4E81B4E81B4BC00D5555555555534005555 555555553C0240000000000003FC82D82D82D82D3C00D5555555555534005555555555 553C022AAAAAAAAAAAB3FC3D0F8CB487040C00D5555555555534005555555555553C02 15555555555563FBFAB0BC1CD2DDEC00D5555555555534005555555555553C02000000 00000013FB87654320FEDC8C00D5555555555534005555555555553C01D55555555555 73FB203CAE7592037C00D5555555555534005555555555553C01AAAAAAAAAAAAC3FA8A 6DFC3518A5FC00D5555555555534005555555555553C0180000000000013F9D950C83F B72CDC00D5555555555534005555555555553C0155555555555563F89CA252ADB35F9C 00D5555555555534005555555555553C012AAAAAAAAAAABBF4845C8A0CE557CC00D555 5555555534005555555555553C010000000000000BF86C16C16C16C64C00D555555555 5534005555555555553C00AAAAAAAAAAAABBF92F684BDA12F8DC00D555555555553400 5555555555553C005555555555556BF97839A5BC7DEC7C00D555555555553400555555 5555553C000000000000001BF9907F6E5D4C3D9C00D555555555553400555555555555 3BFF5555555555558BF97839A5BC7DEC8C00D5555555555534005555555555553BFE55 5555555555BBF92F684BDA12F91C00D5555555555534005555555555553BCC80000000 00000BF86C16C16C16C69C00D55555555555340055555555555533FE555555555554FB F4845C8A0CE5669C00D55555555555340055555555555533FF55555555555523F89CA2 52ADB35E6C00D55555555555340055555555555533FFFFFFFFFFFFFFC3F9D950C83FB7 2BEC00D555555555553400555555555555340055555555555533FA8A6DFC3518A57C00 D5555555555534005555555555553400AAAAAAAAAAAA83FB203CAE7592031C00D55555 55555534005555555555553400FFFFFFFFFFFFD3FB87654320FEDBEC00D55555555555 340055555555555534012AAAAAAAAAAA93FBFAB0BC1CD2DD6C00D55555555555340055 5555555555340155555555555543FC3D0F8CB48703CC00D55555555555340055555555 555534017FFFFFFFFFFFF3FC82D82D82D82D2C00D55555555555340055555555555534 01AAAAAAAAAAAAA3FCCEB240795CEADC00D5555555555534005555555555553401D555 5555555553FD104EE2CC0A9E6C00D55555555555340055555555555534020000000000 0003FD3C4D5E6F80918C00D555555555553400555555555555340215555555555553FD 6B549327104EBC00D55555555555340055555555555534022AAAAAAAAAAAA3FD9D6480 F2B9D61C00D55555555555340055555555555534023FFFFFFFFFFFF3FDD27D27D27D27 9C00D555555555553400AAAAAAAAAAAA8C0240000000000003FCC71C71C71C717C00D5 55555555553400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FC8153D0F8CB484C00D5555555 55553400AAAAAAAAAAAA8C0215555555555563FC419CA252ADB33C00D5555555555534 00AAAAAAAAAAAA8C0200000000000013FC07F6E5D4C3B27C00D555555555553400AAAA AAAAAAAA8C01D5555555555573FBA8C536FE1A8BEC00D555555555553400AAAAAAAAAA AA8C01AAAAAAAAAAAAC3FB4DBF86A314DB7C00D555555555553400AAAAAAAAAAAA8C01 80000000000013FAFDB97530ECA77C00D555555555553400AAAAAAAAAAAA8C01555555 55555563FA7839A5BC7DE8CC00D555555555553400AAAAAAAAAAAA8C012AAAAAAAAAAA B3FA0AFF9EE8DD7B9C00D555555555553400AAAAAAAAAAAA8C0100000000000003F96C 16C16C16BECC00D555555555553400AAAAAAAAAAAA8C00AAAAAAAAAAAAB3F8E573AC90 1E51FC00D555555555553400AAAAAAAAAAAA8C0055555555555563F853D0F8CB486AEC 00D555555555553400AAAAAAAAAAAA8C0000000000000013F823456789ABC89C00D555 555555553400AAAAAAAAAAAA8BFF55555555555583F853D0F8CB486ADC00D555555555 553400AAAAAAAAAAAA8BFE555555555555B3F8E573AC901E51BC00D555555555553400 AAAAAAAAAAAA8BCC80000000000003F96C16C16C16BE9C00D555555555553400AAAAAA AAAAAA83FE555555555554F3FA0AFF9EE8DD7B5C00D555555555553400AAAAAAAAAAAA 83FF55555555555523FA7839A5BC7DE88C00D555555555553400AAAAAAAAAAAA83FFFF FFFFFFFFFFC3FAFDB97530ECA6EC00D555555555553400AAAAAAAAAAAA840055555555 555533FB4DBF86A314DB3C00D555555555553400AAAAAAAAAAAA8400AAAAAAAAAAAA83 FBA8C536FE1A8B8C00D555555555553400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FC07F6 E5D4C3B23C00D555555555553400AAAAAAAAAAAA84012AAAAAAAAAAA93FC419CA252AD B2FC00D555555555553400AAAAAAAAAAAA840155555555555543FC8153D0F8CB480C00 D555555555553400AAAAAAAAAAAA84017FFFFFFFFFFFF3FCC71C71C71C715C00D55555 5555553400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FD097B425ED0978C00D55555555555 3400AAAAAAAAAAAA8401D5555555555553FD327104EE2CC08C00D555555555553400AA AAAAAAAAAA840200000000000003FD5E6F8091A2B3AC00D555555555553400AAAAAAAA AAAA840215555555555553FD8D76B5493270DC00D555555555553400AAAAAAAAAAAA84 022AAAAAAAAAAAA3FDBF86A314DBF82C00D555555555553400AAAAAAAAAAAA84023FFF FFFFFFFFF3FDF49F49F49F49BC00D555555555553400FFFFFFFFFFFFDC024000000000 0003FD0A3D70A3D70A1C00D555555555553400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FC CEB240795CEAFC00D555555555553400FFFFFFFFFFFFDC0215555555555563FC8EFB11 D33F55DC00D555555555553400FFFFFFFFFFFFDC0200000000000013FC555555555555 2C00D555555555553400FFFFFFFFFFFFDC01D5555555555573FC21C10AFF9EE8AC00D5 55555555553400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FBE87C65A43820CC00D5555555 55553400FFFFFFFFFFFFDC0180000000000013FB9999999999990C00D5555555555534 00FFFFFFFFFFFFDC0155555555555563FB56D9B1DF6239BC00D555555555553400FFFF FFFFFFFFDC012AAAAAAAAAAAB3FB203CAE7592031C00D555555555553400FFFFFFFFFF FFDC0100000000000003FAEB851EB851EA0C00D555555555553400FFFFFFFFFFFFDC00 AAAAAAAAAAAAB3FAAED6A9264E1F2C00D555555555553400FFFFFFFFFFFFDC00555555 55555563FA8A6DFC3518A56C00D555555555553400FFFFFFFFFFFFDC00000000000000 13FA7E4B17E4B17CDC00D555555555553400FFFFFFFFFFFFDBFF55555555555583FA8A 6DFC3518A55C00D555555555553400FFFFFFFFFFFFDBFE555555555555B3FAAED6A926 4E1F1C00D555555555553400FFFFFFFFFFFFDBCC80000000000003FAEB851EB851E9FC 00D555555555553400FFFFFFFFFFFFD3FE555555555554F3FB203CAE759202FC00D555 555555553400FFFFFFFFFFFFD3FF55555555555523FB56D9B1DF62399C00D555555555 553400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FB999999999998CC00D555555555553400 FFFFFFFFFFFFD40055555555555533FBE87C65A438208C00D555555555553400FFFFFF FFFFFFD400AAAAAAAAAAAA83FC21C10AFF9EE86C00D555555555553400FFFFFFFFFFFF D400FFFFFFFFFFFFD3FC555555555554DC00D555555555553400FFFFFFFFFFFFD4012A AAAAAAAAAA93FC8EFB11D33F559C00D555555555553400FFFFFFFFFFFFD40155555555 555543FCCEB240795CEAAC00D555555555553400FFFFFFFFFFFFD4017FFFFFFFFFFFF3 FD0A3D70A3D70A0C00D555555555553400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FD302A 7A1F1968DC00D555555555553400FFFFFFFFFFFFD401D5555555555553FD59203CAE75 91DC00D555555555553400FFFFFFFFFFFFD40200000000000003FD851EB851EB850C00 D555555555553400FFFFFFFFFFFFD40215555555555553FDB425ED097B422C00D55555 5555553400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FDE635DAD524C98C00D55555555555 3400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FE0DA740DA740D8C00D5555555555534012A AAAAAAAAAA9C0240000000000003FD3579BE02468AAC00D5555555555534012AAAAAAA AAAA9C022AAAAAAAAAAAB3FD12956D9B1DF60C00D5555555555534012AAAAAAAAAAA9C 0215555555555563FCE573AC901E56FC00D5555555555534012AAAAAAAAAAA9C020000 0000000013FCABCDF01234564C00D5555555555534012AAAAAAAAAAA9C01D555555555 5573FC7839A5BC7DE9BC00D5555555555534012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FC 4AB6CD8EFB118C00D5555555555534012AAAAAAAAAAA9C0180000000000013FC234567 89ABCDAC00D5555555555534012AAAAAAAAAAA9C0155555555555563FC01E573AC901D FC00D5555555555534012AAAAAAAAAAA9C012AAAAAAAAAAAB3FBCD2DE3EF50055C00D5 555555555534012AAAAAAAAAAA9C0100000000000003FBA2B3C4D5E6F73C00D5555555 555534012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FB845C8A0CE511CC00D5555555555534 012AAAAAAAAAAA9C0055555555555563FB722833944A54EC00D5555555555534012AAA AAAAAAAA9C0000000000000013FB6C16C16C16C09C00D5555555555534012AAAAAAAAA AA9BFF55555555555583FB722833944A54EC00D5555555555534012AAAAAAAAAAA9BFE 555555555555B3FB845C8A0CE511BC00D5555555555534012AAAAAAAAAAA9BCC800000 00000003FBA2B3C4D5E6F72C00D5555555555534012AAAAAAAAAAA93FE555555555554 F3FBCD2DE3EF50052C00D5555555555534012AAAAAAAAAAA93FF55555555555523FC01 E573AC901DEC00D5555555555534012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FC23456789 ABCD8C00D5555555555534012AAAAAAAAAAA940055555555555533FC4AB6CD8EFB116C 00D5555555555534012AAAAAAAAAAA9400AAAAAAAAAAAA83FC7839A5BC7DE98C00D555 5555555534012AAAAAAAAAAA9400FFFFFFFFFFFFD3FCABCDF0123455FC00D555555555 5534012AAAAAAAAAAA94012AAAAAAAAAAA93FCE573AC901E56AC00D555555555553401 2AAAAAAAAAAA940155555555555543FD12956D9B1DF5EC00D5555555555534012AAAAA AAAAAA94017FFFFFFFFFFFF3FD3579BE02468A9C00D5555555555534012AAAAAAAAAAA 9401AAAAAAAAAAAAA3FD5B66C77D88E96C00D5555555555534012AAAAAAAAAAA9401D5 555555555553FD845C8A0CE5126C00D5555555555534012AAAAAAAAAAA940200000000 000003FDB05B05B05B058C00D5555555555534012AAAAAAAAAAA940215555555555553 FDDF623A67EAC2BC00D5555555555534012AAAAAAAAAAA94022AAAAAAAAAAAA3FE08B9 1419CA250C00D5555555555534012AAAAAAAAAAA94023FFFFFFFFFFFF3FE23456789AB CDDC00D5555555555534015555555555554C0240000000000003FD654320FEDCBA7C00 D5555555555534015555555555554C022AAAAAAAAAAAB3FD425ED097B425DC00D55555 55555534015555555555554C0215555555555563FD22833944A55B4C00D55555555555 34015555555555554C0200000000000013FD05B05B05B05AFC00D55555555555340155 55555555554C01D5555555555573FCD7CC6BB5AA495C00D55555555555340155555555 55554C01AAAAAAAAAAAAC3FCAA49938827711C00D5555555555534015555555555554C 0180000000000013FC82D82D82D82D3C00D5555555555534015555555555554C015555 5555555563FC617839A5BC7D9C00D5555555555534015555555555554C012AAAAAAAAA AAB3FC4629B7F0D4624C00D5555555555534015555555555554C0100000000000003FC 30ECA8641FDB3C00D5555555555534015555555555554C00AAAAAAAAAAAAB3FC21C10A FF9EE87C00D5555555555534015555555555554C0055555555555563FC18A6DFC3518A 0C00D5555555555534015555555555554C0000000000000013FC159E26AF37BFEC00D5 555555555534015555555555554BFF55555555555583FC18A6DFC3518A1C00D5555555 555534015555555555554BFE555555555555B3FC21C10AFF9EE87C00D5555555555534 015555555555554BCC80000000000003FC30ECA8641FDB3C00D5555555555534015555 5555555543FE555555555554F3FC4629B7F0D4623C00D5555555555534015555555555 5543FF55555555555523FC617839A5BC7D8C00D55555555555340155555555555543FF FFFFFFFFFFFFC3FC82D82D82D82D1C00D5555555555534015555555555554400555555 55555533FCAA4993882770FC00D5555555555534015555555555554400AAAAAAAAAAAA 83FCD7CC6BB5AA491C00D5555555555534015555555555554400FFFFFFFFFFFFD3FD05 B05B05B05ACC00D55555555555340155555555555544012AAAAAAAAAAA93FD22833944 A55B2C00D555555555553401555555555555440155555555555543FD425ED097B425BC 00D55555555555340155555555555544017FFFFFFFFFFFF3FD654320FEDCBA5C00D555 5555555534015555555555554401AAAAAAAAAAAAA3FD8B302A7A1F193C00D555555555 5534015555555555554401D5555555555553FDB425ED097B422C00D555555555553401 555555555555440200000000000003FDE02468ACF1354C00D555555555553401555555 555555440215555555555553FE0795CEB240794C00D555555555553401555555555555 44022AAAAAAAAAAAA3FE209DC598153CFC00D55555555555340155555555555544023F FFFFFFFFFFF3FE3B2A1907F6E5BC00D5555555555534017FFFFFFFFFFFFC0240000000 000003FD9999999999996C00D5555555555534017FFFFFFFFFFFFC022AAAAAAAAAAAB3 FD76B549327104DC00D5555555555534017FFFFFFFFFFFFC0215555555555563FD56D9 B1DF623A4C00D5555555555534017FFFFFFFFFFFFC0200000000000013FD3A06D3A06D 39EC00D5555555555534017FFFFFFFFFFFFC01D5555555555573FD203CAE759203AC00 D5555555555534017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD097B425ED0979C00D55555 55555534017FFFFFFFFFFFFC0180000000000013FCEB851EB851EB3C00D55555555555 34017FFFFFFFFFFFFC0155555555555563FCCA252ADB363B9C00D5555555555534017F FFFFFFFFFFFC012AAAAAAAAAAAB3FCAED6A9264E204C00D5555555555534017FFFFFFF FFFFFC0100000000000003FC9999999999993C00D5555555555534017FFFFFFFFFFFFC 00AAAAAAAAAAAAB3FC8A6DFC3518A67C00D5555555555534017FFFFFFFFFFFFC005555 5555555563FC8153D0F8CB480C00D5555555555534017FFFFFFFFFFFFC000000000000 0013FC7E4B17E4B17DEC00D5555555555534017FFFFFFFFFFFFBFF55555555555583FC 8153D0F8CB481C00D5555555555534017FFFFFFFFFFFFBFE555555555555B3FC8A6DFC 3518A67C00D5555555555534017FFFFFFFFFFFFBCC80000000000003FC999999999999 3C00D5555555555534017FFFFFFFFFFFF3FE555555555554F3FCAED6A9264E203C00D5 555555555534017FFFFFFFFFFFF3FF55555555555523FCCA252ADB363B8C00D5555555 555534017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FCEB851EB851EB1C00D5555555555534 017FFFFFFFFFFFF40055555555555533FD097B425ED0977C00D5555555555534017FFF FFFFFFFFF400AAAAAAAAAAAA83FD203CAE7592039C00D5555555555534017FFFFFFFFF FFF400FFFFFFFFFFFFD3FD3A06D3A06D39CC00D5555555555534017FFFFFFFFFFFF401 2AAAAAAAAAAA93FD56D9B1DF623A2C00D5555555555534017FFFFFFFFFFFF401555555 55555543FD76B549327104BC00D5555555555534017FFFFFFFFFFFF4017FFFFFFFFFFF F3FD9999999999995C00D5555555555534017FFFFFFFFFFFF401AAAAAAAAAAAAA3FDBF 86A314DBF83C00D5555555555534017FFFFFFFFFFFF401D5555555555553FDE87C65A4 38212C00D5555555555534017FFFFFFFFFFFF40200000000000003FE0A3D70A3D70A2C 00D5555555555534017FFFFFFFFFFFF40215555555555553FE21C10AFF9EE8CC00D555 5555555534017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE3AC901E573AC7C00D555555555 5534017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE5555555555553C00D555555555553401 AAAAAAAAAAAAAC0240000000000003FDD27D27D27D27BC00D555555555553401AAAAAA AAAAAAAC022AAAAAAAAAAAB3FDAF98D76B54931C00D555555555553401AAAAAAAAAAAA AC0215555555555563FD8FBD401845C89C00D555555555553401AAAAAAAAAAAAAC0200 000000000013FD72EA61D950C83C00D555555555553401AAAAAAAAAAAAAC01D5555555 555573FD59203CAE7591FC00D555555555553401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3 FD425ED097B425DC00D555555555553401AAAAAAAAAAAAAC0180000000000013FD2EA6 1D950C83EC00D555555555553401AAAAAAAAAAAAAC0155555555555563FD1DF623A67E AC1C00D555555555553401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FD104EE2CC0A9E6C00 D555555555553401AAAAAAAAAAAAAC0100000000000003FD05B05B05B05AEC00D55555 5555553401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FCFC3518A6DFC30C00D55555555555 3401AAAAAAAAAAAAAC0055555555555563FCF31AED6A92649C00D555555555553401AA AAAAAAAAAAAC0000000000000013FCF0123456789A7C00D555555555553401AAAAAAAA AAAAABFF55555555555583FCF31AED6A9264AC00D555555555553401AAAAAAAAAAAAAB FE555555555555B3FCFC3518A6DFC30C00D555555555553401AAAAAAAAAAAAABCC8000 0000000003FD05B05B05B05AEC00D555555555553401AAAAAAAAAAAAA3FE5555555555 54F3FD104EE2CC0A9E6C00D555555555553401AAAAAAAAAAAAA3FF55555555555523FD 1DF623A67EAC1C00D555555555553401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD2EA61D 950C83DC00D555555555553401AAAAAAAAAAAAA40055555555555533FD425ED097B425 CC00D555555555553401AAAAAAAAAAAAA400AAAAAAAAAAAA83FD59203CAE7591EC00D5 55555555553401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FD72EA61D950C81C00D5555555 55553401AAAAAAAAAAAAA4012AAAAAAAAAAA93FD8FBD401845C86C00D5555555555534 01AAAAAAAAAAAAA40155555555555543FDAF98D76B54930C00D555555555553401AAAA AAAAAAAAA4017FFFFFFFFFFFF3FDD27D27D27D27AC00D555555555553401AAAAAAAAAA AAA401AAAAAAAAAAAAA3FDF86A314DBF868C00D555555555553401AAAAAAAAAAAAA401 D5555555555553FE10AFF9EE8DD7CC00D555555555553401AAAAAAAAAAAAA402000000 00000003FE26AF37C048D15C00D555555555553401AAAAAAAAAAAAA402155555555555 53FE3E32D21C10AFEC00D555555555553401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE57 3AC901E5739C00D555555555553401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE71C71C71 C71C5C00D555555555553401D555555555555C0240000000000003FE07F6E5D4C3B29C 00D555555555553401D555555555555C022AAAAAAAAAAAB3FDED097B425ED08C00D555 555555553401D555555555555C0215555555555563FDCD2DE3EF50060C00D555555555 553401D555555555555C0200000000000013FDB05B05B05B05AC00D555555555553401 D555555555555C01D5555555555573FD9690E0857FCF6C00D555555555553401D55555 5555555C01AAAAAAAAAAAAC3FD7FCF746EBE634C00D555555555553401D55555555555 5C0180000000000013FD6C16C16C16C15C00D555555555553401D555555555555C0155 555555555563FD5B66C77D88E98C00D555555555553401D555555555555C012AAAAAAA AAAAB3FD4DBF86A314DBDC00D555555555553401D555555555555C0100000000000003 FD4320FEDCBA985C00D555555555553401D555555555555C00AAAAAAAAAAAAB3FD3B8B 302A7A1EFC00D555555555553401D555555555555C0055555555555563FD36FE1A8C53 6FCC00D555555555553401D555555555555C0000000000000013FD3579BE02468ABC00 D555555555553401D555555555555BFF55555555555583FD36FE1A8C536FCC00D55555 5555553401D555555555555BFE555555555555B3FD3B8B302A7A1EFC00D55555555555 3401D555555555555BCC80000000000003FD4320FEDCBA985C00D555555555553401D5 555555555553FE555555555554F3FD4DBF86A314DBDC00D555555555553401D5555555 555553FF55555555555523FD5B66C77D88E98C00D555555555553401D5555555555553 FFFFFFFFFFFFFFC3FD6C16C16C16C14C00D555555555553401D5555555555554005555 5555555533FD7FCF746EBE633C00D555555555553401D555555555555400AAAAAAAAAA AA83FD9690E0857FCF5C00D555555555553401D555555555555400FFFFFFFFFFFFD3FD B05B05B05B058C00D555555555553401D5555555555554012AAAAAAAAAAA93FDCD2DE3 EF5005DC00D555555555553401D55555555555540155555555555543FDED097B425ED0 7C00D555555555553401D5555555555554017FFFFFFFFFFFF3FE07F6E5D4C3B29C00D5 55555555553401D555555555555401AAAAAAAAAAAAA3FE1AED6A9264E1FC00D5555555 55553401D555555555555401D5555555555553FE2F684BDA12F67C00D5555555555534 01D55555555555540200000000000003FE456789ABCDF00C00D555555555553401D555 55555555540215555555555553FE5CEB240795CEAC00D555555555553401D555555555 5554022AAAAAAAAAAAA3FE75F31AED6A924C00D555555555553401D555555555555402 3FFFFFFFFFFFF3FE907F6E5D4C3B1C00D5555555555534020000000000000C02400000 00000003FE28F5C28F5C28FC00D5555555555534020000000000000C022AAAAAAAAAAA B3FE17839A5BC7DEAC00D5555555555534020000000000000C0215555555555563FE07 95CEB240795C00D5555555555534020000000000000C0200000000000013FDF258BF25 8BF25C00D5555555555534020000000000000C01D5555555555573FDD88E99FAB0BC1C 00D5555555555534020000000000000C01AAAAAAAAAAAAC3FDC1CD2DE3EF4FFC00D555 5555555534020000000000000C0180000000000013FDAE147AE147AE0C00D555555555 5534020000000000000C0155555555555563FD9D6480F2B9D63C00D555555555553402 0000000000000C012AAAAAAAAAAAB3FD8FBD401845C88C00D555555555553402000000 0000000C0100000000000003FD851EB851EB850C00D555555555553402000000000000 0C00AAAAAAAAAAAAB3FD7D88E99FAB0BAC00D5555555555534020000000000000C0055 555555555563FD78FBD401845C7C00D5555555555534020000000000000C0000000000 000013FD7777777777776C00D5555555555534020000000000000BFF55555555555583 FD78FBD401845C7C00D5555555555534020000000000000BFE555555555555B3FD7D88 E99FAB0BAC00D5555555555534020000000000000BCC80000000000003FD851EB851EB 850C00D55555555555340200000000000003FE555555555554F3FD8FBD401845C88C00 D55555555555340200000000000003FF55555555555523FD9D6480F2B9D63C00D55555 555555340200000000000003FFFFFFFFFFFFFFC3FDAE147AE147ADFC00D55555555555 3402000000000000040055555555555533FDC1CD2DE3EF4FEC00D55555555555340200 00000000000400AAAAAAAAAAAA83FDD88E99FAB0BC0C00D55555555555340200000000 00000400FFFFFFFFFFFFD3FDF258BF258BF23C00D55555555555340200000000000004 012AAAAAAAAAAA93FE0795CEB240794C00D55555555555340200000000000004015555 5555555543FE17839A5BC7DE9C00D55555555555340200000000000004017FFFFFFFFF FFF3FE28F5C28F5C28EC00D5555555555534020000000000000401AAAAAAAAAAAAA3FE 3BEC474CFD585C00D5555555555534020000000000000401D5555555555553FE506728 94AB6CDC00D555555555553402000000000000040200000000000003FE666666666666 6C00D555555555553402000000000000040215555555555553FE7DEA00C22E44FC00D5 5555555555340200000000000004022AAAAAAAAAAAA3FE96F1F7A80308AC00D5555555 5555340200000000000004023FFFFFFFFFFFF3FEB17E4B17E4B16C00D5555555555534 021555555555555C0240000000000003FE4C3B2A1907F6DC00D5555555555534021555 555555555C022AAAAAAAAAAAB3FE3AC901E573AC8C00D5555555555534021555555555 555C0215555555555563FE2ADB363BEC474C00D5555555555534021555555555555C02 00000000000013FE1C71C71C71C71C00D5555555555534021555555555555C01D55555 55555573FE0F8CB487042BFC00D5555555555534021555555555555C01AAAAAAAAAAAA C3FE042BFE7BA375EC00D5555555555534021555555555555C0180000000000013FDF4 9F49F49F49DC00D5555555555534021555555555555C0155555555555563FDE3EF5006 11720C00D5555555555534021555555555555C012AAAAAAAAAAAB3FDD6480F2B9D645C 00D5555555555534021555555555555C0100000000000003FDCBA987654320DC00D555 5555555534021555555555555C00AAAAAAAAAAAAB3FDC413B8B302A77C00D555555555 5534021555555555555C0055555555555563FDBF86A314DBF84C00D555555555553402 1555555555555C0000000000000013FDBE02468ACF133C00D555555555553402155555 5555555BFF55555555555583FDBF86A314DBF84C00D555555555553402155555555555 5BFE555555555555B3FDC413B8B302A77C00D5555555555534021555555555555BCC80 000000000003FDCBA987654320DC00D55555555555340215555555555553FE55555555 5554F3FDD6480F2B9D645C00D55555555555340215555555555553FF55555555555523 FDE3EF500611720C00D55555555555340215555555555553FFFFFFFFFFFFFFC3FDF49F 49F49F49CC00D555555555553402155555555555540055555555555533FE042BFE7BA3 75EC00D5555555555534021555555555555400AAAAAAAAAAAA83FE0F8CB487042BEC00 D5555555555534021555555555555400FFFFFFFFFFFFD3FE1C71C71C71C70C00D55555 555555340215555555555554012AAAAAAAAAAA93FE2ADB363BEC473C00D55555555555 3402155555555555540155555555555543FE3AC901E573AC7C00D55555555555340215 555555555554017FFFFFFFFFFFF3FE4C3B2A1907F6DC00D55555555555340215555555 55555401AAAAAAAAAAAAA3FE5F31AED6A9263C00D55555555555340215555555555554 01D5555555555553FE73AC901E573ABC00D55555555555340215555555555554020000 0000000003FE89ABCDF012344C00D55555555555340215555555555554021555555555 5553FEA12F684BDA12EC00D55555555555340215555555555554022AAAAAAAAAAAA3FE BA375F31AED68C00D55555555555340215555555555554023FFFFFFFFFFFF3FED4C3B2 A1907F5C00D5555555555534022AAAAAAAAAAAAC0240000000000003FE71C71C71C71C 5C00D5555555555534022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE6054F43E32D21C00D5 555555555534022AAAAAAAAAAAAC0215555555555563FE50672894AB6CCC00D5555555 555534022AAAAAAAAAAAAC0200000000000013FE41FDB97530ECAC00D5555555555534 022AAAAAAAAAAAAC01D5555555555573FE3518A6DFC3518C00D5555555555534022AAA AAAAAAAAAC01AAAAAAAAAAAAC3FE29B7F0D4629B7C00D5555555555534022AAAAAAAAA AAAC0180000000000013FE1FDB97530ECA7C00D5555555555534022AAAAAAAAAAAAC01 55555555555563FE17839A5BC7DE8C00D5555555555534022AAAAAAAAAAAAC012AAAAA AAAAAAB3FE10AFF9EE8DD7BC00D5555555555534022AAAAAAAAAAAAC01000000000000 03FE0B60B60B60B5FC00D5555555555534022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE07 95CEB240794C00D5555555555534022AAAAAAAAAAAAC0055555555555563FE054F43E3 2D21AC00D5555555555534022AAAAAAAAAAAAC0000000000000013FE048D159E26AF2C 00D5555555555534022AAAAAAAAAAAABFF55555555555583FE054F43E32D21AC00D555 5555555534022AAAAAAAAAAAABFE555555555555B3FE0795CEB240794C00D555555555 5534022AAAAAAAAAAAABCC80000000000003FE0B60B60B60B5FC00D555555555553402 2AAAAAAAAAAAA3FE555555555554F3FE10AFF9EE8DD7BC00D5555555555534022AAAAA AAAAAAA3FF55555555555523FE17839A5BC7DE8C00D5555555555534022AAAAAAAAAAA A3FFFFFFFFFFFFFFC3FE1FDB97530ECA6C00D5555555555534022AAAAAAAAAAAA40055 555555555533FE29B7F0D4629B6C00D5555555555534022AAAAAAAAAAAA400AAAAAAAA AAAA83FE3518A6DFC3516C00D5555555555534022AAAAAAAAAAAA400FFFFFFFFFFFFD3 FE41FDB97530EC9C00D5555555555534022AAAAAAAAAAAA4012AAAAAAAAAAA93FE5067 2894AB6CBC00D5555555555534022AAAAAAAAAAAA40155555555555543FE6054F43E32 D20C00D5555555555534022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE71C71C71C71C5C00 D5555555555534022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE84BDA12F684BCC00D55555 55555534022AAAAAAAAAAAA401D5555555555553FE9938827716603C00D55555555555 34022AAAAAAAAAAAA40200000000000003FEAF37C048D159DC00D5555555555534022A AAAAAAAAAAA40215555555555553FEC6BB5AA499386C00D5555555555534022AAAAAAA AAAAA4022AAAAAAAAAAAA3FEDFC3518A6DFC1C00D5555555555534022AAAAAAAAAAAA4 023FFFFFFFFFFFF3FEFA4FA4FA4FA4DC00D5555555555534023FFFFFFFFFFFFC024000 0000000003FE9999999999997C00D5555555555534023FFFFFFFFFFFFC022AAAAAAAAA AAB3FE88277166054F3C00D5555555555534023FFFFFFFFFFFFC0215555555555563FE 7839A5BC7DE9EC00D5555555555534023FFFFFFFFFFFFC0200000000000013FE69D036 9D0369CC00D5555555555534023FFFFFFFFFFFFC01D5555555555573FE5CEB240795CE 9C00D5555555555534023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE518A6DFC35189C00D5 555555555534023FFFFFFFFFFFFC0180000000000013FE47AE147AE1479C00D5555555 555534023FFFFFFFFFFFFC0155555555555563FE3F5617839A5BAC00D5555555555534 023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE388277166054EC00D5555555555534023FFF FFFFFFFFFC0100000000000003FE3333333333331C00D5555555555534023FFFFFFFFF FFFC00AAAAAAAAAAAAB3FE2F684BDA12F67C00D5555555555534023FFFFFFFFFFFFC00 55555555555563FE2D21C10AFF9ECC00D5555555555534023FFFFFFFFFFFFC00000000 00000013FE2C5F92C5F92C3C00D5555555555534023FFFFFFFFFFFFBFF555555555555 83FE2D21C10AFF9ECC00D5555555555534023FFFFFFFFFFFFBFE555555555555B3FE2F 684BDA12F66C00D5555555555534023FFFFFFFFFFFFBCC80000000000003FE33333333 33331C00D5555555555534023FFFFFFFFFFFF3FE555555555554F3FE388277166054DC 00D5555555555534023FFFFFFFFFFFF3FF55555555555523FE3F5617839A5BAC00D555 5555555534023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE47AE147AE1478C00D555555555 5534023FFFFFFFFFFFF40055555555555533FE518A6DFC35188C00D555555555553402 3FFFFFFFFFFFF400AAAAAAAAAAAA83FE5CEB240795CE8C00D5555555555534023FFFFF FFFFFFF400FFFFFFFFFFFFD3FE69D0369D0369BC00D5555555555534023FFFFFFFFFFF F4012AAAAAAAAAAA93FE7839A5BC7DE9DC00D5555555555534023FFFFFFFFFFFF40155 555555555543FE88277166054F2C00D5555555555534023FFFFFFFFFFFF4017FFFFFFF FFFFF3FE9999999999997C00D5555555555534023FFFFFFFFFFFF401AAAAAAAAAAAAA3 FEAC901E573AC8EC00D5555555555534023FFFFFFFFFFFF401D5555555555553FEC10A FF9EE8DD5C00D5555555555534023FFFFFFFFFFFF40200000000000003FED70A3D70A3 D6FC00D5555555555534023FFFFFFFFFFFF40215555555555553FEEE8DD7CC6BB58C00 D5555555555534023FFFFFFFFFFFF4022AAAAAAAAAAAA3FF03CAE759203CAC00D55555 55555534023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF1111111111110C00BFFFFFFFFFFF EC024000000000000C0240000000000003FD8888888888887C00BFFFFFFFFFFFEC0240 00000000000C022AAAAAAAAAAAB3FD65A438215FF3DC00BFFFFFFFFFFFEC0240000000 00000C0215555555555563FD45C8A0CE51295C00BFFFFFFFFFFFEC024000000000000C 0200000000000013FD28F5C28F5C28FC00BFFFFFFFFFFFEC024000000000000C01D555 5555555573FD0F2B9D6480F2BC00BFFFFFFFFFFFEC024000000000000C01AAAAAAAAAA AAC3FCF0D4629B7F0D2C00BFFFFFFFFFFFEC024000000000000C0180000000000013FC C962FC962FC94C00BFFFFFFFFFFFEC024000000000000C0155555555555563FCA80308 B91419AC00BFFFFFFFFFFFEC024000000000000C012AAAAAAAAAAAB3FC8CB487042BFE 5C00BFFFFFFFFFFFEC024000000000000C0100000000000003FC7777777777774C00BF FFFFFFFFFFEC024000000000000C00AAAAAAAAAAAAB3FC684BDA12F6848C00BFFFFFFF FFFFEC024000000000000C0055555555555563FC5F31AED6A9261C00BFFFFFFFFFFFEC 024000000000000C0000000000000013FC5C28F5C28F5BFC00BFFFFFFFFFFFEC024000 000000000BFF55555555555583FC5F31AED6A9262C00BFFFFFFFFFFFEC024000000000 000BFE555555555555B3FC684BDA12F6848C00BFFFFFFFFFFFEC024000000000000BCC 80000000000003FC7777777777774C00BFFFFFFFFFFFEC0240000000000003FE555555 555554F3FC8CB487042BFE4C00BFFFFFFFFFFFEC0240000000000003FF555555555555 23FCA80308B914199C00BFFFFFFFFFFFEC0240000000000003FFFFFFFFFFFFFFC3FCC9 62FC962FC92C00BFFFFFFFFFFFEC02400000000000040055555555555533FCF0D4629B 7F0D0C00BFFFFFFFFFFFEC024000000000000400AAAAAAAAAAAA83FD0F2B9D6480F29C 00BFFFFFFFFFFFEC024000000000000400FFFFFFFFFFFFD3FD28F5C28F5C28DC00BFFF FFFFFFFFEC0240000000000004012AAAAAAAAAAA93FD45C8A0CE51293C00BFFFFFFFFF FFEC02400000000000040155555555555543FD65A438215FF3CC00BFFFFFFFFFFFEC02 40000000000004017FFFFFFFFFFFF3FD8888888888886C00BFFFFFFFFFFFEC02400000 0000000401AAAAAAAAAAAAA3FDAE759203CAE74C00BFFFFFFFFFFFEC02400000000000 0401D5555555555553FDD76B549327103C00BFFFFFFFFFFFEC02400000000000040200 000000000003FE01B4E81B4E81BC00BFFFFFFFFFFFEC02400000000000040215555555 555553FE1938827716604C00BFFFFFFFFFFFEC0240000000000004022AAAAAAAAAAAA3 FE3240795CEB23FC00BFFFFFFFFFFFEC0240000000000004023FFFFFFFFFFFF3FE4CCC CCCCCCCCBC00BFFFFFFFFFFFEC022AAAAAAAAAAABC0240000000000003FD54320FEDCB A99C00BFFFFFFFFFFFEC022AAAAAAAAAAABC022AAAAAAAAAAAB3FD314DBF86A314FC00 BFFFFFFFFFFFEC022AAAAAAAAAAABC0215555555555563FD11722833944A7C00BFFFFF FFFFFFEC022AAAAAAAAAAABC0200000000000013FCE93E93E93E942C00BFFFFFFFFFFF EC022AAAAAAAAAAABC01D5555555555573FCB5AA49938827AC00BFFFFFFFFFFFEC022A AAAAAAAAAABC01AAAAAAAAAAAAC3FC88277166054F6C00BFFFFFFFFFFFEC022AAAAAAA AAAABC0180000000000013FC60B60B60B60B8C00BFFFFFFFFFFFEC022AAAAAAAAAAABC 0155555555555563FC3F5617839A5BEC00BFFFFFFFFFFFEC022AAAAAAAAAAABC012AAA AAAAAAAAB3FC240795CEB2409C00BFFFFFFFFFFFEC022AAAAAAAAAAABC010000000000 0003FC0ECA8641FDB98C00BFFFFFFFFFFFEC022AAAAAAAAAAABC00AAAAAAAAAAAAB3FB FF3DD1BAF98D9C00BFFFFFFFFFFFEC022AAAAAAAAAAABC0055555555555563FBED097B 425ED0BC00BFFFFFFFFFFFEC022AAAAAAAAAAABC0000000000000013FBE6F8091A2B3C 6C00BFFFFFFFFFFFEC022AAAAAAAAAAABBFF55555555555583FBED097B425ED0BC00BF FFFFFFFFFFEC022AAAAAAAAAAABBFE555555555555B3FBFF3DD1BAF98D8C00BFFFFFFF FFFFEC022AAAAAAAAAAABBCC80000000000003FC0ECA8641FDB98C00BFFFFFFFFFFFEC 022AAAAAAAAAAAB3FE555555555554F3FC240795CEB2408C00BFFFFFFFFFFFEC022AAA AAAAAAAAB3FF55555555555523FC3F5617839A5BDC00BFFFFFFFFFFFEC022AAAAAAAAA AAB3FFFFFFFFFFFFFFC3FC60B60B60B60B6C00BFFFFFFFFFFFEC022AAAAAAAAAAAB400 55555555555533FC88277166054F4C00BFFFFFFFFFFFEC022AAAAAAAAAAAB400AAAAAA AAAAAA83FCB5AA499388276C00BFFFFFFFFFFFEC022AAAAAAAAAAAB400FFFFFFFFFFFF D3FCE93E93E93E93DC00BFFFFFFFFFFFEC022AAAAAAAAAAAB4012AAAAAAAAAAA93FD11 722833944A5C00BFFFFFFFFFFFEC022AAAAAAAAAAAB40155555555555543FD314DBF86 A314DC00BFFFFFFFFFFFEC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FD54320FEDCBA98C 00BFFFFFFFFFFFEC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FD7A1F19690E085C00BFFF FFFFFFFFEC022AAAAAAAAAAAB401D5555555555553FDA314DBF86A315C00BFFFFFFFFF FFEC022AAAAAAAAAAAB40200000000000003FDCF13579BE0248C00BFFFFFFFFFFFEC02 2AAAAAAAAAAAB40215555555555553FDFE1A8C536FE1AC00BFFFFFFFFFFFEC022AAAAA AAAAAAB4022AAAAAAAAAAAA3FE18153D0F8CB48C00BFFFFFFFFFFFEC022AAAAAAAAAAA B4023FFFFFFFFFFFF3FE32A1907F6E5D4C00BFFFFFFFFFFFEC021555555555556C0240 000000000003FD2468ACF13579CC00BFFFFFFFFFFFEC021555555555556C022AAAAAAA AAAAB3FD01845C8A0CE52C00BFFFFFFFFFFFEC021555555555556C0215555555555563 FCC3518A6DFC354C00BFFFFFFFFFFFEC021555555555556C0200000000000013FC89AB CDF012349C00BFFFFFFFFFFFEC021555555555556C01D5555555555573FC5617839A5B C80C00BFFFFFFFFFFFEC021555555555556C01AAAAAAAAAAAAC3FC2894AB6CD8EFCC00 BFFFFFFFFFFFEC021555555555556C0180000000000013FC0123456789ABFC00BFFFFF FFFFFFEC021555555555556C0155555555555563FBBF86A314DBF88C00BFFFFFFFFFFF EC021555555555556C012AAAAAAAAAAAB3FB88E99FAB0BC1EC00BFFFFFFFFFFFEC0215 55555555556C0100000000000003FB5E6F8091A2B3DC00BFFFFFFFFFFFEC0215555555 55556C00AAAAAAAAAAAAB3FB401845C8A0CE6C00BFFFFFFFFFFFEC021555555555556C 0055555555555563FB2DE3EF5006118C00BFFFFFFFFFFFEC021555555555556C000000 0000000013FB27D27D27D27D3C00BFFFFFFFFFFFEC021555555555556BFF5555555555 5583FB2DE3EF5006118C00BFFFFFFFFFFFEC021555555555556BFE555555555555B3FB 401845C8A0CE5C00BFFFFFFFFFFFEC021555555555556BCC80000000000003FB5E6F80 91A2B3CC00BFFFFFFFFFFFEC0215555555555563FE555555555554F3FB88E99FAB0BC1 CC00BFFFFFFFFFFFEC0215555555555563FF55555555555523FBBF86A314DBF86C00BF FFFFFFFFFFEC0215555555555563FFFFFFFFFFFFFFC3FC0123456789ABDC00BFFFFFFF FFFFEC02155555555555640055555555555533FC2894AB6CD8EFBC00BFFFFFFFFFFFEC 021555555555556400AAAAAAAAAAAA83FC5617839A5BC7DC00BFFFFFFFFFFFEC021555 555555556400FFFFFFFFFFFFD3FC89ABCDF012344C00BFFFFFFFFFFFEC021555555555 5564012AAAAAAAAAAA93FCC3518A6DFC34FC00BFFFFFFFFFFFEC021555555555556401 55555555555543FD01845C8A0CE51C00BFFFFFFFFFFFEC0215555555555564017FFFFF FFFFFFF3FD2468ACF13579BC00BFFFFFFFFFFFEC021555555555556401AAAAAAAAAAAA A3FD4A55B66C77D89C00BFFFFFFFFFFFEC021555555555556401D5555555555553FD73 4B78FBD4018C00BFFFFFFFFFFFEC02155555555555640200000000000003FD9F49F49F 49F4AC00BFFFFFFFFFFFEC02155555555555640215555555555553FDCE512956D9B1EC 00BFFFFFFFFFFFEC0215555555555564022AAAAAAAAAAAA3FE00308B91419C9C00BFFF FFFFFFFFEC0215555555555564023FFFFFFFFFFFF3FE1ABCDF0123456C00BFFFFFFFFF FFEC020000000000001C0240000000000003FCF258BF258BF27C00BFFFFFFFFFFFEC02 0000000000001C022AAAAAAAAAAAB3FCAC901E573AC94C00BFFFFFFFFFFFEC02000000 0000001C0215555555555563FC6CD8EFB11D342C00BFFFFFFFFFFFEC02000000000000 1C0200000000000013FC3333333333337C00BFFFFFFFFFFFEC020000000000001C01D5 555555555573FBFF3DD1BAF98DEC00BFFFFFFFFFFFEC020000000000001C01AAAAAAAA AAAAC3FBA438215FF3DD6C00BFFFFFFFFFFFEC020000000000001C0180000000000013 FB555555555555AC00BFFFFFFFFFFFEC020000000000001C0155555555555563FB1295 6D9B1DF65C00BFFFFFFFFFFFEC020000000000001C012AAAAAAAAAAAB3FAB7F0D4629B 7F7C00BFFFFFFFFFFFEC020000000000001C0100000000000003FA62FC962FC9634C00 BFFFFFFFFFFFEC020000000000001C00AAAAAAAAAAAAB3FA264E209DC5986C00BFFFFF FFFFFFEC020000000000001C0055555555555563FA01E573AC901EAC00BFFFFFFFFFFF EC020000000000001C0000000000000013F9EB851EB851EC0C00BFFFFFFFFFFFEC0200 00000000001BFF55555555555583FA01E573AC901E9C00BFFFFFFFFFFFEC0200000000 00001BFE555555555555B3FA264E209DC5985C00BFFFFFFFFFFFEC020000000000001B CC80000000000003FA62FC962FC9633C00BFFFFFFFFFFFEC0200000000000013FE5555 55555554F3FAB7F0D4629B7F3C00BFFFFFFFFFFFEC0200000000000013FF5555555555 5523FB12956D9B1DF63C00BFFFFFFFFFFFEC0200000000000013FFFFFFFFFFFFFFC3FB 5555555555556C00BFFFFFFFFFFFEC02000000000000140055555555555533FBA43821 5FF3DD2C00BFFFFFFFFFFFEC020000000000001400AAAAAAAAAAAA83FBFF3DD1BAF98D 7C00BFFFFFFFFFFFEC020000000000001400FFFFFFFFFFFFD3FC3333333333332C00BF FFFFFFFFFFEC0200000000000014012AAAAAAAAAAA93FC6CD8EFB11D33EC00BFFFFFFF FFFFEC02000000000000140155555555555543FCAC901E573AC8FC00BFFFFFFFFFFFEC 0200000000000014017FFFFFFFFFFFF3FCF258BF258BF25C00BFFFFFFFFFFFEC020000 000000001401AAAAAAAAAAAAA3FD1F19690E08580C00BFFFFFFFFFFFEC020000000000 001401D5555555555553FD480F2B9D6480FC00BFFFFFFFFFFFEC020000000000001402 00000000000003FD740DA740DA742C00BFFFFFFFFFFFEC020000000000001402155555 55555553FDA314DBF86A315C00BFFFFFFFFFFFEC0200000000000014022AAAAAAAAAAA A3FDD524C9C413B8AC00BFFFFFFFFFFFEC0200000000000014023FFFFFFFFFFFF3FE05 1EB851EB852C00BFFFFFFFFFFFEC01D555555555557C0240000000000003FCA4FA4FA4 FA4FBC00BFFFFFFFFFFFEC01D555555555557C022AAAAAAAAAAAB3FC5F31AED6A9268C 00BFFFFFFFFFFFEC01D555555555557C0215555555555563FC1F7A80308B917C00BFFF FFFFFFFFEC01D555555555557C0200000000000013FBCBA9876543218C00BFFFFFFFFF FFEC01D555555555557C01D5555555555573FB6480F2B9D6487C00BFFFFFFFFFFFEC01 D555555555557C01AAAAAAAAAAAAC3FB097B425ED097FC00BFFFFFFFFFFFEC01D55555 5555557C0180000000000013FA7530ECA864209C00BFFFFFFFFFFFEC01D55555555555 7C0155555555555563F9DF623A67EAC3CC00BFFFFFFFFFFFEC01D555555555557C012A AAAAAAAAAAB3F904EE2CC0A9E94C00BFFFFFFFFFFFEC01D555555555557C0100000000 000003F76C16C16C16C38C00BFFFFFFFFFFFEC01D555555555557C00AAAAAAAAAAAABB F5E573AC901E4D6C00BFFFFFFFFFFFEC01D555555555557C005555555555556BF79CA2 52ADB3618C00BFFFFFFFFFFFEC01D555555555557C000000000000001BF7FDB97530EC A63C00BFFFFFFFFFFFEC01D555555555557BFF5555555555558BF79CA252ADB361CC00 BFFFFFFFFFFFEC01D555555555557BFE555555555555BBF5E573AC901E503C00BFFFFF FFFFFFEC01D555555555557BCC80000000000003F76C16C16C16C30C00BFFFFFFFFFFF EC01D5555555555573FE555555555554F3F904EE2CC0A9E8DC00BFFFFFFFFFFFEC01D5 555555555573FF55555555555523F9DF623A67EAC34C00BFFFFFFFFFFFEC01D5555555 555573FFFFFFFFFFFFFFC3FA7530ECA8641FFC00BFFFFFFFFFFFEC01D5555555555574 0055555555555533FB097B425ED097CC00BFFFFFFFFFFFEC01D555555555557400AAAA AAAAAAAA83FB6480F2B9D6481C00BFFFFFFFFFFFEC01D555555555557400FFFFFFFFFF FFD3FBCBA987654320FC00BFFFFFFFFFFFEC01D5555555555574012AAAAAAAAAAA93FC 1F7A80308B913C00BFFFFFFFFFFFEC01D55555555555740155555555555543FC5F31AE D6A9264C00BFFFFFFFFFFFEC01D5555555555574017FFFFFFFFFFFF3FCA4FA4FA4FA4F AC00BFFFFFFFFFFFEC01D555555555557401AAAAAAAAAAAAA3FCF0D4629B7F0D5C00BF FFFFFFFFFFEC01D555555555557401D5555555555553FD215FF3DD1BAFAC00BFFFFFFF FFFFEC01D55555555555740200000000000003FD4D5E6F8091A2CC00BFFFFFFFFFFFEC 01D55555555555740215555555555553FD7C65A438215FFC00BFFFFFFFFFFFEC01D555 5555555574022AAAAAAAAAAAA3FDAE759203CAE75C00BFFFFFFFFFFFEC01D555555555 5574023FFFFFFFFFFFF3FDE38E38E38E38DC00BFFFFFFFFFFFEC01AAAAAAAAAAAACC02 40000000000003FC60B60B60B60B5C00BFFFFFFFFFFFEC01AAAAAAAAAAAACC022AAAAA AAAAAAB3FC1AED6A9264E21C00BFFFFFFFFFFFEC01AAAAAAAAAAAACC02155555555555 63FBB66C77D88E9A0C00BFFFFFFFFFFFEC01AAAAAAAAAAAACC0200000000000013FB43 20FEDCBA98BC00BFFFFFFFFFFFEC01AAAAAAAAAAAACC01D5555555555573FAB7F0D462 9B7F5C00BFFFFFFFFFFFEC01AAAAAAAAAAAACC01AAAAAAAAAAAAC3FA01E573AC901E3C 00BFFFFFFFFFFFEC01AAAAAAAAAAAACC0180000000000013F8907F6E5D4C3B2C00BFFF FFFFFFFFEC01AAAAAAAAAAAACC015555555555556BF70AFF9EE8DD7EEC00BFFFFFFFFF FFEC01AAAAAAAAAAAACC012AAAAAAAAAAABBF91D33F561783A4C00BFFFFFFFFFFFEC01 AAAAAAAAAAAACC010000000000000BF9C71C71C71C72AC00BFFFFFFFFFFFEC01AAAAAA AAAAAACC00AAAAAAAAAAAABBFA203CAE7592043C00BFFFFFFFFFFFEC01AAAAAAAAAAAA CC005555555555556BFA44A55B66C77DEC00BFFFFFFFFFFFEC01AAAAAAAAAAAACC0000 00000000001BFA50C83FB72EA68C00BFFFFFFFFFFFEC01AAAAAAAAAAAACBFF55555555 55558BFA44A55B66C77DFC00BFFFFFFFFFFFEC01AAAAAAAAAAAACBFE555555555555BB FA203CAE7592044C00BFFFFFFFFFFFEC01AAAAAAAAAAAACBCC8000000000000BF9C71C 71C71C72CC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC3FE555555555554FBF91D33F56178 3AAC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC3FF5555555555552BF70AFF9EE8DD80FC00 BFFFFFFFFFFFEC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFC3F8907F6E5D4C38DC00BFFFFF FFFFFFEC01AAAAAAAAAAAAC40055555555555533FA01E573AC901DBC00BFFFFFFFFFFF EC01AAAAAAAAAAAAC400AAAAAAAAAAAA83FAB7F0D4629B7E6C00BFFFFFFFFFFFEC01AA AAAAAAAAAAC400FFFFFFFFFFFFD3FB4320FEDCBA981C00BFFFFFFFFFFFEC01AAAAAAAA AAAAC4012AAAAAAAAAAA93FBB66C77D88E998C00BFFFFFFFFFFFEC01AAAAAAAAAAAAC4 0155555555555543FC1AED6A9264E1DC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC4017FFF FFFFFFFFF3FC60B60B60B60B3C00BFFFFFFFFFFFEC01AAAAAAAAAAAAC401AAAAAAAAAA AAA3FCAC901E573AC8EC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC401D5555555555553FC FE7BA375F31ADC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC40200000000000003FD2B3C4D 5E6F809C00BFFFFFFFFFFFEC01AAAAAAAAAAAAC40215555555555553FD5A438215FF3D CC00BFFFFFFFFFFFEC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD8C536FE1A8C51C00BF FFFFFFFFFFEC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FDC16C16C16C16AC00BFFFFFFF FFFFEC018000000000001C0240000000000003FC258BF258BF259C00BFFFFFFFFFFFEC 018000000000001C022AAAAAAAAAAAB3FBBF86A314DBF8AC00BFFFFFFFFFFFEC018000 000000001C0215555555555563FB401845C8A0CE8C00BFFFFFFFFFFFEC018000000000 001C0200000000000013FA99999999999A6C00BFFFFFFFFFFFEC018000000000001C01 D5555555555573F99690E0857FD09C00BFFFFFFFFFFFEC018000000000001C01AAAAAA AAAAAAC3F653D0F8CB4874AC00BFFFFFFFFFFFEC018000000000001C01800000000000 1BF91111111111107C00BFFFFFFFFFFFEC018000000000001C015555555555556BFA0E 0857FCF746EC00BFFFFFFFFFFFEC018000000000001C012AAAAAAAAAAABBFA7B425ED0 97B42C00BFFFFFFFFFFFEC018000000000001C010000000000000BFAD0369D0369D05C 00BFFFFFFFFFFFEC018000000000001C00AAAAAAAAAAAABBFB0672894AB6CD9C00BFFF FFFFFFFFEC018000000000001C005555555555556BFB18A6DFC3518A7C00BFFFFFFFFF FFEC018000000000001C000000000000001BFB1EB851EB851ECC00BFFFFFFFFFFFEC01 8000000000001BFF5555555555558BFB18A6DFC3518A7C00BFFFFFFFFFFFEC01800000 0000001BFE555555555555BBFB0672894AB6CDAC00BFFFFFFFFFFFEC01800000000000 1BCC8000000000000BFAD0369D0369D05C00BFFFFFFFFFFFEC0180000000000013FE55 5555555554FBFA7B425ED097B45C00BFFFFFFFFFFFEC0180000000000013FF55555555 55552BFA0E0857FCF7472C00BFFFFFFFFFFFEC0180000000000013FFFFFFFFFFFFFFCB F91111111111118C00BFFFFFFFFFFFEC01800000000000140055555555555533F653D0 F8CB486BAC00BFFFFFFFFFFFEC018000000000001400AAAAAAAAAAAA83F99690E0857F CECC00BFFFFFFFFFFFEC018000000000001400FFFFFFFFFFFFD3FA9999999999992C00 BFFFFFFFFFFFEC0180000000000014012AAAAAAAAAAA93FB401845C8A0CE1C00BFFFFF FFFFFFEC01800000000000140155555555555543FBBF86A314DBF83C00BFFFFFFFFFFF EC0180000000000014017FFFFFFFFFFFF3FC258BF258BF257C00BFFFFFFFFFFFEC0180 00000000001401AAAAAAAAAAAAA3FC7166054F43E32C00BFFFFFFFFFFFEC0180000000 00001401D5555555555553FCC3518A6DFC351C00BFFFFFFFFFFFEC0180000000000014 0200000000000003FD0DA740DA740DBC00BFFFFFFFFFFFEC0180000000000014021555 5555555553FD3CAE759203CAEC00BFFFFFFFFFFFEC0180000000000014022AAAAAAAAA AAA3FD6EBE635DAD523C00BFFFFFFFFFFFEC0180000000000014023FFFFFFFFFFFF3FD A3D70A3D70A3CC00BFFFFFFFFFFFEC015555555555556C0240000000000003FBE6F809 1A2B3C3C00BFFFFFFFFFFFEC015555555555556C022AAAAAAAAAAAB3FB5B66C77D88E9 AC00BFFFFFFFFFFFEC015555555555556C0215555555555563FAB7F0D4629B7F1C00BF FFFFFFFFFFEC015555555555556C0200000000000013F9A2B3C4D5E6F8BC00BFFFFFFF FFFFEC015555555555556C01D5555555555573F3845C8A0CE524CC00BFFFFFFFFFFFEC 015555555555556C01AAAAAAAAAAAACBF966054F43E32D7C00BFFFFFFFFFFFEC015555 555555556C018000000000001BFA50C83FB72EA63C00BFFFFFFFFFFFEC015555555555 556C015555555555556BFAD6480F2B9D64EC00BFFFFFFFFFFFEC015555555555556C01 2AAAAAAAAAAABBFB21C10AFF9EE91C00BFFFFFFFFFFFEC015555555555556C01000000 0000000BFB4C3B2A1907F72C00BFFFFFFFFFFFEC015555555555556C00AAAAAAAAAAAA BBFB6A9264E209DC9C00BFFFFFFFFFFFEC015555555555556C005555555555556BFB7C C6BB5AA4997C00BFFFFFFFFFFFEC015555555555556C000000000000001BFB82D82D82 D82DCC00BFFFFFFFFFFFEC015555555555556BFF5555555555558BFB7CC6BB5AA4997C 00BFFFFFFFFFFFEC015555555555556BFE555555555555BBFB6A9264E209DCAC00BFFF FFFFFFFFEC015555555555556BCC8000000000000BFB4C3B2A1907F73C00BFFFFFFFFF FFEC0155555555555563FE555555555554FBFB21C10AFF9EE93C00BFFFFFFFFFFFEC01 55555555555563FF5555555555552BFAD6480F2B9D652C00BFFFFFFFFFFFEC01555555 55555563FFFFFFFFFFFFFFCBFA50C83FB72EA6CC00BFFFFFFFFFFFEC01555555555555 64005555555555553BF966054F43E32EAC00BFFFFFFFFFFFEC015555555555556400AA AAAAAAAAAA83F3845C8A0CE4B05C00BFFFFFFFFFFFEC015555555555556400FFFFFFFF FFFFD3F9A2B3C4D5E6F65C00BFFFFFFFFFFFEC0155555555555564012AAAAAAAAAAA93 FAB7F0D4629B7E2C00BFFFFFFFFFFFEC01555555555555640155555555555543FB5B66 C77D88E93C00BFFFFFFFFFFFEC0155555555555564017FFFFFFFFFFFF3FBE6F8091A2B 3BEC00BFFFFFFFFFFFEC015555555555556401AAAAAAAAAAAAA3FC3F5617839A5BAC00 BFFFFFFFFFFFEC015555555555556401D5555555555553FC91419CA252AD9C00BFFFFF FFFFFFEC01555555555555640200000000000003FCE93E93E93E93EC00BFFFFFFFFFFF EC01555555555555640215555555555553FD23A67EAC2F072C00BFFFFFFFFFFFEC0155 555555555564022AAAAAAAAAAAA3FD55B66C77D88E7C00BFFFFFFFFFFFEC0155555555 555564023FFFFFFFFFFFF3FD8ACF13579BE00C00BFFFFFFFFFFFEC012AAAAAAAAAAABC 0240000000000003FB950C83FB72EA3C00BFFFFFFFFFFFEC012AAAAAAAAAAABC022AAA AAAAAAAAB3FB097B425ED097CC00BFFFFFFFFFFFEC012AAAAAAAAAAABC021555555555 5563FA1419CA252ADB1C00BFFFFFFFFFFFEC012AAAAAAAAAAABC0200000000000013F7 6C16C16C16C2DC00BFFFFFFFFFFFEC012AAAAAAAAAAABC01D555555555557BF9419CA2 52ADB37C00BFFFFFFFFFFFEC012AAAAAAAAAAABC01AAAAAAAAAAAACBFA56D9B1DF623A BC00BFFFFFFFFFFFEC012AAAAAAAAAAABC018000000000001BFAF49F49F49F4A3C00BF FFFFFFFFFFEC012AAAAAAAAAAABC015555555555556BFB3D0F8CB487045C00BFFFFFFF FFFFEC012AAAAAAAAAAABC012AAAAAAAAAAABBFB73AC901E573AFC00BFFFFFFFFFFFEC 012AAAAAAAAAAABC010000000000000BFB9E26AF37C0490C00BFFFFFFFFFFFEC012AAA AAAAAAAABC00AAAAAAAAAAAABBFBBC7DEA00C22E7C00BFFFFFFFFFFFEC012AAAAAAAAA AABC005555555555556BFBCEB240795CEB5C00BFFFFFFFFFFFEC012AAAAAAAAAAABC00 0000000000001BFBD4C3B2A1907FCC00BFFFFFFFFFFFEC012AAAAAAAAAAABBFF555555 5555558BFBCEB240795CEB6C00BFFFFFFFFFFFEC012AAAAAAAAAAABBFE555555555555 BBFBBC7DEA00C22E9C00BFFFFFFFFFFFEC012AAAAAAAAAAABBCC8000000000000BFB9E 26AF37C0492C00BFFFFFFFFFFFEC012AAAAAAAAAAAB3FE555555555554FBFB73AC901E 573B2C00BFFFFFFFFFFFEC012AAAAAAAAAAAB3FF5555555555552BFB3D0F8CB487048C 00BFFFFFFFFFFFEC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFAF49F49F49F4AAC00BFFF FFFFFFFFEC012AAAAAAAAAAAB4005555555555553BFA56D9B1DF623B2C00BFFFFFFFFF FFEC012AAAAAAAAAAAB400AAAAAAAAAAAA8BF9419CA252ADB50C00BFFFFFFFFFFFEC01 2AAAAAAAAAAAB400FFFFFFFFFFFFD3F76C16C16C16B9FC00BFFFFFFFFFFFEC012AAAAA AAAAAAB4012AAAAAAAAAAA93FA1419CA252ADA4C00BFFFFFFFFFFFEC012AAAAAAAAAAA B40155555555555543FB097B425ED0974C00BFFFFFFFFFFFEC012AAAAAAAAAAAB4017F FFFFFFFFFFF3FB950C83FB72E9FC00BFFFFFFFFFFFEC012AAAAAAAAAAAB401AAAAAAAA AAAAA3FC166054F43E32AC00BFFFFFFFFFFFEC012AAAAAAAAAAAB401D5555555555553 FC684BDA12F684AC00BFFFFFFFFFFFEC012AAAAAAAAAAAB40200000000000003FCC048 D159E26AEC00BFFFFFFFFFFFEC012AAAAAAAAAAAB40215555555555553FD0F2B9D6480 F2AC00BFFFFFFFFFFFEC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD413B8B302A7A0C00 BFFFFFFFFFFFEC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FD7654320FEDCB8C00BFFFFF FFFFFFEC010000000000000C0240000000000003FB5555555555553C00BFFFFFFFFFFF EC010000000000000C022AAAAAAAAAAAB3FA9388277166054C00BFFFFFFFFFFFEC0100 00000000000C0215555555555563F92956D9B1DF61AC00BFFFFFFFFFFFEC0100000000 00000C020000000000001BF847AE147AE1479C00BFFFFFFFFFFFEC010000000000000C 01D555555555557BFA203CAE759203FC00BFFFFFFFFFFFEC010000000000000C01AAAA AAAAAAAACBFAD6480F2B9D64FC00BFFFFFFFFFFFEC010000000000000C018000000000 001BFB3A06D3A06D3A4C00BFFFFFFFFFFFEC010000000000000C015555555555556BFB 7CC6BB5AA4997C00BFFFFFFFFFFFEC010000000000000C012AAAAAAAAAAABBFBB363BE C474D01C00BFFFFFFFFFFFEC010000000000000C010000000000000BFBDDDDDDDDDDDE 2C00BFFFFFFFFFFFEC010000000000000C00AAAAAAAAAAAABBFBFC3518A6DFC39C00BF FFFFFFFFFFEC010000000000000C005555555555556BFC0734B78FBD404C00BFFFFFFF FFFFEC010000000000000C000000000000001BFC0A3D70A3D70A7C00BFFFFFFFFFFFEC 010000000000000BFF5555555555558BFC0734B78FBD404C00BFFFFFFFFFFFEC010000 000000000BFE555555555555BBFBFC3518A6DFC3BC00BFFFFFFFFFFFEC010000000000 000BCC8000000000000BFBDDDDDDDDDDDE4C00BFFFFFFFFFFFEC0100000000000003FE 555555555554FBFBB363BEC474D04C00BFFFFFFFFFFFEC0100000000000003FF555555 5555552BFB7CC6BB5AA499AC00BFFFFFFFFFFFEC0100000000000003FFFFFFFFFFFFFF CBFB3A06D3A06D3A7C00BFFFFFFFFFFFEC0100000000000004005555555555553BFAD6 480F2B9D656C00BFFFFFFFFFFFEC010000000000000400AAAAAAAAAAAA8BFA203CAE75 9204DC00BFFFFFFFFFFFEC010000000000000400FFFFFFFFFFFFDBF847AE147AE14C0C 00BFFFFFFFFFFFEC0100000000000004012AAAAAAAAAAA93F92956D9B1DF5FFC00BFFF FFFFFFFFEC01000000000000040155555555555543FA9388277166044C00BFFFFFFFFF FFEC0100000000000004017FFFFFFFFFFFF3FB555555555554DC00BFFFFFFFFFFFEC01 0000000000000401AAAAAAAAAAAAA3FBED097B425ED03C00BFFFFFFFFFFFEC01000000 0000000401D5555555555553FC487042BFE7BA1C00BFFFFFFFFFFFEC01000000000000 040200000000000003FCA06D3A06D3A05C00BFFFFFFFFFFFEC01000000000000040215 555555555553FCFE7BA375F31ACC00BFFFFFFFFFFFEC0100000000000004022AAAAAAA AAAAA3FD314DBF86A314BC00BFFFFFFFFFFFEC0100000000000004023FFFFFFFFFFFF3 FD6666666666664C00BFFFFFFFFFFFEC00AAAAAAAAAAAABC0240000000000003FB27D2 7D27D27CFC00BFFFFFFFFFFFEC00AAAAAAAAAAAABC022AAAAAAAAAAAB3FA3882771660 550C00BFFFFFFFFFFFEC00AAAAAAAAAAAABC0215555555555563F7CD2DE3EF50048C00 BFFFFFFFFFFFEC00AAAAAAAAAAAABC020000000000001BF959E26AF37C045C00BFFFFF FFFFFFEC00AAAAAAAAAAAABC01D555555555557BFA7B425ED097B43C00BFFFFFFFFFFF EC00AAAAAAAAAAAABC01AAAAAAAAAAAACBFB18A6DFC3518AAC00BFFFFFFFFFFFEC00AA AAAAAAAAAABC018000000000001BFB6789ABCDF0126C00BFFFFFFFFFFFEC00AAAAAAAA AAAABC015555555555556BFBAA4993882771BC00BFFFFFFFFFFFEC00AAAAAAAAAAAABC 012AAAAAAAAAAABBFBE0E696F1F7A85C00BFFFFFFFFFFFEC00AAAAAAAAAAAABC010000 000000000BFC05B05B05B05B3C00BFFFFFFFFFFFEC00AAAAAAAAAAAABC00AAAAAAAAAA AABBFC14DBF86A314DFC00BFFFFFFFFFFFEC00AAAAAAAAAAAABC005555555555556BFC 1DF623A67EAC6C00BFFFFFFFFFFFEC00AAAAAAAAAAAABC000000000000001BFC20FEDC BA98768C00BFFFFFFFFFFFEC00AAAAAAAAAAAABBFF5555555555558BFC1DF623A67EAC 5C00BFFFFFFFFFFFEC00AAAAAAAAAAAABBFE555555555555BBFC14DBF86A314DFC00BF FFFFFFFFFFEC00AAAAAAAAAAAABBCC8000000000000BFC05B05B05B05B3C00BFFFFFFF FFFFEC00AAAAAAAAAAAAB3FE555555555554FBFBE0E696F1F7A87C00BFFFFFFFFFFFEC 00AAAAAAAAAAAAB3FF5555555555552BFBAA4993882771DC00BFFFFFFFFFFFEC00AAAA AAAAAAAAB3FFFFFFFFFFFFFFCBFB6789ABCDF012AC00BFFFFFFFFFFFEC00AAAAAAAAAA AAB4005555555555553BFB18A6DFC3518AEC00BFFFFFFFFFFFEC00AAAAAAAAAAAAB400 AAAAAAAAAAAA8BFA7B425ED097B53C00BFFFFFFFFFFFEC00AAAAAAAAAAAAB400FFFFFF FFFFFFDBF959E26AF37C06CC00BFFFFFFFFFFFEC00AAAAAAAAAAAAB4012AAAAAAAAAAA 93F7CD2DE3EF4FFCCC00BFFFFFFFFFFFEC00AAAAAAAAAAAAB40155555555555543FA38 8277166053EC00BFFFFFFFFFFFEC00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FB27D27D27 D27CAC00BFFFFFFFFFFFEC00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FBBF86A314DBF80C 00BFFFFFFFFFFFEC00AAAAAAAAAAAAB401D5555555555553FC31AED6A9264DFC00BFFF FFFFFFFFEC00AAAAAAAAAAAAB40200000000000003FC89ABCDF012344C00BFFFFFFFFF FFEC00AAAAAAAAAAAAB40215555555555553FCE7BA375F31AEAC00BFFFFFFFFFFFEC00 AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD25ED097B425EAC00BFFFFFFFFFFFEC00AAAAAA AAAAAAB4023FFFFFFFFFFFF3FD5B05B05B05B03C00BFFFFFFFFFFFEC00555555555555 6C0240000000000003FB0C83FB72EA61BC00BFFFFFFFFFFFEC005555555555556C022A AAAAAAAAAAB3FA01E573AC901E8C00BFFFFFFFFFFFEC005555555555556C0215555555 555563F3845C8A0CE4E7EC00BFFFFFFFFFFFEC005555555555556C020000000000001B F9C71C71C71C715C00BFFFFFFFFFFFEC005555555555556C01D555555555557BFAB1DF 623A67EABC00BFFFFFFFFFFFEC005555555555556C01AAAAAAAAAAAACBFB33F5617839 A5EC00BFFFFFFFFFFFEC005555555555556C018000000000001BFB82D82D82D82DAC00 BFFFFFFFFFFFEC005555555555556C015555555555556BFBC598153D0F8CFC00BFFFFF FFFFFFEC005555555555556C012AAAAAAAAAAABBFBFC3518A6DFC39C00BFFFFFFFFFFF EC005555555555556C010000000000000BFC13579BE02468DC00BFFFFFFFFFFFEC0055 55555555556C00AAAAAAAAAAAABBFC22833944A55B9C00BFFFFFFFFFFFEC0055555555 55556C005555555555556BFC2B9D6480F2BA0C00BFFFFFFFFFFFEC005555555555556C 000000000000001BFC2EA61D950C842C00BFFFFFFFFFFFEC005555555555556BFF5555 555555558BFC2B9D6480F2B9FC00BFFFFFFFFFFFEC005555555555556BFE5555555555 55BBFC22833944A55B9C00BFFFFFFFFFFFEC005555555555556BCC8000000000000BFC 13579BE02468DC00BFFFFFFFFFFFEC0055555555555563FE555555555554FBFBFC3518 A6DFC3AC00BFFFFFFFFFFFEC0055555555555563FF5555555555552BFBC598153D0F8D 1C00BFFFFFFFFFFFEC0055555555555563FFFFFFFFFFFFFFCBFB82D82D82D82DEC00BF FFFFFFFFFFEC0055555555555564005555555555553BFB33F5617839A62C00BFFFFFFF FFFFEC005555555555556400AAAAAAAAAAAA8BFAB1DF623A67EBBC00BFFFFFFFFFFFEC 005555555555556400FFFFFFFFFFFFDBF9C71C71C71C73CC00BFFFFFFFFFFFEC005555 5555555564012AAAAAAAAAAA93F3845C8A0CE48C3C00BFFFFFFFFFFFEC005555555555 55640155555555555543FA01E573AC901D6C00BFFFFFFFFFFFEC005555555555556401 7FFFFFFFFFFFF3FB0C83FB72EA616C00BFFFFFFFFFFFEC005555555555556401AAAAAA AAAAAAA3FBA438215FF3DCCC00BFFFFFFFFFFFEC005555555555556401D55555555555 53FC240795CEB2405C00BFFFFFFFFFFFEC00555555555555640200000000000003FC7C 048D159E26AC00BFFFFFFFFFFFEC00555555555555640215555555555553FCDA12F684 BDA10C00BFFFFFFFFFFFEC0055555555555564022AAAAAAAAAAAA3FD1F19690E0857DC 00BFFFFFFFFFFFEC0055555555555564023FFFFFFFFFFFF3FD54320FEDCBA96C00BFFF FFFFFFFFEC000000000000001C0240000000000003FB0369D0369D033C00BFFFFFFFFF FFEC000000000000001C022AAAAAAAAAAAB3F9DF623A67EAC30C00BFFFFFFFFFFFEC00 0000000000001C021555555555556BF5E573AC901E660C00BFFFFFFFFFFFEC00000000 0000001C020000000000001BF9EB851EB851EB5C00BFFFFFFFFFFFEC00000000000000 1C01D555555555557BFAC413B8B302A7BC00BFFFFFFFFFFFEC000000000000001C01AA AAAAAAAAAACBFB3D0F8CB487046C00BFFFFFFFFFFFEC000000000000001C0180000000 00001BFB8BF258BF258C2C00BFFFFFFFFFFFEC000000000000001C015555555555556B FBCEB240795CEB7C00BFFFFFFFFFFFEC000000000000001C012AAAAAAAAAAABBFC02A7 A1F196910C00BFFFFFFFFFFFEC000000000000001C010000000000000BFC17E4B17E4B 181C00BFFFFFFFFFFFEC000000000000001C00AAAAAAAAAAAABBFC27104EE2CC0ADC00 BFFFFFFFFFFFEC000000000000001C005555555555556BFC302A7A1F19694C00BFFFFF FFFFFFEC000000000000001C000000000000001BFC3333333333336C00BFFFFFFFFFFF EC000000000000001BFF5555555555558BFC302A7A1F19693C00BFFFFFFFFFFFEC0000 00000000001BFE555555555555BBFC27104EE2CC0ADC00BFFFFFFFFFFFEC0000000000 00001BCC8000000000000BFC17E4B17E4B181C00BFFFFFFFFFFFEC0000000000000013 FE555555555554FBFC02A7A1F196911C00BFFFFFFFFFFFEC0000000000000013FF5555 555555552BFBCEB240795CEB9C00BFFFFFFFFFFFEC0000000000000013FFFFFFFFFFFF FFCBFB8BF258BF258C6C00BFFFFFFFFFFFEC0000000000000014005555555555553BFB 3D0F8CB48704AC00BFFFFFFFFFFFEC000000000000001400AAAAAAAAAAAA8BFAC413B8 B302A8BC00BFFFFFFFFFFFEC000000000000001400FFFFFFFFFFFFDBF9EB851EB851ED CC00BFFFFFFFFFFFEC0000000000000014012AAAAAAAAAAA9BF5E573AC901E7CFC00BF FFFFFFFFFFEC00000000000000140155555555555543F9DF623A67EAC0BC00BFFFFFFF FFFFEC0000000000000014017FFFFFFFFFFFF3FB0369D0369D02EC00BFFFFFFFFFFFEC 000000000000001401AAAAAAAAAAAAA3FB9B1DF623A67E4C00BFFFFFFFFFFFEC000000 000000001401D5555555555553FC1F7A80308B911C00BFFFFFFFFFFFEC000000000000 00140200000000000003FC7777777777776C00BFFFFFFFFFFFEC000000000000001402 15555555555553FCD585E0E696F1CC00BFFFFFFFFFFFEC0000000000000014022AAAAA AAAAAAA3FD1CD2DE3EF5003C00BFFFFFFFFFFFEC0000000000000014023FFFFFFFFFFF F3FD51EB851EB851CC00BFFFFFFFFFFFEBFF5555555555558C0240000000000003FB0C 83FB72EA617C00BFFFFFFFFFFFEBFF5555555555558C022AAAAAAAAAAAB3FA01E573AC 901E0C00BFFFFFFFFFFFEBFF5555555555558C0215555555555563F3845C8A0CE4E7EC 00BFFFFFFFFFFFEBFF5555555555558C020000000000001BF9C71C71C71C71DC00BFFF FFFFFFFFEBFF5555555555558C01D555555555557BFAB1DF623A67EAFC00BFFFFFFFFF FFEBFF5555555555558C01AAAAAAAAAAAACBFB33F5617839A60C00BFFFFFFFFFFFEBFF 5555555555558C018000000000001BFB82D82D82D82DCC00BFFFFFFFFFFFEBFF555555 5555558C015555555555556BFBC598153D0F8D1C00BFFFFFFFFFFFEBFF555555555555 8C012AAAAAAAAAAABBFBFC3518A6DFC3BC00BFFFFFFFFFFFEBFF5555555555558C0100 00000000000BFC13579BE02468EC00BFFFFFFFFFFFEBFF5555555555558C00AAAAAAAA AAAABBFC22833944A55BAC00BFFFFFFFFFFFEBFF5555555555558C005555555555556B FC2B9D6480F2BA1C00BFFFFFFFFFFFEBFF5555555555558C000000000000001BFC2EA6 1D950C843C00BFFFFFFFFFFFEBFF5555555555558BFF5555555555558BFC2B9D6480F2 BA0C00BFFFFFFFFFFFEBFF5555555555558BFE555555555555BBFC22833944A55BAC00 BFFFFFFFFFFFEBFF5555555555558BCC8000000000000BFC13579BE02468EC00BFFFFF FFFFFFEBFF55555555555583FE555555555554FBFBFC3518A6DFC3CC00BFFFFFFFFFFF EBFF55555555555583FF5555555555552BFBC598153D0F8D3C00BFFFFFFFFFFFEBFF55 555555555583FFFFFFFFFFFFFFCBFB82D82D82D82E0C00BFFFFFFFFFFFEBFF55555555 555584005555555555553BFB33F5617839A64C00BFFFFFFFFFFFEBFF55555555555584 00AAAAAAAAAAAA8BFAB1DF623A67EBFC00BFFFFFFFFFFFEBFF5555555555558400FFFF FFFFFFFFDBF9C71C71C71C744C00BFFFFFFFFFFFEBFF55555555555584012AAAAAAAAA AA93F3845C8A0CE46C3C00BFFFFFFFFFFFEBFF555555555555840155555555555543FA 01E573AC901D2C00BFFFFFFFFFFFEBFF55555555555584017FFFFFFFFFFFF3FB0C83FB 72EA614C00BFFFFFFFFFFFEBFF5555555555558401AAAAAAAAAAAAA3FBA438215FF3DC AC00BFFFFFFFFFFFEBFF5555555555558401D5555555555553FC240795CEB2404C00BF FFFFFFFFFFEBFF555555555555840200000000000003FC7C048D159E268C00BFFFFFFF FFFFEBFF555555555555840215555555555553FCDA12F684BDA0FC00BFFFFFFFFFFFEB FF55555555555584022AAAAAAAAAAAA3FD1F19690E0857DC00BFFFFFFFFFFFEBFF5555 5555555584023FFFFFFFFFFFF3FD54320FEDCBA95C00BFFFFFFFFFFFEBFE5555555555 55BC0240000000000003FB27D27D27D27CFC00BFFFFFFFFFFFEBFE555555555555BC02 2AAAAAAAAAAAB3FA3882771660550C00BFFFFFFFFFFFEBFE555555555555BC02155555 55555563F7CD2DE3EF50048C00BFFFFFFFFFFFEBFE555555555555BC02000000000000 1BF959E26AF37C045C00BFFFFFFFFFFFEBFE555555555555BC01D555555555557BFA7B 425ED097B43C00BFFFFFFFFFFFEBFE555555555555BC01AAAAAAAAAAAACBFB18A6DFC3 518AAC00BFFFFFFFFFFFEBFE555555555555BC018000000000001BFB6789ABCDF0126C 00BFFFFFFFFFFFEBFE555555555555BC015555555555556BFBAA4993882771BC00BFFF FFFFFFFFEBFE555555555555BC012AAAAAAAAAAABBFBE0E696F1F7A85C00BFFFFFFFFF FFEBFE555555555555BC010000000000000BFC05B05B05B05B3C00BFFFFFFFFFFFEBFE 555555555555BC00AAAAAAAAAAAABBFC14DBF86A314DFC00BFFFFFFFFFFFEBFE555555 555555BC005555555555556BFC1DF623A67EAC6C00BFFFFFFFFFFFEBFE555555555555 BC000000000000001BFC20FEDCBA98768C00BFFFFFFFFFFFEBFE555555555555BBFF55 55555555558BFC1DF623A67EAC5C00BFFFFFFFFFFFEBFE555555555555BBFE55555555 5555BBFC14DBF86A314DFC00BFFFFFFFFFFFEBFE555555555555BBCC8000000000000B FC05B05B05B05B3C00BFFFFFFFFFFFEBFE555555555555B3FE555555555554FBFBE0E6 96F1F7A87C00BFFFFFFFFFFFEBFE555555555555B3FF5555555555552BFBAA49938827 71DC00BFFFFFFFFFFFEBFE555555555555B3FFFFFFFFFFFFFFCBFB6789ABCDF012AC00 BFFFFFFFFFFFEBFE555555555555B4005555555555553BFB18A6DFC3518AEC00BFFFFF FFFFFFEBFE555555555555B400AAAAAAAAAAAA8BFA7B425ED097B53C00BFFFFFFFFFFF EBFE555555555555B400FFFFFFFFFFFFDBF959E26AF37C06CC00BFFFFFFFFFFFEBFE55 5555555555B4012AAAAAAAAAAA93F7CD2DE3EF4FFCCC00BFFFFFFFFFFFEBFE55555555 5555B40155555555555543FA388277166053EC00BFFFFFFFFFFFEBFE555555555555B4 017FFFFFFFFFFFF3FB27D27D27D27CAC00BFFFFFFFFFFFEBFE555555555555B401AAAA AAAAAAAAA3FBBF86A314DBF80C00BFFFFFFFFFFFEBFE555555555555B401D555555555 5553FC31AED6A9264DFC00BFFFFFFFFFFFEBFE555555555555B40200000000000003FC 89ABCDF012344C00BFFFFFFFFFFFEBFE555555555555B40215555555555553FCE7BA37 5F31AEAC00BFFFFFFFFFFFEBFE555555555555B4022AAAAAAAAAAAA3FD25ED097B425E AC00BFFFFFFFFFFFEBFE555555555555B4023FFFFFFFFFFFF3FD5B05B05B05B03C00BF FFFFFFFFFFEBCC8000000000000C0240000000000003FB555555555554FC00BFFFFFFF FFFFEBCC8000000000000C022AAAAAAAAAAAB3FA9388277166050C00BFFFFFFFFFFFEB CC8000000000000C0215555555555563F92956D9B1DF61AC00BFFFFFFFFFFFEBCC8000 000000000C020000000000001BF847AE147AE1479C00BFFFFFFFFFFFEBCC8000000000 000C01D555555555557BFA203CAE759203FC00BFFFFFFFFFFFEBCC8000000000000C01 AAAAAAAAAAAACBFAD6480F2B9D64FC00BFFFFFFFFFFFEBCC8000000000000C01800000 0000001BFB3A06D3A06D3A4C00BFFFFFFFFFFFEBCC8000000000000C01555555555555 6BFB7CC6BB5AA4999C00BFFFFFFFFFFFEBCC8000000000000C012AAAAAAAAAAABBFBB3 63BEC474D03C00BFFFFFFFFFFFEBCC8000000000000C010000000000000BFBDDDDDDDD DDDE4C00BFFFFFFFFFFFEBCC8000000000000C00AAAAAAAAAAAABBFBFC3518A6DFC3BC 00BFFFFFFFFFFFEBCC8000000000000C005555555555556BFC0734B78FBD405C00BFFF FFFFFFFFEBCC8000000000000C000000000000001BFC0A3D70A3D70A7C00BFFFFFFFFF FFEBCC8000000000000BFF5555555555558BFC0734B78FBD404C00BFFFFFFFFFFFEBCC 8000000000000BFE555555555555BBFBFC3518A6DFC3BC00BFFFFFFFFFFFEBCC800000 0000000BCC8000000000000BFBDDDDDDDDDDDE5C00BFFFFFFFFFFFEBCC800000000000 03FE555555555554FBFBB363BEC474D05C00BFFFFFFFFFFFEBCC80000000000003FF55 55555555552BFB7CC6BB5AA499BC00BFFFFFFFFFFFEBCC80000000000003FFFFFFFFFF FFFFCBFB3A06D3A06D3A8C00BFFFFFFFFFFFEBCC80000000000004005555555555553B FAD6480F2B9D658C00BFFFFFFFFFFFEBCC8000000000000400AAAAAAAAAAAA8BFA203C AE759204FC00BFFFFFFFFFFFEBCC8000000000000400FFFFFFFFFFFFDBF847AE147AE1 4C8C00BFFFFFFFFFFFEBCC80000000000004012AAAAAAAAAAA93F92956D9B1DF5FBC00 BFFFFFFFFFFFEBCC800000000000040155555555555543FA9388277166042C00BFFFFF FFFFFFEBCC80000000000004017FFFFFFFFFFFF3FB555555555554CC00BFFFFFFFFFFF EBCC8000000000000401AAAAAAAAAAAAA3FBED097B425ED02C00BFFFFFFFFFFFEBCC80 00000000000401D5555555555553FC487042BFE7BA0C00BFFFFFFFFFFFEBCC80000000 0000040200000000000003FCA06D3A06D3A04C00BFFFFFFFFFFFEBCC80000000000004 0215555555555553FCFE7BA375F31ABC00BFFFFFFFFFFFEBCC80000000000004022AAA AAAAAAAAA3FD314DBF86A314BC00BFFFFFFFFFFFEBCC80000000000004023FFFFFFFFF FFF3FD6666666666663C00BFFFFFFFFFFFE3FE555555555554FC0240000000000003FB 950C83FB72EA1C00BFFFFFFFFFFFE3FE555555555554FC022AAAAAAAAAAAB3FB097B42 5ED097AC00BFFFFFFFFFFFE3FE555555555554FC0215555555555563FA1419CA252ADA DC00BFFFFFFFFFFFE3FE555555555554FC0200000000000013F76C16C16C16C0DC00BF FFFFFFFFFFE3FE555555555554FC01D555555555557BF9419CA252ADB3FC00BFFFFFFF FFFFE3FE555555555554FC01AAAAAAAAAAAACBFA56D9B1DF623AFC00BFFFFFFFFFFFE3 FE555555555554FC018000000000001BFAF49F49F49F4A7C00BFFFFFFFFFFFE3FE5555 55555554FC015555555555556BFB3D0F8CB487047C00BFFFFFFFFFFFE3FE5555555555 54FC012AAAAAAAAAAABBFB73AC901E573B1C00BFFFFFFFFFFFE3FE555555555554FC01 0000000000000BFB9E26AF37C0492C00BFFFFFFFFFFFE3FE555555555554FC00AAAAAA AAAAAABBFBBC7DEA00C22E9C00BFFFFFFFFFFFE3FE555555555554FC00555555555555 6BFBCEB240795CEB7C00BFFFFFFFFFFFE3FE555555555554FC000000000000001BFBD4 C3B2A1907FEC00BFFFFFFFFFFFE3FE555555555554FBFF5555555555558BFBCEB24079 5CEB8C00BFFFFFFFFFFFE3FE555555555554FBFE555555555555BBFBBC7DEA00C22EBC 00BFFFFFFFFFFFE3FE555555555554FBCC8000000000000BFB9E26AF37C0494C00BFFF FFFFFFFFE3FE555555555554F3FE555555555554FBFB73AC901E573B4C00BFFFFFFFFF FFE3FE555555555554F3FF5555555555552BFB3D0F8CB48704AC00BFFFFFFFFFFFE3FE 555555555554F3FFFFFFFFFFFFFFCBFAF49F49F49F4AEC00BFFFFFFFFFFFE3FE555555 555554F4005555555555553BFA56D9B1DF623B6C00BFFFFFFFFFFFE3FE555555555554 F400AAAAAAAAAAAA8BF9419CA252ADB58C00BFFFFFFFFFFFE3FE555555555554F400FF FFFFFFFFFFD3F76C16C16C16B7FC00BFFFFFFFFFFFE3FE555555555554F4012AAAAAAA AAAA93FA1419CA252ADA0C00BFFFFFFFFFFFE3FE555555555554F40155555555555543 FB097B425ED0972C00BFFFFFFFFFFFE3FE555555555554F4017FFFFFFFFFFFF3FB950C 83FB72E9DC00BFFFFFFFFFFFE3FE555555555554F401AAAAAAAAAAAAA3FC166054F43E 329C00BFFFFFFFFFFFE3FE555555555554F401D5555555555553FC684BDA12F6849C00 BFFFFFFFFFFFE3FE555555555554F40200000000000003FCC048D159E26ADC00BFFFFF FFFFFFE3FE555555555554F40215555555555553FD0F2B9D6480F2AC00BFFFFFFFFFFF E3FE555555555554F4022AAAAAAAAAAAA3FD413B8B302A79FC00BFFFFFFFFFFFE3FE55 5555555554F4023FFFFFFFFFFFF3FD7654320FEDCB8C00BFFFFFFFFFFFE3FF55555555 55552C0240000000000003FBE6F8091A2B3BFC00BFFFFFFFFFFFE3FF5555555555552C 022AAAAAAAAAAAB3FB5B66C77D88E98C00BFFFFFFFFFFFE3FF5555555555552C021555 5555555563FAB7F0D4629B7E9C00BFFFFFFFFFFFE3FF5555555555552C020000000000 0013F9A2B3C4D5E6F7BC00BFFFFFFFFFFFE3FF5555555555552C01D5555555555573F3 845C8A0CE4E4CC00BFFFFFFFFFFFE3FF5555555555552C01AAAAAAAAAAAACBF966054F 43E32E7C00BFFFFFFFFFFFE3FF5555555555552C018000000000001BFA50C83FB72EA6 BC00BFFFFFFFFFFFE3FF5555555555552C015555555555556BFAD6480F2B9D652C00BF FFFFFFFFFFE3FF5555555555552C012AAAAAAAAAAABBFB21C10AFF9EE93C00BFFFFFFF FFFFE3FF5555555555552C010000000000000BFB4C3B2A1907F74C00BFFFFFFFFFFFE3 FF5555555555552C00AAAAAAAAAAAABBFB6A9264E209DCBC00BFFFFFFFFFFFE3FF5555 555555552C005555555555556BFB7CC6BB5AA499AC00BFFFFFFFFFFFE3FF5555555555 552C000000000000001BFB82D82D82D82DFC00BFFFFFFFFFFFE3FF5555555555552BFF 5555555555558BFB7CC6BB5AA499AC00BFFFFFFFFFFFE3FF5555555555552BFE555555 555555BBFB6A9264E209DCDC00BFFFFFFFFFFFE3FF5555555555552BCC800000000000 0BFB4C3B2A1907F76C00BFFFFFFFFFFFE3FF55555555555523FE555555555554FBFB21 C10AFF9EE96C00BFFFFFFFFFFFE3FF55555555555523FF5555555555552BFAD6480F2B 9D658C00BFFFFFFFFFFFE3FF55555555555523FFFFFFFFFFFFFFCBFA50C83FB72EA72C 00BFFFFFFFFFFFE3FF55555555555524005555555555553BF966054F43E32F6C00BFFF FFFFFFFFE3FF5555555555552400AAAAAAAAAAAA83F3845C8A0CE4805C00BFFFFFFFFF FFE3FF5555555555552400FFFFFFFFFFFFD3F9A2B3C4D5E6F59C00BFFFFFFFFFFFE3FF 55555555555524012AAAAAAAAAAA93FAB7F0D4629B7DCC00BFFFFFFFFFFFE3FF555555 555555240155555555555543FB5B66C77D88E90C00BFFFFFFFFFFFE3FF555555555555 24017FFFFFFFFFFFF3FBE6F8091A2B3BBC00BFFFFFFFFFFFE3FF5555555555552401AA AAAAAAAAAAA3FC3F5617839A5B8C00BFFFFFFFFFFFE3FF5555555555552401D5555555 555553FC91419CA252AD8C00BFFFFFFFFFFFE3FF555555555555240200000000000003 FCE93E93E93E93CC00BFFFFFFFFFFFE3FF555555555555240215555555555553FD23A6 7EAC2F071C00BFFFFFFFFFFFE3FF55555555555524022AAAAAAAAAAAA3FD55B66C77D8 8E7C00BFFFFFFFFFFFE3FF55555555555524023FFFFFFFFFFFF3FD8ACF13579BDFFC00 BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC0240000000000003FC258BF258BF255C00BFFFFF FFFFFFE3FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FBBF86A314DBF84C00BFFFFFFFFFFF E3FFFFFFFFFFFFFFCC0215555555555563FB401845C8A0CE0C00BFFFFFFFFFFFE3FFFF FFFFFFFFFFCC0200000000000013FA9999999999996C00BFFFFFFFFFFFE3FFFFFFFFFF FFFFCC01D5555555555573F99690E0857FCE9C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC 01AAAAAAAAAAAAC3F653D0F8CB4864AC00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC018000 000000001BF91111111111127C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC015555555555 556BFA0E0857FCF747EC00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFA 7B425ED097B50C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC010000000000000BFAD0369D 0369D13C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFB0672894AB6CE 0C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFCC005555555555556BFB18A6DFC3518AEC00BF FFFFFFFFFFE3FFFFFFFFFFFFFFCC000000000000001BFB1EB851EB851F4C00BFFFFFFF FFFFE3FFFFFFFFFFFFFFCBFF5555555555558BFB18A6DFC3518AFC00BFFFFFFFFFFFE3 FFFFFFFFFFFFFFCBFE555555555555BBFB0672894AB6CE1C00BFFFFFFFFFFFE3FFFFFF FFFFFFFFCBCC8000000000000BFAD0369D0369D14C00BFFFFFFFFFFFE3FFFFFFFFFFFF FFC3FE555555555554FBFA7B425ED097B54C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC3FF 5555555555552BFA0E0857FCF7481C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC3FFFFFFFF FFFFFFCBF91111111111136C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC400555555555555 33F653D0F8CB485CAC00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC400AAAAAAAAAAAA83F996 90E0857FCCEC00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FA99999999 99983C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC4012AAAAAAAAAAA93FB401845C8A0CD9C 00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC40155555555555543FBBF86A314DBF7CC00BFFF FFFFFFFFE3FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FC258BF258BF253C00BFFFFFFFFF FFE3FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FC7166054F43E2EC00BFFFFFFFFFFFE3FF FFFFFFFFFFFFC401D5555555555553FCC3518A6DFC34DC00BFFFFFFFFFFFE3FFFFFFFF FFFFFFC40200000000000003FD0DA740DA740D9C00BFFFFFFFFFFFE3FFFFFFFFFFFFFF C40215555555555553FD3CAE759203CACC00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC4022A AAAAAAAAAAA3FD6EBE635DAD521C00BFFFFFFFFFFFE3FFFFFFFFFFFFFFC4023FFFFFFF FFFFF3FDA3D70A3D70A3AC00BFFFFFFFFFFFE4005555555555553C0240000000000003 FC60B60B60B60B2C00BFFFFFFFFFFFE4005555555555553C022AAAAAAAAAAAB3FC1AED 6A9264E1FC00BFFFFFFFFFFFE4005555555555553C0215555555555563FBB66C77D88E 99AC00BFFFFFFFFFFFE4005555555555553C0200000000000013FB4320FEDCBA985C00 BFFFFFFFFFFFE4005555555555553C01D5555555555573FAB7F0D4629B7E9C00BFFFFF FFFFFFE4005555555555553C01AAAAAAAAAAAAC3FA01E573AC901D9C00BFFFFFFFFFFF E4005555555555553C0180000000000013F8907F6E5D4C382C00BFFFFFFFFFFFE40055 55555555553C015555555555556BF70AFF9EE8DD83EC00BFFFFFFFFFFFE40055555555 55553C012AAAAAAAAAAABBF91D33F561783B8C00BFFFFFFFFFFFE4005555555555553C 010000000000000BF9C71C71C71C73EC00BFFFFFFFFFFFE4005555555555553C00AAAA AAAAAAAABBFA203CAE759204DC00BFFFFFFFFFFFE4005555555555553C005555555555 556BFA44A55B66C77E8C00BFFFFFFFFFFFE4005555555555553C000000000000001BFA 50C83FB72EA72C00BFFFFFFFFFFFE4005555555555553BFF5555555555558BFA44A55B 66C77EAC00BFFFFFFFFFFFE4005555555555553BFE555555555555BBFA203CAE759204 EC00BFFFFFFFFFFFE4005555555555553BCC8000000000000BF9C71C71C71C741C00BF FFFFFFFFFFE40055555555555533FE555555555554FBF91D33F561783BFC00BFFFFFFF FFFFE40055555555555533FF5555555555552BF70AFF9EE8DD863C00BFFFFFFFFFFFE4 0055555555555533FFFFFFFFFFFFFFC3F8907F6E5D4C363C00BFFFFFFFFFFFE4005555 55555555340055555555555533FA01E573AC901D1C00BFFFFFFFFFFFE4005555555555 553400AAAAAAAAAAAA83FAB7F0D4629B7DBC00BFFFFFFFFFFFE4005555555555553400 FFFFFFFFFFFFD3FB4320FEDCBA97CC00BFFFFFFFFFFFE40055555555555534012AAAAA AAAAAA93FBB66C77D88E993C00BFFFFFFFFFFFE4005555555555553401555555555555 43FC1AED6A9264E1BC00BFFFFFFFFFFFE40055555555555534017FFFFFFFFFFFF3FC60 B60B60B60B0C00BFFFFFFFFFFFE4005555555555553401AAAAAAAAAAAAA3FCAC901E57 3AC8BC00BFFFFFFFFFFFE4005555555555553401D5555555555553FCFE7BA375F31AAC 00BFFFFFFFFFFFE400555555555555340200000000000003FD2B3C4D5E6F808C00BFFF FFFFFFFFE400555555555555340215555555555553FD5A438215FF3DBC00BFFFFFFFFF FFE40055555555555534022AAAAAAAAAAAA3FD8C536FE1A8C50C00BFFFFFFFFFFFE400 55555555555534023FFFFFFFFFFFF3FDC16C16C16C169C00BFFFFFFFFFFFE400AAAAAA AAAAAA8C0240000000000003FCA4FA4FA4FA4F6C00BFFFFFFFFFFFE400AAAAAAAAAAAA 8C022AAAAAAAAAAAB3FC5F31AED6A9263C00BFFFFFFFFFFFE400AAAAAAAAAAAA8C0215 555555555563FC1F7A80308B911C00BFFFFFFFFFFFE400AAAAAAAAAAAA8C0200000000 000013FBCBA987654320CC00BFFFFFFFFFFFE400AAAAAAAAAAAA8C01D5555555555573 FB6480F2B9D647CC00BFFFFFFFFFFFE400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FB097B 425ED0974C00BFFFFFFFFFFFE400AAAAAAAAAAAA8C0180000000000013FA7530ECA864 1F1C00BFFFFFFFFFFFE400AAAAAAAAAAAA8C0155555555555563F9DF623A67EAC0CC00 BFFFFFFFFFFFE400AAAAAAAAAAAA8C012AAAAAAAAAAAB3F904EE2CC0A9E66C00BFFFFF FFFFFFE400AAAAAAAAAAAA8C0100000000000003F76C16C16C16B80C00BFFFFFFFFFFF E400AAAAAAAAAAAA8C00AAAAAAAAAAAABBF5E573AC901E7B6C00BFFFFFFFFFFFE400AA AAAAAAAAAA8C005555555555556BF79CA252ADB36D0C00BFFFFFFFFFFFE400AAAAAAAA AAAA8C000000000000001BF7FDB97530ECB1BC00BFFFFFFFFFFFE400AAAAAAAAAAAA8B FF5555555555558BF79CA252ADB36D4C00BFFFFFFFFFFFE400AAAAAAAAAAAA8BFE5555 55555555BBF5E573AC901E7E3C00BFFFFFFFFFFFE400AAAAAAAAAAAA8BCC8000000000 0003F76C16C16C16B78C00BFFFFFFFFFFFE400AAAAAAAAAAAA83FE555555555554F3F9 04EE2CC0A9E5FC00BFFFFFFFFFFFE400AAAAAAAAAAAA83FF55555555555523F9DF623A 67EAC06C00BFFFFFFFFFFFE400AAAAAAAAAAAA83FFFFFFFFFFFFFFC3FA7530ECA8641E 8C00BFFFFFFFFFFFE400AAAAAAAAAAAA840055555555555533FB097B425ED0970C00BF FFFFFFFFFFE400AAAAAAAAAAAA8400AAAAAAAAAAAA83FB6480F2B9D6475C00BFFFFFFF FFFFE400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FBCBA9876543203C00BFFFFFFFFFFFE4 00AAAAAAAAAAAA84012AAAAAAAAAAA93FC1F7A80308B90DC00BFFFFFFFFFFFE400AAAA AAAAAAAA840155555555555543FC5F31AED6A925EC00BFFFFFFFFFFFE400AAAAAAAAAA AA84017FFFFFFFFFFFF3FCA4FA4FA4FA4F4C00BFFFFFFFFFFFE400AAAAAAAAAAAA8401 AAAAAAAAAAAAA3FCF0D4629B7F0CFC00BFFFFFFFFFFFE400AAAAAAAAAAAA8401D55555 55555553FD215FF3DD1BAF7C00BFFFFFFFFFFFE400AAAAAAAAAAAA8402000000000000 03FD4D5E6F8091A29C00BFFFFFFFFFFFE400AAAAAAAAAAAA840215555555555553FD7C 65A438215FCC00BFFFFFFFFFFFE400AAAAAAAAAAAA84022AAAAAAAAAAAA3FDAE759203 CAE72C00BFFFFFFFFFFFE400AAAAAAAAAAAA84023FFFFFFFFFFFF3FDE38E38E38E38BC 00BFFFFFFFFFFFE400FFFFFFFFFFFFDC0240000000000003FCF258BF258BF20C00BFFF FFFFFFFFE400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FCAC901E573AC8DC00BFFFFFFFFF FFE400FFFFFFFFFFFFDC0215555555555563FC6CD8EFB11D33CC00BFFFFFFFFFFFE400 FFFFFFFFFFFFDC0200000000000013FC3333333333330C00BFFFFFFFFFFFE400FFFFFF FFFFFFDC01D5555555555573FBFF3DD1BAF98D1C00BFFFFFFFFFFFE400FFFFFFFFFFFF DC01AAAAAAAAAAAAC3FBA438215FF3DC9C00BFFFFFFFFFFFE400FFFFFFFFFFFFDC0180 000000000013FB555555555554DC00BFFFFFFFFFFFE400FFFFFFFFFFFFDC0155555555 555563FB12956D9B1DF58C00BFFFFFFFFFFFE400FFFFFFFFFFFFDC012AAAAAAAAAAAB3 FAB7F0D4629B7DDC00BFFFFFFFFFFFE400FFFFFFFFFFFFDC0100000000000003FA62FC 962FC961AC00BFFFFFFFFFFFE400FFFFFFFFFFFFDC00AAAAAAAAAAAAB3FA264E209DC5 96CC00BFFFFFFFFFFFE400FFFFFFFFFFFFDC0055555555555563FA01E573AC901D0C00 BFFFFFFFFFFFE400FFFFFFFFFFFFDC0000000000000013F9EB851EB851E8CC00BFFFFF FFFFFFE400FFFFFFFFFFFFDBFF55555555555583FA01E573AC901CFC00BFFFFFFFFFFF E400FFFFFFFFFFFFDBFE555555555555B3FA264E209DC596BC00BFFFFFFFFFFFE400FF FFFFFFFFFFDBCC80000000000003FA62FC962FC9619C00BFFFFFFFFFFFE400FFFFFFFF FFFFD3FE555555555554F3FAB7F0D4629B7D9C00BFFFFFFFFFFFE400FFFFFFFFFFFFD3 FF55555555555523FB12956D9B1DF56C00BFFFFFFFFFFFE400FFFFFFFFFFFFD3FFFFFF FFFFFFFFC3FB5555555555549C00BFFFFFFFFFFFE400FFFFFFFFFFFFD4005555555555 5533FBA438215FF3DC5C00BFFFFFFFFFFFE400FFFFFFFFFFFFD400AAAAAAAAAAAA83FB FF3DD1BAF98CAC00BFFFFFFFFFFFE400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FC333333 333332CC00BFFFFFFFFFFFE400FFFFFFFFFFFFD4012AAAAAAAAAAA93FC6CD8EFB11D33 8C00BFFFFFFFFFFFE400FFFFFFFFFFFFD40155555555555543FCAC901E573AC89C00BF FFFFFFFFFFE400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FCF258BF258BF1EC00BFFFFFFF FFFFE400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FD1F19690E0857DC00BFFFFFFFFFFFE4 00FFFFFFFFFFFFD401D5555555555553FD480F2B9D6480CC00BFFFFFFFFFFFE400FFFF FFFFFFFFD40200000000000003FD740DA740DA73EC00BFFFFFFFFFFFE400FFFFFFFFFF FFD40215555555555553FDA314DBF86A312C00BFFFFFFFFFFFE400FFFFFFFFFFFFD402 2AAAAAAAAAAAA3FDD524C9C413B87C00BFFFFFFFFFFFE400FFFFFFFFFFFFD4023FFFFF FFFFFFF3FE051EB851EB850C00BFFFFFFFFFFFE4012AAAAAAAAAAA9C02400000000000 03FD2468ACF135799C00BFFFFFFFFFFFE4012AAAAAAAAAAA9C022AAAAAAAAAAAB3FD01 845C8A0CE4FC00BFFFFFFFFFFFE4012AAAAAAAAAAA9C0215555555555563FCC3518A6D FC34EC00BFFFFFFFFFFFE4012AAAAAAAAAAA9C0200000000000013FC89ABCDF012343C 00BFFFFFFFFFFFE4012AAAAAAAAAAA9C01D5555555555573FC5617839A5BC7AC00BFFF FFFFFFFFE4012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FC2894AB6CD8EF6C00BFFFFFFFFF FFE4012AAAAAAAAAAA9C0180000000000013FC0123456789AB9C00BFFFFFFFFFFFE401 2AAAAAAAAAAA9C0155555555555563FBBF86A314DBF7CC00BFFFFFFFFFFFE4012AAAAA AAAAAA9C012AAAAAAAAAAAB3FB88E99FAB0BC12C00BFFFFFFFFFFFE4012AAAAAAAAAAA 9C0100000000000003FB5E6F8091A2B31C00BFFFFFFFFFFFE4012AAAAAAAAAAA9C00AA AAAAAAAAAAB3FB401845C8A0CDAC00BFFFFFFFFFFFE4012AAAAAAAAAAA9C0055555555 555563FB2DE3EF500610CC00BFFFFFFFFFFFE4012AAAAAAAAAAA9C0000000000000013 FB27D27D27D27C7C00BFFFFFFFFFFFE4012AAAAAAAAAAA9BFF55555555555583FB2DE3 EF500610CC00BFFFFFFFFFFFE4012AAAAAAAAAAA9BFE555555555555B3FB401845C8A0 CD9C00BFFFFFFFFFFFE4012AAAAAAAAAAA9BCC80000000000003FB5E6F8091A2B30C00 BFFFFFFFFFFFE4012AAAAAAAAAAA93FE555555555554F3FB88E99FAB0BC10C00BFFFFF FFFFFFE4012AAAAAAAAAAA93FF55555555555523FBBF86A314DBF7AC00BFFFFFFFFFFF E4012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FC0123456789AB7C00BFFFFFFFFFFFE4012A AAAAAAAAAA940055555555555533FC2894AB6CD8EF5C00BFFFFFFFFFFFE4012AAAAAAA AAAA9400AAAAAAAAAAAA83FC5617839A5BC77C00BFFFFFFFFFFFE4012AAAAAAAAAAA94 00FFFFFFFFFFFFD3FC89ABCDF01233EC00BFFFFFFFFFFFE4012AAAAAAAAAAA94012AAA AAAAAAAA93FCC3518A6DFC349C00BFFFFFFFFFFFE4012AAAAAAAAAAA94015555555555 5543FD01845C8A0CE4EC00BFFFFFFFFFFFE4012AAAAAAAAAAA94017FFFFFFFFFFFF3FD 2468ACF135798C00BFFFFFFFFFFFE4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FD4A55B6 6C77D86C00BFFFFFFFFFFFE4012AAAAAAAAAAA9401D5555555555553FD734B78FBD401 5C00BFFFFFFFFFFFE4012AAAAAAAAAAA940200000000000003FD9F49F49F49F48C00BF FFFFFFFFFFE4012AAAAAAAAAAA940215555555555553FDCE512956D9B1BC00BFFFFFFF FFFFE4012AAAAAAAAAAA94022AAAAAAAAAAAA3FE00308B91419C8C00BFFFFFFFFFFFE4 012AAAAAAAAAAA94023FFFFFFFFFFFF3FE1ABCDF0123454C00BFFFFFFFFFFFE4015555 555555554C0240000000000003FD54320FEDCBA96C00BFFFFFFFFFFFE4015555555555 554C022AAAAAAAAAAAB3FD314DBF86A314CC00BFFFFFFFFFFFE4015555555555554C02 15555555555563FD11722833944A4C00BFFFFFFFFFFFE4015555555555554C02000000 00000013FCE93E93E93E93CC00BFFFFFFFFFFFE4015555555555554C01D55555555555 73FCB5AA499388274C00BFFFFFFFFFFFE4015555555555554C01AAAAAAAAAAAAC3FC88 277166054F0C00BFFFFFFFFFFFE4015555555555554C0180000000000013FC60B60B60 B60B2C00BFFFFFFFFFFFE4015555555555554C0155555555555563FC3F5617839A5B8C 00BFFFFFFFFFFFE4015555555555554C012AAAAAAAAAAAB3FC240795CEB2403C00BFFF FFFFFFFFE4015555555555554C0100000000000003FC0ECA8641FDB92C00BFFFFFFFFF FFE4015555555555554C00AAAAAAAAAAAAB3FBFF3DD1BAF98CDC00BFFFFFFFFFFFE401 5555555555554C0055555555555563FBED097B425ECFFC00BFFFFFFFFFFFE401555555 5555554C0000000000000013FBE6F8091A2B3BAC00BFFFFFFFFFFFE401555555555555 4BFF55555555555583FBED097B425ECFFC00BFFFFFFFFFFFE4015555555555554BFE55 5555555555B3FBFF3DD1BAF98CCC00BFFFFFFFFFFFE4015555555555554BCC80000000 000003FC0ECA8641FDB92C00BFFFFFFFFFFFE40155555555555543FE555555555554F3 FC240795CEB2402C00BFFFFFFFFFFFE40155555555555543FF55555555555523FC3F56 17839A5B7C00BFFFFFFFFFFFE40155555555555543FFFFFFFFFFFFFFC3FC60B60B60B6 0B0C00BFFFFFFFFFFFE401555555555555440055555555555533FC88277166054EEC00 BFFFFFFFFFFFE4015555555555554400AAAAAAAAAAAA83FCB5AA499388270C00BFFFFF FFFFFFE4015555555555554400FFFFFFFFFFFFD3FCE93E93E93E937C00BFFFFFFFFFFF E40155555555555544012AAAAAAAAAAA93FD11722833944A2C00BFFFFFFFFFFFE40155 5555555555440155555555555543FD314DBF86A314AC00BFFFFFFFFFFFE40155555555 555544017FFFFFFFFFFFF3FD54320FEDCBA95C00BFFFFFFFFFFFE40155555555555544 01AAAAAAAAAAAAA3FD7A1F19690E082C00BFFFFFFFFFFFE4015555555555554401D555 5555555553FDA314DBF86A312C00BFFFFFFFFFFFE40155555555555544020000000000 0003FDCF13579BE0244C00BFFFFFFFFFFFE401555555555555440215555555555553FD FE1A8C536FE17C00BFFFFFFFFFFFE40155555555555544022AAAAAAAAAAAA3FE18153D 0F8CB46C00BFFFFFFFFFFFE40155555555555544023FFFFFFFFFFFF3FE32A1907F6E5D 3C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC0240000000000003FD8888888888886C00BF FFFFFFFFFFE4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD65A438215FF3CC00BFFFFFFF FFFFE4017FFFFFFFFFFFFC0215555555555563FD45C8A0CE51294C00BFFFFFFFFFFFE4 017FFFFFFFFFFFFC0200000000000013FD28F5C28F5C28EC00BFFFFFFFFFFFE4017FFF FFFFFFFFFC01D5555555555573FD0F2B9D6480F2AC00BFFFFFFFFFFFE4017FFFFFFFFF FFFC01AAAAAAAAAAAAC3FCF0D4629B7F0D0C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC01 80000000000013FCC962FC962FC92C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC01555555 55555563FCA80308B914198C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC012AAAAAAAAAAA B3FC8CB487042BFE3C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC0100000000000003FC77 77777777772C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FC684BDA12 F6846C00BFFFFFFFFFFFE4017FFFFFFFFFFFFC0055555555555563FC5F31AED6A925FC 00BFFFFFFFFFFFE4017FFFFFFFFFFFFC0000000000000013FC5C28F5C28F5BDC00BFFF FFFFFFFFE4017FFFFFFFFFFFFBFF55555555555583FC5F31AED6A9260C00BFFFFFFFFF FFE4017FFFFFFFFFFFFBFE555555555555B3FC684BDA12F6846C00BFFFFFFFFFFFE401 7FFFFFFFFFFFFBCC80000000000003FC7777777777772C00BFFFFFFFFFFFE4017FFFFF FFFFFFF3FE555555555554F3FC8CB487042BFE2C00BFFFFFFFFFFFE4017FFFFFFFFFFF F3FF55555555555523FCA80308B914197C00BFFFFFFFFFFFE4017FFFFFFFFFFFF3FFFF FFFFFFFFFFC3FCC962FC962FC90C00BFFFFFFFFFFFE4017FFFFFFFFFFFF40055555555 555533FCF0D4629B7F0CEC00BFFFFFFFFFFFE4017FFFFFFFFFFFF400AAAAAAAAAAAA83 FD0F2B9D6480F28C00BFFFFFFFFFFFE4017FFFFFFFFFFFF400FFFFFFFFFFFFD3FD28F5 C28F5C28CC00BFFFFFFFFFFFE4017FFFFFFFFFFFF4012AAAAAAAAAAA93FD45C8A0CE51 292C00BFFFFFFFFFFFE4017FFFFFFFFFFFF40155555555555543FD65A438215FF3BC00 BFFFFFFFFFFFE4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FD8888888888885C00BFFFFF FFFFFFE4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FDAE759203CAE73C00BFFFFFFFFFFF E4017FFFFFFFFFFFF401D5555555555553FDD76B549327102C00BFFFFFFFFFFFE4017F FFFFFFFFFFF40200000000000003FE01B4E81B4E81AC00BFFFFFFFFFFFE4017FFFFFFF FFFFF40215555555555553FE1938827716604C00BFFFFFFFFFFFE4017FFFFFFFFFFFF4 022AAAAAAAAAAAA3FE3240795CEB23EC00BFFFFFFFFFFFE4017FFFFFFFFFFFF4023FFF FFFFFFFFF3FE4CCCCCCCCCCCBC00BFFFFFFFFFFFE401AAAAAAAAAAAAAC024000000000 0003FDC16C16C16C16AC00BFFFFFFFFFFFE401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD 9E87C65A43820C00BFFFFFFFFFFFE401AAAAAAAAAAAAAC0215555555555563FD7EAC2F 0734B78C00BFFFFFFFFFFFE401AAAAAAAAAAAAAC0200000000000013FD61D950C83FB7 2C00BFFFFFFFFFFFE401AAAAAAAAAAAAAC01D5555555555573FD480F2B9D6480EC00BF FFFFFFFFFFE401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD314DBF86A314CC00BFFFFFFF FFFFE401AAAAAAAAAAAAAC0180000000000013FD1D950C83FB72DC00BFFFFFFFFFFFE4 01AAAAAAAAAAAAAC0155555555555563FD0CE512956D9B0C00BFFFFFFFFFFFE401AAAA AAAAAAAAAC012AAAAAAAAAAAB3FCFE7BA375F31ABC00BFFFFFFFFFFFE401AAAAAAAAAA AAAC0100000000000003FCE93E93E93E93AC00BFFFFFFFFFFFE401AAAAAAAAAAAAAC00 AAAAAAAAAAAAB3FCDA12F684BDA0EC00BFFFFFFFFFFFE401AAAAAAAAAAAAAC00555555 55555563FCD0F8CB4870427C00BFFFFFFFFFFFE401AAAAAAAAAAAAAC00000000000000 13FCCDF0123456785C00BFFFFFFFFFFFE401AAAAAAAAAAAAABFF55555555555583FCD0 F8CB4870428C00BFFFFFFFFFFFE401AAAAAAAAAAAAABFE555555555555B3FCDA12F684 BDA0EC00BFFFFFFFFFFFE401AAAAAAAAAAAAABCC80000000000003FCE93E93E93E93AC 00BFFFFFFFFFFFE401AAAAAAAAAAAAA3FE555555555554F3FCFE7BA375F31AAC00BFFF FFFFFFFFE401AAAAAAAAAAAAA3FF55555555555523FD0CE512956D9B0C00BFFFFFFFFF FFE401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD1D950C83FB72CC00BFFFFFFFFFFFE401 AAAAAAAAAAAAA40055555555555533FD314DBF86A314BC00BFFFFFFFFFFFE401AAAAAA AAAAAAA400AAAAAAAAAAAA83FD480F2B9D6480DC00BFFFFFFFFFFFE401AAAAAAAAAAAA A400FFFFFFFFFFFFD3FD61D950C83FB70C00BFFFFFFFFFFFE401AAAAAAAAAAAAA4012A AAAAAAAAAA93FD7EAC2F0734B75C00BFFFFFFFFFFFE401AAAAAAAAAAAAA40155555555 555543FD9E87C65A4381FC00BFFFFFFFFFFFE401AAAAAAAAAAAAA4017FFFFFFFFFFFF3 FDC16C16C16C169C00BFFFFFFFFFFFE401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FDE759 203CAE757C00BFFFFFFFFFFFE401AAAAAAAAAAAAA401D5555555555553FE0827716605 4F3C00BFFFFFFFFFFFE401AAAAAAAAAAAAA40200000000000003FE1E26AF37C048CC00 BFFFFFFFFFFFE401AAAAAAAAAAAAA40215555555555553FE35AA499388276C00BFFFFF FFFFFFE401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE4EB240795CEB0C00BFFFFFFFFFFF E401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE693E93E93E93DC00BFFFFFFFFFFFE401D5 55555555555C0240000000000003FDFEDCBA9876542C00BFFFFFFFFFFFE401D5555555 55555C022AAAAAAAAAAAB3FDDBF86A314DBF8C00BFFFFFFFFFFFE401D555555555555C 0215555555555563FDBC1CD2DE3EF50C00BFFFFFFFFFFFE401D555555555555C020000 0000000013FD9F49F49F49F4AC00BFFFFFFFFFFFE401D555555555555C01D555555555 5573FD857FCF746EBE6C00BFFFFFFFFFFFE401D555555555555C01AAAAAAAAAAAAC3FD 6EBE635DAD524C00BFFFFFFFFFFFE401D555555555555C0180000000000013FD5B05B0 5B05B05C00BFFFFFFFFFFFE401D555555555555C0155555555555563FD4A55B66C77D8 8C00BFFFFFFFFFFFE401D555555555555C012AAAAAAAAAAAB3FD3CAE759203CADC00BF FFFFFFFFFFE401D555555555555C0100000000000003FD320FEDCBA9875C00BFFFFFFF FFFFE401D555555555555C00AAAAAAAAAAAAB3FD2A7A1F19690DFC00BFFFFFFFFFFFE4 01D555555555555C0055555555555563FD25ED097B425ECC00BFFFFFFFFFFFE401D555 555555555C0000000000000013FD2468ACF13579BC00BFFFFFFFFFFFE401D555555555 555BFF55555555555583FD25ED097B425ECC00BFFFFFFFFFFFE401D555555555555BFE 555555555555B3FD2A7A1F19690DFC00BFFFFFFFFFFFE401D555555555555BCC800000 00000003FD320FEDCBA9875C00BFFFFFFFFFFFE401D5555555555553FE555555555554 F3FD3CAE759203CADC00BFFFFFFFFFFFE401D5555555555553FF55555555555523FD4A 55B66C77D88C00BFFFFFFFFFFFE401D5555555555553FFFFFFFFFFFFFFC3FD5B05B05B 05B04C00BFFFFFFFFFFFE401D55555555555540055555555555533FD6EBE635DAD523C 00BFFFFFFFFFFFE401D555555555555400AAAAAAAAAAAA83FD857FCF746EBE5C00BFFF FFFFFFFFE401D555555555555400FFFFFFFFFFFFD3FD9F49F49F49F48C00BFFFFFFFFF FFE401D5555555555554012AAAAAAAAAAA93FDBC1CD2DE3EF4DC00BFFFFFFFFFFFE401 D55555555555540155555555555543FDDBF86A314DBF7C00BFFFFFFFFFFFE401D55555 55555554017FFFFFFFFFFFF3FDFEDCBA9876541C00BFFFFFFFFFFFE401D55555555555 5401AAAAAAAAAAAAA3FE1264E209DC597C00BFFFFFFFFFFFE401D555555555555401D5 555555555553FE26DFC3518A6DFC00BFFFFFFFFFFFE401D55555555555540200000000 000003FE3CDF012345678C00BFFFFFFFFFFFE401D55555555555540215555555555553 FE54629B7F0D462C00BFFFFFFFFFFFE401D5555555555554022AAAAAAAAAAAA3FE6D6A 9264E209CC00BFFFFFFFFFFFE401D5555555555554023FFFFFFFFFFFF3FE87F6E5D4C3 B29C00BFFFFFFFFFFFE4020000000000000C0240000000000003FE206D3A06D3A07C00 BFFFFFFFFFFFE4020000000000000C022AAAAAAAAAAAB3FE0EFB11D33F562C00BFFFFF FFFFFFE4020000000000000C0215555555555563FDFE1A8C536FE1BC00BFFFFFFFFFFF E4020000000000000C0200000000000013FDE147AE147AE15C00BFFFFFFFFFFFE40200 00000000000C01D5555555555573FDC77D88E99FAB1C00BFFFFFFFFFFFE40200000000 00000C01AAAAAAAAAAAAC3FDB0BC1CD2DE3EFC00BFFFFFFFFFFFE4020000000000000C 0180000000000013FD9D0369D0369D0C00BFFFFFFFFFFFE4020000000000000C015555 5555555563FD8C536FE1A8C53C00BFFFFFFFFFFFE4020000000000000C012AAAAAAAAA AAB3FD7EAC2F0734B78C00BFFFFFFFFFFFE4020000000000000C0100000000000003FD 740DA740DA740C00BFFFFFFFFFFFE4020000000000000C00AAAAAAAAAAAAB3FD6C77D8 8E99FAAC00BFFFFFFFFFFFE4020000000000000C0055555555555563FD67EAC2F0734B 7C00BFFFFFFFFFFFE4020000000000000C0000000000000013FD6666666666666C00BF FFFFFFFFFFE4020000000000000BFF55555555555583FD67EAC2F0734B7C00BFFFFFFF FFFFE4020000000000000BFE555555555555B3FD6C77D88E99FAAC00BFFFFFFFFFFFE4 020000000000000BCC80000000000003FD740DA740DA740C00BFFFFFFFFFFFE4020000 0000000003FE555555555554F3FD7EAC2F0734B78C00BFFFFFFFFFFFE4020000000000 0003FF55555555555523FD8C536FE1A8C53C00BFFFFFFFFFFFE40200000000000003FF FFFFFFFFFFFFC3FD9D0369D0369CFC00BFFFFFFFFFFFE4020000000000000400555555 55555533FDB0BC1CD2DE3EEC00BFFFFFFFFFFFE4020000000000000400AAAAAAAAAAAA 83FDC77D88E99FAB0C00BFFFFFFFFFFFE4020000000000000400FFFFFFFFFFFFD3FDE1 47AE147AE13C00BFFFFFFFFFFFE40200000000000004012AAAAAAAAAAA93FDFE1A8C53 6FE18C00BFFFFFFFFFFFE402000000000000040155555555555543FE0EFB11D33F561C 00BFFFFFFFFFFFE40200000000000004017FFFFFFFFFFFF3FE206D3A06D3A06C00BFFF FFFFFFFFE4020000000000000401AAAAAAAAAAAAA3FE3363BEC474CFDC00BFFFFFFFFF FFE4020000000000000401D5555555555553FE47DEA00C22E45C00BFFFFFFFFFFFE402 000000000000040200000000000003FE5DDDDDDDDDDDEC00BFFFFFFFFFFFE402000000 000000040215555555555553FE75617839A5BC7C00BFFFFFFFFFFFE402000000000000 04022AAAAAAAAAAAA3FE8E696F1F7A802C00BFFFFFFFFFFFE40200000000000004023F FFFFFFFFFFF3FEA8F5C28F5C28EC00BFFFFFFFFFFFE4021555555555555C0240000000 000003FE43B2A1907F6E5C00BFFFFFFFFFFFE4021555555555555C022AAAAAAAAAAAB3 FE3240795CEB240C00BFFFFFFFFFFFE4021555555555555C0215555555555563FE2252 ADB363BECC00BFFFFFFFFFFFE4021555555555555C0200000000000013FE13E93E93E9 3E9C00BFFFFFFFFFFFE4021555555555555C01D5555555555573FE07042BFE7BA37C00 BFFFFFFFFFFFE4021555555555555C01AAAAAAAAAAAAC3FDF746EBE635DACC00BFFFFF FFFFFFE4021555555555555C0180000000000013FDE38E38E38E38DC00BFFFFFFFFFFF E4021555555555555C0155555555555563FDD2DE3EF500610C00BFFFFFFFFFFFE40215 55555555555C012AAAAAAAAAAAB3FDC536FE1A8C535C00BFFFFFFFFFFFE40215555555 55555C0100000000000003FDBA987654320FDC00BFFFFFFFFFFFE4021555555555555C 00AAAAAAAAAAAAB3FDB302A7A1F1967C00BFFFFFFFFFFFE4021555555555555C005555 5555555563FDAE759203CAE74C00BFFFFFFFFFFFE4021555555555555C000000000000 0013FDACF13579BE023C00BFFFFFFFFFFFE4021555555555555BFF55555555555583FD AE759203CAE74C00BFFFFFFFFFFFE4021555555555555BFE555555555555B3FDB302A7 A1F1967C00BFFFFFFFFFFFE4021555555555555BCC80000000000003FDBA987654320F DC00BFFFFFFFFFFFE40215555555555553FE555555555554F3FDC536FE1A8C535C00BF FFFFFFFFFFE40215555555555553FF55555555555523FDD2DE3EF500610C00BFFFFFFF FFFFE40215555555555553FFFFFFFFFFFFFFC3FDE38E38E38E38CC00BFFFFFFFFFFFE4 02155555555555540055555555555533FDF746EBE635DABC00BFFFFFFFFFFFE4021555 555555555400AAAAAAAAAAAA83FE07042BFE7BA36C00BFFFFFFFFFFFE4021555555555 555400FFFFFFFFFFFFD3FE13E93E93E93E8C00BFFFFFFFFFFFE4021555555555555401 2AAAAAAAAAAA93FE2252ADB363BEBC00BFFFFFFFFFFFE4021555555555555401555555 55555543FE3240795CEB23FC00BFFFFFFFFFFFE40215555555555554017FFFFFFFFFFF F3FE43B2A1907F6E5C00BFFFFFFFFFFFE4021555555555555401AAAAAAAAAAAAA3FE56 A9264E209DBC00BFFFFFFFFFFFE4021555555555555401D5555555555553FE6B240795 CEB23C00BFFFFFFFFFFFE402155555555555540200000000000003FE8123456789ABCC 00BFFFFFFFFFFFE402155555555555540215555555555553FE98A6DFC3518A6C00BFFF FFFFFFFFE40215555555555554022AAAAAAAAAAAA3FEB1AED6A9264E0C00BFFFFFFFFF FFE40215555555555554023FFFFFFFFFFFF3FECC3B2A1907F6DC00BFFFFFFFFFFFE402 2AAAAAAAAAAAAC0240000000000003FE693E93E93E93CC00BFFFFFFFFFFFE4022AAAAA AAAAAAAC022AAAAAAAAAAAB3FE57CC6BB5AA498C00BFFFFFFFFFFFE4022AAAAAAAAAAA AC0215555555555563FE47DEA00C22E43C00BFFFFFFFFFFFE4022AAAAAAAAAAAAC0200 000000000013FE397530ECA8641C00BFFFFFFFFFFFE4022AAAAAAAAAAAAC01D5555555 555573FE2C901E573AC8FC00BFFFFFFFFFFFE4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3 FE212F684BDA12EC00BFFFFFFFFFFFE4022AAAAAAAAAAAAC0180000000000013FE1753 0ECA8641EC00BFFFFFFFFFFFE4022AAAAAAAAAAAAC0155555555555563FE0EFB11D33F 55FC00BFFFFFFFFFFFE4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FE08277166054F2C00 BFFFFFFFFFFFE4022AAAAAAAAAAAAC0100000000000003FE02D82D82D82D6C00BFFFFF FFFFFFE4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FDFE1A8C536FE16C00BFFFFFFFFFFF E4022AAAAAAAAAAAAC0055555555555563FDF98D76B549323C00BFFFFFFFFFFFE4022A AAAAAAAAAAAC0000000000000013FDF8091A2B3C4D2C00BFFFFFFFFFFFE4022AAAAAAA AAAAABFF55555555555583FDF98D76B549323C00BFFFFFFFFFFFE4022AAAAAAAAAAAAB FE555555555555B3FDFE1A8C536FE16C00BFFFFFFFFFFFE4022AAAAAAAAAAAABCC8000 0000000003FE02D82D82D82D6C00BFFFFFFFFFFFE4022AAAAAAAAAAAA3FE5555555555 54F3FE08277166054F2C00BFFFFFFFFFFFE4022AAAAAAAAAAAA3FF55555555555523FE 0EFB11D33F55FC00BFFFFFFFFFFFE4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE17530E CA8641DC00BFFFFFFFFFFFE4022AAAAAAAAAAAA40055555555555533FE212F684BDA12 DC00BFFFFFFFFFFFE4022AAAAAAAAAAAA400AAAAAAAAAAAA83FE2C901E573AC8DC00BF FFFFFFFFFFE4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE397530ECA8640C00BFFFFFFF FFFFE4022AAAAAAAAAAAA4012AAAAAAAAAAA93FE47DEA00C22E42C00BFFFFFFFFFFFE4 022AAAAAAAAAAAA40155555555555543FE57CC6BB5AA497C00BFFFFFFFFFFFE4022AAA AAAAAAAAA4017FFFFFFFFFFFF3FE693E93E93E93CC00BFFFFFFFFFFFE4022AAAAAAAAA AAA401AAAAAAAAAAAAA3FE7C3518A6DFC33C00BFFFFFFFFFFFE4022AAAAAAAAAAAA401 D5555555555553FE90AFF9EE8DD7AC00BFFFFFFFFFFFE4022AAAAAAAAAAAA402000000 00000003FEA6AF37C048D14C00BFFFFFFFFFFFE4022AAAAAAAAAAAA402155555555555 53FEBE32D21C10AFDC00BFFFFFFFFFFFE4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FED7 3AC901E5738C00BFFFFFFFFFFFE4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FEF1C71C71 C71C4C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC0240000000000003FE911111111110FC 00BFFFFFFFFFFFE4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE7F9EE8DD7CC6BC00BFFF FFFFFFFFE4023FFFFFFFFFFFFC0215555555555563FE6FB11D33F5616C00BFFFFFFFFF FFE4023FFFFFFFFFFFFC0200000000000013FE6147AE147AE14C00BFFFFFFFFFFFE402 3FFFFFFFFFFFFC01D5555555555573FE54629B7F0D462C00BFFFFFFFFFFFE4023FFFFF FFFFFFFC01AAAAAAAAAAAAC3FE4901E573AC901C00BFFFFFFFFFFFE4023FFFFFFFFFFF FC0180000000000013FE3F258BF258BF1C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC0155 555555555563FE36CD8EFB11D32C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC012AAAAAAA AAAAB3FE2FF9EE8DD7CC6C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC0100000000000003 FE2AAAAAAAAAAA9C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE26DF C3518A6DFC00BFFFFFFFFFFFE4023FFFFFFFFFFFFC0055555555555563FE2499388277 164C00BFFFFFFFFFFFE4023FFFFFFFFFFFFC0000000000000013FE23D70A3D70A3BC00 BFFFFFFFFFFFE4023FFFFFFFFFFFFBFF55555555555583FE2499388277164C00BFFFFF FFFFFFE4023FFFFFFFFFFFFBFE555555555555B3FE26DFC3518A6DEC00BFFFFFFFFFFF E4023FFFFFFFFFFFFBCC80000000000003FE2AAAAAAAAAAA9C00BFFFFFFFFFFFE4023F FFFFFFFFFFF3FE555555555554F3FE2FF9EE8DD7CC5C00BFFFFFFFFFFFE4023FFFFFFF FFFFF3FF55555555555523FE36CD8EFB11D32C00BFFFFFFFFFFFE4023FFFFFFFFFFFF3 FFFFFFFFFFFFFFC3FE3F258BF258BF0C00BFFFFFFFFFFFE4023FFFFFFFFFFFF4005555 5555555533FE4901E573AC900C00BFFFFFFFFFFFE4023FFFFFFFFFFFF400AAAAAAAAAA AA83FE54629B7F0D460C00BFFFFFFFFFFFE4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE 6147AE147AE13C00BFFFFFFFFFFFE4023FFFFFFFFFFFF4012AAAAAAAAAAA93FE6FB11D 33F5615C00BFFFFFFFFFFFE4023FFFFFFFFFFFF40155555555555543FE7F9EE8DD7CC6 AC00BFFFFFFFFFFFE4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE911111111110FC00BF FFFFFFFFFFE4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FEA40795CEB2406C00BFFFFFFF FFFFE4023FFFFFFFFFFFF401D5555555555553FEB88277166054DC00BFFFFFFFFFFFE4 023FFFFFFFFFFFF40200000000000003FECE81B4E81B4E7C00BFFFFFFFFFFFE4023FFF FFFFFFFFF40215555555555553FEE6054F43E32D0C00BFFFFFFFFFFFE4023FFFFFFFFF FFF4022AAAAAAAAAAAA3FEFF0D4629B7F0BC00BFFFFFFFFFFFE4023FFFFFFFFFFFF402 3FFFFFFFFFFFF3FF0CCCCCCCCCCCCC00AAAAAAAAAAAA9C024000000000000C02400000 00000003FD7777777777777C00AAAAAAAAAAAA9C024000000000000C022AAAAAAAAAAA B3FD549327104EE2DC00AAAAAAAAAAAA9C024000000000000C0215555555555563FD34 B78FBD40185C00AAAAAAAAAAAA9C024000000000000C0200000000000013FD17E4B17E 4B17FC00AAAAAAAAAAAA9C024000000000000C01D5555555555573FCFC3518A6DFC36C 00AAAAAAAAAAAA9C024000000000000C01AAAAAAAAAAAAC3FCCEB240795CEB2C00AAAA AAAAAAAA9C024000000000000C0180000000000013FCA740DA740DA74C00AAAAAAAAAA AA9C024000000000000C0155555555555563FC85E0E696F1F7AC00AAAAAAAAAAAA9C02 4000000000000C012AAAAAAAAAAAB3FC6A9264E209DC5C00AAAAAAAAAAAA9C02400000 0000000C0100000000000003FC5555555555554C00AAAAAAAAAAAA9C02400000000000 0C00AAAAAAAAAAAAB3FC4629B7F0D4628C00AAAAAAAAAAAA9C024000000000000C0055 555555555563FC3D0F8CB487041C00AAAAAAAAAAAA9C024000000000000C0000000000 000013FC3A06D3A06D39FC00AAAAAAAAAAAA9C024000000000000BFF55555555555583 FC3D0F8CB487042C00AAAAAAAAAAAA9C024000000000000BFE555555555555B3FC4629 B7F0D4628C00AAAAAAAAAAAA9C024000000000000BCC80000000000003FC5555555555 554C00AAAAAAAAAAAA9C0240000000000003FE555555555554F3FC6A9264E209DC4C00 AAAAAAAAAAAA9C0240000000000003FF55555555555523FC85E0E696F1F79C00AAAAAA AAAAAA9C0240000000000003FFFFFFFFFFFFFFC3FCA740DA740DA72C00AAAAAAAAAAAA 9C02400000000000040055555555555533FCCEB240795CEB0C00AAAAAAAAAAAA9C0240 00000000000400AAAAAAAAAAAA83FCFC3518A6DFC32C00AAAAAAAAAAAA9C0240000000 00000400FFFFFFFFFFFFD3FD17E4B17E4B17DC00AAAAAAAAAAAA9C0240000000000004 012AAAAAAAAAAA93FD34B78FBD40183C00AAAAAAAAAAAA9C0240000000000004015555 5555555543FD549327104EE2BC00AAAAAAAAAAAA9C0240000000000004017FFFFFFFFF FFF3FD7777777777776C00AAAAAAAAAAAA9C024000000000000401AAAAAAAAAAAAA3FD 9D6480F2B9D64C00AAAAAAAAAAAA9C024000000000000401D5555555555553FDC65A43 8215FF3C00AAAAAAAAAAAA9C02400000000000040200000000000003FDF258BF258BF2 6C00AAAAAAAAAAAA9C02400000000000040215555555555553FE10AFF9EE8DD7CC00AA AAAAAAAAAA9C0240000000000004022AAAAAAAAAAAA3FE29B7F0D4629B7C00AAAAAAAA AAAA9C0240000000000004023FFFFFFFFFFFF3FE4444444444443C00AAAAAAAAAAAA9C 022AAAAAAAAAAABC0240000000000003FD4320FEDCBA988C00AAAAAAAAAAAA9C022AAA AAAAAAAABC022AAAAAAAAAAAB3FD203CAE759203EC00AAAAAAAAAAAA9C022AAAAAAAAA AABC0215555555555563FD0061172283396C00AAAAAAAAAAAA9C022AAAAAAAAAAABC02 00000000000013FCC71C71C71C721C00AAAAAAAAAAAA9C022AAAAAAAAAAABC01D55555 55555573FC9388277166058C00AAAAAAAAAAAA9C022AAAAAAAAAAABC01AAAAAAAAAAAA C3FC66054F43E32D5C00AAAAAAAAAAAA9C022AAAAAAAAAAABC0180000000000013FC3E 93E93E93E97C00AAAAAAAAAAAA9C022AAAAAAAAAAABC0155555555555563FC1D33F561 7839CC00AAAAAAAAAAAA9C022AAAAAAAAAAABC012AAAAAAAAAAAB3FC01E573AC901E7C 00AAAAAAAAAAAA9C022AAAAAAAAAAABC0100000000000003FBD950C83FB72EDC00AAAA AAAAAAAA9C022AAAAAAAAAAABC00AAAAAAAAAAAAB3FBBAF98D76B5496C00AAAAAAAAAA AA9C022AAAAAAAAAAABC0055555555555563FBA8C536FE1A8C8C00AAAAAAAAAAAA9C02 2AAAAAAAAAAABC0000000000000013FBA2B3C4D5E6F83C00AAAAAAAAAAAA9C022AAAAA AAAAAABBFF55555555555583FBA8C536FE1A8C8C00AAAAAAAAAAAA9C022AAAAAAAAAAA BBFE555555555555B3FBBAF98D76B5495C00AAAAAAAAAAAA9C022AAAAAAAAAAABBCC80 000000000003FBD950C83FB72ECC00AAAAAAAAAAAA9C022AAAAAAAAAAAB3FE55555555 5554F3FC01E573AC901E6C00AAAAAAAAAAAA9C022AAAAAAAAAAAB3FF55555555555523 FC1D33F5617839BC00AAAAAAAAAAAA9C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FC3E93 E93E93E95C00AAAAAAAAAAAA9C022AAAAAAAAAAAB40055555555555533FC66054F43E3 2D3C00AAAAAAAAAAAA9C022AAAAAAAAAAAB400AAAAAAAAAAAA83FC9388277166055C00 AAAAAAAAAAAA9C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FCC71C71C71C71CC00AAAAAA AAAAAA9C022AAAAAAAAAAAB4012AAAAAAAAAAA93FD0061172283394C00AAAAAAAAAAAA 9C022AAAAAAAAAAAB40155555555555543FD203CAE759203DC00AAAAAAAAAAAA9C022A AAAAAAAAAAB4017FFFFFFFFFFFF3FD4320FEDCBA987C00AAAAAAAAAAAA9C022AAAAAAA AAAAB401AAAAAAAAAAAAA3FD690E0857FCF75C00AAAAAAAAAAAA9C022AAAAAAAAAAAB4 01D5555555555553FD9203CAE759204C00AAAAAAAAAAAA9C022AAAAAAAAAAAB4020000 0000000003FDBE02468ACF136C00AAAAAAAAAAAA9C022AAAAAAAAAAAB4021555555555 5553FDED097B425ED0AC00AAAAAAAAAAAA9C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE 0F8CB487042BFC00AAAAAAAAAAAA9C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE2A1907 F6E5D4CC00AAAAAAAAAAAA9C021555555555556C0240000000000003FD13579BE02468 BC00AAAAAAAAAAAA9C021555555555556C022AAAAAAAAAAAB3FCE0E696F1F7A83C00AA AAAAAAAAAA9C021555555555556C0215555555555563FCA12F684BDA132C00AAAAAAAA AAAA9C021555555555556C0200000000000013FC6789ABCDF0127C00AAAAAAAAAAAA9C 021555555555556C01D5555555555573FC33F5617839A5EC00AAAAAAAAAAAA9C021555 555555556C01AAAAAAAAAAAAC3FC0672894AB6CDBC00AAAAAAAAAAAA9C021555555555 556C0180000000000013FBBE02468ACF139C00AAAAAAAAAAAA9C021555555555556C01 55555555555563FB7B425ED097B44C00AAAAAAAAAAAA9C021555555555556C012AAAAA AAAAAAB3FB44A55B66C77DAC00AAAAAAAAAAAA9C021555555555556C01000000000000 03FB1A2B3C4D5E6F9C00AAAAAAAAAAAA9C021555555555556C00AAAAAAAAAAAAB3FAF7 A80308B9144C00AAAAAAAAAAAA9C021555555555556C0055555555555563FAD33F5617 839A8C00AAAAAAAAAAAA9C021555555555556C0000000000000013FAC71C71C71C71FC 00AAAAAAAAAAAA9C021555555555556BFF55555555555583FAD33F5617839A7C00AAAA AAAAAAAA9C021555555555556BFE555555555555B3FAF7A80308B9143C00AAAAAAAAAA AA9C021555555555556BCC80000000000003FB1A2B3C4D5E6F8C00AAAAAAAAAAAA9C02 15555555555563FE555555555554F3FB44A55B66C77D8C00AAAAAAAAAAAA9C02155555 55555563FF55555555555523FB7B425ED097B42C00AAAAAAAAAAAA9C02155555555555 63FFFFFFFFFFFFFFC3FBBE02468ACF135C00AAAAAAAAAAAA9C02155555555555640055 555555555533FC0672894AB6CD9C00AAAAAAAAAAAA9C021555555555556400AAAAAAAA AAAA83FC33F5617839A5BC00AAAAAAAAAAAA9C021555555555556400FFFFFFFFFFFFD3 FC6789ABCDF0122C00AAAAAAAAAAAA9C0215555555555564012AAAAAAAAAAA93FCA12F 684BDA12DC00AAAAAAAAAAAA9C02155555555555640155555555555543FCE0E696F1F7 A7FC00AAAAAAAAAAAA9C0215555555555564017FFFFFFFFFFFF3FD13579BE02468AC00 AAAAAAAAAAAA9C021555555555556401AAAAAAAAAAAAA3FD3944A55B66C78C00AAAAAA AAAAAA9C021555555555556401D5555555555553FD623A67EAC2F07C00AAAAAAAAAAAA 9C02155555555555640200000000000003FD8E38E38E38E3AC00AAAAAAAAAAAA9C0215 5555555555640215555555555553FDBD401845C8A0DC00AAAAAAAAAAAA9C0215555555 555564022AAAAAAAAAAAA3FDEF50061172282C00AAAAAAAAAAAA9C0215555555555564 023FFFFFFFFFFFF3FE123456789ABCDC00AAAAAAAAAAAA9C020000000000001C024000 0000000003FCD0369D0369D05C00AAAAAAAAAAAA9C020000000000001C022AAAAAAAAA AAB3FC8A6DFC3518A72C00AAAAAAAAAAAA9C020000000000001C0215555555555563FC 4AB6CD8EFB120C00AAAAAAAAAAAA9C020000000000001C0200000000000013FC111111 1111115C00AAAAAAAAAAAA9C020000000000001C01D5555555555573FBBAF98D76B549 AC00AAAAAAAAAAAA9C020000000000001C01AAAAAAAAAAAAC3FB5FF3DD1BAF992C00AA AAAAAAAAAA9C020000000000001C0180000000000013FB1111111111116C00AAAAAAAA AAAA9C020000000000001C0155555555555563FA9CA252ADB3643C00AAAAAAAAAAAA9C 020000000000001C012AAAAAAAAAAAB3FA2F684BDA12F6FC00AAAAAAAAAAAA9C020000 000000001C0100000000000003F9B4E81B4E81B59C00AAAAAAAAAAAA9C020000000000 001C00AAAAAAAAAAAAB3F93B8B302A7A1FDC00AAAAAAAAAAAA9C020000000000001C00 55555555555563F8E573AC901E588C00AAAAAAAAAAAA9C020000000000001C00000000 00000013F8B4E81B4E81B63C00AAAAAAAAAAAA9C020000000000001BFF555555555555 83F8E573AC901E587C00AAAAAAAAAAAA9C020000000000001BFE555555555555B3F93B 8B302A7A1FAC00AAAAAAAAAAAA9C020000000000001BCC80000000000003F9B4E81B4E 81B56C00AAAAAAAAAAAA9C0200000000000013FE555555555554F3FA2F684BDA12F6CC 00AAAAAAAAAAAA9C0200000000000013FF55555555555523FA9CA252ADB363FC00AAAA AAAAAAAA9C0200000000000013FFFFFFFFFFFFFFC3FB1111111111112C00AAAAAAAAAA AA9C02000000000000140055555555555533FB5FF3DD1BAF98EC00AAAAAAAAAAAA9C02 0000000000001400AAAAAAAAAAAA83FBBAF98D76B5494C00AAAAAAAAAAAA9C02000000 0000001400FFFFFFFFFFFFD3FC1111111111110C00AAAAAAAAAAAA9C02000000000000 14012AAAAAAAAAAA93FC4AB6CD8EFB11CC00AAAAAAAAAAAA9C02000000000000140155 555555555543FC8A6DFC3518A6DC00AAAAAAAAAAAA9C0200000000000014017FFFFFFF FFFFF3FCD0369D0369D03C00AAAAAAAAAAAA9C020000000000001401AAAAAAAAAAAAA3 FD0E0857FCF746FC00AAAAAAAAAAAA9C020000000000001401D5555555555553FD36FE 1A8C536FFC00AAAAAAAAAAAA9C02000000000000140200000000000003FD62FC962FC9 631C00AAAAAAAAAAAA9C02000000000000140215555555555553FD9203CAE759204C00 AAAAAAAAAAAA9C0200000000000014022AAAAAAAAAAAA3FDC413B8B302A79C00AAAAAA AAAAAA9C0200000000000014023FFFFFFFFFFFF3FDF92C5F92C5F92C00AAAAAAAAAAAA 9C01D555555555557C0240000000000003FC82D82D82D82D9C00AAAAAAAAAAAA9C01D5 55555555557C022AAAAAAAAAAAB3FC3D0F8CB487046C00AAAAAAAAAAAA9C01D5555555 55557C0215555555555563FBFAB0BC1CD2DEAC00AAAAAAAAAAAA9C01D555555555557C 0200000000000013FB87654320FEDD4C00AAAAAAAAAAAA9C01D555555555557C01D555 5555555573FB203CAE7592043C00AAAAAAAAAAAA9C01D555555555557C01AAAAAAAAAA AAC3FA8A6DFC3518A77C00AAAAAAAAAAAA9C01D555555555557C0180000000000013F9 D950C83FB7301C00AAAAAAAAAAAA9C01D555555555557C0155555555555563F89CA252 ADB3659C00AAAAAAAAAAAA9C01D555555555557C012AAAAAAAAAAABBF4845C8A0CE4F7 CC00AAAAAAAAAAAA9C01D555555555557C010000000000000BF86C16C16C16C04C00AA AAAAAAAAAA9C01D555555555557C00AAAAAAAAAAAABBF92F684BDA12F5DC00AAAAAAAA AAAA9C01D555555555557C005555555555556BF97839A5BC7DE97C00AAAAAAAAAAAA9C 01D555555555557C000000000000001BF9907F6E5D4C3A9C00AAAAAAAAAAAA9C01D555 555555557BFF5555555555558BF97839A5BC7DE97C00AAAAAAAAAAAA9C01D555555555 557BFE555555555555BBF92F684BDA12F61C00AAAAAAAAAAAA9C01D555555555557BCC 8000000000000BF86C16C16C16C08C00AAAAAAAAAAAA9C01D5555555555573FE555555 555554FBF4845C8A0CE5059C00AAAAAAAAAAAA9C01D5555555555573FF555555555555 23F89CA252ADB3647C00AAAAAAAAAAAA9C01D5555555555573FFFFFFFFFFFFFFC3F9D9 50C83FB72EEC00AAAAAAAAAAAA9C01D55555555555740055555555555533FA8A6DFC35 18A6FC00AAAAAAAAAAAA9C01D555555555557400AAAAAAAAAAAA83FB203CAE759203DC 00AAAAAAAAAAAA9C01D555555555557400FFFFFFFFFFFFD3FB87654320FEDCBC00AAAA AAAAAAAA9C01D5555555555574012AAAAAAAAAAA93FBFAB0BC1CD2DE2C00AAAAAAAAAA AA9C01D55555555555740155555555555543FC3D0F8CB487042C00AAAAAAAAAAAA9C01 D5555555555574017FFFFFFFFFFFF3FC82D82D82D82D8C00AAAAAAAAAAAA9C01D55555 5555557401AAAAAAAAAAAAA3FCCEB240795CEB3C00AAAAAAAAAAAA9C01D55555555555 7401D5555555555553FD104EE2CC0A9E9C00AAAAAAAAAAAA9C01D55555555555740200 000000000003FD3C4D5E6F8091BC00AAAAAAAAAAAA9C01D55555555555740215555555 555553FD6B549327104EEC00AAAAAAAAAAAA9C01D5555555555574022AAAAAAAAAAAA3 FD9D6480F2B9D64C00AAAAAAAAAAAA9C01D5555555555574023FFFFFFFFFFFF3FDD27D 27D27D27CC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC0240000000000003FC3E93E93E93 E93C00AAAAAAAAAAAA9C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FBF19690E0857FEC00 AAAAAAAAAAAA9C01AAAAAAAAAAAACC0215555555555563FB722833944A55CC00AAAAAA AAAAAA9C01AAAAAAAAAAAACC0200000000000013FAFDB97530ECA8EC00AAAAAAAAAAAA 9C01AAAAAAAAAAAACC01D5555555555573FA2F684BDA12F6DC00AAAAAAAAAAAA9C01AA AAAAAAAAAACC01AAAAAAAAAAAAC3F8E573AC901E572C00AAAAAAAAAAAA9C01AAAAAAAA AAAACC018000000000001BF723456789ABCDBC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC 015555555555556BF953D0F8CB4870CC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC012AAA AAAAAAAABBFA1722833944A5AC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC010000000000 000BFA6C16C16C16C1DC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFA A8C536FE1A8CBC00AAAAAAAAAAAA9C01AAAAAAAAAAAACC005555555555556BFACD2DE3 EF50066C00AAAAAAAAAAAA9C01AAAAAAAAAAAACC000000000000001BFAD950C83FB72E FC00AAAAAAAAAAAA9C01AAAAAAAAAAAACBFF5555555555558BFACD2DE3EF50067C00AA AAAAAAAAAA9C01AAAAAAAAAAAACBFE555555555555BBFAA8C536FE1A8CBC00AAAAAAAA AAAA9C01AAAAAAAAAAAACBCC8000000000000BFA6C16C16C16C1DC00AAAAAAAAAAAA9C 01AAAAAAAAAAAAC3FE555555555554FBFA1722833944A5DC00AAAAAAAAAAAA9C01AAAA AAAAAAAAC3FF5555555555552BF953D0F8CB48713C00AAAAAAAAAAAA9C01AAAAAAAAAA AAC3FFFFFFFFFFFFFFCBF723456789ABD20C00AAAAAAAAAAAA9C01AAAAAAAAAAAAC400 55555555555533F8E573AC901E54EC00AAAAAAAAAAAA9C01AAAAAAAAAAAAC400AAAAAA AAAAAA83FA2F684BDA12F5EC00AAAAAAAAAAAA9C01AAAAAAAAAAAAC400FFFFFFFFFFFF D3FAFDB97530ECA7AC00AAAAAAAAAAAA9C01AAAAAAAAAAAAC4012AAAAAAAAAAA93FB72 2833944A555C00AAAAAAAAAAAA9C01AAAAAAAAAAAAC40155555555555543FBF19690E0 857F7C00AAAAAAAAAAAA9C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FC3E93E93E93E91C 00AAAAAAAAAAAA9C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FC8A6DFC3518A6CC00AAAA AAAAAAAA9C01AAAAAAAAAAAAC401D5555555555553FCDC598153D0F8BC00AAAAAAAAAA AA9C01AAAAAAAAAAAAC40200000000000003FD1A2B3C4D5E6F8C00AAAAAAAAAAAA9C01 AAAAAAAAAAAAC40215555555555553FD49327104EE2CBC00AAAAAAAAAAAA9C01AAAAAA AAAAAAC4022AAAAAAAAAAAA3FD7B425ED097B40C00AAAAAAAAAAAA9C01AAAAAAAAAAAA C4023FFFFFFFFFFFF3FDB05B05B05B059C00AAAAAAAAAAAA9C018000000000001C0240 000000000003FC0369D0369D037C00AAAAAAAAAAAA9C018000000000001C022AAAAAAA AAAAB3FB7B425ED097B46C00AAAAAAAAAAAA9C018000000000001C0215555555555563 FAF7A80308B9149C00AAAAAAAAAAAA9C018000000000001C0200000000000013FA1111 11111111EC00AAAAAAAAAAAA9C018000000000001C01D5555555555573F80AFF9EE8DD 7F2C00AAAAAAAAAAAA9C018000000000001C01AAAAAAAAAAAACBF8CD2DE3EF5004EC00 AAAAAAAAAAAA9C018000000000001C018000000000001BFA111111111110BC00AAAAAA AAAAAA9C018000000000001C015555555555556BFA9690E0857FCF6C00AAAAAAAAAAAA 9C018000000000001C012AAAAAAAAAAABBFB01E573AC901E5C00AAAAAAAAAAAA9C0180 00000000001C010000000000000BFB2C5F92C5F92C6C00AAAAAAAAAAAA9C0180000000 00001C00AAAAAAAAAAAABBFB4AB6CD8EFB11DC00AAAAAAAAAAAA9C018000000000001C 005555555555556BFB5CEB240795CEBC00AAAAAAAAAAAA9C018000000000001C000000 000000001BFB62FC962FC9630C00AAAAAAAAAAAA9C018000000000001BFF5555555555 558BFB5CEB240795CEBC00AAAAAAAAAAAA9C018000000000001BFE555555555555BBFB 4AB6CD8EFB11EC00AAAAAAAAAAAA9C018000000000001BCC8000000000000BFB2C5F92 C5F92C7C00AAAAAAAAAAAA9C0180000000000013FE555555555554FBFB01E573AC901E 7C00AAAAAAAAAAAA9C0180000000000013FF5555555555552BFA9690E0857FCFAC00AA AAAAAAAAAA9C0180000000000013FFFFFFFFFFFFFFCBFA1111111111114C00AAAAAAAA AAAA9C0180000000000014005555555555553BF8CD2DE3EF50073C00AAAAAAAAAAAA9C 018000000000001400AAAAAAAAAAAA83F80AFF9EE8DD7B8C00AAAAAAAAAAAA9C018000 000000001400FFFFFFFFFFFFD3FA111111111110AC00AAAAAAAAAAAA9C018000000000 0014012AAAAAAAAAAA93FAF7A80308B913AC00AAAAAAAAAAAA9C018000000000001401 55555555555543FB7B425ED097B3FC00AAAAAAAAAAAA9C0180000000000014017FFFFF FFFFFFF3FC0369D0369D035C00AAAAAAAAAAAA9C018000000000001401AAAAAAAAAAAA A3FC4F43E32D21C10C00AAAAAAAAAAAA9C018000000000001401D5555555555553FCA1 2F684BDA12FC00AAAAAAAAAAAA9C01800000000000140200000000000003FCF92C5F92 C5F94C00AAAAAAAAAAAA9C01800000000000140215555555555553FD2B9D6480F2B9DC 00AAAAAAAAAAAA9C0180000000000014022AAAAAAAAAAAA3FD5DAD524C9C412C00AAAA AAAAAAAA9C0180000000000014023FFFFFFFFFFFF3FD92C5F92C5F92BC00AAAAAAAAAA AA9C015555555555556C0240000000000003FBA2B3C4D5E6F7FC00AAAAAAAAAAAA9C01 5555555555556C022AAAAAAAAAAAB3FB1722833944A56C00AAAAAAAAAAAA9C01555555 5555556C0215555555555563FA2F684BDA12F69C00AAAAAAAAAAAA9C01555555555555 6C0200000000000013F823456789ABCF7C00AAAAAAAAAAAA9C015555555555556C01D5 55555555557BF90AFF9EE8DD7C7C00AAAAAAAAAAAA9C015555555555556C01AAAAAAAA AAAACBFA3B8B302A7A1F3C00AAAAAAAAAAAA9C015555555555556C018000000000001B FAD950C83FB72EBC00AAAAAAAAAAAA9C015555555555556C015555555555556BFB2F68 4BDA12F6BC00AAAAAAAAAAAA9C015555555555556C012AAAAAAAAAAABBFB66054F43E3 2D5C00AAAAAAAAAAAA9C015555555555556C010000000000000BFB907F6E5D4C3B6C00 AAAAAAAAAAAA9C015555555555556C00AAAAAAAAAAAABBFBAED6A9264E20DC00AAAAAA AAAAAA9C015555555555556C005555555555556BFBC10AFF9EE8DDBC00AAAAAAAAAAAA 9C015555555555556C000000000000001BFBC71C71C71C720C00AAAAAAAAAAAA9C0155 55555555556BFF5555555555558BFBC10AFF9EE8DDBC00AAAAAAAAAAAA9C0155555555 55556BFE555555555555BBFBAED6A9264E20EC00AAAAAAAAAAAA9C015555555555556B CC8000000000000BFB907F6E5D4C3B7C00AAAAAAAAAAAA9C0155555555555563FE5555 55555554FBFB66054F43E32D7C00AAAAAAAAAAAA9C0155555555555563FF5555555555 552BFB2F684BDA12F6DC00AAAAAAAAAAAA9C0155555555555563FFFFFFFFFFFFFFCBFA D950C83FB72F4C00AAAAAAAAAAAA9C0155555555555564005555555555553BFA3B8B30 2A7A1FDC00AAAAAAAAAAAA9C015555555555556400AAAAAAAAAAAA8BF90AFF9EE8DD7E 4C00AAAAAAAAAAAA9C015555555555556400FFFFFFFFFFFFD3F823456789ABCA8C00AA AAAAAAAAAA9C0155555555555564012AAAAAAAAAAA93FA2F684BDA12F5AC00AAAAAAAA AAAA9C01555555555555640155555555555543FB1722833944A4FC00AAAAAAAAAAAA9C 0155555555555564017FFFFFFFFFFFF3FBA2B3C4D5E6F7AC00AAAAAAAAAAAA9C015555 555555556401AAAAAAAAAAAAA3FC1D33F56178398C00AAAAAAAAAAAA9C015555555555 556401D5555555555553FC6F1F7A80308B7C00AAAAAAAAAAAA9C015555555555556402 00000000000003FCC71C71C71C71CC00AAAAAAAAAAAA9C015555555555556402155555 55555553FD12956D9B1DF61C00AAAAAAAAAAAA9C0155555555555564022AAAAAAAAAAA A3FD44A55B66C77D6C00AAAAAAAAAAAA9C0155555555555564023FFFFFFFFFFFF3FD79 BE02468ACEFC00AAAAAAAAAAAA9C012AAAAAAAAAAABC0240000000000003FB50C83FB7 2EA5FC00AAAAAAAAAAAA9C012AAAAAAAAAAABC022AAAAAAAAAAAB3FA8A6DFC3518A70C 00AAAAAAAAAAAA9C012AAAAAAAAAAABC0215555555555563F91722833944A52C00AAAA AAAAAAAA9C012AAAAAAAAAAABC020000000000001BF86C16C16C16C09C00AAAAAAAAAA AA9C012AAAAAAAAAAABC01D555555555557BFA2956D9B1DF623C00AAAAAAAAAAAA9C01 2AAAAAAAAAAABC01AAAAAAAAAAAACBFADF623A67EAC33C00AAAAAAAAAAAA9C012AAAAA AAAAAABC018000000000001BFB3E93E93E93E96C00AAAAAAAAAAAA9C012AAAAAAAAAAA BC015555555555556BFB8153D0F8CB489C00AAAAAAAAAAAA9C012AAAAAAAAAAABC012A AAAAAAAAAABBFBB7F0D4629B7F3C00AAAAAAAAAAAA9C012AAAAAAAAAAABC0100000000 00000BFBE26AF37C048D4C00AAAAAAAAAAAA9C012AAAAAAAAAAABC00AAAAAAAAAAAABB FC0061172283396C00AAAAAAAAAAAA9C012AAAAAAAAAAABC005555555555556BFC097B 425ED097DC00AAAAAAAAAAAA9C012AAAAAAAAAAABC000000000000001BFC0C83FB72EA 620C00AAAAAAAAAAAA9C012AAAAAAAAAAABBFF5555555555558BFC097B425ED097DC00 AAAAAAAAAAAA9C012AAAAAAAAAAABBFE555555555555BBFC0061172283397C00AAAAAA AAAAAA9C012AAAAAAAAAAABBCC8000000000000BFBE26AF37C048D6C00AAAAAAAAAAAA 9C012AAAAAAAAAAAB3FE555555555554FBFBB7F0D4629B7F6C00AAAAAAAAAAAA9C012A AAAAAAAAAAB3FF5555555555552BFB8153D0F8CB48CC00AAAAAAAAAAAA9C012AAAAAAA AAAAB3FFFFFFFFFFFFFFCBFB3E93E93E93E99C00AAAAAAAAAAAA9C012AAAAAAAAAAAB4 005555555555553BFADF623A67EAC3AC00AAAAAAAAAAAA9C012AAAAAAAAAAAB400AAAA AAAAAAAA8BFA2956D9B1DF631C00AAAAAAAAAAAA9C012AAAAAAAAAAAB400FFFFFFFFFF FFDBF86C16C16C16C50C00AAAAAAAAAAAA9C012AAAAAAAAAAAB4012AAAAAAAAAAA93F9 1722833944A37C00AAAAAAAAAAAA9C012AAAAAAAAAAAB40155555555555543FA8A6DFC 3518A60C00AAAAAAAAAAAA9C012AAAAAAAAAAAB4017FFFFFFFFFFFF3FB50C83FB72EA5 BC00AAAAAAAAAAAA9C012AAAAAAAAAAAB401AAAAAAAAAAAAA3FBE87C65A438211C00AA AAAAAAAAAA9C012AAAAAAAAAAAB401D5555555555553FC4629B7F0D4628C00AAAAAAAA AAAA9C012AAAAAAAAAAAB40200000000000003FC9E26AF37C048CC00AAAAAAAAAAAA9C 012AAAAAAAAAAAB40215555555555553FCFC3518A6DFC33C00AAAAAAAAAAAA9C012AAA AAAAAAAAB4022AAAAAAAAAAAA3FD302A7A1F1968FC00AAAAAAAAAAAA9C012AAAAAAAAA AAB4023FFFFFFFFFFFF3FD654320FEDCBA7C00AAAAAAAAAAAA9C010000000000000C02 40000000000003FB111111111110FC00AAAAAAAAAAAA9C010000000000000C022AAAAA AAAAAAB3FA0AFF9EE8DD7D0C00AAAAAAAAAAAA9C010000000000000C02155555555555 63F5845C8A0CE51A0C00AAAAAAAAAAAA9C010000000000000C020000000000001BF9B4 E81B4E81B3DC00AAAAAAAAAAAA9C010000000000000C01D555555555557BFAA8C536FE 1A8BFC00AAAAAAAAAAAA9C010000000000000C01AAAAAAAAAAAACBFB2F684BDA12F68C 00AAAAAAAAAAAA9C010000000000000C018000000000001BFB7E4B17E4B17E4C00AAAA AAAAAAAA9C010000000000000C015555555555556BFBC10AFF9EE8DD9C00AAAAAAAAAA AA9C010000000000000C012AAAAAAAAAAABBFBF7A80308B9143C00AAAAAAAAAAAA9C01 0000000000000C010000000000000BFC1111111111112C00AAAAAAAAAAAA9C01000000 0000000C00AAAAAAAAAAAABBFC203CAE759203EC00AAAAAAAAAAAA9C01000000000000 0C005555555555556BFC2956D9B1DF625C00AAAAAAAAAAAA9C010000000000000C0000 00000000001BFC2C5F92C5F92C7C00AAAAAAAAAAAA9C010000000000000BFF55555555 55558BFC2956D9B1DF624C00AAAAAAAAAAAA9C010000000000000BFE555555555555BB FC203CAE759203EC00AAAAAAAAAAAA9C010000000000000BCC8000000000000BFC1111 111111112C00AAAAAAAAAAAA9C0100000000000003FE555555555554FBFBF7A80308B9 145C00AAAAAAAAAAAA9C0100000000000003FF5555555555552BFBC10AFF9EE8DDBC00 AAAAAAAAAAAA9C0100000000000003FFFFFFFFFFFFFFCBFB7E4B17E4B17E8C00AAAAAA AAAAAA9C0100000000000004005555555555553BFB2F684BDA12F6CC00AAAAAAAAAAAA 9C010000000000000400AAAAAAAAAAAA8BFAA8C536FE1A8CFC00AAAAAAAAAAAA9C0100 00000000000400FFFFFFFFFFFFDBF9B4E81B4E81B64C00AAAAAAAAAAAA9C0100000000 000004012AAAAAAAAAAA93F5845C8A0CE4FB1C00AAAAAAAAAAAA9C0100000000000004 0155555555555543FA0AFF9EE8DD7C2C00AAAAAAAAAAAA9C0100000000000004017FFF FFFFFFFFF3FB111111111110CC00AAAAAAAAAAAA9C010000000000000401AAAAAAAAAA AAA3FBA8C536FE1A8C2C00AAAAAAAAAAAA9C010000000000000401D5555555555553FC 264E209DC5980C00AAAAAAAAAAAA9C01000000000000040200000000000003FC7E4B17 E4B17E4C00AAAAAAAAAAAA9C01000000000000040215555555555553FCDC598153D0F8 BC00AAAAAAAAAAAA9C0100000000000004022AAAAAAAAAAAA3FD203CAE759203BC00AA AAAAAAAAAA9C0100000000000004023FFFFFFFFFFFF3FD5555555555553C00AAAAAAAA AAAA9C00AAAAAAAAAAAABC0240000000000003FAC71C71C71C716C00AAAAAAAAAAAA9C 00AAAAAAAAAAAABC022AAAAAAAAAAAB3F95FF3DD1BAF990C00AAAAAAAAAAAA9C00AAAA AAAAAAAABC021555555555556BF83B8B302A7A20CC00AAAAAAAAAAAA9C00AAAAAAAAAA AABC020000000000001BFA3579BE02468AEC00AAAAAAAAAAAA9C00AAAAAAAAAAAABC01 D555555555557BFB01E573AC901E6C00AAAAAAAAAAAA9C00AAAAAAAAAAAABC01AAAAAA AAAAAACBFB5CEB240795CEEC00AAAAAAAAAAAA9C00AAAAAAAAAAAABC01800000000000 1BFBABCDF0123456AC00AAAAAAAAAAAA9C00AAAAAAAAAAAABC015555555555556BFBEE 8DD7CC6BB5FC00AAAAAAAAAAAA9C00AAAAAAAAAAAABC012AAAAAAAAAAABBFC12956D9B 1DF64C00AAAAAAAAAAAA9C00AAAAAAAAAAAABC010000000000000BFC27D27D27D27D5C 00AAAAAAAAAAAA9C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFC36FE1A8C53701C00AAAA AAAAAAAA9C00AAAAAAAAAAAABC005555555555556BFC401845C8A0CE8C00AAAAAAAAAA AA9C00AAAAAAAAAAAABC000000000000001BFC4320FEDCBA98AC00AAAAAAAAAAAA9C00 AAAAAAAAAAAABBFF5555555555558BFC401845C8A0CE7C00AAAAAAAAAAAA9C00AAAAAA AAAAAABBFE555555555555BBFC36FE1A8C53701C00AAAAAAAAAAAA9C00AAAAAAAAAAAA BBCC8000000000000BFC27D27D27D27D5C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB3FE55 5555555554FBFC12956D9B1DF65C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB3FF55555555 55552BFBEE8DD7CC6BB60C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCB FBABCDF0123456EC00AAAAAAAAAAAA9C00AAAAAAAAAAAAB4005555555555553BFB5CEB 240795CF2C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFB01E573AC90 1EDC00AAAAAAAAAAAA9C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFA3579BE02468BEC00 AAAAAAAAAAAA9C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BF83B8B302A7A23AC00AAAAAA AAAAAA9C00AAAAAAAAAAAAB40155555555555543F95FF3DD1BAF96BC00AAAAAAAAAAAA 9C00AAAAAAAAAAAAB4017FFFFFFFFFFFF3FAC71C71C71C70BC00AAAAAAAAAAAA9C00AA AAAAAAAAAAB401AAAAAAAAAAAAA3FB7B425ED097B3CC00AAAAAAAAAAAA9C00AAAAAAAA AAAAB401D5555555555553FC0F8CB487042BDC00AAAAAAAAAAAA9C00AAAAAAAAAAAAB4 0200000000000003FC6789ABCDF0122C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB4021555 5555555553FCC598153D0F8C8C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB4022AAAAAAAAA AAA3FD14DBF86A314D9C00AAAAAAAAAAAA9C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD 49F49F49F49F2C00AAAAAAAAAAAA9C005555555555556C0240000000000003FA907F6E 5D4C3AEC00AAAAAAAAAAAA9C005555555555556C022AAAAAAAAAAAB3F8E573AC901E58 1C00AAAAAAAAAAAA9C005555555555556C021555555555556BF90AFF9EE8DD7D6C00AA AAAAAAAAAA9C005555555555556C020000000000001BFA6C16C16C16C16C00AAAAAAAA AAAA9C005555555555556C01D555555555557BFB1D33F5617839AC00AAAAAAAAAAAA9C 005555555555556C01AAAAAAAAAAAACBFB7839A5BC7DEA2C00AAAAAAAAAAAA9C005555 555555556C018000000000001BFBC71C71C71C71EC00AAAAAAAAAAAA9C005555555555 556C015555555555556BFC04EE2CC0A9E89C00AAAAAAAAAAAA9C005555555555556C01 2AAAAAAAAAAABBFC203CAE759203EC00AAAAAAAAAAAA9C005555555555556C01000000 0000000BFC3579BE02468AFC00AAAAAAAAAAAA9C005555555555556C00AAAAAAAAAAAA BBFC44A55B66C77DBC00AAAAAAAAAAAA9C005555555555556C005555555555556BFC4D BF86A314DC2C00AAAAAAAAAAAA9C005555555555556C000000000000001BFC50C83FB7 2EA64C00AAAAAAAAAAAA9C005555555555556BFF5555555555558BFC4DBF86A314DC1C 00AAAAAAAAAAAA9C005555555555556BFE555555555555BBFC44A55B66C77DBC00AAAA AAAAAAAA9C005555555555556BCC8000000000000BFC3579BE02468AFC00AAAAAAAAAA AA9C0055555555555563FE555555555554FBFC203CAE759203FC00AAAAAAAAAAAA9C00 55555555555563FF5555555555552BFC04EE2CC0A9E8AC00AAAAAAAAAAAA9C00555555 55555563FFFFFFFFFFFFFFCBFBC71C71C71C722C00AAAAAAAAAAAA9C00555555555555 64005555555555553BFB7839A5BC7DEA6C00AAAAAAAAAAAA9C005555555555556400AA AAAAAAAAAA8BFB1D33F561783A1C00AAAAAAAAAAAA9C005555555555556400FFFFFFFF FFFFDBFA6C16C16C16C26C00AAAAAAAAAAAA9C0055555555555564012AAAAAAAAAAA9B F90AFF9EE8DD7EDC00AAAAAAAAAAAA9C00555555555555640155555555555543F8E573 AC901E537C00AAAAAAAAAAAA9C0055555555555564017FFFFFFFFFFFF3FA907F6E5D4C 3A3C00AAAAAAAAAAAA9C005555555555556401AAAAAAAAAAAAA3FB5FF3DD1BAF988C00 AAAAAAAAAAAA9C005555555555556401D5555555555553FC01E573AC901E3C00AAAAAA AAAAAA9C00555555555555640200000000000003FC59E26AF37C048C00AAAAAAAAAAAA 9C00555555555555640215555555555553FCB7F0D4629B7EEC00AAAAAAAAAAAA9C0055 555555555564022AAAAAAAAAAAA3FD0E0857FCF746CC00AAAAAAAAAAAA9C0055555555 555564023FFFFFFFFFFFF3FD4320FEDCBA985C00AAAAAAAAAAAA9C000000000000001C 0240000000000003FA7E4B17E4B17DEC00AAAAAAAAAAAA9C000000000000001C022AAA AAAAAAAAB3F89CA252ADB3641C00AAAAAAAAAAAA9C000000000000001C021555555555 556BF92F684BDA12F66C00AAAAAAAAAAAA9C000000000000001C020000000000001BFA 7E4B17E4B17DEC00AAAAAAAAAAAA9C000000000000001C01D555555555557BFB264E20 9DC5980C00AAAAAAAAAAAA9C000000000000001C01AAAAAAAAAAAACBFB8153D0F8CB48 8C00AAAAAAAAAAAA9C000000000000001C018000000000001BFBD0369D0369D04C00AA AAAAAAAAAA9C000000000000001C015555555555556BFC097B425ED097CC00AAAAAAAA AAAA9C000000000000001C012AAAAAAAAAAABBFC24C9C413B8B31C00AAAAAAAAAAAA9C 000000000000001C010000000000000BFC3A06D3A06D3A2C00AAAAAAAAAAAA9C000000 000000001C00AAAAAAAAAAAABBFC49327104EE2CEC00AAAAAAAAAAAA9C000000000000 001C005555555555556BFC524C9C413B8B5C00AAAAAAAAAAAA9C000000000000001C00 0000000000001BFC5555555555557C00AAAAAAAAAAAA9C000000000000001BFF555555 5555558BFC524C9C413B8B4C00AAAAAAAAAAAA9C000000000000001BFE555555555555 BBFC49327104EE2CEC00AAAAAAAAAAAA9C000000000000001BCC8000000000000BFC3A 06D3A06D3A2C00AAAAAAAAAAAA9C0000000000000013FE555555555554FBFC24C9C413 B8B32C00AAAAAAAAAAAA9C0000000000000013FF5555555555552BFC097B425ED097DC 00AAAAAAAAAAAA9C0000000000000013FFFFFFFFFFFFFFCBFBD0369D0369D09C00AAAA AAAAAAAA9C0000000000000014005555555555553BFB8153D0F8CB48CC00AAAAAAAAAA AA9C000000000000001400AAAAAAAAAAAA8BFB264E209DC5987C00AAAAAAAAAAAA9C00 0000000000001400FFFFFFFFFFFFDBFA7E4B17E4B17F2C00AAAAAAAAAAAA9C00000000 00000014012AAAAAAAAAAA9BF92F684BDA12F85C00AAAAAAAAAAAA9C00000000000000 140155555555555543F89CA252ADB3607C00AAAAAAAAAAAA9C0000000000000014017F FFFFFFFFFFF3FA7E4B17E4B17D7C00AAAAAAAAAAAA9C000000000000001401AAAAAAAA AAAAA3FB56D9B1DF623A2C00AAAAAAAAAAAA9C000000000000001401D5555555555553 FBFAB0BC1CD2DE0C00AAAAAAAAAAAA9C00000000000000140200000000000003FC5555 555555554C00AAAAAAAAAAAA9C00000000000000140215555555555553FCB363BEC474 CFBC00AAAAAAAAAAAA9C0000000000000014022AAAAAAAAAAAA3FD0BC1CD2DE3EF3C00 AAAAAAAAAAAA9C0000000000000014023FFFFFFFFFFFF3FD40DA740DA740BC00AAAAAA AAAAAA9BFF5555555555558C0240000000000003FA907F6E5D4C3AEC00AAAAAAAAAAAA 9BFF5555555555558C022AAAAAAAAAAAB3F8E573AC901E581C00AAAAAAAAAAAA9BFF55 55555555558C021555555555556BF90AFF9EE8DD7D6C00AAAAAAAAAAAA9BFF55555555 55558C020000000000001BFA6C16C16C16C16C00AAAAAAAAAAAA9BFF5555555555558C 01D555555555557BFB1D33F5617839AC00AAAAAAAAAAAA9BFF5555555555558C01AAAA AAAAAAAACBFB7839A5BC7DEA2C00AAAAAAAAAAAA9BFF5555555555558C018000000000 001BFBC71C71C71C71EC00AAAAAAAAAAAA9BFF5555555555558C015555555555556BFC 04EE2CC0A9E89C00AAAAAAAAAAAA9BFF5555555555558C012AAAAAAAAAAABBFC203CAE 759203EC00AAAAAAAAAAAA9BFF5555555555558C010000000000000BFC3579BE02468A FC00AAAAAAAAAAAA9BFF5555555555558C00AAAAAAAAAAAABBFC44A55B66C77DBC00AA AAAAAAAAAA9BFF5555555555558C005555555555556BFC4DBF86A314DC2C00AAAAAAAA AAAA9BFF5555555555558C000000000000001BFC50C83FB72EA64C00AAAAAAAAAAAA9B FF5555555555558BFF5555555555558BFC4DBF86A314DC1C00AAAAAAAAAAAA9BFF5555 555555558BFE555555555555BBFC44A55B66C77DBC00AAAAAAAAAAAA9BFF5555555555 558BCC8000000000000BFC3579BE02468AFC00AAAAAAAAAAAA9BFF55555555555583FE 555555555554FBFC203CAE759203FC00AAAAAAAAAAAA9BFF55555555555583FF555555 5555552BFC04EE2CC0A9E8AC00AAAAAAAAAAAA9BFF55555555555583FFFFFFFFFFFFFF CBFBC71C71C71C722C00AAAAAAAAAAAA9BFF55555555555584005555555555553BFB78 39A5BC7DEA6C00AAAAAAAAAAAA9BFF5555555555558400AAAAAAAAAAAA8BFB1D33F561 783A1C00AAAAAAAAAAAA9BFF5555555555558400FFFFFFFFFFFFDBFA6C16C16C16C26C 00AAAAAAAAAAAA9BFF55555555555584012AAAAAAAAAAA9BF90AFF9EE8DD7EDC00AAAA AAAAAAAA9BFF555555555555840155555555555543F8E573AC901E537C00AAAAAAAAAA AA9BFF55555555555584017FFFFFFFFFFFF3FA907F6E5D4C3A3C00AAAAAAAAAAAA9BFF 5555555555558401AAAAAAAAAAAAA3FB5FF3DD1BAF988C00AAAAAAAAAAAA9BFF555555 5555558401D5555555555553FC01E573AC901E3C00AAAAAAAAAAAA9BFF555555555555 840200000000000003FC59E26AF37C048C00AAAAAAAAAAAA9BFF555555555555840215 555555555553FCB7F0D4629B7EEC00AAAAAAAAAAAA9BFF55555555555584022AAAAAAA AAAAA3FD0E0857FCF746CC00AAAAAAAAAAAA9BFF55555555555584023FFFFFFFFFFFF3 FD4320FEDCBA985C00AAAAAAAAAAAA9BFE555555555555BC0240000000000003FAC71C 71C71C716C00AAAAAAAAAAAA9BFE555555555555BC022AAAAAAAAAAAB3F95FF3DD1BAF 990C00AAAAAAAAAAAA9BFE555555555555BC021555555555556BF83B8B302A7A1ECC00 AAAAAAAAAAAA9BFE555555555555BC020000000000001BFA3579BE02468A6C00AAAAAA AAAAAA9BFE555555555555BC01D555555555557BFB01E573AC901E4C00AAAAAAAAAAAA 9BFE555555555555BC01AAAAAAAAAAAACBFB5CEB240795CECC00AAAAAAAAAAAA9BFE55 5555555555BC018000000000001BFBABCDF01234568C00AAAAAAAAAAAA9BFE55555555 5555BC015555555555556BFBEE8DD7CC6BB5DC00AAAAAAAAAAAA9BFE555555555555BC 012AAAAAAAAAAABBFC12956D9B1DF63C00AAAAAAAAAAAA9BFE555555555555BC010000 000000000BFC27D27D27D27D4C00AAAAAAAAAAAA9BFE555555555555BC00AAAAAAAAAA AABBFC36FE1A8C53700C00AAAAAAAAAAAA9BFE555555555555BC005555555555556BFC 401845C8A0CE7C00AAAAAAAAAAAA9BFE555555555555BC000000000000001BFC4320FE DCBA989C00AAAAAAAAAAAA9BFE555555555555BBFF5555555555558BFC401845C8A0CE 6C00AAAAAAAAAAAA9BFE555555555555BBFE555555555555BBFC36FE1A8C53700C00AA AAAAAAAAAA9BFE555555555555BBCC8000000000000BFC27D27D27D27D4C00AAAAAAAA AAAA9BFE555555555555B3FE555555555554FBFC12956D9B1DF64C00AAAAAAAAAAAA9B FE555555555555B3FF5555555555552BFBEE8DD7CC6BB5EC00AAAAAAAAAAAA9BFE5555 55555555B3FFFFFFFFFFFFFFCBFBABCDF0123456CC00AAAAAAAAAAAA9BFE5555555555 55B4005555555555553BFB5CEB240795CF0C00AAAAAAAAAAAA9BFE555555555555B400 AAAAAAAAAAAA8BFB01E573AC901EBC00AAAAAAAAAAAA9BFE555555555555B400FFFFFF FFFFFFDBFA3579BE02468BAC00AAAAAAAAAAAA9BFE555555555555B4012AAAAAAAAAAA 9BF83B8B302A7A22AC00AAAAAAAAAAAA9BFE555555555555B40155555555555543F95F F3DD1BAF973C00AAAAAAAAAAAA9BFE555555555555B4017FFFFFFFFFFFF3FAC71C71C7 1C70FC00AAAAAAAAAAAA9BFE555555555555B401AAAAAAAAAAAAA3FB7B425ED097B3EC 00AAAAAAAAAAAA9BFE555555555555B401D5555555555553FC0F8CB487042BEC00AAAA AAAAAAAA9BFE555555555555B40200000000000003FC6789ABCDF0122C00AAAAAAAAAA AA9BFE555555555555B40215555555555553FCC598153D0F8C9C00AAAAAAAAAAAA9BFE 555555555555B4022AAAAAAAAAAAA3FD14DBF86A314DAC00AAAAAAAAAAAA9BFE555555 555555B4023FFFFFFFFFFFF3FD49F49F49F49F2C00AAAAAAAAAAAA9BCC800000000000 0C0240000000000003FB111111111110FC00AAAAAAAAAAAA9BCC8000000000000C022A AAAAAAAAAAB3FA0AFF9EE8DD7D0C00AAAAAAAAAAAA9BCC8000000000000C0215555555 555563F5845C8A0CE5120C00AAAAAAAAAAAA9BCC8000000000000C020000000000001B F9B4E81B4E81B45C00AAAAAAAAAAAA9BCC8000000000000C01D555555555557BFAA8C5 36FE1A8C3C00AAAAAAAAAAAA9BCC8000000000000C01AAAAAAAAAAAACBFB2F684BDA12 F6AC00AAAAAAAAAAAA9BCC8000000000000C018000000000001BFB7E4B17E4B17E6C00 AAAAAAAAAAAA9BCC8000000000000C015555555555556BFBC10AFF9EE8DDBC00AAAAAA AAAAAA9BCC8000000000000C012AAAAAAAAAAABBFBF7A80308B9145C00AAAAAAAAAAAA 9BCC8000000000000C010000000000000BFC1111111111113C00AAAAAAAAAAAA9BCC80 00000000000C00AAAAAAAAAAAABBFC203CAE759203FC00AAAAAAAAAAAA9BCC80000000 00000C005555555555556BFC2956D9B1DF626C00AAAAAAAAAAAA9BCC8000000000000C 000000000000001BFC2C5F92C5F92C8C00AAAAAAAAAAAA9BCC8000000000000BFF5555 555555558BFC2956D9B1DF625C00AAAAAAAAAAAA9BCC8000000000000BFE5555555555 55BBFC203CAE759203FC00AAAAAAAAAAAA9BCC8000000000000BCC8000000000000BFC 1111111111113C00AAAAAAAAAAAA9BCC80000000000003FE555555555554FBFBF7A803 08B9147C00AAAAAAAAAAAA9BCC80000000000003FF5555555555552BFBC10AFF9EE8DD DC00AAAAAAAAAAAA9BCC80000000000003FFFFFFFFFFFFFFCBFB7E4B17E4B17EAC00AA AAAAAAAAAA9BCC80000000000004005555555555553BFB2F684BDA12F6EC00AAAAAAAA AAAA9BCC8000000000000400AAAAAAAAAAAA8BFAA8C536FE1A8D3C00AAAAAAAAAAAA9B CC8000000000000400FFFFFFFFFFFFDBF9B4E81B4E81B6CC00AAAAAAAAAAAA9BCC8000 0000000004012AAAAAAAAAAA93F5845C8A0CE4F31C00AAAAAAAAAAAA9BCC8000000000 00040155555555555543FA0AFF9EE8DD7BEC00AAAAAAAAAAAA9BCC8000000000000401 7FFFFFFFFFFFF3FB111111111110AC00AAAAAAAAAAAA9BCC8000000000000401AAAAAA AAAAAAA3FBA8C536FE1A8C0C00AAAAAAAAAAAA9BCC8000000000000401D55555555555 53FC264E209DC597FC00AAAAAAAAAAAA9BCC800000000000040200000000000003FC7E 4B17E4B17E4C00AAAAAAAAAAAA9BCC800000000000040215555555555553FCDC598153 D0F8AC00AAAAAAAAAAAA9BCC80000000000004022AAAAAAAAAAAA3FD203CAE759203AC 00AAAAAAAAAAAA9BCC80000000000004023FFFFFFFFFFFF3FD5555555555553C00AAAA AAAAAAAA93FE555555555554FC0240000000000003FB50C83FB72EA5FC00AAAAAAAAAA AA93FE555555555554FC022AAAAAAAAAAAB3FA8A6DFC3518A6CC00AAAAAAAAAAAA93FE 555555555554FC0215555555555563F91722833944A52C00AAAAAAAAAAAA93FE555555 555554FC020000000000001BF86C16C16C16C09C00AAAAAAAAAAAA93FE555555555554 FC01D555555555557BFA2956D9B1DF623C00AAAAAAAAAAAA93FE555555555554FC01AA AAAAAAAAAACBFADF623A67EAC33C00AAAAAAAAAAAA93FE555555555554FC0180000000 00001BFB3E93E93E93E96C00AAAAAAAAAAAA93FE555555555554FC015555555555556B FB8153D0F8CB48BC00AAAAAAAAAAAA93FE555555555554FC012AAAAAAAAAAABBFBB7F0 D4629B7F5C00AAAAAAAAAAAA93FE555555555554FC010000000000000BFBE26AF37C04 8D6C00AAAAAAAAAAAA93FE555555555554FC00AAAAAAAAAAAABBFC0061172283397C00 AAAAAAAAAAAA93FE555555555554FC005555555555556BFC097B425ED097EC00AAAAAA AAAAAA93FE555555555554FC000000000000001BFC0C83FB72EA620C00AAAAAAAAAAAA 93FE555555555554FBFF5555555555558BFC097B425ED097DC00AAAAAAAAAAAA93FE55 5555555554FBFE555555555555BBFC0061172283397C00AAAAAAAAAAAA93FE55555555 5554FBCC8000000000000BFBE26AF37C048D7C00AAAAAAAAAAAA93FE555555555554F3 FE555555555554FBFBB7F0D4629B7F7C00AAAAAAAAAAAA93FE555555555554F3FF5555 555555552BFB8153D0F8CB48DC00AAAAAAAAAAAA93FE555555555554F3FFFFFFFFFFFF FFCBFB3E93E93E93E9AC00AAAAAAAAAAAA93FE555555555554F4005555555555553BFA DF623A67EAC3CC00AAAAAAAAAAAA93FE555555555554F400AAAAAAAAAAAA8BFA2956D9 B1DF633C00AAAAAAAAAAAA93FE555555555554F400FFFFFFFFFFFFDBF86C16C16C16C5 8C00AAAAAAAAAAAA93FE555555555554F4012AAAAAAAAAAA93F91722833944A33C00AA AAAAAAAAAA93FE555555555554F40155555555555543FA8A6DFC3518A5EC00AAAAAAAA AAAA93FE555555555554F4017FFFFFFFFFFFF3FB50C83FB72EA5AC00AAAAAAAAAAAA93 FE555555555554F401AAAAAAAAAAAAA3FBE87C65A438210C00AAAAAAAAAAAA93FE5555 55555554F401D5555555555553FC4629B7F0D4627C00AAAAAAAAAAAA93FE5555555555 54F40200000000000003FC9E26AF37C048CC00AAAAAAAAAAAA93FE555555555554F402 15555555555553FCFC3518A6DFC32C00AAAAAAAAAAAA93FE555555555554F4022AAAAA AAAAAAA3FD302A7A1F1968EC00AAAAAAAAAAAA93FE555555555554F4023FFFFFFFFFFF F3FD654320FEDCBA7C00AAAAAAAAAAAA93FF5555555555552C0240000000000003FBA2 B3C4D5E6F7DC00AAAAAAAAAAAA93FF5555555555552C022AAAAAAAAAAAB3FB17228339 44A54C00AAAAAAAAAAAA93FF5555555555552C0215555555555563FA2F684BDA12F65C 00AAAAAAAAAAAA93FF5555555555552C0200000000000013F823456789ABCE7C00AAAA AAAAAAAA93FF5555555555552C01D555555555557BF90AFF9EE8DD7CFC00AAAAAAAAAA AA93FF5555555555552C01AAAAAAAAAAAACBFA3B8B302A7A1F7C00AAAAAAAAAAAA93FF 5555555555552C018000000000001BFAD950C83FB72EFC00AAAAAAAAAAAA93FF555555 5555552C015555555555556BFB2F684BDA12F6DC00AAAAAAAAAAAA93FF555555555555 2C012AAAAAAAAAAABBFB66054F43E32D7C00AAAAAAAAAAAA93FF5555555555552C0100 00000000000BFB907F6E5D4C3B8C00AAAAAAAAAAAA93FF5555555555552C00AAAAAAAA AAAABBFBAED6A9264E20FC00AAAAAAAAAAAA93FF5555555555552C005555555555556B FBC10AFF9EE8DDDC00AAAAAAAAAAAA93FF5555555555552C000000000000001BFBC71C 71C71C722C00AAAAAAAAAAAA93FF5555555555552BFF5555555555558BFBC10AFF9EE8 DDDC00AAAAAAAAAAAA93FF5555555555552BFE555555555555BBFBAED6A9264E210C00 AAAAAAAAAAAA93FF5555555555552BCC8000000000000BFB907F6E5D4C3B9C00AAAAAA AAAAAA93FF55555555555523FE555555555554FBFB66054F43E32D9C00AAAAAAAAAAAA 93FF55555555555523FF5555555555552BFB2F684BDA12F6FC00AAAAAAAAAAAA93FF55 555555555523FFFFFFFFFFFFFFCBFAD950C83FB72F8C00AAAAAAAAAAAA93FF55555555 555524005555555555553BFA3B8B302A7A201C00AAAAAAAAAAAA93FF55555555555524 00AAAAAAAAAAAA8BF90AFF9EE8DD7ECC00AAAAAAAAAAAA93FF5555555555552400FFFF FFFFFFFFD3F823456789ABC98C00AAAAAAAAAAAA93FF55555555555524012AAAAAAAAA AA93FA2F684BDA12F56C00AAAAAAAAAAAA93FF555555555555240155555555555543FB 1722833944A4DC00AAAAAAAAAAAA93FF55555555555524017FFFFFFFFFFFF3FBA2B3C4 D5E6F78C00AAAAAAAAAAAA93FF5555555555552401AAAAAAAAAAAAA3FC1D33F5617839 7C00AAAAAAAAAAAA93FF5555555555552401D5555555555553FC6F1F7A80308B6C00AA AAAAAAAAAA93FF555555555555240200000000000003FCC71C71C71C71AC00AAAAAAAA AAAA93FF555555555555240215555555555553FD12956D9B1DF60C00AAAAAAAAAAAA93 FF55555555555524022AAAAAAAAAAAA3FD44A55B66C77D6C00AAAAAAAAAAAA93FF5555 5555555524023FFFFFFFFFFFF3FD79BE02468ACEEC00AAAAAAAAAAAA93FFFFFFFFFFFF FFCC0240000000000003FC0369D0369D033C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC02 2AAAAAAAAAAAB3FB7B425ED097B40C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC02155555 55555563FAF7A80308B9139C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC02000000000000 13FA111111111110EC00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC01D5555555555573F80A FF9EE8DD7B2C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBF8CD2DE3EF 5008EC00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC018000000000001BFA111111111111BC 00AAAAAAAAAAAA93FFFFFFFFFFFFFFCC015555555555556BFA9690E0857FD02C00AAAA AAAAAAAA93FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFB01E573AC901EBC00AAAAAAAAAA AA93FFFFFFFFFFFFFFCC010000000000000BFB2C5F92C5F92CCC00AAAAAAAAAAAA93FF FFFFFFFFFFFFCC00AAAAAAAAAAAABBFB4AB6CD8EFB124C00AAAAAAAAAAAA93FFFFFFFF FFFFFFCC005555555555556BFB5CEB240795CF2C00AAAAAAAAAAAA93FFFFFFFFFFFFFF CC000000000000001BFB62FC962FC9637C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCBFF55 55555555558BFB5CEB240795CF2C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCBFE55555555 5555BBFB4AB6CD8EFB125C00AAAAAAAAAAAA93FFFFFFFFFFFFFFCBCC8000000000000B FB2C5F92C5F92CEC00AAAAAAAAAAAA93FFFFFFFFFFFFFFC3FE555555555554FBFB01E5 73AC901EEC00AAAAAAAAAAAA93FFFFFFFFFFFFFFC3FF5555555555552BFA9690E0857F D08C00AAAAAAAAAAAA93FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFA1111111111122C00 AAAAAAAAAAAA93FFFFFFFFFFFFFFC4005555555555553BF8CD2DE3EF500ABC00AAAAAA AAAAAA93FFFFFFFFFFFFFFC400AAAAAAAAAAAA83F80AFF9EE8DD780C00AAAAAAAAAAAA 93FFFFFFFFFFFFFFC400FFFFFFFFFFFFD3FA11111111110FCC00AAAAAAAAAAAA93FFFF FFFFFFFFFFC4012AAAAAAAAAAA93FAF7A80308B912CC00AAAAAAAAAAAA93FFFFFFFFFF FFFFC40155555555555543FB7B425ED097B38C00AAAAAAAAAAAA93FFFFFFFFFFFFFFC4 017FFFFFFFFFFFF3FC0369D0369D031C00AAAAAAAAAAAA93FFFFFFFFFFFFFFC401AAAA AAAAAAAAA3FC4F43E32D21C0CC00AAAAAAAAAAAA93FFFFFFFFFFFFFFC401D555555555 5553FCA12F684BDA12CC00AAAAAAAAAAAA93FFFFFFFFFFFFFFC40200000000000003FC F92C5F92C5F90C00AAAAAAAAAAAA93FFFFFFFFFFFFFFC40215555555555553FD2B9D64 80F2B9BC00AAAAAAAAAAAA93FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FD5DAD524C9C41 1C00AAAAAAAAAAAA93FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD92C5F92C5F929C00AA AAAAAAAAAA94005555555555553C0240000000000003FC3E93E93E93E90C00AAAAAAAA AAAA94005555555555553C022AAAAAAAAAAAB3FBF19690E0857FAC00AAAAAAAAAAAA94 005555555555553C0215555555555563FB722833944A558C00AAAAAAAAAAAA94005555 555555553C0200000000000013FAFDB97530ECA82C00AAAAAAAAAAAA94005555555555 553C01D5555555555573FA2F684BDA12F61C00AAAAAAAAAAAA94005555555555553C01 AAAAAAAAAAAAC3F8E573AC901E552C00AAAAAAAAAAAA94005555555555553C01800000 0000001BF723456789ABD2BC00AAAAAAAAAAAA94005555555555553C01555555555555 6BF953D0F8CB4871CC00AAAAAAAAAAAA94005555555555553C012AAAAAAAAAAABBFA17 22833944A62C00AAAAAAAAAAAA94005555555555553C010000000000000BFA6C16C16C 16C25C00AAAAAAAAAAAA94005555555555553C00AAAAAAAAAAAABBFAA8C536FE1A8D3C 00AAAAAAAAAAAA94005555555555553C005555555555556BFACD2DE3EF5006EC00AAAA AAAAAAAA94005555555555553C000000000000001BFAD950C83FB72F9C00AAAAAAAAAA AA94005555555555553BFF5555555555558BFACD2DE3EF50070C00AAAAAAAAAAAA9400 5555555555553BFE555555555555BBFAA8C536FE1A8D4C00AAAAAAAAAAAA9400555555 5555553BCC8000000000000BFA6C16C16C16C26C00AAAAAAAAAAAA9400555555555555 33FE555555555554FBFA1722833944A66C00AAAAAAAAAAAA940055555555555533FF55 55555555552BF953D0F8CB48725C00AAAAAAAAAAAA940055555555555533FFFFFFFFFF FFFFCBF723456789ABD68C00AAAAAAAAAAAA9400555555555555340055555555555533 F8E573AC901E52AC00AAAAAAAAAAAA94005555555555553400AAAAAAAAAAAA83FA2F68 4BDA12F55C00AAAAAAAAAAAA94005555555555553400FFFFFFFFFFFFD3FAFDB97530EC A71C00AAAAAAAAAAAA940055555555555534012AAAAAAAAAAA93FB722833944A550C00 AAAAAAAAAAAA9400555555555555340155555555555543FBF19690E0857F3C00AAAAAA AAAAAA940055555555555534017FFFFFFFFFFFF3FC3E93E93E93E8FC00AAAAAAAAAAAA 94005555555555553401AAAAAAAAAAAAA3FC8A6DFC3518A6AC00AAAAAAAAAAAA940055 55555555553401D5555555555553FCDC598153D0F89C00AAAAAAAAAAAA940055555555 5555340200000000000003FD1A2B3C4D5E6F7C00AAAAAAAAAAAA940055555555555534 0215555555555553FD49327104EE2CAC00AAAAAAAAAAAA940055555555555534022AAA AAAAAAAAA3FD7B425ED097B3FC00AAAAAAAAAAAA940055555555555534023FFFFFFFFF FFF3FDB05B05B05B058C00AAAAAAAAAAAA9400AAAAAAAAAAAA8C0240000000000003FC 82D82D82D82D4C00AAAAAAAAAAAA9400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FC3D0F8C B487041C00AAAAAAAAAAAA9400AAAAAAAAAAAA8C0215555555555563FBFAB0BC1CD2DD EC00AAAAAAAAAAAA9400AAAAAAAAAAAA8C0200000000000013FB87654320FEDC9C00AA AAAAAAAAAA9400AAAAAAAAAAAA8C01D5555555555573FB203CAE7592038C00AAAAAAAA AAAA9400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3FA8A6DFC3518A61C00AAAAAAAAAAAA94 00AAAAAAAAAAAA8C0180000000000013F9D950C83FB72D5C00AAAAAAAAAAAA9400AAAA AAAAAAAA8C0155555555555563F89CA252ADB3601C00AAAAAAAAAAAA9400AAAAAAAAAA AA8C012AAAAAAAAAAABBF4845C8A0CE54FCC00AAAAAAAAAAAA9400AAAAAAAAAAAA8C01 0000000000000BF86C16C16C16C5CC00AAAAAAAAAAAA9400AAAAAAAAAAAA8C00AAAAAA AAAAAABBF92F684BDA12F89C00AAAAAAAAAAAA9400AAAAAAAAAAAA8C00555555555555 6BF97839A5BC7DEC3C00AAAAAAAAAAAA9400AAAAAAAAAAAA8C000000000000001BF990 7F6E5D4C3D5C00AAAAAAAAAAAA9400AAAAAAAAAAAA8BFF5555555555558BF97839A5BC 7DEC3C00AAAAAAAAAAAA9400AAAAAAAAAAAA8BFE555555555555BBF92F684BDA12F8DC 00AAAAAAAAAAAA9400AAAAAAAAAAAA8BCC8000000000000BF86C16C16C16C60C00AAAA AAAAAAAA9400AAAAAAAAAAAA83FE555555555554FBF4845C8A0CE55D9C00AAAAAAAAAA AA9400AAAAAAAAAAAA83FF55555555555523F89CA252ADB35EFC00AAAAAAAAAAAA9400 AAAAAAAAAAAA83FFFFFFFFFFFFFFC3F9D950C83FB72C2C00AAAAAAAAAAAA9400AAAAAA AAAAAA840055555555555533FA8A6DFC3518A59C00AAAAAAAAAAAA9400AAAAAAAAAAAA 8400AAAAAAAAAAAA83FB203CAE7592032C00AAAAAAAAAAAA9400AAAAAAAAAAAA8400FF FFFFFFFFFFD3FB87654320FEDC0C00AAAAAAAAAAAA9400AAAAAAAAAAAA84012AAAAAAA AAAA93FBFAB0BC1CD2DD7C00AAAAAAAAAAAA9400AAAAAAAAAAAA840155555555555543 FC3D0F8CB48703DC00AAAAAAAAAAAA9400AAAAAAAAAAAA84017FFFFFFFFFFFF3FC82D8 2D82D82D2C00AAAAAAAAAAAA9400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FCCEB240795C EADC00AAAAAAAAAAAA9400AAAAAAAAAAAA8401D5555555555553FD104EE2CC0A9E6C00 AAAAAAAAAAAA9400AAAAAAAAAAAA840200000000000003FD3C4D5E6F80918C00AAAAAA AAAAAA9400AAAAAAAAAAAA840215555555555553FD6B549327104ECC00AAAAAAAAAAAA 9400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD9D6480F2B9D61C00AAAAAAAAAAAA9400AA AAAAAAAAAA84023FFFFFFFFFFFF3FDD27D27D27D27AC00AAAAAAAAAAAA9400FFFFFFFF FFFFDC0240000000000003FCD0369D0369CFFC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC 022AAAAAAAAAAAB3FC8A6DFC3518A6CC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC021555 5555555563FC4AB6CD8EFB11AC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC020000000000 0013FC111111111110FC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC01D5555555555573FB BAF98D76B548EC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FB5FF3DD 1BAF986C00AAAAAAAAAAAA9400FFFFFFFFFFFFDC0180000000000013FB111111111110 AC00AAAAAAAAAAAA9400FFFFFFFFFFFFDC0155555555555563FA9CA252ADB362BC00AA AAAAAAAAAA9400FFFFFFFFFFFFDC012AAAAAAAAAAAB3FA2F684BDA12F57C00AAAAAAAA AAAA9400FFFFFFFFFFFFDC0100000000000003F9B4E81B4E81B29C00AAAAAAAAAAAA94 00FFFFFFFFFFFFDC00AAAAAAAAAAAAB3F93B8B302A7A1CDC00AAAAAAAAAAAA9400FFFF FFFFFFFFDC0055555555555563F8E573AC901E528C00AAAAAAAAAAAA9400FFFFFFFFFF FFDC0000000000000013F8B4E81B4E81B03C00AAAAAAAAAAAA9400FFFFFFFFFFFFDBFF 55555555555583F8E573AC901E527C00AAAAAAAAAAAA9400FFFFFFFFFFFFDBFE555555 555555B3F93B8B302A7A1CAC00AAAAAAAAAAAA9400FFFFFFFFFFFFDBCC800000000000 03F9B4E81B4E81B26C00AAAAAAAAAAAA9400FFFFFFFFFFFFD3FE555555555554F3FA2F 684BDA12F54C00AAAAAAAAAAAA9400FFFFFFFFFFFFD3FF55555555555523FA9CA252AD B3627C00AAAAAAAAAAAA9400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3FB1111111111106C 00AAAAAAAAAAAA9400FFFFFFFFFFFFD40055555555555533FB5FF3DD1BAF982C00AAAA AAAAAAAA9400FFFFFFFFFFFFD400AAAAAAAAAAAA83FBBAF98D76B5488C00AAAAAAAAAA AA9400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FC111111111110AC00AAAAAAAAAAAA9400 FFFFFFFFFFFFD4012AAAAAAAAAAA93FC4AB6CD8EFB116C00AAAAAAAAAAAA9400FFFFFF FFFFFFD40155555555555543FC8A6DFC3518A67C00AAAAAAAAAAAA9400FFFFFFFFFFFF D4017FFFFFFFFFFFF3FCD0369D0369CFDC00AAAAAAAAAAAA9400FFFFFFFFFFFFD401AA AAAAAAAAAAA3FD0E0857FCF746CC00AAAAAAAAAAAA9400FFFFFFFFFFFFD401D5555555 555553FD36FE1A8C536FCC00AAAAAAAAAAAA9400FFFFFFFFFFFFD40200000000000003 FD62FC962FC962EC00AAAAAAAAAAAA9400FFFFFFFFFFFFD40215555555555553FD9203 CAE759201C00AAAAAAAAAAAA9400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FDC413B8B302 A76C00AAAAAAAAAAAA9400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FDF92C5F92C5F8FC00 AAAAAAAAAAAA94012AAAAAAAAAAA9C0240000000000003FD13579BE024688C00AAAAAA AAAAAA94012AAAAAAAAAAA9C022AAAAAAAAAAAB3FCE0E696F1F7A7DC00AAAAAAAAAAAA 94012AAAAAAAAAAA9C0215555555555563FCA12F684BDA12CC00AAAAAAAAAAAA94012A AAAAAAAAAA9C0200000000000013FC6789ABCDF0121C00AAAAAAAAAAAA94012AAAAAAA AAAA9C01D5555555555573FC33F5617839A58C00AAAAAAAAAAAA94012AAAAAAAAAAA9C 01AAAAAAAAAAAAC3FC0672894AB6CD5C00AAAAAAAAAAAA94012AAAAAAAAAAA9C018000 0000000013FBBE02468ACF12DC00AAAAAAAAAAAA94012AAAAAAAAAAA9C015555555555 5563FB7B425ED097B38C00AAAAAAAAAAAA94012AAAAAAAAAAA9C012AAAAAAAAAAAB3FB 44A55B66C77CEC00AAAAAAAAAAAA94012AAAAAAAAAAA9C0100000000000003FB1A2B3C 4D5E6EDC00AAAAAAAAAAAA94012AAAAAAAAAAA9C00AAAAAAAAAAAAB3FAF7A80308B912 CC00AAAAAAAAAAAA94012AAAAAAAAAAA9C0055555555555563FAD33F561783990C00AA AAAAAAAAAA94012AAAAAAAAAAA9C0000000000000013FAC71C71C71C707C00AAAAAAAA AAAA94012AAAAAAAAAAA9BFF55555555555583FAD33F56178398FC00AAAAAAAAAAAA94 012AAAAAAAAAAA9BFE555555555555B3FAF7A80308B912BC00AAAAAAAAAAAA94012AAA AAAAAAAA9BCC80000000000003FB1A2B3C4D5E6ECC00AAAAAAAAAAAA94012AAAAAAAAA AA93FE555555555554F3FB44A55B66C77CCC00AAAAAAAAAAAA94012AAAAAAAAAAA93FF 55555555555523FB7B425ED097B36C00AAAAAAAAAAAA94012AAAAAAAAAAA93FFFFFFFF FFFFFFC3FBBE02468ACF129C00AAAAAAAAAAAA94012AAAAAAAAAAA9400555555555555 33FC0672894AB6CD3C00AAAAAAAAAAAA94012AAAAAAAAAAA9400AAAAAAAAAAAA83FC33 F5617839A55C00AAAAAAAAAAAA94012AAAAAAAAAAA9400FFFFFFFFFFFFD3FC6789ABCD F011CC00AAAAAAAAAAAA94012AAAAAAAAAAA94012AAAAAAAAAAA93FCA12F684BDA127C 00AAAAAAAAAAAA94012AAAAAAAAAAA940155555555555543FCE0E696F1F7A79C00AAAA AAAAAAAA94012AAAAAAAAAAA94017FFFFFFFFFFFF3FD13579BE024687C00AAAAAAAAAA AA94012AAAAAAAAAAA9401AAAAAAAAAAAAA3FD3944A55B66C75C00AAAAAAAAAAAA9401 2AAAAAAAAAAA9401D5555555555553FD623A67EAC2F04C00AAAAAAAAAAAA94012AAAAA AAAAAA940200000000000003FD8E38E38E38E36C00AAAAAAAAAAAA94012AAAAAAAAAAA 940215555555555553FDBD401845C8A0AC00AAAAAAAAAAAA94012AAAAAAAAAAA94022A AAAAAAAAAAA3FDEF5006117227FC00AAAAAAAAAAAA94012AAAAAAAAAAA94023FFFFFFF FFFFF3FE123456789ABCCC00AAAAAAAAAAAA94015555555555554C0240000000000003 FD4320FEDCBA985C00AAAAAAAAAAAA94015555555555554C022AAAAAAAAAAAB3FD203C AE759203BC00AAAAAAAAAAAA94015555555555554C0215555555555563FD0061172283 393C00AAAAAAAAAAAA94015555555555554C0200000000000013FCC71C71C71C71BC00 AAAAAAAAAAAA94015555555555554C01D5555555555573FC9388277166052C00AAAAAA AAAAAA94015555555555554C01AAAAAAAAAAAAC3FC66054F43E32CFC00AAAAAAAAAAAA 94015555555555554C0180000000000013FC3E93E93E93E91C00AAAAAAAAAAAA940155 55555555554C0155555555555563FC1D33F56178396C00AAAAAAAAAAAA940155555555 55554C012AAAAAAAAAAAB3FC01E573AC901E1C00AAAAAAAAAAAA94015555555555554C 0100000000000003FBD950C83FB72E1C00AAAAAAAAAAAA94015555555555554C00AAAA AAAAAAAAB3FBBAF98D76B548AC00AAAAAAAAAAAA94015555555555554C005555555555 5563FBA8C536FE1A8BCC00AAAAAAAAAAAA94015555555555554C0000000000000013FB A2B3C4D5E6F77C00AAAAAAAAAAAA94015555555555554BFF55555555555583FBA8C536 FE1A8BCC00AAAAAAAAAAAA94015555555555554BFE555555555555B3FBBAF98D76B548 9C00AAAAAAAAAAAA94015555555555554BCC80000000000003FBD950C83FB72E0C00AA AAAAAAAAAA940155555555555543FE555555555554F3FC01E573AC901E0C00AAAAAAAA AAAA940155555555555543FF55555555555523FC1D33F56178395C00AAAAAAAAAAAA94 0155555555555543FFFFFFFFFFFFFFC3FC3E93E93E93E8FC00AAAAAAAAAAAA94015555 55555555440055555555555533FC66054F43E32CDC00AAAAAAAAAAAA94015555555555 554400AAAAAAAAAAAA83FC938827716604FC00AAAAAAAAAAAA94015555555555554400 FFFFFFFFFFFFD3FCC71C71C71C716C00AAAAAAAAAAAA940155555555555544012AAAAA AAAAAA93FD0061172283391C00AAAAAAAAAAAA94015555555555554401555555555555 43FD203CAE759203AC00AAAAAAAAAAAA940155555555555544017FFFFFFFFFFFF3FD43 20FEDCBA984C00AAAAAAAAAAAA94015555555555554401AAAAAAAAAAAAA3FD690E0857 FCF72C00AAAAAAAAAAAA94015555555555554401D5555555555553FD9203CAE759201C 00AAAAAAAAAAAA9401555555555555440200000000000003FDBE02468ACF134C00AAAA AAAAAAAA9401555555555555440215555555555553FDED097B425ED07C00AAAAAAAAAA AA940155555555555544022AAAAAAAAAAAA3FE0F8CB487042BEC00AAAAAAAAAAAA9401 55555555555544023FFFFFFFFFFFF3FE2A1907F6E5D4AC00AAAAAAAAAAAA94017FFFFF FFFFFFFC0240000000000003FD7777777777775C00AAAAAAAAAAAA94017FFFFFFFFFFF FC022AAAAAAAAAAAB3FD549327104EE2BC00AAAAAAAAAAAA94017FFFFFFFFFFFFC0215 555555555563FD34B78FBD40183C00AAAAAAAAAAAA94017FFFFFFFFFFFFC0200000000 000013FD17E4B17E4B17DC00AAAAAAAAAAAA94017FFFFFFFFFFFFC01D5555555555573 FCFC3518A6DFC32C00AAAAAAAAAAAA94017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FCCEB2 40795CEAEC00AAAAAAAAAAAA94017FFFFFFFFFFFFC0180000000000013FCA740DA740D A70C00AAAAAAAAAAAA94017FFFFFFFFFFFFC0155555555555563FC85E0E696F1F76C00 AAAAAAAAAAAA94017FFFFFFFFFFFFC012AAAAAAAAAAAB3FC6A9264E209DC1C00AAAAAA AAAAAA94017FFFFFFFFFFFFC0100000000000003FC5555555555550C00AAAAAAAAAAAA 94017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FC4629B7F0D4624C00AAAAAAAAAAAA94017F FFFFFFFFFFFC0055555555555563FC3D0F8CB48703DC00AAAAAAAAAAAA94017FFFFFFF FFFFFC0000000000000013FC3A06D3A06D39BC00AAAAAAAAAAAA94017FFFFFFFFFFFFB FF55555555555583FC3D0F8CB48703EC00AAAAAAAAAAAA94017FFFFFFFFFFFFBFE5555 55555555B3FC4629B7F0D4624C00AAAAAAAAAAAA94017FFFFFFFFFFFFBCC8000000000 0003FC5555555555550C00AAAAAAAAAAAA94017FFFFFFFFFFFF3FE555555555554F3FC 6A9264E209DC0C00AAAAAAAAAAAA94017FFFFFFFFFFFF3FF55555555555523FC85E0E6 96F1F75C00AAAAAAAAAAAA94017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FCA740DA740DA6 EC00AAAAAAAAAAAA94017FFFFFFFFFFFF40055555555555533FCCEB240795CEACC00AA AAAAAAAAAA94017FFFFFFFFFFFF400AAAAAAAAAAAA83FCFC3518A6DFC2EC00AAAAAAAA AAAA94017FFFFFFFFFFFF400FFFFFFFFFFFFD3FD17E4B17E4B17BC00AAAAAAAAAAAA94 017FFFFFFFFFFFF4012AAAAAAAAAAA93FD34B78FBD40181C00AAAAAAAAAAAA94017FFF FFFFFFFFF40155555555555543FD549327104EE29C00AAAAAAAAAAAA94017FFFFFFFFF FFF4017FFFFFFFFFFFF3FD7777777777774C00AAAAAAAAAAAA94017FFFFFFFFFFFF401 AAAAAAAAAAAAA3FD9D6480F2B9D62C00AAAAAAAAAAAA94017FFFFFFFFFFFF401D55555 55555553FDC65A438215FF1C00AAAAAAAAAAAA94017FFFFFFFFFFFF402000000000000 03FDF258BF258BF24C00AAAAAAAAAAAA94017FFFFFFFFFFFF40215555555555553FE10 AFF9EE8DD7BC00AAAAAAAAAAAA94017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE29B7F0D4 629B6C00AAAAAAAAAAAA94017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE4444444444442C 00AAAAAAAAAAAA9401AAAAAAAAAAAAAC0240000000000003FDB05B05B05B059C00AAAA AAAAAAAA9401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD8D76B54932710C00AAAAAAAAAA AA9401AAAAAAAAAAAAAC0215555555555563FD6D9B1DF623A67C00AAAAAAAAAAAA9401 AAAAAAAAAAAAAC0200000000000013FD50C83FB72EA61C00AAAAAAAAAAAA9401AAAAAA AAAAAAAC01D5555555555573FD36FE1A8C536FDC00AAAAAAAAAAAA9401AAAAAAAAAAAA AC01AAAAAAAAAAAAC3FD203CAE759203CC00AAAAAAAAAAAA9401AAAAAAAAAAAAAC0180 000000000013FD0C83FB72EA61DC00AAAAAAAAAAAA9401AAAAAAAAAAAAAC0155555555 555563FCF7A80308B913FC00AAAAAAAAAAAA9401AAAAAAAAAAAAAC012AAAAAAAAAAAB3 FCDC598153D0F8AC00AAAAAAAAAAAA9401AAAAAAAAAAAAAC0100000000000003FCC71C 71C71C719C00AAAAAAAAAAAA9401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FCB7F0D4629B 7EDC00AAAAAAAAAAAA9401AAAAAAAAAAAAAC0055555555555563FCAED6A9264E206C00 AAAAAAAAAAAA9401AAAAAAAAAAAAAC0000000000000013FCABCDF01234564C00AAAAAA AAAAAA9401AAAAAAAAAAAAABFF55555555555583FCAED6A9264E207C00AAAAAAAAAAAA 9401AAAAAAAAAAAAABFE555555555555B3FCB7F0D4629B7EDC00AAAAAAAAAAAA9401AA AAAAAAAAAAABCC80000000000003FCC71C71C71C719C00AAAAAAAAAAAA9401AAAAAAAA AAAAA3FE555555555554F3FCDC598153D0F89C00AAAAAAAAAAAA9401AAAAAAAAAAAAA3 FF55555555555523FCF7A80308B913EC00AAAAAAAAAAAA9401AAAAAAAAAAAAA3FFFFFF FFFFFFFFC3FD0C83FB72EA61BC00AAAAAAAAAAAA9401AAAAAAAAAAAAA4005555555555 5533FD203CAE759203AC00AAAAAAAAAAAA9401AAAAAAAAAAAAA400AAAAAAAAAAAA83FD 36FE1A8C536FCC00AAAAAAAAAAAA9401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FD50C83F B72EA5FC00AAAAAAAAAAAA9401AAAAAAAAAAAAA4012AAAAAAAAAAA93FD6D9B1DF623A6 5C00AAAAAAAAAAAA9401AAAAAAAAAAAAA40155555555555543FD8D76B5493270EC00AA AAAAAAAAAA9401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FDB05B05B05B058C00AAAAAAAA AAAA9401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FDD6480F2B9D646C00AAAAAAAAAAAA94 01AAAAAAAAAAAAA401D5555555555553FDFF3DD1BAF98D5C00AAAAAAAAAAAA9401AAAA AAAAAAAAA40200000000000003FE159E26AF37C04C00AAAAAAAAAAAA9401AAAAAAAAAA AAA40215555555555553FE2D21C10AFF9EDC00AAAAAAAAAAAA9401AAAAAAAAAAAAA402 2AAAAAAAAAAAA3FE4629B7F0D4628C00AAAAAAAAAAAA9401AAAAAAAAAAAAA4023FFFFF FFFFFFF3FE60B60B60B60B5C00AAAAAAAAAAAA9401D555555555555C02400000000000 03FDEDCBA98765431C00AAAAAAAAAAAA9401D555555555555C022AAAAAAAAAAAB3FDCA E759203CAE7C00AAAAAAAAAAAA9401D555555555555C0215555555555563FDAB0BC1CD 2DE3FC00AAAAAAAAAAAA9401D555555555555C0200000000000013FD8E38E38E38E39C 00AAAAAAAAAAAA9401D555555555555C01D5555555555573FD746EBE635DAD5C00AAAA AAAAAAAA9401D555555555555C01AAAAAAAAAAAAC3FD5DAD524C9C413C00AAAAAAAAAA AA9401D555555555555C0180000000000013FD49F49F49F49F4C00AAAAAAAAAAAA9401 D555555555555C0155555555555563FD3944A55B66C77C00AAAAAAAAAAAA9401D55555 5555555C012AAAAAAAAAAAB3FD2B9D6480F2B9CC00AAAAAAAAAAAA9401D55555555555 5C0100000000000003FD20FEDCBA98764C00AAAAAAAAAAAA9401D555555555555C00AA AAAAAAAAAAB3FD19690E0857FCEC00AAAAAAAAAAAA9401D555555555555C0055555555 555563FD14DBF86A314DBC00AAAAAAAAAAAA9401D555555555555C0000000000000013 FD13579BE02468AC00AAAAAAAAAAAA9401D555555555555BFF55555555555583FD14DB F86A314DBC00AAAAAAAAAAAA9401D555555555555BFE555555555555B3FD19690E0857 FCEC00AAAAAAAAAAAA9401D555555555555BCC80000000000003FD20FEDCBA98764C00 AAAAAAAAAAAA9401D5555555555553FE555555555554F3FD2B9D6480F2B9CC00AAAAAA AAAAAA9401D5555555555553FF55555555555523FD3944A55B66C77C00AAAAAAAAAAAA 9401D5555555555553FFFFFFFFFFFFFFC3FD49F49F49F49F3C00AAAAAAAAAAAA9401D5 5555555555540055555555555533FD5DAD524C9C412C00AAAAAAAAAAAA9401D5555555 55555400AAAAAAAAAAAA83FD746EBE635DAD4C00AAAAAAAAAAAA9401D5555555555554 00FFFFFFFFFFFFD3FD8E38E38E38E37C00AAAAAAAAAAAA9401D5555555555554012AAA AAAAAAAA93FDAB0BC1CD2DE3CC00AAAAAAAAAAAA9401D5555555555554015555555555 5543FDCAE759203CAE6C00AAAAAAAAAAAA9401D5555555555554017FFFFFFFFFFFF3FD EDCBA98765430C00AAAAAAAAAAAA9401D555555555555401AAAAAAAAAAAAA3FE09DC59 8153D0FC00AAAAAAAAAAAA9401D555555555555401D5555555555553FE1E573AC901E5 7C00AAAAAAAAAAAA9401D55555555555540200000000000003FE3456789ABCDF0C00AA AAAAAAAAAA9401D55555555555540215555555555553FE4BDA12F684BD9C00AAAAAAAA AAAA9401D5555555555554022AAAAAAAAAAAA3FE64E209DC59814C00AAAAAAAAAAAA94 01D5555555555554023FFFFFFFFFFFF3FE7F6E5D4C3B2A0C00AAAAAAAAAAAA94020000 000000000C0240000000000003FE17E4B17E4B17EC00AAAAAAAAAAAA94020000000000 000C022AAAAAAAAAAAB3FE0672894AB6CD9C00AAAAAAAAAAAA94020000000000000C02 15555555555563FDED097B425ED0AC00AAAAAAAAAAAA94020000000000000C02000000 00000013FDD0369D0369D04C00AAAAAAAAAAAA94020000000000000C01D55555555555 73FDB66C77D88E9A0C00AAAAAAAAAAAA94020000000000000C01AAAAAAAAAAAAC3FD9F AB0BC1CD2DEC00AAAAAAAAAAAA94020000000000000C0180000000000013FD8BF258BF 258BFC00AAAAAAAAAAAA94020000000000000C0155555555555563FD7B425ED097B42C 00AAAAAAAAAAAA94020000000000000C012AAAAAAAAAAAB3FD6D9B1DF623A67C00AAAA AAAAAAAA94020000000000000C0100000000000003FD62FC962FC962FC00AAAAAAAAAA AA94020000000000000C00AAAAAAAAAAAAB3FD5B66C77D88E99C00AAAAAAAAAAAA9402 0000000000000C0055555555555563FD56D9B1DF623A6C00AAAAAAAAAAAA9402000000 0000000C0000000000000013FD5555555555555C00AAAAAAAAAAAA9402000000000000 0BFF55555555555583FD56D9B1DF623A6C00AAAAAAAAAAAA94020000000000000BFE55 5555555555B3FD5B66C77D88E99C00AAAAAAAAAAAA94020000000000000BCC80000000 000003FD62FC962FC962FC00AAAAAAAAAAAA940200000000000003FE555555555554F3 FD6D9B1DF623A67C00AAAAAAAAAAAA940200000000000003FF55555555555523FD7B42 5ED097B42C00AAAAAAAAAAAA940200000000000003FFFFFFFFFFFFFFC3FD8BF258BF25 8BEC00AAAAAAAAAAAA9402000000000000040055555555555533FD9FAB0BC1CD2DDC00 AAAAAAAAAAAA94020000000000000400AAAAAAAAAAAA83FDB66C77D88E99FC00AAAAAA AAAAAA94020000000000000400FFFFFFFFFFFFD3FDD0369D0369D02C00AAAAAAAAAAAA 940200000000000004012AAAAAAAAAAA93FDED097B425ED07C00AAAAAAAAAAAA940200 0000000000040155555555555543FE0672894AB6CD8C00AAAAAAAAAAAA940200000000 000004017FFFFFFFFFFFF3FE17E4B17E4B17EC00AAAAAAAAAAAA940200000000000004 01AAAAAAAAAAAAA3FE2ADB363BEC474C00AAAAAAAAAAAA94020000000000000401D555 5555555553FE3F5617839A5BCC00AAAAAAAAAAAA940200000000000004020000000000 0003FE5555555555555C00AAAAAAAAAAAA9402000000000000040215555555555553FE 6CD8EFB11D33FC00AAAAAAAAAAAA940200000000000004022AAAAAAAAAAAA3FE85E0E6 96F1F79C00AAAAAAAAAAAA940200000000000004023FFFFFFFFFFFF3FEA06D3A06D3A0 6C00AAAAAAAAAAAA94021555555555555C0240000000000003FE3B2A1907F6E5CC00AA AAAAAAAAAA94021555555555555C022AAAAAAAAAAAB3FE29B7F0D4629B8C00AAAAAAAA AAAA94021555555555555C0215555555555563FE19CA252ADB363C00AAAAAAAAAAAA94 021555555555555C0200000000000013FE0B60B60B60B61C00AAAAAAAAAAAA94021555 555555555C01D5555555555573FDFCF746EBE635DC00AAAAAAAAAAAA94021555555555 555C01AAAAAAAAAAAAC3FDE635DAD524C9BC00AAAAAAAAAAAA94021555555555555C01 80000000000013FDD27D27D27D27CC00AAAAAAAAAAAA94021555555555555C01555555 55555563FDC1CD2DE3EF4FFC00AAAAAAAAAAAA94021555555555555C012AAAAAAAAAAA B3FDB425ED097B424C00AAAAAAAAAAAA94021555555555555C0100000000000003FDA9 87654320FECC00AAAAAAAAAAAA94021555555555555C00AAAAAAAAAAAAB3FDA1F19690 E0856C00AAAAAAAAAAAA94021555555555555C0055555555555563FD9D6480F2B9D63C 00AAAAAAAAAAAA94021555555555555C0000000000000013FD9BE02468ACF12C00AAAA AAAAAAAA94021555555555555BFF55555555555583FD9D6480F2B9D63C00AAAAAAAAAA AA94021555555555555BFE555555555555B3FDA1F19690E0856C00AAAAAAAAAAAA9402 1555555555555BCC80000000000003FDA987654320FECC00AAAAAAAAAAAA9402155555 55555553FE555555555554F3FDB425ED097B424C00AAAAAAAAAAAA9402155555555555 53FF55555555555523FDC1CD2DE3EF4FFC00AAAAAAAAAAAA940215555555555553FFFF FFFFFFFFFFC3FDD27D27D27D27BC00AAAAAAAAAAAA9402155555555555540055555555 555533FDE635DAD524C9AC00AAAAAAAAAAAA94021555555555555400AAAAAAAAAAAA83 FDFCF746EBE635CC00AAAAAAAAAAAA94021555555555555400FFFFFFFFFFFFD3FE0B60 B60B60B60C00AAAAAAAAAAAA940215555555555554012AAAAAAAAAAA93FE19CA252ADB 362C00AAAAAAAAAAAA9402155555555555540155555555555543FE29B7F0D4629B7C00 AAAAAAAAAAAA940215555555555554017FFFFFFFFFFFF3FE3B2A1907F6E5CC00AAAAAA AAAAAA94021555555555555401AAAAAAAAAAAAA3FE4E209DC598153C00AAAAAAAAAAAA 94021555555555555401D5555555555553FE629B7F0D4629AC00AAAAAAAAAAAA940215 5555555555540200000000000003FE789ABCDF01234C00AAAAAAAAAAAA940215555555 5555540215555555555553FE901E573AC901DC00AAAAAAAAAAAA940215555555555554 022AAAAAAAAAAAA3FEA9264E209DC58C00AAAAAAAAAAAA940215555555555554023FFF FFFFFFFFF3FEC3B2A1907F6E4C00AAAAAAAAAAAA94022AAAAAAAAAAAAC024000000000 0003FE60B60B60B60B4C00AAAAAAAAAAAA94022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE 4F43E32D21C10C00AAAAAAAAAAAA94022AAAAAAAAAAAAC0215555555555563FE3F5617 839A5BBC00AAAAAAAAAAAA94022AAAAAAAAAAAAC0200000000000013FE30ECA8641FDB 9C00AAAAAAAAAAAA94022AAAAAAAAAAAAC01D5555555555573FE240795CEB2407C00AA AAAAAAAAAA94022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE18A6DFC3518A6C00AAAAAAAA AAAA94022AAAAAAAAAAAAC0180000000000013FE0ECA8641FDB96C00AAAAAAAAAAAA94 022AAAAAAAAAAAAC0155555555555563FE0672894AB6CD7C00AAAAAAAAAAAA94022AAA AAAAAAAAAC012AAAAAAAAAAAB3FDFF3DD1BAF98D4C00AAAAAAAAAAAA94022AAAAAAAAA AAAC0100000000000003FDF49F49F49F49CC00AAAAAAAAAAAA94022AAAAAAAAAAAAC00 AAAAAAAAAAAAB3FDED097B425ED06C00AAAAAAAAAAAA94022AAAAAAAAAAAAC00555555 55555563FDE87C65A438213C00AAAAAAAAAAAA94022AAAAAAAAAAAAC00000000000000 13FDE6F8091A2B3C2C00AAAAAAAAAAAA94022AAAAAAAAAAAABFF55555555555583FDE8 7C65A438213C00AAAAAAAAAAAA94022AAAAAAAAAAAABFE555555555555B3FDED097B42 5ED06C00AAAAAAAAAAAA94022AAAAAAAAAAAABCC80000000000003FDF49F49F49F49CC 00AAAAAAAAAAAA94022AAAAAAAAAAAA3FE555555555554F3FDFF3DD1BAF98D4C00AAAA AAAAAAAA94022AAAAAAAAAAAA3FF55555555555523FE0672894AB6CD7C00AAAAAAAAAA AA94022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE0ECA8641FDB95C00AAAAAAAAAAAA9402 2AAAAAAAAAAAA40055555555555533FE18A6DFC3518A5C00AAAAAAAAAAAA94022AAAAA AAAAAAA400AAAAAAAAAAAA83FE240795CEB2405C00AAAAAAAAAAAA94022AAAAAAAAAAA A400FFFFFFFFFFFFD3FE30ECA8641FDB8C00AAAAAAAAAAAA94022AAAAAAAAAAAA4012A AAAAAAAAAA93FE3F5617839A5BAC00AAAAAAAAAAAA94022AAAAAAAAAAAA40155555555 555543FE4F43E32D21C0FC00AAAAAAAAAAAA94022AAAAAAAAAAAA4017FFFFFFFFFFFF3 FE60B60B60B60B4C00AAAAAAAAAAAA94022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE73AC 901E573ABC00AAAAAAAAAAAA94022AAAAAAAAAAAA401D5555555555553FE8827716605 4F2C00AAAAAAAAAAAA94022AAAAAAAAAAAA40200000000000003FE9E26AF37C048CC00 AAAAAAAAAAAA94022AAAAAAAAAAAA40215555555555553FEB5AA499388275C00AAAAAA AAAAAA94022AAAAAAAAAAAA4022AAAAAAAAAAAA3FECEB240795CEB0C00AAAAAAAAAAAA 94022AAAAAAAAAAAA4023FFFFFFFFFFFF3FEE93E93E93E93CC00AAAAAAAAAAAA94023F FFFFFFFFFFFC0240000000000003FE8888888888886C00AAAAAAAAAAAA94023FFFFFFF FFFFFC022AAAAAAAAAAAB3FE77166054F43E2C00AAAAAAAAAAAA94023FFFFFFFFFFFFC 0215555555555563FE672894AB6CD8DC00AAAAAAAAAAAA94023FFFFFFFFFFFFC020000 0000000013FE58BF258BF258BC00AAAAAAAAAAAA94023FFFFFFFFFFFFC01D555555555 5573FE4BDA12F684BD9C00AAAAAAAAAAAA94023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE 40795CEB24078C00AAAAAAAAAAAA94023FFFFFFFFFFFFC0180000000000013FE369D03 69D0368C00AAAAAAAAAAAA94023FFFFFFFFFFFFC0155555555555563FE2E450672894A 9C00AAAAAAAAAAAA94023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE277166054F43DC00AA AAAAAAAAAA94023FFFFFFFFFFFFC0100000000000003FE2222222222220C00AAAAAAAA AAAA94023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE1E573AC901E56C00AAAAAAAAAAAA94 023FFFFFFFFFFFFC0055555555555563FE1C10AFF9EE8DBC00AAAAAAAAAAAA94023FFF FFFFFFFFFC0000000000000013FE1B4E81B4E81B2C00AAAAAAAAAAAA94023FFFFFFFFF FFFBFF55555555555583FE1C10AFF9EE8DBC00AAAAAAAAAAAA94023FFFFFFFFFFFFBFE 555555555555B3FE1E573AC901E55C00AAAAAAAAAAAA94023FFFFFFFFFFFFBCC800000 00000003FE2222222222220C00AAAAAAAAAAAA94023FFFFFFFFFFFF3FE555555555554 F3FE277166054F43CC00AAAAAAAAAAAA94023FFFFFFFFFFFF3FF55555555555523FE2E 450672894A9C00AAAAAAAAAAAA94023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE369D0369 D0367C00AAAAAAAAAAAA94023FFFFFFFFFFFF40055555555555533FE40795CEB24077C 00AAAAAAAAAAAA94023FFFFFFFFFFFF400AAAAAAAAAAAA83FE4BDA12F684BD7C00AAAA AAAAAAAA94023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE58BF258BF258AC00AAAAAAAAAA AA94023FFFFFFFFFFFF4012AAAAAAAAAAA93FE672894AB6CD8CC00AAAAAAAAAAAA9402 3FFFFFFFFFFFF40155555555555543FE77166054F43E1C00AAAAAAAAAAAA94023FFFFF FFFFFFF4017FFFFFFFFFFFF3FE8888888888886C00AAAAAAAAAAAA94023FFFFFFFFFFF F401AAAAAAAAAAAAA3FE9B7F0D4629B7DC00AAAAAAAAAAAA94023FFFFFFFFFFFF401D5 555555555553FEAFF9EE8DD7CC4C00AAAAAAAAAAAA94023FFFFFFFFFFFF40200000000 000003FEC5F92C5F92C5EC00AAAAAAAAAAAA94023FFFFFFFFFFFF40215555555555553 FEDD7CC6BB5AA47C00AAAAAAAAAAAA94023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEF684 BDA12F682C00AAAAAAAAAAAA94023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF0888888888 887C009555555555554C024000000000000C0240000000000003FD6666666666666C00 9555555555554C024000000000000C022AAAAAAAAAAAB3FD438215FF3DD1CC00955555 5555554C024000000000000C0215555555555563FD23A67EAC2F074C00955555555555 4C024000000000000C0200000000000013FD06D3A06D3A06EC009555555555554C0240 00000000000C01D5555555555573FCDA12F684BDA14C009555555555554C0240000000 00000C01AAAAAAAAAAAAC3FCAC901E573AC90C009555555555554C024000000000000C 0180000000000013FC851EB851EB852C009555555555554C024000000000000C015555 5555555563FC63BEC474CFD58C009555555555554C024000000000000C012AAAAAAAAA AAB3FC487042BFE7BA3C009555555555554C024000000000000C0100000000000003FC 3333333333332C009555555555554C024000000000000C00AAAAAAAAAAAAB3FC240795 CEB2406C009555555555554C024000000000000C0055555555555563FC1AED6A9264E1 FC009555555555554C024000000000000C0000000000000013FC17E4B17E4B17DC0095 55555555554C024000000000000BFF55555555555583FC1AED6A9264E20C0095555555 55554C024000000000000BFE555555555555B3FC240795CEB2406C009555555555554C 024000000000000BCC80000000000003FC3333333333332C009555555555554C024000 0000000003FE555555555554F3FC487042BFE7BA2C009555555555554C024000000000 0003FF55555555555523FC63BEC474CFD57C009555555555554C0240000000000003FF FFFFFFFFFFFFC3FC851EB851EB850C009555555555554C024000000000000400555555 55555533FCAC901E573AC8EC009555555555554C024000000000000400AAAAAAAAAAAA 83FCDA12F684BDA10C009555555555554C024000000000000400FFFFFFFFFFFFD3FD06 D3A06D3A06CC009555555555554C0240000000000004012AAAAAAAAAAA93FD23A67EAC 2F072C009555555555554C02400000000000040155555555555543FD438215FF3DD1AC 009555555555554C0240000000000004017FFFFFFFFFFFF3FD6666666666665C009555 555555554C024000000000000401AAAAAAAAAAAAA3FD8C536FE1A8C52C009555555555 554C024000000000000401D5555555555553FDB549327104EE2C009555555555554C02 400000000000040200000000000003FDE147AE147AE14C009555555555554C02400000 000000040215555555555553FE08277166054F4C009555555555554C02400000000000 04022AAAAAAAAAAAA3FE212F684BDA12EC009555555555554C0240000000000004023F FFFFFFFFFFF3FE3BBBBBBBBBBBBC009555555555554C022AAAAAAAAAAABC0240000000 000003FD320FEDCBA9877C009555555555554C022AAAAAAAAAAABC022AAAAAAAAAAAB3 FD0F2B9D6480F2DC009555555555554C022AAAAAAAAAAABC0215555555555563FCDEA0 0C22E450AC009555555555554C022AAAAAAAAAAABC0200000000000013FCA4FA4FA4FA 4FFC009555555555554C022AAAAAAAAAAABC01D5555555555573FC7166054F43E36C00 9555555555554C022AAAAAAAAAAABC01AAAAAAAAAAAAC3FC43E32D21C10B3C00955555 5555554C022AAAAAAAAAAABC0180000000000013FC1C71C71C71C75C00955555555555 4C022AAAAAAAAAAABC0155555555555563FBF623A67EAC2F4C009555555555554C022A AAAAAAAAAABC012AAAAAAAAAAAB3FBBF86A314DBF8BC009555555555554C022AAAAAAA AAAABC0100000000000003FB950C83FB72EA9C009555555555554C022AAAAAAAAAAABC 00AAAAAAAAAAAAB3FB76B5493271052C009555555555554C022AAAAAAAAAAABC005555 5555555563FB6480F2B9D6484C009555555555554C022AAAAAAAAAAABC000000000000 0013FB5E6F8091A2B3FC009555555555554C022AAAAAAAAAAABBFF55555555555583FB 6480F2B9D6484C009555555555554C022AAAAAAAAAAABBFE555555555555B3FB76B549 3271051C009555555555554C022AAAAAAAAAAABBCC80000000000003FB950C83FB72EA 8C009555555555554C022AAAAAAAAAAAB3FE555555555554F3FBBF86A314DBF88C0095 55555555554C022AAAAAAAAAAAB3FF55555555555523FBF623A67EAC2F2C0095555555 55554C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FC1C71C71C71C73C009555555555554C 022AAAAAAAAAAAB40055555555555533FC43E32D21C10B1C009555555555554C022AAA AAAAAAAAB400AAAAAAAAAAAA83FC7166054F43E33C009555555555554C022AAAAAAAAA AAB400FFFFFFFFFFFFD3FCA4FA4FA4FA4FAC009555555555554C022AAAAAAAAAAAB401 2AAAAAAAAAAA93FCDEA00C22E4505C009555555555554C022AAAAAAAAAAAB401555555 55555543FD0F2B9D6480F2CC009555555555554C022AAAAAAAAAAAB4017FFFFFFFFFFF F3FD320FEDCBA9876C009555555555554C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FD57 FCF746EBE64C009555555555554C022AAAAAAAAAAAB401D5555555555553FD80F2B9D6 480F3C009555555555554C022AAAAAAAAAAAB40200000000000003FDACF13579BE026C 009555555555554C022AAAAAAAAAAAB40215555555555553FDDBF86A314DBF9C009555 555555554C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FE07042BFE7BA37C009555555555 554C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE21907F6E5D4C3C009555555555554C02 1555555555556C0240000000000003FD02468ACF1357AC009555555555554C02155555 5555556C022AAAAAAAAAAAB3FCBEC474CFD5861C009555555555554C02155555555555 6C0215555555555563FC7F0D4629B7F0FC009555555555554C021555555555556C0200 000000000013FC456789ABCDF04C009555555555554C021555555555556C01D5555555 555573FC11D33F561783CC009555555555554C021555555555556C01AAAAAAAAAAAAC3 FBC8A0CE5129570C009555555555554C021555555555556C0180000000000013FB79BE 02468ACF5C009555555555554C021555555555556C0155555555555563FB36FE1A8C53 700C009555555555554C021555555555556C012AAAAAAAAAAAB3FB0061172283396C00 9555555555554C021555555555556C0100000000000003FAABCDF01234569C00955555 5555554C021555555555556C00AAAAAAAAAAAAB3FA6F1F7A80308BBC00955555555555 4C021555555555556C0055555555555563FA4AB6CD8EFB11FC009555555555554C0215 55555555556C0000000000000013FA3E93E93E93E95C009555555555554C0215555555 55556BFF55555555555583FA4AB6CD8EFB11EC009555555555554C021555555555556B FE555555555555B3FA6F1F7A80308BAC009555555555554C021555555555556BCC8000 0000000003FAABCDF01234568C009555555555554C0215555555555563FE5555555555 54F3FB0061172283394C009555555555554C0215555555555563FF55555555555523FB 36FE1A8C536FEC009555555555554C0215555555555563FFFFFFFFFFFFFFC3FB79BE02 468ACF0C009555555555554C02155555555555640055555555555533FBC8A0CE512956 CC009555555555554C021555555555556400AAAAAAAAAAAA83FC11D33F5617839C0095 55555555554C021555555555556400FFFFFFFFFFFFD3FC456789ABCDF00C0095555555 55554C0215555555555564012AAAAAAAAAAA93FC7F0D4629B7F0BC009555555555554C 02155555555555640155555555555543FCBEC474CFD585DC009555555555554C021555 5555555564017FFFFFFFFFFFF3FD02468ACF13579C009555555555554C021555555555 556401AAAAAAAAAAAAA3FD2833944A55B67C009555555555554C021555555555556401 D5555555555553FD512956D9B1DF6C009555555555554C021555555555556402000000 00000003FD7D27D27D27D28C009555555555554C021555555555556402155555555555 53FDAC2F0734B78FBC009555555555554C0215555555555564022AAAAAAAAAAAA3FDDE 3EF50061171C009555555555554C0215555555555564023FFFFFFFFFFFF3FE09ABCDF0 12345C009555555555554C020000000000001C0240000000000003FCAE147AE147AE3C 009555555555554C020000000000001C022AAAAAAAAAAAB3FC684BDA12F6850C009555 555555554C020000000000001C0215555555555563FC2894AB6CD8EFEC009555555555 554C020000000000001C0200000000000013FBDDDDDDDDDDDE7C009555555555554C02 0000000000001C01D5555555555573FB76B5493271056C009555555555554C02000000 0000001C01AAAAAAAAAAAAC3FB1BAF98D76B54EC009555555555554C02000000000000 1C0180000000000013FA99999999999A5C009555555555554C020000000000001C0155 555555555563FA1419CA252ADBBC009555555555554C020000000000001C012AAAAAAA AAAAB3F94DBF86A314DCEC009555555555554C020000000000001C0100000000000003 F847AE147AE1494C009555555555554C020000000000001C00AAAAAAAAAAAAB3F653D0 F8CB48765C009555555555554C020000000000001C005555555555556BF5E573AC901E 4BEC009555555555554C020000000000001C000000000000001BF6B4E81B4E81AF6C00 9555555555554C020000000000001BFF5555555555558BF5E573AC901E4C7C00955555 5555554C020000000000001BFE555555555555B3F653D0F8CB48753C00955555555555 4C020000000000001BCC80000000000003F847AE147AE148DC009555555555554C0200 000000000013FE555555555554F3F94DBF86A314DC8C009555555555554C0200000000 000013FF55555555555523FA1419CA252ADB7C009555555555554C0200000000000013 FFFFFFFFFFFFFFC3FA999999999999CC009555555555554C0200000000000014005555 5555555533FB1BAF98D76B54AC009555555555554C020000000000001400AAAAAAAAAA AA83FB76B549327104FC009555555555554C020000000000001400FFFFFFFFFFFFD3FB DDDDDDDDDDDDDC009555555555554C0200000000000014012AAAAAAAAAAA93FC2894AB 6CD8EFAC009555555555554C02000000000000140155555555555543FC684BDA12F684 BC009555555555554C0200000000000014017FFFFFFFFFFFF3FCAE147AE147AE1C0095 55555555554C020000000000001401AAAAAAAAAAAAA3FCF9EE8DD7CC6BCC0095555555 55554C020000000000001401D5555555555553FD25ED097B425EEC009555555555554C 02000000000000140200000000000003FD51EB851EB8520C009555555555554C020000 00000000140215555555555553FD80F2B9D6480F3C009555555555554C020000000000 0014022AAAAAAAAAAAA3FDB302A7A1F1968C009555555555554C020000000000001402 3FFFFFFFFFFFF3FDE81B4E81B4E81C009555555555554C01D555555555557C02400000 00000003FC60B60B60B60B7C009555555555554C01D555555555557C022AAAAAAAAAAA B3FC1AED6A9264E24C009555555555554C01D555555555557C0215555555555563FBB6 6C77D88E9A6C009555555555554C01D555555555557C0200000000000013FB4320FEDC BA98FC009555555555554C01D555555555557C01D5555555555573FAB7F0D4629B7FDC 009555555555554C01D555555555557C01AAAAAAAAAAAAC3FA01E573AC901EFC009555 555555554C01D555555555557C0180000000000013F8907F6E5D4C3DAC009555555555 554C01D555555555557C015555555555556BF70AFF9EE8DD78EC009555555555554C01 D555555555557C012AAAAAAAAAAABBF91D33F5617838CC009555555555554C01D55555 5555557C010000000000000BF9C71C71C71C712C009555555555554C01D55555555555 7C00AAAAAAAAAAAABBFA203CAE7592037C009555555555554C01D555555555557C0055 55555555556BFA44A55B66C77D2C009555555555554C01D555555555557C0000000000 00001BFA50C83FB72EA5CC009555555555554C01D555555555557BFF5555555555558B FA44A55B66C77D4C009555555555554C01D555555555557BFE555555555555BBFA203C AE7592038C009555555555554C01D555555555557BCC8000000000000BF9C71C71C71C 715C009555555555554C01D5555555555573FE555555555554FBF91D33F56178393C00 9555555555554C01D5555555555573FF5555555555552BF70AFF9EE8DD7B3C00955555 5555554C01D5555555555573FFFFFFFFFFFFFFC3F8907F6E5D4C3BBC00955555555555 4C01D55555555555740055555555555533FA01E573AC901E7C009555555555554C01D5 55555555557400AAAAAAAAAAAA83FAB7F0D4629B7F1C009555555555554C01D5555555 55557400FFFFFFFFFFFFD3FB4320FEDCBA987C009555555555554C01D5555555555574 012AAAAAAAAAAA93FBB66C77D88E99EC009555555555554C01D5555555555574015555 5555555543FC1AED6A9264E20C009555555555554C01D5555555555574017FFFFFFFFF FFF3FC60B60B60B60B6C009555555555554C01D555555555557401AAAAAAAAAAAAA3FC AC901E573AC91C009555555555554C01D555555555557401D5555555555553FCFE7BA3 75F31B0C009555555555554C01D55555555555740200000000000003FD2B3C4D5E6F80 AC009555555555554C01D55555555555740215555555555553FD5A438215FF3DDC0095 55555555554C01D5555555555574022AAAAAAAAAAAA3FD8C536FE1A8C53C0095555555 55554C01D5555555555574023FFFFFFFFFFFF3FDC16C16C16C16BC009555555555554C 01AAAAAAAAAAAACC0240000000000003FC1C71C71C71C71C009555555555554C01AAAA AAAAAAAACC022AAAAAAAAAAAB3FBAD524C9C413BAC009555555555554C01AAAAAAAAAA AACC0215555555555563FB2DE3EF5006118C009555555555554C01AAAAAAAAAAAACC02 00000000000013FA7530ECA864206C009555555555554C01AAAAAAAAAAAACC01D55555 55555573F94DBF86A314DC9C009555555555554C01AAAAAAAAAAAACC01AAAAAAAAAAAA CBF5E573AC901E56CC009555555555554C01AAAAAAAAAAAACC018000000000001BF959 E26AF37C047C009555555555554C01AAAAAAAAAAAACC015555555555556BFA327104EE 2CC0EC009555555555554C01AAAAAAAAAAAACC012AAAAAAAAAAABBFA9FAB0BC1CD2E2C 009555555555554C01AAAAAAAAAAAACC010000000000000BFAF49F49F49F4A5C009555 555555554C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFB18A6DFC3518A9C009555555555 554C01AAAAAAAAAAAACC005555555555556BFB2ADB363BEC477C009555555555554C01 AAAAAAAAAAAACC000000000000001BFB30ECA8641FDBCC009555555555554C01AAAAAA AAAAAACBFF5555555555558BFB2ADB363BEC477C009555555555554C01AAAAAAAAAAAA CBFE555555555555BBFB18A6DFC3518AAC009555555555554C01AAAAAAAAAAAACBCC80 00000000000BFAF49F49F49F4A5C009555555555554C01AAAAAAAAAAAAC3FE55555555 5554FBFA9FAB0BC1CD2E5C009555555555554C01AAAAAAAAAAAAC3FF5555555555552B FA327104EE2CC12C009555555555554C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBF959E2 6AF37C058C009555555555554C01AAAAAAAAAAAAC4005555555555553BF5E573AC901E 68CC009555555555554C01AAAAAAAAAAAAC400AAAAAAAAAAAA83F94DBF86A314DACC00 9555555555554C01AAAAAAAAAAAAC400FFFFFFFFFFFFD3FA7530ECA8641F2C00955555 5555554C01AAAAAAAAAAAAC4012AAAAAAAAAAA93FB2DE3EF5006111C00955555555555 4C01AAAAAAAAAAAAC40155555555555543FBAD524C9C413B3C009555555555554C01AA AAAAAAAAAAC4017FFFFFFFFFFFF3FC1C71C71C71C6FC009555555555554C01AAAAAAAA AAAAC401AAAAAAAAAAAAA3FC684BDA12F684AC009555555555554C01AAAAAAAAAAAAC4 01D5555555555553FCBA375F31AED69C009555555555554C01AAAAAAAAAAAAC4020000 0000000003FD091A2B3C4D5E7C009555555555554C01AAAAAAAAAAAAC4021555555555 5553FD38215FF3DD1BAC009555555555554C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD 6A314DBF86A2FC009555555555554C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD9F49F4 9F49F48C009555555555554C018000000000001C0240000000000003FBC28F5C28F5C2 BC009555555555554C018000000000001C022AAAAAAAAAAAB3FB36FE1A8C53702C0095 55555555554C018000000000001C0215555555555563FA6F1F7A80308C1C0095555555 55554C018000000000001C0200000000000013F9111111111112BC009555555555554C 018000000000001C01D555555555557BF81722833944A2EC009555555555554C018000 000000001C01AAAAAAAAAAAACBF9F7A80308B9137C009555555555554C018000000000 001C018000000000001BFA9999999999993C009555555555554C018000000000001C01 5555555555556BFB0F8CB487042BFC009555555555554C018000000000001C012AAAAA AAAAAABBFB4629B7F0D4629C009555555555554C018000000000001C01000000000000 0BFB70A3D70A3D70AC009555555555554C018000000000001C00AAAAAAAAAAAABBFB8E FB11D33F561C009555555555554C018000000000001C005555555555556BFBA12F684B DA12FC009555555555554C018000000000001C000000000000001BFBA740DA740DA74C 009555555555554C018000000000001BFF5555555555558BFBA12F684BDA12FC009555 555555554C018000000000001BFE555555555555BBFB8EFB11D33F562C009555555555 554C018000000000001BCC8000000000000BFB70A3D70A3D70BC009555555555554C01 80000000000013FE555555555554FBFB4629B7F0D462BC009555555555554C01800000 00000013FF5555555555552BFB0F8CB487042C1C009555555555554C01800000000000 13FFFFFFFFFFFFFFCBFA999999999999CC009555555555554C01800000000000140055 55555555553BF9F7A80308B914AC009555555555554C018000000000001400AAAAAAAA AAAA8BF81722833944A68C009555555555554C018000000000001400FFFFFFFFFFFFD3 F91111111111104C009555555555554C0180000000000014012AAAAAAAAAAA93FA6F1F 7A80308B2C009555555555554C01800000000000140155555555555543FB36FE1A8C53 6FBC009555555555554C0180000000000014017FFFFFFFFFFFF3FBC28F5C28F5C26C00 9555555555554C018000000000001401AAAAAAAAAAAAA3FC2D21C10AFF9EEC00955555 5555554C018000000000001401D5555555555553FC7F0D4629B7F0DC00955555555555 4C01800000000000140200000000000003FCD70A3D70A3D72C009555555555554C0180 0000000000140215555555555553FD1A8C536FE1A8CC009555555555554C0180000000 000014022AAAAAAAAAAAA3FD4C9C413B8B301C009555555555554C0180000000000014 023FFFFFFFFFFFF3FD81B4E81B4E81AC009555555555554C015555555555556C024000 0000000003FB5E6F8091A2B3DC009555555555554C015555555555556C022AAAAAAAAA AAB3FAA5BC7DEA00C28C009555555555554C015555555555556C0215555555555563F9 4DBF86A314DCAC009555555555554C015555555555556C020000000000001BF7FDB975 30ECA33C009555555555554C015555555555556C01D555555555557BFA0E0857FCF746 7C009555555555554C015555555555556C01AAAAAAAAAAAACBFAC413B8B302A77C0095 55555555554C015555555555556C018000000000001BFB30ECA8641FDB8C0095555555 55554C015555555555556C015555555555556BFB73AC901E573ADC009555555555554C 015555555555556C012AAAAAAAAAAABBFBAA49938827717C009555555555554C015555 555555556C010000000000000BFBD4C3B2A1907F8C009555555555554C015555555555 556C00AAAAAAAAAAAABBFBF31AED6A9264FC009555555555554C015555555555556C00 5555555555556BFC02A7A1F19690FC009555555555554C015555555555556C00000000 0000001BFC05B05B05B05B1C009555555555554C015555555555556BFF555555555555 8BFC02A7A1F19690EC009555555555554C015555555555556BFE555555555555BBFBF3 1AED6A92650C009555555555554C015555555555556BCC8000000000000BFBD4C3B2A1 907F9C009555555555554C0155555555555563FE555555555554FBFBAA49938827719C 009555555555554C0155555555555563FF5555555555552BFB73AC901E573AFC009555 555555554C0155555555555563FFFFFFFFFFFFFFCBFB30ECA8641FDBCC009555555555 554C0155555555555564005555555555553BFAC413B8B302A80C009555555555554C01 5555555555556400AAAAAAAAAAAA8BFA0E0857FCF7477C009555555555554C01555555 5555556400FFFFFFFFFFFFDBF7FDB97530ECAD1C009555555555554C01555555555555 64012AAAAAAAAAAA93F94DBF86A314DABC009555555555554C01555555555555640155 555555555543FAA5BC7DEA00C1AC009555555555554C0155555555555564017FFFFFFF FFFFF3FB5E6F8091A2B38C009555555555554C015555555555556401AAAAAAAAAAAAA3 FBF623A67EAC2EEC009555555555554C015555555555556401D5555555555553FC4CFD 585E0E696C009555555555554C01555555555555640200000000000003FCA4FA4FA4FA 4FAC009555555555554C01555555555555640215555555555553FD01845C8A0CE51C00 9555555555554C0155555555555564022AAAAAAAAAAAA3FD33944A55B66C6C00955555 5555554C0155555555555564023FFFFFFFFFFFF3FD68ACF13579BDEC00955555555555 4C012AAAAAAAAAAABC0240000000000003FB0C83FB72EA61BC009555555555554C012A AAAAAAAAAABC022AAAAAAAAAAAB3FA01E573AC901E8C009555555555554C012AAAAAAA AAAABC0215555555555563F3845C8A0CE527EC009555555555554C012AAAAAAAAAAABC 020000000000001BF9C71C71C71C70DC009555555555554C012AAAAAAAAAAABC01D555 555555557BFAB1DF623A67EA7C009555555555554C012AAAAAAAAAAABC01AAAAAAAAAA AACBFB33F5617839A5CC009555555555554C012AAAAAAAAAAABC018000000000001BFB 82D82D82D82D8C009555555555554C012AAAAAAAAAAABC015555555555556BFBC59815 3D0F8CDC009555555555554C012AAAAAAAAAAABC012AAAAAAAAAAABBFBFC3518A6DFC3 7C009555555555554C012AAAAAAAAAAABC010000000000000BFC13579BE02468CC0095 55555555554C012AAAAAAAAAAABC00AAAAAAAAAAAABBFC22833944A55B8C0095555555 55554C012AAAAAAAAAAABC005555555555556BFC2B9D6480F2B9FC009555555555554C 012AAAAAAAAAAABC000000000000001BFC2EA61D950C841C009555555555554C012AAA AAAAAAAABBFF5555555555558BFC2B9D6480F2B9EC009555555555554C012AAAAAAAAA AABBFE555555555555BBFC22833944A55B8C009555555555554C012AAAAAAAAAAABBCC 8000000000000BFC13579BE02468CC009555555555554C012AAAAAAAAAAAB3FE555555 555554FBFBFC3518A6DFC38C009555555555554C012AAAAAAAAAAAB3FF555555555555 2BFBC598153D0F8CFC009555555555554C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFB82 D82D82D82DCC009555555555554C012AAAAAAAAAAAB4005555555555553BFB33F56178 39A60C009555555555554C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFAB1DF623A67EB7C 009555555555554C012AAAAAAAAAAAB400FFFFFFFFFFFFDBF9C71C71C71C734C009555 555555554C012AAAAAAAAAAAB4012AAAAAAAAAAA93F3845C8A0CE4AC3C009555555555 554C012AAAAAAAAAAAB40155555555555543FA01E573AC901DAC009555555555554C01 2AAAAAAAAAAAB4017FFFFFFFFFFFF3FB0C83FB72EA618C009555555555554C012AAAAA AAAAAAB401AAAAAAAAAAAAA3FBA438215FF3DCEC009555555555554C012AAAAAAAAAAA B401D5555555555553FC240795CEB2406C009555555555554C012AAAAAAAAAAAB40200 000000000003FC7C048D159E26AC009555555555554C012AAAAAAAAAAAB40215555555 555553FCDA12F684BDA11C009555555555554C012AAAAAAAAAAAB4022AAAAAAAAAAAA3 FD1F19690E0857EC009555555555554C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FD5432 0FEDCBA96C009555555555554C010000000000000C0240000000000003FA9999999999 996C009555555555554C010000000000000C022AAAAAAAAAAAB3F904EE2CC0A9E90C00 9555555555554C010000000000000C021555555555556BF8F19690E0857ECC00955555 5555554C010000000000000C020000000000001BFA62FC962FC9626C00955555555555 4C010000000000000C01D555555555557BFB18A6DFC3518A4C009555555555554C0100 00000000000C01AAAAAAAAAAAACBFB73AC901E573ACC009555555555554C0100000000 00000C018000000000001BFBC28F5C28F5C28C009555555555554C010000000000000C 015555555555556BFC02A7A1F19690EC009555555555554C010000000000000C012AAA AAAAAAAABBFC1DF623A67EAC3C009555555555554C010000000000000C010000000000 000BFC3333333333334C009555555555554C010000000000000C00AAAAAAAAAAAABBFC 425ED097B4260C009555555555554C010000000000000C005555555555556BFC4B78FB D401847C009555555555554C010000000000000C000000000000001BFC4E81B4E81B4E 9C009555555555554C010000000000000BFF5555555555558BFC4B78FBD401846C0095 55555555554C010000000000000BFE555555555555BBFC425ED097B4260C0095555555 55554C010000000000000BCC8000000000000BFC3333333333334C009555555555554C 0100000000000003FE555555555554FBFC1DF623A67EAC4C009555555555554C010000 0000000003FF5555555555552BFC02A7A1F19690FC009555555555554C010000000000 0003FFFFFFFFFFFFFFCBFBC28F5C28F5C2CC009555555555554C010000000000000400 5555555555553BFB73AC901E573B0C009555555555554C010000000000000400AAAAAA AAAAAA8BFB18A6DFC3518ABC009555555555554C010000000000000400FFFFFFFFFFFF DBFA62FC962FC963AC009555555555554C0100000000000004012AAAAAAAAAAA9BF8F1 9690E08582AC009555555555554C01000000000000040155555555555543F904EE2CC0 A9E73C009555555555554C0100000000000004017FFFFFFFFFFFF3FA999999999998FC 009555555555554C010000000000000401AAAAAAAAAAAAA3FB6480F2B9D647EC009555 555555554C010000000000000401D5555555555553FC042BFE7BA375EC009555555555 554C01000000000000040200000000000003FC5C28F5C28F5C2C009555555555554C01 000000000000040215555555555553FCBA375F31AED69C009555555555554C01000000 00000004022AAAAAAAAAAAA3FD0F2B9D6480F2AC009555555555554C01000000000000 04023FFFFFFFFFFFF3FD4444444444442C009555555555554C00AAAAAAAAAAAABC0240 000000000003FA3E93E93E93E8EC009555555555554C00AAAAAAAAAAAABC022AAAAAAA AAAAB3F73B8B302A7A202C009555555555554C00AAAAAAAAAAAABC021555555555556B F9AED6A9264E216C009555555555554C00AAAAAAAAAAAABC020000000000001BFABE02 468ACF136C009555555555554C00AAAAAAAAAAAABC01D555555555557BFB4629B7F0D4 62CC009555555555554C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFBA12F684BDA134C00 9555555555554C00AAAAAAAAAAAABC018000000000001BFBF0123456789AEC00955555 5555554C00AAAAAAAAAAAABC015555555555556BFC19690E0857FD1C00955555555555 4C00AAAAAAAAAAAABC012AAAAAAAAAAABBFC34B78FBD40186C009555555555554C00AA AAAAAAAAAABC010000000000000BFC49F49F49F49F7C009555555555554C00AAAAAAAA AAAABC00AAAAAAAAAAAABBFC59203CAE75923C009555555555554C00AAAAAAAAAAAABC 005555555555556BFC623A67EAC2F0AC009555555555554C00AAAAAAAAAAAABC000000 000000001BFC654320FEDCBACC009555555555554C00AAAAAAAAAAAABBFF5555555555 558BFC623A67EAC2F09C009555555555554C00AAAAAAAAAAAABBFE555555555555BBFC 59203CAE75923C009555555555554C00AAAAAAAAAAAABBCC8000000000000BFC49F49F 49F49F7C009555555555554C00AAAAAAAAAAAAB3FE555555555554FBFC34B78FBD4018 7C009555555555554C00AAAAAAAAAAAAB3FF5555555555552BFC19690E0857FD2C0095 55555555554C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFBF0123456789B3C0095555555 55554C00AAAAAAAAAAAAB4005555555555553BFBA12F684BDA137C009555555555554C 00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFB4629B7F0D4631C009555555555554C00AAAA AAAAAAAAB400FFFFFFFFFFFFDBFABE02468ACF146C009555555555554C00AAAAAAAAAA AAB4012AAAAAAAAAAA9BF9AED6A9264E22DC009555555555554C00AAAAAAAAAAAAB401 55555555555543F73B8B302A7A16DC009555555555554C00AAAAAAAAAAAAB4017FFFFF FFFFFFF3FA3E93E93E93E83C009555555555554C00AAAAAAAAAAAAB401AAAAAAAAAAAA A3FB36FE1A8C536F8C009555555555554C00AAAAAAAAAAAAB401D5555555555553FBDA D524C9C4136C009555555555554C00AAAAAAAAAAAAB40200000000000003FC456789AB CDF00C009555555555554C00AAAAAAAAAAAAB40215555555555553FCA375F31AED6A6C 009555555555554C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FD03CAE759203C8C009555 555555554C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD38E38E38E38E1C009555555555 554C005555555555556C0240000000000003FA07F6E5D4C3B26C009555555555554C00 5555555555556C022AAAAAAAAAAABBF5E573AC901E4F8C009555555555554C00555555 5555556C021555555555556BFA0E0857FCF7473C009555555555554C00555555555555 6C020000000000001BFAF49F49F49F49EC009555555555554C005555555555556C01D5 55555555557BFB617839A5BC7E0C009555555555554C005555555555556C01AAAAAAAA AAAACBFBBC7DEA00C22E8C009555555555554C005555555555556C018000000000001B FC05B05B05B05B1C009555555555554C005555555555556C015555555555556BFC2710 4EE2CC0ABC009555555555554C005555555555556C012AAAAAAAAAAABBFC425ED097B4 260C009555555555554C005555555555556C010000000000000BFC579BE02468AD1C00 9555555555554C005555555555556C00AAAAAAAAAAAABBFC66C77D88E99FDC00955555 5555554C005555555555556C005555555555556BFC6FE1A8C536FE4C00955555555555 4C005555555555556C000000000000001BFC72EA61D950C86C009555555555554C0055 55555555556BFF5555555555558BFC6FE1A8C536FE3C009555555555554C0055555555 55556BFE555555555555BBFC66C77D88E99FDC009555555555554C005555555555556B CC8000000000000BFC579BE02468AD1C009555555555554C0055555555555563FE5555 55555554FBFC425ED097B4261C009555555555554C0055555555555563FF5555555555 552BFC27104EE2CC0ACC009555555555554C0055555555555563FFFFFFFFFFFFFFCBFC 05B05B05B05B3C009555555555554C0055555555555564005555555555553BFBBC7DEA 00C22EBC009555555555554C005555555555556400AAAAAAAAAAAA8BFB617839A5BC7E 5C009555555555554C005555555555556400FFFFFFFFFFFFDBFAF49F49F49F4AEC0095 55555555554C0055555555555564012AAAAAAAAAAA9BFA0E0857FCF747EC0095555555 55554C0055555555555564015555555555554BF5E573AC901E74AC009555555555554C 0055555555555564017FFFFFFFFFFFF3FA07F6E5D4C3B1BC009555555555554C005555 555555556401AAAAAAAAAAAAA3FB1BAF98D76B544C009555555555554C005555555555 556401D5555555555553FBBF86A314DBF82C009555555555554C005555555555556402 00000000000003FC37C048D159E26C009555555555554C005555555555556402155555 55555553FC95CEB240795CCC009555555555554C0055555555555564022AAAAAAAAAAA A3FCF9EE8DD7CC6B7C009555555555554C0055555555555564023FFFFFFFFFFFF3FD32 0FEDCBA9874C009555555555554C000000000000001C0240000000000003F9EB851EB8 51EACC009555555555554C000000000000001C022AAAAAAAAAAABBF70AFF9EE8DD7BEC 009555555555554C000000000000001C021555555555556BFA203CAE759203BC009555 555555554C000000000000001C020000000000001BFB0369D0369D033C009555555555 554C000000000000001C01D555555555557BFB6A9264E209DC4C009555555555554C00 0000000000001C01AAAAAAAAAAAACBFBC598153D0F8CCC009555555555554C00000000 0000001C018000000000001BFC0A3D70A3D70A4C009555555555554C00000000000000 1C015555555555556BFC2B9D6480F2B9EC009555555555554C000000000000001C012A AAAAAAAAAABBFC46EBE635DAD53C009555555555554C000000000000001C0100000000 00000BFC5C28F5C28F5C4C009555555555554C000000000000001C00AAAAAAAAAAAABB FC6B549327104F0C009555555555554C000000000000001C005555555555556BFC746E BE635DAD7C009555555555554C000000000000001C000000000000001BFC7777777777 779C009555555555554C000000000000001BFF5555555555558BFC746EBE635DAD6C00 9555555555554C000000000000001BFE555555555555BBFC6B549327104F0C00955555 5555554C000000000000001BCC8000000000000BFC5C28F5C28F5C4C00955555555555 4C0000000000000013FE555555555554FBFC46EBE635DAD54C009555555555554C0000 000000000013FF5555555555552BFC2B9D6480F2B9FC009555555555554C0000000000 000013FFFFFFFFFFFFFFCBFC0A3D70A3D70A6C009555555555554C0000000000000014 005555555555553BFBC598153D0F8D1C009555555555554C000000000000001400AAAA AAAAAAAA8BFB6A9264E209DCBC009555555555554C000000000000001400FFFFFFFFFF FFDBFB0369D0369D03DC009555555555554C0000000000000014012AAAAAAAAAAA9BFA 203CAE759204AC009555555555554C0000000000000014015555555555554BF70AFF9E E8DD833C009555555555554C0000000000000014017FFFFFFFFFFFF3F9EB851EB851E9 EC009555555555554C000000000000001401AAAAAAAAAAAAA3FB12956D9B1DF5EC0095 55555555554C000000000000001401D5555555555553FBB66C77D88E99CC0095555555 55554C00000000000000140200000000000003FC3333333333332C009555555555554C 00000000000000140215555555555553FC91419CA252AD9C009555555555554C000000 0000000014022AAAAAAAAAAAA3FCF5617839A5BC4C009555555555554C000000000000 0014023FFFFFFFFFFFF3FD2FC962FC962FAC009555555555554BFF5555555555558C02 40000000000003FA07F6E5D4C3B26C009555555555554BFF5555555555558C022AAAAA AAAAAABBF5E573AC901E4F8C009555555555554BFF5555555555558C02155555555555 6BFA0E0857FCF7473C009555555555554BFF5555555555558C020000000000001BFAF4 9F49F49F49EC009555555555554BFF5555555555558C01D555555555557BFB617839A5 BC7E0C009555555555554BFF5555555555558C01AAAAAAAAAAAACBFBBC7DEA00C22E8C 009555555555554BFF5555555555558C018000000000001BFC05B05B05B05B1C009555 555555554BFF5555555555558C015555555555556BFC27104EE2CC0ABC009555555555 554BFF5555555555558C012AAAAAAAAAAABBFC425ED097B4260C009555555555554BFF 5555555555558C010000000000000BFC579BE02468AD1C009555555555554BFF555555 5555558C00AAAAAAAAAAAABBFC66C77D88E99FDC009555555555554BFF555555555555 8C005555555555556BFC6FE1A8C536FE4C009555555555554BFF5555555555558C0000 00000000001BFC72EA61D950C86C009555555555554BFF5555555555558BFF55555555 55558BFC6FE1A8C536FE3C009555555555554BFF5555555555558BFE555555555555BB FC66C77D88E99FDC009555555555554BFF5555555555558BCC8000000000000BFC579B E02468AD1C009555555555554BFF55555555555583FE555555555554FBFC425ED097B4 261C009555555555554BFF55555555555583FF5555555555552BFC27104EE2CC0ACC00 9555555555554BFF55555555555583FFFFFFFFFFFFFFCBFC05B05B05B05B3C00955555 5555554BFF55555555555584005555555555553BFBBC7DEA00C22EBC00955555555555 4BFF5555555555558400AAAAAAAAAAAA8BFB617839A5BC7E5C009555555555554BFF55 55555555558400FFFFFFFFFFFFDBFAF49F49F49F4AEC009555555555554BFF55555555 555584012AAAAAAAAAAA9BFA0E0857FCF747EC009555555555554BFF55555555555584 015555555555554BF5E573AC901E74AC009555555555554BFF55555555555584017FFF FFFFFFFFF3FA07F6E5D4C3B1BC009555555555554BFF5555555555558401AAAAAAAAAA AAA3FB1BAF98D76B544C009555555555554BFF5555555555558401D5555555555553FB BF86A314DBF82C009555555555554BFF555555555555840200000000000003FC37C048 D159E26C009555555555554BFF555555555555840215555555555553FC95CEB240795C CC009555555555554BFF55555555555584022AAAAAAAAAAAA3FCF9EE8DD7CC6B7C0095 55555555554BFF55555555555584023FFFFFFFFFFFF3FD320FEDCBA9874C0095555555 55554BFE555555555555BC0240000000000003FA3E93E93E93E8EC009555555555554B FE555555555555BC022AAAAAAAAAAAB3F73B8B302A7A202C009555555555554BFE5555 55555555BC021555555555556BF9AED6A9264E206C009555555555554BFE5555555555 55BC020000000000001BFABE02468ACF12EC009555555555554BFE555555555555BC01 D555555555557BFB4629B7F0D4628C009555555555554BFE555555555555BC01AAAAAA AAAAAACBFBA12F684BDA130C009555555555554BFE555555555555BC01800000000000 1BFBF0123456789ACC009555555555554BFE555555555555BC015555555555556BFC19 690E0857FD0C009555555555554BFE555555555555BC012AAAAAAAAAAABBFC34B78FBD 40185C009555555555554BFE555555555555BC010000000000000BFC49F49F49F49F6C 009555555555554BFE555555555555BC00AAAAAAAAAAAABBFC59203CAE75922C009555 555555554BFE555555555555BC005555555555556BFC623A67EAC2F09C009555555555 554BFE555555555555BC000000000000001BFC654320FEDCBABC009555555555554BFE 555555555555BBFF5555555555558BFC623A67EAC2F08C009555555555554BFE555555 555555BBFE555555555555BBFC59203CAE75922C009555555555554BFE555555555555 BBCC8000000000000BFC49F49F49F49F6C009555555555554BFE555555555555B3FE55 5555555554FBFC34B78FBD40186C009555555555554BFE555555555555B3FF55555555 55552BFC19690E0857FD1C009555555555554BFE555555555555B3FFFFFFFFFFFFFFCB FBF0123456789B1C009555555555554BFE555555555555B4005555555555553BFBA12F 684BDA135C009555555555554BFE555555555555B400AAAAAAAAAAAA8BFB4629B7F0D4 62FC009555555555554BFE555555555555B400FFFFFFFFFFFFDBFABE02468ACF142C00 9555555555554BFE555555555555B4012AAAAAAAAAAA9BF9AED6A9264E225C00955555 5555554BFE555555555555B40155555555555543F73B8B302A7A18DC00955555555555 4BFE555555555555B4017FFFFFFFFFFFF3FA3E93E93E93E87C009555555555554BFE55 5555555555B401AAAAAAAAAAAAA3FB36FE1A8C536FAC009555555555554BFE55555555 5555B401D5555555555553FBDAD524C9C4138C009555555555554BFE555555555555B4 0200000000000003FC456789ABCDF00C009555555555554BFE555555555555B4021555 5555555553FCA375F31AED6A7C009555555555554BFE555555555555B4022AAAAAAAAA AAA3FD03CAE759203C9C009555555555554BFE555555555555B4023FFFFFFFFFFFF3FD 38E38E38E38E1C009555555555554BCC8000000000000C0240000000000003FA999999 9999996C009555555555554BCC8000000000000C022AAAAAAAAAAAB3F904EE2CC0A9E9 0C009555555555554BCC8000000000000C021555555555556BF8F19690E08580CC0095 55555555554BCC8000000000000C020000000000001BFA62FC962FC962EC0095555555 55554BCC8000000000000C01D555555555557BFB18A6DFC3518A6C009555555555554B CC8000000000000C01AAAAAAAAAAAACBFB73AC901E573AEC009555555555554BCC8000 000000000C018000000000001BFBC28F5C28F5C2AC009555555555554BCC8000000000 000C015555555555556BFC02A7A1F19690FC009555555555554BCC8000000000000C01 2AAAAAAAAAAABBFC1DF623A67EAC4C009555555555554BCC8000000000000C01000000 0000000BFC3333333333335C009555555555554BCC8000000000000C00AAAAAAAAAAAA BBFC425ED097B4261C009555555555554BCC8000000000000C005555555555556BFC4B 78FBD401848C009555555555554BCC8000000000000C000000000000001BFC4E81B4E8 1B4EAC009555555555554BCC8000000000000BFF5555555555558BFC4B78FBD401847C 009555555555554BCC8000000000000BFE555555555555BBFC425ED097B4261C009555 555555554BCC8000000000000BCC8000000000000BFC3333333333335C009555555555 554BCC80000000000003FE555555555554FBFC1DF623A67EAC5C009555555555554BCC 80000000000003FF5555555555552BFC02A7A1F196910C009555555555554BCC800000 00000003FFFFFFFFFFFFFFCBFBC28F5C28F5C2EC009555555555554BCC800000000000 04005555555555553BFB73AC901E573B2C009555555555554BCC8000000000000400AA AAAAAAAAAA8BFB18A6DFC3518ADC009555555555554BCC8000000000000400FFFFFFFF FFFFDBFA62FC962FC963EC009555555555554BCC80000000000004012AAAAAAAAAAA9B F8F19690E08583AC009555555555554BCC800000000000040155555555555543F904EE 2CC0A9E6BC009555555555554BCC80000000000004017FFFFFFFFFFFF3FA9999999999 98BC009555555555554BCC8000000000000401AAAAAAAAAAAAA3FB6480F2B9D647CC00 9555555555554BCC8000000000000401D5555555555553FC042BFE7BA375DC00955555 5555554BCC800000000000040200000000000003FC5C28F5C28F5C2C00955555555555 4BCC800000000000040215555555555553FCBA375F31AED68C009555555555554BCC80 000000000004022AAAAAAAAAAAA3FD0F2B9D6480F29C009555555555554BCC80000000 000004023FFFFFFFFFFFF3FD4444444444442C0095555555555543FE555555555554FC 0240000000000003FB0C83FB72EA617C0095555555555543FE555555555554FC022AAA AAAAAAAAB3FA01E573AC901E0C0095555555555543FE555555555554FC021555555555 5563F3845C8A0CE4E7EC0095555555555543FE555555555554FC020000000000001BF9 C71C71C71C71DC0095555555555543FE555555555554FC01D555555555557BFAB1DF62 3A67EAFC0095555555555543FE555555555554FC01AAAAAAAAAAAACBFB33F5617839A6 0C0095555555555543FE555555555554FC018000000000001BFB82D82D82D82DCC0095 555555555543FE555555555554FC015555555555556BFBC598153D0F8D1C0095555555 555543FE555555555554FC012AAAAAAAAAAABBFBFC3518A6DFC3BC0095555555555543 FE555555555554FC010000000000000BFC13579BE02468EC0095555555555543FE5555 55555554FC00AAAAAAAAAAAABBFC22833944A55BAC0095555555555543FE5555555555 54FC005555555555556BFC2B9D6480F2BA1C0095555555555543FE555555555554FC00 0000000000001BFC2EA61D950C843C0095555555555543FE555555555554FBFF555555 5555558BFC2B9D6480F2BA0C0095555555555543FE555555555554FBFE555555555555 BBFC22833944A55BAC0095555555555543FE555555555554FBCC8000000000000BFC13 579BE02468EC0095555555555543FE555555555554F3FE555555555554FBFBFC3518A6 DFC3CC0095555555555543FE555555555554F3FF5555555555552BFBC598153D0F8D3C 0095555555555543FE555555555554F3FFFFFFFFFFFFFFCBFB82D82D82D82E0C009555 5555555543FE555555555554F4005555555555553BFB33F5617839A64C009555555555 5543FE555555555554F400AAAAAAAAAAAA8BFAB1DF623A67EBFC0095555555555543FE 555555555554F400FFFFFFFFFFFFDBF9C71C71C71C744C0095555555555543FE555555 555554F4012AAAAAAAAAAA93F3845C8A0CE46C3C0095555555555543FE555555555554 F40155555555555543FA01E573AC901D2C0095555555555543FE555555555554F4017F FFFFFFFFFFF3FB0C83FB72EA614C0095555555555543FE555555555554F401AAAAAAAA AAAAA3FBA438215FF3DCAC0095555555555543FE555555555554F401D5555555555553 FC240795CEB2404C0095555555555543FE555555555554F40200000000000003FC7C04 8D159E268C0095555555555543FE555555555554F40215555555555553FCDA12F684BD A0FC0095555555555543FE555555555554F4022AAAAAAAAAAAA3FD1F19690E0857DC00 95555555555543FE555555555554F4023FFFFFFFFFFFF3FD54320FEDCBA95C00955555 55555543FF5555555555552C0240000000000003FB5E6F8091A2B39C00955555555555 43FF5555555555552C022AAAAAAAAAAAB3FAA5BC7DEA00C20C0095555555555543FF55 55555555552C0215555555555563F94DBF86A314DBAC0095555555555543FF55555555 55552C020000000000001BF7FDB97530ECA73C0095555555555543FF5555555555552C 01D555555555557BFA0E0857FCF746FC0095555555555543FF5555555555552C01AAAA AAAAAAAACBFAC413B8B302A7FC0095555555555543FF5555555555552C018000000000 001BFB30ECA8641FDBCC0095555555555543FF5555555555552C015555555555556BFB 73AC901E573B1C0095555555555543FF5555555555552C012AAAAAAAAAAABBFBAA4993 882771BC0095555555555543FF5555555555552C010000000000000BFBD4C3B2A1907F CC0095555555555543FF5555555555552C00AAAAAAAAAAAABBFBF31AED6A92653C0095 555555555543FF5555555555552C005555555555556BFC02A7A1F196911C0095555555 555543FF5555555555552C000000000000001BFC05B05B05B05B3C0095555555555543 FF5555555555552BFF5555555555558BFC02A7A1F196910C0095555555555543FF5555 555555552BFE555555555555BBFBF31AED6A92654C0095555555555543FF5555555555 552BCC8000000000000BFBD4C3B2A1907FDC0095555555555543FF55555555555523FE 555555555554FBFBAA4993882771DC0095555555555543FF55555555555523FF555555 5555552BFB73AC901E573B3C0095555555555543FF55555555555523FFFFFFFFFFFFFF CBFB30ECA8641FDC0C0095555555555543FF55555555555524005555555555553BFAC4 13B8B302A88C0095555555555543FF5555555555552400AAAAAAAAAAAA8BFA0E0857FC F747FC0095555555555543FF5555555555552400FFFFFFFFFFFFDBF7FDB97530ECB11C 0095555555555543FF55555555555524012AAAAAAAAAAA93F94DBF86A314D9BC009555 5555555543FF555555555555240155555555555543FAA5BC7DEA00C12C009555555555 5543FF55555555555524017FFFFFFFFFFFF3FB5E6F8091A2B34C0095555555555543FF 5555555555552401AAAAAAAAAAAAA3FBF623A67EAC2EAC0095555555555543FF555555 5555552401D5555555555553FC4CFD585E0E694C0095555555555543FF555555555555 240200000000000003FCA4FA4FA4FA4F8C0095555555555543FF555555555555240215 555555555553FD01845C8A0CE50C0095555555555543FF55555555555524022AAAAAAA AAAAA3FD33944A55B66C5C0095555555555543FF55555555555524023FFFFFFFFFFFF3 FD68ACF13579BDDC0095555555555543FFFFFFFFFFFFFFCC0240000000000003FBC28F 5C28F5C23C0095555555555543FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FB36FE1A8C53 6FCC0095555555555543FFFFFFFFFFFFFFCC0215555555555563FA6F1F7A80308B1C00 95555555555543FFFFFFFFFFFFFFCC0200000000000013F9111111111110BC00955555 55555543FFFFFFFFFFFFFFCC01D555555555557BF81722833944A6EC00955555555555 43FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBF9F7A80308B9157C0095555555555543FFFF FFFFFFFFFFCC018000000000001BFA99999999999A3C0095555555555543FFFFFFFFFF FFFFCC015555555555556BFB0F8CB487042C5C0095555555555543FFFFFFFFFFFFFFCC 012AAAAAAAAAAABBFB4629B7F0D462FC0095555555555543FFFFFFFFFFFFFFCC010000 000000000BFB70A3D70A3D710C0095555555555543FFFFFFFFFFFFFFCC00AAAAAAAAAA AABBFB8EFB11D33F567C0095555555555543FFFFFFFFFFFFFFCC005555555555556BFB A12F684BDA135C0095555555555543FFFFFFFFFFFFFFCC000000000000001BFBA740DA 740DA7BC0095555555555543FFFFFFFFFFFFFFCBFF5555555555558BFBA12F684BDA13 6C0095555555555543FFFFFFFFFFFFFFCBFE555555555555BBFB8EFB11D33F569C0095 555555555543FFFFFFFFFFFFFFCBCC8000000000000BFB70A3D70A3D712C0095555555 555543FFFFFFFFFFFFFFC3FE555555555554FBFB4629B7F0D4632C0095555555555543 FFFFFFFFFFFFFFC3FF5555555555552BFB0F8CB487042C8C0095555555555543FFFFFF FFFFFFFFC3FFFFFFFFFFFFFFCBFA99999999999AAC0095555555555543FFFFFFFFFFFF FFC4005555555555553BF9F7A80308B9166C0095555555555543FFFFFFFFFFFFFFC400 AAAAAAAAAAAA8BF81722833944AA0C0095555555555543FFFFFFFFFFFFFFC400FFFFFF FFFFFFD3F911111111110E8C0095555555555543FFFFFFFFFFFFFFC4012AAAAAAAAAAA 93FA6F1F7A80308A4C0095555555555543FFFFFFFFFFFFFFC40155555555555543FB36 FE1A8C536F4C0095555555555543FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FBC28F5C28 F5C1FC0095555555555543FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FC2D21C10AFF9EAC 0095555555555543FFFFFFFFFFFFFFC401D5555555555553FC7F0D4629B7F0AC009555 5555555543FFFFFFFFFFFFFFC40200000000000003FCD70A3D70A3D6EC009555555555 5543FFFFFFFFFFFFFFC40215555555555553FD1A8C536FE1A8AC0095555555555543FF FFFFFFFFFFFFC4022AAAAAAAAAAAA3FD4C9C413B8B300C0095555555555543FFFFFFFF FFFFFFC4023FFFFFFFFFFFF3FD81B4E81B4E818C009555555555554400555555555555 3C0240000000000003FC1C71C71C71C6EC0095555555555544005555555555553C022A AAAAAAAAAAB3FBAD524C9C413B6C0095555555555544005555555555553C0215555555 555563FB2DE3EF5006114C0095555555555544005555555555553C0200000000000013 FA7530ECA8641FAC0095555555555544005555555555553C01D5555555555573F94DBF 86A314DB1C0095555555555544005555555555553C01AAAAAAAAAAAACBF5E573AC901E 66CC0095555555555544005555555555553C018000000000001BF959E26AF37C057C00 95555555555544005555555555553C015555555555556BFA327104EE2CC16C00955555 55555544005555555555553C012AAAAAAAAAAABBFA9FAB0BC1CD2EAC00955555555555 44005555555555553C010000000000000BFAF49F49F49F4ADC00955555555555440055 55555555553C00AAAAAAAAAAAABBFB18A6DFC3518ADC00955555555555440055555555 55553C005555555555556BFB2ADB363BEC47BC0095555555555544005555555555553C 000000000000001BFB30ECA8641FDC1C0095555555555544005555555555553BFF5555 555555558BFB2ADB363BEC47CC0095555555555544005555555555553BFE5555555555 55BBFB18A6DFC3518AEC0095555555555544005555555555553BCC8000000000000BFA F49F49F49F4AEC00955555555555440055555555555533FE555555555554FBFA9FAB0B C1CD2EEC00955555555555440055555555555533FF5555555555552BFA327104EE2CC1 BC00955555555555440055555555555533FFFFFFFFFFFFFFCBF959E26AF37C06AC0095 5555555555440055555555555534005555555555553BF5E573AC901E7ACC0095555555 555544005555555555553400AAAAAAAAAAAA83F94DBF86A314D9AC0095555555555544 005555555555553400FFFFFFFFFFFFD3FA7530ECA8641E9C0095555555555544005555 5555555534012AAAAAAAAAAA93FB2DE3EF500610CC0095555555555544005555555555 55340155555555555543FBAD524C9C413AFC0095555555555544005555555555553401 7FFFFFFFFFFFF3FC1C71C71C71C6DC0095555555555544005555555555553401AAAAAA AAAAAAA3FC684BDA12F6848C0095555555555544005555555555553401D55555555555 53FCBA375F31AED67C009555555555554400555555555555340200000000000003FD09 1A2B3C4D5E6C009555555555554400555555555555340215555555555553FD38215FF3 DD1B9C00955555555555440055555555555534022AAAAAAAAAAAA3FD6A314DBF86A2EC 00955555555555440055555555555534023FFFFFFFFFFFF3FD9F49F49F49F47C009555 555555554400AAAAAAAAAAAA8C0240000000000003FC60B60B60B60B2C009555555555 554400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FC1AED6A9264E1FC009555555555554400 AAAAAAAAAAAA8C0215555555555563FBB66C77D88E99AC009555555555554400AAAAAA AAAAAA8C0200000000000013FB4320FEDCBA985C009555555555554400AAAAAAAAAAAA 8C01D5555555555573FAB7F0D4629B7E9C009555555555554400AAAAAAAAAAAA8C01AA AAAAAAAAAAC3FA01E573AC901D9C009555555555554400AAAAAAAAAAAA8C0180000000 000013F8907F6E5D4C382C009555555555554400AAAAAAAAAAAA8C015555555555556B F70AFF9EE8DD83EC009555555555554400AAAAAAAAAAAA8C012AAAAAAAAAAABBF91D33 F561783B8C009555555555554400AAAAAAAAAAAA8C010000000000000BF9C71C71C71C 73EC009555555555554400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFA203CAE759204DC00 9555555555554400AAAAAAAAAAAA8C005555555555556BFA44A55B66C77E8C00955555 5555554400AAAAAAAAAAAA8C000000000000001BFA50C83FB72EA72C00955555555555 4400AAAAAAAAAAAA8BFF5555555555558BFA44A55B66C77EAC009555555555554400AA AAAAAAAAAA8BFE555555555555BBFA203CAE759204EC009555555555554400AAAAAAAA AAAA8BCC8000000000000BF9C71C71C71C741C009555555555554400AAAAAAAAAAAA83 FE555555555554FBF91D33F561783BFC009555555555554400AAAAAAAAAAAA83FF5555 555555552BF70AFF9EE8DD863C009555555555554400AAAAAAAAAAAA83FFFFFFFFFFFF FFC3F8907F6E5D4C363C009555555555554400AAAAAAAAAAAA840055555555555533FA 01E573AC901D1C009555555555554400AAAAAAAAAAAA8400AAAAAAAAAAAA83FAB7F0D4 629B7DBC009555555555554400AAAAAAAAAAAA8400FFFFFFFFFFFFD3FB4320FEDCBA97 CC009555555555554400AAAAAAAAAAAA84012AAAAAAAAAAA93FBB66C77D88E993C0095 55555555554400AAAAAAAAAAAA840155555555555543FC1AED6A9264E1BC0095555555 55554400AAAAAAAAAAAA84017FFFFFFFFFFFF3FC60B60B60B60B0C0095555555555544 00AAAAAAAAAAAA8401AAAAAAAAAAAAA3FCAC901E573AC8BC009555555555554400AAAA AAAAAAAA8401D5555555555553FCFE7BA375F31AAC009555555555554400AAAAAAAAAA AA840200000000000003FD2B3C4D5E6F808C009555555555554400AAAAAAAAAAAA8402 15555555555553FD5A438215FF3DBC009555555555554400AAAAAAAAAAAA84022AAAAA AAAAAAA3FD8C536FE1A8C50C009555555555554400AAAAAAAAAAAA84023FFFFFFFFFFF F3FDC16C16C16C169C009555555555554400FFFFFFFFFFFFDC0240000000000003FCAE 147AE147ADDC009555555555554400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FC684BDA12 F684AC009555555555554400FFFFFFFFFFFFDC0215555555555563FC2894AB6CD8EF8C 009555555555554400FFFFFFFFFFFFDC0200000000000013FBDDDDDDDDDDDDAC009555 555555554400FFFFFFFFFFFFDC01D5555555555573FB76B549327104AC009555555555 554400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FB1BAF98D76B542C009555555555554400 FFFFFFFFFFFFDC0180000000000013FA999999999998DC009555555555554400FFFFFF FFFFFFDC0155555555555563FA1419CA252ADA2C009555555555554400FFFFFFFFFFFF DC012AAAAAAAAAAAB3F94DBF86A314D9EC009555555555554400FFFFFFFFFFFFDC0100 000000000003F847AE147AE1430C009555555555554400FFFFFFFFFFFFDC00AAAAAAAA AAAAB3F653D0F8CB485E5C009555555555554400FFFFFFFFFFFFDC005555555555556B F5E573AC901E7BEC009555555555554400FFFFFFFFFFFFDC000000000000001BF6B4E8 1B4E81C76C009555555555554400FFFFFFFFFFFFDBFF5555555555558BF5E573AC901E 7CFC009555555555554400FFFFFFFFFFFFDBFE555555555555B3F653D0F8CB485CFC00 9555555555554400FFFFFFFFFFFFDBCC80000000000003F847AE147AE142CC00955555 5555554400FFFFFFFFFFFFD3FE555555555554F3F94DBF86A314D97C00955555555555 4400FFFFFFFFFFFFD3FF55555555555523FA1419CA252AD9FC009555555555554400FF FFFFFFFFFFD3FFFFFFFFFFFFFFC3FA9999999999984C009555555555554400FFFFFFFF FFFFD40055555555555533FB1BAF98D76B53EC009555555555554400FFFFFFFFFFFFD4 00AAAAAAAAAAAA83FB76B5493271043C009555555555554400FFFFFFFFFFFFD400FFFF FFFFFFFFD3FBDDDDDDDDDDDD1C009555555555554400FFFFFFFFFFFFD4012AAAAAAAAA AA93FC2894AB6CD8EF4C009555555555554400FFFFFFFFFFFFD40155555555555543FC 684BDA12F6845C009555555555554400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FCAE147A E147ADBC009555555555554400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FCF9EE8DD7CC6B 6C009555555555554400FFFFFFFFFFFFD401D5555555555553FD25ED097B425EBC0095 55555555554400FFFFFFFFFFFFD40200000000000003FD51EB851EB851DC0095555555 55554400FFFFFFFFFFFFD40215555555555553FD80F2B9D6480F0C0095555555555544 00FFFFFFFFFFFFD4022AAAAAAAAAAAA3FDB302A7A1F1965C009555555555554400FFFF FFFFFFFFD4023FFFFFFFFFFFF3FDE81B4E81B4E7EC0095555555555544012AAAAAAAAA AA9C0240000000000003FD02468ACF13577C0095555555555544012AAAAAAAAAAA9C02 2AAAAAAAAAAAB3FCBEC474CFD585BC0095555555555544012AAAAAAAAAAA9C02155555 55555563FC7F0D4629B7F0AC0095555555555544012AAAAAAAAAAA9C02000000000000 13FC456789ABCDEFFC0095555555555544012AAAAAAAAAAA9C01D5555555555573FC11 D33F5617837C0095555555555544012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FBC8A0CE51 29565C0095555555555544012AAAAAAAAAAA9C0180000000000013FB79BE02468ACEAC 0095555555555544012AAAAAAAAAAA9C0155555555555563FB36FE1A8C536F5C009555 5555555544012AAAAAAAAAAA9C012AAAAAAAAAAAB3FB006117228338BC009555555555 5544012AAAAAAAAAAA9C0100000000000003FAABCDF01234553C009555555555554401 2AAAAAAAAAAA9C00AAAAAAAAAAAAB3FA6F1F7A80308A5C0095555555555544012AAAAA AAAAAA9C0055555555555563FA4AB6CD8EFB109C0095555555555544012AAAAAAAAAAA 9C0000000000000013FA3E93E93E93E7FC0095555555555544012AAAAAAAAAAA9BFF55 555555555583FA4AB6CD8EFB108C0095555555555544012AAAAAAAAAAA9BFE55555555 5555B3FA6F1F7A80308A4C0095555555555544012AAAAAAAAAAA9BCC80000000000003 FAABCDF01234552C0095555555555544012AAAAAAAAAAA93FE555555555554F3FB0061 172283389C0095555555555544012AAAAAAAAAAA93FF55555555555523FB36FE1A8C53 6F3C0095555555555544012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FB79BE02468ACE5C00 95555555555544012AAAAAAAAAAA940055555555555533FBC8A0CE5129561C00955555 55555544012AAAAAAAAAAA9400AAAAAAAAAAAA83FC11D33F5617833C00955555555555 44012AAAAAAAAAAA9400FFFFFFFFFFFFD3FC456789ABCDEFAC0095555555555544012A AAAAAAAAAA94012AAAAAAAAAAA93FC7F0D4629B7F06C0095555555555544012AAAAAAA AAAA940155555555555543FCBEC474CFD5857C0095555555555544012AAAAAAAAAAA94 017FFFFFFFFFFFF3FD02468ACF13576C0095555555555544012AAAAAAAAAAA9401AAAA AAAAAAAAA3FD2833944A55B64C0095555555555544012AAAAAAAAAAA9401D555555555 5553FD512956D9B1DF3C0095555555555544012AAAAAAAAAAA940200000000000003FD 7D27D27D27D26C0095555555555544012AAAAAAAAAAA940215555555555553FDAC2F07 34B78F9C0095555555555544012AAAAAAAAAAA94022AAAAAAAAAAAA3FDDE3EF5006116 EC0095555555555544012AAAAAAAAAAA94023FFFFFFFFFFFF3FE09ABCDF012343C0095 555555555544015555555555554C0240000000000003FD320FEDCBA9874C0095555555 555544015555555555554C022AAAAAAAAAAAB3FD0F2B9D6480F2AC0095555555555544 015555555555554C0215555555555563FCDEA00C22E4504C0095555555555544015555 555555554C0200000000000013FCA4FA4FA4FA4F9C0095555555555544015555555555 554C01D5555555555573FC7166054F43E30C0095555555555544015555555555554C01 AAAAAAAAAAAAC3FC43E32D21C10ADC0095555555555544015555555555554C01800000 00000013FC1C71C71C71C6FC0095555555555544015555555555554C01555555555555 63FBF623A67EAC2E8C0095555555555544015555555555554C012AAAAAAAAAAAB3FBBF 86A314DBF7FC0095555555555544015555555555554C0100000000000003FB950C83FB 72E9DC0095555555555544015555555555554C00AAAAAAAAAAAAB3FB76B5493271046C 0095555555555544015555555555554C0055555555555563FB6480F2B9D6478C009555 5555555544015555555555554C0000000000000013FB5E6F8091A2B33C009555555555 5544015555555555554BFF55555555555583FB6480F2B9D6478C009555555555554401 5555555555554BFE555555555555B3FB76B5493271045C009555555555554401555555 5555554BCC80000000000003FB950C83FB72E9CC009555555555554401555555555555 43FE555555555554F3FBBF86A314DBF7CC00955555555555440155555555555543FF55 555555555523FBF623A67EAC2E6C00955555555555440155555555555543FFFFFFFFFF FFFFC3FC1C71C71C71C6DC009555555555554401555555555555440055555555555533 FC43E32D21C10ABC0095555555555544015555555555554400AAAAAAAAAAAA83FC7166 054F43E2DC0095555555555544015555555555554400FFFFFFFFFFFFD3FCA4FA4FA4FA 4F4C00955555555555440155555555555544012AAAAAAAAAAA93FCDEA00C22E44FFC00 9555555555554401555555555555440155555555555543FD0F2B9D6480F29C00955555 555555440155555555555544017FFFFFFFFFFFF3FD320FEDCBA9873C00955555555555 44015555555555554401AAAAAAAAAAAAA3FD57FCF746EBE61C00955555555555440155 55555555554401D5555555555553FD80F2B9D6480F0C00955555555555440155555555 5555440200000000000003FDACF13579BE022C00955555555555440155555555555544 0215555555555553FDDBF86A314DBF6C00955555555555440155555555555544022AAA AAAAAAAAA3FE07042BFE7BA35C00955555555555440155555555555544023FFFFFFFFF FFF3FE21907F6E5D4C2C0095555555555544017FFFFFFFFFFFFC0240000000000003FD 6666666666664C0095555555555544017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD438215 FF3DD1AC0095555555555544017FFFFFFFFFFFFC0215555555555563FD23A67EAC2F07 2C0095555555555544017FFFFFFFFFFFFC0200000000000013FD06D3A06D3A06CC0095 555555555544017FFFFFFFFFFFFC01D5555555555573FCDA12F684BDA10C0095555555 555544017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FCAC901E573AC8CC0095555555555544 017FFFFFFFFFFFFC0180000000000013FC851EB851EB84EC0095555555555544017FFF FFFFFFFFFC0155555555555563FC63BEC474CFD54C0095555555555544017FFFFFFFFF FFFC012AAAAAAAAAAAB3FC487042BFE7B9FC0095555555555544017FFFFFFFFFFFFC01 00000000000003FC333333333332EC0095555555555544017FFFFFFFFFFFFC00AAAAAA AAAAAAB3FC240795CEB2402C0095555555555544017FFFFFFFFFFFFC00555555555555 63FC1AED6A9264E1BC0095555555555544017FFFFFFFFFFFFC0000000000000013FC17 E4B17E4B179C0095555555555544017FFFFFFFFFFFFBFF55555555555583FC1AED6A92 64E1CC0095555555555544017FFFFFFFFFFFFBFE555555555555B3FC240795CEB2402C 0095555555555544017FFFFFFFFFFFFBCC80000000000003FC333333333332EC009555 5555555544017FFFFFFFFFFFF3FE555555555554F3FC487042BFE7B9EC009555555555 5544017FFFFFFFFFFFF3FF55555555555523FC63BEC474CFD53C009555555555554401 7FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FC851EB851EB84CC0095555555555544017FFFFF FFFFFFF40055555555555533FCAC901E573AC8AC0095555555555544017FFFFFFFFFFF F400AAAAAAAAAAAA83FCDA12F684BDA0CC0095555555555544017FFFFFFFFFFFF400FF FFFFFFFFFFD3FD06D3A06D3A06AC0095555555555544017FFFFFFFFFFFF4012AAAAAAA AAAA93FD23A67EAC2F070C0095555555555544017FFFFFFFFFFFF40155555555555543 FD438215FF3DD18C0095555555555544017FFFFFFFFFFFF4017FFFFFFFFFFFF3FD6666 666666663C0095555555555544017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD8C536FE1A8 C50C0095555555555544017FFFFFFFFFFFF401D5555555555553FDB549327104EE0C00 95555555555544017FFFFFFFFFFFF40200000000000003FDE147AE147AE12C00955555 55555544017FFFFFFFFFFFF40215555555555553FE08277166054F3C00955555555555 44017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE212F684BDA12DC0095555555555544017F FFFFFFFFFFF4023FFFFFFFFFFFF3FE3BBBBBBBBBBBAC009555555555554401AAAAAAAA AAAAAC0240000000000003FD9F49F49F49F48C009555555555554401AAAAAAAAAAAAAC 022AAAAAAAAAAAB3FD7C65A438215FFC009555555555554401AAAAAAAAAAAAAC021555 5555555563FD5C8A0CE512956C009555555555554401AAAAAAAAAAAAAC020000000000 0013FD3FB72EA61D950C009555555555554401AAAAAAAAAAAAAC01D5555555555573FD 25ED097B425ECC009555555555554401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FD0F2B9D 6480F2BC009555555555554401AAAAAAAAAAAAAC0180000000000013FCF6E5D4C3B2A1 7C009555555555554401AAAAAAAAAAAAAC0155555555555563FCD585E0E696F1DC0095 55555555554401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FCBA375F31AED68C0095555555 55554401AAAAAAAAAAAAAC0100000000000003FCA4FA4FA4FA4F7C0095555555555544 01AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FC95CEB240795CBC009555555555554401AAAA AAAAAAAAAC0055555555555563FC8CB487042BFE4C009555555555554401AAAAAAAAAA AAAC0000000000000013FC89ABCDF012342C009555555555554401AAAAAAAAAAAAABFF 55555555555583FC8CB487042BFE5C009555555555554401AAAAAAAAAAAAABFE555555 555555B3FC95CEB240795CBC009555555555554401AAAAAAAAAAAAABCC800000000000 03FCA4FA4FA4FA4F7C009555555555554401AAAAAAAAAAAAA3FE555555555554F3FCBA 375F31AED67C009555555555554401AAAAAAAAAAAAA3FF55555555555523FCD585E0E6 96F1CC009555555555554401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FCF6E5D4C3B2A15C 009555555555554401AAAAAAAAAAAAA40055555555555533FD0F2B9D6480F29C009555 555555554401AAAAAAAAAAAAA400AAAAAAAAAAAA83FD25ED097B425EBC009555555555 554401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FD3FB72EA61D94EC009555555555554401 AAAAAAAAAAAAA4012AAAAAAAAAAA93FD5C8A0CE512954C009555555555554401AAAAAA AAAAAAA40155555555555543FD7C65A438215FDC009555555555554401AAAAAAAAAAAA A4017FFFFFFFFFFFF3FD9F49F49F49F47C009555555555554401AAAAAAAAAAAAA401AA AAAAAAAAAAA3FDC536FE1A8C535C009555555555554401AAAAAAAAAAAAA401D5555555 555553FDEE2CC0A9E87C4C009555555555554401AAAAAAAAAAAAA40200000000000003 FE0D159E26AF37BC009555555555554401AAAAAAAAAAAAA40215555555555553FE2499 388277165C009555555555554401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE3DA12F684B DA0C009555555555554401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE582D82D82D82CC00 9555555555554401D555555555555C0240000000000003FDDCBA987654320C00955555 5555554401D555555555555C022AAAAAAAAAAAB3FDB9D6480F2B9D6C00955555555555 4401D555555555555C0215555555555563FD99FAB0BC1CD2EC009555555555554401D5 55555555555C0200000000000013FD7D27D27D27D28C009555555555554401D5555555 55555C01D5555555555573FD635DAD524C9C4C009555555555554401D555555555555C 01AAAAAAAAAAAAC3FD4C9C413B8B302C009555555555554401D555555555555C018000 0000000013FD38E38E38E38E3C009555555555554401D555555555555C015555555555 5563FD2833944A55B66C009555555555554401D555555555555C012AAAAAAAAAAAB3FD 1A8C536FE1A8BC009555555555554401D555555555555C0100000000000003FD0FEDCB A987653C009555555555554401D555555555555C00AAAAAAAAAAAAB3FD0857FCF746EB DC009555555555554401D555555555555C0055555555555563FD03CAE759203CAC0095 55555555554401D555555555555C0000000000000013FD02468ACF13579C0095555555 55554401D555555555555BFF55555555555583FD03CAE759203CAC0095555555555544 01D555555555555BFE555555555555B3FD0857FCF746EBDC009555555555554401D555 555555555BCC80000000000003FD0FEDCBA987653C009555555555554401D555555555 5553FE555555555554F3FD1A8C536FE1A8BC009555555555554401D5555555555553FF 55555555555523FD2833944A55B66C009555555555554401D5555555555553FFFFFFFF FFFFFFC3FD38E38E38E38E2C009555555555554401D555555555555400555555555555 33FD4C9C413B8B301C009555555555554401D555555555555400AAAAAAAAAAAA83FD63 5DAD524C9C3C009555555555554401D555555555555400FFFFFFFFFFFFD3FD7D27D27D 27D26C009555555555554401D5555555555554012AAAAAAAAAAA93FD99FAB0BC1CD2BC 009555555555554401D55555555555540155555555555543FDB9D6480F2B9D5C009555 555555554401D5555555555554017FFFFFFFFFFFF3FDDCBA98765431FC009555555555 554401D555555555555401AAAAAAAAAAAAA3FE0153D0F8CB486C009555555555554401 D555555555555401D5555555555553FE15CEB240795CEC009555555555554401D55555 555555540200000000000003FE2BCDF01234567C009555555555554401D55555555555 540215555555555553FE43518A6DFC351C009555555555554401D5555555555554022A AAAAAAAAAAA3FE5C598153D0F8BC009555555555554401D5555555555554023FFFFFFF FFFFF3FE76E5D4C3B2A18C0095555555555544020000000000000C0240000000000003 FE0F5C28F5C28F6C0095555555555544020000000000000C022AAAAAAAAAAAB3FDFBD4 01845C8A1C0095555555555544020000000000000C0215555555555563FDDBF86A314D BF9C0095555555555544020000000000000C0200000000000013FDBF258BF258BF3C00 95555555555544020000000000000C01D5555555555573FDA55B66C77D88FC00955555 55555544020000000000000C01AAAAAAAAAAAAC3FD8E99FAB0BC1CDC00955555555555 44020000000000000C0180000000000013FD7AE147AE147AEC00955555555555440200 00000000000C0155555555555563FD6A314DBF86A31C00955555555555440200000000 00000C012AAAAAAAAAAAB3FD5C8A0CE512956C0095555555555544020000000000000C 0100000000000003FD51EB851EB851EC0095555555555544020000000000000C00AAAA AAAAAAAAB3FD4A55B66C77D88C0095555555555544020000000000000C005555555555 5563FD45C8A0CE51295C0095555555555544020000000000000C0000000000000013FD 4444444444444C0095555555555544020000000000000BFF55555555555583FD45C8A0 CE51295C0095555555555544020000000000000BFE555555555555B3FD4A55B66C77D8 8C0095555555555544020000000000000BCC80000000000003FD51EB851EB851EC0095 5555555555440200000000000003FE555555555554F3FD5C8A0CE512956C0095555555 5555440200000000000003FF55555555555523FD6A314DBF86A31C0095555555555544 0200000000000003FFFFFFFFFFFFFFC3FD7AE147AE147ADC0095555555555544020000 00000000040055555555555533FD8E99FAB0BC1CCC0095555555555544020000000000 000400AAAAAAAAAAAA83FDA55B66C77D88EC0095555555555544020000000000000400 FFFFFFFFFFFFD3FDBF258BF258BF1C00955555555555440200000000000004012AAAAA AAAAAA93FDDBF86A314DBF6C0095555555555544020000000000000401555555555555 43FDFBD401845C8A0C00955555555555440200000000000004017FFFFFFFFFFFF3FE0F 5C28F5C28F5C0095555555555544020000000000000401AAAAAAAAAAAAA3FE2252ADB3 63BECC0095555555555544020000000000000401D5555555555553FE36CD8EFB11D34C 009555555555554402000000000000040200000000000003FE4CCCCCCCCCCCDC009555 555555554402000000000000040215555555555553FE6450672894AB6C009555555555 55440200000000000004022AAAAAAAAAAAA3FE7D585E0E696F1C009555555555554402 00000000000004023FFFFFFFFFFFF3FE97E4B17E4B17DC009555555555554402155555 5555555C0240000000000003FE32A1907F6E5D4C009555555555554402155555555555 5C022AAAAAAAAAAAB3FE212F684BDA12FC0095555555555544021555555555555C0215 555555555563FE11419CA252ADBC0095555555555544021555555555555C0200000000 000013FE02D82D82D82D8C0095555555555544021555555555555C01D5555555555573 FDEBE635DAD524CC0095555555555544021555555555555C01AAAAAAAAAAAAC3FDD524 C9C413B8AC0095555555555544021555555555555C0180000000000013FDC16C16C16C 16BC0095555555555544021555555555555C0155555555555563FDB0BC1CD2DE3EEC00 95555555555544021555555555555C012AAAAAAAAAAAB3FDA314DBF86A313C00955555 55555544021555555555555C0100000000000003FD987654320FEDBC00955555555555 44021555555555555C00AAAAAAAAAAAAB3FD90E0857FCF745C00955555555555440215 55555555555C0055555555555563FD8C536FE1A8C52C00955555555555440215555555 55555C0000000000000013FD8ACF13579BE01C0095555555555544021555555555555B FF55555555555583FD8C536FE1A8C52C0095555555555544021555555555555BFE5555 55555555B3FD90E0857FCF745C0095555555555544021555555555555BCC8000000000 0003FD987654320FEDBC00955555555555440215555555555553FE555555555554F3FD A314DBF86A313C00955555555555440215555555555553FF55555555555523FDB0BC1C D2DE3EEC00955555555555440215555555555553FFFFFFFFFFFFFFC3FDC16C16C16C16 AC009555555555554402155555555555540055555555555533FDD524C9C413B89C0095 555555555544021555555555555400AAAAAAAAAAAA83FDEBE635DAD524BC0095555555 555544021555555555555400FFFFFFFFFFFFD3FE02D82D82D82D7C0095555555555544 0215555555555554012AAAAAAAAAAA93FE11419CA252ADAC0095555555555544021555 55555555540155555555555543FE212F684BDA12EC0095555555555544021555555555 5554017FFFFFFFFFFFF3FE32A1907F6E5D4C0095555555555544021555555555555401 AAAAAAAAAAAAA3FE4598153D0F8CAC0095555555555544021555555555555401D55555 55555553FE5A12F684BDA12C0095555555555544021555555555555402000000000000 03FE70123456789ABC009555555555554402155555555555540215555555555553FE87 95CEB240795C00955555555555440215555555555554022AAAAAAAAAAAA3FEA09DC598 153CFC00955555555555440215555555555554023FFFFFFFFFFFF3FEBB2A1907F6E5CC 0095555555555544022AAAAAAAAAAAAC0240000000000003FE582D82D82D82CC009555 5555555544022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE46BB5AA499387C009555555555 5544022AAAAAAAAAAAAC0215555555555563FE36CD8EFB11D33C009555555555554402 2AAAAAAAAAAAAC0200000000000013FE28641FDB97530C0095555555555544022AAAAA AAAAAAAC01D5555555555573FE1B7F0D4629B7EC0095555555555544022AAAAAAAAAAA AC01AAAAAAAAAAAAC3FE101E573AC901DC0095555555555544022AAAAAAAAAAAAC0180 000000000013FE0641FDB97530EC0095555555555544022AAAAAAAAAAAAC0155555555 555563FDFBD401845C89EC0095555555555544022AAAAAAAAAAAAC012AAAAAAAAAAAB3 FDEE2CC0A9E87C3C0095555555555544022AAAAAAAAAAAAC0100000000000003FDE38E 38E38E38BC0095555555555544022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FDDBF86A314D BF5C0095555555555544022AAAAAAAAAAAAC0055555555555563FDD76B549327102C00 95555555555544022AAAAAAAAAAAAC0000000000000013FDD5E6F8091A2B1C00955555 55555544022AAAAAAAAAAAABFF55555555555583FDD76B549327102C00955555555555 44022AAAAAAAAAAAABFE555555555555B3FDDBF86A314DBF5C0095555555555544022A AAAAAAAAAAABCC80000000000003FDE38E38E38E38BC0095555555555544022AAAAAAA AAAAA3FE555555555554F3FDEE2CC0A9E87C3C0095555555555544022AAAAAAAAAAAA3 FF55555555555523FDFBD401845C89EC0095555555555544022AAAAAAAAAAAA3FFFFFF FFFFFFFFC3FE0641FDB97530DC0095555555555544022AAAAAAAAAAAA4005555555555 5533FE101E573AC901CC0095555555555544022AAAAAAAAAAAA400AAAAAAAAAAAA83FE 1B7F0D4629B7DC0095555555555544022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE28641F DB9752FC0095555555555544022AAAAAAAAAAAA4012AAAAAAAAAAA93FE36CD8EFB11D3 2C0095555555555544022AAAAAAAAAAAA40155555555555543FE46BB5AA499386C0095 555555555544022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE582D82D82D82CC0095555555 555544022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE6B240795CEB22C0095555555555544 022AAAAAAAAAAAA401D5555555555553FE7F9EE8DD7CC6AC0095555555555544022AAA AAAAAAAAA40200000000000003FE959E26AF37C03C0095555555555544022AAAAAAAAA AAA40215555555555553FEAD21C10AFF9EDC0095555555555544022AAAAAAAAAAAA402 2AAAAAAAAAAAA3FEC629B7F0D4627C0095555555555544022AAAAAAAAAAAA4023FFFFF FFFFFFF3FEE0B60B60B60B4C0095555555555544023FFFFFFFFFFFFC02400000000000 03FE7FFFFFFFFFFFEC0095555555555544023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE6E 8DD7CC6BB5AC0095555555555544023FFFFFFFFFFFFC0215555555555563FE5EA00C22 E4505C0095555555555544023FFFFFFFFFFFFC0200000000000013FE50369D0369D03C 0095555555555544023FFFFFFFFFFFFC01D5555555555573FE43518A6DFC351C009555 5555555544023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE37F0D4629B7F0C009555555555 5544023FFFFFFFFFFFFC0180000000000013FE2E147AE147AE0C009555555555554402 3FFFFFFFFFFFFC0155555555555563FE25BC7DEA00C21C0095555555555544023FFFFF FFFFFFFC012AAAAAAAAAAAB3FE1EE8DD7CC6BB4C0095555555555544023FFFFFFFFFFF FC0100000000000003FE1999999999998C0095555555555544023FFFFFFFFFFFFC00AA AAAAAAAAAAB3FE15CEB240795CEC0095555555555544023FFFFFFFFFFFFC0055555555 555563FE1388277166053C0095555555555544023FFFFFFFFFFFFC0000000000000013 FE12C5F92C5F92AC0095555555555544023FFFFFFFFFFFFBFF55555555555583FE1388 277166053C0095555555555544023FFFFFFFFFFFFBFE555555555555B3FE15CEB24079 5CDC0095555555555544023FFFFFFFFFFFFBCC80000000000003FE1999999999998C00 95555555555544023FFFFFFFFFFFF3FE555555555554F3FE1EE8DD7CC6BB4C00955555 55555544023FFFFFFFFFFFF3FF55555555555523FE25BC7DEA00C21C00955555555555 44023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE2E147AE147ADFC0095555555555544023F FFFFFFFFFFF40055555555555533FE37F0D4629B7EFC0095555555555544023FFFFFFF FFFFF400AAAAAAAAAAAA83FE43518A6DFC34FC0095555555555544023FFFFFFFFFFFF4 00FFFFFFFFFFFFD3FE50369D0369D02C0095555555555544023FFFFFFFFFFFF4012AAA AAAAAAAA93FE5EA00C22E4504C0095555555555544023FFFFFFFFFFFF4015555555555 5543FE6E8DD7CC6BB59C0095555555555544023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE 7FFFFFFFFFFFEC0095555555555544023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE92F684 BDA12F5C0095555555555544023FFFFFFFFFFFF401D5555555555553FEA77166054F43 CC0095555555555544023FFFFFFFFFFFF40200000000000003FEBD70A3D70A3D6C0095 555555555544023FFFFFFFFFFFF40215555555555553FED4F43E32D21BFC0095555555 555544023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEEDFC3518A6DFAC0095555555555544 023FFFFFFFFFFFF4023FFFFFFFFFFFF3FF0444444444443C007FFFFFFFFFFFFC024000 000000000C0240000000000003FD5555555555555C007FFFFFFFFFFFFC024000000000 000C022AAAAAAAAAAAB3FD327104EE2CC0BC007FFFFFFFFFFFFC024000000000000C02 15555555555563FD12956D9B1DF63C007FFFFFFFFFFFFC024000000000000C02000000 00000013FCEB851EB851EBAC007FFFFFFFFFFFFC024000000000000C01D55555555555 73FCB7F0D4629B7F2C007FFFFFFFFFFFFC024000000000000C01AAAAAAAAAAAAC3FC8A 6DFC3518A6EC007FFFFFFFFFFFFC024000000000000C0180000000000013FC62FC962F C9630C007FFFFFFFFFFFFC024000000000000C0155555555555563FC419CA252ADB36C 007FFFFFFFFFFFFC024000000000000C012AAAAAAAAAAAB3FC264E209DC5981C007FFF FFFFFFFFFC024000000000000C0100000000000003FC1111111111110C007FFFFFFFFF FFFC024000000000000C00AAAAAAAAAAAAB3FC01E573AC901E4C007FFFFFFFFFFFFC02 4000000000000C0055555555555563FBF19690E0857FBC007FFFFFFFFFFFFC02400000 0000000C0000000000000013FBEB851EB851EB6C007FFFFFFFFFFFFC02400000000000 0BFF55555555555583FBF19690E0857FBC007FFFFFFFFFFFFC024000000000000BFE55 5555555555B3FC01E573AC901E4C007FFFFFFFFFFFFC024000000000000BCC80000000 000003FC1111111111110C007FFFFFFFFFFFFC0240000000000003FE555555555554F3 FC264E209DC5980C007FFFFFFFFFFFFC0240000000000003FF55555555555523FC419C A252ADB35C007FFFFFFFFFFFFC0240000000000003FFFFFFFFFFFFFFC3FC62FC962FC9 62EC007FFFFFFFFFFFFC02400000000000040055555555555533FC8A6DFC3518A6CC00 7FFFFFFFFFFFFC024000000000000400AAAAAAAAAAAA83FCB7F0D4629B7EEC007FFFFF FFFFFFFC024000000000000400FFFFFFFFFFFFD3FCEB851EB851EB5C007FFFFFFFFFFF FC0240000000000004012AAAAAAAAAAA93FD12956D9B1DF61C007FFFFFFFFFFFFC0240 0000000000040155555555555543FD327104EE2CC09C007FFFFFFFFFFFFC0240000000 000004017FFFFFFFFFFFF3FD5555555555554C007FFFFFFFFFFFFC0240000000000004 01AAAAAAAAAAAAA3FD7B425ED097B41C007FFFFFFFFFFFFC024000000000000401D555 5555555553FDA438215FF3DD1C007FFFFFFFFFFFFC0240000000000004020000000000 0003FDD0369D0369D04C007FFFFFFFFFFFFC02400000000000040215555555555553FD FF3DD1BAF98D6C007FFFFFFFFFFFFC0240000000000004022AAAAAAAAAAAA3FE18A6DF C3518A6C007FFFFFFFFFFFFC0240000000000004023FFFFFFFFFFFF3FE333333333333 2C007FFFFFFFFFFFFC022AAAAAAAAAAABC0240000000000003FD20FEDCBA98766C007F FFFFFFFFFFFC022AAAAAAAAAAABC022AAAAAAAAAAAB3FCFC3518A6DFC39C007FFFFFFF FFFFFC022AAAAAAAAAAABC0215555555555563FCBC7DEA00C22E8C007FFFFFFFFFFFFC 022AAAAAAAAAAABC0200000000000013FC82D82D82D82DDC007FFFFFFFFFFFFC022AAA AAAAAAAABC01D5555555555573FC4F43E32D21C14C007FFFFFFFFFFFFC022AAAAAAAAA AABC01AAAAAAAAAAAAC3FC21C10AFF9EE90C007FFFFFFFFFFFFC022AAAAAAAAAAABC01 80000000000013FBF49F49F49F4A5C007FFFFFFFFFFFFC022AAAAAAAAAAABC01555555 55555563FBB1DF623A67EB0C007FFFFFFFFFFFFC022AAAAAAAAAAABC012AAAAAAAAAAA B3FB7B425ED097B46C007FFFFFFFFFFFFC022AAAAAAAAAAABC0100000000000003FB50 C83FB72EA65C007FFFFFFFFFFFFC022AAAAAAAAAAABC00AAAAAAAAAAAAB3FB327104EE 2CC0EC007FFFFFFFFFFFFC022AAAAAAAAAAABC0055555555555563FB203CAE7592040C 007FFFFFFFFFFFFC022AAAAAAAAAAABC0000000000000013FB1A2B3C4D5E6FBC007FFF FFFFFFFFFC022AAAAAAAAAAABBFF55555555555583FB203CAE7592040C007FFFFFFFFF FFFC022AAAAAAAAAAABBFE555555555555B3FB327104EE2CC0DC007FFFFFFFFFFFFC02 2AAAAAAAAAAABBCC80000000000003FB50C83FB72EA64C007FFFFFFFFFFFFC022AAAAA AAAAAAB3FE555555555554F3FB7B425ED097B44C007FFFFFFFFFFFFC022AAAAAAAAAAA B3FF55555555555523FBB1DF623A67EAEC007FFFFFFFFFFFFC022AAAAAAAAAAAB3FFFF FFFFFFFFFFC3FBF49F49F49F4A1C007FFFFFFFFFFFFC022AAAAAAAAAAAB40055555555 555533FC21C10AFF9EE8FC007FFFFFFFFFFFFC022AAAAAAAAAAAB400AAAAAAAAAAAA83 FC4F43E32D21C11C007FFFFFFFFFFFFC022AAAAAAAAAAAB400FFFFFFFFFFFFD3FC82D8 2D82D82D8C007FFFFFFFFFFFFC022AAAAAAAAAAAB4012AAAAAAAAAAA93FCBC7DEA00C2 2E3C007FFFFFFFFFFFFC022AAAAAAAAAAAB40155555555555543FCFC3518A6DFC35C00 7FFFFFFFFFFFFC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FD20FEDCBA98765C007FFFFF FFFFFFFC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FD46EBE635DAD53C007FFFFFFFFFFF FC022AAAAAAAAAAAB401D5555555555553FD6FE1A8C536FE2C007FFFFFFFFFFFFC022A AAAAAAAAAAB40200000000000003FD9BE02468ACF14C007FFFFFFFFFFFFC022AAAAAAA AAAAB40215555555555553FDCAE759203CAE8C007FFFFFFFFFFFFC022AAAAAAAAAAAB4 022AAAAAAAAAAAA3FDFCF746EBE635DC007FFFFFFFFFFFFC022AAAAAAAAAAAB4023FFF FFFFFFFFF3FE1907F6E5D4C3BC007FFFFFFFFFFFFC021555555555556C024000000000 0003FCE26AF37C048D2C007FFFFFFFFFFFFC021555555555556C022AAAAAAAAAAAB3FC 9CA252ADB363FC007FFFFFFFFFFFFC021555555555556C0215555555555563FC5CEB24 0795CEDC007FFFFFFFFFFFFC021555555555556C0200000000000013FC23456789ABCE 2C007FFFFFFFFFFFFC021555555555556C01D5555555555573FBDF623A67EAC34C007F FFFFFFFFFFFC021555555555556C01AAAAAAAAAAAAC3FB845C8A0CE512CC007FFFFFFF FFFFFC021555555555556C0180000000000013FB3579BE02468B1C007FFFFFFFFFFFFC 021555555555556C0155555555555563FAE573AC901E577C007FFFFFFFFFFFFC021555 555555556C012AAAAAAAAAAAB3FA7839A5BC7DEA4C007FFFFFFFFFFFFC021555555555 556C0100000000000003FA23456789ABCE1C007FFFFFFFFFFFFC021555555555556C00 AAAAAAAAAAAAB3F9CD2DE3EF50066C007FFFFFFFFFFFFC021555555555556C00555555 55555563F9845C8A0CE512DC007FFFFFFFFFFFFC021555555555556C00000000000000 13F96C16C16C16C1BC007FFFFFFFFFFFFC021555555555556BFF55555555555583F984 5C8A0CE512CC007FFFFFFFFFFFFC021555555555556BFE555555555555B3F9CD2DE3EF 50063C007FFFFFFFFFFFFC021555555555556BCC80000000000003FA23456789ABCE0C 007FFFFFFFFFFFFC0215555555555563FE555555555554F3FA7839A5BC7DEA0C007FFF FFFFFFFFFC0215555555555563FF55555555555523FAE573AC901E573C007FFFFFFFFF FFFC0215555555555563FFFFFFFFFFFFFFC3FB3579BE02468ADC007FFFFFFFFFFFFC02 155555555555640055555555555533FB845C8A0CE5128C007FFFFFFFFFFFFC02155555 5555556400AAAAAAAAAAAA83FBDF623A67EAC2EC007FFFFFFFFFFFFC02155555555555 6400FFFFFFFFFFFFD3FC23456789ABCDEC007FFFFFFFFFFFFC0215555555555564012A AAAAAAAAAA93FC5CEB240795CE9C007FFFFFFFFFFFFC02155555555555640155555555 555543FC9CA252ADB363BC007FFFFFFFFFFFFC0215555555555564017FFFFFFFFFFFF3 FCE26AF37C048D0C007FFFFFFFFFFFFC021555555555556401AAAAAAAAAAAAA3FD1722 833944A56C007FFFFFFFFFFFFC021555555555556401D5555555555553FD401845C8A0 CE5C007FFFFFFFFFFFFC02155555555555640200000000000003FD6C16C16C16C18C00 7FFFFFFFFFFFFC02155555555555640215555555555553FD9B1DF623A67EAC007FFFFF FFFFFFFC0215555555555564022AAAAAAAAAAAA3FDCD2DE3EF50060C007FFFFFFFFFFF FC0215555555555564023FFFFFFFFFFFF3FE0123456789ABCC007FFFFFFFFFFFFC0200 00000000001C0240000000000003FC8BF258BF258C1C007FFFFFFFFFFFFC0200000000 00001C022AAAAAAAAAAAB3FC4629B7F0D462DC007FFFFFFFFFFFFC020000000000001C 0215555555555563FC0672894AB6CDCC007FFFFFFFFFFFFC020000000000001C020000 0000000013FB99999999999A3C007FFFFFFFFFFFFC020000000000001C01D555555555 5573FB327104EE2CC12C007FFFFFFFFFFFFC020000000000001C01AAAAAAAAAAAAC3FA AED6A9264E215C007FFFFFFFFFFFFC020000000000001C0180000000000013FA111111 111111DC007FFFFFFFFFFFFC020000000000001C0155555555555563F91722833944A6 4C007FFFFFFFFFFFFC020000000000001C012AAAAAAAAAAAB3F6E573AC901E601C007F FFFFFFFFFFFC020000000000001C010000000000000BF7B4E81B4E81B18C007FFFFFFF FFFFFC020000000000001C00AAAAAAAAAAAABBF8CD2DE3EF50047C007FFFFFFFFFFFFC 020000000000001C005555555555556BF92F684BDA12F5BC007FFFFFFFFFFFFC020000 000000001C000000000000001BF947AE147AE146FC007FFFFFFFFFFFFC020000000000 001BFF5555555555558BF92F684BDA12F5DC007FFFFFFFFFFFFC020000000000001BFE 555555555555BBF8CD2DE3EF5004BC007FFFFFFFFFFFFC020000000000001BCC800000 0000000BF7B4E81B4E81B26C007FFFFFFFFFFFFC0200000000000013FE555555555554 F3F6E573AC901E5BEC007FFFFFFFFFFFFC0200000000000013FF55555555555523F917 22833944A5EC007FFFFFFFFFFFFC0200000000000013FFFFFFFFFFFFFFC3FA11111111 11115C007FFFFFFFFFFFFC02000000000000140055555555555533FAAED6A9264E20CC 007FFFFFFFFFFFFC020000000000001400AAAAAAAAAAAA83FB327104EE2CC0BC007FFF FFFFFFFFFC020000000000001400FFFFFFFFFFFFD3FB9999999999999C007FFFFFFFFF FFFC0200000000000014012AAAAAAAAAAA93FC0672894AB6CD8C007FFFFFFFFFFFFC02 000000000000140155555555555543FC4629B7F0D4629C007FFFFFFFFFFFFC02000000 00000014017FFFFFFFFFFFF3FC8BF258BF258BFC007FFFFFFFFFFFFC02000000000000 1401AAAAAAAAAAAAA3FCD7CC6BB5AA49AC007FFFFFFFFFFFFC020000000000001401D5 555555555553FD14DBF86A314DDC007FFFFFFFFFFFFC02000000000000140200000000 000003FD40DA740DA740FC007FFFFFFFFFFFFC02000000000000140215555555555553 FD6FE1A8C536FE2C007FFFFFFFFFFFFC0200000000000014022AAAAAAAAAAAA3FDA1F1 9690E0857C007FFFFFFFFFFFFC0200000000000014023FFFFFFFFFFFF3FDD70A3D70A3 D70C007FFFFFFFFFFFFC01D555555555557C0240000000000003FC3E93E93E93E95C00 7FFFFFFFFFFFFC01D555555555557C022AAAAAAAAAAAB3FBF19690E085804C007FFFFF FFFFFFFC01D555555555557C0215555555555563FB722833944A562C007FFFFFFFFFFF FC01D555555555557C0200000000000013FAFDB97530ECA96C007FFFFFFFFFFFFC01D5 55555555557C01D5555555555573FA2F684BDA12F75C007FFFFFFFFFFFFC01D5555555 55557C01AAAAAAAAAAAAC3F8E573AC901E5A2C007FFFFFFFFFFFFC01D555555555557C 018000000000001BF723456789ABC8BC007FFFFFFFFFFFFC01D555555555557C015555 555555556BF953D0F8CB486F4C007FFFFFFFFFFFFC01D555555555557C012AAAAAAAAA AABBFA1722833944A4EC007FFFFFFFFFFFFC01D555555555557C010000000000000BFA 6C16C16C16C11C007FFFFFFFFFFFFC01D555555555557C00AAAAAAAAAAAABBFAA8C536 FE1A8BFC007FFFFFFFFFFFFC01D555555555557C005555555555556BFACD2DE3EF5005 AC007FFFFFFFFFFFFC01D555555555557C000000000000001BFAD950C83FB72E5C007F FFFFFFFFFFFC01D555555555557BFF5555555555558BFACD2DE3EF5005CC007FFFFFFF FFFFFC01D555555555557BFE555555555555BBFAA8C536FE1A8C0C007FFFFFFFFFFFFC 01D555555555557BCC8000000000000BFA6C16C16C16C12C007FFFFFFFFFFFFC01D555 5555555573FE555555555554FBFA1722833944A52C007FFFFFFFFFFFFC01D555555555 5573FF5555555555552BF953D0F8CB486FDC007FFFFFFFFFFFFC01D5555555555573FF FFFFFFFFFFFFCBF723456789ABCC8C007FFFFFFFFFFFFC01D555555555557400555555 55555533F8E573AC901E57AC007FFFFFFFFFFFFC01D555555555557400AAAAAAAAAAAA 83FA2F684BDA12F69C007FFFFFFFFFFFFC01D555555555557400FFFFFFFFFFFFD3FAFD B97530ECA85C007FFFFFFFFFFFFC01D5555555555574012AAAAAAAAAAA93FB72283394 4A55AC007FFFFFFFFFFFFC01D55555555555740155555555555543FBF19690E0857FDC 007FFFFFFFFFFFFC01D5555555555574017FFFFFFFFFFFF3FC3E93E93E93E94C007FFF FFFFFFFFFC01D555555555557401AAAAAAAAAAAAA3FC8A6DFC3518A6FC007FFFFFFFFF FFFC01D555555555557401D5555555555553FCDC598153D0F8EC007FFFFFFFFFFFFC01 D55555555555740200000000000003FD1A2B3C4D5E6F9C007FFFFFFFFFFFFC01D55555 555555740215555555555553FD49327104EE2CCC007FFFFFFFFFFFFC01D55555555555 74022AAAAAAAAAAAA3FD7B425ED097B42C007FFFFFFFFFFFFC01D5555555555574023F FFFFFFFFFFF3FDB05B05B05B05AC007FFFFFFFFFFFFC01AAAAAAAAAAAACC0240000000 000003FBF49F49F49F49FC007FFFFFFFFFFFFC01AAAAAAAAAAAACC022AAAAAAAAAAAB3 FB690E0857FCF76C007FFFFFFFFFFFFC01AAAAAAAAAAAACC0215555555555563FAD33F 5617839A9C007FFFFFFFFFFFFC01AAAAAAAAAAAACC0200000000000013F9D950C83FB7 2FBC007FFFFFFFFFFFFC01AAAAAAAAAAAACC01D5555555555573F6E573AC901E5C9C00 7FFFFFFFFFFFFC01AAAAAAAAAAAACC01AAAAAAAAAAAACBF92F684BDA12F67C007FFFFF FFFFFFFC01AAAAAAAAAAAACC018000000000001BFA3579BE02468ABC007FFFFFFFFFFF FC01AAAAAAAAAAAACC015555555555556BFABAF98D76B5496C007FFFFFFFFFFFFC01AA AAAAAAAAAACC012AAAAAAAAAAABBFB1419CA252ADB5C007FFFFFFFFFFFFC01AAAAAAAA AAAACC010000000000000BFB3E93E93E93E96C007FFFFFFFFFFFFC01AAAAAAAAAAAACC 00AAAAAAAAAAAABBFB5CEB240795CEDC007FFFFFFFFFFFFC01AAAAAAAAAAAACC005555 555555556BFB6F1F7A80308BBC007FFFFFFFFFFFFC01AAAAAAAAAAAACC000000000000 001BFB7530ECA864200C007FFFFFFFFFFFFC01AAAAAAAAAAAACBFF5555555555558BFB 6F1F7A80308BBC007FFFFFFFFFFFFC01AAAAAAAAAAAACBFE555555555555BBFB5CEB24 0795CEEC007FFFFFFFFFFFFC01AAAAAAAAAAAACBCC8000000000000BFB3E93E93E93E9 7C007FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE555555555554FBFB1419CA252ADB7C007F FFFFFFFFFFFC01AAAAAAAAAAAAC3FF5555555555552BFABAF98D76B549AC007FFFFFFF FFFFFC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFA3579BE02468B4C007FFFFFFFFFFFFC 01AAAAAAAAAAAAC4005555555555553BF92F684BDA12F7AC007FFFFFFFFFFFFC01AAAA AAAAAAAAC400AAAAAAAAAAAA83F6E573AC901E4E1C007FFFFFFFFFFFFC01AAAAAAAAAA AAC400FFFFFFFFFFFFD3F9D950C83FB72D5C007FFFFFFFFFFFFC01AAAAAAAAAAAAC401 2AAAAAAAAAAA93FAD33F56178399AC007FFFFFFFFFFFFC01AAAAAAAAAAAAC401555555 55555543FB690E0857FCF6FC007FFFFFFFFFFFFC01AAAAAAAAAAAAC4017FFFFFFFFFFF F3FBF49F49F49F49AC007FFFFFFFFFFFFC01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FC46 29B7F0D4628C007FFFFFFFFFFFFC01AAAAAAAAAAAAC401D5555555555553FC98153D0F 8CB47C007FFFFFFFFFFFFC01AAAAAAAAAAAAC40200000000000003FCF0123456789ACC 007FFFFFFFFFFFFC01AAAAAAAAAAAAC40215555555555553FD27104EE2CC0A9C007FFF FFFFFFFFFC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD59203CAE7591EC007FFFFFFFFF FFFC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD8E38E38E38E37C007FFFFFFFFFFFFC01 8000000000001C0240000000000003FB7E4B17E4B17E7C007FFFFFFFFFFFFC01800000 0000001C022AAAAAAAAAAAB3FAE573AC901E57CC007FFFFFFFFFFFFC01800000000000 1C0215555555555563F9CD2DE3EF50072C007FFFFFFFFFFFFC018000000000001C0200 000000000013C9B4F0000000000C007FFFFFFFFFFFFC018000000000001C01D5555555 55557BF99CA252ADB3627C007FFFFFFFFFFFFC018000000000001C01AAAAAAAAAAAACB FA845C8A0CE5123C007FFFFFFFFFFFFC018000000000001C018000000000001BFB1111 11111110EC007FFFFFFFFFFFFC018000000000001C015555555555556BFB53D0F8CB48 703C007FFFFFFFFFFFFC018000000000001C012AAAAAAAAAAABBFB8A6DFC3518A6DC00 7FFFFFFFFFFFFC018000000000001C010000000000000BFBB4E81B4E81B4EC007FFFFF FFFFFFFC018000000000001C00AAAAAAAAAAAABBFBD33F5617839A5C007FFFFFFFFFFF FC018000000000001C005555555555556BFBE573AC901E573C007FFFFFFFFFFFFC0180 00000000001C000000000000001BFBEB851EB851EB8C007FFFFFFFFFFFFC0180000000 00001BFF5555555555558BFBE573AC901E573C007FFFFFFFFFFFFC018000000000001B FE555555555555BBFBD33F5617839A6C007FFFFFFFFFFFFC018000000000001BCC8000 000000000BFBB4E81B4E81B4FC007FFFFFFFFFFFFC0180000000000013FE5555555555 54FBFB8A6DFC3518A6FC007FFFFFFFFFFFFC0180000000000013FF5555555555552BFB 53D0F8CB48705C007FFFFFFFFFFFFC0180000000000013FFFFFFFFFFFFFFCBFB111111 1111112C007FFFFFFFFFFFFC0180000000000014005555555555553BFA845C8A0CE512 CC007FFFFFFFFFFFFC018000000000001400AAAAAAAAAAAA8BF99CA252ADB3644C007F FFFFFFFFFFFC018000000000001400FFFFFFFFFFFFDBC887B0000000000C007FFFFFFF FFFFFC0180000000000014012AAAAAAAAAAA93F9CD2DE3EF50053C007FFFFFFFFFFFFC 01800000000000140155555555555543FAE573AC901E56EC007FFFFFFFFFFFFC018000 0000000014017FFFFFFFFFFFF3FB7E4B17E4B17E2C007FFFFFFFFFFFFC018000000000 001401AAAAAAAAAAAAA3FC0AFF9EE8DD7CCC007FFFFFFFFFFFFC018000000000001401 D5555555555553FC5CEB240795CEBC007FFFFFFFFFFFFC018000000000001402000000 00000003FCB4E81B4E81B50C007FFFFFFFFFFFFC018000000000001402155555555555 53FD097B425ED097BC007FFFFFFFFFFFFC0180000000000014022AAAAAAAAAAAA3FD3B 8B302A7A1F0C007FFFFFFFFFFFFC0180000000000014023FFFFFFFFFFFF3FD70A3D70A 3D709C007FFFFFFFFFFFFC015555555555556C0240000000000003FB1A2B3C4D5E6F7C 007FFFFFFFFFFFFC015555555555556C022AAAAAAAAAAAB3FA1D33F561783A0C007FFF FFFFFFFFFC015555555555556C0215555555555563F6E573AC901E5D0C007FFFFFFFFF FFFC015555555555556C020000000000001BF9907F6E5D4C39DC007FFFFFFFFFFFFC01 5555555555556C01D555555555557BFA9690E0857FCEFC007FFFFFFFFFFFFC01555555 5555556C01AAAAAAAAAAAACBFB264E209DC5980C007FFFFFFFFFFFFC01555555555555 6C018000000000001BFB7530ECA8641FCC007FFFFFFFFFFFFC015555555555556C0155 55555555556BFBB7F0D4629B7F1C007FFFFFFFFFFFFC015555555555556C012AAAAAAA AAAABBFBEE8DD7CC6BB5BC007FFFFFFFFFFFFC015555555555556C010000000000000B FC0C83FB72EA61EC007FFFFFFFFFFFFC015555555555556C00AAAAAAAAAAAABBFC1BAF 98D76B54AC007FFFFFFFFFFFFC015555555555556C005555555555556BFC24C9C413B8 B31C007FFFFFFFFFFFFC015555555555556C000000000000001BFC27D27D27D27D3C00 7FFFFFFFFFFFFC015555555555556BFF5555555555558BFC24C9C413B8B30C007FFFFF FFFFFFFC015555555555556BFE555555555555BBFC1BAF98D76B54AC007FFFFFFFFFFF FC015555555555556BCC8000000000000BFC0C83FB72EA61EC007FFFFFFFFFFFFC0155 555555555563FE555555555554FBFBEE8DD7CC6BB5DC007FFFFFFFFFFFFC0155555555 555563FF5555555555552BFBB7F0D4629B7F3C007FFFFFFFFFFFFC0155555555555563 FFFFFFFFFFFFFFCBFB7530ECA864200C007FFFFFFFFFFFFC0155555555555564005555 555555553BFB264E209DC5984C007FFFFFFFFFFFFC015555555555556400AAAAAAAAAA AA8BFA9690E0857FCFFC007FFFFFFFFFFFFC015555555555556400FFFFFFFFFFFFDBF9 907F6E5D4C3C4C007FFFFFFFFFFFFC0155555555555564012AAAAAAAAAAA93F6E573AC 901E4D8C007FFFFFFFFFFFFC01555555555555640155555555555543FA1D33F5617839 2C007FFFFFFFFFFFFC0155555555555564017FFFFFFFFFFFF3FB1A2B3C4D5E6F4C007F FFFFFFFFFFFC015555555555556401AAAAAAAAAAAAA3FBB1DF623A67EAAC007FFFFFFF FFFFFC015555555555556401D5555555555553FC2ADB363BEC474C007FFFFFFFFFFFFC 01555555555555640200000000000003FC82D82D82D82D8C007FFFFFFFFFFFFC015555 55555555640215555555555553FCE0E696F1F7A7FC007FFFFFFFFFFFFC015555555555 5564022AAAAAAAAAAAA3FD22833944A55B5C007FFFFFFFFFFFFC015555555555556402 3FFFFFFFFFFFF3FD579BE02468ACDC007FFFFFFFFFFFFC012AAAAAAAAAAABC02400000 00000003FA907F6E5D4C3AEC007FFFFFFFFFFFFC012AAAAAAAAAAABC022AAAAAAAAAAA B3F8E573AC901E581C007FFFFFFFFFFFFC012AAAAAAAAAAABC021555555555556BF90A FF9EE8DD7C6C007FFFFFFFFFFFFC012AAAAAAAAAAABC020000000000001BFA6C16C16C 16C0EC007FFFFFFFFFFFFC012AAAAAAAAAAABC01D555555555557BFB1D33F56178398C 007FFFFFFFFFFFFC012AAAAAAAAAAABC01AAAAAAAAAAAACBFB7839A5BC7DEA0C007FFF FFFFFFFFFC012AAAAAAAAAAABC018000000000001BFBC71C71C71C71CC007FFFFFFFFF FFFC012AAAAAAAAAAABC015555555555556BFC04EE2CC0A9E88C007FFFFFFFFFFFFC01 2AAAAAAAAAAABC012AAAAAAAAAAABBFC203CAE759203DC007FFFFFFFFFFFFC012AAAAA AAAAAABC010000000000000BFC3579BE02468AEC007FFFFFFFFFFFFC012AAAAAAAAAAA BC00AAAAAAAAAAAABBFC44A55B66C77DAC007FFFFFFFFFFFFC012AAAAAAAAAAABC0055 55555555556BFC4DBF86A314DC1C007FFFFFFFFFFFFC012AAAAAAAAAAABC0000000000 00001BFC50C83FB72EA63C007FFFFFFFFFFFFC012AAAAAAAAAAABBFF5555555555558B FC4DBF86A314DC0C007FFFFFFFFFFFFC012AAAAAAAAAAABBFE555555555555BBFC44A5 5B66C77DAC007FFFFFFFFFFFFC012AAAAAAAAAAABBCC8000000000000BFC3579BE0246 8AEC007FFFFFFFFFFFFC012AAAAAAAAAAAB3FE555555555554FBFC203CAE759203EC00 7FFFFFFFFFFFFC012AAAAAAAAAAAB3FF5555555555552BFC04EE2CC0A9E89C007FFFFF FFFFFFFC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFBC71C71C71C720C007FFFFFFFFFFF FC012AAAAAAAAAAAB4005555555555553BFB7839A5BC7DEA4C007FFFFFFFFFFFFC012A AAAAAAAAAAB400AAAAAAAAAAAA8BFB1D33F5617839FC007FFFFFFFFFFFFC012AAAAAAA AAAAB400FFFFFFFFFFFFDBFA6C16C16C16C22C007FFFFFFFFFFFFC012AAAAAAAAAAAB4 012AAAAAAAAAAA9BF90AFF9EE8DD7E5C007FFFFFFFFFFFFC012AAAAAAAAAAAB4015555 5555555543F8E573AC901E547C007FFFFFFFFFFFFC012AAAAAAAAAAAB4017FFFFFFFFF FFF3FA907F6E5D4C3A7C007FFFFFFFFFFFFC012AAAAAAAAAAAB401AAAAAAAAAAAAA3FB 5FF3DD1BAF98AC007FFFFFFFFFFFFC012AAAAAAAAAAAB401D5555555555553FC01E573 AC901E4C007FFFFFFFFFFFFC012AAAAAAAAAAAB40200000000000003FC59E26AF37C04 8C007FFFFFFFFFFFFC012AAAAAAAAAAAB40215555555555553FCB7F0D4629B7EFC007F FFFFFFFFFFFC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FD0E0857FCF746DC007FFFFFFF FFFFFC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FD4320FEDCBA985C007FFFFFFFFFFFFC 010000000000000C0240000000000003FA111111111110EC007FFFFFFFFFFFFC010000 000000000C022AAAAAAAAAAABBF4845C8A0CE4FF1C007FFFFFFFFFFFFC010000000000 000C021555555555556BFA04EE2CC0A9E83C007FFFFFFFFFFFFC010000000000000C02 0000000000001BFAEB851EB851EAEC007FFFFFFFFFFFFC010000000000000C01D55555 5555557BFB5CEB240795CE8C007FFFFFFFFFFFFC010000000000000C01AAAAAAAAAAAA CBFBB7F0D4629B7F0C007FFFFFFFFFFFFC010000000000000C018000000000001BFC03 69D0369D036C007FFFFFFFFFFFFC010000000000000C015555555555556BFC24C9C413 B8B30C007FFFFFFFFFFFFC010000000000000C012AAAAAAAAAAABBFC401845C8A0CE5C 007FFFFFFFFFFFFC010000000000000C010000000000000BFC5555555555556C007FFF FFFFFFFFFC010000000000000C00AAAAAAAAAAAABBFC6480F2B9D6482C007FFFFFFFFF FFFC010000000000000C005555555555556BFC6D9B1DF623A69C007FFFFFFFFFFFFC01 0000000000000C000000000000001BFC70A3D70A3D70BC007FFFFFFFFFFFFC01000000 0000000BFF5555555555558BFC6D9B1DF623A68C007FFFFFFFFFFFFC01000000000000 0BFE555555555555BBFC6480F2B9D6482C007FFFFFFFFFFFFC010000000000000BCC80 00000000000BFC5555555555556C007FFFFFFFFFFFFC0100000000000003FE55555555 5554FBFC401845C8A0CE6C007FFFFFFFFFFFFC0100000000000003FF5555555555552B FC24C9C413B8B31C007FFFFFFFFFFFFC0100000000000003FFFFFFFFFFFFFFCBFC0369 D0369D038C007FFFFFFFFFFFFC0100000000000004005555555555553BFBB7F0D4629B 7F5C007FFFFFFFFFFFFC010000000000000400AAAAAAAAAAAA8BFB5CEB240795CEFC00 7FFFFFFFFFFFFC010000000000000400FFFFFFFFFFFFDBFAEB851EB851EC2C007FFFFF FFFFFFFC0100000000000004012AAAAAAAAAAA9BFA04EE2CC0A9E92C007FFFFFFFFFFF FC0100000000000004015555555555554BF4845C8A0CE5395C007FFFFFFFFFFFFC0100 000000000004017FFFFFFFFFFFF3FA1111111111107C007FFFFFFFFFFFFC0100000000 00000401AAAAAAAAAAAAA3FB203CAE759203AC007FFFFFFFFFFFFC0100000000000004 01D5555555555553FBC413B8B302A78C007FFFFFFFFFFFFC0100000000000004020000 0000000003FC3A06D3A06D3A0C007FFFFFFFFFFFFC0100000000000004021555555555 5553FC98153D0F8CB47C007FFFFFFFFFFFFC0100000000000004022AAAAAAAAAAAA3FC FC3518A6DFC32C007FFFFFFFFFFFFC0100000000000004023FFFFFFFFFFFF3FD333333 3333331C007FFFFFFFFFFFFC00AAAAAAAAAAAABC0240000000000003F96C16C16C16C0 CC007FFFFFFFFFFFFC00AAAAAAAAAAAABC022AAAAAAAAAAABBF8845C8A0CE511FC007F FFFFFFFFFFFC00AAAAAAAAAAAABC021555555555556BFA5FF3DD1BAF993C007FFFFFFF FFFFFC00AAAAAAAAAAAABC020000000000001BFB23456789ABCDFC007FFFFFFFFFFFFC 00AAAAAAAAAAAABC01D555555555557BFB8A6DFC3518A70C007FFFFFFFFFFFFC00AAAA AAAAAAAABC01AAAAAAAAAAAACBFBE573AC901E578C007FFFFFFFFFFFFC00AAAAAAAAAA AABC018000000000001BFC1A2B3C4D5E6FAC007FFFFFFFFFFFFC00AAAAAAAAAAAABC01 5555555555556BFC3B8B302A7A1F3C007FFFFFFFFFFFFC00AAAAAAAAAAAABC012AAAAA AAAAAABBFC56D9B1DF623A8C007FFFFFFFFFFFFC00AAAAAAAAAAAABC01000000000000 0BFC6C16C16C16C19C007FFFFFFFFFFFFC00AAAAAAAAAAAABC00AAAAAAAAAAAABBFC7B 425ED097B45C007FFFFFFFFFFFFC00AAAAAAAAAAAABC005555555555556BFC845C8A0C E512CC007FFFFFFFFFFFFC00AAAAAAAAAAAABC000000000000001BFC87654320FEDCEC 007FFFFFFFFFFFFC00AAAAAAAAAAAABBFF5555555555558BFC845C8A0CE512BC007FFF FFFFFFFFFC00AAAAAAAAAAAABBFE555555555555BBFC7B425ED097B45C007FFFFFFFFF FFFC00AAAAAAAAAAAABBCC8000000000000BFC6C16C16C16C19C007FFFFFFFFFFFFC00 AAAAAAAAAAAAB3FE555555555554FBFC56D9B1DF623A9C007FFFFFFFFFFFFC00AAAAAA AAAAAAB3FF5555555555552BFC3B8B302A7A1F4C007FFFFFFFFFFFFC00AAAAAAAAAAAA B3FFFFFFFFFFFFFFCBFC1A2B3C4D5E6FBC007FFFFFFFFFFFFC00AAAAAAAAAAAAB40055 55555555553BFBE573AC901E57BC007FFFFFFFFFFFFC00AAAAAAAAAAAAB400AAAAAAAA AAAA8BFB8A6DFC3518A75C007FFFFFFFFFFFFC00AAAAAAAAAAAAB400FFFFFFFFFFFFDB FB23456789ABCE7C007FFFFFFFFFFFFC00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFA5FF3 DD1BAF99EC007FFFFFFFFFFFFC00AAAAAAAAAAAAB4015555555555554BF8845C8A0CE5 169C007FFFFFFFFFFFFC00AAAAAAAAAAAAB4017FFFFFFFFFFFF3F96C16C16C16BF6C00 7FFFFFFFFFFFFC00AAAAAAAAAAAAB401AAAAAAAAAAAAA3FAE573AC901E568C007FFFFF FFFFFFFC00AAAAAAAAAAAAB401D5555555555553FB9690E0857FCF2C007FFFFFFFFFFF FC00AAAAAAAAAAAAB40200000000000003FC23456789ABCDEC007FFFFFFFFFFFFC00AA AAAAAAAAAAB40215555555555553FC8153D0F8CB484C007FFFFFFFFFFFFC00AAAAAAAA AAAAB4022AAAAAAAAAAAA3FCE573AC901E56FC007FFFFFFFFFFFFC00AAAAAAAAAAAAB4 023FFFFFFFFFFFF3FD27D27D27D27D0C007FFFFFFFFFFFFC005555555555556C024000 0000000003F8FDB97530ECA77C007FFFFFFFFFFFFC005555555555556C022AAAAAAAAA AABBF92F684BDA12F60C007FFFFFFFFFFFFC005555555555556C021555555555556BFA 9690E0857FCFBC007FFFFFFFFFFFFC005555555555556C020000000000001BFB3E93E9 3E93E93C007FFFFFFFFFFFFC005555555555556C01D555555555557BFBA5BC7DEA00C2 4C007FFFFFFFFFFFFC005555555555556C01AAAAAAAAAAAACBFC0061172283396C007F FFFFFFFFFFFC005555555555556C018000000000001BFC27D27D27D27D4C007FFFFFFF FFFFFC005555555555556C015555555555556BFC49327104EE2CCC007FFFFFFFFFFFFC 005555555555556C012AAAAAAAAAAABBFC6480F2B9D6482C007FFFFFFFFFFFFC005555 555555556C010000000000000BFC79BE02468ACF3C007FFFFFFFFFFFFC005555555555 556C00AAAAAAAAAAAABBFC88E99FAB0BC1FC007FFFFFFFFFFFFC005555555555556C00 5555555555556BFC9203CAE759206C007FFFFFFFFFFFFC005555555555556C00000000 0000001BFC950C83FB72EA8C007FFFFFFFFFFFFC005555555555556BFF555555555555 8BFC9203CAE759205C007FFFFFFFFFFFFC005555555555556BFE555555555555BBFC88 E99FAB0BC1FC007FFFFFFFFFFFFC005555555555556BCC8000000000000BFC79BE0246 8ACF3C007FFFFFFFFFFFFC0055555555555563FE555555555554FBFC6480F2B9D6483C 007FFFFFFFFFFFFC0055555555555563FF5555555555552BFC49327104EE2CEC007FFF FFFFFFFFFC0055555555555563FFFFFFFFFFFFFFCBFC27D27D27D27D5C007FFFFFFFFF FFFC0055555555555564005555555555553BFC0061172283397C007FFFFFFFFFFFFC00 5555555555556400AAAAAAAAAAAA8BFBA5BC7DEA00C29C007FFFFFFFFFFFFC00555555 5555556400FFFFFFFFFFFFDBFB3E93E93E93E9BC007FFFFFFFFFFFFC00555555555555 64012AAAAAAAAAAA9BFA9690E0857FD06C007FFFFFFFFFFFFC00555555555555640155 55555555554BF92F684BDA12F85C007FFFFFFFFFFFFC0055555555555564017FFFFFFF FFFFF3F8FDB97530ECA4CC007FFFFFFFFFFFFC005555555555556401AAAAAAAAAAAAA3 FAAED6A9264E200C007FFFFFFFFFFFFC005555555555556401D5555555555553FB7B42 5ED097B3EC007FFFFFFFFFFFFC00555555555555640200000000000003FC159E26AF37 C04C007FFFFFFFFFFFFC00555555555555640215555555555553FC73AC901E573AAC00 7FFFFFFFFFFFFC0055555555555564022AAAAAAAAAAAA3FCD7CC6BB5AA495C007FFFFF FFFFFFFC0055555555555564023FFFFFFFFFFFF3FD20FEDCBA98763C007FFFFFFFFFFF FC000000000000001C0240000000000003F8B4E81B4E81B37C007FFFFFFFFFFFFC0000 00000000001C022AAAAAAAAAAABBF953D0F8CB48700C007FFFFFFFFFFFFC0000000000 00001C021555555555556BFAA8C536FE1A8C3C007FFFFFFFFFFFFC000000000000001C 020000000000001BFB47AE147AE1477C007FFFFFFFFFFFFC000000000000001C01D555 555555557BFBAED6A9264E208C007FFFFFFFFFFFFC000000000000001C01AAAAAAAAAA AACBFC04EE2CC0A9E88C007FFFFFFFFFFFFC000000000000001C018000000000001BFC 2C5F92C5F92C6C007FFFFFFFFFFFFC000000000000001C015555555555556BFC4DBF86 A314DC0C007FFFFFFFFFFFFC000000000000001C012AAAAAAAAAAABBFC690E0857FCF7 5C007FFFFFFFFFFFFC000000000000001C010000000000000BFC7E4B17E4B17E6C007F FFFFFFFFFFFC000000000000001C00AAAAAAAAAAAABBFC8D76B54932712C007FFFFFFF FFFFFC000000000000001C005555555555556BFC9690E0857FCF9C007FFFFFFFFFFFFC 000000000000001C000000000000001BFC999999999999BC007FFFFFFFFFFFFC000000 000000001BFF5555555555558BFC9690E0857FCF8C007FFFFFFFFFFFFC000000000000 001BFE555555555555BBFC8D76B54932712C007FFFFFFFFFFFFC000000000000001BCC 8000000000000BFC7E4B17E4B17E6C007FFFFFFFFFFFFC0000000000000013FE555555 555554FBFC690E0857FCF76C007FFFFFFFFFFFFC0000000000000013FF555555555555 2BFC4DBF86A314DC1C007FFFFFFFFFFFFC0000000000000013FFFFFFFFFFFFFFCBFC2C 5F92C5F92C8C007FFFFFFFFFFFFC0000000000000014005555555555553BFC04EE2CC0 A9E8AC007FFFFFFFFFFFFC000000000000001400AAAAAAAAAAAA8BFBAED6A9264E20FC 007FFFFFFFFFFFFC000000000000001400FFFFFFFFFFFFDBFB47AE147AE1481C007FFF FFFFFFFFFC0000000000000014012AAAAAAAAAAA9BFAA8C536FE1A8D2C007FFFFFFFFF FFFC0000000000000014015555555555554BF953D0F8CB4871DC007FFFFFFFFFFFFC00 00000000000014017FFFFFFFFFFFF3F8B4E81B4E81B1CC007FFFFFFFFFFFFC00000000 0000001401AAAAAAAAAAAAA3FA9CA252ADB3634C007FFFFFFFFFFFFC00000000000000 1401D5555555555553FB722833944A558C007FFFFFFFFFFFFC00000000000000140200 000000000003FC1111111111110C007FFFFFFFFFFFFC00000000000000140215555555 555553FC6F1F7A80308B7C007FFFFFFFFFFFFC0000000000000014022AAAAAAAAAAAA3 FCD33F5617839A2C007FFFFFFFFFFFFC0000000000000014023FFFFFFFFFFFF3FD1EB8 51EB851E9C007FFFFFFFFFFFFBFF5555555555558C0240000000000003F8FDB97530EC A77C007FFFFFFFFFFFFBFF5555555555558C022AAAAAAAAAAABBF92F684BDA12F60C00 7FFFFFFFFFFFFBFF5555555555558C021555555555556BFA9690E0857FCFBC007FFFFF FFFFFFFBFF5555555555558C020000000000001BFB3E93E93E93E93C007FFFFFFFFFFF FBFF5555555555558C01D555555555557BFBA5BC7DEA00C24C007FFFFFFFFFFFFBFF55 55555555558C01AAAAAAAAAAAACBFC0061172283396C007FFFFFFFFFFFFBFF55555555 55558C018000000000001BFC27D27D27D27D4C007FFFFFFFFFFFFBFF5555555555558C 015555555555556BFC49327104EE2CCC007FFFFFFFFFFFFBFF5555555555558C012AAA AAAAAAAABBFC6480F2B9D6482C007FFFFFFFFFFFFBFF5555555555558C010000000000 000BFC79BE02468ACF3C007FFFFFFFFFFFFBFF5555555555558C00AAAAAAAAAAAABBFC 88E99FAB0BC1FC007FFFFFFFFFFFFBFF5555555555558C005555555555556BFC9203CA E759206C007FFFFFFFFFFFFBFF5555555555558C000000000000001BFC950C83FB72EA 8C007FFFFFFFFFFFFBFF5555555555558BFF5555555555558BFC9203CAE759205C007F FFFFFFFFFFFBFF5555555555558BFE555555555555BBFC88E99FAB0BC1FC007FFFFFFF FFFFFBFF5555555555558BCC8000000000000BFC79BE02468ACF3C007FFFFFFFFFFFFB FF55555555555583FE555555555554FBFC6480F2B9D6483C007FFFFFFFFFFFFBFF5555 5555555583FF5555555555552BFC49327104EE2CEC007FFFFFFFFFFFFBFF5555555555 5583FFFFFFFFFFFFFFCBFC27D27D27D27D5C007FFFFFFFFFFFFBFF5555555555558400 5555555555553BFC0061172283397C007FFFFFFFFFFFFBFF5555555555558400AAAAAA AAAAAA8BFBA5BC7DEA00C29C007FFFFFFFFFFFFBFF5555555555558400FFFFFFFFFFFF DBFB3E93E93E93E9BC007FFFFFFFFFFFFBFF55555555555584012AAAAAAAAAAA9BFA96 90E0857FD06C007FFFFFFFFFFFFBFF55555555555584015555555555554BF92F684BDA 12F85C007FFFFFFFFFFFFBFF55555555555584017FFFFFFFFFFFF3F8FDB97530ECA4CC 007FFFFFFFFFFFFBFF5555555555558401AAAAAAAAAAAAA3FAAED6A9264E200C007FFF FFFFFFFFFBFF5555555555558401D5555555555553FB7B425ED097B3EC007FFFFFFFFF FFFBFF555555555555840200000000000003FC159E26AF37C04C007FFFFFFFFFFFFBFF 555555555555840215555555555553FC73AC901E573AAC007FFFFFFFFFFFFBFF555555 55555584022AAAAAAAAAAAA3FCD7CC6BB5AA495C007FFFFFFFFFFFFBFF555555555555 84023FFFFFFFFFFFF3FD20FEDCBA98763C007FFFFFFFFFFFFBFE555555555555BC0240 000000000003F96C16C16C16C0CC007FFFFFFFFFFFFBFE555555555555BC022AAAAAAA AAAABBF8845C8A0CE511FC007FFFFFFFFFFFFBFE555555555555BC021555555555556B FA5FF3DD1BAF98BC007FFFFFFFFFFFFBFE555555555555BC020000000000001BFB2345 6789ABCDBC007FFFFFFFFFFFFBFE555555555555BC01D555555555557BFB8A6DFC3518 A6CC007FFFFFFFFFFFFBFE555555555555BC01AAAAAAAAAAAACBFBE573AC901E574C00 7FFFFFFFFFFFFBFE555555555555BC018000000000001BFC1A2B3C4D5E6F8C007FFFFF FFFFFFFBFE555555555555BC015555555555556BFC3B8B302A7A1F2C007FFFFFFFFFFF FBFE555555555555BC012AAAAAAAAAAABBFC56D9B1DF623A7C007FFFFFFFFFFFFBFE55 5555555555BC010000000000000BFC6C16C16C16C18C007FFFFFFFFFFFFBFE55555555 5555BC00AAAAAAAAAAAABBFC7B425ED097B44C007FFFFFFFFFFFFBFE555555555555BC 005555555555556BFC845C8A0CE512BC007FFFFFFFFFFFFBFE555555555555BC000000 000000001BFC87654320FEDCDC007FFFFFFFFFFFFBFE555555555555BBFF5555555555 558BFC845C8A0CE512AC007FFFFFFFFFFFFBFE555555555555BBFE555555555555BBFC 7B425ED097B44C007FFFFFFFFFFFFBFE555555555555BBCC8000000000000BFC6C16C1 6C16C18C007FFFFFFFFFFFFBFE555555555555B3FE555555555554FBFC56D9B1DF623A 8C007FFFFFFFFFFFFBFE555555555555B3FF5555555555552BFC3B8B302A7A1F3C007F FFFFFFFFFFFBFE555555555555B3FFFFFFFFFFFFFFCBFC1A2B3C4D5E6FAC007FFFFFFF FFFFFBFE555555555555B4005555555555553BFBE573AC901E579C007FFFFFFFFFFFFB FE555555555555B400AAAAAAAAAAAA8BFB8A6DFC3518A73C007FFFFFFFFFFFFBFE5555 55555555B400FFFFFFFFFFFFDBFB23456789ABCE5C007FFFFFFFFFFFFBFE5555555555 55B4012AAAAAAAAAAA9BFA5FF3DD1BAF99AC007FFFFFFFFFFFFBFE555555555555B401 5555555555554BF8845C8A0CE5159C007FFFFFFFFFFFFBFE555555555555B4017FFFFF FFFFFFF3F96C16C16C16BFEC007FFFFFFFFFFFFBFE555555555555B401AAAAAAAAAAAA A3FAE573AC901E56CC007FFFFFFFFFFFFBFE555555555555B401D5555555555553FB96 90E0857FCF4C007FFFFFFFFFFFFBFE555555555555B40200000000000003FC23456789 ABCDEC007FFFFFFFFFFFFBFE555555555555B40215555555555553FC8153D0F8CB485C 007FFFFFFFFFFFFBFE555555555555B4022AAAAAAAAAAAA3FCE573AC901E570C007FFF FFFFFFFFFBFE555555555555B4023FFFFFFFFFFFF3FD27D27D27D27D0C007FFFFFFFFF FFFBCC8000000000000C0240000000000003FA111111111110EC007FFFFFFFFFFFFBCC 8000000000000C022AAAAAAAAAAABBF4845C8A0CE4FF1C007FFFFFFFFFFFFBCC800000 0000000C021555555555556BFA04EE2CC0A9E8BC007FFFFFFFFFFFFBCC800000000000 0C020000000000001BFAEB851EB851EB6C007FFFFFFFFFFFFBCC8000000000000C01D5 55555555557BFB5CEB240795CECC007FFFFFFFFFFFFBCC8000000000000C01AAAAAAAA AAAACBFBB7F0D4629B7F4C007FFFFFFFFFFFFBCC8000000000000C018000000000001B FC0369D0369D037C007FFFFFFFFFFFFBCC8000000000000C015555555555556BFC24C9 C413B8B31C007FFFFFFFFFFFFBCC8000000000000C012AAAAAAAAAAABBFC401845C8A0 CE6C007FFFFFFFFFFFFBCC8000000000000C010000000000000BFC5555555555557C00 7FFFFFFFFFFFFBCC8000000000000C00AAAAAAAAAAAABBFC6480F2B9D6483C007FFFFF FFFFFFFBCC8000000000000C005555555555556BFC6D9B1DF623A6AC007FFFFFFFFFFF FBCC8000000000000C000000000000001BFC70A3D70A3D70CC007FFFFFFFFFFFFBCC80 00000000000BFF5555555555558BFC6D9B1DF623A69C007FFFFFFFFFFFFBCC80000000 00000BFE555555555555BBFC6480F2B9D6483C007FFFFFFFFFFFFBCC8000000000000B CC8000000000000BFC5555555555557C007FFFFFFFFFFFFBCC80000000000003FE5555 55555554FBFC401845C8A0CE7C007FFFFFFFFFFFFBCC80000000000003FF5555555555 552BFC24C9C413B8B32C007FFFFFFFFFFFFBCC80000000000003FFFFFFFFFFFFFFCBFC 0369D0369D039C007FFFFFFFFFFFFBCC80000000000004005555555555553BFBB7F0D4 629B7F7C007FFFFFFFFFFFFBCC8000000000000400AAAAAAAAAAAA8BFB5CEB240795CF 1C007FFFFFFFFFFFFBCC8000000000000400FFFFFFFFFFFFDBFAEB851EB851EC6C007F FFFFFFFFFFFBCC80000000000004012AAAAAAAAAAA9BFA04EE2CC0A9E96C007FFFFFFF FFFFFBCC80000000000004015555555555554BF4845C8A0CE5495C007FFFFFFFFFFFFB CC80000000000004017FFFFFFFFFFFF3FA1111111111103C007FFFFFFFFFFFFBCC8000 000000000401AAAAAAAAAAAAA3FB203CAE7592038C007FFFFFFFFFFFFBCC8000000000 000401D5555555555553FBC413B8B302A76C007FFFFFFFFFFFFBCC8000000000000402 00000000000003FC3A06D3A06D3A0C007FFFFFFFFFFFFBCC8000000000000402155555 55555553FC98153D0F8CB46C007FFFFFFFFFFFFBCC80000000000004022AAAAAAAAAAA A3FCFC3518A6DFC31C007FFFFFFFFFFFFBCC80000000000004023FFFFFFFFFFFF3FD33 33333333331C007FFFFFFFFFFFF3FE555555555554FC0240000000000003FA907F6E5D 4C3A6C007FFFFFFFFFFFF3FE555555555554FC022AAAAAAAAAAAB3F8E573AC901E561C 007FFFFFFFFFFFF3FE555555555554FC021555555555556BF90AFF9EE8DD7D6C007FFF FFFFFFFFF3FE555555555554FC020000000000001BFA6C16C16C16C16C007FFFFFFFFF FFF3FE555555555554FC01D555555555557BFB1D33F5617839CC007FFFFFFFFFFFF3FE 555555555554FC01AAAAAAAAAAAACBFB7839A5BC7DEA4C007FFFFFFFFFFFF3FE555555 555554FC018000000000001BFBC71C71C71C720C007FFFFFFFFFFFF3FE555555555554 FC015555555555556BFC04EE2CC0A9E8AC007FFFFFFFFFFFF3FE555555555554FC012A AAAAAAAAAABBFC203CAE759203FC007FFFFFFFFFFFF3FE555555555554FC0100000000 00000BFC3579BE02468B0C007FFFFFFFFFFFF3FE555555555554FC00AAAAAAAAAAAABB FC44A55B66C77DCC007FFFFFFFFFFFF3FE555555555554FC005555555555556BFC4DBF 86A314DC3C007FFFFFFFFFFFF3FE555555555554FC000000000000001BFC50C83FB72E A65C007FFFFFFFFFFFF3FE555555555554FBFF5555555555558BFC4DBF86A314DC2C00 7FFFFFFFFFFFF3FE555555555554FBFE555555555555BBFC44A55B66C77DCC007FFFFF FFFFFFF3FE555555555554FBCC8000000000000BFC3579BE02468B0C007FFFFFFFFFFF F3FE555555555554F3FE555555555554FBFC203CAE7592040C007FFFFFFFFFFFF3FE55 5555555554F3FF5555555555552BFC04EE2CC0A9E8BC007FFFFFFFFFFFF3FE55555555 5554F3FFFFFFFFFFFFFFCBFBC71C71C71C724C007FFFFFFFFFFFF3FE555555555554F4 005555555555553BFB7839A5BC7DEA8C007FFFFFFFFFFFF3FE555555555554F400AAAA AAAAAAAA8BFB1D33F561783A3C007FFFFFFFFFFFF3FE555555555554F400FFFFFFFFFF FFDBFA6C16C16C16C2AC007FFFFFFFFFFFF3FE555555555554F4012AAAAAAAAAAA9BF9 0AFF9EE8DD7F5C007FFFFFFFFFFFF3FE555555555554F40155555555555543F8E573AC 901E527C007FFFFFFFFFFFF3FE555555555554F4017FFFFFFFFFFFF3FA907F6E5D4C39 FC007FFFFFFFFFFFF3FE555555555554F401AAAAAAAAAAAAA3FB5FF3DD1BAF986C007F FFFFFFFFFFF3FE555555555554F401D5555555555553FC01E573AC901E2C007FFFFFFF FFFFF3FE555555555554F40200000000000003FC59E26AF37C046C007FFFFFFFFFFFF3 FE555555555554F40215555555555553FCB7F0D4629B7EDC007FFFFFFFFFFFF3FE5555 55555554F4022AAAAAAAAAAAA3FD0E0857FCF746CC007FFFFFFFFFFFF3FE5555555555 54F4023FFFFFFFFFFFF3FD4320FEDCBA984C007FFFFFFFFFFFF3FF5555555555552C02 40000000000003FB1A2B3C4D5E6F3C007FFFFFFFFFFFF3FF5555555555552C022AAAAA AAAAAAB3FA1D33F56178398C007FFFFFFFFFFFF3FF5555555555552C02155555555555 63F6E573AC901E550C007FFFFFFFFFFFF3FF5555555555552C020000000000001BF990 7F6E5D4C3ADC007FFFFFFFFFFFF3FF5555555555552C01D555555555557BFA9690E085 7FCF7C007FFFFFFFFFFFF3FF5555555555552C01AAAAAAAAAAAACBFB264E209DC5984C 007FFFFFFFFFFFF3FF5555555555552C018000000000001BFB7530ECA864200C007FFF FFFFFFFFF3FF5555555555552C015555555555556BFBB7F0D4629B7F5C007FFFFFFFFF FFF3FF5555555555552C012AAAAAAAAAAABBFBEE8DD7CC6BB5FC007FFFFFFFFFFFF3FF 5555555555552C010000000000000BFC0C83FB72EA620C007FFFFFFFFFFFF3FF555555 5555552C00AAAAAAAAAAAABBFC1BAF98D76B54CC007FFFFFFFFFFFF3FF555555555555 2C005555555555556BFC24C9C413B8B33C007FFFFFFFFFFFF3FF5555555555552C0000 00000000001BFC27D27D27D27D5C007FFFFFFFFFFFF3FF5555555555552BFF55555555 55558BFC24C9C413B8B32C007FFFFFFFFFFFF3FF5555555555552BFE555555555555BB FC1BAF98D76B54CC007FFFFFFFFFFFF3FF5555555555552BCC8000000000000BFC0C83 FB72EA620C007FFFFFFFFFFFF3FF55555555555523FE555555555554FBFBEE8DD7CC6B B61C007FFFFFFFFFFFF3FF55555555555523FF5555555555552BFBB7F0D4629B7F7C00 7FFFFFFFFFFFF3FF55555555555523FFFFFFFFFFFFFFCBFB7530ECA864204C007FFFFF FFFFFFF3FF55555555555524005555555555553BFB264E209DC5988C007FFFFFFFFFFF F3FF5555555555552400AAAAAAAAAAAA8BFA9690E0857FD07C007FFFFFFFFFFFF3FF55 55555555552400FFFFFFFFFFFFDBF9907F6E5D4C3D4C007FFFFFFFFFFFF3FF55555555 555524012AAAAAAAAAAA93F6E573AC901E458C007FFFFFFFFFFFF3FF55555555555524 0155555555555543FA1D33F5617838AC007FFFFFFFFFFFF3FF55555555555524017FFF FFFFFFFFF3FB1A2B3C4D5E6F0C007FFFFFFFFFFFF3FF5555555555552401AAAAAAAAAA AAA3FBB1DF623A67EA6C007FFFFFFFFFFFF3FF5555555555552401D5555555555553FC 2ADB363BEC472C007FFFFFFFFFFFF3FF555555555555240200000000000003FC82D82D 82D82D6C007FFFFFFFFFFFF3FF555555555555240215555555555553FCE0E696F1F7A7 DC007FFFFFFFFFFFF3FF55555555555524022AAAAAAAAAAAA3FD22833944A55B4C007F FFFFFFFFFFF3FF55555555555524023FFFFFFFFFFFF3FD579BE02468ACCC007FFFFFFF FFFFF3FFFFFFFFFFFFFFCC0240000000000003FB7E4B17E4B17DFC007FFFFFFFFFFFF3 FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3FAE573AC901E570C007FFFFFFFFFFFF3FFFFFF FFFFFFFFCC0215555555555563F9CD2DE3EF50052C007FFFFFFFFFFFF3FFFFFFFFFFFF FFCC020000000000001BC72C40000000000C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC01 D555555555557BF99CA252ADB3647C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC01AAAAAA AAAAAACBFA845C8A0CE5133C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC01800000000000 1BFB1111111111116C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC015555555555556BFB53 D0F8CB48709C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFB8A6DFC35 18A73C007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC010000000000000BFBB4E81B4E81B54C 007FFFFFFFFFFFF3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFBD33F5617839ABC007FFF FFFFFFFFF3FFFFFFFFFFFFFFCC005555555555556BFBE573AC901E579C007FFFFFFFFF FFF3FFFFFFFFFFFFFFCC000000000000001BFBEB851EB851EC0C007FFFFFFFFFFFF3FF FFFFFFFFFFFFCBFF5555555555558BFBE573AC901E57AC007FFFFFFFFFFFF3FFFFFFFF FFFFFFCBFE555555555555BBFBD33F5617839ADC007FFFFFFFFFFFF3FFFFFFFFFFFFFF CBCC8000000000000BFBB4E81B4E81B56C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE55 5555555554FBFB8A6DFC3518A76C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FF55555555 55552BFB53D0F8CB4870CC007FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCB FB1111111111119C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC4005555555555553BFA845C 8A0CE513AC007FFFFFFFFFFFF3FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BF99CA252ADB3 660C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBCA41EC000000000C00 7FFFFFFFFFFFF3FFFFFFFFFFFFFFC4012AAAAAAAAAAA93F9CD2DE3EF50037C007FFFFF FFFFFFF3FFFFFFFFFFFFFFC40155555555555543FAE573AC901E560C007FFFFFFFFFFF F3FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FB7E4B17E4B17DBC007FFFFFFFFFFFF3FFFF FFFFFFFFFFC401AAAAAAAAAAAAA3FC0AFF9EE8DD7C8C007FFFFFFFFFFFF3FFFFFFFFFF FFFFC401D5555555555553FC5CEB240795CE8C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC4 0200000000000003FCB4E81B4E81B4CC007FFFFFFFFFFFF3FFFFFFFFFFFFFFC4021555 5555555553FD097B425ED0979C007FFFFFFFFFFFF3FFFFFFFFFFFFFFC4022AAAAAAAAA AAA3FD3B8B302A7A1EFC007FFFFFFFFFFFF3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD 70A3D70A3D707C007FFFFFFFFFFFF4005555555555553C0240000000000003FBF49F49 F49F499C007FFFFFFFFFFFF4005555555555553C022AAAAAAAAAAAB3FB690E0857FCF7 2C007FFFFFFFFFFFF4005555555555553C0215555555555563FAD33F56178399DC007F FFFFFFFFFFF4005555555555553C0200000000000013F9D950C83FB72E3C007FFFFFFF FFFFF4005555555555553C01D5555555555573F6E573AC901E509C007FFFFFFFFFFFF4 005555555555553C01AAAAAAAAAAAACBF92F684BDA12F7FC007FFFFFFFFFFFF4005555 555555553C018000000000001BFA3579BE02468B7C007FFFFFFFFFFFF4005555555555 553C015555555555556BFABAF98D76B549EC007FFFFFFFFFFFF4005555555555553C01 2AAAAAAAAAAABBFB1419CA252ADB9C007FFFFFFFFFFFF4005555555555553C01000000 0000000BFB3E93E93E93E9AC007FFFFFFFFFFFF4005555555555553C00AAAAAAAAAAAA BBFB5CEB240795CF2C007FFFFFFFFFFFF4005555555555553C005555555555556BFB6F 1F7A80308C0C007FFFFFFFFFFFF4005555555555553C000000000000001BFB7530ECA8 64205C007FFFFFFFFFFFF4005555555555553BFF5555555555558BFB6F1F7A80308C0C 007FFFFFFFFFFFF4005555555555553BFE555555555555BBFB5CEB240795CF3C007FFF FFFFFFFFF4005555555555553BCC8000000000000BFB3E93E93E93E9CC007FFFFFFFFF FFF40055555555555533FE555555555554FBFB1419CA252ADBCC007FFFFFFFFFFFF400 55555555555533FF5555555555552BFABAF98D76B54A4C007FFFFFFFFFFFF400555555 55555533FFFFFFFFFFFFFFCBFA3579BE02468BEC007FFFFFFFFFFFF400555555555555 34005555555555553BF92F684BDA12F8EC007FFFFFFFFFFFF4005555555555553400AA AAAAAAAAAA83F6E573AC901E441C007FFFFFFFFFFFF4005555555555553400FFFFFFFF FFFFD3F9D950C83FB72C1C007FFFFFFFFFFFF40055555555555534012AAAAAAAAAAA93 FAD33F561783990C007FFFFFFFFFFFF400555555555555340155555555555543FB690E 0857FCF6AC007FFFFFFFFFFFF40055555555555534017FFFFFFFFFFFF3FBF49F49F49F 495C007FFFFFFFFFFFF4005555555555553401AAAAAAAAAAAAA3FC4629B7F0D4625C00 7FFFFFFFFFFFF4005555555555553401D5555555555553FC98153D0F8CB45C007FFFFF FFFFFFF400555555555555340200000000000003FCF0123456789A9C007FFFFFFFFFFF F400555555555555340215555555555553FD27104EE2CC0A8C007FFFFFFFFFFFF40055 555555555534022AAAAAAAAAAAA3FD59203CAE7591DC007FFFFFFFFFFFF40055555555 555534023FFFFFFFFFFFF3FD8E38E38E38E36C007FFFFFFFFFFFF400AAAAAAAAAAAA8C 0240000000000003FC3E93E93E93E90C007FFFFFFFFFFFF400AAAAAAAAAAAA8C022AAA AAAAAAAAB3FBF19690E0857FAC007FFFFFFFFFFFF400AAAAAAAAAAAA8C021555555555 5563FB722833944A556C007FFFFFFFFFFFF400AAAAAAAAAAAA8C0200000000000013FA FDB97530ECA82C007FFFFFFFFFFFF400AAAAAAAAAAAA8C01D5555555555573FA2F684B DA12F61C007FFFFFFFFFFFF400AAAAAAAAAAAA8C01AAAAAAAAAAAAC3F8E573AC901E54 2C007FFFFFFFFFFFF400AAAAAAAAAAAA8C018000000000001BF723456789ABD3BC007F FFFFFFFFFFF400AAAAAAAAAAAA8C015555555555556BF953D0F8CB48720C007FFFFFFF FFFFF400AAAAAAAAAAAA8C012AAAAAAAAAAABBFA1722833944A64C007FFFFFFFFFFFF4 00AAAAAAAAAAAA8C010000000000000BFA6C16C16C16C27C007FFFFFFFFFFFF400AAAA AAAAAAAA8C00AAAAAAAAAAAABBFAA8C536FE1A8D5C007FFFFFFFFFFFF400AAAAAAAAAA AA8C005555555555556BFACD2DE3EF50070C007FFFFFFFFFFFF400AAAAAAAAAAAA8C00 0000000000001BFAD950C83FB72FBC007FFFFFFFFFFFF400AAAAAAAAAAAA8BFF555555 5555558BFACD2DE3EF50072C007FFFFFFFFFFFF400AAAAAAAAAAAA8BFE555555555555 BBFAA8C536FE1A8D6C007FFFFFFFFFFFF400AAAAAAAAAAAA8BCC8000000000000BFA6C 16C16C16C28C007FFFFFFFFFFFF400AAAAAAAAAAAA83FE555555555554FBFA17228339 44A68C007FFFFFFFFFFFF400AAAAAAAAAAAA83FF5555555555552BF953D0F8CB48729C 007FFFFFFFFFFFF400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBF723456789ABD78C007FFF FFFFFFFFF400AAAAAAAAAAAA840055555555555533F8E573AC901E522C007FFFFFFFFF FFF400AAAAAAAAAAAA8400AAAAAAAAAAAA83FA2F684BDA12F53C007FFFFFFFFFFFF400 AAAAAAAAAAAA8400FFFFFFFFFFFFD3FAFDB97530ECA6FC007FFFFFFFFFFFF400AAAAAA AAAAAA84012AAAAAAAAAAA93FB722833944A54FC007FFFFFFFFFFFF400AAAAAAAAAAAA 840155555555555543FBF19690E0857F2C007FFFFFFFFFFFF400AAAAAAAAAAAA84017F FFFFFFFFFFF3FC3E93E93E93E8EC007FFFFFFFFFFFF400AAAAAAAAAAAA8401AAAAAAAA AAAAA3FC8A6DFC3518A69C007FFFFFFFFFFFF400AAAAAAAAAAAA8401D5555555555553 FCDC598153D0F88C007FFFFFFFFFFFF400AAAAAAAAAAAA840200000000000003FD1A2B 3C4D5E6F6C007FFFFFFFFFFFF400AAAAAAAAAAAA840215555555555553FD49327104EE 2CAC007FFFFFFFFFFFF400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD7B425ED097B3FC00 7FFFFFFFFFFFF400AAAAAAAAAAAA84023FFFFFFFFFFFF3FDB05B05B05B058C007FFFFF FFFFFFF400FFFFFFFFFFFFDC0240000000000003FC8BF258BF258BBC007FFFFFFFFFFF F400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FC4629B7F0D4627C007FFFFFFFFFFFF400FF FFFFFFFFFFDC0215555555555563FC0672894AB6CD6C007FFFFFFFFFFFF400FFFFFFFF FFFFDC0200000000000013FB9999999999996C007FFFFFFFFFFFF400FFFFFFFFFFFFDC 01D5555555555573FB327104EE2CC06C007FFFFFFFFFFFF400FFFFFFFFFFFFDC01AAAA AAAAAAAAC3FAAED6A9264E1FDC007FFFFFFFFFFFF400FFFFFFFFFFFFDC018000000000 0013FA1111111111105C007FFFFFFFFFFFF400FFFFFFFFFFFFDC0155555555555563F9 1722833944A34C007FFFFFFFFFFFF400FFFFFFFFFFFFDC012AAAAAAAAAAAB3F6E573AC 901E461C007FFFFFFFFFFFF400FFFFFFFFFFFFDC010000000000000BF7B4E81B4E81BE 0C007FFFFFFFFFFFF400FFFFFFFFFFFFDC00AAAAAAAAAAAABBF8CD2DE3EF500A7C007F FFFFFFFFFFF400FFFFFFFFFFFFDC005555555555556BF92F684BDA12F8DC007FFFFFFF FFFFF400FFFFFFFFFFFFDC000000000000001BF947AE147AE149FC007FFFFFFFFFFFF4 00FFFFFFFFFFFFDBFF5555555555558BF92F684BDA12F8DC007FFFFFFFFFFFF400FFFF FFFFFFFFDBFE555555555555BBF8CD2DE3EF500ACC007FFFFFFFFFFFF400FFFFFFFFFF FFDBCC8000000000000BF7B4E81B4E81BE7C007FFFFFFFFFFFF400FFFFFFFFFFFFD3FE 555555555554F3F6E573AC901E43CC007FFFFFFFFFFFF400FFFFFFFFFFFFD3FF555555 55555523F91722833944A2EC007FFFFFFFFFFFF400FFFFFFFFFFFFD3FFFFFFFFFFFFFF C3FA11111111110FCC007FFFFFFFFFFFF400FFFFFFFFFFFFD40055555555555533FAAE D6A9264E1F4C007FFFFFFFFFFFF400FFFFFFFFFFFFD400AAAAAAAAAAAA83FB327104EE 2CBFFC007FFFFFFFFFFFF400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FB999999999998DC 007FFFFFFFFFFFF400FFFFFFFFFFFFD4012AAAAAAAAAAA93FC0672894AB6CD2C007FFF FFFFFFFFF400FFFFFFFFFFFFD40155555555555543FC4629B7F0D4623C007FFFFFFFFF FFF400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FC8BF258BF258B9C007FFFFFFFFFFFF400 FFFFFFFFFFFFD401AAAAAAAAAAAAA3FCD7CC6BB5AA494C007FFFFFFFFFFFF400FFFFFF FFFFFFD401D5555555555553FD14DBF86A314DAC007FFFFFFFFFFFF400FFFFFFFFFFFF D40200000000000003FD40DA740DA740CC007FFFFFFFFFFFF400FFFFFFFFFFFFD40215 555555555553FD6FE1A8C536FDFC007FFFFFFFFFFFF400FFFFFFFFFFFFD4022AAAAAAA AAAAA3FDA1F19690E0854C007FFFFFFFFFFFF400FFFFFFFFFFFFD4023FFFFFFFFFFFF3 FDD70A3D70A3D6DC007FFFFFFFFFFFF4012AAAAAAAAAAA9C0240000000000003FCE26A F37C048CDC007FFFFFFFFFFFF4012AAAAAAAAAAA9C022AAAAAAAAAAAB3FC9CA252ADB3 63AC007FFFFFFFFFFFF4012AAAAAAAAAAA9C0215555555555563FC5CEB240795CE8C00 7FFFFFFFFFFFF4012AAAAAAAAAAA9C0200000000000013FC23456789ABCDDC007FFFFF FFFFFFF4012AAAAAAAAAAA9C01D5555555555573FBDF623A67EAC2AC007FFFFFFFFFFF F4012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FB845C8A0CE5122C007FFFFFFFFFFFF4012A AAAAAAAAAA9C0180000000000013FB3579BE02468A6C007FFFFFFFFFFFF4012AAAAAAA AAAA9C0155555555555563FAE573AC901E562C007FFFFFFFFFFFF4012AAAAAAAAAAA9C 012AAAAAAAAAAAB3FA7839A5BC7DE8FC007FFFFFFFFFFFF4012AAAAAAAAAAA9C010000 0000000003FA23456789ABCCCC007FFFFFFFFFFFF4012AAAAAAAAAAA9C00AAAAAAAAAA AAB3F9CD2DE3EF5003CC007FFFFFFFFFFFF4012AAAAAAAAAAA9C0055555555555563F9 845C8A0CE5103C007FFFFFFFFFFFF4012AAAAAAAAAAA9C0000000000000013F96C16C1 6C16BF1C007FFFFFFFFFFFF4012AAAAAAAAAAA9BFF55555555555583F9845C8A0CE510 2C007FFFFFFFFFFFF4012AAAAAAAAAAA9BFE555555555555B3F9CD2DE3EF50039C007F FFFFFFFFFFF4012AAAAAAAAAAA9BCC80000000000003FA23456789ABCCBC007FFFFFFF FFFFF4012AAAAAAAAAAA93FE555555555554F3FA7839A5BC7DE8BC007FFFFFFFFFFFF4 012AAAAAAAAAAA93FF55555555555523FAE573AC901E55EC007FFFFFFFFFFFF4012AAA AAAAAAAA93FFFFFFFFFFFFFFC3FB3579BE02468A2C007FFFFFFFFFFFF4012AAAAAAAAA AA940055555555555533FB845C8A0CE511EC007FFFFFFFFFFFF4012AAAAAAAAAAA9400 AAAAAAAAAAAA83FBDF623A67EAC23C007FFFFFFFFFFFF4012AAAAAAAAAAA9400FFFFFF FFFFFFD3FC23456789ABCD8C007FFFFFFFFFFFF4012AAAAAAAAAAA94012AAAAAAAAAAA 93FC5CEB240795CE4C007FFFFFFFFFFFF4012AAAAAAAAAAA940155555555555543FC9C A252ADB3635C007FFFFFFFFFFFF4012AAAAAAAAAAA94017FFFFFFFFFFFF3FCE26AF37C 048CBC007FFFFFFFFFFFF4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FD1722833944A53C 007FFFFFFFFFFFF4012AAAAAAAAAAA9401D5555555555553FD401845C8A0CE2C007FFF FFFFFFFFF4012AAAAAAAAAAA940200000000000003FD6C16C16C16C14C007FFFFFFFFF FFF4012AAAAAAAAAAA940215555555555553FD9B1DF623A67E8C007FFFFFFFFFFFF401 2AAAAAAAAAAA94022AAAAAAAAAAAA3FDCD2DE3EF5005DC007FFFFFFFFFFFF4012AAAAA AAAAAA94023FFFFFFFFFFFF3FE0123456789ABBC007FFFFFFFFFFFF401555555555555 4C0240000000000003FD20FEDCBA98763C007FFFFFFFFFFFF4015555555555554C022A AAAAAAAAAAB3FCFC3518A6DFC33C007FFFFFFFFFFFF4015555555555554C0215555555 555563FCBC7DEA00C22E2C007FFFFFFFFFFFF4015555555555554C0200000000000013 FC82D82D82D82D7C007FFFFFFFFFFFF4015555555555554C01D5555555555573FC4F43 E32D21C0EC007FFFFFFFFFFFF4015555555555554C01AAAAAAAAAAAAC3FC21C10AFF9E E8AC007FFFFFFFFFFFF4015555555555554C0180000000000013FBF49F49F49F499C00 7FFFFFFFFFFFF4015555555555554C0155555555555563FBB1DF623A67EA4C007FFFFF FFFFFFF4015555555555554C012AAAAAAAAAAAB3FB7B425ED097B3AC007FFFFFFFFFFF F4015555555555554C0100000000000003FB50C83FB72EA59C007FFFFFFFFFFFF40155 55555555554C00AAAAAAAAAAAAB3FB327104EE2CC02C007FFFFFFFFFFFF40155555555 55554C0055555555555563FB203CAE7592034C007FFFFFFFFFFFF4015555555555554C 0000000000000013FB1A2B3C4D5E6EFC007FFFFFFFFFFFF4015555555555554BFF5555 5555555583FB203CAE7592034C007FFFFFFFFFFFF4015555555555554BFE5555555555 55B3FB327104EE2CC01C007FFFFFFFFFFFF4015555555555554BCC80000000000003FB 50C83FB72EA58C007FFFFFFFFFFFF40155555555555543FE555555555554F3FB7B425E D097B38C007FFFFFFFFFFFF40155555555555543FF55555555555523FBB1DF623A67EA 2C007FFFFFFFFFFFF40155555555555543FFFFFFFFFFFFFFC3FBF49F49F49F495C007F FFFFFFFFFFF401555555555555440055555555555533FC21C10AFF9EE89C007FFFFFFF FFFFF4015555555555554400AAAAAAAAAAAA83FC4F43E32D21C0BC007FFFFFFFFFFFF4 015555555555554400FFFFFFFFFFFFD3FC82D82D82D82D2C007FFFFFFFFFFFF4015555 5555555544012AAAAAAAAAAA93FCBC7DEA00C22DDC007FFFFFFFFFFFF4015555555555 55440155555555555543FCFC3518A6DFC2FC007FFFFFFFFFFFF4015555555555554401 7FFFFFFFFFFFF3FD20FEDCBA98762C007FFFFFFFFFFFF4015555555555554401AAAAAA AAAAAAA3FD46EBE635DAD50C007FFFFFFFFFFFF4015555555555554401D55555555555 53FD6FE1A8C536FDFC007FFFFFFFFFFFF401555555555555440200000000000003FD9B E02468ACF12C007FFFFFFFFFFFF401555555555555440215555555555553FDCAE75920 3CAE5C007FFFFFFFFFFFF40155555555555544022AAAAAAAAAAAA3FDFCF746EBE635AC 007FFFFFFFFFFFF40155555555555544023FFFFFFFFFFFF3FE1907F6E5D4C39C007FFF FFFFFFFFF4017FFFFFFFFFFFFC0240000000000003FD5555555555553C007FFFFFFFFF FFF4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD327104EE2CC09C007FFFFFFFFFFFF401 7FFFFFFFFFFFFC0215555555555563FD12956D9B1DF61C007FFFFFFFFFFFF4017FFFFF FFFFFFFC0200000000000013FCEB851EB851EB6C007FFFFFFFFFFFF4017FFFFFFFFFFF FC01D5555555555573FCB7F0D4629B7EEC007FFFFFFFFFFFF4017FFFFFFFFFFFFC01AA AAAAAAAAAAC3FC8A6DFC3518A6AC007FFFFFFFFFFFF4017FFFFFFFFFFFFC0180000000 000013FC62FC962FC962CC007FFFFFFFFFFFF4017FFFFFFFFFFFFC0155555555555563 FC419CA252ADB32C007FFFFFFFFFFFF4017FFFFFFFFFFFFC012AAAAAAAAAAAB3FC264E 209DC597DC007FFFFFFFFFFFF4017FFFFFFFFFFFFC0100000000000003FC1111111111 10CC007FFFFFFFFFFFF4017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FC01E573AC901E0C00 7FFFFFFFFFFFF4017FFFFFFFFFFFFC0055555555555563FBF19690E0857F3C007FFFFF FFFFFFF4017FFFFFFFFFFFFC0000000000000013FBEB851EB851EAEC007FFFFFFFFFFF F4017FFFFFFFFFFFFBFF55555555555583FBF19690E0857F3C007FFFFFFFFFFFF4017F FFFFFFFFFFFBFE555555555555B3FC01E573AC901E0C007FFFFFFFFFFFF4017FFFFFFF FFFFFBCC80000000000003FC111111111110CC007FFFFFFFFFFFF4017FFFFFFFFFFFF3 FE555555555554F3FC264E209DC597CC007FFFFFFFFFFFF4017FFFFFFFFFFFF3FF5555 5555555523FC419CA252ADB31C007FFFFFFFFFFFF4017FFFFFFFFFFFF3FFFFFFFFFFFF FFC3FC62FC962FC962AC007FFFFFFFFFFFF4017FFFFFFFFFFFF40055555555555533FC 8A6DFC3518A68C007FFFFFFFFFFFF4017FFFFFFFFFFFF400AAAAAAAAAAAA83FCB7F0D4 629B7EAC007FFFFFFFFFFFF4017FFFFFFFFFFFF400FFFFFFFFFFFFD3FCEB851EB851EB 1C007FFFFFFFFFFFF4017FFFFFFFFFFFF4012AAAAAAAAAAA93FD12956D9B1DF5FC007F FFFFFFFFFFF4017FFFFFFFFFFFF40155555555555543FD327104EE2CC07C007FFFFFFF FFFFF4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FD5555555555552C007FFFFFFFFFFFF4 017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD7B425ED097B3FC007FFFFFFFFFFFF4017FFF FFFFFFFFF401D5555555555553FDA438215FF3DCFC007FFFFFFFFFFFF4017FFFFFFFFF FFF40200000000000003FDD0369D0369D02C007FFFFFFFFFFFF4017FFFFFFFFFFFF402 15555555555553FDFF3DD1BAF98D4C007FFFFFFFFFFFF4017FFFFFFFFFFFF4022AAAAA AAAAAAA3FE18A6DFC3518A5C007FFFFFFFFFFFF4017FFFFFFFFFFFF4023FFFFFFFFFFF F3FE3333333333331C007FFFFFFFFFFFF401AAAAAAAAAAAAAC0240000000000003FD8E 38E38E38E37C007FFFFFFFFFFFF401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD6B549327 104EEC007FFFFFFFFFFFF401AAAAAAAAAAAAAC0215555555555563FD4B78FBD401845C 007FFFFFFFFFFFF401AAAAAAAAAAAAAC0200000000000013FD2EA61D950C83FC007FFF FFFFFFFFF401AAAAAAAAAAAAAC01D5555555555573FD14DBF86A314DBC007FFFFFFFFF FFF401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FCFC3518A6DFC33C007FFFFFFFFFFFF401 AAAAAAAAAAAAAC0180000000000013FCD4C3B2A1907F5C007FFFFFFFFFFFF401AAAAAA AAAAAAAC0155555555555563FCB363BEC474CFBC007FFFFFFFFFFFF401AAAAAAAAAAAA AC012AAAAAAAAAAAB3FC98153D0F8CB46C007FFFFFFFFFFFF401AAAAAAAAAAAAAC0100 000000000003FC82D82D82D82D5C007FFFFFFFFFFFF401AAAAAAAAAAAAAC00AAAAAAAA AAAAB3FC73AC901E573A9C007FFFFFFFFFFFF401AAAAAAAAAAAAAC0055555555555563 FC6A9264E209DC2C007FFFFFFFFFFFF401AAAAAAAAAAAAAC0000000000000013FC6789 ABCDF0120C007FFFFFFFFFFFF401AAAAAAAAAAAAABFF55555555555583FC6A9264E209 DC3C007FFFFFFFFFFFF401AAAAAAAAAAAAABFE555555555555B3FC73AC901E573A9C00 7FFFFFFFFFFFF401AAAAAAAAAAAAABCC80000000000003FC82D82D82D82D5C007FFFFF FFFFFFF401AAAAAAAAAAAAA3FE555555555554F3FC98153D0F8CB45C007FFFFFFFFFFF F401AAAAAAAAAAAAA3FF55555555555523FCB363BEC474CFAC007FFFFFFFFFFFF401AA AAAAAAAAAAA3FFFFFFFFFFFFFFC3FCD4C3B2A1907F3C007FFFFFFFFFFFF401AAAAAAAA AAAAA40055555555555533FCFC3518A6DFC31C007FFFFFFFFFFFF401AAAAAAAAAAAAA4 00AAAAAAAAAAAA83FD14DBF86A314DAC007FFFFFFFFFFFF401AAAAAAAAAAAAA400FFFF FFFFFFFFD3FD2EA61D950C83DC007FFFFFFFFFFFF401AAAAAAAAAAAAA4012AAAAAAAAA AA93FD4B78FBD401843C007FFFFFFFFFFFF401AAAAAAAAAAAAA40155555555555543FD 6B549327104ECC007FFFFFFFFFFFF401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FD8E38E3 8E38E36C007FFFFFFFFFFFF401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FDB425ED097B42 4C007FFFFFFFFFFFF401AAAAAAAAAAAAA401D5555555555553FDDD1BAF98D76B3C007F FFFFFFFFFFF401AAAAAAAAAAAAA40200000000000003FE048D159E26AF3C007FFFFFFF FFFFF401AAAAAAAAAAAAA40215555555555553FE1C10AFF9EE8DCC007FFFFFFFFFFFF4 01AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE3518A6DFC3517C007FFFFFFFFFFFF401AAAA AAAAAAAAA4023FFFFFFFFFFFF3FE4FA4FA4FA4FA4C007FFFFFFFFFFFF401D555555555 555C0240000000000003FDCBA987654320FC007FFFFFFFFFFFF401D555555555555C02 2AAAAAAAAAAAB3FDA8C536FE1A8C5C007FFFFFFFFFFFF401D555555555555C02155555 55555563FD88E99FAB0BC1DC007FFFFFFFFFFFF401D555555555555C02000000000000 13FD6C16C16C16C17C007FFFFFFFFFFFF401D555555555555C01D5555555555573FD52 4C9C413B8B3C007FFFFFFFFFFFF401D555555555555C01AAAAAAAAAAAAC3FD3B8B302A 7A1F1C007FFFFFFFFFFFF401D555555555555C0180000000000013FD27D27D27D27D2C 007FFFFFFFFFFFF401D555555555555C0155555555555563FD1722833944A55C007FFF FFFFFFFFF401D555555555555C012AAAAAAAAAAAB3FD097B425ED097AC007FFFFFFFFF FFF401D555555555555C0100000000000003FCFDB97530ECA84C007FFFFFFFFFFFF401 D555555555555C00AAAAAAAAAAAAB3FCEE8DD7CC6BB58C007FFFFFFFFFFFF401D55555 5555555C0055555555555563FCE573AC901E571C007FFFFFFFFFFFF401D55555555555 5C0000000000000013FCE26AF37C048CFC007FFFFFFFFFFFF401D555555555555BFF55 555555555583FCE573AC901E572C007FFFFFFFFFFFF401D555555555555BFE55555555 5555B3FCEE8DD7CC6BB58C007FFFFFFFFFFFF401D555555555555BCC80000000000003 FCFDB97530ECA84C007FFFFFFFFFFFF401D5555555555553FE555555555554F3FD097B 425ED097AC007FFFFFFFFFFFF401D5555555555553FF55555555555523FD1722833944 A55C007FFFFFFFFFFFF401D5555555555553FFFFFFFFFFFFFFC3FD27D27D27D27D1C00 7FFFFFFFFFFFF401D55555555555540055555555555533FD3B8B302A7A1F0C007FFFFF FFFFFFF401D555555555555400AAAAAAAAAAAA83FD524C9C413B8B2C007FFFFFFFFFFF F401D555555555555400FFFFFFFFFFFFD3FD6C16C16C16C15C007FFFFFFFFFFFF401D5 555555555554012AAAAAAAAAAA93FD88E99FAB0BC1AC007FFFFFFFFFFFF401D5555555 5555540155555555555543FDA8C536FE1A8C4C007FFFFFFFFFFFF401D5555555555554 017FFFFFFFFFFFF3FDCBA987654320EC007FFFFFFFFFFFF401D555555555555401AAAA AAAAAAAAA3FDF19690E0857FCC007FFFFFFFFFFFF401D555555555555401D555555555 5553FE0D4629B7F0D46C007FFFFFFFFFFFF401D55555555555540200000000000003FE 23456789ABCDFC007FFFFFFFFFFFF401D55555555555540215555555555553FE3AC901 E573AC8C007FFFFFFFFFFFF401D5555555555554022AAAAAAAAAAAA3FE53D0F8CB4870 3C007FFFFFFFFFFFF401D5555555555554023FFFFFFFFFFFF3FE6E5D4C3B2A18FC007F FFFFFFFFFFF4020000000000000C0240000000000003FE06D3A06D3A06DC007FFFFFFF FFFFF4020000000000000C022AAAAAAAAAAAB3FDEAC2F0734B790C007FFFFFFFFFFFF4 020000000000000C0215555555555563FDCAE759203CAE8C007FFFFFFFFFFFF4020000 000000000C0200000000000013FDAE147AE147AE2C007FFFFFFFFFFFF4020000000000 000C01D5555555555573FD944A55B66C77EC007FFFFFFFFFFFF4020000000000000C01 AAAAAAAAAAAAC3FD7D88E99FAB0BCC007FFFFFFFFFFFF4020000000000000C01800000 00000013FD69D0369D0369DC007FFFFFFFFFFFF4020000000000000C01555555555555 63FD59203CAE75920C007FFFFFFFFFFFF4020000000000000C012AAAAAAAAAAAB3FD4B 78FBD401845C007FFFFFFFFFFFF4020000000000000C0100000000000003FD40DA740D A740DC007FFFFFFFFFFFF4020000000000000C00AAAAAAAAAAAAB3FD3944A55B66C77C 007FFFFFFFFFFFF4020000000000000C0055555555555563FD34B78FBD40184C007FFF FFFFFFFFF4020000000000000C0000000000000013FD3333333333333C007FFFFFFFFF FFF4020000000000000BFF55555555555583FD34B78FBD40184C007FFFFFFFFFFFF402 0000000000000BFE555555555555B3FD3944A55B66C77C007FFFFFFFFFFFF402000000 0000000BCC80000000000003FD40DA740DA740DC007FFFFFFFFFFFF402000000000000 03FE555555555554F3FD4B78FBD401845C007FFFFFFFFFFFF40200000000000003FF55 555555555523FD59203CAE75920C007FFFFFFFFFFFF40200000000000003FFFFFFFFFF FFFFC3FD69D0369D0369CC007FFFFFFFFFFFF402000000000000040055555555555533 FD7D88E99FAB0BBC007FFFFFFFFFFFF4020000000000000400AAAAAAAAAAAA83FD944A 55B66C77DC007FFFFFFFFFFFF4020000000000000400FFFFFFFFFFFFD3FDAE147AE147 AE0C007FFFFFFFFFFFF40200000000000004012AAAAAAAAAAA93FDCAE759203CAE5C00 7FFFFFFFFFFFF402000000000000040155555555555543FDEAC2F0734B78FC007FFFFF FFFFFFF40200000000000004017FFFFFFFFFFFF3FE06D3A06D3A06DC007FFFFFFFFFFF F4020000000000000401AAAAAAAAAAAAA3FE19CA252ADB363C007FFFFFFFFFFFF40200 00000000000401D5555555555553FE2E450672894ABC007FFFFFFFFFFFF40200000000 0000040200000000000003FE4444444444444C007FFFFFFFFFFFF40200000000000004 0215555555555553FE5BC7DEA00C22EC007FFFFFFFFFFFF40200000000000004022AAA AAAAAAAAA3FE74CFD585E0E68C007FFFFFFFFFFFF40200000000000004023FFFFFFFFF FFF3FE8F5C28F5C28F5C007FFFFFFFFFFFF4021555555555555C0240000000000003FE 2A1907F6E5D4CC007FFFFFFFFFFFF4021555555555555C022AAAAAAAAAAAB3FE18A6DF C3518A7C007FFFFFFFFFFFF4021555555555555C0215555555555563FE08B91419CA25 2C007FFFFFFFFFFFF4021555555555555C0200000000000013FDF49F49F49F49FC007F FFFFFFFFFFF4021555555555555C01D5555555555573FDDAD524C9C413BC007FFFFFFF FFFFF4021555555555555C01AAAAAAAAAAAAC3FDC413B8B302A79C007FFFFFFFFFFFF4 021555555555555C0180000000000013FDB05B05B05B05AC007FFFFFFFFFFFF4021555 555555555C0155555555555563FD9FAB0BC1CD2DDC007FFFFFFFFFFFF4021555555555 555C012AAAAAAAAAAAB3FD9203CAE759202C007FFFFFFFFFFFF4021555555555555C01 00000000000003FD87654320FEDCAC007FFFFFFFFFFFF4021555555555555C00AAAAAA AAAAAAB3FD7FCF746EBE634C007FFFFFFFFFFFF4021555555555555C00555555555555 63FD7B425ED097B41C007FFFFFFFFFFFF4021555555555555C0000000000000013FD79 BE02468ACF0C007FFFFFFFFFFFF4021555555555555BFF55555555555583FD7B425ED0 97B41C007FFFFFFFFFFFF4021555555555555BFE555555555555B3FD7FCF746EBE634C 007FFFFFFFFFFFF4021555555555555BCC80000000000003FD87654320FEDCAC007FFF FFFFFFFFF40215555555555553FE555555555554F3FD9203CAE759202C007FFFFFFFFF FFF40215555555555553FF55555555555523FD9FAB0BC1CD2DDC007FFFFFFFFFFFF402 15555555555553FFFFFFFFFFFFFFC3FDB05B05B05B059C007FFFFFFFFFFFF402155555 555555540055555555555533FDC413B8B302A78C007FFFFFFFFFFFF402155555555555 5400AAAAAAAAAAAA83FDDAD524C9C413AC007FFFFFFFFFFFF4021555555555555400FF FFFFFFFFFFD3FDF49F49F49F49DC007FFFFFFFFFFFF40215555555555554012AAAAAAA AAAA93FE08B91419CA251C007FFFFFFFFFFFF402155555555555540155555555555543 FE18A6DFC3518A6C007FFFFFFFFFFFF40215555555555554017FFFFFFFFFFFF3FE2A19 07F6E5D4BC007FFFFFFFFFFFF4021555555555555401AAAAAAAAAAAAA3FE3D0F8CB487 042C007FFFFFFFFFFFF4021555555555555401D5555555555553FE518A6DFC3518AC00 7FFFFFFFFFFFF402155555555555540200000000000003FE6789ABCDF0123C007FFFFF FFFFFFF402155555555555540215555555555553FE7F0D4629B7F0CC007FFFFFFFFFFF F40215555555555554022AAAAAAAAAAAA3FE98153D0F8CB47C007FFFFFFFFFFFF40215 555555555554023FFFFFFFFFFFF3FEB2A1907F6E5D3C007FFFFFFFFFFFF4022AAAAAAA AAAAAC0240000000000003FE4FA4FA4FA4FA3C007FFFFFFFFFFFF4022AAAAAAAAAAAAC 022AAAAAAAAAAAB3FE3E32D21C10AFFC007FFFFFFFFFFFF4022AAAAAAAAAAAAC021555 5555555563FE2E450672894AAC007FFFFFFFFFFFF4022AAAAAAAAAAAAC020000000000 0013FE1FDB97530ECA8C007FFFFFFFFFFFF4022AAAAAAAAAAAAC01D5555555555573FE 12F684BDA12F6C007FFFFFFFFFFFF4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FE0795CE B240795C007FFFFFFFFFFFF4022AAAAAAAAAAAAC0180000000000013FDFB72EA61D950 AC007FFFFFFFFFFFF4022AAAAAAAAAAAAC0155555555555563FDEAC2F0734B78DC007F FFFFFFFFFFF4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FDDD1BAF98D76B2C007FFFFFFF FFFFF4022AAAAAAAAAAAAC0100000000000003FDD27D27D27D27AC007FFFFFFFFFFFF4 022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FDCAE759203CAE4C007FFFFFFFFFFFF4022AAA AAAAAAAAAC0055555555555563FDC65A438215FF1C007FFFFFFFFFFFF4022AAAAAAAAA AAAC0000000000000013FDC4D5E6F8091A0C007FFFFFFFFFFFF4022AAAAAAAAAAAABFF 55555555555583FDC65A438215FF1C007FFFFFFFFFFFF4022AAAAAAAAAAAABFE555555 555555B3FDCAE759203CAE4C007FFFFFFFFFFFF4022AAAAAAAAAAAABCC800000000000 03FDD27D27D27D27AC007FFFFFFFFFFFF4022AAAAAAAAAAAA3FE555555555554F3FDDD 1BAF98D76B2C007FFFFFFFFFFFF4022AAAAAAAAAAAA3FF55555555555523FDEAC2F073 4B78DC007FFFFFFFFFFFF4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FDFB72EA61D9509C 007FFFFFFFFFFFF4022AAAAAAAAAAAA40055555555555533FE0795CEB240794C007FFF FFFFFFFFF4022AAAAAAAAAAAA400AAAAAAAAAAAA83FE12F684BDA12F5C007FFFFFFFFF FFF4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE1FDB97530ECA7C007FFFFFFFFFFFF402 2AAAAAAAAAAAA4012AAAAAAAAAAA93FE2E450672894A9C007FFFFFFFFFFFF4022AAAAA AAAAAAA40155555555555543FE3E32D21C10AFEC007FFFFFFFFFFFF4022AAAAAAAAAAA A4017FFFFFFFFFFFF3FE4FA4FA4FA4FA3C007FFFFFFFFFFFF4022AAAAAAAAAAAA401AA AAAAAAAAAAA3FE629B7F0D4629AC007FFFFFFFFFFFF4022AAAAAAAAAAAA401D5555555 555553FE77166054F43E1C007FFFFFFFFFFFF4022AAAAAAAAAAAA40200000000000003 FE8D159E26AF37BC007FFFFFFFFFFFF4022AAAAAAAAAAAA40215555555555553FEA499 388277164C007FFFFFFFFFFFF4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FEBDA12F684B D9FC007FFFFFFFFFFFF4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FED82D82D82D82BC00 7FFFFFFFFFFFF4023FFFFFFFFFFFFC0240000000000003FE7777777777775C007FFFFF FFFFFFF4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE66054F43E32D1C007FFFFFFFFFFF F4023FFFFFFFFFFFFC0215555555555563FE5617839A5BC7CC007FFFFFFFFFFFF4023F FFFFFFFFFFFC0200000000000013FE47AE147AE147AC007FFFFFFFFFFFF4023FFFFFFF FFFFFC01D5555555555573FE3AC901E573AC8C007FFFFFFFFFFFF4023FFFFFFFFFFFFC 01AAAAAAAAAAAAC3FE2F684BDA12F67C007FFFFFFFFFFFF4023FFFFFFFFFFFFC018000 0000000013FE258BF258BF257C007FFFFFFFFFFFF4023FFFFFFFFFFFFC015555555555 5563FE1D33F56178398C007FFFFFFFFFFFF4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE 166054F43E32BC007FFFFFFFFFFFF4023FFFFFFFFFFFFC0100000000000003FE111111 111110FC007FFFFFFFFFFFF4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE0D4629B7F0D4 4C007FFFFFFFFFFFF4023FFFFFFFFFFFFC0055555555555563FE0AFF9EE8DD7CAC007F FFFFFFFFFFF4023FFFFFFFFFFFFC0000000000000013FE0A3D70A3D70A1C007FFFFFFF FFFFF4023FFFFFFFFFFFFBFF55555555555583FE0AFF9EE8DD7CAC007FFFFFFFFFFFF4 023FFFFFFFFFFFFBFE555555555555B3FE0D4629B7F0D44C007FFFFFFFFFFFF4023FFF FFFFFFFFFBCC80000000000003FE111111111110FC007FFFFFFFFFFFF4023FFFFFFFFF FFF3FE555555555554F3FE166054F43E32BC007FFFFFFFFFFFF4023FFFFFFFFFFFF3FF 55555555555523FE1D33F56178398C007FFFFFFFFFFFF4023FFFFFFFFFFFF3FFFFFFFF FFFFFFC3FE258BF258BF256C007FFFFFFFFFFFF4023FFFFFFFFFFFF400555555555555 33FE2F684BDA12F66C007FFFFFFFFFFFF4023FFFFFFFFFFFF400AAAAAAAAAAAA83FE3A C901E573AC6C007FFFFFFFFFFFF4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE47AE147A E1479C007FFFFFFFFFFFF4023FFFFFFFFFFFF4012AAAAAAAAAAA93FE5617839A5BC7BC 007FFFFFFFFFFFF4023FFFFFFFFFFFF40155555555555543FE66054F43E32D0C007FFF FFFFFFFFF4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE7777777777775C007FFFFFFFFF FFF4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE8A6DFC3518A6CC007FFFFFFFFFFFF402 3FFFFFFFFFFFF401D5555555555553FE9EE8DD7CC6BB3C007FFFFFFFFFFFF4023FFFFF FFFFFFF40200000000000003FEB4E81B4E81B4DC007FFFFFFFFFFFF4023FFFFFFFFFFF F40215555555555553FECC6BB5AA49936C007FFFFFFFFFFFF4023FFFFFFFFFFFF4022A AAAAAAAAAAA3FEE573AC901E571C007FFFFFFFFFFFF4023FFFFFFFFFFFF4023FFFFFFF FFFFF3FEFFFFFFFFFFFFDC006AAAAAAAAAAAAC024000000000000C0240000000000003 FD4444444444444C006AAAAAAAAAAAAC024000000000000C022AAAAAAAAAAAB3FD215F F3DD1BAFAC006AAAAAAAAAAAAC024000000000000C0215555555555563FD01845C8A0C E52C006AAAAAAAAAAAAC024000000000000C0200000000000013FCC962FC962FC99C00 6AAAAAAAAAAAAC024000000000000C01D5555555555573FC95CEB240795D0C006AAAAA AAAAAAAC024000000000000C01AAAAAAAAAAAAC3FC684BDA12F684DC006AAAAAAAAAAA AC024000000000000C0180000000000013FC40DA740DA740FC006AAAAAAAAAAAAC0240 00000000000C0155555555555563FC1F7A80308B914C006AAAAAAAAAAAAC0240000000 00000C012AAAAAAAAAAAB3FC042BFE7BA375FC006AAAAAAAAAAAAC024000000000000C 0100000000000003FBDDDDDDDDDDDDEC006AAAAAAAAAAAAC024000000000000C00AAAA AAAAAAAAB3FBBF86A314DBF86C006AAAAAAAAAAAAC024000000000000C005555555555 5563FBAD524C9C413B8C006AAAAAAAAAAAAC024000000000000C0000000000000013FB A740DA740DA73C006AAAAAAAAAAAAC024000000000000BFF55555555555583FBAD524C 9C413B8C006AAAAAAAAAAAAC024000000000000BFE555555555555B3FBBF86A314DBF8 5C006AAAAAAAAAAAAC024000000000000BCC80000000000003FBDDDDDDDDDDDDCC006A AAAAAAAAAAAC0240000000000003FE555555555554F3FC042BFE7BA375EC006AAAAAAA AAAAAC0240000000000003FF55555555555523FC1F7A80308B913C006AAAAAAAAAAAAC 0240000000000003FFFFFFFFFFFFFFC3FC40DA740DA740DC006AAAAAAAAAAAAC024000 00000000040055555555555533FC684BDA12F684BC006AAAAAAAAAAAAC024000000000 000400AAAAAAAAAAAA83FC95CEB240795CDC006AAAAAAAAAAAAC024000000000000400 FFFFFFFFFFFFD3FCC962FC962FC94C006AAAAAAAAAAAAC0240000000000004012AAAAA AAAAAA93FD01845C8A0CE50C006AAAAAAAAAAAAC024000000000000401555555555555 43FD215FF3DD1BAF9C006AAAAAAAAAAAAC0240000000000004017FFFFFFFFFFFF3FD44 44444444443C006AAAAAAAAAAAAC024000000000000401AAAAAAAAAAAAA3FD6A314DBF 86A31C006AAAAAAAAAAAAC024000000000000401D5555555555553FD9327104EE2CC0C 006AAAAAAAAAAAAC02400000000000040200000000000003FDBF258BF258BF2C006AAA AAAAAAAAAC02400000000000040215555555555553FDEE2CC0A9E87C6C006AAAAAAAAA AAAC0240000000000004022AAAAAAAAAAAA3FE101E573AC901DC006AAAAAAAAAAAAC02 40000000000004023FFFFFFFFFFFF3FE2AAAAAAAAAAAAC006AAAAAAAAAAAAC022AAAAA AAAAAABC0240000000000003FD0FEDCBA987655C006AAAAAAAAAAAAC022AAAAAAAAAAA BC022AAAAAAAAAAAB3FCDA12F684BDA17C006AAAAAAAAAAAAC022AAAAAAAAAAABC0215 555555555563FC9A5BC7DEA00C6C006AAAAAAAAAAAAC022AAAAAAAAAAABC0200000000 000013FC60B60B60B60BBC006AAAAAAAAAAAAC022AAAAAAAAAAABC01D5555555555573 FC2D21C10AFF9F2C006AAAAAAAAAAAAC022AAAAAAAAAAABC01AAAAAAAAAAAAC3FBFF3D D1BAF98DDC006AAAAAAAAAAAAC022AAAAAAAAAAABC0180000000000013FBB05B05B05B 061C006AAAAAAAAAAAAC022AAAAAAAAAAABC0155555555555563FB6D9B1DF623A6CC00 6AAAAAAAAAAAAC022AAAAAAAAAAABC012AAAAAAAAAAAB3FB36FE1A8C53702C006AAAAA AAAAAAAC022AAAAAAAAAAABC0100000000000003FB0C83FB72EA621C006AAAAAAAAAAA AC022AAAAAAAAAAABC00AAAAAAAAAAAAB3FADC598153D0F94C006AAAAAAAAAAAAC022A AAAAAAAAAABC0055555555555563FAB7F0D4629B7F8C006AAAAAAAAAAAAC022AAAAAAA AAAABC0000000000000013FAABCDF0123456FC006AAAAAAAAAAAAC022AAAAAAAAAAABB FF55555555555583FAB7F0D4629B7F7C006AAAAAAAAAAAAC022AAAAAAAAAAABBFE5555 55555555B3FADC598153D0F93C006AAAAAAAAAAAAC022AAAAAAAAAAABBCC8000000000 0003FB0C83FB72EA620C006AAAAAAAAAAAAC022AAAAAAAAAAAB3FE555555555554F3FB 36FE1A8C53700C006AAAAAAAAAAAAC022AAAAAAAAAAAB3FF55555555555523FB6D9B1D F623A6AC006AAAAAAAAAAAAC022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FBB05B05B05B05 DC006AAAAAAAAAAAAC022AAAAAAAAAAAB40055555555555533FBFF3DD1BAF98D9C006A AAAAAAAAAAAC022AAAAAAAAAAAB400AAAAAAAAAAAA83FC2D21C10AFF9EFC006AAAAAAA AAAAAC022AAAAAAAAAAAB400FFFFFFFFFFFFD3FC60B60B60B60B6C006AAAAAAAAAAAAC 022AAAAAAAAAAAB4012AAAAAAAAAAA93FC9A5BC7DEA00C1C006AAAAAAAAAAAAC022AAA AAAAAAAAB40155555555555543FCDA12F684BDA13C006AAAAAAAAAAAAC022AAAAAAAAA AAB4017FFFFFFFFFFFF3FD0FEDCBA987654C006AAAAAAAAAAAAC022AAAAAAAAAAAB401 AAAAAAAAAAAAA3FD35DAD524C9C42C006AAAAAAAAAAAAC022AAAAAAAAAAAB401D55555 55555553FD5ED097B425ED1C006AAAAAAAAAAAAC022AAAAAAAAAAAB402000000000000 03FD8ACF13579BE04C006AAAAAAAAAAAAC022AAAAAAAAAAAB40215555555555553FDB9 D6480F2B9D7C006AAAAAAAAAAAAC022AAAAAAAAAAAB4022AAAAAAAAAAAA3FDEBE635DA D524CC006AAAAAAAAAAAAC022AAAAAAAAAAAB4023FFFFFFFFFFFF3FE107F6E5D4C3B2C 006AAAAAAAAAAAAC021555555555556C0240000000000003FCC048D159E26B2C006AAA AAAAAAAAAC021555555555556C022AAAAAAAAAAAB3FC7A80308B9141FC006AAAAAAAAA AAAC021555555555556C0215555555555563FC3AC901E573ACDC006AAAAAAAAAAAAC02 1555555555556C0200000000000013FC0123456789AC2C006AAAAAAAAAAAAC02155555 5555556C01D5555555555573FB9B1DF623A67F4C006AAAAAAAAAAAAC02155555555555 6C01AAAAAAAAAAAAC3FB401845C8A0CECC006AAAAAAAAAAAAC021555555555556C0180 000000000013FAE26AF37C048E2C006AAAAAAAAAAAAC021555555555556C0155555555 555563FA5CEB240795CF7C006AAAAAAAAAAAAC021555555555556C012AAAAAAAAAAAB3 F9DF623A67EAC48C006AAAAAAAAAAAAC021555555555556C0100000000000003F93579 BE02468C2C006AAAAAAAAAAAAC021555555555556C00AAAAAAAAAAAAB3F87839A5BC7D ECBC006AAAAAAAAAAAAC021555555555556C0055555555555563F7CD2DE3EF500B4C00 6AAAAAAAAAAAAC021555555555556C0000000000000013F76C16C16C16C6AC006AAAAA AAAAAAAC021555555555556BFF55555555555583F7CD2DE3EF500B2C006AAAAAAAAAAA AC021555555555556BFE555555555555B3F87839A5BC7DEC7C006AAAAAAAAAAAAC0215 55555555556BCC80000000000003F93579BE02468BFC006AAAAAAAAAAAAC0215555555 555563FE555555555554F3F9DF623A67EAC41C006AAAAAAAAAAAAC0215555555555563 FF55555555555523FA5CEB240795CF3C006AAAAAAAAAAAAC0215555555555563FFFFFF FFFFFFFFC3FAE26AF37C048D9C006AAAAAAAAAAAAC0215555555555564005555555555 5533FB401845C8A0CE8C006AAAAAAAAAAAAC021555555555556400AAAAAAAAAAAA83FB 9B1DF623A67EEC006AAAAAAAAAAAAC021555555555556400FFFFFFFFFFFFD3FC012345 6789ABEC006AAAAAAAAAAAAC0215555555555564012AAAAAAAAAAA93FC3AC901E573AC 9C006AAAAAAAAAAAAC02155555555555640155555555555543FC7A80308B9141BC006A AAAAAAAAAAAC0215555555555564017FFFFFFFFFFFF3FCC048D159E26B0C006AAAAAAA AAAAAC021555555555556401AAAAAAAAAAAAA3FD0611722833946C006AAAAAAAAAAAAC 021555555555556401D5555555555553FD2F0734B78FBD5C006AAAAAAAAAAAAC021555 55555555640200000000000003FD5B05B05B05B08C006AAAAAAAAAAAAC021555555555 55640215555555555553FD8A0CE512956DAC006AAAAAAAAAAAAC021555555555556402 2AAAAAAAAAAAA3FDBC1CD2DE3EF50C006AAAAAAAAAAAAC0215555555555564023FFFFF FFFFFFF3FDF13579BE02469C006AAAAAAAAAAAAC020000000000001C02400000000000 03FC69D0369D036A1C006AAAAAAAAAAAAC020000000000001C022AAAAAAAAAAAB3FC24 0795CEB240DC006AAAAAAAAAAAAC020000000000001C0215555555555563FBC8A0CE51 29578C006AAAAAAAAAAAAC020000000000001C0200000000000013FB5555555555563C 006AAAAAAAAAAAAC020000000000001C01D5555555555573FADC598153D0FA5C006AAA AAAAAAAAAC020000000000001C01AAAAAAAAAAAAC3FA264E209DC5995C006AAAAAAAAA AAAC020000000000001C0180000000000013F91111111111139C006AAAAAAAAAAAAC02 0000000000001C0155555555555563F3845C8A0CE591BC006AAAAAAAAAAAAC02000000 0000001C012AAAAAAAAAAABBF8A8C536FE1A880C006AAAAAAAAAAAAC02000000000000 1C010000000000000BF97E4B17E4B17C6C006AAAAAAAAAAAAC020000000000001C00AA AAAAAAAAAABBF9F7A80308B9121C006AAAAAAAAAAAAC020000000000001C0055555555 55556BFA203CAE759202DC006AAAAAAAAAAAAC020000000000001C000000000000001B FA2C5F92C5F92B7C006AAAAAAAAAAAAC020000000000001BFF5555555555558BFA203C AE759202EC006AAAAAAAAAAAAC020000000000001BFE555555555555BBF9F7A80308B9 127C006AAAAAAAAAAAAC020000000000001BCC8000000000000BF97E4B17E4B17CAC00 6AAAAAAAAAAAAC0200000000000013FE555555555554FBF8A8C536FE1A891C006AAAAA AAAAAAAC0200000000000013FF55555555555523F3845C8A0CE5789C006AAAAAAAAAAA AC0200000000000013FFFFFFFFFFFFFFC3F91111111111129C006AAAAAAAAAAAAC0200 0000000000140055555555555533FA264E209DC598CC006AAAAAAAAAAAAC0200000000 00001400AAAAAAAAAAAA83FADC598153D0F97C006AAAAAAAAAAAAC0200000000000014 00FFFFFFFFFFFFD3FB5555555555559C006AAAAAAAAAAAAC0200000000000014012AAA AAAAAAAA93FBC8A0CE5129571C006AAAAAAAAAAAAC0200000000000014015555555555 5543FC240795CEB240AC006AAAAAAAAAAAAC0200000000000014017FFFFFFFFFFFF3FC 69D0369D0369FC006AAAAAAAAAAAAC020000000000001401AAAAAAAAAAAAA3FCB5AA49 938827AC006AAAAAAAAAAAAC020000000000001401D5555555555553FD03CAE759203C DC006AAAAAAAAAAAAC02000000000000140200000000000003FD2FC962FC962FFC006A AAAAAAAAAAAC02000000000000140215555555555553FD5ED097B425ED2C006AAAAAAA AAAAAC0200000000000014022AAAAAAAAAAAA3FD90E0857FCF747C006AAAAAAAAAAAAC 0200000000000014023FFFFFFFFFFFF3FDC5F92C5F92C60C006AAAAAAAAAAAAC01D555 555555557C0240000000000003FC1C71C71C71C73C006AAAAAAAAAAAAC01D555555555 557C022AAAAAAAAAAAB3FBAD524C9C413C0C006AAAAAAAAAAAAC01D555555555557C02 15555555555563FB2DE3EF500611EC006AAAAAAAAAAAAC01D555555555557C02000000 00000013FA7530ECA86420EC006AAAAAAAAAAAAC01D555555555557C01D55555555555 73F94DBF86A314DD9C006AAAAAAAAAAAAC01D555555555557C01AAAAAAAAAAAACBF5E5 73AC901E3ECC006AAAAAAAAAAAAC01D555555555557C018000000000001BF959E26AF3 7C02FC006AAAAAAAAAAAAC01D555555555557C015555555555556BFA327104EE2CC02C 006AAAAAAAAAAAAC01D555555555557C012AAAAAAAAAAABBFA9FAB0BC1CD2D6C006AAA AAAAAAAAAC01D555555555557C010000000000000BFAF49F49F49F499C006AAAAAAAAA AAAC01D555555555557C00AAAAAAAAAAAABBFB18A6DFC3518A3C006AAAAAAAAAAAAC01 D555555555557C005555555555556BFB2ADB363BEC471C006AAAAAAAAAAAAC01D55555 5555557C000000000000001BFB30ECA8641FDB7C006AAAAAAAAAAAAC01D55555555555 7BFF5555555555558BFB2ADB363BEC472C006AAAAAAAAAAAAC01D555555555557BFE55 5555555555BBFB18A6DFC3518A4C006AAAAAAAAAAAAC01D555555555557BCC80000000 00000BFAF49F49F49F49AC006AAAAAAAAAAAAC01D5555555555573FE555555555554FB FA9FAB0BC1CD2DAC006AAAAAAAAAAAAC01D5555555555573FF5555555555552BFA3271 04EE2CC07C006AAAAAAAAAAAAC01D5555555555573FFFFFFFFFFFFFFCBF959E26AF37C 042C006AAAAAAAAAAAAC01D5555555555574005555555555553BF5E573AC901E52CC00 6AAAAAAAAAAAAC01D555555555557400AAAAAAAAAAAA83F94DBF86A314DC2C006AAAAA AAAAAAAC01D555555555557400FFFFFFFFFFFFD3FA7530ECA8641FDC006AAAAAAAAAAA AC01D5555555555574012AAAAAAAAAAA93FB2DE3EF5006116C006AAAAAAAAAAAAC01D5 5555555555740155555555555543FBAD524C9C413B9C006AAAAAAAAAAAAC01D5555555 555574017FFFFFFFFFFFF3FC1C71C71C71C72C006AAAAAAAAAAAAC01D5555555555574 01AAAAAAAAAAAAA3FC684BDA12F684DC006AAAAAAAAAAAAC01D555555555557401D555 5555555553FCBA375F31AED6CC006AAAAAAAAAAAAC01D5555555555574020000000000 0003FD091A2B3C4D5E8C006AAAAAAAAAAAAC01D55555555555740215555555555553FD 38215FF3DD1BBC006AAAAAAAAAAAAC01D5555555555574022AAAAAAAAAAAA3FD6A314D BF86A31C006AAAAAAAAAAAAC01D5555555555574023FFFFFFFFFFFF3FD9F49F49F49F4 9C006AAAAAAAAAAAAC01AAAAAAAAAAAACC0240000000000003FBB05B05B05B05FC006A AAAAAAAAAAAC01AAAAAAAAAAAACC022AAAAAAAAAAAB3FB24C9C413B8B36C006AAAAAAA AAAAAC01AAAAAAAAAAAACC0215555555555563FA4AB6CD8EFB129C006AAAAAAAAAAAAC 01AAAAAAAAAAAACC0200000000000013F8907F6E5D4C3F7C006AAAAAAAAAAAAC01AAAA AAAAAAAACC01D555555555557BF8A8C536FE1A88EC006AAAAAAAAAAAAC01AAAAAAAAAA AACC01AAAAAAAAAAAACBFA203CAE7592033C006AAAAAAAAAAAAC01AAAAAAAAAAAACC01 8000000000001BFABE02468ACF12BC006AAAAAAAAAAAAC01AAAAAAAAAAAACC01555555 5555556BFB21C10AFF9EE8BC006AAAAAAAAAAAAC01AAAAAAAAAAAACC012AAAAAAAAAAA BBFB585E0E696F1F5C006AAAAAAAAAAAAC01AAAAAAAAAAAACC010000000000000BFB82 D82D82D82D6C006AAAAAAAAAAAAC01AAAAAAAAAAAACC00AAAAAAAAAAAABBFBA12F684B DA12DC006AAAAAAAAAAAAC01AAAAAAAAAAAACC005555555555556BFBB363BEC474CFBC 006AAAAAAAAAAAAC01AAAAAAAAAAAACC000000000000001BFBB97530ECA8640C006AAA AAAAAAAAAC01AAAAAAAAAAAACBFF5555555555558BFBB363BEC474CFBC006AAAAAAAAA AAAC01AAAAAAAAAAAACBFE555555555555BBFBA12F684BDA12EC006AAAAAAAAAAAAC01 AAAAAAAAAAAACBCC8000000000000BFB82D82D82D82D7C006AAAAAAAAAAAAC01AAAAAA AAAAAAC3FE555555555554FBFB585E0E696F1F7C006AAAAAAAAAAAAC01AAAAAAAAAAAA C3FF5555555555552BFB21C10AFF9EE8DC006AAAAAAAAAAAAC01AAAAAAAAAAAAC3FFFF FFFFFFFFFFCBFABE02468ACF134C006AAAAAAAAAAAAC01AAAAAAAAAAAAC40055555555 55553BFA203CAE759203DC006AAAAAAAAAAAAC01AAAAAAAAAAAAC400AAAAAAAAAAAA8B F8A8C536FE1A8C8C006AAAAAAAAAAAAC01AAAAAAAAAAAAC400FFFFFFFFFFFFD3F8907F 6E5D4C3A8C006AAAAAAAAAAAAC01AAAAAAAAAAAAC4012AAAAAAAAAAA93FA4AB6CD8EFB 11AC006AAAAAAAAAAAAC01AAAAAAAAAAAAC40155555555555543FB24C9C413B8B2FC00 6AAAAAAAAAAAAC01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FBB05B05B05B05AC006AAAAA AAAAAAAC01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FC240795CEB2408C006AAAAAAAAAAA AC01AAAAAAAAAAAAC401D5555555555553FC75F31AED6A927C006AAAAAAAAAAAAC01AA AAAAAAAAAAC40200000000000003FCCDF012345678CC006AAAAAAAAAAAAC01AAAAAAAA AAAAC40215555555555553FD15FF3DD1BAF99C006AAAAAAAAAAAAC01AAAAAAAAAAAAC4 022AAAAAAAAAAAA3FD480F2B9D6480EC006AAAAAAAAAAAAC01AAAAAAAAAAAAC4023FFF FFFFFFFFF3FD7D27D27D27D27C006AAAAAAAAAAAAC018000000000001C024000000000 0003FB3A06D3A06D3A7C006AAAAAAAAAAAAC018000000000001C022AAAAAAAAAAAB3FA 5CEB240795CFCC006AAAAAAAAAAAAC018000000000001C0215555555555563F87839A5 BC7DEE4C006AAAAAAAAAAAAC018000000000001C020000000000001BF911111111110E 5C006AAAAAAAAAAAAC018000000000001C01D555555555557BFA56D9B1DF62393C006A AAAAAAAAAAAC018000000000001C01AAAAAAAAAAAACBFB0672894AB6CD2C006AAAAAAA AAAAAC018000000000001C018000000000001BFB555555555554EC006AAAAAAAAAAAAC 018000000000001C015555555555556BFB98153D0F8CB43C006AAAAAAAAAAAAC018000 000000001C012AAAAAAAAAAABBFBCEB240795CEADC006AAAAAAAAAAAAC018000000000 001C010000000000000BFBF92C5F92C5F8EC006AAAAAAAAAAAAC018000000000001C00 AAAAAAAAAAAABBFC0BC1CD2DE3EF3C006AAAAAAAAAAAAC018000000000001C00555555 5555556BFC14DBF86A314DAC006AAAAAAAAAAAAC018000000000001C00000000000000 1BFC17E4B17E4B17CC006AAAAAAAAAAAAC018000000000001BFF5555555555558BFC14 DBF86A314D9C006AAAAAAAAAAAAC018000000000001BFE555555555555BBFC0BC1CD2D E3EF3C006AAAAAAAAAAAAC018000000000001BCC8000000000000BFBF92C5F92C5F8FC 006AAAAAAAAAAAAC0180000000000013FE555555555554FBFBCEB240795CEAFC006AAA AAAAAAAAAC0180000000000013FF5555555555552BFB98153D0F8CB45C006AAAAAAAAA AAAC0180000000000013FFFFFFFFFFFFFFCBFB5555555555552C006AAAAAAAAAAAAC01 80000000000014005555555555553BFB0672894AB6CD6C006AAAAAAAAAAAAC01800000 0000001400AAAAAAAAAAAA8BFA56D9B1DF623A3C006AAAAAAAAAAAAC01800000000000 1400FFFFFFFFFFFFDBF9111111111110CC006AAAAAAAAAAAAC0180000000000014012A AAAAAAAAAA93F87839A5BC7DEA6C006AAAAAAAAAAAAC01800000000000140155555555 555543FA5CEB240795CEEC006AAAAAAAAAAAAC0180000000000014017FFFFFFFFFFFF3 FB3A06D3A06D3A2C006AAAAAAAAAAAAC018000000000001401AAAAAAAAAAAAA3FBD1BA F98D76B58C006AAAAAAAAAAAAC018000000000001401D5555555555553FC3AC901E573 ACBC006AAAAAAAAAAAAC01800000000000140200000000000003FC92C5F92C5F930C00 6AAAAAAAAAAAAC01800000000000140215555555555553FCF0D4629B7F0D6C006AAAAA AAAAAAAC0180000000000014022AAAAAAAAAAAA3FD2A7A1F19690E0C006AAAAAAAAAAA AC0180000000000014023FFFFFFFFFFFF3FD5F92C5F92C5F9C006AAAAAAAAAAAAC0155 55555555556C0240000000000003FAABCDF01234566C006AAAAAAAAAAAAC0155555555 55556C022AAAAAAAAAAAB3F92956D9B1DF630C006AAAAAAAAAAAAC015555555555556C 021555555555556BF8A8C536FE1A8ACC006AAAAAAAAAAAAC015555555555556C020000 000000001BFA50C83FB72EA56C006AAAAAAAAAAAAC015555555555556C01D555555555 557BFB0F8CB487042BCC006AAAAAAAAAAAAC015555555555556C01AAAAAAAAAAAACBFB 6A9264E209DC4C006AAAAAAAAAAAAC015555555555556C018000000000001BFBB97530 ECA8640C006AAAAAAAAAAAAC015555555555556C015555555555556BFBFC3518A6DFC3 5C006AAAAAAAAAAAAC015555555555556C012AAAAAAAAAAABBFC19690E0857FCFC006A AAAAAAAAAAAC015555555555556C010000000000000BFC2EA61D950C840C006AAAAAAA AAAAAC015555555555556C00AAAAAAAAAAAABBFC3DD1BAF98D76CC006AAAAAAAAAAAAC 015555555555556C005555555555556BFC46EBE635DAD53C006AAAAAAAAAAAAC015555 555555556C000000000000001BFC49F49F49F49F5C006AAAAAAAAAAAAC015555555555 556BFF5555555555558BFC46EBE635DAD52C006AAAAAAAAAAAAC015555555555556BFE 555555555555BBFC3DD1BAF98D76CC006AAAAAAAAAAAAC015555555555556BCC800000 0000000BFC2EA61D950C840C006AAAAAAAAAAAAC0155555555555563FE555555555554 FBFC19690E0857FD0C006AAAAAAAAAAAAC0155555555555563FF5555555555552BFBFC 3518A6DFC36C006AAAAAAAAAAAAC0155555555555563FFFFFFFFFFFFFFCBFBB97530EC A8644C006AAAAAAAAAAAAC0155555555555564005555555555553BFB6A9264E209DC8C 006AAAAAAAAAAAAC015555555555556400AAAAAAAAAAAA8BFB0F8CB487042C3C006AAA AAAAAAAAAC015555555555556400FFFFFFFFFFFFDBFA50C83FB72EA6AC006AAAAAAAAA AAAC0155555555555564012AAAAAAAAAAA9BF8A8C536FE1A8EAC006AAAAAAAAAAAAC01 555555555555640155555555555543F92956D9B1DF613C006AAAAAAAAAAAAC01555555 55555564017FFFFFFFFFFFF3FAABCDF0123455FC006AAAAAAAAAAAAC01555555555555 6401AAAAAAAAAAAAA3FB6D9B1DF623A66C006AAAAAAAAAAAAC015555555555556401D5 555555555553FC08B91419CA252C006AAAAAAAAAAAAC01555555555555640200000000 000003FC60B60B60B60B6C006AAAAAAAAAAAAC01555555555555640215555555555553 FCBEC474CFD585DC006AAAAAAAAAAAAC0155555555555564022AAAAAAAAAAAA3FD1172 2833944A4C006AAAAAAAAAAAAC0155555555555564023FFFFFFFFFFFF3FD468ACF1357 9BCC006AAAAAAAAAAAAC012AAAAAAAAAAABC0240000000000003FA07F6E5D4C3B2EC00 6AAAAAAAAAAAAC012AAAAAAAAAAABC022AAAAAAAAAAABBF5E573AC901E3F8C006AAAAA AAAAAAAC012AAAAAAAAAAABC021555555555556BFA0E0857FCF7463C006AAAAAAAAAAA AC012AAAAAAAAAAABC020000000000001BFAF49F49F49F48EC006AAAAAAAAAAAAC012A AAAAAAAAAABC01D555555555557BFB617839A5BC7D8C006AAAAAAAAAAAAC012AAAAAAA AAAABC01AAAAAAAAAAAACBFBBC7DEA00C22E0C006AAAAAAAAAAAAC012AAAAAAAAAAABC 018000000000001BFC05B05B05B05AEC006AAAAAAAAAAAAC012AAAAAAAAAAABC015555 555555556BFC27104EE2CC0A8C006AAAAAAAAAAAAC012AAAAAAAAAAABC012AAAAAAAAA AABBFC425ED097B425DC006AAAAAAAAAAAAC012AAAAAAAAAAABC010000000000000BFC 579BE02468ACEC006AAAAAAAAAAAAC012AAAAAAAAAAABC00AAAAAAAAAAAABBFC66C77D 88E99FAC006AAAAAAAAAAAAC012AAAAAAAAAAABC005555555555556BFC6FE1A8C536FE 1C006AAAAAAAAAAAAC012AAAAAAAAAAABC000000000000001BFC72EA61D950C83C006A AAAAAAAAAAAC012AAAAAAAAAAABBFF5555555555558BFC6FE1A8C536FE0C006AAAAAAA AAAAAC012AAAAAAAAAAABBFE555555555555BBFC66C77D88E99FAC006AAAAAAAAAAAAC 012AAAAAAAAAAABBCC8000000000000BFC579BE02468ACEC006AAAAAAAAAAAAC012AAA AAAAAAAAB3FE555555555554FBFC425ED097B425EC006AAAAAAAAAAAAC012AAAAAAAAA AAB3FF5555555555552BFC27104EE2CC0A9C006AAAAAAAAAAAAC012AAAAAAAAAAAB3FF FFFFFFFFFFFFCBFC05B05B05B05B0C006AAAAAAAAAAAAC012AAAAAAAAAAAB400555555 5555553BFBBC7DEA00C22E5C006AAAAAAAAAAAAC012AAAAAAAAAAAB400AAAAAAAAAAAA 8BFB617839A5BC7DFC006AAAAAAAAAAAAC012AAAAAAAAAAAB400FFFFFFFFFFFFDBFAF4 9F49F49F4A2C006AAAAAAAAAAAAC012AAAAAAAAAAAB4012AAAAAAAAAAA9BFA0E0857FC F7472C006AAAAAAAAAAAAC012AAAAAAAAAAAB4015555555555554BF5E573AC901E5CAC 006AAAAAAAAAAAAC012AAAAAAAAAAAB4017FFFFFFFFFFFF3FA07F6E5D4C3B27C006AAA AAAAAAAAAC012AAAAAAAAAAAB401AAAAAAAAAAAAA3FB1BAF98D76B54AC006AAAAAAAAA AAAC012AAAAAAAAAAAB401D5555555555553FBBF86A314DBF88C006AAAAAAAAAAAAC01 2AAAAAAAAAAAB40200000000000003FC37C048D159E28C006AAAAAAAAAAAAC012AAAAA AAAAAAB40215555555555553FC95CEB240795CFC006AAAAAAAAAAAAC012AAAAAAAAAAA B4022AAAAAAAAAAAA3FCF9EE8DD7CC6BAC006AAAAAAAAAAAAC012AAAAAAAAAAAB4023F FFFFFFFFFFF3FD320FEDCBA9875C006AAAAAAAAAAAAC010000000000000C0240000000 000003F9111111111110CC006AAAAAAAAAAAAC010000000000000C022AAAAAAAAAAABB F91D33F56178390C006AAAAAAAAAAAAC010000000000000C021555555555556BFA8D76 B5493270BC006AAAAAAAAAAAAC010000000000000C020000000000001BFB3A06D3A06D 39BC006AAAAAAAAAAAAC010000000000000C01D555555555557BFBA12F684BDA12CC00 6AAAAAAAAAAAAC010000000000000C01AAAAAAAAAAAACBFBFC3518A6DFC34C006AAAAA AAAAAAAC010000000000000C018000000000001BFC258BF258BF258C006AAAAAAAAAAA AC010000000000000C015555555555556BFC46EBE635DAD52C006AAAAAAAAAAAAC0100 00000000000C012AAAAAAAAAAABBFC623A67EAC2F07C006AAAAAAAAAAAAC0100000000 00000C010000000000000BFC7777777777778C006AAAAAAAAAAAAC010000000000000C 00AAAAAAAAAAAABBFC86A314DBF86A4C006AAAAAAAAAAAAC010000000000000C005555 555555556BFC8FBD401845C8BC006AAAAAAAAAAAAC010000000000000C000000000000 001BFC92C5F92C5F92DC006AAAAAAAAAAAAC010000000000000BFF5555555555558BFC 8FBD401845C8AC006AAAAAAAAAAAAC010000000000000BFE555555555555BBFC86A314 DBF86A4C006AAAAAAAAAAAAC010000000000000BCC8000000000000BFC777777777777 8C006AAAAAAAAAAAAC0100000000000003FE555555555554FBFC623A67EAC2F08C006A AAAAAAAAAAAC0100000000000003FF5555555555552BFC46EBE635DAD53C006AAAAAAA AAAAAC0100000000000003FFFFFFFFFFFFFFCBFC258BF258BF25AC006AAAAAAAAAAAAC 0100000000000004005555555555553BFBFC3518A6DFC39C006AAAAAAAAAAAAC010000 000000000400AAAAAAAAAAAA8BFBA12F684BDA133C006AAAAAAAAAAAAC010000000000 000400FFFFFFFFFFFFDBFB3A06D3A06D3A5C006AAAAAAAAAAAAC010000000000000401 2AAAAAAAAAAA9BFA8D76B5493271AC006AAAAAAAAAAAAC010000000000000401555555 5555554BF91D33F561783ADC006AAAAAAAAAAAAC0100000000000004017FFFFFFFFFFF F3F911111111110FEC006AAAAAAAAAAAAC010000000000000401AAAAAAAAAAAAA3FAB7 F0D4629B7ECC006AAAAAAAAAAAAC010000000000000401D5555555555553FB7FCF746E BE634C006AAAAAAAAAAAAC01000000000000040200000000000003FC17E4B17E4B17EC 006AAAAAAAAAAAAC01000000000000040215555555555553FC75F31AED6A925C006AAA AAAAAAAAAC0100000000000004022AAAAAAAAAAAA3FCDA12F684BDA10C006AAAAAAAAA AAAC0100000000000004023FFFFFFFFFFFF3FD2222222222220C006AAAAAAAAAAAAC00 AAAAAAAAAAAABC0240000000000003F76C16C16C16C2EC006AAAAAAAAAAAAC00AAAAAA AAAAAABC022AAAAAAAAAAABBF9D33F561783990C006AAAAAAAAAAAAC00AAAAAAAAAAAA BC021555555555556BFAE87C65A438213C006AAAAAAAAAAAAC00AAAAAAAAAAAABC0200 00000000001BFB6789ABCDF011FC006AAAAAAAAAAAAC00AAAAAAAAAAAABC01D5555555 55557BFBCEB240795CEB0C006AAAAAAAAAAAAC00AAAAAAAAAAAABC01AAAAAAAAAAAACB FC14DBF86A314DCC006AAAAAAAAAAAAC00AAAAAAAAAAAABC018000000000001BFC3C4D 5E6F8091AC006AAAAAAAAAAAAC00AAAAAAAAAAAABC015555555555556BFC5DAD524C9C 412C006AAAAAAAAAAAAC00AAAAAAAAAAAABC012AAAAAAAAAAABBFC78FBD401845C7C00 6AAAAAAAAAAAAC00AAAAAAAAAAAABC010000000000000BFC8E38E38E38E39C006AAAAA AAAAAAAC00AAAAAAAAAAAABC00AAAAAAAAAAAABBFC9D6480F2B9D65C006AAAAAAAAAAA AC00AAAAAAAAAAAABC005555555555556BFCA67EAC2F0734CC006AAAAAAAAAAAAC00AA AAAAAAAAAABC000000000000001BFCA987654320FEEC006AAAAAAAAAAAAC00AAAAAAAA AAAABBFF5555555555558BFCA67EAC2F0734BC006AAAAAAAAAAAAC00AAAAAAAAAAAABB FE555555555555BBFC9D6480F2B9D65C006AAAAAAAAAAAAC00AAAAAAAAAAAABBCC8000 000000000BFC8E38E38E38E39C006AAAAAAAAAAAAC00AAAAAAAAAAAAB3FE5555555555 54FBFC78FBD401845C9C006AAAAAAAAAAAAC00AAAAAAAAAAAAB3FF5555555555552BFC 5DAD524C9C414C006AAAAAAAAAAAAC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC3C4D5E 6F8091BC006AAAAAAAAAAAAC00AAAAAAAAAAAAB4005555555555553BFC14DBF86A314D DC006AAAAAAAAAAAAC00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFBCEB240795CEB5C006A AAAAAAAAAAAC00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFB6789ABCDF0127C006AAAAAAA AAAAAC00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFAE87C65A43821EC006AAAAAAAAAAAAC 00AAAAAAAAAAAAB4015555555555554BF9D33F5617839B5C006AAAAAAAAAAAAC00AAAA AAAAAAAAB4017FFFFFFFFFFFF3F76C16C16C16BD7C006AAAAAAAAAAAAC00AAAAAAAAAA AAB401AAAAAAAAAAAAA3FA5CEB240795CE8C006AAAAAAAAAAAAC00AAAAAAAAAAAAB401 D5555555555553FB524C9C413B8B2C006AAAAAAAAAAAAC00AAAAAAAAAAAAB402000000 00000003FC0123456789ABEC006AAAAAAAAAAAAC00AAAAAAAAAAAAB402155555555555 53FC5F31AED6A9264C006AAAAAAAAAAAAC00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FCC3 518A6DFC34FC006AAAAAAAAAAAAC00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD16C16C16 C16C0C006AAAAAAAAAAAAC005555555555556C024000000000000BF523456789ABD48C 006AAAAAAAAAAAAC005555555555556C022AAAAAAAAAAABBFA203CAE7592038C006AAA AAAAAAAAAC005555555555556C021555555555556BFB0F8CB487042BEC006AAAAAAAAA AAAC005555555555556C020000000000001BFB82D82D82D82D3C006AAAAAAAAAAAAC00 5555555555556C01D555555555557BFBEA00C22E45064C006AAAAAAAAAAAAC00555555 5555556C01AAAAAAAAAAAACBFC22833944A55B6C006AAAAAAAAAAAAC00555555555555 6C018000000000001BFC49F49F49F49F4C006AAAAAAAAAAAAC005555555555556C0155 55555555556BFC6B549327104EEC006AAAAAAAAAAAAC005555555555556C012AAAAAAA AAAABBFC86A314DBF86A3C006AAAAAAAAAAAAC005555555555556C010000000000000B FC9BE02468ACF14C006AAAAAAAAAAAAC005555555555556C00AAAAAAAAAAAABBFCAB0B C1CD2DE40C006AAAAAAAAAAAAC005555555555556C005555555555556BFCB425ED097B 427C006AAAAAAAAAAAAC005555555555556C000000000000001BFCB72EA61D950C9C00 6AAAAAAAAAAAAC005555555555556BFF5555555555558BFCB425ED097B426C006AAAAA AAAAAAAC005555555555556BFE555555555555BBFCAB0BC1CD2DE40C006AAAAAAAAAAA AC005555555555556BCC8000000000000BFC9BE02468ACF14C006AAAAAAAAAAAAC0055 555555555563FE555555555554FBFC86A314DBF86A4C006AAAAAAAAAAAAC0055555555 555563FF5555555555552BFC6B549327104EFC006AAAAAAAAAAAAC0055555555555563 FFFFFFFFFFFFFFCBFC49F49F49F49F6C006AAAAAAAAAAAAC0055555555555564005555 555555553BFC22833944A55B8C006AAAAAAAAAAAAC005555555555556400AAAAAAAAAA AA8BFBEA00C22E4506BC006AAAAAAAAAAAAC005555555555556400FFFFFFFFFFFFDBFB 82D82D82D82DDC006AAAAAAAAAAAAC0055555555555564012AAAAAAAAAAA9BFB0F8CB4 87042C5C006AAAAAAAAAAAAC0055555555555564015555555555554BFA203CAE759204 6C006AAAAAAAAAAAAC0055555555555564017FFFFFFFFFFFFBF523456789ABE22C006A AAAAAAAAAAAC005555555555556401AAAAAAAAAAAAA3FA264E209DC597CC006AAAAAAA AAAAAC005555555555556401D5555555555553FB36FE1A8C536FCC006AAAAAAAAAAAAC 00555555555555640200000000000003FBE6F8091A2B3C5C006AAAAAAAAAAAAC005555 55555555640215555555555553FC518A6DFC35189C006AAAAAAAAAAAAC005555555555 5564022AAAAAAAAAAAA3FCB5AA499388274C006AAAAAAAAAAAAC005555555555556402 3FFFFFFFFFFFF3FD0FEDCBA987652C006AAAAAAAAAAAAC000000000000001C02400000 0000000BF6B4E81B4E81B24C006AAAAAAAAAAAAC000000000000001C022AAAAAAAAAAA BBFA327104EE2CC00C006AAAAAAAAAAAAC000000000000001C021555555555556BFB18 A6DFC3518A6C006AAAAAAAAAAAAC000000000000001C020000000000001BFB8BF258BF 258BBC006AAAAAAAAAAAAC000000000000001C01D555555555557BFBF31AED6A9264CC 006AAAAAAAAAAAAC000000000000001C01AAAAAAAAAAAACBFC27104EE2CC0AAC006AAA AAAAAAAAAC000000000000001C018000000000001BFC4E81B4E81B4E8C006AAAAAAAAA AAAC000000000000001C015555555555556BFC6FE1A8C536FE0C006AAAAAAAAAAAAC00 0000000000001C012AAAAAAAAAAABBFC8B302A7A1F195C006AAAAAAAAAAAAC00000000 0000001C010000000000000BFCA06D3A06D3A06C006AAAAAAAAAAAAC00000000000000 1C00AAAAAAAAAAAABBFCAF98D76B54933C006AAAAAAAAAAAAC000000000000001C0055 55555555556BFCB8B302A7A1F1AC006AAAAAAAAAAAAC000000000000001C0000000000 00001BFCBBBBBBBBBBBBCC006AAAAAAAAAAAAC000000000000001BFF5555555555558B FCB8B302A7A1F19C006AAAAAAAAAAAAC000000000000001BFE555555555555BBFCAF98 D76B54933C006AAAAAAAAAAAAC000000000000001BCC8000000000000BFCA06D3A06D3 A07C006AAAAAAAAAAAAC0000000000000013FE555555555554FBFC8B302A7A1F197C00 6AAAAAAAAAAAAC0000000000000013FF5555555555552BFC6FE1A8C536FE2C006AAAAA AAAAAAAC0000000000000013FFFFFFFFFFFFFFCBFC4E81B4E81B4E9C006AAAAAAAAAAA AC0000000000000014005555555555553BFC27104EE2CC0ABC006AAAAAAAAAAAAC0000 00000000001400AAAAAAAAAAAA8BFBF31AED6A92651C006AAAAAAAAAAAAC0000000000 00001400FFFFFFFFFFFFDBFB8BF258BF258C3C006AAAAAAAAAAAAC0000000000000014 012AAAAAAAAAAA9BFB18A6DFC3518ABC006AAAAAAAAAAAAC0000000000000014015555 555555554BFA327104EE2CC12C006AAAAAAAAAAAAC0000000000000014017FFFFFFFFF FFFBF6B4E81B4E81BD1C006AAAAAAAAAAAAC000000000000001401AAAAAAAAAAAAA3FA 1419CA252ADB0C006AAAAAAAAAAAAC000000000000001401D5555555555553FB2DE3EF 5006116C006AAAAAAAAAAAAC00000000000000140200000000000003FBDDDDDDDDDDDD FC006AAAAAAAAAAAAC00000000000000140215555555555553FC4CFD585E0E696C006A AAAAAAAAAAAC0000000000000014022AAAAAAAAAAAA3FCB11D33F561781C006AAAAAAA AAAAAC0000000000000014023FFFFFFFFFFFF3FD0DA740DA740D9C006AAAAAAAAAAAAB FF5555555555558C024000000000000BF523456789ABD48C006AAAAAAAAAAAABFF5555 555555558C022AAAAAAAAAAABBFA203CAE7592038C006AAAAAAAAAAAABFF5555555555 558C021555555555556BFB0F8CB487042BEC006AAAAAAAAAAAABFF5555555555558C02 0000000000001BFB82D82D82D82D3C006AAAAAAAAAAAABFF5555555555558C01D55555 5555557BFBEA00C22E45064C006AAAAAAAAAAAABFF5555555555558C01AAAAAAAAAAAA CBFC22833944A55B6C006AAAAAAAAAAAABFF5555555555558C018000000000001BFC49 F49F49F49F4C006AAAAAAAAAAAABFF5555555555558C015555555555556BFC6B549327 104EEC006AAAAAAAAAAAABFF5555555555558C012AAAAAAAAAAABBFC86A314DBF86A3C 006AAAAAAAAAAAABFF5555555555558C010000000000000BFC9BE02468ACF14C006AAA AAAAAAAAABFF5555555555558C00AAAAAAAAAAAABBFCAB0BC1CD2DE40C006AAAAAAAAA AAABFF5555555555558C005555555555556BFCB425ED097B427C006AAAAAAAAAAAABFF 5555555555558C000000000000001BFCB72EA61D950C9C006AAAAAAAAAAAABFF555555 5555558BFF5555555555558BFCB425ED097B426C006AAAAAAAAAAAABFF555555555555 8BFE555555555555BBFCAB0BC1CD2DE40C006AAAAAAAAAAAABFF5555555555558BCC80 00000000000BFC9BE02468ACF14C006AAAAAAAAAAAABFF55555555555583FE55555555 5554FBFC86A314DBF86A4C006AAAAAAAAAAAABFF55555555555583FF5555555555552B FC6B549327104EFC006AAAAAAAAAAAABFF55555555555583FFFFFFFFFFFFFFCBFC49F4 9F49F49F6C006AAAAAAAAAAAABFF55555555555584005555555555553BFC22833944A5 5B8C006AAAAAAAAAAAABFF5555555555558400AAAAAAAAAAAA8BFBEA00C22E4506BC00 6AAAAAAAAAAAABFF5555555555558400FFFFFFFFFFFFDBFB82D82D82D82DDC006AAAAA AAAAAAABFF55555555555584012AAAAAAAAAAA9BFB0F8CB487042C5C006AAAAAAAAAAA ABFF55555555555584015555555555554BFA203CAE7592046C006AAAAAAAAAAAABFF55 555555555584017FFFFFFFFFFFFBF523456789ABE22C006AAAAAAAAAAAABFF55555555 55558401AAAAAAAAAAAAA3FA264E209DC597CC006AAAAAAAAAAAABFF55555555555584 01D5555555555553FB36FE1A8C536FCC006AAAAAAAAAAAABFF55555555555584020000 0000000003FBE6F8091A2B3C5C006AAAAAAAAAAAABFF55555555555584021555555555 5553FC518A6DFC35189C006AAAAAAAAAAAABFF55555555555584022AAAAAAAAAAAA3FC B5AA499388274C006AAAAAAAAAAAABFF55555555555584023FFFFFFFFFFFF3FD0FEDCB A987652C006AAAAAAAAAAAABFE555555555555BC0240000000000003F76C16C16C16C2 EC006AAAAAAAAAAAABFE555555555555BC022AAAAAAAAAAABBF9D33F561783990C006A AAAAAAAAAAABFE555555555555BC021555555555556BFAE87C65A438213C006AAAAAAA AAAAABFE555555555555BC020000000000001BFB6789ABCDF011FC006AAAAAAAAAAAAB FE555555555555BC01D555555555557BFBCEB240795CEB0C006AAAAAAAAAAAABFE5555 55555555BC01AAAAAAAAAAAACBFC14DBF86A314DCC006AAAAAAAAAAAABFE5555555555 55BC018000000000001BFC3C4D5E6F8091AC006AAAAAAAAAAAABFE555555555555BC01 5555555555556BFC5DAD524C9C412C006AAAAAAAAAAAABFE555555555555BC012AAAAA AAAAAABBFC78FBD401845C7C006AAAAAAAAAAAABFE555555555555BC01000000000000 0BFC8E38E38E38E39C006AAAAAAAAAAAABFE555555555555BC00AAAAAAAAAAAABBFC9D 6480F2B9D65C006AAAAAAAAAAAABFE555555555555BC005555555555556BFCA67EAC2F 0734CC006AAAAAAAAAAAABFE555555555555BC000000000000001BFCA987654320FEEC 006AAAAAAAAAAAABFE555555555555BBFF5555555555558BFCA67EAC2F0734BC006AAA AAAAAAAAABFE555555555555BBFE555555555555BBFC9D6480F2B9D65C006AAAAAAAAA AAABFE555555555555BBCC8000000000000BFC8E38E38E38E39C006AAAAAAAAAAAABFE 555555555555B3FE555555555554FBFC78FBD401845C9C006AAAAAAAAAAAABFE555555 555555B3FF5555555555552BFC5DAD524C9C414C006AAAAAAAAAAAABFE555555555555 B3FFFFFFFFFFFFFFCBFC3C4D5E6F8091BC006AAAAAAAAAAAABFE555555555555B40055 55555555553BFC14DBF86A314DDC006AAAAAAAAAAAABFE555555555555B400AAAAAAAA AAAA8BFBCEB240795CEB5C006AAAAAAAAAAAABFE555555555555B400FFFFFFFFFFFFDB FB6789ABCDF0127C006AAAAAAAAAAAABFE555555555555B4012AAAAAAAAAAA9BFAE87C 65A43821EC006AAAAAAAAAAAABFE555555555555B4015555555555554BF9D33F561783 9B5C006AAAAAAAAAAAABFE555555555555B4017FFFFFFFFFFFF3F76C16C16C16BD7C00 6AAAAAAAAAAAABFE555555555555B401AAAAAAAAAAAAA3FA5CEB240795CE8C006AAAAA AAAAAAABFE555555555555B401D5555555555553FB524C9C413B8B2C006AAAAAAAAAAA ABFE555555555555B40200000000000003FC0123456789ABEC006AAAAAAAAAAAABFE55 5555555555B40215555555555553FC5F31AED6A9264C006AAAAAAAAAAAABFE55555555 5555B4022AAAAAAAAAAAA3FCC3518A6DFC34FC006AAAAAAAAAAAABFE555555555555B4 023FFFFFFFFFFFF3FD16C16C16C16C0C006AAAAAAAAAAAABCC8000000000000C024000 0000000003F9111111111110CC006AAAAAAAAAAAABCC8000000000000C022AAAAAAAAA AABBF91D33F56178390C006AAAAAAAAAAAABCC8000000000000C021555555555556BFA 8D76B5493270BC006AAAAAAAAAAAABCC8000000000000C020000000000001BFB3A06D3 A06D39BC006AAAAAAAAAAAABCC8000000000000C01D555555555557BFBA12F684BDA12 CC006AAAAAAAAAAAABCC8000000000000C01AAAAAAAAAAAACBFBFC3518A6DFC34C006A AAAAAAAAAAABCC8000000000000C018000000000001BFC258BF258BF258C006AAAAAAA AAAAABCC8000000000000C015555555555556BFC46EBE635DAD52C006AAAAAAAAAAAAB CC8000000000000C012AAAAAAAAAAABBFC623A67EAC2F07C006AAAAAAAAAAAABCC8000 000000000C010000000000000BFC7777777777778C006AAAAAAAAAAAABCC8000000000 000C00AAAAAAAAAAAABBFC86A314DBF86A4C006AAAAAAAAAAAABCC8000000000000C00 5555555555556BFC8FBD401845C8BC006AAAAAAAAAAAABCC8000000000000C00000000 0000001BFC92C5F92C5F92DC006AAAAAAAAAAAABCC8000000000000BFF555555555555 8BFC8FBD401845C8AC006AAAAAAAAAAAABCC8000000000000BFE555555555555BBFC86 A314DBF86A4C006AAAAAAAAAAAABCC8000000000000BCC8000000000000BFC77777777 77778C006AAAAAAAAAAAABCC80000000000003FE555555555554FBFC623A67EAC2F08C 006AAAAAAAAAAAABCC80000000000003FF5555555555552BFC46EBE635DAD53C006AAA AAAAAAAAABCC80000000000003FFFFFFFFFFFFFFCBFC258BF258BF25AC006AAAAAAAAA AAABCC80000000000004005555555555553BFBFC3518A6DFC39C006AAAAAAAAAAAABCC 8000000000000400AAAAAAAAAAAA8BFBA12F684BDA133C006AAAAAAAAAAAABCC800000 0000000400FFFFFFFFFFFFDBFB3A06D3A06D3A5C006AAAAAAAAAAAABCC800000000000 04012AAAAAAAAAAA9BFA8D76B5493271AC006AAAAAAAAAAAABCC800000000000040155 55555555554BF91D33F561783ADC006AAAAAAAAAAAABCC80000000000004017FFFFFFF FFFFF3F911111111110FEC006AAAAAAAAAAAABCC8000000000000401AAAAAAAAAAAAA3 FAB7F0D4629B7ECC006AAAAAAAAAAAABCC8000000000000401D5555555555553FB7FCF 746EBE634C006AAAAAAAAAAAABCC800000000000040200000000000003FC17E4B17E4B 17EC006AAAAAAAAAAAABCC800000000000040215555555555553FC75F31AED6A925C00 6AAAAAAAAAAAABCC80000000000004022AAAAAAAAAAAA3FCDA12F684BDA10C006AAAAA AAAAAAABCC80000000000004023FFFFFFFFFFFF3FD2222222222220C006AAAAAAAAAAA A3FE555555555554FC0240000000000003FA07F6E5D4C3B26C006AAAAAAAAAAAA3FE55 5555555554FC022AAAAAAAAAAABBF5E573AC901E4F8C006AAAAAAAAAAAA3FE55555555 5554FC021555555555556BFA0E0857FCF7473C006AAAAAAAAAAAA3FE555555555554FC 020000000000001BFAF49F49F49F49EC006AAAAAAAAAAAA3FE555555555554FC01D555 555555557BFB617839A5BC7E0C006AAAAAAAAAAAA3FE555555555554FC01AAAAAAAAAA AACBFBBC7DEA00C22E8C006AAAAAAAAAAAA3FE555555555554FC018000000000001BFC 05B05B05B05B1C006AAAAAAAAAAAA3FE555555555554FC015555555555556BFC27104E E2CC0ABC006AAAAAAAAAAAA3FE555555555554FC012AAAAAAAAAAABBFC425ED097B426 0C006AAAAAAAAAAAA3FE555555555554FC010000000000000BFC579BE02468AD1C006A AAAAAAAAAAA3FE555555555554FC00AAAAAAAAAAAABBFC66C77D88E99FDC006AAAAAAA AAAAA3FE555555555554FC005555555555556BFC6FE1A8C536FE4C006AAAAAAAAAAAA3 FE555555555554FC000000000000001BFC72EA61D950C86C006AAAAAAAAAAAA3FE5555 55555554FBFF5555555555558BFC6FE1A8C536FE3C006AAAAAAAAAAAA3FE5555555555 54FBFE555555555555BBFC66C77D88E99FDC006AAAAAAAAAAAA3FE555555555554FBCC 8000000000000BFC579BE02468AD1C006AAAAAAAAAAAA3FE555555555554F3FE555555 555554FBFC425ED097B4261C006AAAAAAAAAAAA3FE555555555554F3FF555555555555 2BFC27104EE2CC0ACC006AAAAAAAAAAAA3FE555555555554F3FFFFFFFFFFFFFFCBFC05 B05B05B05B3C006AAAAAAAAAAAA3FE555555555554F4005555555555553BFBBC7DEA00 C22EBC006AAAAAAAAAAAA3FE555555555554F400AAAAAAAAAAAA8BFB617839A5BC7E5C 006AAAAAAAAAAAA3FE555555555554F400FFFFFFFFFFFFDBFAF49F49F49F4AEC006AAA AAAAAAAAA3FE555555555554F4012AAAAAAAAAAA9BFA0E0857FCF747EC006AAAAAAAAA AAA3FE555555555554F4015555555555554BF5E573AC901E74AC006AAAAAAAAAAAA3FE 555555555554F4017FFFFFFFFFFFF3FA07F6E5D4C3B1BC006AAAAAAAAAAAA3FE555555 555554F401AAAAAAAAAAAAA3FB1BAF98D76B544C006AAAAAAAAAAAA3FE555555555554 F401D5555555555553FBBF86A314DBF82C006AAAAAAAAAAAA3FE555555555554F40200 000000000003FC37C048D159E26C006AAAAAAAAAAAA3FE555555555554F40215555555 555553FC95CEB240795CCC006AAAAAAAAAAAA3FE555555555554F4022AAAAAAAAAAAA3 FCF9EE8DD7CC6B7C006AAAAAAAAAAAA3FE555555555554F4023FFFFFFFFFFFF3FD320F EDCBA9874C006AAAAAAAAAAAA3FF5555555555552C0240000000000003FAABCDF01234 566C006AAAAAAAAAAAA3FF5555555555552C022AAAAAAAAAAAB3F92956D9B1DF630C00 6AAAAAAAAAAAA3FF5555555555552C021555555555556BF8A8C536FE1A8CCC006AAAAA AAAAAAA3FF5555555555552C020000000000001BFA50C83FB72EA5EC006AAAAAAAAAAA A3FF5555555555552C01D555555555557BFB0F8CB487042BEC006AAAAAAAAAAAA3FF55 55555555552C01AAAAAAAAAAAACBFB6A9264E209DC6C006AAAAAAAAAAAA3FF55555555 55552C018000000000001BFBB97530ECA8642C006AAAAAAAAAAAA3FF5555555555552C 015555555555556BFBFC3518A6DFC37C006AAAAAAAAAAAA3FF5555555555552C012AAA AAAAAAAABBFC19690E0857FD0C006AAAAAAAAAAAA3FF5555555555552C010000000000 000BFC2EA61D950C841C006AAAAAAAAAAAA3FF5555555555552C00AAAAAAAAAAAABBFC 3DD1BAF98D76DC006AAAAAAAAAAAA3FF5555555555552C005555555555556BFC46EBE6 35DAD54C006AAAAAAAAAAAA3FF5555555555552C000000000000001BFC49F49F49F49F 6C006AAAAAAAAAAAA3FF5555555555552BFF5555555555558BFC46EBE635DAD53C006A AAAAAAAAAAA3FF5555555555552BFE555555555555BBFC3DD1BAF98D76DC006AAAAAAA AAAAA3FF5555555555552BCC8000000000000BFC2EA61D950C841C006AAAAAAAAAAAA3 FF55555555555523FE555555555554FBFC19690E0857FD1C006AAAAAAAAAAAA3FF5555 5555555523FF5555555555552BFBFC3518A6DFC38C006AAAAAAAAAAAA3FF5555555555 5523FFFFFFFFFFFFFFCBFBB97530ECA8646C006AAAAAAAAAAAA3FF5555555555552400 5555555555553BFB6A9264E209DCAC006AAAAAAAAAAAA3FF5555555555552400AAAAAA AAAAAA8BFB0F8CB487042C5C006AAAAAAAAAAAA3FF5555555555552400FFFFFFFFFFFF DBFA50C83FB72EA6EC006AAAAAAAAAAAA3FF55555555555524012AAAAAAAAAAA9BF8A8 C536FE1A8FAC006AAAAAAAAAAAA3FF555555555555240155555555555543F92956D9B1 DF60BC006AAAAAAAAAAAA3FF55555555555524017FFFFFFFFFFFF3FAABCDF0123455BC 006AAAAAAAAAAAA3FF5555555555552401AAAAAAAAAAAAA3FB6D9B1DF623A64C006AAA AAAAAAAAA3FF5555555555552401D5555555555553FC08B91419CA251C006AAAAAAAAA AAA3FF555555555555240200000000000003FC60B60B60B60B6C006AAAAAAAAAAAA3FF 555555555555240215555555555553FCBEC474CFD585CC006AAAAAAAAAAAA3FF555555 55555524022AAAAAAAAAAAA3FD11722833944A3C006AAAAAAAAAAAA3FF555555555555 24023FFFFFFFFFFFF3FD468ACF13579BCC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0240 000000000003FB3A06D3A06D39FC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC022AAAAAAA AAAAB3FA5CEB240795CECC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC0215555555555563 F87839A5BC7DE94C006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC020000000000001BF91111 11111110DC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC01D555555555557BFA56D9B1DF62 3A7C006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFB0672894AB6CDCC00 6AAAAAAAAAAAA3FFFFFFFFFFFFFFCC018000000000001BFB5555555555558C006AAAAA AAAAAAA3FFFFFFFFFFFFFFCC015555555555556BFB98153D0F8CB4BC006AAAAAAAAAAA A3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFBCEB240795CEB5C006AAAAAAAAAAAA3FFFF FFFFFFFFFFCC010000000000000BFBF92C5F92C5F96C006AAAAAAAAAAAA3FFFFFFFFFF FFFFCC00AAAAAAAAAAAABBFC0BC1CD2DE3EF7C006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC 005555555555556BFC14DBF86A314DEC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCC000000 000000001BFC17E4B17E4B181C006AAAAAAAAAAAA3FFFFFFFFFFFFFFCBFF5555555555 558BFC14DBF86A314DEC006AAAAAAAAAAAA3FFFFFFFFFFFFFFCBFE555555555555BBFC 0BC1CD2DE3EF8C006AAAAAAAAAAAA3FFFFFFFFFFFFFFCBCC8000000000000BFBF92C5F 92C5F98C006AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FE555555555554FBFBCEB240795CEB 8C006AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FF5555555555552BFB98153D0F8CB4EC006A AAAAAAAAAAA3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFB555555555555BC006AAAAAAA AAAAA3FFFFFFFFFFFFFFC4005555555555553BFB0672894AB6CDFC006AAAAAAAAAAAA3 FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFA56D9B1DF623B5C006AAAAAAAAAAAA3FFFFFF FFFFFFFFC400FFFFFFFFFFFFDBF91111111111130C006AAAAAAAAAAAA3FFFFFFFFFFFF FFC4012AAAAAAAAAAA93F87839A5BC7DE5EC006AAAAAAAAAAAA3FFFFFFFFFFFFFFC401 55555555555543FA5CEB240795CDCC006AAAAAAAAAAAA3FFFFFFFFFFFFFFC4017FFFFF FFFFFFF3FB3A06D3A06D399C006AAAAAAAAAAAA3FFFFFFFFFFFFFFC401AAAAAAAAAAAA A3FBD1BAF98D76B4FC006AAAAAAAAAAAA3FFFFFFFFFFFFFFC401D5555555555553FC3A C901E573AC7C006AAAAAAAAAAAA3FFFFFFFFFFFFFFC40200000000000003FC92C5F92C 5F92BC006AAAAAAAAAAAA3FFFFFFFFFFFFFFC40215555555555553FCF0D4629B7F0D2C 006AAAAAAAAAAAA3FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FD2A7A1F19690DEC006AAA AAAAAAAAA3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD5F92C5F92C5F7C006AAAAAAAAA AAA4005555555555553C0240000000000003FBB05B05B05B057C006AAAAAAAAAAAA400 5555555555553C022AAAAAAAAAAAB3FB24C9C413B8B30C006AAAAAAAAAAAA400555555 5555553C0215555555555563FA4AB6CD8EFB119C006AAAAAAAAAAAA400555555555555 3C0200000000000013F8907F6E5D4C3B7C006AAAAAAAAAAAA4005555555555553C01D5 55555555557BF8A8C536FE1A8CEC006AAAAAAAAAAAA4005555555555553C01AAAAAAAA AAAACBFA203CAE7592043C006AAAAAAAAAAAA4005555555555553C018000000000001B FABE02468ACF13BC006AAAAAAAAAAAA4005555555555553C015555555555556BFB21C1 0AFF9EE91C006AAAAAAAAAAAA4005555555555553C012AAAAAAAAAAABBFB585E0E696F 1FBC006AAAAAAAAAAAA4005555555555553C010000000000000BFB82D82D82D82DCC00 6AAAAAAAAAAAA4005555555555553C00AAAAAAAAAAAABBFBA12F684BDA133C006AAAAA AAAAAAA4005555555555553C005555555555556BFBB363BEC474D01C006AAAAAAAAAAA A4005555555555553C000000000000001BFBB97530ECA8647C006AAAAAAAAAAAA40055 55555555553BFF5555555555558BFBB363BEC474D02C006AAAAAAAAAAAA40055555555 55553BFE555555555555BBFBA12F684BDA135C006AAAAAAAAAAAA4005555555555553B CC8000000000000BFB82D82D82D82DEC006AAAAAAAAAAAA40055555555555533FE5555 55555554FBFB585E0E696F1FEC006AAAAAAAAAAAA40055555555555533FF5555555555 552BFB21C10AFF9EE94C006AAAAAAAAAAAA40055555555555533FFFFFFFFFFFFFFCBFA BE02468ACF142C006AAAAAAAAAAAA40055555555555534005555555555553BFA203CAE 759204BC006AAAAAAAAAAAA4005555555555553400AAAAAAAAAAAA8BF8A8C536FE1A90 0C006AAAAAAAAAAAA4005555555555553400FFFFFFFFFFFFD3F8907F6E5D4C370C006A AAAAAAAAAAA40055555555555534012AAAAAAAAAAA93FA4AB6CD8EFB10CC006AAAAAAA AAAAA400555555555555340155555555555543FB24C9C413B8B28C006AAAAAAAAAAAA4 0055555555555534017FFFFFFFFFFFF3FBB05B05B05B053C006AAAAAAAAAAAA4005555 555555553401AAAAAAAAAAAAA3FC240795CEB2404C006AAAAAAAAAAAA4005555555555 553401D5555555555553FC75F31AED6A924C006AAAAAAAAAAAA4005555555555553402 00000000000003FCCDF0123456788C006AAAAAAAAAAAA4005555555555553402155555 55555553FD15FF3DD1BAF97C006AAAAAAAAAAAA40055555555555534022AAAAAAAAAAA A3FD480F2B9D6480DC006AAAAAAAAAAAA40055555555555534023FFFFFFFFFFFF3FD7D 27D27D27D25C006AAAAAAAAAAAA400AAAAAAAAAAAA8C0240000000000003FC1C71C71C 71C6FC006AAAAAAAAAAAA400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FBAD524C9C413B8C 006AAAAAAAAAAAA400AAAAAAAAAAAA8C0215555555555563FB2DE3EF5006114C006AAA AAAAAAAAA400AAAAAAAAAAAA8C0200000000000013FA7530ECA8641FEC006AAAAAAAAA AAA400AAAAAAAAAAAA8C01D5555555555573F94DBF86A314DB9C006AAAAAAAAAAAA400 AAAAAAAAAAAA8C01AAAAAAAAAAAACBF5E573AC901E66CC006AAAAAAAAAAAA400AAAAAA AAAAAA8C018000000000001BF959E26AF37C057C006AAAAAAAAAAAA400AAAAAAAAAAAA 8C015555555555556BFA327104EE2CC16C006AAAAAAAAAAAA400AAAAAAAAAAAA8C012A AAAAAAAAAABBFA9FAB0BC1CD2E8C006AAAAAAAAAAAA400AAAAAAAAAAAA8C0100000000 00000BFAF49F49F49F4ABC006AAAAAAAAAAAA400AAAAAAAAAAAA8C00AAAAAAAAAAAABB FB18A6DFC3518ACC006AAAAAAAAAAAA400AAAAAAAAAAAA8C005555555555556BFB2ADB 363BEC47AC006AAAAAAAAAAAA400AAAAAAAAAAAA8C000000000000001BFB30ECA8641F DC0C006AAAAAAAAAAAA400AAAAAAAAAAAA8BFF5555555555558BFB2ADB363BEC47BC00 6AAAAAAAAAAAA400AAAAAAAAAAAA8BFE555555555555BBFB18A6DFC3518ADC006AAAAA AAAAAAA400AAAAAAAAAAAA8BCC8000000000000BFAF49F49F49F4ACC006AAAAAAAAAAA A400AAAAAAAAAAAA83FE555555555554FBFA9FAB0BC1CD2ECC006AAAAAAAAAAAA400AA AAAAAAAAAA83FF5555555555552BFA327104EE2CC19C006AAAAAAAAAAAA400AAAAAAAA AAAA83FFFFFFFFFFFFFFCBF959E26AF37C066C006AAAAAAAAAAAA400AAAAAAAAAAAA84 005555555555553BF5E573AC901E76CC006AAAAAAAAAAAA400AAAAAAAAAAAA8400AAAA AAAAAAAA83F94DBF86A314D9EC006AAAAAAAAAAAA400AAAAAAAAAAAA8400FFFFFFFFFF FFD3FA7530ECA8641EBC006AAAAAAAAAAAA400AAAAAAAAAAAA84012AAAAAAAAAAA93FB 2DE3EF500610DC006AAAAAAAAAAAA400AAAAAAAAAAAA840155555555555543FBAD524C 9C413B0C006AAAAAAAAAAAA400AAAAAAAAAAAA84017FFFFFFFFFFFF3FC1C71C71C71C6 DC006AAAAAAAAAAAA400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FC684BDA12F6848C006A AAAAAAAAAAA400AAAAAAAAAAAA8401D5555555555553FCBA375F31AED67C006AAAAAAA AAAAA400AAAAAAAAAAAA840200000000000003FD091A2B3C4D5E6C006AAAAAAAAAAAA4 00AAAAAAAAAAAA840215555555555553FD38215FF3DD1B9C006AAAAAAAAAAAA400AAAA AAAAAAAA84022AAAAAAAAAAAA3FD6A314DBF86A2EC006AAAAAAAAAAAA400AAAAAAAAAA AA84023FFFFFFFFFFFF3FD9F49F49F49F47C006AAAAAAAAAAAA400FFFFFFFFFFFFDC02 40000000000003FC69D0369D0369AC006AAAAAAAAAAAA400FFFFFFFFFFFFDC022AAAAA AAAAAAB3FC240795CEB2406C006AAAAAAAAAAAA400FFFFFFFFFFFFDC02155555555555 63FBC8A0CE512956AC006AAAAAAAAAAAA400FFFFFFFFFFFFDC0200000000000013FB55 55555555555C006AAAAAAAAAAAA400FFFFFFFFFFFFDC01D5555555555573FADC598153 D0F89C006AAAAAAAAAAAA400FFFFFFFFFFFFDC01AAAAAAAAAAAAC3FA264E209DC5979C 006AAAAAAAAAAAA400FFFFFFFFFFFFDC0180000000000013F91111111111101C006AAA AAAAAAAAA400FFFFFFFFFFFFDC0155555555555563F3845C8A0CE4B1BC006AAAAAAAAA AAA400FFFFFFFFFFFFDC012AAAAAAAAAAABBF8A8C536FE1A8F0C006AAAAAAAAAAAA400 FFFFFFFFFFFFDC010000000000000BF97E4B17E4B17FEC006AAAAAAAAAAAA400FFFFFF FFFFFFDC00AAAAAAAAAAAABBF9F7A80308B9159C006AAAAAAAAAAAA400FFFFFFFFFFFF DC005555555555556BFA203CAE7592049C006AAAAAAAAAAAA400FFFFFFFFFFFFDC0000 00000000001BFA2C5F92C5F92D3C006AAAAAAAAAAAA400FFFFFFFFFFFFDBFF55555555 55558BFA203CAE759204AC006AAAAAAAAAAAA400FFFFFFFFFFFFDBFE555555555555BB F9F7A80308B915FC006AAAAAAAAAAAA400FFFFFFFFFFFFDBCC8000000000000BF97E4B 17E4B1802C006AAAAAAAAAAAA400FFFFFFFFFFFFD3FE555555555554FBF8A8C536FE1A 901C006AAAAAAAAAAAA400FFFFFFFFFFFFD3FF55555555555523F3845C8A0CE4989C00 6AAAAAAAAAAAA400FFFFFFFFFFFFD3FFFFFFFFFFFFFFC3F911111111110F1C006AAAAA AAAAAAA400FFFFFFFFFFFFD40055555555555533FA264E209DC5970C006AAAAAAAAAAA A400FFFFFFFFFFFFD400AAAAAAAAAAAA83FADC598153D0F7BC006AAAAAAAAAAAA400FF FFFFFFFFFFD400FFFFFFFFFFFFD3FB555555555554BC006AAAAAAAAAAAA400FFFFFFFF FFFFD4012AAAAAAAAAAA93FBC8A0CE5129563C006AAAAAAAAAAAA400FFFFFFFFFFFFD4 0155555555555543FC240795CEB2403C006AAAAAAAAAAAA400FFFFFFFFFFFFD4017FFF FFFFFFFFF3FC69D0369D03698C006AAAAAAAAAAAA400FFFFFFFFFFFFD401AAAAAAAAAA AAA3FCB5AA499388273C006AAAAAAAAAAAA400FFFFFFFFFFFFD401D5555555555553FD 03CAE759203C9C006AAAAAAAAAAAA400FFFFFFFFFFFFD40200000000000003FD2FC962 FC962FBC006AAAAAAAAAAAA400FFFFFFFFFFFFD40215555555555553FD5ED097B425EC FC006AAAAAAAAAAAA400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD90E0857FCF744C006A AAAAAAAAAAA400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FDC5F92C5F92C5CC006AAAAAAA AAAAA4012AAAAAAAAAAA9C0240000000000003FCC048D159E26ACC006AAAAAAAAAAAA4 012AAAAAAAAAAA9C022AAAAAAAAAAAB3FC7A80308B91418C006AAAAAAAAAAAA4012AAA AAAAAAAA9C0215555555555563FC3AC901E573AC7C006AAAAAAAAAAAA4012AAAAAAAAA AA9C0200000000000013FC0123456789ABCC006AAAAAAAAAAAA4012AAAAAAAAAAA9C01 D5555555555573FB9B1DF623A67E7C006AAAAAAAAAAAA4012AAAAAAAAAAA9C01AAAAAA AAAAAAC3FB401845C8A0CDFC006AAAAAAAAAAAA4012AAAAAAAAAAA9C01800000000000 13FAE26AF37C048C8C006AAAAAAAAAAAA4012AAAAAAAAAAA9C0155555555555563FA5C EB240795CDEC006AAAAAAAAAAAA4012AAAAAAAAAAA9C012AAAAAAAAAAAB3F9DF623A67 EAC14C006AAAAAAAAAAAA4012AAAAAAAAAAA9C0100000000000003F93579BE024688EC 006AAAAAAAAAAAA4012AAAAAAAAAAA9C00AAAAAAAAAAAAB3F87839A5BC7DE65C006AAA AAAAAAAAA4012AAAAAAAAAAA9C0055555555555563F7CD2DE3EF4FFE8C006AAAAAAAAA AAA4012AAAAAAAAAAA9C0000000000000013F76C16C16C16B9EC006AAAAAAAAAAAA401 2AAAAAAAAAAA9BFF55555555555583F7CD2DE3EF4FFE6C006AAAAAAAAAAAA4012AAAAA AAAAAA9BFE555555555555B3F87839A5BC7DE61C006AAAAAAAAAAAA4012AAAAAAAAAAA 9BCC80000000000003F93579BE024688CC006AAAAAAAAAAAA4012AAAAAAAAAAA93FE55 5555555554F3F9DF623A67EAC0EC006AAAAAAAAAAAA4012AAAAAAAAAAA93FF55555555 555523FA5CEB240795CDAC006AAAAAAAAAAAA4012AAAAAAAAAAA93FFFFFFFFFFFFFFC3 FAE26AF37C048BFC006AAAAAAAAAAAA4012AAAAAAAAAAA940055555555555533FB4018 45C8A0CDCC006AAAAAAAAAAAA4012AAAAAAAAAAA9400AAAAAAAAAAAA83FB9B1DF623A6 7E1C006AAAAAAAAAAAA4012AAAAAAAAAAA9400FFFFFFFFFFFFD3FC0123456789AB7C00 6AAAAAAAAAAAA4012AAAAAAAAAAA94012AAAAAAAAAAA93FC3AC901E573AC3C006AAAAA AAAAAAA4012AAAAAAAAAAA940155555555555543FC7A80308B91414C006AAAAAAAAAAA A4012AAAAAAAAAAA94017FFFFFFFFFFFF3FCC048D159E26AAC006AAAAAAAAAAAA4012A AAAAAAAAAA9401AAAAAAAAAAAAA3FD0611722833942C006AAAAAAAAAAAA4012AAAAAAA AAAA9401D5555555555553FD2F0734B78FBD2C006AAAAAAAAAAAA4012AAAAAAAAAAA94 0200000000000003FD5B05B05B05B04C006AAAAAAAAAAAA4012AAAAAAAAAAA94021555 5555555553FD8A0CE512956D7C006AAAAAAAAAAAA4012AAAAAAAAAAA94022AAAAAAAAA AAA3FDBC1CD2DE3EF4DC006AAAAAAAAAAAA4012AAAAAAAAAAA94023FFFFFFFFFFFF3FD F13579BE02465C006AAAAAAAAAAAA4015555555555554C0240000000000003FD0FEDCB A987653C006AAAAAAAAAAAA4015555555555554C022AAAAAAAAAAAB3FCDA12F684BDA1 2C006AAAAAAAAAAAA4015555555555554C0215555555555563FC9A5BC7DEA00C1C006A AAAAAAAAAAA4015555555555554C0200000000000013FC60B60B60B60B6C006AAAAAAA AAAAA4015555555555554C01D5555555555573FC2D21C10AFF9EDC006AAAAAAAAAAAA4 015555555555554C01AAAAAAAAAAAAC3FBFF3DD1BAF98D3C006AAAAAAAAAAAA4015555 555555554C0180000000000013FBB05B05B05B057C006AAAAAAAAAAAA4015555555555 554C0155555555555563FB6D9B1DF623A62C006AAAAAAAAAAAA4015555555555554C01 2AAAAAAAAAAAB3FB36FE1A8C536F8C006AAAAAAAAAAAA4015555555555554C01000000 00000003FB0C83FB72EA617C006AAAAAAAAAAAA4015555555555554C00AAAAAAAAAAAA B3FADC598153D0F80C006AAAAAAAAAAAA4015555555555554C0055555555555563FAB7 F0D4629B7E4C006AAAAAAAAAAAA4015555555555554C0000000000000013FAABCDF012 3455BC006AAAAAAAAAAAA4015555555555554BFF55555555555583FAB7F0D4629B7E3C 006AAAAAAAAAAAA4015555555555554BFE555555555555B3FADC598153D0F7FC006AAA AAAAAAAAA4015555555555554BCC80000000000003FB0C83FB72EA616C006AAAAAAAAA AAA40155555555555543FE555555555554F3FB36FE1A8C536F6C006AAAAAAAAAAAA401 55555555555543FF55555555555523FB6D9B1DF623A60C006AAAAAAAAAAAA401555555 55555543FFFFFFFFFFFFFFC3FBB05B05B05B053C006AAAAAAAAAAAA401555555555555 440055555555555533FBFF3DD1BAF98CFC006AAAAAAAAAAAA4015555555555554400AA AAAAAAAAAA83FC2D21C10AFF9EAC006AAAAAAAAAAAA4015555555555554400FFFFFFFF FFFFD3FC60B60B60B60B1C006AAAAAAAAAAAA40155555555555544012AAAAAAAAAAA93 FC9A5BC7DEA00BCC006AAAAAAAAAAAA401555555555555440155555555555543FCDA12 F684BDA0EC006AAAAAAAAAAAA40155555555555544017FFFFFFFFFFFF3FD0FEDCBA987 652C006AAAAAAAAAAAA4015555555555554401AAAAAAAAAAAAA3FD35DAD524C9C3FC00 6AAAAAAAAAAAA4015555555555554401D5555555555553FD5ED097B425ECFC006AAAAA AAAAAAA401555555555555440200000000000003FD8ACF13579BE01C006AAAAAAAAAAA A401555555555555440215555555555553FDB9D6480F2B9D4C006AAAAAAAAAAAA40155 555555555544022AAAAAAAAAAAA3FDEBE635DAD5249C006AAAAAAAAAAAA40155555555 555544023FFFFFFFFFFFF3FE107F6E5D4C3B1C006AAAAAAAAAAAA4017FFFFFFFFFFFFC 0240000000000003FD4444444444443C006AAAAAAAAAAAA4017FFFFFFFFFFFFC022AAA AAAAAAAAB3FD215FF3DD1BAF9C006AAAAAAAAAAAA4017FFFFFFFFFFFFC021555555555 5563FD01845C8A0CE50C006AAAAAAAAAAAA4017FFFFFFFFFFFFC0200000000000013FC C962FC962FC96C006AAAAAAAAAAAA4017FFFFFFFFFFFFC01D5555555555573FC95CEB2 40795CDC006AAAAAAAAAAAA4017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FC684BDA12F684 AC006AAAAAAAAAAAA4017FFFFFFFFFFFFC0180000000000013FC40DA740DA740CC006A AAAAAAAAAAA4017FFFFFFFFFFFFC0155555555555563FC1F7A80308B911C006AAAAAAA AAAAA4017FFFFFFFFFFFFC012AAAAAAAAAAAB3FC042BFE7BA375CC006AAAAAAAAAAAA4 017FFFFFFFFFFFFC0100000000000003FBDDDDDDDDDDDD8C006AAAAAAAAAAAA4017FFF FFFFFFFFFC00AAAAAAAAAAAAB3FBBF86A314DBF80C006AAAAAAAAAAAA4017FFFFFFFFF FFFC0055555555555563FBAD524C9C413B2C006AAAAAAAAAAAA4017FFFFFFFFFFFFC00 00000000000013FBA740DA740DA6DC006AAAAAAAAAAAA4017FFFFFFFFFFFFBFF555555 55555583FBAD524C9C413B2C006AAAAAAAAAAAA4017FFFFFFFFFFFFBFE555555555555 B3FBBF86A314DBF7FC006AAAAAAAAAAAA4017FFFFFFFFFFFFBCC80000000000003FBDD DDDDDDDDDD6C006AAAAAAAAAAAA4017FFFFFFFFFFFF3FE555555555554F3FC042BFE7B A375BC006AAAAAAAAAAAA4017FFFFFFFFFFFF3FF55555555555523FC1F7A80308B910C 006AAAAAAAAAAAA4017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FC40DA740DA740AC006AAA AAAAAAAAA4017FFFFFFFFFFFF40055555555555533FC684BDA12F6848C006AAAAAAAAA AAA4017FFFFFFFFFFFF400AAAAAAAAAAAA83FC95CEB240795CAC006AAAAAAAAAAAA401 7FFFFFFFFFFFF400FFFFFFFFFFFFD3FCC962FC962FC91C006AAAAAAAAAAAA4017FFFFF FFFFFFF4012AAAAAAAAAAA93FD01845C8A0CE4EC006AAAAAAAAAAAA4017FFFFFFFFFFF F40155555555555543FD215FF3DD1BAF7C006AAAAAAAAAAAA4017FFFFFFFFFFFF4017F FFFFFFFFFFF3FD4444444444442C006AAAAAAAAAAAA4017FFFFFFFFFFFF401AAAAAAAA AAAAA3FD6A314DBF86A2FC006AAAAAAAAAAAA4017FFFFFFFFFFFF401D5555555555553 FD9327104EE2CBFC006AAAAAAAAAAAA4017FFFFFFFFFFFF40200000000000003FDBF25 8BF258BF1C006AAAAAAAAAAAA4017FFFFFFFFFFFF40215555555555553FDEE2CC0A9E8 7C4C006AAAAAAAAAAAA4017FFFFFFFFFFFF4022AAAAAAAAAAAA3FE101E573AC901DC00 6AAAAAAAAAAAA4017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE2AAAAAAAAAAA9C006AAAAA AAAAAAA401AAAAAAAAAAAAAC0240000000000003FD7D27D27D27D27C006AAAAAAAAAAA A401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD5A438215FF3DDC006AAAAAAAAAAAA401AA AAAAAAAAAAAC0215555555555563FD3A67EAC2F0735C006AAAAAAAAAAAA401AAAAAAAA AAAAAC0200000000000013FD1D950C83FB72FC006AAAAAAAAAAAA401AAAAAAAAAAAAAC 01D5555555555573FD03CAE759203CBC006AAAAAAAAAAAA401AAAAAAAAAAAAAC01AAAA AAAAAAAAC3FCDA12F684BDA12C006AAAAAAAAAAAA401AAAAAAAAAAAAAC018000000000 0013FCB2A1907F6E5D4C006AAAAAAAAAAAA401AAAAAAAAAAAAAC0155555555555563FC 91419CA252ADAC006AAAAAAAAAAAA401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FC75F31A ED6A925C006AAAAAAAAAAAA401AAAAAAAAAAAAAC0100000000000003FC60B60B60B60B 4C006AAAAAAAAAAAA401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FC518A6DFC35188C006A AAAAAAAAAAA401AAAAAAAAAAAAAC0055555555555563FC487042BFE7BA1C006AAAAAAA AAAAA401AAAAAAAAAAAAAC0000000000000013FC456789ABCDEFFC006AAAAAAAAAAAA4 01AAAAAAAAAAAAABFF55555555555583FC487042BFE7BA2C006AAAAAAAAAAAA401AAAA AAAAAAAAABFE555555555555B3FC518A6DFC35188C006AAAAAAAAAAAA401AAAAAAAAAA AAABCC80000000000003FC60B60B60B60B4C006AAAAAAAAAAAA401AAAAAAAAAAAAA3FE 555555555554F3FC75F31AED6A924C006AAAAAAAAAAAA401AAAAAAAAAAAAA3FF555555 55555523FC91419CA252AD9C006AAAAAAAAAAAA401AAAAAAAAAAAAA3FFFFFFFFFFFFFF C3FCB2A1907F6E5D2C006AAAAAAAAAAAA401AAAAAAAAAAAAA40055555555555533FCDA 12F684BDA10C006AAAAAAAAAAAA401AAAAAAAAAAAAA400AAAAAAAAAAAA83FD03CAE759 203C9C006AAAAAAAAAAAA401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FD1D950C83FB72DC 006AAAAAAAAAAAA401AAAAAAAAAAAAA4012AAAAAAAAAAA93FD3A67EAC2F0733C006AAA AAAAAAAAA401AAAAAAAAAAAAA40155555555555543FD5A438215FF3DBC006AAAAAAAAA AAA401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FD7D27D27D27D26C006AAAAAAAAAAAA401 AAAAAAAAAAAAA401AAAAAAAAAAAAA3FDA314DBF86A314C006AAAAAAAAAAAA401AAAAAA AAAAAAA401D5555555555553FDCC0A9E87C65A3C006AAAAAAAAAAAA401AAAAAAAAAAAA A40200000000000003FDF8091A2B3C4D6C006AAAAAAAAAAAA401AAAAAAAAAAAAA40215 555555555553FE1388277166054C006AAAAAAAAAAAA401AAAAAAAAAAAAA4022AAAAAAA AAAAA3FE2C901E573AC8FC006AAAAAAAAAAAA401AAAAAAAAAAAAA4023FFFFFFFFFFFF3 FE471C71C71C71BC006AAAAAAAAAAAA401D555555555555C0240000000000003FDBA98 7654320FEC006AAAAAAAAAAAA401D555555555555C022AAAAAAAAAAAB3FD97B425ED09 7B4C006AAAAAAAAAAAA401D555555555555C0215555555555563FD77D88E99FAB0CC00 6AAAAAAAAAAAA401D555555555555C0200000000000013FD5B05B05B05B06C006AAAAA AAAAAAA401D555555555555C01D5555555555573FD413B8B302A7A2C006AAAAAAAAAAA A401D555555555555C01AAAAAAAAAAAAC3FD2A7A1F19690E0C006AAAAAAAAAAAA401D5 55555555555C0180000000000013FD16C16C16C16C1C006AAAAAAAAAAAA401D5555555 55555C0155555555555563FD0611722833944C006AAAAAAAAAAAA401D555555555555C 012AAAAAAAAAAAB3FCF0D4629B7F0D3C006AAAAAAAAAAAA401D555555555555C010000 0000000003FCDB97530ECA862C006AAAAAAAAAAAA401D555555555555C00AAAAAAAAAA AAB3FCCC6BB5AA49936C006AAAAAAAAAAAA401D555555555555C0055555555555563FC C3518A6DFC34FC006AAAAAAAAAAAA401D555555555555C0000000000000013FCC048D1 59E26ADC006AAAAAAAAAAAA401D555555555555BFF55555555555583FCC3518A6DFC35 0C006AAAAAAAAAAAA401D555555555555BFE555555555555B3FCCC6BB5AA49936C006A AAAAAAAAAAA401D555555555555BCC80000000000003FCDB97530ECA862C006AAAAAAA AAAAA401D5555555555553FE555555555554F3FCF0D4629B7F0D2C006AAAAAAAAAAAA4 01D5555555555553FF55555555555523FD0611722833944C006AAAAAAAAAAAA401D555 5555555553FFFFFFFFFFFFFFC3FD16C16C16C16C0C006AAAAAAAAAAAA401D555555555 55540055555555555533FD2A7A1F19690DFC006AAAAAAAAAAAA401D555555555555400 AAAAAAAAAAAA83FD413B8B302A7A1C006AAAAAAAAAAAA401D555555555555400FFFFFF FFFFFFD3FD5B05B05B05B04C006AAAAAAAAAAAA401D5555555555554012AAAAAAAAAAA 93FD77D88E99FAB09C006AAAAAAAAAAAA401D55555555555540155555555555543FD97 B425ED097B3C006AAAAAAAAAAAA401D5555555555554017FFFFFFFFFFFF3FDBA987654 320FDC006AAAAAAAAAAAA401D555555555555401AAAAAAAAAAAAA3FDE0857FCF746EBC 006AAAAAAAAAAAA401D555555555555401D5555555555553FE04BDA12F684BDC006AAA AAAAAAAAA401D55555555555540200000000000003FE1ABCDF0123456C006AAAAAAAAA AAA401D55555555555540215555555555553FE3240795CEB240C006AAAAAAAAAAAA401 D5555555555554022AAAAAAAAAAAA3FE4B487042BFE7AC006AAAAAAAAAAAA401D55555 55555554023FFFFFFFFFFFF3FE65D4C3B2A1907C006AAAAAAAAAAAA402000000000000 0C0240000000000003FDFC962FC962FC9C006AAAAAAAAAAAA4020000000000000C022A AAAAAAAAAAB3FDD9B1DF623A67FC006AAAAAAAAAAAA4020000000000000C0215555555 555563FDB9D6480F2B9D7C006AAAAAAAAAAAA4020000000000000C0200000000000013 FD9D0369D0369D1C006AAAAAAAAAAAA4020000000000000C01D5555555555573FD8339 44A55B66DC006AAAAAAAAAAAA4020000000000000C01AAAAAAAAAAAAC3FD6C77D88E99 FABC006AAAAAAAAAAAA4020000000000000C0180000000000013FD58BF258BF258CC00 6AAAAAAAAAAAA4020000000000000C0155555555555563FD480F2B9D6480FC006AAAAA AAAAAAA4020000000000000C012AAAAAAAAAAAB3FD3A67EAC2F0734C006AAAAAAAAAAA A4020000000000000C0100000000000003FD2FC962FC962FCC006AAAAAAAAAAAA40200 00000000000C00AAAAAAAAAAAAB3FD2833944A55B66C006AAAAAAAAAAAA40200000000 00000C0055555555555563FD23A67EAC2F073C006AAAAAAAAAAAA4020000000000000C 0000000000000013FD2222222222222C006AAAAAAAAAAAA4020000000000000BFF5555 5555555583FD23A67EAC2F073C006AAAAAAAAAAAA4020000000000000BFE5555555555 55B3FD2833944A55B66C006AAAAAAAAAAAA4020000000000000BCC80000000000003FD 2FC962FC962FCC006AAAAAAAAAAAA40200000000000003FE555555555554F3FD3A67EA C2F0734C006AAAAAAAAAAAA40200000000000003FF55555555555523FD480F2B9D6480 FC006AAAAAAAAAAAA40200000000000003FFFFFFFFFFFFFFC3FD58BF258BF258BC006A AAAAAAAAAAA402000000000000040055555555555533FD6C77D88E99FAAC006AAAAAAA AAAAA4020000000000000400AAAAAAAAAAAA83FD833944A55B66CC006AAAAAAAAAAAA4 020000000000000400FFFFFFFFFFFFD3FD9D0369D0369CFC006AAAAAAAAAAAA4020000 0000000004012AAAAAAAAAAA93FDB9D6480F2B9D4C006AAAAAAAAAAAA4020000000000 00040155555555555543FDD9B1DF623A67EC006AAAAAAAAAAAA4020000000000000401 7FFFFFFFFFFFF3FDFC962FC962FC8C006AAAAAAAAAAAA4020000000000000401AAAAAA AAAAAAA3FE11419CA252ADBC006AAAAAAAAAAAA4020000000000000401D55555555555 53FE25BC7DEA00C23C006AAAAAAAAAAAA402000000000000040200000000000003FE3B BBBBBBBBBBCC006AAAAAAAAAAAA402000000000000040215555555555553FE533F5617 839A5C006AAAAAAAAAAAA40200000000000004022AAAAAAAAAAAA3FE6C474CFD585E0C 006AAAAAAAAAAAA40200000000000004023FFFFFFFFFFFF3FE86D3A06D3A06CC006AAA AAAAAAAAA4021555555555555C0240000000000003FE21907F6E5D4C3C006AAAAAAAAA AAA4021555555555555C022AAAAAAAAAAAB3FE101E573AC901EC006AAAAAAAAAAAA402 1555555555555C0215555555555563FE00308B91419CAC006AAAAAAAAAAAA402155555 5555555C0200000000000013FDE38E38E38E38EC006AAAAAAAAAAAA402155555555555 5C01D5555555555573FDC9C413B8B302AC006AAAAAAAAAAAA4021555555555555C01AA AAAAAAAAAAC3FDB302A7A1F1968C006AAAAAAAAAAAA4021555555555555C0180000000 000013FD9F49F49F49F49C006AAAAAAAAAAAA4021555555555555C0155555555555563 FD8E99FAB0BC1CCC006AAAAAAAAAAAA4021555555555555C012AAAAAAAAAAAB3FD80F2 B9D6480F1C006AAAAAAAAAAAA4021555555555555C0100000000000003FD7654320FED CB9C006AAAAAAAAAAAA4021555555555555C00AAAAAAAAAAAAB3FD6EBE635DAD523C00 6AAAAAAAAAAAA4021555555555555C0055555555555563FD6A314DBF86A30C006AAAAA AAAAAAA4021555555555555C0000000000000013FD68ACF13579BDFC006AAAAAAAAAAA A4021555555555555BFF55555555555583FD6A314DBF86A30C006AAAAAAAAAAAA40215 55555555555BFE555555555555B3FD6EBE635DAD523C006AAAAAAAAAAAA40215555555 55555BCC80000000000003FD7654320FEDCB9C006AAAAAAAAAAAA40215555555555553 FE555555555554F3FD80F2B9D6480F1C006AAAAAAAAAAAA40215555555555553FF5555 5555555523FD8E99FAB0BC1CCC006AAAAAAAAAAAA40215555555555553FFFFFFFFFFFF FFC3FD9F49F49F49F48C006AAAAAAAAAAAA402155555555555540055555555555533FD B302A7A1F1967C006AAAAAAAAAAAA4021555555555555400AAAAAAAAAAAA83FDC9C413 B8B3029C006AAAAAAAAAAAA4021555555555555400FFFFFFFFFFFFD3FDE38E38E38E38 CC006AAAAAAAAAAAA40215555555555554012AAAAAAAAAAA93FE00308B91419C9C006A AAAAAAAAAAA402155555555555540155555555555543FE101E573AC901DC006AAAAAAA AAAAA40215555555555554017FFFFFFFFFFFF3FE21907F6E5D4C3C006AAAAAAAAAAAA4 021555555555555401AAAAAAAAAAAAA3FE3487042BFE7B9C006AAAAAAAAAAAA4021555 555555555401D5555555555553FE4901E573AC901C006AAAAAAAAAAAA4021555555555 55540200000000000003FE5F0123456789AC006AAAAAAAAAAAA4021555555555555402 15555555555553FE7684BDA12F684C006AAAAAAAAAAAA40215555555555554022AAAAA AAAAAAA3FE8F8CB487042BEC006AAAAAAAAAAAA40215555555555554023FFFFFFFFFFF F3FEAA1907F6E5D4BC006AAAAAAAAAAAA4022AAAAAAAAAAAAC0240000000000003FE47 1C71C71C71BC006AAAAAAAAAAAA4022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE35AA4993 88276C006AAAAAAAAAAAA4022AAAAAAAAAAAAC0215555555555563FE25BC7DEA00C22C 006AAAAAAAAAAAA4022AAAAAAAAAAAAC0200000000000013FE17530ECA8641FC006AAA AAAAAAAAA4022AAAAAAAAAAAAC01D5555555555573FE0A6DFC3518A6DC006AAAAAAAAA AAA4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FDFE1A8C536FE18C006AAAAAAAAAAAA402 2AAAAAAAAAAAAC0180000000000013FDEA61D950C83F9C006AAAAAAAAAAAA4022AAAAA AAAAAAAC0155555555555563FDD9B1DF623A67CC006AAAAAAAAAAAA4022AAAAAAAAAAA AC012AAAAAAAAAAAB3FDCC0A9E87C65A1C006AAAAAAAAAAAA4022AAAAAAAAAAAAC0100 000000000003FDC16C16C16C169C006AAAAAAAAAAAA4022AAAAAAAAAAAAC00AAAAAAAA AAAAB3FDB9D6480F2B9D3C006AAAAAAAAAAAA4022AAAAAAAAAAAAC0055555555555563 FDB549327104EE0C006AAAAAAAAAAAA4022AAAAAAAAAAAAC0000000000000013FDB3C4 D5E6F808FC006AAAAAAAAAAAA4022AAAAAAAAAAAABFF55555555555583FDB549327104 EE0C006AAAAAAAAAAAA4022AAAAAAAAAAAABFE555555555555B3FDB9D6480F2B9D3C00 6AAAAAAAAAAAA4022AAAAAAAAAAAABCC80000000000003FDC16C16C16C169C006AAAAA AAAAAAA4022AAAAAAAAAAAA3FE555555555554F3FDCC0A9E87C65A1C006AAAAAAAAAAA A4022AAAAAAAAAAAA3FF55555555555523FDD9B1DF623A67CC006AAAAAAAAAAAA4022A AAAAAAAAAAA3FFFFFFFFFFFFFFC3FDEA61D950C83F8C006AAAAAAAAAAAA4022AAAAAAA AAAAA40055555555555533FDFE1A8C536FE17C006AAAAAAAAAAAA4022AAAAAAAAAAAA4 00AAAAAAAAAAAA83FE0A6DFC3518A6CC006AAAAAAAAAAAA4022AAAAAAAAAAAA400FFFF FFFFFFFFD3FE17530ECA8641EC006AAAAAAAAAAAA4022AAAAAAAAAAAA4012AAAAAAAAA AA93FE25BC7DEA00C21C006AAAAAAAAAAAA4022AAAAAAAAAAAA40155555555555543FE 35AA499388275C006AAAAAAAAAAAA4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE471C71 C71C71BC006AAAAAAAAAAAA4022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE5A12F684BDA1 1C006AAAAAAAAAAAA4022AAAAAAAAAAAA401D5555555555553FE6E8DD7CC6BB59C006A AAAAAAAAAAA4022AAAAAAAAAAAA40200000000000003FE848D159E26AF2C006AAAAAAA AAAAA4022AAAAAAAAAAAA40215555555555553FE9C10AFF9EE8DCC006AAAAAAAAAAAA4 022AAAAAAAAAAAA4022AAAAAAAAAAAA3FEB518A6DFC3516C006AAAAAAAAAAAA4022AAA AAAAAAAAA4023FFFFFFFFFFFF3FECFA4FA4FA4FA3C006AAAAAAAAAAAA4023FFFFFFFFF FFFC0240000000000003FE6EEEEEEEEEEEDC006AAAAAAAAAAAA4023FFFFFFFFFFFFC02 2AAAAAAAAAAAB3FE5D7CC6BB5AA49C006AAAAAAAAAAAA4023FFFFFFFFFFFFC02155555 55555563FE4D8EFB11D33F4C006AAAAAAAAAAAA4023FFFFFFFFFFFFC02000000000000 13FE3F258BF258BF2C006AAAAAAAAAAAA4023FFFFFFFFFFFFC01D5555555555573FE32 40795CEB240C006AAAAAAAAAAAA4023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE26DFC351 8A6DFC006AAAAAAAAAAAA4023FFFFFFFFFFFFC0180000000000013FE1D0369D0369CFC 006AAAAAAAAAAAA4023FFFFFFFFFFFFC0155555555555563FE14AB6CD8EFB10C006AAA AAAAAAAAA4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FE0DD7CC6BB5AA3C006AAAAAAAAA AAA4023FFFFFFFFFFFFC0100000000000003FE0888888888887C006AAAAAAAAAAAA402 3FFFFFFFFFFFFC00AAAAAAAAAAAAB3FE04BDA12F684BCC006AAAAAAAAAAAA4023FFFFF FFFFFFFC0055555555555563FE0277166054F42C006AAAAAAAAAAAA4023FFFFFFFFFFF FC0000000000000013FE01B4E81B4E81AC006AAAAAAAAAAAA4023FFFFFFFFFFFFBFF55 555555555583FE0277166054F42C006AAAAAAAAAAAA4023FFFFFFFFFFFFBFE55555555 5555B3FE04BDA12F684BCC006AAAAAAAAAAAA4023FFFFFFFFFFFFBCC80000000000003 FE0888888888887C006AAAAAAAAAAAA4023FFFFFFFFFFFF3FE555555555554F3FE0DD7 CC6BB5AA3C006AAAAAAAAAAAA4023FFFFFFFFFFFF3FF55555555555523FE14AB6CD8EF B10C006AAAAAAAAAAAA4023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE1D0369D0369CEC00 6AAAAAAAAAAAA4023FFFFFFFFFFFF40055555555555533FE26DFC3518A6DEC006AAAAA AAAAAAA4023FFFFFFFFFFFF400AAAAAAAAAAAA83FE3240795CEB23EC006AAAAAAAAAAA A4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE3F258BF258BF1C006AAAAAAAAAAAA4023F FFFFFFFFFFF4012AAAAAAAAAAA93FE4D8EFB11D33F3C006AAAAAAAAAAAA4023FFFFFFF FFFFF40155555555555543FE5D7CC6BB5AA48C006AAAAAAAAAAAA4023FFFFFFFFFFFF4 017FFFFFFFFFFFF3FE6EEEEEEEEEEEDC006AAAAAAAAAAAA4023FFFFFFFFFFFF401AAAA AAAAAAAAA3FE81E573AC901E4C006AAAAAAAAAAAA4023FFFFFFFFFFFF401D555555555 5553FE966054F43E32BC006AAAAAAAAAAAA4023FFFFFFFFFFFF40200000000000003FE AC5F92C5F92C5C006AAAAAAAAAAAA4023FFFFFFFFFFFF40215555555555553FEC3E32D 21C10AEC006AAAAAAAAAAAA4023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEDCEB240795CE 9C006AAAAAAAAAAAA4023FFFFFFFFFFFF4023FFFFFFFFFFFF3FEF777777777775C0055 55555555555C024000000000000C0240000000000003FD3333333333333C0055555555 55555C024000000000000C022AAAAAAAAAAAB3FD104EE2CC0A9E9C005555555555555C 024000000000000C0215555555555563FCE0E696F1F7A82C005555555555555C024000 000000000C0200000000000013FCA740DA740DA77C005555555555555C024000000000 000C01D5555555555573FC73AC901E573AEC005555555555555C024000000000000C01 AAAAAAAAAAAAC3FC4629B7F0D462BC005555555555555C024000000000000C01800000 00000013FC1EB851EB851EDC005555555555555C024000000000000C01555555555555 63FBFAB0BC1CD2DE4C005555555555555C024000000000000C012AAAAAAAAAAAB3FBC4 13B8B302A7BC005555555555555C024000000000000C0100000000000003FB99999999 99999C005555555555555C024000000000000C00AAAAAAAAAAAAB3FB7B425ED097B42C 005555555555555C024000000000000C0055555555555563FB690E0857FCF74C005555 555555555C024000000000000C0000000000000013FB62FC962FC962FC005555555555 555C024000000000000BFF55555555555583FB690E0857FCF74C005555555555555C02 4000000000000BFE555555555555B3FB7B425ED097B41C005555555555555C02400000 0000000BCC80000000000003FB9999999999998C005555555555555C02400000000000 03FE555555555554F3FBC413B8B302A78C005555555555555C0240000000000003FF55 555555555523FBFAB0BC1CD2DE2C005555555555555C0240000000000003FFFFFFFFFF FFFFC3FC1EB851EB851EBC005555555555555C02400000000000040055555555555533 FC4629B7F0D4629C005555555555555C024000000000000400AAAAAAAAAAAA83FC73AC 901E573ABC005555555555555C024000000000000400FFFFFFFFFFFFD3FCA740DA740D A72C005555555555555C0240000000000004012AAAAAAAAAAA93FCE0E696F1F7A7DC00 5555555555555C02400000000000040155555555555543FD104EE2CC0A9E8C00555555 5555555C0240000000000004017FFFFFFFFFFFF3FD3333333333332C00555555555555 5C024000000000000401AAAAAAAAAAAAA3FD59203CAE75920C005555555555555C0240 00000000000401D5555555555553FD8215FF3DD1BAFC005555555555555C0240000000 0000040200000000000003FDAE147AE147AE2C005555555555555C0240000000000004 0215555555555553FDDD1BAF98D76B5C005555555555555C0240000000000004022AAA AAAAAAAAA3FE0795CEB240795C005555555555555C0240000000000004023FFFFFFFFF FFF3FE2222222222221C005555555555555C022AAAAAAAAAAABC0240000000000003FC FDB97530ECA88C005555555555555C022AAAAAAAAAAABC022AAAAAAAAAAAB3FCB7F0D4 629B7F5C005555555555555C022AAAAAAAAAAABC0215555555555563FC7839A5BC7DEA 4C005555555555555C022AAAAAAAAAAABC0200000000000013FC3E93E93E93E99C0055 55555555555C022AAAAAAAAAAABC01D5555555555573FC0AFF9EE8DD7D0C0055555555 55555C022AAAAAAAAAAABC01AAAAAAAAAAAAC3FBBAF98D76B5499C005555555555555C 022AAAAAAAAAAABC0180000000000013FB6C16C16C16C1DC005555555555555C022AAA AAAAAAAABC0155555555555563FB2956D9B1DF628C005555555555555C022AAAAAAAAA AABC012AAAAAAAAAAAB3FAE573AC901E57DC005555555555555C022AAAAAAAAAAABC01 00000000000003FA907F6E5D4C3BAC005555555555555C022AAAAAAAAAAABC00AAAAAA AAAAAAB3FA53D0F8CB4870CC005555555555555C022AAAAAAAAAAABC00555555555555 63FA2F684BDA12F70C005555555555555C022AAAAAAAAAAABC0000000000000013FA23 456789ABCE6C005555555555555C022AAAAAAAAAAABBFF55555555555583FA2F684BDA 12F6FC005555555555555C022AAAAAAAAAAABBFE555555555555B3FA53D0F8CB4870BC 005555555555555C022AAAAAAAAAAABBCC80000000000003FA907F6E5D4C3B9C005555 555555555C022AAAAAAAAAAAB3FE555555555554F3FAE573AC901E579C005555555555 555C022AAAAAAAAAAAB3FF55555555555523FB2956D9B1DF626C005555555555555C02 2AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FB6C16C16C16C19C005555555555555C022AAAAA AAAAAAB40055555555555533FBBAF98D76B5495C005555555555555C022AAAAAAAAAAA B400AAAAAAAAAAAA83FC0AFF9EE8DD7CDC005555555555555C022AAAAAAAAAAAB400FF FFFFFFFFFFD3FC3E93E93E93E94C005555555555555C022AAAAAAAAAAAB4012AAAAAAA AAAA93FC7839A5BC7DEA0C005555555555555C022AAAAAAAAAAAB40155555555555543 FCB7F0D4629B7F1C005555555555555C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FCFDB9 7530ECA87C005555555555555C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FD24C9C413B8 B31C005555555555555C022AAAAAAAAAAAB401D5555555555553FD4DBF86A314DC0C00 5555555555555C022AAAAAAAAAAAB40200000000000003FD79BE02468ACF2C00555555 5555555C022AAAAAAAAAAAB40215555555555553FDA8C536FE1A8C6C00555555555555 5C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FDDAD524C9C413BC005555555555555C022A AAAAAAAAAAB4023FFFFFFFFFFFF3FE07F6E5D4C3B2AC005555555555555C0215555555 55556C0240000000000003FC9E26AF37C0490C005555555555555C021555555555556C 022AAAAAAAAAAAB3FC585E0E696F1FDC005555555555555C021555555555556C021555 5555555563FC18A6DFC3518ACC005555555555555C021555555555556C020000000000 0013FBBE02468ACF141C005555555555555C021555555555556C01D5555555555573FB 56D9B1DF623B0C005555555555555C021555555555556C01AAAAAAAAAAAAC3FAF7A803 08B9151C005555555555555C021555555555556C0180000000000013FA59E26AF37C05 9C005555555555555C021555555555556C0155555555555563F9A8C536FE1A8E0C0055 55555555555C021555555555556C012AAAAAAAAAAAB3F89CA252ADB3670C0055555555 55555C021555555555556C0100000000000003F623456789ABD90C005555555555555C 021555555555556C00AAAAAAAAAAAABBF753D0F8CB486A6C005555555555555C021555 555555556C005555555555556BF83B8B302A7A1C6C005555555555555C021555555555 556C000000000000001BF86C16C16C16BEAC005555555555555C021555555555556BFF 5555555555558BF83B8B302A7A1C7C005555555555555C021555555555556BFE555555 555555BBF753D0F8CB486B1C005555555555555C021555555555556BCC800000000000 03F623456789ABD7EC005555555555555C0215555555555563FE555555555554F3F89C A252ADB3661C005555555555555C0215555555555563FF55555555555523F9A8C536FE 1A8D8C005555555555555C0215555555555563FFFFFFFFFFFFFFC3FA59E26AF37C051C 005555555555555C02155555555555640055555555555533FAF7A80308B9148C005555 555555555C021555555555556400AAAAAAAAAAAA83FB56D9B1DF623AAC005555555555 555C021555555555556400FFFFFFFFFFFFD3FBBE02468ACF138C005555555555555C02 15555555555564012AAAAAAAAAAA93FC18A6DFC3518A8C005555555555555C02155555 555555640155555555555543FC585E0E696F1F9C005555555555555C02155555555555 64017FFFFFFFFFFFF3FC9E26AF37C048EC005555555555555C021555555555556401AA AAAAAAAAAAA3FCEA00C22E45069C005555555555555C021555555555556401D5555555 555553FD1DF623A67EAC4C005555555555555C02155555555555640200000000000003 FD49F49F49F49F6C005555555555555C02155555555555640215555555555553FD78FB D401845CAC005555555555555C0215555555555564022AAAAAAAAAAAA3FDAB0BC1CD2D E3FC005555555555555C0215555555555564023FFFFFFFFFFFF3FDE02468ACF1358C00 5555555555555C020000000000001C0240000000000003FC47AE147AE147FC00555555 5555555C020000000000001C022AAAAAAAAAAAB3FC01E573AC901EBC00555555555555 5C020000000000001C0215555555555563FB845C8A0CE5134C005555555555555C0200 00000000001C0200000000000013FB111111111111FC005555555555555C0200000000 00001C01D5555555555573FA53D0F8CB4871DC005555555555555C020000000000001C 01AAAAAAAAAAAAC3F93B8B302A7A219C005555555555555C020000000000001C018000 0000000013CA493C000000000C005555555555555C020000000000001C015555555555 556BF90AFF9EE8DD7ACC005555555555555C020000000000001C012AAAAAAAAAAABBF9 E573AC901E554C005555555555555C020000000000001C010000000000000BFA47AE14 7AE146DC005555555555555C020000000000001C00AAAAAAAAAAAABBFA845C8A0CE511 BC005555555555555C020000000000001C005555555555556BFAA8C536FE1A8B6C0055 55555555555C020000000000001C000000000000001BFAB4E81B4E81B3FC0055555555 55555C020000000000001BFF5555555555558BFAA8C536FE1A8B7C005555555555555C 020000000000001BFE555555555555BBFA845C8A0CE511BC005555555555555C020000 000000001BCC8000000000000BFA47AE147AE146DC005555555555555C020000000000 0013FE555555555554FBF9E573AC901E559C005555555555555C0200000000000013FF 5555555555552BF90AFF9EE8DD7B3C005555555555555C0200000000000013FFFFFFFF FFFFFFC3C97963000000000C005555555555555C020000000000001400555555555555 33F93B8B302A7A207C005555555555555C020000000000001400AAAAAAAAAAAA83FA53 D0F8CB4870EC005555555555555C020000000000001400FFFFFFFFFFFFD3FB11111111 11115C005555555555555C0200000000000014012AAAAAAAAAAA93FB845C8A0CE512DC 005555555555555C02000000000000140155555555555543FC01E573AC901E8C005555 555555555C0200000000000014017FFFFFFFFFFFF3FC47AE147AE147DC005555555555 555C020000000000001401AAAAAAAAAAAAA3FC9388277166058C005555555555555C02 0000000000001401D5555555555553FCE573AC901E577C005555555555555C02000000 000000140200000000000003FD1EB851EB851EEC005555555555555C02000000000000 140215555555555553FD4DBF86A314DC1C005555555555555C0200000000000014022A AAAAAAAAAAA3FD7FCF746EBE636C005555555555555C0200000000000014023FFFFFFF FFFFF3FDB4E81B4E81B4FC005555555555555C01D555555555557C0240000000000003 FBF49F49F49F4A5C005555555555555C01D555555555557C022AAAAAAAAAAAB3FB690E 0857FCF7CC005555555555555C01D555555555557C0215555555555563FAD33F561783 9B5C005555555555555C01D555555555557C0200000000000013F9D950C83FB7313C00 5555555555555C01D555555555557C01D5555555555573F6E573AC901E689C00555555 5555555C01D555555555557C01AAAAAAAAAAAACBF92F684BDA12F4FC00555555555555 5C01D555555555557C018000000000001BFA3579BE024689FC005555555555555C01D5 55555555557C015555555555556BFABAF98D76B548AC005555555555555C01D5555555 55557C012AAAAAAAAAAABBFB1419CA252ADAFC005555555555555C01D555555555557C 010000000000000BFB3E93E93E93E90C005555555555555C01D555555555557C00AAAA AAAAAAAABBFB5CEB240795CE7C005555555555555C01D555555555557C005555555555 556BFB6F1F7A80308B5C005555555555555C01D555555555557C000000000000001BFB 7530ECA8641FAC005555555555555C01D555555555557BFF5555555555558BFB6F1F7A 80308B5C005555555555555C01D555555555557BFE555555555555BBFB5CEB240795CE 8C005555555555555C01D555555555557BCC8000000000000BFB3E93E93E93E91C0055 55555555555C01D5555555555573FE555555555554FBFB1419CA252ADB1C0055555555 55555C01D5555555555573FF5555555555552BFABAF98D76B548EC005555555555555C 01D5555555555573FFFFFFFFFFFFFFCBFA3579BE02468A8C005555555555555C01D555 5555555574005555555555553BF92F684BDA12F62C005555555555555C01D555555555 557400AAAAAAAAAAAA83F6E573AC901E5A1C005555555555555C01D555555555557400 FFFFFFFFFFFFD3F9D950C83FB72EDC005555555555555C01D5555555555574012AAAAA AAAAAA93FAD33F5617839A6C005555555555555C01D555555555557401555555555555 43FB690E0857FCF75C005555555555555C01D5555555555574017FFFFFFFFFFFF3FBF4 9F49F49F4A0C005555555555555C01D555555555557401AAAAAAAAAAAAA3FC4629B7F0 D462BC005555555555555C01D555555555557401D5555555555553FC98153D0F8CB4AC 005555555555555C01D55555555555740200000000000003FCF0123456789AEC005555 555555555C01D55555555555740215555555555553FD27104EE2CC0ABC005555555555 555C01D5555555555574022AAAAAAAAAAAA3FD59203CAE75920C005555555555555C01 D5555555555574023FFFFFFFFFFFF3FD8E38E38E38E38C005555555555555C01AAAAAA AAAAAACC0240000000000003FB6C16C16C16C1BC005555555555555C01AAAAAAAAAAAA CC022AAAAAAAAAAAB3FAC10AFF9EE8DE4C005555555555555C01AAAAAAAAAAAACC0215 555555555563F9845C8A0CE5142C005555555555555C01AAAAAAAAAAAACC0200000000 00001BF723456789ABC53C005555555555555C01AAAAAAAAAAAACC01D555555555557B F9E573AC901E557C005555555555555C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFAA8C5 36FE1A8BBC005555555555555C01AAAAAAAAAAAACC018000000000001BFB23456789AB CDAC005555555555555C01AAAAAAAAAAAACC015555555555556BFB66054F43E32CFC00 5555555555555C01AAAAAAAAAAAACC012AAAAAAAAAAABBFB9CA252ADB3639C00555555 5555555C01AAAAAAAAAAAACC010000000000000BFBC71C71C71C71AC00555555555555 5C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFBE573AC901E571C005555555555555C01AA AAAAAAAAAACC005555555555556BFBF7A80308B913FC005555555555555C01AAAAAAAA AAAACC000000000000001BFBFDB97530ECA84C005555555555555C01AAAAAAAAAAAACB FF5555555555558BFBF7A80308B913FC005555555555555C01AAAAAAAAAAAACBFE5555 55555555BBFBE573AC901E572C005555555555555C01AAAAAAAAAAAACBCC8000000000 000BFBC71C71C71C71BC005555555555555C01AAAAAAAAAAAAC3FE555555555554FBFB 9CA252ADB363BC005555555555555C01AAAAAAAAAAAAC3FF5555555555552BFB66054F 43E32D1C005555555555555C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFB23456789ABCD EC005555555555555C01AAAAAAAAAAAAC4005555555555553BFAA8C536FE1A8C4C0055 55555555555C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BF9E573AC901E576C0055555555 55555C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBF723456789ABCF1C005555555555555C 01AAAAAAAAAAAAC4012AAAAAAAAAAA93F9845C8A0CE5123C005555555555555C01AAAA AAAAAAAAC40155555555555543FAC10AFF9EE8DD6C005555555555555C01AAAAAAAAAA AAC4017FFFFFFFFFFFF3FB6C16C16C16C16C005555555555555C01AAAAAAAAAAAAC401 AAAAAAAAAAAAA3FC01E573AC901E6C005555555555555C01AAAAAAAAAAAAC401D55555 55555553FC53D0F8CB48705C005555555555555C01AAAAAAAAAAAAC402000000000000 03FCABCDF0123456AC005555555555555C01AAAAAAAAAAAAC40215555555555553FD04 EE2CC0A9E88C005555555555555C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD36FE1A8C 536FDC005555555555555C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD6C16C16C16C16C 005555555555555C018000000000001C0240000000000003FAEB851EB851EC6C005555 555555555C018000000000001C022AAAAAAAAAAAB3F9A8C536FE1A8F0C005555555555 555C018000000000001C021555555555556BF753D0F8CB48698C005555555555555C01 8000000000001C020000000000001BFA11111111110FAC005555555555555C01800000 0000001C01D555555555557BFADF623A67EAC1BC005555555555555C01800000000000 1C01AAAAAAAAAAAACBFB4AB6CD8EFB116C005555555555555C018000000000001C0180 00000000001BFB9999999999992C005555555555555C018000000000001C0155555555 55556BFBDC598153D0F87C005555555555555C018000000000001C012AAAAAAAAAAABB FC097B425ED0978C005555555555555C018000000000001C010000000000000BFC1EB8 51EB851E9C005555555555555C018000000000001C00AAAAAAAAAAAABBFC2DE3EF5006 115C005555555555555C018000000000001C005555555555556BFC36FE1A8C536FCC00 5555555555555C018000000000001C000000000000001BFC3A06D3A06D39EC00555555 5555555C018000000000001BFF5555555555558BFC36FE1A8C536FBC00555555555555 5C018000000000001BFE555555555555BBFC2DE3EF5006115C005555555555555C0180 00000000001BCC8000000000000BFC1EB851EB851E9C005555555555555C0180000000 000013FE555555555554FBFC097B425ED0979C005555555555555C0180000000000013 FF5555555555552BFBDC598153D0F89C005555555555555C0180000000000013FFFFFF FFFFFFFFCBFB9999999999996C005555555555555C0180000000000014005555555555 553BFB4AB6CD8EFB11AC005555555555555C018000000000001400AAAAAAAAAAAA8BFA DF623A67EAC2BC005555555555555C018000000000001400FFFFFFFFFFFFDBFA111111 111110EC005555555555555C0180000000000014012AAAAAAAAAAA9BF753D0F8CB486F 4C005555555555555C01800000000000140155555555555543F9A8C536FE1A8CBC0055 55555555555C0180000000000014017FFFFFFFFFFFF3FAEB851EB851EBCC0055555555 55555C018000000000001401AAAAAAAAAAAAA3FB8D76B54932714C005555555555555C 018000000000001401D5555555555553FC18A6DFC3518A9C005555555555555C018000 00000000140200000000000003FC70A3D70A3D70EC005555555555555C018000000000 00140215555555555553FCCEB240795CEB4C005555555555555C018000000000001402 2AAAAAAAAAAAA3FD19690E0857FCFC005555555555555C0180000000000014023FFFFF FFFFFFF3FD4E81B4E81B4E8C005555555555555C015555555555556C02400000000000 03FA23456789ABCDEC005555555555555C015555555555556C022AAAAAAAAAAAB3F584 5C8A0CE5208C005555555555555C015555555555556C021555555555556BF9E573AC90 1E566C005555555555555C015555555555556C020000000000001BFAD950C83FB72DEC 005555555555555C015555555555556C01D555555555557BFB53D0F8CB48700C005555 555555555C015555555555556C01AAAAAAAAAAAACBFBAED6A9264E208C005555555555 555C015555555555556C018000000000001BFBFDB97530ECA84C005555555555555C01 5555555555556C015555555555556BFC203CAE759203CC005555555555555C01555555 5555556C012AAAAAAAAAAABBFC3B8B302A7A1F1C005555555555555C01555555555555 6C010000000000000BFC50C83FB72EA62C005555555555555C015555555555556C00AA AAAAAAAAAABBFC5FF3DD1BAF98EC005555555555555C015555555555556C0055555555 55556BFC690E0857FCF75C005555555555555C015555555555556C000000000000001B FC6C16C16C16C17C005555555555555C015555555555556BFF5555555555558BFC690E 0857FCF74C005555555555555C015555555555556BFE555555555555BBFC5FF3DD1BAF 98EC005555555555555C015555555555556BCC8000000000000BFC50C83FB72EA62C00 5555555555555C0155555555555563FE555555555554FBFC3B8B302A7A1F2C00555555 5555555C0155555555555563FF5555555555552BFC203CAE759203DC00555555555555 5C0155555555555563FFFFFFFFFFFFFFCBFBFDB97530ECA89C005555555555555C0155 555555555564005555555555553BFBAED6A9264E20DC005555555555555C0155555555 55556400AAAAAAAAAAAA8BFB53D0F8CB48707C005555555555555C0155555555555564 00FFFFFFFFFFFFDBFAD950C83FB72F2C005555555555555C0155555555555564012AAA AAAAAAAA9BF9E573AC901E585C005555555555555C0155555555555564015555555555 5543F5845C8A0CE5036C005555555555555C0155555555555564017FFFFFFFFFFFF3FA 23456789ABCD7C005555555555555C015555555555556401AAAAAAAAAAAAA3FB2956D9 B1DF622C005555555555555C015555555555556401D5555555555553FBCD2DE3EF5006 0C005555555555555C01555555555555640200000000000003FC3E93E93E93E94C0055 55555555555C01555555555555640215555555555553FC9CA252ADB363BC0055555555 55555C0155555555555564022AAAAAAAAAAAA3FD0061172283393C005555555555555C 0155555555555564023FFFFFFFFFFFF3FD3579BE02468ABC005555555555555C012AAA AAAAAAAABC0240000000000003F8FDB97530ECA97C005555555555555C012AAAAAAAAA AABC022AAAAAAAAAAABBF92F684BDA12F50C005555555555555C012AAAAAAAAAAABC02 1555555555556BFA9690E0857FCEBC005555555555555C012AAAAAAAAAAABC02000000 0000001BFB3E93E93E93E8BC005555555555555C012AAAAAAAAAAABC01D55555555555 7BFBA5BC7DEA00C1CC005555555555555C012AAAAAAAAAAABC01AAAAAAAAAAAACBFC00 61172283392C005555555555555C012AAAAAAAAAAABC018000000000001BFC27D27D27 D27D0C005555555555555C012AAAAAAAAAAABC015555555555556BFC49327104EE2CAC 005555555555555C012AAAAAAAAAAABC012AAAAAAAAAAABBFC6480F2B9D647FC005555 555555555C012AAAAAAAAAAABC010000000000000BFC79BE02468ACF0C005555555555 555C012AAAAAAAAAAABC00AAAAAAAAAAAABBFC88E99FAB0BC1CC005555555555555C01 2AAAAAAAAAAABC005555555555556BFC9203CAE759203C005555555555555C012AAAAA AAAAAABC000000000000001BFC950C83FB72EA5C005555555555555C012AAAAAAAAAAA BBFF5555555555558BFC9203CAE759202C005555555555555C012AAAAAAAAAAABBFE55 5555555555BBFC88E99FAB0BC1CC005555555555555C012AAAAAAAAAAABBCC80000000 00000BFC79BE02468ACF0C005555555555555C012AAAAAAAAAAAB3FE555555555554FB FC6480F2B9D6480C005555555555555C012AAAAAAAAAAAB3FF5555555555552BFC4932 7104EE2CBC005555555555555C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC27D27D27D2 7D2C005555555555555C012AAAAAAAAAAAB4005555555555553BFC0061172283394C00 5555555555555C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFBA5BC7DEA00C23C00555555 5555555C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFB3E93E93E93E95C00555555555555 5C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFA9690E0857FCFAC005555555555555C012A AAAAAAAAAAB4015555555555554BF92F684BDA12F6DC005555555555555C012AAAAAAA AAAAB4017FFFFFFFFFFFF3F8FDB97530ECA7CC005555555555555C012AAAAAAAAAAAB4 01AAAAAAAAAAAAA3FAAED6A9264E20CC005555555555555C012AAAAAAAAAAAB401D555 5555555553FB7B425ED097B44C005555555555555C012AAAAAAAAAAAB4020000000000 0003FC159E26AF37C06C005555555555555C012AAAAAAAAAAAB40215555555555553FC 73AC901E573ADC005555555555555C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FCD7CC6B B5AA498C005555555555555C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FD20FEDCBA9876 4C005555555555555C010000000000000C024000000000000BC72000000000000C0055 55555555555C010000000000000C022AAAAAAAAAAABBFA1722833944A50C0055555555 55555C010000000000000C021555555555556BFB0AFF9EE8DD7CAC005555555555555C 010000000000000C020000000000001BFB7E4B17E4B17DFC005555555555555C010000 000000000C01D555555555557BFBE573AC901E570C005555555555555C010000000000 000C01AAAAAAAAAAAACBFC203CAE759203CC005555555555555C010000000000000C01 8000000000001BFC47AE147AE147AC005555555555555C010000000000000C01555555 5555556BFC690E0857FCF74C005555555555555C010000000000000C012AAAAAAAAAAA BBFC845C8A0CE5129C005555555555555C010000000000000C010000000000000BFC99 9999999999AC005555555555555C010000000000000C00AAAAAAAAAAAABBFCA8C536FE 1A8C6C005555555555555C010000000000000C005555555555556BFCB1DF623A67EADC 005555555555555C010000000000000C000000000000001BFCB4E81B4E81B4FC005555 555555555C010000000000000BFF5555555555558BFCB1DF623A67EACC005555555555 555C010000000000000BFE555555555555BBFCA8C536FE1A8C6C005555555555555C01 0000000000000BCC8000000000000BFC999999999999AC005555555555555C01000000 00000003FE555555555554FBFC845C8A0CE512AC005555555555555C01000000000000 03FF5555555555552BFC690E0857FCF75C005555555555555C0100000000000003FFFF FFFFFFFFFFCBFC47AE147AE147CC005555555555555C01000000000000040055555555 55553BFC203CAE759203EC005555555555555C010000000000000400AAAAAAAAAAAA8B FBE573AC901E577C005555555555555C010000000000000400FFFFFFFFFFFFDBFB7E4B 17E4B17E9C005555555555555C0100000000000004012AAAAAAAAAAA9BFB0AFF9EE8DD 7D1C005555555555555C0100000000000004015555555555554BFA1722833944A5EC00 5555555555555C0100000000000004017FFFFFFFFFFFFBC92278000000000C00555555 5555555C010000000000000401AAAAAAAAAAAAA3FA2F684BDA12F64C00555555555555 5C010000000000000401D5555555555553FB3B8B302A7A1F0C005555555555555C0100 0000000000040200000000000003FBEB851EB851EB9C005555555555555C0100000000 0000040215555555555553FC53D0F8CB48703C005555555555555C0100000000000004 022AAAAAAAAAAAA3FCB7F0D4629B7EEC005555555555555C0100000000000004023FFF FFFFFFFFF3FD111111111110FC005555555555555C00AAAAAAAAAAAABC024000000000 000BF86C16C16C16C09C005555555555555C00AAAAAAAAAAAABC022AAAAAAAAAAABBFA 722833944A550C005555555555555C00AAAAAAAAAAAABC021555555555556BFB388277 166054EC005555555555555C00AAAAAAAAAAAABC020000000000001BFBABCDF0123456 3C005555555555555C00AAAAAAAAAAAABC01D555555555557BFC097B425ED097AC0055 55555555555C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFC36FE1A8C536FEC0055555555 55555C00AAAAAAAAAAAABC018000000000001BFC5E6F8091A2B3CC005555555555555C 00AAAAAAAAAAAABC015555555555556BFC7FCF746EBE634C005555555555555C00AAAA AAAAAAAABC012AAAAAAAAAAABBFC9B1DF623A67E9C005555555555555C00AAAAAAAAAA AABC010000000000000BFCB05B05B05B05AC005555555555555C00AAAAAAAAAAAABC00 AAAAAAAAAAAABBFCBF86A314DBF86C005555555555555C00AAAAAAAAAAAABC00555555 5555556BFCC8A0CE512956EC005555555555555C00AAAAAAAAAAAABC00000000000000 1BFCCBA9876543210C005555555555555C00AAAAAAAAAAAABBFF5555555555558BFCC8 A0CE512956DC005555555555555C00AAAAAAAAAAAABBFE555555555555BBFCBF86A314 DBF87C005555555555555C00AAAAAAAAAAAABBCC8000000000000BFCB05B05B05B05BC 005555555555555C00AAAAAAAAAAAAB3FE555555555554FBFC9B1DF623A67EBC005555 555555555C00AAAAAAAAAAAAB3FF5555555555552BFC7FCF746EBE636C005555555555 555C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC5E6F8091A2B3DC005555555555555C00 AAAAAAAAAAAAB4005555555555553BFC36FE1A8C536FFC005555555555555C00AAAAAA AAAAAAB400AAAAAAAAAAAA8BFC097B425ED097DC005555555555555C00AAAAAAAAAAAA B400FFFFFFFFFFFFDBFBABCDF0123456BC005555555555555C00AAAAAAAAAAAAB4012A AAAAAAAAAA9BFB3882771660553C005555555555555C00AAAAAAAAAAAAB40155555555 55554BFA722833944A562C005555555555555C00AAAAAAAAAAAAB4017FFFFFFFFFFFFB F86C16C16C16C34C005555555555555C00AAAAAAAAAAAAB401AAAAAAAAAAAAA3F9A8C5 36FE1A8C1C005555555555555C00AAAAAAAAAAAAB401D5555555555553FB0E0857FCF7 46EC005555555555555C00AAAAAAAAAAAAB40200000000000003FBBE02468ACF137C00 5555555555555C00AAAAAAAAAAAAB40215555555555553FC3D0F8CB487042C00555555 5555555C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FCA12F684BDA12DC00555555555555 5C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FD05B05B05B05AFC005555555555555C0055 55555555556C024000000000000BF923456789ABCE4C005555555555555C0055555555 55556C022AAAAAAAAAAABBFAA8C536FE1A8C0C005555555555555C005555555555556C 021555555555556BFB53D0F8CB48702C005555555555555C005555555555556C020000 000000001BFBC71C71C71C717C005555555555555C005555555555556C01D555555555 557BFC1722833944A54C005555555555555C005555555555556C01AAAAAAAAAAAACBFC 44A55B66C77D8C005555555555555C005555555555556C018000000000001BFC6C16C1 6C16C16C005555555555555C005555555555556C015555555555556BFC8D76B5493271 0C005555555555555C005555555555556C012AAAAAAAAAAABBFCA8C536FE1A8C5C0055 55555555555C005555555555556C010000000000000BFCBE02468ACF136C0055555555 55555C005555555555556C00AAAAAAAAAAAABBFCCD2DE3EF50062C005555555555555C 005555555555556C005555555555556BFCD6480F2B9D649C005555555555555C005555 555555556C000000000000001BFCD950C83FB72EBC005555555555555C005555555555 556BFF5555555555558BFCD6480F2B9D648C005555555555555C005555555555556BFE 555555555555BBFCCD2DE3EF50062C005555555555555C005555555555556BCC800000 0000000BFCBE02468ACF136C005555555555555C0055555555555563FE555555555554 FBFCA8C536FE1A8C6C005555555555555C0055555555555563FF5555555555552BFC8D 76B54932711C005555555555555C0055555555555563FFFFFFFFFFFFFFCBFC6C16C16C 16C18C005555555555555C0055555555555564005555555555553BFC44A55B66C77DAC 005555555555555C005555555555556400AAAAAAAAAAAA8BFC1722833944A58C005555 555555555C005555555555556400FFFFFFFFFFFFDBFBC71C71C71C721C005555555555 555C0055555555555564012AAAAAAAAAAA9BFB53D0F8CB48709C005555555555555C00 55555555555564015555555555554BFAA8C536FE1A8CEC005555555555555C00555555 55555564017FFFFFFFFFFFFBF923456789ABCF2C005555555555555C00555555555555 6401AAAAAAAAAAAAA3F93B8B302A7A1E5C005555555555555C005555555555556401D5 555555555553FAE573AC901E571C005555555555555C00555555555555640200000000 000003FBA2B3C4D5E6F81C005555555555555C00555555555555640215555555555553 FC2F684BDA12F67C005555555555555C0055555555555564022AAAAAAAAAAAA3FC9388 277166052C005555555555555C0055555555555564023FFFFFFFFFFFF3FCFDB97530EC A83C005555555555555C000000000000001C024000000000000BF947AE147AE1474C00 5555555555555C000000000000001C022AAAAAAAAAAABBFABAF98D76B5488C00555555 5555555C000000000000001C021555555555556BFB5CEB240795CEAC00555555555555 5C000000000000001C020000000000001BFBD0369D0369CFFC005555555555555C0000 00000000001C01D555555555557BFC1BAF98D76B548C005555555555555C0000000000 00001C01AAAAAAAAAAAACBFC49327104EE2CCC005555555555555C000000000000001C 018000000000001BFC70A3D70A3D70AC005555555555555C000000000000001C015555 555555556BFC9203CAE759202C005555555555555C000000000000001C012AAAAAAAAA AABBFCAD524C9C413B7C005555555555555C000000000000001C010000000000000BFC C28F5C28F5C28C005555555555555C000000000000001C00AAAAAAAAAAAABBFCD1BAF9 8D76B54C005555555555555C000000000000001C005555555555556BFCDAD524C9C413 BC005555555555555C000000000000001C000000000000001BFCDDDDDDDDDDDDEC0055 55555555555C000000000000001BFF5555555555558BFCDAD524C9C413BC0055555555 55555C000000000000001BFE555555555555BBFCD1BAF98D76B55C005555555555555C 000000000000001BCC8000000000000BFCC28F5C28F5C29C005555555555555C000000 0000000013FE555555555554FBFCAD524C9C413B9C005555555555555C000000000000 0013FF5555555555552BFC9203CAE759204C005555555555555C0000000000000013FF FFFFFFFFFFFFCBFC70A3D70A3D70BC005555555555555C000000000000001400555555 5555553BFC49327104EE2CDC005555555555555C000000000000001400AAAAAAAAAAAA 8BFC1BAF98D76B54BC005555555555555C000000000000001400FFFFFFFFFFFFDBFBD0 369D0369D07C005555555555555C0000000000000014012AAAAAAAAAAA9BFB5CEB2407 95CEFC005555555555555C0000000000000014015555555555554BFABAF98D76B549AC 005555555555555C0000000000000014017FFFFFFFFFFFFBF947AE147AE148AC005555 555555555C000000000000001401AAAAAAAAAAAAA3F91722833944A4DC005555555555 555C000000000000001401D5555555555553FAD33F5617839A5C005555555555555C00 000000000000140200000000000003FB999999999999BC005555555555555C00000000 000000140215555555555553FC2ADB363BEC474C005555555555555C00000000000000 14022AAAAAAAAAAAA3FC8EFB11D33F55FC005555555555555C0000000000000014023F FFFFFFFFFFF3FCF92C5F92C5F90C005555555555555BFF5555555555558C0240000000 00000BF923456789ABCE4C005555555555555BFF5555555555558C022AAAAAAAAAAABB FAA8C536FE1A8C0C005555555555555BFF5555555555558C021555555555556BFB53D0 F8CB48702C005555555555555BFF5555555555558C020000000000001BFBC71C71C71C 717C005555555555555BFF5555555555558C01D555555555557BFC1722833944A54C00 5555555555555BFF5555555555558C01AAAAAAAAAAAACBFC44A55B66C77D8C00555555 5555555BFF5555555555558C018000000000001BFC6C16C16C16C16C00555555555555 5BFF5555555555558C015555555555556BFC8D76B54932710C005555555555555BFF55 55555555558C012AAAAAAAAAAABBFCA8C536FE1A8C5C005555555555555BFF55555555 55558C010000000000000BFCBE02468ACF136C005555555555555BFF5555555555558C 00AAAAAAAAAAAABBFCCD2DE3EF50062C005555555555555BFF5555555555558C005555 555555556BFCD6480F2B9D649C005555555555555BFF5555555555558C000000000000 001BFCD950C83FB72EBC005555555555555BFF5555555555558BFF5555555555558BFC D6480F2B9D648C005555555555555BFF5555555555558BFE555555555555BBFCCD2DE3 EF50062C005555555555555BFF5555555555558BCC8000000000000BFCBE02468ACF13 6C005555555555555BFF55555555555583FE555555555554FBFCA8C536FE1A8C6C0055 55555555555BFF55555555555583FF5555555555552BFC8D76B54932711C0055555555 55555BFF55555555555583FFFFFFFFFFFFFFCBFC6C16C16C16C18C005555555555555B FF55555555555584005555555555553BFC44A55B66C77DAC005555555555555BFF5555 555555558400AAAAAAAAAAAA8BFC1722833944A58C005555555555555BFF5555555555 558400FFFFFFFFFFFFDBFBC71C71C71C721C005555555555555BFF5555555555558401 2AAAAAAAAAAA9BFB53D0F8CB48709C005555555555555BFF5555555555558401555555 5555554BFAA8C536FE1A8CEC005555555555555BFF55555555555584017FFFFFFFFFFF FBF923456789ABCF2C005555555555555BFF5555555555558401AAAAAAAAAAAAA3F93B 8B302A7A1E5C005555555555555BFF5555555555558401D5555555555553FAE573AC90 1E571C005555555555555BFF555555555555840200000000000003FBA2B3C4D5E6F81C 005555555555555BFF555555555555840215555555555553FC2F684BDA12F67C005555 555555555BFF55555555555584022AAAAAAAAAAAA3FC9388277166052C005555555555 555BFF55555555555584023FFFFFFFFFFFF3FCFDB97530ECA83C005555555555555BFE 555555555555BC024000000000000BF86C16C16C16C09C005555555555555BFE555555 555555BC022AAAAAAAAAAABBFA722833944A550C005555555555555BFE555555555555 BC021555555555556BFB388277166054EC005555555555555BFE555555555555BC0200 00000000001BFBABCDF01234563C005555555555555BFE555555555555BC01D5555555 55557BFC097B425ED097AC005555555555555BFE555555555555BC01AAAAAAAAAAAACB FC36FE1A8C536FEC005555555555555BFE555555555555BC018000000000001BFC5E6F 8091A2B3CC005555555555555BFE555555555555BC015555555555556BFC7FCF746EBE 634C005555555555555BFE555555555555BC012AAAAAAAAAAABBFC9B1DF623A67E9C00 5555555555555BFE555555555555BC010000000000000BFCB05B05B05B05AC00555555 5555555BFE555555555555BC00AAAAAAAAAAAABBFCBF86A314DBF86C00555555555555 5BFE555555555555BC005555555555556BFCC8A0CE512956EC005555555555555BFE55 5555555555BC000000000000001BFCCBA9876543210C005555555555555BFE55555555 5555BBFF5555555555558BFCC8A0CE512956DC005555555555555BFE555555555555BB FE555555555555BBFCBF86A314DBF87C005555555555555BFE555555555555BBCC8000 000000000BFCB05B05B05B05BC005555555555555BFE555555555555B3FE5555555555 54FBFC9B1DF623A67EBC005555555555555BFE555555555555B3FF5555555555552BFC 7FCF746EBE636C005555555555555BFE555555555555B3FFFFFFFFFFFFFFCBFC5E6F80 91A2B3DC005555555555555BFE555555555555B4005555555555553BFC36FE1A8C536F FC005555555555555BFE555555555555B400AAAAAAAAAAAA8BFC097B425ED097DC0055 55555555555BFE555555555555B400FFFFFFFFFFFFDBFBABCDF0123456BC0055555555 55555BFE555555555555B4012AAAAAAAAAAA9BFB3882771660553C005555555555555B FE555555555555B4015555555555554BFA722833944A562C005555555555555BFE5555 55555555B4017FFFFFFFFFFFFBF86C16C16C16C34C005555555555555BFE5555555555 55B401AAAAAAAAAAAAA3F9A8C536FE1A8C1C005555555555555BFE555555555555B401 D5555555555553FB0E0857FCF746EC005555555555555BFE555555555555B402000000 00000003FBBE02468ACF137C005555555555555BFE555555555555B402155555555555 53FC3D0F8CB487042C005555555555555BFE555555555555B4022AAAAAAAAAAAA3FCA1 2F684BDA12DC005555555555555BFE555555555555B4023FFFFFFFFFFFF3FD05B05B05 B05AFC005555555555555BCC8000000000000C024000000000000BC72000000000000C 005555555555555BCC8000000000000C022AAAAAAAAAAABBFA1722833944A50C005555 555555555BCC8000000000000C021555555555556BFB0AFF9EE8DD7CAC005555555555 555BCC8000000000000C020000000000001BFB7E4B17E4B17DFC005555555555555BCC 8000000000000C01D555555555557BFBE573AC901E570C005555555555555BCC800000 0000000C01AAAAAAAAAAAACBFC203CAE759203CC005555555555555BCC800000000000 0C018000000000001BFC47AE147AE147AC005555555555555BCC8000000000000C0155 55555555556BFC690E0857FCF74C005555555555555BCC8000000000000C012AAAAAAA AAAABBFC845C8A0CE5129C005555555555555BCC8000000000000C010000000000000B FC999999999999AC005555555555555BCC8000000000000C00AAAAAAAAAAAABBFCA8C5 36FE1A8C6C005555555555555BCC8000000000000C005555555555556BFCB1DF623A67 EADC005555555555555BCC8000000000000C000000000000001BFCB4E81B4E81B4FC00 5555555555555BCC8000000000000BFF5555555555558BFCB1DF623A67EACC00555555 5555555BCC8000000000000BFE555555555555BBFCA8C536FE1A8C6C00555555555555 5BCC8000000000000BCC8000000000000BFC999999999999AC005555555555555BCC80 000000000003FE555555555554FBFC845C8A0CE512AC005555555555555BCC80000000 000003FF5555555555552BFC690E0857FCF75C005555555555555BCC80000000000003 FFFFFFFFFFFFFFCBFC47AE147AE147CC005555555555555BCC80000000000004005555 555555553BFC203CAE759203EC005555555555555BCC8000000000000400AAAAAAAAAA AA8BFBE573AC901E577C005555555555555BCC8000000000000400FFFFFFFFFFFFDBFB 7E4B17E4B17E9C005555555555555BCC80000000000004012AAAAAAAAAAA9BFB0AFF9E E8DD7D1C005555555555555BCC80000000000004015555555555554BFA1722833944A5 EC005555555555555BCC80000000000004017FFFFFFFFFFFFBC92278000000000C0055 55555555555BCC8000000000000401AAAAAAAAAAAAA3FA2F684BDA12F64C0055555555 55555BCC8000000000000401D5555555555553FB3B8B302A7A1F0C005555555555555B CC800000000000040200000000000003FBEB851EB851EB9C005555555555555BCC8000 00000000040215555555555553FC53D0F8CB48703C005555555555555BCC8000000000 0004022AAAAAAAAAAAA3FCB7F0D4629B7EEC005555555555555BCC8000000000000402 3FFFFFFFFFFFF3FD111111111110FC0055555555555553FE555555555554FC02400000 00000003F8FDB97530ECA77C0055555555555553FE555555555554FC022AAAAAAAAAAA BBF92F684BDA12F60C0055555555555553FE555555555554FC021555555555556BFA96 90E0857FCFBC0055555555555553FE555555555554FC020000000000001BFB3E93E93E 93E93C0055555555555553FE555555555554FC01D555555555557BFBA5BC7DEA00C24C 0055555555555553FE555555555554FC01AAAAAAAAAAAACBFC0061172283396C005555 5555555553FE555555555554FC018000000000001BFC27D27D27D27D4C005555555555 5553FE555555555554FC015555555555556BFC49327104EE2CCC0055555555555553FE 555555555554FC012AAAAAAAAAAABBFC6480F2B9D6482C0055555555555553FE555555 555554FC010000000000000BFC79BE02468ACF3C0055555555555553FE555555555554 FC00AAAAAAAAAAAABBFC88E99FAB0BC1FC0055555555555553FE555555555554FC0055 55555555556BFC9203CAE759206C0055555555555553FE555555555554FC0000000000 00001BFC950C83FB72EA8C0055555555555553FE555555555554FBFF5555555555558B FC9203CAE759205C0055555555555553FE555555555554FBFE555555555555BBFC88E9 9FAB0BC1FC0055555555555553FE555555555554FBCC8000000000000BFC79BE02468A CF3C0055555555555553FE555555555554F3FE555555555554FBFC6480F2B9D6483C00 55555555555553FE555555555554F3FF5555555555552BFC49327104EE2CEC00555555 55555553FE555555555554F3FFFFFFFFFFFFFFCBFC27D27D27D27D5C00555555555555 53FE555555555554F4005555555555553BFC0061172283397C0055555555555553FE55 5555555554F400AAAAAAAAAAAA8BFBA5BC7DEA00C29C0055555555555553FE55555555 5554F400FFFFFFFFFFFFDBFB3E93E93E93E9BC0055555555555553FE555555555554F4 012AAAAAAAAAAA9BFA9690E0857FD06C0055555555555553FE555555555554F4015555 555555554BF92F684BDA12F85C0055555555555553FE555555555554F4017FFFFFFFFF FFF3F8FDB97530ECA4CC0055555555555553FE555555555554F401AAAAAAAAAAAAA3FA AED6A9264E200C0055555555555553FE555555555554F401D5555555555553FB7B425E D097B3EC0055555555555553FE555555555554F40200000000000003FC159E26AF37C0 4C0055555555555553FE555555555554F40215555555555553FC73AC901E573AAC0055 555555555553FE555555555554F4022AAAAAAAAAAAA3FCD7CC6BB5AA495C0055555555 555553FE555555555554F4023FFFFFFFFFFFF3FD20FEDCBA98763C0055555555555553 FF5555555555552C0240000000000003FA23456789ABCDEC0055555555555553FF5555 555555552C022AAAAAAAAAAAB3F5845C8A0CE5208C0055555555555553FF5555555555 552C021555555555556BF9E573AC901E576C0055555555555553FF5555555555552C02 0000000000001BFAD950C83FB72E6C0055555555555553FF5555555555552C01D55555 5555557BFB53D0F8CB48704C0055555555555553FF5555555555552C01AAAAAAAAAAAA CBFBAED6A9264E20CC0055555555555553FF5555555555552C018000000000001BFBFD B97530ECA86C0055555555555553FF5555555555552C015555555555556BFC203CAE75 9203DC0055555555555553FF5555555555552C012AAAAAAAAAAABBFC3B8B302A7A1F2C 0055555555555553FF5555555555552C010000000000000BFC50C83FB72EA63C005555 5555555553FF5555555555552C00AAAAAAAAAAAABBFC5FF3DD1BAF98FC005555555555 5553FF5555555555552C005555555555556BFC690E0857FCF76C0055555555555553FF 5555555555552C000000000000001BFC6C16C16C16C18C0055555555555553FF555555 5555552BFF5555555555558BFC690E0857FCF75C0055555555555553FF555555555555 2BFE555555555555BBFC5FF3DD1BAF98FC0055555555555553FF5555555555552BCC80 00000000000BFC50C83FB72EA63C0055555555555553FF55555555555523FE55555555 5554FBFC3B8B302A7A1F3C0055555555555553FF55555555555523FF5555555555552B FC203CAE759203EC0055555555555553FF55555555555523FFFFFFFFFFFFFFCBFBFDB9 7530ECA8BC0055555555555553FF55555555555524005555555555553BFBAED6A9264E 20FC0055555555555553FF5555555555552400AAAAAAAAAAAA8BFB53D0F8CB48709C00 55555555555553FF5555555555552400FFFFFFFFFFFFDBFAD950C83FB72F6C00555555 55555553FF55555555555524012AAAAAAAAAAA9BF9E573AC901E58DC00555555555555 53FF555555555555240155555555555543F5845C8A0CE4FB6C0055555555555553FF55 555555555524017FFFFFFFFFFFF3FA23456789ABCD3C0055555555555553FF55555555 55552401AAAAAAAAAAAAA3FB2956D9B1DF620C0055555555555553FF55555555555524 01D5555555555553FBCD2DE3EF5005EC0055555555555553FF55555555555524020000 0000000003FC3E93E93E93E94C0055555555555553FF55555555555524021555555555 5553FC9CA252ADB363AC0055555555555553FF55555555555524022AAAAAAAAAAAA3FD 0061172283392C0055555555555553FF55555555555524023FFFFFFFFFFFF3FD3579BE 02468ABC0055555555555553FFFFFFFFFFFFFFCC0240000000000003FAEB851EB851EB 6C0055555555555553FFFFFFFFFFFFFFCC022AAAAAAAAAAAB3F9A8C536FE1A8D0C0055 555555555553FFFFFFFFFFFFFFCC021555555555556BF753D0F8CB48718C0055555555 555553FFFFFFFFFFFFFFCC020000000000001BFA111111111110AC0055555555555553 FFFFFFFFFFFFFFCC01D555555555557BFADF623A67EAC2BC0055555555555553FFFFFF FFFFFFFFCC01AAAAAAAAAAAACBFB4AB6CD8EFB11EC0055555555555553FFFFFFFFFFFF FFCC018000000000001BFB999999999999AC0055555555555553FFFFFFFFFFFFFFCC01 5555555555556BFBDC598153D0F8FC0055555555555553FFFFFFFFFFFFFFCC012AAAAA AAAAAABBFC097B425ED097CC0055555555555553FFFFFFFFFFFFFFCC01000000000000 0BFC1EB851EB851EDC0055555555555553FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFC2D E3EF5006119C0055555555555553FFFFFFFFFFFFFFCC005555555555556BFC36FE1A8C 53700C0055555555555553FFFFFFFFFFFFFFCC000000000000001BFC3A06D3A06D3A2C 0055555555555553FFFFFFFFFFFFFFCBFF5555555555558BFC36FE1A8C536FFC005555 5555555553FFFFFFFFFFFFFFCBFE555555555555BBFC2DE3EF5006119C005555555555 5553FFFFFFFFFFFFFFCBCC8000000000000BFC1EB851EB851EDC0055555555555553FF FFFFFFFFFFFFC3FE555555555554FBFC097B425ED097DC0055555555555553FFFFFFFF FFFFFFC3FF5555555555552BFBDC598153D0F91C0055555555555553FFFFFFFFFFFFFF C3FFFFFFFFFFFFFFCBFB999999999999EC0055555555555553FFFFFFFFFFFFFFC40055 55555555553BFB4AB6CD8EFB122C0055555555555553FFFFFFFFFFFFFFC400AAAAAAAA AAAA8BFADF623A67EAC3BC0055555555555553FFFFFFFFFFFFFFC400FFFFFFFFFFFFDB FA111111111111EC0055555555555553FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BF753D0 F8CB48774C0055555555555553FFFFFFFFFFFFFFC40155555555555543F9A8C536FE1A 8ABC0055555555555553FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3FAEB851EB851EACC00 55555555555553FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FB8D76B5493270CC00555555 55555553FFFFFFFFFFFFFFC401D5555555555553FC18A6DFC3518A5C00555555555555 53FFFFFFFFFFFFFFC40200000000000003FC70A3D70A3D70AC0055555555555553FFFF FFFFFFFFFFC40215555555555553FCCEB240795CEB0C0055555555555553FFFFFFFFFF FFFFC4022AAAAAAAAAAAA3FD19690E0857FCDC0055555555555553FFFFFFFFFFFFFFC4 023FFFFFFFFFFFF3FD4E81B4E81B4E6C0055555555555554005555555555553C024000 0000000003FB6C16C16C16C13C0055555555555554005555555555553C022AAAAAAAAA AAB3FAC10AFF9EE8DD8C0055555555555554005555555555553C0215555555555563F9 845C8A0CE5122C0055555555555554005555555555553C020000000000001BF7234567 89ABCD3C0055555555555554005555555555553C01D555555555557BF9E573AC901E57 7C0055555555555554005555555555553C01AAAAAAAAAAAACBFAA8C536FE1A8CBC0055 555555555554005555555555553C018000000000001BFB23456789ABCE2C0055555555 555554005555555555553C015555555555556BFB66054F43E32D5C0055555555555554 005555555555553C012AAAAAAAAAAABBFB9CA252ADB363FC0055555555555554005555 555555553C010000000000000BFBC71C71C71C720C0055555555555554005555555555 553C00AAAAAAAAAAAABBFBE573AC901E577C0055555555555554005555555555553C00 5555555555556BFBF7A80308B9145C0055555555555554005555555555553C00000000 0000001BFBFDB97530ECA8CC0055555555555554005555555555553BFF555555555555 8BFBF7A80308B9147C0055555555555554005555555555553BFE555555555555BBFBE5 73AC901E579C0055555555555554005555555555553BCC8000000000000BFBC71C71C7 1C722C00555555555555540055555555555533FE555555555554FBFB9CA252ADB3642C 00555555555555540055555555555533FF5555555555552BFB66054F43E32D8C005555 55555555540055555555555533FFFFFFFFFFFFFFCBFB23456789ABCE5C005555555555 55540055555555555534005555555555553BFAA8C536FE1A8D2C005555555555555400 5555555555553400AAAAAAAAAAAA8BF9E573AC901E592C005555555555555400555555 5555553400FFFFFFFFFFFFDBF723456789ABD61C005555555555555400555555555555 34012AAAAAAAAAAA93F9845C8A0CE5107C005555555555555400555555555555340155 555555555543FAC10AFF9EE8DC8C00555555555555540055555555555534017FFFFFFF FFFFF3FB6C16C16C16C0FC0055555555555554005555555555553401AAAAAAAAAAAAA3 FC01E573AC901E2C0055555555555554005555555555553401D5555555555553FC53D0 F8CB48702C005555555555555400555555555555340200000000000003FCABCDF01234 566C005555555555555400555555555555340215555555555553FD04EE2CC0A9E86C00 555555555555540055555555555534022AAAAAAAAAAAA3FD36FE1A8C536FCC00555555 555555540055555555555534023FFFFFFFFFFFF3FD6C16C16C16C14C00555555555555 5400AAAAAAAAAAAA8C0240000000000003FBF49F49F49F49DC005555555555555400AA AAAAAAAAAA8C022AAAAAAAAAAAB3FB690E0857FCF74C005555555555555400AAAAAAAA AAAA8C0215555555555563FAD33F5617839A5C005555555555555400AAAAAAAAAAAA8C 0200000000000013F9D950C83FB72F3C005555555555555400AAAAAAAAAAAA8C01D555 5555555573F6E573AC901E589C005555555555555400AAAAAAAAAAAA8C01AAAAAAAAAA AACBF92F684BDA12F6FC005555555555555400AAAAAAAAAAAA8C018000000000001BFA 3579BE02468AFC005555555555555400AAAAAAAAAAAA8C015555555555556BFABAF98D 76B549AC005555555555555400AAAAAAAAAAAA8C012AAAAAAAAAAABBFB1419CA252ADB 7C005555555555555400AAAAAAAAAAAA8C010000000000000BFB3E93E93E93E98C0055 55555555555400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFB5CEB240795CEFC0055555555 55555400AAAAAAAAAAAA8C005555555555556BFB6F1F7A80308BDC0055555555555554 00AAAAAAAAAAAA8C000000000000001BFB7530ECA864202C005555555555555400AAAA AAAAAAAA8BFF5555555555558BFB6F1F7A80308BDC005555555555555400AAAAAAAAAA AA8BFE555555555555BBFB5CEB240795CF0C005555555555555400AAAAAAAAAAAA8BCC 8000000000000BFB3E93E93E93E99C005555555555555400AAAAAAAAAAAA83FE555555 555554FBFB1419CA252ADB9C005555555555555400AAAAAAAAAAAA83FF555555555555 2BFABAF98D76B549EC005555555555555400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFA35 79BE02468B8C005555555555555400AAAAAAAAAAAA84005555555555553BF92F684BDA 12F82C005555555555555400AAAAAAAAAAAA8400AAAAAAAAAAAA83F6E573AC901E4A1C 005555555555555400AAAAAAAAAAAA8400FFFFFFFFFFFFD3F9D950C83FB72CDC005555 555555555400AAAAAAAAAAAA84012AAAAAAAAAAA93FAD33F561783996C005555555555 555400AAAAAAAAAAAA840155555555555543FB690E0857FCF6DC005555555555555400 AAAAAAAAAAAA84017FFFFFFFFFFFF3FBF49F49F49F498C005555555555555400AAAAAA AAAAAA8401AAAAAAAAAAAAA3FC4629B7F0D4627C005555555555555400AAAAAAAAAAAA 8401D5555555555553FC98153D0F8CB46C005555555555555400AAAAAAAAAAAA840200 000000000003FCF0123456789AAC005555555555555400AAAAAAAAAAAA840215555555 555553FD27104EE2CC0A9C005555555555555400AAAAAAAAAAAA84022AAAAAAAAAAAA3 FD59203CAE7591EC005555555555555400AAAAAAAAAAAA84023FFFFFFFFFFFF3FD8E38 E38E38E36C005555555555555400FFFFFFFFFFFFDC0240000000000003FC47AE147AE1 478C005555555555555400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FC01E573AC901E4C00 5555555555555400FFFFFFFFFFFFDC0215555555555563FB845C8A0CE5126C00555555 5555555400FFFFFFFFFFFFDC0200000000000013FB1111111111111C00555555555555 5400FFFFFFFFFFFFDC01D5555555555573FA53D0F8CB48701C005555555555555400FF FFFFFFFFFFDC01AAAAAAAAAAAAC3F93B8B302A7A1E1C005555555555555400FFFFFFFF FFFFDC018000000000001BC8DB10000000000C005555555555555400FFFFFFFFFFFFDC 015555555555556BF90AFF9EE8DD7E4C005555555555555400FFFFFFFFFFFFDC012AAA AAAAAAAABBF9E573AC901E58CC005555555555555400FFFFFFFFFFFFDC010000000000 000BFA47AE147AE1489C005555555555555400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFA 845C8A0CE5137C005555555555555400FFFFFFFFFFFFDC005555555555556BFAA8C536 FE1A8D2C005555555555555400FFFFFFFFFFFFDC000000000000001BFAB4E81B4E81B5 BC005555555555555400FFFFFFFFFFFFDBFF5555555555558BFAA8C536FE1A8D3C0055 55555555555400FFFFFFFFFFFFDBFE555555555555BBFA845C8A0CE5137C0055555555 55555400FFFFFFFFFFFFDBCC8000000000000BFA47AE147AE1489C0055555555555554 00FFFFFFFFFFFFD3FE555555555554FBF9E573AC901E591C005555555555555400FFFF FFFFFFFFD3FF5555555555552BF90AFF9EE8DD7EBC005555555555555400FFFFFFFFFF FFD3FFFFFFFFFFFFFFCBCA034E800000000C005555555555555400FFFFFFFFFFFFD400 55555555555533F93B8B302A7A1CFC005555555555555400FFFFFFFFFFFFD400AAAAAA AAAAAA83FA53D0F8CB486F2C005555555555555400FFFFFFFFFFFFD400FFFFFFFFFFFF D3FB1111111111107C005555555555555400FFFFFFFFFFFFD4012AAAAAAAAAAA93FB84 5C8A0CE511FC005555555555555400FFFFFFFFFFFFD40155555555555543FC01E573AC 901E1C005555555555555400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FC47AE147AE1476C 005555555555555400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FC9388277166051C005555 555555555400FFFFFFFFFFFFD401D5555555555553FCE573AC901E570C005555555555 555400FFFFFFFFFFFFD40200000000000003FD1EB851EB851EAC005555555555555400 FFFFFFFFFFFFD40215555555555553FD4DBF86A314DBDC005555555555555400FFFFFF FFFFFFD4022AAAAAAAAAAAA3FD7FCF746EBE633C005555555555555400FFFFFFFFFFFF D4023FFFFFFFFFFFF3FDB4E81B4E81B4BC0055555555555554012AAAAAAAAAAA9C0240 000000000003FC9E26AF37C048AC0055555555555554012AAAAAAAAAAA9C022AAAAAAA AAAAB3FC585E0E696F1F6C0055555555555554012AAAAAAAAAAA9C0215555555555563 FC18A6DFC3518A5C0055555555555554012AAAAAAAAAAA9C0200000000000013FBBE02 468ACF134C0055555555555554012AAAAAAAAAAA9C01D5555555555573FB56D9B1DF62 3A3C0055555555555554012AAAAAAAAAAA9C01AAAAAAAAAAAAC3FAF7A80308B9139C00 55555555555554012AAAAAAAAAAA9C0180000000000013FA59E26AF37C041C00555555 55555554012AAAAAAAAAAA9C0155555555555563F9A8C536FE1A8ACC00555555555555 54012AAAAAAAAAAA9C012AAAAAAAAAAAB3F89CA252ADB3608C0055555555555554012A AAAAAAAAAA9C0100000000000003F623456789ABC00C0055555555555554012AAAAAAA AAAA9C00AAAAAAAAAAAABBF753D0F8CB48776C0055555555555554012AAAAAAAAAAA9C 005555555555556BF83B8B302A7A22AC0055555555555554012AAAAAAAAAAA9C000000 000000001BF86C16C16C16C50C0055555555555554012AAAAAAAAAAA9BFF5555555555 558BF83B8B302A7A22DC0055555555555554012AAAAAAAAAAA9BFE555555555555BBF7 53D0F8CB4877DC0055555555555554012AAAAAAAAAAA9BCC80000000000003F6234567 89ABBE6C0055555555555554012AAAAAAAAAAA93FE555555555554F3F89CA252ADB35F BC0055555555555554012AAAAAAAAAAA93FF55555555555523F9A8C536FE1A8A5C0055 555555555554012AAAAAAAAAAA93FFFFFFFFFFFFFFC3FA59E26AF37C038C0055555555 555554012AAAAAAAAAAA940055555555555533FAF7A80308B912FC0055555555555554 012AAAAAAAAAAA9400AAAAAAAAAAAA83FB56D9B1DF6239DC0055555555555554012AAA AAAAAAAA9400FFFFFFFFFFFFD3FBBE02468ACF12BC0055555555555554012AAAAAAAAA AA94012AAAAAAAAAAA93FC18A6DFC3518A1C0055555555555554012AAAAAAAAAAA9401 55555555555543FC585E0E696F1F2C0055555555555554012AAAAAAAAAAA94017FFFFF FFFFFFF3FC9E26AF37C0488C0055555555555554012AAAAAAAAAAA9401AAAAAAAAAAAA A3FCEA00C22E45063C0055555555555554012AAAAAAAAAAA9401D5555555555553FD1D F623A67EAC1C0055555555555554012AAAAAAAAAAA940200000000000003FD49F49F49 F49F3C0055555555555554012AAAAAAAAAAA940215555555555553FD78FBD401845C6C 0055555555555554012AAAAAAAAAAA94022AAAAAAAAAAAA3FDAB0BC1CD2DE3CC005555 5555555554012AAAAAAAAAAA94023FFFFFFFFFFFF3FDE02468ACF1354C005555555555 5554015555555555554C0240000000000003FCFDB97530ECA83C005555555555555401 5555555555554C022AAAAAAAAAAAB3FCB7F0D4629B7F0C005555555555555401555555 5555554C0215555555555563FC7839A5BC7DE9FC005555555555555401555555555555 4C0200000000000013FC3E93E93E93E94C0055555555555554015555555555554C01D5 555555555573FC0AFF9EE8DD7CBC0055555555555554015555555555554C01AAAAAAAA AAAAC3FBBAF98D76B548FC0055555555555554015555555555554C0180000000000013 FB6C16C16C16C13C0055555555555554015555555555554C0155555555555563FB2956 D9B1DF61EC0055555555555554015555555555554C012AAAAAAAAAAAB3FAE573AC901E 569C0055555555555554015555555555554C0100000000000003FA907F6E5D4C3A6C00 55555555555554015555555555554C00AAAAAAAAAAAAB3FA53D0F8CB486F8C00555555 55555554015555555555554C0055555555555563FA2F684BDA12F5CC00555555555555 54015555555555554C0000000000000013FA23456789ABCD2C00555555555555540155 55555555554BFF55555555555583FA2F684BDA12F5BC00555555555555540155555555 55554BFE555555555555B3FA53D0F8CB486F7C0055555555555554015555555555554B CC80000000000003FA907F6E5D4C3A5C00555555555555540155555555555543FE5555 55555554F3FAE573AC901E565C00555555555555540155555555555543FF5555555555 5523FB2956D9B1DF61CC00555555555555540155555555555543FFFFFFFFFFFFFFC3FB 6C16C16C16C0FC005555555555555401555555555555440055555555555533FBBAF98D 76B548BC0055555555555554015555555555554400AAAAAAAAAAAA83FC0AFF9EE8DD7C 8C0055555555555554015555555555554400FFFFFFFFFFFFD3FC3E93E93E93E8FC0055 5555555555540155555555555544012AAAAAAAAAAA93FC7839A5BC7DE9BC0055555555 55555401555555555555440155555555555543FCB7F0D4629B7ECC0055555555555554 0155555555555544017FFFFFFFFFFFF3FCFDB97530ECA82C0055555555555554015555 555555554401AAAAAAAAAAAAA3FD24C9C413B8B2EC0055555555555554015555555555 554401D5555555555553FD4DBF86A314DBEC0055555555555554015555555555554402 00000000000003FD79BE02468ACF0C0055555555555554015555555555554402155555 55555553FDA8C536FE1A8C3C00555555555555540155555555555544022AAAAAAAAAAA A3FDDAD524C9C4138C00555555555555540155555555555544023FFFFFFFFFFFF3FE07 F6E5D4C3B29C0055555555555554017FFFFFFFFFFFFC0240000000000003FD33333333 33332C0055555555555554017FFFFFFFFFFFFC022AAAAAAAAAAAB3FD104EE2CC0A9E8C 0055555555555554017FFFFFFFFFFFFC0215555555555563FCE0E696F1F7A7FC005555 5555555554017FFFFFFFFFFFFC0200000000000013FCA740DA740DA74C005555555555 5554017FFFFFFFFFFFFC01D5555555555573FC73AC901E573ABC005555555555555401 7FFFFFFFFFFFFC01AAAAAAAAAAAAC3FC4629B7F0D4628C0055555555555554017FFFFF FFFFFFFC0180000000000013FC1EB851EB851EAC0055555555555554017FFFFFFFFFFF FC0155555555555563FBFAB0BC1CD2DDEC0055555555555554017FFFFFFFFFFFFC012A AAAAAAAAAAB3FBC413B8B302A75C0055555555555554017FFFFFFFFFFFFC0100000000 000003FB9999999999993C0055555555555554017FFFFFFFFFFFFC00AAAAAAAAAAAAB3 FB7B425ED097B3CC0055555555555554017FFFFFFFFFFFFC0055555555555563FB690E 0857FCF6EC0055555555555554017FFFFFFFFFFFFC0000000000000013FB62FC962FC9 629C0055555555555554017FFFFFFFFFFFFBFF55555555555583FB690E0857FCF6EC00 55555555555554017FFFFFFFFFFFFBFE555555555555B3FB7B425ED097B3BC00555555 55555554017FFFFFFFFFFFFBCC80000000000003FB9999999999992C00555555555555 54017FFFFFFFFFFFF3FE555555555554F3FBC413B8B302A72C0055555555555554017F FFFFFFFFFFF3FF55555555555523FBFAB0BC1CD2DDCC0055555555555554017FFFFFFF FFFFF3FFFFFFFFFFFFFFC3FC1EB851EB851E8C0055555555555554017FFFFFFFFFFFF4 0055555555555533FC4629B7F0D4626C0055555555555554017FFFFFFFFFFFF400AAAA AAAAAAAA83FC73AC901E573A8C0055555555555554017FFFFFFFFFFFF400FFFFFFFFFF FFD3FCA740DA740DA6FC0055555555555554017FFFFFFFFFFFF4012AAAAAAAAAAA93FC E0E696F1F7A7AC0055555555555554017FFFFFFFFFFFF40155555555555543FD104EE2 CC0A9E6C0055555555555554017FFFFFFFFFFFF4017FFFFFFFFFFFF3FD333333333333 1C0055555555555554017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD59203CAE7591EC0055 555555555554017FFFFFFFFFFFF401D5555555555553FD8215FF3DD1BAEC0055555555 555554017FFFFFFFFFFFF40200000000000003FDAE147AE147AE0C0055555555555554 017FFFFFFFFFFFF40215555555555553FDDD1BAF98D76B3C0055555555555554017FFF FFFFFFFFF4022AAAAAAAAAAAA3FE0795CEB240794C0055555555555554017FFFFFFFFF FFF4023FFFFFFFFFFFF3FE2222222222221C005555555555555401AAAAAAAAAAAAAC02 40000000000003FD6C16C16C16C16C005555555555555401AAAAAAAAAAAAAC022AAAAA AAAAAAB3FD49327104EE2CCC005555555555555401AAAAAAAAAAAAAC02155555555555 63FD2956D9B1DF624C005555555555555401AAAAAAAAAAAAAC0200000000000013FD0C 83FB72EA61EC005555555555555401AAAAAAAAAAAAAC01D5555555555573FCE573AC90 1E574C005555555555555401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FCB7F0D4629B7F0C 005555555555555401AAAAAAAAAAAAAC0180000000000013FC907F6E5D4C3B2C005555 555555555401AAAAAAAAAAAAAC0155555555555563FC6F1F7A80308B8C005555555555 555401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FC53D0F8CB48703C005555555555555401 AAAAAAAAAAAAAC0100000000000003FC3E93E93E93E92C005555555555555401AAAAAA AAAAAAAC00AAAAAAAAAAAAB3FC2F684BDA12F66C005555555555555401AAAAAAAAAAAA AC0055555555555563FC264E209DC597FC005555555555555401AAAAAAAAAAAAAC0000 000000000013FC23456789ABCDDC005555555555555401AAAAAAAAAAAAABFF55555555 555583FC264E209DC5980C005555555555555401AAAAAAAAAAAAABFE555555555555B3 FC2F684BDA12F66C005555555555555401AAAAAAAAAAAAABCC80000000000003FC3E93 E93E93E92C005555555555555401AAAAAAAAAAAAA3FE555555555554F3FC53D0F8CB48 702C005555555555555401AAAAAAAAAAAAA3FF55555555555523FC6F1F7A80308B7C00 5555555555555401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FC907F6E5D4C3B0C00555555 5555555401AAAAAAAAAAAAA40055555555555533FCB7F0D4629B7EEC00555555555555 5401AAAAAAAAAAAAA400AAAAAAAAAAAA83FCE573AC901E570C005555555555555401AA AAAAAAAAAAA400FFFFFFFFFFFFD3FD0C83FB72EA61CC005555555555555401AAAAAAAA AAAAA4012AAAAAAAAAAA93FD2956D9B1DF622C005555555555555401AAAAAAAAAAAAA4 0155555555555543FD49327104EE2CAC005555555555555401AAAAAAAAAAAAA4017FFF FFFFFFFFF3FD6C16C16C16C15C005555555555555401AAAAAAAAAAAAA401AAAAAAAAAA AAA3FD9203CAE759202C005555555555555401AAAAAAAAAAAAA401D5555555555553FD BAF98D76B5492C005555555555555401AAAAAAAAAAAAA40200000000000003FDE6F809 1A2B3C4C005555555555555401AAAAAAAAAAAAA40215555555555553FE0AFF9EE8DD7C CC005555555555555401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE240795CEB2406C0055 55555555555401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE3E93E93E93E93C0055555555 55555401D555555555555C0240000000000003FDA987654320FEDC0055555555555554 01D555555555555C022AAAAAAAAAAAB3FD86A314DBF86A3C005555555555555401D555 555555555C0215555555555563FD66C77D88E99FBC005555555555555401D555555555 555C0200000000000013FD49F49F49F49F5C005555555555555401D555555555555C01 D5555555555573FD302A7A1F19691C005555555555555401D555555555555C01AAAAAA AAAAAAC3FD19690E0857FCFC005555555555555401D555555555555C01800000000000 13FD05B05B05B05B0C005555555555555401D555555555555C0155555555555563FCEA 00C22E45066C005555555555555401D555555555555C012AAAAAAAAAAAB3FCCEB24079 5CEB1C005555555555555401D555555555555C0100000000000003FCB97530ECA8640C 005555555555555401D555555555555C00AAAAAAAAAAAAB3FCAA49938827714C005555 555555555401D555555555555C0055555555555563FCA12F684BDA12DC005555555555 555401D555555555555C0000000000000013FC9E26AF37C048BC005555555555555401 D555555555555BFF55555555555583FCA12F684BDA12EC005555555555555401D55555 5555555BFE555555555555B3FCAA49938827714C005555555555555401D55555555555 5BCC80000000000003FCB97530ECA8640C005555555555555401D5555555555553FE55 5555555554F3FCCEB240795CEB0C005555555555555401D5555555555553FF55555555 555523FCEA00C22E45065C005555555555555401D5555555555553FFFFFFFFFFFFFFC3 FD05B05B05B05AFC005555555555555401D55555555555540055555555555533FD1969 0E0857FCEC005555555555555401D555555555555400AAAAAAAAAAAA83FD302A7A1F19 690C005555555555555401D555555555555400FFFFFFFFFFFFD3FD49F49F49F49F3C00 5555555555555401D5555555555554012AAAAAAAAAAA93FD66C77D88E99F8C00555555 5555555401D55555555555540155555555555543FD86A314DBF86A2C00555555555555 5401D5555555555554017FFFFFFFFFFFF3FDA987654320FECC005555555555555401D5 55555555555401AAAAAAAAAAAAA3FDCF746EBE635DAC005555555555555401D5555555 55555401D5555555555553FDF86A314DBF869C005555555555555401D5555555555554 0200000000000003FE123456789ABCEC005555555555555401D5555555555554021555 5555555553FE29B7F0D4629B7C005555555555555401D5555555555554022AAAAAAAAA AAA3FE42BFE7BA375F2C005555555555555401D5555555555554023FFFFFFFFFFFF3FE 5D4C3B2A1907EC0055555555555554020000000000000C0240000000000003FDEB851E B851EB9C0055555555555554020000000000000C022AAAAAAAAAAAB3FDC8A0CE512956 FC0055555555555554020000000000000C0215555555555563FDA8C536FE1A8C7C0055 555555555554020000000000000C0200000000000013FD8BF258BF258C1C0055555555 555554020000000000000C01D5555555555573FD722833944A55DC0055555555555554 020000000000000C01AAAAAAAAAAAAC3FD5B66C77D88E9BC0055555555555554020000 000000000C0180000000000013FD47AE147AE147CC0055555555555554020000000000 000C0155555555555563FD36FE1A8C536FFC0055555555555554020000000000000C01 2AAAAAAAAAAAB3FD2956D9B1DF624C0055555555555554020000000000000C01000000 00000003FD1EB851EB851ECC0055555555555554020000000000000C00AAAAAAAAAAAA B3FD1722833944A56C0055555555555554020000000000000C0055555555555563FD12 956D9B1DF63C0055555555555554020000000000000C0000000000000013FD11111111 11112C0055555555555554020000000000000BFF55555555555583FD12956D9B1DF63C 0055555555555554020000000000000BFE555555555555B3FD1722833944A56C005555 5555555554020000000000000BCC80000000000003FD1EB851EB851ECC005555555555 55540200000000000003FE555555555554F3FD2956D9B1DF624C005555555555555402 00000000000003FF55555555555523FD36FE1A8C536FFC005555555555555402000000 00000003FFFFFFFFFFFFFFC3FD47AE147AE147BC005555555555555402000000000000 040055555555555533FD5B66C77D88E9AC0055555555555554020000000000000400AA AAAAAAAAAA83FD722833944A55CC0055555555555554020000000000000400FFFFFFFF FFFFD3FD8BF258BF258BFC00555555555555540200000000000004012AAAAAAAAAAA93 FDA8C536FE1A8C4C005555555555555402000000000000040155555555555543FDC8A0 CE512956EC00555555555555540200000000000004017FFFFFFFFFFFF3FDEB851EB851 EB8C0055555555555554020000000000000401AAAAAAAAAAAAA3FE08B91419CA253C00 55555555555554020000000000000401D5555555555553FE1D33F5617839BC00555555 5555555402000000000000040200000000000003FE3333333333334C00555555555555 5402000000000000040215555555555553FE4AB6CD8EFB11DC00555555555555540200 000000000004022AAAAAAAAAAAA3FE63BEC474CFD58C00555555555555540200000000 000004023FFFFFFFFFFFF3FE7E4B17E4B17E4C0055555555555554021555555555555C 0240000000000003FE1907F6E5D4C3BC0055555555555554021555555555555C022AAA AAAAAAAAB3FE0795CEB240796C0055555555555554021555555555555C021555555555 5563FDEF50061172283C0055555555555554021555555555555C0200000000000013FD D27D27D27D27DC0055555555555554021555555555555C01D5555555555573FDB8B302 A7A1F19C0055555555555554021555555555555C01AAAAAAAAAAAAC3FDA1F19690E085 7C0055555555555554021555555555555C0180000000000013FD8E38E38E38E38C0055 555555555554021555555555555C0155555555555563FD7D88E99FAB0BBC0055555555 555554021555555555555C012AAAAAAAAAAAB3FD6FE1A8C536FE0C0055555555555554 021555555555555C0100000000000003FD654320FEDCBA8C0055555555555554021555 555555555C00AAAAAAAAAAAAB3FD5DAD524C9C412C0055555555555554021555555555 555C0055555555555563FD59203CAE7591FC0055555555555554021555555555555C00 00000000000013FD579BE02468ACEC0055555555555554021555555555555BFF555555 55555583FD59203CAE7591FC0055555555555554021555555555555BFE555555555555 B3FD5DAD524C9C412C0055555555555554021555555555555BCC80000000000003FD65 4320FEDCBA8C00555555555555540215555555555553FE555555555554F3FD6FE1A8C5 36FE0C00555555555555540215555555555553FF55555555555523FD7D88E99FAB0BBC 00555555555555540215555555555553FFFFFFFFFFFFFFC3FD8E38E38E38E37C005555 555555555402155555555555540055555555555533FDA1F19690E0856C005555555555 5554021555555555555400AAAAAAAAAAAA83FDB8B302A7A1F18C005555555555555402 1555555555555400FFFFFFFFFFFFD3FDD27D27D27D27BC005555555555555402155555 55555554012AAAAAAAAAAA93FDEF50061172280C005555555555555402155555555555 540155555555555543FE0795CEB240795C00555555555555540215555555555554017F FFFFFFFFFFF3FE1907F6E5D4C3AC0055555555555554021555555555555401AAAAAAAA AAAAA3FE2BFE7BA375F31C0055555555555554021555555555555401D5555555555553 FE40795CEB24079C005555555555555402155555555555540200000000000003FE5678 9ABCDF012C005555555555555402155555555555540215555555555553FE6DFC3518A6 DFBC00555555555555540215555555555554022AAAAAAAAAAAA3FE87042BFE7BA36C00 555555555555540215555555555554023FFFFFFFFFFFF3FEA1907F6E5D4C2C00555555 55555554022AAAAAAAAAAAAC0240000000000003FE3E93E93E93E92C00555555555555 54022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE2D21C10AFF9EEC0055555555555554022A AAAAAAAAAAAC0215555555555563FE1D33F56178399C0055555555555554022AAAAAAA AAAAAC0200000000000013FE0ECA8641FDB97C0055555555555554022AAAAAAAAAAAAC 01D5555555555573FE01E573AC901E5C0055555555555554022AAAAAAAAAAAAC01AAAA AAAAAAAAC3FDED097B425ED07C0055555555555554022AAAAAAAAAAAAC018000000000 0013FDD950C83FB72E8C0055555555555554022AAAAAAAAAAAAC0155555555555563FD C8A0CE512956BC0055555555555554022AAAAAAAAAAAAC012AAAAAAAAAAAB3FDBAF98D 76B5490C0055555555555554022AAAAAAAAAAAAC0100000000000003FDB05B05B05B05 8C0055555555555554022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FDA8C536FE1A8C2C0055 555555555554022AAAAAAAAAAAAC0055555555555563FDA438215FF3DCFC0055555555 555554022AAAAAAAAAAAAC0000000000000013FDA2B3C4D5E6F7EC0055555555555554 022AAAAAAAAAAAABFF55555555555583FDA438215FF3DCFC0055555555555554022AAA AAAAAAAAABFE555555555555B3FDA8C536FE1A8C2C0055555555555554022AAAAAAAAA AAABCC80000000000003FDB05B05B05B058C0055555555555554022AAAAAAAAAAAA3FE 555555555554F3FDBAF98D76B5490C0055555555555554022AAAAAAAAAAAA3FF555555 55555523FDC8A0CE512956BC0055555555555554022AAAAAAAAAAAA3FFFFFFFFFFFFFF C3FDD950C83FB72E7C0055555555555554022AAAAAAAAAAAA40055555555555533FDED 097B425ED06C0055555555555554022AAAAAAAAAAAA400AAAAAAAAAAAA83FE01E573AC 901E4C0055555555555554022AAAAAAAAAAAA400FFFFFFFFFFFFD3FE0ECA8641FDB96C 0055555555555554022AAAAAAAAAAAA4012AAAAAAAAAAA93FE1D33F56178398C005555 5555555554022AAAAAAAAAAAA40155555555555543FE2D21C10AFF9EDC005555555555 5554022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE3E93E93E93E92C005555555555555402 2AAAAAAAAAAAA401AAAAAAAAAAAAA3FE518A6DFC35189C0055555555555554022AAAAA AAAAAAA401D5555555555553FE66054F43E32D0C0055555555555554022AAAAAAAAAAA A40200000000000003FE7C048D159E26AC0055555555555554022AAAAAAAAAAAA40215 555555555553FE9388277166053C0055555555555554022AAAAAAAAAAAA4022AAAAAAA AAAAA3FEAC901E573AC8EC0055555555555554022AAAAAAAAAAAA4023FFFFFFFFFFFF3 FEC71C71C71C71AC0055555555555554023FFFFFFFFFFFFC0240000000000003FE6666 666666665C0055555555555554023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE54F43E32D2 1C0C0055555555555554023FFFFFFFFFFFFC0215555555555563FE450672894AB6CC00 55555555555554023FFFFFFFFFFFFC0200000000000013FE369D0369D0369C00555555 55555554023FFFFFFFFFFFFC01D5555555555573FE29B7F0D4629B7C00555555555555 54023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE1E573AC901E56C0055555555555554023F FFFFFFFFFFFC0180000000000013FE147AE147AE147C0055555555555554023FFFFFFF FFFFFC0155555555555563FE0C22E45067288C0055555555555554023FFFFFFFFFFFFC 012AAAAAAAAAAAB3FE054F43E32D21BC0055555555555554023FFFFFFFFFFFFC010000 0000000003FDFFFFFFFFFFFFDC0055555555555554023FFFFFFFFFFFFC00AAAAAAAAAA AAB3FDF86A314DBF867C0055555555555554023FFFFFFFFFFFFC0055555555555563FD F3DD1BAF98D74C0055555555555554023FFFFFFFFFFFFC0000000000000013FDF258BF 258BF23C0055555555555554023FFFFFFFFFFFFBFF55555555555583FDF3DD1BAF98D7 4C0055555555555554023FFFFFFFFFFFFBFE555555555555B3FDF86A314DBF867C0055 555555555554023FFFFFFFFFFFFBCC80000000000003FDFFFFFFFFFFFFDC0055555555 555554023FFFFFFFFFFFF3FE555555555554F3FE054F43E32D21BC0055555555555554 023FFFFFFFFFFFF3FF55555555555523FE0C22E45067287C0055555555555554023FFF FFFFFFFFF3FFFFFFFFFFFFFFC3FE147AE147AE146C0055555555555554023FFFFFFFFF FFF40055555555555533FE1E573AC901E55C0055555555555554023FFFFFFFFFFFF400 AAAAAAAAAAAA83FE29B7F0D4629B6C0055555555555554023FFFFFFFFFFFF400FFFFFF FFFFFFD3FE369D0369D0368C0055555555555554023FFFFFFFFFFFF4012AAAAAAAAAAA 93FE450672894AB6BC0055555555555554023FFFFFFFFFFFF40155555555555543FE54 F43E32D21BFC0055555555555554023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE66666666 66665C0055555555555554023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE795CEB240795BC 0055555555555554023FFFFFFFFFFFF401D5555555555553FE8DD7CC6BB5AA3C005555 5555555554023FFFFFFFFFFFF40200000000000003FEA3D70A3D70A3CC005555555555 5554023FFFFFFFFFFFF40215555555555553FEBB5AA49938826C005555555555555402 3FFFFFFFFFFFF4022AAAAAAAAAAAA3FED4629B7F0D460C0055555555555554023FFFFF FFFFFFF4023FFFFFFFFFFFF3FEEEEEEEEEEEEEDC004000000000000C02400000000000 0C0240000000000003FD2222222222222C004000000000000C024000000000000C022A AAAAAAAAAAB3FCFE7BA375F31B1C004000000000000C024000000000000C0215555555 555563FCBEC474CFD5860C004000000000000C024000000000000C0200000000000013 FC851EB851EB855C004000000000000C024000000000000C01D5555555555573FC518A 6DFC3518CC004000000000000C024000000000000C01AAAAAAAAAAAAC3FC240795CEB2 408C004000000000000C024000000000000C0180000000000013FBF92C5F92C5F95C00 4000000000000C024000000000000C0155555555555563FBB66C77D88E9A0C00400000 0000000C024000000000000C012AAAAAAAAAAAB3FB7FCF746EBE636C00400000000000 0C024000000000000C0100000000000003FB5555555555555C004000000000000C0240 00000000000C00AAAAAAAAAAAAB3FB36FE1A8C536FEC004000000000000C0240000000 00000C0055555555555563FB24C9C413B8B30C004000000000000C024000000000000C 0000000000000013FB1EB851EB851EBC004000000000000C024000000000000BFF5555 5555555583FB24C9C413B8B30C004000000000000C024000000000000BFE5555555555 55B3FB36FE1A8C536FDC004000000000000C024000000000000BCC80000000000003FB 5555555555554C004000000000000C0240000000000003FE555555555554F3FB7FCF74 6EBE634C004000000000000C0240000000000003FF55555555555523FBB66C77D88E99 EC004000000000000C0240000000000003FFFFFFFFFFFFFFC3FBF92C5F92C5F91C0040 00000000000C02400000000000040055555555555533FC240795CEB2407C0040000000 00000C024000000000000400AAAAAAAAAAAA83FC518A6DFC35189C004000000000000C 024000000000000400FFFFFFFFFFFFD3FC851EB851EB850C004000000000000C024000 0000000004012AAAAAAAAAAA93FCBEC474CFD585BC004000000000000C024000000000 00040155555555555543FCFE7BA375F31ADC004000000000000C024000000000000401 7FFFFFFFFFFFF3FD2222222222221C004000000000000C024000000000000401AAAAAA AAAAAAA3FD480F2B9D6480FC004000000000000C024000000000000401D55555555555 53FD7104EE2CC0A9EC004000000000000C02400000000000040200000000000003FD9D 0369D0369D0C004000000000000C02400000000000040215555555555553FDCC0A9E87 C65A4C004000000000000C0240000000000004022AAAAAAAAAAAA3FDFE1A8C536FE19C 004000000000000C0240000000000004023FFFFFFFFFFFF3FE1999999999999C004000 000000000C022AAAAAAAAAAABC0240000000000003FCDB97530ECA866C004000000000 000C022AAAAAAAAAAABC022AAAAAAAAAAAB3FC95CEB240795D3C004000000000000C02 2AAAAAAAAAAABC0215555555555563FC5617839A5BC82C004000000000000C022AAAAA AAAAAABC0200000000000013FC1C71C71C71C76C004000000000000C022AAAAAAAAAAA BC01D5555555555573FBD1BAF98D76B5CC004000000000000C022AAAAAAAAAAABC01AA AAAAAAAAAAC3FB76B5493271055C004000000000000C022AAAAAAAAAAABC0180000000 000013FB27D27D27D27D9C004000000000000C022AAAAAAAAAAABC0155555555555563 FACA252ADB363C8C004000000000000C022AAAAAAAAAAABC012AAAAAAAAAAAB3FA5CEB 240795CF5C004000000000000C022AAAAAAAAAAABC0100000000000003FA07F6E5D4C3 B32C004000000000000C022AAAAAAAAAAABC00AAAAAAAAAAAAB3F99690E0857FD08C00 4000000000000C022AAAAAAAAAAABC0055555555555563F94DBF86A314DCFC00400000 0000000C022AAAAAAAAAAABC0000000000000013F93579BE02468BCC00400000000000 0C022AAAAAAAAAAABBFF55555555555583F94DBF86A314DCFC004000000000000C022A AAAAAAAAAABBFE555555555555B3F99690E0857FD05C004000000000000C022AAAAAAA AAAABBCC80000000000003FA07F6E5D4C3B31C004000000000000C022AAAAAAAAAAAB3 FE555555555554F3FA5CEB240795CF1C004000000000000C022AAAAAAAAAAAB3FF5555 5555555523FACA252ADB363C4C004000000000000C022AAAAAAAAAAAB3FFFFFFFFFFFF FFC3FB27D27D27D27D5C004000000000000C022AAAAAAAAAAAB40055555555555533FB 76B5493271051C004000000000000C022AAAAAAAAAAAB400AAAAAAAAAAAA83FBD1BAF9 8D76B56C004000000000000C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FC1C71C71C71C7 2C004000000000000C022AAAAAAAAAAAB4012AAAAAAAAAAA93FC5617839A5BC7EC0040 00000000000C022AAAAAAAAAAAB40155555555555543FC95CEB240795CFC0040000000 00000C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FCDB97530ECA864C004000000000000C 022AAAAAAAAAAAB401AAAAAAAAAAAAA3FD13B8B302A7A20C004000000000000C022AAA AAAAAAAAB401D5555555555553FD3CAE759203CAFC004000000000000C022AAAAAAAAA AAB40200000000000003FD68ACF13579BE2C004000000000000C022AAAAAAAAAAAB402 15555555555553FD97B425ED097B5C004000000000000C022AAAAAAAAAAAB4022AAAAA AAAAAAA3FDC9C413B8B302AC004000000000000C022AAAAAAAAAAAB4023FFFFFFFFFFF F3FDFEDCBA9876543C004000000000000C021555555555556C0240000000000003FC7C 048D159E26EC004000000000000C021555555555556C022AAAAAAAAAAAB3FC363BEC47 4CFDBC004000000000000C021555555555556C0215555555555563FBED097B425ED12C 004000000000000C021555555555556C0200000000000013FB79BE02468ACFDC004000 000000000C021555555555556C01D5555555555573FB12956D9B1DF6CC004000000000 000C021555555555556C01AAAAAAAAAAAAC3FA6F1F7A80308C9C004000000000000C02 1555555555556C0180000000000013F9A2B3C4D5E6FA1C004000000000000C02155555 5555556C0155555555555563F82F684BDA12FA1C004000000000000C02155555555555 6C012AAAAAAAAAAABBF70AFF9EE8DD760C004000000000000C021555555555556C0100 00000000000BF8D950C83FB72BCC004000000000000C021555555555556C00AAAAAAAA AAAABBF966054F43E32B9C004000000000000C021555555555556C005555555555556B F9AED6A9264E1F3C004000000000000C021555555555556C000000000000001BF9C71C 71C71C705C004000000000000C021555555555556BFF5555555555558BF9AED6A9264E 1F4C004000000000000C021555555555556BFE555555555555BBF966054F43E32BDC00 4000000000000C021555555555556BCC8000000000000BF8D950C83FB72C1C00400000 0000000C0215555555555563FE555555555554FBF70AFF9EE8DD77DC00400000000000 0C0215555555555563FF55555555555523F82F684BDA12F8EC004000000000000C0215 555555555563FFFFFFFFFFFFFFC3F9A2B3C4D5E6F92C004000000000000C0215555555 5555640055555555555533FA6F1F7A80308C1C004000000000000C0215555555555564 00AAAAAAAAAAAA83FB12956D9B1DF66C004000000000000C021555555555556400FFFF FFFFFFFFD3FB79BE02468ACF3C004000000000000C0215555555555564012AAAAAAAAA AA93FBED097B425ED0BC004000000000000C02155555555555640155555555555543FC 363BEC474CFD7C004000000000000C0215555555555564017FFFFFFFFFFFF3FC7C048D 159E26CC004000000000000C021555555555556401AAAAAAAAAAAAA3FCC7DEA00C22E4 7C004000000000000C021555555555556401D5555555555553FD0CE512956D9B3C0040 00000000000C02155555555555640200000000000003FD38E38E38E38E6C0040000000 00000C02155555555555640215555555555553FD67EAC2F0734B9C004000000000000C 0215555555555564022AAAAAAAAAAAA3FD99FAB0BC1CD2EC004000000000000C021555 5555555564023FFFFFFFFFFFF3FDCF13579BE0247C004000000000000C020000000000 001C0240000000000003FC258BF258BF25DC004000000000000C020000000000001C02 2AAAAAAAAAAAB3FBBF86A314DBF92C004000000000000C020000000000001C02155555 55555563FB401845C8A0CF0C004000000000000C020000000000001C02000000000000 13FA99999999999B6C004000000000000C020000000000001C01D5555555555573F996 90E0857FD29C004000000000000C020000000000001C01AAAAAAAAAAAAC3F653D0F8CB 4884AC004000000000000C020000000000001C018000000000001BF911111111110E7C 004000000000000C020000000000001C015555555555556BFA0E0857FCF745EC004000 000000000C020000000000001C012AAAAAAAAAAABBFA7B425ED097B32C004000000000 000C020000000000001C010000000000000BFAD0369D0369CF5C004000000000000C02 0000000000001C00AAAAAAAAAAAABBFB0672894AB6CD1C004000000000000C02000000 0000001C005555555555556BFB18A6DFC35189FC004000000000000C02000000000000 1C000000000000001BFB1EB851EB851E4C004000000000000C020000000000001BFF55 55555555558BFB18A6DFC35189FC004000000000000C020000000000001BFE55555555 5555BBFB0672894AB6CD2C004000000000000C020000000000001BCC8000000000000B FAD0369D0369CF5C004000000000000C0200000000000013FE555555555554FBFA7B42 5ED097B35C004000000000000C0200000000000013FF5555555555552BFA0E0857FCF7 462C004000000000000C0200000000000013FFFFFFFFFFFFFFCBF911111111110F8C00 4000000000000C02000000000000140055555555555533F653D0F8CB487BAC00400000 0000000C020000000000001400AAAAAAAAAAAA83F99690E0857FD0CC00400000000000 0C020000000000001400FFFFFFFFFFFFD3FA99999999999A2C004000000000000C0200 000000000014012AAAAAAAAAAA93FB401845C8A0CE9C004000000000000C0200000000 0000140155555555555543FBBF86A314DBF8BC004000000000000C0200000000000014 017FFFFFFFFFFFF3FC258BF258BF25BC004000000000000C020000000000001401AAAA AAAAAAAAA3FC7166054F43E36C004000000000000C020000000000001401D555555555 5553FCC3518A6DFC355C004000000000000C02000000000000140200000000000003FD 0DA740DA740DDC004000000000000C02000000000000140215555555555553FD3CAE75 9203CB0C004000000000000C0200000000000014022AAAAAAAAAAAA3FD6EBE635DAD52 5C004000000000000C0200000000000014023FFFFFFFFFFFF3FDA3D70A3D70A3EC0040 00000000000C01D555555555557C0240000000000003FBB05B05B05B061C0040000000 00000C01D555555555557C022AAAAAAAAAAAB3FB24C9C413B8B38C004000000000000C 01D555555555557C0215555555555563FA4AB6CD8EFB12DC004000000000000C01D555 555555557C0200000000000013F8907F6E5D4C407C004000000000000C01D555555555 557C01D555555555557BF8A8C536FE1A87EC004000000000000C01D555555555557C01 AAAAAAAAAAAACBFA203CAE759202FC004000000000000C01D555555555557C01800000 0000001BFABE02468ACF127C004000000000000C01D555555555557C01555555555555 6BFB21C10AFF9EE89C004000000000000C01D555555555557C012AAAAAAAAAAABBFB58 5E0E696F1F3C004000000000000C01D555555555557C010000000000000BFB82D82D82 D82D4C004000000000000C01D555555555557C00AAAAAAAAAAAABBFBA12F684BDA12BC 004000000000000C01D555555555557C005555555555556BFBB363BEC474CF9C004000 000000000C01D555555555557C000000000000001BFBB97530ECA863EC004000000000 000C01D555555555557BFF5555555555558BFBB363BEC474CF9C004000000000000C01 D555555555557BFE555555555555BBFBA12F684BDA12CC004000000000000C01D55555 5555557BCC8000000000000BFB82D82D82D82D5C004000000000000C01D55555555555 73FE555555555554FBFB585E0E696F1F5C004000000000000C01D5555555555573FF55 55555555552BFB21C10AFF9EE8BC004000000000000C01D5555555555573FFFFFFFFFF FFFFCBFABE02468ACF130C004000000000000C01D5555555555574005555555555553B FA203CAE7592039C004000000000000C01D555555555557400AAAAAAAAAAAA8BF8A8C5 36FE1A8B8C004000000000000C01D555555555557400FFFFFFFFFFFFD3F8907F6E5D4C 3B8C004000000000000C01D5555555555574012AAAAAAAAAAA93FA4AB6CD8EFB11EC00 4000000000000C01D55555555555740155555555555543FB24C9C413B8B31C00400000 0000000C01D5555555555574017FFFFFFFFFFFF3FBB05B05B05B05CC00400000000000 0C01D555555555557401AAAAAAAAAAAAA3FC240795CEB2409C004000000000000C01D5 55555555557401D5555555555553FC75F31AED6A928C004000000000000C01D5555555 5555740200000000000003FCCDF012345678CC004000000000000C01D5555555555574 0215555555555553FD15FF3DD1BAF99C004000000000000C01D5555555555574022AAA AAAAAAAAA3FD480F2B9D6480FC004000000000000C01D5555555555574023FFFFFFFFF FFF3FD7D27D27D27D27C004000000000000C01AAAAAAAAAAAACC0240000000000003FB 27D27D27D27D7C004000000000000C01AAAAAAAAAAAACC022AAAAAAAAAAAB3FA388277 1660560C004000000000000C01AAAAAAAAAAAACC0215555555555563F7CD2DE3EF500C 8C004000000000000C01AAAAAAAAAAAACC020000000000001BF959E26AF37C025C0040 00000000000C01AAAAAAAAAAAACC01D555555555557BFA7B425ED097B33C0040000000 00000C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFB18A6DFC3518A2C004000000000000C 01AAAAAAAAAAAACC018000000000001BFB6789ABCDF011EC004000000000000C01AAAA AAAAAAAACC015555555555556BFBAA49938827713C004000000000000C01AAAAAAAAAA AACC012AAAAAAAAAAABBFBE0E696F1F7A7DC004000000000000C01AAAAAAAAAAAACC01 0000000000000BFC05B05B05B05AFC004000000000000C01AAAAAAAAAAAACC00AAAAAA AAAAAABBFC14DBF86A314DBC004000000000000C01AAAAAAAAAAAACC00555555555555 6BFC1DF623A67EAC2C004000000000000C01AAAAAAAAAAAACC000000000000001BFC20 FEDCBA98764C004000000000000C01AAAAAAAAAAAACBFF5555555555558BFC1DF623A6 7EAC1C004000000000000C01AAAAAAAAAAAACBFE555555555555BBFC14DBF86A314DBC 004000000000000C01AAAAAAAAAAAACBCC8000000000000BFC05B05B05B05AFC004000 000000000C01AAAAAAAAAAAAC3FE555555555554FBFBE0E696F1F7A7FC004000000000 000C01AAAAAAAAAAAAC3FF5555555555552BFBAA49938827715C004000000000000C01 AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFB6789ABCDF0122C004000000000000C01AAAAAA AAAAAAC4005555555555553BFB18A6DFC3518A6C004000000000000C01AAAAAAAAAAAA C400AAAAAAAAAAAA8BFA7B425ED097B43C004000000000000C01AAAAAAAAAAAAC400FF FFFFFFFFFFDBF959E26AF37C04CC004000000000000C01AAAAAAAAAAAAC4012AAAAAAA AAAA93F7CD2DE3EF5004CC004000000000000C01AAAAAAAAAAAAC40155555555555543 FA388277166054EC004000000000000C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FB27D2 7D27D27D2C004000000000000C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FBBF86A314DB F88C004000000000000C01AAAAAAAAAAAAC401D5555555555553FC31AED6A9264E3C00 4000000000000C01AAAAAAAAAAAAC40200000000000003FC89ABCDF012348C00400000 0000000C01AAAAAAAAAAAAC40215555555555553FCE7BA375F31AEEC00400000000000 0C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD25ED097B425ECC004000000000000C01AA AAAAAAAAAAC4023FFFFFFFFFFFF3FD5B05B05B05B05C004000000000000C0180000000 00001C0240000000000003FA62FC962FC963EC004000000000000C018000000000001C 022AAAAAAAAAAAB3F82F684BDA12FC1C004000000000000C018000000000001C021555 555555556BF966054F43E32B6C004000000000000C018000000000001C020000000000 001BFA9999999999986C004000000000000C018000000000001C01D555555555557BFB 33F5617839A54C004000000000000C018000000000001C01AAAAAAAAAAAACBFB8EFB11 D33F55AC004000000000000C018000000000001C018000000000001BFBDDDDDDDDDDDD 6C004000000000000C018000000000001C015555555555556BFC104EE2CC0A9E5C0040 00000000000C018000000000001C012AAAAAAAAAAABBFC2B9D6480F2B9AC0040000000 00000C018000000000001C010000000000000BFC40DA740DA740BC004000000000000C 018000000000001C00AAAAAAAAAAAABBFC5006117228337C004000000000000C018000 000000001C005555555555556BFC59203CAE7591EC004000000000000C018000000000 001C000000000000001BFC5C28F5C28F5C0C004000000000000C018000000000001BFF 5555555555558BFC59203CAE7591DC004000000000000C018000000000001BFE555555 555555BBFC5006117228337C004000000000000C018000000000001BCC800000000000 0BFC40DA740DA740BC004000000000000C0180000000000013FE555555555554FBFC2B 9D6480F2B9BC004000000000000C0180000000000013FF5555555555552BFC104EE2CC 0A9E6C004000000000000C0180000000000013FFFFFFFFFFFFFFCBFBDDDDDDDDDDDDBC 004000000000000C0180000000000014005555555555553BFB8EFB11D33F55EC004000 000000000C018000000000001400AAAAAAAAAAAA8BFB33F5617839A59C004000000000 000C018000000000001400FFFFFFFFFFFFDBFA9999999999996C004000000000000C01 80000000000014012AAAAAAAAAAA9BF966054F43E32CDC004000000000000C01800000 000000140155555555555543F82F684BDA12F77C004000000000000C01800000000000 14017FFFFFFFFFFFF3FA62FC962FC9633C004000000000000C018000000000001401AA AAAAAAAAAAA3FB49327104EE2D0C004000000000000C018000000000001401D5555555 555553FBED097B425ED0EC004000000000000C01800000000000140200000000000003 FC4E81B4E81B4ECC004000000000000C01800000000000140215555555555553FCAC90 1E573AC92C004000000000000C0180000000000014022AAAAAAAAAAAA3FD0857FCF746 EBEC004000000000000C0180000000000014023FFFFFFFFFFFF3FD3D70A3D70A3D7C00 4000000000000C015555555555556C0240000000000003F93579BE02468ACC00400000 0000000C015555555555556C022AAAAAAAAAAABBF8F19690E0857DFC00400000000000 0C015555555555556C021555555555556BFA7B425ED097B3BC004000000000000C0155 55555555556C020000000000001BFB30ECA8641FDB3C004000000000000C0155555555 55556C01D555555555557BFB98153D0F8CB44C004000000000000C015555555555556C 01AAAAAAAAAAAACBFBF31AED6A9264CC004000000000000C015555555555556C018000 000000001BFC20FEDCBA98764C004000000000000C015555555555556C015555555555 556BFC425ED097B425EC004000000000000C015555555555556C012AAAAAAAAAAABBFC 5DAD524C9C413C004000000000000C015555555555556C010000000000000BFC72EA61 D950C84C004000000000000C015555555555556C00AAAAAAAAAAAABBFC8215FF3DD1BB 0C004000000000000C015555555555556C005555555555556BFC8B302A7A1F197C0040 00000000000C015555555555556C000000000000001BFC8E38E38E38E39C0040000000 00000C015555555555556BFF5555555555558BFC8B302A7A1F196C004000000000000C 015555555555556BFE555555555555BBFC8215FF3DD1BB0C004000000000000C015555 555555556BCC8000000000000BFC72EA61D950C84C004000000000000C015555555555 5563FE555555555554FBFC5DAD524C9C414C004000000000000C0155555555555563FF 5555555555552BFC425ED097B425FC004000000000000C0155555555555563FFFFFFFF FFFFFFCBFC20FEDCBA98766C004000000000000C015555555555556400555555555555 3BFBF31AED6A92651C004000000000000C015555555555556400AAAAAAAAAAAA8BFB98 153D0F8CB4BC004000000000000C015555555555556400FFFFFFFFFFFFDBFB30ECA864 1FDBDC004000000000000C0155555555555564012AAAAAAAAAAA9BFA7B425ED097B4AC 004000000000000C0155555555555564015555555555554BF8F19690E085819C004000 000000000C0155555555555564017FFFFFFFFFFFF3F93579BE024689EC004000000000 000C015555555555556401AAAAAAAAAAAAA3FACA252ADB363BCC004000000000000C01 5555555555556401D5555555555553FB88E99FAB0BC1CC004000000000000C01555555 555555640200000000000003FC1C71C71C71C72C004000000000000C01555555555555 640215555555555553FC7A80308B91419C004000000000000C0155555555555564022A AAAAAAAAAAA3FCDEA00C22E4504C004000000000000C0155555555555564023FFFFFFF FFFFF3FD2468ACF13579AC004000000000000C012AAAAAAAAAAABC024000000000000B F523456789ABC48C004000000000000C012AAAAAAAAAAABC022AAAAAAAAAAABBFA203C AE7592030C004000000000000C012AAAAAAAAAAABC021555555555556BFB0F8CB48704 2BAC004000000000000C012AAAAAAAAAAABC020000000000001BFB82D82D82D82CFC00 4000000000000C012AAAAAAAAAAABC01D555555555557BFBEA00C22E45060C00400000 0000000C012AAAAAAAAAAABC01AAAAAAAAAAAACBFC22833944A55B4C00400000000000 0C012AAAAAAAAAAABC018000000000001BFC49F49F49F49F2C004000000000000C012A AAAAAAAAAABC015555555555556BFC6B549327104ECC004000000000000C012AAAAAAA AAAABC012AAAAAAAAAAABBFC86A314DBF86A1C004000000000000C012AAAAAAAAAAABC 010000000000000BFC9BE02468ACF12C004000000000000C012AAAAAAAAAAABC00AAAA AAAAAAAABBFCAB0BC1CD2DE3EC004000000000000C012AAAAAAAAAAABC005555555555 556BFCB425ED097B425C004000000000000C012AAAAAAAAAAABC000000000000001BFC B72EA61D950C7C004000000000000C012AAAAAAAAAAABBFF5555555555558BFCB425ED 097B424C004000000000000C012AAAAAAAAAAABBFE555555555555BBFCAB0BC1CD2DE3 EC004000000000000C012AAAAAAAAAAABBCC8000000000000BFC9BE02468ACF12C0040 00000000000C012AAAAAAAAAAAB3FE555555555554FBFC86A314DBF86A2C0040000000 00000C012AAAAAAAAAAAB3FF5555555555552BFC6B549327104EDC004000000000000C 012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC49F49F49F49F4C004000000000000C012AAA AAAAAAAAB4005555555555553BFC22833944A55B6C004000000000000C012AAAAAAAAA AAB400AAAAAAAAAAAA8BFBEA00C22E45067C004000000000000C012AAAAAAAAAAAB400 FFFFFFFFFFFFDBFB82D82D82D82D9C004000000000000C012AAAAAAAAAAAB4012AAAAA AAAAAA9BFB0F8CB487042C1C004000000000000C012AAAAAAAAAAAB401555555555555 4BFA203CAE759203EC004000000000000C012AAAAAAAAAAAB4017FFFFFFFFFFFFBF523 456789ABD22C004000000000000C012AAAAAAAAAAAB401AAAAAAAAAAAAA3FA264E209D C5984C004000000000000C012AAAAAAAAAAAB401D5555555555553FB36FE1A8C53700C 004000000000000C012AAAAAAAAAAAB40200000000000003FBE6F8091A2B3C9C004000 000000000C012AAAAAAAAAAAB40215555555555553FC518A6DFC3518BC004000000000 000C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FCB5AA499388276C004000000000000C01 2AAAAAAAAAAAB4023FFFFFFFFFFFF3FD0FEDCBA987653C004000000000000C01000000 0000000C024000000000000BF91111111111114C004000000000000C01000000000000 0C022AAAAAAAAAAABBFA9FAB0BC1CD2D8C004000000000000C010000000000000C0215 55555555556BFB4F43E32D21C0EC004000000000000C010000000000000C0200000000 00001BFBC28F5C28F5C23C004000000000000C010000000000000C01D555555555557B FC14DBF86A314DAC004000000000000C010000000000000C01AAAAAAAAAAAACBFC425E D097B425EC004000000000000C010000000000000C018000000000001BFC69D0369D03 69CC004000000000000C010000000000000C015555555555556BFC8B302A7A1F196C00 4000000000000C010000000000000C012AAAAAAAAAAABBFCA67EAC2F0734BC00400000 0000000C010000000000000C010000000000000BFCBBBBBBBBBBBBCC00400000000000 0C010000000000000C00AAAAAAAAAAAABBFCCAE759203CAE8C004000000000000C0100 00000000000C005555555555556BFCD401845C8A0CFC004000000000000C0100000000 00000C000000000000001BFCD70A3D70A3D71C004000000000000C010000000000000B FF5555555555558BFCD401845C8A0CEC004000000000000C010000000000000BFE5555 55555555BBFCCAE759203CAE8C004000000000000C010000000000000BCC8000000000 000BFCBBBBBBBBBBBBCC004000000000000C0100000000000003FE555555555554FBFC A67EAC2F0734CC004000000000000C0100000000000003FF5555555555552BFC8B302A 7A1F197C004000000000000C0100000000000003FFFFFFFFFFFFFFCBFC69D0369D0369 EC004000000000000C0100000000000004005555555555553BFC425ED097B4260C0040 00000000000C010000000000000400AAAAAAAAAAAA8BFC14DBF86A314DEC0040000000 00000C010000000000000400FFFFFFFFFFFFDBFBC28F5C28F5C2DC004000000000000C 0100000000000004012AAAAAAAAAAA9BFB4F43E32D21C15C004000000000000C010000 0000000004015555555555554BFA9FAB0BC1CD2E6C004000000000000C010000000000 0004017FFFFFFFFFFFFBF91111111111122C004000000000000C010000000000000401 AAAAAAAAAAAAA3F94DBF86A314DB5C004000000000000C010000000000000401D55555 55555553FAEE8DD7CC6BB59C004000000000000C010000000000000402000000000000 03FBA740DA740DA75C004000000000000C01000000000000040215555555555553FC31 AED6A9264E1C004000000000000C0100000000000004022AAAAAAAAAAAA3FC95CEB240 795CCC004000000000000C0100000000000004023FFFFFFFFFFFF3FCFFFFFFFFFFFFDC 004000000000000C00AAAAAAAAAAAABC024000000000000BF9C71C71C71C714C004000 000000000C00AAAAAAAAAAAABC022AAAAAAAAAAABBFAFAB0BC1CD2DD8C004000000000 000C00AAAAAAAAAAAABC021555555555556BFB7CC6BB5AA4992C004000000000000C00 AAAAAAAAAAAABC020000000000001BFBF0123456789A7C004000000000000C00AAAAAA AAAAAABC01D555555555557BFC2B9D6480F2B9CC004000000000000C00AAAAAAAAAAAA BC01AAAAAAAAAAAACBFC59203CAE75920C004000000000000C00AAAAAAAAAAAABC0180 00000000001BFC8091A2B3C4D5EC004000000000000C00AAAAAAAAAAAABC0155555555 55556BFCA1F19690E0856C004000000000000C00AAAAAAAAAAAABC012AAAAAAAAAAABB FCBD401845C8A0BC004000000000000C00AAAAAAAAAAAABC010000000000000BFCD27D 27D27D27CC004000000000000C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFCE1A8C536FE 1A8C004000000000000C00AAAAAAAAAAAABC005555555555556BFCEAC2F0734B78FC00 4000000000000C00AAAAAAAAAAAABC000000000000001BFCEDCBA98765433C00400000 0000000C00AAAAAAAAAAAABBFF5555555555558BFCEAC2F0734B78FC00400000000000 0C00AAAAAAAAAAAABBFE555555555555BBFCE1A8C536FE1A9C004000000000000C00AA AAAAAAAAAABBCC8000000000000BFCD27D27D27D27DC004000000000000C00AAAAAAAA AAAAB3FE555555555554FBFCBD401845C8A0DC004000000000000C00AAAAAAAAAAAAB3 FF5555555555552BFCA1F19690E0858C004000000000000C00AAAAAAAAAAAAB3FFFFFF FFFFFFFFCBFC8091A2B3C4D5FC004000000000000C00AAAAAAAAAAAAB4005555555555 553BFC59203CAE75921C004000000000000C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFC 2B9D6480F2B9FC004000000000000C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFBF01234 56789AFC004000000000000C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFB7CC6BB5AA499 7C004000000000000C00AAAAAAAAAAAAB4015555555555554BFAFAB0BC1CD2DEAC0040 00000000000C00AAAAAAAAAAAAB4017FFFFFFFFFFFFBF9C71C71C71C72AC0040000000 00000C00AAAAAAAAAAAAB401AAAAAAAAAAAAA3F82F684BDA12F5AC004000000000000C 00AAAAAAAAAAAAB401D5555555555553FA9388277166053C004000000000000C00AAAA AAAAAAAAB40200000000000003FB79BE02468ACF3C004000000000000C00AAAAAAAAAA AAB40215555555555553FC1AED6A9264E20C004000000000000C00AAAAAAAAAAAAB402 2AAAAAAAAAAAA3FC7F0D4629B7F0BC004000000000000C00AAAAAAAAAAAAB4023FFFFF FFFFFFF3FCE93E93E93E93CC004000000000000C005555555555556C02400000000000 0BFA1A2B3C4D5E6FAC004000000000000C005555555555556C022AAAAAAAAAAABBFB18 A6DFC3518A4C004000000000000C005555555555556C021555555555556BFB98153D0F 8CB46C004000000000000C005555555555556C020000000000001BFC05B05B05B05AEC 004000000000000C005555555555556C01D555555555557BFC3944A55B66C76C004000 000000000C005555555555556C01AAAAAAAAAAAACBFC66C77D88E99FAC004000000000 000C005555555555556C018000000000001BFC8E38E38E38E38C004000000000000C00 5555555555556C015555555555556BFCAF98D76B54932C004000000000000C00555555 5555556C012AAAAAAAAAAABBFCCAE759203CAE7C004000000000000C00555555555555 6C010000000000000BFCE02468ACF1358C004000000000000C005555555555556C00AA AAAAAAAAAABBFCEF50061172284C004000000000000C005555555555556C0055555555 55556BFCF86A314DBF86BC004000000000000C005555555555556C000000000000001B FCFB72EA61D950DC004000000000000C005555555555556BFF5555555555558BFCF86A 314DBF86AC004000000000000C005555555555556BFE555555555555BBFCEF50061172 284C004000000000000C005555555555556BCC8000000000000BFCE02468ACF1358C00 4000000000000C0055555555555563FE555555555554FBFCCAE759203CAE8C00400000 0000000C0055555555555563FF5555555555552BFCAF98D76B54933C00400000000000 0C0055555555555563FFFFFFFFFFFFFFCBFC8E38E38E38E3AC004000000000000C0055 555555555564005555555555553BFC66C77D88E99FCC004000000000000C0055555555 55556400AAAAAAAAAAAA8BFC3944A55B66C7AC004000000000000C0055555555555564 00FFFFFFFFFFFFDBFC05B05B05B05B3C004000000000000C0055555555555564012AAA AAAAAAAA9BFB98153D0F8CB4DC004000000000000C0055555555555564015555555555 554BFB18A6DFC3518ABC004000000000000C0055555555555564017FFFFFFFFFFFFBFA 1A2B3C4D5E701C004000000000000C005555555555556401AAAAAAAAAAAAA3F653D0F8 CB486A6C004000000000000C005555555555556401D5555555555553FA5CEB240795CE 7C004000000000000C00555555555555640200000000000003FB5E6F8091A2B3EC0040 00000000000C00555555555555640215555555555553FC0D4629B7F0D45C0040000000 00000C0055555555555564022AAAAAAAAAAAA3FC7166054F43E30C004000000000000C 0055555555555564023FFFFFFFFFFFF3FCDB97530ECA861C004000000000000C000000 000000001C024000000000000BFA2C5F92C5F92CAC004000000000000C000000000000 001C022AAAAAAAAAAABBFB21C10AFF9EE8CC004000000000000C000000000000001C02 1555555555556BFBA12F684BDA12EC004000000000000C000000000000001C02000000 0000001BFC0A3D70A3D70A2C004000000000000C000000000000001C01D55555555555 7BFC3DD1BAF98D76AC004000000000000C000000000000001C01AAAAAAAAAAAACBFC6B 549327104EEC004000000000000C000000000000001C018000000000001BFC92C5F92C 5F92CC004000000000000C000000000000001C015555555555556BFCB425ED097B426C 004000000000000C000000000000001C012AAAAAAAAAAABBFCCF746EBE635DBC004000 000000000C000000000000001C010000000000000BFCE4B17E4B17E4CC004000000000 000C000000000000001C00AAAAAAAAAAAABBFCF3DD1BAF98D78C004000000000000C00 0000000000001C005555555555556BFCFCF746EBE635FC004000000000000C00000000 0000001C000000000000001BFD0000000000000C004000000000000C00000000000000 1BFF5555555555558BFCFCF746EBE635EC004000000000000C000000000000001BFE55 5555555555BBFCF3DD1BAF98D78C004000000000000C000000000000001BCC80000000 00000BFCE4B17E4B17E4CC004000000000000C0000000000000013FE555555555554FB FCCF746EBE635DCC004000000000000C0000000000000013FF5555555555552BFCB425 ED097B427C004000000000000C0000000000000013FFFFFFFFFFFFFFCBFC92C5F92C5F 92EC004000000000000C0000000000000014005555555555553BFC6B549327104F0C00 4000000000000C000000000000001400AAAAAAAAAAAA8BFC3DD1BAF98D76EC00400000 0000000C000000000000001400FFFFFFFFFFFFDBFC0A3D70A3D70A7C00400000000000 0C0000000000000014012AAAAAAAAAAA9BFBA12F684BDA135C004000000000000C0000 000000000014015555555555554BFB21C10AFF9EE93C004000000000000C0000000000 000014017FFFFFFFFFFFFBFA2C5F92C5F92D1C004000000000000C0000000000000014 01AAAAAAAAAAAAA3F3845C8A0CE4D31C004000000000000C000000000000001401D555 5555555553FA4AB6CD8EFB117C004000000000000C0000000000000014020000000000 0003FB5555555555556C004000000000000C00000000000000140215555555555553FC 08B91419CA251C004000000000000C0000000000000014022AAAAAAAAAAAA3FC6CD8EF B11D33CC004000000000000C0000000000000014023FFFFFFFFFFFF3FCD70A3D70A3D6 DC004000000000000BFF5555555555558C024000000000000BFA1A2B3C4D5E6FAC0040 00000000000BFF5555555555558C022AAAAAAAAAAABBFB18A6DFC3518A4C0040000000 00000BFF5555555555558C021555555555556BFB98153D0F8CB46C004000000000000B FF5555555555558C020000000000001BFC05B05B05B05AEC004000000000000BFF5555 555555558C01D555555555557BFC3944A55B66C76C004000000000000BFF5555555555 558C01AAAAAAAAAAAACBFC66C77D88E99FAC004000000000000BFF5555555555558C01 8000000000001BFC8E38E38E38E38C004000000000000BFF5555555555558C01555555 5555556BFCAF98D76B54932C004000000000000BFF5555555555558C012AAAAAAAAAAA BBFCCAE759203CAE7C004000000000000BFF5555555555558C010000000000000BFCE0 2468ACF1358C004000000000000BFF5555555555558C00AAAAAAAAAAAABBFCEF500611 72284C004000000000000BFF5555555555558C005555555555556BFCF86A314DBF86BC 004000000000000BFF5555555555558C000000000000001BFCFB72EA61D950DC004000 000000000BFF5555555555558BFF5555555555558BFCF86A314DBF86AC004000000000 000BFF5555555555558BFE555555555555BBFCEF50061172284C004000000000000BFF 5555555555558BCC8000000000000BFCE02468ACF1358C004000000000000BFF555555 55555583FE555555555554FBFCCAE759203CAE8C004000000000000BFF555555555555 83FF5555555555552BFCAF98D76B54933C004000000000000BFF55555555555583FFFF FFFFFFFFFFCBFC8E38E38E38E3AC004000000000000BFF555555555555840055555555 55553BFC66C77D88E99FCC004000000000000BFF5555555555558400AAAAAAAAAAAA8B FC3944A55B66C7AC004000000000000BFF5555555555558400FFFFFFFFFFFFDBFC05B0 5B05B05B3C004000000000000BFF55555555555584012AAAAAAAAAAA9BFB98153D0F8C B4DC004000000000000BFF55555555555584015555555555554BFB18A6DFC3518ABC00 4000000000000BFF55555555555584017FFFFFFFFFFFFBFA1A2B3C4D5E701C00400000 0000000BFF5555555555558401AAAAAAAAAAAAA3F653D0F8CB486A6C00400000000000 0BFF5555555555558401D5555555555553FA5CEB240795CE7C004000000000000BFF55 5555555555840200000000000003FB5E6F8091A2B3EC004000000000000BFF55555555 5555840215555555555553FC0D4629B7F0D45C004000000000000BFF55555555555584 022AAAAAAAAAAAA3FC7166054F43E30C004000000000000BFF55555555555584023FFF FFFFFFFFF3FCDB97530ECA861C004000000000000BFE555555555555BC024000000000 000BF9C71C71C71C714C004000000000000BFE555555555555BC022AAAAAAAAAAABBFA FAB0BC1CD2DD8C004000000000000BFE555555555555BC021555555555556BFB7CC6BB 5AA4992C004000000000000BFE555555555555BC020000000000001BFBF0123456789A 7C004000000000000BFE555555555555BC01D555555555557BFC2B9D6480F2B9CC0040 00000000000BFE555555555555BC01AAAAAAAAAAAACBFC59203CAE75920C0040000000 00000BFE555555555555BC018000000000001BFC8091A2B3C4D5EC004000000000000B FE555555555555BC015555555555556BFCA1F19690E0856C004000000000000BFE5555 55555555BC012AAAAAAAAAAABBFCBD401845C8A0BC004000000000000BFE5555555555 55BC010000000000000BFCD27D27D27D27CC004000000000000BFE555555555555BC00 AAAAAAAAAAAABBFCE1A8C536FE1A8C004000000000000BFE555555555555BC00555555 5555556BFCEAC2F0734B78FC004000000000000BFE555555555555BC00000000000000 1BFCEDCBA98765433C004000000000000BFE555555555555BBFF5555555555558BFCEA C2F0734B78FC004000000000000BFE555555555555BBFE555555555555BBFCE1A8C536 FE1A9C004000000000000BFE555555555555BBCC8000000000000BFCD27D27D27D27DC 004000000000000BFE555555555555B3FE555555555554FBFCBD401845C8A0DC004000 000000000BFE555555555555B3FF5555555555552BFCA1F19690E0858C004000000000 000BFE555555555555B3FFFFFFFFFFFFFFCBFC8091A2B3C4D5FC004000000000000BFE 555555555555B4005555555555553BFC59203CAE75921C004000000000000BFE555555 555555B400AAAAAAAAAAAA8BFC2B9D6480F2B9FC004000000000000BFE555555555555 B400FFFFFFFFFFFFDBFBF0123456789AFC004000000000000BFE555555555555B4012A AAAAAAAAAA9BFB7CC6BB5AA4997C004000000000000BFE555555555555B40155555555 55554BFAFAB0BC1CD2DEAC004000000000000BFE555555555555B4017FFFFFFFFFFFFB F9C71C71C71C72AC004000000000000BFE555555555555B401AAAAAAAAAAAAA3F82F68 4BDA12F5AC004000000000000BFE555555555555B401D5555555555553FA9388277166 053C004000000000000BFE555555555555B40200000000000003FB79BE02468ACF3C00 4000000000000BFE555555555555B40215555555555553FC1AED6A9264E20C00400000 0000000BFE555555555555B4022AAAAAAAAAAAA3FC7F0D4629B7F0BC00400000000000 0BFE555555555555B4023FFFFFFFFFFFF3FCE93E93E93E93CC004000000000000BCC80 00000000000C024000000000000BF91111111111114C004000000000000BCC80000000 00000C022AAAAAAAAAAABBFA9FAB0BC1CD2D8C004000000000000BCC8000000000000C 021555555555556BFB4F43E32D21C0EC004000000000000BCC8000000000000C020000 000000001BFBC28F5C28F5C23C004000000000000BCC8000000000000C01D555555555 557BFC14DBF86A314DAC004000000000000BCC8000000000000C01AAAAAAAAAAAACBFC 425ED097B425EC004000000000000BCC8000000000000C018000000000001BFC69D036 9D0369CC004000000000000BCC8000000000000C015555555555556BFC8B302A7A1F19 6C004000000000000BCC8000000000000C012AAAAAAAAAAABBFCA67EAC2F0734BC0040 00000000000BCC8000000000000C010000000000000BFCBBBBBBBBBBBBCC0040000000 00000BCC8000000000000C00AAAAAAAAAAAABBFCCAE759203CAE8C004000000000000B CC8000000000000C005555555555556BFCD401845C8A0CFC004000000000000BCC8000 000000000C000000000000001BFCD70A3D70A3D71C004000000000000BCC8000000000 000BFF5555555555558BFCD401845C8A0CEC004000000000000BCC8000000000000BFE 555555555555BBFCCAE759203CAE8C004000000000000BCC8000000000000BCC800000 0000000BFCBBBBBBBBBBBBCC004000000000000BCC80000000000003FE555555555554 FBFCA67EAC2F0734CC004000000000000BCC80000000000003FF5555555555552BFC8B 302A7A1F197C004000000000000BCC80000000000003FFFFFFFFFFFFFFCBFC69D0369D 0369EC004000000000000BCC80000000000004005555555555553BFC425ED097B4260C 004000000000000BCC8000000000000400AAAAAAAAAAAA8BFC14DBF86A314DEC004000 000000000BCC8000000000000400FFFFFFFFFFFFDBFBC28F5C28F5C2DC004000000000 000BCC80000000000004012AAAAAAAAAAA9BFB4F43E32D21C15C004000000000000BCC 80000000000004015555555555554BFA9FAB0BC1CD2E6C004000000000000BCC800000 00000004017FFFFFFFFFFFFBF91111111111122C004000000000000BCC800000000000 0401AAAAAAAAAAAAA3F94DBF86A314DB5C004000000000000BCC8000000000000401D5 555555555553FAEE8DD7CC6BB59C004000000000000BCC800000000000040200000000 000003FBA740DA740DA75C004000000000000BCC800000000000040215555555555553 FC31AED6A9264E1C004000000000000BCC80000000000004022AAAAAAAAAAAA3FC95CE B240795CCC004000000000000BCC80000000000004023FFFFFFFFFFFF3FCFFFFFFFFFF FFDC0040000000000003FE555555555554FC024000000000000BF523456789ABD48C00 40000000000003FE555555555554FC022AAAAAAAAAAABBFA203CAE7592038C00400000 00000003FE555555555554FC021555555555556BFB0F8CB487042C2C00400000000000 03FE555555555554FC020000000000001BFB82D82D82D82D7C0040000000000003FE55 5555555554FC01D555555555557BFBEA00C22E45068C0040000000000003FE55555555 5554FC01AAAAAAAAAAAACBFC22833944A55B8C0040000000000003FE555555555554FC 018000000000001BFC49F49F49F49F6C0040000000000003FE555555555554FC015555 555555556BFC6B549327104EEC0040000000000003FE555555555554FC012AAAAAAAAA AABBFC86A314DBF86A3C0040000000000003FE555555555554FC010000000000000BFC 9BE02468ACF14C0040000000000003FE555555555554FC00AAAAAAAAAAAABBFCAB0BC1 CD2DE41C0040000000000003FE555555555554FC005555555555556BFCB425ED097B42 8C0040000000000003FE555555555554FC000000000000001BFCB72EA61D950CAC0040 000000000003FE555555555554FBFF5555555555558BFCB425ED097B427C0040000000 000003FE555555555554FBFE555555555555BBFCAB0BC1CD2DE41C0040000000000003 FE555555555554FBCC8000000000000BFC9BE02468ACF15C0040000000000003FE5555 55555554F3FE555555555554FBFC86A314DBF86A5C0040000000000003FE5555555555 54F3FF5555555555552BFC6B549327104F0C0040000000000003FE555555555554F3FF FFFFFFFFFFFFCBFC49F49F49F49F7C0040000000000003FE555555555554F400555555 5555553BFC22833944A55B9C0040000000000003FE555555555554F400AAAAAAAAAAAA 8BFBEA00C22E4506DC0040000000000003FE555555555554F400FFFFFFFFFFFFDBFB82 D82D82D82DFC0040000000000003FE555555555554F4012AAAAAAAAAAA9BFB0F8CB487 042C7C0040000000000003FE555555555554F4015555555555554BFA203CAE759204AC 0040000000000003FE555555555554F4017FFFFFFFFFFFFBF523456789ABEA2C004000 0000000003FE555555555554F401AAAAAAAAAAAAA3FA264E209DC5978C004000000000 0003FE555555555554F401D5555555555553FB36FE1A8C536FAC0040000000000003FE 555555555554F40200000000000003FBE6F8091A2B3C3C0040000000000003FE555555 555554F40215555555555553FC518A6DFC35188C0040000000000003FE555555555554 F4022AAAAAAAAAAAA3FCB5AA499388273C0040000000000003FE555555555554F4023F FFFFFFFFFFF3FD0FEDCBA987652C0040000000000003FF5555555555552C0240000000 000003F93579BE02468ACC0040000000000003FF5555555555552C022AAAAAAAAAAABB F8F19690E0857DFC0040000000000003FF5555555555552C021555555555556BFA7B42 5ED097B43C0040000000000003FF5555555555552C020000000000001BFB30ECA8641F DB7C0040000000000003FF5555555555552C01D555555555557BFB98153D0F8CB48C00 40000000000003FF5555555555552C01AAAAAAAAAAAACBFBF31AED6A92650C00400000 00000003FF5555555555552C018000000000001BFC20FEDCBA98766C00400000000000 03FF5555555555552C015555555555556BFC425ED097B425EC0040000000000003FF55 55555555552C012AAAAAAAAAAABBFC5DAD524C9C414C0040000000000003FF55555555 55552C010000000000000BFC72EA61D950C85C0040000000000003FF5555555555552C 00AAAAAAAAAAAABBFC8215FF3DD1BB1C0040000000000003FF5555555555552C005555 555555556BFC8B302A7A1F198C0040000000000003FF5555555555552C000000000000 001BFC8E38E38E38E3AC0040000000000003FF5555555555552BFF5555555555558BFC 8B302A7A1F197C0040000000000003FF5555555555552BFE555555555555BBFC8215FF 3DD1BB1C0040000000000003FF5555555555552BCC8000000000000BFC72EA61D950C8 5C0040000000000003FF55555555555523FE555555555554FBFC5DAD524C9C415C0040 000000000003FF55555555555523FF5555555555552BFC425ED097B4260C0040000000 000003FF55555555555523FFFFFFFFFFFFFFCBFC20FEDCBA98767C0040000000000003 FF55555555555524005555555555553BFBF31AED6A92653C0040000000000003FF5555 555555552400AAAAAAAAAAAA8BFB98153D0F8CB4DC0040000000000003FF5555555555 552400FFFFFFFFFFFFDBFB30ECA8641FDBFC0040000000000003FF5555555555552401 2AAAAAAAAAAA9BFA7B425ED097B4EC0040000000000003FF5555555555552401555555 5555554BF8F19690E085829C0040000000000003FF55555555555524017FFFFFFFFFFF F3F93579BE0246896C0040000000000003FF5555555555552401AAAAAAAAAAAAA3FACA 252ADB363B8C0040000000000003FF5555555555552401D5555555555553FB88E99FAB 0BC1AC0040000000000003FF555555555555240200000000000003FC1C71C71C71C72C 0040000000000003FF555555555555240215555555555553FC7A80308B91418C004000 0000000003FF55555555555524022AAAAAAAAAAAA3FCDEA00C22E4503C004000000000 0003FF55555555555524023FFFFFFFFFFFF3FD2468ACF13579AC0040000000000003FF FFFFFFFFFFFFCC0240000000000003FA62FC962FC962EC0040000000000003FFFFFFFF FFFFFFCC022AAAAAAAAAAAB3F82F684BDA12F81C0040000000000003FFFFFFFFFFFFFF CC021555555555556BF966054F43E32D6C0040000000000003FFFFFFFFFFFFFFCC0200 00000000001BFA9999999999996C0040000000000003FFFFFFFFFFFFFFCC01D5555555 55557BFB33F5617839A5CC0040000000000003FFFFFFFFFFFFFFCC01AAAAAAAAAAAACB FB8EFB11D33F562C0040000000000003FFFFFFFFFFFFFFCC018000000000001BFBDDDD DDDDDDDDEC0040000000000003FFFFFFFFFFFFFFCC015555555555556BFC104EE2CC0A 9E9C0040000000000003FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFC2B9D6480F2B9EC00 40000000000003FFFFFFFFFFFFFFCC010000000000000BFC40DA740DA740FC00400000 00000003FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFC500611722833BC00400000000000 03FFFFFFFFFFFFFFCC005555555555556BFC59203CAE75922C0040000000000003FFFF FFFFFFFFFFCC000000000000001BFC5C28F5C28F5C4C0040000000000003FFFFFFFFFF FFFFCBFF5555555555558BFC59203CAE75921C0040000000000003FFFFFFFFFFFFFFCB FE555555555555BBFC500611722833BC0040000000000003FFFFFFFFFFFFFFCBCC8000 000000000BFC40DA740DA740FC0040000000000003FFFFFFFFFFFFFFC3FE5555555555 54FBFC2B9D6480F2B9FC0040000000000003FFFFFFFFFFFFFFC3FF5555555555552BFC 104EE2CC0A9EAC0040000000000003FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFBDDDDDD DDDDDE3C0040000000000003FFFFFFFFFFFFFFC4005555555555553BFB8EFB11D33F56 6C0040000000000003FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFB33F5617839A61C0040 000000000003FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFA99999999999A6C0040000000 000003FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BF966054F43E32EDC0040000000000003 FFFFFFFFFFFFFFC40155555555555543F82F684BDA12F37C0040000000000003FFFFFF FFFFFFFFC4017FFFFFFFFFFFF3FA62FC962FC9623C0040000000000003FFFFFFFFFFFF FFC401AAAAAAAAAAAAA3FB49327104EE2C8C0040000000000003FFFFFFFFFFFFFFC401 D5555555555553FBED097B425ED06C0040000000000003FFFFFFFFFFFFFFC402000000 00000003FC4E81B4E81B4E8C0040000000000003FFFFFFFFFFFFFFC402155555555555 53FCAC901E573AC8EC0040000000000003FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FD08 57FCF746EBCC0040000000000003FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD3D70A3D7 0A3D5C0040000000000004005555555555553C0240000000000003FB27D27D27D27CFC 0040000000000004005555555555553C022AAAAAAAAAAAB3FA3882771660550C004000 0000000004005555555555553C0215555555555563F7CD2DE3EF50068C004000000000 0004005555555555553C020000000000001BF959E26AF37C03DC004000000000000400 5555555555553C01D555555555557BFA7B425ED097B3FC004000000000000400555555 5555553C01AAAAAAAAAAAACBFB18A6DFC3518A8C004000000000000400555555555555 3C018000000000001BFB6789ABCDF0124C0040000000000004005555555555553C0155 55555555556BFBAA49938827719C0040000000000004005555555555553C012AAAAAAA AAAABBFBE0E696F1F7A83C0040000000000004005555555555553C010000000000000B FC05B05B05B05B2C0040000000000004005555555555553C00AAAAAAAAAAAABBFC14DB F86A314DEC0040000000000004005555555555553C005555555555556BFC1DF623A67E AC5C0040000000000004005555555555553C000000000000001BFC20FEDCBA98767C00 40000000000004005555555555553BFF5555555555558BFC1DF623A67EAC4C00400000 00000004005555555555553BFE555555555555BBFC14DBF86A314DEC00400000000000 04005555555555553BCC8000000000000BFC05B05B05B05B2C00400000000000040055 555555555533FE555555555554FBFBE0E696F1F7A85C00400000000000040055555555 555533FF5555555555552BFBAA4993882771BC00400000000000040055555555555533 FFFFFFFFFFFFFFCBFB6789ABCDF0128C00400000000000040055555555555534005555 555555553BFB18A6DFC3518ACC0040000000000004005555555555553400AAAAAAAAAA AA8BFA7B425ED097B4FC0040000000000004005555555555553400FFFFFFFFFFFFDBF9 59E26AF37C064C00400000000000040055555555555534012AAAAAAAAAAA93F7CD2DE3 EF4FFECC004000000000000400555555555555340155555555555543FA388277166054 2C00400000000000040055555555555534017FFFFFFFFFFFF3FB27D27D27D27CCC0040 000000000004005555555555553401AAAAAAAAAAAAA3FBBF86A314DBF82C0040000000 000004005555555555553401D5555555555553FC31AED6A9264E0C0040000000000004 00555555555555340200000000000003FC89ABCDF012344C0040000000000004005555 55555555340215555555555553FCE7BA375F31AEBC0040000000000004005555555555 5534022AAAAAAAAAAAA3FD25ED097B425EBC0040000000000004005555555555553402 3FFFFFFFFFFFF3FD5B05B05B05B03C004000000000000400AAAAAAAAAAAA8C02400000 00000003FBB05B05B05B059C004000000000000400AAAAAAAAAAAA8C022AAAAAAAAAAA B3FB24C9C413B8B30C004000000000000400AAAAAAAAAAAA8C0215555555555563FA4A B6CD8EFB11DC004000000000000400AAAAAAAAAAAA8C0200000000000013F8907F6E5D 4C3C7C004000000000000400AAAAAAAAAAAA8C01D555555555557BF8A8C536FE1A8BEC 004000000000000400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFA203CAE759203FC004000 000000000400AAAAAAAAAAAA8C018000000000001BFABE02468ACF137C004000000000 000400AAAAAAAAAAAA8C015555555555556BFB21C10AFF9EE91C004000000000000400 AAAAAAAAAAAA8C012AAAAAAAAAAABBFB585E0E696F1FBC004000000000000400AAAAAA AAAAAA8C010000000000000BFB82D82D82D82DCC004000000000000400AAAAAAAAAAAA 8C00AAAAAAAAAAAABBFBA12F684BDA133C004000000000000400AAAAAAAAAAAA8C0055 55555555556BFBB363BEC474D01C004000000000000400AAAAAAAAAAAA8C0000000000 00001BFBB97530ECA8646C004000000000000400AAAAAAAAAAAA8BFF5555555555558B FBB363BEC474D01C004000000000000400AAAAAAAAAAAA8BFE555555555555BBFBA12F 684BDA134C004000000000000400AAAAAAAAAAAA8BCC8000000000000BFB82D82D82D8 2DDC004000000000000400AAAAAAAAAAAA83FE555555555554FBFB585E0E696F1FDC00 4000000000000400AAAAAAAAAAAA83FF5555555555552BFB21C10AFF9EE93C00400000 0000000400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFABE02468ACF140C00400000000000 0400AAAAAAAAAAAA84005555555555553BFA203CAE7592049C004000000000000400AA AAAAAAAAAA8400AAAAAAAAAAAA8BF8A8C536FE1A8F8C004000000000000400AAAAAAAA AAAA8400FFFFFFFFFFFFD3F8907F6E5D4C378C004000000000000400AAAAAAAAAAAA84 012AAAAAAAAAAA93FA4AB6CD8EFB10EC004000000000000400AAAAAAAAAAAA84015555 5555555543FB24C9C413B8B29C004000000000000400AAAAAAAAAAAA84017FFFFFFFFF FFF3FBB05B05B05B054C004000000000000400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FC 240795CEB2405C004000000000000400AAAAAAAAAAAA8401D5555555555553FC75F31A ED6A924C004000000000000400AAAAAAAAAAAA840200000000000003FCCDF012345678 8C004000000000000400AAAAAAAAAAAA840215555555555553FD15FF3DD1BAF97C0040 00000000000400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD480F2B9D6480DC0040000000 00000400AAAAAAAAAAAA84023FFFFFFFFFFFF3FD7D27D27D27D25C0040000000000004 00FFFFFFFFFFFFDC0240000000000003FC258BF258BF256C004000000000000400FFFF FFFFFFFFDC022AAAAAAAAAAAB3FBBF86A314DBF86C004000000000000400FFFFFFFFFF FFDC0215555555555563FB401845C8A0CE2C004000000000000400FFFFFFFFFFFFDC02 00000000000013FA999999999999AC004000000000000400FFFFFFFFFFFFDC01D55555 55555573F99690E0857FCF1C004000000000000400FFFFFFFFFFFFDC01AAAAAAAAAAAA C3F653D0F8CB4868AC004000000000000400FFFFFFFFFFFFDC018000000000001BF911 1111111111FC004000000000000400FFFFFFFFFFFFDC015555555555556BFA0E0857FC F7476C004000000000000400FFFFFFFFFFFFDC012AAAAAAAAAAABBFA7B425ED097B4CC 004000000000000400FFFFFFFFFFFFDC010000000000000BFAD0369D0369D0DC004000 000000000400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFB0672894AB6CDEC004000000000 000400FFFFFFFFFFFFDC005555555555556BFB18A6DFC3518ACC004000000000000400 FFFFFFFFFFFFDC000000000000001BFB1EB851EB851F1C004000000000000400FFFFFF FFFFFFDBFF5555555555558BFB18A6DFC3518ACC004000000000000400FFFFFFFFFFFF DBFE555555555555BBFB0672894AB6CDFC004000000000000400FFFFFFFFFFFFDBCC80 00000000000BFAD0369D0369D0FC004000000000000400FFFFFFFFFFFFD3FE55555555 5554FBFA7B425ED097B4FC004000000000000400FFFFFFFFFFFFD3FF5555555555552B FA0E0857FCF747CC004000000000000400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBF91111 11111112CC004000000000000400FFFFFFFFFFFFD40055555555555533F653D0F8CB48 61AC004000000000000400FFFFFFFFFFFFD400AAAAAAAAAAAA83F99690E0857FCD8C00 4000000000000400FFFFFFFFFFFFD400FFFFFFFFFFFFD3FA9999999999988C00400000 0000000400FFFFFFFFFFFFD4012AAAAAAAAAAA93FB401845C8A0CDCC00400000000000 0400FFFFFFFFFFFFD40155555555555543FBBF86A314DBF7EC004000000000000400FF FFFFFFFFFFD4017FFFFFFFFFFFF3FC258BF258BF254C004000000000000400FFFFFFFF FFFFD401AAAAAAAAAAAAA3FC7166054F43E2FC004000000000000400FFFFFFFFFFFFD4 01D5555555555553FCC3518A6DFC34FC004000000000000400FFFFFFFFFFFFD4020000 0000000003FD0DA740DA740DAC004000000000000400FFFFFFFFFFFFD4021555555555 5553FD3CAE759203CADC004000000000000400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD 6EBE635DAD522C004000000000000400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FDA3D70A 3D70A3BC0040000000000004012AAAAAAAAAAA9C0240000000000003FC7C048D159E26 7C0040000000000004012AAAAAAAAAAA9C022AAAAAAAAAAAB3FC363BEC474CFD4C0040 000000000004012AAAAAAAAAAA9C0215555555555563FBED097B425ED06C0040000000 000004012AAAAAAAAAAA9C0200000000000013FB79BE02468ACF0C0040000000000004 012AAAAAAAAAAA9C01D5555555555573FB12956D9B1DF5FC0040000000000004012AAA AAAAAAAA9C01AAAAAAAAAAAAC3FA6F1F7A80308AFC0040000000000004012AAAAAAAAA AA9C0180000000000013F9A2B3C4D5E6F71C0040000000000004012AAAAAAAAAAA9C01 55555555555563F82F684BDA12F39C0040000000000004012AAAAAAAAAAA9C012AAAAA AAAAAABBF70AFF9EE8DD830C0040000000000004012AAAAAAAAAAA9C01000000000000 0BF8D950C83FB7324C0040000000000004012AAAAAAAAAAA9C00AAAAAAAAAAAABBF966 054F43E32EDC0040000000000004012AAAAAAAAAAA9C005555555555556BF9AED6A926 4E225C0040000000000004012AAAAAAAAAAA9C000000000000001BF9C71C71C71C739C 0040000000000004012AAAAAAAAAAA9BFF5555555555558BF9AED6A9264E226C004000 0000000004012AAAAAAAAAAA9BFE555555555555BBF966054F43E32F0C004000000000 0004012AAAAAAAAAAA9BCC8000000000000BF8D950C83FB7327C004000000000000401 2AAAAAAAAAAA93FE555555555554FBF70AFF9EE8DD849C0040000000000004012AAAAA AAAAAA93FF55555555555523F82F684BDA12F28C0040000000000004012AAAAAAAAAAA 93FFFFFFFFFFFFFFC3F9A2B3C4D5E6F5FC0040000000000004012AAAAAAAAAAA940055 555555555533FA6F1F7A80308A7C0040000000000004012AAAAAAAAAAA9400AAAAAAAA AAAA83FB12956D9B1DF59C0040000000000004012AAAAAAAAAAA9400FFFFFFFFFFFFD3 FB79BE02468ACE7C0040000000000004012AAAAAAAAAAA94012AAAAAAAAAAA93FBED09 7B425ECFEC0040000000000004012AAAAAAAAAAA940155555555555543FC363BEC474C FD0C0040000000000004012AAAAAAAAAAA94017FFFFFFFFFFFF3FC7C048D159E266C00 40000000000004012AAAAAAAAAAA9401AAAAAAAAAAAAA3FCC7DEA00C22E41C00400000 00000004012AAAAAAAAAAA9401D5555555555553FD0CE512956D9B0C00400000000000 04012AAAAAAAAAAA940200000000000003FD38E38E38E38E2C0040000000000004012A AAAAAAAAAA940215555555555553FD67EAC2F0734B5C0040000000000004012AAAAAAA AAAA94022AAAAAAAAAAAA3FD99FAB0BC1CD2BC0040000000000004012AAAAAAAAAAA94 023FFFFFFFFFFFF3FDCF13579BE0243C0040000000000004015555555555554C024000 0000000003FCDB97530ECA861C0040000000000004015555555555554C022AAAAAAAAA AAB3FC95CEB240795CEC0040000000000004015555555555554C0215555555555563FC 5617839A5BC7DC0040000000000004015555555555554C0200000000000013FC1C71C7 1C71C71C0040000000000004015555555555554C01D5555555555573FBD1BAF98D76B5 2C0040000000000004015555555555554C01AAAAAAAAAAAAC3FB76B549327104BC0040 000000000004015555555555554C0180000000000013FB27D27D27D27CFC0040000000 000004015555555555554C0155555555555563FACA252ADB363B4C0040000000000004 015555555555554C012AAAAAAAAAAAB3FA5CEB240795CE1C0040000000000004015555 555555554C0100000000000003FA07F6E5D4C3B1EC0040000000000004015555555555 554C00AAAAAAAAAAAAB3F99690E0857FCE0C0040000000000004015555555555554C00 55555555555563F94DBF86A314DA7C0040000000000004015555555555554C00000000 00000013F93579BE0246894C0040000000000004015555555555554BFF555555555555 83F94DBF86A314DA7C0040000000000004015555555555554BFE555555555555B3F996 90E0857FCDDC0040000000000004015555555555554BCC80000000000003FA07F6E5D4 C3B1DC00400000000000040155555555555543FE555555555554F3FA5CEB240795CDDC 00400000000000040155555555555543FF55555555555523FACA252ADB363B0C004000 00000000040155555555555543FFFFFFFFFFFFFFC3FB27D27D27D27CBC004000000000 000401555555555555440055555555555533FB76B5493271047C004000000000000401 5555555555554400AAAAAAAAAAAA83FBD1BAF98D76B4CC004000000000000401555555 5555554400FFFFFFFFFFFFD3FC1C71C71C71C6DC004000000000000401555555555555 44012AAAAAAAAAAA93FC5617839A5BC79C004000000000000401555555555555440155 555555555543FC95CEB240795CAC00400000000000040155555555555544017FFFFFFF FFFFF3FCDB97530ECA85FC0040000000000004015555555555554401AAAAAAAAAAAAA3 FD13B8B302A7A1DC0040000000000004015555555555554401D5555555555553FD3CAE 759203CADC004000000000000401555555555555440200000000000003FD68ACF13579 BDFC004000000000000401555555555555440215555555555553FD97B425ED097B2C00 400000000000040155555555555544022AAAAAAAAAAAA3FDC9C413B8B3027C00400000 000000040155555555555544023FFFFFFFFFFFF3FDFEDCBA9876540C00400000000000 04017FFFFFFFFFFFFC0240000000000003FD2222222222221C0040000000000004017F FFFFFFFFFFFC022AAAAAAAAAAAB3FCFE7BA375F31AEC0040000000000004017FFFFFFF FFFFFC0215555555555563FCBEC474CFD585DC0040000000000004017FFFFFFFFFFFFC 0200000000000013FC851EB851EB852C0040000000000004017FFFFFFFFFFFFC01D555 5555555573FC518A6DFC35189C0040000000000004017FFFFFFFFFFFFC01AAAAAAAAAA AAC3FC240795CEB2405C0040000000000004017FFFFFFFFFFFFC0180000000000013FB F92C5F92C5F8FC0040000000000004017FFFFFFFFFFFFC0155555555555563FBB66C77 D88E99AC0040000000000004017FFFFFFFFFFFFC012AAAAAAAAAAAB3FB7FCF746EBE63 0C0040000000000004017FFFFFFFFFFFFC0100000000000003FB555555555554FC0040 000000000004017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FB36FE1A8C536F8C0040000000 000004017FFFFFFFFFFFFC0055555555555563FB24C9C413B8B2AC0040000000000004 017FFFFFFFFFFFFC0000000000000013FB1EB851EB851E5C0040000000000004017FFF FFFFFFFFFBFF55555555555583FB24C9C413B8B2AC0040000000000004017FFFFFFFFF FFFBFE555555555555B3FB36FE1A8C536F7C0040000000000004017FFFFFFFFFFFFBCC 80000000000003FB555555555554EC0040000000000004017FFFFFFFFFFFF3FE555555 555554F3FB7FCF746EBE62EC0040000000000004017FFFFFFFFFFFF3FF555555555555 23FBB66C77D88E998C0040000000000004017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FBF9 2C5F92C5F8BC0040000000000004017FFFFFFFFFFFF40055555555555533FC240795CE B2404C0040000000000004017FFFFFFFFFFFF400AAAAAAAAAAAA83FC518A6DFC35186C 0040000000000004017FFFFFFFFFFFF400FFFFFFFFFFFFD3FC851EB851EB84DC004000 0000000004017FFFFFFFFFFFF4012AAAAAAAAAAA93FCBEC474CFD5858C004000000000 0004017FFFFFFFFFFFF40155555555555543FCFE7BA375F31AAC004000000000000401 7FFFFFFFFFFFF4017FFFFFFFFFFFF3FD2222222222220C0040000000000004017FFFFF FFFFFFF401AAAAAAAAAAAAA3FD480F2B9D6480DC0040000000000004017FFFFFFFFFFF F401D5555555555553FD7104EE2CC0A9DC0040000000000004017FFFFFFFFFFFF40200 000000000003FD9D0369D0369CFC0040000000000004017FFFFFFFFFFFF40215555555 555553FDCC0A9E87C65A2C0040000000000004017FFFFFFFFFFFF4022AAAAAAAAAAAA3 FDFE1A8C536FE17C0040000000000004017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE1999 999999998C004000000000000401AAAAAAAAAAAAAC0240000000000003FD5B05B05B05 B05C004000000000000401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD38215FF3DD1BBC00 4000000000000401AAAAAAAAAAAAAC0215555555555563FD1845C8A0CE513C00400000 0000000401AAAAAAAAAAAAAC0200000000000013FCF6E5D4C3B2A1AC00400000000000 0401AAAAAAAAAAAAAC01D5555555555573FCC3518A6DFC352C004000000000000401AA AAAAAAAAAAAC01AAAAAAAAAAAAC3FC95CEB240795CEC004000000000000401AAAAAAAA AAAAAC0180000000000013FC6E5D4C3B2A190C004000000000000401AAAAAAAAAAAAAC 0155555555555563FC4CFD585E0E696C004000000000000401AAAAAAAAAAAAAC012AAA AAAAAAAAB3FC31AED6A9264E1C004000000000000401AAAAAAAAAAAAAC010000000000 0003FC1C71C71C71C70C004000000000000401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FC 0D4629B7F0D44C004000000000000401AAAAAAAAAAAAAC0055555555555563FC042BFE 7BA375DC004000000000000401AAAAAAAAAAAAAC0000000000000013FC0123456789AB BC004000000000000401AAAAAAAAAAAAABFF55555555555583FC042BFE7BA375EC0040 00000000000401AAAAAAAAAAAAABFE555555555555B3FC0D4629B7F0D44C0040000000 00000401AAAAAAAAAAAAABCC80000000000003FC1C71C71C71C70C0040000000000004 01AAAAAAAAAAAAA3FE555555555554F3FC31AED6A9264E0C004000000000000401AAAA AAAAAAAAA3FF55555555555523FC4CFD585E0E695C004000000000000401AAAAAAAAAA AAA3FFFFFFFFFFFFFFC3FC6E5D4C3B2A18EC004000000000000401AAAAAAAAAAAAA400 55555555555533FC95CEB240795CCC004000000000000401AAAAAAAAAAAAA400AAAAAA AAAAAA83FCC3518A6DFC34EC004000000000000401AAAAAAAAAAAAA400FFFFFFFFFFFF D3FCF6E5D4C3B2A15C004000000000000401AAAAAAAAAAAAA4012AAAAAAAAAAA93FD18 45C8A0CE511C004000000000000401AAAAAAAAAAAAA40155555555555543FD38215FF3 DD1B9C004000000000000401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FD5B05B05B05B04C 004000000000000401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FD80F2B9D6480F1C004000 000000000401AAAAAAAAAAAAA401D5555555555553FDA9E87C65A4381C004000000000 000401AAAAAAAAAAAAA40200000000000003FDD5E6F8091A2B4C004000000000000401 AAAAAAAAAAAAA40215555555555553FE0277166054F43C004000000000000401AAAAAA AAAAAAA4022AAAAAAAAAAAA3FE1B7F0D4629B7EC004000000000000401AAAAAAAAAAAA A4023FFFFFFFFFFFF3FE360B60B60B60AC004000000000000401D555555555555C0240 000000000003FD987654320FEDCC004000000000000401D555555555555C022AAAAAAA AAAAB3FD759203CAE7593C004000000000000401D555555555555C0215555555555563 FD55B66C77D88EAC004000000000000401D555555555555C0200000000000013FD38E3 8E38E38E4C004000000000000401D555555555555C01D5555555555573FD1F19690E08 580C004000000000000401D555555555555C01AAAAAAAAAAAAC3FD0857FCF746EBFC00 4000000000000401D555555555555C0180000000000013FCE93E93E93E93FC00400000 0000000401D555555555555C0155555555555563FCC7DEA00C22E45C00400000000000 0401D555555555555C012AAAAAAAAAAAB3FCAC901E573AC90C004000000000000401D5 55555555555C0100000000000003FC97530ECA8641FC004000000000000401D5555555 55555C00AAAAAAAAAAAAB3FC88277166054F3C004000000000000401D555555555555C 0055555555555563FC7F0D4629B7F0CC004000000000000401D555555555555C000000 0000000013FC7C048D159E26AC004000000000000401D555555555555BFF5555555555 5583FC7F0D4629B7F0DC004000000000000401D555555555555BFE555555555555B3FC 88277166054F3C004000000000000401D555555555555BCC80000000000003FC97530E CA8641FC004000000000000401D5555555555553FE555555555554F3FCAC901E573AC8 FC004000000000000401D5555555555553FF55555555555523FCC7DEA00C22E44C0040 00000000000401D5555555555553FFFFFFFFFFFFFFC3FCE93E93E93E93DC0040000000 00000401D55555555555540055555555555533FD0857FCF746EBDC0040000000000004 01D555555555555400AAAAAAAAAAAA83FD1F19690E0857FC004000000000000401D555 555555555400FFFFFFFFFFFFD3FD38E38E38E38E2C004000000000000401D555555555 5554012AAAAAAAAAAA93FD55B66C77D88E8C004000000000000401D555555555555401 55555555555543FD759203CAE7591C004000000000000401D5555555555554017FFFFF FFFFFFF3FD987654320FEDBC004000000000000401D555555555555401AAAAAAAAAAAA A3FDBE635DAD524C9C004000000000000401D555555555555401D5555555555553FDE7 59203CAE758C004000000000000401D55555555555540200000000000003FE09ABCDF0 12345C004000000000000401D55555555555540215555555555553FE212F684BDA12FC 004000000000000401D5555555555554022AAAAAAAAAAAA3FE3A375F31AED6AC004000 000000000401D5555555555554023FFFFFFFFFFFF3FE54C3B2A1907F6C004000000000 0004020000000000000C0240000000000003FDDA740DA740DA7C004000000000000402 0000000000000C022AAAAAAAAAAAB3FDB78FBD401845DC004000000000000402000000 0000000C0215555555555563FD97B425ED097B5C004000000000000402000000000000 0C0200000000000013FD7AE147AE147AFC0040000000000004020000000000000C01D5 555555555573FD611722833944BC0040000000000004020000000000000C01AAAAAAAA AAAAC3FD4A55B66C77D89C0040000000000004020000000000000C0180000000000013 FD369D0369D036AC0040000000000004020000000000000C0155555555555563FD25ED 097B425EDC0040000000000004020000000000000C012AAAAAAAAAAAB3FD1845C8A0CE 512C0040000000000004020000000000000C0100000000000003FD0DA740DA740DAC00 40000000000004020000000000000C00AAAAAAAAAAAAB3FD0611722833944C00400000 00000004020000000000000C0055555555555563FD01845C8A0CE51C00400000000000 04020000000000000C0000000000000013FCFFFFFFFFFFFFFC00400000000000040200 00000000000BFF55555555555583FD01845C8A0CE51C00400000000000040200000000 00000BFE555555555555B3FD0611722833944C0040000000000004020000000000000B CC80000000000003FD0DA740DA740DAC00400000000000040200000000000003FE5555 55555554F3FD1845C8A0CE512C00400000000000040200000000000003FF5555555555 5523FD25ED097B425EDC00400000000000040200000000000003FFFFFFFFFFFFFFC3FD 369D0369D0369C004000000000000402000000000000040055555555555533FD4A55B6 6C77D88C0040000000000004020000000000000400AAAAAAAAAAAA83FD611722833944 AC0040000000000004020000000000000400FFFFFFFFFFFFD3FD7AE147AE147ADC0040 0000000000040200000000000004012AAAAAAAAAAA93FD97B425ED097B2C0040000000 00000402000000000000040155555555555543FDB78FBD401845CC0040000000000004 0200000000000004017FFFFFFFFFFFF3FDDA740DA740DA6C0040000000000004020000 000000000401AAAAAAAAAAAAA3FE00308B91419CAC0040000000000004020000000000 000401D5555555555553FE14AB6CD8EFB12C0040000000000004020000000000000402 00000000000003FE2AAAAAAAAAAABC0040000000000004020000000000000402155555 55555553FE422E450672894C00400000000000040200000000000004022AAAAAAAAAAA A3FE5B363BEC474CFC00400000000000040200000000000004023FFFFFFFFFFFF3FE75 C28F5C28F5BC0040000000000004021555555555555C0240000000000003FE107F6E5D 4C3B2C0040000000000004021555555555555C022AAAAAAAAAAAB3FDFE1A8C536FE1AC 0040000000000004021555555555555C0215555555555563FDDE3EF50061172C004000 0000000004021555555555555C0200000000000013FDC16C16C16C16CC004000000000 0004021555555555555C01D5555555555573FDA7A1F19690E08C004000000000000402 1555555555555C01AAAAAAAAAAAAC3FD90E0857FCF746C004000000000000402155555 5555555C0180000000000013FD7D27D27D27D27C004000000000000402155555555555 5C0155555555555563FD6C77D88E99FAAC0040000000000004021555555555555C012A AAAAAAAAAAB3FD5ED097B425ECFC0040000000000004021555555555555C0100000000 000003FD54320FEDCBA97C0040000000000004021555555555555C00AAAAAAAAAAAAB3 FD4C9C413B8B301C0040000000000004021555555555555C0055555555555563FD480F 2B9D6480EC0040000000000004021555555555555C0000000000000013FD468ACF1357 9BDC0040000000000004021555555555555BFF55555555555583FD480F2B9D6480EC00 40000000000004021555555555555BFE555555555555B3FD4C9C413B8B301C00400000 00000004021555555555555BCC80000000000003FD54320FEDCBA97C00400000000000 040215555555555553FE555555555554F3FD5ED097B425ECFC00400000000000040215 555555555553FF55555555555523FD6C77D88E99FAAC00400000000000040215555555 555553FFFFFFFFFFFFFFC3FD7D27D27D27D26C00400000000000040215555555555554 0055555555555533FD90E0857FCF745C0040000000000004021555555555555400AAAA AAAAAAAA83FDA7A1F19690E07C0040000000000004021555555555555400FFFFFFFFFF FFD3FDC16C16C16C16AC00400000000000040215555555555554012AAAAAAAAAAA93FD DE3EF5006116FC004000000000000402155555555555540155555555555543FDFE1A8C 536FE19C00400000000000040215555555555554017FFFFFFFFFFFF3FE107F6E5D4C3B 2C0040000000000004021555555555555401AAAAAAAAAAAAA3FE2375F31AED6A8C0040 000000000004021555555555555401D5555555555553FE37F0D4629B7F0C0040000000 00000402155555555555540200000000000003FE4DF0123456789C0040000000000004 02155555555555540215555555555553FE6573AC901E573C0040000000000004021555 5555555554022AAAAAAAAAAAA3FE7E7BA375F31ADC0040000000000004021555555555 5554023FFFFFFFFFFFF3FE9907F6E5D4C3AC0040000000000004022AAAAAAAAAAAAC02 40000000000003FE360B60B60B60AC0040000000000004022AAAAAAAAAAAAC022AAAAA AAAAAAB3FE2499388277165C0040000000000004022AAAAAAAAAAAAC02155555555555 63FE14AB6CD8EFB11C0040000000000004022AAAAAAAAAAAAC0200000000000013FE06 41FDB97530EC0040000000000004022AAAAAAAAAAAAC01D5555555555573FDF2B9D648 0F2B8C0040000000000004022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FDDBF86A314DBF6C 0040000000000004022AAAAAAAAAAAAC0180000000000013FDC83FB72EA61D7C004000 0000000004022AAAAAAAAAAAAC0155555555555563FDB78FBD401845AC004000000000 0004022AAAAAAAAAAAAC012AAAAAAAAAAAB3FDA9E87C65A437FC004000000000000402 2AAAAAAAAAAAAC0100000000000003FD9F49F49F49F47C0040000000000004022AAAAA AAAAAAAC00AAAAAAAAAAAAB3FD97B425ED097B1C0040000000000004022AAAAAAAAAAA AC0055555555555563FD9327104EE2CBEC0040000000000004022AAAAAAAAAAAAC0000 000000000013FD91A2B3C4D5E6DC0040000000000004022AAAAAAAAAAAABFF55555555 555583FD9327104EE2CBEC0040000000000004022AAAAAAAAAAAABFE555555555555B3 FD97B425ED097B1C0040000000000004022AAAAAAAAAAAABCC80000000000003FD9F49 F49F49F47C0040000000000004022AAAAAAAAAAAA3FE555555555554F3FDA9E87C65A4 37FC0040000000000004022AAAAAAAAAAAA3FF55555555555523FDB78FBD401845AC00 40000000000004022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FDC83FB72EA61D6C00400000 00000004022AAAAAAAAAAAA40055555555555533FDDBF86A314DBF5C00400000000000 04022AAAAAAAAAAAA400AAAAAAAAAAAA83FDF2B9D6480F2B7C0040000000000004022A AAAAAAAAAAA400FFFFFFFFFFFFD3FE0641FDB97530DC0040000000000004022AAAAAAA AAAAA4012AAAAAAAAAAA93FE14AB6CD8EFB10C0040000000000004022AAAAAAAAAAAA4 0155555555555543FE2499388277164C0040000000000004022AAAAAAAAAAAA4017FFF FFFFFFFFF3FE360B60B60B60AC0040000000000004022AAAAAAAAAAAA401AAAAAAAAAA AAA3FE4901E573AC900C0040000000000004022AAAAAAAAAAAA401D5555555555553FE 5D7CC6BB5AA48C0040000000000004022AAAAAAAAAAAA40200000000000003FE737C04 8D159E1C0040000000000004022AAAAAAAAAAAA40215555555555553FE8AFF9EE8DD7C BC0040000000000004022AAAAAAAAAAAA4022AAAAAAAAAAAA3FEA40795CEB2405C0040 000000000004022AAAAAAAAAAAA4023FFFFFFFFFFFF3FEBE93E93E93E92C0040000000 000004023FFFFFFFFFFFFC0240000000000003FE5DDDDDDDDDDDCC0040000000000004 023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE4C6BB5AA49938C0040000000000004023FFF FFFFFFFFFC0215555555555563FE3C7DEA00C22E3C0040000000000004023FFFFFFFFF FFFC0200000000000013FE2E147AE147AE1C0040000000000004023FFFFFFFFFFFFC01 D5555555555573FE212F684BDA12FC0040000000000004023FFFFFFFFFFFFC01AAAAAA AAAAAAC3FE15CEB240795CEC0040000000000004023FFFFFFFFFFFFC01800000000000 13FE0BF258BF258BEC0040000000000004023FFFFFFFFFFFFC0155555555555563FE03 9A5BC7DE9FFC0040000000000004023FFFFFFFFFFFFC012AAAAAAAAAAAB3FDF98D76B5 49324C0040000000000004023FFFFFFFFFFFFC0100000000000003FDEEEEEEEEEEEECC 0040000000000004023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FDE759203CAE756C004000 0000000004023FFFFFFFFFFFFC0055555555555563FDE2CC0A9E87C63C004000000000 0004023FFFFFFFFFFFFC0000000000000013FDE147AE147AE12C004000000000000402 3FFFFFFFFFFFFBFF55555555555583FDE2CC0A9E87C63C0040000000000004023FFFFF FFFFFFFBFE555555555555B3FDE759203CAE756C0040000000000004023FFFFFFFFFFF FBCC80000000000003FDEEEEEEEEEEEECC0040000000000004023FFFFFFFFFFFF3FE55 5555555554F3FDF98D76B549324C0040000000000004023FFFFFFFFFFFF3FF55555555 555523FE039A5BC7DE9FFC0040000000000004023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3 FE0BF258BF258BDC0040000000000004023FFFFFFFFFFFF40055555555555533FE15CE B240795CDC0040000000000004023FFFFFFFFFFFF400AAAAAAAAAAAA83FE212F684BDA 12DC0040000000000004023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE2E147AE147AE0C00 40000000000004023FFFFFFFFFFFF4012AAAAAAAAAAA93FE3C7DEA00C22E2C00400000 00000004023FFFFFFFFFFFF40155555555555543FE4C6BB5AA49937C00400000000000 04023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE5DDDDDDDDDDDCC0040000000000004023F FFFFFFFFFFF401AAAAAAAAAAAAA3FE70D4629B7F0D3C0040000000000004023FFFFFFF FFFFF401D5555555555553FE854F43E32D21AC0040000000000004023FFFFFFFFFFFF4 0200000000000003FE9B4E81B4E81B4C0040000000000004023FFFFFFFFFFFF4021555 5555555553FEB2D21C10AFF9DC0040000000000004023FFFFFFFFFFFF4022AAAAAAAAA AAA3FECBDA12F684BD8C0040000000000004023FFFFFFFFFFFF4023FFFFFFFFFFFF3FE E666666666664C002AAAAAAAAAAABC024000000000000C0240000000000003FD111111 1111112C002AAAAAAAAAAABC024000000000000C022AAAAAAAAAAAB3FCDC598153D0F9 1C002AAAAAAAAAAABC024000000000000C0215555555555563FC9CA252ADB3640C002A AAAAAAAAAABC024000000000000C0200000000000013FC62FC962FC9635C002AAAAAAA AAAABC024000000000000C01D5555555555573FC2F684BDA12F6CC002AAAAAAAAAAABC 024000000000000C01AAAAAAAAAAAAC3FC01E573AC901E9C002AAAAAAAAAAABC024000 000000000C0180000000000013FBB4E81B4E81B55C002AAAAAAAAAAABC024000000000 000C0155555555555563FB722833944A560C002AAAAAAAAAAABC024000000000000C01 2AAAAAAAAAAAB3FB3B8B302A7A1F6C002AAAAAAAAAAABC024000000000000C01000000 00000003FB1111111111115C002AAAAAAAAAAABC024000000000000C00AAAAAAAAAAAA B3FAE573AC901E57CC002AAAAAAAAAAABC024000000000000C0055555555555563FAC1 0AFF9EE8DE0C002AAAAAAAAAAABC024000000000000C0000000000000013FAB4E81B4E 81B57C002AAAAAAAAAAABC024000000000000BFF55555555555583FAC10AFF9EE8DDFC 002AAAAAAAAAAABC024000000000000BFE555555555555B3FAE573AC901E57BC002AAA AAAAAAAABC024000000000000BCC80000000000003FB1111111111114C002AAAAAAAAA AABC0240000000000003FE555555555554F3FB3B8B302A7A1F4C002AAAAAAAAAAABC02 40000000000003FF55555555555523FB722833944A55EC002AAAAAAAAAAABC02400000 00000003FFFFFFFFFFFFFFC3FBB4E81B4E81B51C002AAAAAAAAAAABC02400000000000 040055555555555533FC01E573AC901E7C002AAAAAAAAAAABC024000000000000400AA AAAAAAAAAA83FC2F684BDA12F69C002AAAAAAAAAAABC024000000000000400FFFFFFFF FFFFD3FC62FC962FC9630C002AAAAAAAAAAABC0240000000000004012AAAAAAAAAAA93 FC9CA252ADB363BC002AAAAAAAAAAABC02400000000000040155555555555543FCDC59 8153D0F8DC002AAAAAAAAAAABC0240000000000004017FFFFFFFFFFFF3FD1111111111 111C002AAAAAAAAAAABC024000000000000401AAAAAAAAAAAAA3FD36FE1A8C536FFC00 2AAAAAAAAAAABC024000000000000401D5555555555553FD5FF3DD1BAF98EC002AAAAA AAAAAABC02400000000000040200000000000003FD8BF258BF258C0C002AAAAAAAAAAA BC02400000000000040215555555555553FDBAF98D76B5494C002AAAAAAAAAAABC0240 000000000004022AAAAAAAAAAAA3FDED097B425ED09C002AAAAAAAAAAABC0240000000 000004023FFFFFFFFFFFF3FE1111111111111C002AAAAAAAAAAABC022AAAAAAAAAAABC 0240000000000003FCB97530ECA8646C002AAAAAAAAAAABC022AAAAAAAAAAABC022AAA AAAAAAAAB3FC73AC901E573B3C002AAAAAAAAAAABC022AAAAAAAAAAABC021555555555 5563FC33F5617839A62C002AAAAAAAAAAABC022AAAAAAAAAAABC0200000000000013FB F49F49F49F4ADC002AAAAAAAAAAABC022AAAAAAAAAAABC01D5555555555573FB8D76B5 493271CC002AAAAAAAAAAABC022AAAAAAAAAAABC01AAAAAAAAAAAAC3FB327104EE2CC1 4C002AAAAAAAAAAABC022AAAAAAAAAAABC0180000000000013FAC71C71C71C733C002A AAAAAAAAAABC022AAAAAAAAAAABC0155555555555563FA419CA252ADB48C002AAAAAAA AAAABC022AAAAAAAAAAABC012AAAAAAAAAAAB3F9A8C536FE1A8E8C002AAAAAAAAAAABC 022AAAAAAAAAAABC0100000000000003F8FDB97530ECAC4C002AAAAAAAAAAABC022AAA AAAAAAAABC00AAAAAAAAAAAAB3F80AFF9EE8DD80DC002AAAAAAAAAAABC022AAAAAAAAA AABC0055555555555563F6E573AC901E671C002AAAAAAAAAAABC022AAAAAAAAAAABC00 00000000000013F623456789ABDDEC002AAAAAAAAAAABC022AAAAAAAAAAABBFF555555 55555583F6E573AC901E66BC002AAAAAAAAAAABC022AAAAAAAAAAABBFE555555555555 B3F80AFF9EE8DD809C002AAAAAAAAAAABC022AAAAAAAAAAABBCC80000000000003F8FD B97530ECAC1C002AAAAAAAAAAABC022AAAAAAAAAAAB3FE555555555554F3F9A8C536FE 1A8E2C002AAAAAAAAAAABC022AAAAAAAAAAAB3FF55555555555523FA419CA252ADB44C 002AAAAAAAAAAABC022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FAC71C71C71C729C002AAA AAAAAAAABC022AAAAAAAAAAAB40055555555555533FB327104EE2CC11C002AAAAAAAAA AABC022AAAAAAAAAAAB400AAAAAAAAAAAA83FB8D76B54932716C002AAAAAAAAAAABC02 2AAAAAAAAAAAB400FFFFFFFFFFFFD3FBF49F49F49F4A4C002AAAAAAAAAAABC022AAAAA AAAAAAB4012AAAAAAAAAAA93FC33F5617839A5EC002AAAAAAAAAAABC022AAAAAAAAAAA B40155555555555543FC73AC901E573AFC002AAAAAAAAAAABC022AAAAAAAAAAAB4017F FFFFFFFFFFF3FCB97530ECA8644C002AAAAAAAAAAABC022AAAAAAAAAAAB401AAAAAAAA AAAAA3FD02A7A1F196910C002AAAAAAAAAAABC022AAAAAAAAAAAB401D5555555555553 FD2B9D6480F2B9FC002AAAAAAAAAAABC022AAAAAAAAAAAB40200000000000003FD579B E02468AD2C002AAAAAAAAAAABC022AAAAAAAAAAAB40215555555555553FD86A314DBF8 6A5C002AAAAAAAAAAABC022AAAAAAAAAAAB4022AAAAAAAAAAAA3FDB8B302A7A1F1AC00 2AAAAAAAAAAABC022AAAAAAAAAAAB4023FFFFFFFFFFFF3FDEDCBA98765433C002AAAAA AAAAAABC021555555555556C0240000000000003FC59E26AF37C04CC002AAAAAAAAAAA BC021555555555556C022AAAAAAAAAAAB3FC1419CA252ADB9C002AAAAAAAAAAABC0215 55555555556C0215555555555563FBA8C536FE1A8CEC002AAAAAAAAAAABC0215555555 55556C0200000000000013FB3579BE02468B9C002AAAAAAAAAAABC021555555555556C 01D5555555555573FA9CA252ADB3651C002AAAAAAAAAAABC021555555555556C01AAAA AAAAAAAAC3F9CD2DE3EF50081C002AAAAAAAAAAABC021555555555556C018000000000 0013F823456789ABD22C002AAAAAAAAAAABC021555555555556C015555555555556BF7 E573AC901E4FEC002AAAAAAAAAAABC021555555555556C012AAAAAAAAAAABBF953D0F8 CB486E8C002AAAAAAAAAAABC021555555555556C010000000000000BF9FDB97530ECA6 EC002AAAAAAAAAAABC021555555555556C00AAAAAAAAAAAABBFA3B8B302A7A1E5C002A AAAAAAAAAABC021555555555556C005555555555556BFA5FF3DD1BAF980C002AAAAAAA AAAABC021555555555556C000000000000001BFA6C16C16C16C0AC002AAAAAAAAAAABC 021555555555556BFF5555555555558BFA5FF3DD1BAF982C002AAAAAAAAAAABC021555 555555556BFE555555555555BBFA3B8B302A7A1E6C002AAAAAAAAAAABC021555555555 556BCC8000000000000BF9FDB97530ECA71C002AAAAAAAAAAABC0215555555555563FE 555555555554FBF953D0F8CB486EFC002AAAAAAAAAAABC0215555555555563FF555555 5555552BF7E573AC901E523C002AAAAAAAAAAABC0215555555555563FFFFFFFFFFFFFF C3F823456789ABD03C002AAAAAAAAAAABC02155555555555640055555555555533F9CD 2DE3EF50071C002AAAAAAAAAAABC021555555555556400AAAAAAAAAAAA83FA9CA252AD B3643C002AAAAAAAAAAABC021555555555556400FFFFFFFFFFFFD3FB3579BE02468B0C 002AAAAAAAAAAABC0215555555555564012AAAAAAAAAAA93FBA8C536FE1A8C7C002AAA AAAAAAAABC02155555555555640155555555555543FC1419CA252ADB5C002AAAAAAAAA AABC0215555555555564017FFFFFFFFFFFF3FC59E26AF37C04AC002AAAAAAAAAAABC02 1555555555556401AAAAAAAAAAAAA3FCA5BC7DEA00C25C002AAAAAAAAAAABC02155555 5555556401D5555555555553FCF7A80308B9144C002AAAAAAAAAAABC02155555555555 640200000000000003FD27D27D27D27D4C002AAAAAAAAAAABC02155555555555640215 555555555553FD56D9B1DF623A8C002AAAAAAAAAAABC0215555555555564022AAAAAAA AAAAA3FD88E99FAB0BC1DC002AAAAAAAAAAABC0215555555555564023FFFFFFFFFFFF3 FDBE02468ACF136C002AAAAAAAAAAABC020000000000001C0240000000000003FC0369 D0369D03BC002AAAAAAAAAAABC020000000000001C022AAAAAAAAAAAB3FB7B425ED097 B4EC002AAAAAAAAAAABC020000000000001C0215555555555563FAF7A80308B9159C00 2AAAAAAAAAAABC020000000000001C0200000000000013FA111111111112EC002AAAAA AAAAAABC020000000000001C01D5555555555573F80AFF9EE8DD832C002AAAAAAAAAAA BC020000000000001C01AAAAAAAAAAAACBF8CD2DE3EF5000EC002AAAAAAAAAAABC0200 00000000001C018000000000001BFA11111111110FBC002AAAAAAAAAAABC0200000000 00001C015555555555556BFA9690E0857FCE6C002AAAAAAAAAAABC020000000000001C 012AAAAAAAAAAABBFB01E573AC901DDC002AAAAAAAAAAABC020000000000001C010000 000000000BFB2C5F92C5F92BEC002AAAAAAAAAAABC020000000000001C00AAAAAAAAAA AABBFB4AB6CD8EFB115C002AAAAAAAAAAABC020000000000001C005555555555556BFB 5CEB240795CE3C002AAAAAAAAAAABC020000000000001C000000000000001BFB62FC96 2FC9628C002AAAAAAAAAAABC020000000000001BFF5555555555558BFB5CEB240795CE 3C002AAAAAAAAAAABC020000000000001BFE555555555555BBFB4AB6CD8EFB116C002A AAAAAAAAAABC020000000000001BCC8000000000000BFB2C5F92C5F92BFC002AAAAAAA AAAABC0200000000000013FE555555555554FBFB01E573AC901DFC002AAAAAAAAAAABC 0200000000000013FF5555555555552BFA9690E0857FCEAC002AAAAAAAAAAABC020000 0000000013FFFFFFFFFFFFFFCBFA1111111111104C002AAAAAAAAAAABC020000000000 0014005555555555553BF8CD2DE3EF50033C002AAAAAAAAAAABC020000000000001400 AAAAAAAAAAAA83F80AFF9EE8DD7F8C002AAAAAAAAAAABC020000000000001400FFFFFF FFFFFFD3FA111111111111AC002AAAAAAAAAAABC0200000000000014012AAAAAAAAAAA 93FAF7A80308B914AC002AAAAAAAAAAABC02000000000000140155555555555543FB7B 425ED097B47C002AAAAAAAAAAABC0200000000000014017FFFFFFFFFFFF3FC0369D036 9D039C002AAAAAAAAAAABC020000000000001401AAAAAAAAAAAAA3FC4F43E32D21C14C 002AAAAAAAAAAABC020000000000001401D5555555555553FCA12F684BDA133C002AAA AAAAAAAABC02000000000000140200000000000003FCF92C5F92C5F98C002AAAAAAAAA AABC02000000000000140215555555555553FD2B9D6480F2B9FC002AAAAAAAAAAABC02 00000000000014022AAAAAAAAAAAA3FD5DAD524C9C414C002AAAAAAAAAAABC02000000 00000014023FFFFFFFFFFFF3FD92C5F92C5F92DC002AAAAAAAAAAABC01D55555555555 7C0240000000000003FB6C16C16C16C21C002AAAAAAAAAAABC01D555555555557C022A AAAAAAAAAAB3FAC10AFF9EE8DF0C002AAAAAAAAAAABC01D555555555557C0215555555 555563F9845C8A0CE515AC002AAAAAAAAAAABC01D555555555557C020000000000001B F723456789ABBF3C002AAAAAAAAAAABC01D555555555557C01D555555555557BF9E573 AC901E53FC002AAAAAAAAAAABC01D555555555557C01AAAAAAAAAAAACBFAA8C536FE1A 8AFC002AAAAAAAAAAABC01D555555555557C018000000000001BFB23456789ABCD4C00 2AAAAAAAAAAABC01D555555555557C015555555555556BFB66054F43E32C9C002AAAAA AAAAAABC01D555555555557C012AAAAAAAAAAABBFB9CA252ADB3633C002AAAAAAAAAAA BC01D555555555557C010000000000000BFBC71C71C71C714C002AAAAAAAAAAABC01D5 55555555557C00AAAAAAAAAAAABBFBE573AC901E56BC002AAAAAAAAAAABC01D5555555 55557C005555555555556BFBF7A80308B9139C002AAAAAAAAAAABC01D555555555557C 000000000000001BFBFDB97530ECA7EC002AAAAAAAAAAABC01D555555555557BFF5555 555555558BFBF7A80308B9139C002AAAAAAAAAAABC01D555555555557BFE5555555555 55BBFBE573AC901E56CC002AAAAAAAAAAABC01D555555555557BCC8000000000000BFB C71C71C71C715C002AAAAAAAAAAABC01D5555555555573FE555555555554FBFB9CA252 ADB3635C002AAAAAAAAAAABC01D5555555555573FF5555555555552BFB66054F43E32C BC002AAAAAAAAAAABC01D5555555555573FFFFFFFFFFFFFFCBFB23456789ABCD8C002A AAAAAAAAAABC01D5555555555574005555555555553BFAA8C536FE1A8B8C002AAAAAAA AAAABC01D555555555557400AAAAAAAAAAAA8BF9E573AC901E55EC002AAAAAAAAAAABC 01D555555555557400FFFFFFFFFFFFDBF723456789ABC91C002AAAAAAAAAAABC01D555 5555555574012AAAAAAAAAAA93F9845C8A0CE513BC002AAAAAAAAAAABC01D555555555 55740155555555555543FAC10AFF9EE8DE2C002AAAAAAAAAAABC01D555555555557401 7FFFFFFFFFFFF3FB6C16C16C16C1CC002AAAAAAAAAAABC01D555555555557401AAAAAA AAAAAAA3FC01E573AC901E9C002AAAAAAAAAAABC01D555555555557401D55555555555 53FC53D0F8CB48708C002AAAAAAAAAAABC01D55555555555740200000000000003FCAB CDF0123456CC002AAAAAAAAAAABC01D55555555555740215555555555553FD04EE2CC0 A9E8AC002AAAAAAAAAAABC01D5555555555574022AAAAAAAAAAAA3FD36FE1A8C536FFC 002AAAAAAAAAAABC01D5555555555574023FFFFFFFFFFFF3FD6C16C16C16C17C002AAA AAAAAAAABC01AAAAAAAAAAAACC0240000000000003FAC71C71C71C726C002AAAAAAAAA AABC01AAAAAAAAAAAACC022AAAAAAAAAAAB3F95FF3DD1BAF9B0C002AAAAAAAAAAABC01 AAAAAAAAAAAACC021555555555556BF83B8B302A7A1CCC002AAAAAAAAAAABC01AAAAAA AAAAAACC020000000000001BFA3579BE024689EC002AAAAAAAAAAABC01AAAAAAAAAAAA CC01D555555555557BFB01E573AC901DEC002AAAAAAAAAAABC01AAAAAAAAAAAACC01AA AAAAAAAAAACBFB5CEB240795CE6C002AAAAAAAAAAABC01AAAAAAAAAAAACC0180000000 00001BFBABCDF01234562C002AAAAAAAAAAABC01AAAAAAAAAAAACC015555555555556B FBEE8DD7CC6BB57C002AAAAAAAAAAABC01AAAAAAAAAAAACC012AAAAAAAAAAABBFC1295 6D9B1DF60C002AAAAAAAAAAABC01AAAAAAAAAAAACC010000000000000BFC27D27D27D2 7D1C002AAAAAAAAAAABC01AAAAAAAAAAAACC00AAAAAAAAAAAABBFC36FE1A8C536FDC00 2AAAAAAAAAAABC01AAAAAAAAAAAACC005555555555556BFC401845C8A0CE4C002AAAAA AAAAAABC01AAAAAAAAAAAACC000000000000001BFC4320FEDCBA986C002AAAAAAAAAAA BC01AAAAAAAAAAAACBFF5555555555558BFC401845C8A0CE3C002AAAAAAAAAAABC01AA AAAAAAAAAACBFE555555555555BBFC36FE1A8C536FDC002AAAAAAAAAAABC01AAAAAAAA AAAACBCC8000000000000BFC27D27D27D27D1C002AAAAAAAAAAABC01AAAAAAAAAAAAC3 FE555555555554FBFC12956D9B1DF61C002AAAAAAAAAAABC01AAAAAAAAAAAAC3FF5555 555555552BFBEE8DD7CC6BB58C002AAAAAAAAAAABC01AAAAAAAAAAAAC3FFFFFFFFFFFF FFCBFBABCDF01234566C002AAAAAAAAAAABC01AAAAAAAAAAAAC4005555555555553BFB 5CEB240795CEAC002AAAAAAAAAAABC01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFB01E573 AC901E5C002AAAAAAAAAAABC01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFA3579BE02468A EC002AAAAAAAAAAABC01AAAAAAAAAAAAC4012AAAAAAAAAAA9BF83B8B302A7A1FAC002A AAAAAAAAAABC01AAAAAAAAAAAAC40155555555555543F95FF3DD1BAF98BC002AAAAAAA AAAABC01AAAAAAAAAAAAC4017FFFFFFFFFFFF3FAC71C71C71C71BC002AAAAAAAAAAABC 01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FB7B425ED097B44C002AAAAAAAAAAABC01AAAA AAAAAAAAC401D5555555555553FC0F8CB487042C1C002AAAAAAAAAAABC01AAAAAAAAAA AAC40200000000000003FC6789ABCDF0126C002AAAAAAAAAAABC01AAAAAAAAAAAAC402 15555555555553FCC598153D0F8CCC002AAAAAAAAAAABC01AAAAAAAAAAAAC4022AAAAA AAAAAAA3FD14DBF86A314DBC002AAAAAAAAAAABC01AAAAAAAAAAAAC4023FFFFFFFFFFF F3FD49F49F49F49F4C002AAAAAAAAAAABC018000000000001C0240000000000003F9B4 E81B4E81B6CC002AAAAAAAAAAABC018000000000001C022AAAAAAAAAAABBF7E573AC90 1E4BEC002AAAAAAAAAAABC018000000000001C021555555555556BFA3B8B302A7A1E3C 002AAAAAAAAAAABC018000000000001C020000000000001BFB1111111111107C002AAA AAAAAAAABC018000000000001C01D555555555557BFB7839A5BC7DE98C002AAAAAAAAA AABC018000000000001C01AAAAAAAAAAAACBFBD33F5617839A0C002AAAAAAAAAAABC01 8000000000001C018000000000001BFC111111111110EC002AAAAAAAAAAABC01800000 0000001C015555555555556BFC327104EE2CC07C002AAAAAAAAAAABC01800000000000 1C012AAAAAAAAAAABBFC4DBF86A314DBCC002AAAAAAAAAAABC018000000000001C0100 00000000000BFC62FC962FC962DC002AAAAAAAAAAABC018000000000001C00AAAAAAAA AAAABBFC722833944A559C002AAAAAAAAAAABC018000000000001C005555555555556B FC7B425ED097B40C002AAAAAAAAAAABC018000000000001C000000000000001BFC7E4B 17E4B17E2C002AAAAAAAAAAABC018000000000001BFF5555555555558BFC7B425ED097 B3FC002AAAAAAAAAAABC018000000000001BFE555555555555BBFC722833944A559C00 2AAAAAAAAAAABC018000000000001BCC8000000000000BFC62FC962FC962DC002AAAAA AAAAAABC0180000000000013FE555555555554FBFC4DBF86A314DBDC002AAAAAAAAAAA BC0180000000000013FF5555555555552BFC327104EE2CC08C002AAAAAAAAAAABC0180 000000000013FFFFFFFFFFFFFFCBFC111111111110FC002AAAAAAAAAAABC0180000000 000014005555555555553BFBD33F5617839A3C002AAAAAAAAAAABC0180000000000014 00AAAAAAAAAAAA8BFB7839A5BC7DE9DC002AAAAAAAAAAABC018000000000001400FFFF FFFFFFFFDBFB111111111110FC002AAAAAAAAAAABC0180000000000014012AAAAAAAAA AA9BFA3B8B302A7A1EEC002AAAAAAAAAAABC0180000000000014015555555555554BF7 E573AC901E553C002AAAAAAAAAAABC0180000000000014017FFFFFFFFFFFF3F9B4E81B 4E81B56C002AAAAAAAAAAABC018000000000001401AAAAAAAAAAAAA3FB04EE2CC0A9E8 CC002AAAAAAAAAAABC018000000000001401D5555555555553FBA8C536FE1A8CAC002A AAAAAAAAAABC01800000000000140200000000000003FC2C5F92C5F92CAC002AAAAAAA AAAABC01800000000000140215555555555553FC8A6DFC3518A70C002AAAAAAAAAAABC 0180000000000014022AAAAAAAAAAAA3FCEE8DD7CC6BB5BC002AAAAAAAAAAABC018000 0000000014023FFFFFFFFFFFF3FD2C5F92C5F92C6C002AAAAAAAAAAABC015555555555 556C0240000000000003F623456789ABD5CC002AAAAAAAAAAABC015555555555556C02 2AAAAAAAAAAABBFA04EE2CC0A9E78C002AAAAAAAAAAABC015555555555556C02155555 5555556BFB01E573AC901DEC002AAAAAAAAAAABC015555555555556C02000000000000 1BFB7530ECA8641F3C002AAAAAAAAAAABC015555555555556C01D555555555557BFBDC 598153D0F84C002AAAAAAAAAAABC015555555555556C01AAAAAAAAAAAACBFC1BAF98D7 6B546C002AAAAAAAAAAABC015555555555556C018000000000001BFC4320FEDCBA984C 002AAAAAAAAAAABC015555555555556C015555555555556BFC6480F2B9D647EC002AAA AAAAAAAABC015555555555556C012AAAAAAAAAAABBFC7FCF746EBE633C002AAAAAAAAA AABC015555555555556C010000000000000BFC950C83FB72EA4C002AAAAAAAAAAABC01 5555555555556C00AAAAAAAAAAAABBFCA438215FF3DD0C002AAAAAAAAAAABC01555555 5555556C005555555555556BFCAD524C9C413B7C002AAAAAAAAAAABC01555555555555 6C000000000000001BFCB05B05B05B059C002AAAAAAAAAAABC015555555555556BFF55 55555555558BFCAD524C9C413B6C002AAAAAAAAAAABC015555555555556BFE55555555 5555BBFCA438215FF3DD0C002AAAAAAAAAAABC015555555555556BCC8000000000000B FC950C83FB72EA4C002AAAAAAAAAAABC0155555555555563FE555555555554FBFC7FCF 746EBE634C002AAAAAAAAAAABC0155555555555563FF5555555555552BFC6480F2B9D6 47FC002AAAAAAAAAAABC0155555555555563FFFFFFFFFFFFFFCBFC4320FEDCBA986C00 2AAAAAAAAAAABC0155555555555564005555555555553BFC1BAF98D76B548C002AAAAA AAAAAABC015555555555556400AAAAAAAAAAAA8BFBDC598153D0F8BC002AAAAAAAAAAA BC015555555555556400FFFFFFFFFFFFDBFB7530ECA8641FDC002AAAAAAAAAAABC0155 555555555564012AAAAAAAAAAA9BFB01E573AC901E5C002AAAAAAAAAAABC0155555555 555564015555555555554BFA04EE2CC0A9E86C002AAAAAAAAAAABC0155555555555564 017FFFFFFFFFFFF3F623456789ABCEFC002AAAAAAAAAAABC015555555555556401AAAA AAAAAAAAA3FA419CA252ADB3CC002AAAAAAAAAAABC015555555555556401D555555555 5553FB44A55B66C77DCC002AAAAAAAAAAABC01555555555555640200000000000003FB F49F49F49F4A5C002AAAAAAAAAAABC01555555555555640215555555555553FC585E0E 696F1F9C002AAAAAAAAAAABC0155555555555564022AAAAAAAAAAAA3FCBC7DEA00C22E 4C002AAAAAAAAAAABC0155555555555564023FFFFFFFFFFFF3FD13579BE02468AC002A AAAAAAAAAABC012AAAAAAAAAAABC024000000000000BF923456789ABCD4C002AAAAAAA AAAABC012AAAAAAAAAAABC022AAAAAAAAAAABBFAA8C536FE1A8B8C002AAAAAAAAAAABC 012AAAAAAAAAAABC021555555555556BFB53D0F8CB486FEC002AAAAAAAAAAABC012AAA AAAAAAAABC020000000000001BFBC71C71C71C713C002AAAAAAAAAAABC012AAAAAAAAA AABC01D555555555557BFC1722833944A52C002AAAAAAAAAAABC012AAAAAAAAAAABC01 AAAAAAAAAAAACBFC44A55B66C77D6C002AAAAAAAAAAABC012AAAAAAAAAAABC01800000 0000001BFC6C16C16C16C14C002AAAAAAAAAAABC012AAAAAAAAAAABC01555555555555 6BFC8D76B5493270EC002AAAAAAAAAAABC012AAAAAAAAAAABC012AAAAAAAAAAABBFCA8 C536FE1A8C3C002AAAAAAAAAAABC012AAAAAAAAAAABC010000000000000BFCBE02468A CF134C002AAAAAAAAAAABC012AAAAAAAAAAABC00AAAAAAAAAAAABBFCCD2DE3EF50060C 002AAAAAAAAAAABC012AAAAAAAAAAABC005555555555556BFCD6480F2B9D647C002AAA AAAAAAAABC012AAAAAAAAAAABC000000000000001BFCD950C83FB72E9C002AAAAAAAAA AABC012AAAAAAAAAAABBFF5555555555558BFCD6480F2B9D646C002AAAAAAAAAAABC01 2AAAAAAAAAAABBFE555555555555BBFCCD2DE3EF50060C002AAAAAAAAAAABC012AAAAA AAAAAABBCC8000000000000BFCBE02468ACF134C002AAAAAAAAAAABC012AAAAAAAAAAA B3FE555555555554FBFCA8C536FE1A8C4C002AAAAAAAAAAABC012AAAAAAAAAAAB3FF55 55555555552BFC8D76B5493270FC002AAAAAAAAAAABC012AAAAAAAAAAAB3FFFFFFFFFF FFFFCBFC6C16C16C16C16C002AAAAAAAAAAABC012AAAAAAAAAAAB4005555555555553B FC44A55B66C77D8C002AAAAAAAAAAABC012AAAAAAAAAAAB400AAAAAAAAAAAA8BFC1722 833944A56C002AAAAAAAAAAABC012AAAAAAAAAAAB400FFFFFFFFFFFFDBFBC71C71C71C 71DC002AAAAAAAAAAABC012AAAAAAAAAAAB4012AAAAAAAAAAA9BFB53D0F8CB48705C00 2AAAAAAAAAAABC012AAAAAAAAAAAB4015555555555554BFAA8C536FE1A8C6C002AAAAA AAAAAABC012AAAAAAAAAAAB4017FFFFFFFFFFFFBF923456789ABCE2C002AAAAAAAAAAA BC012AAAAAAAAAAAB401AAAAAAAAAAAAA3F93B8B302A7A1F5C002AAAAAAAAAAABC012A AAAAAAAAAAB401D5555555555553FAE573AC901E579C002AAAAAAAAAAABC012AAAAAAA AAAAB40200000000000003FBA2B3C4D5E6F85C002AAAAAAAAAAABC012AAAAAAAAAAAB4 0215555555555553FC2F684BDA12F69C002AAAAAAAAAAABC012AAAAAAAAAAAB4022AAA AAAAAAAAA3FC9388277166054C002AAAAAAAAAAABC012AAAAAAAAAAAB4023FFFFFFFFF FFF3FCFDB97530ECA85C002AAAAAAAAAAABC010000000000000C024000000000000BFA 111111111110AC002AAAAAAAAAAABC010000000000000C022AAAAAAAAAAABBFB1419CA 252ADACC002AAAAAAAAAAABC010000000000000C021555555555556BFB938827716604 EC002AAAAAAAAAAABC010000000000000C020000000000001BFC0369D0369D032C002A AAAAAAAAAABC010000000000000C01D555555555557BFC36FE1A8C536FAC002AAAAAAA AAAABC010000000000000C01AAAAAAAAAAAACBFC6480F2B9D647EC002AAAAAAAAAAABC 010000000000000C018000000000001BFC8BF258BF258BCC002AAAAAAAAAAABC010000 000000000C015555555555556BFCAD524C9C413B6C002AAAAAAAAAAABC010000000000 000C012AAAAAAAAAAABBFCC8A0CE512956BC002AAAAAAAAAAABC010000000000000C01 0000000000000BFCDDDDDDDDDDDDCC002AAAAAAAAAAABC010000000000000C00AAAAAA AAAAAABBFCED097B425ED08C002AAAAAAAAAAABC010000000000000C00555555555555 6BFCF623A67EAC2EFC002AAAAAAAAAAABC010000000000000C000000000000001BFCF9 2C5F92C5F91C002AAAAAAAAAAABC010000000000000BFF5555555555558BFCF623A67E AC2EEC002AAAAAAAAAAABC010000000000000BFE555555555555BBFCED097B425ED08C 002AAAAAAAAAAABC010000000000000BCC8000000000000BFCDDDDDDDDDDDDCC002AAA AAAAAAAABC0100000000000003FE555555555554FBFCC8A0CE512956CC002AAAAAAAAA AABC0100000000000003FF5555555555552BFCAD524C9C413B7C002AAAAAAAAAAABC01 00000000000003FFFFFFFFFFFFFFCBFC8BF258BF258BEC002AAAAAAAAAAABC01000000 00000004005555555555553BFC6480F2B9D6480C002AAAAAAAAAAABC01000000000000 0400AAAAAAAAAAAA8BFC36FE1A8C536FEC002AAAAAAAAAAABC010000000000000400FF FFFFFFFFFFDBFC0369D0369D037C002AAAAAAAAAAABC0100000000000004012AAAAAAA AAAA9BFB9388277166055C002AAAAAAAAAAABC0100000000000004015555555555554B FB1419CA252ADB3C002AAAAAAAAAAABC0100000000000004017FFFFFFFFFFFFBFA1111 111111111C002AAAAAAAAAAABC010000000000000401AAAAAAAAAAAAA3F6E573AC901E 5A6C002AAAAAAAAAAABC010000000000000401D5555555555553FA66054F43E32D7C00 2AAAAAAAAAAABC01000000000000040200000000000003FB62FC962FC9636C002AAAAA AAAAAABC01000000000000040215555555555553FC0F8CB487042C1C002AAAAAAAAAAA BC0100000000000004022AAAAAAAAAAAA3FC73AC901E573ACC002AAAAAAAAAAABC0100 000000000004023FFFFFFFFFFFF3FCDDDDDDDDDDDDDC002AAAAAAAAAAABC00AAAAAAAA AAAABC024000000000000BFA6C16C16C16C12C002AAAAAAAAAAABC00AAAAAAAAAAAABC 022AAAAAAAAAAABBFB419CA252ADB30C002AAAAAAAAAAABC00AAAAAAAAAAAABC021555 555555556BFBC10AFF9EE8DD6C002AAAAAAAAAAABC00AAAAAAAAAAAABC020000000000 001BFC1A2B3C4D5E6F6C002AAAAAAAAAAABC00AAAAAAAAAAAABC01D555555555557BFC 4DBF86A314DBEC002AAAAAAAAAAABC00AAAAAAAAAAAABC01AAAAAAAAAAAACBFC7B425E D097B42C002AAAAAAAAAAABC00AAAAAAAAAAAABC018000000000001BFCA2B3C4D5E6F8 0C002AAAAAAAAAAABC00AAAAAAAAAAAABC015555555555556BFCC413B8B302A78C002A AAAAAAAAAABC00AAAAAAAAAAAABC012AAAAAAAAAAABBFCDF623A67EAC2DC002AAAAAAA AAAABC00AAAAAAAAAAAABC010000000000000BFCF49F49F49F49EC002AAAAAAAAAAABC 00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD01E573AC901E5C002AAAAAAAAAAABC00AAAA AAAAAAAABC005555555555556BFD0672894AB6CD8C002AAAAAAAAAAABC00AAAAAAAAAA AABC000000000000001BFD07F6E5D4C3B2AC002AAAAAAAAAAABC00AAAAAAAAAAAABBFF 5555555555558BFD0672894AB6CD9C002AAAAAAAAAAABC00AAAAAAAAAAAABBFE555555 555555BBFD01E573AC901E6C002AAAAAAAAAAABC00AAAAAAAAAAAABBCC800000000000 0BFCF49F49F49F49FC002AAAAAAAAAAABC00AAAAAAAAAAAAB3FE555555555554FBFCDF 623A67EAC2FC002AAAAAAAAAAABC00AAAAAAAAAAAAB3FF5555555555552BFCC413B8B3 02A7AC002AAAAAAAAAAABC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFCA2B3C4D5E6F81C 002AAAAAAAAAAABC00AAAAAAAAAAAAB4005555555555553BFC7B425ED097B43C002AAA AAAAAAAABC00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFC4DBF86A314DC1C002AAAAAAAAA AABC00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFC1A2B3C4D5E6FAC002AAAAAAAAAAABC00 AAAAAAAAAAAAB4012AAAAAAAAAAA9BFBC10AFF9EE8DDBC002AAAAAAAAAAABC00AAAAAA AAAAAAB4015555555555554BFB419CA252ADB39C002AAAAAAAAAAABC00AAAAAAAAAAAA B4017FFFFFFFFFFFFBFA6C16C16C16C1DC002AAAAAAAAAAABC00AAAAAAAAAAAAB401AA AAAAAAAAAAABF7E573AC901E58DC002AAAAAAAAAAABC00AAAAAAAAAAAAB401D5555555 555553FA0AFF9EE8DD7CBC002AAAAAAAAAAABC00AAAAAAAAAAAAB40200000000000003 FB3579BE02468AEC002AAAAAAAAAAABC00AAAAAAAAAAAAB40215555555555553FBF196 90E0857FCC002AAAAAAAAAAABC00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FC5CEB240795 CE9C002AAAAAAAAAAABC00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FCC71C71C71C71AC00 2AAAAAAAAAAABC005555555555556C024000000000000BFAA2B3C4D5E6F7AC002AAAAA AAAAAABC005555555555556C022AAAAAAAAAAABBFB5CEB240795CE4C002AAAAAAAAAAA BC005555555555556C021555555555556BFBDC598153D0F86C002AAAAAAAAAAABC0055 55555555556C020000000000001BFC27D27D27D27CEC002AAAAAAAAAAABC0055555555 55556C01D555555555557BFC5B66C77D88E96C002AAAAAAAAAAABC005555555555556C 01AAAAAAAAAAAACBFC88E99FAB0BC1AC002AAAAAAAAAAABC005555555555556C018000 000000001BFCB05B05B05B058C002AAAAAAAAAAABC005555555555556C015555555555 556BFCD1BAF98D76B52C002AAAAAAAAAAABC005555555555556C012AAAAAAAAAAABBFC ED097B425ED07C002AAAAAAAAAAABC005555555555556C010000000000000BFD012345 6789ABCC002AAAAAAAAAAABC005555555555556C00AAAAAAAAAAAABBFD08B91419CA25 2C002AAAAAAAAAAABC005555555555556C005555555555556BFD0D4629B7F0D45C002A AAAAAAAAAABC005555555555556C000000000000001BFD0ECA8641FDB96C002AAAAAAA AAAABC005555555555556BFF5555555555558BFD0D4629B7F0D45C002AAAAAAAAAAABC 005555555555556BFE555555555555BBFD08B91419CA252C002AAAAAAAAAAABC005555 555555556BCC8000000000000BFD0123456789ABCC002AAAAAAAAAAABC005555555555 5563FE555555555554FBFCED097B425ED08C002AAAAAAAAAAABC0055555555555563FF 5555555555552BFCD1BAF98D76B53C002AAAAAAAAAAABC0055555555555563FFFFFFFF FFFFFFCBFCB05B05B05B05AC002AAAAAAAAAAABC005555555555556400555555555555 3BFC88E99FAB0BC1CC002AAAAAAAAAAABC005555555555556400AAAAAAAAAAAA8BFC5B 66C77D88E9AC002AAAAAAAAAAABC005555555555556400FFFFFFFFFFFFDBFC27D27D27 D27D3C002AAAAAAAAAAABC0055555555555564012AAAAAAAAAAA9BFBDC598153D0F8DC 002AAAAAAAAAAABC0055555555555564015555555555554BFB5CEB240795CEBC002AAA AAAAAAAABC0055555555555564017FFFFFFFFFFFFBFAA2B3C4D5E6F81C002AAAAAAAAA AABC005555555555556401AAAAAAAAAAAAABF8CD2DE3EF50056C002AAAAAAAAAAABC00 5555555555556401D5555555555553F9A8C536FE1A8CEC002AAAAAAAAAAABC00555555 555555640200000000000003FB1A2B3C4D5E6FEC002AAAAAAAAAAABC00555555555555 640215555555555553FBD6480F2B9D64AC002AAAAAAAAAAABC0055555555555564022A AAAAAAAAAAA3FC4F43E32D21C10C002AAAAAAAAAAABC0055555555555564023FFFFFFF FFFFF3FCB97530ECA8641C002AAAAAAAAAAABC000000000000001C024000000000000B FAB4E81B4E81B4AC002AAAAAAAAAAABC000000000000001C022AAAAAAAAAAABBFB6605 4F43E32CCC002AAAAAAAAAAABC000000000000001C021555555555556BFBE573AC901E 56EC002AAAAAAAAAAABC000000000000001C020000000000001BFC2C5F92C5F92C2C00 2AAAAAAAAAAABC000000000000001C01D555555555557BFC5FF3DD1BAF98AC002AAAAA AAAAAABC000000000000001C01AAAAAAAAAAAACBFC8D76B5493270EC002AAAAAAAAAAA BC000000000000001C018000000000001BFCB4E81B4E81B4CC002AAAAAAAAAAABC0000 00000000001C015555555555556BFCD6480F2B9D646C002AAAAAAAAAAABC0000000000 00001C012AAAAAAAAAAABBFCF19690E0857FBC002AAAAAAAAAAABC000000000000001C 010000000000000BFD0369D0369D036C002AAAAAAAAAAABC000000000000001C00AAAA AAAAAAAABBFD0AFF9EE8DD7CCC002AAAAAAAAAAABC000000000000001C005555555555 556BFD0F8CB487042BFC002AAAAAAAAAAABC000000000000001C000000000000001BFD 1111111111110C002AAAAAAAAAAABC000000000000001BFF5555555555558BFD0F8CB4 87042BFC002AAAAAAAAAAABC000000000000001BFE555555555555BBFD0AFF9EE8DD7C CC002AAAAAAAAAAABC000000000000001BCC8000000000000BFD0369D0369D036C002A AAAAAAAAAABC0000000000000013FE555555555554FBFCF19690E0857FCC002AAAAAAA AAAABC0000000000000013FF5555555555552BFCD6480F2B9D647C002AAAAAAAAAAABC 0000000000000013FFFFFFFFFFFFFFCBFCB4E81B4E81B4EC002AAAAAAAAAAABC000000 0000000014005555555555553BFC8D76B54932710C002AAAAAAAAAAABC000000000000 001400AAAAAAAAAAAA8BFC5FF3DD1BAF98EC002AAAAAAAAAAABC000000000000001400 FFFFFFFFFFFFDBFC2C5F92C5F92C7C002AAAAAAAAAAABC0000000000000014012AAAAA AAAAAA9BFBE573AC901E575C002AAAAAAAAAAABC000000000000001401555555555555 4BFB66054F43E32D3C002AAAAAAAAAAABC0000000000000014017FFFFFFFFFFFFBFAB4 E81B4E81B51C002AAAAAAAAAAABC000000000000001401AAAAAAAAAAAAABF90AFF9EE8 DD7CBC002AAAAAAAAAAABC000000000000001401D5555555555553F9845C8A0CE512EC 002AAAAAAAAAAABC00000000000000140200000000000003FB1111111111116C002AAA AAAAAAAABC00000000000000140215555555555553FBCD2DE3EF50062C002AAAAAAAAA AABC0000000000000014022AAAAAAAAAAAA3FC4AB6CD8EFB11CC002AAAAAAAAAAABC00 00000000000014023FFFFFFFFFFFF3FCB4E81B4E81B4DC002AAAAAAAAAAABBFF555555 5555558C024000000000000BFAA2B3C4D5E6F82C002AAAAAAAAAAABBFF555555555555 8C022AAAAAAAAAAABBFB5CEB240795CE8C002AAAAAAAAAAABBFF5555555555558C0215 55555555556BFBDC598153D0F8AC002AAAAAAAAAAABBFF5555555555558C0200000000 00001BFC27D27D27D27D0C002AAAAAAAAAAABBFF5555555555558C01D555555555557B FC5B66C77D88E98C002AAAAAAAAAAABBFF5555555555558C01AAAAAAAAAAAACBFC88E9 9FAB0BC1CC002AAAAAAAAAAABBFF5555555555558C018000000000001BFCB05B05B05B 05AC002AAAAAAAAAAABBFF5555555555558C015555555555556BFCD1BAF98D76B54C00 2AAAAAAAAAAABBFF5555555555558C012AAAAAAAAAAABBFCED097B425ED09C002AAAAA AAAAAABBFF5555555555558C010000000000000BFD0123456789ABDC002AAAAAAAAAAA BBFF5555555555558C00AAAAAAAAAAAABBFD08B91419CA253C002AAAAAAAAAAABBFF55 55555555558C005555555555556BFD0D4629B7F0D46C002AAAAAAAAAAABBFF55555555 55558C000000000000001BFD0ECA8641FDB97C002AAAAAAAAAAABBFF5555555555558B FF5555555555558BFD0D4629B7F0D46C002AAAAAAAAAAABBFF5555555555558BFE5555 55555555BBFD08B91419CA253C002AAAAAAAAAAABBFF5555555555558BCC8000000000 000BFD0123456789ABDC002AAAAAAAAAAABBFF55555555555583FE555555555554FBFC ED097B425ED0AC002AAAAAAAAAAABBFF55555555555583FF5555555555552BFCD1BAF9 8D76B55C002AAAAAAAAAAABBFF55555555555583FFFFFFFFFFFFFFCBFCB05B05B05B05 CC002AAAAAAAAAAABBFF55555555555584005555555555553BFC88E99FAB0BC1EC002A AAAAAAAAAABBFF5555555555558400AAAAAAAAAAAA8BFC5B66C77D88E9CC002AAAAAAA AAAABBFF5555555555558400FFFFFFFFFFFFDBFC27D27D27D27D5C002AAAAAAAAAAABB FF55555555555584012AAAAAAAAAAA9BFBDC598153D0F91C002AAAAAAAAAAABBFF5555 5555555584015555555555554BFB5CEB240795CEFC002AAAAAAAAAAABBFF5555555555 5584017FFFFFFFFFFFFBFAA2B3C4D5E6F89C002AAAAAAAAAAABBFF5555555555558401 AAAAAAAAAAAAABF8CD2DE3EF50076C002AAAAAAAAAAABBFF5555555555558401D55555 55555553F9A8C536FE1A8BEC002AAAAAAAAAAABBFF5555555555558402000000000000 03FB1A2B3C4D5E6FAC002AAAAAAAAAAABBFF555555555555840215555555555553FBD6 480F2B9D646C002AAAAAAAAAAABBFF55555555555584022AAAAAAAAAAAA3FC4F43E32D 21C0EC002AAAAAAAAAAABBFF55555555555584023FFFFFFFFFFFF3FCB97530ECA863FC 002AAAAAAAAAAABBFE555555555555BC024000000000000BFA6C16C16C16C12C002AAA AAAAAAAABBFE555555555555BC022AAAAAAAAAAABBFB419CA252ADB30C002AAAAAAAAA AABBFE555555555555BC021555555555556BFBC10AFF9EE8DD2C002AAAAAAAAAAABBFE 555555555555BC020000000000001BFC1A2B3C4D5E6F4C002AAAAAAAAAAABBFE555555 555555BC01D555555555557BFC4DBF86A314DBCC002AAAAAAAAAAABBFE555555555555 BC01AAAAAAAAAAAACBFC7B425ED097B40C002AAAAAAAAAAABBFE555555555555BC0180 00000000001BFCA2B3C4D5E6F7EC002AAAAAAAAAAABBFE555555555555BC0155555555 55556BFCC413B8B302A78C002AAAAAAAAAAABBFE555555555555BC012AAAAAAAAAAABB FCDF623A67EAC2DC002AAAAAAAAAAABBFE555555555555BC010000000000000BFCF49F 49F49F49EC002AAAAAAAAAAABBFE555555555555BC00AAAAAAAAAAAABBFD01E573AC90 1E5C002AAAAAAAAAAABBFE555555555555BC005555555555556BFD0672894AB6CD8C00 2AAAAAAAAAAABBFE555555555555BC000000000000001BFD07F6E5D4C3B29C002AAAAA AAAAAABBFE555555555555BBFF5555555555558BFD0672894AB6CD8C002AAAAAAAAAAA BBFE555555555555BBFE555555555555BBFD01E573AC901E5C002AAAAAAAAAAABBFE55 5555555555BBCC8000000000000BFCF49F49F49F49EC002AAAAAAAAAAABBFE55555555 5555B3FE555555555554FBFCDF623A67EAC2EC002AAAAAAAAAAABBFE555555555555B3 FF5555555555552BFCC413B8B302A79C002AAAAAAAAAAABBFE555555555555B3FFFFFF FFFFFFFFCBFCA2B3C4D5E6F80C002AAAAAAAAAAABBFE555555555555B4005555555555 553BFC7B425ED097B42C002AAAAAAAAAAABBFE555555555555B400AAAAAAAAAAAA8BFC 4DBF86A314DC0C002AAAAAAAAAAABBFE555555555555B400FFFFFFFFFFFFDBFC1A2B3C 4D5E6F9C002AAAAAAAAAAABBFE555555555555B4012AAAAAAAAAAA9BFBC10AFF9EE8DD 9C002AAAAAAAAAAABBFE555555555555B4015555555555554BFB419CA252ADB37C002A AAAAAAAAAABBFE555555555555B4017FFFFFFFFFFFFBFA6C16C16C16C19C002AAAAAAA AAAABBFE555555555555B401AAAAAAAAAAAAABF7E573AC901E56DC002AAAAAAAAAAABB FE555555555555B401D5555555555553FA0AFF9EE8DD7CFC002AAAAAAAAAAABBFE5555 55555555B40200000000000003FB3579BE02468B2C002AAAAAAAAAAABBFE5555555555 55B40215555555555553FBF19690E0857FEC002AAAAAAAAAAABBFE555555555555B402 2AAAAAAAAAAAA3FC5CEB240795CEAC002AAAAAAAAAAABBFE555555555555B4023FFFFF FFFFFFF3FCC71C71C71C71BC002AAAAAAAAAAABBCC8000000000000C02400000000000 0BFA111111111110AC002AAAAAAAAAAABBCC8000000000000C022AAAAAAAAAAABBFB14 19CA252ADACC002AAAAAAAAAAABBCC8000000000000C021555555555556BFB93882771 66052C002AAAAAAAAAAABBCC8000000000000C020000000000001BFC0369D0369D034C 002AAAAAAAAAAABBCC8000000000000C01D555555555557BFC36FE1A8C536FCC002AAA AAAAAAAABBCC8000000000000C01AAAAAAAAAAAACBFC6480F2B9D6480C002AAAAAAAAA AABBCC8000000000000C018000000000001BFC8BF258BF258BEC002AAAAAAAAAAABBCC 8000000000000C015555555555556BFCAD524C9C413B6C002AAAAAAAAAAABBCC800000 0000000C012AAAAAAAAAAABBFCC8A0CE512956BC002AAAAAAAAAAABBCC800000000000 0C010000000000000BFCDDDDDDDDDDDDCC002AAAAAAAAAAABBCC8000000000000C00AA AAAAAAAAAABBFCED097B425ED08C002AAAAAAAAAAABBCC8000000000000C0055555555 55556BFCF623A67EAC2EFC002AAAAAAAAAAABBCC8000000000000C000000000000001B FCF92C5F92C5F93C002AAAAAAAAAAABBCC8000000000000BFF5555555555558BFCF623 A67EAC2F0C002AAAAAAAAAAABBCC8000000000000BFE555555555555BBFCED097B425E D09C002AAAAAAAAAAABBCC8000000000000BCC8000000000000BFCDDDDDDDDDDDDDC00 2AAAAAAAAAAABBCC80000000000003FE555555555554FBFCC8A0CE512956DC002AAAAA AAAAAABBCC80000000000003FF5555555555552BFCAD524C9C413B8C002AAAAAAAAAAA BBCC80000000000003FFFFFFFFFFFFFFCBFC8BF258BF258BFC002AAAAAAAAAAABBCC80 000000000004005555555555553BFC6480F2B9D6481C002AAAAAAAAAAABBCC80000000 00000400AAAAAAAAAAAA8BFC36FE1A8C536FFC002AAAAAAAAAAABBCC80000000000004 00FFFFFFFFFFFFDBFC0369D0369D038C002AAAAAAAAAAABBCC80000000000004012AAA AAAAAAAA9BFB9388277166057C002AAAAAAAAAAABBCC80000000000004015555555555 554BFB1419CA252ADB5C002AAAAAAAAAAABBCC80000000000004017FFFFFFFFFFFFBFA 1111111111115C002AAAAAAAAAAABBCC8000000000000401AAAAAAAAAAAAA3F6E573AC 901E566C002AAAAAAAAAAABBCC8000000000000401D5555555555553FA66054F43E32D 3C002AAAAAAAAAAABBCC800000000000040200000000000003FB62FC962FC9632C002A AAAAAAAAAABBCC800000000000040215555555555553FC0F8CB487042C0C002AAAAAAA AAAABBCC80000000000004022AAAAAAAAAAAA3FC73AC901E573ABC002AAAAAAAAAAABB CC80000000000004023FFFFFFFFFFFF3FCDDDDDDDDDDDDCC002AAAAAAAAAAAB3FE5555 55555554FC024000000000000BF923456789ABCE4C002AAAAAAAAAAAB3FE5555555555 54FC022AAAAAAAAAAABBFAA8C536FE1A8C0C002AAAAAAAAAAAB3FE555555555554FC02 1555555555556BFB53D0F8CB48702C002AAAAAAAAAAAB3FE555555555554FC02000000 0000001BFBC71C71C71C717C002AAAAAAAAAAAB3FE555555555554FC01D55555555555 7BFC1722833944A54C002AAAAAAAAAAAB3FE555555555554FC01AAAAAAAAAAAACBFC44 A55B66C77D8C002AAAAAAAAAAAB3FE555555555554FC018000000000001BFC6C16C16C 16C16C002AAAAAAAAAAAB3FE555555555554FC015555555555556BFC8D76B54932710C 002AAAAAAAAAAAB3FE555555555554FC012AAAAAAAAAAABBFCA8C536FE1A8C5C002AAA AAAAAAAAB3FE555555555554FC010000000000000BFCBE02468ACF136C002AAAAAAAAA AAB3FE555555555554FC00AAAAAAAAAAAABBFCCD2DE3EF50062C002AAAAAAAAAAAB3FE 555555555554FC005555555555556BFCD6480F2B9D649C002AAAAAAAAAAAB3FE555555 555554FC000000000000001BFCD950C83FB72EBC002AAAAAAAAAAAB3FE555555555554 FBFF5555555555558BFCD6480F2B9D648C002AAAAAAAAAAAB3FE555555555554FBFE55 5555555555BBFCCD2DE3EF50062C002AAAAAAAAAAAB3FE555555555554FBCC80000000 00000BFCBE02468ACF136C002AAAAAAAAAAAB3FE555555555554F3FE555555555554FB FCA8C536FE1A8C6C002AAAAAAAAAAAB3FE555555555554F3FF5555555555552BFC8D76 B54932711C002AAAAAAAAAAAB3FE555555555554F3FFFFFFFFFFFFFFCBFC6C16C16C16 C18C002AAAAAAAAAAAB3FE555555555554F4005555555555553BFC44A55B66C77DAC00 2AAAAAAAAAAAB3FE555555555554F400AAAAAAAAAAAA8BFC1722833944A58C002AAAAA AAAAAAB3FE555555555554F400FFFFFFFFFFFFDBFBC71C71C71C721C002AAAAAAAAAAA B3FE555555555554F4012AAAAAAAAAAA9BFB53D0F8CB48709C002AAAAAAAAAAAB3FE55 5555555554F4015555555555554BFAA8C536FE1A8CEC002AAAAAAAAAAAB3FE55555555 5554F4017FFFFFFFFFFFFBF923456789ABCF2C002AAAAAAAAAAAB3FE555555555554F4 01AAAAAAAAAAAAA3F93B8B302A7A1E5C002AAAAAAAAAAAB3FE555555555554F401D555 5555555553FAE573AC901E571C002AAAAAAAAAAAB3FE555555555554F4020000000000 0003FBA2B3C4D5E6F81C002AAAAAAAAAAAB3FE555555555554F40215555555555553FC 2F684BDA12F67C002AAAAAAAAAAAB3FE555555555554F4022AAAAAAAAAAAA3FC938827 7166052C002AAAAAAAAAAAB3FE555555555554F4023FFFFFFFFFFFF3FCFDB97530ECA8 3C002AAAAAAAAAAAB3FF5555555555552C0240000000000003F623456789ABCDCC002A AAAAAAAAAAB3FF5555555555552C022AAAAAAAAAAABBFA04EE2CC0A9E80C002AAAAAAA AAAAB3FF5555555555552C021555555555556BFB01E573AC901E2C002AAAAAAAAAAAB3 FF5555555555552C020000000000001BFB7530ECA8641F7C002AAAAAAAAAAAB3FF5555 555555552C01D555555555557BFBDC598153D0F88C002AAAAAAAAAAAB3FF5555555555 552C01AAAAAAAAAAAACBFC1BAF98D76B548C002AAAAAAAAAAAB3FF5555555555552C01 8000000000001BFC4320FEDCBA986C002AAAAAAAAAAAB3FF5555555555552C01555555 5555556BFC6480F2B9D6480C002AAAAAAAAAAAB3FF5555555555552C012AAAAAAAAAAA BBFC7FCF746EBE635C002AAAAAAAAAAAB3FF5555555555552C010000000000000BFC95 0C83FB72EA6C002AAAAAAAAAAAB3FF5555555555552C00AAAAAAAAAAAABBFCA438215F F3DD2C002AAAAAAAAAAAB3FF5555555555552C005555555555556BFCAD524C9C413B9C 002AAAAAAAAAAAB3FF5555555555552C000000000000001BFCB05B05B05B05BC002AAA AAAAAAAAB3FF5555555555552BFF5555555555558BFCAD524C9C413B8C002AAAAAAAAA AAB3FF5555555555552BFE555555555555BBFCA438215FF3DD2C002AAAAAAAAAAAB3FF 5555555555552BCC8000000000000BFC950C83FB72EA6C002AAAAAAAAAAAB3FF555555 55555523FE555555555554FBFC7FCF746EBE636C002AAAAAAAAAAAB3FF555555555555 23FF5555555555552BFC6480F2B9D6481C002AAAAAAAAAAAB3FF55555555555523FFFF FFFFFFFFFFCBFC4320FEDCBA988C002AAAAAAAAAAAB3FF555555555555240055555555 55553BFC1BAF98D76B54AC002AAAAAAAAAAAB3FF5555555555552400AAAAAAAAAAAA8B FBDC598153D0F8FC002AAAAAAAAAAAB3FF5555555555552400FFFFFFFFFFFFDBFB7530 ECA864201C002AAAAAAAAAAAB3FF55555555555524012AAAAAAAAAAA9BFB01E573AC90 1E9C002AAAAAAAAAAAB3FF55555555555524015555555555554BFA04EE2CC0A9E8EC00 2AAAAAAAAAAAB3FF55555555555524017FFFFFFFFFFFF3F623456789ABC6FC002AAAAA AAAAAAB3FF5555555555552401AAAAAAAAAAAAA3FA419CA252ADB34C002AAAAAAAAAAA B3FF5555555555552401D5555555555553FB44A55B66C77D8C002AAAAAAAAAAAB3FF55 5555555555240200000000000003FBF49F49F49F4A1C002AAAAAAAAAAAB3FF55555555 5555240215555555555553FC585E0E696F1F7C002AAAAAAAAAAAB3FF55555555555524 022AAAAAAAAAAAA3FCBC7DEA00C22E2C002AAAAAAAAAAAB3FF55555555555524023FFF FFFFFFFFF3FD13579BE024689C002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC024000000000 0003F9B4E81B4E81B4CC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC022AAAAAAAAAAABBF7 E573AC901E53EC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC021555555555556BFA3B8B30 2A7A1EBC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC020000000000001BFB111111111110 BC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC01D555555555557BFB7839A5BC7DE9CC002A AAAAAAAAAAB3FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFBD33F5617839A4C002AAAAAAA AAAAB3FFFFFFFFFFFFFFCC018000000000001BFC1111111111110C002AAAAAAAAAAAB3 FFFFFFFFFFFFFFCC015555555555556BFC327104EE2CC0AC002AAAAAAAAAAAB3FFFFFF FFFFFFFFCC012AAAAAAAAAAABBFC4DBF86A314DBFC002AAAAAAAAAAAB3FFFFFFFFFFFF FFCC010000000000000BFC62FC962FC9630C002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC00 AAAAAAAAAAAABBFC722833944A55CC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC00555555 5555556BFC7B425ED097B43C002AAAAAAAAAAAB3FFFFFFFFFFFFFFCC00000000000000 1BFC7E4B17E4B17E5C002AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFF5555555555558BFC7B 425ED097B42C002AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFE555555555555BBFC72283394 4A55CC002AAAAAAAAAAAB3FFFFFFFFFFFFFFCBCC8000000000000BFC62FC962FC9630C 002AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FE555555555554FBFC4DBF86A314DC0C002AAA AAAAAAAAB3FFFFFFFFFFFFFFC3FF5555555555552BFC327104EE2CC0BC002AAAAAAAAA AAB3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFC1111111111112C002AAAAAAAAAAAB3FF FFFFFFFFFFFFC4005555555555553BFBD33F5617839A9C002AAAAAAAAAAAB3FFFFFFFF FFFFFFC400AAAAAAAAAAAA8BFB7839A5BC7DEA3C002AAAAAAAAAAAB3FFFFFFFFFFFFFF C400FFFFFFFFFFFFDBFB1111111111115C002AAAAAAAAAAAB3FFFFFFFFFFFFFFC4012A AAAAAAAAAA9BFA3B8B302A7A1FAC002AAAAAAAAAAAB3FFFFFFFFFFFFFFC40155555555 55554BF7E573AC901E5B3C002AAAAAAAAAAAB3FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3 F9B4E81B4E81B3EC002AAAAAAAAAAAB3FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FB04EE 2CC0A9E86C002AAAAAAAAAAAB3FFFFFFFFFFFFFFC401D5555555555553FBA8C536FE1A 8C4C002AAAAAAAAAAAB3FFFFFFFFFFFFFFC40200000000000003FC2C5F92C5F92C6C00 2AAAAAAAAAAAB3FFFFFFFFFFFFFFC40215555555555553FC8A6DFC3518A6DC002AAAAA AAAAAAB3FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FCEE8DD7CC6BB58C002AAAAAAAAAAA B3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD2C5F92C5F92C4C002AAAAAAAAAAAB40055 55555555553C0240000000000003FAC71C71C71C71EC002AAAAAAAAAAAB40055555555 55553C022AAAAAAAAAAAB3F95FF3DD1BAF9A0C002AAAAAAAAAAAB4005555555555553C 021555555555556BF83B8B302A7A1ECC002AAAAAAAAAAAB4005555555555553C020000 000000001BFA3579BE02468A6C002AAAAAAAAAAAB4005555555555553C01D555555555 557BFB01E573AC901E2C002AAAAAAAAAAAB4005555555555553C01AAAAAAAAAAAACBFB 5CEB240795CEAC002AAAAAAAAAAAB4005555555555553C018000000000001BFBABCDF0 1234566C002AAAAAAAAAAAB4005555555555553C015555555555556BFBEE8DD7CC6BB5 BC002AAAAAAAAAAAB4005555555555553C012AAAAAAAAAAABBFC12956D9B1DF62C002A AAAAAAAAAAB4005555555555553C010000000000000BFC27D27D27D27D3C002AAAAAAA AAAAB4005555555555553C00AAAAAAAAAAAABBFC36FE1A8C536FFC002AAAAAAAAAAAB4 005555555555553C005555555555556BFC401845C8A0CE6C002AAAAAAAAAAAB4005555 555555553C000000000000001BFC4320FEDCBA988C002AAAAAAAAAAAB4005555555555 553BFF5555555555558BFC401845C8A0CE5C002AAAAAAAAAAAB4005555555555553BFE 555555555555BBFC36FE1A8C536FFC002AAAAAAAAAAAB4005555555555553BCC800000 0000000BFC27D27D27D27D3C002AAAAAAAAAAAB40055555555555533FE555555555554 FBFC12956D9B1DF63C002AAAAAAAAAAAB40055555555555533FF5555555555552BFBEE 8DD7CC6BB5CC002AAAAAAAAAAAB40055555555555533FFFFFFFFFFFFFFCBFBABCDF012 3456AC002AAAAAAAAAAAB40055555555555534005555555555553BFB5CEB240795CEEC 002AAAAAAAAAAAB4005555555555553400AAAAAAAAAAAA8BFB01E573AC901E9C002AAA AAAAAAAAB4005555555555553400FFFFFFFFFFFFDBFA3579BE02468B6C002AAAAAAAAA AAB40055555555555534012AAAAAAAAAAA9BF83B8B302A7A21AC002AAAAAAAAAAAB400 555555555555340155555555555543F95FF3DD1BAF97BC002AAAAAAAAAAAB400555555 55555534017FFFFFFFFFFFF3FAC71C71C71C713C002AAAAAAAAAAAB400555555555555 3401AAAAAAAAAAAAA3FB7B425ED097B40C002AAAAAAAAAAAB4005555555555553401D5 555555555553FC0F8CB487042BFC002AAAAAAAAAAAB400555555555555340200000000 000003FC6789ABCDF0124C002AAAAAAAAAAAB400555555555555340215555555555553 FCC598153D0F8CAC002AAAAAAAAAAAB40055555555555534022AAAAAAAAAAAA3FD14DB F86A314DAC002AAAAAAAAAAAB40055555555555534023FFFFFFFFFFFF3FD49F49F49F4 9F3C002AAAAAAAAAAAB400AAAAAAAAAAAA8C0240000000000003FB6C16C16C16C17C00 2AAAAAAAAAAAB400AAAAAAAAAAAA8C022AAAAAAAAAAAB3FAC10AFF9EE8DDCC002AAAAA AAAAAAB400AAAAAAAAAAAA8C0215555555555563F9845C8A0CE5132C002AAAAAAAAAAA B400AAAAAAAAAAAA8C020000000000001BF723456789ABC93C002AAAAAAAAAAAB400AA AAAAAAAAAA8C01D555555555557BF9E573AC901E567C002AAAAAAAAAAAB400AAAAAAAA AAAA8C01AAAAAAAAAAAACBFAA8C536FE1A8C3C002AAAAAAAAAAAB400AAAAAAAAAAAA8C 018000000000001BFB23456789ABCDEC002AAAAAAAAAAAB400AAAAAAAAAAAA8C015555 555555556BFB66054F43E32D3C002AAAAAAAAAAAB400AAAAAAAAAAAA8C012AAAAAAAAA AABBFB9CA252ADB363DC002AAAAAAAAAAAB400AAAAAAAAAAAA8C010000000000000BFB C71C71C71C71EC002AAAAAAAAAAAB400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFBE573AC 901E575C002AAAAAAAAAAAB400AAAAAAAAAAAA8C005555555555556BFBF7A80308B914 3C002AAAAAAAAAAAB400AAAAAAAAAAAA8C000000000000001BFBFDB97530ECA88C002A AAAAAAAAAAB400AAAAAAAAAAAA8BFF5555555555558BFBF7A80308B9143C002AAAAAAA AAAAB400AAAAAAAAAAAA8BFE555555555555BBFBE573AC901E576C002AAAAAAAAAAAB4 00AAAAAAAAAAAA8BCC8000000000000BFBC71C71C71C71FC002AAAAAAAAAAAB400AAAA AAAAAAAA83FE555555555554FBFB9CA252ADB363FC002AAAAAAAAAAAB400AAAAAAAAAA AA83FF5555555555552BFB66054F43E32D5C002AAAAAAAAAAAB400AAAAAAAAAAAA83FF FFFFFFFFFFFFCBFB23456789ABCE2C002AAAAAAAAAAAB400AAAAAAAAAAAA8400555555 5555553BFAA8C536FE1A8CCC002AAAAAAAAAAAB400AAAAAAAAAAAA8400AAAAAAAAAAAA 8BF9E573AC901E586C002AAAAAAAAAAAB400AAAAAAAAAAAA8400FFFFFFFFFFFFDBF723 456789ABD31C002AAAAAAAAAAAB400AAAAAAAAAAAA84012AAAAAAAAAAA93F9845C8A0C E5113C002AAAAAAAAAAAB400AAAAAAAAAAAA840155555555555543FAC10AFF9EE8DCEC 002AAAAAAAAAAAB400AAAAAAAAAAAA84017FFFFFFFFFFFF3FB6C16C16C16C12C002AAA AAAAAAAAB400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FC01E573AC901E4C002AAAAAAAAA AAB400AAAAAAAAAAAA8401D5555555555553FC53D0F8CB48703C002AAAAAAAAAAAB400 AAAAAAAAAAAA840200000000000003FCABCDF01234568C002AAAAAAAAAAAB400AAAAAA AAAAAA840215555555555553FD04EE2CC0A9E87C002AAAAAAAAAAAB400AAAAAAAAAAAA 84022AAAAAAAAAAAA3FD36FE1A8C536FCC002AAAAAAAAAAAB400AAAAAAAAAAAA84023F FFFFFFFFFFF3FD6C16C16C16C15C002AAAAAAAAAAAB400FFFFFFFFFFFFDC0240000000 000003FC0369D0369D035C002AAAAAAAAAAAB400FFFFFFFFFFFFDC022AAAAAAAAAAAB3 FB7B425ED097B44C002AAAAAAAAAAAB400FFFFFFFFFFFFDC0215555555555563FAF7A8 0308B9141C002AAAAAAAAAAAB400FFFFFFFFFFFFDC0200000000000013FA1111111111 116C002AAAAAAAAAAAB400FFFFFFFFFFFFDC01D5555555555573F80AFF9EE8DD7D2C00 2AAAAAAAAAAAB400FFFFFFFFFFFFDC01AAAAAAAAAAAACBF8CD2DE3EF5006EC002AAAAA AAAAAAB400FFFFFFFFFFFFDC018000000000001BFA1111111111113C002AAAAAAAAAAA B400FFFFFFFFFFFFDC015555555555556BFA9690E0857FCFAC002AAAAAAAAAAAB400FF FFFFFFFFFFDC012AAAAAAAAAAABBFB01E573AC901E7C002AAAAAAAAAAAB400FFFFFFFF FFFFDC010000000000000BFB2C5F92C5F92C8C002AAAAAAAAAAAB400FFFFFFFFFFFFDC 00AAAAAAAAAAAABBFB4AB6CD8EFB120C002AAAAAAAAAAAB400FFFFFFFFFFFFDC005555 555555556BFB5CEB240795CEEC002AAAAAAAAAAAB400FFFFFFFFFFFFDC000000000000 001BFB62FC962FC9633C002AAAAAAAAAAAB400FFFFFFFFFFFFDBFF5555555555558BFB 5CEB240795CEEC002AAAAAAAAAAAB400FFFFFFFFFFFFDBFE555555555555BBFB4AB6CD 8EFB121C002AAAAAAAAAAAB400FFFFFFFFFFFFDBCC8000000000000BFB2C5F92C5F92C AC002AAAAAAAAAAAB400FFFFFFFFFFFFD3FE555555555554FBFB01E573AC901EAC002A AAAAAAAAAAB400FFFFFFFFFFFFD3FF5555555555552BFA9690E0857FD00C002AAAAAAA AAAAB400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFA111111111111AC002AAAAAAAAAAAB4 00FFFFFFFFFFFFD4005555555555553BF8CD2DE3EF5008BC002AAAAAAAAAAAB400FFFF FFFFFFFFD400AAAAAAAAAAAA83F80AFF9EE8DD7A0C002AAAAAAAAAAAB400FFFFFFFFFF FFD400FFFFFFFFFFFFD3FA1111111111104C002AAAAAAAAAAAB400FFFFFFFFFFFFD401 2AAAAAAAAAAA93FAF7A80308B9134C002AAAAAAAAAAAB400FFFFFFFFFFFFD401555555 55555543FB7B425ED097B3CC002AAAAAAAAAAAB400FFFFFFFFFFFFD4017FFFFFFFFFFF F3FC0369D0369D033C002AAAAAAAAAAAB400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FC4F 43E32D21C0EC002AAAAAAAAAAAB400FFFFFFFFFFFFD401D5555555555553FCA12F684B DA12EC002AAAAAAAAAAAB400FFFFFFFFFFFFD40200000000000003FCF92C5F92C5F92C 002AAAAAAAAAAAB400FFFFFFFFFFFFD40215555555555553FD2B9D6480F2B9CC002AAA AAAAAAAAB400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD5DAD524C9C412C002AAAAAAAAA AAB400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FD92C5F92C5F92AC002AAAAAAAAAAAB401 2AAAAAAAAAAA9C0240000000000003FC59E26AF37C046C002AAAAAAAAAAAB4012AAAAA AAAAAA9C022AAAAAAAAAAAB3FC1419CA252ADB3C002AAAAAAAAAAAB4012AAAAAAAAAAA 9C0215555555555563FBA8C536FE1A8C2C002AAAAAAAAAAAB4012AAAAAAAAAAA9C0200 000000000013FB3579BE02468ADC002AAAAAAAAAAAB4012AAAAAAAAAAA9C01D5555555 555573FA9CA252ADB3639C002AAAAAAAAAAAB4012AAAAAAAAAAA9C01AAAAAAAAAAAAC3 F9CD2DE3EF50051C002AAAAAAAAAAAB4012AAAAAAAAAAA9C0180000000000013F82345 6789ABCCAC002AAAAAAAAAAAB4012AAAAAAAAAAA9C015555555555556BF7E573AC901E 5BEC002AAAAAAAAAAAB4012AAAAAAAAAAA9C012AAAAAAAAAAABBF953D0F8CB48718C00 2AAAAAAAAAAAB4012AAAAAAAAAAA9C010000000000000BF9FDB97530ECA9EC002AAAAA AAAAAAB4012AAAAAAAAAAA9C00AAAAAAAAAAAABBFA3B8B302A7A1FDC002AAAAAAAAAAA B4012AAAAAAAAAAA9C005555555555556BFA5FF3DD1BAF998C002AAAAAAAAAAAB4012A AAAAAAAAAA9C000000000000001BFA6C16C16C16C22C002AAAAAAAAAAAB4012AAAAAAA AAAA9BFF5555555555558BFA5FF3DD1BAF999C002AAAAAAAAAAAB4012AAAAAAAAAAA9B FE555555555555BBFA3B8B302A7A1FEC002AAAAAAAAAAAB4012AAAAAAAAAAA9BCC8000 000000000BF9FDB97530ECAA0C002AAAAAAAAAAAB4012AAAAAAAAAAA93FE5555555555 54FBF953D0F8CB4871EC002AAAAAAAAAAAB4012AAAAAAAAAAA93FF5555555555552BF7 E573AC901E5DFC002AAAAAAAAAAAB4012AAAAAAAAAAA93FFFFFFFFFFFFFFC3F8234567 89ABCA5C002AAAAAAAAAAAB4012AAAAAAAAAAA940055555555555533F9CD2DE3EF5004 2C002AAAAAAAAAAAB4012AAAAAAAAAAA9400AAAAAAAAAAAA83FA9CA252ADB362CC002A AAAAAAAAAAB4012AAAAAAAAAAA9400FFFFFFFFFFFFD3FB3579BE02468A4C002AAAAAAA AAAAB4012AAAAAAAAAAA94012AAAAAAAAAAA93FBA8C536FE1A8BCC002AAAAAAAAAAAB4 012AAAAAAAAAAA940155555555555543FC1419CA252ADAFC002AAAAAAAAAAAB4012AAA AAAAAAAA94017FFFFFFFFFFFF3FC59E26AF37C044C002AAAAAAAAAAAB4012AAAAAAAAA AA9401AAAAAAAAAAAAA3FCA5BC7DEA00C1FC002AAAAAAAAAAAB4012AAAAAAAAAAA9401 D5555555555553FCF7A80308B913FC002AAAAAAAAAAAB4012AAAAAAAAAAA9402000000 00000003FD27D27D27D27D2C002AAAAAAAAAAAB4012AAAAAAAAAAA9402155555555555 53FD56D9B1DF623A5C002AAAAAAAAAAAB4012AAAAAAAAAAA94022AAAAAAAAAAAA3FD88 E99FAB0BC1AC002AAAAAAAAAAAB4012AAAAAAAAAAA94023FFFFFFFFFFFF3FDBE02468A CF133C002AAAAAAAAAAAB4015555555555554C0240000000000003FCB97530ECA8640C 002AAAAAAAAAAAB4015555555555554C022AAAAAAAAAAAB3FC73AC901E573ACC002AAA AAAAAAAAB4015555555555554C0215555555555563FC33F5617839A5BC002AAAAAAAAA AAB4015555555555554C0200000000000013FBF49F49F49F4A0C002AAAAAAAAAAAB401 5555555555554C01D5555555555573FB8D76B5493270FC002AAAAAAAAAAAB401555555 5555554C01AAAAAAAAAAAAC3FB327104EE2CC08C002AAAAAAAAAAAB401555555555555 4C0180000000000013FAC71C71C71C719C002AAAAAAAAAAAB4015555555555554C0155 555555555563FA419CA252ADB2EC002AAAAAAAAAAAB4015555555555554C012AAAAAAA AAAAB3F9A8C536FE1A8B4C002AAAAAAAAAAAB4015555555555554C0100000000000003 F8FDB97530ECA60C002AAAAAAAAAAAB4015555555555554C00AAAAAAAAAAAAB3F80AFF 9EE8DD7A7C002AAAAAAAAAAAB4015555555555554C0055555555555563F6E573AC901E 4D9C002AAAAAAAAAAAB4015555555555554C0000000000000013F623456789ABC42C00 2AAAAAAAAAAAB4015555555555554BFF55555555555583F6E573AC901E4CFC002AAAAA AAAAAAB4015555555555554BFE555555555555B3F80AFF9EE8DD7A2C002AAAAAAAAAAA B4015555555555554BCC80000000000003F8FDB97530ECA5AC002AAAAAAAAAAAB40155 555555555543FE555555555554F3F9A8C536FE1A8AEC002AAAAAAAAAAAB40155555555 555543FF55555555555523FA419CA252ADB2AC002AAAAAAAAAAAB40155555555555543 FFFFFFFFFFFFFFC3FAC71C71C71C710C002AAAAAAAAAAAB40155555555555544005555 5555555533FB327104EE2CC04C002AAAAAAAAAAAB4015555555555554400AAAAAAAAAA AA83FB8D76B54932709C002AAAAAAAAAAAB4015555555555554400FFFFFFFFFFFFD3FB F49F49F49F497C002AAAAAAAAAAAB40155555555555544012AAAAAAAAAAA93FC33F561 7839A57C002AAAAAAAAAAAB401555555555555440155555555555543FC73AC901E573A 8C002AAAAAAAAAAAB40155555555555544017FFFFFFFFFFFF3FCB97530ECA863EC002A AAAAAAAAAAB4015555555555554401AAAAAAAAAAAAA3FD02A7A1F19690CC002AAAAAAA AAAAB4015555555555554401D5555555555553FD2B9D6480F2B9CC002AAAAAAAAAAAB4 01555555555555440200000000000003FD579BE02468ACEC002AAAAAAAAAAAB4015555 55555555440215555555555553FD86A314DBF86A1C002AAAAAAAAAAAB4015555555555 5544022AAAAAAAAAAAA3FDB8B302A7A1F17C002AAAAAAAAAAAB4015555555555554402 3FFFFFFFFFFFF3FDEDCBA9876542FC002AAAAAAAAAAAB4017FFFFFFFFFFFFC02400000 00000003FD1111111111110C002AAAAAAAAAAAB4017FFFFFFFFFFFFC022AAAAAAAAAAA B3FCDC598153D0F8DC002AAAAAAAAAAAB4017FFFFFFFFFFFFC0215555555555563FC9C A252ADB363CC002AAAAAAAAAAAB4017FFFFFFFFFFFFC0200000000000013FC62FC962F C9631C002AAAAAAAAAAAB4017FFFFFFFFFFFFC01D5555555555573FC2F684BDA12F68C 002AAAAAAAAAAAB4017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FC01E573AC901E5C002AAA AAAAAAAAB4017FFFFFFFFFFFFC0180000000000013FBB4E81B4E81B4DC002AAAAAAAAA AAB4017FFFFFFFFFFFFC0155555555555563FB722833944A558C002AAAAAAAAAAAB401 7FFFFFFFFFFFFC012AAAAAAAAAAAB3FB3B8B302A7A1EEC002AAAAAAAAAAAB4017FFFFF FFFFFFFC0100000000000003FB111111111110DC002AAAAAAAAAAAB4017FFFFFFFFFFF FC00AAAAAAAAAAAAB3FAE573AC901E56CC002AAAAAAAAAAAB4017FFFFFFFFFFFFC0055 555555555563FAC10AFF9EE8DD0C002AAAAAAAAAAAB4017FFFFFFFFFFFFC0000000000 000013FAB4E81B4E81B47C002AAAAAAAAAAAB4017FFFFFFFFFFFFBFF55555555555583 FAC10AFF9EE8DCFC002AAAAAAAAAAAB4017FFFFFFFFFFFFBFE555555555555B3FAE573 AC901E56BC002AAAAAAAAAAAB4017FFFFFFFFFFFFBCC80000000000003FB1111111111 10CC002AAAAAAAAAAAB4017FFFFFFFFFFFF3FE555555555554F3FB3B8B302A7A1ECC00 2AAAAAAAAAAAB4017FFFFFFFFFFFF3FF55555555555523FB722833944A556C002AAAAA AAAAAAB4017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FBB4E81B4E81B49C002AAAAAAAAAAA B4017FFFFFFFFFFFF40055555555555533FC01E573AC901E3C002AAAAAAAAAAAB4017F FFFFFFFFFFF400AAAAAAAAAAAA83FC2F684BDA12F65C002AAAAAAAAAAAB4017FFFFFFF FFFFF400FFFFFFFFFFFFD3FC62FC962FC962CC002AAAAAAAAAAAB4017FFFFFFFFFFFF4 012AAAAAAAAAAA93FC9CA252ADB3637C002AAAAAAAAAAAB4017FFFFFFFFFFFF4015555 5555555543FCDC598153D0F89C002AAAAAAAAAAAB4017FFFFFFFFFFFF4017FFFFFFFFF FFF3FD111111111110FC002AAAAAAAAAAAB4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD 36FE1A8C536FDC002AAAAAAAAAAAB4017FFFFFFFFFFFF401D5555555555553FD5FF3DD 1BAF98CC002AAAAAAAAAAAB4017FFFFFFFFFFFF40200000000000003FD8BF258BF258B EC002AAAAAAAAAAAB4017FFFFFFFFFFFF40215555555555553FDBAF98D76B5492C002A AAAAAAAAAAB4017FFFFFFFFFFFF4022AAAAAAAAAAAA3FDED097B425ED07C002AAAAAAA AAAAB4017FFFFFFFFFFFF4023FFFFFFFFFFFF3FE1111111111110C002AAAAAAAAAAAB4 01AAAAAAAAAAAAAC0240000000000003FD49F49F49F49F4C002AAAAAAAAAAAB401AAAA AAAAAAAAAC022AAAAAAAAAAAB3FD27104EE2CC0AAC002AAAAAAAAAAAB401AAAAAAAAAA AAAC0215555555555563FD0734B78FBD402C002AAAAAAAAAAAB401AAAAAAAAAAAAAC02 00000000000013FCD4C3B2A1907F9C002AAAAAAAAAAAB401AAAAAAAAAAAAAC01D55555 55555573FCA12F684BDA130C002AAAAAAAAAAAB401AAAAAAAAAAAAAC01AAAAAAAAAAAA C3FC73AC901E573ACC002AAAAAAAAAAAB401AAAAAAAAAAAAAC0180000000000013FC4C 3B2A1907F6FC002AAAAAAAAAAAB401AAAAAAAAAAAAAC0155555555555563FC2ADB363B EC474C002AAAAAAAAAAAB401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FC0F8CB487042BFC 002AAAAAAAAAAAB401AAAAAAAAAAAAAC0100000000000003FBF49F49F49F49EC002AAA AAAAAAAAB401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FBD6480F2B9D646C002AAAAAAAAA AAB401AAAAAAAAAAAAAC0055555555555563FBC413B8B302A78C002AAAAAAAAAAAB401 AAAAAAAAAAAAAC0000000000000013FBBE02468ACF133C002AAAAAAAAAAAB401AAAAAA AAAAAAABFF55555555555583FBC413B8B302A78C002AAAAAAAAAAAB401AAAAAAAAAAAA ABFE555555555555B3FBD6480F2B9D645C002AAAAAAAAAAAB401AAAAAAAAAAAAABCC80 000000000003FBF49F49F49F49CC002AAAAAAAAAAAB401AAAAAAAAAAAAA3FE55555555 5554F3FC0F8CB487042BEC002AAAAAAAAAAAB401AAAAAAAAAAAAA3FF55555555555523 FC2ADB363BEC473C002AAAAAAAAAAAB401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FC4C3B 2A1907F6DC002AAAAAAAAAAAB401AAAAAAAAAAAAA40055555555555533FC73AC901E57 3ABC002AAAAAAAAAAAB401AAAAAAAAAAAAA400AAAAAAAAAAAA83FCA12F684BDA12DC00 2AAAAAAAAAAAB401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FCD4C3B2A1907F4C002AAAAA AAAAAAB401AAAAAAAAAAAAA4012AAAAAAAAAAA93FD0734B78FBD400C002AAAAAAAAAAA B401AAAAAAAAAAAAA40155555555555543FD27104EE2CC0A9C002AAAAAAAAAAAB401AA AAAAAAAAAAA4017FFFFFFFFFFFF3FD49F49F49F49F3C002AAAAAAAAAAAB401AAAAAAAA AAAAA401AAAAAAAAAAAAA3FD6FE1A8C536FE1C002AAAAAAAAAAAB401AAAAAAAAAAAAA4 01D5555555555553FD98D76B5493270C002AAAAAAAAAAAB401AAAAAAAAAAAAA4020000 0000000003FDC4D5E6F8091A2C002AAAAAAAAAAAB401AAAAAAAAAAAAA4021555555555 5553FDF3DD1BAF98D76C002AAAAAAAAAAAB401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE 12F684BDA12F5C002AAAAAAAAAAAB401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE2D82D8 2D82D82C002AAAAAAAAAAAB401D555555555555C0240000000000003FD87654320FEDC CC002AAAAAAAAAAAB401D555555555555C022AAAAAAAAAAAB3FD6480F2B9D6482C002A AAAAAAAAAAB401D555555555555C0215555555555563FD44A55B66C77DAC002AAAAAAA AAAAB401D555555555555C0200000000000013FD27D27D27D27D4C002AAAAAAAAAAAB4 01D555555555555C01D5555555555573FD0E0857FCF7470C002AAAAAAAAAAAB401D555 555555555C01AAAAAAAAAAAAC3FCEE8DD7CC6BB5CC002AAAAAAAAAAAB401D555555555 555C0180000000000013FCC71C71C71C71EC002AAAAAAAAAAAB401D555555555555C01 55555555555563FCA5BC7DEA00C24C002AAAAAAAAAAAB401D555555555555C012AAAAA AAAAAAB3FC8A6DFC3518A6FC002AAAAAAAAAAAB401D555555555555C01000000000000 03FC7530ECA8641FEC002AAAAAAAAAAAB401D555555555555C00AAAAAAAAAAAAB3FC66 054F43E32D2C002AAAAAAAAAAAB401D555555555555C0055555555555563FC5CEB2407 95CEBC002AAAAAAAAAAAB401D555555555555C0000000000000013FC59E26AF37C049C 002AAAAAAAAAAAB401D555555555555BFF55555555555583FC5CEB240795CECC002AAA AAAAAAAAB401D555555555555BFE555555555555B3FC66054F43E32D2C002AAAAAAAAA AAB401D555555555555BCC80000000000003FC7530ECA8641FEC002AAAAAAAAAAAB401 D5555555555553FE555555555554F3FC8A6DFC3518A6EC002AAAAAAAAAAAB401D55555 55555553FF55555555555523FCA5BC7DEA00C23C002AAAAAAAAAAAB401D55555555555 53FFFFFFFFFFFFFFC3FCC71C71C71C71CC002AAAAAAAAAAAB401D55555555555540055 555555555533FCEE8DD7CC6BB5AC002AAAAAAAAAAAB401D555555555555400AAAAAAAA AAAA83FD0E0857FCF746EC002AAAAAAAAAAAB401D555555555555400FFFFFFFFFFFFD3 FD27D27D27D27D2C002AAAAAAAAAAAB401D5555555555554012AAAAAAAAAAA93FD44A5 5B66C77D8C002AAAAAAAAAAAB401D55555555555540155555555555543FD6480F2B9D6 481C002AAAAAAAAAAAB401D5555555555554017FFFFFFFFFFFF3FD87654320FEDCBC00 2AAAAAAAAAAAB401D555555555555401AAAAAAAAAAAAA3FDAD524C9C413B9C002AAAAA AAAAAAB401D555555555555401D5555555555553FDD6480F2B9D648C002AAAAAAAAAAA B401D55555555555540200000000000003FE0123456789ABDC002AAAAAAAAAAAB401D5 5555555555540215555555555553FE18A6DFC3518A7C002AAAAAAAAAAAB401D5555555 555554022AAAAAAAAAAAA3FE31AED6A9264E1C002AAAAAAAAAAAB401D5555555555554 023FFFFFFFFFFFF3FE4C3B2A1907F6EC002AAAAAAAAAAAB4020000000000000C024000 0000000003FDC962FC962FC97C002AAAAAAAAAAAB4020000000000000C022AAAAAAAAA AAB3FDA67EAC2F0734DC002AAAAAAAAAAAB4020000000000000C0215555555555563FD 86A314DBF86A5C002AAAAAAAAAAAB4020000000000000C0200000000000013FD69D036 9D0369FC002AAAAAAAAAAAB4020000000000000C01D5555555555573FD500611722833 BC002AAAAAAAAAAAB4020000000000000C01AAAAAAAAAAAAC3FD3944A55B66C79C002A AAAAAAAAAAB4020000000000000C0180000000000013FD258BF258BF25AC002AAAAAAA AAAAB4020000000000000C0155555555555563FD14DBF86A314DDC002AAAAAAAAAAAB4 020000000000000C012AAAAAAAAAAAB3FD0734B78FBD402C002AAAAAAAAAAAB4020000 000000000C0100000000000003FCF92C5F92C5F94C002AAAAAAAAAAAB4020000000000 000C00AAAAAAAAAAAAB3FCEA00C22E45068C002AAAAAAAAAAAB4020000000000000C00 55555555555563FCE0E696F1F7A81C002AAAAAAAAAAAB4020000000000000C00000000 00000013FCDDDDDDDDDDDDFC002AAAAAAAAAAAB4020000000000000BFF555555555555 83FCE0E696F1F7A82C002AAAAAAAAAAAB4020000000000000BFE555555555555B3FCEA 00C22E45068C002AAAAAAAAAAAB4020000000000000BCC80000000000003FCF92C5F92 C5F94C002AAAAAAAAAAAB40200000000000003FE555555555554F3FD0734B78FBD402C 002AAAAAAAAAAAB40200000000000003FF55555555555523FD14DBF86A314DDC002AAA AAAAAAAAB40200000000000003FFFFFFFFFFFFFFC3FD258BF258BF259C002AAAAAAAAA AAB402000000000000040055555555555533FD3944A55B66C78C002AAAAAAAAAAAB402 0000000000000400AAAAAAAAAAAA83FD500611722833AC002AAAAAAAAAAAB402000000 0000000400FFFFFFFFFFFFD3FD69D0369D0369DC002AAAAAAAAAAAB402000000000000 04012AAAAAAAAAAA93FD86A314DBF86A2C002AAAAAAAAAAAB402000000000000040155 555555555543FDA67EAC2F0734CC002AAAAAAAAAAAB40200000000000004017FFFFFFF FFFFF3FDC962FC962FC96C002AAAAAAAAAAAB4020000000000000401AAAAAAAAAAAAA3 FDEF50061172284C002AAAAAAAAAAAB4020000000000000401D5555555555553FE0C22 E4506728AC002AAAAAAAAAAAB402000000000000040200000000000003FE2222222222 223C002AAAAAAAAAAAB402000000000000040215555555555553FE39A5BC7DEA00CC00 2AAAAAAAAAAAB40200000000000004022AAAAAAAAAAAA3FE52ADB363BEC47C002AAAAA AAAAAAB40200000000000004023FFFFFFFFFFFF3FE6D3A06D3A06D3C002AAAAAAAAAAA B4021555555555555C0240000000000003FE07F6E5D4C3B2AC002AAAAAAAAAAAB40215 55555555555C022AAAAAAAAAAAB3FDED097B425ED0AC002AAAAAAAAAAAB40215555555 55555C0215555555555563FDCD2DE3EF50062C002AAAAAAAAAAAB4021555555555555C 0200000000000013FDB05B05B05B05CC002AAAAAAAAAAAB4021555555555555C01D555 5555555573FD9690E0857FCF8C002AAAAAAAAAAAB4021555555555555C01AAAAAAAAAA AAC3FD7FCF746EBE636C002AAAAAAAAAAAB4021555555555555C0180000000000013FD 6C16C16C16C17C002AAAAAAAAAAAB4021555555555555C0155555555555563FD5B66C7 7D88E9AC002AAAAAAAAAAAB4021555555555555C012AAAAAAAAAAAB3FD4DBF86A314DB FC002AAAAAAAAAAAB4021555555555555C0100000000000003FD4320FEDCBA987C002A AAAAAAAAAAB4021555555555555C00AAAAAAAAAAAAB3FD3B8B302A7A1F1C002AAAAAAA AAAAB4021555555555555C0055555555555563FD36FE1A8C536FEC002AAAAAAAAAAAB4 021555555555555C0000000000000013FD3579BE02468ADC002AAAAAAAAAAAB4021555 555555555BFF55555555555583FD36FE1A8C536FEC002AAAAAAAAAAAB4021555555555 555BFE555555555555B3FD3B8B302A7A1F1C002AAAAAAAAAAAB4021555555555555BCC 80000000000003FD4320FEDCBA987C002AAAAAAAAAAAB40215555555555553FE555555 555554F3FD4DBF86A314DBFC002AAAAAAAAAAAB40215555555555553FF555555555555 23FD5B66C77D88E9AC002AAAAAAAAAAAB40215555555555553FFFFFFFFFFFFFFC3FD6C 16C16C16C16C002AAAAAAAAAAAB402155555555555540055555555555533FD7FCF746E BE635C002AAAAAAAAAAAB4021555555555555400AAAAAAAAAAAA83FD9690E0857FCF7C 002AAAAAAAAAAAB4021555555555555400FFFFFFFFFFFFD3FDB05B05B05B05AC002AAA AAAAAAAAB40215555555555554012AAAAAAAAAAA93FDCD2DE3EF5005FC002AAAAAAAAA AAB402155555555555540155555555555543FDED097B425ED09C002AAAAAAAAAAAB402 15555555555554017FFFFFFFFFFFF3FE07F6E5D4C3B2AC002AAAAAAAAAAAB402155555 5555555401AAAAAAAAAAAAA3FE1AED6A9264E20C002AAAAAAAAAAAB402155555555555 5401D5555555555553FE2F684BDA12F68C002AAAAAAAAAAAB402155555555555540200 000000000003FE456789ABCDF01C002AAAAAAAAAAAB402155555555555540215555555 555553FE5CEB240795CEBC002AAAAAAAAAAAB40215555555555554022AAAAAAAAAAAA3 FE75F31AED6A925C002AAAAAAAAAAAB40215555555555554023FFFFFFFFFFFF3FE907F 6E5D4C3B2C002AAAAAAAAAAAB4022AAAAAAAAAAAAC0240000000000003FE2D82D82D82 D82C002AAAAAAAAAAAB4022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE1C10AFF9EE8DDC00 2AAAAAAAAAAAB4022AAAAAAAAAAAAC0215555555555563FE0C22E45067289C002AAAAA AAAAAAB4022AAAAAAAAAAAAC0200000000000013FDFB72EA61D950CC002AAAAAAAAAAA B4022AAAAAAAAAAAAC01D5555555555573FDE1A8C536FE1A8C002AAAAAAAAAAAB4022A AAAAAAAAAAAC01AAAAAAAAAAAAC3FDCAE759203CAE6C002AAAAAAAAAAAB4022AAAAAAA AAAAAC0180000000000013FDB72EA61D950C7C002AAAAAAAAAAAB4022AAAAAAAAAAAAC 0155555555555563FDA67EAC2F0734AC002AAAAAAAAAAAB4022AAAAAAAAAAAAC012AAA AAAAAAAAB3FD98D76B549326FC002AAAAAAAAAAAB4022AAAAAAAAAAAAC010000000000 0003FD8E38E38E38E37C002AAAAAAAAAAAB4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FD 86A314DBF86A1C002AAAAAAAAAAAB4022AAAAAAAAAAAAC0055555555555563FD8215FF 3DD1BAEC002AAAAAAAAAAAB4022AAAAAAAAAAAAC0000000000000013FD8091A2B3C4D5 DC002AAAAAAAAAAAB4022AAAAAAAAAAAABFF55555555555583FD8215FF3DD1BAEC002A AAAAAAAAAAB4022AAAAAAAAAAAABFE555555555555B3FD86A314DBF86A1C002AAAAAAA AAAAB4022AAAAAAAAAAAABCC80000000000003FD8E38E38E38E37C002AAAAAAAAAAAB4 022AAAAAAAAAAAA3FE555555555554F3FD98D76B549326FC002AAAAAAAAAAAB4022AAA AAAAAAAAA3FF55555555555523FDA67EAC2F0734AC002AAAAAAAAAAAB4022AAAAAAAAA AAA3FFFFFFFFFFFFFFC3FDB72EA61D950C6C002AAAAAAAAAAAB4022AAAAAAAAAAAA400 55555555555533FDCAE759203CAE5C002AAAAAAAAAAAB4022AAAAAAAAAAAA400AAAAAA AAAAAA83FDE1A8C536FE1A7C002AAAAAAAAAAAB4022AAAAAAAAAAAA400FFFFFFFFFFFF D3FDFB72EA61D950AC002AAAAAAAAAAAB4022AAAAAAAAAAAA4012AAAAAAAAAAA93FE0C 22E45067288C002AAAAAAAAAAAB4022AAAAAAAAAAAA40155555555555543FE1C10AFF9 EE8DCC002AAAAAAAAAAAB4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE2D82D82D82D82C 002AAAAAAAAAAAB4022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE40795CEB24078C002AAA AAAAAAAAB4022AAAAAAAAAAAA401D5555555555553FE54F43E32D21C0C002AAAAAAAAA AAB4022AAAAAAAAAAAA40200000000000003FE6AF37C048D159C002AAAAAAAAAAAB402 2AAAAAAAAAAAA40215555555555553FE8277166054F43C002AAAAAAAAAAAB4022AAAAA AAAAAAA4022AAAAAAAAAAAA3FE9B7F0D4629B7DC002AAAAAAAAAAAB4022AAAAAAAAAAA A4023FFFFFFFFFFFF3FEB60B60B60B60AC002AAAAAAAAAAAB4023FFFFFFFFFFFFC0240 000000000003FE5555555555554C002AAAAAAAAAAAB4023FFFFFFFFFFFFC022AAAAAAA AAAAB3FE43E32D21C10AFC002AAAAAAAAAAAB4023FFFFFFFFFFFFC0215555555555563 FE33F5617839A5BC002AAAAAAAAAAAB4023FFFFFFFFFFFFC0200000000000013FE258B F258BF258C002AAAAAAAAAAAB4023FFFFFFFFFFFFC01D5555555555573FE18A6DFC351 8A6C002AAAAAAAAAAAB4023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FE0D4629B7F0D45C00 2AAAAAAAAAAAB4023FFFFFFFFFFFFC0180000000000013FE0369D0369D036C002AAAAA AAAAAAB4023FFFFFFFFFFFFC0155555555555563FDF623A67EAC2EEC002AAAAAAAAAAA B4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FDE87C65A438213C002AAAAAAAAAAAB4023F FFFFFFFFFFFC0100000000000003FDDDDDDDDDDDDDBC002AAAAAAAAAAAB4023FFFFFFF FFFFFC00AAAAAAAAAAAAB3FDD6480F2B9D645C002AAAAAAAAAAAB4023FFFFFFFFFFFFC 0055555555555563FDD1BAF98D76B52C002AAAAAAAAAAAB4023FFFFFFFFFFFFC000000 0000000013FDD0369D0369D01C002AAAAAAAAAAAB4023FFFFFFFFFFFFBFF5555555555 5583FDD1BAF98D76B52C002AAAAAAAAAAAB4023FFFFFFFFFFFFBFE555555555555B3FD D6480F2B9D645C002AAAAAAAAAAAB4023FFFFFFFFFFFFBCC80000000000003FDDDDDDD DDDDDDBC002AAAAAAAAAAAB4023FFFFFFFFFFFF3FE555555555554F3FDE87C65A43821 3C002AAAAAAAAAAAB4023FFFFFFFFFFFF3FF55555555555523FDF623A67EAC2EEC002A AAAAAAAAAAB4023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FE0369D0369D035C002AAAAAAA AAAAB4023FFFFFFFFFFFF40055555555555533FE0D4629B7F0D44C002AAAAAAAAAAAB4 023FFFFFFFFFFFF400AAAAAAAAAAAA83FE18A6DFC3518A5C002AAAAAAAAAAAB4023FFF FFFFFFFFF400FFFFFFFFFFFFD3FE258BF258BF257C002AAAAAAAAAAAB4023FFFFFFFFF FFF4012AAAAAAAAAAA93FE33F5617839A5AC002AAAAAAAAAAAB4023FFFFFFFFFFFF401 55555555555543FE43E32D21C10AEC002AAAAAAAAAAAB4023FFFFFFFFFFFF4017FFFFF FFFFFFF3FE5555555555554C002AAAAAAAAAAAB4023FFFFFFFFFFFF401AAAAAAAAAAAA A3FE684BDA12F684AC002AAAAAAAAAAAB4023FFFFFFFFFFFF401D5555555555553FE7C C6BB5AA4992C002AAAAAAAAAAAB4023FFFFFFFFFFFF40200000000000003FE92C5F92C 5F92BC002AAAAAAAAAAAB4023FFFFFFFFFFFF40215555555555553FEAA49938827715C 002AAAAAAAAAAAB4023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEC3518A6DFC34FC002AAA AAAAAAAAB4023FFFFFFFFFFFF4023FFFFFFFFFFFF3FEDDDDDDDDDDDDCC001555555555 556C024000000000000C0240000000000003FD0000000000001C001555555555556C02 4000000000000C022AAAAAAAAAAAB3FCBA375F31AED6FC001555555555556C02400000 0000000C0215555555555563FC7A80308B9141EC001555555555556C02400000000000 0C0200000000000013FC40DA740DA7413C001555555555556C024000000000000C01D5 555555555573FC0D4629B7F0D4AC001555555555556C024000000000000C01AAAAAAAA AAAAC3FBBF86A314DBF8DC001555555555556C024000000000000C0180000000000013 FB70A3D70A3D711C001555555555556C024000000000000C0155555555555563FB2DE3 EF500611CC001555555555556C024000000000000C012AAAAAAAAAAAB3FAEE8DD7CC6B B65C001555555555556C024000000000000C0100000000000003FA99999999999A2C00 1555555555556C024000000000000C00AAAAAAAAAAAAB3FA5CEB240795CF4C00155555 5555556C024000000000000C0055555555555563FA3882771660558C00155555555555 6C024000000000000C0000000000000013FA2C5F92C5F92CEC001555555555556C0240 00000000000BFF55555555555583FA3882771660557C001555555555556C0240000000 00000BFE555555555555B3FA5CEB240795CF3C001555555555556C024000000000000B CC80000000000003FA99999999999A1C001555555555556C0240000000000003FE5555 55555554F3FAEE8DD7CC6BB61C001555555555556C0240000000000003FF5555555555 5523FB2DE3EF500611AC001555555555556C0240000000000003FFFFFFFFFFFFFFC3FB 70A3D70A3D70DC001555555555556C02400000000000040055555555555533FBBF86A3 14DBF89C001555555555556C024000000000000400AAAAAAAAAAAA83FC0D4629B7F0D4 7C001555555555556C024000000000000400FFFFFFFFFFFFD3FC40DA740DA740EC0015 55555555556C0240000000000004012AAAAAAAAAAA93FC7A80308B9141AC0015555555 55556C02400000000000040155555555555543FCBA375F31AED6BC001555555555556C 0240000000000004017FFFFFFFFFFFF3FD0000000000000C001555555555556C024000 000000000401AAAAAAAAAAAAA3FD25ED097B425EEC001555555555556C024000000000 000401D5555555555553FD4EE2CC0A9E87DC001555555555556C024000000000000402 00000000000003FD7AE147AE147B0C001555555555556C024000000000000402155555 55555553FDA9E87C65A4383C001555555555556C0240000000000004022AAAAAAAAAAA A3FDDBF86A314DBF8C001555555555556C0240000000000004023FFFFFFFFFFFF3FE08 88888888888C001555555555556C022AAAAAAAAAAABC0240000000000003FC97530ECA 86424C001555555555556C022AAAAAAAAAAABC022AAAAAAAAAAAB3FC518A6DFC35191C 001555555555556C022AAAAAAAAAAABC0215555555555563FC11D33F5617840C001555 555555556C022AAAAAAAAAAABC0200000000000013FBB05B05B05B069C001555555555 556C022AAAAAAAAAAABC01D5555555555573FB49327104EE2D8C001555555555556C02 2AAAAAAAAAAABC01AAAAAAAAAAAAC3FADC598153D0FA3C001555555555556C022AAAAA AAAAAABC0180000000000013FA3E93E93E93EABC001555555555556C022AAAAAAAAAAA BC0155555555555563F9722833944A580C001555555555556C022AAAAAAAAAAABC012A AAAAAAAAAAB3F82F684BDA12FB0C001555555555556C022AAAAAAAAAAABC0100000000 00000BF523456789ABAC0C001555555555556C022AAAAAAAAAAABC00AAAAAAAAAAAABB F81722833944A13C001555555555556C022AAAAAAAAAAABC005555555555556BF8A8C5 36FE1A882C001555555555556C022AAAAAAAAAAABC000000000000001BF8D950C83FB7 2A8C001555555555556C022AAAAAAAAAAABBFF5555555555558BF8A8C536FE1A884C00 1555555555556C022AAAAAAAAAAABBFE555555555555BBF81722833944A17C00155555 5555556C022AAAAAAAAAAABBCC8000000000000BF523456789ABAF5C00155555555555 6C022AAAAAAAAAAAB3FE555555555554F3F82F684BDA12FA4C001555555555556C022A AAAAAAAAAAB3FF55555555555523F9722833944A579C001555555555556C022AAAAAAA AAAAB3FFFFFFFFFFFFFFC3FA3E93E93E93EA2C001555555555556C022AAAAAAAAAAAB4 0055555555555533FADC598153D0F99C001555555555556C022AAAAAAAAAAAB400AAAA AAAAAAAA83FB49327104EE2D2C001555555555556C022AAAAAAAAAAAB400FFFFFFFFFF FFD3FBB05B05B05B060C001555555555556C022AAAAAAAAAAAB4012AAAAAAAAAAA93FC 11D33F561783CC001555555555556C022AAAAAAAAAAAB40155555555555543FC518A6D FC3518DC001555555555556C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FC97530ECA8642 2C001555555555556C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FCE32D21C10AFFDC0015 55555555556C022AAAAAAAAAAAB401D5555555555553FD1A8C536FE1A8EC0015555555 55556C022AAAAAAAAAAAB40200000000000003FD468ACF13579C0C001555555555556C 022AAAAAAAAAAAB40215555555555553FD759203CAE7594C001555555555556C022AAA AAAAAAAAB4022AAAAAAAAAAAA3FDA7A1F19690E09C001555555555556C022AAAAAAAAA AAB4023FFFFFFFFFFFF3FDDCBA987654322C001555555555556C021555555555556C02 40000000000003FC37C048D159E2AC001555555555556C021555555555556C022AAAAA AAAAAAB3FBE3EF50061172EC001555555555556C021555555555556C02155555555555 63FB6480F2B9D648AC001555555555556C021555555555556C0200000000000013FAE2 6AF37C048EAC001555555555556C021555555555556C01D5555555555573FA1419CA25 2ADC9C001555555555556C021555555555556C01AAAAAAAAAAAAC3F87839A5BC7DEE2C 001555555555556C021555555555556C018000000000001BF7FDB97530EC9FBC001555 555555556C021555555555556C015555555555556BF98A6DFC3518A50C001555555555 556C021555555555556C012AAAAAAAAAAABBFA327104EE2CBFCC001555555555556C02 1555555555556C010000000000000BFA87654320FEDBFC001555555555556C02155555 5555556C00AAAAAAAAAAAABBFAC413B8B302A6DC001555555555556C02155555555555 6C005555555555556BFAE87C65A438208C001555555555556C021555555555556C0000 00000000001BFAF49F49F49F493C001555555555556C021555555555556BFF55555555 55558BFAE87C65A43820AC001555555555556C021555555555556BFE555555555555BB FAC413B8B302A6EC001555555555556C021555555555556BCC8000000000000BFA8765 4320FEDC0C001555555555556C0215555555555563FE555555555554FBFA327104EE2C C00C001555555555556C0215555555555563FF5555555555552BF98A6DFC3518A59C00 1555555555556C0215555555555563FFFFFFFFFFFFFFCBF7FDB97530ECA38C00155555 5555556C02155555555555640055555555555533F87839A5BC7DEC2C00155555555555 6C021555555555556400AAAAAAAAAAAA83FA1419CA252ADBBC001555555555556C0215 55555555556400FFFFFFFFFFFFD3FAE26AF37C048D7C001555555555556C0215555555 555564012AAAAAAAAAAA93FB6480F2B9D6483C001555555555556C0215555555555564 0155555555555543FBE3EF500611726C001555555555556C0215555555555564017FFF FFFFFFFFF3FC37C048D159E28C001555555555556C021555555555556401AAAAAAAAAA AAA3FC839A5BC7DEA03C001555555555556C021555555555556401D5555555555553FC D585E0E696F22C001555555555556C02155555555555640200000000000003FD16C16C 16C16C3C001555555555556C02155555555555640215555555555553FD45C8A0CE5129 7C001555555555556C0215555555555564022AAAAAAAAAAAA3FD77D88E99FAB0CC0015 55555555556C0215555555555564023FFFFFFFFFFFF3FDACF13579BE025C0015555555 55556C020000000000001C0240000000000003FBC28F5C28F5C33C001555555555556C 020000000000001C022AAAAAAAAAAAB3FB36FE1A8C5370AC001555555555556C020000 000000001C0215555555555563FA6F1F7A80308D1C001555555555556C020000000000 001C0200000000000013F9111111111114BC001555555555556C020000000000001C01 D555555555557BF817228339449EEC001555555555556C020000000000001C01AAAAAA AAAAAACBF9F7A80308B9117C001555555555556C020000000000001C01800000000000 1BFA9999999999983C001555555555556C020000000000001C015555555555556BFB0F 8CB487042B7C001555555555556C020000000000001C012AAAAAAAAAAABBFB4629B7F0 D4621C001555555555556C020000000000001C010000000000000BFB70A3D70A3D702C 001555555555556C020000000000001C00AAAAAAAAAAAABBFB8EFB11D33F559C001555 555555556C020000000000001C005555555555556BFBA12F684BDA127C001555555555 556C020000000000001C000000000000001BFBA740DA740DA6CC001555555555556C02 0000000000001BFF5555555555558BFBA12F684BDA127C001555555555556C02000000 0000001BFE555555555555BBFB8EFB11D33F55AC001555555555556C02000000000000 1BCC8000000000000BFB70A3D70A3D703C001555555555556C0200000000000013FE55 5555555554FBFB4629B7F0D4623C001555555555556C0200000000000013FF55555555 55552BFB0F8CB487042B9C001555555555556C0200000000000013FFFFFFFFFFFFFFCB FA999999999998CC001555555555556C0200000000000014005555555555553BF9F7A8 0308B912AC001555555555556C020000000000001400AAAAAAAAAAAA8BF81722833944 A28C001555555555556C020000000000001400FFFFFFFFFFFFD3F91111111111124C00 1555555555556C0200000000000014012AAAAAAAAAAA93FA6F1F7A80308C2C00155555 5555556C02000000000000140155555555555543FB36FE1A8C53703C00155555555555 6C0200000000000014017FFFFFFFFFFFF3FBC28F5C28F5C2EC001555555555556C0200 00000000001401AAAAAAAAAAAAA3FC2D21C10AFF9F2C001555555555556C0200000000 00001401D5555555555553FC7F0D4629B7F11C001555555555556C0200000000000014 0200000000000003FCD70A3D70A3D76C001555555555556C0200000000000014021555 5555555553FD1A8C536FE1A8EC001555555555556C0200000000000014022AAAAAAAAA AAA3FD4C9C413B8B303C001555555555556C0200000000000014023FFFFFFFFFFFF3FD 81B4E81B4E81CC001555555555556C01D555555555557C0240000000000003FB27D27D 27D27DBC001555555555556C01D555555555557C022AAAAAAAAAAAB3FA388277166056 8C001555555555556C01D555555555557C0215555555555563F7CD2DE3EF50128C0015 55555555556C01D555555555557C020000000000001BF959E26AF37C00DC0015555555 55556C01D555555555557C01D555555555557BFA7B425ED097B27C001555555555556C 01D555555555557C01AAAAAAAAAAAACBFB18A6DFC35189CC001555555555556C01D555 555555557C018000000000001BFB6789ABCDF0118C001555555555556C01D555555555 557C015555555555556BFBAA4993882770DC001555555555556C01D555555555557C01 2AAAAAAAAAAABBFBE0E696F1F7A77C001555555555556C01D555555555557C01000000 0000000BFC05B05B05B05ACC001555555555556C01D555555555557C00AAAAAAAAAAAA BBFC14DBF86A314D8C001555555555556C01D555555555557C005555555555556BFC1D F623A67EABFC001555555555556C01D555555555557C000000000000001BFC20FEDCBA 98761C001555555555556C01D555555555557BFF5555555555558BFC1DF623A67EABEC 001555555555556C01D555555555557BFE555555555555BBFC14DBF86A314D8C001555 555555556C01D555555555557BCC8000000000000BFC05B05B05B05ACC001555555555 556C01D5555555555573FE555555555554FBFBE0E696F1F7A79C001555555555556C01 D5555555555573FF5555555555552BFBAA4993882770FC001555555555556C01D55555 55555573FFFFFFFFFFFFFFCBFB6789ABCDF011CC001555555555556C01D55555555555 74005555555555553BFB18A6DFC3518A0C001555555555556C01D555555555557400AA AAAAAAAAAA8BFA7B425ED097B37C001555555555556C01D555555555557400FFFFFFFF FFFFDBF959E26AF37C034C001555555555556C01D5555555555574012AAAAAAAAAAA93 F7CD2DE3EF500ACC001555555555556C01D55555555555740155555555555543FA3882 77166055AC001555555555556C01D5555555555574017FFFFFFFFFFFF3FB27D27D27D2 7D8C001555555555556C01D555555555557401AAAAAAAAAAAAA3FBBF86A314DBF8EC00 1555555555556C01D555555555557401D5555555555553FC31AED6A9264E6C00155555 5555556C01D55555555555740200000000000003FC89ABCDF01234AC00155555555555 6C01D55555555555740215555555555553FCE7BA375F31AF1C001555555555556C01D5 555555555574022AAAAAAAAAAAA3FD25ED097B425EEC001555555555556C01D5555555 555574023FFFFFFFFFFFF3FD5B05B05B05B06C001555555555556C01AAAAAAAAAAAACC 0240000000000003FA3E93E93E93E9EC001555555555556C01AAAAAAAAAAAACC022AAA AAAAAAAAB3F73B8B302A7A282C001555555555556C01AAAAAAAAAAAACC021555555555 556BF9AED6A9264E1F6C001555555555556C01AAAAAAAAAAAACC020000000000001BFA BE02468ACF126C001555555555556C01AAAAAAAAAAAACC01D555555555557BFB4629B7 F0D4624C001555555555556C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFBA12F684BDA12 AC001555555555556C01AAAAAAAAAAAACC018000000000001BFBF0123456789A6C0015 55555555556C01AAAAAAAAAAAACC015555555555556BFC19690E0857FCDC0015555555 55556C01AAAAAAAAAAAACC012AAAAAAAAAAABBFC34B78FBD40182C001555555555556C 01AAAAAAAAAAAACC010000000000000BFC49F49F49F49F3C001555555555556C01AAAA AAAAAAAACC00AAAAAAAAAAAABBFC59203CAE7591FC001555555555556C01AAAAAAAAAA AACC005555555555556BFC623A67EAC2F06C001555555555556C01AAAAAAAAAAAACC00 0000000000001BFC654320FEDCBA8C001555555555556C01AAAAAAAAAAAACBFF555555 5555558BFC623A67EAC2F05C001555555555556C01AAAAAAAAAAAACBFE555555555555 BBFC59203CAE7591FC001555555555556C01AAAAAAAAAAAACBCC8000000000000BFC49 F49F49F49F3C001555555555556C01AAAAAAAAAAAAC3FE555555555554FBFC34B78FBD 40183C001555555555556C01AAAAAAAAAAAAC3FF5555555555552BFC19690E0857FCEC 001555555555556C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFBF0123456789ABC001555 555555556C01AAAAAAAAAAAAC4005555555555553BFBA12F684BDA12FC001555555555 556C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFB4629B7F0D4629C001555555555556C01 AAAAAAAAAAAAC400FFFFFFFFFFFFDBFABE02468ACF136C001555555555556C01AAAAAA AAAAAAC4012AAAAAAAAAAA9BF9AED6A9264E20DC001555555555556C01AAAAAAAAAAAA C40155555555555543F73B8B302A7A1EDC001555555555556C01AAAAAAAAAAAAC4017F FFFFFFFFFFF3FA3E93E93E93E93C001555555555556C01AAAAAAAAAAAAC401AAAAAAAA AAAAA3FB36FE1A8C53700C001555555555556C01AAAAAAAAAAAAC401D5555555555553 FBDAD524C9C413EC001555555555556C01AAAAAAAAAAAAC40200000000000003FC4567 89ABCDF04C001555555555556C01AAAAAAAAAAAAC40215555555555553FCA375F31AED 6AAC001555555555556C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FD03CAE759203CAC00 1555555555556C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD38E38E38E38E3C00155555 5555556C018000000000001C0240000000000003F847AE147AE14B7C00155555555555 6C018000000000001C022AAAAAAAAAAABBF98A6DFC3518A40C001555555555556C0180 00000000001C021555555555556BFAC413B8B302A6BC001555555555556C0180000000 00001C020000000000001BFB555555555554BC001555555555556C018000000000001C 01D555555555557BFBBC7DEA00C22DCC001555555555556C018000000000001C01AAAA AAAAAAAACBFC0BC1CD2DE3EF2C001555555555556C018000000000001C018000000000 001BFC3333333333330C001555555555556C018000000000001C015555555555556BFC 549327104EE28C001555555555556C018000000000001C012AAAAAAAAAAABBFC6FE1A8 C536FDDC001555555555556C018000000000001C010000000000000BFC851EB851EB84 FC001555555555556C018000000000001C00AAAAAAAAAAAABBFC944A55B66C77BC0015 55555555556C018000000000001C005555555555556BFC9D6480F2B9D62C0015555555 55556C018000000000001C000000000000001BFCA06D3A06D3A04C001555555555556C 018000000000001BFF5555555555558BFC9D6480F2B9D61C001555555555556C018000 000000001BFE555555555555BBFC944A55B66C77BC001555555555556C018000000000 001BCC8000000000000BFC851EB851EB84FC001555555555556C0180000000000013FE 555555555554FBFC6FE1A8C536FDFC001555555555556C0180000000000013FF555555 5555552BFC549327104EE2AC001555555555556C0180000000000013FFFFFFFFFFFFFF CBFC3333333333331C001555555555556C0180000000000014005555555555553BFC0B C1CD2DE3EF3C001555555555556C018000000000001400AAAAAAAAAAAA8BFBBC7DEA00 C22E1C001555555555556C018000000000001400FFFFFFFFFFFFDBFB5555555555553C 001555555555556C0180000000000014012AAAAAAAAAAA9BFAC413B8B302A76C001555 555555556C0180000000000014015555555555554BF98A6DFC3518A65C001555555555 556C0180000000000014017FFFFFFFFFFFF3F847AE147AE148CC001555555555556C01 8000000000001401AAAAAAAAAAAAA3FA8153D0F8CB490C001555555555556C01800000 0000001401D5555555555553FB6480F2B9D6486C001555555555556C01800000000000 140200000000000003FC0A3D70A3D70A8C001555555555556C01800000000000140215 555555555553FC684BDA12F684EC001555555555556C0180000000000014022AAAAAAA AAAAA3FCCC6BB5AA49939C001555555555556C0180000000000014023FFFFFFFFFFFF3 FD1B4E81B4E81B5C001555555555556C015555555555556C024000000000000BF8D950 C83FB72C9C001555555555556C015555555555556C022AAAAAAAAAAABBFA8D76B54932 700C001555555555556C015555555555556C021555555555556BFB4629B7F0D4622C00 1555555555556C015555555555556C020000000000001BFBB97530ECA8637C00155555 5555556C015555555555556C01D555555555557BFC104EE2CC0A9E4C00155555555555 6C015555555555556C01AAAAAAAAAAAACBFC3DD1BAF98D768C001555555555556C0155 55555555556C018000000000001BFC654320FEDCBA6C001555555555556C0155555555 55556C015555555555556BFC86A314DBF86A0C001555555555556C015555555555556C 012AAAAAAAAAAABBFCA1F19690E0855C001555555555556C015555555555556C010000 000000000BFCB72EA61D950C6C001555555555556C015555555555556C00AAAAAAAAAA AABBFCC65A438215FF2C001555555555556C015555555555556C005555555555556BFC CF746EBE635D9C001555555555556C015555555555556C000000000000001BFCD27D27 D27D27BC001555555555556C015555555555556BFF5555555555558BFCCF746EBE635D 8C001555555555556C015555555555556BFE555555555555BBFCC65A438215FF2C0015 55555555556C015555555555556BCC8000000000000BFCB72EA61D950C6C0015555555 55556C0155555555555563FE555555555554FBFCA1F19690E0856C001555555555556C 0155555555555563FF5555555555552BFC86A314DBF86A1C001555555555556C015555 5555555563FFFFFFFFFFFFFFCBFC654320FEDCBA8C001555555555556C015555555555 5564005555555555553BFC3DD1BAF98D76AC001555555555556C015555555555556400 AAAAAAAAAAAA8BFC104EE2CC0A9E8C001555555555556C015555555555556400FFFFFF FFFFFFDBFBB97530ECA8641C001555555555556C0155555555555564012AAAAAAAAAAA 9BFB4629B7F0D4629C001555555555556C0155555555555564015555555555554BFA8D 76B5493270EC001555555555556C0155555555555564017FFFFFFFFFFFFBF8D950C83F B72E4C001555555555556C015555555555556401AAAAAAAAAAAAA3F9722833944A565C 001555555555556C015555555555556401D5555555555553FB0061172283398C001555 555555556C01555555555555640200000000000003FBB05B05B05B061C001555555555 556C01555555555555640215555555555553FC363BEC474CFD7C001555555555556C01 55555555555564022AAAAAAAAAAAA3FC9A5BC7DEA00C2C001555555555556C01555555 55555564023FFFFFFFFFFFF3FD02468ACF13579C001555555555556C012AAAAAAAAAAA BC024000000000000BFA1A2B3C4D5E6F2C001555555555556C012AAAAAAAAAAABC022A AAAAAAAAAABBFB18A6DFC3518A0C001555555555556C012AAAAAAAAAAABC0215555555 55556BFB98153D0F8CB42C001555555555556C012AAAAAAAAAAABC020000000000001B FC05B05B05B05ACC001555555555556C012AAAAAAAAAAABC01D555555555557BFC3944 A55B66C74C001555555555556C012AAAAAAAAAAABC01AAAAAAAAAAAACBFC66C77D88E9 9F8C001555555555556C012AAAAAAAAAAABC018000000000001BFC8E38E38E38E36C00 1555555555556C012AAAAAAAAAAABC015555555555556BFCAF98D76B54930C00155555 5555556C012AAAAAAAAAAABC012AAAAAAAAAAABBFCCAE759203CAE5C00155555555555 6C012AAAAAAAAAAABC010000000000000BFCE02468ACF1356C001555555555556C012A AAAAAAAAAABC00AAAAAAAAAAAABBFCEF50061172282C001555555555556C012AAAAAAA AAAABC005555555555556BFCF86A314DBF869C001555555555556C012AAAAAAAAAAABC 000000000000001BFCFB72EA61D950BC001555555555556C012AAAAAAAAAAABBFF5555 555555558BFCF86A314DBF868C001555555555556C012AAAAAAAAAAABBFE5555555555 55BBFCEF50061172282C001555555555556C012AAAAAAAAAAABBCC8000000000000BFC E02468ACF1356C001555555555556C012AAAAAAAAAAAB3FE555555555554FBFCCAE759 203CAE6C001555555555556C012AAAAAAAAAAAB3FF5555555555552BFCAF98D76B5493 1C001555555555556C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC8E38E38E38E38C0015 55555555556C012AAAAAAAAAAAB4005555555555553BFC66C77D88E99FAC0015555555 55556C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFC3944A55B66C78C001555555555556C 012AAAAAAAAAAAB400FFFFFFFFFFFFDBFC05B05B05B05B1C001555555555556C012AAA AAAAAAAAB4012AAAAAAAAAAA9BFB98153D0F8CB49C001555555555556C012AAAAAAAAA AAB4015555555555554BFB18A6DFC3518A7C001555555555556C012AAAAAAAAAAAB401 7FFFFFFFFFFFFBFA1A2B3C4D5E6F9C001555555555556C012AAAAAAAAAAAB401AAAAAA AAAAAAA3F653D0F8CB48726C001555555555556C012AAAAAAAAAAAB401D55555555555 53FA5CEB240795CEFC001555555555556C012AAAAAAAAAAAB40200000000000003FB5E 6F8091A2B42C001555555555556C012AAAAAAAAAAAB40215555555555553FC0D4629B7 F0D47C001555555555556C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FC7166054F43E32C 001555555555556C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FCDB97530ECA863C001555 555555556C010000000000000C024000000000000BFA9999999999992C001555555555 556C010000000000000C022AAAAAAAAAAABBFB585E0E696F1F0C001555555555556C01 0000000000000C021555555555556BFBD7CC6BB5AA492C001555555555556C01000000 0000000C020000000000001BFC258BF258BF254C001555555555556C01000000000000 0C01D555555555557BFC59203CAE7591CC001555555555556C010000000000000C01AA AAAAAAAAAACBFC86A314DBF86A0C001555555555556C010000000000000C0180000000 00001BFCAE147AE147ADEC001555555555556C010000000000000C015555555555556B FCCF746EBE635D8C001555555555556C010000000000000C012AAAAAAAAAAABBFCEAC2 F0734B78DC001555555555556C010000000000000C010000000000000BFCFFFFFFFFFF FFEC001555555555556C010000000000000C00AAAAAAAAAAAABBFD0795CEB240795C00 1555555555556C010000000000000C005555555555556BFD0C22E45067288C00155555 5555556C010000000000000C000000000000001BFD0DA740DA740D9C00155555555555 6C010000000000000BFF5555555555558BFD0C22E45067288C001555555555556C0100 00000000000BFE555555555555BBFD0795CEB240795C001555555555556C0100000000 00000BCC8000000000000BFCFFFFFFFFFFFFEC001555555555556C0100000000000003 FE555555555554FBFCEAC2F0734B78EC001555555555556C0100000000000003FF5555 555555552BFCCF746EBE635D9C001555555555556C0100000000000003FFFFFFFFFFFF FFCBFCAE147AE147AE0C001555555555556C0100000000000004005555555555553BFC 86A314DBF86A2C001555555555556C010000000000000400AAAAAAAAAAAA8BFC59203C AE75920C001555555555556C010000000000000400FFFFFFFFFFFFDBFC258BF258BF25 9C001555555555556C0100000000000004012AAAAAAAAAAA9BFBD7CC6BB5AA499C0015 55555555556C0100000000000004015555555555554BFB585E0E696F1F7C0015555555 55556C0100000000000004017FFFFFFFFFFFFBFA9999999999999C001555555555556C 010000000000000401AAAAAAAAAAAAABF8A8C536FE1A8B6C001555555555556C010000 000000000401D5555555555553F9BAF98D76B549EC001555555555556C010000000000 00040200000000000003FB1EB851EB851F2C001555555555556C010000000000000402 15555555555553FBDAD524C9C413EC001555555555556C0100000000000004022AAAAA AAAAAAA3FC518A6DFC3518AC001555555555556C0100000000000004023FFFFFFFFFFF F3FCBBBBBBBBBBBBBC001555555555556C00AAAAAAAAAAAABC024000000000000BFAF4 9F49F49F49AC001555555555556C00AAAAAAAAAAAABC022AAAAAAAAAAABBFB85E0E696 F1F74C001555555555556C00AAAAAAAAAAAABC021555555555556BFC02A7A1F19690BC 001555555555556C00AAAAAAAAAAAABC020000000000001BFC3C4D5E6F80916C001555 555555556C00AAAAAAAAAAAABC01D555555555557BFC6FE1A8C536FDEC001555555555 556C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFC9D6480F2B9D62C001555555555556C00 AAAAAAAAAAAABC018000000000001BFCC4D5E6F8091A0C001555555555556C00AAAAAA AAAAAABC015555555555556BFCE635DAD524C9AC001555555555556C00AAAAAAAAAAAA BC012AAAAAAAAAAABBFD00C22E4506728C001555555555556C00AAAAAAAAAAAABC0100 00000000000BFD0B60B60B60B60C001555555555556C00AAAAAAAAAAAABC00AAAAAAAA AAAABBFD12F684BDA12F6C001555555555556C00AAAAAAAAAAAABC005555555555556B FD17839A5BC7DE9C001555555555556C00AAAAAAAAAAAABC000000000000001BFD1907 F6E5D4C3AC001555555555556C00AAAAAAAAAAAABBFF5555555555558BFD17839A5BC7 DE9C001555555555556C00AAAAAAAAAAAABBFE555555555555BBFD12F684BDA12F6C00 1555555555556C00AAAAAAAAAAAABBCC8000000000000BFD0B60B60B60B60C00155555 5555556C00AAAAAAAAAAAAB3FE555555555554FBFD00C22E4506728C00155555555555 6C00AAAAAAAAAAAAB3FF5555555555552BFCE635DAD524C9BC001555555555556C00AA AAAAAAAAAAB3FFFFFFFFFFFFFFCBFCC4D5E6F8091A2C001555555555556C00AAAAAAAA AAAAB4005555555555553BFC9D6480F2B9D64C001555555555556C00AAAAAAAAAAAAB4 00AAAAAAAAAAAA8BFC6FE1A8C536FE2C001555555555556C00AAAAAAAAAAAAB400FFFF FFFFFFFFDBFC3C4D5E6F8091BC001555555555556C00AAAAAAAAAAAAB4012AAAAAAAAA AA9BFC02A7A1F19690FC001555555555556C00AAAAAAAAAAAAB4015555555555554BFB 85E0E696F1F7BC001555555555556C00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFAF49F49 F49F4A1C001555555555556C00AAAAAAAAAAAAB401AAAAAAAAAAAAABF98A6DFC3518A6 BC001555555555556C00AAAAAAAAAAAAB401D5555555555553F904EE2CC0A9E8EC0015 55555555556C00AAAAAAAAAAAAB40200000000000003FAE26AF37C048DCC0015555555 55556C00AAAAAAAAAAAAB40215555555555553FBAD524C9C413BAC001555555555556C 00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FC3AC901E573AC8C001555555555556C00AAAA AAAAAAAAB4023FFFFFFFFFFFF3FCA4FA4FA4FA4F9C001555555555556C005555555555 556C024000000000000BFB159E26AF37C01C001555555555556C005555555555556C02 2AAAAAAAAAAABBFBA12F684BDA128C001555555555556C005555555555556C02155555 5555556BFC104EE2CC0A9E5C001555555555556C005555555555556C02000000000000 1BFC49F49F49F49F0C001555555555556C005555555555556C01D555555555557BFC7D 88E99FAB0B8C001555555555556C005555555555556C01AAAAAAAAAAAACBFCAB0BC1CD 2DE3CC001555555555556C005555555555556C018000000000001BFCD27D27D27D27AC 001555555555556C005555555555556C015555555555556BFCF3DD1BAF98D74C001555 555555556C005555555555556C012AAAAAAAAAAABBFD0795CEB240795C001555555555 556C005555555555556C010000000000000BFD123456789ABCDC001555555555556C00 5555555555556C00AAAAAAAAAAAABBFD19CA252ADB363C001555555555556C00555555 5555556C005555555555556BFD1E573AC901E56C001555555555556C00555555555555 6C000000000000001BFD1FDB97530ECA7C001555555555556C005555555555556BFF55 55555555558BFD1E573AC901E56C001555555555556C005555555555556BFE55555555 5555BBFD19CA252ADB363C001555555555556C005555555555556BCC8000000000000B FD123456789ABCDC001555555555556C0055555555555563FE555555555554FBFD0795 CEB240795C001555555555556C0055555555555563FF5555555555552BFCF3DD1BAF98 D75C001555555555556C0055555555555563FFFFFFFFFFFFFFCBFCD27D27D27D27CC00 1555555555556C0055555555555564005555555555553BFCAB0BC1CD2DE3EC00155555 5555556C005555555555556400AAAAAAAAAAAA8BFC7D88E99FAB0BCC00155555555555 6C005555555555556400FFFFFFFFFFFFDBFC49F49F49F49F5C001555555555556C0055 555555555564012AAAAAAAAAAA9BFC104EE2CC0A9E9C001555555555556C0055555555 555564015555555555554BFBA12F684BDA12FC001555555555556C0055555555555564 017FFFFFFFFFFFFBFB159E26AF37C05C001555555555556C005555555555556401AAAA AAAAAAAAABF9F7A80308B913BC001555555555556C005555555555556401D555555555 5553F82F684BDA12F7CC001555555555556C00555555555555640200000000000003FA ABCDF01234574C001555555555556C00555555555555640215555555555553FB9203CA E759206C001555555555556C0055555555555564022AAAAAAAAAAAA3FC2D21C10AFF9E EC001555555555556C0055555555555564023FFFFFFFFFFFF3FC97530ECA8641FC0015 55555555556C000000000000001C024000000000000BFB1EB851EB851E9C0015555555 55556C000000000000001C022AAAAAAAAAAABBFBAA49938827710C001555555555556C 000000000000001C021555555555556BFC14DBF86A314D9C001555555555556C000000 000000001C020000000000001BFC4E81B4E81B4E4C001555555555556C000000000000 001C01D555555555557BFC8215FF3DD1BACC001555555555556C000000000000001C01 AAAAAAAAAAAACBFCAF98D76B54930C001555555555556C000000000000001C01800000 0000001BFCD70A3D70A3D6EC001555555555556C000000000000001C01555555555555 6BFCF86A314DBF868C001555555555556C000000000000001C012AAAAAAAAAAABBFD09 DC598153D0FC001555555555556C000000000000001C010000000000000BFD147AE147 AE147C001555555555556C000000000000001C00AAAAAAAAAAAABBFD1C10AFF9EE8DDC 001555555555556C000000000000001C005555555555556BFD209DC598153D0C001555 555555556C000000000000001C000000000000001BFD2222222222221C001555555555 556C000000000000001BFF5555555555558BFD209DC598153D0C001555555555556C00 0000000000001BFE555555555555BBFD1C10AFF9EE8DDC001555555555556C00000000 0000001BCC8000000000000BFD147AE147AE147C001555555555556C00000000000000 13FE555555555554FBFD09DC598153D0FC001555555555556C0000000000000013FF55 55555555552BFCF86A314DBF869C001555555555556C0000000000000013FFFFFFFFFF FFFFCBFCD70A3D70A3D70C001555555555556C0000000000000014005555555555553B FCAF98D76B54932C001555555555556C000000000000001400AAAAAAAAAAAA8BFC8215 FF3DD1BB0C001555555555556C000000000000001400FFFFFFFFFFFFDBFC4E81B4E81B 4E9C001555555555556C0000000000000014012AAAAAAAAAAA9BFC14DBF86A314DDC00 1555555555556C0000000000000014015555555555554BFBAA49938827717C00155555 5555556C0000000000000014017FFFFFFFFFFFFBFB1EB851EB851EDC00155555555555 6C000000000000001401AAAAAAAAAAAAABFA0E0857FCF746EC001555555555556C0000 00000000001401D5555555555553F7CD2DE3EF50078C001555555555556C0000000000 0000140200000000000003FA99999999999A4C001555555555556C0000000000000014 0215555555555553FB88E99FAB0BC1EC001555555555556C0000000000000014022AAA AAAAAAAAA3FC2894AB6CD8EFAC001555555555556C0000000000000014023FFFFFFFFF FFF3FC92C5F92C5F92BC001555555555556BFF5555555555558C024000000000000BFB 159E26AF37C05C001555555555556BFF5555555555558C022AAAAAAAAAAABBFBA12F68 4BDA12CC001555555555556BFF5555555555558C021555555555556BFC104EE2CC0A9E 7C001555555555556BFF5555555555558C020000000000001BFC49F49F49F49F2C0015 55555555556BFF5555555555558C01D555555555557BFC7D88E99FAB0BAC0015555555 55556BFF5555555555558C01AAAAAAAAAAAACBFCAB0BC1CD2DE3EC001555555555556B FF5555555555558C018000000000001BFCD27D27D27D27CC001555555555556BFF5555 555555558C015555555555556BFCF3DD1BAF98D76C001555555555556BFF5555555555 558C012AAAAAAAAAAABBFD0795CEB240796C001555555555556BFF5555555555558C01 0000000000000BFD123456789ABCEC001555555555556BFF5555555555558C00AAAAAA AAAAAABBFD19CA252ADB364C001555555555556BFF5555555555558C00555555555555 6BFD1E573AC901E57C001555555555556BFF5555555555558C000000000000001BFD1F DB97530ECA8C001555555555556BFF5555555555558BFF5555555555558BFD1E573AC9 01E57C001555555555556BFF5555555555558BFE555555555555BBFD19CA252ADB364C 001555555555556BFF5555555555558BCC8000000000000BFD123456789ABCEC001555 555555556BFF55555555555583FE555555555554FBFD0795CEB240796C001555555555 556BFF55555555555583FF5555555555552BFCF3DD1BAF98D77C001555555555556BFF 55555555555583FFFFFFFFFFFFFFCBFCD27D27D27D27EC001555555555556BFF555555 55555584005555555555553BFCAB0BC1CD2DE40C001555555555556BFF555555555555 8400AAAAAAAAAAAA8BFC7D88E99FAB0BEC001555555555556BFF5555555555558400FF FFFFFFFFFFDBFC49F49F49F49F7C001555555555556BFF55555555555584012AAAAAAA AAAA9BFC104EE2CC0A9EBC001555555555556BFF55555555555584015555555555554B FBA12F684BDA133C001555555555556BFF55555555555584017FFFFFFFFFFFFBFB159E 26AF37C09C001555555555556BFF5555555555558401AAAAAAAAAAAAABF9F7A80308B9 14BC001555555555556BFF5555555555558401D5555555555553F82F684BDA12F5CC00 1555555555556BFF555555555555840200000000000003FAABCDF0123456CC00155555 5555556BFF555555555555840215555555555553FB9203CAE759202C00155555555555 6BFF55555555555584022AAAAAAAAAAAA3FC2D21C10AFF9ECC001555555555556BFF55 555555555584023FFFFFFFFFFFF3FC97530ECA8641DC001555555555556BFE55555555 5555BC024000000000000BFAF49F49F49F49AC001555555555556BFE555555555555BC 022AAAAAAAAAAABBFB85E0E696F1F74C001555555555556BFE555555555555BC021555 555555556BFC02A7A1F19690BC001555555555556BFE555555555555BC020000000000 001BFC3C4D5E6F80916C001555555555556BFE555555555555BC01D555555555557BFC 6FE1A8C536FDEC001555555555556BFE555555555555BC01AAAAAAAAAAAACBFC9D6480 F2B9D62C001555555555556BFE555555555555BC018000000000001BFCC4D5E6F8091A 0C001555555555556BFE555555555555BC015555555555556BFCE635DAD524C9AC0015 55555555556BFE555555555555BC012AAAAAAAAAAABBFD00C22E4506728C0015555555 55556BFE555555555555BC010000000000000BFD0B60B60B60B60C001555555555556B FE555555555555BC00AAAAAAAAAAAABBFD12F684BDA12F6C001555555555556BFE5555 55555555BC005555555555556BFD17839A5BC7DE9C001555555555556BFE5555555555 55BC000000000000001BFD1907F6E5D4C3AC001555555555556BFE555555555555BBFF 5555555555558BFD17839A5BC7DE9C001555555555556BFE555555555555BBFE555555 555555BBFD12F684BDA12F6C001555555555556BFE555555555555BBCC800000000000 0BFD0B60B60B60B60C001555555555556BFE555555555555B3FE555555555554FBFD00 C22E4506728C001555555555556BFE555555555555B3FF5555555555552BFCE635DAD5 24C9BC001555555555556BFE555555555555B3FFFFFFFFFFFFFFCBFCC4D5E6F8091A2C 001555555555556BFE555555555555B4005555555555553BFC9D6480F2B9D64C001555 555555556BFE555555555555B400AAAAAAAAAAAA8BFC6FE1A8C536FE2C001555555555 556BFE555555555555B400FFFFFFFFFFFFDBFC3C4D5E6F8091BC001555555555556BFE 555555555555B4012AAAAAAAAAAA9BFC02A7A1F19690FC001555555555556BFE555555 555555B4015555555555554BFB85E0E696F1F7BC001555555555556BFE555555555555 B4017FFFFFFFFFFFFBFAF49F49F49F4A1C001555555555556BFE555555555555B401AA AAAAAAAAAAABF98A6DFC3518A6BC001555555555556BFE555555555555B401D5555555 555553F904EE2CC0A9E8EC001555555555556BFE555555555555B40200000000000003 FAE26AF37C048DCC001555555555556BFE555555555555B40215555555555553FBAD52 4C9C413BAC001555555555556BFE555555555555B4022AAAAAAAAAAAA3FC3AC901E573 AC8C001555555555556BFE555555555555B4023FFFFFFFFFFFF3FCA4FA4FA4FA4F9C00 1555555555556BCC8000000000000C024000000000000BFA9999999999992C00155555 5555556BCC8000000000000C022AAAAAAAAAAABBFB585E0E696F1F0C00155555555555 6BCC8000000000000C021555555555556BFBD7CC6BB5AA496C001555555555556BCC80 00000000000C020000000000001BFC258BF258BF256C001555555555556BCC80000000 00000C01D555555555557BFC59203CAE7591EC001555555555556BCC8000000000000C 01AAAAAAAAAAAACBFC86A314DBF86A2C001555555555556BCC8000000000000C018000 000000001BFCAE147AE147AE0C001555555555556BCC8000000000000C015555555555 556BFCCF746EBE635D8C001555555555556BCC8000000000000C012AAAAAAAAAAABBFC EAC2F0734B78DC001555555555556BCC8000000000000C010000000000000BFCFFFFFF FFFFFFEC001555555555556BCC8000000000000C00AAAAAAAAAAAABBFD0795CEB24079 5C001555555555556BCC8000000000000C005555555555556BFD0C22E45067288C0015 55555555556BCC8000000000000C000000000000001BFD0DA740DA740DAC0015555555 55556BCC8000000000000BFF5555555555558BFD0C22E45067289C001555555555556B CC8000000000000BFE555555555555BBFD0795CEB240796C001555555555556BCC8000 000000000BCC8000000000000BFCFFFFFFFFFFFFFC001555555555556BCC8000000000 0003FE555555555554FBFCEAC2F0734B78FC001555555555556BCC80000000000003FF 5555555555552BFCCF746EBE635DAC001555555555556BCC80000000000003FFFFFFFF FFFFFFCBFCAE147AE147AE1C001555555555556BCC8000000000000400555555555555 3BFC86A314DBF86A3C001555555555556BCC8000000000000400AAAAAAAAAAAA8BFC59 203CAE75921C001555555555556BCC8000000000000400FFFFFFFFFFFFDBFC258BF258 BF25AC001555555555556BCC80000000000004012AAAAAAAAAAA9BFBD7CC6BB5AA49BC 001555555555556BCC80000000000004015555555555554BFB585E0E696F1F9C001555 555555556BCC80000000000004017FFFFFFFFFFFFBFA999999999999DC001555555555 556BCC8000000000000401AAAAAAAAAAAAABF8A8C536FE1A8C6C001555555555556BCC 8000000000000401D5555555555553F9BAF98D76B5496C001555555555556BCC800000 000000040200000000000003FB1EB851EB851EEC001555555555556BCC800000000000 040215555555555553FBDAD524C9C413CC001555555555556BCC80000000000004022A AAAAAAAAAAA3FC518A6DFC35189C001555555555556BCC80000000000004023FFFFFFF FFFFF3FCBBBBBBBBBBBBAC0015555555555563FE555555555554FC024000000000000B FA1A2B3C4D5E6FAC0015555555555563FE555555555554FC022AAAAAAAAAAABBFB18A6 DFC3518A4C0015555555555563FE555555555554FC021555555555556BFB98153D0F8C B46C0015555555555563FE555555555554FC020000000000001BFC05B05B05B05AEC00 15555555555563FE555555555554FC01D555555555557BFC3944A55B66C76C00155555 55555563FE555555555554FC01AAAAAAAAAAAACBFC66C77D88E99FAC00155555555555 63FE555555555554FC018000000000001BFC8E38E38E38E38C0015555555555563FE55 5555555554FC015555555555556BFCAF98D76B54932C0015555555555563FE55555555 5554FC012AAAAAAAAAAABBFCCAE759203CAE7C0015555555555563FE555555555554FC 010000000000000BFCE02468ACF1358C0015555555555563FE555555555554FC00AAAA AAAAAAAABBFCEF50061172284C0015555555555563FE555555555554FC005555555555 556BFCF86A314DBF86BC0015555555555563FE555555555554FC000000000000001BFC FB72EA61D950DC0015555555555563FE555555555554FBFF5555555555558BFCF86A31 4DBF86AC0015555555555563FE555555555554FBFE555555555555BBFCEF5006117228 4C0015555555555563FE555555555554FBCC8000000000000BFCE02468ACF1358C0015 555555555563FE555555555554F3FE555555555554FBFCCAE759203CAE8C0015555555 555563FE555555555554F3FF5555555555552BFCAF98D76B54933C0015555555555563 FE555555555554F3FFFFFFFFFFFFFFCBFC8E38E38E38E3AC0015555555555563FE5555 55555554F4005555555555553BFC66C77D88E99FCC0015555555555563FE5555555555 54F400AAAAAAAAAAAA8BFC3944A55B66C7AC0015555555555563FE555555555554F400 FFFFFFFFFFFFDBFC05B05B05B05B3C0015555555555563FE555555555554F4012AAAAA AAAAAA9BFB98153D0F8CB4DC0015555555555563FE555555555554F401555555555555 4BFB18A6DFC3518ABC0015555555555563FE555555555554F4017FFFFFFFFFFFFBFA1A 2B3C4D5E701C0015555555555563FE555555555554F401AAAAAAAAAAAAA3F653D0F8CB 486A6C0015555555555563FE555555555554F401D5555555555553FA5CEB240795CE7C 0015555555555563FE555555555554F40200000000000003FB5E6F8091A2B3EC001555 5555555563FE555555555554F40215555555555553FC0D4629B7F0D45C001555555555 5563FE555555555554F4022AAAAAAAAAAAA3FC7166054F43E30C0015555555555563FE 555555555554F4023FFFFFFFFFFFF3FCDB97530ECA861C0015555555555563FF555555 5555552C024000000000000BF8D950C83FB72E9C0015555555555563FF555555555555 2C022AAAAAAAAAAABBFA8D76B54932708C0015555555555563FF5555555555552C0215 55555555556BFB4629B7F0D4626C0015555555555563FF5555555555552C0200000000 00001BFBB97530ECA863BC0015555555555563FF5555555555552C01D555555555557B FC104EE2CC0A9E6C0015555555555563FF5555555555552C01AAAAAAAAAAAACBFC3DD1 BAF98D76AC0015555555555563FF5555555555552C018000000000001BFC654320FEDC BA8C0015555555555563FF5555555555552C015555555555556BFC86A314DBF86A2C00 15555555555563FF5555555555552C012AAAAAAAAAAABBFCA1F19690E0857C00155555 55555563FF5555555555552C010000000000000BFCB72EA61D950C8C00155555555555 63FF5555555555552C00AAAAAAAAAAAABBFCC65A438215FF4C0015555555555563FF55 55555555552C005555555555556BFCCF746EBE635DBC0015555555555563FF55555555 55552C000000000000001BFCD27D27D27D27DC0015555555555563FF5555555555552B FF5555555555558BFCCF746EBE635DAC0015555555555563FF5555555555552BFE5555 55555555BBFCC65A438215FF4C0015555555555563FF5555555555552BCC8000000000 000BFCB72EA61D950C8C0015555555555563FF55555555555523FE555555555554FBFC A1F19690E0858C0015555555555563FF55555555555523FF5555555555552BFC86A314 DBF86A3C0015555555555563FF55555555555523FFFFFFFFFFFFFFCBFC654320FEDCBA AC0015555555555563FF55555555555524005555555555553BFC3DD1BAF98D76CC0015 555555555563FF5555555555552400AAAAAAAAAAAA8BFC104EE2CC0A9EAC0015555555 555563FF5555555555552400FFFFFFFFFFFFDBFBB97530ECA8645C0015555555555563 FF55555555555524012AAAAAAAAAAA9BFB4629B7F0D462DC0015555555555563FF5555 5555555524015555555555554BFA8D76B54932716C0015555555555563FF5555555555 5524017FFFFFFFFFFFFBF8D950C83FB7304C0015555555555563FF5555555555552401 AAAAAAAAAAAAA3F9722833944A555C0015555555555563FF5555555555552401D55555 55555553FB0061172283394C0015555555555563FF5555555555552402000000000000 03FBB05B05B05B05DC0015555555555563FF555555555555240215555555555553FC36 3BEC474CFD5C0015555555555563FF55555555555524022AAAAAAAAAAAA3FC9A5BC7DE A00C0C0015555555555563FF55555555555524023FFFFFFFFFFFF3FD02468ACF13578C 0015555555555563FFFFFFFFFFFFFFCC0240000000000003F847AE147AE1477C001555 5555555563FFFFFFFFFFFFFFCC022AAAAAAAAAAABBF98A6DFC3518A60C001555555555 5563FFFFFFFFFFFFFFCC021555555555556BFAC413B8B302A73C0015555555555563FF FFFFFFFFFFFFCC020000000000001BFB555555555554FC0015555555555563FFFFFFFF FFFFFFCC01D555555555557BFBBC7DEA00C22E0C0015555555555563FFFFFFFFFFFFFF CC01AAAAAAAAAAAACBFC0BC1CD2DE3EF4C0015555555555563FFFFFFFFFFFFFFCC0180 00000000001BFC3333333333332C0015555555555563FFFFFFFFFFFFFFCC0155555555 55556BFC549327104EE2CC0015555555555563FFFFFFFFFFFFFFCC012AAAAAAAAAAABB FC6FE1A8C536FE1C0015555555555563FFFFFFFFFFFFFFCC010000000000000BFC851E B851EB852C0015555555555563FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFC944A55B66C 77EC0015555555555563FFFFFFFFFFFFFFCC005555555555556BFC9D6480F2B9D65C00 15555555555563FFFFFFFFFFFFFFCC000000000000001BFCA06D3A06D3A07C00155555 55555563FFFFFFFFFFFFFFCBFF5555555555558BFC9D6480F2B9D64C00155555555555 63FFFFFFFFFFFFFFCBFE555555555555BBFC944A55B66C77EC0015555555555563FFFF FFFFFFFFFFCBCC8000000000000BFC851EB851EB852C0015555555555563FFFFFFFFFF FFFFC3FE555555555554FBFC6FE1A8C536FE2C0015555555555563FFFFFFFFFFFFFFC3 FF5555555555552BFC549327104EE2DC0015555555555563FFFFFFFFFFFFFFC3FFFFFF FFFFFFFFCBFC3333333333334C0015555555555563FFFFFFFFFFFFFFC4005555555555 553BFC0BC1CD2DE3EF6C0015555555555563FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFB BC7DEA00C22E7C0015555555555563FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFB555555 5555559C0015555555555563FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFAC413B8B302A8 2C0015555555555563FFFFFFFFFFFFFFC4015555555555554BF98A6DFC3518A7DC0015 555555555563FFFFFFFFFFFFFFC4017FFFFFFFFFFFF3F847AE147AE145CC0015555555 555563FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3FA8153D0F8CB484C0015555555555563 FFFFFFFFFFFFFFC401D5555555555553FB6480F2B9D6480C0015555555555563FFFFFF FFFFFFFFC40200000000000003FC0A3D70A3D70A4C0015555555555563FFFFFFFFFFFF FFC40215555555555553FC684BDA12F684BC0015555555555563FFFFFFFFFFFFFFC402 2AAAAAAAAAAAA3FCCC6BB5AA49936C0015555555555563FFFFFFFFFFFFFFC4023FFFFF FFFFFFF3FD1B4E81B4E81B3C0015555555555564005555555555553C02400000000000 03FA3E93E93E93E96C0015555555555564005555555555553C022AAAAAAAAAAAB3F73B 8B302A7A242C0015555555555564005555555555553C021555555555556BF9AED6A926 4E206C0015555555555564005555555555553C020000000000001BFABE02468ACF12EC 0015555555555564005555555555553C01D555555555557BFB4629B7F0D4628C001555 5555555564005555555555553C01AAAAAAAAAAAACBFBA12F684BDA130C001555555555 5564005555555555553C018000000000001BFBF0123456789AAC001555555555556400 5555555555553C015555555555556BFC19690E0857FCFC001555555555556400555555 5555553C012AAAAAAAAAAABBFC34B78FBD40184C001555555555556400555555555555 3C010000000000000BFC49F49F49F49F5C0015555555555564005555555555553C00AA AAAAAAAAAABBFC59203CAE75921C0015555555555564005555555555553C0055555555 55556BFC623A67EAC2F08C0015555555555564005555555555553C000000000000001B FC654320FEDCBAAC0015555555555564005555555555553BFF5555555555558BFC623A 67EAC2F07C0015555555555564005555555555553BFE555555555555BBFC59203CAE75 921C0015555555555564005555555555553BCC8000000000000BFC49F49F49F49F5C00 155555555555640055555555555533FE555555555554FBFC34B78FBD40185C00155555 555555640055555555555533FF5555555555552BFC19690E0857FD0C00155555555555 640055555555555533FFFFFFFFFFFFFFCBFBF0123456789AFC00155555555555640055 555555555534005555555555553BFBA12F684BDA133C00155555555555640055555555 55553400AAAAAAAAAAAA8BFB4629B7F0D462DC00155555555555640055555555555534 00FFFFFFFFFFFFDBFABE02468ACF13EC00155555555555640055555555555534012AAA AAAAAAAA9BF9AED6A9264E21DC00155555555555640055555555555534015555555555 5543F73B8B302A7A1ADC00155555555555640055555555555534017FFFFFFFFFFFF3FA 3E93E93E93E8BC0015555555555564005555555555553401AAAAAAAAAAAAA3FB36FE1A 8C536FCC0015555555555564005555555555553401D5555555555553FBDAD524C9C413 AC001555555555556400555555555555340200000000000003FC456789ABCDF02C0015 55555555556400555555555555340215555555555553FCA375F31AED6A8C0015555555 5555640055555555555534022AAAAAAAAAAAA3FD03CAE759203C9C0015555555555564 0055555555555534023FFFFFFFFFFFF3FD38E38E38E38E2C001555555555556400AAAA AAAAAAAA8C0240000000000003FB27D27D27D27D3C001555555555556400AAAAAAAAAA AA8C022AAAAAAAAAAAB3FA3882771660558C001555555555556400AAAAAAAAAAAA8C02 15555555555563F7CD2DE3EF50088C001555555555556400AAAAAAAAAAAA8C02000000 0000001BF959E26AF37C035C001555555555556400AAAAAAAAAAAA8C01D55555555555 7BFA7B425ED097B3BC001555555555556400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFB18 A6DFC3518A6C001555555555556400AAAAAAAAAAAA8C018000000000001BFB6789ABCD F0122C001555555555556400AAAAAAAAAAAA8C015555555555556BFBAA49938827717C 001555555555556400AAAAAAAAAAAA8C012AAAAAAAAAAABBFBE0E696F1F7A81C001555 555555556400AAAAAAAAAAAA8C010000000000000BFC05B05B05B05B1C001555555555 556400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFC14DBF86A314DDC001555555555556400 AAAAAAAAAAAA8C005555555555556BFC1DF623A67EAC4C001555555555556400AAAAAA AAAAAA8C000000000000001BFC20FEDCBA98766C001555555555556400AAAAAAAAAAAA 8BFF5555555555558BFC1DF623A67EAC3C001555555555556400AAAAAAAAAAAA8BFE55 5555555555BBFC14DBF86A314DDC001555555555556400AAAAAAAAAAAA8BCC80000000 00000BFC05B05B05B05B1C001555555555556400AAAAAAAAAAAA83FE555555555554FB FBE0E696F1F7A83C001555555555556400AAAAAAAAAAAA83FF5555555555552BFBAA49 938827719C001555555555556400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFB6789ABCDF0 126C001555555555556400AAAAAAAAAAAA84005555555555553BFB18A6DFC3518AAC00 1555555555556400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFA7B425ED097B4BC00155555 5555556400AAAAAAAAAAAA8400FFFFFFFFFFFFDBF959E26AF37C05CC00155555555555 6400AAAAAAAAAAAA84012AAAAAAAAAAA93F7CD2DE3EF5000CC001555555555556400AA AAAAAAAAAA840155555555555543FA3882771660546C001555555555556400AAAAAAAA AAAA84017FFFFFFFFFFFF3FB27D27D27D27CEC001555555555556400AAAAAAAAAAAA84 01AAAAAAAAAAAAA3FBBF86A314DBF84C001555555555556400AAAAAAAAAAAA8401D555 5555555553FC31AED6A9264E1C001555555555556400AAAAAAAAAAAA84020000000000 0003FC89ABCDF012346C001555555555556400AAAAAAAAAAAA840215555555555553FC E7BA375F31AECC001555555555556400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD25ED09 7B425EBC001555555555556400AAAAAAAAAAAA84023FFFFFFFFFFFF3FD5B05B05B05B0 4C001555555555556400FFFFFFFFFFFFDC0240000000000003FBC28F5C28F5C27C0015 55555555556400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FB36FE1A8C53700C0015555555 55556400FFFFFFFFFFFFDC0215555555555563FA6F1F7A80308B9C0015555555555564 00FFFFFFFFFFFFDC0200000000000013F9111111111111BC001555555555556400FFFF FFFFFFFFDC01D555555555557BF81722833944A4EC001555555555556400FFFFFFFFFF FFDC01AAAAAAAAAAAACBF9F7A80308B9147C001555555555556400FFFFFFFFFFFFDC01 8000000000001BFA999999999999BC001555555555556400FFFFFFFFFFFFDC01555555 5555556BFB0F8CB487042C1C001555555555556400FFFFFFFFFFFFDC012AAAAAAAAAAA BBFB4629B7F0D462BC001555555555556400FFFFFFFFFFFFDC010000000000000BFB70 A3D70A3D70CC001555555555556400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFB8EFB11D3 3F563C001555555555556400FFFFFFFFFFFFDC005555555555556BFBA12F684BDA131C 001555555555556400FFFFFFFFFFFFDC000000000000001BFBA740DA740DA77C001555 555555556400FFFFFFFFFFFFDBFF5555555555558BFBA12F684BDA132C001555555555 556400FFFFFFFFFFFFDBFE555555555555BBFB8EFB11D33F565C001555555555556400 FFFFFFFFFFFFDBCC8000000000000BFB70A3D70A3D70EC001555555555556400FFFFFF FFFFFFD3FE555555555554FBFB4629B7F0D462EC001555555555556400FFFFFFFFFFFF D3FF5555555555552BFB0F8CB487042C4C001555555555556400FFFFFFFFFFFFD3FFFF FFFFFFFFFFCBFA99999999999A2C001555555555556400FFFFFFFFFFFFD40055555555 55553BF9F7A80308B9156C001555555555556400FFFFFFFFFFFFD400AAAAAAAAAAAA8B F81722833944A80C001555555555556400FFFFFFFFFFFFD400FFFFFFFFFFFFD3F91111 1111110F8C001555555555556400FFFFFFFFFFFFD4012AAAAAAAAAAA93FA6F1F7A8030 8ACC001555555555556400FFFFFFFFFFFFD40155555555555543FB36FE1A8C536F8C00 1555555555556400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FBC28F5C28F5C23C00155555 5555556400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FC2D21C10AFF9ECC00155555555555 6400FFFFFFFFFFFFD401D5555555555553FC7F0D4629B7F0CC001555555555556400FF FFFFFFFFFFD40200000000000003FCD70A3D70A3D70C001555555555556400FFFFFFFF FFFFD40215555555555553FD1A8C536FE1A8BC001555555555556400FFFFFFFFFFFFD4 022AAAAAAAAAAAA3FD4C9C413B8B301C001555555555556400FFFFFFFFFFFFD4023FFF FFFFFFFFF3FD81B4E81B4E819C0015555555555564012AAAAAAAAAAA9C024000000000 0003FC37C048D159E24C0015555555555564012AAAAAAAAAAA9C022AAAAAAAAAAAB3FB E3EF500611722C0015555555555564012AAAAAAAAAAA9C0215555555555563FB6480F2 B9D647EC0015555555555564012AAAAAAAAAAA9C0200000000000013FAE26AF37C048D 2C0015555555555564012AAAAAAAAAAA9C01D5555555555573FA1419CA252ADB1C0015 555555555564012AAAAAAAAAAA9C01AAAAAAAAAAAAC3F87839A5BC7DE82C0015555555 555564012AAAAAAAAAAA9C018000000000001BF7FDB97530ECABBC0015555555555564 012AAAAAAAAAAA9C015555555555556BF98A6DFC3518A80C0015555555555564012AAA AAAAAAAA9C012AAAAAAAAAAABBFA327104EE2CC14C0015555555555564012AAAAAAAAA AA9C010000000000000BFA87654320FEDD5C0015555555555564012AAAAAAAAAAA9C00 AAAAAAAAAAAABBFAC413B8B302A85C0015555555555564012AAAAAAAAAAA9C00555555 5555556BFAE87C65A438220C0015555555555564012AAAAAAAAAAA9C00000000000000 1BFAF49F49F49F4A9C0015555555555564012AAAAAAAAAAA9BFF5555555555558BFAE8 7C65A438220C0015555555555564012AAAAAAAAAAA9BFE555555555555BBFAC413B8B3 02A85C0015555555555564012AAAAAAAAAAA9BCC8000000000000BFA87654320FEDD7C 0015555555555564012AAAAAAAAAAA93FE555555555554FBFA327104EE2CC17C001555 5555555564012AAAAAAAAAAA93FF5555555555552BF98A6DFC3518A87C001555555555 5564012AAAAAAAAAAA93FFFFFFFFFFFFFFCBF7FDB97530ECAF0C001555555555556401 2AAAAAAAAAAA940055555555555533F87839A5BC7DE66C0015555555555564012AAAAA AAAAAA9400AAAAAAAAAAAA83FA1419CA252ADA4C0015555555555564012AAAAAAAAAAA 9400FFFFFFFFFFFFD3FAE26AF37C048C0C0015555555555564012AAAAAAAAAAA94012A AAAAAAAAAA93FB6480F2B9D6478C0015555555555564012AAAAAAAAAAA940155555555 555543FBE3EF50061171AC0015555555555564012AAAAAAAAAAA94017FFFFFFFFFFFF3 FC37C048D159E22C0015555555555564012AAAAAAAAAAA9401AAAAAAAAAAAAA3FC839A 5BC7DE9FDC0015555555555564012AAAAAAAAAAA9401D5555555555553FCD585E0E696 F1DC0015555555555564012AAAAAAAAAAA940200000000000003FD16C16C16C16C0C00 15555555555564012AAAAAAAAAAA940215555555555553FD45C8A0CE51294C00155555 55555564012AAAAAAAAAAA94022AAAAAAAAAAAA3FD77D88E99FAB09C00155555555555 64012AAAAAAAAAAA94023FFFFFFFFFFFF3FDACF13579BE022C00155555555555640155 55555555554C0240000000000003FC97530ECA8641EC00155555555555640155555555 55554C022AAAAAAAAAAAB3FC518A6DFC3518AC0015555555555564015555555555554C 0215555555555563FC11D33F5617839C0015555555555564015555555555554C020000 0000000013FBB05B05B05B05CC0015555555555564015555555555554C01D555555555 5573FB49327104EE2CBC0015555555555564015555555555554C01AAAAAAAAAAAAC3FA DC598153D0F89C0015555555555564015555555555554C0180000000000013FA3E93E9 3E93E91C0015555555555564015555555555554C0155555555555563F9722833944A54 CC0015555555555564015555555555554C012AAAAAAAAAAAB3F82F684BDA12F48C0015 555555555564015555555555554C010000000000000BF523456789ABE00C0015555555 555564015555555555554C00AAAAAAAAAAAABBF81722833944A7BC0015555555555564 015555555555554C005555555555556BF8A8C536FE1A8EAC0015555555555564015555 555555554C000000000000001BF8D950C83FB7310C0015555555555564015555555555 554BFF5555555555558BF8A8C536FE1A8ECC0015555555555564015555555555554BFE 555555555555BBF81722833944A7FC0015555555555564015555555555554BCC800000 0000000BF523456789ABE35C00155555555555640155555555555543FE555555555554 F3F82F684BDA12F3CC00155555555555640155555555555543FF55555555555523F972 2833944A545C00155555555555640155555555555543FFFFFFFFFFFFFFC3FA3E93E93E 93E88C001555555555556401555555555555440055555555555533FADC598153D0F7FC 0015555555555564015555555555554400AAAAAAAAAAAA83FB49327104EE2C5C001555 5555555564015555555555554400FFFFFFFFFFFFD3FBB05B05B05B053C001555555555 55640155555555555544012AAAAAAAAAAA93FC11D33F5617835C001555555555556401 555555555555440155555555555543FC518A6DFC35186C001555555555556401555555 55555544017FFFFFFFFFFFF3FC97530ECA8641CC001555555555556401555555555555 4401AAAAAAAAAAAAA3FCE32D21C10AFF7C0015555555555564015555555555554401D5 555555555553FD1A8C536FE1A8BC001555555555556401555555555555440200000000 000003FD468ACF13579BDC001555555555556401555555555555440215555555555553 FD759203CAE7590C00155555555555640155555555555544022AAAAAAAAAAAA3FDA7A1 F19690E06C00155555555555640155555555555544023FFFFFFFFFFFF3FDDCBA987654 31EC0015555555555564017FFFFFFFFFFFFC0240000000000003FCFFFFFFFFFFFFFC00 15555555555564017FFFFFFFFFFFFC022AAAAAAAAAAAB3FCBA375F31AED6BC00155555 55555564017FFFFFFFFFFFFC0215555555555563FC7A80308B9141AC00155555555555 64017FFFFFFFFFFFFC0200000000000013FC40DA740DA740FC0015555555555564017F FFFFFFFFFFFC01D5555555555573FC0D4629B7F0D47C0015555555555564017FFFFFFF FFFFFC01AAAAAAAAAAAAC3FBBF86A314DBF85C0015555555555564017FFFFFFFFFFFFC 0180000000000013FB70A3D70A3D70AC0015555555555564017FFFFFFFFFFFFC015555 5555555563FB2DE3EF5006115C0015555555555564017FFFFFFFFFFFFC012AAAAAAAAA AAB3FAEE8DD7CC6BB56C0015555555555564017FFFFFFFFFFFFC0100000000000003FA 9999999999993C0015555555555564017FFFFFFFFFFFFC00AAAAAAAAAAAAB3FA5CEB24 0795CE5C0015555555555564017FFFFFFFFFFFFC0055555555555563FA388277166054 9C0015555555555564017FFFFFFFFFFFFC0000000000000013FA2C5F92C5F92BFC0015 555555555564017FFFFFFFFFFFFBFF55555555555583FA3882771660548C0015555555 555564017FFFFFFFFFFFFBFE555555555555B3FA5CEB240795CE4C0015555555555564 017FFFFFFFFFFFFBCC80000000000003FA9999999999992C0015555555555564017FFF FFFFFFFFF3FE555555555554F3FAEE8DD7CC6BB52C0015555555555564017FFFFFFFFF FFF3FF55555555555523FB2DE3EF5006113C0015555555555564017FFFFFFFFFFFF3FF FFFFFFFFFFFFC3FB70A3D70A3D705C0015555555555564017FFFFFFFFFFFF400555555 55555533FBBF86A314DBF81C0015555555555564017FFFFFFFFFFFF400AAAAAAAAAAAA 83FC0D4629B7F0D43C0015555555555564017FFFFFFFFFFFF400FFFFFFFFFFFFD3FC40 DA740DA740AC0015555555555564017FFFFFFFFFFFF4012AAAAAAAAAAA93FC7A80308B 91416C0015555555555564017FFFFFFFFFFFF40155555555555543FCBA375F31AED67C 0015555555555564017FFFFFFFFFFFF4017FFFFFFFFFFFF3FCFFFFFFFFFFFFDC001555 5555555564017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD25ED097B425ECC001555555555 5564017FFFFFFFFFFFF401D5555555555553FD4EE2CC0A9E87BC001555555555556401 7FFFFFFFFFFFF40200000000000003FD7AE147AE147AEC0015555555555564017FFFFF FFFFFFF40215555555555553FDA9E87C65A4381C0015555555555564017FFFFFFFFFFF F4022AAAAAAAAAAAA3FDDBF86A314DBF6C0015555555555564017FFFFFFFFFFFF4023F FFFFFFFFFFF3FE0888888888887C001555555555556401AAAAAAAAAAAAAC0240000000 000003FD38E38E38E38E3C001555555555556401AAAAAAAAAAAAAC022AAAAAAAAAAAB3 FD15FF3DD1BAF99C001555555555556401AAAAAAAAAAAAAC0215555555555563FCEC47 4CFD585E2C001555555555556401AAAAAAAAAAAAAC0200000000000013FCB2A1907F6E 5D7C001555555555556401AAAAAAAAAAAAAC01D5555555555573FC7F0D4629B7F0EC00 1555555555556401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FC518A6DFC3518BC00155555 5555556401AAAAAAAAAAAAAC0180000000000013FC2A1907F6E5D4DC00155555555555 6401AAAAAAAAAAAAAC0155555555555563FC08B91419CA252C001555555555556401AA AAAAAAAAAAAC012AAAAAAAAAAAB3FBDAD524C9C413BC001555555555556401AAAAAAAA AAAAAC0100000000000003FBB05B05B05B059C001555555555556401AAAAAAAAAAAAAC 00AAAAAAAAAAAAB3FB9203CAE759202C001555555555556401AAAAAAAAAAAAAC005555 5555555563FB7FCF746EBE634C001555555555556401AAAAAAAAAAAAAC000000000000 0013FB79BE02468ACEFC001555555555556401AAAAAAAAAAAAABFF55555555555583FB 7FCF746EBE634C001555555555556401AAAAAAAAAAAAABFE555555555555B3FB9203CA E759201C001555555555556401AAAAAAAAAAAAABCC80000000000003FBB05B05B05B05 8C001555555555556401AAAAAAAAAAAAA3FE555555555554F3FBDAD524C9C4138C0015 55555555556401AAAAAAAAAAAAA3FF55555555555523FC08B91419CA251C0015555555 55556401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FC2A1907F6E5D4BC0015555555555564 01AAAAAAAAAAAAA40055555555555533FC518A6DFC35189C001555555555556401AAAA AAAAAAAAA400AAAAAAAAAAAA83FC7F0D4629B7F0BC001555555555556401AAAAAAAAAA AAA400FFFFFFFFFFFFD3FCB2A1907F6E5D2C001555555555556401AAAAAAAAAAAAA401 2AAAAAAAAAAA93FCEC474CFD585DDC001555555555556401AAAAAAAAAAAAA401555555 55555543FD15FF3DD1BAF98C001555555555556401AAAAAAAAAAAAA4017FFFFFFFFFFF F3FD38E38E38E38E2C001555555555556401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FD5E D097B425ED0C001555555555556401AAAAAAAAAAAAA401D5555555555553FD87C65A43 8215FC001555555555556401AAAAAAAAAAAAA40200000000000003FDB3C4D5E6F8092C 001555555555556401AAAAAAAAAAAAA40215555555555553FDE2CC0A9E87C65C001555 555555556401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FE0A6DFC3518A6DC001555555555 556401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE24FA4FA4FA4F9C001555555555556401 D555555555555C0240000000000003FD7654320FEDCBBC001555555555556401D55555 5555555C022AAAAAAAAAAAB3FD536FE1A8C5371C001555555555556401D55555555555 5C0215555555555563FD33944A55B66C9C001555555555556401D555555555555C0200 000000000013FD16C16C16C16C3C001555555555556401D555555555555C01D5555555 555573FCF9EE8DD7CC6BEC001555555555556401D555555555555C01AAAAAAAAAAAAC3 FCCC6BB5AA4993AC001555555555556401D555555555555C0180000000000013FCA4FA 4FA4FA4FCC001555555555556401D555555555555C0155555555555563FC839A5BC7DE A02C001555555555556401D555555555555C012AAAAAAAAAAAB3FC684BDA12F684DC00 1555555555556401D555555555555C0100000000000003FC530ECA8641FDCC00155555 5555556401D555555555555C00AAAAAAAAAAAAB3FC43E32D21C10B0C00155555555555 6401D555555555555C0055555555555563FC3AC901E573AC9C001555555555556401D5 55555555555C0000000000000013FC37C048D159E27C001555555555556401D5555555 55555BFF55555555555583FC3AC901E573ACAC001555555555556401D555555555555B FE555555555555B3FC43E32D21C10B0C001555555555556401D555555555555BCC8000 0000000003FC530ECA8641FDCC001555555555556401D5555555555553FE5555555555 54F3FC684BDA12F684CC001555555555556401D5555555555553FF55555555555523FC 839A5BC7DEA01C001555555555556401D5555555555553FFFFFFFFFFFFFFC3FCA4FA4F A4FA4FAC001555555555556401D55555555555540055555555555533FCCC6BB5AA4993 8C001555555555556401D555555555555400AAAAAAAAAAAA83FCF9EE8DD7CC6BAC0015 55555555556401D555555555555400FFFFFFFFFFFFD3FD16C16C16C16C1C0015555555 55556401D5555555555554012AAAAAAAAAAA93FD33944A55B66C7C0015555555555564 01D55555555555540155555555555543FD536FE1A8C536FC001555555555556401D555 5555555554017FFFFFFFFFFFF3FD7654320FEDCBAC001555555555556401D555555555 555401AAAAAAAAAAAAA3FD9C413B8B302A8C001555555555556401D555555555555401 D5555555555553FDC536FE1A8C537C001555555555556401D555555555555402000000 00000003FDF13579BE0246AC001555555555556401D555555555555402155555555555 53FE101E573AC901EC001555555555556401D5555555555554022AAAAAAAAAAAA3FE29 264E209DC59C001555555555556401D5555555555554023FFFFFFFFFFFF3FE43B2A190 7F6E5C0015555555555564020000000000000C0240000000000003FDB851EB851EB86C 0015555555555564020000000000000C022AAAAAAAAAAAB3FD956D9B1DF623CC001555 5555555564020000000000000C0215555555555563FD759203CAE7594C001555555555 5564020000000000000C0200000000000013FD58BF258BF258EC001555555555556402 0000000000000C01D5555555555573FD3EF500611722AC001555555555556402000000 0000000C01AAAAAAAAAAAAC3FD2833944A55B68C001555555555556402000000000000 0C0180000000000013FD147AE147AE149C0015555555555564020000000000000C0155 555555555563FD03CAE759203CCC0015555555555564020000000000000C012AAAAAAA AAAAB3FCEC474CFD585E3C0015555555555564020000000000000C0100000000000003 FCD70A3D70A3D72C0015555555555564020000000000000C00AAAAAAAAAAAAB3FCC7DE A00C22E46C0015555555555564020000000000000C0055555555555563FCBEC474CFD5 85FC0015555555555564020000000000000C0000000000000013FCBBBBBBBBBBBBDC00 15555555555564020000000000000BFF55555555555583FCBEC474CFD5860C00155555 55555564020000000000000BFE555555555555B3FCC7DEA00C22E46C00155555555555 64020000000000000BCC80000000000003FCD70A3D70A3D72C00155555555555640200 000000000003FE555555555554F3FCEC474CFD585E2C00155555555555640200000000 000003FF55555555555523FD03CAE759203CCC00155555555555640200000000000003 FFFFFFFFFFFFFFC3FD147AE147AE148C00155555555555640200000000000004005555 5555555533FD2833944A55B67C0015555555555564020000000000000400AAAAAAAAAA AA83FD3EF5006117229C0015555555555564020000000000000400FFFFFFFFFFFFD3FD 58BF258BF258CC00155555555555640200000000000004012AAAAAAAAAAA93FD759203 CAE7591C001555555555556402000000000000040155555555555543FD956D9B1DF623 BC00155555555555640200000000000004017FFFFFFFFFFFF3FDB851EB851EB85C0015 555555555564020000000000000401AAAAAAAAAAAAA3FDDE3EF50061173C0015555555 555564020000000000000401D5555555555553FE039A5BC7DEA01C0015555555555564 02000000000000040200000000000003FE199999999999AC0015555555555564020000 00000000040215555555555553FE311D33F561784C0015555555555564020000000000 0004022AAAAAAAAAAAA3FE4A252ADB363BEC0015555555555564020000000000000402 3FFFFFFFFFFFF3FE64B17E4B17E4BC0015555555555564021555555555555C02400000 00000003FDFEDCBA9876543C0015555555555564021555555555555C022AAAAAAAAAAA B3FDDBF86A314DBF9C0015555555555564021555555555555C0215555555555563FDBC 1CD2DE3EF51C0015555555555564021555555555555C0200000000000013FD9F49F49F 49F4BC0015555555555564021555555555555C01D5555555555573FD857FCF746EBE7C 0015555555555564021555555555555C01AAAAAAAAAAAAC3FD6EBE635DAD525C001555 5555555564021555555555555C0180000000000013FD5B05B05B05B06C001555555555 5564021555555555555C0155555555555563FD4A55B66C77D89C001555555555556402 1555555555555C012AAAAAAAAAAAB3FD3CAE759203CAEC001555555555556402155555 5555555C0100000000000003FD320FEDCBA9876C001555555555556402155555555555 5C00AAAAAAAAAAAAB3FD2A7A1F19690E0C0015555555555564021555555555555C0055 555555555563FD25ED097B425EDC0015555555555564021555555555555C0000000000 000013FD2468ACF13579CC0015555555555564021555555555555BFF55555555555583 FD25ED097B425EDC0015555555555564021555555555555BFE555555555555B3FD2A7A 1F19690E0C0015555555555564021555555555555BCC80000000000003FD320FEDCBA9 876C00155555555555640215555555555553FE555555555554F3FD3CAE759203CAEC00 155555555555640215555555555553FF55555555555523FD4A55B66C77D89C00155555 555555640215555555555553FFFFFFFFFFFFFFC3FD5B05B05B05B05C00155555555555 6402155555555555540055555555555533FD6EBE635DAD524C00155555555555640215 55555555555400AAAAAAAAAAAA83FD857FCF746EBE6C00155555555555640215555555 55555400FFFFFFFFFFFFD3FD9F49F49F49F49C00155555555555640215555555555554 012AAAAAAAAAAA93FDBC1CD2DE3EF4EC00155555555555640215555555555554015555 5555555543FDDBF86A314DBF8C00155555555555640215555555555554017FFFFFFFFF FFF3FDFEDCBA9876542C0015555555555564021555555555555401AAAAAAAAAAAAA3FE 1264E209DC598C0015555555555564021555555555555401D5555555555553FE26DFC3 518A6E0C001555555555556402155555555555540200000000000003FE3CDF01234567 9C001555555555556402155555555555540215555555555553FE54629B7F0D462C0015 5555555555640215555555555554022AAAAAAAAAAAA3FE6D6A9264E209DC0015555555 5555640215555555555554023FFFFFFFFFFFF3FE87F6E5D4C3B29C0015555555555564 022AAAAAAAAAAAAC0240000000000003FE24FA4FA4FA4FAC0015555555555564022AAA AAAAAAAAAC022AAAAAAAAAAAB3FE1388277166055C0015555555555564022AAAAAAAAA AAAC0215555555555563FE039A5BC7DEA00C0015555555555564022AAAAAAAAAAAAC02 00000000000013FDEA61D950C83FBC0015555555555564022AAAAAAAAAAAAC01D55555 55555573FDD097B425ED097C0015555555555564022AAAAAAAAAAAAC01AAAAAAAAAAAA C3FDB9D6480F2B9D5C0015555555555564022AAAAAAAAAAAAC0180000000000013FDA6 1D950C83FB6C0015555555555564022AAAAAAAAAAAAC0155555555555563FD956D9B1D F6239C0015555555555564022AAAAAAAAAAAAC012AAAAAAAAAAAB3FD87C65A438215EC 0015555555555564022AAAAAAAAAAAAC0100000000000003FD7D27D27D27D26C001555 5555555564022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FD759203CAE7590C001555555555 5564022AAAAAAAAAAAAC0055555555555563FD7104EE2CC0A9DC001555555555556402 2AAAAAAAAAAAAC0000000000000013FD6F8091A2B3C4CC0015555555555564022AAAAA AAAAAAABFF55555555555583FD7104EE2CC0A9DC0015555555555564022AAAAAAAAAAA ABFE555555555555B3FD759203CAE7590C0015555555555564022AAAAAAAAAAAABCC80 000000000003FD7D27D27D27D26C0015555555555564022AAAAAAAAAAAA3FE55555555 5554F3FD87C65A438215EC0015555555555564022AAAAAAAAAAAA3FF55555555555523 FD956D9B1DF6239C0015555555555564022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FDA61D 950C83FB5C0015555555555564022AAAAAAAAAAAA40055555555555533FDB9D6480F2B 9D4C0015555555555564022AAAAAAAAAAAA400AAAAAAAAAAAA83FDD097B425ED096C00 15555555555564022AAAAAAAAAAAA400FFFFFFFFFFFFD3FDEA61D950C83F9C00155555 55555564022AAAAAAAAAAAA4012AAAAAAAAAAA93FE039A5BC7DE9FFC00155555555555 64022AAAAAAAAAAAA40155555555555543FE1388277166054C0015555555555564022A AAAAAAAAAAA4017FFFFFFFFFFFF3FE24FA4FA4FA4F9C0015555555555564022AAAAAAA AAAAA401AAAAAAAAAAAAA3FE37F0D4629B7F0C0015555555555564022AAAAAAAAAAAA4 01D5555555555553FE4C6BB5AA49938C0015555555555564022AAAAAAAAAAAA4020000 0000000003FE626AF37C048D1C0015555555555564022AAAAAAAAAAAA4021555555555 5553FE79EE8DD7CC6BAC0015555555555564022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE 92F684BDA12F5C0015555555555564022AAAAAAAAAAAA4023FFFFFFFFFFFF3FEAD82D8 2D82D81C0015555555555564023FFFFFFFFFFFFC0240000000000003FE4CCCCCCCCCCC BC0015555555555564023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE3B5AA49938827C0015 555555555564023FFFFFFFFFFFFC0215555555555563FE2B6CD8EFB11D2C0015555555 555564023FFFFFFFFFFFFC0200000000000013FE1D0369D0369D0C0015555555555564 023FFFFFFFFFFFFC01D5555555555573FE101E573AC901EC0015555555555564023FFF FFFFFFFFFC01AAAAAAAAAAAAC3FE04BDA12F684BDC0015555555555564023FFFFFFFFF FFFC0180000000000013FDF5C28F5C28F5AC0015555555555564023FFFFFFFFFFFFC01 55555555555563FDE512956D9B1DDC0015555555555564023FFFFFFFFFFFFC012AAAAA AAAAAAB3FDD76B549327102C0015555555555564023FFFFFFFFFFFFC01000000000000 03FDCCCCCCCCCCCCAC0015555555555564023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FDC5 36FE1A8C534C0015555555555564023FFFFFFFFFFFFC0055555555555563FDC0A9E87C 65A41C0015555555555564023FFFFFFFFFFFFC0000000000000013FDBF258BF258BF0C 0015555555555564023FFFFFFFFFFFFBFF55555555555583FDC0A9E87C65A41C001555 5555555564023FFFFFFFFFFFFBFE555555555555B3FDC536FE1A8C534C001555555555 5564023FFFFFFFFFFFFBCC80000000000003FDCCCCCCCCCCCCAC001555555555556402 3FFFFFFFFFFFF3FE555555555554F3FDD76B549327102C0015555555555564023FFFFF FFFFFFF3FF55555555555523FDE512956D9B1DDC0015555555555564023FFFFFFFFFFF F3FFFFFFFFFFFFFFC3FDF5C28F5C28F59C0015555555555564023FFFFFFFFFFFF40055 555555555533FE04BDA12F684BCC0015555555555564023FFFFFFFFFFFF400AAAAAAAA AAAA83FE101E573AC901DC0015555555555564023FFFFFFFFFFFF400FFFFFFFFFFFFD3 FE1D0369D0369CFC0015555555555564023FFFFFFFFFFFF4012AAAAAAAAAAA93FE2B6C D8EFB11D1C0015555555555564023FFFFFFFFFFFF40155555555555543FE3B5AA49938 826C0015555555555564023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE4CCCCCCCCCCCBC00 15555555555564023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE5FC3518A6DFC2C00155555 55555564023FFFFFFFFFFFF401D5555555555553FE743E32D21C109C00155555555555 64023FFFFFFFFFFFF40200000000000003FE8A3D70A3D70A3C0015555555555564023F FFFFFFFFFFF40215555555555553FEA1C10AFF9EE8CC0015555555555564023FFFFFFF FFFFF4022AAAAAAAAAAAA3FEBAC901E573AC7C0015555555555564023FFFFFFFFFFFF4 023FFFFFFFFFFFF3FED555555555553C000000000000001C024000000000000C024000 0000000003FCDDDDDDDDDDDE0C000000000000001C024000000000000C022AAAAAAAAA AAB3FC98153D0F8CB4DC000000000000001C024000000000000C0215555555555563FC 585E0E696F1FCC000000000000001C024000000000000C0200000000000013FC1EB851 EB851F0C000000000000001C024000000000000C01D5555555555573FBD6480F2B9D65 0C000000000000001C024000000000000C01AAAAAAAAAAAAC3FB7B425ED097B49C0000 00000000001C024000000000000C0180000000000013FB2C5F92C5F92CDC0000000000 00001C024000000000000C0155555555555563FAD33F5617839B0C000000000000001C 024000000000000C012AAAAAAAAAAAB3FA66054F43E32DDC000000000000001C024000 000000000C0100000000000003FA111111111111AC000000000000001C024000000000 000C00AAAAAAAAAAAAB3F9A8C536FE1A8D8C000000000000001C024000000000000C00 55555555555563F95FF3DD1BAF99FC000000000000001C024000000000000C00000000 00000013F947AE147AE148CC000000000000001C024000000000000BFF555555555555 83F95FF3DD1BAF99FC000000000000001C024000000000000BFE555555555555B3F9A8 C536FE1A8D5C000000000000001C024000000000000BCC80000000000003FA11111111 11119C000000000000001C0240000000000003FE555555555554F3FA66054F43E32D9C 000000000000001C0240000000000003FF55555555555523FAD33F5617839ACC000000 000000001C0240000000000003FFFFFFFFFFFFFFC3FB2C5F92C5F92C9C000000000000 001C02400000000000040055555555555533FB7B425ED097B45C000000000000001C02 4000000000000400AAAAAAAAAAAA83FBD6480F2B9D64AC000000000000001C02400000 0000000400FFFFFFFFFFFFD3FC1EB851EB851ECC000000000000001C02400000000000 04012AAAAAAAAAAA93FC585E0E696F1F8C000000000000001C02400000000000040155 555555555543FC98153D0F8CB49C000000000000001C0240000000000004017FFFFFFF FFFFF3FCDDDDDDDDDDDDEC000000000000001C024000000000000401AAAAAAAAAAAAA3 FD14DBF86A314DDC000000000000001C024000000000000401D5555555555553FD3DD1 BAF98D76CC000000000000001C02400000000000040200000000000003FD69D0369D03 69EC000000000000001C02400000000000040215555555555553FD98D76B5493272C00 0000000000001C0240000000000004022AAAAAAAAAAAA3FDCAE759203CAE7C00000000 0000001C0240000000000004023FFFFFFFFFFFF3FE0000000000000C00000000000000 1C022AAAAAAAAAAABC0240000000000003FC7530ECA864202C000000000000001C022A AAAAAAAAAABC022AAAAAAAAAAAB3FC2F684BDA12F6FC000000000000001C022AAAAAAA AAAABC0215555555555563FBDF623A67EAC3AC000000000000001C022AAAAAAAAAAABC 0200000000000013FB6C16C16C16C25C000000000000001C022AAAAAAAAAAABC01D555 5555555573FB04EE2CC0A9E94C000000000000001C022AAAAAAAAAAABC01AAAAAAAAAA AAC3FA53D0F8CB48719C000000000000001C022AAAAAAAAAAABC0180000000000013F9 6C16C16C16C45C000000000000001C022AAAAAAAAAAABC0155555555555563F7845C8A 0CE51C2C000000000000001C022AAAAAAAAAAABC012AAAAAAAAAAABBF7E573AC901E4E 0C000000000000001C022AAAAAAAAAAABC010000000000000BF923456789ABCBEC0000 00000000001C022AAAAAAAAAAABC00AAAAAAAAAAAABBF99CA252ADB3619C0000000000 00001C022AAAAAAAAAAABC005555555555556BF9E573AC901E551C000000000000001C 022AAAAAAAAAAABC000000000000001BF9FDB97530ECA65C000000000000001C022AAA AAAAAAAABBFF5555555555558BF9E573AC901E552C000000000000001C022AAAAAAAAA AABBFE555555555555BBF99CA252ADB361CC000000000000001C022AAAAAAAAAAABBCC 8000000000000BF923456789ABCC0C000000000000001C022AAAAAAAAAAAB3FE555555 555554FBF7E573AC901E4F9C000000000000001C022AAAAAAAAAAAB3FF555555555555 23F7845C8A0CE51A1C000000000000001C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3F96C 16C16C16C33C000000000000001C022AAAAAAAAAAAB40055555555555533FA53D0F8CB 48711C000000000000001C022AAAAAAAAAAAB400AAAAAAAAAAAA83FB04EE2CC0A9E8EC 000000000000001C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FB6C16C16C16C1CC000000 000000001C022AAAAAAAAAAAB4012AAAAAAAAAAA93FBDF623A67EAC33C000000000000 001C022AAAAAAAAAAAB40155555555555543FC2F684BDA12F6BC000000000000001C02 2AAAAAAAAAAAB4017FFFFFFFFFFFF3FC7530ECA864200C000000000000001C022AAAAA AAAAAAB401AAAAAAAAAAAAA3FCC10AFF9EE8DDBC000000000000001C022AAAAAAAAAAA B401D5555555555553FD097B425ED097DC000000000000001C022AAAAAAAAAAAB40200 000000000003FD3579BE02468B0C000000000000001C022AAAAAAAAAAAB40215555555 555553FD6480F2B9D6483C000000000000001C022AAAAAAAAAAAB4022AAAAAAAAAAAA3 FD9690E0857FCF8C000000000000001C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FDCBA9 876543211C000000000000001C021555555555556C0240000000000003FC159E26AF37 C0AC000000000000001C021555555555556C022AAAAAAAAAAAB3FB9FAB0BC1CD2EEC00 0000000000001C021555555555556C0215555555555563FB203CAE759204AC00000000 0000001C021555555555556C0200000000000013FA59E26AF37C06AC00000000000000 1C021555555555556C01D5555555555573F91722833944A91C000000000000001C0215 55555555556C01AAAAAAAAAAAACBF753D0F8CB4863BC000000000000001C0215555555 55556C018000000000001BF9907F6E5D4C37FC000000000000001C021555555555556C 015555555555556BFA4DBF86A314DA6C000000000000001C021555555555556C012AAA AAAAAAAABBFABAF98D76B547AC000000000000001C021555555555556C010000000000 000BFB07F6E5D4C3B1EC000000000000001C021555555555556C00AAAAAAAAAAAABBFB 264E209DC5976C000000000000001C021555555555556C005555555555556BFB388277 1660544C000000000000001C021555555555556C000000000000001BFB3E93E93E93E8 9C000000000000001C021555555555556BFF5555555555558BFB3882771660544C0000 00000000001C021555555555556BFE555555555555BBFB264E209DC5977C0000000000 00001C021555555555556BCC8000000000000BFB07F6E5D4C3B20C000000000000001C 0215555555555563FE555555555554FBFABAF98D76B547FC000000000000001C021555 5555555563FF5555555555552BFA4DBF86A314DACC000000000000001C021555555555 5563FFFFFFFFFFFFFFCBF9907F6E5D4C38CC000000000000001C021555555555556400 5555555555553BF753D0F8CB48673C000000000000001C021555555555556400AAAAAA AAAAAA83F91722833944A78C000000000000001C021555555555556400FFFFFFFFFFFF D3FA59E26AF37C058C000000000000001C0215555555555564012AAAAAAAAAAA93FB20 3CAE7592044C000000000000001C02155555555555640155555555555543FB9FAB0BC1 CD2E6C000000000000001C0215555555555564017FFFFFFFFFFFF3FC159E26AF37C08C 000000000000001C021555555555556401AAAAAAAAAAAAA3FC617839A5BC7E3C000000 000000001C021555555555556401D5555555555553FCB363BEC474D03C000000000000 001C02155555555555640200000000000003FD05B05B05B05B4C000000000000001C02 155555555555640215555555555553FD34B78FBD40187C000000000000001C02155555 55555564022AAAAAAAAAAAA3FD66C77D88E99FCC000000000000001C02155555555555 64023FFFFFFFFFFFF3FD9BE02468ACF15C000000000000001C020000000000001C0240 000000000003FB7E4B17E4B17F3C000000000000001C020000000000001C022AAAAAAA AAAAB3FAE573AC901E594C000000000000001C020000000000001C0215555555555563 F9CD2DE3EF500A2C000000000000001C020000000000001C0200000000000013CB2D3C 000000000C000000000000001C020000000000001C01D555555555557BF99CA252ADB3 5F7C000000000000001C020000000000001C01AAAAAAAAAAAACBFA845C8A0CE510BC00 0000000000001C020000000000001C018000000000001BFB1111111111102C00000000 0000001C020000000000001C015555555555556BFB53D0F8CB486F7C00000000000000 1C020000000000001C012AAAAAAAAAAABBFB8A6DFC3518A61C000000000000001C0200 00000000001C010000000000000BFBB4E81B4E81B42C000000000000001C0200000000 00001C00AAAAAAAAAAAABBFBD33F561783999C000000000000001C020000000000001C 005555555555556BFBE573AC901E567C000000000000001C020000000000001C000000 000000001BFBEB851EB851EACC000000000000001C020000000000001BFF5555555555 558BFBE573AC901E567C000000000000001C020000000000001BFE555555555555BBFB D33F56178399AC000000000000001C020000000000001BCC8000000000000BFBB4E81B 4E81B43C000000000000001C0200000000000013FE555555555554FBFB8A6DFC3518A6 3C000000000000001C0200000000000013FF5555555555552BFB53D0F8CB486F9C0000 00000000001C0200000000000013FFFFFFFFFFFFFFCBFB1111111111106C0000000000 00001C0200000000000014005555555555553BFA845C8A0CE5114C000000000000001C 020000000000001400AAAAAAAAAAAA8BF99CA252ADB3614C000000000000001C020000 000000001400FFFFFFFFFFFFD3CA1E14000000000C000000000000001C020000000000 0014012AAAAAAAAAAA93F9CD2DE3EF50083C000000000000001C020000000000001401 55555555555543FAE573AC901E586C000000000000001C0200000000000014017FFFFF FFFFFFF3FB7E4B17E4B17EEC000000000000001C020000000000001401AAAAAAAAAAAA A3FC0AFF9EE8DD7D2C000000000000001C020000000000001401D5555555555553FC5C EB240795CF1C000000000000001C02000000000000140200000000000003FCB4E81B4E 81B56C000000000000001C02000000000000140215555555555553FD097B425ED097EC 000000000000001C0200000000000014022AAAAAAAAAAAA3FD3B8B302A7A1F3C000000 000000001C0200000000000014023FFFFFFFFFFFF3FD70A3D70A3D70CC000000000000 001C01D555555555557C0240000000000003FAC71C71C71C72EC000000000000001C01 D555555555557C022AAAAAAAAAAAB3F95FF3DD1BAF9C0C000000000000001C01D55555 5555557C021555555555556BF83B8B302A7A18CC000000000000001C01D55555555555 7C020000000000001BFA3579BE024688EC000000000000001C01D555555555557C01D5 55555555557BFB01E573AC901D8C000000000000001C01D555555555557C01AAAAAAAA AAAACBFB5CEB240795CE0C000000000000001C01D555555555557C018000000000001B FBABCDF0123455CC000000000000001C01D555555555557C015555555555556BFBEE8D D7CC6BB51C000000000000001C01D555555555557C012AAAAAAAAAAABBFC12956D9B1D F5DC000000000000001C01D555555555557C010000000000000BFC27D27D27D27CEC00 0000000000001C01D555555555557C00AAAAAAAAAAAABBFC36FE1A8C536FAC00000000 0000001C01D555555555557C005555555555556BFC401845C8A0CE1C00000000000000 1C01D555555555557C000000000000001BFC4320FEDCBA983C000000000000001C01D5 55555555557BFF5555555555558BFC401845C8A0CE0C000000000000001C01D5555555 55557BFE555555555555BBFC36FE1A8C536FAC000000000000001C01D555555555557B CC8000000000000BFC27D27D27D27CEC000000000000001C01D5555555555573FE5555 55555554FBFC12956D9B1DF5EC000000000000001C01D5555555555573FF5555555555 552BFBEE8DD7CC6BB52C000000000000001C01D5555555555573FFFFFFFFFFFFFFCBFB ABCDF01234560C000000000000001C01D5555555555574005555555555553BFB5CEB24 0795CE4C000000000000001C01D555555555557400AAAAAAAAAAAA8BFB01E573AC901D FC000000000000001C01D555555555557400FFFFFFFFFFFFDBFA3579BE02468A2C0000 00000000001C01D5555555555574012AAAAAAAAAAA9BF83B8B302A7A1CAC0000000000 00001C01D55555555555740155555555555543F95FF3DD1BAF9A3C000000000000001C 01D5555555555574017FFFFFFFFFFFF3FAC71C71C71C727C000000000000001C01D555 555555557401AAAAAAAAAAAAA3FB7B425ED097B4AC000000000000001C01D555555555 557401D5555555555553FC0F8CB487042C4C000000000000001C01D555555555557402 00000000000003FC6789ABCDF0128C000000000000001C01D555555555557402155555 55555553FCC598153D0F8CFC000000000000001C01D5555555555574022AAAAAAAAAAA A3FD14DBF86A314DDC000000000000001C01D5555555555574023FFFFFFFFFFFF3FD49 F49F49F49F5C000000000000001C01AAAAAAAAAAAACC0240000000000003F96C16C16C 16C3CC000000000000001C01AAAAAAAAAAAACC022AAAAAAAAAAABBF8845C8A0CE50BFC 000000000000001C01AAAAAAAAAAAACC021555555555556BFA5FF3DD1BAF97BC000000 000000001C01AAAAAAAAAAAACC020000000000001BFB23456789ABCD3C000000000000 001C01AAAAAAAAAAAACC01D555555555557BFB8A6DFC3518A64C000000000000001C01 AAAAAAAAAAAACC01AAAAAAAAAAAACBFBE573AC901E56CC000000000000001C01AAAAAA AAAAAACC018000000000001BFC1A2B3C4D5E6F4C000000000000001C01AAAAAAAAAAAA CC015555555555556BFC3B8B302A7A1EDC000000000000001C01AAAAAAAAAAAACC012A AAAAAAAAAABBFC56D9B1DF623A2C000000000000001C01AAAAAAAAAAAACC0100000000 00000BFC6C16C16C16C13C000000000000001C01AAAAAAAAAAAACC00AAAAAAAAAAAABB FC7B425ED097B3FC000000000000001C01AAAAAAAAAAAACC005555555555556BFC845C 8A0CE5126C000000000000001C01AAAAAAAAAAAACC000000000000001BFC87654320FE DC8C000000000000001C01AAAAAAAAAAAACBFF5555555555558BFC845C8A0CE5125C00 0000000000001C01AAAAAAAAAAAACBFE555555555555BBFC7B425ED097B3FC00000000 0000001C01AAAAAAAAAAAACBCC8000000000000BFC6C16C16C16C13C00000000000000 1C01AAAAAAAAAAAAC3FE555555555554FBFC56D9B1DF623A3C000000000000001C01AA AAAAAAAAAAC3FF5555555555552BFC3B8B302A7A1EEC000000000000001C01AAAAAAAA AAAAC3FFFFFFFFFFFFFFCBFC1A2B3C4D5E6F5C000000000000001C01AAAAAAAAAAAAC4 005555555555553BFBE573AC901E56FC000000000000001C01AAAAAAAAAAAAC400AAAA AAAAAAAA8BFB8A6DFC3518A69C000000000000001C01AAAAAAAAAAAAC400FFFFFFFFFF FFDBFB23456789ABCDBC000000000000001C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFA 5FF3DD1BAF986C000000000000001C01AAAAAAAAAAAAC4015555555555554BF8845C8A 0CE5109C000000000000001C01AAAAAAAAAAAAC4017FFFFFFFFFFFF3F96C16C16C16C2 6C000000000000001C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3FAE573AC901E580C0000 00000000001C01AAAAAAAAAAAAC401D5555555555553FB9690E0857FCFEC0000000000 00001C01AAAAAAAAAAAAC40200000000000003FC23456789ABCE4C000000000000001C 01AAAAAAAAAAAAC40215555555555553FC8153D0F8CB48AC000000000000001C01AAAA AAAAAAAAC4022AAAAAAAAAAAA3FCE573AC901E575C000000000000001C01AAAAAAAAAA AAC4023FFFFFFFFFFFF3FD27D27D27D27D3C000000000000001C018000000000001C02 4000000000000BF7B4E81B4E81A92C000000000000001C018000000000001C022AAAAA AAAAAABBFA4DBF86A314DA0C000000000000001C018000000000001C02155555555555 6BFB264E209DC5976C000000000000001C018000000000001C020000000000001BFB99 9999999998BC000000000000001C018000000000001C01D555555555557BFC00611722 8338EC000000000000001C018000000000001C01AAAAAAAAAAAACBFC2DE3EF5006112C 000000000000001C018000000000001C018000000000001BFC5555555555550C000000 000000001C018000000000001C015555555555556BFC76B5493271048C000000000000 001C018000000000001C012AAAAAAAAAAABBFC9203CAE7591FDC000000000000001C01 8000000000001C010000000000000BFCA740DA740DA6EC000000000000001C01800000 0000001C00AAAAAAAAAAAABBFCB66C77D88E99AC000000000000001C01800000000000 1C005555555555556BFCBF86A314DBF82C000000000000001C018000000000001C0000 00000000001BFCC28F5C28F5C24C000000000000001C018000000000001BFF55555555 55558BFCBF86A314DBF81C000000000000001C018000000000001BFE555555555555BB FCB66C77D88E99BC000000000000001C018000000000001BCC8000000000000BFCA740 DA740DA6FC000000000000001C0180000000000013FE555555555554FBFC9203CAE759 1FFC000000000000001C0180000000000013FF5555555555552BFC76B549327104AC00 0000000000001C0180000000000013FFFFFFFFFFFFFFCBFC5555555555551C00000000 0000001C0180000000000014005555555555553BFC2DE3EF5006113C00000000000000 1C018000000000001400AAAAAAAAAAAA8BFC0061172283391C000000000000001C0180 00000000001400FFFFFFFFFFFFDBFB9999999999993C000000000000001C0180000000 000014012AAAAAAAAAAA9BFB264E209DC597BC000000000000001C0180000000000014 015555555555554BFA4DBF86A314DB2C000000000000001C0180000000000014017FFF FFFFFFFFFBF7B4E81B4E81AE9C000000000000001C018000000000001401AAAAAAAAAA AAA3F9F19690E085821C000000000000001C018000000000001401D5555555555553FB 203CAE7592046C000000000000001C01800000000000140200000000000003FBD0369D 0369D0FC000000000000001C01800000000000140215555555555553FC4629B7F0D462 EC000000000000001C0180000000000014022AAAAAAAAAAAA3FCAA49938827719C0000 00000000001C0180000000000014023FFFFFFFFFFFF3FD0A3D70A3D70A5C0000000000 00001C015555555555556C024000000000000BF9FDB97530ECA74C000000000000001C 015555555555556C022AAAAAAAAAAABBFB0AFF9EE8DD7C4C000000000000001C015555 555555556C021555555555556BFB8A6DFC3518A66C000000000000001C015555555555 556C020000000000001BFBFDB97530ECA7BC000000000000001C015555555555556C01 D555555555557BFC327104EE2CC06C000000000000001C015555555555556C01AAAAAA AAAAAACBFC5FF3DD1BAF98AC000000000000001C015555555555556C01800000000000 1BFC87654320FEDC8C000000000000001C015555555555556C015555555555556BFCA8 C536FE1A8C2C000000000000001C015555555555556C012AAAAAAAAAAABBFCC413B8B3 02A77C000000000000001C015555555555556C010000000000000BFCD950C83FB72E8C 000000000000001C015555555555556C00AAAAAAAAAAAABBFCE87C65A438214C000000 000000001C015555555555556C005555555555556BFCF19690E0857FBC000000000000 001C015555555555556C000000000000001BFCF49F49F49F49DC000000000000001C01 5555555555556BFF5555555555558BFCF19690E0857FAC000000000000001C01555555 5555556BFE555555555555BBFCE87C65A438214C000000000000001C01555555555555 6BCC8000000000000BFCD950C83FB72E8C000000000000001C0155555555555563FE55 5555555554FBFCC413B8B302A78C000000000000001C0155555555555563FF55555555 55552BFCA8C536FE1A8C3C000000000000001C0155555555555563FFFFFFFFFFFFFFCB FC87654320FEDCAC000000000000001C0155555555555564005555555555553BFC5FF3 DD1BAF98CC000000000000001C015555555555556400AAAAAAAAAAAA8BFC327104EE2C C0AC000000000000001C015555555555556400FFFFFFFFFFFFDBFBFDB97530ECA85C00 0000000000001C0155555555555564012AAAAAAAAAAA9BFB8A6DFC3518A6DC00000000 0000001C0155555555555564015555555555554BFB0AFF9EE8DD7CBC00000000000000 1C0155555555555564017FFFFFFFFFFFFBF9FDB97530ECA82C000000000000001C0155 55555555556401AAAAAAAAAAAAA3F7845C8A0CE5153C000000000000001C0155555555 55556401D5555555555553FA7839A5BC7DEA7C000000000000001C0155555555555564 0200000000000003FB6C16C16C16C1DC000000000000001C0155555555555564021555 5555555553FC1419CA252ADB5C000000000000001C0155555555555564022AAAAAAAAA AAA3FC7839A5BC7DEA0C000000000000001C0155555555555564023FFFFFFFFFFFF3FC E26AF37C048D1C000000000000001C012AAAAAAAAAAABC024000000000000BFAA2B3C4 D5E6F72C000000000000001C012AAAAAAAAAAABC022AAAAAAAAAAABBFB5CEB240795CE 0C000000000000001C012AAAAAAAAAAABC021555555555556BFBDC598153D0F82C0000 00000000001C012AAAAAAAAAAABC020000000000001BFC27D27D27D27CCC0000000000 00001C012AAAAAAAAAAABC01D555555555557BFC5B66C77D88E94C000000000000001C 012AAAAAAAAAAABC01AAAAAAAAAAAACBFC88E99FAB0BC18C000000000000001C012AAA AAAAAAAABC018000000000001BFCB05B05B05B056C000000000000001C012AAAAAAAAA AABC015555555555556BFCD1BAF98D76B50C000000000000001C012AAAAAAAAAAABC01 2AAAAAAAAAAABBFCED097B425ED05C000000000000001C012AAAAAAAAAAABC01000000 0000000BFD0123456789ABBC000000000000001C012AAAAAAAAAAABC00AAAAAAAAAAAA BBFD08B91419CA251C000000000000001C012AAAAAAAAAAABC005555555555556BFD0D 4629B7F0D44C000000000000001C012AAAAAAAAAAABC000000000000001BFD0ECA8641 FDB95C000000000000001C012AAAAAAAAAAABBFF5555555555558BFD0D4629B7F0D44C 000000000000001C012AAAAAAAAAAABBFE555555555555BBFD08B91419CA251C000000 000000001C012AAAAAAAAAAABBCC8000000000000BFD0123456789ABBC000000000000 001C012AAAAAAAAAAAB3FE555555555554FBFCED097B425ED06C000000000000001C01 2AAAAAAAAAAAB3FF5555555555552BFCD1BAF98D76B51C000000000000001C012AAAAA AAAAAAB3FFFFFFFFFFFFFFCBFCB05B05B05B058C000000000000001C012AAAAAAAAAAA B4005555555555553BFC88E99FAB0BC1AC000000000000001C012AAAAAAAAAAAB400AA AAAAAAAAAA8BFC5B66C77D88E98C000000000000001C012AAAAAAAAAAAB400FFFFFFFF FFFFDBFC27D27D27D27D1C000000000000001C012AAAAAAAAAAAB4012AAAAAAAAAAA9B FBDC598153D0F89C000000000000001C012AAAAAAAAAAAB4015555555555554BFB5CEB 240795CE7C000000000000001C012AAAAAAAAAAAB4017FFFFFFFFFFFFBFAA2B3C4D5E6 F79C000000000000001C012AAAAAAAAAAAB401AAAAAAAAAAAAABF8CD2DE3EF50036C00 0000000000001C012AAAAAAAAAAAB401D5555555555553F9A8C536FE1A8DEC00000000 0000001C012AAAAAAAAAAAB40200000000000003FB1A2B3C4D5E702C00000000000000 1C012AAAAAAAAAAAB40215555555555553FBD6480F2B9D64EC000000000000001C012A AAAAAAAAAAB4022AAAAAAAAAAAA3FC4F43E32D21C12C000000000000001C012AAAAAAA AAAAB4023FFFFFFFFFFFF3FCB97530ECA8643C000000000000001C010000000000000C 024000000000000BFB111111111110DC000000000000001C010000000000000C022AAA AAAAAAAABBFB9CA252ADB3634C000000000000001C010000000000000C021555555555 556BFC0E0857FCF746BC000000000000001C010000000000000C020000000000001BFC 47AE147AE1476C000000000000001C010000000000000C01D555555555557BFC7B425E D097B3EC000000000000001C010000000000000C01AAAAAAAAAAAACBFCA8C536FE1A8C 2C000000000000001C010000000000000C018000000000001BFCD0369D0369D00C0000 00000000001C010000000000000C015555555555556BFCF19690E0857FAC0000000000 00001C010000000000000C012AAAAAAAAAAABBFD0672894AB6CD8C000000000000001C 010000000000000C010000000000000BFD1111111111110C000000000000001C010000 000000000C00AAAAAAAAAAAABBFD18A6DFC3518A6C000000000000001C010000000000 000C005555555555556BFD1D33F56178399C000000000000001C010000000000000C00 0000000000001BFD1EB851EB851EAC000000000000001C010000000000000BFF555555 5555558BFD1D33F56178399C000000000000001C010000000000000BFE555555555555 BBFD18A6DFC3518A6C000000000000001C010000000000000BCC8000000000000BFD11 11111111110C000000000000001C0100000000000003FE555555555554FBFD0672894A B6CD8C000000000000001C0100000000000003FF5555555555552BFCF19690E0857FBC 000000000000001C0100000000000003FFFFFFFFFFFFFFCBFCD0369D0369D02C000000 000000001C0100000000000004005555555555553BFCA8C536FE1A8C4C000000000000 001C010000000000000400AAAAAAAAAAAA8BFC7B425ED097B42C000000000000001C01 0000000000000400FFFFFFFFFFFFDBFC47AE147AE147BC000000000000001C01000000 00000004012AAAAAAAAAAA9BFC0E0857FCF746FC000000000000001C01000000000000 04015555555555554BFB9CA252ADB363BC000000000000001C0100000000000004017F FFFFFFFFFFFBFB1111111111111C000000000000001C010000000000000401AAAAAAAA AAAAABF9E573AC901E56BC000000000000001C010000000000000401D5555555555553 F853D0F8CB4871CC000000000000001C01000000000000040200000000000003FAB4E8 1B4E81B5CC000000000000001C01000000000000040215555555555553FB9690E0857F CFAC000000000000001C0100000000000004022AAAAAAAAAAAA3FC2F684BDA12F68C00 0000000000001C0100000000000004023FFFFFFFFFFFF3FC9999999999999C00000000 0000001C00AAAAAAAAAAAABC024000000000000BFB3E93E93E93E8DC00000000000000 1C00AAAAAAAAAAAABC022AAAAAAAAAAABBFBCA252ADB363B4C000000000000001C00AA AAAAAAAAAABC021555555555556BFC24C9C413B8B2BC000000000000001C00AAAAAAAA AAAABC020000000000001BFC5E6F8091A2B36C000000000000001C00AAAAAAAAAAAABC 01D555555555557BFC9203CAE7591FEC000000000000001C00AAAAAAAAAAAABC01AAAA AAAAAAAACBFCBF86A314DBF82C000000000000001C00AAAAAAAAAAAABC018000000000 001BFCE6F8091A2B3C0C000000000000001C00AAAAAAAAAAAABC015555555555556BFD 042BFE7BA375DC000000000000001C00AAAAAAAAAAAABC012AAAAAAAAAAABBFD11D33F 5617838C000000000000001C00AAAAAAAAAAAABC010000000000000BFD1C71C71C71C7 0C000000000000001C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD240795CEB2406C0000 00000000001C00AAAAAAAAAAAABC005555555555556BFD2894AB6CD8EF9C0000000000 00001C00AAAAAAAAAAAABC000000000000001BFD2A1907F6E5D4AC000000000000001C 00AAAAAAAAAAAABBFF5555555555558BFD2894AB6CD8EF9C000000000000001C00AAAA AAAAAAAABBFE555555555555BBFD240795CEB2406C000000000000001C00AAAAAAAAAA AABBCC8000000000000BFD1C71C71C71C70C000000000000001C00AAAAAAAAAAAAB3FE 555555555554FBFD11D33F5617838C000000000000001C00AAAAAAAAAAAAB3FF555555 5555552BFD042BFE7BA375DC000000000000001C00AAAAAAAAAAAAB3FFFFFFFFFFFFFF CBFCE6F8091A2B3C1C000000000000001C00AAAAAAAAAAAAB4005555555555553BFCBF 86A314DBF84C000000000000001C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFC9203CAE7 59202C000000000000001C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFC5E6F8091A2B3BC 000000000000001C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFC24C9C413B8B2FC000000 000000001C00AAAAAAAAAAAAB4015555555555554BFBCA252ADB363BBC000000000000 001C00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFB3E93E93E93E91C000000000000001C00 AAAAAAAAAAAAB401AAAAAAAAAAAAABFA4DBF86A314DB6C000000000000001C00AAAAAA AAAAAAB401D555555555555BF4845C8A0CE4E44C000000000000001C00AAAAAAAAAAAA B40200000000000003FA59E26AF37C05CC000000000000001C00AAAAAAAAAAAAB40215 555555555553FB690E0857FCF7AC000000000000001C00AAAAAAAAAAAAB4022AAAAAAA AAAAA3FC18A6DFC3518A8C000000000000001C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3 FC82D82D82D82D9C000000000000001C005555555555556C024000000000000BFB59E2 6AF37C045C000000000000001C005555555555556C022AAAAAAAAAAABBFBE573AC901E 56CC000000000000001C005555555555556C021555555555556BFC327104EE2CC07C00 0000000000001C005555555555556C020000000000001BFC6C16C16C16C12C00000000 0000001C005555555555556C01D555555555557BFC9FAB0BC1CD2DAC00000000000000 1C005555555555556C01AAAAAAAAAAAACBFCCD2DE3EF5005EC000000000000001C0055 55555555556C018000000000001BFCF49F49F49F49CC000000000000001C0055555555 55556C015555555555556BFD0AFF9EE8DD7CBC000000000000001C005555555555556C 012AAAAAAAAAAABBFD18A6DFC3518A6C000000000000001C005555555555556C010000 000000000BFD23456789ABCDEC000000000000001C005555555555556C00AAAAAAAAAA AABBFD2ADB363BEC474C000000000000001C005555555555556C005555555555556BFD 2F684BDA12F67C000000000000001C005555555555556C000000000000001BFD30ECA8 641FDB8C000000000000001C005555555555556BFF5555555555558BFD2F684BDA12F6 7C000000000000001C005555555555556BFE555555555555BBFD2ADB363BEC474C0000 00000000001C005555555555556BCC8000000000000BFD23456789ABCDEC0000000000 00001C0055555555555563FE555555555554FBFD18A6DFC3518A6C000000000000001C 0055555555555563FF5555555555552BFD0AFF9EE8DD7CBC000000000000001C005555 5555555563FFFFFFFFFFFFFFCBFCF49F49F49F49DC000000000000001C005555555555 5564005555555555553BFCCD2DE3EF50060C000000000000001C005555555555556400 AAAAAAAAAAAA8BFC9FAB0BC1CD2DEC000000000000001C005555555555556400FFFFFF FFFFFFDBFC6C16C16C16C17C000000000000001C0055555555555564012AAAAAAAAAAA 9BFC327104EE2CC0BC000000000000001C0055555555555564015555555555554BFBE5 73AC901E573C000000000000001C0055555555555564017FFFFFFFFFFFFBFB59E26AF3 7C049C000000000000001C005555555555556401AAAAAAAAAAAAABFA845C8A0CE5126C 000000000000001C005555555555556401D555555555555BF7E573AC901E548C000000 000000001C00555555555555640200000000000003FA23456789ABCECC000000000000 001C00555555555555640215555555555553FB4DBF86A314DC2C000000000000001C00 55555555555564022AAAAAAAAAAAA3FC0AFF9EE8DD7CCC000000000000001C00555555 55555564023FFFFFFFFFFFF3FC7530ECA8641FDC000000000000001C00000000000000 1C024000000000000BFB62FC962FC962DC000000000000001C000000000000001C022A AAAAAAAAAABBFBEE8DD7CC6BB54C000000000000001C000000000000001C0215555555 55556BFC36FE1A8C536FBC000000000000001C000000000000001C020000000000001B FC70A3D70A3D706C000000000000001C000000000000001C01D555555555557BFCA438 215FF3DCEC000000000000001C000000000000001C01AAAAAAAAAAAACBFCD1BAF98D76 B52C000000000000001C000000000000001C018000000000001BFCF92C5F92C5F90C00 0000000000001C000000000000001C015555555555556BFD0D4629B7F0D45C00000000 0000001C000000000000001C012AAAAAAAAAAABBFD1AED6A9264E20C00000000000000 1C000000000000001C010000000000000BFD258BF258BF258C000000000000001C0000 00000000001C00AAAAAAAAAAAABBFD2D21C10AFF9EEC000000000000001C0000000000 00001C005555555555556BFD31AED6A9264E1C000000000000001C000000000000001C 000000000000001BFD3333333333332C000000000000001C000000000000001BFF5555 555555558BFD31AED6A9264E1C000000000000001C000000000000001BFE5555555555 55BBFD2D21C10AFF9EEC000000000000001C000000000000001BCC8000000000000BFD 258BF258BF258C000000000000001C0000000000000013FE555555555554FBFD1AED6A 9264E20C000000000000001C0000000000000013FF5555555555552BFD0D4629B7F0D4 5C000000000000001C0000000000000013FFFFFFFFFFFFFFCBFCF92C5F92C5F91C0000 00000000001C0000000000000014005555555555553BFCD1BAF98D76B53C0000000000 00001C000000000000001400AAAAAAAAAAAA8BFCA438215FF3DD2C000000000000001C 000000000000001400FFFFFFFFFFFFDBFC70A3D70A3D70BC000000000000001C000000 0000000014012AAAAAAAAAAA9BFC36FE1A8C536FFC000000000000001C000000000000 0014015555555555554BFBEE8DD7CC6BB5BC000000000000001C000000000000001401 7FFFFFFFFFFFFBFB62FC962FC9631C000000000000001C000000000000001401AAAAAA AAAAAAABFA9690E0857FCF6C000000000000001C000000000000001401D55555555555 5BF83B8B302A7A1E4C000000000000001C00000000000000140200000000000003FA11 1111111111CC000000000000001C00000000000000140215555555555553FB44A55B66 C77DAC000000000000001C0000000000000014022AAAAAAAAAAAA3FC0672894AB6CD8C 000000000000001C0000000000000014023FFFFFFFFFFFF3FC70A3D70A3D709C000000 000000001BFF5555555555558C024000000000000BFB59E26AF37C045C000000000000 001BFF5555555555558C022AAAAAAAAAAABBFBE573AC901E56CC000000000000001BFF 5555555555558C021555555555556BFC327104EE2CC07C000000000000001BFF555555 5555558C020000000000001BFC6C16C16C16C12C000000000000001BFF555555555555 8C01D555555555557BFC9FAB0BC1CD2DAC000000000000001BFF5555555555558C01AA AAAAAAAAAACBFCCD2DE3EF5005EC000000000000001BFF5555555555558C0180000000 00001BFCF49F49F49F49CC000000000000001BFF5555555555558C015555555555556B FD0AFF9EE8DD7CBC000000000000001BFF5555555555558C012AAAAAAAAAAABBFD18A6 DFC3518A6C000000000000001BFF5555555555558C010000000000000BFD23456789AB CDEC000000000000001BFF5555555555558C00AAAAAAAAAAAABBFD2ADB363BEC474C00 0000000000001BFF5555555555558C005555555555556BFD2F684BDA12F67C00000000 0000001BFF5555555555558C000000000000001BFD30ECA8641FDB8C00000000000000 1BFF5555555555558BFF5555555555558BFD2F684BDA12F67C000000000000001BFF55 55555555558BFE555555555555BBFD2ADB363BEC474C000000000000001BFF55555555 55558BCC8000000000000BFD23456789ABCDEC000000000000001BFF55555555555583 FE555555555554FBFD18A6DFC3518A6C000000000000001BFF55555555555583FF5555 555555552BFD0AFF9EE8DD7CBC000000000000001BFF55555555555583FFFFFFFFFFFF FFCBFCF49F49F49F49DC000000000000001BFF55555555555584005555555555553BFC CD2DE3EF50060C000000000000001BFF5555555555558400AAAAAAAAAAAA8BFC9FAB0B C1CD2DEC000000000000001BFF5555555555558400FFFFFFFFFFFFDBFC6C16C16C16C1 7C000000000000001BFF55555555555584012AAAAAAAAAAA9BFC327104EE2CC0BC0000 00000000001BFF55555555555584015555555555554BFBE573AC901E573C0000000000 00001BFF55555555555584017FFFFFFFFFFFFBFB59E26AF37C049C000000000000001B FF5555555555558401AAAAAAAAAAAAABFA845C8A0CE5126C000000000000001BFF5555 555555558401D555555555555BF7E573AC901E548C000000000000001BFF5555555555 55840200000000000003FA23456789ABCECC000000000000001BFF5555555555558402 15555555555553FB4DBF86A314DC2C000000000000001BFF55555555555584022AAAAA AAAAAAA3FC0AFF9EE8DD7CCC000000000000001BFF55555555555584023FFFFFFFFFFF F3FC7530ECA8641FDC000000000000001BFE555555555555BC024000000000000BFB3E 93E93E93E91C000000000000001BFE555555555555BC022AAAAAAAAAAABBFBCA252ADB 363B8C000000000000001BFE555555555555BC021555555555556BFC24C9C413B8B2DC 000000000000001BFE555555555555BC020000000000001BFC5E6F8091A2B38C000000 000000001BFE555555555555BC01D555555555557BFC9203CAE759200C000000000000 001BFE555555555555BC01AAAAAAAAAAAACBFCBF86A314DBF84C000000000000001BFE 555555555555BC018000000000001BFCE6F8091A2B3C2C000000000000001BFE555555 555555BC015555555555556BFD042BFE7BA375EC000000000000001BFE555555555555 BC012AAAAAAAAAAABBFD11D33F5617839C000000000000001BFE555555555555BC0100 00000000000BFD1C71C71C71C71C000000000000001BFE555555555555BC00AAAAAAAA AAAABBFD240795CEB2407C000000000000001BFE555555555555BC005555555555556B FD2894AB6CD8EFAC000000000000001BFE555555555555BC000000000000001BFD2A19 07F6E5D4BC000000000000001BFE555555555555BBFF5555555555558BFD2894AB6CD8 EFAC000000000000001BFE555555555555BBFE555555555555BBFD240795CEB2407C00 0000000000001BFE555555555555BBCC8000000000000BFD1C71C71C71C71C00000000 0000001BFE555555555555B3FE555555555554FBFD11D33F5617839C00000000000000 1BFE555555555555B3FF5555555555552BFD042BFE7BA375EC000000000000001BFE55 5555555555B3FFFFFFFFFFFFFFCBFCE6F8091A2B3C3C000000000000001BFE55555555 5555B4005555555555553BFCBF86A314DBF86C000000000000001BFE555555555555B4 00AAAAAAAAAAAA8BFC9203CAE759204C000000000000001BFE555555555555B400FFFF FFFFFFFFDBFC5E6F8091A2B3DC000000000000001BFE555555555555B4012AAAAAAAAA AA9BFC24C9C413B8B31C000000000000001BFE555555555555B4015555555555554BFB CA252ADB363BFC000000000000001BFE555555555555B4017FFFFFFFFFFFFBFB3E93E9 3E93E95C000000000000001BFE555555555555B401AAAAAAAAAAAAABFA4DBF86A314DB EC000000000000001BFE555555555555B401D555555555555BF4845C8A0CE5044C0000 00000000001BFE555555555555B40200000000000003FA59E26AF37C054C0000000000 00001BFE555555555555B40215555555555553FB690E0857FCF76C000000000000001B FE555555555555B4022AAAAAAAAAAAA3FC18A6DFC3518A6C000000000000001BFE5555 55555555B4023FFFFFFFFFFFF3FC82D82D82D82D7C000000000000001BCC8000000000 000C024000000000000BFB111111111110DC000000000000001BCC8000000000000C02 2AAAAAAAAAAABBFB9CA252ADB3634C000000000000001BCC8000000000000C02155555 5555556BFC0E0857FCF746BC000000000000001BCC8000000000000C02000000000000 1BFC47AE147AE1476C000000000000001BCC8000000000000C01D555555555557BFC7B 425ED097B3EC000000000000001BCC8000000000000C01AAAAAAAAAAAACBFCA8C536FE 1A8C2C000000000000001BCC8000000000000C018000000000001BFCD0369D0369D00C 000000000000001BCC8000000000000C015555555555556BFCF19690E0857FAC000000 000000001BCC8000000000000C012AAAAAAAAAAABBFD0672894AB6CD8C000000000000 001BCC8000000000000C010000000000000BFD1111111111110C000000000000001BCC 8000000000000C00AAAAAAAAAAAABBFD18A6DFC3518A6C000000000000001BCC800000 0000000C005555555555556BFD1D33F56178399C000000000000001BCC800000000000 0C000000000000001BFD1EB851EB851EAC000000000000001BCC8000000000000BFF55 55555555558BFD1D33F56178399C000000000000001BCC8000000000000BFE55555555 5555BBFD18A6DFC3518A6C000000000000001BCC8000000000000BCC8000000000000B FD1111111111110C000000000000001BCC80000000000003FE555555555554FBFD0672 894AB6CD8C000000000000001BCC80000000000003FF5555555555552BFCF19690E085 7FBC000000000000001BCC80000000000003FFFFFFFFFFFFFFCBFCD0369D0369D02C00 0000000000001BCC80000000000004005555555555553BFCA8C536FE1A8C4C00000000 0000001BCC8000000000000400AAAAAAAAAAAA8BFC7B425ED097B42C00000000000000 1BCC8000000000000400FFFFFFFFFFFFDBFC47AE147AE147BC000000000000001BCC80 000000000004012AAAAAAAAAAA9BFC0E0857FCF746FC000000000000001BCC80000000 000004015555555555554BFB9CA252ADB363BC000000000000001BCC80000000000004 017FFFFFFFFFFFFBFB1111111111111C000000000000001BCC8000000000000401AAAA AAAAAAAAABF9E573AC901E56BC000000000000001BCC8000000000000401D555555555 5553F853D0F8CB4871CC000000000000001BCC800000000000040200000000000003FA B4E81B4E81B5CC000000000000001BCC800000000000040215555555555553FB9690E0 857FCFAC000000000000001BCC80000000000004022AAAAAAAAAAAA3FC2F684BDA12F6 8C000000000000001BCC80000000000004023FFFFFFFFFFFF3FC9999999999999C0000 000000000013FE555555555554FC024000000000000BFAA2B3C4D5E6F7AC0000000000 000013FE555555555554FC022AAAAAAAAAAABBFB5CEB240795CE4C0000000000000013 FE555555555554FC021555555555556BFBDC598153D0F86C0000000000000013FE5555 55555554FC020000000000001BFC27D27D27D27CEC0000000000000013FE5555555555 54FC01D555555555557BFC5B66C77D88E96C0000000000000013FE555555555554FC01 AAAAAAAAAAAACBFC88E99FAB0BC1AC0000000000000013FE555555555554FC01800000 0000001BFCB05B05B05B058C0000000000000013FE555555555554FC01555555555555 6BFCD1BAF98D76B52C0000000000000013FE555555555554FC012AAAAAAAAAAABBFCED 097B425ED07C0000000000000013FE555555555554FC010000000000000BFD01234567 89ABCC0000000000000013FE555555555554FC00AAAAAAAAAAAABBFD08B91419CA252C 0000000000000013FE555555555554FC005555555555556BFD0D4629B7F0D45C000000 0000000013FE555555555554FC000000000000001BFD0ECA8641FDB96C000000000000 0013FE555555555554FBFF5555555555558BFD0D4629B7F0D45C0000000000000013FE 555555555554FBFE555555555555BBFD08B91419CA252C0000000000000013FE555555 555554FBCC8000000000000BFD0123456789ABCC0000000000000013FE555555555554 F3FE555555555554FBFCED097B425ED08C0000000000000013FE555555555554F3FF55 55555555552BFCD1BAF98D76B53C0000000000000013FE555555555554F3FFFFFFFFFF FFFFCBFCB05B05B05B05AC0000000000000013FE555555555554F4005555555555553B FC88E99FAB0BC1CC0000000000000013FE555555555554F400AAAAAAAAAAAA8BFC5B66 C77D88E9AC0000000000000013FE555555555554F400FFFFFFFFFFFFDBFC27D27D27D2 7D3C0000000000000013FE555555555554F4012AAAAAAAAAAA9BFBDC598153D0F8DC00 00000000000013FE555555555554F4015555555555554BFB5CEB240795CEBC00000000 00000013FE555555555554F4017FFFFFFFFFFFFBFAA2B3C4D5E6F81C00000000000000 13FE555555555554F401AAAAAAAAAAAAABF8CD2DE3EF50056C0000000000000013FE55 5555555554F401D5555555555553F9A8C536FE1A8CEC0000000000000013FE55555555 5554F40200000000000003FB1A2B3C4D5E6FEC0000000000000013FE555555555554F4 0215555555555553FBD6480F2B9D64AC0000000000000013FE555555555554F4022AAA AAAAAAAAA3FC4F43E32D21C10C0000000000000013FE555555555554F4023FFFFFFFFF FFF3FCB97530ECA8641C0000000000000013FF5555555555552C024000000000000BF9 FDB97530ECA74C0000000000000013FF5555555555552C022AAAAAAAAAAABBFB0AFF9E E8DD7C4C0000000000000013FF5555555555552C021555555555556BFB8A6DFC3518A6 AC0000000000000013FF5555555555552C020000000000001BFBFDB97530ECA7FC0000 000000000013FF5555555555552C01D555555555557BFC327104EE2CC08C0000000000 000013FF5555555555552C01AAAAAAAAAAAACBFC5FF3DD1BAF98CC0000000000000013 FF5555555555552C018000000000001BFC87654320FEDCAC0000000000000013FF5555 555555552C015555555555556BFCA8C536FE1A8C2C0000000000000013FF5555555555 552C012AAAAAAAAAAABBFCC413B8B302A77C0000000000000013FF5555555555552C01 0000000000000BFCD950C83FB72E8C0000000000000013FF5555555555552C00AAAAAA AAAAAABBFCE87C65A438214C0000000000000013FF5555555555552C00555555555555 6BFCF19690E0857FBC0000000000000013FF5555555555552C000000000000001BFCF4 9F49F49F49FC0000000000000013FF5555555555552BFF5555555555558BFCF19690E0 857FBC0000000000000013FF5555555555552BFE555555555555BBFCE87C65A438215C 0000000000000013FF5555555555552BCC8000000000000BFCD950C83FB72E9C000000 0000000013FF55555555555523FE555555555554FBFCC413B8B302A79C000000000000 0013FF55555555555523FF5555555555552BFCA8C536FE1A8C4C0000000000000013FF 55555555555523FFFFFFFFFFFFFFCBFC87654320FEDCBC0000000000000013FF555555 55555524005555555555553BFC5FF3DD1BAF98DC0000000000000013FF555555555555 2400AAAAAAAAAAAA8BFC327104EE2CC0BC0000000000000013FF5555555555552400FF FFFFFFFFFFDBFBFDB97530ECA87C0000000000000013FF55555555555524012AAAAAAA AAAA9BFB8A6DFC3518A6FC0000000000000013FF55555555555524015555555555554B FB0AFF9EE8DD7CDC0000000000000013FF55555555555524017FFFFFFFFFFFFBF9FDB9 7530ECA8AC0000000000000013FF5555555555552401AAAAAAAAAAAAA3F7845C8A0CE5 133C0000000000000013FF5555555555552401D5555555555553FA7839A5BC7DEA3C00 00000000000013FF555555555555240200000000000003FB6C16C16C16C1BC00000000 00000013FF555555555555240215555555555553FC1419CA252ADB4C00000000000000 13FF55555555555524022AAAAAAAAAAAA3FC7839A5BC7DE9FC0000000000000013FF55 555555555524023FFFFFFFFFFFF3FCE26AF37C048D0C0000000000000013FFFFFFFFFF FFFFCC024000000000000BF7B4E81B4E81B12C0000000000000013FFFFFFFFFFFFFFCC 022AAAAAAAAAAABBFA4DBF86A314DB0C0000000000000013FFFFFFFFFFFFFFCC021555 555555556BFB264E209DC597EC0000000000000013FFFFFFFFFFFFFFCC020000000000 001BFB9999999999993C0000000000000013FFFFFFFFFFFFFFCC01D555555555557BFC 0061172283392C0000000000000013FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFC2DE3EF 5006116C0000000000000013FFFFFFFFFFFFFFCC018000000000001BFC555555555555 4C0000000000000013FFFFFFFFFFFFFFCC015555555555556BFC76B549327104CC0000 000000000013FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFC9203CAE759201C0000000000 000013FFFFFFFFFFFFFFCC010000000000000BFCA740DA740DA72C0000000000000013 FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFCB66C77D88E99EC0000000000000013FFFFFF FFFFFFFFCC005555555555556BFCBF86A314DBF86C0000000000000013FFFFFFFFFFFF FFCC000000000000001BFCC28F5C28F5C28C0000000000000013FFFFFFFFFFFFFFCBFF 5555555555558BFCBF86A314DBF85C0000000000000013FFFFFFFFFFFFFFCBFE555555 555555BBFCB66C77D88E99FC0000000000000013FFFFFFFFFFFFFFCBCC800000000000 0BFCA740DA740DA73C0000000000000013FFFFFFFFFFFFFFC3FE555555555554FBFC92 03CAE759203C0000000000000013FFFFFFFFFFFFFFC3FF5555555555552BFC76B54932 7104EC0000000000000013FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFC5555555555555C 0000000000000013FFFFFFFFFFFFFFC4005555555555553BFC2DE3EF5006117C000000 0000000013FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFC0061172283395C000000000000 0013FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFB999999999999BC0000000000000013FF FFFFFFFFFFFFC4012AAAAAAAAAAA9BFB264E209DC5983C0000000000000013FFFFFFFF FFFFFFC4015555555555554BFA4DBF86A314DC2C0000000000000013FFFFFFFFFFFFFF C4017FFFFFFFFFFFFBF7B4E81B4E81B69C0000000000000013FFFFFFFFFFFFFFC401AA AAAAAAAAAAA3F9F19690E085801C0000000000000013FFFFFFFFFFFFFFC401D5555555 555553FB203CAE759203EC0000000000000013FFFFFFFFFFFFFFC40200000000000003 FBD0369D0369D07C0000000000000013FFFFFFFFFFFFFFC40215555555555553FC4629 B7F0D462AC0000000000000013FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FCAA49938827 715C0000000000000013FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FD0A3D70A3D70A3C00 00000000000014005555555555553C0240000000000003F96C16C16C16C1CC00000000 00000014005555555555553C022AAAAAAAAAAABBF8845C8A0CE50FFC00000000000000 14005555555555553C021555555555556BFA5FF3DD1BAF983C00000000000000140055 55555555553C020000000000001BFB23456789ABCD7C00000000000000140055555555 55553C01D555555555557BFB8A6DFC3518A68C0000000000000014005555555555553C 01AAAAAAAAAAAACBFBE573AC901E570C0000000000000014005555555555553C018000 000000001BFC1A2B3C4D5E6F6C0000000000000014005555555555553C015555555555 556BFC3B8B302A7A1F0C0000000000000014005555555555553C012AAAAAAAAAAABBFC 56D9B1DF623A5C0000000000000014005555555555553C010000000000000BFC6C16C1 6C16C16C0000000000000014005555555555553C00AAAAAAAAAAAABBFC7B425ED097B4 2C0000000000000014005555555555553C005555555555556BFC845C8A0CE5129C0000 000000000014005555555555553C000000000000001BFC87654320FEDCBC0000000000 000014005555555555553BFF5555555555558BFC845C8A0CE5128C0000000000000014 005555555555553BFE555555555555BBFC7B425ED097B42C0000000000000014005555 555555553BCC8000000000000BFC6C16C16C16C16C0000000000000014005555555555 5533FE555555555554FBFC56D9B1DF623A6C00000000000000140055555555555533FF 5555555555552BFC3B8B302A7A1F1C00000000000000140055555555555533FFFFFFFF FFFFFFCBFC1A2B3C4D5E6F8C0000000000000014005555555555553400555555555555 3BFBE573AC901E575C0000000000000014005555555555553400AAAAAAAAAAAA8BFB8A 6DFC3518A6FC0000000000000014005555555555553400FFFFFFFFFFFFDBFB23456789 ABCE1C00000000000000140055555555555534012AAAAAAAAAAA9BFA5FF3DD1BAF992C 00000000000000140055555555555534015555555555554BF8845C8A0CE5139C000000 00000000140055555555555534017FFFFFFFFFFFF3F96C16C16C16C0EC000000000000 0014005555555555553401AAAAAAAAAAAAA3FAE573AC901E574C000000000000001400 5555555555553401D5555555555553FB9690E0857FCF8C000000000000001400555555 555555340200000000000003FC23456789ABCE0C000000000000001400555555555555 340215555555555553FC8153D0F8CB487C00000000000000140055555555555534022A AAAAAAAAAAA3FCE573AC901E572C00000000000000140055555555555534023FFFFFFF FFFFF3FD27D27D27D27D1C000000000000001400AAAAAAAAAAAA8C0240000000000003 FAC71C71C71C71EC000000000000001400AAAAAAAAAAAA8C022AAAAAAAAAAAB3F95FF3 DD1BAF9A0C000000000000001400AAAAAAAAAAAA8C021555555555556BF83B8B302A7A 1CCC000000000000001400AAAAAAAAAAAA8C020000000000001BFA3579BE024689EC00 0000000000001400AAAAAAAAAAAA8C01D555555555557BFB01E573AC901E0C00000000 0000001400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFB5CEB240795CE8C00000000000000 1400AAAAAAAAAAAA8C018000000000001BFBABCDF01234564C000000000000001400AA AAAAAAAAAA8C015555555555556BFBEE8DD7CC6BB59C000000000000001400AAAAAAAA AAAA8C012AAAAAAAAAAABBFC12956D9B1DF61C000000000000001400AAAAAAAAAAAA8C 010000000000000BFC27D27D27D27D2C000000000000001400AAAAAAAAAAAA8C00AAAA AAAAAAAABBFC36FE1A8C536FEC000000000000001400AAAAAAAAAAAA8C005555555555 556BFC401845C8A0CE5C000000000000001400AAAAAAAAAAAA8C000000000000001BFC 4320FEDCBA987C000000000000001400AAAAAAAAAAAA8BFF5555555555558BFC401845 C8A0CE4C000000000000001400AAAAAAAAAAAA8BFE555555555555BBFC36FE1A8C536F EC000000000000001400AAAAAAAAAAAA8BCC8000000000000BFC27D27D27D27D2C0000 00000000001400AAAAAAAAAAAA83FE555555555554FBFC12956D9B1DF62C0000000000 00001400AAAAAAAAAAAA83FF5555555555552BFBEE8DD7CC6BB5AC0000000000000014 00AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFBABCDF01234568C000000000000001400AAAA AAAAAAAA84005555555555553BFB5CEB240795CECC000000000000001400AAAAAAAAAA AA8400AAAAAAAAAAAA8BFB01E573AC901E7C000000000000001400AAAAAAAAAAAA8400 FFFFFFFFFFFFDBFA3579BE02468B2C000000000000001400AAAAAAAAAAAA84012AAAAA AAAAAA9BF83B8B302A7A20AC000000000000001400AAAAAAAAAAAA8401555555555555 43F95FF3DD1BAF983C000000000000001400AAAAAAAAAAAA84017FFFFFFFFFFFF3FAC7 1C71C71C717C000000000000001400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FB7B425ED0 97B42C000000000000001400AAAAAAAAAAAA8401D5555555555553FC0F8CB487042C0C 000000000000001400AAAAAAAAAAAA840200000000000003FC6789ABCDF0124C000000 000000001400AAAAAAAAAAAA840215555555555553FCC598153D0F8CBC000000000000 001400AAAAAAAAAAAA84022AAAAAAAAAAAA3FD14DBF86A314DBC000000000000001400 AAAAAAAAAAAA84023FFFFFFFFFFFF3FD49F49F49F49F3C000000000000001400FFFFFF FFFFFFDC0240000000000003FB7E4B17E4B17E5C000000000000001400FFFFFFFFFFFF DC022AAAAAAAAAAAB3FAE573AC901E57CC000000000000001400FFFFFFFFFFFFDC0215 555555555563F9CD2DE3EF5006AC000000000000001400FFFFFFFFFFFFDC0200000000 000013C934F0000000000C000000000000001400FFFFFFFFFFFFDC01D555555555557B F99CA252ADB362FC000000000000001400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFA845C 8A0CE5127C000000000000001400FFFFFFFFFFFFDC018000000000001BFB1111111111 110C000000000000001400FFFFFFFFFFFFDC015555555555556BFB53D0F8CB48703C00 0000000000001400FFFFFFFFFFFFDC012AAAAAAAAAAABBFB8A6DFC3518A6DC00000000 0000001400FFFFFFFFFFFFDC010000000000000BFBB4E81B4E81B4EC00000000000000 1400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFBD33F5617839A5C000000000000001400FF FFFFFFFFFFDC005555555555556BFBE573AC901E573C000000000000001400FFFFFFFF FFFFDC000000000000001BFBEB851EB851EBAC000000000000001400FFFFFFFFFFFFDB FF5555555555558BFBE573AC901E574C000000000000001400FFFFFFFFFFFFDBFE5555 55555555BBFBD33F5617839A7C000000000000001400FFFFFFFFFFFFDBCC8000000000 000BFBB4E81B4E81B50C000000000000001400FFFFFFFFFFFFD3FE555555555554FBFB 8A6DFC3518A70C000000000000001400FFFFFFFFFFFFD3FF5555555555552BFB53D0F8 CB48706C000000000000001400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFB111111111111 3C000000000000001400FFFFFFFFFFFFD4005555555555553BFA845C8A0CE512EC0000 00000000001400FFFFFFFFFFFFD400AAAAAAAAAAAA8BF99CA252ADB3648C0000000000 00001400FFFFFFFFFFFFD400FFFFFFFFFFFFDBC903D8000000000C0000000000000014 00FFFFFFFFFFFFD4012AAAAAAAAAAA93F9CD2DE3EF5004FC000000000000001400FFFF FFFFFFFFD40155555555555543FAE573AC901E56CC000000000000001400FFFFFFFFFF FFD4017FFFFFFFFFFFF3FB7E4B17E4B17E1C000000000000001400FFFFFFFFFFFFD401 AAAAAAAAAAAAA3FC0AFF9EE8DD7CBC000000000000001400FFFFFFFFFFFFD401D55555 55555553FC5CEB240795CEBC000000000000001400FFFFFFFFFFFFD402000000000000 03FCB4E81B4E81B4FC000000000000001400FFFFFFFFFFFFD40215555555555553FD09 7B425ED097BC000000000000001400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD3B8B302A 7A1F0C000000000000001400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FD70A3D70A3D709C 0000000000000014012AAAAAAAAAAA9C0240000000000003FC159E26AF37C03C000000 0000000014012AAAAAAAAAAA9C022AAAAAAAAAAAB3FB9FAB0BC1CD2E0C000000000000 0014012AAAAAAAAAAA9C0215555555555563FB203CAE759203CC000000000000001401 2AAAAAAAAAAA9C0200000000000013FA59E26AF37C04EC0000000000000014012AAAAA AAAAAA9C01D5555555555573F91722833944A59C0000000000000014012AAAAAAAAAAA 9C01AAAAAAAAAAAACBF753D0F8CB4871BC0000000000000014012AAAAAAAAAAA9C0180 00000000001BF9907F6E5D4C3B7C0000000000000014012AAAAAAAAAAA9C0155555555 55556BFA4DBF86A314DC2C0000000000000014012AAAAAAAAAAA9C012AAAAAAAAAAABB FABAF98D76B5496C0000000000000014012AAAAAAAAAAA9C010000000000000BFB07F6 E5D4C3B2CC0000000000000014012AAAAAAAAAAA9C00AAAAAAAAAAAABBFB264E209DC5 984C0000000000000014012AAAAAAAAAAA9C005555555555556BFB3882771660552C00 00000000000014012AAAAAAAAAAA9C000000000000001BFB3E93E93E93E97C00000000 00000014012AAAAAAAAAAA9BFF5555555555558BFB3882771660552C00000000000000 14012AAAAAAAAAAA9BFE555555555555BBFB264E209DC5985C0000000000000014012A AAAAAAAAAA9BCC8000000000000BFB07F6E5D4C3B2EC0000000000000014012AAAAAAA AAAA93FE555555555554FBFABAF98D76B549BC0000000000000014012AAAAAAAAAAA93 FF5555555555552BFA4DBF86A314DC8C0000000000000014012AAAAAAAAAAA93FFFFFF FFFFFFFFCBF9907F6E5D4C3C4C0000000000000014012AAAAAAAAAAA94005555555555 553BF753D0F8CB48753C0000000000000014012AAAAAAAAAAA9400AAAAAAAAAAAA83F9 1722833944A40C0000000000000014012AAAAAAAAAAA9400FFFFFFFFFFFFD3FA59E26A F37C03CC0000000000000014012AAAAAAAAAAA94012AAAAAAAAAAA93FB203CAE759203 6C0000000000000014012AAAAAAAAAAA940155555555555543FB9FAB0BC1CD2D8C0000 000000000014012AAAAAAAAAAA94017FFFFFFFFFFFF3FC159E26AF37C01C0000000000 000014012AAAAAAAAAAA9401AAAAAAAAAAAAA3FC617839A5BC7DCC0000000000000014 012AAAAAAAAAAA9401D5555555555553FCB363BEC474CFCC0000000000000014012AAA AAAAAAAA940200000000000003FD05B05B05B05B0C0000000000000014012AAAAAAAAA AA940215555555555553FD34B78FBD40183C0000000000000014012AAAAAAAAAAA9402 2AAAAAAAAAAAA3FD66C77D88E99F9C0000000000000014012AAAAAAAAAAA94023FFFFF FFFFFFF3FD9BE02468ACF11C0000000000000014015555555555554C02400000000000 03FC7530ECA8641FDC0000000000000014015555555555554C022AAAAAAAAAAAB3FC2F 684BDA12F69C0000000000000014015555555555554C0215555555555563FBDF623A67 EAC30C0000000000000014015555555555554C0200000000000013FB6C16C16C16C1AC 0000000000000014015555555555554C01D5555555555573FB04EE2CC0A9E89C000000 0000000014015555555555554C01AAAAAAAAAAAAC3FA53D0F8CB48703C000000000000 0014015555555555554C0180000000000013F96C16C16C16C19C000000000000001401 5555555555554C0155555555555563F7845C8A0CE5112C000000000000001401555555 5555554C012AAAAAAAAAAABBF7E573AC901E590C000000000000001401555555555555 4C010000000000000BF923456789ABCEAC0000000000000014015555555555554C00AA AAAAAAAAAABBF99CA252ADB3645C0000000000000014015555555555554C0055555555 55556BF9E573AC901E57DC0000000000000014015555555555554C000000000000001B F9FDB97530ECA91C0000000000000014015555555555554BFF5555555555558BF9E573 AC901E57EC0000000000000014015555555555554BFE555555555555BBF99CA252ADB3 648C0000000000000014015555555555554BCC8000000000000BF923456789ABCECC00 000000000000140155555555555543FE555555555554FBF7E573AC901E5A9C00000000 000000140155555555555543FF55555555555523F7845C8A0CE50F1C00000000000000 140155555555555543FFFFFFFFFFFFFFC3F96C16C16C16C07C00000000000000140155 5555555555440055555555555533FA53D0F8CB486FBC00000000000000140155555555 55554400AAAAAAAAAAAA83FB04EE2CC0A9E83C00000000000000140155555555555544 00FFFFFFFFFFFFD3FB6C16C16C16C11C00000000000000140155555555555544012AAA AAAAAAAA93FBDF623A67EAC28C00000000000000140155555555555544015555555555 5543FC2F684BDA12F65C00000000000000140155555555555544017FFFFFFFFFFFF3FC 7530ECA8641FBC0000000000000014015555555555554401AAAAAAAAAAAAA3FCC10AFF 9EE8DD6C0000000000000014015555555555554401D5555555555553FD097B425ED097 BC000000000000001401555555555555440200000000000003FD3579BE02468ADC0000 00000000001401555555555555440215555555555553FD6480F2B9D6480C0000000000 0000140155555555555544022AAAAAAAAAAAA3FD9690E0857FCF5C0000000000000014 0155555555555544023FFFFFFFFFFFF3FDCBA987654320EC0000000000000014017FFF FFFFFFFFFC0240000000000003FCDDDDDDDDDDDDEC0000000000000014017FFFFFFFFF FFFC022AAAAAAAAAAAB3FC98153D0F8CB4AC0000000000000014017FFFFFFFFFFFFC02 15555555555563FC585E0E696F1F9C0000000000000014017FFFFFFFFFFFFC02000000 00000013FC1EB851EB851EEC0000000000000014017FFFFFFFFFFFFC01D55555555555 73FBD6480F2B9D64BC0000000000000014017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FB7B 425ED097B43C0000000000000014017FFFFFFFFFFFFC0180000000000013FB2C5F92C5 F92C8C0000000000000014017FFFFFFFFFFFFC0155555555555563FAD33F5617839A5C 0000000000000014017FFFFFFFFFFFFC012AAAAAAAAAAAB3FA66054F43E32D2C000000 0000000014017FFFFFFFFFFFFC0100000000000003FA111111111110FC000000000000 0014017FFFFFFFFFFFFC00AAAAAAAAAAAAB3F9A8C536FE1A8C2C000000000000001401 7FFFFFFFFFFFFC0055555555555563F95FF3DD1BAF989C0000000000000014017FFFFF FFFFFFFC0000000000000013F947AE147AE1476C0000000000000014017FFFFFFFFFFF FBFF55555555555583F95FF3DD1BAF989C0000000000000014017FFFFFFFFFFFFBFE55 5555555555B3F9A8C536FE1A8BFC0000000000000014017FFFFFFFFFFFFBCC80000000 000003FA111111111110EC0000000000000014017FFFFFFFFFFFF3FE555555555554F3 FA66054F43E32CEC0000000000000014017FFFFFFFFFFFF3FF55555555555523FAD33F 5617839A1C0000000000000014017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FB2C5F92C5F9 2C4C0000000000000014017FFFFFFFFFFFF40055555555555533FB7B425ED097B3FC00 00000000000014017FFFFFFFFFFFF400AAAAAAAAAAAA83FBD6480F2B9D645C00000000 00000014017FFFFFFFFFFFF400FFFFFFFFFFFFD3FC1EB851EB851E9C00000000000000 14017FFFFFFFFFFFF4012AAAAAAAAAAA93FC585E0E696F1F5C0000000000000014017F FFFFFFFFFFF40155555555555543FC98153D0F8CB46C0000000000000014017FFFFFFF FFFFF4017FFFFFFFFFFFF3FCDDDDDDDDDDDDCC0000000000000014017FFFFFFFFFFFF4 01AAAAAAAAAAAAA3FD14DBF86A314DBC0000000000000014017FFFFFFFFFFFF401D555 5555555553FD3DD1BAF98D76BC0000000000000014017FFFFFFFFFFFF4020000000000 0003FD69D0369D0369DC0000000000000014017FFFFFFFFFFFF40215555555555553FD 98D76B5493270C0000000000000014017FFFFFFFFFFFF4022AAAAAAAAAAAA3FDCAE759 203CAE6C0000000000000014017FFFFFFFFFFFF4023FFFFFFFFFFFF3FDFFFFFFFFFFFF EC000000000000001401AAAAAAAAAAAAAC0240000000000003FD27D27D27D27D3C0000 00000000001401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FD04EE2CC0A9E89C0000000000 00001401AAAAAAAAAAAAAC0215555555555563FCCA252ADB363C1C0000000000000014 01AAAAAAAAAAAAAC0200000000000013FC907F6E5D4C3B6C000000000000001401AAAA AAAAAAAAAC01D5555555555573FC5CEB240795CEEC000000000000001401AAAAAAAAAA AAAC01AAAAAAAAAAAAC3FC2F684BDA12F6AC000000000000001401AAAAAAAAAAAAAC01 80000000000013FC07F6E5D4C3B2CC000000000000001401AAAAAAAAAAAAAC01555555 55555563FBCD2DE3EF50063C000000000000001401AAAAAAAAAAAAAC012AAAAAAAAAAA B3FB9690E0857FCF9C000000000000001401AAAAAAAAAAAAAC0100000000000003FB6C 16C16C16C18C000000000000001401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FB4DBF86A3 14DC1C000000000000001401AAAAAAAAAAAAAC0055555555555563FB3B8B302A7A1F3C 000000000000001401AAAAAAAAAAAAAC0000000000000013FB3579BE02468AEC000000 000000001401AAAAAAAAAAAAABFF55555555555583FB3B8B302A7A1F3C000000000000 001401AAAAAAAAAAAAABFE555555555555B3FB4DBF86A314DC0C000000000000001401 AAAAAAAAAAAAABCC80000000000003FB6C16C16C16C17C000000000000001401AAAAAA AAAAAAA3FE555555555554F3FB9690E0857FCF7C000000000000001401AAAAAAAAAAAA A3FF55555555555523FBCD2DE3EF50061C000000000000001401AAAAAAAAAAAAA3FFFF FFFFFFFFFFC3FC07F6E5D4C3B2AC000000000000001401AAAAAAAAAAAAA40055555555 555533FC2F684BDA12F68C000000000000001401AAAAAAAAAAAAA400AAAAAAAAAAAA83 FC5CEB240795CEAC000000000000001401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FC907F 6E5D4C3B1C000000000000001401AAAAAAAAAAAAA4012AAAAAAAAAAA93FCCA252ADB36 3BDC000000000000001401AAAAAAAAAAAAA40155555555555543FD04EE2CC0A9E87C00 0000000000001401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FD27D27D27D27D2C00000000 0000001401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FD4DBF86A314DBFC00000000000000 1401AAAAAAAAAAAAA401D5555555555553FD76B549327104FC000000000000001401AA AAAAAAAAAAA40200000000000003FDA2B3C4D5E6F82C000000000000001401AAAAAAAA AAAAA40215555555555553FDD1BAF98D76B54C000000000000001401AAAAAAAAAAAAA4 022AAAAAAAAAAAA3FE01E573AC901E5C000000000000001401AAAAAAAAAAAAA4023FFF FFFFFFFFF3FE1C71C71C71C71C000000000000001401D555555555555C024000000000 0003FD654320FEDCBABC000000000000001401D555555555555C022AAAAAAAAAAAB3FD 425ED097B4261C000000000000001401D555555555555C0215555555555563FD228339 44A55B8C000000000000001401D555555555555C0200000000000013FD05B05B05B05B 3C000000000000001401D555555555555C01D5555555555573FCD7CC6BB5AA49DC0000 00000000001401D555555555555C01AAAAAAAAAAAAC3FCAA49938827719C0000000000 00001401D555555555555C0180000000000013FC82D82D82D82DBC0000000000000014 01D555555555555C0155555555555563FC617839A5BC7E1C000000000000001401D555 555555555C012AAAAAAAAAAAB3FC4629B7F0D462CC000000000000001401D555555555 555C0100000000000003FC30ECA8641FDBBC000000000000001401D555555555555C00 AAAAAAAAAAAAB3FC21C10AFF9EE8FC000000000000001401D555555555555C00555555 55555563FC18A6DFC3518A8C000000000000001401D555555555555C00000000000000 13FC159E26AF37C06C000000000000001401D555555555555BFF55555555555583FC18 A6DFC3518A9C000000000000001401D555555555555BFE555555555555B3FC21C10AFF 9EE8FC000000000000001401D555555555555BCC80000000000003FC30ECA8641FDBBC 000000000000001401D5555555555553FE555555555554F3FC4629B7F0D462BC000000 000000001401D5555555555553FF55555555555523FC617839A5BC7E0C000000000000 001401D5555555555553FFFFFFFFFFFFFFC3FC82D82D82D82D9C000000000000001401 D55555555555540055555555555533FCAA49938827717C000000000000001401D55555 5555555400AAAAAAAAAAAA83FCD7CC6BB5AA499C000000000000001401D55555555555 5400FFFFFFFFFFFFD3FD05B05B05B05B0C000000000000001401D5555555555554012A AAAAAAAAAA93FD22833944A55B6C000000000000001401D55555555555540155555555 555543FD425ED097B425FC000000000000001401D5555555555554017FFFFFFFFFFFF3 FD654320FEDCBA9C000000000000001401D555555555555401AAAAAAAAAAAAA3FD8B30 2A7A1F197C000000000000001401D555555555555401D5555555555553FDB425ED097B 426C000000000000001401D55555555555540200000000000003FDE02468ACF1358C00 0000000000001401D55555555555540215555555555553FE0795CEB240796C00000000 0000001401D5555555555554022AAAAAAAAAAAA3FE209DC598153D1C00000000000000 1401D5555555555554023FFFFFFFFFFFF3FE3B2A1907F6E5DC00000000000000140200 00000000000C0240000000000003FDA740DA740DA75C00000000000000140200000000 00000C022AAAAAAAAAAAB3FD845C8A0CE512CC0000000000000014020000000000000C 0215555555555563FD6480F2B9D6483C0000000000000014020000000000000C020000 0000000013FD47AE147AE147DC0000000000000014020000000000000C01D555555555 5573FD2DE3EF5006119C0000000000000014020000000000000C01AAAAAAAAAAAAC3FD 1722833944A58C0000000000000014020000000000000C0180000000000013FD0369D0 369D039C0000000000000014020000000000000C0155555555555563FCE573AC901E57 7C0000000000000014020000000000000C012AAAAAAAAAAAB3FCCA252ADB363C2C0000 000000000014020000000000000C0100000000000003FCB4E81B4E81B51C0000000000 000014020000000000000C00AAAAAAAAAAAAB3FCA5BC7DEA00C25C0000000000000014 020000000000000C0055555555555563FC9CA252ADB363EC0000000000000014020000 000000000C0000000000000013FC999999999999CC0000000000000014020000000000 000BFF55555555555583FC9CA252ADB363FC0000000000000014020000000000000BFE 555555555555B3FCA5BC7DEA00C25C0000000000000014020000000000000BCC800000 00000003FCB4E81B4E81B51C00000000000000140200000000000003FE555555555554 F3FCCA252ADB363C1C00000000000000140200000000000003FF55555555555523FCE5 73AC901E576C00000000000000140200000000000003FFFFFFFFFFFFFFC3FD0369D036 9D037C000000000000001402000000000000040055555555555533FD1722833944A56C 0000000000000014020000000000000400AAAAAAAAAAAA83FD2DE3EF5006118C000000 0000000014020000000000000400FFFFFFFFFFFFD3FD47AE147AE147BC000000000000 00140200000000000004012AAAAAAAAAAA93FD6480F2B9D6481C000000000000001402 000000000000040155555555555543FD845C8A0CE512AC000000000000001402000000 00000004017FFFFFFFFFFFF3FDA740DA740DA74C000000000000001402000000000000 0401AAAAAAAAAAAAA3FDCD2DE3EF50062C0000000000000014020000000000000401D5 555555555553FDF623A67EAC2F1C000000000000001402000000000000040200000000 000003FE1111111111112C000000000000001402000000000000040215555555555553 FE2894AB6CD8EFBC00000000000000140200000000000004022AAAAAAAAAAAA3FE419C A252ADB36C00000000000000140200000000000004023FFFFFFFFFFFF3FE5C28F5C28F 5C3C0000000000000014021555555555555C0240000000000003FDEDCBA98765432C00 00000000000014021555555555555C022AAAAAAAAAAAB3FDCAE759203CAE8C00000000 00000014021555555555555C0215555555555563FDAB0BC1CD2DE40C00000000000000 14021555555555555C0200000000000013FD8E38E38E38E3AC00000000000000140215 55555555555C01D5555555555573FD746EBE635DAD6C00000000000000140215555555 55555C01AAAAAAAAAAAAC3FD5DAD524C9C414C0000000000000014021555555555555C 0180000000000013FD49F49F49F49F5C0000000000000014021555555555555C015555 5555555563FD3944A55B66C78C0000000000000014021555555555555C012AAAAAAAAA AAB3FD2B9D6480F2B9DC0000000000000014021555555555555C0100000000000003FD 20FEDCBA98765C0000000000000014021555555555555C00AAAAAAAAAAAAB3FD19690E 0857FCFC0000000000000014021555555555555C0055555555555563FD14DBF86A314D CC0000000000000014021555555555555C0000000000000013FD13579BE02468BC0000 000000000014021555555555555BFF55555555555583FD14DBF86A314DCC0000000000 000014021555555555555BFE555555555555B3FD19690E0857FCFC0000000000000014 021555555555555BCC80000000000003FD20FEDCBA98765C0000000000000014021555 5555555553FE555555555554F3FD2B9D6480F2B9DC0000000000000014021555555555 5553FF55555555555523FD3944A55B66C78C00000000000000140215555555555553FF FFFFFFFFFFFFC3FD49F49F49F49F4C0000000000000014021555555555555400555555 55555533FD5DAD524C9C413C0000000000000014021555555555555400AAAAAAAAAAAA 83FD746EBE635DAD5C0000000000000014021555555555555400FFFFFFFFFFFFD3FD8E 38E38E38E38C00000000000000140215555555555554012AAAAAAAAAAA93FDAB0BC1CD 2DE3DC000000000000001402155555555555540155555555555543FDCAE759203CAE7C 00000000000000140215555555555554017FFFFFFFFFFFF3FDEDCBA98765431C000000 0000000014021555555555555401AAAAAAAAAAAAA3FE09DC598153D0FC000000000000 0014021555555555555401D5555555555553FE1E573AC901E57C000000000000001402 155555555555540200000000000003FE3456789ABCDF0C000000000000001402155555 555555540215555555555553FE4BDA12F684BDAC000000000000001402155555555555 54022AAAAAAAAAAAA3FE64E209DC59814C00000000000000140215555555555554023F FFFFFFFFFFF3FE7F6E5D4C3B2A1C0000000000000014022AAAAAAAAAAAAC0240000000 000003FE1C71C71C71C71C0000000000000014022AAAAAAAAAAAAC022AAAAAAAAAAAB3 FE0AFF9EE8DD7CCC0000000000000014022AAAAAAAAAAAAC0215555555555563FDF623 A67EAC2F0C0000000000000014022AAAAAAAAAAAAC0200000000000013FDD950C83FB7 2EAC0000000000000014022AAAAAAAAAAAAC01D5555555555573FDBF86A314DBF86C00 00000000000014022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FDA8C536FE1A8C4C00000000 00000014022AAAAAAAAAAAAC0180000000000013FD950C83FB72EA5C00000000000000 14022AAAAAAAAAAAAC0155555555555563FD845C8A0CE5128C0000000000000014022A AAAAAAAAAAAC012AAAAAAAAAAAB3FD76B549327104DC0000000000000014022AAAAAAA AAAAAC0100000000000003FD6C16C16C16C15C0000000000000014022AAAAAAAAAAAAC 00AAAAAAAAAAAAB3FD6480F2B9D647FC0000000000000014022AAAAAAAAAAAAC005555 5555555563FD5FF3DD1BAF98CC0000000000000014022AAAAAAAAAAAAC000000000000 0013FD5E6F8091A2B3BC0000000000000014022AAAAAAAAAAAABFF55555555555583FD 5FF3DD1BAF98CC0000000000000014022AAAAAAAAAAAABFE555555555555B3FD6480F2 B9D647FC0000000000000014022AAAAAAAAAAAABCC80000000000003FD6C16C16C16C1 5C0000000000000014022AAAAAAAAAAAA3FE555555555554F3FD76B549327104DC0000 000000000014022AAAAAAAAAAAA3FF55555555555523FD845C8A0CE5128C0000000000 000014022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD950C83FB72EA4C0000000000000014 022AAAAAAAAAAAA40055555555555533FDA8C536FE1A8C3C0000000000000014022AAA AAAAAAAAA400AAAAAAAAAAAA83FDBF86A314DBF85C0000000000000014022AAAAAAAAA AAA400FFFFFFFFFFFFD3FDD950C83FB72E8C0000000000000014022AAAAAAAAAAAA401 2AAAAAAAAAAA93FDF623A67EAC2EDC0000000000000014022AAAAAAAAAAAA401555555 55555543FE0AFF9EE8DD7CBC0000000000000014022AAAAAAAAAAAA4017FFFFFFFFFFF F3FE1C71C71C71C71C0000000000000014022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE2F 684BDA12F67C0000000000000014022AAAAAAAAAAAA401D5555555555553FE43E32D21 C10AFC0000000000000014022AAAAAAAAAAAA40200000000000003FE59E26AF37C048C 0000000000000014022AAAAAAAAAAAA40215555555555553FE7166054F43E32C000000 0000000014022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE8A6DFC3518A6CC000000000000 0014022AAAAAAAAAAAA4023FFFFFFFFFFFF3FEA4FA4FA4FA4F9C000000000000001402 3FFFFFFFFFFFFC0240000000000003FE4444444444443C0000000000000014023FFFFF FFFFFFFC022AAAAAAAAAAAB3FE32D21C10AFF9FC0000000000000014023FFFFFFFFFFF FC0215555555555563FE22E450672894AC0000000000000014023FFFFFFFFFFFFC0200 000000000013FE147AE147AE148C0000000000000014023FFFFFFFFFFFFC01D5555555 555573FE0795CEB240796C0000000000000014023FFFFFFFFFFFFC01AAAAAAAAAAAAC3 FDF86A314DBF869C0000000000000014023FFFFFFFFFFFFC0180000000000013FDE4B1 7E4B17E4AC0000000000000014023FFFFFFFFFFFFC0155555555555563FDD401845C8A 0CDC0000000000000014023FFFFFFFFFFFFC012AAAAAAAAAAAB3FDC65A438215FF2C00 00000000000014023FFFFFFFFFFFFC0100000000000003FDBBBBBBBBBBBBAC00000000 00000014023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FDB425ED097B424C00000000000000 14023FFFFFFFFFFFFC0055555555555563FDAF98D76B54931C0000000000000014023F FFFFFFFFFFFC0000000000000013FDAE147AE147AE0C0000000000000014023FFFFFFF FFFFFBFF55555555555583FDAF98D76B54931C0000000000000014023FFFFFFFFFFFFB FE555555555555B3FDB425ED097B424C0000000000000014023FFFFFFFFFFFFBCC8000 0000000003FDBBBBBBBBBBBBAC0000000000000014023FFFFFFFFFFFF3FE5555555555 54F3FDC65A438215FF2C0000000000000014023FFFFFFFFFFFF3FF55555555555523FD D401845C8A0CDC0000000000000014023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FDE4B17E 4B17E49C0000000000000014023FFFFFFFFFFFF40055555555555533FDF86A314DBF86 8C0000000000000014023FFFFFFFFFFFF400AAAAAAAAAAAA83FE0795CEB240795C0000 000000000014023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE147AE147AE147C0000000000 000014023FFFFFFFFFFFF4012AAAAAAAAAAA93FE22E4506728949C0000000000000014 023FFFFFFFFFFFF40155555555555543FE32D21C10AFF9EC0000000000000014023FFF FFFFFFFFF4017FFFFFFFFFFFF3FE4444444444443C0000000000000014023FFFFFFFFF FFF401AAAAAAAAAAAAA3FE573AC901E573AC0000000000000014023FFFFFFFFFFFF401 D5555555555553FE6BB5AA4993881C0000000000000014023FFFFFFFFFFFF402000000 00000003FE81B4E81B4E81BC0000000000000014023FFFFFFFFFFFF402155555555555 53FE9938827716604C0000000000000014023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEB2 40795CEB23FC0000000000000014023FFFFFFFFFFFF4023FFFFFFFFFFFF3FECCCCCCCC CCCCBBFFD555555555557C024000000000000C0240000000000003FCBBBBBBBBBBBBEB FFD555555555557C024000000000000C022AAAAAAAAAAAB3FC75F31AED6A92BBFFD555 555555557C024000000000000C0215555555555563FC363BEC474CFDABFFD555555555 557C024000000000000C0200000000000013FBF92C5F92C5F9DBFFD555555555557C02 4000000000000C01D5555555555573FB9203CAE75920CBFFD555555555557C02400000 0000000C01AAAAAAAAAAAAC3FB36FE1A8C53704BFFD555555555557C02400000000000 0C0180000000000013FAD0369D0369D13BFFD555555555557C024000000000000C0155 555555555563FA4AB6CD8EFB128BFFD555555555557C024000000000000C012AAAAAAA AAAAB3F9BAF98D76B54A8BFFD555555555557C024000000000000C0100000000000003 F91111111111122BFFD555555555557C024000000000000C00AAAAAAAAAAAAB3F82F68 4BDA12F8DBFFD555555555557C024000000000000C0055555555555563F73B8B302A7A 238BFFD555555555557C024000000000000C0000000000000013F6B4E81B4E81BDEBFF D555555555557C024000000000000BFF55555555555583F73B8B302A7A236BFFD55555 5555557C024000000000000BFE555555555555B3F82F684BDA12F89BFFD55555555555 7C024000000000000BCC80000000000003F91111111111120BFFD555555555557C0240 000000000003FE555555555554F3F9BAF98D76B54A2BFFD555555555557C0240000000 000003FF55555555555523FA4AB6CD8EFB124BFFD555555555557C0240000000000003 FFFFFFFFFFFFFFC3FAD0369D0369D09BFFD555555555557C0240000000000004005555 5555555533FB36FE1A8C53701BFFD555555555557C024000000000000400AAAAAAAAAA AA83FB9203CAE759206BFFD555555555557C024000000000000400FFFFFFFFFFFFD3FB F92C5F92C5F94BFFD555555555557C0240000000000004012AAAAAAAAAAA93FC363BEC 474CFD6BFFD555555555557C02400000000000040155555555555543FC75F31AED6A92 7BFFD555555555557C0240000000000004017FFFFFFFFFFFF3FCBBBBBBBBBBBBCBFFD5 55555555557C024000000000000401AAAAAAAAAAAAA3FD03CAE759203CCBFFD5555555 55557C024000000000000401D5555555555553FD2CC0A9E87C65BBFFD555555555557C 02400000000000040200000000000003FD58BF258BF258EBFFD555555555557C024000 00000000040215555555555553FD87C65A4382161BFFD555555555557C024000000000 0004022AAAAAAAAAAAA3FDB9D6480F2B9D6BFFD555555555557C024000000000000402 3FFFFFFFFFFFF3FDEEEEEEEEEEEEFBFFD555555555557C022AAAAAAAAAAABC02400000 00000003FC530ECA8641FE0BFFD555555555557C022AAAAAAAAAAABC022AAAAAAAAAAA B3FC0D4629B7F0D4DBFFD555555555557C022AAAAAAAAAAABC0215555555555563FB9B 1DF623A67F6BFFD555555555557C022AAAAAAAAAAABC0200000000000013FB27D27D27 D27E1BFFD555555555557C022AAAAAAAAAAABC01D5555555555573FA8153D0F8CB4A1B FFD555555555557C022AAAAAAAAAAABC01AAAAAAAAAAAAC3F99690E0857FD25BFFD555 555555557C022AAAAAAAAAAABC0180000000000013F76C16C16C16CD5BFFD555555555 557C022AAAAAAAAAAABC015555555555556BF85FF3DD1BAF93FBFFD555555555557C02 2AAAAAAAAAAABC012AAAAAAAAAAABBF98A6DFC3518A48BFFD555555555557C022AAAAA AAAAAABC010000000000000BFA1A2B3C4D5E6E5BFFD555555555557C022AAAAAAAAAAA BC00AAAAAAAAAAAABBFA56D9B1DF62395BFFD555555555557C022AAAAAAAAAAABC0055 55555555556BFA7B425ED097B30BFFD555555555557C022AAAAAAAAAAABC0000000000 00001BFA87654320FEDB9BFFD555555555557C022AAAAAAAAAAABBFF5555555555558B FA7B425ED097B31BFFD555555555557C022AAAAAAAAAAABBFE555555555555BBFA56D9 B1DF62395BFFD555555555557C022AAAAAAAAAAABBCC8000000000000BFA1A2B3C4D5E 6E7BFFD555555555557C022AAAAAAAAAAAB3FE555555555554FBF98A6DFC3518A4DBFF D555555555557C022AAAAAAAAAAAB3FF5555555555552BF85FF3DD1BAF94FBFFD55555 5555557C022AAAAAAAAAAAB3FFFFFFFFFFFFFFC3F76C16C16C16C8EBFFD55555555555 7C022AAAAAAAAAAAB40055555555555533F99690E0857FD13BFFD555555555557C022A AAAAAAAAAAB400AAAAAAAAAAAA83FA8153D0F8CB494BFFD555555555557C022AAAAAAA AAAAB400FFFFFFFFFFFFD3FB27D27D27D27D8BFFD555555555557C022AAAAAAAAAAAB4 012AAAAAAAAAAA93FB9B1DF623A67F0BFFD555555555557C022AAAAAAAAAAAB4015555 5555555543FC0D4629B7F0D49BFFD555555555557C022AAAAAAAAAAAB4017FFFFFFFFF FFF3FC530ECA8641FDEBFFD555555555557C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FC 9EE8DD7CC6BB9BFFD555555555557C022AAAAAAAAAAAB401D5555555555553FCF0D462 9B7F0D9BFFD555555555557C022AAAAAAAAAAAB40200000000000003FD2468ACF13579 EBFFD555555555557C022AAAAAAAAAAAB40215555555555553FD536FE1A8C5372BFFD5 55555555557C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FD857FCF746EBE7BFFD5555555 55557C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FDBA98765432100BFFD555555555557C 021555555555556C0240000000000003FBE6F8091A2B3D1BFFD555555555557C021555 555555556C022AAAAAAAAAAAB3FB5B66C77D88EAABFFD555555555557C021555555555 556C0215555555555563FAB7F0D4629B80DBFFD555555555557C021555555555556C02 00000000000013F9A2B3C4D5E6FC3BFFD555555555557C021555555555556C01D55555 55555573F3845C8A0CE604CBFFD555555555557C021555555555556C01AAAAAAAAAAAA CBF966054F43E329FBFFD555555555557C021555555555556C018000000000001BFA50 C83FB72EA47BFFD555555555557C021555555555556C015555555555556BFAD6480F2B 9D62EBFFD555555555557C021555555555556C012AAAAAAAAAAABBFB21C10AFF9EE81B FFD555555555557C021555555555556C010000000000000BFB4C3B2A1907F62BFFD555 555555557C021555555555556C00AAAAAAAAAAAABBFB6A9264E209DB9BFFD555555555 557C021555555555556C005555555555556BFB7CC6BB5AA4988BFFD555555555557C02 1555555555556C000000000000001BFB82D82D82D82CDBFFD555555555557C02155555 5555556BFF5555555555558BFB7CC6BB5AA4988BFFD555555555557C02155555555555 6BFE555555555555BBFB6A9264E209DBBBFFD555555555557C021555555555556BCC80 00000000000BFB4C3B2A1907F64BFFD555555555557C0215555555555563FE55555555 5554FBFB21C10AFF9EE84BFFD555555555557C0215555555555563FF5555555555552B FAD6480F2B9D634BFFD555555555557C0215555555555563FFFFFFFFFFFFFFCBFA50C8 3FB72EA4EBFFD555555555557C0215555555555564005555555555553BF966054F43E3 2AEBFFD555555555557C021555555555556400AAAAAAAAAAAA83F3845C8A0CE5A05BFF D555555555557C021555555555556400FFFFFFFFFFFFD3F9A2B3C4D5E6FA1BFFD55555 5555557C0215555555555564012AAAAAAAAAAA93FAB7F0D4629B800BFFD55555555555 7C02155555555555640155555555555543FB5B66C77D88EA2BFFD555555555557C0215 555555555564017FFFFFFFFFFFF3FBE6F8091A2B3CDBFFD555555555557C0215555555 55556401AAAAAAAAAAAAA3FC3F5617839A5C1BFFD555555555557C0215555555555564 01D5555555555553FC91419CA252AE1BFFD555555555557C0215555555555564020000 0000000003FCE93E93E93E945BFFD555555555557C0215555555555564021555555555 5553FD23A67EAC2F076BFFD555555555557C0215555555555564022AAAAAAAAAAAA3FD 55B66C77D88EBBFFD555555555557C0215555555555564023FFFFFFFFFFFF3FD8ACF13 579BE04BFFD555555555557C020000000000001C0240000000000003FB3A06D3A06D3A FBFFD555555555557C020000000000001C022AAAAAAAAAAAB3FA5CEB240795D0CBFFD5 55555555557C020000000000001C0215555555555563F87839A5BC7DF24BFFD5555555 55557C020000000000001C020000000000001BF911111111110C5BFFD555555555557C 020000000000001C01D555555555557BFA56D9B1DF62383BFFD555555555557C020000 000000001C01AAAAAAAAAAAACBFB0672894AB6CCABFFD555555555557C020000000000 001C018000000000001BFB5555555555546BFFD555555555557C020000000000001C01 5555555555556BFB98153D0F8CB3BBFFD555555555557C020000000000001C012AAAAA AAAAAABBFBCEB240795CEA5BFFD555555555557C020000000000001C01000000000000 0BFBF92C5F92C5F86BFFD555555555557C020000000000001C00AAAAAAAAAAAABBFC0B C1CD2DE3EEFBFFD555555555557C020000000000001C005555555555556BFC14DBF86A 314D6BFFD555555555557C020000000000001C000000000000001BFC17E4B17E4B178B FFD555555555557C020000000000001BFF5555555555558BFC14DBF86A314D5BFFD555 555555557C020000000000001BFE555555555555BBFC0BC1CD2DE3EEFBFFD555555555 557C020000000000001BCC8000000000000BFBF92C5F92C5F87BFFD555555555557C02 00000000000013FE555555555554FBFBCEB240795CEA7BFFD555555555557C02000000 00000013FF5555555555552BFB98153D0F8CB3DBFFD555555555557C02000000000000 13FFFFFFFFFFFFFFCBFB555555555554ABFFD555555555557C02000000000000140055 55555555553BFB0672894AB6CCEBFFD555555555557C020000000000001400AAAAAAAA AAAA8BFA56D9B1DF62393BFFD555555555557C020000000000001400FFFFFFFFFFFFDB F911111111110ECBFFD555555555557C0200000000000014012AAAAAAAAAAA93F87839 A5BC7DEE6BFFD555555555557C02000000000000140155555555555543FA5CEB240795 CFEBFFD555555555557C0200000000000014017FFFFFFFFFFFF3FB3A06D3A06D3AABFF D555555555557C020000000000001401AAAAAAAAAAAAA3FBD1BAF98D76B60BFFD55555 5555557C020000000000001401D5555555555553FC3AC901E573ACFBFFD55555555555 7C02000000000000140200000000000003FC92C5F92C5F934BFFD555555555557C0200 0000000000140215555555555553FCF0D4629B7F0DABFFD555555555557C0200000000 000014022AAAAAAAAAAAA3FD2A7A1F19690E2BFFD555555555557C0200000000000014 023FFFFFFFFFFFF3FD5F92C5F92C5FBBFFD555555555557C01D555555555557C024000 0000000003FA3E93E93E93EA6BFFD555555555557C01D555555555557C022AAAAAAAAA AAB3F73B8B302A7A2C2BFFD555555555557C01D555555555557C021555555555556BF9 AED6A9264E1D6BFFD555555555557C01D555555555557C020000000000001BFABE0246 8ACF116BFFD555555555557C01D555555555557C01D555555555557BFB4629B7F0D461 CBFFD555555555557C01D555555555557C01AAAAAAAAAAAACBFBA12F684BDA124BFFD5 55555555557C01D555555555557C018000000000001BFBF0123456789A0BFFD5555555 55557C01D555555555557C015555555555556BFC19690E0857FCABFFD555555555557C 01D555555555557C012AAAAAAAAAAABBFC34B78FBD4017FBFFD555555555557C01D555 555555557C010000000000000BFC49F49F49F49F0BFFD555555555557C01D555555555 557C00AAAAAAAAAAAABBFC59203CAE7591CBFFD555555555557C01D555555555557C00 5555555555556BFC623A67EAC2F03BFFD555555555557C01D555555555557C00000000 0000001BFC654320FEDCBA5BFFD555555555557C01D555555555557BFF555555555555 8BFC623A67EAC2F02BFFD555555555557C01D555555555557BFE555555555555BBFC59 203CAE7591CBFFD555555555557C01D555555555557BCC8000000000000BFC49F49F49 F49F0BFFD555555555557C01D5555555555573FE555555555554FBFC34B78FBD40180B FFD555555555557C01D5555555555573FF5555555555552BFC19690E0857FCBBFFD555 555555557C01D5555555555573FFFFFFFFFFFFFFCBFBF0123456789A5BFFD555555555 557C01D5555555555574005555555555553BFBA12F684BDA129BFFD555555555557C01 D555555555557400AAAAAAAAAAAA8BFB4629B7F0D4623BFFD555555555557C01D55555 5555557400FFFFFFFFFFFFDBFABE02468ACF12ABFFD555555555557C01D55555555555 74012AAAAAAAAAAA9BF9AED6A9264E1F5BFFD555555555557C01D55555555555740155 555555555543F73B8B302A7A24DBFFD555555555557C01D5555555555574017FFFFFFF FFFFF3FA3E93E93E93E9FBFFD555555555557C01D555555555557401AAAAAAAAAAAAA3 FB36FE1A8C53706BFFD555555555557C01D555555555557401D5555555555553FBDAD5 24C9C4144BFFD555555555557C01D55555555555740200000000000003FC456789ABCD F06BFFD555555555557C01D55555555555740215555555555553FCA375F31AED6ADBFF D555555555557C01D5555555555574022AAAAAAAAAAAA3FD03CAE759203CCBFFD55555 5555557C01D5555555555574023FFFFFFFFFFFF3FD38E38E38E38E4BFFD55555555555 7C01AAAAAAAAAAAACC0240000000000003F76C16C16C16CAEBFFD555555555557C01AA AAAAAAAAAACC022AAAAAAAAAAABBF9D33F561783970BFFD555555555557C01AAAAAAAA AAAACC021555555555556BFAE87C65A438203BFFD555555555557C01AAAAAAAAAAAACC 020000000000001BFB6789ABCDF0117BFFD555555555557C01AAAAAAAAAAAACC01D555 555555557BFBCEB240795CEA8BFFD555555555557C01AAAAAAAAAAAACC01AAAAAAAAAA AACBFC14DBF86A314D8BFFD555555555557C01AAAAAAAAAAAACC018000000000001BFC 3C4D5E6F80916BFFD555555555557C01AAAAAAAAAAAACC015555555555556BFC5DAD52 4C9C40EBFFD555555555557C01AAAAAAAAAAAACC012AAAAAAAAAAABBFC78FBD401845C 3BFFD555555555557C01AAAAAAAAAAAACC010000000000000BFC8E38E38E38E35BFFD5 55555555557C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFC9D6480F2B9D61BFFD5555555 55557C01AAAAAAAAAAAACC005555555555556BFCA67EAC2F07348BFFD555555555557C 01AAAAAAAAAAAACC000000000000001BFCA987654320FEABFFD555555555557C01AAAA AAAAAAAACBFF5555555555558BFCA67EAC2F07347BFFD555555555557C01AAAAAAAAAA AACBFE555555555555BBFC9D6480F2B9D61BFFD555555555557C01AAAAAAAAAAAACBCC 8000000000000BFC8E38E38E38E35BFFD555555555557C01AAAAAAAAAAAAC3FE555555 555554FBFC78FBD401845C5BFFD555555555557C01AAAAAAAAAAAAC3FF555555555555 2BFC5DAD524C9C410BFFD555555555557C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFC3C 4D5E6F80917BFFD555555555557C01AAAAAAAAAAAAC4005555555555553BFC14DBF86A 314D9BFFD555555555557C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFBCEB240795CEADB FFD555555555557C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFB6789ABCDF011FBFFD555 555555557C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFAE87C65A43820EBFFD555555555 557C01AAAAAAAAAAAAC4015555555555554BF9D33F561783995BFFD555555555557C01 AAAAAAAAAAAAC4017FFFFFFFFFFFF3F76C16C16C16C57BFFD555555555557C01AAAAAA AAAAAAC401AAAAAAAAAAAAA3FA5CEB240795CF8BFFD555555555557C01AAAAAAAAAAAA C401D5555555555553FB524C9C413B8BABFFD555555555557C01AAAAAAAAAAAAC40200 000000000003FC0123456789AC2BFFD555555555557C01AAAAAAAAAAAAC40215555555 555553FC5F31AED6A9268BFFD555555555557C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3 FCC3518A6DFC353BFFD555555555557C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD16C1 6C16C16C2BFFD555555555557C018000000000001C024000000000000BF97E4B17E4B1 7B4BFFD555555555557C018000000000001C022AAAAAAAAAAABBFAD6480F2B9D628BFF D555555555557C018000000000001C021555555555556BFB6A9264E209DBABFFD55555 5555557C018000000000001C020000000000001BFBDDDDDDDDDDDCFBFFD55555555555 7C018000000000001C01D555555555557BFC22833944A55B0BFFD555555555557C0180 00000000001C01AAAAAAAAAAAACBFC5006117228334BFFD555555555557C0180000000 00001C018000000000001BFC7777777777772BFFD555555555557C018000000000001C 015555555555556BFC98D76B549326ABFFD555555555557C018000000000001C012AAA AAAAAAAABBFCB425ED097B41FBFFD555555555557C018000000000001C010000000000 000BFCC962FC962FC90BFFD555555555557C018000000000001C00AAAAAAAAAAAABBFC D88E99FAB0BBCBFFD555555555557C018000000000001C005555555555556BFCE1A8C5 36FE1A3BFFD555555555557C018000000000001C000000000000001BFCE4B17E4B17E4 6BFFD555555555557C018000000000001BFF5555555555558BFCE1A8C536FE1A3BFFD5 55555555557C018000000000001BFE555555555555BBFCD88E99FAB0BBDBFFD5555555 55557C018000000000001BCC8000000000000BFCC962FC962FC91BFFD555555555557C 0180000000000013FE555555555554FBFCB425ED097B421BFFD555555555557C018000 0000000013FF5555555555552BFC98D76B549326CBFFD555555555557C018000000000 0013FFFFFFFFFFFFFFCBFC7777777777773BFFD555555555557C018000000000001400 5555555555553BFC5006117228335BFFD555555555557C018000000000001400AAAAAA AAAAAA8BFC22833944A55B3BFFD555555555557C018000000000001400FFFFFFFFFFFF DBFBDDDDDDDDDDDD7BFFD555555555557C0180000000000014012AAAAAAAAAAA9BFB6A 9264E209DBFBFFD555555555557C0180000000000014015555555555554BFAD6480F2B 9D63ABFFD555555555557C0180000000000014017FFFFFFFFFFFFBF97E4B17E4B17CAB FFD555555555557C018000000000001401AAAAAAAAAAAAA3F8C10AFF9EE8E1ABFFD555 555555557C018000000000001401D5555555555553FAB7F0D4629B803BFFD555555555 557C01800000000000140200000000000003FB8BF258BF258CBBFFD555555555557C01 800000000000140215555555555553FC240795CEB240CBFFD555555555557C01800000 00000014022AAAAAAAAAAAA3FC88277166054F7BFFD555555555557C01800000000000 14023FFFFFFFFFFFF3FCF258BF258BF28BFFD555555555557C015555555555556C0240 00000000000BFA87654320FEDC2BFFD555555555557C015555555555556C022AAAAAAA AAAABBFB4F43E32D21C08BFFD555555555557C015555555555556C021555555555556B FBCEB240795CEAABFFD555555555557C015555555555556C020000000000001BFC20FE DCBA98760BFFD555555555557C015555555555556C01D555555555557BFC549327104E E28BFFD555555555557C015555555555556C01AAAAAAAAAAAACBFC8215FF3DD1BACBFF D555555555557C015555555555556C018000000000001BFCA987654320FEABFFD55555 5555557C015555555555556C015555555555556BFCCAE759203CAE4BFFD55555555555 7C015555555555556C012AAAAAAAAAAABBFCE635DAD524C99BFFD555555555557C0155 55555555556C010000000000000BFCFB72EA61D950ABFFD555555555557C0155555555 55556C00AAAAAAAAAAAABBFD054F43E32D21BBFFD555555555557C015555555555556C 005555555555556BFD09DC598153D0EBFFD555555555557C015555555555556C000000 000000001BFD0B60B60B60B5FBFFD555555555557C015555555555556BFF5555555555 558BFD09DC598153D0EBFFD555555555557C015555555555556BFE555555555555BBFD 054F43E32D21BBFFD555555555557C015555555555556BCC8000000000000BFCFB72EA 61D950ABFFD555555555557C0155555555555563FE555555555554FBFCE635DAD524C9 ABFFD555555555557C0155555555555563FF5555555555552BFCCAE759203CAE5BFFD5 55555555557C0155555555555563FFFFFFFFFFFFFFCBFCA987654320FECBFFD5555555 55557C0155555555555564005555555555553BFC8215FF3DD1BAEBFFD555555555557C 015555555555556400AAAAAAAAAAAA8BFC549327104EE2CBFFD555555555557C015555 555555556400FFFFFFFFFFFFDBFC20FEDCBA98765BFFD555555555557C015555555555 5564012AAAAAAAAAAA9BFBCEB240795CEB1BFFD555555555557C015555555555556401 5555555555554BFB4F43E32D21C0FBFFD555555555557C0155555555555564017FFFFF FFFFFFFBFA87654320FEDC9BFFD555555555557C015555555555556401AAAAAAAAAAAA ABF85FF3DD1BAF976BFFD555555555557C015555555555556401D5555555555553F9DF 623A67EAC3EBFFD555555555557C01555555555555640200000000000003FB27D27D27 D27DABFFD555555555557C01555555555555640215555555555553FBE3EF500611726B FFD555555555557C0155555555555564022AAAAAAAAAAAA3FC5617839A5BC7EBFFD555 555555557C0155555555555564023FFFFFFFFFFFF3FCC048D159E26AFBFFD555555555 557C012AAAAAAAAAAABC024000000000000BFB159E26AF37BFDBFFD555555555557C01 2AAAAAAAAAAABC022AAAAAAAAAAABBFBA12F684BDA124BFFD555555555557C012AAAAA AAAAAABC021555555555556BFC104EE2CC0A9E3BFFD555555555557C012AAAAAAAAAAA BC020000000000001BFC49F49F49F49EEBFFD555555555557C012AAAAAAAAAAABC01D5 55555555557BFC7D88E99FAB0B6BFFD555555555557C012AAAAAAAAAAABC01AAAAAAAA AAAACBFCAB0BC1CD2DE3ABFFD555555555557C012AAAAAAAAAAABC018000000000001B FCD27D27D27D278BFFD555555555557C012AAAAAAAAAAABC015555555555556BFCF3DD 1BAF98D72BFFD555555555557C012AAAAAAAAAAABC012AAAAAAAAAAABBFD0795CEB240 794BFFD555555555557C012AAAAAAAAAAABC010000000000000BFD123456789ABCCBFF D555555555557C012AAAAAAAAAAABC00AAAAAAAAAAAABBFD19CA252ADB362BFFD55555 5555557C012AAAAAAAAAAABC005555555555556BFD1E573AC901E55BFFD55555555555 7C012AAAAAAAAAAABC000000000000001BFD1FDB97530ECA6BFFD555555555557C012A AAAAAAAAAABBFF5555555555558BFD1E573AC901E55BFFD555555555557C012AAAAAAA AAAABBFE555555555555BBFD19CA252ADB362BFFD555555555557C012AAAAAAAAAAABB CC8000000000000BFD123456789ABCCBFFD555555555557C012AAAAAAAAAAAB3FE5555 55555554FBFD0795CEB240794BFFD555555555557C012AAAAAAAAAAAB3FF5555555555 552BFCF3DD1BAF98D73BFFD555555555557C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC D27D27D27D27ABFFD555555555557C012AAAAAAAAAAAB4005555555555553BFCAB0BC1 CD2DE3CBFFD555555555557C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFC7D88E99FAB0B ABFFD555555555557C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFC49F49F49F49F3BFFD5 55555555557C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFC104EE2CC0A9E7BFFD5555555 55557C012AAAAAAAAAAAB4015555555555554BFBA12F684BDA12BBFFD555555555557C 012AAAAAAAAAAAB4017FFFFFFFFFFFFBFB159E26AF37C01BFFD555555555557C012AAA AAAAAAAAB401AAAAAAAAAAAAABF9F7A80308B912BBFFD555555555557C012AAAAAAAAA AAB401D5555555555553F82F684BDA12F9CBFFD555555555557C012AAAAAAAAAAAB402 00000000000003FAABCDF0123457CBFFD555555555557C012AAAAAAAAAAAB402155555 55555553FB9203CAE75920ABFFD555555555557C012AAAAAAAAAAAB4022AAAAAAAAAAA A3FC2D21C10AFF9F0BFFD555555555557C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FC97 530ECA86421BFFD555555555557C010000000000000C024000000000000BFB55555555 55551BFFD555555555557C010000000000000C022AAAAAAAAAAABBFBE0E696F1F7A78B FFD555555555557C010000000000000C021555555555556BFC302A7A1F1968DBFFD555 555555557C010000000000000C020000000000001BFC69D0369D03698BFFD555555555 557C010000000000000C01D555555555557BFC9D6480F2B9D60BFFD555555555557C01 0000000000000C01AAAAAAAAAAAACBFCCAE759203CAE4BFFD555555555557C01000000 0000000C018000000000001BFCF258BF258BF22BFFD555555555557C01000000000000 0C015555555555556BFD09DC598153D0EBFFD555555555557C010000000000000C012A AAAAAAAAAABBFD17839A5BC7DE9BFFD555555555557C010000000000000C0100000000 00000BFD2222222222221BFFD555555555557C010000000000000C00AAAAAAAAAAAABB FD29B7F0D4629B7BFFD555555555557C010000000000000C005555555555556BFD2E45 0672894AABFFD555555555557C010000000000000C000000000000001BFD2FC962FC96 2FBBFFD555555555557C010000000000000BFF5555555555558BFD2E450672894AABFF D555555555557C010000000000000BFE555555555555BBFD29B7F0D4629B7BFFD55555 5555557C010000000000000BCC8000000000000BFD2222222222221BFFD55555555555 7C0100000000000003FE555555555554FBFD17839A5BC7DE9BFFD555555555557C0100 000000000003FF5555555555552BFD09DC598153D0EBFFD555555555557C0100000000 000003FFFFFFFFFFFFFFCBFCF258BF258BF23BFFD555555555557C0100000000000004 005555555555553BFCCAE759203CAE6BFFD555555555557C010000000000000400AAAA AAAAAAAA8BFC9D6480F2B9D64BFFD555555555557C010000000000000400FFFFFFFFFF FFDBFC69D0369D0369DBFFD555555555557C0100000000000004012AAAAAAAAAAA9BFC 302A7A1F19691BFFD555555555557C0100000000000004015555555555554BFBE0E696 F1F7A7FBFFD555555555557C0100000000000004017FFFFFFFFFFFFBFB555555555555 5BFFD555555555557C010000000000000401AAAAAAAAAAAAABFA7B425ED097B3EBFFD5 55555555557C010000000000000401D555555555555BF79CA252ADB3608BFFD5555555 55557C01000000000000040200000000000003FA2C5F92C5F92D4BFFD555555555557C 01000000000000040215555555555553FB524C9C413B8B6BFFD555555555557C010000 0000000004022AAAAAAAAAAAA3FC0D4629B7F0D46BFFD555555555557C010000000000 0004023FFFFFFFFFFFF3FC7777777777777BFFD555555555557C00AAAAAAAAAAAABC02 4000000000000BFB82D82D82D82D1BFFD555555555557C00AAAAAAAAAAAABC022AAAAA AAAAAABBFC0734B78FBD3FCBFFD555555555557C00AAAAAAAAAAAABC02155555555555 6BFC46EBE635DAD4DBFFD555555555557C00AAAAAAAAAAAABC020000000000001BFC80 91A2B3C4D58BFFD555555555557C00AAAAAAAAAAAABC01D555555555557BFCB425ED09 7B420BFFD555555555557C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFCE1A8C536FE1A4B FFD555555555557C00AAAAAAAAAAAABC018000000000001BFD048D159E26AF1BFFD555 555555557C00AAAAAAAAAAAABC015555555555556BFD153D0F8CB486EBFFD555555555 557C00AAAAAAAAAAAABC012AAAAAAAAAAABBFD22E4506728949BFFD555555555557C00 AAAAAAAAAAAABC010000000000000BFD2D82D82D82D81BFFD555555555557C00AAAAAA AAAAAABC00AAAAAAAAAAAABBFD3518A6DFC3517BFFD555555555557C00AAAAAAAAAAAA BC005555555555556BFD39A5BC7DEA00ABFFD555555555557C00AAAAAAAAAAAABC0000 00000000001BFD3B2A1907F6E5BBFFD555555555557C00AAAAAAAAAAAABBFF55555555 55558BFD39A5BC7DEA00ABFFD555555555557C00AAAAAAAAAAAABBFE555555555555BB FD3518A6DFC3517BFFD555555555557C00AAAAAAAAAAAABBCC8000000000000BFD2D82 D82D82D81BFFD555555555557C00AAAAAAAAAAAAB3FE555555555554FBFD22E4506728 949BFFD555555555557C00AAAAAAAAAAAAB3FF5555555555552BFD153D0F8CB486EBFF D555555555557C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD048D159E26AF2BFFD55555 5555557C00AAAAAAAAAAAAB4005555555555553BFCE1A8C536FE1A5BFFD55555555555 7C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFCB425ED097B424BFFD555555555557C00AA AAAAAAAAAAB400FFFFFFFFFFFFDBFC8091A2B3C4D5DBFFD555555555557C00AAAAAAAA AAAAB4012AAAAAAAAAAA9BFC46EBE635DAD51BFFD555555555557C00AAAAAAAAAAAAB4 015555555555554BFC0734B78FBD400BFFD555555555557C00AAAAAAAAAAAAB4017FFF FFFFFFFFFBFB82D82D82D82D5BFFD555555555557C00AAAAAAAAAAAAB401AAAAAAAAAA AAABFAD6480F2B9D63EBFFD555555555557C00AAAAAAAAAAAAB401D555555555555BF9 1D33F56178382BFFD555555555557C00AAAAAAAAAAAAB40200000000000003F9A2B3C4 D5E6FA8BFFD555555555557C00AAAAAAAAAAAAB40215555555555553FB24C9C413B8B3 6BFFD555555555557C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FBED097B425ED0CBFFD5 55555555557C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FC60B60B60B60B7BFFD5555555 55557C005555555555556C024000000000000BFB9E26AF37C0489BFFD555555555557C 005555555555556C022AAAAAAAAAAABBFC14DBF86A314D8BFFD555555555557C005555 555555556C021555555555556BFC549327104EE29BFFD555555555557C005555555555 556C020000000000001BFC8E38E38E38E34BFFD555555555557C005555555555556C01 D555555555557BFCC1CD2DE3EF4FCBFFD555555555557C005555555555556C01AAAAAA AAAAAACBFCEF50061172280BFFD555555555557C005555555555556C01800000000000 1BFD0B60B60B60B5FBFFD555555555557C005555555555556C015555555555556BFD1C 10AFF9EE8DCBFFD555555555557C005555555555556C012AAAAAAAAAAABBFD29B7F0D4 629B7BFFD555555555557C005555555555556C010000000000000BFD3456789ABCDEFB FFD555555555557C005555555555556C00AAAAAAAAAAAABBFD3BEC474CFD585BFFD555 555555557C005555555555556C005555555555556BFD40795CEB24078BFFD555555555 557C005555555555556C000000000000001BFD41FDB97530EC9BFFD555555555557C00 5555555555556BFF5555555555558BFD40795CEB24078BFFD555555555557C00555555 5555556BFE555555555555BBFD3BEC474CFD585BFFD555555555557C00555555555555 6BCC8000000000000BFD3456789ABCDEFBFFD555555555557C0055555555555563FE55 5555555554FBFD29B7F0D4629B7BFFD555555555557C0055555555555563FF55555555 55552BFD1C10AFF9EE8DCBFFD555555555557C0055555555555563FFFFFFFFFFFFFFCB FD0B60B60B60B60BFFD555555555557C0055555555555564005555555555553BFCEF50 061172281BFFD555555555557C005555555555556400AAAAAAAAAAAA8BFCC1CD2DE3EF 4FFBFFD555555555557C005555555555556400FFFFFFFFFFFFDBFC8E38E38E38E39BFF D555555555557C0055555555555564012AAAAAAAAAAA9BFC549327104EE2DBFFD55555 5555557C0055555555555564015555555555554BFC14DBF86A314DCBFFD55555555555 7C0055555555555564017FFFFFFFFFFFFBFB9E26AF37C048DBFFD555555555557C0055 55555555556401AAAAAAAAAAAAABFB0672894AB6CD7BFFD555555555557C0055555555 55556401D555555555555BF98A6DFC3518A62BFFD555555555557C0055555555555564 0200000000000003F93579BE02468C8BFFD555555555557C0055555555555564021555 5555555553FB097B425ED097EBFFD555555555557C0055555555555564022AAAAAAAAA AAA3FBD1BAF98D76B54BFFD555555555557C0055555555555564023FFFFFFFFFFFF3FC 530ECA8641FDBBFFD555555555557C000000000000001C024000000000000BFBA740DA 740DA71BFFD555555555557C000000000000001C022AAAAAAAAAAABBFC19690E0857FC CBFFD555555555557C000000000000001C021555555555556BFC59203CAE7591DBFFD5 55555555557C000000000000001C020000000000001BFC92C5F92C5F928BFFD5555555 55557C000000000000001C01D555555555557BFCC65A438215FF0BFFD555555555557C 000000000000001C01AAAAAAAAAAAACBFCF3DD1BAF98D74BFFD555555555557C000000 000000001C018000000000001BFD0DA740DA740D9BFFD555555555557C000000000000 001C015555555555556BFD1E573AC901E56BFFD555555555557C000000000000001C01 2AAAAAAAAAAABBFD2BFE7BA375F31BFFD555555555557C000000000000001C01000000 0000000BFD369D0369D0369BFFD555555555557C000000000000001C00AAAAAAAAAAAA BBFD3E32D21C10AFFBFFD555555555557C000000000000001C005555555555556BFD42 BFE7BA375F2BFFD555555555557C000000000000001C000000000000001BFD44444444 44443BFFD555555555557C000000000000001BFF5555555555558BFD42BFE7BA375F2B FFD555555555557C000000000000001BFE555555555555BBFD3E32D21C10AFFBFFD555 555555557C000000000000001BCC8000000000000BFD369D0369D0369BFFD555555555 557C0000000000000013FE555555555554FBFD2BFE7BA375F31BFFD555555555557C00 00000000000013FF5555555555552BFD1E573AC901E56BFFD555555555557C00000000 00000013FFFFFFFFFFFFFFCBFD0DA740DA740DABFFD555555555557C00000000000000 14005555555555553BFCF3DD1BAF98D75BFFD555555555557C000000000000001400AA AAAAAAAAAA8BFCC65A438215FF3BFFD555555555557C000000000000001400FFFFFFFF FFFFDBFC92C5F92C5F92DBFFD555555555557C0000000000000014012AAAAAAAAAAA9B FC59203CAE75921BFFD555555555557C0000000000000014015555555555554BFC1969 0E0857FD0BFFD555555555557C0000000000000014017FFFFFFFFFFFFBFBA740DA740D A75BFFD555555555557C000000000000001401AAAAAAAAAAAAABFB0F8CB487042BFBFF D555555555557C000000000000001401D555555555555BF9AED6A9264E202BFFD55555 5555557C00000000000000140200000000000003F91111111111128BFFD55555555555 7C00000000000000140215555555555553FB0061172283396BFFD555555555557C0000 000000000014022AAAAAAAAAAAA3FBC8A0CE512956CBFFD555555555557C0000000000 000014023FFFFFFFFFFFF3FC4E81B4E81B4E7BFFD555555555557BFF5555555555558C 024000000000000BFB9E26AF37C0489BFFD555555555557BFF5555555555558C022AAA AAAAAAAABBFC14DBF86A314D8BFFD555555555557BFF5555555555558C021555555555 556BFC549327104EE29BFFD555555555557BFF5555555555558C020000000000001BFC 8E38E38E38E34BFFD555555555557BFF5555555555558C01D555555555557BFCC1CD2D E3EF4FCBFFD555555555557BFF5555555555558C01AAAAAAAAAAAACBFCEF5006117228 0BFFD555555555557BFF5555555555558C018000000000001BFD0B60B60B60B5FBFFD5 55555555557BFF5555555555558C015555555555556BFD1C10AFF9EE8DCBFFD5555555 55557BFF5555555555558C012AAAAAAAAAAABBFD29B7F0D4629B7BFFD555555555557B FF5555555555558C010000000000000BFD3456789ABCDEFBFFD555555555557BFF5555 555555558C00AAAAAAAAAAAABBFD3BEC474CFD585BFFD555555555557BFF5555555555 558C005555555555556BFD40795CEB24078BFFD555555555557BFF5555555555558C00 0000000000001BFD41FDB97530EC9BFFD555555555557BFF5555555555558BFF555555 5555558BFD40795CEB24078BFFD555555555557BFF5555555555558BFE555555555555 BBFD3BEC474CFD585BFFD555555555557BFF5555555555558BCC8000000000000BFD34 56789ABCDEFBFFD555555555557BFF55555555555583FE555555555554FBFD29B7F0D4 629B7BFFD555555555557BFF55555555555583FF5555555555552BFD1C10AFF9EE8DCB FFD555555555557BFF55555555555583FFFFFFFFFFFFFFCBFD0B60B60B60B60BFFD555 555555557BFF55555555555584005555555555553BFCEF50061172281BFFD555555555 557BFF5555555555558400AAAAAAAAAAAA8BFCC1CD2DE3EF4FFBFFD555555555557BFF 5555555555558400FFFFFFFFFFFFDBFC8E38E38E38E39BFFD555555555557BFF555555 55555584012AAAAAAAAAAA9BFC549327104EE2DBFFD555555555557BFF555555555555 84015555555555554BFC14DBF86A314DCBFFD555555555557BFF55555555555584017F FFFFFFFFFFFBFB9E26AF37C048DBFFD555555555557BFF5555555555558401AAAAAAAA AAAAABFB0672894AB6CD7BFFD555555555557BFF5555555555558401D555555555555B F98A6DFC3518A62BFFD555555555557BFF555555555555840200000000000003F93579 BE02468C8BFFD555555555557BFF555555555555840215555555555553FB097B425ED0 97EBFFD555555555557BFF55555555555584022AAAAAAAAAAAA3FBD1BAF98D76B54BFF D555555555557BFF55555555555584023FFFFFFFFFFFF3FC530ECA8641FDBBFFD55555 5555557BFE555555555555BC024000000000000BFB82D82D82D82D5BFFD55555555555 7BFE555555555555BC022AAAAAAAAAAABBFC0734B78FBD3FEBFFD555555555557BFE55 5555555555BC021555555555556BFC46EBE635DAD4FBFFD555555555557BFE55555555 5555BC020000000000001BFC8091A2B3C4D5ABFFD555555555557BFE555555555555BC 01D555555555557BFCB425ED097B422BFFD555555555557BFE555555555555BC01AAAA AAAAAAAACBFCE1A8C536FE1A6BFFD555555555557BFE555555555555BC018000000000 001BFD048D159E26AF2BFFD555555555557BFE555555555555BC015555555555556BFD 153D0F8CB486FBFFD555555555557BFE555555555555BC012AAAAAAAAAAABBFD22E450 672894ABFFD555555555557BFE555555555555BC010000000000000BFD2D82D82D82D8 2BFFD555555555557BFE555555555555BC00AAAAAAAAAAAABBFD3518A6DFC3518BFFD5 55555555557BFE555555555555BC005555555555556BFD39A5BC7DEA00BBFFD5555555 55557BFE555555555555BC000000000000001BFD3B2A1907F6E5CBFFD555555555557B FE555555555555BBFF5555555555558BFD39A5BC7DEA00BBFFD555555555557BFE5555 55555555BBFE555555555555BBFD3518A6DFC3518BFFD555555555557BFE5555555555 55BBCC8000000000000BFD2D82D82D82D82BFFD555555555557BFE555555555555B3FE 555555555554FBFD22E450672894ABFFD555555555557BFE555555555555B3FF555555 5555552BFD153D0F8CB486FBFFD555555555557BFE555555555555B3FFFFFFFFFFFFFF CBFD048D159E26AF3BFFD555555555557BFE555555555555B4005555555555553BFCE1 A8C536FE1A7BFFD555555555557BFE555555555555B400AAAAAAAAAAAA8BFCB425ED09 7B426BFFD555555555557BFE555555555555B400FFFFFFFFFFFFDBFC8091A2B3C4D5FB FFD555555555557BFE555555555555B4012AAAAAAAAAAA9BFC46EBE635DAD53BFFD555 555555557BFE555555555555B4015555555555554BFC0734B78FBD402BFFD555555555 557BFE555555555555B4017FFFFFFFFFFFFBFB82D82D82D82D9BFFD555555555557BFE 555555555555B401AAAAAAAAAAAAABFAD6480F2B9D646BFFD555555555557BFE555555 555555B401D555555555555BF91D33F56178392BFFD555555555557BFE555555555555 B40200000000000003F9A2B3C4D5E6F98BFFD555555555557BFE555555555555B40215 555555555553FB24C9C413B8B32BFFD555555555557BFE555555555555B4022AAAAAAA AAAAA3FBED097B425ED08BFFD555555555557BFE555555555555B4023FFFFFFFFFFFF3 FC60B60B60B60B5BFFD555555555557BCC8000000000000C024000000000000BFB5555 555555551BFFD555555555557BCC8000000000000C022AAAAAAAAAAABBFBE0E696F1F7 A78BFFD555555555557BCC8000000000000C021555555555556BFC302A7A1F1968DBFF D555555555557BCC8000000000000C020000000000001BFC69D0369D03698BFFD55555 5555557BCC8000000000000C01D555555555557BFC9D6480F2B9D60BFFD55555555555 7BCC8000000000000C01AAAAAAAAAAAACBFCCAE759203CAE4BFFD555555555557BCC80 00000000000C018000000000001BFCF258BF258BF22BFFD555555555557BCC80000000 00000C015555555555556BFD09DC598153D0EBFFD555555555557BCC8000000000000C 012AAAAAAAAAAABBFD17839A5BC7DE9BFFD555555555557BCC8000000000000C010000 000000000BFD2222222222221BFFD555555555557BCC8000000000000C00AAAAAAAAAA AABBFD29B7F0D4629B7BFFD555555555557BCC8000000000000C005555555555556BFD 2E450672894AABFFD555555555557BCC8000000000000C000000000000001BFD2FC962 FC962FBBFFD555555555557BCC8000000000000BFF5555555555558BFD2E450672894A ABFFD555555555557BCC8000000000000BFE555555555555BBFD29B7F0D4629B7BFFD5 55555555557BCC8000000000000BCC8000000000000BFD2222222222221BFFD5555555 55557BCC80000000000003FE555555555554FBFD17839A5BC7DE9BFFD555555555557B CC80000000000003FF5555555555552BFD09DC598153D0EBFFD555555555557BCC8000 0000000003FFFFFFFFFFFFFFCBFCF258BF258BF23BFFD555555555557BCC8000000000 0004005555555555553BFCCAE759203CAE6BFFD555555555557BCC8000000000000400 AAAAAAAAAAAA8BFC9D6480F2B9D64BFFD555555555557BCC8000000000000400FFFFFF FFFFFFDBFC69D0369D0369DBFFD555555555557BCC80000000000004012AAAAAAAAAAA 9BFC302A7A1F19691BFFD555555555557BCC80000000000004015555555555554BFBE0 E696F1F7A7FBFFD555555555557BCC80000000000004017FFFFFFFFFFFFBFB55555555 55555BFFD555555555557BCC8000000000000401AAAAAAAAAAAAABFA7B425ED097B3EB FFD555555555557BCC8000000000000401D555555555555BF79CA252ADB3608BFFD555 555555557BCC800000000000040200000000000003FA2C5F92C5F92D4BFFD555555555 557BCC800000000000040215555555555553FB524C9C413B8B6BFFD555555555557BCC 80000000000004022AAAAAAAAAAAA3FC0D4629B7F0D46BFFD555555555557BCC800000 00000004023FFFFFFFFFFFF3FC7777777777777BFFD5555555555573FE555555555554 FC024000000000000BFB159E26AF37C01BFFD5555555555573FE555555555554FC022A AAAAAAAAAABBFBA12F684BDA128BFFD5555555555573FE555555555554FC0215555555 55556BFC104EE2CC0A9E5BFFD5555555555573FE555555555554FC020000000000001B FC49F49F49F49F0BFFD5555555555573FE555555555554FC01D555555555557BFC7D88 E99FAB0B8BFFD5555555555573FE555555555554FC01AAAAAAAAAAAACBFCAB0BC1CD2D E3CBFFD5555555555573FE555555555554FC018000000000001BFCD27D27D27D27ABFF D5555555555573FE555555555554FC015555555555556BFCF3DD1BAF98D74BFFD55555 55555573FE555555555554FC012AAAAAAAAAAABBFD0795CEB240795BFFD55555555555 73FE555555555554FC010000000000000BFD123456789ABCDBFFD5555555555573FE55 5555555554FC00AAAAAAAAAAAABBFD19CA252ADB363BFFD5555555555573FE55555555 5554FC005555555555556BFD1E573AC901E56BFFD5555555555573FE555555555554FC 000000000000001BFD1FDB97530ECA7BFFD5555555555573FE555555555554FBFF5555 555555558BFD1E573AC901E56BFFD5555555555573FE555555555554FBFE5555555555 55BBFD19CA252ADB363BFFD5555555555573FE555555555554FBCC8000000000000BFD 123456789ABCDBFFD5555555555573FE555555555554F3FE555555555554FBFD0795CE B240795BFFD5555555555573FE555555555554F3FF5555555555552BFCF3DD1BAF98D7 5BFFD5555555555573FE555555555554F3FFFFFFFFFFFFFFCBFCD27D27D27D27CBFFD5 555555555573FE555555555554F4005555555555553BFCAB0BC1CD2DE3EBFFD5555555 555573FE555555555554F400AAAAAAAAAAAA8BFC7D88E99FAB0BCBFFD5555555555573 FE555555555554F400FFFFFFFFFFFFDBFC49F49F49F49F5BFFD5555555555573FE5555 55555554F4012AAAAAAAAAAA9BFC104EE2CC0A9E9BFFD5555555555573FE5555555555 54F4015555555555554BFBA12F684BDA12FBFFD5555555555573FE555555555554F401 7FFFFFFFFFFFFBFB159E26AF37C05BFFD5555555555573FE555555555554F401AAAAAA AAAAAAABF9F7A80308B913BBFFD5555555555573FE555555555554F401D55555555555 53F82F684BDA12F7CBFFD5555555555573FE555555555554F40200000000000003FAAB CDF01234574BFFD5555555555573FE555555555554F40215555555555553FB9203CAE7 59206BFFD5555555555573FE555555555554F4022AAAAAAAAAAAA3FC2D21C10AFF9EEB FFD5555555555573FE555555555554F4023FFFFFFFFFFFF3FC97530ECA8641FBFFD555 5555555573FF5555555555552C024000000000000BFA87654320FEDC2BFFD555555555 5573FF5555555555552C022AAAAAAAAAAABBFB4F43E32D21C08BFFD5555555555573FF 5555555555552C021555555555556BFBCEB240795CEAABFFD5555555555573FF555555 5555552C020000000000001BFC20FEDCBA98760BFFD5555555555573FF555555555555 2C01D555555555557BFC549327104EE28BFFD5555555555573FF5555555555552C01AA AAAAAAAAAACBFC8215FF3DD1BACBFFD5555555555573FF5555555555552C0180000000 00001BFCA987654320FEABFFD5555555555573FF5555555555552C015555555555556B FCCAE759203CAE4BFFD5555555555573FF5555555555552C012AAAAAAAAAAABBFCE635 DAD524C99BFFD5555555555573FF5555555555552C010000000000000BFCFB72EA61D9 50ABFFD5555555555573FF5555555555552C00AAAAAAAAAAAABBFD054F43E32D21BBFF D5555555555573FF5555555555552C005555555555556BFD09DC598153D0EBFFD55555 55555573FF5555555555552C000000000000001BFD0B60B60B60B5FBFFD55555555555 73FF5555555555552BFF5555555555558BFD09DC598153D0EBFFD5555555555573FF55 55555555552BFE555555555555BBFD054F43E32D21BBFFD5555555555573FF55555555 55552BCC8000000000000BFCFB72EA61D950ABFFD5555555555573FF55555555555523 FE555555555554FBFCE635DAD524C9ABFFD5555555555573FF55555555555523FF5555 555555552BFCCAE759203CAE5BFFD5555555555573FF55555555555523FFFFFFFFFFFF FFCBFCA987654320FECBFFD5555555555573FF55555555555524005555555555553BFC 8215FF3DD1BAEBFFD5555555555573FF5555555555552400AAAAAAAAAAAA8BFC549327 104EE2CBFFD5555555555573FF5555555555552400FFFFFFFFFFFFDBFC20FEDCBA9876 5BFFD5555555555573FF55555555555524012AAAAAAAAAAA9BFBCEB240795CEB1BFFD5 555555555573FF55555555555524015555555555554BFB4F43E32D21C0FBFFD5555555 555573FF55555555555524017FFFFFFFFFFFFBFA87654320FEDC9BFFD5555555555573 FF5555555555552401AAAAAAAAAAAAABF85FF3DD1BAF976BFFD5555555555573FF5555 555555552401D5555555555553F9DF623A67EAC3EBFFD5555555555573FF5555555555 55240200000000000003FB27D27D27D27DABFFD5555555555573FF5555555555552402 15555555555553FBE3EF500611726BFFD5555555555573FF55555555555524022AAAAA AAAAAAA3FC5617839A5BC7EBFFD5555555555573FF55555555555524023FFFFFFFFFFF F3FCC048D159E26AFBFFD5555555555573FFFFFFFFFFFFFFCC024000000000000BF97E 4B17E4B17D4BFFD5555555555573FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFAD6480F2B 9D638BFFD5555555555573FFFFFFFFFFFFFFCC021555555555556BFB6A9264E209DC2B FFD5555555555573FFFFFFFFFFFFFFCC020000000000001BFBDDDDDDDDDDDD7BFFD555 5555555573FFFFFFFFFFFFFFCC01D555555555557BFC22833944A55B4BFFD555555555 5573FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFC5006117228338BFFD5555555555573FF FFFFFFFFFFFFCC018000000000001BFC7777777777776BFFD5555555555573FFFFFFFF FFFFFFCC015555555555556BFC98D76B549326EBFFD5555555555573FFFFFFFFFFFFFF CC012AAAAAAAAAAABBFCB425ED097B423BFFD5555555555573FFFFFFFFFFFFFFCC0100 00000000000BFCC962FC962FC94BFFD5555555555573FFFFFFFFFFFFFFCC00AAAAAAAA AAAABBFCD88E99FAB0BC0BFFD5555555555573FFFFFFFFFFFFFFCC005555555555556B FCE1A8C536FE1A7BFFD5555555555573FFFFFFFFFFFFFFCC000000000000001BFCE4B1 7E4B17E4ABFFD5555555555573FFFFFFFFFFFFFFCBFF5555555555558BFCE1A8C536FE 1A7BFFD5555555555573FFFFFFFFFFFFFFCBFE555555555555BBFCD88E99FAB0BC1BFF D5555555555573FFFFFFFFFFFFFFCBCC8000000000000BFCC962FC962FC95BFFD55555 55555573FFFFFFFFFFFFFFC3FE555555555554FBFCB425ED097B425BFFD55555555555 73FFFFFFFFFFFFFFC3FF5555555555552BFC98D76B5493270BFFD5555555555573FFFF FFFFFFFFFFC3FFFFFFFFFFFFFFCBFC7777777777777BFFD5555555555573FFFFFFFFFF FFFFC4005555555555553BFC5006117228339BFFD5555555555573FFFFFFFFFFFFFFC4 00AAAAAAAAAAAA8BFC22833944A55B7BFFD5555555555573FFFFFFFFFFFFFFC400FFFF FFFFFFFFDBFBDDDDDDDDDDDDFBFFD5555555555573FFFFFFFFFFFFFFC4012AAAAAAAAA AA9BFB6A9264E209DC7BFFD5555555555573FFFFFFFFFFFFFFC4015555555555554BFA D6480F2B9D64ABFFD5555555555573FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBF97E4B17 E4B17EABFFD5555555555573FFFFFFFFFFFFFFC401AAAAAAAAAAAAA3F8C10AFF9EE8DD ABFFD5555555555573FFFFFFFFFFFFFFC401D5555555555553FAB7F0D4629B7F3BFFD5 555555555573FFFFFFFFFFFFFFC40200000000000003FB8BF258BF258C3BFFD5555555 555573FFFFFFFFFFFFFFC40215555555555553FC240795CEB2408BFFD5555555555573 FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FC88277166054F3BFFD5555555555573FFFFFF FFFFFFFFC4023FFFFFFFFFFFF3FCF258BF258BF24BFFD5555555555574005555555555 553C0240000000000003F76C16C16C16C2EBFFD5555555555574005555555555553C02 2AAAAAAAAAAABBF9D33F561783990BFFD5555555555574005555555555553C02155555 5555556BFAE87C65A43820BBFFD5555555555574005555555555553C02000000000000 1BFB6789ABCDF011BBFFD5555555555574005555555555553C01D555555555557BFBCE B240795CEACBFFD5555555555574005555555555553C01AAAAAAAAAAAACBFC14DBF86A 314DABFFD5555555555574005555555555553C018000000000001BFC3C4D5E6F80918B FFD5555555555574005555555555553C015555555555556BFC5DAD524C9C412BFFD555 5555555574005555555555553C012AAAAAAAAAAABBFC78FBD401845C7BFFD555555555 5574005555555555553C010000000000000BFC8E38E38E38E38BFFD555555555557400 5555555555553C00AAAAAAAAAAAABBFC9D6480F2B9D64BFFD555555555557400555555 5555553C005555555555556BFCA67EAC2F0734BBFFD555555555557400555555555555 3C000000000000001BFCA987654320FEDBFFD5555555555574005555555555553BFF55 55555555558BFCA67EAC2F0734ABFFD5555555555574005555555555553BFE55555555 5555BBFC9D6480F2B9D64BFFD5555555555574005555555555553BCC8000000000000B FC8E38E38E38E38BFFD55555555555740055555555555533FE555555555554FBFC78FB D401845C8BFFD55555555555740055555555555533FF5555555555552BFC5DAD524C9C 413BFFD55555555555740055555555555533FFFFFFFFFFFFFFCBFC3C4D5E6F8091ABFF D55555555555740055555555555534005555555555553BFC14DBF86A314DCBFFD55555 55555574005555555555553400AAAAAAAAAAAA8BFBCEB240795CEB3BFFD55555555555 74005555555555553400FFFFFFFFFFFFDBFB6789ABCDF0125BFFD55555555555740055 555555555534012AAAAAAAAAAA9BFAE87C65A43821ABFFD55555555555740055555555 555534015555555555554BF9D33F5617839ADBFFD55555555555740055555555555534 017FFFFFFFFFFFF3F76C16C16C16BF7BFFD5555555555574005555555555553401AAAA AAAAAAAAA3FA5CEB240795CECBFFD5555555555574005555555555553401D555555555 5553FB524C9C413B8B4BFFD555555555557400555555555555340200000000000003FC 0123456789ABEBFFD555555555557400555555555555340215555555555553FC5F31AE D6A9265BFFD55555555555740055555555555534022AAAAAAAAAAAA3FCC3518A6DFC35 0BFFD55555555555740055555555555534023FFFFFFFFFFFF3FD16C16C16C16C0BFFD5 55555555557400AAAAAAAAAAAA8C0240000000000003FA3E93E93E93E96BFFD5555555 55557400AAAAAAAAAAAA8C022AAAAAAAAAAAB3F73B8B302A7A242BFFD5555555555574 00AAAAAAAAAAAA8C021555555555556BF9AED6A9264E1F6BFFD555555555557400AAAA AAAAAAAA8C020000000000001BFABE02468ACF126BFFD555555555557400AAAAAAAAAA AA8C01D555555555557BFB4629B7F0D4624BFFD555555555557400AAAAAAAAAAAA8C01 AAAAAAAAAAAACBFBA12F684BDA12CBFFD555555555557400AAAAAAAAAAAA8C01800000 0000001BFBF0123456789A8BFFD555555555557400AAAAAAAAAAAA8C01555555555555 6BFC19690E0857FCEBFFD555555555557400AAAAAAAAAAAA8C012AAAAAAAAAAABBFC34 B78FBD40183BFFD555555555557400AAAAAAAAAAAA8C010000000000000BFC49F49F49 F49F4BFFD555555555557400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFC59203CAE75920B FFD555555555557400AAAAAAAAAAAA8C005555555555556BFC623A67EAC2F07BFFD555 555555557400AAAAAAAAAAAA8C000000000000001BFC654320FEDCBA9BFFD555555555 557400AAAAAAAAAAAA8BFF5555555555558BFC623A67EAC2F06BFFD555555555557400 AAAAAAAAAAAA8BFE555555555555BBFC59203CAE75920BFFD555555555557400AAAAAA AAAAAA8BCC8000000000000BFC49F49F49F49F4BFFD555555555557400AAAAAAAAAAAA 83FE555555555554FBFC34B78FBD40184BFFD555555555557400AAAAAAAAAAAA83FF55 55555555552BFC19690E0857FCFBFFD555555555557400AAAAAAAAAAAA83FFFFFFFFFF FFFFCBFBF0123456789ADBFFD555555555557400AAAAAAAAAAAA84005555555555553B FBA12F684BDA131BFFD555555555557400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFB4629 B7F0D462BBFFD555555555557400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFABE02468ACF 13ABFFD555555555557400AAAAAAAAAAAA84012AAAAAAAAAAA9BF9AED6A9264E215BFF D555555555557400AAAAAAAAAAAA840155555555555543F73B8B302A7A1CDBFFD55555 5555557400AAAAAAAAAAAA84017FFFFFFFFFFFF3FA3E93E93E93E8FBFFD55555555555 7400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FB36FE1A8C536FEBFFD555555555557400AA AAAAAAAAAA8401D5555555555553FBDAD524C9C413CBFFD555555555557400AAAAAAAA AAAA840200000000000003FC456789ABCDF02BFFD555555555557400AAAAAAAAAAAA84 0215555555555553FCA375F31AED6A9BFFD555555555557400AAAAAAAAAAAA84022AAA AAAAAAAAA3FD03CAE759203CABFFD555555555557400AAAAAAAAAAAA84023FFFFFFFFF FFF3FD38E38E38E38E2BFFD555555555557400FFFFFFFFFFFFDC0240000000000003FB 3A06D3A06D3A3BFFD555555555557400FFFFFFFFFFFFDC022AAAAAAAAAAAB3FA5CEB24 0795CF4BFFD555555555557400FFFFFFFFFFFFDC0215555555555563F87839A5BC7DEB 4BFFD555555555557400FFFFFFFFFFFFDC020000000000001BF911111111110FDBFFD5 55555555557400FFFFFFFFFFFFDC01D555555555557BFA56D9B1DF6239FBFFD5555555 55557400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFB0672894AB6CD8BFFD5555555555574 00FFFFFFFFFFFFDC018000000000001BFB5555555555554BFFD555555555557400FFFF FFFFFFFFDC015555555555556BFB98153D0F8CB47BFFD555555555557400FFFFFFFFFF FFDC012AAAAAAAAAAABBFBCEB240795CEB1BFFD555555555557400FFFFFFFFFFFFDC01 0000000000000BFBF92C5F92C5F92BFFD555555555557400FFFFFFFFFFFFDC00AAAAAA AAAAAABBFC0BC1CD2DE3EF5BFFD555555555557400FFFFFFFFFFFFDC00555555555555 6BFC14DBF86A314DCBFFD555555555557400FFFFFFFFFFFFDC000000000000001BFC17 E4B17E4B17FBFFD555555555557400FFFFFFFFFFFFDBFF5555555555558BFC14DBF86A 314DCBFFD555555555557400FFFFFFFFFFFFDBFE555555555555BBFC0BC1CD2DE3EF6B FFD555555555557400FFFFFFFFFFFFDBCC8000000000000BFBF92C5F92C5F94BFFD555 555555557400FFFFFFFFFFFFD3FE555555555554FBFBCEB240795CEB4BFFD555555555 557400FFFFFFFFFFFFD3FF5555555555552BFB98153D0F8CB4ABFFD555555555557400 FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFB5555555555557BFFD555555555557400FFFFFF FFFFFFD4005555555555553BFB0672894AB6CDBBFFD555555555557400FFFFFFFFFFFF D400AAAAAAAAAAAA8BFA56D9B1DF623ADBFFD555555555557400FFFFFFFFFFFFD400FF FFFFFFFFFFDBF91111111111120BFFD555555555557400FFFFFFFFFFFFD4012AAAAAAA AAAA93F87839A5BC7DE7EBFFD555555555557400FFFFFFFFFFFFD40155555555555543 FA5CEB240795CE4BFFD555555555557400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FB3A06 D3A06D39DBFFD555555555557400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FBD1BAF98D76 B53BFFD555555555557400FFFFFFFFFFFFD401D5555555555553FC3AC901E573AC9BFF D555555555557400FFFFFFFFFFFFD40200000000000003FC92C5F92C5F92DBFFD55555 5555557400FFFFFFFFFFFFD40215555555555553FCF0D4629B7F0D4BFFD55555555555 7400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD2A7A1F19690DFBFFD555555555557400FF FFFFFFFFFFD4023FFFFFFFFFFFF3FD5F92C5F92C5F8BFFD5555555555574012AAAAAAA AAAA9C0240000000000003FBE6F8091A2B3C3BFFD5555555555574012AAAAAAAAAAA9C 022AAAAAAAAAAAB3FB5B66C77D88E9CBFFD5555555555574012AAAAAAAAAAA9C021555 5555555563FAB7F0D4629B7F1BFFD5555555555574012AAAAAAAAAAA9C020000000000 0013F9A2B3C4D5E6F8BBFFD5555555555574012AAAAAAAAAAA9C01D5555555555573F3 845C8A0CE524CBFFD5555555555574012AAAAAAAAAAA9C01AAAAAAAAAAAACBF966054F 43E32D7BFFD5555555555574012AAAAAAAAAAA9C018000000000001BFA50C83FB72EA6 3BFFD5555555555574012AAAAAAAAAAA9C015555555555556BFAD6480F2B9D64ABFFD5 555555555574012AAAAAAAAAAA9C012AAAAAAAAAAABBFB21C10AFF9EE8FBFFD5555555 555574012AAAAAAAAAAA9C010000000000000BFB4C3B2A1907F70BFFD5555555555574 012AAAAAAAAAAA9C00AAAAAAAAAAAABBFB6A9264E209DC7BFFD5555555555574012AAA AAAAAAAA9C005555555555556BFB7CC6BB5AA4996BFFD5555555555574012AAAAAAAAA AA9C000000000000001BFB82D82D82D82DBBFFD5555555555574012AAAAAAAAAAA9BFF 5555555555558BFB7CC6BB5AA4996BFFD5555555555574012AAAAAAAAAAA9BFE555555 555555BBFB6A9264E209DC9BFFD5555555555574012AAAAAAAAAAA9BCC800000000000 0BFB4C3B2A1907F72BFFD5555555555574012AAAAAAAAAAA93FE555555555554FBFB21 C10AFF9EE92BFFD5555555555574012AAAAAAAAAAA93FF5555555555552BFAD6480F2B 9D650BFFD5555555555574012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFA50C83FB72EA6AB FFD5555555555574012AAAAAAAAAAA94005555555555553BF966054F43E32E6BFFD555 5555555574012AAAAAAAAAAA9400AAAAAAAAAAAA83F3845C8A0CE4C05BFFD555555555 5574012AAAAAAAAAAA9400FFFFFFFFFFFFD3F9A2B3C4D5E6F69BFFD555555555557401 2AAAAAAAAAAA94012AAAAAAAAAAA93FAB7F0D4629B7E4BFFD5555555555574012AAAAA AAAAAA940155555555555543FB5B66C77D88E94BFFD5555555555574012AAAAAAAAAAA 94017FFFFFFFFFFFF3FBE6F8091A2B3BFBFFD5555555555574012AAAAAAAAAAA9401AA AAAAAAAAAAA3FC3F5617839A5BABFFD5555555555574012AAAAAAAAAAA9401D5555555 555553FC91419CA252ADABFFD5555555555574012AAAAAAAAAAA940200000000000003 FCE93E93E93E93EBFFD5555555555574012AAAAAAAAAAA940215555555555553FD23A6 7EAC2F072BFFD5555555555574012AAAAAAAAAAA94022AAAAAAAAAAAA3FD55B66C77D8 8E8BFFD5555555555574012AAAAAAAAAAA94023FFFFFFFFFFFF3FD8ACF13579BE00BFF D5555555555574015555555555554C0240000000000003FC530ECA8641FDBBFFD55555 55555574015555555555554C022AAAAAAAAAAAB3FC0D4629B7F0D47BFFD55555555555 74015555555555554C0215555555555563FB9B1DF623A67ECBFFD55555555555740155 55555555554C0200000000000013FB27D27D27D27D7BFFD55555555555740155555555 55554C01D5555555555573FA8153D0F8CB48DBFFD5555555555574015555555555554C 01AAAAAAAAAAAAC3F99690E0857FCF9BFFD5555555555574015555555555554C018000 0000000013F76C16C16C16C25BFFD5555555555574015555555555554C015555555555 556BF85FF3DD1BAF997BFFD5555555555574015555555555554C012AAAAAAAAAAABBF9 8A6DFC3518A74BFFD5555555555574015555555555554C010000000000000BFA1A2B3C 4D5E6FDBFFD5555555555574015555555555554C00AAAAAAAAAAAABBFA56D9B1DF623A BBFFD5555555555574015555555555554C005555555555556BFA7B425ED097B46BFFD5 555555555574015555555555554C000000000000001BFA87654320FEDCFBFFD5555555 555574015555555555554BFF5555555555558BFA7B425ED097B47BFFD5555555555574 015555555555554BFE555555555555BBFA56D9B1DF623ABBFFD5555555555574015555 555555554BCC8000000000000BFA1A2B3C4D5E6FDBFFD5555555555574015555555555 5543FE555555555554FBF98A6DFC3518A79BFFD55555555555740155555555555543FF 5555555555552BF85FF3DD1BAF9A7BFFD55555555555740155555555555543FFFFFFFF FFFFFFC3F76C16C16C16BDEBFFD5555555555574015555555555554400555555555555 33F99690E0857FCE7BFFD5555555555574015555555555554400AAAAAAAAAAAA83FA81 53D0F8CB47EBFFD5555555555574015555555555554400FFFFFFFFFFFFD3FB27D27D27 D27CDBFFD55555555555740155555555555544012AAAAAAAAAAA93FB9B1DF623A67E5B FFD555555555557401555555555555440155555555555543FC0D4629B7F0D43BFFD555 55555555740155555555555544017FFFFFFFFFFFF3FC530ECA8641FD9BFFD555555555 5574015555555555554401AAAAAAAAAAAAA3FC9EE8DD7CC6BB4BFFD555555555557401 5555555555554401D5555555555553FCF0D4629B7F0D3BFFD555555555557401555555 555555440200000000000003FD2468ACF13579CBFFD555555555557401555555555555 440215555555555553FD536FE1A8C536FBFFD55555555555740155555555555544022A AAAAAAAAAAA3FD857FCF746EBE4BFFD55555555555740155555555555544023FFFFFFF FFFFF3FDBA987654320FDBFFD5555555555574017FFFFFFFFFFFFC0240000000000003 FCBBBBBBBBBBBBCBFFD5555555555574017FFFFFFFFFFFFC022AAAAAAAAAAAB3FC75F3 1AED6A928BFFD5555555555574017FFFFFFFFFFFFC0215555555555563FC363BEC474C FD7BFFD5555555555574017FFFFFFFFFFFFC0200000000000013FBF92C5F92C5F98BFF D5555555555574017FFFFFFFFFFFFC01D5555555555573FB9203CAE759207BFFD55555 55555574017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FB36FE1A8C536FFBFFD55555555555 74017FFFFFFFFFFFFC0180000000000013FAD0369D0369D09BFFD5555555555574017F FFFFFFFFFFFC0155555555555563FA4AB6CD8EFB11EBFFD5555555555574017FFFFFFF FFFFFC012AAAAAAAAAAAB3F9BAF98D76B5494BFFD5555555555574017FFFFFFFFFFFFC 0100000000000003F9111111111110EBFFD5555555555574017FFFFFFFFFFFFC00AAAA AAAAAAAAB3F82F684BDA12F65BFFD5555555555574017FFFFFFFFFFFFC005555555555 5563F73B8B302A7A1E8BFFD5555555555574017FFFFFFFFFFFFC0000000000000013F6 B4E81B4E81B3EBFFD5555555555574017FFFFFFFFFFFFBFF55555555555583F73B8B30 2A7A1E6BFFD5555555555574017FFFFFFFFFFFFBFE555555555555B3F82F684BDA12F6 1BFFD5555555555574017FFFFFFFFFFFFBCC80000000000003F9111111111110CBFFD5 555555555574017FFFFFFFFFFFF3FE555555555554F3F9BAF98D76B548EBFFD5555555 555574017FFFFFFFFFFFF3FF55555555555523FA4AB6CD8EFB11ABFFD5555555555574 017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FAD0369D0369CFFBFFD5555555555574017FFF FFFFFFFFF40055555555555533FB36FE1A8C536FCBFFD5555555555574017FFFFFFFFF FFF400AAAAAAAAAAAA83FB9203CAE759201BFFD5555555555574017FFFFFFFFFFFF400 FFFFFFFFFFFFD3FBF92C5F92C5F8FBFFD5555555555574017FFFFFFFFFFFF4012AAAAA AAAAAA93FC363BEC474CFD3BFFD5555555555574017FFFFFFFFFFFF401555555555555 43FC75F31AED6A924BFFD5555555555574017FFFFFFFFFFFF4017FFFFFFFFFFFF3FCBB BBBBBBBBBBABFFD5555555555574017FFFFFFFFFFFF401AAAAAAAAAAAAA3FD03CAE759 203CABFFD5555555555574017FFFFFFFFFFFF401D5555555555553FD2CC0A9E87C65AB FFD5555555555574017FFFFFFFFFFFF40200000000000003FD58BF258BF258CBFFD555 5555555574017FFFFFFFFFFFF40215555555555553FD87C65A438215FBFFD555555555 5574017FFFFFFFFFFFF4022AAAAAAAAAAAA3FDB9D6480F2B9D5BFFD555555555557401 7FFFFFFFFFFFF4023FFFFFFFFFFFF3FDEEEEEEEEEEEEDBFFD555555555557401AAAAAA AAAAAAAC0240000000000003FD16C16C16C16C2BFFD555555555557401AAAAAAAAAAAA AC022AAAAAAAAAAAB3FCE7BA375F31AF0BFFD555555555557401AAAAAAAAAAAAAC0215 555555555563FCA80308B91419FBFFD555555555557401AAAAAAAAAAAAAC0200000000 000013FC6E5D4C3B2A194BFFD555555555557401AAAAAAAAAAAAAC01D5555555555573 FC3AC901E573ACCBFFD555555555557401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FC0D46 29B7F0D48BFFD555555555557401AAAAAAAAAAAAAC0180000000000013FBCBA9876543 214BFFD555555555557401AAAAAAAAAAAAAC0155555555555563FB88E99FAB0BC1FBFF D555555555557401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FB524C9C413B8B5BFFD55555 5555557401AAAAAAAAAAAAAC0100000000000003FB27D27D27D27D4BFFD55555555555 7401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FB097B425ED097DBFFD555555555557401AA AAAAAAAAAAAC0055555555555563FAEE8DD7CC6BB5EBFFD555555555557401AAAAAAAA AAAAAC0000000000000013FAE26AF37C048D5BFFD555555555557401AAAAAAAAAAAAAB FF55555555555583FAEE8DD7CC6BB5DBFFD555555555557401AAAAAAAAAAAAABFE5555 55555555B3FB097B425ED097CBFFD555555555557401AAAAAAAAAAAAABCC8000000000 0003FB27D27D27D27D3BFFD555555555557401AAAAAAAAAAAAA3FE555555555554F3FB 524C9C413B8B3BFFD555555555557401AAAAAAAAAAAAA3FF55555555555523FB88E99F AB0BC1DBFFD555555555557401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FBCBA987654321 0BFFD555555555557401AAAAAAAAAAAAA40055555555555533FC0D4629B7F0D46BFFD5 55555555557401AAAAAAAAAAAAA400AAAAAAAAAAAA83FC3AC901E573AC8BFFD5555555 55557401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FC6E5D4C3B2A18FBFFD5555555555574 01AAAAAAAAAAAAA4012AAAAAAAAAAA93FCA80308B91419BBFFD555555555557401AAAA AAAAAAAAA40155555555555543FCE7BA375F31AECBFFD555555555557401AAAAAAAAAA AAA4017FFFFFFFFFFFF3FD16C16C16C16C1BFFD555555555557401AAAAAAAAAAAAA401 AAAAAAAAAAAAA3FD3CAE759203CAEBFFD555555555557401AAAAAAAAAAAAA401D55555 55555553FD65A438215FF3EBFFD555555555557401AAAAAAAAAAAAA402000000000000 03FD91A2B3C4D5E70BFFD555555555557401AAAAAAAAAAAAA40215555555555553FDC0 A9E87C65A43BFFD555555555557401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FDF2B9D648 0F2B9BFFD555555555557401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FE13E93E93E93E9B FFD555555555557401D555555555555C0240000000000003FD54320FEDCBA9ABFFD555 555555557401D555555555555C022AAAAAAAAAAAB3FD314DBF86A3150BFFD555555555 557401D555555555555C0215555555555563FD11722833944A7BFFD555555555557401 D555555555555C0200000000000013FCE93E93E93E943BFFD555555555557401D55555 5555555C01D5555555555573FCB5AA49938827BBFFD555555555557401D55555555555 5C01AAAAAAAAAAAAC3FC88277166054F7BFFD555555555557401D555555555555C0180 000000000013FC60B60B60B60B9BFFD555555555557401D555555555555C0155555555 555563FC3F5617839A5BFBFFD555555555557401D555555555555C012AAAAAAAAAAAB3 FC240795CEB240ABFFD555555555557401D555555555555C0100000000000003FC0ECA 8641FDB99BFFD555555555557401D555555555555C00AAAAAAAAAAAAB3FBFF3DD1BAF9 8DBBFFD555555555557401D555555555555C0055555555555563FBED097B425ED0DBFF D555555555557401D555555555555C0000000000000013FBE6F8091A2B3C8BFFD55555 5555557401D555555555555BFF55555555555583FBED097B425ED0DBFFD55555555555 7401D555555555555BFE555555555555B3FBFF3DD1BAF98DABFFD555555555557401D5 55555555555BCC80000000000003FC0ECA8641FDB99BFFD555555555557401D5555555 555553FE555555555554F3FC240795CEB2409BFFD555555555557401D5555555555553 FF55555555555523FC3F5617839A5BEBFFD555555555557401D5555555555553FFFFFF FFFFFFFFC3FC60B60B60B60B7BFFD555555555557401D5555555555554005555555555 5533FC88277166054F5BFFD555555555557401D555555555555400AAAAAAAAAAAA83FC B5AA499388277BFFD555555555557401D555555555555400FFFFFFFFFFFFD3FCE93E93 E93E93EBFFD555555555557401D5555555555554012AAAAAAAAAAA93FD11722833944A 5BFFD555555555557401D55555555555540155555555555543FD314DBF86A314EBFFD5 55555555557401D5555555555554017FFFFFFFFFFFF3FD54320FEDCBA98BFFD5555555 55557401D555555555555401AAAAAAAAAAAAA3FD7A1F19690E086BFFD5555555555574 01D555555555555401D5555555555553FDA314DBF86A315BFFD555555555557401D555 55555555540200000000000003FDCF13579BE0248BFFD555555555557401D555555555 55540215555555555553FDFE1A8C536FE1BBFFD555555555557401D555555555555402 2AAAAAAAAAAAA3FE18153D0F8CB48BFFD555555555557401D5555555555554023FFFFF FFFFFFF3FE32A1907F6E5D5BFFD5555555555574020000000000000C02400000000000 03FD962FC962FC964BFFD5555555555574020000000000000C022AAAAAAAAAAAB3FD73 4B78FBD401BBFFD5555555555574020000000000000C0215555555555563FD536FE1A8 C5372BFFD5555555555574020000000000000C0200000000000013FD369D0369D036CB FFD5555555555574020000000000000C01D5555555555573FD1CD2DE3EF5008BFFD555 5555555574020000000000000C01AAAAAAAAAAAAC3FD0611722833947BFFD555555555 5574020000000000000C0180000000000013FCE4B17E4B17E4FBFFD555555555557402 0000000000000C0155555555555563FCC3518A6DFC355BFFD555555555557402000000 0000000C012AAAAAAAAAAAB3FCA80308B9141A0BFFD555555555557402000000000000 0C0100000000000003FC92C5F92C5F92FBFFD5555555555574020000000000000C00AA AAAAAAAAAAB3FC839A5BC7DEA03BFFD5555555555574020000000000000C0055555555 555563FC7A80308B9141CBFFD5555555555574020000000000000C0000000000000013 FC777777777777ABFFD5555555555574020000000000000BFF55555555555583FC7A80 308B9141DBFFD5555555555574020000000000000BFE555555555555B3FC839A5BC7DE A03BFFD5555555555574020000000000000BCC80000000000003FC92C5F92C5F92FBFF D55555555555740200000000000003FE555555555554F3FCA80308B91419FBFFD55555 555555740200000000000003FF55555555555523FCC3518A6DFC354BFFD55555555555 740200000000000003FFFFFFFFFFFFFFC3FCE4B17E4B17E4DBFFD55555555555740200 0000000000040055555555555533FD0611722833945BFFD55555555555740200000000 00000400AAAAAAAAAAAA83FD1CD2DE3EF5007BFFD55555555555740200000000000004 00FFFFFFFFFFFFD3FD369D0369D036ABFFD55555555555740200000000000004012AAA AAAAAAAA93FD536FE1A8C5370BFFD55555555555740200000000000004015555555555 5543FD734B78FBD4019BFFD55555555555740200000000000004017FFFFFFFFFFFF3FD 962FC962FC963BFFD5555555555574020000000000000401AAAAAAAAAAAAA3FDBC1CD2 DE3EF51BFFD5555555555574020000000000000401D5555555555553FDE512956D9B1E 0BFFD555555555557402000000000000040200000000000003FE0888888888889BFFD5 55555555557402000000000000040215555555555553FE200C22E450673BFFD5555555 5555740200000000000004022AAAAAAAAAAAA3FE391419CA252AEBFFD5555555555574 0200000000000004023FFFFFFFFFFFF3FE53A06D3A06D3ABFFD5555555555574021555 555555555C0240000000000003FDDCBA987654321BFFD5555555555574021555555555 555C022AAAAAAAAAAAB3FDB9D6480F2B9D7BFFD5555555555574021555555555555C02 15555555555563FD99FAB0BC1CD2FBFFD5555555555574021555555555555C02000000 00000013FD7D27D27D27D29BFFD5555555555574021555555555555C01D55555555555 73FD635DAD524C9C5BFFD5555555555574021555555555555C01AAAAAAAAAAAAC3FD4C 9C413B8B303BFFD5555555555574021555555555555C0180000000000013FD38E38E38 E38E4BFFD5555555555574021555555555555C0155555555555563FD2833944A55B67B FFD5555555555574021555555555555C012AAAAAAAAAAAB3FD1A8C536FE1A8CBFFD555 5555555574021555555555555C0100000000000003FD0FEDCBA987654BFFD555555555 5574021555555555555C00AAAAAAAAAAAAB3FD0857FCF746EBEBFFD555555555557402 1555555555555C0055555555555563FD03CAE759203CBBFFD555555555557402155555 5555555C0000000000000013FD02468ACF1357ABFFD555555555557402155555555555 5BFF55555555555583FD03CAE759203CBBFFD5555555555574021555555555555BFE55 5555555555B3FD0857FCF746EBEBFFD5555555555574021555555555555BCC80000000 000003FD0FEDCBA987654BFFD55555555555740215555555555553FE555555555554F3 FD1A8C536FE1A8CBFFD55555555555740215555555555553FF55555555555523FD2833 944A55B67BFFD55555555555740215555555555553FFFFFFFFFFFFFFC3FD38E38E38E3 8E3BFFD555555555557402155555555555540055555555555533FD4C9C413B8B302BFF D5555555555574021555555555555400AAAAAAAAAAAA83FD635DAD524C9C4BFFD55555 55555574021555555555555400FFFFFFFFFFFFD3FD7D27D27D27D27BFFD55555555555 740215555555555554012AAAAAAAAAAA93FD99FAB0BC1CD2CBFFD55555555555740215 5555555555540155555555555543FDB9D6480F2B9D6BFFD55555555555740215555555 555554017FFFFFFFFFFFF3FDDCBA987654320BFFD55555555555740215555555555554 01AAAAAAAAAAAAA3FE0153D0F8CB487BFFD5555555555574021555555555555401D555 5555555553FE15CEB240795CFBFFD55555555555740215555555555554020000000000 0003FE2BCDF01234568BFFD555555555557402155555555555540215555555555553FE 43518A6DFC351BFFD55555555555740215555555555554022AAAAAAAAAAAA3FE5C5981 53D0F8CBFFD55555555555740215555555555554023FFFFFFFFFFFF3FE76E5D4C3B2A1 8BFFD5555555555574022AAAAAAAAAAAAC0240000000000003FE13E93E93E93E9BFFD5 555555555574022AAAAAAAAAAAAC022AAAAAAAAAAAB3FE0277166054F44BFFD5555555 555574022AAAAAAAAAAAAC0215555555555563FDE512956D9B1DFBFFD5555555555574 022AAAAAAAAAAAAC0200000000000013FDC83FB72EA61D9BFFD5555555555574022AAA AAAAAAAAAC01D5555555555573FDAE759203CAE75BFFD5555555555574022AAAAAAAAA AAAC01AAAAAAAAAAAAC3FD97B425ED097B3BFFD5555555555574022AAAAAAAAAAAAC01 80000000000013FD83FB72EA61D94BFFD5555555555574022AAAAAAAAAAAAC01555555 55555563FD734B78FBD4017BFFD5555555555574022AAAAAAAAAAAAC012AAAAAAAAAAA B3FD65A438215FF3CBFFD5555555555574022AAAAAAAAAAAAC0100000000000003FD5B 05B05B05B04BFFD5555555555574022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FD536FE1A8 C536EBFFD5555555555574022AAAAAAAAAAAAC0055555555555563FD4EE2CC0A9E87BB FFD5555555555574022AAAAAAAAAAAAC0000000000000013FD4D5E6F8091A2ABFFD555 5555555574022AAAAAAAAAAAABFF55555555555583FD4EE2CC0A9E87BBFFD555555555 5574022AAAAAAAAAAAABFE555555555555B3FD536FE1A8C536EBFFD555555555557402 2AAAAAAAAAAAABCC80000000000003FD5B05B05B05B04BFFD5555555555574022AAAAA AAAAAAA3FE555555555554F3FD65A438215FF3CBFFD5555555555574022AAAAAAAAAAA A3FF55555555555523FD734B78FBD4017BFFD5555555555574022AAAAAAAAAAAA3FFFF FFFFFFFFFFC3FD83FB72EA61D93BFFD5555555555574022AAAAAAAAAAAA40055555555 555533FD97B425ED097B2BFFD5555555555574022AAAAAAAAAAAA400AAAAAAAAAAAA83 FDAE759203CAE74BFFD5555555555574022AAAAAAAAAAAA400FFFFFFFFFFFFD3FDC83F B72EA61D7BFFD5555555555574022AAAAAAAAAAAA4012AAAAAAAAAAA93FDE512956D9B 1DCBFFD5555555555574022AAAAAAAAAAAA40155555555555543FE0277166054F43BFF D5555555555574022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE13E93E93E93E8BFFD55555 55555574022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE26DFC3518A6DFBFFD55555555555 74022AAAAAAAAAAAA401D5555555555553FE3B5AA49938827BFFD5555555555574022A AAAAAAAAAAA40200000000000003FE5159E26AF37C0BFFD5555555555574022AAAAAAA AAAAA40215555555555553FE68DD7CC6BB5A9BFFD5555555555574022AAAAAAAAAAAA4 022AAAAAAAAAAAA3FE81E573AC901E4BFFD5555555555574022AAAAAAAAAAAA4023FFF FFFFFFFFF3FE9C71C71C71C70BFFD5555555555574023FFFFFFFFFFFFC024000000000 0003FE3BBBBBBBBBBBBBFFD5555555555574023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE 2A49938827716BFFD5555555555574023FFFFFFFFFFFFC0215555555555563FE1A5BC7 DEA00C2BFFD5555555555574023FFFFFFFFFFFFC0200000000000013FE0BF258BF258B FBFFD5555555555574023FFFFFFFFFFFFC01D5555555555573FDFE1A8C536FE1ABFFD5 555555555574023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FDE759203CAE758BFFD5555555 555574023FFFFFFFFFFFFC0180000000000013FDD3A06D3A06D39BFFD5555555555574 023FFFFFFFFFFFFC0155555555555563FDC2F0734B78FBCBFFD5555555555574023FFF FFFFFFFFFC012AAAAAAAAAAAB3FDB549327104EE1BFFD5555555555574023FFFFFFFFF FFFC0100000000000003FDAAAAAAAAAAAA9BFFD5555555555574023FFFFFFFFFFFFC00 AAAAAAAAAAAAB3FDA314DBF86A313BFFD5555555555574023FFFFFFFFFFFFC00555555 55555563FD9E87C65A43820BFFD5555555555574023FFFFFFFFFFFFC00000000000000 13FD9D0369D0369CFBFFD5555555555574023FFFFFFFFFFFFBFF55555555555583FD9E 87C65A43820BFFD5555555555574023FFFFFFFFFFFFBFE555555555555B3FDA314DBF8 6A313BFFD5555555555574023FFFFFFFFFFFFBCC80000000000003FDAAAAAAAAAAAA9B FFD5555555555574023FFFFFFFFFFFF3FE555555555554F3FDB549327104EE1BFFD555 5555555574023FFFFFFFFFFFF3FF55555555555523FDC2F0734B78FBCBFFD555555555 5574023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FDD3A06D3A06D38BFFD555555555557402 3FFFFFFFFFFFF40055555555555533FDE759203CAE757BFFD5555555555574023FFFFF FFFFFFF400AAAAAAAAAAAA83FDFE1A8C536FE19BFFD5555555555574023FFFFFFFFFFF F400FFFFFFFFFFFFD3FE0BF258BF258BEBFFD5555555555574023FFFFFFFFFFFF4012A AAAAAAAAAA93FE1A5BC7DEA00C1BFFD5555555555574023FFFFFFFFFFFF40155555555 555543FE2A49938827715BFFD5555555555574023FFFFFFFFFFFF4017FFFFFFFFFFFF3 FE3BBBBBBBBBBBBBFFD5555555555574023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE4EB2 40795CEB1BFFD5555555555574023FFFFFFFFFFFF401D5555555555553FE632D21C10A FF9BFFD5555555555574023FFFFFFFFFFFF40200000000000003FE792C5F92C5F92BFF D5555555555574023FFFFFFFFFFFF40215555555555553FE90AFF9EE8DD7CBFFD55555 55555574023FFFFFFFFFFFF4022AAAAAAAAAAAA3FEA9B7F0D4629B6BFFD55555555555 74023FFFFFFFFFFFF4023FFFFFFFFFFFF3FEC444444444443BFFAAAAAAAAAAAACC0240 00000000000C0240000000000003FC999999999999ABFFAAAAAAAAAAAACC0240000000 00000C022AAAAAAAAAAAB3FC53D0F8CB48707BFFAAAAAAAAAAAACC024000000000000C 0215555555555563FC1419CA252ADB6BFFAAAAAAAAAAAACC024000000000000C020000 0000000013FBB4E81B4E81B55BFFAAAAAAAAAAAACC024000000000000C01D555555555 5573FB4DBF86A314DC4BFFAAAAAAAAAAAACC024000000000000C01AAAAAAAAAAAAC3FA E573AC901E579BFFAAAAAAAAAAAACC024000000000000C0180000000000013FA47AE14 7AE1483BFFAAAAAAAAAAAACC024000000000000C0155555555555563F9845C8A0CE513 0BFFAAAAAAAAAAAACC024000000000000C012AAAAAAAAAAAB3F853D0F8CB48710BFFAA AAAAAAAAAACC024000000000000C0100000000000003C60000000000000BFFAAAAAAAA AAAACC024000000000000C00AAAAAAAAAAAABBF7E573AC901E566BFFAAAAAAAAAAAACC 024000000000000C005555555555556BF8845C8A0CE5122BFFAAAAAAAAAAAACC024000 000000000C000000000000001BF8B4E81B4E81B4ABFFAAAAAAAAAAAACC024000000000 000BFF5555555555558BF8845C8A0CE5126BFFAAAAAAAAAAAACC024000000000000BFE 555555555555BBF7E573AC901E56EBFFAAAAAAAAAAAACC024000000000000BCC800000 00000003C3C28F5C28F5C2EBFFAAAAAAAAAAAACC0240000000000003FE555555555554 F3F853D0F8CB48703BFFAAAAAAAAAAAACC0240000000000003FF55555555555523F984 5C8A0CE5128BFFAAAAAAAAAAAACC0240000000000003FFFFFFFFFFFFFFC3FA47AE147A E147ABFFAAAAAAAAAAAACC02400000000000040055555555555533FAE573AC901E571B FFAAAAAAAAAAAACC024000000000000400AAAAAAAAAAAA83FB4DBF86A314DBEBFFAAAA AAAAAAAACC024000000000000400FFFFFFFFFFFFD3FBB4E81B4E81B4CBFFAAAAAAAAAA AACC0240000000000004012AAAAAAAAAAA93FC1419CA252ADB2BFFAAAAAAAAAAAACC02 400000000000040155555555555543FC53D0F8CB48703BFFAAAAAAAAAAAACC02400000 00000004017FFFFFFFFFFFF3FC9999999999998BFFAAAAAAAAAAAACC02400000000000 0401AAAAAAAAAAAAA3FCE573AC901E573BFFAAAAAAAAAAAACC024000000000000401D5 555555555553FD1BAF98D76B549BFFAAAAAAAAAAAACC02400000000000040200000000 000003FD47AE147AE147CBFFAAAAAAAAAAAACC02400000000000040215555555555553 FD76B549327104FBFFAAAAAAAAAAAACC0240000000000004022AAAAAAAAAAAA3FDA8C5 36FE1A8C4BFFAAAAAAAAAAAACC0240000000000004023FFFFFFFFFFFF3FDDDDDDDDDDD DDDBFFAAAAAAAAAAAACC022AAAAAAAAAAABC0240000000000003FC30ECA8641FDBCBFF AAAAAAAAAAAACC022AAAAAAAAAAABC022AAAAAAAAAAAB3FBD6480F2B9D652BFFAAAAAA AAAAAACC022AAAAAAAAAAABC0215555555555563FB56D9B1DF623AEBFFAAAAAAAAAAAA CC022AAAAAAAAAAABC0200000000000013FAC71C71C71C732BFFAAAAAAAAAAAACC022A AAAAAAAAAABC01D5555555555573F9F19690E085821BFFAAAAAAAAAAAACC022AAAAAAA AAAABC01AAAAAAAAAAAAC3F80AFF9EE8DD802BFFAAAAAAAAAAAACC022AAAAAAAAAAABC 018000000000001BF86C16C16C16BDEBFFAAAAAAAAAAAACC022AAAAAAAAAAABC015555 555555556BF9C10AFF9EE8DC0BFFAAAAAAAAAAAACC022AAAAAAAAAAABC012AAAAAAAAA AABBFA4DBF86A314DB4BFFAAAAAAAAAAAACC022AAAAAAAAAAABC010000000000000BFA A2B3C4D5E6F75BFFAAAAAAAAAAAACC022AAAAAAAAAAABC00AAAAAAAAAAAABBFADF623A 67EAC25BFFAAAAAAAAAAAACC022AAAAAAAAAAABC005555555555556BFB01E573AC901E 0BFFAAAAAAAAAAAACC022AAAAAAAAAAABC000000000000001BFB07F6E5D4C3B25BFFAA AAAAAAAAAACC022AAAAAAAAAAABBFF5555555555558BFB01E573AC901E0BFFAAAAAAAA AAAACC022AAAAAAAAAAABBFE555555555555BBFADF623A67EAC25BFFAAAAAAAAAAAACC 022AAAAAAAAAAABBCC8000000000000BFAA2B3C4D5E6F77BFFAAAAAAAAAAAACC022AAA AAAAAAAAB3FE555555555554FBFA4DBF86A314DB7BFFAAAAAAAAAAAACC022AAAAAAAAA AAB3FF5555555555552BF9C10AFF9EE8DC7BFFAAAAAAAAAAAACC022AAAAAAAAAAAB3FF FFFFFFFFFFFFCBF86C16C16C16BF8BFFAAAAAAAAAAAACC022AAAAAAAAAAAB400555555 55555533F80AFF9EE8DD7E6BFFAAAAAAAAAAAACC022AAAAAAAAAAAB400AAAAAAAAAAAA 83F9F19690E085808BFFAAAAAAAAAAAACC022AAAAAAAAAAAB400FFFFFFFFFFFFD3FAC7 1C71C71C720BFFAAAAAAAAAAAACC022AAAAAAAAAAAB4012AAAAAAAAAAA93FB56D9B1DF 623A8BFFAAAAAAAAAAAACC022AAAAAAAAAAAB40155555555555543FBD6480F2B9D64AB FFAAAAAAAAAAAACC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FC30ECA8641FDBABFFAAAA AAAAAAAACC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FC7CC6BB5AA4995BFFAAAAAAAAAA AACC022AAAAAAAAAAAB401D5555555555553FCCEB240795CEB5BFFAAAAAAAAAAAACC02 2AAAAAAAAAAAB40200000000000003FD13579BE02468CBFFAAAAAAAAAAAACC022AAAAA AAAAAAB40215555555555553FD425ED097B4260BFFAAAAAAAAAAAACC022AAAAAAAAAAA B4022AAAAAAAAAAAA3FD746EBE635DAD5BFFAAAAAAAAAAAACC022AAAAAAAAAAAB4023F FFFFFFFFFFF3FDA987654320FEEBFFAAAAAAAAAAAACC021555555555556C0240000000 000003FBA2B3C4D5E6F89BFFAAAAAAAAAAAACC021555555555556C022AAAAAAAAAAAB3 FB1722833944A62BFFAAAAAAAAAAAACC021555555555556C0215555555555563FA2F68 4BDA12F7DBFFAAAAAAAAAAAACC021555555555556C0200000000000013F823456789AB D47BFFAAAAAAAAAAAACC021555555555556C01D555555555557BF90AFF9EE8DD79FBFF AAAAAAAAAAAACC021555555555556C01AAAAAAAAAAAACBFA3B8B302A7A1DFBFFAAAAAA AAAAAACC021555555555556C018000000000001BFAD950C83FB72D7BFFAAAAAAAAAAAA CC021555555555556C015555555555556BFB2F684BDA12F5FBFFAAAAAAAAAAAACC0215 55555555556C012AAAAAAAAAAABBFB66054F43E32C9BFFAAAAAAAAAAAACC0215555555 55556C010000000000000BFB907F6E5D4C3AABFFAAAAAAAAAAAACC021555555555556C 00AAAAAAAAAAAABBFBAED6A9264E201BFFAAAAAAAAAAAACC021555555555556C005555 555555556BFBC10AFF9EE8DCFBFFAAAAAAAAAAAACC021555555555556C000000000000 001BFBC71C71C71C715BFFAAAAAAAAAAAACC021555555555556BFF5555555555558BFB C10AFF9EE8DD0BFFAAAAAAAAAAAACC021555555555556BFE555555555555BBFBAED6A9 264E203BFFAAAAAAAAAAAACC021555555555556BCC8000000000000BFB907F6E5D4C3A CBFFAAAAAAAAAAAACC0215555555555563FE555555555554FBFB66054F43E32CCBFFAA AAAAAAAAAACC0215555555555563FF5555555555552BFB2F684BDA12F62BFFAAAAAAAA AAAACC0215555555555563FFFFFFFFFFFFFFCBFAD950C83FB72DEBFFAAAAAAAAAAAACC 0215555555555564005555555555553BFA3B8B302A7A1E7BFFAAAAAAAAAAAACC021555 555555556400AAAAAAAAAAAA8BF90AFF9EE8DD7B8BFFAAAAAAAAAAAACC021555555555 556400FFFFFFFFFFFFD3F823456789ABD00BFFAAAAAAAAAAAACC021555555555556401 2AAAAAAAAAAA93FA2F684BDA12F70BFFAAAAAAAAAAAACC021555555555556401555555 55555543FB1722833944A5ABFFAAAAAAAAAAAACC0215555555555564017FFFFFFFFFFF F3FBA2B3C4D5E6F85BFFAAAAAAAAAAAACC021555555555556401AAAAAAAAAAAAA3FC1D 33F5617839DBFFAAAAAAAAAAAACC021555555555556401D5555555555553FC6F1F7A80 308BDBFFAAAAAAAAAAAACC02155555555555640200000000000003FCC71C71C71C721B FFAAAAAAAAAAAACC02155555555555640215555555555553FD12956D9B1DF64BFFAAAA AAAAAAAACC0215555555555564022AAAAAAAAAAAA3FD44A55B66C77D9BFFAAAAAAAAAA AACC0215555555555564023FFFFFFFFFFFF3FD79BE02468ACF2BFFAAAAAAAAAAAACC02 0000000000001C0240000000000003FAEB851EB851ECEBFFAAAAAAAAAAAACC02000000 0000001C022AAAAAAAAAAAB3F9A8C536FE1A900BFFAAAAAAAAAAAACC02000000000000 1C021555555555556BF753D0F8CB48658BFFAAAAAAAAAAAACC020000000000001C0200 00000000001BFA11111111110F2BFFAAAAAAAAAAAACC020000000000001C01D5555555 55557BFADF623A67EAC13BFFAAAAAAAAAAAACC020000000000001C01AAAAAAAAAAAACB FB4AB6CD8EFB112BFFAAAAAAAAAAAACC020000000000001C018000000000001BFB9999 99999998EBFFAAAAAAAAAAAACC020000000000001C015555555555556BFBDC598153D0 F83BFFAAAAAAAAAAAACC020000000000001C012AAAAAAAAAAABBFC097B425ED0976BFF AAAAAAAAAAAACC020000000000001C010000000000000BFC1EB851EB851E7BFFAAAAAA AAAAAACC020000000000001C00AAAAAAAAAAAABBFC2DE3EF5006113BFFAAAAAAAAAAAA CC020000000000001C005555555555556BFC36FE1A8C536FABFFAAAAAAAAAAAACC0200 00000000001C000000000000001BFC3A06D3A06D39CBFFAAAAAAAAAAAACC0200000000 00001BFF5555555555558BFC36FE1A8C536F9BFFAAAAAAAAAAAACC020000000000001B FE555555555555BBFC2DE3EF5006113BFFAAAAAAAAAAAACC020000000000001BCC8000 000000000BFC1EB851EB851E7BFFAAAAAAAAAAAACC0200000000000013FE5555555555 54FBFC097B425ED0977BFFAAAAAAAAAAAACC0200000000000013FF5555555555552BFB DC598153D0F85BFFAAAAAAAAAAAACC0200000000000013FFFFFFFFFFFFFFCBFB999999 9999992BFFAAAAAAAAAAAACC0200000000000014005555555555553BFB4AB6CD8EFB11 6BFFAAAAAAAAAAAACC020000000000001400AAAAAAAAAAAA8BFADF623A67EAC23BFFAA AAAAAAAAAACC020000000000001400FFFFFFFFFFFFDBFA1111111111106BFFAAAAAAAA AAAACC0200000000000014012AAAAAAAAAAA9BF753D0F8CB486B4BFFAAAAAAAAAAAACC 02000000000000140155555555555543F9A8C536FE1A8DBBFFAAAAAAAAAAAACC020000 0000000014017FFFFFFFFFFFF3FAEB851EB851EC4BFFAAAAAAAAAAAACC020000000000 001401AAAAAAAAAAAAA3FB8D76B54932718BFFAAAAAAAAAAAACC020000000000001401 D5555555555553FC18A6DFC3518ABBFFAAAAAAAAAAAACC020000000000001402000000 00000003FC70A3D70A3D710BFFAAAAAAAAAAAACC020000000000001402155555555555 53FCCEB240795CEB6BFFAAAAAAAAAAAACC0200000000000014022AAAAAAAAAAAA3FD19 690E0857FD0BFFAAAAAAAAAAAACC0200000000000014023FFFFFFFFFFFF3FD4E81B4E8 1B4E9BFFAAAAAAAAAAAACC01D555555555557C0240000000000003F96C16C16C16C2CB FFAAAAAAAAAAAACC01D555555555557C022AAAAAAAAAAABBF8845C8A0CE50DFBFFAAAA AAAAAAAACC01D555555555557C021555555555556BFA5FF3DD1BAF97BBFFAAAAAAAAAA AACC01D555555555557C020000000000001BFB23456789ABCD3BFFAAAAAAAAAAAACC01 D555555555557C01D555555555557BFB8A6DFC3518A64BFFAAAAAAAAAAAACC01D55555 5555557C01AAAAAAAAAAAACBFBE573AC901E56CBFFAAAAAAAAAAAACC01D55555555555 7C018000000000001BFC1A2B3C4D5E6F4BFFAAAAAAAAAAAACC01D555555555557C0155 55555555556BFC3B8B302A7A1EEBFFAAAAAAAAAAAACC01D555555555557C012AAAAAAA AAAABBFC56D9B1DF623A3BFFAAAAAAAAAAAACC01D555555555557C010000000000000B FC6C16C16C16C14BFFAAAAAAAAAAAACC01D555555555557C00AAAAAAAAAAAABBFC7B42 5ED097B40BFFAAAAAAAAAAAACC01D555555555557C005555555555556BFC845C8A0CE5 127BFFAAAAAAAAAAAACC01D555555555557C000000000000001BFC87654320FEDC9BFF AAAAAAAAAAAACC01D555555555557BFF5555555555558BFC845C8A0CE5126BFFAAAAAA AAAAAACC01D555555555557BFE555555555555BBFC7B425ED097B40BFFAAAAAAAAAAAA CC01D555555555557BCC8000000000000BFC6C16C16C16C14BFFAAAAAAAAAAAACC01D5 555555555573FE555555555554FBFC56D9B1DF623A4BFFAAAAAAAAAAAACC01D5555555 555573FF5555555555552BFC3B8B302A7A1EFBFFAAAAAAAAAAAACC01D5555555555573 FFFFFFFFFFFFFFCBFC1A2B3C4D5E6F6BFFAAAAAAAAAAAACC01D5555555555574005555 555555553BFBE573AC901E571BFFAAAAAAAAAAAACC01D555555555557400AAAAAAAAAA AA8BFB8A6DFC3518A6BBFFAAAAAAAAAAAACC01D555555555557400FFFFFFFFFFFFDBFB 23456789ABCDDBFFAAAAAAAAAAAACC01D5555555555574012AAAAAAAAAAA9BFA5FF3DD 1BAF98ABFFAAAAAAAAAAAACC01D5555555555574015555555555554BF8845C8A0CE511 9BFFAAAAAAAAAAAACC01D5555555555574017FFFFFFFFFFFF3F96C16C16C16C1EBFFAA AAAAAAAAAACC01D555555555557401AAAAAAAAAAAAA3FAE573AC901E57CBFFAAAAAAAA AAAACC01D555555555557401D5555555555553FB9690E0857FCFCBFFAAAAAAAAAAAACC 01D55555555555740200000000000003FC23456789ABCE2BFFAAAAAAAAAAAACC01D555 55555555740215555555555553FC8153D0F8CB489BFFAAAAAAAAAAAACC01D555555555 5574022AAAAAAAAAAAA3FCE573AC901E574BFFAAAAAAAAAAAACC01D555555555557402 3FFFFFFFFFFFF3FD27D27D27D27D2BFFAAAAAAAAAAAACC01AAAAAAAAAAAACC02400000 0000000BF86C16C16C16BE9BFFAAAAAAAAAAAACC01AAAAAAAAAAAACC022AAAAAAAAAAA BBFA722833944A548BFFAAAAAAAAAAAACC01AAAAAAAAAAAACC021555555555556BFB38 8277166054ABFFAAAAAAAAAAAACC01AAAAAAAAAAAACC020000000000001BFBABCDF012 3455FBFFAAAAAAAAAAAACC01AAAAAAAAAAAACC01D555555555557BFC097B425ED0978B FFAAAAAAAAAAAACC01AAAAAAAAAAAACC01AAAAAAAAAAAACBFC36FE1A8C536FCBFFAAAA AAAAAAAACC01AAAAAAAAAAAACC018000000000001BFC5E6F8091A2B3ABFFAAAAAAAAAA AACC01AAAAAAAAAAAACC015555555555556BFC7FCF746EBE632BFFAAAAAAAAAAAACC01 AAAAAAAAAAAACC012AAAAAAAAAAABBFC9B1DF623A67E7BFFAAAAAAAAAAAACC01AAAAAA AAAAAACC010000000000000BFCB05B05B05B058BFFAAAAAAAAAAAACC01AAAAAAAAAAAA CC00AAAAAAAAAAAABBFCBF86A314DBF84BFFAAAAAAAAAAAACC01AAAAAAAAAAAACC0055 55555555556BFCC8A0CE512956CBFFAAAAAAAAAAAACC01AAAAAAAAAAAACC0000000000 00001BFCCBA987654320EBFFAAAAAAAAAAAACC01AAAAAAAAAAAACBFF5555555555558B FCC8A0CE512956BBFFAAAAAAAAAAAACC01AAAAAAAAAAAACBFE555555555555BBFCBF86 A314DBF85BFFAAAAAAAAAAAACC01AAAAAAAAAAAACBCC8000000000000BFCB05B05B05B 059BFFAAAAAAAAAAAACC01AAAAAAAAAAAAC3FE555555555554FBFC9B1DF623A67E9BFF AAAAAAAAAAAACC01AAAAAAAAAAAAC3FF5555555555552BFC7FCF746EBE634BFFAAAAAA AAAAAACC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFC5E6F8091A2B3BBFFAAAAAAAAAAAA CC01AAAAAAAAAAAAC4005555555555553BFC36FE1A8C536FDBFFAAAAAAAAAAAACC01AA AAAAAAAAAAC400AAAAAAAAAAAA8BFC097B425ED097BBFFAAAAAAAAAAAACC01AAAAAAAA AAAAC400FFFFFFFFFFFFDBFBABCDF01234567BFFAAAAAAAAAAAACC01AAAAAAAAAAAAC4 012AAAAAAAAAAA9BFB388277166054FBFFAAAAAAAAAAAACC01AAAAAAAAAAAAC4015555 555555554BFA722833944A55ABFFAAAAAAAAAAAACC01AAAAAAAAAAAAC4017FFFFFFFFF FFFBF86C16C16C16C14BFFAAAAAAAAAAAACC01AAAAAAAAAAAAC401AAAAAAAAAAAAA3F9 A8C536FE1A8D1BFFAAAAAAAAAAAACC01AAAAAAAAAAAAC401D5555555555553FB0E0857 FCF7472BFFAAAAAAAAAAAACC01AAAAAAAAAAAAC40200000000000003FBBE02468ACF13 BBFFAAAAAAAAAAAACC01AAAAAAAAAAAAC40215555555555553FC3D0F8CB487044BFFAA AAAAAAAAAACC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FCA12F684BDA12FBFFAAAAAAAA AAAACC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FD05B05B05B05B0BFFAAAAAAAAAAAACC 018000000000001C024000000000000BFA47AE147AE146ABFFAAAAAAAAAAAACC018000 000000001C022AAAAAAAAAAABBFB2F684BDA12F5CBFFAAAAAAAAAAAACC018000000000 001C021555555555556BFBAED6A9264E202BFFAAAAAAAAAAAACC018000000000001C02 0000000000001BFC111111111110CBFFAAAAAAAAAAAACC018000000000001C01D55555 5555557BFC44A55B66C77D4BFFAAAAAAAAAAAACC018000000000001C01AAAAAAAAAAAA CBFC722833944A558BFFAAAAAAAAAAAACC018000000000001C018000000000001BFC99 99999999996BFFAAAAAAAAAAAACC018000000000001C015555555555556BFCBAF98D76 B548EBFFAAAAAAAAAAAACC018000000000001C012AAAAAAAAAAABBFCD6480F2B9D643B FFAAAAAAAAAAAACC018000000000001C010000000000000BFCEB851EB851EB4BFFAAAA AAAAAAAACC018000000000001C00AAAAAAAAAAAABBFCFAB0BC1CD2DE0BFFAAAAAAAAAA AACC018000000000001C005555555555556BFD01E573AC901E3BFFAAAAAAAAAAAACC01 8000000000001C000000000000001BFD0369D0369D035BFFAAAAAAAAAAAACC01800000 0000001BFF5555555555558BFD01E573AC901E4BFFAAAAAAAAAAAACC01800000000000 1BFE555555555555BBFCFAB0BC1CD2DE1BFFAAAAAAAAAAAACC018000000000001BCC80 00000000000BFCEB851EB851EB5BFFAAAAAAAAAAAACC0180000000000013FE55555555 5554FBFCD6480F2B9D645BFFAAAAAAAAAAAACC0180000000000013FF5555555555552B FCBAF98D76B5490BFFAAAAAAAAAAAACC0180000000000013FFFFFFFFFFFFFFCBFC9999 999999997BFFAAAAAAAAAAAACC0180000000000014005555555555553BFC722833944A 559BFFAAAAAAAAAAAACC018000000000001400AAAAAAAAAAAA8BFC44A55B66C77D7BFF AAAAAAAAAAAACC018000000000001400FFFFFFFFFFFFDBFC1111111111110BFFAAAAAA AAAAAACC0180000000000014012AAAAAAAAAAA9BFBAED6A9264E207BFFAAAAAAAAAAAA CC0180000000000014015555555555554BFB2F684BDA12F65BFFAAAAAAAAAAAACC0180 000000000014017FFFFFFFFFFFFBFA47AE147AE1475BFFAAAAAAAAAAAACC0180000000 00001401AAAAAAAAAAAAABF6845C8A0CE509ABFFAAAAAAAAAAAACC0180000000000014 01D5555555555553FA2F684BDA12F73BFFAAAAAAAAAAAACC0180000000000014020000 0000000003FB47AE147AE1482BFFAAAAAAAAAAAACC0180000000000014021555555555 5553FC01E573AC901E8BFFAAAAAAAAAAAACC0180000000000014022AAAAAAAAAAAA3FC 66054F43E32D3BFFAAAAAAAAAAAACC0180000000000014023FFFFFFFFFFFF3FCD0369D 0369D04BFFAAAAAAAAAAAACC015555555555556C024000000000000BFB07F6E5D4C3B2 9BFFAAAAAAAAAAAACC015555555555556C022AAAAAAAAAAABBFB9388277166050BFFAA AAAAAAAAAACC015555555555556C021555555555556BFC097B425ED0979BFFAAAAAAAA AAAACC015555555555556C020000000000001BFC4320FEDCBA984BFFAAAAAAAAAAAACC 015555555555556C01D555555555557BFC76B549327104CBFFAAAAAAAAAAAACC015555 555555556C01AAAAAAAAAAAACBFCA438215FF3DD0BFFAAAAAAAAAAAACC015555555555 556C018000000000001BFCCBA987654320EBFFAAAAAAAAAAAACC015555555555556C01 5555555555556BFCED097B425ED08BFFAAAAAAAAAAAACC015555555555556C012AAAAA AAAAAABBFD042BFE7BA375FBFFAAAAAAAAAAAACC015555555555556C01000000000000 0BFD0ECA8641FDB97BFFAAAAAAAAAAAACC015555555555556C00AAAAAAAAAAAABBFD16 6054F43E32DBFFAAAAAAAAAAAACC015555555555556C005555555555556BFD1AED6A92 64E20BFFAAAAAAAAAAAACC015555555555556C000000000000001BFD1C71C71C71C71B FFAAAAAAAAAAAACC015555555555556BFF5555555555558BFD1AED6A9264E20BFFAAAA AAAAAAAACC015555555555556BFE555555555555BBFD166054F43E32DBFFAAAAAAAAAA AACC015555555555556BCC8000000000000BFD0ECA8641FDB97BFFAAAAAAAAAAAACC01 55555555555563FE555555555554FBFD042BFE7BA375FBFFAAAAAAAAAAAACC01555555 55555563FF5555555555552BFCED097B425ED09BFFAAAAAAAAAAAACC01555555555555 63FFFFFFFFFFFFFFCBFCCBA9876543210BFFAAAAAAAAAAAACC01555555555555640055 55555555553BFCA438215FF3DD2BFFAAAAAAAAAAAACC015555555555556400AAAAAAAA AAAA8BFC76B5493271050BFFAAAAAAAAAAAACC015555555555556400FFFFFFFFFFFFDB FC4320FEDCBA989BFFAAAAAAAAAAAACC0155555555555564012AAAAAAAAAAA9BFC097B 425ED097DBFFAAAAAAAAAAAACC0155555555555564015555555555554BFB9388277166 057BFFAAAAAAAAAAAACC0155555555555564017FFFFFFFFFFFFBFB07F6E5D4C3B2DBFF AAAAAAAAAAAACC015555555555556401AAAAAAAAAAAAABF9C10AFF9EE8DDBBFFAAAAAA AAAAAACC015555555555556401D5555555555553F89CA252ADB363CBFFAAAAAAAAAAAA CC01555555555555640200000000000003FAC71C71C71C724BFFAAAAAAAAAAAACC0155 5555555555640215555555555553FB9FAB0BC1CD2DEBFFAAAAAAAAAAAACC0155555555 555564022AAAAAAAAAAAA3FC33F5617839A5ABFFAAAAAAAAAAAACC0155555555555564 023FFFFFFFFFFFF3FC9E26AF37C048BBFFAAAAAAAAAAAACC012AAAAAAAAAAABC024000 000000000BFB59E26AF37C045BFFAAAAAAAAAAAACC012AAAAAAAAAAABC022AAAAAAAAA AABBFBE573AC901E56CBFFAAAAAAAAAAAACC012AAAAAAAAAAABC021555555555556BFC 327104EE2CC07BFFAAAAAAAAAAAACC012AAAAAAAAAAABC020000000000001BFC6C16C1 6C16C12BFFAAAAAAAAAAAACC012AAAAAAAAAAABC01D555555555557BFC9FAB0BC1CD2D ABFFAAAAAAAAAAAACC012AAAAAAAAAAABC01AAAAAAAAAAAACBFCCD2DE3EF5005EBFFAA AAAAAAAAAACC012AAAAAAAAAAABC018000000000001BFCF49F49F49F49CBFFAAAAAAAA AAAACC012AAAAAAAAAAABC015555555555556BFD0AFF9EE8DD7CBBFFAAAAAAAAAAAACC 012AAAAAAAAAAABC012AAAAAAAAAAABBFD18A6DFC3518A6BFFAAAAAAAAAAAACC012AAA AAAAAAAABC010000000000000BFD23456789ABCDEBFFAAAAAAAAAAAACC012AAAAAAAAA AABC00AAAAAAAAAAAABBFD2ADB363BEC474BFFAAAAAAAAAAAACC012AAAAAAAAAAABC00 5555555555556BFD2F684BDA12F67BFFAAAAAAAAAAAACC012AAAAAAAAAAABC00000000 0000001BFD30ECA8641FDB8BFFAAAAAAAAAAAACC012AAAAAAAAAAABBFF555555555555 8BFD2F684BDA12F67BFFAAAAAAAAAAAACC012AAAAAAAAAAABBFE555555555555BBFD2A DB363BEC474BFFAAAAAAAAAAAACC012AAAAAAAAAAABBCC8000000000000BFD23456789 ABCDEBFFAAAAAAAAAAAACC012AAAAAAAAAAAB3FE555555555554FBFD18A6DFC3518A6B FFAAAAAAAAAAAACC012AAAAAAAAAAAB3FF5555555555552BFD0AFF9EE8DD7CBBFFAAAA AAAAAAAACC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFCF49F49F49F49DBFFAAAAAAAAAA AACC012AAAAAAAAAAAB4005555555555553BFCCD2DE3EF50060BFFAAAAAAAAAAAACC01 2AAAAAAAAAAAB400AAAAAAAAAAAA8BFC9FAB0BC1CD2DEBFFAAAAAAAAAAAACC012AAAAA AAAAAAB400FFFFFFFFFFFFDBFC6C16C16C16C17BFFAAAAAAAAAAAACC012AAAAAAAAAAA B4012AAAAAAAAAAA9BFC327104EE2CC0BBFFAAAAAAAAAAAACC012AAAAAAAAAAAB40155 55555555554BFBE573AC901E573BFFAAAAAAAAAAAACC012AAAAAAAAAAAB4017FFFFFFF FFFFFBFB59E26AF37C049BFFAAAAAAAAAAAACC012AAAAAAAAAAAB401AAAAAAAAAAAAAB FA845C8A0CE5126BFFAAAAAAAAAAAACC012AAAAAAAAAAAB401D555555555555BF7E573 AC901E548BFFAAAAAAAAAAAACC012AAAAAAAAAAAB40200000000000003FA23456789AB CECBFFAAAAAAAAAAAACC012AAAAAAAAAAAB40215555555555553FB4DBF86A314DC2BFF AAAAAAAAAAAACC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FC0AFF9EE8DD7CCBFFAAAAAA AAAAAACC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FC7530ECA8641FDBFFAAAAAAAAAAAA CC010000000000000C024000000000000BFB9999999999999BFFAAAAAAAAAAAACC0100 00000000000C022AAAAAAAAAAABBFC12956D9B1DF60BFFAAAAAAAAAAAACC0100000000 00000C021555555555556BFC524C9C413B8B1BFFAAAAAAAAAAAACC010000000000000C 020000000000001BFC8BF258BF258BCBFFAAAAAAAAAAAACC010000000000000C01D555 555555557BFCBF86A314DBF84BFFAAAAAAAAAAAACC010000000000000C01AAAAAAAAAA AACBFCED097B425ED08BFFAAAAAAAAAAAACC010000000000000C018000000000001BFD 0A3D70A3D70A3BFFAAAAAAAAAAAACC010000000000000C015555555555556BFD1AED6A 9264E20BFFAAAAAAAAAAAACC010000000000000C012AAAAAAAAAAABBFD2894AB6CD8EF BBFFAAAAAAAAAAAACC010000000000000C010000000000000BFD3333333333333BFFAA AAAAAAAAAACC010000000000000C00AAAAAAAAAAAABBFD3AC901E573AC9BFFAAAAAAAA AAAACC010000000000000C005555555555556BFD3F5617839A5BCBFFAAAAAAAAAAAACC 010000000000000C000000000000001BFD40DA740DA740DBFFAAAAAAAAAAAACC010000 000000000BFF5555555555558BFD3F5617839A5BCBFFAAAAAAAAAAAACC010000000000 000BFE555555555555BBFD3AC901E573AC9BFFAAAAAAAAAAAACC010000000000000BCC 8000000000000BFD3333333333333BFFAAAAAAAAAAAACC0100000000000003FE555555 555554FBFD2894AB6CD8EFBBFFAAAAAAAAAAAACC0100000000000003FF555555555555 2BFD1AED6A9264E20BFFAAAAAAAAAAAACC0100000000000003FFFFFFFFFFFFFFCBFD0A 3D70A3D70A4BFFAAAAAAAAAAAACC0100000000000004005555555555553BFCED097B42 5ED09BFFAAAAAAAAAAAACC010000000000000400AAAAAAAAAAAA8BFCBF86A314DBF87B FFAAAAAAAAAAAACC010000000000000400FFFFFFFFFFFFDBFC8BF258BF258C1BFFAAAA AAAAAAAACC0100000000000004012AAAAAAAAAAA9BFC524C9C413B8B5BFFAAAAAAAAAA AACC0100000000000004015555555555554BFC12956D9B1DF64BFFAAAAAAAAAAAACC01 00000000000004017FFFFFFFFFFFFBFB999999999999DBFFAAAAAAAAAAAACC01000000 0000000401AAAAAAAAAAAAABFB01E573AC901E7BFFAAAAAAAAAAAACC01000000000000 0401D555555555555BF97839A5BC7DEA2BFFAAAAAAAAAAAACC01000000000000040200 000000000003F947AE147AE1488BFFAAAAAAAAAAAACC01000000000000040215555555 555553FB0E0857FCF746EBFFAAAAAAAAAAAACC0100000000000004022AAAAAAAAAAAA3 FBD6480F2B9D644BFFAAAAAAAAAAAACC0100000000000004023FFFFFFFFFFFF3FC5555 555555553BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC024000000000000BFBC71C71C71C 719BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC022AAAAAAAAAAABBFC2956D9B1DF620BFF AAAAAAAAAAAACC00AAAAAAAAAAAABC021555555555556BFC690E0857FCF71BFFAAAAAA AAAAAACC00AAAAAAAAAAAABC020000000000001BFCA2B3C4D5E6F7CBFFAAAAAAAAAAAA CC00AAAAAAAAAAAABC01D555555555557BFCD6480F2B9D644BFFAAAAAAAAAAAACC00AA AAAAAAAAAABC01AAAAAAAAAAAACBFD01E573AC901E4BFFAAAAAAAAAAAACC00AAAAAAAA AAAABC018000000000001BFD159E26AF37C03BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC 015555555555556BFD264E209DC5980BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC012AAA AAAAAAAABBFD33F5617839A5BBFFAAAAAAAAAAAACC00AAAAAAAAAAAABC010000000000 000BFD3E93E93E93E93BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD 4629B7F0D4629BFFAAAAAAAAAAAACC00AAAAAAAAAAAABC005555555555556BFD4AB6CD 8EFB11CBFFAAAAAAAAAAAACC00AAAAAAAAAAAABC000000000000001BFD4C3B2A1907F6 DBFFAAAAAAAAAAAACC00AAAAAAAAAAAABBFF5555555555558BFD4AB6CD8EFB11CBFFAA AAAAAAAAAACC00AAAAAAAAAAAABBFE555555555555BBFD4629B7F0D4629BFFAAAAAAAA AAAACC00AAAAAAAAAAAABBCC8000000000000BFD3E93E93E93E93BFFAAAAAAAAAAAACC 00AAAAAAAAAAAAB3FE555555555554FBFD33F5617839A5BBFFAAAAAAAAAAAACC00AAAA AAAAAAAAB3FF5555555555552BFD264E209DC5980BFFAAAAAAAAAAAACC00AAAAAAAAAA AAB3FFFFFFFFFFFFFFCBFD159E26AF37C04BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB400 5555555555553BFD01E573AC901E5BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB400AAAAAA AAAAAA8BFCD6480F2B9D647BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB400FFFFFFFFFFFF DBFCA2B3C4D5E6F80BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFC69 0E0857FCF75BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB4015555555555554BFC2956D9B1 DF624BFFAAAAAAAAAAAACC00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFBC71C71C71C71DB FFAAAAAAAAAAAACC00AAAAAAAAAAAAB401AAAAAAAAAAAAABFB2F684BDA12F67BFFAAAA AAAAAAAACC00AAAAAAAAAAAAB401D555555555555BFA1722833944A51BFFAAAAAAAAAA AACC00AAAAAAAAAAAAB40200000000000003F823456789ABD10BFFAAAAAAAAAAAACC00 AAAAAAAAAAAAB40215555555555553FAC10AFF9EE8DDBBFFAAAAAAAAAAAACC00AAAAAA AAAAAAB4022AAAAAAAAAAAA3FBA8C536FE1A8C4BFFAAAAAAAAAAAACC00AAAAAAAAAAAA B4023FFFFFFFFFFFF3FC3E93E93E93E93BFFAAAAAAAAAAAACC005555555555556C0240 00000000000BFBE26AF37C048D1BFFAAAAAAAAAAAACC005555555555556C022AAAAAAA AAAABBFC36FE1A8C536FCBFFAAAAAAAAAAAACC005555555555556C021555555555556B FC76B549327104DBFFAAAAAAAAAAAACC005555555555556C020000000000001BFCB05B 05B05B058BFFAAAAAAAAAAAACC005555555555556C01D555555555557BFCE3EF500611 720BFFAAAAAAAAAAAACC005555555555556C01AAAAAAAAAAAACBFD08B91419CA252BFF AAAAAAAAAAAACC005555555555556C018000000000001BFD1C71C71C71C71BFFAAAAAA AAAAAACC005555555555556C015555555555556BFD2D21C10AFF9EEBFFAAAAAAAAAAAA CC005555555555556C012AAAAAAAAAAABBFD3AC901E573AC9BFFAAAAAAAAAAAACC0055 55555555556C010000000000000BFD456789ABCDF01BFFAAAAAAAAAAAACC0055555555 55556C00AAAAAAAAAAAABBFD4CFD585E0E697BFFAAAAAAAAAAAACC005555555555556C 005555555555556BFD518A6DFC3518ABFFAAAAAAAAAAAACC005555555555556C000000 000000001BFD530ECA8641FDBBFFAAAAAAAAAAAACC005555555555556BFF5555555555 558BFD518A6DFC3518ABFFAAAAAAAAAAAACC005555555555556BFE555555555555BBFD 4CFD585E0E697BFFAAAAAAAAAAAACC005555555555556BCC8000000000000BFD456789 ABCDF01BFFAAAAAAAAAAAACC0055555555555563FE555555555554FBFD3AC901E573AC 9BFFAAAAAAAAAAAACC0055555555555563FF5555555555552BFD2D21C10AFF9EEBFFAA AAAAAAAAAACC0055555555555563FFFFFFFFFFFFFFCBFD1C71C71C71C72BFFAAAAAAAA AAAACC0055555555555564005555555555553BFD08B91419CA253BFFAAAAAAAAAAAACC 005555555555556400AAAAAAAAAAAA8BFCE3EF500611723BFFAAAAAAAAAAAACC005555 555555556400FFFFFFFFFFFFDBFCB05B05B05B05CBFFAAAAAAAAAAAACC005555555555 5564012AAAAAAAAAAA9BFC76B5493271052BFFAAAAAAAAAAAACC005555555555556401 5555555555554BFC36FE1A8C53700BFFAAAAAAAAAAAACC0055555555555564017FFFFF FFFFFFFBFBE26AF37C048D5BFFAAAAAAAAAAAACC005555555555556401AAAAAAAAAAAA ABFB4AB6CD8EFB11FBFFAAAAAAAAAAAACC005555555555556401D555555555555BFA4D BF86A314DC1BFFAAAAAAAAAAAACC00555555555555640200000000000003F623456789 ABD40BFFAAAAAAAAAAAACC00555555555555640215555555555553FA8A6DFC3518A6BB FFAAAAAAAAAAAACC0055555555555564022AAAAAAAAAAAA3FB8D76B5493270CBFFAAAA AAAAAAAACC0055555555555564023FFFFFFFFFFFF3FC30ECA8641FDB7BFFAAAAAAAAAA AACC000000000000001C024000000000000BFBEB851EB851EB9BFFAAAAAAAAAAAACC00 0000000000001C022AAAAAAAAAAABBFC3B8B302A7A1F0BFFAAAAAAAAAAAACC00000000 0000001C021555555555556BFC7B425ED097B41BFFAAAAAAAAAAAACC00000000000000 1C020000000000001BFCB4E81B4E81B4CBFFAAAAAAAAAAAACC000000000000001C01D5 55555555557BFCE87C65A438214BFFAAAAAAAAAAAACC000000000000001C01AAAAAAAA AAAACBFD0AFF9EE8DD7CCBFFAAAAAAAAAAAACC000000000000001C018000000000001B FD1EB851EB851EBBFFAAAAAAAAAAAACC000000000000001C015555555555556BFD2F68 4BDA12F68BFFAAAAAAAAAAAACC000000000000001C012AAAAAAAAAAABBFD3D0F8CB487 043BFFAAAAAAAAAAAACC000000000000001C010000000000000BFD47AE147AE147BBFF AAAAAAAAAAAACC000000000000001C00AAAAAAAAAAAABBFD4F43E32D21C11BFFAAAAAA AAAAAACC000000000000001C005555555555556BFD53D0F8CB48704BFFAAAAAAAAAAAA CC000000000000001C000000000000001BFD5555555555555BFFAAAAAAAAAAAACC0000 00000000001BFF5555555555558BFD53D0F8CB48704BFFAAAAAAAAAAAACC0000000000 00001BFE555555555555BBFD4F43E32D21C11BFFAAAAAAAAAAAACC000000000000001B CC8000000000000BFD47AE147AE147BBFFAAAAAAAAAAAACC0000000000000013FE5555 55555554FBFD3D0F8CB487043BFFAAAAAAAAAAAACC0000000000000013FF5555555555 552BFD2F684BDA12F68BFFAAAAAAAAAAAACC0000000000000013FFFFFFFFFFFFFFCBFD 1EB851EB851ECBFFAAAAAAAAAAAACC0000000000000014005555555555553BFD0AFF9E E8DD7CDBFFAAAAAAAAAAAACC000000000000001400AAAAAAAAAAAA8BFCE87C65A43821 7BFFAAAAAAAAAAAACC000000000000001400FFFFFFFFFFFFDBFCB4E81B4E81B50BFFAA AAAAAAAAAACC0000000000000014012AAAAAAAAAAA9BFC7B425ED097B46BFFAAAAAAAA AAAACC0000000000000014015555555555554BFC3B8B302A7A1F4BFFAAAAAAAAAAAACC 0000000000000014017FFFFFFFFFFFFBFBEB851EB851EBDBFFAAAAAAAAAAAACC000000 000000001401AAAAAAAAAAAAABFB53D0F8CB48707BFFAAAAAAAAAAAACC000000000000 001401D555555555555BFA5FF3DD1BAF991BFFAAAAAAAAAAAACC000000000000001402 00000000000003C80000000000000BFFAAAAAAAAAAAACC000000000000001402155555 55555553FA7839A5BC7DE9BBFFAAAAAAAAAAAACC0000000000000014022AAAAAAAAAAA A3FB845C8A0CE5124BFFAAAAAAAAAAAACC0000000000000014023FFFFFFFFFFFF3FC2C 5F92C5F92C3BFFAAAAAAAAAAAACBFF5555555555558C024000000000000BFBE26AF37C 048D1BFFAAAAAAAAAAAACBFF5555555555558C022AAAAAAAAAAABBFC36FE1A8C536FCB FFAAAAAAAAAAAACBFF5555555555558C021555555555556BFC76B549327104DBFFAAAA AAAAAAAACBFF5555555555558C020000000000001BFCB05B05B05B058BFFAAAAAAAAAA AACBFF5555555555558C01D555555555557BFCE3EF500611720BFFAAAAAAAAAAAACBFF 5555555555558C01AAAAAAAAAAAACBFD08B91419CA252BFFAAAAAAAAAAAACBFF555555 5555558C018000000000001BFD1C71C71C71C71BFFAAAAAAAAAAAACBFF555555555555 8C015555555555556BFD2D21C10AFF9EEBFFAAAAAAAAAAAACBFF5555555555558C012A AAAAAAAAAABBFD3AC901E573AC9BFFAAAAAAAAAAAACBFF5555555555558C0100000000 00000BFD456789ABCDF01BFFAAAAAAAAAAAACBFF5555555555558C00AAAAAAAAAAAABB FD4CFD585E0E697BFFAAAAAAAAAAAACBFF5555555555558C005555555555556BFD518A 6DFC3518ABFFAAAAAAAAAAAACBFF5555555555558C000000000000001BFD530ECA8641 FDBBFFAAAAAAAAAAAACBFF5555555555558BFF5555555555558BFD518A6DFC3518ABFF AAAAAAAAAAAACBFF5555555555558BFE555555555555BBFD4CFD585E0E697BFFAAAAAA AAAAAACBFF5555555555558BCC8000000000000BFD456789ABCDF01BFFAAAAAAAAAAAA CBFF55555555555583FE555555555554FBFD3AC901E573AC9BFFAAAAAAAAAAAACBFF55 555555555583FF5555555555552BFD2D21C10AFF9EEBFFAAAAAAAAAAAACBFF55555555 555583FFFFFFFFFFFFFFCBFD1C71C71C71C72BFFAAAAAAAAAAAACBFF55555555555584 005555555555553BFD08B91419CA253BFFAAAAAAAAAAAACBFF5555555555558400AAAA AAAAAAAA8BFCE3EF500611723BFFAAAAAAAAAAAACBFF5555555555558400FFFFFFFFFF FFDBFCB05B05B05B05CBFFAAAAAAAAAAAACBFF55555555555584012AAAAAAAAAAA9BFC 76B5493271052BFFAAAAAAAAAAAACBFF55555555555584015555555555554BFC36FE1A 8C53700BFFAAAAAAAAAAAACBFF55555555555584017FFFFFFFFFFFFBFBE26AF37C048D 5BFFAAAAAAAAAAAACBFF5555555555558401AAAAAAAAAAAAABFB4AB6CD8EFB11FBFFAA AAAAAAAAAACBFF5555555555558401D555555555555BFA4DBF86A314DC1BFFAAAAAAAA AAAACBFF555555555555840200000000000003F623456789ABD40BFFAAAAAAAAAAAACB FF555555555555840215555555555553FA8A6DFC3518A6BBFFAAAAAAAAAAAACBFF5555 5555555584022AAAAAAAAAAAA3FB8D76B5493270CBFFAAAAAAAAAAAACBFF5555555555 5584023FFFFFFFFFFFF3FC30ECA8641FDB7BFFAAAAAAAAAAAACBFE555555555555BC02 4000000000000BFBC71C71C71C71DBFFAAAAAAAAAAAACBFE555555555555BC022AAAAA AAAAAABBFC2956D9B1DF622BFFAAAAAAAAAAAACBFE555555555555BC02155555555555 6BFC690E0857FCF73BFFAAAAAAAAAAAACBFE555555555555BC020000000000001BFCA2 B3C4D5E6F7EBFFAAAAAAAAAAAACBFE555555555555BC01D555555555557BFCD6480F2B 9D646BFFAAAAAAAAAAAACBFE555555555555BC01AAAAAAAAAAAACBFD01E573AC901E5B FFAAAAAAAAAAAACBFE555555555555BC018000000000001BFD159E26AF37C04BFFAAAA AAAAAAAACBFE555555555555BC015555555555556BFD264E209DC5981BFFAAAAAAAAAA AACBFE555555555555BC012AAAAAAAAAAABBFD33F5617839A5CBFFAAAAAAAAAAAACBFE 555555555555BC010000000000000BFD3E93E93E93E94BFFAAAAAAAAAAAACBFE555555 555555BC00AAAAAAAAAAAABBFD4629B7F0D462ABFFAAAAAAAAAAAACBFE555555555555 BC005555555555556BFD4AB6CD8EFB11DBFFAAAAAAAAAAAACBFE555555555555BC0000 00000000001BFD4C3B2A1907F6EBFFAAAAAAAAAAAACBFE555555555555BBFF55555555 55558BFD4AB6CD8EFB11DBFFAAAAAAAAAAAACBFE555555555555BBFE555555555555BB FD4629B7F0D462ABFFAAAAAAAAAAAACBFE555555555555BBCC8000000000000BFD3E93 E93E93E94BFFAAAAAAAAAAAACBFE555555555555B3FE555555555554FBFD33F5617839 A5CBFFAAAAAAAAAAAACBFE555555555555B3FF5555555555552BFD264E209DC5981BFF AAAAAAAAAAAACBFE555555555555B3FFFFFFFFFFFFFFCBFD159E26AF37C05BFFAAAAAA AAAAAACBFE555555555555B4005555555555553BFD01E573AC901E6BFFAAAAAAAAAAAA CBFE555555555555B400AAAAAAAAAAAA8BFCD6480F2B9D649BFFAAAAAAAAAAAACBFE55 5555555555B400FFFFFFFFFFFFDBFCA2B3C4D5E6F82BFFAAAAAAAAAAAACBFE55555555 5555B4012AAAAAAAAAAA9BFC690E0857FCF77BFFAAAAAAAAAAAACBFE555555555555B4 015555555555554BFC2956D9B1DF626BFFAAAAAAAAAAAACBFE555555555555B4017FFF FFFFFFFFFBFBC71C71C71C721BFFAAAAAAAAAAAACBFE555555555555B401AAAAAAAAAA AAABFB2F684BDA12F6BBFFAAAAAAAAAAAACBFE555555555555B401D555555555555BFA 1722833944A59BFFAAAAAAAAAAAACBFE555555555555B40200000000000003F8234567 89ABCF0BFFAAAAAAAAAAAACBFE555555555555B40215555555555553FAC10AFF9EE8DD 3BFFAAAAAAAAAAAACBFE555555555555B4022AAAAAAAAAAAA3FBA8C536FE1A8C0BFFAA AAAAAAAAAACBFE555555555555B4023FFFFFFFFFFFF3FC3E93E93E93E91BFFAAAAAAAA AAAACBCC8000000000000C024000000000000BFB9999999999999BFFAAAAAAAAAAAACB CC8000000000000C022AAAAAAAAAAABBFC12956D9B1DF60BFFAAAAAAAAAAAACBCC8000 000000000C021555555555556BFC524C9C413B8B1BFFAAAAAAAAAAAACBCC8000000000 000C020000000000001BFC8BF258BF258BCBFFAAAAAAAAAAAACBCC8000000000000C01 D555555555557BFCBF86A314DBF84BFFAAAAAAAAAAAACBCC8000000000000C01AAAAAA AAAAAACBFCED097B425ED08BFFAAAAAAAAAAAACBCC8000000000000C01800000000000 1BFD0A3D70A3D70A3BFFAAAAAAAAAAAACBCC8000000000000C015555555555556BFD1A ED6A9264E20BFFAAAAAAAAAAAACBCC8000000000000C012AAAAAAAAAAABBFD2894AB6C D8EFBBFFAAAAAAAAAAAACBCC8000000000000C010000000000000BFD3333333333333B FFAAAAAAAAAAAACBCC8000000000000C00AAAAAAAAAAAABBFD3AC901E573AC9BFFAAAA AAAAAAAACBCC8000000000000C005555555555556BFD3F5617839A5BCBFFAAAAAAAAAA AACBCC8000000000000C000000000000001BFD40DA740DA740DBFFAAAAAAAAAAAACBCC 8000000000000BFF5555555555558BFD3F5617839A5BCBFFAAAAAAAAAAAACBCC800000 0000000BFE555555555555BBFD3AC901E573AC9BFFAAAAAAAAAAAACBCC800000000000 0BCC8000000000000BFD3333333333333BFFAAAAAAAAAAAACBCC80000000000003FE55 5555555554FBFD2894AB6CD8EFBBFFAAAAAAAAAAAACBCC80000000000003FF55555555 55552BFD1AED6A9264E20BFFAAAAAAAAAAAACBCC80000000000003FFFFFFFFFFFFFFCB FD0A3D70A3D70A4BFFAAAAAAAAAAAACBCC80000000000004005555555555553BFCED09 7B425ED09BFFAAAAAAAAAAAACBCC8000000000000400AAAAAAAAAAAA8BFCBF86A314DB F87BFFAAAAAAAAAAAACBCC8000000000000400FFFFFFFFFFFFDBFC8BF258BF258C1BFF AAAAAAAAAAAACBCC80000000000004012AAAAAAAAAAA9BFC524C9C413B8B5BFFAAAAAA AAAAAACBCC80000000000004015555555555554BFC12956D9B1DF64BFFAAAAAAAAAAAA CBCC80000000000004017FFFFFFFFFFFFBFB999999999999DBFFAAAAAAAAAAAACBCC80 00000000000401AAAAAAAAAAAAABFB01E573AC901E7BFFAAAAAAAAAAAACBCC80000000 00000401D555555555555BF97839A5BC7DEA2BFFAAAAAAAAAAAACBCC80000000000004 0200000000000003F947AE147AE1488BFFAAAAAAAAAAAACBCC80000000000004021555 5555555553FB0E0857FCF746EBFFAAAAAAAAAAAACBCC80000000000004022AAAAAAAAA AAA3FBD6480F2B9D644BFFAAAAAAAAAAAACBCC80000000000004023FFFFFFFFFFFF3FC 5555555555553BFFAAAAAAAAAAAAC3FE555555555554FC024000000000000BFB59E26A F37C049BFFAAAAAAAAAAAAC3FE555555555554FC022AAAAAAAAAAABBFBE573AC901E57 0BFFAAAAAAAAAAAAC3FE555555555554FC021555555555556BFC327104EE2CC09BFFAA AAAAAAAAAAC3FE555555555554FC020000000000001BFC6C16C16C16C14BFFAAAAAAAA AAAAC3FE555555555554FC01D555555555557BFC9FAB0BC1CD2DCBFFAAAAAAAAAAAAC3 FE555555555554FC01AAAAAAAAAAAACBFCCD2DE3EF50060BFFAAAAAAAAAAAAC3FE5555 55555554FC018000000000001BFCF49F49F49F49EBFFAAAAAAAAAAAAC3FE5555555555 54FC015555555555556BFD0AFF9EE8DD7CCBFFAAAAAAAAAAAAC3FE555555555554FC01 2AAAAAAAAAAABBFD18A6DFC3518A7BFFAAAAAAAAAAAAC3FE555555555554FC01000000 0000000BFD23456789ABCDFBFFAAAAAAAAAAAAC3FE555555555554FC00AAAAAAAAAAAA BBFD2ADB363BEC475BFFAAAAAAAAAAAAC3FE555555555554FC005555555555556BFD2F 684BDA12F68BFFAAAAAAAAAAAAC3FE555555555554FC000000000000001BFD30ECA864 1FDB9BFFAAAAAAAAAAAAC3FE555555555554FBFF5555555555558BFD2F684BDA12F68B FFAAAAAAAAAAAAC3FE555555555554FBFE555555555555BBFD2ADB363BEC475BFFAAAA AAAAAAAAC3FE555555555554FBCC8000000000000BFD23456789ABCDFBFFAAAAAAAAAA AAC3FE555555555554F3FE555555555554FBFD18A6DFC3518A7BFFAAAAAAAAAAAAC3FE 555555555554F3FF5555555555552BFD0AFF9EE8DD7CCBFFAAAAAAAAAAAAC3FE555555 555554F3FFFFFFFFFFFFFFCBFCF49F49F49F49FBFFAAAAAAAAAAAAC3FE555555555554 F4005555555555553BFCCD2DE3EF50062BFFAAAAAAAAAAAAC3FE555555555554F400AA AAAAAAAAAA8BFC9FAB0BC1CD2E0BFFAAAAAAAAAAAAC3FE555555555554F400FFFFFFFF FFFFDBFC6C16C16C16C19BFFAAAAAAAAAAAAC3FE555555555554F4012AAAAAAAAAAA9B FC327104EE2CC0DBFFAAAAAAAAAAAAC3FE555555555554F4015555555555554BFBE573 AC901E577BFFAAAAAAAAAAAAC3FE555555555554F4017FFFFFFFFFFFFBFB59E26AF37C 04DBFFAAAAAAAAAAAAC3FE555555555554F401AAAAAAAAAAAAABFA845C8A0CE512EBFF AAAAAAAAAAAAC3FE555555555554F401D555555555555BF7E573AC901E588BFFAAAAAA AAAAAAC3FE555555555554F40200000000000003FA23456789ABCE4BFFAAAAAAAAAAAA C3FE555555555554F40215555555555553FB4DBF86A314DBEBFFAAAAAAAAAAAAC3FE55 5555555554F4022AAAAAAAAAAAA3FC0AFF9EE8DD7CABFFAAAAAAAAAAAAC3FE55555555 5554F4023FFFFFFFFFFFF3FC7530ECA8641FBBFFAAAAAAAAAAAAC3FF5555555555552C 024000000000000BFB07F6E5D4C3B29BFFAAAAAAAAAAAAC3FF5555555555552C022AAA AAAAAAAABBFB9388277166050BFFAAAAAAAAAAAAC3FF5555555555552C021555555555 556BFC097B425ED0979BFFAAAAAAAAAAAAC3FF5555555555552C020000000000001BFC 4320FEDCBA984BFFAAAAAAAAAAAAC3FF5555555555552C01D555555555557BFC76B549 327104CBFFAAAAAAAAAAAAC3FF5555555555552C01AAAAAAAAAAAACBFCA438215FF3DD 0BFFAAAAAAAAAAAAC3FF5555555555552C018000000000001BFCCBA987654320EBFFAA AAAAAAAAAAC3FF5555555555552C015555555555556BFCED097B425ED08BFFAAAAAAAA AAAAC3FF5555555555552C012AAAAAAAAAAABBFD042BFE7BA375FBFFAAAAAAAAAAAAC3 FF5555555555552C010000000000000BFD0ECA8641FDB97BFFAAAAAAAAAAAAC3FF5555 555555552C00AAAAAAAAAAAABBFD166054F43E32DBFFAAAAAAAAAAAAC3FF5555555555 552C005555555555556BFD1AED6A9264E20BFFAAAAAAAAAAAAC3FF5555555555552C00 0000000000001BFD1C71C71C71C71BFFAAAAAAAAAAAAC3FF5555555555552BFF555555 5555558BFD1AED6A9264E20BFFAAAAAAAAAAAAC3FF5555555555552BFE555555555555 BBFD166054F43E32DBFFAAAAAAAAAAAAC3FF5555555555552BCC8000000000000BFD0E CA8641FDB97BFFAAAAAAAAAAAAC3FF55555555555523FE555555555554FBFD042BFE7B A375FBFFAAAAAAAAAAAAC3FF55555555555523FF5555555555552BFCED097B425ED09B FFAAAAAAAAAAAAC3FF55555555555523FFFFFFFFFFFFFFCBFCCBA9876543210BFFAAAA AAAAAAAAC3FF55555555555524005555555555553BFCA438215FF3DD2BFFAAAAAAAAAA AAC3FF5555555555552400AAAAAAAAAAAA8BFC76B5493271050BFFAAAAAAAAAAAAC3FF 5555555555552400FFFFFFFFFFFFDBFC4320FEDCBA989BFFAAAAAAAAAAAAC3FF555555 55555524012AAAAAAAAAAA9BFC097B425ED097DBFFAAAAAAAAAAAAC3FF555555555555 24015555555555554BFB9388277166057BFFAAAAAAAAAAAAC3FF55555555555524017F FFFFFFFFFFFBFB07F6E5D4C3B2DBFFAAAAAAAAAAAAC3FF5555555555552401AAAAAAAA AAAAABF9C10AFF9EE8DDBBFFAAAAAAAAAAAAC3FF5555555555552401D5555555555553 F89CA252ADB363CBFFAAAAAAAAAAAAC3FF555555555555240200000000000003FAC71C 71C71C724BFFAAAAAAAAAAAAC3FF555555555555240215555555555553FB9FAB0BC1CD 2DEBFFAAAAAAAAAAAAC3FF55555555555524022AAAAAAAAAAAA3FC33F5617839A5ABFF AAAAAAAAAAAAC3FF55555555555524023FFFFFFFFFFFF3FC9E26AF37C048BBFFAAAAAA AAAAAAC3FFFFFFFFFFFFFFCC024000000000000BFA47AE147AE147ABFFAAAAAAAAAAAA C3FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFB2F684BDA12F64BFFAAAAAAAAAAAAC3FFFF FFFFFFFFFFCC021555555555556BFBAED6A9264E20ABFFAAAAAAAAAAAAC3FFFFFFFFFF FFFFCC020000000000001BFC1111111111110BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC 01D555555555557BFC44A55B66C77D8BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC01AAAA AAAAAAAACBFC722833944A55CBFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC018000000000 001BFC999999999999ABFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC015555555555556BFC BAF98D76B5492BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFCD6480F 2B9D647BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC010000000000000BFCEB851EB851EB 8BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFCFAB0BC1CD2DE4BFFAA AAAAAAAAAAC3FFFFFFFFFFFFFFCC005555555555556BFD01E573AC901E5BFFAAAAAAAA AAAAC3FFFFFFFFFFFFFFCC000000000000001BFD0369D0369D037BFFAAAAAAAAAAAAC3 FFFFFFFFFFFFFFCBFF5555555555558BFD01E573AC901E6BFFAAAAAAAAAAAAC3FFFFFF FFFFFFFFCBFE555555555555BBFCFAB0BC1CD2DE5BFFAAAAAAAAAAAAC3FFFFFFFFFFFF FFCBCC8000000000000BFCEB851EB851EB9BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FE 555555555554FBFCD6480F2B9D649BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FF555555 5555552BFCBAF98D76B5494BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFF CBFC999999999999BBFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC4005555555555553BFC72 2833944A55DBFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFC44A55B66 C77DBBFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFC1111111111114B FFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFBAED6A9264E20FBFFAAAA AAAAAAAAC3FFFFFFFFFFFFFFC4015555555555554BFB2F684BDA12F6DBFFAAAAAAAAAA AAC3FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFA47AE147AE1485BFFAAAAAAAAAAAAC3FF FFFFFFFFFFFFC401AAAAAAAAAAAAABF6845C8A0CE519ABFFAAAAAAAAAAAAC3FFFFFFFF FFFFFFC401D5555555555553FA2F684BDA12F63BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFF C40200000000000003FB47AE147AE147ABFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC40215 555555555553FC01E573AC901E4BFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC4022AAAAAAA AAAAA3FC66054F43E32CFBFFAAAAAAAAAAAAC3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3 FCD0369D0369D00BFFAAAAAAAAAAAAC4005555555555553C024000000000000BF86C16 C16C16C29BFFAAAAAAAAAAAAC4005555555555553C022AAAAAAAAAAABBFA722833944A 558BFFAAAAAAAAAAAAC4005555555555553C021555555555556BFB388277166054EBFF AAAAAAAAAAAAC4005555555555553C020000000000001BFBABCDF01234563BFFAAAAAA AAAAAAC4005555555555553C01D555555555557BFC097B425ED097ABFFAAAAAAAAAAAA C4005555555555553C01AAAAAAAAAAAACBFC36FE1A8C536FEBFFAAAAAAAAAAAAC40055 55555555553C018000000000001BFC5E6F8091A2B3CBFFAAAAAAAAAAAAC40055555555 55553C015555555555556BFC7FCF746EBE636BFFAAAAAAAAAAAAC4005555555555553C 012AAAAAAAAAAABBFC9B1DF623A67EBBFFAAAAAAAAAAAAC4005555555555553C010000 000000000BFCB05B05B05B05CBFFAAAAAAAAAAAAC4005555555555553C00AAAAAAAAAA AABBFCBF86A314DBF88BFFAAAAAAAAAAAAC4005555555555553C005555555555556BFC C8A0CE512956FBFFAAAAAAAAAAAAC4005555555555553C000000000000001BFCCBA987 6543211BFFAAAAAAAAAAAAC4005555555555553BFF5555555555558BFCC8A0CE512956 EBFFAAAAAAAAAAAAC4005555555555553BFE555555555555BBFCBF86A314DBF88BFFAA AAAAAAAAAAC4005555555555553BCC8000000000000BFCB05B05B05B05CBFFAAAAAAAA AAAAC40055555555555533FE555555555554FBFC9B1DF623A67ECBFFAAAAAAAAAAAAC4 0055555555555533FF5555555555552BFC7FCF746EBE637BFFAAAAAAAAAAAAC4005555 5555555533FFFFFFFFFFFFFFCBFC5E6F8091A2B3EBFFAAAAAAAAAAAAC4005555555555 5534005555555555553BFC36FE1A8C53700BFFAAAAAAAAAAAAC4005555555555553400 AAAAAAAAAAAA8BFC097B425ED097EBFFAAAAAAAAAAAAC4005555555555553400FFFFFF FFFFFFDBFBABCDF0123456DBFFAAAAAAAAAAAAC40055555555555534012AAAAAAAAAAA 9BFB3882771660555BFFAAAAAAAAAAAAC40055555555555534015555555555554BFA72 2833944A566BFFAAAAAAAAAAAAC40055555555555534017FFFFFFFFFFFFBF86C16C16C 16C44BFFAAAAAAAAAAAAC4005555555555553401AAAAAAAAAAAAA3F9A8C536FE1A8B9B FFAAAAAAAAAAAAC4005555555555553401D5555555555553FB0E0857FCF746CBFFAAAA AAAAAAAAC400555555555555340200000000000003FBBE02468ACF135BFFAAAAAAAAAA AAC400555555555555340215555555555553FC3D0F8CB487041BFFAAAAAAAAAAAAC400 55555555555534022AAAAAAAAAAAA3FCA12F684BDA12CBFFAAAAAAAAAAAAC400555555 55555534023FFFFFFFFFFFF3FD05B05B05B05AEBFFAAAAAAAAAAAAC400AAAAAAAAAAAA 8C0240000000000003F96C16C16C16C0CBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C022A AAAAAAAAAABBF8845C8A0CE511FBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C0215555555 55556BFA5FF3DD1BAF98BBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C020000000000001B FB23456789ABCDBBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C01D555555555557BFB8A6D FC3518A6CBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFBE573AC901E 574BFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C018000000000001BFC1A2B3C4D5E6F8BFF AAAAAAAAAAAAC400AAAAAAAAAAAA8C015555555555556BFC3B8B302A7A1F2BFFAAAAAA AAAAAAC400AAAAAAAAAAAA8C012AAAAAAAAAAABBFC56D9B1DF623A7BFFAAAAAAAAAAAA C400AAAAAAAAAAAA8C010000000000000BFC6C16C16C16C18BFFAAAAAAAAAAAAC400AA AAAAAAAAAA8C00AAAAAAAAAAAABBFC7B425ED097B44BFFAAAAAAAAAAAAC400AAAAAAAA AAAA8C005555555555556BFC845C8A0CE512BBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8C 000000000000001BFC87654320FEDCDBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8BFF5555 555555558BFC845C8A0CE512ABFFAAAAAAAAAAAAC400AAAAAAAAAAAA8BFE5555555555 55BBFC7B425ED097B44BFFAAAAAAAAAAAAC400AAAAAAAAAAAA8BCC8000000000000BFC 6C16C16C16C18BFFAAAAAAAAAAAAC400AAAAAAAAAAAA83FE555555555554FBFC56D9B1 DF623A8BFFAAAAAAAAAAAAC400AAAAAAAAAAAA83FF5555555555552BFC3B8B302A7A1F 3BFFAAAAAAAAAAAAC400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFC1A2B3C4D5E6FABFFAA AAAAAAAAAAC400AAAAAAAAAAAA84005555555555553BFBE573AC901E579BFFAAAAAAAA AAAAC400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFB8A6DFC3518A73BFFAAAAAAAAAAAAC4 00AAAAAAAAAAAA8400FFFFFFFFFFFFDBFB23456789ABCE5BFFAAAAAAAAAAAAC400AAAA AAAAAAAA84012AAAAAAAAAAA9BFA5FF3DD1BAF99ABFFAAAAAAAAAAAAC400AAAAAAAAAA AA84015555555555554BF8845C8A0CE5159BFFAAAAAAAAAAAAC400AAAAAAAAAAAA8401 7FFFFFFFFFFFF3F96C16C16C16BFEBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8401AAAAAA AAAAAAA3FAE573AC901E56CBFFAAAAAAAAAAAAC400AAAAAAAAAAAA8401D55555555555 53FB9690E0857FCF4BFFAAAAAAAAAAAAC400AAAAAAAAAAAA840200000000000003FC23 456789ABCDEBFFAAAAAAAAAAAAC400AAAAAAAAAAAA840215555555555553FC8153D0F8 CB485BFFAAAAAAAAAAAAC400AAAAAAAAAAAA84022AAAAAAAAAAAA3FCE573AC901E570B FFAAAAAAAAAAAAC400AAAAAAAAAAAA84023FFFFFFFFFFFF3FD27D27D27D27D0BFFAAAA AAAAAAAAC400FFFFFFFFFFFFDC0240000000000003FAEB851EB851EB6BFFAAAAAAAAAA AAC400FFFFFFFFFFFFDC022AAAAAAAAAAAB3F9A8C536FE1A8D0BFFAAAAAAAAAAAAC400 FFFFFFFFFFFFDC021555555555556BF753D0F8CB48718BFFAAAAAAAAAAAAC400FFFFFF FFFFFFDC020000000000001BFA111111111110ABFFAAAAAAAAAAAAC400FFFFFFFFFFFF DC01D555555555557BFADF623A67EAC2BBFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC01AA AAAAAAAAAACBFB4AB6CD8EFB11EBFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC0180000000 00001BFB999999999999ABFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC015555555555556B FBDC598153D0F8FBFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC012AAAAAAAAAAABBFC097B 425ED097CBFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC010000000000000BFC1EB851EB85 1EDBFFAAAAAAAAAAAAC400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFC2DE3EF5006119BFF AAAAAAAAAAAAC400FFFFFFFFFFFFDC005555555555556BFC36FE1A8C53700BFFAAAAAA AAAAAAC400FFFFFFFFFFFFDC000000000000001BFC3A06D3A06D3A2BFFAAAAAAAAAAAA C400FFFFFFFFFFFFDBFF5555555555558BFC36FE1A8C536FFBFFAAAAAAAAAAAAC400FF FFFFFFFFFFDBFE555555555555BBFC2DE3EF5006119BFFAAAAAAAAAAAAC400FFFFFFFF FFFFDBCC8000000000000BFC1EB851EB851EDBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD3 FE555555555554FBFC097B425ED097DBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD3FF5555 555555552BFBDC598153D0F91BFFAAAAAAAAAAAAC400FFFFFFFFFFFFD3FFFFFFFFFFFF FFCBFB999999999999EBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD4005555555555553BFB 4AB6CD8EFB122BFFAAAAAAAAAAAAC400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFADF623A 67EAC3BBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD400FFFFFFFFFFFFDBFA111111111111 EBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD4012AAAAAAAAAAA9BF753D0F8CB48774BFFAA AAAAAAAAAAC400FFFFFFFFFFFFD40155555555555543F9A8C536FE1A8ABBFFAAAAAAAA AAAAC400FFFFFFFFFFFFD4017FFFFFFFFFFFF3FAEB851EB851EACBFFAAAAAAAAAAAAC4 00FFFFFFFFFFFFD401AAAAAAAAAAAAA3FB8D76B5493270CBFFAAAAAAAAAAAAC400FFFF FFFFFFFFD401D5555555555553FC18A6DFC3518A5BFFAAAAAAAAAAAAC400FFFFFFFFFF FFD40200000000000003FC70A3D70A3D70ABFFAAAAAAAAAAAAC400FFFFFFFFFFFFD402 15555555555553FCCEB240795CEB0BFFAAAAAAAAAAAAC400FFFFFFFFFFFFD4022AAAAA AAAAAAA3FD19690E0857FCDBFFAAAAAAAAAAAAC400FFFFFFFFFFFFD4023FFFFFFFFFFF F3FD4E81B4E81B4E6BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C0240000000000003FBA2 B3C4D5E6F7BBFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C022AAAAAAAAAAAB3FB17228339 44A54BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C0215555555555563FA2F684BDA12F61B FFAAAAAAAAAAAAC4012AAAAAAAAAAA9C0200000000000013F823456789ABCD7BFFAAAA AAAAAAAAC4012AAAAAAAAAAA9C01D555555555557BF90AFF9EE8DD7D7BFFAAAAAAAAAA AAC4012AAAAAAAAAAA9C01AAAAAAAAAAAACBFA3B8B302A7A1FBBFFAAAAAAAAAAAAC401 2AAAAAAAAAAA9C018000000000001BFAD950C83FB72F3BFFAAAAAAAAAAAAC4012AAAAA AAAAAA9C015555555555556BFB2F684BDA12F6DBFFAAAAAAAAAAAAC4012AAAAAAAAAAA 9C012AAAAAAAAAAABBFB66054F43E32D7BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C0100 00000000000BFB907F6E5D4C3B8BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C00AAAAAAAA AAAABBFBAED6A9264E20FBFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C005555555555556B FBC10AFF9EE8DDDBFFAAAAAAAAAAAAC4012AAAAAAAAAAA9C000000000000001BFBC71C 71C71C723BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9BFF5555555555558BFBC10AFF9EE8 DDEBFFAAAAAAAAAAAAC4012AAAAAAAAAAA9BFE555555555555BBFBAED6A9264E211BFF AAAAAAAAAAAAC4012AAAAAAAAAAA9BCC8000000000000BFB907F6E5D4C3BABFFAAAAAA AAAAAAC4012AAAAAAAAAAA93FE555555555554FBFB66054F43E32DABFFAAAAAAAAAAAA C4012AAAAAAAAAAA93FF5555555555552BFB2F684BDA12F70BFFAAAAAAAAAAAAC4012A AAAAAAAAAA93FFFFFFFFFFFFFFCBFAD950C83FB72FABFFAAAAAAAAAAAAC4012AAAAAAA AAAA94005555555555553BFA3B8B302A7A203BFFAAAAAAAAAAAAC4012AAAAAAAAAAA94 00AAAAAAAAAAAA8BF90AFF9EE8DD7F0BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9400FFFF FFFFFFFFD3F823456789ABC90BFFAAAAAAAAAAAAC4012AAAAAAAAAAA94012AAAAAAAAA AA93FA2F684BDA12F54BFFAAAAAAAAAAAAC4012AAAAAAAAAAA940155555555555543FB 1722833944A4CBFFAAAAAAAAAAAAC4012AAAAAAAAAAA94017FFFFFFFFFFFF3FBA2B3C4 D5E6F77BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FC1D33F5617839 6BFFAAAAAAAAAAAAC4012AAAAAAAAAAA9401D5555555555553FC6F1F7A80308B6BFFAA AAAAAAAAAAC4012AAAAAAAAAAA940200000000000003FCC71C71C71C71ABFFAAAAAAAA AAAAC4012AAAAAAAAAAA940215555555555553FD12956D9B1DF60BFFAAAAAAAAAAAAC4 012AAAAAAAAAAA94022AAAAAAAAAAAA3FD44A55B66C77D6BFFAAAAAAAAAAAAC4012AAA AAAAAAAA94023FFFFFFFFFFFF3FD79BE02468ACEEBFFAAAAAAAAAAAAC4015555555555 554C0240000000000003FC30ECA8641FDB7BFFAAAAAAAAAAAAC4015555555555554C02 2AAAAAAAAAAAB3FBD6480F2B9D646BFFAAAAAAAAAAAAC4015555555555554C02155555 55555563FB56D9B1DF623A4BFFAAAAAAAAAAAAC4015555555555554C02000000000000 13FAC71C71C71C71EBFFAAAAAAAAAAAAC4015555555555554C01D5555555555573F9F1 9690E0857F9BFFAAAAAAAAAAAAC4015555555555554C01AAAAAAAAAAAAC3F80AFF9EE8 DD7B2BFFAAAAAAAAAAAAC4015555555555554C018000000000001BF86C16C16C16C2EB FFAAAAAAAAAAAAC4015555555555554C015555555555556BF9C10AFF9EE8DECBFFAAAA AAAAAAAAC4015555555555554C012AAAAAAAAAAABBFA4DBF86A314DCABFFAAAAAAAAAA AAC4015555555555554C010000000000000BFAA2B3C4D5E6F8DBFFAAAAAAAAAAAAC401 5555555555554C00AAAAAAAAAAAABBFADF623A67EAC3BBFFAAAAAAAAAAAAC401555555 5555554C005555555555556BFB01E573AC901EBBFFAAAAAAAAAAAAC401555555555555 4C000000000000001BFB07F6E5D4C3B30BFFAAAAAAAAAAAAC4015555555555554BFF55 55555555558BFB01E573AC901EBBFFAAAAAAAAAAAAC4015555555555554BFE55555555 5555BBFADF623A67EAC3BBFFAAAAAAAAAAAAC4015555555555554BCC8000000000000B FAA2B3C4D5E6F8DBFFAAAAAAAAAAAAC40155555555555543FE555555555554FBFA4DBF 86A314DCDBFFAAAAAAAAAAAAC40155555555555543FF5555555555552BF9C10AFF9EE8 DF3BFFAAAAAAAAAAAAC40155555555555543FFFFFFFFFFFFFFCBF86C16C16C16C50BFF AAAAAAAAAAAAC401555555555555440055555555555533F80AFF9EE8DD78EBFFAAAAAA AAAAAAC4015555555555554400AAAAAAAAAAAA83F9F19690E0857DCBFFAAAAAAAAAAAA C4015555555555554400FFFFFFFFFFFFD3FAC71C71C71C70ABFFAAAAAAAAAAAAC40155 555555555544012AAAAAAAAAAA93FB56D9B1DF6239DBFFAAAAAAAAAAAAC40155555555 5555440155555555555543FBD6480F2B9D63FBFFAAAAAAAAAAAAC40155555555555544 017FFFFFFFFFFFF3FC30ECA8641FDB5BFFAAAAAAAAAAAAC4015555555555554401AAAA AAAAAAAAA3FC7CC6BB5AA4990BFFAAAAAAAAAAAAC4015555555555554401D555555555 5553FCCEB240795CEAFBFFAAAAAAAAAAAAC401555555555555440200000000000003FD 13579BE02468ABFFAAAAAAAAAAAAC401555555555555440215555555555553FD425ED0 97B425DBFFAAAAAAAAAAAAC40155555555555544022AAAAAAAAAAAA3FD746EBE635DAD 2BFFAAAAAAAAAAAAC40155555555555544023FFFFFFFFFFFF3FDA987654320FEBBFFAA AAAAAAAAAAC4017FFFFFFFFFFFFC0240000000000003FC9999999999997BFFAAAAAAAA AAAAC4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FC53D0F8CB48704BFFAAAAAAAAAAAAC4 017FFFFFFFFFFFFC0215555555555563FC1419CA252ADB3BFFAAAAAAAAAAAAC4017FFF FFFFFFFFFC0200000000000013FBB4E81B4E81B50BFFAAAAAAAAAAAAC4017FFFFFFFFF FFFC01D5555555555573FB4DBF86A314DBFBFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC01 AAAAAAAAAAAAC3FAE573AC901E56FBFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC01800000 00000013FA47AE147AE1479BFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC01555555555555 63F9845C8A0CE511CBFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC012AAAAAAAAAAAB3F853 D0F8CB486E8BFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC010000000000000BC920000000 00000BFFAAAAAAAAAAAAC4017FFFFFFFFFFFFC00AAAAAAAAAAAABBF7E573AC901E5B6B FFAAAAAAAAAAAAC4017FFFFFFFFFFFFC005555555555556BF8845C8A0CE514EBFFAAAA AAAAAAAAC4017FFFFFFFFFFFFC000000000000001BF8B4E81B4E81B72BFFAAAAAAAAAA AAC4017FFFFFFFFFFFFBFF5555555555558BF8845C8A0CE514EBFFAAAAAAAAAAAAC401 7FFFFFFFFFFFFBFE555555555555BBF7E573AC901E5C0BFFAAAAAAAAAAAAC4017FFFFF FFFFFFFBCC8000000000000BC940A5C28F5C28FBFFAAAAAAAAAAAAC4017FFFFFFFFFFF F3FE555555555554F3F853D0F8CB486DABFFAAAAAAAAAAAAC4017FFFFFFFFFFFF3FF55 555555555523F9845C8A0CE5114BFFAAAAAAAAAAAAC4017FFFFFFFFFFFF3FFFFFFFFFF FFFFC3FA47AE147AE146FBFFAAAAAAAAAAAAC4017FFFFFFFFFFFF40055555555555533 FAE573AC901E567BFFAAAAAAAAAAAAC4017FFFFFFFFFFFF400AAAAAAAAAAAA83FB4DBF 86A314DB9BFFAAAAAAAAAAAAC4017FFFFFFFFFFFF400FFFFFFFFFFFFD3FBB4E81B4E81 B47BFFAAAAAAAAAAAAC4017FFFFFFFFFFFF4012AAAAAAAAAAA93FC1419CA252ADAFBFF AAAAAAAAAAAAC4017FFFFFFFFFFFF40155555555555543FC53D0F8CB48700BFFAAAAAA AAAAAAC4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FC9999999999996BFFAAAAAAAAAAAA C4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FCE573AC901E571BFFAAAAAAAAAAAAC4017F FFFFFFFFFFF401D5555555555553FD1BAF98D76B548BFFAAAAAAAAAAAAC4017FFFFFFF FFFFF40200000000000003FD47AE147AE147ABFFAAAAAAAAAAAAC4017FFFFFFFFFFFF4 0215555555555553FD76B549327104DBFFAAAAAAAAAAAAC4017FFFFFFFFFFFF4022AAA AAAAAAAAA3FDA8C536FE1A8C3BFFAAAAAAAAAAAAC4017FFFFFFFFFFFF4023FFFFFFFFF FFF3FDDDDDDDDDDDDDBBFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC0240000000000003FD 05B05B05B05B0BFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FCC59815 3D0F8CDBFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC0215555555555563FC85E0E696F1F7 BBFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC0200000000000013FC4C3B2A1907F70BFFAA AAAAAAAAAAC401AAAAAAAAAAAAAC01D5555555555573FC18A6DFC3518A8BFFAAAAAAAA AAAAC401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FBD6480F2B9D648BFFAAAAAAAAAAAAC4 01AAAAAAAAAAAAAC0180000000000013FB87654320FEDCCBFFAAAAAAAAAAAAC401AAAA AAAAAAAAAC0155555555555563FB44A55B66C77D7BFFAAAAAAAAAAAAC401AAAAAAAAAA AAAC012AAAAAAAAAAAB3FB0E0857FCF746DBFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC01 00000000000003FAC71C71C71C718BFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC00AAAAAA AAAAAAB3FA8A6DFC3518A6ABFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC00555555555555 63FA66054F43E32CEBFFAAAAAAAAAAAAC401AAAAAAAAAAAAAC0000000000000013FA59 E26AF37C044BFFAAAAAAAAAAAAC401AAAAAAAAAAAAABFF55555555555583FA66054F43 E32CDBFFAAAAAAAAAAAAC401AAAAAAAAAAAAABFE555555555555B3FA8A6DFC3518A69B FFAAAAAAAAAAAAC401AAAAAAAAAAAAABCC80000000000003FAC71C71C71C717BFFAAAA AAAAAAAAC401AAAAAAAAAAAAA3FE555555555554F3FB0E0857FCF746BBFFAAAAAAAAAA AAC401AAAAAAAAAAAAA3FF55555555555523FB44A55B66C77D5BFFAAAAAAAAAAAAC401 AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FB87654320FEDC8BFFAAAAAAAAAAAAC401AAAAAA AAAAAAA40055555555555533FBD6480F2B9D644BFFAAAAAAAAAAAAC401AAAAAAAAAAAA A400AAAAAAAAAAAA83FC18A6DFC3518A4BFFAAAAAAAAAAAAC401AAAAAAAAAAAAA400FF FFFFFFFFFFD3FC4C3B2A1907F6BBFFAAAAAAAAAAAAC401AAAAAAAAAAAAA4012AAAAAAA AAAA93FC85E0E696F1F77BFFAAAAAAAAAAAAC401AAAAAAAAAAAAA40155555555555543 FCC598153D0F8C8BFFAAAAAAAAAAAAC401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FD05B0 5B05B05AFBFFAAAAAAAAAAAAC401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FD2B9D6480F2 B9CBFFAAAAAAAAAAAAC401AAAAAAAAAAAAA401D5555555555553FD549327104EE2CBFF AAAAAAAAAAAAC401AAAAAAAAAAAAA40200000000000003FD8091A2B3C4D5EBFFAAAAAA AAAAAAC401AAAAAAAAAAAAA40215555555555553FDAF98D76B54931BFFAAAAAAAAAAAA C401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FDE1A8C536FE1A7BFFAAAAAAAAAAAAC401AA AAAAAAAAAAA4023FFFFFFFFFFFF3FE0B60B60B60B60BFFAAAAAAAAAAAAC401D5555555 55555C0240000000000003FD4320FEDCBA987BFFAAAAAAAAAAAAC401D555555555555C 022AAAAAAAAAAAB3FD203CAE759203DBFFAAAAAAAAAAAAC401D555555555555C021555 5555555563FD0061172283395BFFAAAAAAAAAAAAC401D555555555555C020000000000 0013FCC71C71C71C71FBFFAAAAAAAAAAAAC401D555555555555C01D5555555555573FC 9388277166056BFFAAAAAAAAAAAAC401D555555555555C01AAAAAAAAAAAAC3FC66054F 43E32D3BFFAAAAAAAAAAAAC401D555555555555C0180000000000013FC3E93E93E93E9 5BFFAAAAAAAAAAAAC401D555555555555C0155555555555563FC1D33F5617839ABFFAA AAAAAAAAAAC401D555555555555C012AAAAAAAAAAAB3FC01E573AC901E5BFFAAAAAAAA AAAAC401D555555555555C0100000000000003FBD950C83FB72E9BFFAAAAAAAAAAAAC4 01D555555555555C00AAAAAAAAAAAAB3FBBAF98D76B5492BFFAAAAAAAAAAAAC401D555 555555555C0055555555555563FBA8C536FE1A8C4BFFAAAAAAAAAAAAC401D555555555 555C0000000000000013FBA2B3C4D5E6F7FBFFAAAAAAAAAAAAC401D555555555555BFF 55555555555583FBA8C536FE1A8C4BFFAAAAAAAAAAAAC401D555555555555BFE555555 555555B3FBBAF98D76B5491BFFAAAAAAAAAAAAC401D555555555555BCC800000000000 03FBD950C83FB72E8BFFAAAAAAAAAAAAC401D5555555555553FE555555555554F3FC01 E573AC901E4BFFAAAAAAAAAAAAC401D5555555555553FF55555555555523FC1D33F561 78399BFFAAAAAAAAAAAAC401D5555555555553FFFFFFFFFFFFFFC3FC3E93E93E93E93B FFAAAAAAAAAAAAC401D55555555555540055555555555533FC66054F43E32D1BFFAAAA AAAAAAAAC401D555555555555400AAAAAAAAAAAA83FC9388277166053BFFAAAAAAAAAA AAC401D555555555555400FFFFFFFFFFFFD3FCC71C71C71C71ABFFAAAAAAAAAAAAC401 D5555555555554012AAAAAAAAAAA93FD0061172283393BFFAAAAAAAAAAAAC401D55555 555555540155555555555543FD203CAE759203CBFFAAAAAAAAAAAAC401D55555555555 54017FFFFFFFFFFFF3FD4320FEDCBA986BFFAAAAAAAAAAAAC401D555555555555401AA AAAAAAAAAAA3FD690E0857FCF74BFFAAAAAAAAAAAAC401D555555555555401D5555555 555553FD9203CAE759203BFFAAAAAAAAAAAAC401D55555555555540200000000000003 FDBE02468ACF136BFFAAAAAAAAAAAAC401D55555555555540215555555555553FDED09 7B425ED09BFFAAAAAAAAAAAAC401D5555555555554022AAAAAAAAAAAA3FE0F8CB48704 2BFBFFAAAAAAAAAAAAC401D5555555555554023FFFFFFFFFFFF3FE2A1907F6E5D4BBFF AAAAAAAAAAAAC4020000000000000C0240000000000003FD851EB851EB852BFFAAAAAA AAAAAAC4020000000000000C022AAAAAAAAAAAB3FD623A67EAC2F09BFFAAAAAAAAAAAA C4020000000000000C0215555555555563FD425ED097B4260BFFAAAAAAAAAAAAC40200 00000000000C0200000000000013FD258BF258BF25ABFFAAAAAAAAAAAAC40200000000 00000C01D5555555555573FD0BC1CD2DE3EF6BFFAAAAAAAAAAAAC4020000000000000C 01AAAAAAAAAAAAC3FCEA00C22E45069BFFAAAAAAAAAAAAC4020000000000000C018000 0000000013FCC28F5C28F5C2BBFFAAAAAAAAAAAAC4020000000000000C015555555555 5563FCA12F684BDA131BFFAAAAAAAAAAAAC4020000000000000C012AAAAAAAAAAAB3FC 85E0E696F1F7CBFFAAAAAAAAAAAAC4020000000000000C0100000000000003FC70A3D7 0A3D70BBFFAAAAAAAAAAAAC4020000000000000C00AAAAAAAAAAAAB3FC617839A5BC7D FBFFAAAAAAAAAAAAC4020000000000000C0055555555555563FC585E0E696F1F8BFFAA AAAAAAAAAAC4020000000000000C0000000000000013FC5555555555556BFFAAAAAAAA AAAAC4020000000000000BFF55555555555583FC585E0E696F1F9BFFAAAAAAAAAAAAC4 020000000000000BFE555555555555B3FC617839A5BC7DFBFFAAAAAAAAAAAAC4020000 000000000BCC80000000000003FC70A3D70A3D70BBFFAAAAAAAAAAAAC4020000000000 0003FE555555555554F3FC85E0E696F1F7BBFFAAAAAAAAAAAAC40200000000000003FF 55555555555523FCA12F684BDA130BFFAAAAAAAAAAAAC40200000000000003FFFFFFFF FFFFFFC3FCC28F5C28F5C29BFFAAAAAAAAAAAAC4020000000000000400555555555555 33FCEA00C22E45067BFFAAAAAAAAAAAAC4020000000000000400AAAAAAAAAAAA83FD0B C1CD2DE3EF5BFFAAAAAAAAAAAAC4020000000000000400FFFFFFFFFFFFD3FD258BF258 BF258BFFAAAAAAAAAAAAC40200000000000004012AAAAAAAAAAA93FD425ED097B425EB FFAAAAAAAAAAAAC402000000000000040155555555555543FD623A67EAC2F07BFFAAAA AAAAAAAAC40200000000000004017FFFFFFFFFFFF3FD851EB851EB851BFFAAAAAAAAAA AAC4020000000000000401AAAAAAAAAAAAA3FDAB0BC1CD2DE3FBFFAAAAAAAAAAAAC402 0000000000000401D5555555555553FDD401845C8A0CEBFFAAAAAAAAAAAAC402000000 000000040200000000000003FE0000000000000BFFAAAAAAAAAAAAC402000000000000 040215555555555553FE17839A5BC7DEABFFAAAAAAAAAAAAC40200000000000004022A AAAAAAAAAAA3FE308B91419CA25BFFAAAAAAAAAAAAC40200000000000004023FFFFFFF FFFFF3FE4B17E4B17E4B1BFFAAAAAAAAAAAAC4021555555555555C0240000000000003 FDCBA987654320FBFFAAAAAAAAAAAAC4021555555555555C022AAAAAAAAAAAB3FDA8C5 36FE1A8C5BFFAAAAAAAAAAAAC4021555555555555C0215555555555563FD88E99FAB0B C1DBFFAAAAAAAAAAAAC4021555555555555C0200000000000013FD6C16C16C16C17BFF AAAAAAAAAAAAC4021555555555555C01D5555555555573FD524C9C413B8B3BFFAAAAAA AAAAAAC4021555555555555C01AAAAAAAAAAAAC3FD3B8B302A7A1F1BFFAAAAAAAAAAAA C4021555555555555C0180000000000013FD27D27D27D27D2BFFAAAAAAAAAAAAC40215 55555555555C0155555555555563FD1722833944A55BFFAAAAAAAAAAAAC40215555555 55555C012AAAAAAAAAAAB3FD097B425ED097ABFFAAAAAAAAAAAAC4021555555555555C 0100000000000003FCFDB97530ECA84BFFAAAAAAAAAAAAC4021555555555555C00AAAA AAAAAAAAB3FCEE8DD7CC6BB58BFFAAAAAAAAAAAAC4021555555555555C005555555555 5563FCE573AC901E571BFFAAAAAAAAAAAAC4021555555555555C0000000000000013FC E26AF37C048CFBFFAAAAAAAAAAAAC4021555555555555BFF55555555555583FCE573AC 901E572BFFAAAAAAAAAAAAC4021555555555555BFE555555555555B3FCEE8DD7CC6BB5 8BFFAAAAAAAAAAAAC4021555555555555BCC80000000000003FCFDB97530ECA84BFFAA AAAAAAAAAAC40215555555555553FE555555555554F3FD097B425ED097ABFFAAAAAAAA AAAAC40215555555555553FF55555555555523FD1722833944A55BFFAAAAAAAAAAAAC4 0215555555555553FFFFFFFFFFFFFFC3FD27D27D27D27D1BFFAAAAAAAAAAAAC4021555 55555555540055555555555533FD3B8B302A7A1F0BFFAAAAAAAAAAAAC4021555555555 555400AAAAAAAAAAAA83FD524C9C413B8B2BFFAAAAAAAAAAAAC4021555555555555400 FFFFFFFFFFFFD3FD6C16C16C16C15BFFAAAAAAAAAAAAC40215555555555554012AAAAA AAAAAA93FD88E99FAB0BC1ABFFAAAAAAAAAAAAC4021555555555555401555555555555 43FDA8C536FE1A8C4BFFAAAAAAAAAAAAC40215555555555554017FFFFFFFFFFFF3FDCB A987654320EBFFAAAAAAAAAAAAC4021555555555555401AAAAAAAAAAAAA3FDF19690E0 857FCBFFAAAAAAAAAAAAC4021555555555555401D5555555555553FE0D4629B7F0D46B FFAAAAAAAAAAAAC402155555555555540200000000000003FE23456789ABCDFBFFAAAA AAAAAAAAC402155555555555540215555555555553FE3AC901E573AC8BFFAAAAAAAAAA AAC40215555555555554022AAAAAAAAAAAA3FE53D0F8CB48703BFFAAAAAAAAAAAAC402 15555555555554023FFFFFFFFFFFF3FE6E5D4C3B2A18FBFFAAAAAAAAAAAAC4022AAAAA AAAAAAAC0240000000000003FE0B60B60B60B60BFFAAAAAAAAAAAAC4022AAAAAAAAAAA AC022AAAAAAAAAAAB3FDF3DD1BAF98D75BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC0215 555555555563FDD401845C8A0CDBFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC0200000000 000013FDB72EA61D950C7BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC01D5555555555573 FD9D6480F2B9D63BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FD86A3 14DBF86A1BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC0180000000000013FD72EA61D950 C82BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAC0155555555555563FD623A67EAC2F05BFF AAAAAAAAAAAAC4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FD549327104EE2ABFFAAAAAA AAAAAAC4022AAAAAAAAAAAAC0100000000000003FD49F49F49F49F2BFFAAAAAAAAAAAA C4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FD425ED097B425CBFFAAAAAAAAAAAAC4022A AAAAAAAAAAAC0055555555555563FD3DD1BAF98D769BFFAAAAAAAAAAAAC4022AAAAAAA AAAAAC0000000000000013FD3C4D5E6F80918BFFAAAAAAAAAAAAC4022AAAAAAAAAAAAB FF55555555555583FD3DD1BAF98D769BFFAAAAAAAAAAAAC4022AAAAAAAAAAAABFE5555 55555555B3FD425ED097B425CBFFAAAAAAAAAAAAC4022AAAAAAAAAAAABCC8000000000 0003FD49F49F49F49F2BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA3FE555555555554F3FD 549327104EE2ABFFAAAAAAAAAAAAC4022AAAAAAAAAAAA3FF55555555555523FD623A67 EAC2F05BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD72EA61D950C8 1BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA40055555555555533FD86A314DBF86A0BFFAA AAAAAAAAAAC4022AAAAAAAAAAAA400AAAAAAAAAAAA83FD9D6480F2B9D62BFFAAAAAAAA AAAAC4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FDB72EA61D950C5BFFAAAAAAAAAAAAC4 022AAAAAAAAAAAA4012AAAAAAAAAAA93FDD401845C8A0CABFFAAAAAAAAAAAAC4022AAA AAAAAAAAA40155555555555543FDF3DD1BAF98D74BFFAAAAAAAAAAAAC4022AAAAAAAAA AAA4017FFFFFFFFFFFF3FE0B60B60B60B5FBFFAAAAAAAAAAAAC4022AAAAAAAAAAAA401 AAAAAAAAAAAAA3FE1E573AC901E56BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA401D55555 55555553FE32D21C10AFF9EBFFAAAAAAAAAAAAC4022AAAAAAAAAAAA402000000000000 03FE48D159E26AF37BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA40215555555555553FE60 54F43E32D20BFFAAAAAAAAAAAAC4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE795CEB24 0795BBFFAAAAAAAAAAAAC4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FE93E93E93E93E7B FFAAAAAAAAAAAAC4023FFFFFFFFFFFFC0240000000000003FE3333333333332BFFAAAA AAAAAAAAC4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE21C10AFF9EE8DBFFAAAAAAAAAA AAC4023FFFFFFFFFFFFC0215555555555563FE11D33F5617839BFFAAAAAAAAAAAAC402 3FFFFFFFFFFFFC0200000000000013FE0369D0369D036BFFAAAAAAAAAAAAC4023FFFFF FFFFFFFC01D5555555555573FDED097B425ED08BFFAAAAAAAAAAAAC4023FFFFFFFFFFF FC01AAAAAAAAAAAAC3FDD6480F2B9D646BFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC0180 000000000013FDC28F5C28F5C27BFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC0155555555 555563FDB1DF623A67EAABFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC012AAAAAAAAAAAB3 FDA438215FF3DCFBFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC0100000000000003FD9999 999999997BFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD9203CAE759 201BFFAAAAAAAAAAAAC4023FFFFFFFFFFFFC0055555555555563FD8D76B5493270EBFF AAAAAAAAAAAAC4023FFFFFFFFFFFFC0000000000000013FD8BF258BF258BDBFFAAAAAA AAAAAAC4023FFFFFFFFFFFFBFF55555555555583FD8D76B5493270EBFFAAAAAAAAAAAA C4023FFFFFFFFFFFFBFE555555555555B3FD9203CAE759201BFFAAAAAAAAAAAAC4023F FFFFFFFFFFFBCC80000000000003FD9999999999997BFFAAAAAAAAAAAAC4023FFFFFFF FFFFF3FE555555555554F3FDA438215FF3DCFBFFAAAAAAAAAAAAC4023FFFFFFFFFFFF3 FF55555555555523FDB1DF623A67EAABFFAAAAAAAAAAAAC4023FFFFFFFFFFFF3FFFFFF FFFFFFFFC3FDC28F5C28F5C26BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF4005555555555 5533FDD6480F2B9D645BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF400AAAAAAAAAAAA83FD ED097B425ED07BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FE0369D0 369D035BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF4012AAAAAAAAAAA93FE11D33F561783 8BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF40155555555555543FE21C10AFF9EE8CBFFAA AAAAAAAAAAC4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE3333333333332BFFAAAAAAAA AAAAC4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE4629B7F0D4628BFFAAAAAAAAAAAAC4 023FFFFFFFFFFFF401D5555555555553FE5AA4993882770BFFAAAAAAAAAAAAC4023FFF FFFFFFFFF40200000000000003FE70A3D70A3D709BFFAAAAAAAAAAAAC4023FFFFFFFFF FFF40215555555555553FE88277166054F3BFFAAAAAAAAAAAAC4023FFFFFFFFFFFF402 2AAAAAAAAAAAA3FEA12F684BDA12DBFFAAAAAAAAAAAAC4023FFFFFFFFFFFF4023FFFFF FFFFFFF3FEBBBBBBBBBBBBABFF8000000000001C024000000000000C02400000000000 03FC777777777777ABFF8000000000001C024000000000000C022AAAAAAAAAAAB3FC31 AED6A9264E7BFF8000000000001C024000000000000C0215555555555563FBE3EF5006 1172ABFF8000000000001C024000000000000C0200000000000013FB70A3D70A3D715B FF8000000000001C024000000000000C01D5555555555573FB097B425ED0984BFF8000 000000001C024000000000000C01AAAAAAAAAAAAC3FA5CEB240795CF9BFF8000000000 001C024000000000000C0180000000000013F97E4B17E4B1805BFF8000000000001C02 4000000000000C0155555555555563F7CD2DE3EF500C2BFF8000000000001C02400000 0000000C012AAAAAAAAAAABBF79CA252ADB35E0BFF8000000000001C02400000000000 0C010000000000000BF911111111110FEBFF8000000000001C024000000000000C00AA AAAAAAAAAABBF98A6DFC3518A59BFF8000000000001C024000000000000C0055555555 55556BF9D33F561783991BFF8000000000001C024000000000000C000000000000001B F9EB851EB851EA5BFF8000000000001C024000000000000BFF5555555555558BF9D33F 561783992BFF8000000000001C024000000000000BFE555555555555BBF98A6DFC3518 A5CBFF8000000000001C024000000000000BCC8000000000000BF91111111111100BFF 8000000000001C0240000000000003FE555555555554FBF79CA252ADB35F9BFF800000 0000001C0240000000000003FF55555555555523F7CD2DE3EF500A1BFF800000000000 1C0240000000000003FFFFFFFFFFFFFFC3F97E4B17E4B17F3BFF8000000000001C0240 0000000000040055555555555533FA5CEB240795CF1BFF8000000000001C0240000000 00000400AAAAAAAAAAAA83FB097B425ED097EBFF8000000000001C0240000000000004 00FFFFFFFFFFFFD3FB70A3D70A3D70CBFF8000000000001C0240000000000004012AAA AAAAAAAA93FBE3EF500611723BFF8000000000001C0240000000000004015555555555 5543FC31AED6A9264E3BFF8000000000001C0240000000000004017FFFFFFFFFFFF3FC 7777777777778BFF8000000000001C024000000000000401AAAAAAAAAAAAA3FCC3518A 6DFC353BFF8000000000001C024000000000000401D5555555555553FD0A9E87C65A43 9BFF8000000000001C02400000000000040200000000000003FD369D0369D036CBFF80 00000000001C02400000000000040215555555555553FD65A438215FF3FBFF80000000 00001C0240000000000004022AAAAAAAAAAAA3FD97B425ED097B4BFF8000000000001C 0240000000000004023FFFFFFFFFFFF3FDCCCCCCCCCCCCDBFF8000000000001C022AAA AAAAAAAABC0240000000000003FC0ECA8641FDB9CBFF8000000000001C022AAAAAAAAA AABC022AAAAAAAAAAAB3FB9203CAE759212BFF8000000000001C022AAAAAAAAAAABC02 15555555555563FB12956D9B1DF6EBFF8000000000001C022AAAAAAAAAAABC02000000 00000013FA3E93E93E93EB2BFF8000000000001C022AAAAAAAAAAABC01D55555555555 73F8C10AFF9EE8E42BFF8000000000001C022AAAAAAAAAAABC01AAAAAAAAAAAACBF817 228339449FEBFF8000000000001C022AAAAAAAAAAABC018000000000001BF9C71C71C7 1C6EFBFF8000000000001C022AAAAAAAAAAABC015555555555556BFA690E0857FCF5EB FF8000000000001C022AAAAAAAAAAABC012AAAAAAAAAAABBFAD6480F2B9D632BFF8000 000000001C022AAAAAAAAAAABC010000000000000BFB159E26AF37BFABFF8000000000 001C022AAAAAAAAAAABC00AAAAAAAAAAAABBFB33F5617839A52BFF8000000000001C02 2AAAAAAAAAAABC005555555555556BFB4629B7F0D4620BFF8000000000001C022AAAAA AAAAAABC000000000000001BFB4C3B2A1907F65BFF8000000000001C022AAAAAAAAAAA BBFF5555555555558BFB4629B7F0D4620BFF8000000000001C022AAAAAAAAAAABBFE55 5555555555BBFB33F5617839A53BFF8000000000001C022AAAAAAAAAAABBCC80000000 00000BFB159E26AF37BFCBFF8000000000001C022AAAAAAAAAAAB3FE555555555554FB FAD6480F2B9D637BFF8000000000001C022AAAAAAAAAAAB3FF5555555555552BFA690E 0857FCF64BFF8000000000001C022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBF9C71C71C71C 6FCBFF8000000000001C022AAAAAAAAAAAB4005555555555553BF81722833944A1BBFF 8000000000001C022AAAAAAAAAAAB400AAAAAAAAAAAA83F8C10AFF9EE8E10BFF800000 0000001C022AAAAAAAAAAAB400FFFFFFFFFFFFD3FA3E93E93E93EA0BFF800000000000 1C022AAAAAAAAAAAB4012AAAAAAAAAAA93FB12956D9B1DF68BFF8000000000001C022A AAAAAAAAAAB40155555555555543FB9203CAE75920ABFF8000000000001C022AAAAAAA AAAAB4017FFFFFFFFFFFF3FC0ECA8641FDB9ABFF8000000000001C022AAAAAAAAAAAB4 01AAAAAAAAAAAAA3FC5AA4993882775BFF8000000000001C022AAAAAAAAAAAB401D555 5555555553FCAC901E573AC95BFF8000000000001C022AAAAAAAAAAAB4020000000000 0003FD02468ACF1357CBFF8000000000001C022AAAAAAAAAAAB40215555555555553FD 314DBF86A3150BFF8000000000001C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FD635DAD 524C9C5BFF8000000000001C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FD987654320FED EBFF8000000000001C021555555555556C0240000000000003FB5E6F8091A2B45BFF80 00000000001C021555555555556C022AAAAAAAAAAAB3FAA5BC7DEA00C3CBFF80000000 00001C021555555555556C0215555555555563F94DBF86A314DEABFF8000000000001C 021555555555556C020000000000001BF7FDB97530EC9B3BFF8000000000001C021555 555555556C01D555555555557BFA0E0857FCF7457BFF8000000000001C021555555555 556C01AAAAAAAAAAAACBFAC413B8B302A67BFF8000000000001C021555555555556C01 8000000000001BFB30ECA8641FDB0BFF8000000000001C021555555555556C01555555 5555556BFB73AC901E573A3BFF8000000000001C021555555555556C012AAAAAAAAAAA BBFBAA4993882770DBFF8000000000001C021555555555556C010000000000000BFBD4 C3B2A1907EEBFF8000000000001C021555555555556C00AAAAAAAAAAAABBFBF31AED6A 92645BFF8000000000001C021555555555556C005555555555556BFC02A7A1F19690AB FF8000000000001C021555555555556C000000000000001BFC05B05B05B05ADBFF8000 000000001C021555555555556BFF5555555555558BFC02A7A1F19690ABFF8000000000 001C021555555555556BFE555555555555BBFBF31AED6A92647BFF8000000000001C02 1555555555556BCC8000000000000BFBD4C3B2A1907F0BFF8000000000001C02155555 55555563FE555555555554FBFBAA49938827710BFF8000000000001C02155555555555 63FF5555555555552BFB73AC901E573A6BFF8000000000001C0215555555555563FFFF FFFFFFFFFFCBFB30ECA8641FDB3BFF8000000000001C02155555555555640055555555 55553BFAC413B8B302A6EBFF8000000000001C021555555555556400AAAAAAAAAAAA8B FA0E0857FCF7465BFF8000000000001C021555555555556400FFFFFFFFFFFFDBF7FDB9 7530ECA41BFF8000000000001C0215555555555564012AAAAAAAAAAA93F94DBF86A314 DCFBFF8000000000001C02155555555555640155555555555543FAA5BC7DEA00C2CBFF 8000000000001C0215555555555564017FFFFFFFFFFFF3FB5E6F8091A2B41BFF800000 0000001C021555555555556401AAAAAAAAAAAAA3FBF623A67EAC2F7BFF800000000000 1C021555555555556401D5555555555553FC4CFD585E0E69BBFF8000000000001C0215 5555555555640200000000000003FCA4FA4FA4FA4FFBFF8000000000001C0215555555 5555640215555555555553FD01845C8A0CE53BFF8000000000001C0215555555555564 022AAAAAAAAAAAA3FD33944A55B66C8BFF8000000000001C0215555555555564023FFF FFFFFFFFF3FD68ACF13579BE1BFF8000000000001C020000000000001C024000000000 0003FA62FC962FC9646BFF8000000000001C020000000000001C022AAAAAAAAAAAB3F8 2F684BDA12FE1BFF8000000000001C020000000000001C021555555555556BF966054F 43E32A6BFF8000000000001C020000000000001C020000000000001BFA999999999997 EBFF8000000000001C020000000000001C01D555555555557BFB33F5617839A50BFF80 00000000001C020000000000001C01AAAAAAAAAAAACBFB8EFB11D33F556BFF80000000 00001C020000000000001C018000000000001BFBDDDDDDDDDDDD2BFF8000000000001C 020000000000001C015555555555556BFC104EE2CC0A9E3BFF8000000000001C020000 000000001C012AAAAAAAAAAABBFC2B9D6480F2B98BFF8000000000001C020000000000 001C010000000000000BFC40DA740DA7409BFF8000000000001C020000000000001C00 AAAAAAAAAAAABBFC5006117228335BFF8000000000001C020000000000001C00555555 5555556BFC59203CAE7591CBFF8000000000001C020000000000001C00000000000000 1BFC5C28F5C28F5BEBFF8000000000001C020000000000001BFF5555555555558BFC59 203CAE7591BBFF8000000000001C020000000000001BFE555555555555BBFC50061172 28335BFF8000000000001C020000000000001BCC8000000000000BFC40DA740DA7409B FF8000000000001C0200000000000013FE555555555554FBFC2B9D6480F2B99BFF8000 000000001C0200000000000013FF5555555555552BFC104EE2CC0A9E4BFF8000000000 001C0200000000000013FFFFFFFFFFFFFFCBFBDDDDDDDDDDDD7BFF8000000000001C02 00000000000014005555555555553BFB8EFB11D33F55ABFF8000000000001C02000000 0000001400AAAAAAAAAAAA8BFB33F5617839A55BFF8000000000001C02000000000000 1400FFFFFFFFFFFFDBFA999999999998EBFF8000000000001C0200000000000014012A AAAAAAAAAA9BF966054F43E32BDBFF8000000000001C02000000000000140155555555 555543F82F684BDA12F97BFF8000000000001C0200000000000014017FFFFFFFFFFFF3 FA62FC962FC963BBFF8000000000001C020000000000001401AAAAAAAAAAAAA3FB4932 7104EE2D4BFF8000000000001C020000000000001401D5555555555553FBED097B425E D12BFF8000000000001C02000000000000140200000000000003FC4E81B4E81B4EEBFF 8000000000001C02000000000000140215555555555553FCAC901E573AC94BFF800000 0000001C0200000000000014022AAAAAAAAAAAA3FD0857FCF746EBFBFF800000000000 1C0200000000000014023FFFFFFFFFFFF3FD3D70A3D70A3D8BFF8000000000001C01D5 55555555557C0240000000000003F76C16C16C16C6EBFF8000000000001C01D5555555 55557C022AAAAAAAAAAABBF9D33F561783980BFF8000000000001C01D555555555557C 021555555555556BFAE87C65A438203BFF8000000000001C01D555555555557C020000 000000001BFB6789ABCDF0117BFF8000000000001C01D555555555557C01D555555555 557BFBCEB240795CEA8BFF8000000000001C01D555555555557C01AAAAAAAAAAAACBFC 14DBF86A314D8BFF8000000000001C01D555555555557C018000000000001BFC3C4D5E 6F80916BFF8000000000001C01D555555555557C015555555555556BFC5DAD524C9C41 0BFF8000000000001C01D555555555557C012AAAAAAAAAAABBFC78FBD401845C5BFF80 00000000001C01D555555555557C010000000000000BFC8E38E38E38E36BFF80000000 00001C01D555555555557C00AAAAAAAAAAAABBFC9D6480F2B9D62BFF8000000000001C 01D555555555557C005555555555556BFCA67EAC2F07349BFF8000000000001C01D555 555555557C000000000000001BFCA987654320FEBBFF8000000000001C01D555555555 557BFF5555555555558BFCA67EAC2F07348BFF8000000000001C01D555555555557BFE 555555555555BBFC9D6480F2B9D62BFF8000000000001C01D555555555557BCC800000 0000000BFC8E38E38E38E36BFF8000000000001C01D5555555555573FE555555555554 FBFC78FBD401845C6BFF8000000000001C01D5555555555573FF5555555555552BFC5D AD524C9C411BFF8000000000001C01D5555555555573FFFFFFFFFFFFFFCBFC3C4D5E6F 80918BFF8000000000001C01D5555555555574005555555555553BFC14DBF86A314DAB FF8000000000001C01D555555555557400AAAAAAAAAAAA8BFBCEB240795CEAFBFF8000 000000001C01D555555555557400FFFFFFFFFFFFDBFB6789ABCDF0121BFF8000000000 001C01D5555555555574012AAAAAAAAAAA9BFAE87C65A438212BFF8000000000001C01 D5555555555574015555555555554BF9D33F56178399DBFF8000000000001C01D55555 55555574017FFFFFFFFFFFF3F76C16C16C16C37BFF8000000000001C01D55555555555 7401AAAAAAAAAAAAA3FA5CEB240795CF4BFF8000000000001C01D555555555557401D5 555555555553FB524C9C413B8B8BFF8000000000001C01D55555555555740200000000 000003FC0123456789AC0BFF8000000000001C01D55555555555740215555555555553 FC5F31AED6A9267BFF8000000000001C01D5555555555574022AAAAAAAAAAAA3FCC351 8A6DFC352BFF8000000000001C01D5555555555574023FFFFFFFFFFFF3FD16C16C16C1 6C1BFF8000000000001C01AAAAAAAAAAAACC024000000000000BF9C71C71C71C704BFF 8000000000001C01AAAAAAAAAAAACC022AAAAAAAAAAABBFAFAB0BC1CD2DD0BFF800000 0000001C01AAAAAAAAAAAACC021555555555556BFB7CC6BB5AA498EBFF800000000000 1C01AAAAAAAAAAAACC020000000000001BFBF0123456789A3BFF8000000000001C01AA AAAAAAAAAACC01D555555555557BFC2B9D6480F2B9ABFF8000000000001C01AAAAAAAA AAAACC01AAAAAAAAAAAACBFC59203CAE7591EBFF8000000000001C01AAAAAAAAAAAACC 018000000000001BFC8091A2B3C4D5CBFF8000000000001C01AAAAAAAAAAAACC015555 555555556BFCA1F19690E0854BFF8000000000001C01AAAAAAAAAAAACC012AAAAAAAAA AABBFCBD401845C8A09BFF8000000000001C01AAAAAAAAAAAACC010000000000000BFC D27D27D27D27ABFF8000000000001C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFCE1A8C5 36FE1A6BFF8000000000001C01AAAAAAAAAAAACC005555555555556BFCEAC2F0734B78 DBFF8000000000001C01AAAAAAAAAAAACC000000000000001BFCEDCBA98765431BFF80 00000000001C01AAAAAAAAAAAACBFF5555555555558BFCEAC2F0734B78DBFF80000000 00001C01AAAAAAAAAAAACBFE555555555555BBFCE1A8C536FE1A7BFF8000000000001C 01AAAAAAAAAAAACBCC8000000000000BFCD27D27D27D27BBFF8000000000001C01AAAA AAAAAAAAC3FE555555555554FBFCBD401845C8A0BBFF8000000000001C01AAAAAAAAAA AAC3FF5555555555552BFCA1F19690E0856BFF8000000000001C01AAAAAAAAAAAAC3FF FFFFFFFFFFFFCBFC8091A2B3C4D5DBFF8000000000001C01AAAAAAAAAAAAC400555555 5555553BFC59203CAE7591FBFF8000000000001C01AAAAAAAAAAAAC400AAAAAAAAAAAA 8BFC2B9D6480F2B9DBFF8000000000001C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFBF0 123456789ABBFF8000000000001C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFB7CC6BB5A A4993BFF8000000000001C01AAAAAAAAAAAAC4015555555555554BFAFAB0BC1CD2DE2B FF8000000000001C01AAAAAAAAAAAAC4017FFFFFFFFFFFFBF9C71C71C71C71ABFF8000 000000001C01AAAAAAAAAAAAC401AAAAAAAAAAAAA3F82F684BDA12F7ABFF8000000000 001C01AAAAAAAAAAAAC401D5555555555553FA938827716605BBFF8000000000001C01 AAAAAAAAAAAAC40200000000000003FB79BE02468ACF7BFF8000000000001C01AAAAAA AAAAAAC40215555555555553FC1AED6A9264E22BFF8000000000001C01AAAAAAAAAAAA C4022AAAAAAAAAAAA3FC7F0D4629B7F0DBFF8000000000001C01AAAAAAAAAAAAC4023F FFFFFFFFFFF3FCE93E93E93E93EBFF8000000000001C018000000000001C0240000000 00000BFAD0369D0369CFABFF8000000000001C018000000000001C022AAAAAAAAAAABB FB73AC901E573A4BFF8000000000001C018000000000001C021555555555556BFBF31A ED6A92646BFF8000000000001C018000000000001C020000000000001BFC3333333333 32EBFF8000000000001C018000000000001C01D555555555557BFC66C77D88E99F6BFF 8000000000001C018000000000001C01AAAAAAAAAAAACBFC944A55B66C77ABFF800000 0000001C018000000000001C018000000000001BFCBBBBBBBBBBBB8BFF800000000000 1C018000000000001C015555555555556BFCDD1BAF98D76B2BFF8000000000001C0180 00000000001C012AAAAAAAAAAABBFCF86A314DBF867BFF8000000000001C0180000000 00001C010000000000000BFD06D3A06D3A06CBFF8000000000001C018000000000001C 00AAAAAAAAAAAABBFD0E696F1F7A802BFF8000000000001C018000000000001C005555 555555556BFD12F684BDA12F5BFF8000000000001C018000000000001C000000000000 001BFD147AE147AE146BFF8000000000001C018000000000001BFF5555555555558BFD 12F684BDA12F5BFF8000000000001C018000000000001BFE555555555555BBFD0E696F 1F7A802BFF8000000000001C018000000000001BCC8000000000000BFD06D3A06D3A06 CBFF8000000000001C0180000000000013FE555555555554FBFCF86A314DBF868BFF80 00000000001C0180000000000013FF5555555555552BFCDD1BAF98D76B3BFF80000000 00001C0180000000000013FFFFFFFFFFFFFFCBFCBBBBBBBBBBBBABFF8000000000001C 0180000000000014005555555555553BFC944A55B66C77CBFF8000000000001C018000 000000001400AAAAAAAAAAAA8BFC66C77D88E99FABFF8000000000001C018000000000 001400FFFFFFFFFFFFDBFC3333333333333BFF8000000000001C018000000000001401 2AAAAAAAAAAA9BFBF31AED6A9264DBFF8000000000001C018000000000001401555555 5555554BFB73AC901E573ABBFF8000000000001C0180000000000014017FFFFFFFFFFF FBFAD0369D0369D01BFF8000000000001C018000000000001401AAAAAAAAAAAAABF941 9CA252ADB2BBFF8000000000001C018000000000001401D5555555555553F94DBF86A3 14DCEBFF8000000000001C01800000000000140200000000000003FB0369D0369D03EB FF8000000000001C01800000000000140215555555555553FBBF86A314DBF8ABFF8000 000000001C0180000000000014022AAAAAAAAAAAA3FC43E32D21C10B0BFF8000000000 001C0180000000000014023FFFFFFFFFFFF3FCAE147AE147AE1BFF8000000000001C01 5555555555556C024000000000000BFB4C3B2A1907F6DBFF8000000000001C01555555 5555556C022AAAAAAAAAAABBFBD7CC6BB5AA494BFF8000000000001C01555555555555 6C021555555555556BFC2B9D6480F2B9BBFF8000000000001C015555555555556C0200 00000000001BFC654320FEDCBA6BFF8000000000001C015555555555556C01D5555555 55557BFC98D76B549326EBFF8000000000001C015555555555556C01AAAAAAAAAAAACB FCC65A438215FF2BFF8000000000001C015555555555556C018000000000001BFCEDCB A98765430BFF8000000000001C015555555555556C015555555555556BFD0795CEB240 795BFF8000000000001C015555555555556C012AAAAAAAAAAABBFD153D0F8CB4870BFF 8000000000001C015555555555556C010000000000000BFD1FDB97530ECA8BFF800000 0000001C015555555555556C00AAAAAAAAAAAABBFD277166054F43EBFF800000000000 1C015555555555556C005555555555556BFD2BFE7BA375F31BFF8000000000001C0155 55555555556C000000000000001BFD2D82D82D82D82BFF8000000000001C0155555555 55556BFF5555555555558BFD2BFE7BA375F31BFF8000000000001C015555555555556B FE555555555555BBFD277166054F43EBFF8000000000001C015555555555556BCC8000 000000000BFD1FDB97530ECA8BFF8000000000001C0155555555555563FE5555555555 54FBFD153D0F8CB4870BFF8000000000001C0155555555555563FF5555555555552BFD 0795CEB240795BFF8000000000001C0155555555555563FFFFFFFFFFFFFFCBFCEDCBA9 8765431BFF8000000000001C0155555555555564005555555555553BFCC65A438215FF 4BFF8000000000001C015555555555556400AAAAAAAAAAAA8BFC98D76B5493272BFF80 00000000001C015555555555556400FFFFFFFFFFFFDBFC654320FEDCBABBFF80000000 00001C0155555555555564012AAAAAAAAAAA9BFC2B9D6480F2B9FBFF8000000000001C 0155555555555564015555555555554BFBD7CC6BB5AA49BBFF8000000000001C015555 5555555564017FFFFFFFFFFFFBFB4C3B2A1907F71BFF8000000000001C015555555555 556401AAAAAAAAAAAAABFA690E0857FCF76BFF8000000000001C015555555555556401 D555555555555BF70AFF9EE8DD7C8BFF8000000000001C015555555555556402000000 00000003FA3E93E93E93E9CBFF8000000000001C015555555555556402155555555555 53FB5B66C77D88E9ABFF8000000000001C0155555555555564022AAAAAAAAAAAA3FC11 D33F5617838BFF8000000000001C0155555555555564023FFFFFFFFFFFF3FC7C048D15 9E269BFF8000000000001C012AAAAAAAAAAABC024000000000000BFB9E26AF37C0489B FF8000000000001C012AAAAAAAAAAABC022AAAAAAAAAAABBFC14DBF86A314D8BFF8000 000000001C012AAAAAAAAAAABC021555555555556BFC549327104EE29BFF8000000000 001C012AAAAAAAAAAABC020000000000001BFC8E38E38E38E34BFF8000000000001C01 2AAAAAAAAAAABC01D555555555557BFCC1CD2DE3EF4FCBFF8000000000001C012AAAAA AAAAAABC01AAAAAAAAAAAACBFCEF50061172280BFF8000000000001C012AAAAAAAAAAA BC018000000000001BFD0B60B60B60B5FBFF8000000000001C012AAAAAAAAAAABC0155 55555555556BFD1C10AFF9EE8DCBFF8000000000001C012AAAAAAAAAAABC012AAAAAAA AAAABBFD29B7F0D4629B7BFF8000000000001C012AAAAAAAAAAABC010000000000000B FD3456789ABCDEFBFF8000000000001C012AAAAAAAAAAABC00AAAAAAAAAAAABBFD3BEC 474CFD585BFF8000000000001C012AAAAAAAAAAABC005555555555556BFD40795CEB24 078BFF8000000000001C012AAAAAAAAAAABC000000000000001BFD41FDB97530EC9BFF 8000000000001C012AAAAAAAAAAABBFF5555555555558BFD40795CEB24078BFF800000 0000001C012AAAAAAAAAAABBFE555555555555BBFD3BEC474CFD585BFF800000000000 1C012AAAAAAAAAAABBCC8000000000000BFD3456789ABCDEFBFF8000000000001C012A AAAAAAAAAAB3FE555555555554FBFD29B7F0D4629B7BFF8000000000001C012AAAAAAA AAAAB3FF5555555555552BFD1C10AFF9EE8DCBFF8000000000001C012AAAAAAAAAAAB3 FFFFFFFFFFFFFFCBFD0B60B60B60B60BFF8000000000001C012AAAAAAAAAAAB4005555 555555553BFCEF50061172281BFF8000000000001C012AAAAAAAAAAAB400AAAAAAAAAA AA8BFCC1CD2DE3EF4FFBFF8000000000001C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFC 8E38E38E38E39BFF8000000000001C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFC549327 104EE2DBFF8000000000001C012AAAAAAAAAAAB4015555555555554BFC14DBF86A314D CBFF8000000000001C012AAAAAAAAAAAB4017FFFFFFFFFFFFBFB9E26AF37C048DBFF80 00000000001C012AAAAAAAAAAAB401AAAAAAAAAAAAABFB0672894AB6CD7BFF80000000 00001C012AAAAAAAAAAAB401D555555555555BF98A6DFC3518A62BFF8000000000001C 012AAAAAAAAAAAB40200000000000003F93579BE02468C8BFF8000000000001C012AAA AAAAAAAAB40215555555555553FB097B425ED097EBFF8000000000001C012AAAAAAAAA AAB4022AAAAAAAAAAAA3FBD1BAF98D76B54BFF8000000000001C012AAAAAAAAAAAB402 3FFFFFFFFFFFF3FC530ECA8641FDBBFF8000000000001C010000000000000C02400000 0000000BFBDDDDDDDDDDDDDBFF8000000000001C010000000000000C022AAAAAAAAAAA BBFC34B78FBD40182BFF8000000000001C010000000000000C021555555555556BFC74 6EBE635DAD3BFF8000000000001C010000000000000C020000000000001BFCAE147AE1 47ADEBFF8000000000001C010000000000000C01D555555555557BFCE1A8C536FE1A6B FF8000000000001C010000000000000C01AAAAAAAAAAAACBFD0795CEB240795BFF8000 000000001C010000000000000C018000000000001BFD1B4E81B4E81B4BFF8000000000 001C010000000000000C015555555555556BFD2BFE7BA375F31BFF8000000000001C01 0000000000000C012AAAAAAAAAAABBFD39A5BC7DEA00CBFF8000000000001C01000000 0000000C010000000000000BFD4444444444444BFF8000000000001C01000000000000 0C00AAAAAAAAAAAABBFD4BDA12F684BDABFF8000000000001C010000000000000C0055 55555555556BFD50672894AB6CDBFF8000000000001C010000000000000C0000000000 00001BFD51EB851EB851EBFF8000000000001C010000000000000BFF5555555555558B FD50672894AB6CDBFF8000000000001C010000000000000BFE555555555555BBFD4BDA 12F684BDABFF8000000000001C010000000000000BCC8000000000000BFD4444444444 444BFF8000000000001C0100000000000003FE555555555554FBFD39A5BC7DEA00CBFF 8000000000001C0100000000000003FF5555555555552BFD2BFE7BA375F31BFF800000 0000001C0100000000000003FFFFFFFFFFFFFFCBFD1B4E81B4E81B5BFF800000000000 1C0100000000000004005555555555553BFD0795CEB240796BFF8000000000001C0100 00000000000400AAAAAAAAAAAA8BFCE1A8C536FE1A9BFF8000000000001C0100000000 00000400FFFFFFFFFFFFDBFCAE147AE147AE2BFF8000000000001C0100000000000004 012AAAAAAAAAAA9BFC746EBE635DAD8BFF8000000000001C0100000000000004015555 555555554BFC34B78FBD40186BFF8000000000001C0100000000000004017FFFFFFFFF FFFBFBDDDDDDDDDDDE1BFF8000000000001C010000000000000401AAAAAAAAAAAAABFB 4629B7F0D462BBFF8000000000001C010000000000000401D555555555555BFA44A55B 66C77D9BFF8000000000001C01000000000000040200000000000003F6B4E81B4E81BC 0BFF8000000000001C01000000000000040215555555555553FA9388277166053BFF80 00000000001C0100000000000004022AAAAAAAAAAAA3FB9203CAE759200BFF80000000 00001C0100000000000004023FFFFFFFFFFFF3FC3333333333331BFF8000000000001C 00AAAAAAAAAAAABC024000000000000BFC05B05B05B05AFBFF8000000000001C00AAAA AAAAAAAABC022AAAAAAAAAAABBFC4B78FBD401842BFF8000000000001C00AAAAAAAAAA AABC021555555555556BFC8B302A7A1F193BFF8000000000001C00AAAAAAAAAAAABC02 0000000000001BFCC4D5E6F80919EBFF8000000000001C00AAAAAAAAAAAABC01D55555 5555557BFCF86A314DBF866BFF8000000000001C00AAAAAAAAAAAABC01AAAAAAAAAAAA CBFD12F684BDA12F5BFF8000000000001C00AAAAAAAAAAAABC018000000000001BFD26 AF37C048D14BFF8000000000001C00AAAAAAAAAAAABC015555555555556BFD375F31AE D6A91BFF8000000000001C00AAAAAAAAAAAABC012AAAAAAAAAAABBFD450672894AB6CB FF8000000000001C00AAAAAAAAAAAABC010000000000000BFD4FA4FA4FA4FA4BFF8000 000000001C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD573AC901E573ABFF8000000000 001C00AAAAAAAAAAAABC005555555555556BFD5BC7DEA00C22DBFF8000000000001C00 AAAAAAAAAAAABC000000000000001BFD5D4C3B2A1907EBFF8000000000001C00AAAAAA AAAAAABBFF5555555555558BFD5BC7DEA00C22DBFF8000000000001C00AAAAAAAAAAAA BBFE555555555555BBFD573AC901E573ABFF8000000000001C00AAAAAAAAAAAABBCC80 00000000000BFD4FA4FA4FA4FA4BFF8000000000001C00AAAAAAAAAAAAB3FE55555555 5554FBFD450672894AB6CBFF8000000000001C00AAAAAAAAAAAAB3FF5555555555552B FD375F31AED6A91BFF8000000000001C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD26AF 37C048D15BFF8000000000001C00AAAAAAAAAAAAB4005555555555553BFD12F684BDA1 2F6BFF8000000000001C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFCF86A314DBF869BFF 8000000000001C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFCC4D5E6F8091A2BFF800000 0000001C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFC8B302A7A1F198BFF800000000000 1C00AAAAAAAAAAAAB4015555555555554BFC4B78FBD401845BFF8000000000001C00AA AAAAAAAAAAB4017FFFFFFFFFFFFBFC05B05B05B05B0BFF8000000000001C00AAAAAAAA AAAAB401AAAAAAAAAAAAABFB73AC901E573ABBFF8000000000001C00AAAAAAAAAAAAB4 01D555555555555BFA9FAB0BC1CD2D9BFF8000000000001C00AAAAAAAAAAAAB4020000 000000000BF7FDB97530ECA20BFF8000000000001C00AAAAAAAAAAAAB4021555555555 5553FA3882771660553BFF8000000000001C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FB 6480F2B9D6480BFF8000000000001C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FC1C71C7 1C71C71BFF8000000000001C005555555555556C024000000000000BFC13579BE02468 BBFF8000000000001C005555555555556C022AAAAAAAAAAABBFC59203CAE7591EBFF80 00000000001C005555555555556C021555555555556BFC98D76B549326FBFF80000000 00001C005555555555556C020000000000001BFCD27D27D27D27ABFF8000000000001C 005555555555556C01D555555555557BFD0308B91419CA1BFF8000000000001C005555 555555556C01AAAAAAAAAAAACBFD19CA252ADB363BFF8000000000001C005555555555 556C018000000000001BFD2D82D82D82D82BFF8000000000001C005555555555556C01 5555555555556BFD3E32D21C10AFFBFF8000000000001C005555555555556C012AAAAA AAAAAABBFD4BDA12F684BDABFF8000000000001C005555555555556C01000000000000 0BFD56789ABCDF012BFF8000000000001C005555555555556C00AAAAAAAAAAAABBFD5E 0E696F1F7A8BFF8000000000001C005555555555556C005555555555556BFD629B7F0D 4629BBFF8000000000001C005555555555556C000000000000001BFD641FDB97530ECB FF8000000000001C005555555555556BFF5555555555558BFD629B7F0D4629BBFF8000 000000001C005555555555556BFE555555555555BBFD5E0E696F1F7A8BFF8000000000 001C005555555555556BCC8000000000000BFD56789ABCDF012BFF8000000000001C00 55555555555563FE555555555554FBFD4BDA12F684BDABFF8000000000001C00555555 55555563FF5555555555552BFD3E32D21C10AFFBFF8000000000001C00555555555555 63FFFFFFFFFFFFFFCBFD2D82D82D82D83BFF8000000000001C00555555555555640055 55555555553BFD19CA252ADB364BFF8000000000001C005555555555556400AAAAAAAA AAAA8BFD0308B91419CA2BFF8000000000001C005555555555556400FFFFFFFFFFFFDB FCD27D27D27D27EBFF8000000000001C0055555555555564012AAAAAAAAAAA9BFC98D7 6B5493274BFF8000000000001C0055555555555564015555555555554BFC59203CAE75 921BFF8000000000001C0055555555555564017FFFFFFFFFFFFBFC13579BE02468BBFF 8000000000001C005555555555556401AAAAAAAAAAAAABFB8EFB11D33F563BFF800000 0000001C005555555555556401D555555555555BFAD6480F2B9D649BFF800000000000 1C0055555555555564020000000000000BF8D950C83FB72D0BFF8000000000001C0055 5555555555640215555555555553FA01E573AC901E3BFF8000000000001C0055555555 555564022AAAAAAAAAAAA3FB49327104EE2C8BFF8000000000001C0055555555555564 023FFFFFFFFFFFF3FC0ECA8641FDB95BFF8000000000001C000000000000001C024000 000000000BFC17E4B17E4B17FBFF8000000000001C000000000000001C022AAAAAAAAA AABBFC5DAD524C9C412BFF8000000000001C000000000000001C021555555555556BFC 9D6480F2B9D63BFF8000000000001C000000000000001C020000000000001BFCD70A3D 70A3D6EBFF8000000000001C000000000000001C01D555555555557BFD054F43E32D21 BBFF8000000000001C000000000000001C01AAAAAAAAAAAACBFD1C10AFF9EE8DDBFF80 00000000001C000000000000001C018000000000001BFD2FC962FC962FCBFF80000000 00001C000000000000001C015555555555556BFD40795CEB24079BFF8000000000001C 000000000000001C012AAAAAAAAAAABBFD4E209DC598154BFF8000000000001C000000 000000001C010000000000000BFD58BF258BF258CBFF8000000000001C000000000000 001C00AAAAAAAAAAAABBFD6054F43E32D22BFF8000000000001C000000000000001C00 5555555555556BFD64E209DC59815BFF8000000000001C000000000000001C00000000 0000001BFD6666666666666BFF8000000000001C000000000000001BFF555555555555 8BFD64E209DC59815BFF8000000000001C000000000000001BFE555555555555BBFD60 54F43E32D22BFF8000000000001C000000000000001BCC8000000000000BFD58BF258B F258CBFF8000000000001C0000000000000013FE555555555554FBFD4E209DC598154B FF8000000000001C0000000000000013FF5555555555552BFD40795CEB24079BFF8000 000000001C0000000000000013FFFFFFFFFFFFFFCBFD2FC962FC962FDBFF8000000000 001C0000000000000014005555555555553BFD1C10AFF9EE8DEBFF8000000000001C00 0000000000001400AAAAAAAAAAAA8BFD054F43E32D21CBFF8000000000001C00000000 0000001400FFFFFFFFFFFFDBFCD70A3D70A3D72BFF8000000000001C00000000000000 14012AAAAAAAAAAA9BFC9D6480F2B9D68BFF8000000000001C00000000000000140155 55555555554BFC5DAD524C9C415BFF8000000000001C0000000000000014017FFFFFFF FFFFFBFC17E4B17E4B17FBFF8000000000001C000000000000001401AAAAAAAAAAAAAB FB98153D0F8CB4BBFF8000000000001C000000000000001401D555555555555BFAE87C 65A438219BFF8000000000001C0000000000000014020000000000000BF91111111111 108BFF8000000000001C00000000000000140215555555555553F9DF623A67EAC27BFF 8000000000001C0000000000000014022AAAAAAAAAAAA3FB401845C8A0CE0BFF800000 0000001C0000000000000014023FFFFFFFFFFFF3FC0A3D70A3D70A1BFF800000000000 1BFF5555555555558C024000000000000BFC13579BE02468BBFF8000000000001BFF55 55555555558C022AAAAAAAAAAABBFC59203CAE7591EBFF8000000000001BFF55555555 55558C021555555555556BFC98D76B549326FBFF8000000000001BFF5555555555558C 020000000000001BFCD27D27D27D27ABFF8000000000001BFF5555555555558C01D555 555555557BFD0308B91419CA1BFF8000000000001BFF5555555555558C01AAAAAAAAAA AACBFD19CA252ADB363BFF8000000000001BFF5555555555558C018000000000001BFD 2D82D82D82D82BFF8000000000001BFF5555555555558C015555555555556BFD3E32D2 1C10AFFBFF8000000000001BFF5555555555558C012AAAAAAAAAAABBFD4BDA12F684BD ABFF8000000000001BFF5555555555558C010000000000000BFD56789ABCDF012BFF80 00000000001BFF5555555555558C00AAAAAAAAAAAABBFD5E0E696F1F7A8BFF80000000 00001BFF5555555555558C005555555555556BFD629B7F0D4629BBFF8000000000001B FF5555555555558C000000000000001BFD641FDB97530ECBFF8000000000001BFF5555 555555558BFF5555555555558BFD629B7F0D4629BBFF8000000000001BFF5555555555 558BFE555555555555BBFD5E0E696F1F7A8BFF8000000000001BFF5555555555558BCC 8000000000000BFD56789ABCDF012BFF8000000000001BFF55555555555583FE555555 555554FBFD4BDA12F684BDABFF8000000000001BFF55555555555583FF555555555555 2BFD3E32D21C10AFFBFF8000000000001BFF55555555555583FFFFFFFFFFFFFFCBFD2D 82D82D82D83BFF8000000000001BFF55555555555584005555555555553BFD19CA252A DB364BFF8000000000001BFF5555555555558400AAAAAAAAAAAA8BFD0308B91419CA2B FF8000000000001BFF5555555555558400FFFFFFFFFFFFDBFCD27D27D27D27EBFF8000 000000001BFF55555555555584012AAAAAAAAAAA9BFC98D76B5493274BFF8000000000 001BFF55555555555584015555555555554BFC59203CAE75921BFF8000000000001BFF 55555555555584017FFFFFFFFFFFFBFC13579BE02468BBFF8000000000001BFF555555 5555558401AAAAAAAAAAAAABFB8EFB11D33F563BFF8000000000001BFF555555555555 8401D555555555555BFAD6480F2B9D649BFF8000000000001BFF555555555555840200 00000000000BF8D950C83FB72D0BFF8000000000001BFF555555555555840215555555 555553FA01E573AC901E3BFF8000000000001BFF55555555555584022AAAAAAAAAAAA3 FB49327104EE2C8BFF8000000000001BFF55555555555584023FFFFFFFFFFFF3FC0ECA 8641FDB95BFF8000000000001BFE555555555555BC024000000000000BFC05B05B05B0 5B1BFF8000000000001BFE555555555555BC022AAAAAAAAAAABBFC4B78FBD401844BFF 8000000000001BFE555555555555BC021555555555556BFC8B302A7A1F195BFF800000 0000001BFE555555555555BC020000000000001BFCC4D5E6F8091A0BFF800000000000 1BFE555555555555BC01D555555555557BFCF86A314DBF868BFF8000000000001BFE55 5555555555BC01AAAAAAAAAAAACBFD12F684BDA12F6BFF8000000000001BFE55555555 5555BC018000000000001BFD26AF37C048D15BFF8000000000001BFE555555555555BC 015555555555556BFD375F31AED6A92BFF8000000000001BFE555555555555BC012AAA AAAAAAAABBFD450672894AB6DBFF8000000000001BFE555555555555BC010000000000 000BFD4FA4FA4FA4FA5BFF8000000000001BFE555555555555BC00AAAAAAAAAAAABBFD 573AC901E573BBFF8000000000001BFE555555555555BC005555555555556BFD5BC7DE A00C22EBFF8000000000001BFE555555555555BC000000000000001BFD5D4C3B2A1907 FBFF8000000000001BFE555555555555BBFF5555555555558BFD5BC7DEA00C22EBFF80 00000000001BFE555555555555BBFE555555555555BBFD573AC901E573BBFF80000000 00001BFE555555555555BBCC8000000000000BFD4FA4FA4FA4FA5BFF8000000000001B FE555555555555B3FE555555555554FBFD450672894AB6DBFF8000000000001BFE5555 55555555B3FF5555555555552BFD375F31AED6A92BFF8000000000001BFE5555555555 55B3FFFFFFFFFFFFFFCBFD26AF37C048D16BFF8000000000001BFE555555555555B400 5555555555553BFD12F684BDA12F7BFF8000000000001BFE555555555555B400AAAAAA AAAAAA8BFCF86A314DBF86BBFF8000000000001BFE555555555555B400FFFFFFFFFFFF DBFCC4D5E6F8091A4BFF8000000000001BFE555555555555B4012AAAAAAAAAAA9BFC8B 302A7A1F19ABFF8000000000001BFE555555555555B4015555555555554BFC4B78FBD4 01847BFF8000000000001BFE555555555555B4017FFFFFFFFFFFFBFC05B05B05B05B2B FF8000000000001BFE555555555555B401AAAAAAAAAAAAABFB73AC901E573AFBFF8000 000000001BFE555555555555B401D555555555555BFA9FAB0BC1CD2E1BFF8000000000 001BFE555555555555B4020000000000000BF7FDB97530ECA60BFF8000000000001BFE 555555555555B40215555555555553FA388277166054BBFF8000000000001BFE555555 555555B4022AAAAAAAAAAAA3FB6480F2B9D647CBFF8000000000001BFE555555555555 B4023FFFFFFFFFFFF3FC1C71C71C71C6FBFF8000000000001BCC8000000000000C0240 00000000000BFBDDDDDDDDDDDDDBFF8000000000001BCC8000000000000C022AAAAAAA AAAABBFC34B78FBD40182BFF8000000000001BCC8000000000000C021555555555556B FC746EBE635DAD3BFF8000000000001BCC8000000000000C020000000000001BFCAE14 7AE147ADEBFF8000000000001BCC8000000000000C01D555555555557BFCE1A8C536FE 1A6BFF8000000000001BCC8000000000000C01AAAAAAAAAAAACBFD0795CEB240795BFF 8000000000001BCC8000000000000C018000000000001BFD1B4E81B4E81B4BFF800000 0000001BCC8000000000000C015555555555556BFD2BFE7BA375F31BFF800000000000 1BCC8000000000000C012AAAAAAAAAAABBFD39A5BC7DEA00CBFF8000000000001BCC80 00000000000C010000000000000BFD4444444444444BFF8000000000001BCC80000000 00000C00AAAAAAAAAAAABBFD4BDA12F684BDABFF8000000000001BCC8000000000000C 005555555555556BFD50672894AB6CDBFF8000000000001BCC8000000000000C000000 000000001BFD51EB851EB851EBFF8000000000001BCC8000000000000BFF5555555555 558BFD50672894AB6CDBFF8000000000001BCC8000000000000BFE555555555555BBFD 4BDA12F684BDABFF8000000000001BCC8000000000000BCC8000000000000BFD444444 4444444BFF8000000000001BCC80000000000003FE555555555554FBFD39A5BC7DEA00 CBFF8000000000001BCC80000000000003FF5555555555552BFD2BFE7BA375F31BFF80 00000000001BCC80000000000003FFFFFFFFFFFFFFCBFD1B4E81B4E81B5BFF80000000 00001BCC80000000000004005555555555553BFD0795CEB240796BFF8000000000001B CC8000000000000400AAAAAAAAAAAA8BFCE1A8C536FE1A9BFF8000000000001BCC8000 000000000400FFFFFFFFFFFFDBFCAE147AE147AE2BFF8000000000001BCC8000000000 0004012AAAAAAAAAAA9BFC746EBE635DAD8BFF8000000000001BCC8000000000000401 5555555555554BFC34B78FBD40186BFF8000000000001BCC80000000000004017FFFFF FFFFFFFBFBDDDDDDDDDDDE1BFF8000000000001BCC8000000000000401AAAAAAAAAAAA ABFB4629B7F0D462BBFF8000000000001BCC8000000000000401D555555555555BFA44 A55B66C77D9BFF8000000000001BCC800000000000040200000000000003F6B4E81B4E 81BC0BFF8000000000001BCC800000000000040215555555555553FA9388277166053B FF8000000000001BCC80000000000004022AAAAAAAAAAAA3FB9203CAE759200BFF8000 000000001BCC80000000000004023FFFFFFFFFFFF3FC3333333333331BFF8000000000 0013FE555555555554FC024000000000000BFB9E26AF37C048DBFF80000000000013FE 555555555554FC022AAAAAAAAAAABBFC14DBF86A314DABFF80000000000013FE555555 555554FC021555555555556BFC549327104EE2BBFF80000000000013FE555555555554 FC020000000000001BFC8E38E38E38E36BFF80000000000013FE555555555554FC01D5 55555555557BFCC1CD2DE3EF4FEBFF80000000000013FE555555555554FC01AAAAAAAA AAAACBFCEF50061172282BFF80000000000013FE555555555554FC018000000000001B FD0B60B60B60B60BFF80000000000013FE555555555554FC015555555555556BFD1C10 AFF9EE8DDBFF80000000000013FE555555555554FC012AAAAAAAAAAABBFD29B7F0D462 9B8BFF80000000000013FE555555555554FC010000000000000BFD3456789ABCDF0BFF 80000000000013FE555555555554FC00AAAAAAAAAAAABBFD3BEC474CFD586BFF800000 00000013FE555555555554FC005555555555556BFD40795CEB24079BFF800000000000 13FE555555555554FC000000000000001BFD41FDB97530ECABFF80000000000013FE55 5555555554FBFF5555555555558BFD40795CEB24079BFF80000000000013FE55555555 5554FBFE555555555555BBFD3BEC474CFD586BFF80000000000013FE555555555554FB CC8000000000000BFD3456789ABCDF0BFF80000000000013FE555555555554F3FE5555 55555554FBFD29B7F0D4629B8BFF80000000000013FE555555555554F3FF5555555555 552BFD1C10AFF9EE8DDBFF80000000000013FE555555555554F3FFFFFFFFFFFFFFCBFD 0B60B60B60B61BFF80000000000013FE555555555554F4005555555555553BFCEF5006 1172283BFF80000000000013FE555555555554F400AAAAAAAAAAAA8BFCC1CD2DE3EF50 1BFF80000000000013FE555555555554F400FFFFFFFFFFFFDBFC8E38E38E38E3BBFF80 000000000013FE555555555554F4012AAAAAAAAAAA9BFC549327104EE2FBFF80000000 000013FE555555555554F4015555555555554BFC14DBF86A314DEBFF80000000000013 FE555555555554F4017FFFFFFFFFFFFBFB9E26AF37C0491BFF80000000000013FE5555 55555554F401AAAAAAAAAAAAABFB0672894AB6CDBBFF80000000000013FE5555555555 54F401D555555555555BF98A6DFC3518A72BFF80000000000013FE555555555554F402 00000000000003F93579BE02468B8BFF80000000000013FE555555555554F402155555 55555553FB097B425ED097ABFF80000000000013FE555555555554F4022AAAAAAAAAAA A3FBD1BAF98D76B50BFF80000000000013FE555555555554F4023FFFFFFFFFFFF3FC53 0ECA8641FD9BFF80000000000013FF5555555555552C024000000000000BFB4C3B2A19 07F6DBFF80000000000013FF5555555555552C022AAAAAAAAAAABBFBD7CC6BB5AA494B FF80000000000013FF5555555555552C021555555555556BFC2B9D6480F2B9BBFF8000 0000000013FF5555555555552C020000000000001BFC654320FEDCBA6BFF8000000000 0013FF5555555555552C01D555555555557BFC98D76B549326EBFF80000000000013FF 5555555555552C01AAAAAAAAAAAACBFCC65A438215FF2BFF80000000000013FF555555 5555552C018000000000001BFCEDCBA98765430BFF80000000000013FF555555555555 2C015555555555556BFD0795CEB240795BFF80000000000013FF5555555555552C012A AAAAAAAAAABBFD153D0F8CB4870BFF80000000000013FF5555555555552C0100000000 00000BFD1FDB97530ECA8BFF80000000000013FF5555555555552C00AAAAAAAAAAAABB FD277166054F43EBFF80000000000013FF5555555555552C005555555555556BFD2BFE 7BA375F31BFF80000000000013FF5555555555552C000000000000001BFD2D82D82D82 D82BFF80000000000013FF5555555555552BFF5555555555558BFD2BFE7BA375F31BFF 80000000000013FF5555555555552BFE555555555555BBFD277166054F43EBFF800000 00000013FF5555555555552BCC8000000000000BFD1FDB97530ECA8BFF800000000000 13FF55555555555523FE555555555554FBFD153D0F8CB4870BFF80000000000013FF55 555555555523FF5555555555552BFD0795CEB240795BFF80000000000013FF55555555 555523FFFFFFFFFFFFFFCBFCEDCBA98765431BFF80000000000013FF55555555555524 005555555555553BFCC65A438215FF4BFF80000000000013FF5555555555552400AAAA AAAAAAAA8BFC98D76B5493272BFF80000000000013FF5555555555552400FFFFFFFFFF FFDBFC654320FEDCBABBFF80000000000013FF55555555555524012AAAAAAAAAAA9BFC 2B9D6480F2B9FBFF80000000000013FF55555555555524015555555555554BFBD7CC6B B5AA49BBFF80000000000013FF55555555555524017FFFFFFFFFFFFBFB4C3B2A1907F7 1BFF80000000000013FF5555555555552401AAAAAAAAAAAAABFA690E0857FCF76BFF80 000000000013FF5555555555552401D555555555555BF70AFF9EE8DD7C8BFF80000000 000013FF555555555555240200000000000003FA3E93E93E93E9CBFF80000000000013 FF555555555555240215555555555553FB5B66C77D88E9ABFF80000000000013FF5555 5555555524022AAAAAAAAAAAA3FC11D33F5617838BFF80000000000013FF5555555555 5524023FFFFFFFFFFFF3FC7C048D159E269BFF80000000000013FFFFFFFFFFFFFFCC02 4000000000000BFAD0369D0369D0ABFF80000000000013FFFFFFFFFFFFFFCC022AAAAA AAAAAABBFB73AC901E573ACBFF80000000000013FFFFFFFFFFFFFFCC02155555555555 6BFBF31AED6A9264EBFF80000000000013FFFFFFFFFFFFFFCC020000000000001BFC33 33333333332BFF80000000000013FFFFFFFFFFFFFFCC01D555555555557BFC66C77D88 E99FABFF80000000000013FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFC944A55B66C77EB FF80000000000013FFFFFFFFFFFFFFCC018000000000001BFCBBBBBBBBBBBBCBFF8000 0000000013FFFFFFFFFFFFFFCC015555555555556BFCDD1BAF98D76B6BFF8000000000 0013FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFCF86A314DBF86BBFF80000000000013FF FFFFFFFFFFFFCC010000000000000BFD06D3A06D3A06EBFF80000000000013FFFFFFFF FFFFFFCC00AAAAAAAAAAAABBFD0E696F1F7A804BFF80000000000013FFFFFFFFFFFFFF CC005555555555556BFD12F684BDA12F7BFF80000000000013FFFFFFFFFFFFFFCC0000 00000000001BFD147AE147AE148BFF80000000000013FFFFFFFFFFFFFFCBFF55555555 55558BFD12F684BDA12F7BFF80000000000013FFFFFFFFFFFFFFCBFE555555555555BB FD0E696F1F7A804BFF80000000000013FFFFFFFFFFFFFFCBCC8000000000000BFD06D3 A06D3A06EBFF80000000000013FFFFFFFFFFFFFFC3FE555555555554FBFCF86A314DBF 86CBFF80000000000013FFFFFFFFFFFFFFC3FF5555555555552BFCDD1BAF98D76B7BFF 80000000000013FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFCBBBBBBBBBBBBEBFF800000 00000013FFFFFFFFFFFFFFC4005555555555553BFC944A55B66C780BFF800000000000 13FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFC66C77D88E99FEBFF80000000000013FFFF FFFFFFFFFFC400FFFFFFFFFFFFDBFC3333333333337BFF80000000000013FFFFFFFFFF FFFFC4012AAAAAAAAAAA9BFBF31AED6A92655BFF80000000000013FFFFFFFFFFFFFFC4 015555555555554BFB73AC901E573B3BFF80000000000013FFFFFFFFFFFFFFC4017FFF FFFFFFFFFBFAD0369D0369D11BFF80000000000013FFFFFFFFFFFFFFC401AAAAAAAAAA AAABF9419CA252ADB4BBFF80000000000013FFFFFFFFFFFFFFC401D5555555555553F9 4DBF86A314DAEBFF80000000000013FFFFFFFFFFFFFFC40200000000000003FB0369D0 369D036BFF80000000000013FFFFFFFFFFFFFFC40215555555555553FBBF86A314DBF8 2BFF80000000000013FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FC43E32D21C10ACBFF80 000000000013FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FCAE147AE147ADDBFF80000000 000014005555555555553C024000000000000BF9C71C71C71C724BFF80000000000014 005555555555553C022AAAAAAAAAAABBFAFAB0BC1CD2DE0BFF80000000000014005555 555555553C021555555555556BFB7CC6BB5AA4996BFF80000000000014005555555555 553C020000000000001BFBF0123456789ABBFF80000000000014005555555555553C01 D555555555557BFC2B9D6480F2B9EBFF80000000000014005555555555553C01AAAAAA AAAAAACBFC59203CAE75922BFF80000000000014005555555555553C01800000000000 1BFC8091A2B3C4D60BFF80000000000014005555555555553C015555555555556BFCA1 F19690E0858BFF80000000000014005555555555553C012AAAAAAAAAAABBFCBD401845 C8A0DBFF80000000000014005555555555553C010000000000000BFCD27D27D27D27EB FF80000000000014005555555555553C00AAAAAAAAAAAABBFCE1A8C536FE1AABFF8000 0000000014005555555555553C005555555555556BFCEAC2F0734B791BFF8000000000 0014005555555555553C000000000000001BFCEDCBA98765435BFF8000000000001400 5555555555553BFF5555555555558BFCEAC2F0734B791BFF8000000000001400555555 5555553BFE555555555555BBFCE1A8C536FE1ABBFF8000000000001400555555555555 3BCC8000000000000BFCD27D27D27D27FBFF800000000000140055555555555533FE55 5555555554FBFCBD401845C8A0FBFF800000000000140055555555555533FF55555555 55552BFCA1F19690E085ABFF800000000000140055555555555533FFFFFFFFFFFFFFCB FC8091A2B3C4D61BFF800000000000140055555555555534005555555555553BFC5920 3CAE75923BFF80000000000014005555555555553400AAAAAAAAAAAA8BFC2B9D6480F2 BA1BFF80000000000014005555555555553400FFFFFFFFFFFFDBFBF0123456789B3BFF 800000000000140055555555555534012AAAAAAAAAAA9BFB7CC6BB5AA499BBFF800000 000000140055555555555534015555555555554BFAFAB0BC1CD2DF2BFF800000000000 140055555555555534017FFFFFFFFFFFFBF9C71C71C71C73ABFF800000000000140055 55555555553401AAAAAAAAAAAAA3F82F684BDA12F3ABFF800000000000140055555555 55553401D5555555555553FA938827716604BBFF800000000000140055555555555534 0200000000000003FB79BE02468ACEFBFF800000000000140055555555555534021555 5555555553FC1AED6A9264E1EBFF800000000000140055555555555534022AAAAAAAAA AAA3FC7F0D4629B7F09BFF800000000000140055555555555534023FFFFFFFFFFFF3FC E93E93E93E93ABFF8000000000001400AAAAAAAAAAAA8C0240000000000003F76C16C1 6C16BEEBFF8000000000001400AAAAAAAAAAAA8C022AAAAAAAAAAABBF9D33F5617839A 0BFF8000000000001400AAAAAAAAAAAA8C021555555555556BFAE87C65A438213BFF80 00000000001400AAAAAAAAAAAA8C020000000000001BFB6789ABCDF011FBFF80000000 00001400AAAAAAAAAAAA8C01D555555555557BFBCEB240795CEB0BFF80000000000014 00AAAAAAAAAAAA8C01AAAAAAAAAAAACBFC14DBF86A314DCBFF8000000000001400AAAA AAAAAAAA8C018000000000001BFC3C4D5E6F8091ABFF8000000000001400AAAAAAAAAA AA8C015555555555556BFC5DAD524C9C414BFF8000000000001400AAAAAAAAAAAA8C01 2AAAAAAAAAAABBFC78FBD401845C9BFF8000000000001400AAAAAAAAAAAA8C01000000 0000000BFC8E38E38E38E3ABFF8000000000001400AAAAAAAAAAAA8C00AAAAAAAAAAAA BBFC9D6480F2B9D66BFF8000000000001400AAAAAAAAAAAA8C005555555555556BFCA6 7EAC2F0734DBFF8000000000001400AAAAAAAAAAAA8C000000000000001BFCA9876543 20FEFBFF8000000000001400AAAAAAAAAAAA8BFF5555555555558BFCA67EAC2F0734CB FF8000000000001400AAAAAAAAAAAA8BFE555555555555BBFC9D6480F2B9D66BFF8000 000000001400AAAAAAAAAAAA8BCC8000000000000BFC8E38E38E38E3ABFF8000000000 001400AAAAAAAAAAAA83FE555555555554FBFC78FBD401845CABFF8000000000001400 AAAAAAAAAAAA83FF5555555555552BFC5DAD524C9C415BFF8000000000001400AAAAAA AAAAAA83FFFFFFFFFFFFFFCBFC3C4D5E6F8091CBFF8000000000001400AAAAAAAAAAAA 84005555555555553BFC14DBF86A314DEBFF8000000000001400AAAAAAAAAAAA8400AA AAAAAAAAAA8BFBCEB240795CEB7BFF8000000000001400AAAAAAAAAAAA8400FFFFFFFF FFFFDBFB6789ABCDF0129BFF8000000000001400AAAAAAAAAAAA84012AAAAAAAAAAA9B FAE87C65A438222BFF8000000000001400AAAAAAAAAAAA84015555555555554BF9D33F 5617839BDBFF8000000000001400AAAAAAAAAAAA84017FFFFFFFFFFFF3F76C16C16C16 BB7BFF8000000000001400AAAAAAAAAAAA8401AAAAAAAAAAAAA3FA5CEB240795CE4BFF 8000000000001400AAAAAAAAAAAA8401D5555555555553FB524C9C413B8B0BFF800000 0000001400AAAAAAAAAAAA840200000000000003FC0123456789ABCBFF800000000000 1400AAAAAAAAAAAA840215555555555553FC5F31AED6A9263BFF8000000000001400AA AAAAAAAAAA84022AAAAAAAAAAAA3FCC3518A6DFC34EBFF8000000000001400AAAAAAAA AAAA84023FFFFFFFFFFFF3FD16C16C16C16BFBFF8000000000001400FFFFFFFFFFFFDC 0240000000000003FA62FC962FC962EBFF8000000000001400FFFFFFFFFFFFDC022AAA AAAAAAAAB3F82F684BDA12F81BFF8000000000001400FFFFFFFFFFFFDC021555555555 556BF966054F43E32D6BFF8000000000001400FFFFFFFFFFFFDC020000000000001BFA 9999999999996BFF8000000000001400FFFFFFFFFFFFDC01D555555555557BFB33F561 7839A5CBFF8000000000001400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFB8EFB11D33F56 2BFF8000000000001400FFFFFFFFFFFFDC018000000000001BFBDDDDDDDDDDDDEBFF80 00000000001400FFFFFFFFFFFFDC015555555555556BFC104EE2CC0A9E9BFF80000000 00001400FFFFFFFFFFFFDC012AAAAAAAAAAABBFC2B9D6480F2B9EBFF80000000000014 00FFFFFFFFFFFFDC010000000000000BFC40DA740DA740FBFF8000000000001400FFFF FFFFFFFFDC00AAAAAAAAAAAABBFC500611722833BBFF8000000000001400FFFFFFFFFF FFDC005555555555556BFC59203CAE75922BFF8000000000001400FFFFFFFFFFFFDC00 0000000000001BFC5C28F5C28F5C4BFF8000000000001400FFFFFFFFFFFFDBFF555555 5555558BFC59203CAE75921BFF8000000000001400FFFFFFFFFFFFDBFE555555555555 BBFC500611722833BBFF8000000000001400FFFFFFFFFFFFDBCC8000000000000BFC40 DA740DA740FBFF8000000000001400FFFFFFFFFFFFD3FE555555555554FBFC2B9D6480 F2B9FBFF8000000000001400FFFFFFFFFFFFD3FF5555555555552BFC104EE2CC0A9EAB FF8000000000001400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFBDDDDDDDDDDDE3BFF8000 000000001400FFFFFFFFFFFFD4005555555555553BFB8EFB11D33F566BFF8000000000 001400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFB33F5617839A61BFF8000000000001400 FFFFFFFFFFFFD400FFFFFFFFFFFFDBFA99999999999A6BFF8000000000001400FFFFFF FFFFFFD4012AAAAAAAAAAA9BF966054F43E32EDBFF8000000000001400FFFFFFFFFFFF D40155555555555543F82F684BDA12F37BFF8000000000001400FFFFFFFFFFFFD4017F FFFFFFFFFFF3FA62FC962FC9623BFF8000000000001400FFFFFFFFFFFFD401AAAAAAAA AAAAA3FB49327104EE2C8BFF8000000000001400FFFFFFFFFFFFD401D5555555555553 FBED097B425ED06BFF8000000000001400FFFFFFFFFFFFD40200000000000003FC4E81 B4E81B4E8BFF8000000000001400FFFFFFFFFFFFD40215555555555553FCAC901E573A C8EBFF8000000000001400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FD0857FCF746EBCBFF 8000000000001400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FD3D70A3D70A3D5BFF800000 00000014012AAAAAAAAAAA9C0240000000000003FB5E6F8091A2B37BFF800000000000 14012AAAAAAAAAAA9C022AAAAAAAAAAAB3FAA5BC7DEA00C20BFF80000000000014012A AAAAAAAAAA9C0215555555555563F94DBF86A314DB2BFF80000000000014012AAAAAAA AAAA9C020000000000001BF7FDB97530ECA93BFF80000000000014012AAAAAAAAAAA9C 01D555555555557BFA0E0857FCF7473BFF80000000000014012AAAAAAAAAAA9C01AAAA AAAAAAAACBFAC413B8B302A83BFF80000000000014012AAAAAAAAAAA9C018000000000 001BFB30ECA8641FDBEBFF80000000000014012AAAAAAAAAAA9C015555555555556BFB 73AC901E573B1BFF80000000000014012AAAAAAAAAAA9C012AAAAAAAAAAABBFBAA4993 882771BBFF80000000000014012AAAAAAAAAAA9C010000000000000BFBD4C3B2A1907F CBFF80000000000014012AAAAAAAAAAA9C00AAAAAAAAAAAABBFBF31AED6A92653BFF80 000000000014012AAAAAAAAAAA9C005555555555556BFC02A7A1F196911BFF80000000 000014012AAAAAAAAAAA9C000000000000001BFC05B05B05B05B4BFF80000000000014 012AAAAAAAAAAA9BFF5555555555558BFC02A7A1F196911BFF80000000000014012AAA AAAAAAAA9BFE555555555555BBFBF31AED6A92655BFF80000000000014012AAAAAAAAA AA9BCC8000000000000BFBD4C3B2A1907FEBFF80000000000014012AAAAAAAAAAA93FE 555555555554FBFBAA4993882771EBFF80000000000014012AAAAAAAAAAA93FF555555 5555552BFB73AC901E573B4BFF80000000000014012AAAAAAAAAAA93FFFFFFFFFFFFFF CBFB30ECA8641FDC1BFF80000000000014012AAAAAAAAAAA94005555555555553BFAC4 13B8B302A8ABFF80000000000014012AAAAAAAAAAA9400AAAAAAAAAAAA8BFA0E0857FC F7481BFF80000000000014012AAAAAAAAAAA9400FFFFFFFFFFFFDBF7FDB97530ECB21B FF80000000000014012AAAAAAAAAAA94012AAAAAAAAAAA93F94DBF86A314D97BFF8000 0000000014012AAAAAAAAAAA940155555555555543FAA5BC7DEA00C10BFF8000000000 0014012AAAAAAAAAAA94017FFFFFFFFFFFF3FB5E6F8091A2B33BFF8000000000001401 2AAAAAAAAAAA9401AAAAAAAAAAAAA3FBF623A67EAC2E9BFF80000000000014012AAAAA AAAAAA9401D5555555555553FC4CFD585E0E694BFF80000000000014012AAAAAAAAAAA 940200000000000003FCA4FA4FA4FA4F8BFF80000000000014012AAAAAAAAAAA940215 555555555553FD01845C8A0CE4FBFF80000000000014012AAAAAAAAAAA94022AAAAAAA AAAAA3FD33944A55B66C5BFF80000000000014012AAAAAAAAAAA94023FFFFFFFFFFFF3 FD68ACF13579BDDBFF80000000000014015555555555554C0240000000000003FC0ECA 8641FDB95BFF80000000000014015555555555554C022AAAAAAAAAAAB3FB9203CAE759 202BFF80000000000014015555555555554C0215555555555563FB12956D9B1DF60BFF 80000000000014015555555555554C0200000000000013FA3E93E93E93E96BFF800000 00000014015555555555554C01D5555555555573F8C10AFF9EE8DD2BFF800000000000 14015555555555554C01AAAAAAAAAAAACBF81722833944A6EBFF800000000000140155 55555555554C018000000000001BF9C71C71C71C727BFF800000000000140155555555 55554C015555555555556BFA690E0857FCF7EBFF80000000000014015555555555554C 012AAAAAAAAAAABBFAD6480F2B9D652BFF80000000000014015555555555554C010000 000000000BFB159E26AF37C0ABFF80000000000014015555555555554C00AAAAAAAAAA AABBFB33F5617839A61BFF80000000000014015555555555554C005555555555556BFB 4629B7F0D462FBFF80000000000014015555555555554C000000000000001BFB4C3B2A 1907F74BFF80000000000014015555555555554BFF5555555555558BFB4629B7F0D462 FBFF80000000000014015555555555554BFE555555555555BBFB33F5617839A62BFF80 000000000014015555555555554BCC8000000000000BFB159E26AF37C0BBFF80000000 0000140155555555555543FE555555555554FBFAD6480F2B9D655BFF80000000000014 0155555555555543FF5555555555552BFA690E0857FCF82BFF80000000000014015555 5555555543FFFFFFFFFFFFFFCBF9C71C71C71C738BFF80000000000014015555555555 5544005555555555553BF81722833944A93BFF80000000000014015555555555554400 AAAAAAAAAAAA83F8C10AFF9EE8D98BFF80000000000014015555555555554400FFFFFF FFFFFFD3FA3E93E93E93E82BFF800000000000140155555555555544012AAAAAAAAAAA 93FB12956D9B1DF59BFF8000000000001401555555555555440155555555555543FB92 03CAE7591FBBFF800000000000140155555555555544017FFFFFFFFFFFF3FC0ECA8641 FDB93BFF80000000000014015555555555554401AAAAAAAAAAAAA3FC5AA499388276EB FF80000000000014015555555555554401D5555555555553FCAC901E573AC8DBFF8000 000000001401555555555555440200000000000003FD02468ACF13579BFF8000000000 001401555555555555440215555555555553FD314DBF86A314CBFF8000000000001401 55555555555544022AAAAAAAAAAAA3FD635DAD524C9C1BFF8000000000001401555555 55555544023FFFFFFFFFFFF3FD987654320FEDABFF80000000000014017FFFFFFFFFFF FC0240000000000003FC7777777777775BFF80000000000014017FFFFFFFFFFFFC022A AAAAAAAAAAB3FC31AED6A9264E2BFF80000000000014017FFFFFFFFFFFFC0215555555 555563FBE3EF500611722BFF80000000000014017FFFFFFFFFFFFC0200000000000013 FB70A3D70A3D70CBFF80000000000014017FFFFFFFFFFFFC01D5555555555573FB097B 425ED097BBFF80000000000014017FFFFFFFFFFFFC01AAAAAAAAAAAAC3FA5CEB240795 CE7BFF80000000000014017FFFFFFFFFFFFC0180000000000013F97E4B17E4B17E1BFF 80000000000014017FFFFFFFFFFFFC0155555555555563F7CD2DE3EF50032BFF800000 00000014017FFFFFFFFFFFFC012AAAAAAAAAAABBF79CA252ADB3670BFF800000000000 14017FFFFFFFFFFFFC010000000000000BF91111111111122BFF80000000000014017F FFFFFFFFFFFC00AAAAAAAAAAAABBF98A6DFC3518A7DBFF80000000000014017FFFFFFF FFFFFC005555555555556BF9D33F5617839B5BFF80000000000014017FFFFFFFFFFFFC 000000000000001BF9EB851EB851EC9BFF80000000000014017FFFFFFFFFFFFBFF5555 555555558BF9D33F5617839B6BFF80000000000014017FFFFFFFFFFFFBFE5555555555 55BBF98A6DFC3518A80BFF80000000000014017FFFFFFFFFFFFBCC8000000000000BF9 1111111111124BFF80000000000014017FFFFFFFFFFFF3FE555555555554FBF79CA252 ADB3689BFF80000000000014017FFFFFFFFFFFF3FF55555555555523F7CD2DE3EF5001 1BFF80000000000014017FFFFFFFFFFFF3FFFFFFFFFFFFFFC3F97E4B17E4B17CFBFF80 000000000014017FFFFFFFFFFFF40055555555555533FA5CEB240795CDFBFF80000000 000014017FFFFFFFFFFFF400AAAAAAAAAAAA83FB097B425ED0975BFF80000000000014 017FFFFFFFFFFFF400FFFFFFFFFFFFD3FB70A3D70A3D703BFF80000000000014017FFF FFFFFFFFF4012AAAAAAAAAAA93FBE3EF50061171ABFF80000000000014017FFFFFFFFF FFF40155555555555543FC31AED6A9264DEBFF80000000000014017FFFFFFFFFFFF401 7FFFFFFFFFFFF3FC7777777777774BFF80000000000014017FFFFFFFFFFFF401AAAAAA AAAAAAA3FCC3518A6DFC34FBFF80000000000014017FFFFFFFFFFFF401D55555555555 53FD0A9E87C65A437BFF80000000000014017FFFFFFFFFFFF40200000000000003FD36 9D0369D0369BFF80000000000014017FFFFFFFFFFFF40215555555555553FD65A43821 5FF3CBFF80000000000014017FFFFFFFFFFFF4022AAAAAAAAAAAA3FD97B425ED097B2B FF80000000000014017FFFFFFFFFFFF4023FFFFFFFFFFFF3FDCCCCCCCCCCCCABFF8000 000000001401AAAAAAAAAAAAAC0240000000000003FCE93E93E93E93EBFF8000000000 001401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FCA375F31AED6ABBFF8000000000001401 AAAAAAAAAAAAAC0215555555555563FC63BEC474CFD59BFF8000000000001401AAAAAA AAAAAAAC0200000000000013FC2A1907F6E5D4EBFF8000000000001401AAAAAAAAAAAA AC01D5555555555573FBED097B425ED0CBFF8000000000001401AAAAAAAAAAAAAC01AA AAAAAAAAAAC3FB9203CAE759204BFF8000000000001401AAAAAAAAAAAAAC0180000000 000013FB4320FEDCBA988BFF8000000000001401AAAAAAAAAAAAAC0155555555555563 FB0061172283393BFF8000000000001401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FA9388 277166053BFF8000000000001401AAAAAAAAAAAAAC0100000000000003FA3E93E93E93 E90BFF8000000000001401AAAAAAAAAAAAAC00AAAAAAAAAAAAB3FA01E573AC901E2BFF 8000000000001401AAAAAAAAAAAAAC0055555555555563F9BAF98D76B548BBFF800000 0000001401AAAAAAAAAAAAAC0000000000000013F9A2B3C4D5E6F79BFF800000000000 1401AAAAAAAAAAAAABFF55555555555583F9BAF98D76B548ABFF8000000000001401AA AAAAAAAAAAABFE555555555555B3FA01E573AC901E1BFF8000000000001401AAAAAAAA AAAAABCC80000000000003FA3E93E93E93E8FBFF8000000000001401AAAAAAAAAAAAA3 FE555555555554F3FA938827716604FBFF8000000000001401AAAAAAAAAAAAA3FF5555 5555555523FB0061172283391BFF8000000000001401AAAAAAAAAAAAA3FFFFFFFFFFFF FFC3FB4320FEDCBA984BFF8000000000001401AAAAAAAAAAAAA40055555555555533FB 9203CAE759200BFF8000000000001401AAAAAAAAAAAAA400AAAAAAAAAAAA83FBED097B 425ED05BFF8000000000001401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FC2A1907F6E5D4 9BFF8000000000001401AAAAAAAAAAAAA4012AAAAAAAAAAA93FC63BEC474CFD55BFF80 00000000001401AAAAAAAAAAAAA40155555555555543FCA375F31AED6A6BFF80000000 00001401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FCE93E93E93E93CBFF80000000000014 01AAAAAAAAAAAAA401AAAAAAAAAAAAA3FD1A8C536FE1A8BBFF8000000000001401AAAA AAAAAAAAA401D5555555555553FD438215FF3DD1BBFF8000000000001401AAAAAAAAAA AAA40200000000000003FD6F8091A2B3C4EBFF8000000000001401AAAAAAAAAAAAA402 15555555555553FD9E87C65A43820BFF8000000000001401AAAAAAAAAAAAA4022AAAAA AAAAAAA3FDD097B425ED096BFF8000000000001401AAAAAAAAAAAAA4023FFFFFFFFFFF F3FE02D82D82D82D7BFF8000000000001401D555555555555C0240000000000003FD32 0FEDCBA9876BFF8000000000001401D555555555555C022AAAAAAAAAAAB3FD0F2B9D64 80F2CBFF8000000000001401D555555555555C0215555555555563FCDEA00C22E4508B FF8000000000001401D555555555555C0200000000000013FCA4FA4FA4FA4FDBFF8000 000000001401D555555555555C01D5555555555573FC7166054F43E34BFF8000000000 001401D555555555555C01AAAAAAAAAAAAC3FC43E32D21C10B1BFF8000000000001401 D555555555555C0180000000000013FC1C71C71C71C73BFF8000000000001401D55555 5555555C0155555555555563FBF623A67EAC2F0BFF8000000000001401D55555555555 5C012AAAAAAAAAAAB3FBBF86A314DBF87BFF8000000000001401D555555555555C0100 000000000003FB950C83FB72EA5BFF8000000000001401D555555555555C00AAAAAAAA AAAAB3FB76B549327104EBFF8000000000001401D555555555555C0055555555555563 FB6480F2B9D6480BFF8000000000001401D555555555555C0000000000000013FB5E6F 8091A2B3BBFF8000000000001401D555555555555BFF55555555555583FB6480F2B9D6 480BFF8000000000001401D555555555555BFE555555555555B3FB76B549327104DBFF 8000000000001401D555555555555BCC80000000000003FB950C83FB72EA4BFF800000 0000001401D5555555555553FE555555555554F3FBBF86A314DBF84BFF800000000000 1401D5555555555553FF55555555555523FBF623A67EAC2EEBFF8000000000001401D5 555555555553FFFFFFFFFFFFFFC3FC1C71C71C71C71BFF8000000000001401D5555555 5555540055555555555533FC43E32D21C10AFBFF8000000000001401D5555555555554 00AAAAAAAAAAAA83FC7166054F43E31BFF8000000000001401D555555555555400FFFF FFFFFFFFD3FCA4FA4FA4FA4F8BFF8000000000001401D5555555555554012AAAAAAAAA AA93FCDEA00C22E4503BFF8000000000001401D55555555555540155555555555543FD 0F2B9D6480F2BBFF8000000000001401D5555555555554017FFFFFFFFFFFF3FD320FED CBA9875BFF8000000000001401D555555555555401AAAAAAAAAAAAA3FD57FCF746EBE6 3BFF8000000000001401D555555555555401D5555555555553FD80F2B9D6480F2BFF80 00000000001401D55555555555540200000000000003FDACF13579BE024BFF80000000 00001401D55555555555540215555555555553FDDBF86A314DBF8BFF80000000000014 01D5555555555554022AAAAAAAAAAAA3FE07042BFE7BA36BFF8000000000001401D555 5555555554023FFFFFFFFFFFF3FE21907F6E5D4C3BFF80000000000014020000000000 000C0240000000000003FD740DA740DA742BFF80000000000014020000000000000C02 2AAAAAAAAAAAB3FD512956D9B1DF8BFF80000000000014020000000000000C02155555 55555563FD314DBF86A314FBFF80000000000014020000000000000C02000000000000 13FD147AE147AE14ABFF80000000000014020000000000000C01D5555555555573FCF5 617839A5BCBBFF80000000000014020000000000000C01AAAAAAAAAAAAC3FCC7DEA00C 22E47BFF80000000000014020000000000000C0180000000000013FCA06D3A06D3A09B FF80000000000014020000000000000C0155555555555563FC7F0D4629B7F0FBFF8000 0000000014020000000000000C012AAAAAAAAAAAB3FC63BEC474CFD5ABFF8000000000 0014020000000000000C0100000000000003FC4E81B4E81B4E9BFF8000000000001402 0000000000000C00AAAAAAAAAAAAB3FC3F5617839A5BDBFF8000000000001402000000 0000000C0055555555555563FC363BEC474CFD6BFF8000000000001402000000000000 0C0000000000000013FC3333333333334BFF80000000000014020000000000000BFF55 555555555583FC363BEC474CFD7BFF80000000000014020000000000000BFE55555555 5555B3FC3F5617839A5BDBFF80000000000014020000000000000BCC80000000000003 FC4E81B4E81B4E9BFF800000000000140200000000000003FE555555555554F3FC63BE C474CFD59BFF800000000000140200000000000003FF55555555555523FC7F0D4629B7 F0EBFF800000000000140200000000000003FFFFFFFFFFFFFFC3FCA06D3A06D3A07BFF 8000000000001402000000000000040055555555555533FCC7DEA00C22E45BFF800000 00000014020000000000000400AAAAAAAAAAAA83FCF5617839A5BC7BFF800000000000 14020000000000000400FFFFFFFFFFFFD3FD147AE147AE147BFF800000000000140200 000000000004012AAAAAAAAAAA93FD314DBF86A314DBFF800000000000140200000000 0000040155555555555543FD512956D9B1DF6BFF800000000000140200000000000004 017FFFFFFFFFFFF3FD740DA740DA740BFF80000000000014020000000000000401AAAA AAAAAAAAA3FD99FAB0BC1CD2EBFF80000000000014020000000000000401D555555555 5553FDC2F0734B78FBDBFF8000000000001402000000000000040200000000000003FD EEEEEEEEEEEF0BFF8000000000001402000000000000040215555555555553FE0EFB11 D33F561BFF800000000000140200000000000004022AAAAAAAAAAAA3FE280308B91419 CBFF800000000000140200000000000004023FFFFFFFFFFFF3FE428F5C28F5C29BFF80 000000000014021555555555555C0240000000000003FDBA987654320FEBFF80000000 000014021555555555555C022AAAAAAAAAAAB3FD97B425ED097B4BFF80000000000014 021555555555555C0215555555555563FD77D88E99FAB0CBFF80000000000014021555 555555555C0200000000000013FD5B05B05B05B06BFF80000000000014021555555555 555C01D5555555555573FD413B8B302A7A2BFF80000000000014021555555555555C01 AAAAAAAAAAAAC3FD2A7A1F19690E0BFF80000000000014021555555555555C01800000 00000013FD16C16C16C16C1BFF80000000000014021555555555555C01555555555555 63FD0611722833944BFF80000000000014021555555555555C012AAAAAAAAAAAB3FCF0 D4629B7F0D3BFF80000000000014021555555555555C0100000000000003FCDB97530E CA862BFF80000000000014021555555555555C00AAAAAAAAAAAAB3FCCC6BB5AA49936B FF80000000000014021555555555555C0055555555555563FCC3518A6DFC34FBFF8000 0000000014021555555555555C0000000000000013FCC048D159E26ADBFF8000000000 0014021555555555555BFF55555555555583FCC3518A6DFC350BFF8000000000001402 1555555555555BFE555555555555B3FCCC6BB5AA49936BFF8000000000001402155555 5555555BCC80000000000003FCDB97530ECA862BFF8000000000001402155555555555 53FE555555555554F3FCF0D4629B7F0D2BFF800000000000140215555555555553FF55 555555555523FD0611722833944BFF800000000000140215555555555553FFFFFFFFFF FFFFC3FD16C16C16C16C0BFF8000000000001402155555555555540055555555555533 FD2A7A1F19690DFBFF80000000000014021555555555555400AAAAAAAAAAAA83FD413B 8B302A7A1BFF80000000000014021555555555555400FFFFFFFFFFFFD3FD5B05B05B05 B04BFF800000000000140215555555555554012AAAAAAAAAAA93FD77D88E99FAB09BFF 8000000000001402155555555555540155555555555543FD97B425ED097B3BFF800000 000000140215555555555554017FFFFFFFFFFFF3FDBA987654320FDBFF800000000000 14021555555555555401AAAAAAAAAAAAA3FDE0857FCF746EBBFF800000000000140215 55555555555401D5555555555553FE04BDA12F684BDBFF800000000000140215555555 5555540200000000000003FE1ABCDF0123456BFF800000000000140215555555555554 0215555555555553FE3240795CEB240BFF800000000000140215555555555554022AAA AAAAAAAAA3FE4B487042BFE7ABFF800000000000140215555555555554023FFFFFFFFF FFF3FE65D4C3B2A1907BFF80000000000014022AAAAAAAAAAAAC0240000000000003FE 02D82D82D82D7BFF80000000000014022AAAAAAAAAAAAC022AAAAAAAAAAAB3FDE2CC0A 9E87C64BFF80000000000014022AAAAAAAAAAAAC0215555555555563FDC2F0734B78FB CBFF80000000000014022AAAAAAAAAAAAC0200000000000013FDA61D950C83FB6BFF80 000000000014022AAAAAAAAAAAAC01D5555555555573FD8C536FE1A8C52BFF80000000 000014022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FD759203CAE7590BFF80000000000014 022AAAAAAAAAAAAC0180000000000013FD61D950C83FB71BFF80000000000014022AAA AAAAAAAAAC0155555555555563FD512956D9B1DF4BFF80000000000014022AAAAAAAAA AAAC012AAAAAAAAAAAB3FD438215FF3DD19BFF80000000000014022AAAAAAAAAAAAC01 00000000000003FD38E38E38E38E1BFF80000000000014022AAAAAAAAAAAAC00AAAAAA AAAAAAB3FD314DBF86A314BBFF80000000000014022AAAAAAAAAAAAC00555555555555 63FD2CC0A9E87C658BFF80000000000014022AAAAAAAAAAAAC0000000000000013FD2B 3C4D5E6F807BFF80000000000014022AAAAAAAAAAAABFF55555555555583FD2CC0A9E8 7C658BFF80000000000014022AAAAAAAAAAAABFE555555555555B3FD314DBF86A314BB FF80000000000014022AAAAAAAAAAAABCC80000000000003FD38E38E38E38E1BFF8000 0000000014022AAAAAAAAAAAA3FE555555555554F3FD438215FF3DD19BFF8000000000 0014022AAAAAAAAAAAA3FF55555555555523FD512956D9B1DF4BFF8000000000001402 2AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD61D950C83FB70BFF80000000000014022AAAAA AAAAAAA40055555555555533FD759203CAE758FBFF80000000000014022AAAAAAAAAAA A400AAAAAAAAAAAA83FD8C536FE1A8C51BFF80000000000014022AAAAAAAAAAAA400FF FFFFFFFFFFD3FDA61D950C83FB4BFF80000000000014022AAAAAAAAAAAA4012AAAAAAA AAAA93FDC2F0734B78FB9BFF80000000000014022AAAAAAAAAAAA40155555555555543 FDE2CC0A9E87C63BFF80000000000014022AAAAAAAAAAAA4017FFFFFFFFFFFF3FE02D8 2D82D82D7BFF80000000000014022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE15CEB24079 5CDBFF80000000000014022AAAAAAAAAAAA401D5555555555553FE2A49938827715BFF 80000000000014022AAAAAAAAAAAA40200000000000003FE4048D159E26AEBFF800000 00000014022AAAAAAAAAAAA40215555555555553FE57CC6BB5AA498BFF800000000000 14022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE70D4629B7F0D2BFF80000000000014022A AAAAAAAAAAA4023FFFFFFFFFFFF3FE8B60B60B60B5FBFF80000000000014023FFFFFFF FFFFFC0240000000000003FE2AAAAAAAAAAAABFF80000000000014023FFFFFFFFFFFFC 022AAAAAAAAAAAB3FE1938827716605BFF80000000000014023FFFFFFFFFFFFC021555 5555555563FE094AB6CD8EFB0BFF80000000000014023FFFFFFFFFFFFC020000000000 0013FDF5C28F5C28F5BBFF80000000000014023FFFFFFFFFFFFC01D5555555555573FD DBF86A314DBF7BFF80000000000014023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FDC536FE 1A8C535BFF80000000000014023FFFFFFFFFFFFC0180000000000013FDB17E4B17E4B1 6BFF80000000000014023FFFFFFFFFFFFC0155555555555563FDA0CE512956D99BFF80 000000000014023FFFFFFFFFFFFC012AAAAAAAAAAAB3FD9327104EE2CBEBFF80000000 000014023FFFFFFFFFFFFC0100000000000003FD8888888888886BFF80000000000014 023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD80F2B9D6480F0BFF80000000000014023FFF FFFFFFFFFC0055555555555563FD7C65A438215FDBFF80000000000014023FFFFFFFFF FFFC0000000000000013FD7AE147AE147ACBFF80000000000014023FFFFFFFFFFFFBFF 55555555555583FD7C65A438215FDBFF80000000000014023FFFFFFFFFFFFBFE555555 555555B3FD80F2B9D6480F0BFF80000000000014023FFFFFFFFFFFFBCC800000000000 03FD8888888888886BFF80000000000014023FFFFFFFFFFFF3FE555555555554F3FD93 27104EE2CBEBFF80000000000014023FFFFFFFFFFFF3FF55555555555523FDA0CE5129 56D99BFF80000000000014023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FDB17E4B17E4B15B FF80000000000014023FFFFFFFFFFFF40055555555555533FDC536FE1A8C534BFF8000 0000000014023FFFFFFFFFFFF400AAAAAAAAAAAA83FDDBF86A314DBF6BFF8000000000 0014023FFFFFFFFFFFF400FFFFFFFFFFFFD3FDF5C28F5C28F59BFF8000000000001402 3FFFFFFFFFFFF4012AAAAAAAAAAA93FE094AB6CD8EFAFBFF80000000000014023FFFFF FFFFFFF40155555555555543FE1938827716604BFF80000000000014023FFFFFFFFFFF F4017FFFFFFFFFFFF3FE2AAAAAAAAAAA9BFF80000000000014023FFFFFFFFFFFF401AA AAAAAAAAAAA3FE3DA12F684BDA0BFF80000000000014023FFFFFFFFFFFF401D5555555 555553FE521C10AFF9EE8BFF80000000000014023FFFFFFFFFFFF40200000000000003 FE681B4E81B4E81BFF80000000000014023FFFFFFFFFFFF40215555555555553FE7F9E E8DD7CC6ABFF80000000000014023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE98A6DFC351 8A5BFF80000000000014023FFFFFFFFFFFF4023FFFFFFFFFFFF3FEB333333333331BFF 5555555555556C024000000000000C0240000000000003FC5555555555556BFF555555 5555556C024000000000000C022AAAAAAAAAAAB3FC0F8CB487042C3BFF555555555555 6C024000000000000C0215555555555563FB9FAB0BC1CD2E2BFF5555555555556C0240 00000000000C0200000000000013FB2C5F92C5F92CDBFF5555555555556C0240000000 00000C01D5555555555573FA8A6DFC3518A79BFF5555555555556C024000000000000C 01AAAAAAAAAAAAC3F9A8C536FE1A8D5BFF5555555555556C024000000000000C018000 0000000013F7B4E81B4E81B95BFF5555555555556C024000000000000C015555555555 556BF83B8B302A7A1DFBFF5555555555556C024000000000000C012AAAAAAAAAAABBF9 7839A5BC7DE98BFF5555555555556C024000000000000C010000000000000BFA111111 111110DBFF5555555555556C024000000000000C00AAAAAAAAAAAABBFA4DBF86A314DB DBFF5555555555556C024000000000000C005555555555556BFA722833944A558BFF55 55555555556C024000000000000C000000000000001BFA7E4B17E4B17E1BFF55555555 55556C024000000000000BFF5555555555558BFA722833944A559BFF5555555555556C 024000000000000BFE555555555555BBFA4DBF86A314DBDBFF5555555555556C024000 000000000BCC8000000000000BFA111111111110FBFF5555555555556C024000000000 0003FE555555555554FBF97839A5BC7DE9DBFF5555555555556C0240000000000003FF 5555555555552BF83B8B302A7A1EEBFF5555555555556C0240000000000003FFFFFFFF FFFFFFC3F7B4E81B4E81B4EBFF5555555555556C024000000000000400555555555555 33F9A8C536FE1A8C3BFF5555555555556C024000000000000400AAAAAAAAAAAA83FA8A 6DFC3518A6CBFF5555555555556C024000000000000400FFFFFFFFFFFFD3FB2C5F92C5 F92C4BFF5555555555556C0240000000000004012AAAAAAAAAAA93FB9FAB0BC1CD2DCB FF5555555555556C02400000000000040155555555555543FC0F8CB487042BFBFF5555 555555556C0240000000000004017FFFFFFFFFFFF3FC5555555555554BFF5555555555 556C024000000000000401AAAAAAAAAAAAA3FCA12F684BDA12FBFF5555555555556C02 4000000000000401D5555555555553FCF31AED6A9264FBFF5555555555556C02400000 000000040200000000000003FD258BF258BF25ABFF5555555555556C02400000000000 040215555555555553FD549327104EE2DBFF5555555555556C0240000000000004022A AAAAAAAAAAA3FD86A314DBF86A2BFF5555555555556C0240000000000004023FFFFFFF FFFFF3FDBBBBBBBBBBBBBBFF5555555555556C022AAAAAAAAAAABC0240000000000003 FBD950C83FB72F1BFF5555555555556C022AAAAAAAAAAABC022AAAAAAAAAAAB3FB4DBF 86A314DCABFF5555555555556C022AAAAAAAAAAABC0215555555555563FA9CA252ADB3 64DBFF5555555555556C022AAAAAAAAAAABC0200000000000013F96C16C16C16C43BFF 5555555555556C022AAAAAAAAAAABC01D555555555557BF6845C8A0CE4FF7BFF555555 5555556C022AAAAAAAAAAABC01AAAAAAAAAAAACBF99CA252ADB361FBFF555555555555 6C022AAAAAAAAAAABC018000000000001BFA6C16C16C16C07BFF5555555555556C022A AAAAAAAAAABC015555555555556BFAF19690E0857EEBFF5555555555556C022AAAAAAA AAAABC012AAAAAAAAAAABBFB2F684BDA12F61BFF5555555555556C022AAAAAAAAAAABC 010000000000000BFB59E26AF37C042BFF5555555555556C022AAAAAAAAAAABC00AAAA AAAAAAAABBFB7839A5BC7DE99BFF5555555555556C022AAAAAAAAAAABC005555555555 556BFB8A6DFC3518A68BFF5555555555556C022AAAAAAAAAAABC000000000000001BFB 907F6E5D4C3ADBFF5555555555556C022AAAAAAAAAAABBFF5555555555558BFB8A6DFC 3518A68BFF5555555555556C022AAAAAAAAAAABBFE555555555555BBFB7839A5BC7DE9 BBFF5555555555556C022AAAAAAAAAAABBCC8000000000000BFB59E26AF37C044BFF55 55555555556C022AAAAAAAAAAAB3FE555555555554FBFB2F684BDA12F64BFF55555555 55556C022AAAAAAAAAAAB3FF5555555555552BFAF19690E0857F4BFF5555555555556C 022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFA6C16C16C16C0EBFF5555555555556C022AAA AAAAAAAAB4005555555555553BF99CA252ADB362EBFF5555555555556C022AAAAAAAAA AAB400AAAAAAAAAAAA8BF6845C8A0CE50BFBFF5555555555556C022AAAAAAAAAAAB400 FFFFFFFFFFFFD3F96C16C16C16C21BFF5555555555556C022AAAAAAAAAAAB4012AAAAA AAAAAA93FA9CA252ADB3640BFF5555555555556C022AAAAAAAAAAAB401555555555555 43FB4DBF86A314DC2BFF5555555555556C022AAAAAAAAAAAB4017FFFFFFFFFFFF3FBD9 50C83FB72EDBFF5555555555556C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FC38827716 60551BFF5555555555556C022AAAAAAAAAAAB401D5555555555553FC8A6DFC3518A71B FF5555555555556C022AAAAAAAAAAAB40200000000000003FCE26AF37C048D5BFF5555 555555556C022AAAAAAAAAAAB40215555555555553FD203CAE759203EBFF5555555555 556C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FD524C9C413B8B3BFF5555555555556C02 2AAAAAAAAAAAB4023FFFFFFFFFFFF3FD87654320FEDCCBFF5555555555556C02155555 5555556C0240000000000003FB1A2B3C4D5E6FBBFF5555555555556C02155555555555 6C022AAAAAAAAAAAB3FA1D33F561783A8BFF5555555555556C021555555555556C0215 555555555563F6E573AC901E650BFF5555555555556C021555555555556C0200000000 00001BF9907F6E5D4C38DBFF5555555555556C021555555555556C01D555555555557B FA9690E0857FCE7BFF5555555555556C021555555555556C01AAAAAAAAAAAACBFB264E 209DC597CBFF5555555555556C021555555555556C018000000000001BFB7530ECA864 1F8BFF5555555555556C021555555555556C015555555555556BFBB7F0D4629B7EDBFF 5555555555556C021555555555556C012AAAAAAAAAAABBFBEE8DD7CC6BB57BFF555555 5555556C021555555555556C010000000000000BFC0C83FB72EA61CBFF555555555555 6C021555555555556C00AAAAAAAAAAAABBFC1BAF98D76B548BFF5555555555556C0215 55555555556C005555555555556BFC24C9C413B8B2FBFF5555555555556C0215555555 55556C000000000000001BFC27D27D27D27D1BFF5555555555556C021555555555556B FF5555555555558BFC24C9C413B8B2EBFF5555555555556C021555555555556BFE5555 55555555BBFC1BAF98D76B548BFF5555555555556C021555555555556BCC8000000000 000BFC0C83FB72EA61CBFF5555555555556C0215555555555563FE555555555554FBFB EE8DD7CC6BB59BFF5555555555556C0215555555555563FF5555555555552BFBB7F0D4 629B7EFBFF5555555555556C0215555555555563FFFFFFFFFFFFFFCBFB7530ECA8641F CBFF5555555555556C0215555555555564005555555555553BFB264E209DC5980BFF55 55555555556C021555555555556400AAAAAAAAAAAA8BFA9690E0857FCF7BFF55555555 55556C021555555555556400FFFFFFFFFFFFDBF9907F6E5D4C3B4BFF5555555555556C 0215555555555564012AAAAAAAAAAA93F6E573AC901E558BFF5555555555556C021555 55555555640155555555555543FA1D33F5617839ABFF5555555555556C021555555555 5564017FFFFFFFFFFFF3FB1A2B3C4D5E6F8BFF5555555555556C021555555555556401 AAAAAAAAAAAAA3FBB1DF623A67EAEBFF5555555555556C021555555555556401D55555 55555553FC2ADB363BEC476BFF5555555555556C021555555555556402000000000000 03FC82D82D82D82DABFF5555555555556C02155555555555640215555555555553FCE0 E696F1F7A81BFF5555555555556C0215555555555564022AAAAAAAAAAAA3FD22833944 A55B6BFF5555555555556C0215555555555564023FFFFFFFFFFFF3FD579BE02468ACEB FF5555555555556C020000000000001C0240000000000003F9B4E81B4E81B7CBFF5555 555555556C020000000000001C022AAAAAAAAAAABBF7E573AC901E47EBFF5555555555 556C020000000000001C021555555555556BFA3B8B302A7A1DBBFF5555555555556C02 0000000000001C020000000000001BFB1111111111103BFF5555555555556C02000000 0000001C01D555555555557BFB7839A5BC7DE94BFF5555555555556C02000000000000 1C01AAAAAAAAAAAACBFBD33F56178399CBFF5555555555556C020000000000001C0180 00000000001BFC111111111110CBFF5555555555556C020000000000001C0155555555 55556BFC327104EE2CC05BFF5555555555556C020000000000001C012AAAAAAAAAAABB FC4DBF86A314DBABFF5555555555556C020000000000001C010000000000000BFC62FC 962FC962BBFF5555555555556C020000000000001C00AAAAAAAAAAAABBFC722833944A 557BFF5555555555556C020000000000001C005555555555556BFC7B425ED097B3EBFF 5555555555556C020000000000001C000000000000001BFC7E4B17E4B17E0BFF555555 5555556C020000000000001BFF5555555555558BFC7B425ED097B3DBFF555555555555 6C020000000000001BFE555555555555BBFC722833944A557BFF5555555555556C0200 00000000001BCC8000000000000BFC62FC962FC962BBFF5555555555556C0200000000 000013FE555555555554FBFC4DBF86A314DBBBFF5555555555556C0200000000000013 FF5555555555552BFC327104EE2CC06BFF5555555555556C0200000000000013FFFFFF FFFFFFFFCBFC111111111110DBFF5555555555556C0200000000000014005555555555 553BFBD33F56178399FBFF5555555555556C020000000000001400AAAAAAAAAAAA8BFB 7839A5BC7DE99BFF5555555555556C020000000000001400FFFFFFFFFFFFDBFB111111 111110BBFF5555555555556C0200000000000014012AAAAAAAAAAA9BFA3B8B302A7A1E 6BFF5555555555556C0200000000000014015555555555554BF7E573AC901E513BFF55 55555555556C0200000000000014017FFFFFFFFFFFF3F9B4E81B4E81B66BFF55555555 55556C020000000000001401AAAAAAAAAAAAA3FB04EE2CC0A9E90BFF5555555555556C 020000000000001401D5555555555553FBA8C536FE1A8CEBFF5555555555556C020000 00000000140200000000000003FC2C5F92C5F92CCBFF5555555555556C020000000000 00140215555555555553FC8A6DFC3518A72BFF5555555555556C020000000000001402 2AAAAAAAAAAAA3FCEE8DD7CC6BB5DBFF5555555555556C0200000000000014023FFFFF FFFFFFF3FD2C5F92C5F92C7BFF5555555555556C01D555555555557C02400000000000 0BF86C16C16C16BE9BFF5555555555556C01D555555555557C022AAAAAAAAAAABBFA72 2833944A548BFF5555555555556C01D555555555557C021555555555556BFB38827716 60546BFF5555555555556C01D555555555557C020000000000001BFBABCDF0123455BB FF5555555555556C01D555555555557C01D555555555557BFC097B425ED0976BFF5555 555555556C01D555555555557C01AAAAAAAAAAAACBFC36FE1A8C536FABFF5555555555 556C01D555555555557C018000000000001BFC5E6F8091A2B38BFF5555555555556C01 D555555555557C015555555555556BFC7FCF746EBE632BFF5555555555556C01D55555 5555557C012AAAAAAAAAAABBFC9B1DF623A67E7BFF5555555555556C01D55555555555 7C010000000000000BFCB05B05B05B058BFF5555555555556C01D555555555557C00AA AAAAAAAAAABBFCBF86A314DBF84BFF5555555555556C01D555555555557C0055555555 55556BFCC8A0CE512956BBFF5555555555556C01D555555555557C000000000000001B FCCBA987654320DBFF5555555555556C01D555555555557BFF5555555555558BFCC8A0 CE512956ABFF5555555555556C01D555555555557BFE555555555555BBFCBF86A314DB F84BFF5555555555556C01D555555555557BCC8000000000000BFCB05B05B05B058BFF 5555555555556C01D5555555555573FE555555555554FBFC9B1DF623A67E8BFF555555 5555556C01D5555555555573FF5555555555552BFC7FCF746EBE633BFF555555555555 6C01D5555555555573FFFFFFFFFFFFFFCBFC5E6F8091A2B3ABFF5555555555556C01D5 555555555574005555555555553BFC36FE1A8C536FCBFF5555555555556C01D5555555 55557400AAAAAAAAAAAA8BFC097B425ED097ABFF5555555555556C01D5555555555574 00FFFFFFFFFFFFDBFBABCDF01234565BFF5555555555556C01D5555555555574012AAA AAAAAAAA9BFB388277166054DBFF5555555555556C01D5555555555574015555555555 554BFA722833944A556BFF5555555555556C01D5555555555574017FFFFFFFFFFFFBF8 6C16C16C16C04BFF5555555555556C01D555555555557401AAAAAAAAAAAAA3F9A8C536 FE1A8D9BFF5555555555556C01D555555555557401D5555555555553FB0E0857FCF747 4BFF5555555555556C01D55555555555740200000000000003FBBE02468ACF13DBFF55 55555555556C01D55555555555740215555555555553FC3D0F8CB487045BFF55555555 55556C01D5555555555574022AAAAAAAAAAAA3FCA12F684BDA130BFF5555555555556C 01D5555555555574023FFFFFFFFFFFF3FD05B05B05B05B0BFF5555555555556C01AAAA AAAAAAAACC024000000000000BFA6C16C16C16C0ABFF5555555555556C01AAAAAAAAAA AACC022AAAAAAAAAAABBFB419CA252ADB2CBFF5555555555556C01AAAAAAAAAAAACC02 1555555555556BFBC10AFF9EE8DD2BFF5555555555556C01AAAAAAAAAAAACC02000000 0000001BFC1A2B3C4D5E6F4BFF5555555555556C01AAAAAAAAAAAACC01D55555555555 7BFC4DBF86A314DBCBFF5555555555556C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFC7B 425ED097B40BFF5555555555556C01AAAAAAAAAAAACC018000000000001BFCA2B3C4D5 E6F7EBFF5555555555556C01AAAAAAAAAAAACC015555555555556BFCC413B8B302A76B FF5555555555556C01AAAAAAAAAAAACC012AAAAAAAAAAABBFCDF623A67EAC2BBFF5555 555555556C01AAAAAAAAAAAACC010000000000000BFCF49F49F49F49CBFF5555555555 556C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFD01E573AC901E4BFF5555555555556C01 AAAAAAAAAAAACC005555555555556BFD0672894AB6CD7BFF5555555555556C01AAAAAA AAAAAACC000000000000001BFD07F6E5D4C3B29BFF5555555555556C01AAAAAAAAAAAA CBFF5555555555558BFD0672894AB6CD8BFF5555555555556C01AAAAAAAAAAAACBFE55 5555555555BBFD01E573AC901E5BFF5555555555556C01AAAAAAAAAAAACBCC80000000 00000BFCF49F49F49F49DBFF5555555555556C01AAAAAAAAAAAAC3FE555555555554FB FCDF623A67EAC2DBFF5555555555556C01AAAAAAAAAAAAC3FF5555555555552BFCC413 B8B302A78BFF5555555555556C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFCA2B3C4D5E6 F7FBFF5555555555556C01AAAAAAAAAAAAC4005555555555553BFC7B425ED097B41BFF 5555555555556C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFC4DBF86A314DBFBFF555555 5555556C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFC1A2B3C4D5E6F8BFF555555555555 6C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFBC10AFF9EE8DD7BFF5555555555556C01AA AAAAAAAAAAC4015555555555554BFB419CA252ADB35BFF5555555555556C01AAAAAAAA AAAAC4017FFFFFFFFFFFFBFA6C16C16C16C15BFF5555555555556C01AAAAAAAAAAAAC4 01AAAAAAAAAAAAABF7E573AC901E54DBFF5555555555556C01AAAAAAAAAAAAC401D555 5555555553FA0AFF9EE8DD7D3BFF5555555555556C01AAAAAAAAAAAAC4020000000000 0003FB3579BE02468B2BFF5555555555556C01AAAAAAAAAAAAC40215555555555553FB F19690E085800BFF5555555555556C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FC5CEB24 0795CEBBFF5555555555556C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FCC71C71C71C71 CBFF5555555555556C018000000000001C024000000000000BFB2C5F92C5F92C1BFF55 55555555556C018000000000001C022AAAAAAAAAAABBFBB7F0D4629B7E8BFF55555555 55556C018000000000001C021555555555556BFC1BAF98D76B545BFF5555555555556C 018000000000001C020000000000001BFC5555555555550BFF5555555555556C018000 000000001C01D555555555557BFC88E99FAB0BC18BFF5555555555556C018000000000 001C01AAAAAAAAAAAACBFCB66C77D88E99CBFF5555555555556C018000000000001C01 8000000000001BFCDDDDDDDDDDDDABFF5555555555556C018000000000001C01555555 5555556BFCFF3DD1BAF98D4BFF5555555555556C018000000000001C012AAAAAAAAAAA BBFD0D4629B7F0D45BFF5555555555556C018000000000001C010000000000000BFD17 E4B17E4B17DBFF5555555555556C018000000000001C00AAAAAAAAAAAABBFD1F7A8030 8B913BFF5555555555556C018000000000001C005555555555556BFD240795CEB2406B FF5555555555556C018000000000001C000000000000001BFD258BF258BF257BFF5555 555555556C018000000000001BFF5555555555558BFD240795CEB2406BFF5555555555 556C018000000000001BFE555555555555BBFD1F7A80308B913BFF5555555555556C01 8000000000001BCC8000000000000BFD17E4B17E4B17DBFF5555555555556C01800000 00000013FE555555555554FBFD0D4629B7F0D45BFF5555555555556C01800000000000 13FF5555555555552BFCFF3DD1BAF98D5BFF5555555555556C0180000000000013FFFF FFFFFFFFFFCBFCDDDDDDDDDDDDCBFF5555555555556C01800000000000140055555555 55553BFCB66C77D88E99EBFF5555555555556C018000000000001400AAAAAAAAAAAA8B FC88E99FAB0BC1CBFF5555555555556C018000000000001400FFFFFFFFFFFFDBFC5555 555555555BFF5555555555556C0180000000000014012AAAAAAAAAAA9BFC1BAF98D76B 549BFF5555555555556C0180000000000014015555555555554BFBB7F0D4629B7EFBFF 5555555555556C0180000000000014017FFFFFFFFFFFFBFB2C5F92C5F92C5BFF555555 5555556C018000000000001401AAAAAAAAAAAAABFA2956D9B1DF61EBFF555555555555 6C018000000000001401D5555555555553F6E573AC901E5EFBFF5555555555556C0180 0000000000140200000000000003FA7E4B17E4B17F4BFF5555555555556C0180000000 0000140215555555555553FB7B425ED097B46BFF5555555555556C0180000000000014 022AAAAAAAAAAAA3FC21C10AFF9EE8EBFF5555555555556C0180000000000014023FFF FFFFFFFFF3FC8BF258BF258BFBFF5555555555556C015555555555556C024000000000 000BFB907F6E5D4C3B1BFF5555555555556C015555555555556C022AAAAAAAAAAABBFC 0E0857FCF746CBFF5555555555556C015555555555556C021555555555556BFC4DBF86 A314DBDBFF5555555555556C015555555555556C020000000000001BFC87654320FEDC 8BFF5555555555556C015555555555556C01D555555555557BFCBAF98D76B5490BFF55 55555555556C015555555555556C01AAAAAAAAAAAACBFCE87C65A438214BFF55555555 55556C015555555555556C018000000000001BFD07F6E5D4C3B29BFF5555555555556C 015555555555556C015555555555556BFD18A6DFC3518A6BFF5555555555556C015555 555555556C012AAAAAAAAAAABBFD264E209DC5981BFF5555555555556C015555555555 556C010000000000000BFD30ECA8641FDB9BFF5555555555556C015555555555556C00 AAAAAAAAAAAABBFD388277166054FBFF5555555555556C015555555555556C00555555 5555556BFD3D0F8CB487042BFF5555555555556C015555555555556C00000000000000 1BFD3E93E93E93E93BFF5555555555556C015555555555556BFF5555555555558BFD3D 0F8CB487042BFF5555555555556C015555555555556BFE555555555555BBFD38827716 6054FBFF5555555555556C015555555555556BCC8000000000000BFD30ECA8641FDB9B FF5555555555556C0155555555555563FE555555555554FBFD264E209DC5981BFF5555 555555556C0155555555555563FF5555555555552BFD18A6DFC3518A6BFF5555555555 556C0155555555555563FFFFFFFFFFFFFFCBFD07F6E5D4C3B2ABFF5555555555556C01 55555555555564005555555555553BFCE87C65A438215BFF5555555555556C01555555 5555556400AAAAAAAAAAAA8BFCBAF98D76B5493BFF5555555555556C01555555555555 6400FFFFFFFFFFFFDBFC87654320FEDCDBFF5555555555556C0155555555555564012A AAAAAAAAAA9BFC4DBF86A314DC1BFF5555555555556C01555555555555640155555555 55554BFC0E0857FCF7470BFF5555555555556C0155555555555564017FFFFFFFFFFFFB FB907F6E5D4C3B5BFF5555555555556C015555555555556401AAAAAAAAAAAAABFAF196 90E0857FEBFF5555555555556C015555555555556401D555555555555BF953D0F8CB48 702BFF5555555555556C01555555555555640200000000000003F96C16C16C16C28BFF 5555555555556C01555555555555640215555555555553FB1722833944A56BFF555555 5555556C0155555555555564022AAAAAAAAAAAA3FBDF623A67EAC2CBFF555555555555 6C0155555555555564023FFFFFFFFFFFF3FC59E26AF37C047BFF5555555555556C012A AAAAAAAAAABC024000000000000BFBE26AF37C048CDBFF5555555555556C012AAAAAAA AAAABC022AAAAAAAAAAABBFC36FE1A8C536FABFF5555555555556C012AAAAAAAAAAABC 021555555555556BFC76B549327104BBFF5555555555556C012AAAAAAAAAAABC020000 000000001BFCB05B05B05B056BFF5555555555556C012AAAAAAAAAAABC01D555555555 557BFCE3EF50061171EBFF5555555555556C012AAAAAAAAAAABC01AAAAAAAAAAAACBFD 08B91419CA251BFF5555555555556C012AAAAAAAAAAABC018000000000001BFD1C71C7 1C71C70BFF5555555555556C012AAAAAAAAAAABC015555555555556BFD2D21C10AFF9E DBFF5555555555556C012AAAAAAAAAAABC012AAAAAAAAAAABBFD3AC901E573AC8BFF55 55555555556C012AAAAAAAAAAABC010000000000000BFD456789ABCDF00BFF55555555 55556C012AAAAAAAAAAABC00AAAAAAAAAAAABBFD4CFD585E0E696BFF5555555555556C 012AAAAAAAAAAABC005555555555556BFD518A6DFC35189BFF5555555555556C012AAA AAAAAAAABC000000000000001BFD530ECA8641FDABFF5555555555556C012AAAAAAAAA AABBFF5555555555558BFD518A6DFC35189BFF5555555555556C012AAAAAAAAAAABBFE 555555555555BBFD4CFD585E0E696BFF5555555555556C012AAAAAAAAAAABBCC800000 0000000BFD456789ABCDF00BFF5555555555556C012AAAAAAAAAAAB3FE555555555554 FBFD3AC901E573AC8BFF5555555555556C012AAAAAAAAAAAB3FF5555555555552BFD2D 21C10AFF9EDBFF5555555555556C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD1C71C71C 71C71BFF5555555555556C012AAAAAAAAAAAB4005555555555553BFD08B91419CA252B FF5555555555556C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFCE3EF500611721BFF5555 555555556C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFCB05B05B05B05ABFF5555555555 556C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFC76B5493271050BFF5555555555556C01 2AAAAAAAAAAAB4015555555555554BFC36FE1A8C536FEBFF5555555555556C012AAAAA AAAAAAB4017FFFFFFFFFFFFBFBE26AF37C048D1BFF5555555555556C012AAAAAAAAAAA B401AAAAAAAAAAAAABFB4AB6CD8EFB11BBFF5555555555556C012AAAAAAAAAAAB401D5 55555555555BFA4DBF86A314DB9BFF5555555555556C012AAAAAAAAAAAB40200000000 000003F623456789ABDC0BFF5555555555556C012AAAAAAAAAAAB40215555555555553 FA8A6DFC3518A73BFF5555555555556C012AAAAAAAAAAAB4022AAAAAAAAAAAA3FB8D76 B54932710BFF5555555555556C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FC30ECA8641F DB9BFF5555555555556C010000000000000C024000000000000BFC1111111111111BFF 5555555555556C010000000000000C022AAAAAAAAAAABBFC56D9B1DF623A4BFF555555 5555556C010000000000000C021555555555556BFC9690E0857FCF5BFF555555555555 6C010000000000000C020000000000001BFCD0369D0369D00BFF5555555555556C0100 00000000000C01D555555555557BFD01E573AC901E4BFF5555555555556C0100000000 00000C01AAAAAAAAAAAACBFD18A6DFC3518A6BFF5555555555556C010000000000000C 018000000000001BFD2C5F92C5F92C5BFF5555555555556C010000000000000C015555 555555556BFD3D0F8CB487042BFF5555555555556C010000000000000C012AAAAAAAAA AABBFD4AB6CD8EFB11DBFF5555555555556C010000000000000C010000000000000BFD 5555555555555BFF5555555555556C010000000000000C00AAAAAAAAAAAABBFD5CEB24 0795CEBBFF5555555555556C010000000000000C005555555555556BFD617839A5BC7D EBFF5555555555556C010000000000000C000000000000001BFD62FC962FC962FBFF55 55555555556C010000000000000BFF5555555555558BFD617839A5BC7DEBFF55555555 55556C010000000000000BFE555555555555BBFD5CEB240795CEBBFF5555555555556C 010000000000000BCC8000000000000BFD5555555555555BFF5555555555556C010000 0000000003FE555555555554FBFD4AB6CD8EFB11DBFF5555555555556C010000000000 0003FF5555555555552BFD3D0F8CB487042BFF5555555555556C0100000000000003FF FFFFFFFFFFFFCBFD2C5F92C5F92C6BFF5555555555556C010000000000000400555555 5555553BFD18A6DFC3518A7BFF5555555555556C010000000000000400AAAAAAAAAAAA 8BFD01E573AC901E5BFF5555555555556C010000000000000400FFFFFFFFFFFFDBFCD0 369D0369D04BFF5555555555556C0100000000000004012AAAAAAAAAAA9BFC9690E085 7FCFABFF5555555555556C0100000000000004015555555555554BFC56D9B1DF623A7B FF5555555555556C0100000000000004017FFFFFFFFFFFFBFC1111111111111BFF5555 555555556C010000000000000401AAAAAAAAAAAAABFB8A6DFC3518A6FBFF5555555555 556C010000000000000401D555555555555BFACD2DE3EF50061BFF5555555555556C01 00000000000004020000000000000BF8B4E81B4E81B30BFF5555555555556C01000000 000000040215555555555553FA0AFF9EE8DD7CBBFF5555555555556C01000000000000 04022AAAAAAAAAAAA3FB4DBF86A314DBCBFF5555555555556C0100000000000004023F FFFFFFFFFFF3FC111111111110FBFF5555555555556C00AAAAAAAAAAAABC0240000000 00000BFC27D27D27D27D1BFF5555555555556C00AAAAAAAAAAAABC022AAAAAAAAAAABB FC6D9B1DF623A64BFF5555555555556C00AAAAAAAAAAAABC021555555555556BFCAD52 4C9C413B5BFF5555555555556C00AAAAAAAAAAAABC020000000000001BFCE6F8091A2B 3C0BFF5555555555556C00AAAAAAAAAAAABC01D555555555557BFD0D4629B7F0D44BFF 5555555555556C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFD240795CEB2406BFF555555 5555556C00AAAAAAAAAAAABC018000000000001BFD37C048D159E25BFF555555555555 6C00AAAAAAAAAAAABC015555555555556BFD487042BFE7BA2BFF5555555555556C00AA AAAAAAAAAABC012AAAAAAAAAAABBFD5617839A5BC7DBFF5555555555556C00AAAAAAAA AAAABC010000000000000BFD60B60B60B60B5BFF5555555555556C00AAAAAAAAAAAABC 00AAAAAAAAAAAABBFD684BDA12F684BBFF5555555555556C00AAAAAAAAAAAABC005555 555555556BFD6CD8EFB11D33EBFF5555555555556C00AAAAAAAAAAAABC000000000000 001BFD6E5D4C3B2A18FBFF5555555555556C00AAAAAAAAAAAABBFF5555555555558BFD 6CD8EFB11D33EBFF5555555555556C00AAAAAAAAAAAABBFE555555555555BBFD684BDA 12F684BBFF5555555555556C00AAAAAAAAAAAABBCC8000000000000BFD60B60B60B60B 5BFF5555555555556C00AAAAAAAAAAAAB3FE555555555554FBFD5617839A5BC7DBFF55 55555555556C00AAAAAAAAAAAAB3FF5555555555552BFD487042BFE7BA2BFF55555555 55556C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD37C048D159E26BFF5555555555556C 00AAAAAAAAAAAAB4005555555555553BFD240795CEB2407BFF5555555555556C00AAAA AAAAAAAAB400AAAAAAAAAAAA8BFD0D4629B7F0D45BFF5555555555556C00AAAAAAAAAA AAB400FFFFFFFFFFFFDBFCE6F8091A2B3C4BFF5555555555556C00AAAAAAAAAAAAB401 2AAAAAAAAAAA9BFCAD524C9C413BABFF5555555555556C00AAAAAAAAAAAAB401555555 5555554BFC6D9B1DF623A67BFF5555555555556C00AAAAAAAAAAAAB4017FFFFFFFFFFF FBFC27D27D27D27D1BFF5555555555556C00AAAAAAAAAAAAB401AAAAAAAAAAAAABFBB7 F0D4629B7EDBFF5555555555556C00AAAAAAAAAAAAB401D555555555555BFB1419CA25 2ADB1BFF5555555555556C00AAAAAAAAAAAAB4020000000000000BF9907F6E5D4C398B FF5555555555556C00AAAAAAAAAAAAB40215555555555553F95FF3DD1BAF997BFF5555 555555556C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FB203CAE759203CBFF5555555555 556C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FBF49F49F49F49EBFF5555555555556C00 5555555555556C024000000000000BFC3579BE02468ADBFF5555555555556C00555555 5555556C022AAAAAAAAAAABBFC7B425ED097B40BFF5555555555556C00555555555555 6C021555555555556BFCBAF98D76B5491BFF5555555555556C005555555555556C0200 00000000001BFCF49F49F49F49CBFF5555555555556C005555555555556C01D5555555 55557BFD1419CA252ADB2BFF5555555555556C005555555555556C01AAAAAAAAAAAACB FD2ADB363BEC474BFF5555555555556C005555555555556C018000000000001BFD3E93 E93E93E93BFF5555555555556C005555555555556C015555555555556BFD4F43E32D21 C10BFF5555555555556C005555555555556C012AAAAAAAAAAABBFD5CEB240795CEBBFF 5555555555556C005555555555556C010000000000000BFD6789ABCDF0123BFF555555 5555556C005555555555556C00AAAAAAAAAAAABBFD6F1F7A80308B9BFF555555555555 6C005555555555556C005555555555556BFD73AC901E573ACBFF5555555555556C0055 55555555556C000000000000001BFD7530ECA8641FDBFF5555555555556C0055555555 55556BFF5555555555558BFD73AC901E573ACBFF5555555555556C005555555555556B FE555555555555BBFD6F1F7A80308B9BFF5555555555556C005555555555556BCC8000 000000000BFD6789ABCDF0123BFF5555555555556C0055555555555563FE5555555555 54FBFD5CEB240795CEBBFF5555555555556C0055555555555563FF5555555555552BFD 4F43E32D21C10BFF5555555555556C0055555555555563FFFFFFFFFFFFFFCBFD3E93E9 3E93E94BFF5555555555556C0055555555555564005555555555553BFD2ADB363BEC47 5BFF5555555555556C005555555555556400AAAAAAAAAAAA8BFD1419CA252ADB3BFF55 55555555556C005555555555556400FFFFFFFFFFFFDBFCF49F49F49F4A0BFF55555555 55556C0055555555555564012AAAAAAAAAAA9BFCBAF98D76B5496BFF5555555555556C 0055555555555564015555555555554BFC7B425ED097B43BFF5555555555556C005555 5555555564017FFFFFFFFFFFFBFC3579BE02468ADBFF5555555555556C005555555555 556401AAAAAAAAAAAAABFBD33F5617839A5BFF5555555555556C005555555555556401 D555555555555BFB2F684BDA12F67BFF5555555555556C005555555555556402000000 0000000BF9FDB97530ECA78BFF5555555555556C005555555555556402155555555555 53F8E573AC901E56DBFF5555555555556C0055555555555564022AAAAAAAAAAAA3FB04 EE2CC0A9E84BFF5555555555556C0055555555555564023FFFFFFFFFFFF3FBD950C83F B72E6BFF5555555555556C000000000000001C024000000000000BFC3A06D3A06D3A1B FF5555555555556C000000000000001C022AAAAAAAAAAABBFC7FCF746EBE634BFF5555 555555556C000000000000001C021555555555556BFCBF86A314DBF85BFF5555555555 556C000000000000001C020000000000001BFCF92C5F92C5F90BFF5555555555556C00 0000000000001C01D555555555557BFD166054F43E32CBFF5555555555556C00000000 0000001C01AAAAAAAAAAAACBFD2D21C10AFF9EEBFF5555555555556C00000000000000 1C018000000000001BFD40DA740DA740DBFF5555555555556C000000000000001C0155 55555555556BFD518A6DFC3518ABFF5555555555556C000000000000001C012AAAAAAA AAAABBFD5F31AED6A9265BFF5555555555556C000000000000001C010000000000000B FD69D0369D0369DBFF5555555555556C000000000000001C00AAAAAAAAAAAABBFD7166 054F43E33BFF5555555555556C000000000000001C005555555555556BFD75F31AED6A 926BFF5555555555556C000000000000001C000000000000001BFD7777777777777BFF 5555555555556C000000000000001BFF5555555555558BFD75F31AED6A926BFF555555 5555556C000000000000001BFE555555555555BBFD7166054F43E33BFF555555555555 6C000000000000001BCC8000000000000BFD69D0369D0369DBFF5555555555556C0000 000000000013FE555555555554FBFD5F31AED6A9265BFF5555555555556C0000000000 000013FF5555555555552BFD518A6DFC3518ABFF5555555555556C0000000000000013 FFFFFFFFFFFFFFCBFD40DA740DA740EBFF5555555555556C0000000000000014005555 555555553BFD2D21C10AFF9EFBFF5555555555556C000000000000001400AAAAAAAAAA AA8BFD166054F43E32DBFF5555555555556C000000000000001400FFFFFFFFFFFFDBFC F92C5F92C5F94BFF5555555555556C0000000000000014012AAAAAAAAAAA9BFCBF86A3 14DBF8ABFF5555555555556C0000000000000014015555555555554BFC7FCF746EBE63 7BFF5555555555556C0000000000000014017FFFFFFFFFFFFBFC3A06D3A06D3A1BFF55 55555555556C000000000000001401AAAAAAAAAAAAABFBDC598153D0F8DBFF55555555 55556C000000000000001401D555555555555BFB388277166054FBFF5555555555556C 0000000000000014020000000000000BFA111111111110CBFF5555555555556C000000 00000000140215555555555553F89CA252ADB362DBFF5555555555556C000000000000 0014022AAAAAAAAAAAA3FAF7A80308B9138BFF5555555555556C000000000000001402 3FFFFFFFFFFFF3FBD0369D0369CFEBFF5555555555556BFF5555555555558C02400000 0000000BFC3579BE02468ADBFF5555555555556BFF5555555555558C022AAAAAAAAAAA BBFC7B425ED097B40BFF5555555555556BFF5555555555558C021555555555556BFCBA F98D76B5491BFF5555555555556BFF5555555555558C020000000000001BFCF49F49F4 9F49CBFF5555555555556BFF5555555555558C01D555555555557BFD1419CA252ADB2B FF5555555555556BFF5555555555558C01AAAAAAAAAAAACBFD2ADB363BEC474BFF5555 555555556BFF5555555555558C018000000000001BFD3E93E93E93E93BFF5555555555 556BFF5555555555558C015555555555556BFD4F43E32D21C10BFF5555555555556BFF 5555555555558C012AAAAAAAAAAABBFD5CEB240795CEBBFF5555555555556BFF555555 5555558C010000000000000BFD6789ABCDF0123BFF5555555555556BFF555555555555 8C00AAAAAAAAAAAABBFD6F1F7A80308B9BFF5555555555556BFF5555555555558C0055 55555555556BFD73AC901E573ACBFF5555555555556BFF5555555555558C0000000000 00001BFD7530ECA8641FDBFF5555555555556BFF5555555555558BFF5555555555558B FD73AC901E573ACBFF5555555555556BFF5555555555558BFE555555555555BBFD6F1F 7A80308B9BFF5555555555556BFF5555555555558BCC8000000000000BFD6789ABCDF0 123BFF5555555555556BFF55555555555583FE555555555554FBFD5CEB240795CEBBFF 5555555555556BFF55555555555583FF5555555555552BFD4F43E32D21C10BFF555555 5555556BFF55555555555583FFFFFFFFFFFFFFCBFD3E93E93E93E94BFF555555555555 6BFF55555555555584005555555555553BFD2ADB363BEC475BFF5555555555556BFF55 55555555558400AAAAAAAAAAAA8BFD1419CA252ADB3BFF5555555555556BFF55555555 55558400FFFFFFFFFFFFDBFCF49F49F49F4A0BFF5555555555556BFF55555555555584 012AAAAAAAAAAA9BFCBAF98D76B5496BFF5555555555556BFF55555555555584015555 555555554BFC7B425ED097B43BFF5555555555556BFF55555555555584017FFFFFFFFF FFFBFC3579BE02468ADBFF5555555555556BFF5555555555558401AAAAAAAAAAAAABFB D33F5617839A5BFF5555555555556BFF5555555555558401D555555555555BFB2F684B DA12F67BFF5555555555556BFF55555555555584020000000000000BF9FDB97530ECA7 8BFF5555555555556BFF555555555555840215555555555553F8E573AC901E56DBFF55 55555555556BFF55555555555584022AAAAAAAAAAAA3FB04EE2CC0A9E84BFF55555555 55556BFF55555555555584023FFFFFFFFFFFF3FBD950C83FB72E6BFF5555555555556B FE555555555555BC024000000000000BFC27D27D27D27D3BFF5555555555556BFE5555 55555555BC022AAAAAAAAAAABBFC6D9B1DF623A66BFF5555555555556BFE5555555555 55BC021555555555556BFCAD524C9C413B7BFF5555555555556BFE555555555555BC02 0000000000001BFCE6F8091A2B3C2BFF5555555555556BFE555555555555BC01D55555 5555557BFD0D4629B7F0D45BFF5555555555556BFE555555555555BC01AAAAAAAAAAAA CBFD240795CEB2407BFF5555555555556BFE555555555555BC018000000000001BFD37 C048D159E26BFF5555555555556BFE555555555555BC015555555555556BFD487042BF E7BA3BFF5555555555556BFE555555555555BC012AAAAAAAAAAABBFD5617839A5BC7EB FF5555555555556BFE555555555555BC010000000000000BFD60B60B60B60B6BFF5555 555555556BFE555555555555BC00AAAAAAAAAAAABBFD684BDA12F684CBFF5555555555 556BFE555555555555BC005555555555556BFD6CD8EFB11D33FBFF5555555555556BFE 555555555555BC000000000000001BFD6E5D4C3B2A190BFF5555555555556BFE555555 555555BBFF5555555555558BFD6CD8EFB11D33FBFF5555555555556BFE555555555555 BBFE555555555555BBFD684BDA12F684CBFF5555555555556BFE555555555555BBCC80 00000000000BFD60B60B60B60B6BFF5555555555556BFE555555555555B3FE55555555 5554FBFD5617839A5BC7EBFF5555555555556BFE555555555555B3FF5555555555552B FD487042BFE7BA3BFF5555555555556BFE555555555555B3FFFFFFFFFFFFFFCBFD37C0 48D159E27BFF5555555555556BFE555555555555B4005555555555553BFD240795CEB2 408BFF5555555555556BFE555555555555B400AAAAAAAAAAAA8BFD0D4629B7F0D46BFF 5555555555556BFE555555555555B400FFFFFFFFFFFFDBFCE6F8091A2B3C6BFF555555 5555556BFE555555555555B4012AAAAAAAAAAA9BFCAD524C9C413BCBFF555555555555 6BFE555555555555B4015555555555554BFC6D9B1DF623A69BFF5555555555556BFE55 5555555555B4017FFFFFFFFFFFFBFC27D27D27D27D3BFF5555555555556BFE55555555 5555B401AAAAAAAAAAAAABFBB7F0D4629B7F1BFF5555555555556BFE555555555555B4 01D555555555555BFB1419CA252ADB5BFF5555555555556BFE555555555555B4020000 000000000BF9907F6E5D4C3A8BFF5555555555556BFE555555555555B4021555555555 5553F95FF3DD1BAF987BFF5555555555556BFE555555555555B4022AAAAAAAAAAAA3FB 203CAE7592038BFF5555555555556BFE555555555555B4023FFFFFFFFFFFF3FBF49F49 F49F49ABFF5555555555556BCC8000000000000C024000000000000BFC111111111111 1BFF5555555555556BCC8000000000000C022AAAAAAAAAAABBFC56D9B1DF623A4BFF55 55555555556BCC8000000000000C021555555555556BFC9690E0857FCF5BFF55555555 55556BCC8000000000000C020000000000001BFCD0369D0369D00BFF5555555555556B CC8000000000000C01D555555555557BFD01E573AC901E4BFF5555555555556BCC8000 000000000C01AAAAAAAAAAAACBFD18A6DFC3518A6BFF5555555555556BCC8000000000 000C018000000000001BFD2C5F92C5F92C5BFF5555555555556BCC8000000000000C01 5555555555556BFD3D0F8CB487042BFF5555555555556BCC8000000000000C012AAAAA AAAAAABBFD4AB6CD8EFB11DBFF5555555555556BCC8000000000000C01000000000000 0BFD5555555555555BFF5555555555556BCC8000000000000C00AAAAAAAAAAAABBFD5C EB240795CEBBFF5555555555556BCC8000000000000C005555555555556BFD617839A5 BC7DEBFF5555555555556BCC8000000000000C000000000000001BFD62FC962FC962FB FF5555555555556BCC8000000000000BFF5555555555558BFD617839A5BC7DEBFF5555 555555556BCC8000000000000BFE555555555555BBFD5CEB240795CEBBFF5555555555 556BCC8000000000000BCC8000000000000BFD5555555555555BFF5555555555556BCC 80000000000003FE555555555554FBFD4AB6CD8EFB11DBFF5555555555556BCC800000 00000003FF5555555555552BFD3D0F8CB487042BFF5555555555556BCC800000000000 03FFFFFFFFFFFFFFCBFD2C5F92C5F92C6BFF5555555555556BCC800000000000040055 55555555553BFD18A6DFC3518A7BFF5555555555556BCC8000000000000400AAAAAAAA AAAA8BFD01E573AC901E5BFF5555555555556BCC8000000000000400FFFFFFFFFFFFDB FCD0369D0369D04BFF5555555555556BCC80000000000004012AAAAAAAAAAA9BFC9690 E0857FCFABFF5555555555556BCC80000000000004015555555555554BFC56D9B1DF62 3A7BFF5555555555556BCC80000000000004017FFFFFFFFFFFFBFC1111111111111BFF 5555555555556BCC8000000000000401AAAAAAAAAAAAABFB8A6DFC3518A6FBFF555555 5555556BCC8000000000000401D555555555555BFACD2DE3EF50061BFF555555555555 6BCC80000000000004020000000000000BF8B4E81B4E81B30BFF5555555555556BCC80 0000000000040215555555555553FA0AFF9EE8DD7CBBFF5555555555556BCC80000000 000004022AAAAAAAAAAAA3FB4DBF86A314DBCBFF5555555555556BCC80000000000004 023FFFFFFFFFFFF3FC111111111110FBFF55555555555563FE555555555554FC024000 000000000BFBE26AF37C048D1BFF55555555555563FE555555555554FC022AAAAAAAAA AABBFC36FE1A8C536FCBFF55555555555563FE555555555554FC021555555555556BFC 76B549327104DBFF55555555555563FE555555555554FC020000000000001BFCB05B05 B05B058BFF55555555555563FE555555555554FC01D555555555557BFCE3EF50061172 0BFF55555555555563FE555555555554FC01AAAAAAAAAAAACBFD08B91419CA252BFF55 555555555563FE555555555554FC018000000000001BFD1C71C71C71C71BFF55555555 555563FE555555555554FC015555555555556BFD2D21C10AFF9EEBFF55555555555563 FE555555555554FC012AAAAAAAAAAABBFD3AC901E573AC9BFF55555555555563FE5555 55555554FC010000000000000BFD456789ABCDF01BFF55555555555563FE5555555555 54FC00AAAAAAAAAAAABBFD4CFD585E0E697BFF55555555555563FE555555555554FC00 5555555555556BFD518A6DFC3518ABFF55555555555563FE555555555554FC00000000 0000001BFD530ECA8641FDBBFF55555555555563FE555555555554FBFF555555555555 8BFD518A6DFC3518ABFF55555555555563FE555555555554FBFE555555555555BBFD4C FD585E0E697BFF55555555555563FE555555555554FBCC8000000000000BFD456789AB CDF01BFF55555555555563FE555555555554F3FE555555555554FBFD3AC901E573AC9B FF55555555555563FE555555555554F3FF5555555555552BFD2D21C10AFF9EEBFF5555 5555555563FE555555555554F3FFFFFFFFFFFFFFCBFD1C71C71C71C72BFF5555555555 5563FE555555555554F4005555555555553BFD08B91419CA253BFF55555555555563FE 555555555554F400AAAAAAAAAAAA8BFCE3EF500611723BFF55555555555563FE555555 555554F400FFFFFFFFFFFFDBFCB05B05B05B05CBFF55555555555563FE555555555554 F4012AAAAAAAAAAA9BFC76B5493271052BFF55555555555563FE555555555554F40155 55555555554BFC36FE1A8C53700BFF55555555555563FE555555555554F4017FFFFFFF FFFFFBFBE26AF37C048D5BFF55555555555563FE555555555554F401AAAAAAAAAAAAAB FB4AB6CD8EFB11FBFF55555555555563FE555555555554F401D555555555555BFA4DBF 86A314DC1BFF55555555555563FE555555555554F40200000000000003F623456789AB D40BFF55555555555563FE555555555554F40215555555555553FA8A6DFC3518A6BBFF 55555555555563FE555555555554F4022AAAAAAAAAAAA3FB8D76B5493270CBFF555555 55555563FE555555555554F4023FFFFFFFFFFFF3FC30ECA8641FDB7BFF555555555555 63FF5555555555552C024000000000000BFB907F6E5D4C3B1BFF55555555555563FF55 55555555552C022AAAAAAAAAAABBFC0E0857FCF746CBFF55555555555563FF55555555 55552C021555555555556BFC4DBF86A314DBDBFF55555555555563FF5555555555552C 020000000000001BFC87654320FEDC8BFF55555555555563FF5555555555552C01D555 555555557BFCBAF98D76B5490BFF55555555555563FF5555555555552C01AAAAAAAAAA AACBFCE87C65A438214BFF55555555555563FF5555555555552C018000000000001BFD 07F6E5D4C3B29BFF55555555555563FF5555555555552C015555555555556BFD18A6DF C3518A6BFF55555555555563FF5555555555552C012AAAAAAAAAAABBFD264E209DC598 1BFF55555555555563FF5555555555552C010000000000000BFD30ECA8641FDB9BFF55 555555555563FF5555555555552C00AAAAAAAAAAAABBFD388277166054FBFF55555555 555563FF5555555555552C005555555555556BFD3D0F8CB487042BFF55555555555563 FF5555555555552C000000000000001BFD3E93E93E93E93BFF55555555555563FF5555 555555552BFF5555555555558BFD3D0F8CB487042BFF55555555555563FF5555555555 552BFE555555555555BBFD388277166054FBFF55555555555563FF5555555555552BCC 8000000000000BFD30ECA8641FDB9BFF55555555555563FF55555555555523FE555555 555554FBFD264E209DC5981BFF55555555555563FF55555555555523FF555555555555 2BFD18A6DFC3518A6BFF55555555555563FF55555555555523FFFFFFFFFFFFFFCBFD07 F6E5D4C3B2ABFF55555555555563FF55555555555524005555555555553BFCE87C65A4 38215BFF55555555555563FF5555555555552400AAAAAAAAAAAA8BFCBAF98D76B5493B FF55555555555563FF5555555555552400FFFFFFFFFFFFDBFC87654320FEDCDBFF5555 5555555563FF55555555555524012AAAAAAAAAAA9BFC4DBF86A314DC1BFF5555555555 5563FF55555555555524015555555555554BFC0E0857FCF7470BFF55555555555563FF 55555555555524017FFFFFFFFFFFFBFB907F6E5D4C3B5BFF55555555555563FF555555 5555552401AAAAAAAAAAAAABFAF19690E0857FEBFF55555555555563FF555555555555 2401D555555555555BF953D0F8CB48702BFF55555555555563FF555555555555240200 000000000003F96C16C16C16C28BFF55555555555563FF555555555555240215555555 555553FB1722833944A56BFF55555555555563FF55555555555524022AAAAAAAAAAAA3 FBDF623A67EAC2CBFF55555555555563FF55555555555524023FFFFFFFFFFFF3FC59E2 6AF37C047BFF55555555555563FFFFFFFFFFFFFFCC024000000000000BFB2C5F92C5F9 2C9BFF55555555555563FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFBB7F0D4629B7F0BFF 55555555555563FFFFFFFFFFFFFFCC021555555555556BFC1BAF98D76B549BFF555555 55555563FFFFFFFFFFFFFFCC020000000000001BFC5555555555554BFF555555555555 63FFFFFFFFFFFFFFCC01D555555555557BFC88E99FAB0BC1CBFF55555555555563FFFF FFFFFFFFFFCC01AAAAAAAAAAAACBFCB66C77D88E9A0BFF55555555555563FFFFFFFFFF FFFFCC018000000000001BFCDDDDDDDDDDDDEBFF55555555555563FFFFFFFFFFFFFFCC 015555555555556BFCFF3DD1BAF98D8BFF55555555555563FFFFFFFFFFFFFFCC012AAA AAAAAAAABBFD0D4629B7F0D47BFF55555555555563FFFFFFFFFFFFFFCC010000000000 000BFD17E4B17E4B17FBFF55555555555563FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFD 1F7A80308B915BFF55555555555563FFFFFFFFFFFFFFCC005555555555556BFD240795 CEB2408BFF55555555555563FFFFFFFFFFFFFFCC000000000000001BFD258BF258BF25 9BFF55555555555563FFFFFFFFFFFFFFCBFF5555555555558BFD240795CEB2408BFF55 555555555563FFFFFFFFFFFFFFCBFE555555555555BBFD1F7A80308B915BFF55555555 555563FFFFFFFFFFFFFFCBCC8000000000000BFD17E4B17E4B17FBFF55555555555563 FFFFFFFFFFFFFFC3FE555555555554FBFD0D4629B7F0D47BFF55555555555563FFFFFF FFFFFFFFC3FF5555555555552BFCFF3DD1BAF98D9BFF55555555555563FFFFFFFFFFFF FFC3FFFFFFFFFFFFFFCBFCDDDDDDDDDDDE0BFF55555555555563FFFFFFFFFFFFFFC400 5555555555553BFCB66C77D88E9A2BFF55555555555563FFFFFFFFFFFFFFC400AAAAAA AAAAAA8BFC88E99FAB0BC20BFF55555555555563FFFFFFFFFFFFFFC400FFFFFFFFFFFF DBFC5555555555559BFF55555555555563FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFC1B AF98D76B54DBFF55555555555563FFFFFFFFFFFFFFC4015555555555554BFBB7F0D462 9B7F7BFF55555555555563FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFB2C5F92C5F92CDB FF55555555555563FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFA2956D9B1DF62EBFF5555 5555555563FFFFFFFFFFFFFFC401D5555555555553F6E573AC901E4EFBFF5555555555 5563FFFFFFFFFFFFFFC40200000000000003FA7E4B17E4B17E4BFF55555555555563FF FFFFFFFFFFFFC40215555555555553FB7B425ED097B3EBFF55555555555563FFFFFFFF FFFFFFC4022AAAAAAAAAAAA3FC21C10AFF9EE8ABFF55555555555563FFFFFFFFFFFFFF C4023FFFFFFFFFFFF3FC8BF258BF258BBBFF55555555555564005555555555553C0240 00000000000BFA6C16C16C16C1ABFF55555555555564005555555555553C022AAAAAAA AAAABBFB419CA252ADB34BFF55555555555564005555555555553C021555555555556B FBC10AFF9EE8DDABFF55555555555564005555555555553C020000000000001BFC1A2B 3C4D5E6F8BFF55555555555564005555555555553C01D555555555557BFC4DBF86A314 DC0BFF55555555555564005555555555553C01AAAAAAAAAAAACBFC7B425ED097B44BFF 55555555555564005555555555553C018000000000001BFCA2B3C4D5E6F82BFF555555 55555564005555555555553C015555555555556BFCC413B8B302A7ABFF555555555555 64005555555555553C012AAAAAAAAAAABBFCDF623A67EAC2FBFF555555555555640055 55555555553C010000000000000BFCF49F49F49F4A0BFF555555555555640055555555 55553C00AAAAAAAAAAAABBFD01E573AC901E6BFF55555555555564005555555555553C 005555555555556BFD0672894AB6CD9BFF55555555555564005555555555553C000000 000000001BFD07F6E5D4C3B2BBFF55555555555564005555555555553BFF5555555555 558BFD0672894AB6CDABFF55555555555564005555555555553BFE555555555555BBFD 01E573AC901E7BFF55555555555564005555555555553BCC8000000000000BFCF49F49 F49F4A1BFF555555555555640055555555555533FE555555555554FBFCDF623A67EAC3 1BFF555555555555640055555555555533FF5555555555552BFCC413B8B302A7CBFF55 5555555555640055555555555533FFFFFFFFFFFFFFCBFCA2B3C4D5E6F83BFF55555555 5555640055555555555534005555555555553BFC7B425ED097B45BFF55555555555564 005555555555553400AAAAAAAAAAAA8BFC4DBF86A314DC3BFF55555555555564005555 555555553400FFFFFFFFFFFFDBFC1A2B3C4D5E6FCBFF55555555555564005555555555 5534012AAAAAAAAAAA9BFBC10AFF9EE8DDFBFF55555555555564005555555555553401 5555555555554BFB419CA252ADB3DBFF555555555555640055555555555534017FFFFF FFFFFFFBFA6C16C16C16C25BFF55555555555564005555555555553401AAAAAAAAAAAA ABF7E573AC901E5CDBFF55555555555564005555555555553401D5555555555553FA0A FF9EE8DD7C3BFF5555555555556400555555555555340200000000000003FB3579BE02 468AABFF5555555555556400555555555555340215555555555553FBF19690E0857F8B FF555555555555640055555555555534022AAAAAAAAAAAA3FC5CEB240795CE7BFF5555 55555555640055555555555534023FFFFFFFFFFFF3FCC71C71C71C718BFF5555555555 556400AAAAAAAAAAAA8C024000000000000BF86C16C16C16C29BFF5555555555556400 AAAAAAAAAAAA8C022AAAAAAAAAAABBFA722833944A558BFF5555555555556400AAAAAA AAAAAA8C021555555555556BFB388277166054EBFF5555555555556400AAAAAAAAAAAA 8C020000000000001BFBABCDF01234563BFF5555555555556400AAAAAAAAAAAA8C01D5 55555555557BFC097B425ED097ABFF5555555555556400AAAAAAAAAAAA8C01AAAAAAAA AAAACBFC36FE1A8C536FEBFF5555555555556400AAAAAAAAAAAA8C018000000000001B FC5E6F8091A2B3CBFF5555555555556400AAAAAAAAAAAA8C015555555555556BFC7FCF 746EBE636BFF5555555555556400AAAAAAAAAAAA8C012AAAAAAAAAAABBFC9B1DF623A6 7EBBFF5555555555556400AAAAAAAAAAAA8C010000000000000BFCB05B05B05B05CBFF 5555555555556400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFCBF86A314DBF88BFF555555 5555556400AAAAAAAAAAAA8C005555555555556BFCC8A0CE512956FBFF555555555555 6400AAAAAAAAAAAA8C000000000000001BFCCBA9876543211BFF5555555555556400AA AAAAAAAAAA8BFF5555555555558BFCC8A0CE512956EBFF5555555555556400AAAAAAAA AAAA8BFE555555555555BBFCBF86A314DBF88BFF5555555555556400AAAAAAAAAAAA8B CC8000000000000BFCB05B05B05B05CBFF5555555555556400AAAAAAAAAAAA83FE5555 55555554FBFC9B1DF623A67ECBFF5555555555556400AAAAAAAAAAAA83FF5555555555 552BFC7FCF746EBE637BFF5555555555556400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFC 5E6F8091A2B3EBFF5555555555556400AAAAAAAAAAAA84005555555555553BFC36FE1A 8C53700BFF5555555555556400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFC097B425ED097 EBFF5555555555556400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFBABCDF0123456DBFF55 55555555556400AAAAAAAAAAAA84012AAAAAAAAAAA9BFB3882771660555BFF55555555 55556400AAAAAAAAAAAA84015555555555554BFA722833944A566BFF55555555555564 00AAAAAAAAAAAA84017FFFFFFFFFFFFBF86C16C16C16C44BFF5555555555556400AAAA AAAAAAAA8401AAAAAAAAAAAAA3F9A8C536FE1A8B9BFF5555555555556400AAAAAAAAAA AA8401D5555555555553FB0E0857FCF746CBFF5555555555556400AAAAAAAAAAAA8402 00000000000003FBBE02468ACF135BFF5555555555556400AAAAAAAAAAAA8402155555 55555553FC3D0F8CB487041BFF5555555555556400AAAAAAAAAAAA84022AAAAAAAAAAA A3FCA12F684BDA12CBFF5555555555556400AAAAAAAAAAAA84023FFFFFFFFFFFF3FD05 B05B05B05AEBFF5555555555556400FFFFFFFFFFFFDC0240000000000003F9B4E81B4E 81B3CBFF5555555555556400FFFFFFFFFFFFDC022AAAAAAAAAAABBF7E573AC901E57EB FF5555555555556400FFFFFFFFFFFFDC021555555555556BFA3B8B302A7A1F3BFF5555 555555556400FFFFFFFFFFFFDC020000000000001BFB111111111110FBFF5555555555 556400FFFFFFFFFFFFDC01D555555555557BFB7839A5BC7DEA0BFF5555555555556400 FFFFFFFFFFFFDC01AAAAAAAAAAAACBFBD33F5617839A8BFF5555555555556400FFFFFF FFFFFFDC018000000000001BFC1111111111112BFF5555555555556400FFFFFFFFFFFF DC015555555555556BFC327104EE2CC0CBFF5555555555556400FFFFFFFFFFFFDC012A AAAAAAAAAABBFC4DBF86A314DC1BFF5555555555556400FFFFFFFFFFFFDC0100000000 00000BFC62FC962FC9632BFF5555555555556400FFFFFFFFFFFFDC00AAAAAAAAAAAABB FC722833944A55EBFF5555555555556400FFFFFFFFFFFFDC005555555555556BFC7B42 5ED097B45BFF5555555555556400FFFFFFFFFFFFDC000000000000001BFC7E4B17E4B1 7E7BFF5555555555556400FFFFFFFFFFFFDBFF5555555555558BFC7B425ED097B44BFF 5555555555556400FFFFFFFFFFFFDBFE555555555555BBFC722833944A55EBFF555555 5555556400FFFFFFFFFFFFDBCC8000000000000BFC62FC962FC9632BFF555555555555 6400FFFFFFFFFFFFD3FE555555555554FBFC4DBF86A314DC2BFF5555555555556400FF FFFFFFFFFFD3FF5555555555552BFC327104EE2CC0DBFF5555555555556400FFFFFFFF FFFFD3FFFFFFFFFFFFFFCBFC1111111111114BFF5555555555556400FFFFFFFFFFFFD4 005555555555553BFBD33F5617839ADBFF5555555555556400FFFFFFFFFFFFD400AAAA AAAAAAAA8BFB7839A5BC7DEA7BFF5555555555556400FFFFFFFFFFFFD400FFFFFFFFFF FFDBFB1111111111119BFF5555555555556400FFFFFFFFFFFFD4012AAAAAAAAAAA9BFA 3B8B302A7A202BFF5555555555556400FFFFFFFFFFFFD4015555555555554BF7E573AC 901E5F3BFF5555555555556400FFFFFFFFFFFFD4017FFFFFFFFFFFF3F9B4E81B4E81B2 EBFF5555555555556400FFFFFFFFFFFFD401AAAAAAAAAAAAA3FB04EE2CC0A9E82BFF55 55555555556400FFFFFFFFFFFFD401D5555555555553FBA8C536FE1A8C0BFF55555555 55556400FFFFFFFFFFFFD40200000000000003FC2C5F92C5F92C4BFF55555555555564 00FFFFFFFFFFFFD40215555555555553FC8A6DFC3518A6BBFF5555555555556400FFFF FFFFFFFFD4022AAAAAAAAAAAA3FCEE8DD7CC6BB56BFF5555555555556400FFFFFFFFFF FFD4023FFFFFFFFFFFF3FD2C5F92C5F92C3BFF55555555555564012AAAAAAAAAAA9C02 40000000000003FB1A2B3C4D5E6F3BFF55555555555564012AAAAAAAAAAA9C022AAAAA AAAAAAB3FA1D33F56178398BFF55555555555564012AAAAAAAAAAA9C02155555555555 63F6E573AC901E510BFF55555555555564012AAAAAAAAAAA9C020000000000001BF990 7F6E5D4C3B5BFF55555555555564012AAAAAAAAAAA9C01D555555555557BFA9690E085 7FCFBBFF55555555555564012AAAAAAAAAAA9C01AAAAAAAAAAAACBFB264E209DC5986B FF55555555555564012AAAAAAAAAAA9C018000000000001BFB7530ECA864202BFF5555 5555555564012AAAAAAAAAAA9C015555555555556BFBB7F0D4629B7F7BFF5555555555 5564012AAAAAAAAAAA9C012AAAAAAAAAAABBFBEE8DD7CC6BB61BFF5555555555556401 2AAAAAAAAAAA9C010000000000000BFC0C83FB72EA621BFF55555555555564012AAAAA AAAAAA9C00AAAAAAAAAAAABBFC1BAF98D76B54DBFF55555555555564012AAAAAAAAAAA 9C005555555555556BFC24C9C413B8B34BFF55555555555564012AAAAAAAAAAA9C0000 00000000001BFC27D27D27D27D6BFF55555555555564012AAAAAAAAAAA9BFF55555555 55558BFC24C9C413B8B33BFF55555555555564012AAAAAAAAAAA9BFE555555555555BB FC1BAF98D76B54DBFF55555555555564012AAAAAAAAAAA9BCC8000000000000BFC0C83 FB72EA621BFF55555555555564012AAAAAAAAAAA93FE555555555554FBFBEE8DD7CC6B B63BFF55555555555564012AAAAAAAAAAA93FF5555555555552BFBB7F0D4629B7F9BFF 55555555555564012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFB7530ECA864206BFF555555 55555564012AAAAAAAAAAA94005555555555553BFB264E209DC598ABFF555555555555 64012AAAAAAAAAAA9400AAAAAAAAAAAA8BFA9690E0857FD0BBFF55555555555564012A AAAAAAAAAA9400FFFFFFFFFFFFDBF9907F6E5D4C3DCBFF55555555555564012AAAAAAA AAAA94012AAAAAAAAAAA93F6E573AC901E418BFF55555555555564012AAAAAAAAAAA94 0155555555555543FA1D33F56178386BFF55555555555564012AAAAAAAAAAA94017FFF FFFFFFFFF3FB1A2B3C4D5E6EEBFF55555555555564012AAAAAAAAAAA9401AAAAAAAAAA AAA3FBB1DF623A67EA4BFF55555555555564012AAAAAAAAAAA9401D5555555555553FC 2ADB363BEC471BFF55555555555564012AAAAAAAAAAA940200000000000003FC82D82D 82D82D6BFF55555555555564012AAAAAAAAAAA940215555555555553FCE0E696F1F7A7 CBFF55555555555564012AAAAAAAAAAA94022AAAAAAAAAAAA3FD22833944A55B3BFF55 555555555564012AAAAAAAAAAA94023FFFFFFFFFFFF3FD579BE02468ACCBFF55555555 555564015555555555554C0240000000000003FBD950C83FB72E7BFF55555555555564 015555555555554C022AAAAAAAAAAAB3FB4DBF86A314DBEBFF55555555555564015555 555555554C0215555555555563FA9CA252ADB3639BFF55555555555564015555555555 554C0200000000000013F96C16C16C16C1BBFF55555555555564015555555555554C01 D555555555557BF6845C8A0CE5137BFF55555555555564015555555555554C01AAAAAA AAAAAACBF99CA252ADB3647BFF55555555555564015555555555554C01800000000000 1BFA6C16C16C16C1BBFF55555555555564015555555555554C015555555555556BFAF1 9690E085806BFF55555555555564015555555555554C012AAAAAAAAAAABBFB2F684BDA 12F6DBFF55555555555564015555555555554C010000000000000BFB59E26AF37C04EB FF55555555555564015555555555554C00AAAAAAAAAAAABBFB7839A5BC7DEA5BFF5555 5555555564015555555555554C005555555555556BFB8A6DFC3518A73BFF5555555555 5564015555555555554C000000000000001BFB907F6E5D4C3B8BFF5555555555556401 5555555555554BFF5555555555558BFB8A6DFC3518A73BFF5555555555556401555555 5555554BFE555555555555BBFB7839A5BC7DEA6BFF5555555555556401555555555555 4BCC8000000000000BFB59E26AF37C04FBFF555555555555640155555555555543FE55 5555555554FBFB2F684BDA12F6FBFF555555555555640155555555555543FF55555555 55552BFAF19690E08580ABFF555555555555640155555555555543FFFFFFFFFFFFFFCB FA6C16C16C16C24BFF555555555555640155555555555544005555555555553BF99CA2 52ADB365ABFF55555555555564015555555555554400AAAAAAAAAAAA8BF6845C8A0CE5 21FBFF55555555555564015555555555554400FFFFFFFFFFFFD3F96C16C16C16BF5BFF 555555555555640155555555555544012AAAAAAAAAAA93FA9CA252ADB362ABFF555555 5555556401555555555555440155555555555543FB4DBF86A314DB7BFF555555555555 640155555555555544017FFFFFFFFFFFF3FBD950C83FB72E2BFF555555555555640155 55555555554401AAAAAAAAAAAAA3FC388277166054CBFF555555555555640155555555 55554401D5555555555553FC8A6DFC3518A6BBFF555555555555640155555555555544 0200000000000003FCE26AF37C048D0BFF555555555555640155555555555544021555 5555555553FD203CAE759203BBFF555555555555640155555555555544022AAAAAAAAA AAA3FD524C9C413B8B0BFF555555555555640155555555555544023FFFFFFFFFFFF3FD 87654320FEDC9BFF55555555555564017FFFFFFFFFFFFC0240000000000003FC555555 5555553BFF55555555555564017FFFFFFFFFFFFC022AAAAAAAAAAAB3FC0F8CB487042C 0BFF55555555555564017FFFFFFFFFFFFC0215555555555563FB9FAB0BC1CD2DEBFF55 555555555564017FFFFFFFFFFFFC0200000000000013FB2C5F92C5F92C7BFF55555555 555564017FFFFFFFFFFFFC01D5555555555573FA8A6DFC3518A6DBFF55555555555564 017FFFFFFFFFFFFC01AAAAAAAAAAAAC3F9A8C536FE1A8BDBFF55555555555564017FFF FFFFFFFFFC0180000000000013F7B4E81B4E81B35BFF55555555555564017FFFFFFFFF FFFC015555555555556BF83B8B302A7A207BFF55555555555564017FFFFFFFFFFFFC01 2AAAAAAAAAAABBF97839A5BC7DEACBFF55555555555564017FFFFFFFFFFFFC01000000 0000000BFA1111111111119BFF55555555555564017FFFFFFFFFFFFC00AAAAAAAAAAAA BBFA4DBF86A314DC7BFF55555555555564017FFFFFFFFFFFFC005555555555556BFA72 2833944A562BFF55555555555564017FFFFFFFFFFFFC000000000000001BFA7E4B17E4 B17ECBFF55555555555564017FFFFFFFFFFFFBFF5555555555558BFA722833944A564B FF55555555555564017FFFFFFFFFFFFBFE555555555555BBFA4DBF86A314DC8BFF5555 5555555564017FFFFFFFFFFFFBCC8000000000000BFA111111111111ABFF5555555555 5564017FFFFFFFFFFFF3FE555555555554FBF97839A5BC7DEB3BFF5555555555556401 7FFFFFFFFFFFF3FF5555555555552BF83B8B302A7A21ABFF55555555555564017FFFFF FFFFFFF3FFFFFFFFFFFFFFC3F7B4E81B4E81AF6BFF55555555555564017FFFFFFFFFFF F40055555555555533F9A8C536FE1A8ADBFF55555555555564017FFFFFFFFFFFF400AA AAAAAAAAAA83FA8A6DFC3518A61BFF55555555555564017FFFFFFFFFFFF400FFFFFFFF FFFFD3FB2C5F92C5F92BFBFF55555555555564017FFFFFFFFFFFF4012AAAAAAAAAAA93 FB9FAB0BC1CD2D6BFF55555555555564017FFFFFFFFFFFF40155555555555543FC0F8C B487042BCBFF55555555555564017FFFFFFFFFFFF4017FFFFFFFFFFFF3FC5555555555 552BFF55555555555564017FFFFFFFFFFFF401AAAAAAAAAAAAA3FCA12F684BDA12DBFF 55555555555564017FFFFFFFFFFFF401D5555555555553FCF31AED6A9264CBFF555555 55555564017FFFFFFFFFFFF40200000000000003FD258BF258BF258BFF555555555555 64017FFFFFFFFFFFF40215555555555553FD549327104EE2BBFF55555555555564017F FFFFFFFFFFF4022AAAAAAAAAAAA3FD86A314DBF86A1BFF55555555555564017FFFFFFF FFFFF4023FFFFFFFFFFFF3FDBBBBBBBBBBBB9BFF5555555555556401AAAAAAAAAAAAAC 0240000000000003FCC71C71C71C71CBFF5555555555556401AAAAAAAAAAAAAC022AAA AAAAAAAAB3FC8153D0F8CB489BFF5555555555556401AAAAAAAAAAAAAC021555555555 5563FC419CA252ADB37BFF5555555555556401AAAAAAAAAAAAAC0200000000000013FC 07F6E5D4C3B2CBFF5555555555556401AAAAAAAAAAAAAC01D5555555555573FBA8C536 FE1A8C7BFF5555555555556401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FB4DBF86A314DC 0BFF5555555555556401AAAAAAAAAAAAAC0180000000000013FAFDB97530ECA89BFF55 55555555556401AAAAAAAAAAAAAC0155555555555563FA7839A5BC7DE9EBFF55555555 55556401AAAAAAAAAAAAAC012AAAAAAAAAAAB3FA0AFF9EE8DD7CBBFF55555555555564 01AAAAAAAAAAAAAC0100000000000003F96C16C16C16C10BFF5555555555556401AAAA AAAAAAAAAC00AAAAAAAAAAAAB3F8E573AC901E567BFF5555555555556401AAAAAAAAAA AAAC0055555555555563F853D0F8CB486F6BFF5555555555556401AAAAAAAAAAAAAC00 00000000000013F823456789ABCD1BFF5555555555556401AAAAAAAAAAAAABFF555555 55555583F853D0F8CB486F5BFF5555555555556401AAAAAAAAAAAAABFE555555555555 B3F8E573AC901E563BFF5555555555556401AAAAAAAAAAAAABCC80000000000003F96C 16C16C16C0DBFF5555555555556401AAAAAAAAAAAAA3FE555555555554F3FA0AFF9EE8 DD7C7BFF5555555555556401AAAAAAAAAAAAA3FF55555555555523FA7839A5BC7DE9AB FF5555555555556401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3FAFDB97530ECA80BFF5555 555555556401AAAAAAAAAAAAA40055555555555533FB4DBF86A314DBCBFF5555555555 556401AAAAAAAAAAAAA400AAAAAAAAAAAA83FBA8C536FE1A8C1BFF5555555555556401 AAAAAAAAAAAAA400FFFFFFFFFFFFD3FC07F6E5D4C3B27BFF5555555555556401AAAAAA AAAAAAA4012AAAAAAAAAAA93FC419CA252ADB33BFF5555555555556401AAAAAAAAAAAA A40155555555555543FC8153D0F8CB484BFF5555555555556401AAAAAAAAAAAAA4017F FFFFFFFFFFF3FCC71C71C71C71ABFF5555555555556401AAAAAAAAAAAAA401AAAAAAAA AAAAA3FD097B425ED097BBFF5555555555556401AAAAAAAAAAAAA401D5555555555553 FD327104EE2CC0ABFF5555555555556401AAAAAAAAAAAAA40200000000000003FD5E6F 8091A2B3CBFF5555555555556401AAAAAAAAAAAAA40215555555555553FD8D76B54932 70FBFF5555555555556401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FDBF86A314DBF85BFF 5555555555556401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FDF49F49F49F49EBFF555555 5555556401D555555555555C0240000000000003FD20FEDCBA98765BFF555555555555 6401D555555555555C022AAAAAAAAAAAB3FCFC3518A6DFC37BFF5555555555556401D5 55555555555C0215555555555563FCBC7DEA00C22E6BFF5555555555556401D5555555 55555C0200000000000013FC82D82D82D82DBBFF5555555555556401D555555555555C 01D5555555555573FC4F43E32D21C12BFF5555555555556401D555555555555C01AAAA AAAAAAAAC3FC21C10AFF9EE8EBFF5555555555556401D555555555555C018000000000 0013FBF49F49F49F4A1BFF5555555555556401D555555555555C0155555555555563FB B1DF623A67EACBFF5555555555556401D555555555555C012AAAAAAAAAAAB3FB7B425E D097B42BFF5555555555556401D555555555555C0100000000000003FB50C83FB72EA6 1BFF5555555555556401D555555555555C00AAAAAAAAAAAAB3FB327104EE2CC0ABFF55 55555555556401D555555555555C0055555555555563FB203CAE759203CBFF55555555 55556401D555555555555C0000000000000013FB1A2B3C4D5E6F7BFF55555555555564 01D555555555555BFF55555555555583FB203CAE759203CBFF5555555555556401D555 555555555BFE555555555555B3FB327104EE2CC09BFF5555555555556401D555555555 555BCC80000000000003FB50C83FB72EA60BFF5555555555556401D5555555555553FE 555555555554F3FB7B425ED097B40BFF5555555555556401D5555555555553FF555555 55555523FBB1DF623A67EAABFF5555555555556401D5555555555553FFFFFFFFFFFFFF C3FBF49F49F49F49DBFF5555555555556401D55555555555540055555555555533FC21 C10AFF9EE8DBFF5555555555556401D555555555555400AAAAAAAAAAAA83FC4F43E32D 21C0FBFF5555555555556401D555555555555400FFFFFFFFFFFFD3FC82D82D82D82D6B FF5555555555556401D5555555555554012AAAAAAAAAAA93FCBC7DEA00C22E1BFF5555 555555556401D55555555555540155555555555543FCFC3518A6DFC33BFF5555555555 556401D5555555555554017FFFFFFFFFFFF3FD20FEDCBA98764BFF5555555555556401 D555555555555401AAAAAAAAAAAAA3FD46EBE635DAD52BFF5555555555556401D55555 5555555401D5555555555553FD6FE1A8C536FE1BFF5555555555556401D55555555555 540200000000000003FD9BE02468ACF14BFF5555555555556401D55555555555540215 555555555553FDCAE759203CAE7BFF5555555555556401D5555555555554022AAAAAAA AAAAA3FDFCF746EBE635CBFF5555555555556401D5555555555554023FFFFFFFFFFFF3 FE1907F6E5D4C3ABFF55555555555564020000000000000C0240000000000003FD62FC 962FC9631BFF55555555555564020000000000000C022AAAAAAAAAAAB3FD401845C8A0 CE7BFF55555555555564020000000000000C0215555555555563FD203CAE759203EBFF 55555555555564020000000000000C0200000000000013FD0369D0369D039BFF555555 55555564020000000000000C01D5555555555573FCD33F5617839A9BFF555555555555 64020000000000000C01AAAAAAAAAAAAC3FCA5BC7DEA00C25BFF555555555555640200 00000000000C0180000000000013FC7E4B17E4B17E7BFF555555555555640200000000 00000C0155555555555563FC5CEB240795CEDBFF55555555555564020000000000000C 012AAAAAAAAAAAB3FC419CA252ADB38BFF55555555555564020000000000000C010000 0000000003FC2C5F92C5F92C7BFF55555555555564020000000000000C00AAAAAAAAAA AAB3FC1D33F5617839BBFF55555555555564020000000000000C0055555555555563FC 1419CA252ADB4BFF55555555555564020000000000000C0000000000000013FC111111 1111112BFF55555555555564020000000000000BFF55555555555583FC1419CA252ADB 5BFF55555555555564020000000000000BFE555555555555B3FC1D33F5617839BBFF55 555555555564020000000000000BCC80000000000003FC2C5F92C5F92C7BFF55555555 5555640200000000000003FE555555555554F3FC419CA252ADB37BFF55555555555564 0200000000000003FF55555555555523FC5CEB240795CECBFF55555555555564020000 0000000003FFFFFFFFFFFFFFC3FC7E4B17E4B17E5BFF55555555555564020000000000 00040055555555555533FCA5BC7DEA00C23BFF55555555555564020000000000000400 AAAAAAAAAAAA83FCD33F5617839A5BFF55555555555564020000000000000400FFFFFF FFFFFFD3FD0369D0369D036BFF555555555555640200000000000004012AAAAAAAAAAA 93FD203CAE759203CBFF5555555555556402000000000000040155555555555543FD40 1845C8A0CE5BFF555555555555640200000000000004017FFFFFFFFFFFF3FD62FC962F C962FBFF55555555555564020000000000000401AAAAAAAAAAAAA3FD88E99FAB0BC1DB FF55555555555564020000000000000401D5555555555553FDB1DF623A67EACBFF5555 555555556402000000000000040200000000000003FDDDDDDDDDDDDDEBFF5555555555 556402000000000000040215555555555553FE0672894AB6CD9BFF5555555555556402 00000000000004022AAAAAAAAAAAA3FE1F7A80308B914BFF5555555555556402000000 00000004023FFFFFFFFFFFF3FE3A06D3A06D3A0BFF5555555555556402155555555555 5C0240000000000003FDA987654320FEDBFF55555555555564021555555555555C022A AAAAAAAAAAB3FD86A314DBF86A3BFF55555555555564021555555555555C0215555555 555563FD66C77D88E99FBBFF55555555555564021555555555555C0200000000000013 FD49F49F49F49F5BFF55555555555564021555555555555C01D5555555555573FD302A 7A1F19691BFF55555555555564021555555555555C01AAAAAAAAAAAAC3FD19690E0857 FCFBFF55555555555564021555555555555C0180000000000013FD05B05B05B05B0BFF 55555555555564021555555555555C0155555555555563FCEA00C22E45066BFF555555 55555564021555555555555C012AAAAAAAAAAAB3FCCEB240795CEB1BFF555555555555 64021555555555555C0100000000000003FCB97530ECA8640BFF555555555555640215 55555555555C00AAAAAAAAAAAAB3FCAA49938827714BFF555555555555640215555555 55555C0055555555555563FCA12F684BDA12DBFF55555555555564021555555555555C 0000000000000013FC9E26AF37C048BBFF55555555555564021555555555555BFF5555 5555555583FCA12F684BDA12EBFF55555555555564021555555555555BFE5555555555 55B3FCAA49938827714BFF55555555555564021555555555555BCC80000000000003FC B97530ECA8640BFF555555555555640215555555555553FE555555555554F3FCCEB240 795CEB0BFF555555555555640215555555555553FF55555555555523FCEA00C22E4506 5BFF555555555555640215555555555553FFFFFFFFFFFFFFC3FD05B05B05B05AFBFF55 55555555556402155555555555540055555555555533FD19690E0857FCEBFF55555555 555564021555555555555400AAAAAAAAAAAA83FD302A7A1F19690BFF55555555555564 021555555555555400FFFFFFFFFFFFD3FD49F49F49F49F3BFF55555555555564021555 5555555554012AAAAAAAAAAA93FD66C77D88E99F8BFF55555555555564021555555555 55540155555555555543FD86A314DBF86A2BFF55555555555564021555555555555401 7FFFFFFFFFFFF3FDA987654320FECBFF55555555555564021555555555555401AAAAAA AAAAAAA3FDCF746EBE635DABFF55555555555564021555555555555401D55555555555 53FDF86A314DBF869BFF5555555555556402155555555555540200000000000003FE12 3456789ABCEBFF5555555555556402155555555555540215555555555553FE29B7F0D4 629B7BFF555555555555640215555555555554022AAAAAAAAAAAA3FE42BFE7BA375F2B FF555555555555640215555555555554023FFFFFFFFFFFF3FE5D4C3B2A1907EBFF5555 5555555564022AAAAAAAAAAAAC0240000000000003FDF49F49F49F49DBFF5555555555 5564022AAAAAAAAAAAAC022AAAAAAAAAAAB3FDD1BAF98D76B53BFF5555555555556402 2AAAAAAAAAAAAC0215555555555563FDB1DF623A67EABBFF55555555555564022AAAAA AAAAAAAC0200000000000013FD950C83FB72EA5BFF55555555555564022AAAAAAAAAAA AC01D5555555555573FD7B425ED097B41BFF55555555555564022AAAAAAAAAAAAC01AA AAAAAAAAAAC3FD6480F2B9D647FBFF55555555555564022AAAAAAAAAAAAC0180000000 000013FD50C83FB72EA60BFF55555555555564022AAAAAAAAAAAAC0155555555555563 FD401845C8A0CE3BFF55555555555564022AAAAAAAAAAAAC012AAAAAAAAAAAB3FD3271 04EE2CC08BFF55555555555564022AAAAAAAAAAAAC0100000000000003FD27D27D27D2 7D0BFF55555555555564022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FD203CAE759203ABFF 55555555555564022AAAAAAAAAAAAC0055555555555563FD1BAF98D76B547BFF555555 55555564022AAAAAAAAAAAAC0000000000000013FD1A2B3C4D5E6F6BFF555555555555 64022AAAAAAAAAAAABFF55555555555583FD1BAF98D76B547BFF55555555555564022A AAAAAAAAAAABFE555555555555B3FD203CAE759203ABFF55555555555564022AAAAAAA AAAAABCC80000000000003FD27D27D27D27D0BFF55555555555564022AAAAAAAAAAAA3 FE555555555554F3FD327104EE2CC08BFF55555555555564022AAAAAAAAAAAA3FF5555 5555555523FD401845C8A0CE3BFF55555555555564022AAAAAAAAAAAA3FFFFFFFFFFFF FFC3FD50C83FB72EA5FBFF55555555555564022AAAAAAAAAAAA40055555555555533FD 6480F2B9D647EBFF55555555555564022AAAAAAAAAAAA400AAAAAAAAAAAA83FD7B425E D097B40BFF55555555555564022AAAAAAAAAAAA400FFFFFFFFFFFFD3FD950C83FB72EA 3BFF55555555555564022AAAAAAAAAAAA4012AAAAAAAAAAA93FDB1DF623A67EA8BFF55 555555555564022AAAAAAAAAAAA40155555555555543FDD1BAF98D76B52BFF55555555 555564022AAAAAAAAAAAA4017FFFFFFFFFFFF3FDF49F49F49F49CBFF55555555555564 022AAAAAAAAAAAA401AAAAAAAAAAAAA3FE0D4629B7F0D45BFF55555555555564022AAA AAAAAAAAA401D5555555555553FE21C10AFF9EE8DBFF55555555555564022AAAAAAAAA AAA40200000000000003FE37C048D159E26BFF55555555555564022AAAAAAAAAAAA402 15555555555553FE4F43E32D21C0FBFF55555555555564022AAAAAAAAAAAA4022AAAAA AAAAAAA3FE684BDA12F684ABFF55555555555564022AAAAAAAAAAAA4023FFFFFFFFFFF F3FE82D82D82D82D6BFF55555555555564023FFFFFFFFFFFFC0240000000000003FE22 22222222221BFF55555555555564023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE10AFF9EE 8DD7CBFF55555555555564023FFFFFFFFFFFFC0215555555555563FE00C22E4506728B FF55555555555564023FFFFFFFFFFFFC0200000000000013FDE4B17E4B17E4ABFF5555 5555555564023FFFFFFFFFFFFC01D5555555555573FDCAE759203CAE6BFF5555555555 5564023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FDB425ED097B424BFF5555555555556402 3FFFFFFFFFFFFC0180000000000013FDA06D3A06D3A05BFF55555555555564023FFFFF FFFFFFFC0155555555555563FD8FBD401845C88BFF55555555555564023FFFFFFFFFFF FC012AAAAAAAAAAAB3FD8215FF3DD1BADBFF55555555555564023FFFFFFFFFFFFC0100 000000000003FD7777777777775BFF55555555555564023FFFFFFFFFFFFC00AAAAAAAA AAAAB3FD6FE1A8C536FDFBFF55555555555564023FFFFFFFFFFFFC0055555555555563 FD6B549327104ECBFF55555555555564023FFFFFFFFFFFFC0000000000000013FD69D0 369D0369BBFF55555555555564023FFFFFFFFFFFFBFF55555555555583FD6B54932710 4ECBFF55555555555564023FFFFFFFFFFFFBFE555555555555B3FD6FE1A8C536FDFBFF 55555555555564023FFFFFFFFFFFFBCC80000000000003FD7777777777775BFF555555 55555564023FFFFFFFFFFFF3FE555555555554F3FD8215FF3DD1BADBFF555555555555 64023FFFFFFFFFFFF3FF55555555555523FD8FBD401845C88BFF55555555555564023F FFFFFFFFFFF3FFFFFFFFFFFFFFC3FDA06D3A06D3A04BFF55555555555564023FFFFFFF FFFFF40055555555555533FDB425ED097B423BFF55555555555564023FFFFFFFFFFFF4 00AAAAAAAAAAAA83FDCAE759203CAE5BFF55555555555564023FFFFFFFFFFFF400FFFF FFFFFFFFD3FDE4B17E4B17E48BFF55555555555564023FFFFFFFFFFFF4012AAAAAAAAA AA93FE00C22E4506727BFF55555555555564023FFFFFFFFFFFF40155555555555543FE 10AFF9EE8DD7BBFF55555555555564023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE222222 2222221BFF55555555555564023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE3518A6DFC351 7BFF55555555555564023FFFFFFFFFFFF401D5555555555553FE499388277165FBFF55 555555555564023FFFFFFFFFFFF40200000000000003FE5F92C5F92C5F8BFF55555555 555564023FFFFFFFFFFFF40215555555555553FE77166054F43E2BFF55555555555564 023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE901E573AC901CBFF55555555555564023FFF FFFFFFFFF4023FFFFFFFFFFFF3FEAAAAAAAAAAAA9BFF2AAAAAAAAAAABC024000000000 000C0240000000000003FC3333333333336BFF2AAAAAAAAAAABC024000000000000C02 2AAAAAAAAAAAB3FBDAD524C9C4146BFF2AAAAAAAAAAABC024000000000000C02155555 55555563FB5B66C77D88EA2BFF2AAAAAAAAAAABC024000000000000C02000000000000 13FAD0369D0369D1ABFF2AAAAAAAAAAABC024000000000000C01D5555555555573FA01 E573AC901F9BFF2AAAAAAAAAAABC024000000000000C01AAAAAAAAAAAAC3F82F684BDA 12FA2BFF2AAAAAAAAAAABC024000000000000C018000000000001BF847AE147AE143EB FF2AAAAAAAAAAABC024000000000000C015555555555556BF9AED6A9264E1F0BFF2AAA AAAAAAAABC024000000000000C012AAAAAAAAAAABBFA44A55B66C77CCBFF2AAAAAAAAA AABC024000000000000C010000000000000BFA999999999998DBFF2AAAAAAAAAAABC02 4000000000000C00AAAAAAAAAAAABBFAD6480F2B9D63DBFF2AAAAAAAAAAABC02400000 0000000C005555555555556BFAFAB0BC1CD2DD8BFF2AAAAAAAAAAABC02400000000000 0C000000000000001BFB0369D0369D031BFF2AAAAAAAAAAABC024000000000000BFF55 55555555558BFAFAB0BC1CD2DD8BFF2AAAAAAAAAAABC024000000000000BFE55555555 5555BBFAD6480F2B9D63DBFF2AAAAAAAAAAABC024000000000000BCC8000000000000B FA999999999998FBFF2AAAAAAAAAAABC0240000000000003FE555555555554FBFA44A5 5B66C77CFBFF2AAAAAAAAAAABC0240000000000003FF5555555555552BF9AED6A9264E 1F7BFF2AAAAAAAAAAABC0240000000000003FFFFFFFFFFFFFFCBF847AE147AE1458BFF 2AAAAAAAAAAABC02400000000000040055555555555533F82F684BDA12F86BFF2AAAAA AAAAAABC024000000000000400AAAAAAAAAAAA83FA01E573AC901ECBFF2AAAAAAAAAAA BC024000000000000400FFFFFFFFFFFFD3FAD0369D0369D08BFF2AAAAAAAAAAABC0240 000000000004012AAAAAAAAAAA93FB5B66C77D88E9CBFF2AAAAAAAAAAABC0240000000 0000040155555555555543FBDAD524C9C413EBFF2AAAAAAAAAAABC0240000000000004 017FFFFFFFFFFFF3FC3333333333334BFF2AAAAAAAAAAABC024000000000000401AAAA AAAAAAAAA3FC7F0D4629B7F0FBFF2AAAAAAAAAAABC024000000000000401D555555555 5553FCD0F8CB487042FBFF2AAAAAAAAAAABC02400000000000040200000000000003FD 147AE147AE14ABFF2AAAAAAAAAAABC02400000000000040215555555555553FD438215 FF3DD1DBFF2AAAAAAAAAAABC0240000000000004022AAAAAAAAAAAA3FD759203CAE759 2BFF2AAAAAAAAAAABC0240000000000004023FFFFFFFFFFFF3FDAAAAAAAAAAAABBFF2A AAAAAAAAAABC022AAAAAAAAAAABC0240000000000003FB950C83FB72EB1BFF2AAAAAAA AAAABC022AAAAAAAAAAABC022AAAAAAAAAAAB3FB097B425ED098ABFF2AAAAAAAAAAABC 022AAAAAAAAAAABC0215555555555563FA1419CA252ADCDBFF2AAAAAAAAAAABC022AAA AAAAAAAABC0200000000000013F76C16C16C16D0DBFF2AAAAAAAAAAABC022AAAAAAAAA AABC01D555555555557BF9419CA252ADAFFBFF2AAAAAAAAAAABC022AAAAAAAAAAABC01 AAAAAAAAAAAACBFA56D9B1DF6238FBFF2AAAAAAAAAAABC022AAAAAAAAAAABC01800000 0000001BFAF49F49F49F487BFF2AAAAAAAAAAABC022AAAAAAAAAAABC01555555555555 6BFB3D0F8CB487037BFF2AAAAAAAAAAABC022AAAAAAAAAAABC012AAAAAAAAAAABBFB73 AC901E573A1BFF2AAAAAAAAAAABC022AAAAAAAAAAABC010000000000000BFB9E26AF37 C0482BFF2AAAAAAAAAAABC022AAAAAAAAAAABC00AAAAAAAAAAAABBFBBC7DEA00C22D9B FF2AAAAAAAAAAABC022AAAAAAAAAAABC005555555555556BFBCEB240795CEA7BFF2AAA AAAAAAAABC022AAAAAAAAAAABC000000000000001BFBD4C3B2A1907EEBFF2AAAAAAAAA AABC022AAAAAAAAAAABBFF5555555555558BFBCEB240795CEA8BFF2AAAAAAAAAAABC02 2AAAAAAAAAAABBFE555555555555BBFBBC7DEA00C22DBBFF2AAAAAAAAAAABC022AAAAA AAAAAABBCC8000000000000BFB9E26AF37C0484BFF2AAAAAAAAAAABC022AAAAAAAAAAA B3FE555555555554FBFB73AC901E573A4BFF2AAAAAAAAAAABC022AAAAAAAAAAAB3FF55 55555555552BFB3D0F8CB48703ABFF2AAAAAAAAAAABC022AAAAAAAAAAAB3FFFFFFFFFF FFFFCBFAF49F49F49F48EBFF2AAAAAAAAAAABC022AAAAAAAAAAAB4005555555555553B FA56D9B1DF62396BFF2AAAAAAAAAAABC022AAAAAAAAAAAB400AAAAAAAAAAAA8BF9419C A252ADB18BFF2AAAAAAAAAAABC022AAAAAAAAAAAB400FFFFFFFFFFFFD3F76C16C16C16 C7FBFF2AAAAAAAAAAABC022AAAAAAAAAAAB4012AAAAAAAAAAA93FA1419CA252ADC0BFF 2AAAAAAAAAAABC022AAAAAAAAAAAB40155555555555543FB097B425ED0982BFF2AAAAA AAAAAABC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FB950C83FB72EADBFF2AAAAAAAAAAA BC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FC166054F43E331BFF2AAAAAAAAAAABC022A AAAAAAAAAAB401D5555555555553FC684BDA12F6851BFF2AAAAAAAAAAABC022AAAAAAA AAAAB40200000000000003FCC048D159E26B5BFF2AAAAAAAAAAABC022AAAAAAAAAAAB4 0215555555555553FD0F2B9D6480F2EBFF2AAAAAAAAAAABC022AAAAAAAAAAAB4022AAA AAAAAAAAA3FD413B8B302A7A3BFF2AAAAAAAAAAABC022AAAAAAAAAAAB4023FFFFFFFFF FFF3FD7654320FEDCBCBFF2AAAAAAAAAAABC021555555555556C0240000000000003FA ABCDF01234576BFF2AAAAAAAAAAABC021555555555556C022AAAAAAAAAAAB3F92956D9 B1DF650BFF2AAAAAAAAAAABC021555555555556C021555555555556BF8A8C536FE1A86 CBFF2AAAAAAAAAAABC021555555555556C020000000000001BFA50C83FB72EA46BFF2A AAAAAAAAAABC021555555555556C01D555555555557BFB0F8CB487042B4BFF2AAAAAAA AAAABC021555555555556C01AAAAAAAAAAAACBFB6A9264E209DBCBFF2AAAAAAAAAAABC 021555555555556C018000000000001BFBB97530ECA8638BFF2AAAAAAAAAAABC021555 555555556C015555555555556BFBFC3518A6DFC2DBFF2AAAAAAAAAAABC021555555555 556C012AAAAAAAAAAABBFC19690E0857FCBBFF2AAAAAAAAAAABC021555555555556C01 0000000000000BFC2EA61D950C83CBFF2AAAAAAAAAAABC021555555555556C00AAAAAA AAAAAABBFC3DD1BAF98D768BFF2AAAAAAAAAAABC021555555555556C00555555555555 6BFC46EBE635DAD4FBFF2AAAAAAAAAAABC021555555555556C000000000000001BFC49 F49F49F49F1BFF2AAAAAAAAAAABC021555555555556BFF5555555555558BFC46EBE635 DAD4EBFF2AAAAAAAAAAABC021555555555556BFE555555555555BBFC3DD1BAF98D768B FF2AAAAAAAAAAABC021555555555556BCC8000000000000BFC2EA61D950C83CBFF2AAA AAAAAAAABC0215555555555563FE555555555554FBFC19690E0857FCCBFF2AAAAAAAAA AABC0215555555555563FF5555555555552BFBFC3518A6DFC2EBFF2AAAAAAAAAAABC02 15555555555563FFFFFFFFFFFFFFCBFBB97530ECA863CBFF2AAAAAAAAAAABC02155555 55555564005555555555553BFB6A9264E209DC0BFF2AAAAAAAAAAABC02155555555555 6400AAAAAAAAAAAA8BFB0F8CB487042BBBFF2AAAAAAAAAAABC021555555555556400FF FFFFFFFFFFDBFA50C83FB72EA5ABFF2AAAAAAAAAAABC0215555555555564012AAAAAAA AAAA9BF8A8C536FE1A8AABFF2AAAAAAAAAAABC02155555555555640155555555555543 F92956D9B1DF633BFF2AAAAAAAAAAABC0215555555555564017FFFFFFFFFFFF3FAABCD F0123456FBFF2AAAAAAAAAAABC021555555555556401AAAAAAAAAAAAA3FB6D9B1DF623 A6EBFF2AAAAAAAAAAABC021555555555556401D5555555555553FC08B91419CA256BFF 2AAAAAAAAAAABC02155555555555640200000000000003FC60B60B60B60BABFF2AAAAA AAAAAABC02155555555555640215555555555553FCBEC474CFD5861BFF2AAAAAAAAAAA BC0215555555555564022AAAAAAAAAAAA3FD11722833944A6BFF2AAAAAAAAAAABC0215 555555555564023FFFFFFFFFFFF3FD468ACF13579BEBFF2AAAAAAAAAAABC0200000000 00001C0240000000000003F847AE147AE14D7BFF2AAAAAAAAAAABC020000000000001C 022AAAAAAAAAAABBF98A6DFC3518A30BFF2AAAAAAAAAAABC020000000000001C021555 555555556BFAC413B8B302A63BFF2AAAAAAAAAAABC020000000000001C020000000000 001BFB5555555555547BFF2AAAAAAAAAAABC020000000000001C01D555555555557BFB BC7DEA00C22D8BFF2AAAAAAAAAAABC020000000000001C01AAAAAAAAAAAACBFC0BC1CD 2DE3EF0BFF2AAAAAAAAAAABC020000000000001C018000000000001BFC333333333332 EBFF2AAAAAAAAAAABC020000000000001C015555555555556BFC549327104EE26BFF2A AAAAAAAAAABC020000000000001C012AAAAAAAAAAABBFC6FE1A8C536FDBBFF2AAAAAAA AAAABC020000000000001C010000000000000BFC851EB851EB84DBFF2AAAAAAAAAAABC 020000000000001C00AAAAAAAAAAAABBFC944A55B66C779BFF2AAAAAAAAAAABC020000 000000001C005555555555556BFC9D6480F2B9D60BFF2AAAAAAAAAAABC020000000000 001C000000000000001BFCA06D3A06D3A02BFF2AAAAAAAAAAABC020000000000001BFF 5555555555558BFC9D6480F2B9D5FBFF2AAAAAAAAAAABC020000000000001BFE555555 555555BBFC944A55B66C779BFF2AAAAAAAAAAABC020000000000001BCC800000000000 0BFC851EB851EB84DBFF2AAAAAAAAAAABC0200000000000013FE555555555554FBFC6F E1A8C536FDDBFF2AAAAAAAAAAABC0200000000000013FF5555555555552BFC54932710 4EE28BFF2AAAAAAAAAAABC0200000000000013FFFFFFFFFFFFFFCBFC333333333332FB FF2AAAAAAAAAAABC0200000000000014005555555555553BFC0BC1CD2DE3EF1BFF2AAA AAAAAAAABC020000000000001400AAAAAAAAAAAA8BFBBC7DEA00C22DDBFF2AAAAAAAAA AABC020000000000001400FFFFFFFFFFFFDBFB555555555554FBFF2AAAAAAAAAAABC02 00000000000014012AAAAAAAAAAA9BFAC413B8B302A6EBFF2AAAAAAAAAAABC02000000 00000014015555555555554BF98A6DFC3518A55BFF2AAAAAAAAAAABC02000000000000 14017FFFFFFFFFFFF3F847AE147AE14ACBFF2AAAAAAAAAAABC020000000000001401AA AAAAAAAAAAA3FA8153D0F8CB498BFF2AAAAAAAAAAABC020000000000001401D5555555 555553FB6480F2B9D648ABFF2AAAAAAAAAAABC02000000000000140200000000000003 FC0A3D70A3D70AABFF2AAAAAAAAAAABC02000000000000140215555555555553FC684B DA12F6850BFF2AAAAAAAAAAABC0200000000000014022AAAAAAAAAAAA3FCCC6BB5AA49 93BBFF2AAAAAAAAAAABC0200000000000014023FFFFFFFFFFFF3FD1B4E81B4E81B6BFF 2AAAAAAAAAAABC01D555555555557C024000000000000BF9C71C71C71C704BFF2AAAAA AAAAAABC01D555555555557C022AAAAAAAAAAABBFAFAB0BC1CD2DD0BFF2AAAAAAAAAAA BC01D555555555557C021555555555556BFB7CC6BB5AA498ABFF2AAAAAAAAAAABC01D5 55555555557C020000000000001BFBF01234567899FBFF2AAAAAAAAAAABC01D5555555 55557C01D555555555557BFC2B9D6480F2B98BFF2AAAAAAAAAAABC01D555555555557C 01AAAAAAAAAAAACBFC59203CAE7591CBFF2AAAAAAAAAAABC01D555555555557C018000 000000001BFC8091A2B3C4D5ABFF2AAAAAAAAAAABC01D555555555557C015555555555 556BFCA1F19690E0854BFF2AAAAAAAAAAABC01D555555555557C012AAAAAAAAAAABBFC BD401845C8A09BFF2AAAAAAAAAAABC01D555555555557C010000000000000BFCD27D27 D27D27ABFF2AAAAAAAAAAABC01D555555555557C00AAAAAAAAAAAABBFCE1A8C536FE1A 6BFF2AAAAAAAAAAABC01D555555555557C005555555555556BFCEAC2F0734B78DBFF2A AAAAAAAAAABC01D555555555557C000000000000001BFCEDCBA9876542FBFF2AAAAAAA AAAABC01D555555555557BFF5555555555558BFCEAC2F0734B78CBFF2AAAAAAAAAAABC 01D555555555557BFE555555555555BBFCE1A8C536FE1A6BFF2AAAAAAAAAAABC01D555 555555557BCC8000000000000BFCD27D27D27D27ABFF2AAAAAAAAAAABC01D555555555 5573FE555555555554FBFCBD401845C8A0ABFF2AAAAAAAAAAABC01D5555555555573FF 5555555555552BFCA1F19690E0855BFF2AAAAAAAAAAABC01D5555555555573FFFFFFFF FFFFFFCBFC8091A2B3C4D5CBFF2AAAAAAAAAAABC01D555555555557400555555555555 3BFC59203CAE7591EBFF2AAAAAAAAAAABC01D555555555557400AAAAAAAAAAAA8BFC2B 9D6480F2B9CBFF2AAAAAAAAAAABC01D555555555557400FFFFFFFFFFFFDBFBF0123456 789A9BFF2AAAAAAAAAAABC01D5555555555574012AAAAAAAAAAA9BFB7CC6BB5AA4991B FF2AAAAAAAAAAABC01D5555555555574015555555555554BFAFAB0BC1CD2DDEBFF2AAA AAAAAAAABC01D5555555555574017FFFFFFFFFFFFBF9C71C71C71C712BFF2AAAAAAAAA AABC01D555555555557401AAAAAAAAAAAAA3F82F684BDA12F8ABFF2AAAAAAAAAAABC01 D555555555557401D5555555555553FA938827716605FBFF2AAAAAAAAAAABC01D55555 555555740200000000000003FB79BE02468ACF9BFF2AAAAAAAAAAABC01D55555555555 740215555555555553FC1AED6A9264E23BFF2AAAAAAAAAAABC01D5555555555574022A AAAAAAAAAAA3FC7F0D4629B7F0EBFF2AAAAAAAAAAABC01D5555555555574023FFFFFFF FFFFF3FCE93E93E93E93FBFF2AAAAAAAAAAABC01AAAAAAAAAAAACC024000000000000B FAF49F49F49F49ABFF2AAAAAAAAAAABC01AAAAAAAAAAAACC022AAAAAAAAAAABBFB85E0 E696F1F74BFF2AAAAAAAAAAABC01AAAAAAAAAAAACC021555555555556BFC02A7A1F196 90BBFF2AAAAAAAAAAABC01AAAAAAAAAAAACC020000000000001BFC3C4D5E6F80916BFF 2AAAAAAAAAAABC01AAAAAAAAAAAACC01D555555555557BFC6FE1A8C536FDEBFF2AAAAA AAAAAABC01AAAAAAAAAAAACC01AAAAAAAAAAAACBFC9D6480F2B9D62BFF2AAAAAAAAAAA BC01AAAAAAAAAAAACC018000000000001BFCC4D5E6F8091A0BFF2AAAAAAAAAAABC01AA AAAAAAAAAACC015555555555556BFCE635DAD524C9ABFF2AAAAAAAAAAABC01AAAAAAAA AAAACC012AAAAAAAAAAABBFD00C22E4506728BFF2AAAAAAAAAAABC01AAAAAAAAAAAACC 010000000000000BFD0B60B60B60B60BFF2AAAAAAAAAAABC01AAAAAAAAAAAACC00AAAA AAAAAAAABBFD12F684BDA12F6BFF2AAAAAAAAAAABC01AAAAAAAAAAAACC005555555555 556BFD17839A5BC7DE9BFF2AAAAAAAAAAABC01AAAAAAAAAAAACC000000000000001BFD 1907F6E5D4C3ABFF2AAAAAAAAAAABC01AAAAAAAAAAAACBFF5555555555558BFD17839A 5BC7DE9BFF2AAAAAAAAAAABC01AAAAAAAAAAAACBFE555555555555BBFD12F684BDA12F 6BFF2AAAAAAAAAAABC01AAAAAAAAAAAACBCC8000000000000BFD0B60B60B60B60BFF2A AAAAAAAAAABC01AAAAAAAAAAAAC3FE555555555554FBFD00C22E4506728BFF2AAAAAAA AAAABC01AAAAAAAAAAAAC3FF5555555555552BFCE635DAD524C9BBFF2AAAAAAAAAAABC 01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFCC4D5E6F8091A2BFF2AAAAAAAAAAABC01AAAA AAAAAAAAC4005555555555553BFC9D6480F2B9D64BFF2AAAAAAAAAAABC01AAAAAAAAAA AAC400AAAAAAAAAAAA8BFC6FE1A8C536FE2BFF2AAAAAAAAAAABC01AAAAAAAAAAAAC400 FFFFFFFFFFFFDBFC3C4D5E6F8091BBFF2AAAAAAAAAAABC01AAAAAAAAAAAAC4012AAAAA AAAAAA9BFC02A7A1F19690FBFF2AAAAAAAAAAABC01AAAAAAAAAAAAC401555555555555 4BFB85E0E696F1F7BBFF2AAAAAAAAAAABC01AAAAAAAAAAAAC4017FFFFFFFFFFFFBFAF4 9F49F49F4A1BFF2AAAAAAAAAAABC01AAAAAAAAAAAAC401AAAAAAAAAAAAABF98A6DFC35 18A6BBFF2AAAAAAAAAAABC01AAAAAAAAAAAAC401D5555555555553F904EE2CC0A9E8EB FF2AAAAAAAAAAABC01AAAAAAAAAAAAC40200000000000003FAE26AF37C048DCBFF2AAA AAAAAAAABC01AAAAAAAAAAAAC40215555555555553FBAD524C9C413BABFF2AAAAAAAAA AABC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FC3AC901E573AC8BFF2AAAAAAAAAAABC01 AAAAAAAAAAAAC4023FFFFFFFFFFFF3FCA4FA4FA4FA4F9BFF2AAAAAAAAAAABC01800000 0000001C024000000000000BFB70A3D70A3D705BFF2AAAAAAAAAAABC01800000000000 1C022AAAAAAAAAAABBFBFC3518A6DFC2CBFF2AAAAAAAAAAABC018000000000001C0215 55555555556BFC3DD1BAF98D767BFF2AAAAAAAAAAABC018000000000001C0200000000 00001BFC7777777777772BFF2AAAAAAAAAAABC018000000000001C01D555555555557B FCAB0BC1CD2DE3ABFF2AAAAAAAAAAABC018000000000001C01AAAAAAAAAAAACBFCD88E 99FAB0BBEBFF2AAAAAAAAAAABC018000000000001C018000000000001BFCFFFFFFFFFF FFCBFF2AAAAAAAAAAABC018000000000001C015555555555556BFD10AFF9EE8DD7BBFF 2AAAAAAAAAAABC018000000000001C012AAAAAAAAAAABBFD1E573AC901E56BFF2AAAAA AAAAAABC018000000000001C010000000000000BFD28F5C28F5C28EBFF2AAAAAAAAAAA BC018000000000001C00AAAAAAAAAAAABBFD308B91419CA24BFF2AAAAAAAAAAABC0180 00000000001C005555555555556BFD3518A6DFC3517BFF2AAAAAAAAAAABC0180000000 00001C000000000000001BFD369D0369D0368BFF2AAAAAAAAAAABC018000000000001B FF5555555555558BFD3518A6DFC3517BFF2AAAAAAAAAAABC018000000000001BFE5555 55555555BBFD308B91419CA24BFF2AAAAAAAAAAABC018000000000001BCC8000000000 000BFD28F5C28F5C28EBFF2AAAAAAAAAAABC0180000000000013FE555555555554FBFD 1E573AC901E56BFF2AAAAAAAAAAABC0180000000000013FF5555555555552BFD10AFF9 EE8DD7BBFF2AAAAAAAAAAABC0180000000000013FFFFFFFFFFFFFFCBFCFFFFFFFFFFFF DBFF2AAAAAAAAAAABC0180000000000014005555555555553BFCD88E99FAB0BBFBFF2A AAAAAAAAAABC018000000000001400AAAAAAAAAAAA8BFCAB0BC1CD2DE3EBFF2AAAAAAA AAAABC018000000000001400FFFFFFFFFFFFDBFC7777777777777BFF2AAAAAAAAAAABC 0180000000000014012AAAAAAAAAAA9BFC3DD1BAF98D76BBFF2AAAAAAAAAAABC018000 0000000014015555555555554BFBFC3518A6DFC33BFF2AAAAAAAAAAABC018000000000 0014017FFFFFFFFFFFFBFB70A3D70A3D709BFF2AAAAAAAAAAABC018000000000001401 AAAAAAAAAAAAABFAB1DF623A67EA6BFF2AAAAAAAAAAABC018000000000001401D55555 5555555BF8A8C536FE1A8A4BFF2AAAAAAAAAAABC018000000000001402000000000000 03F9EB851EB851ED8BFF2AAAAAAAAAAABC01800000000000140215555555555553FB36 FE1A8C53702BFF2AAAAAAAAAAABC0180000000000014022AAAAAAAAAAAA3FBFF3DD1BA F98D8BFF2AAAAAAAAAAABC0180000000000014023FFFFFFFFFFFF3FC69D0369D0369DB FF2AAAAAAAAAAABC015555555555556C024000000000000BFBD4C3B2A1907F5BFF2AAA AAAAAAAABC015555555555556C022AAAAAAAAAAABBFC302A7A1F1968EBFF2AAAAAAAAA AABC015555555555556C021555555555556BFC6FE1A8C536FDFBFF2AAAAAAAAAAABC01 5555555555556C020000000000001BFCA987654320FEABFF2AAAAAAAAAAABC01555555 5555556C01D555555555557BFCDD1BAF98D76B2BFF2AAAAAAAAAAABC01555555555555 6C01AAAAAAAAAAAACBFD054F43E32D21BBFF2AAAAAAAAAAABC015555555555556C0180 00000000001BFD1907F6E5D4C3ABFF2AAAAAAAAAAABC015555555555556C0155555555 55556BFD29B7F0D4629B7BFF2AAAAAAAAAAABC015555555555556C012AAAAAAAAAAABB FD375F31AED6A92BFF2AAAAAAAAAAABC015555555555556C010000000000000BFD41FD B97530ECABFF2AAAAAAAAAAABC015555555555556C00AAAAAAAAAAAABBFD4993882771 660BFF2AAAAAAAAAAABC015555555555556C005555555555556BFD4E209DC598153BFF 2AAAAAAAAAAABC015555555555556C000000000000001BFD4FA4FA4FA4FA4BFF2AAAAA AAAAAABC015555555555556BFF5555555555558BFD4E209DC598153BFF2AAAAAAAAAAA BC015555555555556BFE555555555555BBFD4993882771660BFF2AAAAAAAAAAABC0155 55555555556BCC8000000000000BFD41FDB97530ECABFF2AAAAAAAAAAABC0155555555 555563FE555555555554FBFD375F31AED6A92BFF2AAAAAAAAAAABC0155555555555563 FF5555555555552BFD29B7F0D4629B7BFF2AAAAAAAAAAABC0155555555555563FFFFFF FFFFFFFFCBFD1907F6E5D4C3BBFF2AAAAAAAAAAABC0155555555555564005555555555 553BFD054F43E32D21CBFF2AAAAAAAAAAABC015555555555556400AAAAAAAAAAAA8BFC DD1BAF98D76B5BFF2AAAAAAAAAAABC015555555555556400FFFFFFFFFFFFDBFCA98765 4320FEEBFF2AAAAAAAAAAABC0155555555555564012AAAAAAAAAAA9BFC6FE1A8C536FE 4BFF2AAAAAAAAAAABC0155555555555564015555555555554BFC302A7A1F19692BFF2A AAAAAAAAAABC0155555555555564017FFFFFFFFFFFFBFBD4C3B2A1907F9BFF2AAAAAAA AAAABC015555555555556401AAAAAAAAAAAAABFB3D0F8CB487043BFF2AAAAAAAAAAABC 015555555555556401D555555555555BFA327104EE2CC09BFF2AAAAAAAAAAABC015555 55555555640200000000000003F76C16C16C16C60BFF2AAAAAAAAAAABC015555555555 55640215555555555553FAA5BC7DEA00C23BFF2AAAAAAAAAAABC015555555555556402 2AAAAAAAAAAAA3FB9B1DF623A67E8BFF2AAAAAAAAAAABC0155555555555564023FFFFF FFFFFFF3FC37C048D159E25BFF2AAAAAAAAAAABC012AAAAAAAAAAABC02400000000000 0BFC13579BE024689BFF2AAAAAAAAAAABC012AAAAAAAAAAABC022AAAAAAAAAAABBFC59 203CAE7591CBFF2AAAAAAAAAAABC012AAAAAAAAAAABC021555555555556BFC98D76B54 9326DBFF2AAAAAAAAAAABC012AAAAAAAAAAABC020000000000001BFCD27D27D27D278B FF2AAAAAAAAAAABC012AAAAAAAAAAABC01D555555555557BFD0308B91419CA0BFF2AAA AAAAAAAABC012AAAAAAAAAAABC01AAAAAAAAAAAACBFD19CA252ADB362BFF2AAAAAAAAA AABC012AAAAAAAAAAABC018000000000001BFD2D82D82D82D81BFF2AAAAAAAAAAABC01 2AAAAAAAAAAABC015555555555556BFD3E32D21C10AFEBFF2AAAAAAAAAAABC012AAAAA AAAAAABC012AAAAAAAAAAABBFD4BDA12F684BD9BFF2AAAAAAAAAAABC012AAAAAAAAAAA BC010000000000000BFD56789ABCDF011BFF2AAAAAAAAAAABC012AAAAAAAAAAABC00AA AAAAAAAAAABBFD5E0E696F1F7A7BFF2AAAAAAAAAAABC012AAAAAAAAAAABC0055555555 55556BFD629B7F0D4629ABFF2AAAAAAAAAAABC012AAAAAAAAAAABC000000000000001B FD641FDB97530EBBFF2AAAAAAAAAAABC012AAAAAAAAAAABBFF5555555555558BFD629B 7F0D4629ABFF2AAAAAAAAAAABC012AAAAAAAAAAABBFE555555555555BBFD5E0E696F1F 7A7BFF2AAAAAAAAAAABC012AAAAAAAAAAABBCC8000000000000BFD56789ABCDF011BFF 2AAAAAAAAAAABC012AAAAAAAAAAAB3FE555555555554FBFD4BDA12F684BD9BFF2AAAAA AAAAAABC012AAAAAAAAAAAB3FF5555555555552BFD3E32D21C10AFEBFF2AAAAAAAAAAA BC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD2D82D82D82D82BFF2AAAAAAAAAAABC012A AAAAAAAAAAB4005555555555553BFD19CA252ADB363BFF2AAAAAAAAAAABC012AAAAAAA AAAAB400AAAAAAAAAAAA8BFD0308B91419CA1BFF2AAAAAAAAAAABC012AAAAAAAAAAAB4 00FFFFFFFFFFFFDBFCD27D27D27D27CBFF2AAAAAAAAAAABC012AAAAAAAAAAAB4012AAA AAAAAAAA9BFC98D76B5493272BFF2AAAAAAAAAAABC012AAAAAAAAAAAB4015555555555 554BFC59203CAE7591FBFF2AAAAAAAAAAABC012AAAAAAAAAAAB4017FFFFFFFFFFFFBFC 13579BE024689BFF2AAAAAAAAAAABC012AAAAAAAAAAAB401AAAAAAAAAAAAABFB8EFB11 D33F55FBFF2AAAAAAAAAAABC012AAAAAAAAAAAB401D555555555555BFAD6480F2B9D64 1BFF2AAAAAAAAAAABC012AAAAAAAAAAAB4020000000000000BF8D950C83FB72B0BFF2A AAAAAAAAAABC012AAAAAAAAAAAB40215555555555553FA01E573AC901EBBFF2AAAAAAA AAAABC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FB49327104EE2CCBFF2AAAAAAAAAAABC 012AAAAAAAAAAAB4023FFFFFFFFFFFF3FC0ECA8641FDB97BFF2AAAAAAAAAAABC010000 000000000C024000000000000BFC3333333333333BFF2AAAAAAAAAAABC010000000000 000C022AAAAAAAAAAABBFC78FBD401845C6BFF2AAAAAAAAAAABC010000000000000C02 1555555555556BFCB8B302A7A1F17BFF2AAAAAAAAAAABC010000000000000C02000000 0000001BFCF258BF258BF22BFF2AAAAAAAAAAABC010000000000000C01D55555555555 7BFD12F684BDA12F5BFF2AAAAAAAAAAABC010000000000000C01AAAAAAAAAAAACBFD29 B7F0D4629B7BFF2AAAAAAAAAAABC010000000000000C018000000000001BFD3D70A3D7 0A3D6BFF2AAAAAAAAAAABC010000000000000C015555555555556BFD4E209DC598153B FF2AAAAAAAAAAABC010000000000000C012AAAAAAAAAAABBFD5BC7DEA00C22EBFF2AAA AAAAAAAABC010000000000000C010000000000000BFD6666666666666BFF2AAAAAAAAA AABC010000000000000C00AAAAAAAAAAAABBFD6DFC3518A6DFCBFF2AAAAAAAAAAABC01 0000000000000C005555555555556BFD72894AB6CD8EFBFF2AAAAAAAAAAABC01000000 0000000C000000000000001BFD740DA740DA740BFF2AAAAAAAAAAABC01000000000000 0BFF5555555555558BFD72894AB6CD8EFBFF2AAAAAAAAAAABC010000000000000BFE55 5555555555BBFD6DFC3518A6DFCBFF2AAAAAAAAAAABC010000000000000BCC80000000 00000BFD6666666666666BFF2AAAAAAAAAAABC0100000000000003FE555555555554FB FD5BC7DEA00C22EBFF2AAAAAAAAAAABC0100000000000003FF5555555555552BFD4E20 9DC598153BFF2AAAAAAAAAAABC0100000000000003FFFFFFFFFFFFFFCBFD3D70A3D70A 3D7BFF2AAAAAAAAAAABC0100000000000004005555555555553BFD29B7F0D4629B8BFF 2AAAAAAAAAAABC010000000000000400AAAAAAAAAAAA8BFD12F684BDA12F6BFF2AAAAA AAAAAABC010000000000000400FFFFFFFFFFFFDBFCF258BF258BF26BFF2AAAAAAAAAAA BC0100000000000004012AAAAAAAAAAA9BFCB8B302A7A1F1CBFF2AAAAAAAAAAABC0100 000000000004015555555555554BFC78FBD401845C9BFF2AAAAAAAAAAABC0100000000 000004017FFFFFFFFFFFFBFC3333333333333BFF2AAAAAAAAAAABC0100000000000004 01AAAAAAAAAAAAABFBCEB240795CEB1BFF2AAAAAAAAAAABC010000000000000401D555 555555555BFB2ADB363BEC473BFF2AAAAAAAAAAABC0100000000000004020000000000 000BF9EB851EB851EA8BFF2AAAAAAAAAAABC01000000000000040215555555555553F9 04EE2CC0A9E87BFF2AAAAAAAAAAABC0100000000000004022AAAAAAAAAAAA3FB097B42 5ED0978BFF2AAAAAAAAAAABC0100000000000004023FFFFFFFFFFFF3FBDDDDDDDDDDDD ABFF2AAAAAAAAAAABC00AAAAAAAAAAAABC024000000000000BFC49F49F49F49F3BFF2A AAAAAAAAAABC00AAAAAAAAAAAABC022AAAAAAAAAAABBFC8FBD401845C86BFF2AAAAAAA AAAABC00AAAAAAAAAAAABC021555555555556BFCCF746EBE635D7BFF2AAAAAAAAAAABC 00AAAAAAAAAAAABC020000000000001BFD048D159E26AF1BFF2AAAAAAAAAAABC00AAAA AAAAAAAABC01D555555555557BFD1E573AC901E55BFF2AAAAAAAAAAABC00AAAAAAAAAA AABC01AAAAAAAAAAAACBFD3518A6DFC3517BFF2AAAAAAAAAAABC00AAAAAAAAAAAABC01 8000000000001BFD48D159E26AF36BFF2AAAAAAAAAAABC00AAAAAAAAAAAABC01555555 5555556BFD598153D0F8CB3BFF2AAAAAAAAAAABC00AAAAAAAAAAAABC012AAAAAAAAAAA BBFD672894AB6CD8EBFF2AAAAAAAAAAABC00AAAAAAAAAAAABC010000000000000BFD71 C71C71C71C6BFF2AAAAAAAAAAABC00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD795CEB24 0795CBFF2AAAAAAAAAAABC00AAAAAAAAAAAABC005555555555556BFD7DEA00C22E44FB FF2AAAAAAAAAAABC00AAAAAAAAAAAABC000000000000001BFD7F6E5D4C3B2A0BFF2AAA AAAAAAAABC00AAAAAAAAAAAABBFF5555555555558BFD7DEA00C22E44FBFF2AAAAAAAAA AABC00AAAAAAAAAAAABBFE555555555555BBFD795CEB240795CBFF2AAAAAAAAAAABC00 AAAAAAAAAAAABBCC8000000000000BFD71C71C71C71C6BFF2AAAAAAAAAAABC00AAAAAA AAAAAAB3FE555555555554FBFD672894AB6CD8EBFF2AAAAAAAAAAABC00AAAAAAAAAAAA B3FF5555555555552BFD598153D0F8CB3BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB3FFFF FFFFFFFFFFCBFD48D159E26AF37BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB40055555555 55553BFD3518A6DFC3518BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB400AAAAAAAAAAAA8B FD1E573AC901E56BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFD048D 159E26AF3BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFCCF746EBE63 5DCBFF2AAAAAAAAAAABC00AAAAAAAAAAAAB4015555555555554BFC8FBD401845C89BFF 2AAAAAAAAAAABC00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFC49F49F49F49F3BFF2AAAAA AAAAAABC00AAAAAAAAAAAAB401AAAAAAAAAAAAABFBFC3518A6DFC31BFF2AAAAAAAAAAA BC00AAAAAAAAAAAAB401D555555555555BFB585E0E696F1F3BFF2AAAAAAAAAAABC00AA AAAAAAAAAAB4020000000000000BFA50C83FB72EA54BFF2AAAAAAAAAAABC00AAAAAAAA AAAAB40215555555555553F73B8B302A7A21BBFF2AAAAAAAAAAABC00AAAAAAAAAAAAB4 022AAAAAAAAAAAA3FAB7F0D4629B7F0BFF2AAAAAAAAAAABC00AAAAAAAAAAAAB4023FFF FFFFFFFFF3FBB05B05B05B05ABFF2AAAAAAAAAAABC005555555555556C024000000000 000BFC579BE02468ACDBFF2AAAAAAAAAAABC005555555555556C022AAAAAAAAAAABBFC 9D6480F2B9D62BFF2AAAAAAAAAAABC005555555555556C021555555555556BFCDD1BAF 98D76B3BFF2AAAAAAAAAAABC005555555555556C020000000000001BFD0B60B60B60B5 FBFF2AAAAAAAAAAABC005555555555556C01D555555555557BFD252ADB363BEC3BFF2A AAAAAAAAAABC005555555555556C01AAAAAAAAAAAACBFD3BEC474CFD585BFF2AAAAAAA AAAABC005555555555556C018000000000001BFD4FA4FA4FA4FA4BFF2AAAAAAAAAAABC 005555555555556C015555555555556BFD6054F43E32D21BFF2AAAAAAAAAAABC005555 555555556C012AAAAAAAAAAABBFD6DFC3518A6DFCBFF2AAAAAAAAAAABC005555555555 556C010000000000000BFD789ABCDF01234BFF2AAAAAAAAAAABC005555555555556C00 AAAAAAAAAAAABBFD80308B91419CABFF2AAAAAAAAAAABC005555555555556C00555555 5555556BFD84BDA12F684BDBFF2AAAAAAAAAAABC005555555555556C00000000000000 1BFD8641FDB97530EBFF2AAAAAAAAAAABC005555555555556BFF5555555555558BFD84 BDA12F684BDBFF2AAAAAAAAAAABC005555555555556BFE555555555555BBFD80308B91 419CABFF2AAAAAAAAAAABC005555555555556BCC8000000000000BFD789ABCDF01234B FF2AAAAAAAAAAABC0055555555555563FE555555555554FBFD6DFC3518A6DFCBFF2AAA AAAAAAAABC0055555555555563FF5555555555552BFD6054F43E32D21BFF2AAAAAAAAA AABC0055555555555563FFFFFFFFFFFFFFCBFD4FA4FA4FA4FA5BFF2AAAAAAAAAAABC00 55555555555564005555555555553BFD3BEC474CFD586BFF2AAAAAAAAAAABC00555555 5555556400AAAAAAAAAAAA8BFD252ADB363BEC4BFF2AAAAAAAAAAABC00555555555555 6400FFFFFFFFFFFFDBFD0B60B60B60B61BFF2AAAAAAAAAAABC0055555555555564012A AAAAAAAAAA9BFCDD1BAF98D76B8BFF2AAAAAAAAAAABC00555555555555640155555555 55554BFC9D6480F2B9D65BFF2AAAAAAAAAAABC0055555555555564017FFFFFFFFFFFFB FC579BE02468ACFBFF2AAAAAAAAAAABC005555555555556401AAAAAAAAAAAAABFC0BC1 CD2DE3EF4BFF2AAAAAAAAAAABC005555555555556401D555555555555BFB73AC901E57 3ABBFF2AAAAAAAAAAABC0055555555555564020000000000000BFA87654320FEDC4BFF 2AAAAAAAAAAABC0055555555555564021555555555555BF5E573AC901E516BFF2AAAAA AAAAAABC0055555555555564022AAAAAAAAAAAA3FA8153D0F8CB480BFF2AAAAAAAAAAA BC0055555555555564023FFFFFFFFFFFF3FB950C83FB72EA2BFF2AAAAAAAAAAABC0000 00000000001C024000000000000BFC5C28F5C28F5C1BFF2AAAAAAAAAAABC0000000000 00001C022AAAAAAAAAAABBFCA1F19690E0856BFF2AAAAAAAAAAABC000000000000001C 021555555555556BFCE1A8C536FE1A7BFF2AAAAAAAAAAABC000000000000001C020000 000000001BFD0DA740DA740D9BFF2AAAAAAAAAAABC000000000000001C01D555555555 557BFD277166054F43DBFF2AAAAAAAAAAABC000000000000001C01AAAAAAAAAAAACBFD 3E32D21C10AFFBFF2AAAAAAAAAAABC000000000000001C018000000000001BFD51EB85 1EB851EBFF2AAAAAAAAAAABC000000000000001C015555555555556BFD629B7F0D4629 BBFF2AAAAAAAAAAABC000000000000001C012AAAAAAAAAAABBFD7042BFE7BA376BFF2A AAAAAAAAAABC000000000000001C010000000000000BFD7AE147AE147AEBFF2AAAAAAA AAAABC000000000000001C00AAAAAAAAAAAABBFD8277166054F44BFF2AAAAAAAAAAABC 000000000000001C005555555555556BFD87042BFE7BA37BFF2AAAAAAAAAAABC000000 000000001C000000000000001BFD8888888888888BFF2AAAAAAAAAAABC000000000000 001BFF5555555555558BFD87042BFE7BA37BFF2AAAAAAAAAAABC000000000000001BFE 555555555555BBFD8277166054F44BFF2AAAAAAAAAAABC000000000000001BCC800000 0000000BFD7AE147AE147AEBFF2AAAAAAAAAAABC0000000000000013FE555555555554 FBFD7042BFE7BA376BFF2AAAAAAAAAAABC0000000000000013FF5555555555552BFD62 9B7F0D4629BBFF2AAAAAAAAAAABC0000000000000013FFFFFFFFFFFFFFCBFD51EB851E B851FBFF2AAAAAAAAAAABC0000000000000014005555555555553BFD3E32D21C10B00B FF2AAAAAAAAAAABC000000000000001400AAAAAAAAAAAA8BFD277166054F43EBFF2AAA AAAAAAAABC000000000000001400FFFFFFFFFFFFDBFD0DA740DA740DBBFF2AAAAAAAAA AABC0000000000000014012AAAAAAAAAAA9BFCE1A8C536FE1ACBFF2AAAAAAAAAAABC00 00000000000014015555555555554BFCA1F19690E0859BFF2AAAAAAAAAAABC00000000 00000014017FFFFFFFFFFFFBFC5C28F5C28F5C3BFF2AAAAAAAAAAABC00000000000000 1401AAAAAAAAAAAAABFC104EE2CC0A9E8BFF2AAAAAAAAAAABC000000000000001401D5 55555555555BFB7CC6BB5AA4993BFF2AAAAAAAAAAABC00000000000000140200000000 00000BFA9999999999994BFF2AAAAAAAAAAABC0000000000000014021555555555555B F70AFF9EE8DD7C5BFF2AAAAAAAAAAABC0000000000000014022AAAAAAAAAAAA3FA6F1F 7A80308B0BFF2AAAAAAAAAAABC0000000000000014023FFFFFFFFFFFF3FB8BF258BF25 8BABFF2AAAAAAAAAAABBFF5555555555558C024000000000000BFC579BE02468ACDBFF 2AAAAAAAAAAABBFF5555555555558C022AAAAAAAAAAABBFC9D6480F2B9D62BFF2AAAAA AAAAAABBFF5555555555558C021555555555556BFCDD1BAF98D76B3BFF2AAAAAAAAAAA BBFF5555555555558C020000000000001BFD0B60B60B60B5FBFF2AAAAAAAAAAABBFF55 55555555558C01D555555555557BFD252ADB363BEC3BFF2AAAAAAAAAAABBFF55555555 55558C01AAAAAAAAAAAACBFD3BEC474CFD585BFF2AAAAAAAAAAABBFF5555555555558C 018000000000001BFD4FA4FA4FA4FA4BFF2AAAAAAAAAAABBFF5555555555558C015555 555555556BFD6054F43E32D21BFF2AAAAAAAAAAABBFF5555555555558C012AAAAAAAAA AABBFD6DFC3518A6DFCBFF2AAAAAAAAAAABBFF5555555555558C010000000000000BFD 789ABCDF01234BFF2AAAAAAAAAAABBFF5555555555558C00AAAAAAAAAAAABBFD80308B 91419CABFF2AAAAAAAAAAABBFF5555555555558C005555555555556BFD84BDA12F684B DBFF2AAAAAAAAAAABBFF5555555555558C000000000000001BFD8641FDB97530EBFF2A AAAAAAAAAABBFF5555555555558BFF5555555555558BFD84BDA12F684BDBFF2AAAAAAA AAAABBFF5555555555558BFE555555555555BBFD80308B91419CABFF2AAAAAAAAAAABB FF5555555555558BCC8000000000000BFD789ABCDF01234BFF2AAAAAAAAAAABBFF5555 5555555583FE555555555554FBFD6DFC3518A6DFCBFF2AAAAAAAAAAABBFF5555555555 5583FF5555555555552BFD6054F43E32D21BFF2AAAAAAAAAAABBFF55555555555583FF FFFFFFFFFFFFCBFD4FA4FA4FA4FA5BFF2AAAAAAAAAAABBFF5555555555558400555555 5555553BFD3BEC474CFD586BFF2AAAAAAAAAAABBFF5555555555558400AAAAAAAAAAAA 8BFD252ADB363BEC4BFF2AAAAAAAAAAABBFF5555555555558400FFFFFFFFFFFFDBFD0B 60B60B60B61BFF2AAAAAAAAAAABBFF55555555555584012AAAAAAAAAAA9BFCDD1BAF98 D76B8BFF2AAAAAAAAAAABBFF55555555555584015555555555554BFC9D6480F2B9D65B FF2AAAAAAAAAAABBFF55555555555584017FFFFFFFFFFFFBFC579BE02468ACFBFF2AAA AAAAAAAABBFF5555555555558401AAAAAAAAAAAAABFC0BC1CD2DE3EF4BFF2AAAAAAAAA AABBFF5555555555558401D555555555555BFB73AC901E573ABBFF2AAAAAAAAAAABBFF 55555555555584020000000000000BFA87654320FEDC4BFF2AAAAAAAAAAABBFF555555 55555584021555555555555BF5E573AC901E516BFF2AAAAAAAAAAABBFF555555555555 84022AAAAAAAAAAAA3FA8153D0F8CB480BFF2AAAAAAAAAAABBFF55555555555584023F FFFFFFFFFFF3FB950C83FB72EA2BFF2AAAAAAAAAAABBFE555555555555BC0240000000 00000BFC49F49F49F49F5BFF2AAAAAAAAAAABBFE555555555555BC022AAAAAAAAAAABB FC8FBD401845C88BFF2AAAAAAAAAAABBFE555555555555BC021555555555556BFCCF74 6EBE635D9BFF2AAAAAAAAAAABBFE555555555555BC020000000000001BFD048D159E26 AF2BFF2AAAAAAAAAAABBFE555555555555BC01D555555555557BFD1E573AC901E56BFF 2AAAAAAAAAAABBFE555555555555BC01AAAAAAAAAAAACBFD3518A6DFC3518BFF2AAAAA AAAAAABBFE555555555555BC018000000000001BFD48D159E26AF37BFF2AAAAAAAAAAA BBFE555555555555BC015555555555556BFD598153D0F8CB4BFF2AAAAAAAAAAABBFE55 5555555555BC012AAAAAAAAAAABBFD672894AB6CD8FBFF2AAAAAAAAAAABBFE55555555 5555BC010000000000000BFD71C71C71C71C7BFF2AAAAAAAAAAABBFE555555555555BC 00AAAAAAAAAAAABBFD795CEB240795DBFF2AAAAAAAAAAABBFE555555555555BC005555 555555556BFD7DEA00C22E450BFF2AAAAAAAAAAABBFE555555555555BC000000000000 001BFD7F6E5D4C3B2A1BFF2AAAAAAAAAAABBFE555555555555BBFF5555555555558BFD 7DEA00C22E450BFF2AAAAAAAAAAABBFE555555555555BBFE555555555555BBFD795CEB 240795DBFF2AAAAAAAAAAABBFE555555555555BBCC8000000000000BFD71C71C71C71C 7BFF2AAAAAAAAAAABBFE555555555555B3FE555555555554FBFD672894AB6CD8FBFF2A AAAAAAAAAABBFE555555555555B3FF5555555555552BFD598153D0F8CB4BFF2AAAAAAA AAAABBFE555555555555B3FFFFFFFFFFFFFFCBFD48D159E26AF38BFF2AAAAAAAAAAABB FE555555555555B4005555555555553BFD3518A6DFC3519BFF2AAAAAAAAAAABBFE5555 55555555B400AAAAAAAAAAAA8BFD1E573AC901E57BFF2AAAAAAAAAAABBFE5555555555 55B400FFFFFFFFFFFFDBFD048D159E26AF4BFF2AAAAAAAAAAABBFE555555555555B401 2AAAAAAAAAAA9BFCCF746EBE635DEBFF2AAAAAAAAAAABBFE555555555555B401555555 5555554BFC8FBD401845C8BBFF2AAAAAAAAAAABBFE555555555555B4017FFFFFFFFFFF FBFC49F49F49F49F5BFF2AAAAAAAAAAABBFE555555555555B401AAAAAAAAAAAAABFBFC 3518A6DFC35BFF2AAAAAAAAAAABBFE555555555555B401D555555555555BFB585E0E69 6F1F7BFF2AAAAAAAAAAABBFE555555555555B4020000000000000BFA50C83FB72EA5CB FF2AAAAAAAAAAABBFE555555555555B40215555555555553F73B8B302A7A1DBBFF2AAA AAAAAAAABBFE555555555555B4022AAAAAAAAAAAA3FAB7F0D4629B7E8BFF2AAAAAAAAA AABBFE555555555555B4023FFFFFFFFFFFF3FBB05B05B05B056BFF2AAAAAAAAAAABBCC 8000000000000C024000000000000BFC3333333333333BFF2AAAAAAAAAAABBCC800000 0000000C022AAAAAAAAAAABBFC78FBD401845C6BFF2AAAAAAAAAAABBCC800000000000 0C021555555555556BFCB8B302A7A1F17BFF2AAAAAAAAAAABBCC8000000000000C0200 00000000001BFCF258BF258BF22BFF2AAAAAAAAAAABBCC8000000000000C01D5555555 55557BFD12F684BDA12F5BFF2AAAAAAAAAAABBCC8000000000000C01AAAAAAAAAAAACB FD29B7F0D4629B7BFF2AAAAAAAAAAABBCC8000000000000C018000000000001BFD3D70 A3D70A3D6BFF2AAAAAAAAAAABBCC8000000000000C015555555555556BFD4E209DC598 153BFF2AAAAAAAAAAABBCC8000000000000C012AAAAAAAAAAABBFD5BC7DEA00C22EBFF 2AAAAAAAAAAABBCC8000000000000C010000000000000BFD6666666666666BFF2AAAAA AAAAAABBCC8000000000000C00AAAAAAAAAAAABBFD6DFC3518A6DFCBFF2AAAAAAAAAAA BBCC8000000000000C005555555555556BFD72894AB6CD8EFBFF2AAAAAAAAAAABBCC80 00000000000C000000000000001BFD740DA740DA740BFF2AAAAAAAAAAABBCC80000000 00000BFF5555555555558BFD72894AB6CD8EFBFF2AAAAAAAAAAABBCC8000000000000B FE555555555555BBFD6DFC3518A6DFCBFF2AAAAAAAAAAABBCC8000000000000BCC8000 000000000BFD6666666666666BFF2AAAAAAAAAAABBCC80000000000003FE5555555555 54FBFD5BC7DEA00C22EBFF2AAAAAAAAAAABBCC80000000000003FF5555555555552BFD 4E209DC598153BFF2AAAAAAAAAAABBCC80000000000003FFFFFFFFFFFFFFCBFD3D70A3 D70A3D7BFF2AAAAAAAAAAABBCC80000000000004005555555555553BFD29B7F0D4629B 8BFF2AAAAAAAAAAABBCC8000000000000400AAAAAAAAAAAA8BFD12F684BDA12F6BFF2A AAAAAAAAAABBCC8000000000000400FFFFFFFFFFFFDBFCF258BF258BF26BFF2AAAAAAA AAAABBCC80000000000004012AAAAAAAAAAA9BFCB8B302A7A1F1CBFF2AAAAAAAAAAABB CC80000000000004015555555555554BFC78FBD401845C9BFF2AAAAAAAAAAABBCC8000 0000000004017FFFFFFFFFFFFBFC3333333333333BFF2AAAAAAAAAAABBCC8000000000 000401AAAAAAAAAAAAABFBCEB240795CEB1BFF2AAAAAAAAAAABBCC8000000000000401 D555555555555BFB2ADB363BEC473BFF2AAAAAAAAAAABBCC8000000000000402000000 0000000BF9EB851EB851EA8BFF2AAAAAAAAAAABBCC8000000000000402155555555555 53F904EE2CC0A9E87BFF2AAAAAAAAAAABBCC80000000000004022AAAAAAAAAAAA3FB09 7B425ED0978BFF2AAAAAAAAAAABBCC80000000000004023FFFFFFFFFFFF3FBDDDDDDDD DDDDABFF2AAAAAAAAAAAB3FE555555555554FC024000000000000BFC13579BE02468BB FF2AAAAAAAAAAAB3FE555555555554FC022AAAAAAAAAAABBFC59203CAE7591EBFF2AAA AAAAAAAAB3FE555555555554FC021555555555556BFC98D76B549326FBFF2AAAAAAAAA AAB3FE555555555554FC020000000000001BFCD27D27D27D27ABFF2AAAAAAAAAAAB3FE 555555555554FC01D555555555557BFD0308B91419CA1BFF2AAAAAAAAAAAB3FE555555 555554FC01AAAAAAAAAAAACBFD19CA252ADB363BFF2AAAAAAAAAAAB3FE555555555554 FC018000000000001BFD2D82D82D82D82BFF2AAAAAAAAAAAB3FE555555555554FC0155 55555555556BFD3E32D21C10AFFBFF2AAAAAAAAAAAB3FE555555555554FC012AAAAAAA AAAABBFD4BDA12F684BDABFF2AAAAAAAAAAAB3FE555555555554FC010000000000000B FD56789ABCDF012BFF2AAAAAAAAAAAB3FE555555555554FC00AAAAAAAAAAAABBFD5E0E 696F1F7A8BFF2AAAAAAAAAAAB3FE555555555554FC005555555555556BFD629B7F0D46 29BBFF2AAAAAAAAAAAB3FE555555555554FC000000000000001BFD641FDB97530ECBFF 2AAAAAAAAAAAB3FE555555555554FBFF5555555555558BFD629B7F0D4629BBFF2AAAAA AAAAAAB3FE555555555554FBFE555555555555BBFD5E0E696F1F7A8BFF2AAAAAAAAAAA B3FE555555555554FBCC8000000000000BFD56789ABCDF012BFF2AAAAAAAAAAAB3FE55 5555555554F3FE555555555554FBFD4BDA12F684BDABFF2AAAAAAAAAAAB3FE55555555 5554F3FF5555555555552BFD3E32D21C10AFFBFF2AAAAAAAAAAAB3FE555555555554F3 FFFFFFFFFFFFFFCBFD2D82D82D82D83BFF2AAAAAAAAAAAB3FE555555555554F4005555 555555553BFD19CA252ADB364BFF2AAAAAAAAAAAB3FE555555555554F400AAAAAAAAAA AA8BFD0308B91419CA2BFF2AAAAAAAAAAAB3FE555555555554F400FFFFFFFFFFFFDBFC D27D27D27D27EBFF2AAAAAAAAAAAB3FE555555555554F4012AAAAAAAAAAA9BFC98D76B 5493274BFF2AAAAAAAAAAAB3FE555555555554F4015555555555554BFC59203CAE7592 1BFF2AAAAAAAAAAAB3FE555555555554F4017FFFFFFFFFFFFBFC13579BE02468BBFF2A AAAAAAAAAAB3FE555555555554F401AAAAAAAAAAAAABFB8EFB11D33F563BFF2AAAAAAA AAAAB3FE555555555554F401D555555555555BFAD6480F2B9D649BFF2AAAAAAAAAAAB3 FE555555555554F4020000000000000BF8D950C83FB72D0BFF2AAAAAAAAAAAB3FE5555 55555554F40215555555555553FA01E573AC901E3BFF2AAAAAAAAAAAB3FE5555555555 54F4022AAAAAAAAAAAA3FB49327104EE2C8BFF2AAAAAAAAAAAB3FE555555555554F402 3FFFFFFFFFFFF3FC0ECA8641FDB95BFF2AAAAAAAAAAAB3FF5555555555552C02400000 0000000BFBD4C3B2A1907F5BFF2AAAAAAAAAAAB3FF5555555555552C022AAAAAAAAAAA BBFC302A7A1F1968EBFF2AAAAAAAAAAAB3FF5555555555552C021555555555556BFC6F E1A8C536FDFBFF2AAAAAAAAAAAB3FF5555555555552C020000000000001BFCA9876543 20FEABFF2AAAAAAAAAAAB3FF5555555555552C01D555555555557BFCDD1BAF98D76B2B FF2AAAAAAAAAAAB3FF5555555555552C01AAAAAAAAAAAACBFD054F43E32D21BBFF2AAA AAAAAAAAB3FF5555555555552C018000000000001BFD1907F6E5D4C3ABFF2AAAAAAAAA AAB3FF5555555555552C015555555555556BFD29B7F0D4629B7BFF2AAAAAAAAAAAB3FF 5555555555552C012AAAAAAAAAAABBFD375F31AED6A92BFF2AAAAAAAAAAAB3FF555555 5555552C010000000000000BFD41FDB97530ECABFF2AAAAAAAAAAAB3FF555555555555 2C00AAAAAAAAAAAABBFD4993882771660BFF2AAAAAAAAAAAB3FF5555555555552C0055 55555555556BFD4E209DC598153BFF2AAAAAAAAAAAB3FF5555555555552C0000000000 00001BFD4FA4FA4FA4FA4BFF2AAAAAAAAAAAB3FF5555555555552BFF5555555555558B FD4E209DC598153BFF2AAAAAAAAAAAB3FF5555555555552BFE555555555555BBFD4993 882771660BFF2AAAAAAAAAAAB3FF5555555555552BCC8000000000000BFD41FDB97530 ECABFF2AAAAAAAAAAAB3FF55555555555523FE555555555554FBFD375F31AED6A92BFF 2AAAAAAAAAAAB3FF55555555555523FF5555555555552BFD29B7F0D4629B7BFF2AAAAA AAAAAAB3FF55555555555523FFFFFFFFFFFFFFCBFD1907F6E5D4C3BBFF2AAAAAAAAAAA B3FF55555555555524005555555555553BFD054F43E32D21CBFF2AAAAAAAAAAAB3FF55 55555555552400AAAAAAAAAAAA8BFCDD1BAF98D76B5BFF2AAAAAAAAAAAB3FF55555555 55552400FFFFFFFFFFFFDBFCA987654320FEEBFF2AAAAAAAAAAAB3FF55555555555524 012AAAAAAAAAAA9BFC6FE1A8C536FE4BFF2AAAAAAAAAAAB3FF55555555555524015555 555555554BFC302A7A1F19692BFF2AAAAAAAAAAAB3FF55555555555524017FFFFFFFFF FFFBFBD4C3B2A1907F9BFF2AAAAAAAAAAAB3FF5555555555552401AAAAAAAAAAAAABFB 3D0F8CB487043BFF2AAAAAAAAAAAB3FF5555555555552401D555555555555BFA327104 EE2CC09BFF2AAAAAAAAAAAB3FF555555555555240200000000000003F76C16C16C16C6 0BFF2AAAAAAAAAAAB3FF555555555555240215555555555553FAA5BC7DEA00C23BFF2A AAAAAAAAAAB3FF55555555555524022AAAAAAAAAAAA3FB9B1DF623A67E8BFF2AAAAAAA AAAAB3FF55555555555524023FFFFFFFFFFFF3FC37C048D159E25BFF2AAAAAAAAAAAB3 FFFFFFFFFFFFFFCC024000000000000BFB70A3D70A3D70DBFF2AAAAAAAAAAAB3FFFFFF FFFFFFFFCC022AAAAAAAAAAABBFBFC3518A6DFC34BFF2AAAAAAAAAAAB3FFFFFFFFFFFF FFCC021555555555556BFC3DD1BAF98D76BBFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC02 0000000000001BFC7777777777776BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC01D55555 5555557BFCAB0BC1CD2DE3EBFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC01AAAAAAAAAAAA CBFCD88E99FAB0BC2BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC018000000000001BFD00 00000000000BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC015555555555556BFD10AFF9EE 8DD7DBFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFD1E573AC901E58B FF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCC010000000000000BFD28F5C28F5C290BFF2AAA AAAAAAAAB3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFD308B91419CA26BFF2AAAAAAAAA AAB3FFFFFFFFFFFFFFCC005555555555556BFD3518A6DFC3519BFF2AAAAAAAAAAAB3FF FFFFFFFFFFFFCC000000000000001BFD369D0369D036ABFF2AAAAAAAAAAAB3FFFFFFFF FFFFFFCBFF5555555555558BFD3518A6DFC3519BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFF CBFE555555555555BBFD308B91419CA26BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFCBCC80 00000000000BFD28F5C28F5C290BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FE55555555 5554FBFD1E573AC901E58BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FF5555555555552B FD10AFF9EE8DD7DBFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFD0000 000000001BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4005555555555553BFCD88E99FAB0 BC3BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFCAB0BC1CD2DE42BFF 2AAAAAAAAAAAB3FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFC777777777777BBFF2AAAAA AAAAAAB3FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFC3DD1BAF98D76FBFF2AAAAAAAAAAA B3FFFFFFFFFFFFFFC4015555555555554BFBFC3518A6DFC3BBFF2AAAAAAAAAAAB3FFFF FFFFFFFFFFC4017FFFFFFFFFFFFBFB70A3D70A3D711BFF2AAAAAAAAAAAB3FFFFFFFFFF FFFFC401AAAAAAAAAAAAABFAB1DF623A67EB6BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4 01D555555555555BF8A8C536FE1A8E4BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4020000 0000000003F9EB851EB851EB8BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4021555555555 5553FB36FE1A8C536FABFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FB FF3DD1BAF98D0BFF2AAAAAAAAAAAB3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FC69D036 9D03699BFF2AAAAAAAAAAAB4005555555555553C024000000000000BFAF49F49F49F4A ABFF2AAAAAAAAAAAB4005555555555553C022AAAAAAAAAAABBFB85E0E696F1F7CBFF2A AAAAAAAAAAB4005555555555553C021555555555556BFC02A7A1F19690FBFF2AAAAAAA AAAAB4005555555555553C020000000000001BFC3C4D5E6F8091ABFF2AAAAAAAAAAAB4 005555555555553C01D555555555557BFC6FE1A8C536FE2BFF2AAAAAAAAAAAB4005555 555555553C01AAAAAAAAAAAACBFC9D6480F2B9D66BFF2AAAAAAAAAAAB4005555555555 553C018000000000001BFCC4D5E6F8091A4BFF2AAAAAAAAAAAB4005555555555553C01 5555555555556BFCE635DAD524C9EBFF2AAAAAAAAAAAB4005555555555553C012AAAAA AAAAAABBFD00C22E450672ABFF2AAAAAAAAAAAB4005555555555553C01000000000000 0BFD0B60B60B60B62BFF2AAAAAAAAAAAB4005555555555553C00AAAAAAAAAAAABBFD12 F684BDA12F8BFF2AAAAAAAAAAAB4005555555555553C005555555555556BFD17839A5B C7DEBBFF2AAAAAAAAAAAB4005555555555553C000000000000001BFD1907F6E5D4C3CB FF2AAAAAAAAAAAB4005555555555553BFF5555555555558BFD17839A5BC7DEBBFF2AAA AAAAAAAAB4005555555555553BFE555555555555BBFD12F684BDA12F8BFF2AAAAAAAAA AAB4005555555555553BCC8000000000000BFD0B60B60B60B62BFF2AAAAAAAAAAAB400 55555555555533FE555555555554FBFD00C22E450672ABFF2AAAAAAAAAAAB400555555 55555533FF5555555555552BFCE635DAD524C9FBFF2AAAAAAAAAAAB400555555555555 33FFFFFFFFFFFFFFCBFCC4D5E6F8091A6BFF2AAAAAAAAAAAB400555555555555340055 55555555553BFC9D6480F2B9D68BFF2AAAAAAAAAAAB4005555555555553400AAAAAAAA AAAA8BFC6FE1A8C536FE6BFF2AAAAAAAAAAAB4005555555555553400FFFFFFFFFFFFDB FC3C4D5E6F8091FBFF2AAAAAAAAAAAB40055555555555534012AAAAAAAAAAA9BFC02A7 A1F196913BFF2AAAAAAAAAAAB40055555555555534015555555555554BFB85E0E696F1 F83BFF2AAAAAAAAAAAB40055555555555534017FFFFFFFFFFFFBFAF49F49F49F4B1BFF 2AAAAAAAAAAAB4005555555555553401AAAAAAAAAAAAABF98A6DFC3518A8BBFF2AAAAA AAAAAAB4005555555555553401D5555555555553F904EE2CC0A9E6EBFF2AAAAAAAAAAA B400555555555555340200000000000003FAE26AF37C048CCBFF2AAAAAAAAAAAB40055 5555555555340215555555555553FBAD524C9C413B2BFF2AAAAAAAAAAAB40055555555 555534022AAAAAAAAAAAA3FC3AC901E573AC4BFF2AAAAAAAAAAAB40055555555555534 023FFFFFFFFFFFF3FCA4FA4FA4FA4F5BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C024000 000000000BF9C71C71C71C724BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C022AAAAAAAAA AABBFAFAB0BC1CD2DE0BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C021555555555556BFB 7CC6BB5AA4992BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C020000000000001BFBF01234 56789A7BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C01D555555555557BFC2B9D6480F2B9 CBFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFC59203CAE75920BFF2A AAAAAAAAAAB400AAAAAAAAAAAA8C018000000000001BFC8091A2B3C4D5EBFF2AAAAAAA AAAAB400AAAAAAAAAAAA8C015555555555556BFCA1F19690E0858BFF2AAAAAAAAAAAB4 00AAAAAAAAAAAA8C012AAAAAAAAAAABBFCBD401845C8A0DBFF2AAAAAAAAAAAB400AAAA AAAAAAAA8C010000000000000BFCD27D27D27D27EBFF2AAAAAAAAAAAB400AAAAAAAAAA AA8C00AAAAAAAAAAAABBFCE1A8C536FE1AABFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C00 5555555555556BFCEAC2F0734B791BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8C00000000 0000001BFCEDCBA98765433BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8BFF555555555555 8BFCEAC2F0734B790BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8BFE555555555555BBFCE1 A8C536FE1AABFF2AAAAAAAAAAAB400AAAAAAAAAAAA8BCC8000000000000BFCD27D27D2 7D27EBFF2AAAAAAAAAAAB400AAAAAAAAAAAA83FE555555555554FBFCBD401845C8A0EB FF2AAAAAAAAAAAB400AAAAAAAAAAAA83FF5555555555552BFCA1F19690E0859BFF2AAA AAAAAAAAB400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFC8091A2B3C4D60BFF2AAAAAAAAA AAB400AAAAAAAAAAAA84005555555555553BFC59203CAE75922BFF2AAAAAAAAAAAB400 AAAAAAAAAAAA8400AAAAAAAAAAAA8BFC2B9D6480F2BA0BFF2AAAAAAAAAAAB400AAAAAA AAAAAA8400FFFFFFFFFFFFDBFBF0123456789B1BFF2AAAAAAAAAAAB400AAAAAAAAAAAA 84012AAAAAAAAAAA9BFB7CC6BB5AA4999BFF2AAAAAAAAAAAB400AAAAAAAAAAAA840155 55555555554BFAFAB0BC1CD2DEEBFF2AAAAAAAAAAAB400AAAAAAAAAAAA84017FFFFFFF FFFFFBF9C71C71C71C732BFF2AAAAAAAAAAAB400AAAAAAAAAAAA8401AAAAAAAAAAAAA3 F82F684BDA12F4ABFF2AAAAAAAAAAAB400AAAAAAAAAAAA8401D5555555555553FA9388 27716604FBFF2AAAAAAAAAAAB400AAAAAAAAAAAA840200000000000003FB79BE02468A CF1BFF2AAAAAAAAAAAB400AAAAAAAAAAAA840215555555555553FC1AED6A9264E1FBFF 2AAAAAAAAAAAB400AAAAAAAAAAAA84022AAAAAAAAAAAA3FC7F0D4629B7F0ABFF2AAAAA AAAAAAB400AAAAAAAAAAAA84023FFFFFFFFFFFF3FCE93E93E93E93BBFF2AAAAAAAAAAA B400FFFFFFFFFFFFDC0240000000000003F847AE147AE1457BFF2AAAAAAAAAAAB400FF FFFFFFFFFFDC022AAAAAAAAAAABBF98A6DFC3518A70BFF2AAAAAAAAAAAB400FFFFFFFF FFFFDC021555555555556BFAC413B8B302A7BBFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC 020000000000001BFB5555555555553BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC01D555 555555557BFBBC7DEA00C22E4BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC01AAAAAAAAAA AACBFC0BC1CD2DE3EF6BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC018000000000001BFC 3333333333334BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC015555555555556BFC549327 104EE2EBFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC012AAAAAAAAAAABBFC6FE1A8C536FE 3BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDC010000000000000BFC851EB851EB854BFF2A AAAAAAAAAAB400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFC944A55B66C780BFF2AAAAAAA AAAAB400FFFFFFFFFFFFDC005555555555556BFC9D6480F2B9D67BFF2AAAAAAAAAAAB4 00FFFFFFFFFFFFDC000000000000001BFCA06D3A06D3A09BFF2AAAAAAAAAAAB400FFFF FFFFFFFFDBFF5555555555558BFC9D6480F2B9D66BFF2AAAAAAAAAAAB400FFFFFFFFFF FFDBFE555555555555BBFC944A55B66C780BFF2AAAAAAAAAAAB400FFFFFFFFFFFFDBCC 8000000000000BFC851EB851EB854BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD3FE555555 555554FBFC6FE1A8C536FE4BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD3FF555555555555 2BFC549327104EE2FBFF2AAAAAAAAAAAB400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFC33 33333333336BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD4005555555555553BFC0BC1CD2D E3EF8BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFBBC7DEA00C22EBB FF2AAAAAAAAAAAB400FFFFFFFFFFFFD400FFFFFFFFFFFFDBFB555555555555DBFF2AAA AAAAAAAAB400FFFFFFFFFFFFD4012AAAAAAAAAAA9BFAC413B8B302A8ABFF2AAAAAAAAA AAB400FFFFFFFFFFFFD4015555555555554BF98A6DFC3518A8DBFF2AAAAAAAAAAAB400 FFFFFFFFFFFFD4017FFFFFFFFFFFF3F847AE147AE143CBFF2AAAAAAAAAAAB400FFFFFF FFFFFFD401AAAAAAAAAAAAA3FA8153D0F8CB47CBFF2AAAAAAAAAAAB400FFFFFFFFFFFF D401D5555555555553FB6480F2B9D647CBFF2AAAAAAAAAAAB400FFFFFFFFFFFFD40200 000000000003FC0A3D70A3D70A2BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD40215555555 555553FC684BDA12F6849BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD4022AAAAAAAAAAAA3 FCCC6BB5AA49934BFF2AAAAAAAAAAAB400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FD1B4E 81B4E81B2BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C0240000000000003FAABCDF01234 55EBFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C022AAAAAAAAAAAB3F92956D9B1DF620BFF 2AAAAAAAAAAAB4012AAAAAAAAAAA9C021555555555556BF8A8C536FE1A8CCBFF2AAAAA AAAAAAB4012AAAAAAAAAAA9C020000000000001BFA50C83FB72EA5EBFF2AAAAAAAAAAA B4012AAAAAAAAAAA9C01D555555555557BFB0F8CB487042C0BFF2AAAAAAAAAAAB4012A AAAAAAAAAA9C01AAAAAAAAAAAACBFB6A9264E209DC8BFF2AAAAAAAAAAAB4012AAAAAAA AAAA9C018000000000001BFBB97530ECA8644BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C 015555555555556BFBFC3518A6DFC39BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C012AAA AAAAAAAABBFC19690E0857FD1BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C010000000000 000BFC2EA61D950C842BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C00AAAAAAAAAAAABBFC 3DD1BAF98D76EBFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C005555555555556BFC46EBE6 35DAD55BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9C000000000000001BFC49F49F49F49F 7BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9BFF5555555555558BFC46EBE635DAD54BFF2A AAAAAAAAAAB4012AAAAAAAAAAA9BFE555555555555BBFC3DD1BAF98D76EBFF2AAAAAAA AAAAB4012AAAAAAAAAAA9BCC8000000000000BFC2EA61D950C842BFF2AAAAAAAAAAAB4 012AAAAAAAAAAA93FE555555555554FBFC19690E0857FD2BFF2AAAAAAAAAAAB4012AAA AAAAAAAA93FF5555555555552BFBFC3518A6DFC3ABFF2AAAAAAAAAAAB4012AAAAAAAAA AA93FFFFFFFFFFFFFFCBFBB97530ECA8648BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9400 5555555555553BFB6A9264E209DCCBFF2AAAAAAAAAAAB4012AAAAAAAAAAA9400AAAAAA AAAAAA8BFB0F8CB487042C7BFF2AAAAAAAAAAAB4012AAAAAAAAAAA9400FFFFFFFFFFFF DBFA50C83FB72EA72BFF2AAAAAAAAAAAB4012AAAAAAAAAAA94012AAAAAAAAAAA9BF8A8 C536FE1A90ABFF2AAAAAAAAAAAB4012AAAAAAAAAAA940155555555555543F92956D9B1 DF603BFF2AAAAAAAAAAAB4012AAAAAAAAAAA94017FFFFFFFFFFFF3FAABCDF01234557B FF2AAAAAAAAAAAB4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FB6D9B1DF623A62BFF2AAA AAAAAAAAB4012AAAAAAAAAAA9401D5555555555553FC08B91419CA250BFF2AAAAAAAAA AAB4012AAAAAAAAAAA940200000000000003FC60B60B60B60B4BFF2AAAAAAAAAAAB401 2AAAAAAAAAAA940215555555555553FCBEC474CFD585BBFF2AAAAAAAAAAAB4012AAAAA AAAAAA94022AAAAAAAAAAAA3FD11722833944A3BFF2AAAAAAAAAAAB4012AAAAAAAAAAA 94023FFFFFFFFFFFF3FD468ACF13579BBBFF2AAAAAAAAAAAB4015555555555554C0240 000000000003FB950C83FB72EA3BFF2AAAAAAAAAAAB4015555555555554C022AAAAAAA AAAAB3FB097B425ED097ABFF2AAAAAAAAAAAB4015555555555554C0215555555555563 FA1419CA252ADB1BFF2AAAAAAAAAAAB4015555555555554C0200000000000013F76C16 C16C16C2DBFF2AAAAAAAAAAAB4015555555555554C01D555555555557BF9419CA252AD B37BFF2AAAAAAAAAAAB4015555555555554C01AAAAAAAAAAAACBFA56D9B1DF623ABBFF 2AAAAAAAAAAAB4015555555555554C018000000000001BFAF49F49F49F4A3BFF2AAAAA AAAAAAB4015555555555554C015555555555556BFB3D0F8CB487047BFF2AAAAAAAAAAA B4015555555555554C012AAAAAAAAAAABBFB73AC901E573B1BFF2AAAAAAAAAAAB40155 55555555554C010000000000000BFB9E26AF37C0492BFF2AAAAAAAAAAAB40155555555 55554C00AAAAAAAAAAAABBFBBC7DEA00C22E9BFF2AAAAAAAAAAAB4015555555555554C 005555555555556BFBCEB240795CEB7BFF2AAAAAAAAAAAB4015555555555554C000000 000000001BFBD4C3B2A1907FCBFF2AAAAAAAAAAAB4015555555555554BFF5555555555 558BFBCEB240795CEB7BFF2AAAAAAAAAAAB4015555555555554BFE555555555555BBFB BC7DEA00C22EABFF2AAAAAAAAAAAB4015555555555554BCC8000000000000BFB9E26AF 37C0493BFF2AAAAAAAAAAAB40155555555555543FE555555555554FBFB73AC901E573B 3BFF2AAAAAAAAAAAB40155555555555543FF5555555555552BFB3D0F8CB487049BFF2A AAAAAAAAAAB40155555555555543FFFFFFFFFFFFFFCBFAF49F49F49F4ACBFF2AAAAAAA AAAAB40155555555555544005555555555553BFA56D9B1DF623B4BFF2AAAAAAAAAAAB4 015555555555554400AAAAAAAAAAAA8BF9419CA252ADB54BFF2AAAAAAAAAAAB4015555 555555554400FFFFFFFFFFFFD3F76C16C16C16B8FBFF2AAAAAAAAAAAB4015555555555 5544012AAAAAAAAAAA93FA1419CA252ADA2BFF2AAAAAAAAAAAB4015555555555554401 55555555555543FB097B425ED0973BFF2AAAAAAAAAAAB40155555555555544017FFFFF FFFFFFF3FB950C83FB72E9EBFF2AAAAAAAAAAAB4015555555555554401AAAAAAAAAAAA A3FC166054F43E32ABFF2AAAAAAAAAAAB4015555555555554401D5555555555553FC68 4BDA12F6849BFF2AAAAAAAAAAAB401555555555555440200000000000003FCC048D159 E26AEBFF2AAAAAAAAAAAB401555555555555440215555555555553FD0F2B9D6480F2AB FF2AAAAAAAAAAAB40155555555555544022AAAAAAAAAAAA3FD413B8B302A79FBFF2AAA AAAAAAAAB40155555555555544023FFFFFFFFFFFF3FD7654320FEDCB8BFF2AAAAAAAAA AAB4017FFFFFFFFFFFFC0240000000000003FC3333333333331BFF2AAAAAAAAAAAB401 7FFFFFFFFFFFFC022AAAAAAAAAAAB3FBDAD524C9C413CBFF2AAAAAAAAAAAB4017FFFFF FFFFFFFC0215555555555563FB5B66C77D88E9ABFF2AAAAAAAAAAAB4017FFFFFFFFFFF FC0200000000000013FAD0369D0369D06BFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC01D5 555555555573FA01E573AC901E5BFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC01AAAAAAAA AAAAC3F82F684BDA12F62BFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC018000000000001B F847AE147AE147EBFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC015555555555556BF9AED6 A9264E214BFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC012AAAAAAAAAAABBFA44A55B66C7 7DEBFF2AAAAAAAAAAAB4017FFFFFFFFFFFFC010000000000000BFA99999999999A1BFF 2AAAAAAAAAAAB4017FFFFFFFFFFFFC00AAAAAAAAAAAABBFAD6480F2B9D64FBFF2AAAAA AAAAAAB4017FFFFFFFFFFFFC005555555555556BFAFAB0BC1CD2DEABFF2AAAAAAAAAAA B4017FFFFFFFFFFFFC000000000000001BFB0369D0369D03BBFF2AAAAAAAAAAAB4017F FFFFFFFFFFFBFF5555555555558BFAFAB0BC1CD2DECBFF2AAAAAAAAAAAB4017FFFFFFF FFFFFBFE555555555555BBFAD6480F2B9D650BFF2AAAAAAAAAAAB4017FFFFFFFFFFFFB CC8000000000000BFA99999999999A2BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF3FE5555 55555554FBFA44A55B66C77E2BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF3FF5555555555 552BF9AED6A9264E21DBFF2AAAAAAAAAAAB4017FFFFFFFFFFFF3FFFFFFFFFFFFFFCBF8 47AE147AE14A4BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF40055555555555533F82F684B DA12F3ABFF2AAAAAAAAAAAB4017FFFFFFFFFFFF400AAAAAAAAAAAA83FA01E573AC901D 9BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF400FFFFFFFFFFFFD3FAD0369D0369CF5BFF2A AAAAAAAAAAB4017FFFFFFFFFFFF4012AAAAAAAAAAA93FB5B66C77D88E92BFF2AAAAAAA AAAAB4017FFFFFFFFFFFF40155555555555543FBDAD524C9C4135BFF2AAAAAAAAAAAB4 017FFFFFFFFFFFF4017FFFFFFFFFFFF3FC3333333333330BFF2AAAAAAAAAAAB4017FFF FFFFFFFFF401AAAAAAAAAAAAA3FC7F0D4629B7F0BBFF2AAAAAAAAAAAB4017FFFFFFFFF FFF401D5555555555553FCD0F8CB487042ABFF2AAAAAAAAAAAB4017FFFFFFFFFFFF402 00000000000003FD147AE147AE147BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF402155555 55555553FD438215FF3DD1ABFF2AAAAAAAAAAAB4017FFFFFFFFFFFF4022AAAAAAAAAAA A3FD759203CAE7590BFF2AAAAAAAAAAAB4017FFFFFFFFFFFF4023FFFFFFFFFFFF3FDAA AAAAAAAAAA8BFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC0240000000000003FCA4FA4FA4 FA4FABFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FC5F31AED6A9267B FF2AAAAAAAAAAAB401AAAAAAAAAAAAAC0215555555555563FC1F7A80308B915BFF2AAA AAAAAAAAB401AAAAAAAAAAAAAC0200000000000013FBCBA9876543214BFF2AAAAAAAAA AAB401AAAAAAAAAAAAAC01D5555555555573FB6480F2B9D6484BFF2AAAAAAAAAAAB401 AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FB097B425ED097CBFF2AAAAAAAAAAAB401AAAAAA AAAAAAAC0180000000000013FA7530ECA864201BFF2AAAAAAAAAAAB401AAAAAAAAAAAA AC0155555555555563F9DF623A67EAC2CBFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC012A AAAAAAAAAAB3F904EE2CC0A9E86BFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC0100000000 000003F76C16C16C16C00BFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC00AAAAAAAAAAAABB F5E573AC901E5B6BFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC005555555555556BF79CA2 52ADB3650BFF2AAAAAAAAAAAB401AAAAAAAAAAAAAC000000000000001BF7FDB97530EC A9BBFF2AAAAAAAAAAAB401AAAAAAAAAAAAABFF5555555555558BF79CA252ADB3654BFF 2AAAAAAAAAAAB401AAAAAAAAAAAAABFE555555555555BBF5E573AC901E5E3BFF2AAAAA AAAAAAB401AAAAAAAAAAAAABCC80000000000003F76C16C16C16BF8BFF2AAAAAAAAAAA B401AAAAAAAAAAAAA3FE555555555554F3F904EE2CC0A9E7FBFF2AAAAAAAAAAAB401AA AAAAAAAAAAA3FF55555555555523F9DF623A67EAC26BFF2AAAAAAAAAAAB401AAAAAAAA AAAAA3FFFFFFFFFFFFFFC3FA7530ECA8641F8BFF2AAAAAAAAAAAB401AAAAAAAAAAAAA4 0055555555555533FB097B425ED0978BFF2AAAAAAAAAAAB401AAAAAAAAAAAAA400AAAA AAAAAAAA83FB6480F2B9D647DBFF2AAAAAAAAAAAB401AAAAAAAAAAAAA400FFFFFFFFFF FFD3FBCBA987654320BBFF2AAAAAAAAAAAB401AAAAAAAAAAAAA4012AAAAAAAAAAA93FC 1F7A80308B911BFF2AAAAAAAAAAAB401AAAAAAAAAAAAA40155555555555543FC5F31AE D6A9262BFF2AAAAAAAAAAAB401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FCA4FA4FA4FA4F 8BFF2AAAAAAAAAAAB401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FCF0D4629B7F0D3BFF2A AAAAAAAAAAB401AAAAAAAAAAAAA401D5555555555553FD215FF3DD1BAF9BFF2AAAAAAA AAAAB401AAAAAAAAAAAAA40200000000000003FD4D5E6F8091A2BBFF2AAAAAAAAAAAB4 01AAAAAAAAAAAAA40215555555555553FD7C65A438215FEBFF2AAAAAAAAAAAB401AAAA AAAAAAAAA4022AAAAAAAAAAAA3FDAE759203CAE74BFF2AAAAAAAAAAAB401AAAAAAAAAA AAA4023FFFFFFFFFFFF3FDE38E38E38E38DBFF2AAAAAAAAAAAB401D555555555555C02 40000000000003FD0FEDCBA987654BFF2AAAAAAAAAAAB401D555555555555C022AAAAA AAAAAAB3FCDA12F684BDA15BFF2AAAAAAAAAAAB401D555555555555C02155555555555 63FC9A5BC7DEA00C4BFF2AAAAAAAAAAAB401D555555555555C0200000000000013FC60 B60B60B60B9BFF2AAAAAAAAAAAB401D555555555555C01D5555555555573FC2D21C10A FF9F0BFF2AAAAAAAAAAAB401D555555555555C01AAAAAAAAAAAAC3FBFF3DD1BAF98D9B FF2AAAAAAAAAAAB401D555555555555C0180000000000013FBB05B05B05B05DBFF2AAA AAAAAAAAB401D555555555555C0155555555555563FB6D9B1DF623A68BFF2AAAAAAAAA AAB401D555555555555C012AAAAAAAAAAAB3FB36FE1A8C536FEBFF2AAAAAAAAAAAB401 D555555555555C0100000000000003FB0C83FB72EA61DBFF2AAAAAAAAAAAB401D55555 5555555C00AAAAAAAAAAAAB3FADC598153D0F8CBFF2AAAAAAAAAAAB401D55555555555 5C0055555555555563FAB7F0D4629B7F0BFF2AAAAAAAAAAAB401D555555555555C0000 000000000013FAABCDF01234567BFF2AAAAAAAAAAAB401D555555555555BFF55555555 555583FAB7F0D4629B7EFBFF2AAAAAAAAAAAB401D555555555555BFE555555555555B3 FADC598153D0F8BBFF2AAAAAAAAAAAB401D555555555555BCC80000000000003FB0C83 FB72EA61CBFF2AAAAAAAAAAAB401D5555555555553FE555555555554F3FB36FE1A8C53 6FCBFF2AAAAAAAAAAAB401D5555555555553FF55555555555523FB6D9B1DF623A66BFF 2AAAAAAAAAAAB401D5555555555553FFFFFFFFFFFFFFC3FBB05B05B05B059BFF2AAAAA AAAAAAB401D55555555555540055555555555533FBFF3DD1BAF98D5BFF2AAAAAAAAAAA B401D555555555555400AAAAAAAAAAAA83FC2D21C10AFF9EDBFF2AAAAAAAAAAAB401D5 55555555555400FFFFFFFFFFFFD3FC60B60B60B60B4BFF2AAAAAAAAAAAB401D5555555 555554012AAAAAAAAAAA93FC9A5BC7DEA00BFBFF2AAAAAAAAAAAB401D5555555555554 0155555555555543FCDA12F684BDA11BFF2AAAAAAAAAAAB401D5555555555554017FFF FFFFFFFFF3FD0FEDCBA987653BFF2AAAAAAAAAAAB401D555555555555401AAAAAAAAAA AAA3FD35DAD524C9C41BFF2AAAAAAAAAAAB401D555555555555401D5555555555553FD 5ED097B425ED0BFF2AAAAAAAAAAAB401D55555555555540200000000000003FD8ACF13 579BE02BFF2AAAAAAAAAAAB401D55555555555540215555555555553FDB9D6480F2B9D 6BFF2AAAAAAAAAAAB401D5555555555554022AAAAAAAAAAAA3FDEBE635DAD524BBFF2A AAAAAAAAAAB401D5555555555554023FFFFFFFFFFFF3FE107F6E5D4C3B2BFF2AAAAAAA AAAAB4020000000000000C0240000000000003FD51EB851EB8520BFF2AAAAAAAAAAAB4 020000000000000C022AAAAAAAAAAAB3FD2F0734B78FBD6BFF2AAAAAAAAAAAB4020000 000000000C0215555555555563FD0F2B9D6480F2DBFF2AAAAAAAAAAAB4020000000000 000C0200000000000013FCE4B17E4B17E4FBFF2AAAAAAAAAAAB4020000000000000C01 D5555555555573FCB11D33F561787BFF2AAAAAAAAAAAB4020000000000000C01AAAAAA AAAAAAC3FC839A5BC7DEA03BFF2AAAAAAAAAAAB4020000000000000C01800000000000 13FC5C28F5C28F5C5BFF2AAAAAAAAAAAB4020000000000000C0155555555555563FC3A C901E573ACBBFF2AAAAAAAAAAAB4020000000000000C012AAAAAAAAAAAB3FC1F7A8030 8B916BFF2AAAAAAAAAAAB4020000000000000C0100000000000003FC0A3D70A3D70A5B FF2AAAAAAAAAAAB4020000000000000C00AAAAAAAAAAAAB3FBF623A67EAC2F3BFF2AAA AAAAAAAAB4020000000000000C0055555555555563FBE3EF500611725BFF2AAAAAAAAA AAB4020000000000000C0000000000000013FBDDDDDDDDDDDE0BFF2AAAAAAAAAAAB402 0000000000000BFF55555555555583FBE3EF500611725BFF2AAAAAAAAAAAB402000000 0000000BFE555555555555B3FBF623A67EAC2F2BFF2AAAAAAAAAAAB402000000000000 0BCC80000000000003FC0A3D70A3D70A5BFF2AAAAAAAAAAAB40200000000000003FE55 5555555554F3FC1F7A80308B915BFF2AAAAAAAAAAAB40200000000000003FF55555555 555523FC3AC901E573ACABFF2AAAAAAAAAAAB40200000000000003FFFFFFFFFFFFFFC3 FC5C28F5C28F5C3BFF2AAAAAAAAAAAB402000000000000040055555555555533FC839A 5BC7DEA01BFF2AAAAAAAAAAAB4020000000000000400AAAAAAAAAAAA83FCB11D33F561 783BFF2AAAAAAAAAAAB4020000000000000400FFFFFFFFFFFFD3FCE4B17E4B17E4ABFF 2AAAAAAAAAAAB40200000000000004012AAAAAAAAAAA93FD0F2B9D6480F2BBFF2AAAAA AAAAAAB402000000000000040155555555555543FD2F0734B78FBD4BFF2AAAAAAAAAAA B40200000000000004017FFFFFFFFFFFF3FD51EB851EB851EBFF2AAAAAAAAAAAB40200 00000000000401AAAAAAAAAAAAA3FD77D88E99FAB0CBFF2AAAAAAAAAAAB40200000000 00000401D5555555555553FDA0CE512956D9BBFF2AAAAAAAAAAAB40200000000000004 0200000000000003FDCCCCCCCCCCCCEBFF2AAAAAAAAAAAB40200000000000004021555 5555555553FDFBD401845C8A1BFF2AAAAAAAAAAAB40200000000000004022AAAAAAAAA AAA3FE16F1F7A80308BBFF2AAAAAAAAAAAB40200000000000004023FFFFFFFFFFFF3FE 317E4B17E4B18BFF2AAAAAAAAAAAB4021555555555555C0240000000000003FD987654 320FEDCBFF2AAAAAAAAAAAB4021555555555555C022AAAAAAAAAAAB3FD759203CAE759 2BFF2AAAAAAAAAAAB4021555555555555C0215555555555563FD55B66C77D88EABFF2A AAAAAAAAAAB4021555555555555C0200000000000013FD38E38E38E38E4BFF2AAAAAAA AAAAB4021555555555555C01D5555555555573FD1F19690E08580BFF2AAAAAAAAAAAB4 021555555555555C01AAAAAAAAAAAAC3FD0857FCF746EBEBFF2AAAAAAAAAAAB4021555 555555555C0180000000000013FCE93E93E93E93EBFF2AAAAAAAAAAAB4021555555555 555C0155555555555563FCC7DEA00C22E44BFF2AAAAAAAAAAAB4021555555555555C01 2AAAAAAAAAAAB3FCAC901E573AC8FBFF2AAAAAAAAAAAB4021555555555555C01000000 00000003FC97530ECA8641EBFF2AAAAAAAAAAAB4021555555555555C00AAAAAAAAAAAA B3FC88277166054F2BFF2AAAAAAAAAAAB4021555555555555C0055555555555563FC7F 0D4629B7F0BBFF2AAAAAAAAAAAB4021555555555555C0000000000000013FC7C048D15 9E269BFF2AAAAAAAAAAAB4021555555555555BFF55555555555583FC7F0D4629B7F0CB FF2AAAAAAAAAAAB4021555555555555BFE555555555555B3FC88277166054F2BFF2AAA AAAAAAAAB4021555555555555BCC80000000000003FC97530ECA8641EBFF2AAAAAAAAA AAB40215555555555553FE555555555554F3FCAC901E573AC8EBFF2AAAAAAAAAAAB402 15555555555553FF55555555555523FCC7DEA00C22E43BFF2AAAAAAAAAAAB402155555 55555553FFFFFFFFFFFFFFC3FCE93E93E93E93CBFF2AAAAAAAAAAAB402155555555555 540055555555555533FD0857FCF746EBDBFF2AAAAAAAAAAAB4021555555555555400AA AAAAAAAAAA83FD1F19690E0857EBFF2AAAAAAAAAAAB4021555555555555400FFFFFFFF FFFFD3FD38E38E38E38E2BFF2AAAAAAAAAAAB40215555555555554012AAAAAAAAAAA93 FD55B66C77D88E7BFF2AAAAAAAAAAAB402155555555555540155555555555543FD7592 03CAE7591BFF2AAAAAAAAAAAB40215555555555554017FFFFFFFFFFFF3FD987654320F EDBBFF2AAAAAAAAAAAB4021555555555555401AAAAAAAAAAAAA3FDBE635DAD524C9BFF 2AAAAAAAAAAAB4021555555555555401D5555555555553FDE759203CAE758BFF2AAAAA AAAAAAB402155555555555540200000000000003FE09ABCDF012345BFF2AAAAAAAAAAA B402155555555555540215555555555553FE212F684BDA12FBFF2AAAAAAAAAAAB40215 555555555554022AAAAAAAAAAAA3FE3A375F31AED69BFF2AAAAAAAAAAAB40215555555 555554023FFFFFFFFFFFF3FE54C3B2A1907F6BFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC 0240000000000003FDE38E38E38E38CBFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC022AAA AAAAAAAAB3FDC0A9E87C65A42BFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC021555555555 5563FDA0CE512956D9ABFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC0200000000000013FD 83FB72EA61D94BFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC01D5555555555573FD6A314D BF86A30BFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FD536FE1A8C536 EBFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC0180000000000013FD3FB72EA61D94FBFF2A AAAAAAAAAAB4022AAAAAAAAAAAAC0155555555555563FD2F0734B78FBD2BFF2AAAAAAA AAAAB4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FD215FF3DD1BAF7BFF2AAAAAAAAAAAB4 022AAAAAAAAAAAAC0100000000000003FD16C16C16C16BFBFF2AAAAAAAAAAAB4022AAA AAAAAAAAAC00AAAAAAAAAAAAB3FD0F2B9D6480F29BFF2AAAAAAAAAAAB4022AAAAAAAAA AAAC0055555555555563FD0A9E87C65A436BFF2AAAAAAAAAAAB4022AAAAAAAAAAAAC00 00000000000013FD091A2B3C4D5E5BFF2AAAAAAAAAAAB4022AAAAAAAAAAAABFF555555 55555583FD0A9E87C65A436BFF2AAAAAAAAAAAB4022AAAAAAAAAAAABFE555555555555 B3FD0F2B9D6480F29BFF2AAAAAAAAAAAB4022AAAAAAAAAAAABCC80000000000003FD16 C16C16C16BFBFF2AAAAAAAAAAAB4022AAAAAAAAAAAA3FE555555555554F3FD215FF3DD 1BAF7BFF2AAAAAAAAAAAB4022AAAAAAAAAAAA3FF55555555555523FD2F0734B78FBD2B FF2AAAAAAAAAAAB4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD3FB72EA61D94EBFF2AAA AAAAAAAAB4022AAAAAAAAAAAA40055555555555533FD536FE1A8C536DBFF2AAAAAAAAA AAB4022AAAAAAAAAAAA400AAAAAAAAAAAA83FD6A314DBF86A2FBFF2AAAAAAAAAAAB402 2AAAAAAAAAAAA400FFFFFFFFFFFFD3FD83FB72EA61D92BFF2AAAAAAAAAAAB4022AAAAA AAAAAAA4012AAAAAAAAAAA93FDA0CE512956D97BFF2AAAAAAAAAAAB4022AAAAAAAAAAA A40155555555555543FDC0A9E87C65A41BFF2AAAAAAAAAAAB4022AAAAAAAAAAAA4017F FFFFFFFFFFF3FDE38E38E38E38BBFF2AAAAAAAAAAAB4022AAAAAAAAAAAA401AAAAAAAA AAAAA3FE04BDA12F684BCBFF2AAAAAAAAAAAB4022AAAAAAAAAAAA401D5555555555553 FE1938827716604BFF2AAAAAAAAAAAB4022AAAAAAAAAAAA40200000000000003FE2F37 C048D159DBFF2AAAAAAAAAAAB4022AAAAAAAAAAAA40215555555555553FE46BB5AA499 387BFF2AAAAAAAAAAAB4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE5FC3518A6DFC1BFF 2AAAAAAAAAAAB4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FE7A4FA4FA4FA4EBFF2AAAAA AAAAAAB4023FFFFFFFFFFFFC0240000000000003FE1999999999999BFF2AAAAAAAAAAA B4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FE08277166054F4BFF2AAAAAAAAAAAB4023F FFFFFFFFFFFC0215555555555563FDF0734B78FBD3FBFF2AAAAAAAAAAAB4023FFFFFFF FFFFFC0200000000000013FDD3A06D3A06D39BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC 01D5555555555573FDB9D6480F2B9D5BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC01AAAA AAAAAAAAC3FDA314DBF86A313BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC018000000000 0013FD8F5C28F5C28F4BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC0155555555555563FD 7EAC2F0734B77BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FD7104EE 2CC0A9CBFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC0100000000000003FD666666666666 4BFF2AAAAAAAAAAAB4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD5ED097B425ECEBFF2A AAAAAAAAAAB4023FFFFFFFFFFFFC0055555555555563FD5A438215FF3DBBFF2AAAAAAA AAAAB4023FFFFFFFFFFFFC0000000000000013FD58BF258BF258ABFF2AAAAAAAAAAAB4 023FFFFFFFFFFFFBFF55555555555583FD5A438215FF3DBBFF2AAAAAAAAAAAB4023FFF FFFFFFFFFBFE555555555555B3FD5ED097B425ECEBFF2AAAAAAAAAAAB4023FFFFFFFFF FFFBCC80000000000003FD6666666666664BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF3FE 555555555554F3FD7104EE2CC0A9CBFF2AAAAAAAAAAAB4023FFFFFFFFFFFF3FF555555 55555523FD7EAC2F0734B77BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF3FFFFFFFFFFFFFF C3FD8F5C28F5C28F3BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF40055555555555533FDA3 14DBF86A312BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF400AAAAAAAAAAAA83FDB9D6480F 2B9D4BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FDD3A06D3A06D37B FF2AAAAAAAAAAAB4023FFFFFFFFFFFF4012AAAAAAAAAAA93FDF0734B78FBD3CBFF2AAA AAAAAAAAB4023FFFFFFFFFFFF40155555555555543FE08277166054F3BFF2AAAAAAAAA AAB4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE1999999999998BFF2AAAAAAAAAAAB402 3FFFFFFFFFFFF401AAAAAAAAAAAAA3FE2C901E573AC8FBFF2AAAAAAAAAAAB4023FFFFF FFFFFFF401D5555555555553FE410AFF9EE8DD7BFF2AAAAAAAAAAAB4023FFFFFFFFFFF F40200000000000003FE570A3D70A3D70BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF40215 555555555553FE6E8DD7CC6BB59BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF4022AAAAAAA AAAAA3FE8795CEB240794BFF2AAAAAAAAAAAB4023FFFFFFFFFFFF4023FFFFFFFFFFFF3 FEA222222222220BFF0000000000000C024000000000000C0240000000000003FC1111 111111112BFF0000000000000C024000000000000C022AAAAAAAAAAAB3FB9690E0857F CFEBFF0000000000000C024000000000000C0215555555555563FB1722833944A5ABFF 0000000000000C024000000000000C0200000000000013FA47AE147AE148ABFF000000 0000000C024000000000000C01D5555555555573F8E573AC901E5A2BFF000000000000 0C024000000000000C01AAAAAAAAAAAACBF7E573AC901E53BBFF0000000000000C0240 00000000000C018000000000001BF9B4E81B4E81B3FBFF0000000000000C0240000000 00000C015555555555556BFA5FF3DD1BAF986BFF0000000000000C024000000000000C 012AAAAAAAAAAABBFACD2DE3EF5005ABFF0000000000000C024000000000000C010000 000000000BFB111111111110EBFF0000000000000C024000000000000C00AAAAAAAAAA AABBFB2F684BDA12F66BFF0000000000000C024000000000000C005555555555556BFB 419CA252ADB34BFF0000000000000C024000000000000C000000000000001BFB47AE14 7AE1479BFF0000000000000C024000000000000BFF5555555555558BFB419CA252ADB3 4BFF0000000000000C024000000000000BFE555555555555BBFB2F684BDA12F67BFF00 00000000000C024000000000000BCC8000000000000BFB1111111111110BFF00000000 00000C0240000000000003FE555555555554FBFACD2DE3EF5005FBFF0000000000000C 0240000000000003FF5555555555552BFA5FF3DD1BAF98CBFF0000000000000C024000 0000000003FFFFFFFFFFFFFFCBF9B4E81B4E81B4CBFF0000000000000C024000000000 0004005555555555553BF7E573AC901E573BFF0000000000000C024000000000000400 AAAAAAAAAAAA83F8E573AC901E570BFF0000000000000C024000000000000400FFFFFF FFFFFFD3FA47AE147AE1478BFF0000000000000C0240000000000004012AAAAAAAAAAA 93FB1722833944A54BFF0000000000000C02400000000000040155555555555543FB96 90E0857FCF6BFF0000000000000C0240000000000004017FFFFFFFFFFFF3FC11111111 11110BFF0000000000000C024000000000000401AAAAAAAAAAAAA3FC5CEB240795CEBB FF0000000000000C024000000000000401D5555555555553FCAED6A9264E20BBFF0000 000000000C02400000000000040200000000000003FD0369D0369D038BFF0000000000 000C02400000000000040215555555555553FD327104EE2CC0BBFF0000000000000C02 40000000000004022AAAAAAAAAAAA3FD6480F2B9D6480BFF0000000000000C02400000 00000004023FFFFFFFFFFFF3FD9999999999999BFF0000000000000C022AAAAAAAAAAA BC0240000000000003FB50C83FB72EA6BBFF0000000000000C022AAAAAAAAAAABC022A AAAAAAAAAAB3FA8A6DFC3518A84BFF0000000000000C022AAAAAAAAAAABC0215555555 555563F91722833944A7ABFF0000000000000C022AAAAAAAAAAABC020000000000001B F86C16C16C16BB9BFF0000000000000C022AAAAAAAAAAABC01D555555555557BFA2956 D9B1DF60FBFF0000000000000C022AAAAAAAAAAABC01AAAAAAAAAAAACBFADF623A67EA C1FBFF0000000000000C022AAAAAAAAAAABC018000000000001BFB3E93E93E93E8CBFF 0000000000000C022AAAAAAAAAAABC015555555555556BFB8153D0F8CB47FBFF000000 0000000C022AAAAAAAAAAABC012AAAAAAAAAAABBFBB7F0D4629B7E9BFF000000000000 0C022AAAAAAAAAAABC010000000000000BFBE26AF37C048CABFF0000000000000C022A AAAAAAAAAABC00AAAAAAAAAAAABBFC0061172283391BFF0000000000000C022AAAAAAA AAAABC005555555555556BFC097B425ED0978BFF0000000000000C022AAAAAAAAAAABC 000000000000001BFC0C83FB72EA61BBFF0000000000000C022AAAAAAAAAAABBFF5555 555555558BFC097B425ED0978BFF0000000000000C022AAAAAAAAAAABBFE5555555555 55BBFC0061172283392BFF0000000000000C022AAAAAAAAAAABBCC8000000000000BFB E26AF37C048CCBFF0000000000000C022AAAAAAAAAAAB3FE555555555554FBFBB7F0D4 629B7ECBFF0000000000000C022AAAAAAAAAAAB3FF5555555555552BFB8153D0F8CB48 2BFF0000000000000C022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFB3E93E93E93E8FBFF00 00000000000C022AAAAAAAAAAAB4005555555555553BFADF623A67EAC26BFF00000000 00000C022AAAAAAAAAAAB400AAAAAAAAAAAA8BFA2956D9B1DF61DBFF0000000000000C 022AAAAAAAAAAAB400FFFFFFFFFFFFDBF86C16C16C16C00BFF0000000000000C022AAA AAAAAAAAB4012AAAAAAAAAAA93F91722833944A5FBFF0000000000000C022AAAAAAAAA AAB40155555555555543FA8A6DFC3518A74BFF0000000000000C022AAAAAAAAAAAB401 7FFFFFFFFFFFF3FB50C83FB72EA65BFF0000000000000C022AAAAAAAAAAAB401AAAAAA AAAAAAA3FBE87C65A43821BBFF0000000000000C022AAAAAAAAAAAB401D55555555555 53FC4629B7F0D462DBFF0000000000000C022AAAAAAAAAAAB40200000000000003FC9E 26AF37C0491BFF0000000000000C022AAAAAAAAAAAB40215555555555553FCFC3518A6 DFC38BFF0000000000000C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FD302A7A1F19691B FF0000000000000C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FD654320FEDCBAABFF0000 000000000C021555555555556C0240000000000003FA23456789ABCE6BFF0000000000 000C021555555555556C022AAAAAAAAAAAB3F5845C8A0CE5308BFF0000000000000C02 1555555555556C021555555555556BF9E573AC901E556BFF0000000000000C02155555 5555556C020000000000001BFAD950C83FB72D6BFF0000000000000C02155555555555 6C01D555555555557BFB53D0F8CB486FCBFF0000000000000C021555555555556C01AA AAAAAAAAAACBFBAED6A9264E204BFF0000000000000C021555555555556C0180000000 00001BFBFDB97530ECA80BFF0000000000000C021555555555556C015555555555556B FC203CAE759203ABFF0000000000000C021555555555556C012AAAAAAAAAAABBFC3B8B 302A7A1EFBFF0000000000000C021555555555556C010000000000000BFC50C83FB72E A60BFF0000000000000C021555555555556C00AAAAAAAAAAAABBFC5FF3DD1BAF98CBFF 0000000000000C021555555555556C005555555555556BFC690E0857FCF73BFF000000 0000000C021555555555556C000000000000001BFC6C16C16C16C15BFF000000000000 0C021555555555556BFF5555555555558BFC690E0857FCF72BFF0000000000000C0215 55555555556BFE555555555555BBFC5FF3DD1BAF98CBFF0000000000000C0215555555 55556BCC8000000000000BFC50C83FB72EA60BFF0000000000000C0215555555555563 FE555555555554FBFC3B8B302A7A1F0BFF0000000000000C0215555555555563FF5555 555555552BFC203CAE759203BBFF0000000000000C0215555555555563FFFFFFFFFFFF FFCBFBFDB97530ECA85BFF0000000000000C0215555555555564005555555555553BFB AED6A9264E209BFF0000000000000C021555555555556400AAAAAAAAAAAA8BFB53D0F8 CB48703BFF0000000000000C021555555555556400FFFFFFFFFFFFDBFAD950C83FB72E ABFF0000000000000C0215555555555564012AAAAAAAAAAA9BF9E573AC901E575BFF00 00000000000C02155555555555640155555555555543F5845C8A0CE5136BFF00000000 00000C0215555555555564017FFFFFFFFFFFF3FA23456789ABCDFBFF0000000000000C 021555555555556401AAAAAAAAAAAAA3FB2956D9B1DF626BFF0000000000000C021555 555555556401D5555555555553FBCD2DE3EF50064BFF0000000000000C021555555555 55640200000000000003FC3E93E93E93E96BFF0000000000000C021555555555556402 15555555555553FC9CA252ADB363DBFF0000000000000C0215555555555564022AAAAA AAAAAAA3FD0061172283394BFF0000000000000C0215555555555564023FFFFFFFFFFF F3FD3579BE02468ACBFF0000000000000C020000000000001C024000000000000BF7B4 E81B4E81AD2BFF0000000000000C020000000000001C022AAAAAAAAAAABBFA4DBF86A3 14DA8BFF0000000000000C020000000000001C021555555555556BFB264E209DC597AB FF0000000000000C020000000000001C020000000000001BFB999999999998FBFF0000 000000000C020000000000001C01D555555555557BFC0061172283390BFF0000000000 000C020000000000001C01AAAAAAAAAAAACBFC2DE3EF5006114BFF0000000000000C02 0000000000001C018000000000001BFC5555555555552BFF0000000000000C02000000 0000001C015555555555556BFC76B549327104ABFF0000000000000C02000000000000 1C012AAAAAAAAAAABBFC9203CAE7591FFBFF0000000000000C020000000000001C0100 00000000000BFCA740DA740DA70BFF0000000000000C020000000000001C00AAAAAAAA AAAABBFCB66C77D88E99CBFF0000000000000C020000000000001C005555555555556B FCBF86A314DBF84BFF0000000000000C020000000000001C000000000000001BFCC28F 5C28F5C26BFF0000000000000C020000000000001BFF5555555555558BFCBF86A314DB F83BFF0000000000000C020000000000001BFE555555555555BBFCB66C77D88E99DBFF 0000000000000C020000000000001BCC8000000000000BFCA740DA740DA71BFF000000 0000000C0200000000000013FE555555555554FBFC9203CAE759201BFF000000000000 0C0200000000000013FF5555555555552BFC76B549327104CBFF0000000000000C0200 000000000013FFFFFFFFFFFFFFCBFC5555555555553BFF0000000000000C0200000000 000014005555555555553BFC2DE3EF5006115BFF0000000000000C0200000000000014 00AAAAAAAAAAAA8BFC0061172283393BFF0000000000000C020000000000001400FFFF FFFFFFFFDBFB9999999999997BFF0000000000000C0200000000000014012AAAAAAAAA AA9BFB264E209DC597FBFF0000000000000C0200000000000014015555555555554BFA 4DBF86A314DBABFF0000000000000C0200000000000014017FFFFFFFFFFFFBF7B4E81B 4E81B29BFF0000000000000C020000000000001401AAAAAAAAAAAAA3F9F19690E08581 1BFF0000000000000C020000000000001401D5555555555553FB203CAE7592042BFF00 00000000000C02000000000000140200000000000003FBD0369D0369D0BBFF00000000 00000C02000000000000140215555555555553FC4629B7F0D462CBFF0000000000000C 0200000000000014022AAAAAAAAAAAA3FCAA49938827717BFF0000000000000C020000 0000000014023FFFFFFFFFFFF3FD0A3D70A3D70A4BFF0000000000000C01D555555555 557C024000000000000BFA6C16C16C16C12BFF0000000000000C01D555555555557C02 2AAAAAAAAAAABBFB419CA252ADB30BFF0000000000000C01D555555555557C02155555 5555556BFBC10AFF9EE8DD2BFF0000000000000C01D555555555557C02000000000000 1BFC1A2B3C4D5E6F4BFF0000000000000C01D555555555557C01D555555555557BFC4D BF86A314DBCBFF0000000000000C01D555555555557C01AAAAAAAAAAAACBFC7B425ED0 97B40BFF0000000000000C01D555555555557C018000000000001BFCA2B3C4D5E6F7EB FF0000000000000C01D555555555557C015555555555556BFCC413B8B302A78BFF0000 000000000C01D555555555557C012AAAAAAAAAAABBFCDF623A67EAC2DBFF0000000000 000C01D555555555557C010000000000000BFCF49F49F49F49EBFF0000000000000C01 D555555555557C00AAAAAAAAAAAABBFD01E573AC901E5BFF0000000000000C01D55555 5555557C005555555555556BFD0672894AB6CD8BFF0000000000000C01D55555555555 7C000000000000001BFD07F6E5D4C3B29BFF0000000000000C01D555555555557BFF55 55555555558BFD0672894AB6CD8BFF0000000000000C01D555555555557BFE55555555 5555BBFD01E573AC901E5BFF0000000000000C01D555555555557BCC8000000000000B FCF49F49F49F49EBFF0000000000000C01D5555555555573FE555555555554FBFCDF62 3A67EAC2EBFF0000000000000C01D5555555555573FF5555555555552BFCC413B8B302 A79BFF0000000000000C01D5555555555573FFFFFFFFFFFFFFCBFCA2B3C4D5E6F80BFF 0000000000000C01D5555555555574005555555555553BFC7B425ED097B42BFF000000 0000000C01D555555555557400AAAAAAAAAAAA8BFC4DBF86A314DC0BFF000000000000 0C01D555555555557400FFFFFFFFFFFFDBFC1A2B3C4D5E6F9BFF0000000000000C01D5 555555555574012AAAAAAAAAAA9BFBC10AFF9EE8DD9BFF0000000000000C01D5555555 555574015555555555554BFB419CA252ADB37BFF0000000000000C01D5555555555574 017FFFFFFFFFFFFBFA6C16C16C16C19BFF0000000000000C01D555555555557401AAAA AAAAAAAAABF7E573AC901E56DBFF0000000000000C01D555555555557401D555555555 5553FA0AFF9EE8DD7CFBFF0000000000000C01D55555555555740200000000000003FB 3579BE02468B2BFF0000000000000C01D55555555555740215555555555553FBF19690 E0857FEBFF0000000000000C01D5555555555574022AAAAAAAAAAAA3FC5CEB240795CE ABFF0000000000000C01D5555555555574023FFFFFFFFFFFF3FCC71C71C71C71BBFF00 00000000000C01AAAAAAAAAAAACC024000000000000BFB3E93E93E93E99BFF00000000 00000C01AAAAAAAAAAAACC022AAAAAAAAAAABBFBCA252ADB363C0BFF0000000000000C 01AAAAAAAAAAAACC021555555555556BFC24C9C413B8B31BFF0000000000000C01AAAA AAAAAAAACC020000000000001BFC5E6F8091A2B3CBFF0000000000000C01AAAAAAAAAA AACC01D555555555557BFC9203CAE759204BFF0000000000000C01AAAAAAAAAAAACC01 AAAAAAAAAAAACBFCBF86A314DBF88BFF0000000000000C01AAAAAAAAAAAACC01800000 0000001BFCE6F8091A2B3C6BFF0000000000000C01AAAAAAAAAAAACC01555555555555 6BFD042BFE7BA3760BFF0000000000000C01AAAAAAAAAAAACC012AAAAAAAAAAABBFD11 D33F561783BBFF0000000000000C01AAAAAAAAAAAACC010000000000000BFD1C71C71C 71C73BFF0000000000000C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFD240795CEB2409B FF0000000000000C01AAAAAAAAAAAACC005555555555556BFD2894AB6CD8EFCBFF0000 000000000C01AAAAAAAAAAAACC000000000000001BFD2A1907F6E5D4DBFF0000000000 000C01AAAAAAAAAAAACBFF5555555555558BFD2894AB6CD8EFCBFF0000000000000C01 AAAAAAAAAAAACBFE555555555555BBFD240795CEB2409BFF0000000000000C01AAAAAA AAAAAACBCC8000000000000BFD1C71C71C71C73BFF0000000000000C01AAAAAAAAAAAA C3FE555555555554FBFD11D33F561783BBFF0000000000000C01AAAAAAAAAAAAC3FF55 55555555552BFD042BFE7BA3760BFF0000000000000C01AAAAAAAAAAAAC3FFFFFFFFFF FFFFCBFCE6F8091A2B3C7BFF0000000000000C01AAAAAAAAAAAAC4005555555555553B FCBF86A314DBF8ABFF0000000000000C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFC9203 CAE759208BFF0000000000000C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFC5E6F8091A2 B41BFF0000000000000C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFC24C9C413B8B35BFF 0000000000000C01AAAAAAAAAAAAC4015555555555554BFBCA252ADB363C7BFF000000 0000000C01AAAAAAAAAAAAC4017FFFFFFFFFFFFBFB3E93E93E93E9DBFF000000000000 0C01AAAAAAAAAAAAC401AAAAAAAAAAAAABFA4DBF86A314DCEBFF0000000000000C01AA AAAAAAAAAAC401D555555555555BF4845C8A0CE5444BFF0000000000000C01AAAAAAAA AAAAC40200000000000003FA59E26AF37C044BFF0000000000000C01AAAAAAAAAAAAC4 0215555555555553FB690E0857FCF6EBFF0000000000000C01AAAAAAAAAAAAC4022AAA AAAAAAAAA3FC18A6DFC3518A2BFF0000000000000C01AAAAAAAAAAAAC4023FFFFFFFFF FFF3FC82D82D82D82D3BFF0000000000000C018000000000001C024000000000000BFB B4E81B4E81B4DBFF0000000000000C018000000000001C022AAAAAAAAAAABBFC203CAE 759203ABFF0000000000000C018000000000001C021555555555556BFC5FF3DD1BAF98 BBFF0000000000000C018000000000001C020000000000001BFC9999999999996BFF00 00000000000C018000000000001C01D555555555557BFCCD2DE3EF5005EBFF00000000 00000C018000000000001C01AAAAAAAAAAAACBFCFAB0BC1CD2DE2BFF0000000000000C 018000000000001C018000000000001BFD1111111111110BFF0000000000000C018000 000000001C015555555555556BFD21C10AFF9EE8DBFF0000000000000C018000000000 001C012AAAAAAAAAAABBFD2F684BDA12F68BFF0000000000000C018000000000001C01 0000000000000BFD3A06D3A06D3A0BFF0000000000000C018000000000001C00AAAAAA AAAAAABBFD419CA252ADB36BFF0000000000000C018000000000001C00555555555555 6BFD4629B7F0D4629BFF0000000000000C018000000000001C000000000000001BFD47 AE147AE147ABFF0000000000000C018000000000001BFF5555555555558BFD4629B7F0 D4629BFF0000000000000C018000000000001BFE555555555555BBFD419CA252ADB36B FF0000000000000C018000000000001BCC8000000000000BFD3A06D3A06D3A0BFF0000 000000000C0180000000000013FE555555555554FBFD2F684BDA12F68BFF0000000000 000C0180000000000013FF5555555555552BFD21C10AFF9EE8DBFF0000000000000C01 80000000000013FFFFFFFFFFFFFFCBFD1111111111111BFF0000000000000C01800000 00000014005555555555553BFCFAB0BC1CD2DE3BFF0000000000000C01800000000000 1400AAAAAAAAAAAA8BFCCD2DE3EF50061BFF0000000000000C018000000000001400FF FFFFFFFFFFDBFC999999999999ABFF0000000000000C0180000000000014012AAAAAAA AAAA9BFC5FF3DD1BAF98FBFF0000000000000C0180000000000014015555555555554B FC203CAE759203EBFF0000000000000C0180000000000014017FFFFFFFFFFFFBFBB4E8 1B4E81B51BFF0000000000000C018000000000001401AAAAAAAAAAAAABFB1D33F56178 39BBFF0000000000000C018000000000001401D555555555555BF9E573AC901E572BFF 0000000000000C01800000000000140200000000000003F8B4E81B4E81B70BFF000000 0000000C01800000000000140215555555555553FAE573AC901E573BFF000000000000 0C0180000000000014022AAAAAAAAAAAA3FBBAF98D76B5490BFF0000000000000C0180 000000000014023FFFFFFFFFFFF3FC47AE147AE1479BFF0000000000000C0155555555 55556C024000000000000BFC0C83FB72EA61FBFF0000000000000C015555555555556C 022AAAAAAAAAAABBFC524C9C413B8B2BFF0000000000000C015555555555556C021555 555555556BFC9203CAE759203BFF0000000000000C015555555555556C020000000000 001BFCCBA987654320EBFF0000000000000C015555555555556C01D555555555557BFC FF3DD1BAF98D6BFF0000000000000C015555555555556C01AAAAAAAAAAAACBFD166054 F43E32DBFF0000000000000C015555555555556C018000000000001BFD2A1907F6E5D4 CBFF0000000000000C015555555555556C015555555555556BFD3AC901E573AC9BFF00 00000000000C015555555555556C012AAAAAAAAAAABBFD487042BFE7BA4BFF00000000 00000C015555555555556C010000000000000BFD530ECA8641FDCBFF0000000000000C 015555555555556C00AAAAAAAAAAAABBFD5AA4993882772BFF0000000000000C015555 555555556C005555555555556BFD5F31AED6A9265BFF0000000000000C015555555555 556C000000000000001BFD60B60B60B60B6BFF0000000000000C015555555555556BFF 5555555555558BFD5F31AED6A9265BFF0000000000000C015555555555556BFE555555 555555BBFD5AA4993882772BFF0000000000000C015555555555556BCC800000000000 0BFD530ECA8641FDCBFF0000000000000C0155555555555563FE555555555554FBFD48 7042BFE7BA4BFF0000000000000C0155555555555563FF5555555555552BFD3AC901E5 73AC9BFF0000000000000C0155555555555563FFFFFFFFFFFFFFCBFD2A1907F6E5D4DB FF0000000000000C0155555555555564005555555555553BFD166054F43E32EBFF0000 000000000C015555555555556400AAAAAAAAAAAA8BFCFF3DD1BAF98D9BFF0000000000 000C015555555555556400FFFFFFFFFFFFDBFCCBA9876543212BFF0000000000000C01 55555555555564012AAAAAAAAAAA9BFC9203CAE759208BFF0000000000000C01555555 55555564015555555555554BFC524C9C413B8B5BFF0000000000000C01555555555555 64017FFFFFFFFFFFFBFC0C83FB72EA61FBFF0000000000000C015555555555556401AA AAAAAAAAAAABFB8153D0F8CB48BBFF0000000000000C015555555555556401D5555555 55555BFABAF98D76B5499BFF0000000000000C0155555555555564020000000000000B F86C16C16C16C10BFF0000000000000C01555555555555640215555555555553FA1D33 F56178393BFF0000000000000C0155555555555564022AAAAAAAAAAAA3FB56D9B1DF62 3A0BFF0000000000000C0155555555555564023FFFFFFFFFFFF3FC159E26AF37C01BFF 0000000000000C012AAAAAAAAAAABC024000000000000BFC3579BE02468ADBFF000000 0000000C012AAAAAAAAAAABC022AAAAAAAAAAABBFC7B425ED097B40BFF000000000000 0C012AAAAAAAAAAABC021555555555556BFCBAF98D76B5491BFF0000000000000C012A AAAAAAAAAABC020000000000001BFCF49F49F49F49CBFF0000000000000C012AAAAAAA AAAABC01D555555555557BFD1419CA252ADB2BFF0000000000000C012AAAAAAAAAAABC 01AAAAAAAAAAAACBFD2ADB363BEC474BFF0000000000000C012AAAAAAAAAAABC018000 000000001BFD3E93E93E93E93BFF0000000000000C012AAAAAAAAAAABC015555555555 556BFD4F43E32D21C10BFF0000000000000C012AAAAAAAAAAABC012AAAAAAAAAAABBFD 5CEB240795CEBBFF0000000000000C012AAAAAAAAAAABC010000000000000BFD6789AB CDF0123BFF0000000000000C012AAAAAAAAAAABC00AAAAAAAAAAAABBFD6F1F7A80308B 9BFF0000000000000C012AAAAAAAAAAABC005555555555556BFD73AC901E573ACBFF00 00000000000C012AAAAAAAAAAABC000000000000001BFD7530ECA8641FDBFF00000000 00000C012AAAAAAAAAAABBFF5555555555558BFD73AC901E573ACBFF0000000000000C 012AAAAAAAAAAABBFE555555555555BBFD6F1F7A80308B9BFF0000000000000C012AAA AAAAAAAABBCC8000000000000BFD6789ABCDF0123BFF0000000000000C012AAAAAAAAA AAB3FE555555555554FBFD5CEB240795CEBBFF0000000000000C012AAAAAAAAAAAB3FF 5555555555552BFD4F43E32D21C10BFF0000000000000C012AAAAAAAAAAAB3FFFFFFFF FFFFFFCBFD3E93E93E93E94BFF0000000000000C012AAAAAAAAAAAB400555555555555 3BFD2ADB363BEC475BFF0000000000000C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFD14 19CA252ADB3BFF0000000000000C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFCF49F49F4 9F4A0BFF0000000000000C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFCBAF98D76B5496B FF0000000000000C012AAAAAAAAAAAB4015555555555554BFC7B425ED097B43BFF0000 000000000C012AAAAAAAAAAAB4017FFFFFFFFFFFFBFC3579BE02468ADBFF0000000000 000C012AAAAAAAAAAAB401AAAAAAAAAAAAABFBD33F5617839A5BFF0000000000000C01 2AAAAAAAAAAAB401D555555555555BFB2F684BDA12F67BFF0000000000000C012AAAAA AAAAAAB4020000000000000BF9FDB97530ECA78BFF0000000000000C012AAAAAAAAAAA B40215555555555553F8E573AC901E56DBFF0000000000000C012AAAAAAAAAAAB4022A AAAAAAAAAAA3FB04EE2CC0A9E84BFF0000000000000C012AAAAAAAAAAAB4023FFFFFFF FFFFF3FBD950C83FB72E6BFF0000000000000C010000000000000C024000000000000B FC5555555555555BFF0000000000000C010000000000000C022AAAAAAAAAAABBFC9B1D F623A67EABFF0000000000000C010000000000000C021555555555556BFCDAD524C9C4 13BBFF0000000000000C010000000000000C020000000000001BFD0A3D70A3D70A3BFF 0000000000000C010000000000000C01D555555555557BFD240795CEB2407BFF000000 0000000C010000000000000C01AAAAAAAAAAAACBFD3AC901E573AC9BFF000000000000 0C010000000000000C018000000000001BFD4E81B4E81B4E8BFF0000000000000C0100 00000000000C015555555555556BFD5F31AED6A9265BFF0000000000000C0100000000 00000C012AAAAAAAAAAABBFD6CD8EFB11D340BFF0000000000000C010000000000000C 010000000000000BFD7777777777778BFF0000000000000C010000000000000C00AAAA AAAAAAAABBFD7F0D4629B7F0EBFF0000000000000C010000000000000C005555555555 556BFD839A5BC7DEA01BFF0000000000000C010000000000000C000000000000001BFD 851EB851EB852BFF0000000000000C010000000000000BFF5555555555558BFD839A5B C7DEA01BFF0000000000000C010000000000000BFE555555555555BBFD7F0D4629B7F0 EBFF0000000000000C010000000000000BCC8000000000000BFD7777777777778BFF00 00000000000C0100000000000003FE555555555554FBFD6CD8EFB11D340BFF00000000 00000C0100000000000003FF5555555555552BFD5F31AED6A9265BFF0000000000000C 0100000000000003FFFFFFFFFFFFFFCBFD4E81B4E81B4E9BFF0000000000000C010000 0000000004005555555555553BFD3AC901E573ACABFF0000000000000C010000000000 000400AAAAAAAAAAAA8BFD240795CEB2408BFF0000000000000C010000000000000400 FFFFFFFFFFFFDBFD0A3D70A3D70A5BFF0000000000000C0100000000000004012AAAAA AAAAAA9BFCDAD524C9C4140BFF0000000000000C010000000000000401555555555555 4BFC9B1DF623A67EDBFF0000000000000C0100000000000004017FFFFFFFFFFFFBFC55 55555555557BFF0000000000000C010000000000000401AAAAAAAAAAAAABFC097B425E D097CBFF0000000000000C010000000000000401D555555555555BFB6F1F7A80308BBB FF0000000000000C0100000000000004020000000000000BFA7E4B17E4B17E4BFF0000 000000000C0100000000000004021555555555555BF4845C8A0CE522BBFF0000000000 000C0100000000000004022AAAAAAAAAAAA3FA8A6DFC3518A60BFF0000000000000C01 00000000000004023FFFFFFFFFFFF3FB9999999999992BFF0000000000000C00AAAAAA AAAAAABC024000000000000BFC6C16C16C16C15BFF0000000000000C00AAAAAAAAAAAA BC022AAAAAAAAAAABBFCB1DF623A67EAABFF0000000000000C00AAAAAAAAAAAABC0215 55555555556BFCF19690E0857FBBFF0000000000000C00AAAAAAAAAAAABC0200000000 00001BFD159E26AF37C03BFF0000000000000C00AAAAAAAAAAAABC01D555555555557B FD2F684BDA12F67BFF0000000000000C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFD4629 B7F0D4629BFF0000000000000C00AAAAAAAAAAAABC018000000000001BFD59E26AF37C 048BFF0000000000000C00AAAAAAAAAAAABC015555555555556BFD6A9264E209DC5BFF 0000000000000C00AAAAAAAAAAAABC012AAAAAAAAAAABBFD7839A5BC7DEA0BFF000000 0000000C00AAAAAAAAAAAABC010000000000000BFD82D82D82D82D8BFF000000000000 0C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFD8A6DFC3518A6EBFF0000000000000C00AA AAAAAAAAAABC005555555555556BFD8EFB11D33F561BFF0000000000000C00AAAAAAAA AAAABC000000000000001BFD907F6E5D4C3B2BFF0000000000000C00AAAAAAAAAAAABB FF5555555555558BFD8EFB11D33F561BFF0000000000000C00AAAAAAAAAAAABBFE5555 55555555BBFD8A6DFC3518A6EBFF0000000000000C00AAAAAAAAAAAABBCC8000000000 000BFD82D82D82D82D8BFF0000000000000C00AAAAAAAAAAAAB3FE555555555554FBFD 7839A5BC7DEA0BFF0000000000000C00AAAAAAAAAAAAB3FF5555555555552BFD6A9264 E209DC5BFF0000000000000C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD59E26AF37C04 9BFF0000000000000C00AAAAAAAAAAAAB4005555555555553BFD4629B7F0D462ABFF00 00000000000C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFD2F684BDA12F68BFF00000000 00000C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFD159E26AF37C05BFF0000000000000C 00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFCF19690E085800BFF0000000000000C00AAAA AAAAAAAAB4015555555555554BFCB1DF623A67EADBFF0000000000000C00AAAAAAAAAA AAB4017FFFFFFFFFFFFBFC6C16C16C16C17BFF0000000000000C00AAAAAAAAAAAAB401 AAAAAAAAAAAAABFC203CAE759203CBFF0000000000000C00AAAAAAAAAAAAB401D55555 5555555BFB9CA252ADB363BBFF0000000000000C00AAAAAAAAAAAAB402000000000000 0BFAD950C83FB72E4BFF0000000000000C00AAAAAAAAAAAAB4021555555555555BF884 5C8A0CE5123BFF0000000000000C00AAAAAAAAAAAAB4022AAAAAAAAAAAA3FA2F684BDA 12F5CBFF0000000000000C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FB6C16C16C16C12B FF0000000000000C005555555555556C024000000000000BFC79BE02468ACF1BFF0000 000000000C005555555555556C022AAAAAAAAAAABBFCBF86A314DBF86BFF0000000000 000C005555555555556C021555555555556BFCFF3DD1BAF98D9BFF0000000000000C00 5555555555556C020000000000001BFD1C71C71C71C71BFF0000000000000C00555555 5555556C01D555555555557BFD363BEC474CFD5BFF0000000000000C00555555555555 6C01AAAAAAAAAAAACBFD4CFD585E0E697BFF0000000000000C005555555555556C0180 00000000001BFD60B60B60B60B6BFF0000000000000C005555555555556C0155555555 55556BFD7166054F43E33BFF0000000000000C005555555555556C012AAAAAAAAAAABB FD7F0D4629B7F0EBFF0000000000000C005555555555556C010000000000000BFD89AB CDF012346BFF0000000000000C005555555555556C00AAAAAAAAAAAABBFD91419CA252 ADCBFF0000000000000C005555555555556C005555555555556BFD95CEB240795CFBFF 0000000000000C005555555555556C000000000000001BFD97530ECA86420BFF000000 0000000C005555555555556BFF5555555555558BFD95CEB240795CFBFF000000000000 0C005555555555556BFE555555555555BBFD91419CA252ADCBFF0000000000000C0055 55555555556BCC8000000000000BFD89ABCDF012346BFF0000000000000C0055555555 555563FE555555555554FBFD7F0D4629B7F0EBFF0000000000000C0055555555555563 FF5555555555552BFD7166054F43E33BFF0000000000000C0055555555555563FFFFFF FFFFFFFFCBFD60B60B60B60B7BFF0000000000000C0055555555555564005555555555 553BFD4CFD585E0E698BFF0000000000000C005555555555556400AAAAAAAAAAAA8BFD 363BEC474CFD6BFF0000000000000C005555555555556400FFFFFFFFFFFFDBFD1C71C7 1C71C73BFF0000000000000C0055555555555564012AAAAAAAAAAA9BFCFF3DD1BAF98D CBFF0000000000000C0055555555555564015555555555554BFCBF86A314DBF89BFF00 00000000000C0055555555555564017FFFFFFFFFFFFBFC79BE02468ACF3BFF00000000 00000C005555555555556401AAAAAAAAAAAAABFC2DE3EF5006118BFF0000000000000C 005555555555556401D555555555555BFBB7F0D4629B7F3BFF0000000000000C005555 5555555564020000000000000BFB07F6E5D4C3B2ABFF0000000000000C005555555555 5564021555555555555BF92F684BDA12F71BFF0000000000000C005555555555556402 2AAAAAAAAAAAA3F9F19690E0857D8BFF0000000000000C0055555555555564023FFFFF FFFFFFF3FB50C83FB72EA58BFF0000000000000C000000000000001C02400000000000 0BFC7E4B17E4B17E5BFF0000000000000C000000000000001C022AAAAAAAAAAABBFCC4 13B8B302A7ABFF0000000000000C000000000000001C021555555555556BFD01E573AC 901E6BFF0000000000000C000000000000001C020000000000001BFD1EB851EB851EBB FF0000000000000C000000000000001C01D555555555557BFD388277166054FBFF0000 000000000C000000000000001C01AAAAAAAAAAAACBFD4F43E32D21C11BFF0000000000 000C000000000000001C018000000000001BFD62FC962FC9630BFF0000000000000C00 0000000000001C015555555555556BFD73AC901E573ADBFF0000000000000C00000000 0000001C012AAAAAAAAAAABBFD8153D0F8CB488BFF0000000000000C00000000000000 1C010000000000000BFD8BF258BF258C0BFF0000000000000C000000000000001C00AA AAAAAAAAAABBFD9388277166056BFF0000000000000C000000000000001C0055555555 55556BFD98153D0F8CB49BFF0000000000000C000000000000001C000000000000001B FD999999999999ABFF0000000000000C000000000000001BFF5555555555558BFD9815 3D0F8CB49BFF0000000000000C000000000000001BFE555555555555BBFD9388277166 056BFF0000000000000C000000000000001BCC8000000000000BFD8BF258BF258C0BFF 0000000000000C0000000000000013FE555555555554FBFD8153D0F8CB488BFF000000 0000000C0000000000000013FF5555555555552BFD73AC901E573ADBFF000000000000 0C0000000000000013FFFFFFFFFFFFFFCBFD62FC962FC9631BFF0000000000000C0000 000000000014005555555555553BFD4F43E32D21C12BFF0000000000000C0000000000 00001400AAAAAAAAAAAA8BFD3882771660550BFF0000000000000C0000000000000014 00FFFFFFFFFFFFDBFD1EB851EB851EDBFF0000000000000C0000000000000014012AAA AAAAAAAA9BFD01E573AC901E8BFF0000000000000C0000000000000014015555555555 554BFCC413B8B302A7DBFF0000000000000C0000000000000014017FFFFFFFFFFFFBFC 7E4B17E4B17E7BFF0000000000000C000000000000001401AAAAAAAAAAAAABFC327104 EE2CC0CBFF0000000000000C000000000000001401D555555555555BFBC10AFF9EE8DD BBFF0000000000000C0000000000000014020000000000000BFB1111111111112BFF00 00000000000C0000000000000014021555555555555BF953D0F8CB48711BFF00000000 00000C0000000000000014022AAAAAAAAAAAA3F9CD2DE3EF50038BFF0000000000000C 0000000000000014023FFFFFFFFFFFF3FB47AE147AE1470BFF0000000000000BFF5555 555555558C024000000000000BFC79BE02468ACF1BFF0000000000000BFF5555555555 558C022AAAAAAAAAAABBFCBF86A314DBF86BFF0000000000000BFF5555555555558C02 1555555555556BFCFF3DD1BAF98D9BFF0000000000000BFF5555555555558C02000000 0000001BFD1C71C71C71C71BFF0000000000000BFF5555555555558C01D55555555555 7BFD363BEC474CFD5BFF0000000000000BFF5555555555558C01AAAAAAAAAAAACBFD4C FD585E0E697BFF0000000000000BFF5555555555558C018000000000001BFD60B60B60 B60B6BFF0000000000000BFF5555555555558C015555555555556BFD7166054F43E33B FF0000000000000BFF5555555555558C012AAAAAAAAAAABBFD7F0D4629B7F0EBFF0000 000000000BFF5555555555558C010000000000000BFD89ABCDF012346BFF0000000000 000BFF5555555555558C00AAAAAAAAAAAABBFD91419CA252ADCBFF0000000000000BFF 5555555555558C005555555555556BFD95CEB240795CFBFF0000000000000BFF555555 5555558C000000000000001BFD97530ECA86420BFF0000000000000BFF555555555555 8BFF5555555555558BFD95CEB240795CFBFF0000000000000BFF5555555555558BFE55 5555555555BBFD91419CA252ADCBFF0000000000000BFF5555555555558BCC80000000 00000BFD89ABCDF012346BFF0000000000000BFF55555555555583FE555555555554FB FD7F0D4629B7F0EBFF0000000000000BFF55555555555583FF5555555555552BFD7166 054F43E33BFF0000000000000BFF55555555555583FFFFFFFFFFFFFFCBFD60B60B60B6 0B7BFF0000000000000BFF55555555555584005555555555553BFD4CFD585E0E698BFF 0000000000000BFF5555555555558400AAAAAAAAAAAA8BFD363BEC474CFD6BFF000000 0000000BFF5555555555558400FFFFFFFFFFFFDBFD1C71C71C71C73BFF000000000000 0BFF55555555555584012AAAAAAAAAAA9BFCFF3DD1BAF98DCBFF0000000000000BFF55 555555555584015555555555554BFCBF86A314DBF89BFF0000000000000BFF55555555 555584017FFFFFFFFFFFFBFC79BE02468ACF3BFF0000000000000BFF55555555555584 01AAAAAAAAAAAAABFC2DE3EF5006118BFF0000000000000BFF5555555555558401D555 555555555BFBB7F0D4629B7F3BFF0000000000000BFF55555555555584020000000000 000BFB07F6E5D4C3B2ABFF0000000000000BFF55555555555584021555555555555BF9 2F684BDA12F71BFF0000000000000BFF55555555555584022AAAAAAAAAAAA3F9F19690 E0857D8BFF0000000000000BFF55555555555584023FFFFFFFFFFFF3FB50C83FB72EA5 8BFF0000000000000BFE555555555555BC024000000000000BFC6C16C16C16C19BFF00 00000000000BFE555555555555BC022AAAAAAAAAAABBFCB1DF623A67EAABFF00000000 00000BFE555555555555BC021555555555556BFCF19690E0857FDBFF0000000000000B FE555555555555BC020000000000001BFD159E26AF37C04BFF0000000000000BFE5555 55555555BC01D555555555557BFD2F684BDA12F68BFF0000000000000BFE5555555555 55BC01AAAAAAAAAAAACBFD4629B7F0D462ABFF0000000000000BFE555555555555BC01 8000000000001BFD59E26AF37C049BFF0000000000000BFE555555555555BC01555555 5555556BFD6A9264E209DC6BFF0000000000000BFE555555555555BC012AAAAAAAAAAA BBFD7839A5BC7DEA1BFF0000000000000BFE555555555555BC010000000000000BFD82 D82D82D82D9BFF0000000000000BFE555555555555BC00AAAAAAAAAAAABBFD8A6DFC35 18A6FBFF0000000000000BFE555555555555BC005555555555556BFD8EFB11D33F562B FF0000000000000BFE555555555555BC000000000000001BFD907F6E5D4C3B3BFF0000 000000000BFE555555555555BBFF5555555555558BFD8EFB11D33F562BFF0000000000 000BFE555555555555BBFE555555555555BBFD8A6DFC3518A6FBFF0000000000000BFE 555555555555BBCC8000000000000BFD82D82D82D82D9BFF0000000000000BFE555555 555555B3FE555555555554FBFD7839A5BC7DEA1BFF0000000000000BFE555555555555 B3FF5555555555552BFD6A9264E209DC6BFF0000000000000BFE555555555555B3FFFF FFFFFFFFFFCBFD59E26AF37C04ABFF0000000000000BFE555555555555B40055555555 55553BFD4629B7F0D462BBFF0000000000000BFE555555555555B400AAAAAAAAAAAA8B FD2F684BDA12F69BFF0000000000000BFE555555555555B400FFFFFFFFFFFFDBFD159E 26AF37C06BFF0000000000000BFE555555555555B4012AAAAAAAAAAA9BFCF19690E085 802BFF0000000000000BFE555555555555B4015555555555554BFCB1DF623A67EAFBFF 0000000000000BFE555555555555B4017FFFFFFFFFFFFBFC6C16C16C16C19BFF000000 0000000BFE555555555555B401AAAAAAAAAAAAABFC203CAE759203EBFF000000000000 0BFE555555555555B401D555555555555BFB9CA252ADB363FBFF0000000000000BFE55 5555555555B4020000000000000BFAD950C83FB72ECBFF0000000000000BFE55555555 5555B4021555555555555BF8845C8A0CE5143BFF0000000000000BFE555555555555B4 022AAAAAAAAAAAA3FA2F684BDA12F54BFF0000000000000BFE555555555555B4023FFF FFFFFFFFF3FB6C16C16C16C0EBFF0000000000000BCC8000000000000C024000000000 000BFC5555555555555BFF0000000000000BCC8000000000000C022AAAAAAAAAAABBFC 9B1DF623A67EABFF0000000000000BCC8000000000000C021555555555556BFCDAD524 C9C413BBFF0000000000000BCC8000000000000C020000000000001BFD0A3D70A3D70A 3BFF0000000000000BCC8000000000000C01D555555555557BFD240795CEB2407BFF00 00000000000BCC8000000000000C01AAAAAAAAAAAACBFD3AC901E573AC9BFF00000000 00000BCC8000000000000C018000000000001BFD4E81B4E81B4E8BFF0000000000000B CC8000000000000C015555555555556BFD5F31AED6A9265BFF0000000000000BCC8000 000000000C012AAAAAAAAAAABBFD6CD8EFB11D340BFF0000000000000BCC8000000000 000C010000000000000BFD7777777777778BFF0000000000000BCC8000000000000C00 AAAAAAAAAAAABBFD7F0D4629B7F0EBFF0000000000000BCC8000000000000C00555555 5555556BFD839A5BC7DEA01BFF0000000000000BCC8000000000000C00000000000000 1BFD851EB851EB852BFF0000000000000BCC8000000000000BFF5555555555558BFD83 9A5BC7DEA01BFF0000000000000BCC8000000000000BFE555555555555BBFD7F0D4629 B7F0EBFF0000000000000BCC8000000000000BCC8000000000000BFD7777777777778B FF0000000000000BCC80000000000003FE555555555554FBFD6CD8EFB11D340BFF0000 000000000BCC80000000000003FF5555555555552BFD5F31AED6A9265BFF0000000000 000BCC80000000000003FFFFFFFFFFFFFFCBFD4E81B4E81B4E9BFF0000000000000BCC 80000000000004005555555555553BFD3AC901E573ACABFF0000000000000BCC800000 0000000400AAAAAAAAAAAA8BFD240795CEB2408BFF0000000000000BCC800000000000 0400FFFFFFFFFFFFDBFD0A3D70A3D70A5BFF0000000000000BCC80000000000004012A AAAAAAAAAA9BFCDAD524C9C4140BFF0000000000000BCC800000000000040155555555 55554BFC9B1DF623A67EDBFF0000000000000BCC80000000000004017FFFFFFFFFFFFB FC5555555555557BFF0000000000000BCC8000000000000401AAAAAAAAAAAAABFC097B 425ED097CBFF0000000000000BCC8000000000000401D555555555555BFB6F1F7A8030 8BBBFF0000000000000BCC80000000000004020000000000000BFA7E4B17E4B17E4BFF 0000000000000BCC80000000000004021555555555555BF4845C8A0CE522BBFF000000 0000000BCC80000000000004022AAAAAAAAAAAA3FA8A6DFC3518A60BFF000000000000 0BCC80000000000004023FFFFFFFFFFFF3FB9999999999992BFF00000000000003FE55 5555555554FC024000000000000BFC3579BE02468AFBFF00000000000003FE55555555 5554FC022AAAAAAAAAAABBFC7B425ED097B42BFF00000000000003FE555555555554FC 021555555555556BFCBAF98D76B5493BFF00000000000003FE555555555554FC020000 000000001BFCF49F49F49F49EBFF00000000000003FE555555555554FC01D555555555 557BFD1419CA252ADB3BFF00000000000003FE555555555554FC01AAAAAAAAAAAACBFD 2ADB363BEC475BFF00000000000003FE555555555554FC018000000000001BFD3E93E9 3E93E94BFF00000000000003FE555555555554FC015555555555556BFD4F43E32D21C1 1BFF00000000000003FE555555555554FC012AAAAAAAAAAABBFD5CEB240795CECBFF00 000000000003FE555555555554FC010000000000000BFD6789ABCDF0124BFF00000000 000003FE555555555554FC00AAAAAAAAAAAABBFD6F1F7A80308BABFF00000000000003 FE555555555554FC005555555555556BFD73AC901E573ADBFF00000000000003FE5555 55555554FC000000000000001BFD7530ECA8641FEBFF00000000000003FE5555555555 54FBFF5555555555558BFD73AC901E573ADBFF00000000000003FE555555555554FBFE 555555555555BBFD6F1F7A80308BABFF00000000000003FE555555555554FBCC800000 0000000BFD6789ABCDF0124BFF00000000000003FE555555555554F3FE555555555554 FBFD5CEB240795CECBFF00000000000003FE555555555554F3FF5555555555552BFD4F 43E32D21C11BFF00000000000003FE555555555554F3FFFFFFFFFFFFFFCBFD3E93E93E 93E95BFF00000000000003FE555555555554F4005555555555553BFD2ADB363BEC476B FF00000000000003FE555555555554F400AAAAAAAAAAAA8BFD1419CA252ADB4BFF0000 0000000003FE555555555554F400FFFFFFFFFFFFDBFCF49F49F49F4A2BFF0000000000 0003FE555555555554F4012AAAAAAAAAAA9BFCBAF98D76B5498BFF00000000000003FE 555555555554F4015555555555554BFC7B425ED097B45BFF00000000000003FE555555 555554F4017FFFFFFFFFFFFBFC3579BE02468AFBFF00000000000003FE555555555554 F401AAAAAAAAAAAAABFBD33F5617839A9BFF00000000000003FE555555555554F401D5 55555555555BFB2F684BDA12F6BBFF00000000000003FE555555555554F40200000000 00000BF9FDB97530ECA88BFF00000000000003FE555555555554F40215555555555553 F8E573AC901E54DBFF00000000000003FE555555555554F4022AAAAAAAAAAAA3FB04EE 2CC0A9E80BFF00000000000003FE555555555554F4023FFFFFFFFFFFF3FBD950C83FB7 2E2BFF00000000000003FF5555555555552C024000000000000BFC0C83FB72EA61FBFF 00000000000003FF5555555555552C022AAAAAAAAAAABBFC524C9C413B8B2BFF000000 00000003FF5555555555552C021555555555556BFC9203CAE759203BFF000000000000 03FF5555555555552C020000000000001BFCCBA987654320EBFF00000000000003FF55 55555555552C01D555555555557BFCFF3DD1BAF98D6BFF00000000000003FF55555555 55552C01AAAAAAAAAAAACBFD166054F43E32DBFF00000000000003FF5555555555552C 018000000000001BFD2A1907F6E5D4CBFF00000000000003FF5555555555552C015555 555555556BFD3AC901E573AC9BFF00000000000003FF5555555555552C012AAAAAAAAA AABBFD487042BFE7BA4BFF00000000000003FF5555555555552C010000000000000BFD 530ECA8641FDCBFF00000000000003FF5555555555552C00AAAAAAAAAAAABBFD5AA499 3882772BFF00000000000003FF5555555555552C005555555555556BFD5F31AED6A926 5BFF00000000000003FF5555555555552C000000000000001BFD60B60B60B60B6BFF00 000000000003FF5555555555552BFF5555555555558BFD5F31AED6A9265BFF00000000 000003FF5555555555552BFE555555555555BBFD5AA4993882772BFF00000000000003 FF5555555555552BCC8000000000000BFD530ECA8641FDCBFF00000000000003FF5555 5555555523FE555555555554FBFD487042BFE7BA4BFF00000000000003FF5555555555 5523FF5555555555552BFD3AC901E573AC9BFF00000000000003FF55555555555523FF FFFFFFFFFFFFCBFD2A1907F6E5D4DBFF00000000000003FF5555555555552400555555 5555553BFD166054F43E32EBFF00000000000003FF5555555555552400AAAAAAAAAAAA 8BFCFF3DD1BAF98D9BFF00000000000003FF5555555555552400FFFFFFFFFFFFDBFCCB A9876543212BFF00000000000003FF55555555555524012AAAAAAAAAAA9BFC9203CAE7 59208BFF00000000000003FF55555555555524015555555555554BFC524C9C413B8B5B FF00000000000003FF55555555555524017FFFFFFFFFFFFBFC0C83FB72EA61FBFF0000 0000000003FF5555555555552401AAAAAAAAAAAAABFB8153D0F8CB48BBFF0000000000 0003FF5555555555552401D555555555555BFABAF98D76B5499BFF00000000000003FF 55555555555524020000000000000BF86C16C16C16C10BFF00000000000003FF555555 555555240215555555555553FA1D33F56178393BFF00000000000003FF555555555555 24022AAAAAAAAAAAA3FB56D9B1DF623A0BFF00000000000003FF55555555555524023F FFFFFFFFFFF3FC159E26AF37C01BFF00000000000003FFFFFFFFFFFFFFCC0240000000 00000BFBB4E81B4E81B55BFF00000000000003FFFFFFFFFFFFFFCC022AAAAAAAAAAABB FC203CAE759203EBFF00000000000003FFFFFFFFFFFFFFCC021555555555556BFC5FF3 DD1BAF98FBFF00000000000003FFFFFFFFFFFFFFCC020000000000001BFC9999999999 99ABFF00000000000003FFFFFFFFFFFFFFCC01D555555555557BFCCD2DE3EF50062BFF 00000000000003FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFCFAB0BC1CD2DE6BFF000000 00000003FFFFFFFFFFFFFFCC018000000000001BFD1111111111112BFF000000000000 03FFFFFFFFFFFFFFCC015555555555556BFD21C10AFF9EE8FBFF00000000000003FFFF FFFFFFFFFFCC012AAAAAAAAAAABBFD2F684BDA12F6ABFF00000000000003FFFFFFFFFF FFFFCC010000000000000BFD3A06D3A06D3A2BFF00000000000003FFFFFFFFFFFFFFCC 00AAAAAAAAAAAABBFD419CA252ADB38BFF00000000000003FFFFFFFFFFFFFFCC005555 555555556BFD4629B7F0D462BBFF00000000000003FFFFFFFFFFFFFFCC000000000000 001BFD47AE147AE147CBFF00000000000003FFFFFFFFFFFFFFCBFF5555555555558BFD 4629B7F0D462BBFF00000000000003FFFFFFFFFFFFFFCBFE555555555555BBFD419CA2 52ADB38BFF00000000000003FFFFFFFFFFFFFFCBCC8000000000000BFD3A06D3A06D3A 2BFF00000000000003FFFFFFFFFFFFFFC3FE555555555554FBFD2F684BDA12F6ABFF00 000000000003FFFFFFFFFFFFFFC3FF5555555555552BFD21C10AFF9EE8FBFF00000000 000003FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFD1111111111113BFF00000000000003 FFFFFFFFFFFFFFC4005555555555553BFCFAB0BC1CD2DE7BFF00000000000003FFFFFF FFFFFFFFC400AAAAAAAAAAAA8BFCCD2DE3EF50065BFF00000000000003FFFFFFFFFFFF FFC400FFFFFFFFFFFFDBFC999999999999EBFF00000000000003FFFFFFFFFFFFFFC401 2AAAAAAAAAAA9BFC5FF3DD1BAF993BFF00000000000003FFFFFFFFFFFFFFC401555555 5555554BFC203CAE7592042BFF00000000000003FFFFFFFFFFFFFFC4017FFFFFFFFFFF FBFBB4E81B4E81B59BFF00000000000003FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFB1D 33F561783A3BFF00000000000003FFFFFFFFFFFFFFC401D555555555555BF9E573AC90 1E592BFF00000000000003FFFFFFFFFFFFFFC40200000000000003F8B4E81B4E81B30B FF00000000000003FFFFFFFFFFFFFFC40215555555555553FAE573AC901E563BFF0000 0000000003FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FBBAF98D76B5488BFF0000000000 0003FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FC47AE147AE1475BFF0000000000000400 5555555555553C024000000000000BFB3E93E93E93E9DBFF0000000000000400555555 5555553C022AAAAAAAAAAABBFBCA252ADB363C4BFF0000000000000400555555555555 3C021555555555556BFC24C9C413B8B33BFF00000000000004005555555555553C0200 00000000001BFC5E6F8091A2B3EBFF00000000000004005555555555553C01D5555555 55557BFC9203CAE759206BFF00000000000004005555555555553C01AAAAAAAAAAAACB FCBF86A314DBF8ABFF00000000000004005555555555553C018000000000001BFCE6F8 091A2B3C8BFF00000000000004005555555555553C015555555555556BFD042BFE7BA3 761BFF00000000000004005555555555553C012AAAAAAAAAAABBFD11D33F561783CBFF 00000000000004005555555555553C010000000000000BFD1C71C71C71C74BFF000000 00000004005555555555553C00AAAAAAAAAAAABBFD240795CEB240ABFF000000000000 04005555555555553C005555555555556BFD2894AB6CD8EFDBFF000000000000040055 55555555553C000000000000001BFD2A1907F6E5D4EBFF000000000000040055555555 55553BFF5555555555558BFD2894AB6CD8EFDBFF00000000000004005555555555553B FE555555555555BBFD240795CEB240ABFF00000000000004005555555555553BCC8000 000000000BFD1C71C71C71C74BFF000000000000040055555555555533FE5555555555 54FBFD11D33F561783CBFF000000000000040055555555555533FF5555555555552BFD 042BFE7BA3761BFF000000000000040055555555555533FFFFFFFFFFFFFFCBFCE6F809 1A2B3C9BFF000000000000040055555555555534005555555555553BFCBF86A314DBF8 CBFF00000000000004005555555555553400AAAAAAAAAAAA8BFC9203CAE75920ABFF00 000000000004005555555555553400FFFFFFFFFFFFDBFC5E6F8091A2B43BFF00000000 0000040055555555555534012AAAAAAAAAAA9BFC24C9C413B8B37BFF00000000000004 0055555555555534015555555555554BFBCA252ADB363CBBFF00000000000004005555 5555555534017FFFFFFFFFFFFBFB3E93E93E93EA1BFF00000000000004005555555555 553401AAAAAAAAAAAAABFA4DBF86A314DD6BFF00000000000004005555555555553401 D555555555555BF4845C8A0CE5644BFF00000000000004005555555555553402000000 00000003FA59E26AF37C03CBFF00000000000004005555555555553402155555555555 53FB690E0857FCF6ABFF000000000000040055555555555534022AAAAAAAAAAAA3FC18 A6DFC3518A0BFF000000000000040055555555555534023FFFFFFFFFFFF3FC82D82D82 D82D1BFF0000000000000400AAAAAAAAAAAA8C024000000000000BFA6C16C16C16C22B FF0000000000000400AAAAAAAAAAAA8C022AAAAAAAAAAABBFB419CA252ADB38BFF0000 000000000400AAAAAAAAAAAA8C021555555555556BFBC10AFF9EE8DDABFF0000000000 000400AAAAAAAAAAAA8C020000000000001BFC1A2B3C4D5E6F8BFF0000000000000400 AAAAAAAAAAAA8C01D555555555557BFC4DBF86A314DC0BFF0000000000000400AAAAAA AAAAAA8C01AAAAAAAAAAAACBFC7B425ED097B44BFF0000000000000400AAAAAAAAAAAA 8C018000000000001BFCA2B3C4D5E6F82BFF0000000000000400AAAAAAAAAAAA8C0155 55555555556BFCC413B8B302A7CBFF0000000000000400AAAAAAAAAAAA8C012AAAAAAA AAAABBFCDF623A67EAC31BFF0000000000000400AAAAAAAAAAAA8C010000000000000B FCF49F49F49F4A2BFF0000000000000400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFD01E5 73AC901E7BFF0000000000000400AAAAAAAAAAAA8C005555555555556BFD0672894AB6 CDABFF0000000000000400AAAAAAAAAAAA8C000000000000001BFD07F6E5D4C3B2BBFF 0000000000000400AAAAAAAAAAAA8BFF5555555555558BFD0672894AB6CDABFF000000 0000000400AAAAAAAAAAAA8BFE555555555555BBFD01E573AC901E7BFF000000000000 0400AAAAAAAAAAAA8BCC8000000000000BFCF49F49F49F4A2BFF0000000000000400AA AAAAAAAAAA83FE555555555554FBFCDF623A67EAC32BFF0000000000000400AAAAAAAA AAAA83FF5555555555552BFCC413B8B302A7DBFF0000000000000400AAAAAAAAAAAA83 FFFFFFFFFFFFFFCBFCA2B3C4D5E6F84BFF0000000000000400AAAAAAAAAAAA84005555 555555553BFC7B425ED097B46BFF0000000000000400AAAAAAAAAAAA8400AAAAAAAAAA AA8BFC4DBF86A314DC4BFF0000000000000400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFC 1A2B3C4D5E6FDBFF0000000000000400AAAAAAAAAAAA84012AAAAAAAAAAA9BFBC10AFF 9EE8DE1BFF0000000000000400AAAAAAAAAAAA84015555555555554BFB419CA252ADB3 FBFF0000000000000400AAAAAAAAAAAA84017FFFFFFFFFFFFBFA6C16C16C16C29BFF00 00000000000400AAAAAAAAAAAA8401AAAAAAAAAAAAABF7E573AC901E5EDBFF00000000 00000400AAAAAAAAAAAA8401D5555555555553FA0AFF9EE8DD7BFBFF00000000000004 00AAAAAAAAAAAA840200000000000003FB3579BE02468AABFF0000000000000400AAAA AAAAAAAA840215555555555553FBF19690E0857F6BFF0000000000000400AAAAAAAAAA AA84022AAAAAAAAAAAA3FC5CEB240795CE6BFF0000000000000400AAAAAAAAAAAA8402 3FFFFFFFFFFFF3FCC71C71C71C717BFF0000000000000400FFFFFFFFFFFFDC02400000 0000000BF7B4E81B4E81BD2BFF0000000000000400FFFFFFFFFFFFDC022AAAAAAAAAAA BBFA4DBF86A314DC8BFF0000000000000400FFFFFFFFFFFFDC021555555555556BFB26 4E209DC5986BFF0000000000000400FFFFFFFFFFFFDC020000000000001BFB99999999 9999BBFF0000000000000400FFFFFFFFFFFFDC01D555555555557BFC0061172283396B FF0000000000000400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFC2DE3EF500611ABFF0000 000000000400FFFFFFFFFFFFDC018000000000001BFC5555555555558BFF0000000000 000400FFFFFFFFFFFFDC015555555555556BFC76B5493271052BFF0000000000000400 FFFFFFFFFFFFDC012AAAAAAAAAAABBFC9203CAE759207BFF0000000000000400FFFFFF FFFFFFDC010000000000000BFCA740DA740DA78BFF0000000000000400FFFFFFFFFFFF DC00AAAAAAAAAAAABBFCB66C77D88E9A4BFF0000000000000400FFFFFFFFFFFFDC0055 55555555556BFCBF86A314DBF8BBFF0000000000000400FFFFFFFFFFFFDC0000000000 00001BFCC28F5C28F5C2DBFF0000000000000400FFFFFFFFFFFFDBFF5555555555558B FCBF86A314DBF8ABFF0000000000000400FFFFFFFFFFFFDBFE555555555555BBFCB66C 77D88E9A4BFF0000000000000400FFFFFFFFFFFFDBCC8000000000000BFCA740DA740D A78BFF0000000000000400FFFFFFFFFFFFD3FE555555555554FBFC9203CAE759208BFF 0000000000000400FFFFFFFFFFFFD3FF5555555555552BFC76B5493271053BFF000000 0000000400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFC555555555555ABFF000000000000 0400FFFFFFFFFFFFD4005555555555553BFC2DE3EF500611CBFF0000000000000400FF FFFFFFFFFFD400AAAAAAAAAAAA8BFC006117228339ABFF0000000000000400FFFFFFFF FFFFD400FFFFFFFFFFFFDBFB99999999999A5BFF0000000000000400FFFFFFFFFFFFD4 012AAAAAAAAAAA9BFB264E209DC598DBFF0000000000000400FFFFFFFFFFFFD4015555 555555554BFA4DBF86A314DD6BFF0000000000000400FFFFFFFFFFFFD4017FFFFFFFFF FFFBF7B4E81B4E81C09BFF0000000000000400FFFFFFFFFFFFD401AAAAAAAAAAAAA3F9 F19690E0857D9BFF0000000000000400FFFFFFFFFFFFD401D5555555555553FB203CAE 7592034BFF0000000000000400FFFFFFFFFFFFD40200000000000003FBD0369D0369CF DBFF0000000000000400FFFFFFFFFFFFD40215555555555553FC4629B7F0D4625BFF00 00000000000400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FCAA49938827710BFF00000000 00000400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FD0A3D70A3D70A0BFF00000000000004 012AAAAAAAAAAA9C0240000000000003FA23456789ABCCEBFF00000000000004012AAA AAAAAAAA9C022AAAAAAAAAAAB3F5845C8A0CE5008BFF00000000000004012AAAAAAAAA AA9C021555555555556BF9E573AC901E586BFF00000000000004012AAAAAAAAAAA9C02 0000000000001BFAD950C83FB72EEBFF00000000000004012AAAAAAAAAAA9C01D55555 5555557BFB53D0F8CB48708BFF00000000000004012AAAAAAAAAAA9C01AAAAAAAAAAAA CBFBAED6A9264E210BFF00000000000004012AAAAAAAAAAA9C018000000000001BFBFD B97530ECA8CBFF00000000000004012AAAAAAAAAAA9C015555555555556BFC203CAE75 92040BFF00000000000004012AAAAAAAAAAA9C012AAAAAAAAAAABBFC3B8B302A7A1F5B FF00000000000004012AAAAAAAAAAA9C010000000000000BFC50C83FB72EA66BFF0000 0000000004012AAAAAAAAAAA9C00AAAAAAAAAAAABBFC5FF3DD1BAF992BFF0000000000 0004012AAAAAAAAAAA9C005555555555556BFC690E0857FCF79BFF0000000000000401 2AAAAAAAAAAA9C000000000000001BFC6C16C16C16C1BBFF00000000000004012AAAAA AAAAAA9BFF5555555555558BFC690E0857FCF78BFF00000000000004012AAAAAAAAAAA 9BFE555555555555BBFC5FF3DD1BAF992BFF00000000000004012AAAAAAAAAAA9BCC80 00000000000BFC50C83FB72EA66BFF00000000000004012AAAAAAAAAAA93FE55555555 5554FBFC3B8B302A7A1F6BFF00000000000004012AAAAAAAAAAA93FF5555555555552B FC203CAE7592041BFF00000000000004012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFBFDB9 7530ECA91BFF00000000000004012AAAAAAAAAAA94005555555555553BFBAED6A9264E 215BFF00000000000004012AAAAAAAAAAA9400AAAAAAAAAAAA8BFB53D0F8CB4870FBFF 00000000000004012AAAAAAAAAAA9400FFFFFFFFFFFFDBFAD950C83FB7302BFF000000 00000004012AAAAAAAAAAA94012AAAAAAAAAAA9BF9E573AC901E5A5BFF000000000000 04012AAAAAAAAAAA940155555555555543F5845C8A0CE4E36BFF00000000000004012A AAAAAAAAAA94017FFFFFFFFFFFF3FA23456789ABCC7BFF00000000000004012AAAAAAA AAAA9401AAAAAAAAAAAAA3FB2956D9B1DF61ABFF00000000000004012AAAAAAAAAAA94 01D5555555555553FBCD2DE3EF50058BFF00000000000004012AAAAAAAAAAA94020000 0000000003FC3E93E93E93E90BFF00000000000004012AAAAAAAAAAA94021555555555 5553FC9CA252ADB3637BFF00000000000004012AAAAAAAAAAA94022AAAAAAAAAAAA3FD 0061172283391BFF00000000000004012AAAAAAAAAAA94023FFFFFFFFFFFF3FD3579BE 02468A9BFF00000000000004015555555555554C0240000000000003FB50C83FB72EA5 BBFF00000000000004015555555555554C022AAAAAAAAAAAB3FA8A6DFC3518A64BFF00 000000000004015555555555554C0215555555555563F91722833944A42BFF00000000 000004015555555555554C020000000000001BF86C16C16C16C29BFF00000000000004 015555555555554C01D555555555557BFA2956D9B1DF62BBFF00000000000004015555 555555554C01AAAAAAAAAAAACBFADF623A67EAC3BBFF00000000000004015555555555 554C018000000000001BFB3E93E93E93E9ABFF00000000000004015555555555554C01 5555555555556BFB8153D0F8CB48FBFF00000000000004015555555555554C012AAAAA AAAAAABBFBB7F0D4629B7F9BFF00000000000004015555555555554C01000000000000 0BFBE26AF37C048DABFF00000000000004015555555555554C00AAAAAAAAAAAABBFC00 61172283399BFF00000000000004015555555555554C005555555555556BFC097B425E D0980BFF00000000000004015555555555554C000000000000001BFC0C83FB72EA622B FF00000000000004015555555555554BFF5555555555558BFC097B425ED097FBFF0000 0000000004015555555555554BFE555555555555BBFC0061172283399BFF0000000000 0004015555555555554BCC8000000000000BFBE26AF37C048DBBFF0000000000000401 55555555555543FE555555555554FBFBB7F0D4629B7FBBFF0000000000000401555555 55555543FF5555555555552BFB8153D0F8CB491BFF0000000000000401555555555555 43FFFFFFFFFFFFFFCBFB3E93E93E93E9EBFF0000000000000401555555555555440055 55555555553BFADF623A67EAC44BFF00000000000004015555555555554400AAAAAAAA AAAA8BFA2956D9B1DF63BBFF00000000000004015555555555554400FFFFFFFFFFFFDB F86C16C16C16C78BFF000000000000040155555555555544012AAAAAAAAAAA93F91722 833944A23BFF0000000000000401555555555555440155555555555543FA8A6DFC3518 A56BFF000000000000040155555555555544017FFFFFFFFFFFF3FB50C83FB72EA56BFF 00000000000004015555555555554401AAAAAAAAAAAAA3FBE87C65A43820CBFF000000 00000004015555555555554401D5555555555553FC4629B7F0D4625BFF000000000000 0401555555555555440200000000000003FC9E26AF37C048ABFF000000000000040155 5555555555440215555555555553FCFC3518A6DFC30BFF000000000000040155555555 555544022AAAAAAAAAAAA3FD302A7A1F1968DBFF000000000000040155555555555544 023FFFFFFFFFFFF3FD654320FEDCBA6BFF00000000000004017FFFFFFFFFFFFC024000 0000000003FC111111111110EBFF00000000000004017FFFFFFFFFFFFC022AAAAAAAAA AAB3FB9690E0857FCF4BFF00000000000004017FFFFFFFFFFFFC0215555555555563FB 1722833944A52BFF00000000000004017FFFFFFFFFFFFC0200000000000013FA47AE14 7AE147ABFF00000000000004017FFFFFFFFFFFFC01D5555555555573F8E573AC901E56 2BFF00000000000004017FFFFFFFFFFFFC01AAAAAAAAAAAACBF7E573AC901E5BBBFF00 000000000004017FFFFFFFFFFFFC018000000000001BF9B4E81B4E81B5FBFF00000000 000004017FFFFFFFFFFFFC015555555555556BFA5FF3DD1BAF99ABFF00000000000004 017FFFFFFFFFFFFC012AAAAAAAAAAABBFACD2DE3EF5006EBFF00000000000004017FFF FFFFFFFFFC010000000000000BFB1111111111118BFF00000000000004017FFFFFFFFF FFFC00AAAAAAAAAAAABBFB2F684BDA12F6FBFF00000000000004017FFFFFFFFFFFFC00 5555555555556BFB419CA252ADB3DBFF00000000000004017FFFFFFFFFFFFC00000000 0000001BFB47AE147AE1482BFF00000000000004017FFFFFFFFFFFFBFF555555555555 8BFB419CA252ADB3DBFF00000000000004017FFFFFFFFFFFFBFE555555555555BBFB2F 684BDA12F70BFF00000000000004017FFFFFFFFFFFFBCC8000000000000BFB11111111 11119BFF00000000000004017FFFFFFFFFFFF3FE555555555554FBFACD2DE3EF50071B FF00000000000004017FFFFFFFFFFFF3FF5555555555552BFA5FF3DD1BAF99EBFF0000 0000000004017FFFFFFFFFFFF3FFFFFFFFFFFFFFCBF9B4E81B4E81B70BFF0000000000 0004017FFFFFFFFFFFF4005555555555553BF7E573AC901E603BFF0000000000000401 7FFFFFFFFFFFF400AAAAAAAAAAAA83F8E573AC901E528BFF00000000000004017FFFFF FFFFFFF400FFFFFFFFFFFFD3FA47AE147AE1466BFF00000000000004017FFFFFFFFFFF F4012AAAAAAAAAAA93FB1722833944A4BBFF00000000000004017FFFFFFFFFFFF40155 555555555543FB9690E0857FCEDBFF00000000000004017FFFFFFFFFFFF4017FFFFFFF FFFFF3FC111111111110CBFF00000000000004017FFFFFFFFFFFF401AAAAAAAAAAAAA3 FC5CEB240795CE7BFF00000000000004017FFFFFFFFFFFF401D5555555555553FCAED6 A9264E206BFF00000000000004017FFFFFFFFFFFF40200000000000003FD0369D0369D 035BFF00000000000004017FFFFFFFFFFFF40215555555555553FD327104EE2CC09BFF 00000000000004017FFFFFFFFFFFF4022AAAAAAAAAAAA3FD6480F2B9D647EBFF000000 00000004017FFFFFFFFFFFF4023FFFFFFFFFFFF3FD9999999999996BFF000000000000 0401AAAAAAAAAAAAAC0240000000000003FC82D82D82D82D6BFF0000000000000401AA AAAAAAAAAAAC022AAAAAAAAAAAB3FC3D0F8CB487042BFF0000000000000401AAAAAAAA AAAAAC0215555555555563FBFAB0BC1CD2DE2BFF0000000000000401AAAAAAAAAAAAAC 0200000000000013FB87654320FEDCCBFF0000000000000401AAAAAAAAAAAAAC01D555 5555555573FB203CAE759203CBFF0000000000000401AAAAAAAAAAAAAC01AAAAAAAAAA AAC3FA8A6DFC3518A69BFF0000000000000401AAAAAAAAAAAAAC0180000000000013F9 D950C83FB72E1BFF0000000000000401AAAAAAAAAAAAAC0155555555555563F89CA252 ADB3619BFF0000000000000401AAAAAAAAAAAAAC012AAAAAAAAAAABBF4845C8A0CE537 CBFF0000000000000401AAAAAAAAAAAAAC010000000000000BF86C16C16C16C3CBFF00 00000000000401AAAAAAAAAAAAAC00AAAAAAAAAAAABBF92F684BDA12F7BBFF00000000 00000401AAAAAAAAAAAAAC005555555555556BF97839A5BC7DEB5BFF00000000000004 01AAAAAAAAAAAAAC000000000000001BF9907F6E5D4C3C7BFF0000000000000401AAAA AAAAAAAAABFF5555555555558BF97839A5BC7DEB5BFF0000000000000401AAAAAAAAAA AAABFE555555555555BBF92F684BDA12F7FBFF0000000000000401AAAAAAAAAAAAABCC 8000000000000BF86C16C16C16C44BFF0000000000000401AAAAAAAAAAAAA3FE555555 555554FBF4845C8A0CE5419BFF0000000000000401AAAAAAAAAAAAA3FF555555555555 23F89CA252ADB360BBFF0000000000000401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3F9D9 50C83FB72D0BFF0000000000000401AAAAAAAAAAAAA40055555555555533FA8A6DFC35 18A60BFF0000000000000401AAAAAAAAAAAAA400AAAAAAAAAAAA83FB203CAE7592035B FF0000000000000401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FB87654320FEDC3BFF0000 000000000401AAAAAAAAAAAAA4012AAAAAAAAAAA93FBFAB0BC1CD2DDBBFF0000000000 000401AAAAAAAAAAAAA40155555555555543FC3D0F8CB48703FBFF0000000000000401 AAAAAAAAAAAAA4017FFFFFFFFFFFF3FC82D82D82D82D4BFF0000000000000401AAAAAA AAAAAAA401AAAAAAAAAAAAA3FCCEB240795CEAFBFF0000000000000401AAAAAAAAAAAA A401D5555555555553FD104EE2CC0A9E7BFF0000000000000401AAAAAAAAAAAAA40200 000000000003FD3C4D5E6F80919BFF0000000000000401AAAAAAAAAAAAA40215555555 555553FD6B549327104ECBFF0000000000000401AAAAAAAAAAAAA4022AAAAAAAAAAAA3 FD9D6480F2B9D62BFF0000000000000401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FDD27D 27D27D27ABFF0000000000000401D555555555555C0240000000000003FCFDB97530EC A85BFF0000000000000401D555555555555C022AAAAAAAAAAAB3FCB7F0D4629B7F1BFF 0000000000000401D555555555555C0215555555555563FC7839A5BC7DEA0BFF000000 0000000401D555555555555C0200000000000013FC3E93E93E93E95BFF000000000000 0401D555555555555C01D5555555555573FC0AFF9EE8DD7CDBFF0000000000000401D5 55555555555C01AAAAAAAAAAAAC3FBBAF98D76B5491BFF0000000000000401D5555555 55555C0180000000000013FB6C16C16C16C16BFF0000000000000401D555555555555C 0155555555555563FB2956D9B1DF621BFF0000000000000401D555555555555C012AAA AAAAAAAAB3FAE573AC901E56EBFF0000000000000401D555555555555C010000000000 0003FA907F6E5D4C3ABBFF0000000000000401D555555555555C00AAAAAAAAAAAAB3FA 53D0F8CB486FDBFF0000000000000401D555555555555C0055555555555563FA2F684B DA12F61BFF0000000000000401D555555555555C0000000000000013FA23456789ABCD 7BFF0000000000000401D555555555555BFF55555555555583FA2F684BDA12F60BFF00 00000000000401D555555555555BFE555555555555B3FA53D0F8CB486FCBFF00000000 00000401D555555555555BCC80000000000003FA907F6E5D4C3AABFF00000000000004 01D5555555555553FE555555555554F3FAE573AC901E56ABFF0000000000000401D555 5555555553FF55555555555523FB2956D9B1DF61FBFF0000000000000401D555555555 5553FFFFFFFFFFFFFFC3FB6C16C16C16C11BFF0000000000000401D555555555555400 55555555555533FBBAF98D76B548DBFF0000000000000401D555555555555400AAAAAA AAAAAA83FC0AFF9EE8DD7C9BFF0000000000000401D555555555555400FFFFFFFFFFFF D3FC3E93E93E93E90BFF0000000000000401D5555555555554012AAAAAAAAAAA93FC78 39A5BC7DE9CBFF0000000000000401D55555555555540155555555555543FCB7F0D462 9B7EDBFF0000000000000401D5555555555554017FFFFFFFFFFFF3FCFDB97530ECA83B FF0000000000000401D555555555555401AAAAAAAAAAAAA3FD24C9C413B8B2FBFF0000 000000000401D555555555555401D5555555555553FD4DBF86A314DBEBFF0000000000 000401D55555555555540200000000000003FD79BE02468ACF0BFF0000000000000401 D55555555555540215555555555553FDA8C536FE1A8C4BFF0000000000000401D55555 55555554022AAAAAAAAAAAA3FDDAD524C9C4139BFF0000000000000401D55555555555 54023FFFFFFFFFFFF3FE07F6E5D4C3B29BFF00000000000004020000000000000C0240 000000000003FD40DA740DA740EBFF00000000000004020000000000000C022AAAAAAA AAAAB3FD1DF623A67EAC4BFF00000000000004020000000000000C0215555555555563 FCFC3518A6DFC36BFF00000000000004020000000000000C0200000000000013FCC28F 5C28F5C2BBFF00000000000004020000000000000C01D5555555555573FC8EFB11D33F 563BFF00000000000004020000000000000C01AAAAAAAAAAAAC3FC617839A5BC7DFBFF 00000000000004020000000000000C0180000000000013FC3A06D3A06D3A1BFF000000 00000004020000000000000C0155555555555563FC18A6DFC3518A7BFF000000000000 04020000000000000C012AAAAAAAAAAAB3FBFAB0BC1CD2DE4BFF000000000000040200 00000000000C0100000000000003FBD0369D0369D02BFF000000000000040200000000 00000C00AAAAAAAAAAAAB3FBB1DF623A67EABBFF00000000000004020000000000000C 0055555555555563FB9FAB0BC1CD2DDBFF00000000000004020000000000000C000000 0000000013FB9999999999998BFF00000000000004020000000000000BFF5555555555 5583FB9FAB0BC1CD2DDBFF00000000000004020000000000000BFE555555555555B3FB B1DF623A67EAABFF00000000000004020000000000000BCC80000000000003FBD0369D 0369D01BFF000000000000040200000000000003FE555555555554F3FBFAB0BC1CD2DE 1BFF000000000000040200000000000003FF55555555555523FC18A6DFC3518A6BFF00 0000000000040200000000000003FFFFFFFFFFFFFFC3FC3A06D3A06D39FBFF00000000 00000402000000000000040055555555555533FC617839A5BC7DDBFF00000000000004 020000000000000400AAAAAAAAAAAA83FC8EFB11D33F55FBFF00000000000004020000 000000000400FFFFFFFFFFFFD3FCC28F5C28F5C26BFF00000000000004020000000000 0004012AAAAAAAAAAA93FCFC3518A6DFC32BFF00000000000004020000000000000401 55555555555543FD1DF623A67EAC2BFF000000000000040200000000000004017FFFFF FFFFFFF3FD40DA740DA740CBFF00000000000004020000000000000401AAAAAAAAAAAA A3FD66C77D88E99FABFF00000000000004020000000000000401D5555555555553FD8F BD401845C89BFF0000000000000402000000000000040200000000000003FDBBBBBBBB BBBBCBFF0000000000000402000000000000040215555555555553FDEAC2F0734B78FB FF000000000000040200000000000004022AAAAAAAAAAAA3FE0E696F1F7A802BFF0000 00000000040200000000000004023FFFFFFFFFFFF3FE28F5C28F5C28FBFF0000000000 0004021555555555555C0240000000000003FD87654320FEDCABFF0000000000000402 1555555555555C022AAAAAAAAAAAB3FD6480F2B9D6480BFF0000000000000402155555 5555555C0215555555555563FD44A55B66C77D8BFF0000000000000402155555555555 5C0200000000000013FD27D27D27D27D2BFF00000000000004021555555555555C01D5 555555555573FD0E0857FCF746EBFF00000000000004021555555555555C01AAAAAAAA AAAAC3FCEE8DD7CC6BB58BFF00000000000004021555555555555C0180000000000013 FCC71C71C71C71ABFF00000000000004021555555555555C0155555555555563FCA5BC 7DEA00C20BFF00000000000004021555555555555C012AAAAAAAAAAAB3FC8A6DFC3518 A6BBFF00000000000004021555555555555C0100000000000003FC7530ECA8641FABFF 00000000000004021555555555555C00AAAAAAAAAAAAB3FC66054F43E32CEBFF000000 00000004021555555555555C0055555555555563FC5CEB240795CE7BFF000000000000 04021555555555555C0000000000000013FC59E26AF37C045BFF000000000000040215 55555555555BFF55555555555583FC5CEB240795CE8BFF000000000000040215555555 55555BFE555555555555B3FC66054F43E32CEBFF00000000000004021555555555555B CC80000000000003FC7530ECA8641FABFF000000000000040215555555555553FE5555 55555554F3FC8A6DFC3518A6ABFF000000000000040215555555555553FF5555555555 5523FCA5BC7DEA00C1FBFF000000000000040215555555555553FFFFFFFFFFFFFFC3FC C71C71C71C718BFF0000000000000402155555555555540055555555555533FCEE8DD7 CC6BB56BFF00000000000004021555555555555400AAAAAAAAAAAA83FD0E0857FCF746 CBFF00000000000004021555555555555400FFFFFFFFFFFFD3FD27D27D27D27D0BFF00 0000000000040215555555555554012AAAAAAAAAAA93FD44A55B66C77D6BFF00000000 00000402155555555555540155555555555543FD6480F2B9D647FBFF00000000000004 0215555555555554017FFFFFFFFFFFF3FD87654320FEDC9BFF00000000000004021555 555555555401AAAAAAAAAAAAA3FDAD524C9C413B7BFF00000000000004021555555555 555401D5555555555553FDD6480F2B9D646BFF00000000000004021555555555555402 00000000000003FE0123456789ABCBFF00000000000004021555555555555402155555 55555553FE18A6DFC3518A6BFF000000000000040215555555555554022AAAAAAAAAAA A3FE31AED6A9264E0BFF000000000000040215555555555554023FFFFFFFFFFFF3FE4C 3B2A1907F6DBFF00000000000004022AAAAAAAAAAAAC0240000000000003FDD27D27D2 7D27ABFF00000000000004022AAAAAAAAAAAAC022AAAAAAAAAAAB3FDAF98D76B54930B FF00000000000004022AAAAAAAAAAAAC0215555555555563FD8FBD401845C88BFF0000 0000000004022AAAAAAAAAAAAC0200000000000013FD72EA61D950C82BFF0000000000 0004022AAAAAAAAAAAAC01D5555555555573FD59203CAE7591EBFF0000000000000402 2AAAAAAAAAAAAC01AAAAAAAAAAAAC3FD425ED097B425CBFF00000000000004022AAAAA AAAAAAAC0180000000000013FD2EA61D950C83DBFF00000000000004022AAAAAAAAAAA AC0155555555555563FD1DF623A67EAC0BFF00000000000004022AAAAAAAAAAAAC012A AAAAAAAAAAB3FD104EE2CC0A9E5BFF00000000000004022AAAAAAAAAAAAC0100000000 000003FD05B05B05B05ADBFF00000000000004022AAAAAAAAAAAAC00AAAAAAAAAAAAB3 FCFC3518A6DFC2EBFF00000000000004022AAAAAAAAAAAAC0055555555555563FCF31A ED6A92647BFF00000000000004022AAAAAAAAAAAAC0000000000000013FCF012345678 9A5BFF00000000000004022AAAAAAAAAAAABFF55555555555583FCF31AED6A92648BFF 00000000000004022AAAAAAAAAAAABFE555555555555B3FCFC3518A6DFC2EBFF000000 00000004022AAAAAAAAAAAABCC80000000000003FD05B05B05B05ADBFF000000000000 04022AAAAAAAAAAAA3FE555555555554F3FD104EE2CC0A9E5BFF00000000000004022A AAAAAAAAAAA3FF55555555555523FD1DF623A67EAC0BFF00000000000004022AAAAAAA AAAAA3FFFFFFFFFFFFFFC3FD2EA61D950C83CBFF00000000000004022AAAAAAAAAAAA4 0055555555555533FD425ED097B425BBFF00000000000004022AAAAAAAAAAAA400AAAA AAAAAAAA83FD59203CAE7591DBFF00000000000004022AAAAAAAAAAAA400FFFFFFFFFF FFD3FD72EA61D950C80BFF00000000000004022AAAAAAAAAAAA4012AAAAAAAAAAA93FD 8FBD401845C85BFF00000000000004022AAAAAAAAAAAA40155555555555543FDAF98D7 6B5492FBFF00000000000004022AAAAAAAAAAAA4017FFFFFFFFFFFF3FDD27D27D27D27 9BFF00000000000004022AAAAAAAAAAAA401AAAAAAAAAAAAA3FDF86A314DBF867BFF00 000000000004022AAAAAAAAAAAA401D5555555555553FE10AFF9EE8DD7BBFF00000000 000004022AAAAAAAAAAAA40200000000000003FE26AF37C048D14BFF00000000000004 022AAAAAAAAAAAA40215555555555553FE3E32D21C10AFEBFF00000000000004022AAA AAAAAAAAA4022AAAAAAAAAAAA3FE573AC901E5738BFF00000000000004022AAAAAAAAA AAA4023FFFFFFFFFFFF3FE71C71C71C71C5BFF00000000000004023FFFFFFFFFFFFC02 40000000000003FE1111111111110BFF00000000000004023FFFFFFFFFFFFC022AAAAA AAAAAAB3FDFF3DD1BAF98D5BFF00000000000004023FFFFFFFFFFFFC02155555555555 63FDDF623A67EAC2DBFF00000000000004023FFFFFFFFFFFFC0200000000000013FDC2 8F5C28F5C27BFF00000000000004023FFFFFFFFFFFFC01D5555555555573FDA8C536FE 1A8C3BFF00000000000004023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD9203CAE759201B FF00000000000004023FFFFFFFFFFFFC0180000000000013FD7E4B17E4B17E2BFF0000 0000000004023FFFFFFFFFFFFC0155555555555563FD6D9B1DF623A65BFF0000000000 0004023FFFFFFFFFFFFC012AAAAAAAAAAAB3FD5FF3DD1BAF98ABFF0000000000000402 3FFFFFFFFFFFFC0100000000000003FD5555555555552BFF00000000000004023FFFFF FFFFFFFC00AAAAAAAAAAAAB3FD4DBF86A314DBCBFF00000000000004023FFFFFFFFFFF FC0055555555555563FD49327104EE2C9BFF00000000000004023FFFFFFFFFFFFC0000 000000000013FD47AE147AE1478BFF00000000000004023FFFFFFFFFFFFBFF55555555 555583FD49327104EE2C9BFF00000000000004023FFFFFFFFFFFFBFE555555555555B3 FD4DBF86A314DBCBFF00000000000004023FFFFFFFFFFFFBCC80000000000003FD5555 555555552BFF00000000000004023FFFFFFFFFFFF3FE555555555554F3FD5FF3DD1BAF 98ABFF00000000000004023FFFFFFFFFFFF3FF55555555555523FD6D9B1DF623A65BFF 00000000000004023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD7E4B17E4B17E1BFF000000 00000004023FFFFFFFFFFFF40055555555555533FD9203CAE759200BFF000000000000 04023FFFFFFFFFFFF400AAAAAAAAAAAA83FDA8C536FE1A8C2BFF00000000000004023F FFFFFFFFFFF400FFFFFFFFFFFFD3FDC28F5C28F5C25BFF00000000000004023FFFFFFF FFFFF4012AAAAAAAAAAA93FDDF623A67EAC2ABFF00000000000004023FFFFFFFFFFFF4 0155555555555543FDFF3DD1BAF98D4BFF00000000000004023FFFFFFFFFFFF4017FFF FFFFFFFFF3FE111111111110FBFF00000000000004023FFFFFFFFFFFF401AAAAAAAAAA AAA3FE240795CEB2406BFF00000000000004023FFFFFFFFFFFF401D5555555555553FE 388277166054EBFF00000000000004023FFFFFFFFFFFF40200000000000003FE4E81B4 E81B4E7BFF00000000000004023FFFFFFFFFFFF40215555555555553FE66054F43E32D 0BFF00000000000004023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE7F0D4629B7F0BBFF00 000000000004023FFFFFFFFFFFF4023FFFFFFFFFFFF3FE9999999999997BFEAAAAAAAA AAAABC024000000000000C0240000000000003FBDDDDDDDDDDDDDBFEAAAAAAAAAAAABC 024000000000000C022AAAAAAAAAAAB3FB524C9C413B8B6BFEAAAAAAAAAAAABC024000 000000000C0215555555555563FAA5BC7DEA00C25BFEAAAAAAAAAAAABC024000000000 000C0200000000000013F97E4B17E4B17F3BFEAAAAAAAAAAAABC024000000000000C01 D555555555557BF5E573AC901E4EDBFEAAAAAAAAAAAABC024000000000000C01AAAAAA AAAAAACBF98A6DFC3518A6FBFEAAAAAAAAAAAABC024000000000000C01800000000000 1BFA62FC962FC962FBFEAAAAAAAAAAAABC024000000000000C015555555555556BFAE8 7C65A438216BFEAAAAAAAAAAAABC024000000000000C012AAAAAAAAAAABBFB2ADB363B EC475BFEAAAAAAAAAAAABC024000000000000C010000000000000BFB5555555555556B FEAAAAAAAAAAAABC024000000000000C00AAAAAAAAAAAABBFB73AC901E573ADBFEAAAA AAAAAAAABC024000000000000C005555555555556BFB85E0E696F1F7CBFEAAAAAAAAAA AABC024000000000000C000000000000001BFB8BF258BF258C1BFEAAAAAAAAAAAABC02 4000000000000BFF5555555555558BFB85E0E696F1F7CBFEAAAAAAAAAAAABC02400000 0000000BFE555555555555BBFB73AC901E573AFBFEAAAAAAAAAAAABC02400000000000 0BCC8000000000000BFB5555555555558BFEAAAAAAAAAAAABC0240000000000003FE55 5555555554FBFB2ADB363BEC478BFEAAAAAAAAAAAABC0240000000000003FF55555555 55552BFAE87C65A43821CBFEAAAAAAAAAAAABC0240000000000003FFFFFFFFFFFFFFCB FA62FC962FC9636BFEAAAAAAAAAAAABC0240000000000004005555555555553BF98A6D FC3518A7EBFEAAAAAAAAAAAABC024000000000000400AAAAAAAAAAAA8BF5E573AC901E 67FBFEAAAAAAAAAAAABC024000000000000400FFFFFFFFFFFFD3F97E4B17E4B17D1BFE AAAAAAAAAAAABC0240000000000004012AAAAAAAAAAA93FAA5BC7DEA00C18BFEAAAAAA AAAAAABC02400000000000040155555555555543FB524C9C413B8AEBFEAAAAAAAAAAAA BC0240000000000004017FFFFFFFFFFFF3FBDDDDDDDDDDDD9BFEAAAAAAAAAAAABC0240 00000000000401AAAAAAAAAAAAA3FC3AC901E573AC7BFEAAAAAAAAAAAABC0240000000 00000401D5555555555553FC8CB487042BFE7BFEAAAAAAAAAAAABC0240000000000004 0200000000000003FCE4B17E4B17E4BBFEAAAAAAAAAAAABC0240000000000004021555 5555555553FD215FF3DD1BAF9BFEAAAAAAAAAAAABC0240000000000004022AAAAAAAAA AAA3FD536FE1A8C536EBFEAAAAAAAAAAAABC0240000000000004023FFFFFFFFFFFF3FD 8888888888887BFEAAAAAAAAAAAABC022AAAAAAAAAAABC0240000000000003FB0C83FB 72EA61FBFEAAAAAAAAAAAABC022AAAAAAAAAAABC022AAAAAAAAAAAB3FA01E573AC901F 0BFEAAAAAAAAAAAABC022AAAAAAAAAAABC0215555555555563F3845C8A0CE567EBFEAA AAAAAAAAAABC022AAAAAAAAAAABC020000000000001BF9C71C71C71C6FDBFEAAAAAAAA AAAABC022AAAAAAAAAAABC01D555555555557BFAB1DF623A67E9FBFEAAAAAAAAAAAABC 022AAAAAAAAAAABC01AAAAAAAAAAAACBFB33F5617839A58BFEAAAAAAAAAAAABC022AAA AAAAAAAABC018000000000001BFB82D82D82D82D4BFEAAAAAAAAAAAABC022AAAAAAAAA AABC015555555555556BFBC598153D0F8C9BFEAAAAAAAAAAAABC022AAAAAAAAAAABC01 2AAAAAAAAAAABBFBFC3518A6DFC33BFEAAAAAAAAAAAABC022AAAAAAAAAAABC01000000 0000000BFC13579BE02468ABFEAAAAAAAAAAAABC022AAAAAAAAAAABC00AAAAAAAAAAAA BBFC22833944A55B6BFEAAAAAAAAAAAABC022AAAAAAAAAAABC005555555555556BFC2B 9D6480F2B9DBFEAAAAAAAAAAAABC022AAAAAAAAAAABC000000000000001BFC2EA61D95 0C83FBFEAAAAAAAAAAAABC022AAAAAAAAAAABBFF5555555555558BFC2B9D6480F2B9CB FEAAAAAAAAAAAABC022AAAAAAAAAAABBFE555555555555BBFC22833944A55B6BFEAAAA AAAAAAAABC022AAAAAAAAAAABBCC8000000000000BFC13579BE02468ABFEAAAAAAAAAA AABC022AAAAAAAAAAAB3FE555555555554FBFBFC3518A6DFC34BFEAAAAAAAAAAAABC02 2AAAAAAAAAAAB3FF5555555555552BFBC598153D0F8CBBFEAAAAAAAAAAAABC022AAAAA AAAAAAB3FFFFFFFFFFFFFFCBFB82D82D82D82D8BFEAAAAAAAAAAAABC022AAAAAAAAAAA B4005555555555553BFB33F5617839A5CBFEAAAAAAAAAAAABC022AAAAAAAAAAAB400AA AAAAAAAAAA8BFAB1DF623A67EAFBFEAAAAAAAAAAAABC022AAAAAAAAAAAB400FFFFFFFF FFFFDBF9C71C71C71C724BFEAAAAAAAAAAAABC022AAAAAAAAAAAB4012AAAAAAAAAAA93 F3845C8A0CE4EC3BFEAAAAAAAAAAAABC022AAAAAAAAAAAB40155555555555543FA01E5 73AC901E2BFEAAAAAAAAAAAABC022AAAAAAAAAAAB4017FFFFFFFFFFFF3FB0C83FB72EA 61CBFEAAAAAAAAAAAABC022AAAAAAAAAAAB401AAAAAAAAAAAAA3FBA438215FF3DD2BFE AAAAAAAAAAAABC022AAAAAAAAAAAB401D5555555555553FC240795CEB2408BFEAAAAAA AAAAAABC022AAAAAAAAAAAB40200000000000003FC7C048D159E26CBFEAAAAAAAAAAAA BC022AAAAAAAAAAAB40215555555555553FCDA12F684BDA13BFEAAAAAAAAAAAABC022A AAAAAAAAAAB4022AAAAAAAAAAAA3FD1F19690E0857FBFEAAAAAAAAAAAABC022AAAAAAA AAAAB4023FFFFFFFFFFFF3FD54320FEDCBA97BFEAAAAAAAAAAAABC021555555555556C 0240000000000003F93579BE02468ACBFEAAAAAAAAAAAABC021555555555556C022AAA AAAAAAAABBF8F19690E0857DFBFEAAAAAAAAAAAABC021555555555556C021555555555 556BFA7B425ED097B3BBFEAAAAAAAAAAAABC021555555555556C020000000000001BFB 30ECA8641FDB3BFEAAAAAAAAAAAABC021555555555556C01D555555555557BFB98153D 0F8CB44BFEAAAAAAAAAAAABC021555555555556C01AAAAAAAAAAAACBFBF31AED6A9264 CBFEAAAAAAAAAAAABC021555555555556C018000000000001BFC20FEDCBA98764BFEAA AAAAAAAAAABC021555555555556C015555555555556BFC425ED097B425EBFEAAAAAAAA AAAABC021555555555556C012AAAAAAAAAAABBFC5DAD524C9C413BFEAAAAAAAAAAAABC 021555555555556C010000000000000BFC72EA61D950C84BFEAAAAAAAAAAAABC021555 555555556C00AAAAAAAAAAAABBFC8215FF3DD1BB0BFEAAAAAAAAAAAABC021555555555 556C005555555555556BFC8B302A7A1F197BFEAAAAAAAAAAAABC021555555555556C00 0000000000001BFC8E38E38E38E39BFEAAAAAAAAAAAABC021555555555556BFF555555 5555558BFC8B302A7A1F196BFEAAAAAAAAAAAABC021555555555556BFE555555555555 BBFC8215FF3DD1BB0BFEAAAAAAAAAAAABC021555555555556BCC8000000000000BFC72 EA61D950C84BFEAAAAAAAAAAAABC0215555555555563FE555555555554FBFC5DAD524C 9C414BFEAAAAAAAAAAAABC0215555555555563FF5555555555552BFC425ED097B425FB FEAAAAAAAAAAAABC0215555555555563FFFFFFFFFFFFFFCBFC20FEDCBA98766BFEAAAA AAAAAAAABC0215555555555564005555555555553BFBF31AED6A92651BFEAAAAAAAAAA AABC021555555555556400AAAAAAAAAAAA8BFB98153D0F8CB4BBFEAAAAAAAAAAAABC02 1555555555556400FFFFFFFFFFFFDBFB30ECA8641FDBDBFEAAAAAAAAAAAABC02155555 55555564012AAAAAAAAAAA9BFA7B425ED097B4ABFEAAAAAAAAAAAABC02155555555555 64015555555555554BF8F19690E085819BFEAAAAAAAAAAAABC0215555555555564017F FFFFFFFFFFF3F93579BE024689EBFEAAAAAAAAAAAABC021555555555556401AAAAAAAA AAAAA3FACA252ADB363BCBFEAAAAAAAAAAAABC021555555555556401D5555555555553 FB88E99FAB0BC1CBFEAAAAAAAAAAAABC02155555555555640200000000000003FC1C71 C71C71C72BFEAAAAAAAAAAAABC02155555555555640215555555555553FC7A80308B91 419BFEAAAAAAAAAAAABC0215555555555564022AAAAAAAAAAAA3FCDEA00C22E4504BFE AAAAAAAAAAAABC0215555555555564023FFFFFFFFFFFF3FD2468ACF13579ABFEAAAAAA AAAAAABC020000000000001C024000000000000BF97E4B17E4B17D4BFEAAAAAAAAAAAA BC020000000000001C022AAAAAAAAAAABBFAD6480F2B9D638BFEAAAAAAAAAAAABC0200 00000000001C021555555555556BFB6A9264E209DC2BFEAAAAAAAAAAAABC0200000000 00001C020000000000001BFBDDDDDDDDDDDD7BFEAAAAAAAAAAAABC020000000000001C 01D555555555557BFC22833944A55B4BFEAAAAAAAAAAAABC020000000000001C01AAAA AAAAAAAACBFC5006117228338BFEAAAAAAAAAAAABC020000000000001C018000000000 001BFC7777777777776BFEAAAAAAAAAAAABC020000000000001C015555555555556BFC 98D76B549326EBFEAAAAAAAAAAAABC020000000000001C012AAAAAAAAAAABBFCB425ED 097B423BFEAAAAAAAAAAAABC020000000000001C010000000000000BFCC962FC962FC9 4BFEAAAAAAAAAAAABC020000000000001C00AAAAAAAAAAAABBFCD88E99FAB0BC0BFEAA AAAAAAAAAABC020000000000001C005555555555556BFCE1A8C536FE1A7BFEAAAAAAAA AAAABC020000000000001C000000000000001BFCE4B17E4B17E4ABFEAAAAAAAAAAAABC 020000000000001BFF5555555555558BFCE1A8C536FE1A7BFEAAAAAAAAAAAABC020000 000000001BFE555555555555BBFCD88E99FAB0BC1BFEAAAAAAAAAAAABC020000000000 001BCC8000000000000BFCC962FC962FC95BFEAAAAAAAAAAAABC0200000000000013FE 555555555554FBFCB425ED097B425BFEAAAAAAAAAAAABC0200000000000013FF555555 5555552BFC98D76B5493270BFEAAAAAAAAAAAABC0200000000000013FFFFFFFFFFFFFF CBFC7777777777777BFEAAAAAAAAAAAABC0200000000000014005555555555553BFC50 06117228339BFEAAAAAAAAAAAABC020000000000001400AAAAAAAAAAAA8BFC22833944 A55B7BFEAAAAAAAAAAAABC020000000000001400FFFFFFFFFFFFDBFBDDDDDDDDDDDDFB FEAAAAAAAAAAAABC0200000000000014012AAAAAAAAAAA9BFB6A9264E209DC7BFEAAAA AAAAAAAABC0200000000000014015555555555554BFAD6480F2B9D64ABFEAAAAAAAAAA AABC0200000000000014017FFFFFFFFFFFFBF97E4B17E4B17EABFEAAAAAAAAAAAABC02 0000000000001401AAAAAAAAAAAAA3F8C10AFF9EE8DDABFEAAAAAAAAAAAABC02000000 0000001401D5555555555553FAB7F0D4629B7F3BFEAAAAAAAAAAAABC02000000000000 140200000000000003FB8BF258BF258C3BFEAAAAAAAAAAAABC02000000000000140215 555555555553FC240795CEB2408BFEAAAAAAAAAAAABC0200000000000014022AAAAAAA AAAAA3FC88277166054F3BFEAAAAAAAAAAAABC0200000000000014023FFFFFFFFFFFF3 FCF258BF258BF24BFEAAAAAAAAAAAABC01D555555555557C024000000000000BFAF49F 49F49F492BFEAAAAAAAAAAAABC01D555555555557C022AAAAAAAAAAABBFB85E0E696F1 F70BFEAAAAAAAAAAAABC01D555555555557C021555555555556BFC02A7A1F196909BFE AAAAAAAAAAAABC01D555555555557C020000000000001BFC3C4D5E6F80914BFEAAAAAA AAAAAABC01D555555555557C01D555555555557BFC6FE1A8C536FDCBFEAAAAAAAAAAAA BC01D555555555557C01AAAAAAAAAAAACBFC9D6480F2B9D60BFEAAAAAAAAAAAABC01D5 55555555557C018000000000001BFCC4D5E6F80919EBFEAAAAAAAAAAAABC01D5555555 55557C015555555555556BFCE635DAD524C98BFEAAAAAAAAAAAABC01D555555555557C 012AAAAAAAAAAABBFD00C22E4506727BFEAAAAAAAAAAAABC01D555555555557C010000 000000000BFD0B60B60B60B5FBFEAAAAAAAAAAAABC01D555555555557C00AAAAAAAAAA AABBFD12F684BDA12F5BFEAAAAAAAAAAAABC01D555555555557C005555555555556BFD 17839A5BC7DE8BFEAAAAAAAAAAAABC01D555555555557C000000000000001BFD1907F6 E5D4C39BFEAAAAAAAAAAAABC01D555555555557BFF5555555555558BFD17839A5BC7DE 8BFEAAAAAAAAAAAABC01D555555555557BFE555555555555BBFD12F684BDA12F5BFEAA AAAAAAAAAABC01D555555555557BCC8000000000000BFD0B60B60B60B5FBFEAAAAAAAA AAAABC01D5555555555573FE555555555554FBFD00C22E4506727BFEAAAAAAAAAAAABC 01D5555555555573FF5555555555552BFCE635DAD524C99BFEAAAAAAAAAAAABC01D555 5555555573FFFFFFFFFFFFFFCBFCC4D5E6F8091A0BFEAAAAAAAAAAAABC01D555555555 5574005555555555553BFC9D6480F2B9D62BFEAAAAAAAAAAAABC01D555555555557400 AAAAAAAAAAAA8BFC6FE1A8C536FE0BFEAAAAAAAAAAAABC01D555555555557400FFFFFF FFFFFFDBFC3C4D5E6F80919BFEAAAAAAAAAAAABC01D5555555555574012AAAAAAAAAAA 9BFC02A7A1F19690DBFEAAAAAAAAAAAABC01D5555555555574015555555555554BFB85 E0E696F1F77BFEAAAAAAAAAAAABC01D5555555555574017FFFFFFFFFFFFBFAF49F49F4 9F499BFEAAAAAAAAAAAABC01D555555555557401AAAAAAAAAAAAABF98A6DFC3518A5BB FEAAAAAAAAAAAABC01D555555555557401D5555555555553F904EE2CC0A9E9EBFEAAAA AAAAAAAABC01D55555555555740200000000000003FAE26AF37C048E4BFEAAAAAAAAAA AABC01D55555555555740215555555555553FBAD524C9C413BEBFEAAAAAAAAAAAABC01 D5555555555574022AAAAAAAAAAAA3FC3AC901E573ACABFEAAAAAAAAAAAABC01D55555 55555574023FFFFFFFFFFFF3FCA4FA4FA4FA4FBBFEAAAAAAAAAAAABC01AAAAAAAAAAAA CC024000000000000BFB82D82D82D82D9BFEAAAAAAAAAAAABC01AAAAAAAAAAAACC022A AAAAAAAAAABBFC0734B78FBD400BFEAAAAAAAAAAAABC01AAAAAAAAAAAACC0215555555 55556BFC46EBE635DAD51BFEAAAAAAAAAAAABC01AAAAAAAAAAAACC020000000000001B FC8091A2B3C4D5CBFEAAAAAAAAAAAABC01AAAAAAAAAAAACC01D555555555557BFCB425 ED097B424BFEAAAAAAAAAAAABC01AAAAAAAAAAAACC01AAAAAAAAAAAACBFCE1A8C536FE 1A8BFEAAAAAAAAAAAABC01AAAAAAAAAAAACC018000000000001BFD048D159E26AF3BFE AAAAAAAAAAAABC01AAAAAAAAAAAACC015555555555556BFD153D0F8CB4870BFEAAAAAA AAAAAABC01AAAAAAAAAAAACC012AAAAAAAAAAABBFD22E450672894BBFEAAAAAAAAAAAA BC01AAAAAAAAAAAACC010000000000000BFD2D82D82D82D83BFEAAAAAAAAAAAABC01AA AAAAAAAAAACC00AAAAAAAAAAAABBFD3518A6DFC3519BFEAAAAAAAAAAAABC01AAAAAAAA AAAACC005555555555556BFD39A5BC7DEA00CBFEAAAAAAAAAAAABC01AAAAAAAAAAAACC 000000000000001BFD3B2A1907F6E5DBFEAAAAAAAAAAAABC01AAAAAAAAAAAACBFF5555 555555558BFD39A5BC7DEA00CBFEAAAAAAAAAAAABC01AAAAAAAAAAAACBFE5555555555 55BBFD3518A6DFC3519BFEAAAAAAAAAAAABC01AAAAAAAAAAAACBCC8000000000000BFD 2D82D82D82D83BFEAAAAAAAAAAAABC01AAAAAAAAAAAAC3FE555555555554FBFD22E450 672894BBFEAAAAAAAAAAAABC01AAAAAAAAAAAAC3FF5555555555552BFD153D0F8CB487 0BFEAAAAAAAAAAAABC01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFD048D159E26AF4BFEAA AAAAAAAAAABC01AAAAAAAAAAAAC4005555555555553BFCE1A8C536FE1A9BFEAAAAAAAA AAAABC01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFCB425ED097B427BFEAAAAAAAAAAAABC 01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFC8091A2B3C4D61BFEAAAAAAAAAAAABC01AAAA AAAAAAAAC4012AAAAAAAAAAA9BFC46EBE635DAD55BFEAAAAAAAAAAAABC01AAAAAAAAAA AAC4015555555555554BFC0734B78FBD404BFEAAAAAAAAAAAABC01AAAAAAAAAAAAC401 7FFFFFFFFFFFFBFB82D82D82D82DDBFEAAAAAAAAAAAABC01AAAAAAAAAAAAC401AAAAAA AAAAAAABFAD6480F2B9D64EBFEAAAAAAAAAAAABC01AAAAAAAAAAAAC401D55555555555 5BF91D33F561783A2BFEAAAAAAAAAAAABC01AAAAAAAAAAAAC40200000000000003F9A2 B3C4D5E6F88BFEAAAAAAAAAAAABC01AAAAAAAAAAAAC40215555555555553FB24C9C413 B8B2EBFEAAAAAAAAAAAABC01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FBED097B425ED04B FEAAAAAAAAAAAABC01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FC60B60B60B60B3BFEAAAA AAAAAAAABC018000000000001C024000000000000BFBF92C5F92C5F95BFEAAAAAAAAAA AABC018000000000001C022AAAAAAAAAAABBFC425ED097B425EBFEAAAAAAAAAAAABC01 8000000000001C021555555555556BFC8215FF3DD1BAFBFEAAAAAAAAAAAABC01800000 0000001C020000000000001BFCBBBBBBBBBBBBABFEAAAAAAAAAAAABC01800000000000 1C01D555555555557BFCEF50061172282BFEAAAAAAAAAAAABC018000000000001C01AA AAAAAAAAAACBFD0E696F1F7A803BFEAAAAAAAAAAAABC018000000000001C0180000000 00001BFD2222222222222BFEAAAAAAAAAAAABC018000000000001C015555555555556B FD32D21C10AFF9FBFEAAAAAAAAAAAABC018000000000001C012AAAAAAAAAAABBFD4079 5CEB2407ABFEAAAAAAAAAAAABC018000000000001C010000000000000BFD4B17E4B17E 4B2BFEAAAAAAAAAAAABC018000000000001C00AAAAAAAAAAAABBFD52ADB363BEC48BFE AAAAAAAAAAAABC018000000000001C005555555555556BFD573AC901E573BBFEAAAAAA AAAAAABC018000000000001C000000000000001BFD58BF258BF258CBFEAAAAAAAAAAAA BC018000000000001BFF5555555555558BFD573AC901E573BBFEAAAAAAAAAAAABC0180 00000000001BFE555555555555BBFD52ADB363BEC48BFEAAAAAAAAAAAABC0180000000 00001BCC8000000000000BFD4B17E4B17E4B2BFEAAAAAAAAAAAABC0180000000000013 FE555555555554FBFD40795CEB2407ABFEAAAAAAAAAAAABC0180000000000013FF5555 555555552BFD32D21C10AFF9FBFEAAAAAAAAAAAABC0180000000000013FFFFFFFFFFFF FFCBFD2222222222223BFEAAAAAAAAAAAABC0180000000000014005555555555553BFD 0E696F1F7A804BFEAAAAAAAAAAAABC018000000000001400AAAAAAAAAAAA8BFCEF5006 1172285BFEAAAAAAAAAAAABC018000000000001400FFFFFFFFFFFFDBFCBBBBBBBBBBBB EBFEAAAAAAAAAAAABC0180000000000014012AAAAAAAAAAA9BFC8215FF3DD1BB4BFEAA AAAAAAAAAABC0180000000000014015555555555554BFC425ED097B4261BFEAAAAAAAA AAAABC0180000000000014017FFFFFFFFFFFFBFBF92C5F92C5F99BFEAAAAAAAAAAAABC 018000000000001401AAAAAAAAAAAAABFB617839A5BC7E3BFEAAAAAAAAAAAABC018000 000000001401D555555555555BFA7B425ED097B49BFEAAAAAAAAAAAABC018000000000 0014020000000000000BF6B4E81B4E81B40BFEAAAAAAAAAAAABC018000000000001402 15555555555553FA5CEB240795CE3BFEAAAAAAAAAAAABC0180000000000014022AAAAA AAAAAAA3FB76B5493271048BFEAAAAAAAAAAAABC0180000000000014023FFFFFFFFFFF F3FC258BF258BF255BFEAAAAAAAAAAAABC015555555555556C024000000000000BFC2E A61D950C841BFEAAAAAAAAAAAABC015555555555556C022AAAAAAAAAAABBFC746EBE63 5DAD4BFEAAAAAAAAAAAABC015555555555556C021555555555556BFCB425ED097B425B FEAAAAAAAAAAAABC015555555555556C020000000000001BFCEDCBA98765430BFEAAAA AAAAAAAABC015555555555556C01D555555555557BFD10AFF9EE8DD7CBFEAAAAAAAAAA AABC015555555555556C01AAAAAAAAAAAACBFD277166054F43EBFEAAAAAAAAAAAABC01 5555555555556C018000000000001BFD3B2A1907F6E5DBFEAAAAAAAAAAAABC01555555 5555556C015555555555556BFD4BDA12F684BDABFEAAAAAAAAAAAABC01555555555555 6C012AAAAAAAAAAABBFD598153D0F8CB5BFEAAAAAAAAAAAABC015555555555556C0100 00000000000BFD641FDB97530EDBFEAAAAAAAAAAAABC015555555555556C00AAAAAAAA AAAABBFD6BB5AA4993883BFEAAAAAAAAAAAABC015555555555556C005555555555556B FD7042BFE7BA376BFEAAAAAAAAAAAABC015555555555556C000000000000001BFD71C7 1C71C71C7BFEAAAAAAAAAAAABC015555555555556BFF5555555555558BFD7042BFE7BA 376BFEAAAAAAAAAAAABC015555555555556BFE555555555555BBFD6BB5AA4993883BFE AAAAAAAAAAAABC015555555555556BCC8000000000000BFD641FDB97530EDBFEAAAAAA AAAAAABC0155555555555563FE555555555554FBFD598153D0F8CB5BFEAAAAAAAAAAAA BC0155555555555563FF5555555555552BFD4BDA12F684BDABFEAAAAAAAAAAAABC0155 555555555563FFFFFFFFFFFFFFCBFD3B2A1907F6E5EBFEAAAAAAAAAAAABC0155555555 555564005555555555553BFD277166054F43FBFEAAAAAAAAAAAABC0155555555555564 00AAAAAAAAAAAA8BFD10AFF9EE8DD7DBFEAAAAAAAAAAAABC015555555555556400FFFF FFFFFFFFDBFCEDCBA98765434BFEAAAAAAAAAAAABC0155555555555564012AAAAAAAAA AA9BFCB425ED097B42ABFEAAAAAAAAAAAABC0155555555555564015555555555554BFC 746EBE635DAD7BFEAAAAAAAAAAAABC0155555555555564017FFFFFFFFFFFFBFC2EA61D 950C841BFEAAAAAAAAAAAABC015555555555556401AAAAAAAAAAAAABFBC598153D0F8C DBFEAAAAAAAAAAAABC015555555555556401D555555555555BFB21C10AFF9EE8FBFEAA AAAAAAAAAABC0155555555555564020000000000000BF9C71C71C71C718BFEAAAAAAAA AAAABC01555555555555640215555555555553F92956D9B1DF617BFEAAAAAAAAAAAABC 0155555555555564022AAAAAAAAAAAA3FB12956D9B1DF5CBFEAAAAAAAAAAAABC015555 5555555564023FFFFFFFFFFFF3FBE6F8091A2B3BEBFEAAAAAAAAAAAABC012AAAAAAAAA AABC024000000000000BFC579BE02468ACDBFEAAAAAAAAAAAABC012AAAAAAAAAAABC02 2AAAAAAAAAAABBFC9D6480F2B9D62BFEAAAAAAAAAAAABC012AAAAAAAAAAABC02155555 5555556BFCDD1BAF98D76B3BFEAAAAAAAAAAAABC012AAAAAAAAAAABC02000000000000 1BFD0B60B60B60B5FBFEAAAAAAAAAAAABC012AAAAAAAAAAABC01D555555555557BFD25 2ADB363BEC3BFEAAAAAAAAAAAABC012AAAAAAAAAAABC01AAAAAAAAAAAACBFD3BEC474C FD585BFEAAAAAAAAAAAABC012AAAAAAAAAAABC018000000000001BFD4FA4FA4FA4FA4B FEAAAAAAAAAAAABC012AAAAAAAAAAABC015555555555556BFD6054F43E32D21BFEAAAA AAAAAAAABC012AAAAAAAAAAABC012AAAAAAAAAAABBFD6DFC3518A6DFCBFEAAAAAAAAAA AABC012AAAAAAAAAAABC010000000000000BFD789ABCDF01234BFEAAAAAAAAAAAABC01 2AAAAAAAAAAABC00AAAAAAAAAAAABBFD80308B91419CABFEAAAAAAAAAAAABC012AAAAA AAAAAABC005555555555556BFD84BDA12F684BDBFEAAAAAAAAAAAABC012AAAAAAAAAAA BC000000000000001BFD8641FDB97530EBFEAAAAAAAAAAAABC012AAAAAAAAAAABBFF55 55555555558BFD84BDA12F684BDBFEAAAAAAAAAAAABC012AAAAAAAAAAABBFE55555555 5555BBFD80308B91419CABFEAAAAAAAAAAAABC012AAAAAAAAAAABBCC8000000000000B FD789ABCDF01234BFEAAAAAAAAAAAABC012AAAAAAAAAAAB3FE555555555554FBFD6DFC 3518A6DFCBFEAAAAAAAAAAAABC012AAAAAAAAAAAB3FF5555555555552BFD6054F43E32 D21BFEAAAAAAAAAAAABC012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD4FA4FA4FA4FA5BFE AAAAAAAAAAAABC012AAAAAAAAAAAB4005555555555553BFD3BEC474CFD586BFEAAAAAA AAAAAABC012AAAAAAAAAAAB400AAAAAAAAAAAA8BFD252ADB363BEC4BFEAAAAAAAAAAAA BC012AAAAAAAAAAAB400FFFFFFFFFFFFDBFD0B60B60B60B61BFEAAAAAAAAAAAABC012A AAAAAAAAAAB4012AAAAAAAAAAA9BFCDD1BAF98D76B8BFEAAAAAAAAAAAABC012AAAAAAA AAAAB4015555555555554BFC9D6480F2B9D65BFEAAAAAAAAAAAABC012AAAAAAAAAAAB4 017FFFFFFFFFFFFBFC579BE02468ACFBFEAAAAAAAAAAAABC012AAAAAAAAAAAB401AAAA AAAAAAAAABFC0BC1CD2DE3EF4BFEAAAAAAAAAAAABC012AAAAAAAAAAAB401D555555555 555BFB73AC901E573ABBFEAAAAAAAAAAAABC012AAAAAAAAAAAB4020000000000000BFA 87654320FEDC4BFEAAAAAAAAAAAABC012AAAAAAAAAAAB4021555555555555BF5E573AC 901E516BFEAAAAAAAAAAAABC012AAAAAAAAAAAB4022AAAAAAAAAAAA3FA8153D0F8CB48 0BFEAAAAAAAAAAAABC012AAAAAAAAAAAB4023FFFFFFFFFFFF3FB950C83FB72EA2BFEAA AAAAAAAAAABC010000000000000C024000000000000BFC7777777777779BFEAAAAAAAA AAAABC010000000000000C022AAAAAAAAAAABBFCBD401845C8A0ABFEAAAAAAAAAAAABC 010000000000000C021555555555556BFCFCF746EBE635DBFEAAAAAAAAAAAABC010000 000000000C020000000000001BFD1B4E81B4E81B4BFEAAAAAAAAAAAABC010000000000 000C01D555555555557BFD3518A6DFC3518BFEAAAAAAAAAAAABC010000000000000C01 AAAAAAAAAAAACBFD4BDA12F684BDABFEAAAAAAAAAAAABC010000000000000C01800000 0000001BFD5F92C5F92C5F9BFEAAAAAAAAAAAABC010000000000000C01555555555555 6BFD7042BFE7BA376BFEAAAAAAAAAAAABC010000000000000C012AAAAAAAAAAABBFD7D EA00C22E451BFEAAAAAAAAAAAABC010000000000000C010000000000000BFD88888888 88889BFEAAAAAAAAAAAABC010000000000000C00AAAAAAAAAAAABBFD901E573AC901FB FEAAAAAAAAAAAABC010000000000000C005555555555556BFD94AB6CD8EFB12BFEAAAA AAAAAAAABC010000000000000C000000000000001BFD962FC962FC963BFEAAAAAAAAAA AABC010000000000000BFF5555555555558BFD94AB6CD8EFB12BFEAAAAAAAAAAAABC01 0000000000000BFE555555555555BBFD901E573AC901FBFEAAAAAAAAAAAABC01000000 0000000BCC8000000000000BFD8888888888889BFEAAAAAAAAAAAABC01000000000000 03FE555555555554FBFD7DEA00C22E451BFEAAAAAAAAAAAABC0100000000000003FF55 55555555552BFD7042BFE7BA376BFEAAAAAAAAAAAABC0100000000000003FFFFFFFFFF FFFFCBFD5F92C5F92C5FABFEAAAAAAAAAAAABC0100000000000004005555555555553B FD4BDA12F684BDBBFEAAAAAAAAAAAABC010000000000000400AAAAAAAAAAAA8BFD3518 A6DFC3519BFEAAAAAAAAAAAABC010000000000000400FFFFFFFFFFFFDBFD1B4E81B4E8 1B6BFEAAAAAAAAAAAABC0100000000000004012AAAAAAAAAAA9BFCFCF746EBE6362BFE AAAAAAAAAAAABC0100000000000004015555555555554BFCBD401845C8A0FBFEAAAAAA AAAAAABC0100000000000004017FFFFFFFFFFFFBFC7777777777779BFEAAAAAAAAAAAA BC010000000000000401AAAAAAAAAAAAABFC2B9D6480F2B9EBFEAAAAAAAAAAAABC0100 00000000000401D555555555555BFBB363BEC474CFFBFEAAAAAAAAAAAABC0100000000 000004020000000000000BFB0369D0369D036BFEAAAAAAAAAAAABC0100000000000004 021555555555555BF91D33F561783A1BFEAAAAAAAAAAAABC0100000000000004022AAA AAAAAAAAA3FA01E573AC901D4BFEAAAAAAAAAAAABC0100000000000004023FFFFFFFFF FFF3FB555555555554CBFEAAAAAAAAAAAABC00AAAAAAAAAAAABC024000000000000BFC 8E38E38E38E39BFEAAAAAAAAAAAABC00AAAAAAAAAAAABC022AAAAAAAAAAABBFCD40184 5C8A0CABFEAAAAAAAAAAAABC00AAAAAAAAAAAABC021555555555556BFD09DC598153D0 EBFEAAAAAAAAAAAABC00AAAAAAAAAAAABC020000000000001BFD26AF37C048D15BFEAA AAAAAAAAAABC00AAAAAAAAAAAABC01D555555555557BFD40795CEB24078BFEAAAAAAAA AAAABC00AAAAAAAAAAAABC01AAAAAAAAAAAACBFD573AC901E573ABFEAAAAAAAAAAAABC 00AAAAAAAAAAAABC018000000000001BFD6AF37C048D159BFEAAAAAAAAAAAABC00AAAA AAAAAAAABC015555555555556BFD7BA375F31AED6BFEAAAAAAAAAAAABC00AAAAAAAAAA AABC012AAAAAAAAAAABBFD894AB6CD8EFB1BFEAAAAAAAAAAAABC00AAAAAAAAAAAABC01 0000000000000BFD93E93E93E93E9BFEAAAAAAAAAAAABC00AAAAAAAAAAAABC00AAAAAA AAAAAABBFD9B7F0D4629B7FBFEAAAAAAAAAAAABC00AAAAAAAAAAAABC00555555555555 6BFDA00C22E450672BFEAAAAAAAAAAAABC00AAAAAAAAAAAABC000000000000001BFDA1 907F6E5D4C3BFEAAAAAAAAAAAABC00AAAAAAAAAAAABBFF5555555555558BFDA00C22E4 50672BFEAAAAAAAAAAAABC00AAAAAAAAAAAABBFE555555555555BBFD9B7F0D4629B7FB FEAAAAAAAAAAAABC00AAAAAAAAAAAABBCC8000000000000BFD93E93E93E93E9BFEAAAA AAAAAAAABC00AAAAAAAAAAAAB3FE555555555554FBFD894AB6CD8EFB1BFEAAAAAAAAAA AABC00AAAAAAAAAAAAB3FF5555555555552BFD7BA375F31AED6BFEAAAAAAAAAAAABC00 AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD6AF37C048D15ABFEAAAAAAAAAAAABC00AAAAAA AAAAAAB4005555555555553BFD573AC901E573BBFEAAAAAAAAAAAABC00AAAAAAAAAAAA B400AAAAAAAAAAAA8BFD40795CEB24079BFEAAAAAAAAAAAABC00AAAAAAAAAAAAB400FF FFFFFFFFFFDBFD26AF37C048D16BFEAAAAAAAAAAAABC00AAAAAAAAAAAAB4012AAAAAAA AAAA9BFD09DC598153D11BFEAAAAAAAAAAAABC00AAAAAAAAAAAAB4015555555555554B FCD401845C8A0CFBFEAAAAAAAAAAAABC00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFC8E38 E38E38E39BFEAAAAAAAAAAAABC00AAAAAAAAAAAAB401AAAAAAAAAAAAABFC425ED097B4 25EBFEAAAAAAAAAAAABC00AAAAAAAAAAAAB401D555555555555BFBE0E696F1F7A7FBFE AAAAAAAAAAAABC00AAAAAAAAAAAAB4020000000000000BFB30ECA8641FDB6BFEAAAAAA AAAAAABC00AAAAAAAAAAAAB4021555555555555BF9D33F5617839A1BFEAAAAAAAAAAAA BC00AAAAAAAAAAAAB4022AAAAAAAAAAAA3F94DBF86A314DA8BFEAAAAAAAAAAAABC00AA AAAAAAAAAAB4023FFFFFFFFFFFF3FB27D27D27D27CCBFEAAAAAAAAAAAABC0055555555 55556C024000000000000BFC9BE02468ACF15BFEAAAAAAAAAAAABC005555555555556C 022AAAAAAAAAAABBFCE1A8C536FE1A6BFEAAAAAAAAAAAABC005555555555556C021555 555555556BFD10AFF9EE8DD7CBFEAAAAAAAAAAAABC005555555555556C020000000000 001BFD2D82D82D82D83BFEAAAAAAAAAAAABC005555555555556C01D555555555557BFD 474CFD585E0E6BFEAAAAAAAAAAAABC005555555555556C01AAAAAAAAAAAACBFD5E0E69 6F1F7A8BFEAAAAAAAAAAAABC005555555555556C018000000000001BFD71C71C71C71C 7BFEAAAAAAAAAAAABC005555555555556C015555555555556BFD8277166054F44BFEAA AAAAAAAAAABC005555555555556C012AAAAAAAAAAABBFD901E573AC901FBFEAAAAAAAA AAAABC005555555555556C010000000000000BFD9ABCDF0123457BFEAAAAAAAAAAAABC 005555555555556C00AAAAAAAAAAAABBFDA252ADB363BEDBFEAAAAAAAAAAAABC005555 555555556C005555555555556BFDA6DFC3518A6E0BFEAAAAAAAAAAAABC005555555555 556C000000000000001BFDA8641FDB97531BFEAAAAAAAAAAAABC005555555555556BFF 5555555555558BFDA6DFC3518A6E0BFEAAAAAAAAAAAABC005555555555556BFE555555 555555BBFDA252ADB363BEDBFEAAAAAAAAAAAABC005555555555556BCC800000000000 0BFD9ABCDF0123457BFEAAAAAAAAAAAABC0055555555555563FE555555555554FBFD90 1E573AC901FBFEAAAAAAAAAAAABC0055555555555563FF5555555555552BFD82771660 54F44BFEAAAAAAAAAAAABC0055555555555563FFFFFFFFFFFFFFCBFD71C71C71C71C8B FEAAAAAAAAAAAABC0055555555555564005555555555553BFD5E0E696F1F7A9BFEAAAA AAAAAAAABC005555555555556400AAAAAAAAAAAA8BFD474CFD585E0E7BFEAAAAAAAAAA AABC005555555555556400FFFFFFFFFFFFDBFD2D82D82D82D84BFEAAAAAAAAAAAABC00 55555555555564012AAAAAAAAAAA9BFD10AFF9EE8DD7FBFEAAAAAAAAAAAABC00555555 55555564015555555555554BFCE1A8C536FE1ABBFEAAAAAAAAAAAABC00555555555555 64017FFFFFFFFFFFFBFC9BE02468ACF15BFEAAAAAAAAAAAABC005555555555556401AA AAAAAAAAAAABFC500611722833ABFEAAAAAAAAAAAABC005555555555556401D5555555 55555BFBFC3518A6DFC37BFEAAAAAAAAAAAABC0055555555555564020000000000000B FB4C3B2A1907F6EBFEAAAAAAAAAAAABC0055555555555564021555555555555BFA203C AE7592041BFEAAAAAAAAAAAABC0055555555555564022AAAAAAAAAAAA3F8C10AFF9EE8 D8FBFEAAAAAAAAAAAABC0055555555555564023FFFFFFFFFFFF3FB0C83FB72EA614BFE AAAAAAAAAAAABC000000000000001C024000000000000BFCA06D3A06D3A09BFEAAAAAA AAAAAABC000000000000001C022AAAAAAAAAAABBFCE635DAD524C9ABFEAAAAAAAAAAAA BC000000000000001C021555555555556BFD12F684BDA12F6BFEAAAAAAAAAAAABC0000 00000000001C020000000000001BFD2FC962FC962FDBFEAAAAAAAAAAAABC0000000000 00001C01D555555555557BFD4993882771660BFEAAAAAAAAAAAABC000000000000001C 01AAAAAAAAAAAACBFD6054F43E32D22BFEAAAAAAAAAAAABC000000000000001C018000 000000001BFD740DA740DA741BFEAAAAAAAAAAAABC000000000000001C015555555555 556BFD84BDA12F684BEBFEAAAAAAAAAAAABC000000000000001C012AAAAAAAAAAABBFD 9264E209DC599BFEAAAAAAAAAAAABC000000000000001C010000000000000BFD9D0369 D0369D1BFEAAAAAAAAAAAABC000000000000001C00AAAAAAAAAAAABBFDA49938827716 7BFEAAAAAAAAAAAABC000000000000001C005555555555556BFDA9264E209DC5ABFEAA AAAAAAAAAABC000000000000001C000000000000001BFDAAAAAAAAAAAABBFEAAAAAAAA AAAABC000000000000001BFF5555555555558BFDA9264E209DC5ABFEAAAAAAAAAAAABC 000000000000001BFE555555555555BBFDA499388277167BFEAAAAAAAAAAAABC000000 000000001BCC8000000000000BFD9D0369D0369D1BFEAAAAAAAAAAAABC000000000000 0013FE555555555554FBFD9264E209DC599BFEAAAAAAAAAAAABC0000000000000013FF 5555555555552BFD84BDA12F684BEBFEAAAAAAAAAAAABC0000000000000013FFFFFFFF FFFFFFCBFD740DA740DA742BFEAAAAAAAAAAAABC000000000000001400555555555555 3BFD6054F43E32D23BFEAAAAAAAAAAAABC000000000000001400AAAAAAAAAAAA8BFD49 93882771661BFEAAAAAAAAAAAABC000000000000001400FFFFFFFFFFFFDBFD2FC962FC 962FEBFEAAAAAAAAAAAABC0000000000000014012AAAAAAAAAAA9BFD12F684BDA12F9B FEAAAAAAAAAAAABC0000000000000014015555555555554BFCE635DAD524C9FBFEAAAA AAAAAAAABC0000000000000014017FFFFFFFFFFFFBFCA06D3A06D3A09BFEAAAAAAAAAA AABC000000000000001401AAAAAAAAAAAAABFC549327104EE2EBFEAAAAAAAAAAAABC00 0000000000001401D555555555555BFC02A7A1F19690FBFEAAAAAAAAAAAABC00000000 00000014020000000000000BFB5555555555556BFEAAAAAAAAAAAABC00000000000000 14021555555555555BFA327104EE2CC11BFEAAAAAAAAAAAABC0000000000000014022A AAAAAAAAAAA3F87839A5BC7DE4FBFEAAAAAAAAAAAABC0000000000000014023FFFFFFF FFFFF3FB0369D0369D02CBFEAAAAAAAAAAAABBFF5555555555558C024000000000000B FC9BE02468ACF15BFEAAAAAAAAAAAABBFF5555555555558C022AAAAAAAAAAABBFCE1A8 C536FE1A6BFEAAAAAAAAAAAABBFF5555555555558C021555555555556BFD10AFF9EE8D D7CBFEAAAAAAAAAAAABBFF5555555555558C020000000000001BFD2D82D82D82D83BFE AAAAAAAAAAAABBFF5555555555558C01D555555555557BFD474CFD585E0E6BFEAAAAAA AAAAAABBFF5555555555558C01AAAAAAAAAAAACBFD5E0E696F1F7A8BFEAAAAAAAAAAAA BBFF5555555555558C018000000000001BFD71C71C71C71C7BFEAAAAAAAAAAAABBFF55 55555555558C015555555555556BFD8277166054F44BFEAAAAAAAAAAAABBFF55555555 55558C012AAAAAAAAAAABBFD901E573AC901FBFEAAAAAAAAAAAABBFF5555555555558C 010000000000000BFD9ABCDF0123457BFEAAAAAAAAAAAABBFF5555555555558C00AAAA AAAAAAAABBFDA252ADB363BEDBFEAAAAAAAAAAAABBFF5555555555558C005555555555 556BFDA6DFC3518A6E0BFEAAAAAAAAAAAABBFF5555555555558C000000000000001BFD A8641FDB97531BFEAAAAAAAAAAAABBFF5555555555558BFF5555555555558BFDA6DFC3 518A6E0BFEAAAAAAAAAAAABBFF5555555555558BFE555555555555BBFDA252ADB363BE DBFEAAAAAAAAAAAABBFF5555555555558BCC8000000000000BFD9ABCDF0123457BFEAA AAAAAAAAAABBFF55555555555583FE555555555554FBFD901E573AC901FBFEAAAAAAAA AAAABBFF55555555555583FF5555555555552BFD8277166054F44BFEAAAAAAAAAAAABB FF55555555555583FFFFFFFFFFFFFFCBFD71C71C71C71C8BFEAAAAAAAAAAAABBFF5555 5555555584005555555555553BFD5E0E696F1F7A9BFEAAAAAAAAAAAABBFF5555555555 558400AAAAAAAAAAAA8BFD474CFD585E0E7BFEAAAAAAAAAAAABBFF5555555555558400 FFFFFFFFFFFFDBFD2D82D82D82D84BFEAAAAAAAAAAAABBFF55555555555584012AAAAA AAAAAA9BFD10AFF9EE8DD7FBFEAAAAAAAAAAAABBFF5555555555558401555555555555 4BFCE1A8C536FE1ABBFEAAAAAAAAAAAABBFF55555555555584017FFFFFFFFFFFFBFC9B E02468ACF15BFEAAAAAAAAAAAABBFF5555555555558401AAAAAAAAAAAAABFC50061172 2833ABFEAAAAAAAAAAAABBFF5555555555558401D555555555555BFBFC3518A6DFC37B FEAAAAAAAAAAAABBFF55555555555584020000000000000BFB4C3B2A1907F6EBFEAAAA AAAAAAAABBFF55555555555584021555555555555BFA203CAE7592041BFEAAAAAAAAAA AABBFF55555555555584022AAAAAAAAAAAA3F8C10AFF9EE8D8FBFEAAAAAAAAAAAABBFF 55555555555584023FFFFFFFFFFFF3FB0C83FB72EA614BFEAAAAAAAAAAAABBFE555555 555555BC024000000000000BFC8E38E38E38E39BFEAAAAAAAAAAAABBFE555555555555 BC022AAAAAAAAAAABBFCD401845C8A0CEBFEAAAAAAAAAAAABBFE555555555555BC0215 55555555556BFD09DC598153D10BFEAAAAAAAAAAAABBFE555555555555BC0200000000 00001BFD26AF37C048D15BFEAAAAAAAAAAAABBFE555555555555BC01D555555555557B FD40795CEB24079BFEAAAAAAAAAAAABBFE555555555555BC01AAAAAAAAAAAACBFD573A C901E573BBFEAAAAAAAAAAAABBFE555555555555BC018000000000001BFD6AF37C048D 15ABFEAAAAAAAAAAAABBFE555555555555BC015555555555556BFD7BA375F31AED7BFE AAAAAAAAAAAABBFE555555555555BC012AAAAAAAAAAABBFD894AB6CD8EFB2BFEAAAAAA AAAAAABBFE555555555555BC010000000000000BFD93E93E93E93EABFEAAAAAAAAAAAA BBFE555555555555BC00AAAAAAAAAAAABBFD9B7F0D4629B80BFEAAAAAAAAAAAABBFE55 5555555555BC005555555555556BFDA00C22E450673BFEAAAAAAAAAAAABBFE55555555 5555BC000000000000001BFDA1907F6E5D4C4BFEAAAAAAAAAAAABBFE555555555555BB FF5555555555558BFDA00C22E450673BFEAAAAAAAAAAAABBFE555555555555BBFE5555 55555555BBFD9B7F0D4629B80BFEAAAAAAAAAAAABBFE555555555555BBCC8000000000 000BFD93E93E93E93EABFEAAAAAAAAAAAABBFE555555555555B3FE555555555554FBFD 894AB6CD8EFB2BFEAAAAAAAAAAAABBFE555555555555B3FF5555555555552BFD7BA375 F31AED7BFEAAAAAAAAAAAABBFE555555555555B3FFFFFFFFFFFFFFCBFD6AF37C048D15 BBFEAAAAAAAAAAAABBFE555555555555B4005555555555553BFD573AC901E573CBFEAA AAAAAAAAAABBFE555555555555B400AAAAAAAAAAAA8BFD40795CEB2407ABFEAAAAAAAA AAAABBFE555555555555B400FFFFFFFFFFFFDBFD26AF37C048D17BFEAAAAAAAAAAAABB FE555555555555B4012AAAAAAAAAAA9BFD09DC598153D12BFEAAAAAAAAAAAABBFE5555 55555555B4015555555555554BFCD401845C8A0D1BFEAAAAAAAAAAAABBFE5555555555 55B4017FFFFFFFFFFFFBFC8E38E38E38E3BBFEAAAAAAAAAAAABBFE555555555555B401 AAAAAAAAAAAAABFC425ED097B4260BFEAAAAAAAAAAAABBFE555555555555B401D55555 5555555BFBE0E696F1F7A83BFEAAAAAAAAAAAABBFE555555555555B402000000000000 0BFB30ECA8641FDBABFEAAAAAAAAAAAABBFE555555555555B4021555555555555BF9D3 3F5617839B1BFEAAAAAAAAAAAABBFE555555555555B4022AAAAAAAAAAAA3F94DBF86A3 14D98BFEAAAAAAAAAAAABBFE555555555555B4023FFFFFFFFFFFF3FB27D27D27D27C8B FEAAAAAAAAAAAABBCC8000000000000C024000000000000BFC7777777777779BFEAAAA AAAAAAAABBCC8000000000000C022AAAAAAAAAAABBFCBD401845C8A0ABFEAAAAAAAAAA AABBCC8000000000000C021555555555556BFCFCF746EBE635DBFEAAAAAAAAAAAABBCC 8000000000000C020000000000001BFD1B4E81B4E81B4BFEAAAAAAAAAAAABBCC800000 0000000C01D555555555557BFD3518A6DFC3518BFEAAAAAAAAAAAABBCC800000000000 0C01AAAAAAAAAAAACBFD4BDA12F684BDABFEAAAAAAAAAAAABBCC8000000000000C0180 00000000001BFD5F92C5F92C5F9BFEAAAAAAAAAAAABBCC8000000000000C0155555555 55556BFD7042BFE7BA376BFEAAAAAAAAAAAABBCC8000000000000C012AAAAAAAAAAABB FD7DEA00C22E451BFEAAAAAAAAAAAABBCC8000000000000C010000000000000BFD8888 888888889BFEAAAAAAAAAAAABBCC8000000000000C00AAAAAAAAAAAABBFD901E573AC9 01FBFEAAAAAAAAAAAABBCC8000000000000C005555555555556BFD94AB6CD8EFB12BFE AAAAAAAAAAAABBCC8000000000000C000000000000001BFD962FC962FC963BFEAAAAAA AAAAAABBCC8000000000000BFF5555555555558BFD94AB6CD8EFB12BFEAAAAAAAAAAAA BBCC8000000000000BFE555555555555BBFD901E573AC901FBFEAAAAAAAAAAAABBCC80 00000000000BCC8000000000000BFD8888888888889BFEAAAAAAAAAAAABBCC80000000 000003FE555555555554FBFD7DEA00C22E451BFEAAAAAAAAAAAABBCC80000000000003 FF5555555555552BFD7042BFE7BA376BFEAAAAAAAAAAAABBCC80000000000003FFFFFF FFFFFFFFCBFD5F92C5F92C5FABFEAAAAAAAAAAAABBCC80000000000004005555555555 553BFD4BDA12F684BDBBFEAAAAAAAAAAAABBCC8000000000000400AAAAAAAAAAAA8BFD 3518A6DFC3519BFEAAAAAAAAAAAABBCC8000000000000400FFFFFFFFFFFFDBFD1B4E81 B4E81B6BFEAAAAAAAAAAAABBCC80000000000004012AAAAAAAAAAA9BFCFCF746EBE636 2BFEAAAAAAAAAAAABBCC80000000000004015555555555554BFCBD401845C8A0FBFEAA AAAAAAAAAABBCC80000000000004017FFFFFFFFFFFFBFC7777777777779BFEAAAAAAAA AAAABBCC8000000000000401AAAAAAAAAAAAABFC2B9D6480F2B9EBFEAAAAAAAAAAAABB CC8000000000000401D555555555555BFBB363BEC474CFFBFEAAAAAAAAAAAABBCC8000 0000000004020000000000000BFB0369D0369D036BFEAAAAAAAAAAAABBCC8000000000 0004021555555555555BF91D33F561783A1BFEAAAAAAAAAAAABBCC8000000000000402 2AAAAAAAAAAAA3FA01E573AC901D4BFEAAAAAAAAAAAABBCC80000000000004023FFFFF FFFFFFF3FB555555555554CBFEAAAAAAAAAAAAB3FE555555555554FC02400000000000 0BFC579BE02468AD1BFEAAAAAAAAAAAAB3FE555555555554FC022AAAAAAAAAAABBFC9D 6480F2B9D64BFEAAAAAAAAAAAAB3FE555555555554FC021555555555556BFCDD1BAF98 D76B5BFEAAAAAAAAAAAAB3FE555555555554FC020000000000001BFD0B60B60B60B60B FEAAAAAAAAAAAAB3FE555555555554FC01D555555555557BFD252ADB363BEC4BFEAAAA AAAAAAAAB3FE555555555554FC01AAAAAAAAAAAACBFD3BEC474CFD586BFEAAAAAAAAAA AAB3FE555555555554FC018000000000001BFD4FA4FA4FA4FA5BFEAAAAAAAAAAAAB3FE 555555555554FC015555555555556BFD6054F43E32D22BFEAAAAAAAAAAAAB3FE555555 555554FC012AAAAAAAAAAABBFD6DFC3518A6DFDBFEAAAAAAAAAAAAB3FE555555555554 FC010000000000000BFD789ABCDF01235BFEAAAAAAAAAAAAB3FE555555555554FC00AA AAAAAAAAAABBFD80308B91419CBBFEAAAAAAAAAAAAB3FE555555555554FC0055555555 55556BFD84BDA12F684BEBFEAAAAAAAAAAAAB3FE555555555554FC000000000000001B FD8641FDB97530FBFEAAAAAAAAAAAAB3FE555555555554FBFF5555555555558BFD84BD A12F684BEBFEAAAAAAAAAAAAB3FE555555555554FBFE555555555555BBFD80308B9141 9CBBFEAAAAAAAAAAAAB3FE555555555554FBCC8000000000000BFD789ABCDF01235BFE AAAAAAAAAAAAB3FE555555555554F3FE555555555554FBFD6DFC3518A6DFDBFEAAAAAA AAAAAAB3FE555555555554F3FF5555555555552BFD6054F43E32D22BFEAAAAAAAAAAAA B3FE555555555554F3FFFFFFFFFFFFFFCBFD4FA4FA4FA4FA6BFEAAAAAAAAAAAAB3FE55 5555555554F4005555555555553BFD3BEC474CFD587BFEAAAAAAAAAAAAB3FE55555555 5554F400AAAAAAAAAAAA8BFD252ADB363BEC5BFEAAAAAAAAAAAAB3FE555555555554F4 00FFFFFFFFFFFFDBFD0B60B60B60B62BFEAAAAAAAAAAAAB3FE555555555554F4012AAA AAAAAAAA9BFCDD1BAF98D76BABFEAAAAAAAAAAAAB3FE555555555554F4015555555555 554BFC9D6480F2B9D67BFEAAAAAAAAAAAAB3FE555555555554F4017FFFFFFFFFFFFBFC 579BE02468AD1BFEAAAAAAAAAAAAB3FE555555555554F401AAAAAAAAAAAAABFC0BC1CD 2DE3EF6BFEAAAAAAAAAAAAB3FE555555555554F401D555555555555BFB73AC901E573A FBFEAAAAAAAAAAAAB3FE555555555554F4020000000000000BFA87654320FEDCCBFEAA AAAAAAAAAAB3FE555555555554F4021555555555555BF5E573AC901E616BFEAAAAAAAA AAAAB3FE555555555554F4022AAAAAAAAAAAA3FA8153D0F8CB478BFEAAAAAAAAAAAAB3 FE555555555554F4023FFFFFFFFFFFF3FB950C83FB72E9EBFEAAAAAAAAAAAAB3FF5555 555555552C024000000000000BFC2EA61D950C841BFEAAAAAAAAAAAAB3FF5555555555 552C022AAAAAAAAAAABBFC746EBE635DAD4BFEAAAAAAAAAAAAB3FF5555555555552C02 1555555555556BFCB425ED097B425BFEAAAAAAAAAAAAB3FF5555555555552C02000000 0000001BFCEDCBA98765430BFEAAAAAAAAAAAAB3FF5555555555552C01D55555555555 7BFD10AFF9EE8DD7CBFEAAAAAAAAAAAAB3FF5555555555552C01AAAAAAAAAAAACBFD27 7166054F43EBFEAAAAAAAAAAAAB3FF5555555555552C018000000000001BFD3B2A1907 F6E5DBFEAAAAAAAAAAAAB3FF5555555555552C015555555555556BFD4BDA12F684BDAB FEAAAAAAAAAAAAB3FF5555555555552C012AAAAAAAAAAABBFD598153D0F8CB5BFEAAAA AAAAAAAAB3FF5555555555552C010000000000000BFD641FDB97530EDBFEAAAAAAAAAA AAB3FF5555555555552C00AAAAAAAAAAAABBFD6BB5AA4993883BFEAAAAAAAAAAAAB3FF 5555555555552C005555555555556BFD7042BFE7BA376BFEAAAAAAAAAAAAB3FF555555 5555552C000000000000001BFD71C71C71C71C7BFEAAAAAAAAAAAAB3FF555555555555 2BFF5555555555558BFD7042BFE7BA376BFEAAAAAAAAAAAAB3FF5555555555552BFE55 5555555555BBFD6BB5AA4993883BFEAAAAAAAAAAAAB3FF5555555555552BCC80000000 00000BFD641FDB97530EDBFEAAAAAAAAAAAAB3FF55555555555523FE555555555554FB FD598153D0F8CB5BFEAAAAAAAAAAAAB3FF55555555555523FF5555555555552BFD4BDA 12F684BDABFEAAAAAAAAAAAAB3FF55555555555523FFFFFFFFFFFFFFCBFD3B2A1907F6 E5EBFEAAAAAAAAAAAAB3FF55555555555524005555555555553BFD277166054F43FBFE AAAAAAAAAAAAB3FF5555555555552400AAAAAAAAAAAA8BFD10AFF9EE8DD7DBFEAAAAAA AAAAAAB3FF5555555555552400FFFFFFFFFFFFDBFCEDCBA98765434BFEAAAAAAAAAAAA B3FF55555555555524012AAAAAAAAAAA9BFCB425ED097B42ABFEAAAAAAAAAAAAB3FF55 555555555524015555555555554BFC746EBE635DAD7BFEAAAAAAAAAAAAB3FF55555555 555524017FFFFFFFFFFFFBFC2EA61D950C841BFEAAAAAAAAAAAAB3FF55555555555524 01AAAAAAAAAAAAABFBC598153D0F8CDBFEAAAAAAAAAAAAB3FF5555555555552401D555 555555555BFB21C10AFF9EE8FBFEAAAAAAAAAAAAB3FF55555555555524020000000000 000BF9C71C71C71C718BFEAAAAAAAAAAAAB3FF555555555555240215555555555553F9 2956D9B1DF617BFEAAAAAAAAAAAAB3FF55555555555524022AAAAAAAAAAAA3FB12956D 9B1DF5CBFEAAAAAAAAAAAAB3FF55555555555524023FFFFFFFFFFFF3FBE6F8091A2B3B EBFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC024000000000000BFBF92C5F92C5F99BFEAA AAAAAAAAAAB3FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFC425ED097B4260BFEAAAAAAAA AAAAB3FFFFFFFFFFFFFFCC021555555555556BFC8215FF3DD1BB1BFEAAAAAAAAAAAAB3 FFFFFFFFFFFFFFCC020000000000001BFCBBBBBBBBBBBBCBFEAAAAAAAAAAAAB3FFFFFF FFFFFFFFCC01D555555555557BFCEF50061172284BFEAAAAAAAAAAAAB3FFFFFFFFFFFF FFCC01AAAAAAAAAAAACBFD0E696F1F7A804BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC01 8000000000001BFD2222222222223BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC01555555 5555556BFD32D21C10AFFA0BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC012AAAAAAAAAAA BBFD40795CEB2407BBFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC010000000000000BFD4B 17E4B17E4B3BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFD52ADB363 BEC49BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC005555555555556BFD573AC901E573CB FEAAAAAAAAAAAAB3FFFFFFFFFFFFFFCC000000000000001BFD58BF258BF258DBFEAAAA AAAAAAAAB3FFFFFFFFFFFFFFCBFF5555555555558BFD573AC901E573CBFEAAAAAAAAAA AAB3FFFFFFFFFFFFFFCBFE555555555555BBFD52ADB363BEC49BFEAAAAAAAAAAAAB3FF FFFFFFFFFFFFCBCC8000000000000BFD4B17E4B17E4B3BFEAAAAAAAAAAAAB3FFFFFFFF FFFFFFC3FE555555555554FBFD40795CEB2407BBFEAAAAAAAAAAAAB3FFFFFFFFFFFFFF C3FF5555555555552BFD32D21C10AFFA0BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC3FFFF FFFFFFFFFFCBFD2222222222224BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC40055555555 55553BFD0E696F1F7A805BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC400AAAAAAAAAAAA8B FCEF50061172287BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFCBBBB BBBBBBBC0BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFC8215FF3DD1 BB6BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC4015555555555554BFC425ED097B4263BFE AAAAAAAAAAAAB3FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFBF92C5F92C5F9DBFEAAAAAA AAAAAAB3FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFB617839A5BC7E7BFEAAAAAAAAAAAA B3FFFFFFFFFFFFFFC401D555555555555BFA7B425ED097B51BFEAAAAAAAAAAAAB3FFFF FFFFFFFFFFC4020000000000000BF6B4E81B4E81BC0BFEAAAAAAAAAAAAB3FFFFFFFFFF FFFFC40215555555555553FA5CEB240795CDBBFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC4 022AAAAAAAAAAAA3FB76B5493271044BFEAAAAAAAAAAAAB3FFFFFFFFFFFFFFC4023FFF FFFFFFFFF3FC258BF258BF253BFEAAAAAAAAAAAAB4005555555555553C024000000000 000BFB82D82D82D82E1BFEAAAAAAAAAAAAB4005555555555553C022AAAAAAAAAAABBFC 0734B78FBD404BFEAAAAAAAAAAAAB4005555555555553C021555555555556BFC46EBE6 35DAD55BFEAAAAAAAAAAAAB4005555555555553C020000000000001BFC8091A2B3C4D6 0BFEAAAAAAAAAAAAB4005555555555553C01D555555555557BFCB425ED097B428BFEAA AAAAAAAAAAB4005555555555553C01AAAAAAAAAAAACBFCE1A8C536FE1ACBFEAAAAAAAA AAAAB4005555555555553C018000000000001BFD048D159E26AF5BFEAAAAAAAAAAAAB4 005555555555553C015555555555556BFD153D0F8CB4872BFEAAAAAAAAAAAAB4005555 555555553C012AAAAAAAAAAABBFD22E450672894DBFEAAAAAAAAAAAAB4005555555555 553C010000000000000BFD2D82D82D82D85BFEAAAAAAAAAAAAB4005555555555553C00 AAAAAAAAAAAABBFD3518A6DFC351BBFEAAAAAAAAAAAAB4005555555555553C00555555 5555556BFD39A5BC7DEA00EBFEAAAAAAAAAAAAB4005555555555553C00000000000000 1BFD3B2A1907F6E5FBFEAAAAAAAAAAAAB4005555555555553BFF5555555555558BFD39 A5BC7DEA00EBFEAAAAAAAAAAAAB4005555555555553BFE555555555555BBFD3518A6DF C351BBFEAAAAAAAAAAAAB4005555555555553BCC8000000000000BFD2D82D82D82D85B FEAAAAAAAAAAAAB40055555555555533FE555555555554FBFD22E450672894DBFEAAAA AAAAAAAAB40055555555555533FF5555555555552BFD153D0F8CB4872BFEAAAAAAAAAA AAB40055555555555533FFFFFFFFFFFFFFCBFD048D159E26AF6BFEAAAAAAAAAAAAB400 55555555555534005555555555553BFCE1A8C536FE1ADBFEAAAAAAAAAAAAB400555555 5555553400AAAAAAAAAAAA8BFCB425ED097B42BBFEAAAAAAAAAAAAB400555555555555 3400FFFFFFFFFFFFDBFC8091A2B3C4D65BFEAAAAAAAAAAAAB40055555555555534012A AAAAAAAAAA9BFC46EBE635DAD59BFEAAAAAAAAAAAAB400555555555555340155555555 55554BFC0734B78FBD408BFEAAAAAAAAAAAAB40055555555555534017FFFFFFFFFFFFB FB82D82D82D82E5BFEAAAAAAAAAAAAB4005555555555553401AAAAAAAAAAAAABFAD648 0F2B9D65EBFEAAAAAAAAAAAAB4005555555555553401D555555555555BF91D33F56178 3C2BFEAAAAAAAAAAAAB400555555555555340200000000000003F9A2B3C4D5E6F68BFE AAAAAAAAAAAAB400555555555555340215555555555553FB24C9C413B8B26BFEAAAAAA AAAAAAB40055555555555534022AAAAAAAAAAAA3FBED097B425ECFCBFEAAAAAAAAAAAA B40055555555555534023FFFFFFFFFFFF3FC60B60B60B60AFBFEAAAAAAAAAAAAB400AA AAAAAAAAAA8C024000000000000BFAF49F49F49F4AABFEAAAAAAAAAAAAB400AAAAAAAA AAAA8C022AAAAAAAAAAABBFB85E0E696F1F7CBFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C 021555555555556BFC02A7A1F19690FBFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C020000 000000001BFC3C4D5E6F8091ABFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C01D555555555 557BFC6FE1A8C536FE2BFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFC 9D6480F2B9D66BFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C018000000000001BFCC4D5E6 F8091A4BFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C015555555555556BFCE635DAD524C9 EBFEAAAAAAAAAAAAB400AAAAAAAAAAAA8C012AAAAAAAAAAABBFD00C22E450672ABFEAA AAAAAAAAAAB400AAAAAAAAAAAA8C010000000000000BFD0B60B60B60B62BFEAAAAAAAA AAAAB400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFD12F684BDA12F8BFEAAAAAAAAAAAAB4 00AAAAAAAAAAAA8C005555555555556BFD17839A5BC7DEBBFEAAAAAAAAAAAAB400AAAA AAAAAAAA8C000000000000001BFD1907F6E5D4C3CBFEAAAAAAAAAAAAB400AAAAAAAAAA AA8BFF5555555555558BFD17839A5BC7DEBBFEAAAAAAAAAAAAB400AAAAAAAAAAAA8BFE 555555555555BBFD12F684BDA12F8BFEAAAAAAAAAAAAB400AAAAAAAAAAAA8BCC800000 0000000BFD0B60B60B60B62BFEAAAAAAAAAAAAB400AAAAAAAAAAAA83FE555555555554 FBFD00C22E450672ABFEAAAAAAAAAAAAB400AAAAAAAAAAAA83FF5555555555552BFCE6 35DAD524C9FBFEAAAAAAAAAAAAB400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFCC4D5E6F8 091A6BFEAAAAAAAAAAAAB400AAAAAAAAAAAA84005555555555553BFC9D6480F2B9D68B FEAAAAAAAAAAAAB400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFC6FE1A8C536FE6BFEAAAA AAAAAAAAB400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFC3C4D5E6F8091FBFEAAAAAAAAAA AAB400AAAAAAAAAAAA84012AAAAAAAAAAA9BFC02A7A1F196913BFEAAAAAAAAAAAAB400 AAAAAAAAAAAA84015555555555554BFB85E0E696F1F83BFEAAAAAAAAAAAAB400AAAAAA AAAAAA84017FFFFFFFFFFFFBFAF49F49F49F4B1BFEAAAAAAAAAAAAB400AAAAAAAAAAAA 8401AAAAAAAAAAAAABF98A6DFC3518A8BBFEAAAAAAAAAAAAB400AAAAAAAAAAAA8401D5 555555555553F904EE2CC0A9E6EBFEAAAAAAAAAAAAB400AAAAAAAAAAAA840200000000 000003FAE26AF37C048CCBFEAAAAAAAAAAAAB400AAAAAAAAAAAA840215555555555553 FBAD524C9C413B2BFEAAAAAAAAAAAAB400AAAAAAAAAAAA84022AAAAAAAAAAAA3FC3AC9 01E573AC4BFEAAAAAAAAAAAAB400AAAAAAAAAAAA84023FFFFFFFFFFFF3FCA4FA4FA4FA 4F5BFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC024000000000000BF97E4B17E4B1804BFE AAAAAAAAAAAAB400FFFFFFFFFFFFDC022AAAAAAAAAAABBFAD6480F2B9D650BFEAAAAAA AAAAAAB400FFFFFFFFFFFFDC021555555555556BFB6A9264E209DCABFEAAAAAAAAAAAA B400FFFFFFFFFFFFDC020000000000001BFBDDDDDDDDDDDDFBFEAAAAAAAAAAAAB400FF FFFFFFFFFFDC01D555555555557BFC22833944A55B8BFEAAAAAAAAAAAAB400FFFFFFFF FFFFDC01AAAAAAAAAAAACBFC500611722833CBFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC 018000000000001BFC777777777777ABFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC015555 555555556BFC98D76B5493274BFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC012AAAAAAAAA AABBFCB425ED097B429BFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC010000000000000BFC C962FC962FC9ABFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFCD88E99 FAB0BC6BFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC005555555555556BFCE1A8C536FE1A DBFEAAAAAAAAAAAAB400FFFFFFFFFFFFDC000000000000001BFCE4B17E4B17E4FBFEAA AAAAAAAAAAB400FFFFFFFFFFFFDBFF5555555555558BFCE1A8C536FE1ACBFEAAAAAAAA AAAAB400FFFFFFFFFFFFDBFE555555555555BBFCD88E99FAB0BC6BFEAAAAAAAAAAAAB4 00FFFFFFFFFFFFDBCC8000000000000BFCC962FC962FC9ABFEAAAAAAAAAAAAB400FFFF FFFFFFFFD3FE555555555554FBFCB425ED097B42ABFEAAAAAAAAAAAAB400FFFFFFFFFF FFD3FF5555555555552BFC98D76B5493275BFEAAAAAAAAAAAAB400FFFFFFFFFFFFD3FF FFFFFFFFFFFFCBFC777777777777CBFEAAAAAAAAAAAAB400FFFFFFFFFFFFD400555555 5555553BFC500611722833EBFEAAAAAAAAAAAAB400FFFFFFFFFFFFD400AAAAAAAAAAAA 8BFC22833944A55BCBFEAAAAAAAAAAAAB400FFFFFFFFFFFFD400FFFFFFFFFFFFDBFBDD DDDDDDDDDE9BFEAAAAAAAAAAAAB400FFFFFFFFFFFFD4012AAAAAAAAAAA9BFB6A9264E2 09DD1BFEAAAAAAAAAAAAB400FFFFFFFFFFFFD4015555555555554BFAD6480F2B9D65EB FEAAAAAAAAAAAAB400FFFFFFFFFFFFD4017FFFFFFFFFFFFBF97E4B17E4B1812BFEAAAA AAAAAAAAB400FFFFFFFFFFFFD401AAAAAAAAAAAAA3F8C10AFF9EE8D8ABFEAAAAAAAAAA AAB400FFFFFFFFFFFFD401D5555555555553FAB7F0D4629B7DFBFEAAAAAAAAAAAAB400 FFFFFFFFFFFFD40200000000000003FB8BF258BF258B9BFEAAAAAAAAAAAAB400FFFFFF FFFFFFD40215555555555553FC240795CEB2403BFEAAAAAAAAAAAAB400FFFFFFFFFFFF D4022AAAAAAAAAAAA3FC88277166054EEBFEAAAAAAAAAAAAB400FFFFFFFFFFFFD4023F FFFFFFFFFFF3FCF258BF258BF1FBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C0240000000 000003F93579BE024688CBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C022AAAAAAAAAAABB F8F19690E08581FBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C021555555555556BFA7B42 5ED097B4BBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C020000000000001BFB30ECA8641F DBBBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C01D555555555557BFB98153D0F8CB4CBFE AAAAAAAAAAAAB4012AAAAAAAAAAA9C01AAAAAAAAAAAACBFBF31AED6A92654BFEAAAAAA AAAAAAB4012AAAAAAAAAAA9C018000000000001BFC20FEDCBA98768BFEAAAAAAAAAAAA B4012AAAAAAAAAAA9C015555555555556BFC425ED097B4262BFEAAAAAAAAAAAAB4012A AAAAAAAAAA9C012AAAAAAAAAAABBFC5DAD524C9C417BFEAAAAAAAAAAAAB4012AAAAAAA AAAA9C010000000000000BFC72EA61D950C88BFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C 00AAAAAAAAAAAABBFC8215FF3DD1BB4BFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C005555 555555556BFC8B302A7A1F19BBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9C000000000000 001BFC8E38E38E38E3DBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9BFF5555555555558BFC 8B302A7A1F19ABFEAAAAAAAAAAAAB4012AAAAAAAAAAA9BFE555555555555BBFC8215FF 3DD1BB4BFEAAAAAAAAAAAAB4012AAAAAAAAAAA9BCC8000000000000BFC72EA61D950C8 8BFEAAAAAAAAAAAAB4012AAAAAAAAAAA93FE555555555554FBFC5DAD524C9C418BFEAA AAAAAAAAAAB4012AAAAAAAAAAA93FF5555555555552BFC425ED097B4263BFEAAAAAAAA AAAAB4012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFC20FEDCBA9876ABFEAAAAAAAAAAAAB4 012AAAAAAAAAAA94005555555555553BFBF31AED6A92659BFEAAAAAAAAAAAAB4012AAA AAAAAAAA9400AAAAAAAAAAAA8BFB98153D0F8CB53BFEAAAAAAAAAAAAB4012AAAAAAAAA AA9400FFFFFFFFFFFFDBFB30ECA8641FDC5BFEAAAAAAAAAAAAB4012AAAAAAAAAAA9401 2AAAAAAAAAAA9BFA7B425ED097B5ABFEAAAAAAAAAAAAB4012AAAAAAAAAAA9401555555 5555554BF8F19690E085859BFEAAAAAAAAAAAAB4012AAAAAAAAAAA94017FFFFFFFFFFF F3F93579BE024687EBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9401AAAAAAAAAAAAA3FACA 252ADB363ACBFEAAAAAAAAAAAAB4012AAAAAAAAAAA9401D5555555555553FB88E99FAB 0BC14BFEAAAAAAAAAAAAB4012AAAAAAAAAAA940200000000000003FC1C71C71C71C6EB FEAAAAAAAAAAAAB4012AAAAAAAAAAA940215555555555553FC7A80308B91415BFEAAAA AAAAAAAAB4012AAAAAAAAAAA94022AAAAAAAAAAAA3FCDEA00C22E4500BFEAAAAAAAAAA AAB4012AAAAAAAAAAA94023FFFFFFFFFFFF3FD2468ACF135798BFEAAAAAAAAAAAAB401 5555555555554C0240000000000003FB0C83FB72EA617BFEAAAAAAAAAAAAB401555555 5555554C022AAAAAAAAAAAB3FA01E573AC901E0BFEAAAAAAAAAAAAB401555555555555 4C0215555555555563F3845C8A0CE4A7EBFEAAAAAAAAAAAAB4015555555555554C0200 00000000001BF9C71C71C71C725BFEAAAAAAAAAAAAB4015555555555554C01D5555555 55557BFAB1DF623A67EB3BFEAAAAAAAAAAAAB4015555555555554C01AAAAAAAAAAAACB FB33F5617839A62BFEAAAAAAAAAAAAB4015555555555554C018000000000001BFB82D8 2D82D82DEBFEAAAAAAAAAAAAB4015555555555554C015555555555556BFBC598153D0F 8D3BFEAAAAAAAAAAAAB4015555555555554C012AAAAAAAAAAABBFBFC3518A6DFC3DBFE AAAAAAAAAAAAB4015555555555554C010000000000000BFC13579BE02468FBFEAAAAAA AAAAAAB4015555555555554C00AAAAAAAAAAAABBFC22833944A55BBBFEAAAAAAAAAAAA B4015555555555554C005555555555556BFC2B9D6480F2BA2BFEAAAAAAAAAAAAB40155 55555555554C000000000000001BFC2EA61D950C844BFEAAAAAAAAAAAAB40155555555 55554BFF5555555555558BFC2B9D6480F2BA1BFEAAAAAAAAAAAAB4015555555555554B FE555555555555BBFC22833944A55BBBFEAAAAAAAAAAAAB4015555555555554BCC8000 000000000BFC13579BE02468FBFEAAAAAAAAAAAAB40155555555555543FE5555555555 54FBFBFC3518A6DFC3EBFEAAAAAAAAAAAAB40155555555555543FF5555555555552BFB C598153D0F8D5BFEAAAAAAAAAAAAB40155555555555543FFFFFFFFFFFFFFCBFB82D82D 82D82E2BFEAAAAAAAAAAAAB40155555555555544005555555555553BFB33F5617839A6 6BFEAAAAAAAAAAAAB4015555555555554400AAAAAAAAAAAA8BFAB1DF623A67EC3BFEAA AAAAAAAAAAB4015555555555554400FFFFFFFFFFFFDBF9C71C71C71C74CBFEAAAAAAAA AAAAB40155555555555544012AAAAAAAAAAA93F3845C8A0CE44C3BFEAAAAAAAAAAAAB4 01555555555555440155555555555543FA01E573AC901CEBFEAAAAAAAAAAAAB4015555 5555555544017FFFFFFFFFFFF3FB0C83FB72EA612BFEAAAAAAAAAAAAB4015555555555 554401AAAAAAAAAAAAA3FBA438215FF3DC8BFEAAAAAAAAAAAAB4015555555555554401 D5555555555553FC240795CEB2403BFEAAAAAAAAAAAAB4015555555555554402000000 00000003FC7C048D159E268BFEAAAAAAAAAAAAB4015555555555554402155555555555 53FCDA12F684BDA0EBFEAAAAAAAAAAAAB40155555555555544022AAAAAAAAAAAA3FD1F 19690E0857CBFEAAAAAAAAAAAAB40155555555555544023FFFFFFFFFFFF3FD54320FED CBA95BFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC0240000000000003FBDDDDDDDDDDDD9B FEAAAAAAAAAAAAB4017FFFFFFFFFFFFC022AAAAAAAAAAAB3FB524C9C413B8B0BFEAAAA AAAAAAAAB4017FFFFFFFFFFFFC0215555555555563FAA5BC7DEA00C1DBFEAAAAAAAAAA AAB4017FFFFFFFFFFFFC0200000000000013F97E4B17E4B17E3BFEAAAAAAAAAAAAB401 7FFFFFFFFFFFFC01D555555555557BF5E573AC901E5EDBFEAAAAAAAAAAAAB4017FFFFF FFFFFFFC01AAAAAAAAAAAACBF98A6DFC3518A7FBFEAAAAAAAAAAAAB4017FFFFFFFFFFF FC018000000000001BFA62FC962FC9637BFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC0155 55555555556BFAE87C65A438222BFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC012AAAAAAA AAAABBFB2ADB363BEC47BBFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC010000000000000B FB555555555555CBFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC00AAAAAAAAAAAABBFB73AC 901E573B3BFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC005555555555556BFB85E0E696F1 F81BFEAAAAAAAAAAAAB4017FFFFFFFFFFFFC000000000000001BFB8BF258BF258C6BFE AAAAAAAAAAAAB4017FFFFFFFFFFFFBFF5555555555558BFB85E0E696F1F81BFEAAAAAA AAAAAAB4017FFFFFFFFFFFFBFE555555555555BBFB73AC901E573B4BFEAAAAAAAAAAAA B4017FFFFFFFFFFFFBCC8000000000000BFB555555555555DBFEAAAAAAAAAAAAB4017F FFFFFFFFFFF3FE555555555554FBFB2ADB363BEC47DBFEAAAAAAAAAAAAB4017FFFFFFF FFFFF3FF5555555555552BFAE87C65A438226BFEAAAAAAAAAAAAB4017FFFFFFFFFFFF3 FFFFFFFFFFFFFFCBFA62FC962FC9640BFEAAAAAAAAAAAAB4017FFFFFFFFFFFF4005555 555555553BF98A6DFC3518A92BFEAAAAAAAAAAAAB4017FFFFFFFFFFFF400AAAAAAAAAA AA8BF5E573AC901E7BFBFEAAAAAAAAAAAAB4017FFFFFFFFFFFF400FFFFFFFFFFFFD3F9 7E4B17E4B17BDBFEAAAAAAAAAAAAB4017FFFFFFFFFFFF4012AAAAAAAAAAA93FAA5BC7D EA00C0EBFEAAAAAAAAAAAAB4017FFFFFFFFFFFF40155555555555543FB524C9C413B8A 9BFEAAAAAAAAAAAAB4017FFFFFFFFFFFF4017FFFFFFFFFFFF3FBDDDDDDDDDDDD4BFEAA AAAAAAAAAAB4017FFFFFFFFFFFF401AAAAAAAAAAAAA3FC3AC901E573AC5BFEAAAAAAAA AAAAB4017FFFFFFFFFFFF401D5555555555553FC8CB487042BFE4BFEAAAAAAAAAAAAB4 017FFFFFFFFFFFF40200000000000003FCE4B17E4B17E48BFEAAAAAAAAAAAAB4017FFF FFFFFFFFF40215555555555553FD215FF3DD1BAF8BFEAAAAAAAAAAAAB4017FFFFFFFFF FFF4022AAAAAAAAAAAA3FD536FE1A8C536DBFEAAAAAAAAAAAAB4017FFFFFFFFFFFF402 3FFFFFFFFFFFF3FD8888888888885BFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC02400000 00000003FC60B60B60B60B3BFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC022AAAAAAAAAAA B3FC1AED6A9264E1FBFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC0215555555555563FBB6 6C77D88E99CBFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC0200000000000013FB4320FEDC BA987BFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC01D5555555555573FAB7F0D4629B7EDB FEAAAAAAAAAAAAB401AAAAAAAAAAAAAC01AAAAAAAAAAAAC3FA01E573AC901DDBFEAAAA AAAAAAAAB401AAAAAAAAAAAAAC0180000000000013F8907F6E5D4C392BFEAAAAAAAAAA AAB401AAAAAAAAAAAAAC015555555555556BF70AFF9EE8DD82EBFEAAAAAAAAAAAAB401 AAAAAAAAAAAAAC012AAAAAAAAAAABBF91D33F561783B4BFEAAAAAAAAAAAAB401AAAAAA AAAAAAAC010000000000000BF9C71C71C71C73ABFEAAAAAAAAAAAAB401AAAAAAAAAAAA AC00AAAAAAAAAAAABBFA203CAE759204BBFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC0055 55555555556BFA44A55B66C77E6BFEAAAAAAAAAAAAB401AAAAAAAAAAAAAC0000000000 00001BFA50C83FB72EA6FBFEAAAAAAAAAAAAB401AAAAAAAAAAAAABFF5555555555558B FA44A55B66C77E7BFEAAAAAAAAAAAAB401AAAAAAAAAAAAABFE555555555555BBFA203C AE759204BBFEAAAAAAAAAAAAB401AAAAAAAAAAAAABCC8000000000000BF9C71C71C71C 73BBFEAAAAAAAAAAAAB401AAAAAAAAAAAAA3FE555555555554FBF91D33F561783B9BFE AAAAAAAAAAAAB401AAAAAAAAAAAAA3FF5555555555552BF70AFF9EE8DD84BBFEAAAAAA AAAAAAB401AAAAAAAAAAAAA3FFFFFFFFFFFFFFC3F8907F6E5D4C36FBFEAAAAAAAAAAAA B401AAAAAAAAAAAAA40055555555555533FA01E573AC901D4BFEAAAAAAAAAAAAB401AA AAAAAAAAAAA400AAAAAAAAAAAA83FAB7F0D4629B7DEBFEAAAAAAAAAAAAB401AAAAAAAA AAAAA400FFFFFFFFFFFFD3FB4320FEDCBA97DBFEAAAAAAAAAAAAB401AAAAAAAAAAAAA4 012AAAAAAAAAAA93FBB66C77D88E995BFEAAAAAAAAAAAAB401AAAAAAAAAAAAA4015555 5555555543FC1AED6A9264E1BBFEAAAAAAAAAAAAB401AAAAAAAAAAAAA4017FFFFFFFFF FFF3FC60B60B60B60B1BFEAAAAAAAAAAAAB401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FC AC901E573AC8CBFEAAAAAAAAAAAAB401AAAAAAAAAAAAA401D5555555555553FCFE7BA3 75F31ABBFEAAAAAAAAAAAAB401AAAAAAAAAAAAA40200000000000003FD2B3C4D5E6F80 8BFEAAAAAAAAAAAAB401AAAAAAAAAAAAA40215555555555553FD5A438215FF3DBBFEAA AAAAAAAAAAB401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FD8C536FE1A8C50BFEAAAAAAAA AAAAB401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FDC16C16C16C169BFEAAAAAAAAAAAAB4 01D555555555555C0240000000000003FCDB97530ECA863BFEAAAAAAAAAAAAB401D555 555555555C022AAAAAAAAAAAB3FC95CEB240795CFBFEAAAAAAAAAAAAB401D555555555 555C0215555555555563FC5617839A5BC7EBFEAAAAAAAAAAAAB401D555555555555C02 00000000000013FC1C71C71C71C73BFEAAAAAAAAAAAAB401D555555555555C01D55555 55555573FBD1BAF98D76B55BFEAAAAAAAAAAAAB401D555555555555C01AAAAAAAAAAAA C3FB76B549327104DBFEAAAAAAAAAAAAB401D555555555555C0180000000000013FB27 D27D27D27D2BFEAAAAAAAAAAAAB401D555555555555C0155555555555563FACA252ADB 363B9BFEAAAAAAAAAAAAB401D555555555555C012AAAAAAAAAAAB3FA5CEB240795CE6B FEAAAAAAAAAAAAB401D555555555555C0100000000000003FA07F6E5D4C3B23BFEAAAA AAAAAAAAB401D555555555555C00AAAAAAAAAAAAB3F99690E0857FCEABFEAAAAAAAAAA AAB401D555555555555C0055555555555563F94DBF86A314DB1BFEAAAAAAAAAAAAB401 D555555555555C0000000000000013F93579BE024689EBFEAAAAAAAAAAAAB401D55555 5555555BFF55555555555583F94DBF86A314DB1BFEAAAAAAAAAAAAB401D55555555555 5BFE555555555555B3F99690E0857FCE7BFEAAAAAAAAAAAAB401D555555555555BCC80 000000000003FA07F6E5D4C3B22BFEAAAAAAAAAAAAB401D5555555555553FE55555555 5554F3FA5CEB240795CE2BFEAAAAAAAAAAAAB401D5555555555553FF55555555555523 FACA252ADB363B5BFEAAAAAAAAAAAAB401D5555555555553FFFFFFFFFFFFFFC3FB27D2 7D27D27CEBFEAAAAAAAAAAAAB401D55555555555540055555555555533FB76B5493271 049BFEAAAAAAAAAAAAB401D555555555555400AAAAAAAAAAAA83FBD1BAF98D76B4FBFE AAAAAAAAAAAAB401D555555555555400FFFFFFFFFFFFD3FC1C71C71C71C6EBFEAAAAAA AAAAAAB401D5555555555554012AAAAAAAAAAA93FC5617839A5BC7ABFEAAAAAAAAAAAA B401D55555555555540155555555555543FC95CEB240795CBBFEAAAAAAAAAAAAB401D5 555555555554017FFFFFFFFFFFF3FCDB97530ECA861BFEAAAAAAAAAAAAB401D5555555 55555401AAAAAAAAAAAAA3FD13B8B302A7A1EBFEAAAAAAAAAAAAB401D5555555555554 01D5555555555553FD3CAE759203CADBFEAAAAAAAAAAAAB401D5555555555554020000 0000000003FD68ACF13579BE0BFEAAAAAAAAAAAAB401D5555555555554021555555555 5553FD97B425ED097B3BFEAAAAAAAAAAAAB401D5555555555554022AAAAAAAAAAAA3FD C9C413B8B3028BFEAAAAAAAAAAAAB401D5555555555554023FFFFFFFFFFFF3FDFEDCBA 9876541BFEAAAAAAAAAAAAB4020000000000000C0240000000000003FD2FC962FC962F CBFEAAAAAAAAAAAAB4020000000000000C022AAAAAAAAAAAB3FD0CE512956D9B3BFEAA AAAAAAAAAAB4020000000000000C0215555555555563FCDA12F684BDA14BFEAAAAAAAA AAAAB4020000000000000C0200000000000013FCA06D3A06D3A09BFEAAAAAAAAAAAAB4 020000000000000C01D5555555555573FC6CD8EFB11D341BFEAAAAAAAAAAAAB4020000 000000000C01AAAAAAAAAAAAC3FC3F5617839A5BDBFEAAAAAAAAAAAAB4020000000000 000C0180000000000013FC17E4B17E4B17FBFEAAAAAAAAAAAAB4020000000000000C01 55555555555563FBED097B425ED09BFEAAAAAAAAAAAAB4020000000000000C012AAAAA AAAAAAB3FBB66C77D88E9A0BFEAAAAAAAAAAAAB4020000000000000C01000000000000 03FB8BF258BF258BEBFEAAAAAAAAAAAAB4020000000000000C00AAAAAAAAAAAAB3FB6D 9B1DF623A67BFEAAAAAAAAAAAAB4020000000000000C0055555555555563FB5B66C77D 88E99BFEAAAAAAAAAAAAB4020000000000000C0000000000000013FB5555555555554B FEAAAAAAAAAAAAB4020000000000000BFF55555555555583FB5B66C77D88E99BFEAAAA AAAAAAAAB4020000000000000BFE555555555555B3FB6D9B1DF623A66BFEAAAAAAAAAA AAB4020000000000000BCC80000000000003FB8BF258BF258BDBFEAAAAAAAAAAAAB402 00000000000003FE555555555554F3FBB66C77D88E99DBFEAAAAAAAAAAAAB402000000 00000003FF55555555555523FBED097B425ED07BFEAAAAAAAAAAAAB402000000000000 03FFFFFFFFFFFFFFC3FC17E4B17E4B17DBFEAAAAAAAAAAAAB402000000000000040055 555555555533FC3F5617839A5BBBFEAAAAAAAAAAAAB4020000000000000400AAAAAAAA AAAA83FC6CD8EFB11D33DBFEAAAAAAAAAAAAB4020000000000000400FFFFFFFFFFFFD3 FCA06D3A06D3A04BFEAAAAAAAAAAAAB40200000000000004012AAAAAAAAAAA93FCDA12 F684BDA10BFEAAAAAAAAAAAAB402000000000000040155555555555543FD0CE512956D 9B1BFEAAAAAAAAAAAAB40200000000000004017FFFFFFFFFFFF3FD2FC962FC962FBBFE AAAAAAAAAAAAB4020000000000000401AAAAAAAAAAAAA3FD55B66C77D88E9BFEAAAAAA AAAAAAB4020000000000000401D5555555555553FD7EAC2F0734B78BFEAAAAAAAAAAAA B402000000000000040200000000000003FDAAAAAAAAAAAAABFEAAAAAAAAAAAAB40200 0000000000040215555555555553FDD9B1DF623A67EBFEAAAAAAAAAAAAB40200000000 000004022AAAAAAAAAAAA3FE05E0E696F1F7ABFEAAAAAAAAAAAAB40200000000000004 023FFFFFFFFFFFF3FE206D3A06D3A06BFEAAAAAAAAAAAAB4021555555555555C024000 0000000003FD7654320FEDCB9BFEAAAAAAAAAAAAB4021555555555555C022AAAAAAAAA AAB3FD536FE1A8C536FBFEAAAAAAAAAAAAB4021555555555555C0215555555555563FD 33944A55B66C7BFEAAAAAAAAAAAAB4021555555555555C0200000000000013FD16C16C 16C16C1BFEAAAAAAAAAAAAB4021555555555555C01D5555555555573FCF9EE8DD7CC6B ABFEAAAAAAAAAAAAB4021555555555555C01AAAAAAAAAAAAC3FCCC6BB5AA49936BFEAA AAAAAAAAAAB4021555555555555C0180000000000013FCA4FA4FA4FA4F8BFEAAAAAAAA AAAAB4021555555555555C0155555555555563FC839A5BC7DE9FEBFEAAAAAAAAAAAAB4 021555555555555C012AAAAAAAAAAAB3FC684BDA12F6849BFEAAAAAAAAAAAAB4021555 555555555C0100000000000003FC530ECA8641FD8BFEAAAAAAAAAAAAB4021555555555 555C00AAAAAAAAAAAAB3FC43E32D21C10ACBFEAAAAAAAAAAAAB4021555555555555C00 55555555555563FC3AC901E573AC5BFEAAAAAAAAAAAAB4021555555555555C00000000 00000013FC37C048D159E23BFEAAAAAAAAAAAAB4021555555555555BFF555555555555 83FC3AC901E573AC6BFEAAAAAAAAAAAAB4021555555555555BFE555555555555B3FC43 E32D21C10ACBFEAAAAAAAAAAAAB4021555555555555BCC80000000000003FC530ECA86 41FD8BFEAAAAAAAAAAAAB40215555555555553FE555555555554F3FC684BDA12F6848B FEAAAAAAAAAAAAB40215555555555553FF55555555555523FC839A5BC7DE9FDBFEAAAA AAAAAAAAB40215555555555553FFFFFFFFFFFFFFC3FCA4FA4FA4FA4F6BFEAAAAAAAAAA AAB402155555555555540055555555555533FCCC6BB5AA49934BFEAAAAAAAAAAAAB402 1555555555555400AAAAAAAAAAAA83FCF9EE8DD7CC6B6BFEAAAAAAAAAAAAB402155555 5555555400FFFFFFFFFFFFD3FD16C16C16C16BFBFEAAAAAAAAAAAAB402155555555555 54012AAAAAAAAAAA93FD33944A55B66C5BFEAAAAAAAAAAAAB402155555555555540155 555555555543FD536FE1A8C536DBFEAAAAAAAAAAAAB40215555555555554017FFFFFFF FFFFF3FD7654320FEDCB8BFEAAAAAAAAAAAAB4021555555555555401AAAAAAAAAAAAA3 FD9C413B8B302A6BFEAAAAAAAAAAAAB4021555555555555401D5555555555553FDC536 FE1A8C535BFEAAAAAAAAAAAAB402155555555555540200000000000003FDF13579BE02 468BFEAAAAAAAAAAAAB402155555555555540215555555555553FE101E573AC901DBFE AAAAAAAAAAAAB40215555555555554022AAAAAAAAAAAA3FE29264E209DC58BFEAAAAAA AAAAAAB40215555555555554023FFFFFFFFFFFF3FE43B2A1907F6E4BFEAAAAAAAAAAAA B4022AAAAAAAAAAAAC0240000000000003FDC16C16C16C169BFEAAAAAAAAAAAAB4022A AAAAAAAAAAAC022AAAAAAAAAAAB3FD9E87C65A43820BFEAAAAAAAAAAAAB4022AAAAAAA AAAAAC0215555555555563FD7EAC2F0734B77BFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC 0200000000000013FD61D950C83FB72BFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC01D555 5555555573FD480F2B9D6480EBFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC01AAAAAAAAAA AAC3FD314DBF86A314CBFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC0180000000000013FD 1D950C83FB72DBFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC0155555555555563FD0CE512 956D9AFBFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC012AAAAAAAAAAAB3FCFE7BA375F31A ABFEAAAAAAAAAAAAB4022AAAAAAAAAAAAC0100000000000003FCE93E93E93E939BFEAA AAAAAAAAAAB4022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FCDA12F684BDA0DBFEAAAAAAAA AAAAB4022AAAAAAAAAAAAC0055555555555563FCD0F8CB4870426BFEAAAAAAAAAAAAB4 022AAAAAAAAAAAAC0000000000000013FCCDF0123456784BFEAAAAAAAAAAAAB4022AAA AAAAAAAAABFF55555555555583FCD0F8CB4870427BFEAAAAAAAAAAAAB4022AAAAAAAAA AAABFE555555555555B3FCDA12F684BDA0DBFEAAAAAAAAAAAAB4022AAAAAAAAAAAABCC 80000000000003FCE93E93E93E939BFEAAAAAAAAAAAAB4022AAAAAAAAAAAA3FE555555 555554F3FCFE7BA375F31A9BFEAAAAAAAAAAAAB4022AAAAAAAAAAAA3FF555555555555 23FD0CE512956D9AFBFEAAAAAAAAAAAAB4022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD1D 950C83FB72BBFEAAAAAAAAAAAAB4022AAAAAAAAAAAA40055555555555533FD314DBF86 A314ABFEAAAAAAAAAAAAB4022AAAAAAAAAAAA400AAAAAAAAAAAA83FD480F2B9D6480CB FEAAAAAAAAAAAAB4022AAAAAAAAAAAA400FFFFFFFFFFFFD3FD61D950C83FB6FBFEAAAA AAAAAAAAB4022AAAAAAAAAAAA4012AAAAAAAAAAA93FD7EAC2F0734B75BFEAAAAAAAAAA AAB4022AAAAAAAAAAAA40155555555555543FD9E87C65A4381EBFEAAAAAAAAAAAAB402 2AAAAAAAAAAAA4017FFFFFFFFFFFF3FDC16C16C16C168BFEAAAAAAAAAAAAB4022AAAAA AAAAAAA401AAAAAAAAAAAAA3FDE759203CAE756BFEAAAAAAAAAAAAB4022AAAAAAAAAAA A401D5555555555553FE08277166054F3BFEAAAAAAAAAAAAB4022AAAAAAAAAAAA40200 000000000003FE1E26AF37C048CBFEAAAAAAAAAAAAB4022AAAAAAAAAAAA40215555555 555553FE35AA499388275BFEAAAAAAAAAAAAB4022AAAAAAAAAAAA4022AAAAAAAAAAAA3 FE4EB240795CEB0BFEAAAAAAAAAAAAB4022AAAAAAAAAAAA4023FFFFFFFFFFFF3FE693E 93E93E93DBFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC0240000000000003FE0888888888 887BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC022AAAAAAAAAAAB3FDEE2CC0A9E87C4BFE AAAAAAAAAAAAB4023FFFFFFFFFFFFC0215555555555563FDCE512956D9B1CBFEAAAAAA AAAAAAB4023FFFFFFFFFFFFC0200000000000013FDB17E4B17E4B16BFEAAAAAAAAAAAA B4023FFFFFFFFFFFFC01D5555555555573FD97B425ED097B2BFEAAAAAAAAAAAAB4023F FFFFFFFFFFFC01AAAAAAAAAAAAC3FD80F2B9D6480F0BFEAAAAAAAAAAAAB4023FFFFFFF FFFFFC0180000000000013FD6D3A06D3A06D1BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC 0155555555555563FD5C8A0CE512954BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC012AAA AAAAAAAAB3FD4EE2CC0A9E879BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC010000000000 0003FD4444444444441BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD 3CAE759203CABBFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC0055555555555563FD38215F F3DD1B8BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFC0000000000000013FD369D0369D036 7BFEAAAAAAAAAAAAB4023FFFFFFFFFFFFBFF55555555555583FD38215FF3DD1B8BFEAA AAAAAAAAAAB4023FFFFFFFFFFFFBFE555555555555B3FD3CAE759203CABBFEAAAAAAAA AAAAB4023FFFFFFFFFFFFBCC80000000000003FD4444444444441BFEAAAAAAAAAAAAB4 023FFFFFFFFFFFF3FE555555555554F3FD4EE2CC0A9E879BFEAAAAAAAAAAAAB4023FFF FFFFFFFFF3FF55555555555523FD5C8A0CE512954BFEAAAAAAAAAAAAB4023FFFFFFFFF FFF3FFFFFFFFFFFFFFC3FD6D3A06D3A06D0BFEAAAAAAAAAAAAB4023FFFFFFFFFFFF400 55555555555533FD80F2B9D6480EFBFEAAAAAAAAAAAAB4023FFFFFFFFFFFF400AAAAAA AAAAAA83FD97B425ED097B1BFEAAAAAAAAAAAAB4023FFFFFFFFFFFF400FFFFFFFFFFFF D3FDB17E4B17E4B14BFEAAAAAAAAAAAAB4023FFFFFFFFFFFF4012AAAAAAAAAAA93FDCE 512956D9B19BFEAAAAAAAAAAAAB4023FFFFFFFFFFFF40155555555555543FDEE2CC0A9 E87C3BFEAAAAAAAAAAAAB4023FFFFFFFFFFFF4017FFFFFFFFFFFF3FE0888888888887B FEAAAAAAAAAAAAB4023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE1B7F0D4629B7DBFEAAAA AAAAAAAAB4023FFFFFFFFFFFF401D5555555555553FE2FF9EE8DD7CC5BFEAAAAAAAAAA AAB4023FFFFFFFFFFFF40200000000000003FE45F92C5F92C5EBFEAAAAAAAAAAAAB402 3FFFFFFFFFFFF40215555555555553FE5D7CC6BB5AA48BFEAAAAAAAAAAAAB4023FFFFF FFFFFFF4022AAAAAAAAAAAA3FE7684BDA12F682BFEAAAAAAAAAAAAB4023FFFFFFFFFFF F4023FFFFFFFFFFFF3FE911111111110FBFE5555555555556C024000000000000C0240 000000000003FB999999999999DBFE5555555555556C024000000000000C022AAAAAAA AAAAB3FB0E0857FCF7476BFE5555555555556C024000000000000C0215555555555563 FA1D33F561783A5BFE5555555555556C024000000000000C0200000000000013F7B4E8 1B4E81BCDBFE5555555555556C024000000000000C01D555555555557BF92F684BDA12 F4FBFE5555555555556C024000000000000C01AAAAAAAAAAAACBFA4DBF86A314DB7BFE 5555555555556C024000000000000C018000000000001BFAEB851EB851EAFBFE555555 5555556C024000000000000C015555555555556BFB388277166054BBFE555555555555 6C024000000000000C012AAAAAAAAAAABBFB6F1F7A80308B5BFE5555555555556C0240 00000000000C010000000000000BFB9999999999996BFE5555555555556C0240000000 00000C00AAAAAAAAAAAABBFBB7F0D4629B7EDBFE5555555555556C024000000000000C 005555555555556BFBCA252ADB363BBBFE5555555555556C024000000000000C000000 000000001BFBD0369D0369D02BFE5555555555556C024000000000000BFF5555555555 558BFBCA252ADB363BCBFE5555555555556C024000000000000BFE555555555555BBFB B7F0D4629B7EFBFE5555555555556C024000000000000BCC8000000000000BFB999999 9999998BFE5555555555556C0240000000000003FE555555555554FBFB6F1F7A80308B 8BFE5555555555556C0240000000000003FF5555555555552BFB388277166054EBFE55 55555555556C0240000000000003FFFFFFFFFFFFFFCBFAEB851EB851EB6BFE55555555 55556C0240000000000004005555555555553BFA4DBF86A314DBEBFE5555555555556C 024000000000000400AAAAAAAAAAAA8BF92F684BDA12F68BFE5555555555556C024000 000000000400FFFFFFFFFFFFD3F7B4E81B4E81B3FBFE5555555555556C024000000000 0004012AAAAAAAAAAA93FA1D33F56178398BFE5555555555556C024000000000000401 55555555555543FB0E0857FCF746EBFE5555555555556C0240000000000004017FFFFF FFFFFFF3FB9999999999999BFE5555555555556C024000000000000401AAAAAAAAAAAA A3FC18A6DFC3518A7BFE5555555555556C024000000000000401D5555555555553FC6A 9264E209DC7BFE5555555555556C02400000000000040200000000000003FCC28F5C28 F5C2BBFE5555555555556C02400000000000040215555555555553FD104EE2CC0A9E9B FE5555555555556C0240000000000004022AAAAAAAAAAAA3FD425ED097B425EBFE5555 555555556C0240000000000004023FFFFFFFFFFFF3FD7777777777777BFE5555555555 556C022AAAAAAAAAAABC0240000000000003FA907F6E5D4C3BEBFE5555555555556C02 2AAAAAAAAAAABC022AAAAAAAAAAAB3F8E573AC901E5C1BFE5555555555556C022AAAAA AAAAAABC021555555555556BF90AFF9EE8DD7A6BFE5555555555556C022AAAAAAAAAAA BC020000000000001BFA6C16C16C16BFEBFE5555555555556C022AAAAAAAAAAABC01D5 55555555557BFB1D33F56178390BFE5555555555556C022AAAAAAAAAAABC01AAAAAAAA AAAACBFB7839A5BC7DE98BFE5555555555556C022AAAAAAAAAAABC018000000000001B FBC71C71C71C714BFE5555555555556C022AAAAAAAAAAABC015555555555556BFC04EE 2CC0A9E84BFE5555555555556C022AAAAAAAAAAABC012AAAAAAAAAAABBFC203CAE7592 039BFE5555555555556C022AAAAAAAAAAABC010000000000000BFC3579BE02468AABFE 5555555555556C022AAAAAAAAAAABC00AAAAAAAAAAAABBFC44A55B66C77D6BFE555555 5555556C022AAAAAAAAAAABC005555555555556BFC4DBF86A314DBDBFE555555555555 6C022AAAAAAAAAAABC000000000000001BFC50C83FB72EA5FBFE5555555555556C022A AAAAAAAAAABBFF5555555555558BFC4DBF86A314DBCBFE5555555555556C022AAAAAAA AAAABBFE555555555555BBFC44A55B66C77D6BFE5555555555556C022AAAAAAAAAAABB CC8000000000000BFC3579BE02468AABFE5555555555556C022AAAAAAAAAAAB3FE5555 55555554FBFC203CAE759203ABFE5555555555556C022AAAAAAAAAAAB3FF5555555555 552BFC04EE2CC0A9E85BFE5555555555556C022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFB C71C71C71C718BFE5555555555556C022AAAAAAAAAAAB4005555555555553BFB7839A5 BC7DE9CBFE5555555555556C022AAAAAAAAAAAB400AAAAAAAAAAAA8BFB1D33F5617839 7BFE5555555555556C022AAAAAAAAAAAB400FFFFFFFFFFFFDBFA6C16C16C16C12BFE55 55555555556C022AAAAAAAAAAAB4012AAAAAAAAAAA9BF90AFF9EE8DD7C5BFE55555555 55556C022AAAAAAAAAAAB40155555555555543F8E573AC901E587BFE5555555555556C 022AAAAAAAAAAAB4017FFFFFFFFFFFF3FA907F6E5D4C3B7BFE5555555555556C022AAA AAAAAAAAB401AAAAAAAAAAAAA3FB5FF3DD1BAF992BFE5555555555556C022AAAAAAAAA AAB401D5555555555553FC01E573AC901E8BFE5555555555556C022AAAAAAAAAAAB402 00000000000003FC59E26AF37C04CBFE5555555555556C022AAAAAAAAAAAB402155555 55555553FCB7F0D4629B7F3BFE5555555555556C022AAAAAAAAAAAB4022AAAAAAAAAAA A3FD0E0857FCF746FBFE5555555555556C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FD43 20FEDCBA987BFE5555555555556C021555555555556C0240000000000003F623456789 ABD5CBFE5555555555556C021555555555556C022AAAAAAAAAAABBFA04EE2CC0A9E78B FE5555555555556C021555555555556C021555555555556BFB01E573AC901DEBFE5555 555555556C021555555555556C020000000000001BFB7530ECA8641F3BFE5555555555 556C021555555555556C01D555555555557BFBDC598153D0F84BFE5555555555556C02 1555555555556C01AAAAAAAAAAAACBFC1BAF98D76B546BFE5555555555556C02155555 5555556C018000000000001BFC4320FEDCBA984BFE5555555555556C02155555555555 6C015555555555556BFC6480F2B9D647EBFE5555555555556C021555555555556C012A AAAAAAAAAABBFC7FCF746EBE633BFE5555555555556C021555555555556C0100000000 00000BFC950C83FB72EA4BFE5555555555556C021555555555556C00AAAAAAAAAAAABB FCA438215FF3DD0BFE5555555555556C021555555555556C005555555555556BFCAD52 4C9C413B7BFE5555555555556C021555555555556C000000000000001BFCB05B05B05B 059BFE5555555555556C021555555555556BFF5555555555558BFCAD524C9C413B6BFE 5555555555556C021555555555556BFE555555555555BBFCA438215FF3DD0BFE555555 5555556C021555555555556BCC8000000000000BFC950C83FB72EA4BFE555555555555 6C0215555555555563FE555555555554FBFC7FCF746EBE634BFE5555555555556C0215 555555555563FF5555555555552BFC6480F2B9D647FBFE5555555555556C0215555555 555563FFFFFFFFFFFFFFCBFC4320FEDCBA986BFE5555555555556C0215555555555564 005555555555553BFC1BAF98D76B548BFE5555555555556C021555555555556400AAAA AAAAAAAA8BFBDC598153D0F8BBFE5555555555556C021555555555556400FFFFFFFFFF FFDBFB7530ECA8641FDBFE5555555555556C0215555555555564012AAAAAAAAAAA9BFB 01E573AC901E5BFE5555555555556C0215555555555564015555555555554BFA04EE2C C0A9E86BFE5555555555556C0215555555555564017FFFFFFFFFFFF3F623456789ABCE FBFE5555555555556C021555555555556401AAAAAAAAAAAAA3FA419CA252ADB3CBFE55 55555555556C021555555555556401D5555555555553FB44A55B66C77DCBFE55555555 55556C02155555555555640200000000000003FBF49F49F49F4A5BFE5555555555556C 02155555555555640215555555555553FC585E0E696F1F9BFE5555555555556C021555 5555555564022AAAAAAAAAAAA3FCBC7DEA00C22E4BFE5555555555556C021555555555 5564023FFFFFFFFFFFF3FD13579BE02468ABFE5555555555556C020000000000001C02 4000000000000BFA47AE147AE146ABFE5555555555556C020000000000001C022AAAAA AAAAAABBFB2F684BDA12F5CBFE5555555555556C020000000000001C02155555555555 6BFBAED6A9264E202BFE5555555555556C020000000000001C020000000000001BFC11 1111111110CBFE5555555555556C020000000000001C01D555555555557BFC44A55B66 C77D4BFE5555555555556C020000000000001C01AAAAAAAAAAAACBFC722833944A558B FE5555555555556C020000000000001C018000000000001BFC9999999999996BFE5555 555555556C020000000000001C015555555555556BFCBAF98D76B548EBFE5555555555 556C020000000000001C012AAAAAAAAAAABBFCD6480F2B9D643BFE5555555555556C02 0000000000001C010000000000000BFCEB851EB851EB4BFE5555555555556C02000000 0000001C00AAAAAAAAAAAABBFCFAB0BC1CD2DE0BFE5555555555556C02000000000000 1C005555555555556BFD01E573AC901E3BFE5555555555556C020000000000001C0000 00000000001BFD0369D0369D035BFE5555555555556C020000000000001BFF55555555 55558BFD01E573AC901E4BFE5555555555556C020000000000001BFE555555555555BB FCFAB0BC1CD2DE1BFE5555555555556C020000000000001BCC8000000000000BFCEB85 1EB851EB5BFE5555555555556C0200000000000013FE555555555554FBFCD6480F2B9D 645BFE5555555555556C0200000000000013FF5555555555552BFCBAF98D76B5490BFE 5555555555556C0200000000000013FFFFFFFFFFFFFFCBFC9999999999997BFE555555 5555556C0200000000000014005555555555553BFC722833944A559BFE555555555555 6C020000000000001400AAAAAAAAAAAA8BFC44A55B66C77D7BFE5555555555556C0200 00000000001400FFFFFFFFFFFFDBFC1111111111110BFE5555555555556C0200000000 000014012AAAAAAAAAAA9BFBAED6A9264E207BFE5555555555556C0200000000000014 015555555555554BFB2F684BDA12F65BFE5555555555556C0200000000000014017FFF FFFFFFFFFBFA47AE147AE1475BFE5555555555556C020000000000001401AAAAAAAAAA AAABF6845C8A0CE509ABFE5555555555556C020000000000001401D5555555555553FA 2F684BDA12F73BFE5555555555556C02000000000000140200000000000003FB47AE14 7AE1482BFE5555555555556C02000000000000140215555555555553FC01E573AC901E 8BFE5555555555556C0200000000000014022AAAAAAAAAAAA3FC66054F43E32D3BFE55 55555555556C0200000000000014023FFFFFFFFFFFF3FCD0369D0369D04BFE55555555 55556C01D555555555557C024000000000000BFB3E93E93E93E91BFE5555555555556C 01D555555555557C022AAAAAAAAAAABBFBCA252ADB363B8BFE5555555555556C01D555 555555557C021555555555556BFC24C9C413B8B2DBFE5555555555556C01D555555555 557C020000000000001BFC5E6F8091A2B38BFE5555555555556C01D555555555557C01 D555555555557BFC9203CAE759200BFE5555555555556C01D555555555557C01AAAAAA AAAAAACBFCBF86A314DBF84BFE5555555555556C01D555555555557C01800000000000 1BFCE6F8091A2B3C2BFE5555555555556C01D555555555557C015555555555556BFD04 2BFE7BA375EBFE5555555555556C01D555555555557C012AAAAAAAAAAABBFD11D33F56 17839BFE5555555555556C01D555555555557C010000000000000BFD1C71C71C71C71B FE5555555555556C01D555555555557C00AAAAAAAAAAAABBFD240795CEB2407BFE5555 555555556C01D555555555557C005555555555556BFD2894AB6CD8EFABFE5555555555 556C01D555555555557C000000000000001BFD2A1907F6E5D4BBFE5555555555556C01 D555555555557BFF5555555555558BFD2894AB6CD8EFABFE5555555555556C01D55555 5555557BFE555555555555BBFD240795CEB2407BFE5555555555556C01D55555555555 7BCC8000000000000BFD1C71C71C71C71BFE5555555555556C01D5555555555573FE55 5555555554FBFD11D33F5617839BFE5555555555556C01D5555555555573FF55555555 55552BFD042BFE7BA375EBFE5555555555556C01D5555555555573FFFFFFFFFFFFFFCB FCE6F8091A2B3C3BFE5555555555556C01D5555555555574005555555555553BFCBF86 A314DBF86BFE5555555555556C01D555555555557400AAAAAAAAAAAA8BFC9203CAE759 204BFE5555555555556C01D555555555557400FFFFFFFFFFFFDBFC5E6F8091A2B3DBFE 5555555555556C01D5555555555574012AAAAAAAAAAA9BFC24C9C413B8B31BFE555555 5555556C01D5555555555574015555555555554BFBCA252ADB363BFBFE555555555555 6C01D5555555555574017FFFFFFFFFFFFBFB3E93E93E93E95BFE5555555555556C01D5 55555555557401AAAAAAAAAAAAABFA4DBF86A314DBEBFE5555555555556C01D5555555 55557401D555555555555BF4845C8A0CE5044BFE5555555555556C01D5555555555574 0200000000000003FA59E26AF37C054BFE5555555555556C01D5555555555574021555 5555555553FB690E0857FCF76BFE5555555555556C01D5555555555574022AAAAAAAAA AAA3FC18A6DFC3518A6BFE5555555555556C01D5555555555574023FFFFFFFFFFFF3FC 82D82D82D82D7BFE5555555555556C01AAAAAAAAAAAACC024000000000000BFBC71C71 C71C721BFE5555555555556C01AAAAAAAAAAAACC022AAAAAAAAAAABBFC2956D9B1DF62 4BFE5555555555556C01AAAAAAAAAAAACC021555555555556BFC690E0857FCF75BFE55 55555555556C01AAAAAAAAAAAACC020000000000001BFCA2B3C4D5E6F80BFE55555555 55556C01AAAAAAAAAAAACC01D555555555557BFCD6480F2B9D648BFE5555555555556C 01AAAAAAAAAAAACC01AAAAAAAAAAAACBFD01E573AC901E6BFE5555555555556C01AAAA AAAAAAAACC018000000000001BFD159E26AF37C05BFE5555555555556C01AAAAAAAAAA AACC015555555555556BFD264E209DC5982BFE5555555555556C01AAAAAAAAAAAACC01 2AAAAAAAAAAABBFD33F5617839A5DBFE5555555555556C01AAAAAAAAAAAACC01000000 0000000BFD3E93E93E93E95BFE5555555555556C01AAAAAAAAAAAACC00AAAAAAAAAAAA BBFD4629B7F0D462BBFE5555555555556C01AAAAAAAAAAAACC005555555555556BFD4A B6CD8EFB11EBFE5555555555556C01AAAAAAAAAAAACC000000000000001BFD4C3B2A19 07F6FBFE5555555555556C01AAAAAAAAAAAACBFF5555555555558BFD4AB6CD8EFB11EB FE5555555555556C01AAAAAAAAAAAACBFE555555555555BBFD4629B7F0D462BBFE5555 555555556C01AAAAAAAAAAAACBCC8000000000000BFD3E93E93E93E95BFE5555555555 556C01AAAAAAAAAAAAC3FE555555555554FBFD33F5617839A5DBFE5555555555556C01 AAAAAAAAAAAAC3FF5555555555552BFD264E209DC5982BFE5555555555556C01AAAAAA AAAAAAC3FFFFFFFFFFFFFFCBFD159E26AF37C06BFE5555555555556C01AAAAAAAAAAAA C4005555555555553BFD01E573AC901E7BFE5555555555556C01AAAAAAAAAAAAC400AA AAAAAAAAAA8BFCD6480F2B9D64BBFE5555555555556C01AAAAAAAAAAAAC400FFFFFFFF FFFFDBFCA2B3C4D5E6F84BFE5555555555556C01AAAAAAAAAAAAC4012AAAAAAAAAAA9B FC690E0857FCF79BFE5555555555556C01AAAAAAAAAAAAC4015555555555554BFC2956 D9B1DF628BFE5555555555556C01AAAAAAAAAAAAC4017FFFFFFFFFFFFBFBC71C71C71C 725BFE5555555555556C01AAAAAAAAAAAAC401AAAAAAAAAAAAABFB2F684BDA12F6FBFE 5555555555556C01AAAAAAAAAAAAC401D555555555555BFA1722833944A61BFE555555 5555556C01AAAAAAAAAAAAC40200000000000003F823456789ABCD0BFE555555555555 6C01AAAAAAAAAAAAC40215555555555553FAC10AFF9EE8DCBBFE5555555555556C01AA AAAAAAAAAAC4022AAAAAAAAAAAA3FBA8C536FE1A8BCBFE5555555555556C01AAAAAAAA AAAAC4023FFFFFFFFFFFF3FC3E93E93E93E8FBFE5555555555556C018000000000001C 024000000000000BFC1EB851EB851EBBFE5555555555556C018000000000001C022AAA AAAAAAAABBFC6480F2B9D647EBFE5555555555556C018000000000001C021555555555 556BFCA438215FF3DCFBFE5555555555556C018000000000001C020000000000001BFC DDDDDDDDDDDDABFE5555555555556C018000000000001C01D555555555557BFD08B914 19CA251BFE5555555555556C018000000000001C01AAAAAAAAAAAACBFD1F7A80308B91 3BFE5555555555556C018000000000001C018000000000001BFD3333333333332BFE55 55555555556C018000000000001C015555555555556BFD43E32D21C10AFBFE55555555 55556C018000000000001C012AAAAAAAAAAABBFD518A6DFC3518ABFE5555555555556C 018000000000001C010000000000000BFD5C28F5C28F5C2BFE5555555555556C018000 000000001C00AAAAAAAAAAAABBFD63BEC474CFD58BFE5555555555556C018000000000 001C005555555555556BFD684BDA12F684BBFE5555555555556C018000000000001C00 0000000000001BFD69D0369D0369CBFE5555555555556C018000000000001BFF555555 5555558BFD684BDA12F684BBFE5555555555556C018000000000001BFE555555555555 BBFD63BEC474CFD58BFE5555555555556C018000000000001BCC8000000000000BFD5C 28F5C28F5C2BFE5555555555556C0180000000000013FE555555555554FBFD518A6DFC 3518ABFE5555555555556C0180000000000013FF5555555555552BFD43E32D21C10AFB FE5555555555556C0180000000000013FFFFFFFFFFFFFFCBFD3333333333333BFE5555 555555556C0180000000000014005555555555553BFD1F7A80308B914BFE5555555555 556C018000000000001400AAAAAAAAAAAA8BFD08B91419CA252BFE5555555555556C01 8000000000001400FFFFFFFFFFFFDBFCDDDDDDDDDDDDEBFE5555555555556C01800000 00000014012AAAAAAAAAAA9BFCA438215FF3DD4BFE5555555555556C01800000000000 14015555555555554BFC6480F2B9D6481BFE5555555555556C0180000000000014017F FFFFFFFFFFFBFC1EB851EB851EBBFE5555555555556C018000000000001401AAAAAAAA AAAAABFBA5BC7DEA00C21BFE5555555555556C018000000000001401D555555555555B FB01E573AC901E5BFE5555555555556C0180000000000014020000000000000BF947AE 147AE1468BFE5555555555556C01800000000000140215555555555553F9A8C536FE1A 8C7BFE5555555555556C0180000000000014022AAAAAAAAAAAA3FB327104EE2CC08BFE 5555555555556C0180000000000014023FFFFFFFFFFFF3FC0369D0369D035BFE555555 5555556C015555555555556C024000000000000BFC50C83FB72EA63BFE555555555555 6C015555555555556C022AAAAAAAAAAABBFC9690E0857FCF6BFE5555555555556C0155 55555555556C021555555555556BFCD6480F2B9D647BFE5555555555556C0155555555 55556C020000000000001BFD07F6E5D4C3B29BFE5555555555556C015555555555556C 01D555555555557BFD21C10AFF9EE8DBFE5555555555556C015555555555556C01AAAA AAAAAAAACBFD388277166054FBFE5555555555556C015555555555556C018000000000 001BFD4C3B2A1907F6EBFE5555555555556C015555555555556C015555555555556BFD 5CEB240795CEBBFE5555555555556C015555555555556C012AAAAAAAAAAABBFD6A9264 E209DC6BFE5555555555556C015555555555556C010000000000000BFD7530ECA8641F EBFE5555555555556C015555555555556C00AAAAAAAAAAAABBFD7CC6BB5AA4994BFE55 55555555556C015555555555556C005555555555556BFD8153D0F8CB487BFE55555555 55556C015555555555556C000000000000001BFD82D82D82D82D8BFE5555555555556C 015555555555556BFF5555555555558BFD8153D0F8CB487BFE5555555555556C015555 555555556BFE555555555555BBFD7CC6BB5AA4994BFE5555555555556C015555555555 556BCC8000000000000BFD7530ECA8641FEBFE5555555555556C0155555555555563FE 555555555554FBFD6A9264E209DC6BFE5555555555556C0155555555555563FF555555 5555552BFD5CEB240795CEBBFE5555555555556C0155555555555563FFFFFFFFFFFFFF CBFD4C3B2A1907F6FBFE5555555555556C0155555555555564005555555555553BFD38 82771660550BFE5555555555556C015555555555556400AAAAAAAAAAAA8BFD21C10AFF 9EE8EBFE5555555555556C015555555555556400FFFFFFFFFFFFDBFD07F6E5D4C3B2BB FE5555555555556C0155555555555564012AAAAAAAAAAA9BFCD6480F2B9D64CBFE5555 555555556C0155555555555564015555555555554BFC9690E0857FCF9BFE5555555555 556C0155555555555564017FFFFFFFFFFFFBFC50C83FB72EA63BFE5555555555556C01 5555555555556401AAAAAAAAAAAAABFC04EE2CC0A9E88BFE5555555555556C01555555 5555556401D555555555555BFB66054F43E32D3BFE5555555555556C01555555555555 64020000000000000BFA6C16C16C16C14BFE5555555555556C01555555555555640215 555555555553F5845C8A0CE506ABFE5555555555556C0155555555555564022AAAAAAA AAAAA3FA9CA252ADB3630BFE5555555555556C0155555555555564023FFFFFFFFFFFF3 FBA2B3C4D5E6F7ABFE5555555555556C012AAAAAAAAAAABC024000000000000BFC79BE 02468ACF1BFE5555555555556C012AAAAAAAAAAABC022AAAAAAAAAAABBFCBF86A314DB F82BFE5555555555556C012AAAAAAAAAAABC021555555555556BFCFF3DD1BAF98D5BFE 5555555555556C012AAAAAAAAAAABC020000000000001BFD1C71C71C71C70BFE555555 5555556C012AAAAAAAAAAABC01D555555555557BFD363BEC474CFD4BFE555555555555 6C012AAAAAAAAAAABC01AAAAAAAAAAAACBFD4CFD585E0E696BFE5555555555556C012A AAAAAAAAAABC018000000000001BFD60B60B60B60B5BFE5555555555556C012AAAAAAA AAAABC015555555555556BFD7166054F43E32BFE5555555555556C012AAAAAAAAAAABC 012AAAAAAAAAAABBFD7F0D4629B7F0DBFE5555555555556C012AAAAAAAAAAABC010000 000000000BFD89ABCDF012345BFE5555555555556C012AAAAAAAAAAABC00AAAAAAAAAA AABBFD91419CA252ADBBFE5555555555556C012AAAAAAAAAAABC005555555555556BFD 95CEB240795CEBFE5555555555556C012AAAAAAAAAAABC000000000000001BFD97530E CA8641FBFE5555555555556C012AAAAAAAAAAABBFF5555555555558BFD95CEB240795C EBFE5555555555556C012AAAAAAAAAAABBFE555555555555BBFD91419CA252ADBBFE55 55555555556C012AAAAAAAAAAABBCC8000000000000BFD89ABCDF012345BFE55555555 55556C012AAAAAAAAAAAB3FE555555555554FBFD7F0D4629B7F0DBFE5555555555556C 012AAAAAAAAAAAB3FF5555555555552BFD7166054F43E32BFE5555555555556C012AAA AAAAAAAAB3FFFFFFFFFFFFFFCBFD60B60B60B60B6BFE5555555555556C012AAAAAAAAA AAB4005555555555553BFD4CFD585E0E697BFE5555555555556C012AAAAAAAAAAAB400 AAAAAAAAAAAA8BFD363BEC474CFD5BFE5555555555556C012AAAAAAAAAAAB400FFFFFF FFFFFFDBFD1C71C71C71C72BFE5555555555556C012AAAAAAAAAAAB4012AAAAAAAAAAA 9BFCFF3DD1BAF98DABFE5555555555556C012AAAAAAAAAAAB4015555555555554BFCBF 86A314DBF87BFE5555555555556C012AAAAAAAAAAAB4017FFFFFFFFFFFFBFC79BE0246 8ACF1BFE5555555555556C012AAAAAAAAAAAB401AAAAAAAAAAAAABFC2DE3EF5006116B FE5555555555556C012AAAAAAAAAAAB401D555555555555BFBB7F0D4629B7EFBFE5555 555555556C012AAAAAAAAAAAB4020000000000000BFB07F6E5D4C3B26BFE5555555555 556C012AAAAAAAAAAAB4021555555555555BF92F684BDA12F61BFE5555555555556C01 2AAAAAAAAAAAB4022AAAAAAAAAAAA3F9F19690E0857E8BFE5555555555556C012AAAAA AAAAAAB4023FFFFFFFFFFFF3FB50C83FB72EA5CBFE5555555555556C01000000000000 0C024000000000000BFC9999999999999BFE5555555555556C010000000000000C022A AAAAAAAAAABBFCDF623A67EAC2EBFE5555555555556C010000000000000C0215555555 55556BFD0F8CB487042C0BFE5555555555556C010000000000000C020000000000001B FD2C5F92C5F92C5BFE5555555555556C010000000000000C01D555555555557BFD4629 B7F0D4629BFE5555555555556C010000000000000C01AAAAAAAAAAAACBFD5CEB240795 CEBBFE5555555555556C010000000000000C018000000000001BFD70A3D70A3D70ABFE 5555555555556C010000000000000C015555555555556BFD8153D0F8CB487BFE555555 5555556C010000000000000C012AAAAAAAAAAABBFD8EFB11D33F562BFE555555555555 6C010000000000000C010000000000000BFD999999999999ABFE5555555555556C0100 00000000000C00AAAAAAAAAAAABBFDA12F684BDA130BFE5555555555556C0100000000 00000C005555555555556BFDA5BC7DEA00C23BFE5555555555556C010000000000000C 000000000000001BFDA740DA740DA74BFE5555555555556C010000000000000BFF5555 555555558BFDA5BC7DEA00C23BFE5555555555556C010000000000000BFE5555555555 55BBFDA12F684BDA130BFE5555555555556C010000000000000BCC8000000000000BFD 999999999999ABFE5555555555556C0100000000000003FE555555555554FBFD8EFB11 D33F562BFE5555555555556C0100000000000003FF5555555555552BFD8153D0F8CB48 7BFE5555555555556C0100000000000003FFFFFFFFFFFFFFCBFD70A3D70A3D70BBFE55 55555555556C0100000000000004005555555555553BFD5CEB240795CECBFE55555555 55556C010000000000000400AAAAAAAAAAAA8BFD4629B7F0D462ABFE5555555555556C 010000000000000400FFFFFFFFFFFFDBFD2C5F92C5F92C7BFE5555555555556C010000 0000000004012AAAAAAAAAAA9BFD0F8CB487042C2BFE5555555555556C010000000000 0004015555555555554BFCDF623A67EAC31BFE5555555555556C010000000000000401 7FFFFFFFFFFFFBFC999999999999BBFE5555555555556C010000000000000401AAAAAA AAAAAAABFC4DBF86A314DC0BFE5555555555556C010000000000000401D55555555555 5BFBF7A80308B9143BFE5555555555556C0100000000000004020000000000000BFB47 AE147AE147ABFE5555555555556C0100000000000004021555555555555BFA17228339 44A59BFE5555555555556C0100000000000004022AAAAAAAAAAAA3F8E573AC901E52FB FE5555555555556C0100000000000004023FFFFFFFFFFFF3FB1111111111108BFE5555 555555556C00AAAAAAAAAAAABC024000000000000BFCB05B05B05B059BFE5555555555 556C00AAAAAAAAAAAABC022AAAAAAAAAAABBFCF623A67EAC2EEBFE5555555555556C00 AAAAAAAAAAAABC021555555555556BFD1AED6A9264E20BFE5555555555556C00AAAAAA AAAAAABC020000000000001BFD37C048D159E25BFE5555555555556C00AAAAAAAAAAAA BC01D555555555557BFD518A6DFC3518ABFE5555555555556C00AAAAAAAAAAAABC01AA AAAAAAAAAACBFD684BDA12F684BBFE5555555555556C00AAAAAAAAAAAABC0180000000 00001BFD7C048D159E26ABFE5555555555556C00AAAAAAAAAAAABC015555555555556B FD8CB487042BFE7BFE5555555555556C00AAAAAAAAAAAABC012AAAAAAAAAAABBFD9A5B C7DEA00C2BFE5555555555556C00AAAAAAAAAAAABC010000000000000BFDA4FA4FA4FA 4FABFE5555555555556C00AAAAAAAAAAAABC00AAAAAAAAAAAABBFDAC901E573AC90BFE 5555555555556C00AAAAAAAAAAAABC005555555555556BFDB11D33F561783BFE555555 5555556C00AAAAAAAAAAAABC000000000000001BFDB2A1907F6E5D4BFE555555555555 6C00AAAAAAAAAAAABBFF5555555555558BFDB11D33F561783BFE5555555555556C00AA AAAAAAAAAABBFE555555555555BBFDAC901E573AC90BFE5555555555556C00AAAAAAAA AAAABBCC8000000000000BFDA4FA4FA4FA4FABFE5555555555556C00AAAAAAAAAAAAB3 FE555555555554FBFD9A5BC7DEA00C2BFE5555555555556C00AAAAAAAAAAAAB3FF5555 555555552BFD8CB487042BFE7BFE5555555555556C00AAAAAAAAAAAAB3FFFFFFFFFFFF FFCBFD7C048D159E26BBFE5555555555556C00AAAAAAAAAAAAB4005555555555553BFD 684BDA12F684CBFE5555555555556C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFD518A6D FC3518ABFE5555555555556C00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFD37C048D159E2 7BFE5555555555556C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFD1AED6A9264E22BFE55 55555555556C00AAAAAAAAAAAAB4015555555555554BFCF623A67EAC2F1BFE55555555 55556C00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFCB05B05B05B05BBFE5555555555556C 00AAAAAAAAAAAAB401AAAAAAAAAAAAABFC6480F2B9D6480BFE5555555555556C00AAAA AAAAAAAAB401D555555555555BFC12956D9B1DF61BFE5555555555556C00AAAAAAAAAA AAB4020000000000000BFB7530ECA8641FABFE5555555555556C00AAAAAAAAAAAAB402 1555555555555BFA722833944A559BFE5555555555556C00AAAAAAAAAAAAB4022AAAAA AAAAAAA3F6E573AC901E4BCBFE5555555555556C00AAAAAAAAAAAAB4023FFFFFFFFFFF F3FAC71C71C71C710BFE5555555555556C005555555555556C024000000000000BFCBE 02468ACF135BFE5555555555556C005555555555556C022AAAAAAAAAAABBFD01E573AC 901E5BFE5555555555556C005555555555556C021555555555556BFD21C10AFF9EE8EB FE5555555555556C005555555555556C020000000000001BFD3E93E93E93E93BFE5555 555555556C005555555555556C01D555555555557BFD585E0E696F1F8BFE5555555555 556C005555555555556C01AAAAAAAAAAAACBFD6F1F7A80308B9BFE5555555555556C00 5555555555556C018000000000001BFD82D82D82D82D8BFE5555555555556C00555555 5555556C015555555555556BFD9388277166055BFE5555555555556C00555555555555 6C012AAAAAAAAAAABBFDA12F684BDA130BFE5555555555556C005555555555556C0100 00000000000BFDABCDF01234568BFE5555555555556C005555555555556C00AAAAAAAA AAAABBFDB363BEC474CFEBFE5555555555556C005555555555556C005555555555556B FDB7F0D4629B7F1BFE5555555555556C005555555555556C000000000000001BFDB975 30ECA8642BFE5555555555556C005555555555556BFF5555555555558BFDB7F0D4629B 7F1BFE5555555555556C005555555555556BFE555555555555BBFDB363BEC474CFEBFE 5555555555556C005555555555556BCC8000000000000BFDABCDF01234568BFE555555 5555556C0055555555555563FE555555555554FBFDA12F684BDA130BFE555555555555 6C0055555555555563FF5555555555552BFD9388277166055BFE5555555555556C0055 555555555563FFFFFFFFFFFFFFCBFD82D82D82D82D9BFE5555555555556C0055555555 555564005555555555553BFD6F1F7A80308BABFE5555555555556C0055555555555564 00AAAAAAAAAAAA8BFD585E0E696F1F8BFE5555555555556C005555555555556400FFFF FFFFFFFFDBFD3E93E93E93E95BFE5555555555556C0055555555555564012AAAAAAAAA AA9BFD21C10AFF9EE90BFE5555555555556C0055555555555564015555555555554BFD 01E573AC901E6BFE5555555555556C0055555555555564017FFFFFFFFFFFFBFCBE0246 8ACF137BFE5555555555556C005555555555556401AAAAAAAAAAAAABFC722833944A55 CBFE5555555555556C005555555555556401D555555555555BFC203CAE759203DBFE55 55555555556C0055555555555564020000000000000BFB907F6E5D4C3B2BFE55555555 55556C0055555555555564021555555555555BFAA8C536FE1A8C9BFE5555555555556C 0055555555555564022AAAAAAAAAAAABF6845C8A0CE5244BFE5555555555556C005555 5555555564023FFFFFFFFFFFF3FA907F6E5D4C3A0BFE5555555555556C000000000000 001C024000000000000BFCC28F5C28F5C29BFE5555555555556C000000000000001C02 2AAAAAAAAAAABBFD042BFE7BA375FBFE5555555555556C000000000000001C02155555 5555556BFD240795CEB2408BFE5555555555556C000000000000001C02000000000000 1BFD40DA740DA740DBFE5555555555556C000000000000001C01D555555555557BFD5A A4993882772BFE5555555555556C000000000000001C01AAAAAAAAAAAACBFD7166054F 43E33BFE5555555555556C000000000000001C018000000000001BFD851EB851EB853B FE5555555555556C000000000000001C015555555555556BFD95CEB240795CFBFE5555 555555556C000000000000001C012AAAAAAAAAAABBFDA375F31AED6AABFE5555555555 556C000000000000001C010000000000000BFDAE147AE147AE2BFE5555555555556C00 0000000000001C00AAAAAAAAAAAABBFDB5AA499388278BFE5555555555556C00000000 0000001C005555555555556BFDBA375F31AED6BBFE5555555555556C00000000000000 1C000000000000001BFDBBBBBBBBBBBBCBFE5555555555556C000000000000001BFF55 55555555558BFDBA375F31AED6BBFE5555555555556C000000000000001BFE55555555 5555BBFDB5AA499388278BFE5555555555556C000000000000001BCC8000000000000B FDAE147AE147AE2BFE5555555555556C0000000000000013FE555555555554FBFDA375 F31AED6AABFE5555555555556C0000000000000013FF5555555555552BFD95CEB24079 5CFBFE5555555555556C0000000000000013FFFFFFFFFFFFFFCBFD851EB851EB853BFE 5555555555556C0000000000000014005555555555553BFD7166054F43E34BFE555555 5555556C000000000000001400AAAAAAAAAAAA8BFD5AA4993882772BFE555555555555 6C000000000000001400FFFFFFFFFFFFDBFD40DA740DA740FBFE5555555555556C0000 000000000014012AAAAAAAAAAA9BFD240795CEB240ABFE5555555555556C0000000000 000014015555555555554BFD042BFE7BA3760BFE5555555555556C0000000000000014 017FFFFFFFFFFFFBFCC28F5C28F5C2BBFE5555555555556C000000000000001401AAAA AAAAAAAAABFC76B5493271050BFE5555555555556C000000000000001401D555555555 555BFC24C9C413B8B31BFE5555555555556C0000000000000014020000000000000BFB 999999999999ABFE5555555555556C0000000000000014021555555555555BFABAF98D 76B5499BFE5555555555556C0000000000000014022AAAAAAAAAAAABF753D0F8CB487A 2BFE5555555555556C0000000000000014023FFFFFFFFFFFF3FA7E4B17E4B17D0BFE55 55555555556BFF5555555555558C024000000000000BFCBE02468ACF135BFE55555555 55556BFF5555555555558C022AAAAAAAAAAABBFD01E573AC901E5BFE5555555555556B FF5555555555558C021555555555556BFD21C10AFF9EE8EBFE5555555555556BFF5555 555555558C020000000000001BFD3E93E93E93E93BFE5555555555556BFF5555555555 558C01D555555555557BFD585E0E696F1F8BFE5555555555556BFF5555555555558C01 AAAAAAAAAAAACBFD6F1F7A80308B9BFE5555555555556BFF5555555555558C01800000 0000001BFD82D82D82D82D8BFE5555555555556BFF5555555555558C01555555555555 6BFD9388277166055BFE5555555555556BFF5555555555558C012AAAAAAAAAAABBFDA1 2F684BDA130BFE5555555555556BFF5555555555558C010000000000000BFDABCDF012 34568BFE5555555555556BFF5555555555558C00AAAAAAAAAAAABBFDB363BEC474CFEB FE5555555555556BFF5555555555558C005555555555556BFDB7F0D4629B7F1BFE5555 555555556BFF5555555555558C000000000000001BFDB97530ECA8642BFE5555555555 556BFF5555555555558BFF5555555555558BFDB7F0D4629B7F1BFE5555555555556BFF 5555555555558BFE555555555555BBFDB363BEC474CFEBFE5555555555556BFF555555 5555558BCC8000000000000BFDABCDF01234568BFE5555555555556BFF555555555555 83FE555555555554FBFDA12F684BDA130BFE5555555555556BFF55555555555583FF55 55555555552BFD9388277166055BFE5555555555556BFF55555555555583FFFFFFFFFF FFFFCBFD82D82D82D82D9BFE5555555555556BFF55555555555584005555555555553B FD6F1F7A80308BABFE5555555555556BFF5555555555558400AAAAAAAAAAAA8BFD585E 0E696F1F8BFE5555555555556BFF5555555555558400FFFFFFFFFFFFDBFD3E93E93E93 E95BFE5555555555556BFF55555555555584012AAAAAAAAAAA9BFD21C10AFF9EE90BFE 5555555555556BFF55555555555584015555555555554BFD01E573AC901E6BFE555555 5555556BFF55555555555584017FFFFFFFFFFFFBFCBE02468ACF137BFE555555555555 6BFF5555555555558401AAAAAAAAAAAAABFC722833944A55CBFE5555555555556BFF55 55555555558401D555555555555BFC203CAE759203DBFE5555555555556BFF55555555 555584020000000000000BFB907F6E5D4C3B2BFE5555555555556BFF55555555555584 021555555555555BFAA8C536FE1A8C9BFE5555555555556BFF55555555555584022AAA AAAAAAAAABF6845C8A0CE5244BFE5555555555556BFF55555555555584023FFFFFFFFF FFF3FA907F6E5D4C3A0BFE5555555555556BFE555555555555BC024000000000000BFC B05B05B05B05DBFE5555555555556BFE555555555555BC022AAAAAAAAAAABBFCF623A6 7EAC2EEBFE5555555555556BFE555555555555BC021555555555556BFD1AED6A9264E2 0BFE5555555555556BFE555555555555BC020000000000001BFD37C048D159E27BFE55 55555555556BFE555555555555BC01D555555555557BFD518A6DFC3518ABFE55555555 55556BFE555555555555BC01AAAAAAAAAAAACBFD684BDA12F684DBFE5555555555556B FE555555555555BC018000000000001BFD7C048D159E26BBFE5555555555556BFE5555 55555555BC015555555555556BFD8CB487042BFE8BFE5555555555556BFE5555555555 55BC012AAAAAAAAAAABBFD9A5BC7DEA00C3BFE5555555555556BFE555555555555BC01 0000000000000BFDA4FA4FA4FA4FBBFE5555555555556BFE555555555555BC00AAAAAA AAAAAABBFDAC901E573AC91BFE5555555555556BFE555555555555BC00555555555555 6BFDB11D33F561784BFE5555555555556BFE555555555555BC000000000000001BFDB2 A1907F6E5D5BFE5555555555556BFE555555555555BBFF5555555555558BFDB11D33F5 61784BFE5555555555556BFE555555555555BBFE555555555555BBFDAC901E573AC91B FE5555555555556BFE555555555555BBCC8000000000000BFDA4FA4FA4FA4FBBFE5555 555555556BFE555555555555B3FE555555555554FBFD9A5BC7DEA00C3BFE5555555555 556BFE555555555555B3FF5555555555552BFD8CB487042BFE8BFE5555555555556BFE 555555555555B3FFFFFFFFFFFFFFCBFD7C048D159E26CBFE5555555555556BFE555555 555555B4005555555555553BFD684BDA12F684DBFE5555555555556BFE555555555555 B400AAAAAAAAAAAA8BFD518A6DFC3518BBFE5555555555556BFE555555555555B400FF FFFFFFFFFFDBFD37C048D159E28BFE5555555555556BFE555555555555B4012AAAAAAA AAAA9BFD1AED6A9264E23BFE5555555555556BFE555555555555B4015555555555554B FCF623A67EAC2F3BFE5555555555556BFE555555555555B4017FFFFFFFFFFFFBFCB05B 05B05B05DBFE5555555555556BFE555555555555B401AAAAAAAAAAAAABFC6480F2B9D6 482BFE5555555555556BFE555555555555B401D555555555555BFC12956D9B1DF63BFE 5555555555556BFE555555555555B4020000000000000BFB7530ECA8641FEBFE555555 5555556BFE555555555555B4021555555555555BFA722833944A561BFE555555555555 6BFE555555555555B4022AAAAAAAAAAAA3F6E573AC901E43CBFE5555555555556BFE55 5555555555B4023FFFFFFFFFFFF3FAC71C71C71C708BFE5555555555556BCC80000000 00000C024000000000000BFC9999999999999BFE5555555555556BCC8000000000000C 022AAAAAAAAAAABBFCDF623A67EAC2EBFE5555555555556BCC8000000000000C021555 555555556BFD0F8CB487042C0BFE5555555555556BCC8000000000000C020000000000 001BFD2C5F92C5F92C5BFE5555555555556BCC8000000000000C01D555555555557BFD 4629B7F0D4629BFE5555555555556BCC8000000000000C01AAAAAAAAAAAACBFD5CEB24 0795CEBBFE5555555555556BCC8000000000000C018000000000001BFD70A3D70A3D70 ABFE5555555555556BCC8000000000000C015555555555556BFD8153D0F8CB487BFE55 55555555556BCC8000000000000C012AAAAAAAAAAABBFD8EFB11D33F562BFE55555555 55556BCC8000000000000C010000000000000BFD999999999999ABFE5555555555556B CC8000000000000C00AAAAAAAAAAAABBFDA12F684BDA130BFE5555555555556BCC8000 000000000C005555555555556BFDA5BC7DEA00C23BFE5555555555556BCC8000000000 000C000000000000001BFDA740DA740DA74BFE5555555555556BCC8000000000000BFF 5555555555558BFDA5BC7DEA00C23BFE5555555555556BCC8000000000000BFE555555 555555BBFDA12F684BDA130BFE5555555555556BCC8000000000000BCC800000000000 0BFD999999999999ABFE5555555555556BCC80000000000003FE555555555554FBFD8E FB11D33F562BFE5555555555556BCC80000000000003FF5555555555552BFD8153D0F8 CB487BFE5555555555556BCC80000000000003FFFFFFFFFFFFFFCBFD70A3D70A3D70BB FE5555555555556BCC80000000000004005555555555553BFD5CEB240795CECBFE5555 555555556BCC8000000000000400AAAAAAAAAAAA8BFD4629B7F0D462ABFE5555555555 556BCC8000000000000400FFFFFFFFFFFFDBFD2C5F92C5F92C7BFE5555555555556BCC 80000000000004012AAAAAAAAAAA9BFD0F8CB487042C2BFE5555555555556BCC800000 00000004015555555555554BFCDF623A67EAC31BFE5555555555556BCC800000000000 04017FFFFFFFFFFFFBFC999999999999BBFE5555555555556BCC8000000000000401AA AAAAAAAAAAABFC4DBF86A314DC0BFE5555555555556BCC8000000000000401D5555555 55555BFBF7A80308B9143BFE5555555555556BCC80000000000004020000000000000B FB47AE147AE147ABFE5555555555556BCC80000000000004021555555555555BFA1722 833944A59BFE5555555555556BCC80000000000004022AAAAAAAAAAAA3F8E573AC901E 52FBFE5555555555556BCC80000000000004023FFFFFFFFFFFF3FB1111111111108BFE 55555555555563FE555555555554FC024000000000000BFC79BE02468ACF1BFE555555 55555563FE555555555554FC022AAAAAAAAAAABBFCBF86A314DBF86BFE555555555555 63FE555555555554FC021555555555556BFCFF3DD1BAF98D9BFE55555555555563FE55 5555555554FC020000000000001BFD1C71C71C71C71BFE55555555555563FE55555555 5554FC01D555555555557BFD363BEC474CFD5BFE55555555555563FE555555555554FC 01AAAAAAAAAAAACBFD4CFD585E0E697BFE55555555555563FE555555555554FC018000 000000001BFD60B60B60B60B6BFE55555555555563FE555555555554FC015555555555 556BFD7166054F43E33BFE55555555555563FE555555555554FC012AAAAAAAAAAABBFD 7F0D4629B7F0EBFE55555555555563FE555555555554FC010000000000000BFD89ABCD F012346BFE55555555555563FE555555555554FC00AAAAAAAAAAAABBFD91419CA252AD CBFE55555555555563FE555555555554FC005555555555556BFD95CEB240795CFBFE55 555555555563FE555555555554FC000000000000001BFD97530ECA86420BFE55555555 555563FE555555555554FBFF5555555555558BFD95CEB240795CFBFE55555555555563 FE555555555554FBFE555555555555BBFD91419CA252ADCBFE55555555555563FE5555 55555554FBCC8000000000000BFD89ABCDF012346BFE55555555555563FE5555555555 54F3FE555555555554FBFD7F0D4629B7F0EBFE55555555555563FE555555555554F3FF 5555555555552BFD7166054F43E33BFE55555555555563FE555555555554F3FFFFFFFF FFFFFFCBFD60B60B60B60B7BFE55555555555563FE555555555554F400555555555555 3BFD4CFD585E0E698BFE55555555555563FE555555555554F400AAAAAAAAAAAA8BFD36 3BEC474CFD6BFE55555555555563FE555555555554F400FFFFFFFFFFFFDBFD1C71C71C 71C73BFE55555555555563FE555555555554F4012AAAAAAAAAAA9BFCFF3DD1BAF98DCB FE55555555555563FE555555555554F4015555555555554BFCBF86A314DBF89BFE5555 5555555563FE555555555554F4017FFFFFFFFFFFFBFC79BE02468ACF3BFE5555555555 5563FE555555555554F401AAAAAAAAAAAAABFC2DE3EF5006118BFE55555555555563FE 555555555554F401D555555555555BFBB7F0D4629B7F3BFE55555555555563FE555555 555554F4020000000000000BFB07F6E5D4C3B2ABFE55555555555563FE555555555554 F4021555555555555BF92F684BDA12F71BFE55555555555563FE555555555554F4022A AAAAAAAAAAA3F9F19690E0857D8BFE55555555555563FE555555555554F4023FFFFFFF FFFFF3FB50C83FB72EA58BFE55555555555563FF5555555555552C024000000000000B FC50C83FB72EA63BFE55555555555563FF5555555555552C022AAAAAAAAAAABBFC9690 E0857FCF6BFE55555555555563FF5555555555552C021555555555556BFCD6480F2B9D 647BFE55555555555563FF5555555555552C020000000000001BFD07F6E5D4C3B29BFE 55555555555563FF5555555555552C01D555555555557BFD21C10AFF9EE8DBFE555555 55555563FF5555555555552C01AAAAAAAAAAAACBFD388277166054FBFE555555555555 63FF5555555555552C018000000000001BFD4C3B2A1907F6EBFE55555555555563FF55 55555555552C015555555555556BFD5CEB240795CEBBFE55555555555563FF55555555 55552C012AAAAAAAAAAABBFD6A9264E209DC6BFE55555555555563FF5555555555552C 010000000000000BFD7530ECA8641FEBFE55555555555563FF5555555555552C00AAAA AAAAAAAABBFD7CC6BB5AA4994BFE55555555555563FF5555555555552C005555555555 556BFD8153D0F8CB487BFE55555555555563FF5555555555552C000000000000001BFD 82D82D82D82D8BFE55555555555563FF5555555555552BFF5555555555558BFD8153D0 F8CB487BFE55555555555563FF5555555555552BFE555555555555BBFD7CC6BB5AA499 4BFE55555555555563FF5555555555552BCC8000000000000BFD7530ECA8641FEBFE55 555555555563FF55555555555523FE555555555554FBFD6A9264E209DC6BFE55555555 555563FF55555555555523FF5555555555552BFD5CEB240795CEBBFE55555555555563 FF55555555555523FFFFFFFFFFFFFFCBFD4C3B2A1907F6FBFE55555555555563FF5555 5555555524005555555555553BFD3882771660550BFE55555555555563FF5555555555 552400AAAAAAAAAAAA8BFD21C10AFF9EE8EBFE55555555555563FF5555555555552400 FFFFFFFFFFFFDBFD07F6E5D4C3B2BBFE55555555555563FF55555555555524012AAAAA AAAAAA9BFCD6480F2B9D64CBFE55555555555563FF5555555555552401555555555555 4BFC9690E0857FCF9BFE55555555555563FF55555555555524017FFFFFFFFFFFFBFC50 C83FB72EA63BFE55555555555563FF5555555555552401AAAAAAAAAAAAABFC04EE2CC0 A9E88BFE55555555555563FF5555555555552401D555555555555BFB66054F43E32D3B FE55555555555563FF55555555555524020000000000000BFA6C16C16C16C14BFE5555 5555555563FF555555555555240215555555555553F5845C8A0CE506ABFE5555555555 5563FF55555555555524022AAAAAAAAAAAA3FA9CA252ADB3630BFE55555555555563FF 55555555555524023FFFFFFFFFFFF3FBA2B3C4D5E6F7ABFE55555555555563FFFFFFFF FFFFFFCC024000000000000BFC1EB851EB851EFBFE55555555555563FFFFFFFFFFFFFF CC022AAAAAAAAAAABBFC6480F2B9D6482BFE55555555555563FFFFFFFFFFFFFFCC0215 55555555556BFCA438215FF3DD3BFE55555555555563FFFFFFFFFFFFFFCC0200000000 00001BFCDDDDDDDDDDDDEBFE55555555555563FFFFFFFFFFFFFFCC01D555555555557B FD08B91419CA253BFE55555555555563FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFD1F7A 80308B915BFE55555555555563FFFFFFFFFFFFFFCC018000000000001BFD3333333333 334BFE55555555555563FFFFFFFFFFFFFFCC015555555555556BFD43E32D21C10B1BFE 55555555555563FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFD518A6DFC3518CBFE555555 55555563FFFFFFFFFFFFFFCC010000000000000BFD5C28F5C28F5C4BFE555555555555 63FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFD63BEC474CFD5ABFE55555555555563FFFF FFFFFFFFFFCC005555555555556BFD684BDA12F684DBFE55555555555563FFFFFFFFFF FFFFCC000000000000001BFD69D0369D0369EBFE55555555555563FFFFFFFFFFFFFFCB FF5555555555558BFD684BDA12F684DBFE55555555555563FFFFFFFFFFFFFFCBFE5555 55555555BBFD63BEC474CFD5ABFE55555555555563FFFFFFFFFFFFFFCBCC8000000000 000BFD5C28F5C28F5C4BFE55555555555563FFFFFFFFFFFFFFC3FE555555555554FBFD 518A6DFC3518CBFE55555555555563FFFFFFFFFFFFFFC3FF5555555555552BFD43E32D 21C10B1BFE55555555555563FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFD333333333333 5BFE55555555555563FFFFFFFFFFFFFFC4005555555555553BFD1F7A80308B916BFE55 555555555563FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFD08B91419CA254BFE55555555 555563FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFCDDDDDDDDDDDE2BFE55555555555563 FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFCA438215FF3DD8BFE55555555555563FFFFFF FFFFFFFFC4015555555555554BFC6480F2B9D6485BFE55555555555563FFFFFFFFFFFF FFC4017FFFFFFFFFFFFBFC1EB851EB851EFBFE55555555555563FFFFFFFFFFFFFFC401 AAAAAAAAAAAAABFBA5BC7DEA00C29BFE55555555555563FFFFFFFFFFFFFFC401D55555 5555555BFB01E573AC901EDBFE55555555555563FFFFFFFFFFFFFFC402000000000000 0BF947AE147AE1488BFE55555555555563FFFFFFFFFFFFFFC40215555555555553F9A8 C536FE1A8A7BFE55555555555563FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FB327104EE 2CC00BFE55555555555563FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FC0369D0369D031B FE55555555555564005555555555553C024000000000000BFBC71C71C71C725BFE5555 5555555564005555555555553C022AAAAAAAAAAABBFC2956D9B1DF626BFE5555555555 5564005555555555553C021555555555556BFC690E0857FCF77BFE5555555555556400 5555555555553C020000000000001BFCA2B3C4D5E6F82BFE5555555555556400555555 5555553C01D555555555557BFCD6480F2B9D64ABFE5555555555556400555555555555 3C01AAAAAAAAAAAACBFD01E573AC901E7BFE55555555555564005555555555553C0180 00000000001BFD159E26AF37C06BFE55555555555564005555555555553C0155555555 55556BFD264E209DC5983BFE55555555555564005555555555553C012AAAAAAAAAAABB FD33F5617839A5EBFE55555555555564005555555555553C010000000000000BFD3E93 E93E93E96BFE55555555555564005555555555553C00AAAAAAAAAAAABBFD4629B7F0D4 62CBFE55555555555564005555555555553C005555555555556BFD4AB6CD8EFB11FBFE 55555555555564005555555555553C000000000000001BFD4C3B2A1907F70BFE555555 55555564005555555555553BFF5555555555558BFD4AB6CD8EFB11FBFE555555555555 64005555555555553BFE555555555555BBFD4629B7F0D462CBFE555555555555640055 55555555553BCC8000000000000BFD3E93E93E93E96BFE555555555555640055555555 555533FE555555555554FBFD33F5617839A5EBFE555555555555640055555555555533 FF5555555555552BFD264E209DC5983BFE555555555555640055555555555533FFFFFF FFFFFFFFCBFD159E26AF37C07BFE555555555555640055555555555534005555555555 553BFD01E573AC901E8BFE55555555555564005555555555553400AAAAAAAAAAAA8BFC D6480F2B9D64DBFE55555555555564005555555555553400FFFFFFFFFFFFDBFCA2B3C4 D5E6F86BFE555555555555640055555555555534012AAAAAAAAAAA9BFC690E0857FCF7 BBFE555555555555640055555555555534015555555555554BFC2956D9B1DF62ABFE55 5555555555640055555555555534017FFFFFFFFFFFFBFBC71C71C71C729BFE55555555 555564005555555555553401AAAAAAAAAAAAABFB2F684BDA12F73BFE55555555555564 005555555555553401D555555555555BFA1722833944A69BFE55555555555564005555 55555555340200000000000003F823456789ABCB0BFE55555555555564005555555555 55340215555555555553FAC10AFF9EE8DC3BFE55555555555564005555555555553402 2AAAAAAAAAAAA3FBA8C536FE1A8B8BFE555555555555640055555555555534023FFFFF FFFFFFF3FC3E93E93E93E8DBFE5555555555556400AAAAAAAAAAAA8C02400000000000 0BFB3E93E93E93E99BFE5555555555556400AAAAAAAAAAAA8C022AAAAAAAAAAABBFBCA 252ADB363C0BFE5555555555556400AAAAAAAAAAAA8C021555555555556BFC24C9C413 B8B31BFE5555555555556400AAAAAAAAAAAA8C020000000000001BFC5E6F8091A2B3CB FE5555555555556400AAAAAAAAAAAA8C01D555555555557BFC9203CAE759204BFE5555 555555556400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFCBF86A314DBF88BFE5555555555 556400AAAAAAAAAAAA8C018000000000001BFCE6F8091A2B3C6BFE5555555555556400 AAAAAAAAAAAA8C015555555555556BFD042BFE7BA3760BFE5555555555556400AAAAAA AAAAAA8C012AAAAAAAAAAABBFD11D33F561783BBFE5555555555556400AAAAAAAAAAAA 8C010000000000000BFD1C71C71C71C73BFE5555555555556400AAAAAAAAAAAA8C00AA AAAAAAAAAABBFD240795CEB2409BFE5555555555556400AAAAAAAAAAAA8C0055555555 55556BFD2894AB6CD8EFCBFE5555555555556400AAAAAAAAAAAA8C000000000000001B FD2A1907F6E5D4DBFE5555555555556400AAAAAAAAAAAA8BFF5555555555558BFD2894 AB6CD8EFCBFE5555555555556400AAAAAAAAAAAA8BFE555555555555BBFD240795CEB2 409BFE5555555555556400AAAAAAAAAAAA8BCC8000000000000BFD1C71C71C71C73BFE 5555555555556400AAAAAAAAAAAA83FE555555555554FBFD11D33F561783BBFE555555 5555556400AAAAAAAAAAAA83FF5555555555552BFD042BFE7BA3760BFE555555555555 6400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFCE6F8091A2B3C7BFE5555555555556400AA AAAAAAAAAA84005555555555553BFCBF86A314DBF8ABFE5555555555556400AAAAAAAA AAAA8400AAAAAAAAAAAA8BFC9203CAE759208BFE5555555555556400AAAAAAAAAAAA84 00FFFFFFFFFFFFDBFC5E6F8091A2B41BFE5555555555556400AAAAAAAAAAAA84012AAA AAAAAAAA9BFC24C9C413B8B35BFE5555555555556400AAAAAAAAAAAA84015555555555 554BFBCA252ADB363C7BFE5555555555556400AAAAAAAAAAAA84017FFFFFFFFFFFFBFB 3E93E93E93E9DBFE5555555555556400AAAAAAAAAAAA8401AAAAAAAAAAAAABFA4DBF86 A314DCEBFE5555555555556400AAAAAAAAAAAA8401D555555555555BF4845C8A0CE544 4BFE5555555555556400AAAAAAAAAAAA840200000000000003FA59E26AF37C044BFE55 55555555556400AAAAAAAAAAAA840215555555555553FB690E0857FCF6EBFE55555555 55556400AAAAAAAAAAAA84022AAAAAAAAAAAA3FC18A6DFC3518A2BFE55555555555564 00AAAAAAAAAAAA84023FFFFFFFFFFFF3FC82D82D82D82D3BFE5555555555556400FFFF FFFFFFFFDC024000000000000BFA47AE147AE148ABFE5555555555556400FFFFFFFFFF FFDC022AAAAAAAAAAABBFB2F684BDA12F6CBFE5555555555556400FFFFFFFFFFFFDC02 1555555555556BFBAED6A9264E20EBFE5555555555556400FFFFFFFFFFFFDC02000000 0000001BFC1111111111112BFE5555555555556400FFFFFFFFFFFFDC01D55555555555 7BFC44A55B66C77DABFE5555555555556400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFC72 2833944A55EBFE5555555555556400FFFFFFFFFFFFDC018000000000001BFC99999999 9999CBFE5555555555556400FFFFFFFFFFFFDC015555555555556BFCBAF98D76B5496B FE5555555555556400FFFFFFFFFFFFDC012AAAAAAAAAAABBFCD6480F2B9D64BBFE5555 555555556400FFFFFFFFFFFFDC010000000000000BFCEB851EB851EBCBFE5555555555 556400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFCFAB0BC1CD2DE8BFE5555555555556400 FFFFFFFFFFFFDC005555555555556BFD01E573AC901E7BFE5555555555556400FFFFFF FFFFFFDC000000000000001BFD0369D0369D038BFE5555555555556400FFFFFFFFFFFF DBFF5555555555558BFD01E573AC901E7BFE5555555555556400FFFFFFFFFFFFDBFE55 5555555555BBFCFAB0BC1CD2DE8BFE5555555555556400FFFFFFFFFFFFDBCC80000000 00000BFCEB851EB851EBCBFE5555555555556400FFFFFFFFFFFFD3FE555555555554FB FCD6480F2B9D64CBFE5555555555556400FFFFFFFFFFFFD3FF5555555555552BFCBAF9 8D76B5497BFE5555555555556400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFC9999999999 99EBFE5555555555556400FFFFFFFFFFFFD4005555555555553BFC722833944A560BFE 5555555555556400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFC44A55B66C77DEBFE555555 5555556400FFFFFFFFFFFFD400FFFFFFFFFFFFDBFC1111111111117BFE555555555555 6400FFFFFFFFFFFFD4012AAAAAAAAAAA9BFBAED6A9264E215BFE5555555555556400FF FFFFFFFFFFD4015555555555554BFB2F684BDA12F73BFE5555555555556400FFFFFFFF FFFFD4017FFFFFFFFFFFFBFA47AE147AE1491BFE5555555555556400FFFFFFFFFFFFD4 01AAAAAAAAAAAAABF6845C8A0CE525ABFE5555555555556400FFFFFFFFFFFFD401D555 5555555553FA2F684BDA12F57BFE5555555555556400FFFFFFFFFFFFD4020000000000 0003FB47AE147AE1476BFE5555555555556400FFFFFFFFFFFFD40215555555555553FC 01E573AC901E1BFE5555555555556400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FC66054F 43E32CCBFE5555555555556400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FCD0369D0369CF DBFE55555555555564012AAAAAAAAAAA9C0240000000000003F623456789ABBDCBFE55 555555555564012AAAAAAAAAAA9C022AAAAAAAAAAABBFA04EE2CC0A9E90BFE55555555 555564012AAAAAAAAAAA9C021555555555556BFB01E573AC901EABFE55555555555564 012AAAAAAAAAAA9C020000000000001BFB7530ECA8641FFBFE55555555555564012AAA AAAAAAAA9C01D555555555557BFBDC598153D0F90BFE55555555555564012AAAAAAAAA AA9C01AAAAAAAAAAAACBFC1BAF98D76B54CBFE55555555555564012AAAAAAAAAAA9C01 8000000000001BFC4320FEDCBA98ABFE55555555555564012AAAAAAAAAAA9C01555555 5555556BFC6480F2B9D6484BFE55555555555564012AAAAAAAAAAA9C012AAAAAAAAAAA BBFC7FCF746EBE639BFE55555555555564012AAAAAAAAAAA9C010000000000000BFC95 0C83FB72EAABFE55555555555564012AAAAAAAAAAA9C00AAAAAAAAAAAABBFCA438215F F3DD6BFE55555555555564012AAAAAAAAAAA9C005555555555556BFCAD524C9C413BDB FE55555555555564012AAAAAAAAAAA9C000000000000001BFCB05B05B05B05FBFE5555 5555555564012AAAAAAAAAAA9BFF5555555555558BFCAD524C9C413BCBFE5555555555 5564012AAAAAAAAAAA9BFE555555555555BBFCA438215FF3DD6BFE5555555555556401 2AAAAAAAAAAA9BCC8000000000000BFC950C83FB72EAABFE55555555555564012AAAAA AAAAAA93FE555555555554FBFC7FCF746EBE63ABFE55555555555564012AAAAAAAAAAA 93FF5555555555552BFC6480F2B9D6485BFE55555555555564012AAAAAAAAAAA93FFFF FFFFFFFFFFCBFC4320FEDCBA98CBFE55555555555564012AAAAAAAAAAA940055555555 55553BFC1BAF98D76B54EBFE55555555555564012AAAAAAAAAAA9400AAAAAAAAAAAA8B FBDC598153D0F97BFE55555555555564012AAAAAAAAAAA9400FFFFFFFFFFFFDBFB7530 ECA864209BFE55555555555564012AAAAAAAAAAA94012AAAAAAAAAAA9BFB01E573AC90 1F1BFE55555555555564012AAAAAAAAAAA94015555555555554BFA04EE2CC0A9E9EBFE 55555555555564012AAAAAAAAAAA94017FFFFFFFFFFFF3F623456789ABB6FBFE555555 55555564012AAAAAAAAAAA9401AAAAAAAAAAAAA3FA419CA252ADB24BFE555555555555 64012AAAAAAAAAAA9401D5555555555553FB44A55B66C77D0BFE55555555555564012A AAAAAAAAAA940200000000000003FBF49F49F49F499BFE55555555555564012AAAAAAA AAAA940215555555555553FC585E0E696F1F3BFE55555555555564012AAAAAAAAAAA94 022AAAAAAAAAAAA3FCBC7DEA00C22DEBFE55555555555564012AAAAAAAAAAA94023FFF FFFFFFFFF3FD13579BE024687BFE55555555555564015555555555554C024000000000 0003FA907F6E5D4C3A6BFE55555555555564015555555555554C022AAAAAAAAAAAB3F8 E573AC901E561BFE55555555555564015555555555554C021555555555556BF90AFF9E E8DD7E6BFE55555555555564015555555555554C020000000000001BFA6C16C16C16C1 EBFE55555555555564015555555555554C01D555555555557BFB1D33F5617839EBFE55 555555555564015555555555554C01AAAAAAAAAAAACBFB7839A5BC7DEA6BFE55555555 555564015555555555554C018000000000001BFBC71C71C71C722BFE55555555555564 015555555555554C015555555555556BFC04EE2CC0A9E8BBFE55555555555564015555 555555554C012AAAAAAAAAAABBFC203CAE7592040BFE55555555555564015555555555 554C010000000000000BFC3579BE02468B1BFE55555555555564015555555555554C00 AAAAAAAAAAAABBFC44A55B66C77DDBFE55555555555564015555555555554C00555555 5555556BFC4DBF86A314DC4BFE55555555555564015555555555554C00000000000000 1BFC50C83FB72EA66BFE55555555555564015555555555554BFF5555555555558BFC4D BF86A314DC3BFE55555555555564015555555555554BFE555555555555BBFC44A55B66 C77DDBFE55555555555564015555555555554BCC8000000000000BFC3579BE02468B1B FE555555555555640155555555555543FE555555555554FBFC203CAE7592041BFE5555 55555555640155555555555543FF5555555555552BFC04EE2CC0A9E8CBFE5555555555 55640155555555555543FFFFFFFFFFFFFFCBFBC71C71C71C726BFE5555555555556401 55555555555544005555555555553BFB7839A5BC7DEAABFE5555555555556401555555 5555554400AAAAAAAAAAAA8BFB1D33F561783A5BFE5555555555556401555555555555 4400FFFFFFFFFFFFDBFA6C16C16C16C2EBFE555555555555640155555555555544012A AAAAAAAAAA9BF90AFF9EE8DD7FDBFE5555555555556401555555555555440155555555 555543F8E573AC901E517BFE555555555555640155555555555544017FFFFFFFFFFFF3 FA907F6E5D4C39BBFE55555555555564015555555555554401AAAAAAAAAAAAA3FB5FF3 DD1BAF984BFE55555555555564015555555555554401D5555555555553FC01E573AC90 1E1BFE5555555555556401555555555555440200000000000003FC59E26AF37C046BFE 5555555555556401555555555555440215555555555553FCB7F0D4629B7ECBFE555555 555555640155555555555544022AAAAAAAAAAAA3FD0E0857FCF746BBFE555555555555 640155555555555544023FFFFFFFFFFFF3FD4320FEDCBA984BFE55555555555564017F FFFFFFFFFFFC0240000000000003FB9999999999995BFE55555555555564017FFFFFFF FFFFFC022AAAAAAAAAAAB3FB0E0857FCF746CBFE55555555555564017FFFFFFFFFFFFC 0215555555555563FA1D33F56178395BFE55555555555564017FFFFFFFFFFFFC020000 0000000013F7B4E81B4E81B4DBFE55555555555564017FFFFFFFFFFFFC01D555555555 557BF92F684BDA12F6FBFE55555555555564017FFFFFFFFFFFFC01AAAAAAAAAAAACBFA 4DBF86A314DC7BFE55555555555564017FFFFFFFFFFFFC018000000000001BFAEB851E B851EBFBFE55555555555564017FFFFFFFFFFFFC015555555555556BFB388277166055 5BFE55555555555564017FFFFFFFFFFFFC012AAAAAAAAAAABBFB6F1F7A80308BFBFE55 555555555564017FFFFFFFFFFFFC010000000000000BFB99999999999A0BFE55555555 555564017FFFFFFFFFFFFC00AAAAAAAAAAAABBFBB7F0D4629B7F7BFE55555555555564 017FFFFFFFFFFFFC005555555555556BFBCA252ADB363C5BFE55555555555564017FFF FFFFFFFFFC000000000000001BFBD0369D0369D0ABFE55555555555564017FFFFFFFFF FFFBFF5555555555558BFBCA252ADB363C5BFE55555555555564017FFFFFFFFFFFFBFE 555555555555BBFBB7F0D4629B7F8BFE55555555555564017FFFFFFFFFFFFBCC800000 0000000BFB99999999999A1BFE55555555555564017FFFFFFFFFFFF3FE555555555554 FBFB6F1F7A80308C1BFE55555555555564017FFFFFFFFFFFF3FF5555555555552BFB38 82771660557BFE55555555555564017FFFFFFFFFFFF3FFFFFFFFFFFFFFCBFAEB851EB8 51EC8BFE55555555555564017FFFFFFFFFFFF4005555555555553BFA4DBF86A314DD0B FE55555555555564017FFFFFFFFFFFF400AAAAAAAAAAAA8BF92F684BDA12F8CBFE5555 5555555564017FFFFFFFFFFFF400FFFFFFFFFFFFD3F7B4E81B4E81AAFBFE5555555555 5564017FFFFFFFFFFFF4012AAAAAAAAAAA93FA1D33F56178386BFE5555555555556401 7FFFFFFFFFFFF40155555555555543FB0E0857FCF7465BFE55555555555564017FFFFF FFFFFFF4017FFFFFFFFFFFF3FB9999999999990BFE55555555555564017FFFFFFFFFFF F401AAAAAAAAAAAAA3FC18A6DFC3518A3BFE55555555555564017FFFFFFFFFFFF401D5 555555555553FC6A9264E209DC2BFE55555555555564017FFFFFFFFFFFF40200000000 000003FCC28F5C28F5C26BFE55555555555564017FFFFFFFFFFFF40215555555555553 FD104EE2CC0A9E7BFE55555555555564017FFFFFFFFFFFF4022AAAAAAAAAAAA3FD425E D097B425CBFE55555555555564017FFFFFFFFFFFF4023FFFFFFFFFFFF3FD7777777777 774BFE5555555555556401AAAAAAAAAAAAAC0240000000000003FC3E93E93E93E91BFE 5555555555556401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FBF19690E0857FABFE555555 5555556401AAAAAAAAAAAAAC0215555555555563FB722833944A558BFE555555555555 6401AAAAAAAAAAAAAC0200000000000013FAFDB97530ECA86BFE5555555555556401AA AAAAAAAAAAAC01D5555555555573FA2F684BDA12F65BFE5555555555556401AAAAAAAA AAAAAC01AAAAAAAAAAAAC3F8E573AC901E552BFE5555555555556401AAAAAAAAAAAAAC 018000000000001BF723456789ABD1BBFE5555555555556401AAAAAAAAAAAAAC015555 555555556BF953D0F8CB4871CBFE5555555555556401AAAAAAAAAAAAAC012AAAAAAAAA AABBFA1722833944A62BFE5555555555556401AAAAAAAAAAAAAC010000000000000BFA 6C16C16C16C25BFE5555555555556401AAAAAAAAAAAAAC00AAAAAAAAAAAABBFAA8C536 FE1A8D3BFE5555555555556401AAAAAAAAAAAAAC005555555555556BFACD2DE3EF5006 EBFE5555555555556401AAAAAAAAAAAAAC000000000000001BFAD950C83FB72F7BFE55 55555555556401AAAAAAAAAAAAABFF5555555555558BFACD2DE3EF5006FBFE55555555 55556401AAAAAAAAAAAAABFE555555555555BBFAA8C536FE1A8D3BFE55555555555564 01AAAAAAAAAAAAABCC8000000000000BFA6C16C16C16C25BFE5555555555556401AAAA AAAAAAAAA3FE555555555554FBFA1722833944A65BFE5555555555556401AAAAAAAAAA AAA3FF5555555555552BF953D0F8CB48723BFE5555555555556401AAAAAAAAAAAAA3FF FFFFFFFFFFFFCBF723456789ABD60BFE5555555555556401AAAAAAAAAAAAA400555555 55555533F8E573AC901E52EBFE5555555555556401AAAAAAAAAAAAA400AAAAAAAAAAAA 83FA2F684BDA12F56BFE5555555555556401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FAFD B97530ECA72BFE5555555555556401AAAAAAAAAAAAA4012AAAAAAAAAAA93FB72283394 4A551BFE5555555555556401AAAAAAAAAAAAA40155555555555543FBF19690E0857F3B FE5555555555556401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FC3E93E93E93E8FBFE5555 555555556401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FC8A6DFC3518A6ABFE5555555555 556401AAAAAAAAAAAAA401D5555555555553FCDC598153D0F89BFE5555555555556401 AAAAAAAAAAAAA40200000000000003FD1A2B3C4D5E6F7BFE5555555555556401AAAAAA AAAAAAA40215555555555553FD49327104EE2CABFE5555555555556401AAAAAAAAAAAA A4022AAAAAAAAAAAA3FD7B425ED097B3FBFE5555555555556401AAAAAAAAAAAAA4023F FFFFFFFFFFF3FDB05B05B05B058BFE5555555555556401D555555555555C0240000000 000003FCB97530ECA8641BFE5555555555556401D555555555555C022AAAAAAAAAAAB3 FC73AC901E573ADBFE5555555555556401D555555555555C0215555555555563FC33F5 617839A5CBFE5555555555556401D555555555555C0200000000000013FBF49F49F49F 4A2BFE5555555555556401D555555555555C01D5555555555573FB8D76B54932711BFE 5555555555556401D555555555555C01AAAAAAAAAAAAC3FB327104EE2CC09BFE555555 5555556401D555555555555C0180000000000013FAC71C71C71C71BBFE555555555555 6401D555555555555C0155555555555563FA419CA252ADB31BFE5555555555556401D5 55555555555C012AAAAAAAAAAAB3F9A8C536FE1A8BABFE5555555555556401D5555555 55555C0100000000000003F8FDB97530ECA6CBFE5555555555556401D555555555555C 00AAAAAAAAAAAAB3F80AFF9EE8DD7B3BFE5555555555556401D555555555555C005555 5555555563F6E573AC901E509BFE5555555555556401D555555555555C000000000000 0013F623456789ABC72BFE5555555555556401D555555555555BFF55555555555583F6 E573AC901E4FFBFE5555555555556401D555555555555BFE555555555555B3F80AFF9E E8DD7AEBFE5555555555556401D555555555555BCC80000000000003F8FDB97530ECA6 6BFE5555555555556401D5555555555553FE555555555554F3F9A8C536FE1A8B4BFE55 55555555556401D5555555555553FF55555555555523FA419CA252ADB2DBFE55555555 55556401D5555555555553FFFFFFFFFFFFFFC3FAC71C71C71C713BFE55555555555564 01D55555555555540055555555555533FB327104EE2CC05BFE5555555555556401D555 555555555400AAAAAAAAAAAA83FB8D76B5493270BBFE5555555555556401D555555555 555400FFFFFFFFFFFFD3FBF49F49F49F499BFE5555555555556401D555555555555401 2AAAAAAAAAAA93FC33F5617839A58BFE5555555555556401D555555555555401555555 55555543FC73AC901E573A9BFE5555555555556401D5555555555554017FFFFFFFFFFF F3FCB97530ECA863FBFE5555555555556401D555555555555401AAAAAAAAAAAAA3FD02 A7A1F19690DBFE5555555555556401D555555555555401D5555555555553FD2B9D6480 F2B9CBFE5555555555556401D55555555555540200000000000003FD579BE02468ACEB FE5555555555556401D55555555555540215555555555553FD86A314DBF86A2BFE5555 555555556401D5555555555554022AAAAAAAAAAAA3FDB8B302A7A1F17BFE5555555555 556401D5555555555554023FFFFFFFFFFFF3FDEDCBA98765430BFE5555555555556402 0000000000000C0240000000000003FD1EB851EB851EBBFE5555555555556402000000 0000000C022AAAAAAAAAAAB3FCF7A80308B9143BFE5555555555556402000000000000 0C0215555555555563FCB7F0D4629B7F2BFE55555555555564020000000000000C0200 000000000013FC7E4B17E4B17E7BFE55555555555564020000000000000C01D5555555 555573FC4AB6CD8EFB11FBFE55555555555564020000000000000C01AAAAAAAAAAAAC3 FC1D33F5617839BBFE55555555555564020000000000000C0180000000000013FBEB85 1EB851EBABFE55555555555564020000000000000C0155555555555563FBA8C536FE1A 8C5BFE55555555555564020000000000000C012AAAAAAAAAAAB3FB722833944A55BBFE 55555555555564020000000000000C0100000000000003FB47AE147AE147ABFE555555 55555564020000000000000C00AAAAAAAAAAAAB3FB2956D9B1DF623BFE555555555555 64020000000000000C0055555555555563FB1722833944A55BFE555555555555640200 00000000000C0000000000000013FB1111111111110BFE555555555555640200000000 00000BFF55555555555583FB1722833944A55BFE55555555555564020000000000000B FE555555555555B3FB2956D9B1DF622BFE55555555555564020000000000000BCC8000 0000000003FB47AE147AE1479BFE555555555555640200000000000003FE5555555555 54F3FB722833944A559BFE555555555555640200000000000003FF55555555555523FB A8C536FE1A8C3BFE555555555555640200000000000003FFFFFFFFFFFFFFC3FBEB851E B851EB6BFE5555555555556402000000000000040055555555555533FC1D33F5617839 9BFE55555555555564020000000000000400AAAAAAAAAAAA83FC4AB6CD8EFB11BBFE55 555555555564020000000000000400FFFFFFFFFFFFD3FC7E4B17E4B17E2BFE55555555 5555640200000000000004012AAAAAAAAAAA93FCB7F0D4629B7EEBFE55555555555564 02000000000000040155555555555543FCF7A80308B913FBFE55555555555564020000 0000000004017FFFFFFFFFFFF3FD1EB851EB851EABFE55555555555564020000000000 000401AAAAAAAAAAAAA3FD44A55B66C77D8BFE55555555555564020000000000000401 D5555555555553FD6D9B1DF623A67BFE55555555555564020000000000000402000000 00000003FD999999999999ABFE55555555555564020000000000000402155555555555 53FDC8A0CE512956DBFE555555555555640200000000000004022AAAAAAAAAAAA3FDFA B0BC1CD2DE2BFE555555555555640200000000000004023FFFFFFFFFFFF3FE17E4B17E 4B17EBFE55555555555564021555555555555C0240000000000003FD654320FEDCBA8B FE55555555555564021555555555555C022AAAAAAAAAAAB3FD425ED097B425EBFE5555 5555555564021555555555555C0215555555555563FD22833944A55B6BFE5555555555 5564021555555555555C0200000000000013FD05B05B05B05B0BFE5555555555556402 1555555555555C01D5555555555573FCD7CC6BB5AA498BFE5555555555556402155555 5555555C01AAAAAAAAAAAAC3FCAA49938827714BFE5555555555556402155555555555 5C0180000000000013FC82D82D82D82D6BFE55555555555564021555555555555C0155 555555555563FC617839A5BC7DCBFE55555555555564021555555555555C012AAAAAAA AAAAB3FC4629B7F0D4627BFE55555555555564021555555555555C0100000000000003 FC30ECA8641FDB6BFE55555555555564021555555555555C00AAAAAAAAAAAAB3FC21C1 0AFF9EE8ABFE55555555555564021555555555555C0055555555555563FC18A6DFC351 8A3BFE55555555555564021555555555555C0000000000000013FC159E26AF37C01BFE 55555555555564021555555555555BFF55555555555583FC18A6DFC3518A4BFE555555 55555564021555555555555BFE555555555555B3FC21C10AFF9EE8ABFE555555555555 64021555555555555BCC80000000000003FC30ECA8641FDB6BFE555555555555640215 555555555553FE555555555554F3FC4629B7F0D4626BFE555555555555640215555555 555553FF55555555555523FC617839A5BC7DBBFE555555555555640215555555555553 FFFFFFFFFFFFFFC3FC82D82D82D82D4BFE555555555555640215555555555554005555 5555555533FCAA49938827712BFE55555555555564021555555555555400AAAAAAAAAA AA83FCD7CC6BB5AA494BFE55555555555564021555555555555400FFFFFFFFFFFFD3FD 05B05B05B05AEBFE555555555555640215555555555554012AAAAAAAAAAA93FD228339 44A55B4BFE5555555555556402155555555555540155555555555543FD425ED097B425 CBFE555555555555640215555555555554017FFFFFFFFFFFF3FD654320FEDCBA7BFE55 555555555564021555555555555401AAAAAAAAAAAAA3FD8B302A7A1F194BFE55555555 555564021555555555555401D5555555555553FDB425ED097B424BFE55555555555564 02155555555555540200000000000003FDE02468ACF1356BFE55555555555564021555 55555555540215555555555553FE0795CEB240795BFE55555555555564021555555555 5554022AAAAAAAAAAAA3FE209DC598153CFBFE55555555555564021555555555555402 3FFFFFFFFFFFF3FE3B2A1907F6E5CBFE55555555555564022AAAAAAAAAAAAC02400000 00000003FDB05B05B05B058BFE55555555555564022AAAAAAAAAAAAC022AAAAAAAAAAA B3FD8D76B5493270FBFE55555555555564022AAAAAAAAAAAAC0215555555555563FD6D 9B1DF623A66BFE55555555555564022AAAAAAAAAAAAC0200000000000013FD50C83FB7 2EA60BFE55555555555564022AAAAAAAAAAAAC01D5555555555573FD36FE1A8C536FCB FE55555555555564022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FD203CAE759203BBFE5555 5555555564022AAAAAAAAAAAAC0180000000000013FD0C83FB72EA61CBFE5555555555 5564022AAAAAAAAAAAAC0155555555555563FCF7A80308B913DBFE5555555555556402 2AAAAAAAAAAAAC012AAAAAAAAAAAB3FCDC598153D0F88BFE55555555555564022AAAAA AAAAAAAC0100000000000003FCC71C71C71C717BFE55555555555564022AAAAAAAAAAA AC00AAAAAAAAAAAAB3FCB7F0D4629B7EBBFE55555555555564022AAAAAAAAAAAAC0055 555555555563FCAED6A9264E204BFE55555555555564022AAAAAAAAAAAAC0000000000 000013FCABCDF01234562BFE55555555555564022AAAAAAAAAAAABFF55555555555583 FCAED6A9264E205BFE55555555555564022AAAAAAAAAAAABFE555555555555B3FCB7F0 D4629B7EBBFE55555555555564022AAAAAAAAAAAABCC80000000000003FCC71C71C71C 717BFE55555555555564022AAAAAAAAAAAA3FE555555555554F3FCDC598153D0F87BFE 55555555555564022AAAAAAAAAAAA3FF55555555555523FCF7A80308B913CBFE555555 55555564022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FD0C83FB72EA61ABFE555555555555 64022AAAAAAAAAAAA40055555555555533FD203CAE7592039BFE55555555555564022A AAAAAAAAAAA400AAAAAAAAAAAA83FD36FE1A8C536FBBFE55555555555564022AAAAAAA AAAAA400FFFFFFFFFFFFD3FD50C83FB72EA5EBFE55555555555564022AAAAAAAAAAAA4 012AAAAAAAAAAA93FD6D9B1DF623A64BFE55555555555564022AAAAAAAAAAAA4015555 5555555543FD8D76B5493270DBFE55555555555564022AAAAAAAAAAAA4017FFFFFFFFF FFF3FDB05B05B05B057BFE55555555555564022AAAAAAAAAAAA401AAAAAAAAAAAAA3FD D6480F2B9D645BFE55555555555564022AAAAAAAAAAAA401D5555555555553FDFF3DD1 BAF98D4BFE55555555555564022AAAAAAAAAAAA40200000000000003FE159E26AF37C0 3BFE55555555555564022AAAAAAAAAAAA40215555555555553FE2D21C10AFF9EDBFE55 555555555564022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE4629B7F0D4628BFE55555555 555564022AAAAAAAAAAAA4023FFFFFFFFFFFF3FE60B60B60B60B4BFE55555555555564 023FFFFFFFFFFFFC0240000000000003FDFFFFFFFFFFFFDBFE55555555555564023FFF FFFFFFFFFC022AAAAAAAAAAAB3FDDD1BAF98D76B3BFE55555555555564023FFFFFFFFF FFFC0215555555555563FDBD401845C8A0BBFE55555555555564023FFFFFFFFFFFFC02 00000000000013FDA06D3A06D3A05BFE55555555555564023FFFFFFFFFFFFC01D55555 55555573FD86A314DBF86A1BFE55555555555564023FFFFFFFFFFFFC01AAAAAAAAAAAA C3FD6FE1A8C536FDFBFE55555555555564023FFFFFFFFFFFFC0180000000000013FD5C 28F5C28F5C0BFE55555555555564023FFFFFFFFFFFFC0155555555555563FD4B78FBD4 01843BFE55555555555564023FFFFFFFFFFFFC012AAAAAAAAAAAB3FD3DD1BAF98D768B FE55555555555564023FFFFFFFFFFFFC0100000000000003FD3333333333330BFE5555 5555555564023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD2B9D6480F2B9ABFE5555555555 5564023FFFFFFFFFFFFC0055555555555563FD27104EE2CC0A7BFE5555555555556402 3FFFFFFFFFFFFC0000000000000013FD258BF258BF256BFE55555555555564023FFFFF FFFFFFFBFF55555555555583FD27104EE2CC0A7BFE55555555555564023FFFFFFFFFFF FBFE555555555555B3FD2B9D6480F2B9ABFE55555555555564023FFFFFFFFFFFFBCC80 000000000003FD3333333333330BFE55555555555564023FFFFFFFFFFFF3FE55555555 5554F3FD3DD1BAF98D768BFE55555555555564023FFFFFFFFFFFF3FF55555555555523 FD4B78FBD401843BFE55555555555564023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD5C28 F5C28F5BFBFE55555555555564023FFFFFFFFFFFF40055555555555533FD6FE1A8C536 FDEBFE55555555555564023FFFFFFFFFFFF400AAAAAAAAAAAA83FD86A314DBF86A0BFE 55555555555564023FFFFFFFFFFFF400FFFFFFFFFFFFD3FDA06D3A06D3A03BFE555555 55555564023FFFFFFFFFFFF4012AAAAAAAAAAA93FDBD401845C8A08BFE555555555555 64023FFFFFFFFFFFF40155555555555543FDDD1BAF98D76B2BFE55555555555564023F FFFFFFFFFFF4017FFFFFFFFFFFF3FDFFFFFFFFFFFFCBFE55555555555564023FFFFFFF FFFFF401AAAAAAAAAAAAA3FE12F684BDA12F5BFE55555555555564023FFFFFFFFFFFF4 01D5555555555553FE277166054F43DBFE55555555555564023FFFFFFFFFFFF4020000 0000000003FE3D70A3D70A3D6BFE55555555555564023FFFFFFFFFFFF4021555555555 5553FE54F43E32D21BFBFE55555555555564023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE 6DFC3518A6DFABFE55555555555564023FFFFFFFFFFFF4023FFFFFFFFFFFF3FE888888 8888886BFE0000000000001C024000000000000C0240000000000003FB555555555555 7BFE0000000000001C024000000000000C022AAAAAAAAAAAB3FA938827716605CBFE00 00000000001C024000000000000C0215555555555563F92956D9B1DF62ABFE00000000 00001C024000000000000C020000000000001BF847AE147AE1459BFE0000000000001C 024000000000000C01D555555555557BFA203CAE7592037BFE0000000000001C024000 000000000C01AAAAAAAAAAAACBFAD6480F2B9D647BFE0000000000001C024000000000 000C018000000000001BFB3A06D3A06D3A0BFE0000000000001C024000000000000C01 5555555555556BFB7CC6BB5AA4993BFE0000000000001C024000000000000C012AAAAA AAAAAABBFBB363BEC474CFDBFE0000000000001C024000000000000C01000000000000 0BFBDDDDDDDDDDDDEBFE0000000000001C024000000000000C00AAAAAAAAAAAABBFBFC 3518A6DFC35BFE0000000000001C024000000000000C005555555555556BFC0734B78F BD402BFE0000000000001C024000000000000C000000000000001BFC0A3D70A3D70A5B FE0000000000001C024000000000000BFF5555555555558BFC0734B78FBD402BFE0000 000000001C024000000000000BFE555555555555BBFBFC3518A6DFC37BFE0000000000 001C024000000000000BCC8000000000000BFBDDDDDDDDDDDE0BFE0000000000001C02 40000000000003FE555555555554FBFBB363BEC474D00BFE0000000000001C02400000 00000003FF5555555555552BFB7CC6BB5AA4996BFE0000000000001C02400000000000 03FFFFFFFFFFFFFFCBFB3A06D3A06D3A3BFE0000000000001C02400000000000040055 55555555553BFAD6480F2B9D64EBFE0000000000001C024000000000000400AAAAAAAA AAAA8BFA203CAE7592045BFE0000000000001C024000000000000400FFFFFFFFFFFFDB F847AE147AE14A0BFE0000000000001C0240000000000004012AAAAAAAAAAA93F92956 D9B1DF60FBFE0000000000001C02400000000000040155555555555543FA9388277166 04CBFE0000000000001C0240000000000004017FFFFFFFFFFFF3FB5555555555551BFE 0000000000001C024000000000000401AAAAAAAAAAAAA3FBED097B425ED07BFE000000 0000001C024000000000000401D5555555555553FC487042BFE7BA3BFE000000000000 1C02400000000000040200000000000003FCA06D3A06D3A07BFE0000000000001C0240 0000000000040215555555555553FCFE7BA375F31AEBFE0000000000001C0240000000 000004022AAAAAAAAAAAA3FD314DBF86A314CBFE0000000000001C0240000000000004 023FFFFFFFFFFFF3FD6666666666665BFE0000000000001C022AAAAAAAAAAABC024000 0000000003FA07F6E5D4C3B2EBFE0000000000001C022AAAAAAAAAAABC022AAAAAAAAA AABBF5E573AC901E3F8BFE0000000000001C022AAAAAAAAAAABC021555555555556BFA 0E0857FCF7463BFE0000000000001C022AAAAAAAAAAABC020000000000001BFAF49F49 F49F48EBFE0000000000001C022AAAAAAAAAAABC01D555555555557BFB617839A5BC7D 8BFE0000000000001C022AAAAAAAAAAABC01AAAAAAAAAAAACBFBBC7DEA00C22E0BFE00 00000000001C022AAAAAAAAAAABC018000000000001BFC05B05B05B05AEBFE00000000 00001C022AAAAAAAAAAABC015555555555556BFC27104EE2CC0A8BFE0000000000001C 022AAAAAAAAAAABC012AAAAAAAAAAABBFC425ED097B425DBFE0000000000001C022AAA AAAAAAAABC010000000000000BFC579BE02468ACEBFE0000000000001C022AAAAAAAAA AABC00AAAAAAAAAAAABBFC66C77D88E99FABFE0000000000001C022AAAAAAAAAAABC00 5555555555556BFC6FE1A8C536FE1BFE0000000000001C022AAAAAAAAAAABC00000000 0000001BFC72EA61D950C83BFE0000000000001C022AAAAAAAAAAABBFF555555555555 8BFC6FE1A8C536FE0BFE0000000000001C022AAAAAAAAAAABBFE555555555555BBFC66 C77D88E99FABFE0000000000001C022AAAAAAAAAAABBCC8000000000000BFC579BE024 68ACEBFE0000000000001C022AAAAAAAAAAAB3FE555555555554FBFC425ED097B425EB FE0000000000001C022AAAAAAAAAAAB3FF5555555555552BFC27104EE2CC0A9BFE0000 000000001C022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC05B05B05B05B0BFE0000000000 001C022AAAAAAAAAAAB4005555555555553BFBBC7DEA00C22E5BFE0000000000001C02 2AAAAAAAAAAAB400AAAAAAAAAAAA8BFB617839A5BC7DFBFE0000000000001C022AAAAA AAAAAAB400FFFFFFFFFFFFDBFAF49F49F49F4A2BFE0000000000001C022AAAAAAAAAAA B4012AAAAAAAAAAA9BFA0E0857FCF7472BFE0000000000001C022AAAAAAAAAAAB40155 55555555554BF5E573AC901E5CABFE0000000000001C022AAAAAAAAAAAB4017FFFFFFF FFFFF3FA07F6E5D4C3B27BFE0000000000001C022AAAAAAAAAAAB401AAAAAAAAAAAAA3 FB1BAF98D76B54ABFE0000000000001C022AAAAAAAAAAAB401D5555555555553FBBF86 A314DBF88BFE0000000000001C022AAAAAAAAAAAB40200000000000003FC37C048D159 E28BFE0000000000001C022AAAAAAAAAAAB40215555555555553FC95CEB240795CFBFE 0000000000001C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FCF9EE8DD7CC6BABFE000000 0000001C022AAAAAAAAAAAB4023FFFFFFFFFFFF3FD320FEDCBA9875BFE000000000000 1C021555555555556C024000000000000BF8D950C83FB72E9BFE0000000000001C0215 55555555556C022AAAAAAAAAAABBFA8D76B54932708BFE0000000000001C0215555555 55556C021555555555556BFB4629B7F0D4626BFE0000000000001C021555555555556C 020000000000001BFBB97530ECA863BBFE0000000000001C021555555555556C01D555 555555557BFC104EE2CC0A9E6BFE0000000000001C021555555555556C01AAAAAAAAAA AACBFC3DD1BAF98D76ABFE0000000000001C021555555555556C018000000000001BFC 654320FEDCBA8BFE0000000000001C021555555555556C015555555555556BFC86A314 DBF86A2BFE0000000000001C021555555555556C012AAAAAAAAAAABBFCA1F19690E085 7BFE0000000000001C021555555555556C010000000000000BFCB72EA61D950C8BFE00 00000000001C021555555555556C00AAAAAAAAAAAABBFCC65A438215FF4BFE00000000 00001C021555555555556C005555555555556BFCCF746EBE635DBBFE0000000000001C 021555555555556C000000000000001BFCD27D27D27D27DBFE0000000000001C021555 555555556BFF5555555555558BFCCF746EBE635DABFE0000000000001C021555555555 556BFE555555555555BBFCC65A438215FF4BFE0000000000001C021555555555556BCC 8000000000000BFCB72EA61D950C8BFE0000000000001C0215555555555563FE555555 555554FBFCA1F19690E0858BFE0000000000001C0215555555555563FF555555555555 2BFC86A314DBF86A3BFE0000000000001C0215555555555563FFFFFFFFFFFFFFCBFC65 4320FEDCBAABFE0000000000001C0215555555555564005555555555553BFC3DD1BAF9 8D76CBFE0000000000001C021555555555556400AAAAAAAAAAAA8BFC104EE2CC0A9EAB FE0000000000001C021555555555556400FFFFFFFFFFFFDBFBB97530ECA8645BFE0000 000000001C0215555555555564012AAAAAAAAAAA9BFB4629B7F0D462DBFE0000000000 001C0215555555555564015555555555554BFA8D76B54932716BFE0000000000001C02 15555555555564017FFFFFFFFFFFFBF8D950C83FB7304BFE0000000000001C02155555 5555556401AAAAAAAAAAAAA3F9722833944A555BFE0000000000001C02155555555555 6401D5555555555553FB0061172283394BFE0000000000001C02155555555555640200 000000000003FBB05B05B05B05DBFE0000000000001C02155555555555640215555555 555553FC363BEC474CFD5BFE0000000000001C0215555555555564022AAAAAAAAAAAA3 FC9A5BC7DEA00C0BFE0000000000001C0215555555555564023FFFFFFFFFFFF3FD0246 8ACF13578BFE0000000000001C020000000000001C024000000000000BFAD0369D0369 CFABFE0000000000001C020000000000001C022AAAAAAAAAAABBFB73AC901E573A4BFE 0000000000001C020000000000001C021555555555556BFBF31AED6A92646BFE000000 0000001C020000000000001C020000000000001BFC333333333332EBFE000000000000 1C020000000000001C01D555555555557BFC66C77D88E99F6BFE0000000000001C0200 00000000001C01AAAAAAAAAAAACBFC944A55B66C77ABFE0000000000001C0200000000 00001C018000000000001BFCBBBBBBBBBBBB8BFE0000000000001C020000000000001C 015555555555556BFCDD1BAF98D76B2BFE0000000000001C020000000000001C012AAA AAAAAAAABBFCF86A314DBF867BFE0000000000001C020000000000001C010000000000 000BFD06D3A06D3A06CBFE0000000000001C020000000000001C00AAAAAAAAAAAABBFD 0E696F1F7A802BFE0000000000001C020000000000001C005555555555556BFD12F684 BDA12F5BFE0000000000001C020000000000001C000000000000001BFD147AE147AE14 6BFE0000000000001C020000000000001BFF5555555555558BFD12F684BDA12F5BFE00 00000000001C020000000000001BFE555555555555BBFD0E696F1F7A802BFE00000000 00001C020000000000001BCC8000000000000BFD06D3A06D3A06CBFE0000000000001C 0200000000000013FE555555555554FBFCF86A314DBF868BFE0000000000001C020000 0000000013FF5555555555552BFCDD1BAF98D76B3BFE0000000000001C020000000000 0013FFFFFFFFFFFFFFCBFCBBBBBBBBBBBBABFE0000000000001C020000000000001400 5555555555553BFC944A55B66C77CBFE0000000000001C020000000000001400AAAAAA AAAAAA8BFC66C77D88E99FABFE0000000000001C020000000000001400FFFFFFFFFFFF DBFC3333333333333BFE0000000000001C0200000000000014012AAAAAAAAAAA9BFBF3 1AED6A9264DBFE0000000000001C0200000000000014015555555555554BFB73AC901E 573ABBFE0000000000001C0200000000000014017FFFFFFFFFFFFBFAD0369D0369D01B FE0000000000001C020000000000001401AAAAAAAAAAAAABF9419CA252ADB2BBFE0000 000000001C020000000000001401D5555555555553F94DBF86A314DCEBFE0000000000 001C02000000000000140200000000000003FB0369D0369D03EBFE0000000000001C02 000000000000140215555555555553FBBF86A314DBF8ABFE0000000000001C02000000 00000014022AAAAAAAAAAAA3FC43E32D21C10B0BFE0000000000001C02000000000000 14023FFFFFFFFFFFF3FCAE147AE147AE1BFE0000000000001C01D555555555557C0240 00000000000BFB82D82D82D82D1BFE0000000000001C01D555555555557C022AAAAAAA AAAABBFC0734B78FBD3FCBFE0000000000001C01D555555555557C021555555555556B FC46EBE635DAD4DBFE0000000000001C01D555555555557C020000000000001BFC8091 A2B3C4D58BFE0000000000001C01D555555555557C01D555555555557BFCB425ED097B 420BFE0000000000001C01D555555555557C01AAAAAAAAAAAACBFCE1A8C536FE1A4BFE 0000000000001C01D555555555557C018000000000001BFD048D159E26AF1BFE000000 0000001C01D555555555557C015555555555556BFD153D0F8CB486EBFE000000000000 1C01D555555555557C012AAAAAAAAAAABBFD22E4506728949BFE0000000000001C01D5 55555555557C010000000000000BFD2D82D82D82D81BFE0000000000001C01D5555555 55557C00AAAAAAAAAAAABBFD3518A6DFC3517BFE0000000000001C01D555555555557C 005555555555556BFD39A5BC7DEA00ABFE0000000000001C01D555555555557C000000 000000001BFD3B2A1907F6E5BBFE0000000000001C01D555555555557BFF5555555555 558BFD39A5BC7DEA00ABFE0000000000001C01D555555555557BFE555555555555BBFD 3518A6DFC3517BFE0000000000001C01D555555555557BCC8000000000000BFD2D82D8 2D82D81BFE0000000000001C01D5555555555573FE555555555554FBFD22E450672894 9BFE0000000000001C01D5555555555573FF5555555555552BFD153D0F8CB486EBFE00 00000000001C01D5555555555573FFFFFFFFFFFFFFCBFD048D159E26AF2BFE00000000 00001C01D5555555555574005555555555553BFCE1A8C536FE1A5BFE0000000000001C 01D555555555557400AAAAAAAAAAAA8BFCB425ED097B424BFE0000000000001C01D555 555555557400FFFFFFFFFFFFDBFC8091A2B3C4D5DBFE0000000000001C01D555555555 5574012AAAAAAAAAAA9BFC46EBE635DAD51BFE0000000000001C01D555555555557401 5555555555554BFC0734B78FBD400BFE0000000000001C01D5555555555574017FFFFF FFFFFFFBFB82D82D82D82D5BFE0000000000001C01D555555555557401AAAAAAAAAAAA ABFAD6480F2B9D63EBFE0000000000001C01D555555555557401D555555555555BF91D 33F56178382BFE0000000000001C01D55555555555740200000000000003F9A2B3C4D5 E6FA8BFE0000000000001C01D55555555555740215555555555553FB24C9C413B8B36B FE0000000000001C01D5555555555574022AAAAAAAAAAAA3FBED097B425ED0CBFE0000 000000001C01D5555555555574023FFFFFFFFFFFF3FC60B60B60B60B7BFE0000000000 001C01AAAAAAAAAAAACC024000000000000BFC05B05B05B05B1BFE0000000000001C01 AAAAAAAAAAAACC022AAAAAAAAAAABBFC4B78FBD401844BFE0000000000001C01AAAAAA AAAAAACC021555555555556BFC8B302A7A1F195BFE0000000000001C01AAAAAAAAAAAA CC020000000000001BFCC4D5E6F8091A0BFE0000000000001C01AAAAAAAAAAAACC01D5 55555555557BFCF86A314DBF868BFE0000000000001C01AAAAAAAAAAAACC01AAAAAAAA AAAACBFD12F684BDA12F6BFE0000000000001C01AAAAAAAAAAAACC018000000000001B FD26AF37C048D15BFE0000000000001C01AAAAAAAAAAAACC015555555555556BFD375F 31AED6A92BFE0000000000001C01AAAAAAAAAAAACC012AAAAAAAAAAABBFD450672894A B6DBFE0000000000001C01AAAAAAAAAAAACC010000000000000BFD4FA4FA4FA4FA5BFE 0000000000001C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFD573AC901E573BBFE000000 0000001C01AAAAAAAAAAAACC005555555555556BFD5BC7DEA00C22EBFE000000000000 1C01AAAAAAAAAAAACC000000000000001BFD5D4C3B2A1907FBFE0000000000001C01AA AAAAAAAAAACBFF5555555555558BFD5BC7DEA00C22EBFE0000000000001C01AAAAAAAA AAAACBFE555555555555BBFD573AC901E573BBFE0000000000001C01AAAAAAAAAAAACB CC8000000000000BFD4FA4FA4FA4FA5BFE0000000000001C01AAAAAAAAAAAAC3FE5555 55555554FBFD450672894AB6DBFE0000000000001C01AAAAAAAAAAAAC3FF5555555555 552BFD375F31AED6A92BFE0000000000001C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFD 26AF37C048D16BFE0000000000001C01AAAAAAAAAAAAC4005555555555553BFD12F684 BDA12F7BFE0000000000001C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFCF86A314DBF86 BBFE0000000000001C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFCC4D5E6F8091A4BFE00 00000000001C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFC8B302A7A1F19ABFE00000000 00001C01AAAAAAAAAAAAC4015555555555554BFC4B78FBD401847BFE0000000000001C 01AAAAAAAAAAAAC4017FFFFFFFFFFFFBFC05B05B05B05B2BFE0000000000001C01AAAA AAAAAAAAC401AAAAAAAAAAAAABFB73AC901E573AFBFE0000000000001C01AAAAAAAAAA AAC401D555555555555BFA9FAB0BC1CD2E1BFE0000000000001C01AAAAAAAAAAAAC402 0000000000000BF7FDB97530ECA60BFE0000000000001C01AAAAAAAAAAAAC402155555 55555553FA388277166054BBFE0000000000001C01AAAAAAAAAAAAC4022AAAAAAAAAAA A3FB6480F2B9D647CBFE0000000000001C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FC1C 71C71C71C6FBFE0000000000001C018000000000001C024000000000000BFC40DA740D A740FBFE0000000000001C018000000000001C022AAAAAAAAAAABBFC86A314DBF86A2B FE0000000000001C018000000000001C021555555555556BFCC65A438215FF3BFE0000 000000001C018000000000001C020000000000001BFCFFFFFFFFFFFFEBFE0000000000 001C018000000000001C01D555555555557BFD19CA252ADB363BFE0000000000001C01 8000000000001C01AAAAAAAAAAAACBFD308B91419CA25BFE0000000000001C01800000 0000001C018000000000001BFD4444444444444BFE0000000000001C01800000000000 1C015555555555556BFD54F43E32D21C1BFE0000000000001C018000000000001C012A AAAAAAAAAABBFD629B7F0D4629CBFE0000000000001C018000000000001C0100000000 00000BFD6D3A06D3A06D4BFE0000000000001C018000000000001C00AAAAAAAAAAAABB FD74CFD585E0E6ABFE0000000000001C018000000000001C005555555555556BFD795C EB240795DBFE0000000000001C018000000000001C000000000000001BFD7AE147AE14 7AEBFE0000000000001C018000000000001BFF5555555555558BFD795CEB240795DBFE 0000000000001C018000000000001BFE555555555555BBFD74CFD585E0E6ABFE000000 0000001C018000000000001BCC8000000000000BFD6D3A06D3A06D4BFE000000000000 1C0180000000000013FE555555555554FBFD629B7F0D4629CBFE0000000000001C0180 000000000013FF5555555555552BFD54F43E32D21C1BFE0000000000001C0180000000 000013FFFFFFFFFFFFFFCBFD4444444444445BFE0000000000001C0180000000000014 005555555555553BFD308B91419CA26BFE0000000000001C018000000000001400AAAA AAAAAAAA8BFD19CA252ADB364BFE0000000000001C018000000000001400FFFFFFFFFF FFDBFD0000000000001BFE0000000000001C0180000000000014012AAAAAAAAAAA9BFC C65A438215FF8BFE0000000000001C0180000000000014015555555555554BFC86A314 DBF86A5BFE0000000000001C0180000000000014017FFFFFFFFFFFFBFC40DA740DA740 FBFE0000000000001C018000000000001401AAAAAAAAAAAAABFBEA00C22E45069BFE00 00000000001C018000000000001401D555555555555BFB4629B7F0D462BBFE00000000 00001C0180000000000014020000000000000BFA2C5F92C5F92C4BFE0000000000001C 01800000000000140215555555555553F82F684BDA12F4DBFE0000000000001C018000 0000000014022AAAAAAAAAAAA3FADC598153D0F80BFE0000000000001C018000000000 0014023FFFFFFFFFFFF3FBC28F5C28F5C22BFE0000000000001C015555555555556C02 4000000000000BFC72EA61D950C81BFE0000000000001C015555555555556C022AAAAA AAAAAABBFCB8B302A7A1F16BFE0000000000001C015555555555556C02155555555555 6BFCF86A314DBF867BFE0000000000001C015555555555556C020000000000001BFD19 07F6E5D4C39BFE0000000000001C015555555555556C01D555555555557BFD32D21C10 AFF9DBFE0000000000001C015555555555556C01AAAAAAAAAAAACBFD499388277165FB FE0000000000001C015555555555556C018000000000001BFD5D4C3B2A1907EBFE0000 000000001C015555555555556C015555555555556BFD6DFC3518A6DFBBFE0000000000 001C015555555555556C012AAAAAAAAAAABBFD7BA375F31AED6BFE0000000000001C01 5555555555556C010000000000000BFD8641FDB97530EBFE0000000000001C01555555 5555556C00AAAAAAAAAAAABBFD8DD7CC6BB5AA4BFE0000000000001C01555555555555 6C005555555555556BFD9264E209DC597BFE0000000000001C015555555555556C0000 00000000001BFD93E93E93E93E8BFE0000000000001C015555555555556BFF55555555 55558BFD9264E209DC597BFE0000000000001C015555555555556BFE555555555555BB FD8DD7CC6BB5AA4BFE0000000000001C015555555555556BCC8000000000000BFD8641 FDB97530EBFE0000000000001C0155555555555563FE555555555554FBFD7BA375F31A ED6BFE0000000000001C0155555555555563FF5555555555552BFD6DFC3518A6DFBBFE 0000000000001C0155555555555563FFFFFFFFFFFFFFCBFD5D4C3B2A1907FBFE000000 0000001C0155555555555564005555555555553BFD4993882771660BFE000000000000 1C015555555555556400AAAAAAAAAAAA8BFD32D21C10AFF9EBFE0000000000001C0155 55555555556400FFFFFFFFFFFFDBFD1907F6E5D4C3BBFE0000000000001C0155555555 555564012AAAAAAAAAAA9BFCF86A314DBF86CBFE0000000000001C0155555555555564 015555555555554BFCB8B302A7A1F19BFE0000000000001C0155555555555564017FFF FFFFFFFFFBFC72EA61D950C83BFE0000000000001C015555555555556401AAAAAAAAAA AAABFC27104EE2CC0A8BFE0000000000001C015555555555556401D555555555555BFB AA49938827713BFE0000000000001C0155555555555564020000000000000BFAF49F49 F49F494BFE0000000000001C0155555555555564021555555555555BF8F19690E0857E 3BFE0000000000001C0155555555555564022AAAAAAAAAAAA3FA1419CA252ADACBFE00 00000000001C0155555555555564023FFFFFFFFFFFF3FB5E6F8091A2B3ABFE00000000 00001C012AAAAAAAAAAABC024000000000000BFC9BE02468ACF11BFE0000000000001C 012AAAAAAAAAAABC022AAAAAAAAAAABBFCE1A8C536FE1A6BFE0000000000001C012AAA AAAAAAAABC021555555555556BFD10AFF9EE8DD7CBFE0000000000001C012AAAAAAAAA AABC020000000000001BFD2D82D82D82D81BFE0000000000001C012AAAAAAAAAAABC01 D555555555557BFD474CFD585E0E5BFE0000000000001C012AAAAAAAAAAABC01AAAAAA AAAAAACBFD5E0E696F1F7A7BFE0000000000001C012AAAAAAAAAAABC01800000000000 1BFD71C71C71C71C6BFE0000000000001C012AAAAAAAAAAABC015555555555556BFD82 77166054F43BFE0000000000001C012AAAAAAAAAAABC012AAAAAAAAAAABBFD901E573A C901EBFE0000000000001C012AAAAAAAAAAABC010000000000000BFD9ABCDF0123456B FE0000000000001C012AAAAAAAAAAABC00AAAAAAAAAAAABBFDA252ADB363BECBFE0000 000000001C012AAAAAAAAAAABC005555555555556BFDA6DFC3518A6DFBFE0000000000 001C012AAAAAAAAAAABC000000000000001BFDA8641FDB97530BFE0000000000001C01 2AAAAAAAAAAABBFF5555555555558BFDA6DFC3518A6DFBFE0000000000001C012AAAAA AAAAAABBFE555555555555BBFDA252ADB363BECBFE0000000000001C012AAAAAAAAAAA BBCC8000000000000BFD9ABCDF0123456BFE0000000000001C012AAAAAAAAAAAB3FE55 5555555554FBFD901E573AC901EBFE0000000000001C012AAAAAAAAAAAB3FF55555555 55552BFD8277166054F43BFE0000000000001C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCB FD71C71C71C71C7BFE0000000000001C012AAAAAAAAAAAB4005555555555553BFD5E0E 696F1F7A8BFE0000000000001C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFD474CFD585E 0E6BFE0000000000001C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFD2D82D82D82D83BFE 0000000000001C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFD10AFF9EE8DD7EBFE000000 0000001C012AAAAAAAAAAAB4015555555555554BFCE1A8C536FE1A9BFE000000000000 1C012AAAAAAAAAAAB4017FFFFFFFFFFFFBFC9BE02468ACF13BFE0000000000001C012A AAAAAAAAAAB401AAAAAAAAAAAAABFC5006117228338BFE0000000000001C012AAAAAAA AAAAB401D555555555555BFBFC3518A6DFC33BFE0000000000001C012AAAAAAAAAAAB4 020000000000000BFB4C3B2A1907F6ABFE0000000000001C012AAAAAAAAAAAB4021555 555555555BFA203CAE7592039BFE0000000000001C012AAAAAAAAAAAB4022AAAAAAAAA AAA3F8C10AFF9EE8DAFBFE0000000000001C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FB 0C83FB72EA618BFE0000000000001C010000000000000C024000000000000BFCBBBBBB BBBBBBDBFE0000000000001C010000000000000C022AAAAAAAAAAABBFD00C22E450672 7BFE0000000000001C010000000000000C021555555555556BFD209DC598153D0BFE00 00000000001C010000000000000C020000000000001BFD3D70A3D70A3D7BFE00000000 00001C010000000000000C01D555555555557BFD573AC901E573ABFE0000000000001C 010000000000000C01AAAAAAAAAAAACBFD6DFC3518A6DFDBFE0000000000001C010000 000000000C018000000000001BFD81B4E81B4E81BBFE0000000000001C010000000000 000C015555555555556BFD9264E209DC598BFE0000000000001C010000000000000C01 2AAAAAAAAAAABBFDA00C22E450673BFE0000000000001C010000000000000C01000000 0000000BFDAAAAAAAAAAAABBFE0000000000001C010000000000000C00AAAAAAAAAAAA BBFDB240795CEB241BFE0000000000001C010000000000000C005555555555556BFDB6 CD8EFB11D34BFE0000000000001C010000000000000C000000000000001BFDB851EB85 1EB85BFE0000000000001C010000000000000BFF5555555555558BFDB6CD8EFB11D34B FE0000000000001C010000000000000BFE555555555555BBFDB240795CEB241BFE0000 000000001C010000000000000BCC8000000000000BFDAAAAAAAAAAAABBFE0000000000 001C0100000000000003FE555555555554FBFDA00C22E450673BFE0000000000001C01 00000000000003FF5555555555552BFD9264E209DC598BFE0000000000001C01000000 00000003FFFFFFFFFFFFFFCBFD81B4E81B4E81CBFE0000000000001C01000000000000 04005555555555553BFD6DFC3518A6DFDBFE0000000000001C010000000000000400AA AAAAAAAAAA8BFD573AC901E573BBFE0000000000001C010000000000000400FFFFFFFF FFFFDBFD3D70A3D70A3D8BFE0000000000001C0100000000000004012AAAAAAAAAAA9B FD209DC598153D3BFE0000000000001C0100000000000004015555555555554BFD00C2 2E4506729BFE0000000000001C0100000000000004017FFFFFFFFFFFFBFCBBBBBBBBBB BBDBFE0000000000001C010000000000000401AAAAAAAAAAAAABFC6FE1A8C536FE2BFE 0000000000001C010000000000000401D555555555555BFC1DF623A67EAC3BFE000000 0000001C0100000000000004020000000000000BFB8BF258BF258BEBFE000000000000 1C0100000000000004021555555555555BFA9FAB0BC1CD2E1BFE0000000000001C0100 000000000004022AAAAAAAAAAAABF5E573AC901E788BFE0000000000001C0100000000 000004023FFFFFFFFFFFF3FA9999999999988BFE0000000000001C00AAAAAAAAAAAABC 024000000000000BFCD27D27D27D27DBFE0000000000001C00AAAAAAAAAAAABC022AAA AAAAAAAABBFD0C22E45067287BFE0000000000001C00AAAAAAAAAAAABC021555555555 556BFD2BFE7BA375F30BFE0000000000001C00AAAAAAAAAAAABC020000000000001BFD 48D159E26AF37BFE0000000000001C00AAAAAAAAAAAABC01D555555555557BFD629B7F 0D4629ABFE0000000000001C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFD795CEB240795 DBFE0000000000001C00AAAAAAAAAAAABC018000000000001BFD8D159E26AF37BBFE00 00000000001C00AAAAAAAAAAAABC015555555555556BFD9DC598153D0F8BFE00000000 00001C00AAAAAAAAAAAABC012AAAAAAAAAAABBFDAB6CD8EFB11D3BFE0000000000001C 00AAAAAAAAAAAABC010000000000000BFDB60B60B60B60BBFE0000000000001C00AAAA AAAAAAAABC00AAAAAAAAAAAABBFDBDA12F684BDA1BFE0000000000001C00AAAAAAAAAA AABC005555555555556BFDC22E450672894BFE0000000000001C00AAAAAAAAAAAABC00 0000000000001BFDC3B2A1907F6E5BFE0000000000001C00AAAAAAAAAAAABBFF555555 5555558BFDC22E450672894BFE0000000000001C00AAAAAAAAAAAABBFE555555555555 BBFDBDA12F684BDA1BFE0000000000001C00AAAAAAAAAAAABBCC8000000000000BFDB6 0B60B60B60BBFE0000000000001C00AAAAAAAAAAAAB3FE555555555554FBFDAB6CD8EF B11D3BFE0000000000001C00AAAAAAAAAAAAB3FF5555555555552BFD9DC598153D0F8B FE0000000000001C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD8D159E26AF37CBFE0000 000000001C00AAAAAAAAAAAAB4005555555555553BFD795CEB240795DBFE0000000000 001C00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFD629B7F0D4629BBFE0000000000001C00 AAAAAAAAAAAAB400FFFFFFFFFFFFDBFD48D159E26AF38BFE0000000000001C00AAAAAA AAAAAAB4012AAAAAAAAAAA9BFD2BFE7BA375F33BFE0000000000001C00AAAAAAAAAAAA B4015555555555554BFD0C22E45067289BFE0000000000001C00AAAAAAAAAAAAB4017F FFFFFFFFFFFBFCD27D27D27D27DBFE0000000000001C00AAAAAAAAAAAAB401AAAAAAAA AAAAABFC86A314DBF86A2BFE0000000000001C00AAAAAAAAAAAAB401D555555555555B FC34B78FBD40183BFE0000000000001C00AAAAAAAAAAAAB4020000000000000BFBB975 30ECA863EBFE0000000000001C00AAAAAAAAAAAAB4021555555555555BFAFAB0BC1CD2 DE1BFE0000000000001C00AAAAAAAAAAAAB4022AAAAAAAAAAAABF8A8C536FE1A8F1BFE 0000000000001C00AAAAAAAAAAAAB4023FFFFFFFFFFFF3FA3E93E93E93E88BFE000000 0000001C005555555555556C024000000000000BFCE02468ACF1359BFE000000000000 1C005555555555556C022AAAAAAAAAAABBFD12F684BDA12F5BFE0000000000001C0055 55555555556C021555555555556BFD32D21C10AFF9EBFE0000000000001C0055555555 55556C020000000000001BFD4FA4FA4FA4FA5BFE0000000000001C005555555555556C 01D555555555557BFD696F1F7A80308BFE0000000000001C005555555555556C01AAAA AAAAAAAACBFD80308B91419CBBFE0000000000001C005555555555556C018000000000 001BFD93E93E93E93E9BFE0000000000001C005555555555556C015555555555556BFD A499388277165BFE0000000000001C005555555555556C012AAAAAAAAAAABBFDB24079 5CEB241BFE0000000000001C005555555555556C010000000000000BFDBCDF01234567 9BFE0000000000001C005555555555556C00AAAAAAAAAAAABBFDC474CFD585E0FBFE00 00000000001C005555555555556C005555555555556BFDC901E573AC902BFE00000000 00001C005555555555556C000000000000001BFDCA8641FDB9753BFE0000000000001C 005555555555556BFF5555555555558BFDC901E573AC902BFE0000000000001C005555 555555556BFE555555555555BBFDC474CFD585E0FBFE0000000000001C005555555555 556BCC8000000000000BFDBCDF012345679BFE0000000000001C0055555555555563FE 555555555554FBFDB240795CEB241BFE0000000000001C0055555555555563FF555555 5555552BFDA499388277166BFE0000000000001C0055555555555563FFFFFFFFFFFFFF CBFD93E93E93E93EABFE0000000000001C0055555555555564005555555555553BFD80 308B91419CBBFE0000000000001C005555555555556400AAAAAAAAAAAA8BFD696F1F7A 80309BFE0000000000001C005555555555556400FFFFFFFFFFFFDBFD4FA4FA4FA4FA6B FE0000000000001C0055555555555564012AAAAAAAAAAA9BFD32D21C10AFFA1BFE0000 000000001C0055555555555564015555555555554BFD12F684BDA12F7BFE0000000000 001C0055555555555564017FFFFFFFFFFFFBFCE02468ACF1359BFE0000000000001C00 5555555555556401AAAAAAAAAAAAABFC944A55B66C77EBFE0000000000001C00555555 5555556401D555555555555BFC425ED097B425FBFE0000000000001C00555555555555 64020000000000000BFBD4C3B2A1907F6BFE0000000000001C00555555555555640215 55555555555BFB18A6DFC3518A8BFE0000000000001C0055555555555564022AAAAAAA AAAAABF9419CA252ADB58BFE0000000000001C0055555555555564023FFFFFFFFFFFF3 FA07F6E5D4C3B18BFE0000000000001C000000000000001C024000000000000BFCE4B1 7E4B17E4DBFE0000000000001C000000000000001C022AAAAAAAAAAABBFD153D0F8CB4 86FBFE0000000000001C000000000000001C021555555555556BFD3518A6DFC3518BFE 0000000000001C000000000000001C020000000000001BFD51EB851EB851FBFE000000 0000001C000000000000001C01D555555555557BFD6BB5AA4993882BFE000000000000 1C000000000000001C01AAAAAAAAAAAACBFD8277166054F45BFE0000000000001C0000 00000000001C018000000000001BFD962FC962FC963BFE0000000000001C0000000000 00001C015555555555556BFDA6DFC3518A6DFBFE0000000000001C000000000000001C 012AAAAAAAAAAABBFDB487042BFE7BBBFE0000000000001C000000000000001C010000 000000000BFDBF258BF258BF3BFE0000000000001C000000000000001C00AAAAAAAAAA AABBFDC6BB5AA499389BFE0000000000001C000000000000001C005555555555556BFD CB487042BFE7CBFE0000000000001C000000000000001C000000000000001BFDCCCCCC CCCCCCDBFE0000000000001C000000000000001BFF5555555555558BFDCB487042BFE7 CBFE0000000000001C000000000000001BFE555555555555BBFDC6BB5AA499389BFE00 00000000001C000000000000001BCC8000000000000BFDBF258BF258BF3BFE00000000 00001C0000000000000013FE555555555554FBFDB487042BFE7BBBFE0000000000001C 0000000000000013FF5555555555552BFDA6DFC3518A6E0BFE0000000000001C000000 0000000013FFFFFFFFFFFFFFCBFD962FC962FC964BFE0000000000001C000000000000 0014005555555555553BFD8277166054F45BFE0000000000001C000000000000001400 AAAAAAAAAAAA8BFD6BB5AA4993883BFE0000000000001C000000000000001400FFFFFF FFFFFFDBFD51EB851EB8520BFE0000000000001C0000000000000014012AAAAAAAAAAA 9BFD3518A6DFC351BBFE0000000000001C0000000000000014015555555555554BFD15 3D0F8CB4871BFE0000000000001C0000000000000014017FFFFFFFFFFFFBFCE4B17E4B 17E4DBFE0000000000001C000000000000001401AAAAAAAAAAAAABFC98D76B5493272B FE0000000000001C000000000000001401D555555555555BFC46EBE635DAD53BFE0000 000000001C0000000000000014020000000000000BFBDDDDDDDDDDDDEBFE0000000000 001C0000000000000014021555555555555BFB21C10AFF9EE90BFE0000000000001C00 00000000000014022AAAAAAAAAAAABF966054F43E32F8BFE0000000000001C00000000 00000014023FFFFFFFFFFFF3F9EB851EB851E90BFE0000000000001BFF555555555555 8C024000000000000BFCE02468ACF1359BFE0000000000001BFF5555555555558C022A AAAAAAAAAABBFD12F684BDA12F5BFE0000000000001BFF5555555555558C0215555555 55556BFD32D21C10AFF9EBFE0000000000001BFF5555555555558C020000000000001B FD4FA4FA4FA4FA5BFE0000000000001BFF5555555555558C01D555555555557BFD696F 1F7A80308BFE0000000000001BFF5555555555558C01AAAAAAAAAAAACBFD80308B9141 9CBBFE0000000000001BFF5555555555558C018000000000001BFD93E93E93E93E9BFE 0000000000001BFF5555555555558C015555555555556BFDA499388277165BFE000000 0000001BFF5555555555558C012AAAAAAAAAAABBFDB240795CEB241BFE000000000000 1BFF5555555555558C010000000000000BFDBCDF012345679BFE0000000000001BFF55 55555555558C00AAAAAAAAAAAABBFDC474CFD585E0FBFE0000000000001BFF55555555 55558C005555555555556BFDC901E573AC902BFE0000000000001BFF5555555555558C 000000000000001BFDCA8641FDB9753BFE0000000000001BFF5555555555558BFF5555 555555558BFDC901E573AC902BFE0000000000001BFF5555555555558BFE5555555555 55BBFDC474CFD585E0FBFE0000000000001BFF5555555555558BCC8000000000000BFD BCDF012345679BFE0000000000001BFF55555555555583FE555555555554FBFDB24079 5CEB241BFE0000000000001BFF55555555555583FF5555555555552BFDA49938827716 6BFE0000000000001BFF55555555555583FFFFFFFFFFFFFFCBFD93E93E93E93EABFE00 00000000001BFF55555555555584005555555555553BFD80308B91419CBBFE00000000 00001BFF5555555555558400AAAAAAAAAAAA8BFD696F1F7A80309BFE0000000000001B FF5555555555558400FFFFFFFFFFFFDBFD4FA4FA4FA4FA6BFE0000000000001BFF5555 5555555584012AAAAAAAAAAA9BFD32D21C10AFFA1BFE0000000000001BFF5555555555 5584015555555555554BFD12F684BDA12F7BFE0000000000001BFF5555555555558401 7FFFFFFFFFFFFBFCE02468ACF1359BFE0000000000001BFF5555555555558401AAAAAA AAAAAAABFC944A55B66C77EBFE0000000000001BFF5555555555558401D55555555555 5BFC425ED097B425FBFE0000000000001BFF55555555555584020000000000000BFBD4 C3B2A1907F6BFE0000000000001BFF55555555555584021555555555555BFB18A6DFC3 518A8BFE0000000000001BFF55555555555584022AAAAAAAAAAAABF9419CA252ADB58B FE0000000000001BFF55555555555584023FFFFFFFFFFFF3FA07F6E5D4C3B18BFE0000 000000001BFE555555555555BC024000000000000BFCD27D27D27D27DBFE0000000000 001BFE555555555555BC022AAAAAAAAAAABBFD0C22E45067289BFE0000000000001BFE 555555555555BC021555555555556BFD2BFE7BA375F32BFE0000000000001BFE555555 555555BC020000000000001BFD48D159E26AF37BFE0000000000001BFE555555555555 BC01D555555555557BFD629B7F0D4629CBFE0000000000001BFE555555555555BC01AA AAAAAAAAAACBFD795CEB240795DBFE0000000000001BFE555555555555BC0180000000 00001BFD8D159E26AF37DBFE0000000000001BFE555555555555BC015555555555556B FD9DC598153D0F9BFE0000000000001BFE555555555555BC012AAAAAAAAAAABBFDAB6C D8EFB11D4BFE0000000000001BFE555555555555BC010000000000000BFDB60B60B60B 60CBFE0000000000001BFE555555555555BC00AAAAAAAAAAAABBFDBDA12F684BDA2BFE 0000000000001BFE555555555555BC005555555555556BFDC22E450672895BFE000000 0000001BFE555555555555BC000000000000001BFDC3B2A1907F6E6BFE000000000000 1BFE555555555555BBFF5555555555558BFDC22E450672895BFE0000000000001BFE55 5555555555BBFE555555555555BBFDBDA12F684BDA2BFE0000000000001BFE55555555 5555BBCC8000000000000BFDB60B60B60B60CBFE0000000000001BFE555555555555B3 FE555555555554FBFDAB6CD8EFB11D4BFE0000000000001BFE555555555555B3FF5555 555555552BFD9DC598153D0F9BFE0000000000001BFE555555555555B3FFFFFFFFFFFF FFCBFD8D159E26AF37DBFE0000000000001BFE555555555555B4005555555555553BFD 795CEB240795EBFE0000000000001BFE555555555555B400AAAAAAAAAAAA8BFD629B7F 0D4629CBFE0000000000001BFE555555555555B400FFFFFFFFFFFFDBFD48D159E26AF3 9BFE0000000000001BFE555555555555B4012AAAAAAAAAAA9BFD2BFE7BA375F34BFE00 00000000001BFE555555555555B4015555555555554BFD0C22E4506728ABFE00000000 00001BFE555555555555B4017FFFFFFFFFFFFBFCD27D27D27D27FBFE0000000000001B FE555555555555B401AAAAAAAAAAAAABFC86A314DBF86A4BFE0000000000001BFE5555 55555555B401D555555555555BFC34B78FBD40185BFE0000000000001BFE5555555555 55B4020000000000000BFBB97530ECA8642BFE0000000000001BFE555555555555B402 1555555555555BFAFAB0BC1CD2DE9BFE0000000000001BFE555555555555B4022AAAAA AAAAAAABF8A8C536FE1A911BFE0000000000001BFE555555555555B4023FFFFFFFFFFF F3FA3E93E93E93E80BFE0000000000001BCC8000000000000C024000000000000BFCBB BBBBBBBBBBDBFE0000000000001BCC8000000000000C022AAAAAAAAAAABBFD00C22E45 06727BFE0000000000001BCC8000000000000C021555555555556BFD209DC598153D0B FE0000000000001BCC8000000000000C020000000000001BFD3D70A3D70A3D7BFE0000 000000001BCC8000000000000C01D555555555557BFD573AC901E573ABFE0000000000 001BCC8000000000000C01AAAAAAAAAAAACBFD6DFC3518A6DFDBFE0000000000001BCC 8000000000000C018000000000001BFD81B4E81B4E81BBFE0000000000001BCC800000 0000000C015555555555556BFD9264E209DC598BFE0000000000001BCC800000000000 0C012AAAAAAAAAAABBFDA00C22E450673BFE0000000000001BCC8000000000000C0100 00000000000BFDAAAAAAAAAAAABBFE0000000000001BCC8000000000000C00AAAAAAAA AAAABBFDB240795CEB241BFE0000000000001BCC8000000000000C005555555555556B FDB6CD8EFB11D34BFE0000000000001BCC8000000000000C000000000000001BFDB851 EB851EB85BFE0000000000001BCC8000000000000BFF5555555555558BFDB6CD8EFB11 D34BFE0000000000001BCC8000000000000BFE555555555555BBFDB240795CEB241BFE 0000000000001BCC8000000000000BCC8000000000000BFDAAAAAAAAAAAABBFE000000 0000001BCC80000000000003FE555555555554FBFDA00C22E450673BFE000000000000 1BCC80000000000003FF5555555555552BFD9264E209DC598BFE0000000000001BCC80 000000000003FFFFFFFFFFFFFFCBFD81B4E81B4E81CBFE0000000000001BCC80000000 000004005555555555553BFD6DFC3518A6DFDBFE0000000000001BCC80000000000004 00AAAAAAAAAAAA8BFD573AC901E573BBFE0000000000001BCC8000000000000400FFFF FFFFFFFFDBFD3D70A3D70A3D8BFE0000000000001BCC80000000000004012AAAAAAAAA AA9BFD209DC598153D3BFE0000000000001BCC80000000000004015555555555554BFD 00C22E4506729BFE0000000000001BCC80000000000004017FFFFFFFFFFFFBFCBBBBBB BBBBBBDBFE0000000000001BCC8000000000000401AAAAAAAAAAAAABFC6FE1A8C536FE 2BFE0000000000001BCC8000000000000401D555555555555BFC1DF623A67EAC3BFE00 00000000001BCC80000000000004020000000000000BFB8BF258BF258BEBFE00000000 00001BCC80000000000004021555555555555BFA9FAB0BC1CD2E1BFE0000000000001B CC80000000000004022AAAAAAAAAAAABF5E573AC901E788BFE0000000000001BCC8000 0000000004023FFFFFFFFFFFF3FA9999999999988BFE00000000000013FE5555555555 54FC024000000000000BFC9BE02468ACF15BFE00000000000013FE555555555554FC02 2AAAAAAAAAAABBFCE1A8C536FE1A6BFE00000000000013FE555555555554FC02155555 5555556BFD10AFF9EE8DD7CBFE00000000000013FE555555555554FC02000000000000 1BFD2D82D82D82D83BFE00000000000013FE555555555554FC01D555555555557BFD47 4CFD585E0E6BFE00000000000013FE555555555554FC01AAAAAAAAAAAACBFD5E0E696F 1F7A8BFE00000000000013FE555555555554FC018000000000001BFD71C71C71C71C7B FE00000000000013FE555555555554FC015555555555556BFD8277166054F44BFE0000 0000000013FE555555555554FC012AAAAAAAAAAABBFD901E573AC901FBFE0000000000 0013FE555555555554FC010000000000000BFD9ABCDF0123457BFE00000000000013FE 555555555554FC00AAAAAAAAAAAABBFDA252ADB363BEDBFE00000000000013FE555555 555554FC005555555555556BFDA6DFC3518A6E0BFE00000000000013FE555555555554 FC000000000000001BFDA8641FDB97531BFE00000000000013FE555555555554FBFF55 55555555558BFDA6DFC3518A6E0BFE00000000000013FE555555555554FBFE55555555 5555BBFDA252ADB363BEDBFE00000000000013FE555555555554FBCC8000000000000B FD9ABCDF0123457BFE00000000000013FE555555555554F3FE555555555554FBFD901E 573AC901FBFE00000000000013FE555555555554F3FF5555555555552BFD8277166054 F44BFE00000000000013FE555555555554F3FFFFFFFFFFFFFFCBFD71C71C71C71C8BFE 00000000000013FE555555555554F4005555555555553BFD5E0E696F1F7A9BFE000000 00000013FE555555555554F400AAAAAAAAAAAA8BFD474CFD585E0E7BFE000000000000 13FE555555555554F400FFFFFFFFFFFFDBFD2D82D82D82D84BFE00000000000013FE55 5555555554F4012AAAAAAAAAAA9BFD10AFF9EE8DD7FBFE00000000000013FE55555555 5554F4015555555555554BFCE1A8C536FE1ABBFE00000000000013FE555555555554F4 017FFFFFFFFFFFFBFC9BE02468ACF15BFE00000000000013FE555555555554F401AAAA AAAAAAAAABFC500611722833ABFE00000000000013FE555555555554F401D555555555 555BFBFC3518A6DFC37BFE00000000000013FE555555555554F4020000000000000BFB 4C3B2A1907F6EBFE00000000000013FE555555555554F4021555555555555BFA203CAE 7592041BFE00000000000013FE555555555554F4022AAAAAAAAAAAA3F8C10AFF9EE8D8 FBFE00000000000013FE555555555554F4023FFFFFFFFFFFF3FB0C83FB72EA614BFE00 000000000013FF5555555555552C024000000000000BFC72EA61D950C85BFE00000000 000013FF5555555555552C022AAAAAAAAAAABBFCB8B302A7A1F16BFE00000000000013 FF5555555555552C021555555555556BFCF86A314DBF869BFE00000000000013FF5555 555555552C020000000000001BFD1907F6E5D4C3ABFE00000000000013FF5555555555 552C01D555555555557BFD32D21C10AFF9EBFE00000000000013FF5555555555552C01 AAAAAAAAAAAACBFD4993882771660BFE00000000000013FF5555555555552C01800000 0000001BFD5D4C3B2A1907FBFE00000000000013FF5555555555552C01555555555555 6BFD6DFC3518A6DFCBFE00000000000013FF5555555555552C012AAAAAAAAAAABBFD7B A375F31AED7BFE00000000000013FF5555555555552C010000000000000BFD8641FDB9 7530FBFE00000000000013FF5555555555552C00AAAAAAAAAAAABBFD8DD7CC6BB5AA5B FE00000000000013FF5555555555552C005555555555556BFD9264E209DC598BFE0000 0000000013FF5555555555552C000000000000001BFD93E93E93E93E9BFE0000000000 0013FF5555555555552BFF5555555555558BFD9264E209DC598BFE00000000000013FF 5555555555552BFE555555555555BBFD8DD7CC6BB5AA5BFE00000000000013FF555555 5555552BCC8000000000000BFD8641FDB97530FBFE00000000000013FF555555555555 23FE555555555554FBFD7BA375F31AED7BFE00000000000013FF55555555555523FF55 55555555552BFD6DFC3518A6DFCBFE00000000000013FF55555555555523FFFFFFFFFF FFFFCBFD5D4C3B2A19080BFE00000000000013FF55555555555524005555555555553B FD4993882771661BFE00000000000013FF5555555555552400AAAAAAAAAAAA8BFD32D2 1C10AFF9FBFE00000000000013FF5555555555552400FFFFFFFFFFFFDBFD1907F6E5D4 C3CBFE00000000000013FF55555555555524012AAAAAAAAAAA9BFCF86A314DBF86EBFE 00000000000013FF55555555555524015555555555554BFCB8B302A7A1F1BBFE000000 00000013FF55555555555524017FFFFFFFFFFFFBFC72EA61D950C85BFE000000000000 13FF5555555555552401AAAAAAAAAAAAABFC27104EE2CC0AABFE00000000000013FF55 55555555552401D555555555555BFBAA49938827717BFE00000000000013FF55555555 555524020000000000000BFAF49F49F49F49CBFE00000000000013FF55555555555524 021555555555555BF8F19690E085803BFE00000000000013FF55555555555524022AAA AAAAAAAAA3FA1419CA252ADA4BFE00000000000013FF55555555555524023FFFFFFFFF FFF3FB5E6F8091A2B36BFE00000000000013FFFFFFFFFFFFFFCC024000000000000BFC 40DA740DA7411BFE00000000000013FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFC86A314 DBF86A4BFE00000000000013FFFFFFFFFFFFFFCC021555555555556BFCC65A438215FF 5BFE00000000000013FFFFFFFFFFFFFFCC020000000000001BFD0000000000000BFE00 000000000013FFFFFFFFFFFFFFCC01D555555555557BFD19CA252ADB364BFE00000000 000013FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFD308B91419CA26BFE00000000000013 FFFFFFFFFFFFFFCC018000000000001BFD4444444444445BFE00000000000013FFFFFF FFFFFFFFCC015555555555556BFD54F43E32D21C2BFE00000000000013FFFFFFFFFFFF FFCC012AAAAAAAAAAABBFD629B7F0D4629DBFE00000000000013FFFFFFFFFFFFFFCC01 0000000000000BFD6D3A06D3A06D5BFE00000000000013FFFFFFFFFFFFFFCC00AAAAAA AAAAAABBFD74CFD585E0E6BBFE00000000000013FFFFFFFFFFFFFFCC00555555555555 6BFD795CEB240795EBFE00000000000013FFFFFFFFFFFFFFCC000000000000001BFD7A E147AE147AFBFE00000000000013FFFFFFFFFFFFFFCBFF5555555555558BFD795CEB24 0795EBFE00000000000013FFFFFFFFFFFFFFCBFE555555555555BBFD74CFD585E0E6BB FE00000000000013FFFFFFFFFFFFFFCBCC8000000000000BFD6D3A06D3A06D5BFE0000 0000000013FFFFFFFFFFFFFFC3FE555555555554FBFD629B7F0D4629DBFE0000000000 0013FFFFFFFFFFFFFFC3FF5555555555552BFD54F43E32D21C2BFE00000000000013FF FFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFD4444444444446BFE00000000000013FFFFFFFF FFFFFFC4005555555555553BFD308B91419CA27BFE00000000000013FFFFFFFFFFFFFF C400AAAAAAAAAAAA8BFD19CA252ADB365BFE00000000000013FFFFFFFFFFFFFFC400FF FFFFFFFFFFDBFD0000000000002BFE00000000000013FFFFFFFFFFFFFFC4012AAAAAAA AAAA9BFCC65A438215FFABFE00000000000013FFFFFFFFFFFFFFC4015555555555554B FC86A314DBF86A7BFE00000000000013FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFC40DA 740DA7411BFE00000000000013FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFBEA00C22E45 06DBFE00000000000013FFFFFFFFFFFFFFC401D555555555555BFB4629B7F0D462FBFE 00000000000013FFFFFFFFFFFFFFC4020000000000000BFA2C5F92C5F92CCBFE000000 00000013FFFFFFFFFFFFFFC40215555555555553F82F684BDA12F2DBFE000000000000 13FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3FADC598153D0F78BFE00000000000013FFFF FFFFFFFFFFC4023FFFFFFFFFFFF3FBC28F5C28F5C1EBFE000000000000140055555555 55553C024000000000000BFC05B05B05B05B5BFE00000000000014005555555555553C 022AAAAAAAAAAABBFC4B78FBD401848BFE00000000000014005555555555553C021555 555555556BFC8B302A7A1F199BFE00000000000014005555555555553C020000000000 001BFCC4D5E6F8091A4BFE00000000000014005555555555553C01D555555555557BFC F86A314DBF86CBFE00000000000014005555555555553C01AAAAAAAAAAAACBFD12F684 BDA12F8BFE00000000000014005555555555553C018000000000001BFD26AF37C048D1 7BFE00000000000014005555555555553C015555555555556BFD375F31AED6A94BFE00 000000000014005555555555553C012AAAAAAAAAAABBFD450672894AB6FBFE00000000 000014005555555555553C010000000000000BFD4FA4FA4FA4FA7BFE00000000000014 005555555555553C00AAAAAAAAAAAABBFD573AC901E573DBFE00000000000014005555 555555553C005555555555556BFD5BC7DEA00C230BFE00000000000014005555555555 553C000000000000001BFD5D4C3B2A19081BFE00000000000014005555555555553BFF 5555555555558BFD5BC7DEA00C230BFE00000000000014005555555555553BFE555555 555555BBFD573AC901E573DBFE00000000000014005555555555553BCC800000000000 0BFD4FA4FA4FA4FA7BFE000000000000140055555555555533FE555555555554FBFD45 0672894AB6FBFE000000000000140055555555555533FF5555555555552BFD375F31AE D6A94BFE000000000000140055555555555533FFFFFFFFFFFFFFCBFD26AF37C048D18B FE000000000000140055555555555534005555555555553BFD12F684BDA12F9BFE0000 0000000014005555555555553400AAAAAAAAAAAA8BFCF86A314DBF86FBFE0000000000 0014005555555555553400FFFFFFFFFFFFDBFCC4D5E6F8091A8BFE0000000000001400 55555555555534012AAAAAAAAAAA9BFC8B302A7A1F19EBFE0000000000001400555555 55555534015555555555554BFC4B78FBD40184BBFE0000000000001400555555555555 34017FFFFFFFFFFFFBFC05B05B05B05B6BFE00000000000014005555555555553401AA AAAAAAAAAAABFB73AC901E573B7BFE00000000000014005555555555553401D5555555 55555BFA9FAB0BC1CD2F1BFE000000000000140055555555555534020000000000000B F7FDB97530ECAE0BFE0000000000001400555555555555340215555555555553FA3882 77166053BBFE000000000000140055555555555534022AAAAAAAAAAAA3FB6480F2B9D6 474BFE000000000000140055555555555534023FFFFFFFFFFFF3FC1C71C71C71C6BBFE 0000000000001400AAAAAAAAAAAA8C024000000000000BFB82D82D82D82DDBFE000000 0000001400AAAAAAAAAAAA8C022AAAAAAAAAAABBFC0734B78FBD402BFE000000000000 1400AAAAAAAAAAAA8C021555555555556BFC46EBE635DAD53BFE0000000000001400AA AAAAAAAAAA8C020000000000001BFC8091A2B3C4D5EBFE0000000000001400AAAAAAAA AAAA8C01D555555555557BFCB425ED097B426BFE0000000000001400AAAAAAAAAAAA8C 01AAAAAAAAAAAACBFCE1A8C536FE1AABFE0000000000001400AAAAAAAAAAAA8C018000 000000001BFD048D159E26AF4BFE0000000000001400AAAAAAAAAAAA8C015555555555 556BFD153D0F8CB4871BFE0000000000001400AAAAAAAAAAAA8C012AAAAAAAAAAABBFD 22E450672894CBFE0000000000001400AAAAAAAAAAAA8C010000000000000BFD2D82D8 2D82D84BFE0000000000001400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFD3518A6DFC351 ABFE0000000000001400AAAAAAAAAAAA8C005555555555556BFD39A5BC7DEA00DBFE00 00000000001400AAAAAAAAAAAA8C000000000000001BFD3B2A1907F6E5EBFE00000000 00001400AAAAAAAAAAAA8BFF5555555555558BFD39A5BC7DEA00DBFE00000000000014 00AAAAAAAAAAAA8BFE555555555555BBFD3518A6DFC351ABFE0000000000001400AAAA AAAAAAAA8BCC8000000000000BFD2D82D82D82D84BFE0000000000001400AAAAAAAAAA AA83FE555555555554FBFD22E450672894CBFE0000000000001400AAAAAAAAAAAA83FF 5555555555552BFD153D0F8CB4871BFE0000000000001400AAAAAAAAAAAA83FFFFFFFF FFFFFFCBFD048D159E26AF5BFE0000000000001400AAAAAAAAAAAA8400555555555555 3BFCE1A8C536FE1ABBFE0000000000001400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFCB4 25ED097B429BFE0000000000001400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFC8091A2B3 C4D63BFE0000000000001400AAAAAAAAAAAA84012AAAAAAAAAAA9BFC46EBE635DAD57B FE0000000000001400AAAAAAAAAAAA84015555555555554BFC0734B78FBD406BFE0000 000000001400AAAAAAAAAAAA84017FFFFFFFFFFFFBFB82D82D82D82E1BFE0000000000 001400AAAAAAAAAAAA8401AAAAAAAAAAAAABFAD6480F2B9D656BFE0000000000001400 AAAAAAAAAAAA8401D555555555555BF91D33F561783B2BFE0000000000001400AAAAAA AAAAAA840200000000000003F9A2B3C4D5E6F78BFE0000000000001400AAAAAAAAAAAA 840215555555555553FB24C9C413B8B2ABFE0000000000001400AAAAAAAAAAAA84022A AAAAAAAAAAA3FBED097B425ED00BFE0000000000001400AAAAAAAAAAAA84023FFFFFFF FFFFF3FC60B60B60B60B1BFE0000000000001400FFFFFFFFFFFFDC024000000000000B FAD0369D0369D12BFE0000000000001400FFFFFFFFFFFFDC022AAAAAAAAAAABBFB73AC 901E573B0BFE0000000000001400FFFFFFFFFFFFDC021555555555556BFBF31AED6A92 652BFE0000000000001400FFFFFFFFFFFFDC020000000000001BFC3333333333334BFE 0000000000001400FFFFFFFFFFFFDC01D555555555557BFC66C77D88E99FCBFE000000 0000001400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFC944A55B66C780BFE000000000000 1400FFFFFFFFFFFFDC018000000000001BFCBBBBBBBBBBBBEBFE0000000000001400FF FFFFFFFFFFDC015555555555556BFCDD1BAF98D76B8BFE0000000000001400FFFFFFFF FFFFDC012AAAAAAAAAAABBFCF86A314DBF86DBFE0000000000001400FFFFFFFFFFFFDC 010000000000000BFD06D3A06D3A06FBFE0000000000001400FFFFFFFFFFFFDC00AAAA AAAAAAAABBFD0E696F1F7A805BFE0000000000001400FFFFFFFFFFFFDC005555555555 556BFD12F684BDA12F8BFE0000000000001400FFFFFFFFFFFFDC000000000000001BFD 147AE147AE149BFE0000000000001400FFFFFFFFFFFFDBFF5555555555558BFD12F684 BDA12F8BFE0000000000001400FFFFFFFFFFFFDBFE555555555555BBFD0E696F1F7A80 5BFE0000000000001400FFFFFFFFFFFFDBCC8000000000000BFD06D3A06D3A06FBFE00 00000000001400FFFFFFFFFFFFD3FE555555555554FBFCF86A314DBF86EBFE00000000 00001400FFFFFFFFFFFFD3FF5555555555552BFCDD1BAF98D76B9BFE00000000000014 00FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFCBBBBBBBBBBBC0BFE0000000000001400FFFF FFFFFFFFD4005555555555553BFC944A55B66C782BFE0000000000001400FFFFFFFFFF FFD400AAAAAAAAAAAA8BFC66C77D88E9A00BFE0000000000001400FFFFFFFFFFFFD400 FFFFFFFFFFFFDBFC3333333333339BFE0000000000001400FFFFFFFFFFFFD4012AAAAA AAAAAA9BFBF31AED6A92659BFE0000000000001400FFFFFFFFFFFFD401555555555555 4BFB73AC901E573B7BFE0000000000001400FFFFFFFFFFFFD4017FFFFFFFFFFFFBFAD0 369D0369D19BFE0000000000001400FFFFFFFFFFFFD401AAAAAAAAAAAAABF9419CA252 ADB5BBFE0000000000001400FFFFFFFFFFFFD401D5555555555553F94DBF86A314D9EB FE0000000000001400FFFFFFFFFFFFD40200000000000003FB0369D0369D032BFE0000 000000001400FFFFFFFFFFFFD40215555555555553FBBF86A314DBF7EBFE0000000000 001400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FC43E32D21C10AABFE0000000000001400 FFFFFFFFFFFFD4023FFFFFFFFFFFF3FCAE147AE147ADBBFE00000000000014012AAAAA AAAAAA9C024000000000000BF8D950C83FB7329BFE00000000000014012AAAAAAAAAAA 9C022AAAAAAAAAAABBFA8D76B54932718BFE00000000000014012AAAAAAAAAAA9C0215 55555555556BFB4629B7F0D462EBFE00000000000014012AAAAAAAAAAA9C0200000000 00001BFBB97530ECA8643BFE00000000000014012AAAAAAAAAAA9C01D555555555557B FC104EE2CC0A9EABFE00000000000014012AAAAAAAAAAA9C01AAAAAAAAAAAACBFC3DD1 BAF98D76EBFE00000000000014012AAAAAAAAAAA9C018000000000001BFC654320FEDC BACBFE00000000000014012AAAAAAAAAAA9C015555555555556BFC86A314DBF86A6BFE 00000000000014012AAAAAAAAAAA9C012AAAAAAAAAAABBFCA1F19690E085BBFE000000 00000014012AAAAAAAAAAA9C010000000000000BFCB72EA61D950CCBFE000000000000 14012AAAAAAAAAAA9C00AAAAAAAAAAAABBFCC65A438215FF8BFE00000000000014012A AAAAAAAAAA9C005555555555556BFCCF746EBE635DFBFE00000000000014012AAAAAAA AAAA9C000000000000001BFCD27D27D27D281BFE00000000000014012AAAAAAAAAAA9B FF5555555555558BFCCF746EBE635DEBFE00000000000014012AAAAAAAAAAA9BFE5555 55555555BBFCC65A438215FF8BFE00000000000014012AAAAAAAAAAA9BCC8000000000 000BFCB72EA61D950CCBFE00000000000014012AAAAAAAAAAA93FE555555555554FBFC A1F19690E085CBFE00000000000014012AAAAAAAAAAA93FF5555555555552BFC86A314 DBF86A7BFE00000000000014012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFC654320FEDCBA EBFE00000000000014012AAAAAAAAAAA94005555555555553BFC3DD1BAF98D770BFE00 000000000014012AAAAAAAAAAA9400AAAAAAAAAAAA8BFC104EE2CC0A9EEBFE00000000 000014012AAAAAAAAAAA9400FFFFFFFFFFFFDBFBB97530ECA864DBFE00000000000014 012AAAAAAAAAAA94012AAAAAAAAAAA9BFB4629B7F0D4635BFE00000000000014012AAA AAAAAAAA94015555555555554BFA8D76B54932726BFE00000000000014012AAAAAAAAA AA94017FFFFFFFFFFFFBF8D950C83FB7344BFE00000000000014012AAAAAAAAAAA9401 AAAAAAAAAAAAA3F9722833944A535BFE00000000000014012AAAAAAAAAAA9401D55555 55555553FB006117228338CBFE00000000000014012AAAAAAAAAAA9402000000000000 03FBB05B05B05B055BFE00000000000014012AAAAAAAAAAA940215555555555553FC36 3BEC474CFD1BFE00000000000014012AAAAAAAAAAA94022AAAAAAAAAAAA3FC9A5BC7DE A00BCBFE00000000000014012AAAAAAAAAAA94023FFFFFFFFFFFF3FD02468ACF13576B FE00000000000014015555555555554C0240000000000003FA07F6E5D4C3B1EBFE0000 0000000014015555555555554C022AAAAAAAAAAABBF5E573AC901E5F8BFE0000000000 0014015555555555554C021555555555556BFA0E0857FCF747BBFE0000000000001401 5555555555554C020000000000001BFAF49F49F49F4A6BFE0000000000001401555555 5555554C01D555555555557BFB617839A5BC7E4BFE0000000000001401555555555555 4C01AAAAAAAAAAAACBFBBC7DEA00C22ECBFE00000000000014015555555555554C0180 00000000001BFC05B05B05B05B3BFE00000000000014015555555555554C0155555555 55556BFC27104EE2CC0ADBFE00000000000014015555555555554C012AAAAAAAAAAABB FC425ED097B4262BFE00000000000014015555555555554C010000000000000BFC579B E02468AD3BFE00000000000014015555555555554C00AAAAAAAAAAAABBFC66C77D88E9 9FFBFE00000000000014015555555555554C005555555555556BFC6FE1A8C536FE6BFE 00000000000014015555555555554C000000000000001BFC72EA61D950C88BFE000000 00000014015555555555554BFF5555555555558BFC6FE1A8C536FE5BFE000000000000 14015555555555554BFE555555555555BBFC66C77D88E99FFBFE000000000000140155 55555555554BCC8000000000000BFC579BE02468AD3BFE000000000000140155555555 555543FE555555555554FBFC425ED097B4263BFE000000000000140155555555555543 FF5555555555552BFC27104EE2CC0AEBFE000000000000140155555555555543FFFFFF FFFFFFFFCBFC05B05B05B05B5BFE000000000000140155555555555544005555555555 553BFBBC7DEA00C22EFBFE00000000000014015555555555554400AAAAAAAAAAAA8BFB 617839A5BC7E9BFE00000000000014015555555555554400FFFFFFFFFFFFDBFAF49F49 F49F4B6BFE000000000000140155555555555544012AAAAAAAAAAA9BFA0E0857FCF748 6BFE000000000000140155555555555544015555555555554BF5E573AC901E84ABFE00 0000000000140155555555555544017FFFFFFFFFFFF3FA07F6E5D4C3B13BFE00000000 000014015555555555554401AAAAAAAAAAAAA3FB1BAF98D76B540BFE00000000000014 015555555555554401D5555555555553FBBF86A314DBF7EBFE00000000000014015555 55555555440200000000000003FC37C048D159E24BFE00000000000014015555555555 55440215555555555553FC95CEB240795CABFE00000000000014015555555555554402 2AAAAAAAAAAAA3FCF9EE8DD7CC6B5BFE000000000000140155555555555544023FFFFF FFFFFFF3FD320FEDCBA9873BFE00000000000014017FFFFFFFFFFFFC02400000000000 03FB555555555554FBFE00000000000014017FFFFFFFFFFFFC022AAAAAAAAAAAB3FA93 88277166050BFE00000000000014017FFFFFFFFFFFFC0215555555555563F92956D9B1 DF61ABFE00000000000014017FFFFFFFFFFFFC020000000000001BF847AE147AE1479B FE00000000000014017FFFFFFFFFFFFC01D555555555557BFA203CAE759203FBFE0000 0000000014017FFFFFFFFFFFFC01AAAAAAAAAAAACBFAD6480F2B9D64FBFE0000000000 0014017FFFFFFFFFFFFC018000000000001BFB3A06D3A06D3A4BFE0000000000001401 7FFFFFFFFFFFFC015555555555556BFB7CC6BB5AA4999BFE00000000000014017FFFFF FFFFFFFC012AAAAAAAAAAABBFBB363BEC474D03BFE00000000000014017FFFFFFFFFFF FC010000000000000BFBDDDDDDDDDDDE4BFE00000000000014017FFFFFFFFFFFFC00AA AAAAAAAAAABBFBFC3518A6DFC3BBFE00000000000014017FFFFFFFFFFFFC0055555555 55556BFC0734B78FBD405BFE00000000000014017FFFFFFFFFFFFC000000000000001B FC0A3D70A3D70A7BFE00000000000014017FFFFFFFFFFFFBFF5555555555558BFC0734 B78FBD404BFE00000000000014017FFFFFFFFFFFFBFE555555555555BBFBFC3518A6DF C3BBFE00000000000014017FFFFFFFFFFFFBCC8000000000000BFBDDDDDDDDDDDE5BFE 00000000000014017FFFFFFFFFFFF3FE555555555554FBFBB363BEC474D05BFE000000 00000014017FFFFFFFFFFFF3FF5555555555552BFB7CC6BB5AA499BBFE000000000000 14017FFFFFFFFFFFF3FFFFFFFFFFFFFFCBFB3A06D3A06D3A8BFE00000000000014017F FFFFFFFFFFF4005555555555553BFAD6480F2B9D658BFE00000000000014017FFFFFFF FFFFF400AAAAAAAAAAAA8BFA203CAE759204FBFE00000000000014017FFFFFFFFFFFF4 00FFFFFFFFFFFFDBF847AE147AE14C8BFE00000000000014017FFFFFFFFFFFF4012AAA AAAAAAAA93F92956D9B1DF5FBBFE00000000000014017FFFFFFFFFFFF4015555555555 5543FA9388277166042BFE00000000000014017FFFFFFFFFFFF4017FFFFFFFFFFFF3FB 555555555554CBFE00000000000014017FFFFFFFFFFFF401AAAAAAAAAAAAA3FBED097B 425ED02BFE00000000000014017FFFFFFFFFFFF401D5555555555553FC487042BFE7BA 0BFE00000000000014017FFFFFFFFFFFF40200000000000003FCA06D3A06D3A04BFE00 000000000014017FFFFFFFFFFFF40215555555555553FCFE7BA375F31ABBFE00000000 000014017FFFFFFFFFFFF4022AAAAAAAAAAAA3FD314DBF86A314BBFE00000000000014 017FFFFFFFFFFFF4023FFFFFFFFFFFF3FD6666666666663BFE0000000000001401AAAA AAAAAAAAAC0240000000000003FC1C71C71C71C6FBFE0000000000001401AAAAAAAAAA AAAC022AAAAAAAAAAAB3FBAD524C9C413B6BFE0000000000001401AAAAAAAAAAAAAC02 15555555555563FB2DE3EF5006114BFE0000000000001401AAAAAAAAAAAAAC02000000 00000013FA7530ECA8641FEBFE0000000000001401AAAAAAAAAAAAAC01D55555555555 73F94DBF86A314DB9BFE0000000000001401AAAAAAAAAAAAAC01AAAAAAAAAAAACBF5E5 73AC901E66CBFE0000000000001401AAAAAAAAAAAAAC018000000000001BF959E26AF3 7C057BFE0000000000001401AAAAAAAAAAAAAC015555555555556BFA327104EE2CC16B FE0000000000001401AAAAAAAAAAAAAC012AAAAAAAAAAABBFA9FAB0BC1CD2EABFE0000 000000001401AAAAAAAAAAAAAC010000000000000BFAF49F49F49F4ADBFE0000000000 001401AAAAAAAAAAAAAC00AAAAAAAAAAAABBFB18A6DFC3518ADBFE0000000000001401 AAAAAAAAAAAAAC005555555555556BFB2ADB363BEC47BBFE0000000000001401AAAAAA AAAAAAAC000000000000001BFB30ECA8641FDC0BFE0000000000001401AAAAAAAAAAAA ABFF5555555555558BFB2ADB363BEC47BBFE0000000000001401AAAAAAAAAAAAABFE55 5555555555BBFB18A6DFC3518AEBFE0000000000001401AAAAAAAAAAAAABCC80000000 00000BFAF49F49F49F4ADBFE0000000000001401AAAAAAAAAAAAA3FE555555555554FB FA9FAB0BC1CD2EDBFE0000000000001401AAAAAAAAAAAAA3FF5555555555552BFA3271 04EE2CC1ABFE0000000000001401AAAAAAAAAAAAA3FFFFFFFFFFFFFFCBF959E26AF37C 068BFE0000000000001401AAAAAAAAAAAAA4005555555555553BF5E573AC901E78CBFE 0000000000001401AAAAAAAAAAAAA400AAAAAAAAAAAA83F94DBF86A314D9CBFE000000 0000001401AAAAAAAAAAAAA400FFFFFFFFFFFFD3FA7530ECA8641EABFE000000000000 1401AAAAAAAAAAAAA4012AAAAAAAAAAA93FB2DE3EF500610DBFE0000000000001401AA AAAAAAAAAAA40155555555555543FBAD524C9C413AFBFE0000000000001401AAAAAAAA AAAAA4017FFFFFFFFFFFF3FC1C71C71C71C6DBFE0000000000001401AAAAAAAAAAAAA4 01AAAAAAAAAAAAA3FC684BDA12F6848BFE0000000000001401AAAAAAAAAAAAA401D555 5555555553FCBA375F31AED67BFE0000000000001401AAAAAAAAAAAAA4020000000000 0003FD091A2B3C4D5E6BFE0000000000001401AAAAAAAAAAAAA40215555555555553FD 38215FF3DD1B9BFE0000000000001401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FD6A314D BF86A2EBFE0000000000001401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FD9F49F49F49F4 7BFE0000000000001401D555555555555C0240000000000003FC97530ECA8641EBFE00 00000000001401D555555555555C022AAAAAAAAAAAB3FC518A6DFC3518BBFE00000000 00001401D555555555555C0215555555555563FC11D33F561783ABFE00000000000014 01D555555555555C0200000000000013FBB05B05B05B05EBFE0000000000001401D555 555555555C01D5555555555573FB49327104EE2CDBFE0000000000001401D555555555 555C01AAAAAAAAAAAAC3FADC598153D0F8BBFE0000000000001401D555555555555C01 80000000000013FA3E93E93E93E93BFE0000000000001401D555555555555C01555555 55555563F9722833944A550BFE0000000000001401D555555555555C012AAAAAAAAAAA B3F82F684BDA12F58BFE0000000000001401D555555555555C010000000000000BF523 456789ABDA0BFE0000000000001401D555555555555C00AAAAAAAAAAAABBF817228339 44A6FBFE0000000000001401D555555555555C005555555555556BF8A8C536FE1A8DEB FE0000000000001401D555555555555C000000000000001BF8D950C83FB7304BFE0000 000000001401D555555555555BFF5555555555558BF8A8C536FE1A8E0BFE0000000000 001401D555555555555BFE555555555555BBF81722833944A72BFE0000000000001401 D555555555555BCC8000000000000BF523456789ABDD2BFE0000000000001401D55555 55555553FE555555555554F3F82F684BDA12F48BFE0000000000001401D55555555555 53FF55555555555523F9722833944A54BBFE0000000000001401D5555555555553FFFF FFFFFFFFFFC3FA3E93E93E93E8BBFE0000000000001401D55555555555540055555555 555533FADC598153D0F82BFE0000000000001401D555555555555400AAAAAAAAAAAA83 FB49327104EE2C7BFE0000000000001401D555555555555400FFFFFFFFFFFFD3FBB05B 05B05B054BFE0000000000001401D5555555555554012AAAAAAAAAAA93FC11D33F5617 836BFE0000000000001401D55555555555540155555555555543FC518A6DFC35187BFE 0000000000001401D5555555555554017FFFFFFFFFFFF3FC97530ECA8641DBFE000000 0000001401D555555555555401AAAAAAAAAAAAA3FCE32D21C10AFF8BFE000000000000 1401D555555555555401D5555555555553FD1A8C536FE1A8BBFE0000000000001401D5 5555555555540200000000000003FD468ACF13579BEBFE0000000000001401D5555555 5555540215555555555553FD759203CAE7591BFE0000000000001401D5555555555554 022AAAAAAAAAAAA3FDA7A1F19690E06BFE0000000000001401D5555555555554023FFF FFFFFFFFF3FDDCBA98765431FBFE00000000000014020000000000000C024000000000 0003FD0DA740DA740DABFE00000000000014020000000000000C022AAAAAAAAAAAB3FC D585E0E696F20BFE00000000000014020000000000000C0215555555555563FC95CEB2 40795CFBFE00000000000014020000000000000C0200000000000013FC5C28F5C28F5C 4BFE00000000000014020000000000000C01D5555555555573FC2894AB6CD8EFCBFE00 000000000014020000000000000C01AAAAAAAAAAAAC3FBF623A67EAC2F0BFE00000000 000014020000000000000C0180000000000013FBA740DA740DA74BFE00000000000014 020000000000000C0155555555555563FB6480F2B9D647FBFE00000000000014020000 000000000C012AAAAAAAAAAAB3FB2DE3EF5006115BFE00000000000014020000000000 000C0100000000000003FB0369D0369D034BFE00000000000014020000000000000C00 AAAAAAAAAAAAB3FACA252ADB363BABFE00000000000014020000000000000C00555555 55555563FAA5BC7DEA00C1EBFE00000000000014020000000000000C00000000000000 13FA9999999999995BFE00000000000014020000000000000BFF55555555555583FAA5 BC7DEA00C1DBFE00000000000014020000000000000BFE555555555555B3FACA252ADB 363B9BFE00000000000014020000000000000BCC80000000000003FB0369D0369D033B FE000000000000140200000000000003FE555555555554F3FB2DE3EF5006113BFE0000 00000000140200000000000003FF55555555555523FB6480F2B9D647DBFE0000000000 00140200000000000003FFFFFFFFFFFFFFC3FBA740DA740DA70BFE0000000000001402 000000000000040055555555555533FBF623A67EAC2ECBFE0000000000001402000000 0000000400AAAAAAAAAAAA83FC2894AB6CD8EF8BFE0000000000001402000000000000 0400FFFFFFFFFFFFD3FC5C28F5C28F5BFBFE000000000000140200000000000004012A AAAAAAAAAA93FC95CEB240795CBBFE0000000000001402000000000000040155555555 555543FCD585E0E696F1CBFE000000000000140200000000000004017FFFFFFFFFFFF3 FD0DA740DA740D9BFE00000000000014020000000000000401AAAAAAAAAAAAA3FD3394 4A55B66C6BFE00000000000014020000000000000401D5555555555553FD5C8A0CE512 956BFE0000000000001402000000000000040200000000000003FD8888888888888BFE 0000000000001402000000000000040215555555555553FDB78FBD401845BBFE000000 000000140200000000000004022AAAAAAAAAAAA3FDE99FAB0BC1CD1BFE000000000000 140200000000000004023FFFFFFFFFFFF3FE0F5C28F5C28F5BFE000000000000140215 55555555555C0240000000000003FD54320FEDCBA97BFE000000000000140215555555 55555C022AAAAAAAAAAAB3FD314DBF86A314DBFE00000000000014021555555555555C 0215555555555563FD11722833944A5BFE00000000000014021555555555555C020000 0000000013FCE93E93E93E93EBFE00000000000014021555555555555C01D555555555 5573FCB5AA499388276BFE00000000000014021555555555555C01AAAAAAAAAAAAC3FC 88277166054F2BFE00000000000014021555555555555C0180000000000013FC60B60B 60B60B4BFE00000000000014021555555555555C0155555555555563FC3F5617839A5B ABFE00000000000014021555555555555C012AAAAAAAAAAAB3FC240795CEB2405BFE00 000000000014021555555555555C0100000000000003FC0ECA8641FDB94BFE00000000 000014021555555555555C00AAAAAAAAAAAAB3FBFF3DD1BAF98D1BFE00000000000014 021555555555555C0055555555555563FBED097B425ED03BFE00000000000014021555 555555555C0000000000000013FBE6F8091A2B3BEBFE00000000000014021555555555 555BFF55555555555583FBED097B425ED03BFE00000000000014021555555555555BFE 555555555555B3FBFF3DD1BAF98D0BFE00000000000014021555555555555BCC800000 00000003FC0ECA8641FDB94BFE000000000000140215555555555553FE555555555554 F3FC240795CEB2404BFE000000000000140215555555555553FF55555555555523FC3F 5617839A5B9BFE000000000000140215555555555553FFFFFFFFFFFFFFC3FC60B60B60 B60B2BFE0000000000001402155555555555540055555555555533FC88277166054F0B FE00000000000014021555555555555400AAAAAAAAAAAA83FCB5AA499388272BFE0000 0000000014021555555555555400FFFFFFFFFFFFD3FCE93E93E93E939BFE0000000000 00140215555555555554012AAAAAAAAAAA93FD11722833944A3BFE0000000000001402 155555555555540155555555555543FD314DBF86A314BBFE0000000000001402155555 55555554017FFFFFFFFFFFF3FD54320FEDCBA96BFE0000000000001402155555555555 5401AAAAAAAAAAAAA3FD7A1F19690E083BFE00000000000014021555555555555401D5 555555555553FDA314DBF86A313BFE0000000000001402155555555555540200000000 000003FDCF13579BE0246BFE0000000000001402155555555555540215555555555553 FDFE1A8C536FE18BFE000000000000140215555555555554022AAAAAAAAAAAA3FE1815 3D0F8CB47BFE000000000000140215555555555554023FFFFFFFFFFFF3FE32A1907F6E 5D3BFE00000000000014022AAAAAAAAAAAAC0240000000000003FD9F49F49F49F47BFE 00000000000014022AAAAAAAAAAAAC022AAAAAAAAAAAB3FD7C65A438215FEBFE000000 00000014022AAAAAAAAAAAAC0215555555555563FD5C8A0CE512955BFE000000000000 14022AAAAAAAAAAAAC0200000000000013FD3FB72EA61D94FBFE00000000000014022A AAAAAAAAAAAC01D5555555555573FD25ED097B425EBBFE00000000000014022AAAAAAA AAAAAC01AAAAAAAAAAAAC3FD0F2B9D6480F2ABFE00000000000014022AAAAAAAAAAAAC 0180000000000013FCF6E5D4C3B2A15BFE00000000000014022AAAAAAAAAAAAC015555 5555555563FCD585E0E696F1BBFE00000000000014022AAAAAAAAAAAAC012AAAAAAAAA AAB3FCBA375F31AED66BFE00000000000014022AAAAAAAAAAAAC0100000000000003FC A4FA4FA4FA4F5BFE00000000000014022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FC95CEB2 40795C9BFE00000000000014022AAAAAAAAAAAAC0055555555555563FC8CB487042BFE 2BFE00000000000014022AAAAAAAAAAAAC0000000000000013FC89ABCDF012340BFE00 000000000014022AAAAAAAAAAAABFF55555555555583FC8CB487042BFE3BFE00000000 000014022AAAAAAAAAAAABFE555555555555B3FC95CEB240795C9BFE00000000000014 022AAAAAAAAAAAABCC80000000000003FCA4FA4FA4FA4F5BFE00000000000014022AAA AAAAAAAAA3FE555555555554F3FCBA375F31AED65BFE00000000000014022AAAAAAAAA AAA3FF55555555555523FCD585E0E696F1ABFE00000000000014022AAAAAAAAAAAA3FF FFFFFFFFFFFFC3FCF6E5D4C3B2A13BFE00000000000014022AAAAAAAAAAAA400555555 55555533FD0F2B9D6480F28BFE00000000000014022AAAAAAAAAAAA400AAAAAAAAAAAA 83FD25ED097B425EABFE00000000000014022AAAAAAAAAAAA400FFFFFFFFFFFFD3FD3F B72EA61D94DBFE00000000000014022AAAAAAAAAAAA4012AAAAAAAAAAA93FD5C8A0CE5 12953BFE00000000000014022AAAAAAAAAAAA40155555555555543FD7C65A438215FCB FE00000000000014022AAAAAAAAAAAA4017FFFFFFFFFFFF3FD9F49F49F49F46BFE0000 0000000014022AAAAAAAAAAAA401AAAAAAAAAAAAA3FDC536FE1A8C534BFE0000000000 0014022AAAAAAAAAAAA401D5555555555553FDEE2CC0A9E87C3BFE0000000000001402 2AAAAAAAAAAAA40200000000000003FE0D159E26AF37BBFE00000000000014022AAAAA AAAAAAA40215555555555553FE2499388277164BFE00000000000014022AAAAAAAAAAA A4022AAAAAAAAAAAA3FE3DA12F684BD9FBFE00000000000014022AAAAAAAAAAAA4023F FFFFFFFFFFF3FE582D82D82D82CBFE00000000000014023FFFFFFFFFFFFC0240000000 000003FDEEEEEEEEEEEECBFE00000000000014023FFFFFFFFFFFFC022AAAAAAAAAAAB3 FDCC0A9E87C65A2BFE00000000000014023FFFFFFFFFFFFC0215555555555563FDAC2F 0734B78FABFE00000000000014023FFFFFFFFFFFFC0200000000000013FD8F5C28F5C2 8F4BFE00000000000014023FFFFFFFFFFFFC01D5555555555573FD759203CAE7590BFE 00000000000014023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD5ED097B425ECEBFE000000 00000014023FFFFFFFFFFFFC0180000000000013FD4B17E4B17E4AFBFE000000000000 14023FFFFFFFFFFFFC0155555555555563FD3A67EAC2F0732BFE00000000000014023F FFFFFFFFFFFC012AAAAAAAAAAAB3FD2CC0A9E87C657BFE00000000000014023FFFFFFF FFFFFC0100000000000003FD222222222221FBFE00000000000014023FFFFFFFFFFFFC 00AAAAAAAAAAAAB3FD1A8C536FE1A89BFE00000000000014023FFFFFFFFFFFFC005555 5555555563FD15FF3DD1BAF96BFE00000000000014023FFFFFFFFFFFFC000000000000 0013FD147AE147AE145BFE00000000000014023FFFFFFFFFFFFBFF55555555555583FD 15FF3DD1BAF96BFE00000000000014023FFFFFFFFFFFFBFE555555555555B3FD1A8C53 6FE1A89BFE00000000000014023FFFFFFFFFFFFBCC80000000000003FD222222222221 FBFE00000000000014023FFFFFFFFFFFF3FE555555555554F3FD2CC0A9E87C657BFE00 000000000014023FFFFFFFFFFFF3FF55555555555523FD3A67EAC2F0732BFE00000000 000014023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD4B17E4B17E4AEBFE00000000000014 023FFFFFFFFFFFF40055555555555533FD5ED097B425ECDBFE00000000000014023FFF FFFFFFFFF400AAAAAAAAAAAA83FD759203CAE758FBFE00000000000014023FFFFFFFFF FFF400FFFFFFFFFFFFD3FD8F5C28F5C28F2BFE00000000000014023FFFFFFFFFFFF401 2AAAAAAAAAAA93FDAC2F0734B78F7BFE00000000000014023FFFFFFFFFFFF401555555 55555543FDCC0A9E87C65A1BFE00000000000014023FFFFFFFFFFFF4017FFFFFFFFFFF F3FDEEEEEEEEEEEEBBFE00000000000014023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE0A 6DFC3518A6CBFE00000000000014023FFFFFFFFFFFF401D5555555555553FE1EE8DD7C C6BB4BFE00000000000014023FFFFFFFFFFFF40200000000000003FE34E81B4E81B4DB FE00000000000014023FFFFFFFFFFFF40215555555555553FE4C6BB5AA49937BFE0000 0000000014023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE6573AC901E571BFE0000000000 0014023FFFFFFFFFFFF4023FFFFFFFFFFFF3FE7FFFFFFFFFFFEBFD5555555555558C02 4000000000000C0240000000000003FB1111111111113BFD5555555555558C02400000 0000000C022AAAAAAAAAAAB3FA0AFF9EE8DD7D8BFD5555555555558C02400000000000 0C0215555555555563F5845C8A0CE52A0BFD5555555555558C024000000000000C0200 00000000001BF9B4E81B4E81B2DBFD5555555555558C024000000000000C01D5555555 55557BFAA8C536FE1A8B7BFD5555555555558C024000000000000C01AAAAAAAAAAAACB FB2F684BDA12F64BFD5555555555558C024000000000000C018000000000001BFB7E4B 17E4B17E0BFD5555555555558C024000000000000C015555555555556BFBC10AFF9EE8 DD5BFD5555555555558C024000000000000C012AAAAAAAAAAABBFBF7A80308B913FBFD 5555555555558C024000000000000C010000000000000BFC1111111111110BFD555555 5555558C024000000000000C00AAAAAAAAAAAABBFC203CAE759203CBFD555555555555 8C024000000000000C005555555555556BFC2956D9B1DF623BFD5555555555558C0240 00000000000C000000000000001BFC2C5F92C5F92C5BFD5555555555558C0240000000 00000BFF5555555555558BFC2956D9B1DF622BFD5555555555558C024000000000000B FE555555555555BBFC203CAE759203CBFD5555555555558C024000000000000BCC8000 000000000BFC1111111111110BFD5555555555558C0240000000000003FE5555555555 54FBFBF7A80308B9141BFD5555555555558C0240000000000003FF5555555555552BFB C10AFF9EE8DD7BFD5555555555558C0240000000000003FFFFFFFFFFFFFFCBFB7E4B17 E4B17E4BFD5555555555558C0240000000000004005555555555553BFB2F684BDA12F6 8BFD5555555555558C024000000000000400AAAAAAAAAAAA8BFAA8C536FE1A8C7BFD55 55555555558C024000000000000400FFFFFFFFFFFFDBF9B4E81B4E81B54BFD55555555 55558C0240000000000004012AAAAAAAAAAA93F5845C8A0CE50B1BFD5555555555558C 02400000000000040155555555555543FA0AFF9EE8DD7CABFD5555555555558C024000 0000000004017FFFFFFFFFFFF3FB1111111111110BFD5555555555558C024000000000 000401AAAAAAAAAAAAA3FBA8C536FE1A8C6BFD5555555555558C024000000000000401 D5555555555553FC264E209DC5982BFD5555555555558C024000000000000402000000 00000003FC7E4B17E4B17E6BFD5555555555558C024000000000000402155555555555 53FCDC598153D0F8DBFD5555555555558C0240000000000004022AAAAAAAAAAAA3FD20 3CAE759203CBFD5555555555558C0240000000000004023FFFFFFFFFFFF3FD55555555 55554BFD5555555555558C022AAAAAAAAAAABC0240000000000003F8FDB97530ECAB7B FD5555555555558C022AAAAAAAAAAABC022AAAAAAAAAAABBF92F684BDA12F40BFD5555 555555558C022AAAAAAAAAAABC021555555555556BFA9690E0857FCE3BFD5555555555 558C022AAAAAAAAAAABC020000000000001BFB3E93E93E93E87BFD5555555555558C02 2AAAAAAAAAAABC01D555555555557BFBA5BC7DEA00C18BFD5555555555558C022AAAAA AAAAAABC01AAAAAAAAAAAACBFC0061172283390BFD5555555555558C022AAAAAAAAAAA BC018000000000001BFC27D27D27D27CEBFD5555555555558C022AAAAAAAAAAABC0155 55555555556BFC49327104EE2C8BFD5555555555558C022AAAAAAAAAAABC012AAAAAAA AAAABBFC6480F2B9D647DBFD5555555555558C022AAAAAAAAAAABC010000000000000B FC79BE02468ACEEBFD5555555555558C022AAAAAAAAAAABC00AAAAAAAAAAAABBFC88E9 9FAB0BC1ABFD5555555555558C022AAAAAAAAAAABC005555555555556BFC9203CAE759 201BFD5555555555558C022AAAAAAAAAAABC000000000000001BFC950C83FB72EA3BFD 5555555555558C022AAAAAAAAAAABBFF5555555555558BFC9203CAE759200BFD555555 5555558C022AAAAAAAAAAABBFE555555555555BBFC88E99FAB0BC1ABFD555555555555 8C022AAAAAAAAAAABBCC8000000000000BFC79BE02468ACEEBFD5555555555558C022A AAAAAAAAAAB3FE555555555554FBFC6480F2B9D647EBFD5555555555558C022AAAAAAA AAAAB3FF5555555555552BFC49327104EE2C9BFD5555555555558C022AAAAAAAAAAAB3 FFFFFFFFFFFFFFCBFC27D27D27D27D0BFD5555555555558C022AAAAAAAAAAAB4005555 555555553BFC0061172283392BFD5555555555558C022AAAAAAAAAAAB400AAAAAAAAAA AA8BFBA5BC7DEA00C1FBFD5555555555558C022AAAAAAAAAAAB400FFFFFFFFFFFFDBFB 3E93E93E93E91BFD5555555555558C022AAAAAAAAAAAB4012AAAAAAAAAAA9BFA9690E0 857FCF2BFD5555555555558C022AAAAAAAAAAAB4015555555555554BF92F684BDA12F5 DBFD5555555555558C022AAAAAAAAAAAB4017FFFFFFFFFFFF3F8FDB97530ECA9CBFD55 55555555558C022AAAAAAAAAAAB401AAAAAAAAAAAAA3FAAED6A9264E214BFD55555555 55558C022AAAAAAAAAAAB401D5555555555553FB7B425ED097B48BFD5555555555558C 022AAAAAAAAAAAB40200000000000003FC159E26AF37C08BFD5555555555558C022AAA AAAAAAAAB40215555555555553FC73AC901E573AFBFD5555555555558C022AAAAAAAAA AAB4022AAAAAAAAAAAA3FCD7CC6BB5AA49ABFD5555555555558C022AAAAAAAAAAAB402 3FFFFFFFFFFFF3FD20FEDCBA98765BFD5555555555558C021555555555556C02400000 0000000BF9FDB97530ECA74BFD5555555555558C021555555555556C022AAAAAAAAAAA BBFB0AFF9EE8DD7C4BFD5555555555558C021555555555556C021555555555556BFB8A 6DFC3518A66BFD5555555555558C021555555555556C020000000000001BFBFDB97530 ECA7BBFD5555555555558C021555555555556C01D555555555557BFC327104EE2CC06B FD5555555555558C021555555555556C01AAAAAAAAAAAACBFC5FF3DD1BAF98ABFD5555 555555558C021555555555556C018000000000001BFC87654320FEDC8BFD5555555555 558C021555555555556C015555555555556BFCA8C536FE1A8C2BFD5555555555558C02 1555555555556C012AAAAAAAAAAABBFCC413B8B302A77BFD5555555555558C02155555 5555556C010000000000000BFCD950C83FB72E8BFD5555555555558C02155555555555 6C00AAAAAAAAAAAABBFCE87C65A438214BFD5555555555558C021555555555556C0055 55555555556BFCF19690E0857FBBFD5555555555558C021555555555556C0000000000 00001BFCF49F49F49F49DBFD5555555555558C021555555555556BFF5555555555558B FCF19690E0857FABFD5555555555558C021555555555556BFE555555555555BBFCE87C 65A438214BFD5555555555558C021555555555556BCC8000000000000BFCD950C83FB7 2E8BFD5555555555558C0215555555555563FE555555555554FBFCC413B8B302A78BFD 5555555555558C0215555555555563FF5555555555552BFCA8C536FE1A8C3BFD555555 5555558C0215555555555563FFFFFFFFFFFFFFCBFC87654320FEDCABFD555555555555 8C0215555555555564005555555555553BFC5FF3DD1BAF98CBFD5555555555558C0215 55555555556400AAAAAAAAAAAA8BFC327104EE2CC0ABFD5555555555558C0215555555 55556400FFFFFFFFFFFFDBFBFDB97530ECA85BFD5555555555558C0215555555555564 012AAAAAAAAAAA9BFB8A6DFC3518A6DBFD5555555555558C0215555555555564015555 555555554BFB0AFF9EE8DD7CBBFD5555555555558C0215555555555564017FFFFFFFFF FFFBF9FDB97530ECA82BFD5555555555558C021555555555556401AAAAAAAAAAAAA3F7 845C8A0CE5153BFD5555555555558C021555555555556401D5555555555553FA7839A5 BC7DEA7BFD5555555555558C02155555555555640200000000000003FB6C16C16C16C1 DBFD5555555555558C02155555555555640215555555555553FC1419CA252ADB5BFD55 55555555558C0215555555555564022AAAAAAAAAAAA3FC7839A5BC7DEA0BFD55555555 55558C0215555555555564023FFFFFFFFFFFF3FCE26AF37C048D1BFD5555555555558C 020000000000001C024000000000000BFB2C5F92C5F92BDBFD5555555555558C020000 000000001C022AAAAAAAAAAABBFBB7F0D4629B7E4BFD5555555555558C020000000000 001C021555555555556BFC1BAF98D76B543BFD5555555555558C020000000000001C02 0000000000001BFC555555555554EBFD5555555555558C020000000000001C01D55555 5555557BFC88E99FAB0BC16BFD5555555555558C020000000000001C01AAAAAAAAAAAA CBFCB66C77D88E99ABFD5555555555558C020000000000001C018000000000001BFCDD DDDDDDDDDD8BFD5555555555558C020000000000001C015555555555556BFCFF3DD1BA F98D2BFD5555555555558C020000000000001C012AAAAAAAAAAABBFD0D4629B7F0D44B FD5555555555558C020000000000001C010000000000000BFD17E4B17E4B17CBFD5555 555555558C020000000000001C00AAAAAAAAAAAABBFD1F7A80308B912BFD5555555555 558C020000000000001C005555555555556BFD240795CEB2405BFD5555555555558C02 0000000000001C000000000000001BFD258BF258BF256BFD5555555555558C02000000 0000001BFF5555555555558BFD240795CEB2405BFD5555555555558C02000000000000 1BFE555555555555BBFD1F7A80308B912BFD5555555555558C020000000000001BCC80 00000000000BFD17E4B17E4B17CBFD5555555555558C0200000000000013FE55555555 5554FBFD0D4629B7F0D44BFD5555555555558C0200000000000013FF5555555555552B FCFF3DD1BAF98D3BFD5555555555558C0200000000000013FFFFFFFFFFFFFFCBFCDDDD DDDDDDDDABFD5555555555558C0200000000000014005555555555553BFCB66C77D88E 99CBFD5555555555558C020000000000001400AAAAAAAAAAAA8BFC88E99FAB0BC1ABFD 5555555555558C020000000000001400FFFFFFFFFFFFDBFC5555555555553BFD555555 5555558C0200000000000014012AAAAAAAAAAA9BFC1BAF98D76B547BFD555555555555 8C0200000000000014015555555555554BFBB7F0D4629B7EBBFD5555555555558C0200 000000000014017FFFFFFFFFFFFBFB2C5F92C5F92C1BFD5555555555558C0200000000 00001401AAAAAAAAAAAAABFA2956D9B1DF616BFD5555555555558C0200000000000014 01D5555555555553F6E573AC901E66FBFD5555555555558C0200000000000014020000 0000000003FA7E4B17E4B17FCBFD5555555555558C0200000000000014021555555555 5553FB7B425ED097B4ABFD5555555555558C0200000000000014022AAAAAAAAAAAA3FC 21C10AFF9EE90BFD5555555555558C0200000000000014023FFFFFFFFFFFF3FC8BF258 BF258C1BFD5555555555558C01D555555555557C024000000000000BFBC71C71C71C71 9BFD5555555555558C01D555555555557C022AAAAAAAAAAABBFC2956D9B1DF620BFD55 55555555558C01D555555555557C021555555555556BFC690E0857FCF71BFD55555555 55558C01D555555555557C020000000000001BFCA2B3C4D5E6F7CBFD5555555555558C 01D555555555557C01D555555555557BFCD6480F2B9D644BFD5555555555558C01D555 555555557C01AAAAAAAAAAAACBFD01E573AC901E4BFD5555555555558C01D555555555 557C018000000000001BFD159E26AF37C03BFD5555555555558C01D555555555557C01 5555555555556BFD264E209DC5980BFD5555555555558C01D555555555557C012AAAAA AAAAAABBFD33F5617839A5BBFD5555555555558C01D555555555557C01000000000000 0BFD3E93E93E93E93BFD5555555555558C01D555555555557C00AAAAAAAAAAAABBFD46 29B7F0D4629BFD5555555555558C01D555555555557C005555555555556BFD4AB6CD8E FB11CBFD5555555555558C01D555555555557C000000000000001BFD4C3B2A1907F6DB FD5555555555558C01D555555555557BFF5555555555558BFD4AB6CD8EFB11CBFD5555 555555558C01D555555555557BFE555555555555BBFD4629B7F0D4629BFD5555555555 558C01D555555555557BCC8000000000000BFD3E93E93E93E93BFD5555555555558C01 D5555555555573FE555555555554FBFD33F5617839A5BBFD5555555555558C01D55555 55555573FF5555555555552BFD264E209DC5980BFD5555555555558C01D55555555555 73FFFFFFFFFFFFFFCBFD159E26AF37C04BFD5555555555558C01D55555555555740055 55555555553BFD01E573AC901E5BFD5555555555558C01D555555555557400AAAAAAAA AAAA8BFCD6480F2B9D647BFD5555555555558C01D555555555557400FFFFFFFFFFFFDB FCA2B3C4D5E6F80BFD5555555555558C01D5555555555574012AAAAAAAAAAA9BFC690E 0857FCF75BFD5555555555558C01D5555555555574015555555555554BFC2956D9B1DF 624BFD5555555555558C01D5555555555574017FFFFFFFFFFFFBFBC71C71C71C71DBFD 5555555555558C01D555555555557401AAAAAAAAAAAAABFB2F684BDA12F67BFD555555 5555558C01D555555555557401D555555555555BFA1722833944A51BFD555555555555 8C01D55555555555740200000000000003F823456789ABD10BFD5555555555558C01D5 5555555555740215555555555553FAC10AFF9EE8DDBBFD5555555555558C01D5555555 555574022AAAAAAAAAAAA3FBA8C536FE1A8C4BFD5555555555558C01D5555555555574 023FFFFFFFFFFFF3FC3E93E93E93E93BFD5555555555558C01AAAAAAAAAAAACC024000 000000000BFC27D27D27D27D5BFD5555555555558C01AAAAAAAAAAAACC022AAAAAAAAA AABBFC6D9B1DF623A68BFD5555555555558C01AAAAAAAAAAAACC021555555555556BFC AD524C9C413B9BFD5555555555558C01AAAAAAAAAAAACC020000000000001BFCE6F809 1A2B3C4BFD5555555555558C01AAAAAAAAAAAACC01D555555555557BFD0D4629B7F0D4 6BFD5555555555558C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFD240795CEB2408BFD55 55555555558C01AAAAAAAAAAAACC018000000000001BFD37C048D159E27BFD55555555 55558C01AAAAAAAAAAAACC015555555555556BFD487042BFE7BA4BFD5555555555558C 01AAAAAAAAAAAACC012AAAAAAAAAAABBFD5617839A5BC7FBFD5555555555558C01AAAA AAAAAAAACC010000000000000BFD60B60B60B60B7BFD5555555555558C01AAAAAAAAAA AACC00AAAAAAAAAAAABBFD684BDA12F684DBFD5555555555558C01AAAAAAAAAAAACC00 5555555555556BFD6CD8EFB11D340BFD5555555555558C01AAAAAAAAAAAACC00000000 0000001BFD6E5D4C3B2A191BFD5555555555558C01AAAAAAAAAAAACBFF555555555555 8BFD6CD8EFB11D340BFD5555555555558C01AAAAAAAAAAAACBFE555555555555BBFD68 4BDA12F684DBFD5555555555558C01AAAAAAAAAAAACBCC8000000000000BFD60B60B60 B60B7BFD5555555555558C01AAAAAAAAAAAAC3FE555555555554FBFD5617839A5BC7FB FD5555555555558C01AAAAAAAAAAAAC3FF5555555555552BFD487042BFE7BA4BFD5555 555555558C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFD37C048D159E28BFD5555555555 558C01AAAAAAAAAAAAC4005555555555553BFD240795CEB2409BFD5555555555558C01 AAAAAAAAAAAAC400AAAAAAAAAAAA8BFD0D4629B7F0D47BFD5555555555558C01AAAAAA AAAAAAC400FFFFFFFFFFFFDBFCE6F8091A2B3C8BFD5555555555558C01AAAAAAAAAAAA C4012AAAAAAAAAAA9BFCAD524C9C413BEBFD5555555555558C01AAAAAAAAAAAAC40155 55555555554BFC6D9B1DF623A6BBFD5555555555558C01AAAAAAAAAAAAC4017FFFFFFF FFFFFBFC27D27D27D27D5BFD5555555555558C01AAAAAAAAAAAAC401AAAAAAAAAAAAAB FBB7F0D4629B7F5BFD5555555555558C01AAAAAAAAAAAAC401D555555555555BFB1419 CA252ADB9BFD5555555555558C01AAAAAAAAAAAAC4020000000000000BF9907F6E5D4C 3B8BFD5555555555558C01AAAAAAAAAAAAC40215555555555553F95FF3DD1BAF977BFD 5555555555558C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FB203CAE7592034BFD555555 5555558C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FBF49F49F49F496BFD555555555555 8C018000000000001C024000000000000BFC62FC962FC962DBFD5555555555558C0180 00000000001C022AAAAAAAAAAABBFCA8C536FE1A8C2BFD5555555555558C0180000000 00001C021555555555556BFCE87C65A438213BFD5555555555558C018000000000001C 020000000000001BFD111111111110FBFD5555555555558C018000000000001C01D555 555555557BFD2ADB363BEC473BFD5555555555558C018000000000001C01AAAAAAAAAA AACBFD419CA252ADB35BFD5555555555558C018000000000001C018000000000001BFD 5555555555554BFD5555555555558C018000000000001C015555555555556BFD66054F 43E32D1BFD5555555555558C018000000000001C012AAAAAAAAAAABBFD73AC901E573A CBFD5555555555558C018000000000001C010000000000000BFD7E4B17E4B17E4BFD55 55555555558C018000000000001C00AAAAAAAAAAAABBFD85E0E696F1F7ABFD55555555 55558C018000000000001C005555555555556BFD8A6DFC3518A6DBFD5555555555558C 018000000000001C000000000000001BFD8BF258BF258BEBFD5555555555558C018000 000000001BFF5555555555558BFD8A6DFC3518A6DBFD5555555555558C018000000000 001BFE555555555555BBFD85E0E696F1F7ABFD5555555555558C018000000000001BCC 8000000000000BFD7E4B17E4B17E4BFD5555555555558C0180000000000013FE555555 555554FBFD73AC901E573ACBFD5555555555558C0180000000000013FF555555555555 2BFD66054F43E32D1BFD5555555555558C0180000000000013FFFFFFFFFFFFFFCBFD55 55555555555BFD5555555555558C0180000000000014005555555555553BFD419CA252 ADB36BFD5555555555558C018000000000001400AAAAAAAAAAAA8BFD2ADB363BEC474B FD5555555555558C018000000000001400FFFFFFFFFFFFDBFD1111111111111BFD5555 555555558C0180000000000014012AAAAAAAAAAA9BFCE87C65A438218BFD5555555555 558C0180000000000014015555555555554BFCA8C536FE1A8C5BFD5555555555558C01 80000000000014017FFFFFFFFFFFFBFC62FC962FC962FBFD5555555555558C01800000 0000001401AAAAAAAAAAAAABFC1722833944A54BFD5555555555558C01800000000000 1401D555555555555BFB8A6DFC3518A6BBFD5555555555558C01800000000000140200 00000000000BFAB4E81B4E81B44BFD5555555555558C01800000000000140215555555 55555BF7E573AC901E545BFD5555555555558C0180000000000014022AAAAAAAAAAAA3 FA53D0F8CB48700BFD5555555555558C0180000000000014023FFFFFFFFFFFF3FB7E4B 17E4B17E2BFD5555555555558C015555555555556C024000000000000BFC950C83FB72 EA5BFD5555555555558C015555555555556C022AAAAAAAAAAABBFCDAD524C9C413ABFD 5555555555558C015555555555556C021555555555556BFD0D4629B7F0D46BFD555555 5555558C015555555555556C020000000000001BFD2A1907F6E5D4BBFD555555555555 8C015555555555556C01D555555555557BFD43E32D21C10AFBFD5555555555558C0155 55555555556C01AAAAAAAAAAAACBFD5AA4993882771BFD5555555555558C0155555555 55556C018000000000001BFD6E5D4C3B2A190BFD5555555555558C015555555555556C 015555555555556BFD7F0D4629B7F0DBFD5555555555558C015555555555556C012AAA AAAAAAAABBFD8CB487042BFE8BFD5555555555558C015555555555556C010000000000 000BFD97530ECA86420BFD5555555555558C015555555555556C00AAAAAAAAAAAABBFD 9EE8DD7CC6BB6BFD5555555555558C015555555555556C005555555555556BFDA375F3 1AED6A9BFD5555555555558C015555555555556C000000000000001BFDA4FA4FA4FA4F ABFD5555555555558C015555555555556BFF5555555555558BFDA375F31AED6A9BFD55 55555555558C015555555555556BFE555555555555BBFD9EE8DD7CC6BB6BFD55555555 55558C015555555555556BCC8000000000000BFD97530ECA86420BFD5555555555558C 0155555555555563FE555555555554FBFD8CB487042BFE8BFD5555555555558C015555 5555555563FF5555555555552BFD7F0D4629B7F0DBFD5555555555558C015555555555 5563FFFFFFFFFFFFFFCBFD6E5D4C3B2A191BFD5555555555558C015555555555556400 5555555555553BFD5AA4993882772BFD5555555555558C015555555555556400AAAAAA AAAAAA8BFD43E32D21C10B0BFD5555555555558C015555555555556400FFFFFFFFFFFF DBFD2A1907F6E5D4DBFD5555555555558C0155555555555564012AAAAAAAAAAA9BFD0D 4629B7F0D48BFD5555555555558C0155555555555564015555555555554BFCDAD524C9 C413DBFD5555555555558C0155555555555564017FFFFFFFFFFFFBFC950C83FB72EA7B FD5555555555558C015555555555556401AAAAAAAAAAAAABFC49327104EE2CCBFD5555 555555558C015555555555556401D555555555555BFBEE8DD7CC6BB5BBFD5555555555 558C0155555555555564020000000000000BFB3E93E93E93E92BFD5555555555558C01 55555555555564021555555555555BFA04EE2CC0A9E89BFD5555555555558C01555555 55555564022AAAAAAAAAAAA3F91722833944A38BFD5555555555558C01555555555555 64023FFFFFFFFFFFF3FB1A2B3C4D5E6F0BFD5555555555558C012AAAAAAAAAAABC0240 00000000000BFCBE02468ACF135BFD5555555555558C012AAAAAAAAAAABC022AAAAAAA AAAABBFD01E573AC901E5BFD5555555555558C012AAAAAAAAAAABC021555555555556B FD21C10AFF9EE8EBFD5555555555558C012AAAAAAAAAAABC020000000000001BFD3E93 E93E93E93BFD5555555555558C012AAAAAAAAAAABC01D555555555557BFD585E0E696F 1F8BFD5555555555558C012AAAAAAAAAAABC01AAAAAAAAAAAACBFD6F1F7A80308B9BFD 5555555555558C012AAAAAAAAAAABC018000000000001BFD82D82D82D82D8BFD555555 5555558C012AAAAAAAAAAABC015555555555556BFD9388277166055BFD555555555555 8C012AAAAAAAAAAABC012AAAAAAAAAAABBFDA12F684BDA130BFD5555555555558C012A AAAAAAAAAABC010000000000000BFDABCDF01234568BFD5555555555558C012AAAAAAA AAAABC00AAAAAAAAAAAABBFDB363BEC474CFEBFD5555555555558C012AAAAAAAAAAABC 005555555555556BFDB7F0D4629B7F1BFD5555555555558C012AAAAAAAAAAABC000000 000000001BFDB97530ECA8642BFD5555555555558C012AAAAAAAAAAABBFF5555555555 558BFDB7F0D4629B7F1BFD5555555555558C012AAAAAAAAAAABBFE555555555555BBFD B363BEC474CFEBFD5555555555558C012AAAAAAAAAAABBCC8000000000000BFDABCDF0 1234568BFD5555555555558C012AAAAAAAAAAAB3FE555555555554FBFDA12F684BDA13 0BFD5555555555558C012AAAAAAAAAAAB3FF5555555555552BFD9388277166055BFD55 55555555558C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFD82D82D82D82D9BFD55555555 55558C012AAAAAAAAAAAB4005555555555553BFD6F1F7A80308BABFD5555555555558C 012AAAAAAAAAAAB400AAAAAAAAAAAA8BFD585E0E696F1F8BFD5555555555558C012AAA AAAAAAAAB400FFFFFFFFFFFFDBFD3E93E93E93E95BFD5555555555558C012AAAAAAAAA AAB4012AAAAAAAAAAA9BFD21C10AFF9EE90BFD5555555555558C012AAAAAAAAAAAB401 5555555555554BFD01E573AC901E6BFD5555555555558C012AAAAAAAAAAAB4017FFFFF FFFFFFFBFCBE02468ACF137BFD5555555555558C012AAAAAAAAAAAB401AAAAAAAAAAAA ABFC722833944A55CBFD5555555555558C012AAAAAAAAAAAB401D555555555555BFC20 3CAE759203DBFD5555555555558C012AAAAAAAAAAAB4020000000000000BFB907F6E5D 4C3B2BFD5555555555558C012AAAAAAAAAAAB4021555555555555BFAA8C536FE1A8C9B FD5555555555558C012AAAAAAAAAAAB4022AAAAAAAAAAAABF6845C8A0CE5244BFD5555 555555558C012AAAAAAAAAAAB4023FFFFFFFFFFFF3FA907F6E5D4C3A0BFD5555555555 558C010000000000000C024000000000000BFCDDDDDDDDDDDDDBFD5555555555558C01 0000000000000C022AAAAAAAAAAABBFD11D33F5617837BFD5555555555558C01000000 0000000C021555555555556BFD31AED6A9264E0BFD5555555555558C01000000000000 0C020000000000001BFD4E81B4E81B4E7BFD5555555555558C010000000000000C01D5 55555555557BFD684BDA12F684ABFD5555555555558C010000000000000C01AAAAAAAA AAAACBFD7F0D4629B7F0DBFD5555555555558C010000000000000C018000000000001B FD92C5F92C5F92BBFD5555555555558C010000000000000C015555555555556BFDA375 F31AED6A7BFD5555555555558C010000000000000C012AAAAAAAAAAABBFDB11D33F561 783BFD5555555555558C010000000000000C010000000000000BFDBBBBBBBBBBBBBBFD 5555555555558C010000000000000C00AAAAAAAAAAAABBFDC3518A6DFC351BFD555555 5555558C010000000000000C005555555555556BFDC7DEA00C22E44BFD555555555555 8C010000000000000C000000000000001BFDC962FC962FC95BFD5555555555558C0100 00000000000BFF5555555555558BFDC7DEA00C22E44BFD5555555555558C0100000000 00000BFE555555555555BBFDC3518A6DFC351BFD5555555555558C010000000000000B CC8000000000000BFDBBBBBBBBBBBBBBFD5555555555558C0100000000000003FE5555 55555554FBFDB11D33F561783BFD5555555555558C0100000000000003FF5555555555 552BFDA375F31AED6A8BFD5555555555558C0100000000000003FFFFFFFFFFFFFFCBFD 92C5F92C5F92CBFD5555555555558C0100000000000004005555555555553BFD7F0D46 29B7F0DBFD5555555555558C010000000000000400AAAAAAAAAAAA8BFD684BDA12F684 BBFD5555555555558C010000000000000400FFFFFFFFFFFFDBFD4E81B4E81B4E8BFD55 55555555558C0100000000000004012AAAAAAAAAAA9BFD31AED6A9264E3BFD55555555 55558C0100000000000004015555555555554BFD11D33F5617839BFD5555555555558C 0100000000000004017FFFFFFFFFFFFBFCDDDDDDDDDDDDDBFD5555555555558C010000 000000000401AAAAAAAAAAAAABFC9203CAE759202BFD5555555555558C010000000000 000401D555555555555BFC401845C8A0CE3BFD5555555555558C010000000000000402 0000000000000BFBD0369D0369CFEBFD5555555555558C010000000000000402155555 5555555BFB1419CA252ADB0BFD5555555555558C0100000000000004022AAAAAAAAAAA ABF92F684BDA12F78BFD5555555555558C0100000000000004023FFFFFFFFFFFF3FA11 11111111108BFD5555555555558C00AAAAAAAAAAAABC024000000000000BFCF49F49F4 9F49DBFD5555555555558C00AAAAAAAAAAAABC022AAAAAAAAAAABBFD1D33F56178399B FD5555555555558C00AAAAAAAAAAAABC021555555555556BFD3D0F8CB487042BFD5555 555555558C00AAAAAAAAAAAABC020000000000001BFD59E26AF37C047BFD5555555555 558C00AAAAAAAAAAAABC01D555555555557BFD73AC901E573ACBFD5555555555558C00 AAAAAAAAAAAABC01AAAAAAAAAAAACBFD8A6DFC3518A6DBFD5555555555558C00AAAAAA AAAAAABC018000000000001BFD9E26AF37C048DBFD5555555555558C00AAAAAAAAAAAA BC015555555555556BFDAED6A9264E209BFD5555555555558C00AAAAAAAAAAAABC012A AAAAAAAAAABBFDBC7DEA00C22E3BFD5555555555558C00AAAAAAAAAAAABC0100000000 00000BFDC71C71C71C71CBFD5555555555558C00AAAAAAAAAAAABC00AAAAAAAAAAAABB FDCEB240795CEB2BFD5555555555558C00AAAAAAAAAAAABC005555555555556BFDD33F 5617839A5BFD5555555555558C00AAAAAAAAAAAABC000000000000001BFDD4C3B2A190 7F6BFD5555555555558C00AAAAAAAAAAAABBFF5555555555558BFDD33F5617839A5BFD 5555555555558C00AAAAAAAAAAAABBFE555555555555BBFDCEB240795CEB2BFD555555 5555558C00AAAAAAAAAAAABBCC8000000000000BFDC71C71C71C71CBFD555555555555 8C00AAAAAAAAAAAAB3FE555555555554FBFDBC7DEA00C22E4BFD5555555555558C00AA AAAAAAAAAAB3FF5555555555552BFDAED6A9264E209BFD5555555555558C00AAAAAAAA AAAAB3FFFFFFFFFFFFFFCBFD9E26AF37C048DBFD5555555555558C00AAAAAAAAAAAAB4 005555555555553BFD8A6DFC3518A6EBFD5555555555558C00AAAAAAAAAAAAB400AAAA AAAAAAAA8BFD73AC901E573ACBFD5555555555558C00AAAAAAAAAAAAB400FFFFFFFFFF FFDBFD59E26AF37C049BFD5555555555558C00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFD 3D0F8CB487044BFD5555555555558C00AAAAAAAAAAAAB4015555555555554BFD1D33F5 617839ABFD5555555555558C00AAAAAAAAAAAAB4017FFFFFFFFFFFFBFCF49F49F49F49 FBFD5555555555558C00AAAAAAAAAAAAB401AAAAAAAAAAAAABFCA8C536FE1A8C4BFD55 55555555558C00AAAAAAAAAAAAB401D555555555555BFC56D9B1DF623A5BFD55555555 55558C00AAAAAAAAAAAAB4020000000000000BFBFDB97530ECA82BFD5555555555558C 00AAAAAAAAAAAAB4021555555555555BFB419CA252ADB34BFD5555555555558C00AAAA AAAAAAAAB4022AAAAAAAAAAAABF9E573AC901E588BFD5555555555558C00AAAAAAAAAA AAB4023FFFFFFFFFFFF3F96C16C16C16C00BFD5555555555558C005555555555556C02 4000000000000BFD0123456789ABCBFD5555555555558C005555555555556C022AAAAA AAAAAABBFD240795CEB2407BFD5555555555558C005555555555556C02155555555555 6BFD43E32D21C10B0BFD5555555555558C005555555555556C020000000000001BFD60 B60B60B60B5BFD5555555555558C005555555555556C01D555555555557BFD7A80308B 9141ABFD5555555555558C005555555555556C01AAAAAAAAAAAACBFD91419CA252ADBB FD5555555555558C005555555555556C018000000000001BFDA4FA4FA4FA4FBBFD5555 555555558C005555555555556C015555555555556BFDB5AA499388277BFD5555555555 558C005555555555556C012AAAAAAAAAAABBFDC3518A6DFC351BFD5555555555558C00 5555555555556C010000000000000BFDCDF012345678ABFD5555555555558C00555555 5555556C00AAAAAAAAAAAABBFDD585E0E696F20BFD5555555555558C00555555555555 6C005555555555556BFDDA12F684BDA13BFD5555555555558C005555555555556C0000 00000000001BFDDB97530ECA864BFD5555555555558C005555555555556BFF55555555 55558BFDDA12F684BDA13BFD5555555555558C005555555555556BFE555555555555BB FDD585E0E696F20BFD5555555555558C005555555555556BCC8000000000000BFDCDF0 12345678ABFD5555555555558C0055555555555563FE555555555554FBFDC3518A6DFC 352BFD5555555555558C0055555555555563FF5555555555552BFDB5AA499388277BFD 5555555555558C0055555555555563FFFFFFFFFFFFFFCBFDA4FA4FA4FA4FBBFD555555 5555558C0055555555555564005555555555553BFD91419CA252ADCBFD555555555555 8C005555555555556400AAAAAAAAAAAA8BFD7A80308B9141ABFD5555555555558C0055 55555555556400FFFFFFFFFFFFDBFD60B60B60B60B7BFD5555555555558C0055555555 555564012AAAAAAAAAAA9BFD43E32D21C10B2BFD5555555555558C0055555555555564 015555555555554BFD240795CEB2408BFD5555555555558C0055555555555564017FFF FFFFFFFFFBFD0123456789ABEBFD5555555555558C005555555555556401AAAAAAAAAA AAABFCB66C77D88E9A0BFD5555555555558C005555555555556401D555555555555BFC 6480F2B9D6481BFD5555555555558C0055555555555564020000000000000BFC0C83FB 72EA61DBFD5555555555558C0055555555555564021555555555555BFB5CEB240795CE CBFD5555555555558C0055555555555564022AAAAAAAAAAAABFA2956D9B1DF634BFD55 55555555558C0055555555555564023FFFFFFFFFFFF3F8FDB97530ECA40BFD55555555 55558C000000000000001C024000000000000BFD0369D0369D036BFD5555555555558C 000000000000001C022AAAAAAAAAAABBFD264E209DC5981BFD5555555555558C000000 000000001C021555555555556BFD4629B7F0D462ABFD5555555555558C000000000000 001C020000000000001BFD62FC962FC962FBFD5555555555558C000000000000001C01 D555555555557BFD7CC6BB5AA4994BFD5555555555558C000000000000001C01AAAAAA AAAAAACBFD9388277166055BFD5555555555558C000000000000001C01800000000000 1BFDA740DA740DA75BFD5555555555558C000000000000001C015555555555556BFDB7 F0D4629B7F1BFD5555555555558C000000000000001C012AAAAAAAAAAABBFDC598153D 0F8CBBFD5555555555558C000000000000001C010000000000000BFDD0369D0369D04B FD5555555555558C000000000000001C00AAAAAAAAAAAABBFDD7CC6BB5AA49ABFD5555 555555558C000000000000001C005555555555556BFDDC598153D0F8DBFD5555555555 558C000000000000001C000000000000001BFDDDDDDDDDDDDDEBFD5555555555558C00 0000000000001BFF5555555555558BFDDC598153D0F8DBFD5555555555558C00000000 0000001BFE555555555555BBFDD7CC6BB5AA49ABFD5555555555558C00000000000000 1BCC8000000000000BFDD0369D0369D04BFD5555555555558C0000000000000013FE55 5555555554FBFDC598153D0F8CCBFD5555555555558C0000000000000013FF55555555 55552BFDB7F0D4629B7F1BFD5555555555558C0000000000000013FFFFFFFFFFFFFFCB FDA740DA740DA75BFD5555555555558C0000000000000014005555555555553BFD9388 277166056BFD5555555555558C000000000000001400AAAAAAAAAAAA8BFD7CC6BB5AA4 994BFD5555555555558C000000000000001400FFFFFFFFFFFFDBFD62FC962FC9631BFD 5555555555558C0000000000000014012AAAAAAAAAAA9BFD4629B7F0D462CBFD555555 5555558C0000000000000014015555555555554BFD264E209DC5982BFD555555555555 8C0000000000000014017FFFFFFFFFFFFBFD0369D0369D038BFD5555555555558C0000 00000000001401AAAAAAAAAAAAABFCBAF98D76B5494BFD5555555555558C0000000000 00001401D555555555555BFC690E0857FCF75BFD5555555555558C0000000000000014 020000000000000BFC1111111111111BFD5555555555558C0000000000000014021555 555555555BFB66054F43E32D4BFD5555555555558C0000000000000014022AAAAAAAAA AAABFA3B8B302A7A204BFD5555555555558C0000000000000014023FFFFFFFFFFFF3F8 B4E81B4E81B00BFD5555555555558BFF5555555555558C024000000000000BFD012345 6789ABCBFD5555555555558BFF5555555555558C022AAAAAAAAAAABBFD240795CEB240 7BFD5555555555558BFF5555555555558C021555555555556BFD43E32D21C10B0BFD55 55555555558BFF5555555555558C020000000000001BFD60B60B60B60B5BFD55555555 55558BFF5555555555558C01D555555555557BFD7A80308B9141ABFD5555555555558B FF5555555555558C01AAAAAAAAAAAACBFD91419CA252ADBBFD5555555555558BFF5555 555555558C018000000000001BFDA4FA4FA4FA4FBBFD5555555555558BFF5555555555 558C015555555555556BFDB5AA499388277BFD5555555555558BFF5555555555558C01 2AAAAAAAAAAABBFDC3518A6DFC351BFD5555555555558BFF5555555555558C01000000 0000000BFDCDF012345678ABFD5555555555558BFF5555555555558C00AAAAAAAAAAAA BBFDD585E0E696F20BFD5555555555558BFF5555555555558C005555555555556BFDDA 12F684BDA13BFD5555555555558BFF5555555555558C000000000000001BFDDB97530E CA864BFD5555555555558BFF5555555555558BFF5555555555558BFDDA12F684BDA13B FD5555555555558BFF5555555555558BFE555555555555BBFDD585E0E696F20BFD5555 555555558BFF5555555555558BCC8000000000000BFDCDF012345678ABFD5555555555 558BFF55555555555583FE555555555554FBFDC3518A6DFC352BFD5555555555558BFF 55555555555583FF5555555555552BFDB5AA499388277BFD5555555555558BFF555555 55555583FFFFFFFFFFFFFFCBFDA4FA4FA4FA4FBBFD5555555555558BFF555555555555 84005555555555553BFD91419CA252ADCBFD5555555555558BFF5555555555558400AA AAAAAAAAAA8BFD7A80308B9141ABFD5555555555558BFF5555555555558400FFFFFFFF FFFFDBFD60B60B60B60B7BFD5555555555558BFF55555555555584012AAAAAAAAAAA9B FD43E32D21C10B2BFD5555555555558BFF55555555555584015555555555554BFD2407 95CEB2408BFD5555555555558BFF55555555555584017FFFFFFFFFFFFBFD0123456789 ABEBFD5555555555558BFF5555555555558401AAAAAAAAAAAAABFCB66C77D88E9A0BFD 5555555555558BFF5555555555558401D555555555555BFC6480F2B9D6481BFD555555 5555558BFF55555555555584020000000000000BFC0C83FB72EA61DBFD555555555555 8BFF55555555555584021555555555555BFB5CEB240795CECBFD5555555555558BFF55 555555555584022AAAAAAAAAAAABFA2956D9B1DF634BFD5555555555558BFF55555555 555584023FFFFFFFFFFFF3F8FDB97530ECA40BFD5555555555558BFE555555555555BC 024000000000000BFCF49F49F49F4A1BFD5555555555558BFE555555555555BC022AAA AAAAAAAABBFD1D33F56178399BFD5555555555558BFE555555555555BC021555555555 556BFD3D0F8CB487042BFD5555555555558BFE555555555555BC020000000000001BFD 59E26AF37C049BFD5555555555558BFE555555555555BC01D555555555557BFD73AC90 1E573ACBFD5555555555558BFE555555555555BC01AAAAAAAAAAAACBFD8A6DFC3518A6 FBFD5555555555558BFE555555555555BC018000000000001BFD9E26AF37C048DBFD55 55555555558BFE555555555555BC015555555555556BFDAED6A9264E209BFD55555555 55558BFE555555555555BC012AAAAAAAAAAABBFDBC7DEA00C22E5BFD5555555555558B FE555555555555BC010000000000000BFDC71C71C71C71DBFD5555555555558BFE5555 55555555BC00AAAAAAAAAAAABBFDCEB240795CEB3BFD5555555555558BFE5555555555 55BC005555555555556BFDD33F5617839A6BFD5555555555558BFE555555555555BC00 0000000000001BFDD4C3B2A1907F7BFD5555555555558BFE555555555555BBFF555555 5555558BFDD33F5617839A6BFD5555555555558BFE555555555555BBFE555555555555 BBFDCEB240795CEB3BFD5555555555558BFE555555555555BBCC8000000000000BFDC7 1C71C71C71DBFD5555555555558BFE555555555555B3FE555555555554FBFDBC7DEA00 C22E5BFD5555555555558BFE555555555555B3FF5555555555552BFDAED6A9264E20AB FD5555555555558BFE555555555555B3FFFFFFFFFFFFFFCBFD9E26AF37C048EBFD5555 555555558BFE555555555555B4005555555555553BFD8A6DFC3518A6FBFD5555555555 558BFE555555555555B400AAAAAAAAAAAA8BFD73AC901E573ADBFD5555555555558BFE 555555555555B400FFFFFFFFFFFFDBFD59E26AF37C04ABFD5555555555558BFE555555 555555B4012AAAAAAAAAAA9BFD3D0F8CB487045BFD5555555555558BFE555555555555 B4015555555555554BFD1D33F5617839BBFD5555555555558BFE555555555555B4017F FFFFFFFFFFFBFCF49F49F49F4A1BFD5555555555558BFE555555555555B401AAAAAAAA AAAAABFCA8C536FE1A8C6BFD5555555555558BFE555555555555B401D555555555555B FC56D9B1DF623A7BFD5555555555558BFE555555555555B4020000000000000BFBFDB9 7530ECA86BFD5555555555558BFE555555555555B4021555555555555BFB419CA252AD B38BFD5555555555558BFE555555555555B4022AAAAAAAAAAAABF9E573AC901E598BFD 5555555555558BFE555555555555B4023FFFFFFFFFFFF3F96C16C16C16BF0BFD555555 5555558BCC8000000000000C024000000000000BFCDDDDDDDDDDDDDBFD555555555555 8BCC8000000000000C022AAAAAAAAAAABBFD11D33F5617839BFD5555555555558BCC80 00000000000C021555555555556BFD31AED6A9264E2BFD5555555555558BCC80000000 00000C020000000000001BFD4E81B4E81B4E7BFD5555555555558BCC8000000000000C 01D555555555557BFD684BDA12F684CBFD5555555555558BCC8000000000000C01AAAA AAAAAAAACBFD7F0D4629B7F0DBFD5555555555558BCC8000000000000C018000000000 001BFD92C5F92C5F92DBFD5555555555558BCC8000000000000C015555555555556BFD A375F31AED6A9BFD5555555555558BCC8000000000000C012AAAAAAAAAAABBFDB11D33 F561784BFD5555555555558BCC8000000000000C010000000000000BFDBBBBBBBBBBBB CBFD5555555555558BCC8000000000000C00AAAAAAAAAAAABBFDC3518A6DFC352BFD55 55555555558BCC8000000000000C005555555555556BFDC7DEA00C22E45BFD55555555 55558BCC8000000000000C000000000000001BFDC962FC962FC96BFD5555555555558B CC8000000000000BFF5555555555558BFDC7DEA00C22E45BFD5555555555558BCC8000 000000000BFE555555555555BBFDC3518A6DFC352BFD5555555555558BCC8000000000 000BCC8000000000000BFDBBBBBBBBBBBBCBFD5555555555558BCC80000000000003FE 555555555554FBFDB11D33F561784BFD5555555555558BCC80000000000003FF555555 5555552BFDA375F31AED6A9BFD5555555555558BCC80000000000003FFFFFFFFFFFFFF CBFD92C5F92C5F92DBFD5555555555558BCC80000000000004005555555555553BFD7F 0D4629B7F0EBFD5555555555558BCC8000000000000400AAAAAAAAAAAA8BFD684BDA12 F684CBFD5555555555558BCC8000000000000400FFFFFFFFFFFFDBFD4E81B4E81B4E9B FD5555555555558BCC80000000000004012AAAAAAAAAAA9BFD31AED6A9264E4BFD5555 555555558BCC80000000000004015555555555554BFD11D33F561783ABFD5555555555 558BCC80000000000004017FFFFFFFFFFFFBFCDDDDDDDDDDDDFBFD5555555555558BCC 8000000000000401AAAAAAAAAAAAABFC9203CAE759204BFD5555555555558BCC800000 0000000401D555555555555BFC401845C8A0CE5BFD5555555555558BCC800000000000 04020000000000000BFBD0369D0369D02BFD5555555555558BCC800000000000040215 55555555555BFB1419CA252ADB4BFD5555555555558BCC80000000000004022AAAAAAA AAAAABF92F684BDA12F88BFD5555555555558BCC80000000000004023FFFFFFFFFFFF3 FA1111111111100BFD55555555555583FE555555555554FC024000000000000BFCBE02 468ACF135BFD55555555555583FE555555555554FC022AAAAAAAAAAABBFD01E573AC90 1E5BFD55555555555583FE555555555554FC021555555555556BFD21C10AFF9EE8EBFD 55555555555583FE555555555554FC020000000000001BFD3E93E93E93E93BFD555555 55555583FE555555555554FC01D555555555557BFD585E0E696F1F8BFD555555555555 83FE555555555554FC01AAAAAAAAAAAACBFD6F1F7A80308B9BFD55555555555583FE55 5555555554FC018000000000001BFD82D82D82D82D8BFD55555555555583FE55555555 5554FC015555555555556BFD9388277166055BFD55555555555583FE555555555554FC 012AAAAAAAAAAABBFDA12F684BDA130BFD55555555555583FE555555555554FC010000 000000000BFDABCDF01234568BFD55555555555583FE555555555554FC00AAAAAAAAAA AABBFDB363BEC474CFEBFD55555555555583FE555555555554FC005555555555556BFD B7F0D4629B7F1BFD55555555555583FE555555555554FC000000000000001BFDB97530 ECA8642BFD55555555555583FE555555555554FBFF5555555555558BFDB7F0D4629B7F 1BFD55555555555583FE555555555554FBFE555555555555BBFDB363BEC474CFEBFD55 555555555583FE555555555554FBCC8000000000000BFDABCDF01234568BFD55555555 555583FE555555555554F3FE555555555554FBFDA12F684BDA130BFD55555555555583 FE555555555554F3FF5555555555552BFD9388277166055BFD55555555555583FE5555 55555554F3FFFFFFFFFFFFFFCBFD82D82D82D82D9BFD55555555555583FE5555555555 54F4005555555555553BFD6F1F7A80308BABFD55555555555583FE555555555554F400 AAAAAAAAAAAA8BFD585E0E696F1F8BFD55555555555583FE555555555554F400FFFFFF FFFFFFDBFD3E93E93E93E95BFD55555555555583FE555555555554F4012AAAAAAAAAAA 9BFD21C10AFF9EE90BFD55555555555583FE555555555554F4015555555555554BFD01 E573AC901E6BFD55555555555583FE555555555554F4017FFFFFFFFFFFFBFCBE02468A CF137BFD55555555555583FE555555555554F401AAAAAAAAAAAAABFC722833944A55CB FD55555555555583FE555555555554F401D555555555555BFC203CAE759203DBFD5555 5555555583FE555555555554F4020000000000000BFB907F6E5D4C3B2BFD5555555555 5583FE555555555554F4021555555555555BFAA8C536FE1A8C9BFD55555555555583FE 555555555554F4022AAAAAAAAAAAABF6845C8A0CE5244BFD55555555555583FE555555 555554F4023FFFFFFFFFFFF3FA907F6E5D4C3A0BFD55555555555583FF555555555555 2C024000000000000BFC950C83FB72EA5BFD55555555555583FF5555555555552C022A AAAAAAAAAABBFCDAD524C9C413ABFD55555555555583FF5555555555552C0215555555 55556BFD0D4629B7F0D46BFD55555555555583FF5555555555552C020000000000001B FD2A1907F6E5D4BBFD55555555555583FF5555555555552C01D555555555557BFD43E3 2D21C10AFBFD55555555555583FF5555555555552C01AAAAAAAAAAAACBFD5AA4993882 771BFD55555555555583FF5555555555552C018000000000001BFD6E5D4C3B2A190BFD 55555555555583FF5555555555552C015555555555556BFD7F0D4629B7F0DBFD555555 55555583FF5555555555552C012AAAAAAAAAAABBFD8CB487042BFE8BFD555555555555 83FF5555555555552C010000000000000BFD97530ECA86420BFD55555555555583FF55 55555555552C00AAAAAAAAAAAABBFD9EE8DD7CC6BB6BFD55555555555583FF55555555 55552C005555555555556BFDA375F31AED6A9BFD55555555555583FF5555555555552C 000000000000001BFDA4FA4FA4FA4FABFD55555555555583FF5555555555552BFF5555 555555558BFDA375F31AED6A9BFD55555555555583FF5555555555552BFE5555555555 55BBFD9EE8DD7CC6BB6BFD55555555555583FF5555555555552BCC8000000000000BFD 97530ECA86420BFD55555555555583FF55555555555523FE555555555554FBFD8CB487 042BFE8BFD55555555555583FF55555555555523FF5555555555552BFD7F0D4629B7F0 DBFD55555555555583FF55555555555523FFFFFFFFFFFFFFCBFD6E5D4C3B2A191BFD55 555555555583FF55555555555524005555555555553BFD5AA4993882772BFD55555555 555583FF5555555555552400AAAAAAAAAAAA8BFD43E32D21C10B0BFD55555555555583 FF5555555555552400FFFFFFFFFFFFDBFD2A1907F6E5D4DBFD55555555555583FF5555 5555555524012AAAAAAAAAAA9BFD0D4629B7F0D48BFD55555555555583FF5555555555 5524015555555555554BFCDAD524C9C413DBFD55555555555583FF5555555555552401 7FFFFFFFFFFFFBFC950C83FB72EA7BFD55555555555583FF5555555555552401AAAAAA AAAAAAABFC49327104EE2CCBFD55555555555583FF5555555555552401D55555555555 5BFBEE8DD7CC6BB5BBFD55555555555583FF55555555555524020000000000000BFB3E 93E93E93E92BFD55555555555583FF55555555555524021555555555555BFA04EE2CC0 A9E89BFD55555555555583FF55555555555524022AAAAAAAAAAAA3F91722833944A38B FD55555555555583FF55555555555524023FFFFFFFFFFFF3FB1A2B3C4D5E6F0BFD5555 5555555583FFFFFFFFFFFFFFCC024000000000000BFC62FC962FC9631BFD5555555555 5583FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFCA8C536FE1A8C6BFD55555555555583FF FFFFFFFFFFFFCC021555555555556BFCE87C65A438217BFD55555555555583FFFFFFFF FFFFFFCC020000000000001BFD1111111111111BFD55555555555583FFFFFFFFFFFFFF CC01D555555555557BFD2ADB363BEC475BFD55555555555583FFFFFFFFFFFFFFCC01AA AAAAAAAAAACBFD419CA252ADB37BFD55555555555583FFFFFFFFFFFFFFCC0180000000 00001BFD5555555555556BFD55555555555583FFFFFFFFFFFFFFCC015555555555556B FD66054F43E32D3BFD55555555555583FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFD73AC 901E573AEBFD55555555555583FFFFFFFFFFFFFFCC010000000000000BFD7E4B17E4B1 7E6BFD55555555555583FFFFFFFFFFFFFFCC00AAAAAAAAAAAABBFD85E0E696F1F7CBFD 55555555555583FFFFFFFFFFFFFFCC005555555555556BFD8A6DFC3518A6FBFD555555 55555583FFFFFFFFFFFFFFCC000000000000001BFD8BF258BF258C0BFD555555555555 83FFFFFFFFFFFFFFCBFF5555555555558BFD8A6DFC3518A6FBFD55555555555583FFFF FFFFFFFFFFCBFE555555555555BBFD85E0E696F1F7CBFD55555555555583FFFFFFFFFF FFFFCBCC8000000000000BFD7E4B17E4B17E6BFD55555555555583FFFFFFFFFFFFFFC3 FE555555555554FBFD73AC901E573AEBFD55555555555583FFFFFFFFFFFFFFC3FF5555 555555552BFD66054F43E32D3BFD55555555555583FFFFFFFFFFFFFFC3FFFFFFFFFFFF FFCBFD5555555555557BFD55555555555583FFFFFFFFFFFFFFC4005555555555553BFD 419CA252ADB38BFD55555555555583FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFD2ADB36 3BEC476BFD55555555555583FFFFFFFFFFFFFFC400FFFFFFFFFFFFDBFD111111111111 3BFD55555555555583FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFCE87C65A43821CBFD55 555555555583FFFFFFFFFFFFFFC4015555555555554BFCA8C536FE1A8C9BFD55555555 555583FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFC62FC962FC9633BFD55555555555583 FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFC1722833944A58BFD55555555555583FFFFFF FFFFFFFFC401D555555555555BFB8A6DFC3518A73BFD55555555555583FFFFFFFFFFFF FFC4020000000000000BFAB4E81B4E81B54BFD55555555555583FFFFFFFFFFFFFFC402 1555555555555BF7E573AC901E5C5BFD55555555555583FFFFFFFFFFFFFFC4022AAAAA AAAAAAA3FA53D0F8CB486F0BFD55555555555583FFFFFFFFFFFFFFC4023FFFFFFFFFFF F3FB7E4B17E4B17DABFD55555555555584005555555555553C024000000000000BFC27 D27D27D27D7BFD55555555555584005555555555553C022AAAAAAAAAAABBFC6D9B1DF6 23A6ABFD55555555555584005555555555553C021555555555556BFCAD524C9C413BBB FD55555555555584005555555555553C020000000000001BFCE6F8091A2B3C6BFD5555 5555555584005555555555553C01D555555555557BFD0D4629B7F0D47BFD5555555555 5584005555555555553C01AAAAAAAAAAAACBFD240795CEB2409BFD5555555555558400 5555555555553C018000000000001BFD37C048D159E28BFD5555555555558400555555 5555553C015555555555556BFD487042BFE7BA5BFD5555555555558400555555555555 3C012AAAAAAAAAAABBFD5617839A5BC80BFD55555555555584005555555555553C0100 00000000000BFD60B60B60B60B8BFD55555555555584005555555555553C00AAAAAAAA AAAABBFD684BDA12F684EBFD55555555555584005555555555553C005555555555556B FD6CD8EFB11D341BFD55555555555584005555555555553C000000000000001BFD6E5D 4C3B2A192BFD55555555555584005555555555553BFF5555555555558BFD6CD8EFB11D 341BFD55555555555584005555555555553BFE555555555555BBFD684BDA12F684EBFD 55555555555584005555555555553BCC8000000000000BFD60B60B60B60B8BFD555555 555555840055555555555533FE555555555554FBFD5617839A5BC80BFD555555555555 840055555555555533FF5555555555552BFD487042BFE7BA5BFD555555555555840055 555555555533FFFFFFFFFFFFFFCBFD37C048D159E29BFD555555555555840055555555 555534005555555555553BFD240795CEB240ABFD555555555555840055555555555534 00AAAAAAAAAAAA8BFD0D4629B7F0D48BFD55555555555584005555555555553400FFFF FFFFFFFFDBFCE6F8091A2B3CABFD555555555555840055555555555534012AAAAAAAAA AA9BFCAD524C9C413C0BFD555555555555840055555555555534015555555555554BFC 6D9B1DF623A6DBFD555555555555840055555555555534017FFFFFFFFFFFFBFC27D27D 27D27D7BFD55555555555584005555555555553401AAAAAAAAAAAAABFBB7F0D4629B7F 9BFD55555555555584005555555555553401D555555555555BFB1419CA252ADBDBFD55 5555555555840055555555555534020000000000000BF9907F6E5D4C3C8BFD55555555 55558400555555555555340215555555555553F95FF3DD1BAF967BFD55555555555584 0055555555555534022AAAAAAAAAAAA3FB203CAE7592030BFD55555555555584005555 5555555534023FFFFFFFFFFFF3FBF49F49F49F492BFD5555555555558400AAAAAAAAAA AA8C024000000000000BFBC71C71C71C721BFD5555555555558400AAAAAAAAAAAA8C02 2AAAAAAAAAAABBFC2956D9B1DF624BFD5555555555558400AAAAAAAAAAAA8C02155555 5555556BFC690E0857FCF75BFD5555555555558400AAAAAAAAAAAA8C02000000000000 1BFCA2B3C4D5E6F80BFD5555555555558400AAAAAAAAAAAA8C01D555555555557BFCD6 480F2B9D648BFD5555555555558400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFD01E573AC 901E6BFD5555555555558400AAAAAAAAAAAA8C018000000000001BFD159E26AF37C05B FD5555555555558400AAAAAAAAAAAA8C015555555555556BFD264E209DC5982BFD5555 555555558400AAAAAAAAAAAA8C012AAAAAAAAAAABBFD33F5617839A5DBFD5555555555 558400AAAAAAAAAAAA8C010000000000000BFD3E93E93E93E95BFD5555555555558400 AAAAAAAAAAAA8C00AAAAAAAAAAAABBFD4629B7F0D462BBFD5555555555558400AAAAAA AAAAAA8C005555555555556BFD4AB6CD8EFB11EBFD5555555555558400AAAAAAAAAAAA 8C000000000000001BFD4C3B2A1907F6FBFD5555555555558400AAAAAAAAAAAA8BFF55 55555555558BFD4AB6CD8EFB11EBFD5555555555558400AAAAAAAAAAAA8BFE55555555 5555BBFD4629B7F0D462BBFD5555555555558400AAAAAAAAAAAA8BCC8000000000000B FD3E93E93E93E95BFD5555555555558400AAAAAAAAAAAA83FE555555555554FBFD33F5 617839A5DBFD5555555555558400AAAAAAAAAAAA83FF5555555555552BFD264E209DC5 982BFD5555555555558400AAAAAAAAAAAA83FFFFFFFFFFFFFFCBFD159E26AF37C06BFD 5555555555558400AAAAAAAAAAAA84005555555555553BFD01E573AC901E7BFD555555 5555558400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFCD6480F2B9D64BBFD555555555555 8400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFCA2B3C4D5E6F84BFD5555555555558400AA AAAAAAAAAA84012AAAAAAAAAAA9BFC690E0857FCF79BFD5555555555558400AAAAAAAA AAAA84015555555555554BFC2956D9B1DF628BFD5555555555558400AAAAAAAAAAAA84 017FFFFFFFFFFFFBFBC71C71C71C725BFD5555555555558400AAAAAAAAAAAA8401AAAA AAAAAAAAABFB2F684BDA12F6FBFD5555555555558400AAAAAAAAAAAA8401D555555555 555BFA1722833944A61BFD5555555555558400AAAAAAAAAAAA840200000000000003F8 23456789ABCD0BFD5555555555558400AAAAAAAAAAAA840215555555555553FAC10AFF 9EE8DCBBFD5555555555558400AAAAAAAAAAAA84022AAAAAAAAAAAA3FBA8C536FE1A8B CBFD5555555555558400AAAAAAAAAAAA84023FFFFFFFFFFFF3FC3E93E93E93E8FBFD55 55555555558400FFFFFFFFFFFFDC024000000000000BFB2C5F92C5F92CDBFD55555555 55558400FFFFFFFFFFFFDC022AAAAAAAAAAABBFBB7F0D4629B7F4BFD55555555555584 00FFFFFFFFFFFFDC021555555555556BFC1BAF98D76B54BBFD5555555555558400FFFF FFFFFFFFDC020000000000001BFC5555555555556BFD5555555555558400FFFFFFFFFF FFDC01D555555555557BFC88E99FAB0BC1EBFD5555555555558400FFFFFFFFFFFFDC01 AAAAAAAAAAAACBFCB66C77D88E9A2BFD5555555555558400FFFFFFFFFFFFDC01800000 0000001BFCDDDDDDDDDDDE0BFD5555555555558400FFFFFFFFFFFFDC01555555555555 6BFCFF3DD1BAF98DABFD5555555555558400FFFFFFFFFFFFDC012AAAAAAAAAAABBFD0D 4629B7F0D48BFD5555555555558400FFFFFFFFFFFFDC010000000000000BFD17E4B17E 4B180BFD5555555555558400FFFFFFFFFFFFDC00AAAAAAAAAAAABBFD1F7A80308B916B FD5555555555558400FFFFFFFFFFFFDC005555555555556BFD240795CEB2409BFD5555 555555558400FFFFFFFFFFFFDC000000000000001BFD258BF258BF25ABFD5555555555 558400FFFFFFFFFFFFDBFF5555555555558BFD240795CEB2409BFD5555555555558400 FFFFFFFFFFFFDBFE555555555555BBFD1F7A80308B916BFD5555555555558400FFFFFF FFFFFFDBCC8000000000000BFD17E4B17E4B180BFD5555555555558400FFFFFFFFFFFF D3FE555555555554FBFD0D4629B7F0D48BFD5555555555558400FFFFFFFFFFFFD3FF55 55555555552BFCFF3DD1BAF98DBBFD5555555555558400FFFFFFFFFFFFD3FFFFFFFFFF FFFFCBFCDDDDDDDDDDDE2BFD5555555555558400FFFFFFFFFFFFD4005555555555553B FCB66C77D88E9A4BFD5555555555558400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFC88E9 9FAB0BC22BFD5555555555558400FFFFFFFFFFFFD400FFFFFFFFFFFFDBFC5555555555 55BBFD5555555555558400FFFFFFFFFFFFD4012AAAAAAAAAAA9BFC1BAF98D76B54FBFD 5555555555558400FFFFFFFFFFFFD4015555555555554BFBB7F0D4629B7FBBFD555555 5555558400FFFFFFFFFFFFD4017FFFFFFFFFFFFBFB2C5F92C5F92D1BFD555555555555 8400FFFFFFFFFFFFD401AAAAAAAAAAAAABFA2956D9B1DF636BFD5555555555558400FF FFFFFFFFFFD401D5555555555553F6E573AC901E46FBFD5555555555558400FFFFFFFF FFFFD40200000000000003FA7E4B17E4B17DCBFD5555555555558400FFFFFFFFFFFFD4 0215555555555553FB7B425ED097B3ABFD5555555555558400FFFFFFFFFFFFD4022AAA AAAAAAAAA3FC21C10AFF9EE88BFD5555555555558400FFFFFFFFFFFFD4023FFFFFFFFF FFF3FC8BF258BF258B9BFD55555555555584012AAAAAAAAAAA9C024000000000000BF9 FDB97530ECAA4BFD55555555555584012AAAAAAAAAAA9C022AAAAAAAAAAABBFB0AFF9E E8DD7D0BFD55555555555584012AAAAAAAAAAA9C021555555555556BFB8A6DFC3518A7 2BFD55555555555584012AAAAAAAAAAA9C020000000000001BFBFDB97530ECA87BFD55 555555555584012AAAAAAAAAAA9C01D555555555557BFC327104EE2CC0CBFD55555555 555584012AAAAAAAAAAA9C01AAAAAAAAAAAACBFC5FF3DD1BAF990BFD55555555555584 012AAAAAAAAAAA9C018000000000001BFC87654320FEDCEBFD55555555555584012AAA AAAAAAAA9C015555555555556BFCA8C536FE1A8C8BFD55555555555584012AAAAAAAAA AA9C012AAAAAAAAAAABBFCC413B8B302A7DBFD55555555555584012AAAAAAAAAAA9C01 0000000000000BFCD950C83FB72EEBFD55555555555584012AAAAAAAAAAA9C00AAAAAA AAAAAABBFCE87C65A43821ABFD55555555555584012AAAAAAAAAAA9C00555555555555 6BFCF19690E085801BFD55555555555584012AAAAAAAAAAA9C000000000000001BFCF4 9F49F49F4A3BFD55555555555584012AAAAAAAAAAA9BFF5555555555558BFCF19690E0 85800BFD55555555555584012AAAAAAAAAAA9BFE555555555555BBFCE87C65A43821AB FD55555555555584012AAAAAAAAAAA9BCC8000000000000BFCD950C83FB72EEBFD5555 5555555584012AAAAAAAAAAA93FE555555555554FBFCC413B8B302A7EBFD5555555555 5584012AAAAAAAAAAA93FF5555555555552BFCA8C536FE1A8C9BFD5555555555558401 2AAAAAAAAAAA93FFFFFFFFFFFFFFCBFC87654320FEDD0BFD55555555555584012AAAAA AAAAAA94005555555555553BFC5FF3DD1BAF992BFD55555555555584012AAAAAAAAAAA 9400AAAAAAAAAAAA8BFC327104EE2CC10BFD55555555555584012AAAAAAAAAAA9400FF FFFFFFFFFFDBFBFDB97530ECA91BFD55555555555584012AAAAAAAAAAA94012AAAAAAA AAAA9BFB8A6DFC3518A79BFD55555555555584012AAAAAAAAAAA94015555555555554B FB0AFF9EE8DD7D7BFD55555555555584012AAAAAAAAAAA94017FFFFFFFFFFFFBF9FDB9 7530ECAB2BFD55555555555584012AAAAAAAAAAA9401AAAAAAAAAAAAA3F7845C8A0CE5 093BFD55555555555584012AAAAAAAAAAA9401D5555555555553FA7839A5BC7DE8FBFD 55555555555584012AAAAAAAAAAA940200000000000003FB6C16C16C16C11BFD555555 55555584012AAAAAAAAAAA940215555555555553FC1419CA252ADAFBFD555555555555 84012AAAAAAAAAAA94022AAAAAAAAAAAA3FC7839A5BC7DE9ABFD55555555555584012A AAAAAAAAAA94023FFFFFFFFFFFF3FCE26AF37C048CBBFD555555555555840155555555 55554C0240000000000003F8FDB97530ECA57BFD55555555555584015555555555554C 022AAAAAAAAAAABBF92F684BDA12F70BFD55555555555584015555555555554C021555 555555556BFA9690E0857FD03BFD55555555555584015555555555554C020000000000 001BFB3E93E93E93E97BFD55555555555584015555555555554C01D555555555557BFB A5BC7DEA00C28BFD55555555555584015555555555554C01AAAAAAAAAAAACBFC006117 2283398BFD55555555555584015555555555554C018000000000001BFC27D27D27D27D 6BFD55555555555584015555555555554C015555555555556BFC49327104EE2CEBFD55 555555555584015555555555554C012AAAAAAAAAAABBFC6480F2B9D6484BFD55555555 555584015555555555554C010000000000000BFC79BE02468ACF5BFD55555555555584 015555555555554C00AAAAAAAAAAAABBFC88E99FAB0BC21BFD55555555555584015555 555555554C005555555555556BFC9203CAE759208BFD55555555555584015555555555 554C000000000000001BFC950C83FB72EAABFD55555555555584015555555555554BFF 5555555555558BFC9203CAE759207BFD55555555555584015555555555554BFE555555 555555BBFC88E99FAB0BC21BFD55555555555584015555555555554BCC800000000000 0BFC79BE02468ACF5BFD555555555555840155555555555543FE555555555554FBFC64 80F2B9D6485BFD555555555555840155555555555543FF5555555555552BFC49327104 EE2D0BFD555555555555840155555555555543FFFFFFFFFFFFFFCBFC27D27D27D27D7B FD555555555555840155555555555544005555555555553BFC0061172283399BFD5555 5555555584015555555555554400AAAAAAAAAAAA8BFBA5BC7DEA00C2DBFD5555555555 5584015555555555554400FFFFFFFFFFFFDBFB3E93E93E93E9FBFD5555555555558401 55555555555544012AAAAAAAAAAA9BFA9690E0857FD0EBFD5555555555558401555555 55555544015555555555554BF92F684BDA12F95BFD5555555555558401555555555555 44017FFFFFFFFFFFF3F8FDB97530ECA2CBFD55555555555584015555555555554401AA AAAAAAAAAAA3FAAED6A9264E1F8BFD55555555555584015555555555554401D5555555 555553FB7B425ED097B3ABFD5555555555558401555555555555440200000000000003 FC159E26AF37C02BFD5555555555558401555555555555440215555555555553FC73AC 901E573A8BFD555555555555840155555555555544022AAAAAAAAAAAA3FCD7CC6BB5AA 493BFD555555555555840155555555555544023FFFFFFFFFFFF3FD20FEDCBA98762BFD 55555555555584017FFFFFFFFFFFFC0240000000000003FB111111111110BBFD555555 55555584017FFFFFFFFFFFFC022AAAAAAAAAAAB3FA0AFF9EE8DD7C8BFD555555555555 84017FFFFFFFFFFFFC0215555555555563F5845C8A0CE50A0BFD55555555555584017F FFFFFFFFFFFC020000000000001BF9B4E81B4E81B4DBFD55555555555584017FFFFFFF FFFFFC01D555555555557BFAA8C536FE1A8C7BFD55555555555584017FFFFFFFFFFFFC 01AAAAAAAAAAAACBFB2F684BDA12F6CBFD55555555555584017FFFFFFFFFFFFC018000 000000001BFB7E4B17E4B17E8BFD55555555555584017FFFFFFFFFFFFC015555555555 556BFBC10AFF9EE8DDDBFD55555555555584017FFFFFFFFFFFFC012AAAAAAAAAAABBFB F7A80308B9147BFD55555555555584017FFFFFFFFFFFFC010000000000000BFC111111 1111114BFD55555555555584017FFFFFFFFFFFFC00AAAAAAAAAAAABBFC203CAE759204 0BFD55555555555584017FFFFFFFFFFFFC005555555555556BFC2956D9B1DF627BFD55 555555555584017FFFFFFFFFFFFC000000000000001BFC2C5F92C5F92C9BFD55555555 555584017FFFFFFFFFFFFBFF5555555555558BFC2956D9B1DF626BFD55555555555584 017FFFFFFFFFFFFBFE555555555555BBFC203CAE7592040BFD55555555555584017FFF FFFFFFFFFBCC8000000000000BFC1111111111114BFD55555555555584017FFFFFFFFF FFF3FE555555555554FBFBF7A80308B9149BFD55555555555584017FFFFFFFFFFFF3FF 5555555555552BFBC10AFF9EE8DDFBFD55555555555584017FFFFFFFFFFFF3FFFFFFFF FFFFFFCBFB7E4B17E4B17ECBFD55555555555584017FFFFFFFFFFFF400555555555555 3BFB2F684BDA12F70BFD55555555555584017FFFFFFFFFFFF400AAAAAAAAAAAA8BFAA8 C536FE1A8D7BFD55555555555584017FFFFFFFFFFFF400FFFFFFFFFFFFDBF9B4E81B4E 81B74BFD55555555555584017FFFFFFFFFFFF4012AAAAAAAAAAA93F5845C8A0CE4EB1B FD55555555555584017FFFFFFFFFFFF40155555555555543FA0AFF9EE8DD7BABFD5555 5555555584017FFFFFFFFFFFF4017FFFFFFFFFFFF3FB1111111111108BFD5555555555 5584017FFFFFFFFFFFF401AAAAAAAAAAAAA3FBA8C536FE1A8BEBFD5555555555558401 7FFFFFFFFFFFF401D5555555555553FC264E209DC597EBFD55555555555584017FFFFF FFFFFFF40200000000000003FC7E4B17E4B17E2BFD55555555555584017FFFFFFFFFFF F40215555555555553FCDC598153D0F89BFD55555555555584017FFFFFFFFFFFF4022A AAAAAAAAAAA3FD203CAE759203ABFD55555555555584017FFFFFFFFFFFF4023FFFFFFF FFFFF3FD5555555555552BFD5555555555558401AAAAAAAAAAAAAC0240000000000003 FBF49F49F49F49BBFD5555555555558401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FB690E 0857FCF72BFD5555555555558401AAAAAAAAAAAAAC0215555555555563FAD33F561783 9A1BFD5555555555558401AAAAAAAAAAAAAC0200000000000013F9D950C83FB72EBBFD 5555555555558401AAAAAAAAAAAAAC01D5555555555573F6E573AC901E549BFD555555 5555558401AAAAAAAAAAAAAC01AAAAAAAAAAAACBF92F684BDA12F77BFD555555555555 8401AAAAAAAAAAAAAC018000000000001BFA3579BE02468B3BFD5555555555558401AA AAAAAAAAAAAC015555555555556BFABAF98D76B549EBFD5555555555558401AAAAAAAA AAAAAC012AAAAAAAAAAABBFB1419CA252ADB9BFD5555555555558401AAAAAAAAAAAAAC 010000000000000BFB3E93E93E93E9ABFD5555555555558401AAAAAAAAAAAAAC00AAAA AAAAAAAABBFB5CEB240795CF1BFD5555555555558401AAAAAAAAAAAAAC005555555555 556BFB6F1F7A80308BFBFD5555555555558401AAAAAAAAAAAAAC000000000000001BFB 7530ECA864204BFD5555555555558401AAAAAAAAAAAAABFF5555555555558BFB6F1F7A 80308BFBFD5555555555558401AAAAAAAAAAAAABFE555555555555BBFB5CEB240795CF 2BFD5555555555558401AAAAAAAAAAAAABCC8000000000000BFB3E93E93E93E9BBFD55 55555555558401AAAAAAAAAAAAA3FE555555555554FBFB1419CA252ADBBBFD55555555 55558401AAAAAAAAAAAAA3FF5555555555552BFABAF98D76B54A2BFD55555555555584 01AAAAAAAAAAAAA3FFFFFFFFFFFFFFCBFA3579BE02468BCBFD5555555555558401AAAA AAAAAAAAA4005555555555553BF92F684BDA12F8ABFD5555555555558401AAAAAAAAAA AAA400AAAAAAAAAAAA83F6E573AC901E461BFD5555555555558401AAAAAAAAAAAAA400 FFFFFFFFFFFFD3F9D950C83FB72C5BFD5555555555558401AAAAAAAAAAAAA4012AAAAA AAAAAA93FAD33F561783992BFD5555555555558401AAAAAAAAAAAAA401555555555555 43FB690E0857FCF6BBFD5555555555558401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FBF4 9F49F49F496BFD5555555555558401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FC4629B7F0 D4626BFD5555555555558401AAAAAAAAAAAAA401D5555555555553FC98153D0F8CB45B FD5555555555558401AAAAAAAAAAAAA40200000000000003FCF0123456789AABFD5555 555555558401AAAAAAAAAAAAA40215555555555553FD27104EE2CC0A8BFD5555555555 558401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FD59203CAE7591DBFD5555555555558401 AAAAAAAAAAAAA4023FFFFFFFFFFFF3FD8E38E38E38E36BFD5555555555558401D55555 5555555C0240000000000003FC7530ECA8641FCBFD5555555555558401D55555555555 5C022AAAAAAAAAAAB3FC2F684BDA12F69BFD5555555555558401D555555555555C0215 555555555563FBDF623A67EAC30BFD5555555555558401D555555555555C0200000000 000013FB6C16C16C16C1ABFD5555555555558401D555555555555C01D5555555555573 FB04EE2CC0A9E89BFD5555555555558401D555555555555C01AAAAAAAAAAAAC3FA53D0 F8CB48703BFD5555555555558401D555555555555C0180000000000013F96C16C16C16 C15BFD5555555555558401D555555555555C0155555555555563F7845C8A0CE5102BFD 5555555555558401D555555555555C012AAAAAAAAAAABBF7E573AC901E590BFD555555 5555558401D555555555555C010000000000000BF923456789ABCEABFD555555555555 8401D555555555555C00AAAAAAAAAAAABBF99CA252ADB3647BFD5555555555558401D5 55555555555C005555555555556BF9E573AC901E57FBFD5555555555558401D5555555 55555C000000000000001BF9FDB97530ECA93BFD5555555555558401D555555555555B FF5555555555558BF9E573AC901E580BFD5555555555558401D555555555555BFE5555 55555555BBF99CA252ADB364ABFD5555555555558401D555555555555BCC8000000000 000BF923456789ABCEEBFD5555555555558401D5555555555553FE555555555554FBF7 E573AC901E5B1BFD5555555555558401D5555555555553FF55555555555523F7845C8A 0CE50E9BFD5555555555558401D5555555555553FFFFFFFFFFFFFFC3F96C16C16C16C0 5BFD5555555555558401D55555555555540055555555555533FA53D0F8CB486FABFD55 55555555558401D555555555555400AAAAAAAAAAAA83FB04EE2CC0A9E82BFD55555555 55558401D555555555555400FFFFFFFFFFFFD3FB6C16C16C16C10BFD55555555555584 01D5555555555554012AAAAAAAAAAA93FBDF623A67EAC28BFD5555555555558401D555 55555555540155555555555543FC2F684BDA12F65BFD5555555555558401D555555555 5554017FFFFFFFFFFFF3FC7530ECA8641FABFD5555555555558401D555555555555401 AAAAAAAAAAAAA3FCC10AFF9EE8DD6BFD5555555555558401D555555555555401D55555 55555553FD097B425ED097ABFD5555555555558401D555555555555402000000000000 03FD3579BE02468ACBFD5555555555558401D55555555555540215555555555553FD64 80F2B9D6480BFD5555555555558401D5555555555554022AAAAAAAAAAAA3FD9690E085 7FCF5BFD5555555555558401D5555555555554023FFFFFFFFFFFF3FDCBA987654320EB FD55555555555584020000000000000C0240000000000003FCF92C5F92C5F94BFD5555 5555555584020000000000000C022AAAAAAAAAAAB3FCB363BEC474D01BFD5555555555 5584020000000000000C0215555555555563FC73AC901E573AFBFD5555555555558402 0000000000000C0200000000000013FC3A06D3A06D3A4BFD5555555555558402000000 0000000C01D5555555555573FC0672894AB6CDCBFD5555555555558402000000000000 0C01AAAAAAAAAAAAC3FBB1DF623A67EB0BFD55555555555584020000000000000C0180 000000000013FB62FC962FC9634BFD55555555555584020000000000000C0155555555 555563FB203CAE759203FBFD55555555555584020000000000000C012AAAAAAAAAAAB3 FAD33F5617839ABBFD55555555555584020000000000000C0100000000000003FA7E4B 17E4B17E8BFD55555555555584020000000000000C00AAAAAAAAAAAAB3FA419CA252AD B3ABFD55555555555584020000000000000C0055555555555563FA1D33F5617839EBFD 55555555555584020000000000000C0000000000000013FA1111111111114BFD555555 55555584020000000000000BFF55555555555583FA1D33F5617839DBFD555555555555 84020000000000000BFE555555555555B3FA419CA252ADB39BFD555555555555840200 00000000000BCC80000000000003FA7E4B17E4B17E7BFD555555555555840200000000 000003FE555555555554F3FAD33F5617839A7BFD555555555555840200000000000003 FF55555555555523FB203CAE759203DBFD555555555555840200000000000003FFFFFF FFFFFFFFC3FB62FC962FC9630BFD555555555555840200000000000004005555555555 5533FBB1DF623A67EACBFD55555555555584020000000000000400AAAAAAAAAAAA83FC 0672894AB6CD8BFD55555555555584020000000000000400FFFFFFFFFFFFD3FC3A06D3 A06D39FBFD555555555555840200000000000004012AAAAAAAAAAA93FC73AC901E573A BBFD5555555555558402000000000000040155555555555543FCB363BEC474CFCBFD55 5555555555840200000000000004017FFFFFFFFFFFF3FCF92C5F92C5F92BFD55555555 555584020000000000000401AAAAAAAAAAAAA3FD22833944A55B6BFD55555555555584 020000000000000401D5555555555553FD4B78FBD401846BFD55555555555584020000 00000000040200000000000003FD7777777777778BFD55555555555584020000000000 00040215555555555553FDA67EAC2F0734BBFD55555555555584020000000000000402 2AAAAAAAAAAAA3FDD88E99FAB0BC1BFD555555555555840200000000000004023FFFFF FFFFFFF3FE06D3A06D3A06DBFD55555555555584021555555555555C02400000000000 03FD4320FEDCBA987BFD55555555555584021555555555555C022AAAAAAAAAAAB3FD20 3CAE759203DBFD55555555555584021555555555555C0215555555555563FD00611722 83394BFD55555555555584021555555555555C0200000000000013FCC71C71C71C71DB FD55555555555584021555555555555C01D5555555555573FC9388277166055BFD5555 5555555584021555555555555C01AAAAAAAAAAAAC3FC66054F43E32D1BFD5555555555 5584021555555555555C0180000000000013FC3E93E93E93E93BFD5555555555558402 1555555555555C0155555555555563FC1D33F56178399BFD5555555555558402155555 5555555C012AAAAAAAAAAAB3FC01E573AC901E4BFD5555555555558402155555555555 5C0100000000000003FBD950C83FB72E6BFD55555555555584021555555555555C00AA AAAAAAAAAAB3FBBAF98D76B548FBFD55555555555584021555555555555C0055555555 555563FBA8C536FE1A8C1BFD55555555555584021555555555555C0000000000000013 FBA2B3C4D5E6F7CBFD55555555555584021555555555555BFF55555555555583FBA8C5 36FE1A8C1BFD55555555555584021555555555555BFE555555555555B3FBBAF98D76B5 48EBFD55555555555584021555555555555BCC80000000000003FBD950C83FB72E5BFD 555555555555840215555555555553FE555555555554F3FC01E573AC901E3BFD555555 555555840215555555555553FF55555555555523FC1D33F56178398BFD555555555555 840215555555555553FFFFFFFFFFFFFFC3FC3E93E93E93E91BFD555555555555840215 5555555555540055555555555533FC66054F43E32CFBFD555555555555840215555555 55555400AAAAAAAAAAAA83FC9388277166051BFD555555555555840215555555555554 00FFFFFFFFFFFFD3FCC71C71C71C718BFD555555555555840215555555555554012AAA AAAAAAAA93FD0061172283392BFD555555555555840215555555555554015555555555 5543FD203CAE759203BBFD555555555555840215555555555554017FFFFFFFFFFFF3FD 4320FEDCBA985BFD55555555555584021555555555555401AAAAAAAAAAAAA3FD690E08 57FCF73BFD55555555555584021555555555555401D5555555555553FD9203CAE75920 2BFD5555555555558402155555555555540200000000000003FDBE02468ACF134BFD55 55555555558402155555555555540215555555555553FDED097B425ED08BFD55555555 5555840215555555555554022AAAAAAAAAAAA3FE0F8CB487042BFBFD55555555555584 0215555555555554023FFFFFFFFFFFF3FE2A1907F6E5D4BBFD55555555555584022AAA AAAAAAAAAC0240000000000003FD8E38E38E38E36BFD55555555555584022AAAAAAAAA AAAC022AAAAAAAAAAAB3FD6B549327104EDBFD55555555555584022AAAAAAAAAAAAC02 15555555555563FD4B78FBD401844BFD55555555555584022AAAAAAAAAAAAC02000000 00000013FD2EA61D950C83EBFD55555555555584022AAAAAAAAAAAAC01D55555555555 73FD14DBF86A314DABFD55555555555584022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FCFC 3518A6DFC31BFD55555555555584022AAAAAAAAAAAAC0180000000000013FCD4C3B2A1 907F3BFD55555555555584022AAAAAAAAAAAAC0155555555555563FCB363BEC474CF9B FD55555555555584022AAAAAAAAAAAAC012AAAAAAAAAAAB3FC98153D0F8CB44BFD5555 5555555584022AAAAAAAAAAAAC0100000000000003FC82D82D82D82D3BFD5555555555 5584022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FC73AC901E573A7BFD5555555555558402 2AAAAAAAAAAAAC0055555555555563FC6A9264E209DC0BFD55555555555584022AAAAA AAAAAAAC0000000000000013FC6789ABCDF011EBFD55555555555584022AAAAAAAAAAA ABFF55555555555583FC6A9264E209DC1BFD55555555555584022AAAAAAAAAAAABFE55 5555555555B3FC73AC901E573A7BFD55555555555584022AAAAAAAAAAAABCC80000000 000003FC82D82D82D82D3BFD55555555555584022AAAAAAAAAAAA3FE555555555554F3 FC98153D0F8CB43BFD55555555555584022AAAAAAAAAAAA3FF55555555555523FCB363 BEC474CF8BFD55555555555584022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FCD4C3B2A190 7F1BFD55555555555584022AAAAAAAAAAAA40055555555555533FCFC3518A6DFC2FBFD 55555555555584022AAAAAAAAAAAA400AAAAAAAAAAAA83FD14DBF86A314D9BFD555555 55555584022AAAAAAAAAAAA400FFFFFFFFFFFFD3FD2EA61D950C83CBFD555555555555 84022AAAAAAAAAAAA4012AAAAAAAAAAA93FD4B78FBD401842BFD55555555555584022A AAAAAAAAAAA40155555555555543FD6B549327104EBBFD55555555555584022AAAAAAA AAAAA4017FFFFFFFFFFFF3FD8E38E38E38E35BFD55555555555584022AAAAAAAAAAAA4 01AAAAAAAAAAAAA3FDB425ED097B423BFD55555555555584022AAAAAAAAAAAA401D555 5555555553FDDD1BAF98D76B2BFD55555555555584022AAAAAAAAAAAA4020000000000 0003FE048D159E26AF2BFD55555555555584022AAAAAAAAAAAA40215555555555553FE 1C10AFF9EE8DCBFD55555555555584022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE3518A6 DFC3517BFD55555555555584022AAAAAAAAAAAA4023FFFFFFFFFFFF3FE4FA4FA4FA4FA 3BFD55555555555584023FFFFFFFFFFFFC0240000000000003FDDDDDDDDDDDDDBBFD55 555555555584023FFFFFFFFFFFFC022AAAAAAAAAAAB3FDBAF98D76B5491BFD55555555 555584023FFFFFFFFFFFFC0215555555555563FD9B1DF623A67E9BFD55555555555584 023FFFFFFFFFFFFC0200000000000013FD7E4B17E4B17E3BFD55555555555584023FFF FFFFFFFFFC01D5555555555573FD6480F2B9D647FBFD55555555555584023FFFFFFFFF FFFC01AAAAAAAAAAAAC3FD4DBF86A314DBDBFD55555555555584023FFFFFFFFFFFFC01 80000000000013FD3A06D3A06D39EBFD55555555555584023FFFFFFFFFFFFC01555555 55555563FD2956D9B1DF621BFD55555555555584023FFFFFFFFFFFFC012AAAAAAAAAAA B3FD1BAF98D76B546BFD55555555555584023FFFFFFFFFFFFC0100000000000003FD11 1111111110EBFD55555555555584023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FD097B425E D0978BFD55555555555584023FFFFFFFFFFFFC0055555555555563FD04EE2CC0A9E85B FD55555555555584023FFFFFFFFFFFFC0000000000000013FD0369D0369D034BFD5555 5555555584023FFFFFFFFFFFFBFF55555555555583FD04EE2CC0A9E85BFD5555555555 5584023FFFFFFFFFFFFBFE555555555555B3FD097B425ED0978BFD5555555555558402 3FFFFFFFFFFFFBCC80000000000003FD111111111110EBFD55555555555584023FFFFF FFFFFFF3FE555555555554F3FD1BAF98D76B546BFD55555555555584023FFFFFFFFFFF F3FF55555555555523FD2956D9B1DF621BFD55555555555584023FFFFFFFFFFFF3FFFF FFFFFFFFFFC3FD3A06D3A06D39DBFD55555555555584023FFFFFFFFFFFF40055555555 555533FD4DBF86A314DBCBFD55555555555584023FFFFFFFFFFFF400AAAAAAAAAAAA83 FD6480F2B9D647EBFD55555555555584023FFFFFFFFFFFF400FFFFFFFFFFFFD3FD7E4B 17E4B17E1BFD55555555555584023FFFFFFFFFFFF4012AAAAAAAAAAA93FD9B1DF623A6 7E6BFD55555555555584023FFFFFFFFFFFF40155555555555543FDBAF98D76B5490BFD 55555555555584023FFFFFFFFFFFF4017FFFFFFFFFFFF3FDDDDDDDDDDDDDABFD555555 55555584023FFFFFFFFFFFF401AAAAAAAAAAAAA3FE01E573AC901E4BFD555555555555 84023FFFFFFFFFFFF401D5555555555553FE166054F43E32CBFD55555555555584023F FFFFFFFFFFF40200000000000003FE2C5F92C5F92C5BFD55555555555584023FFFFFFF FFFFF40215555555555553FE43E32D21C10AEBFD55555555555584023FFFFFFFFFFFF4 022AAAAAAAAAAAA3FE5CEB240795CE9BFD55555555555584023FFFFFFFFFFFF4023FFF FFFFFFFFF3FE7777777777775BFC555555555555BC024000000000000C024000000000 0003FA9999999999996BFC555555555555BC024000000000000C022AAAAAAAAAAAB3F9 04EE2CC0A9E90BFC555555555555BC024000000000000C021555555555556BF8F19690 E0857ECBFC555555555555BC024000000000000C020000000000001BFA62FC962FC962 6BFC555555555555BC024000000000000C01D555555555557BFB18A6DFC3518A4BFC55 5555555555BC024000000000000C01AAAAAAAAAAAACBFB73AC901E573ACBFC55555555 5555BC024000000000000C018000000000001BFBC28F5C28F5C28BFC555555555555BC 024000000000000C015555555555556BFC02A7A1F19690EBFC555555555555BC024000 000000000C012AAAAAAAAAAABBFC1DF623A67EAC3BFC555555555555BC024000000000 000C010000000000000BFC3333333333334BFC555555555555BC024000000000000C00 AAAAAAAAAAAABBFC425ED097B4260BFC555555555555BC024000000000000C00555555 5555556BFC4B78FBD401847BFC555555555555BC024000000000000C00000000000000 1BFC4E81B4E81B4E9BFC555555555555BC024000000000000BFF5555555555558BFC4B 78FBD401846BFC555555555555BC024000000000000BFE555555555555BBFC425ED097 B4260BFC555555555555BC024000000000000BCC8000000000000BFC3333333333334B FC555555555555BC0240000000000003FE555555555554FBFC1DF623A67EAC4BFC5555 55555555BC0240000000000003FF5555555555552BFC02A7A1F19690FBFC5555555555 55BC0240000000000003FFFFFFFFFFFFFFCBFBC28F5C28F5C2CBFC555555555555BC02 40000000000004005555555555553BFB73AC901E573B0BFC555555555555BC02400000 0000000400AAAAAAAAAAAA8BFB18A6DFC3518ABBFC555555555555BC02400000000000 0400FFFFFFFFFFFFDBFA62FC962FC963ABFC555555555555BC0240000000000004012A AAAAAAAAAA9BF8F19690E08582ABFC555555555555BC02400000000000040155555555 555543F904EE2CC0A9E73BFC555555555555BC0240000000000004017FFFFFFFFFFFF3 FA999999999998FBFC555555555555BC024000000000000401AAAAAAAAAAAAA3FB6480 F2B9D647EBFC555555555555BC024000000000000401D5555555555553FC042BFE7BA3 75EBFC555555555555BC02400000000000040200000000000003FC5C28F5C28F5C2BFC 555555555555BC02400000000000040215555555555553FCBA375F31AED69BFC555555 555555BC0240000000000004022AAAAAAAAAAAA3FD0F2B9D6480F2ABFC555555555555 BC0240000000000004023FFFFFFFFFFFF3FD4444444444442BFC555555555555BC022A AAAAAAAAAABC024000000000000BF523456789ABC48BFC555555555555BC022AAAAAAA AAAABC022AAAAAAAAAAABBFA203CAE7592030BFC555555555555BC022AAAAAAAAAAABC 021555555555556BFB0F8CB487042BABFC555555555555BC022AAAAAAAAAAABC020000 000000001BFB82D82D82D82CFBFC555555555555BC022AAAAAAAAAAABC01D555555555 557BFBEA00C22E45060BFC555555555555BC022AAAAAAAAAAABC01AAAAAAAAAAAACBFC 22833944A55B4BFC555555555555BC022AAAAAAAAAAABC018000000000001BFC49F49F 49F49F2BFC555555555555BC022AAAAAAAAAAABC015555555555556BFC6B549327104E CBFC555555555555BC022AAAAAAAAAAABC012AAAAAAAAAAABBFC86A314DBF86A1BFC55 5555555555BC022AAAAAAAAAAABC010000000000000BFC9BE02468ACF12BFC55555555 5555BC022AAAAAAAAAAABC00AAAAAAAAAAAABBFCAB0BC1CD2DE3EBFC555555555555BC 022AAAAAAAAAAABC005555555555556BFCB425ED097B425BFC555555555555BC022AAA AAAAAAAABC000000000000001BFCB72EA61D950C7BFC555555555555BC022AAAAAAAAA AABBFF5555555555558BFCB425ED097B424BFC555555555555BC022AAAAAAAAAAABBFE 555555555555BBFCAB0BC1CD2DE3EBFC555555555555BC022AAAAAAAAAAABBCC800000 0000000BFC9BE02468ACF12BFC555555555555BC022AAAAAAAAAAAB3FE555555555554 FBFC86A314DBF86A2BFC555555555555BC022AAAAAAAAAAAB3FF5555555555552BFC6B 549327104EDBFC555555555555BC022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC49F49F49 F49F4BFC555555555555BC022AAAAAAAAAAAB4005555555555553BFC22833944A55B6B FC555555555555BC022AAAAAAAAAAAB400AAAAAAAAAAAA8BFBEA00C22E45067BFC5555 55555555BC022AAAAAAAAAAAB400FFFFFFFFFFFFDBFB82D82D82D82D9BFC5555555555 55BC022AAAAAAAAAAAB4012AAAAAAAAAAA9BFB0F8CB487042C1BFC555555555555BC02 2AAAAAAAAAAAB4015555555555554BFA203CAE759203EBFC555555555555BC022AAAAA AAAAAAB4017FFFFFFFFFFFFBF523456789ABD22BFC555555555555BC022AAAAAAAAAAA B401AAAAAAAAAAAAA3FA264E209DC5984BFC555555555555BC022AAAAAAAAAAAB401D5 555555555553FB36FE1A8C53700BFC555555555555BC022AAAAAAAAAAAB40200000000 000003FBE6F8091A2B3C9BFC555555555555BC022AAAAAAAAAAAB40215555555555553 FC518A6DFC3518BBFC555555555555BC022AAAAAAAAAAAB4022AAAAAAAAAAAA3FCB5AA 499388276BFC555555555555BC022AAAAAAAAAAAB4023FFFFFFFFFFFF3FD0FEDCBA987 653BFC555555555555BC021555555555556C024000000000000BFA87654320FEDCABFC 555555555555BC021555555555556C022AAAAAAAAAAABBFB4F43E32D21C0CBFC555555 555555BC021555555555556C021555555555556BFBCEB240795CEAEBFC555555555555 BC021555555555556C020000000000001BFC20FEDCBA98762BFC555555555555BC0215 55555555556C01D555555555557BFC549327104EE2ABFC555555555555BC0215555555 55556C01AAAAAAAAAAAACBFC8215FF3DD1BAEBFC555555555555BC021555555555556C 018000000000001BFCA987654320FECBFC555555555555BC021555555555556C015555 555555556BFCCAE759203CAE6BFC555555555555BC021555555555556C012AAAAAAAAA AABBFCE635DAD524C9BBFC555555555555BC021555555555556C010000000000000BFC FB72EA61D950CBFC555555555555BC021555555555556C00AAAAAAAAAAAABBFD054F43 E32D21CBFC555555555555BC021555555555556C005555555555556BFD09DC598153D0 FBFC555555555555BC021555555555556C000000000000001BFD0B60B60B60B60BFC55 5555555555BC021555555555556BFF5555555555558BFD09DC598153D0FBFC55555555 5555BC021555555555556BFE555555555555BBFD054F43E32D21CBFC555555555555BC 021555555555556BCC8000000000000BFCFB72EA61D950CBFC555555555555BC021555 5555555563FE555555555554FBFCE635DAD524C9CBFC555555555555BC021555555555 5563FF5555555555552BFCCAE759203CAE7BFC555555555555BC0215555555555563FF FFFFFFFFFFFFCBFCA987654320FEEBFC555555555555BC021555555555556400555555 5555553BFC8215FF3DD1BB0BFC555555555555BC021555555555556400AAAAAAAAAAAA 8BFC549327104EE2EBFC555555555555BC021555555555556400FFFFFFFFFFFFDBFC20 FEDCBA98767BFC555555555555BC0215555555555564012AAAAAAAAAAA9BFBCEB24079 5CEB5BFC555555555555BC0215555555555564015555555555554BFB4F43E32D21C13B FC555555555555BC0215555555555564017FFFFFFFFFFFFBFA87654320FEDD1BFC5555 55555555BC021555555555556401AAAAAAAAAAAAABF85FF3DD1BAF996BFC5555555555 55BC021555555555556401D5555555555553F9DF623A67EAC2EBFC555555555555BC02 155555555555640200000000000003FB27D27D27D27D6BFC555555555555BC02155555 555555640215555555555553FBE3EF500611722BFC555555555555BC02155555555555 64022AAAAAAAAAAAA3FC5617839A5BC7CBFC555555555555BC0215555555555564023F FFFFFFFFFFF3FCC048D159E26ADBFC555555555555BC020000000000001C0240000000 00000BFB70A3D70A3D705BFC555555555555BC020000000000001C022AAAAAAAAAAABB FBFC3518A6DFC2CBFC555555555555BC020000000000001C021555555555556BFC3DD1 BAF98D767BFC555555555555BC020000000000001C020000000000001BFC7777777777 772BFC555555555555BC020000000000001C01D555555555557BFCAB0BC1CD2DE3ABFC 555555555555BC020000000000001C01AAAAAAAAAAAACBFCD88E99FAB0BBEBFC555555 555555BC020000000000001C018000000000001BFCFFFFFFFFFFFFCBFC555555555555 BC020000000000001C015555555555556BFD10AFF9EE8DD7BBFC555555555555BC0200 00000000001C012AAAAAAAAAAABBFD1E573AC901E56BFC555555555555BC0200000000 00001C010000000000000BFD28F5C28F5C28EBFC555555555555BC020000000000001C 00AAAAAAAAAAAABBFD308B91419CA24BFC555555555555BC020000000000001C005555 555555556BFD3518A6DFC3517BFC555555555555BC020000000000001C000000000000 001BFD369D0369D0368BFC555555555555BC020000000000001BFF5555555555558BFD 3518A6DFC3517BFC555555555555BC020000000000001BFE555555555555BBFD308B91 419CA24BFC555555555555BC020000000000001BCC8000000000000BFD28F5C28F5C28 EBFC555555555555BC0200000000000013FE555555555554FBFD1E573AC901E56BFC55 5555555555BC0200000000000013FF5555555555552BFD10AFF9EE8DD7BBFC55555555 5555BC0200000000000013FFFFFFFFFFFFFFCBFCFFFFFFFFFFFFDBFC555555555555BC 0200000000000014005555555555553BFCD88E99FAB0BBFBFC555555555555BC020000 000000001400AAAAAAAAAAAA8BFCAB0BC1CD2DE3EBFC555555555555BC020000000000 001400FFFFFFFFFFFFDBFC7777777777777BFC555555555555BC020000000000001401 2AAAAAAAAAAA9BFC3DD1BAF98D76BBFC555555555555BC020000000000001401555555 5555554BFBFC3518A6DFC33BFC555555555555BC0200000000000014017FFFFFFFFFFF FBFB70A3D70A3D709BFC555555555555BC020000000000001401AAAAAAAAAAAAABFAB1 DF623A67EA6BFC555555555555BC020000000000001401D555555555555BF8A8C536FE 1A8A4BFC555555555555BC02000000000000140200000000000003F9EB851EB851ED8B FC555555555555BC02000000000000140215555555555553FB36FE1A8C53702BFC5555 55555555BC0200000000000014022AAAAAAAAAAAA3FBFF3DD1BAF98D8BFC5555555555 55BC0200000000000014023FFFFFFFFFFFF3FC69D0369D0369DBFC555555555555BC01 D555555555557C024000000000000BFC05B05B05B05ADBFC555555555555BC01D55555 5555557C022AAAAAAAAAAABBFC4B78FBD401840BFC555555555555BC01D55555555555 7C021555555555556BFC8B302A7A1F191BFC555555555555BC01D555555555557C0200 00000000001BFCC4D5E6F80919CBFC555555555555BC01D555555555557C01D5555555 55557BFCF86A314DBF864BFC555555555555BC01D555555555557C01AAAAAAAAAAAACB FD12F684BDA12F4BFC555555555555BC01D555555555557C018000000000001BFD26AF 37C048D13BFC555555555555BC01D555555555557C015555555555556BFD375F31AED6 A90BFC555555555555BC01D555555555557C012AAAAAAAAAAABBFD450672894AB6BBFC 555555555555BC01D555555555557C010000000000000BFD4FA4FA4FA4FA3BFC555555 555555BC01D555555555557C00AAAAAAAAAAAABBFD573AC901E5739BFC555555555555 BC01D555555555557C005555555555556BFD5BC7DEA00C22CBFC555555555555BC01D5 55555555557C000000000000001BFD5D4C3B2A1907DBFC555555555555BC01D5555555 55557BFF5555555555558BFD5BC7DEA00C22CBFC555555555555BC01D555555555557B FE555555555555BBFD573AC901E5739BFC555555555555BC01D555555555557BCC8000 000000000BFD4FA4FA4FA4FA3BFC555555555555BC01D5555555555573FE5555555555 54FBFD450672894AB6BBFC555555555555BC01D5555555555573FF5555555555552BFD 375F31AED6A90BFC555555555555BC01D5555555555573FFFFFFFFFFFFFFCBFD26AF37 C048D14BFC555555555555BC01D5555555555574005555555555553BFD12F684BDA12F 5BFC555555555555BC01D555555555557400AAAAAAAAAAAA8BFCF86A314DBF867BFC55 5555555555BC01D555555555557400FFFFFFFFFFFFDBFCC4D5E6F8091A0BFC55555555 5555BC01D5555555555574012AAAAAAAAAAA9BFC8B302A7A1F196BFC555555555555BC 01D5555555555574015555555555554BFC4B78FBD401843BFC555555555555BC01D555 5555555574017FFFFFFFFFFFFBFC05B05B05B05AEBFC555555555555BC01D555555555 557401AAAAAAAAAAAAABFB73AC901E573A7BFC555555555555BC01D555555555557401 D555555555555BFA9FAB0BC1CD2D1BFC555555555555BC01D555555555557402000000 0000000BF7FDB97530EC9E0BFC555555555555BC01D555555555557402155555555555 53FA388277166055BBFC555555555555BC01D5555555555574022AAAAAAAAAAAA3FB64 80F2B9D6484BFC555555555555BC01D5555555555574023FFFFFFFFFFFF3FC1C71C71C 71C73BFC555555555555BC01AAAAAAAAAAAACC024000000000000BFC49F49F49F49F5B FC555555555555BC01AAAAAAAAAAAACC022AAAAAAAAAAABBFC8FBD401845C88BFC5555 55555555BC01AAAAAAAAAAAACC021555555555556BFCCF746EBE635D9BFC5555555555 55BC01AAAAAAAAAAAACC020000000000001BFD048D159E26AF2BFC555555555555BC01 AAAAAAAAAAAACC01D555555555557BFD1E573AC901E56BFC555555555555BC01AAAAAA AAAAAACC01AAAAAAAAAAAACBFD3518A6DFC3518BFC555555555555BC01AAAAAAAAAAAA CC018000000000001BFD48D159E26AF37BFC555555555555BC01AAAAAAAAAAAACC0155 55555555556BFD598153D0F8CB4BFC555555555555BC01AAAAAAAAAAAACC012AAAAAAA AAAABBFD672894AB6CD8FBFC555555555555BC01AAAAAAAAAAAACC010000000000000B FD71C71C71C71C7BFC555555555555BC01AAAAAAAAAAAACC00AAAAAAAAAAAABBFD795C EB240795DBFC555555555555BC01AAAAAAAAAAAACC005555555555556BFD7DEA00C22E 450BFC555555555555BC01AAAAAAAAAAAACC000000000000001BFD7F6E5D4C3B2A1BFC 555555555555BC01AAAAAAAAAAAACBFF5555555555558BFD7DEA00C22E450BFC555555 555555BC01AAAAAAAAAAAACBFE555555555555BBFD795CEB240795DBFC555555555555 BC01AAAAAAAAAAAACBCC8000000000000BFD71C71C71C71C7BFC555555555555BC01AA AAAAAAAAAAC3FE555555555554FBFD672894AB6CD8FBFC555555555555BC01AAAAAAAA AAAAC3FF5555555555552BFD598153D0F8CB4BFC555555555555BC01AAAAAAAAAAAAC3 FFFFFFFFFFFFFFCBFD48D159E26AF38BFC555555555555BC01AAAAAAAAAAAAC4005555 555555553BFD3518A6DFC3519BFC555555555555BC01AAAAAAAAAAAAC400AAAAAAAAAA AA8BFD1E573AC901E57BFC555555555555BC01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFD 048D159E26AF4BFC555555555555BC01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFCCF746E BE635DEBFC555555555555BC01AAAAAAAAAAAAC4015555555555554BFC8FBD401845C8 BBFC555555555555BC01AAAAAAAAAAAAC4017FFFFFFFFFFFFBFC49F49F49F49F5BFC55 5555555555BC01AAAAAAAAAAAAC401AAAAAAAAAAAAABFBFC3518A6DFC35BFC55555555 5555BC01AAAAAAAAAAAAC401D555555555555BFB585E0E696F1F7BFC555555555555BC 01AAAAAAAAAAAAC4020000000000000BFA50C83FB72EA5CBFC555555555555BC01AAAA AAAAAAAAC40215555555555553F73B8B302A7A1DBBFC555555555555BC01AAAAAAAAAA AAC4022AAAAAAAAAAAA3FAB7F0D4629B7E8BFC555555555555BC01AAAAAAAAAAAAC402 3FFFFFFFFFFFF3FBB05B05B05B056BFC555555555555BC018000000000001C02400000 0000000BFC851EB851EB851BFC555555555555BC018000000000001C022AAAAAAAAAAA BBFCCAE759203CAE6BFC555555555555BC018000000000001C021555555555556BFD05 4F43E32D21CBFC555555555555BC018000000000001C020000000000001BFD22222222 22221BFC555555555555BC018000000000001C01D555555555557BFD3BEC474CFD585B FC555555555555BC018000000000001C01AAAAAAAAAAAACBFD52ADB363BEC47BFC5555 55555555BC018000000000001C018000000000001BFD6666666666666BFC5555555555 55BC018000000000001C015555555555556BFD77166054F43E3BFC555555555555BC01 8000000000001C012AAAAAAAAAAABBFD84BDA12F684BEBFC555555555555BC01800000 0000001C010000000000000BFD8F5C28F5C28F6BFC555555555555BC01800000000000 1C00AAAAAAAAAAAABBFD96F1F7A80308CBFC555555555555BC018000000000001C0055 55555555556BFD9B7F0D4629B7FBFC555555555555BC018000000000001C0000000000 00001BFD9D0369D0369D0BFC555555555555BC018000000000001BFF5555555555558B FD9B7F0D4629B7FBFC555555555555BC018000000000001BFE555555555555BBFD96F1 F7A80308CBFC555555555555BC018000000000001BCC8000000000000BFD8F5C28F5C2 8F6BFC555555555555BC0180000000000013FE555555555554FBFD84BDA12F684BEBFC 555555555555BC0180000000000013FF5555555555552BFD77166054F43E3BFC555555 555555BC0180000000000013FFFFFFFFFFFFFFCBFD6666666666667BFC555555555555 BC0180000000000014005555555555553BFD52ADB363BEC48BFC555555555555BC0180 00000000001400AAAAAAAAAAAA8BFD3BEC474CFD586BFC555555555555BC0180000000 00001400FFFFFFFFFFFFDBFD2222222222223BFC555555555555BC0180000000000014 012AAAAAAAAAAA9BFD054F43E32D21EBFC555555555555BC0180000000000014015555 555555554BFCCAE759203CAE9BFC555555555555BC0180000000000014017FFFFFFFFF FFFBFC851EB851EB853BFC555555555555BC018000000000001401AAAAAAAAAAAAABFC 3944A55B66C78BFC555555555555BC018000000000001401D555555555555BFBCEB240 795CEB3BFC555555555555BC0180000000000014020000000000000BFB1EB851EB851E ABFC555555555555BC0180000000000014021555555555555BF98A6DFC3518A71BFC55 5555555555BC0180000000000014022AAAAAAAAAAAA3F99690E0857FCD8BFC55555555 5555BC0180000000000014023FFFFFFFFFFFF3FB3A06D3A06D398BFC555555555555BC 015555555555556C024000000000000BFCB72EA61D950C5BFC555555555555BC015555 555555556C022AAAAAAAAAAABBFCFCF746EBE635ABFC555555555555BC015555555555 556C021555555555556BFD1E573AC901E56BFC555555555555BC015555555555556C02 0000000000001BFD3B2A1907F6E5BBFC555555555555BC015555555555556C01D55555 5555557BFD54F43E32D21C0BFC555555555555BC015555555555556C01AAAAAAAAAAAA CBFD6BB5AA4993881BFC555555555555BC015555555555556C018000000000001BFD7F 6E5D4C3B2A0BFC555555555555BC015555555555556C015555555555556BFD901E573A C901DBFC555555555555BC015555555555556C012AAAAAAAAAAABBFD9DC598153D0F8B FC555555555555BC015555555555556C010000000000000BFDA8641FDB97530BFC5555 55555555BC015555555555556C00AAAAAAAAAAAABBFDAFF9EE8DD7CC6BFC5555555555 55BC015555555555556C005555555555556BFDB487042BFE7B9BFC555555555555BC01 5555555555556C000000000000001BFDB60B60B60B60ABFC555555555555BC01555555 5555556BFF5555555555558BFDB487042BFE7B9BFC555555555555BC01555555555555 6BFE555555555555BBFDAFF9EE8DD7CC6BFC555555555555BC015555555555556BCC80 00000000000BFDA8641FDB97530BFC555555555555BC0155555555555563FE55555555 5554FBFD9DC598153D0F8BFC555555555555BC0155555555555563FF5555555555552B FD901E573AC901DBFC555555555555BC0155555555555563FFFFFFFFFFFFFFCBFD7F6E 5D4C3B2A1BFC555555555555BC0155555555555564005555555555553BFD6BB5AA4993 882BFC555555555555BC015555555555556400AAAAAAAAAAAA8BFD54F43E32D21C0BFC 555555555555BC015555555555556400FFFFFFFFFFFFDBFD3B2A1907F6E5DBFC555555 555555BC0155555555555564012AAAAAAAAAAA9BFD1E573AC901E58BFC555555555555 BC0155555555555564015555555555554BFCFCF746EBE635DBFC555555555555BC0155 555555555564017FFFFFFFFFFFFBFCB72EA61D950C7BFC555555555555BC0155555555 55556401AAAAAAAAAAAAABFC6B549327104ECBFC555555555555BC0155555555555564 01D555555555555BFC19690E0857FCDBFC555555555555BC0155555555555564020000 000000000BFB82D82D82D82D2BFC555555555555BC0155555555555564021555555555 555BFA8D76B54932709BFC555555555555BC0155555555555564022AAAAAAAAAAAA3F3 845C8A0CE4DE0BFC555555555555BC0155555555555564023FFFFFFFFFFFF3FAABCDF0 1234560BFC555555555555BC012AAAAAAAAAAABC024000000000000BFCE02468ACF135 5BFC555555555555BC012AAAAAAAAAAABC022AAAAAAAAAAABBFD12F684BDA12F5BFC55 5555555555BC012AAAAAAAAAAABC021555555555556BFD32D21C10AFF9EBFC55555555 5555BC012AAAAAAAAAAABC020000000000001BFD4FA4FA4FA4FA3BFC555555555555BC 012AAAAAAAAAAABC01D555555555557BFD696F1F7A80308BFC555555555555BC012AAA AAAAAAAABC01AAAAAAAAAAAACBFD80308B91419C9BFC555555555555BC012AAAAAAAAA AABC018000000000001BFD93E93E93E93E9BFC555555555555BC012AAAAAAAAAAABC01 5555555555556BFDA499388277165BFC555555555555BC012AAAAAAAAAAABC012AAAAA AAAAAABBFDB240795CEB240BFC555555555555BC012AAAAAAAAAAABC01000000000000 0BFDBCDF012345678BFC555555555555BC012AAAAAAAAAAABC00AAAAAAAAAAAABBFDC4 74CFD585E0EBFC555555555555BC012AAAAAAAAAAABC005555555555556BFDC901E573 AC901BFC555555555555BC012AAAAAAAAAAABC000000000000001BFDCA8641FDB9752B FC555555555555BC012AAAAAAAAAAABBFF5555555555558BFDC901E573AC901BFC5555 55555555BC012AAAAAAAAAAABBFE555555555555BBFDC474CFD585E0EBFC5555555555 55BC012AAAAAAAAAAABBCC8000000000000BFDBCDF012345678BFC555555555555BC01 2AAAAAAAAAAAB3FE555555555554FBFDB240795CEB240BFC555555555555BC012AAAAA AAAAAAB3FF5555555555552BFDA499388277165BFC555555555555BC012AAAAAAAAAAA B3FFFFFFFFFFFFFFCBFD93E93E93E93E9BFC555555555555BC012AAAAAAAAAAAB40055 55555555553BFD80308B91419CABFC555555555555BC012AAAAAAAAAAAB400AAAAAAAA AAAA8BFD696F1F7A80308BFC555555555555BC012AAAAAAAAAAAB400FFFFFFFFFFFFDB FD4FA4FA4FA4FA5BFC555555555555BC012AAAAAAAAAAAB4012AAAAAAAAAAA9BFD32D2 1C10AFFA0BFC555555555555BC012AAAAAAAAAAAB4015555555555554BFD12F684BDA1 2F6BFC555555555555BC012AAAAAAAAAAAB4017FFFFFFFFFFFFBFCE02468ACF1357BFC 555555555555BC012AAAAAAAAAAAB401AAAAAAAAAAAAABFC944A55B66C77CBFC555555 555555BC012AAAAAAAAAAAB401D555555555555BFC425ED097B425DBFC555555555555 BC012AAAAAAAAAAAB4020000000000000BFBD4C3B2A1907F2BFC555555555555BC012A AAAAAAAAAAB4021555555555555BFB18A6DFC3518A4BFC555555555555BC012AAAAAAA AAAAB4022AAAAAAAAAAAABF9419CA252ADB48BFC555555555555BC012AAAAAAAAAAAB4 023FFFFFFFFFFFF3FA07F6E5D4C3B20BFC555555555555BC010000000000000C024000 000000000BFD0000000000000BFC555555555555BC010000000000000C022AAAAAAAAA AABBFD22E4506728949BFC555555555555BC010000000000000C021555555555556BFD 42BFE7BA375F2BFC555555555555BC010000000000000C020000000000001BFD5F92C5 F92C5F9BFC555555555555BC010000000000000C01D555555555557BFD795CEB240795 CBFC555555555555BC010000000000000C01AAAAAAAAAAAACBFD901E573AC901FBFC55 5555555555BC010000000000000C018000000000001BFDA3D70A3D70A3DBFC55555555 5555BC010000000000000C015555555555556BFDB487042BFE7B9BFC555555555555BC 010000000000000C012AAAAAAAAAAABBFDC22E450672895BFC555555555555BC010000 000000000C010000000000000BFDCCCCCCCCCCCCCBFC555555555555BC010000000000 000C00AAAAAAAAAAAABBFDD4629B7F0D463BFC555555555555BC010000000000000C00 5555555555556BFDD8EFB11D33F56BFC555555555555BC010000000000000C00000000 0000001BFDDA740DA740DA7BFC555555555555BC010000000000000BFF555555555555 8BFDD8EFB11D33F56BFC555555555555BC010000000000000BFE555555555555BBFDD4 629B7F0D463BFC555555555555BC010000000000000BCC8000000000000BFDCCCCCCCC CCCCDBFC555555555555BC0100000000000003FE555555555554FBFDC22E450672895B FC555555555555BC0100000000000003FF5555555555552BFDB487042BFE7BABFC5555 55555555BC0100000000000003FFFFFFFFFFFFFFCBFDA3D70A3D70A3EBFC5555555555 55BC0100000000000004005555555555553BFD901E573AC901FBFC555555555555BC01 0000000000000400AAAAAAAAAAAA8BFD795CEB240795DBFC555555555555BC01000000 0000000400FFFFFFFFFFFFDBFD5F92C5F92C5FABFC555555555555BC01000000000000 04012AAAAAAAAAAA9BFD42BFE7BA375F5BFC555555555555BC01000000000000040155 55555555554BFD22E450672894BBFC555555555555BC0100000000000004017FFFFFFF FFFFFBFD0000000000001BFC555555555555BC010000000000000401AAAAAAAAAAAAAB FCB425ED097B426BFC555555555555BC010000000000000401D555555555555BFC623A 67EAC2F07BFC555555555555BC0100000000000004020000000000000BFC0A3D70A3D7 0A3BFC555555555555BC0100000000000004021555555555555BFB585E0E696F1F8BFC 555555555555BC0100000000000004022AAAAAAAAAAAABFA203CAE759204CBFC555555 555555BC0100000000000004023FFFFFFFFFFFF3F911111111110F0BFC555555555555 BC00AAAAAAAAAAAABC024000000000000BFD0B60B60B60B60BFC555555555555BC00AA AAAAAAAAAABC022AAAAAAAAAAABBFD2E450672894ABBFC555555555555BC00AAAAAAAA AAAABC021555555555556BFD4E209DC598154BFC555555555555BC00AAAAAAAAAAAABC 020000000000001BFD6AF37C048D159BFC555555555555BC00AAAAAAAAAAAABC01D555 555555557BFD84BDA12F684BEBFC555555555555BC00AAAAAAAAAAAABC01AAAAAAAAAA AACBFD9B7F0D4629B7FBFC555555555555BC00AAAAAAAAAAAABC018000000000001BFD AF37C048D159FBFC555555555555BC00AAAAAAAAAAAABC015555555555556BFDBFE7BA 375F31BBFC555555555555BC00AAAAAAAAAAAABC012AAAAAAAAAAABBFDCD8EFB11D33F 5BFC555555555555BC00AAAAAAAAAAAABC010000000000000BFDD82D82D82D82EBFC55 5555555555BC00AAAAAAAAAAAABC00AAAAAAAAAAAABBFDDFC3518A6DFC3BFC55555555 5555BC00AAAAAAAAAAAABC005555555555556BFDE450672894AB7BFC555555555555BC 00AAAAAAAAAAAABC000000000000001BFDE5D4C3B2A1908BFC555555555555BC00AAAA AAAAAAAABBFF5555555555558BFDE450672894AB7BFC555555555555BC00AAAAAAAAAA AABBFE555555555555BBFDDFC3518A6DFC4BFC555555555555BC00AAAAAAAAAAAABBCC 8000000000000BFDD82D82D82D82EBFC555555555555BC00AAAAAAAAAAAAB3FE555555 555554FBFDCD8EFB11D33F6BFC555555555555BC00AAAAAAAAAAAAB3FF555555555555 2BFDBFE7BA375F31BBFC555555555555BC00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFDAF 37C048D159FBFC555555555555BC00AAAAAAAAAAAAB4005555555555553BFD9B7F0D46 29B80BFC555555555555BC00AAAAAAAAAAAAB400AAAAAAAAAAAA8BFD84BDA12F684BEB FC555555555555BC00AAAAAAAAAAAAB400FFFFFFFFFFFFDBFD6AF37C048D15BBFC5555 55555555BC00AAAAAAAAAAAAB4012AAAAAAAAAAA9BFD4E209DC598156BFC5555555555 55BC00AAAAAAAAAAAAB4015555555555554BFD2E450672894ACBFC555555555555BC00 AAAAAAAAAAAAB4017FFFFFFFFFFFFBFD0B60B60B60B62BFC555555555555BC00AAAAAA AAAAAAB401AAAAAAAAAAAAABFCCAE759203CAE8BFC555555555555BC00AAAAAAAAAAAA B401D555555555555BFC78FBD401845C9BFC555555555555BC00AAAAAAAAAAAAB40200 00000000000BFC20FEDCBA98765BFC555555555555BC00AAAAAAAAAAAAB40215555555 55555BFB85E0E696F1F7CBFC555555555555BC00AAAAAAAAAAAAB4022AAAAAAAAAAAAB FA7B425ED097B54BFC555555555555BC00AAAAAAAAAAAAB4023FFFFFFFFFFFF3F76C16 C16C16B81BFC555555555555BC005555555555556C024000000000000BFD123456789A BCCBFC555555555555BC005555555555556C022AAAAAAAAAAABBFD3518A6DFC3517BFC 555555555555BC005555555555556C021555555555556BFD54F43E32D21C0BFC555555 555555BC005555555555556C020000000000001BFD71C71C71C71C5BFC555555555555 BC005555555555556C01D555555555557BFD8B91419CA252ABFC555555555555BC0055 55555555556C01AAAAAAAAAAAACBFDA252ADB363BEBBFC555555555555BC0055555555 55556C018000000000001BFDB60B60B60B60BBFC555555555555BC005555555555556C 015555555555556BFDC6BB5AA499387BFC555555555555BC005555555555556C012AAA AAAAAAAABBFDD4629B7F0D461BFC555555555555BC005555555555556C010000000000 000BFDDF0123456789ABFC555555555555BC005555555555556C00AAAAAAAAAAAABBFD E696F1F7A802FBFC555555555555BC005555555555556C005555555555556BFDEB2407 95CEB23BFC555555555555BC005555555555556C000000000000001BFDECA8641FDB97 4BFC555555555555BC005555555555556BFF5555555555558BFDEB240795CEB23BFC55 5555555555BC005555555555556BFE555555555555BBFDE696F1F7A8030BFC55555555 5555BC005555555555556BCC8000000000000BFDDF0123456789ABFC555555555555BC 0055555555555563FE555555555554FBFDD4629B7F0D462BFC555555555555BC005555 5555555563FF5555555555552BFDC6BB5AA499387BFC555555555555BC005555555555 5563FFFFFFFFFFFFFFCBFDB60B60B60B60BBFC555555555555BC005555555555556400 5555555555553BFDA252ADB363BECBFC555555555555BC005555555555556400AAAAAA AAAAAA8BFD8B91419CA252ABFC555555555555BC005555555555556400FFFFFFFFFFFF DBFD71C71C71C71C7BFC555555555555BC0055555555555564012AAAAAAAAAAA9BFD54 F43E32D21C2BFC555555555555BC0055555555555564015555555555554BFD3518A6DF C3518BFC555555555555BC0055555555555564017FFFFFFFFFFFFBFD123456789ABCEB FC555555555555BC005555555555556401AAAAAAAAAAAAABFCD88E99FAB0BC0BFC5555 55555555BC005555555555556401D555555555555BFC86A314DBF86A1BFC5555555555 55BC0055555555555564020000000000000BFC2EA61D950C83DBFC555555555555BC00 55555555555564021555555555555BFBA12F684BDA12CBFC555555555555BC00555555 55555564022AAAAAAAAAAAABFAB1DF623A67EB4BFC555555555555BC00555555555555 64023FFFFFFFFFFFFBF523456789ABDFDBFC555555555555BC000000000000001C0240 00000000000BFD147AE147AE148BFC555555555555BC000000000000001C022AAAAAAA AAAABBFD375F31AED6A91BFC555555555555BC000000000000001C021555555555556B FD573AC901E573ABFC555555555555BC000000000000001C020000000000001BFD740D A740DA741BFC555555555555BC000000000000001C01D555555555557BFD8DD7CC6BB5 AA4BFC555555555555BC000000000000001C01AAAAAAAAAAAACBFDA499388277167BFC 555555555555BC000000000000001C018000000000001BFDB851EB851EB85BFC555555 555555BC000000000000001C015555555555556BFDC901E573AC901BFC555555555555 BC000000000000001C012AAAAAAAAAAABBFDD6A9264E209DDBFC555555555555BC0000 00000000001C010000000000000BFDE147AE147AE14BFC555555555555BC0000000000 00001C00AAAAAAAAAAAABBFDE8DD7CC6BB5ABBFC555555555555BC000000000000001C 005555555555556BFDED6A9264E209DBFC555555555555BC000000000000001C000000 000000001BFDEEEEEEEEEEEEFBFC555555555555BC000000000000001BFF5555555555 558BFDED6A9264E209EBFC555555555555BC000000000000001BFE555555555555BBFD E8DD7CC6BB5ABBFC555555555555BC000000000000001BCC8000000000000BFDE147AE 147AE15BFC555555555555BC0000000000000013FE555555555554FBFDD6A9264E209D DBFC555555555555BC0000000000000013FF5555555555552BFDC901E573AC902BFC55 5555555555BC0000000000000013FFFFFFFFFFFFFFCBFDB851EB851EB86BFC55555555 5555BC0000000000000014005555555555553BFDA499388277167BFC555555555555BC 000000000000001400AAAAAAAAAAAA8BFD8DD7CC6BB5AA5BFC555555555555BC000000 000000001400FFFFFFFFFFFFDBFD740DA740DA742BFC555555555555BC000000000000 0014012AAAAAAAAAAA9BFD573AC901E573DBFC555555555555BC000000000000001401 5555555555554BFD375F31AED6A93BFC555555555555BC0000000000000014017FFFFF FFFFFFFBFD147AE147AE149BFC555555555555BC000000000000001401AAAAAAAAAAAA ABFCDD1BAF98D76B6BFC555555555555BC000000000000001401D555555555555BFC8B 302A7A1F197BFC555555555555BC0000000000000014020000000000000BFC33333333 33333BFC555555555555BC0000000000000014021555555555555BFBAA49938827718B FC555555555555BC0000000000000014022AAAAAAAAAAAABFAC413B8B302A8CBFC5555 55555555BC0000000000000014023FFFFFFFFFFFFBF6B4E81B4E81C7EBFC5555555555 55BBFF5555555555558C024000000000000BFD123456789ABCEBFC555555555555BBFF 5555555555558C022AAAAAAAAAAABBFD3518A6DFC3517BFC555555555555BBFF555555 5555558C021555555555556BFD54F43E32D21C0BFC555555555555BBFF555555555555 8C020000000000001BFD71C71C71C71C7BFC555555555555BBFF5555555555558C01D5 55555555557BFD8B91419CA252ABFC555555555555BBFF5555555555558C01AAAAAAAA AAAACBFDA252ADB363BEDBFC555555555555BBFF5555555555558C018000000000001B FDB60B60B60B60BBFC555555555555BBFF5555555555558C015555555555556BFDC6BB 5AA499387BFC555555555555BBFF5555555555558C012AAAAAAAAAAABBFDD4629B7F0D 463BFC555555555555BBFF5555555555558C010000000000000BFDDF0123456789ABFC 555555555555BBFF5555555555558C00AAAAAAAAAAAABBFDE696F1F7A8031BFC555555 555555BBFF5555555555558C005555555555556BFDEB240795CEB23BFC555555555555 BBFF5555555555558C000000000000001BFDECA8641FDB975BFC555555555555BBFF55 55555555558BFF5555555555558BFDEB240795CEB24BFC555555555555BBFF55555555 55558BFE555555555555BBFDE696F1F7A8031BFC555555555555BBFF5555555555558B CC8000000000000BFDDF0123456789BBFC555555555555BBFF55555555555583FE5555 55555554FBFDD4629B7F0D463BFC555555555555BBFF55555555555583FF5555555555 552BFDC6BB5AA499388BFC555555555555BBFF55555555555583FFFFFFFFFFFFFFCBFD B60B60B60B60CBFC555555555555BBFF55555555555584005555555555553BFDA252AD B363BEDBFC555555555555BBFF5555555555558400AAAAAAAAAAAA8BFD8B91419CA252 BBFC555555555555BBFF5555555555558400FFFFFFFFFFFFDBFD71C71C71C71C8BFC55 5555555555BBFF55555555555584012AAAAAAAAAAA9BFD54F43E32D21C3BFC55555555 5555BBFF55555555555584015555555555554BFD3518A6DFC3519BFC555555555555BB FF55555555555584017FFFFFFFFFFFFBFD123456789ABCFBFC555555555555BBFF5555 555555558401AAAAAAAAAAAAABFCD88E99FAB0BC2BFC555555555555BBFF5555555555 558401D555555555555BFC86A314DBF86A3BFC555555555555BBFF5555555555558402 0000000000000BFC2EA61D950C83FBFC555555555555BBFF5555555555558402155555 5555555BFBA12F684BDA130BFC555555555555BBFF55555555555584022AAAAAAAAAAA ABFAB1DF623A67EBCBFC555555555555BBFF55555555555584023FFFFFFFFFFFFBF523 456789ABEFDBFC555555555555BBFE555555555555BC024000000000000BFD0B60B60B 60B60BFC555555555555BBFE555555555555BC022AAAAAAAAAAABBFD2E450672894ABB FC555555555555BBFE555555555555BC021555555555556BFD4E209DC598154BFC5555 55555555BBFE555555555555BC020000000000001BFD6AF37C048D159BFC5555555555 55BBFE555555555555BC01D555555555557BFD84BDA12F684BEBFC555555555555BBFE 555555555555BC01AAAAAAAAAAAACBFD9B7F0D4629B7FBFC555555555555BBFE555555 555555BC018000000000001BFDAF37C048D159FBFC555555555555BBFE555555555555 BC015555555555556BFDBFE7BA375F31BBFC555555555555BBFE555555555555BC012A AAAAAAAAAABBFDCD8EFB11D33F5BFC555555555555BBFE555555555555BC0100000000 00000BFDD82D82D82D82EBFC555555555555BBFE555555555555BC00AAAAAAAAAAAABB FDDFC3518A6DFC3BFC555555555555BBFE555555555555BC005555555555556BFDE450 672894AB7BFC555555555555BBFE555555555555BC000000000000001BFDE5D4C3B2A1 908BFC555555555555BBFE555555555555BBFF5555555555558BFDE450672894AB7BFC 555555555555BBFE555555555555BBFE555555555555BBFDDFC3518A6DFC4BFC555555 555555BBFE555555555555BBCC8000000000000BFDD82D82D82D82EBFC555555555555 BBFE555555555555B3FE555555555554FBFDCD8EFB11D33F6BFC555555555555BBFE55 5555555555B3FF5555555555552BFDBFE7BA375F31BBFC555555555555BBFE55555555 5555B3FFFFFFFFFFFFFFCBFDAF37C048D159FBFC555555555555BBFE555555555555B4 005555555555553BFD9B7F0D4629B80BFC555555555555BBFE555555555555B400AAAA AAAAAAAA8BFD84BDA12F684BEBFC555555555555BBFE555555555555B400FFFFFFFFFF FFDBFD6AF37C048D15BBFC555555555555BBFE555555555555B4012AAAAAAAAAAA9BFD 4E209DC598156BFC555555555555BBFE555555555555B4015555555555554BFD2E4506 72894ACBFC555555555555BBFE555555555555B4017FFFFFFFFFFFFBFD0B60B60B60B6 2BFC555555555555BBFE555555555555B401AAAAAAAAAAAAABFCCAE759203CAE8BFC55 5555555555BBFE555555555555B401D555555555555BFC78FBD401845C9BFC55555555 5555BBFE555555555555B4020000000000000BFC20FEDCBA98765BFC555555555555BB FE555555555555B4021555555555555BFB85E0E696F1F7CBFC555555555555BBFE5555 55555555B4022AAAAAAAAAAAABFA7B425ED097B54BFC555555555555BBFE5555555555 55B4023FFFFFFFFFFFF3F76C16C16C16B81BFC555555555555BBCC8000000000000C02 4000000000000BFD0000000000000BFC555555555555BBCC8000000000000C022AAAAA AAAAAABBFD22E4506728949BFC555555555555BBCC8000000000000C02155555555555 6BFD42BFE7BA375F2BFC555555555555BBCC8000000000000C020000000000001BFD5F 92C5F92C5F9BFC555555555555BBCC8000000000000C01D555555555557BFD795CEB24 0795CBFC555555555555BBCC8000000000000C01AAAAAAAAAAAACBFD901E573AC901FB FC555555555555BBCC8000000000000C018000000000001BFDA3D70A3D70A3DBFC5555 55555555BBCC8000000000000C015555555555556BFDB487042BFE7B9BFC5555555555 55BBCC8000000000000C012AAAAAAAAAAABBFDC22E450672895BFC555555555555BBCC 8000000000000C010000000000000BFDCCCCCCCCCCCCCBFC555555555555BBCC800000 0000000C00AAAAAAAAAAAABBFDD4629B7F0D463BFC555555555555BBCC800000000000 0C005555555555556BFDD8EFB11D33F56BFC555555555555BBCC8000000000000C0000 00000000001BFDDA740DA740DA7BFC555555555555BBCC8000000000000BFF55555555 55558BFDD8EFB11D33F56BFC555555555555BBCC8000000000000BFE555555555555BB FDD4629B7F0D463BFC555555555555BBCC8000000000000BCC8000000000000BFDCCCC CCCCCCCCDBFC555555555555BBCC80000000000003FE555555555554FBFDC22E450672 895BFC555555555555BBCC80000000000003FF5555555555552BFDB487042BFE7BABFC 555555555555BBCC80000000000003FFFFFFFFFFFFFFCBFDA3D70A3D70A3EBFC555555 555555BBCC80000000000004005555555555553BFD901E573AC901FBFC555555555555 BBCC8000000000000400AAAAAAAAAAAA8BFD795CEB240795DBFC555555555555BBCC80 00000000000400FFFFFFFFFFFFDBFD5F92C5F92C5FABFC555555555555BBCC80000000 000004012AAAAAAAAAAA9BFD42BFE7BA375F5BFC555555555555BBCC80000000000004 015555555555554BFD22E450672894BBFC555555555555BBCC80000000000004017FFF FFFFFFFFFBFD0000000000001BFC555555555555BBCC8000000000000401AAAAAAAAAA AAABFCB425ED097B426BFC555555555555BBCC8000000000000401D555555555555BFC 623A67EAC2F07BFC555555555555BBCC80000000000004020000000000000BFC0A3D70 A3D70A3BFC555555555555BBCC80000000000004021555555555555BFB585E0E696F1F 8BFC555555555555BBCC80000000000004022AAAAAAAAAAAABFA203CAE759204CBFC55 5555555555BBCC80000000000004023FFFFFFFFFFFF3F911111111110F0BFC55555555 5555B3FE555555555554FC024000000000000BFCE02468ACF1359BFC555555555555B3 FE555555555554FC022AAAAAAAAAAABBFD12F684BDA12F5BFC555555555555B3FE5555 55555554FC021555555555556BFD32D21C10AFF9EBFC555555555555B3FE5555555555 54FC020000000000001BFD4FA4FA4FA4FA5BFC555555555555B3FE555555555554FC01 D555555555557BFD696F1F7A80308BFC555555555555B3FE555555555554FC01AAAAAA AAAAAACBFD80308B91419CBBFC555555555555B3FE555555555554FC01800000000000 1BFD93E93E93E93E9BFC555555555555B3FE555555555554FC015555555555556BFDA4 99388277165BFC555555555555B3FE555555555554FC012AAAAAAAAAAABBFDB240795C EB241BFC555555555555B3FE555555555554FC010000000000000BFDBCDF012345679B FC555555555555B3FE555555555554FC00AAAAAAAAAAAABBFDC474CFD585E0FBFC5555 55555555B3FE555555555554FC005555555555556BFDC901E573AC902BFC5555555555 55B3FE555555555554FC000000000000001BFDCA8641FDB9753BFC555555555555B3FE 555555555554FBFF5555555555558BFDC901E573AC902BFC555555555555B3FE555555 555554FBFE555555555555BBFDC474CFD585E0FBFC555555555555B3FE555555555554 FBCC8000000000000BFDBCDF012345679BFC555555555555B3FE555555555554F3FE55 5555555554FBFDB240795CEB241BFC555555555555B3FE555555555554F3FF55555555 55552BFDA499388277166BFC555555555555B3FE555555555554F3FFFFFFFFFFFFFFCB FD93E93E93E93EABFC555555555555B3FE555555555554F4005555555555553BFD8030 8B91419CBBFC555555555555B3FE555555555554F400AAAAAAAAAAAA8BFD696F1F7A80 309BFC555555555555B3FE555555555554F400FFFFFFFFFFFFDBFD4FA4FA4FA4FA6BFC 555555555555B3FE555555555554F4012AAAAAAAAAAA9BFD32D21C10AFFA1BFC555555 555555B3FE555555555554F4015555555555554BFD12F684BDA12F7BFC555555555555 B3FE555555555554F4017FFFFFFFFFFFFBFCE02468ACF1359BFC555555555555B3FE55 5555555554F401AAAAAAAAAAAAABFC944A55B66C77EBFC555555555555B3FE55555555 5554F401D555555555555BFC425ED097B425FBFC555555555555B3FE555555555554F4 020000000000000BFBD4C3B2A1907F6BFC555555555555B3FE555555555554F4021555 555555555BFB18A6DFC3518A8BFC555555555555B3FE555555555554F4022AAAAAAAAA AAABF9419CA252ADB58BFC555555555555B3FE555555555554F4023FFFFFFFFFFFF3FA 07F6E5D4C3B18BFC555555555555B3FF5555555555552C024000000000000BFCB72EA6 1D950C9BFC555555555555B3FF5555555555552C022AAAAAAAAAAABBFCFCF746EBE635 ABFC555555555555B3FF5555555555552C021555555555556BFD1E573AC901E56BFC55 5555555555B3FF5555555555552C020000000000001BFD3B2A1907F6E5DBFC55555555 5555B3FF5555555555552C01D555555555557BFD54F43E32D21C0BFC555555555555B3 FF5555555555552C01AAAAAAAAAAAACBFD6BB5AA4993883BFC555555555555B3FF5555 555555552C018000000000001BFD7F6E5D4C3B2A1BFC555555555555B3FF5555555555 552C015555555555556BFD901E573AC901EBFC555555555555B3FF5555555555552C01 2AAAAAAAAAAABBFD9DC598153D0F9BFC555555555555B3FF5555555555552C01000000 0000000BFDA8641FDB97531BFC555555555555B3FF5555555555552C00AAAAAAAAAAAA BBFDAFF9EE8DD7CC7BFC555555555555B3FF5555555555552C005555555555556BFDB4 87042BFE7BABFC555555555555B3FF5555555555552C000000000000001BFDB60B60B6 0B60BBFC555555555555B3FF5555555555552BFF5555555555558BFDB487042BFE7BAB FC555555555555B3FF5555555555552BFE555555555555BBFDAFF9EE8DD7CC7BFC5555 55555555B3FF5555555555552BCC8000000000000BFDA8641FDB97531BFC5555555555 55B3FF55555555555523FE555555555554FBFD9DC598153D0F9BFC555555555555B3FF 55555555555523FF5555555555552BFD901E573AC901EBFC555555555555B3FF555555 55555523FFFFFFFFFFFFFFCBFD7F6E5D4C3B2A2BFC555555555555B3FF555555555555 24005555555555553BFD6BB5AA4993883BFC555555555555B3FF5555555555552400AA AAAAAAAAAA8BFD54F43E32D21C1BFC555555555555B3FF5555555555552400FFFFFFFF FFFFDBFD3B2A1907F6E5EBFC555555555555B3FF55555555555524012AAAAAAAAAAA9B FD1E573AC901E59BFC555555555555B3FF55555555555524015555555555554BFCFCF7 46EBE635FBFC555555555555B3FF55555555555524017FFFFFFFFFFFFBFCB72EA61D95 0C9BFC555555555555B3FF5555555555552401AAAAAAAAAAAAABFC6B549327104EEBFC 555555555555B3FF5555555555552401D555555555555BFC19690E0857FCFBFC555555 555555B3FF55555555555524020000000000000BFB82D82D82D82D6BFC555555555555 B3FF55555555555524021555555555555BFA8D76B54932711BFC555555555555B3FF55 555555555524022AAAAAAAAAAAA3F3845C8A0CE49E0BFC555555555555B3FF55555555 555524023FFFFFFFFFFFF3FAABCDF01234558BFC555555555555B3FFFFFFFFFFFFFFCC 024000000000000BFC851EB851EB855BFC555555555555B3FFFFFFFFFFFFFFCC022AAA AAAAAAAABBFCCAE759203CAE6BFC555555555555B3FFFFFFFFFFFFFFCC021555555555 556BFD054F43E32D21CBFC555555555555B3FFFFFFFFFFFFFFCC020000000000001BFD 2222222222222BFC555555555555B3FFFFFFFFFFFFFFCC01D555555555557BFD3BEC47 4CFD586BFC555555555555B3FFFFFFFFFFFFFFCC01AAAAAAAAAAAACBFD52ADB363BEC4 8BFC555555555555B3FFFFFFFFFFFFFFCC018000000000001BFD6666666666667BFC55 5555555555B3FFFFFFFFFFFFFFCC015555555555556BFD77166054F43E4BFC55555555 5555B3FFFFFFFFFFFFFFCC012AAAAAAAAAAABBFD84BDA12F684BFBFC555555555555B3 FFFFFFFFFFFFFFCC010000000000000BFD8F5C28F5C28F7BFC555555555555B3FFFFFF FFFFFFFFCC00AAAAAAAAAAAABBFD96F1F7A80308DBFC555555555555B3FFFFFFFFFFFF FFCC005555555555556BFD9B7F0D4629B80BFC555555555555B3FFFFFFFFFFFFFFCC00 0000000000001BFD9D0369D0369D1BFC555555555555B3FFFFFFFFFFFFFFCBFF555555 5555558BFD9B7F0D4629B80BFC555555555555B3FFFFFFFFFFFFFFCBFE555555555555 BBFD96F1F7A80308DBFC555555555555B3FFFFFFFFFFFFFFCBCC8000000000000BFD8F 5C28F5C28F7BFC555555555555B3FFFFFFFFFFFFFFC3FE555555555554FBFD84BDA12F 684BFBFC555555555555B3FFFFFFFFFFFFFFC3FF5555555555552BFD77166054F43E4B FC555555555555B3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFCBFD6666666666668BFC5555 55555555B3FFFFFFFFFFFFFFC4005555555555553BFD52ADB363BEC49BFC5555555555 55B3FFFFFFFFFFFFFFC400AAAAAAAAAAAA8BFD3BEC474CFD587BFC555555555555B3FF FFFFFFFFFFFFC400FFFFFFFFFFFFDBFD2222222222224BFC555555555555B3FFFFFFFF FFFFFFC4012AAAAAAAAAAA9BFD054F43E32D21FBFC555555555555B3FFFFFFFFFFFFFF C4015555555555554BFCCAE759203CAEBBFC555555555555B3FFFFFFFFFFFFFFC4017F FFFFFFFFFFFBFC851EB851EB855BFC555555555555B3FFFFFFFFFFFFFFC401AAAAAAAA AAAAABFC3944A55B66C7ABFC555555555555B3FFFFFFFFFFFFFFC401D555555555555B FBCEB240795CEB7BFC555555555555B3FFFFFFFFFFFFFFC4020000000000000BFB1EB8 51EB851EEBFC555555555555B3FFFFFFFFFFFFFFC4021555555555555BF98A6DFC3518 A81BFC555555555555B3FFFFFFFFFFFFFFC4022AAAAAAAAAAAA3F99690E0857FCC8BFC 555555555555B3FFFFFFFFFFFFFFC4023FFFFFFFFFFFF3FB3A06D3A06D394BFC555555 555555B4005555555555553C024000000000000BFC49F49F49F49F9BFC555555555555 B4005555555555553C022AAAAAAAAAAABBFC8FBD401845C8CBFC555555555555B40055 55555555553C021555555555556BFCCF746EBE635DDBFC555555555555B40055555555 55553C020000000000001BFD048D159E26AF4BFC555555555555B4005555555555553C 01D555555555557BFD1E573AC901E58BFC555555555555B4005555555555553C01AAAA AAAAAAAACBFD3518A6DFC351ABFC555555555555B4005555555555553C018000000000 001BFD48D159E26AF39BFC555555555555B4005555555555553C015555555555556BFD 598153D0F8CB6BFC555555555555B4005555555555553C012AAAAAAAAAAABBFD672894 AB6CD91BFC555555555555B4005555555555553C010000000000000BFD71C71C71C71C 9BFC555555555555B4005555555555553C00AAAAAAAAAAAABBFD795CEB240795FBFC55 5555555555B4005555555555553C005555555555556BFD7DEA00C22E452BFC55555555 5555B4005555555555553C000000000000001BFD7F6E5D4C3B2A3BFC555555555555B4 005555555555553BFF5555555555558BFD7DEA00C22E452BFC555555555555B4005555 555555553BFE555555555555BBFD795CEB240795FBFC555555555555B4005555555555 553BCC8000000000000BFD71C71C71C71C9BFC555555555555B40055555555555533FE 555555555554FBFD672894AB6CD91BFC555555555555B40055555555555533FF555555 5555552BFD598153D0F8CB6BFC555555555555B40055555555555533FFFFFFFFFFFFFF CBFD48D159E26AF3ABFC555555555555B40055555555555534005555555555553BFD35 18A6DFC351BBFC555555555555B4005555555555553400AAAAAAAAAAAA8BFD1E573AC9 01E59BFC555555555555B4005555555555553400FFFFFFFFFFFFDBFD048D159E26AF6B FC555555555555B40055555555555534012AAAAAAAAAAA9BFCCF746EBE635E2BFC5555 55555555B40055555555555534015555555555554BFC8FBD401845C8FBFC5555555555 55B40055555555555534017FFFFFFFFFFFFBFC49F49F49F49F9BFC555555555555B400 5555555555553401AAAAAAAAAAAAABFBFC3518A6DFC3DBFC555555555555B400555555 5555553401D555555555555BFB585E0E696F1FFBFC555555555555B400555555555555 34020000000000000BFA50C83FB72EA6CBFC555555555555B400555555555555340215 555555555553F73B8B302A7A15BBFC555555555555B40055555555555534022AAAAAAA AAAAA3FAB7F0D4629B7D8BFC555555555555B40055555555555534023FFFFFFFFFFFF3 FBB05B05B05B04EBFC555555555555B400AAAAAAAAAAAA8C024000000000000BFC05B0 5B05B05B3BFC555555555555B400AAAAAAAAAAAA8C022AAAAAAAAAAABBFC4B78FBD401 846BFC555555555555B400AAAAAAAAAAAA8C021555555555556BFC8B302A7A1F197BFC 555555555555B400AAAAAAAAAAAA8C020000000000001BFCC4D5E6F8091A2BFC555555 555555B400AAAAAAAAAAAA8C01D555555555557BFCF86A314DBF86ABFC555555555555 B400AAAAAAAAAAAA8C01AAAAAAAAAAAACBFD12F684BDA12F7BFC555555555555B400AA AAAAAAAAAA8C018000000000001BFD26AF37C048D16BFC555555555555B400AAAAAAAA AAAA8C015555555555556BFD375F31AED6A93BFC555555555555B400AAAAAAAAAAAA8C 012AAAAAAAAAAABBFD450672894AB6EBFC555555555555B400AAAAAAAAAAAA8C010000 000000000BFD4FA4FA4FA4FA6BFC555555555555B400AAAAAAAAAAAA8C00AAAAAAAAAA AABBFD573AC901E573CBFC555555555555B400AAAAAAAAAAAA8C005555555555556BFD 5BC7DEA00C22FBFC555555555555B400AAAAAAAAAAAA8C000000000000001BFD5D4C3B 2A19080BFC555555555555B400AAAAAAAAAAAA8BFF5555555555558BFD5BC7DEA00C22 FBFC555555555555B400AAAAAAAAAAAA8BFE555555555555BBFD573AC901E573CBFC55 5555555555B400AAAAAAAAAAAA8BCC8000000000000BFD4FA4FA4FA4FA6BFC55555555 5555B400AAAAAAAAAAAA83FE555555555554FBFD450672894AB6EBFC555555555555B4 00AAAAAAAAAAAA83FF5555555555552BFD375F31AED6A93BFC555555555555B400AAAA AAAAAAAA83FFFFFFFFFFFFFFCBFD26AF37C048D17BFC555555555555B400AAAAAAAAAA AA84005555555555553BFD12F684BDA12F8BFC555555555555B400AAAAAAAAAAAA8400 AAAAAAAAAAAA8BFCF86A314DBF86DBFC555555555555B400AAAAAAAAAAAA8400FFFFFF FFFFFFDBFCC4D5E6F8091A6BFC555555555555B400AAAAAAAAAAAA84012AAAAAAAAAAA 9BFC8B302A7A1F19CBFC555555555555B400AAAAAAAAAAAA84015555555555554BFC4B 78FBD401849BFC555555555555B400AAAAAAAAAAAA84017FFFFFFFFFFFFBFC05B05B05 B05B4BFC555555555555B400AAAAAAAAAAAA8401AAAAAAAAAAAAABFB73AC901E573B3B FC555555555555B400AAAAAAAAAAAA8401D555555555555BFA9FAB0BC1CD2E9BFC5555 55555555B400AAAAAAAAAAAA84020000000000000BF7FDB97530ECAA0BFC5555555555 55B400AAAAAAAAAAAA840215555555555553FA3882771660543BFC555555555555B400 AAAAAAAAAAAA84022AAAAAAAAAAAA3FB6480F2B9D6478BFC555555555555B400AAAAAA AAAAAA84023FFFFFFFFFFFF3FC1C71C71C71C6DBFC555555555555B400FFFFFFFFFFFF DC024000000000000BFB70A3D70A3D711BFC555555555555B400FFFFFFFFFFFFDC022A AAAAAAAAAABBFBFC3518A6DFC38BFC555555555555B400FFFFFFFFFFFFDC0215555555 55556BFC3DD1BAF98D76DBFC555555555555B400FFFFFFFFFFFFDC020000000000001B FC7777777777778BFC555555555555B400FFFFFFFFFFFFDC01D555555555557BFCAB0B C1CD2DE40BFC555555555555B400FFFFFFFFFFFFDC01AAAAAAAAAAAACBFCD88E99FAB0 BC4BFC555555555555B400FFFFFFFFFFFFDC018000000000001BFD0000000000001BFC 555555555555B400FFFFFFFFFFFFDC015555555555556BFD10AFF9EE8DD7EBFC555555 555555B400FFFFFFFFFFFFDC012AAAAAAAAAAABBFD1E573AC901E59BFC555555555555 B400FFFFFFFFFFFFDC010000000000000BFD28F5C28F5C291BFC555555555555B400FF FFFFFFFFFFDC00AAAAAAAAAAAABBFD308B91419CA27BFC555555555555B400FFFFFFFF FFFFDC005555555555556BFD3518A6DFC351ABFC555555555555B400FFFFFFFFFFFFDC 000000000000001BFD369D0369D036BBFC555555555555B400FFFFFFFFFFFFDBFF5555 555555558BFD3518A6DFC351ABFC555555555555B400FFFFFFFFFFFFDBFE5555555555 55BBFD308B91419CA27BFC555555555555B400FFFFFFFFFFFFDBCC8000000000000BFD 28F5C28F5C291BFC555555555555B400FFFFFFFFFFFFD3FE555555555554FBFD1E573A C901E59BFC555555555555B400FFFFFFFFFFFFD3FF5555555555552BFD10AFF9EE8DD7 EBFC555555555555B400FFFFFFFFFFFFD3FFFFFFFFFFFFFFCBFD0000000000002BFC55 5555555555B400FFFFFFFFFFFFD4005555555555553BFCD88E99FAB0BC5BFC55555555 5555B400FFFFFFFFFFFFD400AAAAAAAAAAAA8BFCAB0BC1CD2DE44BFC555555555555B4 00FFFFFFFFFFFFD400FFFFFFFFFFFFDBFC777777777777DBFC555555555555B400FFFF FFFFFFFFD4012AAAAAAAAAAA9BFC3DD1BAF98D771BFC555555555555B400FFFFFFFFFF FFD4015555555555554BFBFC3518A6DFC3FBFC555555555555B400FFFFFFFFFFFFD401 7FFFFFFFFFFFFBFB70A3D70A3D715BFC555555555555B400FFFFFFFFFFFFD401AAAAAA AAAAAAABFAB1DF623A67EBEBFC555555555555B400FFFFFFFFFFFFD401D55555555555 5BF8A8C536FE1A904BFC555555555555B400FFFFFFFFFFFFD40200000000000003F9EB 851EB851EA8BFC555555555555B400FFFFFFFFFFFFD40215555555555553FB36FE1A8C 536F6BFC555555555555B400FFFFFFFFFFFFD4022AAAAAAAAAAAA3FBFF3DD1BAF98CCB FC555555555555B400FFFFFFFFFFFFD4023FFFFFFFFFFFF3FC69D0369D03697BFC5555 55555555B4012AAAAAAAAAAA9C024000000000000BFA87654320FEDDABFC5555555555 55B4012AAAAAAAAAAA9C022AAAAAAAAAAABBFB4F43E32D21C14BFC555555555555B401 2AAAAAAAAAAA9C021555555555556BFBCEB240795CEB6BFC555555555555B4012AAAAA AAAAAA9C020000000000001BFC20FEDCBA98766BFC555555555555B4012AAAAAAAAAAA 9C01D555555555557BFC549327104EE2EBFC555555555555B4012AAAAAAAAAAA9C01AA AAAAAAAAAACBFC8215FF3DD1BB2BFC555555555555B4012AAAAAAAAAAA9C0180000000 00001BFCA987654320FF0BFC555555555555B4012AAAAAAAAAAA9C015555555555556B FCCAE759203CAEABFC555555555555B4012AAAAAAAAAAA9C012AAAAAAAAAAABBFCE635 DAD524C9FBFC555555555555B4012AAAAAAAAAAA9C010000000000000BFCFB72EA61D9 510BFC555555555555B4012AAAAAAAAAAA9C00AAAAAAAAAAAABBFD054F43E32D21EBFC 555555555555B4012AAAAAAAAAAA9C005555555555556BFD09DC598153D11BFC555555 555555B4012AAAAAAAAAAA9C000000000000001BFD0B60B60B60B62BFC555555555555 B4012AAAAAAAAAAA9BFF5555555555558BFD09DC598153D11BFC555555555555B4012A AAAAAAAAAA9BFE555555555555BBFD054F43E32D21EBFC555555555555B4012AAAAAAA AAAA9BCC8000000000000BFCFB72EA61D9510BFC555555555555B4012AAAAAAAAAAA93 FE555555555554FBFCE635DAD524CA0BFC555555555555B4012AAAAAAAAAAA93FF5555 555555552BFCCAE759203CAEBBFC555555555555B4012AAAAAAAAAAA93FFFFFFFFFFFF FFCBFCA987654320FF2BFC555555555555B4012AAAAAAAAAAA94005555555555553BFC 8215FF3DD1BB4BFC555555555555B4012AAAAAAAAAAA9400AAAAAAAAAAAA8BFC549327 104EE32BFC555555555555B4012AAAAAAAAAAA9400FFFFFFFFFFFFDBFC20FEDCBA9876 BBFC555555555555B4012AAAAAAAAAAA94012AAAAAAAAAAA9BFBCEB240795CEBDBFC55 5555555555B4012AAAAAAAAAAA94015555555555554BFB4F43E32D21C1BBFC55555555 5555B4012AAAAAAAAAAA94017FFFFFFFFFFFFBFA87654320FEDE1BFC555555555555B4 012AAAAAAAAAAA9401AAAAAAAAAAAAABF85FF3DD1BAF9D6BFC555555555555B4012AAA AAAAAAAA9401D5555555555553F9DF623A67EAC0EBFC555555555555B4012AAAAAAAAA AA940200000000000003FB27D27D27D27CEBFC555555555555B4012AAAAAAAAAAA9402 15555555555553FBE3EF50061171ABFC555555555555B4012AAAAAAAAAAA94022AAAAA AAAAAAA3FC5617839A5BC78BFC555555555555B4012AAAAAAAAAAA94023FFFFFFFFFFF F3FCC048D159E26A9BFC555555555555B4015555555555554C024000000000000BF523 456789ABE48BFC555555555555B4015555555555554C022AAAAAAAAAAABBFA203CAE75 92040BFC555555555555B4015555555555554C021555555555556BFB0F8CB487042C6B FC555555555555B4015555555555554C020000000000001BFB82D82D82D82DBBFC5555 55555555B4015555555555554C01D555555555557BFBEA00C22E4506CBFC5555555555 55B4015555555555554C01AAAAAAAAAAAACBFC22833944A55BABFC555555555555B401 5555555555554C018000000000001BFC49F49F49F49F8BFC555555555555B401555555 5555554C015555555555556BFC6B549327104F0BFC555555555555B401555555555555 4C012AAAAAAAAAAABBFC86A314DBF86A5BFC555555555555B4015555555555554C0100 00000000000BFC9BE02468ACF16BFC555555555555B4015555555555554C00AAAAAAAA AAAABBFCAB0BC1CD2DE43BFC555555555555B4015555555555554C005555555555556B FCB425ED097B42ABFC555555555555B4015555555555554C000000000000001BFCB72E A61D950CCBFC555555555555B4015555555555554BFF5555555555558BFCB425ED097B 429BFC555555555555B4015555555555554BFE555555555555BBFCAB0BC1CD2DE43BFC 555555555555B4015555555555554BCC8000000000000BFC9BE02468ACF17BFC555555 555555B40155555555555543FE555555555554FBFC86A314DBF86A7BFC555555555555 B40155555555555543FF5555555555552BFC6B549327104F2BFC555555555555B40155 555555555543FFFFFFFFFFFFFFCBFC49F49F49F49F9BFC555555555555B40155555555 555544005555555555553BFC22833944A55BBBFC555555555555B40155555555555544 00AAAAAAAAAAAA8BFBEA00C22E45071BFC555555555555B4015555555555554400FFFF FFFFFFFFDBFB82D82D82D82E3BFC555555555555B40155555555555544012AAAAAAAAA AA9BFB0F8CB487042CBBFC555555555555B40155555555555544015555555555554BFA 203CAE7592052BFC555555555555B40155555555555544017FFFFFFFFFFFFBF5234567 89ABFA2BFC555555555555B4015555555555554401AAAAAAAAAAAAA3FA264E209DC597 0BFC555555555555B4015555555555554401D5555555555553FB36FE1A8C536F6BFC55 5555555555B401555555555555440200000000000003FBE6F8091A2B3BFBFC55555555 5555B401555555555555440215555555555553FC518A6DFC35186BFC555555555555B4 0155555555555544022AAAAAAAAAAAA3FCB5AA499388271BFC555555555555B4015555 5555555544023FFFFFFFFFFFF3FD0FEDCBA987651BFC555555555555B4017FFFFFFFFF FFFC0240000000000003FA999999999998EBFC555555555555B4017FFFFFFFFFFFFC02 2AAAAAAAAAAAB3F904EE2CC0A9E80BFC555555555555B4017FFFFFFFFFFFFC02155555 5555556BF8F19690E08580CBFC555555555555B4017FFFFFFFFFFFFC02000000000000 1BFA62FC962FC962EBFC555555555555B4017FFFFFFFFFFFFC01D555555555557BFB18 A6DFC3518A8BFC555555555555B4017FFFFFFFFFFFFC01AAAAAAAAAAAACBFB73AC901E 573B0BFC555555555555B4017FFFFFFFFFFFFC018000000000001BFBC28F5C28F5C2CB FC555555555555B4017FFFFFFFFFFFFC015555555555556BFC02A7A1F196910BFC5555 55555555B4017FFFFFFFFFFFFC012AAAAAAAAAAABBFC1DF623A67EAC5BFC5555555555 55B4017FFFFFFFFFFFFC010000000000000BFC3333333333336BFC555555555555B401 7FFFFFFFFFFFFC00AAAAAAAAAAAABBFC425ED097B4262BFC555555555555B4017FFFFF FFFFFFFC005555555555556BFC4B78FBD401849BFC555555555555B4017FFFFFFFFFFF FC000000000000001BFC4E81B4E81B4EBBFC555555555555B4017FFFFFFFFFFFFBFF55 55555555558BFC4B78FBD401848BFC555555555555B4017FFFFFFFFFFFFBFE55555555 5555BBFC425ED097B4262BFC555555555555B4017FFFFFFFFFFFFBCC8000000000000B FC3333333333336BFC555555555555B4017FFFFFFFFFFFF3FE555555555554FBFC1DF6 23A67EAC6BFC555555555555B4017FFFFFFFFFFFF3FF5555555555552BFC02A7A1F196 911BFC555555555555B4017FFFFFFFFFFFF3FFFFFFFFFFFFFFCBFBC28F5C28F5C30BFC 555555555555B4017FFFFFFFFFFFF4005555555555553BFB73AC901E573B4BFC555555 555555B4017FFFFFFFFFFFF400AAAAAAAAAAAA8BFB18A6DFC3518AFBFC555555555555 B4017FFFFFFFFFFFF400FFFFFFFFFFFFDBFA62FC962FC9642BFC555555555555B4017F FFFFFFFFFFF4012AAAAAAAAAAA9BF8F19690E08584ABFC555555555555B4017FFFFFFF FFFFF40155555555555543F904EE2CC0A9E63BFC555555555555B4017FFFFFFFFFFFF4 017FFFFFFFFFFFF3FA9999999999987BFC555555555555B4017FFFFFFFFFFFF401AAAA AAAAAAAAA3FB6480F2B9D647ABFC555555555555B4017FFFFFFFFFFFF401D555555555 5553FC042BFE7BA375CBFC555555555555B4017FFFFFFFFFFFF40200000000000003FC 5C28F5C28F5C0BFC555555555555B4017FFFFFFFFFFFF40215555555555553FCBA375F 31AED67BFC555555555555B4017FFFFFFFFFFFF4022AAAAAAAAAAAA3FD0F2B9D6480F2 9BFC555555555555B4017FFFFFFFFFFFF4023FFFFFFFFFFFF3FD4444444444441BFC55 5555555555B401AAAAAAAAAAAAAC0240000000000003FBB05B05B05B057BFC55555555 5555B401AAAAAAAAAAAAAC022AAAAAAAAAAAB3FB24C9C413B8B2EBFC555555555555B4 01AAAAAAAAAAAAAC0215555555555563FA4AB6CD8EFB119BFC555555555555B401AAAA AAAAAAAAAC0200000000000013F8907F6E5D4C3B7BFC555555555555B401AAAAAAAAAA AAAC01D555555555557BF8A8C536FE1A8CEBFC555555555555B401AAAAAAAAAAAAAC01 AAAAAAAAAAAACBFA203CAE7592043BFC555555555555B401AAAAAAAAAAAAAC01800000 0000001BFABE02468ACF13BBFC555555555555B401AAAAAAAAAAAAAC01555555555555 6BFB21C10AFF9EE93BFC555555555555B401AAAAAAAAAAAAAC012AAAAAAAAAAABBFB58 5E0E696F1FDBFC555555555555B401AAAAAAAAAAAAAC010000000000000BFB82D82D82 D82DEBFC555555555555B401AAAAAAAAAAAAAC00AAAAAAAAAAAABBFBA12F684BDA135B FC555555555555B401AAAAAAAAAAAAAC005555555555556BFBB363BEC474D03BFC5555 55555555B401AAAAAAAAAAAAAC000000000000001BFBB97530ECA8648BFC5555555555 55B401AAAAAAAAAAAAABFF5555555555558BFBB363BEC474D03BFC555555555555B401 AAAAAAAAAAAAABFE555555555555BBFBA12F684BDA136BFC555555555555B401AAAAAA AAAAAAABCC8000000000000BFB82D82D82D82DFBFC555555555555B401AAAAAAAAAAAA A3FE555555555554FBFB585E0E696F1FFBFC555555555555B401AAAAAAAAAAAAA3FF55 55555555552BFB21C10AFF9EE95BFC555555555555B401AAAAAAAAAAAAA3FFFFFFFFFF FFFFCBFABE02468ACF144BFC555555555555B401AAAAAAAAAAAAA4005555555555553B FA203CAE759204DBFC555555555555B401AAAAAAAAAAAAA400AAAAAAAAAAAA8BF8A8C5 36FE1A908BFC555555555555B401AAAAAAAAAAAAA400FFFFFFFFFFFFD3F8907F6E5D4C 368BFC555555555555B401AAAAAAAAAAAAA4012AAAAAAAAAAA93FA4AB6CD8EFB10ABFC 555555555555B401AAAAAAAAAAAAA40155555555555543FB24C9C413B8B27BFC555555 555555B401AAAAAAAAAAAAA4017FFFFFFFFFFFF3FBB05B05B05B052BFC555555555555 B401AAAAAAAAAAAAA401AAAAAAAAAAAAA3FC240795CEB2404BFC555555555555B401AA AAAAAAAAAAA401D5555555555553FC75F31AED6A923BFC555555555555B401AAAAAAAA AAAAA40200000000000003FCCDF0123456788BFC555555555555B401AAAAAAAAAAAAA4 0215555555555553FD15FF3DD1BAF97BFC555555555555B401AAAAAAAAAAAAA4022AAA AAAAAAAAA3FD480F2B9D6480CBFC555555555555B401AAAAAAAAAAAAA4023FFFFFFFFF FFF3FD7D27D27D27D25BFC555555555555B401D555555555555C0240000000000003FC 530ECA8641FDABFC555555555555B401D555555555555C022AAAAAAAAAAAB3FC0D4629 B7F0D47BFC555555555555B401D555555555555C0215555555555563FB9B1DF623A67E CBFC555555555555B401D555555555555C0200000000000013FB27D27D27D27D5BFC55 5555555555B401D555555555555C01D5555555555573FA8153D0F8CB489BFC55555555 5555B401D555555555555C01AAAAAAAAAAAAC3F99690E0857FCF5BFC555555555555B4 01D555555555555C0180000000000013F76C16C16C16C15BFC555555555555B401D555 555555555C015555555555556BF85FF3DD1BAF997BFC555555555555B401D555555555 555C012AAAAAAAAAAABBF98A6DFC3518A74BFC555555555555B401D555555555555C01 0000000000000BFA1A2B3C4D5E6FDBFC555555555555B401D555555555555C00AAAAAA AAAAAABBFA56D9B1DF623ABBFC555555555555B401D555555555555C00555555555555 6BFA7B425ED097B46BFC555555555555B401D555555555555C000000000000001BFA87 654320FEDD0BFC555555555555B401D555555555555BFF5555555555558BFA7B425ED0 97B48BFC555555555555B401D555555555555BFE555555555555BBFA56D9B1DF623ACB FC555555555555B401D555555555555BCC8000000000000BFA1A2B3C4D5E6FEBFC5555 55555555B401D5555555555553FE555555555554FBF98A6DFC3518A7BBFC5555555555 55B401D5555555555553FF5555555555552BF85FF3DD1BAF9ABBFC555555555555B401 D5555555555553FFFFFFFFFFFFFFC3F76C16C16C16BD6BFC555555555555B401D55555 555555540055555555555533F99690E0857FCE5BFC555555555555B401D55555555555 5400AAAAAAAAAAAA83FA8153D0F8CB47DBFC555555555555B401D555555555555400FF FFFFFFFFFFD3FB27D27D27D27CDBFC555555555555B401D5555555555554012AAAAAAA AAAA93FB9B1DF623A67E4BFC555555555555B401D55555555555540155555555555543 FC0D4629B7F0D43BFC555555555555B401D5555555555554017FFFFFFFFFFFF3FC530E CA8641FD9BFC555555555555B401D555555555555401AAAAAAAAAAAAA3FC9EE8DD7CC6 BB4BFC555555555555B401D555555555555401D5555555555553FCF0D4629B7F0D3BFC 555555555555B401D55555555555540200000000000003FD2468ACF13579CBFC555555 555555B401D55555555555540215555555555553FD536FE1A8C536FBFC555555555555 B401D5555555555554022AAAAAAAAAAAA3FD857FCF746EBE4BFC555555555555B401D5 555555555554023FFFFFFFFFFFF3FDBA987654320FDBFC555555555555B40200000000 00000C0240000000000003FCD70A3D70A3D70BFC555555555555B4020000000000000C 022AAAAAAAAAAAB3FC91419CA252ADDBFC555555555555B4020000000000000C021555 5555555563FC518A6DFC3518BBFC555555555555B4020000000000000C020000000000 0013FC17E4B17E4B180BFC555555555555B4020000000000000C01D5555555555573FB C8A0CE512956FBFC555555555555B4020000000000000C01AAAAAAAAAAAAC3FB6D9B1D F623A68BFC555555555555B4020000000000000C0180000000000013FB1EB851EB851E CBFC555555555555B4020000000000000C0155555555555563FAB7F0D4629B7EEBFC55 5555555555B4020000000000000C012AAAAAAAAAAAB3FA4AB6CD8EFB11BBFC55555555 5555B4020000000000000C0100000000000003F9EB851EB851EB0BFC555555555555B4 020000000000000C00AAAAAAAAAAAAB3F9722833944A554BFC555555555555B4020000 000000000C0055555555555563F92956D9B1DF61BBFC555555555555B4020000000000 000C0000000000000013F91111111111108BFC555555555555B4020000000000000BFF 55555555555583F92956D9B1DF61BBFC555555555555B4020000000000000BFE555555 555555B3F9722833944A551BFC555555555555B4020000000000000BCC800000000000 03F9EB851EB851EADBFC555555555555B40200000000000003FE555555555554F3FA4A B6CD8EFB117BFC555555555555B40200000000000003FF55555555555523FAB7F0D462 9B7EABFC555555555555B40200000000000003FFFFFFFFFFFFFFC3FB1EB851EB851E8B FC555555555555B402000000000000040055555555555533FB6D9B1DF623A64BFC5555 55555555B4020000000000000400AAAAAAAAAAAA83FBC8A0CE5129569BFC5555555555 55B4020000000000000400FFFFFFFFFFFFD3FC17E4B17E4B17BBFC555555555555B402 00000000000004012AAAAAAAAAAA93FC518A6DFC35187BFC555555555555B402000000 000000040155555555555543FC91419CA252AD8BFC555555555555B402000000000000 04017FFFFFFFFFFFF3FCD70A3D70A3D6EBFC555555555555B4020000000000000401AA AAAAAAAAAAA3FD11722833944A5BFC555555555555B4020000000000000401D5555555 555553FD3A67EAC2F0734BFC555555555555B402000000000000040200000000000003 FD6666666666666BFC555555555555B402000000000000040215555555555553FD956D 9B1DF6239BFC555555555555B40200000000000004022AAAAAAAAAAAA3FDC77D88E99F AAFBFC555555555555B40200000000000004023FFFFFFFFFFFF3FDFC962FC962FC8BFC 555555555555B4021555555555555C0240000000000003FD320FEDCBA9875BFC555555 555555B4021555555555555C022AAAAAAAAAAAB3FD0F2B9D6480F2CBFC555555555555 B4021555555555555C0215555555555563FCDEA00C22E4506BFC555555555555B40215 55555555555C0200000000000013FCA4FA4FA4FA4FBBFC555555555555B40215555555 55555C01D5555555555573FC7166054F43E33BFC555555555555B4021555555555555C 01AAAAAAAAAAAAC3FC43E32D21C10AFBFC555555555555B4021555555555555C018000 0000000013FC1C71C71C71C71BFC555555555555B4021555555555555C015555555555 5563FBF623A67EAC2EDBFC555555555555B4021555555555555C012AAAAAAAAAAAB3FB BF86A314DBF84BFC555555555555B4021555555555555C0100000000000003FB950C83 FB72EA2BFC555555555555B4021555555555555C00AAAAAAAAAAAAB3FB76B549327104 BBFC555555555555B4021555555555555C0055555555555563FB6480F2B9D647DBFC55 5555555555B4021555555555555C0000000000000013FB5E6F8091A2B38BFC55555555 5555B4021555555555555BFF55555555555583FB6480F2B9D647DBFC555555555555B4 021555555555555BFE555555555555B3FB76B549327104ABFC555555555555B4021555 555555555BCC80000000000003FB950C83FB72EA1BFC555555555555B4021555555555 5553FE555555555554F3FBBF86A314DBF81BFC555555555555B40215555555555553FF 55555555555523FBF623A67EAC2EBBFC555555555555B40215555555555553FFFFFFFF FFFFFFC3FC1C71C71C71C6FBFC555555555555B4021555555555555400555555555555 33FC43E32D21C10ADBFC555555555555B4021555555555555400AAAAAAAAAAAA83FC71 66054F43E2FBFC555555555555B4021555555555555400FFFFFFFFFFFFD3FCA4FA4FA4 FA4F6BFC555555555555B40215555555555554012AAAAAAAAAAA93FCDEA00C22E4502B FC555555555555B402155555555555540155555555555543FD0F2B9D6480F2ABFC5555 55555555B40215555555555554017FFFFFFFFFFFF3FD320FEDCBA9874BFC5555555555 55B4021555555555555401AAAAAAAAAAAAA3FD57FCF746EBE62BFC555555555555B402 1555555555555401D5555555555553FD80F2B9D6480F1BFC555555555555B402155555 555555540200000000000003FDACF13579BE024BFC555555555555B402155555555555 540215555555555553FDDBF86A314DBF7BFC555555555555B40215555555555554022A AAAAAAAAAAA3FE07042BFE7BA36BFC555555555555B40215555555555554023FFFFFFF FFFFF3FE21907F6E5D4C3BFC555555555555B4022AAAAAAAAAAAAC0240000000000003 FD7D27D27D27D25BFC555555555555B4022AAAAAAAAAAAAC022AAAAAAAAAAAB3FD5A43 8215FF3DCBFC555555555555B4022AAAAAAAAAAAAC0215555555555563FD3A67EAC2F0 733BFC555555555555B4022AAAAAAAAAAAAC0200000000000013FD1D950C83FB72DBFC 555555555555B4022AAAAAAAAAAAAC01D5555555555573FD03CAE759203C9BFC555555 555555B4022AAAAAAAAAAAAC01AAAAAAAAAAAAC3FCDA12F684BDA0FBFC555555555555 B4022AAAAAAAAAAAAC0180000000000013FCB2A1907F6E5D1BFC555555555555B4022A AAAAAAAAAAAC0155555555555563FC91419CA252AD7BFC555555555555B4022AAAAAAA AAAAAC012AAAAAAAAAAAB3FC75F31AED6A922BFC555555555555B4022AAAAAAAAAAAAC 0100000000000003FC60B60B60B60B1BFC555555555555B4022AAAAAAAAAAAAC00AAAA AAAAAAAAB3FC518A6DFC35185BFC555555555555B4022AAAAAAAAAAAAC005555555555 5563FC487042BFE7B9EBFC555555555555B4022AAAAAAAAAAAAC0000000000000013FC 456789ABCDEFCBFC555555555555B4022AAAAAAAAAAAABFF55555555555583FC487042 BFE7B9FBFC555555555555B4022AAAAAAAAAAAABFE555555555555B3FC518A6DFC3518 5BFC555555555555B4022AAAAAAAAAAAABCC80000000000003FC60B60B60B60B1BFC55 5555555555B4022AAAAAAAAAAAA3FE555555555554F3FC75F31AED6A921BFC55555555 5555B4022AAAAAAAAAAAA3FF55555555555523FC91419CA252AD6BFC555555555555B4 022AAAAAAAAAAAA3FFFFFFFFFFFFFFC3FCB2A1907F6E5CFBFC555555555555B4022AAA AAAAAAAAA40055555555555533FCDA12F684BDA0DBFC555555555555B4022AAAAAAAAA AAA400AAAAAAAAAAAA83FD03CAE759203C8BFC555555555555B4022AAAAAAAAAAAA400 FFFFFFFFFFFFD3FD1D950C83FB72BBFC555555555555B4022AAAAAAAAAAAA4012AAAAA AAAAAA93FD3A67EAC2F0731BFC555555555555B4022AAAAAAAAAAAA401555555555555 43FD5A438215FF3DABFC555555555555B4022AAAAAAAAAAAA4017FFFFFFFFFFFF3FD7D 27D27D27D24BFC555555555555B4022AAAAAAAAAAAA401AAAAAAAAAAAAA3FDA314DBF8 6A312BFC555555555555B4022AAAAAAAAAAAA401D5555555555553FDCC0A9E87C65A1B FC555555555555B4022AAAAAAAAAAAA40200000000000003FDF8091A2B3C4D4BFC5555 55555555B4022AAAAAAAAAAAA40215555555555553FE1388277166053BFC5555555555 55B4022AAAAAAAAAAAA4022AAAAAAAAAAAA3FE2C901E573AC8EBFC555555555555B402 2AAAAAAAAAAAA4023FFFFFFFFFFFF3FE471C71C71C71BBFC555555555555B4023FFFFF FFFFFFFC0240000000000003FDCCCCCCCCCCCC9BFC555555555555B4023FFFFFFFFFFF FC022AAAAAAAAAAAB3FDA9E87C65A4380BFC555555555555B4023FFFFFFFFFFFFC0215 555555555563FD8A0CE512956D7BFC555555555555B4023FFFFFFFFFFFFC0200000000 000013FD6D3A06D3A06D2BFC555555555555B4023FFFFFFFFFFFFC01D5555555555573 FD536FE1A8C536EBFC555555555555B4023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD3CAE 759203CACBFC555555555555B4023FFFFFFFFFFFFC0180000000000013FD28F5C28F5C 28DBFC555555555555B4023FFFFFFFFFFFFC0155555555555563FD1845C8A0CE50FBFC 555555555555B4023FFFFFFFFFFFFC012AAAAAAAAAAAB3FD0A9E87C65A435BFC555555 555555B4023FFFFFFFFFFFFC0100000000000003FCFFFFFFFFFFFF9BFC555555555555 B4023FFFFFFFFFFFFC00AAAAAAAAAAAAB3FCF0D4629B7F0CDBFC555555555555B4023F FFFFFFFFFFFC0055555555555563FCE7BA375F31AE6BFC555555555555B4023FFFFFFF FFFFFC0000000000000013FCE4B17E4B17E44BFC555555555555B4023FFFFFFFFFFFFB FF55555555555583FCE7BA375F31AE7BFC555555555555B4023FFFFFFFFFFFFBFE5555 55555555B3FCF0D4629B7F0CDBFC555555555555B4023FFFFFFFFFFFFBCC8000000000 0003FCFFFFFFFFFFFF9BFC555555555555B4023FFFFFFFFFFFF3FE555555555554F3FD 0A9E87C65A434BFC555555555555B4023FFFFFFFFFFFF3FF55555555555523FD1845C8 A0CE50FBFC555555555555B4023FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD28F5C28F5C28 BBFC555555555555B4023FFFFFFFFFFFF40055555555555533FD3CAE759203CAABFC55 5555555555B4023FFFFFFFFFFFF400AAAAAAAAAAAA83FD536FE1A8C536CBFC55555555 5555B4023FFFFFFFFFFFF400FFFFFFFFFFFFD3FD6D3A06D3A06CFBFC555555555555B4 023FFFFFFFFFFFF4012AAAAAAAAAAA93FD8A0CE512956D5BFC555555555555B4023FFF FFFFFFFFF40155555555555543FDA9E87C65A437EBFC555555555555B4023FFFFFFFFF FFF4017FFFFFFFFFFFF3FDCCCCCCCCCCCC8BFC555555555555B4023FFFFFFFFFFFF401 AAAAAAAAAAAAA3FDF2B9D6480F2B6BFC555555555555B4023FFFFFFFFFFFF401D55555 55555553FE0DD7CC6BB5AA3BFC555555555555B4023FFFFFFFFFFFF402000000000000 03FE23D70A3D70A3CBFC555555555555B4023FFFFFFFFFFFF40215555555555553FE3B 5AA49938825BFC555555555555B4023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE54629B7F 0D460BFC555555555555B4023FFFFFFFFFFFF4023FFFFFFFFFFFF3FE6EEEEEEEEEEEDB CA8000000000000C024000000000000C0240000000000003FA1111111111116BCA8000 000000000C024000000000000C022AAAAAAAAAAABBF4845C8A0CE4DF1BCA8000000000 000C024000000000000C021555555555556BFA04EE2CC0A9E7BBCA8000000000000C02 4000000000000C020000000000001BFAEB851EB851EA6BCA8000000000000C02400000 0000000C01D555555555557BFB5CEB240795CE4BCA8000000000000C02400000000000 0C01AAAAAAAAAAAACBFBB7F0D4629B7ECBCA8000000000000C024000000000000C0180 00000000001BFC0369D0369D034BCA8000000000000C024000000000000C0155555555 55556BFC24C9C413B8B2EBCA8000000000000C024000000000000C012AAAAAAAAAAABB FC401845C8A0CE3BCA8000000000000C024000000000000C010000000000000BFC5555 555555554BCA8000000000000C024000000000000C00AAAAAAAAAAAABBFC6480F2B9D6 480BCA8000000000000C024000000000000C005555555555556BFC6D9B1DF623A67BCA 8000000000000C024000000000000C000000000000001BFC70A3D70A3D709BCA800000 0000000C024000000000000BFF5555555555558BFC6D9B1DF623A66BCA800000000000 0C024000000000000BFE555555555555BBFC6480F2B9D6480BCA8000000000000C0240 00000000000BCC8000000000000BFC5555555555554BCA8000000000000C0240000000 000003FE555555555554FBFC401845C8A0CE4BCA8000000000000C0240000000000003 FF5555555555552BFC24C9C413B8B2FBCA8000000000000C0240000000000003FFFFFF FFFFFFFFCBFC0369D0369D036BCA8000000000000C0240000000000004005555555555 553BFBB7F0D4629B7F1BCA8000000000000C024000000000000400AAAAAAAAAAAA8BFB 5CEB240795CEBBCA8000000000000C024000000000000400FFFFFFFFFFFFDBFAEB851E B851EBABCA8000000000000C0240000000000004012AAAAAAAAAAA9BFA04EE2CC0A9E8 ABCA8000000000000C0240000000000004015555555555554BF4845C8A0CE5195BCA80 00000000000C0240000000000004017FFFFFFFFFFFF3FA111111111110FBCA80000000 00000C024000000000000401AAAAAAAAAAAAA3FB203CAE759203EBCA8000000000000C 024000000000000401D5555555555553FBC413B8B302A7CBCA8000000000000C024000 00000000040200000000000003FC3A06D3A06D3A2BCA8000000000000C024000000000 00040215555555555553FC98153D0F8CB49BCA8000000000000C024000000000000402 2AAAAAAAAAAAA3FCFC3518A6DFC34BCA8000000000000C0240000000000004023FFFFF FFFFFFF3FD3333333333332BCA8000000000000C022AAAAAAAAAAABC02400000000000 0BF923456789ABCC4BCA8000000000000C022AAAAAAAAAAABC022AAAAAAAAAAABBFAA8 C536FE1A8B0BCA8000000000000C022AAAAAAAAAAABC021555555555556BFB53D0F8CB 486FABCA8000000000000C022AAAAAAAAAAABC020000000000001BFBC71C71C71C70FB CA8000000000000C022AAAAAAAAAAABC01D555555555557BFC1722833944A50BCA8000 000000000C022AAAAAAAAAAABC01AAAAAAAAAAAACBFC44A55B66C77D4BCA8000000000 000C022AAAAAAAAAAABC018000000000001BFC6C16C16C16C12BCA8000000000000C02 2AAAAAAAAAAABC015555555555556BFC8D76B5493270CBCA8000000000000C022AAAAA AAAAAABC012AAAAAAAAAAABBFCA8C536FE1A8C1BCA8000000000000C022AAAAAAAAAAA BC010000000000000BFCBE02468ACF132BCA8000000000000C022AAAAAAAAAAABC00AA AAAAAAAAAABBFCCD2DE3EF5005EBCA8000000000000C022AAAAAAAAAAABC0055555555 55556BFCD6480F2B9D645BCA8000000000000C022AAAAAAAAAAABC000000000000001B FCD950C83FB72E7BCA8000000000000C022AAAAAAAAAAABBFF5555555555558BFCD648 0F2B9D644BCA8000000000000C022AAAAAAAAAAABBFE555555555555BBFCCD2DE3EF50 05EBCA8000000000000C022AAAAAAAAAAABBCC8000000000000BFCBE02468ACF132BCA 8000000000000C022AAAAAAAAAAAB3FE555555555554FBFCA8C536FE1A8C2BCA800000 0000000C022AAAAAAAAAAAB3FF5555555555552BFC8D76B5493270DBCA800000000000 0C022AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFC6C16C16C16C14BCA8000000000000C022A AAAAAAAAAAB4005555555555553BFC44A55B66C77D6BCA8000000000000C022AAAAAAA AAAAB400AAAAAAAAAAAA8BFC1722833944A54BCA8000000000000C022AAAAAAAAAAAB4 00FFFFFFFFFFFFDBFBC71C71C71C719BCA8000000000000C022AAAAAAAAAAAB4012AAA AAAAAAAA9BFB53D0F8CB48701BCA8000000000000C022AAAAAAAAAAAB4015555555555 554BFAA8C536FE1A8BEBCA8000000000000C022AAAAAAAAAAAB4017FFFFFFFFFFFFBF9 23456789ABCD2BCA8000000000000C022AAAAAAAAAAAB401AAAAAAAAAAAAA3F93B8B30 2A7A205BCA8000000000000C022AAAAAAAAAAAB401D5555555555553FAE573AC901E58 1BCA8000000000000C022AAAAAAAAAAAB40200000000000003FBA2B3C4D5E6F89BCA80 00000000000C022AAAAAAAAAAAB40215555555555553FC2F684BDA12F6BBCA80000000 00000C022AAAAAAAAAAAB4022AAAAAAAAAAAA3FC9388277166056BCA8000000000000C 022AAAAAAAAAAAB4023FFFFFFFFFFFF3FCFDB97530ECA87BCA8000000000000C021555 555555556C024000000000000BFB07F6E5D4C3B25BCA8000000000000C021555555555 556C022AAAAAAAAAAABBFB938827716604CBCA8000000000000C021555555555556C02 1555555555556BFC097B425ED0977BCA8000000000000C021555555555556C02000000 0000001BFC4320FEDCBA982BCA8000000000000C021555555555556C01D55555555555 7BFC76B549327104ABCA8000000000000C021555555555556C01AAAAAAAAAAAACBFCA4 38215FF3DCEBCA8000000000000C021555555555556C018000000000001BFCCBA98765 4320CBCA8000000000000C021555555555556C015555555555556BFCED097B425ED06B CA8000000000000C021555555555556C012AAAAAAAAAAABBFD042BFE7BA375EBCA8000 000000000C021555555555556C010000000000000BFD0ECA8641FDB96BCA8000000000 000C021555555555556C00AAAAAAAAAAAABBFD166054F43E32CBCA8000000000000C02 1555555555556C005555555555556BFD1AED6A9264E1FBCA8000000000000C02155555 5555556C000000000000001BFD1C71C71C71C70BCA8000000000000C02155555555555 6BFF5555555555558BFD1AED6A9264E1FBCA8000000000000C021555555555556BFE55 5555555555BBFD166054F43E32CBCA8000000000000C021555555555556BCC80000000 00000BFD0ECA8641FDB96BCA8000000000000C0215555555555563FE555555555554FB FD042BFE7BA375EBCA8000000000000C0215555555555563FF5555555555552BFCED09 7B425ED07BCA8000000000000C0215555555555563FFFFFFFFFFFFFFCBFCCBA9876543 20EBCA8000000000000C0215555555555564005555555555553BFCA438215FF3DD0BCA 8000000000000C021555555555556400AAAAAAAAAAAA8BFC76B549327104EBCA800000 0000000C021555555555556400FFFFFFFFFFFFDBFC4320FEDCBA987BCA800000000000 0C0215555555555564012AAAAAAAAAAA9BFC097B425ED097BBCA8000000000000C0215 555555555564015555555555554BFB9388277166053BCA8000000000000C0215555555 555564017FFFFFFFFFFFFBFB07F6E5D4C3B29BCA8000000000000C0215555555555564 01AAAAAAAAAAAAABF9C10AFF9EE8DCBBCA8000000000000C021555555555556401D555 5555555553F89CA252ADB365CBCA8000000000000C0215555555555564020000000000 0003FAC71C71C71C72CBCA8000000000000C02155555555555640215555555555553FB 9FAB0BC1CD2E2BCA8000000000000C0215555555555564022AAAAAAAAAAAA3FC33F561 7839A5CBCA8000000000000C0215555555555564023FFFFFFFFFFFF3FC9E26AF37C048 DBCA8000000000000C020000000000001C024000000000000BFBB4E81B4E81B45BCA80 00000000000C020000000000001C022AAAAAAAAAAABBFC203CAE7592036BCA80000000 00000C020000000000001C021555555555556BFC5FF3DD1BAF987BCA8000000000000C 020000000000001C020000000000001BFC9999999999992BCA8000000000000C020000 000000001C01D555555555557BFCCD2DE3EF5005ABCA8000000000000C020000000000 001C01AAAAAAAAAAAACBFCFAB0BC1CD2DDEBCA8000000000000C020000000000001C01 8000000000001BFD111111111110EBCA8000000000000C020000000000001C01555555 5555556BFD21C10AFF9EE8BBCA8000000000000C020000000000001C012AAAAAAAAAAA BBFD2F684BDA12F66BCA8000000000000C020000000000001C010000000000000BFD3A 06D3A06D39EBCA8000000000000C020000000000001C00AAAAAAAAAAAABBFD419CA252 ADB34BCA8000000000000C020000000000001C005555555555556BFD4629B7F0D4627B CA8000000000000C020000000000001C000000000000001BFD47AE147AE1478BCA8000 000000000C020000000000001BFF5555555555558BFD4629B7F0D4627BCA8000000000 000C020000000000001BFE555555555555BBFD419CA252ADB34BCA8000000000000C02 0000000000001BCC8000000000000BFD3A06D3A06D39EBCA8000000000000C02000000 00000013FE555555555554FBFD2F684BDA12F66BCA8000000000000C02000000000000 13FF5555555555552BFD21C10AFF9EE8BBCA8000000000000C0200000000000013FFFF FFFFFFFFFFCBFD111111111110FBCA8000000000000C02000000000000140055555555 55553BFCFAB0BC1CD2DDFBCA8000000000000C020000000000001400AAAAAAAAAAAA8B FCCD2DE3EF5005DBCA8000000000000C020000000000001400FFFFFFFFFFFFDBFC9999 999999996BCA8000000000000C0200000000000014012AAAAAAAAAAA9BFC5FF3DD1BAF 98BBCA8000000000000C0200000000000014015555555555554BFC203CAE759203ABCA 8000000000000C0200000000000014017FFFFFFFFFFFFBFBB4E81B4E81B49BCA800000 0000000C020000000000001401AAAAAAAAAAAAABFB1D33F56178393BCA800000000000 0C020000000000001401D555555555555BF9E573AC901E552BCA8000000000000C0200 0000000000140200000000000003F8B4E81B4E81BB0BCA8000000000000C0200000000 0000140215555555555553FAE573AC901E583BCA8000000000000C0200000000000014 022AAAAAAAAAAAA3FBBAF98D76B5498BCA8000000000000C0200000000000014023FFF FFFFFFFFF3FC47AE147AE147DBCA8000000000000C01D555555555557C024000000000 000BFC27D27D27D27D1BCA8000000000000C01D555555555557C022AAAAAAAAAAABBFC 6D9B1DF623A64BCA8000000000000C01D555555555557C021555555555556BFCAD524C 9C413B5BCA8000000000000C01D555555555557C020000000000001BFCE6F8091A2B3C 0BCA8000000000000C01D555555555557C01D555555555557BFD0D4629B7F0D44BCA80 00000000000C01D555555555557C01AAAAAAAAAAAACBFD240795CEB2406BCA80000000 00000C01D555555555557C018000000000001BFD37C048D159E25BCA8000000000000C 01D555555555557C015555555555556BFD487042BFE7BA2BCA8000000000000C01D555 555555557C012AAAAAAAAAAABBFD5617839A5BC7DBCA8000000000000C01D555555555 557C010000000000000BFD60B60B60B60B5BCA8000000000000C01D555555555557C00 AAAAAAAAAAAABBFD684BDA12F684BBCA8000000000000C01D555555555557C00555555 5555556BFD6CD8EFB11D33EBCA8000000000000C01D555555555557C00000000000000 1BFD6E5D4C3B2A18FBCA8000000000000C01D555555555557BFF5555555555558BFD6C D8EFB11D33EBCA8000000000000C01D555555555557BFE555555555555BBFD684BDA12 F684BBCA8000000000000C01D555555555557BCC8000000000000BFD60B60B60B60B5B CA8000000000000C01D5555555555573FE555555555554FBFD5617839A5BC7DBCA8000 000000000C01D5555555555573FF5555555555552BFD487042BFE7BA2BCA8000000000 000C01D5555555555573FFFFFFFFFFFFFFCBFD37C048D159E26BCA8000000000000C01 D5555555555574005555555555553BFD240795CEB2407BCA8000000000000C01D55555 5555557400AAAAAAAAAAAA8BFD0D4629B7F0D45BCA8000000000000C01D55555555555 7400FFFFFFFFFFFFDBFCE6F8091A2B3C4BCA8000000000000C01D5555555555574012A AAAAAAAAAA9BFCAD524C9C413BABCA8000000000000C01D55555555555740155555555 55554BFC6D9B1DF623A67BCA8000000000000C01D5555555555574017FFFFFFFFFFFFB FC27D27D27D27D1BCA8000000000000C01D555555555557401AAAAAAAAAAAAABFBB7F0 D4629B7EDBCA8000000000000C01D555555555557401D555555555555BFB1419CA252A DB1BCA8000000000000C01D5555555555574020000000000000BF9907F6E5D4C398BCA 8000000000000C01D55555555555740215555555555553F95FF3DD1BAF997BCA800000 0000000C01D5555555555574022AAAAAAAAAAAA3FB203CAE759203CBCA800000000000 0C01D5555555555574023FFFFFFFFFFFF3FBF49F49F49F49EBCA8000000000000C01AA AAAAAAAAAACC024000000000000BFC6C16C16C16C19BCA8000000000000C01AAAAAAAA AAAACC022AAAAAAAAAAABBFCB1DF623A67EAABCA8000000000000C01AAAAAAAAAAAACC 021555555555556BFCF19690E0857FDBCA8000000000000C01AAAAAAAAAAAACC020000 000000001BFD159E26AF37C04BCA8000000000000C01AAAAAAAAAAAACC01D555555555 557BFD2F684BDA12F68BCA8000000000000C01AAAAAAAAAAAACC01AAAAAAAAAAAACBFD 4629B7F0D462ABCA8000000000000C01AAAAAAAAAAAACC018000000000001BFD59E26A F37C049BCA8000000000000C01AAAAAAAAAAAACC015555555555556BFD6A9264E209DC 6BCA8000000000000C01AAAAAAAAAAAACC012AAAAAAAAAAABBFD7839A5BC7DEA1BCA80 00000000000C01AAAAAAAAAAAACC010000000000000BFD82D82D82D82D9BCA80000000 00000C01AAAAAAAAAAAACC00AAAAAAAAAAAABBFD8A6DFC3518A6FBCA8000000000000C 01AAAAAAAAAAAACC005555555555556BFD8EFB11D33F562BCA8000000000000C01AAAA AAAAAAAACC000000000000001BFD907F6E5D4C3B3BCA8000000000000C01AAAAAAAAAA AACBFF5555555555558BFD8EFB11D33F562BCA8000000000000C01AAAAAAAAAAAACBFE 555555555555BBFD8A6DFC3518A6FBCA8000000000000C01AAAAAAAAAAAACBCC800000 0000000BFD82D82D82D82D9BCA8000000000000C01AAAAAAAAAAAAC3FE555555555554 FBFD7839A5BC7DEA1BCA8000000000000C01AAAAAAAAAAAAC3FF5555555555552BFD6A 9264E209DC6BCA8000000000000C01AAAAAAAAAAAAC3FFFFFFFFFFFFFFCBFD59E26AF3 7C04ABCA8000000000000C01AAAAAAAAAAAAC4005555555555553BFD4629B7F0D462BB CA8000000000000C01AAAAAAAAAAAAC400AAAAAAAAAAAA8BFD2F684BDA12F69BCA8000 000000000C01AAAAAAAAAAAAC400FFFFFFFFFFFFDBFD159E26AF37C06BCA8000000000 000C01AAAAAAAAAAAAC4012AAAAAAAAAAA9BFCF19690E085802BCA8000000000000C01 AAAAAAAAAAAAC4015555555555554BFCB1DF623A67EAFBCA8000000000000C01AAAAAA AAAAAAC4017FFFFFFFFFFFFBFC6C16C16C16C19BCA8000000000000C01AAAAAAAAAAAA C401AAAAAAAAAAAAABFC203CAE759203EBCA8000000000000C01AAAAAAAAAAAAC401D5 55555555555BFB9CA252ADB363FBCA8000000000000C01AAAAAAAAAAAAC40200000000 00000BFAD950C83FB72ECBCA8000000000000C01AAAAAAAAAAAAC4021555555555555B F8845C8A0CE5143BCA8000000000000C01AAAAAAAAAAAAC4022AAAAAAAAAAAA3FA2F68 4BDA12F54BCA8000000000000C01AAAAAAAAAAAAC4023FFFFFFFFFFFF3FB6C16C16C16 C0EBCA8000000000000C018000000000001C024000000000000BFCA740DA740DA71BCA 8000000000000C018000000000001C022AAAAAAAAAAABBFCED097B425ED06BCA800000 0000000C018000000000001C021555555555556BFD166054F43E32CBCA800000000000 0C018000000000001C020000000000001BFD3333333333331BCA8000000000000C0180 00000000001C01D555555555557BFD4CFD585E0E696BCA8000000000000C0180000000 00001C01AAAAAAAAAAAACBFD63BEC474CFD57BCA8000000000000C018000000000001C 018000000000001BFD7777777777776BCA8000000000000C018000000000001C015555 555555556BFD88277166054F3BCA8000000000000C018000000000001C012AAAAAAAAA AABBFD95CEB240795CEBCA8000000000000C018000000000001C010000000000000BFD A06D3A06D3A06BCA8000000000000C018000000000001C00AAAAAAAAAAAABBFDA80308 B91419CBCA8000000000000C018000000000001C005555555555556BFDAC901E573AC8 FBCA8000000000000C018000000000001C000000000000001BFDAE147AE147AE0BCA80 00000000000C018000000000001BFF5555555555558BFDAC901E573AC8FBCA80000000 00000C018000000000001BFE555555555555BBFDA80308B91419CBCA8000000000000C 018000000000001BCC8000000000000BFDA06D3A06D3A06BCA8000000000000C018000 0000000013FE555555555554FBFD95CEB240795CEBCA8000000000000C018000000000 0013FF5555555555552BFD88277166054F3BCA8000000000000C0180000000000013FF FFFFFFFFFFFFCBFD7777777777777BCA8000000000000C018000000000001400555555 5555553BFD63BEC474CFD58BCA8000000000000C018000000000001400AAAAAAAAAAAA 8BFD4CFD585E0E696BCA8000000000000C018000000000001400FFFFFFFFFFFFDBFD33 33333333333BCA8000000000000C0180000000000014012AAAAAAAAAAA9BFD166054F4 3E32EBCA8000000000000C0180000000000014015555555555554BFCED097B425ED09B CA8000000000000C0180000000000014017FFFFFFFFFFFFBFCA740DA740DA73BCA8000 000000000C018000000000001401AAAAAAAAAAAAABFC5B66C77D88E98BCA8000000000 000C018000000000001401D555555555555BFC097B425ED0979BCA8000000000000C01 80000000000014020000000000000BFB62FC962FC962ABCA8000000000000C01800000 00000014021555555555555BFA4DBF86A314DB9BCA8000000000000C01800000000000 14022AAAAAAAAAAAA3F80AFF9EE8DD7AFBCA8000000000000C0180000000000014023F FFFFFFFFFFF3FAEB851EB851EB0BCA8000000000000C015555555555556C0240000000 00000BFCD950C83FB72E9BCA8000000000000C015555555555556C022AAAAAAAAAAABB FD0F8CB487042BFBCA8000000000000C015555555555556C021555555555556BFD2F68 4BDA12F68BCA8000000000000C015555555555556C020000000000001BFD4C3B2A1907 F6DBCA8000000000000C015555555555556C01D555555555557BFD66054F43E32D2BCA 8000000000000C015555555555556C01AAAAAAAAAAAACBFD7CC6BB5AA4993BCA800000 0000000C015555555555556C018000000000001BFD907F6E5D4C3B3BCA800000000000 0C015555555555556C015555555555556BFDA12F684BDA12FBCA8000000000000C0155 55555555556C012AAAAAAAAAAABBFDAED6A9264E20ABCA8000000000000C0155555555 55556C010000000000000BFDB97530ECA8642BCA8000000000000C015555555555556C 00AAAAAAAAAAAABBFDC10AFF9EE8DD8BCA8000000000000C015555555555556C005555 555555556BFDC598153D0F8CBBCA8000000000000C015555555555556C000000000000 001BFDC71C71C71C71CBCA8000000000000C015555555555556BFF5555555555558BFD C598153D0F8CBBCA8000000000000C015555555555556BFE555555555555BBFDC10AFF 9EE8DD8BCA8000000000000C015555555555556BCC8000000000000BFDB97530ECA864 2BCA8000000000000C0155555555555563FE555555555554FBFDAED6A9264E20ABCA80 00000000000C0155555555555563FF5555555555552BFDA12F684BDA12FBCA80000000 00000C0155555555555563FFFFFFFFFFFFFFCBFD907F6E5D4C3B3BCA8000000000000C 0155555555555564005555555555553BFD7CC6BB5AA4994BCA8000000000000C015555 555555556400AAAAAAAAAAAA8BFD66054F43E32D2BCA8000000000000C015555555555 556400FFFFFFFFFFFFDBFD4C3B2A1907F6FBCA8000000000000C015555555555556401 2AAAAAAAAAAA9BFD2F684BDA12F6ABCA8000000000000C015555555555556401555555 5555554BFD0F8CB487042C0BCA8000000000000C0155555555555564017FFFFFFFFFFF FBFCD950C83FB72EBBCA8000000000000C015555555555556401AAAAAAAAAAAAABFC8D 76B54932710BCA8000000000000C015555555555556401D555555555555BFC3B8B302A 7A1F1BCA8000000000000C0155555555555564020000000000000BFBC71C71C71C71AB CA8000000000000C0155555555555564021555555555555BFB0AFF9EE8DD7CCBCA8000 000000000C0155555555555564022AAAAAAAAAAAABF90AFF9EE8DD7E8BCA8000000000 000C0155555555555564023FFFFFFFFFFFF3FA23456789ABCD0BCA8000000000000C01 2AAAAAAAAAAABC024000000000000BFD0123456789ABCBCA8000000000000C012AAAAA AAAAAABC022AAAAAAAAAAABBFD240795CEB2407BCA8000000000000C012AAAAAAAAAAA BC021555555555556BFD43E32D21C10B0BCA8000000000000C012AAAAAAAAAAABC0200 00000000001BFD60B60B60B60B5BCA8000000000000C012AAAAAAAAAAABC01D5555555 55557BFD7A80308B9141ABCA8000000000000C012AAAAAAAAAAABC01AAAAAAAAAAAACB FD91419CA252ADBBCA8000000000000C012AAAAAAAAAAABC018000000000001BFDA4FA 4FA4FA4FBBCA8000000000000C012AAAAAAAAAAABC015555555555556BFDB5AA499388 277BCA8000000000000C012AAAAAAAAAAABC012AAAAAAAAAAABBFDC3518A6DFC351BCA 8000000000000C012AAAAAAAAAAABC010000000000000BFDCDF012345678ABCA800000 0000000C012AAAAAAAAAAABC00AAAAAAAAAAAABBFDD585E0E696F20BCA800000000000 0C012AAAAAAAAAAABC005555555555556BFDDA12F684BDA13BCA8000000000000C012A AAAAAAAAAABC000000000000001BFDDB97530ECA864BCA8000000000000C012AAAAAAA AAAABBFF5555555555558BFDDA12F684BDA13BCA8000000000000C012AAAAAAAAAAABB FE555555555555BBFDD585E0E696F20BCA8000000000000C012AAAAAAAAAAABBCC8000 000000000BFDCDF012345678ABCA8000000000000C012AAAAAAAAAAAB3FE5555555555 54FBFDC3518A6DFC352BCA8000000000000C012AAAAAAAAAAAB3FF5555555555552BFD B5AA499388277BCA8000000000000C012AAAAAAAAAAAB3FFFFFFFFFFFFFFCBFDA4FA4F A4FA4FBBCA8000000000000C012AAAAAAAAAAAB4005555555555553BFD91419CA252AD CBCA8000000000000C012AAAAAAAAAAAB400AAAAAAAAAAAA8BFD7A80308B9141ABCA80 00000000000C012AAAAAAAAAAAB400FFFFFFFFFFFFDBFD60B60B60B60B7BCA80000000 00000C012AAAAAAAAAAAB4012AAAAAAAAAAA9BFD43E32D21C10B2BCA8000000000000C 012AAAAAAAAAAAB4015555555555554BFD240795CEB2408BCA8000000000000C012AAA AAAAAAAAB4017FFFFFFFFFFFFBFD0123456789ABEBCA8000000000000C012AAAAAAAAA AAB401AAAAAAAAAAAAABFCB66C77D88E9A0BCA8000000000000C012AAAAAAAAAAAB401 D555555555555BFC6480F2B9D6481BCA8000000000000C012AAAAAAAAAAAB402000000 0000000BFC0C83FB72EA61DBCA8000000000000C012AAAAAAAAAAAB402155555555555 5BFB5CEB240795CECBCA8000000000000C012AAAAAAAAAAAB4022AAAAAAAAAAAABFA29 56D9B1DF634BCA8000000000000C012AAAAAAAAAAAB4023FFFFFFFFFFFF3F8FDB97530 ECA40BCA8000000000000C010000000000000C024000000000000BFD1111111111110B CA8000000000000C010000000000000C022AAAAAAAAAAABBFD33F5617839A59BCA8000 000000000C010000000000000C021555555555556BFD53D0F8CB48702BCA8000000000 000C010000000000000C020000000000001BFD70A3D70A3D709BCA8000000000000C01 0000000000000C01D555555555557BFD8A6DFC3518A6CBCA8000000000000C01000000 0000000C01AAAAAAAAAAAACBFDA12F684BDA12FBCA8000000000000C01000000000000 0C018000000000001BFDB4E81B4E81B4DBCA8000000000000C010000000000000C0155 55555555556BFDC598153D0F8C9BCA8000000000000C010000000000000C012AAAAAAA AAAABBFDD33F5617839A5BCA8000000000000C010000000000000C010000000000000B FDDDDDDDDDDDDDCBCA8000000000000C010000000000000C00AAAAAAAAAAAABBFDE573 AC901E573BCA8000000000000C010000000000000C005555555555556BFDEA00C22E45 065BCA8000000000000C010000000000000C000000000000001BFDEB851EB851EB7BCA 8000000000000C010000000000000BFF5555555555558BFDEA00C22E45066BCA800000 0000000C010000000000000BFE555555555555BBFDE573AC901E573BCA800000000000 0C010000000000000BCC8000000000000BFDDDDDDDDDDDDDDBCA8000000000000C0100 000000000003FE555555555554FBFDD33F5617839A5BCA8000000000000C0100000000 000003FF5555555555552BFDC598153D0F8CABCA8000000000000C0100000000000003 FFFFFFFFFFFFFFCBFDB4E81B4E81B4EBCA8000000000000C0100000000000004005555 555555553BFDA12F684BDA12FBCA8000000000000C010000000000000400AAAAAAAAAA AA8BFD8A6DFC3518A6DBCA8000000000000C010000000000000400FFFFFFFFFFFFDBFD 70A3D70A3D70ABCA8000000000000C0100000000000004012AAAAAAAAAAA9BFD53D0F8 CB48705BCA8000000000000C0100000000000004015555555555554BFD33F5617839A5 BBCA8000000000000C0100000000000004017FFFFFFFFFFFFBFD1111111111111BCA80 00000000000C010000000000000401AAAAAAAAAAAAABFCD6480F2B9D646BCA80000000 00000C010000000000000401D555555555555BFC845C8A0CE5127BCA8000000000000C 0100000000000004020000000000000BFC2C5F92C5F92C3BCA8000000000000C010000 0000000004021555555555555BFB9CA252ADB3638BCA8000000000000C010000000000 0004022AAAAAAAAAAAABFAA8C536FE1A8CCBCA8000000000000C010000000000000402 3FFFFFFFFFFFFBC8F9C0000000000BCA8000000000000C00AAAAAAAAAAAABC02400000 0000000BFD1C71C71C71C70BCA8000000000000C00AAAAAAAAAAAABC022AAAAAAAAAAA BBFD3F5617839A5BBBCA8000000000000C00AAAAAAAAAAAABC021555555555556BFD5F 31AED6A9264BCA8000000000000C00AAAAAAAAAAAABC020000000000001BFD7C048D15 9E269BCA8000000000000C00AAAAAAAAAAAABC01D555555555557BFD95CEB240795CEB CA8000000000000C00AAAAAAAAAAAABC01AAAAAAAAAAAACBFDAC901E573AC8FBCA8000 000000000C00AAAAAAAAAAAABC018000000000001BFDC048D159E26AFBCA8000000000 000C00AAAAAAAAAAAABC015555555555556BFDD0F8CB487042BBCA8000000000000C00 AAAAAAAAAAAABC012AAAAAAAAAAABBFDDEA00C22E4505BCA8000000000000C00AAAAAA AAAAAABC010000000000000BFDE93E93E93E93EBCA8000000000000C00AAAAAAAAAAAA BC00AAAAAAAAAAAABBFDF0D4629B7F0D3BCA8000000000000C00AAAAAAAAAAAABC0055 55555555556BFDF5617839A5BC7BCA8000000000000C00AAAAAAAAAAAABC0000000000 00001BFDF6E5D4C3B2A19BCA8000000000000C00AAAAAAAAAAAABBFF5555555555558B FDF5617839A5BC7BCA8000000000000C00AAAAAAAAAAAABBFE555555555555BBFDF0D4 629B7F0D4BCA8000000000000C00AAAAAAAAAAAABBCC8000000000000BFDE93E93E93E 93EBCA8000000000000C00AAAAAAAAAAAAB3FE555555555554FBFDDEA00C22E4506BCA 8000000000000C00AAAAAAAAAAAAB3FF5555555555552BFDD0F8CB487042BBCA800000 0000000C00AAAAAAAAAAAAB3FFFFFFFFFFFFFFCBFDC048D159E26AFBCA800000000000 0C00AAAAAAAAAAAAB4005555555555553BFDAC901E573AC90BCA8000000000000C00AA AAAAAAAAAAB400AAAAAAAAAAAA8BFD95CEB240795CEBCA8000000000000C00AAAAAAAA AAAAB400FFFFFFFFFFFFDBFD7C048D159E26BBCA8000000000000C00AAAAAAAAAAAAB4 012AAAAAAAAAAA9BFD5F31AED6A9266BCA8000000000000C00AAAAAAAAAAAAB4015555 555555554BFD3F5617839A5BCBCA8000000000000C00AAAAAAAAAAAAB4017FFFFFFFFF FFFBFD1C71C71C71C72BCA8000000000000C00AAAAAAAAAAAAB401AAAAAAAAAAAAABFC ED097B425ED08BCA8000000000000C00AAAAAAAAAAAAB401D555555555555BFC9B1DF6 23A67E9BCA8000000000000C00AAAAAAAAAAAAB4020000000000000BFC4320FEDCBA98 5BCA8000000000000C00AAAAAAAAAAAAB4021555555555555BFBCA252ADB363BCBCA80 00000000000C00AAAAAAAAAAAAB4022AAAAAAAAAAAABFB01E573AC901EABCA80000000 00000C00AAAAAAAAAAAAB4023FFFFFFFFFFFFBF86C16C16C16C40BCA8000000000000C 005555555555556C024000000000000BFD23456789ABCDEBCA8000000000000C005555 555555556C022AAAAAAAAAAABBFD4629B7F0D4629BCA8000000000000C005555555555 556C021555555555556BFD66054F43E32D2BCA8000000000000C005555555555556C02 0000000000001BFD82D82D82D82D7BCA8000000000000C005555555555556C01D55555 5555557BFD9CA252ADB363CBCA8000000000000C005555555555556C01AAAAAAAAAAAA CBFDB363BEC474CFDBCA8000000000000C005555555555556C018000000000001BFDC7 1C71C71C71DBCA8000000000000C005555555555556C015555555555556BFDD7CC6BB5 AA499BCA8000000000000C005555555555556C012AAAAAAAAAAABBFDE573AC901E573B CA8000000000000C005555555555556C010000000000000BFDF0123456789ACBCA8000 000000000C005555555555556C00AAAAAAAAAAAABBFDF7A80308B9141BCA8000000000 000C005555555555556C005555555555556BFDFC3518A6DFC35BCA8000000000000C00 5555555555556C000000000000001BFDFDB97530ECA87BCA8000000000000C00555555 5555556BFF5555555555558BFDFC3518A6DFC35BCA8000000000000C00555555555555 6BFE555555555555BBFDF7A80308B9142BCA8000000000000C005555555555556BCC80 00000000000BFDF0123456789ACBCA8000000000000C0055555555555563FE55555555 5554FBFDE573AC901E574BCA8000000000000C0055555555555563FF5555555555552B FDD7CC6BB5AA499BCA8000000000000C0055555555555563FFFFFFFFFFFFFFCBFDC71C 71C71C71DBCA8000000000000C0055555555555564005555555555553BFDB363BEC474 CFEBCA8000000000000C005555555555556400AAAAAAAAAAAA8BFD9CA252ADB363CBCA 8000000000000C005555555555556400FFFFFFFFFFFFDBFD82D82D82D82D9BCA800000 0000000C0055555555555564012AAAAAAAAAAA9BFD66054F43E32D4BCA800000000000 0C0055555555555564015555555555554BFD4629B7F0D462ABCA8000000000000C0055 555555555564017FFFFFFFFFFFFBFD23456789ABCE0BCA8000000000000C0055555555 55556401AAAAAAAAAAAAABFCFAB0BC1CD2DE4BCA8000000000000C0055555555555564 01D555555555555BFCA8C536FE1A8C5BCA8000000000000C0055555555555564020000 000000000BFC50C83FB72EA61BCA8000000000000C0055555555555564021555555555 555BFBE573AC901E574BCA8000000000000C0055555555555564022AAAAAAAAAAAABFB 1D33F561783A2BCA8000000000000C0055555555555564023FFFFFFFFFFFFBF9234567 89ABD00BCA8000000000000C000000000000001C024000000000000BFD258BF258BF25 8BCA8000000000000C000000000000001C022AAAAAAAAAAABBFD487042BFE7BA3BCA80 00000000000C000000000000001C021555555555556BFD684BDA12F684CBCA80000000 00000C000000000000001C020000000000001BFD851EB851EB851BCA8000000000000C 000000000000001C01D555555555557BFD9EE8DD7CC6BB6BCA8000000000000C000000 000000001C01AAAAAAAAAAAACBFDB5AA499388277BCA8000000000000C000000000000 001C018000000000001BFDC962FC962FC97BCA8000000000000C000000000000001C01 5555555555556BFDDA12F684BDA13BCA8000000000000C000000000000001C012AAAAA AAAAAABBFDE7BA375F31AEDBCA8000000000000C000000000000001C01000000000000 0BFDF258BF258BF26BCA8000000000000C000000000000001C00AAAAAAAAAAAABBFDF9 EE8DD7CC6BBBCA8000000000000C000000000000001C005555555555556BFDFE7BA375 F31AFBCA8000000000000C000000000000001C000000000000001BFE0000000000001B CA8000000000000C000000000000001BFF5555555555558BFDFE7BA375F31AFBCA8000 000000000C000000000000001BFE555555555555BBFDF9EE8DD7CC6BCBCA8000000000 000C000000000000001BCC8000000000000BFDF258BF258BF26BCA8000000000000C00 00000000000013FE555555555554FBFDE7BA375F31AEEBCA8000000000000C00000000 00000013FF5555555555552BFDDA12F684BDA13BCA8000000000000C00000000000000 13FFFFFFFFFFFFFFCBFDC962FC962FC97BCA8000000000000C00000000000000140055 55555555553BFDB5AA499388278BCA8000000000000C000000000000001400AAAAAAAA AAAA8BFD9EE8DD7CC6BB6BCA8000000000000C000000000000001400FFFFFFFFFFFFDB FD851EB851EB853BCA8000000000000C0000000000000014012AAAAAAAAAAA9BFD684B DA12F684EBCA8000000000000C0000000000000014015555555555554BFD487042BFE7 BA4BCA8000000000000C0000000000000014017FFFFFFFFFFFFBFD258BF258BF25ABCA 8000000000000C000000000000001401AAAAAAAAAAAAABFCFF3DD1BAF98D8BCA800000 0000000C000000000000001401D555555555555BFCAD524C9C413B9BCA800000000000 0C0000000000000014020000000000000BFC5555555555555BCA8000000000000C0000 000000000014021555555555555BFBEE8DD7CC6BB5CBCA8000000000000C0000000000 000014022AAAAAAAAAAAABFB264E209DC598ABCA8000000000000C0000000000000014 023FFFFFFFFFFFFBF947AE147AE14A0BCA8000000000000BFF5555555555558C024000 000000000BFD23456789ABCDEBCA8000000000000BFF5555555555558C022AAAAAAAAA AABBFD4629B7F0D4629BCA8000000000000BFF5555555555558C021555555555556BFD 66054F43E32D2BCA8000000000000BFF5555555555558C020000000000001BFD82D82D 82D82D7BCA8000000000000BFF5555555555558C01D555555555557BFD9CA252ADB363 CBCA8000000000000BFF5555555555558C01AAAAAAAAAAAACBFDB363BEC474CFDBCA80 00000000000BFF5555555555558C018000000000001BFDC71C71C71C71DBCA80000000 00000BFF5555555555558C015555555555556BFDD7CC6BB5AA499BCA8000000000000B FF5555555555558C012AAAAAAAAAAABBFDE573AC901E573BCA8000000000000BFF5555 555555558C010000000000000BFDF0123456789ACBCA8000000000000BFF5555555555 558C00AAAAAAAAAAAABBFDF7A80308B9141BCA8000000000000BFF5555555555558C00 5555555555556BFDFC3518A6DFC35BCA8000000000000BFF5555555555558C00000000 0000001BFDFDB97530ECA87BCA8000000000000BFF5555555555558BFF555555555555 8BFDFC3518A6DFC35BCA8000000000000BFF5555555555558BFE555555555555BBFDF7 A80308B9142BCA8000000000000BFF5555555555558BCC8000000000000BFDF0123456 789ACBCA8000000000000BFF55555555555583FE555555555554FBFDE573AC901E574B CA8000000000000BFF55555555555583FF5555555555552BFDD7CC6BB5AA499BCA8000 000000000BFF55555555555583FFFFFFFFFFFFFFCBFDC71C71C71C71DBCA8000000000 000BFF55555555555584005555555555553BFDB363BEC474CFEBCA8000000000000BFF 5555555555558400AAAAAAAAAAAA8BFD9CA252ADB363CBCA8000000000000BFF555555 5555558400FFFFFFFFFFFFDBFD82D82D82D82D9BCA8000000000000BFF555555555555 84012AAAAAAAAAAA9BFD66054F43E32D4BCA8000000000000BFF555555555555840155 55555555554BFD4629B7F0D462ABCA8000000000000BFF55555555555584017FFFFFFF FFFFFBFD23456789ABCE0BCA8000000000000BFF5555555555558401AAAAAAAAAAAAAB FCFAB0BC1CD2DE4BCA8000000000000BFF5555555555558401D555555555555BFCA8C5 36FE1A8C5BCA8000000000000BFF55555555555584020000000000000BFC50C83FB72E A61BCA8000000000000BFF55555555555584021555555555555BFBE573AC901E574BCA 8000000000000BFF55555555555584022AAAAAAAAAAAABFB1D33F561783A2BCA800000 0000000BFF55555555555584023FFFFFFFFFFFFBF923456789ABD00BCA800000000000 0BFE555555555555BC024000000000000BFD1C71C71C71C72BCA8000000000000BFE55 5555555555BC022AAAAAAAAAAABBFD3F5617839A5BBBCA8000000000000BFE55555555 5555BC021555555555556BFD5F31AED6A9264BCA8000000000000BFE555555555555BC 020000000000001BFD7C048D159E26BBCA8000000000000BFE555555555555BC01D555 555555557BFD95CEB240795CEBCA8000000000000BFE555555555555BC01AAAAAAAAAA AACBFDAC901E573AC91BCA8000000000000BFE555555555555BC018000000000001BFD C048D159E26AFBCA8000000000000BFE555555555555BC015555555555556BFDD0F8CB 487042BBCA8000000000000BFE555555555555BC012AAAAAAAAAAABBFDDEA00C22E450 7BCA8000000000000BFE555555555555BC010000000000000BFDE93E93E93E93EBCA80 00000000000BFE555555555555BC00AAAAAAAAAAAABBFDF0D4629B7F0D5BCA80000000 00000BFE555555555555BC005555555555556BFDF5617839A5BC7BCA8000000000000B FE555555555555BC000000000000001BFDF6E5D4C3B2A19BCA8000000000000BFE5555 55555555BBFF5555555555558BFDF5617839A5BC8BCA8000000000000BFE5555555555 55BBFE555555555555BBFDF0D4629B7F0D5BCA8000000000000BFE555555555555BBCC 8000000000000BFDE93E93E93E93FBCA8000000000000BFE555555555555B3FE555555 555554FBFDDEA00C22E4507BCA8000000000000BFE555555555555B3FF555555555555 2BFDD0F8CB487042CBCA8000000000000BFE555555555555B3FFFFFFFFFFFFFFCBFDC0 48D159E26B0BCA8000000000000BFE555555555555B4005555555555553BFDAC901E57 3AC91BCA8000000000000BFE555555555555B400AAAAAAAAAAAA8BFD95CEB240795CFB CA8000000000000BFE555555555555B400FFFFFFFFFFFFDBFD7C048D159E26CBCA8000 000000000BFE555555555555B4012AAAAAAAAAAA9BFD5F31AED6A9267BCA8000000000 000BFE555555555555B4015555555555554BFD3F5617839A5BDBCA8000000000000BFE 555555555555B4017FFFFFFFFFFFFBFD1C71C71C71C73BCA8000000000000BFE555555 555555B401AAAAAAAAAAAAABFCED097B425ED0ABCA8000000000000BFE555555555555 B401D555555555555BFC9B1DF623A67EBBCA8000000000000BFE555555555555B40200 00000000000BFC4320FEDCBA987BCA8000000000000BFE555555555555B40215555555 55555BFBCA252ADB363C0BCA8000000000000BFE555555555555B4022AAAAAAAAAAAAB FB01E573AC901EEBCA8000000000000BFE555555555555B4023FFFFFFFFFFFFBF86C16 C16C16C60BCA8000000000000BCC8000000000000C024000000000000BFD1111111111 110BCA8000000000000BCC8000000000000C022AAAAAAAAAAABBFD33F5617839A5BBCA 8000000000000BCC8000000000000C021555555555556BFD53D0F8CB48704BCA800000 0000000BCC8000000000000C020000000000001BFD70A3D70A3D709BCA800000000000 0BCC8000000000000C01D555555555557BFD8A6DFC3518A6EBCA8000000000000BCC80 00000000000C01AAAAAAAAAAAACBFDA12F684BDA12FBCA8000000000000BCC80000000 00000C018000000000001BFDB4E81B4E81B4FBCA8000000000000BCC8000000000000C 015555555555556BFDC598153D0F8CBBCA8000000000000BCC8000000000000C012AAA AAAAAAAABBFDD33F5617839A5BCA8000000000000BCC8000000000000C010000000000 000BFDDDDDDDDDDDDDEBCA8000000000000BCC8000000000000C00AAAAAAAAAAAABBFD E573AC901E573BCA8000000000000BCC8000000000000C005555555555556BFDEA00C2 2E45067BCA8000000000000BCC8000000000000C000000000000001BFDEB851EB851EB 8BCA8000000000000BCC8000000000000BFF5555555555558BFDEA00C22E45067BCA80 00000000000BCC8000000000000BFE555555555555BBFDE573AC901E574BCA80000000 00000BCC8000000000000BCC8000000000000BFDDDDDDDDDDDDDEBCA8000000000000B CC80000000000003FE555555555554FBFDD33F5617839A6BCA8000000000000BCC8000 0000000003FF5555555555552BFDC598153D0F8CBBCA8000000000000BCC8000000000 0003FFFFFFFFFFFFFFCBFDB4E81B4E81B4FBCA8000000000000BCC8000000000000400 5555555555553BFDA12F684BDA130BCA8000000000000BCC8000000000000400AAAAAA AAAAAA8BFD8A6DFC3518A6EBCA8000000000000BCC8000000000000400FFFFFFFFFFFF DBFD70A3D70A3D70BBCA8000000000000BCC80000000000004012AAAAAAAAAAA9BFD53 D0F8CB48706BCA8000000000000BCC80000000000004015555555555554BFD33F56178 39A5CBCA8000000000000BCC80000000000004017FFFFFFFFFFFFBFD1111111111112B CA8000000000000BCC8000000000000401AAAAAAAAAAAAABFCD6480F2B9D648BCA8000 000000000BCC8000000000000401D555555555555BFC845C8A0CE5129BCA8000000000 000BCC80000000000004020000000000000BFC2C5F92C5F92C5BCA8000000000000BCC 80000000000004021555555555555BFB9CA252ADB363CBCA8000000000000BCC800000 00000004022AAAAAAAAAAAABFAA8C536FE1A8D4BCA8000000000000BCC800000000000 04023FFFFFFFFFFFFBC9FCE0000000000BCA80000000000003FE555555555554FC0240 00000000000BFD0123456789ABCBCA80000000000003FE555555555554FC022AAAAAAA AAAABBFD240795CEB2407BCA80000000000003FE555555555554FC021555555555556B FD43E32D21C10B0BCA80000000000003FE555555555554FC020000000000001BFD60B6 0B60B60B5BCA80000000000003FE555555555554FC01D555555555557BFD7A80308B91 41ABCA80000000000003FE555555555554FC01AAAAAAAAAAAACBFD91419CA252ADBBCA 80000000000003FE555555555554FC018000000000001BFDA4FA4FA4FA4FBBCA800000 00000003FE555555555554FC015555555555556BFDB5AA499388277BCA800000000000 03FE555555555554FC012AAAAAAAAAAABBFDC3518A6DFC351BCA80000000000003FE55 5555555554FC010000000000000BFDCDF012345678ABCA80000000000003FE55555555 5554FC00AAAAAAAAAAAABBFDD585E0E696F20BCA80000000000003FE555555555554FC 005555555555556BFDDA12F684BDA13BCA80000000000003FE555555555554FC000000 000000001BFDDB97530ECA864BCA80000000000003FE555555555554FBFF5555555555 558BFDDA12F684BDA13BCA80000000000003FE555555555554FBFE555555555555BBFD D585E0E696F20BCA80000000000003FE555555555554FBCC8000000000000BFDCDF012 345678ABCA80000000000003FE555555555554F3FE555555555554FBFDC3518A6DFC35 2BCA80000000000003FE555555555554F3FF5555555555552BFDB5AA499388277BCA80 000000000003FE555555555554F3FFFFFFFFFFFFFFCBFDA4FA4FA4FA4FBBCA80000000 000003FE555555555554F4005555555555553BFD91419CA252ADCBCA80000000000003 FE555555555554F400AAAAAAAAAAAA8BFD7A80308B9141ABCA80000000000003FE5555 55555554F400FFFFFFFFFFFFDBFD60B60B60B60B7BCA80000000000003FE5555555555 54F4012AAAAAAAAAAA9BFD43E32D21C10B2BCA80000000000003FE555555555554F401 5555555555554BFD240795CEB2408BCA80000000000003FE555555555554F4017FFFFF FFFFFFFBFD0123456789ABEBCA80000000000003FE555555555554F401AAAAAAAAAAAA ABFCB66C77D88E9A0BCA80000000000003FE555555555554F401D555555555555BFC64 80F2B9D6481BCA80000000000003FE555555555554F4020000000000000BFC0C83FB72 EA61DBCA80000000000003FE555555555554F4021555555555555BFB5CEB240795CECB CA80000000000003FE555555555554F4022AAAAAAAAAAAABFA2956D9B1DF634BCA8000 0000000003FE555555555554F4023FFFFFFFFFFFF3F8FDB97530ECA40BCA8000000000 0003FF5555555555552C024000000000000BFCD950C83FB72E9BCA80000000000003FF 5555555555552C022AAAAAAAAAAABBFD0F8CB487042BFBCA80000000000003FF555555 5555552C021555555555556BFD2F684BDA12F68BCA80000000000003FF555555555555 2C020000000000001BFD4C3B2A1907F6DBCA80000000000003FF5555555555552C01D5 55555555557BFD66054F43E32D2BCA80000000000003FF5555555555552C01AAAAAAAA AAAACBFD7CC6BB5AA4993BCA80000000000003FF5555555555552C018000000000001B FD907F6E5D4C3B3BCA80000000000003FF5555555555552C015555555555556BFDA12F 684BDA12FBCA80000000000003FF5555555555552C012AAAAAAAAAAABBFDAED6A9264E 20ABCA80000000000003FF5555555555552C010000000000000BFDB97530ECA8642BCA 80000000000003FF5555555555552C00AAAAAAAAAAAABBFDC10AFF9EE8DD8BCA800000 00000003FF5555555555552C005555555555556BFDC598153D0F8CBBCA800000000000 03FF5555555555552C000000000000001BFDC71C71C71C71CBCA80000000000003FF55 55555555552BFF5555555555558BFDC598153D0F8CBBCA80000000000003FF55555555 55552BFE555555555555BBFDC10AFF9EE8DD8BCA80000000000003FF5555555555552B CC8000000000000BFDB97530ECA8642BCA80000000000003FF55555555555523FE5555 55555554FBFDAED6A9264E20ABCA80000000000003FF55555555555523FF5555555555 552BFDA12F684BDA12FBCA80000000000003FF55555555555523FFFFFFFFFFFFFFCBFD 907F6E5D4C3B3BCA80000000000003FF55555555555524005555555555553BFD7CC6BB 5AA4994BCA80000000000003FF5555555555552400AAAAAAAAAAAA8BFD66054F43E32D 2BCA80000000000003FF5555555555552400FFFFFFFFFFFFDBFD4C3B2A1907F6FBCA80 000000000003FF55555555555524012AAAAAAAAAAA9BFD2F684BDA12F6ABCA80000000 000003FF55555555555524015555555555554BFD0F8CB487042C0BCA80000000000003 FF55555555555524017FFFFFFFFFFFFBFCD950C83FB72EBBCA80000000000003FF5555 555555552401AAAAAAAAAAAAABFC8D76B54932710BCA80000000000003FF5555555555 552401D555555555555BFC3B8B302A7A1F1BCA80000000000003FF5555555555552402 0000000000000BFBC71C71C71C71ABCA80000000000003FF5555555555552402155555 5555555BFB0AFF9EE8DD7CCBCA80000000000003FF55555555555524022AAAAAAAAAAA ABF90AFF9EE8DD7E8BCA80000000000003FF55555555555524023FFFFFFFFFFFF3FA23 456789ABCD0BCA80000000000003FFFFFFFFFFFFFFCC024000000000000BFCA740DA74 0DA75BCA80000000000003FFFFFFFFFFFFFFCC022AAAAAAAAAAABBFCED097B425ED0AB CA80000000000003FFFFFFFFFFFFFFCC021555555555556BFD166054F43E32EBCA8000 0000000003FFFFFFFFFFFFFFCC020000000000001BFD3333333333333BCA8000000000 0003FFFFFFFFFFFFFFCC01D555555555557BFD4CFD585E0E698BCA80000000000003FF FFFFFFFFFFFFCC01AAAAAAAAAAAACBFD63BEC474CFD59BCA80000000000003FFFFFFFF FFFFFFCC018000000000001BFD7777777777778BCA80000000000003FFFFFFFFFFFFFF CC015555555555556BFD88277166054F5BCA80000000000003FFFFFFFFFFFFFFCC012A AAAAAAAAAABBFD95CEB240795D0BCA80000000000003FFFFFFFFFFFFFFCC0100000000 00000BFDA06D3A06D3A08BCA80000000000003FFFFFFFFFFFFFFCC00AAAAAAAAAAAABB FDA80308B91419EBCA80000000000003FFFFFFFFFFFFFFCC005555555555556BFDAC90 1E573AC91BCA80000000000003FFFFFFFFFFFFFFCC000000000000001BFDAE147AE147 AE2BCA80000000000003FFFFFFFFFFFFFFCBFF5555555555558BFDAC901E573AC91BCA 80000000000003FFFFFFFFFFFFFFCBFE555555555555BBFDA80308B91419EBCA800000 00000003FFFFFFFFFFFFFFCBCC8000000000000BFDA06D3A06D3A08BCA800000000000 03FFFFFFFFFFFFFFC3FE555555555554FBFD95CEB240795D0BCA80000000000003FFFF FFFFFFFFFFC3FF5555555555552BFD88277166054F5BCA80000000000003FFFFFFFFFF FFFFC3FFFFFFFFFFFFFFCBFD7777777777779BCA80000000000003FFFFFFFFFFFFFFC4 005555555555553BFD63BEC474CFD5ABCA80000000000003FFFFFFFFFFFFFFC400AAAA AAAAAAAA8BFD4CFD585E0E698BCA80000000000003FFFFFFFFFFFFFFC400FFFFFFFFFF FFDBFD3333333333335BCA80000000000003FFFFFFFFFFFFFFC4012AAAAAAAAAAA9BFD 166054F43E330BCA80000000000003FFFFFFFFFFFFFFC4015555555555554BFCED097B 425ED0DBCA80000000000003FFFFFFFFFFFFFFC4017FFFFFFFFFFFFBFCA740DA740DA7 7BCA80000000000003FFFFFFFFFFFFFFC401AAAAAAAAAAAAABFC5B66C77D88E9CBCA80 000000000003FFFFFFFFFFFFFFC401D555555555555BFC097B425ED097DBCA80000000 000003FFFFFFFFFFFFFFC4020000000000000BFB62FC962FC9632BCA80000000000003 FFFFFFFFFFFFFFC4021555555555555BFA4DBF86A314DC9BCA80000000000003FFFFFF FFFFFFFFC4022AAAAAAAAAAAA3F80AFF9EE8DD76FBCA80000000000003FFFFFFFFFFFF FFC4023FFFFFFFFFFFF3FAEB851EB851EA0BCA80000000000004005555555555553C02 4000000000000BFC6C16C16C16C19BCA80000000000004005555555555553C022AAAAA AAAAAABBFCB1DF623A67EAEBCA80000000000004005555555555553C02155555555555 6BFCF19690E0857FFBCA80000000000004005555555555553C020000000000001BFD15 9E26AF37C05BCA80000000000004005555555555553C01D555555555557BFD2F684BDA 12F69BCA80000000000004005555555555553C01AAAAAAAAAAAACBFD4629B7F0D462BB CA80000000000004005555555555553C018000000000001BFD59E26AF37C04ABCA8000 0000000004005555555555553C015555555555556BFD6A9264E209DC7BCA8000000000 0004005555555555553C012AAAAAAAAAAABBFD7839A5BC7DEA2BCA8000000000000400 5555555555553C010000000000000BFD82D82D82D82DABCA8000000000000400555555 5555553C00AAAAAAAAAAAABBFD8A6DFC3518A70BCA8000000000000400555555555555 3C005555555555556BFD8EFB11D33F563BCA80000000000004005555555555553C0000 00000000001BFD907F6E5D4C3B4BCA80000000000004005555555555553BFF55555555 55558BFD8EFB11D33F563BCA80000000000004005555555555553BFE555555555555BB FD8A6DFC3518A70BCA80000000000004005555555555553BCC8000000000000BFD82D8 2D82D82DABCA800000000000040055555555555533FE555555555554FBFD7839A5BC7D EA2BCA800000000000040055555555555533FF5555555555552BFD6A9264E209DC7BCA 800000000000040055555555555533FFFFFFFFFFFFFFCBFD59E26AF37C04BBCA800000 000000040055555555555534005555555555553BFD4629B7F0D462CBCA800000000000 04005555555555553400AAAAAAAAAAAA8BFD2F684BDA12F6ABCA800000000000040055 55555555553400FFFFFFFFFFFFDBFD159E26AF37C07BCA800000000000040055555555 555534012AAAAAAAAAAA9BFCF19690E085804BCA800000000000040055555555555534 015555555555554BFCB1DF623A67EB1BCA800000000000040055555555555534017FFF FFFFFFFFFBFC6C16C16C16C1BBCA80000000000004005555555555553401AAAAAAAAAA AAABFC203CAE7592040BCA80000000000004005555555555553401D555555555555BFB 9CA252ADB3643BCA800000000000040055555555555534020000000000000BFAD950C8 3FB72F4BCA800000000000040055555555555534021555555555555BF8845C8A0CE516 3BCA800000000000040055555555555534022AAAAAAAAAAAA3FA2F684BDA12F4CBCA80 0000000000040055555555555534023FFFFFFFFFFFF3FB6C16C16C16C0ABCA80000000 00000400AAAAAAAAAAAA8C024000000000000BFC27D27D27D27D5BCA80000000000004 00AAAAAAAAAAAA8C022AAAAAAAAAAABBFC6D9B1DF623A68BCA8000000000000400AAAA AAAAAAAA8C021555555555556BFCAD524C9C413B9BCA8000000000000400AAAAAAAAAA AA8C020000000000001BFCE6F8091A2B3C4BCA8000000000000400AAAAAAAAAAAA8C01 D555555555557BFD0D4629B7F0D46BCA8000000000000400AAAAAAAAAAAA8C01AAAAAA AAAAAACBFD240795CEB2408BCA8000000000000400AAAAAAAAAAAA8C01800000000000 1BFD37C048D159E27BCA8000000000000400AAAAAAAAAAAA8C015555555555556BFD48 7042BFE7BA4BCA8000000000000400AAAAAAAAAAAA8C012AAAAAAAAAAABBFD5617839A 5BC7FBCA8000000000000400AAAAAAAAAAAA8C010000000000000BFD60B60B60B60B7B CA8000000000000400AAAAAAAAAAAA8C00AAAAAAAAAAAABBFD684BDA12F684DBCA8000 000000000400AAAAAAAAAAAA8C005555555555556BFD6CD8EFB11D340BCA8000000000 000400AAAAAAAAAAAA8C000000000000001BFD6E5D4C3B2A191BCA8000000000000400 AAAAAAAAAAAA8BFF5555555555558BFD6CD8EFB11D340BCA8000000000000400AAAAAA AAAAAA8BFE555555555555BBFD684BDA12F684DBCA8000000000000400AAAAAAAAAAAA 8BCC8000000000000BFD60B60B60B60B7BCA8000000000000400AAAAAAAAAAAA83FE55 5555555554FBFD5617839A5BC7FBCA8000000000000400AAAAAAAAAAAA83FF55555555 55552BFD487042BFE7BA4BCA8000000000000400AAAAAAAAAAAA83FFFFFFFFFFFFFFCB FD37C048D159E28BCA8000000000000400AAAAAAAAAAAA84005555555555553BFD2407 95CEB2409BCA8000000000000400AAAAAAAAAAAA8400AAAAAAAAAAAA8BFD0D4629B7F0 D47BCA8000000000000400AAAAAAAAAAAA8400FFFFFFFFFFFFDBFCE6F8091A2B3C8BCA 8000000000000400AAAAAAAAAAAA84012AAAAAAAAAAA9BFCAD524C9C413BEBCA800000 0000000400AAAAAAAAAAAA84015555555555554BFC6D9B1DF623A6BBCA800000000000 0400AAAAAAAAAAAA84017FFFFFFFFFFFFBFC27D27D27D27D5BCA8000000000000400AA AAAAAAAAAA8401AAAAAAAAAAAAABFBB7F0D4629B7F5BCA8000000000000400AAAAAAAA AAAA8401D555555555555BFB1419CA252ADB9BCA8000000000000400AAAAAAAAAAAA84 020000000000000BF9907F6E5D4C3B8BCA8000000000000400AAAAAAAAAAAA84021555 5555555553F95FF3DD1BAF977BCA8000000000000400AAAAAAAAAAAA84022AAAAAAAAA AAA3FB203CAE7592034BCA8000000000000400AAAAAAAAAAAA84023FFFFFFFFFFFF3FB F49F49F49F496BCA8000000000000400FFFFFFFFFFFFDC024000000000000BFBB4E81B 4E81B55BCA8000000000000400FFFFFFFFFFFFDC022AAAAAAAAAAABBFC203CAE759203 EBCA8000000000000400FFFFFFFFFFFFDC021555555555556BFC5FF3DD1BAF98FBCA80 00000000000400FFFFFFFFFFFFDC020000000000001BFC999999999999ABCA80000000 00000400FFFFFFFFFFFFDC01D555555555557BFCCD2DE3EF50062BCA80000000000004 00FFFFFFFFFFFFDC01AAAAAAAAAAAACBFCFAB0BC1CD2DE6BCA8000000000000400FFFF FFFFFFFFDC018000000000001BFD1111111111112BCA8000000000000400FFFFFFFFFF FFDC015555555555556BFD21C10AFF9EE8FBCA8000000000000400FFFFFFFFFFFFDC01 2AAAAAAAAAAABBFD2F684BDA12F6ABCA8000000000000400FFFFFFFFFFFFDC01000000 0000000BFD3A06D3A06D3A2BCA8000000000000400FFFFFFFFFFFFDC00AAAAAAAAAAAA BBFD419CA252ADB38BCA8000000000000400FFFFFFFFFFFFDC005555555555556BFD46 29B7F0D462BBCA8000000000000400FFFFFFFFFFFFDC000000000000001BFD47AE147A E147CBCA8000000000000400FFFFFFFFFFFFDBFF5555555555558BFD4629B7F0D462BB CA8000000000000400FFFFFFFFFFFFDBFE555555555555BBFD419CA252ADB38BCA8000 000000000400FFFFFFFFFFFFDBCC8000000000000BFD3A06D3A06D3A2BCA8000000000 000400FFFFFFFFFFFFD3FE555555555554FBFD2F684BDA12F6ABCA8000000000000400 FFFFFFFFFFFFD3FF5555555555552BFD21C10AFF9EE8FBCA8000000000000400FFFFFF FFFFFFD3FFFFFFFFFFFFFFCBFD1111111111113BCA8000000000000400FFFFFFFFFFFF D4005555555555553BFCFAB0BC1CD2DE7BCA8000000000000400FFFFFFFFFFFFD400AA AAAAAAAAAA8BFCCD2DE3EF50065BCA8000000000000400FFFFFFFFFFFFD400FFFFFFFF FFFFDBFC999999999999EBCA8000000000000400FFFFFFFFFFFFD4012AAAAAAAAAAA9B FC5FF3DD1BAF993BCA8000000000000400FFFFFFFFFFFFD4015555555555554BFC203C AE7592042BCA8000000000000400FFFFFFFFFFFFD4017FFFFFFFFFFFFBFBB4E81B4E81 B59BCA8000000000000400FFFFFFFFFFFFD401AAAAAAAAAAAAABFB1D33F561783A3BCA 8000000000000400FFFFFFFFFFFFD401D555555555555BF9E573AC901E592BCA800000 0000000400FFFFFFFFFFFFD40200000000000003F8B4E81B4E81B30BCA800000000000 0400FFFFFFFFFFFFD40215555555555553FAE573AC901E563BCA8000000000000400FF FFFFFFFFFFD4022AAAAAAAAAAAA3FBBAF98D76B5488BCA8000000000000400FFFFFFFF FFFFD4023FFFFFFFFFFFF3FC47AE147AE1475BCA80000000000004012AAAAAAAAAAA9C 024000000000000BFB07F6E5D4C3B31BCA80000000000004012AAAAAAAAAAA9C022AAA AAAAAAAABBFB9388277166058BCA80000000000004012AAAAAAAAAAA9C021555555555 556BFC097B425ED097DBCA80000000000004012AAAAAAAAAAA9C020000000000001BFC 4320FEDCBA988BCA80000000000004012AAAAAAAAAAA9C01D555555555557BFC76B549 3271050BCA80000000000004012AAAAAAAAAAA9C01AAAAAAAAAAAACBFCA438215FF3DD 4BCA80000000000004012AAAAAAAAAAA9C018000000000001BFCCBA9876543212BCA80 000000000004012AAAAAAAAAAA9C015555555555556BFCED097B425ED0CBCA80000000 000004012AAAAAAAAAAA9C012AAAAAAAAAAABBFD042BFE7BA3761BCA80000000000004 012AAAAAAAAAAA9C010000000000000BFD0ECA8641FDB99BCA80000000000004012AAA AAAAAAAA9C00AAAAAAAAAAAABBFD166054F43E32FBCA80000000000004012AAAAAAAAA AA9C005555555555556BFD1AED6A9264E22BCA80000000000004012AAAAAAAAAAA9C00 0000000000001BFD1C71C71C71C73BCA80000000000004012AAAAAAAAAAA9BFF555555 5555558BFD1AED6A9264E22BCA80000000000004012AAAAAAAAAAA9BFE555555555555 BBFD166054F43E32FBCA80000000000004012AAAAAAAAAAA9BCC8000000000000BFD0E CA8641FDB99BCA80000000000004012AAAAAAAAAAA93FE555555555554FBFD042BFE7B A3761BCA80000000000004012AAAAAAAAAAA93FF5555555555552BFCED097B425ED0DB CA80000000000004012AAAAAAAAAAA93FFFFFFFFFFFFFFCBFCCBA9876543214BCA8000 0000000004012AAAAAAAAAAA94005555555555553BFCA438215FF3DD6BCA8000000000 0004012AAAAAAAAAAA9400AAAAAAAAAAAA8BFC76B5493271054BCA8000000000000401 2AAAAAAAAAAA9400FFFFFFFFFFFFDBFC4320FEDCBA98DBCA80000000000004012AAAAA AAAAAA94012AAAAAAAAAAA9BFC097B425ED0981BCA80000000000004012AAAAAAAAAAA 94015555555555554BFB938827716605FBCA80000000000004012AAAAAAAAAAA94017F FFFFFFFFFFFBFB07F6E5D4C3B35BCA80000000000004012AAAAAAAAAAA9401AAAAAAAA AAAAABF9C10AFF9EE8DFBBCA80000000000004012AAAAAAAAAAA9401D5555555555553 F89CA252ADB35FCBCA80000000000004012AAAAAAAAAAA940200000000000003FAC71C 71C71C714BCA80000000000004012AAAAAAAAAAA940215555555555553FB9FAB0BC1CD 2D6BCA80000000000004012AAAAAAAAAAA94022AAAAAAAAAAAA3FC33F5617839A56BCA 80000000000004012AAAAAAAAAAA94023FFFFFFFFFFFF3FC9E26AF37C0487BCA800000 00000004015555555555554C024000000000000BF923456789ABCF4BCA800000000000 04015555555555554C022AAAAAAAAAAABBFAA8C536FE1A8C8BCA800000000000040155 55555555554C021555555555556BFB53D0F8CB4870ABCA800000000000040155555555 55554C020000000000001BFBC71C71C71C71FBCA80000000000004015555555555554C 01D555555555557BFC1722833944A58BCA80000000000004015555555555554C01AAAA AAAAAAAACBFC44A55B66C77DCBCA80000000000004015555555555554C018000000000 001BFC6C16C16C16C1ABCA80000000000004015555555555554C015555555555556BFC 8D76B54932712BCA80000000000004015555555555554C012AAAAAAAAAAABBFCA8C536 FE1A8C7BCA80000000000004015555555555554C010000000000000BFCBE02468ACF13 8BCA80000000000004015555555555554C00AAAAAAAAAAAABBFCCD2DE3EF50064BCA80 000000000004015555555555554C005555555555556BFCD6480F2B9D64BBCA80000000 000004015555555555554C000000000000001BFCD950C83FB72EEBCA80000000000004 015555555555554BFF5555555555558BFCD6480F2B9D64BBCA80000000000004015555 555555554BFE555555555555BBFCCD2DE3EF50065BCA80000000000004015555555555 554BCC8000000000000BFCBE02468ACF139BCA800000000000040155555555555543FE 555555555554FBFCA8C536FE1A8C9BCA800000000000040155555555555543FF555555 5555552BFC8D76B54932714BCA800000000000040155555555555543FFFFFFFFFFFFFF CBFC6C16C16C16C1BBCA800000000000040155555555555544005555555555553BFC44 A55B66C77DDBCA80000000000004015555555555554400AAAAAAAAAAAA8BFC17228339 44A5BBCA80000000000004015555555555554400FFFFFFFFFFFFDBFBC71C71C71C727B CA800000000000040155555555555544012AAAAAAAAAAA9BFB53D0F8CB4870FBCA8000 00000000040155555555555544015555555555554BFAA8C536FE1A8DABCA8000000000 00040155555555555544017FFFFFFFFFFFFBF923456789ABD0ABCA8000000000000401 5555555555554401AAAAAAAAAAAAA3F93B8B302A7A1CDBCA8000000000000401555555 5555554401D5555555555553FAE573AC901E565BCA8000000000000401555555555555 440200000000000003FBA2B3C4D5E6F7BBCA8000000000000401555555555555440215 555555555553FC2F684BDA12F64BCA800000000000040155555555555544022AAAAAAA AAAAA3FC938827716604FBCA800000000000040155555555555544023FFFFFFFFFFFF3 FCFDB97530ECA80BCA80000000000004017FFFFFFFFFFFFC0240000000000003FA1111 111111106BCA80000000000004017FFFFFFFFFFFFC022AAAAAAAAAAABBF4845C8A0CE5 1F1BCA80000000000004017FFFFFFFFFFFFC021555555555556BFA04EE2CC0A9E8BBCA 80000000000004017FFFFFFFFFFFFC020000000000001BFAEB851EB851EB6BCA800000 00000004017FFFFFFFFFFFFC01D555555555557BFB5CEB240795CECBCA800000000000 04017FFFFFFFFFFFFC01AAAAAAAAAAAACBFBB7F0D4629B7F4BCA80000000000004017F FFFFFFFFFFFC018000000000001BFC0369D0369D038BCA80000000000004017FFFFFFF FFFFFC015555555555556BFC24C9C413B8B32BCA80000000000004017FFFFFFFFFFFFC 012AAAAAAAAAAABBFC401845C8A0CE7BCA80000000000004017FFFFFFFFFFFFC010000 000000000BFC5555555555558BCA80000000000004017FFFFFFFFFFFFC00AAAAAAAAAA AABBFC6480F2B9D6484BCA80000000000004017FFFFFFFFFFFFC005555555555556BFC 6D9B1DF623A6BBCA80000000000004017FFFFFFFFFFFFC000000000000001BFC70A3D7 0A3D70DBCA80000000000004017FFFFFFFFFFFFBFF5555555555558BFC6D9B1DF623A6 ABCA80000000000004017FFFFFFFFFFFFBFE555555555555BBFC6480F2B9D6484BCA80 000000000004017FFFFFFFFFFFFBCC8000000000000BFC5555555555558BCA80000000 000004017FFFFFFFFFFFF3FE555555555554FBFC401845C8A0CE8BCA80000000000004 017FFFFFFFFFFFF3FF5555555555552BFC24C9C413B8B33BCA80000000000004017FFF FFFFFFFFF3FFFFFFFFFFFFFFCBFC0369D0369D03ABCA80000000000004017FFFFFFFFF FFF4005555555555553BFBB7F0D4629B7F9BCA80000000000004017FFFFFFFFFFFF400 AAAAAAAAAAAA8BFB5CEB240795CF3BCA80000000000004017FFFFFFFFFFFF400FFFFFF FFFFFFDBFAEB851EB851ECABCA80000000000004017FFFFFFFFFFFF4012AAAAAAAAAAA 9BFA04EE2CC0A9E9ABCA80000000000004017FFFFFFFFFFFF4015555555555554BF484 5C8A0CE5595BCA80000000000004017FFFFFFFFFFFF4017FFFFFFFFFFFF3FA11111111 110FFBCA80000000000004017FFFFFFFFFFFF401AAAAAAAAAAAAA3FB203CAE7592036B CA80000000000004017FFFFFFFFFFFF401D5555555555553FBC413B8B302A74BCA8000 0000000004017FFFFFFFFFFFF40200000000000003FC3A06D3A06D39EBCA8000000000 0004017FFFFFFFFFFFF40215555555555553FC98153D0F8CB45BCA8000000000000401 7FFFFFFFFFFFF4022AAAAAAAAAAAA3FCFC3518A6DFC30BCA80000000000004017FFFFF FFFFFFF4023FFFFFFFFFFFF3FD3333333333330BCA8000000000000401AAAAAAAAAAAA AC0240000000000003FB6C16C16C16C13BCA8000000000000401AAAAAAAAAAAAAC022A AAAAAAAAAAB3FAC10AFF9EE8DD4BCA8000000000000401AAAAAAAAAAAAAC0215555555 555563F9845C8A0CE5122BCA8000000000000401AAAAAAAAAAAAAC020000000000001B F723456789ABCD3BCA8000000000000401AAAAAAAAAAAAAC01D555555555557BF9E573 AC901E577BCA8000000000000401AAAAAAAAAAAAAC01AAAAAAAAAAAACBFAA8C536FE1A 8CBBCA8000000000000401AAAAAAAAAAAAAC018000000000001BFB23456789ABCE2BCA 8000000000000401AAAAAAAAAAAAAC015555555555556BFB66054F43E32D7BCA800000 0000000401AAAAAAAAAAAAAC012AAAAAAAAAAABBFB9CA252ADB3641BCA800000000000 0401AAAAAAAAAAAAAC010000000000000BFBC71C71C71C722BCA8000000000000401AA AAAAAAAAAAAC00AAAAAAAAAAAABBFBE573AC901E579BCA8000000000000401AAAAAAAA AAAAAC005555555555556BFBF7A80308B9147BCA8000000000000401AAAAAAAAAAAAAC 000000000000001BFBFDB97530ECA8CBCA8000000000000401AAAAAAAAAAAAABFF5555 555555558BFBF7A80308B9147BCA8000000000000401AAAAAAAAAAAAABFE5555555555 55BBFBE573AC901E57ABCA8000000000000401AAAAAAAAAAAAABCC8000000000000BFB C71C71C71C723BCA8000000000000401AAAAAAAAAAAAA3FE555555555554FBFB9CA252 ADB3643BCA8000000000000401AAAAAAAAAAAAA3FF5555555555552BFB66054F43E32D 9BCA8000000000000401AAAAAAAAAAAAA3FFFFFFFFFFFFFFCBFB23456789ABCE6BCA80 00000000000401AAAAAAAAAAAAA4005555555555553BFAA8C536FE1A8D4BCA80000000 00000401AAAAAAAAAAAAA400AAAAAAAAAAAA8BF9E573AC901E596BCA80000000000004 01AAAAAAAAAAAAA400FFFFFFFFFFFFDBF723456789ABD71BCA8000000000000401AAAA AAAAAAAAA4012AAAAAAAAAAA93F9845C8A0CE5103BCA8000000000000401AAAAAAAAAA AAA40155555555555543FAC10AFF9EE8DC6BCA8000000000000401AAAAAAAAAAAAA401 7FFFFFFFFFFFF3FB6C16C16C16C0EBCA8000000000000401AAAAAAAAAAAAA401AAAAAA AAAAAAA3FC01E573AC901E2BCA8000000000000401AAAAAAAAAAAAA401D55555555555 53FC53D0F8CB48701BCA8000000000000401AAAAAAAAAAAAA40200000000000003FCAB CDF01234566BCA8000000000000401AAAAAAAAAAAAA40215555555555553FD04EE2CC0 A9E86BCA8000000000000401AAAAAAAAAAAAA4022AAAAAAAAAAAA3FD36FE1A8C536FBB CA8000000000000401AAAAAAAAAAAAA4023FFFFFFFFFFFF3FD6C16C16C16C14BCA8000 000000000401D555555555555C0240000000000003FC30ECA8641FDB8BCA8000000000 000401D555555555555C022AAAAAAAAAAAB3FBD6480F2B9D64ABCA8000000000000401 D555555555555C0215555555555563FB56D9B1DF623A8BCA8000000000000401D55555 5555555C0200000000000013FAC71C71C71C722BCA8000000000000401D55555555555 5C01D5555555555573F9F19690E085801BCA8000000000000401D555555555555C01AA AAAAAAAAAAC3F80AFF9EE8DD7D2BCA8000000000000401D555555555555C0180000000 00001BF86C16C16C16C0EBCA8000000000000401D555555555555C015555555555556B F9C10AFF9EE8DDCBCA8000000000000401D555555555555C012AAAAAAAAAAABBFA4DBF 86A314DC2BCA8000000000000401D555555555555C010000000000000BFAA2B3C4D5E6 F85BCA8000000000000401D555555555555C00AAAAAAAAAAAABBFADF623A67EAC33BCA 8000000000000401D555555555555C005555555555556BFB01E573AC901E7BCA800000 0000000401D555555555555C000000000000001BFB07F6E5D4C3B2DBCA800000000000 0401D555555555555BFF5555555555558BFB01E573AC901E8BCA8000000000000401D5 55555555555BFE555555555555BBFADF623A67EAC34BCA8000000000000401D5555555 55555BCC8000000000000BFAA2B3C4D5E6F86BCA8000000000000401D5555555555553 FE555555555554FBFA4DBF86A314DC6BCA8000000000000401D5555555555553FF5555 555555552BF9C10AFF9EE8DE5BCA8000000000000401D5555555555553FFFFFFFFFFFF FFCBF86C16C16C16C34BCA8000000000000401D55555555555540055555555555533F8 0AFF9EE8DD7AABCA8000000000000401D555555555555400AAAAAAAAAAAA83F9F19690 E0857EABCA8000000000000401D555555555555400FFFFFFFFFFFFD3FAC71C71C71C71 1BCA8000000000000401D5555555555554012AAAAAAAAAAA93FB56D9B1DF623A0BCA80 00000000000401D55555555555540155555555555543FBD6480F2B9D643BCA80000000 00000401D5555555555554017FFFFFFFFFFFF3FC30ECA8641FDB7BCA80000000000004 01D555555555555401AAAAAAAAAAAAA3FC7CC6BB5AA4992BCA8000000000000401D555 555555555401D5555555555553FCCEB240795CEB1BCA8000000000000401D555555555 55540200000000000003FD13579BE02468BBCA8000000000000401D555555555555402 15555555555553FD425ED097B425EBCA8000000000000401D5555555555554022AAAAA AAAAAAA3FD746EBE635DAD3BCA8000000000000401D5555555555554023FFFFFFFFFFF F3FDA987654320FECBCA80000000000004020000000000000C0240000000000003FCB4 E81B4E81B50BCA80000000000004020000000000000C022AAAAAAAAAAAB3FC6F1F7A80 308BDBCA80000000000004020000000000000C0215555555555563FC2F684BDA12F6BB CA80000000000004020000000000000C0200000000000013FBEB851EB851EC0BCA8000 0000000004020000000000000C01D5555555555573FB845C8A0CE512FBCA8000000000 0004020000000000000C01AAAAAAAAAAAAC3FB2956D9B1DF628BCA8000000000000402 0000000000000C0180000000000013FAB4E81B4E81B59BCA8000000000000402000000 0000000C0155555555555563FA2F684BDA12F6EBCA8000000000000402000000000000 0C012AAAAAAAAAAAB3F9845C8A0CE5136BCA80000000000004020000000000000C0100 000000000003F8B4E81B4E81B60BCA80000000000004020000000000000C00AAAAAAAA AAAAB3F7845C8A0CE514EBCA80000000000004020000000000000C0055555555555563 F5845C8A0CE51B2BCA80000000000004020000000000000C0000000000000013C8169E 000000000BCA80000000000004020000000000000BFF55555555555583F5845C8A0CE5 1A9BCA80000000000004020000000000000BFE555555555555B3F7845C8A0CE5146BCA 80000000000004020000000000000BCC80000000000003F8B4E81B4E81B5BBCA800000 000000040200000000000003FE555555555554F3F9845C8A0CE512FBCA800000000000 040200000000000003FF55555555555523FA2F684BDA12F6ABCA800000000000040200 000000000003FFFFFFFFFFFFFFC3FAB4E81B4E81B50BCA800000000000040200000000 0000040055555555555533FB2956D9B1DF624BCA800000000000040200000000000004 00AAAAAAAAAAAA83FB845C8A0CE5129BCA80000000000004020000000000000400FFFF FFFFFFFFD3FBEB851EB851EB7BCA800000000000040200000000000004012AAAAAAAAA AA93FC2F684BDA12F67BCA8000000000000402000000000000040155555555555543FC 6F1F7A80308B8BCA800000000000040200000000000004017FFFFFFFFFFFF3FCB4E81B 4E81B4EBCA80000000000004020000000000000401AAAAAAAAAAAAA3FD006117228339 5BCA80000000000004020000000000000401D5555555555553FD2956D9B1DF624BCA80 00000000000402000000000000040200000000000003FD5555555555556BCA80000000 00000402000000000000040215555555555553FD845C8A0CE5129BCA80000000000004 0200000000000004022AAAAAAAAAAAA3FDB66C77D88E99FBCA80000000000004020000 0000000004023FFFFFFFFFFFF3FDEB851EB851EB8BCA80000000000004021555555555 555C0240000000000003FD20FEDCBA98764BCA80000000000004021555555555555C02 2AAAAAAAAAAAB3FCFC3518A6DFC35BCA80000000000004021555555555555C02155555 55555563FCBC7DEA00C22E4BCA80000000000004021555555555555C02000000000000 13FC82D82D82D82D9BCA80000000000004021555555555555C01D5555555555573FC4F 43E32D21C11BCA80000000000004021555555555555C01AAAAAAAAAAAAC3FC21C10AFF 9EE8DBCA80000000000004021555555555555C0180000000000013FBF49F49F49F49EB CA80000000000004021555555555555C0155555555555563FBB1DF623A67EA9BCA8000 0000000004021555555555555C012AAAAAAAAAAAB3FB7B425ED097B3FBCA8000000000 0004021555555555555C0100000000000003FB50C83FB72EA5EBCA8000000000000402 1555555555555C00AAAAAAAAAAAAB3FB327104EE2CC07BCA8000000000000402155555 5555555C0055555555555563FB203CAE7592039BCA8000000000000402155555555555 5C0000000000000013FB1A2B3C4D5E6F4BCA80000000000004021555555555555BFF55 555555555583FB203CAE7592039BCA80000000000004021555555555555BFE55555555 5555B3FB327104EE2CC06BCA80000000000004021555555555555BCC80000000000003 FB50C83FB72EA5DBCA800000000000040215555555555553FE555555555554F3FB7B42 5ED097B3DBCA800000000000040215555555555553FF55555555555523FBB1DF623A67 EA7BCA800000000000040215555555555553FFFFFFFFFFFFFFC3FBF49F49F49F49ABCA 8000000000000402155555555555540055555555555533FC21C10AFF9EE8BBCA800000 00000004021555555555555400AAAAAAAAAAAA83FC4F43E32D21C0DBCA800000000000 04021555555555555400FFFFFFFFFFFFD3FC82D82D82D82D4BCA800000000000040215 555555555554012AAAAAAAAAAA93FCBC7DEA00C22E0BCA800000000000040215555555 5555540155555555555543FCFC3518A6DFC31BCA800000000000040215555555555554 017FFFFFFFFFFFF3FD20FEDCBA98763BCA80000000000004021555555555555401AAAA AAAAAAAAA3FD46EBE635DAD51BCA80000000000004021555555555555401D555555555 5553FD6FE1A8C536FE0BCA8000000000000402155555555555540200000000000003FD 9BE02468ACF12BCA8000000000000402155555555555540215555555555553FDCAE759 203CAE6BCA800000000000040215555555555554022AAAAAAAAAAAA3FDFCF746EBE635 BBCA800000000000040215555555555554023FFFFFFFFFFFF3FE1907F6E5D4C3ABCA80 000000000004022AAAAAAAAAAAAC0240000000000003FD6C16C16C16C15BCA80000000 000004022AAAAAAAAAAAAC022AAAAAAAAAAAB3FD49327104EE2CBBCA80000000000004 022AAAAAAAAAAAAC0215555555555563FD2956D9B1DF622BCA80000000000004022AAA AAAAAAAAAC0200000000000013FD0C83FB72EA61DBCA80000000000004022AAAAAAAAA AAAC01D5555555555573FCE573AC901E571BCA80000000000004022AAAAAAAAAAAAC01 AAAAAAAAAAAAC3FCB7F0D4629B7EDBCA80000000000004022AAAAAAAAAAAAC01800000 00000013FC907F6E5D4C3AFBCA80000000000004022AAAAAAAAAAAAC01555555555555 63FC6F1F7A80308B5BCA80000000000004022AAAAAAAAAAAAC012AAAAAAAAAAAB3FC53 D0F8CB48700BCA80000000000004022AAAAAAAAAAAAC0100000000000003FC3E93E93E 93E8FBCA80000000000004022AAAAAAAAAAAAC00AAAAAAAAAAAAB3FC2F684BDA12F63B CA80000000000004022AAAAAAAAAAAAC0055555555555563FC264E209DC597CBCA8000 0000000004022AAAAAAAAAAAAC0000000000000013FC23456789ABCDABCA8000000000 0004022AAAAAAAAAAAABFF55555555555583FC264E209DC597DBCA8000000000000402 2AAAAAAAAAAAABFE555555555555B3FC2F684BDA12F63BCA80000000000004022AAAAA AAAAAAABCC80000000000003FC3E93E93E93E8FBCA80000000000004022AAAAAAAAAAA A3FE555555555554F3FC53D0F8CB486FFBCA80000000000004022AAAAAAAAAAAA3FF55 555555555523FC6F1F7A80308B4BCA80000000000004022AAAAAAAAAAAA3FFFFFFFFFF FFFFC3FC907F6E5D4C3ADBCA80000000000004022AAAAAAAAAAAA40055555555555533 FCB7F0D4629B7EBBCA80000000000004022AAAAAAAAAAAA400AAAAAAAAAAAA83FCE573 AC901E56DBCA80000000000004022AAAAAAAAAAAA400FFFFFFFFFFFFD3FD0C83FB72EA 61ABCA80000000000004022AAAAAAAAAAAA4012AAAAAAAAAAA93FD2956D9B1DF620BCA 80000000000004022AAAAAAAAAAAA40155555555555543FD49327104EE2C9BCA800000 00000004022AAAAAAAAAAAA4017FFFFFFFFFFFF3FD6C16C16C16C13BCA800000000000 04022AAAAAAAAAAAA401AAAAAAAAAAAAA3FD9203CAE759201BCA80000000000004022A AAAAAAAAAAA401D5555555555553FDBAF98D76B5490BCA80000000000004022AAAAAAA AAAAA40200000000000003FDE6F8091A2B3C2BCA80000000000004022AAAAAAAAAAAA4 0215555555555553FE0AFF9EE8DD7CBBCA80000000000004022AAAAAAAAAAAA4022AAA AAAAAAAAA3FE240795CEB2406BCA80000000000004022AAAAAAAAAAAA4023FFFFFFFFF FFF3FE3E93E93E93E92BCA80000000000004023FFFFFFFFFFFFC0240000000000003FD BBBBBBBBBBBB8BCA80000000000004023FFFFFFFFFFFFC022AAAAAAAAAAAB3FD98D76B 549326FBCA80000000000004023FFFFFFFFFFFFC0215555555555563FD78FBD401845C 6BCA80000000000004023FFFFFFFFFFFFC0200000000000013FD5C28F5C28F5C1BCA80 000000000004023FFFFFFFFFFFFC01D5555555555573FD425ED097B425DBCA80000000 000004023FFFFFFFFFFFFC01AAAAAAAAAAAAC3FD2B9D6480F2B9BBCA80000000000004 023FFFFFFFFFFFFC0180000000000013FD17E4B17E4B17CBCA80000000000004023FFF FFFFFFFFFC0155555555555563FD0734B78FBD3FEBCA80000000000004023FFFFFFFFF FFFC012AAAAAAAAAAAB3FCF31AED6A92648BCA80000000000004023FFFFFFFFFFFFC01 00000000000003FCDDDDDDDDDDDD7BCA80000000000004023FFFFFFFFFFFFC00AAAAAA AAAAAAB3FCCEB240795CEABBCA80000000000004023FFFFFFFFFFFFC00555555555555 63FCC598153D0F8C4BCA80000000000004023FFFFFFFFFFFFC0000000000000013FCC2 8F5C28F5C22BCA80000000000004023FFFFFFFFFFFFBFF55555555555583FCC598153D 0F8C5BCA80000000000004023FFFFFFFFFFFFBFE555555555555B3FCCEB240795CEABB CA80000000000004023FFFFFFFFFFFFBCC80000000000003FCDDDDDDDDDDDD7BCA8000 0000000004023FFFFFFFFFFFF3FE555555555554F3FCF31AED6A92647BCA8000000000 0004023FFFFFFFFFFFF3FF55555555555523FD0734B78FBD3FEBCA8000000000000402 3FFFFFFFFFFFF3FFFFFFFFFFFFFFC3FD17E4B17E4B17ABCA80000000000004023FFFFF FFFFFFF40055555555555533FD2B9D6480F2B99BCA80000000000004023FFFFFFFFFFF F400AAAAAAAAAAAA83FD425ED097B425BBCA80000000000004023FFFFFFFFFFFF400FF FFFFFFFFFFD3FD5C28F5C28F5BEBCA80000000000004023FFFFFFFFFFFF4012AAAAAAA AAAA93FD78FBD401845C4BCA80000000000004023FFFFFFFFFFFF40155555555555543 FD98D76B549326DBCA80000000000004023FFFFFFFFFFFF4017FFFFFFFFFFFF3FDBBBB BBBBBBBB7BCA80000000000004023FFFFFFFFFFFF401AAAAAAAAAAAAA3FDE1A8C536FE 1A5BCA80000000000004023FFFFFFFFFFFF401D5555555555553FE054F43E32D21ABCA 80000000000004023FFFFFFFFFFFF40200000000000003FE1B4E81B4E81B3BCA800000 00000004023FFFFFFFFFFFF40215555555555553FE32D21C10AFF9DBCA800000000000 04023FFFFFFFFFFFF4022AAAAAAAAAAAA3FE4BDA12F684BD8BCA80000000000004023F FFFFFFFFFFF4023FFFFFFFFFFFF3FE6666666666664-%&STYLEG6#%,PATCHNOGRIDG-% 'POINTSG6&7%$!+w3ieT!\"*$\"+()*[QU\"F4$\"+)>c\"eEE'FP7%$!+*o!\\VUF9$\"+Hr!HX\"F9$\"+\\EKGyFP7%$!+G))=#4&F9$\"+ c&)[V$F9$\"+&)4BA>#F97%$!+3s/t7F4$\"+$R@(eVF9$\"+ )z'\\[BF97%$!+Aq\"zN\"F4$\"+?GI\\YF9$\"+^K10DF97%$!+OoyU9F4$\"+YU))R\\ F9$\"+/(H;m#F97%$!+]mlF:F4$\"+tcYI_F9$\"+eh>=GF97%$!+kk_7;F4$\"+*4Z5_& F9$\"+6EwuHF97%$!+yiR(p\"F4$\"+D&G;\"eF9$\"+k!H88$F97%$!+#4mAy\"F4$\"+ _*4A5'F9$\"+YWMF97%$!+?d+_>F4$\" +0GP$o'F9$\"+C%G5g$F97%$!+Mb(o.#F4$\"+JU&R(pF9$\"+x[fdPF97%$!+[`u@@F4$ \"+dc`ksF9$\"+J8;9RF97%$!+i^h1AF4$\"+%3<^b(F9$\"+%yF22%F97%$!+w\\[\"H# F4$\"+5&)pXyF9$\"+PUHFUF97%$!+*yajP#F4$\"+P*zi8)F9$\"+!pgQQ%F97%$!+.YA hCF4$\"+j8'oU)F9$\"+WrUSXF97%$!+\"F4$\"+$eC#>kF97%$!+&=KXc$F4$\"+\"*>W?7 F4$\"+P5zvlF97%$!+**>S\\OF4$\"+L,]\\7F4$\"+!\\dBt'F97%$!+8=FMPF4$\"+w# e&y7F4$\"+VR#*))oF97%$!+E;9>QF4$\"+>kh28F4$\"+'R!\\XqF97%$!+S9,/RF4$\" +hXnO8F4$\"+]o0-sF97%$!+a7))))RF4$\"+/Ftl8F4$\"+.LietF97%$!+o5vtSF4$\" +Y3z%R\"F4$\"+c(*=:vF97%$!+!)3ieTF4$\"+))*[QU\"F4$\"+1ivrwF9-F>6&F@FWF9FaelFhdl7&F^el7%$\"+UH.JAF4F;$\"+5CEkQF47%$\"+QB,b @F4$\"+e\"QVx&F9F\\flFcel7&Fiel7%$\"+/OL;FF4F;$\"+u[**RNF47%$\"+\"ywPi #F4$\"+(p)QIqF9FgflF^fl7&Fdfl7%$\"+Xq:bJF4F;F`gl7%$\"+wwkZIF4$\"+Ot9m \")F9F`glFifl7&F_gl7%FgflF;Fefl7%$\"+uCP>MF4$\"+J4=i\"*F9FeflFbgl7&Fhg l7%F\\flF;$\"+VH.JAF47%$\"+h3fKPF4$\"+2Z9+5F4F`hlFigl7&F_hl7%FaelF;F_e l7%$\"+%eV>)RF4$\"+o&ep1\"F4F_elFbhl7&Fhhl7%FfdlF;Fddl7%$\"+ZT;jTF4Fid lFddlFihl7&F_il7%F[dlF;Ficl7%$\"+==:tUF4$\"+zv)\\9\"F4FiclF`il7&Fdil7% FfclF;$\"+Jjm3s!#C7%FfdlFddlF\\jlFeil7&F[jl7%F[dlF;$!+%pkT#eF97%FfilFh ilFbjlF_jl7&Fajl7%FfdlF;$!+Kw'[:\"F47%FailFidlFgjlFdjl7&Ffjl7%FaelF;$! +)oevq\"F47%FjhlF\\ilF\\[mFijl7&F[[m7%F\\flF;$!+UH.JAF47%FchlFehlFa[mF ^[m7&F`[m7%FgflF;$!+/OL;FF47%FjglF\\hlFf[mFc[m7&Fe[m7%F`glF;$!+Xq:bJF4 7%FcglFeglF[\\mFh[m7&Fj[m7%FeflF;$!+u[**RNF47%FjflF\\glF`\\mF]\\m7&F_ \\m7%F`hlF;$!+5CEkQF47%F_flFaflFe\\mFb\\m7&Fd\\m7%F_elF;$!+W8TATF47%Fd elFfelFj\\mFg\\m7&Fi\\m7%FddlF;$!+xY-5VF47%FidlF[elF_]mF\\]m7&F^]m7%Fi clF;$!+$H#*QU%F47%F^dlF`dlFd]mFa]m7&Fc]m7%$\"+mKtT9!#BF;$!+&)e1iWF47%$ \"+'R2ER\"F[^m$\"+t-[JPF^jlF\\^mFf]m7&FeclF]dl7%$\"+\"euQ/&F9$\"+ZB37H F9F[dlFecl7&F]dlFhdl7%FehlFaflFfdlFd^m7&FhdlFcel7%$\"+.#*yy9F4$\"+UMzP &)F9FaelFj^m7&FcelF^fl7%$\"+078K>F4FidlF\\flF\\_m7&F^flFifl7%$\"+2RT_B F4$\"+-o;e8F4FgflFb_m7&FiflFbgl7%$\"+ahWKFF4$\"+B&yvd\"F4F`glFf_m7&Fbg lFigl7%$\"+\"\\Dd1$F4$\"+Pu**p@#F4FiclFbam7&FeilF_jl7%F\\f lFjelF\\jlFdam7&F_jlFdjl7%FeamFgamFbjlFjam7&FdjlFijl7%FchlF_flFgjlF\\b m7&FijlF^[m7%F]amF_amF\\[mF^bm7&F^[mFc[m7%Fi`mFc_mFa[mF`bm7&Fc[mFh[m7% Fc`mFe`mFf[mFbbm7&Fh[mF]\\m7%F]`mF_`mF[\\mFdbm7&F]\\mFb\\m7%Fg_mFi_mF` \\mFfbm7&Fb\\mFg\\m7%Fc_mFidlFe\\mFhbm7&Fg\\mF\\]m7%F]_mF__mFj\\mFjbm7 &F\\]mFa]m7%FehlFaflF_]mF\\cm7&Fa]mFf]m7%Fe^mFg^mFd]mF^cm7&Ff]mF^^m7%$ \"+Mwd[7F[^mF\\jlF\\^mF`cm7&FeclFd^m7%$\"+]jI=TF9FgcmF[dlFecl7&Fd^mFj^ m7%FeglFeglFfdlFfcm7&Fj^mF\\_m7%$\"+GjU27F4F]dmFaelFjcm7&F\\_mFb_m7%F_ `mF_`mF\\flF\\dm7&Fb_mFf_m7%$\"+7zt?>F4FcdmFgflF`dm7&Ff_mF\\`m7%FjelFj elF`glFbdm7&F\\`mFb`m7%$\"+\"QaJ]#F4FidmFeflFfdm7&Fb`mFh`m7%F]`mF]`mF` hlFhdm7&Fh`mF\\am7%$\"+;])\\\"HF4F_emF_elF\\em7&F\\amFbam7%FcglFcglFdd lF^em7&FbamFdam7%$\"+RU;GJF4FeemFiclFbem7&FdamFjam7%F`glF`glF\\jlFdem7 &FjamF\\bm7%FeemFeemFbjlFhem7&F\\bmF^bm7%FcglFcglFgjlFjem7&F^bmF`bm7%F _emF_emF\\[mF\\fm7&F`bmFbbm7%F]`mF]`mFa[mF^fm7&FbbmFdbm7%FidmFidmFf[mF `fm7&FdbmFfbm7%F`hlF`hlF[\\mFbfm7&FfbmFhbm7%FcdmFcdmF`\\mFdfm7&FhbmFjb m7%F_`mF_`mFe\\mFffm7&FjbmF\\cm7%F]dmF]dmFj\\mFhfm7&F\\cmF^cm7%FeglFeg lF_]mFjfm7&F^cmF`cm7%FgcmFgcmFd]mF\\gm7&F`cmFbcm7%$\"+p$f%>5F[^mFagmF \\^mF^gm7&FeclFfcm7%Fg^mFe^mF[dlFecl7&FfcmFjcm7%FaflFehlFfdlFdgm7&Fjcm F\\dm7%F__mF]_mFaelFfgm7&F\\dmF`dm7%FidlFc_mF\\flFhgm7&F`dmFbdm7%Fi_mF g_mFgflFjgm7&FbdmFfdm7%F_`mF]`mF`glF\\hm7&FfdmFhdm7%Fe`mFc`mFeflF^hm7& FhdmF\\em7%Fc_mFi`mF`hlF`hm7&F\\emF^em7%F_amF]amF_elFbhm7&F^emFbem7%F_ flFchlFddlFdhm7&FbemFdem7%FgamFeamFiclFfhm7&FdemFhem7%F`hlF\\flF\\jlFh hm7&FhemFjem7%FgamFeamFbjlFjhm7&FjemF\\fm7%F_flFchlFgjlF\\im7&F\\fmF^f m7%F_amF]amF\\[mF^im7&F^fmF`fm7%Fc_mFi`mFa[mF`im7&F`fmFbfm7%Fe`mFc`mFf [mFbim7&FbfmFdfm7%F_`mF]`mF[\\mFdim7&FdfmFffm7%Fi_mFg_mF`\\mFfim7&Fffm Fhfm7%FidlFc_mFe\\mFhim7&FhfmFjfm7%F__mF]_mFj\\mFjim7&FjfmF\\gm7%FaflF ehlF_]mF\\jm7&F\\gmF^gm7%Fg^mFe^mFd]mF^jm7&F^gmF`gm7%F\\jlFccmF\\^mF`j m7&FeclFdgm7%F`dlF^dlF[dlFecl7&FdgmFfgm7%F[elFidlFfdlFdjm7&FfgmFhgm7%F felFdelFaelFfjm7&FhgmFjgm7%FaflF_flF\\flFhjm7&FjgmF\\hm7%F\\glFjflFgfl Fjjm7&F\\hmF^hm7%FeglFcglF`glF\\[n7&F^hmF`hm7%F\\hlFjglFeflF^[n7&F`hmF bhm7%FehlFchlF`hlF`[n7&FbhmFdhm7%F\\ilFjhlF_elFb[n7&FdhmFfhm7%FidlFail FddlFd[n7&FfhmFhhm7%FhilFfilFiclFf[n7&FhhmFjhm7%FddlFfdlF\\jlFh[n7&Fjh mF\\im7%FhilFfilFbjlFj[n7&F\\imF^im7%FidlFailFgjlF\\\\n7&F^imF`im7%F\\ ilFjhlF\\[mF^\\n7&F`imFbim7%FehlFchlFa[mF`\\n7&FbimFdim7%F\\hlFjglFf[m Fb\\n7&FdimFfim7%FeglFcglF[\\mFd\\n7&FfimFhim7%F\\glFjflF`\\mFf\\n7&Fh imFjim7%FaflF_flFe\\mFh\\n7&FjimF\\jm7%FfelFdelFj\\mFj\\n7&F\\jmF^jm7% F[elFidlF_]mF\\]n7&F^jmF`jm7%F`dlF^dlFd]mF^]n7&F`jmFbjm7%Fa^mF_^mF\\^m F`]n7&FeclFdjm7%$\"+sw>4%*!#DFiclF[dlFecl7&FdjmFfjm7%$\"+O,ul=F^jlFddl FfdlFd]n7&FfjmFhjm7%$\"+urjeFF^jlF_elFaelFi]n7&FhjmFjjm7%$\"+mJL/OF^jl FjelF\\flF]^n7&FjjmF\\[n7%$\"+!>dF^jlFgflFeflFi^n7&F`[nFb[n 7%$\"+q\"))GC'F^jlF\\flF`hlF]_n7&Fb[nFd[n7%$\"+!GR*fmF^jlFaelF_elFa_n7 &Fd[nFf[n7%$\"+#)p.jpF^jlFfdlFddlFe_n7&Ff[nFh[n7%$\"+\">&*p9(F^jlF[dlF iclFi_n7&Fh[nFj[n7%F\\jlFfclF\\jlF]`n7&Fj[nF\\\\n7%F^`nF[dlFbjlFa`n7&F \\\\nF^\\n7%Fj_nFfdlFgjlFc`n7&F^\\nF`\\n7%Ff_nFaelF\\[mFe`n7&F`\\nFb\\ n7%Fb_nF\\flFa[mFg`n7&Fb\\nFd\\n7%F^_nFgflFf[mFi`n7&Fd\\nFf\\n7%Fj^nF` glF[\\mF[an7&Ff\\nFh\\n7%Ff^nFeflF`\\mF]an7&Fh\\nFj\\n7%Fb^nF`hlFe\\mF _an7&Fj\\nF\\]n7%F^^nF_elFj\\mFaan7&F\\]nF^]n7%Fj]nFddlF_]mFcan7&F^]nF `]n7%Fe]nFiclFd]mFean7&F`]nFb]n7%$\"+cV=HB!#QFi]mF\\^mFgan7&FeclFd]n7% $!+XZS2:F9F^dlF[dlFecl7&Fd]nFi]n7%$!+wt,*)HF9FidlFfdlF^bn7&Fi]nF]^n7%$ !+#4([>WF9FdelFaelFbbn7&F]^nFa^n7%$!+e\"QVx&F9F_flF\\flFfbn7&Fa^nFe^n7 %$!+(p)QIqF9FjflFgflFjbn7&Fe^nFi^n7%$!+Ot9m\")F9FcglF`glF^cn7&Fi^nF]_n 7%$!+J4=i\"*F9FjglFeflFbcn7&F]_nFa_n7%$!+2Z9+5F4FchlF`hlFfcn7&Fa_nFe_n 7%$!+o&ep1\"F4FjhlF_elFjcn7&Fe_nFi_n7%$!+rk^:6F4FailFddlF^dn7&Fi_nF]`n 7%$!+zv)\\9\"F4FfilFiclFbdn7&F]`nFa`n7%FgjlFfdlF\\jlFfdn7&Fa`nFc`n7%Fg dnFfilFbjlFjdn7&Fc`nFe`n7%FcdnFailFgjlF\\en7&Fe`nFg`n7%F_dnFjhlF\\[mF^ en7&Fg`nFi`n7%F[dnFchlFa[mF`en7&Fi`nF[an7%FgcnFjglFf[mFben7&F[anF]an7% FccnFcglF[\\mFden7&F]anF_an7%F_cnFjflF`\\mFfen7&F_anFaan7%F[cnF_flFe\\ mFhen7&FaanFcan7%FgbnFdelFj\\mFjen7&FcanFean7%FcbnFidlF_]mF\\fn7&FeanF gan7%F_bnF^dlFd]mF^fn7&FganFian7%$!+t-[JPF^jlF_^mF\\^mF`fn7&FeclF^bn7% $!+ZB37HF9Fe^mF[dlFecl7&F^bnFbbn7%F[cnFehlFfdlFffn7&FbbnFfbn7%$!+UMzP& )F9F]_mFaelFjfn7&FfbnFjbn7%FcdnFc_mF\\flF\\gn7&FjbnF^cn7%$!+-o;e8F4Fg_ mFgflF`gn7&F^cnFbcn7%$!+B&yvd\"F4F]`mF`glFbgn7&FbcnFfcn7%$!+Pu**pF4Fi`mF`hlFjgn7&FjcnF^dn7%$!+sc?h?F4F]am F_elF^hn7&F^dnFbdn7%$!+QB,b@F4FchlFddlFbhn7&FbdnFfdn7%$!+Yh%>@#F4FeamF iclFfhn7&FfdnFjdn7%Fa[mF\\flF\\jlFjhn7&FjdnF\\en7%F[inFeamFbjlF^in7&F \\enF^en7%FghnFchlFgjlF`in7&F^enF`en7%FchnF]amF\\[mFbin7&F`enFben7%F_h nFi`mFa[mFdin7&FbenFden7%F[hnFc`mFf[mFfin7&FdenFfen7%FggnF]`mF[\\mFhin 7&FfenFhen7%FcgnFg_mF`\\mFjin7&FhenFjen7%FcdnFc_mFe\\mF\\jn7&FjenF\\fn 7%F]gnF]_mFj\\mF^jn7&F\\fnF^fn7%F[cnFehlF_]mF`jn7&F^fnF`fn7%FgfnFe^mFd ]mFbjn7&F`fnFbfn7%$!+Jjm3sF^jlFccmF\\^mFdjn7&FeclFffn7%$!+]jI=TF9FgcmF [dlFecl7&FffnFjfn7%FccnFeglFfdlFjjn7&FjfnF\\gn7%$!+GjU27F4F]dmFaelF^[o 7&F\\gnF`gn7%FggnF_`mF\\flF`[o7&F`gnFbgn7%$!+7zt?>F4FcdmFgflFd[o7&Fbgn Ffgn7%Fa[mF`hlF`glFf[o7&FfgnFjgn7%$!+\"QaJ]#F4FidmFeflFj[o7&FjgnF^hn7% $!+ahWKFF4F]`mF`hlF\\\\o7&F^hnFbhn7%$!+;])\\\"HF4F_emF_elF`\\o7&FbhnFf hn7%$!+wwkZIF4FcglFddlFd\\o7&FfhnFjhn7%$!+RU;GJF4FeemFiclFh\\o7&FjhnF^ in7%F[\\mF`glF\\jlF\\]o7&F^inF`in7%F]]oFeemFbjlF`]o7&F`inFbin7%Fi\\oFc glFgjlFb]o7&FbinFdin7%Fe\\oF_emF\\[mFd]o7&FdinFfin7%Fa\\oF]`mFa[mFf]o7 &FfinFhin7%F]\\oFidmFf[mFh]o7&FhinFjin7%$!+VH.JAF4F`hlF[\\mFj]o7&FjinF \\jn7%Fg[oFcdmF`\\mF\\^o7&F\\jnF^jn7%FggnF_`mFe\\mF`^o7&F^jnF`jn7%Fa[o F]dmFj\\mFb^o7&F`jnFbjn7%FccnFeglF_]mFd^o7&FbjnFdjn7%F[[oFgcmFd]mFf^o7 &FdjnFfjn7%$!+p$f%>5F[^mFagmF\\^mFh^o7&FeclFjjn7%$!+\"euQ/&F9Fg^mF[dlF ecl7&FjjnF^[o7%F[dnFaflFfdlF^_o7&F^[oF`[o7%$!+.#*yy9F4F__mFaelFb_o7&F` [oFd[o7%F_hnFidlF\\flFd_o7&Fd[oFf[o7%$!+2RT_BF4Fi_mFgflFh_o7&Ff[oFj[o7 %Fa\\oF_`mF`glFj_o7&Fj[oF\\\\o7%$!+\"\\Dd1$F4Fe`mFeflF^`o7&F\\\\oF`\\o 7%$!+9%\\lM$F4Fc_mF`hlF``o7&F`\\oFd\\o7%$!+\\H6qNF4F_amF_elFd`o7&Fd\\o Fh\\o7%$!+h3fKPF4F_flFddlFh`o7&Fh\\oF\\]o7%$!+4J?JQF4FgamFiclF\\ao7&F \\]oF`]o7%Fe\\mF`hlF\\jlF`ao7&F`]oFb]o7%FaaoFgamFbjlFdao7&Fb]oFd]o7%F] aoF_flFgjlFfao7&Fd]oFf]o7%Fi`oF_amF\\[mFhao7&Ff]oFh]o7%Fe`oFc_mFa[mFja o7&Fh]oFj]o7%Fa`oFe`mFf[mF\\bo7&Fj]oF\\^o7%Fa\\oF_`mF[\\mF^bo7&F\\^oF` ^o7%F[`oFi_mF`\\mF`bo7&F`^oFb^o7%F_hnFidlFe\\mFbbo7&Fb^oFd^o7%Fe_oF__m Fj\\mFdbo7&Fd^oFf^o7%F[dnFaflF_]mFfbo7&Ff^oFh^o7%F__oFg^mFd]mFhbo7&Fh^ oFj^o7%$!+Mwd[7F[^mF\\jlF\\^mFjbo7&FeclF^_o7%$!+&46di&F9F`dlF[dlFecl7& F^_oFb_o7%FcdnF[elFfdlF`co7&Fb_oFd_o7%$!+P]P\\;F4FfelFaelFdco7&Fd_oFh_ o7%FghnFaflF\\flFfco7&Fh_oFj_o7%$!+\"ywPi#F4F\\glFgflFjco7&Fj_oF^`o7%F i\\oFeglF`glF\\do7&F^`oF``o7%$!+uCP>MF4F\\hlFeflF`do7&F``oFd`o7%F]aoFe hlF`hlFbdo7&Fd`oFh`o7%$!+%eV>)RF4F\\ilF_elFfdo7&Fh`oF\\ao7%$!+ZT;jTF4F idlFddlFhdo7&F\\aoF`ao7%$!+==:tUF4FhilFiclF\\eo7&F`aoFdao7%F_]mFddlF\\ jlF`eo7&FdaoFfao7%FaeoFhilFbjlFdeo7&FfaoFhao7%F]eoFidlFgjlFfeo7&FhaoFj ao7%FidoF\\ilF\\[mFheo7&FjaoF\\bo7%F]aoFehlFa[mFjeo7&F\\boF^bo7%FcdoF \\hlFf[mF\\fo7&F^boF`bo7%Fi\\oFeglF[\\mF^fo7&F`boFbbo7%F]doF\\glF`\\mF `fo7&FbboFdbo7%FghnFaflFe\\mFbfo7&FdboFfbo7%FgcoFfelFj\\mFdfo7&FfboFhb o7%FcdnF[elF_]mFffo7&FhboFjbo7%FacoF`dlFd]mFhfo7&FjboF\\co7%$!+'R2ER\" F[^mFa^mF\\^mFjfo7&FeclF`co7%Fbjl$\"+M&R=)=F^jlF[dlFecl7&F`coFdco7%Fgj lFa^mFfdlF`go7&FdcoFfco7%F\\[m$\"+\\VFL\"F[^mF_elFfho7&FhdoF\\eo7%F_]mF _^mFddlFhho7&F\\eoF`eo7%Fd]m$\"+Q!*RH9F[^mFiclF\\io7&F`eoFdeo7%F\\^mFi ]mF\\jlF^io7&FdeoFfeo7%Fd]mF_ioFbjlFbio7&FfeoFheo7%F_]mF_^mFgjlFdio7&F heoFjeo7%Fj\\mFihoF\\[mFfio7&FjeoF\\fo7%Fe\\mFccmFa[mFhio7&F\\foF^fo7% F`\\mFchoFf[mFjio7&F^foF`fo7%F[\\mFagmF[\\mF\\jo7&F`foFbfo7%Ff[mF]hoF` \\mF^jo7&FbfoFdfo7%F]^oF\\jlFe\\mF`jo7&FdfoFffo7%F\\[mFggoFj\\mFbjo7&F ffoFhfo7%FgjlFa^mF_]mFdjo7&FhfoFjfo7%FbjlFagoFd]mFfjo7&FjfoF\\go7%$!+m KtT9F[^m$\"+7(o$eYF\\bnF\\^mFhjo7&FeclF`go7%FacoF_bnF[dlFecl7&F`goFdgo 7%FcdnFcbnFfdlF`[p7&FdgoFfgo7%FgcoFgbnFaelFb[p7&FfgoFjgo7%FghnF[cnF\\f lFd[p7&FjgoF\\ho7%F]doF_cnFgflFf[p7&F\\hoF`ho7%Fi\\oFccnF`glFh[p7&F`ho Fbho7%FcdoFgcnFeflFj[p7&FbhoFfho7%F]aoF[dnF`hlF\\\\p7&FfhoFhho7%FidoF_ dnF_elF^\\p7&FhhoF\\io7%F]eoFcdnFddlF`\\p7&F\\ioF^io7%FaeoFgdnFiclFb\\ p7&F^ioFbio7%F_]mFgjlF\\jlFd\\p7&FbioFdio7%FaeoFgdnFbjlFf\\p7&FdioFfio 7%F]eoFcdnFgjlFh\\p7&FfioFhio7%FidoF_dnF\\[mFj\\p7&FhioFjio7%F]aoF[dnF a[mF\\]p7&FjioF\\jo7%FcdoFgcnFf[mF^]p7&F\\joF^jo7%Fi\\oFccnF[\\mF`]p7& F^joF`jo7%F]doF_cnF`\\mFb]p7&F`joFbjo7%FghnF[cnFe\\mFd]p7&FbjoFdjo7%Fg coFgbnFj\\mFf]p7&FdjoFfjo7%FcdnFcbnF_]mFh]p7&FfjoFhjo7%FacoF_bnFd]mFj] p7&FhjoFjjo7%F]goFcfnF\\^mF\\^p7&FeclF`[p7%F__oFgfnF[dlFecl7&F`[pFb[p7 %F[dnF[cnFfdlF`^p7&Fb[pFd[p7%Fe_oF]gnFaelFb^p7&Fd[pFf[p7%F_hnFcdnF\\fl Fd^p7&Ff[pFh[p7%F[`oFcgnFgflFf^p7&Fh[pFj[p7%Fa\\oFggnF`glFh^p7&Fj[pF\\ \\p7%Fa`oF[hnFeflFj^p7&F\\\\pF^\\p7%Fe`oF_hnF`hlF\\_p7&F^\\pF`\\p7%Fi` oFchnF_elF^_p7&F`\\pFb\\p7%F]aoFghnFddlF`_p7&Fb\\pFd\\p7%FaaoF[inFiclF b_p7&Fd\\pFf\\p7%Fe\\mFa[mF\\jlFd_p7&Ff\\pFh\\p7%FaaoF[inFbjlFf_p7&Fh \\pFj\\p7%F]aoFghnFgjlFh_p7&Fj\\pF\\]p7%Fi`oFchnF\\[mFj_p7&F\\]pF^]p7% Fe`oF_hnFa[mF\\`p7&F^]pF`]p7%Fa`oF[hnFf[mF^`p7&F`]pFb]p7%Fa\\oFggnF[\\ mF``p7&Fb]pFd]p7%F[`oFcgnF`\\mFb`p7&Fd]pFf]p7%F_hnFcdnFe\\mFd`p7&Ff]pF h]p7%Fe_oF]gnFj\\mFf`p7&Fh]pFj]p7%F[dnF[cnF_]mFh`p7&Fj]pF\\^p7%F__oFgf nFd]mFj`p7&F\\^pF^^p7%F]coFgjnF\\^mF\\ap7&FeclF`^p7%F[[oF[[oF[dlFecl7& F`^pFb^p7%FccnFccnFfdlF`ap7&Fb^pFd^p7%Fa[oFa[oFaelFbap7&Fd^pFf^p7%Fggn FggnF\\flFdap7&Ff^pFh^p7%Fg[oFg[oFgflFfap7&Fh^pFj^p7%F]^oFa[mF`glFhap7 &Fj^pF\\_p7%F]\\oF]\\oFeflFjap7&F\\_pF^_p7%Fa\\oFa\\oF`hlF\\bp7&F^_pF` _p7%Fe\\oFe\\oF_elF^bp7&F`_pFb_p7%Fi\\oFi\\oFddlF`bp7&Fb_pFd_p7%F]]oF] ]oFiclFbbp7&Fd_pFf_p7%F[\\mF[\\mF\\jlFdbp7&Ff_pFh_p7%F]]oF]]oFbjlFfbp7 &Fh_pFj_p7%Fi\\oFi\\oFgjlFhbp7&Fj_pF\\`p7%Fe\\oFe\\oF\\[mFjbp7&F\\`pF^ `p7%Fa\\oFa\\oFa[mF\\cp7&F^`pF``p7%F]\\oF]\\oFf[mF^cp7&F``pFb`p7%F]^oF a[mF[\\mF`cp7&Fb`pFd`p7%Fg[oFg[oF`\\mFbcp7&Fd`pFf`p7%FggnFggnFe\\mFdcp 7&Ff`pFh`p7%Fa[oFa[oFj\\mFfcp7&Fh`pFj`p7%FccnFccnF_]mFhcp7&Fj`pF\\ap7% F[[oF[[oFd]mFjcp7&F\\apF^ap7%F[_oF[_oF\\^mF\\dp7&FeclF`ap7%FgfnF__oF[d lFecl7&F`apFbap7%F[cnF[dnFfdlF`dp7&FbapFdap7%F]gnFe_oFaelFbdp7&FdapFfa p7%FcdnF_hnF\\flFddp7&FfapFhap7%FcgnF[`oFgflFfdp7&FhapFjap7%FggnFa\\oF `glFhdp7&FjapF\\bp7%F[hnFa`oFeflFjdp7&F\\bpF^bp7%F_hnFe`oF`hlF\\ep7&F^ bpF`bp7%FchnFi`oF_elF^ep7&F`bpFbbp7%FghnF]aoFddlF`ep7&FbbpFdbp7%F[inFa aoFiclFbep7&FdbpFfbp7%F]^oFe\\mF\\jlFdep7&FfbpFhbp7%F[inFaaoFbjlFfep7& FhbpFjbp7%FghnF]aoFgjlFhep7&FjbpF\\cp7%FchnFi`oF\\[mFjep7&F\\cpF^cp7%F _hnFe`oFa[mF\\fp7&F^cpF`cp7%F[hnFa`oFf[mF^fp7&F`cpFbcp7%FggnFa\\oF[\\m F`fp7&FbcpFdcp7%FcgnF[`oF`\\mFbfp7&FdcpFfcp7%FcdnF_hnFe\\mFdfp7&FfcpFh cp7%F]gnFe_oFj\\mFffp7&FhcpFjcp7%F[cnF[dnF_]mFhfp7&FjcpF\\dp7%FgfnF__o Fd]mFjfp7&F\\dpF^dp7%FgjnF]coF\\^mF\\gp7&FeclF`dp7%F_bnFacoF[dlFecl7&F `dpFbdp7%FcbnFcdnFfdlF`gp7&FbdpFddp7%FgbnFgcoFaelFbgp7&FddpFfdp7%F[cnF ghnF\\flFdgp7&FfdpFhdp7%F_cnF]doFgflFfgp7&FhdpFjdp7%FccnFi\\oF`glFhgp7 &FjdpF\\ep7%FgcnFcdoFeflFjgp7&F\\epF^ep7%F[dnF]aoF`hlF\\hp7&F^epF`ep7% F_dnFidoF_elF^hp7&F`epFbep7%FcdnF]eoFddlF`hp7&FbepFdep7%FgdnFaeoFiclFb hp7&FdepFfep7%FgjlF_]mF\\jlFdhp7&FfepFhep7%FgdnFaeoFbjlFfhp7&FhepFjep7 %FcdnF]eoFgjlFhhp7&FjepF\\fp7%F_dnFidoF\\[mFjhp7&F\\fpF^fp7%F[dnF]aoFa [mF\\ip7&F^fpF`fp7%FgcnFcdoFf[mF^ip7&F`fpFbfp7%FccnFi\\oF[\\mF`ip7&Fbf pFdfp7%F_cnF]doF`\\mFbip7&FdfpFffp7%F[cnFghnFe\\mFdip7&FffpFhfp7%FgbnF gcoFj\\mFfip7&FhfpFjfp7%FcbnFcdnF_]mFhip7&FjfpF\\gp7%F_bnFacoFd]mFjip7 &F\\gpF^gp7%FcfnF]goF\\^mF\\jp7&FeclF`gp7%$!+noV$p#F^jlFbjlF[dlFecl7&F `gpFbgp7%$!+#G)yS`F^jlFgjlFfdlF`jp7&FbgpFdgp7%$!+Htv'*yF^jlF\\[mFaelFd jp7&FdgpFfgp7%$!+n5wJ5F[^mFa[mF\\flFhjp7&FfgpFhgp7%$!+$o#>c7F[^mFf[mFg flF\\[q7&FhgpFjgp7%$!+%\\I\"f9F[^mF[\\mF`glF`[q7&FjgpF\\hp7%$!+y@5P;F[ ^mF`\\mFeflFd[q7&F\\hpF^hp7%$!+*eiqy\"F[^mFe\\mF`hlFh[q7&F^hpF`hp7%$!+ keW1>F[^mFj\\mF_elF\\\\q7&F`hpFbhp7%$!+A$4K*>F[^mF_]mFddlF`\\q7&FbhpFd hp7%$!+;%oe/#F[^mFd]mFiclFd\\q7&FdhpFfhp7%$!+M@_j?F[^mF\\^mF\\jlFh\\q7 &FfhpFhhp7%Fi\\qFd]mFbjlF\\]q7&FhhpFjhp7%Fe\\qF_]mFgjlF`]q7&FjhpF\\ip7 %Fa\\qFj\\mF\\[mFb]q7&F\\ipF^ip7%F]\\qFe\\mFa[mFd]q7&F^ipF`ip7%Fi[qF` \\mFf[mFf]q7&F`ipFbip7%Fe[qF[\\mF[\\mFh]q7&FbipFdip7%Fa[qFf[mF`\\mFj]q 7&FdipFfip7%F][qF]^oFe\\mF\\^q7&FfipFhip7%FijpF\\[mFj\\mF^^q7&FhipFjip 7%FejpFgjlF_]mF`^q7&FjipF\\jp7%FajpFbjlFd]mFb^q7&F\\jpF^jp7%$!+vRUnmF \\bnF[[pF\\^mFd^q7&FeclF`jp7%F`dlFacoF[dlFecl7&F`jpFdjp7%F[elFcdnFfdlF j^q7&FdjpFhjp7%FfelFgcoFaelF\\_q7&FhjpF\\[q7%FaflFghnF\\flF^_q7&F\\[qF `[q7%F\\glF]doFgflF`_q7&F`[qFd[q7%FeglFi\\oF`glFb_q7&Fd[qFh[q7%F\\hlFc doFeflFd_q7&Fh[qF\\\\q7%FehlF]aoF`hlFf_q7&F\\\\qF`\\q7%F\\ilFidoF_elFh _q7&F`\\qFd\\q7%FidlF]eoFddlFj_q7&Fd\\qFh\\q7%FhilFaeoFiclF\\`q7&Fh\\q F\\]q7%FddlF_]mF\\jlF^`q7&F\\]qF`]q7%FhilFaeoFbjlF``q7&F`]qFb]q7%FidlF ]eoFgjlFb`q7&Fb]qFd]q7%F\\ilFidoF\\[mFd`q7&Fd]qFf]q7%FehlF]aoFa[mFf`q7 &Ff]qFh]q7%F\\hlFcdoFf[mFh`q7&Fh]qFj]q7%FeglFi\\oF[\\mFj`q7&Fj]qF\\^q7 %F\\glF]doF`\\mF\\aq7&F\\^qF^^q7%FaflFghnFe\\mF^aq7&F^^qF`^q7%FfelFgco Fj\\mF`aq7&F`^qFb^q7%F[elFcdnF_]mFbaq7&Fb^qFd^q7%F`dlFacoFd]mFdaq7&Fd^ qFf^q7%Fa^mF]goF\\^mFfaq7&FeclFj^q7%Fg^mF__oF[dlFecl7&Fj^qF\\_q7%FaflF [dnFfdlFjaq7&F\\_qF^_q7%F__mFe_oFaelF\\bq7&F^_qF`_q7%FidlF_hnF\\flF^bq 7&F`_qFb_q7%Fi_mF[`oFgflF`bq7&Fb_qFd_q7%F_`mFa\\oF`glFbbq7&Fd_qFf_q7%F e`mFa`oFeflFdbq7&Ff_qFh_q7%Fc_mFe`oF`hlFfbq7&Fh_qFj_q7%F_amFi`oF_elFhb q7&Fj_qF\\`q7%F_flF]aoFddlFjbq7&F\\`qF^`q7%FgamFaaoFiclF\\cq7&F^`qF``q 7%FjelFe\\mF\\jlF^cq7&F``qFb`q7%FgamFaaoFbjlF`cq7&Fb`qFd`q7%F_flF]aoFg jlFbcq7&Fd`qFf`q7%F_amFi`oF\\[mFdcq7&Ff`qFh`q7%Fc_mFe`oFa[mFfcq7&Fh`qF j`q7%Fe`mFa`oFf[mFhcq7&Fj`qF\\aq7%F_`mFa\\oF[\\mFjcq7&F\\aqF^aq7%Fi_mF [`oF`\\mF\\dq7&F^aqF`aq7%FidlF_hnFe\\mF^dq7&F`aqFbaq7%F__mFe_oFj\\mF`d q7&FbaqFdaq7%FaflF[dnF_]mFbdq7&FdaqFfaq7%Fg^mF__oFd]mFddq7&FfaqFhaq7%F \\jlF]coF\\^mFfdq7&FeclFjaq7%FgcmF[[oF[dlFecl7&FjaqF\\bq7%FeglFccnFfdl Fjdq7&F\\bqF^bq7%F]dmFa[oFaelF\\eq7&F^bqF`bq7%F_`mFggnF\\flF^eq7&F`bqF bbq7%FcdmFg[oFgflF`eq7&FbbqFdbq7%FjelF]^oF`glFbeq7&FdbqFfbq7%FidmF]\\o FeflFdeq7&FfbqFhbq7%F]`mFa\\oF`hlFfeq7&FhbqFjbq7%F_emFe\\oF_elFheq7&Fj bqF\\cq7%FcglFi\\oFddlFjeq7&F\\cqF^cq7%FeemF]]oFiclF\\fq7&F^cqF`cq7%F` glF[\\mF\\jlF^fq7&F`cqFbcq7%FeemF]]oFbjlF`fq7&FbcqFdcq7%FcglFi\\oFgjlF bfq7&FdcqFfcq7%F_emFe\\oF\\[mFdfq7&FfcqFhcq7%F]`mFa\\oFa[mFffq7&FhcqFj cq7%FidmF]\\oFf[mFhfq7&FjcqF\\dq7%FjelF]^oF[\\mFjfq7&F\\dqF^dq7%FcdmFg [oF`\\mF\\gq7&F^dqF`dq7%F_`mFggnFe\\mF^gq7&F`dqFbdq7%F]dmFa[oFj\\mF`gq 7&FbdqFddq7%FeglFccnF_]mFbgq7&FddqFfdq7%FgcmF[[oFd]mFdgq7&FfdqFhdq7%Fa gmF[_oF\\^mFfgq7&FeclFjdq7%Fe^mFgfnF[dlFecl7&FjdqF\\eq7%FehlF[cnFfdlFj gq7&F\\eqF^eq7%F]_mF]gnFaelF\\hq7&F^eqF`eq7%Fc_mFcdnF\\flF^hq7&F`eqFbe q7%Fg_mFcgnFgflF`hq7&FbeqFdeq7%F]`mFggnF`glFbhq7&FdeqFfeq7%Fc`mF[hnFef lFdhq7&FfeqFheq7%Fi`mF_hnF`hlFfhq7&FheqFjeq7%F]amFchnF_elFhhq7&FjeqF\\ fq7%FchlFghnFddlFjhq7&F\\fqF^fq7%FeamF[inFiclF\\iq7&F^fqF`fq7%F\\flF]^ oF\\jlF^iq7&F`fqFbfq7%FeamF[inFbjlF`iq7&FbfqFdfq7%FchlFghnFgjlFbiq7&Fd fqFffq7%F]amFchnF\\[mFdiq7&FffqFhfq7%Fi`mF_hnFa[mFfiq7&FhfqFjfq7%Fc`mF [hnFf[mFhiq7&FjfqF\\gq7%F]`mFggnF[\\mFjiq7&F\\gqF^gq7%Fg_mFcgnF`\\mF\\ jq7&F^gqF`gq7%Fc_mFcdnFe\\mF^jq7&F`gqFbgq7%F]_mF]gnFj\\mF`jq7&FbgqFdgq 7%FehlF[cnF_]mFbjq7&FdgqFfgq7%Fe^mFgfnFd]mFdjq7&FfgqFhgq7%FccmFgjnF\\^ mFfjq7&FeclFjgq7%F^dlF_bnF[dlFecl7&FjgqF\\hq7%FidlFcbnFfdlFjjq7&F\\hqF ^hq7%FdelFgbnFaelF\\[r7&F^hqF`hq7%F_flF[cnF\\flF^[r7&F`hqFbhq7%FjflF_c nFgflF`[r7&FbhqFdhq7%FcglFccnF`glFb[r7&FdhqFfhq7%FjglFgcnFeflFd[r7&Ffh qFhhq7%FchlF[dnF`hlFf[r7&FhhqFjhq7%FjhlF_dnF_elFh[r7&FjhqF\\iq7%FailFc dnFddlFj[r7&F\\iqF^iq7%FfilFgdnFiclF\\\\r7&F^iqF`iq7%FfdlFgjlF\\jlF^\\ r7&F`iqFbiq7%FfilFgdnFbjlF`\\r7&FbiqFdiq7%FailFcdnFgjlFb\\r7&FdiqFfiq7 %FjhlF_dnF\\[mFd\\r7&FfiqFhiq7%FchlF[dnFa[mFf\\r7&FhiqFjiq7%FjglFgcnFf [mFh\\r7&FjiqF\\jq7%FcglFccnF[\\mFj\\r7&F\\jqF^jq7%FjflF_cnF`\\mF\\]r7 &F^jqF`jq7%F_flF[cnFe\\mF^]r7&F`jqFbjq7%FdelFgbnFj\\mF`]r7&FbjqFdjq7%F idlFcbnF_]mFb]r7&FdjqFfjq7%F^dlF_bnFd]mFd]r7&FfjqFhjq7%F_^mFcfnF\\^mFf ]r7&FeclFjjq7%Ficl$!+p!zOw$F^jlF[dlFecl7&FjjqF\\[r7%Fddl$!+X0'HY(F^jlF fdlFj]r7&F\\[rF^[r7%F_el$!+q[X.6F[^mFaelF^^r7&F^[rF`[r7%FjelF[[pF\\flF b^r7&F`[rFb[r7%Fefl$!+2KMb " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5 3 0" 2 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas2.txt000066400000000000000000000020061307543307100176730ustar00rootroot00000000000000> restart: > N:=3; > G:=x[1]-sum(x[i]^2/i,i=2..N): N := 3 > Gu:=expand(subs(x[1]=1/2+1/10*u[1],seq(x[i]=1/5+1/10*u[i],i=2..N),G)): > L:=1/2*sum(u[i]^2,i=1..N)+lambda*Gu: > sol:=fsolve({seq(diff(L,u[i]),i=1..N),diff(L,lambda)},{seq(u[i],i=1..N > ),lambda}); sol := {u[2] = 1.423848987, u[1] = -4.158620876, u[3] = 0.7671756198, lambda = 41.58620876} > subs(sol,[seq(u[i],i=1..N),lambda]); [-4.158620876, 1.423848987, 0.7671756198, 41.58620876] > with(plots): > with(plottools): > p1:=implicitplot3d(-Gu,u[1]=-5..0,u[2]=-10..10,u[3]=-10..10,grid=[31,3 > 1,31],style=PATCHNOGRID,axes=framed,scaling=constrained): > p2:=pointplot3d([subs(sol,[seq(u[i],i=1..N)]),[seq(0,i=1..N)]],symbol= > circle,symbolsize=20,color=red): > p3:=spacecurve(subs(sol,[seq(u[i]*t,i=1..N)]),t=0..1,color=black): > p4:=sphere([seq(0,i=1..N)],sqrt(subs(sol,sum(u[i]^2,i=1..N)))): > display3d([p1,p2,p3,p4]); Warning, the name arrow has been redefined Warning, the name arrow has been redefined > openturns-1.9/validation/src/Cas3_eads.mws000066400000000000000000000026361307543307100206700ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 99 "restart:\nDigits:=20 :\nPdef:=int(int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x1=3/x2..infinity),x2=0. .infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%PdefG,&#\"\"\"\"\"%F '*&#\"\"$\"\")F'*&%#PiG!\"\"-%$SumG6$*.)F/,$*&\"\"#F'%$_k1GF'F'F',,-%$ PsiG6#,&#F'F7F'F8F'F'*&F7F'-F;6#,&F'F'F8F'F'F/-F;6#,&#F+F7F'F8F'F/*&F7 F'-%#lnG6#F+F'F'*&F7F'-FI6#F7F'F/F')F+F5F')F7,$*&F7F'F8F'F/F'F=F/-%&GA MMAGFA!\"#/F8;\"\"!%)infinityGF'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "evalf(2*Pdef);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" 3d!*oa@()H>)*!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "PHI:=pr oc(x)\n int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "-fsolve(PHI(x)=2*Pdef,x);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5&y_p)Hc>=LB!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas3_eads.txt000066400000000000000000000014131307543307100206710ustar00rootroot00000000000000> restart: > Digits:=20: > Pdef:=int(int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x1=3/x2..infinity),x2=0..in > finity); infinity ----- \ (2 _k1) Pdef := 1/4 + 3/8 ) (-1) (Psi(1/2 + _k1) / ----- _k1 = 0 - 2 Psi(1 + _k1) - Psi(3/2 + _k1) + 2 ln(3) - 2 ln(2)) (2 _k1) (-2 _k1) / 2 3 2 / ((1/2 + _k1) GAMMA(1 + _k1) )/Pi / > evalf(2*Pdef); 0.00981929872154689057 > PHI:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > -fsolve(PHI(x)=2*Pdef,x); 2.3331819562986952785 > openturns-1.9/validation/src/Cas4.mws000066400000000000000000000134711307543307100176740ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 104 "restart:\nDigits:=2 0:\nG:=1/2*(x1-x2)^2+(x1+x2)/sqrt(2)-3:\nwith(plots):\nimplicitplot(G, x1=-5..5,x2=-5..5);" }}{PARA 7 "" 1 "" {TEXT -1 50 "Warning, the name \+ changecoords has been redefined\n" }}{PARA 13 "" 1 "" {GLPLOT2D 404 404 404 {PLOTDATA 2 "6$-%'CURVESG6hq7$7$$!\"&\"\"!$!3Ph8v\"pO!o6!#<7$$ !3)\\MWl?6[*[F-$!3zacX$z)=06F-7$7$$!38'>.a. a!42[[ja$*)FBF=7$FD7$$!3P1DT'yViT%F-$!3mL\\(e8iv$yFB7$7$$!3;+++++++UF -$!3E1'[r5>\"4iFBFJ7$FP7$$!3[5**)e3!e'=%F-$!3P$*35T\"*>MhFB7$7$$!31FGS $)e5oTF-$!3y**************fFBFV7$Ffn7$$!3vn1GmjnPRF-$!3]?L>PjBBYFB7$7$ $!3%)*************z$F-$!3X\\R!*RAX'e$FBF\\o7$Fbo7$$!3'=fT#Q<>)p$F-$!3. ySeFdp7$7$$!3Y* ************R$F-F]q7$$!3ptKf!R.)4KF-$\"3P'ytKf!R.)*!#?7$7$$!\"$F*$\"36 `6R:X2A;FBFdq7$F[r7$$!3SX=-i>)\\(HF-$\"3$=X=-i>)\\.96`9&H(>F-$\"33IS6JX^HxFB7$7$$!3/+++++++=F-$\"3g'Q+puE'G*)FBFdu7 $7$$!3%)*************z\"F-$\"3r(Q+puE'G*)FB7$$!3B\"4JNY%=EO>Z\"F-$\"3 &>=c')>O>2\"F-7$7$$!3#**************R\"F-$\"3Sy#Q-A6=7\"F-Faw7$7$F+F(7 $$!3-bcX$z)=06F-F/7$7$F7F5F^x7$Fgw7$$!3ELLLLLL37F-$\"3ELLLLLL37F-7$7$F 7$\"3gF)HEh%)RM\"F-Fdx7$7$F7F;7$$!3_mTpJDD+%*FBF>7$7$FGFEF_y7$Fcy7$FMF K7$7$FSFQFey7$Fgy7$FYFW7$7$FinFgnFiy7$Fjx7$$!3#>X8)=K*Gf*FB$\"35X8)=K* Gf8F-7$7$$!3BFFcJR@4*)FB$\"3#**************R\"F-F]z7$7$Fdz$\"3o******* ******R\"F-7$$!3,adNJ?#[!pFB$\"3Mvb8.A[!\\\"F-7$7$Fin$\"3bC$e3`(R\\:F- F\\[l7$F[z7$F_oF]o7$7$FeoFcoFf[l7$Fh[l7$F[p$!3I#fT#Q<>)p$F-7$7$FapF_pF j[l7$7$Fin$\"3xC$e3`(R\\:F-7$$!3Ad.Wc'z'yTFB$\"3zNSklz'yh\"F-7$7$Fap$ \"3Hp>U;1gZ)\\)\\(HF-7$7 $FjrFhrFh]l7$Fi\\l7$$!3Dis1%4m%*e\"FB$\"3KEnS4m%*e#>F-F__l7$F^^l7$F`sF^s7$7$FfsFdsFi_l7$F[`l7 $$\"3BTimvqmRZFB$!3&QimvqmRZ#F-7$7$FbtF`tF]`l7$7$Fjr$\"3D6k]by'>#>F-7$ $\"3j1\"**)e3IyTFB$\"3q*35T\"*p@)>F-7$7$Fbt$\"31'Hkf*flw?F-Fh`l7$7$Fbt Fft7$F[uFit7$7$FauF_uFcal7$Feal7$FguFeu7$7$F]vF[vFgal7$7$FcvFav7$$\"3% =\"4JNY%=E*FBFfv7$7$F^wF\\wF\\bl7$F^al7$$\"3B)QwrW7H3(FB$\"3AhBGb(3<4# F-7$7$$\"3Jk72+T#4v*FB$\"3;+++++++AF-Fbbl7$Fhbl7$$\"3Sua'=\"y1Y**FB$\" 3=_M\")=KR0AF-7$7$F^w$\"3qub)*>0>3AF-F^cl7$F`bl7$FdwFbw7$7$FjwFhwFhcl7 $Fjcl7$FgxFex7$7$F[yF7F\\dl7$F^dl7$F`zF^z7$7$FfzFdzF`dl7$Fdcl7$$\"3jaJ 60N*RM\"F-$\"3YXo)[\\1gD#F-7$7$Ffz$\"3F-$\"331\"**)e3IyTFB7$7$F_alFbtFggl7$F]hl7$FeblFcbl7$7$F[c lFiblF_hl7$7$F[cl$\"3%[\">^y!z0)>F-7$FdhlF[cl7$FfhlFifl7$Fahl7$$\"3j_M \")=KR0AF-$\"3^va'=\"y1Y**FB7$7$FeclF^wFihl7$F_il7$FgdlFedl7$7$F[elFfz Fail7$7$FaflF_fl7$Fffl$\"3(*oj'H&pwU " 0 "" {MPLTEXT 1 0 182 "\nsolve(G,x2);\nPdef:=1-int(int(1/(2*Pi)*exp(-( x1^2+x2^2)/2),x2=-1/2*2^(1/2)+x1-1/2*(26-8*2^(1/2)*x1)^(1/2)..-1/2*2^( 1/2)+x1+1/2*(26-8*2^(1/2)*x1)^(1/2)),x1=-infinity..26/(8*sqrt(2)));" } }{PARA 11 "" 1 "" {XPPMATH 20 "6$,(*&\"\"#!\"\"F%#\"\"\"F%F&%#x1GF(*&F %F&,&\"#EF(*(\"\")F(F%F'F)F(F&F'F(,(*&F%F&F%F'F&F)F(*&F%F&F+F'F&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%PdefG,&\"\"\"F&-%$intG6$,$*&#F&\"\" %F&**-%$expG6#,$*&\"\"#!\"\"%#x1GF4F5F&F4#F&F4,&-%$erfG6#,(#F&F4F5*(F4 F5F4F7F6F&F&*(F-F5F4F7,&\"#EF&*(\"\")F&F4F7F6F&F5F7F&F&-F:6#,(#F&F4F5* (F4F5F4F7F6F&F&*(F-F5F4F7F@F7F5F5F&%#PiG#F5F4F&F&/F6;,$%)infinityGF5,$ *(\"#8F&FCF5F4F7F&F5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Pde f_num:=evalf(Pdef);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)Pdef_numG$\" 54]xfvJpjX5!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "PHI:=proc (x)\n int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "-fsolve(PHI(x)=Pdef_num,x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5`nxU(G^ofD\"!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "1-7.1529e-3/9.81929e-3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5( [Az#\\(4har#!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 2 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas4.txt000066400000000000000000000033561307543307100177060ustar00rootroot00000000000000> restart: > Digits:=20: > G:=1/2*(x1-x2)^2+(x1+x2)/sqrt(2)-3: > with(plots): > implicitplot(G,x1=-5..5,x2=-5..5); Warning, the name changecoords has been redefined > > solve(G,x2); > Pdef:=1-int(int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=-1/2*2^(1/2)+x1-1/2*(2 > 6-8*2^(1/2)*x1)^(1/2)..-1/2*2^(1/2)+x1+1/2*(26-8*2^(1/2)*x1)^(1/2)),x1 > =-infinity..26/(8*sqrt(2))); 1/2 1/2 1/2 2 (26 - 8 2 x1) - ---- + x1 + -------------------, 2 2 1/2 1/2 1/2 2 (26 - 8 2 x1) - ---- + x1 - ------------------- 2 2 1/2 13 2 ------- 8 / 2 / | x1 1/2 | Pdef := 1 - | 1/4 exp(- ---) 2 | | 2 \ / -infinity 1/2 1/2 1/2 1/2 2 x1 2 (26 - 8 2 x1) erf(- 1/2 + ------- + ------------------------) 2 4 1/2 1/2 1/2 1/2 \ 2 x1 2 (26 - 8 2 x1) | / 1/2 - erf(- 1/2 + ------- - ------------------------)| / Pi 2 4 / / dx1 > Pdef_num:=evalf(Pdef); Pdef_num := 0.10456369317559775009 > PHI:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > -fsolve(PHI(x)=Pdef_num,x); 1.2559685128742776753 > > 1-7.1529e-3/9.81929e-3; 0.27154610974927922487 > openturns-1.9/validation/src/Cas5.mws000066400000000000000000000524131307543307100176740ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 404 "restart:\nDigits:=2 0:\nG1:=2-x2+exp(-0.1*x1^2)+(0.2*x1)^4:\nG2:=4.5-x1*x2;\nG:=min(G1,G2) ;\nwith(plots):\np1:=implicitplot(G1,x1=-5..5,x2=-5..5,grid=[101,101]) :\np2:=implicitplot(G2,x1=-5..5,x2=-5..5,grid=[101,101],color=blue):\n p3:=implicitplot(G=0,x1=-5..5,x2=-5..5,grid=[101,101],color=green,thic kness=4):\nwith(plottools):\nc := circle([0,0], 3, color=magenta):\ndi splay([p1,p2,p3,c]);\nevalf(subs(x1=0,x2=0,G));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G2G,&$\"#X!\"\"\"\"\"*&%#x1GF)%#x2GF)F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GG-%$minG6$,*\"\"#\"\"\"%#x2G!\"\"-%$expG6# ,$*&$F*F,F*)%#x1GF)F*F,F**&$\"#;!\"%F*)F4\"\"%F*F*,&$\"#XF,F**&F4F*F+F *F," }}{PARA 7 "" 1 "" {TEXT -1 50 "Warning, the name changecoords has been redefined\n" }}{PARA 7 "" 1 "" {TEXT -1 43 "Warning, the name ar row has been redefined\n" }}{PARA 13 "" 1 "" {GLPLOT2D 404 404 404 {PLOTDATA 2 "6'-%'CURVESG6fx7$7$$!\"&\"\"!$\"3<**Qi)*\\3#3$!#<7$$!3V9; (\\BU?%\\F-$\"339;(\\BU?/$F-7$7$$!3O+++++++\\F-$\"3:%)*z1W&*H,$F-F.7$7 $$!3%)*************z%F-$\"3>..Np^?\\HF-7$$!3_^_Bkyiz[F-$\"\"$F*7$7$$!3 T__Bkyiz[F-FBF47$7$$!3;+++++++ZF-$\"3CRE.k$f0*GF-7$$!3ABCLRCXF-$\"3%)********** ***z#F-7$7$$!3omkeZ>RCXF-Fho7$F[o$\"3Z\\,cwc!p$GF-7$7$Fao$\"3sHy=VQ4)y #F-7$$!3h%ys^*QpyWF-$\"3([ys^*QpyFF-7$7$$!3O+++++++WF-$\"32)yUnFvRu#F- Fep7$7$F\\q$\"3_)yUnFvRu#F-7$$!36D**fTeG2VF-$\"3ZD**fTeG2FF-7$7$$!3%)* ************H%F-$\"3OPZ7UES/FF-Fdq7$7$$!3;+++++++UF-$\"3SdL*)=%H#pEF-7 $$!3gT]@sH[(G%F-$\"3;+++++++FF-7$Fer7$$!3s+++++++VF-F]r7$F`r7$$!3UzN'G ica:%F-$\"3UzN'Gical#F-7$7$$!3k*************4%F-$\"30/$>_X4$QEF-F_s7$F es7$$!3'e&z%>S3d,%F-$\"3%o&z%>S3dh#F-7$7$$!\"%F*$\"3VbY*z^'\\6EF-F[t7$ 7$$!3#***************QF-$\"3!Gw%QWQk)e#F-7$$!3^`tC(*Gp\\RF-$\"33++++++ +EF-7$F\\uFat7$7$Fht$\"3DjZQWQk)e#F-7$$!3*4ICI5tf)QF-$\"3<,V-.J(fe#F-7 $7$$!3%)*************z$F-$\"3^eZa+PgpDF-Ffu7$F\\v7$$!3sT0$3W!3kPF-$\"3 aT0$3W!3kDF-7$7$$!3s*************p$F-$\"3_%>3O&pAaDF-Fbv7$7$$!3;++++++ +PF-$\"3'\\>3O&pAaDF-7$$!3o[l.m_1[OF-$\"3f[l.m_1[DF-7$7$$!33+++++++OF- $\"3<3/PjEOUDF-Fcw7$Fiw7$$!3vNtNe\\+PNF-$\"3vNtNe\\+PDF-7$7$$!3+++++++ +NF-$\"3vKNK+x&Q`#F-F_x7$Fex7$$!3NA@=0]:IMF-$\"3)G7#=0]:IDF-7$7$$!3#** ************R$F-$\"3x\"yUoRc&GDF-F[y7$7$$!3O+++++++MF-$\"3A#yUoRc&GDF- 7$$!3A\"o=*4t!pK$F-$\"3S\"o=*4t!p_#F-7$7$$!3%)*************H$F-$\"3FPZ OQ-IEDF-F\\z7$Fbz7$$!3\\e>v?(fnA$F-$\"3Ke>v?(fn_#F-7$7$$!3;+++++++KF-$ \"3k/%H8gFp_#F-Fhz7$F^[l7$$!3)[*\\$QS$HHJF-$\"3z%*\\$QS$HHDF-7$7$$!33+ ++++++JF-$\"3K!yrWat-`#F-Fd[l7$7$$!3_+++++++JF-$\"3x!yrWat-`#F-7$$!34@ Lr%zbT.$F-$\"3k?Lr%zbT`#F-7$7$$!\"$F*$\"3;*fS(f'ph`#F-Fe\\l7$F[]l7$$!3 zc<8xv/THF-$\"3Ld<8xv/TDF-7$7$$!3#***************GF-$\"3#*y*)o))RWWDF- Fa]l7$7$Fh]l$\"3[y*)o))RWWDF-7$$!3.F^:4Er\\GF-$\"3lF^:4Er\\DF-7$7$$!3% )*************z#F-$\"3\"[JB'45#\\b#F-F`^l7$Ff^l7$$!3?w%pA.I*fFF-$\"3Yw %pA.I*fDF-7$7$$!3;+++++++FF-$\"3FE^6+0mA:EF-F]bl7$Fcbl7$$!3m!>BD'pgGBF-$\"3$4>BD'pgGEF-7$7$$! 3%)*************H#F-$\"3.W'[!H%oRj#F-Fibl7$F_cl7$$!3qtC,kO*[C#F-$\"31u C,kO*[k#F-7$7$$!3;+++++++AF-$\"3B!H7>;%z`EF-Fecl7$7$F\\dl$\"3z*G7>;%z` EF-7$$!3QF-$\"3_NP9:Ll'p#F-7$7$$!33;&)oT)y8)>F-FhrF\\f l7$7$Fcfl$\"3s*************p#F-7$$!3(z'G***zDY\">F-$\"3znG***zDYr#F-7$ 7$$!3#***************=F-$\"3#G(oYe.$yr#F-Fifl7$F_gl7$$!3>]3n%*owK=F-$ \"35]3n%*owKFF-7$7$$!3%)*************z\"F-$\"3wU)zBSY+u#F-Fegl7$F[hl7$ $!3Bp\\$)Q**)4v\"F-$\"3Xp\\$)Q**)4v#F-7$7$$!3'**************p\"F-$\"3; pESlbPiFF-Fahl7$Fghl7$$!3!4r45\"RAp;F-$\"3b5(45\"RApFF-7$7$$!33+++++++ ;F-$\"3H[AzGxi%y#F-F]il7$Fcil7$$!3$yKC))e)R(e\"F-$\"3cFV#))e)R(y#F-7$7 $$!3=U*QRY*3I:F-FhoFiil7$7$$!3'>%*QRY*3I:F-Fho7$$!3&\\e@=kBa]\"F-$\"3* \\e@=kBa!GF-7$7$$!3++++++++:F-$\"3$oPf(=ih1GF-Ffjl7$F\\[m7$$!3*zJVU%y; B9F-$\"3o\"F-$\"3$\\?f!3b?pGF-F]]m7$7$Fd]m$\"3\\/#f!3b?pGF-7$$! 3jS-Y5%fT<\"F-$\"3fS-Y5%fT(GF-7$7$$!33+++++++6F-$\"3WvGf>lP))GF-F\\^m7 $Fb^m7$$!3?')[$Rna,4\"F-$\"3W')[$Rna,*GF-7$7$$!3I(\\!*\\%GkN5F-FQFh^m7 $F^_m7$$!39wk(\\i_a+\"F-$\"3$eZw\\i_a!HF-7$7$$!\"\"F*$\"3cff.=uV1HF-Fb _m7$Fh_m7$$!3%[lvO(=**)>*!#=$\"3/lvO(=**)>HF-7$7$$!3C+++++++!*Fa`m$\"3 <3YW^MCBHF-F^`m7$Fe`m7$$!3DnyA.F'\\L)Fa`m$\"3E'yA.F'\\LHF-7$7$$!3W++++ +++!)Fa`m$\"3CH2`f.mQHF-F[am7$Faam7$$!35Z`.&)Q[huFa`m$\"3AMN])Q[h%HF-7 $7$$!3c**************pFa`m$\"320&)p*GlD&HF-Fgam7$F]bm7$$!3O)Q5['3axlFa `m$\"3xQ5['3ax&HF-7$7$$!3o)*************fFa`m$\"3_AJ[`w%['HF-Fcbm7$7$$ !3y**************fFa`m$\"3'H7$[`w%['HF-7$$!3an>b`$e?o&Fa`m$\"3y'>b`$e? oHF-7$7$$!3++++++++]Fa`m$\"3$GLG?\"*4a(HF-Fdcm7$Fjcm7$$!3^W5@Y;!Rx%Fa` m$\"3^/6ik,RxHF-7$7$$!3C+++++++SFa`m$\"37&Gb+GoT)HF-F`dm7$Ffdm7$$!3[q6 O))3)=&QFa`m$\"34F a`m$\"3!Q56]PEh*HF-7$7$$!3/+++++++5Fa`m$\"3;vL$)f1+**HF-Fgfm7$F]gm7$$! 3&pbPEya5!**!#>$\"3cvj#ya5!**HF-7$7$$F*F*FBFcgm7$7$$\"3/+++++++5Fa`mF` gmFjgm7$F]hm7$$\"3`UfnD9I55Fa`m$\"3u0CVd)p*)*HF-7$7$$\"37+++++++?Fa`mF afmFahm7$7$FhhmFefm7$$\"3/\">?6Jv>/#Fa`m$\"3w!)z))oC!e*HF-7$7$$\"3))** ************HFa`mFeemF\\im7$Fbim7$$\"3gTz03>3'4$Fa`m$\"3o0U>4=R!*HF-7$ 7$$\"3C+++++++SFa`mFidmFfim7$F\\jm7$$\"3#Qj\"y7U^tTFa`m$\"3UO=sy&[E)HF -7$7$$\"3++++++++]Fa`mF]dmF`jm7$Ffjm7$$\"3?Q*HB%3%\\F&Fa`m$\"3=1qw:f]s HF-7$7$$\"3o)*************fFa`mF\\cmFjjm7$7$$\"3y**************fFa`mFb cm7$$\"3+NMDVVu+kFa`m$\"3fcYnlb#*fHF-7$7$$\"3c**************pFa`mF`bmF g[n7$F]\\n7$$\"3_VT\"eLd4b(Fa`m$\"3;&e=kE/\\%HF-7$7$$\"3W+++++++!)Fa`m FdamFa\\n7$Fg\\n7$$\"3*of8(*y*>D()Fa`m$\"3CS'G5-![FHF-7$7$$\"3C+++++++ !*Fa`mFh`mF[]n7$Fa]n7$$\"39d>#ed@E#**Fa`m$\"3U/yTUyt2HF-7$7$$\"\"\"F*F [`mFe]n7$7$$\"33+++++++6F-Fe^m7$$\"3I(\\!*\\%GkN5F-FQ7$Fb^nF[^n7$F_^n7 $$\"3RQnMO.Q96F-$\"3RhKlj'>c)GF-7$7$$\"3'**************>\"F-Ff]mFg^n7$ 7$F^_nFj]m7$$\"3*yYL\\Ca&Q7F-$\"3wJl1bdWhGF-7$7$$\"3/+++++++8F-Fg\\mFb _n7$7$Fi_nF[]m7$$\"3D*fSR2#Rk8F-$\"3E+%fg#zgNGF-7$7$$\"3#************* *R\"F-F[\\mF]`n7$Fc`n7$$\"3K3:7Arc\"\\\"F-$\"3]\"\\yy(GV3GF-7$7$$\"3++ ++++++:F-F_[mFg`n7$7$$\"33+++++++;F-Ffil7$$\"3'>%*QRY*3I:F-Fho7$7$$\"3 =U*QRY*3I:F-FhoF]an7$Faan7$$\"3MNs1g>x>;F-$\"3![wK*R!G-y#F-7$7$$\"3'** ************p\"F-FjhlF\\bn7$Fbbn7$$\"3hZ,*p(3W[F-Fgfl7$7$F^dnFhrFfcn7$Fjcn7$$\"3Z*G!om9>0?F-$\"3q5(>L`3[p#F-7$7$$ \"33+++++++@F-F]elFcdn7$Fidn7$$\"3]pDPk/:K@F-$\"3wIuiN&\\ym#F-7$7$$\"3 ;+++++++AF-F^dlF]en7$7$FdenFbdl7$$\"3F9f4c?bmt?P$F-$\"3>3)zWLEz_#F-7$7$$\"3#**************R$F-FdyFa\\o7$7$$ \"3O+++++++MF-Fjy7$$\"33nYXOo%yY$F-$\"3\\K`ajJ:KDF-7$7$$\"3++++++++NF- FhxF^]o7$Fd]o7$$\"3:Gk]cy&4c$F-$\"3$>d$\\V@/RDF-7$7$$\"33+++++++OF-F\\ xFh]o7$F^^o7$$\"3D-PXRV_^OF-$\"3[(HY0mv%[DF-7$7$$\"3s*************p$F- F[wFb^o7$7$$\"3;+++++++PF-Faw7$$\"31Zr%*yEnRPF-$\"3x_G0@tKgDF-7$7$$\"3 %)*************z$F-F_vF__o7$Fe_o7$$\"3ooy*[\\Mb#QF-$\"3CJ@50bYuDF-7$7$ $\"3#***************QF-FjtFi_o7$7$F``oFdu7$$\"3![wT(=PC4RF-$\"3?N#e7Gc 2f#F-7$7$$\"3^`tC(*Gp\\RF-F_uFd`o7$Fj`o7$$\"3;OOlG?k!*RF-$\"3%ROY8(zN4 EF-7$7$$\"\"%F*FdtF^ao7$Fdao7$$\"3g:%3\"y0zpSF-$\"3e%e\"*=U4-j#F-7$7$$ \"3k*************4%F-FhsFhao7$F^bo7$$\"3&*=!\\!337ZTF-$\"3K\")4&>>zGl# F-7$7$$\"3;+++++++UF-FcrFbbo7$Fhbo7$$\"3#>T%*R\"QwAUF-$\"3*ze0g=Osn#F- 7$7$$\"3gT]@sH[(G%F-FhrF\\co7$Fbco7$$\"3!)[)HG'Hu'H%F-$\"3?^,z#F-7$7$$\"3omkeZ>RCXF-FhoFieo7$7$$\"3dnkeZ>RCXF-Fh o7$$\"38UwDq(*>vXF-$\"3MdBuH-![#GF-7$7$$\"3k*************f%F-F]oFffo7$ 7$F]goF_p7$$\"3;5.%4oi5k%F-$\"3&*)of!>t$*eGF-7$7$$\"3;+++++++ZF-FLFago 7$Fggo7$$\"3&4h_Iw]fq%F-$\"3o)QZpB\\S*GF-7$7$$\"3ABCLMz+$ F-7$7$$\"3O+++++++\\F-F7F_jo7$Fejo7$$\"3un4\"F-7$7$Ffs$!3=c(4c(4c(4 \"F-F]`p7$7$Fbt$!3+++++++D6F-7$$!3%**3444444%F-Fc^m7$Fj`pFc`p7$Fg`p7$$ !3U9dG9dGkRF-$!3!fG9dG9d8\"F-7$7$$!3Y**************QF-$!3v`h%Q:YQ:\"F- F_ap7$7$FhtFhap7$$!3(>AAAAAA#QF-$!3\"yxxxxxx<\"F-7$7$F]v$!3P*y:j_5U=\" F-F\\bp7$7$F_w$!3B;i@;i@;7F-7$$!3+++++++]PF-Fd]m7$FibpFbbp7$Ffbp7$$!3E ++++++vOF-$!3()***********\\A\"F-7$7$Fjw$!3+++++++]7F-F^cp7$Fdcp7$$!3E #yM/8R<_$F-$!3M<_cp3Ey7F-7$7$Ffx$!3f&G9dG9dG\"F-Fhcp7$7$$!3Y********** ***R$F-$!3%eqkF-7$$ !3wy:j_5UoBF-F`gl7$F\\[qFejp7$7$F\\dl$!3TXXXXXXX?F-7$$!3+++++++]AF-Fge l7$Fd[q7$F`cl$!3\"[VI\"R<_c>F-7$7$F[el$!3!G9dG9dG9#F-7$F]\\qF[el7$F_\\ qFa[q7$7$FgelFe[q7$Fb[qF\\dl7$Fc\\qF\\\\q7$7$F`glF][q7$FjjpF`cl7$7$Fi[ qF`clFb\\q7$7$FbjpF[al7$FfjpFdbl7$F\\]qFf\\q7$7$FgipFeip7$FbipF_`l7$F` ]qF[]q7$7$FdilF]hp7$FjgpFhgp7$7$FehpFg^l7$Fjhp$!3I\"======y#F-7$7$F^ip Fc_lFg]q7$7$F^jpFc_l7$FhhlF[jp7$7$F][mF\\]l7$FdgpFh]l7$Fa^q7$FdilFahp7 $7$Fi[mF`fp7$F]fpF_[l7$Ff^q7$FjfpFhfp7$7$F^gpF[\\lFh^q7$Fj^qF`^q7$7$Fe \\mFhdp7$FedpFcdp7$7$F`epFby7$$!33++++++S8F-$!3()************fLF-7$7$F iepFczFa_q7$7$FdfpFczFe^q7$7$Fd]mFjbp7$FgbpF_w7$F\\`q7$FacpF_cp7$7$Fec pFjwF^`q7$F``q7$$!3c<_cp3Ey7F-$!3r#yM/8R<_$F-7$7$F_dpFfxFb`q7$7$F\\epF fxF]_q7$7$Fc^mF[ap7$Fh`pFbt7$F]aq7$$!3o&G9dG9d8\"F-$!3(Rr&G9dGkRF-7$7$ FhapFfapF_aq7$7$FhapFht7$$!3exxxxxxx6F-F]bp7$7$FcbpF]vFhaq7$F\\bqF[`q7 $7$Fi_mFao7$Fe^pF\\q7$F`bq7$F[_pFi^p7$7$F__pF\\sFbbq7$7$F__pF[r7$Ff_pF d_p7$7$Fj_pFarFgbq7$Fibq7$$!3+(Q[N>un4\"F-F^`p7$7$Fd`pFfsF[cq7$F_cqF\\ aq7$7$Ff`mF(7$Fj[pF57$Fccq7$Fa\\pF_\\p7$7$Fe\\pF;Fecq7$Fgcq7$F[]p$!3@p t%*y:j_ZF-7$7$F_]pFJFicq7$7$Fc]pFJ7$Fh]pFf]p7$7$F\\^pF[oF`dq7$7$Fa^pF[ oF_bq7$7$F\\^nFeeo7$$\"3&H<_cp3Ey*Fa`mF]go7$7$$\"31u@l&p3Ey*Fa`mF]go7$ $\"3FI(H(H(H(H(*Fa`m$\"3%o-Fq-Fqi%F-7$7$$\"3[$Q1^3oWd*Fa`mFhgoF^eq7$7$ $\"3P#Q1^3oWd*Fa`mFhgo7$$\"3Q;j_5Uot%*Fa`m$\"3Kot%*y:j_ZF-7$7$$\"3++++ +++v$*Fa`mF\\ioF[fq7$Fafq7$$\"3GJ#p2Bp2B*Fa`m$\"3OxI#p2Bp([F-7$7$$\"3J bxQpMn$=*Fa`mFfjoFefq7$F[gq7$Fb]nF`[p7$7$F`^n$\"3%**3444444%F-7$$\"3=c (4c(4c(4\"F-F_bo7$Fdgq7$$\"3C(Q[N>un4\"F-$\"3G7;X1eA.TF-7$7$$\"3ir&G9d G92\"F-FiboFhgq7$F^hq7$$\"3++++++]i5F-$\"3$)**********\\PUF-7$7$$\"3$o (p!zi6l/\"F-F]doFbhq7$7$FihqFado7$$\"3GIIIIIII5F-$\"33qppppppVF-7$7$$ \"3rssssssA5F-FjdoF]iq7$FciqFfdq7$7$F^_n$\"3+++++++]PF-7$$\"3P*y:j_5U= \"F-Ff_o7$F[jq7$$\"3\"yxxxxxx<\"F-$\"3(>AAAAAA#QF-7$7$$\"3v`h%Q:YQ:\"F -F``oF_jq7$7$Ffjq$\"3Y**************QF-7$$\"3!fG9dG9d8\"F-$\"3U9dG9dGk RF-7$7$$\"3+++++++D6F-FeaoF\\[r7$Fb[rFagq7$7$Fi_n$\"3nh%Q:YQ:Y$F-7$$\" 3\"eG9dG9dG\"F-Fe]o7$7$$\"3f&G9dG9dG\"F-Fe]o7$$\"3M<_cp3Ey7F-$\"3E#yM/ 8R<_$F-7$7$$\"3+++++++]7F-F_^oFa\\r7$Fg\\r7$$\"3()***********\\A\"F-$ \"3E++++++vOF-7$7$$\"3B;i@;i@;7F-F]_oF[]r7$Fa]rFhiq7$7$Fd`n$\"3T9dG9dG 9KF-7$$\"3vjjjjjjj8F-F^\\o7$7$$\"3`jjjjjjj8F-F^\\o7$$\"3')************ R8F-$\"3K++++++gLF-7$7$$\"321Zw6%HNK\"F-Fh\\oF`^r7$7$$\"3%eqkF-F_fn7$7$$\"3fM/8R<_c>F-F_fnFbcr7$7$Fjdn$\"3!G9dG9d G9#F-7$$\"3TXXXXXXX?F-Fden7$FhdrFjcr7$7$FdenFidr7$FfdrFjdn7$F^erFedr7$ 7$F_fnF^dr7$F[drF[dn7$FberF]er7$7$FifnFfcr7$FccrFgcn7$Ffer7$F_fnFbdr7$ 7$F]gnFfbrFeer7$7$F_uFibrFjer7$7$FhrF\\ar7$Fi`rFcbn7$7$F_crF]crF\\fr7$ 7$FhrF`ar7$$\"3I\"======y#F-Fcar7$7$FhoFiarFdfr7$7$FQFd`r7$Fa`rFban7$7 $FbbrFban7$F_brF]br7$7$FBF^anFjfr7$7$FgjnFb_rF`gr7$Fbgr7$Fh_rFf_r7$7$F d[oF\\`rFdgr7$7$F^\\oFj]r7$Fg]rFd`n7$FigrFfgr7$7$F^\\oF^^r7$$\"3()**** ********fLF-$\"33++++++S8F-7$7$Fh\\oFg^rF]hr7$7$Fe]oF[\\r7$Fh[rFi_n7$F fhr7$F]_rF[_r7$7$Fe]oF_\\r7$$\"3r#yM/8R<_$F-$\"3c<_cp3Ey7F-7$7$F_^oFh \\rF[ir7$Fair7$F^]rF\\]r7$7$F]_oFb]rFcir7$7$Ff_oF\\jq7$FiiqF^_n7$FhirF eir7$Fgir7$Fbjq$\"3exxxxxxx6F-7$7$F``oFfjqF[jr7$7$FjjqFfjq7$$\"3(Rr&G9 dGkRF-$\"3o&G9dG9d8\"F-7$7$FeaoFc[rFbjr7$7$F_boFegq7$FbgqF`^n7$F[[sFhj r7$Fjjr7$F[hq$\"3+(Q[N>un4\"F-7$7$FiboF_hqF^[s7$Fb[s7$FehqFchq7$7$F]do FihqFd[s7$7$FadoFihq7$F`iqF^iq7$7$FjdoFdiqFi[s7$7$FeeoF\\^nF[\\s7$7$F] goFhdqF]\\s7$7$F]goF\\eq7$FaeqF_eq7$7$FhgoFeeqFb\\s7$7$FhgoFieq7$$\"3@ pt%*y:j_ZF-F\\fq7$7$F\\ioFbfqFg\\s7$F[]s7$FhfqFffq7$7$FfjoF\\gqF]]s7$7 $F`[pFb]nF_]s-Fc[p6&Fe[pF[hmF[hm$\"*++++\"!\")-F$6[^lFh[pF&F3F]\\pFc\\ pF9FDFg\\pF]]pFHFSFa]pFj]pFYFinF^^pF_oFjoFc^pFapFjpFg^pF]_pF`qFiqFa_pF h_pF_rFjrF\\`pFb`pF^sFdsFf`pF]apFjsF`tF^apFdapFftFauFjapFabpFbuF[vFebp F\\cpFavFgvF]cpFccpF]wFhwFgcpF]dpF^xFdxFadpFjdpFjxF`yF^epFgepFfyFazF[f pFbfpFgzF][lFffpF\\gpFc[lFi[lF`gpF_\\lFj\\lFbgpF`]lFf]lFfgpF_hpF\\^lFe ^lFchpF\\ipF[_lFa_lF`ipFiipFg_lF]`lF`jpFc`lFi`lFdjpF_alFealFialFbblFhj pF_[qFhblF^clF`[qFg[qFdclFjclF[\\qF`\\qF`dlFidlFa\\qFd\\qF_elFeelFe\\q Fh\\qF[flFaflFeflF^glFj\\qF]]qFdglFjglF^]qFa]qF`hlFfhlFb]qFe]qFj]qF\\^ qF\\ilFbilF_^qFb^qFhilF^jlFbjlF[[mFd^qFg^qFi^qF[_qFa[mFg[mF\\_qF__qFf_ qFh_qF]\\mFc\\mFj_qF]`qF_`qFa`qFg`qFi`qFi\\mFb]mF[aqF^aqFdaqFfaqF[bqF] bqFh]mFa^mF^bqFabqFcbqFebqFhbqFjbqF^cqF`cqFg^mF]_mFa_mFg_mFacqFdcqFfcq FhcqF\\dqF^dqFadqFcdqF]`mFd`mFj`mF`amFfamF\\bmFbbmFhbmF^cmFicmF_dmFedm F[emFaemFgemF]fmFcfmF\\gmFbgmFigmF\\hmF`hmFfhmFjhmFaimFeimF[jmF_jmFejm FijmF_[nFc[nF\\\\nF`\\nFf\\nFj\\nF`]nFd]nFj]nF^^nFe^nFf^nF\\_nF`_nFg_n F[`nFb`nFf`nF\\anF`anFgan7$Fh`r7$$\"3W*=(>$zh%[;F-Fhr7$Fj]sFaanFdbrF[c rFacrFhcrFicrF`drFddrF[erF\\erF_erF`erFcerFderFgerFierF[frF]frF`frFbfr FgfrFifrF\\grF_grFagrFcgrFegrFggrFjgrF[hrFbhrFdhrFghrFihrF`irFbirFdirF firFiirFjirF^jrF`jrFgjrFijrF\\[sF][sFa[sFc[sFe[sFg[sFj[sF\\\\sF^\\sF` \\sFc\\sFe\\sFj\\sF\\]sF^]sF`]s-Fc[p6&Fe[pF[hmFd]sF[hm-%*THICKNESSG6#F fao-F$6$7U7$FBF[hm7$$\"5K\\LM%R5Wj(HFfgm$\"56OF\"Hp+(**fP!#?7$$\"5&eL* eQ$[\\d!HFfgm$\"5vkVc%\\h'pguF\\_s7$$\"55@aZmd%H$*y#Ffgm$\"5v(Q.a!eOP/ 6Ffgm7$$\"5>w!fJ,/?*GEFfgm$\"5]#e90B-h_W\"Ffgm7$$\"5BFU[7$)40FCFfgm$\" 5vQ>u(ovbLw\"Ffgm7$$\"5%pXBkA)e!p=#Ffgm$\"57-mgy<8k`?Ffgm7$$\"508pgCp> F7>Ffgm$\"5CpntKG(R:J#Ffgm7$$\"5[&)*)p$\\Q![2;Ffgm$\"5cBXg]wP)H`#Ffgm7 $$\"5k%z@&puyLx7Ffgm$\"5Kee!)Rd6[9FFfgm7$$\"5FsA%[7$)40F*F\\_s$\"5krga ))[&pJ&GFfgm7$$\"5r\"*QF7>Ffgm$\"5ApntKG(R:J#Ffgm 7$$!5%pXBkA)e!p=#Ffgm$\"58-mgy<8k`?Ffgm7$$!5CFU[7$)40FCFfgm$\"5uQ>u(ov bLw\"Ffgm7$$!5?w!fJ,/?*GEFfgm$\"5Z#e90B-h_W\"Ffgm7$$!54@aZmd%H$*y#Ffgm $\"5w(Q.a!eOP/6Ffgm7$$!5&eL*eQ$[\\d!HFfgm$\"5pkVc%\\h'pguF\\_s7$$!5K\\ LM%R5Wj(HFfgm$\"5!ft7Hp+(**fPF\\_s7$$!5+++++++++IFfgm$\"5f_'3&Q)\\,$z= !#Q7$Fdes$!56OF\"Hp+(**fPF\\_s7$$!5%eL*eQ$[\\d!HFfgm$!5!\\OkX\\h'pguF \\_s7$Fjds$!5y(Q.a!eOP/6Ffgm7$Feds$!5\\#e90B-h_W\"Ffgm7$$!5AFU[7$)40FC Ffgm$!5wQ>u(ovbLw\"Ffgm7$$!5#pXBkA)e!p=#Ffgm$!59-mgy<8k`?Ffgm7$$!518pg Cp>F7>Ffgm$!5BpntKG(R:J#Ffgm7$$!5[&)*)p$\\Q![2;Ffgm$!5dBXg]wP)H`#Ffgm7 $$!5j%z@&puyLx7Ffgm$!5Kee!)Rd6[9FFfgm7$$!5)=FU[7$)40F*F\\_s$!5lrga))[& pJ&GFfgm7$$!5f\"*QF7>FfgmFigs7$$\"5 (pXBkA)e!p=#Ffgm$!55-mgy<8k`?Ffgm7$$\"5AFU[7$)40FCFfgmF_gs7$$\"5?w!fJ, /?*GEFfgmFjfs7$$\"56@aZmd%H$*y#Ffgm$!5s(Q.a!eOP/6Ffgm7$$\"5'eL*eQ$[\\d !HFfgm$!5IkVc%\\h'pguF\\_s7$Fh^s$!53OF\"Hp+(**fPF\\_s7$$\"5+++++++++IF fgm$\"5#[p#)HK+(RTAF]fs-Fc[p6&Fe[pFd]sF[hmFd]s-%+AXESLABELSG6%%#x1G%#x 2G-%%FONTG6#%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" "Curve 4" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"$\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "y1:=solve(G1,x2);\ny2:=solve(G2,x2);\nxL:=fsolve(y1=y2,x1);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#y1G,($\"\"#\"\"!\"\"\"-%$expG6#,$* &$\"5+++++++++5!#?F))%#x1GF'F)!\"\"F)*&$\"5+++++++++;!#AF))F3\"\"%F)F) " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#y2G,$*&$\"5+++++++++X!#>\"\"\"% #x1G!\"\"F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#xLG$\"5\"H)*GQl<%Q=; !#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "Pdef:=(Int(Int(1/(2 *Pi)*exp(-(x1^2+x2^2)/2),x2=-infinity..y2),x1=-infinity..0))+(Int(Int( 1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y1..infinity),x1=-infinity..xL))+(Int( Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y2..infinity),x1=xL..infinity));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%PdefG,(-%$IntG6$-F'6$,$*&#\"\"\" \"\"#F.*&%#PiG!\"\"-%$expG6#,&*&F/F2%#x1GF/F2*&F/F2%#x2GF/F2F.F.F./F:; ,$%)infinityGF2,$*&$\"5+++++++++X!#>F.F8F2F./F8;F=\"\"!F.-F'6$-F'6$F+/ F:;,($F/FFF.-F46#,$*&$\"5+++++++++5!#?F.)F8F/F.F2F.*&$\"5+++++++++;!#A F.)F8\"\"%F.F.F>/F8;F=$\"5\"H)*GQl<%Q=;FCF.-F'6$-F'6$F+/F:;F?F>/F8;Fin F>F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Pdef_num:=evalf(Pde f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)Pdef_numG$\"5(4s3J4KY*yM!#A " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "PHI:=proc(x)\n int(1/s qrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "-fsolve(PHI(x)=Pdef_num,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5`nxU(G^ofD\"!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "1-7.152 9e-3/9.81929e-3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5([Az#\\(4har#! #?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "Digits:=20:evalf(sqrt (1/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5SCva'=\"y1rq!#?" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas5.txt000066400000000000000000000065341307543307100177100ustar00rootroot00000000000000> restart: > Digits:=20: > G1:=2-x2+exp(-0.1*x1^2)+(0.2*x1)^4: > G2:=4.5-x1*x2; > G:=min(G1,G2); > with(plots): > p1:=implicitplot(G1,x1=-5..5,x2=-5..5,grid=[101,101]): > p2:=implicitplot(G2,x1=-5..5,x2=-5..5,grid=[101,101],color=blue): > p3:=implicitplot(G=0,x1=-5..5,x2=-5..5,grid=[101,101],color=green,thic > kness=4): > with(plottools): > c := circle([0,0], 3, color=magenta): > display([p1,p2,p3,c]); > evalf(subs(x1=0,x2=0,G)); G2 := 4.5 - x1 x2 2 4 G := min(2 - x2 + exp(-0.1 x1 ) + 0.0016 x1 , 4.5 - x1 x2) Warning, the name changecoords has been redefined Warning, the name arrow has been redefined 3. > y1:=solve(G1,x2); > y2:=solve(G2,x2); > xL:=fsolve(y1=y2,x1); 2 y1 := 2. + exp(-0.10000000000000000000 x1 ) 4 + 0.0016000000000000000000 x1 4.5000000000000000000 y2 := --------------------- x1 xL := 1.6183841765382898291 > Pdef:=(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=-infinity..y2),x1=-infi > nity..0))+(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y1..infinity),x1=-i > nfinity..xL))+(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y2..infinity),x > 1=xL..infinity)); 0 / | Pdef := | | | / -infinity 4.5000000000000000000 --------------------- 2 2 x1 x1 x2 / exp(- --- - ---) | 2 2 | 1/2 ---------------- dx2 dx1 + | Pi | / -infinity 1.6183841765382898291 2 2 / x1 x2 | exp(- --- - ---) | 2 2 | Int(1/2 ----------------, x2 = 2. | Pi | / -infinity 2 + exp(-0.10000000000000000000 x1 ) 4 + 0.0016000000000000000000 x1 .. infinity) dx1 + infinity / | | | | / 1.6183841765382898291 2 2 infinity x1 x2 / exp(- --- - ---) | 2 2 | 1/2 ---------------- dx2 dx1 | Pi | / 4.5000000000000000000 --------------------- x1 > Pdef_num:=evalf(Pdef); Pdef_num := 0.0034789463209310872097 > PHI:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > -fsolve(PHI(x)=Pdef_num,x); 1.2559685128742776753 > > 1-7.1529e-3/9.81929e-3; 0.27154610974927922487 > Digits:=20:evalf(sqrt(1/2)); 0.70710678118654752440 > openturns-1.9/validation/src/Cas6.mws000066400000000000000000000517061307543307100177010ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 404 "restart:\nDigits:=2 0:\nG1:=2-x2+exp(-0.1*x1^2)+(0.2*x1)^4:\nG2:=4.5-x1*x2;\nG:=max(G1,G2) ;\nwith(plots):\np1:=implicitplot(G1,x1=-5..5,x2=-5..5,grid=[101,101]) :\np2:=implicitplot(G2,x1=-5..5,x2=-5..5,grid=[101,101],color=blue):\n p3:=implicitplot(G=0,x1=-5..5,x2=-5..5,grid=[101,101],color=green,thic kness=4):\nwith(plottools):\nc := circle([0,0], 3, color=magenta):\ndi splay([p1,p2,p3,c]);\nevalf(subs(x1=0,x2=0,G));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G2G,&$\"#X!\"\"\"\"\"*&%#x1GF)%#x2GF)F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GG-%$maxG6$,&$\"#X!\"\"\"\"\"*&%#x1GF,%#x2G F,F+,*\"\"#F,F/F+-%$expG6#,$*&$F,F+F,)F.F1F,F+F,*&$\"#;!\"%F,)F.\"\"%F ,F," }}{PARA 7 "" 1 "" {TEXT -1 50 "Warning, the name changecoords has been redefined\n" }}{PARA 7 "" 1 "" {TEXT -1 43 "Warning, the name ar row has been redefined\n" }}{PARA 13 "" 1 "" {GLPLOT2D 404 404 404 {PLOTDATA 2 "6'-%'CURVESG6fx7$7$$!\"&\"\"!$\"3<**Qi)*\\3#3$!#<7$$!3V9; (\\BU?%\\F-$\"339;(\\BU?/$F-7$7$$!3O+++++++\\F-$\"3:%)*z1W&*H,$F-F.7$7 $$!3%)*************z%F-$\"3>..Np^?\\HF-7$$!3_^_Bkyiz[F-$\"\"$F*7$7$$!3 T__Bkyiz[F-FBF47$7$$!3;+++++++ZF-$\"3CRE.k$f0*GF-7$$!3ABCLRCXF-$\"3%)********** ***z#F-7$7$$!3omkeZ>RCXF-Fho7$F[o$\"3Z\\,cwc!p$GF-7$7$Fao$\"3sHy=VQ4)y #F-7$$!3h%ys^*QpyWF-$\"3([ys^*QpyFF-7$7$$!3O+++++++WF-$\"32)yUnFvRu#F- Fep7$7$F\\q$\"3_)yUnFvRu#F-7$$!36D**fTeG2VF-$\"3ZD**fTeG2FF-7$7$$!3%)* ************H%F-$\"3OPZ7UES/FF-Fdq7$7$$!3;+++++++UF-$\"3SdL*)=%H#pEF-7 $$!3gT]@sH[(G%F-$\"3;+++++++FF-7$Fer7$$!3s+++++++VF-F]r7$F`r7$$!3UzN'G ica:%F-$\"3UzN'Gical#F-7$7$$!3k*************4%F-$\"30/$>_X4$QEF-F_s7$F es7$$!3'e&z%>S3d,%F-$\"3%o&z%>S3dh#F-7$7$$!\"%F*$\"3VbY*z^'\\6EF-F[t7$ 7$$!3#***************QF-$\"3!Gw%QWQk)e#F-7$$!3^`tC(*Gp\\RF-$\"33++++++ +EF-7$F\\uFat7$7$Fht$\"3DjZQWQk)e#F-7$$!3*4ICI5tf)QF-$\"3<,V-.J(fe#F-7 $7$$!3%)*************z$F-$\"3^eZa+PgpDF-Ffu7$F\\v7$$!3sT0$3W!3kPF-$\"3 aT0$3W!3kDF-7$7$$!3s*************p$F-$\"3_%>3O&pAaDF-Fbv7$7$$!3;++++++ +PF-$\"3'\\>3O&pAaDF-7$$!3o[l.m_1[OF-$\"3f[l.m_1[DF-7$7$$!33+++++++OF- $\"3<3/PjEOUDF-Fcw7$Fiw7$$!3vNtNe\\+PNF-$\"3vNtNe\\+PDF-7$7$$!3+++++++ +NF-$\"3vKNK+x&Q`#F-F_x7$Fex7$$!3NA@=0]:IMF-$\"3)G7#=0]:IDF-7$7$$!3#** ************R$F-$\"3x\"yUoRc&GDF-F[y7$7$$!3O+++++++MF-$\"3A#yUoRc&GDF- 7$$!3A\"o=*4t!pK$F-$\"3S\"o=*4t!p_#F-7$7$$!3%)*************H$F-$\"3FPZ OQ-IEDF-F\\z7$Fbz7$$!3\\e>v?(fnA$F-$\"3Ke>v?(fn_#F-7$7$$!3;+++++++KF-$ \"3k/%H8gFp_#F-Fhz7$F^[l7$$!3)[*\\$QS$HHJF-$\"3z%*\\$QS$HHDF-7$7$$!33+ ++++++JF-$\"3K!yrWat-`#F-Fd[l7$7$$!3_+++++++JF-$\"3x!yrWat-`#F-7$$!34@ Lr%zbT.$F-$\"3k?Lr%zbT`#F-7$7$$!\"$F*$\"3;*fS(f'ph`#F-Fe\\l7$F[]l7$$!3 zc<8xv/THF-$\"3Ld<8xv/TDF-7$7$$!3#***************GF-$\"3#*y*)o))RWWDF- Fa]l7$7$Fh]l$\"3[y*)o))RWWDF-7$$!3.F^:4Er\\GF-$\"3lF^:4Er\\DF-7$7$$!3% )*************z#F-$\"3\"[JB'45#\\b#F-F`^l7$Ff^l7$$!3?w%pA.I*fFF-$\"3Yw %pA.I*fDF-7$7$$!3;+++++++FF-$\"3FE^6+0mA:EF-F]bl7$Fcbl7$$!3m!>BD'pgGBF-$\"3$4>BD'pgGEF-7$7$$! 3%)*************H#F-$\"3.W'[!H%oRj#F-Fibl7$F_cl7$$!3qtC,kO*[C#F-$\"31u C,kO*[k#F-7$7$$!3;+++++++AF-$\"3B!H7>;%z`EF-Fecl7$7$F\\dl$\"3z*G7>;%z` EF-7$$!3QF-$\"3_NP9:Ll'p#F-7$7$$!33;&)oT)y8)>F-FhrF\\f l7$7$Fcfl$\"3s*************p#F-7$$!3(z'G***zDY\">F-$\"3znG***zDYr#F-7$ 7$$!3#***************=F-$\"3#G(oYe.$yr#F-Fifl7$F_gl7$$!3>]3n%*owK=F-$ \"35]3n%*owKFF-7$7$$!3%)*************z\"F-$\"3wU)zBSY+u#F-Fegl7$F[hl7$ $!3Bp\\$)Q**)4v\"F-$\"3Xp\\$)Q**)4v#F-7$7$$!3'**************p\"F-$\"3; pESlbPiFF-Fahl7$Fghl7$$!3!4r45\"RAp;F-$\"3b5(45\"RApFF-7$7$$!33+++++++ ;F-$\"3H[AzGxi%y#F-F]il7$Fcil7$$!3$yKC))e)R(e\"F-$\"3cFV#))e)R(y#F-7$7 $$!3=U*QRY*3I:F-FhoFiil7$7$$!3'>%*QRY*3I:F-Fho7$$!3&\\e@=kBa]\"F-$\"3* \\e@=kBa!GF-7$7$$!3++++++++:F-$\"3$oPf(=ih1GF-Ffjl7$F\\[m7$$!3*zJVU%y; B9F-$\"3o\"F-$\"3$\\?f!3b?pGF-F]]m7$7$Fd]m$\"3\\/#f!3b?pGF-7$$! 3jS-Y5%fT<\"F-$\"3fS-Y5%fT(GF-7$7$$!33+++++++6F-$\"3WvGf>lP))GF-F\\^m7 $Fb^m7$$!3?')[$Rna,4\"F-$\"3W')[$Rna,*GF-7$7$$!3I(\\!*\\%GkN5F-FQFh^m7 $F^_m7$$!39wk(\\i_a+\"F-$\"3$eZw\\i_a!HF-7$7$$!\"\"F*$\"3cff.=uV1HF-Fb _m7$Fh_m7$$!3%[lvO(=**)>*!#=$\"3/lvO(=**)>HF-7$7$$!3C+++++++!*Fa`m$\"3 <3YW^MCBHF-F^`m7$Fe`m7$$!3DnyA.F'\\L)Fa`m$\"3E'yA.F'\\LHF-7$7$$!3W++++ +++!)Fa`m$\"3CH2`f.mQHF-F[am7$Faam7$$!35Z`.&)Q[huFa`m$\"3AMN])Q[h%HF-7 $7$$!3c**************pFa`m$\"320&)p*GlD&HF-Fgam7$F]bm7$$!3O)Q5['3axlFa `m$\"3xQ5['3ax&HF-7$7$$!3o)*************fFa`m$\"3_AJ[`w%['HF-Fcbm7$7$$ !3y**************fFa`m$\"3'H7$[`w%['HF-7$$!3an>b`$e?o&Fa`m$\"3y'>b`$e? oHF-7$7$$!3++++++++]Fa`m$\"3$GLG?\"*4a(HF-Fdcm7$Fjcm7$$!3^W5@Y;!Rx%Fa` m$\"3^/6ik,RxHF-7$7$$!3C+++++++SFa`m$\"37&Gb+GoT)HF-F`dm7$Ffdm7$$!3[q6 O))3)=&QFa`m$\"34F a`m$\"3!Q56]PEh*HF-7$7$$!3/+++++++5Fa`m$\"3;vL$)f1+**HF-Fgfm7$F]gm7$$! 3&pbPEya5!**!#>$\"3cvj#ya5!**HF-7$7$$F*F*FBFcgm7$7$$\"3/+++++++5Fa`mF` gmFjgm7$F]hm7$$\"3`UfnD9I55Fa`m$\"3u0CVd)p*)*HF-7$7$$\"37+++++++?Fa`mF afmFahm7$7$FhhmFefm7$$\"3/\">?6Jv>/#Fa`m$\"3w!)z))oC!e*HF-7$7$$\"3))** ************HFa`mFeemF\\im7$Fbim7$$\"3gTz03>3'4$Fa`m$\"3o0U>4=R!*HF-7$ 7$$\"3C+++++++SFa`mFidmFfim7$F\\jm7$$\"3#Qj\"y7U^tTFa`m$\"3UO=sy&[E)HF -7$7$$\"3++++++++]Fa`mF]dmF`jm7$Ffjm7$$\"3?Q*HB%3%\\F&Fa`m$\"3=1qw:f]s HF-7$7$$\"3o)*************fFa`mF\\cmFjjm7$7$$\"3y**************fFa`mFb cm7$$\"3+NMDVVu+kFa`m$\"3fcYnlb#*fHF-7$7$$\"3c**************pFa`mF`bmF g[n7$F]\\n7$$\"3_VT\"eLd4b(Fa`m$\"3;&e=kE/\\%HF-7$7$$\"3W+++++++!)Fa`m FdamFa\\n7$Fg\\n7$$\"3*of8(*y*>D()Fa`m$\"3CS'G5-![FHF-7$7$$\"3C+++++++ !*Fa`mFh`mF[]n7$Fa]n7$$\"39d>#ed@E#**Fa`m$\"3U/yTUyt2HF-7$7$$\"\"\"F*F [`mFe]n7$7$$\"33+++++++6F-Fe^m7$$\"3I(\\!*\\%GkN5F-FQ7$Fb^nF[^n7$F_^n7 $$\"3RQnMO.Q96F-$\"3RhKlj'>c)GF-7$7$$\"3'**************>\"F-Ff]mFg^n7$ 7$F^_nFj]m7$$\"3*yYL\\Ca&Q7F-$\"3wJl1bdWhGF-7$7$$\"3/+++++++8F-Fg\\mFb _n7$7$Fi_nF[]m7$$\"3D*fSR2#Rk8F-$\"3E+%fg#zgNGF-7$7$$\"3#************* *R\"F-F[\\mF]`n7$Fc`n7$$\"3K3:7Arc\"\\\"F-$\"3]\"\\yy(GV3GF-7$7$$\"3++ ++++++:F-F_[mFg`n7$7$$\"33+++++++;F-Ffil7$$\"3'>%*QRY*3I:F-Fho7$7$$\"3 =U*QRY*3I:F-FhoF]an7$Faan7$$\"3MNs1g>x>;F-$\"3![wK*R!G-y#F-7$7$$\"3'** ************p\"F-FjhlF\\bn7$Fbbn7$$\"3hZ,*p(3W[F-Fgfl7$7$F^dnFhrFfcn7$Fjcn7$$\"3Z*G!om9>0?F-$\"3q5(>L`3[p#F-7$7$$ \"33+++++++@F-F]elFcdn7$Fidn7$$\"3]pDPk/:K@F-$\"3wIuiN&\\ym#F-7$7$$\"3 ;+++++++AF-F^dlF]en7$7$FdenFbdl7$$\"3F9f4c?bmt?P$F-$\"3>3)zWLEz_#F-7$7$$\"3#**************R$F-FdyFa\\o7$7$$ \"3O+++++++MF-Fjy7$$\"33nYXOo%yY$F-$\"3\\K`ajJ:KDF-7$7$$\"3++++++++NF- FhxF^]o7$Fd]o7$$\"3:Gk]cy&4c$F-$\"3$>d$\\V@/RDF-7$7$$\"33+++++++OF-F\\ xFh]o7$F^^o7$$\"3D-PXRV_^OF-$\"3[(HY0mv%[DF-7$7$$\"3s*************p$F- F[wFb^o7$7$$\"3;+++++++PF-Faw7$$\"31Zr%*yEnRPF-$\"3x_G0@tKgDF-7$7$$\"3 %)*************z$F-F_vF__o7$Fe_o7$$\"3ooy*[\\Mb#QF-$\"3CJ@50bYuDF-7$7$ $\"3#***************QF-FjtFi_o7$7$F``oFdu7$$\"3![wT(=PC4RF-$\"3?N#e7Gc 2f#F-7$7$$\"3^`tC(*Gp\\RF-F_uFd`o7$Fj`o7$$\"3;OOlG?k!*RF-$\"3%ROY8(zN4 EF-7$7$$\"\"%F*FdtF^ao7$Fdao7$$\"3g:%3\"y0zpSF-$\"3e%e\"*=U4-j#F-7$7$$ \"3k*************4%F-FhsFhao7$F^bo7$$\"3&*=!\\!337ZTF-$\"3K\")4&>>zGl# F-7$7$$\"3;+++++++UF-FcrFbbo7$Fhbo7$$\"3#>T%*R\"QwAUF-$\"3*ze0g=Osn#F- 7$7$$\"3gT]@sH[(G%F-FhrF\\co7$Fbco7$$\"3!)[)HG'Hu'H%F-$\"3?^,z#F-7$7$$\"3omkeZ>RCXF-FhoFieo7$7$$\"3dnkeZ>RCXF-Fh o7$$\"38UwDq(*>vXF-$\"3MdBuH-![#GF-7$7$$\"3k*************f%F-F]oFffo7$ 7$F]goF_p7$$\"3;5.%4oi5k%F-$\"3&*)of!>t$*eGF-7$7$$\"3;+++++++ZF-FLFago 7$Fggo7$$\"3&4h_Iw]fq%F-$\"3o)QZpB\\S*GF-7$7$$\"3ABCLMz+$ F-7$7$$\"3O+++++++\\F-F7F_jo7$Fejo7$$\"3un4\"F-7$7$Ffs$!3=c(4c(4c(4 \"F-F]`p7$7$Fbt$!3+++++++D6F-7$$!3%**3444444%F-Fc^m7$Fj`pFc`p7$Fg`p7$$ !3U9dG9dGkRF-$!3!fG9dG9d8\"F-7$7$$!3Y**************QF-$!3v`h%Q:YQ:\"F- F_ap7$7$FhtFhap7$$!3(>AAAAAA#QF-$!3\"yxxxxxx<\"F-7$7$F]v$!3P*y:j_5U=\" F-F\\bp7$7$F_w$!3B;i@;i@;7F-7$$!3+++++++]PF-Fd]m7$FibpFbbp7$Ffbp7$$!3E ++++++vOF-$!3()***********\\A\"F-7$7$Fjw$!3+++++++]7F-F^cp7$Fdcp7$$!3E #yM/8R<_$F-$!3M<_cp3Ey7F-7$7$Ffx$!3f&G9dG9dG\"F-Fhcp7$7$$!3Y********** ***R$F-$!3%eqkF-7$$ !3wy:j_5UoBF-F`gl7$F\\[qFejp7$7$F\\dl$!3TXXXXXXX?F-7$$!3+++++++]AF-Fge l7$Fd[q7$F`cl$!3\"[VI\"R<_c>F-7$7$F[el$!3!G9dG9dG9#F-7$F]\\qF[el7$F_\\ qFa[q7$7$FgelFe[q7$Fb[qF\\dl7$Fc\\qF\\\\q7$7$F`glF][q7$FjjpF`cl7$7$Fi[ qF`clFb\\q7$7$FbjpF[al7$FfjpFdbl7$F\\]qFf\\q7$7$FgipFeip7$FbipF_`l7$F` ]qF[]q7$7$FdilF]hp7$FjgpFhgp7$7$FehpFg^l7$Fjhp$!3I\"======y#F-7$7$F^ip Fc_lFg]q7$7$F^jpFc_l7$FhhlF[jp7$7$F][mF\\]l7$FdgpFh]l7$Fa^q7$FdilFahp7 $7$Fi[mF`fp7$F]fpF_[l7$Ff^q7$FjfpFhfp7$7$F^gpF[\\lFh^q7$Fj^qF`^q7$7$Fe \\mFhdp7$FedpFcdp7$7$F`epFby7$$!33++++++S8F-$!3()************fLF-7$7$F iepFczFa_q7$7$FdfpFczFe^q7$7$Fd]mFjbp7$FgbpF_w7$F\\`q7$FacpF_cp7$7$Fec pFjwF^`q7$F``q7$$!3c<_cp3Ey7F-$!3r#yM/8R<_$F-7$7$F_dpFfxFb`q7$7$F\\epF fxF]_q7$7$Fc^mF[ap7$Fh`pFbt7$F]aq7$$!3o&G9dG9d8\"F-$!3(Rr&G9dGkRF-7$7$ FhapFfapF_aq7$7$FhapFht7$$!3exxxxxxx6F-F]bp7$7$FcbpF]vFhaq7$F\\bqF[`q7 $7$Fi_mFao7$Fe^pF\\q7$F`bq7$F[_pFi^p7$7$F__pF\\sFbbq7$7$F__pF[r7$Ff_pF d_p7$7$Fj_pFarFgbq7$Fibq7$$!3+(Q[N>un4\"F-F^`p7$7$Fd`pFfsF[cq7$F_cqF\\ aq7$7$Ff`mF(7$Fj[pF57$Fccq7$Fa\\pF_\\p7$7$Fe\\pF;Fecq7$Fgcq7$F[]p$!3@p t%*y:j_ZF-7$7$F_]pFJFicq7$7$Fc]pFJ7$Fh]pFf]p7$7$F\\^pF[oF`dq7$7$Fa^pF[ oF_bq7$7$F\\^nFeeo7$$\"3&H<_cp3Ey*Fa`mF]go7$7$$\"31u@l&p3Ey*Fa`mF]go7$ $\"3FI(H(H(H(H(*Fa`m$\"3%o-Fq-Fqi%F-7$7$$\"3[$Q1^3oWd*Fa`mFhgoF^eq7$7$ $\"3P#Q1^3oWd*Fa`mFhgo7$$\"3Q;j_5Uot%*Fa`m$\"3Kot%*y:j_ZF-7$7$$\"3++++ +++v$*Fa`mF\\ioF[fq7$Fafq7$$\"3GJ#p2Bp2B*Fa`m$\"3OxI#p2Bp([F-7$7$$\"3J bxQpMn$=*Fa`mFfjoFefq7$F[gq7$Fb]nF`[p7$7$F`^n$\"3%**3444444%F-7$$\"3=c (4c(4c(4\"F-F_bo7$Fdgq7$$\"3C(Q[N>un4\"F-$\"3G7;X1eA.TF-7$7$$\"3ir&G9d G92\"F-FiboFhgq7$F^hq7$$\"3++++++]i5F-$\"3$)**********\\PUF-7$7$$\"3$o (p!zi6l/\"F-F]doFbhq7$7$FihqFado7$$\"3GIIIIIII5F-$\"33qppppppVF-7$7$$ \"3rssssssA5F-FjdoF]iq7$FciqFfdq7$7$F^_n$\"3+++++++]PF-7$$\"3P*y:j_5U= \"F-Ff_o7$F[jq7$$\"3\"yxxxxxx<\"F-$\"3(>AAAAAA#QF-7$7$$\"3v`h%Q:YQ:\"F -F``oF_jq7$7$Ffjq$\"3Y**************QF-7$$\"3!fG9dG9d8\"F-$\"3U9dG9dGk RF-7$7$$\"3+++++++D6F-FeaoF\\[r7$Fb[rFagq7$7$Fi_n$\"3nh%Q:YQ:Y$F-7$$\" 3\"eG9dG9dG\"F-Fe]o7$7$$\"3f&G9dG9dG\"F-Fe]o7$$\"3M<_cp3Ey7F-$\"3E#yM/ 8R<_$F-7$7$$\"3+++++++]7F-F_^oFa\\r7$Fg\\r7$$\"3()***********\\A\"F-$ \"3E++++++vOF-7$7$$\"3B;i@;i@;7F-F]_oF[]r7$Fa]rFhiq7$7$Fd`n$\"3T9dG9dG 9KF-7$$\"3vjjjjjjj8F-F^\\o7$7$$\"3`jjjjjjj8F-F^\\o7$$\"3')************ R8F-$\"3K++++++gLF-7$7$$\"321Zw6%HNK\"F-Fh\\oF`^r7$7$$\"3%eqkF-F_fn7$7$$\"3fM/8R<_c>F-F_fnFbcr7$7$Fjdn$\"3!G9dG9d G9#F-7$$\"3TXXXXXXX?F-Fden7$FhdrFjcr7$7$FdenFidr7$FfdrFjdn7$F^erFedr7$ 7$F_fnF^dr7$F[drF[dn7$FberF]er7$7$FifnFfcr7$FccrFgcn7$Ffer7$F_fnFbdr7$ 7$F]gnFfbrFeer7$7$F_uFibrFjer7$7$FhrF\\ar7$Fi`rFcbn7$7$F_crF]crF\\fr7$ 7$FhrF`ar7$$\"3I\"======y#F-Fcar7$7$FhoFiarFdfr7$7$FQFd`r7$Fa`rFban7$7 $FbbrFban7$F_brF]br7$7$FBF^anFjfr7$7$FgjnFb_rF`gr7$Fbgr7$Fh_rFf_r7$7$F d[oF\\`rFdgr7$7$F^\\oFj]r7$Fg]rFd`n7$FigrFfgr7$7$F^\\oF^^r7$$\"3()**** ********fLF-$\"33++++++S8F-7$7$Fh\\oFg^rF]hr7$7$Fe]oF[\\r7$Fh[rFi_n7$F fhr7$F]_rF[_r7$7$Fe]oF_\\r7$$\"3r#yM/8R<_$F-$\"3c<_cp3Ey7F-7$7$F_^oFh \\rF[ir7$Fair7$F^]rF\\]r7$7$F]_oFb]rFcir7$7$Ff_oF\\jq7$FiiqF^_n7$FhirF eir7$Fgir7$Fbjq$\"3exxxxxxx6F-7$7$F``oFfjqF[jr7$7$FjjqFfjq7$$\"3(Rr&G9 dGkRF-$\"3o&G9dG9d8\"F-7$7$FeaoFc[rFbjr7$7$F_boFegq7$FbgqF`^n7$F[[sFhj r7$Fjjr7$F[hq$\"3+(Q[N>un4\"F-7$7$FiboF_hqF^[s7$Fb[s7$FehqFchq7$7$F]do FihqFd[s7$7$FadoFihq7$F`iqF^iq7$7$FjdoFdiqFi[s7$7$FeeoF\\^nF[\\s7$7$F] goFhdqF]\\s7$7$F]goF\\eq7$FaeqF_eq7$7$FhgoFeeqFb\\s7$7$FhgoFieq7$$\"3@ pt%*y:j_ZF-F\\fq7$7$F\\ioFbfqFg\\s7$F[]s7$FhfqFffq7$7$FfjoF\\gqF]]s7$7 $F`[pFb]nF_]s-Fc[p6&Fe[pF[hmF[hm$\"*++++\"!\")-F$6brFedqFjdqFceqFgeqF` fqFdfqFjfqF^gqF`gqFggqF]hqFahqFghqF[iqFbiqFfiqFgiqF^jqFdjqFhjqFa[rFe[r Ff[rF]\\rFf\\rFj\\rF`]rFd]rFe]rF\\^rFe^rFi^rF__rFd_rFj_rF^`r7$7$Fban$ \"3NM=NuSx9GF-7$$\"3w!fJ,/?*GEFfgm$\"5]#e90B-h_W\"Ffgm7$$\"5BFU[ 7$)40FCFfgm$\"5vQ>u(ovbLw\"Ffgm7$$\"5%pXBkA)e!p=#Ffgm$\"57-mgy<8k`?Ffg m7$$\"508pgCp>F7>Ffgm$\"5CpntKG(R:J#Ffgm7$$\"5[&)*)p$\\Q![2;Ffgm$\"5cB Xg]wP)H`#Ffgm7$$\"5k%z@&puyLx7Ffgm$\"5Kee!)Rd6[9FFfgm7$$\"5FsA%[7$)40F *Fd_s$\"5krga))[&pJ&GFfgm7$$\"5r\"*QF7>Ffgm$\"5ApntKG( R:J#Ffgm7$$!5%pXBkA)e!p=#Ffgm$\"58-mgy<8k`?Ffgm7$$!5CFU[7$)40FCFfgm$\" 5uQ>u(ovbLw\"Ffgm7$$!5?w!fJ,/?*GEFfgm$\"5Z#e90B-h_W\"Ffgm7$$!54@aZmd%H $*y#Ffgm$\"5w(Q.a!eOP/6Ffgm7$$!5&eL*eQ$[\\d!HFfgm$\"5pkVc%\\h'pguFd_s7 $$!5K\\LM%R5Wj(HFfgm$\"5!ft7Hp+(**fPFd_s7$$!5+++++++++IFfgm$\"5f_'3&Q) \\,$z=!#Q7$F\\fs$!56OF\"Hp+(**fPFd_s7$$!5%eL*eQ$[\\d!HFfgm$!5!\\OkX\\h 'pguFd_s7$Fbes$!5y(Q.a!eOP/6Ffgm7$F]es$!5\\#e90B-h_W\"Ffgm7$$!5AFU[7$) 40FCFfgm$!5wQ>u(ovbLw\"Ffgm7$$!5#pXBkA)e!p=#Ffgm$!59-mgy<8k`?Ffgm7$$!5 18pgCp>F7>Ffgm$!5BpntKG(R:J#Ffgm7$$!5[&)*)p$\\Q![2;Ffgm$!5dBXg]wP)H`#F fgm7$$!5j%z@&puyLx7Ffgm$!5Kee!)Rd6[9FFfgm7$$!5)=FU[7$)40F*Fd_s$!5lrga) )[&pJ&GFfgm7$$!5f\"*QF7>FfgmFahs7$$\"5(pX BkA)e!p=#Ffgm$!55-mgy<8k`?Ffgm7$$\"5AFU[7$)40FCFfgmFggs7$$\"5?w!fJ,/?* GEFfgmFbgs7$$\"56@aZmd%H$*y#Ffgm$!5s(Q.a!eOP/6Ffgm7$$\"5'eL*eQ$[\\d!HF fgm$!5IkVc%\\h'pguFd_s7$F`_s$!53OF\"Hp+(**fPFd_s7$$\"5+++++++++IFfgm$ \"5#[p#)HK+(RTAFefs-Fc[p6&Fe[pFd]sF[hmFd]s-%+AXESLABELSG6%%#x1G%#x2G-% %FONTG6#%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" "Curve 4" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#X!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "y1:=solve(G1,x2);\ny2:=solve(G2,x2);\nxL:=fsolve(y1=y2,x1);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#y1G,($\"\"#\"\"!\"\"\"-%$expG6#,$* &$\"5+++++++++5!#?F))%#x1GF'F)!\"\"F)*&$\"5+++++++++;!#AF))F3\"\"%F)F) " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#y2G,$*&$\"5+++++++++X!#>\"\"\"% #x1G!\"\"F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#xLG$\"5\"H)*GQl<%Q=; !#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "Pdef:=(Int(Int(1/(2 *Pi)*exp(-(x1^2+x2^2)/2),x2=-infinity..y2),x1=-infinity..0))+(Int(Int( 1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y1..infinity),x1=-infinity..xL))+(Int( Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y2..infinity),x1=xL..infinity));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%PdefG,(-%$IntG6$-F'6$,$*&#\"\"\" \"\"#F.*&%#PiG!\"\"-%$expG6#,&*&F/F2%#x1GF/F2*&F/F2%#x2GF/F2F.F.F./F:; ,$%)infinityGF2,$*&$\"5+++++++++X!#>F.F8F2F./F8;F=\"\"!F.-F'6$-F'6$F+/ F:;,($F/FFF.-F46#,$*&$\"5+++++++++5!#?F.)F8F/F.F2F.*&$\"5+++++++++;!#A F.)F8\"\"%F.F.F>/F8;F=$\"5\"H)*GQl<%Q=;FCF.-F'6$-F'6$F+/F:;F?F>/F8;Fin F>F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Pdef_num:=evalf(Pde f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)Pdef_numG$\"5(4s3J4KY*yM!#A " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "PHI:=proc(x)\n int(1/s qrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "-fsolve(PHI(x)=Pdef_num,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5j!)fo.()G&))p#!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "1-7.152 9e-3/9.81929e-3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5([Az#\\(4har#! #?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "Digits:=20:evalf(sqrt (1/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5SCva'=\"y1rq!#?" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "evalf(subs(x1=xL,y1));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5UxU7Pg6b!y#!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "evalf(subs(x1=xL,x2=evalf(subs(x1=xL,y1)),G ));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!\"%!#?" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 17 "evalf(3*sqrt(3));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"50)=j1FU_h>&!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "11 0 0" 17 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas6.txt000066400000000000000000000071701307543307100177060ustar00rootroot00000000000000> restart: > Digits:=20: > G1:=2-x2+exp(-0.1*x1^2)+(0.2*x1)^4: > G2:=4.5-x1*x2; > G:=max(G1,G2); > with(plots): > p1:=implicitplot(G1,x1=-5..5,x2=-5..5,grid=[101,101]): > p2:=implicitplot(G2,x1=-5..5,x2=-5..5,grid=[101,101],color=blue): > p3:=implicitplot(G=0,x1=-5..5,x2=-5..5,grid=[101,101],color=green,thic > kness=4): > with(plottools): > c := circle([0,0], 3, color=magenta): > display([p1,p2,p3,c]); > evalf(subs(x1=0,x2=0,G)); G2 := 4.5 - x1 x2 2 4 G := max(4.5 - x1 x2, 2 - x2 + exp(-0.1 x1 ) + 0.0016 x1 ) Warning, the name changecoords has been redefined Warning, the name arrow has been redefined 4.5 > y1:=solve(G1,x2); > y2:=solve(G2,x2); > xL:=fsolve(y1=y2,x1); 2 y1 := 2. + exp(-0.10000000000000000000 x1 ) 4 + 0.0016000000000000000000 x1 4.5000000000000000000 y2 := --------------------- x1 xL := 1.6183841765382898291 > Pdef:=(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=-infinity..y2),x1=-infi > nity..0))+(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y1..infinity),x1=-i > nfinity..xL))+(Int(Int(1/(2*Pi)*exp(-(x1^2+x2^2)/2),x2=y2..infinity),x > 1=xL..infinity)); 0 / | Pdef := | | | / -infinity 4.5000000000000000000 --------------------- 2 2 x1 x1 x2 / exp(- --- - ---) | 2 2 | 1/2 ---------------- dx2 dx1 + | Pi | / -infinity 1.6183841765382898291 2 2 / x1 x2 | exp(- --- - ---) | 2 2 | Int(1/2 ----------------, x2 = 2. | Pi | / -infinity 2 + exp(-0.10000000000000000000 x1 ) 4 + 0.0016000000000000000000 x1 .. infinity) dx1 + infinity / | | | | / 1.6183841765382898291 2 2 infinity x1 x2 / exp(- --- - ---) | 2 2 | 1/2 ---------------- dx2 dx1 | Pi | / 4.5000000000000000000 --------------------- x1 > Pdef_num:=evalf(Pdef); Pdef_num := 0.0034789463209310872097 > PHI:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > -fsolve(PHI(x)=Pdef_num,x); 2.6988528870368598063 > > 1-7.1529e-3/9.81929e-3; 0.27154610974927922487 > Digits:=20:evalf(sqrt(1/2)); 0.70710678118654752440 > evalf(subs(x1=xL,y1)); 2.7805511603712427742 > evalf(subs(x1=xL,x2=evalf(subs(x1=xL,y1)),G)); -19 -0.4 10 > evalf(3*sqrt(3)); 5.1961524227066318805 > openturns-1.9/validation/src/Cas7_eads.mws000066400000000000000000000006151307543307100206670ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "restart:\nG1:=3*sqrt (3)" }}}}{MARK "0 0 0" 22 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Cas7_eads.txt000066400000000000000000000000331307543307100206720ustar00rootroot00000000000000> restart: > G1:=3*sqrt(3) openturns-1.9/validation/src/CoefficientOfVariation.mws000066400000000000000000000134251307543307100234610ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 73 "restart:\nSn:=factor (1/(N+p-1)*(sum(1/(N+p)^2,k=1..N+p-1)+(1-1/(N+p))^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#SnG*&\"\"\"F&,&%\"NGF&%\"pGF&!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 71 "C:=factor(sqrt(1/(N+p))/(1-1/(N+p)- sqrt(2*log(log(N+p))/(N+p))/(N+p)));" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%\"CG*&,&%#N|irG\"\"\"%#p|irGF(#F(\"\"#,*F'F(F)F(F(!\"\"*&F+F**&-%# lnG6#-F16#F&F(F&F-F*F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "plot(subs(N=10,factor(C*(1-1/(N+p)))),p=1..10);" }}{PARA 13 "" 1 "" {GLPLOT2D 393 393 393 {PLOTDATA 2 "6%-%'CURVESG6$7S7$$\"\"\"\"\"!$\"3. ZPJ[/MSJ!#=7$$\"3#*****\\(Quh>\"!#<$\"3fe)QpiL'4JF-7$$\"3/+]7tY'oO\"F1 $\"3>:Bl=fk$3$F-7$$\"31++D^P#)e:F1$\"3rr6j)z%>bIF-7$$\"3,++ve_0_F1$\"3IH&*RuPQ+IF-7$$\"3****\\7VsmA@F 1$\"3TQZ!GWFg(HF-7$$\"3*)**\\7)R&G2BF1$\"37(fH[9J9&HF-7$$\"3/+]7ex@)\\ #F1$\"32mi,\"3Lm#HF-7$$\"3$)**\\i&zP&)o#F1$\"3#R4\"GkZ`-HF-7$$\"3A++]Z `I%)GF1$\"3nK2\"y%eOyGF-7$$\"3\"****\\P^Pn0$F1$\"3]k>'pHxv&GF-7$$\"3F+ +]#Hb3D$F1$\"3D2h0N?rMGF-7$$\"3$)****\\P,xXMF1$\"3\\Wwh*y.B\"GF-7$$\"3 E++]2ngLOF1$\"3g_%)H'>67z#F-7$$\"3&)**\\73.=/QF1$\"3GWpf2\"oCx#F-7$$\" 3/++]<)3q+%F1$\"3@pVeL6n]FF-7$$\"3[+++q6$)yTF1$\"3<)G>')G3Et#F-7$$\"3Q +]789qyVF1$\"34;VZdQ/7FF-7$$\"3u*****\\W?cb%F1$\"3!HFSG.GUp#F-7$$\"3U+ ]7j'G(\\ZF1$\"36Fli8Z3vEF-7$$\"3X+]P*elX$\\F1$\"3>CqtqZBdEF-7$$\"3s++D JNUF^F1$\"3+x(\\Sx!**QEF-7$$\"32+]iDt_/`F1$\"3VjB^l!oDi#F-7$$\"3[***\\ Ppdb\\&F1$\"3gSYblu>0EF-7$$\"3#***\\7eX)Rp&F1$\"3?uzSe$>ve#F-7$$\"3J+] (os:n'eF1$\"3&y4t*3OUsDF-7$$\"3v***\\77qK0'F1$\"3!oSuj`;kb#F-7$$\"3Y** ***\\1**fC'F1$\"3&QwpuJ$>SDF-7$$\"3t***\\itYXV'F1$\"34([D&f3iCDF-7$$\" 3'***\\7.j(ph'F1$\"3%Gl(z`j#)4DF-7$$\"3l***\\PBL&>oF1$\"3'RXa[//P\\#F- 7$$\"3P*****\\kR:+(F1$\"3]>%H=Z#[zCF-7$$\"3g++]P.(e>(F1$\"3:C*G.UmXY#F -7$$\"3f**\\7GG'>P(F1$\"3([m`-)GG^CF-7$$\"3_++]K%yWc(F1$\"3pL+>@i+PCF- 7$$\"3R**\\781iXxF1$\"3Iz>Jn3!QU#F-7$$\"3n**\\i&Qm\\$zF1$\"3?5bgnpA5CF -7$$\"31++](['3?\")F1$\"3=[_^Pl<(R#F-7$$\"3q)*\\7y+*QJ)F1$\"3Ellco5u$Q #F-7$$\"3,,++qfa+&)F1$\"3%*embBZ,rBF-7$$\"3=***\\(y&G9p)F1$\"3`,c#p-6# eBF-7$$\"3_+]7$eI2)))F1$\"3!*zFKR#=dM#F-7$$\"3a*****\\YzY0*F1$\"3hV@Ap QTMBF-7$$\"3P***\\P^WSD*F1$\"3Y)Gy0we;K#F-7$$\"3*3+++**eBV*F1$\"3\\RlF %oF/J#F-7$$\"3L**\\78%zCi*F1$\"3'4UEogK')H#F-7$$\"3v**\\(o\"*[W!)*F1$ \"3>$4\\u]7vG#F-7$$\"#5F*$\"3^M-5eBuvAF--%'COLOURG6&%$RGBG$\"*++++\"! \")$F*F*F`[l-%+AXESLABELSG6$%#p|irGQ!6\"-%%VIEWG6$;F(Fez%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "factor(subs(p=1,C*(1-1/(N+p) )));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,&%#N|irG\"\"\"F&F&#!\"\"\" \"#F%F&,&F%F&*&F)#F&F)*&-%#lnG6#-F/6#F$F&F$F(F,F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "solve(sqrt(log(log(N+1)))>=0,N);1/(N+1)^( 1/2)*N/(N-2^(1/2)*(ln(ln(N+1))/(N+1))^(1/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%*RealRangeG6$,&-%$expG6#\"\"\"F*F*!\"\"%)infinityG" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,&%#N|irG\"\"\"F&F&#!\"\"\"\"#F%F&, &F%F&*&F)#F&F)*&-%#lnG6#-F/6#F$F&F$F(F,F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "plot(sqrt(log(log(N+1))),N=0..10);" }}{PARA 13 "" 1 "" {GLPLOT2D 772 772 772 {PLOTDATA 2 "6%-%'CURVESG6$7R7$$\"3++++59;C 7$$\"30+++W(p2t\"F*$\"3hc#H#*QOCw'F-7$$\"3(****** *y!ytt\"F*$\"37D84z\\M_$)F-7$$\"35+++9k)Ru\"F*$\"3Uo(4\"y1ry'*F-7$$\"3 1+++$3.sv\"F*$\"3d.7^Gj8)=\"!#=7$$\"3-+++_(>/x\"F*$\"3D^P9JE)=P\"FB7$$ \"3$*******GkGB=F*$\"3VnGV#zb(G>FB7$$\"32+++1J:w=F*$\"3rAeVnFXVBFB7$$ \"34+++dG\"\\)>F*$\"3A.?-ury!*HFB7$$\"3))*****zgsO4#F*$\"3)4gl*=#Qy[$F B7$$\"3z*****R!RE&G#F*$\"33q1kQ[>lTFB7$$\"3\")*****\\K]4]#F*$\"3Xd\"[G x,%\\ZFB7$$\"3;+++vB_'FB7$$\"3()*****HjM?`$F*$\"3#zzLLa6cU'FB7$$\"32+++\"o7Tv$F*$\"3OEP&\\ b:Pm'FB7$$\"3$)*****HQ*o]RF*$\"3aLFc0O_`oFB7$$\"3v*****4=lj;%F*$\"33!> )4!obG/(FB7$$\"3M+++V&R!\\2sFB7$$\"3%******\\9Ege%F*$\" 3CAm-u`KltFB7$$\"38+++R\"3Gy%F*$\"3Sul?9AP*\\(FB7$$\"3#)*****H5k]*\\F* $\"3J*HNV4KPj(FB7$$\"3b*****pRQb@&F*$\"3KGlRo3SjxFB7$$\"34+++=>Y2aF*$ \"33C%fYg+!pyFB7$$\"3#)*****zdWZh&F*$\"33F&4viei(zFB7$$\"3,+++\\y))GeF *$\"3!p9Hh:4/3)FB7$$\"3D+++i_QQgF*$\"3A')4')GiSw\")FB7$$\"3c******zZ3T iF*$\"32()o#>jnUE)FB7$$\"3))*****f.[hY'F*$\"3)>;%[[Wdc$)FB7$$\"3=***** >Qx$omF*$\"3.KZ$y*>AN%)FB7$$\"3R+++u.I%)oF*$\"3,y;h<\")4:&)FB7$$\"3O++ +(pe*zqF*$\"3Q(G'))on6%e)FB7$$\"3K*****R#\\'QH(F*$\"3\"H4>Ul/il)FB7$$ \"3[*****H,M^\\(F*$\"3D\\<0y91@()FB7$$\"3t*****\\?=bq(F*$\"3=-&eGG.gy) FB7$$\"3N+++2s?6zF*$\"3Du/%y8xo%))FB7$$\"3K+++IXaE\")F*$\"3MO`G=v-3*)F B7$$\"3+*****\\'*RRL)F*$\"3HwsgC%)fk*)FB7$$\"3<,++`<.Y&)F*$\"33'HL#R$ \\--*FB7$$\"3:+++8tOc()F*$\"3)pmbo1$Qt!*FB7$$\"3@******[Qk\\*)F*$\"3Wz Jh)*H^?\"*FB7$$\"3a******o0;r\"*F*$\"3PKzW6Yls\"*FB7$$\"3F*****\\w(Gp$ *F*$\"394)\\H,$p<#*FB7$$\"3D******zE`!e*F*$\"3sW`&pc[TE*FB7$$\"33+++<5 s#y*F*$\"3Qj$=-]$=2$*FB7$$\"#5\"\"!$\"3=\"3N<1f>N*FB-%'COLOURG6&%$RGBG $\"*++++\"!\")$FbzFbzF\\[l-%+AXESLABELSG6$%#N|irGQ!6\"-%%VIEWG6$;F\\[l F`z%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK " 4 0 0" 32 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/CoefficientOfVariation.txt000066400000000000000000000025631307543307100234730ustar00rootroot00000000000000> restart: > Sn:=factor(1/(N+p-1)*(sum(1/(N+p)^2,k=1..N+p-1)+(1-1/(N+p))^2)); 1 Sn := ----- N + p > C:=factor(sqrt(1/(N+p))/(1-1/(N+p)-sqrt(2*log(log(N+p))/(N+p))/(N+p))) > ; 1/2 (N~ + p~) C := --------------------------------------- 1/2 /ln(ln(N~ + p~))\1/2 N~ + p~ - 1 - 2 |---------------| \ N~ + p~ / > plot(subs(N=10,factor(C*(1-1/(N+p)))),p=1..10); > factor(subs(p=1,C*(1-1/(N+p)))); N~ ------------------------------------------- 1/2 / 1/2 /ln(ln(N~ + 1))\1/2\ (N~ + 1) |N~ - 2 |--------------| | \ \ N~ + 1 / / > solve(sqrt(log(log(N+1)))>=0,N);1/(N+1)^(1/2)*N/(N-2^(1/2)*(ln(ln(N+1) > )/(N+1))^(1/2)); RealRange(exp(1) - 1, infinity) N~ ------------------------------------------- 1/2 / 1/2 /ln(ln(N~ + 1))\1/2\ (N~ + 1) |N~ - 2 |--------------| | \ \ N~ + 1 / / > plot(sqrt(log(log(N+1))),N=0..10); > openturns-1.9/validation/src/ComputeG1K3.mw000066400000000000000000000656041307543307100207260ustar00rootroot00000000000000 restart: x0 := 0; x1 := xi; P:=a*x^4+b*x^3+c*x^2+d*x+e; II:=int(P,x=-1..1); JJ:=subs(x=x0,P)*w0+(subs(x=x1,P)+subs(x=-x1,P))*w1; solve({subs(a=1,b=0,c=0,d=0,e=0,II-JJ),subs(a=0,b=0,c=1,d=0,e=0,II-JJ),subs(a=0,b=0,c=0,d=0,e=1,II-JJ)},{w0,w1,xi}); IiIh SSN4aUc2Ig== LCwqJkkiYUc2IiIiIkkieEdGJSIiJUYmKiZJImJHRiVGJkYnIiIkRiYqJkkiY0dGJUYmRiciIiNGJiomSSJkR0YlRiZGJ0YmRiZJImVHRiVGJg== LChJImFHNiIjIiIjIiImSSJjR0YkI0YmIiIkSSJlR0YkRiY= LCYqJkkiZUc2IiIiIkkjdzBHRiVGJkYmKiYsKComSSJhR0YlRiZJI3hpR0YlIiIlIiIjKiZJImNHRiVGJkYsRi5GLkYkRi5GJkkjdzFHRiVGJkYm PCUvSSN3MEc2IiMiIikiIiovSSN3MUdGJSMiIiZGKC9JI3hpR0YlLUknUm9vdE9mRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJiokSSNfWkdGMSIiI0YsISIkIiIi int(a*x+b,x=-1..1); LCRJImJHNiIiIiM= evalf[20](sqrt(3/5)); JCI1L3hMW1QjcG1mdSghIz8= 8./9. JCIrKikpKSkpKSkpKSEjNQ== openturns-1.9/validation/src/Curvature.mws000066400000000000000000000541101307543307100210550ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 210 "G:=5-u2-1/2*(u1-1/10)^2;\nsol:=sol ve(G<0);\nwith(plots):\np1:=implicitplot(G,u1=-5..5,u2=-5..5):\ndispla y(p1);\nP:=evalf(Int(int(1/(2*Pi)*exp(-(u1^2+u2^2)/2),u2=5-1/2*(u1-1/1 0)^2..infinity),u1=-infinity..infinity));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GG,(\"\"&\"\"\"%#u2G!\"\"*&\"\"#F),&%#u1GF'#F'\"#5F )F+F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<#2,(#\"$***\"$+#\"\" \"*&#F+\"\"#F+*$)%#u1GF.F+F+!\"\"*&#F+\"#5F+F1F+F+%#u2G" }}{PARA 13 " " 1 "" {GLPLOT2D 505 505 505 {PLOTDATA 2 "6$-%'CURVESG6$X,%)anythingG6 \"6#/%.source_rtableGX,F'F(6\"[gl'!%\"!!#[[l\"[s\"#405F000000000000000 0000000000000C011789ABCDF0124C014000000000000C011595E0595E05AC013736EC 736EC73C0111D950C83FB73C012666666666666C0110EE500EE500FC012244E3244E32 4C010CCCCCCCCCCCDC010FAE147AE147BC010C3C3C3C3C3C4C010D5D5D5D5D5D6C010C 18F9C18F9C2C010CCCCCCCCCCCDC010737373737374C00F191919191918C0105DA895D A895EC00E666666666666C010232323232323C00C868686868686C00FF3831F3831F4C 00B333333333333C00FA5A5A5A5A5A6C009F3F3F3F3F3F3C00F2BB512BB512CC008000 000000000C00F050505050505C007616161616161C00E666666666666C004D70A3D70A 3D7C00E6438A5953E18C004CEFA8D9DF51BC00E63A1E717863AC004CCCCCCCCCCCDC00 DB5EC6438A595C0024A139BC75A6BC00D863A1E717864C00199999999999AC00D07A02 2DC0D12BFFF8A5953E17F75C00CA8D255CB6A8DBFFCCCCCCCCCCCCDC00C5953E17F749 0BFFA808B70344A13C00BCB6A8D255CB7BFF6666666666666C00BAB07A022DC0DBFF57 6BD8C8714B2C00B333333333333BFF1FFFFFFFFFFFFC00AF7AA450F7AA4BFF07711DC4 7711EC00AE59FCE59FCE5BFF0000000000000C00A39274B039274BFE71B62D3F1B62EC 009ED61BED61BEDBFE3333333333333C0097AA450F7AA45BFDA9143DEA91440C008F52 3AF523AF5BFC999999999999AC008BC2156EBC215BFBBAF0855BAF08CC008000000000 0003FC8F5C28F5C28DAC007FD5FD5FD5FD63FC96F96F96F96F3C007FC780E1FC7803FC 999999999999AC0072B52B52B52B53FDFC0FC0FC0FC0EC006E1FC780E1FC73FE333333 3333333C0065945945945943FE9651651651650C005C780E1FC780E3FF000000000000 0C0058738738738733FF174D74D74D74DC004CCCCCCCCCCCD3FF5AE147AE147ACC004B 277F44C118E3FF631BCB564EFE8C004A7EF9DB22D0E3FF6666666666666C003C869536 202ED3FFAC405D9F7390DC003604189374BC73FFCCCCCCCCCCCCDC002DE5AB277F44C3 FFF564EFE898232C002189374BC6A7F400199999999999AC001F44C118DE5AB4001F44 C118DE5ABC00199999999999A4002D70A3D70A3D6C000F7BDEF7BDEF840042AF122AF1 22BC000AAAAAAAAAAAA4004CCCCCCCCCCCDBFFFDEF7BDEF7BDF400655E2455E2456BFF E4924924924924008000000000000BFFDCE739CE739CE400880D3680D3681BFFCCCCCC CCCCCCD40098F5C28F5C28FBFFB95CEB240795D400A97B425ED097BBFFADEDEDEDEDED F400B333333333333BFF936FE1A8C5370400C9B7F0D4629B8BFF71B1B1B1B1B1B400E6 66666666666BFF6D82D82D82D83400E9F49F49F49F4BFF6666666666666400F0000000 00000BFF4239E0D5B450240103C1AB68A0474BFF26666666666654010CCCCCCCCCCCDB FF15B450239E0D54011239E0D5B4502BFF00000000000004011947AE147AE14BFEC8C2 0563B48C34011F7EA712DCF7EBFE8B60B60B60B644012666666666666BFE5CF7EA712D CF94012B9EFD4E25B9FBFE33333333333334013051EB851EB85BFDBF258BF258BF4401 358BF258BF259BFC999999999999A4013D1EB851EB852BFC45D1745D1745E4013D61BE D61BED63FC999999999999A4013FAE147AE147B3FCA83A83A83A83B4013F8AF8AF8AF8 B3FE333333333333340138000000000003FEFC57C57C57C5C40126666666666663FF00 0000000000040126147AE147AE13FF5BED61BED61BF4010CCCCCCCCCCCD3FF66666666 6666640109EB851EB851F3FFA2FC962FC9631400E6666666666663FFCCCCCCCCCCCCD4 00C70A3D70A3D713FFE1AF286BCA1B0400B3333333333333FFF8E38E38E38E54009D27 D27D27D274000BCA1AF286BCA4008000000000000400199999999999A40065C28F5C28 F5C4002473C1AB68A054004CCCCCCCCCCCD4002CCCCCCCCCCCD400399999999999A400 3AB68A0473C1B400199999999999A4004CCCCCCCCCCCD3FFE000000000001400505B05 B05B05B3FFCCCCCCCCCCCCD40052727272727283FFC18181818181840063518A6DFC35 23FF666666666666640070909090909093FF1EDEDEDEDEDEE40076480F2B9D6483FF00 0000000000040080000000000003FE970A3D70A3D72400880D3680D36813FE33333333 333334008BE2BE2BE2BE33FE03A83A83A83A740098915789157893FC999999999999A4 00A444444444445BFB5555555555566400A915789157892BFC999999999999A400B333 333333333BFDC7AE147AE1473400B8DE5AB277F45BFE3333333333333400BB22D0E560 419BFE52F1A9FBE76CA400C77F44C118DE6BFF0000000000000400CF9DB22D0E561BFF 38D4FDF3B645C400D6202ECFB9C87BFF6666666666666400E4189374BC6A8BFFC83126 E978D52400E4C118DE5AB28BFFCCCCCCCCCCCCD400E666666666666BFFD851EB851EB8 1400F20D20D20D20DC00199999999999A400F611A7B9611A8C002944DAEC944DB400FF 2DF2DF2DF2DC004CCCCCCCCCCCD40103DCB08D3DCB0C006E1FC780E1FC640106276276 27627C0080000000000004010CB08D3DCB08CC00B2FAB4152FAB24010CB7CB7CB7CB7C 00B3333333333334010CCCCCCCCCCCDC00B3D70A3D70A4340112ADD7842ADD7C00E666 6666666664011475EA475EA47C00F5B8A15B8A15A40118A1EF548A1EFC010CCCCCCCCC CCD4011C37DAC37DAC3C011C37DAC37DAC34011E960724E9607C012666666666666401 23F9CB3F9CB3FC013D9364D9364D9401248A1EF548A1FC014000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000[gl'!%\"!!#cz\"gr\"#C011789ABCDF0124C014000000000000C 011595E0595E05AC013736EC736EC73C0111D950C83FB73C012666666666666C0110EE 500EE500FC012244E3244E324C010CCCCCCCCCCCDC010FAE147AE147BC010C3C3C3C3C 3C4C010D5D5D5D5D5D6C010C18F9C18F9C2C010CCCCCCCCCCCDC010737373737374C00 F191919191918C0105DA895DA895EC00E666666666666C010232323232323C00C86868 6868686C00FF3831F3831F4C00B333333333333C00FA5A5A5A5A5A6C009F3F3F3F3F3F 3C00F2BB512BB512CC008000000000000C00F050505050505C007616161616161C00E6 66666666666C004D70A3D70A3D7C00E6438A5953E18C004CEFA8D9DF51BC00E63A1E71 7863AC004CCCCCCCCCCCDC00DB5EC6438A595C0024A139BC75A6BC00D863A1E717864C 00199999999999AC00D07A022DC0D12BFFF8A5953E17F75C00CA8D255CB6A8DBFFCCCC CCCCCCCCDC00C5953E17F7490BFFA808B70344A13C00BCB6A8D255CB7BFF6666666666 666C00BAB07A022DC0DBFF576BD8C8714B2C00B333333333333BFF1FFFFFFFFFFFFC00 AF7AA450F7AA4BFF07711DC47711EC00AE59FCE59FCE5BFF0000000000000C00A39274 B039274BFE71B62D3F1B62EC009ED61BED61BEDBFE3333333333333C0097AA450F7AA4 5BFDA9143DEA91440C008F523AF523AF5BFC999999999999AC008BC2156EBC215BFBBA F0855BAF08CC0080000000000003FC8F5C28F5C28DAC007FD5FD5FD5FD63FC96F96F96 F96F3C007FC780E1FC7803FC999999999999AC0072B52B52B52B53FDFC0FC0FC0FC0EC 006E1FC780E1FC73FE3333333333333C0065945945945943FE9651651651650C005C78 0E1FC780E3FF0000000000000C0058738738738733FF174D74D74D74DC004CCCCCCCCC CCD3FF5AE147AE147ACC004B277F44C118E3FF631BCB564EFE8C004A7EF9DB22D0E3FF 6666666666666C003C869536202ED3FFAC405D9F7390DC003604189374BC73FFCCCCCC CCCCCCDC002DE5AB277F44C3FFF564EFE898232C002189374BC6A7F400199999999999 AC001F44C118DE5AB4001F44C118DE5ABC00199999999999A4002D70A3D70A3D6C000F 7BDEF7BDEF840042AF122AF122BC000AAAAAAAAAAAA4004CCCCCCCCCCCDBFFFDEF7BDE F7BDF400655E2455E2456BFFE4924924924924008000000000000BFFDCE739CE739CE4 00880D3680D3681BFFCCCCCCCCCCCCD40098F5C28F5C28FBFFB95CEB240795D400A97B 425ED097BBFFADEDEDEDEDEDF400B333333333333BFF936FE1A8C5370400C9B7F0D462 9B8BFF71B1B1B1B1B1B400E666666666666BFF6D82D82D82D83400E9F49F49F49F4BFF 6666666666666400F000000000000BFF4239E0D5B450240103C1AB68A0474BFF266666 66666654010CCCCCCCCCCCDBFF15B450239E0D54011239E0D5B4502BFF000000000000 04011947AE147AE14BFEC8C20563B48C34011F7EA712DCF7EBFE8B60B60B60B6440126 66666666666BFE5CF7EA712DCF94012B9EFD4E25B9FBFE33333333333334013051EB85 1EB85BFDBF258BF258BF4401358BF258BF259BFC999999999999A4013D1EB851EB852B FC45D1745D1745E4013D61BED61BED63FC999999999999A4013FAE147AE147B3FCA83A 83A83A83B4013F8AF8AF8AF8B3FE333333333333340138000000000003FEFC57C57C57 C5C40126666666666663FF000000000000040126147AE147AE13FF5BED61BED61BF401 0CCCCCCCCCCCD3FF666666666666640109EB851EB851F3FFA2FC962FC9631400E66666 66666663FFCCCCCCCCCCCCD400C70A3D70A3D713FFE1AF286BCA1B0400B33333333333 33FFF8E38E38E38E54009D27D27D27D274000BCA1AF286BCA400800000000000040019 9999999999A40065C28F5C28F5C4002473C1AB68A054004CCCCCCCCCCCD4002CCCCCCC CCCCD400399999999999A4003AB68A0473C1B400199999999999A4004CCCCCCCCCCCD3 FFE000000000001400505B05B05B05B3FFCCCCCCCCCCCCD40052727272727283FFC181 81818181840063518A6DFC3523FF666666666666640070909090909093FF1EDEDEDEDE DEE40076480F2B9D6483FF000000000000040080000000000003FE970A3D70A3D72400 880D3680D36813FE33333333333334008BE2BE2BE2BE33FE03A83A83A83A7400989157 89157893FC999999999999A400A444444444445BFB5555555555566400A91578915789 2BFC999999999999A400B333333333333BFDC7AE147AE1473400B8DE5AB277F45BFE33 33333333333400BB22D0E560419BFE52F1A9FBE76CA400C77F44C118DE6BFF00000000 00000400CF9DB22D0E561BFF38D4FDF3B645C400D6202ECFB9C87BFF66666666666664 00E4189374BC6A8BFFC83126E978D52400E4C118DE5AB28BFFCCCCCCCCCCCCD400E666 666666666BFFD851EB851EB81400F20D20D20D20DC00199999999999A400F611A7B961 1A8C002944DAEC944DB400FF2DF2DF2DF2DC004CCCCCCCCCCCD40103DCB08D3DCB0C00 6E1FC780E1FC64010627627627627C0080000000000004010CB08D3DCB08CC00B2FAB4 152FAB24010CB7CB7CB7CB7C00B3333333333334010CCCCCCCCCCCDC00B3D70A3D70A4 340112ADD7842ADD7C00E6666666666664011475EA475EA47C00F5B8A15B8A15A40118 A1EF548A1EFC010CCCCCCCCCCCD4011C37DAC37DAC3C011C37DAC37DAC34011E960724 E9607C01266666666666640123F9CB3F9CB3FC013D9364D9364D9401248A1EF548A1FC 014000000000000-%'COLOURG6&%$RGBG$\"\"\"\"\"!$F4F4F5-%+AXESLABELSG6$%# u1G%#u2G" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Cur ve 1" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"PG$\"+,>J;I!#7" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 438 "L:=u1^2+u2^2-lambda*G:\nsol :=evalf(allvalues(solve(\{diff(L,u1),diff(L,u2),diff(L,lambda)\},\{u1, u2,lambda\}))):\np2:=plot([subs(sol[1],[u1,u2])],style=point,symbol=CI RCLE,color=GREEN):\np3:=plot([subs(sol[2],[u1,u2])],style=point,symbol =CIRCLE,color=BLUE):\np4:=plot([subs(sol[3],[u1,u2])],style=point,symb ol=CIRCLE,color=MAGENTA):\ndisplay(\{p1,p2,p3,p4\});\nmap(Re,subs(sol[ 1],[u1,u2]));\nmap(Re,subs(sol[2],[u1,u2]));\nmap(Re,subs(sol[3],[u1,u 2]));" }}{PARA 13 "" 1 "" {GLPLOT2D 380 380 380 {PLOTDATA 2 "6(-%'CURV ESG6&7#7$$\"*a>+D\"!\"*$\"+^uo**\\F*-%'COLOURG6&%$RGBG$\"\"!F2$\"*++++ \"!\")F1-%&STYLEG6#%&POINTG-%'SYMBOLG6#%'CIRCLEG-F$6&7#7$$\"+pK%e\"HF* $\"+VL^N5F*-F.6&F0F1F1F3F6F:-F$6$X,%)anythingG6\"6#/%.source_rtableGX, FKFL6\"[gl'!%\"!!#[[l\"[s\"#405F0000000000000000000000000000C011789ABC DF0124C014000000000000C011595E0595E05AC013736EC736EC73C0111D950C83FB73 C012666666666666C0110EE500EE500FC012244E3244E324C010CCCCCCCCCCCDC010FA E147AE147BC010C3C3C3C3C3C4C010D5D5D5D5D5D6C010C18F9C18F9C2C010CCCCCCCC CCCDC010737373737374C00F191919191918C0105DA895DA895EC00E666666666666C0 10232323232323C00C868686868686C00FF3831F3831F4C00B333333333333C00FA5A5 A5A5A5A6C009F3F3F3F3F3F3C00F2BB512BB512CC008000000000000C00F0505050505 05C007616161616161C00E666666666666C004D70A3D70A3D7C00E6438A5953E18C004 CEFA8D9DF51BC00E63A1E717863AC004CCCCCCCCCCCDC00DB5EC6438A595C0024A139B C75A6BC00D863A1E717864C00199999999999AC00D07A022DC0D12BFFF8A5953E17F75 C00CA8D255CB6A8DBFFCCCCCCCCCCCCDC00C5953E17F7490BFFA808B70344A13C00BCB 6A8D255CB7BFF6666666666666C00BAB07A022DC0DBFF576BD8C8714B2C00B33333333 3333BFF1FFFFFFFFFFFFC00AF7AA450F7AA4BFF07711DC47711EC00AE59FCE59FCE5BF F0000000000000C00A39274B039274BFE71B62D3F1B62EC009ED61BED61BEDBFE33333 33333333C0097AA450F7AA45BFDA9143DEA91440C008F523AF523AF5BFC99999999999 9AC008BC2156EBC215BFBBAF0855BAF08CC0080000000000003FC8F5C28F5C28DAC007 FD5FD5FD5FD63FC96F96F96F96F3C007FC780E1FC7803FC999999999999AC0072B52B5 2B52B53FDFC0FC0FC0FC0EC006E1FC780E1FC73FE3333333333333C006594594594594 3FE9651651651650C005C780E1FC780E3FF0000000000000C0058738738738733FF174 D74D74D74DC004CCCCCCCCCCCD3FF5AE147AE147ACC004B277F44C118E3FF631BCB564 EFE8C004A7EF9DB22D0E3FF6666666666666C003C869536202ED3FFAC405D9F7390DC0 03604189374BC73FFCCCCCCCCCCCCDC002DE5AB277F44C3FFF564EFE898232C0021893 74BC6A7F400199999999999AC001F44C118DE5AB4001F44C118DE5ABC0019999999999 9A4002D70A3D70A3D6C000F7BDEF7BDEF840042AF122AF122BC000AAAAAAAAAAAA4004 CCCCCCCCCCCDBFFFDEF7BDEF7BDF400655E2455E2456BFFE4924924924924008000000 000000BFFDCE739CE739CE400880D3680D3681BFFCCCCCCCCCCCCD40098F5C28F5C28F BFFB95CEB240795D400A97B425ED097BBFFADEDEDEDEDEDF400B333333333333BFF936 FE1A8C5370400C9B7F0D4629B8BFF71B1B1B1B1B1B400E666666666666BFF6D82D82D8 2D83400E9F49F49F49F4BFF6666666666666400F000000000000BFF4239E0D5B450240 103C1AB68A0474BFF26666666666654010CCCCCCCCCCCDBFF15B450239E0D54011239E 0D5B4502BFF00000000000004011947AE147AE14BFEC8C20563B48C34011F7EA712DCF 7EBFE8B60B60B60B644012666666666666BFE5CF7EA712DCF94012B9EFD4E25B9FBFE3 3333333333334013051EB851EB85BFDBF258BF258BF4401358BF258BF259BFC9999999 99999A4013D1EB851EB852BFC45D1745D1745E4013D61BED61BED63FC999999999999A 4013FAE147AE147B3FCA83A83A83A83B4013F8AF8AF8AF8B3FE3333333333333401380 00000000003FEFC57C57C57C5C40126666666666663FF000000000000040126147AE14 7AE13FF5BED61BED61BF4010CCCCCCCCCCCD3FF666666666666640109EB851EB851F3F FA2FC962FC9631400E6666666666663FFCCCCCCCCCCCCD400C70A3D70A3D713FFE1AF2 86BCA1B0400B3333333333333FFF8E38E38E38E54009D27D27D27D274000BCA1AF286B CA4008000000000000400199999999999A40065C28F5C28F5C4002473C1AB68A054004 CCCCCCCCCCCD4002CCCCCCCCCCCD400399999999999A4003AB68A0473C1B4001999999 99999A4004CCCCCCCCCCCD3FFE000000000001400505B05B05B05B3FFCCCCCCCCCCCCD 40052727272727283FFC18181818181840063518A6DFC3523FF6666666666666400709 09090909093FF1EDEDEDEDEDEE40076480F2B9D6483FF0000000000000400800000000 00003FE970A3D70A3D72400880D3680D36813FE33333333333334008BE2BE2BE2BE33F E03A83A83A83A740098915789157893FC999999999999A400A444444444445BFB55555 55555566400A915789157892BFC999999999999A400B333333333333BFDC7AE147AE14 73400B8DE5AB277F45BFE3333333333333400BB22D0E560419BFE52F1A9FBE76CA400C 77F44C118DE6BFF0000000000000400CF9DB22D0E561BFF38D4FDF3B645C400D6202EC FB9C87BFF6666666666666400E4189374BC6A8BFFC83126E978D52400E4C118DE5AB28 BFFCCCCCCCCCCCCD400E666666666666BFFD851EB851EB81400F20D20D20D20DC00199 999999999A400F611A7B9611A8C002944DAEC944DB400FF2DF2DF2DF2DC004CCCCCCCC CCCD40103DCB08D3DCB0C006E1FC780E1FC64010627627627627C00800000000000040 10CB08D3DCB08CC00B2FAB4152FAB24010CB7CB7CB7CB7C00B3333333333334010CCCC CCCCCCCDC00B3D70A3D70A4340112ADD7842ADD7C00E6666666666664011475EA475EA 47C00F5B8A15B8A15A40118A1EF548A1EFC010CCCCCCCCCCCD4011C37DAC37DAC3C011 C37DAC37DAC34011E960724E9607C01266666666666640123F9CB3F9CB3FC013D9364D 9364D9401248A1EF548A1FC01400000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000[gl'!% \"!!#cz\"gr\"#C011789ABCDF0124C014000000000000C011595E0595E05AC013736E C736EC73C0111D950C83FB73C012666666666666C0110EE500EE500FC012244E3244E3 24C010CCCCCCCCCCCDC010FAE147AE147BC010C3C3C3C3C3C4C010D5D5D5D5D5D6C010 C18F9C18F9C2C010CCCCCCCCCCCDC010737373737374C00F191919191918C0105DA895 DA895EC00E666666666666C010232323232323C00C868686868686C00FF3831F3831F4 C00B333333333333C00FA5A5A5A5A5A6C009F3F3F3F3F3F3C00F2BB512BB512CC00800 0000000000C00F050505050505C007616161616161C00E666666666666C004D70A3D70 A3D7C00E6438A5953E18C004CEFA8D9DF51BC00E63A1E717863AC004CCCCCCCCCCCDC0 0DB5EC6438A595C0024A139BC75A6BC00D863A1E717864C00199999999999AC00D07A0 22DC0D12BFFF8A5953E17F75C00CA8D255CB6A8DBFFCCCCCCCCCCCCDC00C5953E17F74 90BFFA808B70344A13C00BCB6A8D255CB7BFF6666666666666C00BAB07A022DC0DBFF5 76BD8C8714B2C00B333333333333BFF1FFFFFFFFFFFFC00AF7AA450F7AA4BFF07711DC 47711EC00AE59FCE59FCE5BFF0000000000000C00A39274B039274BFE71B62D3F1B62E C009ED61BED61BEDBFE3333333333333C0097AA450F7AA45BFDA9143DEA91440C008F5 23AF523AF5BFC999999999999AC008BC2156EBC215BFBBAF0855BAF08CC00800000000 00003FC8F5C28F5C28DAC007FD5FD5FD5FD63FC96F96F96F96F3C007FC780E1FC7803F C999999999999AC0072B52B52B52B53FDFC0FC0FC0FC0EC006E1FC780E1FC73FE33333 33333333C0065945945945943FE9651651651650C005C780E1FC780E3FF00000000000 00C0058738738738733FF174D74D74D74DC004CCCCCCCCCCCD3FF5AE147AE147ACC004 B277F44C118E3FF631BCB564EFE8C004A7EF9DB22D0E3FF6666666666666C003C86953 6202ED3FFAC405D9F7390DC003604189374BC73FFCCCCCCCCCCCCDC002DE5AB277F44C 3FFF564EFE898232C002189374BC6A7F400199999999999AC001F44C118DE5AB4001F4 4C118DE5ABC00199999999999A4002D70A3D70A3D6C000F7BDEF7BDEF840042AF122AF 122BC000AAAAAAAAAAAA4004CCCCCCCCCCCDBFFFDEF7BDEF7BDF400655E2455E2456BF FE4924924924924008000000000000BFFDCE739CE739CE400880D3680D3681BFFCCCCC CCCCCCCD40098F5C28F5C28FBFFB95CEB240795D400A97B425ED097BBFFADEDEDEDEDE DF400B333333333333BFF936FE1A8C5370400C9B7F0D4629B8BFF71B1B1B1B1B1B400E 666666666666BFF6D82D82D82D83400E9F49F49F49F4BFF6666666666666400F000000 000000BFF4239E0D5B450240103C1AB68A0474BFF26666666666654010CCCCCCCCCCCD BFF15B450239E0D54011239E0D5B4502BFF00000000000004011947AE147AE14BFEC8C 20563B48C34011F7EA712DCF7EBFE8B60B60B60B644012666666666666BFE5CF7EA712 DCF94012B9EFD4E25B9FBFE33333333333334013051EB851EB85BFDBF258BF258BF440 1358BF258BF259BFC999999999999A4013D1EB851EB852BFC45D1745D1745E4013D61B ED61BED63FC999999999999A4013FAE147AE147B3FCA83A83A83A83B4013F8AF8AF8AF 8B3FE333333333333340138000000000003FEFC57C57C57C5C40126666666666663FF0 00000000000040126147AE147AE13FF5BED61BED61BF4010CCCCCCCCCCCD3FF6666666 66666640109EB851EB851F3FFA2FC962FC9631400E6666666666663FFCCCCCCCCCCCCD 400C70A3D70A3D713FFE1AF286BCA1B0400B3333333333333FFF8E38E38E38E54009D2 7D27D27D274000BCA1AF286BCA4008000000000000400199999999999A40065C28F5C2 8F5C4002473C1AB68A054004CCCCCCCCCCCD4002CCCCCCCCCCCD400399999999999A40 03AB68A0473C1B400199999999999A4004CCCCCCCCCCCD3FFE000000000001400505B0 5B05B05B3FFCCCCCCCCCCCCD40052727272727283FFC18181818181840063518A6DFC3 523FF666666666666640070909090909093FF1EDEDEDEDEDEE40076480F2B9D6483FF0 00000000000040080000000000003FE970A3D70A3D72400880D3680D36813FE3333333 3333334008BE2BE2BE2BE33FE03A83A83A83A740098915789157893FC999999999999A 400A444444444445BFB5555555555566400A915789157892BFC999999999999A400B33 3333333333BFDC7AE147AE1473400B8DE5AB277F45BFE3333333333333400BB22D0E56 0419BFE52F1A9FBE76CA400C77F44C118DE6BFF0000000000000400CF9DB22D0E561BF F38D4FDF3B645C400D6202ECFB9C87BFF6666666666666400E4189374BC6A8BFFC8312 6E978D52400E4C118DE5AB28BFFCCCCCCCCCCCCD400E666666666666BFFD851EB851EB 81400F20D20D20D20DC00199999999999A400F611A7B9611A8C002944DAEC944DB400F F2DF2DF2DF2DC004CCCCCCCCCCCD40103DCB08D3DCB0C006E1FC780E1FC64010627627 627627C0080000000000004010CB08D3DCB08CC00B2FAB4152FAB24010CB7CB7CB7CB7 C00B3333333333334010CCCCCCCCCCCDC00B3D70A3D70A4340112ADD7842ADD7C00E66 66666666664011475EA475EA47C00F5B8A15B8A15A40118A1EF548A1EFC010CCCCCCCC CCCD4011C37DAC37DAC3C011C37DAC37DAC34011E960724E9607C01266666666666640 123F9CB3F9CB3FC013D9364D9364D9401248A1EF548A1FC014000000000000-F.6&F0$ \"\"\"F2F1F1-F$6&7#7$$!+C_%3u#F*$\"+h?*zk*!#5-F.6&F0F3F1F3F6F:-%+AXESL ABELSG6%Q!FQF^o-%%FONTG6#%(DEFAULTG-%%VIEWG6$FboFbo" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" " Curve 4" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"*a>+D\"!\"*$\"+^uo** \\F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+pK%e\"H!\"*$\"+VL^N5F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+C_%3u#!\"*$\"+h?*zk*!#5" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 270 "with(LinearAlgebra):\n#G:=- (u1^2+u2^2-R^2);\ngradG:=;\niGradNorm:=1/sqrt(g radG[1]^2+gradG[2]^2);\nuGradG:=iGradNorm*gradG;\nkron:=uGradG.Transpo se(uGradG);\nW:=(kron-<<1,0>|<0,1>>).<|>;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 187 "evalf(subs(sol[1],iGradNorm*Eigenvalues(W)));\nevalf(subs(sol [2],iGradNorm*Eigenvalues(W)));\nevalf(subs(sol[3],iGradNorm*Eigenvalu es(W)));\n#evalf(subs(u1=0,u2=R,iGradNorm*Eigenvalues(W)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&gradGG-%'RTABLEG6%\"*/y.V\"-%'MATRIXG6#7$ 7#,&%#u1G!\"\"#\"\"\"\"#5F27#F0&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*iGradNormG,$*&\"#5\"\"\",(*&\"$+\"F()%#u1G\"\"#F( F(*&\"#?F(F-F(!\"\"\"$,\"F(#F1F.F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%'uGradGG-%'RTABLEG6%\"*cZGO\"-%'MATRIXG6#7$7#,$*(\"#5\"\"\",(*&\"$+ \"F1)%#u1G\"\"#F1F1*&\"#?F1F6F1!\"\"\"$,\"F1#F:F7,&F6F:#F1F0F1F1F17#,$ *&F0F1F2F %%kronG-%'RTABLEG6%\"*%ogi8-%'MATRIXG6#7$7$,$*(\"$+\"\"\"\",(*&F0F1)%# u1G\"\"#F1F1*&\"#?F1F5F1!\"\"\"$,\"F1F9,&F5F9#F1\"#5F1F6F1,$*(F0F1F2F9 F;F1F97$F>,$*&F0F1F2F9F1%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %\"WG-%'RTABLEG6%\"*?9ON\"-%'MATRIXG6#7$7$,&*(\"$+\"\"\"\",(*&F0F1)%#u 1G\"\"#F1F1*&\"#?F1F5F1!\"\"\"$,\"F1F9,&F5F9#F1\"#5F1F6F9F1F1\"\"!7$,$ *(F0F1F2F9F;F1F1F>%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTAB LEG6%\"*%3gr8-%'MATRIXG6#7$7#$\"\"!F-7#^$$\"+m3j!***!#5$!+\">46[*!#?&% 'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"* 'pju8-%'MATRIXG6#7$7#$\"\"!F-7#^$$\"+kQ)zu$!#6$\"+S\\[+R!#?&%'VectorG6 #%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*g&Gy8-%'M ATRIXG6#7$7#$\"\"!F-7#^$$\"+?qmgO!#6$!+V5#Hg\"!#?&%'VectorG6#%'columnG " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "s:=solve(G,u2);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"sG,(#\"$***\"$+#\"\"\"*&#F)\"\"#F) *$)%#u1GF,F)F)!\"\"*&#F)\"#5F)F/F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 149 "subs(sol[1],diff(s,u1$2)/(1+diff(s,u1)^2)^(3/2));\ns ubs(sol[2],diff(s,u1$2)/(1+diff(s,u1)^2)^(3/2));\nsubs(sol[3],diff(s,u 1$2)/(1+diff(s,u1)^2)^(3/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$!+ ^3j!***!#5$\"+s\"46[*!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$!+jQ)zu $!#6$!+R\\[+R!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$!+?qmgO!#6$\"+U 5#Hg\"!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "6 \+ 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 143037804 136284756 136260684 135361420 137160084 137463696 137828560 }{RTABLE M7R0 I6RTABLE_SAVE/143037804X*%)anythingG6"6"[gl!#%!!!"#"#,&%#u1G!""#""""#5F+F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136284756X*%)anythingG6"6"[gl!#%!!!"#"#,$*&,(*$%#u1G""#"$+"F+!#?" $,""""#!""F,,&F+F2#F0"#5F0F0F5,$*$F)F1!#5F& } {RTABLE M7R0 I6RTABLE_SAVE/136260684X,%)anythingG6"6"[gl!"%!!!#%"#"#,$*&,(*$%#u1G""#"$+"F+!# ?"$,""""!"",&F+F1#F0"#5F0F,F-,$*&F)F1F2F0!$+"F5,$*$F)F1F-F& } {RTABLE M7R0 I6RTABLE_SAVE/135361420X,%)anythingG6"6"[gl!"%!!!#%"#"#,&*&,(*$%#u1G""#"$+"F+!# ?"$,""""!"",&F+F1#F0"#5F0F,!$+"F0F0,$*&F)F1F2F0F-""!F8F& } {RTABLE M7R0 I6RTABLE_SAVE/137160084X*%)anythingG6"6"[gl!#%!!!"#"#$""!F(^$$"+m3j!***!#5$!+"> 46[*!#?F& } {RTABLE M7R0 I6RTABLE_SAVE/137463696X*%)anythingG6"6"[gl!#%!!!"#"#$""!F(^$$"+kQ)zu$!#6$"+S\[ +R!#?F& } {RTABLE M7R0 I6RTABLE_SAVE/137828560X*%)anythingG6"6"[gl!#%!!!"#"#$""!F(^$$"+?qmgO!#6$!+V5#H g"!#?F& } openturns-1.9/validation/src/Curvature.txt000066400000000000000000000115541307543307100210730ustar00rootroot00000000000000> restart: > G:=5-u2-1/2*(u1-1/10)^2; > sol:=solve(G<0); > with(plots): > p1:=implicitplot(G,u1=-5..5,u2=-5..5): > display(p1); > P:=evalf(Int(int(1/(2*Pi)*exp(-(u1^2+u2^2)/2),u2=5-1/2*(u1-1/10)^2..in > finity),u1=-infinity..infinity)); 2 (u1 - 1/10) G := 5 - u2 - ------------ 2 999 2 sol := {--- - 1/2 u1 + 1/10 u1 < u2} 200 P := 0.003016311901 > L:=u1^2+u2^2-lambda*G: > sol:=evalf(allvalues(solve({diff(L,u1),diff(L,u2),diff(L,lambda)},{u1, > u2,lambda}))): > p2:=plot([subs(sol[1],[u1,u2])],style=point,symbol=CIRCLE,color=GREEN) > : > p3:=plot([subs(sol[2],[u1,u2])],style=point,symbol=CIRCLE,color=BLUE): > p4:=plot([subs(sol[3],[u1,u2])],style=point,symbol=CIRCLE,color=MAGENT > A): > display({p1,p2,p3,p4}); > map(Re,subs(sol[1],[u1,u2])); > map(Re,subs(sol[2],[u1,u2])); > map(Re,subs(sol[3],[u1,u2])); [0.125001954, 4.999687451] [2.915843269, 1.035513343] [-2.740845224, 0.9647992061] > with(LinearAlgebra): > #G:=-(u1^2+u2^2-R^2); > gradG:=; > iGradNorm:=1/sqrt(gradG[1]^2+gradG[2]^2); > uGradG:=iGradNorm*gradG; > kron:=uGradG.Transpose(uGradG); > W:=(kron-<<1,0>|<0,1>>).<| (G,u1),u2),diff(G,u2$2)>>; > evalf(subs(sol[1],iGradNorm*Eigenvalues(W))); > evalf(subs(sol[2],iGradNorm*Eigenvalues(W))); > evalf(subs(sol[3],iGradNorm*Eigenvalues(W))); > #evalf(subs(u1=0,u2=R,iGradNorm*Eigenvalues(W))); [-u1 + 1/10] gradG := [ ] [ -1 ] 10 iGradNorm := -------------------------- 2 1/2 (100 u1 - 20 u1 + 101) [ 10 (-u1 + 1/10) ] [ -------------------------- ] [ 2 1/2 ] [ (100 u1 - 20 u1 + 101) ] uGradG := [ ] [ 10 ] [- --------------------------] [ 2 1/2] [ (100 u1 - 20 u1 + 101) ] [ 2 ] [100 (-u1 + 1/10) 100 (-u1 + 1/10)] [----------------- - ----------------] kron := [ %1 %1 ] [ ] [ 100 (-u1 + 1/10) 100 ] [- ---------------- --- ] [ %1 %1 ] 2 %1 := 100 u1 - 20 u1 + 101 [ 2 ] [ 100 (-u1 + 1/10) ] [- --------------------- + 1 0] [ 2 ] W := [ 100 u1 - 20 u1 + 101 ] [ ] [ 100 (-u1 + 1/10) ] [ --------------------- 0] [ 2 ] [ 100 u1 - 20 u1 + 101 ] [ 0. ] [ ] [ -10 ] [0.9990630866 - 0.9481109191 10 I] [ 0. ] [ ] [ -10 ] [0.03747983864 + 0.3900484940 10 I] [ 0. ] [ ] [ -10 ] [0.03660667020 - 0.1602921043 10 I] > s:=solve(G,u2); 999 2 s := --- - 1/2 u1 + 1/10 u1 200 > subs(sol[1],diff(s,u1$2)/(1+diff(s,u1)^2)^(3/2)); > subs(sol[2],diff(s,u1$2)/(1+diff(s,u1)^2)^(3/2)); > subs(sol[3],diff(s,u1$2)/(1+diff(s,u1)^2)^(3/2)); -10 -0.9990630851 + 0.9481109172 10 I -10 -0.03747983863 - 0.3900484939 10 I -10 -0.03660667020 + 0.1602921042 10 I > openturns-1.9/validation/src/DataMultinomialCDF.mw000066400000000000000000001404131307543307100223150ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYwLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRIlNGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSRzdW1GJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Ky1JJm1mcmFjR0YkNigtRiM2Jy1GLDYlUSJkRidGL0YyLUY2Ni1RIiFGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMTExMTExMWVtRicvRk5GZnAtRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRIm5GJ0YvRjJGYnAtRiM2Ki1GLDYlUSJrRidGL0YyRmJwRmhwLUZmbzYkLUYjNiVGX3AtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZbckZgcUY5RmJwRmhwLUZmbzYkLUYjNidGW3FGZ3FGX3AtRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZqcUZcckZgcUY5RmJwLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zpci8lKWJldmVsbGVkR0Y9RmhwLUklbXN1cEdGJDYlLUZmbzYkLUYjNiMtRltwNigtSSNtbkdGJDYkRmZyRjktRiM2JUZfcEZhckZnc0ZkckZnckZqckZcc0Y5LUYjNiNGW3EvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRidGYHEtRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRmhzNiRGYHRGOS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZqcUZbb0ZfcEY5LUY2Ni1RIjtGJ0Y5RjtGZHRGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSlzaW1wbGlmeUYnRi9GMi1GZm82JC1GIzYlRlxvRmF0LUYsNiVRKXN5bWJvbGljRidGL0YyRjlGNQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiotSSpmYWN0b3JpYWxHJSpwcm90ZWN0ZWRHNiNJIm5HNiIiIiIpKiQsJkkiZEdGKEYpRilGKSEiIkYnRiktRiQ2IywmRidGKUYtRi5GLiwmKiosJkYnRi5GLkYpRiksKEYtRilGLkYpRidGLkYuLUkkZXhwRzYkRiVJKF9zeXNsaWJHRig2IyNGLiIiI0YpLUkrV2hpdHRha2VyTUdGODYlLCZGLUY7RidGOywoRicjRilGPEYtRjtGQkYpRilGKUYpKiosJkYtRilGLkYpRilGNUYuRjZGKS1GPjYlLChGLUY7RidGO0YpRilGQUYpRilGKUYp Qyg+SSNmZEc2Ii1JJmZvcGVuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiRRM011bHRpbm9taWFsQ0RGLmNzdkYlSSZXUklURUdGJSEiIj8oSSJkR0YlIiIiRjEiJCsiSSV0cnVlR0YpQyU+SSR2YWxHRiUtJkkmZXZhbGZHRik2IyIjXTYjLUklc3Vic0dGKTYkL0kibkdGJUYwSSJTR0YlLUkmcHJpbnRHRik2IzckRjBGNi1JKGZwcmludGZHRig2JUYkUSglLjIwZVxuRiVGNkYuLUknZmNsb3NlR0YoNiNGJEYu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIlMpKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEjXQ== NyQiIiMkIlN4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4ISNd NyQiIiQkIlMtKysrKysrKysrKysrKysrKysrKysrXTdgISNd NyQiIiUkIlMtKysrKysrKysrKysrKysrKysrKysrK1dMISNd NyQiIiYkIlNrJTRSTil6VXNvSmhkP11ZNFJOKXpVc28iKSk+ISNd NyQiIickIlN0TCdlI0dZLHJbZCRlMkFzPF0kKSozPjRqeEs2ISNd NyQiIigkIlMmKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcN2BwaVV1JUdDJyEjXg== NyQiIikkIlMuX3VAMClcWkU0XERfdlIqUlgpb2BoND4jXEwhI14= NyQiIiokIlMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlI2c3YiISNe NyQiIzUkIlM4a1ZoXSFbSFooUno+SCRmPTdQRWhXJVtDWiEqISNf NyQiIzYkIlNDKmVlOFJ3RCEpZVIkcGgnKj07UksmKVw2Qj8kZSUhI18= NyQiIzckIlNLWVVhPlZ1JCk+VVM4RykpKnAoeVgnZlpePyMqRyMhI18= NyQiIzgkIlNcXGd6X0koPnQ1O0kkXHMlcDAiR2YmSGZ4I0g2ISNf NyQiIzkkIlM0WXNrPUsqXDZSPWBxTyUzdi03N3pmQ1M0YiEjYA== NyQiIzokIlM6OSYqbyNmWF5MbGY0VzVOXCdlMFwlPVssOG0jISNg NyQiIzskIlNjaXhyXHhqdWInZVspbyVbVFIlKkcvVSF6L3U3ISNg NyQiIzwkIlNZN2lPd1g9a2UwcWNCbm56J0hseicpRyZwXGchI2E= NyQiIz0kIlMzaltdNmsiMz8qcHhFPXJEJHA7InljJmYpR15HISNh NyQiIz4kIlMrKysrKysrK11pbFopPT0wUjdmKmY+Um1NOCEjYQ== NyQiIz8kIlNCV2J4YlRVVmBxOyUzdG9DSl5BPW8sXyEzaSEjYg== NyQiI0AkIlNhS1pZJSkpM2opKT5nVnJzQjlmUT5tO3dOMihHISNi NyQiI0EkIlNbJipvdiFbSGRQO2Z1byR6U3EqR3FlbWV0LUsiISNi NyQiI0IkIlNFKlxyXSMqZT9xJUgzeCo9NiNvXCZSQDFmUzcvJyEjYw== NyQiI0MkIlMrKysrJT1MbmgiZlxLbHRjK2JzO3cqXCc+XkYhI2M= NyQiI0QkIlN5UyU0JGUrRDRARzJXYlwsLTApUUQ9YD50QyIhI2M= NyQiI0UkIlNWL3QoNG4zPiVRTSp5b21sd3VZQnh0JSkzOGomISNk NyQiI0YkIlMnZTFdXm8lcGYqWyYqUSlmNmR0ZiNwR2tISkJgIyEjZA== NyQiI0ckIlN5XTUnUUBJeTRVM2JGeiFbLVVUIT4qcE1dTTYhI2Q= NyQiI0gkIlM7WS1xMiZHQ3QpXGsuRkF2bishSDVwXXVZMSYhI2U= NyQiI0kkIlMlKVtYeUtwcFZpTi56YUM0bjIoeihIdTdSYEEhI2U= NyQiI0okIlNwIkdrW1YnM3lJY0J4YEFuKCl5IXkxQmRsUSoqKiEjZg== NyQiI0skIlNMYXpdXUQ3V0R6I1FURHdiamIuJW9WbSUpPVchI2Y= NyQiI0wkIlMxdjRGXUhMcCMqMy0oPlIzdnlQJW9HOCNmIls+ISNm NyQiI00kIlNrb1otWyQqb0E9YTw5R3V5OHQlR11KNiE+bCYpISNn NyQiI04kIlMjUlZ2TTkjKXAjPVRjaktzaE0nem5YOHZ0ZHYkISNn NyQiI08kIlMtJFw4SGVnIWZOUlN6KDQkMypwLDxUTV40RmsiISNn NyQiI1AkIlNgbGs7JXBvNGVPNV86N3EuX0QqZSUpKVslW25yISNo NyQiI1EkIlNATSdbSkNeL3ZlRHBYYkR0JmZ4bFsqNFIrNyQhI2g= NyQiI1IkIlNiW2k/aXNlPip5W1JmQW1nP3VMJipSV0deTiIhI2g= NyQiI1MkIlNYKXlsa3BZRygpKT0hKiopeV40UWk9U1NgRDJ0ZSEjaQ== NyQiI1QkIlNxb2xXKUgoSFpMJVE6MUlnM1lRcjN3J1E0U0QhI2k= NyQiI1UkIlMkbyZ5dSgpSC5XQSdmaidIbGNhI0gjPj9rUFInNCIhI2k= NyQiI1YkIlMoZicqKlJ0X3RkNWB0SmBwY1hMI3lyJSpmN0xzJSEjag== NyQiI1ckIlNiMEg0RzdOIlE/M0BlZEt5WDgnUnpxUi9KPyEjag== NyQiI1gkIlMiSEQzYWxxUylIMy4zd2tBOCRRLWkxKj4henIpISNr NyQiI1kkIlNSNS8pWylRNXJRIkd6MF0mKjMmPnFyKSpla15OUCEjaw== NyQiI1okIlM/WCtAQ2MqMyR6N1s8ZkNtXWAyTCRwLVF6ZiIhI2s= NyQiI1skIlM+JT4rSSR6aDpoSjNnNDNTIWUyTSo9bSV5ViNvISNs NyQiI1wkIlM4YiNwWCMqPVRkbSwnKilHK1JEVidbYD4wRyo0SCEjbA== NyQiI10kIlNTOzUrJFEtJD4+ZiNSSGg4QFIoKjQjKlIkZiEqUTchI2w= NyQiI14kIlM7ISk0VEI1XDk/c2dJOydIQEhyd2JVI1Emb0UmISNt NyQiI18kIlMhKTRVajxnSWUuKSpvJlxDISlSJVxUS3NNaSRlQiMhI20= NyQiI2AkIlNcOFA2KlJycTcsN1NBaU4qUStUQHVKdTd5JSohI24= NyQiI2EkIlMxWktCaG1hQSIpKXk+aERXail5KW9SUyYpNEQsJSEjbg== NyQiI2IkIlM3LEdvQDFmLCdcOyN5KCo9TF8nZndqXFpNa3AiISNu NyQiI2MkIlM+VCopSG45LGRBZjgqcG5rJW9dcURKZz01anIhI28= NyQiI2QkIlM7JT5AbztuTmxTcUc/YDV5OWNyYTJRMzMtJCEjbw== NyQiI2UkIlNbNSVvOkpMJyozTCdma14qM0xNKmZRIipwP1FzNyEjbw== NyQiI2YkIlNgRmVSVEpWXjZabyIpcFpiJlxaQjlRNDNJTiYhI3A= NyQiI2ckIlN5SmNgTjghPTxSVzdCb1poNnlqSSRvX1hcQSEjcA== NyQiI2gkIlMlUlFoIzQnKj49KltyTkJlYyNSKFEmR3coZSg0VSUqISNx NyQiI2kkIlNlITRsRylIXUEmUSVvKFw1NV4nKlxGZ2cyISkqZVIhI3E= NyQiI2okIlNJa1VoR3BDcyQzOnlScSUqKjNRTzp6ZW09ZTshI3E= NyQiI2skIlMmeStkP2RhNlQ9JXkqZncrTkxlYyJ5LydIeiRwISNy NyQiI2wkIlMhUXc+IlxzNGtMbkQyYXJyaERYPSk9YS0qKipHISNy NyQiI20kIlNjKTRfQ3J5cGQmeW9aVnlmJVEkeTkhUm4pKTNAIiEjcg== NyQiI24kIlNdWF06UzElPWlRNSJRNz5MNiJcMitVJSkpR15dISNz NyQiI28kIlMoUmQqPkMob04+aDAiMyRlaWlpUDotXV1vXjUjISNz NyQiI3AkIlMneiJIPF0tTC44RCgqWyMqW01jWCdmYj1aNmB3KSEjdA== NyQiI3EkIlN6M2khKltwdyR6QTdMOW5TT0RwNUoxITNJWU8hI3Q= NyQiI3IkIlNyKDM/IipHeFJQYjIwel5xc19dbmVnLSNbOjohI3Q= NyQiI3MkIlNMVzpbQC41VSlvYFMzTCZbcy4hM201SyU9JEgnISN1 NyQiI3QkIlNQdVhMKSpHLWs6YWxdcCNbVkwnRyZSLEx2NWgjISN1 NyQiI3UkIlM+XyFmemUpW2ZBOihlNjtTXCd6XVVHSk9XIzMiISN1 NyQiI3YkIlM3JDRTJFxtPlVrNWVcZjxAN3JZbyRIRypvJFslISN2 NyQiI3ckIlNGLjAlMzU5OzhqbTo0P14zYE9DVU5LU2QmPSEjdg== NyQiI3gkIlN4R2ZgRiMpPSc+bDRYK1UtXC1vKWZbKj5GWW4oISN3 NyQiI3kkIlN2UitdRWFaNHRaO005V0MkKlJ1ZkpGTVtySiEjdw== NyQiI3okIlNfNWhacyopKikqKSpSOW1EcSxKJVE1LyxlOWc0OCEjdw== NyQiIyEpJCJTKioqPT5mVlspZVUkZnpOY2twI0hgVyUqNC50LmEhI3g= NyQiIyIpJCJTKCopeSVmN1ZvUC8iKmZveXoiKkh0ck4lUWYnM0dBISN4 NyQiIyMpJCJTIW9CJD45TyFIJVxJVSRmYWsjcCh6NFY7KTRQIT0qISN5 NyQiIyQpJCJTalExTFU8dkg5XywnKUcpUV54J2ZpIzMnNCQqelAhI3k= NyQiIyUpJCJTaCplRCxsQil5S247dzJbbzQzZmlYMih6X2IiISN5 NyQiIyYpJCJTTyxRLnFpKFEneis9Tm8zKWVxI3lmOExaKVxSJyEjeg== NyQiIycpJCJTQ1UwcUA0PzksTnZgXy4hKVxzS0Y6MiNReGkjISN6 NyQiIygpJCJTWHROUT5KRnhhMDMkb0I+diZSYndsbCRcIXo1ISN6 NyQiIykpJCJTTHEhM08lKj5sKUdzMlMnPmNjZ0hdKkghXFoiR1chIyEp NyQiIyopJCJTPykpUiIqWylSKSl5OSVSckooPWZQOyJHI3luYmciPSEjISk= NyQiIyEqJCJTaid6J3AiSCF6YnFnWncpPiUpRzhfViVHbSdHTFcoISMiKQ== NyQiIyIqJCJTbC5jNF9dSisqXHl6PyQzRmFyeSgpemlEKSlbSSEjIik= NyQiIyMqJCJTQnkuWFZTPFNnYygzJHk5LTRXJ1tDdVI4Ils3ISMiKQ== NyQiIyQqJCJTLmwjXGhudiVcTG9XJFErYlVVcVNzcyE0TzFeISMjKQ== NyQiIyUqJCJTeCVSZ0klXEJGWmghNEcsI28ob1xPJSlmQk96MyMhIyMp NyQiIyYqJCJTIilvKWU2KzwuakEmKlFbSGI6PUxrbENoekNgKSEjJCk= NyQiIycqJCJTPzZmSip5RHFtJnpbaVNzcjUuKHlULmckKltbJCEjJCk= NyQiIygqJCJTIWZjRjlGZDdQPXZrTSllQl86bHF1QXpgQTkhIyQp NyQiIykqJCJTb24lKilwJGZBenJwV1oqXC9wVE1IcCxEZ08hZSEjJSk= NyQiIyoqJCJTX3EkUSdIPFB6QSwibz5jUk9ZS3pzO2owbE8jISMlKQ== NyQiJCsiJCJTIzN3Q1Z4TUY3JikpMyI0Inl4OXgwWE9DcGZXJyohIyYp JSFH print(); # input placeholder openturns-1.9/validation/src/DebugLinearCombination.mw000066400000000000000000001555731307543307100232750ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZecS1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSNmMUYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRI3gxRidGL0YyLUY2Ni1RIl5GJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMTExMTExMWVtRicvRk5GaW8tSSNtbkdGJDYkUSIzRidGOUZnbi1GNjYtUSIqRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjE2NjY2NjdlbUYnL0ZORmNwRmduLUYsNiVRJHNpbkYnL0YwRj1GOS1JKG1mZW5jZWRHRiQ2JC1GIzYrLUYsNiVRI3gyRidGL0YyRmduLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GZXFGZ24tRlxwNiRRJDIuNUYnRjlGZ25GX3BGZ24tRiw2JVEjeDNGJ0YvRjJGOUZnbi1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGZHFGZnFGZ24tRmpwNiQtRiM2J0Zib0ZnbkZhcUZnbkZecUY5RmVvLUZccDYkUSIyRidGOUZnbi1GNjYtUSIvRidGOUY7Rj4vRkFGMUZCRkRGRkZIRmJwRmRwRmduLUZqcDYkLUYjNiktRlxwNiRRJDEuMEYnRjlGZ25GYXFGZ25GanFGZW9GZHJGOUY1Rk8tRiw2JVEjaDFGJ0YvRjJGX29GZ24tRmpwNiYtRiM2My1GLDYlUSVkaWZmRidGL0YyLUZqcDYkLUYjNidGXG8tRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Ziby1GNjYtUSIkRidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRmRyRjlGYHRGaXMtRmpwNiQtRiM2JkZpcy1GanA2JC1GIzYlRlxvRmB0RmJvRjlGYHRGXnFGOUZgdEZpcy1GanA2JC1GIzYmRmlzRl11RmB0RmpxRjlGYHRGaXMtRmpwNiQtRiM2J0Zcb0ZgdEZecUZmdEZkckY5RmB0RmlzLUZqcDYkLUYjNiZGaXMtRmpwNiQtRiM2JUZcb0ZgdEZqcUY5RmB0Rl5xRjlGYHRGaXMtRmpwNiQtRiM2J0Zcb0ZgdEZqcUZmdEZkckY5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGNUZPRmduLUYsNiVRI2YyRidGL0YyRl9vLUYsNiVRJGV4cEYnRmhwRjktRmpwNiQtRiM2LEZdckZib0ZnbkZfcEZnbkZecUZnbkZhcUZnbkZqcUY5RmduRmdyRmduLUYsNiVRJGNvc0YnRmhwRjktRmpwNiQtRiM2L0Zfc0ZnbkZhcUZnbkZecUZnbkZfcEZnbkZqcUZnbkZdckZnbkZib0Y5RjVGTy1GLDYlUSNoMkYnRi9GMkZfb0Znbi1GanA2Ji1GIzYzRmlzLUZqcDYkLUYjNidGW3dGYHRGYm9GZnRGZHJGOUZgdEZpcy1GanA2JC1GIzYmRmlzLUZqcDYkLUYjNiVGW3dGYHRGYm9GOUZgdEZecUY5RmB0RmlzLUZqcDYkLUYjNiZGaXNGW3lGYHRGanFGOUZgdEZpcy1GanA2JC1GIzYnRlt3RmB0Rl5xRmZ0RmRyRjlGYHRGaXMtRmpwNiQtRiM2JkZpcy1GanA2JC1GIzYlRlt3RmB0RmpxRjlGYHRGXnFGOUZgdEZpcy1GanA2JC1GIzYnRlt3RmB0RmpxRmZ0RmRyRjlGOUZldkZodkY1Rk9GZ25GZ25GZ24tRiw2JVEiZkYnRi9GMkZfby1GXHA2JFEkMC4zRidGOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW29GXG9GYXEtRlxwNiRRJDIuOUYnRjlGaXpGW3dGNUZPRmduLUYsNiVRImhGJ0YvRjJGX29GZ24tRmpwNiYtRiM2M0Zpcy1GanA2JC1GIzYnRmN6RmB0RmJvRmZ0RmRyRjlGYHRGaXMtRmpwNiQtRiM2JkZpcy1GanA2JC1GIzYlRmN6RmB0RmJvRjlGYHRGXnFGOUZgdEZpcy1GanA2JC1GIzYmRmlzRl5cbEZgdEZqcUY5RmB0RmlzLUZqcDYkLUYjNidGY3pGYHRGXnFGZnRGZHJGOUZgdEZpcy1GanA2JC1GIzYmRmlzLUZqcDYkLUYjNiVGY3pGYHRGanFGOUZgdEZecUY5RmB0RmlzLUZqcDYkLUYjNidGY3pGYHRGanFGZnRGZHJGOUY5RmV2Rmh2RjVGT0Znbi1GLDYlUSZldmFsZkYnRi9GMi1GanA2JC1GIzYkLUYsNiVRJXN1YnNGJ0YvRjItRmpwNiQtRiM2L0Ziby1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GXHA2JFEkMS4yRidGOUZgdEZecUZkXmwtRlxwNiRRJDIuM0YnRjlGYHRGanFGZF5sLUZccDYkUSQzLjRGJ0Y5RmB0Rl9bbEY5RjktRjY2LVEiO0YnRjlGO0ZjdEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRJmZ2ZWN0RidGL0YyRl9vLUZqcDYmLUYjNiUtRlxwNiRRJDEuNUYnRjlGYHRGZ3FGOS9GZnZRJyZsYW5nO0YnL0ZpdlEnJnJhbmc7RidGaXpGXG9GYXEtRmpwNiYtRiM2JkZdci1GXHA2JFEkMy41RidGOUZgdC1GXHA2JFEkMC41RidGOUY5Rl1gbEZfYGxGaXpGW3dGYF9sRk9GZ24tRiw2JVEmaHZlY3RGJ0YvRjJGX28tRmpwNiYtRiM2JS1GanA2Ji1GIzYzRmlzLUZqcDYkLUYjNiZGaXMtRmpwNiQtRiM2JkZjX2wtRmpwNiYtRiM2Iy1GXHA2JFEiMUYnRjlGOUZldkZodkZgdEZib0Y5RmB0RmJvRjlGYHRGaXMtRmpwNiQtRiM2JkZpc0ZqYWxGYHRGXnFGOUZgdEZpcy1GanA2JC1GIzYmRmlzRmphbEZgdEZqcUY5RmB0RmlzLUZqcDYkLUYjNiZGaXMtRmpwNiQtRiM2JkZjX2xGXmJsRmB0Rl5xRjlGYHRGXnFGOUZgdEZpcy1GanA2JC1GIzYmRmlzRmFjbEZgdEZqcUY5RmB0RmlzLUZqcDYkLUYjNiZGaXMtRmpwNiQtRiM2JkZjX2xGXmJsRmB0RmpxRjlGYHRGanFGOUY5RmV2Rmh2RmB0LUZqcDYmLUYjNjNGaXMtRmpwNiQtRiM2JkZpcy1GanA2JC1GIzYmRmNfbC1GanA2Ji1GIzYjRmRyRjlGZXZGaHZGYHRGYm9GOUZgdEZib0Y5RmB0RmlzLUZqcDYkLUYjNiZGaXNGaWRsRmB0Rl5xRjlGYHRGaXMtRmpwNiQtRiM2JkZpc0ZpZGxGYHRGanFGOUZgdEZpcy1GanA2JC1GIzYmRmlzLUZqcDYkLUYjNiZGY19sRl1lbEZgdEZecUY5RmB0Rl5xRjlGYHRGaXMtRmpwNiQtRiM2JkZpc0ZdZmxGYHRGanFGOUZgdEZpcy1GanA2JC1GIzYmRmlzLUZqcDYkLUYjNiZGY19sRl1lbEZgdEZqcUY5RmB0RmpxRjlGOUZldkZodkY5RmV2Rmh2RjVGT0ZmXWwtRmpwNiQtRiM2JEZdXmwtRmpwNiQtRiM2L0Zib0ZkXmxGZ15sRmB0Rl5xRmRebEZqXmxGYHRGanFGZF5sRl1fbEZgdEZbYWxGOUY5RmBfbEZnbg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NygkIitzdyYqUjkhIickISskZUR1YCRGJSQhKyI0OWtsI0YlJCIrIylcaF0iKkYlJCIrWmg9X29GJSQiK0xpIXktJkYl LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwQz1oXUI1UyI= NyQ3KCQhK254S148ISInJCIrOXFXblVGJiQiKz8zbi1LRiYkISsnZSk0LzYhIiYkISsjPkY5RSlGJiQhKzUwNFxnRiY3KCQiK008KGVJIyEiKCQhK2Q6WUJoRjUkIStsLy1DWUY1JCIrYkJYImUiRiYkIitoXV8jPiJGJiQiKzYmM3kiKilGNQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkobWZlbmNlZEdGJDYkLUYjNiUtRiw2JC1GIzYoLUkjbW9HRiQ2LVEqJnVtaW51czA7RicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkwtSSNtbkdGJDYkUSIxRidGOC1GNTYtUSIqRidGOEY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjE2NjY2NjdlbUYnL0ZORlctRiw2JC1GIzYnLUYsNiQtRiM2Jy1GLDYkLUYjNiUtSSNtaUdGJDYlUSN4MUYnLyUnaXRhbGljR1EldHJ1ZUYnL0Y5USdpdGFsaWNGJy8lK2V4ZWN1dGFibGVHRj1GOEY4RlMtRiw2JC1GIzYmLUZgbzYlUSRleHBGJy9GZG9GPUY4LUYsNiQtRiM2Jy1GLDYkLUYjNiUtRiw2JC1GIzYoRjRGT0ZTLUYsNiQtRiM2J0Zbb0ZTLUYsNiQtRiM2JS1GYG82JVEjeDJGJ0Zjb0Zmb0Zob0Y4RjhGaG9GOEY4RmhvRjhGOEZob0Y4RjgtRjU2LVEiK0YnRjhGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JC1GIzYlLUZgbzYlUSN4M0YnRmNvRmZvRmhvRjhGOEZob0Y4RjhGaG9GOEY4RmhvRjhGOC1GNTYtUSIvRidGOEY7Rj4vRkFGZW9GQkZERkZGSEZWRlgtRiw2JC1GIzYmLUZgbzYlUSRjb3NGJ0ZhcEY4LUYsNiQtRiM2KS1GLDYkLUYjNiVGT0Zob0Y4RjhGaXEtRiw2JC1GIzYnRmJxRlNGXHJGaG9GOEY4RmlxLUYsNiQtRiM2KEY0Rk9GU0Zfb0Zob0Y4RjhGaG9GOEY4RmhvRjhGOEZob0Y4RjhGaG9GOEY4RmhvRjhGOEZpcS1GLDYkLUYjNictRiw2JC1GIzYpRlxyRlMtRiw2JC1GIzYmLUZgbzYlUSRzaW5GJ0ZhcEY4Rl5zRmhvRjhGOEZTRmpvRmhvRjhGOEZjci1GLDYkLUYjNidGZ3ItRjU2LVEiXkYnRjhGO0Y+RkBGQkZERkZGSC9GS1EsMC4xMTExMTExZW1GJy9GTkZldS1GLDYkLUYjNiUtRlA2JFEiMkYnRjhGaG9GOEY4RmhvRjhGOEZob0Y4RjhGaG9GOA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqKEkjeDFHNiIiIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmKiZGJEYmSSN4MkdGJUYmISIiSSN4M0dGJUYmRiYtSSRjb3NHRik2IywoRiZGMComRi9GJkYxRiZGMEYkRiZGMEYwKipGMUYmLUkkc2luR0YpRjRGJkYnRiYpRjIiIiNGMEYw NzQkISY4diIhIiIkIiZ1RSVGJSQiJkY/JEYlIiIhISZUNSIkISY5RSlGJUYqRiokISYiXGdGJSQiJmZJIyEiIyQhJk43J0YyJCElQ1lGJUYqJCImOmUiRiUkIiZEPiJGJUYqRiokIiZ5IiopRjI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NzQkISY4diIhIiIkIiZ1RSVGJSQiJkY/JEYlIiIhISZUNSIkISY5RSlGJUYqRiokISYiXGdGJSQiJmZJIyEiIyQhJk43J0YyJCElQ1lGJUYqJCImOmUiRiUkIiZEPiJGJUYqRiokIiZ5IiopRjI= Qyg+SSNnMUc2IiwmKiZJI3gxR0YlIiIkLUkkc2luRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJkkjeDJHRiUiIiJJI3gzR0YlJCIjRCEiIkYyRjIqJiwmRihGMkYxRjIiIiMsJiQiIzVGNkYyKiRGM0Y5RjJGNkY2RjY+SSNnMkdGJS1JJDwsPkdGLjYkKiYtSSRleHBHRiw2IywmKiZGKEYyRjFGMkY2RjNGMkYyLUkkY29zR0YsNiMsKEY7RjIqJkYxRjJGM0YyRjJGKEY2RjYtRis2IywmRjFGMiomRjNGMkYoRjlGMkY2PkkiZ0dGJSomRiRGMkY/RjJGMg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwV2JoXUI1UyI= Qyw+SSVncmFkRzYiNyQ3JS1JJWRpZmZHJSpwcm90ZWN0ZWRHNiQmSSJnR0YlNiMiIiJJI3gxR0YlLUYpNiRGLEkjeDJHRiUtRik2JEYsSSN4M0dGJTclLUYpNiQmRi02IyIiI0YwLUYpNiRGOkYzLUYpNiRGOkY2ISIiPkklaGVzc0dGJTc0LUYpNiQmJkYkRi5GLkYwLUYpNiRGR0YzLUYpNiRGR0Y2LUYpNiQmRkhGO0YwLUYpNiRGT0YzLUYpNiRGT0Y2LUYpNiQmRkg2IyIiJEYwLUYpNiRGVkYzLUYpNiRGVkY2LUYpNiQmJkYkRjtGLkYwLUYpNiRGaW5GMy1GKTYkRmluRjYtRik2JCZGam5GO0YwLUYpNiRGYW9GMy1GKTYkRmFvRjYtRik2JCZGam5GV0YwLUYpNiRGaG9GMy1GKTYkRmhvRjZGQS1JJmV2YWxmR0YqNiMtSSVzdWJzR0YqNiYvRjAkIiM3RkEvRjMkIiNCRkEvRjYkIiNNRkFGLUYvLUZecDYjLUZhcDYmRmNwRmZwRmlwRiRGLy1GXnA2Iy1GYXA2JkZjcEZmcEZpcEZDRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwVzhnXUI1UyI= NyQ3JSQiKzI5Z0U1ISIoJCErTjchbyNIRiYkISs3THBeQkYmNyUkISslXDc+ciIhIikkISsnZmUnUkIhIiokISshelt6ZiNGMQ== NzQkIStqRiFbeCkhIigkIiszXSJSeSMhIickIistPXRIP0YoRiYkISs1JG9SZylGKCQhK0IoR0JRJ0YoRilGLSQhK3lbIXpmJUYoJCIrPCVvOWcoISIpJCIrI1wuPjEqISIqJCIrOCVbNFAiRjNGNCQiKzowdE5BRjYkIis9NUdkY0Y2RjdGOyQiK09mYik9IkYz JSFH TTdSMApJPFJUQUJMRV9TQVZFLzE0MDEwMjM1MDYxMTgyNFgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIywoKiYlI3gxRyIiJC0lJHNpbkc2IywmJSN4MkciIiIlI3gzRyQiI0QhIiJGMCQiIzpGNComLCZGKUYwRi9GMCIiIywmJCIjNUY0RjAqJEYxRjlGMEY0JCEjOkY0KiYtJSRleHBHNiMsJiomRilGMEYvRjBGNEYxRjBGMC0lJGNvc0c2IywoJCEjNUY0RjAqJkYvRjBGMUYwRjRGKUYwRjQkISNORjQsKEYoRjJGNyQhI0RGNEZAJCIiJkY0RiY=TTdSMApJPFJUQUJMRV9TQVZFLzE0MDEwMjM1MDYxNTU0NFgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIyooLCYqJiUjeDFHIiIkLSUkc2luRzYjLCYlI3gyRyIiIiUjeDNHJCIjRCEiIkYxRjEqJiwmRipGMUYwRjEiIiMsJiQiIzVGNUYxKiRGMkY4RjFGNUY1RjEtJSRleHBHNiMsJiomRipGMUYwRjFGNUYyRjFGMS0lJGNvc0c2IywoJCEjNUY1RjEqJkYwRjFGMkYxRjVGKkYxRjUqJkYoRjEtRi02IywmRjBGMSomRjJGMUYqRjhGMUYxRiY=TTdSMApJPFJUQUJMRV9TQVZFLzE0MDEwMjM1MDYwMTM0NFgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIyQhKzVWRyU9IyEiKSQhKyF6d0c2IyEiKkYm openturns-1.9/validation/src/Debye.mws000066400000000000000000000330421307543307100201260ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "restart:\nsolve(t/(t +2)=y,t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"#\"\"\"%\"yGF&,&F &!\"\"F'F&F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "help(Deby e);" }}{PARA 8 "" 1 "" {TEXT -1 42 "Error, Could not find any help on \+ \"Debye\"\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "solve(int(u/ (exp(u)-1),u=0..x)/x=y,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%#lnG6# ,&-%$expG6#-%'RootOfG6#,,*(\"\"'\"\"\"%#_ZGF0-F$6#,&-F(6#F1!\"\"F0F0F0 F7*$)%#PiG\"\"#F0F0*&\"\"$F0)F2F;F0F0*&F/F0-%(polylogG6$F;F4F0F7*(F/F0 %\"yGF0F2F0F0F7F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 91 "deby e:=Int(u/(exp(u)-1),u=0..x)/x:\neval(debye);\npol:=convert(series(deby e,x=4,20),polynom):" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$-%$IntG6$*&% \"uG\"\"\",&-%$expG6#F(F)F)!\"\"F./F(;\"\"!%\"xG*$F2F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "plot(log(abs(pol-debye)),x=0..15); " }}{PARA 7 "" 1 "" {TEXT -1 33 "Warning, computation interrupted\n" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "plot(debye-pol,x=0..5);" } }{PARA 13 "" 1 "" {GLPLOT2D 394 394 394 {PLOTDATA 2 "6%-%'CURVESG6$7_o 7$$\"+S`!eS$!#7$\"\"!F,7$$\"+!o5;\"oF*F+7$$\"+-;u@5!#6$\"\"#!\")7$$\"+ O@Ki8F3F+7$$\"+/K[V?F3F+7$$\"+sUkCFF3F+7$$\"+3k'p3%F3F+7$$\"+X&)G\\aF3 F+7$$\"+?G$R<)F3$\"\"\"F67$$\"+4x&)*3\"!#5F+7$$\"+#R(*Rc\"FN$!\"$!\"*7 $$\"+uq8Q?FNF+7$$\"+(RwX5$FNF+7$$\"+sZ3yTFN$!\"\"FT7$$\"+]4\\Y_FNF+7$$ \"+U-/PiFN$FJFT7$$\"+fmpisFNF+7$$\"+#*>VB$)FN$\"\"%FN7$$\"+Mbw!Q*FN$Fi nFN7$$\"+0j$o/\"FTF+7$$\"+_>jU6FTF+7$$\"+j^Z]7FTF+7$$\"+)=h(e8FTF+7$$ \"+Q[6j9FTF+7$$\"+\\z(yb\"FTF+7$$\"+b/cq;FTF+7$$\"+FTFiq7$$\"+\"f#=$3#FTFeq7$$\"+t(pe=#FTF\\p7$$\" +uI,$H#FTF+7$$\"+rSS\"R#FTFeq7$$\"+`?`(\\#FT$\"\"$FN7$$\"++#pxg#FT$\" \"'FN7$$\"+g4t.FFT$\"#:FN7$$\"+!Hst!GFT$\"#IFN7$$\"+ERW9HFT$\"#eFN7$$ \"+KE>>IFT$\"$7\"FN7$$\"+#RU07$FT$\"$2#FN7$$\"+?S2LKFT$\"$-%FN7$$\"+$p )=MLFT$\"$8(FN7$$\"+*=]@W$FT$\"%*G\"FN7$$\"+]$z*RNFT$\"%p@FN7$$\"+kC$p k$FT$\"%jPFN7$$\"+3qcZPFT$\"%IiFN7$$\"+/\"fF&QFT$\"&)R5FN7$$\"+0OgbRFT $\"')=p\"F37$$\"+nAFjSFT$\"'bxFF37$$\"+&)*pp;%FT$\"'Q?WF37$$\"+ye,tUFT $\"'UAqF37$$\"+fO=yVFT$\"(4%)4\"F37$$\"+E>#[Z%FT$\"($oS;F37$$\"+16?IXF T$\"(ak0#F37$$\"+(G!e&e%FT$\"(\">qDF37$$\"+'37^j%FT$\"(q+8$F37$$\"+&)Q k%o%FT$\"(ZN!QF37$$\"+9^XPZFT$\"(-4n%F37$$\"+UjE!z%FT$\"(_Bs&F37$$\"+% ))Rb\"[FT$\"(N5I'F37$$\"+EM\"3%[FT$\"(lX$pF37$$\"+op3m[FT$\"(!zFwF37$$ \"+60O\"*[FT$\"($)fQ)F37$$\"+%Q?&=\\FT$\"(i'z#*F37$$\"+c-oX\\FT$\")vDE 5F37$$\"+G,%G(\\FT$\")KIM6F37$$\"\"&F,$\")`+`7F3-%'COLOURG6&%$RGBG$\"* ++++\"F6F+F+-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F+F_]l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "allvalues(solve(value(debye) =y,x));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%#lnG6#,&-%$expG6#-%'RootO fG6#,.*(\"\"'\"\"\"%#_ZGF0-F$6#,&-F(6#F1!\"\"F0F0F0F0*&F/F0-%(polylogG 6$\"\"#F4F0F0*&F/F0F2F0F7*$)%#PiGF " 0 "" {MPLTEXT 1 0 30 "plot(1-4*(1 -debye)/x,x=-5..5);" }}{PARA 13 "" 1 "" {GLPLOT2D 507 507 507 {PLOTDATA 2 "6%-%'CURVESG6$7S7$$!\"&\"\"!$!*e4qc%!\"*7$$!+e%G?y%F-$!*g svU%F-7$$!+'esBf%F-$!*+F=I%F-7$$!+@Z3zVF-$!*Bl`:%F-7$$!+YIQkTF-$!*]3C+ %F-7$$!+6=q]RF-$!*ggX%QF-7$$!+_>f_PF-$!*rDJp$F-7$$!+p1YZNF-$!*=,6`$F-7 $$!+-OJNLF-$!*u0zN$F-7$$!+%*o%Q7$F-$!*0e&zJF-7$$!+#RFj!HF-$!*l&=!*HF-7 $$!+'4OZr#F-$!**zY=GF-7$$!+v'\\!*\\#F-$!*EF-7$$!+DwZ#G#F-$!*!))f9C F-7$$!+D.xt?F-$!*w(y6AF-7$$!+.TC%)=F-$!*t)eC\"F-$!*,#Qj8F-7$$!+<1J\\5F-$!*&))H `6F-7$$!*>[jL)F-$!)-**)>*F-7$$!*d/EG'F-$!)<#F-$!(1@T#Ffr7$$!((*e$\\F-$!%'[&!\"(7$$\"*(RQb@F-$\"(gPR#Ffr 7$$\"*=>Y2%F-$\")*e)>XF-7$$\"*yXu9'F-$\")m%[!oF-7$$\"*\\y))G)F-$\")yJZ \"*F-7$$\"+i_QQ5F-$\"*\\W:9\"F-7$$\"+!y%3T7F-$\"**HGe8F-7$$\"+O![hY\"F -$\"*Ok_f\"F-7$$\"+#Qx$o;F-$\"*KrW!=F-7$$\"+u.I%)=F-$\"*jHN-#F-7$$\"+( pe*z?F-$\"*Gry@#F-7$$\"+C\\'QH#F-$\"+Q?_DC!#57$$\"+8S8&\\#F-$\"+#R&3;E Fiv7$$\"+0#=bq#F-$\"+6945GFiv7$$\"+2s?6HF-$\"+I%*\\%*HFiv7$$\"+IXaEJF- $\"+9!p==$Fiv7$$\"+l*RRL$F-$\"+BcwcLFiv7$$\"+`<.YNF-$\"+&z`*HNFiv7$$\" +8tOcPF-$\"+kx0'p$Fiv7$$\"+\\Qk\\RF-$\"+i\\wVQFiv7$$\"+p0;rTF-$\"+LGK2 SFiv7$$\"+lxGpVF-$\"+lt][TFiv7$$\"+!oK0e%F-$\"+@z$QH%Fiv7$$\"+<5s#y%F- $\"+kT-GWFiv7$$\"\"&F*$\"+#e4qc%Fiv-%'COLOURG6&%$RGBG$\"*++++\"Ffr$F*F *Fa[l-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F(Fgz%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "series(1-4*(1-debye)/x,x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#+)%\"xG#\"\"\"\"\"*F&#!\"\"\"$+*\"\"$- %\"OG6#F&\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "Digits:=3 0;fsolve((x/9-x^3/900)/(1-4*(1-value(debye))/x)-1=-1e-16,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'DigitsG\"#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?*42\"4'4*fMt!3&yxc()!#L" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "plot((abs((x/9-x^3/900)/(1-4*(1-value(debye))/x)-1)), x=-0.001..0.001);" }}{PARA 13 "" 1 "" {GLPLOT2D 507 507 507 {PLOTDATA 2 "6%-%'CURVESG6$7\\t7$$!\"\"!\"$$\"0+#*p,+#*p\"!#I7$$!?nmmmmmmmmm;p0k &*!#L$\"0**Q/kN!=9F-7$$!?LLLLLLLLL$3s%HaF1$\"/LSk&HYU\"F-7$$!?++++++++++] $*4)*\\F1$\"/lPoq$3?\"F-7$$!?++++++++++]_&\\c%F1$\".K'zD6/*)F-7$$!?+++ +++++++]1aZTF1$\".nK`El*QF-7$$!?mmmmmmmmm;/#)[oPF1$\"/>5#3i%)3\"F-7$$! ?LLLLLLLLLL$=exJ$F1$\".FUM?Do'F-7$$!?LLLLLLLLLLL2$f$HF1$\".L'3&H1.$F-7 $$!?******************\\PYx\"\\#F1$\"/RI>sq*o\"F-7$$!?LLLLLLLLLLL7i)4# F1$\"/c\\0%*>KJF-7$$!?******************\\P'psm\"F1$\"/dyxl#\\U)F-7$$! ?******************\\74_c7F1$\"/(3$)HP`p#!#H7$$!>LLLLLLLLLL3x%z#)F1$\" /ZLLLLLLLLL$3s$QM%F1$\"0C()*GRMP8Fbr7$$!?&************* ****\\ivF@A!#M$\"2$**>^\\\"f(\\\\F-7$$! IG\"Fbr7$$\"?SLLLLLLL3-8Dk-f!#N$\"?l@lFyzzoo=')p&*****F-7$$\"?DLLLLLLL $e*[og!G(F[t$\"?RQiY8O=\"zn*eX$*****F-7$$\"?5LLLLLLLe*[=r&e')F[t$\"?P! p$RebPLbIyi/+5Fbr7$$\"?ILLLLLLLL3_Nl.5F`s$\"?r?KZH0T^H]%Rc()***F-7$$\" ?GLLLLLLL3F>kCz7F`s$\"?\"HAh,d4gxO\\mzz***F-7$$\"?DLLLLLLL$ekGR[b\"F`s $\"?^\\GdC)ykAC7Dpi***F-7$$\"?CLLLLLL$3_+sNEp\"F`s$\"?e9#Riz:>,)>G&o<+ \"Fbr7$$\"?ALLLLLLLek`@VI=F`s$\"?(4(Qhkcf#p2j-O'e**F-7$$\"??LLLLLLLL$3 -Dg5#F`s$\"?WI/V=\"Ro04,tva+\"Fbr7$$\"?=LLLLLLL3-))yh\"Q#F`s$\"?:t*GYk pN4Ssf-q+\"Fbr7$$\"?;LLLLLL$e9;K9%>DF`s$\"?:iK:$f@dJ-iNOy+\"Fbr7$$\"?: LLLLLLL$3_v5sl#F`s$\"?\"=#o8N=<$RBw)*pr3\"Fbr7$$\"?9LLLLLL$3-))=2]z#F` s$\"?))G_R-xL^;?\\_W'4\"Fbr7$$\"?7LLLLLLLeRAO!G$HF`s$\"?n)=Et4u4!zvY$* =16Fbr7$$\"?5LLLLLLLLe*['R3KF`s$\"?W[3LUrcNW!)\\S3F6Fbr7$$\"?4LLLLLL$3 xJ#H>YLF`s$\"?1Wb350j4J0ZMl<')F-7$$\"?3LLLLLLL3xc$*)R[$F`s$\"?[ED]EyR- 2PK!f9])F-7$$\"?0LLLLLLL$eRA#efPF`s$\"?OK;q#**>/QLw[*\\u6Fbr7$$\"?/LLL LLL$3_vlyt*QF`s$\"?+;DB3&**oPW'HcuC\")F-7$%*undefinedGFiy7$$\"?5LLLLLL L3-jxL!R&F`s$\"?HcfU!4$o+C&HlIb([F-7$$\"?Smmmmmmm;aj**G5bF`s$\"?g!=Y2( zc^_Hg]7'G'!#J7$$\"?v*************\\iS;U-j&F`s$\"?YUU3<-O5(3]gX;;#Fdz7 $$\"?5LLLLLLLLekV>]dF`s$\"?Ui)p`eN*zU'[%y'e$=F-7$$\"?XmmmmmmmT5ll9qeF` s$\"?_i@>w\"zN'\\@%f)p\"\\\"F-7$$\"?!)**************\\il()4!*fF`s$\"?D <@lZT%G\\_k*QUS6F-7$$\"?:LLLLLLLe9m405hF`s$\"?s2*oPhyY)4)Hzp$=BF-7$$\" ?]mmmmmmmmmmJ+IiF`s$\"?lTk\"=>NRa\"*ef\"elTFdz7$$\"?&)*************\\( =n`&*\\jF`s$\"?:R*p0OZ,#R%)[?r'R%!#K7$$\"??LLLLLLL$3xc2*pkF`s$\"?R=o5k hE)RZsl$HdLFdz7$$\"?bmmmmmmm\"H#o(f)*e'F`s$\"?5<&)GB,/X9z]sbk5F-7$$\"? !****************\\(o>\")4nF`s$\"?g)4vnd%RWdE/5,jtFdz7$$\"?DLLLLLLL3Fp TwHoF`s$\"?a(4^4oAfAWN#*[Kx\"F-7$$\"?gmmmmmmm;zpjr\\pF`s$\"?l,tz%zRslw ;>=D?'Fh\\l7$$\"?!**************\\7.do'pqF`s$\"?a%\\Fo!**\\`)=v\\Z^=\" F-7$$\"?DLLLLLLLL$3x?'*=(F`s$\"?K#*=H'e5h-#*Hgb$fjFdz7$$\"?gmmmmmmmTNr Hd4tF`s$\"?p:U@PH2!HmHSxz$**Fdz7$$\"?!***************\\(=B=!fys4&Fh\\l7 $$\"?gmmmmmmmm\"HdH%pwF`s$\"?#fVy/$f*>_Xe^6H5#F-7$$\"?&************** \\PMx\"Q*y(F`s$\"?xE@fTe*3CeKXW'4qFdz7$$\"?ILLLLLLL$eR(RL4zF`s$\"?]L[9 P*Qp`xN0!3L5F-7$$\"?lmmmmmmm\"zW<'GH!)F`s$\"?^\\l:(>1x!R>\")4Fq8F-7$$ \"=+++++++++v$Q#\\\")Fh\\l$\"?tH4w$>iqy*QaYRlYFdz7$$\"?lmmmmmm;/wP+zy# )F`s$\"?B8-[5%[-Hlm:-h%>Fdz7$$\"?ILLLLLLL3_+zoC1]_== Jkg/;\"Fh\\l7$$\"?DLLLLLL$ek`m1Vd*F`s$\"?k-.mx+X#o!QPZ_**[Fdz7$$\"?!** *************\\7G$eQq*F`s$\"?f2?PlMj*)>3nzN!=#Fh\\l7$$\"?bmmmmmm;a)3** 4M$)*F`s$\"?7?dsxs'o=9Aqyc=&Fh\\l7$$\"??LLLLLLLek`;'H'**F`s$\"?\"H-^*Q 8UA!yA]GU<\"Fdz7$$\"?)************\\iS;L^#45F1$\"?\\Ce9&)yJgzkX\"R'H)* Fh\\l7$$\"?lmmmmmmmm\"z\\1A-\"F1$\"?W\"zK*y,T(pB9x\"\\'o(Fh\\l7$$\"?KL LLLLLL3-jr-u5F1$\"?R)e0h013)>w9:N9TFh\\l7$$\"?)***************\\7Gy%e7 \"F1$\"?qGYkIlR:Hs<`XwKFh\\l7$$\"?kmmmmmmm\"HK\\ow<\"F1$\"?U%[;OY1uMsA S`(>XFh\\l7$$\">LLLLLLLLL$e\"*[H7Fh\\l$\"?Koe>d4&4*3;+xCEtFh\\l7$$\"?( **************\\(=nqDc7F1$\"?p$fxt*z80Nth5y:VFh\\l7$$\"?kmmmmmmm;/w\\- $G\"F1$\"?uT)p,!\\'y[Mo>xp7\"Fh\\l7$$\"?)*************\\(o/$*3kH\"F1$ \"?3S:'z=UcWXLUtsB(Fh\\l7$$\"?JLLLLLLLe*[)Gz48F1$\"?%y.oSO)\\<\"\\-FdHYkF17$$\"?KLLLLLL$eRZZ[-V\"F1$\"?\"y (f)p(>gx*)*)=RF+=Fh\\l7$$\"?lmmmmmmmm;HCjV9F1$\"?H$Htu[u4v&>=!z'eEF`s7 $$\"?)*************\\Pf$Q;qX\"F1$\"?%\\NoK!yb@RX/P#[L&F`s7$$\"?KLLLLLL L3-Q.Sq9F1$\"?^5-NhYY@*)\\[z%>@\"Fh\\l7$$\"?lmmmmmm;zW#H%y$[\"F1$\"?0K ]\"fLsPJM]Alsi\"F`s7$$\"?)***************\\(oCor\\\"F1$\"?8k.wnv&eE'o# [x/9'F17$$\"?KLLLLLL$3-8?_0^\"F1$\"?E6R,djGr7\"p)o:UNF17$$\"?lmmmmmmm \"Hd:OR_\"F1$\"?%HD`+1j`cY!QcZx:F1$\"?++Ky'fQmv;(os7h7Fh\\l7$$\"?mmmmmmmm ;H#))RUg\"F1$\"?W7$>GR(e&RJqan@H#Fh\\l7$$\"?LLLLLLLLe9\"z25j\"F1$\"?=I uanHs1g_f3)*z:Fh\\l7$$\">++++++++++qvxl\"Fh\\l$\"?9+;Z;mn(37?bV*\\%)F1 7$$\"?++++++++DcwG'Ro\"F1$\"?G&zV\"RnZaI`Ak$f6\"Fh\\l7$$\"?++++++++]7` +:5Wd_nHlWq^&Q^p?\"F17$$\"?++++ +++++]7JFn=F1$\"?X:D53lg8bed\"G\\M\"F17$$\"?+++++++++v==-s>F1$\"?-.;z> G6@,hoWyPAF17$$\">+++++++++]_qn2#Fh\\l$\"?2JBH&[Bz3n@:bJ^#F17$$\"?++++ +++++vV+ZzAF1$\"?*oww\\8oSvX5XY'y=F17$$\">+++++++++Dcp@[#Fh\\l$\"?\"*3 ioqR0LPjapWi\\F`s7$$\">+++++++++]2'HKHFh\\l$\"?^;Y52,\\^)oh3r`W#F`s7$$ \">nmmmmmmmmmwanL$Fh\\l$\"??e_)oe\"RNw:l-**zK!#O7$$\">++++++++++v+'oPF h\\l$\"?.kVlV75L:`/k^UQF[t7$$\">LLLLLLLLLeR<*fTFh\\l$\"?ay0\"edfiwm,%z s2[Ffcm7$$\">++++++++++&)Hxe%Fh\\l$\"?Bq\"=!R$=(3Nj)*zd0?F[t7$$\">nmmm mmmmm\"H!o-*\\Fh\\l$\"?$)[Gj9WRj>#yauN;#F[t7$$\">+++++++++DTO5T&Fh\\l$ \"?aq0&HzHQ&*or?Uq<'Ffcm7$$\">nmmmmmmmmmT9C#eFh\\l$\"?'R?4+!)4?HYA&>3) z\"!#P7$$\">+++++++++D1*3`iFh\\l$\"?%f)p*pjof]DEdcN\">Ffcm7$$\">LLLLLL LLLL$*zym'Fh\\l$\"?b)=2fN/'3Hj0jEH8Ffcm7$$\">LLLLLLLLL$3N1#4(Fh\\l$\"? 0m]s$oy1;A%Qr0\\=Ffcm7$$\">nmmmmmmmm\"HYt7vFh\\l$\"?t(=SP*f&>!\\!>YzqQ \"Ffcm7$$\">++++++++++q(G**yFh\\l$\"?W9h]^%=MF]N$[*e0\"Ffcm7$$\">nmmmm mmmm;9@BM)Fh\\l$\"?31i=#pk7`VJ\\wu.\"Feem7$$\">LLLLLLLLLL`v&Q()Fh\\l$ \"?w)*GI%*zG9i[+++++++++DOl5;*Fh\\l$\"?/c5A[cfdkAsJ.DJ Feem7$$\">+++++++++v.Uac*Fh\\l$\"?*\\o3G,j!*>S%G?aA9Feem7$$\"\"\"F*$\" ?kjyE^7^3+H./++`!#Q-%'COLOURG6&%$RGBG$\"*++++\"!\")$\"\"!FaimF`im-%+AX ESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F(Fdhm%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 54 "k:=2:limit(int(t^k/(exp(t)-1),t=0..x)/x^k*k,x= 0,left);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "expand(factor(n/x^n*x^n*(1/n-x/(2*(n+1))))) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&,&%\"nG\"\"\"F'F'!\"\"F&F'F'* &F'F'F%F(F'**\"\"#F(F%F(%\"xGF'F&F'F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "14" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Debye.txt000066400000000000000000000035611307543307100201420ustar00rootroot00000000000000> restart: > solve(t/(t+2)=y,t); 2 y - ------ -1 + y > help(Debye); Error, Could not find any help on "Debye" > solve(int(u/(exp(u)-1),u=0..x)/x=y,x); 2 2 ln(-exp(RootOf(-6 _Z ln(-exp(_Z) + 1) + Pi + 3 ln(-exp(_Z) + 1) - 6 polylog(2, -exp(_Z) + 1) + 6 y ln(-exp(_Z) + 1))) + 1) > debye:=Int(u/(exp(u)-1),u=0..x)/x: > eval(debye); > pol:=convert(series(debye,x=4,20),polynom): x / | u 1/x | ---------- du | exp(u) - 1 / 0 > plot(log(abs(pol-debye)),x=0..15); Warning, computation interrupted > plot(debye-pol,x=0..5); > allvalues(solve(value(debye)=y,x)); ln(-exp(RootOf(6 _Z ln(-exp(_Z) + 1) + 6 polylog(2, -exp(_Z) + 1) 2 2 - 6 ln(-exp(_Z) + 1) - Pi - 3 ln(-exp(_Z) + 1) 2 + 6 y ln(-exp(_Z) + 1) )) + 1) > plot(1-4*(1-debye)/x,x=-5..5); > series(1-4*(1-debye)/x,x); 3 4 1/9 x - 1/900 x + O(x ) > Digits:=30;fsolve((x/9-x^3/900)/(1-4*(1-value(debye))/x)-1=-1e-16,x); Digits := 30 -0.000875677785080733459909609107099 > plot((abs((x/9-x^3/900)/(1-4*(1-value(debye))/x)-1)),x=-0.001..0.001); > k:=2:limit(int(t^k/(exp(t)-1),t=0..x)/x^k*k,x=0,left); 1 > expand(factor(n/x^n*x^n*(1/n-x/(2*(n+1))))); n 1 x n ----- + ----- - --------- n + 1 n + 1 2 (n + 1) > openturns-1.9/validation/src/DefaultDistribution.mws000066400000000000000000000076521307543307100230720ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 555 "restart:\na:=-1:\nb :=1:\nPhiA:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..a):\nevalf[16](P hiA);\nPhiB:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..b);\nevalf[16]( PhiB);\nphiA:=1/sqrt(2*Pi)*exp(-a^2/2);\nevalf[16](phiA);\nphiB:=1/sqr t(2*Pi)*exp(-b^2/2);\nevalf[16](phiB);\nnormalizationFactor:=1/(PhiB - PhiA);\nevalf[16](normalizationFactor);\nphiANorm:=phiA*normalization Factor;\nevalf[16](phiANorm);\nphiBNorm:=phiB*normalizationFactor;\nev alf[16](phiBNorm);\nPhiANorm:=PhiA*normalizationFactor;\nevalf[16](Phi ANorm);\nPhiBNorm:=PhiB*normalizationFactor;\nevalf[16](PhiBNorm);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1qXJRDb'e\"!#;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%PhiBG,$*&#\"\"\"\"\"#F(*(F)F'%#PiG#!\"\"F),&*(F)F-F) F'F+F'F(*&F'F(*(F)F'F+F'-%$erfG6#,$*&F)F-F)F'F(F(F(F(F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1DaoguW8%)!#;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%phiAG,$*&#\"\"\"\"\"#F(*(F)F'%#PiG#!\"\"F)-%$expG6#F ,F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1L9>Xsq>C!#;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%phiBG,$*&#\"\"\"\"\"#F(*(F)F'%#PiG#!\"\"F )-%$expG6#F,F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1L9>Xsq>C!#; " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%4normalizationFactorG*&\"\"\"F&, &*&#F&\"\"#F&*(F*F)%#PiG#!\"\"F*,&*(F*F.F*F)F,F)F&*&F)F&*(F*F)F,F)-%$e rfG6#,$*&F*F.F*F)F&F&F&F&F&F&F&*&#F&F*F&*(F*F)F,F-,&*(F*F.F*F)F,F)F&*& #F&F*F&F2F&F.F&F&F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1X:\\tZzk9 !#:" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)phiANormG,$*&#\"\"\"\"\"#F(* *F)F'%#PiG#!\"\"F)-%$expG6#F,F(,&*&F'F(*(F)F'F+F,,&*(F)F-F)F'F+F'F(*&F 'F(*(F)F'F+F'-%$erfG6#,$*&F)F-F)F'F(F(F(F(F(F(F(*&#F(F)F(*(F)F'F+F,,&* (F)F-F)F'F+F'F(*&#F(F)F(F7F(F-F(F(F-F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1Og8EXPWN!#;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)p hiBNormG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)-%$expG6#F,F(,&*&F'F(*(F) F'F+F,,&*(F)F-F)F'F+F'F(*&F'F(*(F)F'F+F'-%$erfG6#,$*&F)F-F)F'F(F(F(F(F (F(F(*&#F(F)F(*(F)F'F+F,,&*(F)F-F)F'F+F'F(*&#F(F)F(F7F(F-F(F(F-F-F(F( " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1Og8EXPWN!#;" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#>%)PhiANormG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F),&*( F)F-F)F'F+F'F(*&#F(F)F(*(F)F'F+F'-%$erfG6#,$*&F)F-F)F'F(F(F(F-F(,&*&F' F(*(F)F'F+F,,&*(F)F-F)F'F+F'F(*&F'F(F2F(F(F(F(F(*&#F(F)F(*(F)F'F+F,F.F (F(F-F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1AxXnQ(RK#!#;" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%)PhiBNormG,$*&#\"\"\"\"\"#F(**F)F'%# PiG#!\"\"F),&*(F)F-F)F'F+F'F(*&F'F(*(F)F'F+F'-%$erfG6#,$*&F)F-F)F'F(F( F(F(F(,&*&F'F(*(F)F'F+F,F.F(F(F(*&#F(F)F(*(F)F'F+F,,&*(F)F-F)F'F+F'F(* &#F(F)F(F1F(F-F(F(F-F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"1sdu' Q(RK7!#:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 106 "evalf[20](1/(i nt(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..1)-int(1/sqrt(2*Pi)*exp(-x^2/ 2),x=-infinity..-1)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5+3W:\\tZ zk9!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "evalf[20](1/(sqrt (3-2)*Beta(1/2,3/2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"51V8enBx> mj!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "evalf[20](sqrt(1/3 ));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5\\kdi*=p-Nx&!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "evalf[20](1/sqrt(2*Pi));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5%znK9S!GU*)R!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/DefaultDistribution.txt000066400000000000000000000177271307543307100231070ustar00rootroot00000000000000> restart: > a:=-1: > b:=1: > PhiA:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..a): > evalf[16](PhiA); > PhiB:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..b); > evalf[16](PhiB); > phiA:=1/sqrt(2*Pi)*exp(-a^2/2); > evalf[16](phiA); > phiB:=1/sqrt(2*Pi)*exp(-b^2/2); > evalf[16](phiB); > normalizationFactor:=1/(PhiB - PhiA); > evalf[16](normalizationFactor); > phiANorm:=phiA*normalizationFactor; > evalf[16](phiANorm); > phiBNorm:=phiB*normalizationFactor; > evalf[16](phiBNorm); > PhiANorm:=PhiA*normalizationFactor; > evalf[16](PhiANorm); > PhiBNorm:=PhiB*normalizationFactor; > evalf[16](PhiBNorm); 0.1586552539314570 / 1/2 1/2 1/2 \ 1/2 |2 Pi 1/2 1/2 2 | 2 |---------- + 1/2 2 Pi erf(----)| \ 2 2 / PhiB := 1/2 -------------------------------------------- 1/2 Pi 0.8413447460685425 1/2 2 exp(-1/2) phiA := 1/2 -------------- 1/2 Pi 0.2419707245191433 1/2 2 exp(-1/2) phiB := 1/2 -------------- 1/2 Pi 0.2419707245191433 / | | | normalizationFactor := 1/| | \ / 1/2 1/2 1/2 \ 1/2 |2 Pi 1/2 1/2 2 | 2 |---------- + 1/2 2 Pi erf(----)| \ 2 2 / 1/2 -------------------------------------------- 1/2 Pi / 1/2 1/2 1/2 \\ 1/2 |2 Pi 1/2 1/2 2 || 2 |---------- - 1/2 2 Pi erf(----)|| \ 2 2 /| - 1/2 --------------------------------------------| 1/2 | Pi / 1.464794773491545 / / | | | | 1/2 / | 1/2 | phiANorm := 1/2 2 exp(-1/2) / |Pi | / | | \ \ / 1/2 1/2 1/2 \ 1/2 |2 Pi 1/2 1/2 2 | 2 |---------- + 1/2 2 Pi erf(----)| \ 2 2 / 1/2 -------------------------------------------- 1/2 Pi / 1/2 1/2 1/2 \\\ 1/2 |2 Pi 1/2 1/2 2 ||| 2 |---------- - 1/2 2 Pi erf(----)||| \ 2 2 /|| - 1/2 --------------------------------------------|| 1/2 || Pi // 0.3544374526136036 / / | | | | 1/2 / | 1/2 | phiBNorm := 1/2 2 exp(-1/2) / |Pi | / | | \ \ / 1/2 1/2 1/2 \ 1/2 |2 Pi 1/2 1/2 2 | 2 |---------- + 1/2 2 Pi erf(----)| \ 2 2 / 1/2 -------------------------------------------- 1/2 Pi / 1/2 1/2 1/2 \\\ 1/2 |2 Pi 1/2 1/2 2 ||| 2 |---------- - 1/2 2 Pi erf(----)||| \ 2 2 /|| - 1/2 --------------------------------------------|| 1/2 || Pi // 0.3544374526136036 / | / 1/2 1/2 1/2 \ | 1/2 |2 Pi 1/2 1/2 2 | / | PhiANorm := 1/2 2 |---------- - 1/2 2 Pi erf(----)| / | \ 2 2 / / | \ / / 1/2 1/2 1/2 \ | 1/2 |2 Pi 1/2 1/2 2 | | 2 |---------- + 1/2 2 Pi erf(----)| 1/2 | \ 2 2 / Pi |1/2 -------------------------------------------- | 1/2 \ Pi / 1/2 1/2 1/2 \\\ 1/2 |2 Pi 1/2 1/2 2 ||| 2 |---------- - 1/2 2 Pi erf(----)||| \ 2 2 /|| - 1/2 --------------------------------------------|| 1/2 || Pi // 0.2323973867457722 / | / 1/2 1/2 1/2 \ | 1/2 |2 Pi 1/2 1/2 2 | / | PhiBNorm := 1/2 2 |---------- + 1/2 2 Pi erf(----)| / | \ 2 2 / / | \ / / 1/2 1/2 1/2 \ | 1/2 |2 Pi 1/2 1/2 2 | | 2 |---------- + 1/2 2 Pi erf(----)| 1/2 | \ 2 2 / Pi |1/2 -------------------------------------------- | 1/2 \ Pi / 1/2 1/2 1/2 \\\ 1/2 |2 Pi 1/2 1/2 2 ||| 2 |---------- - 1/2 2 Pi erf(----)||| \ 2 2 /|| - 1/2 --------------------------------------------|| 1/2 || Pi // 1.232397386745772 > evalf[20](1/(int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..1)-int(1/sqrt(2 > *Pi)*exp(-x^2/2),x=-infinity..-1))); 1.4647947734915440800 > evalf[20](1/(sqrt(3-2)*Beta(1/2,3/2))); 0.63661977236758134306 > evalf[20](sqrt(1/3)); 0.57735026918962576449 > evalf[20](1/sqrt(2*Pi)); 0.39894228040143267794 > openturns-1.9/validation/src/DirectionalSampling.mws000066400000000000000000000320741307543307100230320ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 85 "restart:\nDigits:=25 :\nf:=3*sin(4*R+1)-1;\n_EnvAllSolutions := true;\nsol:=solve(f=0,R);\n " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&*&\"\"$\"\"\"-%$sinG6#,&*& \"\"%F(%\"RGF(F(F(F(F(F(F(!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1 _EnvAllSolutionsG%%trueG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG,,# \"\"\"\"\"%!\"\"*&#F'F(F'-%'arcsinG6##F'\"\"$F'F'*&#F'\"\"#F'*&F,F'%%_ B1|irGF'F'F)*(F3F)%#PiGF'%%_Z1|irGF'F'*(F(F)F7F'F5F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "plot(f,R=-4..4);" }}{PARA 13 "" 1 " " {GLPLOT2D 700 268 268 {PLOTDATA 2 "6%-%'CURVESG6$7]x7$$!\"%\"\"!$!:@ #*[(f]8Z?N'3&H!#C7$$!:nmmmmmm;p0k&RF-$!:R2q#=9hseSo;LF-7$$!:MLLLLLLLQ6 G\"RF-$!:-r4QXYzZ`QAh$F-7$$!:+++++++]2<#pQF-$!:jSA#o_#p$\\EcGQF-7$$!:n mmmmmmmwAc#QF-$!:kV48Q;$[&>&4fRF-7$$!:MLLLL$3-t*Rh\"QF-$!:dl'RZAWoe%*o vRF-7$$!:++++++v$zrl1QF-$!:qCWki4W0*G+))RF-7$$!:nmmmm;HdQurz$F-$!:#4kg TZ0%pxb_G,vEJF-7$$!:MLLLLL$e\\`#fa$F-$!:=Yx%3;:`F?eOFF-7$$!:nmmmmmmmx nK]$F-$!:/ZxQHkZ!>k(fH#F-7$$!:mmmmmmm;WF.Y$F-$!:'odj;5HID^Y9=F-7$$!:mm mmmmmm5(Q$f>m\\eP*>F-7$$!:+++++++D%R.YKF-$\"9[\"yKxx5`\"zv'\\'F-7$$!:mmmmmm;a p(H.KF-$\":bK(3mrhXue)=0\"F-7$$!:LLLLLLL$[9cgJF-$\":W4i09U8LB\"G%R\"F- 7$$!:+++++++]]<83$F-$\":wS/C>QaloA%Q=F-7$$!:mmmmmmm;ct?+$F-$\":Kr3B3$H B2tv**>F-7$$!:LLLLLLL$[5-?HF-$\":Pjh'GqPSwK$>&=F-7$$!:+++++++]`oz$GF-$ \":<@4$Qh[n#oT'*R\"F-7$$!:mmmmmmm;7Rbz#F-$\":'zc1?`\"RQ#o0h5F-7$$!:LLL LLLL$3(4Jv#F-$\"9S\"\\o=-*G%zuCj'F-7$$!:+++++++]H!o5FF-$\"9Zk7K'p+Q/Zk <#F-7$$!:mmmmmmm;)3DoEF-$!:(oF1'*)y0t,r%HEFgq7$$!:++++++++adfi#F-$!:)* *yHHIyCOL!4j(Fgq7$$!:LLLLLLL$)>kOe#F-$!:ztgZ.1Jnn(**p7F-7$$!:mmmmmmmm& 3PTDF-$!:Pp(Qvk.T)>'>p1DBF-$!:u]z@ *yJ`A\\>1PF-7$$!:mmmmmmmTlVnG#F-$!:*G(=97(\\N/7:sQF-7$$!:+++++++]RD%[A F-$!:FaV#F-$!:qo%\\Uy&))*>q!y)RF-7$$!:LLLLLLe9Wo8=#F-$!:)p# yK\"Rm7jEEvRF-7$$!:mmmmmmmm())yr@F-$!:H*44MN]O&H]$eRF-7$$!:+++++++Df^' G@F-$!:OG(*HJ7<)o%)))GQF-7$$!:LLLLLLL$3V^&3#F-$!:'>ue?e@yI.T:OF-7$$!:m mmmmmmT-xB/#F-$!:iJA!H*)*za0cUK$F-7$$!:++++++++uR#**>F-$!:f.tcaP'Q_F2k HF-7$$!:++++++++LDf&>F-$!:F>3q&=)zb`NPa#F-7$$!:++++++++#4h7>F-$!:yz;^r s'RYRF-7$$!:LLLLLL$ezAKi9F-$\":g5#=V_Y42 9$>(>F-7$$!:+++++]i!HS0^9F-$\":#>Q)>qCy4bgt)>F-7$$!:mmmmmmT&ydyR9F-$\" :;%>A4oXrt;s'*>F-7$$!:LLLLL$3-Gv^G9F-$\":&zSD:;`pgd****>F-7$$!:+++++++ vF\\sT\"F-$\":@YR_'f:\\hh<(*>F-7$$!:mmmmmm;aFw@P\"F-$\":qw0z:hvKpg_#>F -7$$!:LLLLLLLLF.rK\"F-$\":'3Nb#pN([/j^eh#fX=w7F-7$$!:LLLLLLL$ Q]b77F-$\"9XIh\"R(z#f;pP_*F-7$$!:LLLLLLLLHsV<\"F-$\"93XPaX\"QeA^6$eF-7 $$!:++++++]Poc*H6F-$\"9i(\\aaL)4t$)Ry5F-7$$!:mmmmmmmT2Tb3\"F-$!:e'z:,S bk-O6BSFgq7$$!:KLLLLL$eka7T5F-$!:`xGqFC'\\tRy7$*Fgq7$$!9************** \\&)4n**F-$!:La\")zJi.'f)3CY\"F-7$$!:DLLLLLLe9XRd*Fgq$!:SQi_mC^$[(H4#> F-7$$!:gmmmmmm;u\"z!=*Fgq$!:K7YOr)fj)*=scBF-7$$!:&************\\P$Qwy) Fgq$!:'RUsG^K?p)H!fFF-7$$!9LLLLLLLL\\[%R)F-$!:!R1cznZM:Y#z6$F-7$$!:gmm mmmm;u\"yJvFgq$!:[2'eHl8ZM7!=r$F-7$$!9**************\\&y!pmF-$!:%QK#z0 ()\\ZVXf)RF-7$$!:!************\\(=/PY'Fgq$!:Pw#zSDdj;ln**RF-7$$!:!**** *********\\#)H$eiFgq$!:tx4tZ36=UvJ*RF-7$$!:!************\\ia&H0'Fgq$!: Kgnb%p/x)*f[mRF-7$$!:!***************4\"eZeFgq$!:ALi+f_l>E)y>RF-7$$!:! *************\\PKoV&Fgq$!:M03$\\K*z%R0wnPF-7$$!9**************\\O3E]F- $!:)pC/+%[8i\"p=TNF-7$$!:DLLLLLLeW5vf%Fgq$!:`Hu\"3a6wIU$>B$F-7$$!:gmmm mmm;CP*oTFgq$!:\"pm;X6D&H%*\\s&GF-7$$!:&************\\PSOSPFgq$!:W$GIM M1/M$=\"GCF-7$$!9LLLLLLLL3z6LF-$!:$42W#e,t#o)>r&>F-7$$!:ILLLLLLe%oA=HF gq$!:gbrv)oW>tX`*\\\"F-7$$!:ILLLLLL$eGmCDFgq$!:f)\\XPn#f*\\\\fH5F-7$$! :ILLLLLL3())4J@Fgq$!:&[Z= \"F-7$$!7mmmmmmmmr[RF-$\":3jX<2&\\KCr\\)\\\"F-7$$\":+MLLLLL$3Uh9SFe[m$ \":jo)*>3sp+=46v\"F-7$$\":+MLLLLLL3+TU)Fe[m$\":OmZQdw(p!pc$=>F-7$$\":S LLLLL$3-V)G1\"Fgq$\":,]qx0tK'\\&Q#o>F-7$$\":SLLLLLLefeLG\"Fgq$\":#QRmP `(*>5,0&*>F-7$$\":SLLLLL$e*)G$Q]\"Fgq$\":&*>!)>yF-7$$\"9MLLLL LL$=2Vs\"F-$\":x!Q#)HzS\"zq4)y>F-7$$\":vmmmmmmmE,?\\#Fgq$\":f38A_qv$)o s=t\"F-7$$\"9,++++++]`pfKF-$\":lBc7k$)Qy4Z$H7F-7$$\":ULLLLLL3ngUn$Fgq$ \"9)31'y#y6l3^Rn)F-7$$\":vmmmmmm;*f#))3%Fgq$\"9)os^n1c*>[5UXF-7$$\":3+ +++++DJ\"R.XFgq$\"7BV-4))49D3H6F-7$$\"9MLLLLLLLm&z\"\\F-$!:=*Gy$o1[CV' =%z%Fgq7$$\":5++++++]anm'fS'Qr!**Fgq7$$\":vmmmmmmmrHXx&F gq$!:'fv[UDk(\\&4G-:F-7$$\":SLLLLLL$ei\"G?'Fgq$!:3x%\\>+ZyrF9**>F-7$$ \"9,+++++++G5JmF-$!:B#=#eKyDkp_nY#F-7$$\":5++++++]i(4]qFgq$!:K#*eukk]w n_F)GF-7$$\":5+++++++X#4puFgq$!:%>J>%p7W)o:*fC$F-7$$\":5++++++]F(3))yF gq$!:b^I?cXT#*=!HYNF-7$$\"9,+++++++@32$)F-$!:,? [=O*RF-7$$\":5+++++]Ppz0K*Fgq$!:30;@eQ\"z6Ni**RF-7$$\":5++++++D@zK_*Fg q$!:BZ7+@1r9,?f)RF-7$$\":5+++++]7tyfs*Fgq$!:!Q,ovfBiHBu&[#3M>O :PF-7$$\":,++++++v7$*G3\"F-$!:ud-Q\"=k+]x0VMF-7$$\":,+++++](yd!z7\"F-$ !:!=wp@#>'\\4xw\"4$F-7$$\":,+++++++V=H<\"F-$!:XILZ6)eHy#\\Gn#F-7$$\":o mmmmmm\"*HkL@\"F-$!:bKf$fStPY4()\\AF-7$$\":MLLLLLL$o,\"QD\"F-$!:;ov*yi xy<*\\Uz\"F-7$$\":,++++++v.cUH\"F-$!:WH9[=)4G!e&)yJ\"F-7$$\":ommmmmmm! >qM8F-$!:yWBGf=adr!>K$)Fgq7$$\":,++++++]]')yP\"F-$!:w-r[yt$=Fqc3KFgq7$ $\":MLLLLLLL5r5U\"F-$\"9RebU-\"z3_8Hr\"F-7$$\":ommmmmm;qbUY\"F-$\"9))= pT)f1&eew&G'F-7$$\":,+++++++ISu]\"F-$\":Mfo=@#3ij\")QP5F-7$$\":ommmmmm \"HOq&e\"F-$\":m/Lo[)HvfC_;;F-7$$\":MLLLLLL$ep'Rm\"F-$\":'\\&=+F*o]#p= 8%>F-7$$\":,++++](opAmu;F-$\":D4F-7$$\":ommmmmT5ed`o\"F- $\":\\!)y%GV(eYN=5)>F-7$$\":MLLLL$eR#*G0'p\"F-$\":&ovqw=;qo6q#*>F-7$$ \":,+++++]P?[nq\"F-$\":R13=*)3%zru!*)*>F-7$$\":ommmm;/^^Vur\"F-$\":@/I $RGcn1fi**>F-7$$\":MLLLLLek#)Q\"GF-7$$\":,++++]7y 8M)Q#z^z&Rg%)>F-7$$\":ommmmmm\"\\%H&\\F-7$$\":MLLLLL$e%p5Bz\"F-$\":x$f=\"zR7!>j9_=F-7$$\":,+++++++%>4 N=F-$\":J%Q$Q`gwwi$3_;F-7$$\":ommmmm;zvX`(=F-$\":fq8j.d+JChHR\"F-7$$\" :MLLLLLLed*f:>F-$\":;7#[ndU&G1L>2\"F-7$$\":,+++++]PR`e&>F-$\"9ol))yb,x 42/tpF-7$$\":ommmmmm;@2h*>F-$\"9pjLOyK.?!fwy#F-7$$\":,+++++++0%=Q?F-$! :kv6!H#*zLJ*R!R>Fgq7$$\":MLLLLLL$))3E!3#F-$!:J.(RO>i!\\6YN*oFgq7$$\":o mmmmmmmsPB7#F-$!:w-XRpho>C%e$>\"F-7$$\":,++++++]c9W;#F-$!:\"fJ%3<:&otI M#p\"F-7$$\":ommmmm;aO_b?#F-$!:dRGaN'H7[R:h@F-7$$\":MLLLLLLe;!pYAF-$!: T%pNP))z(G-&f)f#F-7$$\":,+++++]i'z#yG#F-$!:fP0s]EIbO[G*HF-7$$\":ommmmm mmwl*GBF-$!:)HYq/&zLe!GELLF-7$$\":MLLLLLLep+^T#F-$!:SiYtL%*>8thI$QF-7$ $\":,++++++]iN7]#F-$!:/Yd-yVceNo)**RF-7$$\":ommmmmm\"*z$>%e#F-$!:wVxeI 'RQ%\\gq#QF-7$$\":NLLLLLLL(>:nEF-$!:Rv#F-$!:8\"HgVD_S'3I&*e#F-7$$ \":NLLLLLLe/2Wz#F-$!:EDYUu9'eL\\2P@F-7$$\":NLLLLLLLSDo$GF-$!:8,iVx(\\L 2H'>l\"F-7$$\":ommmmm;a^#*)yGF-$!:[W)H(z!)Rh6OB:\"F-7$$\":-++++++vif4# HF-$!:-swg'\\I4m?1%['Fgq7$$\":NLLLLL$eRn-jHF-$!:b\\*y?`cY<&zSa\"Fgq7$$ \":ommmmmm;&Q40IF-$\"9*f&ezyX9,U/dJF-7$$\":,+++++](e\"\\P/$F-$\"9o%4Yy OWy?AA:(F-7$$\":MLLLLLLeY/C3$F-$\":wF-7$$\":,+++++vVg(RfKF-$\":?]/U$)GZ%f!R^)>F-7$$\":ommmmm;/Wt/F $F-$\":F1!*p`L[+[=a*>F-7$$\":MLLLLLekF\\:G$F-$\":Rt#)f%z'ze\\>)**>F-7$ $\":,++++++D6DEH$F-$\":U,%4n\\05qML)*>F-7$$\":ommmmmT&[4q.LF-$\":MKX&[ W\\)*=L'4*>F-7$$\":MLLLLL$e%ywZJ$F-$\":zwCO`a)>1Nsx>F-7$$\":,+++++D1i_ eK$F-$\":!o\\%o[F9W,S'e>F-7$$\":ommmmmmmXGpL$F-$\":@oX;M?AVH]P$>F-7$$ \":NLLLLLLe*QbwLF-$\":t/\"ptw<#z%G,)z\"F-7$$\":-++++++]LzhT$F-$\":jT() f&R3.2&G@f\"F-7$$\":ommmmmmTx/eX$F-$\":%H#)Q\">3&\\W)e7K\"F-7$$\":NLLL LLLL@Ia\\$F-$\"9ppU#fM&>#**F-7$$\":-+++++]i>zw`$F-$\"9k*opQt,OnPb' eF-7$$\":ommmmmm\"z\"G*zNF-$\"9[+p#>K%\\&f#4d8F-7$$\":NLLLLL$3ir,hs[IWKS(G\\)Fgq7$$\": -++++++D\"Q'[q$F-$!:>>#[X!e#GGMyL8F-7$$\":-+++++++[,`u$F-$!:Qst7-!Hs2c c4=F-7$$\":-++++++v9Rdy$F-$!:pX&*\\2QBEMh4tbceo#F-7$$\":-+++++]7hK'pQF-$!:[uCyolws#pi*3$F-7$$\":,++++++v S)38RF-$!:&\\&p'*ohDj2>/V$F-7$$\":++++++]P?Wl&RF-$!:0(oM\\L)4./izp$F-7 $$\"\"%F*$!:6\\yr0nQcZ#>%)QF--%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*Fa]o -%+AXESLABELSG6$%\"RGQ!6\"-%%VIEWG6$;F(Ff\\o%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "evalf(subs(_Z1=2,_B1=0,sol));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":TntAPK`4)=bwH!#C" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 203 "tot:=0.0:\nfor i from -10 to 10 do\n x1:=sub s(_Z1=i,_B1=1,sol);\n x2:=subs(_Z1=i+1,_B1=0,sol);\n dtot:=evalf(Int (1/sqrt(2*Pi)*exp(-x^2/2),x=x1..x2));\n tot:=tot+dtot;\n print(evalf ([x1,x2,dtot,tot]));\nod:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:lrpO[]\">LCvD:!#B$!:z2))3R0z8x?-V \"F&$\":M_I)Qh=w@#)*4P\"!#rF)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!: LSxu^,70!Gno8!#B$!:Zw&pCk&*pQ69t7F&$\":a>#eU*fssUr!y>!#h$\":S\")*zC*p4 uUr!y>F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:,4&G^DD$y;$f67!#B$!:: X.&eu+-1:1;6F&$!:x>rs-(Q$RMK&fO!#_$!:yAIX))zb>MK&fOF+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:px#4&e.`^`8X0\"!#B$!:JQ6J#\\eSL(=)*e*!#C$\":% \\\"4-!)*paYls6W!#Y$\":\\EHYgl9q)Gs6WF," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:mj/!*=YNZ-RV(*)!#C$!:5D)=h_4h1C->!)F&$\":jz-l_b=$)*y2G`!#S$ \":4SozAWT+J#3G`F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:X]\"3Fl0%zp UNS(!#C$!:)=^E*f0;)zgA[kF&$\":dh,wixuca8MPf6-`(Hu([ F&$\":$\\+\\m!fcA/%fY`!#J$\":P&pDXS#R*=#frM&F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:-CNK?x]V/]>E%!#C$!:X&)=aFEEiULmI$F&$\":])[]\\6it3J *)>Y!#G$\":?9]N2:bzES_i%F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:!3@ JTvebQF+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!:f(*)Qzy4w!Rd.7\"!#C$!: >!fs:&pkjs2/l\"!#D$\":^S:BjH]t(>vJIF)$\":'QF/OcE=Sxt8MF)" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7&$\":FcT`#y\"R.O*Q/X!#D$\":?a].rUeTbbdS\"!#C$\" ::&yFj84ubi)HY#F&$\":,f?$**pN#f*RsweF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":%)GdWW\")GGEN7-#!#C$\":TntAPK`4)=bwHF&$\":K?HaY+qA(f,M?#[x?[ta%F&$\":!ylG$3&o8%G(Q8;!#G$\":qzY4tqM/)*Q+3'! #D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":Fb.$o2'=k\"z#G;&!#C$\":%Q* >hp6VX`W\"=hF&$\":J?%p\\E-$>9+:@\"!#J$\":nWpR#\\[$>>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":\\oE-V]8KCCOt'!#C$\":12V!e8!Q8'3%*)o(F &$\":XjZL$>^n$>$*pE)!#O$\":=7jr\">v,#>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":q\")\\@4S3+d?WI)!#C$\":F?m*>5H8)=P(f#*F&$\":15&R3 %)=z`DO9]!#T$\":tu1t'>v,#>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 &$\":#\\H2a(H.o*o@v)*!#C$\":N$*)=o!y#\\^L0$3\"!#B$\":oLh3!)eiaVZdm#!#Z $\":Sx1t'>v,#>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":\"3'*fT >)fBK,Y9\"!#B$\":nC\"QMqA<%)H8S7F&$!::V.F+)\\=&fs#)y$!#_$\":Sx1t'>v,#> S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":8#>z24$R]&4o,8!#B$\": *fNd+g<&oh7sR\"F&$\":=^d*or*QpST$4\\!#j$\":Sx1t'>v,#>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":XB%)R()z=xeg(e9!#B$\":K(ewm\\7`\\AHa:F &$\":/J%*3nP,f2.74#!#t$\":Sx1t'>v,#>S+3'!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$\":yaw,%)G)R?-%eh\"!#B$\":k=eH$R2@#)=P6v,#>S+3'!#D" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/DirectionalSampling.txt000066400000000000000000000111351307543307100230360ustar00rootroot00000000000000> restart: > Digits:=25: > f:=3*sin(4*R+1)-1; > _EnvAllSolutions := true; > sol:=solve(f=0,R); > f := 3 sin(4 R + 1) - 1 _EnvAllSolutions := true Pi _Z1~ sol := - 1/4 + 1/4 arcsin(1/3) - 1/2 arcsin(1/3) _B1~ + ------- 2 Pi _B1~ + ------- 4 > plot(f,R=-4..4); > evalf(subs(_Z1=2,_B1=0,sol)); 2.976551880953323722736741 > tot:=0.0: > for i from -10 to 10 do > x1:=subs(_Z1=i,_B1=1,sol); > x2:=subs(_Z1=i+1,_B1=0,sol); > dtot:=evalf(Int(1/sqrt(2*Pi)*exp(-x^2/2),x=x1..x2)); > tot:=tot+dtot; > print(evalf([x1,x2,dtot,tot])); > od: > [-15.25752433191504836697165, -14.30220771379053908880779, -46 0.1370998221761861388305234 10 , -46 0.1370998221761861388305234 10 ] [-13.68672800512015174774033, -12.73141138699564246957647, -36 0.1978071427272599425821954 10 , -36 0.1978071427409699247998140 10 ] [-12.11593167832525512850901, -11.16061506020074585034515, -27 -0.3659532343933870272711977 10 , -27 -0.3659532341955798845302278 10 ] [-10.54513535153035850927769, -9.589818733405849231113831, -21 0.4411726546546998002091494 10 , -21 0.4411722887014656046292649 10 ] [-8.974339024735461890046366, -8.019022406610952611882510, -15 0.5328077898318555265027963 10 , -15 0.5328082310041442279684009 10 ] [-7.403542697940565270815045, -6.448226079816055992651188, -10 0.5651713545674776276016157 10 , -10 0.5651766826497876690438954 10 ] [-5.832746371145668651583723, -4.877429753021159373419866, -6 0.5346594042256590664900493 10 , -6 0.5347159218939240452569537 10 ] [-4.261950044350772032352402, -3.306633426226262754188545, 0.0004619893108736211495048850, 0.0004625240267955150735501420] [-2.691153717555875413121080, -1.735837099431366134957224, 0.03773605225644048865378336, 0.03819857628323600372733350] [-1.120357390760978793889759, -0.1650407726364695157259019, 0.3031751977350296323154051, 0.3413737740182656360427386] [0.4504389360339178253415627, 1.405755554158427103505420, 0.2462986255740913632778515, 0.5876723995923569993205901] [2.021235262828814444572884, 2.976551880953323722736741, 0.02017015972270004654292032, 0.6078425593150570458635104] [3.592031589623711063804206, 4.547348207748220341968062, 0.0001613387284136850832865780, 0.6080038980434707309467970] [5.162827916418607683035527, 6.118144534543116961199384, -6 0.1211500141930226496942031 10 , 0.6080040191934849239694467 ] [6.733624243213504302266849, 7.688940861338013580430706, -11 0.8266993193675119333476345 10 , 0.6080040192017519171631218] [8.304420570008400921498170, 9.259737188132910199662027, -16 0.5014362553791884083951006 10 , 0.6080040192017519673067473] [9.875216896803297540729492, 10.83053351492780681889335, -22 0.2665747435462588008613368 10 , 0.6080040192017519673067740] [11.44601322359819415996081, 12.40132984172270343812467, -27 -0.3788272595184980027034315 10 , 0.6080040192017519673067740] [13.01680955039309077919213, 13.97212616851760005735599, -38 0.4909341406938971689575118 10 , 0.6080040192017519673067740] [14.58760587718798739842345, 15.54292249531249667658732, -48 0.2091203075901376708943104 10 , 0.6080040192017519673067740] [16.15840220398288401765478, 17.11371882210739329581864, -58 0.4954843638488353530861810 10 , 0.6080040192017519673067740] > openturns-1.9/validation/src/Dirichlet.mw000066400000000000000000001013351307543307100206230ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY5LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUStTdGF0aXN0aWNzRidGL0YyRjlGNUZPRmduLUYsNiVRJFBERkYnRi9GMi1GYG82JC1GIzYmLUYsNiVRL1JhbmRvbVZhcmlhYmxlRidGL0YyLUZgbzYkLUYjNiYtRjY2LVEiJ0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4xMTExMTExZW1GJ0Zbby1GLDYlUSVCZXRhRicvRjBGPUY5RmVwLUZgbzYkLUYjNiUtRiw2JVEicEYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRInFGJ0YvRjJGOUY5RmVxLUYsNiVRInhGJ0YvRjJGOS1GNjYtUSI7RidGOUY7RmhxRkBGQkZERkZGSEZqbkZNRk9GYnEtRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJm1mcmFjR0YkNigtRiM2JC1GLDYlUSZHQU1NQUYnRl1xRjktRmBvNiQtRiM2Jy1JJW1zdWJHRiQ2JS1GLDYlUSgmdGhldGE7RidGXXFGOS1GIzYjLUkjbW5HRiQ2JFEiMUYnRjkvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmZ0LUZkczYlRmZzLUYjNiMtRlx0NiRRIjJGJ0Y5Rl90RmJ0LUZkczYlRmZzLUYjNiMtRlx0NiRRIjNGJ0Y5Rl90RjktRiM2KkZccy1GYG82JC1GIzYjRmNzRjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRlxzLUZgbzYkLUYjNiNGaHRGOUZcdkZccy1GYG82JC1GIzYjRl91RjkvJS5saW5ldGhpY2tuZXNzR0ZedC8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zbdy8lKWJldmVsbGVkR0Y9Rlx2LUkobXN1YnN1cEdGJDYoRl5yRmlzLUYjNiVGY3MtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZldEZndEZbdC8lMXN1cGVyc2NyaXB0c2hpZnRHRmF0Rl90L0krbXNlbWFudGljc0dGJFEsW25vbmUsbm9uZV1GJ0Zcdi1GYXc2KEZeckZqdC1GIzYlRmh0RmV3Rlt0Rmh3Rl90Rmp3Rlx2LUklbXN1cEdGJDYlLUZgbzYkLUYjNidGW3RGZXctRmRzNiVGXnJGaXNGX3RGZXctRmRzNiVGXnJGanRGX3RGOS1GIzYlRl91RmV3Rlt0Rmh3RmFy LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkieEc2IiIiIUYpMkYnIiIiKigpRicsJiEiIkYrSSJwR0YoRitGKyksJkYrRitGJ0YvLCZGL0YrSSJxR0YoRitGKy1JJUJldGFHNiRGJEkoX3N5c2xpYkdGKDYkRjBGNEYvRik= KjAtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCgmSSZ0aGV0YUdGKDYjIiIiRi4mRiw2IyIiI0YuJkYsNiMiIiRGLkYuKSZJInhHRihGLSwmRitGLiEiIkYuRi4pJkY3RjAsJkYvRi5GOUYuRi4pLChGLkYuRjZGOUY7RjksJkYyRi5GOUYuRi4tRiQ2I0YrRjktRiQ2I0YvRjktRiQ2I0YyRjk= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYzLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEoJnRoZXRhO0YnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictRiM2Iy1JI21uR0YkNiRRIjFGJ0Y1LyUvc3Vic2NyaXB0c2hpZnRHUSIwRictSSNtb0dGJDYtUSomY29sb25lcTtGJ0Y1LyUmZmVuY2VHRjQvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGVS1GOzYkUSQxLjVGJ0Y1LUZCNi1RIjtGJ0Y1RkUvRkhRJXRydWVGJ0ZJRktGTUZPRlEvRlRRJjAuMGVtRidGVi1GLDYlRi4tRiM2Iy1GOzYkUSIyRidGNUY+RkEtRjs2JFEkMi4zRidGNUZlbi1GLDYlRi4tRiM2Iy1GOzYkUSIzRidGNUY+RkEtRjs2JFEkNC4yRidGNUZlbi1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0Zbby8lJmRlcHRoR0ZlcC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GQjYtUSJ+RidGNUZFRkdGSUZLRk1GT0ZRRmpuL0ZXRltvLUYvNiVRJmV2YWxmRicvRjNGaW4vRjZRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiQtRi82JVElc3Vic0YnRmRxRmVxLUZocTYkLUYjNjFGKy1GQjYtUSI9RidGNUZFRkdGSUZLRk1GT0ZRRlNGVkZYLUZCNi1RIixGJ0Y1RkVGaG5GSUZLRk1GT0ZRRmpuL0ZXUSwwLjMzMzMzMzNlbUYnRlxvRmNyRmNvRmZyRmZvRmNyRl1wRmZyRl1xLUYvNiVRJEludEYnRmRxRmVxLUZocTYkLUYjNipGW3MtRmhxNiQtRiM2Ky1GLzYlUSJwRidGZHFGZXFGZnItRiw2JS1GLzYlUSJ4RidGZHFGZXFGXm9GPkZjci1GOzYkRkBGNS1GQjYtUSMuLkYnRjVGRUZHRklGS0ZNRk9GUS9GVFEsMC4yMjIyMjIyZW1GJ0ZgcUY6LUZCNi1RKCZtaW51cztGJ0Y1RkVGR0ZJRktGTUZPRlFGY3QvRldGZHQtRiw2JUZbdEY4Rj5GNUZmckZpdEZjckZedEZgdEY6RjVGNUY1RmVu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIjOiEiIg== JCIjQiEiIg== JCIjVSEiIg== JCIrKysrKzUhIio= JSFH openturns-1.9/validation/src/DirichletCDF.mw000066400000000000000000001241151307543307100211410ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZILUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMzBGJ0Y5RjVGTy1GLDYlUSRkaW1GJ0YvRjJGX28tRmNvNiRRIjJGJ0Y5RjVGTy1GLDYlUSZ0aGV0YUYnL0YwRj1GOUZfby1JKG1mZW5jZWRHRiQ2Ji1GIzYnLUZjbzYkUSUwLjI1RidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUZjbzYkUSQwLjVGJ0Y5RmhwLUZjbzYkUSQxLjVGJ0Y5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGNUZPLUYsNiVRImZGJ0YvRjJGX28tSSZtZnJhY0dGJDYoLUYjNiQtRiw2JVEmR0FNTUFGJ0ZfcEY5LUZhcDYkLUYjNiQtRiw2JVEkc3VtRidGL0YyLUZhcDYkLUYjNixGXHAtRmFwNiYtRiM2Iy1GLDYlUSJpRidGL0YyRjlGZHFGZ3FGaHBGZHMtRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRmNvNiRRIjFGJ0Y5LUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnRltvRmZvLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGYHQvRk5GYXRGanNGOUY5LUYjNiQtRiw2JVEocHJvZHVjdEYnRi9GMi1GYXA2JC1GIzYsRmJyLUZhcDYkLUYjNiRGXHBGYHNGOUZocEZkc0Znc0Zqc0ZddEZmb0ZidEZqc0Y5LyUubGluZXRoaWNrbmVzc0dGXHQvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZ3UvJSliZXZlbGxlZEdGPUZodC1GYXA2JC1GIzYqLUYsNiVRInhGJ0YvRjItSSVtc3VwR0YkNiVGYHMtRiM2JkZccEZgcy1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRmB0RmV0RmpzLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZocEZkc0Znc0Zqc0ZddEZmb0Y5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GZHY2JS1GYXA2JC1GIzYmRmpzRmh2RmlyLUZhcDYkLUYjNipGYHZGYHNGaHBGZHNGZ3NGanNGXXRGZm9GOUY5LUYjNiZGXHAtRmFwNiYtRiM2JUZmb0ZidEZqc0Y5RmRxRmdxRmh2RmpzRlt3LUY2Ni1RIjtGJ0Y5RjtGW3FGQEZCRkRGRkZIRmpuRk1GTy1GUDYmRlJGVUZYL0ZlblElYXV0b0YnRmduLUYsNiVRJHBkZkYnRi9GMkZfb0ZqcUZedy1GLDYlUSpwaWVjZXdpc2VGJ0YvRjItRmFwNiQtRiM2K0ZnbkZpckZndy1GNjYtUSYmbGVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk1GanNGaHBGanNGaHAtRmNvNiRGXXdGOUY5RmduRmF4 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCZJInhHNiI2IyIiIiQhI3YhIiMmRiU2IyIiIyQhIiYhIiIsKEYoRihGJEYxRixGMSQiIiZGMSQiPztVcS82cnAicFsnKXlPJSopPiEjSQ== LCQqKiZJInhHNiI2IyIiIiQhI3YhIiMmRiU2IyIiIyQhIiYhIiIsKEYoRihGJEYxRixGMSQiIiZGMS1JKnBpZWNld2lzZUclKnByb3RlY3RlZEc2JTEsJkYkRihGLEYoRihGKCIiIUYoJCI/O1VxLzZycCJwWycpeU8lKik+ISNJ QyQ/KEkiakc2IiIiISIiIiIjNUkldHJ1ZUclKnByb3RlY3RlZEdDJz5JJXhsaW1HRiU3JCwkRiQjRidGKCQiIiYhIiI+SSd2YWxQREZHRiVJJHBkZkdGJT5JJ3ZhbENERkdGJUY2PyhJImlHRiVGJ0YnSSRkaW1HRiVGKUMkPkY1LUklc3Vic0dGKjYkLyZJInhHRiU2I0Y6JkYtRkRGNT5GOC1JJEludEc2JEYqSShfc3lzbGliR0YlNiRGOC9GQjtGJkZFLUkmcHJpbnRHRio2Iy0mSSZldmFsZkdGKjYjRjI2IzclRi1GNUY4RjM= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyU3JCQiIiFGJSQiIiYhIiIkIiIiSSlpbmZpbml0eUclKnByb3RlY3RlZEdGJA== NyU3JCQiJisrIiEiJiQiIiYhIiIkIiYxKyIhIiUkIiYwbyZGJg== NyU3JCQiJisrIyEiJiQiIiYhIiIkIiZGOiZGJiQiJm5tJ0Ym NyU3JCQiJisrJCEiJiQiIiYhIiIkIiZTNSRGJiQiJmFGKEYm NyU3JCQiJisrJSEiJiQiIiYhIiIkIiYqbzxGJiQiJjtxKEYm NyU3JCQiJisrJiEiJiQiIiYhIiIkIiIhRiskIiY8LClGJg== NyU3JCQiJisrJyEiJiQiIiYhIiJeIyQiIiFGLCQiJkdCKUYm NyU3JCQiJisrKCEiJiQiIiYhIiJeIyQiIiFGLCQiJlhRKUYm NyU3JCQiJisrKSEiJiQiIiYhIiJeIyQiIiFGLCQiJj5bKUYm NyU3JCQiJisrKiEiJiQiIiYhIiJeIyQiIiFGLCQiJl5gKUYm NyU3JCQiIiIiIiEkIiImISIiXiMkRiZGJiQiJjtiKSEiJg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEkSW50RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNjAtRiw2JVEiZkYnRi9GMi1JI21vR0YkNi1RIixGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGRS8lKnN5bW1ldHJpY0dGRS8lKGxhcmdlb3BHRkUvJS5tb3ZhYmxlbGltaXRzR0ZFLyUnYWNjZW50R0ZFLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRj42LVEifkYnRkFGQy9GR0ZFRkhGSkZMRk5GUEZSL0ZWRlQtRiw2JVEieEYnRi9GMi1GNjYmLUYjNiUtSSNtbkdGJDYkUSIyRidGQS8lK2V4ZWN1dGFibGVHRkVGQUZBLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUY+Ni1RIj1GJ0ZBRkNGZW5GSEZKRkxGTkZQL0ZTUSwwLjI3Nzc3NzhlbUYnL0ZWRl5wLUZfbzYkUSIwRidGQS1GPjYtUSMuLkYnRkFGQ0ZlbkZIRkpGTEZORlAvRlNRLDAuMjIyMjIyMmVtRidGZm4tRl9vNiRRIjFGJ0ZBLUY+Ni1RKCZtaW51cztGJ0ZBRkNGZW5GSEZKRkxGTkZQRmZwL0ZWRmdwRmduLUY2NiYtRiM2JUZocEZib0ZBRkFGZG9GZ29GYm9GQUZBLUY+Ni1RIjtGJ0ZBRkNGRkZIRkpGTEZORlBGUkZfcEZib0ZB LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCoqJCIrJ1ImUkQ2ISM1IiIiKSZJInhHRic2I0YuJCIjdiEiIyEiIikmRjE2IyIiIyQiIiZGNkY2KSwoRi5GLkYwRjZGOEY2JCIjREY1RjZGLi9GODsiIiEsJkYuRi5GMEY2 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/Ellipse.mw000066400000000000000000001712571307543307100203230ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY8LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUS5MaW5lYXJBbGdlYnJhRidGL0YyRjlGNUZPRmduLUYsNiVRJlNpZ21hRicvRjBGPUY5LUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEnTWF0cml4RidGL0YyLUZgbzYkLUYjNiMtRmBvNiYtRiM2JS1GYG82Ji1GIzYpLUkobXN1YnN1cEdGJDYoLUYsNiVRKCZzaWdtYTtGJ0Zqb0Y5LUYjNiMtSSNtbkdGJDYkUSIxRidGOS1GIzYjLUZmcTYkUSIyRidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRicvJS9zdWJzY3JpcHRzaGlmdEdGYHIvSSttc2VtYW50aWNzR0YkUSxbbm9uZSxub25lXUYnLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictSSVtc3ViR0YkNiVGYHFGY3FGYXItRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUZdczYlRmBxRmlxRmFyRl9zLUYsNiVRJHJob0YnRmpvRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Zmci1GYG82Ji1GIzYpRlxzRl9zRmJzRl9zRmRzRmZyLUZecTYoRmBxRmlxRmlxRl5yRmFyRmNyRjlGZ3NGanNGOUZnc0Zqc0Y5LUY2Ni1RIjtGJ0Y5RjtGaXJGQEZCRkRGRkZIRmpuRk1GTy1GLDYlUSNNdUYnRmpvRjlGW3AtRiw2JVEnVmVjdG9yRidGL0YyLUZgbzYkLUYjNiMtRmBvNiYtRiM2JS1GXXM2JS1GLDYlUSUmbXU7RidGam9GOUZjcUZhckZmci1GXXM2JUZmdUZpcUZhckY5RmdzRmpzRjlGY3RGTy1GLDYlUSJYRidGL0YyRltwRml0LUZgbzYkLUYjNiMtRmBvNiYtRiM2JS1GXXM2JS1GLDYlUSJ4RidGL0YyRmNxRmFyRmZyLUZdczYlRmh2RmlxRmFyRjlGZ3NGanNGOUZjdA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMENdQjJlb1Mi LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwJzR1aHYmb1Mi LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwa19CMmVvUyI= QyQ+SSJRRzYiLUknZmFjdG9yR0YlNiMtSSdleHBhbmRHJSpwcm90ZWN0ZWRHNiMtSTBkZWxheURvdFByb2R1Y3RHNiRGKy9JK21vZHVsZW5hbWVHRiVJLFR5cGVzZXR0aW5nRzYkRitJKF9zeXNsaWJHRiU2JC1GLjYkLUkqVHJhbnNwb3NlR0YlNiMsJkkiWEdGJSIiIkkjTXVHRiUhIiItSS5NYXRyaXhJbnZlcnNlR0YlNiNJJlNpZ21hR0YlRjtGPQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiwsNiomJkkieEc2IjYjIiIiIiIjJkkmc2lnbWFHRic2I0YqRiohIiIqKEYlRikmSSNtdUdGJ0YoRilGK0YqRioqLEYlRilJJHJob0dGJ0YpJkYmRi1GKSZGLEYoRilGK0YpRioqLEYlRilGM0YpJkYxRi1GKUY1RilGK0YpISIjKiZGMEYqRitGKkYuKixGMEYpRjNGKUY0RilGNUYpRitGKUY4KixGMEYpRjNGKUY3RilGNUYpRitGKUYqKiZGNEYqRjVGKkYuKihGNEYpRjdGKUY1RipGKiomRjdGKkY1RipGLkYpRjVGOEYrRjgsJkYzRilGLkYpRi4sJkYzRilGKUYpRi4= QyQtSSVzdWJzRyUqcHJvdGVjdGVkRzYlLyZJI211RzYiNiMiIiIiIiEvJkYpNiMiIiNGLUkiUUdGKkYs LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiwsKComJkkieEc2IjYjIiIiIiIjJkkmc2lnbWFHRic2I0YqRiohIiIqLEYlRilJJHJob0dGJ0YpJkYmRi1GKSZGLEYoRilGK0YpRioqJkYxRipGMkYqRi5GKUYyISIjRitGNCwmRjBGKUYuRilGLiwmRjBGKUYpRilGLg== Qyg+SSJZRzYiLUknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiM3JCZJInlHRiU2IyIiIiZGLjYjIiIjRjA+SSJSR0YlLUknTWF0cml4R0YoNiM3JDckLUkkY29zR0YoNiNJJnRoZXRhR0YlLUkkc2luR0YoRj03JCwkRj8hIiJGO0YwLUkoY29sbGVjdEdGKDYkLUkpc2ltcGxpZnlHRig2Iy1JJXN1YnNHRik2Jy8mSSJ4R0YlRi8mLUkwZGVsYXlEb3RQcm9kdWN0RzYkRikvSSttb2R1bGVuYW1lR0YlSSxUeXBlc2V0dGluZ0dGKDYkRjVGJEYvLyZGT0YyJkZRRjIvJkkjbXVHRiVGLyIiIS8mRmduRjJGaG5JIlFHRiVGLEYw LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIwKUdIUXAmb1Mi LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMDMlSFFwJm9TIg== LCgqLCZJJnNpZ21hRzYiNiMiIiIhIiMmRiU2IyIiI0YpLCoqJkYqRiwtSSRjb3NHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2I0kmdGhldGFHRiZGLCEiIiokRiRGLEY2KixGJEYoRipGKEkkcmhvR0YmRihGL0YoLUkkc2luR0YxRjRGKEYpKiZGL0YsRiRGLEYoRigsJkY2RigqJEY5RixGKEY2JkkieUdGJkYnRixGKCouRiRGKUYqRiksKioqRiRGKEYqRihGOUYoRi9GLCIiJSooRiRGKEYqRihGOUYoRikqKEYkRixGL0YoRjpGKEYsKihGKkYsRi9GKEY6RihGKUYoRj1GNiZGQEYrRihGP0YoRigqLEYkRilGKkYpLCpGOEYsRjxGNiokRipGLEY2Ri5GKEYoRj1GNkZIRixGKA== QyQ+SSRzb2xHNiItSSZzb2x2ZUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkLUklc3Vic0dGKTYkLyZJJnNpZ21hR0YlNiMiIiImRjE2IyIiIywqKipGMEYzRjRGM0kkcmhvR0YlRjMtSSRjb3NHRig2I0kmdGhldGFHRiVGNiIiJSooRjBGM0Y0RjNGOUYzISIjKihGMEY2RjpGMy1JJHNpbkdGKEY8RjNGNiooRjRGNkY6RjNGQkYzRkBGPUYz LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NiQsJEkjUGlHJSpwcm90ZWN0ZWRHIyIiIiIiJSwkRiQjIiIkRig= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY0LUkjbWlHRiQ2JVEnYXNzdW1lRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEiKEYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR0YxLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0YxLyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSdsc3BhY2VHUSwwLjE2NjY2NjdlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJHJob0YnL0YwRj9GOS1GNjYtUSI+RidGOS9GPEY/Rj0vRkFGP0ZCRkRGRkZIL0ZLUSwwLjI3Nzc3NzhlbUYnL0ZORlktRjY2LVEqJnVtaW51czA7RidGOUZWRj1GV0ZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmluLUkjbW5HRiQ2JFEiMUYnRjktRjY2LVEiLEYnRjlGVi9GPkYxRldGQkZERkZGSC9GS1EmMC4wZW1GJy9GTlEsMC4zMzMzMzMzZW1GJ0ZPLUY2Ni1RIjxGJ0Y5RlZGPUZXRkJGREZGRkhGWEZaRltvLUY2Ni1RIilGJ0Y5RjtGPUZARkJGREZGRkhGSkZNLUY2Ni1RIjpGJ0Y5RlZGPUZXRkJGREZGRkhGWEZaLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRmRvLyUmZGVwdGhHRmVwLyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZhcDYmRmNwRmZwRmhwL0ZbcVElYXV0b0YnLUYsNiVRKXNpbXBsaWZ5RidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNistRiw2JVElc3Vic0YnRi9GMkY1LUklbXN1YkdGJDYlLUYsNiVRKCZzaWdtYTtGJ0ZSRjktRiM2I0Zbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RIj1GJ0Y5RlZGPUZXRkJGREZGRkhGWEZaLUZdcjYlRl9yLUYjNiMtRlxvNiRRIjJGJ0Y5RmRyRl9vLUY2Ni1RIn5GJ0Y5RlZGPUZXRkJGREZGRkhGY28vRk5GZG8tRiw2JVEkc29sRidGL0YyLUZlcTYmRmJyRjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGOUZqby1GNjYtUSI7RidGOUZWRmJvRldGQkZERkZGSEZjb0Za LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Error, numeric exception: division by zero LUklc3Vic0clKnByb3RlY3RlZEc2JC9JJHJob0c2IiMiIiIiIiMmSSRzb2xHRig2I0Yq LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknYXJjdGFuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCosJkkmc2lnbWFHRic2IyIiIkYuJkYsNiMiIiNGLiwmKiYsKComRitGMUYvRjEhIiIqJEYrIiIlRi4qJEYvRjhGLkY2LCpGNUY2RjdGLkY5Ri4qJCwsKiZGKyIiJ0YvRjEhIiQqJkYrRjhGL0Y4RjgqJkYrRjFGL0Y+Rj8qJEYrIiIpRi4qJEYvRkNGLiNGLkYxRi5GLkYuRjZGLkYuRjMjRjZGMSwmKiRGK0YxRi4qJEYvRjFGNkY2RkYsJCokRjNGRUZF JSFH TTdSMApJPFJUQUJMRV9TQVZFLzE0MDY4NTgwNzIzNTAyNFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjKiQmJSZzaWdtYUc2IyIiIiIiIyooRihGKyZGKTYjRixGKyUkcmhvR0YrRi0qJEYuRixGJg==TTdSMApJPFJUQUJMRV9TQVZFLzE0MDY4NTc1NjE3NDA5NlgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIyYlI211RzYjIiIiJkYoNiMiIiNGJg==TTdSMApJPFJUQUJMRV9TQVZFLzE0MDY4NTgwNzIzNTI2NFgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIyYlInhHNiMiIiImRig2IyIiI0YmTTdSMApJPFJUQUJMRV9TQVZFLzE0MDY4NTY5MzgyOTI4OFgqJSlhbnl0aGluZ0c2IjYiW2dsISMlISEhIiMiIyYlInlHNiMiIiImRig2IyIiI0YmTTdSMApJPFJUQUJMRV9TQVZFLzE0MDY4NTY5MzgyOTQwOFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjLSUkY29zRzYjJSZ0aGV0YUcsJC0lJHNpbkdGKSEiIkYsRidGJg== openturns-1.9/validation/src/ExponentialModel.mw000066400000000000000000001013421307543307100221610ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYxLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJHJob0YnL0YwRj1GOS1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1GIzYpLUklbXN1YkdGJDYlLUYsNiVRImFGJ0YvRjItRiM2Iy1GLDYlUSJpRidGL0YyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRictRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUZpbzYlLUYsNiVRIlJGJ0YvRjItRiM2Iy1GLDYlUSNpakYnRi9GMkZjcEZmcC1GaW82JUZbcC1GIzYjLUYsNiVRImpGJ0YvRjJGY3BGZnAtSShtZmVuY2VkR0YkNiQtRiM2JS1GaW82JS1GLDYlUSJzRidGL0YyRl5wRmNwLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GaHItRmlvNiVGYXJGZXFGY3BGOS1GIzYlLUklbXN1cEdGJDYlLUZbcjYkLUYjNiMtRmRvNihGanEtRiM2Iy1JI21uR0YkNiRRIjJGJ0Y5LyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZidC8lKWJldmVsbGVkR0Y9RjlGZ3MvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZlcEZkci1GX3M2JS1GW3I2JC1GIzYnRmlzRmZwLUYsNiVRI1BpRidGX29GOUZmcC1GLDYlUSZvbWVnYUYnRl9vRjlGOUZnc0ZndEZddEZgdEZjdEZldEY1Rk8tRiw2JVEickYnRi9GMkZgb0Znbi1GLDYlUSdmYWN0b3JGJ0YvRjItRltyNiQtRiM2JC1GLDYlUSVzdWJzRidGL0YyLUZbcjYkLUYjNitGX3ItRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRmRvNigtRmpzNiRGX3RGOS1GIzYjRl9yRl10RmB0RmN0RmV0LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRidGanJGZnYtRmRvNihGW3ctRiM2I0ZqckZddEZgdEZjdEZldEZfd0Zcb0Y5RjktRjY2LVEiO0YnRjlGO0Zid0ZARkJGREZGRkhGam5GTQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqMCZJImFHNiI2I0kiaUdGJiIiIiZJIlJHRiY2I0kjaWpHRiZGKSZGJTYjSSJqR0YmRiksJiZJInNHRiZGJ0YpJkYzRi9GKUYpRjJGKUY0RiksKiokRjIiIiNGKSomRjJGKUY0RilGNyokRjRGN0YpKipJI1BpRyUqcHJvdGVjdGVkR0Y3SSZvbWVnYUdGJkY3RjJGN0Y0RjciIzshIiIiIiU= QyQtSSlzaW1wbGlmeUc2IjYjLCZJInJHRiUiIiIqLCZJImFHRiU2I0kiaUdGJUYpJkkiUkdGJTYjSSNpakdGJUYpJkYsNiNJImpHRiVGKSwmJkkic0dGJUYtRikmRjhGNEYpRiksJi1JIipHJSpwcm90ZWN0ZWRHNiQjRikiIiUsKComRjdGKUY5ISIiRikiIiNGKSomRjlGKUY3RkNGKUYpKigtSSJeR0Y9NiQsJComSSNQaUdGPUYpSSZvbWVnYUdGJUYpRkRGREYpRjdGKUY5RilGKUZDRkNGKQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiIh LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEpc2ltcGxpZnlGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JC1GLDYlUSVzdWJzRidGL0YyLUY2NiQtRiM2Jy1JJW1zdWJHRiQ2JS1GLDYlUSJzRidGL0YyLUYjNiMtRiw2JVEiakYnRi9GMi8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUkjbW9HRiQ2LVEiPUYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGVy8lKXN0cmV0Y2h5R0ZXLyUqc3ltbWV0cmljR0ZXLyUobGFyZ2VvcEdGVy8lLm1vdmFibGVsaW1pdHNHRlcvJSdhY2NlbnRHRlcvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0Zgby1GQjYlRkQtRiM2Iy1GLDYlUSJpRidGL0YyRkwtRlA2LVEiLEYnRlNGVS9GWUYxRlpGZm5GaG5Gam5GXG8vRl9vUSYwLjBlbUYnL0Zib1EsMC4zMzMzMzMzZW1GJy1GLDYlUSJyRidGL0YyRlNGUw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqLCZJImFHNiI2I0kiaUdGJiIiIiZJIlJHRiY2I0kjaWpHRiZGKSZGJTYjSSJqR0YmRikmSSJzR0YmRidGKSwmRilGKSooSSNQaUclKnByb3RlY3RlZEciIiNJJm9tZWdhR0YmRjdGMUY3IiIlISIiRjc= JSFH openturns-1.9/validation/src/FrankCopulaKendallAsymptotic.mw000066400000000000000000001170451307543307100244760ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY4LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMjUwRidGOUY1Rk9GZ24tRiw2JVEkdGF1RicvRjBGPUY5Rl9vLUZjbzYkUSIxRidGOS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmFwLUkmbWZyYWNHRiQ2KC1GIzYlLUZjbzYkUSI0RidGOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tSShtZmVuY2VkR0YkNiQtRiM2JS1GZHA2KC1GIzYkLUYsNiVRJEludEYnRi9GMi1GX3E2JC1GIzYpLUZkcDYoLUYsNiVRInRGJ0YvRjItRiM2Ji1GLDYlUSRleHBGJ0Zpb0Y5LUZfcTYkLUYjNiNGYHJGOS1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRmBwRmJwRmpvLyUubGluZXRoaWNrbmVzc0dGXHAvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGY3MvJSliZXZlbGxlZEdGPS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRmByLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZjbzYkUSIwRidGOS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZgcEZbby1GLDYlUSZ0aGV0YUYnRmlvRjlGOS1GIzYjRmd0Rl9zRmFzRmRzRmZzRlxzRmpvRjlGanRGX3NGYXNGZHNGZnMtRjY2LVEiO0YnRjlGO0ZbdEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRI211RidGaW9GOUZfby1GZHA2KC1GIzYjRmhwLUYjNiUtRl9xNiQtRiM2JUZqb0Zcc0Zmb0Y5RltxRmd0Rl9zRmFzRmRzRmZzRjU= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYiIiJGIyomLCYqJi1JJEludEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYkKiZJInRHRixGIywmLUkkZXhwR0YpNiNGL0YjISIiRiNGNC9GLzsiIiFJJnRoZXRhR0YsRiNGOEY0RiNGNEYjRiNGOEY0IiIl QyQ/KEkiaUc2IiIiIkYmIiImSSV0cnVlRyUqcHJvdGVjdGVkRy1JJmV2YWxmR0YpNiMtSSVzdWJzR0YpNiQvSSZ0aGV0YUdGJSkiIzVGJDcjKiYtSSIrR0YpNiRJJHRhdUdGJSwmISIiRiYqJEYxRjsiIiVGJkYxIiIjRiY= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyMkImV6byFRLyZcPmprLCdbUDZlSzYjXFY+bElqJHpzREpOXkFzMCEqPigpKXk9XVhiOT5dYU5CMihbaXhPLCFbT0MrPHA9QilvUkckXGMhUV8iKSp6elcqKlw5TCteRnQoM01mQ3IxVigpUilbISoqR1RIJz56VTlxJnlodVMwakNmN1lzO0Q1JXk+RidReGQnISRcIw== NyMkImV6O3N3UmEkekIqR2JIRGNyS0RESklnRlZ5XWlvZl5iQSdSKzEyd2hicmNXYXZHJVtNJ3B1PmptJ2ViN0JjTHBAPDlgWjdnWkwoSD1yXkgjcHBOLHlxQnckNGFjP1podUEpKjMuY1Vcd0UxRD9kZCV5dm92K1RlbTFtKilldTBIUm5pdHpsISRcIw== NyMkImV6UylRb2FVSCZ5XUJlLWokencvNkpIVjljel5CWXM9Pi1jKVtGUysiUT8vMHJ1QkxwSzJeWUJgeTYvdV42Lj8hWygpKltePUZ3WyRcZUY8Z0BAWy56Q2c6WEwmXC5HaCIpKUgrWzxIQlU0diQ+RltnKnp2b3YrVGVtMW0qKWV1MEhSbml0emwhJFwj NyMkImV6UylRb2FVSCZ5XUJlLWokencvNkpIVjljel5CWXM9Pi1jKVtGUysiUT8vMHJ1QkxwSzJeWUJgeTYvdV42Lj8hWygpKltePUZ3WyRcZUY8Z0BAWy56Q2c6WEwmXC5HaCIpKUgrWzxIQlU0diQ+RltnKnp2b3YrVGVtMW0qKWV1MEhSbml0emwhJFwj NyMkImV6UylRb2FVSCZ5XUJlLWokencvNkpIVjljel5CWXM9Pi1jKVtGUysiUT8vMHJ1QkxwSzJeWUJgeTYvdV42Lj8hWygpKltePUZ3WyRcZUY8Z0BAWy56Q2c6WEwmXC5HaCIpKUgrWzxIQlU0diQ+RltnKnp2b3YrVGVtMW0qKWV1MEhSbml0emwhJFwj LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYqLUYsNiVRJHRhdUYnL0YwUSZmYWxzZUYnL0YzUSdub3JtYWxGJy1JI21vR0YkNi1RIixGJ0Y/LyUmZmVuY2VHRj4vJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGPi8lKnN5bW1ldHJpY0dGPi8lKGxhcmdlb3BHRj4vJS5tb3ZhYmxlbGltaXRzR0Y+LyUnYWNjZW50R0Y+LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRiw2JVEmdGhldGFGJ0Y9Rj8tRkI2LVEiPUYnRj9GRS9GSEY+RklGS0ZNRk9GUS9GVFEsMC4yNzc3Nzc4ZW1GJy9GV0Zbby1GQjYtUSomdW1pbnVzMDtGJ0Y/RkVGaW5GSUZLRk1GT0ZRL0ZUUSwwLjIyMjIyMjJlbUYnL0ZXRmFvLUkjbW5HRiQ2JFElMTAwMEYnRj8tRkI2LVEjLi5GJ0Y/RkVGaW5GSUZLRk1GT0ZRRmBvL0ZXRlVGY29GPy1GQjYtUSI7RidGP0ZFRkdGSUZLRk1GT0ZRRlNGXG8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdjbzckJCEmKysiISIiJCExdUVPKHpsKycqKiEjOzckJCExbm1tO3AwayYqISM4JCExJT5Ea25bI2UqKiEjOzckJCExTUwkMzxYWj0qISM4JCExalQoSF9GbCYqKiEjOzckJCExbW1tVCVwImUoKSEjOCQhMTMvIVs4OVcmKiohIzs3JCQhMW1tbSI0bShHJCkhIzgkITBuMS9gbz8mKiohIzo3JCQhMUxMJDNpLjkheiEjOCQhMXcpektaIltcKiohIzs3JCQhMW1tOy9SPTB2ISM4JCExNyV6Z0o/byUqKiEjOzckJCEsdkxAXDQoISIpJCEwLCFcYkJ2VioqISM6NyQkITFubTsvc2lxbSEjOCQhMSVlJyo+XCQ9UyoqISM7NyQkISx2eSRwWmkhIikkITFsO0hUXDlPKiohIzs3JCQhMU1MTCR5YUUiZSEjOCQhMSU+PyxQejgkKiohIzs3JCQhMW1tbSI+cyVIYSEjOCQhMTw6Ujg3YkUqKiEjOzckJCEqTio0KSpcISInJCExY0hwbkhCPyoqISM7NyQkISpEYlxjJSEiJyQhMUA7N2w7cDcqKiEjOzckJCEqbFN2OSUhIickITFXdnUrKVJSISoqISM7NyQkITFubTsvIylbb1AhIzgkITE0eG9fKj5WKikqISM7NyQkITJOTExMPWV4SiQhIzkkITEyT2g2Vy4hKSkqISM7NyQkITJNTExMdElmJEghIzkkITEjUiw8TT9YJykqISM7NyQkISx2anU8XCMhIikkITF2dW1lOmBTKSohIzs3JCQhMkxMTExCQCcpNCMhIzkkITFudyVSaiMqMyIpKiEjOzckJCEsdmpwc20iISIpJCExO0NaKXlgQ3cqISM7NyQkISxEIjRfYzchIikkITBcUHM3R2VvKiEjOjckJCEybm07L0pNQS8iISM5JCExVT9vQmtFQScqISM7NyQkITFMTEwkM3gleiMpISM5JCExIj0rZj13a18qISM7NyQkITFMTCRlOWQ7SichIzkkITF5KDRUbG9GUSohIzs3JCQhMk1MTCQzcyRRTSUhIzokITElPjt2JGYtOSIqISM7NyQkITFubVQmUWRERyQhIzkkITF2MjUyPF1VKSkhIzs3JCQhLERjeDdBIyEiKiQhMURFKzZ2ZUskKSEjOzckJCEybm1UNWxQMXAiISM6JCExViVwNnpIVSd5ISM7NyQkITJMTCRlUngqKmY2ISM6JCExLS5tIWVtMS8oISM7NyQkITFuO2FReXhZKikhIzokITFeIT4pR2daXWohIzs3JCQhLUQiR3lOSCchIzYkITFqIypHeHYmPUgmISM7NyQkITFtVGctJnlwJ1whIzokITJ0TiYpXDBIaWElISM8NyQkITJNTGVSc3kuayQhIzskITEiUSE9Qlg6ME8hIzs3JCQhL0RKWCp5UEojISM4JCEyTDtseFkpZVdDISM8NyQkITFubW1tO3pyKSohIzskITJKRicpPlNdajMiISM8NyQkIjJNTDNGcF55IVIhIzwkIjFiJG8mPVBXTlYhIzw3JCQiMkxMM19dXChvPCEjOyQiMilILGFBJHlvIT4hIzw3JCQiMk4kZTlUUXJZSiEjOyQiMiYpW1hELz0iKj4kISM8NyQkIjJOTCQzeCJ5WV8lISM7JCIxUCwjPi1GZkQlISM7NyQkIjJOTGUqW29nIUcoISM7JCIxRFA3N3UkSHUmISM7NyQkIjJMTCQzX05sLjUhIzokIjE5dkxVNmNubSEjOzckJCIyTExla0dSW2IiISM6JCIxPG1bQFliKnAoISM7NyQkIjJMTEwzLURnNSMhIzokIjElZjo6Q04hXCMpISM7NyQkIjFMTGUqWydSM0shIzkkIjEpSCpvYjE+PCkpISM7NyQkIjJPTEwkZXp3NVYhIzokIjE7IVspNCopXDIiKiEjOzckJCIxbm1tbUorSWkhIzkkIjFlNVIiPSkqW1AqISM7NyQkIit2JFEjXCIpISIpJCIxKUc1MUtrIT4mKiEjOzckJCIybm07elwxQS0iISM5JCIwenFvZicpXGgqISM6NyQkIjJMTEwkZSIqW0g3ISM5JCIwJ1JSS1YseicqISM6NyQkIilkeGQ7ISImJCIxJT5MXiwyNncqISM7NyQkIitEMHh3PyEiKCQiMXkoKSl5Iyk9KjMpKiEjOzckJCIsRGNwQFsjISIpJCIxKXpzOmY9KlIpKiEjOzckJCIrdmdIS0ghIigkIjBpVCVlTE5rKSohIzo3JCQiMm5tbW13YW5MJCEjOSQiMUgzeTJTciEpKSohIzs3JCQiKnYrJ29QISInJCIxJD4hKls0QlYqKSohIzs3JCQiMk9MTGVSPCpmVCEjOSQiMTBoNW9XQS8qKiEjOzckJCIqJilIeGUlISInJCIxIio+OkRONzgqKiEjOzckJCIybm1tIkghby0qXCEjOSQiMUsseiwjMywjKiohIzs3JCQiLERUTzVUJiEiKSQiMUUvSEo8SUUqKiEjOzckJCIxbm1tO1dUQWUhIzgkIjEiKUdNblNcSioqISM7NyQkIixEMSozYGkhIikkIjBDVDcqKSo+TyoqISM6NyQkIjFNTExMKnp5bSchIzgkIjEleTN3ISplLCUqKiEjOzckJCIxTExMM04xIzQoISM4JCIxInpVRHVIUCUqKiEjOzckJCIxbW07SFl0N3YhIzgkIjFEelJaTyhvJSoqISM7NyQkIil4RyoqeSEiJiQiMDs3JnB6WVwqKiEjOjckJCIxbW1tVDZLVSQpISM4JCIxdVM6ZWk5XyoqISM7NyQkIjFNTExMYmRRKCkhIzgkIjF1MV44QEphKiohIzs3JCQiLERPbDU7KiEiKSQiMUJUM2NgVGMqKiEjOzckJCIsdi5VYWMqISIpJCIxdnl6NlpEZSoqISM7NyQkIiYrKyIhIiIkIjF1RU8oemwrJyoqISM7LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhJisrIiEiIiQiJisrIiEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEnJiM5NTI7NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSZmYWxzZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ25vcm1hbDYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJD8jISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlNU8hIiItJS5CT1VORFNfSEVJR0hURzYjJCIlISlRISIiLSUpQ0hJTERSRU5HNiI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEnc2VyaWVzRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNictRiw2JVEkdGF1RicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUkjbW9HRiQ2LVEiLEYnRj8vJSZmZW5jZUdGPi8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0Y+LyUqc3ltbWV0cmljR0Y+LyUobGFyZ2VvcEdGPi8lLm1vdmFibGVsaW1pdHNHRj4vJSdhY2NlbnRHRj4vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GLDYlUSZ0aGV0YUYnRj1GPy1GQjYtUSI9RidGP0ZFL0ZIRj5GSUZLRk1GT0ZRL0ZUUSwwLjI3Nzc3NzhlbUYnL0ZXRltvLUYsNiVRKWluZmluaXR5RidGL0YyRj8tRkI2LVEiO0YnRj9GRUZHRklGS0ZNRk9GUUZTRlxv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Error, (in asympt) unable to compute series JSFH openturns-1.9/validation/src/GammaComplex.mw000066400000000000000000001350241307543307100212700ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZcci1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSdhc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2KS1GLDYlUSZkZWx0YUYnL0YwRj1GOS1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIjBGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEieEYnRi9GMkZfcC1GLDYlUSVyZWFsRidGL0YyRjlGNUZPRmduLUYsNiVRInpGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZkby1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmVxLUYsNiVRIklGJ0YvRjItRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRmVwRjVGT0Znbi1GLDYlUSJjRidGL0YyRl5xLUYsNiVRJmFycmF5RidGL0YyLUZgbzYkLUYjNiMtRmBvNiYtRiM2am8tRlxwNiRRODEuMDAwMDAwMDAwMDAwMDAwMTc0NjYzRidGOUZfcEZnbkZnbkZnbkZnbkZnbkZnbi1GXHA2JFE4NTcxNi40MDAxODgyNzQzNDEzNzkxMzZGJ0Y5Rl9wRk8tRlA2JkZSRlVGWC9GZW5RJWF1dG9GJ0ZnbkZnbkZnbkZnbi1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGZHFGZnEtRlxwNiRRODE0ODE1LjMwNDI2NzY4NDEzOTA5MDQ0RidGOUZfcEZnbkZnbkZnbkZnbkZnbi1GXHA2JFE4MTQyOTEuNDkyNzc2NTc0Nzg1NTQwMjVGJ0Y5Rl9wRk9GYXNGZ25GZ25GZ25GZ25GZXMtRlxwNiRRODYzNDguMTYwMjE3NjQxNDU4ODEzMjg5RidGOUZfcEZnbkZnbkZnbkZnbkZnbi1GXHA2JFE4MTMwMS42MDgyODYwNTgzMjE4NzQxMDVGJ0Y5Rl9wRk9GYXNGZ25GZ25GZ25GZ25GZXMtRlxwNiRRODEwOC4xNzY3MDUzNTE0MzY5NjM0Njc5RidGOUZfcEZnbkZnbkZnbkZnbkZnbi1GXHA2JFE4Mi42MDU2OTY1MDU2MTE3NTU4Mjc3MjlGJ0Y5Rl9wRk9GYXNGZ25GZ25GZ25GZ25GZXMtRlxwNiRRPDAuNzQyMzQ1MjUxMDIwMTQxNjE1MTUyN2UtMkYnRjlGX3BGZ24tRlxwNiRRPDAuNTM4NDEzNjQzMjUwOTU2NDA2Mjk2MWUtN0YnRjlGX3BGT0ZnbkZnbkZnbkZnbkZnbkZlcy1GXHA2JFE8MC40MDIzNTMzMTQxMjY4MjM2MzcyMDY3ZS04RidGOUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRjktRjY2LVEiO0YnRjlGO0ZicEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRImdGJ0YvRjJGXnEtRlxwNiRRIjlGJ0Y5RjVGT0Znbi1GLDYlUSJ0RidGL0YyRl5xRltxRmFxRlx2RjVGT0Znbi1GLDYlUSJzRidGL0YyRl5xRltwRjVGT0Znbi1GLDYlUSNzc0YnRi9GMkZecUZidi1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRmRxRmZxLUkmbWZyYWNHRiQ2KC1GXHA2JFEiMUYnRjktRiM2Iy1GXHA2JFEiMkYnRjkvJS5saW5ldGhpY2tuZXNzR0Zjdy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZdeC8lKWJldmVsbGVkR0Y9RjVGT0Znbi1GNjYvUSRmb3JGJy8lJWJvbGRHRjEvRjNRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmh4RjtGPkZARkJGREZGRkhGam5GW29GZ24tRiw2JVEia0YnRi9GMkZnbi1GNjYvUSVmcm9tRidGZXhGZ3hGaXhGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GXHA2JFEjMTFGJ0Y5RmduLUY2Ni9RI3RvRidGZXhGZ3hGaXhGO0Y+RkBGQkZERkZGSEZqbkZbb0ZnbkZmd0Znbi1GNjYvUSNieUYnRmV4Rmd4Rml4RjtGPkZARkJGREZGRkhGam5GW29GZ25GZXNGYXdGZ24tRjY2L1EjZG9GJ0ZleEZneEZpeEY7Rj5GQEZCRkRGRkZIRmpuRltvRk9GZ25GZ25GZ25GZXZGXnFGZXZGYXEtRl93NigtRiM2JEZdci1GYG82Ji1GIzYjRlt5RjlGY3VGZnUtRiM2I0ZidkZpd0ZbeEZeeEZgeEZpdUZPRmduRmduRmduRmJ2Rl5xRmJ2Rlt3RmF3Rml1Rk9GZ24tRjY2L1Ejb2RGJ0ZleEZneEZpeEY7Rj5GQEZCRkRGRkZIRmpuRltvRjVGT0ZnbkZldkZecUZldkZhcUZdci1GYG82Ji1GIzYjRmF3RjlGY3VGZnVGNUZPRmduRmV2Rl5xLUYsNiVRJGV4cEYnRmdvRjktRmBvNiQtRiM2Ky1GLDYlUSRsb2dGJ0Znb0Y5LUZgbzYkLUYjNiZGZXZGanEtRiw2JVElc3FydEYnRmdvRjktRmBvNiQtRiM2JUZmd0ZqcS1GLDYlUSNQaUYnRmdvRjlGOUY5RmFxLUZgbzYkLUYjNiVGW3FGW3dGXndGOUZqcUZlW2wtRmBvNiQtRiM2I0ZodkY5Rlt3Rmh2RjlGaXU= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder PTYiNiM7IiIiIiM2RVxbbCxGJiQiN2pZPCsrKysrKys1ISNAIiIjJCI3TyJ6OE11Iyk9K2tyJiEjPSIiJCQhN1chNFJUb25VSTpbIiEjPCIiJSQiN0RTYnl1bHgjXCJIOUYzIiImJCE3Kkc4KWU5azwtO1tqRi8iIickIjcwVCg9S2VnRzM7SSJGLyIiKCQhN3pZanBWXmBxdyIzIiEjPiIiKSQiN0h4I2V2NmNdJ3AwRUYrIiIqJCE3Rjo6Ozk/NURYQnUhI0MiIzUkIjdoSDFrJjREVk9UUSYhI0hGJyQhN24/UE8jbzc5TE4tJSEjSQ== LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsLC1JI2xuR0YkNiMqKCw4KiQsKEknZGVsdGF8aXJHRiciIiIqJl4jRjJGMkkjeHxpckdGJ0YyRjIiIipGMiEiIiQhN24/UE8jbzc5TE4tJSEjSSokLChGMUYyRjNGMiIiKUYyRjckIjdoSDFrJjREVk9UUSYhI0gqJCwoRjFGMkYzRjIiIihGMkY3JCE3Rjo6Ozk/NURYQnUhI0MqJCwoRjFGMkYzRjIiIidGMkY3JCI3SHgjZXY2Y10ncDBFISNAKiQsKEYxRjJGM0YyIiImRjJGNyQhN3pZanBWXmBxdyIzIiEjPiokLChGMUYyRjNGMiIiJUYyRjckIjcwVCg9S2VnRzM7SSIhIz0qJCwoRjFGMkYzRjIiIiRGMkY3JCE3Kkc4KWU5azwtO1tqRlgqJCwoRjFGMkYzRjIiIiNGMkY3JCI3RFNieXVseCNcIkg5ISM8KiQsKEYxRjJGM0YyRjJGMkY3JCE3VyE0UlRvblVJOlsiRl1vKiQsJkYxRjJGM0YyRjckIjdPIno4TXUjKT0ra3ImRlgkIjdqWTwrKysrKysrNUZMRjJGMkZqbiNGMkZqbkkjUGlHRiVGaG9GMiomLChGMUYyRjNGMiNGN0ZqbkYyRjItRis2IywoRjFGMkYzRjIjIiM8RmpuRjJGMkYyRjFGNyomXiNGN0YyRjVGMkYyI0Zdb0ZqbkYy LUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMtSSRhYnNHRiQ2Iy1JJXN1YnNHRiQ2JS9JJmRlbHRhRzYiJCIiJiEiIi9JInhHRi4iIiJJInNHRi4= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrSyc0Zj8mISM1 QyQtSSVwbG90RzYiNiQtSSRhYnNHJSpwcm90ZWN0ZWRHNiMtSSVzdWJzR0YpNiQvSSZkZWx0YUdGJSQiIiYhIiJJInNHRiUvSSJ4R0YlOyEjNSIjNSIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdqbzckJCEkKyIhIiIkIjFBMDBUP2B4UCEjQTckJCExbm1tO3AwayYqISM6JCIxPXl6KXAnNCNcKCEjQTckJCExTEwkMzxYWj0qISM6JCIycyssdGtjJWY4ISNBNyQkITFtbW1UJXAiZSgpISM6JCIybmM6JWUpcG9sIyEjQTckJCExbm1tIjRtKEckKSEjOiQiMTlNW0YoKWY6XyEjQDckJCExTEwkM2kuOSF6ISM6JCIxKnonPVhxZD81ISM/NyQkITFubTsvUj0wdiEjOiQiMS0pSCZlM3EsPiEjPzckJCExLCtdUDgjXDQoISM6JCIyJj5HTSE0JWVBTyEjQDckJCExbW07L3NpcW0hIzokIjFlNEZQNV5hcSEjPzckJCExKioqKlwoeSRwWmkhIzokIjIpeXcuSDUlM1AiISM/NyQkITFMTEwkeWFFImUhIzokIjJPbVY8R3RcciMhIz83JCQhMW1tbSI+cyVIYSEjOiQiMSY+UGQxQGsmXCEjPjckJCEyJioqKioqKlwkKjQpKlwhIzskIjFpLz51aSEqZigqISM+NyQkISpEYlxjJSEiKSQiMTpMSTUxQUY+ISM9NyQkISpsU3Y5JSEiKSQiMWlFQj1MbjdQISM9NyQkITJqbW1UPylbb1AhIzskIjElM0lsPSEpUnQnISM9NyQkITFMTEwkPWV4SiQhIzokIjJgI2Vlb2YmcE8iISM9NyQkITJGTExMdElmJEghIzskIjJlaCE0Njc+IVwjISM9NyQkITJpbTthb19RciMhIzskIjEwXDRLMGxITiEjPDckJCEsdmp1PFwjISM1JCIxUHQsJkctSSsmISM8NyQkITJubTthJHo+JkgjISM7JCIxZiU9aj45SCJvISM8NyQkITJPTExMQkAnKTQjISM7JCIxPWRPKHolZXgjKiEjPDckJCEyKCkqKipcUCdwc20iISM7JCIyOSQ9ekBcIW8jPSEjPDckJCExKioqKipcRiYqPVkiISM6JCIyaih6ISlwRj9BRCEjPDckJCEyIyoqKipcNzRfYzchIzskIjFMQzExQyg+WyQhIzs3JCQhMkJMZTloeCRcNiEjOyQiMUtnMT9IWD5UISM7NyQkITJhbTsvSk1BLyIhIzskIjIkKT4zQUgyRyhbISM8NyQkITElKSpcUDQ1NE4qISM7JCIwUl03RygqPncmISM6NyQkITE6TEwkM3gleiMpISM7JCIxXiZ5JyopXCgqM28hIzs3JCQhMT5MZTlyYyZIKCEjOyQiMSpmciVSdldHeiEjOzckJCExQkwkZTlkO0onISM7JCIxeCJHUyMzIVFAKiEjOzckJCExRUwzeHJ1RmAhIzskIjJqXScpUk89cDEiISM7NyQkITBMTCQzcyRRTSUhIzokIjFQPSV6Z0J2QSIhIzo3JCQhMSgqXChvSCg+OFEhIzskIjIjKnBMQyg0TT04ISM7NyQkITJYbTthUWRERyQhIzwkIjJBXS8iRyhRKTQ5ISM7NyQkITFLJGVSWjw+diMhIzskIjIxKSp6V0wkSCpcIiEjOzckJCEyIyoqKipcaXZGQEEhIzwkIjIpelt3VHU0JGUiISM7NyQkITJSTCRlUngqKmY2ISM8JCIyY1J5ZyUqKnk6PCEjOzckJCExXm9tbTt6cikqISM9JCIyN3MkZnh4LXM8ISM7NyQkIjJYTCQzX05sLjUhIzwkIjE2XlZycGpIPCEjOjckJCIydkxMMy1EZzUjISM8JCIyPDswZUZOLGciISM7NyQkIjFSJDNfdjVzbCMhIzskIjJBKVtaYT95OTohIzs3JCQiMjFNJGUqWydSM0shIzwkIjIpKTRHeVxPRFUiISM7NyQkIjFVJGVSQSNlZlAhIzskIjJYIyo+VVIkZkY4ISM7NyQkIjJPTUwkZXp3NVYhIzwkIjJjZzAqXFA3TDchIzs3JCQiMTMrXWliUXFfISM7JCIxSjQnUmEvZjIiISM6NyQkIjF0bW1tSitJaSEjOyQiMSJwPiYpZXQiRyQqISM7NyQkIjFRTCQzeD8nKj0oISM7JCIvTm1ySHBlISkhIzk3JCQiMS4rK3YkUSNcIikhIzskIjFiRz0kKVwzW3AhIzs3JCQiME0kM3g7bCY9KiEjOiQiMVJEcHJTaTdmISM7NyQkIjJ3bTt6XDFBLSIhIzskIjEnKT0+RCdlIUddISM7NyQkIjI4K0QiR3klZTciISM7JCIyJm8zPEEsSnVVISM8NyQkIjFOTExlIipbSDchIzokIjIlPjZnZS4pR2okISM8NyQkIjJ3bW0iSENqVjkhIzskIjJ2Y05EUSplJmYjISM8NyQkIjItKysrcXZ4bCIhIzskIjJhLFxob11VJj0hIzw3JCQiMi8rK0Q2dHMnPSEjOyQiMjNVej1UNFZMIiEjPDckJCIyMSsrXV9xbjIjISM7JCIxOz1ONmdhLCcqISM8NyQkIjEsK3ZWK1p6QSEjOiQiMTglKT5hYkskKXAhIzw3JCQiMSwrXWkmcEBbIyEjOiQiMDZrbiV6MHpdISM7NyQkIjIwK10oPUdCMkYhIzskIjE5SjtkXGFtTiEjPDckJCIrdmdIS0ghIiokIjI5KGYwVSJcV10jISM9NyQkIjJgbW1td2FuTCQhIzskIjImMzVJJSopb25LIiEjPTckJCIxLCsrXTJnb1AhIzokIjFlXFQ5KSp5S24hIz03JCQiMUtMJGVSPCpmVCEjOiQiMU9CWWI1PlRPISM9NyQkIjEtKytdKUh4ZSUhIzokIjFqVmV0VlxmPSEjPTckJCIxbW07SCFvLSpcISM6JCIwRXF4UDMyKSkqISM9NyQkIjI5KytEVE81VCYhIzskIjF6TmQ4PTAtXiEjPjckJCIxbW1tO1dUQWUhIzokIjFeWld6IXBPbiMhIz43JCQiMSoqKipcaSEqM2BpISM6JCIySzokKikzQ0ZmOCEjPzckJCIxTkxMTCp6eW0nISM6JCIwZnZsKCk+XTMoISM+NyQkIjFPTEwzTjEjNCghIzokIjEqKSpIL24jKSlRTyEjPzckJCIxcG07SFl0N3YhIzokIjEnZiR5Im95I3o9ISM/NyQkIjEtKysreEcqKnkhIzokIjIqPlxzZ1ooUi0iISNANyQkIjBubTs5QEJNKSEjOSQiMThCY2Y0czBeISNANyQkIjFPTExMYmRRKCkhIzokIjIwdFFQXzkqUkYhI0E3JCQiLERPbDU7KiEjNSQiMndNYSI+YSg0VCIhI0E3JCQiMS0rXVA/V2wmKiEjOiQiMUw/T1dOImVaKCEjQTckJCIkKyIhIiIkIjFBMDBUP2B4UCEjQS0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUlVklFV0c2JDskISQrIiEiIiQiJCsiISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USN4fGlyNiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkIT0hIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhcCQhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlP04hIiItJSlDSElMRFJFTkc2Ig== QyQtSSdjb252ZXJHNiI2JC1JKGNvbnZlcnRHJSpwcm90ZWN0ZWRHNiQtSSdzZXJpZXNHRik2JS1JJGxvZ0c2JEYpSShfc3lzbGliR0YlNiMsJiIiIkY0SSJ4R0YlRjQvRjUiIiEiIzVJKHBvbHlub21HRilJJ2hvcm5lckdGJUY0 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknY29udmVyRzYiNiQsNEkjeHxpckdGJCIiIiokRiciIiMjISIiRioqJEYnIiIkI0YoRi4qJEYnIiIlI0YsRjEqJEYnIiImI0YoRjQqJEYnIiInI0YsRjcqJEYnIiIoI0YoRjoqJEYnIiIpI0YsRj0qJEYnIiIqI0YoRkBJJ2hvcm5lckdGJA== JSFH openturns-1.9/validation/src/GeneralizedNataf.mws000066400000000000000000000026321307543307100223020ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 154 "restart:\n#phi:=1/( 2*Pi)^(n/2)*exp(-t/2);\n#g(u^2):=subs(t=u^2,phi);\nl:=log(g(u^2));\nma p(factor,collect(diff(l,u$1),u));\nmap(factor,collect(diff(l,u$2),u)); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"lG-%#lnG6#-%\"gG6#*$)%\"uG\"\" #\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"#\"\"\"--%\"DG6#%\" gG6#*$)%\"uGF%F&F&F/F&-F+F,!\"\"F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# ,&**\"\"%\"\"\",&*&---%#@@G6$%\"DG\"\"#6#%\"gG6#*$)%\"uGF/F&F&-F1F2F&F &*$)--F.F0F2F/F&!\"\"F&F5F/F6!\"#F&*(F/F&F9F&F6F;F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "subs(t=u^2,2*diff(phi,t)/phi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "diff(phi,t)/phi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 11 "" 1 "" {XPPMATH 20 "6##!\"\"\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/GeneralizedNataf.txt000066400000000000000000000015711307543307100223140ustar00rootroot00000000000000> restart: > #phi:=1/(2*Pi)^(n/2)*exp(-t/2); > #g(u^2):=subs(t=u^2,phi); > l:=log(g(u^2)); > map(factor,collect(diff(l,u$1),u)); > map(factor,collect(diff(l,u$2),u)); 2 l := ln(g(u )) 2 2 D(g)(u ) u ------------ 2 g(u ) (2) 2 2 2 2 2 2 4 ((D )(g)(u ) g(u ) - D(g)(u ) ) u 2 D(g)(u ) -------------------------------------- + ---------- 2 2 2 g(u ) g(u ) > subs(t=u^2,2*diff(phi,t)/phi); -1 > diff(phi,t)/phi; > -1/2 > openturns-1.9/validation/src/GeneralizedParetoMoments.mw000066400000000000000000001112011307543307100236540ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZjcC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GUDYmRlJGVUZYL0ZlblElYXV0b0YnLUYsNiVRJHBkZkYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNictSSNtbkdGJDYkUSIxRidGOS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmFwLUYsNiVRI3hpRicvRjBGPUY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVEieEYnRi9GMkY5LUYjNiQtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRmBwRmJwLUZlbzYkLUYjNiVGaW9GXXAtSSZtZnJhY0dGJDYoRmlvLUYjNiNGY3AvJS5saW5ldGhpY2tuZXNzR0ZccC8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zhci8lKWJldmVsbGVkR0Y9RjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGanBGTUZPRmduLUYsNiVRJ2Fzc3VtZUYnRi9GMi1GZW82JC1GIzYlRmNwLUY2Ni1RIjxGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZqbzYkRmhyRjlGOUY1Rk8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZqcEZbcS1GLDYlUSZwcmludEYnRi9GMi1GZW82JC1GIzYlLUYsNiNRIUYnLUkjbXNHRiQ2I1EleGk8MEYnRmN0RjlGNUZPRmlzLUYsNiVRI211RidGZnBGOUZeby1GLDYlUSdmYWN0b3JGJ0YvRjItRmVvNiQtRiM2JC1GLDYlUSRpbnRGJ0YvRjItRmVvNiQtRiM2LEZccUZncEZbby1GNjYtUSIsRidGOUY7RlxzRkBGQkZERkZGSEZqcC9GTlEsMC4zMzMzMzMzZW1GJ0ZccS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZncy1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZgcEZbcUZhcUZocUY5RjlGaXJGT0Zpcy1GLDYlUSR2YXJGJ0YvRjJGXm9GXXUtRmVvNiQtRiM2JEZkdS1GZW82JC1GIzYsLUZibzYlLUZlbzYkLUYjNiVGXHEtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZgcEZicEZqdEY5LUYjNiMtRmpvNiRRIjJGJ0Y5RmZyRmdwRltvRlt2RlxxRmB2RmdzRmN2RmFxRmhxRjlGOUZpckZPRk9GaXMtRiw2JVEjZTNGJ0YvRjJGXm9GXXUtRmVvNiQtRiM2Iy1GaXE2KC1GIzYkRmR1LUZlbzYkLUYjNiwtRmJvNiVGY3ctRiM2Iy1Gam82JFEiM0YnRjlGZnJGZ3BGW29GW3ZGXHFGYHZGZ3NGY3ZGYXFGaHFGOS1GIzYjLUZibzYlRmZ2LUYjNiMtRmlxNihGYnlGandGXXJGX3JGYnJGZHJGZnJGXXJGX3JGYnJGZHJGOUZpckZPRmlzLUYsNiVRI2U0RidGL0YyRl5vRl11LUZlbzYkLUYjNiMtRmlxNigtRiM2JEZkdS1GZW82JC1GIzYsLUZibzYlRmN3LUYjNiMtRmpvNiRRIjRGJ0Y5RmZyRmdwRltvRlt2RlxxRmB2RmdzRmN2RmFxRmhxRjktRiM2Iy1GYm82JUZmdkZqd0ZmckZdckZfckZickZkckY5RmlyRk9GaXNGXXMtRmVvNiQtRiM2KUZjcC1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZnc0ZbdkZjcEZkcy1GaXE2KEZpb0ZeW2xGXXJGX3JGYnJGZHJGOUY1Rk9GaXNGXHQtRmVvNiQtRiM2JUZjdC1GZ3Q2I1EleGk+MEYnRmN0RjlGaXJGT0Zpc0ZqdEZeb0ZddS1GZW82JC1GIzYkRmR1LUZlbzYkLUYjNitGXHFGZ3BGW29GW3ZGXHFGYHZGZ3NGY3YtRiw2JVEpaW5maW5pdHlGJ0YvRjJGOUY5RmlyRk9GaXNGZnZGXm9GXXUtRmVvNiQtRiM2JEZkdS1GZW82JC1GIzYrRmF3RmdwRltvRlt2RlxxRmB2RmdzRmN2Rl9dbEY5RjlGaXJGT0ZPRmlzRl94Rl5vRl11LUZlbzYkLUYjNiMtRmlxNigtRiM2JEZkdS1GZW82JC1GIzYrRl55RmdwRltvRlt2RlxxRmB2RmdzRmN2Rl9dbEY5RmV5Rl1yRl9yRmJyRmRyRjlGaXJGT0Zpc0ZdekZeb0ZddS1GZW82JC1GIzYjLUZpcTYoLUYjNiRGZHUtRmVvNiQtRiM2K0ZcW2xGZ3BGW29GW3ZGXHFGYHZGZ3NGY3ZGX11sRjlGY1tsRl1yRl9yRmJyRmRyRjlGaXJGaXM= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KSwmIiIiRiQqJkkjeGlHNiJGJEkieEdGJ0YkRiQsJiEiIkYkKiRGJkYqRio= USV4aTwwNiI= LCQqJCwmISIiIiIiSSR4aXxpckc2IkYmRiVGJQ== LCQqJiwmSSR4aXxpckc2IiIiIyEiIiIiIkYoLCZGKEYpRiVGKSEiI0Yo LCQqKiwmSSR4aXxpckc2IiEiIyIiIkYoIyIiJCIiIywmRiVGKEYoRihGKCwmRiVGKiEiIkYoRi4sJkYlRitGLkYoRi5GKw== LCQqKiwmSSR4aXxpckc2IiIiIyEiIiIiIkYpLChGJUYpIiIkRikqJEYlRidGJ0YpLCZGJSIiJUYoRilGKCwmRiVGK0YoRilGKCEiJA== USV4aT4wNiI= LCQqJCwmSSR4aXxpckc2IiIiIiEiIkYnRihGKA== LCQqJiwmSSR4aXxpckc2IiIiIyEiIiIiIkYoLCZGJUYpRihGKSEiI0Yo LCQqKiwmSSR4aXxpckc2IiEiIyIiIkYoIyIiJCIiIywmRiVGKEYoRihGKCwmRiVGKiEiIkYoRi4sJkYlRitGLkYoRi5GKw== LCQqKiwmSSR4aXxpckc2IiIiIyEiIiIiIkYpLChGJUYpIiIkRikqJEYlRidGJ0YpLCZGJSIiJUYoRilGKCwmRiVGK0YoRilGKCEiJA== JSFH JSFH openturns-1.9/validation/src/HermiteNodesWeights.csv000066400000000000000000000011031307543307100227750ustar00rootroot000000000000000.4849357075154976530462335; 0.3446423349320190428750281 1.465989094391158183250665; 0.1354837029802677355634317 2.484325841638954580876251; 0.01911158050077028560473837 3.581823483551926922776237; 0.000758070934312217670069636 4.859462828332312150155165; 4.310652630718286732220955e-06 -0.4849357075154976530462335; 0.3446423349320190428750281 -1.465989094391158183250665; 0.1354837029802677355634317 -2.484325841638954580876251; 0.01911158050077028560473837 -3.581823483551926922776237; 0.000758070934312217670069636 -4.859462828332312150155165; 4.310652630718286732220955e-06 openturns-1.9/validation/src/IntegrationND.mws000066400000000000000000000260361307543307100216100ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 177 "restart:\nwith(Stat istics):\npdf:=PDF(RandomVariable(Normal(mu,sigma)),x);\ncdf:=CDF(Rand omVariable(Normal(mu,sigma)),x);\npdf_cond:=subs(x=mu+k*sigma+t,pdf)/s ubs(x=mu+k*sigma,cdf);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&# \"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)%&sigmaGF--%$expG6#,$*(F)F-,&%\"xGF(%# muGF-F)F.!\"#F-F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&#\" \"\"\"\"#F'*&F&F'-%$erfG6#,$**F(!\"\"F(F&,&%\"xGF'%#muGF/F'%&sigmaGF/F 'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)pdf_condG,$*&#\"\"\"\"\"#F (*,F)F'%#PiG#!\"\"F)%&sigmaGF--%$expG6#,$*(F)F-,&*&%\"kGF(F.F(F(%\"tGF (F)F.!\"#F-F(,&F'F(*&F'F(-%$erfG6#,$*(F)F-F)F'F6F(F(F(F(F-F(F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "series(pdf_cond,t=infinity); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&#\"\"\"\"\"#F&*0F'F%%#PiG#!\" \"F'%&sigmaGF+-%$expG6#,$*&F'F+%\"kGF'F+F&,&F%F&*&F%F&-%$erfG6#,$*(F'F +F'F%F2F&F&F&F&F+-F.6#,$*(F'F+%\"tGF'F,!\"#F+F&-F.6#*(F2F&F,F+F>F&F+F& F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "with(LinearAlgebra): " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 459 "INF:=10.0:\nx1:=-1.0: \ndx1:=0.01:\nfor dim from 2 to 15 do\n M:=Matrix(dim):\n for i from 1 to dim do\n M[i,i]:=1;\n od:\n for i from 1 to dim-1 do\n M [i,i+1]:=1/2;\n M[i+1,i]:=1/2;\n od:\n V:=Vector([seq(x[i],i=1..d im)]):\n pdf:=1/(2*Pi)^(dim/2)/sqrt(Determinant(M))*exp(-1/2*Transpos e(V).M^(-1).V);\n formula:=Int(pdf,x[1]=x1..x1+dx1);\n for i from 2 \+ to dim do\n formula:=Int(formula,x[i]=-INF..x1);\n od:\n val:=eva lf(formula);\n print([dim,val]);\nod:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"#$\"+U&f.$o!#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"$$ \"+`A_^C!#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"%$\"+nk'>)y!#9" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"&$\"+.1\\XE!#9" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$\"\"'-%$IntG6$-F&6$-F&6$-F&6$-F&6$-F&6$,$*&$\"+@ M**=7!#6\"\"\"-%$expG6#,.*($F7\"\"!F7&%\"xG6#F7F7,.*&$\"+r&G9d)!#5F7F? F7F7*&$\"+Vr&G9(FFF7&F@6#\"\"#F7!\"\"*&$\"+9dG9dFFF7&F@6#\"\"$F7F7*&$ \"+'G9dG%FFF7&F@6#\"\"%F7FM*&$\"+dG9dGFFF7&F@6#\"\"&F7F7*&$\"+H9dG9FFF 7&F@6#F$F7FMF7FM*($F7F>F7FJF7,.*&$\"+Vr&G9(FFF7F?F7FM*&$\"+H9dG9!\"*F7 FJF7F7*&$\"+Vr&G9\"FhoF7FQF7FM*&FDF7FWF7F7*&$\"+9dG9dFFF7FgnF7FM*&FenF 7F]oF7F7F7FM*($F7F>F7FQF7,.*&FOF7F?F7F7*&$\"+Vr&G9\"FhoF7FJF7FM*&$\"+9 dG9F7FWF7,.*&$\"+'G9dG%FFF7F?F7FM*&FDF7FJF7F7*&$\"+'G9dG \"FhoF7FQF7FM*&FipF7FWF7F7*&$\"+Vr&G9\"FhoF7FgnF7FM*&FOF7F]oF7F7F7FM*( $F7F>F7FgnF7,.*&FenF7F?F7F7*&$\"+9dG9dFFF7FJF7FM*&FDF7FQF7F7*&$\"+Vr&G 9\"FhoF7FWF7FM*&FfoF7FgnF7F7*&$\"+Vr&G9(FFF7F]oF7FMF7FM*($F7F>F7F]oF7, .*&$\"+H9dG9FFF7F?F7FM*&FenF7FJF7F7*&$\"+'G9dG%FFF7FQF7FM*&FOF7FWF7F7* &$\"+Vr&G9(FFF7FgnF7FM*&FDF7F]oF7F7F7FMF7F7/F?;$FFFM$!#**!\"#/FJ;$!$+ \"FMFat/FQFft/FWFft/FgnFft/F]oFft" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7 $\"\"(-%$IntG6$-F&6$-F&6$-F&6$-F&6$-F&6$-F&6$,$*&$\"+S.DLk!#7\"\"\"-%$ expG6#,0*($F9\"\"!F9&%\"xG6#F9F9,0*&$\"++++]()!#5F9FAF9F9*&$\"+++++vFH F9&FB6#\"\"#F9!\"\"*&$\"++++]iFHF9&FB6#\"\"$F9F9*&$\"+++++]FHF9&FB6#\" \"%F9FO*&$\"++++]PFHF9&FB6#\"\"&F9F9*&$\"+++++DFHF9&FB6#\"\"'F9FO*&$\" ++++]7FHF9&FB6#F$F9F9F9FO*($F9F@F9FLF9,0*&$\"+++++vFHF9FAF9FO*&$\"++++ +:!\"*F9FLF9F9*&$\"++++]7F`pF9FSF9FOFYF9*&$\"+++++vFHF9FinF9FO*&$\"+++ ++]FHF9F_oF9F9*&$\"+++++DFHF9FeoF9FOF9FO*($F9F@F9FSF9,0*&FQF9FAF9F9*&$ \"++++]7F`pF9FLF9FO*&$\"++++v=F`pF9FSF9F9*&$\"+++++:F`pF9FYF9FO*&$\"++ ++D6F`pF9FinF9F9*&$\"+++++vFHF9F_oF9FO*&FgnF9FeoF9F9F9FO*($F9F@F9FYF9, 0*&$\"+++++]FHF9FAF9FOFLF9*&$\"+++++:F`pF9FSF9FO*&$FNF@F9FYF9F9*&$\"++ +++:F`pF9FinF9FOF_oF9*&$\"+++++]FHF9FeoF9FOF9FO*($F9F@F9FinF9,0*&FgnF9 FAF9F9*&$\"+++++vFHF9FLF9FO*&F[rF9FSF9F9*&$\"+++++:F`pF9FYF9FO*&FeqF9F inF9F9*&$\"++++]7F`pF9F_oF9FO*&FQF9FeoF9F9F9FO*($F9F@F9F_oF9,0*&$\"+++ ++DFHF9FAF9FO*&FhpF9FLF9F9*&$\"+++++vFHF9FSF9FOFYF9*&$\"++++]7F`pF9Fin F9FO*&F^pF9F_oF9F9*&$\"+++++vFHF9FeoF9FOF9FO*($F9F@F9FeoF9,0*&FcoF9FAF 9F9*&$\"+++++DFHF9FLF9FO*&FgnF9FSF9F9*&$\"+++++]FHF9FYF9FO*&FQF9FinF9F 9*&$\"+++++vFHF9F_oF9FO*&FFF9FeoF9F9F9FOF9F9/FA;$FHFO$!#**!\"#/FL;$!$+ \"FOFev/FSFjv/FYFjv/FinFjv/F_oFjv/FeoFjv" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$\"\")-%$IntG6$-F&6$-F&6$-F&6$-F&6$-F&6$-F&6$-F&6$,$*&$\"+$3%*> U$!#7\"\"\"-%$expG6#,2*($F;\"\"!F;&%\"xG6#F;F;,2*&$\"+*)))))))))!#5F;F CF;F;*&$\"+yxxxxFJF;&FD6#\"\"#F;!\"\"*&$\"+nmmmmFJF;&FD6#\"\"$F;F;*&$ \"+cbbbbFJF;&FD6#\"\"%F;FQ*&$\"+WWWWWFJF;&FD6#\"\"&F;F;*&$\"+LLLLLFJF; &FD6#\"\"'F;FQ*&$\"+AAAAAFJF;&FD6#\"\"(F;F;*&$\"+66666FJF;&FD6#F$F;FQF ;FQ*($F;FBF;FNF;,2*&$\"+yxxxxFJF;FCF;FQ*&$\"+cbbb:!\"*F;FNF;F;*&$\"+LL LL8FhpF;FUF;FQ*&$\"+66666FhpF;FenF;F;*&$\"+*)))))))))FJF;F[oF;FQ*&FSF; FaoF;F;*&$\"+WWWWWFJF;FgoF;FQ*&FeoF;F]pF;F;F;FQ*($F;FBF;FUF;,2*&FSF;FC F;F;*&$\"+LLLL8FhpF;FNF;FQ*&$FPFBF;FUF;F;*&$\"+nmmm;FhpF;FenF;FQ*&$\"+ LLLL8FhpF;F[oF;F;*&$F;FBF;FaoF;FQ*&FSF;FgoF;F;*&$\"+LLLLLFJF;F]pF;FQF; FQ*($F;FBF;FenF;,2*&$\"+cbbbbFJF;FCF;FQ*&F]qF;FNF;F;*&$\"+nmmm;FhpF;FU F;FQ*&$FfoFhpF;FenF;F;*&$\"+yxxxFiqF?FinF?F U*&FgqF?F_oF?F?*&$\"+kjjj8FiqF?FeoF?FU*&$\"+\"4444\"FiqF?F[pF?F?*&$\"+ #====)FNF?FapF?FU*&F]oF?FgpF?F?*&$\"+FFFFFFNF?F^qF?FUF?FU*($F?FFF?FinF ?,6*&$\"+kjjjjFNF?FGF?FU*&F^rF?FRF?F?*&$\"+4444>FiqF?FYF?FU*&$\"+XXXXD FiqF?FinF?F?*&$\"+#====#FiqF?F_oF?FU*&$FfpFiqF?FeoF?F?*&$\"+baaa9FiqF? F[pF?FU*&F^tF?FapF?F?*&$\"+tssssFNF?FgpF?FU*&FioF?F^qF?F?F?FU*($F?FFF? F_oF?,6*&F]oF?FGF?F?*&$\"+\"4444\"FiqF?FRF?FU*&FgqF?FYF?F?*&$\"+#====# FiqF?FinF?FU*&$\"+FFFFFFiqF?F_oF?F?*&$\"+tsssAFiqF?FeoF?FU*&FhuF?F[pF? F?*&$\"+kjjj8FiqF?FapF?FU*&FLF?FgpF?F?*&$\"+XXXXXFNF?F^qF?FUF?FU*($F?F FF?FeoF?,6*&$\"+XXXXXFNF?FGF?FU*&FLF?FRF?F?*&$\"+kjjj8FiqF?FYF?FU*&Fhu F?FinF?F?*&$\"+tsssAFiqF?F_oF?FU*&F]wF?FeoF?F?*&$\"+#====#FiqF?F[pF?FU *&FgqF?FapF?F?*&$\"+\"4444\"FiqF?FgpF?FU*&F]oF?F^qF?F?F?FU*($F?FFF?F[p F?,6*&FioF?FGF?F?*&$\"+tssssFNF?FRF?FU*&F^tF?FYF?F?*&$\"+baaa9FiqF?Fin F?FU*&FhuF?F_oF?F?*&$\"+#====#FiqF?FeoF?FU*&FbuF?F[pF?F?*&$\"+4444>Fiq F?FapF?FU*&F^rF?FgpF?F?*&$\"+kjjjjFNF?F^qF?FUF?FU*($F?FFF?FapF?,6*&$\" +FFFFFFNF?FGF?FU*&F]oF?FRF?F?*&$\"+#====)FNF?FYF?FU*&F^tF?FinF?F?*&$\" +kjjj8FiqF?F_oF?FU*&FgqF?FeoF?F?*&$\"+4444>FiqF?F[pF?FU*&FdsF?FapF?F?* &$\"+baaa9FiqF?FgpF?FU*&FWF?F^qF?F?F?FU*($F?FFF?FgpF?,6*&FepF?FGF?F?*& $\"+OOOOOFNF?FRF?FU*&F]oF?FYF?F?*&$\"+tssssFNF?FinF?FU*&FLF?F_oF?F?*&$ \"+\"4444\"FiqF?FeoF?FU*&F^rF?F[pF?F?*&$\"+baaa9FiqF?FapF?FU*&FgqF?Fgp F?F?*&$\"+#====)FNF?F^qF?FUF?FU*($F?FFF?F^qF?,6*&$\"+\"4444*F]qF?FGF?F U*&FepF?FRF?F?*&$\"+FFFFFFNF?FYF?FU*&FioF?FinF?F?*&$\"+XXXXXFNF?F_oF?F U*&F]oF?FeoF?F?*&$\"+kjjjjFNF?F[pF?FU*&FWF?FapF?F?*&$\"+#====)FNF?FgpF ?FU*&FLF?F^qF?F?F?FUF?F?/FG;$FNFU$!#**!\"#/FR;$!$+\"FUF__l/FYFd_l/FinF d_l/F_oFd_l/FeoFd_l/F[pFd_l/FapFd_l/FgpFd_l/F^qFd_l" }}{PARA 7 "" 1 " " {TEXT -1 33 "Warning, computation interrupted\n" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/IntegrationND.txt000066400000000000000000000322771307543307100216250ustar00rootroot00000000000000> restart: > with(Statistics): > pdf:=PDF(RandomVariable(Normal(mu,sigma)),x); > cdf:=CDF(RandomVariable(Normal(mu,sigma)),x); > pdf_cond:=subs(x=mu+k*sigma+t,pdf)/subs(x=mu+k*sigma,cdf); 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma pdf := 1/2 --------------------- 1/2 Pi sigma 1/2 2 (x - mu) cdf := 1/2 + 1/2 erf(-------------) 2 sigma 2 1/2 (k sigma + t) 2 exp(- --------------) 2 2 sigma pdf_cond := 1/2 ----------------------------------- / 1/2 \ 1/2 | 2 k | Pi sigma |1/2 + 1/2 erf(------)| \ 2 / > series(pdf_cond,t=infinity); 2 2 1/2 k t 2 exp(- ----) exp(- --------) 2 2 2 sigma 1/2 ---------------------------------------------- / 1/2 \ 1/2 | 2 k | k t Pi sigma |1/2 + 1/2 erf(------)| exp(-----) \ 2 / sigma > with(LinearAlgebra): > INF:=10.0: > x1:=-1.0: > dx1:=0.01: > for dim from 2 to 15 do > M:=Matrix(dim): > for i from 1 to dim do > M[i,i]:=1; > od: > for i from 1 to dim-1 do > M[i,i+1]:=1/2; > M[i+1,i]:=1/2; > od: > V:=Vector([seq(x[i],i=1..dim)]): > > pdf:=1/(2*Pi)^(dim/2)/sqrt(Determinant(M))*exp(-1/2*Transpose(V).M^(-1 > ).V); > formula:=Int(pdf,x[1]=x1..x1+dx1); > for i from 2 to dim do > formula:=Int(formula,x[i]=-INF..x1); > od: > val:=evalf(formula); > print([dim,val]); > od: [2, 0.0006830359542] [3, 0.0002451522253] [4, 0.00007881966467] [5, 0.00002645490603] -1.0 -1.0 -1.0 -1.0 -1.0 -0.99 / / / / / / | | | | | | [6, | | | | | | 0.01218993421 | | | | | | / / / / / / -10.0 -10.0 -10.0 -10.0 -10.0 -1.0 exp(-1. x[1] (0.8571428571 x[1] - 0.7142857143 x[2] + 0.5714285714 x[3] - 0.4285714286 x[4] + 0.2857142857 x[5] - 0.1428571429 x[6]) - 1. x[2] (-0.7142857143 x[1] + 1.428571429 x[2] - 1.142857143 x[3] + 0.8571428571 x[4] - 0.5714285714 x[5] + 0.2857142857 x[6]) - 1. x[3] ( 0.5714285714 x[1] - 1.142857143 x[2] + 1.714285714 x[3] - 1.285714286 x[4] + 0.8571428571 x[5] - 0.4285714286 x[6]) - 1. x[4] (-0.4285714286 x[1] + 0.8571428571 x[2] - 1.285714286 x[3] + 1.714285714 x[4] - 1.142857143 x[5] + 0.5714285714 x[6]) - 1. x[5] (0.2857142857 x[1] - 0.5714285714 x[2] + 0.8571428571 x[3] - 1.142857143 x[4] + 1.428571429 x[5] - 0.7142857143 x[6]) - 1. x[6] ( -0.1428571429 x[1] + 0.2857142857 x[2] - 0.4285714286 x[3] + 0.5714285714 x[4] - 0.7142857143 x[5] + 0.8571428571 x[6])) dx[1] dx[2] dx[3] dx[4] dx[5] dx[6]] -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -0.99 / / / / / / / | | | | | | | [7, | | | | | | | | | | | | | | / / / / / / / -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -1.0 0.006433250340 exp(-1. x[1] (0.8750000000 x[1] - 0.7500000000 x[2] + 0.6250000000 x[3] - 0.5000000000 x[4] + 0.3750000000 x[5] - 0.2500000000 x[6] + 0.1250000000 x[7]) - 1. x[2] (-0.7500000000 x[1] + 1.500000000 x[2] - 1.250000000 x[3] + x[4] - 0.7500000000 x[5] + 0.5000000000 x[6] - 0.2500000000 x[7]) - 1. x[3] ( 0.6250000000 x[1] - 1.250000000 x[2] + 1.875000000 x[3] - 1.500000000 x[4] + 1.125000000 x[5] - 0.7500000000 x[6] + 0.3750000000 x[7]) - 1. x[4] (-0.5000000000 x[1] + x[2] - 1.500000000 x[3] + 2. x[4] - 1.500000000 x[5] + x[6] - 0.5000000000 x[7]) - 1. x[5] (0.3750000000 x[1] - 0.7500000000 x[2] + 1.125000000 x[3] - 1.500000000 x[4] + 1.875000000 x[5] - 1.250000000 x[6] + 0.6250000000 x[7]) - 1. x[6] (-0.2500000000 x[1] + 0.5000000000 x[2] - 0.7500000000 x[3] + x[4] - 1.250000000 x[5] + 1.500000000 x[6] - 0.7500000000 x[7]) - 1. x[7] ( 0.1250000000 x[1] - 0.2500000000 x[2] + 0.3750000000 x[3] - 0.5000000000 x[4] + 0.6250000000 x[5] - 0.7500000000 x[6] + 0.8750000000 x[7])) dx[1] dx[2] dx[3] dx[4] dx[5] dx[6] d x[7]] -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 / / / / / / / | | | | | | | [8, | | | | | | | | | | | | | | / / / / / / / -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -0.99 / | | 0.003421994083 exp(-1. x[1] (0.8888888889 x[1] | / -1.0 - 0.7777777778 x[2] + 0.6666666667 x[3] - 0.5555555556 x[4] + 0.4444444444 x[5] - 0.3333333333 x[6] + 0.2222222222 x[7] - 0.1111111111 x[8]) - 1. x[2] (-0.7777777778 x[1] + 1.555555556 x[2] - 1.333333333 x[3] + 1.111111111 x[4] - 0.8888888889 x[5] + 0.6666666667 x[6] - 0.4444444444 x[7] + 0.2222222222 x[8]) - 1. x[3] (0.6666666667 x[1] - 1.333333333 x[2] + 2. x[3] - 1.666666667 x[4] + 1.333333333 x[5] - 1. x[6] + 0.6666666667 x[7] - 0.3333333333 x[8]) - 1. x[4] (-0.5555555556 x[1] + 1.111111111 x[2] - 1.666666667 x[3] + 2.222222222 x[4] - 1.777777778 x[5] + 1.333333333 x[6] - 0.8888888889 x[7] + 0.4444444444 x[8]) - 1. x[5] (0.4444444444 x[1] - 0.8888888889 x[2] + 1.333333333 x[3] - 1.777777778 x[4] + 2.222222222 x[5] - 1.666666667 x[6] + 1.111111111 x[7] - 0.5555555556 x[8]) - 1. x[6] (-0.3333333333 x[1] + 0.6666666667 x[2] - 1. x[3] + 1.333333333 x[4] - 1.666666667 x[5] + 2. x[6] - 1.333333333 x[7] + 0.6666666667 x[8]) - 1. x[7] (0.2222222222 x[1] - 0.4444444444 x[2] + 0.6666666667 x[3] - 0.8888888889 x[4] + 1.111111111 x[5] - 1.333333333 x[6] + 1.555555556 x[7] - 0.7777777778 x[8]) - 1. x[8] (-0.1111111111 x[1] + 0.2222222222 x[2] - 0.3333333333 x[3] + 0.4444444444 x[4] - 0.5555555556 x[5] + 0.6666666667 x[6] - 0.7777777778 x[7] + 0.8888888889 x[8])) dx[1] dx[2] dx[3] dx[4] dx[5] dx[6] d x[7] dx[8]] -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 / / / / / / / / | | | | | | | | [9, | | | | | | | | | | | | | | | | / / / / / / / / -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -0.99 / | | 0.001831578650 exp(-1. x[1] (0.9000000000 x[1] | / -1.0 - 0.8000000000 x[2] + 0.7000000000 x[3] - 0.6000000000 x[4] + 0.5000000000 x[5] - 0.4000000000 x[6] + 0.3000000000 x[7] - 0.2000000000 x[8] + 0.1000000000 x[9]) - 1. x[2] ( -0.8000000000 x[1] + 1.600000000 x[2] - 1.400000000 x[3] + 1.200000000 x[4] - 1. x[5] + 0.8000000000 x[6] - 0.6000000000 x[7] + 0.4000000000 x[8] - 0.2000000000 x[9]) - 1. x[3] (0.7000000000 x[1] - 1.400000000 x[2] + 2.100000000 x[3] - 1.800000000 x[4] + 1.500000000 x[5] - 1.200000000 x[6] + 0.9000000000 x[7] - 0.6000000000 x[8] + 0.3000000000 x[9]) - 1. x[4] (-0.6000000000 x[1] + 1.200000000 x[2] - 1.800000000 x[3] + 2.400000000 x[4] - 2. x[5] + 1.600000000 x[6] - 1.200000000 x[7] + 0.8000000000 x[8] - 0.4000000000 x[9]) - 1. x[5] ( 0.5000000000 x[1] - 1. x[2] + 1.500000000 x[3] - 2. x[4] + 2.500000000 x[5] - 2. x[6] + 1.500000000 x[7] - 1. x[8] + 0.5000000000 x[9]) - 1. x[6] (-0.4000000000 x[1] + 0.8000000000 x[2] - 1.200000000 x[3] + 1.600000000 x[4] - 2. x[5] + 2.400000000 x[6] - 1.800000000 x[7] + 1.200000000 x[8] - 0.6000000000 x[9]) - 1. x[7] ( 0.3000000000 x[1] - 0.6000000000 x[2] + 0.9000000000 x[3] - 1.200000000 x[4] + 1.500000000 x[5] - 1.800000000 x[6] + 2.100000000 x[7] - 1.400000000 x[8] + 0.7000000000 x[9]) - 1. x[8] (-0.2000000000 x[1] + 0.4000000000 x[2] - 0.6000000000 x[3] + 0.8000000000 x[4] - 1. x[5] + 1.200000000 x[6] - 1.400000000 x[7] + 1.600000000 x[8] - 0.8000000000 x[9]) - 1. x[9] (0.1000000000 x[1] - 0.2000000000 x[2] + 0.3000000000 x[3] - 0.4000000000 x[4] + 0.5000000000 x[5] - 0.6000000000 x[6] + 0.7000000000 x[7] - 0.8000000000 x[8] + 0.9000000000 x[9])) dx[1] dx[2] dx[3] dx[4] dx[5] dx[6] dx[7] dx[8] dx[9]] -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 / / / / / / / | | | | | | | [10, | | | | | | | | | | | | | | / / / / / / / -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -10.0 -1.0 -1.0 -0.99 / / / | | | | | | 0.0009852678091 exp(-1. x[1] ( | | | / / / -10.0 -10.0 -1.0 0.9090909091 x[1] - 0.8181818182 x[2] + 0.7272727273 x[3] - 0.6363636364 x[4] + 0.5454545455 x[5] - 0.4545454545 x[6] + 0.3636363636 x[7] - 0.2727272727 x[8] + 0.1818181818 x[9] - 0.09090909091 x[10]) - 1. x[2] (-0.8181818182 x[1] + 1.636363636 x[2] - 1.454545455 x[3] + 1.272727273 x[4] - 1.090909091 x[5] + 0.9090909091 x[6] - 0.7272727273 x[7] + 0.5454545455 x[8] - 0.3636363636 x[9] + 0.1818181818 x[10] ) - 1. x[3] (0.7272727273 x[1] - 1.454545455 x[2] + 2.181818182 x[3] - 1.909090909 x[4] + 1.636363636 x[5] - 1.363636364 x[6] + 1.090909091 x[7] - 0.8181818182 x[8] + 0.5454545455 x[9] - 0.2727272727 x[10]) - 1. x[4] ( -0.6363636364 x[1] + 1.272727273 x[2] - 1.909090909 x[3] + 2.545454545 x[4] - 2.181818182 x[5] + 1.818181818 x[6] - 1.454545455 x[7] + 1.090909091 x[8] - 0.7272727273 x[9] + 0.3636363636 x[10]) - 1. x[5] (0.5454545455 x[1] - 1.090909091 x[2] + 1.636363636 x[3] - 2.181818182 x[4] + 2.727272727 x[5] - 2.272727273 x[6] + 1.818181818 x[7] - 1.363636364 x[8] + 0.9090909091 x[9] - 0.4545454545 x[10]) - 1. x[6] (-0.4545454545 x[1] + 0.9090909091 x[2] - 1.363636364 x[3] + 1.818181818 x[4] - 2.272727273 x[5] + 2.727272727 x[6] - 2.181818182 x[7] + 1.636363636 x[8] - 1.090909091 x[9] + 0.5454545455 x[10]) - 1. x[7] ( 0.3636363636 x[1] - 0.7272727273 x[2] + 1.090909091 x[3] - 1.454545455 x[4] + 1.818181818 x[5] - 2.181818182 x[6] + 2.545454545 x[7] - 1.909090909 x[8] + 1.272727273 x[9] - 0.6363636364 x[10]) - 1. x[8] (-0.2727272727 x[1] + 0.5454545455 x[2] - 0.8181818182 x[3] + 1.090909091 x[4] - 1.363636364 x[5] + 1.636363636 x[6] - 1.909090909 x[7] + 2.181818182 x[8] - 1.454545455 x[9] + 0.7272727273 x[10]) - 1. x[9] (0.1818181818 x[1] - 0.3636363636 x[2] + 0.5454545455 x[3] - 0.7272727273 x[4] + 0.9090909091 x[5] - 1.090909091 x[6] + 1.272727273 x[7] - 1.454545455 x[8] + 1.636363636 x[9] - 0.8181818182 x[10]) - 1. x[10] ( -0.09090909091 x[1] + 0.1818181818 x[2] - 0.2727272727 x[3] + 0.3636363636 x[4] - 0.4545454545 x[5] + 0.5454545455 x[6] - 0.6363636364 x[7] + 0.7272727273 x[8] - 0.8181818182 x[9] + 0.9090909091 x[10])) dx[1] dx[2] dx[3] dx[4] dx[5] dx[6] d x[7] dx[8] dx[9] dx[10]] Warning, computation interrupted > openturns-1.9/validation/src/InterpPoly.mw000066400000000000000000000656121307543307100210300ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZobi1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSN2aUYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkobWZlbmNlZEdGJDYmLUYjNistSSNtbkdGJDYkUSIxRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUZobzYkUSIzRidGOUZbcC1GaG82JFEiNkYnRjlGW3AtRmhvNiRRIzEwRidGOUZbcC1GaG82JFEjMTVGJ0Y5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGNUZPRmduRlxvRl9vLUZjbzYmLUYjNjFGYXBGW3BGanBGW3AtRmhvNiRRIzQ1RidGOUZbcC1GaG82JFEkMTA1RidGOUZbcC1GaG82JFEkMjEwRidGOUZbcC1GaG82JFEkMzc4RidGOUZbcC1GaG82JFEkNjMwRidGOUZbcC1GaG82JFEkOTkwRidGOUY5Rl1xRmBxRjVGT0ZnbkZcb0Zfby1GY282Ji1GIzYvRmpwRltwRmpxRltwLUZobzYkUSQ0MjBGJ0Y5RltwLUZobzYkUSUxMjYwRidGOUZbcC1GaG82JFElMzE1MEYnRjlGW3AtRmhvNiRRJTY5MzBGJ0Y5RltwLUZobzYkUSYxMzg2MEYnRjlGOUZdcUZgcUY1RmduRk9GZ24tRiw2JVEjeGlGJy9GMEY9RjlGX28tRmNvNiYtRiM2JC1GLDYlUSRzZXFGJ0YvRjItRmNvNiQtRiM2LC1GLDYlUSJpRidGL0YyRltwRlt1LUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZobzYkUSIyRidGOS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJ0Zbby1GLDYlUSVub3BzRidGL0YyLUZjbzYkLUYjNiNGXG9GOS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmd1L0ZORmh1RmdvRjlGOUZdcUZgcUY1Rk9GT0Znbi1GLDYlUSJuRidGL0YyRl9vLUZobzYkUSI3RidGOUY1Rk9GZ24tRiw2JVEkcG9sRidGL0YyRl9vLUYsNiVRJHN1bUYnRi9GMi1GY282JC1GIzYsLUYsNiVRImFGJ0YvRjItRmNvNiYtRiM2I0ZbdUY5Rl1xRmBxLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1JJW1zdXBHRiQ2JS1GLDYlUSJ4RidGL0YyLUYjNiVGW3UtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZndUZjdkZnby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGW3BGW3VGXnVGZ29GZHVGZHZGOS1GNjYtUSI7RidGOUY7Rl5wRkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVEkc3lzRidGL0YyRl9vRmR0LUZjbzYkLUYjNi0tRiw2JVElc3Vic0YnRi9GMi1GY282JC1GIzYoRmF4Rl51Rlx0Rmd3RltwRmp2RjlGXnVGXG9GZ3dGW3BGW3VGXnVGZ29GZHVGZHZGOUY1Rk9GZ24tRiw2JVEkc29sRidGL0YyRl9vLUYsNiVRJnNvbHZlRidGL0YyLUZjbzYkLUYjNiUtRmNvNiYtRiM2I0ZfeUY5L0ZecVEifGZyRicvRmFxUSJ8aHJGJ0ZbcC1GY282Ji1GIzYkRmR0LUZjbzYkLUYjNipGZHdGZ3dGW3BGW3VGXnVGZ29GZHVGZHZGOUY5RltbbEZdW2xGOUY1Rk9GZ24tRiw2JVEnZmFjdG9yRidGL0YyLUZjbzYkLUYjNiRGZnktRmNvNiQtRiM2JUZdekZbcEZqdkY5RjlGXHk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LDAmSSJhRzYiNiMiIiJGJyomJkYkNiMiIiNGJ0kieEdGJUYnRicqJiZGJDYjIiIkRidGLEYrRicqJiZGJDYjIiIlRidGLEYwRicqJiZGJDYjIiImRidGLEY0RicqJiZGJDYjIiInRidGLEY4RicqJiZGJDYjIiIoRidGLEY8Ric= LCQqLkkieEc2IiIiIiwmRiRGJiEiIkYmRiYsJkYkRiYiIiVGJkYmLCZGJEYmIiIkRiZGJiwmRiRGJiIiI0YmRiYsJkYkRiZGJkYmRiYjRiYiI1s= JSFH openturns-1.9/validation/src/InverseErf.mws000066400000000000000000000436371307543307100211610ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 85 "restart:\nDigits:=50 :\nPhi:=proc(x)\n int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 301 "with(numapprox):\nOrde r:=20:\nS:=series(erf(y)-x,y):\nR:=convert(solve(S,y),polynom):\nP:=mi nimax(R,x=0..1,[5,5]);\nplot(erf(P)-x,x=0..1);\nexpr:=-1/(Pi^(1/2)*exp (1/2*LambertW(2/Pi/(y-1)^2))*(y-1)):\nseries(expr,y=1,5);\nsolve(conve rt(series(erf(x),x=infinity,3),polynom)=y,x);\nplot([erf(expr),y],y=0. 9..1);\n\n" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"PG*&,&$\"N5%)[kr!#\\\"\" \"*&,&$\"SmeF0j_5T;>j.qI.C#yCF/F0*&$\"S:xC)Q#[$f FaV(eg#[*H'\\O5:?\")39(!#]F0%\"xGF0F*F0FAF0F0F0FAF0F0F0FAF0F0F0FAF0F0F 0,&$\"SW*y<5*>e1$))>J]AF/F0*&,&$\"S*=5D*=6!plH,RjZ[$Rtrb2 =E2iCF/F**&,&$\"S'R_KOOgg&yoFh*>SOji$)Hkm\"y%>#F/F**&,&$\"SGHuVr)>(=7n cp9**>'GYET%z'e%\\NF/F0*&,&$\"SQM7/%G*pp<:,@N(p/)4LMO\\DR\"4)F@F**&$\" Sxx>CU\"e'e#>.Y#yn\\Nf:)f0X2L:#F@F0FAF0F*F0FAF0F0F0FAF0F0F0FAF0F0F0FAF 0F0F*" }}{PARA 13 "" 1 "" {GLPLOT2D 423 423 423 {PLOTDATA 2 "6%-%'CURV ESG6$7fn7$$\"\"!F)$!S[Y2`y&p^+1vE\\a0j&)=!yzTt/MZ!#c7$$\"Smmmmmmmmmmmm mmmmmmmm;arz@!#^$\"NW#=%Q&)RcQDM#)*fLcj!>];s>S$F07$$\"SLLLLLLLLLLLLLLL LLLL$e9ui2%F0$\"NN*\\S_![5UWEu;xy0SE.'3%fp%F07$$\"Smmmmmmmmmmmmmmmmmmm m\"z_\"4iF0$\"N%o49?sHLYE)4W]aimkQ/T>%HF07$$\"SlmmmmmmmmmmmmmmmmmmmT&p hN)F0$\"LD&4J%o_&\\h)f[+xEsuV`a2u\"F07$$\"SLLLLLLLLLLLLLLLLLLLe*=)H\\5 !#]$!M&e:\"=58p4L2E;Ue\\?)*HRO8EFE7$$\"Smmmmmmmmmmmmmmmmmmm\"z/3uC\"FE $!MGI#\\@y*oBo\"RRE\")\\NmngV@;%FE7$$\"S+++++++++++++++++++DJ$RDX\"FE$ !MIoq`&3k@MxB=v)f-Ec0%\\Xl%FE7$$\"Smmmmmmmmmmmmmmmmmmm\"zR'ok;FE$!M^uX ExLwoZA0#Q9$3ywd*=61%FE7$$\"S+++++++++++++++++++D1J:w=FE$!M`2eFglP)G4 \"RjjrJb`/3*fj#FE7$$\"SLLLLLLLLLLLLLLLLLLLL3En$4#FE$!Ls'4CU%*o>TU]+$*f pv#*41\"y+(FE7$$\"Smmmmmmmmmmmmmmmmmmm;/RE&G#FE$\"MqR?'=!*GZ'pU?[_Gwki 'Q#=i5FE7$$\"S++++++++++++++++++++D.&4]#FE$\"My\"pY&3+P$*H+_Dm?k]X2b&z x#FE7$$\"S++++++++++++++++++++vB_.AMyC\"*)*))QN-suJ&H(R%FE7$$ \"Smmmmmmmmmmmmmmmmmmm\"z*ev:JFE$\"M3%QWc!4%FE7$$\"SL LLLLLLLLLLLLLLLLLLL347TLFE$\"Mu]kR/q%*)eL00M,n9wu/JgG$FE7$$\"SLLLLLLLL LLLLLLLLLLLLLY.KNFE$\"MI;*\\3TL)p,CT)[+\"*zZZG<52#FE7$$\"S************ *************************\\7o7Tv$FE$\"L8Q!G%fCYV*HpR3aA-7FcU\"z$FE7$$ \"SLLLLLLLLLLLLLLLLLLLL$Q*o]RFE$!MSZ[]DBl=#f')ea::wy'\\4tT6FE7$$\"S*** **********************************\\7=lj;%FE$!MehH;)oWu+^C\"e[ZP;sQ$zM e#FE7$$\"S*************************************\\PaRR3s)[_ptbqE 3m8nRPu$RFE7$$\"SLLLLLLLLLLLLLLLLLLLeR\"3Gy%FE$!M^*zri2P'=(=g-z7_HA-$) f,u$FE7$$\"Smmmmmmmmmmmmmmmmmmm;/T1&*\\FE$!M)\\1?;JAj5&GW;S>gJzY6X%)HF E7$$\"Smmmmmmmmmmmmmmmmmmm\"zRQb@&FE$!MKLjD9)3D9I0/,!>m<\\&3GD#=FE7$$ \"S*************************************\\(=>Y2aFE$!Lk)=^?R(oGB\"R0\"* pF;P!H5q5)FE7$$\"Smmmmmmmmmmmmmmmmmmm;zXu9cFE$!Le[\">>fRC)=NTi2DpsOlt8 6#FE7$$\"S****************************************\\y))GeFE$!LGZFpVNDY 7Z4'z(HL>,PPTE*FE7$$\"S**************************************\\i_QQgFE $!M'o?2Q3PT#3lH^Fih9Y-[+'=%FE7$$\"S*********************************** **\\7y%3TiFE$!N/F#=X9W5$=u3Djt%)o&G#)R3Uf5oE5i9a&H#*GFE7$$\"SKLLLLLL LLLLLLLLLLLLL$Qx$omFE$!N:_`_/#=CQ*p*HWx8CX()pUJreFE7$$\"S************* **************************\\P+V)oFE$!OG1C(fXzK_(p#ywi/!*Q3g]`Z<\"FE7$$ \"Smmmmmmmmmmmmmmmmmmm\"zpe*zqFE$!O0Jk3:!er)fZuH_f\\*Qp'R[dG@FE7$$\"S* **************************************\\#\\'QH(FE$!Otf1w-.-2;I#G[P6DhN b9eq(RFE7$$\"SKLLLLLLLLLLLLLLLLLLe9S8&\\(FE$!Ofp/n1,:(>xYw,]NZ&)[SojN. (FE7$$\"S*************************************\\i?=bq(FE$!P6UV&**3S6`! ekT,D[/%z/cN8c7FE7$$\"SKLLLLLLLLLLLLLLLLLLL3s?6zFE$!PG\"Q>%G3931^Ax**4 'RBqSP#H<=#FE7$$\"S*************************************\\7`Wl7)FE$!P( zi=,Js!)f^wSxxna*=%4 ](ol&[2_..*=wAG5=FE7$$\"S****************************************\\Qk \\*)FE$!QgGh_](=:<5-u#pOrJY!R_YSa$GFE7$$\"SlmmmmmmmmmmmmmmmmmmT5ASg!*F E$!Q4gvHBBDg['Q3q[$\\iQ:p`:>WOFE7$$\"SKLLLLLLLLLLLLLLLLLL$3dg6<*FE$!QH >^v3'p%p0J#H`#)[m_dAx`R*RlN\"FE7$$\"S++++++++++++++++++]PMR " 0 "" {MPLTEXT 1 0 210 "expr:=arctanh(x)*sqrt(Pi)/2:\nfact:=x:\nfor i from 1 to 35 by 2 do\n pol:=convert(series(erf(expr-a*fact),x,i+2),polynom) ;\n sol:=solve(pol=x,a):\n expr:=expr-sol*fact;\n fact:=fact*x^2;\n print(evalf(expr));\nod:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\"S ?h!GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&$\"S?h!GZx)R\"fs0nTP3\\O,eFXDpA')) !#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3`RjF'F()F ,\"\"$F(!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&$\"S?h!GZx)R\"fs0 nTP3\\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\ HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+IJQ\\H V%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+IJQ\\HV%[E;'3`RjF'F()F ,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+b IY;(**H5>i`_u9-[$)GF;F()F,\"#6F(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6# ,0*&$\"S?h!GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(* &$\"RFDkAdB)G/1>IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ= p+bIY;(**H5>i`_u9-[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7 r518eM`#F;F()F,\"#8F(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,2*&$\"S?h! GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB )G/1>IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bI Y;(**H5>i`_u9-[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F ()F,\"#8F(F2*&$\"Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,4*&$\"S?h!GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\" \"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3`RjF'F()F,\"\" $F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$)GF;F()F,\"#6F(F 2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\"Sf-Pi'GFc<4?Mb \"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE$f!*>W?F;F()F, \"#IJQ\\HV%[ E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9 -[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2* &$\"Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO. krEE$f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#> F(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,8*&$\"S?h!GZx)R\"fs0nTP3\\O,e FXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3` RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$)GF ;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\"Sf -Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE$f !*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#>F(F2*& $\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#,:*&$\"S?h!GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arc tanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*& $\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$)GF;F()F,\"#6F(F2*&$\"S\\q ekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\"Sf-Pi'GFc<4?Mb\"e-^7C_;sl ehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE$f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#>F(F2*&$\"SvgpTRha=P)*HfyY$=\" ))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_()o%\\w(e>m0\"Hl,dN@u@f\"F;F()F ,\"#BF(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,<*&$\"S?h!GZx)R\"fs0nTP3 \\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[ E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9 -[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2* &$\"Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO. krEE$f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#> F(F2*&$\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_() o%\\w(e>m0\"Hl,dN@u@f\"F;F()F,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X>F)=80RmHU [\"F;F()F,\"#DF(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,>*&$\"S?h!GZx)R \"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1> IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(* *H5>i`_u9-[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F, \"#8F(F2*&$\"Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN 0DFp)RjO.krEE$f!*>W?F;F()F,\"#bsU*)Gm=F; F()F,\"#>F(F2*&$\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2*&$\" S+G:J0_()o%\\w(e>m0\"Hl,dN@u@f\"F;F()F,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X> F)=80RmHU[\"F;F()F,\"#DF(F2*&$\"SbW\\:IH5#G,`SM/@-]!R\"F;F()F, \"#FF(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,@*&$\"S?h!GZx)R\"fs0nTP3 \\O,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[ E;'3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9 -[$)GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2* &$\"Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO. krEE$f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#> F(F2*&$\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_() o%\\w(e>m0\"Hl,dN@u@f\"F;F()F,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X>F)=80RmHU [\"F;F()F,\"#DF(F2*&$\"SbW\\:IH5#G,`SM/@-]!R\"F;F()F,\"#FF(F2* &$\"So\"*\\rGv5LE\\%RCFt0fLoo!fyJ38F;F()F,\"#HF(F2" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#,B*&$\"S?h!GZx)R\"fs0nTP3\\O,eFXDpA'))!#]\"\"\"-%(arc tanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3`RjF'F()F,\"\"$F(!\"\"*& $\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$)GF;F()F,\"#6F(F2*&$\"S\\q ekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\"Sf-Pi'GFc<4?Mb\"e-^7C_;sl ehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE$f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#>F(F2*&$\"SvgpTRha=P)*HfyY$=\" ))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_()o%\\w(e>m0\"Hl,dN@u@f\"F;F()F ,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X>F)=80RmHU[\"F;F()F,\"#DF(F2*&$\"SbW\\:IH5#G,`SM/@-]!R\"F;F()F,\"#FF(F2*&$\"So\"*\\rGv5LE\\%RCFt0fLoo !fyJ38F;F()F,\"#HF(F2*&$\"Sb>z\\shiLP$\\90$>[+6\\+&\\VYcB\"F;F()F,\"#J F(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,D*&$\"S?h!GZx)R\"fs0nTP3\\O,e FXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;'3` RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$)GF ;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\"Sf -Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE$f !*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#>F(F2*& $\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_()o%\\w( e>m0\"Hl,dN@u@f\"F;F()F,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X>F)=80RmHU[\"F;F ()F,\"#DF(F2*&$\"SbW\\:IH5#G,`SM/@-]!R\"F;F()F,\"#FF(F2*&$\"So \"*\\rGv5LE\\%RCFt0fLoo!fyJ38F;F()F,\"#HF(F2*&$\"Sb>z\\shiLP$\\90$>[+6 \\+&\\VYcB\"F;F()F,\"#JF(F2*&$\"S]Wjt^gk<.mw[Ri_Bz\\3TJY!4<\"F;F()F,\" #LF(F2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,F*&$\"S?h!GZx)R\"fs0nTP3\\O ,eFXDpA'))!#]\"\"\"-%(arctanhG6#%\"xGF(F(*&$\"RFDkAdB)G/1>IJQ\\HV%[E;' 3`RjF'F()F,\"\"$F(!\"\"*&$\"Ro.A#*)*HkQWQ=p+bIY;(**H5>i`_u9-[$) GF;F()F,\"#6F(F2*&$\"S\\qekj#>Dns2*yo&RPu7r518eM`#F;F()F,\"#8F(F2*&$\" Sf-Pi'GFc<4?Mb\"e-^7C_;slehAF;F()F,\"#:F(F2*&$\"S5%*REOtN0DFp)RjO.krEE $f!*>W?F;F()F,\"#bsU*)Gm=F;F()F,\"#>F(F2 *&$\"SvgpTRha=P)*HfyY$=\"))p=KK1!zr\"F;F()F,\"#@F(F2*&$\"S+G:J0_()o%\\ w(e>m0\"Hl,dN@u@f\"F;F()F,\"#BF(F2*&$\"SG-!)3W-^(H#=L,]X>F)=80RmHU[\"F ;F()F,\"#DF(F2*&$\"SbW\\:IH5#G,`SM/@-]!R\"F;F()F,\"#FF(F2*&$\" So\"*\\rGv5LE\\%RCFt0fLoo!fyJ38F;F()F,\"#HF(F2*&$\"Sb>z\\shiLP$\\90$>[ +6\\+&\\VYcB\"F;F()F,\"#JF(F2*&$\"S]Wjt^gk<.mw[Ri_Bz\\3TJY!4<\"F;F()F, \"#LF(F2*&$\"Su$)[]KK:_d8Cc#z[-\"[EShH`%G6\"F;F()F,\"#NF(F2" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "with(numapprox);expr;\nminim ax(expr,x=0.1..0.9,5);\nplot(erf(expr)-x,x=0..1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7/%(chebdegG%)chebmultG%)chebpadeG%)chebsortG%*chebyshe vG%,confracformG%-hermite_padeG%+hornerformG%(infnormG%(laurentG%(mini maxG%%padeG%&remezG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,F*&#\"\"\"\"\" #F&*&-%(arctanhG6#%\"xGF&%#PiGF%F&F&*&,&*&\"\"'!\"\"F-F%F&*&\"#CF2F-# \"\"$F'F2F&)F,F6F&F2*&,&*&\"#5F2F-F%F&*(\"\"(F&\"$g*F2F-#\"\"&F'F2F&)F ,F@F&F2*&,&*&\"#9F2F-F%F&*(\"$F\"F&\"&S1)F2F-#F=F'F2F&)F,F=F&F2*&,&*( \"%pVF&\")g@h6F2F-#\"\"*F'F2*&\"#=F2F-F%F&F&)F,FQF&F2*&,&*&\"#AF2F-F%F &*(\"&2[$F&\"*+O&\\OF2F-#\"#6F'F2F&)F,FgnF&F2*&,&*(\")$)p.?F&\"-+Cmeqz F2F-#\"#8F'F2*&\"#EF2F-F%F&F&)F,F_oF&F2*&,&*(\"+joN!G#F&\"0+!3#QYwM$F2 F-#\"#:F'F2*&\"#IF2F-F%F&F&)F,FioF&F2*&,&*(\",B[??!\\F&\"2+gtSZ*f,EF2F -#\"#F'F2*&\"#QF2F-F%F&F&)F,F]qF&F2*&,&*(\"2nPzB9Ytd\"F&\"9++7L4mn& \\Uj/\"F2F-#\"#@F'F2*&\"#UF2F-F%F&F&)F,FgqF&F2*&,&*(\"3,A*H.*e*)elF&\" ;++#RZBh\\PH7F^\"F2F-#\"#BF'F2*&\"#YF2F-F%F&F&)F,FarF&F2*&,&*(\"5(pte. \">!p?S*F&\"=+++%ejL9XERyXZ(F2F-#\"#DF'F2*&\"#]F2F-F%F&F&)F,F[sF&F2*&, &*(\"9*[vVrJ&*z\\Ayb'F&\"B+++7H--=Gac2PKSy\"F2F-#\"#FF'F2*&\"#aF2F-F%F &F&)F,FesF&F2*&,&*(\";p*4)>YE'*\\p+stWF&\"D+++%e:$p!yLz^:+^&*QTF2F-#\" #HF'F2*&\"#eF2F-F%F&F&)F,F_tF&F2*&,&*(\">z!o4$Qnb#4D\"*4&H,\"F&\"G+++S !f(Gg3$p9tC3n_*pJF2F-#\"#JF'F2*&\"#iF2F-F%F&F&)F,FitF&F2*&,&*(\"B\"G<1 !)Ry7T?ww%\\j-3\"F&\"L+++g@dklxg0u'e6H$p!)R\"Q6F2F-#\"#LF'F2*&\"#mF2F- F%F&F&)F,FcuF&F2*&,&*(\"Dj!>yb&*H?ed#Q5nX\"[&4\"F&\"N++++W`a>.k1z\"\\R **=dV`npQF2F-#\"#NF'F2*&\"#qF2F-F%F&F&)F,F]vF&F2" }}{PARA 7 "" 1 "" {TEXT -1 33 "Warning, computation interrupted\n" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 41 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/InverseErf.txt000066400000000000000000000647501307543307100211710ustar00rootroot00000000000000> restart: > Digits:=50: > Phi:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > with(numapprox): > Order:=20: > S:=series(erf(y)-x,y): > R:=convert(solve(S,y),polynom): > P:=minimax(R,x=0..1,[5,5]); > plot(erf(P)-x,x=0..1); > expr:=-1/(Pi^(1/2)*exp(1/2*LambertW(2/Pi/(y-1)^2))*(y-1)): > series(expr,y=1,5); > solve(convert(series(erf(x),x=infinity,3),polynom)=y,x); > plot([erf(expr),y],y=0.9..1); > > -6 P := (-0.931016081029396945801879213100564177164488410 10 + ( 1.9667589772881248589005145596342952784517869449702 + ( -2.1845846695093251724033070036319164110526305275866 + ( -1.4077524852951284293092116020500722296498251830276 + ( 2.4782190283403376790521076142794247041818822897287 - 0.71408812015103649629948260587435427593482388247715 x) x) x) x) x)/(2.2191141621863561049324175031198830658199101778944 + (-2.4620726180755717339348476339012965690111892510189 + ( -2.1947816664298362633640199612768785606036363252396 + ( 3.5494586794412646286199914695667121871987143742928 + ( -0.80913925493634330980469735210115176969928404123438 - 0.21533074505598155935496778246031925865814224197777 x) x) x) x) x) > expr:=arctanh(x)*sqrt(Pi)/2: > fact:=x: > for i from 1 to 35 by 2 do > pol:=convert(series(erf(expr-a*fact),x,i+2),polynom); > sol:=solve(pol=x,a): > expr:=expr-sol*fact; > fact:=fact*x^2; > print(evalf(expr)); > od: 0.88622692545275801364908374167057259139877472806120 arctanh(x) 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 27 - 0.013905002210434405301282102930154944551920472495717 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 27 - 0.013905002210434405301282102930154944551920472495717 x 29 - 0.013083178590686833590573272439449263310752871499168 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 27 - 0.013905002210434405301282102930154944551920472495717 x 29 - 0.013083178590686833590573272439449263310752871499168 x 31 - 0.012356464349500491100481930514493373362617249791955 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 27 - 0.013905002210434405301282102930154944551920472495717 x 29 - 0.013083178590686833590573272439449263310752871499168 x 31 - 0.012356464349500491100481930514493373362617249791955 x 33 - 0.011709046314108497923526239487666031764605173634450 x 0.88622692545275801364908374167057259139877472806120 arctanh(x) 3 - 0.06339530861626484432949383130190604288235722642527 x 5 - 0.04968920978495364447581700691838443864299892220368 x 7 - 0.040051717251703611077370170466735889820434255252255 x 9 - 0.033510040638254365912327969343079555395422755182858 x 11 - 0.028834802147452536219102999716463055191164418888621 x 13 - 0.025334581306107112743739568789077267251926364587049 x 15 - 0.022615865721652241251025815534200917562728662370259 x 17 - 0.020441990593262671640336633986927250535733626399410 x 19 - 0.018662889427255197037573740213658321844885053615862 x 21 - 0.017179006323218698811834678592998371854613941696075 x 23 - 0.015921742135570165291056619587764946887520531152800 x 25 - 0.014842296639051318827194550013318229751024408800228 x 27 - 0.013905002210434405301282102930154944551920472495717 x 29 - 0.013083178590686833590573272439449263310752871499168 x 31 - 0.012356464349500491100481930514493373362617249791955 x 33 - 0.011709046314108497923526239487666031764605173634450 x 35 - 0.011128453296140264810248792562413575215323250488374 x > with(numapprox);expr; > minimax(expr,x=0.1..0.9,5); > plot(erf(expr)-x,x=0..1); [chebdeg, chebmult, chebpade, chebsort, chebyshev, confracform, hermite_pade, hornerform, infnorm, laurent, minimax, pade, remez] / 1/2 3/2\ / 1/2 5/2\ 1/2 |Pi Pi | 3 |Pi 7 Pi | 5 1/2 arctanh(x) Pi - |----- - -----| x - |----- - -------| x \ 6 24 / \ 10 960 / / 1/2 7/2\ / 9/2 1/2\ |Pi 127 Pi | 7 | 4369 Pi Pi | 9 - |----- - ---------| x - |- ---------- + -----| x \ 14 80640 / \ 11612160 18 / / 1/2 11/2\ |Pi 34807 Pi | 11 - |----- - ------------| x \ 22 364953600 / / 13/2 1/2\ | 20036983 Pi Pi | 13 - |- --------------- + -----| x \ 797058662400 26 / / 15/2 1/2\ | 2280356863 Pi Pi | 15 - |- ----------------- + -----| x \ 334764638208000 30 / / 17/2 1/2\ | 49020204823 Pi Pi | 17 - |- ------------------ + -----| x \ 26015994740736000 34 / / 19/2 1/2\ | 65967241200001 Pi Pi | 19 - |- --------------------- + -----| x \ 124564582818643968000 38 / / 21/2 1/2\ | 15773461423793767 Pi Pi | 21 - |- ------------------------ + -----| x \ 104634249567660933120000 42 / / 23/2 1/2\ | 655889589032992201 Pi Pi | 23 - |- -------------------------- + -----| x \ 15127122937496123473920000 46 / / 25/2 1/2\ | 94020690191035873697 Pi Pi | 25 - |- ---------------------------- + -----| x \ 7474578392645143363584000000 50 / / 27/2 1/2\ | 655782249799531714375489 Pi Pi | 27 - |- --------------------------------- + -----| x \ 178403237075654281802022912000000 54 / / 29/2 1/2\ | 44737200694996264619809969 Pi Pi | 29 - |- ----------------------------------- + -----| x \ 41389551001551793378069315584000000 58 / / 31/2 1/2\ | 10129509912509255673830968079 Pi Pi | 31 - |- -------------------------------------- + -----| x - \ 31699526708247314693086028759040000000 62 / / 33/2 1/2\ | 108026349476762041127839800617281 Pi Pi | 33 |- ------------------------------------------- + -----| x \ 1138139806932911586740560776564572160000000 66 / - / 35/2 1/2\ | 10954814567103825758202995557819063 Pi Pi | 35 |- --------------------------------------------- + -----| x \ 386967534357189939491790664031954534400000000 70 / Warning, computation interrupted > openturns-1.9/validation/src/InverseNormalFactory.mw000066400000000000000000000540421307543307100230320ustar00rootroot00000000000000 QyQtSSVzdWJzRyUqcHJvdGVjdGVkRzYkL0kjbXVHNiJJInhHRiktSSdmYWN0b3JHNiRGJUkoX3N5c2xpYkdGKTYjLUklZGlmZkdGJTYkLCYtSSIqR0YlNiQjIiIiIiIjLCYtSSRsb2dHRi02I0knbGFtYmRhR0YpRjgqKEY8RjgtRjU2JCwkKiZJI1BpR0YlRjhGKkY4RjlGKkY4RipGOCEiIkY4KiYtRjU2JComRj5GOCwmRipGOEYoRkVGOEZKRjgtRjU2JCwkKiZGKkY4RihGOEY5RihGRUZFRj5GOA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJEknbGFtYmRhRzYiISIiIyIiIiIiIw== JSFH openturns-1.9/validation/src/InverseNormalFactory2.mw000066400000000000000000001517601307543307100231210ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYtLUYsNiVRJ2xhbWJkYUYnL0YwRj1GOS1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIjBGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEjbXVGJ0Znb0Y5RmhvRltwRl9wLUYsNiVRInhGJ0YvRjJGaG9GW3BGOUY1Rk8tRiw2JVEnbG9ncGRmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEpc2ltcGxpZnlGJ0YvRjItRmBvNiQtRiM2JUZnbi1GLDYlUSRsb2dGJ0Znb0Y5LUZgbzYkLUYjNiktRiw2JVElc3FydEYnRmdvRjktRmBvNiQtRiM2J0Zkb0Znbi1GNjYtUSIvRidGOUY7Rj4vRkFGMUZCRkRGRkZIL0ZLUSwwLjE2NjY2NjdlbUYnL0ZORltzRmduLUZgbzYkLUYjNjMtRlxwNiRRIjJGJ0Y5RmduLUY2Ni1RIipGJ0Y5RjtGPkZARkJGREZGRkhGanJGXHNGZ24tRiw2JVEjUGlGJ0Znb0Y5RmduRmRzRmduRmhwRmduRmRzRmduRmhwRmduRmRzRmduRmhwRjlGOUZnbkZkc0Znbi1GLDYlUSRleHBGJ0Znb0Y5LUZgbzYkLUYjNjEtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmV0RmduRmRvRmduRmRzRmduLUZgbzYkLUYjNidGaHBGZ25GYXRGZ25GZXBGOUZnbkZkc0ZnbkZndEZnbkZmckZnbi1GYG82JC1GIzYvRmFzRmduRmRzRmduRmhwRmduRmRzRmduRmVwRmduRmRzRmduRmVwRjlGOUY5Rjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCwwKigtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjIiIjIiIiSSN4fGlyR0YrRi5JJG11fGlyR0YrRi1GLiooLUYnNiNJI1BpR0YpRi5GL0YuRjBGLUYuKigtRic2I0YvRi5GL0YuRjBGLSIiJCooLUYnNiNJKGxhbWJkYXxpckdGK0YuRi9GLkYwRi0hIiIqJkY8Ri5GL0YtRi4qKEY8Ri5GL0YuRjBGLiEiIyomRjxGLkYwRi1GLkYuRi9GPUYwRkAjRj1GLQ== QyQ+SSNMTEc2Ii1JJHN1bUdGJTYkLUklc3Vic0clKnByb3RlY3RlZEc2JC9JInhHRiUmRi42I0kiaUdGJUknbG9ncGRmR0YlL0YxOyIiIkkiTkdGJUY1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCwqJkkiTkc2IiIiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMiIiNGJiMhIiJGLSomRiRGJi1GKDYjSSNQaUdGKkYmRi4qJkYkRiYtRig2I0kobGFtYmRhfGlyR0YlRiYjRiZGLSooRiRGJkY3RiZJJG11fGlyR0YlRi9GJi1JJHN1bUdGKTYkLCgqKCZJI3h8aXJHRiU2I0kiaUdGJUYmRjohIiNGN0YmRi4qJkZARi9GN0YmRi4tRig2I0ZAIyEiJEYtL0ZDO0YmRiRGJg== LUklZGlmZkclKnByb3RlY3RlZEc2JEkjTExHNiJJI211R0Yn LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqKEkiTkc2IiIiIkkobGFtYmRhfGlyR0YlRiZJJG11fGlyR0YlISIjISIiLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQqKCZJI3h8aXJHRiU2I0kiaUdGJUYmRighIiRGJ0YmL0Y1O0YmRiRGJg== QyQ+SSRzb2xHNiItSSZzb2x2ZUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkLUkpc2ltcGxpZnlHRig2Iy1JJWRpZmZHRik2JC1GLTYjLUklc3Vic0dGKTYkL0kjbXVHRiUqJkkiTkdGJSEiIi1JJHN1bUdGKDYkJkkieEdGJTYjSSJpR0YlL0ZCOyIiIkY6RkVJI0xMR0YlSSdsYW1iZGFHRiVGR0ZF LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Warning, solve may be ignoring assumptions on the input variables. LCQqKEkiTkc2IiIiIi1JJHN1bUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkJkkjeHxpckdGJTYjSSJpR0YlL0YwO0YmRiRGJiwmKiRGJCIiI0Y1KiYtRig2JCooLCYqJkYtRjVGJEY1RiYqJEYnRjVGJkYmRichIiNGLSEiIkYxRiZGJ0YmRj5GPkY+ QyQtSSlhc3N1bWluZ0dJKF9zeXNsaWJHNiI2JDcjLUkpc2ltcGxpZnlHNiQlKnByb3RlY3RlZEdGJTYjLUklc3Vic0dGLDYkLy1JJHN1bUdGKzYkJkkieEdGJjYjSSJpR0YmL0Y4OyIiIkkiTkdGJkkiU0dGJkkkc29sR0YmNyQtSSI+R0YsNiRGPSIiIS1GQTYkRjVGQ0Y7 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKEkiTkc2IiIiIkkiU0dGJSIiIywmKiZGJEYoRidGJkYoLUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiQqJiwmKiYmSSN4fGlyR0YlNiNJImlHRiVGKEYkRihGJiokRidGKEYmRiZGNCEiIi9GNztGJkYkRjlGOUY5 LUkpc2ltcGxpZnlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKihJIk5HRiciIiJJIlNHRiciIiMsJiomRitGLkYtRixGLComRi1GLi1JJHN1bUdGJDYkKiQmSSJ4R0YnNiNJImlHRichIiIvRjk7RixGK0YsRjpGOkY6 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKEkiTkc2IiIiIkkiU0dGJUYmLCYqJEYkIiIjRiYqJkYnRiYtSSRzdW1HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2JCokJkkjeHxpckdGJTYjSSJpR0YlISIiL0Y2O0YmRiRGJkY3RjdGNw== LUknc2VyaWVzRyUqcHJvdGVjdGVkRzYkKiZJI211RzYiIiIiLChGKUYpSSJ3R0YoI0YpIiIjLUklc3FydEc2JEYkSShfc3lzbGliR0YoNiMsJkYrIiIlLUkiKkdGJDYkRitGK0YpIyEiIkYtRikvRitJKWluZmluaXR5R0Yk LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LC4qJkkkbXV8aXJHNiIiIiJJIndHRiUhIiJGJiomRiRGJkYnISIjRioqJkYkRiZGJyEiJCIiJiomRiRGJkYnISIlISM5KiZGJEYmRichIiYiI1UtSSJPRyUqcHJvdGVjdGVkRzYjKiRGJyEiJ0Ym JSFH openturns-1.9/validation/src/InverseNormalMoments.mw000066400000000000000000002030741307543307100230460ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZULUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIiNGJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRKH5hc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2LS1GLDYlUSJuRidGL0YyLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEoaW50ZWdlckYnRi9GMkZnby1GLDYlUSdsYW1iZGFGJy9GMEY9RjktRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOUZnby1GLDYlUSNtdUYnRmNwRjlGZHBGZ3BGOUY1Rk8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GLDYlUSRwZGZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSVzcXJ0RidGY3BGOS1GYG82JC1GIzYnRmBwRl5xLUY2Ni1RIi9GJ0Y5RjtGPi9GQUYxRkJGREZGRkgvRktRLDAuMTY2NjY2N2VtRicvRk5GY3JGXnEtRmBvNiQtRiM2My1GaHA2JFEiMkYnRjlGXnEtRjY2LVEiKkYnRjlGO0Y+RkBGQkZERkZGSEZickZkckZecS1GLDYlUSNQaUYnRmNwRjlGXnFGXHNGXnEtRiw2JVEieEYnRi9GMkZecUZcc0ZecUZic0ZecUZcc0ZecUZic0Y5RjlGXnFGXHNGXnEtRiw2JVEkZXhwRidGY3BGOS1GYG82JC1GIzYxLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZgdEZecUZgcEZecUZcc0ZecS1GYG82JC1GIzYnRmJzRl5xRlx0Rl5xRltxRjlGXnFGXHNGXnFGYnRGXnFGXnJGXnEtRmBvNiQtRiM2L0ZpckZecUZcc0ZecUZic0ZecUZcc0ZecUZbcUZecUZcc0ZecUZbcUY5RjlGNUZPRl5xLUYsNiVRIm1GJ0YvRjJGZHEtRiw2JVEkaW50RidGL0YyLUZgbzYkLUYjNitGYXEtRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUklbXN1cEdGJDYlRmJzLUYjNiNGZG8vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZqcEZnb0Zicy1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZncC1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZfdEZbby1GLDYlUSlpbmZpbml0eUYnRi9GMkY5LUY2Ni1RIjtGJ0Y5RjtGam9GQEZCRkRGRkZIRmpuRk1GT0ZecS1GLDYlUSRjb2VGJ0YvRjJGZHEtRiw2JVEpc2ltcGxpZnlGJ0YvRjItRmBvNiQtRiM2Iy1JJm1mcmFjR0YkNigtRiM2L0ZncS1GYG82JC1GIzYjLUZldzYoLUYjNiZGaXJGZHVGXnFGYHAtRiM2JUZfc0ZkdUZbcS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaHgvJSliZXZlbGxlZEdGPUY5RmR1RmVzLUZgbzYkLUYjNiMtRmV3NihGYHAtRiM2I0ZbcUZjeEZmeEZpeEZbeUY5RmR1LUZodTYlLUYsNiVRJSZtdTtGJ0ZjcEY5Rmp1Rlx2RmR1RmdxLUZgbzYkLUYjNiMtRmV3NihGX3MtRiM2I0ZpckZjeEZmeEZpeEZbeUY5RmR1RmVzLUZgbzYkLUYjNiRGXHRGYXlGOS1GIzYkRmdxRl15RmN4RmZ4Rml4Rlt5RjlGZ3ZGT0ZecS1GLDYlUSV0ZXJtRidGL0YyRmRxLUZldzYoLUYjNiQtRmBvNiQtRiM2KS1GLDYlUSJrRidGL0YyLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGX3RGYXRGZG8tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZfdEZhdC1GZXc2KC1GaHA2JEZleEY5RmB6RmN4RmZ4Rml4Rlt5RmlbbEZcXGxGOS1GNjYtUSIhRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjExMTExMTFlbUYnL0ZORmRcbC1GIzYnRmNbbEZgXGxGZHUtRmBvNiQtRiM2KkZcdEZjW2xGZltsRmRvRmlbbEZcXGxGaVtsRlxcbEY5RmBcbEZjeEZmeEZpeEZbeUZkdS1GaHU2JS1GYG82JC1GIzYjLUZldzYoLUYjNiVGaXJGZHVGYHBGY3lGY3hGZnhGaXhGW3lGOS1GIzYkRlx0RmNbbEZcdkY1Rk8tRlA2JkZSRlVGWC9GZW5RJWF1dG9GJy1GLDYlUSNtbUYnRi9GMkZkcUZqdkZkdS1GLDYlUSRzdW1GJ0YvRjItRmBvNiQtRiM2K0ZoekZnb0ZjW2xGXnZGZ3BGYXZGZG9GaVtsRl5cbEY5Rmd2 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KjApSSdsYW1iZGFHNiIsJkkibkdGJSIiIiNGKCIiI0YoRihGKkYpLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMqJkYkRihJI211R0YlISIiRigpKiYqJkYkRihGMiEiI0YpRiRGKSwmRidGMyNGM0YqRihGKEY2RiktSShCZXNzZWxLR0YtNiQsJkY5RihGJ0YoRjVGKEkjUGlHRi5GOQ== KUkjbXVHNiJJIm5HRiQ= KiYpSSNtdUc2IkkibkdGJSIiIi1JKmh5cGVyZ2VvbUdJKF9zeXNsaWJHRiU2JTckRiYsJkYnRidGJiEiIjciLCQqJkknbGFtYmRhR0YlRi5GJEYnI0YuIiIjRic= LUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMtSSVzdWJzR0YkNiYvSSdsYW1iZGFHNiIjIiIiIiIjL0kjbXVHRitGLi9JIm5HRisiIiY3JEkibUdGK0kjbW1HRis= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQkIisrP2IqNCIhIiRGIw== QyYtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLUknZmFjdG9yR0YlNiMqJkkldGVybUdGKCIiIi1JJXN1YnNHRiY2JC9JImtHRigsJkY0Ri8hIiJGL0YuRjZGLy1JJWV2YWxHRiY2Iy1GMTYkL0Y0IiIhRi5GLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqLEknbGFtYmRhRzYiISIiSSNtdUdGJSIiIiwoSSJrR0YlRihJIm5HRiVGKEYmRihGKCwmRipGKEYrRiZGKEYqRiYjRiYiIiM= IiIi Qy4+SSRyaG9HNiIqJkkjbXVHRiUiIiItSSIvRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJEknbGFtYmRhR0YlIiIjRighIiI+SSdtb21lbnRHRiVGKEYyPkklcHJvZEdGJUYoRjI+SSNubkdGJSIjNUYyPyhJImtHRiVGKEYoLCZGOEYoRjJGKEkldHJ1ZUdGLEMlPkY2KixGNkYoLCZGOEYoRjtGMkYoLChGOEYoRjtGKEYyRihGKEYkRihGO0YyPkY0LCZGNEYoRjZGKC1JJnByaW50R0YsNiM3JUY7RjZGNEYyPkY0KiYpRidGOEYoRjRGKEYo LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyUiIiIsJComSSdsYW1iZGFHNiIhIiJJI211R0YnRiMiI1gsJkYjRiNGJUYq NyUiIiMsJComSSdsYW1iZGFHNiIhIiNJI211R0YnRiMiJCEqKiwoIiIiRiwqJkYmISIiRilGLCIjWEYlRio= NyUiIiQsJComSSdsYW1iZGFHNiIhIiRJI211R0YnRiMiJmdRIiwqIiIiRiwqJkYmISIiRilGLCIjWComRiYhIiNGKSIiIyIkISoqRiVGKg== NyUiIiUsJComSSdsYW1iZGFHNiIhIiVJI211R0YnRiMiJ05eOCwsIiIiRiwqJkYmISIiRilGLCIjWComRiYhIiNGKSIiIyIkISoqKiZGJiEiJEYpIiIkIiZnUSJGJUYq NyUiIiYsJComSSdsYW1iZGFHNiIhIiZJI211R0YnRiMiJ1hmJSosLiIiIkYsKiZGJiEiIkYpRiwiI1gqJkYmISIjRikiIiMiJCEqKiomRiYhIiRGKSIiJCImZ1EiKiZGJiEiJUYpIiIlIidOXjhGJUYq NyUiIicsJComSSdsYW1iZGFHNiIhIidJI211R0YnRiMiKEQoSFosMCIiIkYsKiZGJiEiIkYpRiwiI1gqJkYmISIjRikiIiMiJCEqKiomRiYhIiRGKSIiJCImZ1EiKiZGJiEiJUYpIiIlIidOXjgqJkYmISImRikiIiYiJ1hmJSpGJUYq NyUiIigsJComSSdsYW1iZGFHNiIhIihJI211R0YnRiMiKStpQDssMiIiIkYsKiZGJiEiIkYpRiwiI1gqJkYmISIjRikiIiMiJCEqKiomRiYhIiRGKSIiJCImZ1EiKiZGJiEiJUYpIiIlIidOXjgqJkYmISImRikiIiYiJ1hmJSoqJkYmISInRikiIiciKEQoSFpGJUYq NyUiIiksJComSSdsYW1iZGFHNiIhIilJI211R0YnRiMiKUQlZlckLDQiIiJGLComRiYhIiJGKUYsIiNYKiZGJiEiI0YpIiIjIiQhKioqJkYmISIkRikiIiQiJmdRIiomRiYhIiVGKSIiJSInTl44KiZGJiEiJkYpIiImIidYZiUqKiZGJiEiJ0YpIiInIihEKEhaKiZGJiEiKEYpIiIoIikraUA7RiVGKg== NyUiIiosJComSSdsYW1iZGFHNiIhIipJI211R0YnRiMiKUQlZlckLDYiIiJGLComRiYhIiJGKUYsIiNYKiZGJiEiI0YpIiIjIiQhKioqJkYmISIkRikiIiQiJmdRIiomRiYhIiVGKSIiJSInTl44KiZGJiEiJkYpIiImIidYZiUqKiZGJiEiJ0YpIiInIihEKEhaKiZGJiEiKEYpIiIoIikraUA7KiZGJiEiKUYpIiIpRipGJUYq KiZJI211RzYiIiM1LDYiIiJGJyomSSdsYW1iZGFHRiQhIiJGI0YnIiNYKiZGKSEiI0YjIiIjIiQhKioqJkYpISIkRiMiIiQiJmdRIiomRikhIiVGIyIiJSInTl44KiZGKSEiJkYjIiImIidYZiUqKiZGKSEiJ0YjIiInIihEKEhaKiZGKSEiKEYjIiIoIikraUA7KiZGKSEiKUYjIiIpIilEJWZXJComRikhIipGIyIiKkZHRic= QyQtSSZldmFsZkclKnByb3RlY3RlZEc2Iy1JKXNpbXBsaWZ5RzYkRiVJKF9zeXNsaWJHNiI2Iy1JJXN1YnNHRiU2Jy9JI25uR0YrSSJuR0YrL0YyIiM1L0knbGFtYmRhR0YrIyIiIiIiIy9JI211R0YrRjksJkkjbW1HRitGOEknbW9tZW50R0YrISIiRjg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiIUYj QyQ/KEkiaUc2IiIiIkYmIiIqSSV0cnVlRyUqcHJvdGVjdGVkRy1JJmV2YWxmR0YpNiMtSSVzdWJzR0YpNiYvSSdsYW1iZGFHRiUjRiYiIiMvSSNtdUdGJUYzL0kibkdGJUYkSSNtbUdGJUYm LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrKysrKz8hIio= JCIrKysrKz8hIik= JCIrKysrISlbISIo JCIrKysrZz4hIiY= JCIrKz9iKjQiISIk JCIrK1doQ3ohIiM= JCIrISkpZSF5cCIiIQ== JCIrIjNeLkUoIiIj JCIrPURAOigpIiIl JSFH openturns-1.9/validation/src/LambertW.mws000066400000000000000000000065731307543307100206240ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 537 "restart:\nDigits:=5 0:\nlW:=proc(x)\n local e,w,w0,w1,w2,w3,y,z,tmp,tmp2;\n# if (x < 6.4 6) then\n# w0:=x*(3+4*x)/(3+x*(7+x*5/2));\n w:=w0;\n z:=log(x )-w-log(w);\n# else\n# w0:=log(x);\n# w:=w0;\n# z:=-log(w); \n# fi:\n tmp:=1+w;\n y:=2*tmp*(tmp+2*z/3)-z;\n w1:=w*(1+z*y/(tmp* (y-z)));\n w:=w1;\n z:=log(x)-w-log(w);\n tmp:=1+w;\n tmp2:=tmp+2* z/3;\n e:=z*tmp2/(tmp*tmp2-1/2*z);\n w2:=w*(1+e);\n w:=w2;\n z:=lo g(x)-w-log(w);\n tmp:=1+w;\n tmp2:=tmp+2*z/3;\n e:=z*tmp2/(tmp*tmp2 -1/2*z);\n w3:=w*(1+e);\n w:=w3;\n [x,w0,w1,w2,w3]\nend:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 601 "err:=1e-16:\nxmax:=1000.0: \nimax:=10000:\nflag1:=0:\nflag2:=0:\nflag3:=0:\nfor i from 0 to imax \+ do\n x:=evalf(0+err+xmax*(i/imax));\n res:=evalf(lW(x));\n ref:=eva lf(Re(LambertW(x)));\n if ((abs(res[1]/ref-1) > err) and (flag1=0)) t hen\n x1:=x;\n flag1:=1;\n print(\"res1\",x1);\n fi;\n if ( (abs(res[2]/ref-1) > err) and (flag2=0)) then\n x2:=x;\n flag2:= 1;\n print(\"res2\",x2);\n fi;\n if ((abs(res[3]/ref-1) > err) an d (flag3=0)) then\n x3:=x;\n flag3:=1;\n print(\"res3\",x3); \n fi;\n if ((abs(res[4]/ref-1) > err) and (flag4=0)) then\n x4:= x;\n flag4:=1;\n print(\"res4\",x4);\n fi;\nod:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q%res16\"$\"S+++++++++++++++++,++++++5!#]" }} {PARA 11 "" 1 "" {XPPMATH 20 "6$Q%res26\"$\"S+++++++++++++++++,++++++5 !#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q%res36\"$\"S+++++++++++++++++, ++++++I!#]" }}{PARA 7 "" 1 "" {TEXT -1 33 "Warning, computation interr upted\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 72 "r:=lW(t)[4]:\nwi th(codegen,optimize,cost):\nropt:=optimize(r);\ncost(ropt);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%roptG6+/%#t1G-%#lnG6#%\"tG/%#t2G-F)6#%#w0 G/%#t4G,&\"\"\"F4F0F4/%#t6G,$*(\"\"#F4\"\"$!\"\"F'F4F4/%#t9G*&F2F4,*F4 F4*&F:F;F0F4F4F6F4*(F9F4F:F;F-F4F;F4/%$t19G*&F0F4,&F4F4*,F9F;,(F'F4F0F ;F-F;F4,**&F9F4F=F4F4F'F;F0F4F-F4F4F2F;,*F=F4F'F;F0F4F-F4F;F4F4/%$t20G -F)6#FC/%$t24G,*F4F4*&F:F;FCF4F4F6F4*(F9F4F:F;FLF4F;/%$t35G*&FCF4,&F4F 4*(,(F'F4FCF;FLF;F4FPF4,**&,&F4F4FCF4F4FPF4F4*&F9F;F'F4F;*&F9F;FCF4F4* &F9F;FLF4F4F;F4F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*&\"\"$\"\"\"%* functionsGF&F&*&\"\"*F&%,assignmentsGF&F&*&\"#BF&%*additionsGF&F&*&\"# ;F&%0multiplicationsGF&F&*&F%F&%*divisionsGF&F&" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 19 "LambertW(-exp(-1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }}{MARK "3 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/LambertW.txt000066400000000000000000000051331307543307100206240ustar00rootroot00000000000000> restart: > Digits:=50: > lW:=proc(x) > local e,w,w0,w1,w2,w3,y,z,tmp,tmp2; > # if (x < 6.46) then > # w0:=x*(3+4*x)/(3+x*(7+x*5/2)); > w:=w0; > z:=log(x)-w-log(w); > # else > # w0:=log(x); > # w:=w0; > # z:=-log(w); > # fi: > tmp:=1+w; > y:=2*tmp*(tmp+2*z/3)-z; > w1:=w*(1+z*y/(tmp*(y-z))); > w:=w1; > z:=log(x)-w-log(w); > tmp:=1+w; > tmp2:=tmp+2*z/3; > e:=z*tmp2/(tmp*tmp2-1/2*z); > w2:=w*(1+e); > w:=w2; > z:=log(x)-w-log(w); > tmp:=1+w; > tmp2:=tmp+2*z/3; > e:=z*tmp2/(tmp*tmp2-1/2*z); > w3:=w*(1+e); > w:=w3; > [x,w0,w1,w2,w3] > end: > err:=1e-16: > xmax:=1000.0: > imax:=10000: > flag1:=0: > flag2:=0: > flag3:=0: > for i from 0 to imax do > x:=evalf(0+err+xmax*(i/imax)); > res:=evalf(lW(x)); > ref:=evalf(Re(LambertW(x))); > if ((abs(res[1]/ref-1) > err) and (flag1=0)) then > x1:=x; > flag1:=1; > print("res1",x1); > fi; > if ((abs(res[2]/ref-1) > err) and (flag2=0)) then > x2:=x; > flag2:=1; > print("res2",x2); > fi; > if ((abs(res[3]/ref-1) > err) and (flag3=0)) then > x3:=x; > flag3:=1; > print("res3",x3); > fi; > if ((abs(res[4]/ref-1) > err) and (flag4=0)) then > x4:=x; > flag4:=1; > print("res4",x4); > fi; > od: "res1", 0.10000000000000010000000000000000000000000000000000 "res2", 0.10000000000000010000000000000000000000000000000000 "res3", 0.30000000000000010000000000000000000000000000000000 Warning, computation interrupted > r:=lW(t)[4]: > with(codegen,optimize,cost): > ropt:=optimize(r); > cost(ropt); 2 t1 ropt := t1 = ln(t), t2 = ln(w0), t4 = 1 + w0, t6 = ----, 3 / w0 2 t2\ t9 = t4 |1 + ---- + t6 - ----|, \ 3 3 / / (t1 - w0 - t2) (2 t9 - t1 + w0 + t2)\ t19 = w0 |1 + ------------------------------------|, \ 2 t4 (t9 - t1 + w0 + t2) / t19 2 t20 t20 = ln(t19), t24 = 1 + --- + t6 - -----, 3 3 / (t1 - t19 - t20) t24 \ t35 = t19 |1 + --------------------------------| | t1 t19 t20| | (1 + t19) t24 - ---- + --- + ---| \ 2 2 2 / 3 functions + 9 assignments + 23 additions + 16 multiplications + 3 divisions > LambertW(-exp(-1)); -1 > openturns-1.9/validation/src/LogBeta.mw000066400000000000000000002165411307543307100202370ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZILUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjNTBGJ0Y5RjVGT0Znbi1GNjYvUSRmb3JGJy8lJWJvbGRHRjEvRjNRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRlxwRjtGPkZARkJGREZGRkhGam5GW29GZ24tRiw2JVEiYUYnRi9GMkZnbi1GNjYvUSVmcm9tRidGaW9GW3BGXXBGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GY282JFEiM0YnRjlGZ24tRjY2L1EjdG9GJ0Zpb0ZbcEZdcEY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUZjbzYkUSMxNEYnRjlGZ24tRjY2L1EjZG9GJ0Zpb0ZbcEZdcEY7Rj5GQEZCRkRGRkZIRmpuRltvRk9GZ24tRiw2JVEmdmFsdWVGJ0YvRjJGX28tRiw2JVEmZXZhbGZGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2JC1GLDYlUSRsb2dGJy9GMEY9RjktRmhxNiQtRiM2JC1GLDYlUSVCZXRhRidGX3JGOS1GaHE2JC1GIzYmRl9wLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRidGZ24tRmNvNiRRJzUwMDAwMEYnRjlGOUY5RjlGNUZPLUYsNiVRJnByaW50RidGL0YyLUZocTYkLUYjNiMtRmhxNiYtRiM2JUZfcEZbc0ZhcUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRjktRjY2LVEiO0YnRjlGO0Zec0ZARkJGREZGRkhGam5GTUZPRmduLUY2Ni9RI29kRidGaW9GW3BGXXBGO0Y+RkBGQkZERkZGSEZqbkZbb0Y1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiQkIVNpTXhebz1yKFtxcClwXFtsKTRUSWteKltSblEhI1s= NyQiIiUkIVNXLW1nLzZvUnN4KnBxKipcUkZnN09TZ3EocF0hI1s= NyQiIiYkIVNjWUJnLHomWy0nSHA1Iyo9Wj8nKXA4bTAkeUxDJyEjWw== NyQiIickIVNcSkYkKjMqPT4hZiVvTEZvIypRUEZSYEAmPW4lUighI1s= NyQiIigkIVNEYk0oeTx5JCopejw8LlFkd1Y8P1EnSFdMeF8pISNb NyQiIikkIVM/PyUqKXBxWmtSRzpwWTszIVsiPSMqKXlsLFFYJyohI1s= NyQiIiokIVNZRCVmJCozKHliP1phVzhrKHpCciZbJFxSblwyIiEjWg== NyQiIzUkIVNpMFU2JXlRVyVIPWxwNlFjdEI9UiRIJyo9VT0iISNa NyQiIzYkIVNWR1cxbzo0KmUtUVU0diRIXjRAZ3hYcFQjSCIhI1o= NyQiIzckIVNRSls2dSMzYklFbCJHMFRHSnJnJz5vJT1tKlIiISNa NyQiIzgkIVMyNXI8LlVdJlFHZWA8Ij5fUy9XSDRhbS4xOiEjWg== NyQiIzkkIVM/KCopb1ZJR3VYLFF1cigzQ0stIyoqKUdhNWg2OyEjWg== Qyc+SSJhRzYiLkYkISIiPkkmRGVsdGFHRiUtSSIrRyUqcHJvdGVjdGVkRzYkLUkkbG9nRzYkRixJKF9zeXNsaWJHRiU2Iy1JJkdBTU1BR0YwNiNGJCwoKiYsJkYkIiIiI0YnIiIjRjlGOS1GL0Y1RjlGJ0YkRjktRi82Iy1JJXNxcnRHRjA2IywkSSNQaUdGLEY7RidGOS1JJ3Nlcmllc0dGLDYlRikvRiRJKWluZmluaXR5R0YsIiM/ LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCotSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLUkmR0FNTUFHRiU2I0kiYUdGKCIiIiomLCZGLUYuIyEiIiIiI0YuRi4tRiRGLEYuRjJGLUYuLUYkNiMqJkYzI0YuRjNJI1BpR0YmRjhGMg== LDYqJEkiYUc2IiEiIiMiIiIiIzcqJEYkISIkI0YmIiRnJCokRiQhIiYjRigiJWc3KiRGJCEiKCNGJiIlIW8iKiRGJCEiKiNGKCIlKT0iKiRGJCEjNiMhJCJwIidnLk8qJEYkISM4I0YoIiRjIiokRiQhIzojISU8TyInK0M3KiRGJCEjPCMiJm5RJSInKT1XIy1JIk9HJSpwcm90ZWN0ZWRHNiMqJEYkISM+Rig= QyQ/KEkiYUc2IiInKytdIiIiIic5K11JJXRydWVHJSpwcm90ZWN0ZWRHLUkmZXZhbGZHRio2IzckRiRJJkRlbHRhR0YlRic= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQkIicrK10iIiEkIk1CaWpVVClwNyUpcFdXV1dXV21tbW1tbSIhI10= NyQkIicsK10iIiEkIk1CaWojMypwNy9sJCp6eGR3eChSTExqbW0iISNd NyQkIictK10iIiEkIk1CaWojb1JedywuXVtXU1ZXRSsrZ21tIiEjXQ== NyQkIicuK10iIiEkIk1CaWpLJUg6RGZvY2xXKTNXa3NtbWxtOyEjXQ== NyQkIicvK10iIiEkIk1CaWojKUd1U2Y2JD5YeUhweFJNTGBtbSIhI10= NyQkIicwK10iIiEkIk1CaWpVZUEwSG55KDRZJXlVazsrK2xtOyEjXQ== NyQkIicxK10iIiEkIk1CaWojRyRvQl8oRzcpeUNkVGshcG1ZbW0iISNd NyQkIicyK10iIiEkIk1CaWpBXGAlKXp1Q2FUUUB0KGZPTFZtbSIhI10= NyQkIiczK10iIiEkIk1CaWpfJVIsSEtIR0xiR3dWRS8rU21tIiEjXQ== NyQkIic0K10iIiEkIk1CaWojNCd5aDdpJnAqPW10TWs/bm1qbTshI10= NyQkIic1K10iIiEkIk1CaWppVlhYZ1xnIVIvZVd3KipSTExtbSIhI10= NyQkIic2K10iIiEkIk1CaWpVOk09PW11QE1HckVrITMrSW1tIiEjXQ== NyQkIic3K10iIiEkIk1CaWpzJWVoeiRlTWknKjRVQGtpbm1pbTshI10= NyQkIic4K10iIiEkIk1CaWojcCM+VEstT1tRRF1bKGZXTEJtbSIhI10= NyQkIic5K10iIiEkIk1CaWojelI2WnRSKHpudSh5UzE4Kz9tbSIhI10= QzA+SSJhRzYiLkYkISIiPkkiYkdGJS5GKUYnPkkmcmF0aW9HRiUqJkYkIiIiRilGJ0YnPkkxY29ycmVjdGlvblNlY29uZEdGJS1JJXN1YnNHJSpwcm90ZWN0ZWRHNiQvRiRGKUkmRGVsdGFHRiVGJz5JLmNvcnJlY3Rpb25TdW1HRiUtRjI2JC9GJCwmRiRGLkYpRi5GNkYnPkkrbG9nMXBSYXRpb0dGJS1JJGxvZ0c2JEYzSShfc3lzbGliR0YlNiMsJkYuRi5GLEYnRic+SSRyZXNHRiUsMEYwRi5GOEYnRjZGLi1GQDYjRikjRiciIiMtRkA2IywkSSNQaUdGM0ZLI0YuRksqJiwoRiRGLkYpRi5GSkYuRi4tRkA2IywmRi5GLiomRilGLkY8RidGJ0YuRi4qJkYpRi4tRkA2IyomRilGLkYkRidGLkYuRic= print(); # input placeholder QyQtSSlhc3N1bWluZ0dJKF9zeXNsaWJHNiI2JDcjLUkpc2ltcGxpZnlHNiQlKnByb3RlY3RlZEdGJTYjLUknZXhwYW5kR0YsNiMsJkkkcmVzR0YmIiIiLUkoY29udmVydEdGLDYkLUkkbG9nR0YrNiMtSSVCZXRhR0YrNiRJImFHRiZJImJHRiZJJkdBTU1BR0YrISIiNyUtSSI+R0YsNiRGPSIiIS1GQzYkRj5GRTJGPUY+RjM= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiIh QyQtSShjb252ZXJ0RyUqcHJvdGVjdGVkRzYkLUkkbG9nRzYkRiVJKF9zeXNsaWJHNiI2Iy1JJUJldGFHRik2JEkiYUdGK0kiYkdGK0kmR0FNTUFHRikiIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IyooLUkmR0FNTUFHRiQ2I0kiYUdGJyIiIi1GKzYjSSJiR0YnRi4tRis2IywmRi1GLkYxRi4hIiI= Qyo+SSNyc0c2Ii1JKWFzc3VtaW5nR0koX3N5c2xpYkdGJTYkNyMtSShjb2xsZWN0RzYkJSpwcm90ZWN0ZWRHRig2JC1JKGNvbnZlcnRHRi42JC1JKXNpbXBsaWZ5R0YtNiMtSSdzZXJpZXNHRi42JSomLCYtSSRsb2dHRi02Iy1JJkdBTU1BR0YtNiMsJkkiYUdGJSIiIkkiYkdGJUZDISIiLUY8NiMtRj82I0ZERkNGQ0ZCRkUvRkRJKWluZmluaXR5R0YuIiM2SShwb2x5bm9tR0YuRkQ3JTJGQkZELUkiPkdGLjYkRkIiIiEtRlE2JEZERlNGQy1JJXdpdGhHRi02I0kvQ29kZUdlbmVyYXRpb25HRi1GRT5JJWV4cHJHRiUtRjE2JS1JJG1hcEdGLjYkSSdmYWN0b3JHRi0tSSVzdWJzR0YuNiQvRkQqJEZERkUsJkYkRkMtRjxGSUZDSSdob3JuZXJHRiU3JEZERkJGQy1JIkNHRiU2JEZlbkkpb3B0aW1pemVHRiVGQw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LDQtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJiR0YoISIiKiYsJiMiIiIiIiNGL0kiYUdGKCNGK0YwRi9GKkYrRi8qJiwoRjEjRisiIiUqJEYxRjAjRi8iIicjRi8iIzdGL0YvRiohIiNGLyomLChGN0Y4KiRGMSIiJCNGK0Y7RjFGQUYvRiohIiRGLyomLCojRisiJD8iRi9GN0Y6Rj8jRisiIikqJEYxRjYjRi8iIz9GL0YqISIlRi8qJiwqKiRGMSIiJiNGKyIjSUY/RkFGMSNGLyIjZ0ZJI0YvIiM1Ri9GKiEiJkYvKiYsLCNGLyIkXyNGL0Y3I0YrIiNPRklGOkZPRkEqJEYxRjkjRi8iI1VGL0YqISInRi8qJiwsKiRGMSIiKCNGKyIjY0ZPRkFGaG4jRi8iIzlGPyNGLyIjQ0YxI0YrIiMlKUYvRiohIihGLyomLC4jRisiJFMjRi9GNyNGL0ZnbkZJI0Zob0ZGRmhuRjpGXm8jRisiIzsqJEYxRkgjRi8iI3NGL0YqISIpRi8= KiYsKCMiIiIiIiNGJUkiYUc2IiMhIiJGJiomLCYqJiwmRidGJkYqRiVGJSwmRipGJUYnRiVGJSNGJSIjNyomLCYqJkYnRiVGL0YmI0YqRjEqJiwmKihGLkYlRi9GJSwmRipGJSomLCYhIiRGJUYnIiIkRiVGJ0YlRiVGJSNGJSIkPyIqJiwmKihGJ0YlLCZGKkYlKiYsJkYnRiYhIiNGJUYlRidGJUYlRiVGL0YmI0YqIiNnKiYsJiooRi5GJUYvRiUsJkYlRiUqJiwmRj1GJSomLCYhIidGJUYnRj1GJUYnRiZGJUYlRidGJUYlRiUjRiUiJF8jKiYsJiooRidGJSwmRiZGJSomLCYiIiVGJSomLCZGKkYlKiZGUEYlRidGJUYlRiVGJ0YlRiVGJUYnRiVGJUYlRi9GJiNGKiIkbyIqKkYuRiVGL0YlLCZGPEYlKiYsJiEiKkYlKiYsJkYqRiUqJiwmIiM6RiUqJiwmIiImRiUqJiwmISM6RiVGJ0Zmb0YlRidGJUYlRiVGJ0YlRiVGJUYnRiVGJUYlRidGJUYlRiVGJ0YlRiVGJUkiYkdGKEYlI0YlIiQ/KEYlRmpvRiVGJUYlRmpvRiVGJUYlRmpvRiVGJUYlRmpvRiVGJUYlRmpvRiVGJUYlRmpvRiVGJUYlRmpvRiU= t4 = -1 + a; t5 = t4 * (2 * a - 1); t7 = t4 * t4; t20 = -6 + 3 * a; t21 = a * a; t65 = (double) b * (0.1e1 / 0.2e1 - (double) a / 0.2e1 + (double) b * ((double) t5 / 0.12e2 + (double) b * (-(double) (t7 * a) / 0.12e2 + (double) b * ((double) ((-1 + 3 * a * t4) * t5) / 0.120e3 + (double) b * (-(double) (t7 * (-1 + 2 * a * t4) * a) / 0.60e2 + (double) b * ((double) ((1 + a * (3 + t21 * t20)) * t5) / 0.252e3 + (double) b * (-(double) (t7 * (2 + a * (4 + a * (-1 + a * t20))) * a) / 0.168e3 + (double) ((-3 + (-9 + (-1 + (15 + (5 + (-15 + 5 * a) * a) * a) * a) * a) * a) * b * t5) / 0.720e3))))))); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkmbWZyYWNHRiQ2KC1GLDYoLUYjNistSSNtbkdGJDYkUSIyRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkjbW9HRiQ2LVEnJnNkb3Q7RidGNi8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPy8lKXN0cmV0Y2h5R0Y/LyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZOLUkjbWlHRiQ2JVEiYUYnLyUnaXRhbGljR1EldHJ1ZUYnL0Y3USdpdGFsaWNGJ0Y5RlFGOS1GMzYkUSI1RidGNkY5LUklbXN1cEdGJDYlRlEtRiM2Iy1GMzYkUSI2RidGNi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiM2JS1GMzYkUSQ3MjBGJ0Y2RjktRmhuNiUtRlI2JVEiYkYnRlVGWC1GIzYjLUYzNiRRIjhGJ0Y2Rl9vLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZmcC8lKWJldmVsbGVkR0Y/LUYjNiMtRiw2KEZRLUYjNiVGMkY5RmlvRmFwRmRwRmdwRmlwRmFwRmRwRmdwRmlw LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCMiIiIiI09GJSlJImFHNiIiIihGJSlJImJHRilGKiEiIkYl LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEmc29sdmVGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1JJm1mcmFjR0YkNigtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GIzYjLUkjbW5HRiQ2JFEiN0YnL0YzUSdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiM2Iy1GRjYkUSQzNi5GJ0ZJLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZYLyUpYmV2ZWxsZWRHUSZmYWxzZUYnLUkjbW9HRiQ2LVEiPUYnRkkvJSZmZW5jZUdGZ24vJSpzZXBhcmF0b3JHRmduLyUpc3RyZXRjaHlHRmduLyUqc3ltbWV0cmljR0Znbi8lKGxhcmdlb3BHRmduLyUubW92YWJsZWxpbWl0c0dGZ24vJSdhY2NlbnRHRmduLyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGXHAtRj42JS1GRjYkUSIyRidGSS1GIzYkLUZpbjYtUSomdW1pbnVzMDtGJ0ZJRlxvRl5vRmBvRmJvRmRvRmZvRmhvL0ZbcFEsMC4yMjIyMjIyZW1GJy9GXnBGanAtRkY2JFEjNTJGJ0ZJRktGSS1GaW42LVEiO0YnRklGXG8vRl9vRjFGYG9GYm9GZG9GZm9GaG8vRltwUSYwLjBlbUYnRl1w LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NikkIit6VzkmbyohIzcsJiQiKzcpKWVRZ0YlIiIiKiYkIittMzpzdkYlRileI0YpRilGKSwmJCIrJlJaXjojRiUhIiIqJiQiKydvPEJXKkYlRilGLUYpRiksJiQiK2RPLEUoKUYlRjEqJiQiKyxuQS1VRiVGKUYtRilGKSwmRjZGMUY4RjEsJkYvRjFGMkYxLCZGJ0YpRipGMQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRJDEuMEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1GIzYjLUYvNiRRLzAuMDA5Njg1MTQ0NDc5RidGMi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGPy8lKWJldmVsbGVkR1EmZmFsc2VGJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrPyI0RC4iISIo LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/LogNormalCharacteristicFunction.mw000066400000000000000000003666211307543307100252000ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZfdC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJ0ZPLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYtLUYsNiVRInVGJ0YvRjItRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLRlcvRk5RLDAuMzMzMzMzM2VtRictRiw2JVEmc2lnbWFGJy9GMEY9RjlGYm9GZW9GaW8tRiw2JVEoZXBzaWxvbkYnRmNwRjlGYm9GZW9GOS1GNjYtUSI7RidGOUY7RlxwRkBGQkZERkZGSEZdcEZNLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGXXAvRk5GV0ZPLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZmbzYkUSMyNUYnRjlGNUZPLUYsNiVRJ3ZhbG51bUYnRi9GMkZhcUZgcC1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GZm82JFE3MC4xNzMzNzY0ODYyNDgzMjY4Mjc2NEYnRjlGaW9GX29GanEtRmZvNiRRMzIuMDg4Mzc1MjgwMDQzMTg0N0YnRjlGNUZPLUY2Ni1RIiNGJ0Y5RjtGPkZARkJGREZGRkhGXXBGXXEtRiw2JVFOdmFsbnVtJkFzc2lnbjtzaWdtYT0xLjAsdT0yLjA4ODM3NTI4MDA0MzE4NDc6RidGL0YyRk9GanAtRiw2JVEiZ0YnRi9GMkZhcS1GLDYlUSRleHBGJ0ZjcEY5LUZbbzYkLUYjNictRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmdzRl9vLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZdcEZdcUZccy1GW282JC1GIzYlLUklbXN1cEdGJDYlLUYsNiVRKCZzaWdtYTtGJ0ZjcEY5LUYjNiMtRmZvNiRRIjJGJ0Y5LyUxc3VwZXJzY3JpcHRzaGlmdEdGaG9GaXMtRiw2JVEidEYnRi9GMkY5RjlGaXNGXHMtRltvNiQtRiM2JEZjcy1JJm1mcmFjR0YkNigtRiM2Jy1GLDYlUSJJRidGL0YyRmlzLUYsNiVRI1BpRidGY3BGOUZpc0ZddUZmdC8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZHYvJSliZXZlbGxlZEdGPUY5RmlzRlxzLUZbbzYkLUYjNiRGY3MtRmV1NigtRiM2JUZgdEZpcy1GYXQ2JUZddUZmdEZbdUZmdEZfdkZidkZldkZndkY5RjVGT0ZPLUYsNiVRI05ORidGL0YyRmFxLUZmbzYkUSI0RidGOUY1RmpwRk8tRlA2JkZSRlVGWC9GZW5RJWF1dG9GJ0ZqcC1GLDYlUSVnRGV2RidGL0YyRmFxLUYsNiVRKGNvbnZlcnRGJ0YvRjItRltvNiQtRiM2Ji1GLDYlUSdzZXJpZXNGJ0YvRjItRltvNiQtRiM2J0ZpckZpb0Zfb0Zpb0Zjd0Y5RmlvLUYsNiVRKHBvbHlub21GJ0YvRjJGOUZncEZPRmpwLUYsNiVRIkhGJ0YvRjJGYXEtRmV1NigtRiM2JkZgcEZpc0Zccy1GW282JC1GIzYjLUZldTYoLUZhdDYlLUZbbzYkLUYjNiMtRmV1NihGXHYtRiM2JUZodEZpc0ZgcEZfdkZidkZldkZndkY5RmZ0Rlt1RmZ0Rl92RmJ2RmV2Rmd2RjktRiM2JC1GLDYlUSVzcXJ0RidGY3BGOS1GW282JC1GIzYmRmh0RmlzRmpwRlx2RjlGX3ZGYnZGZXZGZ3ZGNUZPRk8tRiw2JVEmcHJpbnRGJ0YvRjItRltvNiQtRiM2JS1GLDYjUSFGJy1JI21zR0YkNiNGW3NGaFtsRjlGZ3BGanBGTy1GLDYlUSVwbG90RidGL0YyLUZbbzYkLUYjNiotRltvNiYtRiM2Jy1GLDYlUSNSZUYnRmNwRjktRltvNiQtRiM2JC1GLDYlUSVzdWJzRidGL0YyLUZbbzYkLUYjNiVGZ3FGaW9GaXJGOUY5RmlvLUYsNiVRI0ltRidGY3BGOUZcXWxGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Zpb0ZddUZqcUZjc0ZkcS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZmc0ZdcUZkcUY5RmdwRmpwRk8tRiw2JVEkcHNpRidGY3BGOUZhcS1GLDYlUSRJbnRGJ0YvRjItRltvNiQtRiM2KkZpckZpb0ZddUZqcUZjcy1GLDYlUSlpbmZpbml0eUYnRi9GMkZgXmxGXV9sRjlGNUZPLUYsNiVRJHBoaUYnRmNwRjlGYXFGYXlGaXNGY15sRmdwRk9GT0ZhW2wtRltvNiQtRiM2JUZoW2wtRlxcbDYjUSpILHBzaSxwaGlGJ0ZoW2xGOUZncEZPLUYsNiVRI3N0RidGL0YyRmFxLUYsNiVRJXRpbWVGJ0YvRjItRltvNiQtRiM2I0ZoW2xGOUY1Rk8tRiw2JVEmZXZhbGZGJ0YvRjItRltvNiQtRiM2JEZgXWwtRltvNiQtRiM2JUZncUZpby1GW282Ji1GIzYjRmBfbEY5RmpdbEZdXmxGOUY5RmdwRmpwRk9GXWBsRmBgbEZqcEZjc0ZqX2xGZ3BGT0Zpd0ZqX2xGYXFGXWBsRmBgbEY1Rk9GZGBsLUZbbzYkLUYjNiRGYF1sLUZbbzYkLUYjNiVGZ3FGaW8tRltvNiYtRiM2JC1GLDYlUSRpbnRGJ0YvRjItRltvNiQtRiM2LS1GZXU2KC1GIzYkRlxzLUZbbzYkLUYjNihGaXVGaXNGX29GaXNGXHMtRltvNiQtRiM2Iy1GLDYlUSJ4RidGL0YyRjlGOS1GIzYkRmp6LUZbbzYkLUYjNiVGaHRGaXNGXHZGOUZfdkZidkZldkZndkZpc0Zccy1GW282JC1GIzYkRmNzLUZldTYoLUZhdDYlRmJjbEZmdEZbdS1GIzYlRmh0RmlzRmB0Rl92RmJ2RmV2Rmd2RjlGaW9GYmNsRmpxRmNzRl1fbEZgXmxGXV9sRjlGOUZqXWxGXV5sRjlGOUZncEZqcEZPRl1gbEZgYGxGanBGY3NGal9sRmdwRk9Gal9sRmFxRl1gbEZgYGxGNUZPRmRgbC1GW282JC1GIzYkRmBdbC1GW282JC1GIzYlRmdxRmlvLUZbbzYmLUYjNiRGX2JsLUZbbzYkLUYjNiwtRmV1NigtRiM2JEZccy1GW282JC1GIzYnRml1RmlzRl9vRmlzRmJjbEY5LUYjNiZGYmNsRmlzRmp6RmdjbEZfdkZidkZldkZndkZpc0Zccy1GW282JC1GIzYkRmNzLUZldTYoLUYjNiQtRiw2JVEkbG9nRidGY3BGOS1GYXQ2JUZeY2xGZnRGW3UtRiM2JUZodEZpcy1GYXQ2JS1GLDYlUSgmc2lnbWE7RidGY3BGOUZmdEZbdUZfdkZidkZldkZndkY5RmlvRmJjbEZqcUZlb0ZgXmxGXV9sRjlGOUZqXWxGXV5sRjlGOUZncEZqcEZPRl1gbEZgYGxGanBGY3NGal9sRmdwRk9GanA= LCoqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiheIyMhIiIiIiMiIiJJI1BpR0YnRjBJInRHRilGMEYwLUYlNiMsJComSSdzaWdtYXxpckdGKUYvRjJGL0YtRjBGMCoqLUYlNiMqJkY3Ri9GMkYwRjBGJEYwRjNGMEkjdXxpckdGKUYwRi4qKkY5Ri9GJEYwRjNGMEY8Ri8jRjBGLyoqRjkiIiRGJEYwRjNGMEY8RkAjRi4iIic= USJnNiI= LSUlUExPVEc2Jy0lJ0NVUlZFU0c2JDdfeTckJCEkXSMhIiIkIiIhISIiNyQkITJtbW0iSFUsIlIjISM6JCIxPTFjRGJKUG0hIz83JCQhMk5MM0ZIJz0nSCMhIzokITE6XkNaKEc3ZyghI0A3JCQhMm1tOy9PVSYqPSMhIzokITFKT2dgPVUlWyMhIz43JCQhMm5tO0hfIj4jMyMhIzokIjJPKyUqKlJRInBMIiEjPzckJCEvRDE5N3hHPyEjNyQiMUVbR1hNKDMmZiEjPjckJCEyTUwzXyE0TnY+ISM6JCIxak4sdChIVEgpISM+NyQkIS5EMVdCZSM+ISM2JCIyeDMkZm0nZldrJSEjPzckJCEybm1UZyhmSHc9ISM6JCExLDYkUjpwUGUmISM+NyQkITFMJDNfOjhdIz0hIzkkITJEQStDUzg6Jj0hIz43JCQhLnZWTElQeCIhIzYkITEkSDZ1P0R6UCMhIz03JCQhMk1MM0Y5ci93IiEjOiQhMTpqeS5zR2FBISM9NyQkITJvbVQ1Jj5AWjwhIzokITFYJFtYcGl5Kj4hIz03JCQhLnYkZkYmUnQiISM2JCExKm8+cj00UWciISM9NyQkITJMTDN4YyRwPzwhIzokITIuJm83O00jUjIiISM+NyQkIS52Vj12VHAiISM2JCIyJWV5QmN0YSZbJCEjPzckJCEybW1UNSFvbG47ISM6JCIxb095RmRvK0AhIz03JCQhLERZQjdrIiEiKiQiMjB6TXNXLyYpKVEhIz43JCQhMk1MZVI3IXo5OyEjOiQiMVVmPiFRJilcTSYhIz03JCQhL3ZvYU1kLDshIzckIjFsRiJRTmpLI2UhIz03JCQhMm5tO2F5YyQpZSIhIzokIjE8QyVcO0E4MichIz03JCQhMkskZTk7LDl2OiEjOiQiMSx2QCNwPiZbZyEjPTckJCEudm9XQj5jIiEjNiQiMV54O0ZVSEJkISM9NyQkITJuO2E4ZFZ2XSIhIzokIjI9aCJbLHR3SDUhIz43JCQhMkxMTGVwakpYIiEjOiQhMVBpLWwlPV9HKCEjPTckJCEybTthUXk5I0g5ISM6JCEyX0hBMWZnInA1ISM9NyQkIS52PShlRTA5ISM2JCEyTjFZI1E9RS44ISM9NyQkITJuVCYpZVQiSCRSIiEjOiQhMkxDTU1qQTRPIiEjPTckJCEyTSRlKilmcEoiUSIhIzokITJCIVsvInB1LVAiISM9NyQkITBEMVJdVSRwOCEjOCQhMmgoSCIpSC1YRTghIz03JCQhMm5tO3ovb3ROIiEjOiQhMiQ+X0xDLUtFNyEjPTckJCEyTUwzRldZTUkiISM6JCExcmZMJkhtay0iISM9NyQkISx2JFtfXDchIiokIjEyPilSNyEzQzshIzw3JCQhLURKTFhBNyEjNSQiMmwxMnIpSEtRQiEjPTckJCErRD1RJj4iISIpJCIyZS9sMDdYKTRGISM9NyQkIS92VltSaCk9IiEjNyQiMi55J3peejpKRiEjPTckJCEudj0yWT09IiEjNiQiMWlRU1g+Qz9GISM8NyQkIS9ESiY+eV08IiEjNyQiMSd6VV4qeiZlbiMhIzw3JCQhLXY9LkpvNiEjNSQiMTIiKjQxKVFyZiMhIzw3JCQhLkRjY3VaOiIhIzYkIjIlW1JSXitDTkIhIz03JCQhLEQiKVE3OSIhIiokIjIxT0Vba1lmJD4hIz03JCQhKS86OjYhIickIjF1USZwTFRyOykhIz03JCQhLHYpPjEqMyIhIiokITF2UyEqPlVOI1EnISM9NyQkISt2TihIMSIhIikkITBfbllXJzMwQSEjOzckJCEsRDsmKW8uIiEiKiQhMSQ+NWQmM3MuTyEjPDckJCEyblROWVElPjg1ISM6JCExJnlQTVtyVVslISM8NyQkITFNJDN4MU9dKikqISM6JCExLnY0VDU7LFshIzw3JCQhL0QxKkdHImUnKiEjOCQhMU4hPkpSJj1NVyEjPDckJCExbm1UNTBBQCUqISM6JCEyOk0weG8iKWZOJCEjPTckJCEwRDEqeXRPIUcqISM5JCExMzlfPmxRMUMhIzw3JCQhMU1lUlpVXlIiKiEjOiQhMkgieS5pV1duNyEjPTckJCExPGEpZTZoJykqKikhIzokIjImKlt2Jm9IZGw3ISM/NyQkIS52Vil6IXkmKSkhIzckIjJsTyR5QyhSXFAiISM9NyQkITElZWtHJlsmcHIpISM6JCIxRDwnejhXQXYjISM8NyQkITFuVE5APDV3JikhIzokIjE5KWYtdVBDMiUhIzw3JCQhMHZWKSplW19WKSEjOSQiMk5zT1IpKT1ARSYhIz03JCQhMU1MTGVhUiVIKSEjOiQiMSZbSzZ5LjFEJyEjPDckJCExTCQzLVF1XTwpISM6JCIxYkImcC5VRylvISM8NyQkITFNTDMtTHZiISkhIzokIjFrQDlnL20iSCghIzw3JCQhMUwzLWpGNCcqeiEjOiQiMXQhKVxhRyhRUyghIzw3JCQhMU0kZVJBS2skeiEjOiQiMT40WyRcVDZYKCEjPDckJCExTGUqW29ybih5ISM6JCIxaHRJKjNhOlYoISM8NyQkITJPTExlOTZyInkhIzskIjEyd11YV3pWdCEjPDckJCEyTkwkZSopKm8leXYhIzskIjFHeXZGTidvSSchIzw3JCQhMUxMTExvIylSdCEjOiQiMV47OVNHT1RVISM8NyQkITE8YVFgIUc1PyghIzokIjJ4PypmIXBSKVxFISM9NyQkIS92VnQjSEExKCEjOCQiMXR1USMpKVsoPSYpISM9NyQkITEkZSpbJFxJTSNwISM6JCEyIyl6a3EtVjIyIiEjPTckJCExbjthODxqJXknISM6JCEyalRPN1MnNEVJISM9NyQkITB2JGZMSCRlaychIzkkITE6ISopSF5zbCJcISM8NyQkITFMZWtgVC4ybCEjOiQhMU91YXRbelZtISM8NyQkITJsInpwdGBCb2ohIzskITEiUWlyeCp6OCIpISM8NyQkIS12JGZPJUhpISM2JCExOTs8VT89VSMqISM8NyQkITE7eiVcOndsNSchIzokITFiYVJrdU8qKikqISM8NyQkITFMZTk7ZHIkKWYhIzokITIsOD08IVFzPjUhIzw3JCQhMjp6V25cJkdBZiEjOyQhMmt6NilcP08/NSEjPDckJCEwdlZ0RmIzJ2UhIzkkITIoKjNZUTJnNywiISM8NyQkITE0RiV6MEQlKnomISM6JCExJj0vcEsoZUIqKiEjPDckJCExbjthUVsqenQmISM6JCExJilwOGFAJ3BqKiEjPDckJCExJGVSKCpSTV5oJiEjOiQhMS5IMXVDS3goKSEjPDckJCEvdiQ0J1JGI1wmISM4JCExKUg5Kj0yTWN2ISM8NyQkITJrVE5AXzglcGAhIzskITFPRCgqR2MlPSwnISM8NyQkITFNTEwkM2BsQyYhIzokITEwTj0yX3AmPiUhIzw3JCQhMTxhajRkdjZeISM6JCEyZEphWyp5LW4+ISM9NyQkIS92JGZMZXAoXCEjOCQiMXR0bDpHakhUISM9NyQkITEkZVJBJzQ7VVshIzokIjInZmNkNzEyT0chIz03JCQhMW47YSllanRxJSEjOiQiMVRDeiw5RCo9JiEjPDckJCEwdlZbQG1EZCUhIzkkIjE5VnVYZTNndCEjPDckJCExTGU5VClveFYlISM6JCIxJXpielVMQkMqISM8NyQkITE7elduOShISSUhIzokIjIxJ1smUVNJVDIiISM8NyQkIS12JDR1Im9UISM2JCIyI2Z2SVdqKHk8IiEjPDckJCEwdm9hZyUqUjUlISM5JCIybjspKW93Jkg0NyEjPDckJCEvdj08XiIpUlMhIzgkIjJMLz9jZXYlRzchIzw3JCQhMEQxKkdjanZSISM5JCIyNElfIyk9M15CIiEjPDckJCEuRDE5YzkiUiEjNyQiMnJnUEtzPiFINyEjPDckJCEvRDFrcjQkeSQhIzgkIjItUT4nRyZwJ3k2ISM8NyQkISx2PVFabCQhIzUkIjIlbyRmNVAmeXk1ISM8NyQkIS92JDRAempfJCEjOCQiMWpBaShRJioqRyQqISM8NyQkIS52VkI/ISlSJCEjNyQiMV5na1BWKmVZKCEjPDckJCEvRCJ5RGgncEshIzgkIjFsaCQqZjxjc18hIzw3JCQhLUQiRy04OSQhIzYkIjElKlE0V3A8UUchIzw3JCQhMiVlKik0PXhMdUkhIzskIjEobylvViMpcDA6ISM8NyQkITJtInolXDp0dCskISM7JCIxUnVgTSU0LV0iISM9NyQkITF2b3oiZjMvJUghIzokITIjNChIcWBhTEAiISM9NyQkITJNJGVrR1NXdEchIzskITFzVVFfKXAob0QhIzw3JCQhMjp6JVxsJXprIUchIzskITIleV1DRXFmK1IhIz03JCQhMHZWQiFcXlJGISM5JCEydW8neT9yVSQ+JiEjPTckJCEyJDNGPlIuYnNFISM7JCExS0c3LnBES2shIzw3JCQhMmxtVGd4JmUwRSEjOyQhMWhDJHk5ckVnKCEjPDckJCEyTGVSKFxtbHJDISM7JCExRyQ+ait4WG8qISM8NyQkIS92VkJ2c1BCISM4JCExKW8nKTRzLFU4IiEjOzckJCEybFROclIpei5BISM7JCEyeCdIOWgvdVw3ISM8NyQkITJMTEwzRnApcD8hIzskITEsZjgjUVwnNDghIzs3JCQhMkwkZWt5PCpRIz0hIzskITJNV2onWy9GbjchIzw3JCQhMkxMZWtHOXpkIiEjOyQhMSgqM1FiLTRPNSEjOzckJCEyTGVrLmFEXFgiISM7JCExZStMM0JaKmYpISM8NyQkITJMJDNGJXpPPkwiISM7JCEwdT0pSGpxQGwhIzs3JCQhMkwzeCJbIVsqMzchIzskITE2eEA4RTY0VSEjPDckJCEyTUwkMy0kZmYzIiEjOyQhMkMjUSoqXHEyXzwhIz03JCQhMjwvXkpKSCc+NSEjOyQhMTgpZWtlaForJSEjPTckJCEvdj1VSypIYCohIzkkIjFLbkNwRTIsJiohIz03JCQhMSVla0dOJHBwKSkhIzskIjJYJlJ3diMpWyVHIyEjPTckJCExbjthak1SMSMpISM7JCIxY2k2TT50KGUkISM8NyQkITFMZSpbbyR6em8hIzskIjEoUT5FNWlMLychIzw3JCQhLUQxUj5gYiEjNyQiMVZgNC56KzQjKSEjPDckJCExblRnRlRmRVUhIzskIjFvVTRLZDQiKioqISM8NyQkITJOTGUqW1YqKioqRyEjPCQiMkEnRycpUShwOTgiISM8NyQkIS9ESnFYUnQ6ISM5JCIyKVtObXU8bzc3ISM8NyQkITJubW1tInolelkjISM9JCIyYXY7WjRmKVI3ISM8NyQkIjJMJDNGVyZwNjgiISM8JCIyQyMqMz52LDBAIiEjPDckJCIyTkwzLSlRODREISM8JCIyI3piQk0kKSlbNyIhIzw3JCQiMk0kZTk7Iyk0KClRISM8JCIxNGEhUiM9dyIpKSohIzw3JCQiMU1MM19EMWxfISM7JCIxMjdXLl9VeiEpISM8NyQkIjFMMy0pKW8tVm0hIzskIjIxbDUlRzJjUGYhIz03JCQiMU0kZVJBIio0LSkhIzskIjFkJXAnKSlSYW1OISM8NyQkIjFMZSopZmImKilSKiEjOyQiMkNGTy9WamIzIiEjPTckJCIyS0wkZSopPnB4NSEjOyQhMilvL00iKTRlJFEiISM9NyQkIjJtOy8sPld3PiIhIzskITFaJSlvQFQvSk0hIzw3JCQiLkQxUidmPDghIzckITIvcSp5RnZWMmAhIz03JCQiMk0kZTkiZlt2ViIhIzskITFiIUcxTnAlW3AhIzw3JCQiMm9tbTt6K3ZiIiEjOyQhMCg9IlIqZj4rJCkhIzs3JCQiL3Y9IypIWHg7ISM4JCEwKlJ5bDkkM0sqISM7NyQkIjJNTDNGPjB1eiIhIzskITE6ITRcOFA/KSoqISM8NyQkIjB2b0hIIlFkPSEjOSQhMj1cZGZuJ0c8NSEjPDckJCIybztIS1JkdCI+ISM7JCEyJ0hMW0BgJ3AtIiEjPDckJCIyTWUqWyRcTHQoPiEjOyQhMlBKJmUpeSdHRjUhIzw3JCQiLXYkZjR0LiMhIzYkITJFJipIS3EmUT01ISM8NyQkIjE8L15jNydvOyMhIzokITFXc05mcEwpbyohIzw3JCQiMk0kM0Y+SFQnSCMhIzskITEwWDs3JFInMykpISM8NyQkIjBESj9la2ZVIyEjOSQhMTJaKikqelJdZighIzw3JCQiMW47eldpXmJEISM6JCExJWVqTEY8MTYnISM8NyQkIjJNM192IXoxJm8jISM7JCEyJnonNCN5WyxHVyEjPTckJCIvREpxJj5ZIkchIzgkITIkb3dWU28oZWkjISM9NyQkIjE8SDJMNzxXSCEjOiQhMUpERCp5dTgmeSEjPTckJCIyTUxMZSpHc3RJISM7JCIyOGgjND0rbTk1ISM9NyQkIjJuOy8sV2l2PyQhIzskIjJqJUhJYT0iPXYjISM9NyQkIi52Vik+U1RMISM3JCIxPilIKzkwQkglISM8NyQkIjJNJGVrRzpDdk0hIzskIjImb0RQdiVIXWQmISM9NyQkIjJubTtIMiIzNE8hIzskIjEpKUhIJW9jTWInISM8NyQkIi92PTwxI0h1JCEjOCQiMSNIKSkpZjtAKD4oISM8NyQkIjJNTGU5O2duKFEhIzskIjFsOkQwRnojXCghIzw3JCQiMHYkZkwqek8lUiEjOSQiMFZCbG4oUjV2ISM7NyQkIjFuIkhkcSpmNVMhIzokIjEzYDdcRldWdSEjPDckJCIxJGVreVo+djIlISM6JCIxXiU0KG9oeiVIKCEjPDckJCIqRFJXOSUhIikkIjF1QEZeY0BvcSEjPDckJCIuRGMsNmpTJSEjNyQiMWolR2MuNiFIYiEjPDckJCItRCJ5Iz1vWSEjNiQiMm0qZm8pKlInZUMkISM9NyQkIi9EMWsnPSIqeiUhIzgkIjJFN3NRbCIpbyc+ISM9NyQkIi52b2FhKyRcISM3JCIxQ2BRUXA8YG4hIz03JCQiL3ZvSC8qNDEmISM4JCEyJmUrKDNjLT1zJiEjPjckJCIsREpFPj4mISM1JCEyeE1eSiZ5LUM8ISM9NyQkIi92JDRyK2BXJiEjOCQhMFQ8MkpLTF8kISM7NyQkIi52JDRebilwJiEjNyQhMW0pXCZlJls6ZSUhIzw3JCQiMXZWKSozKD0/dyYhIzokITFuRUQhPU13ciUhIzw3JCQiMHYkZjNCT0RlISM5JCEyMXRdcktIPSFbISM9NyQkIjFESj8zZnEpKWUhIzokITJFWkdvdV9bJFshIz03JCQiL0QieV1cPyZmISM4JCEyRW0rTGNWeiJbISM9NyQkIjBESnFxTyh5ZyEjOSQhMCVvT29qcVRZISM7NyQkIi1EMVJVMGkhIzYkITFEKVwyK0BBSCUhIzw3JCQiL0Rjd0h2J1snISM4JCEybjhrWFQuKy4kISM9NyQkIi52by8jM29uISM3JCEyeDR5NFBSVVEiISM9NyQkIi92PTw2VFxxISM4JCIyUGUpcGh1TiF5IyEjPjckJCIsdj1TMkwoISM1JCIwTDs9PTsqUTshIzs3JCQiMW07enBvXyRlKCEjOiQiMihcaCk0UjptVSMhIz03JCQiMUxMM19OSk95ISM6JCIyQjcjKilbLSJSdCMhIz03JCQiMERjRUE1JioqeSEjOSQiMkI1ciJvMFxPRiEjPTckJCIxbiJISypvcWl6ISM6JCIxMSg9KFJxODZGISM8NyQkIjElMy1RYy5mLSkhIzokIjE8NEYsMz9mRSEjPDckJCIudlZCKyIqMykhIzckIjBucUMkUUUjZSMhIzs3JCQiMUwzX3ZOXDojKSEjOiQiMi8wO0FENzJPIyEjPTckJCIxbm1tO3ApPU0pISM6JCIyJnloR0hldGk/ISM9NyQkIjFNTCRlUiVwIikpKSEjOiQiMnglPSN6cDo6cCQhIz43JCQiK3Y9XUAlKiEiKiQhMjwnM2EpUnNELCIhIz03JCQiMTtII29LKXlWJiohIzokITIib1YjKlFQQSg9IiEjPTckJCIxTWVreVoybScqISM6JCEyRTMyVSdlOC04ISM9NyQkIjB2by9CaCQpeSohIzkkITIpUmlaKnBLIWU4ISM9NyQkIjFtO0gjb1oxIioqISM6JCEyY0s1eWglKnlOIiEjPTckJCIwdiRmZT9fOjUhIzgkITJLTnohKlImejU3ISM9NyQkIjJMTGUqWyR6KlI1ISM6JCExSyIzU1AiKno7KiEjPTckJCIybjtIZCFmWCQ0IiEjOiQhMW5qLGBvK14kKiEjPjckJCIsRFlLcDkiISIqJCIxKVFbdGh4OSlbISM9NyQkIjIkZSopZiF5NiZmNiEjOiQiMSwnZjVzMDBgJiEjPTckJCIybiJ6cCk0IjRzNiEjOiQiMU1GPU1mbSopZSEjPTckJCIxdm96Oy9uJT0iISM5JCIxVSczUyR6P3VmISM9NyQkIjJMJGUqW3Rccz4iISM6JCIxKUheKnp1SzRlISM9NyQkIjB2JDRyJDNDQSIhIzgkIjFOUXRXbjZwWyEjPTckJCIybm0iSDJxY1o3ISM6JCIxQllTTk5kKFEkISM9NyQkIjJNTDNfMGosSSIhIzokITEnUmQhNHloNyMqISNANyQkIi5ESjVmRk4iISM2JCExJTRIJjR6V1k/ISM9NyQkIjIlM192bFlobDghIzokITIjPSdcaDojM0tBISM+NyQkIjJtVCZRRy1aeTghIzokITI3VjQzQGksSSMhIz43JCQiMURjLCJ6RDhSIiEjOSQhMic9IipISVklPkUjISM+NyQkIjJMJGVrYDg9LzkhIzokITEqM1ctaVQ/OCMhIz03JCQiMEQxKnlDKilIOSEjOCQhMkVVSVdrbGdtIiEjPjckJCIybm1tVGcuY1giISM6JCEyTDkucDlDby8iISM+NyQkIjJNJGUqWyR6VjQ6ISM6JCIyc2xvTiN6eCd6IiEjPzckJCIuRGNFc0tjIiEjNiQiMDtOZ0p2Z2AoISM9NyQkIjJvO3pXN0BeaCIhIzokIjE0cCI+PXlHWichIz43JCQiMkxMTEwpKnBwbSIhIzokIjJtJSozV1IrV1UjISM/NyQkIjJNTCQzeGUsdDwhIzokITE7bCR5OVdOSSMhIz43JCQiMm5tIkhkTz15PSEjOiQhMSg9OiVIPEpgVSEjPzckJCIrRD4jWyg+ISIpJCIyTSEzeXFoeSopZiEjQDckJCIybG07YUchZSYzIyEjOiQiMlk5RUghKWZTXychI0E3JCQiMk1MTEwpUWslPSMhIzokITJqOUQnUl5IRjghI0A3JCQiLkQxTW0tSCMhIzYkITBjd0IsK1gpKikhI0A3JCQiLnYkNDBPIlIjISM2JCIyJjNhKD1rRlZfIyEjQTckJCIkXSMhIiIkIiIhISIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSdDVVJWRVNHNiQ3Z3k3JCQhJF0jISIiJCIxN2RXIikzOTRKISM/NyQkITJtbW0iSFUsIlIjISM6JCExeFhWKnBqNlYqISNANyQkITJOTDNGSCc9J0gjISM6JCEyJj1uKkg5XXRFIiEjPzckJCEybW07L09VJio9IyEjOiQiMHkoPVpXQT1UISM+NyQkITJubTtIXyI+IzMjISM6JCIyLk53X1QsUmwlISM/NyQkITJNTDNfITROdj4hIzokITFsQCR5TyxAUSQhIz43JCQhLkQxV0JlIz4hIzYkITJsZjxDZyFcIjMiISM+NyQkITJubVRnKGZIdz0hIzokITI2JD1AektvSDkhIz43JCQhLkRjY2ExJj0hIzYkITJCZG4rd3NURCIhIz43JCQhMUwkM186OF0jPSEjOSQhMDBSJFFDcXR3ISM9NyQkITJtbSJ6VzxQKnoiISM6JCIxIilleUtOQWBBISM/NyQkIS52VkxJUHgiISM2JCIyaDU1JFE1K1Q1ISM+NyQkITJvbVQ1Jj5AWjwhIzokIjFGJ2ViKTMqND0jISM9NyQkITJMTDN4YyRwPzwhIzokIjJ4dyZRcVFrJz0kISM+NyQkITJubVRnUE11cSIhIzokIjFgbClcc1EjZU4hIz03JCQhLnZWPXZUcCIhIzYkIjJhbUkhUj4oKSl6JCEjPjckJCEyS0wzRipmIjRvIiEjOiQiMVwkKT0kKm95eVEhIz03JCQhMm1tVDUhb2xuOyEjOiQiMSpRMURPNkd4JCEjPTckJCEyTiQzeEosV2E7ISM6JCIxS04oMzBGT1kkISM9NyQkISxEWUI3ayIhIiokIjI5X3RkIT4oNCVIISM+NyQkITJsO0hLejEhRzshIzokIjJLelFmSEBXPyMhIz43JCQhMk1MZVI3IXo5OyEjOiQiMkFIciFbYmZrNyEjPjckJCEybm07YXljJCllIiEjOiQhMm02JHorKVJINyIhIz43JCQhLnZvV0I+YyIhIzYkITIoSF9NIXo6JyoqUSEjPjckJCEyTGU5IjROdE06ISM6JCExIipSI3pzMHJrJyEjPTckJCEybjthOGRWdl0iISM6JCExQXU7R3J0XCcpISM9NyQkITIkZVJaLSdbUlwiISM6JCExYkEoZSFlKCpwIiohIz03JCQhMHYkZkxPTiFbIiEjOCQhMVpRcnYnUmJGKiEjPTckJCEyPGE4Wm1lblkiISM6JCExa3VuWTMlSCIqKSEjPTckJCEyTExMZXBqSlgiISM6JCExKT4heSxgI3kvKSEjPTckJCEudj0oZUUwOSEjNiQhMSlIaihmSFohMyIhIz03JCQhMm5tO3ovb3ROIiEjOiQiMU5ySV82IikzKCohIz03JCQhL0RKWHNTSTghIzckIjIoWzJNXiQpXEo6ISM9NyQkITJNTDNGV1lNSSIhIzokIjE0ZCJmazlVKj0hIzw3JCQhMEQxOS9tKipHIiEjOCQiMmJQX1BWcEsnPiEjPTckJCEybjsvLGsmW3c3ISM6JCIxMyhwN3AjZVQ+ISM8NyQkITJNMy0pUV8rajchIzokIjFmKFtiYXE6Iz0hIzw3JCQhLHYkW19cNyEiKiQiMS82Z2ViLCs7ISM8NyQkIStEPVEmPiIhIikkITJtSSV6dFlCcD4hIz43JCQhLEQiKVE3OSIhIiokITIoPkVJW1VSZUQhIz03JCQhKS86OjYhIickITI7LiN5PCopem1MISM9NyQkISx2KT4xKjMiISIqJCEyRTxFcWVsIXlPISM9NyQkISt2TihIMSIhIikkITJZPnonZicpKVFOJCEjPTckJCEsRDsmKW8uIiEiKiQhMkI7bkJmMnpOIyEjPTckJCEyblROWVElPjg1ISM6JCExTDZaTFtPSCUqISM9NyQkITFNJDN4MU9dKikqISM6JCIxcm82c3dfKSl6ISM9NyQkIS9EMSpHRyJlJyohIzgkIjF4QERScioqUkUhIzw3JCQhMW5tVDUwQUAlKiEjOiQiMV9SMz0uVTRWISM8NyQkITFNZVJaVV5SIiohIzokIjJjZ207JUdoIXAmISM9NyQkIS52Vil6IXkmKSkhIzckIjIwJ3lwNCNcSjAnISM9NyQkITFuVE5APDV3JikhIzokIjIvS1tfMCJIJT0mISM9NyQkITFNTExlYVIlSCkhIzokIjJEV3AxZU5lNiQhIz03JCQhMUwkMy1RdV08KSEjOiQiMiYqZStCUEk/JT4hIz03JCQhMU1MMy1MdmIhKSEjOiQiMiYqNDg1Zio+LWshIz43JCQhMU0kZVJBS2skeiEjOiQhMXk7WU0/JVxZKCEjPTckJCEyT0xMZTk2ciJ5ISM7JCExWGcxXVx2cEAhIzw3JCQhMk5MM3gxIXoocCghIzskITJFLV5UJik9d2QkISM9NyQkITJOTCRlKikqbyV5diEjOyQhMVtMLydlVmsiXCEjPDckJCEyTUxlOSJ6OWZ1ISM7JCExJEhEJXldI0g4JyEjPDckJCExTExMTG8jKVJ0ISM6JCExOW1STnM/d3IhIzw3JCQhMTxhUWAhRzU/KCEjOiQhMTI8ZnF6eDUiKSEjPDckJCEvdlZ0I0hBMSghIzgkITF0NCYzWCxybykhIzw3JCQhMUAwWHkmSHYtKCEjOiQhMSJ6JlxIZlhwKCkhIzw3JCQhMVVOWSQpKUhHKnAhIzokITElSDJxJT4kZiMpKSEjPDckJCExaWxaKT1JImVwISM6JCExX1YncGZuZyYpKSEjPDckJCExJGUqWyRcSU0jcCEjOiQhMSRHYyZmLltmKSkhIzw3JCQhMURjXi42LmFvISM6JCEwJmYhPVc7XXkpISM7NyQkITFuO2E4PGoleSchIzokITB3XSpIODksJykhIzs3JCQhMHYkZkxIJGVrJyEjOSQhMS4mKVJ4MVsxeiEjPDckJCExTGVrYFQuMmwhIzokITB4WWEnKWVBeichIzs3JCQhMmwienB0YEJvaiEjOyQhMmMxcDEpUmooSCYhIz03JCQhLXYkZk8lSGkhIzYkITElcFMoPmIpSFskISM8NyQkITE7eiVcOndsNSchIzokITJOLz9BKzBIbiIhIz03JCQhMUxlOTtkciQpZiEjOiQiMSI9SFVYXSozRSEjPTckJCEwdlZ0RmIzJ2UhIzkkIjJXXDEuZ3RoQyMhIz03JCQhMW47YVFbKnp0JiEjOiQiMUc2MmBHUDFVISM8NyQkITEkZVIoKlJNXmgmISM6JCIxMWAiPTZWTzEnISM8NyQkIS92JDQnUkYjXCYhIzgkIjE7R1dcNixVeCEjPDckJCEya1ROQF84JXBgISM7JCIxYCxreSlmMDwqISM8NyQkITFNTEwkM2BsQyYhIzokIjJQRVlYSVsnRzUhIzw3JCQhMTxhajRkdjZeISM6JCIyeFAlR20mKikqMzYhIzw3JCQhL3YkZkxlcChcISM4JCIyaCgzMTs0W1M2ISM8NyQkITEkZVJBJzQ7VVshIzokIjJ0OV0oXDNOPzYhIzw3JCQhMW47YSllanRxJSEjOiQiMk0sZjRxWiNbNSEjPDckJCEwdlZbQG1EZCUhIzkkIjE8NzQ1YjtqIyohIzw3JCQhMUxlOVQpb3hWJSEjOiQiMSZ6NjcqNF8iZighIzw3JCQhMTt6V245KEhJJSEjOiQiMU0pKlxJMUZPYiEjPDckJCEtdiQ0dSJvVCEjNiQiMmxVbmc1QWc9JCEjPTckJCEvdj08XiIpUlMhIzgkIjFuW1xbaDQkcCghIz03JCQhLkQxOWM5IlIhIzckITJgPlZ5ZiNbPzwhIz03JCQhL0Qxa3I0JHkkISM4JCEyWCU+MUkjNCl5VCEjPTckJCEsdj1RWmwkISM1JCEwOUpxS2kzXSchIzs3JCQhL3YkNEB6al8kISM4JCExMHhzTSVHaWUpISM8NyQkIS52VkI/ISlSJCEjNyQhMURBQFg3TU01ISM7NyQkIS9EInlEaCdwSyEjOCQhMk08bzBqLCVwNiEjPDckJCEtRCJHLTg5JCEjNiQhMWk2dDt1amQ3ISM7NyQkITIlZSopND14THVJISM7JCEyXltPYSlvZiRHIiEjPDckJCEybSJ6JVw6dHQrJCEjOyQhMksmeUowb0UmSCIhIzw3JCQhMmRSc0woMypRKEghIzskITE5OShRUnVjSCIhIzs3JCQhMXZveiJmMy8lSCEjOiQhMWxLNj8jW0NIIiEjOzckJCEyVk5ALUpFcCFIISM7JCExJ3pnbSoqKmUmRyIhIzs3JCQhMk0kZWtHU1d0RyEjOyQhMT1gZlRANnY3ISM7NyQkITB2VkIhXF5SRiEjOSQhMnJgPiE+Y2koPiIhIzw3JCQhMmxtVGd4JmUwRSEjOyQhMkBBOmNAaWYxIiEjPDckJCEyTGVSKFxtbHJDISM7JCExSnZFX1lZZSkpISM8NyQkIS92VkJ2c1BCISM4JCExa3BYOCY9SmwnISM8NyQkITIkZWtHZ0h3cUEhIzskITFaYUZCJCpRSGEhIzw3JCQhMmxUTnJSKXouQSEjOyQhMDolKWUsX0s5JSEjOzckJCExdlYpUiRRJG84IyEjOiQhMm9zLUdXNSU0RyEjPTckJCEyTExMM0ZwKXA/ISM7JCEyJjR3JjRKV0pXIiEjPTckJCEyTGVSWl8hKW8lPiEjOyQiMkE9KSkzKTRHKTQiISM9NyQkITJMJGVreTwqUSM9ISM7JCIyWWcqb1wjKip5ZiQhIz03JCQhMkwzX0QuLjRxIiEjOyQiMXllJ1xYKj5mZiEjPDckJCEyTExla0c5emQiISM7JCIxKikpek8xWjc0KSEjPDckJCEyTGVrLmFEXFgiISM7JCIxY3YyKjNjQiIqKiEjPDckJCEyTCQzRiV6Tz5MIiEjOyQiMid5ZHM8ckxONiEjPDckJCEyTDN4IlshWyozNyEjOyQiMiJvVih5PVVnQiIhIzw3JCQhMk1MJDMtJGZmMyIhIzskIjJQcDY6Vy4oKkciISM8NyQkITI8L15KSkgnPjUhIzskIjFVKHAjKlw7JSlIIiEjOzckJCEvdj1VSypIYCohIzkkIjJebDElUVYmR0giISM8NyQkITElZWtHTiRwcCkpISM7JCIyOTc+IXB5OHQ3ISM8NyQkITFuO2FqTVIxIykhIzskIjJyVD50ZF0mUjchIzw3JCQhMUxlKltvJHp6byEjOyQiMi9ANidcVW9LNiEjPDckJCEtRDFSPmBiISM3JCIwPUAlPXZ1digqISM7NyQkITFuVGdGVGZFVSEjOyQiMGg+OSVbJnAieSEjOzckJCEyTkxlKltWKioqKkchIzwkIjFaUzEsMStWYiEjPDckJCEybVROJ2ZXcE9BISM8JCIwO3UkPW5eP1YhIzs3JCQhL0RKcVhSdDohIzkkIjJHaUolM1RuZkkhIz03JCQhMU1lKik0byU0NSohIzwkIjFYITMtPkRceCIhIzw3JCQhMm5tbW0ieiV6WSMhIz0kIjE9JSpvbTQhKjNbISM9NyQkIjFMMy1qUCg9VSUhIzwkITFqMC42IiozdSYpISM9NyQkIjJMJDNGVyZwNjgiISM8JCEyVVVPZzkqeXRAISM9NyQkIjJMZVJBcl4sIz0hIzwkITFrISllaC1cX00hIzw3JCQiMk5MMy0pUTg0RCEjPCQhMlhoazJtZiR5WSEjPTckJCIyTSRlOTsjKTQoKVEhIzwkITFld1lPRTk6cCEjPDckJCIxTUwzX0QxbF8hIzskITFZNUIocG09eSkhIzw3JCQiMUwzLSkpby1WbSEjOyQhMm9hUz13Xyc+NSEjPDckJCIxTSRlUkEiKjQtKSEjOyQhMiJHPXZYMzY1NiEjPDckJCIxJTNGPlJ0KjQoKSEjOyQhMm9EXFYobzZONiEjPDckJCIxTGUqKWZiJiopUiohIzskITJMJykqbyJvKVJZNiEjPDckJCIxMy0pUWtZTXUqISM7JCEyak9mPXonKm85IiEjPDckJCIyJWVreXNQejM1ISM7JCEyTSRSKnlzKilSOSIhIzw3JCQiMScqWz0iKUdDVjUhIzokITIyJyopNFUiM3g4IiEjPDckJCIyS0wkZSopPnB4NSEjOyQhMjJrSGsrJDRHNiEjPDckJCIybTsvLD5Xdz4iISM7JCEwb0VqMDslcDUhIzo3JCQiLkQxUidmPDghIzckITFSRlo2PThUKCohIzw3JCQiMk0kZTkiZlt2ViIhIzskITEmNENfczthWSkhIzw3JCQiMm9tbTt6K3ZiIiEjOyQhMS4tdikqSGVAcCEjPDckJCIvdj0jKkhYeDshIzgkITEoeSgqKj0kUkc8JiEjPDckJCIyTUwzRj4wdXoiISM7JCExa1h2QTtTKUckISM8NyQkIjJvO0hLUmR0Ij4hIzskITIoUnFAMDpwUzghIz03JCQiLXYkZjR0LiMhIzYkIjF3d3FIMDx2ZiEjPTckJCIxPC9eYzcnbzsjISM6JCIyb2ddakdjIipmIyEjPTckJCIyTSQzRj5IVCdIIyEjOyQiMUB3cCh5JillVSUhIzw3JCQiMERKP2VrZlUjISM5JCIyLyxNKSpRR2grJyEjPTckJCIxbjt6V2leYkQhIzokIjB4MEkjcFYiRyghIzs3JCQiMk0zX3YhejEmbyMhIzskIjBcKilIYFknMyMpISM7NyQkIi9ESnEmPlkiRyEjOCQiMVc6UCYpKmU3dykhIzw3JCQiMS9FKydbMnElRyEjOiQiMUttZ1t6VFIpKSEjPDckJCIxM0ZwLGFSekchIzokIjFiJ1ImKnlFTiopKSEjPDckJCIyRiJHUTxMeTZIISM7JCIxZksieihlbkIqKSEjPDckJCIxPEgyTDc8V0ghIzokIjEpZjxdJDQtSSopISM8NyQkIjFESlhrcSUqM0khIzokIjBEUjEqPkNzKSkhIzs3JCQiMk1MTGUqR3N0SSEjOyQiMSgpcE50d3BBKCkhIzw3JCQiMm47LyxXaXY/JCEjOyQiMWknNHM4VSpRIikhIzw3JCQiLnZWKT5TVEwhIzckIjFYQ1VDdmFAcyEjPDckJCIyTSRla0c6Q3ZNISM7JCIxXCgqbyZRV2stJyEjPDckJCIybm07SDIiMzRPISM7JCIxI3A/OSRIKio+WSEjPDckJCIvdj08MSNIdSQhIzgkIjIpZSU+V0IoUXZJISM9NyQkIjJNTGU5O2duKFEhIzskIjImUndNZ1opKW85ISM9NyQkIjFuIkhkcSpmNVMhIzokITJkIioqW3hoV1I3ISM+NyQkIipEUlc5JSEiKSQhMiRmI2ViVGw8aiIhIz03JCQiLkRjLDZqUyUhIzckITE3QiMpNGJULFQhIzw3JCQiLUQieSM9b1khIzYkITJ3PD9Tb1xJbCYhIz03JCQiMERjRXNdT3QlISM5JCExM14ub0RudGUhIzw3JCQiL0Qxayc9Iip6JSEjOCQhMT1LUF1eL0RnISM8NyQkIjB2b2FnJ2VrWyEjOSQhMVtVNnhZUzJoISM8NyQkIi52b2FhKyRcISM3JCEvI1xyNGc8NychIzo3JCQiL3ZvSC8qNDEmISM4JCEyJj5ucmwnXFQmZiEjPTckJCIsREpFPj4mISM1JCExKDRqO18iSFdiISM8NyQkIi92JDRyK2BXJiEjOCQhMkV1Ryk0RlwoPSUhIz03JCQiLnYkNF5uKXAmISM3JCEyNyN6TGcmUWtNIyEjPTckJCIvRCJ5XVw/JmYhIzgkITJkQmIpcF54Tk8hIz43JCQiLUQxUlUwaSEjNiQiMlB3YHc5cV5WIiEjPTckJCIvRGN3SHYnWychIzgkIjFVVCpRWmRrIUghIzw3JCQiLnZvLyMzb24hIzckIjEiPiE0WShwLGokISM8NyQkIjFESlg5VlRRbyEjOiQiMidcIiopeVNFcG8kISM9NyQkIjBESj9lWSgzcCEjOSQiMDJuIipRKFImcCQhIzs3JCQiMXYkNCdcKXkhenAhIzokIjImWyZceGJTdGwkISM9NyQkIi92PTw2VFxxISM4JCIxMFtUd2Ewdk4hIzw3JCQiMHZWQmx2Kz4oISM5JCIyYTcieUNUUipHJCEjPTckJCIsdj1TMkwoISM1JCIyc0ImUSY+emInRyEjPTckJCIxTEwzX05KT3khIzokIjEjXCsqPSYqWyk9KCEjPTckJCIxbm1tO3ApPU0pISM6JCExOyo9QEhsIkc3ISM8NyQkIjFNJGVreVFvWikhIzokITI7UyxzPjFGYyIhIz03JCQiLURjMXo2JykhIzYkITIjR0JqKTNvdXoiISM9NyQkIjFMZTkiZm0jeicpISM6JCExUVhEMlpedz0hIzw3JCQiMW07L0VEdVkoKSEjOiQhMnciUmd3SztJPiEjPTckJCIvdiQ0WT1VIikpISM4JCEyMSdIJCk+PCIqZT4hIz03JCQiMU1MJGVSJXAiKSkpISM6JCEyOVYsdyQpUU4nPiEjPTckJCIxbiJIMkxxIlwqKSEjOiQhMi0kKWZURSMzWD4hIz03JCQiLkRjRVltLCohIzckITJbJDRiK1QiWyE+ISM9NyQkIjFMM18rQTclMyohIzokITJ4ZiZSVFlAVz0hIz03JCQiMW1tVE4iKWZeIiohIzokITIoKkh2Kj1ZJVx3IiEjPTckJCIxTCQzXytdbEcqISM6JCEyblAwQltreGIiISM9NyQkIit2PV1AJSohIiokITJpUyxicmchKkgiISM9NyQkIjFtO0gjb1oxIioqISM6JCEyMiZIb0l2Wj0+ISM+NyQkIjJMTGUqWyR6KlI1ISM6JCIxQS8oUilHUmNtISM9NyQkIjI7L14iKVtbTDAiISM6JCIxIzQqbyNccEApeiEjPTckJCIwdlZ0aTxuMSIhIzgkIjB1U2NqJilSIikpISM8NyQkIjIkZWtgbW4zITMiISM6JCIxJSp6OjpydGoiKiEjPTckJCIybjtIZCFmWCQ0IiEjOiQiMXYxcGFGdWshKiEjPTckJCIyTWU5VD0lPj82ISM6JCIxWUA0aihcenQoISM9NyQkIixEWUtwOSIhIiokIjFWQFRmLzd3YCEjPTckJCIyTCRlKlt0XHM+IiEjOiQiMXQsMjVQRDZEISM+NyQkIjJubSJIMnFjWjchIzokITJiKSlvZWRmIVFKISM+NyQkIjJMJDNGPmdyZzchIzokITJYYi8kW3EyVE4hIz43JCQiLURKXSdRRiIhIzUkITE2U1hUIno1dSQhIz03JCQiMm47SEsvOXFHIiEjOiQhMXYvUTEjSER2JCEjPTckJCIyTUwzXzBqLEkiISM6JCEyWC5JeUYkKm9mJCEjPjckJCIybW1tIno1WUU4ISM6JCExKlJBZi5sVipHISM9NyQkIi5ESjVmRk4iISM2JCEyMEFxVG5Haig9ISM+NyQkIjJMJGVrYDg9LzkhIzokIjIpZT9sJnlgQlMiISM/NyQkIjJubW1UZy5jWCIhIzokIjJaNkVvUXElXDchIz43JCQiMk0kZSpbJHpWNDohIzokIjJgJDQ7Km8kNC43ISM+NyQkIi5EY0VzS2MiISM2JCIxZnkzJmZvVSFcISM+NyQkIjJMTExMKSpwcG0iISM6JCExbSdRIXlOeFhVISM+NyQkIjJNTCQzeGUsdDwhIzokITIiZT5kQyYpUlI1ISM/NyQkIjJubSJIZE89eT0hIzokIjFaKyFRKUc9Iz4iISM+NyQkIitEPiNbKD4hIikkIjIlPjNCRkZxK0QhI0A3JCQiMmxtO2FHIWUmMyMhIzokITJFdmxgVSgqMyRHISNANyQkIjJNTExMKVFrJT0jISM6JCExOSUqPSdwJz1sSyEjQDckJCIuRDFNbS1IIyEjNiQiMU5fMyRmYy4kZSEjQDckJCIudiQ0ME8iUiMhIzYkIjFiUzBCOCNwVyQhI0E3JCQiJF0jISIiJCEwdVk0RjZJJSoqISNALSUmQ09MT1JHNiYlJFJHQkckIjInXF8nZU0leWc+ISM8JCIxaWo5LmVAUiEpISM7JCIyJ1xfJ2VNJXlnPiEjPC0lJVZJRVdHNiQ7JCEkXSMhIiIkIiRdIyEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEidDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiI3EhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhKVEhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlISlRISIiLSUpQ0hJTERSRU5HNiI= LCQqLEknc2lnbWF8aXJHNiIiIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywkKiZJI1BpR0YqIiIjRiQhIiMjRiYiIilGJkYwI0YmRjBGLyMhIiJGMC1JJEludEdGKTYkKigtRig2IywkKiZJI3V8aXJHRiVGJi1GKDYjKiZGJEYwSSJ0R0YlRiZGJkY2RiYtRig2IyooXiNGNUYmRi9GJkZDRiZGJi1GKDYjLCQqJkYkRjBGQ0YwRjVGJi9GQzssJEkpaW5maW5pdHlHRipGNkZPRiZGNA== USpILHBzaSxwaGk2Ig== NyNeJCQhOmxueSI9YDY9bXZkU1shI0QkIjo4TCl6PDZzSU05eSkpeiEjRA== JCIlJSlIISIk Warning, computation interrupted JCInJik0XSEiJA== print(); # input placeholder LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZkdC1JI21vR0YkNi1RIn5GJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRJnByaW50RicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiUtRkc2I1EhRictSSNtc0dGJDYjUTBOZXd+aW50ZWdyYXRpb25GJ0ZURi8tRiw2LVEiO0YnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjI3Nzc3NzhlbUYnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGYG8vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEiaEYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJGam5GaW4tRkc2JVEidUYnRkpGTS1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJGV4cEYnL0ZLRjRGLy1GUDYkLUYjNiQtRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRmFxLUkmbWZyYWNHRiQ2KC1GIzYnLUkjbW5HRiQ2JFEiMkYnRi9GYnAtSSVtc3VwR0YkNiUtRkc2JVEoJnNpZ21hO0YnRmhwRi8tRiM2I0ZocS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGYnAtRkc2JVEic0YnRkpGTS1GIzYjLUZHNiVRI1BpRidGaHBGLy8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZHMvJSliZXZlbGxlZEdGNEYvLUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GYHFGYnEtRmRxNigtRiM2JUZocUZicC1GXXI2JS1GRzYlUSZzaWdtYUYnRmhwRi9GYnJGZHItRiM2Iy1GXXI2JS1GRzYlUSUmcGk7RidGaHBGL0ZickZkckZfc0Zic0Zlc0Znc0ZicC1GXXI2JUZnckZickZkci1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/Rl5wRmluRltvLUZHNiVRI0gyRidGSkZNRltwLUZkcTYoLUYjNiZGaHFGYnBGKy1GRzYlUSJIRidGSkZNRmpyRl9zRmJzRmVzRmdzRl51RltvRkYtRlA2JC1GIzYlRlQtRlg2I1Emc1N0YXJGJ0ZURi9GZW5GW28tRkc2JVEnZmFjdG9yRidGSkZNLUZQNiQtRiM2JC1GRzYlUSVkaWZmRidGSkZNLUZQNiQtRiM2JUZoby1GLDYtUSIsRidGL0YyRmhuRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnRmdyRi9GL0ZlbkZbby1GXG82JkZeb0Zhb0Zjby9GZm9RJWF1dG9GJy1GRzYlRmF2RkpGTUZbcC1GRzYlUSZzb2x2ZUYnRkpGTS1GUDYkLUYjNiYtRkc2JUZbd0ZocEYvLUZQNiQtRiM2JS1GRzYlRmpvRmhwRi9GYHctRkc2JUZpckZocEYvRi9GYHdGZ3JGL0ZlbkZbb0ZhdUZbcEZhdUZicEZlcC1GUDYkLUYjNiUtRkc2JVEiSUYnRkpGTUZicEZpd0YvRl51RltvLUZHNiVRJmhTdGFyRidGSkZNRltwLUZHNiVRJXN1YnNGJ0ZKRk0tRlA2JC1GIzYnRmdyLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXnBGaW5GaXdGYHdGaG9GL0ZedUZbby1GRzYlUSZldmFsZkYnRkpGTS1GUDYkLUYjNiRGZnktRlA2JC1GIzYlLUZHNiVRJ3ZhbG51bUYnRkpGTUZgdy1GUDYmLUYjNidGY3lGYHctRmRxNigtRiM2JUZocUZicEZpd0ZqckZfc0Zic0Zlc0Znc0ZicC1GUDYkLUYjNiUtRmlxNiRGYXNGL0Zpcy1GZHE2KC1GIzYlLUZdcjYlLUZHNiVRKCZzaWdtYTtGJ0ZocEYvRmJyRmRyRmJwRml3RmpyRl9zRmJzRmVzRmdzRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi9GZW5GW29GYXVGW3BGYXVGYnBGZXAtRlA2JC1GIzYkRl1xRmN5Ri9GZW5GW29GYHotRlA2JC1GIzYkRmZ5LUZQNiQtRiM2JUZbW2xGYHdGaXdGL0YvRmVuRltvLUZHNiVRJ2hwcmltZUYnRkpGTUZbcEZmeS1GUDYkLUYjNilGZ3JGXXpGaXdGaXMtRkc2JVEkZXRhRidGaHBGL0Zgd0Zob0YvLUYsNi1RKCZtaW51cztGJ0YvRjJGNUY3RjlGO0Y9Rj9GYHFGYnFGY3lGXnVGW28tRkc2JVEmYWxwaGFGJ0ZocEYvRltwLUZHNiVRJmNvZWZmRidGSkZNLUZQNiQtRiM2KC1GRzYlUSdzZXJpZXNGJ0ZKRk0tRlA2JC1GIzYnRmddbEZgd0ZeXmxGYHctRmlxNiRRIjNGJ0YvRi9GYHdGXl5sRmB3RmhxRi9GZW5GW29GRi1GUDYkLUYjNiVGVC1GWDYjUSNnMkYnRlRGL0ZlbkYrRltvLUZHNiVGXmBsRkpGTUZbcEZlcC1GUDYkLUYjNiZGXXFGZF5sRmJwLUZdcjYlLUZHNiVRJiZldGE7RidGaHBGL0ZickZkckYvRmJwLUZQNiQtRiM2JkZlcC1GUDYkLUYjNidGZF5sRmJwRmVgbEZhXmxGZ11sRi9GXXFGaltsRi9GYnBGZXAtRlA2JC1GIzYlRmB5RmJwRl5ebEYvRmVuRitGW28tRkc2JVElcGxvdEYnRkpGTS1GUDYkLUYjNiotRlA2Ji1GIzYnLUZHNiVRI1JlRidGaHBGLy1GUDYkLUYjNiRGZnktRlA2JC1GIzYlRltbbEZgd0ZfYGxGL0YvRmB3LUZHNiVRI0ltRidGaHBGL0ZkYmxGL0ZlXGxGaFxsRmB3Rl5ebEZdekZdcS1GaXE2JFEjNjVGJ0YvLUYsNi1RIy4uRidGL0YyRjVGN0Y5RjtGPUY/RmBxRkRGX2NsRi9GZW5GK0Zbb0YrRmZhbC1GUDYkLUYjNitGZnktRlA2JC1GIzYmRltbbEZgdy1GRzYlUSRsb2dGJ0ZocEYvLUZQNiQtRiM2Iy1GXXI2JS1GUDYkLUYjNiZGZXBGYWBsRmJwLUZQNiQtRiM2JkZlcEZeYWxGYV5sRmpbbEYvRi9GYnJGZHJGL0YvRmB3Rl5ebEZdekZdcS1GaXE2JFEkMTAwRidGL0ZiY2xGXmVsRi9GZW5GW29GKy1GRzYlUSZwc2kyMUYnRkpGTUZbcC1GRzYlUSRpbnRGJ0ZKRk0tRlA2JC1GIzYuRmVwLUZQNiQtRiM2JkZdcUZkXmxGYnAtRl1yNiUtRkc2JVEmJmV0YTtGJ0ZocEYvRmJyRmRyRi9GYnBGZXBGYmFsRmB3Rl5ebEZdekZdcS1GRzYlUSlpbmZpbml0eUYnRkpGTUZiY2xGZGZsRi9GXnVGW29GKy1GRzYlUSZwc2kyMkYnRkpGTUZbcC1GRzYlUSRJbnRGJ0ZKRk0tRlA2JC1GIzYrRl9gbEZgd0YrRl5ebEZdekZdcUZkZmxGYmNsRmRmbEYvRl51RltvLUZHNiVRJnBoaTIxRidGSkZNRltwRmF1RmJwRmFlbEZedUZbby1GRzYlUSZwaGkyMkYnRkpGTUZbcEZhdUZicEZnZmxGXnVGW29GKy1GRzYlUSVwaGkyRidGSkZNRltwRmFnbEZpc0ZkZ2xGXnVGW28tRkc2JUZJRmhwRi8tRlA2JC1GIzYlRlQtRlg2I1EvSDIsfnBzaTIsfnBoaTJGJ0ZURi9GZW5GW29GK0Zgei1GUDYkLUYjNiRGZnktRlA2JC1GIzYlRltbbEZgdy1GUDYmLUYjNi9GYXVGYHdGYWVsRmB3RmdmbEZgd0YrRmFnbEZgd0YrRmRnbEZgd0ZnZ2xGL0ZlXGxGaFxsRi9GL0Zlbg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder UTBOZXd+aW50ZWdyYXRpb242Ig== USZzU3RhcjYi LCQqKEknc2lnbWF8aXJHNiIiIiMsJiooSSN1fGlyR0YlIiIiLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJCooRiRGJkkic0dGJUYqSSNQaUdGLiEiIiEiI0YqRjRGKkYqRjNGNkYqRjRGNkY2 LCQqKEknc2lnbWF8aXJHNiIhIiMtSSlMYW1iZXJ0V0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjKiZGJCIiI0kjdXxpckdGJSIiIkYwSSNQaUdGKkYwI0YwRi4= NyQkIkRPPyVmeEZidyEpZi1hUWpPYiJHJCEjUiQiRFA/JWZ4RmJ3ISlmLWFRak9iIkckRiU= Ki5JJ3NpZ21hfGlyRzYiIiIiLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiMsJComSSNQaUdGKSIiI0YjISIjI0YlIiIpRiVGLyNGJUYvRi4jISIkRi8tRic2IyoqXiNGM0YlRiNGMC1JKUxhbWJlcnRXR0YoNiMqJkYjRi9JI3V8aXJHRiRGJUYlRi5GJUYlLUYnNiMsJiomRj5GJS1GJzYjLCRGOiEiIkYlRkYqJkYjRjBGOkYvI0ZGRi9GJQ== JCJEaWZhKikqWyhSKEdGQGArLCM9ZSRvISNT LCYqKkkjdXxpckc2IiIiIi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjLCQtSSlMYW1iZXJ0V0dGKTYjKiZJJ3NpZ21hfGlyR0YlIiIjRiRGJiEiIkYmRjIiIiVJI1BpR0YqISIjRjMqJkYyRjNGNkY3RjM= USNnMjYi KigtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiYsJioqSSN1fGlyR0YoIiIiLUYkNiMsJC1JKUxhbWJlcnRXR0YlNiMqJkknc2lnbWF8aXJHRigiIiNGLkYvISIiRi9GNyIiJUkjUGlHRiYhIiNGOComRjdGOEY7RjxGOEYvSSRldGFHRihGOEY5Ri8sJi1GJDYjLCxGK0YvKiZGLkYvLUYkNiMsJCooRjdGOCwmKihGN0Y8RjNGL0Y7Ri8jRi9GOEY+Ri9GL0Y7RjlGPEYvRjkqKEY3RjhGO0Y8RkhGOEY8KiZGLkYvRjBGL0YvKiZGN0Y8RjNGOEZKRi9GOUYvRi8tRiQ2IyomXiNGL0YvRj5GL0Yv gY_PDFLSUlUExPVEc2Jy0lJ0NVUlZFU0c2JDdhbzckJCEkXSchIiIkIiIhISIiNyQkITJNTExlKnBqO2khIzokISIhISIiNyQkITFuOy9oVjNxZiEjOSQiIiEhIiI3JCQhMUxMM1AsIkdwJiEjOSQhIiEhIiI3JCQhMUxMZWZ6cDhhISM5JCIiISEiIjckJCEya21UTk43ZjgmISM6JCEiISEiIjckJCExTCQzeGBwJHlbISM5JCEiISEiIjckJCEudiRwKSlwNlkhIzYkIiIhISIiNyQkITJOTDNGbzJmTCUhIzokISIhISIiNyQkIS52PSc0K2hTISM2JCIiISEiIjckJCExbm07NGNBeVAhIzkkISIhISIiNyQkITFNTGVDcDpITiEjOSQiIiEhIiI3JCQhLHZkayhbSyEiKiQhIiEhIiI3JCQhLEQiNEFuSCEiKiQiIiEhIiI3JCQhLERVLGZwIyEiKiQiIiEhIiI3JCQhMktMM0ZMPCZcQyEjOiQhIiEhIiI3JCQhMmxtbSI+R2FjQCEjOiQiIiEhIiI3JCQhMm9tbW0oXE4zPiEjOiQhIiEhIiI3JCQhLnZWXmAnPjshIzYkIiIhISIiNyQkITJtbW07IVE1azghIzokISIhISIiNyQkIS52VkVEUDMiISM2JCIiISEiIjckJCEtREpmUW4iKSEjNiQiIiEhIiI3JCQhMmxtbVQ1ZztRJiEjOyQhIiEhIiI3JCQhMW47eldyZC1UISM6JCIiISEiIjckJCEybW07YT0lXEJHISM7JCIiISEiIjckJCEyTCQzXytCbUxAISM7JCIiISEiIjckJCEuRGNUSVFXIiEjNyQhIiEhIiI3JCQhMkszeEpaOSopNCIhIzskISIhISIiNyQkITFuO0gyYCkqUnYhIzskISIhISIiNyQkITEkM19dZjBhImUhIzskISIhISIiNyQkIS9EIkcpZSMzNCUhIzkkISIhISIiNyQkITEzRnBFZ2BHSyEjOyQhIiEhIiI3JCQhMmwiSGRxaENtQiEjPCQhIiEhIiI3JCQhMURKWDlqJlJdIiEjOyQhIiEhIiI3JCQhMUxMTCRla21UJyEjPCQhIiEhIiI3JCQiMmxUZy1nLixhIyEjPSQiMjtWKD5aJ1x0bSIhJCg9NyQkIjJtVCZReXJvXDYhIzwkIiIhISIiNyQkIjI8elduKlJPWD8hIzwkIiIhISIiNyQkIjJuOy9eIjMvVEghIzwkIiIhISIiNyQkIjJtIkgjPVglUktaISM8JCIiISEiIjckJCIxbjthKTNbUF8nISM7JCIiISEiIjckJCIybiJ6Pk9iazU1ISM7JCIiISEiIjckJCIybm1UTkU7Km84ISM7JCIiISEiIjckJCIybjtIIz14WCYzIyEjOyQhIiEhIiI3JCQiMm5tO0g8Kio+IUchIzskISIhISIiNyQkIjFMTExlP11cUyEjOiQhIiEhIiI3JCQiLXZWXCsoSCYhIzYkIiIhISIiNyQkIjJsbW0iSCZ6Oyp6ISM7JCEiISEiIjckJCIrMFVieDUhIikkISIhISIiNyQkIi1EVDMhKlw4ISM1JCIiISEiIjckJCIuRGNANU1oIiEjNiQhIiEhIiI3JCQiLXZbQypmIT4hIzUkIiIhISIiNyQkIjJOTEwkKWYhKilvQCEjOiQhIiEhIiI3JCQiLHZbIWZcQyEiKiQiIiEhIiI3JCQiMm9tIkgyaiVScSMhIzokISIhISIiNyQkIixEU0M/KUghIiokISIhISIiNyQkIjJOTGUqPVVuVkshIzokIiIhISIiNyQkIi5EIm9PPDxOISM2JCEiISEiIjckJCIyT0xMM1BwWHkkISM6JCIiISEiIjckJCIuRDEqeV1rUyEjNiQhIiEhIiI3JCQiMm1tbW0mPjdNViEjOiQiIiEhIiI3JCQiMmttOy9HVCk0WSEjOiQhIiEhIiI3JCQiMk9MZSozdkYkKVshIzokIiIhISIiNyQkIiswcWBNXiEiKSQiIiEhIiI3JCQiMUxMM1UoM0RVJiEjOSQhIiEhIiI3JCQiMm1tbW00dStvJiEjOiQiIiEhIiI3JCQiLkRjWyNwYWYhIzYkISIhISIiNyQkIi52VktQdkAnISM2JCIiISEiIjckJCIkXSchIiIkISIhISIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSdDVVJWRVNHNiQ3YW83JCQhJF0nISIiJCIiISEiIjckJCEyTUxMZSpwajtpISM6JCEiISEiIjckJCExbjsvaFYzcWYhIzkkISIhISIiNyQkITFMTDNQLCJHcCYhIzkkIiIhISIiNyQkITFMTGVmenA4YSEjOSQhIiEhIiI3JCQhMmttVE5ON2Y4JiEjOiQiIiEhIiI3JCQhMUwkM3hgcCR5WyEjOSQhIiEhIiI3JCQhLnYkcCkpcDZZISM2JCIiISEiIjckJCEyTkwzRm8yZkwlISM6JCEiISEiIjckJCEudj0nNCtoUyEjNiQiIiEhIiI3JCQhMW5tOzRjQXlQISM5JCIiISEiIjckJCExTUxlQ3A6SE4hIzkkISIhISIiNyQkISx2ZGsoW0shIiokIiIhISIiNyQkISxEIjRBbkghIiokISIhISIiNyQkISxEVSxmcCMhIiokIiIhISIiNyQkITJLTDNGTDwmXEMhIzokISIhISIiNyQkITJsbW0iPkdhY0AhIzokIiIhISIiNyQkITJvbW1tKFxOMz4hIzokIiIhISIiNyQkIS52Vl5gJz47ISM2JCEiISEiIjckJCEybW1tOyFRNWs4ISM6JCIiISEiIjckJCEudlZFRFAzIiEjNiQhIiEhIiI3JCQhLURKZlFuIikhIzYkIiIhISIiNyQkITJsbW1UNWc7USYhIzskISIhISIiNyQkITFuO3pXcmQtVCEjOiQhIiEhIiI3JCQhMm1tO2E9JVxCRyEjOyQiIiEhIiI3JCQhMkwkM18rQm1MQCEjOyQiIiEhIiI3JCQhLkRjVElRVyIhIzckIiIhISIiNyQkITJLM3hKWjkqKTQiISM7JCIiISEiIjckJCExbjtIMmApKlJ2ISM7JCIiISEiIjckJCExJDNfXWYwYSJlISM7JCIiISEiIjckJCEvRCJHKWUjMzQlISM5JCIiISEiIjckJCExM0ZwRWdgR0shIzskIiIhISIiNyQkITJsIkhkcWhDbUIhIzwkIiIhISIiNyQkITFESlg5aiZSXSIhIzskIiIhISIiNyQkITFMTEwkZWttVCchIzwkIiIhISIiNyQkIjJsVGctZy4sYSMhIz0kIjEwXSVRJj46T1UhJCk9NyQkIjJtVCZReXJvXDYhIzwkIiIhISIiNyQkIjI8elduKlJPWD8hIzwkIiIhISIiNyQkIjJuOy9eIjMvVEghIzwkIiIhISIiNyQkIjJtIkgjPVglUktaISM8JCIiISEiIjckJCIxbjthKTNbUF8nISM7JCIiISEiIjckJCIybiJ6Pk9iazU1ISM7JCIiISEiIjckJCIybm1UTkU7Km84ISM7JCIiISEiIjckJCIybjtIIz14WCYzIyEjOyQiIiEhIiI3JCQiMm5tO0g8Kio+IUchIzskIiIhISIiNyQkIjFMTExlP11cUyEjOiQhIiEhIiI3JCQiLXZWXCsoSCYhIzYkISIhISIiNyQkIjJsbW0iSCZ6Oyp6ISM7JCIiISEiIjckJCIrMFVieDUhIikkISIhISIiNyQkIi1EVDMhKlw4ISM1JCIiISEiIjckJCIuRGNANU1oIiEjNiQhIiEhIiI3JCQiLXZbQypmIT4hIzUkIiIhISIiNyQkIjJOTEwkKWYhKilvQCEjOiQiIiEhIiI3JCQiLHZbIWZcQyEiKiQhIiEhIiI3JCQiMm9tIkgyaiVScSMhIzokIiIhISIiNyQkIixEU0M/KUghIiokISIhISIiNyQkIjJOTGUqPVVuVkshIzokIiIhISIiNyQkIi5EIm9PPDxOISM2JCEiISEiIjckJCIyT0xMM1BwWHkkISM6JCIiISEiIjckJCIuRDEqeV1rUyEjNiQiIiEhIiI3JCQiMm1tbW0mPjdNViEjOiQhIiEhIiI3JCQiMmttOy9HVCk0WSEjOiQiIiEhIiI3JCQiMk9MZSozdkYkKVshIzokISIhISIiNyQkIiswcWBNXiEiKSQiIiEhIiI3JCQiMUxMM1UoM0RVJiEjOSQhIiEhIiI3JCQiMm1tbW00dStvJiEjOiQiIiEhIiI3JCQiLkRjWyNwYWYhIzYkIiIhISIiNyQkIi52VktQdkAnISM2JCEiISEiIjckJCIkXSchIiIkIiIhISIiLSUmQ09MT1JHNiYlJFJHQkckIjInXF8nZU0leWc+ISM8JCIxaWo5LmVAUiEpISM7JCIyJ1xfJ2VNJXlnPiEjPC0lJVZJRVdHNiQ7JCEkXSchIiIkIiRdJyEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEnJiM5NTE7NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSZmYWxzZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ25vcm1hbDYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiI3EhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhKVEhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlK04hIiItJSlDSElMRFJFTkc2Ig== LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdTNyQkISUrNSEiIiQhMmA6a11ZcmFyIiEiJjckJCExbm1tO3AwayYqISM5JCEyPF51QjJpInA6ISImNyQkITFNTCQzPFhaPSohIzkkITJqK2ZHIVI7WjkhIiY3JCQhMW1tbVQlcCJlKCkhIzkkITJXKkcwODonZUoiISImNyQkITFubW0iNG0oRyQpISM5JCEyO3JtdjolKioqPSIhIiY3JCQhMU1MJDNpLjkheiEjOSQhMUYqUSk9aStyNSEiJTckJCExbm07L1I9MHYhIzkkITFhP1lnMyhHbSohIiY3JCQhLHZMQFw0KCEiKiQhMU0xQThZS04nKSEiJjckJCExbm07L3NpcW0hIzkkITFyIkdAQnpMaighIiY3JCQhLHZ5JHBaaSEiKiQhMTssaj9nNidwJyEiJjckJCExTExMJHlhRSJlISM5JCExSzVdRmUwJ3omISImNyQkITFubW0iPnMlSGEhIzkkITFVLyQpKj5ucTAmISImNyQkISpOKjQpKlwhIigkITEyJEg6eD1hRyUhIiY3JCQhKkRiXGMlISIoJCEyMSIqNGZcUltkJCEiJzckJCEqbFN2OSUhIigkITJiU19UL3E0JkghIic3JCQhMW5tOy8jKVtvUCEjOSQhME1FXFBGaVYjISIlNyQkITJOTExMPWV4SiQhIzokITJYb1xvYDMkKSk9ISInNyQkITJNTExMdElmJEghIzokITJNQCsjKTQkb3k5ISInNyQkISx2anU8XCMhIiokITJhWklZM0VeMSIhIic3JCQhMk1MTExCQCcpNCMhIzokITEwMWROJSlIYnYhIic3JCQhLHZqcHNtIiEiKiQhMWAvam9xa29aISInNyQkISxEIjRfYzchIiokITBjYSMzS1kzRiEiJjckJCExTExMJDN4JXojKSEjOiQhMk4lUU1VNyZmPCIhIig3JCQhMUxMTDNzJFFNJSEjOiQhMXQ6K3UnNHBCJCEiKDckJCExbm1tbTt6cikqISM8JCExOiQpMycqZXdyOyEjNTckJCIxTExMZXp3NVYhIzokITJDUUApKTNwUUUjISIqNyQkIit2JFEjXCIpISIqJCExdGhhQzRdITQpISIpNyQkIjJMTEwkZSIqW0g3ISM6JCEyOiopPmd1ejolPSEiKTckJCIpZHhkOyEiJyQhMThGM1JZMFtMISIoNyQkIitEMHh3PyEiKSQhMWAyJikpSFBWRCYhIig3JCQiLERjcEBbIyEiKiQhL3RSRXMiZl0oISImNyQkIit2Z0hLSCEiKSQhMmAkPiJvIWZdWjUhIig3JCQiMW5tbW1adk9MISM5JCExcG8jcC8wa04iISInNyQkIip2KydvUCEiKCQhMlpWRF0jKj0tdCIhIig3JCQiMUxMJGVSPCpmVCEjOSQhMnR6K0E8Iz4zQCEiKDckJCIqJilIeGUlISIoJCEyJSkzXSFmKDNUYyMhIig3JCQiMW5tO0ghby0qXCEjOSQhMiYpNG5ZKDMiUS4kISIoNyQkIixEVE81VCYhIiokITJQMk53NikpcGMkISIoNyQkIjFubW07V1RBZSEjOSQhMjg9bWtvcSpIVCEiKDckJCIsRDEqM2BpISIqJCEyJjRuZzo7YWpaISIoNyQkIjFMTExMKnp5bSchIzkkITFFdkk5InBrVCYhIic3JCQiMU1MTDNOMSM0KCEjOSQhMWlnWyk9UHY3JyEiJzckJCIxbm07SFl0N3YhIzkkITFYQ0I4XSx3byEiJzckJCIpeEcqKnkhIickITFeN0tLQyE9ZyghIic3JCQiMW1tbVQ2S1UkKSEjOSQhMmxSZE0wNyV5JSkhIig3JCQiMU1MTExiZFEoKSEjOSQhMSdSc1QxeUhJKiEiJzckJCIsRE9sNTsqISIqJCEyVkE1ViV5VUE1ISInNyQkIix2LlVhYyohIiokITJQckFQXCJvOTYhIic3JCQiJSs1ISIiJCEyPG0tVCtpIz03ISInLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhJSs1ISIiJCIlKzUhIiIlKERFRkFVTFRHLSUrQVhFU0xBQkVMU0c2JC1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRJyYjOTUxOzYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EmZmFsc2U2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdub3JtYWw2IlEhNiItJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiQ/IyEiIi0lKUJPVU5EU19ZRzYjJCIkPyIhIiItJS1CT1VORFNfV0lEVEhHNiMkIiU1TyEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiU/USEiIi0lKUNISUxEUkVORzYi US9IMix+cHNpMix+cGhpMjYi NyheJCQiRF0tWm5YKy9obk51SzVyeUpTJSEjSyQiRGs6M18tKVtacig0Y2l2IkgkKjRJISNQJCJERysnbzNRZFN4MSNII2YqZSopPjAnISNRXiQkIkRSI2UuYyk9RTdURDEtPWt5bEgmRiwkIkRyJnAvKVxBdikqeVwmcDAvPTVKIikhI1ReJCQiRC4lXElSPlBuSzhkJUc/PCp6a0UhI04kIkRQKXlPeDZ5UCJvdChmQ28jMzsjPSEjU14kJCJEalYqSDkieiopcGRiRzpzP3lATCNGNiQiRFF1QEhFUS9POzJ4IVwjeTZpZiRGLF4kJCJEbVAvTzBeaic0cFVQQ3p0KHAqXEY2JCJERVUmcHVnIj0vIVxJSzxseVU5T0Ys LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEnc2VyaWVzRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiktRiw2JVEpTGFtYmVydFdGJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRictRjY2JC1GIzYmLUYsNiVRImFGJ0YvRjIvJStleGVjdXRhYmxlR0Y+LyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRj9GPy1JI21vR0YkNi1RIixGJ0Y/LyUmZmVuY2VHRj4vJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGPi8lKnN5bW1ldHJpY0dGPi8lKGxhcmdlb3BHRj4vJS5tb3ZhYmxlbGltaXRzR0Y+LyUnYWNjZW50R0Y+LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRidGRUZIRkpGP0Y/LUZONi1RIjtGJ0Y/RlFGU0ZVRldGWUZlbkZnbkZpbi9GXW9RLDAuMjc3Nzc3OGVtRidGSEZKRj8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ky9JImFHNiIiIiJGJSEiIiIiIyMiIiRGJ0YpIyEiKUYpIiIlIyIkRCIiI0MiIiYtSSJPRyUqcHJvdGVjdGVkRzYjRiUiIic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEoY29sbGVjdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRKGNvbnZlcnRGJ0YvRjItRjY2JC1GIzYoLUYsNiVRJ3Nlcmllc0YnRi9GMi1GNjYkLUYjNiktRiw2JVEjZzJGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRlMvJSpzeW1tZXRyaWNHRlMvJShsYXJnZW9wR0ZTLyUubW92YWJsZWxpbWl0c0dGUy8lJ2FjY2VudEdGUy8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRJnNpZ21hRicvRjBGU0ZPRkstSSNtbkdGJDYkUSMyMEYnRk8vJStleGVjdXRhYmxlR0ZTRk9GT0ZLLUYsNiVRKHBvbHlub21GJ0YvRjJGaG9GT0ZPRktGYG9GaG9GT0ZPLUZMNi1RIjtGJ0ZPRlFGVEZWRlhGWkZmbkZobkZqbi9GXm9RLDAuMjc3Nzc3OGVtRidGaG9GTw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LC4qLiMiIiUiIiQiIiJJI3V8aXJHNiJGJylJJGV0YUdGKUYmRicpSSNQaUclKnByb3RlY3RlZEdGJiEiIi1JJGV4cEc2JEYuSShfc3lzbGliR0YpNiMqJl4jRidGJ0YrRidGJylJJ3NpZ21hfGlyR0YpIiInRidGJyooLCYqLCMiIiNGJkYnRihGJylGLUYlRi9GKkYnLCYqKEY+RidGKEYnRi1GJ0YnRitGJ0YnRi8qKiMiIilGJkYnKUYtIiImRi8pRitGRkYnRihGJ0YvRidGMEYnKUY4RkRGJ0YnKigsKCosI0Y+IiM6RidGKEYnRkVGL0YqRicsKCooRk1GJylGKEY+RicpRi1GPkYnRicqKkZGRidGKEYnRi1GJ0YrRidGJyomRj5GJylGK0Y+RidGJ0YnRicqLEYkRicpRi1GOUYvRkdGJ0YoRidGQEYnRicqLEZDRidGR0YnLCYqJkYoRidGUUYnRicqJEZURidGL0YnKUYtIiIoRi9GKEYnRi9GJ0YwRicpRjgiIzVGJ0YnKigsKiosI0YlRk1GJ0ZlbkYvRkdGJ0YoRidGTkYnRi8qLCNGJyIjWEYnRihGJ0ZWRi9GKkYnLCwqKCIkZyJGJylGKEYmRidGLEYnRicqKkZfb0YnRlBGJ0ZRRidGK0YnRicqKiIjN0YnRihGJ0YtRidGVEYnRicqJkYlRidGKkYnRicqKCIjU0YnRihGJ0YqRidGL0YnRi8qLCNGRCIiKkYnRkdGJywoKihGJkYnRlBGJ0Y/RidGJyoqRjlGJ0YoRidGVEYnRlFGJ0YnKiZGPkYnKUYrRiVGJ0YvRicpRi1GXHBGL0YoRidGJyouRiRGJ0ZHRidGWEYnKUYtRkRGL0YoRidGQEYnRidGJ0YwRicpRjhGZm9GJ0YnKigsLCouI0YlRlxwRidGR0YnRl1wRicpRi1GaG5GL0YoRidGQEYnRi8qLCNGPkZfb0YnRmRwRi9GR0YnRihGJ0Zgb0YnRicqLCNGJyIkSSdGJ0YoRidGZW5GL0YqRicsMComIiM7RidGYXBGJ0YnKigiJXZWRicpRihGJUYnRj9GJ0YnKioiJT82RidGY29GJ0YsRidGK0YnRicqKiIkXyNGJ0ZQRidGUUYnRlRGJ0YnKioiI2NGJ0YoRidGLUYnRipGJ0YnKipGZ3FGJ0ZQRidGKkYnRi1GJ0YvKigiJGcmRidGYXBGJ0YoRidGL0YnRicqLEZpcEYnRkdGJywqKihGXHBGJ0Zjb0YnRlZGJ0YnKipGOUYnRlBGJ0ZURidGP0YnRicqKkZmb0YnRmFwRidGKEYnRlFGJ0YnKiZGPkYnKUYrRjlGJ0YvRicpRi0iIzZGL0YoRidGLyouRlxvRidGR0YnRlhGJ0ZicEYvRihGJ0ZORidGL0YnRjBGJylGOCIjOUYnRicqKCwuKiwjRiciJWc3RidGKEYnRmRwRi9GKkYnLDQqKCImVyI9RicpRihGRkYnRkVGJ0YnKipGZHFGJ0ZlcUYnRj9GJ0YrRidGJyoqIiQnKilGJ0Zjb0YnRixGJ0ZURidGJyoqIiRvIkYnRlBGJ0ZRRidGKkYnRicqKiIjS0YnRihGJ0YtRidGYXBGJ0YnKiZGREYnRkdGJ0YnKioiJSFbJUYnRmNvRidGKkYnRlFGJ0YvKioiJVNBRidGUEYnRmFwRidGLUYnRi8qKCIkRyhGJ0YoRidGR0YnRi9GJ0YvKi4jRiVGX29GJ0ZHRidGXXBGJ0ZmckYvRihGJ0ZORidGJyosI0YnIiQ6JEYnRmJwRi9GR0YnRihGJ0ZgcUYnRi8qLiNGPkZccEYnRkdGJ0ZgckYnKUYtRmZvRi9GKEYnRkBGJ0YnKi5GXHFGJ0ZHRidGWEYnRmpwRi9GKEYnRmBvRidGJyosI0ZERl9vRidGR0YnLCoqKEZpb0YnRmVxRidGZHBGJ0YnKipGTUYnRmNvRidGVEYnRlZGJ0YnKioiIz9GJ0YoRidGZXJGJ0ZRRidGJyomRj5GJylGK0ZERidGL0YnKUYtIiM4Ri9GKEYnRidGJ0YwRicpRjhGYnFGJ0Yn LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUkmbWZyYWNHRiQ2KC1GIzYoLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNiktRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmpuLUYjNiwtRiM2Ki1JI21uR0YkNiRRIjZGJ0Y5LUY2Ni1RMSZJbnZpc2libGVUaW1lcztGJ0Y5RjtGPkZARkJGREZGRkgvRktRJjAuMGVtRicvRk5GaG8tRmFvNiRRIklGJ0Y5LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrZXhlY3V0YWJsZUdGPS8lKXJlYWRvbmx5R0YxLyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RidGOUZkby1GLDYlUS4mdmFyZXBzaWxvbjt8aXJGJ0YvRjJGZG8tRlU2JS1GWDYkLUZVNiUtRjY2LVEvJkV4cG9uZW50aWFsRTtGJ0Y5RjtGPkZARkJGREZGRkhGZ28vRk5RLDAuMTExMTExMWVtRictRiM2Ki1GUDYoLUZhbzYkUSI5RidGOS1GYW82JFEiMkYnRjkvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmRyLyUpYmV2ZWxsZWRHRj1GZG8tRiM2KC1GVTYlLUYsNiVRKSZzaWdtYTt8aXJGJ0YvRjJGXHIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRl1wRmBwRmJwRmRwRjlGXXBGYHBGYnBGZHBGOUZgc0Y5RlxyRmBzRl1wRmBwRmJwRmRwRjlGXXBGYHBGYnBGZHBGOUY5LUYjNiotRmFvNiRGYXJGOS1GNjYtUSIvRidGOUY7Rj4vRkFGMUZCRkRGRkZIL0ZLUSwwLjE2NjY2NjdlbUYnL0ZORlx0LUZhbzYkUSIzRidGOUZdcEZgcEZicEZkcEY5RmBzRl1wRmBwRmJwRmRwRjktRiM2KEZecUZdcEZgcEZicEZkcEY5Rl9yRmJyRmVyRmdyRmBwL0ZlcFEoMkR+TWF0aEYnRjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYpLCQqKCwkKiYiIiciIiJeI0YpRilGKUYpSS0mdmFyZXBzaWxvbjtHNiJGKSktSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiw2IywkKiYjIiIqIiIjRikpSSgmc2lnbWE7R0YsRjhGKUYpRjhGKSEiIiNGKSIiJEYpRi5GOw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEpc2ltcGxpZnlGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2Jy1GLDYlUSJ4RidGL0YyLUkjbW9HRiQ2LVEiLEYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0ZFLyUqc3ltbWV0cmljR0ZFLyUobGFyZ2VvcEdGRS8lLm1vdmFibGVsaW1pdHNHRkUvJSdhY2NlbnRHRkUvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GLDYlUSlzeW1ib2xpY0YnRi9GMi8lK2V4ZWN1dGFibGVHRkVGQUZBRmVuRkE= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KipeIyIiIkYkKSIiJyNGJCIiJEYkKUktJnZhcmVwc2lsb247RzYiRidGJC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKzYjLCQqJiNGKCIiI0YkKUkoJnNpZ21hO0dGK0Y1RiQhIiJGJA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2Ji1GLDYlUSVzcXJ0RicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUY2NiQtRiM2Jy1JJW1zdXBHRiQ2JS1JI21uR0YkNiRRIjZGJ0Y/LUYjNictSSZtZnJhY0dGJDYoLUZJNiRRIjFGJ0Y/LUYjNictRkk2JFEiM0YnRj9GLy8lK2V4ZWN1dGFibGVHRj4vJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGMi8lLmxpbmV0aGlja25lc3NHRlMvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXG8vJSliZXZlbGxlZEdGPkYvRllGZW5GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictSSNtb0dGJDYtUScmc2RvdDtGJ0Y/LyUmZmVuY2VHRj4vJSpzZXBhcmF0b3JHRj4vJSlzdHJldGNoeUdGPi8lKnN5bW1ldHJpY0dGPi8lKGxhcmdlb3BHRj4vJS5tb3ZhYmxlbGltaXRzR0Y+LyUnYWNjZW50R0Y+LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGaHAtRkY2JS1GNjYkLUYjNiUtRkY2JS1GSTYkUSIyRidGPy1GIzYoLUZlbzYtUSomdW1pbnVzMDtGJ0Y/RmhvRmpvRlxwRl5wRmBwRmJwRmRwL0ZncFEsMC4yMjIyMjIyZW1GJy9GanBGXHItRkk2JFEjNTNGJ0Y/Ri9GWUZlbkYyRmFvRllGP0Y/RkxGYW9GWUY/Rj9GWUY/Rj9GWUY/ LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCJEL2svQTJuUWZsWWdUVmdYXyZIISNQ LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEnZmFjdG9yRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNictRiw2JVEkaW50RidGL0YyLUY2NiQtRiM2MC1GNjYkLUYjNjItRiw2JVEiYUYnRi9GMi1JI21vR0YkNi1RJyZzZG90O0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGUC8lKXN0cmV0Y2h5R0ZQLyUqc3ltbWV0cmljR0ZQLyUobGFyZ2VvcEdGUC8lLm1vdmFibGVsaW1pdHNHRlAvJSdhY2NlbnRHRlAvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0Zpbi1JJW1zdXBHRiQ2JS1GLDYlUSJ4RidGL0YyLUYjNictSSNtbkdGJDYkUSIzRidGTEYvLyUrZXhlY3V0YWJsZUdGUC8lMGZvbnRfc3R5bGVfbmFtZUdRKDJEfk1hdGhGJ0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GSTYtUSIrRidGTEZORlFGU0ZVRldGWUZlbi9GaG5RLDAuMjIyMjIyMmVtRicvRltvRmRwLUYsNiVRImJGJ0YvRjJGSC1GXW82JUZfby1GIzYnLUZlbzYkUSIyRidGTEYvRmhvRmpvRjJGXXBGYHAtRiw2JVEiY0YnRi9GMkZIRl9vRmBwLUYsNiVRImRGJ0YvRjJGaG9Gam9GTEZMRkgtRiw2JVEkY29zRicvRjBGUEZMLUY2NiQtRiM2JkZfb0Zob0Zqb0ZMRkwtRkk2LVEiLEYnRkxGTi9GUkYxRlNGVUZXRllGZW5GZ24vRltvUSwwLjMzMzMzMzNlbUYnRl9vLUZJNi1RIj1GJ0ZMRk5GUUZTRlVGV0ZZRmVuL0ZoblEsMC4yNzc3Nzc4ZW1GJy9GW29GaHItRkk2LVEqJnVtaW51czA7RidGTEZORlFGU0ZVRldGWUZlbkZjcEZlcC1JJm1mcmFjR0YkNigtRiw2JVEjUGlGJ0ZpcUZMRltxLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zocy8lKWJldmVsbGVkR0ZQLUZJNi1RIy4uRidGTEZORlFGU0ZVRldGWUZlbkZjcEZqbi1GXnM2KC1GIzYoRmRvRkhGYHNGaG9Gam9GTEZbcUZjc0Zmc0Zpc0ZbdEZob0Zqb0ZMRkxGaG9Gam9GTEZMLUZJNi1RIjtGJ0ZMRk5GYXJGU0ZVRldGWUZlbkZnbkZpckZob0Zqb0ZM LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCMiIiIiIiNGJUkjUGlHJSpwcm90ZWN0ZWRHRiUsKiooIiIlRiVJImJHNiJGJUYnRiVGJSomIiNDRiVJImFHRi1GJSEiIiooIiIoRiVGMEYlKUYnRiZGJUYlKiZGK0YlSSJjR0YtRiVGJUYlRjE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbW9HRiQ2LVEifkYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEnc2VyaWVzRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNi0tRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRlgtRkc2JVEmYWxwaGFGJy9GS0Y0Ri8tRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1JJW1zdXBHRiQ2JS1GRzYlUSYmZXRhO0YnRmduRi8tRiM2Iy1JI21uR0YkNiRRIjJGJ0YvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GLDYtUSIrRidGL0YyRjVGN0Y5RjtGPUY/RldGWS1GRzYlUSRsb2dGJ0ZnbkYvLUZQNiQtRiM2Ji1GRzYlUSRleHBGJ0ZnbkYvLUZQNiQtRiM2J0ZaRmhuRltvLUYsNi1RKCZtaW51cztGJ0YvRjJGNUY3RjlGO0Y9Rj9GV0ZZLUZHNiVRJ2hwcmltZUYnRkpGTUYvRltxLUZkbzYkUSIxRidGL0YvLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GRzYlUSRldGFGJ0ZnbkYvRmRxRmNvRi8tRiw2LVEiO0YnRi9GMkZncUY3RjlGO0Y9Rj9GQS9GRVEsMC4yNzc3Nzc4ZW1GJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KylJJGV0YUc2Ii1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiMqJiwmKiwiIiMiIiJJI3V8aXJHRiRGLy1JJGV4cEdGJzYjLCQtSSlMYW1iZXJ0V0dGJzYjKiYpSSdzaWdtYXxpckdGJEYuRi9GMEYvISIiRi9GOUYvSSNQaUdGKEY7Ri8qKEYuRi9GPEY7RjVGL0Y7Ri9GI0YvIiIhLCYqKkYwRi9GMUYvRjlGL0Y8RjtGLyomRjxGO0Y1Ri9GO0YvLUkiT0dGKDYjRi9GLg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/LogNormalCharacteristicFunction2.mw000066400000000000000000003234771307543307100252640ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZhcC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJ0ZPLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYtLUYsNiVRInVGJ0YvRjItRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLRlcvRk5RLDAuMzMzMzMzM2VtRictRiw2JVEmc2lnbWFGJy9GMEY9RjlGYm9GZW9GaW8tRiw2JVEoZXBzaWxvbkYnRmNwRjlGYm9GZW9GOS1GNjYtUSI7RidGOUY7RlxwRkBGQkZERkZGSEZdcEZNLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGXXAvRk5GV0ZPLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZmbzYkUSMzNUYnRjlGNUZPLUYsNiVRJ3ZhbG51bUYnRi9GMkZhcS1GLDYlUSZvbWVnYUYnRmNwRjktRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoLUZmbzYkUSIxRidGOS1GIzYjRmBwLyUubGluZXRoaWNrbmVzc0dGZXIvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXHMvJSliZXZlbGxlZEdGPUZpb0ZqcEZgcEZdci1GZm82JFE3MC4xNzMzNzY0ODYyNDgzMjY4Mjc2NEYnRjlGaW9GX29GXXItRmZvNiRRMzIuMDg4Mzc1MjgwMDQzMTg0N0YnRjlGNUZPLUY2Ni1RIiNGJ0Y5RjtGPkZARkJGREZGRkhGXXBGXXEtRiw2JVFOdmFsbnVtJkFzc2lnbjtzaWdtYT0xLjAsdT0yLjA4ODM3NTI4MDA0MzE4NDc6RidGL0YyRk8tRiw2JVEiZ0YnRi9GMkZhcS1GLDYlUSRleHBGJ0ZjcEY5LUZbbzYkLUYjNictRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORlt1Rl9vLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZdcEZdcUZgdC1GW282JC1GIzYlLUklbXN1cEdGJDYlLUYsNiVRKCZzaWdtYTtGJ0ZjcEY5LUYjNiMtRmZvNiRRIjJGJ0Y5LyUxc3VwZXJzY3JpcHRzaGlmdEdGaG9GXXUtRiw2JVEidEYnRi9GMkY5RjlGXXVGYHQtRltvNiQtRiM2JEZndC1GYXI2KC1GIzYnLUYsNiVRIklGJ0YvRjJGXXUtRiw2JVEjUGlGJ0ZjcEY5Rl11RmF2Rmp1RmhyRmpyRl1zRl9zRjlGXXVGYHQtRltvNiQtRiM2JEZndC1GYXI2KC1GIzYlRmR1Rl11LUZldTYlRmF2Rmp1Rl92Rmp1RmhyRmpyRl1zRl9zRjlGNUZPRk8tRiw2JVEiSEYnRi9GMkZhcS1GYXI2KC1GIzYmRmBwRl11RmB0LUZbbzYkLUYjNiMtRmFyNigtRmV1NiUtRltvNiQtRiM2Iy1GYXI2KEZfdy1GIzYlRlx2Rl11RmBwRmhyRmpyRl1zRl9zRjlGanVGX3ZGanVGaHJGanJGXXNGX3NGOS1GIzYkLUYsNiVRJXNxcnRGJ0ZjcEY5LUZbbzYkLUYjNiZGXHZGXXVGanBGX3dGOUZockZqckZdc0Zfc0Y1Rk9GTy1GLDYlUSZwcmludEYnRi9GMi1GW282JC1GIzYlLUYsNiNRIUYnLUkjbXNHRiQ2I0ZfdEZjekY5RmdwRmpwRk8tRiw2JVElcGxvdEYnRi9GMi1GW282JC1GIzYqLUZbbzYmLUYjNictRiw2JVEjUmVGJ0ZjcEY5LUZbbzYkLUYjNiQtRiw2JVElc3Vic0YnRi9GMi1GW282JC1GIzYlRmdxRmlvRl10RjlGOUZpby1GLDYlUSNJbUYnRmNwRjlGZ1tsRjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGaW9GYXZGXXJGZ3QtRmZvNiRRIzI1RidGOS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZqdEZdcUZbXWxGOUZncEZqcEZPLUYsNiVRJHBzaUYnRmNwRjlGYXEtRiw2JVEkSW50RidGL0YyLUZbbzYkLUYjNipGXXRGaW9GYXZGXXJGZ3QtRiw2JVEpaW5maW5pdHlGJ0YvRjJGXl1sRltebEY5RjVGTy1GLDYlUSRwaGlGJ0ZjcEY5RmFxRlx4Rl11RmFdbEZncEZPRk9GXHotRltvNiQtRiM2JUZjei1GZ3o2I1EqSCxwc2kscGhpRidGY3pGOUZncEZPRmpwLUYsNiVRJmV2YWxmRidGL0YyLUZbbzYkLUYjNiRGW1xsLUZbbzYkLUYjNiVGZ3FGaW8tRltvNiYtRiM2J0ZceEZpb0ZhXWxGaW9GXl5sRjlGZVxsRmhcbEY5RjlGZ3BGanA= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder USJnNiI= LSUlUExPVEc2Jy0lJ0NVUlZFU0c2JDdfeTckJCEkXSMhIiIkIiIhISIiNyQkITJtbW0iSFUsIlIjISM6JCIxPTFjRGJKUG0hIz83JCQhMk5MM0ZIJz0nSCMhIzokITE6XkNaKEc3ZyghI0A3JCQhMm1tOy9PVSYqPSMhIzokITFKT2dgPVUlWyMhIz43JCQhMm5tO0hfIj4jMyMhIzokIjJPKyUqKlJRInBMIiEjPzckJCEvRDE5N3hHPyEjNyQiMUVbR1hNKDMmZiEjPjckJCEyTUwzXyE0TnY+ISM6JCIxak4sdChIVEgpISM+NyQkIS5EMVdCZSM+ISM2JCIyeDMkZm0nZldrJSEjPzckJCEybm1UZyhmSHc9ISM6JCExLDYkUjpwUGUmISM+NyQkITFMJDNfOjhdIz0hIzkkITJEQStDUzg6Jj0hIz43JCQhLnZWTElQeCIhIzYkITEkSDZ1P0R6UCMhIz03JCQhMk1MM0Y5ci93IiEjOiQhMTpqeS5zR2FBISM9NyQkITJvbVQ1Jj5AWjwhIzokITFYJFtYcGl5Kj4hIz03JCQhLnYkZkYmUnQiISM2JCExKm8+cj00UWciISM9NyQkITJMTDN4YyRwPzwhIzokITIuJm83O00jUjIiISM+NyQkIS52Vj12VHAiISM2JCIyJWV5QmN0YSZbJCEjPzckJCEybW1UNSFvbG47ISM6JCIxb095RmRvK0AhIz03JCQhLERZQjdrIiEiKiQiMjB6TXNXLyYpKVEhIz43JCQhMk1MZVI3IXo5OyEjOiQiMVVmPiFRJilcTSYhIz03JCQhL3ZvYU1kLDshIzckIjFsRiJRTmpLI2UhIz03JCQhMm5tO2F5YyQpZSIhIzokIjE8QyVcO0E4MichIz03JCQhMkskZTk7LDl2OiEjOiQiMSx2QCNwPiZbZyEjPTckJCEudm9XQj5jIiEjNiQiMV54O0ZVSEJkISM9NyQkITJuO2E4ZFZ2XSIhIzokIjI9aCJbLHR3SDUhIz43JCQhMkxMTGVwakpYIiEjOiQhMVBpLWwlPV9HKCEjPTckJCEybTthUXk5I0g5ISM6JCEyX0hBMWZnInA1ISM9NyQkIS52PShlRTA5ISM2JCEyTjFZI1E9RS44ISM9NyQkITJuVCYpZVQiSCRSIiEjOiQhMkxDTU1qQTRPIiEjPTckJCEyTSRlKilmcEoiUSIhIzokITJCIVsvInB1LVAiISM9NyQkITBEMVJdVSRwOCEjOCQhMmgoSCIpSC1YRTghIz03JCQhMm5tO3ovb3ROIiEjOiQhMiQ+X0xDLUtFNyEjPTckJCEyTUwzRldZTUkiISM6JCExcmZMJkhtay0iISM9NyQkISx2JFtfXDchIiokIjEyPilSNyEzQzshIzw3JCQhLURKTFhBNyEjNSQiMmwxMnIpSEtRQiEjPTckJCErRD1RJj4iISIpJCIyZS9sMDdYKTRGISM9NyQkIS92VltSaCk9IiEjNyQiMi55J3peejpKRiEjPTckJCEudj0yWT09IiEjNiQiMWlRU1g+Qz9GISM8NyQkIS9ESiY+eV08IiEjNyQiMSd6VV4qeiZlbiMhIzw3JCQhLXY9LkpvNiEjNSQiMTIiKjQxKVFyZiMhIzw3JCQhLkRjY3VaOiIhIzYkIjIlW1JSXitDTkIhIz03JCQhLEQiKVE3OSIhIiokIjIxT0Vba1lmJD4hIz03JCQhKS86OjYhIickIjF1USZwTFRyOykhIz03JCQhLHYpPjEqMyIhIiokITF2UyEqPlVOI1EnISM9NyQkISt2TihIMSIhIikkITBfbllXJzMwQSEjOzckJCEsRDsmKW8uIiEiKiQhMSQ+NWQmM3MuTyEjPDckJCEyblROWVElPjg1ISM6JCExJnlQTVtyVVslISM8NyQkITFNJDN4MU9dKikqISM6JCExLnY0VDU7LFshIzw3JCQhL0QxKkdHImUnKiEjOCQhMU4hPkpSJj1NVyEjPDckJCExbm1UNTBBQCUqISM6JCEyOk0weG8iKWZOJCEjPTckJCEwRDEqeXRPIUcqISM5JCExMzlfPmxRMUMhIzw3JCQhMU1lUlpVXlIiKiEjOiQhMkgieS5pV1duNyEjPTckJCExPGEpZTZoJykqKikhIzokIjImKlt2Jm9IZGw3ISM/NyQkIS52Vil6IXkmKSkhIzckIjJsTyR5QyhSXFAiISM9NyQkITElZWtHJlsmcHIpISM6JCIxRDwnejhXQXYjISM8NyQkITFuVE5APDV3JikhIzokIjE5KWYtdVBDMiUhIzw3JCQhMHZWKSplW19WKSEjOSQiMk5zT1IpKT1ARSYhIz03JCQhMU1MTGVhUiVIKSEjOiQiMSZbSzZ5LjFEJyEjPDckJCExTCQzLVF1XTwpISM6JCIxYkImcC5VRylvISM8NyQkITFNTDMtTHZiISkhIzokIjFrQDlnL20iSCghIzw3JCQhMUwzLWpGNCcqeiEjOiQiMXQhKVxhRyhRUyghIzw3JCQhMU0kZVJBS2skeiEjOiQiMT40WyRcVDZYKCEjPDckJCExTGUqW29ybih5ISM6JCIxaHRJKjNhOlYoISM8NyQkITJPTExlOTZyInkhIzskIjEyd11YV3pWdCEjPDckJCEyTkwkZSopKm8leXYhIzskIjFHeXZGTidvSSchIzw3JCQhMUxMTExvIylSdCEjOiQiMV47OVNHT1RVISM8NyQkITE8YVFgIUc1PyghIzokIjJ4PypmIXBSKVxFISM9NyQkIS92VnQjSEExKCEjOCQiMXR1USMpKVsoPSYpISM9NyQkITEkZSpbJFxJTSNwISM6JCEyIyl6a3EtVjIyIiEjPTckJCExbjthODxqJXknISM6JCEyalRPN1MnNEVJISM9NyQkITB2JGZMSCRlaychIzkkITE6ISopSF5zbCJcISM8NyQkITFMZWtgVC4ybCEjOiQhMU91YXRbelZtISM8NyQkITJsInpwdGBCb2ohIzskITEiUWlyeCp6OCIpISM8NyQkIS12JGZPJUhpISM2JCExOTs8VT89VSMqISM8NyQkITE7eiVcOndsNSchIzokITFiYVJrdU8qKikqISM8NyQkITFMZTk7ZHIkKWYhIzokITIsOD08IVFzPjUhIzw3JCQhMjp6V25cJkdBZiEjOyQhMmt6NilcP08/NSEjPDckJCEwdlZ0RmIzJ2UhIzkkITIoKjNZUTJnNywiISM8NyQkITE0RiV6MEQlKnomISM6JCExJj0vcEsoZUIqKiEjPDckJCExbjthUVsqenQmISM6JCExJilwOGFAJ3BqKiEjPDckJCExJGVSKCpSTV5oJiEjOiQhMS5IMXVDS3goKSEjPDckJCEvdiQ0J1JGI1wmISM4JCExKUg5Kj0yTWN2ISM8NyQkITJrVE5AXzglcGAhIzskITFPRCgqR2MlPSwnISM8NyQkITFNTEwkM2BsQyYhIzokITEwTj0yX3AmPiUhIzw3JCQhMTxhajRkdjZeISM6JCEyZEphWyp5LW4+ISM9NyQkIS92JGZMZXAoXCEjOCQiMXR0bDpHakhUISM9NyQkITEkZVJBJzQ7VVshIzokIjInZmNkNzEyT0chIz03JCQhMW47YSllanRxJSEjOiQiMVRDeiw5RCo9JiEjPDckJCEwdlZbQG1EZCUhIzkkIjE5VnVYZTNndCEjPDckJCExTGU5VClveFYlISM6JCIxJXpielVMQkMqISM8NyQkITE7elduOShISSUhIzokIjIxJ1smUVNJVDIiISM8NyQkIS12JDR1Im9UISM2JCIyI2Z2SVdqKHk8IiEjPDckJCEwdm9hZyUqUjUlISM5JCIybjspKW93Jkg0NyEjPDckJCEvdj08XiIpUlMhIzgkIjJMLz9jZXYlRzchIzw3JCQhMEQxKkdjanZSISM5JCIyNElfIyk9M15CIiEjPDckJCEuRDE5YzkiUiEjNyQiMnJnUEtzPiFINyEjPDckJCEvRDFrcjQkeSQhIzgkIjItUT4nRyZwJ3k2ISM8NyQkISx2PVFabCQhIzUkIjIlbyRmNVAmeXk1ISM8NyQkIS92JDRAempfJCEjOCQiMWpBaShRJioqRyQqISM8NyQkIS52VkI/ISlSJCEjNyQiMV5na1BWKmVZKCEjPDckJCEvRCJ5RGgncEshIzgkIjFsaCQqZjxjc18hIzw3JCQhLUQiRy04OSQhIzYkIjElKlE0V3A8UUchIzw3JCQhMiVlKik0PXhMdUkhIzskIjEobylvViMpcDA6ISM8NyQkITJtInolXDp0dCskISM7JCIxUnVgTSU0LV0iISM9NyQkITF2b3oiZjMvJUghIzokITIjNChIcWBhTEAiISM9NyQkITJNJGVrR1NXdEchIzskITFzVVFfKXAob0QhIzw3JCQhMjp6JVxsJXprIUchIzskITIleV1DRXFmK1IhIz03JCQhMHZWQiFcXlJGISM5JCEydW8neT9yVSQ+JiEjPTckJCEyJDNGPlIuYnNFISM7JCExS0c3LnBES2shIzw3JCQhMmxtVGd4JmUwRSEjOyQhMWhDJHk5ckVnKCEjPDckJCEyTGVSKFxtbHJDISM7JCExRyQ+ait4WG8qISM8NyQkIS92VkJ2c1BCISM4JCExKW8nKTRzLFU4IiEjOzckJCEybFROclIpei5BISM7JCEyeCdIOWgvdVw3ISM8NyQkITJMTEwzRnApcD8hIzskITEsZjgjUVwnNDghIzs3JCQhMkwkZWt5PCpRIz0hIzskITJNV2onWy9GbjchIzw3JCQhMkxMZWtHOXpkIiEjOyQhMSgqM1FiLTRPNSEjOzckJCEyTGVrLmFEXFgiISM7JCExZStMM0JaKmYpISM8NyQkITJMJDNGJXpPPkwiISM7JCEwdT0pSGpxQGwhIzs3JCQhMkwzeCJbIVsqMzchIzskITE2eEA4RTY0VSEjPDckJCEyTUwkMy0kZmYzIiEjOyQhMkMjUSoqXHEyXzwhIz03JCQhMjwvXkpKSCc+NSEjOyQhMTgpZWtlaForJSEjPTckJCEvdj1VSypIYCohIzkkIjFLbkNwRTIsJiohIz03JCQhMSVla0dOJHBwKSkhIzskIjJYJlJ3diMpWyVHIyEjPTckJCExbjthak1SMSMpISM7JCIxY2k2TT50KGUkISM8NyQkITFMZSpbbyR6em8hIzskIjEoUT5FNWlMLychIzw3JCQhLUQxUj5gYiEjNyQiMVZgNC56KzQjKSEjPDckJCExblRnRlRmRVUhIzskIjFvVTRLZDQiKioqISM8NyQkITJOTGUqW1YqKioqRyEjPCQiMkEnRycpUShwOTgiISM8NyQkIS9ESnFYUnQ6ISM5JCIyKVtObXU8bzc3ISM8NyQkITJubW1tInolelkjISM9JCIyYXY7WjRmKVI3ISM8NyQkIjJMJDNGVyZwNjgiISM8JCIyQyMqMz52LDBAIiEjPDckJCIyTkwzLSlRODREISM8JCIyI3piQk0kKSlbNyIhIzw3JCQiMk0kZTk7Iyk0KClRISM8JCIxNGEhUiM9dyIpKSohIzw3JCQiMU1MM19EMWxfISM7JCIxMjdXLl9VeiEpISM8NyQkIjFMMy0pKW8tVm0hIzskIjIxbDUlRzJjUGYhIz03JCQiMU0kZVJBIio0LSkhIzskIjFkJXAnKSlSYW1OISM8NyQkIjFMZSopZmImKilSKiEjOyQiMkNGTy9WamIzIiEjPTckJCIyS0wkZSopPnB4NSEjOyQhMilvL00iKTRlJFEiISM9NyQkIjJtOy8sPld3PiIhIzskITFaJSlvQFQvSk0hIzw3JCQiLkQxUidmPDghIzckITIvcSp5RnZWMmAhIz03JCQiMk0kZTkiZlt2ViIhIzskITFiIUcxTnAlW3AhIzw3JCQiMm9tbTt6K3ZiIiEjOyQhMCg9IlIqZj4rJCkhIzs3JCQiL3Y9IypIWHg7ISM4JCEwKlJ5bDkkM0sqISM7NyQkIjJNTDNGPjB1eiIhIzskITE6ITRcOFA/KSoqISM8NyQkIjB2b0hIIlFkPSEjOSQhMj1cZGZuJ0c8NSEjPDckJCIybztIS1JkdCI+ISM7JCEyJ0hMW0BgJ3AtIiEjPDckJCIyTWUqWyRcTHQoPiEjOyQhMlBKJmUpeSdHRjUhIzw3JCQiLXYkZjR0LiMhIzYkITJFJipIS3EmUT01ISM8NyQkIjE8L15jNydvOyMhIzokITFXc05mcEwpbyohIzw3JCQiMk0kM0Y+SFQnSCMhIzskITEwWDs3JFInMykpISM8NyQkIjBESj9la2ZVIyEjOSQhMTJaKikqelJdZighIzw3JCQiMW47eldpXmJEISM6JCExJWVqTEY8MTYnISM8NyQkIjJNM192IXoxJm8jISM7JCEyJnonNCN5WyxHVyEjPTckJCIvREpxJj5ZIkchIzgkITIkb3dWU28oZWkjISM9NyQkIjE8SDJMNzxXSCEjOiQhMUpERCp5dTgmeSEjPTckJCIyTUxMZSpHc3RJISM7JCIyOGgjND0rbTk1ISM9NyQkIjJuOy8sV2l2PyQhIzskIjJqJUhJYT0iPXYjISM9NyQkIi52Vik+U1RMISM3JCIxPilIKzkwQkglISM8NyQkIjJNJGVrRzpDdk0hIzskIjImb0RQdiVIXWQmISM9NyQkIjJubTtIMiIzNE8hIzskIjEpKUhIJW9jTWInISM8NyQkIi92PTwxI0h1JCEjOCQiMSNIKSkpZjtAKD4oISM8NyQkIjJNTGU5O2duKFEhIzskIjFsOkQwRnojXCghIzw3JCQiMHYkZkwqek8lUiEjOSQiMFZCbG4oUjV2ISM7NyQkIjFuIkhkcSpmNVMhIzokIjEzYDdcRldWdSEjPDckJCIxJGVreVo+djIlISM6JCIxXiU0KG9oeiVIKCEjPDckJCIqRFJXOSUhIikkIjF1QEZeY0BvcSEjPDckJCIuRGMsNmpTJSEjNyQiMWolR2MuNiFIYiEjPDckJCItRCJ5Iz1vWSEjNiQiMm0qZm8pKlInZUMkISM9NyQkIi9EMWsnPSIqeiUhIzgkIjJFN3NRbCIpbyc+ISM9NyQkIi52b2FhKyRcISM3JCIxQ2BRUXA8YG4hIz03JCQiL3ZvSC8qNDEmISM4JCEyJmUrKDNjLT1zJiEjPjckJCIsREpFPj4mISM1JCEyeE1eSiZ5LUM8ISM9NyQkIi92JDRyK2BXJiEjOCQhMFQ8MkpLTF8kISM7NyQkIi52JDRebilwJiEjNyQhMW0pXCZlJls6ZSUhIzw3JCQiMXZWKSozKD0/dyYhIzokITFuRUQhPU13ciUhIzw3JCQiMHYkZjNCT0RlISM5JCEyMXRdcktIPSFbISM9NyQkIjFESj8zZnEpKWUhIzokITJFWkdvdV9bJFshIz03JCQiL0QieV1cPyZmISM4JCEyRW0rTGNWeiJbISM9NyQkIjBESnFxTyh5ZyEjOSQhMCVvT29qcVRZISM7NyQkIi1EMVJVMGkhIzYkITFEKVwyK0BBSCUhIzw3JCQiL0Rjd0h2J1snISM4JCEybjhrWFQuKy4kISM9NyQkIi52by8jM29uISM3JCEyeDR5NFBSVVEiISM9NyQkIi92PTw2VFxxISM4JCIyUGUpcGh1TiF5IyEjPjckJCIsdj1TMkwoISM1JCIwTDs9PTsqUTshIzs3JCQiMW07enBvXyRlKCEjOiQiMihcaCk0UjptVSMhIz03JCQiMUxMM19OSk95ISM6JCIyQjcjKilbLSJSdCMhIz03JCQiMERjRUE1JioqeSEjOSQiMkI1ciJvMFxPRiEjPTckJCIxbiJISypvcWl6ISM6JCIxMSg9KFJxODZGISM8NyQkIjElMy1RYy5mLSkhIzokIjE8NEYsMz9mRSEjPDckJCIudlZCKyIqMykhIzckIjBucUMkUUUjZSMhIzs3JCQiMUwzX3ZOXDojKSEjOiQiMi8wO0FENzJPIyEjPTckJCIxbm1tO3ApPU0pISM6JCIyJnloR0hldGk/ISM9NyQkIjFNTCRlUiVwIikpKSEjOiQiMnglPSN6cDo6cCQhIz43JCQiK3Y9XUAlKiEiKiQhMjwnM2EpUnNELCIhIz03JCQiMTtII29LKXlWJiohIzokITIib1YjKlFQQSg9IiEjPTckJCIxTWVreVoybScqISM6JCEyRTMyVSdlOC04ISM9NyQkIjB2by9CaCQpeSohIzkkITIpUmlaKnBLIWU4ISM9NyQkIjFtO0gjb1oxIioqISM6JCEyY0s1eWglKnlOIiEjPTckJCIwdiRmZT9fOjUhIzgkITJLTnohKlImejU3ISM9NyQkIjJMTGUqWyR6KlI1ISM6JCExSyIzU1AiKno7KiEjPTckJCIybjtIZCFmWCQ0IiEjOiQhMW5qLGBvK14kKiEjPjckJCIsRFlLcDkiISIqJCIxKVFbdGh4OSlbISM9NyQkIjIkZSopZiF5NiZmNiEjOiQiMSwnZjVzMDBgJiEjPTckJCIybiJ6cCk0IjRzNiEjOiQiMU1GPU1mbSopZSEjPTckJCIxdm96Oy9uJT0iISM5JCIxVSczUyR6P3VmISM9NyQkIjJMJGUqW3Rccz4iISM6JCIxKUheKnp1SzRlISM9NyQkIjB2JDRyJDNDQSIhIzgkIjFOUXRXbjZwWyEjPTckJCIybm0iSDJxY1o3ISM6JCIxQllTTk5kKFEkISM9NyQkIjJNTDNfMGosSSIhIzokITEnUmQhNHloNyMqISNANyQkIi5ESjVmRk4iISM2JCExJTRIJjR6V1k/ISM9NyQkIjIlM192bFlobDghIzokITIjPSdcaDojM0tBISM+NyQkIjJtVCZRRy1aeTghIzokITI3VjQzQGksSSMhIz43JCQiMURjLCJ6RDhSIiEjOSQhMic9IipISVklPkUjISM+NyQkIjJMJGVrYDg9LzkhIzokITEqM1ctaVQ/OCMhIz03JCQiMEQxKnlDKilIOSEjOCQhMkVVSVdrbGdtIiEjPjckJCIybm1tVGcuY1giISM6JCEyTDkucDlDby8iISM+NyQkIjJNJGUqWyR6VjQ6ISM6JCIyc2xvTiN6eCd6IiEjPzckJCIuRGNFc0tjIiEjNiQiMDtOZ0p2Z2AoISM9NyQkIjJvO3pXN0BeaCIhIzokIjE0cCI+PXlHWichIz43JCQiMkxMTEwpKnBwbSIhIzokIjJtJSozV1IrV1UjISM/NyQkIjJNTCQzeGUsdDwhIzokITE7bCR5OVdOSSMhIz43JCQiMm5tIkhkTz15PSEjOiQhMSg9OiVIPEpgVSEjPzckJCIrRD4jWyg+ISIpJCIyTSEzeXFoeSopZiEjQDckJCIybG07YUchZSYzIyEjOiQiMlk5RUghKWZTXychI0E3JCQiMk1MTEwpUWslPSMhIzokITJqOUQnUl5IRjghI0A3JCQiLkQxTW0tSCMhIzYkITBjd0IsK1gpKikhI0A3JCQiLnYkNDBPIlIjISM2JCIyJjNhKD1rRlZfIyEjQTckJCIkXSMhIiIkIiIhISIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSdDVVJWRVNHNiQ3Z3k3JCQhJF0jISIiJCIxN2RXIikzOTRKISM/NyQkITJtbW0iSFUsIlIjISM6JCExeFhWKnBqNlYqISNANyQkITJOTDNGSCc9J0gjISM6JCEyJj1uKkg5XXRFIiEjPzckJCEybW07L09VJio9IyEjOiQiMHkoPVpXQT1UISM+NyQkITJubTtIXyI+IzMjISM6JCIyLk53X1QsUmwlISM/NyQkITJNTDNfITROdj4hIzokITFsQCR5TyxAUSQhIz43JCQhLkQxV0JlIz4hIzYkITJsZjxDZyFcIjMiISM+NyQkITJubVRnKGZIdz0hIzokITI2JD1AektvSDkhIz43JCQhLkRjY2ExJj0hIzYkITJCZG4rd3NURCIhIz43JCQhMUwkM186OF0jPSEjOSQhMDBSJFFDcXR3ISM9NyQkITJtbSJ6VzxQKnoiISM6JCIxIilleUtOQWBBISM/NyQkIS52VkxJUHgiISM2JCIyaDU1JFE1K1Q1ISM+NyQkITJvbVQ1Jj5AWjwhIzokIjFGJ2ViKTMqND0jISM9NyQkITJMTDN4YyRwPzwhIzokIjJ4dyZRcVFrJz0kISM+NyQkITJubVRnUE11cSIhIzokIjFgbClcc1EjZU4hIz03JCQhLnZWPXZUcCIhIzYkIjJhbUkhUj4oKSl6JCEjPjckJCEyS0wzRipmIjRvIiEjOiQiMVwkKT0kKm95eVEhIz03JCQhMm1tVDUhb2xuOyEjOiQiMSpRMURPNkd4JCEjPTckJCEyTiQzeEosV2E7ISM6JCIxS04oMzBGT1kkISM9NyQkISxEWUI3ayIhIiokIjI5X3RkIT4oNCVIISM+NyQkITJsO0hLejEhRzshIzokIjJLelFmSEBXPyMhIz43JCQhMk1MZVI3IXo5OyEjOiQiMkFIciFbYmZrNyEjPjckJCEybm07YXljJCllIiEjOiQhMm02JHorKVJINyIhIz43JCQhLnZvV0I+YyIhIzYkITIoSF9NIXo6JyoqUSEjPjckJCEyTGU5IjROdE06ISM6JCExIipSI3pzMHJrJyEjPTckJCEybjthOGRWdl0iISM6JCExQXU7R3J0XCcpISM9NyQkITIkZVJaLSdbUlwiISM6JCExYkEoZSFlKCpwIiohIz03JCQhMHYkZkxPTiFbIiEjOCQhMVpRcnYnUmJGKiEjPTckJCEyPGE4Wm1lblkiISM6JCExa3VuWTMlSCIqKSEjPTckJCEyTExMZXBqSlgiISM6JCExKT4heSxgI3kvKSEjPTckJCEudj0oZUUwOSEjNiQhMSlIaihmSFohMyIhIz03JCQhMm5tO3ovb3ROIiEjOiQiMU5ySV82IikzKCohIz03JCQhL0RKWHNTSTghIzckIjIoWzJNXiQpXEo6ISM9NyQkITJNTDNGV1lNSSIhIzokIjE0ZCJmazlVKj0hIzw3JCQhMEQxOS9tKipHIiEjOCQiMmJQX1BWcEsnPiEjPTckJCEybjsvLGsmW3c3ISM6JCIxMyhwN3AjZVQ+ISM8NyQkITJNMy0pUV8rajchIzokIjFmKFtiYXE6Iz0hIzw3JCQhLHYkW19cNyEiKiQiMS82Z2ViLCs7ISM8NyQkIStEPVEmPiIhIikkITJtSSV6dFlCcD4hIz43JCQhLEQiKVE3OSIhIiokITIoPkVJW1VSZUQhIz03JCQhKS86OjYhIickITI7LiN5PCopem1MISM9NyQkISx2KT4xKjMiISIqJCEyRTxFcWVsIXlPISM9NyQkISt2TihIMSIhIikkITJZPnonZicpKVFOJCEjPTckJCEsRDsmKW8uIiEiKiQhMkI7bkJmMnpOIyEjPTckJCEyblROWVElPjg1ISM6JCExTDZaTFtPSCUqISM9NyQkITFNJDN4MU9dKikqISM6JCIxcm82c3dfKSl6ISM9NyQkIS9EMSpHRyJlJyohIzgkIjF4QERScioqUkUhIzw3JCQhMW5tVDUwQUAlKiEjOiQiMV9SMz0uVTRWISM8NyQkITFNZVJaVV5SIiohIzokIjJjZ207JUdoIXAmISM9NyQkIS52Vil6IXkmKSkhIzckIjIwJ3lwNCNcSjAnISM9NyQkITFuVE5APDV3JikhIzokIjIvS1tfMCJIJT0mISM9NyQkITFNTExlYVIlSCkhIzokIjJEV3AxZU5lNiQhIz03JCQhMUwkMy1RdV08KSEjOiQiMiYqZStCUEk/JT4hIz03JCQhMU1MMy1MdmIhKSEjOiQiMiYqNDg1Zio+LWshIz43JCQhMU0kZVJBS2skeiEjOiQhMXk7WU0/JVxZKCEjPTckJCEyT0xMZTk2ciJ5ISM7JCExWGcxXVx2cEAhIzw3JCQhMk5MM3gxIXoocCghIzskITJFLV5UJik9d2QkISM9NyQkITJOTCRlKikqbyV5diEjOyQhMVtMLydlVmsiXCEjPDckJCEyTUxlOSJ6OWZ1ISM7JCExJEhEJXldI0g4JyEjPDckJCExTExMTG8jKVJ0ISM6JCExOW1STnM/d3IhIzw3JCQhMTxhUWAhRzU/KCEjOiQhMTI8ZnF6eDUiKSEjPDckJCEvdlZ0I0hBMSghIzgkITF0NCYzWCxybykhIzw3JCQhMUAwWHkmSHYtKCEjOiQhMSJ6JlxIZlhwKCkhIzw3JCQhMVVOWSQpKUhHKnAhIzokITElSDJxJT4kZiMpKSEjPDckJCExaWxaKT1JImVwISM6JCExX1YncGZuZyYpKSEjPDckJCExJGUqWyRcSU0jcCEjOiQhMSRHYyZmLltmKSkhIzw3JCQhMURjXi42LmFvISM6JCEwJmYhPVc7XXkpISM7NyQkITFuO2E4PGoleSchIzokITB3XSpIODksJykhIzs3JCQhMHYkZkxIJGVrJyEjOSQhMS4mKVJ4MVsxeiEjPDckJCExTGVrYFQuMmwhIzokITB4WWEnKWVBeichIzs3JCQhMmwienB0YEJvaiEjOyQhMmMxcDEpUmooSCYhIz03JCQhLXYkZk8lSGkhIzYkITElcFMoPmIpSFskISM8NyQkITE7eiVcOndsNSchIzokITJOLz9BKzBIbiIhIz03JCQhMUxlOTtkciQpZiEjOiQiMSI9SFVYXSozRSEjPTckJCEwdlZ0RmIzJ2UhIzkkIjJXXDEuZ3RoQyMhIz03JCQhMW47YVFbKnp0JiEjOiQiMUc2MmBHUDFVISM8NyQkITEkZVIoKlJNXmgmISM6JCIxMWAiPTZWTzEnISM8NyQkIS92JDQnUkYjXCYhIzgkIjE7R1dcNixVeCEjPDckJCEya1ROQF84JXBgISM7JCIxYCxreSlmMDwqISM8NyQkITFNTEwkM2BsQyYhIzokIjJQRVlYSVsnRzUhIzw3JCQhMTxhajRkdjZeISM6JCIyeFAlR20mKikqMzYhIzw3JCQhL3YkZkxlcChcISM4JCIyaCgzMTs0W1M2ISM8NyQkITEkZVJBJzQ7VVshIzokIjJ0OV0oXDNOPzYhIzw3JCQhMW47YSllanRxJSEjOiQiMk0sZjRxWiNbNSEjPDckJCEwdlZbQG1EZCUhIzkkIjE8NzQ1YjtqIyohIzw3JCQhMUxlOVQpb3hWJSEjOiQiMSZ6NjcqNF8iZighIzw3JCQhMTt6V245KEhJJSEjOiQiMU0pKlxJMUZPYiEjPDckJCEtdiQ0dSJvVCEjNiQiMmxVbmc1QWc9JCEjPTckJCEvdj08XiIpUlMhIzgkIjFuW1xbaDQkcCghIz03JCQhLkQxOWM5IlIhIzckITJgPlZ5ZiNbPzwhIz03JCQhL0Qxa3I0JHkkISM4JCEyWCU+MUkjNCl5VCEjPTckJCEsdj1RWmwkISM1JCEwOUpxS2kzXSchIzs3JCQhL3YkNEB6al8kISM4JCExMHhzTSVHaWUpISM8NyQkIS52VkI/ISlSJCEjNyQhMURBQFg3TU01ISM7NyQkIS9EInlEaCdwSyEjOCQhMk08bzBqLCVwNiEjPDckJCEtRCJHLTg5JCEjNiQhMWk2dDt1amQ3ISM7NyQkITIlZSopND14THVJISM7JCEyXltPYSlvZiRHIiEjPDckJCEybSJ6JVw6dHQrJCEjOyQhMksmeUowb0UmSCIhIzw3JCQhMmRSc0woMypRKEghIzskITE5OShRUnVjSCIhIzs3JCQhMXZveiJmMy8lSCEjOiQhMWxLNj8jW0NIIiEjOzckJCEyVk5ALUpFcCFIISM7JCExJ3pnbSoqKmUmRyIhIzs3JCQhMk0kZWtHU1d0RyEjOyQhMT1gZlRANnY3ISM7NyQkITB2VkIhXF5SRiEjOSQhMnJgPiE+Y2koPiIhIzw3JCQhMmxtVGd4JmUwRSEjOyQhMkBBOmNAaWYxIiEjPDckJCEyTGVSKFxtbHJDISM7JCExSnZFX1lZZSkpISM8NyQkIS92VkJ2c1BCISM4JCExa3BYOCY9SmwnISM8NyQkITIkZWtHZ0h3cUEhIzskITFaYUZCJCpRSGEhIzw3JCQhMmxUTnJSKXouQSEjOyQhMDolKWUsX0s5JSEjOzckJCExdlYpUiRRJG84IyEjOiQhMm9zLUdXNSU0RyEjPTckJCEyTExMM0ZwKXA/ISM7JCEyJjR3JjRKV0pXIiEjPTckJCEyTGVSWl8hKW8lPiEjOyQiMkE9KSkzKTRHKTQiISM9NyQkITJMJGVreTwqUSM9ISM7JCIyWWcqb1wjKip5ZiQhIz03JCQhMkwzX0QuLjRxIiEjOyQiMXllJ1xYKj5mZiEjPDckJCEyTExla0c5emQiISM7JCIxKikpek8xWjc0KSEjPDckJCEyTGVrLmFEXFgiISM7JCIxY3YyKjNjQiIqKiEjPDckJCEyTCQzRiV6Tz5MIiEjOyQiMid5ZHM8ckxONiEjPDckJCEyTDN4IlshWyozNyEjOyQiMiJvVih5PVVnQiIhIzw3JCQhMk1MJDMtJGZmMyIhIzskIjJQcDY6Vy4oKkciISM8NyQkITI8L15KSkgnPjUhIzskIjFVKHAjKlw7JSlIIiEjOzckJCEvdj1VSypIYCohIzkkIjJebDElUVYmR0giISM8NyQkITElZWtHTiRwcCkpISM7JCIyOTc+IXB5OHQ3ISM8NyQkITFuO2FqTVIxIykhIzskIjJyVD50ZF0mUjchIzw3JCQhMUxlKltvJHp6byEjOyQiMi9ANidcVW9LNiEjPDckJCEtRDFSPmBiISM3JCIwPUAlPXZ1digqISM7NyQkITFuVGdGVGZFVSEjOyQiMGg+OSVbJnAieSEjOzckJCEyTkxlKltWKioqKkchIzwkIjFaUzEsMStWYiEjPDckJCEybVROJ2ZXcE9BISM8JCIwO3UkPW5eP1YhIzs3JCQhL0RKcVhSdDohIzkkIjJHaUolM1RuZkkhIz03JCQhMU1lKik0byU0NSohIzwkIjFYITMtPkRceCIhIzw3JCQhMm5tbW0ieiV6WSMhIz0kIjE9JSpvbTQhKjNbISM9NyQkIjFMMy1qUCg9VSUhIzwkITFqMC42IiozdSYpISM9NyQkIjJMJDNGVyZwNjgiISM8JCEyVVVPZzkqeXRAISM9NyQkIjJMZVJBcl4sIz0hIzwkITFrISllaC1cX00hIzw3JCQiMk5MMy0pUTg0RCEjPCQhMlhoazJtZiR5WSEjPTckJCIyTSRlOTsjKTQoKVEhIzwkITFld1lPRTk6cCEjPDckJCIxTUwzX0QxbF8hIzskITFZNUIocG09eSkhIzw3JCQiMUwzLSkpby1WbSEjOyQhMm9hUz13Xyc+NSEjPDckJCIxTSRlUkEiKjQtKSEjOyQhMiJHPXZYMzY1NiEjPDckJCIxJTNGPlJ0KjQoKSEjOyQhMm9EXFYobzZONiEjPDckJCIxTGUqKWZiJiopUiohIzskITJMJykqbyJvKVJZNiEjPDckJCIxMy0pUWtZTXUqISM7JCEyak9mPXonKm85IiEjPDckJCIyJWVreXNQejM1ISM7JCEyTSRSKnlzKilSOSIhIzw3JCQiMScqWz0iKUdDVjUhIzokITIyJyopNFUiM3g4IiEjPDckJCIyS0wkZSopPnB4NSEjOyQhMjJrSGsrJDRHNiEjPDckJCIybTsvLD5Xdz4iISM7JCEwb0VqMDslcDUhIzo3JCQiLkQxUidmPDghIzckITFSRlo2PThUKCohIzw3JCQiMk0kZTkiZlt2ViIhIzskITEmNENfczthWSkhIzw3JCQiMm9tbTt6K3ZiIiEjOyQhMS4tdikqSGVAcCEjPDckJCIvdj0jKkhYeDshIzgkITEoeSgqKj0kUkc8JiEjPDckJCIyTUwzRj4wdXoiISM7JCExa1h2QTtTKUckISM8NyQkIjJvO0hLUmR0Ij4hIzskITIoUnFAMDpwUzghIz03JCQiLXYkZjR0LiMhIzYkIjF3d3FIMDx2ZiEjPTckJCIxPC9eYzcnbzsjISM6JCIyb2ddakdjIipmIyEjPTckJCIyTSQzRj5IVCdIIyEjOyQiMUB3cCh5JillVSUhIzw3JCQiMERKP2VrZlUjISM5JCIyLyxNKSpRR2grJyEjPTckJCIxbjt6V2leYkQhIzokIjB4MEkjcFYiRyghIzs3JCQiMk0zX3YhejEmbyMhIzskIjBcKilIYFknMyMpISM7NyQkIi9ESnEmPlkiRyEjOCQiMVc6UCYpKmU3dykhIzw3JCQiMS9FKydbMnElRyEjOiQiMUttZ1t6VFIpKSEjPDckJCIxM0ZwLGFSekchIzokIjFiJ1ImKnlFTiopKSEjPDckJCIyRiJHUTxMeTZIISM7JCIxZksieihlbkIqKSEjPDckJCIxPEgyTDc8V0ghIzokIjEpZjxdJDQtSSopISM8NyQkIjFESlhrcSUqM0khIzokIjBEUjEqPkNzKSkhIzs3JCQiMk1MTGUqR3N0SSEjOyQiMSgpcE50d3BBKCkhIzw3JCQiMm47LyxXaXY/JCEjOyQiMWknNHM4VSpRIikhIzw3JCQiLnZWKT5TVEwhIzckIjFYQ1VDdmFAcyEjPDckJCIyTSRla0c6Q3ZNISM7JCIxXCgqbyZRV2stJyEjPDckJCIybm07SDIiMzRPISM7JCIxI3A/OSRIKio+WSEjPDckJCIvdj08MSNIdSQhIzgkIjIpZSU+V0IoUXZJISM9NyQkIjJNTGU5O2duKFEhIzskIjImUndNZ1opKW85ISM9NyQkIjFuIkhkcSpmNVMhIzokITJkIioqW3hoV1I3ISM+NyQkIipEUlc5JSEiKSQhMiRmI2ViVGw8aiIhIz03JCQiLkRjLDZqUyUhIzckITE3QiMpNGJULFQhIzw3JCQiLUQieSM9b1khIzYkITJ3PD9Tb1xJbCYhIz03JCQiMERjRXNdT3QlISM5JCExM14ub0RudGUhIzw3JCQiL0Qxayc9Iip6JSEjOCQhMT1LUF1eL0RnISM8NyQkIjB2b2FnJ2VrWyEjOSQhMVtVNnhZUzJoISM8NyQkIi52b2FhKyRcISM3JCEvI1xyNGc8NychIzo3JCQiL3ZvSC8qNDEmISM4JCEyJj5ucmwnXFQmZiEjPTckJCIsREpFPj4mISM1JCExKDRqO18iSFdiISM8NyQkIi92JDRyK2BXJiEjOCQhMkV1Ryk0RlwoPSUhIz03JCQiLnYkNF5uKXAmISM3JCEyNyN6TGcmUWtNIyEjPTckJCIvRCJ5XVw/JmYhIzgkITJkQmIpcF54Tk8hIz43JCQiLUQxUlUwaSEjNiQiMlB3YHc5cV5WIiEjPTckJCIvRGN3SHYnWychIzgkIjFVVCpRWmRrIUghIzw3JCQiLnZvLyMzb24hIzckIjEiPiE0WShwLGokISM8NyQkIjFESlg5VlRRbyEjOiQiMidcIiopeVNFcG8kISM9NyQkIjBESj9lWSgzcCEjOSQiMDJuIipRKFImcCQhIzs3JCQiMXYkNCdcKXkhenAhIzokIjImWyZceGJTdGwkISM9NyQkIi92PTw2VFxxISM4JCIxMFtUd2Ewdk4hIzw3JCQiMHZWQmx2Kz4oISM5JCIyYTcieUNUUipHJCEjPTckJCIsdj1TMkwoISM1JCIyc0ImUSY+emInRyEjPTckJCIxTEwzX05KT3khIzokIjEjXCsqPSYqWyk9KCEjPTckJCIxbm1tO3ApPU0pISM6JCExOyo9QEhsIkc3ISM8NyQkIjFNJGVreVFvWikhIzokITI7UyxzPjFGYyIhIz03JCQiLURjMXo2JykhIzYkITIjR0JqKTNvdXoiISM9NyQkIjFMZTkiZm0jeicpISM6JCExUVhEMlpedz0hIzw3JCQiMW07L0VEdVkoKSEjOiQhMnciUmd3SztJPiEjPTckJCIvdiQ0WT1VIikpISM4JCEyMSdIJCk+PCIqZT4hIz03JCQiMU1MJGVSJXAiKSkpISM6JCEyOVYsdyQpUU4nPiEjPTckJCIxbiJIMkxxIlwqKSEjOiQhMi0kKWZURSMzWD4hIz03JCQiLkRjRVltLCohIzckITJbJDRiK1QiWyE+ISM9NyQkIjFMM18rQTclMyohIzokITJ4ZiZSVFlAVz0hIz03JCQiMW1tVE4iKWZeIiohIzokITIoKkh2Kj1ZJVx3IiEjPTckJCIxTCQzXytdbEcqISM6JCEyblAwQltreGIiISM9NyQkIit2PV1AJSohIiokITJpUyxicmchKkgiISM9NyQkIjFtO0gjb1oxIioqISM6JCEyMiZIb0l2Wj0+ISM+NyQkIjJMTGUqWyR6KlI1ISM6JCIxQS8oUilHUmNtISM9NyQkIjI7L14iKVtbTDAiISM6JCIxIzQqbyNccEApeiEjPTckJCIwdlZ0aTxuMSIhIzgkIjB1U2NqJilSIikpISM8NyQkIjIkZWtgbW4zITMiISM6JCIxJSp6OjpydGoiKiEjPTckJCIybjtIZCFmWCQ0IiEjOiQiMXYxcGFGdWshKiEjPTckJCIyTWU5VD0lPj82ISM6JCIxWUA0aihcenQoISM9NyQkIixEWUtwOSIhIiokIjFWQFRmLzd3YCEjPTckJCIyTCRlKlt0XHM+IiEjOiQiMXQsMjVQRDZEISM+NyQkIjJubSJIMnFjWjchIzokITJiKSlvZWRmIVFKISM+NyQkIjJMJDNGPmdyZzchIzokITJYYi8kW3EyVE4hIz43JCQiLURKXSdRRiIhIzUkITE2U1hUIno1dSQhIz03JCQiMm47SEsvOXFHIiEjOiQhMXYvUTEjSER2JCEjPTckJCIyTUwzXzBqLEkiISM6JCEyWC5JeUYkKm9mJCEjPjckJCIybW1tIno1WUU4ISM6JCExKlJBZi5sVipHISM9NyQkIi5ESjVmRk4iISM2JCEyMEFxVG5Haig9ISM+NyQkIjJMJGVrYDg9LzkhIzokIjIpZT9sJnlgQlMiISM/NyQkIjJubW1UZy5jWCIhIzokIjJaNkVvUXElXDchIz43JCQiMk0kZSpbJHpWNDohIzokIjJgJDQ7Km8kNC43ISM+NyQkIi5EY0VzS2MiISM2JCIxZnkzJmZvVSFcISM+NyQkIjJMTExMKSpwcG0iISM6JCExbSdRIXlOeFhVISM+NyQkIjJNTCQzeGUsdDwhIzokITIiZT5kQyYpUlI1ISM/NyQkIjJubSJIZE89eT0hIzokIjFaKyFRKUc9Iz4iISM+NyQkIitEPiNbKD4hIikkIjIlPjNCRkZxK0QhI0A3JCQiMmxtO2FHIWUmMyMhIzokITJFdmxgVSgqMyRHISNANyQkIjJNTExMKVFrJT0jISM6JCExOSUqPSdwJz1sSyEjQDckJCIuRDFNbS1IIyEjNiQiMU5fMyRmYy4kZSEjQDckJCIudiQ0ME8iUiMhIzYkIjFiUzBCOCNwVyQhI0E3JCQiJF0jISIiJCEwdVk0RjZJJSoqISNALSUmQ09MT1JHNiYlJFJHQkckIjInXF8nZU0leWc+ISM8JCIxaWo5LmVAUiEpISM7JCIyJ1xfJ2VNJXlnPiEjPC0lJVZJRVdHNiQ7JCEkXSMhIiIkIiRdIyEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEidDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiI3EhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhKVEhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlISlRISIiLSUpQ0hJTERSRU5HNiI= LCQqLEknc2lnbWF8aXJHNiIiIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywkKiZJI1BpR0YqIiIjRiQhIiMjRiYiIilGJkYwI0YmRjBGLyMhIiJGMC1JJEludEdGKTYkKigtRig2IywkKiZJI3V8aXJHRiVGJi1GKDYjKiZGJEYwSSJ0R0YlRiZGJkY2RiYtRig2IyooXiNGNUYmRi9GJkZDRiZGJi1GKDYjLCQqJkYkRjBGQ0YwRjVGJi9GQzssJEkpaW5maW5pdHlHRipGNkZPRiZGNA== USpILHBzaSxwaGk2Ig== NyUkIkRFLiMzT2VDVGtpXDViO08jZWglISM9XiQkITh5RWRkTV53MCNwWzUhI1IkIjgoNDxtZ1VqQCFRMnQiRileJCQhREonWzIpUiF6KT4ybWYnPm12ZFNbISNOJCJEXSI9NClRUyczdCI9RUFWViJ5KSl6Ri8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZdby1JI21vR0YkNi1RIn5GJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRJnByaW50RicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiYtRkc2I1EhRictSSNtc0dGJDYjUTBOZXd+aW50ZWdyYXRpb25GJ0ZURi9GLy1GLDYtUSI7RidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMjc3Nzc3OGVtRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0Zgby8lKmxpbmVicmVha0dRKG5ld2xpbmVGJ0YrLUZHNiVRJXdpdGhGJ0ZKRk0tRlA2JC1GIzYlLUZHNiVRMUludGVncmF0aW9uVG9vbHNGJ0ZKRk0vJStleGVjdXRhYmxlR0Y0Ri9GLy1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCRmpuRmluRltvRistRkc2JVElcGhpMkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GZ3BGaW4tRkc2JVElc3Vic0YnRkpGTS1GUDYkLUYjNistRkc2JVEmc2lnbWFGJy9GS0Y0Ri8tRiw2LVEiPUYnRi9GMkY1RjdGOUY7Rj1GP0ZncEZpbi1JJm1mcmFjR0YkNigtSSNtbkdGJDYkUSIxRidGLy1GIzYlLUZHNiVRJm9tZWdhRidGaHFGL0ZKRk0vJS5saW5ldGhpY2tuZXNzR0Zici8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zccy8lKWJldmVsbGVkR0Y0LUYsNi1RIixGJ0YvRjJGaG5GN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRidGKy1GRzYlUSdDaGFuZ2VGJ0ZKRk0tRlA2JC1GIzYsLUZHNiVRJHBoaUYnRmhxRi9GYXMtRkc2JVEidEYnRkpGTUZpcS1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGZ3QtRl1yNigtRiM2KC1GYHI2JFEiMkYnRi8tRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGREYrLUZHNiVRInNGJ0ZKRk1GSkZNLUYjNidGZXFGYHUtRkc2JVEjUGlGJ0ZocUYvRkpGTUZockZqckZdc0Zfc0Zhc0ZjdUZicEYvRi9GYnBGL0YvRmVuRltvLUZHNiVRJnBoaTIyRidGSkZNRltxRistRkc2JVEkbWFwRidGSkZNLUZQNiQtRiM2Jy1GRzYlUSlzaW1wbGlmeUYnRkpGTUZhc0ZocEZicEYvRi9GZW5GW28tRkc2JVEjSDJGJ0ZKRk1GW3EtRl1yNigtRiM2KS1GRzYlUSRleHBGJ0ZocUYvLUZQNiQtRiM2JS1GXXI2KC1GIzYnLUklbXN1cEdGJDYlLUZHNiVRJyYjOTYwO0YnRmhxRi8tRiM2JUZddUZKRk0vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmB1LUZbeDYlLUZHNiVRJyYjOTY5O0YnRmhxRi9GYHhGYnhGYnBGLy1GIzYlLUZgcjYkUSI4RidGL0ZKRk1GaHJGanJGXXNGX3NGYnBGL0YvRmB1LUZHNiVRJXNxcnRGJ0ZocUYvLUZQNiQtRiM2JUZddUZicEYvRi9GYnBGLy1GIzYlLUZbeDYlRl14LUYjNiUtRl1yNigtRmByNiRRIjNGJ0YvRmB4RmhyRmpyRl1zRl9zRkpGTUZieEZKRk1GaHJGanJGXXNGX3NGZW5GW29GKy1GRzYlUSNnMkYnRkpGTUZbcUZfdy1GUDYkLUYjNihGY3QtRkc2JVEidUYnRkpGTUZgdUZfdy1GUDYkLUYjNiVGY3QtRl1yNigtRiM2JkZddUZgdUZjdUYvLUYjNiZGaHVGYHVGZXJGL0ZockZqckZdc0Zfc0YvRi9GL0YvRmB1Rl93LUZQNiQtRiM2JUZjdC1GXXI2KC1GIzYmRl11RmB1LUZbeDYlRmN1LUYjNiRGXXVGL0ZieEYvLUYjNiQtRlt4NiUtRkc2JVElJnBpO0YnRmhxRi9GX1xsRmJ4Ri9GaHJGanJGXXNGX3NGL0YvRmRwRltvRistRkc2JVElcHNpMkYnRkpGTUZbcS1GRzYlUSRpbnRGJ0ZKRk0tRlA2JC1GIzYvRmF6RmB1Rl93LUZQNiQtRiM2KS1GRzYlUSJJRidGSkZNRmB1RmVyRmB1RmN1RmJwRi9GL0Zhc0ZjdUZpcUZjdC1GRzYlUSlpbmZpbml0eUYnRkpGTS1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0ZmdEZERmldbEZicEYvRi9GZW5GW29GK0ZbdkZbcUZodkZgdUZoXGxGZHBGW28tRkc2JUZJRmhxRi8tRlA2JC1GIzYmRlQtRlg2I0ZqcEZURi9GL0ZlbkZbb0YrLUZHNiVRJmV2YWxmRidGSkZNLUZQNiQtRiM2JUZecS1GUDYkLUYjNiYtRkc2JVEndmFsbnVtRidGSkZNRmFzLUZQNiYtRiM2JkZocEZhc0ZbdkYvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvRi9GL0ZlbkZURmJwRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder UTBOZXd+aW50ZWdyYXRpb242Ig== LCQqLiMiIiIiIiNGJUkmb21lZ2FHNiIhIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywkKigjRiUiIilGJSlJI1BpR0YtRiZGJSlGJ0YmRiVGJUYlKUYmRiRGJSlGNUYkRiktSSRJbnRHRiw2JCwkKipGJkYlLUYrNiMsJCooLCgqKkkjdXxpckdGKEYlLUYrNiMsJCoqRiZGJUkic0dGKEYlRjVGKUYnRilGKUYlRidGKUY0RiVGJSooLCReI0YlRiVGJUZJRiVGNEYlRikqKEYmRiUpRklGJkYlRidGKUYlRiVGJ0YlRjRGKUYpRiVGJ0YlRjVGKUYlL0ZJOywkSSlpbmZpbml0eUdGLUYpRlJGJUYl LCQqLiMiIiIiIiNGJUkmb21lZ2FHNiIhIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywkKigjRiUiIilGJSlJI1BpR0YtRiZGJSlGJ0YmRiVGJUYlKUYmRiRGJSlGNUYkRiktSSRJbnRHRiw2JCwkKipGJkYlLUYrNiMqJiwoKihJI3V8aXJHRihGJS1GKzYjLCQqKkYmRiVJInNHRihGJUY1RilGJ0YpRilGJUY0RiVGKSoqXiNGJUYlRkhGJUY0RiVGJ0YlRiUqJkYmRiUpRkhGJkYlRilGJUY0RilGJUYnRiVGNUYpRiUvRkg7LCRJKWluZmluaXR5R0YtRilGUEYlRiU= KigtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKigjIiIiIiIpRi0pSSNQaUdGJiIiI0YtKUkmb21lZ2FHRihGMUYtRi1GLSlGMSNGLUYxRi0pRjAjIiIkRjEhIiI= LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqKC1JJGV4cEdGJDYjLCQqJkkjdXxpckdGJyIiIi1GKzYjLCQqKiIiI0YwSSJzR0YnRjBJI1BpR0YlISIiSSZvbWVnYUdGJ0Y4RjhGMEY4RjAtRis2IywkKihGNUYwKUY2RjVGMClGN0Y1RjhGOEYwLUYrNiMqKF4jRjBGMEY5RjBGNkYwRjAvRjY7LCRJKWluZmluaXR5R0YlRjhGRw== USVwaGkyNiI= NyQsJiQiRHMnKj5vOk9ZPjJtZic+bXZkU1shI04hIiIqJiQiRFcpPSNSKjMoZUk8PUVBVlYieSkpekYmIiIiXiNGK0YrRissJiQiRG9OaiM9Zic9PjJtZic+bXZkU1tGJkYnKiYkIkRtJkd3Nyp6XEk8PUVBVlYieSkpekYmRitGLEYrRis= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY2LUkjbW9HRiQ2LVEifkYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEjZ2lGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRlMtRkc2JVEoY29udmVydEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYnLUZHNiVRJ3Nlcmllc0YnRkpGTS1GWTYkLUYjNiotRkc2JVEjZzJGJ0ZKRk0tRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJm9tZWdhRicvRktGNEYvLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GUkZULUZHNiVRKWluZmluaXR5RidGSkZNRmFvLUkjbW5HRiQ2JFEjMTVGJ0YvRi9GL0Zhby1GRzYlUShwb2x5bm9tRidGSkZNRi9GLy1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/RlJGVC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRmBxLyUqbGluZWJyZWFrR1EobmV3bGluZUYnRistRkc2JVEkcmVzRidGSkZNRk8tRkc2JVEoY29sbGVjdEYnRkpGTS1GWTYkLUYjNiktRkc2JVEmZXZhbGZGJ0ZKRk0tRlk2Ji1GIzYlLUZicDYkUSMyMEYnRi8vJStleGVjdXRhYmxlR0Y0Ri9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJy1GWTYkLUYjNiZGKy1GWTYkLUYjNiYtRkc2JVEnZXhwYW5kRidGSkZNLUZZNiQtRiM2Ji1GRzYlUSlzaW1wbGlmeUYnRkpGTS1GWTYkLUYjNigtRkc2JVEjSDJGJ0ZKRk0tRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSRpbnRGJ0ZKRk0tRlk2JC1GIzYuRkZGXXUtRkc2JVEkZXhwRidGam9GLy1GWTYkLUYjNigtRkc2JVEiSUYnRkpGTUZddUZnb0ZddS1GRzYlUSJzRidGSkZNRi9GL0Zhb0ZhdkZbcC1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGaHZGXnAtRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GZ3ZGREZecEYvRi9GXHNGL0YvRlxzRi9GL0Zcc0YvRi9GXHNGL0YvRmFvRmdvRlxzRi9GLy1GLDYtUSI7RidGL0YyRmRvRjdGOUY7Rj1GP0ZBRlRGW3FGK0Zici1GWTYkLUYjNiYtRkc2JVElc3Vic0YnRkpGTS1GWTYkLUYjNiYtRkc2JVEndmFsbnVtRidGSkZNRmFvRmhxRi9GL0Zcc0YvRi9GXXdGXHNGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LGJvKigkIjQlZmUnPTIqXDVkRCEjPyIiIi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSN1fGlyR0YtISIiKUYvIiImRidGJyooJCI1RVdJVTFWYm1WQiEjQEYnRihGMClGLyIiKkYnRicqKCQiNUhzWV02UGhfSFMhI0FGJ0YoRjApRi8iIzVGJ0YwKigsJComJCI1USJIKVw4elsqKVJXISNERideI0YnRidGJ0YnRihGMClGLyIjN0YnRjAqKCwkKiYkIjU9T3Z5VyFcIzM6ckY2RidGRUYnRidGJ0YoRjApRi8iIilGJ0YwKigqJiQiNVo6I0d5XCEpeXhNIiEjQkYnRkVGJ0YnRihGMClGLyIjNkYnRicqKCwkKiYkIjMvTG9rRTFcY0MhIz5GJ0ZFRidGJ0YnRihGMClGLyIiJUYnRjAqKCwkKiYkIjU4dnFIJCkqZiwmM0BGJkYnRkVGJ0YnRidGKEYwKUYvIiInRidGMCooKiYkIjUqKjMheWkxKysrKyJGZW5GJ0ZFRidGJ0YoRjBGL0YnRicqKComJCI1c2M1K3okSCUqKSoqKipGJkYnRkVGJ0YnRihGMClGLyIiI0YnRicqKCwkKiYkIjVfX0FzaUIxXlM/RjxGJ0ZFRidGJ0YnRihGMEY9RidGMCooKiYkIjRDQD9JLUAqeiMqeUYmRidGRUYnRidGKEYwRjFGJ0YnKigqJiQiNUQxP2VbJTNaXGsiRiZGJ0ZFRidGJ0YoRjApRi8iIihGJ0YnKigqJiQiNVdocjNmVW0qek0kRiZGJ0ZFRidGJ0YoRjApRi8iIiRGJ0YnKigqJiQiNS52YF1ndV9zWTtGNkYnRkVGJ0YnRihGMEY3RidGJyooJCI1MC9PPWFSJm8kPjlGJkYnRihGMEZmcEYnRicqKCQiNVwkXGBDMF5nSzUjISNDRidGKEYwRkZGJ0YwKigkIjUuYSZlXWkhKTM9ImUhI0VGJ0YoRjApRi8iIzhGJ0YnKigqJiQiNUUibyN6Jz4jSDwjcCYhI0ZGJ0ZFRidGJ0YoRjBGXXJGJ0YnKigkIjUxaExeMSsrKys1RmVuRidGKEYwRi9GJ0YnKigkIjAsc3ZWUlEzI0YmRidGKEYwRmdvRidGMCooJCI0UTNOXHREbSpHTEZlbkYnRihGMEZccUYnRjAqKCQiNVlzNy4qPmMiM208RiZGJ0YoRjBGZm5GJ0YwKigkIjVIITRuIWY/SzlLOEYmRidGKEYwRl1vRidGMCooJCI1RyE+ajNoMExEbShGNkYnRihGMEZNRidGMCooJCI1QENfPXokMy5tUSchI0dGJ0YoRjApRi8iIzlGJ0YwKiRGKEYwRicqKCQiNUl5RGYkelhiJTNSRlNGJ0YoRjBGVEYnRicqJixYKigkIjUnKXlQKGUnZi9hX0RGZW5GJ0YoRjBGMUYnRjAqKCQiNVFjQ2IsJUhMYVwqRiZGJ0YoRjBGN0YnRjAqKCQiNSQqZUJqKmU0NEdjIkYmRidGKEYwRj1GJ0YnKigkIjVmViplZiVSIzRSNydGZW5GJ0YoRjBGZnBGJ0YwKigkIjUscSkzdiN5dXUveUZTRidGKEYwRkZGJ0YnKigkIjVYLm9BT0MhW005I0ZocUYnRihGMEZdckYnRjAqKCQiLWZPWnRnSkYmRidGKEYwRi9GJ0YwKigkIjU7Y0EmXCdHYCoqKSoqKkYmRidGKEYwRmdvRidGMCooJCI0InAkZSI0al4kMy0iISM9RidGKEYwRlxxRidGMCooJCI0OlJIJz5TZngzSUZlbkYnRihGMEZmbkYnRicqKCQiNWxgbzcpXGFVbTUnRmVuRidGKEYwRl1vRidGJyooJCI1KFtfXCI9NFY6Y0tGZW5GJ0YoRjBGTUYnRicqKCQiNUF2JjM0JSpRUGFOI0ZcckYnRihGMEZqc0YnRicqKCQiNV1mMWYmZV93SFoiRjZGJ0YoRjBGVEYnRjAqKComJCI1SEc4RnRoKVtOUyJGU0YnRkVGJ0YnRihGMEZGRidGJyooKiYkIjVJKCpvRW1NUVhcREZlbkYnRkVGJ0YnRihGMEZNRidGJyooLCQqJiQiNTYjKTRtK2dMPCVIJUY8RidGRUYnRidGJ0YoRjBGVEYnRjAqKComJCIzcGUzQSEpZmpyTEZddkYnRkVGJ0YnRihGMEZmbkYnRicqKComJCI1US1oIUdkKlxnSnhGZW5GJ0ZFRidGJ0YoRjBGXW9GJ0YnKigqJiQiNTpOYV9xPSgqKioqKlxGJkYnRkVGJ0YnRihGMEYvRidGJyooKiYkIjU1IilcdDNAOFgvXUYmRidGRUYnRidGKEYwRmdvRidGJyooKiYkIjU4SEIwMmBBLE5tRjZGJ0ZFRidGJ0YoRjBGPUYnRicqKCwkKiYkIjVHLnZhdWlwMU1aRmVuRidGRUYnRidGJ0YoRjBGMUYnRjAqKCwkKiYkIjU2ek5iLVk4LSQ+J0ZlbkYnRkVGJ0YnRidGKEYwRmZwRidGMCooLCQqJiQiNGE0OmYlPl5zNGNGZW5GJ0ZFRidGJ0YnRihGMEZccUYnRjAqKCwkKiYkIjUsKmZtYkFqPGVjJkYmRidGRUYnRidGJ0YoRjBGN0YnRjAqKCwkKiYkIjUvblVnZzw7VSp6IkZERidGRUYnRidGJ0YoRjBGXXJGJ0YwRicpSSZvbWVnYUdGLUZob0YwRicqJixYKigkIjUxUmQpW01Sa2t3JUZddkYnRihGMEYxRidGJyooJCI1Ky9uTUhCaVp0OEZddkYnRihGMEY3RidGJyooJCI1RSU0LnJTY14heUBGZW5GJ0YoRjBGPUYnRjAqKCQiNWE5YFAkZUs2YXgqRl12RidGKEYwRmZwRidGJyooJCI1NVMmcFNcPysjXDVGNkYnRihGMEZGRidGMCooJCI1UShRa04qPkJ0bUdGU0YnRihGMEZdckYnRicqKCQiLjNeNXYmNGVGJkYnRihGMEYvRidGJyooJCI1O1JxeSJmL0g9KyJGZW5GJ0YoRjBGZ29GJ0YwKigkIjR1RXImcGYlKWZraUZlbkYnRihGMEZccUYnRjAqKCQiNEgkKT4oZlY9YXd0Rl12RidGKEYwRmZuRidGMCooJCI1bTFjSEVCPVUqKikqRl12RidGKEYwRl1vRidGMCooJCI1Iip5JzM0NyEqKSpIJlxGXXZGJ0YoRjBGTUYnRjAqKCQiNWJvdkRqJ0hiLTokRkRGJ0YoRjBGanNGJ0YwKigkIjUmZlotKmYicDNhKyNGJkYnRihGMEZURidGJyooLCQqJiQiNU1FZW5uXjpJazpGPEYnRkVGJ0YnRidGKEYwRkZGJ0YwKigsJComJCI1QTFGJnA7PkAuOiRGXXZGJ0ZFRidGJ0YnRihGMEZNRidGMCooKiYkIjVsKUhUTWdkJSlvIltGNkYnRkVGJ0YnRihGMEZURidGJyooLCQqJiQiNUpyR1JdVyZlKWY7Rl12RidGRUYnRidGJ0YoRjBGZm5GJ0YwKigsJComJCI1KT0rLWVXQVBjMSIhIzxGJ0ZFRidGJ0YnRihGMEZdb0YnRjAqKComJCI1SmdkLkJHVytdN0YmRidGRUYnRidGKEYwRi9GJ0YnKigqJiQiNVViNGA6QDx2IT0iRiZGJ0ZFRidGJ0YoRjBGZ29GJ0YnKigsJComJCI1elYnXCtIUjtbYyhGJkYnRkVGJ0YnRidGKEYwRj1GJ0YwKigqJiQiNUllWGwuSGV5S2tGXXZGJ0ZFRidGJ0YoRjBGMUYnRicqKComJCI1dXA6N249YCgpcCIpRl12RidGRUYnRidGKEYwRmZwRidGJyooLCQqJiQiM1ZSOyg+YERIJXBGXXZGJ0ZFRidGJ0YnRihGMEZccUYnRjAqKComJCI1QDc5Qm53IioqUWEnRmVuRidGRUYnRidGKEYwRjdGJ0YnKigqJiQiNU94KCo+JSk0W14wP0ZocUYnRkVGJ0YnRihGMEZdckYnRidGJylGaHpGZ25GMEYnKiYsWCooKiYkIjVYO29HKilwLyZ5ZyhGPEYnRkVGJ0YnRihGMEZGRidGJyooKiYkIjVIX1UoNFVRQC9tIkZdX2xGJ0ZFRidGJ0YoRjBGTUYnRicqKCwkKiYkIjVOVyMqPilmdzVYTiNGJkYnRkVGJ0YnRidGKEYwRlRGJ0YwKigqJiQiNVRuWGNRKyxFOSkqRl12RidGRUYnRidGKEYwRmZuRidGJyooKiYkIjVtbGUsY2xaJTRZJ0ZdX2xGJ0ZFRidGJ0YoRjBGXW9GJ0YnKigqJiQiNUBuYipbN1kxSTMjRjZGJ0ZFRidGJ0YoRjBGL0YnRicqKComJCIzI1I9ZCIpPTl4NChGZW5GJ0ZFRidGJ0YoRjBGZ29GJ0YnKigqJiQiNTAnemVJVjk1VnUkRmVuRidGRUYnRidGKEYwRj1GJ0YnKigsJComJCI1cGYvNGNvc3k7VEZdX2xGJ0ZFRidGJ0YnRihGMEYxRidGMCooLCQqJiQiNXFgXCk0PE5AVGQlRl1fbEYnRkVGJ0YnRidGKEYwRmZwRidGMCooLCQqJiQiNDJxdTBuNk55MCpGXXZGJ0ZFRidGJ0YnRihGMEZccUYnRjAqKCwkKiYkIjU1JFtEMCNlTy87TEZddkYnRkVGJ0YnRidGKEYwRjdGJ0YwKigsJComJCI1MEArMWVbV2xgKCpGaHFGJ0ZFRidGJ0YnRihGMEZdckYnRjAqKCQiNSh5eVU3PiZmJClmT0ZdX2xGJ0YoRjBGMUYnRjAqKCQiNSZmRzREUFIvKyopKUZddkYnRihGMEY3RidGMCooJCI1NiRSKSplM0VNIW84Rl12RidGKEYwRj1GJ0YnKigkIjUsLklvRTQ8ckJxRl1fbEYnRihGMEZmcEYnRjAqKCQiNTouNC8nekBpWlMnRjZGJ0YoRjBGRkYnRicqKCQiNV9BWShcNUZrRnUiRjxGJ0YoRjBGXXJGJ0YwKigkIjE+ZWpVIypmYF5GPEYnRihGMEYvRidGMCooJCI1UCY9SEJXISo+b10nRiZGJ0YoRjBGZ29GJ0YwKigkIjRgJmV6dFg3X2FRRl12RidGKEYwRlxxRidGMCooJCI0Iik0KnBbLmBbNHJGXV9sRidGKEYwRmZuRidGJyooJCI1KGVlZ3ImKikqR1BgKEZdX2xGJ0YoRjBGXW9GJ0YnKigkIjVVN0MkKXBqMDhgTEZdX2xGJ0YoRjBGTUYnRicqKCQiNSE0KFFAZXNiNzo+RmhxRidGKEYwRmpzRidGJyooJCI1JFFhXUtaZGZsQiJGZW5GJ0YoRjBGVEYnRjBGJylGaHpGXm9GMEYnKiYsWCooLCQqJiQiNVQ1b19pcWt2PTtGNkYnRkVGJ0YnRidGKEYwRkZGJ0YwKigsJComJCI1O0FgNlgoKXAlUnUkRl1fbEYnRkVGJ0YnRidGKEYwRk1GJ0YwKigqJiQiNSVHLydHdV5CSUddRiZGJ0ZFRidGJ0YoRjBGVEYnRicqKCwkKiYkIjVFLjc4KkhYcD03JEZdX2xGJ0ZFRidGJ0YnRihGMEZmbkYnRjAqKCwkKiYkIjUhKnorMzApenBMayIhIztGJ0ZFRidGJ0YnRihGMEZdb0YnRjAqKComJCI1Lk0/PmlXLCZmaCNGPEYnRkVGJ0YnRihGMEYvRidGJyooLCQqJiQiNDFqbnhLYWAxcyJGZW5GJ0ZFRidGJ0YnRihGMEZnb0YnRjAqKCwkKiYkIjVkSCkpKj4razQobyEpRmVuRidGRUYnRidGJ0YoRjBGPUYnRjAqKComJCI1KkcqSGBrY2ZrcjZGYmlsRidGRUYnRidGKEYwRjFGJ0YnKigqJiQiNSZ6IltcKXpYKlEhMyJGYmlsRidGRUYnRidGKEYwRmZwRidGJyooKiYkIjUnZS5XPyJlcmJzPUZddkYnRkVGJ0YnRihGMEZccUYnRicqKComJCI1PkJZQSZmdWpwRShGXXZGJ0ZFRidGJ0YoRjBGN0YnRicqKComJCI1b1lMUlwzKUdgMiNGU0YnRkVGJ0YnRihGMEZdckYnRicqKCQiNVMkKXBzaExmLCs5RmJpbEYnRihGMEYxRidGJyooJCI1IzM/cCI9dWFKV0VGXV9sRidGKEYwRjdGJ0YnKigkIjVJOHFBND8sYXhSRl12RidGKEYwRj1GJ0YwKigkIjVRel1lRyVIPlhHI0ZiaWxGJ0YoRjBGZnBGJ0YnKigkIjUhb3IlZnFHPXZBPUYmRidGKEYwRkZGJ0YwKigkIjVzPzphMSZHNVUlXEY8RidGKEYwRl1yRidGJyooJCIyYnMlPnZwW0hCRjxGJ0YoRjBGL0YnRicqKCQiNHdtIj4yOiY+eS4lRmVuRidGKEYwRmdvRidGMCooJCI1cm0xImZTOyhvOzhGXXZGJ0YoRjBGXHFGJ0YnKigkIjUnM3IudCopMyYqeWwjRl1fbEYnRihGMEZmbkYnRjAqKCQiNTdgcF9pI1JuW2sjRmJpbEYnRihGMEZdb0YnRjAqKCQiNUclKSkqZmd3PWNMNUZiaWxGJ0YoRjBGTUYnRjAqKCQiNXlBK2xYOiIpPkxhRmhxRidGKEYwRmpzRidGMCooJCI1SyIpKSpwRz9zKmVhJEZlbkYnRihGMEZURidGJ0YnKUZoekZORjBGJyomLFgqKComJCI1R3FpJmZJZDlASiJGNkYnRkVGJ0YnRihGMEZGRidGJyooKiYkIjVBKj0vcCk+dCNwOSRGXV9sRidGRUYnRidGKEYwRk1GJ0YnKigsJComJCI1ci9VekVQSkwmMyVGJkYnRkVGJ0YnRidGKEYwRlRGJ0YwKigqJiQiNXZGL1NTTCwsa09GXV9sRidGRUYnRidGKEYwRmZuRidGJyooKiYkIjUiKnlyQjlxIjNZXCJGYmlsRidGRUYnRidGKEYwRl1vRidGJyooKiYkIjVPKnBfc1BFPCUzQ0ZTRidGRUYnRidGKEYwRi9GJ0YnKigqJiQiNV0iXG41Iz4+IVJxI0YmRidGRUYnRidGKEYwRmdvRidGJyooKiYkIjVgYnNIJjQjZnUjZidGZW5GJ0ZFRidGJ0YoRjBGPUYnRicqKCwkKiYkIjUjNCcpcCUqKjQ0Omk2RmJpbEYnRkVGJ0YnRidGKEYwRjFGJ0YwKigsJComJCI1PGwySTkoZUhGTipGXV9sRidGRUYnRidGJ0YoRjBGZnBGJ0YwKigsJComJCI1dCUqPWwmKWVZPU5LRl12RidGRUYnRidGJ0YoRjBGXHFGJ0YwKigsJComJCI1c3VZWScqZSUqRytnRl12RidGRUYnRidGJ0YoRjBGN0YnRjAqKCwkKiYkIjVCJkg9KmVxIik+I28iRlNGJ0ZFRidGJ0YnRihGMEZdckYnRjAqKCQiNVRYPGtBXkxEOkFGYmlsRidGKEYwRjFGJ0YwKigkIjU9M0xVXWx5ITNLJEZdX2xGJ0YoRjBGN0YnRjAqKCQiNUB6bVdSdzEieiJcRl12RidGKEYwRj1GJ0YnKigkIjVFTkRxVUxZa2VJRmJpbEYnRihGMEZmcEYnRjAqKCQiNSMpcE9FLTsnPjVBI0YmRidGKEYwRkZGJ0YnKigkIjVvU3hMNmYpUTksJ0Y8RidGKEYwRl1yRidGMCooJCIzb0ZxJHpUXC0/JkZTRidGKEYwRi9GJ0YwKigkIjRcPFI+K0s3O2wiRiZGJ0YoRjBGZ29GJ0YnKigkIjVGeiJ5OUojPix2RUZddkYnRihGMEZccUYnRjAqKCQiNUBcdVdyRDEoKikpXEZdX2xGJ0YoRjBGZm5GJ0YnKigkIjVkRU55XkgoeTd4JEZiaWxGJ0YoRjBGXW9GJ0YnKigkIjVbOCFRVWJzbTBMIkZiaWxGJ0YoRjBGTUYnRicqKCQiNSkpb2VrRG9uKGZnJ0ZocUYnRihGMEZqc0YnRicqKCQiNSV5bCUzXiRRK0pNJUZlbkYnRihGMEZURidGMEYnKUZoekY+RjBGJyomLFgqKCwkKiYkIjVcWTZeTEsrISplRUY8RidGRUYnRidGJ0YoRjBGRkYnRjAqKCwkKiYkIjU7WUkqWyhRXlt2a0ZddkYnRkVGJ0YnRidGKEYwRk1GJ0YwKigqJiQiNWExa3h4K14hcEcpRjZGJ0ZFRidGJ0YoRjBGVEYnRicqKCwkKiYkIjU3dTxuKVxEMElqKUZddkYnRkVGJ0YnRidGKEYwRmZuRidGMCooLCQqJiQiNVxnXjxrJSo9XHhKRl1fbEYnRkVGJ0YnRidGKEYwRl1vRidGMCooKiYkIjVbJlxVLGA+WSkzTUZocUYnRkVGJ0YnRihGMEYvRidGJyooLCQqJiQiNSI+TiRmKHBeQWZSIkYmRidGRUYnRidGJ0YoRjBGZ29GJ0YwKigsJComJCI1Tk8mRy1qd0cwTSJGZW5GJ0ZFRidGJ0YnRihGMEY9RidGMCooKiYkIjV3WCVwRW1dSyZmREZdX2xGJ0ZFRidGJ0YoRjBGMUYnRicqKComJCI1QTlYTXBOLElbPkZdX2xGJ0ZFRidGJ0YoRjBGZnBGJ0YnKigqJiQiNSZRSU5kJWVRUj0qKUZlbkYnRkVGJ0YnRihGMEZccUYnRicqKComJCI1VShHRC5cLShbRDdGXXZGJ0ZFRidGJ0YoRjBGN0YnRicqKEZiZm1GJ0YoRjBGXXJGJ0YnKigkIjUjZVNuOlFqJSpILyJGYmlsRidGKEYwRjFGJ0YnKigkIjUmKTRrbyo9OyYqKnA4Rl1fbEYnRihGMEY3RidGJyooJCI1L1BDaCZHK1c7LCNGXXZGJ0YoRjBGPUYnRjAqKCQiNSRwJSpIbiE0I3lxSSJGYmlsRidGKEYwRmZwRidGJyooJCI1Y0UzXSgqXFRJNyEqRjZGJ0YoRjBGRkYnRjAqKCQiNSd6eWsmUi1XTU9DRjxGJ0YoRjBGXXJGJ0YnKigkIjQsbUhfP19FOzImRmhxRidGKEYwRi9GJ0YnKigkIjV6JXBqYTxFXShbPEYmRidGKEYwRmdvRidGMCooJCI1O3JFcVBmcmBDPkZddkYnRihGMEZccUYnRicqKCQiNTxsbGlDIUd6JVxFRl1fbEYnRihGMEZmbkYnRjAqKCQiNSNveGxQXiF6bHA7RmJpbEYnRihGMEZdb0YnRjAqKCQiNSMpUS1xbillWlZjJkZdX2xGJ0YoRjBGTUYnRjAqKCQiNSFcJj1UNFQ6SXhFRmhxRidGKEYwRmpzRidGMCooJCI1UnB0RFpXUE5uPEZlbkYnRihGMEZURidGJ0YnKUZoekZHRjBGJyomLD4qKCQiNTEjXGo/KmZpb3A3RjZGJ0YoRjBGZ29GJ0YnKigkIjV5eHh4eHgtJW87IkZlbkYnRihGMEY9RidGJyooJCI1eXh4eHh4eF9Zd0ZddkYnRihGMEZmcEYnRjAqKCQiNUxMTCQzeGNCM2giRl12RidGKEYwRmZuRidGJyooJCI1bm1tbW1UJikzQzVGJkYnRihGMEZURidGMCooJCI1TExMTCQzeCIpSEEiRmVuRidGKEYwRlxxRidGMCooJCI1I1xqP1xqPyo0XTpGREYnRihGMEZqc0YnRicqKCQiNXl4eHh4eC1mNTlGU0YnRihGMEZdckYnRjAqKCQiNW5tbTt6JSp6LTdpRl12RidGKEYwRjFGJ0YwKigkIjUrKysrXVA0JypmekZlbkYnRihGMEY3RidGMCooRmBcbkYnRihGMEYvRidGMCooJCI1QUFBczRXckVMKSpGXXZGJ0YoRjBGXW9GJ0YnKigkIjV5eHh4eEZTPT5fRjxGJ0YoRjBGRkYnRicqKCQiNUBcaj9canFoVEtGXXZGJ0YoRjBGTUYnRidGJylGaHpGW3RGMEYn LCYkIkQjKkdVKFEuY2AjNFoqW3U0QDlQWyEjTiEiIiomJCJEIWZaXEIoPVFvMVY9ITNWd0YtISlGJSIiIl4jRipGKkYq LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/LogNormalCharacteristicFunctionBench.mw000066400000000000000000000553341307543307100261340ustar00rootroot00000000000000 restart: Digits:=10: phi:=Int( LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Warning, premature end of input, use <Shift> + <Enter> to avoid this message. (exp((Pi^(2))/(8*sigma^(2))))/(sigma*sqrt(2*Pi))* exp(-u*exp(t))*exp(-(I*Pi*t)/(2*sigma^(2)))*exp(-(t^(2))/(2*sigma^(2))),t=-infinity..infinity); iMax:=4: jMax:=4: valnum:=sigma=1,u=1: ref:=fopen("ref_lognormal_cf.txt",WRITE,TEXT): for i from 0 to iMax do for j from 0 to jMax do sigmai:=10^((2*i)/(iMax)-1): uj:=10^((4*j)/(jMax)-2): st:=time(): v:=evalf(subs(sigma=sigmai,u=uj,phi)); t:=time() -st; print([evalf(sigmai),evalf(uj),Re(v),Im(v),t]); #` fprintf`(ref,"%.25e; %.25e; %.25e; %.25e; %.25e\134\134n", evalf(sigmai),evalf(uj),Re(v),Im(v),t); od; od; fclose(ref); LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Error, `)` unexpected JSFH openturns-1.9/validation/src/LogNormalFactoryMME.mw000066400000000000000000002610371307543307100225030ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY1LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEnYXNzdW1lRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiktRiw2JVEidUYnRi9GMi1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GY282JFEiMEYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0ZecC1GNjYtUSI8RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GY282JFEiMUYnRjlGOUY1Rk9GZ24tRiw2JVEkcGRmRidGL0YyRl9vLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGV4cEYnL0YwRj1GOS1Gam82JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZnci1GZ3E2KC1GIzYjLUklbXN1cEdGJDYlLUZqbzYkLUYjNiYtRiw2JVEkbG9nRidGXnJGOS1Gam82JC1GIzYlLUYsNiVRInhGJ0YvRjItRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZmckZoci1GLDYlUSJnRidGL0YyRjlGXnQtRiw2JVEjbXVGJ0ZeckY5RjktRiM2Iy1GY282JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZmcC1GIzYlRml0LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GXnM2JS1GLDYlUSgmc2lnbWE7RidGXnJGOUZndEZcdS8lLmxpbmV0aGlja25lc3NHRmJxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRlx2LyUpYmV2ZWxsZWRHRj1GOS1GIzYoLUYsNiVRJnNpZ21hRidGXnJGOUZgdUZnc0ZgdS1GLDYlUSVzcXJ0RidGXnJGOS1Gam82JC1GIzYlRml0RmB1LUYsNiVRI1BpRidGXnJGOUY5Rmh1Rmp1Rl12Rl92LUY2Ni1RIjtGJ0Y5RjtGanBGQEZCRkRGRkZIRmpuRk0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqLC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQqJiwmLUkjbG5HRiY2IywmSSJ4R0YpIiIiSSJnR0YpISIiRjNJI211R0YpRjUiIiNJJnNpZ21hR0YpISIjI0Y1RjdGM0Y4RjVGMUY1RjcjRjNGN0kjUGlHRidGOkY7 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEickYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder SSJyRzYi LCQqKiIiIyMiIiJGJC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQqJiwsKiQtSSNsbkdGKTYjLUYoNiMsJkkjbXVHRixGJiokSSZzaWdtYUdGLEYkISIiRiRGJiomRjJGJkY4RiYhIiMqJEY4RiRGJiomRjhGJkY6RiRGJCokRjoiIiVGPUYmRjpGPSNGO0YkRiZGOkY7SSNQaUdGKkZCRiU= NiUiIiEiIiIhIiI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEibUYnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUSomY29sb25lcTtGJ0YyLyUmZmVuY2VHRjEvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGMS8lKnN5bW1ldHJpY0dGMS8lKGxhcmdlb3BHRjEvJS5tb3ZhYmxlbGltaXRzR0YxLyUnYWNjZW50R0YxLyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGSS1GLDYlUSRpbnRGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Ky1GLDYlUSJ4RidGL0YyLUY2Ni1RJyZzZG90O0YnRjJGOUY7Rj1GP0ZBRkNGRS9GSFEmMC4wZW1GJy9GS0Zlbi1GLDYlUSRwZGZGJ0YvRjItRjY2LVEiLEYnRjJGOS9GPFEldHJ1ZUYnRj1GP0ZBRkNGRUZaL0ZLUSwwLjMzMzMzMzNlbUYnRlQtRjY2LVEiPUYnRjJGOUY7Rj1GP0ZBRkNGRUZHRkotRiw2JVEiZ0YnRi9GMi1GNjYtUSMuLkYnRjJGOUY7Rj1GP0ZBRkNGRS9GSFEsMC4yMjIyMjIyZW1GJ0Zmbi1GLDYlUSlpbmZpbml0eUYnRi9GMkYyLUY2Ni1RIjtGJ0YyRjlGXW9GPUY/RkFGQ0ZFRlpGSg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCouSSJ4R0YnIiIiLUkkZXhwR0YkNiMsJComLCYtSSNsbkdGJDYjLCZGK0YsSSJnR0YnISIiRixJI211R0YnRjgiIiNJJnNpZ21hR0YnISIjI0Y4RjpGLEY7RjhGNkY4RjojRixGOkkjUGlHRiVGPUY+L0YrO0Y3SSlpbmZpbml0eUdGJQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JVEjejFGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRIzEwRidGOS1GNjYtUSI6RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORlotRiw2JVElcGxvdEYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYpLUkmbWZyYWNHRiQ2KC1GIzYlLUYsNiVRJm9tZWdhRicvRjBGPUY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZZRmVuLUZqbjYkLUYjNiVGY28tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZicC1GUDYkUSIxRidGOUY5LUYjNiMtSSVtc3VwR0YkNiUtRmpuNiQtRiM2Jy1GLDYlUSVzcXJ0RidGZm9GOS1Gam42JC1GIzYjRmNvRjlGXnAtRiw2JVEkZXhwRidGZm9GOS1Gam42JC1GIzYkRmBxLUZqbjYkLUYjNiYtRiw2JVEkbG9nRidGZm9GOUZjcUZnb0YrRjlGOUY5LUYjNiMtRlA2JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLyUubGluZXRoaWNrbmVzc0dGZnAvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYXMvJSliZXZlbGxlZEdGPS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRlkvRk5RLDAuMzMzMzMzM2VtRidGY28tRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRlA2JEZcc0Y5LUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmFwRmVuLUZQNiRRJDEwMEYnRjlGOS1GNjYtUSI7RidGOUY7RmlzRkBGQkZERkZGSEZZRk0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdccDckJCIvRGMsO3VANSEjOCQiMTYxXW5PaT9tISM8NyQkIjJNTEwkM3gmKSozIiEjOyQiMnc/O3U8TlFXJSEjPTckJCIybjsvXiJRKHo6IiEjOyQiMSpvKT5jMSJlXiQhIzw3JCQiLnY9IyoqM0U3ISM3JCIxIzRzcj9WcSZIISM8NyQkIjJLJGVrR2c/JUgiISM7JCIyJ2U3UiMpKnBkZCMhIz03JCQiMm1tO2E4QUJPIiEjOyQiMj1kKipmRmRuSCMhIz03JCQiL3Y9VSNRL1YiISM4JCIyOnFXdlJwSDMjISM9NyQkIjJMTGUqW1ZiKVwiISM7JCIxI28/cVJkTyI+ISM8NyQkIjJtO0hkWHFtYyIhIzskIjJaRSlIYyhmaHgiISM9NyQkIixEYyd5TTshIzUkIjJ2dkYhKnlnQW0iISM9NyQkIjJMJDNGcEUhSHEiISM7JCIyQXpaRT52amMiISM9NyQkIjJubVRneD01eCIhIzskIjIyWU1lZGpYWyIhIz03JCQiL0QiRylbOFI9ISM4JCIycmEnPSU0alJUIiEjPTckJCIyTUwkZSopNEQyPiEjOyQiMmwnKjQ8KjNXXzghIz03JCQiMm47YWo0bmAoPiEjOyQiMnBjKHB3VFApSCIhIz03JCQiLkRKPyRbVj8hIzckIjIxI2VJQmRdXTchIz03JCQiMk0kZSopNCQqZjZAISM7JCIyXjZUMzRZeT8iISM9NyQkIjFubW07YXJ6QCEjOiQiMGxTdnYwJ3A2ISM7NyQkIjJMZVJzTF0jKUgjISM7JCIyIkcmPmBJbTw2IiEjPTckJCIvRCJ5RCZ5O0MhIzgkIjJlSUJPT2FHMSIhIz03JCQiMm5UJlF5LEtORCEjOyQiMmU8eip5VitANSEjPTckJCIxTCRlKik0YlFsIyEjOiQiMWouKG9JYyRbKSohIz03JCQiMm07LywlXCM0KkchIzskIjEpUV5pcXJnRCohIz03JCQiLUQieSUqejckISM2JCIwaHZcZCtMeikhIzw3JCQiMk0kZVJBWTFsTCEjOyQiMDhrPSlSXkIlKSEjPDckJCIyb21UTllNQGckISM7JCIwTSVbXSIqcEEiKSEjPDckJCIvdm8vVj9SUSEjOCQiMVpsTiNRR1coeSEjPTckJCIxTUwkZTl1aTIlISM6JCIxWCJ6LFEoM253ISM9NyQkIi12b01yVV4hIzYkIjFDIm9neCI0ZXEhIz03JCQiMW5tbSJ6XyI0aSEjOiQiMWRIM1lOKUd1JyEjPTckJCIxbW1tbTZtI0coISM6JCIxKXojZlhZc3NsISM9NyQkIjFubW1UJnBoTikhIzokIjFCZSR5NHVkWychIz03JCQiMUwkMy1qcy4qKSkhIzokIjFVUVowXidHWSchIz03JCQiLXY9ZGRDJSohIzYkIjFSM3EkcHAqXGshIz03JCQiMW47SDIpeShlKiohIzokIjJPTDZuZFBfVychIz43JCQiMkxMJGUqPSlIXDUhIzokIjE9M3NkTkJaayEjPTckJCItdj1KTls2ISM1JCIxQDEpKik+bV1ZJyEjPTckJCIybW07ei8zdUMiISM6JCIxSHF2N1kpcFwnISM9NyQkIi1ESiRSRFgiISM1JCIxUXdHT0VcJGYnISM9NyQkIjJubTt6UidvazshIzokIjE6USgqWyhIMnMnISM9NyQkIi1EMUo6dz0hIzUkIjEjb2FhcmRTJ28hIz03JCQiMkxMTCQzRW4kNCMhIzokIjEmZW1ra2c+LSghIz03JCQiMm1tbVQhUkUmRyMhIzokIjJiR2wiZUpjbXIhIz43JCQiK0QuJjRdIyEiKSQiMVxZJVstP0tMKCEjPTckJCIrdkJfPEYhIikkIjEvOyQpKVsjMy52ISM9NyQkIit2J0hpI0ghIikkIjEpbyVlRDk3b3chIz03JCQiMm1tO3oqZXY6SiEjOiQiMTpFJ3A4YSY9eSEjPTckJCIxTExMMzQ3VEwhIzkkIjAwcyRlSmkoKnohIzw3JCQiMUxMTExZLktOISM5JCIxY0RgJXolPVwiKSEjPTckJCItRCJvN1R2JCEjNSQiMWFpKCo+KXpdSykhIz03JCQiMk9MTExRKm9dUiEjOiQiMEs/K2RlLVspISM8NyQkIi1EIj1sajslISM1JCIxTVAnUl1MKVwnKSEjPTckJCItdlYmUjxQJSEjNSQiMWVxZ1x5YzUpKSEjPTckJCIxTEwkZTlFZ2UlISM5JCIxPSR5b1FcdSgqKSEjPTckJCIxTUxlUiIzR3klISM5JCIwLSdlWzwjKkgiKiEjPDckJCIya21tVDVrXSpcISM6JCIxWyQ0JHkpR05IKiEjPTckJCIybG07elJRYkAmISM6JCIxbnI1dig+RFkqISM9NyQkIi12PT5ZMmEhIzUkIjBXN3dgTikzJyohIzw3JCQiMW5tO3pYdTljISM5JCIweVNnRk9ndyohIzw3JCQiKiZ5KSlHZSEiKCQiMVAvJioqcFt2IyoqISM9NyQkIixERSZRUWchIiokIjFLLnNdInAlMzUhIzw3JCQiLUQieSUzVGkhIzUkIjIoXDMjcEckZkI1ISM9NyQkIix2LltoWSchIiokIjJGJkd4Z19IUzUhIz03JCQiMUxMTCRReCRvbSEjOSQiMSwmeTEiR0FiNSEjPDckJCIrdi5JJSlvISIpJCIyKT4uPEElejUyIiEjPTckJCIxbW0ienBlKnpxISM5JCIyUWo5XV53YDMiISM9NyQkIitEXCdRSCghIikkIjJHUDVAN0o0NSIhIz03JCQiMUxMZTlTOCZcKCEjOSQiMiYqSDQkR2dcOjYhIz03JCQiLUQxIz1icSghIzUkIjJWcFN4IipbMTgiISM9NyQkIjFMTEwzcz82eiEjOSQiL3hXKVwlUlg2ISM6NyQkIi1ESlhhRSIpISM1JCIyWypSX3Etd2c2ISM9NyQkIjFubW1tKlJSTCkhIzkkIjElSDIjbz1cdjYhIzw3JCQiMW5tO2E8LlkmKSEjOSQiMjoocDNgLVwhPiIhIz03JCQiMUxMZTl0T2MoKSEjOSQiMFY5KFEkKkgwNyEjOzckJCIqJlFrXCopISIoJCIyVVEhUk06Jik9NyEjPTckJCIxTUwkM2RnNjwqISM5JCIyUmMrJCpwPlZCIiEjPTckJCIxbW1tbXhHcCQqISM5JCIyZCkpUkMpeTRbNyEjPTckJCItRCJvSzBlKiEjNSQiMXp5SydwSUZFIiEjPDckJCItdj01cyN5KiEjNSQiMlFRSiNlPG93NyEjPTckJCIlKzUhIiIkIjFGZDhXaGgiSCIhIzwtJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJVZJRVdHNiQ7JCIiISEiIiQiJSs1ISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1UScmIzk2OTs2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJmZhbHNlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1Enbm9ybWFsNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkXSYhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhRyQhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlK04hIiItJSlDSElMRFJFTkc2Ig== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElQmV0YUYnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSShtZmVuY2VkR0YkNiQtRiM2Jy1JI21uR0YkNiRRIjFGJ0YyLUkjbW9HRiQ2LVEiLEYnRjIvJSZmZW5jZUdGMS8lKnNlcGFyYXRvckdRJXRydWVGJy8lKXN0cmV0Y2h5R0YxLyUqc3ltbWV0cmljR0YxLyUobGFyZ2VvcEdGMS8lLm1vdmFibGVsaW1pdHNHRjEvJSdhY2NlbnRHRjEvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GLDYlUSJuRicvRjBGRi9GM1EnaXRhbGljRictRj82LVEoJm1pbnVzO0YnRjJGQi9GRUYxRkdGSUZLRk1GTy9GUlEsMC4yMjIyMjIyZW1GJy9GVUZcby1GOzYkUSIyRidGMkYyLUY/Ni1RIjtGJ0YyRkJGREZHRklGS0ZNRk9GUS9GVVEsMC4yNzc3Nzc4ZW1GJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiQsJkkibkc2IiIiIiEiI0YmISIi LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZmcC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GUDYmRlJGVUZYL0ZlblElYXV0b0YnLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUStTdGF0aXN0aWNzRidGL0YyRjlGNUZPLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMjBGJ0Y5RjVGT0Zmby1GLDYlUSJwRidGL0YyRl5wLUYsNiVRJFBERkYnRi9GMi1GX282JC1GIzYmLUYsNiVRL1JhbmRvbVZhcmlhYmxlRidGL0YyLUZfbzYkLUYjNiQtRiw2JVExQmV0YURpc3RyaWJ1dGlvbkYnRi9GMi1GX282JC1GIzYlLUZicDYkUSIxRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmlvL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRIm5GJ0YvRjJGOUY5RmByLUYsNiVRInVGJ0YvRjJGOS1GNjYtUSI7RidGOUY7RmNyRkBGQkZERkZGSEZpb0ZNRmduRk9GZm8tRiw2JVEicUYnRi9GMkZecC1GLDYlUSlRdWFudGlsZUYnRi9GMi1GX282JC1GIzYmRl9xLUZfbzYkLUYjNiQtRiw2JVEnTm9ybWFsRidGL0YyLUZfbzYkLUYjNiUtRmJwNiRRIjBGJ0Y5RmByRl1yRjlGOUZgckZpckY5RlxzRk9GZm8tRiw2JVEkcGhpRicvRjBGPUY5Rl5wRmhwLUZfbzYkLUYjNiZGX3FGaXNGYHItRiw2JVEieEYnRi9GMkY5RlxzRk8tRiw2JVEkUEhJRidGL0YyRl5wLUYsNiVRJENERkYnRi9GMkZbdUZcc0ZPRmZvLUYsNiVRKmludGVncmFuZEYnRi9GMkZecEZmb0Zmci1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGaW9Gam9GX3VGW3ZGZ3RGW3YtSSVtc3VwR0YkNiUtRl9vNiQtRiM2JUZdci1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORml2RmJ1RjktRiM2JUZmckZldkZdci8lMXN1cGVyc2NyaXB0c2hpZnRHRmZ0RlxzRk9GZm8tRiw2JVElcGxvdEYnRi9GMi1GX282JC1GIzYrLUYsNiVRJXN1YnNGJ0YvRjItRl9vNiQtRiM2J0Zmci1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GYnA2JFEjMTBGJ0Y5RmByLUkmbWZyYWNHRiQ2KEZodS1GIzYjRmd0LyUubGluZXRoaWNrbmVzc0dGX3IvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXHkvJSliZXZlbGxlZEdGPUY5RmByRl91Rl14LUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZodkZqdi1GYnA2JFEiOUYnRjktRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkhGaHZGam9GZHlGOUZcc0ZPLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGYHpGO0Y+RkBGQkZERkZGSEZpb0Zqb0Zmby1GLDYlUSJrRidGL0YyRmZvLUY2Ni9RJWZyb21GJ0ZdekZfekZhekY7Rj5GQEZCRkRGRkZIRmlvRmpvRmZvRl1yRmZvLUY2Ni9RI3RvRidGXXpGX3pGYXpGO0Y+RkBGQkZERkZGSEZpb0Zqb0Zmby1GYnA2JFEjNTBGJ0Y5RmZvLUY2Ni9RI2RvRidGXXpGX3pGYXpGO0Y+RkBGQkZERkZGSEZpb0Zqb0ZPRmZvLUYsNiVRIktGJ0YvRjJGXnAtRmJwNiRRJDEwMEYnRjlGW3ZGY3pGNUZPRmZvLUYsNiVRJnByaW50RidGL0YyLUZfbzYkLUYjNiUtRiw2JVEmZXZhbGZGJ0YvRjItRl9vNiQtRiM2Iy1GX282Ji1GIzYmRmJbbEZgci1GLDYlUSRJbnRGJ0YvRjItRl9vNiQtRiM2K0Zmdy1GX282JC1GIzYnRmZyRl14RmJbbEZgckZodUY5RmByRl91Rl14RmF5LUYsNiVRKWluZmluaXR5RidGL0YyRmd5RmVdbEY5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGOS1GLDYjUSFGJ0Y5RlxzRk9GZm8tRjY2L1Ejb2RGJ0ZdekZfekZhekY7Rj5GQEZCRkRGRkZIRmlvRmpvRlxz LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkidUc2IiIiIUYpMkYnIiIiKiYpLCZGK0YrRichIiIsJkkibkdGKEYrRi9GK0YrRjFGK0Yp KiYtSSdSb290T2ZHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywoLUkkZXJmR0YlNiNJI19aR0YlISIiRi8iIiJJInVHRigiIiNGMEYyI0YwRjI= LCQqKCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkLUkkZXhwRzYkRihJKF9zeXNsaWJHNiI2IywkKiRJInhHRi9GJEYpRiZGJQ== LCYjIiIiIiIjRiQtSSRlcmZHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiZJInhHRitGJEYlRiNGI0Yj LCQqLkkibkc2IiIiIkkieEdGJUYmIiIjI0YmRihJI1BpRyUqcHJvdGVjdGVkRyMhIiJGKC1JJGV4cEc2JEYrSShfc3lzbGliR0YlNiMsJCokRidGKEYsRiYpLCZGKUYmLUkkZXJmR0YwNiMsJComRidGJkYoRilGKUYsLCZGJEYmRi1GJkYmRik= LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdVNyQkISMhKiEiIiQhJCsqISIiNyQkIStEN2wyJykhIiokIStEN2wyJykhIik3JCQhLXZgMUZtIykhIzYkITElKipcUGxxaUUpISM5NyQkISx2XF9CKXkhIzUkITEnKSkqXChcX0IpeSEjOTckJCEsRFsqKWVcKCEjNSQhMXp4XCNbKillXCghIzk3JCQhLXZlS0U2ciEjNiQhMS9LcmVLRTZyISM5NyQkIS12OGJtYW4hIzYkITFOW0o4Ym1hbiEjOTckJCEtdi4jSGFRJyEjNiQhMSd5USkpPkhhUSchIzk3JCQhLXYkW2tOKychIzYkITElUSs7VmtOKychIzk3JCQhLXYzVyNIaSYhIzYkITE6I3pPJFIjSGkmISM5NyQkISswJCpRSl8hIiokITImKilIU1dgUUpfISM6NyQkISxEKFxfJylbISM1JCEya2F1WFMtbClbISM6NyQkISs6JSpHKVwlISIqJCEyJz5RRV8yOilcJSEjOjckJCErRChmJTNUISIqJCEybW4kZiJSQng1JSEjOjckJCErJmUneUtQISIqJCExMj9QKXkxJ0hQISM5NyQkIS12JFFSO1IkISM2JCExVk13Vy8wIlEkISM5NyQkIStsQilmKUghIiokITJ0LSZRJFE5I1tIISM6NyQkISptUEJrIyEiKSQhMi5UQDp1S2dhIyEjOjckJCEtdnRyZlVBISM2JCExUj1nb0lFLj8hIzk3JCQhKjZmKCkpPSEiKSQhMlVrLDI3d0lXIiEjOjckJCEtdnRFYSs6ISM2JCExMCFvWm9yIWYhKSEjOjckJCEtREApbzM4IiEjNiQhMSI9aUpsSDNFJCEjOjckJCEtdiR6MyxRKiEjNyQhMihbJmVzSElubiIhIzs3JCQhK3YkSDpYKCEjNSQhMSdSblRtYSxEKCEjOzckJCEtREo5XCFvJiEjNyQhMUg+KD07KT11RiEjOzckJCEsdltgJTRSISM2JCEwQVpoZnBOTCkhIzs3JCQhKURoJSkpKSEjNSQhMVt4XiV5dyJcPSEjPjckJCIsRDsicHpRISM2JCIyLyNSdz85YyIpSCEjPzckJCIsdmA5VkwoISM2JCIyWjNvZSdcbjM5ISNANyQkIixEQ1NsNSIhIzUkIjEqR0EkW3MybjohI0E3JCQiKjgpKj5cIiEiKSQiMjliWV9FMW9hJSEjRTckJCIsRFokNHA9ISM1JCIxQ3pzLi4mKW9ZISNHNyQkIi1EMUUmUkIjISM2JCIxKFx2Ni5vJXo+ISNKNyQkIix2WW0hUkUhIzUkIjF1eFlBSEx4KCohI083JCQiKkh6SSskISIpJCIyRGltNz8ieSEzJSEjVDckJCIrdjF1IlIkISIqJCIxJCozLVJeMSFcIyEjWDckJCItRGNjI1J1JCEjNiQiMUZCWihHZXRgIiEjXTckJCIrbG8mKkdUISIqJCIxbygpKT0lNEhSIiohI2Q3JCQiLURFN0MiXCUhIzYkIjJaelw/Q0VjI1IhI2s3JCQiLURyRiQqcFshIzYkIjI4QCdlTCpHOmMjISNyNyQkIit2SDxTXyEiKiQiMUhZTDM9ay5zISN5NyQkIi1EYyx5RmMhIzYkIjEyY3Ypby5RWiMhIycpNyQkIiolPjQsZyEiKSQiMmEiUVd2MUMtXSEjJyo3JCQiLHY6ZEdRJyEjNSQiMT4ocEg3SV4hPSEkLyI3JCQiLURtNllobiEjNiQiMjgsJSo9QSopeT0jISQ6IjckJCIqJCplJDRyISIpJCIxenkiKTRoUUNiISRDIjckJCIsdi0qMzN2ISM1JCIyd2orWiFlM3g5ISRPIjckJCIqKXpya3khIikkIjJ6NnZoeTtIKj4hJFoiNyQkIi1ERSllXEMpISM2JCIyN0EnKnliWHRaIiEkZiI3JCQiLXZMeSopMycpISM2JCIxTCopUScpXCE+NCIhJHEiNyQkIiMhKiEiIiQiLG9KLVFrJSEkeiItJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJVZJRVdHNiQ7JCEjISohIiIkIiMhKiEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEieDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiI3EhIiItJSlCT1VORFNfWUc2IyQiJD8iISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlISlRISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJV1QISIiLSUpQ0hJTERSRU5HNiI= IiQrIg== NyQkIiQrIiIiISQhNURQJW9Ua2okZjJEISM+ IiQrIw== NyQkIiQrIyIiISQhNUNcYTZYWkMvWUYhIz4= IiQrJA== NyQkIiQrJCIiISQhNWU9JSk0Olpvd3hHISM+ IiQrJQ== NyQkIiQrJSIiISQhNSVwKSlwJDQjPXkib0ghIz4= IiQrJg== NyQkIiQrJiIiISQhNW9PSipHZk0qcE9JISM+ IiQrJw== NyQkIiQrJyIiISQhNTRIYG1QZkFxIjQkISM+ IiQrKA== NyQkIiQrKCIiISQhNW0lSEwkKVIqeWFQSiEjPg== IiQrKQ== NyQkIiQrKSIiISQhNWNARDN6Lzl6d0ohIz4= IiQrKg== NyQkIiQrKiIiISQhNTkpeSdSSSEqZjA2SyEjPg== IiUrNQ== NyQkIiUrNSIiISQhNTknM1dMInBkVlRLISM+ IiUrNg== NyQkIiUrNiIiISQhNVxfJkcwYlstKG9LISM+ IiUrNw== NyQkIiUrNyIiISQhNSI0dUBGOVQ/TUgkISM+ IiUrOA== NyQkIiUrOCIiISQhNTUmPSwsaUw5Z0okISM+ IiUrOQ== NyQkIiUrOSIiISQhNVZDYG9Nbz0ib0wkISM+ IiUrOg== NyQkIiUrOiIiISQhNXAxQztRazMyY0whIz4= IiUrOw== NyQkIiUrOyIiISQhNXloQydIJVJ5KlJQJCEjPg== IiUrPA== NyQkIiUrPCIiISQhNU4+byYpUSRwZzJSJCEjPg== IiUrPQ== NyQkIiUrPSIiISQhNTsjPm9BTHQoXDFNISM+ IiUrPg== NyQkIiUrPiIiISQhNVBjJ0hTREBDOFUkISM+ IiUrPw== NyQkIiUrPyIiISQhNSJwSEk5RDtQYFYkISM+ IiUrQA== NyQkIiUrQCIiISQhNVQyRyUqM0QhPidbTSEjPg== IiUrQQ== NyQkIiUrQSIiISQhNUsqRzpTXFVTN1kkISM+ IiUrQg== NyQkIiUrQiIiISQhNTxIMU8vOkJFdE0hIz4= IiUrQw== NyQkIiUrQyIiISQhNTQnemRvd2xQWlskISM+ IiUrRA== NyQkIiUrRCIiISQhNUkqSCZvTGNGciZcJCEjPg== IiUrRQ== NyQkIiUrRSIiISQhNTk/cEM1QSRHaV0kISM+ IiUrRg== NyQkIiUrRiIiISQhNSt2KWUiPk4uSztOISM+ IiUrRw== NyQkIiUrRyIiISQhNWRwamtJWjItRU4hIz4= IiUrSA== NyQkIiUrSCIiISQhNWl1TG9pZSFlYGAkISM+ IiUrSQ== NyQkIiUrSSIiISQhNWskKjRMTyZ6ZFZhJCEjPg== IiUrSg== NyQkIiUrSiIiISQhNTI8Jz4zeCFIL2BOISM+ IiUrSw== NyQkIiUrSyIiISQhNT8+JVtqTjVNOWMkISM+ IiUrTA== NyQkIiUrTCIiISQhNWZjYDsySSxicE4hIz4= IiUrTQ== NyQkIiUrTSIiISQhNVowUTJWNyEzdWQkISM+ IiUrTg== NyQkIiUrTiIiISQhNXEjNFlGdkRCXWUkISM+ IiUrTw== NyQkIiUrTyIiISQhNSJca009JUcrVCNmJCEjPg== IiUrUA== NyQkIiUrUCIiISQhNWxJbyE9WEgiZSpmJCEjPg== IiUrUQ== NyQkIiUrUSIiISQhNW0tQmhWaCpbbGckISM+ IiUrUg== NyQkIiUrUiIiISQhNWd3OHduJClSSzhPISM+ IiUrUw== NyQkIiUrUyIiISQhNWc+PnIlR1k7Kj5PISM+ IiUrVA== NyQkIiUrVCIiISQhNTwmPSlIYExkTEVPISM+ IiUrVQ== NyQkIiUrVSIiISQhNVxqZnduUS9mS08hIz4= IiUrVg== NyQkIiUrViIiISQhNUN2NClRZmYpb1FPISM+ IiUrVw== NyQkIiUrVyIiISQhNUJiVjJJY3dqV08hIz4= IiUrWA== NyQkIiUrWCIiISQhNWglKXpgKmZiVy9sJCEjPg== IiUrWQ== NyQkIiUrWSIiISQhNSRbRCVwaWlkNmNPISM+ IiUrWg== NyQkIiUrWiIiISQhNU55TCVlaUpkO20kISM+ IiUrWw== NyQkIiUrWyIiISQhNTlZIylbNW1bMm5PISM+ IiUrXA== NyQkIiUrXCIiISQhNTVseFRRLlBQc08hIz4= IiUrXQ== NyQkIiUrXSIiISQhNWMkeVsoeiF6ZXZuJCEjPg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY4LUkjbW9HRiQ2L1EkZm9yRicvJSVib2xkR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSVib2xkRicvJStmb250d2VpZ2h0R0Y0LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y5LyUpc3RyZXRjaHlHRjkvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkgtRiw2LVEifkYnL0YzUSdub3JtYWxGJ0Y3RjpGPEY+RkBGQkZERkZGSS1JI21pR0YkNiVRIm5GJy8lJ2l0YWxpY0dGMS9GM1EnaXRhbGljRidGSy1GLDYvUSVmcm9tRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGSy1JI21uR0YkNiRRIjFGJ0ZORkstRiw2L1EjdG9GJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZLRmVuRkstRiw2L1EjZG9GJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSS1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZILyUmZGVwdGhHRmRvLyUqbGluZWJyZWFrR1EobmV3bGluZUYnRkstRlE2JVEmZXZhbGZGJ0ZURlYtSShtZmVuY2VkR0YkNiQtRiM2JC1GUTYlUSRJbnRGJ0ZURlYtRmBwNiQtRiM2Ky1GUTYlUSJxRidGVEZWLUYsNi1RJyZzZG90O0YnRk5GN0Y6RjxGPkZARkJGREZGRkktRlE2JVEicEYnRlRGVi1GLDYtUSIsRidGTkY3L0Y7RjFGPEY+RkBGQkZERkYvRkpRLDAuMzMzMzMzM2VtRictRlE2JVEidUYnRlRGVi1GLDYtUSI9RidGTkY3RjpGPEY+RkBGQkZEL0ZHUSwwLjI3Nzc3NzhlbUYnL0ZKRmFyLUZmbjYkUSIwRidGTi1GLDYtUSMuLkYnRk5GN0Y6RjxGPkZARkJGRC9GR1EsMC4yMjIyMjIyZW1GJ0ZJRmVuRk5GTi1GLDYtUSI7RidGTkY3RmdxRjxGPkZARkJGREZGRmJyRl9vRkstRiw2L1Ejb2RGJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZbcw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Warning, computation interrupted LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElZGlmZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYnLUkjbW5HRiQ2JFEiMUYnL0YzUSdub3JtYWxGJy1JI21vR0YkNi1RKCZtaW51cztGJ0Y+LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZGLyUpc3RyZXRjaHlHRkYvJSpzeW1tZXRyaWNHRkYvJShsYXJnZW9wR0ZGLyUubW92YWJsZWxpbWl0c0dGRi8lJ2FjY2VudEdGRi8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRlUtSSVtc3VwR0YkNiUtRjY2JC1GIzYmRjpGQC1GLDYlUSJRRidGL0YyLUY2NiQtRiM2Iy1GLDYlUSJ4RidGL0YyRj5GPi1GIzYjLUYsNiVRIm5GJ0YvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUZBNi1RIixGJ0Y+RkQvRkhGMUZJRktGTUZPRlEvRlRRJjAuMGVtRicvRldRLDAuMzMzMzMzM2VtRidGYG9GPi1GQTYtUSI7RidGPkZERl5wRklGS0ZNRk9GUUZfcC9GV1EsMC4yNzc3Nzc4ZW1GJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiopLCYiIiJGJS1JIlFHNiI2I0kieEdGKCEiIkkibkdGKEYlRixGJS1JJWRpZmZHJSpwcm90ZWN0ZWRHNiRGJkYqRiVGJEYr JSFH openturns-1.9/validation/src/LogUniformCharacteristicFunction.mw000066400000000000000000001126301307543307100253540ustar00rootroot00000000000000 restart: Digits:=50: assume(a>0,b>0,a<b,x,real,y,real); cf:=int(exp(I*u*x)/(x*(log(b) - log(a))),x=a..b); (simplify(convert(cf,hypergeom))); LCQqJiwmLUkjRWlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JCIiIiooXiMhIiJGLEkjYXxpckc2Iy9JJ19sb2NhbEdGKEkyX24xNDAxOTQ1MDMzODAyODhHRipGLEkidUdGKkYsRi8tRiY2JEYsKihGLkYsSSNifGlyRzYjL0YzSTJfbjE0MDE5NDUwMzM4MDYwOEdGKkYsRjVGLEYsRiwsJi1JI2xuR0YnNiNGOUYsLUY/NiNGMEYvRi9GLw== KiYsKioqXiMhIiIiIiJJI2F8aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDE5NDUwMzM4MDI4OEc2IkYnSSJ1R0YuRictSSpoeXBlcmdlb21HSShfc3lzbGliR0YuNiU3JEYnRic3JCIiI0Y2KiheI0YnRidGKEYnRi9GJ0YnRictSSNsbkc2JEYsRjI2I0YoRiYqKkY4RidJI2J8aXJHNiMvRitJMl9uMTQwMTk0NTAzMzgwNjA4R0YuRidGL0YnLUYxNiVGNEY1KihGOEYnRj5GJ0YvRidGJ0YnLUY6NiNGPkYnRicsJkZFRidGOUYmRiY= help(Ei); evalf(GAMMA(1e-30,I)); XiQkIVN0RW9CJ28jSF5sYCkpUT9ZRW1NIm80IUgjUlNQJCEjXSQhU3ZMMEwiPSNvKipvPDx5UG8qKkcvT3JGa0Q4WmlGJQ== Ei(1, 1.0+100.0*I) XiQkIlM0cjkmbyl6dSFbM3NjVFAmUnJoUThyOCxHRD4hI18kIVNcWCdHVmoxbWdyI3ohNCNwO0InbyU+OCtLW0xKRiU= evalf(20!^2/(10^(2*20+1)));diff(Ei(1,z),z); JCJTUzNIL0k1T0UtLis8XSgqKioqKipbemp2SjcpPmkiJCpI LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInpHRikhIiIiIiJGLEYtRi0= int(exp(-t)/t,t=1.0..infinity); JCIrVyRSUT4jISM1 I1:=int(exp(-rho)*(x+rho)/((x+rho)^2+y^2),rho=0..infinity); I2:=int(exp(-rho)*y/((x+rho)^2+y^2),rho=0..infinity);simplify( exp(-(x+I*y))*(I1-I2*I)); LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMiIiISwmSSN4fGlyRzYiISIiKiZeI0YrIiIiSSN5fGlyR0YqRi5GLkkqdW5kZWZpbmVkR0YkMkYnLCZGKUYrKiZeI0YuRi5GL0YuRi5GMCwkKiYtSSRleHBHNiRGJEkoX3N5c2xpYkdGKjYjLCZGKUYuRixGLkYuLCYqJi1GODYjKiZeIyIiI0YuRi9GLkYuLUkjRWlHRjk2JEYuLCZGKUYuRjNGLkYuRi4tRkU2JEYuRjxGLkYuI0YuRkM= LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMiIiISwmSSN4fGlyRzYiISIiKiZeI0YrIiIiSSN5fGlyR0YqRi5GLkkqdW5kZWZpbmVkR0YkMkYnLCZGKUYrKiZeI0YuRi5GL0YuRi5GMCooXiMjRi4iIiNGLiwmKiYtSSRleHBHNiRGJEkoX3N5c2xpYkdGKjYjKiZeI0Y4Ri5GL0YuRi4tSSNFaUdGPTYkRi4sJkYpRi5GM0YuRi5GLi1GQzYkRi4sJkYpRi5GLEYuRitGLi1GPDYjRkhGLg== KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmSSN4fGlyR0YoISIiKiZeI0YsIiIiSSN5fGlyR0YoRi9GL0YvLCYtSSpwaWVjZXdpc2VHRiY2JzIiIiFGKkkqdW5kZWZpbmVkR0YmMkY2LCZGK0YsKiZeI0YvRi9GMEYvRi9GNywmKiYtRiQ2IywmRitGL0Y6Ri9GLy1JI0VpR0YlNiRGL0ZARi8jRi8iIiMqJi1GJDYjLCZGK0YvRi1GL0YvLUZCNiRGL0ZJRi9GREYvKiZGLkYvLUYzNidGNUY3RjhGNyooXiNGREYvLUYkNiNGK0YvLCYqJi1GJDYjRjpGL0ZBRi9GLyomLUYkNiNGLUYvRkpGL0YsRi9GL0YvRi8= simplify(exp(-z)*int(exp(-t)/(z+t),t=0..infinity),symbolici); LUkjRWlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JCIiIkkiekdGJw== int(exp(-x)*cos(x),x=0..infinity) IyIiIiIiIw== openturns-1.9/validation/src/Meixner.mw000066400000000000000000002525071307543307100203330ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzY9LUYsNiVRInhGJ0YvRjItRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJy1GLDYlUShpbnRlZ2VyRidGL0YyRmdvLUYsNiVRIm5GJ0YvRjJGZ29GXXBGZ29GYHAtRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOUZnby1GLDYlUSJwRidGL0YyRmNwRmZwRmdvRmpwLUY2Ni1RIjxGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZncDYkUSIxRidGOUZnby1GLDYlUSJyRidGL0YyRmdvRl1wRmdvRmNxRmNwRmBxRjktRjY2LVEiO0YnRjlGO0Zqb0ZARkJGREZGRkhGam5GTUZPLUYsNiVRJXJlY2NGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZnbi1GLDYlUSJQRidGL0YyLUZgbzYmLUYjNiVGYHAtRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZqckZgcUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1GIzYlLUZgbzYkLUYjNiVGanAtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZpckZbc0ZgcUY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0Zkby1GIzYlRmpwRmF0LUZgbzYkLUYjNiVGYHBGZnJGY3FGOS8lLmxpbmV0aGlja25lc3NHRmJxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRl51LyUpYmV2ZWxsZWRHRj1GYXRGZ25GX3ItRmBvNiYtRiM2I0ZgcEY5RlxzRl9zRmZyLUZgbzYkLUYjNiVGYHFGZnItRmZzNihGYHAtRiM2JUZmdEZhdEZqcEZqdEZcdUZfdUZhdUY5RmF0RmduRl9yRmN1Rl50LUZmczYoRmBwRmR0Rmp0Rlx1Rl91RmF1RmF0Rl9yLUZgbzYmLUYjNiVGYHBGXnRGYHFGOUZcc0Zfc0ZmcQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LyZJIlBHNiI2IywmSSNufGlyR0YlIiIiRilGKSwoKiwsJiEiIkYpSSNwfGlyR0YlRilGKUkjeHxpckdGJUYpJkYkNiNGKEYpRi5GLSwmRihGKUkjcnxpckdGJUYpRi1GKSomLCZGKUYpKihGKEYpRi5GLUYyRi1GKUYpRjBGKUYpKipGKEYpJkYkNiMsJkYoRilGLUYpRilGLkYtRjJGLUYt Qyw+SS5ub3JtYWxpemF0aW9uRzYiLyZJIlBHRiU2I0kibkdGJSomLUklc3FydEdGJTYjKiopSSJwR0YlLCRGKiEiIiIiIi1JKmZhY3RvcmlhbEclKnByb3RlY3RlZEdGKUY0LUkmR0FNTUFHRiU2IywmRipGNEkickdGJUY0RjMtRjk2I0Y8RjRGNCZJIlFHRiVGKUY0RjM+SSRlcVFHRiUtSSZzb2x2ZUdGJTYkLUklc3Vic0dGNzYmLUZHNiQvRiosJkYqRjRGNEY0RiRGJC1GRzYkL0YqLCZGKkY0RjNGNEYkSSVyZWNjR0YlJkZANiNGTEYzPkkjYW5HRiUtSShjb252ZXJ0R0Y3NiQtSSZjb2VmZkdGNzYlLUZaNiVGQkY/RjRJInhHRiVGNEY2RjQ+SSNibkdGJS1GWjYlRmZuRmhuIiIhRjQ+SSNjbkdGJS1GWjYlRkImRkA2I0ZQRjRGNA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiosJiokKiopSSNwfGlyRzYiLCRJI258aXJHRighIiIiIiItSSpmYWN0b3JpYWxHJSpwcm90ZWN0ZWRHNiNGKkYsLUYuNiMsKEYrRixGKkYsSSNyfGlyR0YoRixGKy1GLjYjLCZGK0YsRjRGLEYsI0YsIiIjRisqJkYlRjhGJ0YsRixGLCoqKUYnLCZGKkYrRitGLEYsLUYuNiMsJkYqRixGLEYsRiwtRi42IywmRipGLEY0RixGK0Y1RiwjRitGOUYnRitGQ0Yr KiosKCooKiopSSNwfGlyRzYiLCRJI258aXJHRighIiIiIiItSSpmYWN0b3JpYWxHJSpwcm90ZWN0ZWRHNiNGKkYsLUkmR0FNTUFHNiRGL0koX3N5c2xpYkdGKDYjLCZGKkYsSSNyfGlyR0YoRixGKy1GMjYjRjdGLCNGLCIiI0YnRixGKkYsRiwqKEYlRjpGJ0YsRjdGLEYsKiZGJUY6RipGLEYsRiwqKilGJywmRipGK0YrRixGLC1GLjYjLCZGKkYsRixGLEYsLUYyNiMsKEYqRixGLEYsRjdGLEYrRjhGLCNGK0Y7RidGK0Y2Ris= LCQqLEkjbnxpckc2IiIiIioqKUkjcHxpckdGJSwmRiQhIiJGJkYmRiYtSSpmYWN0b3JpYWxHJSpwcm90ZWN0ZWRHNiMsJkYkRiZGK0YmRiYtSSZHQU1NQUc2JEYuSShfc3lzbGliR0YlNiMsKEYrRiZGJEYmSSNyfGlyR0YlRiZGKy1GMjYjRjdGJiNGJiIiIyoqKUYpLCZGJEYrRitGJkYmLUYtNiMsJkYkRiZGJkYmRiYtRjI2IywoRiRGJkYmRiZGN0YmRitGOEYmI0YrRjtGKUYrLCZGJEYmRjdGJkYrRis= Qyo+SSNBbkc2Ii1JKXNpbXBsaWZ5RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMtSShjb252ZXJ0R0YpNiQtSShjb21iaW5lR0YlNiQtSSdmYWN0b3JHRig2I0kjYW5HRiVJKmZhY3RvcmlhbEdGKUkmR0FNTUFHRigiIiI+SSNCbkdGJS1GJzYjLUYtNiQtRjA2JC1GMzYjSSNibkdGJUY2RjdGOD5JI0NuR0YlLUYnNiMtRi02JC1GMDYkLUYzNiNJI2NuR0YlRjZGN0Y4LUklc3Vic0dGKTYkL0kibkdGJSIiITclRiRGOkZFRjg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiosJiEiIiIiIkkjcHxpckc2IkYlRiUsJkkjbnxpckdGJ0YlRiVGJSNGJCIiIywmRilGJUkjcnxpckdGJ0YlRipGJkYq KiosKComSSNwfGlyRzYiIiIiSSNufGlyR0YmRidGJyomRiVGJ0kjcnxpckdGJkYnRidGKEYnRidGJSMhIiIiIiMsJkYoRidGKkYnRissJkYoRidGJ0YnRis= LCQqKiwmSSNufGlyRzYiIiIiRidGJyMhIiIiIiMsKEYpRidGJUYnSSNyfGlyR0YmRicjRidGKiwmRiVGJ0YsRidGKEYlRi1GKQ== NyUqKCwmISIiIiIiSSNwfGlyRzYiRiZGJkkjcnxpckdGKCNGJSIiI0YnRioqJkYnI0YmRitGKUYtIiIh LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbW5HRiQ2JFEiMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RKCZtaW51cztGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y4LyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkctSSZtZnJhY0dGJDYoLUYsNiRRIjJGJ0YvLUYjNictRiw2JFEiM0YnRi8vJSdpdGFsaWNHUSV0cnVlRicvJStleGVjdXRhYmxlR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnL0YwUSdpdGFsaWNGJy8lLmxpbmV0aGlja25lc3NHRi4vJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXW8vJSliZXZlbGxlZEdGOEYyLUkobWZlbmNlZEdGJDYkLUYjNictRks2KEZSLUYjNictRiw2JFEiNUYnRi9GVUZYRlpGZ25GaW5GW29GXm9GYG9GMi1GSzYoRk0tRiM2Jy1GLDYkUSI3RidGL0ZVRlhGWkZnbkZpbkZbb0Zeb0Zgb0ZYRi9GL0ZYRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IyIiIyIkMCI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkmbWZyYWNHRiQ2KC1GLDYoLUkjbW5HRiQ2JFEkOTAxRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUYjNictRjE2JFEjMTBGJ0Y0LyUnaXRhbGljR1EldHJ1ZUYnLyUrZXhlY3V0YWJsZUdRJmZhbHNlRicvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRicvRjVRJ2l0YWxpY0YnLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZMLyUpYmV2ZWxsZWRHRkEtRiM2K0YuLUkjbW9HRiQ2LVEiK0YnRjQvJSZmZW5jZUdGQS8lKnNlcGFyYXRvckdGQS8lKXN0cmV0Y2h5R0ZBLyUqc3ltbWV0cmljR0ZBLyUobGFyZ2VvcEdGQS8lLm1vdmFibGVsaW1pdHNHRkEvJSdhY2NlbnRHRkEvJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0Zhby1GMTYkRklGNEZTRjlGPEY/RkJGRUZHRkpGTUZPRj9GNA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IyIkLCoiJTY1 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEoaWZhY3RvckYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYlLUkjbW5HRiQ2JFElMjAxMUYnL0YzUSdub3JtYWxGJy8lK2V4ZWN1dGFibGVHUSZmYWxzZUYnRj5GPkZARj4= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkhRzYiNiMiJTY/ LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JVElc3Vic0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYpLUYsNiVRIm5GJ0YvRjItSSNtb0dGJDYtUSI9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZFLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRlQtSSNtbkdGJDYkUSIwRidGQS1GPjYtUSIsRidGQUZDL0ZHRjFGSEZKRkxGTkZQL0ZTUSYwLjBlbUYnL0ZWUSwwLjMzMzMzMzNlbUYnLUYsNiVRI0FuRidGL0YyLyUrZXhlY3V0YWJsZUdGRUZBRkEtRj42LVEiO0YnRkFGQ0ZobkZIRkpGTEZORlBGaW5GVUYrLUY2NiQtRiM2KEY6Rj1GV0Zlbi1GLDYlUSNCbkYnRi9GMkZBRkFGYm9GYG9GQQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYpSSNyfGlyRzYiIyIiIiIiI0YnKUkjcHxpckdGJUYmRic= LCQqKClJI3B8aXJHNiIjIiIkIiIjIiIiKUkjcnxpckdGJkYnRiosJkYqISIiRiVGKkYuRi4= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZCLUkjbWlHRiQ2JVEkVm9sRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSZtZnJhY0dGJDYoLUYjNictRiw2JVEjUGlGJy9GMEY9RjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORmZuLUklbXN1cEdGJDYlLUYsNiVRImRGJ0YvRjItRiM2JS1JI21uR0YkNiRRIjJGJ0Y5Ri9GMi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRicvJStleGVjdXRhYmxlR0Y9RjktRiM2JS1GYW82JFEiNEYnRjlGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZjcC8lKWJldmVsbGVkR0Y9RlgtRiw2JVEiaEYnRi9GMi1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZgby1GNjYtUSI6RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0Zmbi8lJmRlcHRoR0ZmcS8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIRmVuRmduLUYsNiVRJFN1ckYnRi9GMkY1Rl5yRk9GWEZgby1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmhyRmhwRlhGVEZYRltvRl5xRmFxLUZhbzYkUSQxMDBGJ0Y5RlhGXnItRiw2JVEnZnNvbHZlRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNigtRiw2JVElZGlmZkYnRi9GMi1GYXM2JC1GIzYoLUYsNiVRJXN1YnNGJ0YvRjItRmFzNiQtRiM2KkZocEZbcS1GLDYlUSZzb2x2ZUYnRi9GMi1GYXM2JC1GIzYnRistRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZlbi9GTlEsMC4zMzMzMzMzZW1GJ0ZocEZnb0Y5RjlGanRGYXJGZ29GOUY5Rmp0RltvRmdvRjlGOUZqdEZbb0Znb0Y5RjktRjY2LVEiO0YnRjlGO0ZddUZARkJGREZGRkhGZW5GTUZnb0Y5 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrRiJvYk8iISIo LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSdmc29sdmVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2LS1JI21uR0YkNiRRIjZGJ0Y5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZpbi1GLDYlUSJuRidGL0YyLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZYNiRRIjFGJ0Y5LUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GaG8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZobkZqbi1GLDYlUSRzdW1GJ0YvRjItRlM2JC1GIzYvRldGZW4tRiw2JVEia0YnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmhuL0ZOUSwwLjMzMzMzMzNlbUYnRmRwRl5vLUZYNiRRIjBGJ0Y5LUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmdvRmpuRltvLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZ29GaW9GYW8vJStleGVjdXRhYmxlR0Y9RjlGOUZmcUY5RjlGZnFGOQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NiQkIismKm9pYjYhIzUkIis1dFYlKUchIio= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1JI21uR0YkNiRRIjVGJy9GM1Enbm9ybWFsRictSSNtb0dGJDYtUScmc2RvdDtGJ0Y+LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZGLyUpc3RyZXRjaHlHRkYvJSpzeW1tZXRyaWNHRkYvJShsYXJnZW9wR0ZGLyUubW92YWJsZWxpbWl0c0dGRi8lJ2FjY2VudEdGRi8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRlUtSSVtc3VwR0YkNiUtRjY2JC1GIzYlLUkmbWZyYWNHRiQ2KC1GIzYlLUY7NiRRIjRGJ0Y+RkAtRiw2JVEjUGlGJy9GMEZGRj4tRiM2Iy1GOzYkUSIzRidGPi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGX3AvJSliZXZlbGxlZEdGRkZALUZZNiUtRjs2JFEkMC41RidGPkZlby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGPi1GIzYjLUY2NiQtRiM2JC1GQTYtUSomdW1pbnVzMDtGJ0Y+RkRGR0ZJRktGTUZPRlEvRlRRLDAuMjIyMjIyMmVtRicvRldGZnEtRjs2JEZccEY+Rj5GaXBGPg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrJGUnSFwmKiEiKg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkjbWlHRiQ2JVEjVmhGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSNQaUYnL0YwRj1GOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRJjAuMGVtRicvRk5GVy1JJW1zdXBHRiQ2JS1GLDYlUSJoRidGL0YyLUYjNiMtSSNtbkdGJDYkUSIyRidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGUy1JKG1mZW5jZWRHRiQ2JC1GIzYlLUkmbWZyYWNHRiQ2KC1GIzYjLUZcbzYkUSIxRidGOUZpbi8lLmxpbmV0aGlja25lc3NHRl5wLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmNwLyUpYmV2ZWxsZWRHRj0tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZccS1GaG82KEZmbi1GIzYjLUZcbzYkUSIzRidGOUZfcEZhcEZkcEZmcEY5LUY2Ni1RIjpGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlcvJSZkZXB0aEdGXXIvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2JVEnZnNvbHZlRidGL0YyLUZjbzYkLUYjNi0tRlxvNiRRIjlGJ0Y5RlNGKy1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRltxRl1xLUZcbzYkUSMxMEYnRjlGUy1GY282JC1GIzYlLUZobzYoLUYjNictRlxvNiRRIjRGJ0Y5RlNGT0ZTLUZaNiUtRmNvNiQtRiM2I0Znb0Y5RmBxRl9vRmBxRl9wRmFwRmRwRmZwRmhwRitGOS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GXG82JFEiNUYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZWL0ZOUSwwLjMzMzMzMzNlbUYnRmZuRjktRjY2LVEiO0YnRjlGO0ZfdUZARkJGREZGRkhGVkZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NiUkISsiei01XCQhIzUkIispeSEpM24lRiUkIissQSwjUSIhIio= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW5HRiQ2JFEiOUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RKCZtaW51cztGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y4LyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkctRiw2JFEtMC40NjcwODgwNzg4RidGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrQD4iSGApISIq LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEjbjBGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSVjZWlsRicvRjBGPUY5LUkobWZlbmNlZEdGJDYkLUYjNiQtRiw2JVEmZXZhbGZGJ0YvRjItRlQ2JC1GIzYkLUYsNiVRJnNvbHZlRidGL0YyLUZUNiQtRiM2MC1JJW1zdXBHRiQ2JS1JI21uR0YkNiRRIzEwRidGOS1GIzYjLUZUNiQtRiM2JC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GYXBGY29GOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZgcEZicC1GVDYkLUYjNiUtRiw2JVEibkYnRi9GMi1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRmBwRmJwLUZkbzYkUSIxRidGOUY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZqcS1GLDYlUSVzcXJ0RidGUkY5LUZUNiQtRiM2Iy1JJm1mcmFjR0YkNigtRmRvNiRRIjJGJ0Y5LUYjNiMtRmRvNiRRIjNGJ0Y5LyUubGluZXRoaWNrbmVzc0dGZXEvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYnMvJSliZXZlbGxlZEdGPUY5RmZxRmZyRmZxLUZhbzYlRmNvRltwRmNwRmZwRmdzLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRmNxRjlGOUY5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGaXFGTS1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZqcS8lJmRlcHRoR0ZldC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIRmlxRltyRl11LUZkcjYoLUYjNiRGTy1GVDYkLUYjNiQtRiw2JVElc3Vic0YnRi9GMi1GVDYkLUYjNidGXXFGaXNGKy1GNjYtUSIsRidGOUY7Rl90RkBGQkZERkZGSEZpcS9GTlEsMC4zMzMzMzMzZW1GJy1GZHI2KC1GIzYnRl1xRmZxLUZUNiQtRiM2JUZdcUZmcEZjcUY5RmZxLUZUNiQtRiM2JUZdcUZmcEZmckY5LUYjNiMtRmRvNiRRIjZGJ0Y5Rl5zRmBzRmNzRmVzRjlGOS1GIzYtLUZkbzYkUSYxMDAwLkYnRjlGZnEtRmRvNiRRJjM2MDAuRidGOUZmcS1GZG82JFEkMjQuRidGOUZmcS1GZG82JFEnMzY1LjI1RidGOUZmcS1GZG82JFElMTAwMEYnRjlGZnEtRmFvNiVGY28tRiM2Iy1GZG82JFEiOUYnRjlGY3BGXnNGYHNGY3NGZXM= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IitlVnNCaA== JCIrcnAhR0AiISIk LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEnZmFjdG9yRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNi4tRiw2JVEickYnRi9GMi1JI21vR0YkNi1RIitGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkUvJSlzdHJldGNoeUdGRS8lKnN5bW1ldHJpY0dGRS8lKGxhcmdlb3BHRkUvJS5tb3ZhYmxlbGltaXRzR0ZFLyUnYWNjZW50R0ZFLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGVC1GNjYkLUYjNiUtRiw2JVEibkYnRi9GMi1GPjYtUSgmbWludXM7RidGQUZDRkZGSEZKRkxGTkZQRlJGVS1JI21uR0YkNiRRIjFGJ0ZBRkEtRj42LVEnJnNkb3Q7RidGQUZDRkZGSEZKRkxGTkZQL0ZTUSYwLjBlbUYnL0ZWRmNvLUYsNiVRJXNxcnRGJy9GMEZFRkEtRjY2JC1GIzYjLUkmbWZyYWNHRiQ2KC1GXG82JFEiMkYnRkEtRiM2Iy1GXG82JFEiM0YnRkEvJS5saW5ldGhpY2tuZXNzR0Zeby8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZccS8lKWJldmVsbGVkR0ZFRkFGX29GYHBGX29GOkY9RjpGQQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKiMiIiIiIiRGJSkiIicjRiUiIiNGJSwoKiRGJ0YlRiVGKiEiIiomRipGJUkibkc2IkYlRiVGJUkickdGMEYlRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/MeixnerMoments.mw000066400000000000000000000733121307543307100216710ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZmbi1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSdkaWdpdHNGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIzIwRidGOUY1Rk8tRiw2JVEnYXNzdW1lRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiktRiw2JVEmZGVsdGFGJy9GMEY9RjktRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRmNvNiRRIjBGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEia0YnRi9GMkZocC1GLDYlUShpbnRlZ2VyRidGL0YyRjlGNUZPRmduLUYsNiVRJ3ZhbG51bUYnRi9GMkZfb0Znbi1GLDYlUSZhbHBoYUYnRmFwRjktRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoLUZjbzYkUSIzRidGOS1GIzYjLUZjbzYkUSIyRidGOS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXXMvJSliZXZlbGxlZEdGPUZocEZnbi1GLDYlUSViZXRhRidGYXBGOUZqcS1GXnI2KC1GY282JEZqckY5RmNyRmhyRltzRl5zRmBzRmhwRl5wRmpxLUZecjYoLUZjbzYkUSI1RidGOUZjckZockZbc0Zec0Zgc0ZocC1GLDYlUSNtdUYnRmFwRjlGanEtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmV0RmVzRjVGT0Znbi1GLDYlUSJLRidGL0YyRl9vLUZecjYoLUklbXN1cEdGJDYlLUZqbzYkLUYjNiZGZXItRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRJGNvc0YnRmFwRjktRmpvNiQtRiM2Iy1GXnI2KEZic0ZjckZockZbc0Zec0Zgc0Y5RjktRiM2JUZlckZjdUZecC8lMXN1cGVyc2NyaXB0c2hpZnRHRmdwLUYjNihGZXJGY3UtRiw2JVEjUGlGJ0ZhcEY5RmN1LUYsNiVRJkdBTU1BRidGYXBGOS1Gam82JEZfdkY5RmhyRltzRl5zRmBzRjVGT0Znbi1GLDYlUSJnRidGL0YyRl9vLUYsNiVRJGV4cEYnRmFwRjktRmpvNiQtRiM2JUZic0ZjdS1GLDYlUSJ4RidGL0YyRjlGY3UtRmpvNiQtRiM2Jy1GLDYlUSNSZUYnRmFwRjktRl11NiUtRmpvNiQtRiM2JEZodi1Gam82JC1GIzYnRl5wLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGZHRGZnQtRiw2JVEiSUYnRi9GMkZjdUZnd0Y5RjlGY3JGYXZGW3ktRiw2JVEjSW1GJ0ZhcEY5RmF4RjlGNUZPRmduLUYsNiVRImZGJ0YvRjJGX29GZ3RGY3UtRiw2JUZfd0ZhcEY5LUY2Ni1RIjtGJ0Y5RjtGW3FGQEZCRkRGRkZIRmpuRk0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqLCksJC1JJGNvc0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJJWJldGFHRisjIiIiIiIjRjEsJEknZGVsdGF8aXJHRitGMUYwSSNQaUdGKSEiIi1JJkdBTU1BR0YoNiNGMkY1LUkkZXhwR0YoNiMqJkYuRjBJInhHRitGMEYwLCYqJC1JI1JlR0YpNiMtRjc2IywmRjNGMComXiNGMEYwRj1GMEYwRjFGMCokLUkjSW1HRilGQkYxRjBGMEYv QyQ/KEkibkc2IiIiIkYmIiImSSV0cnVlRyUqcHJvdGVjdGVkRy1JJmV2YWxmR0YpNiMtSSRJbnRHRiU2JC1JJXN1YnNHRik2JEkndmFsbnVtR0YlKiYpSSJ4R0YlRiRGJkkiZkdGJUYmL0Y2OywkSSlpbmZpbml0eUdGKSEiIkY7RiY= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrSiFbTlEnISM1 JCIrRGkqKlE8ISIq JCIrUUEtXUohIio= JCIrWDtWUzUhIik= JCIrXykqXHVIISIp JSFH openturns-1.9/validation/src/MomentsUserDefined.mw000066400000000000000000000742571307543307100224700ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZkdC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSVkYXRhRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSShtZmVuY2VkR0YkNiYtRiM2JS1GY282Ji1GIzYlLUkjbW5HRiQ2JFEiMEYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJy1GXHA2JFEiMkYnRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZfcC1GY282Ji1GIzYlRmVwRl9wRltwRjlGaHBGW3FGOUZocEZbcS1GNjYtUSI7RidGOUY7RmJwRkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVEod2VpZ2h0c0YnRi9GMkZfby1GY282Ji1GIzYlLUkmbWZyYWNHRiQ2KC1GXHA2JFEiN0YnRjktRiM2Iy1GXHA2JFEjMTBGJ0Y5LyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zccy8lKWJldmVsbGVkR0Y9Rl9wLUZdcjYoLUZccDYkUSIzRidGOUZickZnckZqckZdc0Zfc0Y5RmhwRltxRmJxRk9GZ24tRiw2JVElbWVhbkYnRi9GMkZfb0ZlcS1GY282Ji1GIzYjLUZccDYkRmlyRjlGOUZocEZbcS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW29GXG9GaXMtRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZmdEZlcS1GY282Ji1GIzYjRmVwRjlGaHBGW3FGX3RGXG9GaHRGYnFGT0Znbi1GLDYlUSZwcmludEYnRi9GMi1GY282JC1GIzYmRmZzRl9wLUYsNiVRJmV2YWxmRidGL0YyLUZjbzYkLUYjNiNGZnNGOUY5RmJxRk9GZ24tRiw2JVEiQ0YnRi9GMkZfby1GLDYlUSdNYXRyaXhGJ0YvRjItRmNvNiQtRiM2JUZlcEZfcEZlcEY5RjVGTy1GUDYmRlJGVUZYL0ZlblElYXV0b0YnLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGXndGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GLDYlUSJpRidGL0YyRmduLUY2Ni9RJWZyb21GJ0Zbd0Zdd0Zfd0Y7Rj5GQEZCRkRGRkZIRmpuRltvRmduRl10RmduLUY2Ni9RI3RvRidGW3dGXXdGX3dGO0Y+RkBGQkZERkZGSEZqbkZbb0ZnbkZlcEZnbi1GNjYvUSNkb0YnRlt3Rl13Rl93RjtGPkZARkJGREZGRkhGam5GW29GT0ZnbkZnbkZnbkZodkZnbi1GLDYlUSJqRidGL0YyRmduRmR3RmduRl10RmduRmd3RmduRmVwRmduRmp3Rk9GZ25GZ25GZ25GZ25GZ25GanUtRmNvNiYtRiM2JUZhd0ZfcEZdeEY5RmhwRltxRl9vRltwRjVGT0ZnbkZnbkZnbkZnbkZnbkZnbkZnbkZodkZnbi1GLDYlUSJuRidGL0YyRmduRmR3RmduRl10RmduRmd3RmduRmVwRmduRmp3Rk9GZ25GZ25GZ25GZ25GZ25GZ25GZ25GZ25GZ25GZ25GanVGYHhGX29GanVGYHhGYnRGZXEtRmNvNiYtRiM2I0ZkeEY5RmhwRltxRl90LUZjbzYkLUYjNihGXG9GZ3gtRmNvNiYtRiM2I0Zhd0Y5RmhwRltxLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZXRGZ3RGZnNGX3lGOUZfdC1GY282JC1GIzYoRlxvRmd4LUZjbzYmLUYjNiNGXXhGOUZocEZbcUZjeUZmc0ZqeUY5RmJxRk8tRjY2L0ZpbkZbd0Zdd0Zfd0Y7Rj5GQEZCRkRGRkZIRmpuRltvLUY2Ni9RI29kRidGW3dGXXdGX3dGO0Y+RkBGQkZERkZGSEZqbkZbby1GNjYvRjhGW3dGXXdGX3dGO0Y+RkBGQkZERkZGSEZKRk1GT0ZnbkZgekY1Rk9GZ25GYHpGNUZPRmduRlx1LUZjbzYkLUYjNiZGanVGX3BGY3UtRmNvNiQtRiM2I0ZqdUY5RjlGYnFGT0ZnbkZcdS1GY282JC1GIzYkRmN1LUZjbzYkLUYjNiQtRiw2JVEkbWFwRidGL0YyLUZjbzYkLUYjNiUtRiw2JVElc3FydEYnL0YwRj1GOUZfcEZqdUY5RjlGOUZicQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQ3JCIiISIiIzckRiVGJA== NyQjIiIoIiM1IyIiJEYl NyQjIiIkIiImIyIiKEYl NiQ3JCMiIiQiIiYjIiIoRiY3JCQiKysrKytnISM1JCIrKysrKzkhIio= NiQtSSdNYXRyaXhHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2Iy9JJCVpZEdGKCIpY0tiSy1GJDYjL0YrIil3TGJL LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciKTtPYks= JSFH TTdSMApJNVJUQUJMRV9TQVZFLzMyNTUzMjU2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJSIjIiMjIiNAIiNEIyEjQEYpRipGJ0YmTTdSMApJNVJUQUJMRV9TQVZFLzMyNTUzMzc2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJSIjIiMkIisrKysrJSkhIzUkISsrKysrJSlGKUYqRidGJg==TTdSMApJNVJUQUJMRV9TQVZFLzMyNTUzNjE2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJSIjIiMkIishUl5eOyohIzVeI0YnRipGJ0Ym openturns-1.9/validation/src/NonCentralChiSquare.mw000066400000000000000000002263371307543307100225760ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYyLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRKmV4cEZhY3RvckYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1GIzYmLUYsNiVRJGV4cEYnL0YwRj1GOS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZkcC1GY282KC1GLDYlUSdsYW1iZGFGJ0Zqb0Y5LUYjNiMtSSNtbkdGJDYkUSIyRidGOS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZnEvJSliZXZlbGxlZEdGPUY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1JJW1zdXBHRiQ2JS1GXHA2JC1GIzYjRmZwRjktRiM2Iy1GLDYlUSJpRidGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GIzYkRmdyLUY2Ni1RIiFGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMTExMTExMWVtRicvRk5GY3NGYXFGZHFGZ3FGaXFGNUZPRmduLUYsNiVRJHBoaUYnRmpvRjlGX29GXG9GW3ItRmNvNigtRiM2JkZnby1GXHA2JC1GIzYkRmBwLUZjbzYoLUYsNiVRInhGJ0YvRjJGW3FGYXFGZHFGZ3FGaXFGOUZbci1GX3I2JUZidC1GIzYnLUZjbzYoLUYsNiVRI251RidGam9GOUZbcUZhcUZkcUZncUZpcS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmNwRmVwRmdyLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGY3BGZXAtRl5xNiRGY3FGOUZqci1GIzYmLUZfcjYlRl1xLUYjNiVGaXRGXnVGZ3JGanJGW3ItRiw2JVEmR0FNTUFGJ0Zqb0Y5LUZccDYkRmp1RjlGYXFGZHFGZ3FGaXEtRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZqbkZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KjAtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkSSdsYW1iZGFHRigjISIiIiIjIiIiKSwkRisjRi9GLkkiaUdGKEYvLUkqZmFjdG9yaWFsR0YmNiNGM0YtLUYkNiMsJEkieEdGKEYsRi8pRjosKEkjbnVHRihGMkYzRi9GLUYvRi8pRi4sJkY9RjJGM0YvRi0tSSZHQU1NQUdGJTYjRj9GLQ== QyYtSSlzaW1wbGlmeUc2IjYjKiYtSSVzdWJzRyUqcHJvdGVjdGVkRzYkL0kiaUdGJSwmRi0iIiJGL0YvSSRwaGlHRiVGL0YwISIiRi8tRiQ2IyomLUYpNiQvRi0sJkYtRi9GMUYvRjBGL0YwRjFGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKkknbGFtYmRhRzYiIiIiSSJ4R0YlRiYsJkkjbnVHRiVGJkkiaUdGJSIiIyEiIiwmRipGJkYmRiZGLCNGJkYr LCQqKkknbGFtYmRhRzYiISIiSSJ4R0YlRiYsKEkjbnVHRiUiIiJJImlHRiUiIiMhIiNGKkYqRitGKkYs QyQtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSRwaGlHRigiIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KjAtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmSSdsYW1iZGFHRigjISIiIiIjSSJ4R0YoRiwiIiItSSZHQU1NQUdGJTYjLCZJImlHRihGMEYwRjBGLSlGLywoSSNudUdGKCNGMEYuRjVGMEYtRjBGMC1GMjYjLCZGOEY5RjVGMEYtKSIiJSwkRjVGLUYwKUYrRjVGMClGLiwkRjhGLEYw QyQtSShjb2xsZWN0RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtSSlzaW1wbGlmeUdGJTYkLUkkbG9nR0YlNiNJJHBoaUdGKEkpc3ltYm9saWNHRigtRi42I0kieEdGKCIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LDJJJ2xhbWJkYUc2IiMhIiIiIiNJInhHRiRGJS1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiMtSSZHQU1NQUdGKzYjLCZJImlHRiQiIiJGNEY0RiYqJiwoSSNudUdGJCNGNEYnRjNGNEYmRjRGNC1GKjYjRihGNEY0LUYqNiMtRjA2IywmRjdGOEYzRjRGJiomRjNGNC1GKjYjRidGNCEiIyomRjNGNC1GKjYjRiNGNEY0KiZGN0Y0RkFGNEYl QyYtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiYtSSVzdWJzR0YmNiQvSSJpR0YoLCZGLyIiIkYxRjFJKmV4cEZhY3RvckdGKEYxRjIhIiJGMS1GJDYjKiYtRiw2JC9GLywmRi9GMUYzRjFGMkYxRjJGM0Yx LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJkknbGFtYmRhRzYiIiIiLCZJImlHRiVGJkYmRiYhIiIjRiYiIiM= LCQqJkknbGFtYmRhRzYiISIiSSJpR0YlIiIiIiIj QywtSSV3aXRoRzYiNiNJK1N0YXRpc3RpY3NHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiUhIiI+SSRwZGZHRiUtSSRQREZHRiU2JC1JL1JhbmRvbVZhcmlhYmxlR0YlNiMtSTROb25DZW50cmFsQ2hpU3F1YXJlR0YlNiRJI251R0YlSSdsYW1iZGFHRiVJInhHRiUiIiI+SSRjZGZHRiUtSSRDREZHRiVGMEY6LSZJJmV2YWxmR0YpNiMiI0k2Iy1JJXN1YnNHRik2Ji9GNyIjNS9GOCIiJi9GOUZJRi1GOi1GQDYjLUZGNiZGSEZKRkxGPEY6 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMkkieEc2IiIiIUYpKiwtSSRleHBHNiRGJEkoX3N5c2xpYkdGKDYjLCZJJ2xhbWJkYUdGKCMhIiIiIiNGJ0YyIiIiKUYnLCZJI251R0YoI0Y1RjRGM0Y1RjUtSSZHQU1NQUdGLTYjLCRGOEY5RjMtSSpoeXBlcmdlb21HRi42JTciNyNGPSwkKiZGMUY1RidGNSNGNSIiJUY1KUY0Rj1GMw== LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCouLCYhIiIiIiItSSpIZWF2aXNpZGVHRiQ2IywkSSNfdEdGJ0YsRi1GLS1JJGV4cEdGJDYjLCZGMiNGLCIiI0knbGFtYmRhR0YnRjdGLSlGMiwmSSNudUdGJyNGLUY4RixGLUYtLUkqaHlwZXJnZW9tR0YmNiU3IjcjLCRGPEY9LCQqJkY5Ri1GMkYtI0YtIiIlRi0tSSZHQU1NQUdGJDYjRkNGLClGOEZDRixGLC9GMjssJEkpaW5maW5pdHlHRiVGLEkieEdGJw== JCI/NE0jKXk3QjJfTCg0JDNWKjQnISNK JCI/IXohKVF2T0MhKSk+WFlGO2ZBISNJ QyQtSSVoZWxwRzYiNiNJJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlIiIi QyQtSSVwbG90RzYiNiQsJiIiIkYoKiYtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkSSJhR0YlIiImRigtRis2I0YwISIiRjQvRjA7IiIhIiM/Rig= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdmbjckJCIrTkBLaTghIzYkIitIJlEpKioqKiEjNTckJCIqRldZcyMhIzUkIitmbm0qKioqISM1NyQkIiswaydwMyUhIzYkIitbVlsqKioqISM1NyQkIiphKUdcYSEjNSQiK1o0SCoqKiohIzU3JCQiKiJHJFI8KSEjNSQiK1socCkpKioqISM1NyQkIiszeCYpKjMiISM1JCIrXi1TKSoqKiEjNTckJCIraWx5TTshIzUkIitRVUkoKioqISM1NyQkIis8YXJ6QCEjNSQiKydweGYqKiohIzU3JCQiK0VKZHBLISM1JCIqYUNEKioqISIqNyQkIitNM1ZmViEjNSQiK2AoM3kpKiohIzU3JCQiK2wmKilmRCchIzUkIitZLSNlKCoqISM1NyQkIisjSFtEOikhIzUkIis2NXNkKiohIzU3JCQiK2UwJD1DIiEiKiQiK2p1ImUpKSohIzU3JCQiKzNSQnI7ISIqJCIrelVUXygqISM1NyQkIit6amYpNCMhIiokIisyKXkhUSYqISM1NyQkIisnNDtbXCMhIiokIio3Iio+RCohIio3JCQiK2oneV0hSCEiKiQiKy5adWUpKSEjNTckJCIrJ3pzJEhMISIqJCIranMleU0pISM1NyQkIis4aUlfUCEiKiQiKyhHSkF1KCEjNTckJCIrPF9NKD0lISIqJCIrLy4jeS4oISM1NyQkIis0eV9xWCEiKiQiKzNpJilwaiEjNTckJCIqbCs+KyYhIikkIis9IT47ZiYhIzU3JCQiKnZXXVYmISIpJCIrd2xHNlshIzU3JCQiKk5mQyZlISIpJCIrJFxpaTMlISM1NyQkIisnejY6QichIiokIitIPE1vTSEjNTckJCIrPD1DI28nISIqJCIqXCkpKSp6IyEiKjckJCIrbiNwUzEoISIqJCIrWXdOKUgjISM1NyQkIitqYEEzdiEiKiQiK25tLiV6IiEjNTckJCIrbih5OCF6ISIqJCIrbVkuPTkhIzU3JCQiK2oudEskKSEiKiQiKll5czIiISIqNyQkIispM3pNdSkhIiokIiooKik9aCIpISM1NyQkIisjSF8/PCohIiokIip0PzQsJyEjNTckJCIqRztjYyohIikkIiolZlp2VyEjNTckJCIrNCNHLCoqKiEiKiQiKlQ8IjNLISM1NyQkIipvMkovIiEiKCQiKkpDWUIjISM1NyQkIislUSNcIjMiISIpJCIqTyFcNTshIzU3JCQiKzsqW0g3IiEiKSQiKmhxZzYiISM1NyQkIipkeGQ7IiEiKCQiKU5XT3YhIzU3JCQiK2BxbjI3ISIpJCIpeExsXSEjNTckJCIrY3BAWzchIikkIilvOzJNISM1NyQkIiszJ0hLSCIhIikkIiktNmtAISM1NyQkIit4YW5MOCEiKSQiKTtNQTkhIzU3JCQiK3YrJ29QIiEiKSQiKFVxKCopISM1NyQkIip1IipmVCIhIigkIihHUiZlISM1NyQkIismKUh4ZTkhIikkIihWdGkkISM1NyQkIisuby0qXCIhIikkIihpIilHIyEjNTckJCIrVE81VDohIikkIihmKClSIiEjNTckJCIrVTlDI2UiISIpJCInXmQmKSEjNTckJCIrMSozYGkiISIpJCInW2ldISM1NyQkIiskKnp5bTshIikkIic4QkkhIzU3JCQiK15qPzQ8ISIpJCInem08ISM1NyQkIitqTUZePCEiKSQiJzxGNSEjNTckJCIqeEcqKnkiISIoJCImJyk9JyEjNTckJCIrOUBCTT0hIikkIiYmSE0hIzU3JCQiK2B2JlEoPSEiKSQiJmUrIyEjNTckJCIrT2w1Oz4hIikkIiY+NyIhIzU3JCQiKy9VYWM+ISIpJCIlJ1EnISM1NyQkIiQrIyEiIiQiJFgkISIqLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQiIiEhIiIkIiQrIyEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEiYTYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJHElISIiLSUpQk9VTkRTX1lHNiMkIiQ/IiEiIi0lLUJPVU5EU19XSURUSEc2IyQiJStNISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJV1NISIiLSUpQ0hJTERSRU5HNiI= QyQtJkkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMiI0k2IywmIiIiRisqJi1JJkdBTU1BRzYkRiZJKF9zeXNsaWJHNiI2JCIjNSIiJkYrLUYuNiNGMyEiIkY3Ris= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI+eVRkJz1QPCJbPzF0MEc9JCEjSQ== QyY+SSRyaG9HNiIsJiIiIkYnKiYtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkSSNudUdGJUkieEdGJUYnLUYqNiNGLyEiIkYzRictSShjb252ZXJ0R0YsNiQtSSlzaW1wbGlmeUdGKzYkLCYtSSVzdWJzR0YsNiQvRi8sJkYvRidGJ0YnRiRGJ0YkRjNJKXN5bWJvbGljR0YlSSpmYWN0b3JpYWxHRixGJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYiIiJGIyomLUkmR0FNTUFHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JEkjbnVHRipJInhHRipGIy1GJjYjRiwhIiJGMA== LCQqKCwmLUkmR0FNTUFHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JCwmSSNudUdGKiIiIkYuRi5JInhHRipGLiomLUYmNiRGLUYvRi5GLUYuISIiRi5GLUYzLUkqZmFjdG9yaWFsR0YoNiMsJkYtRi5GM0YuRjNGMw== QyQ+SSZkZWx0YUc2IiwoSSRyaG9HRiUiIiIqKClJInhHRiVJI251R0YlRigtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywkRishIiJGKC1JJkdBTU1BR0YvNiMsJkYsRihGKEYoRjRGNC1JJXN1YnNHRjA2JC9GLEY4RidGNEYo LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqJi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiRJI251R0YpSSJ4R0YpIiIiLUYlNiNGKyEiIkYwKigpRixGK0YtLUkkZXhwR0YmNiMsJEYsRjBGLS1GJTYjLCZGK0YtRi1GLUYwRjAqJi1GJTYkRjlGLEYtRjdGMEYt QyQtJkkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMiJCsiNiMtSSVzdWJzR0YmNiUvSSNudUc2IiIkXiIvSSJ4R0YvIiNJSSZkZWx0YUdGLyIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiIUYj JSFH openturns-1.9/validation/src/NonCentralChiSquareData.mw000066400000000000000000000644241307543307100233650ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZgXmwtSSNtaUdGJDYlUShyZXN0YXJ0RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEiOkYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHUSYwLjBlbUYnLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVEld2l0aEYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRK1N0YXRpc3RpY3NGJ0YvRjJGOUY1Rk9GZ24tRiw2JVEkcGRmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEkUERGRidGL0YyLUZgbzYkLUYjNictRiw2JVEvUmFuZG9tVmFyaWFibGVGJ0YvRjItRmBvNiQtRiM2JC1GLDYlUTROb25DZW50cmFsQ2hpU3F1YXJlRidGL0YyLUZgbzYkLUYjNiYtRiw2JVEjbnVGJy9GMEY9RjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Znbi1GLDYlUSdsYW1iZGFGJ0ZlcUY5RjlGOUZmcUZnbi1GLDYlUSJ4RidGL0YyRjlGNUZPRmduLUYsNiVRJGNkZkYnRi9GMkZqby1GLDYlUSRDREZGJ0YvRjJGYHBGNUZPRmduLUYsNiVRI2ZkRidGL0YyRmpvLUYsNiVRJmZvcGVuRidGL0YyLUZgbzYkLUYjNiYtRiw2JVEhRidGL0YyLUkjbXNHRiQ2I1E8Tm9uQ2VudHJhbENoaVNxdWFyZV9wZGYuY3N2RidGZnEtRiw2JVEmV1JJVEVGJ0YvRjJGOUY1RmduRk9GZ24tRjY2L1EkZm9yRicvJSVib2xkR0YxL0YzUSVib2xkRicvJStmb250d2VpZ2h0R0ZidEY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUYsNiVRImlGJ0YvRjJGZ24tRjY2L1ElZnJvbUYnRl90RmF0RmN0RjtGPkZARkJGREZGRkhGam5GW29GZ24tSSNtbkdGJDYkUSIwRidGOUZnbi1GNjYvUSN0b0YnRl90RmF0RmN0RjtGPkZARkJGREZGRkhGam5GW29GZ24tRlx1NiRRIjRGJ0Y5RmduLUY2Ni9RI2RvRidGX3RGYXRGY3RGO0Y+RkBGQkZERkZGSEZqbkZbb0ZPRmduRmduRmduRmJxRmpvLUZcdTYkUSQwLjJGJ0Y5RmduLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GX3ZGZ24tSSZtZnJhY0dGJDYoLUYjNihGZXRGZ24tRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUZgbzYkLUYjNictRlx1NiRRJDUuMEYnRjlGZ24tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRl52RmB2RmduRmh1RjlGZ24tRiM2JEZnbkZidS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGancvJSliZXZlbGxlZEdGPUY1Rk9GZ25GZ25GZ25GXHRGZ24tRiw2JVEiakYnRi9GMkZnbkZodEZnbkZbdUZnbkZfdUZnbkZidUZnbkZldUZPRmduRmduRmduRmduRmduRmduRlxyRmpvRmh1RmduRlt2RmduLUZidjYoLUYjNiVGX3hGZnZGaXYtRiM2I0ZidUZld0Zod0ZbeEZdeEY1Rk9GZ25GZ25GZ25GZ25GZ25GZ25GXHRGZ24tRiw2JVEia0YnRi9GMkZnbkZodEZnbkZbdUZnbkZfdUZnbkZidUZnbkZldUZPRmduRmduRmduRmduRmduRmduRmduRmduRmduRl9yRmduRmpvRmduLUZcdTYkUSQwLjFGJ0Y5RmduRlt2RmduLUZidjYoLUYjNiZGaHhGZnYtRmBvNiQtRiM2Jy1GXHU2JFEkMC45RidGOUZnbkZgd0ZnbkZbeUY5RmduRmZ4RmV3Rmh3Rlt4Rl14RjVGT0ZnbkZnbkZnbkZnbkZnbkZnbkZnbkZnbkZnbi1GLDYlUShmcHJpbnRmRidGL0YyLUZgbzYkLUYjNipGaHJGZnFGZ24tRmZzNiNRKCUuMjBlXG5GJ0ZmcS1GLDYlUSZldmFsZkYnRi9GMi1GYG82Ji1GIzYjLUZcdTYkUSMyMEYnRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJy1GYG82JC1GIzYjRmdvRjlGOS1GNjYtUSI7RidGOUY7RmlxRkBGQkZERkZGSEZqbkZNRk9GZ25GZ25GZ25GZ25GZ24tRjY2L1Ejb2RGJ0ZfdEZhdEZjdEY7Rj5GQEZCRkRGRkZIRmpuRltvRjVGT0ZnbkZnbkZnbkZqW2xGNUZPRmduRmpbbEY1Rk9GZ24tRiw2JVEnZmNsb3NlRidGL0YyLUZgbzYkLUYjNiNGaHJGOUY1Rk9GZ25GaHJGam9GW3MtRmBvNiQtRiM2JkZicy1GZnM2I1E8Tm9uQ2VudHJhbENoaVNxdWFyZV9jZGYuY3N2RidGZnFGaXNGOUY1RmduRk9GZ25GXHRGZ25GZXRGZ25GaHRGZ25GW3VGZ25GX3VGZ25GYnVGZ25GZXVGT0ZnbkZnbkZnbkZicUZqb0ZodUZnbkZbdkZnbkZhdkY1Rk9GZ25GZ25GZ25GXHRGZ25GX3hGZ25GaHRGZ25GW3VGZ25GX3VGZ25GYnVGZ25GZXVGT0ZnbkZnbkZnbkZnbkZnbkZnbkZcckZqb0ZodUZnbkZbdkZnbkZieEY1Rk9GZ25GZ25GZ25GZ25GZ25GZ25GXHRGZ25GaHhGZ25GaHRGZ25GW3VGZ25GX3VGZ25GYnVGZ25GZXVGT0ZnbkZnbkZnbkZnbkZnbkZnbkZnbkZnbkZnbkZfckZnbkZqb0ZnbkZbeUZnbkZbdkZnbkZeeUY1Rk9GZ25GZ25GZ25GZ25GZ25GZ25GZ25GZ25GZ25GaXktRmBvNiQtRiM2KkZockZmcUZnbkZgekZmcUZjekZmei1GYG82JC1GIzYjRmJyRjlGOUZnW2xGT0ZnbkZnbkZnbkZnbkZnbkZqW2xGNUZPRmduRmduRmduRmpbbEY1Rk9GZ25GaltsRjVGT0ZnbkZdXGxGYFxsRjVGZ24= print(); # input placeholder JSFH openturns-1.9/validation/src/NonCentralChiSquareMGF.mw000066400000000000000000001076361307543307100231300ustar00rootroot00000000000000 QyQtSSVkaWZmRyUqcHJvdGVjdGVkRzYkKigtSSRleHBHNiI2IyooSSdsYW1iZGFHRioiIiJJInRHRipGLiwmRi5GLkYvISIjISIiRi4pRjAsJkkmZGVsdGFHRiojRi4iIiNJImtHRipGN0YyLUkiUEdGKjYjRi9GLkYvRi4= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqKiwmKiZJJ2xhbWJkYUc2IiIiIiwmRihGKEkidEdGJyEiIyEiIkYoKihGJkYoRipGKEYpRisiIiNGKC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjKihGJkYoRipGKEYpRixGKClGKSwmSSZkZWx0YUdGJyNGKEYuSSJrR0YnRi5GLC1JIlBHRic2I0YqRihGKCosRi9GKEY2RixGO0YoRjdGKEYpRixGLiooRi9GKEY2RiwtSSVkaWZmR0YyNiRGO0YqRihGKA== QyQ/KEkiaUc2IiIiIkYmIiImSSV0cnVlRyUqcHJvdGVjdGVkRy1JJ2ZhY3Rvckc2JEYpSShfc3lzbGliR0YlNiMtSSVzdWJzR0YpNiUvSSdsYW1iZGFHRiUtSSIqR0YpNiQiI0QjRiYiIzUvSSZkZWx0YUdGJS1GNTYkIiM6RjgtSSVkaWZmR0YpNiQqJi1JJGV4cEdGLDYjKihGM0YmSSJ0R0YlRiYsJkYmRiZGRyEiIyEiIkYmKUZILCRGOyNGJiIiI0ZKLUkiJEdGKTYkRkdGJEYm LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiosJkkidEc2IiIiJCEiJSIiIkYoLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJComRiRGKCwmISIiRihGJCIiI0YyIyEiJkYzRigsJkYoRihGJCEiIyMhIigiIiVGMUYy KiosKCokSSJ0RzYiIiIjIiNARiUhI2MiI0giIiJGKy1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCQqJkYlRissJiEiIkYrRiVGJ0Y1IyEiJkYnRissJkYrRitGJSEiIyMhIzYiIiVGNEY5 KiosKiokSSJ0RzYiIiIkIiRKIyokRiUiIiMhJEMqRiUiJGQqISQjSCIiIkYuLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YmNiMsJComRiVGLiwmISIiRi5GJUYqRjgjISImRipGLiwmRi5GLkYlISIjIyEjOiIiJUY3ISIk LCQqKiwsKiRJInRHNiIiIiUiJCRwKiRGJiIiJCElJ3AkKiRGJiIiIyIlVWRGJiElL04iJFYoIiIiRjItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRic2IywkKiZGJkYyLCYhIiJGMkYmRi5GPCMhIiZGLkYyRjshIiUsJkYyRjJGJiEiIyMhIz5GKCIiJg== LCQqKiwuKiRJInRHNiIiIiYiJm5KIiokRiYiIiUhJiF5KCkqJEYmIiIkIidJPT0qJEYmIiIjISdTaztGJiImJmVxISZjOCIiIiJGNS1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjLCQqJkYmRjUsJiEiIkY1RiZGMUY/IyEiJkYxRjUsJkY1RjVGJiEiIyMhI0JGK0Y+RkFGKA== JSFH openturns-1.9/validation/src/NonCentralStudent.mws000066400000000000000000000640461307543307100225200ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple P lot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 387 "z:=delta^2*x^2/(2*(nu+x^2)):\nPdf: =nu^(nu/2)*GAMMA(nu+1)/(2^nu*exp(delta^2/2)*(nu+x^2)^(nu/2)*GAMMA(nu/2 ))*(sqrt(2)*delta*x*hypergeom([nu/2+1],[3/2],z)/((nu+x^2)*GAMMA((nu+1) /2))+hypergeom([(nu+1)/2],[1/2],z)/(sqrt(nu+x^2)*GAMMA(nu/2+1)));\nPdf 2:=exp(-delta^2/2)/sqrt(nu*Pi)/GAMMA(nu/2)*(nu/(nu+x^2))^((nu+1)/2)*Su m(GAMMA((nu+j+1)/2)/GAMMA(j+1)*(x*delta*sqrt(2/(nu+x*x)))^j,j=0..infin ity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$PdfG*0)%#nuG,$*&\"\"#!\"\" F'\"\"\"F,F,-%&GAMMAG6#,&F'F,F,F,F,)F*F'F+-%$expG6#,$*&F*F+%&deltaGF*F ,F+),&F'F,*$)%\"xGF*F,F,F(F+-F.6#F(F+,&*.F*#F,F*F7F,F%%Pdf2G*,-%$expG6#,$*&\"\"#!\"\" %&deltaGF+F,\"\"\"*&%#nuGF.%#PiGF.#F,F+-%&GAMMAG6#,$*&F+F,F0F.F.F,)*&F 0F.,&F0F.*$)%\"xGF+F.F.F,,&*&F+F,F0F.F.#F.F+F.F.-%$SumG6$*(-F46#,(*&F+ F,F0F.F.*&F+F,%\"jGF.F.F@F.F.-F46#,&FJF.F.F.F,)**F=F.F-F.F+F@*&F.F.F:F ,F@FJF./FJ;\"\"!%)infinityGF." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 621 "lx:=[1.0,5.0,15.0]:\nldelta:=[-20.0,-5.0,0.0,5.0,20.0]:\nlnu:=[ 2.5,25.25,200.25]:\nres:=Vector(45):\nres2:=Vector(45):\nind:=1:\nfor \+ inu from 1 to 3 do\n valnu:=lnu[inu];\n for idelta from 1 to 5 do\n \+ valdelta:=ldelta[idelta];\n for ix from 1 to 3 do\n valx:=l x[ix];\n st:=time():\n res[ind]:=evalf[5](Int(subs(nu=valnu, delta=valdelta,Pdf),x=-infinity..valx));\nprint([valnu, valdelta, valx , res[ind],time()-st]);\n st:=time():\n res2[ind]:=evalf[5]( Int(subs(nu=valnu,delta=valdelta,Pdf2(x)),-infinity..valx));\nprint([v alnu, valdelta, valx, res2[ind],time()-st]);\n ind := ind + 1;\n \+ od:\n od:\nod:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "convert(res ,array);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'$\"#D!\"\"$!$+#F&$\"#5F& $\"&++\"!\"%$\"%Z_!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'$\"#D!\"\" $!$+#F&$\"#5F&-%$IntG6$,$*($\"&yq#!#\"*\"\"\")*&F3F3,&F$F3*$)%\"xG\"\" #F3F3F&$\"&+v\"!\"%F3-%$SumG6$*(-%&GAMMAG6#,&F;F3*&F:F&%\"jGF3F3F3-FC6 #,&FGF3F3F3F&),$**$\"$+#F&F3F9F3F:#F3F:F5FPF&FGF3/FG;\"\"!%)infinityGF 3F3;$F&FTF)$\"\"'!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'$\"#D!\"\"$ !$+#F&$\"#]F&$\"&++\"!\"%$\"%$Q&!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7'$\"#D!\"\"$!$+#F&$\"#]F&-%$IntG6$,$*($\"&yq#!#\"*\"\"\")*&F3F3,&F$ F3*$)%\"xG\"\"#F3F3F&$\"&+v\"!\"%F3-%$SumG6$*(-%&GAMMAG6#,&F;F3*&F:F&% \"jGF3F3F3-FC6#,&FGF3F3F3F&),$**$\"$+#F&F3F9F3F:#F3F:F5FPF&FGF3/FG;\" \"!%)infinityGF3F3;$F&FTF)$\"\"%!\"$" }}{PARA 7 "" 1 "" {TEXT -1 33 "W arning, computation interrupted\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "\nevalf[25](subs(nu=5,delta=4,x=1,\{Pdf2,Pdf\}));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<$$\":UJRA$3kO91H!)p!#F$\":]JRA$3kO91H !)pF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "plot(evalf[5](subs (nu=25,delta=4,\{Pdf2,Pdf\})),x=-10..20);" }}{PARA 13 "" 1 "" {GLPLOT2D 937 937 937 {PLOTDATA 2 "6&-%'CURVESG6$7_p7$$!#5\"\"!$!+V)3u M\"!#=7$$!+v`3Y$*!\"*$!+@wogPF-7$$!+cx6x()F1$!+(G8m8*F-7$$!+iTDP\")F1$ !+nS%)QC!#<7$$!+Q\"\\J\\(F1$!+$))3AM'F>7$$!+Ja5_oF1$!+)e*yb:!#;7$$!+ce xdiF1$!+,tdFLFI7$$!+1?QUcF1$!+[!)Q%f'FI7$$!+13%f+&F1$!+9(p#[6!#:7$$!+ \"oS:P%F1$!+n`\\A;FY7$$!+v@)*=PF1$!+t!Hnu\"FY7$$!+)G3U9$F1$!+sh:(Q\"FY 7$$!+D!\\r\\#F1$!+mPK(=(FI7$$!+vGVZ=F1$!+*4z/'>FI7$$!+v4J@7F1$\"+yYYGf FI7$$!*1Bt_'F1$\"+Aqm*H)FY7$$\"(siL#!\")$\"+Wi*eX\"!#87$$\"++JL(4$F)$ \"+,jLjWF]q7$$\")!R5'fFjp$\"+fuJv7!#77$$\"+]ViEwF)$\"+w/\\lAFhq7$$\"++ (4AH*F)$\"+c*y9\"RFhq7$$\"+0&zd4\"F1$\"+o%H\\b'Fhq7$$\"*/QBE\"Fjp$\"+z x+l5!#67$$\"+&4.sb\"F1$\"+?[$\\K#F]s7$$\"*:o?&=Fjp$\"+SnTzXF]s7$$\"+)* \\#Q,#F1$\"+@dzbjF]s7$$\"+X=ev@F1$\"+]&)4^&)F]s7$$\"+#pQtL#F1$\"+;se:6 F)7$$\"*a&4*\\#Fjp$\"+%zi>T\"F)7$$\"+7j7`EF1$\"+!)p(*=%fLLF)7 $$\"*Wy!ePFjp$\"+[ekIMF)7$$\"+k](\\z$F1$\"+#3&pUMF)7$$\"+)or=$QF1$\"+z K\"4X$F)7$$\"+7$o(oQF1$\"+![?`X$F)7$$\"+N\\m0RF1$\"+6(\\fX$F)7$$\"+e:c URF1$\"+wk%GX$F)7$$\"+#=e%zRF1$\"+@#ogW$F)7$$\"+1[N;SF1$\"+%z$oNMF)7$$ \"+I9D`SF1$\"+2Gx@MF)7$$\"+Dz$3?%F1$\"+/DzKLF)7$$\"*UC%[VFjp$\"+7Z1'>$ F)7$$\"+#R;w]%F1$\"+5\"[]+$F)7$$\"+l$3om%F1$\"+NrZ!y#F)7$$\"+Q.+E[F1$ \"+!>9V`#F)7$$\"*J#>&)\\Fjp$\"+&=DxF#F)7$$\"+I![0:&F1$\"+m?h5?F)7$$\"+ ]P!fJ&F1$\"+z,p^:mk&Fjp$\"+.'oJG \"F)7$$\"+v/]MfF1$\"+(H&4f%*F]s7$$\"*w&QAiFjp$\"+@=>'y'F]s7$$\"+](4L`' F1$\"+,-%*=YF]s7$$\"*uLU%oFjp$\"+!>&zsIF]s7$$\"+X'[a;(F1$\"+?=*p(>F]s7 $$\"*bjm[(Fjp$\"+6O,^7F]s7$$\"+q'44!yF1$\"+gl=#*yFhq7$$\"*zb^6)Fjp$\"+ p*o%G\\Fhq7$$\"+l]?>%)F1$\"+'*\\i,JFhq7$$\"*MaKs)Fjp$\"+T[0T>Fhq7$$\"* 6W%)R*Fjp$\"+KbDqnF]q7$$\"+:K^+5Fjp$\"+'3&H7EF]q7$$\"+7,Hl5Fjp$\"+f!eB Z*!#97$$\"+4w)R7\"Fjp$\"+\\Nx0QF_al7$$\"+y%f\")=\"Fjp$\"+A&)o@9F_al7$$ \"+/-a[7Fjp$\"+/O#3r&FY7$$\"+ial68Fjp$\"+j_))QAFY7$$\"+i@Ot8Fjp$\"+_2I E\"*FI7$$\"+fL'zV\"Fjp$\"+_3))QOFI7$$\"+!*>=+:Fjp$\"+Zt$4`\"FI7$$\"+E& 4Qc\"Fjp$\"+0etWkF>7$$\"+%>5pi\"Fjp$\"+u'\\zy#F>7$$\"+bJ*[o\"Fjp$\"+R' RNJ\"F>7$$\"+r\"[8v\"Fjp$\"+'piql&F-7$$\"+Ijy5=Fjp$\"+e<&3r#F-7$$\"+/) fT(=Fjp$\"+at!)f7F-7$$\"+1j\"[$>Fjp$\"+VLl`h!#>7$$\"#?F*$\"+l^z+HFfel- %'COLOURG6&%$RGBG$\"*++++\"Fjp$F*F*Fbfl-F$6$7do7$F($\"+3nF78!#F7$F/$\" +*))H)yVFifl7$F5$\"+UlTt7!#E7$F:$\"+iz&4J%F`gl7$F@$\"+$egW]\"!#D7$FE$ \"+U\\TSaFggl7$FK$\"+#fw(p>!#C7$FP$\"+0M4A$*F^hl7$$!+09;C`F1$\"+C*oEQ# !#B7$FU$\"+'okIs'Fghl7$$!+!zSm#\\F1$\"+8,@J))Fghl7$$!+v2MZ[F1$\"+6F2m6 !#A7$$!+sd^F[F1$\"+v&\\4D\"Feil7$$!+o2p2[F1$\"+X.TU8Feil7$%*undefinedG Fajl7$$!+WX]t:F1$\"+A*=9F\"FI7$$!+M#QRb\"F1$\"+fPN\"R\"FI7$$!+D>PM:F1$ \"+m4eA:FI7$$!+]9%yP\"F1$\"+uAqGJFI7$F^p$\"+Pg58kFI7$$!+0k@q$*F)$\"+'o b[L#FY7$Fcp$\"+r7@2$)FY7$$!+Iz%o9$F)$\"+,tv$f$F_al7$Fhp$\"+L)HeX\"F]q7 $$\"+],[l;F)$\"+r0'*pDF]q7$F_q$\"+gc6jWF]q7$$\"+]g=HXF)$\"+h-_:wF]q7$F dq$\"+MRDv7Fhq7$Fjq$\"+fvPlAFhq7$F_r$\"+rRG6RFhq7$Fdr$\"+-FgalFhq7$Fir $\"+&oa\\1\"F]s7$$\"+/V0O8F1$\"+4z%oI\"F]s7$$\"+o0x49F1$\"+\"z0Of\"F]s 7$$\"+Ko[$[\"F1$\"+0$p4$>F]s7$F_s$\"+.*=[K#F]s7$$\"+E71%f\"F1$\"+t&oZa #F]s7$$\"+e$>4j\"F1$\"+$QP5y#F]s7$$\"+!\\xxm\"F1$\"+!HMV.$F]s7$$\"+Acj /[)\\F ]s7$$\"+ul%H$>F1$\"+5%)z:aF]s7$$\"+!=mJ&>F1$\"+\"HP4k&F]s7$$\"+'y&Qt>F 1$\"+HEdseF]s7$$\"+#R0O*>F1$\"+cGu5hF]s7$Fis$\"+U)yaN'F]s7$$\"+/Y/M?F1 $\"+[M!og'F]s7$$\"+5UEa?F1$\"+C8tkoF]s7$$\"+;Q[u?F1$\"+C%o#HrF]s7$$\"+ AMq%4#F1$\"+r?T+uF]s7$$\"+GI#\\6#F1$\"+j.:ywF]s7$$\"+ME9N@F1$\"+3?YizF ]s7$$\"+SAOb@F1$\"+'=;LD)F]s7$F^t$\"+UAn]&)F]s7$$\"+]9!e>#F1$\"+v$zW&) )F]s7$$\"+c5-;AF1$\"+Onnk\"*F]s7$$\"+i1COAF1$\"+oG>\"[*F]s7$$\"+o-YcAF 1$\"+ng%R!)*F]s7$$\"+u)zmF#F1$\"+nVG85F)7$$\"+![**oH#F1$\"+X#yn/\"F)7$ $\"+'3>rJ#F1$\"+E['33\"F)7$Fct$\"+-;`:6F)7$$\"+)HevN#F1$\"+w\\w]6F)7$$ \"+/zxxBF1$\"+c-b'=\"F)7$$\"+5v*zR#F1$\"+d;(GA\"F)7$$\"+;r@=CF1$\"+
    Fjp$\")d@R!)FjpF` jm-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F(Fhel%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 255 "A:=-10:\nB:=50:\nmu:=evalf[ 10](Int(x*subs(nu=25,delta=4,Pdf2),x=A..B));\nmu2:=evalf[10](Int((x-mu )^2*subs(nu=25,delta=4,Pdf),x=A..B));\nmu3:=evalf[10](Int((x-mu)^3*sub s(nu=25,delta=4,Pdf),x=A..B));\nmu4:=evalf[10](Int((x-mu)^4*subs(nu=25 ,delta=4,Pdf),x=A..B));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#muG-%$In tG6$,$**$\"+[@)=7%!\"%\"\"\"%\"xGF-,&$\"#D\"\"!F-*$)F.\"\"#F-F-!#8-%$S umG6$*(-%&GAMMAG6#,&\"#8F-*&F5!\"\"%\"jGF-F-F--F<6#,&FBF-F-F-FA),$**\" \"%F-F.F-F5#F-F5*&F-F-,&F1F-F3F-FAFJF-FBF-/FB;F2%)infinityGF-F-/F.;$!# 5F2$\"#]F2" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu2G-%$IntG6$,$**$\"+ wRFxL\"#9\"\"\",&%\"xGF-*&$F-\"\"!F--F&6$,$**$\"+[@)=7%!\"%F-F/F-,&$\" #DF2F-*$)F/\"\"#F-F-!#8-%$SumG6$*(-%&GAMMAG6#,&\"#8F-*&F?!\"\"%\"jGF-F -F--FF6#,&FLF-F-F-FK),$**\"\"%F-F/F-F?#F-F?*&F-F-,&FF-F-FKF-F-F:FKF-*($\"+5+5Ye!#>F--Fbo6%7#$FIF27#$\"+++++ ]FgnF\\pF-F:#FKF?F-F-F-FZ" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu3G-% $IntG6$,$**$\"+wRFxL\"#9\"\"\",&%\"xGF-*&$F-\"\"!F--F&6$,$**$\"+[@)=7% !\"%F-F/F-,&$\"#DF2F-*$)F/\"\"#F-F-!#8-%$SumG6$*(-%&GAMMAG6#,&\"#8F-*& F?!\"\"%\"jGF-F-F--FF6#,&FLF-F-F-FK),$**\"\"%F-F/F-F?#F-F?*&F-F-,&FF-F-FKF-F-F:FKF-*($\"+5+5Ye!#>F--Fco6 %7#$FIF27#$\"+++++]FgnF]pF-F:#FKF?F-F-F-FZ" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu4G-%$IntG6$,$**$\"+wRFxL\"#9\"\"\",&%\"xGF-*&$F-\" \"!F--F&6$,$**$\"+[@)=7%!\"%F-F/F-,&$\"#DF2F-*$)F/\"\"#F-F-!#8-%$SumG6 $*(-%&GAMMAG6#,&\"#8F-*&F?!\"\"%\"jGF-F-F--FF6#,&FLF-F-F-FK),$**\"\"%F -F/F-F?#F-F?*&F-F-,&FF-F-FKF-F-F:FKF- *($\"+5+5Ye!#>F--Fbo6%7#$FIF27#$\"+++++]FgnF\\pF-F:#FKF?F-F-F-FZ" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "evalf[25](int(subs(nu=25,del ta=4,Pdf2),x=-39..39));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$intG6$,$ *($\":HbY8FrRx9#)=7%!#>\"\"\",&$\"#D\"\"!F+*$)%\"xG\"\"#F+F+!#8-%$SumG 6$*(-%&GAMMAG6#,&\"#8F+*&F3!\"\"%\"jGF+F+F+-F:6#,&F@F+F+F+F?),$**\"\"% F+F2F+F3#F+F3*&F+F+,&F.F+F0F+F?FHF+F@F+/F@;F/%)infinityGF+F+/F2;$!#RF/ $\"#RF/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 422 "plot(evalf[10]( int(subs(nu=5,delta=4,P),x=-infinity..t)),t=-10..10);\ndelta2:=delta*d elta:\nmup1:=sqrt(nu_/2)*GAMMA((nu_-1)/2)/GAMMA(nu_/2)*delta+gamma_;\n mu1:=mup1-gamma_;\nmu2:=nu_ / (nu_ - 2) * (1 + delta * delta) - mu1 * \+ mu1;\nmu4:=collect((nu_ * nu_ * (3 + 6 * delta2 + delta2 * delta2) / ( (nu_ - 2) * (nu_ - 4)) - mup1 * mup1 * (nu_ * ((nu_ + 1) * delta2 + 3 \+ * (3 * nu_ - 5))) / ((nu_ - 2) * (nu_ - 4)) - 3 * mu2),delta);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "evalf[25](1/sqrt(2));" }}{PARA 13 " " 1 "" {GLPLOT2D 738 738 738 {PLOTDATA 2 "6%-%'CURVESG6$7W7$$!#5\"\"!$ \"+&fHdk\"!#67$$!+F-7$$!+r^u%=*F1$\"+!z*[IBF-7$$!+ U%p\"e()F1$\"+3u*e\"GF-7$$!+#4m(G$)F1$\"+z(yOU$F-7$$!+@OS,zF1$\"+U$Q!z TF-7$$!+/R=0vF1$\"+RmL[]F-7$$!+P8#\\4(F1$\"+6m@jhF-7$$!+/siqmF1$\"+Hv$ Hg(F-7$$!+(y$pZiF1$\"+;^N)R*F-7$$!+$yaE\"eF1$\"+o,fq6F)7$$!+\">s%HaF1$ \"+=Y*)>9F)7$$!+]$*4)*\\F1$\"+m:qf\"3&F)7$$\"+:JFn=F1$\"+:\"y29&F)7$$\"*`q n2#F^t$\"+T%)GG_F)7$$\"*cp@[#F^t$\"+&=6,\\&F)7$$\"*3'HKHF^t$\"+i!4'=fF )7$$\"*xanL$F^t$\"+#**=))Q'F)7$$\"*v+'oPF^t$\"+.E.ApF)7$$\"*S<*fTF^t$ \"+gM0!R(F)7$$\"*&)Hxe%F^t$\"+v=eayF)7$$\"*.o-*\\F^t$\"+-Q^L#)F)7$$\"* TO5T&F^t$\"+W-\"pc)F)7$$\"*U9C#eF^t$\"+Ec;N))F)7$$\"*1*3`iF^t$\"+^Vri! *F)7$$\"*$*zym'F^t$\"+jVmQ#*F)7$$\"*^j?4(F^t$\"+YK\"GQ*F)7$$\"*jMF^(F^ t$\"+8!**p\\*F)7$$\"*q(G**yF^t$\"+T&y;e*F)7$$\"*9@BM)F^t$\"+ENwf'*F)7$ $\"*`v&Q()F^t$\"+e'=fr*F)7$$\"*Ol5;*F^t$\"+\")4_k(*F)7$$\"*/Uac*F^t$\" +AhL-)*F)7$$\"#5F*$\"+TqUN)*F)-%'COLOURG6&%$RGBG$\"*++++\"F^t$F*F*Fd\\ l-%+AXESLABELSG6$%\"tGQ!6\"-%%VIEWG6$;F(Fj[l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%mup1G,&*&#\"\"\"\"\"#F(*,F)F'%$nu_GF'-%&GAMMAG6#, &*&F)!\"\"F+F(F(#F(F)F1F(-F-6#,$*&F)F1F+F(F(F1%&deltaGF(F(F(%'gamma_GF (" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu1G,$*&#\"\"\"\"\"#F(*,F)F'%$ nu_GF'-%&GAMMAG6#,&*&F)!\"\"F+F(F(#F(F)F1F(-F-6#,$*&F)F1F+F(F(F1%&delt aGF(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu2G,&*(%$nu_G\"\"\",&F 'F(\"\"#!\"\"F+,&F(F(*$)%&deltaGF*F(F(F(F(*&#F(F*F(**F'F(-%&GAMMAG6#,& *&F*F+F'F(F(#F(F*F+F*-F46#,$*&F*F+F'F(F(!\"#F/F*F(F+" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$mu4G,0*&,&*&#\"\"\"\"\"#F**.%$nu_GF+-%&GAMMAG6#,& *&F+!\"\"F-F*F*#F*F+F3F+-F/6#,$*&F+F3F-F*F*!\"#,&F-F*F*F*F*,&F-F*F+F3F 3,&F-F*\"\"%F3F3F*F3*(F-F+F;F3F " 0 "" {MPLTEXT 1 0 35 "factor((3+6/( nu-4))*(nu/(nu-2))^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"$\" \"\"%#nuG\"\"#,&F'F&F(!\"\"F*,&F'F&\"\"%F*F*F&" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 348 "restart:\nDigits:=25:\nz:=delta^2*x^2/(2*(nu+ x^2)):\nPdf:=nu^(nu/2)*GAMMA(nu+1)/(2^nu*exp(delta^2/2)*(nu+x^2)^(nu/2 )*GAMMA(nu/2))*(sqrt(2)*delta*x*hypergeom([nu/2+1],[3/2],z)/((nu+x^2)* GAMMA((nu+1)/2))+hypergeom([(nu+1)/2],[1/2],z)/(sqrt(nu+x^2)*GAMMA(nu/ 2+1)));\nGAM:=proc(x)\n log(Pi*(2*x+1/3))/2+x*log(x)-x\nend:\nK:=GAM( (nu+j+1)/2)-GAM(j+1)+j*log(X);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$P dfG*0)%#nuG,$*&\"\"#!\"\"F'\"\"\"F,F,-%&GAMMAG6#,&F'F,F,F,F,)F*F'F+-%$ expG6#,$*&F*F+%&deltaGF*F,F+),&F'F,*$)%\"xGF*F,F,F(F+-F.6#F(F+,&*.F*#F ,F*F7F,F%\"KG,2 *&#\"\"\"\"\"#F(-%#lnG6#*&%#PiGF(,(%#nuGF(%\"jGF(#\"\"%\"\"$F(F(F(F(*& ,(*&F)!\"\"F0F(F(*&F)F8F1F(F(F'F(F(-F+6#F6F(F(*&F)F8F0F(F8*&F)F8F1F(F( F'F(*&#F(F)F(-F+6#*&F.F(,&*&F)F(F1F(F(#\"\"(F4F(F(F(F8*&,&F1F(F(F(F(-F +6#FHF(F8*&F1F(-F+6#%\"XGF(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 175 "KK:=log(GAMMA((nu+j+1)/2)/GAMMA(j+1)*X^j);\nP:=collect(convert( series(K,j=infinity,1),polynom),j);\nQ:=(1/2-1/2*ln(2)-1/2*ln(j)+ln(X) )*j;\nsolve(diff(P,j),j);\nsolve(diff(Q,j),j);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#KKG-%#lnG6#*(-%&GAMMAG6#,(*&\"\"#!\"\"%#nuG\"\"\"F1* &F.F/%\"jGF1F1#F1F.F1F1-F*6#,&F3F1F1F1F/)%\"XGF3F1" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"PG*&,*#\"\"\"\"\"#F(*&#F(F)F(-%#lnG6#F)F(!\"\"*&# F(F)F(-F-6#%\"jGF(F/-F-6#%\"XGF(F(F4F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"QG*&,*#\"\"\"\"\"#F(*&#F(F)F(-%#lnG6#F)F(!\"\"*&#F(F)F(-F-6# %\"jGF(F/-F-6#%\"XGF(F(F4F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\" \"#!\"\"%\"XGF%\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"\"#!\" \"%\"XGF%\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "plot(sub s(nu=5,X=2.3,\{P,KK,Q\}),j=1..100);" }}{PARA 13 "" 1 "" {GLPLOT2D 738 738 738 {PLOTDATA 2 "6&-%'CURVESG6$7S7$$\"\"\"\"\"!$\":]9!3_88bE`Nj)*! #D7$$\":+++++++DE=z:$!#C$\":D-%*\\=X5#385*H\"F17$$\":++++++vVS6b.&F1$ \"9>ufd\"yMWNPr'*)F17$$\":++++++]PEhq9(F1$\"8*RG(H\"34f\"GL8#F17$$\":+ +++++]i%ygs#*F1$!:bt!z-662EgWz6F17$$\":+++++](o2_!)Q6!#B$!:[Zx%G4w1slk =EF17$$\":+++++]Pu'R$\\L\"FF$!:=QPd3cWN.e-8%F17$$\":+++++]Pz$R,Q:FF$!: 9=uIgcXL$[dZeF17$$\":+++++]PR`R![FF$!:w#zcw)*))Hi/!>!)*F17$$\":++++++]A)ets@FF$!:)fGavDl/%e:9?\"FF7 $$\":++++++D^E6CO#FF$!:bP`:di(*o\\e^S\"FF7$$\":++++++]<#3%fd#FF$!:,t-( GJ7n:ihV;FF7$$\":++++++]7:Z.z#FF$!:qPp))eTu?/n>*=FF7$$\":++++++]#yt'p* HFF$!:\")>WND1A.%y5R@FF7$$\":+++++]P*Q$)f%=$FF$!:Wi*G.T>4KOspBFF7$$\": ++++++]#*p4xS$FF$!:@mKJKcBp`?6l#FF7$$\":+++++++qG9nf$FF$!:Oyg/^x2KnP_* GFF7$$\":+++++]PWbrl\"QFF$!:z@%y*QlLGhPa=$FF7$$\":+++++++&*[#=6SFF$!:t Sa?ArK&yG'*o#RZvhK%FF7$$\": +++++](=e+)\\$[FF$!:RqMX+[jw\"3B2YFF7$$\":++++++DJY8^/&FF$!::!zg@uK_zM y9\\FF7$$\":+++++]PR,$Qj_FF$!:2JJgnHV!>n()Q_FF7$$\":+++++]i&*H(Q`aFF$! :#>>XF-p*G(HpCbFF7$$\":++++++vL8(fecFF$!:%4Z\"yo'Q)Hn(4PeFF7$$\":+++++ ++:(*)fqeFF$!:P9I.+!RRt$\\P;'FF7$$\":++++++v)49+ygFF$!:sZV`R.!Rv.-(['F F7$$\":+++++]PM$RnyiFF$!:EL&\\q]I$4%=<.oFF7$$\":++++++Drb'[,lFF$!:vG$* *Hw$3p^dz:(FF7$$\":+++++++&4Op,nFF$!:Hz#H(p/#R/#4+[(FF7$$\":++++++]7Pd a\"pFF$!:Nj-I;Lv^_nr#yFF7$$\":+++++]P46f\"4rFF$!:+oRc!R4275gW\")FF7$$ \":++++++]dFE4K(FF$!:HKk*3(=+;.dY\\)FF7$$\":+++++]PWn#=?vFF$!:(3/:T8ZY t6$o#))FF7$$\":+++++](=CIYGxFF$!::4$=g8]2$))po<*FF7$$\":++++++]i8&4KzF F$!:3FOY5iT,(3\"=_*FF7$$\":+++++]Pf3z_9)FF$!:c-OIs.kS\">t&))*FF7$$\":+ ++++++qc+1N)FF$!:%))G.j8#\\K'p)Q-\"!#A7$$\":++++++DmVr0c)FF$!:)3j2ol:& 3Vh-1\"Fbx7$$\":+++++]P9k.)o()FF$!:by\\pmB[s0*e'4\"Fbx7$$\":+++++++:TZ ,'*)FF$!:feMH(p:O5&)=I6Fbx7$$\":++++++D^'*[%z\"*FF$!:=i%*3)>T/-$[*o6Fb x7$$\":+++++++!*)[fv$*FF$!:<)eP>XQ+fw$Q?\"Fbx7$$\":+++++]PWNFZe*FF$!:` QbJDRBx!HET7Fbx7$$\":+++++]i&3Q*[y*FF$!:6>(4P'oBHU(Hx7Fbx7$$\"$+\"F*$! :Yy$>L9*Q.c\\iJ\"Fbx-%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*Fb[l-F$6$7U7$ F($\":$y/;By@GDF)Q.#F17$$\":++++++]78f*y?F1$\":b'Gi9v>'fvEf!GF17$F/$\" :\\bQ\"=w)Q[))=3?$F17$$\":+++++]PM$[r'4%F1$\":0cTW`;\\zB*eQLF17$F5$\": GC\"zsp,CoBQKLF17$F:$\":iens,'*pRn\"oCHF17$F?$\":o$*yL+s9R2FZ5#F17$FD$ \"::eEu3$)[S*3WP)*F-7$FJ$!:AL#fW)[:!QpkAFF-7$FO$!:%f$p@p([P?HXbs#*pd2/(=#*F17$Fbo$!:Y>XAR5QPg2\\9\"FF7$Fgo$!:d;fDWu*HPj)) y8FF7$F\\p$!:bs<&Rpz\"\\0\"48;FF7$Fap$!:MVeMX\\zdiVE$=FF7$Ffp$!:4'p3!p (3?zIZ.vzoK>PFF7$Fir$!:m=S0Zkvi*4l#*RFF7$F^s$!:'\\<4qEF-[l=#H%FF7$F cs$!:iO/J-Sr1Az#3YFF7$Fhs$!:1f(p'HO=0T#Q()[FF7$F]t$!:%\\Q/m(45iM\"y#>& FF7$Fbt$!:\")GzQ98'\\$HWC^&FF7$Fgt$!:sr[11Ix>o1\"HeFF7$F\\u$!:?[z$y'pq /Pl!RhFF7$Fau$!:V$=z&\\BkR]#>(['FF7$Ffu$!:>[ebIG&GGYW.oFF7$F[v$!:Gr[,/ 7>w*3fWrFF7$F`v$!:JmQQ`$e(=SGnX(FF7$Fev$!:\")[vB!\\%R&>1:,yFF7$Fjv$!: \"R(\\p1g*)>\"\\;G\")FF7$F_w$!:ie&f%>nC=t[HZ)FF7$Fdw$!:4[H3SrV&QA)G\") )FF7$Fiw$!:vI6(\\*>qx)=pr\"*FF7$F^x$!:%RZuSdB]Ls-?&*FF7$Fdx$!:`&orNf=' *Gs(*y)*FF7$Fix$!:W:Z?deJ2%4wB5Fbx7$F^y$!:@gT*\\(*RtaH%p0\"Fbx7$Fcy$!: .^Fa[l$\")d@R!)Fa[lFeel-%+AXESLABELSG6$%\"jGQ!6\"-%%VIEWG6$;F(Fgz%(DEFA ULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1 " "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "solve(diff(P 0,j),j);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%\"jG" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 345 "Kj:=GAMMA((nu+j+1)/2)/GAMMA(j+1)*X^j;\nP_i: =subs(j=2*i,Kj);\nQ_i:=subs(j=2*i+1,Kj);\nP_i_b:=subs(i=i-1,P_i):\nQ_i _b:=subs(i=i-1,Q_i):\nratio_P_i_b:=simplify(factor(P_i_b/P_i));\nratio _Q_i_b:=simplify(factor(Q_i_b/Q_i));\nP_i_f:=subs(i=i+1,P_i):\nQ_i_f:= subs(i=i+1,Q_i):\nratio_P_i_f:=simplify(factor(P_i_f/P_i));\nratio_Q_i _f:=simplify(factor(Q_i_f/Q_i));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% #KjG*(-%&GAMMAG6#,(*&\"\"#!\"\"%#nuG\"\"\"F.*&F+F,%\"jGF.F.#F.F+F.F.-F '6#,&F0F.F.F.F,)%\"XGF0F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$P_iG*( -%&GAMMAG6#,(*&\"\"#!\"\"%#nuG\"\"\"F.%\"iGF.#F.F+F.F.-F'6#,&*&F+F.F/F .F.F.F.F,)%\"XG,$*&F+F.F/F.F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ Q_iG*(-%&GAMMAG6#,(*&\"\"#!\"\"%#nuG\"\"\"F.%\"iGF.F.F.F.-F'6#,&*&F+F. F/F.F.F+F.F,)%\"XG,&*&F+F.F/F.F.F.F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,ratio_P_i_bG,$*,\"\"%\"\"\",&*&\"\"#F(%\"iGF(F(F(!\"\"F(F,F(% \"XG!\"#,(%#nuGF(*&F+F(F,F(F(F(F-F-F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,ratio_Q_i_bG,$*,\"\"%\"\"\"%\"XG!\"#%\"iGF(,&*&\"\"#F(F+F(F(F(F( F(,&%#nuGF(*&F.F(F+F(F(!\"\"F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,r atio_P_i_fG,$*,\"\"%!\"\"%\"XG\"\"#,(%#nuG\"\"\"*&F*F-%\"iGF-F-F-F-F-, &*&F*F-F/F-F-F-F-F(,&F/F-F-F-F(F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %,ratio_Q_i_fG,$*,\"\"%!\"\"%\"XG\"\"#,(%#nuG\"\"\"*&F*F-%\"iGF-F-F*F- F-,&F/F-F-F-F(,&*&F*F-F/F-F-\"\"$F-F(F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 99 "subs(j=2*k,simplify(factor(subs(j=j+2,Kj)/Kj)));\nsub s(j=2*k+1,simplify(factor(subs(j=j+2,Kj)/Kj)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*,\"\"#!\"\"%\"XGF%,(%#nuG\"\"\"*&F%F*%\"kGF*F*F*F*F* ,&*&F%F*F,F*F*F*F*F&,&*&F%F*F,F*F*F%F*F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*,\"\"#!\"\"%\"XGF%,(%#nuG\"\"\"*&F%F*%\"kGF*F*F%F*F* ,&*&F%F*F,F*F*F%F*F&,&*&F%F*F,F*F*\"\"$F*F&F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 378 "val_ref:=evalf[25](subs(nu=5,delta=4,x=1,Pdf)); \ny:=evalf[25](subs(nu=5,delta=4,x=1,x*delta*sqrt(2)/sqrt(nu+x*x)));\n fact:=evalf(subs(nu=5,delta=4,x=1,exp(-delta^2/2)/sqrt(nu*Pi)/GAMMA(nu /2)*(nu/(nu+x*x))^((nu+1)/2)));\nsum_:=0:\nfor j from 0 to 10 do\nds:= evalf[25](subs(nu=5,delta=4,x=1,GAMMA((nu+j+1)/2)/GAMMA(j+1)*y^j)):\ns um_:=sum_+ds:\nval:=sum_*fact;\nprint([j,ds,sum_,val]);\nod:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(val_refG$\":UJRA$3kO91H!)p!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"yG$\":&fO!eI]en2,%4B!#C" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%factG$\":#R9`5gD#e5=Zo$!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"!$\"#?!\"\"F%$\":%yG1@?^k6iVpt!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"\"$\":PmfjOm)f4.&\\n(!#C$\":PmfjOm)f4.&\\n*F '$\":9N1VzZZE(e#=!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\" %$\":WWWWWWWWWWW%G!#B$\":hI#RGwl,l1\"!#A$\":f48!#A$\":^/l]Z6$)RF+9'[!#F" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"($\":*yPT/LJ()GA<,?!#B$\":*>`dJ \"yzmQe%>:!#A$\":\"pk@!p#HWGex)f&!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7&\"\")$\":'zWQY608yrzW9!#B$\":zw8iC$G\\/\"QRm\"!#A$\":(oQ%=2\"GfgG9 Jh!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"*$\":b$*e'GWVd%pt_j*!#C $\":tN+0fdQ9%3Hg " 0 "" {MPLTEXT 1 0 128 "j:='j':\ne valf(1/2*exp(2*1));\nplot(subs(nu=5,delta=4,x=1,GAMMA((nu+j+1)/2)/GAMM A(j+1)*(x*delta*sqrt(2)/sqrt(nu+x*x))^j),j=0..10);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"+]!GXp$!\"*" }}{PARA 13 "" 1 "" {GLPLOT2D 371 371 371 {PLOTDATA 2 "6%-%'CURVESG6$7S7$$\"\"!F)$\"\"#F)7$$\"3emmm;arz@!#=$ \"33T7%*ei)>\"H!#<7$$\"3[LL$e9ui2%F/$\"3e2j1I?:fQF27$$\"3nmmm\"z_\"4iF /$\"3WjA*)z&e14&F27$$\"39ommT&phN)F/$\"3K4-?/?u'\\'F27$$\"3KLLe*=)H\\5 F2$\"3;rK(exmP/)F27$$\"3rmm\"z/3uC\"F2$\"3up#*)e*F27$$\"3!****\\7L RDX\"F2$\"3a&f4'48mF6!#;7$$\"3$om;zR'ok;F2$\"32L%4,bU'38FQ7$$\"34++D1J :w=F2$\"3MG&=6A%H#\\\"FQ7$$\"3oLLL3En$4#F2$\"3,cQeKL,\"o\"FQ7$$\"3#pmm T!RE&G#F2$\"3JrSYYW=W=FQ7$$\"3D+++D.&4]#F2$\"3Wte()\\'38-#FQ7$$\"3;+++ vB_p9Y#FQ7$$\"3`LLL347TLF2$\"3K*[@-aW/f#FQ7$$\"3nLLLLY.K NF2$\"3-xx[.*fNo#FQ7$$\"34++D\"o7Tv$F2$\"3EAIJve4sFFQ7$$\"3>LLL$Q*o]RF 2$\"3xen+#pA@$GFQ7$$\"3l++D\"=lj;%F2$\"3&>iCx)R\"z(GFQ7$$\"3S++vV&R-'*GFQ7$$\"3emm;/T1&*\\F2$\"3;,'))od4i'GFQ7$$\"3=nm\"zRQb @&F2$\"3eFAfER#y\"GFQ7$$\"3:++v=>Y2aF2$\"3$o,pw6fDw#FQ7$$\"3Znm;zXu9cF 2$\"3CxuHltf!p#FQ7$$\"34+++]y))GeF2$\"3I4\"4_+JXg#FQ7$$\"3H++]i_QQgF2$ \"3G204+A_5DFQ7$$\"3b++D\"y%3TiF2$\"39o(RT#FQ7$$\"3,++]P![hY'F2$\" 3)3$e[fK_&H#FQ7$$\"3jKLL$Qx$omF2$\"3)*=DU20E'=#FQ7$$\"3Z+++v.I%)oF2$\" 3WAsePZJm?FQ7$$\"3@mm\"zpe*zqF2$\"3iLZ^dG&f&>FQ7$$\"3;,++D\\'QH(F2$\"3 4:3;$=aZ$=FQ7$$\"3'HL$e9S8&\\(F2$\"3s$*[g^!p7s\"FQ7$$\"3s++D1#=bq(F2$ \"3nZ&3[4GUg\"FQ7$$\"3\"HLL$3s?6zF2$\"3=W84>9A#\\\"FQ7$$\"3a***\\7`Wl7 )F2$\"3pFB6T$=$y8FQ7$$\"3enmmm*RRL)F2$\"30W9%fR&\\s7FQ7$$\"3%zmmTvJga) F2$\"37>c'>aM(o6FQ7$$\"3^MLe9tOc()F2$\"3!=a[F1%oq5FQ7$$\"31,++]Qk\\*)F 2$\"3))Gq!eif4&)*F27$$\"3![LL3dg6<*F2$\"3$QN&H\"QP^#*)F27$$\"3&ymmmw(G p$*F2$\"3CVe[<)=z9)F27$$\"3C++D\"oK0e*F2$\"3Xl4n6zUstF27$$\"36,+v=5s#y *F2$\"3+EnTI+E\"o'F27$$\"#5F)$\"3cc<\"*QFB$*fF2-%'COLOURG6&%$RGBG$\"*+ +++\"!\")F(F(-%+AXESLABELSG6$%\"jGQ!6\"-%%VIEWG6$;F(Fez%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "series(GAMMA((nu+j+1)/2)/GAM MA(j+1)*(x*delta*sqrt(2)/sqrt(nu+x*x))^j,j=infinity);" }}{PARA 8 "" 1 "" {TEXT -1 44 "Error, (in asympt) unable to compute series\n" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "25.28395063/28.44444446;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+))))))))))!#5" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 52 "subs(X=y,nu=5,i=2,1/4*X^2*(nu+2*i+1)/(2*i+1) /(i+1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+$*))))))))!#5" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 83 "subs(kf=2,nu=5,(nu + 2.0 * k f + 1.0) / ((2.0 * kf + 1.0) * (kf + 1.0)))*1.33333333;" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"+o))))))))!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "(28.4444/18.963)^(-1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+-,pmm!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5 0 0" 8 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/NonCentralStudent.txt000066400000000000000000000630001307543307100225160ustar00rootroot00000000000000> restart: > z:=delta^2*x^2/(2*(nu+x^2)): > Pdf:=nu^(nu/2)*GAMMA(nu+1)/(2^nu*exp(delta^2/2)*(nu+x^2)^(nu/2)*GAMMA( > nu/2))*(sqrt(2)*delta*x*hypergeom([nu/2+1],[3/2],z)/((nu+x^2)*GAMMA((n > u+1)/2))+hypergeom([(nu+1)/2],[1/2],z)/(sqrt(nu+x^2)*GAMMA(nu/2+1))); > Pdf2:=exp(-delta^2/2)/sqrt(nu*Pi)/GAMMA(nu/2)*(nu/(nu+x^2))^((nu+1)/2) > *Sum(GAMMA((nu+j+1)/2)/GAMMA(j+1)*(x*delta*sqrt(2/(nu+x*x)))^j,j=0..in > finity); / | / nu \ | |----| | \ 2 / | Pdf := nu GAMMA(nu + 1) | | | \ 2 2 1/2 nu delta x 2 delta x hypergeom([---- + 1], [3/2], -----------) 2 2 2 nu + 2 x ------------------------------------------------------ 2 nu (nu + x ) GAMMA(---- + 1/2) 2 2 2 \ nu delta x | / hypergeom([---- + 1/2], [1/2], -----------)| | 2 2 | | 2 nu + 2 x | / | nu + -------------------------------------------| / |2 2 1/2 nu | / \ (nu + x ) GAMMA(---- + 1) | 2 / / nu \ \ |----| | 2 \ 2 / | delta 2 nu | exp(------) (nu + x ) GAMMA(----)| 2 2 / / nu \ / |---- + 1/2| | 2 \ 2 / | delta / nu \ | Pdf2 := exp(- ------) |-------| | 2 | 2| | \nu + x / | \ nu / 1/2 / 1 \1/2\j infinity GAMMA(---- + j/2 + 1/2) |x delta 2 |-------| | ----- 2 | | 2| | \ \ \nu + x / / ) ---------------------------------------------------- / GAMMA(j + 1) ----- j = 0 \ | | | / / 1/2 nu \ | / |(nu Pi) GAMMA(----)| | / \ 2 / | / > lx:=[1.0,5.0,15.0]: > ldelta:=[-20.0,-5.0,0.0,5.0,20.0]: > lnu:=[2.5,25.25,200.25]: > res:=Vector(45): > res2:=Vector(45): > ind:=1: > for inu from 1 to 3 do > valnu:=lnu[inu]; > for idelta from 1 to 5 do > valdelta:=ldelta[idelta]; > for ix from 1 to 3 do > valx:=lx[ix]; > st:=time(): > > res[ind]:=evalf[5](Int(subs(nu=valnu,delta=valdelta,Pdf),x=-infinity.. > valx)); > print([valnu, valdelta, valx, res[ind],time()-st]); > st:=time(): > > res2[ind]:=evalf[5](Int(subs(nu=valnu,delta=valdelta,Pdf2(x)),-infinit > y..valx)); > print([valnu, valdelta, valx, res2[ind],time()-st]); > ind := ind + 1; > od: > od: > od: > > convert(res,array); [2.5, -20.0, 1.0, 1.0000, 5.247] / | | -86 / 1 \1.7500 [2.5, -20.0, 1.0, | 0.27078 10 |--------| | | 2| | \2.5 + x / | / / / 1/2 / 1 \1/2\j\ |infinity GAMMA(1.7500 + j/2) |-20.0 x 2 |--------| | | | ----- | | 2| | | | \ \ \2.5 + x / / | | ) -------------------------------------------------| | / GAMMA(j + 1) | | ----- | \ j = 0 / dFloat(-infinity) .. 1.0, 0.006] [2.5, -20.0, 5.0, 1.0000, 5.383] / | | -86 / 1 \1.7500 [2.5, -20.0, 5.0, | 0.27078 10 |--------| | | 2| | \2.5 + x / | / / / 1/2 / 1 \1/2\j\ |infinity GAMMA(1.7500 + j/2) |-20.0 x 2 |--------| | | | ----- | | 2| | | | \ \ \2.5 + x / / | | ) -------------------------------------------------| | / GAMMA(j + 1) | | ----- | \ j = 0 / dFloat(-infinity) .. 5.0, 0.004] Warning, computation interrupted > > evalf[25](subs(nu=5,delta=4,x=1,{Pdf2,Pdf})); {0.006980290614366408322393142, 0.006980290614366408322393150} > plot(evalf[5](subs(nu=25,delta=4,{Pdf2,Pdf})),x=-10..20); > A:=-10: > B:=50: > mu:=evalf[10](Int(x*subs(nu=25,delta=4,Pdf2),x=A..B)); > mu2:=evalf[10](Int((x-mu)^2*subs(nu=25,delta=4,Pdf),x=A..B)); > mu3:=evalf[10](Int((x-mu)^3*subs(nu=25,delta=4,Pdf),x=A..B)); > mu4:=evalf[10](Int((x-mu)^4*subs(nu=25,delta=4,Pdf),x=A..B)); 50. / | | mu := | 412188.2148 x | | | / -10. / / 1/2 / 1 \1/2\j\ |infinity GAMMA(13 + j/2) |4 x 2 |-------| | | | ----- | | 2| | | | \ \ \25 + x / / | / | ) ----------------------------------------| / | / GAMMA(j + 1) | / | ----- | \ j = 0 / 2 13 (25. + x ) dx 50. / / 50. | | / | | | | 24 | | mu2 := | 0.3377273976 10 |x - 1. | 412188.2148 x | | | | | | | | | | | / / \ -10. -10. / / 1/2 / 1 \1/2\j\ |infinity GAMMA(13 + j/2) |4 x 2 |-------| | | | ----- | | 2| | | | \ \ \25 + x / / | / | ) ----------------------------------------| / | / GAMMA(j + 1) | / | ----- | \ j = 0 / \2 | | / 2 13 | | -7 (25. + x ) dx| |0.1180967714 10 x | | | \ | | / 2 16. x / hypergeom([13.50000000], [1.500000000], -----------) / ( 2 / 50. + 2. x 2 -9 25. + x ) + 0.5846100010 10 2 16. x / hypergeom([13.], [0.5000000000], -----------) / 2 / 50. + 2. x \ 2 1/2| / 2 25/2 (25. + x ) | / (25. + x ) dx | / / 50. / / 50. | | / | | | | 24 | | mu3 := | 0.3377273976 10 |x - 1. | 412188.2148 x | | | | | | | | | | | / / \ -10. -10. / / 1/2 / 1 \1/2\j\ |infinity GAMMA(13 + j/2) |4 x 2 |-------| | | | ----- | | 2| | | | \ \ \25 + x / / | / | ) ----------------------------------------| / | / GAMMA(j + 1) | / | ----- | \ j = 0 / \3 | | / 2 13 | | -7 (25. + x ) dx| |0.1180967714 10 x | | | \ | | / 2 16. x / hypergeom([13.50000000], [1.500000000], -----------) / ( 2 / 50. + 2. x 2 -9 25. + x ) + 0.5846100010 10 2 16. x / hypergeom([13.], [0.5000000000], -----------) / 2 / 50. + 2. x \ 2 1/2| / 2 25/2 (25. + x ) | / (25. + x ) dx | / / 50. / / 50. | | / | | | | 24 | | mu4 := | 0.3377273976 10 |x - 1. | 412188.2148 x | | | | | | | | | | | / / \ -10. -10. / / 1/2 / 1 \1/2\j\ |infinity GAMMA(13 + j/2) |4 x 2 |-------| | | | ----- | | 2| | | | \ \ \25 + x / / | / | ) ----------------------------------------| / | / GAMMA(j + 1) | / | ----- | \ j = 0 / \4 | | / 2 13 | | -7 (25. + x ) dx| |0.1180967714 10 x | | | \ | | / 2 16. x / hypergeom([13.50000000], [1.500000000], -----------) / ( 2 / 50. + 2. x 2 -9 25. + x ) + 0.5846100010 10 2 16. x / hypergeom([13.], [0.5000000000], -----------) / 2 / 50. + 2. x \ 2 1/2| / 2 25/2 (25. + x ) | / (25. + x ) dx | / / > evalf[25](int(subs(nu=25,delta=4,Pdf2),x=-39..39)); 39. / | | | 412188.2147739712713465529 | | | / -39. / / 1/2 / 1 \1/2\j\ |infinity GAMMA(13 + j/2) |4 x 2 |-------| | | | ----- | | 2| | | | \ \ \25 + x / / | / | ) ----------------------------------------| / | / GAMMA(j + 1) | / | ----- | \ j = 0 / 2 13 (25. + x ) dx > plot(evalf[10](int(subs(nu=5,delta=4,P),x=-infinity..t)),t=-10..10); > delta2:=delta*delta: > mup1:=sqrt(nu_/2)*GAMMA((nu_-1)/2)/GAMMA(nu_/2)*delta+gamma_; > mu1:=mup1-gamma_; > mu2:=nu_ / (nu_ - 2) * (1 + delta * delta) - mu1 * mu1; > mu4:=collect((nu_ * nu_ * (3 + 6 * delta2 + delta2 * delta2) / ((nu_ - > 2) * (nu_ - 4)) - mup1 * mup1 * (nu_ * ((nu_ + 1) * delta2 + 3 * (3 * > nu_ - 5))) / ((nu_ - 2) * (nu_ - 4)) - 3 * mu2),delta); > evalf[25](1/sqrt(2)); 1/2 1/2 nu_ 2 nu_ GAMMA(--- - 1/2) delta 2 mup1 := 1/2 ---------------------------------- + gamma_ nu_ GAMMA(---) 2 1/2 1/2 nu_ 2 nu_ GAMMA(--- - 1/2) delta 2 mu1 := 1/2 ---------------------------------- nu_ GAMMA(---) 2 nu_ 2 2 2 nu_ GAMMA(--- - 1/2) delta nu_ (1 + delta ) 2 mu2 := ---------------- - 1/2 ---------------------------- nu_ - 2 nu_ 2 GAMMA(---) 2 mu4 := / 2 nu_ 2 \ | nu_ GAMMA(--- - 1/2) (nu_ + 1) 2 | | 2 nu_ | |-1/2 -------------------------------- + -------------------| | nu_ 2 (nu_ - 2) (nu_ - 4)| | GAMMA(---) (nu_ - 2) (nu_ - 4) | \ 2 / 1/2 3/2 nu_ 3 gamma_ 2 nu_ GAMMA(--- - 1/2) (nu_ + 1) delta 4 2 delta - ---------------------------------------------------- nu_ GAMMA(---) (nu_ - 2) (nu_ - 4) 2 / nu_ 2 / | 2 nu_ GAMMA(--- - 1/2) | | 6 nu_ 2 | + |------------------- + 3/2 --------------------- - | |(nu_ - 2) (nu_ - 4) nu_ 2 | | GAMMA(---) | \ 2 \ 2 gamma_ nu_ (nu_ + 1) 2 nu_ 2 \ nu_ GAMMA(--- - 1/2) (9 nu_ - 15)| 2 | + 1/2 -----------------------------------|/((nu_ - 2) nu_ 2 | GAMMA(---) | 2 / \ | 3 nu_ | 2 (nu_ - 4)) - -------| delta nu_ - 2| | / 1/2 3/2 nu_ gamma_ 2 nu_ GAMMA(--- - 1/2) (9 nu_ - 15) delta 2 - ------------------------------------------------------ nu_ GAMMA(---) (nu_ - 2) (nu_ - 4) 2 2 2 3 nu_ gamma_ nu_ (9 nu_ - 15) 3 nu_ + ------------------- - ------------------------ - ------- (nu_ - 2) (nu_ - 4) (nu_ - 2) (nu_ - 4) nu_ - 2 0.7071067811865475244008445 > factor((3+6/(nu-4))*(nu/(nu-2))^2); 2 3 nu ----------------- (nu - 2) (nu - 4) > restart: > Digits:=25: > z:=delta^2*x^2/(2*(nu+x^2)): > Pdf:=nu^(nu/2)*GAMMA(nu+1)/(2^nu*exp(delta^2/2)*(nu+x^2)^(nu/2)*GAMMA( > nu/2))*(sqrt(2)*delta*x*hypergeom([nu/2+1],[3/2],z)/((nu+x^2)*GAMMA((n > u+1)/2))+hypergeom([(nu+1)/2],[1/2],z)/(sqrt(nu+x^2)*GAMMA(nu/2+1))); > GAM:=proc(x) > log(Pi*(2*x+1/3))/2+x*log(x)-x > end: > K:=GAM((nu+j+1)/2)-GAM(j+1)+j*log(X); / | / nu \ | |----| | \ 2 / | Pdf := nu GAMMA(nu + 1) | | | \ 2 2 1/2 nu delta x 2 delta x hypergeom([---- + 1], [3/2], -----------) 2 2 2 nu + 2 x ------------------------------------------------------ 2 nu (nu + x ) GAMMA(---- + 1/2) 2 2 2 \ nu delta x | / hypergeom([---- + 1/2], [1/2], -----------)| | 2 2 | | 2 nu + 2 x | / | nu + -------------------------------------------| / |2 2 1/2 nu | / \ (nu + x ) GAMMA(---- + 1) | 2 / / nu \ \ |----| | 2 \ 2 / | delta 2 nu | exp(------) (nu + x ) GAMMA(----)| 2 2 / K := 1/2 ln(Pi (nu + j + 4/3)) / nu \ nu nu + |---- + j/2 + 1/2| ln(---- + j/2 + 1/2) - ---- + j/2 + 1/2 \ 2 / 2 2 - 1/2 ln(Pi (2 j + 7/3)) - (j + 1) ln(j + 1) + j ln(X) > KK:=log(GAMMA((nu+j+1)/2)/GAMMA(j+1)*X^j); > P:=collect(convert(series(K,j=infinity,1),polynom),j); > Q:=(1/2-1/2*ln(2)-1/2*ln(j)+ln(X))*j; > solve(diff(P,j),j); > solve(diff(Q,j),j); nu j GAMMA(---- + j/2 + 1/2) X 2 KK := ln(--------------------------) GAMMA(j + 1) P := (1/2 - 1/2 ln(2) - 1/2 ln(j) + ln(X)) j Q := (1/2 - 1/2 ln(2) - 1/2 ln(j) + ln(X)) j 2 X ---- 2 2 X ---- 2 > plot(subs(nu=5,X=2.3,{P,KK,Q}),j=1..100); > solve(diff(P0,j),j); j > Kj:=GAMMA((nu+j+1)/2)/GAMMA(j+1)*X^j; > P_i:=subs(j=2*i,Kj); > Q_i:=subs(j=2*i+1,Kj); > P_i_b:=subs(i=i-1,P_i): > Q_i_b:=subs(i=i-1,Q_i): > ratio_P_i_b:=simplify(factor(P_i_b/P_i)); > ratio_Q_i_b:=simplify(factor(Q_i_b/Q_i)); > P_i_f:=subs(i=i+1,P_i): > Q_i_f:=subs(i=i+1,Q_i): > ratio_P_i_f:=simplify(factor(P_i_f/P_i)); > ratio_Q_i_f:=simplify(factor(Q_i_f/Q_i)); nu j GAMMA(---- + j/2 + 1/2) X 2 Kj := -------------------------- GAMMA(j + 1) nu (2 i) GAMMA(---- + i + 1/2) X 2 P_i := ---------------------------- GAMMA(2 i + 1) nu (2 i + 1) GAMMA(---- + i + 1) X 2 Q_i := ------------------------------ GAMMA(2 i + 2) 4 (2 i - 1) i ratio_P_i_b := ----------------- 2 X (nu + 2 i - 1) 4 i (2 i + 1) ratio_Q_i_b := ------------- 2 X (nu + 2 i) 2 X (nu + 2 i + 1) ratio_P_i_f := ------------------- 4 (2 i + 1) (i + 1) 2 X (nu + 2 i + 2) ratio_Q_i_f := ------------------- 4 (i + 1) (2 i + 3) > subs(j=2*k,simplify(factor(subs(j=j+2,Kj)/Kj))); > subs(j=2*k+1,simplify(factor(subs(j=j+2,Kj)/Kj))); 2 X (nu + 2 k + 1) --------------------- 2 (2 k + 1) (2 k + 2) 2 X (nu + 2 k + 2) --------------------- 2 (2 k + 2) (2 k + 3) > val_ref:=evalf[25](subs(nu=5,delta=4,x=1,Pdf)); > y:=evalf[25](subs(nu=5,delta=4,x=1,x*delta*sqrt(2)/sqrt(nu+x*x))); > fact:=evalf(subs(nu=5,delta=4,x=1,exp(-delta^2/2)/sqrt(nu*Pi)/GAMMA(nu > /2)*(nu/(nu+x*x))^((nu+1)/2))); > sum_:=0: > for j from 0 to 10 do > ds:=evalf[25](subs(nu=5,delta=4,x=1,GAMMA((nu+j+1)/2)/GAMMA(j+1)*y^j)) > : > sum_:=sum_+ds: > val:=sum_*fact; > print([j,ds,sum_,val]); > od: val_ref := 0.006980290614366408322393142 y := 2.309401076758503058036595 fact := 0.00003684718105822560105314392 [0, 2.0, 2.0, 0.00007369436211645120210628784] [1, 7.674950309598663663596637, 9.674950309598663663596637, 0.0003564946457871177943063514] [2, 16.00000000000000000000000, 25.67495030959866366359664, 0.0009460495427187274111566543] [3, 23.87762318541806473118953, 49.55257349501672839478617, 0.001825872647471912364667963] [4, 28.44444444444444444444444, 77.99701793946117283923061, 0.002873970242016996127957390] [5, 28.65314782250167767742743, 106.6501657619628505166580, 0.003929757967720818072170959] [6, 25.28395061728395061728395, 131.9341163792468011339420, 0.004861400273983114750650451] [7, 20.01172228873133044137789, 151.9458386679781315753199, 0.005598775828442926902164691] [8, 14.44797178130511463844796, 166.3938104492832462137679, 0.006131142860592810718438687] [9, 9.635273694574344286589355, 176.0290841438575905003573, 0.006486175534962349902501100] [10, 5.993232738911751257430267, 182.0223168827693417577876, 0.006707009266817116522585129] > j:='j': > evalf(1/2*exp(2*1)); > plot(subs(nu=5,delta=4,x=1,GAMMA((nu+j+1)/2)/GAMMA(j+1)*(x*delta*sqrt( > 2)/sqrt(nu+x*x))^j),j=0..10); 3.694528050 > series(GAMMA((nu+j+1)/2)/GAMMA(j+1)*(x*delta*sqrt(2)/sqrt(nu+x*x))^j,j > =infinity); Error, (in asympt) unable to compute series > 25.28395063/28.44444446; 0.8888888888 > subs(X=y,nu=5,i=2,1/4*X^2*(nu+2*i+1)/(2*i+1)/(i+1)); 0.8888888893 > subs(kf=2,nu=5,(nu + 2.0 * kf + 1.0) / ((2.0 * kf + 1.0) * (kf + > 1.0)))*1.33333333; 0.8888888868 > (28.4444/18.963)^(-1); 0.6666690102 > > openturns-1.9/validation/src/NonStationaryCovarianceModelFactory.mw000066400000000000000000001053341307543307100260330ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRImZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJm1mcmFjR0YkNigtRiM2JS1JKG1mZW5jZWRHRiQ2JC1GIzYlLUYsNiVRImtGJ0YvRjItRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZjcC1JI21uR0YkNiRRIjFGJ0Y5RjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUZobzYkLUYjNiVGXHBGX3AtRmZwNiRRIjJGJ0Y5RjktRiM2I0ZgcS8lLmxpbmV0aGlja25lc3NHRmhwLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmlxLyUpYmV2ZWxsZWRHRj0tRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZqbkZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJiwmSSJrRzYiIiIiRidGJ0YnLCZGJUYnIiIjRidGJyNGJ0Yp QyQ/KEkkaW5kRzYiIiIhIiIiIiM/SSV0cnVlRyUqcHJvdGVjdGVkR0MlPkkiaUdGJS1JJmZsb29yRzYkRipJKF9zeXNsaWJHRiU2Iy1JJmV2YWxmR0YqNiMtSSIqR0YqNiQkIiImISIiLCYtSSVzcXJ0R0YwNiMsJkYnRidGJCIiKUYnRjtGJz5JImpHRiUsJkYkRicqJkYtRicsJkYtRidGJ0YnRicjRjsiIiMtSSZwcmludEdGKjYjNyVGJEYtRkNGOw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyUiIiFGI0Yj NyUiIiJGIyIiIQ== NyUiIiMiIiJGJA== NyUiIiQiIiMiIiE= NyUiIiUiIiMiIiI= NyUiIiYiIiNGJA== NyUiIiciIiQiIiE= NyUiIigiIiQiIiI= NyUiIikiIiQiIiM= NyUiIioiIiRGJA== NyUiIzUiIiUiIiE= NyUiIzYiIiUiIiI= NyUiIzciIiUiIiM= NyUiIzgiIiUiIiQ= NyUiIzkiIiVGJA== NyUiIzoiIiYiIiE= NyUiIzsiIiYiIiI= NyUiIzwiIiYiIiM= NyUiIz0iIiYiIiQ= NyUiIz4iIiYiIiU= NyUiIz8iIiZGJA== QyQtSSZzb2x2ZUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYkL0kiZkdGKEkiakdGKEkia0dGKCIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NiQsJiMhIiQiIiMiIiIqJCwmRidGJ0kiakc2IiIiKSNGJ0YmRi0sJkYkRidGKCMhIiJGJg== JSFH JSFH JSFH JSFH JSFH openturns-1.9/validation/src/NormalCDF.mw000066400000000000000000001007031307543307100204570ustar00rootroot00000000000000 restart: Digits:=30: with(LinearAlgebra): R:=Matrix(4,4,[1.0, 0.1, 0.2, 0.3, 0.1, 1.0, 0.1, 0.2, 0.2, 0.1, 1.0, 0.1, 0.3, 0.2, 0.1, 1.0]); Rinv:=MatrixInverse(R): V:=Vector([x1,x2,x3,x4]): f:=exp(-Transpose(V).Rinv.V/2)/((2*Pi)^2*sqrt(Determinant(R))): u:=[0.1,0.2,0.3,0.4]: II:=Int(Int(Int(int(f,x1=-infinity..u[1]),x2=-infinity..u[2]),x3=-infinity..u[3]),x4=-infinity..u[4]); for i from 1 to 30 do: evalf[i](II); od; LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciNUVAJipmT3MkKW9XPQ== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCYtSSRleHBHRiQ2IywuKiRJI3gyR0YnIiIjJCE/dUJhXyJccCxoJ3puU2tWXyEjSSomRjMiIiJJI3gzR0YnRjkkIj8kXHAsaCd6blNrPXJpZHUlKSEjSiomRjNGOUkjeDRHRidGOSQiP2FfIlxwLGgnem5Taz1yNz9GNyokRjpGNCQhPydwLGgnem5Taz1yaWR1JTMmRjcqJkY6RjlGP0Y5JCI/KVtwLGgnem5Taz1yaWR1JSlGPSokRj9GNEY1JCI/OGgxPVhpb3glPitgKltuS0Y9KiYtSSRlcmZHRiQ2IywqJCE/cWBBISopUUlZSEUpKW8/dWAoRj1GOUYzJCI/JylwRCpRLHhbK2A8XiUpZjIjRj1GOiQiPypILyF5eEZZVCY0LiQqR3ZGIkY3Rj8kIj9SP1toKUhYVCg9UUJPJj40I0Y3RjlGLkY5JCE/OGgxPVhpb3glPitgKltuS0Y9L0YzOywkSSlpbmZpbml0eUdGJSEiIiRGNEZobi9GOjtGZm4kIiIkRmhuL0Y/O0ZmbiQiIiVGaG4= JCIiIyEiIg== JCIjPSEiIw== JCIkeiIhIiQ= JCIlI3oiISIl JCImRHoiISIm JCInWSN6IiEiJw== JCIoZ0N6IiEiKA== JCIpL1kjeiIhIik= JCIqUWdDeiIhIio= JCIrdy5ZI3oiISM1 JCIsa1BnQ3oiISM2 JCItVXcuWSN6IiEjNw== JCIuPmtQZ0N6IiEjOA== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCYtSSRleHBHRiQ2IywuKiRJI3gyR0YnIiIjJCEvbXpuU2tWXyEjOSomRjMiIiJJI3gzR0YnRjkkIi9rPXJpZHUlKSEjOiomRjNGOUkjeDRHRidGOSQiL29Taz1yNz9GNyokRjpGNCQhLz5yaWR1JTMmRjcqJkY6RjlGP0Y5RjsqJEY/RjRGNSQiLyY+K2AqW25LRj0qJi1JJGVyZkdGJDYjLCokIS9qIykpbz91YChGPUY5RjMkIi9JdjZYKWYyI0Y9RjokIi8mNC4kKkd2RiJGN0Y/JCIvPlFCTyY+NCNGN0Y5Ri5GOSQhLyY+K2AqW25LRj0vRjM7JCEiIkkpaW5maW5pdHlHRiUkRjRGZW4vRjo7RlokIiIkRmVuL0Y/O0ZaJCIiJUZlbg== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCYtSSRleHBHRiQ2IywuKiRJI3gyR0YnIiIjJCEwaCd6blNrVl8hIzoqJkYzIiIiSSN4M0dGJ0Y5JCIwVyc9cmlkdSUpISM7KiZGM0Y5SSN4NEdGJ0Y5JCIweTFXJz1yNz9GNyokRjpGNCQhMCc9cmlkdSUzJkY3KiZGOkY5Rj9GOUY7KiRGP0Y0RjUkIjBbPitgKltuS0Y9KiYtSSRlcmZHRiQ2IywqJCEwSEUpKW8/dWAoRj1GOUYzJCIwK2A8XiUpZjIjRj1GOiQiMGE0LiQqR3ZGIkY3Rj8kIjAoPVFCTyY+NCNGN0Y5Ri5GOSQhMFs+K2AqW25LRj0vRjM7JCEiIkkpaW5maW5pdHlHRiUkRjRGZW4vRjo7RlokIiIkRmVuL0Y/O0ZaJCIiJUZlbg== Warning, computation interrupted TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzIzNjU5OTUyMTI2WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjMSIlIiUkIiM1ISIiJCIiIkYoJCIiI0YoJCIiJEYoRilGJkYpRitGK0YpRiZGKUYtRitGKUYmRiU= openturns-1.9/validation/src/PSORM.mws000066400000000000000000000235511307543307100200020ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 191 "restart:\nDigits:=3 0:\na:=0.1;\nb:=beta;\nf:=a*x^2+b;\nk:=subs(x=0,diff(f,x$2)/sqrt(1+dif f(f,x)^2));\ng:=1/(2*Pi)*exp(-(x^2+y^2)/2);\nPHI:=proc(x)\n int(1/sqr t(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG$\"\"\"!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %\"bG%%betaG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&*&$\"\"\"!\"\" F()%\"xG\"\"#F(F(%%betaGF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"kG$ \"\"#!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG,$*&#\"\"\"\"\"#F( *&%#PiG!\"\"-%$expG6#,&*&F)F,%\"xGF)F,*&F)F,%\"yGF)F,F(F(F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 404 "Pdef:=evalf(Int(int(g,y=f.. infinity),x=-infinity..infinity));\nfor i from 0 to 32 do\n beta:=8.0 *i/32:\n Pdef:=evalf(Int(int(g,y=f..infinity),x=-infinity..infinity)) :\n PFORM:=PHI(-beta):\n PSORM:=PHI(-beta)/sqrt(1+beta*k):\nlbeta[i] :=beta:\nlPFORM[i]:=PFORM:\nlPSORM[i]:=PSORM:\nlPDEF[i]:=Pdef:\n prin t([beta,PFORM,PSORM,Pdef,PFORM/Pdef,PSORM/Pdef]);\nod:\nplot([seq([lbe ta[i],lPSORM[i]/lPDEF[i]],i=0..100)]);\n" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%PdefG-%$IntG6$,$*($\"?n*HI(*p*Qjr+-9r%*>!#I\"\"\"-%$expG6#,$* &$\"?++++++++++++++]F,F-)%\"xG\"\"#F-!\"\"F-,&-%$erfG6#,&*&$\"?0@OW3SC va'=\"y1rq!#JF-F5F-F-*&$F@F,F-%%betaGF-F-F-$F-\"\"!F8F-F8/F6;$F8%)infi nityG$F-FJ" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"\"!F%$\"?++++++++++ ++++]!#IF&$\"?B#3E6Lu[\\*zF)=-h%F($\"?*31jIhW`4>r@ZX3\"!#HF+" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?++++++++++++++D!#I$\"?>%3i9fdFwqJuOH,% F&$\"?&3m>i(4`'>)Rg_A;RF&$\"?>OVsebB#>%fak0[OF&$\"?&=3gv>AI:k5Y?+5\"!# H$\"?9AOnpi.'Q(>[+^t5F/" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?+++++ +++++++++]!#I$\"?#R*Q&Hij*o)fsQv`3$F&$\"?!ofKjBjnTJb+!zTHF&$\"?j_.DS\" pk\"z5:(oSw#F&$\"?u]vk\\2**\\^6(4Wi6\"!#H$\"?](\\!zb1()pHk5F/" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?++++++++++++++v!#I$\"?$Qp@1F$*>o oP_tiE#F&$\"?!3wGf+j\\,-x&4J8@F&$\"?(3+\"4C4\"=1f')\\[,+#F&$\"?;Sr*3vN 9)f[LE0L6!#H$\"?'Q:tKXMw-:(Gqdc5F/" }}{PARA 12 "" 1 "" {XPPMATH 20 "6# 7($\"?++++++++++++++5!#H$\"?oVXnZT^qXJRDb'e\"!#I$\"?Vh8mx!\\p[\\2p<$[9 F)$\"?GE*eU]<+^d)*eZ#z8F)$\"?e.;oS(R'H^&fX<]cMcF)$\"?M&[8$QVM-%oGTnc=\"F&$\"?f* RTC^-1D(o7\"**)R5F&" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?+++++++++ ++++]8]F#!# J$\"?mSUgW%y7)Q;\"3PF#>F)$\"?%f)f^@_!G]oU73B'=F)$\"?y/W`IZyO>QX%4;A\"F &$\"?>-];x0E(3\"Q?%[C.\"F&" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?++ +++++++++++]A!#H$\"?(*HJRi_JqW]lsWA7!#J$\"?tC4#[=V+6(f(>(=:5F)$\"?JNF! 4e@$o#)eZ1Ih)*!#K$\"?A\"zt]#fn6(zf+T'R7F&$\"??%QNq7U4ez=#eYH5F&" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?++++++++++++++D!#H$\"?>uX5yp;Nhx D`m4i!#K$\"?MGawLnQo;?20p\"H/n2RU]-x&!#L$\"?V8E 83Sx,(fD'Q8#\\%F)-%$IntG6$,$*($\"?n*HI(*p*Qjr+-9r%*>!#I\"\"\"-%$expG6# ,$*&$\"?++++++++++++++]F3F4)%\"xG\"\"#F4!\"\"F4,&-%$erfG6#,&*&$\"?0@OW 3SCva'=\"y1rq!#JF4F?Q\"*4*Ru\\9R\"HW]k;(y]v#>5F&" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7($\"?+++++ ++++++++]P!#H$\"?l-pYv J$=Cr;$!#M$\"?#)*>+lc3)RI-*)\\jgBF)$\"?K:dp)Q,ABF)$\"?gOC2h9I# 3ffubRO\"F&$\"?LXSLk#QSJb()eKm,\"F&" }}{PARA 12 "" 1 "" {XPPMATH 20 "6 #7($\"?+++++++++++++]U!#H$\"?F\"yb+#p/UM\\xD&)o5!#M$\"?+(>20]cNLe$Q/Oe y!#N$\"?`)o78p:I2'p4(G$QxF,$\"?#[7#R,5\"[$eJLZC\"Q\"F&$\"?i6t\"*ybvjQi C8^:5F&" }}{PARA 7 "" 1 "" {TEXT -1 33 "Warning, computation interrupt ed\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 92 "plot(\{[t,subs(x=t, f),t=-2..2],[1/k*cos(t),1/k*sin(t)+1/k+b,t=0..2*Pi]\},scaling=constrai ned);" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURV ESG6$7S7$$!\"#\"\"!$\"#9F*7$$!3MLLL$Q6G\">!#<$\"3)z&4#)QZ)eO\"!#;7$$!3 bmm;M!\\p$=F0$\"3%\\e7a'***!#=$\"3m\"))\\%))R#**4\"F37$$!3E++++0\"*H\"*Fco$\"3L5!QdEbL3\" F37$$!35++++83&H)Fco$\"3p4Oxt$3)o5F37$$!3\\LLL3k(p`(Fco$\"3Ht(zL,1o0\" F37$$!3Anmmmj^NmFco$\"3;,BXx+.W5F37$$!3(zmmmYh=(eFco$\"3zCP3d(yW.\"F37 $$!3+,++v#\\N)\\Fco$\"34`jPjd$[-\"F37$$!3commmCC(>%Fco$\"3/!*RKWoh<5F3 7$$!39*****\\FRXL$Fco$\"3\\6,\"F37$$!3t*****\\#=/8DFco$\"3F*>9# z`J15F37$$!3=mmm;a*el\"Fco$\"3qP4j*)>u-5F37$$!3jomm;Wn(o)!#>$\"37+x'ov a2+\"F37$$!3IqLLL$eV(>!#?$\"3z#34)*Q+++\"F37$$\"3)Qjmm\"f`@')F[s$\"3oB c\")3Lu+5F37$$\"3%z****\\nZ)H;Fco$\"3(HqVMScE+\"F37$$\"3ckmm;$y*eCFco$ \"3vO=Oul/15F37$$\"3f)******R^bJ$Fco$\"3)=/'3\")G*4,\"F37$$\"3&e***** \\5a`TFco$\"3.NSD.>D<5F37$$\"3'o****\\7RV'\\Fco$\"3!e+[HmWY-\"F37$$\"3 X'*****\\@fkeFco$\"3mTe3TMRM5F37$$\"3_ILLL&4Nn'Fco$\"3\"3\\\"\\Hd`W5F3 7$$\"3A*******\\,s`(Fco$\"3J-;X1%4o0\"F37$$\"3%[mm;zM)>$)Fco$\"35F1'4l >#p5F37$$\"3L*******pfa<*Fco$\"3F0$\"3e)3\"\\D2*fO\"F37$$\"\"#F*F +-%'COLOURG6&%$RGBG$\"#5!\"\"$F*F*Fa[l-F$6$7S7$$\"3++++++++]Fco$\"3+++ ++++]5F37$$\"3M`F*p=\"=`\\Fco$\"3a->\"4REo0\"F37$$\"33;RX\\5!p$[Fco$\" 3,djzWkmi5F37$$\"3Z%QF&RKHCYFco$\"3,E>i^b,p5F37$$\"3)[Cq&fa`EVFco$\"3b ,Vp/@1v5F37$$\"3!H>,n,E@&RFco$\"3`7nMGzi!3\"F37$$\"3!3\"4o%3(GTNFco$\" 3qP3]8xH&3\"F37$$\"3_d5jtyAeIFco$\"3lhRC&fc&*3\"F37$$\"3;tYuydQ0DFco$ \"3AC/pI,F$4\"F37$$\"3Sem/B)p+\">Fco$\"3/gBbFy?'4\"F37$$\"3iS<%*QJpi7F co$\"31Q-nS$z$)4\"F37$$\"32+[OAToDnF[s$\"3-du\"oeX&*4\"F37$$!3Kpv5hQ`& )H!#@$\"3q'e'3\"******4\"F37$$!3F1R;&y6C\"oF[s$\"3C;'RktL&*4\"F37$$!3i )*4-u54B8Fco$\"3+'3\\Fm<#)4\"F37$$!3!\\a[VYal)=Fco$\"3MORoKVI'4\"F37$$ !3fwwiNw:@DFco$\"3%RIs`UyJ4\"F37$$!3(\\CBqtW(>IFco$\"3ET2?]6&)*3\"F37$ $!3)H,'Hs\"eYa$Fco$\"3@bFJgQE&3\"F37$$!39hNy,@5_RFco$\"3AoV$pBG13\"F37 $$!31=.0pLlHVFco$\"3*fEi??3]2\"F37$$!3([bye8oah%Fco$\"3T(H;YwG#p5F37$$ !3#*H\"=Uv6=$[Fco$\"3(HD^\">#fG1\"F37$$!3>z:W4]^`\\Fco$\"3L(pW]7-o0\"F 37$$!37v_jaf(***\\Fco$\"3&[J#\\l]:]5F37$$!3(=Q]'4!>U&\\Fco$\"3I.-uS$\\ K/\"F37$$!3c&[)=MF.P[Fco$\"3N\"3!)[eQt.\"F37$$!3a_UQ26jJYFco$\"3)GuRB) Q;J5F37$$!3W#))Qs1$4PVFco$\"3&HZ)eX57D5F37$$!3+7Q9()Q.tRFco$\"3pLXnyPk >5F37$$!3w(zX.(HGbNFco$\"33jy&4EV[,\"F37$$!3%RFco$\"3afj -9Y#Q+\"F37$$\"3r1))3&G];]#Fco$\"3=:,$>E3n+\"F37$$\"3yb(op>vY0$Fco$\"3 !yL>N'fT55F37$$\"3f&4/2>]'\\NFco$\"3&obr'*Q'y95F37$$\"3Gc,h%>*3]RFco$ \"3:]B@2eM>5F37$$\"3SGKBc(orL%Fco$\"3>nW5lB7D5F37$$\"3)eQC^Z+Dh%Fco$\" 3')353d,qI5F37$$\"38)e(eLWMF[Fco$\"3X\"oj23up.\"F37$$\"3:QmVnxZ`\\Fco$ \"3\"*3&HM;&>V5F37$Ff[l$\"3k************\\5F3-F[[l6&F][lFa[lF^[lFa[l-% +AXESLABELSG6$Q!6\"F^[m-%(SCALINGG6#%,CONSTRAINEDG-%%VIEWG6$%(DEFAULTG Fg[m" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 45.000000 0 0 "Curve 1 " "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "PSORM:=PHI(- beta)/sqrt(1+beta*k);\nPSORMc:=1-PHI(-beta)/sqrt(1+beta*k);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&PSORMG$\"0de;D)yi;!#Q" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%'PSORMcG$\"\"\"\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 20" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/PSORM.txt000066400000000000000000000155621307543307100200160ustar00rootroot00000000000000> restart: > Digits:=30: > a:=0.1; > b:=beta; > f:=a*x^2+b; > k:=subs(x=0,diff(f,x$2)/sqrt(1+diff(f,x)^2)); > g:=1/(2*Pi)*exp(-(x^2+y^2)/2); > PHI:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: a := 0.1 b := beta 2 f := 0.1 x + beta k := 0.2 2 2 x y exp(- ---- - ----) 2 2 g := 1/2 ------------------ Pi > Pdef:=evalf(Int(int(g,y=f..infinity),x=-infinity..infinity)); > for i from 0 to 32 do > beta:=8.0*i/32: > Pdef:=evalf(Int(int(g,y=f..infinity),x=-infinity..infinity)): > PFORM:=PHI(-beta): > PSORM:=PHI(-beta)/sqrt(1+beta*k): > lbeta[i]:=beta: > lPFORM[i]:=PFORM: > lPSORM[i]:=PSORM: > lPDEF[i]:=Pdef: > print([beta,PFORM,PSORM,Pdef,PFORM/Pdef,PSORM/Pdef]); > od: > plot([seq([lbeta[i],lPSORM[i]/lPDEF[i]],i=0..100)]); > Float(infinity) / | Pdef := | -0.199471140200716338969973029967 | / Float(-infinity) 2 exp(-0.500000000000000000000000000000 x ) (erf( 2 0.0707106781186547524400844362105 x + 0.707106781186547524400844362105 beta) - 1.) dx [0., 0.500000000000000000000000000000, 0.500000000000000000000000000000, 0.461021882779949487433112608223, 1.08454721711909534461306306089, 1.08454721711909534461306306089] [0.250000000000000000000000000000, 0.401293674317076275759146208419, 0.391622526039819653097621966085, 0.364805645459419223555872433619, 1.10002046106415302219756008185, 1.07351004819738603626967362214] [0.500000000000000000000000000000, 0.308537538725986896362295389392, 0.294179000553141676323633259680, 0.276406871510791646914025035263, 1.11624409711514999074964755074, 1.06429698706551931371779049750] [0.750000000000000000000000000000, 0.226627352376868199327062169383, 0.211331095770201496300592876080, 0.200014849865906181092409100087, 1.13305263348598143575089714016, 1.05657702871502763445327315386] [1.00000000000000000000000000000, 0.158655253931457051414767454368, 0.144831769074948694907766136143, 0.137924758985751001750425892628, 1.15030292674172963974068160358, 1.05007810156776315946958656739] [1.25000000000000000000000000000, 0.105649773666855257688772764026, 0.0944960302906222305274413240302, 0.0904633017477591072436722948851, 1.16787439354624638114727178974, 1.04457861326029943601203090438] [1.50000000000000000000000000000, 0.0668072012688580660044940409799, 0.0585937916203107043052937877069, 0.0563456501745595511902624715678, 1.18566741286840234433831348534, 1.03989911268725060251244139959] [1.75000000000000000000000000000, 0.0400591568638170904187573498856, 0.0344774327548164726048053139994, 0.0332827583308622774323121525445, 1.20360086942286951225603913360, 1.03589469394567586574078439676] [2.00000000000000000000000000000, 0.0227501319481792072002826371665, 0.0192273708116388127844460424066, 0.0186230812426850280522151598594, 1.22160944538193678473053440478, 1.03244842038108726057716500219] [2.25000000000000000000000000000, 0.0122244726550447031526239312997, 0.0101518719759711004318482092473, 0.00986130064758826832158090273531, 1.23964100597971167592507379122, 1.02946582187958094212703538420] [2.50000000000000000000000000000, 0.00620966532577613516697810457419, 0.00507017050720166838673376542834, 0.00493749799035946477343316631781, 1.25765424875120865971096676028, 1.02687039409458972826342913077] [2.75000000000000000000000000000, 0.00297976323505455675429424698643, 0.00239340342594886005084812775183, 0.00233593938149220078077614026092, 1.27561667852488558612695934074, 1.02459997246159323362138212620] [3.00000000000000000000000000000, 0.00134989803163009452665181476759, 0.00106718809723227905853795125583, 0.00104359875879428088410498887472, 1.29350291024655463561677147824, 1.02260383910886599303657409708] [3.25000000000000000000000000000, 0.000577025042390767042916919314251, 0.000449213386255970177400813261343, %1, 0.000577025042390767042916919314251 -----------------------------------, %1 0.000449213386255970177400813261343 -----------------------------------] %1 Float(infinity) / | %1 := | -0.199471140200716338969973029967 | / Float(-infinity) 2 exp(-0.500000000000000000000000000000 x ) (erf( 2 0.0707106781186547524400844362105 x + 2.29809703885627945430274417684) - 1.) dx [3.50000000000000000000000000000, 0.000232629079035525036349925886728, 0.000178418359008055515441331636208, 0.000175044291391449743990991382019, 1.32897266849622091071827960009, 1.01927550787166419971206581107] [3.75000000000000000000000000000, 0.0000884172852008038678177546690265, 0.0000668371852116567589126756623144, 0.0000656630801047212575450968414543, 1.34652966415516281090757712817, 1.01788074980739567443225474185] [4.00000000000000000000000000000, 0.0000316712418331199212537707567222, 0.0000236063498902303980856650019982, 0.0000232201388695715321954939137217, 1.36395574595908230146107243660, 1.01663258875531403826433404533] [4.25000000000000000000000000000, 0.0000106885257749344204692005578127, -5 0.785836043835833355650050719700 10 , -5 0.773832870969607301569131268853 10 , 1.38124473331583481100139212482, 1.01551132462386375557891731162] Warning, computation interrupted > plot({[t,subs(x=t,f),t=-2..2],[1/k*cos(t),1/k*sin(t)+1/k+b,t=0..2*Pi]} > ,scaling=constrained); > PSORM:=PHI(-beta)/sqrt(1+beta*k); > PSORMc:=1-PHI(-beta)/sqrt(1+beta*k); -23 PSORM := 0.166278825165857 10 PSORMc := 1. > openturns-1.9/validation/src/ProductFunction.mw000066400000000000000000001561121307543307100220450ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZnci1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSJmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEjeDFGJ0YvRjItRjY2LVEiXkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4xMTExMTExZW1GJy9GTkZpby1JI21uR0YkNiRRIjNGJ0Y5RmduLUY2Ni1RIipGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMTY2NjY2N2VtRicvRk5GY3BGZ24tRiw2JVEkc2luRicvRjBGPUY5LUkobWZlbmNlZEdGJDYkLUYjNistRiw2JVEjeDJGJ0YvRjJGZ24tRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZlcUZnbi1JJm1mcmFjR0YkNigtRlxwNiRRIjVGJ0Y5LUYjNiMtRlxwNiRRIjJGJ0Y5LyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Znci8lKWJldmVsbGVkR0Y9RmduRl9wRmduLUYsNiVRI3gzRidGL0YyRjlGZ24tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRmRxRmZxRmduLUZqcDYkLUYjNidGYm9GZ25GYXFGZ25GXnFGOUZlb0ZfckZnbi1GNjYtUSIvRidGOUY7Rj4vRkFGMUZCRkRGRkZIRmJwRmRwRmduLUZqcDYkLUYjNiktRlxwNiRGZHJGOUZnbkZhcUZnbkZcc0Zlb0ZfckY5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRI2cxRidGL0YyRl9vLUYsNiVRJGV4cEYnRmhwRjktRmpwNiQtRiM2LEZfc0Zib0ZnbkZfcEZnbkZecUZnbkZhcUZnbkZcc0Y5RmduRmZzRmduLUYsNiVRJGNvc0YnRmhwRjktRmpwNiQtRiM2L0ZedEZnbkZhcUZnbkZecUZnbkZfcEZnbkZcc0ZnbkZfc0ZnbkZib0Y5RmB0Rk9GZ24tRiw2JVEjZzJGJ0YvRjJGX29GZXAtRmpwNiQtRiM2KUZecUZhcUZcc0ZfcEZib0Zlb0ZfckY5RmB0Rk8tRiw2JVEndmFsbnVtRidGL0YyRl9vRmJvLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZccDYkUSQxLjJGJ0Y5LUY2Ni1RIixGJ0Y5RjtGY3RGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRl5xRl92LUZccDYkUSQyLjNGJ0Y5RmV2RlxzRl92LUZccDYkUSQzLjRGJ0Y5RjVGTy1GNjYtUSIjRidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRQn52YWxudW0mQXNzaWduO3gxPXgxLHgyPXgyLHgzPXgzO0YnRi9GMkZPRmduLUYsNiVRJWRpc3BGJ0YvRjItRmpwNiQtRiM2JS1GLDYjUSFGJy1JI21zR0YkNiNRK2xlZnR+dmFsdWVGJ0ZdeEY5RmB0RmduRk8tRiw2JVEmZXZhbGZGJ0YvRjItRmpwNiQtRiM2JUZnbi1GLDYlUSVzdWJzRidGL0YyLUZqcDYkLUYjNiVGXHZGZXZGXG9GOUY5RmB0Rk9GZ25GZnctRmpwNiQtRiM2JUZdeC1GYXg2I1EscmlnaHR+dmFsdWVGJ0ZdeEY5RmB0Rk9GZHgtRmpwNiQtRiM2JEZbeS1GanA2JC1GIzYlRlx2RmV2LUZqcDYmLUYjNiVGZHRGZXZGZXVGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Y5RjlGYHRGT0ZnbkZmdy1GanA2JC1GIzYlRl14LUZheDYjUS5sZWZ0fmdyYWRpZW50RidGXXhGOUZgdEZPRmR4LUZqcDYkLUYjNiRGW3ktRmpwNiQtRiM2JUZcdkZldi1GanA2Ji1GIzYqLUYsNiVRJWRpZmZGJ0YvRjItRmpwNiQtRiM2JUZcb0ZldkZib0Y5RmV2Rl5cbC1GanA2JC1GIzYlRlxvRmV2Rl5xRjlGZXZGXlxsLUZqcDYkLUYjNiVGXG9GZXZGXHNGOUY5RmV6Rmh6RjlGOUZgdEZPRmZ3LUZqcDYkLUYjNiVGXXgtRmF4NiNRL3JpZ2h0fmdyYWRpZW50RidGXXhGOUZgdEZPRmR4LUZqcDYkLUYjNiRGW3ktRmpwNiQtRiM2JUZcdkZldi1GanA2Ji1GIzYzRl5cbC1GanA2JC1GIzYlRmR0RmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiVGZHRGZXZGXnFGOUZldkZeXGwtRmpwNiQtRiM2JUZkdEZldkZcc0Y5RmV2Rl5cbC1GanA2JC1GIzYlRmV1RmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiVGZXVGZXZGXnFGOUZldkZeXGwtRmpwNiQtRiM2JUZldUZldkZcc0Y5RjlGZXpGaHpGOUY5RmB0Rk9GZ24tRmpwNiYtRiM2Ni1GanA2JC1GIzYjLUZqcDYkLUYjNiZGX3NGXnRGX3AtRmpwNiQtRiM2JS1GanA2JC1GIzYlLUZqcDYkLUYjNiNGXnFGOUZfcC1GanA2JC1GIzYkRmd0LUZqcDYkLUYjNiUtRmpwNiQtRiM2JS1GanA2JC1GIzYmRl9zRl50Rl9wRmJvRjlGX3BGXGFsRjlGYXEtRmpwNiQtRiM2I0Zcc0Y5RjlGOUY5RmZzLUZqcDYkLUYjNiRGXnUtRmpwNiQtRiM2Jy1GanA2JC1GIzYjRl50RjlGYXEtRmpwNiQtRiM2JUZcYWxGX3BGYGJsRjlGYXFGXGJsRjlGOUY5RjlGOUZhcS1GanA2JC1GIzYjLUZqcDYkLUYjNiZGX3NGXnRGX3AtRmpwNiQtRiM2JS1GanA2JC1GIzYlRmBhbEZfcC1GanA2JC1GIzYkRmVwRmhibEY5RjlGZnMtRmpwNiQtRiM2JUZkYmxGZW8tRmpwNiRGXXJGOUY5RjlGOUY5RmV2LUZqcDYkLUYjNiMtRmpwNiQtRiM2JkZfc0ZedEZfcC1GanA2JC1GIzYlLUZqcDYkLUYjNiUtRmpwNiQtRiM2I0Zib0Y5Rl9wRmBhbEY5RmZzRmRibEY5RjlGOUZhcS1GanA2JC1GIzYlLUZqcDYkLUYjNidGYGJsRl9wRmRkbEZfcEZgYWxGOUZmc0ZoZGxGOUZldi1GanA2JC1GIzYlRmBhbEZmc0ZkYmxGOUZhcS1GanA2JC1GIzYlLUZqcDYkLUYjNidGXGFsRl9wRmRkbEZfcEZgYWxGOUZmc0ZoZGxGOUZldi1GanA2JC1GIzYlRl9yRl9wLUZqcDYkLUYjNidGXmZsRl9wRmBibEZfcC1GanA2JC1GIzYkRl51LUZqcDYkLUYjNiVGXGFsRmFxLUZqcDYkLUYjNiVGYGJsRl9wLUZqcDYkLUYjNiVGYm9GZW9GX3JGOUY5RjlGOUY5RjlGZXZGXnVGYmhsRmV2RmpobEZfcEZeaGxGOUZlekZoekZgdEZPRmduRmZ3LUZqcDYkLUYjNiVGXXgtRmF4NiNRLWxlZnR+aGVzc2lhbkYnRl14RjlGYHRGT0ZkeC1GanA2JC1GIzYkRlt5LUZqcDYkLUYjNiVGXHZGZXYtRmpwNiYtRiM2M0ZeXGwtRmpwNiQtRiM2JkZeXGxGYVxsRmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiZGXlxsRmVcbEZldkZib0Y5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZlXGxGZXZGXnFGOUZldkZeXGwtRmpwNiQtRiM2JkZeXGxGaVxsRmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiZGXlxsRmlcbEZldkZecUY5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZpXGxGZXZGXHNGOUY5RmV6Rmh6RjlGOUZgdEZPRmZ3LUZqcDYkLUYjNiVGXXgtRmF4NiNRLnJpZ2h0fmhlc3NpYW5GJ0ZdeEY5RmB0Rk9GZHgtRmpwNiQtRiM2JEZbeS1GanA2JC1GIzYlRlx2RmV2LUZqcDYmLUYjNjNGXlxsLUZqcDYkLUYjNiZGXlxsRmBebEZldkZib0Y5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZkXmxGZXZGYm9GOUZldkZeXGwtRmpwNiQtRiM2JkZeXGxGZF5sRmV2Rl5xRjlGZXZGXlxsLUZqcDYkLUYjNiZGXlxsRmhebEZldkZib0Y5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZoXmxGZXZGXnFGOUZldkZeXGwtRmpwNiQtRiM2JkZeXGxGaF5sRmV2RlxzRjlGOUZlekZoekY5RjlGYHRGT0ZkeC1GanA2JC1GIzYkRlt5LUZqcDYkLUYjNiVGXHZGZXYtRmpwNiYtRiM2M0ZeXGwtRmpwNiQtRiM2JkZeXGxGXF9sRmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiZGXlxsRmBfbEZldkZib0Y5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZgX2xGZXZGXnFGOUZldkZeXGwtRmpwNiQtRiM2JkZeXGxGZF9sRmV2RmJvRjlGZXZGXlxsLUZqcDYkLUYjNiZGXlxsRmRfbEZldkZecUY5RmV2Rl5cbC1GanA2JC1GIzYmRl5cbEZkX2xGZXZGXHNGOUY5RmV6Rmh6RjlGOUZgdA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUjIiImIiIjRi9GLyomLCZGJEYvRi5GL0YzLCZGL0YvKiRGMEYzRi8hIiJGOA== KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmKiZJI3gxR0YoIiIiSSN4MkdGKEYtISIiSSN4M0dGKEYtRi0tSSRjb3NHRiU2IywoRi9GLSomRi5GLUYwRi1GL0YsRi1GLw== LUkkc2luRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJkkjeDJHRiciIiIqJkkjeDNHRidGK0kjeDFHRiciIiNGKw== LUklZGlzcEc2IjYjUStsZWZ0fnZhbHVlRiQ= JCEreGlQcUUhIio= LUklZGlzcEc2IjYjUSxyaWdodH52YWx1ZUYk NyQkIitwdG96IikhIiokIitkNkc3eiEjNQ== LUklZGlzcEc2IjYjUS5sZWZ0fmdyYWRpZW50RiQ= NyUkIStiJHBceiUhIiokISsiPnA3JCopISM1JCErTGBtOUpGKA== LUklZGlzcEc2IjYjUS9yaWdodH5ncmFkaWVudEYk NygkIStbWjs4YCEiKSQiKzkjbydvNSEiKCQiK1JJPjYoKUYlJCIrakEsISpcISIqJCIrMjZAOmghIzUkIislKlIhZiEpKUYw NygsJiooSSN4Mkc2IiIiIi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCYqJkkjeDFHRiZGJ0YlRichIiJJI3gzR0YmRidGJy1JJGNvc0dGKjYjLChGMUYnKiZGJUYnRjJGJ0YxRjBGJ0YxRjEqKEYoRidGMyEiIy1JJHNpbkdGKkY1RidGJywmKihGMEYnRihGJ0YzRjFGMSoqRihGJ0YzRjlGOkYnRjJGJ0YxLCYqJkYoRidGM0YxRicqKkYoRidGM0Y5RjpGJ0YlRidGMSwkKigtRjQ2IywmRiVGJyomRjJGJ0YwIiIjRidGJ0YyRidGMEYnRkhGRComRkRGJ0YwRkg= LUklZGlzcEc2IjYjUS1sZWZ0fmhlc3NpYW5GJA== NygkIStFbCg+QSghIiokIStcJzN1KSoqISM1JCIrUEAjZWAiRiUkISs2bS0oeiJGJSQiKyQqM1FSWEYlJCIrPGJ3PDUhIik= LUklZGlzcEc2IjYjUS5yaWdodH5oZXNzaWFuRiQ= NygkIislSFVHKFwhIigkISsyJylwPjchIickIispZkRfOiRGKCQhKypmKj1lIipGJSQiKz1LTmlCRigkIitGTW5LPEYo NygkIStGYmdfWyEiKSQhK0M5VWNrISIqJCErZDZHN3ohIzUkISsmPSdmSHlGKCQhKyhbbyRSNkYoJCErQDFwUztGKA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY1LUkjbWlHRiQ2JVEjaDFGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSJmRidGL0YyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZWLUYsNiVRI2cxRidGL0YyLUY2Ni1RIjpGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlYvJSZkZXB0aEdGXW8vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2JVEjaDJGJ0YvRjJGNUZPRlItRiw2JVEjZzJGJ0YvRjJGZW5GaG4tRiw2JVEmZXZhbGZGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Ji1GLDYlUSVzdWJzRidGL0YyLUZfcDYkLUYjNictRiw2JVEndmFsbnVtRidGL0YyLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGVS9GTlEsMC4zMzMzMzMzZW1GJy1GX3A2Ji1GIzYnRitGXXFGZW8vJStleGVjdXRhYmxlR0Y9RjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZncUY5RjlGZ3FGOUY5LUY2Ni1RIjtGJ0Y5RjtGYHFGQEZCRkRGRkZIRlVGTUZncUY5 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQkISs1VkclPSMhIikkISshendHNiMhIio= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZOLUkjbWlHRiQ2JVElZGgxMUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJWRpZmZGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Jy1GLDYlUSNoMUYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRI3gxRidGL0YyLyUrZXhlY3V0YWJsZUdGPUY5RjktRjY2LVEiOkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGaW4vJSZkZXB0aEdGaW8vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2JVElZGgxMkYnRi9GMkY1Rk8tRlM2JC1GIzYnRldGWi1GLDYlUSN4MkYnRi9GMkZfb0Y5RjlGYW9GZG8tRiw2JVElZGgxM0YnRi9GMkY1LUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGaG4vRk5GaW5GTy1GUzYkLUYjNidGV0ZaLUYsNiVRI3gzRidGL0YyRl9vRjlGOUZhb0Zkby1GLDYlUSVkaDIxRidGL0YyRjVGTy1GUzYkLUYjNictRiw2JVEjaDJGJ0YvRjJGWkZcb0Zfb0Y5RjlGYW9GZG8tRiw2JVElZGgyMkYnRi9GMkY1Rk8tRlM2JC1GIzYnRmByRlpGaHBGX29GOUY5RmFvRmRvLUYsNiVRJWRoMjNGJ0YvRjJGNUZPLUZTNiQtRiM2J0ZgckZaRmZxRl9vRjlGOUZhb0Zkb0ZecS1GLDYlUSZldmFsZkYnRi9GMi1GUzYkLUYjNiYtRiw2JVElc3Vic0YnRi9GMi1GUzYkLUYjNictRiw2JVEndmFsbnVtRidGL0YyRlotRlM2Ji1GIzYvRitGWkZhcEZaRltxRlpGaXFGWkZjckZaRmpyRl9vRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Zfb0Y5RjlGX29GOUY5LUY2Ni1RIjtGJ0Y5RjtGZ25GQEZCRkRGRkZIRmhuRk1GXnFGX29GOQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NygkIisyOWdFNSEiKCQhK043IW8jSEYlJCErN0xwXkJGJSQhKyVcNz5yIiEiKSQhKydmZSdSQiEiKiQhKyF6W3pmI0Yv LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZccC1JI21pR0YkNiVRJ2QyaDExMUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJWRpZmZGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Jy1GLDYlUSVkaDExRidGL0YyLUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkgvRktRJjAuMGVtRicvRk5RLDAuMzMzMzMzM2VtRictRiw2JVEjeDFGJ0YvRjIvJStleGVjdXRhYmxlR0Y9RjlGOS1GNjYtUSI6RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0Zpbi8lJmRlcHRoR0Zpby8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GLDYlUSdkMmgxMjFGJ0YvRjJGNUZPLUZTNiQtRiM2Jy1GLDYlUSVkaDEyRidGL0YyRlpGXG9GX29GOUY5RmFvRmRvLUYsNiVRJ2QyaDEyMkYnRi9GMkY1Rk8tRlM2JC1GIzYnRmhwRlotRiw2JVEjeDJGJ0YvRjJGX29GOUY5RmFvRmRvLUYsNiVRJ2QyaDEzMUYnRi9GMkY1Rk8tRlM2JC1GIzYnLUYsNiVRJWRoMTNGJ0YvRjJGWkZcb0Zfb0Y5RjlGYW9GZG8tRiw2JVEnZDJoMTMyRidGL0YyRjVGTy1GUzYkLUYjNidGXHJGWkZicUZfb0Y5RjlGYW9GZG8tRiw2JVEnZDJoMTMzRidGL0YyRjVGTy1GUzYkLUYjNidGXHJGWi1GLDYlUSN4M0YnRi9GMkZfb0Y5RjlGYW8tRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZobi9GTkZpbkZkby1GLDYlUSdkMmgyMTFGJ0YvRjJGNUZPLUZTNiQtRiM2Ji1GLDYlUSVkaDIxRidGL0YyRlpGXG9GOUY5RmFvRmRvLUYsNiVRJ2QyaDIyMUYnRi9GMkY1Rk8tRlM2JC1GIzYmLUYsNiVRJWRoMjJGJ0YvRjJGWkZcb0Y5RjlGYW9GZG8tRiw2JVEnZDJoMjIyRidGL0YyRjVGTy1GUzYkLUYjNiZGZXRGWkZicUY5RjlGYW9GZG8tRiw2JVEnZDJoMjMxRidGL0YyRjVGTy1GUzYkLUYjNiYtRiw2JVElZGgyM0YnRi9GMkZaRlxvRjlGOUZhb0Zkby1GLDYlUSdkMmgyMzJGJ0YvRjJGNUZPLUZTNiQtRiM2JkZmdUZaRmJxRjlGOUZhb0Zkby1GLDYlUSdkMmgyMzNGJ0YvRjJGNUZPLUZTNiQtRiM2JkZmdUZaRl1zRjlGOUZhb0Zkb0Zgcy1GLDYlUSZldmFsZkYnRi9GMi1GUzYkLUYjNiYtRiw2JVElc3Vic0YnRi9GMi1GUzYkLUYjNictRiw2JVEndmFsbnVtRidGL0YyRlotRlM2Ji1GIzY7RitGWkZhcEZaRltxRlpGZXFGWkZfckZaRmZyRlpGZHNGWkZedEZaRmh0RlpGX3VGWkZpdUZaRmB2Rl9vRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Zfb0Y5RjlGX29GOUY5LUY2Ni1RIjtGJ0Y5RjtGZ25GQEZCRkRGRkZIRmhuRk1GYHNGX29GOQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ny4kIStqRiFbeCkhIigkIiszXSJSeSMhIickISs1JG9SZylGKCQiKy09dEg/RigkIStCKEdCUSdGKCQhK3lbIXpmJUYoJCIrPCVvOWcoISIpJCIrI1wuPjEqISIqJCIrOjB0TkFGNiQiKzglWzRQIkYzJCIrPTVHZGNGNiQiK09mYik9IkYz JSFH JSFH JSFH LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/RandomMixture.mw000066400000000000000000002324001307543307100215100ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZOLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEld2l0aEYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRK1N0YXRpc3RpY3NGJ0YvRjJGOUY1Rk9GZ24tRiw2JVEiWkYnRi9GMkZfby1JJW1zdWJHRiQ2JS1GLDYlUSJYRidGL0YyLUYjNiMtRmNvNiRRIjFGJ0Y5LyUvc3Vic2NyaXB0c2hpZnRHUSIwRictRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZmcS1GY282JFEiMkYnRjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUZlcDYlRmdwLUYjNiNGaHFGX3EtRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZlcUZncS1GY282JFEiM0YnRjlGW3ItRmVwNiVGZ3AtRiM2I0ZlckZfcUZici1GZXA2JUZncC1GIzYjLUZjbzYkUSI0RidGOUZfcUZicS1JJm1mcmFjR0YkNihGZXJGYHIvJS5saW5ldGhpY2tuZXNzR0ZecS8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zqcy8lKWJldmVsbGVkR0Y9RltyLUZlcDYlRmdwLUYjNiMtRmNvNiRRIjVGJ0Y5Rl9xRmJxLUZkczYoRmN0RmByRmZzRmhzRlt0Rl10RltyLUZlcDYlRmdwLUYjNiMtRmNvNiRRIjZGJ0Y5Rl9xLUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPLUYsNiVRJXpldGFGJy9GMEY9RjlGX29GZ24tRiw2JVElc3Vic0YnRi9GMi1Gam82JC1GIzZSRmRwLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZkczYoRlxxRmByRmZzRmhzRlt0Rl10LUY2Ni1RIixGJ0Y5RjtGYnVGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRl5yRl52RlxxRmJxRmhxRltyLUZlcDYlLUYsNiVRJSZ4aTtGJ0ZmdUY5RmByRl9xRmN2RmhyRl52RmhxRmJxLUZlcDYlRmp2RmpyRl9xRmN2RlxzRl52LUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZlcUZncUZocUZicUZgc0Zbci1GZXA2JUZqdkZec0ZfcUZjdkZfdEZedkZfd0ZlckZicUZhdkZbckZnbi1GZXA2JUZqdkZhdEZfcUZjdkZodEZedkZfd0ZocUZicS1GZHM2KEZccUZec0Zmc0Zoc0ZbdEZddEZbckZnbi1GZXA2JUZqdkZqdEZfcUZjdkZhcEY5Rl91 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LC4mSSJYRzYiNiMiIiJGJyZGJDYjIiIjRiomRiQ2IyIiJCEiJCZGJDYjIiIlISIiJkYkNiMiIiYjRi1GKiZGJDYjIiInI0Y1Rio= LC4hIzYiIiImSSN4aUc2IjYjIiIjIiIlJkYmNiMiIiQhIiQmRiY2I0YqISIlJkYmNiMiIiYjRi1GKiZGJjYjIiInI0Y0IiIp Qy4+SSRwZGZHNiItSSRQREZHRiU2JC1JL1JhbmRvbVZhcmlhYmxlR0YlNiMtSSdOb3JtYWxHRiU2JCEjNiIiJUkieEdGJSEiIj5GJC1JJGludEdGJTYkKiYtRic2JC1GKjYjLUYtNiQiIiEiIiRJInVHRiUiIiItSSVzdWJzRyUqcHJvdGVjdGVkRzYkL0YxLCZGMUZBRkBGMkYkRkEvRkA7LCRJKWluZmluaXR5R0ZERjJGS0YyPkYkLUY1NiQqJi1GJzYkLUYqNiMtSShVbmlmb3JtR0YlNiQhIiVGPkZARkFGQkZBRkhGMj5GJC1GNTYkKiYtRic2JC1GKjYjLUksRXhwb25lbnRpYWxHRiU2IyNGP0YwLCRGQEYyRkFGQkZBRkhGMj5GJC1GNTYkKiYtRic2JC1GKjYjLUkmR2FtbWFHRiU2JCMiIiYiIilGP0ZARkFGQkZBRkhGQS1JJXBsb3RHRiU2JEYkL0YxOyEjUyIkPyJGQQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LCQqJixOKiYtSSRlcmZHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmKiQiIiMjIiIiRi8jIiIkRi8qJkYvRjBJInhHRitGMSNGMSIjNUYxSSNQaUdGKUYwIiVibSomLUYnNiMsJkYuIyIjNkY3RjRGNkYxRjhGMCElYm0qKEY4RjAtSSRleHBHRig2IywmIyIjcyIiJkYxRjUjISIpRkhGMS1GJzYjLCZGLiMhI0hGN0Y0RjZGMSIoMj05JCooRjhGMC1GQzYjLCYiIilGMUY1RklGMS1GJzYjLCZGLiMhIiZGL0Y0RjZGMSEodmBMIyoqRjVGMUY4RjBGQkYxRktGMSEnJzQ8IyoqRjVGL0Y4RjBGQkYxRktGMSIlc1EqKkY1RjFGOEYwRlJGMUZWRjEiJz9oPSoqRjVGL0Y4RjBGUkYxRlZGMSElc1EqJkY4RjAtRkM2IywmRjUjIiIlRjMjIiRLJCIiKkYxRjEhJSEzIiomRjhGMC1GQzYjLCYjIiQhUUZmb0YxRjVGYm9GMSIlITMiKigtRic2IywmRi4jIiRMIiIjSUY0RjZGMUY4RjBGX29GMUZecCooLUYnNiMsJkYuIyIjSCIiJ0Y0RjZGMUY4RjBGaW9GMUZnbyomRi9GMC1GQzYjLCgqJEY1Ri8jISIiIiNdRjUjISM2IiNEIyEkQCJGZHFGMUYxISdTU18qJkYvRjAtRkM2IywoIyEiKkYvRjFGNSMhIiRGSEZhcUZicUYxIicrbVcqKEYvRjBGNUYxRl5xRjEiJmckPiooRi9GMEY1RjFGXHJGMSEmZyQ+KihGNUYvRjhGMEZSRjFGXW8qJkY4RjBGQkYxRlAqJkY4RjBGUkYxRmVuKihGNUYxRjhGMEZSRjFGW28qKEY1RjFGOEYwRkJGMUZnbiooRjVGL0Y4RjBGQkYxRmluRjFGOCNGY3FGLyNGMSImU0sm LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdicDckJCEkKyUhIiIkIjJFT2gqKio0JEghZiEjQzckJCEyTkxMTGBYN2wkISM6JCIySFI5LHNhSF4iISNBNyQkITFubW1PaHpaTCEjOSQiMnclW3ZMTSRbIz0hI0A3JCQhK1hlO3hKISIpJCIxKVtNMWUnW09rISM/NyQkITJOTExMYk5sKyQhIzokIjImKjQtREFcLTAjISM/NyQkITJMTExMKVtsP0ghIzokIjFGNjkqMzpNYCQhIz43JCQhMk1MTExAdVokRyEjOiQiMW1YNHhyaUtmISM+NyQkITFMTExWTiopW0YhIzkkIjF0KVI/Rl1PcSohIz43JCQhMkxMTEwoRyxqRSEjOiQiMmIleSIpbyw0WTohIz43JCQhKyYpeTEjXCMhIikkIjJONUIlM1pnOE8hIz43JCQhMm5tbW0qRzdAQiEjOiQiMShmKSpRbyQzNHchIz03JCQhMUxMTGAqeT1DIyEjOSQiMl5jOS1ndXIuIiEjPTckJCEqLE5FOyMhIigkIjFpYE9UX0wjUSIhIzw3JCQhMm9tbW0xIlIkMyMhIzokIjJQJio0dFA6OSE9ISM9NyQkITJMTExMN1pUKyMhIzokIjInKmYqM1FTTyZIIyEjPTckJCEqaCU0QT4hIigkIjI6S0dkXDo0KUchIz03JCQhMmxtbW00VSslPSEjOiQiMW14XiM0TihITiEjPDckJCExTExMJGUqKXp2IiEjOSQiMURjJD1pLjxBJSEjPDckJCEqMlBmbiIhIigkIjJ2UyRbK0o3SFwhIz03JCQhMkxMTExDeTVmIiEjOiQiMSQ+LSMqKj0iNGsmISM8NyQkITJtbW1tVD5pXSIhIzokIjFgO0NZOE8iSCchIzw3JCQhKmZnOFUiISIoJCIxQjc9KilIXFFvISM8NyQkITJNTExMdyxsTCIhIzokIjEqKSlcWkAlUldzISM8NyQkITJtbW07VTNVSCIhIzokIjFKYTc6IVxWUSghIzw3JCQhKjM6PkQiISIoJCIxeCdvWzMlNHp1ISM8NyQkITJubW0iNCVvMkIiISM6JCIxZXdPTUYjKjN2ISM8NyQkITJNTEwkUTxpNDchIzokIjFRLCNbeFxvXyghIzw3JCQhLHYxdiUpPSIhIiokIjFBMHNUOXpLdiEjPDckJCEybW1tbVJHdDsiISM6JCIxQTV1VTdzRXYhIzw3JCQhMk1MTExyVEYzIiEjOiQiMCQ9Km9rJXokUSghIzs3JCQhKS5iIikqKiEiKCQiMXU3SlIrPmhxISM8NyQkITFubW0iSHM5NiohIzokIjE4LER4UTVubCEjPDckJCExTExMJEclUlQjKSEjOiQiMmspXHY8L0NYZiEjPTckJCExbm07el9OMXkhIzokIjEzayI0SkoqKmYmISM8NyQkISt2aUpydCEiKiQiMSdINSh5Iz0kUl8hIzw3JCQhMUxMJDNGeGkkcCEjOiQiMVZFK1A+M3BbISM8NyQkITFtbW1tI1E3XSchIzokIjFNUyhwIVFxJVwlISM8NyQkITJOTExMM3RbdCYhIzskIi8vJCoqRydmU1EhIzo3JCQhKXpdb1whIigkIjJFMj0tUmVTQCQhIz03JCQhMW5tbTtGOS1VISM6JCIxbD5MeWFPTUUhIzw3JCQhMk1MTExgeGRWJCEjOyQiMiZbVDlzPyRbNiMhIz03JCQhKiY9LnREISIpJCIyTSMzJUgmRys2OyEjPTckJCEybm1tbTsnRzU8ISM7JCIyc1tuZiZIUyY+IiEjPTckJCExTExMTFtTdiUpISM7JCIxPCt1Oyc0MmspISM9NyQkIidfPzohIigkIjFPJ1IxMHVXMychIz03JCQiKTt5WjwhIigkIjEoM19qIjNOIXkjISM9NyQkIihlLlskISInJCIyNyszWiV6OFc2ISM+NyQkIilzPTpWISIoJCIuJj5cbUgnPSghIzs3JCQiKWssXV4hIigkIjFANGpYPkExVyEjPjckJCIpYyVbKWYhIigkIjFCX2VPMWJQRSEjPjckJCIpW24+byEiKCQiMkVTbSkza19UOiEjPzckJCIxTUxMJGUlKWVMKSEjOiQiMlgib1gzbz1wYSEjQDckJCIxbW1tbVY0XykqISM6JCIxM1l1T1RAJnoiISM/NyQkIjJMTExMWCR6WDghIzokIjBwTGA6VmhMKiEjQDckJCIxTExMOGFEXjshIzkkIjEyRD1DPyozXCYhI0I3JCQiKkghZTE/ISIoJCIyTj1kJlt4Vzs5ISNENyQkIjJOTExMLC42SyMhIzokIjI5K1VMNEpaNSUhI0Y3JCQiKkglPW1FISIoJCIxc1luLkA3aWkhI0c3JCQiKkYkeSUqSCEiKCQiL2FDeTJxYCEqISNHNyQkIjFMTExMPWtQTCEjOSQiMV83JT44U1t1KSEjSzckJCIyT0xMTC0kXF9PISM6JCIyKTNiTkRzRmE1ISNNNyQkIjJsbW1tYy1AKlIhIzokIjF1XDtUTUkoKnkhI083JCQiMW5tbU85J1tNJSEjOSQiMk4xJj5uKj0oNFchI1I3JCQiKjJSPmwlISIoJCIyRD0+W1U+TF8lISNUNyQkIjJsbW1tSyJmJClcISM6JCIyT3pAKkcqeSpmSSEjVjckJCIqYz9pSyYhIigkIjI6QXdiU11IbyIhI1g3JCQiKlU7OW0mISIoJCIyQzg0MVQ3TysiISNaNyQkIipsTmQpZiEiKCQiMUJmYSd5IT4qKm8hI1w3JCQiKidvJGVNJyEiKCQiMWMjeVxUbW9uIyEjXjckJCIxTUxMOFFTcG0hIzkkIjJsJCoqSCdSLFJ6IiEjYTckJCIpMSlbLCghIickIjE5cSQpKW9dT2UpISNjNyQkIjFubW07UiR6SyghIzkkIjJYdjEuJT1NK0YhI3g3JCQiKilRPXF3ISIoJCIxXkFUXUQ4UUEhIyIpNyQkIjFMTExCV0AjKnohIzkkITJtIltlaCo0KGY1ISNgNyQkIio4SClHJCkhIigkIjFZcGknZiwnRykqISMjKjckJCIxTExMTDokemwpISM5JCIybCJbZWgqNChmNSEjXDckJCIqRHJDKyohIigkIjJGUiwlUW8pcDUlISQvIjckJCIxbm1tWVJJTSQqISM5JCIxKEh6bV0hMzJfISQ0IjckJCIxbm1tMTNsdCcqISM5JCIybCJbZWgqNChmNSEjVjckJCIyTUxMLng9NSsiISM5JCIyLm92YV1xL0giISRBIjckJCIrO0klPi4iISIoJCIxOGRNbHdgJT4iISRGIjckJCIyTExMOHAmUW41ISM5JCEyayJbZWgqNChmNSEjUDckJCIybm1tRS8nMyo0IiEjOSQiMUwncEojKj4lPkAhI003JCQiK0hfKUc4IiEiKCQiMnBWUUNjeWltIiEkXCI3JCQiK2pgQmw2ISIoJCIybCJbZWgqNChmNSEjSjckJCIlKzchIiIkIjFyYlkrOyl6YiUhIyEqLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhJCslISIiJCIlKzchIiIlKERFRkFVTFRHLSUrQVhFU0xBQkVMU0c2JC1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRIng2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2IlEhNiItJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiQhPSEiIi0lKUJPVU5EU19ZRzYjJCIjXSEiIi0lLUJPVU5EU19XSURUSEc2IyQiJV1PISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJT9OISIiLSUpQ0hJTERSRU5HNiI= QyQ/KEkiaUc2IiIiISIiIiIjekkldHJ1ZUclKnByb3RlY3RlZEctSSZwcmludEdGKjYjNyRGJC0mSSZldmFsZkdGKjYjIiQrIzYjLUklc3Vic0dGKjYkL0kieEdGJUYkSSRwZGZHRiUhIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkImN3a0daWyNmdSZbZGVQKEc+S0Y2QiQ9QjNOR2N0LztJJ2Uzc2ZDVGx6TiYpMyFSbT88bjkwS2p3P2FYJVFTJGZKZ2cnUkRfSG1zbFJ1UCE9Yj9hNWtOKnByLk54YXFbWjc8XCZRLTJnS3FlQmghJC0j NyQiIiIkImN3WiUpb0UmNE1pSm1PV1tmcCY0MCJHJT4peTVqWmQ1MSMqcClRcXI9Xk5INlhpJDNjQWhyeXg8J1JqOiFleHBFPCozKD0oW3RceGVOQG4+dVlUODZXQHpLI28pR2EjKXpNZzE/c1FsPF5xQWAvXFIhJC0j NyQiIiMkImN3VWEmW2E5XjRAP1lEeDNgJ3kqKlxfMyFwPzEqUXhNR3grYXEibzImemgnZT0wJ1s0KDQlKUcrXSVwbGwiUSZ6KmUuIXksMXNReiVmYiopUmhDbHlHLjQzPl87WyQzKilSPyhbLzVccTZmMEYnbylmImZDISQtIw== NyQiIiQkImN3NCpHZ0gpUUJZRzIhZl8tODUqKnlxRCZIamlFdzpJXW9aaDNXN3k3IykpKT1XZSJmIT5jYDtsXmguI3olcCI9UzYpRyhmeXN4MiE0d3Vibk0wNF1fJ3otemUuPiQpKVwjeUlaLj9qcSQpW0w6NSEqKXk5ISQtIw== NyQiIiUkImN3WW4iKXlrNiFRZjUwKjMzJD5xciYqeldpOkdxRER5W0pNYClILDFiYlBZVyhIIikqSCdIdTU9WHQpeUpMR1s8TFpESzlFLz54OE9tcSJ6LGZCaD1oUUgpWyhvaE5zJCozYVkrKHpiMWhfKWVoKiplKSEkLiM= NyQiIiYkImN3RyZ5ST84aGMtMTBGXktecCs1WiJlOjplQnppTTA3JEckPSlbLz4oUlVOIW9TYFA6V18mNCpcOnUpPWxURUhieWZjTSZRYTwkbycqPmh3KT1wRDJYbz1uMyFcdkkqekJUKiozMzZ2I3lGI0cnZj5bISQuIw== NyQiIickImN3YG1BRyRwLjgreHlRPSRbMDR3ZiNwJjRESVsiSD9wKUhqN0EyLkIzPGBQO2VzPm8wPit0JWZGPWJGI1FRVEl4R1xQeFxdIkdaUSZbZ0MnXF1eY0E1J3kiNEsuYVNgM2R3JypmdTw7MCVvXjdFISQuIw== NyQiIigkImN3TT1deGhHZUdOWyo+NikzQSlbOzsqUTk6aipcJzQjWzcqcCM0QiE0WGpxQkJZKUdvdHJMV2BnOUc1ayJmUDZIXCw3RHVfP0Q4eipmVWY9PzhxYCFwI1JyN2tXZi4jPigpKmZrWTBSIXphJFwoUW84ISQuIw== NyQiIikkImN3W3o5J3oqSEhGXVRSJjRZPFdrMzIhKVJBJj1BelhcaXg+cCE+NHJGeDE5L2lrYkY1QU9bIzMvI2ZvIj0hb1ZPS2RRNTIvbmM9UC14eCtrMFosNlsvJXlIc15nXWJkYSYqPVYsR0g0PFUlcCNwISQvIw== NyQiIiokImN3U1UkPSgqNDtEJnpFKXBRJ0dqMWNDMidHUHdsLjNjeT1oaSdlWD95LE1ucCZIJyo0em5ZYWVHTiQ+eTJrJFtUXShvKCoqZnIvJTROJFJMIj0iXHM4VzkpcCdIXkVgZm9EaigpKWZBXUJVJ3knMzAxZipRJCEkLyM= NyQiIzUkImN3aHg3eVEqR2pIJilcNklbVU49YSJ6ayJHITQkSFRYPnApb19ldlg+YEhfanBfLypbInpqODQsKFtDYiVRU3pQKTQ4JmYnKilcVD1FYyh5Kzk6XnMjeVNEKj1dXnFHISl5Zys1QGtDdic+cm0rN1BnIiEkLyM= NyQiIzYkImN3O140azJKI0hHRlkzIykqW3UrLzIqSERMKFJhV18yJUdpMFJyb1xuTWlxKSk9Y3M8Q29HYztTRyl5KEciSFE7RT8hekM2MncyKD4tNVZpXTMvN3g5R0pDRSYpeTxALyh5cCZIdCpIOk49WkIjUXQhJDAj NyQiIzckImN3MnBtVUN5JCo+b0hHciNcUWRrblA/MCRbPXIjeiFROSxqIVJqMjhMKlw/YW09b1tfUzgjMyVlKVJpQ1AhSHBoSFBkdSdRamhjeU4qXCkqKnlKeCIzMi9LUD9ZKWZtVjhpIVw1b2RdOCcpKkdgbSRbSyEkMCM= NyQiIzgkImN3XkBvbTNId1tGV3VGOWddWiZcRjcudnhZLU5YeDVALXhta1dWOmFIIWUtej5AIj5cLXV0OSUqM2QqR0RAVihSZDc8bVA8dEw6d2ZzMVJfTkYzZCJmekU1ZkAmUmdKLllHUjw7IUgmNDpSIiEkMCM= NyQiIzkkImN3XyNvIilbJFFMPXAzZVIneksoeT5bdU09Jlt6TGQjXEVvIlspemxtcnQlKmZWQ3J6NShmLXM9MGUoKXo4NUtoKD4iZl13NmNJYkdqYTsjKSlwYFMkPVprJFtHaidbOkJcLWlnJHpAeFN5aE14eVNxZCEkMSM= NyQiIzokImN3OmdaKD5iJTRKWWQiM0tab3k2NT4pPTA0OHEwS01PP1w1aCYqNEtIIXB4QWpEeDhyX2I9Wmw6dz5WJj5ua3AnekUzJlEiNDUjeShSPWtvWjs4cTZbciZ6VCQpSD9IJ283dEZpMCMqPUMocEJPPEIhJDEj NyQiIzskImN3eGxJUydSUkpXJD1qLnJ0KVtxZilIWHUsVyZcTVskKVFYeGliJVxLW0gncGZYcygqek4/dCo9LUE8cjdDJmZqZUgjKVJKOSM+czRZRnd5MkI/UVxOLlU7SSZSekhFLHJDKDRDIz5iWXBVVzNrLCohJDIj NyQiIzwkImN3SidbKmUqUSlHOCpbTjlAIT4jcDViRy5cdmE/MVpKRStGNElLRU9nQy4lZmMkb2Q2Kj5ZJik9Z2sqeWtcd25VL0UkZTdjTXdrMUM8Ikc1eihvQS8mZVQlUnkuOktSIm85OWdGXyp5KDNsJSpvIlIrTSEkMiM= NyQiIz0kImN3VDVEKWUyKVthbVxOP18jXCkpej4zYSZHZSJlX1twSCRSa0ReLz0/ITR2b0lGKT5BRnN0WE8peidIP21RYVNveCQpcEIlNFN3Q0FmJDNsUW0uX1ImKSlIWDk2U2Y5cVAtKGYmKmVHbUpYVig0bE9DIiEkMiM= NyQiIz4kImN3cGctb0ZIVDoqKW9yZldoZHUzXzlhJz5tZGIrRWZ0VmQiR2QrPyI0QGpMc0ZYa0BKaCYzL0FhJmZsITNlS1Z0JWUtOmcjeTN1L05lcTptJEcuLjYqNF5DeU04QnFBemAuKSlSInBRKmYiKW84VyEkMyM= NyQiIz8kImN3QiVcRE0kKjRMJVFLXy4keltqbzYnKXpGRW8mcG1fbC1hazw6TXFQVU5EMzsoPjZqSSQqUmphYSEzWnVFeGYoZlJKY0U1XDB6JSlvSl5QKlxyMFhXNmdHeElNJz44JGVKM2gvR0spcC9tcWszXyIhJDMj NyQiI0AkImN3Iz1aIil6KSpwLlYtUCozc0pBJilRak8/Kz81SUg/Z1RCSD8jPWVNLmNrbzlsMFRKKClHWVwob2cmUnlneDVzRTEsO3lDZEpcSzEwK05eSjAxTzxFKj1KS2t2NSlHTDk7N3paIylbPzI8eTs0JiEkNCM= NyQiI0EkImN3UTEpW0JWUkkhR14mM1g9dio9MXVANF1WTiUqPT5hMXJueXZhTCg9ME1MK2FGUjM+P0hgOSlIKj04eSRvbyd6enJAJlxyQy91bCR5XFNaWGMyTFooPV0uKFJVPis3RT5oKXonR2F5MTAhSFNkOyEkNCM= NyQiI0IkImN3IVI5cV0jPTJ5VUVyOGpXemk/TyU9OkBaME4wTS5eXUFWJm88b0QhPXFXVlt4UGVuOnpfa1RXSm1IblolZSwjZklsKlx0NmItd2leSHI0eTdMSicpR2pBKGVFSmQhel5VPyRvJHBuQil6J1xfISQ1Iw== NyQiI0MkImN3U3IoW1pdMHJYKWYuLSlRcGVlZEpxXWU/M0czJClHIXpQZylHJFx6XydIWj4zeCc9WTBcckBJInlIXyQ9IUhfKVJ5WTVreEciXC0raDB2ajVRZWxASCkqKjRbQThYZkJ6SSh6Kj5yeUUlXCRRTj47ISQ1Iw== NyQiI0QkImN3aVdjbjMhXElUJ1FicCplPCFwajxuN3gvKD4zSE4nemdhOiY0RyVvR0p1IzNheVVgLkhHKVEnKilIY2EkKnAqSCdbb1crODUkKnA9T29cKD1caSdSO0wiPkFsdCF6ekpqWDJFdW1KOUF4aDpQJjNwWyEkNiM= NyQiI0UkImN3K1sseVB5UEtcPCgpWyZlYnVGNCJlPjowIXBfNSd5PDMtXyZmdVIsQyNIKlI5azgiXGRzYWtHYmBzYjVjdiQqKiplOkJvSzJsNykzTEJeIkdIRF8pR2xETzF0c24lNF9RWSI0JCkzJ1tFRVohZSVHOSEkNiM= NyQiI0YkImN3cCh5JCpvI2YrRCJSRTkkUUYkR0IoXDRdKVtkUVtOWlRobDtPPChvUCQ9b0cnRy5DL1NlKj13ZjZAYSEqKUhtJ3BWPCM0PEBFeiE+UTNkLW8sIillU1RMLlsiZWJNJz4pcFklKTRLIXkrOykzPlEvLSQ0JSEkNyM= NyQiI0ckImN3UFBOWCYpRzEkPSsnND9MYWxSMF4sLCEqKmZNJW9ZY11rYC5EMlQrKikqZVIoM1xnT04/I2V5eUYmeVI3RShSdCZmJSo+QTIhUikzPmBaNC1mL0RLWVxrbGEkZi9tWXYyeGgkPV4qSDEpNGYlKmVuWTYhJDcj NyQiI0gkImN3YTpXJXBPXkEtTyV5VS4kPUAtJzRGMz8lSGk3UkE0T2srdiVRU3NVY0MjNEg2UTVZXVhHM2Q8XjVtS2w6X04+KEh6d2tYKyMpPi9oMXJCIylRTiZ5dVZxUSJHPlNpVC8oXHU0JnlROC9gVVdKISQ4Iw== NyQiI0kkImN3VkhneVgjPm1TeiZILlk6KioqR3AxX21qIWUiZUtkLjk5VUMiPSp5NWZRJCpvMEVsaFo/JTQqPUsoUiFvRk1LWCZIW0QlekRFMDRuQHkkeWk8eCIpKlI4IUhLWzspPT0hcGxvY0pFJVFmQXEnSF14XCUpISQ5Iw== NyQiI0okImN3KUdcKFJIZSUpZTxjJz0sPGE0OXJHWWY3dStNaTcvP1JVckpTekRIKCopKTQtcF1ReCI0bnQtZVZtbmxDKT14N1YuI0d5WWlNSlZnalZjKCk9I1t5ZUFhQ04hZkMwUjxGRCJmI2ZGIVI/RE14QSMhJDkj NyQiI0skImN3Nj8mPio0cF5sXCFcciF5Uik0O3AvZUEjb0ohPkw2JCpvUC5McGxDd1x3aSg0cGhOPFt1aDNoWlZTXmFASXROLWF6SHNfQG4neWBkZ3BqOGFYayo9InludXY4aThaUSEqcHp2RihbQVdsPHBkISQ6Iw== NyQiI0wkImN3YXR0RTExVV12Qz1vRGVLd3VHKnBIdzUoW0Z2XHN2b148PixjIW8mb25lTzJcNEchKnAqenBjPW5NVF4xKVIlUklLUyJ5UTJKY10jKmZXW3EiUVdCInouZFVYaiwzc1gmem42Qyl6PWd0SnA5ISQ6Iw== NyQiI00kImN3O1QpUT9FV2NzakE4alwvNHdZbDd3S0cqKSpmbzheJClcM1xDUCIpKTMhUVJvcWhJMy08I3B4ZCdHZ1lIc3QoeilRLSRIRm81a2xdTHJ6MipHeiFbIVtAaipHSFpuLCJSNEspSCVlK2RsKipbNmElbyQhJDsj NyQiI04kImN3JWZ1Lj1SLTpvOTo3TWFsTTF5KyQ+XyJcXTZxciNmKilHJ2VLbXA5d2pmPTJFOSJcUDp0JVEhejchNFxqMTJsXUNCOCFvZVAiXHdROnAqMzBoW0MlND9HSnUyNE5AXjdzM3N4SHVGXVt0ejUqISQ8Iw== NyQiI08kImN3dk0sMD4pKilvQFFdKnlwZ1BycFUiUnIkKj5RbiczR3UyKm9dTzZrWkFhJ1xgQkJdJGV5UjxuI3pHK05ENnE9ZzJXKWZZdlYmcFdVdid5MCUpR0RnJjNrTjglb3VadWd0TicqW1BaPzEwImVaKD1BIyEkPCM= NyQiI1AkImN3Y1AtOlM7MkZMJlEqZXQsRSYpUlR0VUQlPSpcX0oneS4kUjw9Q2lZKzUuV2pPXUksdlc9SDQiPSd5bmtkUm5DVVIvIT10anpnPUMyKmZcXHAmMzhDKClbPCpwODhoW0RreCZcKDRoLENxYSNbTiYhJD0j NyQiI1EkImN3I3o6JUc3XyFIYVhjPkJlXGMlKjRcJmVNZF9uV3FzIz4iKjMnPispW0VgdHgjZnJcJSlSVzxoRFw9cjlhWyNwSkhHcSNvbSkpPmNNcjdnPlYzST4scHB3LV11ISpRNzlGR0MhPlhNISkzbCJbNUZ3NyEkPSM= NyQiI1IkImN3PWQ+ZVxccStUbyN5RyszeGRrJSo9WnZINXQvPj5dY3UnXFJLPWtza3h0Q15Tayc9IjM2YFlqeXpVSjxmdmlgPkR1YSpcJVF3JltNXzFdWjBud0FqTiVITWFyQHg9SUM/WzZpY3ZUNzZJISQ+Iw== NyQiI1MkImN3TSdRT2MpcGRLbyhlN1tKKHpRcSVlZUAjNEBedXMnKSlRPEQuZFhxL1Q+LWAkcEQsPUl6JXlqKFsiR0FmLnMjM2RNKmVlWEQqW3JtJlw9W1EhZnZlX0o9QWlRLkBkYmBEYkNbKFxUNnc+RlonUXEhJD8j NyQiI1QkImN3eGJtVjo/KCo9OyJldyV5KCllL3Qnb3NMeCplc29ETTlcJHopKnk3UT8yXz4kZlMkSEo5aGohKm9Gc2JzUWw2TW9cOD9eNWZzT09rPmkoUmRlW0hCdG8uQShlZnYjR0xRU285OWRqdEQ6YFpKOyEkPyM= NyQiI1UkImN3YVM1TCI9dmIyLmR0IVt2MD9fSTNUXHUkKVJyOCg+WHYiXG9eJCp5MUIpcGcsakwhPS5dTkk7JEgzYCdIcHIoXFVaTyk9RS8jPXZDLl83aEMnUWxWJD13JlszYVNWWU1KWzlSMzgnNGUiWz5jX1AhJEAj NyQiI1YkImN3eSlRQlhhalEvY2NULV8oKkhwUzFVJik+U2A0LlMqbyc0PGYsaDxuVFFuRzgmZVxDN3UlNHpSSFVvM2I0MihbdHZOOEViYC1rSmBDdiU0SVFSLDc2KXBkMik9LjwzLHYnUlAuTlJRRFkhNGQpISRBIw== NyQiI1ckImN3cURcbGJlc0hJKzZdUzF4TnpoJD1KIWVGanooZTNxNFRaSjdqemdtazIqPUtnI28kUSRIQ0QqKlJyKSlRRWo0eUpRNWs2SiFRO1pwcj0/KCl5ZCJlT2w8NlohSGF6UltBTTZ3aCM+JSlbMzNeJT4hJEEj NyQiI1gkImN3OiYpeSFlcHJWL19dKkg9dGs/KVxYX209NUJham9tZzEiZW5FKmYxKyNSSFgxPyxXMnllcFRwKEgjbykzcyU+amd6b2N1Ul8qKTMqPkgtSVdzTSVmYFEweFFoVkstKilccXBTZkR6V1pjQGApUSUhJEIj NyQiI1kkImN3LFZDMXVxY3lsK0shWzZoJio0UyllMkdJdjBMTCZIOVVYUV4qPSdwcS15bkNAZ0VQeDAvSz4kZiVlXygqKVxfOSRIYjwjZiFbMm5SSzhaKHkhekhHanp1J0d5SjRib05ZeSl6ZXYseVlqX3QlWykqISRDIw== NyQiI1okImN3PHo6O1hUaF8jeiVRUCY9T2J5KSpHQyRwVFcjXD0hKXBceGZrLlBMQk02I3AhPjZqOj9hXTtBcjNmZm5UIipmKW8sMVkuPD5xTEFSYjhPcCI0dDw1LFgmKlw2dChHOVQoSCQqPSlmUWtMNXB0SSo+IyEkQyM= NyQiI1skImN3bnlsaVpJLCtWL2giXCtwJjRddV9tdWcsX3ErJVwieiFwLFQ2UEUkPkI9dXdMS04hej80TWJHJypRYUo6cUx3PkcoPSUpSCk+Q1QoPU1FPyZcQnEuV00lKkhoIj1vejdTdHchXHktWlIoPVBFKilbISREIw== NyQiI1wkImN3bXNpRXE7eF93VSFSNEooUlBFMV0vT2BaIlxiNSpRUDFRXU9oM1NCUTEqUU8+KG82ZGNlLE5KcjIicHcqXDRJZFxEZFgqKT5tPFsleXNFSmxYJVFCT0ApZU5sRGIlM2lsK2o4SiZINT1BQzMiISREIw== NyQiI10kImN3TiMpKj5AI3opXCEqemAmcHhRVzMiUWI/Zk47UiN6Onh4KzlhJFxJI2VJWnNYOyVmdipHPUNXOlJlL2UpeUgkM2YqPkZqIj0hNGNVKj0iKio9QyRwdDtmNGIhR1VDK0czcWs6bnFEbig+cmdrdXc8KFEjISRFIw== NyQiI14kImN3NCRlK0VcJHlFKyl5L0MuKVs0OjUicHQrJT0wSFlwO3UoeScpNFxWISo0JGU4anZhViZRNSk0RkBgT0hIJXp4R3A7N3dcKSlwdkBrVWIhb0RDeCEzUzhBT1AqZlQqcDwneXMkWzNVKTRMYlRXQTBZXyEkRiM= NyQiI18kImN3O0pIciw8TVRcJlJXSzFqUVQoMyhRKCozYkhSQ2xnRTtiLSMpKSk+LixwSip6aG9xc0giUSVwMCEzYzpEQHEwLyxvRSkqPSw/TSllSjUjNDwjM0w5KltUcyI+Ml5Fal5ZenUxKj1FdnE1Z1YnM1w2ISRGIw== NyQiI2AkImN3Pk1HKkhUZTt4azRtb0FAXl9xOnpeblBnJnk7dCR6eCYpUV9sInpxNVlMaHMmRzxrKHklKnlfZnZTWSlmL1pQLSQzVk1IeltJUENpKnBANDIxSiU+XSIpUSlSUywnSClvKUdSWicpeTswcjlRRTREISRHIw== NyQiI2EkImN3XG9YPCtORmNvOUk+YXN4NiZbUS8rL0ZLaFc3I2YqeTBAZyNwIWZQR3hrKkddTzwhUSpSej1fcWcpKm9VKy45YTIlNE4hM3FHeC8/LSdRUl1aZ1h5LCl6aClmI2ZCI1xMLilHNmgiKikpejIlR1JZJiEkSCM= NyQiI2IkImN3KlxWVCJSMSpmMCYqPnloXEkqcC1AL1NBRi5XeCRIWkYnKnl5LXcqUUA7Kls4bEo7RGwkPkB4JlJHTyI0IW9WRjotT0cuN2QucUNlcVtEXHdnTk9VWyt4dCh6YFBUQVxHJ3piPWdQeCJHKD5tPSIhJEgj NyQiI2MkImN3JG8sZCtfYVdsT1drcFJqQ3QrY21UMCkzU0oqZVw5Mnc4LnBtKClmbiopZXdnQSV6dUdoMV0+ZT5jM2NDcVFxQERxUkFAZEs6OVptNjgyPi42SF8ncF4kMyllJyk9WmdHZCRHMUVrZSVSMWQjISRJIw== NyQiI2QkImN3I0d0REtJRSYqSDV6LW5NL0NRQzdHNy90YSxQYkc7KlsoengiZTEoKSpwcWFQYyNbMSNvdT4hR1IsMkpNcXAmKT1dI3pUQm5PLks6WmB2YyU9bC1eJykpR0RvKFtJKls8SGJ5dHQtL14nZj4qKSpmYiYhJEoj NyQiI2UkImN3diIqNHhQaW1OS1MmMzNzImZ3Lix6MXFwVE02KmZoMSYzbSozWTJYaFhZJEhIVl5BSi5hdy8wNjMnRyYzRldIXSYpNFF3OWNgPUEkWzZBQi0kPidHZkEmcGIqcEMtKj5JXiVwKSlRMlRnIkgxQSk+IiEkSiM= NyQiI2YkImN3cDUiZVo9PTBZK1E1YSczKydIJikqeWo9QiQzYkY0XUw2JnpeL0h1VlwoUSRRd0RbYypIUGp5dzJKWE0zJykpPWAoKkh5Ij5wMGVKbXZIVHkxRSs3MiMqKVtua2JNZzYwOy8kUVd2OD0lWydmRCl5RCEkSyM= NyQiI2ckImN3Oj1PMUZ3ZCZwIXpzWiJlazF6XmV3Y3EpPSQpKTMhZiNITSFmQjY4N1RcOzwueTJUVltKNVwlcCJbZHolUSFSKEdnZ2NmIWUmSFBlOnR3ZCFRQyF6WzZyZ0omUjBvVWckemdpbHN3JmZYZjooKltSYiEkTCM= NyQiI2gkImN3TSVbXltpaGxLJHlcI3lnIyo9azxEKSkqM0daZFUvNjRlT2srYmxGaXQ0enF6dGgnM1NqailSKTNPLCVwZ3FrcG95KHpeT2g5KEhLIUcjXD1qNFpYcyY0TjZAd3N1ai43RFJLSjg0dFQoeXYoPSIhJEwj NyQiI2kkImN3WCsvbyJSN28nXDozLiNReikqPUo6I3BjYlJBVzNINzslKSp5Lyc+PyQqXGBqVU9EM25JJnBaQG12bFBTPzlfWXp3IWZuXiVIYzp6UiNlTzUpPmdPIlFoUiFROSkqM3khKm9WKSoqRzIoKTNgMDgkekJhIyEkTSM= NyQiI2okImN3Rk1FKW9wN0ZUd3VwPFIzdSMpejNWNmReWmg/dys7OnpcOSl6J3lQJXAxWiRcJzQ4NDxGNGg0MnBOZ3JyKj5KPm9JYkg9Zi0hPlU6OlxVUydIMERcbCFRJiozbydRczwhR0hWJyoqUlFFQCg0TGEhJE4j NyQiI2skImN3bzlPVlROKClRPj5pTi4rdHRVJDNsPDN4MDtxKil5PyQ0aSRSSjRJJHA7Z1xAQ3dWKjReSnZrbj9dPyxkdW9SZS9ZXnRQLScpSG9UdWRZLEkkPWwicCU0Z3BBcDg0KEdEa0YsPyZIKiopUXYjZjYhJE4j NyQiI2wkImN3YENCTyJvej9gJW83RTMqUmlNIVIqPldkImZYUyJ6Onh1IW9cKlE/JzRaNkEkZWdodiIzaDMkKlFgKilcI0gyPiRIZVZrOS8pbzIrcyEqKVJOJGUjSCdIV2ROTi9FZ1kjUlwtdnRWXEdndUBaJEh0KnBDISRPIw== NyQiI20kImN3Mio0dnglPS1GXk1gSC82VVZWW3Jqbj9za0tiUyRvdSZbOykqekpXI0hoeFEveTc0RUY4JSkqUXFlcVEnUj82UWU4K3hxYFRabWwqKWZrYGErISlmJVwiUmNPZk5NJXpaLVooZm9eXmchUWVHYl8hJFAj NyQiI24kImN3KmY0L3FVKnooNGdXWDtnLVIyKCpIZElPdGkhKUc8K1tMRy1jW3IjRy4hM3o6czgvIio9Kz8iKmZbb2xSKj04IzRMbjl1KSllWEYzXks0OyZHUilIWEYpW2dHbjBkTkNhYCJwUjVWTyczPSslem02IiEkUCM= NyQiI28kImN3UilIIipRZXQ/ZnpWXElbRiwsP3klMzwkPTZiKT4uaSJmPihcQDI+UXl2cWNRUXo0LHRWKy5vNyU0LDEhNFJdMU1dNEoiUkAoKipRPm9sUSQpeiozVCg0UFpAc10neXB1RU4yTlVZOEc9LUQpcEIhJFEj NyQiI3AkImN3I2U5Jik9Kyt6TldlbHQiWylHUixxIyllOCEzXENtdk5ZSik9VyVSajRKJjMvd3kmR3g8UlhRMHV3QEEraGFrM2RIUyIpUWxWIW9QQygqZnRsNGJSPj9eIlskcD8sXVZYeitPNUJuPSIzcWVEQl0hJFIj NyQiI3EkImN3Tm5cKUc3IyopejphKClHZC4oNF5Kd2pZL2FfanFuWiopM090emxpZzA/XUIqKUghKnlYYF5jcCVlcVs5NClwJilRS0lvJzM7MkV1JylRYUNbXUdgTyo0cUhOaTgkZnM6LzNJIikzTkNvcE16UGJqNSEkUiM= NyQiI3IkImN3ZS1XJm95IVEnM1ZBcVpiV151XWlBJFFONUY8NXV1RjUqKSkqUkZjXSg0IVEmZkdAUjM6JXotal0pbydHMz0mKj0kXFFxN0RxYSs8X0Z5KTRlSCpcWTAhKlJzOCNwUk9SQXonUig0JTRoVGgieTJQXEEhJFMj NyQiI3MkImN3X2B3dl5ZbjpLOSFlJlFIZyFwaGNpK2lUMENmVEIyYSFlYyVcdjU/WE1GUGREVCdwN2ZpKGY9XnZZejcsXzhHNkUuXVlbJnlBQjx1J1F5QVh1JFJiISlHPyl5ciopKTNrendiO1l5SUF2UF9aISRUIw== NyQiI3QkImN3Vicpb2k4eS56ZSQqKkhmcipmJnk7WzsrU0dOMyg9cnklKnlHbFsnZWZvPiozVUJZayM9NDpaRihwJD5cbDhRJ3kjekBZSVtdaCcqb280TTpGNFYjcEIhZUY1dipSTFgkUlRLODZGd3R5JDNsUjEuNSEkVCM= NyQiI3UkImN3OmFhTSdSIT4/PjpIKkh5JTNvL0VjUE1rIlEkXChlNydwSCcqXCkqRy0peUs6TihwXWYvVzVbTUtAbVRgdD5aOCgqZWplK1s5aC4nUnF4X3VfVlclKXpnNkVpKHlHZklPIXBVUjslZTFxRV11NTpAISRVIw== NyQiI3YkImN3NyxpdmQtQFopUTtfdXN0YicpeTliUkFJIlxRRCczL2EjZk9jYD1zTEBxa1VUaj4zJSo0OilwdzFAcXl0IXoqUm8/Kio0IXooXChSTixOLEwxZSFHOXBnPzBBOUlPKlIzZkJzbkpSKXpqKT4lZlglISRWIw== NyQiI3ckImN3OCJIRToiPmZSMFx3UEkwXzAubC8tej9ITipceiplIno/JEdxVkgnPUwtKmVWeC5rbjtmIkcoSFdCXHMjMygzOjgjKj1jQUk2SV0xdkUqZmJ1QCdvTlN3XEd6KG9iLXdvIlIqUTFJQUpEWDAjeiQqISRXIw== NyQiI3gkImN3eEgnUmFHUkxtMiEqcEJIZmQnUU49I1FmNS0meXojcHFCJTNhdGFoWHc1TzEjcGpMSVQhb1peOWdXdmcjRzt6M1ddTlQielEnKjM8cUs0Z1QzJXBnQ2Y1Qj0rNGUoZiUpUTwpZjF5cFw/QFlEKD4hJFcj NyQiI3kkImN3NXElXFtPKUc2VnYmeWxOK1xEMzMxenpVKXkyJipIOj9aOihmInBBITMxLiFRa2VZKGY2KHkjSDtoWmxCbEI2KjRDZzI/RUtATicqb1MqPmJqXiMqM1h2LDoqenNVPXdVPFcxcjJqZS4nM0tAXjklISRYIw== NyQiI3okImN3LT8pb2tvNiYpKj5pMTUoXCpmMCEqSE94a3MlKT0nek9dKjNFelZsRmksSjFtdidHJ2UnM0ZqZ0pSOVw0JnloNTBKSVQkKWZdPWZDPSFwJCpvNDopcF0pKT1lJjQzJSp6Tjk3Lid5VEgmeWFeR1VPO1FxKSEkWSM= Qyg+SSRwZGZHNiItSSRQREZHRiU2JC1JL1JhbmRvbVZhcmlhYmxlR0YlNiMtSSdOb3JtYWxHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2JCIkKyMiIiVJInhHRiUhIiI+RiQtSSRpbnRHRi42JComLUYnNiQtRio2Iy1JKFVuaWZvcm1HRiU2JCEiIyIiI0kidUdGJSIiIi1JJXN1YnNHRi82JC9GNCwmRjRGRUZERjVGJEZFL0ZEOywkSSlpbmZpbml0eUdGL0Y1Rk5GRT5GJC1GODYkKiYtRic2JC1GKjYjLUksRXhwb25lbnRpYWxHRiU2IyNGRUZDRkRGRUZGRkVGS0ZF LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYtSSRlcmZHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmKiQiIiMjIiIiRiwjISMqKiIiJSomRixGLUkieEdGKEYuI0YuIiIpRjQtRiQ2IywmRisjISQsIkYxRjJGNCMhIiJGNQ== LCQqJiwuKiYtSSRlcmZHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmKiQiIiMjIiIiRi8jISMqKiIiJSomRi9GMEkieEdGK0YxI0YxIiIpRjEtSSRleHBHRig2IywkRjZGL0YxISIiKiYtRjo2IyIkRyVGMS1GJzYjLCZGLiMhJDoiRjRGNUY3RjFGMSomLUYnNiMsJkYuIyEkLCJGNEY1RjdGMUY5RjFGMSomLUY6NiMiJE8lRjEtRic2IywmRi4jISQ8IkY0RjVGN0YxRj1GP0YxRk5GPUYxLUY6NiMsJEY2ISIjRjEjRj1GOA== QyQtSSZldmFsZkclKnByb3RlY3RlZEc2Iy1JJXN1YnNHRiU2JC9JInhHNiIiJCsjSSRwZGZHRiwiIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCJfcWgkcEZnUkFGXHQvdm1tPWlRISp5WThdJFJiOm1wO1xLeTwnNGhBTyg0ak4uJ3o0LnRSQTZXKiEkLCI= JSFH openturns-1.9/validation/src/RungeKutta.mw000066400000000000000000000626601307543307100210140ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElaGVscEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRKW9kZXNvbHZlRidGL0YyL0YzUSdub3JtYWxGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Rzb2x2ZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYjLUZgbzYmLUYjNi8tRiw2JVElZGlmZkYnRi9GMi1GYG82JC1GIzYmLUYsNiVRInlGJ0YvRjItRmBvNiQtRiM2Iy1GLDYlUSJ0RidGL0YyRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0ZmcEY5LUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRmZwLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZmcUZnbkZfcEZicEZpcEZfcC1GYG82JC1GIzYjLUkjbW5HRiQ2JFEiMEYnRjlGOUZfcS1GXXI2JFEiMUYnRjlGOS8lJW9wZW5HUSJ8ZnJGJy8lJmNsb3NlR1EifGhyRidGOS1GNjYtUSI7RidGOUY7RlxxRkBGQkZERkZGSEZqbkZNRk8tRiM2JUZnbkZcby1GYG82JC1GIzYjLUZgbzYmLUYjNjBGaG9GW3BGX3EtSSVtc3VwR0YkNiVGZnAtRiM2Iy1GXXI2JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R0Zfci1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmVxRmdxRmduRl9wRmJwRmlwRl9wRmhxRl9xRmJxRmByRjlGY3JGZnJGOS1GLDYjUSFGJy1GUDYmRlJGVUZYL0ZlblElYXV0b0YnRmN0 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ly1JInlHNiI2I0kidEdGJSwoISIiIiIiRidGKi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjLCRGJ0YpIiIj Ly1JInlHNiI2I0kidEdGJSwqISIjIiIiRidGKSokRiciIiMhIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiVGJkYq JSFH openturns-1.9/validation/src/SensibiliteValidBeta.mws000066400000000000000000000424671307543307100231370ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "restart:\ng:=S+x1^2 -x2:\nT1:=(x1-mu1)/sigma1:\nT2:=(x2-mu2)/sigma2:\ng_tilde:=subs(x1=sol ve(T1=u1,x1), x2=solve(T2=u2,x2),g);\ndgtilde_u1:=diff(g_tilde,u1);\nd gtilde_u2:=diff(g_tilde,u2);\neq_u1:=u1=lambda*dgtilde_u1;\neq_u2:=u2= lambda*dgtilde_u2;\neq_lambda:=g_tilde=0;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(g_tildeG,*%\"SG\"\"\"*$),&%$mu1GF'*&%#u1GF'%'sigma1G F'F'\"\"#F'F'%$mu2G!\"\"*&%#u2GF'%'sigma2GF'F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma 1GF(F(F(F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u2G,$%'si gma2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u1G/%#u1G,$**\"\"# \"\"\"%'lambdaGF*,&%$mu1GF**&F&F*%'sigma1GF*F*F*F/F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u2G/%#u2G,$*&%'lambdaG\"\"\"%'sigma2GF*!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*eq_lambdaG/,*%\"SG\"\"\"*$),&%$ mu1GF(*&%#u1GF(%'sigma1GF(F(\"\"#F(F(%$mu2G!\"\"*&%#u2GF(%'sigma2GF(F2 \"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "sol:=allvalues(sol ve(\{eq_u1,eq_u2,eq_lambda\},\{u1,u2,lambda\})):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 487 "valnum:=mu1=5,sigma1=3.3,mu2=2.1,sigma2=3,S= 6:\nnsol:=1:\nwith(plots):\ngtildeNum:=subs(valnum,g_tilde):\np1:=impl icitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]):\np2:=plot([[0,0],s ubs(sol[nsol],valnum,[u1,u2])],color=blue):\ndisplay(\{p1,p2\},scaling =constrained);\nexpre:=subs(sol[nsol],[u1,u2,lambda]):\nd_mu1:=evalf(s ubs(valnum,diff(expre,mu1))):\nd_mu2:=evalf(subs(valnum,diff(expre,mu2 ))):\nd_sigma1:=evalf(subs(valnum,diff(expre,sigma1))):\nd_sigma2:=eva lf(subs(valnum,diff(expre,sigma2))):" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURVESG6^v7$7$$!3w)**********\\Z#!#<$\"3 hDLL$3_Vk%F*7$$!3cBx>!Q&o#[#F*$\"31,++++++ZF*7$F-7$$!3&z1Y(3+U%[#F*$\" 3CF9m6+c7ZF*7$7$$!3'4$\\A/h\\'\\#F*$\"3s+++++++[F*F37$7$$!3_I\\A/h\\' \\#F*F<7$$!3yr)**=)yM,DF*$\"3+K)*>408N[F*7$7$$!3\"z8_#GoI5DF*$\"3O++++ +++\\F*FB7$FH7$$!3ivO0bdF=DF*$\"3)eBQn+,x&\\F*7$7$$!3([MzAby&)HnY#F*$\"33x)fP9t*)e%F*7 $7$$!3%R*4$*ylPoCF*$\"3U,++++++YF*Fdq7$FjqF'7$7$$!3S)**********\\K#F*$ \"3:DLL$3_2o$F*7$$!3JAOA_)G\"GBF*$\"3s.++++++PF*7$Ffr7$$!33g3#fl%**GBF *$\"3(f[%*y?E`q$F*7$7$$!3tFfE*Q%QWBF*$\"3G/++++++QF*F\\s7$7$$!3HFfE*Q% QWBF*$\"3#Q++++++!QF*7$$!3\"=,A8O[(\\BF*$\"3b@g4:y*H$QF*7$7$$!3rK#3j#* R1O#F*$\"3O/++++++RF*F]t7$7$Fdt$\"3#R++++++!RF*7$$!3*R;Bn1-0P#F*$\"39d vHA%p1'RF*7$7$$!3pP0Nja*oP#F*$\"3c.++++++SF*F\\u7$Fbu7$$!3G:V7sdD\"R#F *$\"3%=4*\\H5M)3%F*7$7$$!3oUGR+5:$R#F*$\"3?.++++++TF*Fhu7$F^vFen7$7$$! 3B)***********\\AF*$\"3;BLLL$3-E$F*7$$!3D76Pnk4dAF*$\"3Q.++++++LF*7$Fj v7$$!3&o2^:N5$fAF*$\"3?3\"o?!QT7LF*7$7$$!3Wmu\\@0$\\F#F*$\"3Y.++++++MF *F`w7$7$$!3*oY(\\@0$\\F#F*$\"3#R++++++S$F*7$$!3Li*oO43FG#F*$\"3EA'e:z5 OW$F*7$7$$!3k?QivXw#H#F*$\"3c.++++++NF*Fax7$Fgx7$$!3!y%oyNe51BF*$\"3KO \"\\5y2[d$F*7$7$$!3Fv,vH')f5BF*$\"3k.++++++OF*F]y7$7$$!3$[<](H')f5BF*$ \"3?.++++++OF*Far7$7$$!3/)**********\\<#F*$\"3\"fKLL3-0)GF*7$$!3!e-W,D ^)y@F*$\"3c-++++++HF*7$7$Fez$\"3-.++++++HF*7$$!3Y/-8T\"G-=#F*$\"3&zFS[ &3(p!HF*7$7$$!3%**)3:hLg)>#F*$\"3c.++++++IF*F][l7$Fc[l7$$!3@7@,')>/2AF *$\"3Lbh,[EsUIF*7$7$$!33ax:saN=AF*$\"3?.++++++JF*Fi[l7$F_\\l7$$!3'*>S* 3$e&QB#F*$\"3\"=.#>TWZyJF*7$7$$!3A=Y;$e2\"QAF*$\"3G.++++++KF*Fe\\l7$F[ ]lFev7$7$$!3)y************4#F*$\"3`CLLLLjTDF*7$$!3hX;y!)z\"H6#F*$\"3w- ++++++EF*7$Fg]l7$$!3M'*f_jfK=@F*$\"3QnY.=YVCEF*7$7$$!3OU9dV/0N@F*$\"3% G++++++q#F*F]^l7$Fc^l7$$!3BnsGfRs\\@F*$\"3@GIQ7')HmFF*7$7$$!36R7O1H=d@ F*$\"3#H++++++!GF*Fi^l7$F__lF_z7$7$$!3p(**********\\-#F*$\"37ELL$3-OC# F*7$$!33gPA=E>R?F*$\"3[-++++++BF*7$F[`l7$$!3!**y#4w%fj/#F*$\"3ieqX,$z% GBF*7$7$$!3Dth\\kxNk?F*$\"3c-++++++CF*Fa`l7$7$Fh`l$\"37-++++++CF*7$$!3 iM4d'GKU3#F*$\"3;&e%4#Qw*yCF*7$7$$!3V'eo2\"H_*3#F*$\"3o-++++++DF*F`al7 $FfalFb]l7$7$$!3t(***********\\>F*$\"3zFLLL$3k)>F*7$$!3qmzn^M'R&>F*$\" 3C-++++++?F*7$Fbbl7$$!3oMqhJ[[c>F*$\"3[^g:Ukk3?F*7$7$$!3m]u\"pMCJ)>F*$ \"3K-++++++@F*Fhbl7$F^cl7$$!3&)*e?Al'>/?F*$\"3k\"zgH?iA<#F*7$7$$!3QMp: U_G7?F*$\"3S-++++++AF*Fdcl7$FjclFf_l7$7$$!3y(**********\\(=F*$\"3lELL$ 3_+x\"F*7$$!3B8j(*f9Q&)=F*$\"3[-++++++=F*7$7$Fgdl$\"3G-++++++=F*7$$!3Y C)*[$f.V*=F*$\"3f/JlC\"Qd#=F*7$7$$!3i%pS*3l/?>F*$\"3O-++++++>F*F_el7$F eelF]bl7$7$$!3%y************z\"F*$\"3OHLLLL`%f\"F*7$$!3!erqF$fL-=F*$\" 33-++++++;F*7$Fafl7$$!3'H%fG:\"Ha!=F*$\"3?i7Q?)Qsg\"F*7$7$$!3e-QG5k1X= F*$\"3'>++++++q\"F*Fgfl7$7$F^gl$\"3;-++++++++++++S \"F*7$FhhlFggl7$7$$!39)***********\\;F*Ffhl7$$!3uW$HZw]df\"F*$\"3!zz0j onwK\"F*7$7$$!3'z**********\\d\"F*$\"3CKLL$3-IJ\"F*Fbil7$Fhil7$$!3=A4$ =f62]\"F*$\"3z+z5*y[4I\"F*7$7$$!3+)************\\\"F*$\"3HLLLLL$3I\"F* F^jl7$Fdjl7$$!3*\\!>zJl>U9F*$\"3nxe04(GHK\"F*7$7$$!3/)**********\\U\"F *$\"3UMLL$3-&H8F*Fjjl7$7$Fa[m$\"3kMLL$3-&H8F*7$$!3w4Pt\"Q2QR\"F*$\"3a< ;JU)4%e8F*7$7$$!34)***********\\8F*$\"3%eLLLL3!*R\"F*Fi[m7$F_\\m7$$!3< 6I77kk\\8F*$\"3g_t\\\\&G&*R\"F*7$7$$!3%QX\"F*7$7$$!3-oj@clN\"G \"F*F_hlFb]m7$Fh]m7$$!3GAhQrXLy7F*$\"3&3]\"=&4YW]\"F*7$7$$!39)******** **\\F\"F*$\"3/OLL$3_$4:F*F\\^m7$Fb^m7$$!3Bgc99N$zC\"F*$\"3G=U>_8\"Rc\" F*7$7$$!3j&)p+z,.I7F*FdflFh^m7$F^_m7$$!37&oEvfu!=7F*$\"34=*oLY*4C;F*7$ 7$$!3;)************>\"F*$\"3'yLLLLL0m\"F*Fb_m7$Fh_m7$$!3jJjdkO')*=\"F* $\"3/!y,h)[['o\"F*7$7$$!3Gw,sQ[e%=\"F*FdglF^`m7$7$Fe`m$\"3S-++++++F*Febm7$7$F\\cmFhel7$$!3ene&ymw<4\" F*$\"35Gy!QA-d&>F*7$7$$!3)*3u\\C*3v2\"F*$\"3y,++++++?F*Fbcm7$7$FicmFeb l7$$!3E$3u&=WCp5F*$\"3d[awC#fc-#F*7$7$$!3F)***********\\5F*$\"3UQLLL$3 a3#F*F_dm7$Fedm7$$!3F!>0cYrq/\"F*$\"3k\"ftuG&4'4#F*7$7$$!3\\>v[h9+Y5F* FaclF[em7$Faem7$$!3]Q!=ab,q-\"F*$\"3/cSA2aLp@F*7$7$$!3X=D[q&)f=5F*F]dl Feem7$7$F\\fm$\"3'>++++++?#F*7$$!3u')3BX;$p+\"F*$\"3X?X(p_vDC#F*7$7$$! 3Lw^x%zc>\"**!#=F^`lFbfm7$7$$!3Av^x%zc>\"**F[gmF^`l7$$!3cZtV]tho)*F[gm $\"3T%)\\sYc\"eJ#F*7$7$$!37$)**********\\(*F[gm$\"3PRLL$3-\"fBF*F`gm7$ Ffgm7$$!36%H\"=BX+w'*F[gm$\"3OxTUOR8!R#F*7$7$$!34yHB())yCl*F[gmFj`lF\\ hm7$7$Fchm$\"3-.++++++CF*7$$!3SOR,rs2&\\*F[gm$\"3'H'=!GI5gY#F*7$7$$!3% *Htr7)GST*F[gmFialFihm7$F_im7$$!3nyl%)=+:9$*F[gm$\"3(*[&z\"pm)=a#F*7$7 $$!3!=o,#Q(yb<*F[gmFj]lFcim7$Fiim7$$!3&4AzmwAK8*F[gm$\"3bMsbNIw(=z)F[g m$\"3UD@D'f\\Ax#F*7$7$$!3(p%*[N>0Lt)F[gmFb_lFc[n7$7$$!3'e%*[N>0Lt)F[gm $\"3[-++++++GF*7$$!3y$=;yGqri)F[gm$\"3cH)3pw(H)F[gm$\"3(yBAE#*oj+$F*7$ 7$$!3-%)**********\\#)F[gm$\"3JTLL$3-!HIF*Fh]n7$F^^n7$$!3m^U/-*)oU\")F [gm$\"3q0fg`=p&3$F*7$7$$!3&RjDlC/c6)F[gmFb\\lFd^n7$Fj^n7$$!3cIy\\v?a\" *zF[gm$\"3'er*RV*Qb;$F*7$7$$!3q8)e%)*)3j#zF[gmF^]lF^_n7$Fd_n7$$!3g59&* [_RSyF[gm$\"3#p_$>LgQXKF*7$7$$!3B\"*>R]N,PxF[gm$\"3#H++++++I$F*Fh_n7$7 $F_`nF]w7$$!3^*)\\SA%[#*o(F[gm$\"3`Pt)H7L_K$F*7$7$$!35s^K-#=xa(F[gmFiw Fe`n7$F[an7$$!3Vo&eef,\"QvF[gm$\"39[6y7-30MF*7$7$$!3Y%)***********\\(F [gm$\"3&=MLLL3_U$F*F_an7$7$Ffan$\"3STLLL$3_U$F*7$$!3;w&zX(3b&R(F[gm$\" 3(*[R%*\\M2'[$F*7$7$$!3M))o^l=lrtF[gmFjxF^bn7$Fdbn7$$!3!phLyW(*eD(F[gm $\"3#y[WI*HXnNF*7$7$$!3*[;Y>LW+?(F[gm$\"33/++++++OF*Fhbn7$7$F_cnFfy7$$ !3uew3@SC;rF[gm$\"37F]9OD$)[OF*7$7$$!3WTaP)zO%GqF[gmFirFecn7$F[dn7$$!3 [*pTVf!fwpF[gm$\"3`lbCz?@IPF*7$7$$!3*zr/[EHo&oF[gmFesF_dn7$Fedn7$$!3LT dfnr$p$oF[gm$\"3#[5YBi\"f6QF*7$7$$!3!\\)**********\\nF[gm$\"3!=MLL3_A' QF*Fidn7$F_en7$$!3#f4'4u!45q'F[gm$\"3)=:Yl(yY$*QF*7$7$$!3?C\"z&ztv!p'F [gmFjtFeen7$F[fn7$$!3XSiVCYArlF[gm$\"3Er\"eKGjh(RF*7$7$$!39f!\\Wi9Q`'F [gmFeuF_fn7$Fefn7$$!3(\\QwZq**oe)eSF*7$7$$!33%**=$p=(o P'F[gmFavFifn7$7$$!3(H**=$p=(oP'F[gmFav7$$!3]Hl6Ddl6jF[gm$\"344Ao'4a:9 %F*7$7$$!3\"z#*)=9\"H*>iF[gmF]oFfgn7$F\\hn7$$!3#HncaFr=='F[gm$\"3+GUR. &\\UA%F*7$7$$!3&G')e!fj)H1'F[gmFioF`hn7$Ffhn7$$!3L;ozDo3_gF[gm$\"3#pC1 ,\"\\%pI%F*7$7$$!3M&)************fF[gm$\"3%HMLLLL,M%F*Fjhn7$F`in7$$!3f \"3<$y1VFfF[gm$\"3y\"GU/4C.R%F*7$7$$!3=a*3(o0W8fF[gmFepFfin7$F\\jn7$$! 3Me9(\\V7i!eF[gm$\"3[)>'*zlhTZ%F*7$7$$!3'zH%RXN&)odF[gmFaqF`jn7$7$$!3& oH%RXN&)odF[gmFaq7$$!34Nei\">%*\\o&F[gm$\"3G9,bD#**zb%F*7$7$$!3tT'z?_m Ui&F[gmF]rF][o7$7$$!3iS'z?_mUi&F[gmF]r7$$!3#=@!G[fxjbF[gm$\"3'=./JzO=k %F*7$7$$!3Q%)\\w)\\z'zaF[gmF0Fj[o7$F`\\o7$$!3d)eM\\qdDW&F[gm$\"3mZzlgV nDZF*7$7$$!30F.XvC4N`F[gmF^ 4[F*7$7$$!3y&)**********\\_F[gm$\"3^VLL$3_)e[F*F^]o7$Fd]o7$$!3,xeHW&4K ?&F[gm$\"39'ysDFhP*[F*7$7$$!3s=wezu%[>&F[gmFKFj]o7$7$Fa^o$\"3Y******** ******[F*7$$!3hP%=gs'\\*3&F[gm$\"3OF\"pMc*fy\\F*7$7$$!3&Hohvp731&F[gmF WFg^o-%'COLOURG6&%$RGBG\"\"\"FYFY-F$6$7$7$$FYFYFi_o7$$!33ze2xbpw8F*$\" 3VH'R+F(ep8F*-Fa_o6&Fc_oFi_oFi_o$\"*++++\"!\")-%(SCALINGG6#%,CONSTRAIN EDG-%+AXESLABELSG6%%#u1G%#u2G-%%FONTG6#%(DEFAULTG-%%VIEWG6$F`aoF`ao" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 45.000000 0 0 "Curve 1" "Cur ve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 779 "DthetaU_ref:=<|||>;\nDthetaLa mbda_ref:=<|||>;\nG_:=;\nG_num:=evalf(subs(sol[nsol],valnum,G_));\ndgti lde_mu1:=diff(g_tilde,mu1); \ndgtilde_mu2:=diff(g_tilde,mu2);\ndgtilde _sigma1:=diff(g_tilde,sigma1);\ndgtilde_sigma2:=diff(g_tilde,sigma2); \nK_:=;\nK_num: =evalf(subs(sol[nsol],valnum,K_));\nE_:=< | >;\nE_num:=evalf(subs(sol[nsol],va lnum,E_));\nF_:=< | | | >;\nF_num:=evalf(subs(sol[nsol],valnum ,F_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DthetaU_refG-%'RTABLEG6% \"*WVOQ\"-%'MATRIXG6#7$7&$!+%y(zwF!#5$\"+xc!QZ$F0$\"+D1..G!#6$\"+A,*zn (F57&$\")(4#[D!\"*$!)z@;qF;$!+pad^IF0$!*%p]$z$F;%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1DthetaLambda_refG-%'RTABLEG6%\"*c06O\"-%'MAT RIXG6#7#7&$!)D.%\\)!#5$\")$R(QB!\"*$\"+A=><5F0$\"*#fE'y#F3%'MatrixG" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G_G-%'RTABLEG6%\"*#z5`8-%'MATRIXG6 #7$7#,$*(\"\"#\"\"\",&%$mu1GF1*&%#u1GF1%'sigma1GF1F1F1F6F1F17#,$%'sigm a2G!\"\"&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&G_ numG-%'RTABLEG6%\"*[5#e8-%'MATRIXG6#7$7#$\"+K.d:I!\"*7#$!\"$\"\"!&%'Ve ctorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu1G,&* &\"\"#\"\"\"%$mu1GF(F(*(F'F(%#u1GF(%'sigma1GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%/dgtilde_sigma1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma1GF(F(F(F, F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma2G,$%#u2G!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K_G-%'RTABLEG6%\"*kT?O\"-%'MATR IXG6#7&7#,&*&\"\"#\"\"\"%$mu1GF1F1*(F0F1%#u1GF1%'sigma1GF1F17#,$*(F0F1 ,&F2F1*&F4F1F5F1F1F1F4F1F17#!\"\"7#,$%#u2GF<&%'VectorG6#%'columnG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&K_numG-%'RTABLEG6%\"*))H*e8-%'MATRI XG6#7&7#$\"*\">4Q\"*!\"*7#$!+sq.e7F07#$!\"\"\"\"!7#$!+ssep8F0&%'Vector G6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#E_G-%'RTABLEG6%\"*% )GtQ\"-%'MATRIXG6#7$7$,$*&\"\"#\"\"\")%'sigma1GF0F1F1\"\"!7$F4F4%'Matr ixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&E_numG-%'RTABLEG6%\"*;OhO\"- %'MATRIXG6#7$7$$\"%y@!\"#$\"\"!F27$F1F1%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#F_G-%'RTABLEG6%\"*o\"pt8-%'MATRIXG6#7$7&,$*&\"\"#\" \"\"%'sigma1GF1F1,&*(\"\"%F1%#u1GF1F2F1F1*&F0F1%$mu1GF1F1\"\"!F97&F9F9 F9!\"\"%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&F_numG-%'RTABLE G6%\"*+NpQ\"-%'MATRIXG6#7$7&$\"#m!\"\"$!+>;Qs\")!\"*$\"\"!F5F47&F4F4F4 $F0F5%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "M:=Matri x(3,3):\nwith(LinearAlgebra):\nM[1..2,1..2]:=-DiagonalMatrix([1,1])+la mbda*E_:\nM[1..2,3]:=Transpose(G_):\nM[3,1..2]:=G_:\nB:=Matrix(3,4):\n B[1..2,1..4]:=-lambda*F_:\nB[3,1..4]:=-K_:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 2 "M;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\" *OYDQ\"-%'MATRIXG6#7%7%,&\"\"\"!\"\"*(\"\"#F-%'lambdaGF-)%'sigma1GF0F- F-\"\"!,$*(F0F-,&%$mu1GF-*&%#u1GF-F3F-F-F-F3F-F-7%F4F.,$%'sigma2GF.7%F 5F " 0 "" {MPLTEXT 1 0 2 "B;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*s%o%R\"-%'MATRIXG6#7%7& ,$*(\"\"#\"\"\"%'lambdaGF/%'sigma1GF/!\"\",$*&F0F/,&*(\"\"%F/%#u1GF/F1 F/F/*&F.F/%$mu1GF/F/F/F2\"\"!F;7&F;F;F;F07&,&*&F.F/F:F/F2*(F.F/F8F/F1F /F2,$*(F.F/,&F:F/*&F8F/F1F/F/F/F8F/F2F/%#u2G%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "evalf(subs(sol[nsol],valnum,map(fac tor,MatrixInverse(M).B)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABL EG6%\"*C))GQ\"-%'MATRIXG6#7%7&$!+wxzwF!#5$\"+]c!QZ$F.$\"+>1..G!#6$\"+4 ,*zn(F37&$\"+`'4#[DF3$!+1z@;qF3$!+aad^IF.$!+Fq]$z$F.7&$!+y@.%\\)!#7$\" +-$R(QBF3$\"+==><5F.$\"+IfE'y#F.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 30 "DthetaU_ref;\nDthetaLambda_ref;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#-%'RTABLEG6%\"*WVOQ\"-%'MATRIXG6#7$7&$!+%y(zwF!#5$\"+ xc!QZ$F.$\"+D1..G!#6$\"+A,*zn(F37&$\")(4#[D!\"*$!)z@;qF9$!+pad^IF.$!*% p]$z$F9%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*c06 O\"-%'MATRIXG6#7#7&$!)D.%\\)!#5$\")$R(QB!\"*$\"+A=><5F.$\"*#fE'y#F1%'M atrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "evalf(subs(sol[ns ol],valnum,Transpose().DthetaU_ref/sqrt(u1^2+u2^2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*3;lP\"-%'VECTORG6#7&$\"+$y'G[ @!#5$!+2p`dHF-$!+fR\"4N#F-$!+Z=y>KF-&%'VectorG6#%$rowG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "evalf(subs(sol[nsol],valnum,1/sqrt( G_[1]^2+G_[2]^2)*K_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6% \"*?(p&R\"-%'MATRIXG6#7&7#$\"+#y'G[@!#57#$!+9p`dHF.7#$!+eR\"4N#F.7#$!+ H=y>KF.&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "beta:=sqrt(x(s,t)^2+y(s,t)^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%%betaG*$,&*$)-%\"xG6$%\"sG%\"tG\"\"#\"\"\"F/*$)-%\"yGF+F.F/F/#F/F. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "diff(beta,s);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&#\"\"\"\"\"#F&*&,&*$)-%\"xG6$%\"sG%\"tGF 'F&F&*$)-%\"yGF.F'F&F&#!\"\"F',&*(F'F&F,F&-%%diffG6$F,F/F&F&*(F'F&F3F& -F:6$F3F/F&F&F&F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} }{MARK "8 0 0" 3 }{VIEWOPTS 1 1 0 3 2 1804 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 138364344 136110556 135310792 135821048 136204164 135892988 138732884 136613616 137369168 138693500 138254636 139468472 138288824 137651608 139569720 }{RTABLE M7R0 I6RTABLE_SAVE/138364344X,%)anythingG6"6"[gl!"%!!!#)"#"%$!+%y(zwF!#5$")(4#[D!"*$ "+xc!QZ$F)$!)z@;qF,$"+D1..G!#6$!+pad^IF)$"+A,*zn(F3$!*%p]$z$F,F& } {RTABLE M7R0 I6RTABLE_SAVE/136110556X,%)anythingG6"6"[gl!"%!!!#%"""%$!)D.%\)!#5$")$R(QB!"*$" +A=><5F)$"*#fE'y#F,F& } {RTABLE M7R0 I6RTABLE_SAVE/135310792X*%)anythingG6"6"[gl!#%!!!"#"#,$*&,&%$mu1G"""*&%#u1GF+%' sigma1GF+F+F+F.F+""#,$%'sigma2G!""F& } {RTABLE M7R0 I6RTABLE_SAVE/135821048X*%)anythingG6"6"[gl!#%!!!"#"#$"+K.d:I!"*$!"$""!F& } {RTABLE M7R0 I6RTABLE_SAVE/136204164X*%)anythingG6"6"[gl!#%!!!"%"%,&%$mu1G""#*&%#u1G"""%'sig ma1GF,F),$*&,&F(F,F*F,F,F+F,F)!"",$%#u2GF1F& } {RTABLE M7R0 I6RTABLE_SAVE/135892988X*%)anythingG6"6"[gl!#%!!!"%"%$"*">4Q"*!"*$!+sq.e7F)$!"" ""!$!+ssep8F)F& } {RTABLE M7R0 I6RTABLE_SAVE/138732884X,%)anythingG6"6"[gl!"%!!!#%"#"#,$*$%'sigma1G""#F*""!F+F +F& } {RTABLE M7R0 I6RTABLE_SAVE/136613616X,%)anythingG6"6"[gl!"%!!!#%"#"#$"%y@!"#$""!F+F*F*F& } {RTABLE M7R0 I6RTABLE_SAVE/137369168X,%)anythingG6"6"[gl!"%!!!#)"#"%,$%'sigma1G""#""!,&*&%#u 1G"""F(F.""%%$mu1GF)F*F*F*F*!""F& } {RTABLE M7R0 I6RTABLE_SAVE/138693500X,%)anythingG6"6"[gl!"%!!!#)"#"%$"#m!""$""!F+$!+>;Qs")!" *F*F*F*F*$F)F+F& } {RTABLE M7R0 I6RTABLE_SAVE/138254636X,%)anythingG6"6"[gl!"%!!!#*"$"$,&!"""""*&%'lambdaGF)%'s igma1G""#F-""!,$*&,&%$mu1GF)*&%#u1GF)F,F)F)F)F,F)F-F.F(,$%'sigma2GF(F/F5F.F& } {RTABLE M7R0 I6RTABLE_SAVE/139468472X,%)anythingG6"6"[gl!"%!!!#-"$"%,$*&%'lambdaG"""%'sigma1 GF*!"#""!,&%$mu1GF,*&%#u1GF*F+F*F,,$*&F)F*,&F0""%F/""#F*!""F-,$*&,&F/F*F0F*F*F1 F*F,F-F-F*F-F)%#u2GF& } {RTABLE M7R0 I6RTABLE_SAVE/138288824X,%)anythingG6"6"[gl!"%!!!#-"$"%$!+wxzwF!#5$"+`'4#[D!#6$ !+y@.%\)!#7$"+]c!QZ$F)$!+1z@;qF,$"+-$R(QBF,$"+>1..GF,$!+aad^IF)$"+==><5F)$"+4,* zn(F,$!+Fq]$z$F)$"+IfE'y#F)F& } {RTABLE M7R0 I6RTABLE_SAVE/137651608X*%)anythingG6"6"[gl!$%!!!"%"%$"+$y'G[@!#5$!+2p`dHF)$!+f R"4N#F)$!+Z=y>KF)F& } {RTABLE M7R0 I6RTABLE_SAVE/139569720X*%)anythingG6"6"[gl!#%!!!"%"%$"+#y'G[@!#5$!+9p`dHF)$!+e R"4N#F)$!+H=y>KF)F& } openturns-1.9/validation/src/SensibiliteValidBeta.txt000066400000000000000000000147161307543307100231440ustar00rootroot00000000000000> restart: > g:=S+x1^2-x2: > T1:=(x1-mu1)/sigma1: > T2:=(x2-mu2)/sigma2: > g_tilde:=subs(x1=solve(T1=u1,x1), x2=solve(T2=u2,x2),g); > dgtilde_u1:=diff(g_tilde,u1); > dgtilde_u2:=diff(g_tilde,u2); > eq_u1:=u1=lambda*dgtilde_u1; > eq_u2:=u2=lambda*dgtilde_u2; > eq_lambda:=g_tilde=0; > 2 g_tilde := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 dgtilde_u1 := 2 (mu1 + u1 sigma1) sigma1 dgtilde_u2 := -sigma2 eq_u1 := u1 = 2 lambda (mu1 + u1 sigma1) sigma1 eq_u2 := u2 = -lambda sigma2 2 eq_lambda := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 = 0 > sol:=allvalues(solve({eq_u1,eq_u2,eq_lambda},{u1,u2,lambda})): > valnum:=mu1=5,sigma1=3.3,mu2=2.1,sigma2=3,S=6: > nsol:=1: > with(plots): > gtildeNum:=subs(valnum,g_tilde): > p1:=implicitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]): > p2:=plot([[0,0],subs(sol[nsol],valnum,[u1,u2])],color=blue): > display({p1,p2},scaling=constrained); > expre:=subs(sol[nsol],[u1,u2,lambda]): > d_mu1:=evalf(subs(valnum,diff(expre,mu1))): > d_mu2:=evalf(subs(valnum,diff(expre,mu2))): > d_sigma1:=evalf(subs(valnum,diff(expre,sigma1))): > d_sigma2:=evalf(subs(valnum,diff(expre,sigma2))): > DthetaU_ref:=<||| ..2]>>; > DthetaLambda_ref:=<|||>; > G_:=; > G_num:=evalf(subs(sol[nsol],valnum,G_)); > dgtilde_mu1:=diff(g_tilde,mu1); > dgtilde_mu2:=diff(g_tilde,mu2); > dgtilde_sigma1:=diff(g_tilde,sigma1); > dgtilde_sigma2:=diff(g_tilde,sigma2); > K_:=; > K_num:=evalf(subs(sol[nsol],valnum,K_)); > E_:=< | > >; > E_num:=evalf(subs(sol[nsol],valnum,E_)); > F_:=< | > | > | > >; > F_num:=evalf(subs(sol[nsol],valnum,F_)); DthetaU_ref := [-0.2776797784 , 0.3473805677 , 0.02803030625 , 0.07677990122 ] [0.025482097 , -0.070162179 , -0.3051575469 , -0.379350694] DthetaLambda_ref := [-0.0084940325 , 0.023387393 , 0.1017191822 , 0.278626592] [2 (mu1 + u1 sigma1) sigma1] G_ := [ ] [ -sigma2 ] [3.015570332] G_num := [ ] [ -3. ] dgtilde_mu1 := 2 mu1 + 2 u1 sigma1 dgtilde_mu2 := -1 dgtilde_sigma1 := 2 (mu1 + u1 sigma1) u1 dgtilde_sigma2 := -u2 [ 2 mu1 + 2 u1 sigma1 ] [ ] [2 (mu1 + u1 sigma1) u1] K_ := [ ] [ -1 ] [ ] [ -u2 ] [0.913809191 ] [ ] [-1.258037072] K_num := [ ] [ -1. ] [ ] [-1.369587272] [ 2 ] E_ := [2 sigma1 0] [ ] [ 0 0] [21.78 0.] E_num := [ ] [ 0. 0.] [2 sigma1 4 u1 sigma1 + 2 mu1 0 0] F_ := [ ] [ 0 0 0 -1] [6.6 -8.172381619 0. 0. ] F_num := [ ] [0. 0. 0. -1.] > M:=Matrix(3,3): > with(LinearAlgebra): > M[1..2,1..2]:=-DiagonalMatrix([1,1])+lambda*E_: > M[1..2,3]:=Transpose(G_): > M[3,1..2]:=G_: > B:=Matrix(3,4): > B[1..2,1..4]:=-lambda*F_: > B[3,1..4]:=-K_: > M; [ 2 ] [-1 + 2 lambda sigma1 , 0 , 2 (mu1 + u1 sigma1) sigma1] [ ] [0 , -1 , -sigma2] [ ] [2 (mu1 + u1 sigma1) sigma1 , -sigma2 , 0] > B; [-2 lambda sigma1 , -lambda (4 u1 sigma1 + 2 mu1) , 0 , 0] [0 , 0 , 0 , lambda] [-2 mu1 - 2 u1 sigma1 , -2 (mu1 + u1 sigma1) u1 , 1 , u2] > evalf(subs(sol[nsol],valnum,map(factor,MatrixInverse(M).B))); [-0.2776797776 , 0.3473805650 , 0.02803030619 , 0.07677990109 ] [0.02548209653 , -0.07016217906 , -0.3051575454 , -0.3793507027] [-0.008494032178 , 0.02338739302 , 0.1017191818 , 0.2786265930] > DthetaU_ref; > DthetaLambda_ref; [-0.2776797784 , 0.3473805677 , 0.02803030625 , 0.07677990122 ] [0.025482097 , -0.070162179 , -0.3051575469 , -0.379350694] [-0.0084940325 , 0.023387393 , 0.1017191822 , 0.278626592] > evalf(subs(sol[nsol],valnum,Transpose().DthetaU_ref/sqrt(u1^2+u > 2^2))); [0.2148286783, -0.2957536907, -0.2350913959, -0.3219781847] > evalf(subs(sol[nsol],valnum,1/sqrt(G_[1]^2+G_[2]^2)*K_)); [0.2148286782 ] [ ] [-0.2957536914] [ ] [-0.2350913958] [ ] [-0.3219781829] > beta:=sqrt(x(s,t)^2+y(s,t)^2); 2 2 1/2 beta := (x(s, t) + y(s, t) ) > diff(beta,s); /d \ /d \ 2 x(s, t) |-- x(s, t)| + 2 y(s, t) |-- y(s, t)| \ds / \ds / 1/2 ----------------------------------------------- 2 2 1/2 (x(s, t) + y(s, t) ) > openturns-1.9/validation/src/Sensibilite_ref1.mws000066400000000000000000000403341307543307100222670ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "restart:\ng:=S+x1^2 -x2:\nT1:=(x1-mu1)/sigma1:\nT2:=(x2-mu2)/sigma2:\ng_tilde:=subs(x1=sol ve(T1=u1,x1), x2=solve(T2=u2,x2),g);\ndgtilde_u1:=diff(g_tilde,u1);\nd gtilde_u2:=diff(g_tilde,u2);\neq_u1:=u1=lambda*dgtilde_u1;\neq_u2:=u2= lambda*dgtilde_u2;\neq_lambda:=g_tilde=0;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(g_tildeG,*%\"SG\"\"\"*$),&%$mu1GF'*&%#u1GF'%'sigma1G F'F'\"\"#F'F'%$mu2G!\"\"*&%#u2GF'%'sigma2GF'F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma 1GF(F(F(F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u2G,$%'si gma2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u1G/%#u1G,$**\"\"# \"\"\"%'lambdaGF*,&%$mu1GF**&F&F*%'sigma1GF*F*F*F/F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u2G/%#u2G,$*&%'lambdaG\"\"\"%'sigma2GF*!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*eq_lambdaG/,*%\"SG\"\"\"*$),&%$ mu1GF(*&%#u1GF(%'sigma1GF(F(\"\"#F(F(%$mu2G!\"\"*&%#u2GF(%'sigma2GF(F2 \"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "sol:=allvalues(sol ve(\{eq_u1,eq_u2,eq_lambda\},\{u1,u2,lambda\})):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 487 "valnum:=mu1=5,sigma1=3.3,mu2=2.1,sigma2=3,S= 6:\nnsol:=1:\nwith(plots):\ngtildeNum:=subs(valnum,g_tilde):\np1:=impl icitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]):\np2:=plot([[0,0],s ubs(sol[nsol],valnum,[u1,u2])],color=blue):\ndisplay(\{p1,p2\},scaling =constrained);\nexpre:=subs(sol[nsol],[u1,u2,lambda]):\nd_mu1:=evalf(s ubs(valnum,diff(expre,mu1))):\nd_mu2:=evalf(subs(valnum,diff(expre,mu2 ))):\nd_sigma1:=evalf(subs(valnum,diff(expre,sigma1))):\nd_sigma2:=eva lf(subs(valnum,diff(expre,sigma2))):" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURVESG6$7$7$$\"\"!F)F(7$$!33ze2xbpw8!#< $\"3VH'R+F(ep8F--%'COLOURG6&%$RGBGF(F($\"*++++\"!\")-F$6^v7$7$$!3w)*** *******\\Z#F-$\"3hDLL$3_Vk%F-7$$!3cBx>!Q&o#[#F-$\"31,++++++ZF-7$F?7$$! 3&z1Y(3+U%[#F-$\"3CF9m6+c7ZF-7$7$$!3'4$\\A/h\\'\\#F-$\"3s+++++++[F-FE7 $7$$!3_I\\A/h\\'\\#F-FN7$$!3yr)**=)yM,DF-$\"3+K)*>408N[F-7$7$$!3\"z8_# GoI5DF-$\"3O+++++++\\F-FT7$FZ7$$!3ivO0bdF=DF-$\"3)eBQn+,x&\\F-7$7$$!3( [MzAby&)HnY#F-$\"33x )fP9t*)e%F-7$7$$!3%R*4$*ylPoCF-$\"3U,++++++YF-Fer7$F[sF:7$7$$!3S)***** *****\\K#F-$\"3:DLL$3_2o$F-7$$!3JAOA_)G\"GBF-$\"3s.++++++PF-7$Fgs7$$!3 3g3#fl%**GBF-$\"3(f[%*y?E`q$F-7$7$$!3tFfE*Q%QWBF-$\"3G/++++++QF-F]t7$7 $$!3HFfE*Q%QWBF-$\"3#Q++++++!QF-7$$!3\"=,A8O[(\\BF-$\"3b@g4:y*H$QF-7$7 $$!3rK#3j#*R1O#F-$\"3O/++++++RF-F^u7$7$Feu$\"3#R++++++!RF-7$$!3*R;Bn1- 0P#F-$\"39dvHA%p1'RF-7$7$$!3pP0Nja*oP#F-$\"3c.++++++SF-F]v7$Fcv7$$!3G: V7sdD\"R#F-$\"3%=4*\\H5M)3%F-7$7$$!3oUGR+5:$R#F-$\"3?.++++++TF-Fiv7$F_ wFfo7$7$$!3B)***********\\AF-$\"3;BLLL$3-E$F-7$$!3D76Pnk4dAF-$\"3Q.+++ +++LF-7$F[x7$$!3&o2^:N5$fAF-$\"3?3\"o?!QT7LF-7$7$$!3Wmu\\@0$\\F#F-$\"3 Y.++++++MF-Fax7$7$$!3*oY(\\@0$\\F#F-$\"3#R++++++S$F-7$$!3Li*oO43FG#F-$ \"3EA'e:z5OW$F-7$7$$!3k?QivXw#H#F-$\"3c.++++++NF-Fby7$Fhy7$$!3!y%oyNe5 1BF-$\"3KO\"\\5y2[d$F-7$7$$!3Fv,vH')f5BF-$\"3k.++++++OF-F^z7$7$$!3$[<] (H')f5BF-$\"3?.++++++OF-Fbs7$7$$!3/)**********\\<#F-$\"3\"fKLL3-0)GF-7 $$!3!e-W,D^)y@F-$\"3c-++++++HF-7$7$Ff[l$\"3-.++++++HF-7$$!3Y/-8T\"G-=# F-$\"3&zFS[&3(p!HF-7$7$$!3%**)3:hLg)>#F-$\"3c.++++++IF-F^\\l7$Fd\\l7$$ !3@7@,')>/2AF-$\"3Lbh,[EsUIF-7$7$$!33ax:saN=AF-$\"3?.++++++JF-Fj\\l7$F `]l7$$!3'*>S*3$e&QB#F-$\"3\"=.#>TWZyJF-7$7$$!3A=Y;$e2\"QAF-$\"3G.+++++ +KF-Ff]l7$F\\^lFfw7$7$$!3)y************4#F-$\"3`CLLLLjTDF-7$$!3hX;y!)z \"H6#F-$\"3w-++++++EF-7$Fh^l7$$!3M'*f_jfK=@F-$\"3QnY.=YVCEF-7$7$$!3OU9 dV/0N@F-$\"3%G++++++q#F-F^_l7$Fd_l7$$!3BnsGfRs\\@F-$\"3@GIQ7')HmFF-7$7 $$!36R7O1H=d@F-$\"3#H++++++!GF-Fj_l7$F``lF`[l7$7$$!3p(**********\\-#F- $\"37ELL$3-OC#F-7$$!33gPA=E>R?F-$\"3[-++++++BF-7$F\\al7$$!3!**y#4w%fj/ #F-$\"3ieqX,$z%GBF-7$7$$!3Dth\\kxNk?F-$\"3c-++++++CF-Fbal7$7$Fial$\"37 -++++++CF-7$$!3iM4d'GKU3#F-$\"3;&e%4#Qw*yCF-7$7$$!3V'eo2\"H_*3#F-$\"3o -++++++DF-Fabl7$FgblFc^l7$7$$!3t(***********\\>F-$\"3zFLLL$3k)>F-7$$!3 qmzn^M'R&>F-$\"3C-++++++?F-7$Fccl7$$!3oMqhJ[[c>F-$\"3[^g:Ukk3?F-7$7$$! 3m]u\"pMCJ)>F-$\"3K-++++++@F-Ficl7$F_dl7$$!3&)*e?Al'>/?F-$\"3k\"zgH?iA <#F-7$7$$!3QMp:U_G7?F-$\"3S-++++++AF-Fedl7$F[elFg`l7$7$$!3y(********** \\(=F-$\"3lELL$3_+x\"F-7$$!3B8j(*f9Q&)=F-$\"3[-++++++=F-7$7$Fhel$\"3G- ++++++=F-7$$!3YC)*[$f.V*=F-$\"3f/JlC\"Qd#=F-7$7$$!3i%pS*3l/?>F-$\"3O-+ +++++>F-F`fl7$FfflF^cl7$7$$!3%y************z\"F-$\"3OHLLLL`%f\"F-7$$!3 !erqF$fL-=F-$\"33-++++++;F-7$Fbgl7$$!3'H%fG:\"Ha!=F-$\"3?i7Q?)Qsg\"F-7 $7$$!3e-QG5k1X=F-$\"3'>++++++q\"F-Fhgl7$7$F_hl$\"3;-++++++++++++S\"F-7$FiilFhhl7$7$$!39)***********\\;F-Fgil7$$!3uW$HZw]df \"F-$\"3!zz0jonwK\"F-7$7$$!3'z**********\\d\"F-$\"3CKLL$3-IJ\"F-Fcjl7$ Fijl7$$!3=A4$=f62]\"F-$\"3z+z5*y[4I\"F-7$7$$!3+)************\\\"F-$\"3 HLLLLL$3I\"F-F_[m7$Fe[m7$$!3*\\!>zJl>U9F-$\"3nxe04(GHK\"F-7$7$$!3/)*** *******\\U\"F-$\"3UMLL$3-&H8F-F[\\m7$7$Fb\\m$\"3kMLL$3-&H8F-7$$!3w4Pt \"Q2QR\"F-$\"3a<;JU)4%e8F-7$7$$!34)***********\\8F-$\"3%eLLLL3!*R\"F-F j\\m7$F`]m7$$!3<6I77kk\\8F-$\"3g_t\\\\&G&*R\"F-7$7$$!3%QX\"F-7 $7$$!3-oj@clN\"G\"F-F`ilFc^m7$Fi^m7$$!3GAhQrXLy7F-$\"3&3]\"=&4YW]\"F-7 $7$$!39)**********\\F\"F-$\"3/OLL$3_$4:F-F]_m7$Fc_m7$$!3Bgc99N$zC\"F-$ \"3G=U>_8\"Rc\"F-7$7$$!3j&)p+z,.I7F-FeglFi_m7$F_`m7$$!37&oEvfu!=7F-$\" 34=*oLY*4C;F-7$7$$!3;)************>\"F-$\"3'yLLLLL0m\"F-Fc`m7$Fi`m7$$! 3jJjdkO')*=\"F-$\"3/!y,h)[['o\"F-7$7$$!3Gw,sQ[e%=\"F-FehlF_am7$7$Ffam$ \"3S-++++++F-Ffcm7$7$F]dmFifl 7$$!3ene&ymw<4\"F-$\"35Gy!QA-d&>F-7$7$$!3)*3u\\C*3v2\"F-$\"3y,++++++?F -Fcdm7$7$FjdmFfcl7$$!3E$3u&=WCp5F-$\"3d[awC#fc-#F-7$7$$!3F)*********** \\5F-$\"3UQLLL$3a3#F-F`em7$Ffem7$$!3F!>0cYrq/\"F-$\"3k\"ftuG&4'4#F-7$7 $$!3\\>v[h9+Y5F-FbdlF\\fm7$Fbfm7$$!3]Q!=ab,q-\"F-$\"3/cSA2aLp@F-7$7$$! 3X=D[q&)f=5F-F^elFffm7$7$F]gm$\"3'>++++++?#F-7$$!3u')3BX;$p+\"F-$\"3X? X(p_vDC#F-7$7$$!3Lw^x%zc>\"**!#=F_alFcgm7$7$$!3Av^x%zc>\"**F\\hmF_al7$ $!3cZtV]tho)*F\\hm$\"3T%)\\sYc\"eJ#F-7$7$$!37$)**********\\(*F\\hm$\"3 PRLL$3-\"fBF-Fahm7$Fghm7$$!36%H\"=BX+w'*F\\hm$\"3OxTUOR8!R#F-7$7$$!34y HB())yCl*F\\hmF[blF]im7$7$Fdim$\"3-.++++++CF-7$$!3SOR,rs2&\\*F\\hm$\"3 'H'=!GI5gY#F-7$7$$!3%*Htr7)GST*F\\hmFjblFjim7$F`jm7$$!3nyl%)=+:9$*F\\h m$\"3(*[&z\"pm)=a#F-7$7$$!3!=o,#Q(yb<*F\\hmF[_lFdjm7$Fjjm7$$!3&4AzmwAK 8*F\\hm$\"3bMsbNIw(=z)F\\hm$\"3UD@D'f\\Ax#F-7$7$$!3(p%*[N>0Lt)F\\h mFc`lFd\\n7$7$$!3'e%*[N>0Lt)F\\hm$\"3[-++++++GF-7$$!3y$=;yGqri)F\\hm$ \"3cH)3pw(H)F\\hm$\"3(yBAE#*oj+$F-7$7$$!3-%)**********\\#)F\\hm$\"3J TLL$3-!HIF-Fi^n7$F__n7$$!3m^U/-*)oU\")F\\hm$\"3q0fg`=p&3$F-7$7$$!3&RjD lC/c6)F\\hmFc]lFe_n7$F[`n7$$!3cIy\\v?a\"*zF\\hm$\"3'er*RV*Qb;$F-7$7$$! 3q8)e%)*)3j#zF\\hmF_^lF_`n7$Fe`n7$$!3g59&*[_RSyF\\hm$\"3#p_$>LgQXKF-7$ 7$$!3B\"*>R]N,PxF\\hm$\"3#H++++++I$F-Fi`n7$7$F`anF^x7$$!3^*)\\SA%[#*o( F\\hm$\"3`Pt)H7L_K$F-7$7$$!35s^K-#=xa(F\\hmFjxFfan7$F\\bn7$$!3Vo&eef, \"QvF\\hm$\"39[6y7-30MF-7$7$$!3Y%)***********\\(F\\hm$\"3&=MLLL3_U$F-F `bn7$7$Fgbn$\"3STLLL$3_U$F-7$$!3;w&zX(3b&R(F\\hm$\"3(*[R%*\\M2'[$F-7$7 $$!3M))o^l=lrtF\\hmF[zF_cn7$Fecn7$$!3!phLyW(*eD(F\\hm$\"3#y[WI*HXnNF-7 $7$$!3*[;Y>LW+?(F\\hm$\"33/++++++OF-Ficn7$7$F`dnFgz7$$!3uew3@SC;rF\\hm $\"37F]9OD$)[OF-7$7$$!3WTaP)zO%GqF\\hmFjsFfdn7$F\\en7$$!3[*pTVf!fwpF\\ hm$\"3`lbCz?@IPF-7$7$$!3*zr/[EHo&oF\\hmFftF`en7$Ffen7$$!3LTdfnr$p$oF\\ hm$\"3#[5YBi\"f6QF-7$7$$!3!\\)**********\\nF\\hm$\"3!=MLL3_A'QF-Fjen7$ F`fn7$$!3#f4'4u!45q'F\\hm$\"3)=:Yl(yY$*QF-7$7$$!3?C\"z&ztv!p'F\\hmF[vF ffn7$F\\gn7$$!3XSiVCYArlF\\hm$\"3Er\"eKGjh(RF-7$7$$!39f!\\Wi9Q`'F\\hmF fvF`gn7$Ffgn7$$!3(\\QwZq**oe)eSF-7$7$$!33%**=$p=(oP'F \\hmFbwFjgn7$7$$!3(H**=$p=(oP'F\\hmFbw7$$!3]Hl6Ddl6jF\\hm$\"344Ao'4a:9 %F-7$7$$!3\"z#*)=9\"H*>iF\\hmF^pFghn7$F]in7$$!3#HncaFr=='F\\hm$\"3+GUR .&\\UA%F-7$7$$!3&G')e!fj)H1'F\\hmFjpFain7$Fgin7$$!3L;ozDo3_gF\\hm$\"3# pC1,\"\\%pI%F-7$7$$!3M&)************fF\\hm$\"3%HMLLLL,M%F-F[jn7$Fajn7$ $!3f\"3<$y1VFfF\\hm$\"3y\"GU/4C.R%F-7$7$$!3=a*3(o0W8fF\\hmFfqFgjn7$F][ o7$$!3Me9(\\V7i!eF\\hm$\"3[)>'*zlhTZ%F-7$7$$!3'zH%RXN&)odF\\hmFbrFa[o7 $7$$!3&oH%RXN&)odF\\hmFbr7$$!34Nei\">%*\\o&F\\hm$\"3G9,bD#**zb%F-7$7$$ !3tT'z?_mUi&F\\hmF^sF^\\o7$7$$!3iS'z?_mUi&F\\hmF^s7$$!3#=@!G[fxjbF\\hm $\"3'=./JzO=k%F-7$7$$!3Q%)\\w)\\z'zaF\\hmFBF[]o7$Fa]o7$$!3d)eM\\qdDW&F \\hm$\"3mZzlgVnDZF-7$7$$!30F.XvC4N`F\\hmFNFe]o7$F[^o7$$!3Um*)eh%R8K&F \\hm$\"3Nk=@G>^4[F-7$7$$!3y&)**********\\_F\\hm$\"3^VLL$3_)e[F-F_^o7$F e^o7$$!3,xeHW&4K?&F\\hm$\"39'ysDFhP*[F-7$7$$!3s=wezu%[>&F\\hmFgnF[_o7$ 7$Fb_o$\"3Y**************[F-7$$!3hP%=gs'\\*3&F\\hm$\"3OF\"pMc*fy\\F-7$ 7$$!3&Hohvp731&F\\hmFcoFh_o-F16&F3\"\"\"F)F)-%+AXESLABELSG6%Q!6\"Fg`o- %%FONTG6#%(DEFAULTG-%(SCALINGG6#%,CONSTRAINEDG-%%VIEWG6$F\\aoF\\ao" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 779 "DthetaU_ref:=<|||>;\nDthetaLamb da_ref:=<|||>;\nG_:=;\nG_num:=evalf(subs(sol[nsol],valnum,G_));\ndgtild e_mu1:=diff(g_tilde,mu1); \ndgtilde_mu2:=diff(g_tilde,mu2);\ndgtilde_s igma1:=diff(g_tilde,sigma1);\ndgtilde_sigma2:=diff(g_tilde,sigma2);\nK _:=;\nK_num:=ev alf(subs(sol[nsol],valnum,K_));\nE_:=< \+ | >;\nE_num:=evalf(subs(sol[nsol],valnu m,E_));\nF_:=< | | | >;\nF_num:=evalf(subs(sol[nsol],valnum,F_ ));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DthetaU_refG-%'RTABLEG6%\"*g qAQ\"-%'MATRIXG6#7$7&$!+%y(zwF!#5$\"+xc!QZ$F0$\"+D1..G!#6$\"+A,*zn(F57 &$\")(4#[D!\"*$!)z@;qF;$!+pad^IF0$!*%p]$z$F;%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1DthetaLambda_refG-%'RTABLEG6%\"*7CHN\"-%'MATRIX G6#7#7&$!)D.%\\)!#5$\")$R(QB!\"*$\"+A=><5F0$\"*#fE'y#F3%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G_G-%'RTABLEG6%\"*kg,O\"-%'MATRIXG6 #7$7#,$*(\"\"#\"\"\",&%$mu1GF1*&%#u1GF1%'sigma1GF1F1F1F6F1F17#,$%'sigm a2G!\"\"&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&G_ numG-%'RTABLEG6%\"*onoN\"-%'MATRIXG6#7$7#$\"+K.d:I!\"*7#$!\"$\"\"!&%'V ectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu1G,& *&\"\"#\"\"\"%$mu1GF(F(*(F'F(%#u1GF(%'sigma1GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%/dgtilde_sigma1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma1GF(F(F(F, F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma2G,$%#u2G!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K_G-%'RTABLEG6%\"*W3fN\"-%'MATR IXG6#7&7#,&*&\"\"#\"\"\"%$mu1GF1F1*(F0F1%#u1GF1%'sigma1GF1F17#,$*(F0F1 ,&F2F1*&F4F1F5F1F1F1F4F1F17#!\"\"7#,$%#u2GF<&%'VectorG6#%'columnG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&K_numG-%'RTABLEG6%\"*!G.j8-%'MATRIX G6#7&7#$\"*\">4Q\"*!\"*7#$!+sq.e7F07#$!\"\"\"\"!7#$!+ssep8F0&%'VectorG 6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#E_G-%'RTABLEG6%\"*[a +O\"-%'MATRIXG6#7$7$,$*&\"\"#\"\"\")%'sigma1GF0F1F1\"\"!7$F4F4%'Matrix G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&E_numG-%'RTABLEG6%\"*7P;S\"-%' MATRIXG6#7$7$$\"%y@!\"#$\"\"!F27$F1F1%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#F_G-%'RTABLEG6%\"*'z'QO\"-%'MATRIXG6#7$7&,$*&\"\"#\" \"\"%'sigma1GF1F1,&*(\"\"%F1%#u1GF1F2F1F1*&F0F1%$mu1GF1F1\"\"!F97&F9F9 F9!\"\"%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&F_numG-%'RTABLE G6%\"*[9HQ\"-%'MATRIXG6#7$7&$\"#m!\"\"$!+>;Qs\")!\"*$\"\"!F5F47&F4F4F4 $F0F5%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "M:=Matri x(3,3):\nwith(LinearAlgebra):\nM[1..2,1..2]:=-DiagonalMatrix([1,1])+la mbda*E_:\nM[1..2,3]:=Transpose(G_):\nM[3,1..2]:=G_:\nB:=Matrix(3,4):\n B[1..2,1..4]:=-lambda*F_:\nB[3,1..4]:=-K_:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 2 "M;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\" *o03Q\"-%'MATRIXG6#7%7%,&\"\"\"!\"\"*(\"\"#F-%'lambdaGF-)%'sigma1GF0F- F-\"\"!,$*(F0F-,&%$mu1GF-*&%#u1GF-F3F-F-F-F3F-F-7%F4F.,$%'sigma2GF.7%F 5F " 0 "" {MPLTEXT 1 0 2 "B;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*;$*>R\"-%'MATRIXG6#7%7& ,$*(\"\"#\"\"\"%'lambdaGF/%'sigma1GF/!\"\",$*&F0F/,&*(\"\"%F/%#u1GF/F1 F/F/*&F.F/%$mu1GF/F/F/F2\"\"!F;7&F;F;F;F07&,&*&F.F/F:F/F2*(F.F/F8F/F1F /F2,$*(F.F/,&F:F/*&F8F/F1F/F/F/F8F/F2F/%#u2G%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "evalf(subs(sol[nsol],valnum,map(fac tor,MatrixInverse(M).B)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABL EG6%\"*c+RS\"-%'MATRIXG6#7%7&$!+wxzwF!#5$\"+]c!QZ$F.$\"+>1..G!#6$\"+4, *zn(F37&$\"+`'4#[DF3$!+1z@;qF3$!+aad^IF.$!+Fq]$z$F.7&$!+y@.%\\)!#7$\"+ -$R(QBF3$\"+==><5F.$\"+IfE'y#F.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "DthetaU_ref;\nDthetaLambda_ref;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*gqAQ\"-%'MATRIXG6#7$7&$!+%y(zwF!#5$\"+xc !QZ$F.$\"+D1..G!#6$\"+A,*zn(F37&$\")(4#[D!\"*$!)z@;qF9$!+pad^IF.$!*%p] $z$F9%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*7CHN \"-%'MATRIXG6#7#7&$!)D.%\\)!#5$\")$R(QB!\"*$\"+A=><5F.$\"*#fE'y#F1%'Ma trixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "3 0 0 " 0 }{VIEWOPTS 1 1 0 3 2 1804 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 138227060 135292412 136016064 135686768 135590844 136303280 136005448 140163712 136386796 138291448 138080568 139199316 140390056 }{RTABLE M7R0 I6RTABLE_SAVE/138227060X,%)anythingG6"6"[gl!"%!!!#)"#"%$!+%y(zwF!#5$")(4#[D!"*$ "+xc!QZ$F)$!)z@;qF,$"+D1..G!#6$!+pad^IF)$"+A,*zn(F3$!*%p]$z$F,F& } {RTABLE M7R0 I6RTABLE_SAVE/135292412X,%)anythingG6"6"[gl!"%!!!#%"""%$!)D.%\)!#5$")$R(QB!"*$" +A=><5F)$"*#fE'y#F,F& } {RTABLE M7R0 I6RTABLE_SAVE/136016064X*%)anythingG6"6"[gl!#%!!!"#"#,$*&,&%$mu1G"""*&%#u1GF+%' sigma1GF+F+F+F.F+""#,$%'sigma2G!""F& } {RTABLE M7R0 I6RTABLE_SAVE/135686768X*%)anythingG6"6"[gl!#%!!!"#"#$"+K.d:I!"*$!"$""!F& } {RTABLE M7R0 I6RTABLE_SAVE/135590844X*%)anythingG6"6"[gl!#%!!!"%"%,&%$mu1G""#*&%#u1G"""%'sig ma1GF,F),$*&,&F(F,F*F,F,F+F,F)!"",$%#u2GF1F& } {RTABLE M7R0 I6RTABLE_SAVE/136303280X*%)anythingG6"6"[gl!#%!!!"%"%$"*">4Q"*!"*$!+sq.e7F)$!"" ""!$!+ssep8F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136005448X,%)anythingG6"6"[gl!"%!!!#%"#"#,$*$%'sigma1G""#F*""!F+F +F& } {RTABLE M7R0 I6RTABLE_SAVE/140163712X,%)anythingG6"6"[gl!"%!!!#%"#"#$"%y@!"#$""!F+F*F*F& } {RTABLE M7R0 I6RTABLE_SAVE/136386796X,%)anythingG6"6"[gl!"%!!!#)"#"%,$%'sigma1G""#""!,&*&%#u 1G"""F(F.""%%$mu1GF)F*F*F*F*!""F& } {RTABLE M7R0 I6RTABLE_SAVE/138291448X,%)anythingG6"6"[gl!"%!!!#)"#"%$"#m!""$""!F+$!+>;Qs")!" *F*F*F*F*$F)F+F& } {RTABLE M7R0 I6RTABLE_SAVE/138080568X,%)anythingG6"6"[gl!"%!!!#*"$"$,&!"""""*&%'lambdaGF)%'s igma1G""#F-""!,$*&,&%$mu1GF)*&%#u1GF)F,F)F)F)F,F)F-F.F(,$%'sigma2GF(F/F5F.F& } {RTABLE M7R0 I6RTABLE_SAVE/139199316X,%)anythingG6"6"[gl!"%!!!#-"$"%,$*&%'lambdaG"""%'sigma1 GF*!"#""!,&%$mu1GF,*&%#u1GF*F+F*F,,$*&F)F*,&F0""%F/""#F*!""F-,$*&,&F/F*F0F*F*F1 F*F,F-F-F*F-F)%#u2GF& } {RTABLE M7R0 I6RTABLE_SAVE/140390056X,%)anythingG6"6"[gl!"%!!!#-"$"%$!+wxzwF!#5$"+`'4#[D!#6$ !+y@.%\)!#7$"+]c!QZ$F)$!+1z@;qF,$"+-$R(QBF,$"+>1..GF,$!+aad^IF)$"+==><5F)$"+4,* zn(F,$!+Fq]$z$F)$"+IfE'y#F)F& } openturns-1.9/validation/src/Sensibilite_ref1.txt000066400000000000000000000127401307543307100223000ustar00rootroot00000000000000> restart: > g:=S+x1^2-x2: > T1:=(x1-mu1)/sigma1: > T2:=(x2-mu2)/sigma2: > g_tilde:=subs(x1=solve(T1=u1,x1), x2=solve(T2=u2,x2),g); > dgtilde_u1:=diff(g_tilde,u1); > dgtilde_u2:=diff(g_tilde,u2); > eq_u1:=u1=lambda*dgtilde_u1; > eq_u2:=u2=lambda*dgtilde_u2; > eq_lambda:=g_tilde=0; > 2 g_tilde := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 dgtilde_u1 := 2 (mu1 + u1 sigma1) sigma1 dgtilde_u2 := -sigma2 eq_u1 := u1 = 2 lambda (mu1 + u1 sigma1) sigma1 eq_u2 := u2 = -lambda sigma2 2 eq_lambda := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 = 0 > sol:=allvalues(solve({eq_u1,eq_u2,eq_lambda},{u1,u2,lambda})): > valnum:=mu1=5,sigma1=3.3,mu2=2.1,sigma2=3,S=6: > nsol:=1: > with(plots): > gtildeNum:=subs(valnum,g_tilde): > p1:=implicitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]): > p2:=plot([[0,0],subs(sol[nsol],valnum,[u1,u2])],color=blue): > display({p1,p2},scaling=constrained); > expre:=subs(sol[nsol],[u1,u2,lambda]): > d_mu1:=evalf(subs(valnum,diff(expre,mu1))): > d_mu2:=evalf(subs(valnum,diff(expre,mu2))): > d_sigma1:=evalf(subs(valnum,diff(expre,sigma1))): > d_sigma2:=evalf(subs(valnum,diff(expre,sigma2))): > DthetaU_ref:=<||| ..2]>>; > DthetaLambda_ref:=<|||>; > G_:=; > G_num:=evalf(subs(sol[nsol],valnum,G_)); > dgtilde_mu1:=diff(g_tilde,mu1); > dgtilde_mu2:=diff(g_tilde,mu2); > dgtilde_sigma1:=diff(g_tilde,sigma1); > dgtilde_sigma2:=diff(g_tilde,sigma2); > K_:=; > K_num:=evalf(subs(sol[nsol],valnum,K_)); > E_:=< | > >; > E_num:=evalf(subs(sol[nsol],valnum,E_)); > F_:=< | > | > | > >; > F_num:=evalf(subs(sol[nsol],valnum,F_)); DthetaU_ref := [-0.2776797784 , 0.3473805677 , 0.02803030625 , 0.07677990122 ] [0.025482097 , -0.070162179 , -0.3051575469 , -0.379350694] DthetaLambda_ref := [-0.0084940325 , 0.023387393 , 0.1017191822 , 0.278626592] [2 (mu1 + u1 sigma1) sigma1] G_ := [ ] [ -sigma2 ] [3.015570332] G_num := [ ] [ -3. ] dgtilde_mu1 := 2 mu1 + 2 u1 sigma1 dgtilde_mu2 := -1 dgtilde_sigma1 := 2 (mu1 + u1 sigma1) u1 dgtilde_sigma2 := -u2 [ 2 mu1 + 2 u1 sigma1 ] [ ] [2 (mu1 + u1 sigma1) u1] K_ := [ ] [ -1 ] [ ] [ -u2 ] [0.913809191 ] [ ] [-1.258037072] K_num := [ ] [ -1. ] [ ] [-1.369587272] [ 2 ] E_ := [2 sigma1 0] [ ] [ 0 0] [21.78 0.] E_num := [ ] [ 0. 0.] [2 sigma1 4 u1 sigma1 + 2 mu1 0 0] F_ := [ ] [ 0 0 0 -1] [6.6 -8.172381619 0. 0. ] F_num := [ ] [0. 0. 0. -1.] > M:=Matrix(3,3): > with(LinearAlgebra): > M[1..2,1..2]:=-DiagonalMatrix([1,1])+lambda*E_: > M[1..2,3]:=Transpose(G_): > M[3,1..2]:=G_: > B:=Matrix(3,4): > B[1..2,1..4]:=-lambda*F_: > B[3,1..4]:=-K_: > M; [ 2 ] [-1 + 2 lambda sigma1 , 0 , 2 (mu1 + u1 sigma1) sigma1] [ ] [0 , -1 , -sigma2] [ ] [2 (mu1 + u1 sigma1) sigma1 , -sigma2 , 0] > B; [-2 lambda sigma1 , -lambda (4 u1 sigma1 + 2 mu1) , 0 , 0] [0 , 0 , 0 , lambda] [-2 mu1 - 2 u1 sigma1 , -2 (mu1 + u1 sigma1) u1 , 1 , u2] > evalf(subs(sol[nsol],valnum,map(factor,MatrixInverse(M).B))); [-0.2776797776 , 0.3473805650 , 0.02803030619 , 0.07677990109 ] [0.02548209653 , -0.07016217906 , -0.3051575454 , -0.3793507027] [-0.008494032178 , 0.02338739302 , 0.1017191818 , 0.2786265930] > DthetaU_ref; > DthetaLambda_ref; [-0.2776797784 , 0.3473805677 , 0.02803030625 , 0.07677990122 ] [0.025482097 , -0.070162179 , -0.3051575469 , -0.379350694] [-0.0084940325 , 0.023387393 , 0.1017191822 , 0.278626592] > openturns-1.9/validation/src/Sensibilite_ref2.mws000066400000000000000000000403531307543307100222710ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "restart:\ng:=S+x1^2 -x2:\nT1:=(x1-mu1)/sigma1:\nT2:=(x2-mu2)/sigma2:\ng_tilde:=subs(x1=sol ve(T1=u1,x1), x2=solve(T2=u2,x2),g);\ndgtilde_u1:=diff(g_tilde,u1);\nd gtilde_u2:=diff(g_tilde,u2);\neq_u1:=u1=lambda*dgtilde_u1;\neq_u2:=u2= lambda*dgtilde_u2;\neq_lambda:=g_tilde=0;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(g_tildeG,*%\"SG\"\"\"*$),&%$mu1GF'*&%#u1GF'%'sigma1G F'F'\"\"#F'F'%$mu2G!\"\"*&%#u2GF'%'sigma2GF'F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma 1GF(F(F(F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u2G,$%'si gma2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u1G/%#u1G,$**\"\"# \"\"\"%'lambdaGF*,&%$mu1GF**&F&F*%'sigma1GF*F*F*F/F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u2G/%#u2G,$*&%'lambdaG\"\"\"%'sigma2GF*!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*eq_lambdaG/,*%\"SG\"\"\"*$),&%$ mu1GF(*&%#u1GF(%'sigma1GF(F(\"\"#F(F(%$mu2G!\"\"*&%#u2GF(%'sigma2GF(F2 \"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "sol:=allvalues(sol ve(\{eq_u1,eq_u2,eq_lambda\},\{u1,u2,lambda\})):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 485 "valnum:=mu1=1,sigma1=0.2,mu2=2,sigma2=5,S=5: \nnsol:=1:\nwith(plots):\ngtildeNum:=subs(valnum,g_tilde):\np1:=implic itplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]):\np2:=plot([[0,0],sub s(sol[nsol],valnum,[u1,u2])],color=blue):\ndisplay(\{p1,p2\},scaling=c onstrained);\nexpre:=subs(sol[nsol],[u1,u2,lambda]):\nd_mu1:=evalf(sub s(valnum,diff(expre,mu1))):\nd_mu2:=evalf(subs(valnum,diff(expre,mu2)) ):\nd_sigma1:=evalf(subs(valnum,diff(expre,sigma1))):\nd_sigma2:=evalf (subs(valnum,diff(expre,sigma2))):" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURVESG6eu7$7$$!3W+++++++I!#<$\"3&*)******** ***>j!#=7$$!3y]:r*=<-&HF*$\"3!H.ah>HiL'F-7$7$$!3#)***********\\#HF*$\" 3P+++++XWjF-F.7$F47$$!3nT*Q-I\\q(GF*$\"3fP#>lLd1O'F-7$7$$!3k********** **\\GF*$\"3\"***********zpjF-F:7$F@7$$!3pbtwqR%R!GF*$\"3ID9B5'>fQ'F-7$ 7$$!3Z***********\\x#F*$\"3!)*********\\gR'F-FF7$FL7$$!3XL&\\o.,4t#F*$ \"3lp/mCQ,7kF-7$7$$!3G*************p#F*$\"3-+++++?BkF-FR7$FX7$$!3=tShM .#zl#F*$\"3$pLa[zP*QkF-7$7$$!36***********\\i#F*$\"3[*********\\7X'F-F hn7$F^o7$$!3!=\"Hw+<+&e#F*$\"3;;b]V$*omkF-7$7$$!3$*)***********\\DF*$ \"3T+++++?!['F-Fdo7$Fjo7$$!3_=)oD(\\97DF*$\"3O5w\"4Im_\\'F-7$7$$!3w)** ********\\Z#F*$\"3X*********\\+^'F-F`p7$Ffp7$$!3p0H(y)*\\$RCF*$\"3a2@( \\]mY_'F-7$7$$!3e)************R#F*$\"3&***********zSlF-F\\q7$Fbq7$$!3n Z@3&e;mO#F*$\"3wL`4,y)[b'F-7$7$$!3S)**********\\K#F*$\"3!3++++]Cd'F-Fh q7$F^r7$$!3'R\"p;.Y%RH#F*$\"3]fbAU!Gfe'F-7$7$$!3B)***********\\AF*$\"3 (3+++++]g'F-Fdr7$Fjr7$$!3`>&e;)QL@AF*$\"39*H!y)3&y+++++XQmF-7$$!3uznkgUy[@F*$\"3v uPi3oX]mF-7$7$$!3)y************4#F*$\"3&4+++++Gn'F-F_t7$Fet7$$!3\"pex2 e&Hw?F*$\"3AMX.x5%Ro'F-7$7$$!3p(**********\\-#F*$\"3'4++++]!3nF-F[u7$F au7$$!3O\"\\]KonQ+#F*$\"3biKnwdB=nF-7$7$$!3t(***********\\>F*$\"3I,+++ +?WnF-Fgu7$7$$!3^(***********\\>F*$\"3>+++++?WnF-7$$!3m-j\")4/]J>F*$\" 3^Z2b(zQLv'F-7$7$$!3y(**********\\(=F*$\"3*3++++]7y'F-Fhv7$F^w7$$!3#pp uFg$>f=F*$\"3)G+'*p.[#*y'F-7$7$$!3%y************z\"F*$\"3#3+++++#>oF-F dw7$Fjw7$$!3iS=(\\5Zpy\"F*$\"3/'eC'*Rhf#oF-7$7$$!3(y**********\\s\"F*$ \"34,++++0eoF-F`x7$Ffx7$$!3AD!)zf2w9,++++XAqF-F_\\l7$Fe\\l7$$!3Aq/Rc*HZN\"F*$\"3j 2j?&3mI1(F-7$7$$!34)***********\\8F*$\"33-++++!e1(F-F[]l7$Fa]l7$$!3)pu %3)*R!HG\"F*$\"3S++8TmQ0rF-7$7$$!39)**********\\F\"F*$\"34,++++05rF-Fg ]l7$7$F^^l$\"3?-++++05rF-7$$!3rKeMdr867F*$\"3H4yFJa\\[rF-7$7$$!3;)**** ********>\"F*$\"3c,++++?brF-Ff^l7$F\\_l7$$!3`&4$e\"GH%R6F*$\"3Azz5@/R# >(F-7$7$$!3B)**********\\7\"F*$\"3E,++++D,sF-Fb_l7$Fh_l7$$!3\"efI(=-yn 5F*$\"3wYY2$epqB(F-7$7$$!3F)***********\\5F*$\"3?+++++?[sF-F^`l7$7$$!3 \\)***********\\5F*$\"3J,++++?[sF-7$$!3@?$[C<)*='**F-$\"3_(z(f'*3`#G(F -7$7$$!37$)**********\\(*F-$\"3g+++++0'H(F-F_al7$Feal7$$!30.]-h#zlC*F- $\"3TuL.[BxGtF-7$7$$!3c$)*************)F-$\"3L,++++![M(F-F[bl7$Fabl7$$ !3zNE)z%R%=`)F-$\"3L\\NkI>zvtF-7$7$$!3-%)**********\\#)F-$\"3I,++++X%R (F-Fgbl7$F]cl7$$!3GC`UL2p&4R\"y;hrvF-7$7$$!3y&)**********\\_F-$\"3J,++++0-wF- Fgel7$F]fl7$$!3WXxST!po'\\F-$\"3Wh.@b?\\AwF-7$7$$!3C')***********\\%F- $\"3*=+++++il(F-Fcfl7$7$$!3o&)***********\\%F-$\"3y+++++?cwF-7$$!3:6/ \")**RgbUF-$\"3^:RTm'QTn(F-7$7$$!3d&)**********\\PF-$\"3g+++++D6xF-Fdg l7$Fjgl7$$!3)*)p,W;7\\a$F-$\"39Lc`_&\\ls(F-7$7$$!3+')************HF-$ \"3)=+++++sw(F-F`hl7$7$$!3W&)************HF-$\"3x+++++?nxF-7$$!3lRjxq? zMGF-$\"3\"Q:N5wA(zxF-7$7$$!3M&)**********\\AF-$\"3G,++++0CyF-Fail7$Fg il7$$!3?$48&fACD@F-$\"3G\"\\$\"37,++++XSzF-Fijl7$F_[m7$$!3%RP6=rw%yqFb[m$\"3<<#3\\*ozVzF -7$7$$\"3UK$Gw]X5Z\"!#K$\"3)[,++++++)F-Ff[m7$F\\\\m7$$\"3=r!fZBpC2(Fb[ m$\"36e@.-T+d!)F-7$7$$\"3#o9+++++](Fb[m$\"3A,++++Xg!)F-Fc\\m7$7$$\"3?[ ,+++++vFb[mF\\]m7$$\"3O\\kpr.$RT\"F-$\"3BoZS/&fZ6)F-7$7$$\"3m9++++++:F -$\"38+++++!=7)F-Fb]m7$7$Fi]m$\"3C,++++!=7)F-7$$\"3A/())ox^+7#F-$\"3ki <[(HkK<)F-7$7$$\"3w9+++++]AF-$\"3]+++++0%=)F-Fa^m7$Fg^m7$$\"3gt*Hkc7c# GF-$\"3(GS$4yl^K#)F-7$7$$\"3)[,++++++$F-$\"3?,++++?Z#)F-F]_m7$7$Fd_m$ \"3J-++++?Z#)F-7$$\"3w5$oG;91`$F-$\"3Aa*3&\\W^#H)F-7$7$$\"3*\\,+++++v$ F-$\"39,++++D6$)F-F\\`m7$Fb`m7$$\"3aKH%R)z0NUF-$\"3Xc%49-cKN)F-7$7$$\" 33:++++++XF-$\"3J+++++?w$)F-Fh`m7$F^am7$$\"3i,+++++v*F-F^gm7$$\"3Ef0A(>(p])* F-$\"3$zhs.2Pd'))F-7$7$$\"3:,+++++]5F*$\"3!G+++++#G*)F-Fdgm7$Fjgm7$$\" 3Q4(zaS=]0\"F*$\"3jPs$p#z3L*)F-7$7$$\"3DZNWKmrB6F*$\"3c8++++++!*F-F`hm 7$7$Fghm$\"3m9++++++!*F-7$$\"3+\"e;Aj7\\7\"F*$\"3%)\\*yP!\\;,!*F-7$7$$ \"36,+++++D6F*$\"3k+++++D,!*F-F_im7$Feim7$$\"3OY@')e$[Z>\"F*$\"3Bw!Q=) =-q!*F-7$7$$\"31,++++++7F*$\"30,++++?v!*F-F[jm7$7$$\"3G,++++++7F*Fdjm7 $$\"3]a%4W$*HXE\"F*$\"3_O1au3gR\"*F-7$7$$\"3-,+++++v7F*$\"3z,++++0]\"* F-Fjjm7$7$$\"3!3+++++]F\"F*Fc[n7$$\"3!>4rZ\\dUL\"F*$\"3g,)=(p+!*4#*F-7 $7$$\"3(4++++++N\"F*$\"3c**********zD#*F-Fi[n7$F_\\n7$$\"3>%>0aF*$\"3v+++++?k)*F-Fabn7$Fgbn7$$\" 3c-$)ycqRf>F*$\"3#>K*[4fqu)*F-7$7$$\"3!3+++++]-#F*$\"3i,++++0[**F-F]cn 7$Fccn7$$\"3*47Q9%=fG?F*$\"3Wx]#3y3@&**F-7$7$$\"3#pWF8Xt42#F*$\"3y,+++ +++5F*Ficn7$7$F`dn$\"3c,++++++5F*7$$\"3'*4'ej>Kx4#F*$\"3(H_)=QP-.5F*7$ 7$$\"3)4++++++5#F*$\"3<+++++G.5F*Fhdn7$7$$\"3_+++++++@F*Faen7$$\"3,O7< 9r\"o;#F*$\"3+b$QW^54,\"F*7$7$$\"3:,+++++v@F*$\"36++++]%=,\"F*Fgen7$F] fn7$$\"3z:2z2(\\eB#F*$\"3][!zi0n)=5F*7$7$$\"3M,+++++]AF*$\"3=+++++]?5F *Fcfn7$Fifn7$$\"30l882,$[I#F*$\"3G<:\\!>$*o-\"F*7$7$$\"3^,+++++DBF*$\" 3>++++]CH5F*F_gn7$Fegn7$$\"3GrxnT%ePP#F*$\"3^T'HWu))\\.\"F*7$7$$\"3o,+ +++++CF*$\"3M+++++3Q5F*F[hn7$Fahn7$$\"3Jwl[S[jUCF*$\"3n-z,YN:V5F*7$7$$ \"3(=+++++]Z#F*$\"3>++++]+Z5F*Fghn7$F]in7$$\"3)RB)=K%f9^#F*$\"3sD!\\PU (Q^5F*7$7$$\"3\\-+++++]DF*$\"3=+++++-c5F*Fcin7$7$$\"3/-+++++]DF*F\\jn7 $$\"3'\\x))\\MK-e#F*$\"3QP;o1-pf5F*7$7$$\"3A-+++++DEF*$\"3K++++]7l5F*F bjn7$Fhjn7$$\"3$Qbrmq`*[EF*$\"3YKzVC<1o5F*7$7$$\"3S-++++++FF*$\"3R++++ +Ku5F*F^[o7$Fd[o7$$\"3k()*)fWOiVlv4[&GF*$\"3w]dF\"* pe$4\"F*7$7$$\"36(H\"\\!*fi0HF*$\"3k,++++++6F*Fb]o7$Fh]o7$$\"3xWf,2[KB HF*$\"3:7ak!fLA5\"F*7$7$$\"3$H+++++]#HF*$\"3M++++]W-6F*F^^o7$Fd^o7$$\" 3WQ&*>[\\y\"*HF*$\"38@1S-M&46\"F*7$7$$\"37.++++++IF*$\"3K++++++76F*Fj^ o-%'COLOURG6&%$RGBG\"\"\"\"\"!Fj_o-F$6$7$7$$Fj_oFj_oF_`o7$$!3+%pkQIu,G 'Fb[m$\"31'\\[a8u+&zF--Ff_o6&Fh_oF_`oF_`o$\"*++++\"!\")-%(SCALINGG6#%, CONSTRAINEDG-%+AXESLABELSG6%%#u1G%#u2G-%%FONTG6#%(DEFAULTG-%%VIEWG6$Ff aoFfao" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 46.000000 0 0 "Curve 1" "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 779 "DthetaU_r ef:=<|||>;\n DthetaLambda_ref:=<|||>; \nG_:=;\nG_num:=evalf(subs(sol[nsol],valnum,G_) );\ndgtilde_mu1:=diff(g_tilde,mu1); \ndgtilde_mu2:=diff(g_tilde,mu2); \ndgtilde_sigma1:=diff(g_tilde,sigma1);\ndgtilde_sigma2:=diff(g_tilde, sigma2);\nK_:=; \nK_num:=evalf(subs(sol[nsol],valnum,K_));\nE_:=< | >;\nE_num:=evalf(subs(sol[ nsol],valnum,E_));\nF_:=< | | | \+ >;\nF_num:=evalf(subs(sol[nsol ],valnum,F_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DthetaU_refG-%'RT ABLEG6%\"*[I2Q\"-%'MATRIXG6#7$7&$!)ax.$*!\"*$!)$HK-$!\")$\"+6`]]:!#6$ \")mKlCF07&$\"+xKEwQ!#5$!+n?so[F6$!+dF<$!+R*R0d\"F<%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%1DthetaLambda_refG-%'RTABLEG6%\"*We2 Q\"-%'MATRIXG6#7#7&$!+bl__x!#6$\"+MqWP(*!#7$\"+8N]vRF0$\"+S&46K'F0%'Ma trixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G_G-%'RTABLEG6%\"*_&e!Q\"- %'MATRIXG6#7$7#,$*(\"\"#\"\"\",&%$mu1GF1*&%#u1GF1%'sigma1GF1F1F1F6F1F1 7#,$%'sigma2G!\"\"&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&G_numG-%'RTABLEG6%\"*#fe!Q\"-%'MATRIXG6#7$7#$\"*he(\\R!\"*7#$ !\"&\"\"!&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,d gtilde_mu1G,&*&\"\"#\"\"\"%$mu1GF(F(*(F'F(%#u1GF(%'sigma1GF(F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF( %'sigma1GF(F(F(F,F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_si gma2G,$%#u2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K_G-%'RTABLEG6 %\"*K'e!Q\"-%'MATRIXG6#7&7#,&*&\"\"#\"\"\"%$mu1GF1F1*(F0F1%#u1GF1%'sig ma1GF1F17#,$*(F0F1,&F2F1*&F4F1F5F1F1F1F4F1F17#!\"\"7#,$%#u2GF<&%'Vecto rG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&K_numG-%'RTABLEG6% \"*s'e!Q\"-%'MATRIXG6#7&7#$\"*Jz[(>!\")7#$!+e(e-C\"!#57#$!\"\"\"\"!7#$ !+NT2]zF4&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#E _G-%'RTABLEG6%\"*s.zN\"-%'MATRIXG6#7$7$,$*&\"\"#\"\"\")%'sigma1GF0F1F1 \"\"!7$F4F4%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&E_numG-%'RT ABLEG6%\"*W')3Q\"-%'MATRIXG6#7$7$$\"\")!\"#$\"\"!F27$F1F1%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#F_G-%'RTABLEG6%\"*s74Q\"-%'MATRIXG6 #7$7&,$*&\"\"#\"\"\"%'sigma1GF1F1,&*(\"\"%F1%#u1GF1F2F1F1*&F0F1%$mu1GF 1F1\"\"!F97&F9F9F9!\"\"%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% &F_numG-%'RTABLEG6%\"*w<4Q\"-%'MATRIXG6#7$7&$\"\"%!\"\"$\"+5'e(\\>!\"* $\"\"!F5F47&F4F4F4$F0F5%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "M:=Matrix(3,3):\nwith(LinearAlgebra):\nM[1..2,1..2]: =-DiagonalMatrix([1,1])+lambda*E_:\nM[1..2,3]:=Transpose(G_):\nM[3,1.. 2]:=G_:\nB:=Matrix(3,4):\nB[1..2,1..4]:=-lambda*F_:\nB[3,1..4]:=-K_:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "M;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*Cg4Q\"-%'MATRIXG6#7%7%,&\"\"\"!\"\"*(\" \"#F-%'lambdaGF-)%'sigma1GF0F-F-\"\"!,$*(F0F-,&%$mu1GF-*&%#u1GF-F3F-F- F-F3F-F-7%F4F.,$%'sigma2GF.7%F5F " 0 "" {MPLTEXT 1 0 2 "B;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6 %\"*G!\\b8-%'MATRIXG6#7%7&,$*(\"\"#\"\"\"%'lambdaGF/%'sigma1GF/!\"\",$ *&F0F/,&*(\"\"%F/%#u1GF/F1F/F/*&F.F/%$mu1GF/F/F/F2\"\"!F;7&F;F;F;F07&, &*&F.F/F:F/F2*(F.F/F8F/F1F/F2,$*(F.F/,&F:F/*&F8F/F1F/F/F/F8F/F2F/%#u2G %'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "evalf(subs(sol [nsol],valnum,map(factor,MatrixInverse(M).B)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*kD5Q\"-%'MATRIXG6#7%7&$!+;]x.$*!#6$!+3(G K-$!#5$\"+0`]]:F.$\"+FkKlCF.7&$\"+iKEwQF1$!+-@so[F.$!+eF1$!+S*R0d \"F17&$!+Cl__xF.$\"+/UWP(*!#7$\"+;N]vRF.$\"+W&46K'F.%'MatrixG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "DthetaU_ref;\nDthetaLambda_r ef;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*[I2Q\"-%'MATRIXG 6#7$7&$!)ax.$*!\"*$!)$HK-$!\")$\"+6`]]:!#6$\")mKlCF.7&$\"+xKEwQ!#5$!+n ?so[F4$!+dF:$!+R*R0d\"F:%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*We2Q\"-%'MATRIXG6#7#7&$!+bl__x!#6$\"+MqWP(*!#7$\" +8N]vRF.$\"+S&46K'F.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 44 }{VIEWOPTS 1 1 0 3 2 1804 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 138073048 138075844 138058552 138058592 138058632 138058672 135790372 138088644 138091272 138091776 138096024 135549028 138102564 }{RTABLE M7R0 I6RTABLE_SAVE/138073048X,%)anythingG6"6"[gl!"%!!!#)"#"%$!)ax.$*!"*$"+xKEwQ!#5$! )$HK-$!")$!+n?so[!#6$"+6`]]:F2$!+dF,$")mKlCF)$!+R*R0d"F,6" } {RTABLE M7R0 I6RTABLE_SAVE/138075844X,%)anythingG6"6"[gl!"%!!!#%"""%$!+bl__x!#6$"+MqWP(*!#7$ "+8N]vRF)$"+S&46K'F)6" } {RTABLE M7R0 I6RTABLE_SAVE/138058552X*%)anythingG6"6"[gl!#%!!!"#"#,$*&,&%$mu1G"""*&%#u1GF+%' sigma1GF+F+F+F.F+""#,$%'sigma2G!""6" } {RTABLE M7R0 I6RTABLE_SAVE/138058592X*%)anythingG6"6"[gl!#%!!!"#"#$"*he(\R!"*$!"&""!6" } {RTABLE M7R0 I6RTABLE_SAVE/138058632X*%)anythingG6"6"[gl!#%!!!"%"%,&%$mu1G""#*&%#u1G"""%'sig ma1GF,F),$*&,&F(F,F*F,F,F+F,F)!"",$%#u2GF16" } {RTABLE M7R0 I6RTABLE_SAVE/138058672X*%)anythingG6"6"[gl!#%!!!"%"%$"*Jz[(>!")$!+e(e-C"!#5$!" """!$!+NT2]zF,6" } {RTABLE M7R0 I6RTABLE_SAVE/135790372X,%)anythingG6"6"[gl!"%!!!#%"#"#,$*$%'sigma1G""#F*""!F+F +6" } {RTABLE M7R0 I6RTABLE_SAVE/138088644X,%)anythingG6"6"[gl!"%!!!#%"#"#$"")!"#$""!F+F*F*6" } {RTABLE M7R0 I6RTABLE_SAVE/138091272X,%)anythingG6"6"[gl!"%!!!#)"#"%,$%'sigma1G""#""!,&*&%#u 1G"""F(F.""%%$mu1GF)F*F*F*F*!""6" } {RTABLE M7R0 I6RTABLE_SAVE/138091776X,%)anythingG6"6"[gl!"%!!!#)"#"%$""%!""$""!F+$"+5'e(\>!" *F*F*F*F*$F)F+6" } {RTABLE M7R0 I6RTABLE_SAVE/138096024X,%)anythingG6"6"[gl!"%!!!#*"$"$,&!"""""*&%'lambdaGF)%'s igma1G""#F-""!,$*&,&%$mu1GF)*&%#u1GF)F,F)F)F)F,F)F-F.F(,$%'sigma2GF(F/F5F.6" } {RTABLE M7R0 I6RTABLE_SAVE/135549028X,%)anythingG6"6"[gl!"%!!!#-"$"%,$*&%'lambdaG"""%'sigma1 GF*!"#""!,&%$mu1GF,*&%#u1GF*F+F*F,,$*&F)F*,&F0""%F/""#F*!""F-,$*&,&F/F*F0F*F*F1 F*F,F-F-F*F-F)%#u2G6" } {RTABLE M7R0 I6RTABLE_SAVE/138102564X,%)anythingG6"6"[gl!"%!!!#-"$"%$!+;]x.$*!#6$"+iKEwQ!#5$ !+Cl__xF)$!+3(GK-$F,$!+-@so[F)$"+/UWP(*!#7$"+0`]]:F)$!+eF,$"+;N]vRF)$"+FkK lCF)$!+S*R0d"F,$"+W&46K'F)6" } openturns-1.9/validation/src/Sensibilite_ref2.txt000066400000000000000000000130041307543307100222730ustar00rootroot00000000000000> restart: > g:=S+x1^2-x2: > T1:=(x1-mu1)/sigma1: > T2:=(x2-mu2)/sigma2: > g_tilde:=subs(x1=solve(T1=u1,x1), x2=solve(T2=u2,x2),g); > dgtilde_u1:=diff(g_tilde,u1); > dgtilde_u2:=diff(g_tilde,u2); > eq_u1:=u1=lambda*dgtilde_u1; > eq_u2:=u2=lambda*dgtilde_u2; > eq_lambda:=g_tilde=0; > 2 g_tilde := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 dgtilde_u1 := 2 (mu1 + u1 sigma1) sigma1 dgtilde_u2 := -sigma2 eq_u1 := u1 = 2 lambda (mu1 + u1 sigma1) sigma1 eq_u2 := u2 = -lambda sigma2 2 eq_lambda := S + (mu1 + u1 sigma1) - mu2 - u2 sigma2 = 0 > sol:=allvalues(solve({eq_u1,eq_u2,eq_lambda},{u1,u2,lambda})): > valnum:=mu1=1,sigma1=0.2,mu2=2,sigma2=5,S=5: > nsol:=1: > with(plots): > gtildeNum:=subs(valnum,g_tilde): > p1:=implicitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]): > p2:=plot([[0,0],subs(sol[nsol],valnum,[u1,u2])],color=blue): > display({p1,p2},scaling=constrained); > expre:=subs(sol[nsol],[u1,u2,lambda]): > d_mu1:=evalf(subs(valnum,diff(expre,mu1))): > d_mu2:=evalf(subs(valnum,diff(expre,mu2))): > d_sigma1:=evalf(subs(valnum,diff(expre,sigma1))): > d_sigma2:=evalf(subs(valnum,diff(expre,sigma2))): > DthetaU_ref:=<||| ..2]>>; > DthetaLambda_ref:=<|||>; > G_:=; > G_num:=evalf(subs(sol[nsol],valnum,G_)); > dgtilde_mu1:=diff(g_tilde,mu1); > dgtilde_mu2:=diff(g_tilde,mu2); > dgtilde_sigma1:=diff(g_tilde,sigma1); > dgtilde_sigma2:=diff(g_tilde,sigma2); > K_:=; > K_num:=evalf(subs(sol[nsol],valnum,K_)); > E_:=< | > >; > E_num:=evalf(subs(sol[nsol],valnum,E_)); > F_:=< | > | > | > >; > F_num:=evalf(subs(sol[nsol],valnum,F_)); DthetaU_ref := [-0.093037754 , -0.30232293 , 0.01550505311 , 0.024653266] [0.3876263277 , -0.04868722067 , -0.1987751757 , -0.1570539939] DthetaLambda_ref := [-0.07752526555 , 0.009737447034 , 0.03975503513 , 0.06321109540] [2 (mu1 + u1 sigma1) sigma1] G_ := [ ] [ -sigma2 ] [0.394975861] G_num := [ ] [ -5. ] dgtilde_mu1 := 2 mu1 + 2 u1 sigma1 dgtilde_mu2 := -1 dgtilde_sigma1 := 2 (mu1 + u1 sigma1) u1 dgtilde_sigma2 := -u2 [ 2 mu1 + 2 u1 sigma1 ] [ ] [2 (mu1 + u1 sigma1) u1] K_ := [ ] [ -1 ] [ ] [ -u2 ] [ 1.97487931 ] [ ] [-0.1240258758] K_num := [ ] [ -1. ] [ ] [-0.7950074135] [ 2 ] E_ := [2 sigma1 0] [ ] [ 0 0] [0.08 0.] E_num := [ ] [ 0. 0.] [2 sigma1 4 u1 sigma1 + 2 mu1 0 0] F_ := [ ] [ 0 0 0 -1] [0.4 1.949758610 0. 0. ] F_num := [ ] [0. 0. 0. -1.] > M:=Matrix(3,3): > with(LinearAlgebra): > M[1..2,1..2]:=-DiagonalMatrix([1,1])+lambda*E_: > M[1..2,3]:=Transpose(G_): > M[3,1..2]:=G_: > B:=Matrix(3,4): > B[1..2,1..4]:=-lambda*F_: > B[3,1..4]:=-K_: > M; [ 2 ] [-1 + 2 lambda sigma1 , 0 , 2 (mu1 + u1 sigma1) sigma1] [ ] [0 , -1 , -sigma2] [ ] [2 (mu1 + u1 sigma1) sigma1 , -sigma2 , 0] > B; [-2 lambda sigma1 , -lambda (4 u1 sigma1 + 2 mu1) , 0 , 0] [0 , 0 , 0 , lambda] [-2 mu1 - 2 u1 sigma1 , -2 (mu1 + u1 sigma1) u1 , 1 , u2] > evalf(subs(sol[nsol],valnum,map(factor,MatrixInverse(M).B))); [-0.09303775016 , -0.3023228708 , 0.01550505305 , 0.02465326427] [0.3876263262 , -0.04868722102 , -0.1987751758 , -0.1570539940] [-0.07752526524 , 0.009737444204 , 0.03975503516 , 0.06321109544] > DthetaU_ref; > DthetaLambda_ref; [-0.093037754 , -0.30232293 , 0.01550505311 , 0.024653266] [0.3876263277 , -0.04868722067 , -0.1987751757 , -0.1570539939] [-0.07752526555 , 0.009737447034 , 0.03975503513 , 0.06321109540] > openturns-1.9/validation/src/Sensibilite_ref3.mws000066400000000000000000000370631307543307100222760ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "restart:\ng:=S+3*x1 -x2:\nT1:=(x1-mu1)/sigma1:\nT2:=(x2-mu2)/sigma2:\ng_tilde:=subs(x1=sol ve(T1=u1,x1), x2=solve(T2=u2,x2),g);\ndgtilde_u1:=diff(g_tilde,u1);\nd gtilde_u2:=diff(g_tilde,u2);\neq_u1:=u1=lambda*dgtilde_u1;\neq_u2:=u2= lambda*dgtilde_u2;\neq_lambda:=g_tilde=0;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(g_tildeG,,%\"SG\"\"\"*&\"\"$F'%$mu1GF'F'*(F)F'%#u1GF '%'sigma1GF'F'%$mu2G!\"\"*&%#u2GF'%'sigma2GF'F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u1G,$*&\"\"$\"\"\"%'sigma1GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u2G,$%'sigma2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u1G/%#u1G,$*(\"\"$\"\"\"%'lambdaGF*%'sigma1G F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u2G/%#u2G,$*&%'lambdaG\" \"\"%'sigma2GF*!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*eq_lambdaG/ ,,%\"SG\"\"\"*&\"\"$F(%$mu1GF(F(*(F*F(%#u1GF(%'sigma1GF(F(%$mu2G!\"\"* &%#u2GF(%'sigma2GF(F0\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "sol:=allvalues(solve(\{eq_u1,eq_u2,eq_lambda\},\{u1,u2,lambda\})): " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 464 "valnum:=mu1=1,sigma1=0 .2,mu2=2,sigma2=5,S=1:\nwith(plots):\ngtildeNum:=subs(valnum,g_tilde): \np1:=implicitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]):\np2:=plo t([[0,0],subs(sol,valnum,[u1,u2])],color=blue):\ndisplay(\{p1,p2\},sca ling=constrained);\nexpre:=subs(sol,[u1,u2,lambda]):\nd_mu1:=evalf(sub s(valnum,diff(expre,mu1))):\nd_mu2:=evalf(subs(valnum,diff(expre,mu2)) ):\nd_sigma1:=evalf(subs(valnum,diff(expre,sigma1))):\nd_sigma2:=evalf (subs(valnum,diff(expre,sigma2))):" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURVESG6$7$7$$\"\"!F)F(7$$!3H++++7'=t%!#>$\" 37+++mw@VR!#=-%'COLOURG6&%$RGBGF(F($\"*++++\"!\")-F$6iu7$7$$!\"$F)$\"3 [,++++++SF-7$$!3\"QFIjf:(eH!#<$\"3O6n.WGT&\\%F-7$7$$!3#)***********\\# HFC$\"3'H++++++!\\F-F@7$7$FH$\"3o.++++++\\F-7$$!3$Gt!)oD3**)GFC$\"3A37 V<45@`F-7$7$$!3k************\\GFC$\"3W/++++++eF-FP7$FV7$$!3S\">Ju\"45@ GFC$\"3X1d#3**)yYhF-7$7$$!3Z***********\\x#FC$\"3K2++++++nF-Ffn7$F\\o7 $$!3)*\\;)zd$H_FFC$\"3p/-AkqZspF-7$7$$!3G*************p#FC$\"3_4++++++ wF-Fbo7$7$Fio$\"3#4,+++++g(F-7$$!3a3@`Qi[$o#FC$\"3w)p9w8l\")z(F-7$7$$! 36***********\\i#FC$\"358++++++&)F-Fap7$Fgp7$$!37nD3**)yYh#FC$\"3Q)>45 @`Qi)F-7$7$$!3$*)***********\\DFC$\"3!R,+++++S*F-F]q7$7$Fdq$\"3G:+++++ +%*F-7$$!3pDIjf:(ea#FC$\"3%Qp.WGT&\\%*F-7$7$$!37()***********\\#FC$\"3 K:++++++5F0F\\r7$Fbr7$$!3$Q[$=?U1xCFC$\"3@>)zd$H_F5F07$7$$!3w)******** **\\Z#FC$\"3h,+++++I5F0Fhr7$F^s7$$!3SURt!)oD3CFC$\"3.p#>Ju\"456F07$7$$ !3e)************R#FC$\"3$=++++++7\"F0Fds7$Fjs7$$!3T,WGT&\\%RBFC$\"3s=( e/bgE>\"F07$7$$!3S)**********\\K#FC$\"3\">++++++@\"F0F`t7$Fft7$$!3af[$ =?U1F#FC$\"3ao\")zd$H_F\"F07$7$$!3B)***********\\AFC$\"3E-++++++8F0F\\ u7$Fbu7$$!3c=`Qi[$=?#FC$\"33=w8l\")zd8F07$7$$!3/)**********\\<#FC$\"3N -+++++!R\"F0Fhu7$F^v7$$!38xd$H_FI8#FC$\"3\"z1xC(pOS9F07$7$$!3)y******* *****4#FC$\"3r-+++++![\"F0Fdv7$Fjv7$$!3qNi[$=?U1#FC$\"3tFC$\"3 Gnf:(e/bg\"F07$7$$!3'z***********\\>FC$\"3'G++++++m\"F0F\\x7$Fbx7$$!3& G:(e/bgE>FC$\"3#oT&\\%Rt!)o\"F07$7$$!3+)**********\\(=FC$\"3%H++++++v \"F0Fhx7$7$$!3y(**********\\(=FCFay7$$!3k6w8l\")zd=FC$\"34m[$=?U1x\"F0 7$7$$!3/)************z\"FC$\"3-.+++++S=F0Fgy7$7$$!3%y************z\"FC F`z7$$!3Wq!)oD3**)y\"FC$\"3\"fJu\"45@`=F07$7$$!3(y**********\\s\"FC$\" 3#G++++++$>F0Ffz7$7$F][l$\"3b-+++++I>F07$$!3CH&Qi[$=? F07$7$$!33ammmmmm;FC$\"3O:++++++?F0Fe[l7$F[\\l7$$!3.))*)yYhP^;FC$\"3t9 K&Qi[$=?F07$7$$!3\"z***********\\;FC$\"3j-+++++??F0Fa\\l7$Fg\\l7$$!3QY %Rt!)oDe\"FC$\"3+kE>Ju\"45#F07$7$$!3'z**********\\d\"FC$\"3r-+++++5@F0 F]]l7$7$$!3u(**********\\d\"FC$\"3V-+++++5@F07$$!3=0**)yYhP^\"FC$\"3b8 @`Qi[$=#F07$7$$!3+)************\\\"FC$\"3C-++++++AF0F^^l7$7$$!3!y***** *******\\\"FCFg^l7$$!3>k.WGT&\\W\"FC$\"34j:(e/bgE#F07$7$$!3/)********* *\\U\"FC$\"3K-+++++!H#F0F]_l7$7$Fd_l$\"3/-+++++!H#F07$$!3wA3**)yYhP\"F C$\"3k75@`Qi[BF07$7$$!34)***********\\8FC$\"3n-+++++!Q#F0F\\`l7$7$$!3( y***********\\8FCFe`l7$$!3y\"GT&\\%RtI\"FC$\"3Yi/bgE>JCF07$7$$!39)**** ******\\F\"FC$\"3Z-+++++qCF0F[al7$Faal7$$!3OS<45@`Q7FC$\"3t6**)yYhP^#F 07$7$$!3;)************>\"FC$\"3F-+++++gDF0Fgal7$F]bl7$$!3:*>U1xC(p6FC$ \"3ch$H_FIjf#F07$7$$!3B)**********\\7\"FC$\"3N-+++++]EF0Fcbl7$Fibl7$$! 3&zl#>Ju\"45\"FC$\"3#3\")oD3**)yEF07$7$$!3F)***********\\5FC$\"3(=++++ ++u#F0F_cl7$Fecl7$$!3_;Ju\"45@.\"FC$\"33g#3**)yYhFF07$7$$!37$)******** **\\(*F0$\"3'>++++++$GF0F[dl7$Fadl7$$!3:`d$H_FIj*F0$\"3O4xC(pOS%GF07$7 $$!3c$)*************)F0$\"3/-+++++?HF0Fgdl7$F]el7$$!35T.WGT&\\%*)F0$\" 3tfre/bgEHF07$7$$!3#\\?LLLLLL)F0$\"3U:++++++IF0Fcel7$Fiel7$$!3%z#\\%Rt !)oD)F0$\"3X3m#>Ju\"4IF07$7$$!3-%)**********\\#)F0$\"37-+++++5IF0F_fl7 $7$Fffl$\"3c,+++++5IF07$$!3+<&\\%Rt!)ovF0$\"3GegE>Ju\"4$F07$7$$!3Y%)** *********\\(F0$\"3k,++++++JF0F^gl7$Fdgl7$$!3%Q5a\\%Rt!)oF0$\"3a2bgE>Ju JF07$7$$!3!\\)**********\\nF0$\"3t,+++++!>$F0Fjgl7$F`hl7$$!3!=pe/bgE>' F0$\"3\"o&\\%Rt!)oD$F07$7$$!3M&)************fF0$\"3\"=++++++G$F0Ffhl7$ F\\il7$$!3jyK'f:(e/bF0$\"3>2WGT&\\%RLF07$7$$!3y&)**********\\_F0$\"3)= ++++++P$F0Fbil7$Fhil7$$!3emyYhP^;[F0$\"3XcQi[$=?U$F07$7$$!3o&)******** ***\\%F0$\"3'>++++++Y$F0F^jl7$Fdjl7$$!3U`C(pOS%GTF0$\"3s0L'f:(e/NF07$7 $$!3d&)**********\\PF0$\"3[,+++++]NF0Fjjl7$7$Fa[m$\"3/-+++++]NF07$$!3E SqZspOSMF0$\"3*\\v-L'f:(e$F07$7$$!3W&)************HF0$\"38-+++++SOF0Fi [m7$7$F`\\m$\"3d,+++++SOF07$$!35F;)zd$H_FF0$\"3E/AkqZspOF07$7$$!3M&)** ********\\AF0$\"3l,+++++IPF0Fh\\m7$F^]m7$$!3&R@'[$=?U1#F0$\"3ka;)zd$H_ PF07$7$$!3C&)***********\\\"F0$\"3t,+++++?QF0Fd]m7$Fj]m7$$!3M,3**)yYhP \"F0$\"3!R5@`Qi[$QF07$7$$!3i_)**********\\(F-$\"3\"=++++++\"RF0F`^m7$7 $Fg^m$\"3D,+++++5RF07$$!3d%)Q&\\%Rt!)oF-$\"3<`0m#>Ju\"RF07$7$$\"3UK$Gw ]X5Z\"!#K$\"3w:++++++SF0F__m7$Fe_m7$$\"32tV&\\%Rt!)oF-$\"3F_%Rt!)oD3%F 07$7$$\"3#o9+++++](F-$\"3U,+++++!4%F0F\\`m7$7$Fc`m$\"3(>++++++4%F07$$ \"3\"*\\3**)yYhP\"F0$\"3a,*yYhP^;%F07$7$$\"3m9++++++:F0$\"3\\,+++++!=% F0F[am7$Faam7$$\"3Nji[$=?U1#F0$\"3O^$=?U1xC%F07$7$$\"3w9+++++]AF0$\"3d ,+++++qUF0Fgam7$F]bm7$$\"3Rv;)zd$H_FF0$\"3j+yNH_FIVF07$7$$\"3)[,++++++ $F0$\"3?-+++++gVF0Fcbm7$7$Fjbm$\"3w-+++++gVF07$$\"3c)3xC(pOSMF0$\"3+^s pOS%GT%F07$7$$\"3*\\,+++++v$F0$\"3u,+++++]WF0Fbcm7$Fhcm7$$\"3;,D(pOS%G TF0$\"3G+n.WGT&\\%F07$7$$\"33:++++++XF0$\"3\"=++++++a%F0F^dm7$Fddm7$$ \"3K9zYhP^;[F0$\"3a\\hP^;)zd%F07$7$$\"3l9+++++]_F0$\"3*=++++++j%F0Fjdm 7$F`em7$$\"3[FL'f:(e/bF0$\"3\"))f:(e/bgYF07$7$$\"3?9++++++gF0$\"3(>+++ +++s%F0Ffem7$7$F]fm$\"3U,+++++?ZF07$$\"3_R(e/bgE>'F0$\"3j[]0m#>Ju%F07$ 7$$\"3x8+++++]nF0$\"30-+++++5[F0Fefm7$7$F\\gm$\"3],+++++5[F07$$\"3e^T& \\%Rt!)oF0$\"3!z\\%Rt!)oD[F07$7$$\"3K8++++++vF0$\"3/,++++++\\F0Fdgm7$F jgm7$$\"3uk&\\%Rt!)ovF0$\"3,+++++v*F0$\"3E,+++++q^F0Fdjm7$Fjjm7$$\"3T@Ju\"45@ .\"FC$\"3\"fu\"45@`Q_F07$7$$\"3:,+++++]5FC$\"3X-+++++g_F0F`[n7$Ff[n7$$ \"3hiE>Ju\"45\"FC$\"3<&>Ju\"45@`F07$7$$\"36,+++++D6FC$\"3U,+++++]`F0F \\\\n7$Fb\\n7$$\"3\"Q?U1xC(p6FC$\"3WW1xC(pOS&F07$7$$\"31,++++++7FC$\"3 ],+++++SaF0Fh\\n7$F^]n7$$\"3CX<45@`Q7FC$\"3\"[45@`Qi[&F07$7$$\"3-,++++ +v7FC$\"3e,+++++IbF0Fd]n7$Fj]n7$$\"3A'GT&\\%RtI\"FC$\"34W&\\%Rt!)obF07 $7$$\"3(4++++++N\"FC$\"3b++++++?cF0F`^n7$Ff^n7$$\"3lF3**)yYhP\"FC$\"3O $**)yYhP^cF07$7$$\"3$4+++++]U\"FC$\"3j++++++5dF0F\\_n7$Fb_n7$$\"3')o.W GT&\\W\"FC$\"3jU%GT&\\%Rt&F07$7$$\"37,++++++:FC$\"3s+++++++eF0Fh_n7$7$ $\"3)3++++++]\"FCFa`n7$$\"315**)yYhP^\"FC$\"3!>*yYhP^;eF07$7$$\"32,+++ ++v:FC$\"3z++++++!*eF0Fg`n7$F]an7$$\"3F^%Rt!)oDe\"FC$\"3;Tt!)oD3**eF07 $7$$\"3!3++++++l\"FC$\"3(3++++++)fF0Fcan7$Fian7$$\"3Z#**)yYhP^;FC$\"3a \"zYhP^;)fF07$7$$\"3&*ymmmmmm;FC$\"3K:++++++gF0F_bn7$Febn7$$\"3oL&Qi[$ =?\"pD3**)yYhF07$7$$\"3s+++++++=FC$\"3.,+++++ghF 0Fgcn7$F]dn7$$\"3J;w8l\")zd=FC$\"3NR^;)zd$HiF07$7$$\"3m++++++v=FC$\"36 ,+++++]iF0Fcdn7$Fidn7$$\"3Hdre/bgE>FC$\"3i)e/bgE>J'F07$7$$\"3i++++++]> FC$\"3>,+++++SjF0F_en7$Feen7$$\"3;*pOS%GT&*>FC$\"3+RS%GT&\\%R'F07$7$$ \"3!3+++++]-#FC$\"3;++++++IkF0F[fn7$Fafn7$$\"3:Si[$=?U1#FC$\"3E)[$=?U1 xkF07$7$$\"3)4++++++5#FC$\"3N,+++++?lF0Fgfn7$F]gn7$$\"3-#yNH_FI8#FC$\" 3aPH_FIjflF07$7$$\"3:,+++++v@FC$\"3V,+++++5mF0Fcgn7$Fign7$$\"3WB`Qi[$= ?#FC$\"3\"zQi[$=?UmF07$7$$\"3M,+++++]AFC$\"3_,++++++nF0F_hn7$Fehn7$$\" 3(['[$=?U1F#FC$\"3=P=?U1xCnF07$7$$\"3^,+++++DBFC$\"3q-+++++!z'F0F[in7$ Fain7$$\"3&eS%GT&\\%RBFC$\"3c(GT&\\%Rt!oF07$7$$\"37-++++++CFC$\"3n,+++ ++!)oF0Fgin7$F]jn7$$\"3sZRt!)oD3CFC$\"3#ot!)oD3**)oF07$7$$\"3J-+++++vC FC$\"3'G++++++(pF0Fcjn7$7$$\"3(=+++++]Z#FCF\\[o7$$\"3;*[$=?U1xCFC$\"3@ (=?U1xC(pF07$7$$\"3W7++++++DFC$\"33:++++++qF0Fb[o7$Fh[o7$$\"3eIIjf:(ea #FC$\"3ZO'f:(e/bqF07$7$$\"3/-+++++]DFC$\"3$=++++++1(F0F^\\o7$Fd\\o7$$ \"3crD3**)yYh#FC$\"3j%3**)yYhPrF07$7$$\"3y,+++++DEFC$\"3-.+++++]rF0Fj \\o7$7$$\"3A-+++++DEFCFc]o7$$\"3V8@`Qi[$o#FC$\"3,N&Qi[$=?sF07$7$$\"3S- ++++++FFC$\"3*>++++++C(F0Fi]o7$7$F`^o$\"35.+++++SsF07$$\"3'[l\")zd$H_F FC$\"3R&)zd$H_FI(F07$7$$\"3e-+++++vFFC$\"3=.+++++ItF0Fh^o7$F^_o7$$\"3H '>Ju\"45@GFC$\"3xNu\"45@`Q(F07$7$$\"3v-+++++]GFC$\"3E.+++++?uF0Fd_o7$F j_o7$$\"3FP2)oD3**)GFC$\"3$R)oD3**)yY(F07$7$$\"3$H+++++]#HFC$\"3M.++++ +5vF0F``o7$Ff`o7$$\"39z-L'f:(eHFC$\"3TNjf:(e/b(F07$7$$\"37.++++++IFC$ \"3K-++++++wF0F\\ao-F26&F4\"\"\"F)F)-%(SCALINGG6#%,CONSTRAINEDG-%+AXES LABELSG6%Q!6\"Fabo-%%FONTG6#%(DEFAULTG-%%VIEWG6$FfboFfbo" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 779 "DthetaU_ref:=< |||>;\nDthetaLambda_ref:= <|||>;\nG_:=;\nG_num:=evalf(subs(sol[nsol],valnum,G_));\ndgtilde_mu1:=d iff(g_tilde,mu1); \ndgtilde_mu2:=diff(g_tilde,mu2);\ndgtilde_sigma1:=d iff(g_tilde,sigma1);\ndgtilde_sigma2:=diff(g_tilde,sigma2);\nK_:=;\nK_num:=evalf(subs (sol[nsol],valnum,K_));\nE_:=< | >;\nE_num:=evalf(subs(sol[nsol],valnum,E_)); \nF_:=< | | | >;\nF_num:=evalf(subs(sol[nsol],valnum,F_));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DthetaU_refG-%'RTABLEG6%\"*?\"R`8-% 'MATRIXG6#7$7&$!+*z\"z(4(!#6$!+o!f()H#!#5$\"++1$fO#F0$\"+ne(e'=F07&$\" +*\\E[\"fF3$!+-wi(f&F0$!+L)3;(>F3$!+G-`iwF0%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1DthetaLambda_refG-%'RTABLEG6%\"*wX=P\"-%'MATRIXG6 #7#7&$!++`'H=\"!#5$\"+?b_>6!#6$\"+mw@VRF3$\"+7Jz4JF3%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G_G-%'RTABLEG6%\"*o)p'R\"-%'MATRIXG 6#7$7#,$*&\"\"$\"\"\"%'sigma1GF1F17#,$%'sigma2G!\"\"&%'VectorG6#%'colu mnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&G_numG-%'RTABLEG6%\"*!=Hr8-% 'MATRIXG6#7$7#$\"\"'!\"\"7#$!\"&\"\"!&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu1G\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%/dgtilde_sigma1G,$*&\"\"$\"\"\"%#u1GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma2G,$%#u2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K_G-%'RTABLEG6%\"*K\"Hr8-%'MATRIXG6#7&7#\"\"$7#,$*&F .\"\"\"%#u1GF2F27#!\"\"7#,$%#u2GF5&%'VectorG6#%'columnG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&K_numG-%'RTABLEG6%\"*)[=r8-%'MATRIXG6#7&7#$\" \"$\"\"!7#,$*&F.\"\"\"%#u1GF4F47#$!\"\"F07#,$*&$F4F0F4%#u2GF4F8&%'Vect orG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#E_G-%'RTABLEG6%\" *))*py8-%'MATRIXG6#7$7$\"\"!F.F-%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&E_numG-%'RTABLEG6%\"*K9sR\"-%'MATRIXG6#7$7$$\"\"!F/F .F-%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#F_G-%'RTABLEG6%\"*c 0(z8-%'MATRIXG6#7$7&\"\"!\"\"$F.F.7&F.F.F.!\"\"%'MatrixG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&F_numG-%'RTABLEG6%\"*o2]O\"-%'MATRIXG6#7$7&$ \"\"!F/$\"\"$F/F.F.7&F.F.F.$!\"\"F/%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "M:=Matrix(3,3):\nwith(LinearAlgebra):\nM[1..2,1 ..2]:=-DiagonalMatrix([1,1])+lambda*E_:\nM[1..2,3]:=Transpose(G_):\nM[ 3,1..2]:=G_:\nB:=Matrix(3,4):\nB[1..2,1..4]:=-lambda*F_:\nB[3,1..4]:=- K_:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "M;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#-%'RTABLEG6%\"*G+*e8-%'MATRIXG6#7%7%!\"\"\"\"!,$*&\" \"$\"\"\"%'sigma1GF1F17%F-F,,$%'sigma2GF,7%F.F4F-%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "B;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#-%'RTABLEG6%\"*#Hae8-%'MATRIXG6#7%7&\"\"!,$*&\"\"$\"\"\"%'lambdaGF0! \"\"F,F,7&F,F,F,F17&!\"$,$*&F/F0%#u1GF0F2F0%#u2G%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "evalf(subs(sol,valnum,map(factor,Ma trixInverse(M).B)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\" *+n=S\"-%'MATRIXG6#7%7&$!+*z\"z(4(!#6$!+o!f()H#!#5$\"++1$fO#F.$\"+ne(e '=F.7&$\"+*\\E[\"fF1$!+-wi(f&F.$!+L)3;(>F1$!+G-`iwF.7&$!++`'H=\"F1$\"+ ?b_>6F.$\"+mw@VRF.$\"+7Jz4JF.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "DthetaU_ref;\nDthetaLambda_ref;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*?\"R`8-%'MATRIXG6#7$7&$!+*z\"z(4(!#6$!+o !f()H#!#5$\"++1$fO#F.$\"+ne(e'=F.7&$\"+*\\E[\"fF1$!+-wi(f&F.$!+L)3;(>F 1$!+G-`iwF.%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\" *wX=P\"-%'MATRIXG6#7#7&$!++`'H=\"!#5$\"+?b_>6!#6$\"+mw@VRF1$\"+7Jz4JF1 %'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "8 1 0" 0 }{VIEWOPTS 1 1 0 3 2 1804 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 135339120 137184576 139669868 137129180 137129132 137118488 137869988 139721432 137970556 136500768 135890028 135854292 140186700 }{RTABLE M7R0 I6RTABLE_SAVE/135339120X,%)anythingG6"6"[gl!"%!!!#)"#"%$!+*z"z(4(!#6$"+*\E["f!# 5$!+o!f()H#F,$!+-wi(f&F)$"++1$fO#F)$!+L)3;(>F,$"+ne(e'=F)$!+G-`iwF)F& } {RTABLE M7R0 I6RTABLE_SAVE/137184576X,%)anythingG6"6"[gl!"%!!!#%"""%$!++`'H="!#5$"+?b_>6!#6$ "+mw@VRF,$"+7Jz4JF,F& } {RTABLE M7R0 I6RTABLE_SAVE/139669868X*%)anythingG6"6"[gl!#%!!!"#"#,$%'sigma1G""$,$%'sigma2G! ""F& } {RTABLE M7R0 I6RTABLE_SAVE/137129180X*%)anythingG6"6"[gl!#%!!!"#"#$""'!""$!"&""!F& } {RTABLE M7R0 I6RTABLE_SAVE/137129132X*%)anythingG6"6"[gl!#%!!!"%"%""$,$%#u1GF'!"",$%#u2GF*F& } {RTABLE M7R0 I6RTABLE_SAVE/137118488X*%)anythingG6"6"[gl!#%!!!"%"%$""$""!,$%#u1GF'$!""F),$%# u2GF,F& } {RTABLE M7R0 I6RTABLE_SAVE/137869988X,%)anythingG6"6"[gl!"%!!!#%"#"#""!F'F'F'F& } {RTABLE M7R0 I6RTABLE_SAVE/139721432X,%)anythingG6"6"[gl!"%!!!#%"#"#$""!F(F'F'F'F& } {RTABLE M7R0 I6RTABLE_SAVE/137970556X,%)anythingG6"6"[gl!"%!!!#)"#"%""!F'""$F'F'F'F'!""F& } {RTABLE M7R0 I6RTABLE_SAVE/136500768X,%)anythingG6"6"[gl!"%!!!#)"#"%$""!F(F'$""$F(F'F'F'F'$! ""F(F& } {RTABLE M7R0 I6RTABLE_SAVE/135890028X,%)anythingG6"6"[gl!"%!!!#*"$"$!""""!,$%'sigma1G""$F(F' ,$%'sigma2GF'F)F,F(F& } {RTABLE M7R0 I6RTABLE_SAVE/135854292X,%)anythingG6"6"[gl!"%!!!#-"$"%""!F'!"$,$%'lambdaGF(F', $%#u1GF(F'F'"""F'F*%#u2GF& } {RTABLE M7R0 I6RTABLE_SAVE/140186700X,%)anythingG6"6"[gl!"%!!!#-"$"%$!+*z"z(4(!#6$"+*\E["f!# 5$!++`'H="F,$!+o!f()H#F,$!+-wi(f&F)$"+?b_>6F)$"++1$fO#F)$!+L)3;(>F,$"+mw@VRF)$" +ne(e'=F)$!+G-`iwF)$"+7Jz4JF)F& } openturns-1.9/validation/src/Sensibilite_ref3.txt000066400000000000000000000121741307543307100223030ustar00rootroot00000000000000> restart: > g:=S+3*x1-x2: > T1:=(x1-mu1)/sigma1: > T2:=(x2-mu2)/sigma2: > g_tilde:=subs(x1=solve(T1=u1,x1), x2=solve(T2=u2,x2),g); > dgtilde_u1:=diff(g_tilde,u1); > dgtilde_u2:=diff(g_tilde,u2); > eq_u1:=u1=lambda*dgtilde_u1; > eq_u2:=u2=lambda*dgtilde_u2; > eq_lambda:=g_tilde=0; > g_tilde := S + 3 mu1 + 3 u1 sigma1 - mu2 - u2 sigma2 dgtilde_u1 := 3 sigma1 dgtilde_u2 := -sigma2 eq_u1 := u1 = 3 lambda sigma1 eq_u2 := u2 = -lambda sigma2 eq_lambda := S + 3 mu1 + 3 u1 sigma1 - mu2 - u2 sigma2 = 0 > sol:=allvalues(solve({eq_u1,eq_u2,eq_lambda},{u1,u2,lambda})): > valnum:=mu1=1,sigma1=0.2,mu2=2,sigma2=5,S=1: > with(plots): > gtildeNum:=subs(valnum,g_tilde): > p1:=implicitplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]): > p2:=plot([[0,0],subs(sol,valnum,[u1,u2])],color=blue): > display({p1,p2},scaling=constrained); > expre:=subs(sol,[u1,u2,lambda]): > d_mu1:=evalf(subs(valnum,diff(expre,mu1))): > d_mu2:=evalf(subs(valnum,diff(expre,mu2))): > d_sigma1:=evalf(subs(valnum,diff(expre,sigma1))): > d_sigma2:=evalf(subs(valnum,diff(expre,sigma2))): > DthetaU_ref:=<||| ..2]>>; > DthetaLambda_ref:=<|||>; > G_:=; > G_num:=evalf(subs(sol[nsol],valnum,G_)); > dgtilde_mu1:=diff(g_tilde,mu1); > dgtilde_mu2:=diff(g_tilde,mu2); > dgtilde_sigma1:=diff(g_tilde,sigma1); > dgtilde_sigma2:=diff(g_tilde,sigma2); > K_:=; > K_num:=evalf(subs(sol[nsol],valnum,K_)); > E_:=< | > >; > E_num:=evalf(subs(sol[nsol],valnum,E_)); > F_:=< | > | > | > >; > F_num:=evalf(subs(sol[nsol],valnum,F_)); DthetaU_ref := [-0.07097791799 , -0.2298759068 , 0.02365930600 , 0.01865875867] [0.5914826499 , -0.05597627602 , -0.1971608833 , -0.07662530228] DthetaLambda_ref := [-0.1182965300 , 0.01119525520 , 0.03943217666 , 0.03109793112] [3 sigma1] G_ := [ ] [-sigma2 ] [0.6] G_num := [ ] [-5.] dgtilde_mu1 := 3 dgtilde_mu2 := -1 dgtilde_sigma1 := 3 u1 dgtilde_sigma2 := -u2 [ 3 ] [ ] [3 u1] K_ := [ ] [ -1 ] [ ] [-u2 ] [ 3. ] [ ] [3. u1 ] K_num := [ ] [ -1. ] [ ] [-1. u2] [0 0] E_ := [ ] [0 0] [0. 0.] E_num := [ ] [0. 0.] [0 3 0 0] F_ := [ ] [0 0 0 -1] [0. 3. 0. 0. ] F_num := [ ] [0. 0. 0. -1.] > M:=Matrix(3,3): > with(LinearAlgebra): > M[1..2,1..2]:=-DiagonalMatrix([1,1])+lambda*E_: > M[1..2,3]:=Transpose(G_): > M[3,1..2]:=G_: > B:=Matrix(3,4): > B[1..2,1..4]:=-lambda*F_: > B[3,1..4]:=-K_: > M; [ -1 0 3 sigma1] [ ] [ 0 -1 -sigma2 ] [ ] [3 sigma1 -sigma2 0 ] > B; [ 0 -3 lambda 0 0 ] [ ] [ 0 0 0 lambda] [ ] [-3 -3 u1 1 u2 ] > evalf(subs(sol,valnum,map(factor,MatrixInverse(M).B))); [-0.07097791799 , -0.2298759068 , 0.02365930600 , 0.01865875867] [0.5914826499 , -0.05597627602 , -0.1971608833 , -0.07662530228] [-0.1182965300 , 0.01119525520 , 0.03943217666 , 0.03109793112] > DthetaU_ref; > DthetaLambda_ref; [-0.07097791799 , -0.2298759068 , 0.02365930600 , 0.01865875867] [0.5914826499 , -0.05597627602 , -0.1971608833 , -0.07662530228] [-0.1182965300 , 0.01119525520 , 0.03943217666 , 0.03109793112] > > openturns-1.9/validation/src/Sensibilite_ref4.mws000066400000000000000000000403371307543307100222750ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "restart:\ng:=S+x1^2 -x2:\nT1:=(x1-mu1)/sigma1:\nT2:=(x2-mu2)/sigma2:\ng_tilde:=subs(x1=sol ve(T1=u1,x1), x2=solve(T2=u2,x2),g);\ndgtilde_u1:=diff(g_tilde,u1);\nd gtilde_u2:=diff(g_tilde,u2);\neq_u1:=u1=lambda*dgtilde_u1;\neq_u2:=u2= lambda*dgtilde_u2;\neq_lambda:=g_tilde=0;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(g_tildeG,*%\"SG\"\"\"*$),&%$mu1GF'*&%#u1GF'%'sigma1G F'F'\"\"#F'F'%$mu2G!\"\"*&%#u2GF'%'sigma2GF'F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'sigma 1GF(F(F(F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+dgtilde_u2G,$%'si gma2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u1G/%#u1G,$**\"\"# \"\"\"%'lambdaGF*,&%$mu1GF**&F&F*%'sigma1GF*F*F*F/F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&eq_u2G/%#u2G,$*&%'lambdaG\"\"\"%'sigma2GF*!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*eq_lambdaG/,*%\"SG\"\"\"*$),&%$ mu1GF(*&%#u1GF(%'sigma1GF(F(\"\"#F(F(%$mu2G!\"\"*&%#u2GF(%'sigma2GF(F2 \"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "sol:=allvalues(sol ve(\{eq_u1,eq_u2,eq_lambda\},\{u1,u2,lambda\})):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 485 "valnum:=mu1=1,sigma1=0.2,mu2=2,sigma2=5,S=5: \nnsol:=1:\nwith(plots):\ngtildeNum:=subs(valnum,g_tilde):\np1:=implic itplot(gtildeNum,u1=-3..3,u2=-3..5,grid=[81,81]):\np2:=plot([[0,0],sub s(sol[nsol],valnum,[u1,u2])],color=blue):\ndisplay(\{p1,p2\},scaling=c onstrained);\nexpre:=subs(sol[nsol],[u1,u2,lambda]):\nd_mu1:=evalf(sub s(valnum,diff(expre,mu1))):\nd_mu2:=evalf(subs(valnum,diff(expre,mu2)) ):\nd_sigma1:=evalf(subs(valnum,diff(expre,sigma1))):\nd_sigma2:=evalf (subs(valnum,diff(expre,sigma2))):" }}{PARA 13 "" 1 "" {GLPLOT2D 484 484 484 {PLOTDATA 2 "6'-%'CURVESG6eu7$7$$!3W+++++++I!#<$\"3&*)******** ***>j!#=7$$!3y]:r*=<-&HF*$\"3!H.ah>HiL'F-7$7$$!3#)***********\\#HF*$\" 3P+++++XWjF-F.7$F47$$!3nT*Q-I\\q(GF*$\"3fP#>lLd1O'F-7$7$$!3k********** **\\GF*$\"3\"***********zpjF-F:7$F@7$$!3pbtwqR%R!GF*$\"3ID9B5'>fQ'F-7$ 7$$!3Z***********\\x#F*$\"3!)*********\\gR'F-FF7$FL7$$!3XL&\\o.,4t#F*$ \"3lp/mCQ,7kF-7$7$$!3G*************p#F*$\"3-+++++?BkF-FR7$FX7$$!3=tShM .#zl#F*$\"3$pLa[zP*QkF-7$7$$!36***********\\i#F*$\"3[*********\\7X'F-F hn7$F^o7$$!3!=\"Hw+<+&e#F*$\"3;;b]V$*omkF-7$7$$!3$*)***********\\DF*$ \"3T+++++?!['F-Fdo7$Fjo7$$!3_=)oD(\\97DF*$\"3O5w\"4Im_\\'F-7$7$$!3w)** ********\\Z#F*$\"3X*********\\+^'F-F`p7$Ffp7$$!3p0H(y)*\\$RCF*$\"3a2@( \\]mY_'F-7$7$$!3e)************R#F*$\"3&***********zSlF-F\\q7$Fbq7$$!3n Z@3&e;mO#F*$\"3wL`4,y)[b'F-7$7$$!3S)**********\\K#F*$\"3!3++++]Cd'F-Fh q7$F^r7$$!3'R\"p;.Y%RH#F*$\"3]fbAU!Gfe'F-7$7$$!3B)***********\\AF*$\"3 (3+++++]g'F-Fdr7$Fjr7$$!3`>&e;)QL@AF*$\"39*H!y)3&y+++++XQmF-7$$!3uznkgUy[@F*$\"3v uPi3oX]mF-7$7$$!3)y************4#F*$\"3&4+++++Gn'F-F_t7$Fet7$$!3\"pex2 e&Hw?F*$\"3AMX.x5%Ro'F-7$7$$!3p(**********\\-#F*$\"3'4++++]!3nF-F[u7$F au7$$!3O\"\\]KonQ+#F*$\"3biKnwdB=nF-7$7$$!3t(***********\\>F*$\"3I,+++ +?WnF-Fgu7$7$$!3^(***********\\>F*$\"3>+++++?WnF-7$$!3m-j\")4/]J>F*$\" 3^Z2b(zQLv'F-7$7$$!3y(**********\\(=F*$\"3*3++++]7y'F-Fhv7$F^w7$$!3#pp uFg$>f=F*$\"3)G+'*p.[#*y'F-7$7$$!3%y************z\"F*$\"3#3+++++#>oF-F dw7$Fjw7$$!3iS=(\\5Zpy\"F*$\"3/'eC'*Rhf#oF-7$7$$!3(y**********\\s\"F*$ \"34,++++0eoF-F`x7$Ffx7$$!3AD!)zf2w9,++++XAqF-F_\\l7$Fe\\l7$$!3Aq/Rc*HZN\"F*$\"3j 2j?&3mI1(F-7$7$$!34)***********\\8F*$\"33-++++!e1(F-F[]l7$Fa]l7$$!3)pu %3)*R!HG\"F*$\"3S++8TmQ0rF-7$7$$!39)**********\\F\"F*$\"34,++++05rF-Fg ]l7$7$F^^l$\"3?-++++05rF-7$$!3rKeMdr867F*$\"3H4yFJa\\[rF-7$7$$!3;)**** ********>\"F*$\"3c,++++?brF-Ff^l7$F\\_l7$$!3`&4$e\"GH%R6F*$\"3Azz5@/R# >(F-7$7$$!3B)**********\\7\"F*$\"3E,++++D,sF-Fb_l7$Fh_l7$$!3\"efI(=-yn 5F*$\"3wYY2$epqB(F-7$7$$!3F)***********\\5F*$\"3?+++++?[sF-F^`l7$7$$!3 \\)***********\\5F*$\"3J,++++?[sF-7$$!3@?$[C<)*='**F-$\"3_(z(f'*3`#G(F -7$7$$!37$)**********\\(*F-$\"3g+++++0'H(F-F_al7$Feal7$$!30.]-h#zlC*F- $\"3TuL.[BxGtF-7$7$$!3c$)*************)F-$\"3L,++++![M(F-F[bl7$Fabl7$$ !3zNE)z%R%=`)F-$\"3L\\NkI>zvtF-7$7$$!3-%)**********\\#)F-$\"3I,++++X%R (F-Fgbl7$F]cl7$$!3GC`UL2p&4R\"y;hrvF-7$7$$!3y&)**********\\_F-$\"3J,++++0-wF- Fgel7$F]fl7$$!3WXxST!po'\\F-$\"3Wh.@b?\\AwF-7$7$$!3C')***********\\%F- $\"3*=+++++il(F-Fcfl7$7$$!3o&)***********\\%F-$\"3y+++++?cwF-7$$!3:6/ \")**RgbUF-$\"3^:RTm'QTn(F-7$7$$!3d&)**********\\PF-$\"3g+++++D6xF-Fdg l7$Fjgl7$$!3)*)p,W;7\\a$F-$\"39Lc`_&\\ls(F-7$7$$!3+')************HF-$ \"3)=+++++sw(F-F`hl7$7$$!3W&)************HF-$\"3x+++++?nxF-7$$!3lRjxq? zMGF-$\"3\"Q:N5wA(zxF-7$7$$!3M&)**********\\AF-$\"3G,++++0CyF-Fail7$Fg il7$$!3?$48&fACD@F-$\"3G\"\\$\"37,++++XSzF-Fijl7$F_[m7$$!3%RP6=rw%yqFb[m$\"3<<#3\\*ozVzF -7$7$$\"3UK$Gw]X5Z\"!#K$\"3)[,++++++)F-Ff[m7$F\\\\m7$$\"3=r!fZBpC2(Fb[ m$\"36e@.-T+d!)F-7$7$$\"3#o9+++++](Fb[m$\"3A,++++Xg!)F-Fc\\m7$7$$\"3?[ ,+++++vFb[mF\\]m7$$\"3O\\kpr.$RT\"F-$\"3BoZS/&fZ6)F-7$7$$\"3m9++++++:F -$\"38+++++!=7)F-Fb]m7$7$Fi]m$\"3C,++++!=7)F-7$$\"3A/())ox^+7#F-$\"3ki <[(HkK<)F-7$7$$\"3w9+++++]AF-$\"3]+++++0%=)F-Fa^m7$Fg^m7$$\"3gt*Hkc7c# GF-$\"3(GS$4yl^K#)F-7$7$$\"3)[,++++++$F-$\"3?,++++?Z#)F-F]_m7$7$Fd_m$ \"3J-++++?Z#)F-7$$\"3w5$oG;91`$F-$\"3Aa*3&\\W^#H)F-7$7$$\"3*\\,+++++v$ F-$\"39,++++D6$)F-F\\`m7$Fb`m7$$\"3aKH%R)z0NUF-$\"3Xc%49-cKN)F-7$7$$\" 33:++++++XF-$\"3J+++++?w$)F-Fh`m7$F^am7$$\"3i,+++++v*F-F^gm7$$\"3Ef0A(>(p])* F-$\"3$zhs.2Pd'))F-7$7$$\"3:,+++++]5F*$\"3!G+++++#G*)F-Fdgm7$Fjgm7$$\" 3Q4(zaS=]0\"F*$\"3jPs$p#z3L*)F-7$7$$\"3DZNWKmrB6F*$\"3c8++++++!*F-F`hm 7$7$Fghm$\"3m9++++++!*F-7$$\"3+\"e;Aj7\\7\"F*$\"3%)\\*yP!\\;,!*F-7$7$$ \"36,+++++D6F*$\"3k+++++D,!*F-F_im7$Feim7$$\"3OY@')e$[Z>\"F*$\"3Bw!Q=) =-q!*F-7$7$$\"31,++++++7F*$\"30,++++?v!*F-F[jm7$7$$\"3G,++++++7F*Fdjm7 $$\"3]a%4W$*HXE\"F*$\"3_O1au3gR\"*F-7$7$$\"3-,+++++v7F*$\"3z,++++0]\"* F-Fjjm7$7$$\"3!3+++++]F\"F*Fc[n7$$\"3!>4rZ\\dUL\"F*$\"3g,)=(p+!*4#*F-7 $7$$\"3(4++++++N\"F*$\"3c**********zD#*F-Fi[n7$F_\\n7$$\"3>%>0aF*$\"3v+++++?k)*F-Fabn7$Fgbn7$$\" 3c-$)ycqRf>F*$\"3#>K*[4fqu)*F-7$7$$\"3!3+++++]-#F*$\"3i,++++0[**F-F]cn 7$Fccn7$$\"3*47Q9%=fG?F*$\"3Wx]#3y3@&**F-7$7$$\"3#pWF8Xt42#F*$\"3y,+++ +++5F*Ficn7$7$F`dn$\"3c,++++++5F*7$$\"3'*4'ej>Kx4#F*$\"3(H_)=QP-.5F*7$ 7$$\"3)4++++++5#F*$\"3<+++++G.5F*Fhdn7$7$$\"3_+++++++@F*Faen7$$\"3,O7< 9r\"o;#F*$\"3+b$QW^54,\"F*7$7$$\"3:,+++++v@F*$\"36++++]%=,\"F*Fgen7$F] fn7$$\"3z:2z2(\\eB#F*$\"3][!zi0n)=5F*7$7$$\"3M,+++++]AF*$\"3=+++++]?5F *Fcfn7$Fifn7$$\"30l882,$[I#F*$\"3G<:\\!>$*o-\"F*7$7$$\"3^,+++++DBF*$\" 3>++++]CH5F*F_gn7$Fegn7$$\"3GrxnT%ePP#F*$\"3^T'HWu))\\.\"F*7$7$$\"3o,+ +++++CF*$\"3M+++++3Q5F*F[hn7$Fahn7$$\"3Jwl[S[jUCF*$\"3n-z,YN:V5F*7$7$$ \"3(=+++++]Z#F*$\"3>++++]+Z5F*Fghn7$F]in7$$\"3)RB)=K%f9^#F*$\"3sD!\\PU (Q^5F*7$7$$\"3\\-+++++]DF*$\"3=+++++-c5F*Fcin7$7$$\"3/-+++++]DF*F\\jn7 $$\"3'\\x))\\MK-e#F*$\"3QP;o1-pf5F*7$7$$\"3A-+++++DEF*$\"3K++++]7l5F*F bjn7$Fhjn7$$\"3$Qbrmq`*[EF*$\"3YKzVC<1o5F*7$7$$\"3S-++++++FF*$\"3R++++ +Ku5F*F^[o7$Fd[o7$$\"3k()*)fWOiVlv4[&GF*$\"3w]dF\"* pe$4\"F*7$7$$\"36(H\"\\!*fi0HF*$\"3k,++++++6F*Fb]o7$Fh]o7$$\"3xWf,2[KB HF*$\"3:7ak!fLA5\"F*7$7$$\"3$H+++++]#HF*$\"3M++++]W-6F*F^^o7$Fd^o7$$\" 3WQ&*>[\\y\"*HF*$\"38@1S-M&46\"F*7$7$$\"37.++++++IF*$\"3K++++++76F*Fj^ o-%'COLOURG6&%$RGBG\"\"\"\"\"!Fj_o-F$6$7$7$$Fj_oFj_oF_`o7$$!3+%pkQIu,G 'Fb[m$\"31'\\[a8u+&zF--Ff_o6&Fh_oF_`oF_`o$\"*++++\"!\")-%(SCALINGG6#%, CONSTRAINEDG-%+AXESLABELSG6%%#u1G%#u2G-%%FONTG6#%(DEFAULTG-%%VIEWG6$Ff aoFfao" 1 2 0 1 10 0 2 9 1 4 1 1.000000 45.000000 46.000000 0 0 "Curve 1" "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 779 "DthetaU_r ef:=<|||>;\n DthetaLambda_ref:=<|||>; \nG_:=;\nG_num:=evalf(subs(sol[nsol],valnum,G_) );\ndgtilde_mu1:=diff(g_tilde,mu1); \ndgtilde_mu2:=diff(g_tilde,mu2); \ndgtilde_sigma1:=diff(g_tilde,sigma1);\ndgtilde_sigma2:=diff(g_tilde, sigma2);\nK_:=; \nK_num:=evalf(subs(sol[nsol],valnum,K_));\nE_:=< | >;\nE_num:=evalf(subs(sol[ nsol],valnum,E_));\nF_:=< | | | \+ >;\nF_num:=evalf(subs(sol[nsol ],valnum,F_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DthetaU_refG-%'RT ABLEG6%\"*K[@N\"-%'MATRIXG6#7$7&$!)ax.$*!\"*$!)$HK-$!\")$\"+6`]]:!#6$ \")mKlCF07&$\"+xKEwQ!#5$!+n?so[F6$!+dF<$!+R*R0d\"F<%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%1DthetaLambda_refG-%'RTABLEG6%\"*?IA N\"-%'MATRIXG6#7#7&$!+bl__x!#6$\"+MqWP(*!#7$\"+8N]vRF0$\"+S&46K'F0%'Ma trixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#G_G-%'RTABLEG6%\"*#zD_8-%' MATRIXG6#7$7#,$*(\"\"#\"\"\",&%$mu1GF1*&%#u1GF1%'sigma1GF1F1F1F6F1F17# ,$%'sigma2G!\"\"&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&G_numG-%'RTABLEG6%\"*seAN\"-%'MATRIXG6#7$7#$\"*he(\\R!\"*7#$!\"& \"\"!&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtil de_mu1G,&*&\"\"#\"\"\"%$mu1GF(F(*(F'F(%#u1GF(%'sigma1GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,dgtilde_mu2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma1G,$*(\"\"#\"\"\",&%$mu1GF(*&%#u1GF(%'s igma1GF(F(F(F,F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/dgtilde_sigma 2G,$%#u2G!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K_G-%'RTABLEG6%\" *_fAN\"-%'MATRIXG6#7&7#,&*&\"\"#\"\"\"%$mu1GF1F1*(F0F1%#u1GF1%'sigma1G F1F17#,$*(F0F1,&F2F1*&F4F1F5F1F1F1F4F1F17#!\"\"7#,$%#u2GF<&%'VectorG6# %'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&K_numG-%'RTABLEG6%\"*K gAN\"-%'MATRIXG6#7&7#$\"*Jz[(>!\")7#$!+e(e-C\"!#57#$!\"\"\"\"!7#$!+NT2 ]zF4&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#E_G-%' RTABLEG6%\"*_$R_8-%'MATRIXG6#7$7$,$*&\"\"#\"\"\")%'sigma1GF0F1F1\"\"!7 $F4F4%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&E_numG-%'RTABLEG6 %\"*%oS_8-%'MATRIXG6#7$7$$\"\")!\"#$\"\"!F27$F1F1%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#F_G-%'RTABLEG6%\"*%QV_8-%'MATRIXG6#7$7&,$ *&\"\"#\"\"\"%'sigma1GF1F1,&*(\"\"%F1%#u1GF1F2F1F1*&F0F1%$mu1GF1F1\"\" !F97&F9F9F9!\"\"%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&F_numG -%'RTABLEG6%\"*G*[_8-%'MATRIXG6#7$7&$\"\"%!\"\"$\"+5'e(\\>!\"*$\"\"!F5 F47&F4F4F4$F0F5%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "M:=Matrix(3,3):\nwith(LinearAlgebra):\nM[1..2,1..2]:=-DiagonalMat rix([1,1])+lambda*E_:\nM[1..2,3]:=Transpose(G_):\nM[3,1..2]:=G_:\nB:=M atrix(3,4):\nB[1..2,1..4]:=-lambda*F_:\nB[3,1..4]:=-K_:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "M;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#-%'RTABLEG6%\"*CQDN\"-%'MATRIXG6#7%7%,&\"\"\"!\"\"*(\"\"#F-%'lambdaG F-)%'sigma1GF0F-F-\"\"!,$*(F0F-,&%$mu1GF-*&%#u1GF-F3F-F-F-F3F-F-7%F4F. ,$%'sigma2GF.7%F5F " 0 "" {MPLTEXT 1 0 2 "B;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*/_DN\"-%'M ATRIXG6#7%7&,$*(\"\"#\"\"\"%'lambdaGF/%'sigma1GF/!\"\",$*&F0F/,&*(\"\" %F/%#u1GF/F1F/F/*&F.F/%$mu1GF/F/F/F2\"\"!F;7&F;F;F;F07&,&*&F.F/F:F/F2* (F.F/F8F/F1F/F2,$*(F.F/,&F:F/*&F8F/F1F/F/F/F8F/F2F/%#u2G%'MatrixG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "evalf(subs(sol[nsol],valnum, map(factor,MatrixInverse(M).B)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#- %'RTABLEG6%\"*O!e_8-%'MATRIXG6#7%7&$!+;]x.$*!#6$!+3(GK-$!#5$\"+0`]]:F. $\"+FkKlCF.7&$\"+iKEwQF1$!+-@so[F.$!+eF1$!+S*R0d\"F17&$!+Cl__xF.$ \"+/UWP(*!#7$\"+;N]vRF.$\"+W&46K'F.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "DthetaU_ref;\nDthetaLambda_ref;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*K[@N\"-%'MATRIXG6#7$7&$!)ax.$*!\"*$ !)$HK-$!\")$\"+6`]]:!#6$\")mKlCF.7&$\"+xKEwQ!#5$!+n?so[F4$!+dF:$! +R*R0d\"F:%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"* ?IAN\"-%'MATRIXG6#7#7&$!+bl__x!#6$\"+MqWP(*!#7$\"+8N]vRF.$\"+S&46K'F.% 'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "9 0 0" 0 }{VIEWOPTS 1 1 0 3 2 1804 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 135214832 135223020 135225792 135225872 135225952 135226032 135239352 135240684 135243384 135248928 135253824 135255204 135258036 }{RTABLE M7R0 I6RTABLE_SAVE/135214832X,%)anythingG6"6"[gl!"%!!!#)"#"%$!)ax.$*!"*$"+xKEwQ!#5$! )$HK-$!")$!+n?so[!#6$"+6`]]:F2$!+dF,$")mKlCF)$!+R*R0d"F,6" } {RTABLE M7R0 I6RTABLE_SAVE/135223020X,%)anythingG6"6"[gl!"%!!!#%"""%$!+bl__x!#6$"+MqWP(*!#7$ "+8N]vRF)$"+S&46K'F)6" } {RTABLE M7R0 I6RTABLE_SAVE/135225792X*%)anythingG6"6"[gl!#%!!!"#"#,$*&,&%$mu1G"""*&%#u1GF+%' sigma1GF+F+F+F.F+""#,$%'sigma2G!""6" } {RTABLE M7R0 I6RTABLE_SAVE/135225872X*%)anythingG6"6"[gl!#%!!!"#"#$"*he(\R!"*$!"&""!6" } {RTABLE M7R0 I6RTABLE_SAVE/135225952X*%)anythingG6"6"[gl!#%!!!"%"%,&%$mu1G""#*&%#u1G"""%'sig ma1GF,F),$*&,&F(F,F*F,F,F+F,F)!"",$%#u2GF16" } {RTABLE M7R0 I6RTABLE_SAVE/135226032X*%)anythingG6"6"[gl!#%!!!"%"%$"*Jz[(>!")$!+e(e-C"!#5$!" """!$!+NT2]zF,6" } {RTABLE M7R0 I6RTABLE_SAVE/135239352X,%)anythingG6"6"[gl!"%!!!#%"#"#,$*$%'sigma1G""#F*""!F+F +6" } {RTABLE M7R0 I6RTABLE_SAVE/135240684X,%)anythingG6"6"[gl!"%!!!#%"#"#$"")!"#$""!F+F*F*6" } {RTABLE M7R0 I6RTABLE_SAVE/135243384X,%)anythingG6"6"[gl!"%!!!#)"#"%,$%'sigma1G""#""!,&*&%#u 1G"""F(F.""%%$mu1GF)F*F*F*F*!""6" } {RTABLE M7R0 I6RTABLE_SAVE/135248928X,%)anythingG6"6"[gl!"%!!!#)"#"%$""%!""$""!F+$"+5'e(\>!" *F*F*F*F*$F)F+6" } {RTABLE M7R0 I6RTABLE_SAVE/135253824X,%)anythingG6"6"[gl!"%!!!#*"$"$,&!"""""*&%'lambdaGF)%'s igma1G""#F-""!,$*&,&%$mu1GF)*&%#u1GF)F,F)F)F)F,F)F-F.F(,$%'sigma2GF(F/F5F.6" } {RTABLE M7R0 I6RTABLE_SAVE/135255204X,%)anythingG6"6"[gl!"%!!!#-"$"%,$*&%'lambdaG"""%'sigma1 GF*!"#""!,&%$mu1GF,*&%#u1GF*F+F*F,,$*&F)F*,&F0""%F/""#F*!""F-,$*&,&F/F*F0F*F*F1 F*F,F-F-F*F-F)%#u2G6" } {RTABLE M7R0 I6RTABLE_SAVE/135258036X,%)anythingG6"6"[gl!"%!!!#-"$"%$!+;]x.$*!#6$"+iKEwQ!#5$ !+Cl__xF)$!+3(GK-$F,$!+-@so[F)$"+/UWP(*!#7$"+0`]]:F)$!+eF,$"+;N]vRF)$"+FkK lCF)$!+S*R0d"F,$"+W&46K'F)6" } openturns-1.9/validation/src/SinhTanh.mws000066400000000000000000000045311307543307100206130ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "diff(sinh(sinh(x)),x );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&-%%coshG6#-%%sinhG6#%\"xG\"\" \"-F%F)F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "evalf[25](int( exp(-x^2),x=0..infinity));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":N3\\ O,eFXDpA'))!#D" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "sinh(sinh (5.));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+n+C9%)\"#A" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "solve(sinh(sinh(x))=1e50,x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+:QAXa!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "simplify(diff(tanh(sinh(t)),t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&-%%coshG6#%\"tG\"\"\"-F%6#-%%sinhGF&!\"#" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 79 "convert(simplify(1+tanh(sinh (t))),exp);\nconvert(simplify(1-tanh(sinh(t))),exp);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&-%$expG6#,&*&#\"\"\"\"\"#F*-F%6#%\"tGF*F**&#F*F+F* -F%6#,$F.!\"\"F*F4F*,&*&F)F*F$F*F**&F)F*-F%6#,&*&#F*F+F*F,F*F4*&F)F*F1 F*F*F*F*F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&-%$expG6#,&*&#\"\"\"\" \"#F*-F%6#%\"tGF*!\"\"*&#F*F+F*-F%6#,$F.F/F*F*F*,&*&F1F*-F%6#,&*&F1F*F ,F*F**&#F*F+F*F2F*F/F*F**&F1F*F$F*F*F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "convert(simplify(diff(tanh(sinh(t)),t)),exp);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&*&#\"\"\"\"\"#F'-%$expG6#%\"tGF'F' *&F&F'-F*6#,$F,!\"\"F'F'F',&*&F&F'-F*6#,&*&F&F'F)F'F'*&#F'F(F'F.F'F1F' F'*&F&F'-F*6#,&*&#F'F(F'F)F'F1*&F&F'F.F'F'F'F'!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "evalf[12](tanh(sinh(7.0*0.5)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"-+++++5!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "convert(solve(tanh(sinh(k*h))=1-eps,k),exp);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&-%(arcsinhG6#-%(arctanhG6#,&\"\"\" !\"\"%$epsGF,F,%\"hGF-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 " " }}}}{MARK "8 0 0" 42 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/SinhTanh.txt000066400000000000000000000025031307543307100206210ustar00rootroot00000000000000> diff(sinh(sinh(x)),x); cosh(sinh(x)) cosh(x) > evalf[25](int(exp(-x^2),x=0..infinity)); 0.8862269254527580136490835 > sinh(sinh(5.)); 32 0.8414240067 10 > solve(sinh(sinh(x))=1e50,x); 5.445223815 > simplify(diff(tanh(sinh(t)),t)); cosh(t) -------------- 2 cosh(sinh(t)) > convert(simplify(1+tanh(sinh(t))),exp); > convert(simplify(1-tanh(sinh(t))),exp); exp(1/2 exp(t) - 1/2 exp(-t))/(1/2 exp(1/2 exp(t) - 1/2 exp(-t)) + 1/2 exp(-1/2 exp(t) + 1/2 exp(-t))) exp(-1/2 exp(t) + 1/2 exp(-t))/(1/2 exp(1/2 exp(t) - 1/2 exp(-t)) + 1/2 exp(-1/2 exp(t) + 1/2 exp(-t))) > convert(simplify(diff(tanh(sinh(t)),t)),exp); (1/2 exp(t) + 1/2 exp(-t))/(1/2 exp(1/2 exp(t) - 1/2 exp(-t)) 2 + 1/2 exp(-1/2 exp(t) + 1/2 exp(-t))) > evalf[12](tanh(sinh(7.0*0.5))); 1.00000000000 > convert(solve(tanh(sinh(k*h))=1-eps,k),exp); arcsinh(arctanh(-1 + eps)) - -------------------------- h > openturns-1.9/validation/src/StandardMoments.mw000066400000000000000000011300551307543307100220210ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEoQXJjc2luZUYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRmBvRk8tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0Zob0YyRjVGN0Y5RjtGPUY/RkFGREZmbi1GRzYlUSJpRidGSkZNRmZuLUYsNi9RJWZyb21GJ0Zlb0Znb0Zpb0YyRjVGN0Y5RjtGPUY/RkFGREZmbi1JI21uR0YkNiRRIjBGJ0YvRmZuLUYsNi9RI3RvRidGZW9GZ29GaW9GMkY1RjdGOUY7Rj1GP0ZBRkRGZm4tRmJwNiRRIjVGJ0YvRmZuLUYsNi9RI2RvRidGZW9GZ29GaW9GMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zmbi1GRzYlUSZwcmludEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYlLUZicTYmLUYjNihGW3AtRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJmV2YWxmRidGSkZNLUZicTYkLUYjNiYtRkc2JVEkSW50RidGSkZNLUZicTYkLUYjNi4tSSVtc3VwR0YkNiUtRkc2JVEieEYnRkpGTS1GIzYnRltwRkovJStleGVjdXRhYmxlR0Y0LyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRk0vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZkcC1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUkmbWZyYWNHRiQ2KC1GYnA2JFEiMUYnRi8tRiM2Ki1GRzYlUSNQaUYnL0ZLRjRGL0ZddC1GRzYlUSVzcXJ0RidGW3VGLy1GYnE2JC1GIzYpLUZicTYkLUYjNilGYXMtRiw2LVEiK0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZbdkZjdEZKRmZzRmhzRk1GL0ZddC1GYnE2JC1GIzYpRmN0LUYsNi1RKCZtaW51cztGJ0YvRjJGNUY3RjlGO0Y9Rj9GanVGXHZGYXNGSkZmc0Zoc0ZNRi9GSkZmc0Zoc0ZNRi9GSkZmc0Zoc0ZNLyUubGluZXRoaWNrbmVzc0dGZXQvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaHYvJSliZXZlbGxlZEdGNEZqcUZhcy1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/Rl9vRmFvLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GP0ZqdUZcdkZjdC1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0ZqdUZERmN0RmZzRi9GL0Zmc0YvRi9GZnNGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRmZzRi9GLy1GLDYtUSI7RidGL0YyRl1yRjdGOUY7Rj1GP0ZBRmFvRk9GZm4tRiw2L1Ejb2RGJ0Zlb0Znb0Zpb0YyRjVGN0Y5RjtGPUY/RkFGREZcb0Zmc0Yv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIisrKysrNSEiKg== NyQiIiIkIiIhRiU= NyQiIiMkIisrKysrXSEjNQ== NyQiIiQkIiIhRiU= NyQiIiUkIisrKytdUCEjNQ== NyQiIiYkIiIhRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEqQmVybm91bGxpRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGYG9GTy1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiUtRkc2JVErU3RhdGlzdGljc0YnRkpGTS8lK2V4ZWN1dGFibGVHRjRGL0YvRlxvRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/Rl9vRmFvLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiZGRi1GZm82JC1GIzYlLUkjbW5HRiQ2JFEkMC43RidGL0ZdcEYvRi9GXXBGL0YvRlxvRk9GZm4tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0ZqcUYyRjVGN0Y5RjtGPUY/RkFGREZmbi1GRzYlUSJpRidGSkZNRmZuLUYsNi9RJWZyb21GJ0ZncUZpcUZbckYyRjVGN0Y5RjtGPUY/RkFGREZmbi1GYXE2JFEiMUYnRi9GZm4tRiw2L1EjdG9GJ0ZncUZpcUZbckYyRjVGN0Y5RjtGPUY/RkFGREZmbi1GYXE2JFEiNUYnRi9GZm4tRiw2L1EjZG9GJ0ZncUZpcUZbckYyRjVGN0Y5RjtGPUY/RkFGREZPRmZuLUZHNiVRJnByaW50RidGSkZNLUZmbzYkLUYjNiUtRmZvNiYtRiM2KEZdci1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNidGX3BGanNGXXJGXXBGL0YvRl1wRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZdcEYvRi8tRiw2LVEiO0YnRi9GMkZddEY3RjlGO0Y9Rj9GQUZhb0ZPRmZuLUYsNi9RI29kRidGZ3FGaXFGW3JGMkY1RjdGOUY7Rj1GP0ZBRkRGXG9GXXBGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiIoISIi NyQiIiMkIiIoISIi NyQiIiQkIiIoISIi NyQiIiUkIiIoISIi NyQiIiYkIiIoISIi LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZmbi1JI21vR0YkNi1RIiNGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRJUJldGFGJy8lJ2l0YWxpY0dGNEYvLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGUS8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RicvRktRJXRydWVGJy9GMFEnaXRhbGljRictRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZeb0ZMLUZHNiVRJXdpdGhGJ0ZmbkZobi1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZmbkZobkYvRi9Gam5GTC1GRzYlUShjb252ZXJ0RidGZm5GaG4tRmRvNiQtRiM2KS1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSdNb21lbnRGJ0ZmbkZobi1GZG82JC1GIzYoLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGZm5GaG4tRmRvNiQtRiM2KC1GLDYtUSInRidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjExMTExMTFlbUYnRkRGRkZjcS1GZG82JC1GIzYpLUZHNiVRInJGJ0ZmbkZobi1GLDYtUSIsRidGL0YyL0Y2RmduRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRInRGJ0ZmbkZobi1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRlxzRlxyLyUrZXhlY3V0YWJsZUdGNEYvRi9GXnNGL0YvRl9yLUZHNiVRIm5GJ0ZmbkZobkZec0YvRi9GX3ItRkc2JVEmR0FNTUFGJ0ZKRi9GXnNGL0YvLUYsNi1RIjtGJ0YvRjJGYnJGN0Y5RjtGPUY/RkFGX29GTC1GRzYlUSVtcmVmRidGZm5GaG4tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/Rl1vRl9vRmJwLUZHNiVRJHN1bUYnRmZuRmhuLUZkbzYkLUYjNistSSZtZnJhY0dGJDYoLUYjNjAtSSVtc3VwR0YkNiUtSSNtbkdGJDYkUSIyRidGLy1GIzYlLUZHNiVRImtGJ0ZmbkZobkZmbkZobi8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GXHU2JS1GZG82JC1GIzYmLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GP0Zbc0Zdcy1GX3U2JFEiMUYnRi9GXnNGL0YvLUYjNidGYHNGaHJGZHVGZm5GaG5GZ3VGanVGYHMtRiw2LVEiIUYnRi9GMkY1RjdGOUY7Rj1GP0ZmcS9GRUZncUZqdS1GZG82JC1GIzYnRmVyRmhyRmZ2Rl5zRi9GL0Zbd0ZqdS1GZG82JC1GIzYpRmR1LUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GW3NGXXNGXHJGaHJGZnZGXnNGL0YvRlt3Rl5zRi8tRiM2L0ZkdUZbd0ZqdS1GZG82JEZpdkYvRlt3Rmp1LUZkbzYkLUYjNidGXHJGaHJGZnZGZm5GaG5GL0Zbd0ZqdS1GZG82JC1GIzYpRmR1Rmd3RmVyRmhyRmZ2RmZuRmhuRi9GW3dGZm5GaG4vJS5saW5ldGhpY2tuZXNzR0Zodi8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZqeC8lKWJldmVsbGVkR0Y0Rl9yRmR1LUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXW9GX28tRl91NiRGaXVGLy1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0Zbc0ZERmBzRl5zRi9GL0Zmc0ZMRmJwLUZHNiVRI3J2RidGZm5GaG5GXHRGXnVGanVGYnBGXHEtRmRvNiQtRiM2KEZjcUZGRmNxLUZkbzYkLUYjNidGXnVGX3ItRl91NiRRIjNGJ0YvRl5zRi9GL0Zec0YvRi9GaHJGZnZGam5GTEZicC1GLDYvUSRmb3JGJy8lJWJvbGRHRmduL0YwUSVib2xkRicvJStmb250d2VpZ2h0R0ZbW2xGMkY1RjdGOUY7Rj1GP0ZBRkRGYnAtRkc2JVEiaUYnRmZuRmhuRmJwLUYsNi9RJWZyb21GJ0ZoekZqekZcW2xGMkY1RjdGOUY7Rj1GP0ZBRkRGYnBGZnZGYnAtRiw2L1EjdG9GJ0ZoekZqekZcW2xGMkY1RjdGOUY7Rj1GP0ZBRkRGYnAtRl91NiRRIjVGJ0YvRmJwLUYsNi9RI2RvRidGaHpGanpGXFtsRjJGNUY3RjlGO0Y9Rj9GQUZERkxGYnAtRkc2JVEmcHJpbnRGJ0ZmbkZobi1GZG82JC1GIzYkLUZkbzYmLUYjNipGXltsRl9yLUZHNiVRJmV2YWxmRidGZm5GaG4tRmRvNiQtRiM2JS1GRzYlRmdwRkpGLy1GZG82JC1GIzYmLUZHNiVGaXlGSkYvRl9yLUZHNiVGYFtsRkpGL0YvRi9GL0YvRl9yRmhcbC1GZG82JC1GIzYlLUZHNiVRJXN1YnNGJ0ZmbkZobi1GZG82JC1GIzYwRmBzRl95Rl5bbEZfckZcckZfeUZedUZfckZlckZfeUZnW2xGX3JGaXNGL0YvRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvRmZzRkxGYnAtRiw2L1Ejb2RGJ0ZoekZqekZcW2xGMkY1RjdGOUY7Rj1GP0ZBRkRGam5GXnNGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiotSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJyR0YoISIiLUYkNiNJInRHRigiIiItRiQ2IywmRipGL0kjbnxpckdGKEYvRi8tRiQ2IywmRjNGL0YuRi9GKw== KiYpISIiSSNufGlyRzYiIiIiLUkqaHlwZXJnZW9tR0koX3N5c2xpYkdGJjYlNyRJInJHRiYsJEYlRiQ3I0kidEdGJiIiI0Yn NyUiIiIkISsrKysrPyEjNUYk NyUiIiMkIisrKysrPyEjNUYk NyUiIiQkIStyJkc5ZCkhIzZGJA== NyUiIiUkIityJkc5ZCkhIzZGJA== NyUiIiYkIStpWiE+dyUhIzZGJA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEpQmlub21pYWxGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlRkYtRmZvNiQtRiM2Ji1JI21uR0YkNiRRIzE1RidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRl9xNiRRJDAuN0YnRi9GL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGYXJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjFGJ0YvRl9vLUYsNi9RI3RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGZHJGYnEtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGYnFGZHJGL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZlcUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIisrKytdNSEiKQ== NyQiIiMkIisrKytNNiEiKA== NyQiIiQkIisrK2ZiNyEiJw== NyQiIiUkIisrO1tAOSEiJg== NyQiIiYkIitfQCc9ayIhIiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZDLUkjbWlHRiQ2JVEnTW9tZW50RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNigtRiw2JVEvUmFuZG9tVmFyaWFibGVGJ0YvRjItRjY2JC1GIzYmLUYsNiVRKUJpbm9taWFsRidGL0YyLUY2NiQtRiM2Jy1GLDYlUSJuRidGL0YyLUkjbW9HRiQ2LVEiLEYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0ZTLyUqc3ltbWV0cmljR0ZTLyUobGFyZ2VvcEdGUy8lLm1vdmFibGVsaW1pdHNHRlMvJSdhY2NlbnRHRlMvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GLDYlUSJwRidGL0YyLyUrZXhlY3V0YWJsZUdGU0ZPRk9GY29GT0ZPRkstRiw2JVEia0YnRi9GMkZjb0ZPRk8tRkw2LVEifkYnRk9GUS9GVUZTRlZGWEZaRmZuRmhuRmpuL0Zeb0Zcby1GTDYtUSlhc3N1bWluZ0YnRk9GUUZbcEZWRlhGWkZmbkZobkZqbkZccEZob0ZIRktGaG8tRiw2JVEoaW50ZWdlckYnRi9GMkZLRmhvRkgtRkw2LVEiPkYnRk9GUUZbcEZWRlhGWkZmbkZobi9GW29RLDAuMjc3Nzc3OGVtRicvRl5vRmdwLUkjbW5HRiQ2JFEiMEYnRk9GS0Zgb0ZjcEZpcEZLRmBvLUZMNi1RIjxGJ0ZPRlFGW3BGVkZYRlpGZm5GaG5GZnBGaHAtRmpwNiRRIjFGJ0ZPRktGZW9GS0ZgcEZLRmVvRmNwRmlwLUZMNi1RIjtGJ0ZPRlFGVEZWRlhGWkZmbkZobkZqbkZocEZjb0ZP LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqKilJI190R0YnSSJrR0YnIiIiLUkpYmlub21pYWxHRiQ2JEkjbnxpckdGJ0YrRi0pSSJwR0YnRitGLSksJkYtRi1GMyEiIiwmRjFGLUYrRjZGLS9GKzsiIiFJKWluZmluaXR5R0Yl LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVElQnVyckYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0Zob0YyRjVGN0Y5RjtGPUY/RkFGREZfby1GRzYlUSJpRidGSkZNRl9vLUYsNi9RJWZyb21GJ0Zlb0Znb0Zpb0YyRjVGN0Y5RjtGPUY/RkFGREZfby1JI21uR0YkNiRRIjBGJ0YvRl9vLUYsNi9RI3RvRidGZW9GZ29GaW9GMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRmJwNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGZW9GZ29GaW9GMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZicTYmLUYjNidGW3AtRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJmV2YWxmRidGSkZNLUZicTYkLUYjNiUtRkc2JVEkSW50RidGSkZNLUZicTYkLUYjNiotSSZtZnJhY0dGJDYoLUYjNiotSSVtc3VwR0YkNiUtRkc2JVEieEYnL0ZLRjRGLy1GIzYnRltwRkovJStleGVjdXRhYmxlR0Y0LyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRk0vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZkcC1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZicDYkUSQxLjVGJ0YvRmN0LUZicDYkUSQ0LjVGJ0YvRmN0LUZkczYlLUZHNiVGaHNGSkZNLUYjNilGZnQtRiw2LVEoJm1pbnVzO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZmdS1GYnA2JFEiMUYnRi9GSkZcdEZedEZNRmF0Ri8tRiM2Jy1GZHM2JS1GYnE2JC1GIzYpRmh1LUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GZXVGZ3UtRmRzNiVGXnUtRiM2J0ZmdEZKRlx0Rl50Rk1GYXRGSkZcdEZedEZNRi8tRiM2KUZpdEZjdkZodUZKRlx0Rl50Rk1GYXRGSkZcdEZedEZNLyUubGluZXRoaWNrbmVzc0dGanUvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYHcvJSliZXZlbGxlZEdGNEZqcUZedS1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vRmFwLUYsNi1RIy4uRidGL0YyRjVGN0Y5RjtGPUY/RmV1RkQtRkc2JVEpaW5maW5pdHlGJ0ZKRk1GL0YvRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGXXJGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmVvRmdvRmlvRjJGNUY3RjlGO0Y9Rj9GQUZERmluRlx0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIisrKysrNSEiKg== NyQiIiIkIitdbT4jeiQhIzU= NyQiIiMkIitTTVcrQyEjNQ== NyQiIiQkIisnRzlkRyMhIzU= NyQiIiUkIitOLW1XSyEjNQ== NyQiIiYkIis5KXpmUSghIzU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZHLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEkQ2hpRicvJSdpdGFsaWNHRjRGLy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlEvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnL0ZLUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXm9GTC1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSNudUYnRkpGLy1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXW9GX28tSSNtbkdGJDYkUSQxLjVGJ0YvRmpuRkxGYG8tRiw2L1EkZm9yRicvJSVib2xkR0Znbi9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGY3BGMkY1RjdGOUY7Rj1GP0ZBRkRGYG8tRkc2JVEiaUYnRmZuRmhuRmBvLUYsNi9RJWZyb21GJ0ZgcEZicEZkcEYyRjVGN0Y5RjtGPUY/RkFGREZgby1Gam82JFEiMEYnRi9GYG8tRiw2L1EjdG9GJ0ZgcEZicEZkcEYyRjVGN0Y5RjtGPUY/RkFGREZgby1Gam82JFEiNUYnRi9GYG8tRiw2L1EjZG9GJ0ZgcEZicEZkcEYyRjVGN0Y5RjtGPUY/RkFGREZMRmBvLUZHNiVRJnByaW50RidGZm5GaG4tSShtZmVuY2VkR0YkNiQtRiM2JC1GXHI2Ji1GIzYnRmZwLUYsNi1RIixGJ0YvRjIvRjZGZ25GN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRkc2JVEmZXZhbGZGJ0ZmbkZobi1GXHI2JC1GIzYlLUZHNiVRJEludEYnRmZuRmhuLUZccjYkLUYjNiotSSZtZnJhY0dGJDYoLUYjNistSSVtc3VwR0YkNiUtRkc2JVEieEYnRmZuRmhuLUYjNiRGZnBGLy8lMXN1cGVyc2NyaXB0c2hpZnRHRl5xLUYsNi1RJyZzZG90O0YnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRl50NiUtRkc2JUZidEZKRi8tRiM2KUZjby1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRmR1LUZqbzYkUSIxRidGL0Zmbi8lK2V4ZWN1dGFibGVHRjQvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGaG5GZXRGZ3QtRkc2JVEkZXhwRidGSkYvLUZccjYkLUYjNiUtRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/RmN1RmV1LUZpczYoLUZedDYlRmB0LUYjNictRmpvNiRRIjJGJ0YvRmZuRml1Rlt2RmhuRmV0Rlx3LyUubGluZXRoaWNrbmVzc0dGaHUvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZXcvJSliZXZlbGxlZEdGNEYvRi9GZ3QtRl50NiVGXnctRiM2KUZmdUZgdS1GaXM2KEZjb0Zcd0Zhd0Zjd0Zmd0Zod0ZmbkZpdUZbdkZobkZldEYvLUYjNiUtRkc2JVEmR0FNTUFGJ0ZKRi8tRlxyNiQtRiM2JEZeeEYvRi9GL0Zhd0Zjd0Zmd0Zod0ZkckZgdC1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/Rl1vRl9vRlxxLUYsNi1RIy4uRidGL0YyRjVGN0Y5RjtGPUY/RmN1RkQtRkc2JVEpaW5maW5pdHlGJ0ZmbkZobkYvRi9GL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZnckY3RjlGO0Y9Rj9GQUZfb0ZMRmBvLUYsNi9RI29kRidGYHBGYnBGZHBGMkY1RjdGOUY7Rj1GP0ZBRkRGam5GaXVGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIisrKysrNSEiKg== NyQiIiIkIis/J1xnLyIhIio= NyQiIiMkIissKysrOiEiKg== NyQiIiQkIiteUzc6RSEiKg== NyQiIiUkIistKytdXyEiKg== NyQiIiYkIitCZSFvPCIhIik= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEqQ2hpU3F1YXJlRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiQtRkc2JVErU3RhdGlzdGljc0YnRkpGTUYvRi9GaW5GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRmZvNiQtRiM2JUZGLUZmbzYkLUYjNiQtSSNtbkdGJDYkUSQxLjVGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmhxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRltyLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GRzYlUSdNb21lbnRGJ0ZKRk0tRmZvNiQtRiM2JkZdcEZoc0ZbckYvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRlt0RjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0ZlcUZncUZpcUYyRjVGN0Y5RjtGPUY/RkFGREZpbi8lK2V4ZWN1dGFibGVHRjRGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIisrKysrOiEiKg== NyQiIiMkIisrKytdXyEiKg== NyQiIiQkIisrK10oKUchIik= NyQiIiUkIisrXWlsQCEiKA== NyQiIiYkIitdUE1kPyEiJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZLLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEmRGlyYWNGJy8lJ2l0YWxpY0dGNEYvLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGUS8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RicvRktRJXRydWVGJy9GMFEnaXRhbGljRictRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZeb0ZMLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZmbkZobi1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZmbkZobkYvRi9Gam5GTC1GRzYlUSR2YWxGJ0ZmbkZobi1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXW9GX28tSSNtbkdGJDYkUSQyLjNGJ0YvRmpuRkxGYG8tRiw2L1EkZm9yRicvJSVib2xkR0Znbi9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGXnFGMkY1RjdGOUY7Rj1GP0ZBRkRGYG8tRkc2JVEiaUYnRmZuRmhuRmBvLUYsNi9RJWZyb21GJ0ZbcUZdcUZfcUYyRjVGN0Y5RjtGPUY/RkFGREZgby1GZXA2JFEiMEYnRi9GYG8tRiw2L1EjdG9GJ0ZbcUZdcUZfcUYyRjVGN0Y5RjtGPUY/RkFGREZgby1GZXA2JFEiNUYnRi9GYG8tRiw2L1EjZG9GJ0ZbcUZdcUZfcUYyRjVGN0Y5RjtGPUY/RkFGREZMRmBvLUZHNiVRJnByaW50RidGZm5GaG4tRmdvNiQtRiM2JC1GZ282Ji1GIzYmRmFxLUYsNi1RIixGJ0YvRjIvRjZGZ25GN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictSSVtc3VwR0YkNiVGXnAtRiM2JUZhcUZmbkZobi8lMXN1cGVyc2NyaXB0c2hpZnRHRmlxRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZhc0Y3RjlGO0Y9Rj9GQUZfb0ZMRmBvLUYsNi9RI29kRidGW3FGXXFGX3FGMkY1RjdGOUY7Rj1GP0ZBRkRGam4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIiM1ISIi NyQiIiIkIiNCISIi NyQiIiMkIiRIJiEiIw== NyQiIiQkIiZuQCIhIiQ= NyQiIiUkIidUKXojISIl NyQiIiYkIihWalYnISIm LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEtRXBhbmVjaG5pa292RicvJSdpdGFsaWNHRjRGLy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlEvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnL0ZLUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXm9GTC1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GLDYvUSRmb3JGJy8lJWJvbGRHRmduL0YwUSVib2xkRicvJStmb250d2VpZ2h0R0Zpb0YyRjVGN0Y5RjtGPUY/RkFGREZgby1GRzYlUSJpRidGZm5GaG5GYG8tRiw2L1ElZnJvbUYnRmZvRmhvRmpvRjJGNUY3RjlGO0Y9Rj9GQUZERmBvLUkjbW5HRiQ2JFEiMEYnRi9GYG8tRiw2L1EjdG9GJ0Zmb0Zob0Zqb0YyRjVGN0Y5RjtGPUY/RkFGREZgby1GY3A2JFEiNUYnRi9GYG8tRiw2L1EjZG9GJ0Zmb0Zob0Zqb0YyRjVGN0Y5RjtGPUY/RkFGREZMRmBvLUZHNiVRJnByaW50RidGZm5GaG4tSShtZmVuY2VkR0YkNiQtRiM2JC1GY3E2Ji1GIzYnRlxwLUYsNi1RIixGJ0YvRjIvRjZGZ25GN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRkc2JVEmZXZhbGZGJ0ZmbkZobi1GY3E2JC1GIzYlLUZHNiVRJGludEYnRmZuRmhuLUZjcTYkLUYjNistSSZtZnJhY0dGJDYoLUYjNigtSSVtc3VwR0YkNiUtRkc2JVEieEYnRkpGLy1GIzYlRlxwRmZuRmhuLyUxc3VwZXJzY3JpcHRzaGlmdEdGZXAtRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GY3E2JC1GIzYmLUZjcDYkUSIxRidGLy1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRlx1LUZlczYlLUZHNiVGaXNGZm5GaG4tRiM2JS1GY3A2JFEiMkYnRi9GZm5GaG5GXHRGL0YvRl50LUZjcDYkUSIzRidGL0YvLUYjNiUtRmNwNiRRIjRGJ0YvRmZuRmhuLyUubGluZXRoaWNrbmVzc0dGZ3QvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGY3YvJSliZXZlbGxlZEdGNEZbckZgdS1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/Rl1vRl9vLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GP0ZbdUZddUZldC1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0ZbdUZERmV0Ri9GL0YvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRl5yRjdGOUY7Rj1GP0ZBRl9vRkxGYG8tRiw2L1Ejb2RGJ0Zmb0Zob0Zqb0YyRjVGN0Y5RjtGPUY/RkFGREZqbi8lK2V4ZWN1dGFibGVHRjRGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIiIiRiM= NyQiIiIkIiIhRiU= NyQiIiMkIisrKysrPyEjNQ== NyQiIiQkIiIhRiU= NyQiIiUkIityJkc5ZCkhIzY= NyQiIiYkIiIhRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEsRXhwb25lbnRpYWxGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlRkYtRmZvNiQtRiM2JC1JI21uR0YkNiRRIjFGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmhxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vRl5xRl9vLUYsNi9RI3RvRidGZXFGZ3FGaXFGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGZXFGZ3FGaXFGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGW3ItRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmVzRltyRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGaHNGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiJGIw== NyQiIiNGIw== NyQiIiQiIic= NyQiIiUiI0M= NyQiIiYiJD8i LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEvRmlzaGVyU25lZGVjb3JGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlLUZHNiVRJ0ZSYXRpb0YnL0ZLRjRGLy1GZm82JC1GIzYmLUkjbW5HRiQ2JFEkNS41RidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRmNxNiRRJTEwLjVGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmVyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmJyRmRyRmZyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZjcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRmJyRmRyRmZyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZjcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmJyRmRyRmZyRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRmhyRmZxLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmZxRmhyRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGaXFGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmJyRmRyRmZyRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIis9VEhONyEiKg== NyQiIiMkIitGQzVARiEiKg== NyQiIiQkIitPbm8nNCIhIik= NyQiIiUkIis8TiE0aiohIik= NyQiIiYkIismKkhIa1whIic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEmR2FtbWFGJy8lJ2l0YWxpY0dGNEYvLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGUS8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RicvRktRJXRydWVGJy9GMFEnaXRhbGljRictRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZeb0ZMLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZmbkZobi1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZmbkZobkYvRi9Gam5GTC1GRzYlUSNydkYnRmZuRmhuLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zdb0Zfby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRmZuRmhuLUZnbzYkLUYjNiVGRi1GZ282JC1GIzYmLUkjbW5HRiQ2JFEiMUYnRi8tRiw2LVEiLEYnRi9GMi9GNkZnbkY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GYHE2JFEkMS41RidGL0YvRi9GL0YvRmpuRkxGYG8tRiw2L1EkZm9yRicvJSVib2xkR0Znbi9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGYG8tRkc2JVEiaUYnRmZuRmhuRmBvLUYsNi9RJWZyb21GJ0ZfckZhckZjckYyRjVGN0Y5RjtGPUY/RkFGREZgb0ZfcUZgby1GLDYvUSN0b0YnRl9yRmFyRmNyRjJGNUY3RjlGO0Y9Rj9GQUZERmBvLUZgcTYkUSI1RidGL0Zgby1GLDYvUSNkb0YnRl9yRmFyRmNyRjJGNUY3RjlGO0Y9Rj9GQUZERkxGYG8tRkc2JVEmcHJpbnRGJ0ZmbkZobi1GZ282JC1GIzYkLUZnbzYmLUYjNidGZXJGY3EtRkc2JVEnTW9tZW50RidGZm5GaG4tRmdvNiQtRiM2JkZecEZjcUZlckYvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRmZxRjdGOUY7Rj1GP0ZBRl9vRkxGYG8tRiw2L1Ejb2RGJ0ZfckZhckZjckYyRjVGN0Y5RjtGPUY/RkFGREZqbi8lK2V4ZWN1dGFibGVHRjRGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiM6ISIi NyQiIiMkIiR2JCEiIw== NyQiIiQkIiZESiIhIiQ= NyQiIiUkIidEMWYhIiU= NyQiIiYkIil2VltLISIm LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZPLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEqR2VvbWV0cmljRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiQtRkc2JVErU3RhdGlzdGljc0YnRkpGTUYvRi9GaW5GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRmZvNiQtRiM2JUZGLUZmbzYkLUYjNiQtSSNtbkdGJDYkUSQwLjdGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmhxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRltyLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GRzYlUSRzdW1GJy9GS0Y0Ri8tRmZvNiQtRiM2LS1GRzYlUTRQcm9iYWJpbGl0eUZ1bmN0aW9uRidGYXRGLy1GZm82JC1GIzYoLUZHNiVGX3BGYXRGL0Zocy1GRzYlUSJrRidGYXRGLy1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRmZ1RmFyRi9GLy1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUklbXN1cEdGJDYlRl91LUYjNiVGW3JGSkZNLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0Zocy1GRzYlRmF1RkpGTS1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZfcTYkRmJ2Ri8tRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GZXVGRC1GRzYlUSlpbmZpbml0eUYnRkpGTUYvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRlt0RjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0ZlcUZncUZpcUYyRjVGN0Y5RjtGPUY/RkFGREZpbkZPRl9vLUZcdjYlLUZmbzYkLUYjNiVGXnEvJStleGVjdXRhYmxlR0Y0Ri9GLy1GIzYmLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GP0ZldUZndUZhckZKRk1GYHZGYnhGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIitIOWRHOSEiKg== NyQiIiMkIitDNzFgRSEiKg== NyQiIiQkIitTW1F3bSEiKg== NyQiIiUkIitoUlw5QSEiKQ== NyQiIiYkIitAeWwjPiohIik= JCIrSDlkRzkhIio= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEnR3VtYmVsRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiQtRkc2JVErU3RhdGlzdGljc0YnRkpGTUYvRi9GaW5GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRmZvNiQtRiM2JUZGLUZmbzYkLUYjNiYtSSNtbkdGJDYkUSQwLjBGJ0YvLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GX3E2JFEkMS4wRidGL0YvRi9GL0YvRmluRk9GX28tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0ZhckYyRjVGN0Y5RjtGPUY/RkFGREZfby1GRzYlUSJpRidGSkZNRl9vLUYsNi9RJWZyb21GJ0ZeckZgckZickYyRjVGN0Y5RjtGPUY/RkFGREZfby1GX3E2JFEiMUYnRi9GX28tRiw2L1EjdG9GJ0ZeckZgckZickYyRjVGN0Y5RjtGPUY/RkFGREZfby1GX3E2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0ZeckZgckZickYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZmbzYkLUYjNiQtRmZvNiYtRiM2J0ZkckZicS1GRzYlUSdNb21lbnRGJ0ZKRk0tRmZvNiQtRiM2JkZdcEZicUZkckYvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRmVxRjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0ZeckZgckZickYyRjVGN0Y5RjtGPUY/RkFGREZpbi8lK2V4ZWN1dGFibGVHRjRGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIitcbTpzZCEjNQ== NyQiIiMkIisiKj42eT4hIio= NyQiIiQkIitkVyhbVyYhIio= NyQiIiUkIis0dTljQiEiKQ== NyQiIiYkIiskMyVSeTYhIig= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZJLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEqSGlzdG9ncmFtRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSJmRidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUSpwaWVjZXdpc2VGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2Zm4tRkc2JVEieEYnRkpGTS1GLDYtUSI8RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZqcC1JI21uR0YkNiRRJDEuMEYnRi8tRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZdcTYkUSQwLjBGJ0YvRmBxRmBwRmNwRmZwRlxxLUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GaXBGW3EtRl1xNiRRKTAuNTI2MzE2RidGL0ZgcS1GXXE2JFEoMC4xMTg3NUYnRi9GYHFGYHBGY3BGZnBGXHFGaXFGXHJGaXEtRl1xNiRRKTAuMzY4NDIxRidGL0ZgcS1GXXE2JFEoMC4zNTYyNUYnRi9GYHFGYHBGY3BGZnBGXHFGaXFGXHJGaXFGYnJGaXEtRl1xNiRRKTAuNjMxNTc5RidGL0ZgcS1GXXE2JFEoMC44MzEyNUYnRi9GYHFGYHBGY3BGZnBGXHFGaXFGXHJGaXFGYnJGaXFGaHJGaXEtRl1xNiRRKTAuNDczNjg0RidGL0ZgcS1GXXE2JFEoMC41OTM3NUYnRi9GYHFGZnEvJStleGVjdXRhYmxlR0Y0Ri9GL0ZpbkZPLUZQNiZGUkZVRlcvRlpRJWF1dG9GJ0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmB0RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRl10Rl90RmF0RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZdcTYkUSIwRidGL0Zfby1GLDYvUSN0b0YnRl10Rl90RmF0RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZdcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRl10Rl90RmF0RjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRlxwNiQtRiM2JC1GXHA2Ji1GIzYnRmN0RmBxLUZHNiVRJmV2YWxmRidGSkZNLUZccDYkLUYjNiUtRkc2JVEkaW50RidGSkZNLUZccDYkLUYjNi0tSSVtc3VwR0YkNiUtRkc2JUZicC9GS0Y0Ri8tRiM2J0ZjdEZKRmRzLyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRk0vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZbdS1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZERmJvRmBxRmBwLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm9GZnAtRkc2JVEpaW5maW5pdHlGJ0ZKRk0tRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GaXBGREZheEYvRi9GL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZjcUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGXXRGX3RGYXRGMkY1RjdGOUY7Rj1GP0ZBRkRGaW5GZHNGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIitdIyoqKioqKiohIzU= NyQiIiIkIisqeSU9NkMhIzU= NyQiIiMkIitXIjNrZCMhIzU= NyQiIiQkIis7RS0uNyEjNQ== NyQiIiUkIispSEJiWCIhIzU= NyQiIiYkIisxKHpnJnohIzY= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZZLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEuSW52ZXJzZU5vcm1hbEYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEiZkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tSSVtc3VwR0YkNiUtSShtZmVuY2VkR0YkNiQtRiM2Iy1JJm1mcmFjR0YkNigtSSNtbkdGJDYkUSQwLjVGJ0YvLUYjNictRmRwNiRRIjJGJ0YvLUYsNi1RJyZzZG90O0YnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEjUGlGJy9GS0Y0Ri9GXHEtRmlvNiUtRkc2JVEieEYnRkpGTS1GIzYjLUZkcDYkUSIzRidGLy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRicvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmVyLyUpYmV2ZWxsZWRHRjRGLy1GIzYjLUZhcDYoLUZkcDYkRmJyRi8tRiM2I0ZpcEZgckZjckZmckZockZdckZccS1GRzYlUSRleHBGJ0ZicUYvLUZccDYkLUYjNiQtRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRl10LUZhcDYoLUYjNiVGY3BGXHEtRmlvNiUtRlxwNiQtRiM2JUZlcS1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/Rlx0Rl50RmlwRi9GYHNGXXItRiM2J0ZpcEZccS1GaW82JUZpcEZgc0ZdckZccUZlcUZgckZjckZmckZockYvRmluRk9GX28tRkc2JVEkbWdmRidGSkZNRmVvRmJzLUZccDYkLUYjNiUtRmFwNigtRkc2JVEnbGFtYmRhRidGYnFGLy1GIzYjLUZHNiVRI211RidGYnFGL0ZgckZjckZmckZockZccS1GXHA2JC1GIzYmRl5zRml0LUZHNiVRJXNxcnRGJ0ZicUYvLUZccDYkLUYjNiVGXnNGaXQtRmFwNigtRiM2J0ZpcEZccS1GaW82JS1GRzYlUSUmbXU7RidGYnFGL0Zgc0ZdckZccS1GRzYlUSJ0RidGSkZNLUYjNiNGaXVGYHJGY3JGZnJGaHJGL0YvRi8tRiw2LVEiO0YnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBRl5vRk9GX28tRkc2JVElZGlmZkYnRkpGTS1GXHA2JC1GIzYlRmB1LUYsNi1RIixGJ0YvRjJGXXhGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRidGZXdGL0Zqd0ZPRl9vRl54LUZccDYkLUYjNidGYHVGZXhGZXctRiw2LVEiJEYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkRGaXBGL0Zqd0ZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGZ3lGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGZHlGZnlGaHlGMkY1RjdGOUY7Rj1GP0ZBRkRGX29GXnNGX28tRiw2L1EjdG9GJ0ZkeUZmeUZoeUYyRjVGN0Y5RjtGPUY/RkFGREZfby1GZHA2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0ZkeUZmeUZoeUYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZccDYkLUYjNiMtRlxwNiYtRiM2J0ZqeUZleC1GRzYlUSZldmFsZkYnRkpGTS1GXHA2JC1GIzYkLUZHNiVRJGludEYnRkpGTS1GXHA2JC1GIzYrLUZpbzYlLUZHNiVGZ3FGYnFGLy1GIzYjRmp5Rl1yRlxxRmJvRmV4RmVxLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRmRwNiRGX3JGLy1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0ZcdEZELUZHNiVRKWluZmluaXR5RidGSkZNRi9GLy1GRzYjUSFGJ0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GandGT0Zfby1GLDYvUSNvZEYnRmR5RmZ5Rmh5RjJGNUY3RjlGO0Y9Rj9GQUZERmlu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMqKEknbGFtYmRhR0YnIiIiLCZGK0YrKiQsJkYrRisqKEkjbXVHRiciIiNJInRHRidGK0YqISIiISIjI0YrRjFGM0YrRjBGMw== KigsJiIiIkYkKihJI211RzYiIiIjSSJ0R0YnRiRJJ2xhbWJkYUdGJyEiIiEiIyNGK0YoRiZGJC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjKihGKkYkLCZGJEYkKiRGIyNGJEYoRitGJEYmRitGJA== LCYqKiwmIiIiRiUqKEkjbXVHNiIiIiNJInRHRihGJUknbGFtYmRhR0YoISIiISIjIyEiJEYpRiciIiQtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IyooRitGJSwmRiVGJSokRiQjRiVGKUYsRiVGJ0YsRiVGK0YsRiUqKEYkRixGJ0YpRjFGJUYl NyQiIiIkIiIjIiIh NyQiIiMkIiM/IiIh NyQiIiQkIiQpWyIiIQ== NyQiIiUkIiYrJz4iIiE= NyQiIiYkIihfJio0IiIiIQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEoTGFwbGFjZUYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYmLUkjbW5HRiQ2JFEkMC4wRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRl9xNiRRJDEuMEYnRi9GL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGYXJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjFGJ0YvRl9vLUYsNi9RI3RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGZHJGYnEtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGYnFGZHJGL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZlcUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiIhRiU= NyQiIiMkRiMiIiE= NyQiIiQkIiIhRiU= NyQiIiUkIiNDIiIh NyQiIiYkIiIhRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEpTG9naXN0aWNGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlRkYtRmZvNiQtRiM2Ji1JI21uR0YkNiRRJDAuMEYnRi8tRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZfcTYkUSQxLjBGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmFyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRl5yRmByRmJyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRl5yRmByRmJyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRl5yRmByRmJyRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRmRyRmJxLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmJxRmRyRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGZXFGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRl5yRmByRmJyRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiIhRiU= NyQiIiMkIitNIm8pKkckISIq NyQiIiQkIiIjISM1 NyQiIiUkIisiZWRkYSUhIik= NyQiIiYkIiRSJiEjNg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEqTG9nTm9ybWFsRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiQtRkc2JVErU3RhdGlzdGljc0YnRkpGTUYvRi9GaW5GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRmZvNiQtRiM2JUZGLUZmbzYkLUYjNictRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRmJxLUkjbW5HRiQ2JFEkMS4wRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRmVxNiRRJDEuNUYnRi9GL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGZ3JGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGZHJGZnJGaHJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRmVxNiRRIjFGJ0YvRl9vLUYsNi9RI3RvRidGZHJGZnJGaHJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRmVxNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGZHJGZnJGaHJGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGanJGaHEtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGaHFGanJGL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZbckY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGZHJGZnJGaHJGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIitgJVtKOCIhIio= NyQiIiMkIisoUlwjPTchIik= NyQiIiQkIitwIltFQyIhIic= NyQiIiUkIisoRy9FPyIhIiQ= NyQiIiYkIispKjNCLzYiIiI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZkby1JI21vR0YkNi1RIiNGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRK0xvZ1VuaWZvcm1GJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJWFMb2dGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZccC1JI21uR0YkNiRRJDAuNUYnRi9GaW5GT0Zfby1GRzYlUSViTG9nRidGSkZNRmVvLUZfcDYkUSQxLjVGJ0YvRmluRk9GX28tRkc2JVEiZkYnRkpGTUZlby1JJm1mcmFjR0YkNigtRiM2JS1GX3A2JFEiMUYnRi9GSkZNLUYjNiYtRkc2JVEieEYnRkpGTS1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUkobWZlbmNlZEdGJDYkLUYjNiZGYnAtRiw2LVEoJm1pbnVzO0YnRi9GMkY1RjdGOUY7Rj1GP0ZbcEZdcEZib0YvRi9GLy8lLmxpbmV0aGlja25lc3NHRmJxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmdyLyUpYmV2ZWxsZWRHRjRGaW5GTy1GUDYmRlJGVUZXL0ZaUSVhdXRvRidGX28tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0Zmc0YyRjVGN0Y5RjtGPUY/RkFGREZfby1GRzYlUSJpRidGSkZNRl9vLUYsNi9RJWZyb21GJ0Zjc0Zlc0Znc0YyRjVGN0Y5RjtGPUY/RkFGREZfby1GX3A2JFEiMEYnRi9GX28tRiw2L1EjdG9GJ0Zjc0Zlc0Znc0YyRjVGN0Y5RjtGPUY/RkFGREZfby1GX3A2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0Zjc0Zlc0Znc0YyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZccjYkLUYjNiQtRlxyNiYtRiM2J0Zpcy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRkc2JVEmZXZhbGZGJ0ZKRk0tRlxyNiQtRiM2JS1GRzYlUSRpbnRGJ0ZKRk0tRlxyNiQtRiM2Ly1JJW1zdXBHRiQ2JS1GRzYlRmdxL0ZLRjRGLy1GIzYkRmlzRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZhdEZocUZocEZmdUZlcS1GLDYtUSI9RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRJGV4cEYnRl93Ri8tRlxyNiQtRiM2JEZib0YvRi8tRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GW3BGREZndy1GXHI2JC1GIzYkRmJwRi9GLy1GRzYjUSFGJ0YvRi9GL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZpdUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGY3NGZXNGZ3NGMkY1RjdGOUY7Rj1GP0ZBRkRGaW5GT0Zfb0Zib0Zlby1GLDYtUSInRidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjExMTExMTFlbUYnRkRGYm9GZHlGaW5GT0Zfb0ZicEZlb0ZkeUZicEZkeUZpbkZPRl9vRmN2LUZccjYkLUYjNi8tRlt3NiVGZXEtRiM2JS1GRzYlUSJuRidGSkZNRkpGTUZid0ZocS1GXHE2KC1GIzYkRmBxRi9GY3FGY3JGZXJGaHJGanJGZnVGZXFGZHdGZ3ctRlxyNiQtRiM2JUZiby8lK2V4ZWN1dGFibGVHRjRGL0YvRl54Rmd3LUZccjYkLUYjNiVGYnBGXFtsRi9GL0ZcW2xGL0YvRl55RlxbbEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIisrKysrNSEiKg== NyQiIiIkIiswI3p2JD4hIio= NyQiIiMkIitxVlRIXCEiKg== NyQiIiQkIismb21sXCIhIik= NyQiIiUkIitFI282LyYhIik= NyQiIiYkIitILid6IT0hIig= KigsJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJI258aXJHRikiIiJJJWFMb2dHRilGLUYtLUYlNiMqJkYsRi1JJWJMb2dHRilGLSEiIkYtRixGMywmRjJGM0YuRi1GMw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZccC1JI21vR0YkNi1RIn5GJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRI20xRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZTLUZHNiVRJGludEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYuLUklbXN1cEdGJDYlLUZHNiVRInhGJ0ZKRk0tRiM2JC1GRzYjUSFGJ0YvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUkmbWZyYWNHRiQ2KC1GIzYkLUkjbW5HRiQ2JFEiMUYnRi9GLy1GIzYmRmpuRmVvLUZZNiQtRiM2Ji1GRzYlUSViTG9nRidGSkZNLUYsNi1RKCZtaW51cztGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGXnEtRkc2JVElYUxvZ0YnRkpGTUYvRi9GLy8lLmxpbmV0aGlja25lc3NHRmBwLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmdxLyUpYmV2ZWxsZWRHRjQtRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnRmpuLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GUkZULUZHNiVRJGV4cEYnL0ZLRjRGLy1GWTYkLUYjNiRGYHFGL0YvLUYsNi1RIy4uRidGL0YyRjVGN0Y5RjtGPUY/Rl1xRkRGZXItRlk2JC1GIzYkRmdwRi9GL0YvRi8tRiw2LVEiO0YnRi9GMkZfckY3RjlGO0Y9Rj9GQUZULUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRidGKy1GRzYlUSNtMkYnRkpGTUZPRlUtRlk2JC1GIzYuLUZobjYlRmpuLUYjNiQtRl5wNiRRIjJGJ0YvRi9GYm9GZW9GaG9GXHJGam5GYnJGZXJGaXJGXXNGZXJGYHNGL0YvRmRzRmdzRistRkc2JVEjbTNGJ0ZKRk1GT0ZVLUZZNiQtRiM2Li1GaG42JUZqbi1GIzYkLUZecDYkUSIzRidGL0YvRmJvRmVvRmhvRlxyRmpuRmJyRmVyRmlyRl1zRmVyRmBzRi9GL0Zkc0Znc0YrLUZHNiVRI200RidGSkZNRk9GVS1GWTYkLUYjNi4tRmhuNiVGam4tRiM2JC1GXnA2JFEiNEYnRi9GL0Zib0Zlb0Zob0ZcckZqbkZickZlckZpckZdc0ZlckZgc0YvRi9GZHNGZ3NGKy1GRzYlUSJ2RidGSkZNRk8tRkc2JVEoYWxnc3Vic0YnRkpGTS1GWTYkLUYjNitGZXItRlk2JC1GIzYlRmdwLyUrZXhlY3V0YWJsZUdGNEYvRi9GYnItRkc2JVEiYkYnRkpGTUZcckZhdy1GWTYkLUYjNitGZXItRlk2JC1GIzYlRmBxRlx4Ri9GL0Zici1GRzYlUSJhRidGSkZNRlxyLUZHNiVRJ2ZhY3RvckYnRkpGTS1GWTYkLUYjNiYtRkc2JVElc3Vic0YnRkpGTS1GWTYkLUYjNjItRmhuNiVGam4tRiM2JUZfdUZKRk1GYm9GYnJGZHRGXHJGam5GYnJGRkZcci1GRzYlUSNtdUYnRmhyRi9GYnJGRkZcci1GRzYlUSdleHBhbmRGJ0ZKRk0tRlk2JC1GIzYlLUZobjYlLUZZNiQtRiM2J0ZqbkZqcEZeekZceEYvRi9GXHpGYm9GXHhGL0YvRlx4Ri9GL0ZceEYvRi9GXHhGL0YvRlx4Ri9GL0Zkc0YrRmdzLUZHNiVRI3MzRidGSkZNRk9GXHktRlk2JC1GIzYmLUZHNiVRKXNpbXBsaWZ5RidGSkZNLUZZNiQtRiM2Ji1GaW82KC1GIzYmRmF3LUZZNiQtRiM2KkZlckZgc0ZickZeeEZcckZhdy1GWTYkLUYjNipGZXJGaXJGYnJGaXhGXHJGXHktRlk2JC1GIzYlRmN5LUZZNiQtRiM2NS1GaG42JUZqbi1GIzYlRl12RkpGTUZib0ZickZidUZcckZbdUZickZkdEZcckZqbkZickZGRlxyRl56RmJyRkZGXHJGYXotRlk2JC1GIzYkLUZobjYlLUZZNiQtRiM2JkZqbkZqcEZeekYvRi9GW3ZGYm9GL0YvRi9GL0YvRi9GL0YvRi9GL0ZceEYvLUYjNiUtRmhuNiVGXnctRiM2JS1GaW82KEZddkZcekZjcUZlcUZocUZqcUZKRk1GYm9GSkZNRmNxRmVxRmhxRmpxRl9vRlx4Ri9GL0ZceEYvRi8tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GP0ZSRlRGK0YrRitGK0Zncy1GRzYlUSNzNEYnRkpGTUZPRlx5LUZZNiQtRiM2JUZlW2wtRlk2JC1GIzYlLUZpbzYoLUYjNiVGYXctRlk2JC1GIzYqRmVyRmBzRmJyRl54RlxyRmF3LUZZNiQtRiM2KkZlckZpckZickZpeEZcckZceS1GWTYkLUYjNiVGY3ktRlk2JC1GIzY5Rmd2RmJyRmB2RlxyRml1RmJyRmJ1RlxyRlt1RmJyRmR0RlxyRmpuRmJyRkZGXHJGXnpGYnJGRkZcckZhekZkXWxGL0YvRi9GL0YvRi9GL0YvRi8tRiM2JC1GaG42JUZed0ZddUZib0YvRmNxRmVxRmhxRmpxRl9vRi9GL0YvRi9GZl5sRmdzRistRkc2JVEmZXZhbGZGJ0ZKRk0tRlk2JC1GIzYmRmN5LUZZNiQtRiM2OEZpeEZickZlckZpckZcckZeeEZickZlckZgc0ZcckZgcUZici1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXXFGX3EtRl5wNiRRJDAuNUYnRi9GXHJGZ3BGYnItRl5wNiRRJDEuNUYnRi9GXHItRlk2Ji1GIzYnRl5bbEZcckZpXmxGXHhGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRlx4Ri9GL0ZceEYvRi9GZHNGZ3NGKy1GRzYlUSV3aXRoRidGSkZNLUZZNiQtRiM2JS1GRzYlUShjb2RlZ2VuRidGSkZNRlx4Ri9GL0Zkc0Znc0YrLUZHNiVRKWFsZ29Ta2V3RidGSkZNRk8tRkc2JVEiQ0YnRkpGTS1GWTYkLUYjNidGXltsRlxyLUZHNiVRKm9wdGltaXplZEYnRkpGTUZceEYvRi9GZHNGK0Znc0YrLUZHNiVRKWFsZ29LdXJ0RidGSkZNRk9GZ2NsLUZZNiQtRiM2JkZpXmxGXHJGXmRsRi9GL0Zkc0YrRitGXHhGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYsJkklYkxvZ0c2IiIiIkklYUxvZ0dGJSEiIkYoLCYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2I0YkRiYtRis2I0YnRihGJg== LCQqKCMiIiIiIiNGJSwmSSViTG9nRzYiRiVJJWFMb2dHRikhIiJGKywmKiQpLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiNGKEYmRiVGJSokKS1GMDYjRipGJkYlRitGJUYl LCQqKCMiIiIiIiRGJSwmSSViTG9nRzYiRiVJJWFMb2dHRikhIiJGKywmKiQpLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiNGKEYmRiVGJSokKS1GMDYjRipGJkYlRitGJUYl LCQqKCMiIiIiIiVGJSwmSSViTG9nRzYiRiVJJWFMb2dHRikhIiJGKywmKiQpLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiNGKEYmRiVGJSokKS1GMDYjRipGJkYlRitGJUYl LCQqKiMiIiIiIiNGJSksJkklYkxvZ0c2IiEiIkklYUxvZ0dGKkYlRiZGKywmSSNifGlyR0YqRitJI2F8aXJHRipGJUYlLC4qJkYmRiVGL0YlRisqJkYsRiVGLkYlRiUqJkYmRiVGLkYlRiUqJkYsRiVGL0YlRiUqJkYpRiVGLkYlRisqJkYpRiVGL0YlRitGJUYl NyQkIiteWSFSdichIzUkIitcVzpJaUYl Nz1JIkNHNiJJJUdSQURHRiRJKUdSQURJRU5UR0YkSShIRVNTSUFOR0YkSSlKQUNPQklBTkdGJEknTWF0aE1MR0YkSSVjb3N0R0YkSShkZWNsYXJlR0YkSStkb250cmV0dXJuR0YkSSRlcW5HRiRJKGZvcnRyYW5HRiRJJ2hvcm5lckdGJEktaW50cmVwMm1hcGxlR0YkSSpqb2lucHJvY3NHRiRJK21ha2VnbG9iYWxHRiRJKm1ha2VwYXJhbUdGJEkpbWFrZXByb2NHRiRJKW1ha2V2b2lkR0YkSS1tYXBsZTJpbnRyZXBHRiRJKW9wdGltaXplR0YkSSlwYWNrYXJnc0dGJEkrcGFja2xvY2Fsc0dGJEkrcGFja3BhcmFtc0dGJEkrcHJlcDJ0cmFuc0dGJEkqcmVuYW1ldmFyR0YkSSZzcGxpdEdGJEkpc3dhcGFyZ3NHRiQ= t1 = sqrt(2.0); t2 = a*a; t4 = b*b; t6 = bLog*aLog; t9 = bLog*bLog; t14 = aLog*aLog; t30 = a*b; t39 = 12.0*t2+12.0*t4-4.0*t4*t6+2.0*t4*t9-9.0*t4*bLog+2.0*t4*t14+9.0*t4* aLog-9.0*t2*aLog+2.0*t2*t9+2.0*b*a*t9+9.0*t2*bLog-4.0*t2*t6-4.0*t30*t6+2.0*b*a* t14-24.0*t30+2.0*t2*t14; t42 = sqrt(b-a); t45 = -bLog+aLog; t46 = t45*t45; t54 = -2.0*a+aLog*b+2.0*b+aLog*a-bLog*b-bLog*a; t56 = sqrt(-t54/t46); t63 = 1/t45/t54/t56/t42*t39*t1/3.0; JSFH t5 = a*a; t7 = b*b; t9 = bLog*aLog; t12 = bLog*bLog; t17 = aLog*aLog; t33 = a*b; t42 = 12.0*t5+12.0*t7-4.0*t7*t9+2.0*t7*t12-9.0*t7*bLog+2.0*t7*t17+9.0*t7* aLog-9.0*t5*aLog+2.0*t5*t12+2.0*b*a*t12+9.0*t5*bLog-4.0*t5*t9-4.0*t33*t9+2.0*b* a~*t17-24.0*t33+2.0*t5*t17; t50 = pow(-2.0*a+aLog*b+2.0*b+aLog*a-bLog*b-bLog*a,2.0); t54 = 2.0/3.0/t50*t42*(-bLog+aLog)/(-b+a); JSFH LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEnZXhwYW5kRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNistSSNtbkdGJDYkUSIyRicvRjNRJ25vcm1hbEYnLUkjbW9HRiQ2LVEnJnNkb3Q7RidGPi8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGRi8lKXN0cmV0Y2h5R0ZGLyUqc3ltbWV0cmljR0ZGLyUobGFyZ2VvcEdGRi8lLm1vdmFibGVsaW1pdHNHRkYvJSdhY2NlbnRHRkYvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZVLUY2NiQtRiM2Jy1GLDYlUSJiRidGL0YyLUZBNi1RKCZtaW51cztGJ0Y+RkRGR0ZJRktGTUZPRlEvRlRRLDAuMjIyMjIyMmVtRicvRldGXW8tRiw2JVEiYUYnRi9GMi8lK2V4ZWN1dGFibGVHRkZGPkY+LUZBNi1RIitGJ0Y+RkRGR0ZJRktGTUZPRlFGXG9GXm8tRjY2JC1GIzYnRl9vRmRvRmZuRmJvRj5GPkZALUY2NiQtRiM2Jy1GLDYlUSVhTG9nRidGL0YyRmluLUYsNiVRJWJMb2dGJ0YvRjJGYm9GPkY+RmJvRj5GPi1GQTYtUSI7RidGPkZEL0ZIRjFGSUZLRk1GT0ZRRlMvRldRLDAuMjc3Nzc3OGVtRidGYm9GPg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LC4qJiIiIyIiIkkjYXxpckc2IkYlISIiKiZJJWFMb2dHRidGJUkjYnxpckdGJ0YlRiUqJkYkRiVGK0YlRiUqJkYqRiVGJkYlRiUqJkklYkxvZ0dGJ0YlRitGJUYoKiZGL0YlRiZGJUYo LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVExTmVnYXRpdmVCaW5vbWlhbEYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYoLUkjbW5HRiQ2JFEkNC41RidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRl9xNiRRIjFGJ0YvLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZfci1GX3E2JFEkMC43RidGL0YvRi9GL0YvRmluRk9GX28tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0ZqckYyRjVGN0Y5RjtGPUY/RkFGREZfby1GRzYlUSJpRidGSkZNRl9vLUYsNi9RJWZyb21GJ0ZnckZpckZbc0YyRjVGN0Y5RjtGPUY/RkFGREZfb0ZocUZfby1GLDYvUSN0b0YnRmdyRmlyRltzRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmdyRmlyRltzRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRl1zRmJxLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmJxRl1zRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGZXFGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmdyRmlyRltzRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIisrKytdNSEiKQ== NyQiIiMkIissK11fOSEiKA== NyQiIiQkIitNJGUlZUMhIic= NyQiIiUkIismZSozKSpbISIm NyQiIiYkIis8MDY/NiEiJA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZOLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVE0Tm9uQ2VudHJhbENoaVNxdWFyZUYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGaG9GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GZ29GaW8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRl1vNiQtRiM2JUZGLUZdbzYkLUYjNiYtSSZtZnJhY0dGJDYoLUYjNictSSNtbkdGJDYkUSMxNUYnRi9GSi8lK2V4ZWN1dGFibGVHRjQvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGTS1GIzYkLUZhcTYkUSMxMEYnRi9GLy8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGY3IvJSliZXZlbGxlZEdGNC1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRlxxNigtRiM2Jy1GYXE2JFEjMjVGJ0YvRkpGZHFGZnFGTUZpcUZeckZhckZkckZmckYvRi9GL0YvRmRvRk9GZm4tRkc2JVEkUERGRidGSkZNLUZdbzYkLUYjNidGam9GaHItRmFxNiRRJDEuMEYnRi9GZHFGL0YvLUYsNi1RIjtGJ0YvRjJGW3NGN0Y5RjtGPUY/RkFGaW9GT0Zmbi1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmh0RjJGNUY3RjlGO0Y9Rj9GQUZERmZuLUZHNiVRImlGJ0ZKRk1GZm4tRiw2L1ElZnJvbUYnRmV0Rmd0Rml0RjJGNUY3RjlGO0Y9Rj9GQUZERmZuLUZhcTYkRmByRi9GZm4tRiw2L1EjdG9GJ0ZldEZndEZpdEYyRjVGN0Y5RjtGPUY/RkFGREZmbi1GYXE2JFEiNUYnRi9GZm4tRiw2L1EjZG9GJ0ZldEZndEZpdEYyRjVGN0Y5RjtGPUY/RkFGREZPRmZuLUZHNiVRJnByaW50RidGSkZNLUZdbzYkLUYjNiQtRl1vNiYtRiM2J0ZbdUZoci1GRzYlUSZldmFsZkYnRkpGTS1GXW82JC1GIzYlLUZHNiVRJ01vbWVudEYnRkpGTS1GXW82JC1GIzYmRmpvRmhyRlt1Ri9GL0YvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GL0ZfdEZPRmZuLUYsNi9RI29kRidGZXRGZ3RGaXRGMkY1RjdGOUY7Rj1GP0ZBRkRGZG9GZHFGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrdG1DIm8iISM1 NyQiIiIkIiIlIiIh NyQiIiMkIiNIIiIh NyQiIiQkIiQjSCIiIQ== NyQiIiUkIiU6UCIiIQ== NyQiIiYkIiYheWMiIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEyTm9uQ2VudHJhbFN0dWRlbnRGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlLUZHNiVRM05vbkNlbnRyYWxTdHVkZW50VEYnRkpGTS1GZm82JC1GIzYmLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIzcyRidGLy1GIzYlLUZlcTYkUSUxMC4wRidGL0ZKRk0vJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmJyLyUpYmV2ZWxsZWRHRjQtRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZicTYoLUZlcTYkUSM0OEYnRi9GaHFGXXJGYHJGY3JGZXJGL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGaHNGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGZXNGZ3NGaXNGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRmVxNiRGX3JGL0Zfby1GLDYvUSN0b0YnRmVzRmdzRmlzRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZlcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmVzRmdzRmlzRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYoRlt0RmdyLUZHNiVRJmV2YWxmRidGSkZNLUZmbzYmLUYjNiRGZnRGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUZmbzYkLUYjNiUtRkc2JVEkSW50RidGSkZNLUZmbzYkLUYjNjQtSSVtc3VwR0YkNiUtRkc2JVEieEYnRkpGTS1GIzYlRlt0RkpGTS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSRQREZGJ0ZKRk0tRmZvNiQtRiM2JkZdcEZnckZid0YvRi9GZ3JGYnctRiw2LVEiPUYnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGW3ktRkc2JVEpaW5maW5pdHlGJ0ZKRk0tRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GanhGREZdeUZnci1GRzYlUSdtZXRob2RGJ0ZKRk1GX29GZHhGX28tRkc2JVEoX2QwMWFtY0YnRkpGTUYvRi9GL0YvRi9GL0ZedkZhdkYvRi8tRiw2LVEiO0YnRi9GMkZqckY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGZXNGZ3NGaXNGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiZYUSYhIiU= NyQiIiMkIiYnR0whIiQ= NyQiIiQkIiZPUyMhIiM= NyQiIiUkIiZRNCMhIiI= NyQiIiYkIiZdTSMiIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZNLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEnTm9ybWFsRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkMvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GRzYlUShyZXN0YXJ0RidGSkZNLUYsNi1RIjpGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjc3Nzc3OGVtRicvRkVGXW9GTy1GLDYtUSJ+RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GRzYlUSV3aXRoRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNiQtRkc2JVErU3RhdGlzdGljc0YnRkpGTUYvRi9GaW5GTy1GRzYlUSNydkYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEvUmFuZG9tVmFyaWFibGVGJ0ZKRk0tRmZvNiQtRiM2JUZGLUZmbzYkLUYjNiYtSSNtbkdGJDYkUSIwRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRl9xNiRRIjFGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmFyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRl5yRmByRmJyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vRmhxRl9vLUYsNi9RI3RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGZHJGYnEtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGYnFGZHJGL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZlcUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0LyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIiIiE= NyQiIiMiIiI= NyQiIiQiIiE= NyQiIiUiIiQ= NyQiIiYiIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEoUG9pc3NvbkYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYkLUkjbW5HRiQ2JFEjMTBGJ0YvRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmhxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZfcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRltyLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GRzYlUSdNb21lbnRGJ0ZKRk0tRmZvNiQtRiM2JkZdcEZoc0ZbckYvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRlt0RjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0ZlcUZncUZpcUYyRjVGN0Y5RjtGPUY/RkFGREZpbi8lK2V4ZWN1dGFibGVHRjRGLw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIiIzU= NyQiIiMiJDUi NyQiIiQiJTU4 NyQiIiUiJjVuIg== NyQiIiYiJzVsQQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEpUmF5bGVpZ2hGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJXdpdGhGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2JC1GRzYlUStTdGF0aXN0aWNzRidGSkZNRi9GL0ZpbkZPLUZHNiVRI3J2RidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GRzYlUS9SYW5kb21WYXJpYWJsZUYnRkpGTS1GZm82JC1GIzYlRkYtRmZvNiQtRiM2JC1JI21uR0YkNiRRJDEuMEYnRi9GL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGaHFGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGZXFGZ3FGaXFGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjFGJ0YvRl9vLUYsNi9RI3RvRidGZXFGZ3FGaXFGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGZXFGZ3FGaXFGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGW3ItRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJmV2YWxmRidGSkZNLUZmbzYkLUYjNiUtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGaHNGW3JGL0YvRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGW3RGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmVxRmdxRmlxRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIitQVEpgNyEiKg== NyQiIiMkRiMiIiE= NyQiIiQkIis3QyUqZlAhIio= NyQiIiUkIiIpIiIh NyQiIiYkIisxNygqej0hIik= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZPLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVElUmljZUYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk9GKy1GRzYlUSZldmFsZkYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRJXN1YnNGJ0ZKRk0tRmNvNiQtRiM2Jy1GRzYlUSJ4RidGSkZNLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tSSNtbkdGJDYkUSIxRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRmNvNiYtRiM2KS1GRzYlUSRJbnRGJ0ZKRk0tRmNvNiQtRiM2Ki1GRzYlUSRleHBGJy9GS0Y0Ri8tRmNvNiQtRiM2JkZecC1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJGNvc0YnRlxyRi8tRmNvNiQtRiM2Iy1GRzYlUSZ0aGV0YUYnRlxyRi9GL0YvRmhwRltzRmFwLUZlcDYkUSIwRidGLy1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJ0ZELUZHNiVRI1BpRidGXHJGL0YvRmFyLUZjbzYkLUYjNiQtSSVtc3VwR0YkNiUtRkc2JVElJnBpO0YnRlxyRi8tRiM2JC1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GZHMvRkVGZXNGZHAvJTFzdXBlcnNjcmlwdHNoaWZ0R0Zgcy1GRzYjUSFGJ0YvRmhwLUZHNiVRKEJlc3NlbElGJ0ZcckYvLUZjbzYkLUYjNiVGXnNGaHBGXnBGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRltxRjdGOUY7Rj1GP0ZBRl5vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEkcGRmRidGSkZNLUYsNi1RKiZjb2xvbmVxO0YnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeb0ZecEZhckZpcS1GY282JC1GIzYkRmV0LUkmbWZyYWNHRiQ2KC1GY282JC1GIzYlLUZedDYlRl5wLUYjNiMtRmVwNiRRIjJGJ0YvRml0LUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GZHNGaHQtRl50NiUtRkc2JVElJm51O0YnRlxyRi9GZHdGaXRGL0Zkdy8lLmxpbmV0aGlja25lc3NHRmdwLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmV4LyUpYmV2ZWxsZWRHRjRGL0ZhckZedS1GY282JC1GIzYoRl5zRmhwRl52Rl5wRmFyLUZHNiVRI251RidGXHJGL0YvRlt2Rk8tRiw2L1EkZm9yRicvJSVib2xkR0ZML0YwUSVib2xkRicvJStmb250d2VpZ2h0R0ZneUYyRjVGN0Y5RjtGPUY/RkFGREZedi1GRzYlUSJpRidGSkZNRl52LUYsNi9RJWZyb21GJ0ZkeUZmeUZoeUYyRjVGN0Y5RjtGPUY/RkFGREZedkZec0Zedi1GLDYvUSN0b0YnRmR5RmZ5Rmh5RjJGNUY3RjlGO0Y9Rj9GQUZERl52LUZlcDYkUSI1RidGL0Zedi1GLDYvUSNkb0YnRmR5RmZ5Rmh5RjJGNUY3RjlGO0Y9Rj9GQUZERk9GXnYtRkc2JVEmcHJpbnRGJ0ZKRk0tRmNvNiQtRiM2Iy1GY282Ji1GIzYpRmp5RmhwRl9vLUZjbzYkLUYjNiRGYnEtRmNvNiQtRiM2LC1GXnQ2JUZecC1GIzYjRmp5Rml0RmFyRmdvLUZjbzYkLUYjNihGXnlGYXAtRmVwNiRRJDAuOEYnRi9GaHBGXnZGYXZGL0ZocEZecEZhcEZec0Zhcy1GRzYlUSlpbmZpbml0eUYnRkpGTUYvRi9GaHBGX28tRmNvNiQtRiM2JEZnby1GY282JC1GIzYnRl55RmFwRmRcbEZocC1GY282Ji1GIzYpLUZedDYlRmZ3LUYjNiMtRlx3NihGXlxsRmR3RmF4RmN4RmZ4Rmh4Rml0RmhwLUZHNiVRJkdBTU1BRidGXHJGLy1GY282JC1GIzYlRmRwRml3RmpdbEYvRmhwLUZHNiVRKmh5cGVyZ2VvbUYnRlxyRi8tRmNvNiQtRiM2KC1GY282Ji1GIzYkRmV0RmpdbEYvRmV1Rmh1RmhwLUZjbzYmLUYjNiNGZHBGL0ZldUZodUZocEZldC1GXHc2KEZceEZkd0ZheEZjeEZmeEZoeEYvRi9GZXVGaHVGL0YvRi9GZXVGaHVGL0ZbdkZPRl52LUYsNi9RI29kRidGZHlGZnlGaHlGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KihJInhHNiIiIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2IywmKiRGIyIiIyMhIiJGLiokSSNudUdGJEYuRi9GJS1JKEJlc3NlbElHRig2JCIiISomRiNGJUYyRiVGJQ== NyUiIiEkIisrKysrNSEiKjclJCIiIkYjRihGKA== NyUiIiIkIis9MEJZOSEiKjclJCIraU5AOTlGJiQiK2IjcEEnKSkhIzUkIistXSNSOiJGJg== NyUiIiMkIisrKytTRSEiKjclJEYjIiIhJCIiIkYpJCIrKysrPzhGJg== NyUiIiQkIit4JmZjaiYhIio3JSQiK0NyVUdHRiYkIispUVMkSDhGJiQiKyplbykpXCJGJg== NyUiIiUkIisrKydITiIhIik3JSRGIyIiISQiIiNGKSQiKysrPyJwIiEiKg== NyUiIiYkIis0Q2duTiEiKTclJCIrW1Umb2wmISIqJCIrcjROQkxGKiQiK0AqKm8oKj1GKg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JC1GLDYlUSpoeXBlcmdlb21GJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRictRjY2JC1GIzYoLUY2NiYtRiM2JC1JI21vR0YkNi1RKiZ1bWludXMwO0YnRj8vJSZmZW5jZUdGPi8lKnNlcGFyYXRvckdGPi8lKXN0cmV0Y2h5R0Y+LyUqc3ltbWV0cmljR0Y+LyUobGFyZ2VvcEdGPi8lLm1vdmFibGVsaW1pdHNHRj4vJSdhY2NlbnRHRj4vJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0Znbi1JI21uR0YkNiRRJDAuNUYnRj9GPy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJy1GSjYtUSIsRidGP0ZNL0ZQRjFGUUZTRlVGV0ZZL0ZmblEmMC4wZW1GJy9GaW5RLDAuMzMzMzMzM2VtRictRjY2Ji1GIzYjLUZbbzYkUSIxRidGP0Y/Rl5vRmFvRmRvRkktSSZtZnJhY0dGJDYoLUklbXN1cEdGJDYlLUZbbzYkUSQwLjhGJ0Y/LUYjNiMtRltvNiRRIjJGJ0Y/LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZccS8lLmxpbmV0aGlja25lc3NHRmJwLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmhxLyUpYmV2ZWxsZWRHRj5GP0Y/ LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrLV0jUjoiISIq LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZOLUkjbWlHRiQ2I1EhRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGNC8lKmxpbmVicmVha0dRJWF1dG9GJy1JI21vR0YkNi1RIiNGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkYvJSlzdHJldGNoeUdGRi8lKnN5bW1ldHJpY0dGRi8lKGxhcmdlb3BHRkYvJS5tb3ZhYmxlbGltaXRzR0ZGLyUnYWNjZW50R0ZGLyUnbHNwYWNlR0Y3LyUncnNwYWNlR0Y3LUYsNiVRKFN0dWRlbnRGJy8lJ2l0YWxpY0dRJXRydWVGJy9GQlEnaXRhbGljRictRjA2JkYyRjVGOC9GO1EobmV3bGluZUYnLUYsNiVRKHJlc3RhcnRGJ0ZaRmduLUY+Ni1RIjpGJ0ZBRkRGR0ZJRktGTUZPRlEvRlRRLDAuMjc3Nzc3OGVtRicvRlZGZG9GaW4tRj42LVEifkYnRkFGREZHRklGS0ZNRk9GUUZTRlUtRiw2JVEld2l0aEYnRlpGZ24tSShtZmVuY2VkR0YkNiQtRiM2JC1GLDYlUStTdGF0aXN0aWNzRidGWkZnbkZBRkFGYG9GaW4tRiw2JVEjcnZGJ0ZaRmduLUY+Ni1RKiZjb2xvbmVxO0YnRkFGREZHRklGS0ZNRk9GUUZjb0Zlby1GLDYlUS9SYW5kb21WYXJpYWJsZUYnRlpGZ24tRl1wNiQtRiM2Ji1GLDYlUSlTdHVkZW50VEYnRlpGZ24tRl1wNiQtRiM2JC1JI21uR0YkNiRRJDYuNUYnRkFGQUZBLyUrZXhlY3V0YWJsZUdGRkZBRkFGYG9GaW5GZm8tRj42L1EkZm9yRicvJSVib2xkR0Zmbi9GQlElYm9sZEYnLyUrZm9udHdlaWdodEdGZHJGREZHRklGS0ZNRk9GUUZTRlVGZm8tRiw2JVEiaUYnRlpGZ25GZm8tRj42L1ElZnJvbUYnRmFyRmNyRmVyRkRGR0ZJRktGTUZPRlFGU0ZVRmZvLUZpcTYkUSIxRidGQUZmby1GPjYvUSN0b0YnRmFyRmNyRmVyRkRGR0ZJRktGTUZPRlFGU0ZVRmZvLUZpcTYkUSI1RidGQUZmby1GPjYvUSNkb0YnRmFyRmNyRmVyRkRGR0ZJRktGTUZPRlFGU0ZVRmluRmZvLUYsNiVRJnByaW50RidGWkZnbi1GXXA2JC1GIzYkLUZdcDYmLUYjNidGZ3ItRj42LVEiLEYnRkFGRC9GSEZmbkZJRktGTUZPRlFGUy9GVlEsMC4zMzMzMzMzZW1GJy1GLDYlUSdNb21lbnRGJ0ZaRmduLUZdcDYkLUYjNiZGZHBGZHRGZ3JGQUZBRkFGQS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZBRkEtRj42LVEiO0YnRkFGREZndEZJRktGTUZPRlFGU0Zlb0ZpbkZmby1GPjYvUSNvZEYnRmFyRmNyRmVyRkRGR0ZJRktGTUZPRlFGU0ZVRmBvRlxyRkE= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIiIiE= NyQiIiMkIitXV1dXOSEiKg== NyQiIiQkIiIhRiU= NyQiIiUkIitubW1FNiEiKQ== NyQiIiYkIiIhRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZjcC1JI21vR0YkNi1RIiNGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRK1RyaWFuZ3VsYXJGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJ2Fzc3VtZUYnRkpGTS1GLDYtUSIoRidGLy9GM0ZMRjUvRjhGTEY5RjtGPUY/L0ZCUSwwLjE2NjY2NjdlbUYnL0ZFRltwLUZHNiVRImJGJ0ZKRk0tRiw2LVEiPkYnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeby1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGZ3AtSSNtbkdGJDYkUSIxRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRkc2JVEiY0YnRkpGTUZgcEZdcEZdcUZjcS1GLDYtUSI8RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vRmlwLUYsNi1RIilGJ0YvRmhvRjVGaW9GOUY7Rj1GP0Zqb0ZccC1GLDYtUSI7RidGL0YyRmBxRjdGOUY7Rj1GP0ZBRl5vRk9GX29GKy1GRzYlUSpoJkFzc2lnbjtGJ0ZKRk0tSSZtZnJhY0dGJDYoLUZqcDYkUSIyRidGLy1GIzYnRmNxLUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj9GZnBGaHBGZXItRiw2LVEoJm1pbnVzO0YnRi9GMkY1RjdGOUY7Rj1GP0ZmcEZocEZdcC8lLmxpbmV0aGlja25lc3NHRlxxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmRzLyUpYmV2ZWxsZWRHRjRGXHJGTy1GRzYlUSVzdWJzRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNi5GXXAtRiw2LVEiPUYnRi9GMkY1RjdGOUY7Rj1GP0Zcb0Zeb0ZjcC1GanA2JFEpMC45NjkyMzFGJ0YvRl1xRmNxRmF0RmNwLUZqcDYkUSkwLjY5MjMwOEYnRi9GXXFGYnItRkc2I1EhRidGL0ZcckZfb0ZPLUZHNiVRJHBkZkYnL0ZLRjRGLy1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tRkc2JVEqcGllY2V3aXNlRidGYHVGLy1GXXQ2JC1GIzY8LUZHNiVRInhGJ0ZgdUYvRmZxRmNwRmlwRl1xLUZqcDYkUSIwRidGL0ZdcUZbdkZmcS1GRzYlRl9wRmB1Ri9GXXEtRmNyNigtRiM2JS1GRzYlUSJoRidGYHVGLy1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZddDYkLUYjNiVGW3ZGanJGaXBGLy1GIzYlRl1wRmpyRmlwRmBzRmJzRmVzRmdzRl1xLUZHNiVGXXZGSkZNRmZxRmNxRl1xLUZHNiVGaXZGSkZNRl1xRmN3RmZxRmlwRl1xLUZjcjYoLUYjNiVGZXdGanYtRl10NiQtRiM2JUZpcEZdc0Zjd0YvLUYjNiVGaXBGXXNGY3FGYHNGYnNGZXNGZ3NGXXFGXnZGL0ZcckZPLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGZ3hGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEibkYnRkpGTUZfby1GLDYvUSVmcm9tRidGZHhGZnhGaHhGMkY1RjdGOUY7Rj1GP0ZBRkRGX29GaXBGX28tRiw2L1EjdG9GJ0ZkeEZmeEZoeEYyRjVGN0Y5RjtGPUY/RkFGREZfby1GanA2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0ZkeEZmeEZoeEYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vRl9vLUZddDYmLUYjNiZGanhGXXEtRkc2JVEkaW50RidGSkZNLUZddDYkLUYjNiwtSSVtc3VwR0YkNiVGY3ctRiM2I0ZqeC8lMXN1cGVyc2NyaXB0c2hpZnRHRmB2Rmp2LUZHNiVGX3VGSkZNRl1xRmN3RmF0RmNwRmlwLUYsNi1RIy4uRidGL0YyRjVGN0Y5RjtGPUY/RmZwRkRGaXBGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRlxyRk9GX28tRiw2L1Ejb2RGJ0ZkeEZmeEZoeEYyRjVGN0Y5RjtGPUY/RkFGREZcckZPLUZQNiZGUkZVRlcvRlpRJWF1dG9GJ0ZheEZfby1GRzYlUSJpRidGSkZNRl9vRl15Rl9vRmlwRl9vRmB5Rl9vRmN5Rl9vRmZ5Rk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRl10NiQtRiM2Iy1GXXQ2Ji1GIzYmRl1cbEZdcS1GRzYlUSZldmFsZkYnRkpGTS1GXXQ2JC1GIzYkRl16LUZddDYkLUYjNi0tRmV6NiVGY3ctRiM2I0ZdXGxGaXpGanZGaXMtRl10NiQtRiM2MkZld0ZhdEZickZdcUZfb0ZdcEZhdEZjcEZkdEZdcUZjcUZhdEZjcEZndEZdcUZbW2xGL0ZdcUZjd0ZhdEZjcEZpcEZdW2xGaXBGL0YvRi9GYFtsRmNbbEYvRlxyRk9GX29GZltsRmlu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrITMleSR5KSEjNQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYrMkkieEc2IiEiIiIiITJGJ0kjYnxpckdGKCooSSJoR0YoIiIiLCZGJ0YvRi9GL0YvLCZGLEYvRi9GL0YpMkYnSSNjfGlyR0YoRi4yRidGLyooRi5GLywmRi9GL0YnRilGLywmRi9GL0YzRilGKUYq NyQiIiIsLCooSSJoRzYiRiMsJkkjYnxpckdGJ0YjRiNGIyEiIiwmKiRGKSIiJEYjRiNGI0YjI0YjRi0qKEYmRiNGKEYqLCYqJEYpIiIjRiNGKkYjRiMjRiNGMiomRiZGIywmKiRJI2N8aXJHRidGMkYjRjFGKkYjRjMqKEYmRiMsJkYjRiNGN0YqRiosJkYjRiMqJEY3Ri1GKkYjI0YqRi0qKEYmRiNGOUYqLCZGI0YjRjZGKkYjRjM= NyQiIiMsLCooSSJoRzYiIiIiLCZJI2J8aXJHRidGKEYoRighIiIsJiokRioiIiVGKEYrRihGKCNGKEYuKihGJkYoRilGKywmKiRGKiIiJEYoRihGKEYoI0YoRjMqJkYmRigsJiokSSNjfGlyR0YnRjNGKEYyRitGKEY0KihGJkYoLCZGKEYoRjhGK0YrLCZGKEYoKiRGOEYuRitGKCNGK0YuKihGJkYoRjpGKywmRihGKEY3RitGKEY0 NyQiIiQsLCooSSJoRzYiIiIiLCZJI2J8aXJHRidGKEYoRighIiIsJiokRioiIiZGKEYoRihGKCNGKEYuKihGJkYoRilGKywmKiRGKiIiJUYoRitGKEYoI0YoRjMqJkYmRigsJiokSSNjfGlyR0YnRjNGKEYyRitGKEY0KihGJkYoLCZGKEYoRjhGK0YrLCZGKEYoKiRGOEYuRitGKCNGK0YuKihGJkYoRjpGKywmRihGKEY3RitGKEY0 NyQiIiUsLCooSSJoRzYiIiIiLCZJI2J8aXJHRidGKEYoRighIiIsJiokRioiIidGKEYrRihGKCNGKEYuKihGJkYoRilGKywmKiRGKiIiJkYoRihGKEYoI0YoRjMqJkYmRigsJiokSSNjfGlyR0YnRjNGKEYyRitGKEY0KihGJkYoLCZGKEYoRjhGK0YrLCZGKEYoKiRGOEYuRitGKCNGK0YuKihGJkYoRjpGKywmRihGKEY3RitGKEY0 NyQiIiYsLCooSSJoRzYiIiIiLCZJI2J8aXJHRidGKEYoRighIiIsJiokRioiIihGKEYoRihGKCNGKEYuKihGJkYoRilGKywmKiRGKiIiJ0YoRitGKEYoI0YoRjMqJkYmRigsJiokSSNjfGlyR0YnRjNGKEYyRitGKEY0KihGJkYoLCZGKEYoRjhGK0YrLCZGKEYoKiRGOEYuRitGKCNGK0YuKihGJkYoRjpGKywmRihGKEY3RitGKEY0 NyQiIiIkIStJKy4xSiEjNQ== NyQiIiMkIitCeHJHSiEjNQ== NyQiIiQkIStNQDZrPCEjNQ== NyQiIiUkIitEXCsieSIhIzU= NyQiIiYkIStmIlxEPyIhIzU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVErVHJpYW5ndWxhckYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYqLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZicS1JI21uR0YkNiRRIjFGJ0YvLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJ0ZkcUZocS1JJm1mcmFjR0YkNihGZHEtRiM2Jy1GZXE2JFEiM0YnRi9GSi8lK2V4ZWN1dGFibGVHRjQvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGTS8lLmxpbmV0aGlja25lc3NHRmdxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRl9zLyUpYmV2ZWxsZWRHRjQtRkc2I1EhRidGL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGXXRGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGanNGXHRGXnRGMkY1RjdGOUY7Rj1GP0ZBRkRGX29GZHFGX28tRiw2L1EjdG9GJ0Zqc0ZcdEZedEYyRjVGN0Y5RjtGPUY/RkFGREZfby1GZXE2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0Zqc0ZcdEZedEYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZmbzYkLUYjNiQtRmZvNiYtRiM2J0ZgdEZocS1GRzYlUSZldmFsZkYnRkpGTS1GZm82JC1GIzYlLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmhxRmB0Ri9GL0YvRi9GL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRi9GLy1GLDYtUSI7RidGL0YyRltyRjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0Zqc0ZcdEZedEYyRjVGN0Y5RjtGPUY/RkFGREZpbkZmckYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIis2NjY2NiEjNQ== NyQiIiMkIitfPSY9Jj0hIzU= NyQiIiQkIisvUHEuUCEjNg== NyQiIiUkIitNPnIqWyghIzY= NyQiIiYkIitZWkUkeSIhIzY= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZobi1JI21vR0YkNi1RIiNGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjQvJSlzdHJldGNoeUdGNC8lKnN5bW1ldHJpY0dGNC8lKGxhcmdlb3BHRjQvJS5tb3ZhYmxlbGltaXRzR0Y0LyUnYWNjZW50R0Y0LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGQy1JI21pR0YkNiVRMFRydW5jYXRlZE5vcm1hbEYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiUtRkc2JVEnTm9ybWFsRidGSkZNLUZmbzYkLUYjNiYtRkc2JVEjbXVGJy9GS0Y0Ri8tRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnLUZHNiVRJnNpZ21hRidGZHFGL0YvRi9GL0YvRmluRk9GX28tRkc2JVEkcGRmRidGSkZNRmBwLUkmbWZyYWNHRiQ2KC1GIzYmLUZHNiVRJFBERkYnRkpGTS1GZm82JC1GIzYnRl1wRmVxLUZHNiVRInhGJ0ZKRk0vJStleGVjdXRhYmxlR0Y0Ri9GL0Zgc0YvLUYjNistRkc2JVEkQ0RGRidGSkZNLUZmbzYkLUYjNilGXXBGZXEtSSNtbkdGJDYkUSIxRidGL0ZKRmBzLyUwZm9udF9zdHlsZV9uYW1lR1EoMkR+TWF0aEYnRk1GLy1GLDYtUSgmbWludXM7RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjIyMjIyMjJlbUYnL0ZFRmZ0RmRzLUZmbzYkLUYjNipGXXBGZXEtRiw2LVEqJnVtaW51czA7RidGL0YyRjVGN0Y5RjtGPUY/RmV0Rmd0Rlt0RkpGYHNGX3RGTUYvRkpGYHNGX3RGTS8lLmxpbmV0aGlja25lc3NHRl50LyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmN1LyUpYmV2ZWxsZWRHRjRGaW5GT0Zfby1GRzYlUSRpbnRGJ0ZKRk0tRmZvNiQtRiM2Li1JJW1zdXBHRiQ2JUZdcy1GIzYlLUZHNiVRIm5GJ0ZKRk1GSkZNLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZERl5yRmVxRl1zLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm9GXHVGW3QtRiw2LVEjLi5GJ0YvRjJGNUY3RjlGO0Y9Rj9GZXRGREZbdEZgc0YvRi8tRiw2LVEiO0YnRi9GMkZocUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vRl5yRmBwLUZHNiVRJXN1YnNGJ0ZKRk0tRmZvNiQtRiM2LUZhcUZddy1GYnI2KEZbdC1GIzYlLUZcdDYkUSI0RidGL0ZKRk1GX3VGYXVGZHVGZnVGZXFGW3JGXXctRmJyNigtRlx0NiRRIjNGJ0YvLUYjNiUtRlx0NiRRIjJGJ0YvRkpGTUZfdUZhdUZkdUZmdUZlcUZeckZgc0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmR5RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmF5RmN5RmV5RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZcdDYkRml2Ri9GX28tRiw2L1EjdG9GJ0ZheUZjeUZleUYyRjVGN0Y5RjtGPUY/RkFGREZfby1GXHQ2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0ZheUZjeUZleUYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZmbzYkLUYjNiQtRmZvNiYtRiM2J0ZneUZlcS1GRzYlUSZldmFsZkYnRkpGTS1GZm82JC1GIzYlRmh1LUZmbzYkLUYjNi0tRmB2NiVGXXMtRiM2J0ZneUZKRmBzRl90Rk1GZ3ZGanZGXnJGZXFGXXNGXXdGXHVGW3RGYHdGW3RGL0YvRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvRmN3Rk9GX28tRiw2L1Ejb2RGJ0ZheUZjeUZleUYyRjVGN0Y5RjtGPUY/RkFGREZpbkZgc0Yv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCowIyIiIiIiI0YsKUkieEdGJ0kjbnxpckdGJ0YsKUYtRitGLClJI1BpR0YlRishIiJJJnNpZ21hR0YnRjQtSSRleHBHRiQ2IywkKihGK0YsKSwmRi9GLEkjbXVHRidGNEYtRiwpRjVGLUY0RjRGLCwmKiZGK0YsLUkkZXJmR0YkNiMsJCoqRitGLCwmRixGLEY9RjRGLEY1RjRGMUYsRixGLEYsKiZGK0YsLUZCNiMsJCoqRitGLCwmRixGNEY9RjRGLEY1RjRGMUYsRixGLEY0RjRGLC9GLztGNEYs NyQiIiEkIiIiRiM= NyQiIiIkIit5X1YnWyQhIzY= NyQiIiMkIitjI1FgOSQhIzU= NyQiIiQkIitjJ1IoUT8hIzY= NyQiIiUkIismNHosJT0hIzU= NyQiIiYkIitdM2FOOSEjNg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEoVW5pZm9ybUYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYnLUYsNi1RKiZ1bWludXMwO0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZicS1JI21uR0YkNiRRJDEuMEYnRi8tRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnRmRxRi9GL0YvRi9GaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmRyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmFyRmNyRmVyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZlcTYkUSIxRidGL0Zfby1GLDYvUSN0b0YnRmFyRmNyRmVyRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZlcTYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmFyRmNyRmVyRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tRmZvNiQtRiM2JC1GZm82Ji1GIzYnRmdyRmhxLUZHNiVRJ01vbWVudEYnRkpGTS1GZm82JC1GIzYmRl1wRmhxRmdyRi9GL0YvRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGL0YvLUYsNi1RIjtGJ0YvRjJGW3JGN0Y5RjtGPUY/RkFGXm9GT0Zfby1GLDYvUSNvZEYnRmFyRmNyRmVyRjJGNUY3RjlGO0Y9Rj9GQUZERmluLyUrZXhlY3V0YWJsZUdGNEYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIiIhRiU= NyQiIiMkIitLTExMTCEjNQ== NyQiIiQkIiIhRiU= NyQiIiUkIisrKysrPyEjNQ== NyQiIiYkIiIhRiU= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY/LUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEsVXNlckRlZmluZWRGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGaG9GMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGZW9GZ29GaW9GMkY1RjdGOUY7Rj1GP0ZBRkRGX28tSSNtbkdGJDYkUSIwRidGL0Zfby1GLDYvUSN0b0YnRmVvRmdvRmlvRjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZicDYkUSI1RidGL0Zfby1GLDYvUSNkb0YnRmVvRmdvRmlvRjJGNUY3RjlGO0Y9Rj9GQUZERk9GX28tRkc2JVEmcHJpbnRGJ0ZKRk0tSShtZmVuY2VkR0YkNiQtRiM2Iy1GYnE2Ji1GIzYvRltwLUYsNi1RIixGJ0YvRjIvRjZGTEY3RjlGO0Y9Rj9GQS9GRVEsMC4zMzMzMzMzZW1GJy1GYnA2JFEkMC4zRidGLy1GLDYtUScmc2RvdDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUklbXN1cEdGJDYlLUZicDYkUSIxRidGLy1GIzYjRltwLyUxc3VwZXJzY3JpcHRzaGlmdEdGZHAtRiw2LVEiK0YnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yMjIyMjIyZW1GJy9GRUZkcy1GYnA2JFEkMC4xRidGL0Zjci1GZ3I2JS1GYnA2JFEiMkYnRi9GXHNGXnNGYHMtRmJwNiRRJDAuNkYnRi9GY3ItRmdyNiUtRmJwNiRRIjNGJ0YvRlxzRl5zRi8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGLy1GLDYtUSI7RidGL0YyRl1yRjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0Zlb0Znb0Zpb0YyRjVGN0Y5RjtGPUY/RkFGREZpbg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIiM1ISIi NyQiIiIkIiNCISIi NyQiIiMkIiNoISIi NyQiIiQkIiR0IiEiIg== NyQiIiUkIiQwJiEiIg== NyQiIiYkIiUkXCIhIiI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZMLUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEoV2VpYnVsbEYnLyUnaXRhbGljR1EldHJ1ZUYnL0YwUSdpdGFsaWNGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZDLyUmZGVwdGhHRlQvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkc2JVEocmVzdGFydEYnRkpGTS1GLDYtUSI6RidGL0YyRjVGN0Y5RjtGPUY/L0ZCUSwwLjI3Nzc3NzhlbUYnL0ZFRl1vRk8tRiw2LVEifkYnRi9GMkY1RjdGOUY7Rj1GP0ZBRkQtRkc2JVEld2l0aEYnRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYkLUZHNiVRK1N0YXRpc3RpY3NGJ0ZKRk1GL0YvRmluRk8tRkc2JVEjcnZGJ0ZKRk0tRiw2LVEqJmNvbG9uZXE7RidGL0YyRjVGN0Y5RjtGPUY/RlxvRl5vLUZHNiVRL1JhbmRvbVZhcmlhYmxlRidGSkZNLUZmbzYkLUYjNiVGRi1GZm82JC1GIzYmLUkjbW5HRiQ2JFEkMS4wRidGLy1GLDYtUSIsRidGL0YyL0Y2RkxGN0Y5RjtGPUY/RkEvRkVRLDAuMzMzMzMzM2VtRictRl9xNiRRJDEuNUYnRi9GL0YvRi9GL0ZpbkZPRl9vLUYsNi9RJGZvckYnLyUlYm9sZEdGTC9GMFElYm9sZEYnLyUrZm9udHdlaWdodEdGYXJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRkc2JVEiaUYnRkpGTUZfby1GLDYvUSVmcm9tRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjFGJ0YvRl9vLUYsNi9RI3RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGX28tRl9xNiRRIjVGJ0YvRl9vLUYsNi9RI2RvRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGT0Zfby1GRzYlUSZwcmludEYnRkpGTS1GZm82JC1GIzYkLUZmbzYmLUYjNidGZHJGYnEtRkc2JVEnTW9tZW50RidGSkZNLUZmbzYkLUYjNiZGXXBGYnFGZHJGL0YvRi9GLy8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0YvRi8tRiw2LVEiO0YnRi9GMkZlcUY3RjlGO0Y9Rj9GQUZeb0ZPRl9vLUYsNi9RI29kRidGXnJGYHJGYnJGMkY1RjdGOUY7Rj1GP0ZBRkRGaW4vJStleGVjdXRhYmxlR0Y0Ri8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIkIitJSFhGISohIzU= NyQiIiMkIitcJFIxPiIhIio= NyQiIiQkIiIjIiIh NyQiIiUkIistOD83UyEiKg== NyQiIiYkIitvI0cwRSohIio= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZILUkjbW9HRiQ2LVEiI0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGNC8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y0LyUobGFyZ2VvcEdGNC8lLm1vdmFibGVsaW1pdHNHRjQvJSdhY2NlbnRHRjQvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZDLUkjbWlHRiQ2JVEvWmlwZk1hbmRlbGJyb3RGJy8lJ2l0YWxpY0dRJXRydWVGJy9GMFEnaXRhbGljRictSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGQy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZHNiVRKHJlc3RhcnRGJ0ZKRk0tRiw2LVEiOkYnRi9GMkY1RjdGOUY7Rj1GPy9GQlEsMC4yNzc3Nzc4ZW1GJy9GRUZdb0ZPLUYsNi1RIn5GJ0YvRjJGNUY3RjlGO0Y9Rj9GQUZELUZHNiVRJ21vbWVudEYnRkpGTS1GLDYtUSomY29sb25lcTtGJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tSSZtZnJhY0dGJDYoLUYjNictRkc2JVEkU3VtRidGSkZNLUkobWZlbmNlZEdGJDYkLUYjNi4tSSVtc3VwR0YkNiUtRkc2JVEia0YnRkpGTS1GIzYnLUZHNiVRInBGJ0ZKRk1GSi8lK2V4ZWN1dGFibGVHRjQvJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGTS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRiw2LVEnJnNkb3Q7RidGL0YyRjVGN0Y5RjtGPUY/RkFGRC1GZnA2JS1GYXA2JC1GIzYoRmhwLUYsNi1RIitGJ0YvRjJGNUY3RjlGO0Y9Rj8vRkJRLDAuMjIyMjIyMmVtRicvRkVGZXItRkc2JVEicUYnRkpGTUZgcUZicUYvRi8tRiM2KC1GLDYtUSomdW1pbnVzMDtGJ0YvRjJGNUY3RjlGO0Y9Rj9GZHJGZnItRkc2JVEic0YnRkpGTUZKRmBxRmJxRk1GZXEtRiw2LVEiLEYnRi9GMi9GNkZMRjdGOUY7Rj1GP0ZBL0ZFUSwwLjMzMzMzMzNlbUYnRmhwLUYsNi1RIj1GJ0YvRjJGNUY3RjlGO0Y9Rj9GXG9GXm8tSSNtbkdGJDYkUSIxRidGLy1GLDYtUSMuLkYnRi9GMkY1RjdGOUY7Rj1GP0ZkckZELUZHNiVRIm5GJ0ZKRk1GYHFGYnFGL0YvRmBxRmJxRi8tRiM2KS1GRzYjUSFGJy1GIzYnRl1wLUZhcDYkLUYjNi1GZ3QtRmZwNiVGXXItRiM2J0Zcc0Zfc0ZgcUZicUYvRmVxRmJzRmhwRmhzRlt0Rl90RmJ0RmBxRmJxRi9GL0ZgcUZicUYvRmd0RkpGYHFGYnFGTS8lLmxpbmV0aGlja25lc3NHRl50LyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmh1LyUpYmV2ZWxsZWRHRjRGaW5GT0Zfby1GLDYvUSRmb3JGJy8lJWJvbGRHRkwvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmN2RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZHNiVRImlGJ0ZKRk1GX28tRiw2L1ElZnJvbUYnRmB2RmJ2RmR2RjJGNUY3RjlGO0Y9Rj9GQUZERl9vLUZcdDYkRmdxRi9GX28tRiw2L1EjdG9GJ0ZgdkZidkZkdkYyRjVGN0Y5RjtGPUY/RkFGREZfby1GXHQ2JFEiNUYnRi9GX28tRiw2L1EjZG9GJ0ZgdkZidkZkdkYyRjVGN0Y5RjtGPUY/RkFGREZPRl9vLUZHNiVRJnByaW50RidGSkZNLUZhcDYkLUYjNiYtRmFwNiYtRiM2KUZmdkZicy1GRzYlUSZldmFsZkYnRkpGTS1GYXA2JC1GIzYnLUZHNiVRJXN1YnNGJ0ZKRk0tRmFwNiQtRiM2NkZdcUZoc0ZmdkZic0ZidEZocy1GXHQ2JFEjMTVGJ0YvRmJzRmdyRmhzLUZcdDYkUSQxLjJGJ0YvRmJzRl9zRmhzLUZcdDYkUSQyLjBGJ0YvRmJzRmJvRmBxRmJxRi9GL0ZgcUZicUYvRi9GYHFGYnFGL0YvLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRmBxRmJxRi9GLy1GLDYtUSI7RidGL0YyRmVzRjdGOUY7Rj1GP0ZBRl5vRk9GX28tRiw2L1Ejb2RGJ0ZgdkZidkZkdkYyRjVGN0Y5RjtGPUY/RkFGREZpbkZgcUZicUYv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiEkIiIiRiM= NyQiIiIkIitJKjNvQSQhIio= NyQiIiMkIisxODkwPyEiKQ== NyQiIiQkIisoUmc2Ij0hIig= NyQiIiUkIitUKXBLJj4hIic= NyQiIiYkIitncHc2QiEiJg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JC1GLDYlUSpoeXBlcmdlb21GJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRictRjY2JC1GIzYoLUY2NiYtRiM2JC1JI21vR0YkNi1RKiZ1bWludXMwO0YnRj8vJSZmZW5jZUdGPi8lKnNlcGFyYXRvckdGPi8lKXN0cmV0Y2h5R0Y+LyUqc3ltbWV0cmljR0Y+LyUobGFyZ2VvcEdGPi8lLm1vdmFibGVsaW1pdHNHRj4vJSdhY2NlbnRHRj4vJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0Znbi1JI21uR0YkNiRRIjFGJ0Y/Rj8vJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRictRko2LVEiLEYnRj9GTS9GUEYxRlFGU0ZVRldGWS9GZm5RJjAuMGVtRicvRmluUSwwLjMzMzMzMzNlbUYnLUY2NiYtRiM2I0ZqbkY/Rl5vRmFvRmRvRkktRltvNiRRIjJGJ0Y/Rj9GPw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrKysrK0khIio= JSFH openturns-1.9/validation/src/Student2D.mws000066400000000000000000000030611307543307100207100ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 150 "bvt:=proc(a,b,nu,rho)\n evalf(In t(Int(1/(2*Pi*sqrt(1-rho^2))*(1+(s^2-2*rho*s*t+t^2)/(nu*(1-rho^2)))^(- (nu+2)/2),s=-infinity..a),t=-infinity..b))\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "bvt(1.0,1.0,1.5,0.5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+CC\"4k'!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 102 "(Int(Int(1/(2*Pi*sqrt(1-rho^2))*(1+(s^2-2*s*t+t^2)/(nu*(1-rho^2 )))^(-(nu+2)/2),s=-INF..a),t=-INF..b));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$IntG6$-F$6$,$**\"\"#!\"\"%#PiGF+,&\"\"\"F.*$)%$rhoGF*F.F+#F+F *),&F.F.*(,(*$)%\"sGF*F.F.*(F*F.F9F.%\"tGF.F+*$)F;F*F.F.F.%#nuGF+F-F+F .,&*&F*F+F>F.F+F.F+F.F./F9;$!#gF+%\"aG/F;;FC%\"bG" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 8 "38/2.54;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"5?D%)f7#*H1'\\\"!#=" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "12* 2.54;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"%[I!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "6 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Student2D.txt000066400000000000000000000020721307543307100207220ustar00rootroot00000000000000> restart: > bvt:=proc(a,b,nu,rho) > > evalf(Int(Int(1/(2*Pi*sqrt(1-rho^2))*(1+(s^2-2*rho*s*t+t^2)/(nu*(1-rho > ^2)))^(-(nu+2)/2),s=-infinity..a),t=-infinity..b)) > end: > bvt(1.0,1.0,1.5,0.5); 0.6640912424 > (Int(Int(1/(2*Pi*sqrt(1-rho^2))*(1+(s^2-2*s*t+t^2)/(nu*(1-rho^2)))^(-( > nu+2)/2),s=-INF..a),t=-INF..b)); / nu \ |- ---- - 1| b a \ 2 / / / / 2 2\ | | | s - 2 s t + t | | | |1 + ---------------| | | | 2 | | | \ nu (1 - rho ) / | | --------------------------------- ds dt | | 2 1/2 | | 2 Pi (1 - rho ) | | | | / / -6.0 -6.0 > 38/2.54; 14.960629921259842520 > 12*2.54; 30.48 > openturns-1.9/validation/src/Trigamma.mw000066400000000000000000001676631307543307100204750ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZNLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEiZkYnRi9GMkZfby1GLDYlUSRQc2lGJy9GMEY9RjktSShtZmVuY2VkR0YkNiQtRiM2JS1GY282JFEiMUYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJy1GLDYlUSJ4RidGL0YyRjktRjY2LVEiO0YnRjlGO0ZocEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRI2YxRidGL0YyRl9vLUYsNiVRKGNvbnZlcnRGJ0YvRjItRl5wNiQtRiM2Ji1GLDYlUSdzZXJpZXNGJ0YvRjItRl5wNiQtRiM2KUZmb0ZlcEZbcS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GY282JFEiMEYnRjlGZXAtRmNvNiRRIzEwRidGOUY5RmVwLUYsNiVRKHBvbHlub21GJ0YvRjJGOUZecUZnbkZPRmduLUYsNiVRI2YyRidGL0YyRl9vRmRxLUZecDYkLUYjNiZGW3ItRl5wNiQtRiM2KUZmb0ZlcEZbcUZici1GLDYlUSlpbmZpbml0eUYnRi9GMkZlcC1GY282JFEjMjBGJ0Y5RjlGZXBGW3NGOUZecUZnbkZnbkZPRmduLUYsNiVRJ2Zzb2x2ZUYnRi9GMi1GXnA2JC1GIzYrLUklbXN1cEdGJDYlLUZecDYkLUYjNiVGZm8tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZhdUZhcUY5LUYjNiMtRmNvNiRRIjJGJ0Y5LyUxc3VwZXJzY3JpcHRzaGlmdEdGZ3JGYnItRmd0NiVGZXUtRiM2Iy1GXnA2JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZgdUZidS1GY282JFEkMTA2RidGOUY5Rmh1RmVwRltxRmJyRmVyLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmB1RltvRmJwRjlGXnFGT0ZnbkZfdC1GXnA2JC1GIzYrLUZndDYlLUZecDYkLUYjNiVGZm9GXXVGXnNGOUZjdUZodUZickZqdUZlcEZbcUZickZicEZodkZib0Y5Rl5xRmdu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkUHNpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQiIiJJInhHRic= LDgqJEkieEc2IiEiIyIiIiokSSNQaUclKnByb3RlY3RlZEciIiMjRiciIicqJi1JJVpldGFHNiRGKkkoX3N5c2xpYkdGJTYjIiIkRidGJEYnRiYqJkYpIiIlRiRGKyNGJyIjSSomLUYwNiMiIiZGJ0YkRjQhIiUqJkYpRi1GJEY2I0YnIiQqPSomLUYwNiMiIihGJ0YkRjwhIicqJkYpIiIpRiRGLSNGJyIlXTgqJi1GMDYjIiIqRidGJEZEISIpKiZGKSIjNUYkRkcjRiciJiZSNSomLUYwNiMiIzZGJ0YkRk0hIzU= LDgqJEkieEc2IiEiIiIiIiokRiQhIiMjRiciIiMqJEYkISIkI0YnIiInKiRGJCEiJiNGJiIjSSokRiQhIigjRiciI1UqJEYkISIqRjIqJEYkISM2IyIiJiIjbSokRiQhIzgjISQicCIlSUYqJEYkISM6IyIiKEYvKiRGJCEjPCMhJTxPIiQ1JiokRiQhIz4jIiZuUSUiJCl6 JCJfcXNjRnZzKSk0NCllKSpILSZlQFYkPlEneWxuXyF6V3c3Rm4kUWU6JylSInpUSjRiJEcpejpgJ3lQLD8hJCwi JCJfcVcpUj02MVp4OkhnQXBOZS4lUnosUWxXU3EzPnYqcCVHYCMpUmEwYj9lNVsmZjBGLDlANnlvKCEjKio= QyYtJkkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMiIzw2Iy1JKGNvbnZlcnRHRiY2JSwmSSNmMUc2IiIiIiokSSJ4R0YvISIjISIiLkknaG9ybmVyR0YvRjJGMD5JJHJlc0dGLy1GJDYjLUYrNiUqJi1JKGFsZ3N1YnNHRi82JC9GMUkieUdGLywmSSNmMkdGL0YwLUkiL0c2JEYmSShfc3lzbGliR0YvNiMsJCokRjIiIiNGTEY0RjBGMkYwRjVGQkYw LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYkIjJrQVtvMU1cayIhIzsiIiIqJiwmJCEyJyk9PmohUTYvQ0YlRiYqJiwmJCIyV1RMNnFwcEMkRiVGJiomLCYkITInek1kPzVyWlRGJUYmKiYsJiQiMmBDQSo0YHInMyZGJUYmKiYsJiQhMm9gIkhrYzRdZ0YlRiYqJiwmJCIyKDRjUSRcVCZHcUYlRiYqJiwmJCEyd2wzRTluZywpRiVGJiomLCYkIjI7T11oPF4qMyEqRiVGJkkieEc2IiQhMiY+VGcpPSVcKzUhIzpGJkZHRiZGJkYmRkdGJkYmRiZGR0YmRiZGJkZHRiZGJkYmRkdGJkYmRiZGR0YmRiZGJkZHRiZGJkYmRkdGJkYm LCYkIiIiIiIhRiQqJiwmJCIybm1tbW1tbW0iISM8RiQqJiwmJCEyTExMTExMTEwkISM9RiQqJiwmJCIyNVFfNFFfNFEjRi9GJComLCZGLUYkKiYsJiQiMmVkZGRkZGRkKEYvRiQqJiwmJCEyNmBONmBONmAjRipGJComLCYkIjJubW1tbW1tOyIhIztGJComLCYkITIhKTRYRidvOiM0KEZCRiRJInlHNiIkIjJiQCdbJXo8clwmISM6RiRGR0YkRiRGJEZHRiRGJEYkRkdGJEYkRiRGR0YkRiRGJEZHRiRGJEYkRkdGJEYkRiRGR0YkRiRGJEZHRiRGJA== QzA+SSJmRzYiLUkkUHNpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNJInhHRiUiIiI+SSNmMUdGJS1JKGNvbnZlcnRHRik2JC1JJ3Nlcmllc0dGKTYlRiQvRiwiIiEiIzVJKHBvbHlub21HRilGLT5JI2YyR0YlLUYxNiQtRjQ2JUYkL0YsSSlpbmZpbml0eUdGKSIjP0Y5Ri0tSSdmc29sdmVHRig2JC8qJCwmRiRGLUYvISIiIiIjLUkiXkdGKTYkRkohJDEiL0YsO0Y3Ri1GLS1GRDYkLyokLCZGJEYtRjtGSUZKRksvRiw7Ri0iJCsiRi0tJkkmZXZhbGZHRik2IyIjPDYjLUYxNiUsJkYvRi0qJEYsRklGLS5JJ2hvcm5lckdGJUYsRi0+SSRyZXNHRiUtRlo2Iy1GMTYlLUkoYWxnc3Vic0dGKDYkLyokRiwhIiNJInlHRiUsKEY7Ri0tSSNsbkdGKEYrRkktSSIvR0YoNiMsJEYsRkpGLUZdb0ZbcEYt LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkUHNpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJInhHRic= LDgqJEkieEc2IiEiIkYmSSZnYW1tYUclKnByb3RlY3RlZEdGJiomSSNQaUdGKCIiI0YkIiIiI0YsIiInKiYtSSVaZXRhRzYkRihJKF9zeXNsaWJHRiU2IyIiJEYsRiRGK0YmKiZGKiIiJUYkRjUjRiwiIyEqKiYtRjE2IyIiJkYsRiRGN0YmKiZGKkYuRiRGPSNGLCIkWCoqJi1GMTYjIiIoRixGJEYuRiYqJkYqIiIpRiRGRCNGLCIlXSUqKiYtRjE2IyIiKkYsRiRGRkYmKiZGKiIjNUYkRkwjRiwiJmJOKg== LDgtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJ4R0YoIiIiKiRGKiEiIiNGLSIiIyokRiohIiMjRi0iIzcqJEYqISIlI0YrIiQ/IiokRiohIicjRi0iJF8jKiRGKiEiKSNGKyIkUyMqJEYqISM1I0YtIiRLIiokRiohIzcjIiQicCImZ0YkKiRGKiEjOUYyKiRGKiEjOyMiJTxPIiVnIikqJEYqISM9IyEmblElIiZrViI= JCJfcVInZWw8I2VaZi0kRzhjP1dDW2NgXSxqQyl5ViYpNCYpKkgyPG0iW2NoZlg9aGMiKUhAXlV1YVdEISQsIg== JCJfcWNZT3NCbD5GKSp5Zk5xKFwuM2NwYV9fR09DX3FVPmtpNTcpMy1CXCRIVmtrY0R6XF05IUh0ISMqKg== LCYkITInR2AsXG06c2QhIzwiIiIqJiwmJCIya0FbbzFNXGsiISM7RiYqJiwmJCEyVmZmSiFwMC03RitGJiomLCYkIjIiUTZyTEtLIzMiRitGJiomLCYkITIqcEw5YngjcC4iRitGJiomLCYkIjIiXFcpPjFWdCwiRitGJiomLCYkITJHIz5ReCNcJDM1RitGJiomLCYkIjJVJXo+Y3QyLzVGK0YmKiYsJiQhMkEzRUdSMz8rIkYrRiZJInhHNiIkIjIhPXk3dlgqNCsiRitGJkZIRiZGJkYmRkhGJkYmRiZGSEYmRiZGJkZIRiZGJkYmRkhGJkYmRiZGSEYmRiZGJkZIRiZGJkYmRkhGJkYm KiYsJiQhMkxMTExMTExMKSEjPSIiIiomLCYkIjJMTExMTExMTCkhIz5GJyomLCYkITIkb1JEb1JEb1JGLEYnKiYsJiQiMm5tbW1tbW07JUYsRicqJiwmJCEyZWRkZGRkZGQoRixGJyomLCYkIjIkNCd6IzQneiM0QEYmRicqJiwmRiRGJyomLCYkIjJqbzojUiEpZktXISM8RidJInlHNiIkITIoPixGSVYmUjAkISM7RidGREYnRidGJ0ZERidGJ0YnRkRGJ0YnRidGREYnRidGJ0ZERidGJ0YnRkRGJ0YnRidGREYnRidGJ0ZERic= QyQ/KEkiaUc2IiIiIkYmIiM/SSV0cnVlRyUqcHJvdGVjdGVkR0MkPkkieEdGJSwmJCIiIyEiIkYmRiQkISImRjAtSSZwcmludEdGKTYjNyRGLC0mSSZldmFsZkdGKTYjIiM9NiMtSSRQc2lHNiRGKUkoX3N5c2xpYkdGJTYjRixGMA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQkISIkISIiJCIzcylSTid6KDRMNiMhIzw= NyQkISIpISIiJCEzSSk9I2YnKilSIVJTISM8 NyQkISM4ISIiJCIzJno7bSlbMGEjKUchIzw= NyQkISM9ISIiJCEzdUttLlRWWyRbJCEjPA== NyQkISNCISIiJCIzNz89Y2RKSzxMISM8 NyQkISNHISIiJCEzZ3ZQKlFbVGo3JCEjPA== NyQkISNMISIiJCIzOkJAZmdNTj9PISM8 NyQkISNRISIiJCEzXExwOiplJD1qRyEjPA== NyQkISNWISIiJCIzKG8rRixnNkgmUSEjPA== NyQkISNbISIiJCEzOytPI2VEXVtsIyEjPA== NyQkISNgISIiJCIzdUQrVFgzZlRTISM8 NyQkISNlISIiJCEzKT06P0ZZT0NbIyEjPA== NyQkISNqISIiJCIzWiU9U1QrQC4/JSEjPA== NyQkISNvISIiJCEzN1MyPlJ3UE5CISM8 NyQkISN0ISIiJCIzXForXjB0SVBWISM8 NyQkISN5ISIiJCEzIj5oJik0XnNyPyMhIzw= NyQkISMkKSEiIiQiMyczKjNBTCMqeWRXISM8 NyQkISMpKSEiIiQhM0dbI1x0OU9ONCMhIzw= NyQkISMkKiEiIiQiMyg0S1RcNjtgYyUhIzw= NyQkISMpKiEiIiQhM208Ri1KYFwiKj4hIzw= LUkkUHNpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMkISQmPiEiIw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCFfcVtGbXkvZU5ZOVMlUiNbT2plakE0UT11VDwqUkonb2sycUUwIiopNGhyVShcSCIqKT5gKipHUksqPSEjKSo= LUkkUHNpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQiIiIkIidvRF4hIig= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCJfcVtkclxoYFlAWkdbMThdImZrbEA1WmctMGZPQS0rLSc+aF1RIT0hXFkjemtSIil6Ti1mVzojUSEjKCo= JSFH openturns-1.9/validation/src/TruncatedNormalMoments.mw000066400000000000000000000777061307543307100233770ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZLLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYlLUYsNiVRJnNpZ21hRicvRjBGPUY5LUY2Ni1RIj5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEiMEYnRjlGOUY1Rk9GZ24tRiw2JVEkcGRmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoLUYjNiQtRiw2JVEkZXhwRidGZ29GOS1GYG82JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZlcS1GZnA2KC1GIzYjLUklbXN1cEdGJDYlLUYsNiVRInhGJ0YvRjItRiM2Iy1GXHA2JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZecEZhci8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXXMvJSliZXZlbGxlZEdGPUY5LUYjNiQtRiw2JVElc3FydEYnRmdvRjktRmBvNiQtRiM2JUZjci1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRiw2JVEjUGlGJ0Znb0Y5RjlGaHJGW3NGXnNGYHNGNUZPRmduRl9wRmJwLUZmcDYoRl9wLUYjNiQtRiw2JVEkaW50RidGL0YyLUZgbzYkLUYjNilGX3AtRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Zeci1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSJhRidGL0YyLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmRxRltvLUYsNiVRImJGJ0YvRjJGOUZockZbc0Zec0Zgc0Y1Rk8tRjY2L1EkZm9yRicvJSVib2xkR0YxL0YzUSVib2xkRicvJStmb250d2VpZ2h0R0ZkdkY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUYsNiVRIm5GJ0YvRjJGZ24tRjY2L1ElZnJvbUYnRmF2RmN2RmV2RjtGPkZARkJGREZGRkhGam5GW29GZ24tRlxwNiRGanJGOUZnbi1GNjYvUSN0b0YnRmF2RmN2RmV2RjtGPkZARkJGREZGRkhGam5GW29GZ24tRlxwNiRRIjRGJ0Y5RmduLUY2Ni9RI2RvRidGYXZGY3ZGZXZGO0Y+RkBGQkZERkZGSEZqbkZbb0ZPLUYsNiVRJnByaW50RidGL0YyLUZgbzYkLUYjNiMtRmBvNiYtRiM2JkZndkZcdS1GLDYlUShhbGdzdWJzRidGL0YyLUZgbzYkLUYjNiotRiw2JVEkZXJmRidGZ29GOS1GYG82JC1GIzYoLUZmcDYoRl13RmFyRmhyRltzRl5zRmBzRlt0RmRzLUZgbzYkRmFyRjlGW3RGW3ZGOUZidS1GLDYlUSVlcmZCRidGL0YyRlx1RmduRmN4LUZgbzYkLUYjNipGangtRmBvNiQtRiM2KEZheUZbdEZkc0ZjeUZbdEZldUY5RmJ1LUYsNiVRJWVyZkFGJ0YvRjJGXHVGZ24tRiw2JVEnZmFjdG9yRidGL0YyLUZgbzYkLUYjNiVGZ25GZXQtRmBvNiQtRiM2Ky1GXHI2JUZeci1GIzYjRmd2RmZyRlt0Rl9wRlx1Rl5yRmJ1RmV1Rmh1Rlt2RjlGOUY5RjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Y5LUY2Ni1RIjtGJ0Y5RjtGX3VGQEZCRkRGRkZIRmpuRk1GT0Znbi1GNjYvUSNvZEYnRmF2RmN2RmV2RjtGPkZARkJGREZGRkhGam5GW29GaFts LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQiIiIsJCoqIiIjI0YjRiYsJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQqJEkiYUdGLkYmIyEiIkYmRiMtRio2IywkKiRJImJHRi5GJkYzRjRGI0kjUGlHRixGMywmSSVlcmZBR0YuRiNJJWVyZkJHRi5GNEY0RjQ= NyQiIiMsJCooSSNQaUclKnByb3RlY3RlZEcjISIiRiMsKiooRiMjIiIiRiNJImFHNiJGLS1JJGV4cEc2JEYnSShfc3lzbGliR0YvNiMsJCokRi5GI0YoRi1GLSooRiNGLEkiYkdGL0YtLUYxNiMsJCokRjhGI0YoRi1GKSomRiZGLEklZXJmQkdGL0YtRi0qJkYmRixJJWVyZkFHRi9GLUYpRi0sJkZARi1GPkYpRilGKQ== NyQiIiQsJCoqIiIjIyIiIkYmLCotSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiRJImFHRi9GJiMhIiJGJkYmKiZGKkYoRjNGJkYoLUYrNiMsJCokSSJiR0YvRiZGNCEiIyomRjdGKEY7RiZGNUYoSSNQaUdGLUY0LCZJJWVyZkFHRi9GKEklZXJmQkdGL0Y1RjVGNQ== NyQiIiUsJCooSSNQaUclKnByb3RlY3RlZEcjISIiIiIjLC4qKEYqIyIiIkYqSSJhRzYiIiIkLUkkZXhwRzYkRidJKF9zeXNsaWJHRjA2IywkKiRGL0YqRihGLkYuKihGKkYtRi9GLkYyRi5GMSooRipGLUkiYkdGMEYuLUYzNiMsJCokRjtGKkYoRi4hIiQqJkYmRi1JJWVyZkFHRjBGLkZAKihGKkYtRjtGMUY8Ri5GKSomRiZGLUklZXJmQkdGMEYuRjFGLiwmRkJGLkZFRilGKUYp JSFH openturns-1.9/validation/src/Valid2SKolmogorov.py000066400000000000000000000010271307543307100222410ustar00rootroot00000000000000#!/usr/bin/env python import openturns as ot import scipy.stats as st from numpy import asarray n1 = 200 n2 = 300 def compare(sample1, sample2): print(st.ks_2samp(asarray(sample1).flatten(), asarray(sample2).flatten())) print(ot.FittingTest.TwoSamplesKolmogorov(sample1, sample2)) sample1 = ot.Normal().getSample(n1) sample2 = ot.Normal(0.5, 1.5).getSample(n2) compare(sample1, sample2) sample3 = ot.Normal(0.01, 1.0).getSample(n2) compare(sample1, sample3) sample4 = ot.Normal().getSample(n2) compare(sample1, sample4) openturns-1.9/validation/src/ValidAbdoMixture.mws000066400000000000000000000170301307543307100223000ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 214 "restart:\nwith(Stat istics):\nPhi:=CDF(RandomVariable(Normal(mu,sigma)),x):\nT1:=1/2*subs( mu=200,sigma=20,Phi)+1/2*subs(mu=150,sigma=15,Phi);\nT2:=1/2*subs(mu=1 25,sigma=125/10,x=y,Phi)+1/2*subs(mu=100,sigma=10,x=y,Phi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#T1G,(#\"\"\"\"\"#F'*&#F'\"\"%F'-%$erfG6#, $*(\"#S!\"\"F(F&,&%\"xGF'\"$+#F2F'F'F'F'*&F*F'-F-6#,$*(\"#IF2F(F&,&F4F '\"$]\"F2F'F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#T2G,(#\"\"\"\" \"#F'*&#F'\"\"%F'-%$erfG6#,$*(\"#D!\"\"F(F&,&%\"yGF'\"$D\"F2F'F'F'F'*& F*F'-F-6#,$*(\"#?F2F(F&,&F4F'\"$+\"F2F'F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "f:=subs(mu=0,sigma=1,x=solve(T1=u,x),Phi);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#, $*&F&F'*&F(F&-%'RootOfG6#,*F(!\"\"-F+6#,$*(\"#SF4F(F&,&%#_ZGF'\"$+#F4F 'F'F4-F+6#,$*(\"#IF4F(F&,&F;F'\"$]\"F4F'F'F4*&\"\"%F'%\"uGF'F'F'F'F'F' F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 112 "for i from 1 to 11 d o\n X:=evalf(-10+20*i/11);\n m[i]:=subs(mu=0,sigma=1,x=evalf(fsolve( T1=X,x=subs()),Phi);\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$!+ #====)!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"\",&#F'\"\" #F'*&F)F'-%$erfG6#,$*&F)F'*&F*F)-%'fsolveG6$/,(F)F'*&#F'\"\"%F'-F-6#,$ *(\"#S!\"\"F*F),&%\"xGF'\"$+#F?F'F'F'F'*&F8F'-F-6#,$*(\"#IF?F*F),&FAF' \"$]\"F?F'F'F'F'$!+#====)!\"*FAF'F'F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$!+kjjjj!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> &%\"mG6#\"\"#,&#\"\"\"F'F**&F)F*-%$erfG6#,$*&F)F**&F'F)-%'fsolveG6$/,( F)F**&#F*\"\"%F*-F-6#,$*(\"#S!\"\"F'F),&%\"xGF*\"$+#F?F*F*F*F**&F8F*-F -6#,$*(\"#IF?F'F),&FAF*\"$]\"F?F*F*F*F*$!+kjjjj!\"*FAF*F*F*F*F*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$!+XXXXX!\"*" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>&%\"mG6#\"\"$,&#\"\"\"\"\"#F**&F)F*-%$erfG6#,$*&F)F* *&F+F)-%'fsolveG6$/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S!\"\"F+F),&%\"xGF*\" $+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F@F*F*F*F*$!+XXXXX! \"*FBF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$!+FFFFF!\"* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"%,&#\"\"\"\"\"#F**&F) F*-%$erfG6#,$*&F)F**&F+F)-%'fsolveG6$/,(F)F**&#F*F'F*-F.6#,$*(\"#S!\" \"F+F),&%\"xGF*\"$+#F?F*F*F*F**&F9F*-F.6#,$*(\"#IF?F+F),&FAF*\"$]\"F?F *F*F*F*$!+FFFFF!\"*FAF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"XG$!+\"4444*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"&,&# \"\"\"\"\"#F**&F)F*-%$erfG6#,$*&F)F**&F+F)-%'fsolveG6$/,(F)F**&#F*\"\" %F*-F.6#,$*(\"#S!\"\"F+F),&%\"xGF*\"$+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@ F+F),&FBF*\"$]\"F@F*F*F*F*$!+\"4444*!#5FBF*F*F*F*F*" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"XG$\"+\"4444*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"',&#\"\"\"\"\"#F**&F)F*-%$erfG6#,$*&F)F**&F+F)-%'fsolv eG6$/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S!\"\"F+F),&%\"xGF*\"$+#F@F*F*F*F** &F9F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F@F*F*F*F*$\"+\"4444*!#5FBF*F*F*F* F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$\"+FFFFF!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"(,&#\"\"\"\"\"#F**&F)F*-%$erfG6#,$ *&F)F**&F+F)-%'fsolveG6$/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S!\"\"F+F),&%\" xGF*\"$+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F@F*F*F*F*$\"+ FFFFF!\"*FBF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$\"+XXX XX!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"\"),&#\"\"\"\"\"# F**&F)F*-%$erfG6#,$*&F)F**&F+F)-%'fsolveG6$/,(F)F**&#F*\"\"%F*-F.6#,$* (\"#S!\"\"F+F),&%\"xGF*\"$+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@F+F),&FBF* \"$]\"F@F*F*F*F*$\"+XXXXX!\"*FBF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$\"+kjjjj!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >&%\"mG6#\"\"*,&#\"\"\"\"\"#F**&F)F*-%$erfG6#,$*&F)F**&F+F)-%'fsolveG6 $/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S!\"\"F+F),&%\"xGF*\"$+#F@F*F*F*F**&F9 F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F@F*F*F*F*$\"+kjjjj!\"*FBF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$\"+#====)!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"#5,&#\"\"\"\"\"#F**&F)F*-%$erfG6#,$*&F) F**&F+F)-%'fsolveG6$/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S!\"\"F+F),&%\"xGF* \"$+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F@F*F*F*F*$\"+#=== =)!\"*FBF*F*F*F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"XG$\"#5\"\"! " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"mG6#\"#6,&#\"\"\"\"\"#F**&F)F *-%$erfG6#,$*&F)F**&F+F)-%'fsolveG6$/,(F)F**&#F*\"\"%F*-F.6#,$*(\"#S! \"\"F+F),&%\"xGF*\"$+#F@F*F*F*F**&F9F*-F.6#,$*(\"#IF@F+F),&FBF*\"$]\"F @F*F*F*F*$\"#5\"\"!FBF*F*F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "fsolve(T1=0.2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'fsolveG6 $/,(#\"\"\"\"\"#F)*&#F)\"\"%F)-%$erfG6#,$*(\"#S!\"\"F*F(,&%\"xGF)\"$+# F4F)F)F)F)*&F,F)-F/6#,$*(\"#IF4F*F(,&F6F)\"$]\"F4F)F)F)F)$F*F4F6" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 80 "plot(T1,x=0..300);evalf(fsol ve(T1=0.5,x=solve(subs(mu=200,sigma=1,Phi)=0.5,x)));" }}{PARA 13 "" 1 "" {GLPLOT2D 505 505 505 {PLOTDATA 2 "6%-%'CURVESG6$7V7$$\"\"!F)F(7$$ \"3%*******\\i9Rl!#fS*\\F1$\"3$pk6\"p:U$Q'!#H7$$\"30++v=$f%GcF1$\"3/+o3YU1V5!#F7 $$\"3q+++Dy,\"G'F1$\"3_Ysn*>s*Q:!#E7$$\"3I++]7+UE99!#D7$ $\"3?,++v4&G](F1$\"3)4Y4[S*[[9!#C7$$\"3?+++Drc_\")F1$\"3G?)ow6*y\\7!#B 7$$\"3!******\\-*oy()F1$\"3MZp#[S%o1%)Fgo7$$\"3v***\\PpnsM*F1$\"3_!4U' \\g[3T!#A7$$\"3)*****\\siL-5!#:$\"3b=x>vy4qA!#@7$$\"3++++!R5'f5Ffp$\"3 &=zI<^c,K)Fip7$$\"3.+]P/QBE6Ffp$\"3]L\"\\BG*y!=$!#?7$$\"3***\\(o4.sb6F fp$\"3rgi%*[c^OaFdq7$$\"3&******\\\"o?&=\"Ffp$\"3HUNf!eIT(*)Fdq7$$\"3$ **\\(o%=ev@\"Ffp$\"3ab)e`Y!)\\\\\"!#>7$$\"31+]Pa&4*\\7Ffp$\"3Szl&z#H$4 R#Fdr7$$\"3?++v3dr!G\"Ffp$\"3_%e!3tLJ-OFdr7$$\"3@+]7j=_68Ffp$\"3e#fM*Q TfP_Fdr7$$\"32++vVy!eP\"Ffp$\"3S,U!y$ovB5!#=7$$\"3'***\\(=WU[V\"Ffp$\" 3'ex*pnc\"=n\"Fis7$$\"3%)***\\7B>&)\\\"Ffp$\"3_wkKhVr5DFis7$$\"3,+]P>: mk:Ffp$\"3s)yfN[FxS$Fis7$$\"3,+]iv&QAi\"Ffp$\"3WuDxEW]4TFis7$$\"3%**** \\PPBWo\"Ffp$\"35yy%=+g#RZFis7$$\"3,+++bjm[Ffp$\"3ToIsDza+pFis7$$\"3s*****\\@80+#Ffp$\"3Eo'oe]* *H](Fis7$$\"3'*****\\7,Hl?Ffp$\"3-@k)z'3QR\")Fis7$$\"3')**\\P4w)R7#Ffp $\"3_JE9qRnh')Fis7$$\"3@++]x%f\")=#Ffp$\"3wo!*zZq'H8*Fis7$$\"3p**\\P/- a[AFfp$\"3*HI>XU`]Y*Fis7$$\"38+](=Yb;J#Ffp$\"3%zg!zH53-(*Fis7$$\"3y*** *\\i@OtBFfp$\"3_p2Vb*z^%)*Fis7$$\"3v**\\PfL'zV#Ffp$\"3-Xz$Q=c'G**Fis7$ $\"35+++!*>=+DFfp$\"3aE#R?LJ!p**Fis7$$\"3?++DE&4Qc#Ffp$\"3-!3quSez)**F is7$$\"3<+]P%>5pi#Ffp$\"3G&[zi1(p&***Fis7$$\"3K+++bJ*[o#Ffp$\"3EdZUw*f %)***Fis7$$\"3%)***\\7<[8v#Ffp$\"3smW_['p&****Fis7$$\"3D+++Ijy5GFfp$\" 3[fo:!4u)****Fis7$$\"3D+]P/)fT(GFfp$\"3kWb#=0p*****Fis7$$\"3:+]i0j\"[$ HFfp$\"2[I*>=E******F-7$$\"$+$F)$\"259Unc)******F--%'COLOURG6&%$RGBG$ \"*++++\"!\")F(F(-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F(Fh[l%(DEFAULTG " 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }} }{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+9dG9 \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 9 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidAbdoMixture.txt000066400000000000000000000133501307543307100223120ustar00rootroot00000000000000> restart: > with(Statistics): > Phi:=CDF(RandomVariable(Normal(mu,sigma)),x): > T1:=1/2*subs(mu=200,sigma=20,Phi)+1/2*subs(mu=150,sigma=15,Phi); > T2:=1/2*subs(mu=125,sigma=125/10,x=y,Phi)+1/2*subs(mu=100,sigma=10,x=y > ,Phi); 1/2 1/2 2 (x - 200) 2 (x - 150) T1 := 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) 40 30 1/2 1/2 2 (y - 125) 2 (y - 100) T2 := 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) 25 20 > f:=subs(mu=0,sigma=1,x=solve(T1=u,x),Phi); 1/2 f := 1/2 + 1/2 erf(1/2 2 RootOf( 1/2 1/2 2 (_Z - 200) 2 (_Z - 150) -2 - erf(---------------) - erf(---------------) + 4 u)) 40 30 > for i from 1 to 11 do > X:=evalf(-10+20*i/11); > m[i]:=subs(mu=0,sigma=1,x=evalf(fsolve(T1=X,x=subs()),Phi); > od; X := -8.181818182 1/2 m[1] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 -8.181818182, x)) X := -6.363636364 1/2 m[2] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 -6.363636364, x)) X := -4.545454545 1/2 m[3] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 -4.545454545, x)) X := -2.727272727 1/2 m[4] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 -2.727272727, x)) X := -0.9090909091 1/2 m[5] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 -0.9090909091, x)) X := 0.9090909091 1/2 m[6] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 0.9090909091, x)) X := 2.727272727 1/2 m[7] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 2.727272727, x)) X := 4.545454545 1/2 m[8] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 4.545454545, x)) X := 6.363636364 1/2 m[9] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 6.363636364, x)) X := 8.181818182 1/2 m[10] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 40 30 8.181818182, x)) X := 10. 1/2 m[11] := 1/2 + 1/2 erf(1/2 2 fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 10. 40 30 , x)) > fsolve(T1=0.2); fsolve( 1/2 1/2 2 (x - 200) 2 (x - 150) 1/2 + 1/4 erf(--------------) + 1/4 erf(--------------) = 0.2 40 30 , x) > plot(T1,x=0..300);evalf(fsolve(T1=0.5,x=solve(subs(mu=200,sigma=1,Phi) > =0.5,x))); 171.4285714 > openturns-1.9/validation/src/ValidAndersonDarling.mws000066400000000000000000000115771307543307100231410ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 229 "restart:\nf:=piecew ise(AA < 0.2,1 - exp(-13.436 + 101.14 * AA - 223.73 * AA^2), AA < 0.34 , 1 - exp(-8.318 + 42.796 * AA - 59.938 * AA^2), AA < 0.6, exp(0.9177 \+ - 4.279 * AA - 1.38 * AA^2), exp(1.2937 - 5.709 * AA + 0.0186 * AA^2)) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG-%*PIECEWISEG6&7$,&\"\"\"F* -%$expG6#,($\"&OM\"!\"$!\"\"*&$\"&9,\"!\"#F*%#AAGF*F**&$\"&tB#F6F*)F7 \"\"#F*F2F22F7$F " 0 "" {MPLTEXT 1 0 19 "plot(f,AA=-1..100);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 13 "" 1 "" {GLPLOT2D 279 279 279 {PLOTDATA 2 "6%-%'CURVESG6$7_o7 $$!\"\"\"\"!$\"\"\"F*7$$!3'HLekG4\"[s!#=F+7$$!3/nm\"Hd=i\\%F0F+7$$!3d+ ]PfyKW/%p)*>[2M*F07$$\"3:*\\P4@3NQ#F0$\"3u$)R6$)3u=yF07$$\"3j:HK*)3[rIF0$ \"350!f+_q+j&F07$$\"3RK$3xc`%fPF0$\"3\"G\\GrplH7%F07$$\"3g[P4YiUZWF0$ \"3m*[X\\*=LTGF07$$\"3Nl\"zW#*)RN^F0$\"321w,mUoK>F07$$\"36#ekGgrL#eF0$ \"3_;p&)Htb(H\"F07$$\"3())**\\7GW8^'F0$\"3yk>?G(=,$*)!#>7$$\"3zk;z%*\\ Bj#*F0$\"3KnQT$*f&4(=F^o7$$\"3=LL$3d7:?\"!#<$\"36\\M8bC\"4$R!#?7$$\"3, D1R5J&4W\"Fgo$\"3@'Ql;#zw85Fjo7$$\"3i;z%*\\OR!o\"Fgo$\"3()e3NsA0?E!#@7 $$\"3B3_]*=M)>>Fgo$\"3'))32#RB!fy'!#A7$$\"32+D1HZFf@Fgo$\"3rv][EDHhv9%>\"!#B7$$\"3]m;H()o.VCr_Fgo$\"3<(f7/\\tx!#X7$$\"3$)*\\iXskqO\"Fbs$\"3$f&=Tfk)>]\"!#\\7$$\"33Le*=EL8e \"Fbs$\"3O]?1\\bGFbs$\"35L#o6@OsB#!#\")7$$\"3:Le*oX8p/$Fbs$ \"3vnl1(R'G$G$!#&)7$$\"3@mmT<@`uKFbs$\"3$=*eU625%3\"!#*)7$$\"3Gmmmz\\N nMFbs$\"30,766_R:?!#$*7$$\"3c*\\i!3Ql\"p$Fbs$\"3!H(>yO72(4\"!#(*7$$\"3 /mm;xi>!*QFbs$\"3M4#G2DUc:#!$,\"7$$\"3C+D1L)G!3TFbs$\"3(=%3W>;-)=#!$0 \"7$$\"3/+v=RpX:VFbs$\"3s)*zB%=5+1%!$4\"7$$\"3zm;H2k)=`%Fbs$\"3s7'4%3R Dah!$8\"7$$\"3]m\"z4AO1t%Fbs$\"3ir'*fL.(3B#!$;\"7$$\"3%GL3_u9]%\\Fbs$ \"3qA[V:>%R6&!$?\"7$$\"3$H$e*=y$pn^Fbs$\"3\\O6$*\\Ah:5!$B\"7$$\"3D*\\P z`O:O&Fbs$\"3hG\"zPA?%oq!$F\"7$$\"3\"HLe\\-#*3d&Fbs$\"3`:^\")[U!o@$!$I \"7$$\"3+****\\Gn<(y&Fbs$\"3vq_TmQtY8!$L\"7$$\"3-**\\7:\"p()*fFbs$\"3% okY6'y!))*y!$P\"7$$\"3s*\\i!Hc\\.iFbs$\"3e]4iM\\A6p!$S\"7$$\"3T**\\(y^ 43V'Fbs$\"3Kb#)feO/QL!$V\"7$$\"38mm;d61NmFbs$\"3o?-%3k3;7%!$Y\"7$$\"3@ ***\\(yL9`oFbs$\"3hwDqSW(z$Q!$\\\"7$$\"3;Ke*[Ge20(Fbs$\"3Qx[k?H'f,)!$_ \"7$$\"3a***\\Ud.oE(Fbs$\"3i;s6(=K=6\"!$a\"7$$\"3xl\"HZN&3quFbs$\"3`AC F*[^dm#!$d\"7$$\"3n*\\7$)QtDo(Fbs$\"3$Q*)*[\"**>>t&!$g\"7$$\"3/lmT!G>. *yFbs$\"37H6eF`xi;!$i\"7$$\"3Q)\\il(*4y5)Fbs$\"3dy>T;_hbV!$l\"7$$\"3rL LLm$zsJ)Fbs$\"3s7pQ_tvx;!$n\"7$$\"3]K$3<2#\\J&)Fbs$\"3C-ij`Z2Yn!$q\"7$ $\"3Im\"Hx)4$Ru)Fbs$\"3C0!HEyt1O$!$s\"7$$\"3^++])GS\"R*)Fbs$\"3vMME/YC %)H!$u\"7$$\"3ol;aw@(G;*Fbs$\"3))=$)Qr/&>e\"!$w\"7$$\"3CKLLW1)HO*Fbs$ \"3\\ttW`JV2v*p'*p@!$#=7$$\"$+\"F*$\"3vX**[vP!H_#!$%=-%'COLOURG6 &%$RGBG$\"#5F)$F*F*Fhcl-%+AXESLABELSG6$Q#AA6\"Q!F]dl-%%VIEWG6$;F(F]cl% (DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Cu rve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "evalf(subs(AA=200 ,f));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+)fSBI'!$#=" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "minimize(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%)minimizeG6#-%*PIECEWISEG6&7$,&\"\"\"F+-%$expG6#,($\" &OM\"!\"$!\"\"*&$\"&9,\"!\"#F+%#AAGF+F+*&$\"&tB#F7F+)F8\"\"#F+F3F32F8$ F=F37$,&F+F+-F-6#,($\"%=$)F2F3*&$\"&'zUF2F+F8F+F+*&$\"&Q*fF2F+F " 0 "" {MPLTEXT 1 0 50 "solve(diff(ex p(1.2937-5.709*AA+.186e-1*AA^2),AA));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+>unM:!\"(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "5 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidAndersonDarling.txt000066400000000000000000000030271307543307100231410ustar00rootroot00000000000000> restart: > f:=piecewise(AA < 0.2,1 - exp(-13.436 + 101.14 * AA - 223.73 * AA^2), > AA < 0.34, 1 - exp(-8.318 + 42.796 * AA - 59.938 * AA^2), AA < 0.6, > exp(0.9177 - 4.279 * AA - 1.38 * AA^2), exp(1.2937 - 5.709 * AA + > 0.0186 * AA^2)); { 2 { 1 - exp(-13.436 + 101.14 AA - 223.73 AA ) AA < 0.2 { { 2 { 1 - exp(-8.318 + 42.796 AA - 59.938 AA ) AA < 0.34 f := { { 2 { exp(0.9177 - 4.279 AA - 1.38 AA ) AA < 0.6 { { 2 { exp(1.2937 - 5.709 AA + 0.0186 AA ) otherwise > plot(f,AA=-1..100); > > evalf(subs(AA=200,f)); -172 0.6302340598 10 > minimize(f); minimize( { 2 { 1 - exp(-13.436 + 101.14 AA - 223.73 AA ) AA < 0.2 { { 2 { 1 - exp(-8.318 + 42.796 AA - 59.938 AA ) AA < 0.34 { ) { 2 { exp(0.9177 - 4.279 AA - 1.38 AA ) AA < 0.6 { { 2 { exp(1.2937 - 5.709 AA + 0.0186 AA ) otherwise > solve(diff(exp(1.2937-5.709*AA+.186e-1*AA^2),AA)); 153.4677419 > openturns-1.9/validation/src/ValidBesselI0.mw000066400000000000000000000660431307543307100213100ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZVLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUZQNiZGUkZVRlgvRmVuUSVhdXRvRictRiw2JVEjZmRGJ0YvRjItRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZeby1GLDYlUSZmb3BlbkYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYqLUYsNiNRIUYnLUkjbXNHRiQ2I1EzYmVzc2VsSTFfbWFwbGUuY3N2RictRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZhby9GTlEsMC4zMzMzMzMzZW1GJ0Zeby1GLDYlUSZXUklURUYnRi9GMkZlcEZeby1GLDYlUSVURVhURidGL0YyRjktRjY2LVEiO0YnRjlGO0ZocEZARkJGREZGRkhGYW9GTUZnbkZPRl5vLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGanFGO0Y+RkBGQkZERkZGSEZhb0Zib0Zeby1GLDYlUSJpRidGL0YyRl5vLUY2Ni9RJWZyb21GJ0ZncUZpcUZbckY7Rj5GQEZCRkRGRkZIRmFvRmJvRl5vLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZnci1JI21uR0YkNiRRJDEwMEYnRjlGXm8tRjY2L1EjdG9GJ0ZncUZpcUZbckY7Rj5GQEZCRkRGRkZIRmFvRmJvRl5vRmlyRl5vLUY2Ni9RI2RvRidGZ3FGaXFGW3JGO0Y+RkBGQkZERkZGSEZhb0Zib0ZPRl5vLUYsNiVRInhGJ0YvRjJGY28tRmpyNiRRJTIyLjVGJ0Y5LUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGZnJGaHItRmpyNiRRJTAuMDFGJ0Y5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZhb0Zib0Zeb0ZdckY1Rk8tRiw2JVEoZnByaW50ZkYnRi9GMi1Gam82JC1GIzYvRltvRmVwRl5vLUZicDYjUS4lLjIwZzslLjIwZ1xuRidGZXAtRiw2JVEmZXZhbGZGJ0YvRjItRmpvNiYtRiM2Iy1GanI2JFEjMjBGJ0Y5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRictRmpvNiQtRiM2JEZeb0Zjc0Y5RmVwRl5vRlx1Rl91LUZqbzYkLUYjNiUtRiw2JVEoQmVzc2VsSUYnL0YwRj1GOS1Gam82JC1GIzYlLUZqcjYkUSIxRidGOUZlcEZjc0Y5Rl5wRjlGOUZhcUZPRl5vLUY2Ni9RI29kRidGZ3FGaXFGW3JGO0Y+RkBGQkZERkZGSEZhb0Zib0Y1Rk9GXm8tRiw2JVEnZmNsb3NlRidGL0YyLUZqbzYkLUYjNiNGW29GOQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiIh LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEoQmVzc2VsSUYnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSShtZmVuY2VkR0YkNiQtRiM2Ji1JI21uR0YkNiRRJDAuMEYnRjItSSNtb0dGJDYtUSIsRidGMi8lJmZlbmNlR0YxLyUqc2VwYXJhdG9yR1EldHJ1ZUYnLyUpc3RyZXRjaHlHRjEvJSpzeW1tZXRyaWNHRjEvJShsYXJnZW9wR0YxLyUubW92YWJsZWxpbWl0c0dGMS8lJ2FjY2VudEdGMS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUY/Ni1RKiZ1bWludXMwO0YnRjJGQi9GRUYxRkdGSUZLRk1GTy9GUlEsMC4yMjIyMjIyZW1GJy9GVUZmbi1GOzYkUSYxMDAuMEYnRjJGMg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrMjx2dDUiI0w= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbW5HRiQ2JFEqMC4xMDczNzUyRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkjbW9HRiQ2LVEifkYnRi8vJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjgvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGRy1JI21pR0YkNiVRIkRGJy8lJ2l0YWxpY0dGOEYvLUYzNi1RIitGJ0YvRjZGOUY7Rj1GP0ZBRkMvRkZRLDAuMjIyMjIyMmVtRicvRklGVC1GLDYkUSM0M0YnRi9GLw== openturns-1.9/validation/src/ValidBeta.mws000066400000000000000000000206531307543307100207350ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1200 "restart:\nwith(Sta tistics):\nassume(u<1,u>0,r>0,t>r);\nbeta_:=RandomVariable(Beta(r,t-r) ):\npdf:=factor(subs(u=(x-a)/(b-a),PDF(beta_,u))/(b-a));\nddf:=(diff(p df,x));\ncf:=simplify(subs(w=(u-a)/(b-a),CharacteristicFunction(beta_, w)),hypergeom);\nfactor(ddf/pdf);\ncdf:=subs(u=(x-a)/(b-a),CDF(beta_,u ));\nmu_:=a+(b-a)*Mean(beta_);\nvar_:=(b-a)^2*Variance(beta_);\nskew_: =simplify(convert(Skewness(beta_),GAMMA),symbolic);\nkurt_:=simplify(c onvert(Kurtosis(beta_),GAMMA),symbolic);\nsol:=subs(m='mu',v='var',sol ve(\{mu_=m,var_=v\},\{r,t\}));\nqdf:=a+(b-a)*Quantile(beta_,p);\nqdf2: =solve(cdf=p,x);\npdfgr:=map(_x->factor(subs(t=r+s,_x)),[diff(pdf, r)/ pdf,diff(pdf, t)/pdf,diff(pdf, a)/pdf,diff(pdf, b)/pdf]);\ncdfgr:=[dif f(cdf, r),diff(cdf, t),diff(cdf, a),diff(cdf, b)];\nvalnum:=r=2,t=5,a= -1,b=2:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\ne valf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,map(_x->_x*pdf,pdfg r)));\nevalf(subs(valnum,x=1,cdfgr));\nevalf(solve(subs(valnum,cdf)=0. 95,x));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,sqrt(var_)));\nev alf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_));\nevalf(subs(valnu m,var_));\nevalf(subs(valnum,[mu_,sqrt(var_)]));\nevalf(subs(sol,mu=mu _,var=var_,valnum,[r,t]));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdf G,$**)*&,&%\"xG!\"\"%\"aG\"\"\"F-,&%\"bGF+F,F-F+,&F-F+%#r|irGF-F-)*&,& F/F+F*F-F-F.F+,(%#t|irGF-F1F+F-F+F--%%BetaG6$F1,&F6F-F1F+F+F.F+F+" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG,&*.)*&,&%\"xG!\"\"%\"aG\"\"\"F -,&%\"bGF+F,F-F+,&F-F+%#r|irGF-F-F0F-F)F+)*&,&F/F+F*F-F-F.F+,(%#t|irGF -F1F+F-F+F--%%BetaG6$F1,&F6F-F1F+F+F.F+F-*.F'F-F2F-F5F-F4F+F7F+F.F+F+ " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG-%*hypergeomG6%7#%#r|irG7#%# t|irG*(,&%#u|irG\"\"\"%\"aG!\"\"F/,&%\"bGF/F0F1F1^#F/F/" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,$*(,0%\"bG\"\"\"*&\"\"#F'%\"xGF'!\"\"*&%#r|irGF 'F&F'F+%\"aGF'*&%#t|irGF'F*F'F'*&F0F'F.F'F+*&F-F'F.F'F'F',&F&F+F*F'F+, &F*F+F.F'F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG**-%%BetaG6$%# r|irG,&%#t|irG\"\"\"F)!\"\"F-F)F-)*&,&%\"xGF,%\"aGF-F,,&%\"bGF,F2F-F-F )F,-%*hypergeomG6%7$F),(F,F,F+F-F)F,7#,&F,F,F)F,F/F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%\"aG\"\"\"*(,&%\"bGF'F&!\"\"F'%#r|irGF'%#t |irGF+F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*,,&%\"bG\"\"\"%\" aG!\"\"\"\"#%#r|irGF(,&%#t|irGF(F,F*F(F.!\"#,&F.F(F(F(F*" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&skew_G,$*.\"\"#\"\"\",&%#t|irGF(F(F(#F(F',&*& F'F(%#r|irGF(F(F*!\"\"F(F.#F/F',&F*F(F.F/F0,&F'F(F*F(F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$*0\"\"$\"\"\",,*&)%#r|irG\"\"#F(%#t| irGF(F(*&\"\"'F(F+F(!\"\"*&F,F()F.F-F(F1*(F0F(F,F(F.F(F(*&F-F(F3F(F1F( ,&F.F(F(F(F(F,F1,&F.F1F,F(F1,&F'F(F.F(F1,&F-F(F.F(F1F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%#t|irG,$*&,,*&%\"bG\"\"\"%\"aGF-F-*&F.F -%#muGF-!\"\"%$varGF-*$)F0\"\"#F-F-*&F0F-F,F-F1F-F2F1F1/%#r|irG,$*(,2* &F,F-)F.F5F-F-*&F=F-F0F-F1*&F.F-F2F-F-*(F5F-F.F-F4F-F-**F5F-F,F-F.F-F0 F-F1*&F,F-F4F-F-*&F2F-F0F-F1*$)F0\"\"$F-F1F-,&F,F1F.F-F1F2F1F1" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG%%FAILG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G-%'RootOfG6#,&*&),$*&,&%#_ZG\"\"\"%\"aG!\"\"F/, &%\"bGF1F0F/F1F1%#r|irGF/-%*hypergeomG6%7$F4,(F/F/%#t|irGF1F4F/7#,&F/F /F4F/F+F/F1*(%\"pGF/-%%BetaG6$F4,&F:F/F4F1F/F4F/F/" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%&pdfgrG7&,*-%#lnG6#*&,&%\"xG!\"\"%\"aG\"\"\"F/,&%\" bGF-F.F/F-F/-F(6#*&,&F1F-F,F/F/F0F-F--%$PsiG6#%#r|irGF--F76#%\"sGF/,(F 2F/F:F--F76#,&F9F/F%&cdfgrG7&,**,-%%BetaG6$%#r|irG,& %#t|irG\"\"\"F+!\"\"F/F+F/)*&,&%\"xGF.%\"aGF/F.,&%\"bGF.F4F/F/F+F.-%*h ypergeomG6%7$F+,(F.F.F-F/F+F.7#,&F.F.F+F.F1F.,&-%$PsiG6#F+F.-F@6#F,F/F .F/**F(F/F+!\"#F0F.F7F.F/*,F(F/F+F/F0F.-%#lnG6#F1F.F7F.F.**F(F/F+F/F0F .-%%diffG6$F7F+F.F.,&*,F(F/F+F/F0F.F7F.,&FBF.-F@6#F-F/F.F/**F(F/F+F/F0 F.-FL6$F7F-F.F.,&*.F(F/F0F.,&*&F.F.F5F/F/*&F2F.F5FEF.F.F2F/F5F.F7F.F.* .F(F/F0F.F;F.F=F/-F86%7$F=,(\"\"#F.F-F/F+F.7#,&FjnF.F+F.F1F.FXF.F.,&** F(F/F0F.F5F/F7F.F/*0F(F/F0F.F;F.F=F/FfnF.F2F.F5FEF/" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$!+XWWWW!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+iH 'H'H!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+))))))))))!#5" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7&,&$\"+')4v5!)!#6\"\"\"*&$\"+iH'H'H!#5F(-%$ PsiG6#%\"sGF(F(,($\"+Bv9bKF,!\"\"*&$\"+iH'H'HF,F(F-F(F4*&F*F(-F.6#,&$ \"\"#\"\"!F(F0F(F(F(,&$\"+/;FQ\\F'F4*&$\"+4Kaw)*F'F(F0F(F(,&$\"+%G<1&R F,F4*&$\"+U'3`(>F,F(F0F(F(" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7&,&$\"+ $HMTg$!#5!\"\"*&$\"+mmmmE!\"*\"\"\"-%%diffG6$-%*hypergeomG6%7$\"\"#!\" #7#\"\"$#F5F8F5F-F-,&$\"+#=&=&=&F'F-*&F*F--F/6$F1\"\"&F-F-$!*@Vl()*F'$ !+S'3`(>F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Bh=a7!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++?!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++g!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+eG9dG!#5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+dG9dB!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++O!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++ +++?!#5$\"+++++gF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"#\"\"!$\" \"&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "factor(subs(sol,r/ t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"aG\"\"\"%#muG!\"\"F&,&% \"bGF(F%F&F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "R:=map(simp lify,collect(-(b-2*x-r*b+a+t*x-t*a+r*a)/(-b+x)/(-x+a),t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"RG,&*&%#t|irG\"\"\",&%\"bG!\"\"%\"xGF(F+ F(*(,,F*F(*&\"\"#F(F,F(F+*&%#r|irGF(F*F(F+%\"aGF(*&F2F(F3F(F(F(F)F+,&F ,F+F3F(F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "factor(R-(-( t-r-1)/(b-x)+(r-1)/(x-a)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "kurt_;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#,$*0\"\"$\"\"\",,*&)%#r|irG\"\"#F&%#t|irGF&F&*&\"\"'F &F)F&!\"\"*&F*F&)F,F+F&F/*(F.F&F*F&F,F&F&*&F+F&F1F&F/F&,&F,F&F&F&F&F*F /,&F,F/F*F&F/,&F%F&F,F&F/,&F+F&F,F&F/F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "A:=collect(-(r^2*t-6*r^2-r*t^2+6*r*t-2*t^2),r);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG,(*&,&\"\"'\"\"\"%#t|irG!\"\"F)) %#r|irG\"\"#F)F)*&,&*$)F*F.F)F)*&F(F)F*F)F+F)F-F)F)*&F.F)F2F)F)" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 65 "((-2-r)*t+r*(r+6)/2)^2/(-2-r )-r^2*(r-6)^2/(4*(2+r))-12*r^2/(2+r);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&,&*&,&\"\"#!\"\"%#r|irGF)\"\"\"%#t|irGF+F+*(F(F)F*F+,&F*F+\"\"' F+F+F+F(F'F)F+*(F*F(,&F*F+F/F)F(,&\"\")F+*&\"\"%F+F*F+F+F)F)*(\"#7F+F* F(,&F(F+F*F+F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "factor( (6-t)*r^2+(t^2-6*t)*r);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(%#r|irG \"\"\",&\"\"'!\"\"%#t|irGF&F&,&F*F)F%F&F&F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "S:=simplify(int(pdf^2,x=a..b),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"SG,$-%$intG6$*&),&%\"xG!\"\"%\"aG\"\"\", &\"\"#F-*&F1F/%#r|irGF/F/F/),&%\"bGF-F,F/,(*&F1F/%#t|irGF/F/*&F1F/F3F/ F-F1F-F//F,;F.F6*&),&F6F-F.F/,&F1F/*&F1F/F9F/F-F/-%%BetaG6$F3,&F9F/F3F -!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "delta:=S-Beta(2*r- 1,2*t-2*r-1)/Beta(r,t-r)^2/(b-a);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %&deltaG,&,$-%$intG6$*&),&%\"xG!\"\"%\"aG\"\"\",&\"\"#F.*&F2F0%#r|irGF 0F0F0),&%\"bGF.F-F0,(*&F2F0%#t|irGF0F0*&F2F0F4F0F.F2F.F0/F-;F/F7*&),&F 7F.F/F0,&F2F0*&F2F0F:F0F.F0-%%BetaG6$F4,&F:F0F4F.!\"#F0*(-FD6$,&F0F.*& F2F0F4F0F0,(*&F2F0F:F0F0*&F2F0F4F0F.F0F.F0FCFG,&F7F0F/F.F.F." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "evalf(subs(r=2.5,t=4.9,a=-1. 2,b=3.5,delta));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$\"\"\"!#5$!+GCI `B!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "int(exp(I*u*x)*pdf ,x=-infinity..infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$intG6$, $*,-%$expG6#*(%#u|irG\"\"\"%\"xGF-^#F-F-F-)*&,&F.!\"\"%\"aGF-F-,&%\"bG F3F4F-F3,&F-F3%#r|irGF-F-)*&,&F6F3F.F-F-F5F3,(%#t|irGF-F8F3F-F3F--%%Be taG6$F8,&F=F-F8F3F3F5F3F3/F.;,$%)infinityGF3FE" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidBeta.txt000066400000000000000000000246021307543307100207440ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u<1,u>0,r>0,t>r); > beta_:=RandomVariable(Beta(r,t-r)): > pdf:=factor(subs(u=(x-a)/(b-a),PDF(beta_,u))/(b-a)); > ddf:=(diff(pdf,x)); > cf:=simplify(subs(w=(u-a)/(b-a),CharacteristicFunction(beta_,w)),hyper > geom); > factor(ddf/pdf); > cdf:=subs(u=(x-a)/(b-a),CDF(beta_,u)); > mu_:=a+(b-a)*Mean(beta_); > var_:=(b-a)^2*Variance(beta_); > skew_:=simplify(convert(Skewness(beta_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(beta_),GAMMA),symbolic); > sol:=subs(m='mu',v='var',solve({mu_=m,var_=v},{r,t})); > qdf:=a+(b-a)*Quantile(beta_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=map(_x->factor(subs(t=r+s,_x)),[diff(pdf, r)/pdf,diff(pdf, > t)/pdf,diff(pdf, a)/pdf,diff(pdf, b)/pdf]); > cdfgr:=[diff(cdf, r),diff(cdf, t),diff(cdf, a),diff(cdf, b)]; > valnum:=r=2,t=5,a=-1,b=2: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); > evalf(subs(sol,mu=mu_,var=var_,valnum,[r,t])); > /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| |------| \-b + a/ \-b + a/ pdf := - --------------------------------------- Beta(r~, t~ - r~) (-b + a) /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| (-1 + r~) |------| \-b + a/ \-b + a/ ddf := ------------------------------------------------- (-x + a) Beta(r~, t~ - r~) (-b + a) /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| |------| (t~ - r~ - 1) \-b + a/ \-b + a/ - ----------------------------------------------------- (-b + x) Beta(r~, t~ - r~) (-b + a) (u~ - a) I cf := hypergeom([r~], [t~], ----------) b - a b - 2 x - r~ b + a + t~ x - t~ a + r~ a - --------------------------------------- (-b + x) (-x + a) /x - a\r~ x - a |-----| hypergeom([r~, 1 - t~ + r~], [1 + r~], -----) \b - a/ b - a cdf := ------------------------------------------------------- Beta(r~, t~ - r~) r~ (b - a) r~ mu_ := a + ---------- t~ 2 (b - a) r~ (t~ - r~) var_ := --------------------- 2 t~ (t~ + 1) 1/2 2 (t~ + 1) (2 r~ - t~) skew_ := - --------------------------- 1/2 1/2 r~ (t~ - r~) (2 + t~) 2 2 2 2 3 (r~ t~ - 6 r~ - r~ t~ + 6 r~ t~ - 2 t~ ) (t~ + 1) kurt_ := ------------------------------------------------------ r~ (-t~ + r~) (3 + t~) (2 + t~) 2 b a - a mu + var + mu - mu b 2 2 sol := {t~ = - -----------------------------, r~ = - (b a - a mu var 2 2 3 + a var + 2 a mu - 2 b a mu + b mu - var mu - mu )/( (-b + a) var)} qdf := FAIL qdf2 := RootOf(- / _Z - a\r~ _Z - a |- ------| hypergeom([r~, 1 - t~ + r~], [1 + r~], - ------) \ -b + a/ -b + a + p Beta(r~, t~ - r~) r~) -x + a -b + x pdfgr := [ln(------) - ln(------) - Psi(r~) + Psi(s), -b + a -b + a -b + x ln(------) - Psi(s) + Psi(r~ + s), -b + a -b + x + r~ b - r~ x - s x + s a - --------------------------------, (-x + a) (-b + a) x + r~ b - r~ x - s x + s a - a - -------------------------------] (-b + x) (-b + a) /x - a\r~ |-----| %1 (Psi(r~) - Psi(t~ - r~)) \b - a/ cdfgr := [- ------------------------------------- Beta(r~, t~ - r~) r~ /x - a\r~ /x - a\r~ x - a |-----| %1 |-----| ln(-----) %1 \b - a/ \b - a/ b - a - --------------------- + ---------------------- 2 Beta(r~, t~ - r~) r~ Beta(r~, t~ - r~) r~ /x - a\r~ / d \ |-----| |--- %1| \b - a/ \dr~ / + --------------------, Beta(r~, t~ - r~) r~ /x - a\r~ |-----| %1 (Psi(t~ - r~) - Psi(t~)) \b - a/ - ------------------------------------- Beta(r~, t~ - r~) r~ /x - a\r~ / d \ |-----| |--- %1| \b - a/ \dt~ / + --------------------, Beta(r~, t~ - r~) r~ /x - a\r~ / 1 x - a \ |-----| |- ----- + --------| (b - a) %1 \b - a/ | b - a 2| \ (b - a) / /x - a\r~ ----------------------------------------- + |-----| Beta(r~, t~ - r~) (x - a) \b - a/ (1 - t~ + r~) x - a hypergeom([1 + r~, 2 - t~ + r~], [2 + r~], -----) b - a / 1 x - a \ |- ----- + --------|/(Beta(r~, t~ - r~) (1 + r~)), | b - a 2| \ (b - a) / /x - a\r~ |-----| %1 \b - a/ /x - a\r~ - ------------------------- - |-----| (1 - t~ + r~) Beta(r~, t~ - r~) (b - a) \b - a/ x - a hypergeom([1 + r~, 2 - t~ + r~], [2 + r~], -----) (x - a) b - a / 2 / (Beta(r~, t~ - r~) (1 + r~) (b - a) )] / x - a %1 := hypergeom([r~, 1 - t~ + r~], [1 + r~], -----) b - a -0.4444444445 0.2962962962 0.8888888888 [0.08010750986 + 0.2962962962 Psi(s), -0.3255147523 - 0.2962962962 Psi(s) + 0.2962962962 Psi(2. + s), -0.04938271604 + 0.09876543209 s, -0.3950617284 + 0.1975308642 s] [-0.3604134293 + 2.666666666 diff(hypergeom([2, -2], [3], 2/3), 2), 0.5185185182 + 2.666666666 diff(hypergeom([2, -2], [3], 2/3), 5), -0.0987654321, -0.1975308640] 1.254186123 0.2000000000 0.6000000000 0.2857142858 2.357142857 0.3600000000 [0.2000000000, 0.6000000000] [2., 5.] > factor(subs(sol,r/t)); a - mu ------ -b + a > R:=map(simplify,collect(-(b-2*x-r*b+a+t*x-t*a+r*a)/(-b+x)/(-x+a),t)); t~ b - 2 x - r~ b + a + r~ a R := ------ - ------------------------- -b + x (-b + x) (-x + a) > factor(R-(-(t-r-1)/(b-x)+(r-1)/(x-a))); 0 > kurt_; 2 2 2 2 3 (r~ t~ - 6 r~ - r~ t~ + 6 r~ t~ - 2 t~ ) (t~ + 1) ------------------------------------------------------ r~ (-t~ + r~) (3 + t~) (2 + t~) > A:=collect(-(r^2*t-6*r^2-r*t^2+6*r*t-2*t^2),r); 2 2 2 A := (6 - t~) r~ + (t~ - 6 t~) r~ + 2 t~ > ((-2-r)*t+r*(r+6)/2)^2/(-2-r)-r^2*(r-6)^2/(4*(2+r))-12*r^2/(2+r); / r~ (r~ + 6)\2 |(-2 - r~) t~ + -----------| 2 2 2 \ 2 / r~ (r~ - 6) 12 r~ ----------------------------- - ------------- - ------ -2 - r~ 8 + 4 r~ 2 + r~ > factor((6-t)*r^2+(t^2-6*t)*r); -r~ (-6 + t~) (-t~ + r~) > S:=simplify(int(pdf^2,x=a..b),symbolic); (2 - 2 t~) (-b + a) S := ------------------ 2 Beta(r~, t~ - r~) b / | (-2 + 2 r~) (2 t~ - 2 r~ - 2) | (-x + a) (-b + x) dx | / a > delta:=S-Beta(2*r-1,2*t-2*r-1)/Beta(r,t-r)^2/(b-a); (2 - 2 t~) (-b + a) delta := ------------------ 2 Beta(r~, t~ - r~) b / | (-2 + 2 r~) (2 t~ - 2 r~ - 2) | (-x + a) (-b + x) dx | / a Beta(-1 + 2 r~, 2 t~ - 2 r~ - 1) - -------------------------------- 2 Beta(r~, t~ - r~) (b - a) > evalf(subs(r=2.5,t=4.9,a=-1.2,b=3.5,delta)); -9 -10 0.1 10 - 0.2353302428 10 I > int(exp(I*u*x)*pdf,x=-infinity..infinity); infinity /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) / exp(u~ x I) |------| |------| | \-b + a/ \-b + a/ | - --------------------------------------------------- d | Beta(r~, t~ - r~) (-b + a) / -infinity x > openturns-1.9/validation/src/ValidBinomial.mws000066400000000000000000001073771307543307100216250ustar00rootroot00000000000000{VERSION 13 0 "Linux" "13.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 12 40 120 40 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "MS Serif" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "MS Serif" 1 12 0 0 0 1 1 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "MS Serif" 1 14 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Head ing 2" -1 4 1 {CSTYLE "" -1 -1 "MS Serif" 1 16 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Time s" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {CSTYLE "Annotation Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier " 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times " 1 12 0 0 255 1 2 2 2 2 2 1 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized " -1 22 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Sym bol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple \+ Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Ma ple Input Placeholder" -1 201 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "Code" -1 202 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Inert Output" -1 203 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "MS Serif" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 " Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courie r" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 0 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 205 "Times " 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 207 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "MS Serif " 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Cou rier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {XPPEDIT 19 1 "Typesetting:-mrow(Typ esetting:-mi(\"restart\", italic = \"true\", mathvariant = \"italic\") , Typesetting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", \+ separator = \"false\", stretchy = \"false\", symmetric = \"false\", la rgeop = \"false\", movablelimits = \"false\", accent = \"false\", lspa ce = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(h eight = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \+ \"newline\"), Typesetting:-mi(\"with\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi (\"Statistics\", italic = \"true\", mathvariant = \"italic\")), mathva riant = \"normal\"), Typesetting:-mo(\":\", mathvariant = \"normal\", \+ fence = \"false\", separator = \"false\", stretchy = \"false\", symmet ric = \"false\", largeop = \"false\", movablelimits = \"false\", accen t = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Ty pesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0 ex\", linebreak = \"newline\"), Typesetting:-mi(\"n\", italic = \"true \", mathvariant = \"italic\"), Typesetting:-mo(\"≔\", mathvari ant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits \+ = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \" 0.2777778em\"), Typesetting:-mn(\"15\", mathvariant = \"normal\"), Typ esetting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", separ ator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \+ \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newl ine\"), Typesetting:-mi(\"p\", italic = \"true\", mathvariant = \"ital ic\"), Typesetting:-mo(\"≔\", mathvariant = \"normal\", fence \+ = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \+ \"false\", largeop = \"false\", movablelimits = \"false\", accent = \" false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesett ing:-mfrac(Typesetting:-mrow(Typesetting:-mn(\"7.\", mathvariant = \"n ormal\")), Typesetting:-mrow(Typesetting:-mn(\"10.\", mathvariant = \" normal\")), linethickness = \"1\", denomalign = \"center\", numalign = \"center\", bevelled = \"false\"), Typesetting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \" false\", symmetric = \"false\", largeop = \"false\", movablelimits = \+ \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0. 2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em \", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \" , mathvariant = \"normal\", fence = \"false\", separator = \"false\", \+ stretchy = \"false\", symmetric = \"false\", largeop = \"false\", mova blelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace \+ = \"0.0em\"), Typesetting:-mi(\"q\", italic = \"true\", mathvariant = \+ \"italic\"), Typesetting:-mo(\"≔\", mathvariant = \"normal\", \+ fence = \"false\", separator = \"false\", stretchy = \"false\", symmet ric = \"false\", largeop = \"false\", movablelimits = \"false\", accen t = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Ty pesetting:-mn(\"0.95\", mathvariant = \"normal\"), Typesetting:-mo(\": \", mathvariant = \"normal\", fence = \"false\", separator = \"false\" , stretchy = \"false\", symmetric = \"false\", largeop = \"false\", mo vablelimits = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", wi dth = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesett ing:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator \+ = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \" false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0 em\", rspace = \"0.0em\"), Typesetting:-mi(\"k\", italic = \"true\", m athvariant = \"italic\"), Typesetting:-mo(\"≔\", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"fa lse\", symmetric = \"false\", largeop = \"false\", movablelimits = \"f alse\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.277 7778em\"), Typesetting:-mn(\"5.0\", mathvariant = \"normal\"), Typeset ting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \+ \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0 .2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \+ \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline \"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false \", separator = \"false\", stretchy = \"false\", symmetric = \"false\" , largeop = \"false\", movablelimits = \"false\", accent = \"false\", \+ lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"u\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\"≔\", mathvariant = \"normal\", fence = \"false\", separator = \"false\", s tretchy = \"false\", symmetric = \"false\", largeop = \"false\", movab lelimits = \"false\", accent = \"false\", lspace = \"0.2777778em\", rs pace = \"0.2777778em\"), Typesetting:-mn(\"5.0\", mathvariant = \"norm al\"), Typesetting:-mo(\":\", mathvariant = \"normal\", fence = \"fals e\", separator = \"false\", stretchy = \"false\", symmetric = \"false \", largeop = \"false\", movablelimits = \"false\", accent = \"false\" , lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-ms pace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebre ak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fe nce = \"false\", separator = \"false\", stretchy = \"false\", symmetri c = \"false\", largeop = \"false\", movablelimits = \"false\", accent \+ = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi( \"s\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo( \"≔\", mathvariant = \"normal\", fence = \"false\", separator \+ = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \" false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.2 777778em\", rspace = \"0.2777778em\"), Typesetting:-mn(\"0.3\", mathva riant = \"normal\"), Typesetting:-mo(\"+\", mathvariant = \"normal\", \+ fence = \"false\", separator = \"false\", stretchy = \"false\", symmet ric = \"false\", largeop = \"false\", movablelimits = \"false\", accen t = \"false\", lspace = \"0.2222222em\", rspace = \"0.2222222em\"), Ty pesetting:-mn(\"0.7\", mathvariant = \"normal\"), Typesetting:-mo(\"&s dot;\", mathvariant = \"normal\", fence = \"false\", separator = \"fal se\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\" , movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", r space = \"0.0em\"), Typesetting:-mi(\"I\", italic = \"true\", mathvari ant = \"italic\"), Typesetting:-mo(\":\", mathvariant = \"normal\", fe nce = \"false\", separator = \"false\", stretchy = \"false\", symmetri c = \"false\", largeop = \"false\", movablelimits = \"false\", accent \+ = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Type setting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex \", linebreak = \"newline\"), Typesetting:-mi(\"d\", italic = \"true\" , mathvariant = \"italic\"), Typesetting:-mo(\"≔\", mathvarian t = \"normal\", fence = \"false\", separator = \"false\", stretchy = \+ \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0 .2777778em\"), Typesetting:-mi(\"RandomVariable\", italic = \"true\", \+ mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Type setting:-mi(\"Binomial\", italic = \"true\", mathvariant = \"italic\") , Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"n\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathvar iant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits \+ = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333 333em\"), Typesetting:-mi(\"p\", italic = \"true\", mathvariant = \"it alic\")), mathvariant = \"normal\")), mathvariant = \"normal\"), Types etting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", separat or = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \" 0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"auto\" ), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \+ \"0.0ex\", linebreak = \"newline\"), Typesetting:-mi(\"print\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetti ng:-mrow(Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"pdf=\"), Typesetting:-mo(\",\", mathvariant = \"nor mal\", fence = \"false\", separator = \"true\", stretchy = \"false\", \+ symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Ty pesetting:-mi(\"ProbabilityFunction\", italic = \"true\", mathvariant \+ = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi( \"d\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo( \",\", mathvariant = \"normal\", fence = \"false\", separator = \"true \", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", \+ movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rsp ace = \"0.3333333em\"), Typesetting:-mi(\"k\", italic = \"true\", math variant = \"italic\")), mathvariant = \"normal\")), mathvariant = \"no rmal\", open = \"[\", close = \"]\")), mathvariant = \"normal\"), Type setting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separa tor = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \" 0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0 ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), \+ Typesetting:-mi(\"print\", italic = \"true\", mathvariant = \"italic\" ), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mfenced(Typeset ting:-mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"cdf=\"), Typesetti ng:-mo(\",\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"fa lse\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.3333333em\"), Typesetting:-mi(\"CDF\", italic = \"tru e\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow (Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic\"), \+ Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"false\", se parator = \"true\", stretchy = \"false\", symmetric = \"false\", large op = \"false\", movablelimits = \"false\", accent = \"false\", lspace \+ = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mi(\"k\", italic \+ = \"true\", mathvariant = \"italic\")), mathvariant = \"normal\")), ma thvariant = \"normal\", open = \"[\", close = \"]\")), mathvariant = \+ \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \+ \"false\", separator = \"true\", stretchy = \"false\", symmetric = \"f alse\", largeop = \"false\", movablelimits = \"false\", accent = \"fal se\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspa ce(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mi(\"print\", italic = \"true\", mathvar iant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting :-mfenced(Typesetting:-mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"C F=\"), Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"fals e\", separator = \"true\", stretchy = \"false\", symmetric = \"false\" , largeop = \"false\", movablelimits = \"false\", accent = \"false\", \+ lspace = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mi(\"Chara cteristicFunction\", italic = \"true\", mathvariant = \"italic\"), Typ esetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \" true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathvariant \+ = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"fa lse\", symmetric = \"false\", largeop = \"false\", movablelimits = \"f alse\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em \"), Typesetting:-mi(\"u\", italic = \"true\", mathvariant = \"italic \")), mathvariant = \"normal\")), mathvariant = \"normal\", open = \"[ \", close = \"]\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", st retchy = \"false\", symmetric = \"false\", largeop = \"false\", movabl elimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \+ \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0. 0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mi(\" print\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mf enced(Typesetting:-mrow(Typesetting:-mfenced(Typesetting:-mrow(Typeset ting:-mi(\"\"), Typesetting:-ms(\"GF=\"), Typesetting:-mo(\",\", mathv ariant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimit s = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.33 33333em\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \+ \"false\", separator = \"false\", stretchy = \"false\", symmetric = \" false\", largeop = \"false\", movablelimits = \"false\", accent = \"fa lse\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"Char acteristicFunction\", italic = \"true\", mathvariant = \"italic\"), Ty pesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \+ \"true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathvarian t = \"normal\", fence = \"false\", separator = \"true\", stretchy = \" false\", symmetric = \"false\", largeop = \"false\", movablelimits = \+ \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.333333 3em\"), Typesetting:-mfrac(Typesetting:-mrow(Typesetting:-mi(\"log\", \+ italic = \"false\", mathvariant = \"normal\"), Typesetting:-mfenced(Ty pesetting:-mrow(Typesetting:-mi(\"s\", italic = \"true\", mathvariant \+ = \"italic\")), mathvariant = \"normal\")), Typesetting:-mrow(Typesett ing:-mi(\"I\", italic = \"true\", mathvariant = \"italic\")), linethic kness = \"1\", denomalign = \"center\", numalign = \"center\", bevelle d = \"false\")), mathvariant = \"normal\")), mathvariant = \"normal\", open = \"[\", close = \"]\")), mathvariant = \"normal\"), Typesetting :-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \+ \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"fal se\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Types etting:-mi(\"print\", italic = \"true\", mathvariant = \"italic\"), Ty pesetting:-mfenced(Typesetting:-mrow(Typesetting:-mfenced(Typesetting: -mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"quantile=\"), Typesetti ng:-mo(\",\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"fa lse\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.3333333em\"), Typesetting:-mi(\"Quantile\", italic = \+ \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting: -mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic \"), Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"false \", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", l space = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mi(\"q\", i talic = \"true\", mathvariant = \"italic\")), mathvariant = \"normal\" )), mathvariant = \"normal\", open = \"[\", close = \"]\")), mathvaria nt = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fen ce = \"false\", separator = \"true\", stretchy = \"false\", symmetric \+ = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \+ \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting: -mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", line break = \"newline\"), Typesetting:-mi(\"print\", italic = \"true\", ma thvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typese tting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"\"), Typesetting:-m s(\"cdf(quantile)=\"), Typesetting:-mo(\",\", mathvariant = \"normal\" , fence = \"false\", separator = \"true\", stretchy = \"false\", symme tric = \"false\", largeop = \"false\", movablelimits = \"false\", acce nt = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Typeset ting:-mi(\"CDF\", italic = \"true\", mathvariant = \"italic\"), Typese tting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"tru e\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathvariant = \+ \"normal\", fence = \"false\", separator = \"true\", stretchy = \"fals e\", symmetric = \"false\", largeop = \"false\", movablelimits = \"fal se\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\" ), Typesetting:-mi(\"Quantile\", italic = \"true\", mathvariant = \"it alic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", \+ mathvariant = \"normal\", fence = \"false\", separator = \"true\", str etchy = \"false\", symmetric = \"false\", largeop = \"false\", movable limits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \+ \"0.3333333em\"), Typesetting:-mi(\"q\", italic = \"true\", mathvarian t = \"italic\")), mathvariant = \"normal\")), mathvariant = \"normal\" )), mathvariant = \"normal\", open = \"[\", close = \"]\")), mathvaria nt = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fen ce = \"false\", separator = \"true\", stretchy = \"false\", symmetric \+ = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \+ \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting: -mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", line break = \"newline\"), Typesetting:-mspace(height = \"0.0ex\", width = \+ \"0.0em\", depth = \"0.0ex\", linebreak = \"auto\"), Typesetting:-mi( \"print\", italic = \"true\", mathvariant = \"italic\"), Typesetting:- mfenced(Typesetting:-mrow(Typesetting:-mfenced(Typesetting:-mrow(Types etting:-mi(\"\"), Typesetting:-ms(\"mean=\"), Typesetting:-mo(\",\", m athvariant = \"normal\", fence = \"false\", separator = \"true\", stre tchy = \"false\", symmetric = \"false\", largeop = \"false\", movablel imits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \" 0.3333333em\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \+ \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\" Mean\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfe nced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathv ariant = \"italic\")), mathvariant = \"normal\")), mathvariant = \"nor mal\", open = \"[\", close = \"]\")), mathvariant = \"normal\"), Types etting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separat or = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \+ \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0 .0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0e x\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), T ypesetting:-mi(\"print\", italic = \"true\", mathvariant = \"italic\") , Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mfenced(Typesett ing:-mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"std=\"), Typesettin g:-mo(\",\", mathvariant = \"normal\", fence = \"false\", separator = \+ \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"fal se\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.3333333em\"), Typesetting:-mo(\" \", mathvariant = \" normal\", fence = \"false\", separator = \"false\", stretchy = \"false \", symmetric = \"false\", largeop = \"false\", movablelimits = \"fals e\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Type setting:-mi(\"StandardDeviation\", italic = \"true\", mathvariant = \" italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d \", italic = \"true\", mathvariant = \"italic\")), mathvariant = \"nor mal\")), mathvariant = \"normal\", open = \"[\", close = \"]\")), math variant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\" , fence = \"false\", separator = \"true\", stretchy = \"false\", symme tric = \"false\", largeop = \"false\", movablelimits = \"false\", acce nt = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typeset ting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mi(\"print\", italic = \"true \", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow( Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"\"), Typesett ing:-ms(\"skewness=\"), Typesetting:-mo(\",\", mathvariant = \"normal \", fence = \"false\", separator = \"true\", stretchy = \"false\", sym metric = \"false\", largeop = \"false\", movablelimits = \"false\", ac cent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Types etting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separat or = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \" 0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"Skewness\", italic = \+ \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting: -mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic \")), mathvariant = \"normal\")), mathvariant = \"normal\", open = \"[ \", close = \"]\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", st retchy = \"false\", symmetric = \"false\", largeop = \"false\", movabl elimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \+ \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0. 0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mi(\" print\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mf enced(Typesetting:-mrow(Typesetting:-mfenced(Typesetting:-mrow(Typeset ting:-mi(\"\"), Typesetting:-ms(\"kurtosis=\"), Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", st retchy = \"false\", symmetric = \"false\", largeop = \"false\", movabl elimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \+ \"0.3333333em\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fen ce = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi( \"Kurtosis\", italic = \"true\", mathvariant = \"italic\"), Typesettin g:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic\")), mathvariant = \"normal\")), mathvariant = \"normal\", open = \"[\", close = \"]\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", s eparator = \"true\", stretchy = \"false\", symmetric = \"false\", larg eop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \+ \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline \"), Typesetting:-mi(\"print\", italic = \"false\", mathvariant = \"no rmal\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mfenced(T ypesetting:-mrow(Typesetting:-mi(\"\"), Typesetting:-ms(\"variance=\") , Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"false\", \+ separator = \"true\", stretchy = \"false\", symmetric = \"false\", lar geop = \"false\", movablelimits = \"false\", accent = \"false\", lspac e = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mi(\"Variance\" , italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(T ypesetting:-mrow(Typesetting:-mi(\"d\", italic = \"false\", mathvarian t = \"normal\")), mathvariant = \"normal\")), mathvariant = \"normal\" , open = \"[\", close = \"]\")), mathvariant = \"normal\"), Typesettin g:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \+ \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"fal se\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.2777778em\"), Typesetting:-mo(\" \", mathvariant = \" normal\", fence = \"false\", separator = \"false\", stretchy = \"false \", symmetric = \"false\", largeop = \"false\", movablelimits = \"fals e\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Type setting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separa tor = \"false\", stretchy = \"false\", symmetric = \"false\", largeop \+ = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \+ \"0.0em\", rspace = \"0.0em\"), Typesetting:-mo(\" \", mathvariant = \+ \"normal\", fence = \"false\", separator = \"false\", stretchy = \"fal se\", symmetric = \"false\", largeop = \"false\", movablelimits = \"fa lse\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Ty pesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", sepa rator = \"false\", stretchy = \"false\", symmetric = \"false\", largeo p = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"));" "-I%mrowG6#/I+modulenameG6\"I,Types ettingGI(_syslibGF'6`q-I#miGF$6%Q(restartF'/%'italicGQ%trueF'/%,mathva riantGQ'italicF'-I#moGF$6-Q\":F'/F3Q'normalF'/%&fenceGQ&falseF'/%*sepa ratorGF=/%)stretchyGF=/%*symmetricGF=/%(largeopGF=/%.movablelimitsGF=/ %'accentGF=/%'lspaceGQ,0.2777778emF'/%'rspaceGFL-I'mspaceGF$6&/%'heigh tGQ&0.0exF'/%&widthGQ&0.0emF'/%&depthGFT/%*linebreakGQ(newlineF'-F,6%Q %withF'F/F2-I(mfencedGF$6$-F#6#-F,6%Q+StatisticsF'F/F2F9F5FO-F,6%Q\"nF 'F/F2-F66-Q*≔F'F9F;F>F@FBFDFFFHFJFM-I#mnGF$6$Q#15F'F9F5FO-F,6% Q\"pF'F/F2Feo-I&mfracGF$6(-F#6#-Fio6$Q#7.F'F9-F#6#-Fio6$Q$10.F'F9/%.li nethicknessGQ\"1F'/%+denomalignGQ'centerF'/%)numalignGFaq/%)bevelledGF =F5FO-F66-Q\"~F'F9F;F>F@FBFDFFFH/FKFW/FNFW-F,6%Q\"qF'F/F2Feo-Fio6$Q%0. 95F'F9F5FOFfq-F,6%Q\"kF'F/F2Feo-Fio6$Q$5.0F'F9F5FOFfq-F,6%Q\"uF'F/F2Fe oFdrF5FOFfq-F,6%Q\"sF'F/F2Feo-Fio6$Q$0.3F'F9-F66-Q\"+F'F9F;F>F@FBFDFFF H/FKQ,0.2222222emF'/FNFds-Fio6$Q$0.7F'F9-F66-Q'⋅F'F9F;F>F@FBFDFFF HFiqFjq-F,6%Q\"IF'F/F2F5FO-F,6%Q\"dF'F/F2Feo-F,6%Q/RandomVariableF'F/F 2-F[o6$-F#6$-F,6%Q)BinomialF'F/F2-F[o6$-F#6%Fbo-F66-Q\",F'F9F;/F?F1F@F BFDFFFHFiq/FNQ,0.3333333emF'F\\pF9F9F5-FP6&FRFUFX/FenQ%autoF'FO-F,6%Q& printF'F/F2-F[o6$-F#6#-F[o6&-F#6'-F,6#Q!F'-I#msGF$6#Q%pdf=F'F`u-F,6%Q4 ProbabilityFunctionF'F/F2-F[o6$-F#6%F_tF`uFarF9F9/%%openGQ\"[F'/%&clos eGQ\"]F'F9-F66-Q\";F'F9F;FcuF@FBFDFFFHFiqFMFOFju-F[o6$-F#6#-F[o6&-F#6' Fev-Fiv6#Q%cdf=F'F`u-F,6%Q$CDFF'F/F2F_wF9FcwFfwF9FiwFOFju-F[o6$-F#6#-F [o6&-F#6'Fev-Fiv6#Q$CF=F'F`u-F,6%Q7CharacteristicFunctionF'F/F2-F[o6$- F#6%F_tF`uFgrF9F9FcwFfwF9FiwFOFju-F[o6$-F#6#-F[o6&-F#6(Fev-Fiv6#Q$GF=F 'F`uFfqFey-F[o6$-F#6%F_tF`u-F`p6(-F#6$-F,6%Q$logF'/F0F=F9-F[o6$-F#6#Fj rF9-F#6#F\\tF\\qF_qFbqFdqF9F9FcwFfwF9FiwFOFju-F[o6$-F#6#-F[o6&-F#6'Fev -Fiv6#Q*quantile=F'F`u-F,6%Q)QuantileF'F/F2-F[o6$-F#6%F_tF`uF[rF9F9Fcw FfwF9FiwFOFju-F[o6$-F#6#-F[o6&-F#6'Fev-Fiv6#Q/cdf(quantile)=F'F`uFgx-F [o6$-F#6&F_tF`uFd\\lFg\\lF9F9FcwFfwF9FiwFOFfuFju-F[o6$-F#6#-F[o6&-F#6( Fev-Fiv6#Q&mean=F'F`uFfq-F,6%Q%MeanF'F/F2-F[o6$-F#6#F_tF9F9FcwFfwF9Fiw FOFju-F[o6$-F#6#-F[o6&-F#6(Fev-Fiv6#Q%std=F'F`uFfq-F,6%Q2StandardDevia tionF'F/F2Fh^lF9FcwFfwF9FiwFOFju-F[o6$-F#6#-F[o6&-F#6(Fev-Fiv6#Q*skewn ess=F'F`uFfq-F,6%Q)SkewnessF'F/F2Fh^lF9FcwFfwF9FiwFOFju-F[o6$-F#6#-F[o 6&-F#6(Fev-Fiv6#Q*kurtosis=F'F`uFfq-F,6%Q)KurtosisF'F/F2Fh^lF9FcwFfwF9 FiwFO-F,6%F\\vFb[lF9-F[o6$-F#6#-F[o6&-F#6'Fev-Fiv6#Q*variance=F'F`u-F, 6%Q)VarianceF'F/F2-F[o6$-F#6#-F,6%FatFb[lF9F9F9FcwFfwF9FiwFfqFfqFfqFfq " }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q%pdf=6\"$\"+RpG!)H!#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q%cdf=6\"$\"3.1eV35__O!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q$CF=6\"^$$\"+5B'H2\"!#6$!+6p.UnF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q$GF=6\"^$$\"+3cM&e#!#7$!+EJt+\\F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q*quantile=6\"$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q/cdf(quantile)=6\"$\"3E?&=@+Ctk*!#=" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q&mean=6\"$\"++++]5!\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q%std=6\"$\"+NR#[x\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q*skew ness=6\"$!+zYu`A!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$Q*kurtosis=6\"$ \"+=.Y " 0 "" {XPPEDIT 19 1 "" "%#%?G" }}}{EXCHG {PARA 0 "> " 0 "" {TEXT 208 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidBoundConstrainedAlgoithm.mws000066400000000000000000000546521307543307100250160ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7057 "restart:\nDigits:= 30:\nallvalues_:=true:\nf:=x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4;\n# All\nsy s:=diff(f,x1),diff(f,x2),diff(f,x3),diff(f,x4):\nsol:=solve(\{sys\},\{ x1,x2,x3,x4\}):\nevalf(subs(sol,f));\n# One fixed\ng:=subs(x1=-3,f):\n sys:=diff(g,x2),diff(g,x3),diff(g,x4):\nsol:=solve(\{sys\},\{x2,x3,x4 \}):\nevalf(subs(sol,g));\ng:=subs(x1=5,f):\nsys:=diff(g,x2),diff(g,x3 ),diff(g,x4):\nsol:=solve(\{sys\},\{x2,x3,x4\}):\nevalf(subs(sol,g)); \ng:=subs(x2=-3,f):\nsys:=diff(g,x1),diff(g,x3),diff(g,x4):\nsol:=solv e(\{sys\},\{x1,x3,x4\}):\nevalf(subs(sol,g));\ng:=subs(x2=5,f):\nsys:= diff(g,x1),diff(g,x3),diff(g,x4):\nsol:=solve(\{sys\},\{x1,x3,x4\}):\n evalf(subs(sol,g));\ng:=subs(x3=-3,f):\nsys:=diff(g,x1),diff(g,x2),dif f(g,x4):\nsol:=solve(\{sys\},\{x1,x2,x4\}):\nevalf(subs(sol,g));\ng:=s ubs(x3=5,f):\nsys:=diff(g,x1),diff(g,x2),diff(g,x4):\nsol:=solve(\{sys \},\{x1,x2,x4\}):\nevalf(subs(sol,g));\ng:=subs(x4=-3,f):\nsys:=diff(g ,x1),diff(g,x2),diff(g,x3):\nsol:=solve(\{sys\},\{x1,x2,x3\}):\nevalf( subs(sol,g));\ng:=subs(x4=5,f):\nsys:=diff(g,x1),diff(g,x2),diff(g,x3) :\nsol:=solve(\{sys\},\{x1,x2,x3\}):\nevalf(subs(sol,g));\n# Two fixed \n# x1,x2\ng:=subs(x1=-3,x2=-3,f):\nsys:=diff(g,x3),diff(g,x4):\nsol:= solve(\{sys\},\{x3,x4\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x2=-3,f): \nsys:=diff(g,x3),diff(g,x4):\nsol:=solve(\{sys\},\{x3,x4\}):\nevalf(s ubs(sol,g));\ng:=subs(x1=-3,x2=5,f):\nsys:=diff(g,x3),diff(g,x4):\nsol :=solve(\{sys\},\{x3,x4\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x2=5,f) :\nsys:=diff(g,x3),diff(g,x4):\nsol:=solve(\{sys\},\{x3,x4\}):\nevalf( subs(sol,g));\n# x1,x3\ng:=subs(x1=-3,x3=-3,f):\nsys:=diff(g,x2),diff( g,x4):\nsol:=solve(\{sys\},\{x2,x4\}):\nevalf(subs(sol,g));\ng:=subs(x 1=5,x3=-3,f):\nsys:=diff(g,x2),diff(g,x4):\nsol:=solve(\{sys\},\{x2,x4 \}):\nevalf(subs(sol,g));\ng:=subs(x1=-3,x3=5,f):\nsys:=diff(g,x2),dif f(g,x4):\nsol:=solve(\{sys\},\{x2,x4\}):\nevalf(subs(sol,g));\ng:=subs (x1=5,x3=5,f):\nsys:=diff(g,x2),diff(g,x4):\nsol:=solve(\{sys\},\{x2,x 4\}):\nevalf(subs(sol,g));\n# x1,x4\ng:=subs(x1=-3,x4=-3,f):\nsys:=dif f(g,x2),diff(g,x3):\nsol:=solve(\{sys\},\{x2,x3\}):\nevalf(subs(sol,g) );\ng:=subs(x1=5,x4=-3,f):\nsys:=diff(g,x2),diff(g,x3):\nsol:=solve(\{ sys\},\{x2,x3\}):\nevalf(subs(sol,g));\ng:=subs(x1=-3,x4=5,f):\nsys:=d iff(g,x2),diff(g,x3):\nsol:=solve(\{sys\},\{x2,x3\}):\nevalf(subs(sol, g));\ng:=subs(x1=5,x4=5,f):\nsys:=diff(g,x2),diff(g,x3):\nsol:=solve( \{sys\},\{x2,x3\}):\nevalf(subs(sol,g));\n# x2,x3\ng:=subs(x2=-3,x3=-3 ,f):\nsys:=diff(g,x1),diff(g,x4):\nsol:=solve(\{sys\},\{x1,x4\}):\neva lf(subs(sol,g));\ng:=subs(x2=5,x3=-3,f):\nsys:=diff(g,x1),diff(g,x4): \nsol:=solve(\{sys\},\{x1,x4\}):\nevalf(subs(sol,g));\ng:=subs(x2=-3,x 3=5,f):\nsys:=diff(g,x1),diff(g,x4):\nsol:=solve(\{sys\},\{x1,x4\}):\n evalf(subs(sol,g));\ng:=subs(x2=5,x3=5,f):\nsys:=diff(g,x1),diff(g,x4) :\nsol:=solve(\{sys\},\{x1,x4\}):\nevalf(subs(sol,g));\n# x2,x4\ng:=su bs(x2=-3,x4=-3,f):\nsys:=diff(g,x1),diff(g,x3):\nsol:=solve(\{sys\},\{ x1,x3\}):\nevalf(subs(sol,g));\ng:=subs(x2=5,x4=-3,f):\nsys:=diff(g,x1 ),diff(g,x3):\nsol:=solve(\{sys\},\{x1,x3\}):\nevalf(subs(sol,g));\ng: =subs(x2=-3,x4=5,f):\nsys:=diff(g,x1),diff(g,x3):\nsol:=solve(\{sys\}, \{x1,x3\}):\nevalf(subs(sol,g));\ng:=subs(x2=5,x4=5,f):\nsys:=diff(g,x 1),diff(g,x3):\nsol:=solve(\{sys\},\{x1,x3\}):\nevalf(subs(sol,g));\n# x3,x4\ng:=subs(x3=-3,x4=-3,f):\nsys:=diff(g,x1),diff(g,x2):\nsol:=sol ve(\{sys\},\{x1,x2\}):\nevalf(subs(sol,g));\ng:=subs(x3=5,x4=-3,f):\ns ys:=diff(g,x1),diff(g,x2):\nsol:=solve(\{sys\},\{x1,x2\}):\nevalf(subs (sol,g));\ng:=subs(x3=-3,x4=5,f):\nsys:=diff(g,x1),diff(g,x2):\nsol:=s olve(\{sys\},\{x1,x2\}):\nevalf(subs(sol,g));\ng:=subs(x3=5,x4=5,f):\n sys:=diff(g,x1),diff(g,x2):\nsol:=solve(\{sys\},\{x1,x2\}):\nevalf(sub s(sol,g));\n# Three fixed\n# x1,x2,x3\ng:=subs(x1=-3,x2=-3,x3=-3,f):\n sys:=diff(g,x4):\nsol:=solve(\{sys\},\{x4\}):\nevalf(subs(sol,g));\ng: =subs(x1=5,x2=-3,x3=-3,f):\nsys:=diff(g,x4):\nsol:=solve(\{sys\},\{x4 \}):\nevalf(subs(sol,g)):\ng:=subs(x1=-3,x2=5,x3=-3,f):\nsys:=diff(g,x 4):\nsol:=solve(\{sys\},\{x4\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x2 =5,x3=-3,f):\nsys:=diff(g,x4):\nsol:=solve(\{sys\},\{x4\}):\nevalf(sub s(sol,g));\ng:=subs(x1=-3,x2=-3,x3=5,f):\nsys:=diff(g,x4):\nsol:=solve (\{sys\},\{x4\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x2=-3,x3=5,f):\ns ys:=diff(g,x4):\nsol:=solve(\{sys\},\{x4\}):\nevalf(subs(sol,g));\ng:= subs(x1=-3,x2=5,x3=5,f):\nsys:=diff(g,x4):\nsol:=solve(\{sys\},\{x4\}) :\nevalf(subs(sol,g));\ng:=subs(x1=5,x2=5,x3=5,f):\nsys:=diff(g,x4):\n sol:=solve(\{sys\},\{x4\}):\nevalf(subs(sol,g));\n# x1,x2,x4\ng:=subs( x1=-3,x2=-3,x4=-3,f):\nsys:=diff(g,x3):\nsol:=solve(\{sys\},\{x3\}):\n evalf(subs(sol,g));\ng:=subs(x1=5,x2=-3,x4=-3,f):\nsys:=diff(g,x3):\ns ol:=solve(\{sys\},\{x3\}):\nevalf(subs(sol,g));\ng:=subs(x1=-3,x2=5,x4 =-3,f):\nsys:=diff(g,x3):\nsol:=solve(\{sys\},\{x3\}):\nevalf(subs(sol ,g));\ng:=subs(x1=5,x2=5,x4=-3,f):\nsys:=diff(g,x3):\nsol:=solve(\{sys \},\{x3\}):\nevalf(subs(sol,g));\ng:=subs(x1=-3,x2=-3,x4=5,f):\nsys:=d iff(g,x3):\nsol:=solve(\{sys\},\{x3\}):\nevalf(subs(sol,g));\ng:=subs( x1=5,x2=-3,x4=5,f):\nsys:=diff(g,x3):\nsol:=solve(\{sys\},\{x3\}):\nev alf(subs(sol,g));\ng:=subs(x1=-3,x2=5,x4=5,f):\nsys:=diff(g,x3):\nsol: =solve(\{sys\},\{x3\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x2=5,x4=5,f ):\nsys:=diff(g,x3):\nsol:=solve(\{sys\},\{x3\}):\nevalf(subs(sol,g)); \n# x1,x3,x4\ng:=subs(x1=-3,x3=-3,x4=-3,f):\nsys:=diff(g,x2):\nsol:=so lve(\{sys\},\{x2\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x3=-3,x4=-3,f) :\nsys:=diff(g,x2):\nsol:=solve(\{sys\},\{x2\}):\nevalf(subs(sol,g)); \ng:=subs(x1=-3,x3=5,x4=-3,f):\nsys:=diff(g,x2):\nsol:=solve(\{sys\}, \{x2\}):\nevalf(subs(sol,g));\ng:=subs(x1=5,x3=5,x4=-3,f):\nsys:=diff( g,x2):\nsol:=solve(\{sys\},\{x2\}):\nevalf(subs(sol,g));\ng:=subs(x1=- 3,x3=-3,x4=5,f):\nsys:=diff(g,x2):\nsol:=solve(\{sys\},\{x2\}):\nevalf (subs(sol,g));\ng:=subs(x1=5,x3=-3,x4=5,f):\nsys:=diff(g,x2):\nsol:=so lve(\{sys\},\{x2\}):\nevalf(subs(sol,g));\ng:=subs(x1=-3,x3=5,x4=5,f): \nsys:=diff(g,x2):\nsol:=solve(\{sys\},\{x2\}):\nevalf(subs(sol,g));\n g:=subs(x1=5,x3=5,x4=5,f):\nsys:=diff(g,x2):\nsol:=solve(\{sys\},\{x2 \}):\nevalf(subs(sol,g));\n# x2,x3,x4\ng:=subs(x2=-3,x3=-3,x4=-3,f):\n sys:=diff(g,x1):\nsol:=solve(\{sys\},\{x1\}):\nevalf(subs(sol,g));\ng: =subs(x2=5,x3=-3,x4=-3,f):\nsys:=diff(g,x1):\nsol:=solve(\{sys\},\{x1 \}):\nevalf(subs(sol,g));\nprint(\"-----\");\ng:=subs(x2=-3,x3=5,x4=-3 ,f):\nsys:=diff(g,x1):\nsol:=eval(solve(\{sys\},\{x1\}));\nevalf(subs( sol,g));\ng:=subs(x2=5,x3=5,x4=-3,f):\nsys:=diff(g,x1):\nsol:=solve(\{ sys\},\{x1\}):\nevalf(subs(sol,g));\ng:=subs(x2=-3,x3=-3,x4=5,f):\nsys :=diff(g,x1):\nsol:=solve(\{sys\},\{x1\}):\nevalf(subs(sol,g));\ng:=su bs(x2=5,x3=-3,x4=5,f):\nsys:=diff(g,x1):\nsol:=solve(\{sys\},\{x1\}): \nevalf(subs(sol,g));\ng:=subs(x2=-3,x3=5,x4=5,f):\nsys:=diff(g,x1):\n sol:=solve(\{sys\},\{x1\}):\nevalf(subs(sol,g));\ng:=subs(x2=5,x3=5,x4 =5,f):\nsys:=diff(g,x1):\nsol:=solve(\{sys\},\{x1\}):\nevalf(subs(sol, g));\n# x1,x2,x3,x4\nevalf(subs(x1=-3,x2=-3,x3=-3,x4=-3,f));\nevalf(su bs(x1= 5,x2=-3,x3=-3,x4=-3,f));\nevalf(subs(x1=-3,x2= 5,x3=-3,x4=-3,f) );\nevalf(subs(x1= 5,x2= 5,x3=-3,x4=-3,f));\nevalf(subs(x1=-3,x2=-3,x3 = 5,x4=-3,f));\nevalf(subs(x1= 5,x2=-3,x3= 5,x4=-3,f));\nevalf(subs(x1 =-3,x2= 5,x3= 5,x4=-3,f));\nevalf(subs(x1= 5,x2= 5,x3= 5,x4=-3,f));\ne valf(subs(x1=-3,x2=-3,x3=-3,x4= 5,f));\nevalf(subs(x1= 5,x2=-3,x3=-3,x 4= 5,f));\nevalf(subs(x1=-3,x2= 5,x3=-3,x4= 5,f));\nevalf(subs(x1= 5,x 2= 5,x3=-3,x4= 5,f));\nevalf(subs(x1=-3,x2=-3,x3= 5,x4= 5,f));\nevalf( subs(x1= 5,x2=-3,x3= 5,x4= 5,f));\nevalf(subs(x1=-3,x2= 5,x3= 5,x4= 5, f));\nevalf(subs(x1= 5,x2= 5,x3= 5,x4= 5,f));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,**&%#x1G\"\"\"-%$cosG6#F'F(F(*(\"\"#F(%#x2GF(%#x 3GF(F(*&\"\"$F(F/F(!\"\"*(\"\"%F(F/F(%#x4GF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?hJv./an]/\">Qj4h&!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?>%Q=Z\"=PO8!)*[x*pH!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"?dde>LBKJhJF4J=9!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?hJv./an]/ \">Qj4h&!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?hJv./an]/\">Qj4h&!#I " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,**&%#x1G\"\"\"-%$cosG6#F%F&F&*&$ \"\"'\"\"!F&%#x2GF&!\"\"$\"\"*F-F&*&$\"#7F-F&%#x4GF&F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,**&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"#5\"\"!F&%#x2GF &F&$\"#:F-!\"\"*&$\"#?F-F&%#x4GF&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$!?hJv./an]/\">Qj4h&!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?hJv./an ]/\">Qj4h&!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?>%Q=Z\"=PO8!)*[x* pH!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?dde>LBKJhJF4J=9!#H" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?>%Q=Z\"=PO8!)*[x*pH!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?dde>LBKJhJF4J=9!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,($\"?UQ=Z\"=PO8!)*[x*p>\"!#G\"\"\"*&$\"\"'\"\"!F'%#x2G F'!\"\"*&$\"#7F+F'%#x4GF'F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,($\"?w &e>LBKJhJF4J=/\"!#G\"\"\"*&$\"\"'\"\"!F'%#x2GF'!\"\"*&$\"#7F+F'%#x4GF' F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,($\"?eh\"G&=GOm)>5D-I?\"!#G!\" \"*&$\"#5\"\"!\"\"\"%#x2GF,F,*&$\"#?F+F,%#x4GF,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,($\"?C9/omx'oQos!*o\"e8!#G!\"\"*&$\"#5\"\"!\"\"\"%#x2G F,F,*&$\"#?F+F,%#x4GF,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?>%Q=Z \"=PO8!)*[x*pH!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?dde>LBKJhJF4J =9!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?>%Q=Z\"=PO8!)*[x*pH!#H" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?dde>LBKJhJF4J=9!#H" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$cosG6#F%F&F&$\"#F\"\"!F&*&$\"# 7F,F&%#x4GF&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-% $cosG6#F%F&F&$\"#@\"\"!!\"\"*&$\"#7F,F&%#x4GF&F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$cosG6#F%F&F&$\"#X\"\"!!\"\"*&$\"#?F,F &%#x4GF&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$cosG6# F%F&F&$\"#N\"\"!F&*&$\"#?F,F&%#x4GF&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"#@\"\"!F&%#x3GF&!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"\"& \"\"!F&%#x3GF&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&%#x1G\"\"\" -%$cosG6#F%F&F&*&$\"#6\"\"!F&%#x3GF&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"#F\"\"!F&%#x3GF&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"\"'\"\"!F &%#x2GF&!\"\"$\"#XF-F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\" \"\"-%$cosG6#F%F&F&*&$\"#5\"\"!F&%#x2GF&F&$\"#vF-!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$cosG6#F%F&F&*&$\"\"'\"\"!F&%#x2G F&!\"\"$\"#^F-F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%#x1G\"\"\"-%$ cosG6#F%F&F&*&$\"#5\"\"!F&%#x2GF&F&$\"#&)F-F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?UQ=Z\"=PO8!)*[x*p*H!#G\"\"\"*&$\"#7\"\"!F'%#x4GF' !\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?eh\"G&=GOm)>5D-I!=!#G! \"\"*&$\"#7\"\"!\"\"\"%#x4GF,F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$ \"?C9/omx'oQos!*o\"e>!#G!\"\"*&$\"#7\"\"!\"\"\"%#x4GF,F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,&$\"?eh\"G&=GOm)>5D-I?%!#G!\"\"*&$\"#?\"\"!\"\" \"%#x4GF,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?C9/omx'oQos!*o\"e V!#G!\"\"*&$\"#?\"\"!\"\"\"%#x4GF,F," }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#,&$\"?UQ=Z\"=PO8!)*[x*pz$!#G\"\"\"*&$\"#?\"\"!F'%#x4GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?w&e>LBKJhJF4J=k$!#G\"\"\"*&$\"#?\"\"!F '%#x4GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?>%Q=Z\"=PO8!)*[x*p H!#H\"\"\"*&$\"#@\"\"!F'%#x3GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#,&$\"?dde>LBKJhJF4J=9!#H\"\"\"*&$\"#@\"\"!F'%#x3GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?>%Q=Z\"=PO8!)*[x*pH!#H\"\"\"*&$\"\"&\" \"!F'%#x3GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?dde>LBKJhJF 4J=9!#H\"\"\"*&$\"\"&\"\"!F'%#x3GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?>%Q=Z\"=PO8!)*[x*pH!#H\"\"\"*&$\"#6\"\"!F'%#x3GF'F'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?dde>LBKJhJF4J=9!#H\"\"\"*&$\"#6 \"\"!F'%#x3GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?>%Q=Z\"=PO8! )*[x*pH!#H\"\"\"*&$\"#F\"\"!F'%#x3GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?dde>LBKJhJF4J=9!#H\"\"\"*&$\"#F\"\"!F'%#x3GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?UQ=Z\"=PO8!)*[x*pz%!#G\"\"\"*&$\"\"'\" \"!F'%#x2GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?w&e>LBKJhJF 4J=k%!#G\"\"\"*&$\"\"'\"\"!F'%#x2GF'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?eh\"G&=GOm)>5D-I?(!#G!\"\"*&$\"#5\"\"!\"\"\"%#x2G F,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?C9/omx'oQos!*o\"et!#G!\" \"*&$\"#5\"\"!\"\"\"%#x2GF,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\" ?eh\"G&=GOm)>5D-I![!#G!\"\"*&$\"\"'\"\"!\"\"\"%#x2GF,F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,&$\"?C9/omx'oQos!*o\"e\\!#G!\"\"*&$\"\"'\"\"!\" \"\"%#x2GF,F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"?UQ=Z\"=PO8!)*[x *pz)!#G\"\"\"*&$\"#5\"\"!F'%#x2GF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#,&$\"?w&e>LBKJhJF4J=k)!#G\"\"\"*&$\"#5\"\"!F'%#x2GF'F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"?oC'ffC$\\&*3=m.*QC'!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?oC'ffC$\\&*3=m.*QW\"!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q&-----6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<# /%#x1G-%'RootOfG6#,&*&-%$tanG6#%#_ZG\"\"\"F0F1F1F1!\"\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$!?`PSSv1X5>Qj4hb5!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?Kv./an]/\">Qj4hb#!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?Kv./an]/\">Qj4hN$!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?Kv ./an]/\">Qj4h:)!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?oC'ffC$\\&*3 =m.*QW&!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?ZiffC$\\&*3=m.*QW8!# F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?UQ=Z\"=PO8!)*[x*pf'!#G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?w&e>LBKJhJF4J=W'!#G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"?UQ=Z\"=PO8!)*[x*pz\"!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?w&e>LBKJhJF4J=k\"!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?;;G&=GOm)>5D-I?5!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?UT! omx'oQos!*o\"e.\"!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?eh\"G&=GOm) >5D-I?#!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?C9/omx'oQos!*o\"eB!#G " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?eh\"G&=GOm)>5D-I+$!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?C9/omx'oQos!*o\"eJ!#G" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$!?eh\"G&=GOm)>5D-I!y!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!?C9/omx'oQos!*o\"ez!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?UQ=Z\"=PO8!)*[x*pz&!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"?w&e>LBKJhJF4J=k&!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?%Q=Z\"=P O8!)*[x*pz8!#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?ee>LBKJhJF4J=k8! #F" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "plot(1/(t*tan(t)-1),t =-3..5);" }}{PARA 13 "" 1 "" {GLPLOT2D 937 937 937 {PLOTDATA 2 "6%-%'C URVESG6$7ft7$$!\"$\"\"!$!?)eLWhO**fY\\ozoX+(!#I7$$!?nmmmmmmmmmmFiDG!#H $!?AuZAE\"zCf'\\'Q`\")>&F-7$$!?LLLLLLLLLLo!)*Qn#F1$!?%GAbXJfg7suX3WD%F -7$$!?nmmmmmmmmmwxE.DF1$!?FkodyM#ot&Q,&G)*\\$F-7$$!?mmmmmmmmmmOk]JBF1$ !?8R^nrcki%=fd:*)*GF-7$$!?LLLLLLLLLL[9cg@F1$!?_2.,)GqY\"RBRb!\\O#F-7$$ !?mmmmmmmmmmhN2-?F1$!?-v\"oZ$p'H\"F-7$$!?mmmmmmmmmm\")3Do;F1$!?I'))p'GNI_e$4@ne`&!#J7$$! ?++++++++++:v2*\\\"F1$\"?\\7%\\ksL^\\R*>$\\O.&FW7$$!?mmmmmmmmm;9(p?T\" F1$\"?QsupT\"*=&>*G'HV&y7F-7$$!?LLLLLLLLLL8>1D8F1$\"??pmesg)fdjn?iYL#F -7$$!?++++++++++&RD%[7F1$\"?IL3it(fpt;z:2Hl$F-7$$!?mmmmmmmmmmw))yr6F1$ \"?\"4G6jdnTwxoG7/i&F-7$$!?LLLLLLLLLL3V^&3\"F1$\"?JD1'QK&\\j7%[x#pZ%*F -7$$!>++++++++++S(R#***F1$\"?nS:X4'*[oSXn&yi!=F17$$!?++++++++++]`#ex*F -$\"?H_^)=d8^Y1\\)>\\AAF17$$!?+++++++++++LDf&*F-$\"?Tz:Fu78%RkCi;y#GF1 7$$!?++++++++++vs'4X*F-$\"?'3ruYKu#G'QwW;XF 17$$!?+++++++++++#4h7*F-$\"?Z?(Q=\"pG%*fia&F17$$!?+++++++++](=m>2* F-$\"?)))*p7\\\")\\YD(z6f(RiF17$$!?++++++++++vJ#y,*F-$\"?G%)oBJ_f@BvHK `9rF17$$!?+++++++++]i,oj*)F-$\"?Zf=&e9O@Xm#4fH_#)F17$$!?++++++++++]r`4 *)F-$\"?8ISSbrd.#)fjdb#z*F17$$!?+++++++++]PTRb))F-$\"?;#*H<\\li!3d6#*o %*>\"!#G7$$!?++++++++++D6D,))F-$\"?=T7_LZs!=CjLgQN,))F\\t7$$!?+ +++++++++v!zYe)F-$!?&pFu'>=u/Af#G4vo\"!#F7$$!?+++++++++]ig`I&)F-$!?Rlx u0Fm%o'e\"p+#fVF\\t7$$!?++++++++++]IRw%)F-$!?sCf#\\(Gi4S,1[x>DF\\t7$$! ?+++++++++]P+DA%)F-$!?CcTZ01S-JnQ&=.y\"F\\t7$$!?++++++++++Dq5o$)F-$!?z e+ZSvMM@!)4oG\"Q\"F\\t7$$!?+++++++++]7S'RJ)F-$!?&*G&QN^;:O6u=%fJ6F\\t7 $$!>+++++++++++@)f#)F1$!?t=j:2>w9@y&pnig*F17$$!?++++++++++vTk2#)F-$!?_ z9g'[94`>'[!*\\,%)F17$$!?++++++++++]tYb\")F-$!?^Fw9OADp)pOY]vZ(F17$$!? ++++++++++D0H.\")F-$!?Y&y4qdD2'=*4g i\\%[x3o%p(=P:'F17$$!?++++++++++]+wYzF-$!?-`wpP*4t>lz(GC;'f%F17$$!?+++++++++++\"*pLwF-$!?Om1FV!G _'ei-#***4PF17$$!?+++++++++++=*\\U(F-$!?sOUAH)QE\"*\\'pF_QJF17$$!?++++ +++++++sd2qF-$!?G1(*[xw#R%f:+\\(eW#F17$$!>++++++++++gi,f'F1$!?`b'3m^D1 $QIS%*fU?F17$$!?ILLLLLLLLL3x0KeF-$!?M;#[U:*Q%GjBsBai\"F17$$!>mmmmmmmmm m\"G&R2&F1$!?ZmJ#3R!\\!fz\"y$>HR\"F17$$!?&******************\\x#\\sTF- $!?P[t%>2P_]'fG$HpA\"F17$$!>LLLLLLLLLLtK5F$F1$!?;#H7%R+Ro!zHLQ[7\"F17$ $!?ILLLLLLLLLLyP2DF-$!?rrBDn'*)yrdILG'o5F17$$!>LLLLLLLLLL$HsVnmmm mmmmmm1:bg\"F1$!?=(>V,Va7@y6l%pE5F17$$\"?SLLLLLLLLLe#=#oCF-$!?sIi@7!oP (yL()HJm5F17$$\">,+++++++++X@4L$F1$!?_oXS6e%[3l0gb-8\"F17$$\"?5+++++++ +++*=C:%F-$!?A0*HEQpR\"R,+++++++++N;R(\\F1$!?E'G-vJ+[**3 DyX*p8F17$$\"?SLLLLLLLLLeF1JeF-$!?Dh+8j=()GU,0/.D;F17$$\">nmmmmmmmmm;4 #)o'F1$!?]iW$pL#***>m@n(F-$!?(*H@1vE,:&Q9]EK%QF17$$\"?qmmmmmmmm;H6!*oyF-$!?!QCk&p;0RXj) *)pZu%F17$$\"?qmmmmmmm;/E@HnzF-$!?*yus.Y,@^Nx/'=0aF17$$\"?qmmmmmmmm\"H 7$ol!)F-$!?f;$\\4E&4STx#HfwI'F17$$\"?qmmmmmmmTN@'y[6)F-$!?\"p\\!*R\\/k `.ivu`*oF17$$\"?qmmmmmmm;z>T2k\")F-$!?mO3'[DZfL12PM[h(F17$$\"?qmmmmmmm \"H#='pK@)F-$!?'=v#))G'R3-&z'f$)e^)F17$$\">nmmmmmmmmm6lCE)F1$!?*>jiL&R U#*e'))HVrn*F17$$\"?0+++++++D\"y5HbJ)F-$!?]-@:f)o`#[g\\J\\P6F\\t7$$\"? SLLLLLLL$e*)4$fo$)F-$!?S7V,6!opSzp@]SQ\"F\\t7$$\"?qmmmmmmmT5!4d;U)F-$! ?9!Q7x7Jont>LgYx\"F\\t7$$\"?0++++++++D\"3@ZZ)F-$!?&4^Qs>R&4l`UMi([#F\\ t7$$\"?SLLLLLLLeRs]yF&)F-$!?&))GZzPd$ensJO;-UF\\t7$$\"?qmmmmmmm;aj!\\3 e)F-$!?1.)36g)>=c5%fy3S\"Ffu7$$\"?0+++++++voaI\"Rj)F-$\"?]:M\"40PJW!ow 1=A5Ffu7$$\"?SLLLLLLLL$e/xpo)F-$\"?z$f78LR[gDh0$\\2PF\\t7$$\"?qmmmmmmm \"zp.T+u)F-$\"?`x'*fl;.>>H#z_/D#F\\t7$$\"?0+++++++]7G]5$z)F-$\"?qbVEc( o\\l\"f[;G3;F\\t7$$\"?SLLLLLLL3F>!ph%))F-$\"?AI+S(\\<.Khxw#yY7F\\t7$$ \"?qmmmmmmmmT5IB**))F-$\"?VBd-oEgb*Rk([&\\,\"F\\t7$$\"?0+++++++Dc,qH_* )F-$\"?*))HipR.lT$4oQVO&)F17$$\"?SLLLLLLL$3F*4O0!*F-$\"?SGB8@=&*Hgr#z` #\\tF17$$\"?qmmmmmmmT&Q)\\Ue!*F-$\"?&\\mMK:$*\\B5+L8!RkF17$$\"?0++++++ +++v*)[6\"*F-$\"?,GhBg]qa?].F&*=dF17$$\"?qmmmmmmm;Hdph<#*F-$\"?voYX!G$ 3!H;6%[A_YF17$$\"?SLLLLLLLLeR\\uB$*F-$\"?9*e][@2l'\\J+A****QF17$$\"?0+ ++++++](=#H()H%*F-$\"?xZHqs'>XF1X3/6M$F17$$\"?qmmmmmmmm;/4+O&*F-$\"?L% =S7%z**[mJRGb4HF17$$\"?0++++++++vooD[(*F-$\"?x>,ng77k5Y&o,oG#F17$$\">M LLLLLLLLL$G^g**F1$\"?*p`pMza9Ij^![>f=F17$$\"?MLLLLLLLL$3+TU3\"F1$\"?b3 `M1,w3Yg))QRE&*F-7$$\"?MLLLLLLLLL=2Vs6F1$\"?cNQ*QI>godxE0**f&F-7$$\"?o mmmmmmmmmE,?\\7F1$\"?$yuo\"oD8T1@Nf)pj$F-7$$\"?,+++++++++N&pfK\"F1$\"? /d&4Rn8!eSd::Tg&FW7$$\"?,+++++++++!G5J m\"F1$!?piZ91%yu'*=\\/#)HF&FW7$$\"?,+++++++++5#32$=F1$!?oM+p0p`q5h*4_$ o7F-7$$\"?,+++++++++Dy'G*>F1$!?cnL(R]jQ9c/4b*Q=F-7$$\"?,+++++++++I%=H< #F1$!?V/e&*o-=qMBF1$!?N\"G$Hi]h*)[qqrF4HF -7$$\"?,++++++++++.W2DF1$!?mKf$GpL/.B0d=f^$F-7$$\"?MLLLLLLLLLep'Rm#F1$ !?!pT\"))*p%RVEFJJp.UF-7$$\"?,+++++++++S>4NGF1$!?N0'\\#ySZ=&yRWQ3F&F-7 $$\"?MLLLLLLLL$ed*f:HF1$!?*y@sT`\\5uWt;Xn)fF-7$$\"?ommmmmmmmm6s5'*HF1$ !?(\\ECc#368TW;4J\\pF-7$$\"?MLLLLLLLLL))3E!3$F1$!?)\\oV3X')*=PUr@L4%)F -7$$\"?,+++++++++lXTkJF1$!?\\gwJ?]?8PSiR&y2\"F17$$\"?MLLLLLLLL$e;!pYKF 1$!?Wwqd<9f%Q==Zo3_\"F17$$\"?ommmmmmmmmmd'*GLF1$!?xaUxM1fQl&=s?7r#F17$ $\"?,+++++++D\"GjK(RLF1$!?\">Y$*fn'4PUgE4?NIF17$$\"?MLLLLLLL$e*)\\*\\] LF1$!?7>;%GSgZLKhs7>X$F17$$\"?ommmmmmmT5ljEhLF1$!?8Sh?gJtR_\\%f-z+%F17 $$\"?,++++++++DJK.sLF1$!?*>L(G\\I/X&)HOs7(y%F17$$\"?ommmmmm;HKkmTxLF1$ !?*Gjdpi_3\"3*=l+sI&F17$$\"?MLLLLLLLeR(4+GQ$F1$!??gm@G=qb*HdU))z&fF17$ $\"?,++++++](o/`$=)Q$F1$!?FS,r6>BouS**R)ez'F17$$\"?ommmmmmm;ajpc$R$F1$ !?rM#H$H\"*))Q`1G'o^\"zF17$$\"?MLLLLLL$e9mR]*)R$F1$!?IQ@&f_K/J]&)4`i[* F17$$\"?,+++++++voHQL/MF1$!?[-zO<(fR*z=O`>&=\"F\\t7$$\"?ommmmmm;/wisr4 MF1$!?EPVo?9&pPLqQL>e\"F\\t7$$\"?MLLLLLLLL$ep+^T$F1$!?+%)RQ-Hz!\\bgp\" y%Q#F\\t7$$\"?,++++++]i!*GT[?MF1$!?y&3DX&4wLuS!)4=r[F\\t7$$\"?ommmmmmm \"z>cneU$F1$\"?\"y\"f%H\\c!*p'[Q85,5!#E7$$\"?MLLLLLL$3_]*4DJMF1$\"?ds) >xR#40mL(G1XT%F\\t7$$\"?,+++++++]7GWjOMF1$\"?$o%*f=(*)[)G3&)>K0D#F\\t7 $$\"?ommmmmm;z>hy,UMF1$\"?>0O3x,IzPG*yys]\"F\\t7$$\"?MLLLLLLL3F%H,uW$F 1$\"?kE')R%RA1kJ#33RJ6F\\t7$$\"?,++++++]PMFZy_MF1$\"?z9.d9^hPhN\"o,Z/* F17$$\"?ommmmmmmmTg\"o\"eMF1$\"?#poAQ\"p(Qq$*oSKg_(F17$$\"?MLLLLLL$e*[ $f^NY$F1$\"?0IjcPyuYUD\\RNQkF17$$\"?,+++++++DcE]$*oMF1$\"??NKk!=$y@vVN V(4i&F17$$\"?ommmmmm;ajf%=VZ$F1$\"?.q6)Hp6O2lX$\\D%)\\F17$$\"?MLLLLLLL $3F*=qzMF1$\"?6QOL#*e;Ze()=uCuWF17$$\"?ommmmmmmT&)e(o/\\$F1$\"?:3!GnkJ S_4KAV\"3PF17$$\"?,+++++++++DcB,NF1$\"?(Q&*zNgs@E->mv+;$F17$$\"?MLLLLL LLL37ZrUNF1$\"?i8a:b!**4NJ'\\f&**)>F17$$\"?ommmmmmmm;*z$>%e$F1$\"?f&yP T8E)4Adn?3J9F17$$\"?-++++++++D')GnDOF1$\"?OCz;a:tDzq5gD.6F17$$\"?NLLLL LLLLLt>:nOF1$\"?,e3**eO6N$p]CnW())F-7$$\"?NLLLLLLLLL)o))>v$F1$\"?>[[q* fS*RVtj\"eb:'F-7$$\"?NLLLLLLLLL.a#o$QF1$\"?UT<\\zwP^&zL/wUa%F-7$$\"?-+ +++++++]F'f4#RF1$\"?%>yf=L)p$o`1*e`zMF-7$$\"?ommmmmmmmm^Q40SF1$\"?sM2L 1EER$[CTWNr#F-7$$\"?,+++++++++!3:(fTF1$\"?Cl'\\)zDz)e]C024u\"F-7$$\"?o mmmmmmmmmc%GpL%F1$\"?;X66:s'eTb#=g*p***FW7$$\"?NLLLLLLLLL8-V&\\%F1$\"? A!37h\"4TJP%=]9i:&FW7$$\"?-+++++++++XhUkYF1$\"?5?,\\xsp\"*zw]wvR5FW7$$ \"?-+++++++++:o " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 66 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidBoundConstrainedAlgoithm.txt000066400000000000000000000276511307543307100250260ustar00rootroot00000000000000> restart: > Digits:=30: > allvalues_:=true: > f:=x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4; > # All > sys:=diff(f,x1),diff(f,x2),diff(f,x3),diff(f,x4): > sol:=solve({sys},{x1,x2,x3,x4}): > evalf(subs(sol,f)); > # One fixed > g:=subs(x1=-3,f): > sys:=diff(g,x2),diff(g,x3),diff(g,x4): > sol:=solve({sys},{x2,x3,x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,f): > sys:=diff(g,x2),diff(g,x3),diff(g,x4): > sol:=solve({sys},{x2,x3,x4}): > evalf(subs(sol,g)); > g:=subs(x2=-3,f): > sys:=diff(g,x1),diff(g,x3),diff(g,x4): > sol:=solve({sys},{x1,x3,x4}): > evalf(subs(sol,g)); > g:=subs(x2=5,f): > sys:=diff(g,x1),diff(g,x3),diff(g,x4): > sol:=solve({sys},{x1,x3,x4}): > evalf(subs(sol,g)); > g:=subs(x3=-3,f): > sys:=diff(g,x1),diff(g,x2),diff(g,x4): > sol:=solve({sys},{x1,x2,x4}): > evalf(subs(sol,g)); > g:=subs(x3=5,f): > sys:=diff(g,x1),diff(g,x2),diff(g,x4): > sol:=solve({sys},{x1,x2,x4}): > evalf(subs(sol,g)); > g:=subs(x4=-3,f): > sys:=diff(g,x1),diff(g,x2),diff(g,x3): > sol:=solve({sys},{x1,x2,x3}): > evalf(subs(sol,g)); > g:=subs(x4=5,f): > sys:=diff(g,x1),diff(g,x2),diff(g,x3): > sol:=solve({sys},{x1,x2,x3}): > evalf(subs(sol,g)); > # Two fixed > # x1,x2 > g:=subs(x1=-3,x2=-3,f): > sys:=diff(g,x3),diff(g,x4): > sol:=solve({sys},{x3,x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=-3,f): > sys:=diff(g,x3),diff(g,x4): > sol:=solve({sys},{x3,x4}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=5,f): > sys:=diff(g,x3),diff(g,x4): > sol:=solve({sys},{x3,x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=5,f): > sys:=diff(g,x3),diff(g,x4): > sol:=solve({sys},{x3,x4}): > evalf(subs(sol,g)); > # x1,x3 > g:=subs(x1=-3,x3=-3,f): > sys:=diff(g,x2),diff(g,x4): > sol:=solve({sys},{x2,x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=-3,f): > sys:=diff(g,x2),diff(g,x4): > sol:=solve({sys},{x2,x4}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x3=5,f): > sys:=diff(g,x2),diff(g,x4): > sol:=solve({sys},{x2,x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=5,f): > sys:=diff(g,x2),diff(g,x4): > sol:=solve({sys},{x2,x4}): > evalf(subs(sol,g)); > # x1,x4 > g:=subs(x1=-3,x4=-3,f): > sys:=diff(g,x2),diff(g,x3): > sol:=solve({sys},{x2,x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x4=-3,f): > sys:=diff(g,x2),diff(g,x3): > sol:=solve({sys},{x2,x3}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x4=5,f): > sys:=diff(g,x2),diff(g,x3): > sol:=solve({sys},{x2,x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x4=5,f): > sys:=diff(g,x2),diff(g,x3): > sol:=solve({sys},{x2,x3}): > evalf(subs(sol,g)); > # x2,x3 > g:=subs(x2=-3,x3=-3,f): > sys:=diff(g,x1),diff(g,x4): > sol:=solve({sys},{x1,x4}): > evalf(subs(sol,g)); > g:=subs(x2=5,x3=-3,f): > sys:=diff(g,x1),diff(g,x4): > sol:=solve({sys},{x1,x4}): > evalf(subs(sol,g)); > g:=subs(x2=-3,x3=5,f): > sys:=diff(g,x1),diff(g,x4): > sol:=solve({sys},{x1,x4}): > evalf(subs(sol,g)); > g:=subs(x2=5,x3=5,f): > sys:=diff(g,x1),diff(g,x4): > sol:=solve({sys},{x1,x4}): > evalf(subs(sol,g)); > # x2,x4 > g:=subs(x2=-3,x4=-3,f): > sys:=diff(g,x1),diff(g,x3): > sol:=solve({sys},{x1,x3}): > evalf(subs(sol,g)); > g:=subs(x2=5,x4=-3,f): > sys:=diff(g,x1),diff(g,x3): > sol:=solve({sys},{x1,x3}): > evalf(subs(sol,g)); > g:=subs(x2=-3,x4=5,f): > sys:=diff(g,x1),diff(g,x3): > sol:=solve({sys},{x1,x3}): > evalf(subs(sol,g)); > g:=subs(x2=5,x4=5,f): > sys:=diff(g,x1),diff(g,x3): > sol:=solve({sys},{x1,x3}): > evalf(subs(sol,g)); > # x3,x4 > g:=subs(x3=-3,x4=-3,f): > sys:=diff(g,x1),diff(g,x2): > sol:=solve({sys},{x1,x2}): > evalf(subs(sol,g)); > g:=subs(x3=5,x4=-3,f): > sys:=diff(g,x1),diff(g,x2): > sol:=solve({sys},{x1,x2}): > evalf(subs(sol,g)); > g:=subs(x3=-3,x4=5,f): > sys:=diff(g,x1),diff(g,x2): > sol:=solve({sys},{x1,x2}): > evalf(subs(sol,g)); > g:=subs(x3=5,x4=5,f): > sys:=diff(g,x1),diff(g,x2): > sol:=solve({sys},{x1,x2}): > evalf(subs(sol,g)); > # Three fixed > # x1,x2,x3 > g:=subs(x1=-3,x2=-3,x3=-3,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=-3,x3=-3,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)): > g:=subs(x1=-3,x2=5,x3=-3,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=5,x3=-3,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=-3,x3=5,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=-3,x3=5,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=5,x3=5,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=5,x3=5,f): > sys:=diff(g,x4): > sol:=solve({sys},{x4}): > evalf(subs(sol,g)); > # x1,x2,x4 > g:=subs(x1=-3,x2=-3,x4=-3,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=-3,x4=-3,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=5,x4=-3,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=5,x4=-3,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=-3,x4=5,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=-3,x4=5,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x2=5,x4=5,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > g:=subs(x1=5,x2=5,x4=5,f): > sys:=diff(g,x3): > sol:=solve({sys},{x3}): > evalf(subs(sol,g)); > # x1,x3,x4 > g:=subs(x1=-3,x3=-3,x4=-3,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=-3,x4=-3,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x3=5,x4=-3,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=5,x4=-3,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x3=-3,x4=5,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=-3,x4=5,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=-3,x3=5,x4=5,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > g:=subs(x1=5,x3=5,x4=5,f): > sys:=diff(g,x2): > sol:=solve({sys},{x2}): > evalf(subs(sol,g)); > # x2,x3,x4 > g:=subs(x2=-3,x3=-3,x4=-3,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > g:=subs(x2=5,x3=-3,x4=-3,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > print("-----"); > g:=subs(x2=-3,x3=5,x4=-3,f): > sys:=diff(g,x1): > sol:=eval(solve({sys},{x1})); > evalf(subs(sol,g)); > g:=subs(x2=5,x3=5,x4=-3,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > g:=subs(x2=-3,x3=-3,x4=5,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > g:=subs(x2=5,x3=-3,x4=5,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > g:=subs(x2=-3,x3=5,x4=5,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > g:=subs(x2=5,x3=5,x4=5,f): > sys:=diff(g,x1): > sol:=solve({sys},{x1}): > evalf(subs(sol,g)); > # x1,x2,x3,x4 > evalf(subs(x1=-3,x2=-3,x3=-3,x4=-3,f)); > evalf(subs(x1= 5,x2=-3,x3=-3,x4=-3,f)); > evalf(subs(x1=-3,x2= 5,x3=-3,x4=-3,f)); > evalf(subs(x1= 5,x2= 5,x3=-3,x4=-3,f)); > evalf(subs(x1=-3,x2=-3,x3= 5,x4=-3,f)); > evalf(subs(x1= 5,x2=-3,x3= 5,x4=-3,f)); > evalf(subs(x1=-3,x2= 5,x3= 5,x4=-3,f)); > evalf(subs(x1= 5,x2= 5,x3= 5,x4=-3,f)); > evalf(subs(x1=-3,x2=-3,x3=-3,x4= 5,f)); > evalf(subs(x1= 5,x2=-3,x3=-3,x4= 5,f)); > evalf(subs(x1=-3,x2= 5,x3=-3,x4= 5,f)); > evalf(subs(x1= 5,x2= 5,x3=-3,x4= 5,f)); > evalf(subs(x1=-3,x2=-3,x3= 5,x4= 5,f)); > evalf(subs(x1= 5,x2=-3,x3= 5,x4= 5,f)); > evalf(subs(x1=-3,x2= 5,x3= 5,x4= 5,f)); > evalf(subs(x1= 5,x2= 5,x3= 5,x4= 5,f)); f := x1 cos(x1) + 2 x2 x3 - 3 x3 + 4 x3 x4 -0.561096338191045067540403753161 2.96997748980133637181471838419 1.41831092731613132233319585757 -0.561096338191045067540403753161 -0.561096338191045067540403753161 x1 cos(x1) - 6. x2 + 9. - 12. x4 x1 cos(x1) + 10. x2 - 15. + 20. x4 -0.561096338191045067540403753161 -0.561096338191045067540403753161 2.96997748980133637181471838419 1.41831092731613132233319585757 2.96997748980133637181471838419 1.41831092731613132233319585757 11.9699774898013363718147183842 - 6. x2 - 12. x4 10.4183109273161313223331958576 - 6. x2 - 12. x4 -12.0300225101986636281852816158 + 10. x2 + 20. x4 -13.5816890726838686776668041424 + 10. x2 + 20. x4 2.96997748980133637181471838419 1.41831092731613132233319585757 2.96997748980133637181471838419 1.41831092731613132233319585757 x1 cos(x1) + 27. - 12. x4 x1 cos(x1) - 21. - 12. x4 x1 cos(x1) - 45. + 20. x4 x1 cos(x1) + 35. + 20. x4 x1 cos(x1) - 21. x3 x1 cos(x1) - 5. x3 x1 cos(x1) + 11. x3 x1 cos(x1) + 27. x3 x1 cos(x1) - 6. x2 + 45. x1 cos(x1) + 10. x2 - 75. x1 cos(x1) - 6. x2 - 51. x1 cos(x1) + 10. x2 + 85. 29.9699774898013363718147183842 - 12. x4 -18.0300225101986636281852816158 - 12. x4 -19.5816890726838686776668041424 - 12. x4 -42.0300225101986636281852816158 + 20. x4 -43.5816890726838686776668041424 + 20. x4 37.9699774898013363718147183842 + 20. x4 36.4183109273161313223331958576 + 20. x4 2.96997748980133637181471838419 - 21. x3 1.41831092731613132233319585757 - 21. x3 2.96997748980133637181471838419 - 5. x3 1.41831092731613132233319585757 - 5. x3 2.96997748980133637181471838419 + 11. x3 1.41831092731613132233319585757 + 11. x3 2.96997748980133637181471838419 + 27. x3 1.41831092731613132233319585757 + 27. x3 47.9699774898013363718147183842 - 6. x2 46.4183109273161313223331958576 - 6. x2 -72.0300225101986636281852816158 + 10. x2 -73.5816890726838686776668041424 + 10. x2 -48.0300225101986636281852816158 - 6. x2 -49.5816890726838686776668041424 - 6. x2 87.9699774898013363718147183842 + 10. x2 86.4183109273161313223331958576 + 10. x2 62.4389036618089549324595962468 14.4389036618089549324595962468 "-----" sol := {x1 = RootOf(tan(_Z) _Z - 1)} -105.561096338191045067540403753 -25.5610963381910450675404037532 -33.5610963381910450675404037532 -81.5610963381910450675404037532 54.4389036618089549324595962468 134.438903661808954932459596247 65.9699774898013363718147183842 64.4183109273161313223331958576 17.9699774898013363718147183842 16.4183109273161313223331958576 -102.030022510198663628185281616 -103.581689072683868677666804142 -22.0300225101986636281852816158 -23.5816890726838686776668041424 -30.0300225101986636281852816158 -31.5816890726838686776668041424 -78.0300225101986636281852816158 -79.5816890726838686776668041424 57.9699774898013363718147183842 56.4183109273161313223331958576 137.969977489801336371814718384 136.418310927316131322333195858 > plot(1/(t*tan(t)-1),t=-3..5); > openturns-1.9/validation/src/ValidBurr.mw000066400000000000000000001741051307543307100206130ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZALUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYpLUYsNiVRImtGJ0YvRjItRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRImNGJ0YvRjJGZ29Gam9GOUY1Rk9GZ24tRiw2JVEkY2RmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRltwNiRRIjFGJ0Y5LUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GZHEtSSVtc3VwR0YkNiUtRmBvNiQtRiM2JUZdcS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmNxRmVxLUZncTYlLUYsNiVRInhGJ0YvRjItRiM2I0ZkcC8lMXN1cGVyc2NyaXB0c2hpZnRHRl1wRjktRiM2JC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGY3FGZXFGZG9GZ3ItRjY2LVEiO0YnRjlGO0ZhcEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRJHBkZkYnRi9GMkZqcC1GLDYlUSlzaW1wbGlmeUYnRi9GMi1GYG82JC1GIzYmLUYsNiVRJ2ZhY3RvckYnRi9GMi1GYG82JC1GIzYkLUYsNiVRJWRpZmZGJ0YvRjItRmBvNiQtRiM2JUZncEZecEZickY5RjlGXnAtRiw2JVEpc3ltYm9saWNGJ0YvRjJGOUZec0ZPRmduLUYsNiVRJGRkZkYnRi9GMkZqcEZidC1GYG82JC1GIzYlRmFzRl5wRmJyRjlGXnNGZ24= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYiIiJGIyksJkYjRiMpSSJ4RzYiSSNjfGlyR0YoRiMsJEkja3xpckdGKCEiIkYs KiopLCYiIiJGJSlJInhHNiJJI2N8aXJHRihGJSwmSSNrfGlyR0YoISIiRixGJUYlRitGJSlGJywmRilGJUYsRiVGJUYpRiU= LCYqMiksJiIiIkYmKUkieEc2IkkjY3xpckdGKUYmLCZJI2t8aXJHRikhIiJGLUYmRiZGK0YmRidGJkYqIiIjRihGLUYlRi1GLEYmKUYoLCZGKkYmRi1GJkYmRiYqLkYkRiZGLEYmRi9GJkYwRiZGKEYtRipGJkYm LUknZmFjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJiomJi1JI29wR0YlNiNJJGRkZkdGJzYjIiIiRjFJJHBkZkdGJyEiIkYxKiYmRiw2IyIiI0YxRjJGM0Yx LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCwqKigpSSJ4RzYiSSNjfGlyR0YoIiIiRilGKkkja3xpckdGKEYqRipGKSEiIkYqRipGJkYqRipGJ0YsLCZGKkYqRiZGKkYsRiw= QyQtSSRpbnRHNiI2JComSSRwZGZHRiUiIiItSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IyooXiNGKUYpSSJ1R0YlRilJInhHRiVGKUYpL0YzOyIiIUkpaW5maW5pdHlHRi1GKQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqLCksJiIiIkYsKUkieEdGJ0kjY3xpckdGJ0YsLCZJI2t8aXJHRichIiJGMkYsRixGMUYsKUYuLCZGL0YsRjJGLEYsRi9GLC1JJGV4cEdGJDYjKiheI0YsRixJInVHRidGLEYuRixGLC9GLjsiIiFJKWluZmluaXR5R0Yl PkklcGRmQ0c2Ii1JJWRpZmZHJSpwcm90ZWN0ZWRHNiRJJHBkZkdGJEkiY0dGJA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqMiksJiIiIkYmKUkieEc2IkkjY3xpckdGKUYmLCZJI2t8aXJHRikhIiJGLUYmRiZGK0YmRidGJi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiNGKEYmRiVGLUYsRiYpRigsJkYqRiZGLUYmRiZGKkYmRiYqLEYkRiZGLEYmRjRGJkYuRiZGKkYmRiYqKEYkRiZGLEYmRjRGJkYm KiYmLUkjb3BHJSpwcm90ZWN0ZWRHNiNJJXBkZkNHNiI2IyIiJCIiIkkkcGRmR0YpISIi LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiRJI2N8aXJHNiIhIiI= PkklcGRmS0c2Ii1JJWRpZmZHJSpwcm90ZWN0ZWRHNiRJJHBkZkdGJEkia0dGJA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqLCksJiIiIkYmKUkieEc2IkkjY3xpckdGKUYmLCZJI2t8aXJHRikhIiJGLUYmRiYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKTYjRiVGJkYsRiYpRigsJkYqRiZGLUYmRiZGKkYmRi0qKEYkRiZGNEYmRipGJkYm KiYmLUkjb3BHJSpwcm90ZWN0ZWRHNiNJJXBkZktHNiI2IyIiIkYrSSRwZGZHRikhIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCYiIiJGKylJInhHRihJI2N8aXJHRihGKyEiIg== QyQtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiYtSSVkaWZmR0YmNiRJJGNkZkdGKEkia0dGKCIiIiwmRjBGMEYuISIiRjJGMA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmIiIiRiopSSJ4R0YnSSNjfGlyR0YnRio= QyQtSSRtYXBHJSpwcm90ZWN0ZWRHNiRJJ2ZhY3Rvckc2JEYlSShfc3lzbGliRzYiLUkkaW50R0YoNiQqJilJInhHRipJIm5HRioiIiJJJHBkZkdGKkYyL0YwOyIiIUkpaW5maW5pdHlHRiVGMg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiotSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCZJI2t8aXJHRigiIiJGLEYsISIiRitGLC1GJDYjKiYsJiomSSNjfGlyR0YoRixGK0YsRixJIm5HRihGLUYsRjNGLUYsLUYkNiMqJiwmRjRGLEYzRixGLEYzRi1GLA== QyQtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJImtHRigiIiItSSZHQU1NQUdGJTYjLCZGK0YsRixGLCEiIkYs LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiQtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSNrfGlyR0YoISIi QyQtSSdleHBhbmRHJSpwcm90ZWN0ZWRHNiMtSSVzdWJzR0YlNiQvKiRJInhHNiIiIiMsJkkidkdGLSIiIiokSSJtR0YtRi5GMS1GJDYjKiQsJkYsRjFGMyEiIiIiJUYx LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCwqJEkieEc2IiIiJSIiIiomRiQiIiRJIm1HRiVGJyEiJSomRioiIiNJInZHRiVGJyIiJyokRipGJiIiKComRiRGJ0YqRilGKw== JSFH openturns-1.9/validation/src/ValidCDFNormal3D.mw000066400000000000000000002507371307543307100216430ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZRLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMzBGJ0Y5RjVGTy1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiUtRiw2JVEuTGluZWFyQWxnZWJyYUYnRi9GMi8lK2V4ZWN1dGFibGVHRj1GOUY5RjVGTy1GLDYlUSJSRidGL0YyRmpuLUYsNiVRJ01hdHJpeEYnRi9GMi1GZW82JC1GIzYlLUZlbzYmLUYjNiotRmVvNiYtRiM2LS1GXm82JFEiMUYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSC9GS0ZXL0ZOUSwwLjMzMzMzMzNlbUYnLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZeci1GXm82JFE3MC43NDU5NzQyNjk3MjEzMTg5NzIxNkYnRjlGY3EtSSZtdGV4dEdGJDYnUSFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUrZm9yZWdyb3VuZEdRKlsyNTUsMCwwXUYnLyUpcmVhZG9ubHlHRj1GOUZqcS1GXm82JFE3MC44NTA0NTQwMjA1NDAxMTE0MzI3OEYnRjlGY3JGXHBGOUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRmNxLUZlbzYmLUYjNi1GY3JGY3JGanFGYHJGY3FGYHFGY3FGanEtRl5vNiRRNzAuNjQzODY0MDk5NTQxNzg4ODAzNTVGJ0Y5RlxwRjlGOUZic0Zlc0ZjcS1GZW82Ji1GIzYrRmpxRl9zRmNxRmpxRlx0RmNxRmBxRlxwRjlGOUZic0Zlc0ZjckZccEY5RjlGYnNGZXNGXHBGOUY5LUY2Ni1RIjtGJ0Y5RjtGZnFGQEZCRkRGRkZIRmdxRk1GTy1GLDYlUSZzaWdtYUYnL0YwRj1GOUZqbkZhcC1GZW82JC1GIzYlLUZlbzYmLUYjNiotRmVvNiYtRiM2KUZgcUZjcS1GXm82JFEiMEYnRjlGY3FGZnVGXHBGOUY5RmJzRmVzRmNxLUZlbzYmLUYjNilGZnVGY3FGYHFGY3FGZnVGXHBGOUY5RmJzRmVzRmNxLUZlbzYmLUYjNilGZnVGY3FGZnVGY3FGYHFGXHBGOUY5RmJzRmVzRmNyRlxwRjlGOUZic0Zlc0ZccEY5RjlGY3RGTy1GLDYlUSZTaWdtYUYnRml0RjlGam5GZnQtRjY2LVEiLkYnRjlGO0Y+RkBGQkZERkZGSEZncS9GTkZXRl5wRmR2RmZ0RmN0Rk8tRiw2JVEieEYnRi9GMkZqbi1GLDYlUSdWZWN0b3JGJ0YvRjItRmVvNiQtRiM2JS1GZW82Ji1GIzYqLUZebzYkUTcwLjU2Mjg3MzYwMTExNzUxNzA1MjgzRidGOUZjcS1GXm82JFE4MC4wOTIyNjExNDQ4NjE1NTg5NjYzMjRGJ0Y5RmNxLUZebzYkUTkwLjAwMTQ5MjIyMzcyNzczNjE0ODAyMjVGJ0Y5RmNyRlxwRjlGOUZic0Zlc0ZccEY5RjlGNUZPLUYsNiVRJHBkZkYnRi9GMkZqbi1JJm1mcmFjR0YkNihGYHEtRiM2KC1JJW1zdXBHRiQ2JS1GZW82JC1GIzYnLUZebzYkUSIyRidGOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGZ3FGZ3YtRiw2JVEjUGlGJ0ZpdEY5Ri9GMkY5LUYjNiUtRmN4NigtRiM2JS1GXm82JFEiM0YnRjlGL0YyLUYjNiVGXnlGL0YyLyUubGluZXRoaWNrbmVzc0dGYnEvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZnovJSliZXZlbGxlZEdGPUYvRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZodUZheS1GLDYlUSxEZXRlcm1pbmFudEYnRi9GMi1GaHg2JS1GZW82JC1GIzYlRmF2Ri9GMkY5LUYjNiUtRmN4NihGYHFGYHpGYnpGZHpGZ3pGaXpGL0YyRltbbEYvRjJGYnpGZHpGZ3pGaXpGYXktRiw2JVEkZXhwRidGaXRGOS1GZW82JC1GIzYmLUYsNiVRJ2V4cGFuZEYnRi9GMi1GZW82JC1GIzYvRmpxRmhbbEZheS1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIRmdxRmd2LUYsNiVRKlRyYW5zcG9zZUYnRi9GMi1GZW82JC1GIzYlRmh2RlxwRjlGOUZkdi1GLDYlUS5NYXRyaXhJbnZlcnNlRidGL0YyLUZlbzYkLUYjNiVGYXZGXHBGOUY5RmR2Rmh2RlxwRjlGOUZccEY5RjlGXHBGOQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Error, Got internal error in Typesetting:-Parse:-Postprocess : "internal error: invalid object " LUkrbWFtYmlndW91c0c2JCUqcHJvdGVjdGVkRy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nRzYkRiVJKF9zeXNsaWJHRig2JC1JJW1yb3dHRiQ2Ty1JI21pR0YkNiVRKHJlc3RhcnRGKC9JJ2l0YWxpY0dGKFEldHJ1ZUYoL0ksbWF0aHZhcmlhbnRHRihRJ2l0YWxpY0YoLUkjbW9HRiQ2LVEiOkYoL0Y4USdub3JtYWxGKC9JJmZlbmNlR0YoUSZmYWxzZUYoL0kqc2VwYXJhdG9yR0YoRkIvSSlzdHJldGNoeUdGKEZCL0kqc3ltbWV0cmljR0YoRkIvSShsYXJnZW9wR0YoRkIvSS5tb3ZhYmxlbGltaXRzR0YoRkIvSSdhY2NlbnRHRihGQi9JJ2xzcGFjZUdGKFEsMC4yNzc3Nzc4ZW1GKC9JJ3JzcGFjZUdGKEZRLUknbXNwYWNlR0YkNiYvSSdoZWlnaHRHRihRJjAuMGV4RigvSSZ3aWR0aEdGKFEmMC4wZW1GKC9JJmRlcHRoR0YoRlkvSSpsaW5lYnJlYWtHRihRKG5ld2xpbmVGKC1GMTYlUSdEaWdpdHNGKEY0RjctRjs2LVEqJmNvbG9uZXE7RihGPkZARkNGRUZHRklGS0ZNRk9GUi1JI21uR0YkNiRRIzMwRihGPkY6RlQtRjE2JVEld2l0aEYoRjRGNy1JKG1mZW5jZWRHRiQ2JC1GLjYjLUYxNiVRLkxpbmVhckFsZ2VicmFGKEY0RjdGPkY6RlQtRjE2JVEiUkYoRjRGN0Zfby1GMTYlUSdNYXRyaXhGKEY0RjctRmpvNiQtRi42Iy1Gam82Ji1GLjYoLUZqbzYmLUYuNistRmNvNiRRIjFGKEY+LUY7Ni1RIixGKEY+RkAvRkRGNkZFRkdGSUZLRk0vRlBGZm4vRlNRLDAuMzMzMzMzM2VtRigtRjs2LVEqJnVtaW51czA7RihGPkZARkNGRUZHRklGS0ZNL0ZQUSwwLjIyMjIyMjJlbUYoL0ZTRmFyLUZjbzYkUTcwLjc0NTk3NDI2OTcyMTMxODk3MjE2RihGPkZmcS1JJm10ZXh0R0YkNidRIUYoL0knZmFtaWx5R0YoUTBUaW1lc35OZXd+Um9tYW5GKC9JK2ZvcmVncm91bmRHRihRKlsyNTUsMCwwXUYoL0kpcmVhZG9ubHlHRihGQkY+Rl1yLUZjbzYkUTcwLjg1MDQ1NDAyMDU0MDExMTQzMjc4RihGPkZmckY+L0klb3BlbkdGKlEiW0YoL0kmY2xvc2VHRipRIl1GKEZmcS1Gam82Ji1GLjYrRmZyRmZyRl1yRmNyRmZxRmNxRmZxRl1yLUZjbzYkUTcwLjY0Mzg2NDA5OTU0MTc4ODgwMzU1RihGPkY+RmVzRmhzRmZxLUZqbzYmLUYuNilGXXJGYnNGZnFGXXJGX3RGZnFGY3FGPkZlc0Zoc0ZmckY+RmVzRmhzRj4tRjs2LVEiO0YoRj5GQEZpcUZFRkdGSUZLRk1GanFGUkZULUYxNiVRJnNpZ21hRigvRjVGQkY+Rl9vRmRwLUZqbzYkLUYuNiMtRmpvNiYtRi42KC1Gam82Ji1GLjYnRmNxRmZxLUZjbzYkUSIwRihGPkZmcUZpdUY+RmVzRmhzRmZxLUZqbzYmLUYuNidGaXVGZnFGY3FGZnFGaXVGPkZlc0Zoc0ZmcS1Gam82Ji1GLjYnRml1RmZxRml1RmZxRmNxRj5GZXNGaHNGZnJGPkZlc0Zoc0Y+RmZ0RlQtRjE2JVEmU2lnbWFGKEZcdUY+Rl9vRml0LUY7Ni1RIi5GKEY+RkBGQ0ZFRkdGSUZLRk1GanEvRlNGZm5GYXBGZ3ZGaXRGZnRGVC1GMTYlUSJ4RihGNEY3Rl9vLUYxNiVRJ1ZlY3RvckYoRjRGNy1Gam82JC1GLjYjLUZqbzYmLUYuNigtRmNvNiRRNzAuNTYyODczNjAxMTE3NTE3MDUyODNGKEY+RmZxLUZjbzYkUTgwLjA5MjI2MTE0NDg2MTU1ODk2NjMyNEYoRj5GZnEtRmNvNiRROTAuMDAxNDkyMjIzNzI3NzM2MTQ4MDIyNUYoRj5GZnJGPkZlc0Zoc0Y+RjpGVC1GMTYlUSRwZGZGKEY0RjdGX28tSSZtZnJhY0dGJDYoRmNxLUYuNiYtSSVtc3VwR0YkNiUtRmpvNiQtRi42JS1GY282JFEiMkYoRj4tRjs2LVEnJnNkb3Q7RihGPkZARkNGRUZHRklGS0ZNRmpxRmp2LUYxNiVRI1BpRihGXHVGPkY+LUYuNiMtRmZ4NigtRi42Iy1GY282JFEiM0YoRj4tRi42I0ZheS9JLmxpbmV0aGlja25lc3NHRihGZXEvSStkZW5vbWFsaWduR0YoUSdjZW50ZXJGKC9JKW51bWFsaWduR0YoRml6L0kpYmV2ZWxsZWRHRihGQi9JMXN1cGVyc2NyaXB0c2hpZnRHRihGW3ZGZHktRjE2JVEsRGV0ZXJtaW5hbnRGKEY0RjctRlt5NiUtRmpvNiQtRi42I0ZkdkY+LUYuNiMtRmZ4NihGY3FGY3pGZXpGZ3pGanpGXFtsRl5bbEZlekZnekZqekZcW2xGZHktRjE2JVEkZXhwRihGXHVGPi1Gam82JC1GLjYkLUYxNiVRJ2V4cGFuZEYoRjRGNy1Gam82JC1GLjYtRl1yRltcbEZkeS1GOzYtUSJ+RihGPkZARkNGRUZHRklGS0ZNRmpxRmp2LUYxNiVRKlRyYW5zcG9zZUYoRjRGNy1Gam82JC1GLjYjRlt3Rj5GZ3YtRjE2JVEuTWF0cml4SW52ZXJzZUYoRjRGN0ZlW2xGZ3ZGW3dGPkY+LUknbWVycm9yR0YkNiNRZHBHb3R+aW50ZXJuYWx+ZXJyb3J+aW5+VHlwZXNldHRpbmc6LVBhcnNlOi1Qb3N0cHJvY2Vzc346fiJpbnRlcm5hbH5lcnJvcjp+aW52YWxpZH5vYmplY3R+IkYo LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY8LUkjbW9HRiQ2L1EkZm9yRicvJSVib2xkR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSVib2xkRicvJStmb250d2VpZ2h0R0Y0LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y5LyUpc3RyZXRjaHlHRjkvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkgtRiw2LVEifkYnL0YzUSdub3JtYWxGJ0Y3RjpGPEY+RkBGQkZERkZGSS1JI21pR0YkNiVRIm5GJy8lJ2l0YWxpY0dGMS9GM1EnaXRhbGljRidGSy1GLDYvUSVmcm9tRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGSy1JI21uR0YkNiRRIjFGJ0ZORkstRiw2L1EjdG9GJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZLLUZmbjYkUSMxNEYnRk5GSy1GLDYvUSNkb0YnRi9GMkY1RjdGOkY8Rj5GQEZCRkRGRkZJLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkgvJSZkZXB0aEdGZ28vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRmNvNiZGZW9GaG9Gam8vRl1wUSVhdXRvRidGSy1GUTYlUSRjZGZGJ0ZURlYtRiw2LVEqJmNvbG9uZXE7RidGTkY3RjpGPEY+RkBGQkZEL0ZHUSwwLjI3Nzc3NzhlbUYnL0ZKRmpwLUZRNiVRJmV2YWxmRidGVEZWLUkobWZlbmNlZEdGJDYmLUYjNiNGUEZOLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUZgcTYkLUYjNiQtRlE2JVEkSW50RidGVEZWLUZgcTYkLUYjNitGXnItRmBxNiQtRiM2K0Zeci1GYHE2JC1GIzYrLUZRNiVRJGludEYnRlRGVi1GYHE2JC1GIzYqLUZRNiVRJHBkZkYnRlRGVi1GLDYtUSIsRidGTkY3L0Y7RjFGPEY+RkBGQkZERkYvRkpRLDAuMzMzMzMzM2VtRictRlE2JVEjeDFGJ0ZURlYtRiw2LVEiPUYnRk5GN0Y6RjxGPkZARkJGREZpcEZbcS1GLDYtUSomdW1pbnVzMDtGJ0ZORjdGOkY8Rj5GQEZCRkQvRkdRLDAuMjIyMjIyMmVtRicvRkpGZ3QtRlE2JVEpaW5maW5pdHlGJ0ZURlYtRiw2LVEjLi5GJ0ZORjdGOkY8Rj5GQEZCRkRGZnRGSS1JJm1mcmFjR0YkNihGZW4tRiM2Iy1GZm42JFEiMkYnRk4vJS5saW5ldGhpY2tuZXNzR0Zobi8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zbdi8lKWJldmVsbGVkR0Y5Rk5GZ3MtRlE2JVEjeDJGJ0ZURlZGYHRGY3RGaXRGXHVGX3VGTkZncy1GUTYlUSN4M0YnRlRGVkZgdEZjdEZpdEZcdUZfdUZORmdzLUZRNiVRI3g0RidGVEZWRmB0RmN0Rml0Rlx1Rl91Rk5GTi1GLDYtUSI7RidGTkY3RmpzRjxGPkZARkJGREZGRltxRmJvRkstRiw2L1Ejb2RGJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZpdg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiIyEiIg== JCIjQSEiIw== JCIkQCMhIiQ= JCIlOkEhIiU= JCImWEAjISIm JCInYTlBISIn JCIoV1hAIyEiKA== JCIpU2E5QSEiKQ== JCIqKFJhOUEhIio= JCIrblJhOUEhIzU= JCIsbydSYTlBISM2 JCItIW8nUmE5QSEjNw== JCIuLW8nUmE5QSEjOA== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiL1IhKSk9KnBxPSEjOyIiIi1JJGV4cEdGJDYjLC4qJiQiLysrKysrdj0hIzlGMilJI3gyR0YnIiIjRjIhIiIqKCQiL25tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIi8rKysrK11pISM6RjJGPEYySSN4NEdGJ0YyRj4qJiQiLzY2NjY2NjZGOkYyKUZCRj1GMkY+KigkIi9MTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIi8rKysrXShvJUZGRjIpRkdGPUYyRj5GMiwmJEYyIiIhRj4tSSRlcmZHRiQ2IywqJCIvJyoqXCZmOHNXRjpGPiomJCIvKFxpJz41YUxGOkYyRjxGMkYyKiYkIi8qKipcKT5yIVwiRjpGMkZCRjJGPiomJCIvJlxQJSpwLGYmRkZGMkZHRjJGMkYyRjJGPi9GPDskRj5JKWluZmluaXR5R0YlJCIvKysrKysrXUY6L0ZCRmBvL0ZHRmBv LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbW5HRiQ2JFE3MC4yMjE0NTQzOTY2ODAxNDk1NzMzNUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0Y3LyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiRRMDAuMjIxNDU0Mzk2NjgwMkYnRi8tSSNtb0dGJDYtUSJ+RidGLy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSS8lKXN0cmV0Y2h5R0ZJLyUqc3ltbWV0cmljR0ZJLyUobGFyZ2VvcEdGSS8lLm1vdmFibGVsaW1pdHNHRkkvJSdhY2NlbnRHRkkvJSdsc3BhY2VHRjovJSdyc3BhY2VHRjovJStleGVjdXRhYmxlR0ZJRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Error, missing operation LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkrbWFtYmlndW91c0dGJDYkLUYjNiotSSNtbkdGJDYnUTcwLjIyMTQ1NDM5NjY4MDE0OTU3MzM1RicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJSlyZWFkb25seUdRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkjbW9HRiQ2LVExJkludmlzaWJsZVRpbWVzO0YnRj0vJSZmZW5jZUdGPC8lKnNlcGFyYXRvckdGPC8lKXN0cmV0Y2h5R0Y8LyUqc3ltbWV0cmljR0Y8LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjwvJSdhY2NlbnRHRjwvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZULUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlQvJSZkZXB0aEdGZm4vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRjE2J1EwMC4yMjE0NTQzOTY2ODAyRidGNEY3RjpGPUY0RjdGOkY9LUknbWVycm9yR0YkNictSSZtdGV4dEdGJDYnUSFGJ0Y0L0Y4USpbMjU1LDAsMF1GJ0Y6Rj1GNEZob0Y6Rj0tRlg2JkZaL0ZoblEmMC4zZW1GJ0Zpbi9GXG9RJWF1dG9GJ0Y0RjdGOkY9 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbW9HRiQ2L1EkZm9yRicvJSVib2xkR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSVib2xkRicvJStmb250d2VpZ2h0R0Y0LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y5LyUpc3RyZXRjaHlHRjkvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkgtRiw2LVEifkYnL0YzUSdub3JtYWxGJ0Y3RjpGPEY+RkBGQkZERkZGSS1JI21pR0YkNiVRIm5GJy8lJ2l0YWxpY0dGMS9GM1EnaXRhbGljRidGSy1GLDYvUSVmcm9tRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGSy1JI21uR0YkNiRRIjFGJ0ZORkstRiw2L1EjdG9GJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZLLUZmbjYkUSMyMEYnRk5GSy1GLDYvUSNkb0YnRi9GMkY1RjdGOkY8Rj5GQEZCRkRGRkZJLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkgvJSZkZXB0aEdGZ28vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRmNvNiZGZW9GaG9Gam8vRl1wUSVhdXRvRidGSy1GUTYlUSRjZGZGJ0ZURlYtRiw2LVEqJmNvbG9uZXE7RidGTkY3RjpGPEY+RkBGQkZEL0ZHUSwwLjI3Nzc3NzhlbUYnL0ZKRmpwLUZRNiVRJmV2YWxmRidGVEZWLUkobWZlbmNlZEdGJDYmLUYjNiNGUEZOLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUZgcTYkLUYjNiQtRlE2JVEkSW50RidGVEZWLUZgcTYkLUYjNiotRlE2JVEkaW50RidGVEZWLUZgcTYkLUYjNiotRlE2JVEkcGRmRidGVEZWLUYsNi1RIixGJ0ZORjcvRjtGMUY8Rj5GQEZCRkRGRi9GSlEsMC4zMzMzMzMzZW1GJy1GUTYlUSN4MUYnRlRGVi1GLDYtUSI9RidGTkY3RjpGPEY+RkBGQkZERmlwRltxLUYsNi1RKiZ1bWludXMwO0YnRk5GN0Y6RjxGPkZARkJGRC9GR1EsMC4yMjIyMjIyZW1GJy9GSkZfdC1GUTYlUSlpbmZpbml0eUYnRlRGVi1GLDYtUSMuLkYnRk5GN0Y6RjxGPkZARkJGREZedEZJLUkmbWZyYWNHRiQ2KEZlbi1GIzYjLUZmbjYkUSIyRidGTi8lLmxpbmV0aGlja25lc3NHRmhuLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmN1LyUpYmV2ZWxsZWRHRjlGTkZfcy1GYHE2Ji1GIzY2LUZRNiVRI3gyRidGVEZWRmhzRlt0LUZmbjYkUSUxMDAwRidGTkZkdEZndEZfcy1GUTYlUSN4M0YnRlRGVkZoc0ZbdEZfdkZkdEZndEZfcy1GUTYlUSN4NEYnRlRGVkZoc0ZbdEZfdkZkdEZndEZORmRxRmdxRl9zLUZRNiVRJ21ldGhvZEYnRlRGVkZocy1GUTYlUSdfY3VocmVGJ0ZURlZGTkZOLUYsNi1RIjpGJ0ZORjdGOkY8Rj5GQEZCRkRGaXBGW3FGYm9GSy1GUTYlUSZwcmludEYnRlRGVi1GYHE2JC1GIzYjLUZgcTYmLUYjNiVGUEZfc0ZjcEZORmRxRmdxRk4tRiw2LVEiO0YnRk5GN0Zic0Y8Rj5GQEZCRkRGRkZbcUZib0ZLLUYsNi9RI29kRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGXHg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiIyEiIg== NyQiIiIkIiIjISIi JCIjQSEiIw== NyQiIiMkIiNBISIj JCIkQCMhIiQ= NyQiIiQkIiRAIyEiJA== JCIlOkEhIiU= NyQiIiUkIiU6QSEiJQ== JCImWEAjISIm NyQiIiYkIiZYQCMhIiY= JCInYTlBISIn NyQiIickIidhOUEhIic= JCIoV1hAIyEiKA== NyQiIigkIihXWEAjISIo JCIpU2E5QSEiKQ== NyQiIikkIilTYTlBISIp JCIqKFJhOUEhIio= NyQiIiokIiooUmE5QSEiKg== JCIrblJhOUEhIzU= NyQiIzUkIituUmE5QSEjNQ== JCIsbydSYTlBISM2 NyQiIzYkIixvJ1JhOUEhIzY= JCItIW8nUmE5QSEjNw== NyQiIzckIi0hbydSYTlBISM3 JCIuLW8nUmE5QSEjOA== NyQiIzgkIi4tbydSYTlBISM4 JCIvQSFvJ1JhOUEhIzk= NyQiIzkkIi9BIW8nUmE5QSEjOQ== JCIwOi1vJ1JhOUEhIzo= NyQiIzokIjA6LW8nUmE5QSEjOg== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiMT5RISkpPSpwcT0hIz0iIiItSSRleHBHRiQ2IywuKiYkIjErKysrKyt2PSEjO0YyKUkjeDJHRiciIiNGMiEiIiooJCIxbm1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjErKysrKytdaSEjPEYyRjxGMkkjeDRHRidGMkY+KiYkIjE2NjY2NjY2NkY6RjIpRkJGPUYyRj4qKCQiMUxMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjErKysrK10obyVGRkYyKUZHRj1GMkY+RjIsJiRGMiIiIUY+LUkkZXJmR0YkNiMsKiQiMSFlKipcJmY4c1dGOkY+KiYkIjEmb1xpJz41YUxGOkYyRjxGMkYyKiYkIjFnKSoqXCk+ciFcIkY6RjJGQkYyRj4qJiQiMXYlXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjErKysrKysrXUY6L0ZCRmBvL0ZHRmBv NyQiIzstSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIxPlEhKSk9KnBxPSEjPSIiIi1JJGV4cEdGJjYjLC4qJiQiMSsrKysrK3Y9ISM7RjQpSSN4MkdGKSIiI0Y0ISIiKigkIjFubW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMSsrKysrK11pISM8RjRGPkY0SSN4NEdGKUY0RkAqJiQiMTY2NjY2NjY2RjxGNClGREY/RjRGQCooJCIxTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiMSsrKysrXShvJUZIRjQpRklGP0Y0RkBGNCwmJEY0IiIhRkAtSSRlcmZHRiY2IywqJCIxIWUqKlwmZjhzV0Y8RkAqJiQiMSZvXGknPjVhTEY8RjRGPkY0RjQqJiQiMWcpKipcKT5yIVwiRjxGNEZERjRGQComJCIxdiVcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiMSsrKysrKytdRjwvRkRGYm8vRklGYm8= LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiMiY9USEpKT0qcHE9ISM+IiIiLUkkZXhwR0YkNiMsLiomJCIyKysrKysrXSg9ISM8RjIpSSN4MkdGJyIiI0YyISIiKigkIjJubW1tbW1tbSJGOkYyRjxGMkkjeDNHRidGMkYyKigkIjIrKysrKysrRCchIz1GMkY8RjJJI3g0R0YnRjJGPiomJCIyNjY2NjY2NjYiRjpGMilGQkY9RjJGPiooJCIyTExMTExMTEwpRkZGMkZCRjJGR0YyRjIqJiQiMisrKysrK3ZvJUZGRjIpRkdGPUYyRj5GMiwmJEYyIiIhRj4tSSRlcmZHRiQ2IywqJCIyJXomKipcJmY4c1dGOkY+KiYkIjJZb1xpJz41YUxGOkYyRjxGMkYyKiYkIjIpZikqKlwpPnIhXCJGOkYyRkJGMkY+KiYkIjJVWlxQJSpwLGYmRkZGMkZHRjJGMkYyRjJGPi9GPDskISUrNUZVJCIyKysrKysrKysmRjovRkJGYG8vRkdGYG8= NyQiIzwtSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIyJj1RISkpPSpwcT0hIz4iIiItSSRleHBHRiY2IywuKiYkIjIrKysrKytdKD0hIzxGNClJI3gyR0YpIiIjRjQhIiIqKCQiMm5tbW1tbW1tIkY8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMisrKysrKytEJyEjPUY0Rj5GNEkjeDRHRilGNEZAKiYkIjI2NjY2NjY2NiJGPEY0KUZERj9GNEZAKigkIjJMTExMTExMTClGSEY0RkRGNEZJRjRGNComJCIyKysrKysrdm8lRkhGNClGSUY/RjRGQEY0LCYkRjQiIiFGQC1JJGVyZkdGJjYjLCokIjIleiYqKlwmZjhzV0Y8RkAqJiQiMllvXGknPjVhTEY8RjRGPkY0RjQqJiQiMilmKSoqXCk+ciFcIkY8RjRGREY0RkAqJiQiMlVaXFAlKnAsZiZGSEY0RklGNEY0RjRGNEZAL0Y+OyQhJSs1RlckIjIrKysrKysrKyZGPC9GREZiby9GSUZibw== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiM049USEpKT0qcHE9ISM/IiIiLUkkZXhwR0YkNiMsLiomJCIzKysrKysrK3Y9ISM9RjIpSSN4MkdGJyIiI0YyISIiKigkIjNubW1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjMrKysrKysrXWkhIz5GMkY8RjJJI3g0R0YnRjJGPiomJCIzNjY2NjY2NjY2RjpGMilGQkY9RjJGPiooJCIzTExMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjMrKysrKytdKG8lRkZGMilGR0Y9RjJGPkYyLCYkRjIiIiFGPi1JJGVyZkdGJDYjLCokIjNTeiYqKlwmZjhzV0Y6Rj4qJiQiM2Ilb1xpJz41YUxGOkYyRjxGMkYyKiYkIjMhKWYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCIzRHUlXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjMrKysrKysrK11GOi9GQkZgby9GR0Zgbw== NyQiIz0tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIzTj1RISkpPSpwcT0hIz8iIiItSSRleHBHRiY2IywuKiYkIjMrKysrKysrdj0hIz1GNClJI3gyR0YpIiIjRjQhIiIqKCQiM25tbW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMysrKysrKytdaSEjPkY0Rj5GNEkjeDRHRilGNEZAKiYkIjM2NjY2NjY2NjZGPEY0KUZERj9GNEZAKigkIjNMTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiMysrKysrK10obyVGSEY0KUZJRj9GNEZARjQsJiRGNCIiIUZALUkkZXJmR0YmNiMsKiQiM1N6JioqXCZmOHNXRjxGQComJCIzYiVvXGknPjVhTEY8RjRGPkY0RjQqJiQiMyEpZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjNEdSVcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiMysrKysrKysrXUY8L0ZERmJvL0ZJRmJv LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiNGAkPVEhKSk9KnBxPSEjQCIiIi1JJGV4cEdGJDYjLC4qJiQiNCsrKysrKytdKD0hIz5GMilJI3gyR0YnIiIjRjIhIiIqKCQiNG5tbW1tbW1tbSJGOkYyRjxGMkkjeDNHRidGMkYyKigkIjQrKysrKysrK0QnISM/RjJGPEYySSN4NEdGJ0YyRj4qJiQiNDY2NjY2NjY2NiJGOkYyKUZCRj1GMkY+KigkIjRMTExMTExMTEwpRkZGMkZCRjJGR0YyRjIqJiQiNCsrKysrKyt2byVGRkYyKUZHRj1GMkY+RjIsJiRGMiIiIUY+LUkkZXJmR0YkNiMsKiQiNCNSeiYqKlwmZjhzV0Y6Rj4qJiQiNFdYb1xpJz41YUxGOkYyRjxGMkYyKiYkIjQoemYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCI0U1VaXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjQrKysrKysrKysmRjovRkJGYG8vRkdGYG8= NyQiIz4tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCI0YCQ9USEpKT0qcHE9ISNAIiIiLUkkZXhwR0YmNiMsLiomJCI0KysrKysrK10oPSEjPkY0KUkjeDJHRikiIiNGNCEiIiooJCI0bm1tbW1tbW1tIkY8RjRGPkY0SSN4M0dGKUY0RjQqKCQiNCsrKysrKysrRCchIz9GNEY+RjRJI3g0R0YpRjRGQComJCI0NjY2NjY2NjY2IkY8RjQpRkRGP0Y0RkAqKCQiNExMTExMTExMTClGSEY0RkRGNEZJRjRGNComJCI0KysrKysrK3ZvJUZIRjQpRklGP0Y0RkBGNCwmJEY0IiIhRkAtSSRlcmZHRiY2IywqJCI0I1J6JioqXCZmOHNXRjxGQComJCI0V1hvXGknPjVhTEY8RjRGPkY0RjQqJiQiNCh6ZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjRTVVpcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiNCsrKysrKysrKyZGPC9GREZiby9GSUZibw== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiNTVOPVEhKSk9KnBxPSEjQSIiIi1JJGV4cEdGJDYjLC4qJiQiNSsrKysrKysrdj0hIz9GMilJI3gyR0YnIiIjRjIhIiIqKCQiNW5tbW1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjUrKysrKysrK11pISNARjJGPEYySSN4NEdGJ0YyRj4qJiQiNTY2NjY2NjY2NjZGOkYyKUZCRj1GMkY+KigkIjVMTExMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjUrKysrKysrXShvJUZGRjIpRkdGPUYyRj5GMiwmJEYyIiIhRj4tSSRlcmZHRiQ2IywqJCI1R1J6JioqXCZmOHNXRjpGPiomJCI1WWElb1xpJz41YUxGOkYyRjxGMkYyKiYkIjV3emYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCI1NUN1JVxQJSpwLGYmRkZGMkZHRjJGMkYyRjJGPi9GPDskISUrNUZVJCI1KysrKysrKysrXUY6L0ZCRmBvL0ZHRmBv NyQiIz8tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCI1NU49USEpKT0qcHE9ISNBIiIiLUkkZXhwR0YmNiMsLiomJCI1KysrKysrKyt2PSEjP0Y0KUkjeDJHRikiIiNGNCEiIiooJCI1bm1tbW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiNSsrKysrKysrXWkhI0BGNEY+RjRJI3g0R0YpRjRGQComJCI1NjY2NjY2NjY2NkY8RjQpRkRGP0Y0RkAqKCQiNUxMTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiNSsrKysrKytdKG8lRkhGNClGSUY/RjRGQEY0LCYkRjQiIiFGQC1JJGVyZkdGJjYjLCokIjVHUnomKipcJmY4c1dGPEZAKiYkIjVZYSVvXGknPjVhTEY8RjRGPkY0RjQqJiQiNXd6ZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjU1Q3UlXFAlKnAsZiZGSEY0RklGNEY0RjRGNEZAL0Y+OyQhJSs1RlckIjUrKysrKysrKytdRjwvRkRGYm8vRklGYm8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbW5HRiQ2JFE3MC4yMjE0NTQzOTY2ODAxNDk1NzMzNUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0Y3LyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiRRMTAuMjE4MjI2OTU4MjI0NTlGJ0YvLUkjbW9HRiQ2LVEifkYnRi8vJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkkvJSlzdHJldGNoeUdGSS8lKnN5bW1ldHJpY0dGSS8lKGxhcmdlb3BHRkkvJS5tb3ZhYmxlbGltaXRzR0ZJLyUnYWNjZW50R0ZJLyUnbHNwYWNlR0Y6LyUncnNwYWNlR0Y6Ri8= openturns-1.9/validation/src/ValidCDFNormalND.mw000066400000000000000000002470051307543307100216700ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZWLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMzBGJ0Y5RjVGT0Znbi1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiMtRiw2JVEuTGluZWFyQWxnZWJyYUYnRi9GMkY5RjVGT0Znbi1GLDYlUSJSRidGL0YyRl9vLUYsNiVRJ01hdHJpeEYnRi9GMi1Gam82JC1GIzYjLUZqbzYmLUYjNiktRmpvNiYtRiM2KS1GY282JFEiMUYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJy1JJm1mcmFjR0YkNihGY3EtRiM2Iy1GY282JFEiMkYnRjkvJS5saW5ldGhpY2tuZXNzR0ZlcS8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zoci8lKWJldmVsbGVkR0Y9RmZxLUZjbzYkUSIwRidGOUZmcUZdc0Y5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRmZxLUZqbzYmLUYjNilGXHJGZnFGY3FGZnFGXHJGZnFGXXNGOUZgc0Zjc0ZmcS1Gam82Ji1GIzYpRl1zRmZxRlxyRmZxRmNxRmZxRlxyRjlGYHNGY3NGZnEtRmpvNiYtRiM2KUZdc0ZmcUZdc0ZmcUZcckZmcUZjcUY5RmBzRmNzRjlGYHNGY3NGOS1GNjYtUSI7RidGOUY7RmlxRkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVEmc2lnbWFGJy9GMEY9RjlGX29GZHAtRmpvNiQtRiM2Iy1Gam82Ji1GIzYpLUZqbzYmLUYjNilGY3FGZnFGXXNGZnFGXXNGZnFGXXNGOUZgc0Zjc0ZmcS1Gam82Ji1GIzYpRl1zRmZxRmNxRmZxRl1zRmZxRl1zRjlGYHNGY3NGZnEtRmpvNiYtRiM2KUZdc0ZmcUZdc0ZmcUZjcUZmcUZdc0Y5RmBzRmNzRmZxLUZqbzYmLUYjNilGXXNGZnFGXXNGZnFGXXNGZnFGY3FGOUZgc0Zjc0Y5RmBzRmNzRjlGYnRGT0Znbi1GLDYlUSZTaWdtYUYnRmh0RjlGX29GZXQtRjY2LVEiLkYnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZhcEZkdkZldEZidEZPRmduLUYsNiVRInhGJ0YvRjJGX28tRiw2JVEnVmVjdG9yRidGL0YyLUZqbzYkLUYjNiMtRmpvNiYtRiM2MS1GLDYlUSN4MUYnRi9GMi1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORlx4RmNxRmZxLUYsNiVRI3gyRidGL0YyRmh3RmNxRmZxLUYsNiVRI3gzRidGL0YyRmh3RmNxRmZxLUYsNiVRI3g0RidGL0YyRmh3RmNxRjlGYHNGY3NGOUY1Rk9GZ24tRiw2JVEkcGRmRidGL0YyRl9vLUZdcjYoRmNxLUYjNiYtSSVtc3VwR0YkNiUtRmpvNiQtRiM2JUZhci1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRiw2JVEjUGlGJ0ZodEY5RjktRiM2Iy1GXXI2KC1GY282JFEiNEYnRjlGX3JGZHJGZnJGaXJGW3MvJTFzdXBlcnNjcmlwdHNoaWZ0R0Zfc0ZleS1GLDYlUSxEZXRlcm1pbmFudEYnRi9GMi1GX3k2JS1Gam82JC1GIzYjRmF2RjktRiM2I0ZcckZiekZkckZmckZpckZbc0ZleS1GLDYlUSRleHBGJ0ZodEY5LUZqbzYkLUYjNiQtRiw2JVEnZXhwYW5kRidGL0YyLUZqbzYkLUYjNi0tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRlt4Rl14RlxyRmV5RmduLUYsNiVRKlRyYW5zcG9zZUYnRi9GMi1Gam82JC1GIzYjRmd2RjlGZHYtRiw2JVEuTWF0cml4SW52ZXJzZUYnRi9GMkZpekZkdkZndkY5Rjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMDMpXHV1Kj1TIg== LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMC8uUCdwKj1TIg== LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMClbXnV1Kj1TIg== LCQqKi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLEAqJEkjeDFHRikiIiMjISIlIiImKiZGLSIiIkkjeDJHRilGMyMiIidGMSomRi1GM0kjeDNHRilGM0YvKiZGLUYzSSN4NEdGKUYzI0YuRjEqJEY0Ri4jISInRjEqJkY0RjNGOEYzIyIiKUYxKiZGNEYzRjpGM0YvKiRGOEYuRj0qJkY4RjNGOkYzRjUqJEY6Ri5GL0Y9RjNGLSMiIiVGMUY0RjtGOEY7RjpGRkYzSSNQaUdGJyEiI0YxI0YzRi4iIztGSiNGMyIjPw== QyQ/KEkibkc2IiIiIkYmIiM5SSV0cnVlRyUqcHJvdGVjdGVkRz5JJGNkZkdGJS0mSSZldmFsZkdGKTYjRiQ2Iy1JJEludEdGJTYkLUYyNiQtRjI2JC1JJGludEdGJTYkSSRwZGZHRiUvSSN4MUdGJTssJEkpaW5maW5pdHlHRikhIiIiIiEvSSN4MkdGJUY+L0kjeDNHRiVGPi9JI3g0R0YlRj5GJg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiJyEiJA== JCIjbCEiJQ== JCIkWichIiY= JCIlbGshIic= JCImXlknISIo JCInM2xrISIp JCIoIjNsayEiKg== JCIpMjNsayEjNQ== JCIqbiEzbGshIzY= JCIrbTEzbGshIzc= JCIsaW0hM2xrISM4 JCItPG0xM2xrISM5 JCIubWhtITNsayEjOg== JCIvZzttMTNsayEjOw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbW5HRiQ2JFE3MC4yMjE0NTQzOTY2ODAxNDk1NzMzNUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0Y3LyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiRRMDAuMjIxNDU0Mzk2NjgwMkYnRi8tSSNtb0dGJDYtUSJ+RidGLy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSS8lKXN0cmV0Y2h5R0ZJLyUqc3ltbWV0cmljR0ZJLyUobGFyZ2VvcEdGSS8lLm1vdmFibGVsaW1pdHNHRkkvJSdhY2NlbnRHRkkvJSdsc3BhY2VHRjovJSdyc3BhY2VHRjovJStleGVjdXRhYmxlR0ZJRi8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Error, missing operation LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkrbWFtYmlndW91c0dGJDYkLUYjNiotSSNtbkdGJDYnUTcwLjIyMTQ1NDM5NjY4MDE0OTU3MzM1RicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJSlyZWFkb25seUdRJmZhbHNlRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkjbW9HRiQ2LVExJkludmlzaWJsZVRpbWVzO0YnRj0vJSZmZW5jZUdGPC8lKnNlcGFyYXRvckdGPC8lKXN0cmV0Y2h5R0Y8LyUqc3ltbWV0cmljR0Y8LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjwvJSdhY2NlbnRHRjwvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZULUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlQvJSZkZXB0aEdGZm4vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRjE2J1EwMC4yMjE0NTQzOTY2ODAyRidGNEY3RjpGPUY0RjdGOkY9LUknbWVycm9yR0YkNictSSZtdGV4dEdGJDYnUSFGJ0Y0L0Y4USpbMjU1LDAsMF1GJ0Y6Rj1GNEZob0Y6Rj0tRlg2JkZaL0ZoblEmMC4zZW1GJ0Zpbi9GXG9RJWF1dG9GJ0Y0RjdGOkY9 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbW9HRiQ2L1EkZm9yRicvJSVib2xkR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSVib2xkRicvJStmb250d2VpZ2h0R0Y0LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y5LyUpc3RyZXRjaHlHRjkvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkgtRiw2LVEifkYnL0YzUSdub3JtYWxGJ0Y3RjpGPEY+RkBGQkZERkZGSS1JI21pR0YkNiVRIm5GJy8lJ2l0YWxpY0dGMS9GM1EnaXRhbGljRidGSy1GLDYvUSVmcm9tRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGSy1JI21uR0YkNiRRIjFGJ0ZORkstRiw2L1EjdG9GJ0YvRjJGNUY3RjpGPEY+RkBGQkZERkZGSUZLLUZmbjYkUSMyMEYnRk5GSy1GLDYvUSNkb0YnRi9GMkY1RjdGOkY8Rj5GQEZCRkRGRkZJLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRkgvJSZkZXB0aEdGZ28vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRmNvNiZGZW9GaG9Gam8vRl1wUSVhdXRvRidGSy1GUTYlUSRjZGZGJ0ZURlYtRiw2LVEqJmNvbG9uZXE7RidGTkY3RjpGPEY+RkBGQkZEL0ZHUSwwLjI3Nzc3NzhlbUYnL0ZKRmpwLUZRNiVRJmV2YWxmRidGVEZWLUkobWZlbmNlZEdGJDYmLUYjNiNGUEZOLyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnLUZgcTYkLUYjNiQtRlE2JVEkSW50RidGVEZWLUZgcTYkLUYjNiotRlE2JVEkaW50RidGVEZWLUZgcTYkLUYjNiotRlE2JVEkcGRmRidGVEZWLUYsNi1RIixGJ0ZORjcvRjtGMUY8Rj5GQEZCRkRGRi9GSlEsMC4zMzMzMzMzZW1GJy1GUTYlUSN4MUYnRlRGVi1GLDYtUSI9RidGTkY3RjpGPEY+RkBGQkZERmlwRltxLUYsNi1RKiZ1bWludXMwO0YnRk5GN0Y6RjxGPkZARkJGRC9GR1EsMC4yMjIyMjIyZW1GJy9GSkZfdC1GUTYlUSlpbmZpbml0eUYnRlRGVi1GLDYtUSMuLkYnRk5GN0Y6RjxGPkZARkJGREZedEZJLUkmbWZyYWNHRiQ2KEZlbi1GIzYjLUZmbjYkUSIyRidGTi8lLmxpbmV0aGlja25lc3NHRmhuLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmN1LyUpYmV2ZWxsZWRHRjlGTkZfcy1GYHE2Ji1GIzY2LUZRNiVRI3gyRidGVEZWRmhzRlt0LUZmbjYkUSUxMDAwRidGTkZkdEZndEZfcy1GUTYlUSN4M0YnRlRGVkZoc0ZbdEZfdkZkdEZndEZfcy1GUTYlUSN4NEYnRlRGVkZoc0ZbdEZfdkZkdEZndEZORmRxRmdxRl9zLUZRNiVRJ21ldGhvZEYnRlRGVkZocy1GUTYlUSdfY3VocmVGJ0ZURlZGTkZOLUYsNi1RIjpGJ0ZORjdGOkY8Rj5GQEZCRkRGaXBGW3FGYm9GSy1GUTYlUSZwcmludEYnRlRGVi1GYHE2JC1GIzYjLUZgcTYmLUYjNiVGUEZfc0ZjcEZORmRxRmdxRk4tRiw2LVEiO0YnRk5GN0Zic0Y8Rj5GQEZCRkRGRkZbcUZib0ZLLUYsNi9RI29kRidGL0YyRjVGN0Y6RjxGPkZARkJGREZGRklGXHg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIiIyEiIg== NyQiIiIkIiIjISIi JCIjQSEiIw== NyQiIiMkIiNBISIj JCIkQCMhIiQ= NyQiIiQkIiRAIyEiJA== JCIlOkEhIiU= NyQiIiUkIiU6QSEiJQ== JCImWEAjISIm NyQiIiYkIiZYQCMhIiY= JCInYTlBISIn NyQiIickIidhOUEhIic= JCIoV1hAIyEiKA== NyQiIigkIihXWEAjISIo JCIpU2E5QSEiKQ== NyQiIikkIilTYTlBISIp JCIqKFJhOUEhIio= NyQiIiokIiooUmE5QSEiKg== JCIrblJhOUEhIzU= NyQiIzUkIituUmE5QSEjNQ== JCIsbydSYTlBISM2 NyQiIzYkIixvJ1JhOUEhIzY= JCItIW8nUmE5QSEjNw== NyQiIzckIi0hbydSYTlBISM3 JCIuLW8nUmE5QSEjOA== NyQiIzgkIi4tbydSYTlBISM4 JCIvQSFvJ1JhOUEhIzk= NyQiIzkkIi9BIW8nUmE5QSEjOQ== JCIwOi1vJ1JhOUEhIzo= NyQiIzokIjA6LW8nUmE5QSEjOg== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiMT5RISkpPSpwcT0hIz0iIiItSSRleHBHRiQ2IywuKiYkIjErKysrKyt2PSEjO0YyKUkjeDJHRiciIiNGMiEiIiooJCIxbm1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjErKysrKytdaSEjPEYyRjxGMkkjeDRHRidGMkY+KiYkIjE2NjY2NjY2NkY6RjIpRkJGPUYyRj4qKCQiMUxMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjErKysrK10obyVGRkYyKUZHRj1GMkY+RjIsJiRGMiIiIUY+LUkkZXJmR0YkNiMsKiQiMSFlKipcJmY4c1dGOkY+KiYkIjEmb1xpJz41YUxGOkYyRjxGMkYyKiYkIjFnKSoqXCk+ciFcIkY6RjJGQkYyRj4qJiQiMXYlXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjErKysrKysrXUY6L0ZCRmBvL0ZHRmBv NyQiIzstSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIxPlEhKSk9KnBxPSEjPSIiIi1JJGV4cEdGJjYjLC4qJiQiMSsrKysrK3Y9ISM7RjQpSSN4MkdGKSIiI0Y0ISIiKigkIjFubW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMSsrKysrK11pISM8RjRGPkY0SSN4NEdGKUY0RkAqJiQiMTY2NjY2NjY2RjxGNClGREY/RjRGQCooJCIxTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiMSsrKysrXShvJUZIRjQpRklGP0Y0RkBGNCwmJEY0IiIhRkAtSSRlcmZHRiY2IywqJCIxIWUqKlwmZjhzV0Y8RkAqJiQiMSZvXGknPjVhTEY8RjRGPkY0RjQqJiQiMWcpKipcKT5yIVwiRjxGNEZERjRGQComJCIxdiVcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiMSsrKysrKytdRjwvRkRGYm8vRklGYm8= LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiMiY9USEpKT0qcHE9ISM+IiIiLUkkZXhwR0YkNiMsLiomJCIyKysrKysrXSg9ISM8RjIpSSN4MkdGJyIiI0YyISIiKigkIjJubW1tbW1tbSJGOkYyRjxGMkkjeDNHRidGMkYyKigkIjIrKysrKysrRCchIz1GMkY8RjJJI3g0R0YnRjJGPiomJCIyNjY2NjY2NjYiRjpGMilGQkY9RjJGPiooJCIyTExMTExMTEwpRkZGMkZCRjJGR0YyRjIqJiQiMisrKysrK3ZvJUZGRjIpRkdGPUYyRj5GMiwmJEYyIiIhRj4tSSRlcmZHRiQ2IywqJCIyJXomKipcJmY4c1dGOkY+KiYkIjJZb1xpJz41YUxGOkYyRjxGMkYyKiYkIjIpZikqKlwpPnIhXCJGOkYyRkJGMkY+KiYkIjJVWlxQJSpwLGYmRkZGMkZHRjJGMkYyRjJGPi9GPDskISUrNUZVJCIyKysrKysrKysmRjovRkJGYG8vRkdGYG8= NyQiIzwtSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIyJj1RISkpPSpwcT0hIz4iIiItSSRleHBHRiY2IywuKiYkIjIrKysrKytdKD0hIzxGNClJI3gyR0YpIiIjRjQhIiIqKCQiMm5tbW1tbW1tIkY8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMisrKysrKytEJyEjPUY0Rj5GNEkjeDRHRilGNEZAKiYkIjI2NjY2NjY2NiJGPEY0KUZERj9GNEZAKigkIjJMTExMTExMTClGSEY0RkRGNEZJRjRGNComJCIyKysrKysrdm8lRkhGNClGSUY/RjRGQEY0LCYkRjQiIiFGQC1JJGVyZkdGJjYjLCokIjIleiYqKlwmZjhzV0Y8RkAqJiQiMllvXGknPjVhTEY8RjRGPkY0RjQqJiQiMilmKSoqXCk+ciFcIkY8RjRGREY0RkAqJiQiMlVaXFAlKnAsZiZGSEY0RklGNEY0RjRGNEZAL0Y+OyQhJSs1RlckIjIrKysrKysrKyZGPC9GREZiby9GSUZibw== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiM049USEpKT0qcHE9ISM/IiIiLUkkZXhwR0YkNiMsLiomJCIzKysrKysrK3Y9ISM9RjIpSSN4MkdGJyIiI0YyISIiKigkIjNubW1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjMrKysrKysrXWkhIz5GMkY8RjJJI3g0R0YnRjJGPiomJCIzNjY2NjY2NjY2RjpGMilGQkY9RjJGPiooJCIzTExMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjMrKysrKytdKG8lRkZGMilGR0Y9RjJGPkYyLCYkRjIiIiFGPi1JJGVyZkdGJDYjLCokIjNTeiYqKlwmZjhzV0Y6Rj4qJiQiM2Ilb1xpJz41YUxGOkYyRjxGMkYyKiYkIjMhKWYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCIzRHUlXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjMrKysrKysrK11GOi9GQkZgby9GR0Zgbw== NyQiIz0tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCIzTj1RISkpPSpwcT0hIz8iIiItSSRleHBHRiY2IywuKiYkIjMrKysrKysrdj0hIz1GNClJI3gyR0YpIiIjRjQhIiIqKCQiM25tbW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiMysrKysrKytdaSEjPkY0Rj5GNEkjeDRHRilGNEZAKiYkIjM2NjY2NjY2NjZGPEY0KUZERj9GNEZAKigkIjNMTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiMysrKysrK10obyVGSEY0KUZJRj9GNEZARjQsJiRGNCIiIUZALUkkZXJmR0YmNiMsKiQiM1N6JioqXCZmOHNXRjxGQComJCIzYiVvXGknPjVhTEY8RjRGPkY0RjQqJiQiMyEpZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjNEdSVcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiMysrKysrKysrXUY8L0ZERmJvL0ZJRmJv LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiNGAkPVEhKSk9KnBxPSEjQCIiIi1JJGV4cEdGJDYjLC4qJiQiNCsrKysrKytdKD0hIz5GMilJI3gyR0YnIiIjRjIhIiIqKCQiNG5tbW1tbW1tbSJGOkYyRjxGMkkjeDNHRidGMkYyKigkIjQrKysrKysrK0QnISM/RjJGPEYySSN4NEdGJ0YyRj4qJiQiNDY2NjY2NjY2NiJGOkYyKUZCRj1GMkY+KigkIjRMTExMTExMTEwpRkZGMkZCRjJGR0YyRjIqJiQiNCsrKysrKyt2byVGRkYyKUZHRj1GMkY+RjIsJiRGMiIiIUY+LUkkZXJmR0YkNiMsKiQiNCNSeiYqKlwmZjhzV0Y6Rj4qJiQiNFdYb1xpJz41YUxGOkYyRjxGMkYyKiYkIjQoemYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCI0U1VaXFAlKnAsZiZGRkYyRkdGMkYyRjJGMkY+L0Y8OyQhJSs1RlUkIjQrKysrKysrKysmRjovRkJGYG8vRkdGYG8= NyQiIz4tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCI0YCQ9USEpKT0qcHE9ISNAIiIiLUkkZXhwR0YmNiMsLiomJCI0KysrKysrK10oPSEjPkY0KUkjeDJHRikiIiNGNCEiIiooJCI0bm1tbW1tbW1tIkY8RjRGPkY0SSN4M0dGKUY0RjQqKCQiNCsrKysrKysrRCchIz9GNEY+RjRJI3g0R0YpRjRGQComJCI0NjY2NjY2NjY2IkY8RjQpRkRGP0Y0RkAqKCQiNExMTExMTExMTClGSEY0RkRGNEZJRjRGNComJCI0KysrKysrK3ZvJUZIRjQpRklGP0Y0RkBGNCwmJEY0IiIhRkAtSSRlcmZHRiY2IywqJCI0I1J6JioqXCZmOHNXRjxGQComJCI0V1hvXGknPjVhTEY8RjRGPkY0RjQqJiQiNCh6ZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjRTVVpcUCUqcCxmJkZIRjRGSUY0RjRGNEY0RkAvRj47JCElKzVGVyQiNCsrKysrKysrKyZGPC9GREZiby9GSUZibw== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtRiM2JC1GIzYkLCQqKCQiNTVOPVEhKSk9KnBxPSEjQSIiIi1JJGV4cEdGJDYjLC4qJiQiNSsrKysrKysrdj0hIz9GMilJI3gyR0YnIiIjRjIhIiIqKCQiNW5tbW1tbW1tbTtGOkYyRjxGMkkjeDNHRidGMkYyKigkIjUrKysrKysrK11pISNARjJGPEYySSN4NEdGJ0YyRj4qJiQiNTY2NjY2NjY2NjZGOkYyKUZCRj1GMkY+KigkIjVMTExMTExMTEwkKUZGRjJGQkYyRkdGMkYyKiYkIjUrKysrKysrXShvJUZGRjIpRkdGPUYyRj5GMiwmJEYyIiIhRj4tSSRlcmZHRiQ2IywqJCI1R1J6JioqXCZmOHNXRjpGPiomJCI1WWElb1xpJz41YUxGOkYyRjxGMkYyKiYkIjV3emYpKipcKT5yIVwiRjpGMkZCRjJGPiomJCI1NUN1JVxQJSpwLGYmRkZGMkZHRjJGMkYyRjJGPi9GPDskISUrNUZVJCI1KysrKysrKysrXUY6L0ZCRmBvL0ZHRmBv NyQiIz8tSSRJbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JC1GJTYkLUYlNiQsJCooJCI1NU49USEpKT0qcHE9ISNBIiIiLUkkZXhwR0YmNiMsLiomJCI1KysrKysrKyt2PSEjP0Y0KUkjeDJHRikiIiNGNCEiIiooJCI1bm1tbW1tbW1tO0Y8RjRGPkY0SSN4M0dGKUY0RjQqKCQiNSsrKysrKysrXWkhI0BGNEY+RjRJI3g0R0YpRjRGQComJCI1NjY2NjY2NjY2NkY8RjQpRkRGP0Y0RkAqKCQiNUxMTExMTExMTCQpRkhGNEZERjRGSUY0RjQqJiQiNSsrKysrKytdKG8lRkhGNClGSUY/RjRGQEY0LCYkRjQiIiFGQC1JJGVyZkdGJjYjLCokIjVHUnomKipcJmY4c1dGPEZAKiYkIjVZYSVvXGknPjVhTEY8RjRGPkY0RjQqJiQiNXd6ZikqKlwpPnIhXCJGPEY0RkRGNEZAKiYkIjU1Q3UlXFAlKnAsZiZGSEY0RklGNEY0RjRGNEZAL0Y+OyQhJSs1RlckIjUrKysrKysrKytdRjwvRkRGYm8vRklGYm8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbW5HRiQ2JFE3MC4yMjE0NTQzOTY2ODAxNDk1NzMzNUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0Y3LyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiRRMTAuMjE4MjI2OTU4MjI0NTlGJ0YvLUkjbW9HRiQ2LVEifkYnRi8vJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkkvJSlzdHJldGNoeUdGSS8lKnN5bW1ldHJpY0dGSS8lKGxhcmdlb3BHRkkvJS5tb3ZhYmxlbGltaXRzR0ZJLyUnYWNjZW50R0ZJLyUnbHNwYWNlR0Y6LyUncnNwYWNlR0Y6Ri8= TTdSMApJPFJUQUJMRV9TQVZFLzE0MDE4OTc0NzQ0OTgwOFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIzEiJSIlIiIiI0YnIiIjIiIhRipGKEYnRihGKkYqRihGJ0YoRipGKkYoRidGJg==TTdSMApJPFJUQUJMRV9TQVZFLzE0MDE4OTY5NjM3MDMwNFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIzEiJSIlIiIiIiIhRihGKEYoRidGKEYoRihGKEYnRihGKEYoRihGJ0YmTTdSMApJPFJUQUJMRV9TQVZFLzE0MDE4OTc0NzQ1MTQ4OFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIzEiJSIlIiIiI0YnIiIjIiIhRipGKEYnRihGKkYqRihGJ0YoRipGKkYoRidGJg== openturns-1.9/validation/src/ValidCFHistogram.mw000066400000000000000000001653251307543307100220530ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY3LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEmc2hpZnRGJ0YvRjJGX28tRmNvNiRRIjBGJ0Y5RjVGTy1GLDYlUSRwaGlGJy9GMEY9RjlGX29GZ24tRiw2JVEkc3VtRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiwtRiw2JVEkaW50RidGL0YyLUZkcDYkLUYjNjMtRiw2JVEkZXhwRidGX3BGOS1GZHA2JC1GIzYnLUYsNiVRIklGJ0YvRjItRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRInVGJ0YvRjJGaXEtRiw2JVEieEYnRi9GMkY5RmlxLUYsNiVRImhGJ0YvRjItRmRwNiYtRiM2Iy1GLDYlUSJrRidGL0YyRjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRictRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Zfci1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZmby1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORl90LUYsNiVRI2N3RidGL0YyLUZkcDYmLUYjNiVGaXItRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZedEZgdC1GY282JFEiMUYnRjlGOUZcc0Zfcy1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZedEZbb0Zmb0ZbdEZhdEZlckY5RmJzRmlyRmhzRmlvRl51LUYsNiVRIm5GJ0YvRjJGaHRGW3VGOS1GNjYtUSI7RidGOUY7RmVzRkBGQkZERkZGSEZqbkZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkc3VtRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqKl4jIiIiRismSSJoR0YnNiNJImtHRidGKywmLUkkZXhwR0YkNiMqKEYqRitJInVHRidGKyZJI2N3R0YnNiMsJkYvRishIiJGK0YrRistRjI2IyooRipGK0Y1RismRjdGLkYrRjpGK0Y1RjovRi87IiIhLCZJIm5HRidGK0Y6Ris= LUkpc2ltcGxpZnlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2Iy1JJ3Nlcmllc0dGJTYkSSRwaGlHRidJInVHRic= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ky9JInVHNiItSSRzdW1HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2JComJkkiaEdGJDYjSSJrR0YkIiIiLCYmSSNjd0dGJEYuRjAmRjM2IywmRi9GMCEiIkYwRjdGMC9GLzsiIiEsJkkibkdGJEYwRjdGMEY6KiZeIyNGMCIiI0YwLUYmNiQqJkYsRjAsJiokRjRGQEY3KiRGMkZARjBGMEY4RjBGMCwkLUYmNiQqJkYsRjAsJiokRjIiIiRGMCokRjRGTUY3RjBGOCNGNyIiJ0ZAKiZeIyNGNyIjQ0YwLUYmNiQqJkYsRjAsJiokRjQiIiVGNyokRjJGWkYwRjBGOEYwRk0sJC1GJjYkKiZGLEYwLCYqJEY0IiImRjcqJEYyRlxvRjBGMEY4I0YwIiQ/IkZaLUkiT0dGKDYjRjBGXG8= QyQ+SSJoRzYiLUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYvMkkieEdGJSMiI0IiIzUiIiEyRisjIiNMRi4jIiIiIiM5MkYrIyIjYEYuIyIiJCIjRzJGKyMiIyQpRi4jRjQiIigyRisjIiQuIkYuRjkyRisjIiQ4IkYuRjNGL0Y0 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYvMkkieEc2IiMiI0IiIzUiIiEyRicjIiNMRisjIiIiIiM5MkYnIyIjYEYrIyIiJCIjRzJGJyMiIyQpRisjRjEiIigyRicjIiQuIkYrRjYyRicjIiQ4IkYrRjBGLA== QyQtSSVwbG90RzYiNiRJImhHRiUvSSJ4R0YlOyIiISIjOiIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdfcjckJCIiISEiIiQiIiEhIiI3JCQiK0RKZHBLISM1JCIiISEiIjckJCItdj03VDloISM3JCIiISEiIjckJCIsdj1IUEoqISM2JCIiISEiIjckJCItREphVWA3ISM2JCIiISEiIjckJCIudlZHWlJkIiEjNyQiIiEhIiI3JCQiLnY9Mjc2KD0hIzckIiIhISIiNyQkIi52VmBnXC0jISM3JCIiISEiIjckJCIudm8qKjMpeUAhIzckIiIhISIiNyQkIi52PWQnZT1BISM3JCIiISEiIjckJCIudm85ayRlQSEjNyQiIiEhIiI3JCQiLnZWJEhEeUEhIzckIiIhISIiNyQkIi52PXNUIilIIyEjNyQiIiEhIiI3JCQiLkRjNiczM0IhIzckIjFVciZHOWRHOSghIzw3JCQiLnYkNDAuPUIhIzckIjFVciZHOWRHOSghIzw3JCQiLkRKIVwoeksjISM3JCIxVXImRzlkRzkoISM8NyQkIi52b0g+ekwjISM3JCIxVXImRzlkRzkoISM8NyQkIi52b1d1dVQjISM3JCIxVXImRzlkRzkoISM8NyQkIi52b2ZIcVwjISM3JCIxVXImRzlkRzkoISM8NyQkIi5EIkcnSGNsIyEjNyQiMVVyJkc5ZEc5KCEjPDckJCIudiRmJ0hVIkchIzckIjFVciZHOWRHOSghIzw3JCQiL3YkZkdwdChIISM4JCIxVXImRzlkRzkoISM8NyQkIixEIiozMDkkISM1JCIxVXImRzlkRzkoISM8NyQkIi92VltjTjdLISM4JCIxVXImRzlkRzkoISM8NyQkIi52VlEtVUckISM3JCIxVXImRzlkRzkoISM8NyQkIjJ3PW5qQSQ9JEgkISM7JCIxVXImRzlkRzkoISM8NyQkIjF2JGYkb1M7LUwhIzokIjI5ZEc5ZEc5MiIhIzw3JCQiMkZjXi4iXDk2TCEjOyQiMjlkRzlkRzkyIiEjPDckJCIwdlZCdkQsSyQhIzkkIjI5ZEc5ZEc5MiIhIzw3JCQiMUQiR2pWKDNRTCEjOiQiMjlkRzlkRzkyIiEjPDckJCIvREo/IlxnTiQhIzgkIjI5ZEc5ZEc5MiIhIzw3JCQiMEQiRylbcz5SJCEjOSQiMjlkRzlkRzkyIiEjPDckJCItRGNlKnlVJCEjNiQiMjlkRzlkRzkyIiEjPDckJCIudj1uZycqZSQhIzckIjI5ZEc5ZEc5MiIhIzw3JCQiLHZbRDl2JCEjNSQiMjlkRzlkRzkyIiEjPDckJCIsRGMkR3dTISM1JCIyOWRHOWRHOTIiISM8NyQkIixEXlckKlElISM1JCIyOWRHOWRHOTIiISM8NyQkIi52byVRanRZISM3JCIyOWRHOWRHOTIiISM8NyQkIixETyJvNl0hIzUkIjI5ZEc5ZEc5MiIhIzw3JCQiLURjbSdbOiYhIzYkIjI5ZEc5ZEc5MiIhIzw3JCQiKiY+MClIJiEiKSQiMjlkRzlkRzkyIiEjPDckJCIxJTQnXGU9WTNgISM6JCIyJkc5ZEc5ZEc5ISM8NyQkIjEpPSMqcHdyKT1gISM6JCIyJkc5ZEc5ZEc5ISM8NyQkIjEiRylbdjtHSGAhIzokIjImRzlkRzlkRzkhIzw3JCQiMXZWKVJlInBSYCEjOiQiMiZHOWRHOWRHOSEjPDckJCIxamwoNFM2ME8mISM6JCIyJkc5ZEc5ZEc5ISM8NyQkIjB2b3pASjhRJiEjOSQiMiZHOWRHOWRHOSEjPDckJCIxREomPiYzKEhVJiEjOiQiMiZHOWRHOWRHOSEjPDckJCIvdiRmWzVZWSYhIzgkIjImRzlkRzlkRzkhIzw3JCQiMEQxUnYqKXlhJiEjOSQiMiZHOWRHOWRHOSEjPDckJCIudj0tcDZqJiEjNyQiMiZHOWRHOWRHOSEjPDckJCIvdlZbOmd5ZCEjOCQiMiZHOWRHOWRHOSEjPDckJCIrdlMuRWYhIiokIjImRzlkRzlkRzkhIzw3JCQiLnY9eFomXGkhIzckIjImRzlkRzlkRzkhIzw3JCQiLkRjSjR3YichIzckIjImRzlkRzlkRzkhIzw3JCQiLXY9I1Ihem8hIzYkIjImRzlkRzlkRzkhIzw3JCQiLnYkNEFAdXIhIzckIjImRzlkRzlkRzkhIzw3JCQiLURjaGYjXCghIzYkIjImRzlkRzlkRzkhIzw3JCQiLnZvZjJMI3khIzckIjImRzlkRzlkRzkhIzw3JCQiLHZCXXMneiEjNSQiMiZHOWRHOWRHOSEjPDckJCIuRCJ5Rz42IikhIzckIjImRzlkRzlkRzkhIzw3JCQiMEQieXZRIyopPSkhIzkkIjImRzlkRzlkRzkhIzw3JCQiL3ZWdFtsbSMpISM4JCIyJkc5ZEc5ZEc5ISM8NyQkIjFLWDlbN1B3IykhIzokIjImRzlkRzlkRzkhIzw3JCQiMWo6JkdpKDMnRykhIzokIjImRzlkRzlkRzkhIzw3JCQiMSRmZXYqUiFlSCkhIzokIjImRzlkRzlkRzkhIzw3JCQiMUNjRXMuXzAkKSEjOiQiMjlkRzlkRzkyIiEjPDckJCIxKG96OzdgXEspISM6JCIyOWRHOWRHOTIiISM8NyQkIjB2JDRyZVFXJCkhIzkkIjI5ZEc5ZEc5MiIhIzw3JCQiMXc9IypwOEQkUSkhIzokIjI5ZEc5ZEc5MiIhIzw3JCQiLXZvbzZBJSkhIzYkIjI5ZEc5ZEc5MiIhIzw3JCQiLnY9S0NGZSkhIzckIjI5ZEc5ZEc5MiIhIzw3JCQiK3Y8TFYoKSEiKiQiMjlkRzlkRzkyIiEjPDckJCItdiQqeWRkISohIzYkIjI5ZEc5ZEc5MiIhIzw3JCQiLnY9PEY7TyohIzckIjI5ZEc5ZEc5MiIhIzw3JCQiLURjP0EqcCohIzYkIjI5ZEc5ZEc5MiIhIzw3JCQiLkRjMSUqMyYpKiEjNyQiMjlkRzlkRzkyIiEjPDckJCIsdmdjLSsiISIqJCIyOWRHOWRHOTIiISM8NyQkIi92bz5QTjM1ISM3JCIyOWRHOWRHOTIiISM8NyQkIi52PSQzWDs1ISM2JCIyOWRHOWRHOTIiISM8NyQkIjB2b3pRKlw/NSEjOCQiMjlkRzlkRzkyIiEjPDckJCIvRDFXemFDNSEjNyQiMjlkRzlkRzkyIiEjPDckJCIxdiQ0QEFzbC0iISM5JCIyOWRHOWRHOTIiISM8NyQkIjBEYyxdJ2ZHNSEjOCQiMjlkRzlkRzkyIiEjPDckJCIydm96IlInMydINSEjOiQiMjlkRzlkRzkyIiEjPDckJCIxREo/eTJpSTUhIzkkIjFVciZHOWRHOSghIzw3JCQiMkRjRXMiSGpKNSEjOiQiMVVyJkc5ZEc5KCEjPDckJCItRGNda0s1ISM1JCIxVXImRzlkRzkoISM8NyQkIjB2by9WPnQvIiEjOCQiMVVyJkc5ZEc5KCEjPDckJCIvdm8vUSo+MSIhIzckIjFVciZHOWRHOSghIzw3JCQiLXZRKHpTNCIhIzUkIjFVciZHOWRHOSghIzw3JCQiMHZvLyNcPDQ2ISM4JCIxVXImRzlkRzkoISM8NyQkIi92PS0sRkM2ISM3JCIxVXImRzlkRzkoISM8NyQkIjF2VilSWFVpNyIhIzkkIjFVciZHOWRHOSghIzw3JCQiMEQieTBbQEc2ISM4JCIxVXImRzlkRzkoISM8NyQkIjJ3b3o7KTQ/SDYhIzokIjFVciZHOWRHOSghIzw3JCQiMUQieXY6KD1JNiEjOSQiIiEhIiI3JCQiMkRjd01MdDY4IiEjOiQiIiEhIiI3JCQiLnYkNCZmQDgiISM2JCIiISEiIjckJCIwdm9IQC9oOCIhIzgkIiIhISIiNyQkIi9EYzsqWys5IiEjNyQiIiEhIiI3JCQiLXZCJFF6OSIhIzUkIiIhISIiNyQkIi92JDR0RmU6IiEjNyQiIiEhIiI3JCQiMHYkNDFXRHI2ISM4JCIiISEiIjckJCItRCIzIm8nPSIhIzUkIiIhISIiNyQkIi92b3o7KSo9NyEjNyQiIiEhIiI3JCQiKyYqNDRdNyEiKSQiIiEhIiI3JCQiLkRKdy8+RyIhIzYkIiIhISIiNyQkIi92PSg0Yk1KIiEjNyQiIiEhIiI3JCQiLHZkWUNNIiEiKiQiIiEhIiI3JCQiLkRjM3VjUCIhIzYkIiIhISIiNyQkIitsSlIwOSEiKSQiIiEhIiI3JCQiL3Y9LSp6cVYiISM3JCIiISEiIjckJCIvRCJHOjN1WSIhIzckIiIhISIiNyQkIiRdIiEiIiQiIiEhIiItJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJVZJRVdHNiQ7JCIiISEiIiQiJF0iISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJ4NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkXSYhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiU/TCEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiU/TiEiIi0lKUNISUxEUkVORzYi QyQ+SSRwaGlHNiItSSRpbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2JComLUkkZXhwR0YoNiMqKF4jIiIiRjJJInVHRiVGMkkieEdGJUYyRjJJImhHRiVGMi9GNDssJEkpaW5maW5pdHlHRikhIiJGOUYy LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCwqKF4jIyIiIiIjOUYmLCYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IyomXiMjIiNCIiM1RiZJInVHRi5GJkYmLUYqNiMqJl4jIyIjTEY0RiZGNUYmISIiRiZGNUY8RiYqKF4jIyIiJCIjR0YmLCZGNkYmLUYqNiMqJl4jIyIjYEY0RiZGNUYmRjxGJkY1RjxGJiooXiMjRiYiIihGJiwmRkNGJi1GKjYjKiZeIyMiIyQpRjRGJkY1RiZGPEYmRjVGPEYmKihGPkYmLCZGTkYmLUYqNiMqJl4jIyIkLiJGNEYmRjVGJkY8RiZGNUY8RiYqKEYkRiYsJkZWRiYtRio2IyomXiMjIiQ4IkY0RiZGNUYmRjxGJkY1RjxGJg== QyQtSSZldmFsZkclKnByb3RlY3RlZEc2Iy1JJXN1YnNHRiU2JC9JInVHNiIiIiJJJHBoaUdGLEYt LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder XiQkIV9xaycpM0VzWUI6dC5zd0IkZnpiQUhWPiVlJHkqcG1OOilHMCEpeWI5TE9QJD5QSToiKj4qXGU/WzcpISQsIiQhX3E/KXBfYkEoNDJtbzBRWWlEKFFjSjlKMFInW3YqZj4iPSQqPVkkenlqOThVcFowOSlbOGUubTxZRiU= JSFH LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIpLysrNSEiKA== LUknc2VyaWVzRyUqcHJvdGVjdGVkRzYkLCYtSSRleHBHNiRGJEkoX3N5c2xpYkc2IjYjSSJ6R0YrIiIiISIiRi5GLQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ky9JInpHNiIiIiJGJSNGJSIiI0YnI0YlIiInIiIkI0YlIiNDIiIlI0YlIiQ/IiIiJi1JIk9HJSpwcm90ZWN0ZWRHNiNGJUYp LUknc2VyaWVzRyUqcHJvdGVjdGVkRzYkLUkkbG9nRzYkRiRJKF9zeXNsaWJHNiI2IywmIiIiRi1JInpHRipGLUYu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Ky9JInpHNiIiIiJGJSMhIiIiIiNGKCNGJSIiJEYqI0YnIiIlRiwjRiUiIiZGLi1JIk9HJSpwcm90ZWN0ZWRHNiNGJSIiJw== JSFH openturns-1.9/validation/src/ValidCauchyModel.mw000066400000000000000000000547261307543307100221040ustar00rootroot00000000000000 restart: assume(nu_1,real,nu_2,real,tau_1,real,tau_2,real): G:=factor(int(int(exp(2*Pi*I*(nu_1*tau_1+nu_2*tau_2))*exp(-abs(tau_1)-abs(tau_2)),tau_1=-infinity..infinity),tau_2=-infinity..infinity)); LCQqKiwmKiZJI1BpRyUqcHJvdGVjdGVkRyIiIkkmbnVfMXxpckc2IkYoIiIjXiNGKEYoISIiLCZGJSEiI0YsRihGLSwmKiZGJkYoSSZudV8yfGlyR0YqRihGK0YsRihGLSwmRjFGL0YsRihGLSIiJQ== int(int(exp(-2*Pi*I*(nu_1*tau_1+nu_2*tau_2))*G,nu_1=-infinity..infinity),nu_2=-infinity..infinity) assuming tau_1<0, tau_2<0; LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJkkndGF1XzF8aXJHRiciIiJJJ3RhdV8yfGlyR0YnRis= int(int(G^2,nu_1=-infinity..infinity),nu_2=-infinity..infinity); IiIi int(int((exp(-abs(tau_1)-abs(tau_2)))^2,tau_1=-infinity..infinity),tau_2=-infinity..infinity); IiIi openturns-1.9/validation/src/ValidCharlierKrawtchouk.mw000066400000000000000000001405351307543307100234750ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZLLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJk5vcm1ORidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSZtZnJhY0dGJDYoLUYjNiQtRiw2JVEibkYnRi9GMi1GNjYtUSIhRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjExMTExMTFlbUYnL0ZORl5wLUYjNiMtSSVtc3VwR0YkNiUtRiw2JVEiYUYnRi9GMi1GIzYjRmdvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYnEvJSliZXZlbGxlZEdGPUY1Rk9GZ24tRiw2JVEjZXFGJ0YvRjJGX28tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORl5yLUYsNiVRInhGJ0YvRjItRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRJXNxcnRGJy9GMEY9RjktSShtZmVuY2VkR0YkNiQtRiM2I0Zcb0Y5RmNyLUYsNiVRI1FuRidGL0YyLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRmVwRmNyRmZyLUZbczYkLUYjNiQtRiw2JVElc3Vic0YnRi9GMi1GW3M2JC1GIzYpRmdvRmJzRmdvLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGXXJGX3ItSSNtbkdGJDYkRl9xRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Zcb0Y5RjlGY3ItRiw2JVElUW5wMUYnRi9GMi1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRl1yRl9yLUZbczYkLUYjNiVGZ29GYHRGZXBGOUZjckZmckZqckZjckZfc0ZgdEZnb0ZjckZmci1GW3M2JC1GIzYkRmlzLUZbczYkLUYjNilGZ29GYnNGZ29GX3VGY3RGZnRGXG9GOUY5RmNyLUYsNiVRJVFubTFGJ0YvRjItRjY2LVEiO0YnRjlGO0ZpdEZARkJGREZGRkhGam5GTQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LywkKihJInhHNiIiIiIqJi1JKmZhY3RvcmlhbEclKnByb3RlY3RlZEc2I0kibkdGJkYnKUkiYUdGJkYtISIiI0YnIiIjSSNRbkdGJkYnRjAsKCooRi9GJyomLUYqNiMsJkYtRidGJ0YnRicpRi9GOUYwRjFJJVFucDFHRiZGJ0YnKigsJkYtRidGL0YnRidGKEYxRjNGJ0YwKihGLUYnKiYtRio2IywmRi1GJ0YwRidGJylGL0ZCRjBGMUklUW5tMUdGJkYnRic= Qyw+SSVyZWMyRzYiLUkoY29sbGVjdEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkLUkpc2ltcGxpZnlHRiU2JC1JJnNvbHZlR0YlNiRJI2VxR0YlSSVRbnAxR0YlSSlzeW1ib2xpY0dGJTckSSNRbkdGJUkieEdGJSEiIi1GLTYkLUkmY29lZmZHRik2JS1JKGNvbnZlcnRHRik2JC1GPDYkRiRGNkkmR0FNTUFHRiVGNyIiIkY0RkQtRi02JC1GPDYlRj5GNyIiIUY0RkQtRi02JC1GPzYkLUY8NiRGJEklUW5tMUdGJUZDRjRGRC1JJmxpbWl0R0YlNiQtRi02JC1GPzYkRiRGQ0Y0L0kibkdGJUZJRkQ= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJkkiYUc2IiMhIiIiIiMsJkkibkdGJSIiIkYrRitGJkYn KihJImFHNiIjISIiIiIjLCZJIm5HRiQiIiJGI0YqRiosJkYpRipGKkYqRiU= LCQqJkkibkc2IiMiIiIiIiMsJkYkRidGJ0YnIyEiIkYoRis= KiYsJiomSSJ4RzYiIiIiSSNRbkdGJkYnISIiKiZGKEYnSSJhR0YmRidGJ0YnRisjRikiIiM= QygtSSdhc3N1bWVHNiI2K0kiTkdGJUkoaW50ZWdlckclKnByb3RlY3RlZEctSSI+R0YpNiRGJyIiIUkibkdGJUYoLUYrNiRGLkYtLUYrNiRGJ0YuLUYrNiRJInBHRiVGLTJGNSIiIiEiIj5JJk5vcm1OR0YlKiYtSSIqR0YpNiQqJilGOEYuRjctSSpmYWN0b3JpYWxHRik2I0YuRjcqKEZARjgtRkI2I0YnRjgtRkI2IywmRidGN0YuRjhGN0Y3KSomLCZGN0Y3RjVGOEY3RjVGOEYuRjdGOD5JI2VxR0YlLywkKihJInhHRiVGNy1JJXNxcnRHNiRGKUkoX3N5c2xpYkdGJTYjRjpGN0kjUW5HRiVGN0Y4LCgqKkY1RjdGSUY3LUZUNiMtSSVzdWJzR0YpNiQvRi4sJkYuRjdGN0Y3RjpGN0klUW5wMUdGJUY3RjcqKCwmKiZGNUY3RklGN0Y3KiZGLkY3RkxGN0Y3RjdGU0Y3RlhGN0Y4Ki5GLkY3RjVGN0ZMRjcsKEYnRjdGN0Y3Ri5GOEY3LUZUNiMtRmhuNiQvRi4sJkYuRjdGOEY3RjpGN0klUW5tMUdGJUY3RjdGNw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LywkKihJInhHNiIiIiIqKi1JKmZhY3RvcmlhbEclKnByb3RlY3RlZEc2I0kjbnxpckdGJkYnLUYqNiNJI058aXJHRiYhIiItRio2IywmRjBGJ0YtRjFGJykqJiwmRidGJ0kjcHxpckdGJkYxRidGOEYxRi1GJyNGJyIiI0kjUW5HRiZGJ0YxLCgqKkY4RidGNEYnKiotRio2IywmRi1GJ0YnRidGJ0YuRjEtRio2IywoRjBGJ0YtRjFGMUYnRicpRjZGQUYnRjlJJVFucDFHRiZGJ0YnKigsJiomRjhGJ0Y0RidGJyomRi1GJ0Y3RidGJ0YnRihGOUY7RidGMSouRi1GJ0Y4RidGN0YnLChGMEYnRi1GMUYnRidGJyoqLUYqNiMsJkYtRidGMUYnRidGLkYxLUYqNiNGTEYnKUY2RlBGJ0Y5SSVRbm0xR0YmRidGJw== Qyw+SSVyZWMyRzYiLUkoY29sbGVjdEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYkLUkpc2ltcGxpZnlHRig2Iy1JJnNvbHZlR0YoNiRJI2VxR0YlSSVRbnAxR0YlNyVJJVFubTFHRiVJI1FuR0YlSSJ4R0YlISIiLUYtNiQtSSZjb2VmZkdGKTYlLUkoY29udmVydEdGKTYkLUY8NiRGJEY2SSZHQU1NQUdGKEY3IiIiSSlzeW1ib2xpY0dGJUZELUYtNiQtRjw2JUY+RjciIiFGRUZELUYtNiQtRj82JC1GPDYkRiRGNUZDRkVGRC1JJmxpbWl0R0YoNiQtRi02JC1GPzYkRiRGQ0ZFL0kibkdGJUZKRkQ= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKiwmSSNufGlyRzYiIiIiRidGJyMhIiIiIiMsJkkjTnxpckdGJkYnRiVGKUYoSSNwfGlyR0YmRigsJkYnRidGLUYpRihGKQ== KiwsJkkjbnxpckc2IiIiIkYmRiYjISIiIiIjLCZJI058aXJHRiVGJkYkRihGJywoKiZJI3B8aXJHRiVGJkYrRiZGJiomRi5GJkYkRiYhIiNGJEYmRiZGLkYnLCZGJkYmRi5GKEYn LCQqLCwmSSNufGlyRzYiIiIiRidGJyMhIiIiIiMsJkkjTnxpckdGJkYnRiVGKUYoRiUjRidGKiwoRixGJ0YlRilGJ0YnIyIiJEYqSSNwfGlyR0YmRidGKQ== KiosJiooSSNRbkc2IiIiIkkjcHxpckdGJkYnSSNOfGlyR0YmRidGJyomSSJ4R0YmRidGJUYnISIiRidGKSNGLCIiI0YoRi0sJkYnRidGKEYsRi0= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= JSFH openturns-1.9/validation/src/ValidChebychevFactory.mw000066400000000000000000000664301307543307100231320ustar00rootroot00000000000000 restart: assume(n,integer,n>0): alpha_:=-1/2: beta_:=-1/2: fact:=(1/2 * sqrt((alpha_ + beta_ + 3) / ((alpha_ + 1) * (beta_ + 1)))); recurrenceCoefficients[0] = (alpha_ + beta_ + 2) * fact; nAlphaP1:=(n + alpha_ + 1); nBetaP1:=(n + beta_ + 1); twoNAlphaBetaP2:=(nAlphaP1 + nBetaP1); factor1:=((twoNAlphaBetaP2 + 1) / ((n + 1) * nAlphaP1 * nBetaP1 * (nAlphaP1 + beta_))); factor2:=(1/2 * sqrt((twoNAlphaBetaP2 - 1) * factor1)); recurrenceCoefficients[0] = simplify(factor2 * twoNAlphaBetaP2); recurrenceCoefficients[2] = simplify(-twoNAlphaBetaP2 / (twoNAlphaBetaP2 - 2) * sqrt((nAlphaP1 - 1) * (nBetaP1 - 1) * (nAlphaP1 + beta_ - 1) * n * factor1 / (twoNAlphaBetaP2 - 3))); KiQiIiMjIiIiRiM= LyZJN3JlY3VycmVuY2VDb2VmZmljaWVudHNHNiI2IyIiISokIiIjIyIiIkYp LCZJI258aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDMxODg2MTY5NzE1Mkc2IiIiIiNGKiIiI0Yq LCZJI258aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDMxODg2MTY5NzE1Mkc2IiIiIiNGKiIiI0Yq LCZJI258aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDMxODg2MTY5NzE1Mkc2IiIiIyIiIkYr KiosJkkjbnxpckc2Iy9JJ19sb2NhbEclKnByb3RlY3RlZEdJMl9uMTQwMzE4ODYxNjk3MTUyRzYiIiIjRisiIiJGLCwmRiRGLEYsRiwhIiIsJkYkRiwjRixGK0YsISIjRiRGLg== LCQqKCIiIyMiIiJGJCwmSSNufGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDAzMTg4NjE2OTcxNTJHNiJGJkYlRiYhIiIqJiwmRihGJEYkRiZGJiwmRihGJkYmRiZGL0YlRiU= LyZJN3JlY3VycmVuY2VDb2VmZmljaWVudHNHNiI2IyIiISIiIw== LyZJN3JlY3VycmVuY2VDb2VmZmljaWVudHNHNiI2IyIiIyEiIg== epsilon:=0:recurrenceCoefficients[2] = (1.5 * epsilon / (-1.0 + beta_) + beta_ * (3.0 - 3.125 * epsilon)) * sqrt(2.0 * (1.0 + beta_) / (beta_ * (-1.0 + beta_) * (2.0 + beta_))); LyZJN3JlY3VycmVuY2VDb2VmZmljaWVudHNHNiI2IyIiIyQhK2lOQDk5ISIq openturns-1.9/validation/src/ValidChi.mw000066400000000000000000001266231307543307100204060ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZNLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYlLUYsNiVRI251RicvRjBGPUY5LUY2Ni1RIj5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEiMEYnRjlGOUY1Rk9GZ25GZG8tRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GXHA2JFEjOS5GJ0Y5RjVGT0Znbi1GLDYlUSJ1RidGL0YyRl9wLUZccDYkUSg1LjAyNjk4RidGOUY1Rk8tRiw2JVEjY2ZGJ0YvRjJGX3AtRiw2JVEmZXZhbGZGJ0YvRjItRmBvNiQtRiM2JS1GLDYlUSRJbnRGJ0YvRjItRmBvNiQtRiM2Ky1JJm1mcmFjR0YkNigtRiM2KS1GLDYlUSRleHBGJ0Znb0Y5LUZgbzYkLUYjNictRiw2JVEiSUYnRi9GMi1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW29GZXBGW3MtRiw2JVEieEYnRi9GMkY5RltzLUklbXN1cEdGJDYlRl5zLUYjNiVGZG8tRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZqcy1GXHA2JFEiMUYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZecEZbc0Zhci1GYG82JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZpc0ZbdC1GXXI2KC1GYnM2JUZecy1GIzYjLUZccDYkUSIyRidGOUZfdEZcdS8lLmxpbmV0aGlja25lc3NHRl50LyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmV1LyUpYmV2ZWxsZWRHRj1GOS1GIzYkLUYsNiVRJkdBTU1BRidGZ29GOS1GYG82JC1GIzYjLUZdcjYoRmRvRlx1RmF1RmN1RmZ1Rmh1RjlGYXVGY3VGZnVGaHVGW3MtRmJzNiVGXnUtRiM2JUZcdEZmc0ZjdkZfdC1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRl5zLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRltwLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmlzRltvLUYsNiVRKWluZmluaXR5RidGL0YyRjktRiw2I1EhRidGOS1GNjYtUSI7RidGOUY7Rlx3RkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVEkY2YyRidGL0YyRl9wLUYsNiVRKEt1bW1lck1GJ0Znb0Y5LUZgbzYkLUYjNihGY3ZGaXYtRl1yNihGXHRGXHVGYXVGY3VGZnVGaHVGaXZGZXQtRl1yNigtRmJzNiVGZXBGXHVGX3RGXHVGYXVGY3VGZnVGaHVGOS1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmlzRlt0LUZdcjYoLUYjNitGaHJGW3NGZXBGW3MtRiw2JVElc3FydEYnRmdvRjktRmBvNiRGXHVGOUZbc0Zcdi1GYG82JC1GIzYjLUZdcjYoLUZgbzYkLUYjNiVGZG9GXnlGXHRGOUZcdUZhdUZjdUZmdUZodUY5Rmp1RmF1RmN1RmZ1Rmh1RltzRmF4LUZgbzYkLUYjNihGXnpGaXYtRl1yNigtRlxwNiRRIjNGJ0Y5Rlx1RmF1RmN1RmZ1Rmh1Rml2RmV0Rmp4RjlGW3hGT0ZnbkZPRl5xLUZgbzYkLUYjNiQtRiw2JVElc3Vic0YnRi9GMi1GYG82JC1GIzYrRmRvRl93LUZccDYkUSM5OUYnRjlGaXZGZXBGX3ctRlxwNiRRKTAuODQ2NjMyRidGOUZpdi1GYG82Ji1GIzYlRltxRml2Rl54RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGOUY5Rlt4 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder XiQkIiszazxtQyEjNyQiKypvb1A3IiEjOA== LCYkIis0azxtQyEjNyIiIiomXiMkIismZldpJXohIzlGJiIiIyNGJkYsRiY= NyReJCQiKzNrPG1DISM3JCIrKm9vUDciISM4XiQkIis0azxtQ0YmJCIrKG9vUDciRik= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYrLUYsNiVRJmV2YWxmRidGL0YyLUY2NiQtRiM2JC1GLDYlUSVzdWJzRidGL0YyLUY2NiQtRiM2KC1GLDYlUSNudUYnL0YwUSZmYWxzZUYnL0YzUSdub3JtYWxGJy1JI21vR0YkNi1RIj1GJ0ZNLyUmZmVuY2VHRkwvJSpzZXBhcmF0b3JHRkwvJSlzdHJldGNoeUdGTC8lKnN5bW1ldHJpY0dGTC8lKGxhcmdlb3BHRkwvJS5tb3ZhYmxlbGltaXRzR0ZMLyUnYWNjZW50R0ZMLyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGXW8tSSNtbkdGJDYkUSoxLjAwMDAwMDFGJ0ZNLUZQNi1RIixGJ0ZNRlMvRlZGMUZXRllGZW5GZ25GaW4vRlxvUSYwLjBlbUYnL0Zfb1EsMC4zMzMzMzMzZW1GJy1GLDYlUSNJbUYnRktGTS1GNjYkLUYjNiMtRiw2JVEjY2ZGJ0YvRjJGTUZNRk1GZG8tRiw2JVEidUYnRi9GMkZPLUZQNi1RKiZ1bWludXMwO0YnRk1GU0ZVRldGWUZlbkZnbkZpbi9GXG9RLDAuMjIyMjIyMmVtRicvRl9vRl1xLUZhbzYkUSI1RidGTS1GUDYtUSMuLkYnRk1GU0ZVRldGWUZlbkZnbkZpbkZccS9GX29GaW9GX3FGTQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Error, (in plot) unexpected option: .846632 = -5 .. 5 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEoY29udmVydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRKEt1bW1lck1GJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRictRjY2JC1GIzYpLUYsNiVRImFGJ0YvRjItSSNtb0dGJDYtUSIsRidGPy8lJmZlbmNlR0Y+LyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRj4vJSpzeW1tZXRyaWNHRj4vJShsYXJnZW9wR0Y+LyUubW92YWJsZWxpbWl0c0dGPi8lJ2FjY2VudEdGPi8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRImJGJ0YvRjJGSC1GLDYlUSJ1RidGL0YyLyUrZXhlY3V0YWJsZUdGPkY/Rj9GSC1GLDYlUSpoeXBlcmdlb21GJ0Y9Rj9GYG9GP0Y/RmBvRj8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqaHlwZXJnZW9tR0koX3N5c2xpYkc2IjYlNyNJImFHRiU3I0kiYkdGJUkidUdGJQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEpc2ltcGxpZnlGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2KC1GLDYlUShLdW1tZXJNRicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUY2NiQtRiM2Ki1JI21uR0YkNiRRIjlGJ0Y/LUkjbW9HRiQ2LVEiLEYnRj8vJSZmZW5jZUdGPi8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0Y+LyUqc3ltbWV0cmljR0Y+LyUobGFyZ2VvcEdGPi8lLm1vdmFibGVsaW1pdHNHRj4vJSdhY2NlbnRHRj4vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1JJm1mcmFjR0YkNigtRkY2JFEiM0YnRj8tRiM2JS1GRjYkUSIyRidGP0YvRjIvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRltwLyUpYmV2ZWxsZWRHRj5GSS1GSjYtUSomdW1pbnVzMDtGJ0Y/Rk0vRlBGPkZRRlNGVUZXRlkvRmZuUSwwLjIyMjIyMjJlbUYnL0ZpbkZlcC1GLDYlUSJ4RidGL0YyLyUrZXhlY3V0YWJsZUdGPkY/Rj9GSS1GLDYlUSpoeXBlcmdlb21GJ0Y9Rj9GanBGP0Y/RmpwRj8= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkoS3VtbWVyTUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYlIiIqIyIiJCIiIywkSSJ4R0YnISIi QyYtJkkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMiI102Iy1JKEt1bW1lck1HNiRGJkkoX3N5c2xpYkc2IjYlJCIjWCEiIiQiIiZGMiQhNVJxdlkhb3NFTkUiISM9IiIiLUYkNiMtRis2JUY0JCIjOkYyRjVGOA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCJTdyZwazg9YkxUJ3kyKjR2TDohcHgxdXlEPG1DISNf JCJTZFlyLWMuJz5QKmUmKWVYazk6Yko/Iyk9Mz9odyEjYg== LUkkbG9nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMqJi1JJkdBTU1BR0YkNiMkIiNdIiIhIiIiLUYrNiMkIiQmXCEiIkY1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCIrRDZZWz4hIio= JSFH openturns-1.9/validation/src/ValidChiSquare.mws000066400000000000000000000103661307543307100217460ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 950 "restart:\nwith(Stat istics):\nassume(u>0,alpha>0):\nchisquare_:=RandomVariable(ChiSquare(n u)):\npdf:=subs(u=x,PDF(chisquare_,u));\nddf:=factor(diff(pdf,x));\ncd f:=subs(u=x,CDF(chisquare_,u));\ncf:=CharacteristicFunction(chisquare_ ,x);\nmu_:=Mean(chisquare_);\nevalf[25](mu_);\nvar_:=Variance(chisquar e_);\nevalf[25](sqrt(var_));\nevalf[25](var_);\nskew_:=simplify((Skewn ess(chisquare_)));\nevalf[25](skew_);\nkurt_:=simplify((Kurtosis(chisq uare_)));\nevalf[25](kurt_);\n#qdf:=Quantile(chisquare_,p);\nqdf:=proc (q,valnum)\n fsolve(subs(valnum,cdf)=q,x)\nend:\npdfgr:=[diff(pdf,nu) ];\ncdfgr:=[diff(cdf,nu)];\nvalnum:=nu=1.5;\nevalf(subs(valnum,x=1,ddf ));\nevalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf (subs(valnum,x=1,cf));\nevalf(subs(valnum,x=1,map(_x->_x,pdfgr)));\nev alf(subs(valnum,x=1,cdfgr));\nevalf(qdf(0.95,valnum));\nevalf(subs(val num,mu_));\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,skew_)) ;\nevalf(subs(valnum,kurt_));\nevalf(subs(valnum,var_));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$pdfG**)\"\"#,$*&F'!\"\"%#nuG\"\"\"F,F*-%&GAMM AG6#F(F*)%\"xG,&*&F'F*F+F,F,F,F*F,-%$expG6#,$*&F'F*F1F,F*F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG,$*&#\"\"\"\"\"#F(*.)%\"xG,&*&F)!\"\" %#nuGF(F(F(F/F(-%$expG6#,$*&F)F/F,F(F/F(,(F)F/F0F(F,F/F()F),$*&F)F/F0F (F(F/-%&GAMMAG6#F8F/F,F/F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdf G,&\"\"\"F&*&-%&GAMMAG6$,$*&\"\"#!\"\"%#nuGF&F&,$*&F-F.%\"xGF&F&F&-F)6 #F+F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG),&\"\"\"F'*&^#!\"#F' %\"xGF'F',$*&\"\"#!\"\"%#nuGF'F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $mu_G%#nuG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%#nuG" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%%var_G,$*&\"\"#\"\"\"%#nuGF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\":*o,)[]4tBc8UT\"!#C\"\"\"%#nuG#F(\"\"#F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\"\"#\"\"!\"\"\"%#nuGF(F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G,$*(\"\"#\"\"\"%#nuG#!\"\"F'F '#F(F'F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\":yLg(4!>YZ7F%GG!#C \"\"\"%#nuG#!\"\"\"\"#F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G, $*(\"\"$\"\"\"%#nuG!\"\",&\"\"%F(F)F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*($\"\"$\"\"!\"\"\"%#nuG!\"\",&$\"\"%F'F(F)F(F(F(" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7#,(*&#\"\"\"\"\"#F)*,)F*,$*& F*!\"\"%#nuGF)F)F/-%&GAMMAG6#F-F/)%\"xG,&*&F*F/F0F)F)F)F/F)-%$expG6#,$ *&F*F/F5F)F/F)-%#lnG6#F*F)F)F/*&#F)F*F)*,F,F/F1F/F4F)F8F)-%$PsiGF3F)F) F/*&#F)F*F)*,F,F/F1F/F4F)-F>6#F5F)F8F)F)F)" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7#,&*&,&*&#\"\"\"\"\"#F+*&-%&GAMMAG6$,$*&F,!\" \"%#nuGF+F+,$*&F,F3%\"xGF+F+F+-%#lnG6#F5F+F+F+*&F*F+-%(MeijerGG6%7$7\" 7$F+F+7$7%\"\"!FDF1F@F5F+F+F+-F/6#F1F3F3*&F*F+*(F.F+FEF3-%$PsiGFFF+F+F +" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'valnumG/%#nuG$\"#:!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$!+N:G2A!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Z?/VH!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+(4r $z_!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$\"+%3_#*o$!#5$\"+D$zo.%F& " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#$\"*lk)yd!#5" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7#$!+%HUr\"H!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"+%G&>!)\\!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#:!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+230K " 0 "" {MPLTEXT 1 0 33 "combine(factor(pdfgr[1]/pdf),ln);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&#\"\"\"\"\"#F&-%$PsiG6#,$*&F'!\" \"%#nuGF&F&F&F--%#lnG6#,$*(F'F-F'#F&F'%\"xGF4F&F&" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidChiSquare.txt000066400000000000000000000133441307543307100217560ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u>0,alpha>0): > chisquare_:=RandomVariable(ChiSquare(nu)): > pdf:=subs(u=x,PDF(chisquare_,u)); > ddf:=factor(diff(pdf,x)); > cdf:=subs(u=x,CDF(chisquare_,u)); > cf:=CharacteristicFunction(chisquare_,x); > mu_:=Mean(chisquare_); > evalf[25](mu_); > var_:=Variance(chisquare_); > evalf[25](sqrt(var_)); > evalf[25](var_); > skew_:=simplify((Skewness(chisquare_))); > evalf[25](skew_); > kurt_:=simplify((Kurtosis(chisquare_))); > evalf[25](kurt_); > #qdf:=Quantile(chisquare_,p); > qdf:=proc(q,valnum) > fsolve(subs(valnum,cdf)=q,x) > end: > pdfgr:=[diff(pdf,nu)]; > cdfgr:=[diff(cdf,nu)]; > valnum:=nu=1.5; > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(qdf(0.95,valnum)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); / nu \ |---- - 1| \ 2 / x exp(- x/2) pdf := ---------------------- / nu \ |----| \ 2 / nu 2 GAMMA(----) 2 / nu \ |---- - 1| \ 2 / x exp(- x/2) (-2 + nu - x) ddf := 1/2 ------------------------------------ / nu \ |----| \ 2 / nu 2 GAMMA(----) x 2 nu GAMMA(----, x/2) 2 cdf := 1 - ---------------- nu GAMMA(----) 2 / nu \ |- ----| \ 2 / cf := (1 - 2 I x) mu_ := nu nu var_ := 2 nu 1/2 1.414213562373095048801689 nu 2. nu 1/2 2 2 skew_ := ------ 1/2 nu 2.828427124746190097603378 -------------------------- 1/2 nu 3 (4 + nu) kurt_ := ---------- nu 3. (4. + nu) ------------ nu / nu \ |---- - 1| \ 2 / x exp(- x/2) ln(2) pdfgr := [-1/2 ---------------------------- / nu \ |----| \ 2 / nu 2 GAMMA(----) 2 / nu \ |---- - 1| \ 2 / nu x exp(- x/2) Psi(----) 2 - 1/2 -------------------------------- / nu \ |----| \ 2 / nu 2 GAMMA(----) 2 / nu \ |---- - 1| \ 2 / x ln(x) exp(- x/2) + 1/2 ----------------------------] / nu \ |----| \ 2 / nu 2 GAMMA(----) 2 / nu cdfgr := [- |1/2 GAMMA(----, x/2) ln(x/2) \ 2 nu \ / + 1/2 MeijerG([[], [1, 1]], [[0, 0, ----], []], x/2)| / 2 / / nu nu GAMMA(----, x/2) Psi(----) nu 2 2 GAMMA(----) + 1/2 --------------------------] 2 nu GAMMA(----) 2 valnum := nu = 1.5 -0.2207281535 0.2943042047 0.5279371097 0.3689252084 + 0.4036879325 I [0.0577886465] [-0.2917142294] 4.980195284 1.5 1.732050807 2.309401076 11.00000000 3.0 > combine(factor(pdfgr[1]/pdf),ln); 1/2 1/2 nu 2 x -1/2 Psi(----) + ln(---------) 2 2 > openturns-1.9/validation/src/ValidClaytonCopula.mws000066400000000000000000000301121307543307100226260ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annota tion Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "H elp Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized" -1 22 "Time s" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic Small204" -1 201 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Ma ple Input Placeholder" -1 202 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "Code" -1 203 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Inert Output" -1 204 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 205 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 "Tim es" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 206 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 207 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 208 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Courier " 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 72 "F:=exp(-log(u1^(-theta)/(u1*u2)^(theta/(theta+1))+1-u 1^(-theta))/theta);" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I$expG6$%*protec tedGI(_syslibG6\"6#,$*&-I#lnGF$6#,(*&)I#u1GF',$I&thetaGF'!\"\"\"\"\")* &F1F5I#u2GF'F5*&F3F5,&F3F5F5F5F4F4F5F5F5F0F4F5F3F4F4" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "simplify(F);" }}{PARA 11 "" 1 "" {XPPMATH 20 "),(*&)I#u1G6\",$I&thetaGF'!\"\"\"\"\")*&F&F+I#u2GF'F+,$*& F)F+,&F)F+F+F+F*F*F+F+F+F+F%F*,$*$F)F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "CDF_clayton:=(u^(-theta)+v^(-theta)-1)^(-1/theta);" } }{PARA 11 "" 1 "" {XPPMATH 20 "),()I\"uG6\",$I&thetaGF&!\"\"\"\"\")I\" vGF&F'F*F)F*,$*$F(F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "P DF_clayton:=factor(diff(diff(CDF_clayton,u),v));\n" }{MPLTEXT 1 0 34 " du:=factor(diff(PDF_clayton, u));\n" }{MPLTEXT 1 0 35 "dv:=factor(diff (PDF_clayton, v));\n#" }{MPLTEXT 1 0 87 "with(codegen,optimize,makepro c,cost,prep2trans):\nwith(CodeGeneration):\nC(du,optimize);\n" } {MPLTEXT 1 0 15 "C(dv,optimize);" }{MPLTEXT 1 0 2 "\n#" }{MPLTEXT 1 0 15 "optimize(du);\n#" }{MPLTEXT 1 0 13 "optimize(dv);" }}{PARA 11 "" 1 "" {XPPMATH 20 "*0),()I\"uG6\",$I&thetaGF'!\"\"\"\"\")I\"vGF'F(F+F*F+ ,$*$F)F*F*F+F,F+F%F+,&F)F+F+F+F+F-F*F$!\"#F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "*2),()I\"uG6\",$I&thetaGF'!\"\"\"\"\")I\"vGF'F(F+F*F+,$*$ F)F*F*F+F,F+F%F+,&F)F+F+F+F+,,*&F%F+F)F+F+*&F)F+F,F+F*F)F+F,F*F+F+F+F& !\"#F$!\"$F-F*" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*2),()I\"uG6\",$I&th etaGF(!\"\"\"\"\")I\"vGF(F)F,F+F,,$*$F*F+F+F,F-F,F&F,,&F*F,F,F,F,,,*&F &F,F*F,F,*&F*F,F-F,F+F*F+F&F,F+F,F,F.!\"#F%!\"$F'F+F+" }}{PARA 6 "" 1 "" {TEXT 209 20 "t1 = pow(u, -theta);" }{TEXT 209 21 "\nt2 = pow(v, -t heta);" }{TEXT 209 22 "\nt3 = t1 + t2 - 0.1e1;" }{TEXT 209 30 "\nt5 = \+ pow(t3, -0.1e1 / theta);" }{TEXT 209 13 "\nt13 = u * u;" }{TEXT 209 15 "\nt16 = t3 * t3;" }{TEXT 209 108 "\nt22 = t5 * t2 * t1 * (theta + \+ 0.1e1) * (t1 * theta - theta * t2 + theta - t2 + 0.1e1) / t13 / t16 / \+ t3 / v;" }{TEXT 209 21 "\nt1 = pow(u, -theta);" }{TEXT 209 21 "\nt2 = \+ pow(v, -theta);" }{TEXT 209 22 "\nt3 = t1 + t2 - 0.1e1;" }{TEXT 209 30 "\nt5 = pow(t3, -0.1e1 / theta);" }{TEXT 209 13 "\nt13 = v * v;" } {TEXT 209 15 "\nt16 = t3 * t3;" }{TEXT 209 109 "\nt23 = -t5 * t2 * t1 \+ * (theta + 0.1e1) * (t1 * theta - theta * t2 - theta + t1 - 0.1e1) / t 13 / t16 / t3 / u;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "facto r(diff(PDF_clayton, theta));" }{MPLTEXT 1 0 44 "optimize(factor(diff(P DF_clayton, theta)));\n" }{MPLTEXT 1 0 76 "factor(diff(PDF_clayton, th eta));optimize(factor(diff(CDF_clayton, theta)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "*2),()I\"uG6\",$I&thetaGF'!\"\"\"\"\")I\"vGF'F(F+F+F*,$*$ F)F*F*F+F,F+F%F+,P*&-I#lnG6$%*protectedGI(_syslibGF'6#F-F+)F)\"\"#F+F+ *&-F36#F&F+F8F+F+*(F)F+F,F+F2F+F+*(F)F+F%F+F;F+F+*(-F36#F$F+F%F+F)F+F+ *(F@F+F,F+F)F+F+**F9F+F8F+F%F+F;F+F+**F9F+F8F+F,F+F2F+F+*(F2F+)F)\"\"$ F+F%F+F**(F2F+FFF+F,F+F+*(F2F+F8F+F%F+F**(F;F+FFF+F,F+F**(F;F+F8F+F,F+ F*F@F**$F8F+F**&F@F+F%F+F+*&F@F+F,F+F+*&F@F+F)F+F**&F2F+FFF+F+*&F;F+FF F+F+*&F8F+F%F+F+*&F8F+F,F+F+*(F;F+FFF+F%F+F+F+F8F*)F$FGF*F-F*F&F*" }} {PARA 11 "" 1 "" {XPPMATH 20 "67/I#t1G6\")I\"uGF%,$I&thetaGF%!\"\"/I#t 2GF%)I\"vGF%F(/I#t3GF%,(F$\"\"\"F,F2F2F*/I#t5GF%)F0,$*$F)F*F*/I#t7GF%- I#lnG6$%*protectedGI(_syslibGF%6#F./I#t8GF%*$)F)\"\"#F2/I#t9GF%*&F9F2F AF2/I$t10GF%-F;6#F'/I$t11GF%*&FIF2FAF2/I$t16GF%-F;6#F0/I$t17GF%*&FPF2F $F2/I$t19GF%*&FPF2F,F2/I$t21GF%*&FAF2F$F2/I$t24GF%*&FAF2F,F2/I$t27GF%* &FAF2F)F2/I$t28GF%*&F9F2FjnF2/I$t32GF%,8FFF2FMF2*(F)F2F,F2F9F2F2*(F)F2 F$F2FIF2F2*&FTF2F)F2F2*&FWF2F)F2F2*(FDF2FZF2FIF2F2*(FDF2FgnF2F9F2F2*&F ]oF2F$F2F**&F]oF2F,F2F2*&FFF2F$F2F*/I$t33GF%*&FIF2FjnF2/I$t38GF%,:*&F \\pF2F,F2F**&FMF2F,F2F*FPF*FAF*FTF2FWF2*&FPF2F)F2F*F]oF2F\\pF2FZF2FgnF 2*&F\\pF2F$F2F2/I$t43GF%*$)F0FDF2/I$t51GF%*4F4F2F,F2F$F2,&F`oF2F_pF2F2 FAF*FfpF*F0F*F.F*F'F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "*2),()I\"uG6\", $I&thetaGF'!\"\"\"\"\")I\"vGF'F(F+F+F*,$*$F)F*F*F+F,F+F%F+,P*&-I#lnG6$ %*protectedGI(_syslibGF'6#F-F+)F)\"\"#F+F+*&-F36#F&F+F8F+F+*(F)F+F,F+F 2F+F+*(F)F+F%F+F;F+F+*(-F36#F$F+F%F+F)F+F+*(F@F+F,F+F)F+F+**F9F+F8F+F% F+F;F+F+**F9F+F8F+F,F+F2F+F+*(F2F+)F)\"\"$F+F%F+F**(F2F+FFF+F,F+F+*(F2 F+F8F+F%F+F**(F;F+FFF+F,F+F**(F;F+F8F+F,F+F*F@F**$F8F+F**&F@F+F%F+F+*& F@F+F,F+F+*&F@F+F)F+F**&F2F+FFF+F+*&F;F+FFF+F+*&F8F+F%F+F+*&F8F+F,F+F+ *(F;F+FFF+F%F+F+F+F8F*)F$FGF*F-F*F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6+/I#t1G6\")I\"uGF%,$I&thetaGF%!\"\"/I#t2GF%)I\"vGF%F(/I#t3GF%,(F$\" \"\"F,F2F2F*/I#t5GF%)F0,$*$F)F*F*/I#t6GF%-I#lnG6$%*protectedGI(_syslib GF%6#F0/I$t10GF%-F;6#F'/I$t13GF%-F;6#F./I$t17GF%*$)F)\"\"#F2/I$t21GF%* *F4F2,,*&F9F2F$F2F2*&F9F2F,F2F2F9F**(F)F2F$F2FAF2F2*(F)F2F,F2FEF2F2F2F IF*F0F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "theta:=2.5;evalf (Int(Int((u-0.5)*(v-0.5)*PDF_clayton,u=0..1),v=0..1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&thetaG$\"#D!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+f)*o$='!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "eva lf(subs(theta=2.5,Int(Int((u-1/2)*(v-1/2)*PDF_clayton,u=0..1),v=0..1)) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+f)*o$='!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "subs(u=0.2,v=0.2,PDF_clayton);\n" } {MPLTEXT 1 0 30 "subs(u=0.2,v=0.2,CDF_clayton);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+K2!zQ$!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+c N<@:!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidClaytonCopula.txt000066400000000000000000000125361307543307100226510ustar00rootroot00000000000000> restart: > F:=exp(-log(u1^(-theta)/(u1*u2)^(theta/(theta+1))+1-u1^(-theta))/theta > ); (-theta) u1 (-theta) ln(------------------ + 1 - u1 ) / theta \ |---------| \theta + 1/ (u1 u2) F := exp(- ---------------------------------------) theta > simplify(F); / 1 \ |- -----| \ theta/ / / theta \ \ | |- ---------| | | (-theta) \ theta + 1/ (-theta)| \u1 (u1 u2) + 1 - u1 / > CDF_clayton:=(u^(-theta)+v^(-theta)-1)^(-1/theta); / 1 \ |- -----| \ theta/ (-theta) (-theta) CDF_clayton := (u + v - 1) > PDF_clayton:=factor(diff(diff(CDF_clayton,u),v)); > du:=factor(diff(PDF_clayton, u)); > dv:=factor(diff(PDF_clayton, v)); > with(codegen,optimize,makeproc,cost,prep2trans): > optimize(du); > optimize(dv); / 1 \ |- -----| \ theta/ (-theta) (-theta) (-theta) PDF_clayton := (u + v - 1) v (-theta) / (-theta) (-theta) 2 u (theta + 1) / (v (u + v - 1) u) / / 1 \ |- -----| \ theta/ (-theta) (-theta) (-theta) (-theta) du := (u + v - 1) v u (theta + 1) (-theta) (-theta) (-theta) (u theta - theta v + theta - v + 1) / 2 (-theta) (-theta) 3 / (u (u + v - 1) v) / / 1 \ |- -----| \ theta/ (-theta) (-theta) (-theta) (-theta) dv := - (u + v - 1) v u (theta + 1) (-theta) (-theta) (-theta) (u theta - theta v - theta + u - 1) / 2 (-theta) (-theta) 3 / (v (u + v - 1) u) / / 1 \ |- -----| (-theta) (-theta) \ theta/ t1 = u , t2 = v , t3 = t1 + t2 - 1, t5 = t3 , 2 2 t13 = u , t16 = t3 , t22 = t5 t2 t1 (theta + 1) (t1 theta - theta t2 + theta - t2 + 1) ----------------------------------------------------------- t13 t16 t3 v / 1 \ |- -----| (-theta) (-theta) \ theta/ t1 = u , t2 = v , t3 = t1 + t2 - 1, t5 = t3 , 2 2 t13 = v , t16 = t3 , t23 = t5 t2 t1 (theta + 1) (t1 theta - theta t2 - theta + t1 - 1) - ----------------------------------------------------------- t13 t16 t3 u > optimize(factor(diff(PDF_clayton, theta))); / 1 \ |- -----| (-theta) (-theta) \ theta/ t1 = u , t2 = v , t3 = t1 + t2 - 1, t5 = t3 , 2 t7 = ln(v), t8 = theta , t9 = t8 theta, t10 = t7 t9, t13 = ln(u), t15 = t7 t8, t16 = t13 t8, t19 = ln(t3), t20 = t19 t1, t21 = t19 t2, t22 = t8 t1, t25 = t8 t2, t29 = -t10 t1 + theta t1 t13 + t15 + t16 + theta t2 t7 - t8 + t20 + t21 + 2 t22 t13 + 2 t25 t7 + t20 theta, t33 = t13 t9, t38 = t21 theta + t10 t2 - t15 t1 + t33 t1 - t33 t2 - t16 t2 2 - t19 - t19 theta + t10 + t33 + t22 + t25, t43 = t3 , t5 t2 t1 (t29 + t38) t51 = -------------------- t8 t43 t3 v u > theta:=2.5;evalf(Int(Int((u-0.5)*(v-0.5)*PDF_clayton,u=0..1),v=0..1)); theta := 2.5 0.06183689859 > evalf(subs(theta=2.5,Int(Int((u-1/2)*(v-1/2)*PDF_clayton,u=0..1),v=0.. > 1))); 0.06183689859 > subs(u=0.2,v=0.2,PDF_clayton); > subs(u=0.2,v=0.2,CDF_clayton); 3.387900732 0.1521173556 > openturns-1.9/validation/src/ValidConditionalArchimedean.mws000066400000000000000000000063251307543307100244460ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 548 "restart:\nprint(\"C layton\");\nC:=(u^(-theta)+v^(-theta)-1)^(-1/theta);\nconditionalCDF:= simplify(diff(C,u));\nconditionalQuantile:=simplify(solve(conditionalC DF=q,v),symbolic);\nprint(\"Frank\");\nC:=-log(1+(exp(-theta*u)-1)*(ex p(-theta*v)-1)/(exp(-theta)-1))/theta;\nconditionalCDF:=simplify(diff( C,u));\nconditionalQuantile:=combine(simplify(solve(conditionalCDF=q,v ),symbolic),ln);\n# Gumbel\nprint(\"Gumbel\");\nC:=exp(-((-log(u))^the ta+(-log(v))^theta)^(1/theta));\nconditionalCDF:=simplify(diff(C,u)); \nconditionalQuantile:=simplify(solve(conditionalCDF=q,v));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q(Clayton6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG),()%\"uG,$%&thetaG!\"\"\"\"\")%\"vGF)F,F,F+,$*&F,F,F*F+F+ " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/conditionalCDFG*&),()%\"uG,$%&t hetaG!\"\"\"\"\")%\"vGF*F-F-F,,$*&,&F+F-F-F-F-F+F,F,F-)F),&F+F,F-F,F- " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%4conditionalQuantileG),(*&)%\"uG ,$%&thetaG!\"\"\"\"\")%\"qG,$*&F+F-,&F+F-F-F-F,F,F-F-F(F,F-F-,$*&F-F-F +F,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q&Frank6\"" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"CG,$*&-%#lnG6#,&\"\"\"F+*(,&-%$expG6#,$*&%&thetaG F+%\"uGF+!\"\"F+F+F5F+,&-F/6#,$*&F3F+%\"vGF+F5F+F+F5F+,&-F/6#,$F3F5F+F +F5F5F+F+F3F5F5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/conditionalCDFG* (,&-%$expG6#,$*&%&thetaG\"\"\"%\"vGF-!\"\"F-F-F/F--F(6#,$*&F,F-%\"uGF- F/F-,*-F(6#,$F,F/F--F(6#,&F3F/F+F/F-F0F/F'F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%4conditionalQuantileG*&,(-%#lnG6#,(-%$expG6#,$*&%&the taG\"\"\",&%\"uGF1F1!\"\"F1F4F4%\"qGF4*&F5F1F+F1F1F4-F(6#,(-F,6#,$*&F0 F1F3F1F4F4*&F5F1F:F1F1F5F4F1F0F1F1F0F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q'Gumbel6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG-%$expG6#,$ ),&),$-%#lnG6#%\"uG!\"\"%&thetaG\"\"\"),$-F.6#%\"vGF1F2F3*&F3F3F2F1F1 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%/conditionalCDFG**),&),$-%#lnG6# %\"uG!\"\"%&thetaG\"\"\"),$-F+6#%\"vGF.F/F0,$*&,&F/F0F0F.F0F/F.F.F0)F) F8F0F-F.-%$expG6#,$)F'*&F0F0F/F.F.F0" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%4conditionalQuantileG-%$expG6#,$),&-F&6#,$*(,(*&-%)LambertWG6#*&,& %&thetaG\"\"\"F7!\"\"F8)*(),$-%#lnG6#%\"uGF8F5F7%\"qGF8F@F8*&F7F7F5F8F 7F7F6F7F7F1F8-F>6#F:F8F7F6F7F5F8F8F7)F " 0 "" {MPLTEXT 1 0 54 "qv:=evalf(subs(u=0.3,v=0.6,theta=2. 5,conditionalCDF));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#qvG$\"+')>Bf ))!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "evalf(subs(q=qv,u= 0.3,theta=2.5,conditionalQuantile));" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$\"+w******f!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "Lamber tW(0.4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+2vnrH!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 8 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidConditionalArchimedean.txt000066400000000000000000000121031307543307100244460ustar00rootroot00000000000000> restart: > print("Clayton"); > C:=(u^(-theta)+v^(-theta)-1)^(-1/theta); > conditionalCDF:=simplify(diff(C,u)); > conditionalQuantile:=simplify(solve(conditionalCDF=q,v),symbolic); > print("Frank"); > C:=-log(1+(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1))/theta; > conditionalCDF:=simplify(diff(C,u)); > conditionalQuantile:=combine(simplify(solve(conditionalCDF=q,v),symbol > ic),ln); > # Gumbel > print("Gumbel"); > C:=exp(-((-log(u))^theta+(-log(v))^theta)^(1/theta)); > conditionalCDF:=simplify(diff(C,u)); > conditionalQuantile:=simplify(solve(conditionalCDF=q,v)); "Clayton" / 1 \ |- -----| \ theta/ (-theta) (-theta) C := (u + v - 1) conditionalCDF := / theta + 1\ |- ---------| \ theta / (-theta) (-theta) (-theta - 1) (u + v - 1) u conditionalQuantile := / 1 \ |- -----| \ theta/ / / theta \ \ | |- ---------| | | (-theta) \ theta + 1/ (-theta) | \u q - u + 1/ "Frank" (exp(-theta u) - 1) (exp(-theta v) - 1) ln(1 + ---------------------------------------) exp(-theta) - 1 C := - ----------------------------------------------- theta conditionalCDF := (exp(-theta v) - 1) exp(-theta u)/(exp(-theta) + exp(-theta u - theta v) - exp(-theta u) - exp(-theta v)) conditionalQuantile := ( -ln(-exp(-theta (u - 1)) - q + q exp(-theta (u - 1))) + ln(-exp(-theta u) + q exp(-theta u) - q) + theta)/theta "Gumbel" / 1 \ |-----| \theta/ theta theta C := exp(-((-ln(u)) + (-ln(v)) ) ) / theta - 1\ |- ---------| \ theta / theta theta conditionalCDF := ((-ln(u)) + (-ln(v)) ) (theta - 1) (-ln(u)) / 1 \ |-----| \theta/ theta theta exp(-((-ln(u)) + (-ln(v)) ) )/u / / | | | | | | | | | | | | conditionalQuantile := exp(-|exp(- | \ \ / 1 \ |---------| \theta - 1/ / (theta - 1)\ |(-ln(u)) | |-------------------| \ q u / LambertW(--------------------------------) theta theta - 1 / 1 \ |---------| \theta - 1/ / (theta - 1)\ |(-ln(u)) | |-------------------| \ q u / - LambertW(--------------------------------) theta - 1 \ | | | | (theta - 1) | (-ln(u)) | - ln(-------------------)| theta/(theta - 1)) q u / \/ 1 \ ||-----| |\theta/ | | | theta| - (-ln(u)) | ) / > qv:=evalf(subs(u=0.3,v=0.6,theta=2.5,conditionalCDF)); qv := 0.8859231986 > evalf(subs(q=qv,u=0.3,theta=2.5,conditionalQuantile)); 0.5999999976 > LambertW(0.4); 0.2971677507 > openturns-1.9/validation/src/ValidCopulaDDF.mw000066400000000000000000001023021307543307100214300ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY3LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnRk8tRiw2JVEkY2RmRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEiRkYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYoLUZhbzYkLUYjNiUtRiw2JVEjRjFGJ0YvRjItRjY2LVEjQEBGJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUZhbzYkLUYjNiQtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmlwLUkjbW5HRiQ2JFEiMUYnRjlGOUY5LUZhbzYkLUYjNiMtRiw2JVEjdTFGJ0YvRjJGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRl9wL0ZOUSwwLjMzMzMzMzNlbUYnLUZhbzYkLUYjNiUtRiw2JVEjRjJGJ0YvRjJGXHBGYXBGOS1GYW82JC1GIzYjLUYsNiVRI3UyRidGL0YyRjktRiw2I1EhRidGOS1GNjYtUSI7RidGOUY7RmlxRkBGQkZERkZGSEZfcEZNRk8tRiw2JVEkcGRmRidGL0YyRmpuLUYsNiVRJWRpZmZGJ0YvRjItRmFvNiQtRiM2JkZjcy1GYW82JC1GIzYlRmduRmZxRmNxRjlGZnFGZ3JGOUZdc0ZPLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGX3BGYHAtRiw2JVEkZGRmRidGL0YyRmpuLUYsNiVRJG1hcEYnRi9GMi1GYW82JC1GIzYlLUYsNiVRJ2ZhY3RvckYnRi9GMkZmcS1GYW82Ji1GIzYtRmNzLUZhbzYkLUYjNiVGYHNGZnFGY3FGOUZmcUZjcy1GYW82JC1GIzYlRmBzRmZxRmdyRjlGZnFGY3MtRmFvNiQtRiM2JUZgc0ZmcS1GLDYlUSN1M0YnRi9GMkY5RmZxRmNzLUZhbzYkLUYjNiVGYHNGZnEtRiw2JVEjdTRGJ0YvRjJGOUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkiRkc2IjYkLS1JI0BARzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiRJI0YxR0YkISIiNiNJI3UxR0YkLS1GKDYkSSNGMkdGJEYuNiNJI3UyR0Yk KigtLSZJIkRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JCIiIiIiIzYjSSJGR0YqNiQtLUkjQEBHRic2JEkjRjFHRiohIiI2I0kjdTFHRiotLUYzNiRJI0YyR0YqRjY2I0kjdTJHRipGLC0tRiY2I0Y8NiNGOUY2LS1GJjYjRjU2I0YxRjY= NyYqKCwmKiYtLSZJIkRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JSIiIkYvIiIjNiNJIkZHRi02JC0tSSNAQEdGKjYkSSNGMUdGLSEiIjYjSSN1MUdGLS0tRjY2JEkjRjJHRi1GOTYjSSN1MkdGLUYvLS1GKTYjRjg2I0Y0Ri9GLyomLS0mRik2JEYvRjBGMUYzRi8tLS1GNjYkRilGMEZERkVGL0Y5Ri8tLUYpNiNGPzYjRjxGOUZCISIkKigsJiomLS0mRik2JUYvRjBGMEYxRjNGL0ZPRi9GLyomRkdGLy0tRk1GUUZSRi9GOUYvRk9GU0ZCRjkiIiFGaG4= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElaGVscEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRIkRGJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRidGPw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYsLUkjbWlHRiQ2JVEkcGhpRicvJSdpdGFsaWNHUSZmYWxzZUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnRjIvJSZmZW5jZUdGMS8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0YxLyUqc3ltbWV0cmljR0YxLyUobGFyZ2VvcEdGMS8lLm1vdmFibGVsaW1pdHNHRjEvJSdhY2NlbnRHRjEvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZJLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGV4cEYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjJGOUY7Rj1GP0ZBRkNGRS9GSFEsMC4yMjIyMjIyZW1GJy9GS0Znbi1GTTYoLUklbXN1cEdGJDYlLUYsNiVRInhGJy9GMFEldHJ1ZUYnL0YzUSdpdGFsaWNGJy1GIzYjLUkjbW5HRiQ2JFEiMkYnRjIvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmVvLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZjcC8lKWJldmVsbGVkR0YxRjItRiM2JC1GLDYlUSVzcXJ0RidGL0YyLUZVNiQtRiM2JUZnby1GNjYtUScmc2RvdDtGJ0YyRjlGO0Y9Rj9GQUZDRkUvRkhRJjAuMGVtRicvRktGZXEtRiw2JVEjUGlGJ0YvRjJGMkZecEZhcEZkcEZmcC1GNjYtUSI6RidGMkY5RjtGPUY/RkFGQ0ZFRkdGSi1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZlcS8lJmRlcHRoR0Zici8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGMkY5RjtGPUY/RkFGQ0ZFRmRxRmZxLUYsNiVRJWRpZmZGJ0Zhb0Zjby1GVTYkLUYjNiVGKy1GNjYtUSIsRidGMkY5L0Y8RmJvRj1GP0ZBRkNGRUZkcS9GS1EsMC4zMzMzMzMzZW1GJ0Zeb0YyRmFxLUZcbzYlLUYsNiVRJiZwaGk7RidGL0YyLUYjNiRGWS1GaG82JEZgcEYyRltw LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCRJInhHNiIhIiI= JSFH print(); # input placeholder openturns-1.9/validation/src/ValidCovariance.mws000066400000000000000000000052051307543307100221300ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 226 "restart:\nwith(Line arAlgebra):\ndiag:=<|<0,sigma2,0>|<0,0,sigma3>>;\nCor:=<||>;\nCov:=diag.Cor.diag;\nfactor (Determinant(Cov));\niCov:=MatrixInverse(Cov);\nfactor(Determinant(iCo v));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%diagG-%'RTABLEG6%\"*)o%yN\" -%'MATRIXG6#7%7%%'sigma1G\"\"!F/7%F/%'sigma2GF/7%F/F/%'sigma3G%'Matrix G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$CorG-%'RTABLEG6%\"*3,(e8-%'MAT RIXG6#7%7%%$r11G%$r12G%$r13G7%%$r21G%$r22G%$r23G7%%$r31G%$r32G%$r33G%' MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$CovG-%'RTABLEG6%\"*%opg8 -%'MATRIXG6#7%7%*&)%'sigma1G\"\"#\"\"\"%$r11GF2*(F0F2%$r12GF2%'sigma2G F2*(F0F2%$r13GF2%'sigma3GF27%*(F6F2%$r21GF2F0F2*&)F6F1F2%$r22GF2*(F6F2 %$r23GF2F9F27%*(F9F2%$r31GF2F0F2*(F9F2%$r32GF2F6F2*&)F9F1F2%$r33GF2%'M atrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#**)%'sigma1G\"\"#\"\"\")%'si gma2GF&F')%'sigma3GF&F',.*(%$r11GF'%$r22GF'%$r33GF'F'*(F.F'%$r23GF'%$r 32GF'!\"\"*(%$r21GF'F3F'%$r13GF'F'*(F6F'%$r12GF'F0F'F4*(%$r31GF'F9F'F2 F'F'*(F;F'F/F'F7F'F4F'" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%iCovG-%'R TABLEG6%\"*ScAO\"-%'MATRIXG6#7%7%*(,&*&%$r22G\"\"\"%$r33GF2F2*&%$r23GF 2%$r32GF2!\"\"F2%'sigma1G!\"#,.*(%$r11GF2F1F2F3F2F2*(F " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 9 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidCovariance.txt000066400000000000000000000050131307543307100221360ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > diag:=<|<0,sigma2,0>|<0,0,sigma3>>; > Cor:=<||>; > Cov:=diag.Cor.diag; > factor(Determinant(Cov)); > iCov:=MatrixInverse(Cov); > factor(Determinant(iCov)); [sigma1 0 0 ] [ ] diag := [ 0 sigma2 0 ] [ ] [ 0 0 sigma3] [r11 r12 r13] [ ] Cor := [r21 r22 r23] [ ] [r31 r32 r33] [ 2 ] [sigma1 r11 , sigma1 r12 sigma2 , sigma1 r13 sigma3] [ ] Cov := [ 2 ] [sigma2 r21 sigma1 , sigma2 r22 , sigma2 r23 sigma3] [ ] [ 2 ] [sigma3 r31 sigma1 , sigma3 r32 sigma2 , sigma3 r33] 2 2 2 sigma1 sigma2 sigma3 (r11 r22 r33 - r11 r23 r32 + r21 r32 r13 - r21 r12 r33 + r31 r12 r23 - r31 r22 r13) iCov := [r22 r33 - r23 r32 -r32 r13 + r12 r33 r12 r23 - r22 r13 [----------------- , - ------------------ , ----------------- [ 2 sigma2 sigma1 %1 sigma1 sigma3 %1 [ sigma1 %1 ] ] ] ] [ r21 r33 - r31 r23 r11 r33 - r13 r31 [- ----------------- , ----------------- , [ sigma2 sigma1 %1 2 [ sigma2 %1 r11 r23 - r13 r21] - -----------------] sigma2 sigma3 %1 ] ] [r21 r32 - r31 r22 r11 r32 - r12 r31 r11 r22 - r12 r21] [----------------- , - ----------------- , -----------------] [sigma1 sigma3 %1 sigma2 sigma3 %1 2 ] [ sigma3 %1 ] %1 := r11 r22 r33 - r11 r23 r32 + r21 r32 r13 - r21 r12 r33 + r31 r12 r23 - r31 r22 r13 2 2 2 1/(sigma1 sigma2 sigma3 (r11 r22 r33 - r11 r23 r32 + r21 r32 r13 - r21 r12 r33 + r31 r12 r23 - r31 r22 r13)) > openturns-1.9/validation/src/ValidCovarianceAlgorithm.mws000066400000000000000000000231551307543307100240030ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 148 "restart:\nassume(la mbda>0):\n#F:=1-exp(-lambda*x):\nI1:=Int(1-F(x),x=0..infinity);\nI2:=i nt(1/2*(1-subs(x=(u-1)/2/(1-(u-1)/2),F))/(1-(u-1)/2)^2,u=0..1);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#I1G-%$IntG6$,&\"\"\"F)-%\"FG6#%\"xG !\"\"/F-;\"\"!%)infinityG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#I2G,&# \"\"\"\"\"$F'*&F(!\"\"%\"FGF'F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 121 "with(student):\nchangevar(x=(u+1)/(u-1),Int(1-F(x),x=0..infin ity),u);\nchangevar(x=(u+1)/(u-1),Int(F(x),x=-infinity..0),u);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%$IntG6$*&,&\"\"#!\"\"*&F(\"\"\"-%\"F G6#*&,&%\"uGF+F+F+F+,&F1F+F+F)F)F+F+F+,(*$)F1F(F+F+*&F(F+F1F+F)F+F+F)/ F1;F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$IntG6$,$*(\"\"#\"\"\"-% \"FG6#*&,&%\"uGF)F)F)F),&F/F)F)!\"\"F1F),(*$)F/F(F)F)*&F(F)F/F)F1F)F)F 1F)/F/;F1F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "plot((u+1)/( u-1),u=-0.99..0.99);" }}{PARA 13 "" 1 "" {GLPLOT2D 437 437 437 {PLOTDATA 2 "6%-%'CURVESG6$7hn7$$!3#***************)*!#=$!3$zqS\"Gc7D] !#?7$$!3R****\\ZjTo%*F*$!3([m&*=_#\\IF!#>7$$!3M**\\7>x*G4*F*$!3,eY\"[C $*4v%F37$$!3P++DZxeq')F*$!3!*3=9ncN?rF37$$!3`***\\2VyaC)F*$!3(G+11I*>; '*F37$$!3A+]i%e*QAyF*$!3F)4#pc(R=A\"F*7$$!3C+]7l?8IuF*$!3lrhqlBQu9F*7$ $!3s**\\7C@(R-(F*$!3&p.#pP&R\"[XF*$!3$[=K2NjZx$F*7$$!3\"*)***\\V_11TF*$!3MG&>*Q#)HyTF*7$$ !3@**\\7AL!3t$F*$!3?h)\\f;!zlXF*7$$!3)*)***\\,1e%G$F*$!3sJAA/\"[]0&F*7 $$!3u*****fUrl!HF*$!33YlH;@)f\\&F*7$$!3&***\\7\"*o&oY#F*$!3jj'z7'f`UgF *7$$!3`+++@]jx?F*$!3vd`ncL`flF*7$$!3x)*\\7Tpf];F*$!3h04&)pB]mrF*7$$!3G **\\P.d&RC\"F*$!3:,[N$RMty(F*7$$!37#***\\7Bo'>)F3$!38+NiZ^&[[)F*7$$!3l &)*\\i$))R+VF3$!3S%y#o\"4#Qv\"*F*7$$!3cQ,+]P2t(*!#@$!3`EKWOHZ!)**F*7$$ \"3J2+vy-mnUF3$!35)3KN<7F*$!3YpOPMmT;F*$!3]!fEoN(o#R\"Fg s7$$\"3@++v>G+c?F*$!30kT=dUi<:Fgs7$$\"3^,](o'yMdCF*$!3zkT&)>se^;Fgs7$$ \"3P++D9J(H!HF*$!3%G)=!eZ\"3==Fgs7$$\"3@+++>sQ.LF*$!3N8/#)4Xe')>Fgs7$$ \"3******\\UZ\"4t$F*$!3)G3Qk4e->#Fgs7$$\"3=**\\(=A=$=TF*$!3M%)4^wzQ+CF gs7$$\"3+.+]^D&=a%F*$!3k(p+U#pCkEFgs7$$\"3!***\\()[`OS\\F*$!3Z(yV#zX&G &HFgs7$$\"3U,]P[g#pN&F*$!3w_8gf6\\2LFgs7$$\"3\\++]s->kdF*$!3d_#HJSZ;s$ Fgs7$$\"3C+](='F*$!3(GkYI)H6]UFgs7$$\"3>.++M6?,mF*$!3v3l2ij%Fg y7$$\"3F+Dc3Q*[o*F*$!3v\"p\\NlmqC'Fgy7$$\"3iu=Uc.nQ(*F*$!3:F.Hz#pJb(Fg y7$$\"33]7G/pW#z*F*$!31)[1e])3O&*Fgy7$$\"3EP4@y^L>)*F*$!3g$HpWPAq4\"!# :7$$\"3cD19_MAY)*F*$!3s,+#oV)e!H\"Fj\\l7$$\"3qpa5*en'f)*F*$!3%oI3`^(=: 9Fj\\l7$$\"3u7.2E<6t)*F*$!3(*G$4bx*=m:Fj\\l7$$\"3xb^.jeb'))*F*$!3>m#\\ 9D#)Hv\"Fj\\l7$$\"3#***************)*F*$!3H)************)>Fj\\l-%'COLO URG6&%$RGBG$\"*++++\"!\")$\"\"!F\\_lF[_l-%+AXESLABELSG6$%\"uGQ!6\"-%%V IEWG6$;$!#**!\"#$\"#**Fi_l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "plot(tanh(x),x=-10..10);" }}{PARA 13 "" 1 "" {GLPLOT2D 437 437 437 {PLOTDATA 2 "6%-%'CURVESG6$7]o7$$!#5\"\"!$!2s#px e********!#<7$$!3\"pmmm\"p0k&*F-$!2gV=9!********F-7$$!3uKL$3s%HaF-$!3#GX15P:'****FV7$$!3]******\\$* 4)*\\F-$!3?5pz%e)3****FV7$$!3p******\\_&\\c%F-$!3SDN>HF$y***FV7$$!3$)* *****\\1aZTF-$!3k^;v-k+&***FV7$$!3Imm;/#)[oPF-$!3T'RVKaX$*)**FV7$$!3%H LLL=exJ$F-$!3/(4?jTwP(**FV7$$!3lKLLL2$f$HF-$!3B75=je!Q%**FV7$$!3%)**** \\PYx\"\\#F-$!39ib\")Gy$R')*FV7$$!3smmTNz>&H#F-$!3Ibhs$[i!*z*FV7$$!3gL LLL7i)4#F-$!3d]5CJbr.(*FV7$$!39mmTNa%H)=F-$!3HAIN!fLva*FV7$$!3n)***\\P 'psm\"F-$!3,ar4)z(*=J*FV7$$!3%*)****\\F&*=Y\"F-$!3NKP)\\s+-)*)FV7$$!3? ****\\74_c7F-$!3dB'o$f6-,&)FV7$$!3PlmT5VBU5F-$!3D2Cv9%)o(y(FV7$$!3M:LL $3x%z#)FV$!3KK^2O[s$z'FV7$$!3gAL$e9d;J'FV$!3G)35YyV&)e&FV7$$!3()HLL3s$ QM%FV$!3a*G23F$y*3%FV7$$!3`kmT&QdDG$FV$!3wzE!o5E&pJFV7$$!3>****\\ivF@A FV$!3CAf`98X&=#FV7$$!3'QL$eRx**f6FV$!3)eX=fjA[:\"FV7$$!3\\^omm;zr)*!#? $!3e3`*H+r9()*Fgu7$$\"3^ML3_Nl.5FV$\"3++++dxd;F- $\"3?iAXz&p\"*H*FV7$$\"3Q++]7JFn=F-$\"3^7&R'\\EYL&*FV7$$\"3f+++D0xw?F- $\"3Gzyl!3&o!p*FV7$$\"3%3+]P/q%zAF-$\"3#H\"e%z#zq#z*FV7$$\"35,+]i&p@[# F-$\"3)QOgl3<8')*FV7$$\"3++++vgHKHF-$\"3a-ou!****FV7$$\"3X,+]7k.6aF-$\"3#*pssC4g****FV7$$\"3#emmmT9 C#eF-$\"3?V**R;Z#)****FV7$$\"33****\\i!*3`iF-$\"3)y(fEEf#*****FV7$$\"3 mh)*****F-7$$ \"3,pm;HYt7vF-$\"2g()4e.%******F-7$$\"37-+++xG**yF-$\"2[)e1Zs******F-7 $$\"3gpmmT6KU$)F-$\"2-]O]'))******F-7$$\"3qNLLLbdQ()F-$\"2]N$>'[****** *F-7$$\"3[++]i`1h\"*F-$\"2=3'Gz(*******F-7$$\"3@-+]P?Wl&*F-$\"2C:\"p,* *******F-7$$\"#5F*$\"2s#pxe********F--%'COLOURG6&%$RGBG$\"*++++\"!\")$ F*F*Fa`l-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;F(Ff_l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "plot(x/(1+abs(x)),x=-10..10) ;" }}{PARA 13 "" 1 "" {GLPLOT2D 437 437 437 {PLOTDATA 2 "6%-%'CURVESG6 $7Y7$$!#5\"\"!$!3g!4444444*!#=7$$!3\"pmmm\"p0k&*!#<$!3_eB(z'RR`!*F-7$$ !3uKL$3s%HaF1$!3&R4OjPiYW)F-7$$!3]******\\$*4 )*\\F1$!3[.Iq2_!GL)F-7$$!3p******\\_&\\c%F1$!3>tL)oNSI?)F-7$$!3$)***** *\\1aZTF1$!3#*[;'[rCt0)F-7$$!3Imm;/#)[oPF1$!3ejJq*G**G!zF-7$$!3%HLLL=e xJ$F1$!3wR>q8L)Ro(F-7$$!3lKLLL2$f$HF1$!3(>LP<)[IfuF-7$$!3%)****\\PYx\" \\#F1$!3*3J!4Wn7OrF-7$$!3gLLLL7i)4#F1$!3uW[@*=eFx'F-7$$!3n)***\\P'psm \"F1$!3'3L\\gtZ3D'F-7$$!3?****\\74_c7F1$!3CtoGZ\"*RobF-7$$!3M:LL$3x%z# )F-$!3T(3i#*)RQHXF-7$$!3gAL$e9d;J'F-$!3Vmt@Q]TpQF-7$$!3()HLL3s$QM%F-$! 3gI*=o#[OGIF-7$$!3>****\\ivF@AF-$!3`\"*\\y$R\\v\"=F-7$$!3\\^omm;zr)*!# ?$!3N;5O??Hv(*Fis7$$\"3^ML3_Nl.5F-$\"3MRJn5P4@\"*!#>7$$\"3aPL$3-Dg5#F- $\"3kf1J7.lR++++dxd;F1$ \"3gOc___XPiF-7$$\"3f+++D0xw?F1$\"3A#)>/f)Q)\\nF-7$$\"35,+]i&p@[#F1$\" 3X8Q\\_rAGrF-7$$\"3++++vgHKHF1$\"3\")[uG$\\cpX(F-7$$\"3ElmmmZvOLF1$\"3 UF*)*)>$GTp(F-7$$\"3&4+++v+'oPF1$\"3r[[H%y[H!zF-7$$\"3UKL$eR<*fTF1$\"3 ZA$R!zW)>1)F-7$$\"3L-++])Hxe%F1$\"3.h8-ZWO5#)F-7$$\"3!fmm\"H!o-*\\F1$ \"3$)>y>;ciI$)F-7$$\"3X,+]7k.6aF1$\"3,$G^#)z*=S%)F-7$$\"3#emmmT9C#eF1$ \"3O1)QuCVU`)F-7$$\"33****\\i!*3`iF1$\"3H/&)4)4x7i)F-7$$\"3*p;c9j())F-7$$\"3gpmmT6KU$)F1$ \"3-'H*)F-7$$\"3qNLLLbdQ()F1$\"3X%zO(zd:t*)F-7$$\"3[++]i`1h\"*F1 $\"3zXO(yA^e,*F-7$$\"3@-+]P?Wl&*F1$\"3p]5Dn!=N0*F-7$$\"#5F*$\"3g!44444 44*F--%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*F`]l-%+AXESLABELSG6$%\"xGQ!6 \"-%%VIEWG6$;F(Fe\\l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 147 "restart:\nwith(student):\nassume(lambda>0):\nF:=1-ex p(-lambda*x);\nG(u):=solve(F=u,x);\nvalue(changevar(x=G(u),Int((x-m)^2 *diff(F,x),x=0..infinity),u));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" FG,&\"\"\"F&-%$expG6#,$*&%(lambda|irGF&%\"xGF&!\"\"F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>-%\"GG6#%\"uG,$*&-%#lnG6#,&\"\"\"F.F'!\"\"F.%(lam bda|irGF/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,(\"\"#\"\"\"*&)%\"mG F%F&)%(lambda|irGF%F&F&*(F%F&F)F&F+F&!\"\"F&F+!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "int((x-m)^2*diff(F,x),x=0..infinity);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#*&,(\"\"#\"\"\"*&)%\"mGF%F&)%(lambda|i rGF%F&F&*(F%F&F)F&F+F&!\"\"F&F+!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "int((G(u)-m)^2,u=0..1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,(\"\"#\"\"\"*&)%\"mGF%F&)%(lambda|irGF%F&F&*(F%F&F)F&F+F&!\" \"F&F+!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "8 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidCovarianceAlgorithm.txt000066400000000000000000000044401307543307100240100ustar00rootroot00000000000000> restart: > assume(lambda>0): > #F:=1-exp(-lambda*x): > I1:=Int(1-F(x),x=0..infinity); > I2:=int(1/2*(1-subs(x=(u-1)/2/(1-(u-1)/2),F))/(1-(u-1)/2)^2,u=0..1); infinity / | I1 := | 1 - F(x) dx | / 0 I2 := 1/3 - F/3 > with(student): > changevar(x=(u+1)/(u-1),Int(1-F(x),x=0..infinity),u); > changevar(x=(u+1)/(u-1),Int(F(x),x=-infinity..0),u); 1 u + 1 / -2 + 2 F(-----) | u - 1 | --------------- du | 2 | u - 2 u + 1 / -1 1 u + 1 / 2 F(-----) | u - 1 | ------------ du | 2 | u - 2 u + 1 / -1 > plot((u+1)/(u-1),u=-0.99..0.99); > plot(tanh(x),x=-10..10); > plot(x/(1+abs(x)),x=-10..10); > restart: > with(student): > assume(lambda>0): > F:=1-exp(-lambda*x); > G(u):=solve(F=u,x); > value(changevar(x=G(u),Int((x-m)^2*diff(F,x),x=0..infinity),u)); F := 1 - exp(-lambda~ x) ln(1 - u) G(u) := - --------- lambda~ 2 2 2 + m lambda~ - 2 m lambda~ ----------------------------- 2 lambda~ > int((x-m)^2*diff(F,x),x=0..infinity); 2 2 2 + m lambda~ - 2 m lambda~ ----------------------------- 2 lambda~ > int((G(u)-m)^2,u=0..1); 2 2 2 + m lambda~ - 2 m lambda~ ----------------------------- 2 lambda~ > openturns-1.9/validation/src/ValidCovarianceGauss.mws000066400000000000000000000724751307543307100231500ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 88 "restart:\nf:=(exp(al pha*(x-mu))-exp(-beta*(x-mu)))/(exp(alpha*(x-mu))+exp(-beta*(x-mu))); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG*&,&-%$expG6#*&%&alphaG\"\" \",&%\"xGF,%#muG!\"\"F,F,-F(6#,$*&%%betaGF,F-F,F0F0F,,&F'F,F1F,F0" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "with(plots):\nfor i from 0 \+ to 6 do\n p[i]:=plot(subs(alpha=3,beta=i,mu=1,f),x=-5..5);\n q[i]:=p lot(subs(alpha=i,beta=3,mu=1,f),x=-5..5,color=\"green\",style=\"point \",symbol=\"circle\");\nod:\ndisplay(seq(p[i],i=0..5),seq(q[i],i=0..5) );" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 13 "" 1 "" {GLPLOT2D 541 541 541 {PLOTDATA 2 "60-%'CURVESG6$7Y7$$!\"&\"\"!$!2+T+a p*******!#<7$$!3YLLLe%G?y%F-$!2?]QUT*******F-7$$!3QmmT&esBf%F-$!2o.'Gl *)******F-7$$!3ALL$3s%3zVF-$!2))\\_z.)******F-7$$!3^LL$e/$QkTF-$!2/j3P E'******F-7$$!3ommT5=q]RF-$!2))o'z1H******F-7$$!3ILL3_>f_PF-$!2W]D%[r) *****F-7$$!3K++vo1YZNF-$!3Mh$\\'>i(*****!#=7$$!3;LL3-OJNLF-$!3O_-Gh]&* ****FQ7$$!3p***\\P*o%Q7$F-$!3W%)Qm]_\"*****FQ7$$!3Kmmm\"RFj!HF-$!3%*o% RRCP)****FQ7$$!33LL$e4OZr#F-$!3?7tXG3r****FQ7$$!3w*****\\n\\!*\\#F-$!3 !Ga4RrZ%****FQ7$$!3&)*****\\ixCG#F-$!3G[mT+C%*)***FQ7$$!3\"******\\KqP 2#F-$!3)=.Jp,A!)***FQ7$$!3:LL3-TC%)=F-$!3GPs\"*Hw]'***FQ7$$!3Zmmm\"4z) e;F-$!3A4'>K^MJ***FQ7$$!3Lmmmm`'zY\"F-$!3Ty\\B#*)Hy)**FQ7$$!3#****\\(= t)eC\"F-$!3KbPZh(>j(**FQ7$$!3\"ommmh5$\\5F-$!3,&=zKCLt&**FQ7$$!3S$*** \\(=[jL)FQ$!3bhpOQ0n=**FQ7$$!3*f***\\iXg#G'FQ$!3b4%o`>>*\\)*FQ7$$!3ndm mT&Q(RTFQ$!3Ky@gb$ykr*FQ7$$!3$\\mmTg=><#FQ$!3K8\"RgSBT\\*FQ7$$!3uDMLLe *e$\\!#?$!3_j(=tYsZ1*FQ7$$\"3zrm;zRQb@FQ$!3;3Q:%)y0k#)FQ7$$\"3_,+](=>Y 2%FQ$!3dMHnl//3rFQ7$$\"36QLe*[K56&FQ$!35s>u*)f2^iFQ7$$\"3rumm\"zXu9'FQ $!3Jq&3XV^7@&FQ7$$\"3#yLLe9i\"=sFQ$!3h'o>ZeGj%RFQ7$$\"3$4+++]y))G)FQ$! 3a\"4c!*zl<^#FQ7$$\"3%>++DcljL*FQ$!3&HGbe!ew@**!#>7$$\"3H++]i_QQ5F-$\" 3\"R/wN.N9v&Feu7$$\"3U+](=-N(R6F-$\"3\\O#G#o-'e1#FQ7$$\"3b++D\"y%3T7F- $\"3!R&\\#f&[YmMFQ7$$\"3F+]P4kh`8F-$\"36'f/!4g0d[FQ7$$\"3,++]P![hY\"F- $\"3(Q9wC`P(QgFQ7$$\"3KmmT5FEn:F-$\"3l.*4thi`\"pFQ7$$\"3jKLL$Qx$o;F-$ \"3T'4oBP(pEwFQ7$$\"3Z+++v.I%)=F-$\"3BD7&f\\\"z$o)FQ7$$\"3@mm\"zpe*z?F -$\"33YwC4B:Y#*FQ7$$\"3;,++D\\'QH#F-$\"3#\\l6*e=(ff*FQ7$$\"3'HL$e9S8& \\#F-$\"3+U5k**e1x(*FQ7$$\"3s++D1#=bq#F-$\"3\"pbbq%>y!))*FQ7$$\"3\"HLL $3s?6HF-$\"3w\"R'3(*=]N**FQ7$$\"3a***\\7`Wl7$F-$\"3\\le7ID9m**FQ7$$\"3 enmmm*RRL$F-$\"3+f(oi27=)**FQ7$$\"3%zmmTvJga$F-$\"3SKozN(p.***FQ7$$\"3 ^MLe9tOcPF-$\"3S'oVh+v[***FQ7$$\"31,++]Qk\\RF-$\"31;'*p6(Hr***FQ7$$\"3 ![LL3dg6<%F-$\"3W.tk>J_)***FQ7$$\"3&ymmmw(GpVF-$\"3S%y,s([=****FQ7$$\" 3C++D\"oK0e%F-$\"3o!QQB[n&****FQ7$$\"36,+v=5s#y%F-$\"3/')G>!=k(****FQ7 $$\"\"&F*$\"3'e&z];r()****FQ-%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*F`]l- F$6$7[o7$F($!2=(\\C**********F-7$F/$!2mT%>)*********F-7$F4$!2IZWh***** ****F-7$F9$!2S&4&4*********F-7$F>$!2W:T'y********F-7$FC$!23<\"z\\***** ***F-7$FH$!2W%)*4*))*******F-7$FM$!2S&*o![(*******F-7$FS$!2?'=S6%***** **F-7$FX$!2'f$o&G')******F-7$Fgn$!2A()fis'******F-7$F\\o$!2gCT^&H***** *F-7$Fao$!25W,hI$)*****F-7$Ffo$!3'HQF3Ig*****FQ7$F[p$!33]Gl;&3*****FQ7 $F`p$!3#f!4raZ!)****FQ7$Fep$!3itqGz!>&****FQ7$Fjp$!3aMuv@z'*)***FQ7$F_ q$!3AMMBz6\\(***FQ7$Fdq$!3%ys')pF$\\%***FQ7$Fiq$!3XZSDAk&p)**FQ7$F^r$! 3&ocq#*zk.(**FQ7$Fcr$!3$ejsX*oII**FQ7$Fhr$!3#>?xo$\\^Z)*FQ7$$!3g***\\7 yQ16\"FQ$!3)))[JjJ5yw*FQ7$F]s$!30.DIKV=Z'*FQ7$$\"3womT5D,`5FQ$!3T5&o6V ppX*FQ7$Fcs$!3'*3#)zHJao\"*FQ7$$\"3lOLL$e,]6$FQ$!3M8A\"4WwF!))FQ7$Fhs$ !33k)4RPb/H)FQ7$F]t$!3.^J**=94@vFQ7$Fbt$!3BEXhwREskFQ7$Fgt$!3*QR8N\\tF 0&FQ7$F\\u$!33t#=+48FQ7$$\"3W-+v$44,')*FQ$!3w80VH$)3(z#Feu7$Fgu$\"3uG7Cbe+iwFeu 7$F\\v$\"3$eS%fI_9CFFQ7$Fav$\"3CoV*=d%zzWFQ7$Ffv$\"3(=\\-9t'Q*3'FQ7$F[ w$\"3gM)4Q1EmJ(FQ7$F`w$\"3<1l^ISiD\")FQ7$Few$\"3)y3JHu0*3()FQ7$$\"3bmm ;z)Qjx\"F-$\"3p#3=CIiA9*FQ7$Fjw$\"3T\"[*[='eXV*FQ7$$\"3NL$ek`H@)>F-$\" 3!=J`F)\\89'*FQ7$F_x$\"3Q,yzI3XP(*FQ7$$\"3oL$e9\"=\"p=#F-$\"3Jj`Uw'\\! G)*FQ7$Fdx$\"3R#[`pKjv))*FQ7$Fix$\"3(pzb*=!y&\\**FQ7$F^y$\"3Ou+D1XBy** FQ7$Fcy$\"3C(z=JLM/***FQ7$Fhy$\"39X=$Q^cf***FQ7$F]z$\"3w&)31-fB)***FQ7 $Fbz$\"3s>N#zsW#****FQ7$Fgz$\"3uouXrVn****FQ7$F\\[l$\"3GJ!**fp\\)****F Q7$Fa[l$\"39Y5GL!Q*****FQ7$Ff[l$\"35@j9Z>(*****FQ7$F[\\l$\"2g^N%\\z)** ***F-7$F`\\l$\"2g>?Dj%******F-7$Fe\\l$\"2'fnH\\x******F-Fi\\l-F$6$7\\o 7$F($!2#H\")************F-7$F/$!2MV%************F-7$F4$!2[j&)********* **F-7$F9$!2cEe***********F-7$F>$!27!z()**********F-7$FC$!25gW'******** **F-7$FH$!2)3I/**********F-7$FM$!2]-Jt*********F-7$FS$!2#z1H#********* F-7$FX$!2OH2y(********F-7$Fgn$!2C?^T$********F-7$F\\o$!2A,u$G)*******F -7$Fao$!21C3a\\*******F-7$Ffo$!29,$))4&)******F-7$F[p$!2gW+#pd******F- 7$F`p$!2sSoi3*)*****F-7$Fep$!31D-(>Km*****FQ7$Fjp$!3;Z]()>D\"*****FQ7$ F_q$!3#p-0FXM(****FQ7$Fdq$!3'**>lMV!H****FQ7$Fiq$!3[7yw\"39z***FQ7$F^r $!3'z$44Vl<%***FQ7$Fcr$!3P#\\'3kv+$)**FQ7$Fhr$!3y9mB9;ha**FQ7$F]bl$!3% y(4BJ7'H#**FQ7$F]s$!3zYQChZQp)*FQ7$Febl$!3tyCI&QDWx*FQ7$Fcs$!3`r)y<\"z x6'*FQ7$F]cl$!3?$f+(RK8!Q*FQ7$Fhs$!3sQb#e8(>Dv%e\\$Feu7$Fgu$\"3Cuz6 sk'pc*Feu7$$\"3O+v=U,1*3\"F-$\"3!o.pU8F/>#FQ7$F\\v$\"3^]#y'G#zyN$FQ7$$ \"3[+Dc,*4/>\"F-$\"3\"z'Q1vKaIWFQ7$Fav$\"3w+2#H@l(*Q&FQ7$Ffv$\"3hm+r`) zV3(FQ7$F[w$\"3V$3T/hAyA)FQ7$F`w$\"3M:ka9x8#*))FQ7$Few$\"3I!y\"\\5Jw;$ *FQ7$Fcfl$\"3_sya$H6gf*FQ7$Fjw$\"3z*>-6/IDw*FQ7$F[gl$\"3RjF8FMs`)*FQ7$ F_x$\"3n%pUy/c+\"**FQ7$Fdx$\"3r&H&fWD/p**FQ7$Fix$\"3L9;N,Bn))**FQ7$F^y $\"3MzoDf@/'***FQ7$Fcy$\"3/8R\\WYe)***FQ7$Fhy$\"3i6y)Qt<&****FQ7$F]z$ \"3s;f2A!H)****FQ7$Fbz$\"39#R`0zS*****FQ7$Fgz$\"35fR2:$z*****FQ7$F\\[l $\"2wXu-8#******F-7$Fa[l$\"2#\\h=+u******F-7$Ff[l$\"2?(QeM!*******F-7$ F[\\l$\"2OzgUm*******F-7$F`\\l$\"2s]Ky()*******F-7$Fe\\l$\"2%Gpxe***** ***F-Fi\\l-F$6$7]o7$F($!2c***************F-7$F/$!2C)**************F-7$ F4$!2c%**************F-7$F9$!2o!)*************F-7$F>$!21I************* F-7$FC$!2K[(************F-7$FH$!27u\"************F-7$FM$!2Qsr********* **F-7$FS$!2_-**)**********F-7$FX$!2S(3k**********F-7$Fgn$!2=]v')****** ***F-7$F\\o$!27()=e*********F-7$Fao$!29;[Z)********F-7$Ffo$!2'R#oS%*** *****F-7$F[p$!2EXSV!)*******F-7$F`p$!2![X&**Q*******F-7$Fep$!2#*)fjTw* *****F-7$Fjp$!2#)p0ae#******F-7$F_q$!3y\\E%e*=(*****FQ7$Fdq$!3%=5,#)e3 *****FQ7$Fiq$!3+?]Bvlm****FQ7$F^r$!3slo\\en&))***FQ7$Fcr$!3gguM0_'e*** FQ7$Fhr$!3#)HUu&zSl)**FQ7$F]s$!3vwVl^r)>&**FQ7$Febl$!3>.')4W<=2**FQ7$F cs$!3'=*foZ$R4#)*FQ7$F]cl$!3C3jtH[u$o*FQ7$Fhs$!3G.53c)zVW*FQ7$F]t$!3V \\]]=?W*)*)FQ7$Fbt$!3C5)3AH`l>)FQ7$$\"3E1+voR!Go'FQ$!3%R]`+sMbf(FQ7$Fg t$!3*z3'RbI7HoFQ7$$\"3Ppm\"HK?Nv(FQ$!3aNfn;>oveFQ7$F\\u$!3S.B9(>2as%FQ 7$Fadl$!3>c)RnNV(=MFQ7$Fau$!3OV:/F$4]'>FQ7$Fidl$!3'f4y24lU>%Feu7$Fgu$ \"3GWc$p^%\\Y6FQ7$Fgam$\"38m!GDs#**4EFQ7$F\\v$\"3!z^4IJ0E'RFQ7$F_bm$\" 3_3DFm!=E;&FQ7$Fav$\"3$4$[f>2@*='FQ7$Ffv$\"3n<&pEp'))fyFQ7$F[w$\"3m`>e c([,&))FQ7$F`w$\"359_b6BKc$*FQ7$Few$\"3IGxcCQ)Qk*FQ7$Fcfl$\"3jU(\\BY!3 7)*FQ7$Fjw$\"3664fKeB,**FQ7$F[gl$\"3rQN'))zl\\%**FQ7$F_x$\"3/m3C'=j$p* *FQ7$Fdx$\"3q1%z*[U*****FQ7$F]z$\"2AGh)HM)*****F- 7$Fbz$\"2'pFVe`******F-7$Fgz$\"2Cn[go)******F-7$F\\[l$\"2G+aze*******F -7$Fa[l$\"2K6D4*)*******F-7$Ff[l$\"2K.wn'********F-7$F[\\l$\"2#>gk!*** ******F-7$F`\\l$\"2kQ>s*********F-7$Fe\\l$\"2=(\\C**********F-Fi\\l-F$ 6$7^o7$F($!\"\"F*7$F/Ffcn7$F4Ffcn7$F9Ffcn7$F>$!2W***************F-7$FC F_gm7$FH$!2!G**************F-7$FM$!2#*p*************F-7$FS$!2cn)****** ******F-7$FX$!2!)=%************F-7$Fgn$!2#fL(***********F-7$F\\o$!2/9) *)**********F-7$Fao$!2c**Q&**********F-7$Ffo$!2Sf+z*********F-7$F[p$!2 #Q9&4*********F-7$F`p$!2EF+f'********F-7$Fep$!23g^[$)*******F-7$Fjp$!2 )G+cr$*******F-7$F_q$!2+QKc-(******F-7$Fdq$!2%3'[RA))*****F-7$Fiq$!3I7 fX2n%*****FQ7$F^r$!3?C>)[gv(****FQ7$Fcr$!3'*Ri)QO%**)***FQ7$Fhr$!3K(e@ VP8g***FQ7$F]s$!3P$*=:RsR#)**FQ7$Febl$!3q4)z(Rz&>'**FQ7$Fcs$!3E\">$GZK )y\"**FQ7$F]cl$!3S=S9Ed()R)*FQ7$Fhs$!3S^SDU;#*)o*FQ7$F]t$!3^+&3F%4(yO* FQ7$Fbt$!3%)\\&QS$otO()FQ7$Fi\\n$!3q$\\N_i:P@)FQ7$Fgt$!3z$Q8&4#4I](FQ7 $Fa]n$!3T7ee\\g*Gc'FQ7$F\\u$!3v$G'[P/hi`FQ7$Fadl$!3\\S`T[B-KRFQ7$Fau$! 3HhRj&=K=G#FQ7$Fidl$!3Oqh,%*HF#*[Feu7$Fgu$\"3-z%\\30faL\"FQ7$Fgam$\"3- tY8.S#*>IFQ7$F\\v$\"3e<#)f$Q+[`%FQ7$F_bm$\"3cM4!y7(HEeFQ7$Fav$\"3aOjX2 $[\"yoFQ7$Ffv$\"3rf#)='fhyW)FQ7$F[w$\"33&y:ruuFE*FQ7$$\"3;L$eRP0n^\"F- $\"3)H'RI?.ww%*FQ7$F`w$\"3t@frR%G)H'*FQ7$$\"3Z**\\(o/?yh\"F-$\"3D$[po$ )=(Q(*FQ7$Few$\"3S3Xbk#ye\")*FQ7$Fcfl$\"3$4!z:\\(*48**FQ7$Fjw$\"3TSAo= :4f**FQ7$F_x$\"3LFeO4\\e*)**FQ7$Fdx$\"3957Mb*ow***FQ7$Fix$\"3S@BB0-V** **FQ7$F^y$\"3C&*3lQ$p)****FQ7$Fcy$\"3#pelq.p*****FQ7$Fhy$\"2_q(*=9$*** ***F-7$F]z$\"2SIMTR)******F-7$Fbz$\"2kePhj*******F-7$Fgz$\"2'R]`;***** ***F-7$F\\[l$\"23&fUy********F-7$Fa[l$\"2sxBa*********F-7$Ff[l$\"2eic) )*********F-7$F[\\l$\"2'*QR(**********F-7$F`\\l$\"2'4n$***********F-7$ Fe\\l$\"2+<')***********F-Fi\\l-F$6$7aoFecnFhcnFicnFjcn7$F>Ffcn7$FCFfc n7$FHFfcn7$FM$!2y***************F-7$FS$!27)**************F-7$FX$!2Y!** ************F-7$Fgn$!2GY*************F-7$F\\o$!2)>v************F-7$Fao $!2!og)***********F-7$Ffo$!2')>@***********F-7$F[p$!2[`\"e**********F- 7$F`p$!2g#R4)*********F-7$Fep$!2k?N%))********F-7$Fjp$!2'G_tY********F -7$F_q$!2K&>@&o*******F-7$Fdq$!2O#\\'H[)******F-7$Fiq$!2S!4:#[\"****** F-7$F^r$!3e0iTdf&*****FQ7$Fcr$!3G8I6Xav****FQ7$Fhr$!3Y`8X_&>))***FQ7$F ]s$!3wYrX$f_N***FQ7$Fcs$!3TTJQD4Wi**FQ7$F]cl$!39lM%)[JC>**FQ7$Fhs$!3=7 'HDW$zE)*FQ7$$\"3!)p;aQe#Gf%FQ$!3LGjw@j(*Q(*FQ7$F]t$!3e*[\"H#f;vg*FQ7$ $\"3T1]iS\"R#HcFQ$!3]^:XRC#=T*FQ7$Fbt$!3h=zI$*)=H7*FQ7$Fi\\n$!3?KQzjK% [o)FQ7$Fgt$!3Gf,:`4F]!)FQ7$Fa]n$!3uvV]e`6crFQ7$F\\u$!3QOL4C%QS%fFQ7$Fa dl$!3u=)e%))3\">U%FQ7$Fau$!3#)yX@u^*Qf#FQ7$$\"3=-]7GtB)f*FQ$!3%e\\*Q* \\dLf\"FQ7$Fidl$!3'HmeEO.)*e&Feu7$$\"3Q+v$f3)>75F-$\"3`v:fsgOv[Feu7$Fg u$\"3BR^a5vXB:FQ7$Fgam$\"3$e5%\\qL)*=MFQ7$F\\v$\"3$yo&4!)f!>2&FQ7$F_bm $\"3\"oqmn2cCD&Ge)*FQ7$Few$\"30;))HC\\?0**FQ7$Fcfl$\"3T^'owFC*f**FQ7$Fjw$ \"3VEW!QO%3$)**FQ7$F_x$\"3c7o\"*=$!2#H'3PE'******F-7$FC$!2wo'z1 H******F-FGFL7$FS$!3C^-Gh]&*****FQ7$FX$!3K$)Qm]_\"*****FQFfn7$F\\o$!33 6tXG3r****FQ7$Fao$!3oT&4RrZ%****FQFeo7$F[p$!3wI5$p,A!)***FQF_p7$Fep$!3 73'>K^MJ***FQ7$Fjp$!3Ix\\B#*)Hy)**FQF^qFcqFhqF]r7$Fcr$!3@x@gb$ykr*FQFg rF\\s7$Fcs$!3F4Q:%)y0k#)FQFgs7$F]t$!3@t>u*)f2^iFQ7$Fbt$!34o&3XV^7@&FQF ft7$F\\u$!3*44c!*zl<^#FQF`u7$Fgu$\"3OQgdL]V^dFeu7$F\\v$\"3$fBG#o-'e1#F Q7$Fav$\"3Ya\\#f&[YmMFQFevFjvF_wFdw7$Fjw$\"37C7&f\\\"z$o)FQ7$F_x$\"3( \\kZ#4B:Y#*FQ7$Fdx$\"3#Ql6*e=(ff*FQFhx7$F^y$\"3!ebbq%>y!))*FQ7$Fcy$\"3 (GR'3(*=]N**FQ7$Fhy$\"3gme7ID9m**FQ7$F]z$\"3)yvoi27=)**FQ7$Fbz$\"3_Loz N(p.***FQ7$Fgz$\"3G&oVh+v[***FQF[[lF`[l7$Ff[l$\"3G$y,s([=****FQFj[l7$F `\\l$\"3#\\)G>!=k(****FQFd\\l-Fj\\l6&F\\]lF`]lF]]lF`]l-%&STYLEG6#%&POI NTG-%'SYMBOLG6#%'CIRCLEG-F$6&7[o7$F($!2S(\\C**********F-Fg]lFj]lF]^l7$ F>$!2k:T'y********F-7$FC$!2=<\"z\\********F-Ff^l7$FM$!2G&*o![(*******F -7$FS$!2K'=S6%*******F-7$FX$!2%e$o&G')******F-Fb_l7$F\\o$!2qCT^&H***** *F-Fh_lF[`l7$F[p$!3I_Gl;&3*****FQ7$F`p$!3o.4raZ!)****FQ7$Fep$!3suqGz!> &****FQ7$Fjp$!3WLuv@z'*)***FQ7$F_q$!37LMBz6\\(***FQ7$Fdq$!3'*Gn)pF$\\% ***FQF`al7$F^r$!3_j0F*zk.(**FQ7$Fcr$!3rMEd%*oII**FQFial7$F]bl$!35\"\\J jJ5yw*FQ7$F]s$!3$3]-BL%=Z'*FQFdbl7$Fcs$!325#)zHJao\"*FQF\\cl7$Fhs$!3?l )4RPb/H)FQFdcl7$Fbt$!37DXhwREskFQFjcl7$F\\u$!3_s#=+4T l\"H*4JBFQ7$Fau$!34\\n\"\\\\H&>8FQ7$Fidl$!3S70VH$)3(z#Feu7$Fgu$\"3>B7C be+iwFeu7$F\\v$\"3R1WfI_9CFFQFcel7$Ffv$\"3w!\\-9t'Q*3'FQFiel7$F`w$\"3G 2l^ISiD\")FQ7$Few$\"3x'3JHu0*3()FQFbflFgfl7$F[gl$\"3\"HJ`F)\\89'*FQ7$F _x$\"3F+yzI3XP(*FQ7$Fcgl$\"3`l`Uw'\\!G)*FQFggl7$Fix$\"3v%zb*=!y&\\**FQ 7$F^y$\"3ew+D1XBy**FQ7$Fcy$\"3O)z=JLM/***FQ7$Fhy$\"3#H%=$Q^cf***FQ7$F] z$\"3'z)31-fB)***FQ7$Fbz$\"3Q;N#zsW#****FQ7$Fgz$\"3knuXrVn****FQF_il7$ Fa[l$\"3CZ5GL!Q*****FQFeil7$F[\\l$\"2[^N%\\z)*****F-7$F`\\l$\"2s>?Dj%* *****F-7$Fe\\l$\"2uv'H\\x******F-F\\bpF^bpFbbp-F$6&7\\o7$F($!2#G\")*** *********F-7$F/$!2cV%************F-7$F4$!2Qj&)***********F-7$F9$!2YEe* **********F-F`[mFc[mFf[m7$FM$!2S-Jt*********F-F\\\\m7$FX$!2YH2y(****** **F-Fb\\m7$F\\o$!2K,u$G)*******F-7$Fao$!2'R#3a\\*******F-7$Ffo$!2C,$)) 4&)******F-F^]m7$F`p$!2%4%oi3*)*****F-Fd]m7$Fjp$!3/Y]()>D\"*****FQ7$F_ q$!3!e-0FXM(****FQ7$Fdq$!33,_YL/H****FQ7$Fiq$!3;4yw\"39z***FQ7$F^r$!31 R44Vl<%***FQ7$Fcr$!3[$\\'3kv+$)**FQFi^m7$F]bl$!3tw4BJ7'H#**FQF__m7$Feb l$!3%)zCI&QDWx*FQ7$Fcs$!3Uq)y<\"zx6'*FQFh_mF[`m7$F]t$!3$\\Y?.VUJS)FQFa `m7$Fgt$!3\"Hk!3#3yZ,'FQ7$F\\u$!3mCX!HoYY.%FQ7$Fadl$!3ccmrKCA%)GFQ7$Fa u$!3'ogGqOHSk\"FQ7$Fidl$!3%G)))>Dv%e\\$Feu7$Fgu$\"3&G(z6sk'pc*Feu7$Fga m$\"3OP!pU8F/>#FQF[bm7$F_bm$\"3ZoQ1vKaIWFQFcbmFfbmFibmF\\cmF_cmFbcmFec m7$F[gl$\"3]kF8FMs`)*FQ7$F_x$\"3y&pUy/c+\"**FQF^dm7$Fix$\"3W:;N,Bn))** FQ7$F^y$\"3CyoDf@/'***FQ7$Fcy$\"3#>\"R\\WYe)***FQ7$Fhy$\"3s7y)Qt<&**** FQ7$F]z$\"3S8f2A!H)****FQ7$Fbz$\"3[&R`0zS*****FQ7$Fgz$\"3?gR2:$z*****F Q7$F\\[l$\"2cXu-8#******F-Fiem7$Ff[l$\"2I(QeM!*******F-7$F[\\l$\"2CzgU m*******F-7$F`\\l$\"2i]Ky()*******F-7$Fe\\l$\"2s#pxe********F-F\\bpF^b pFbbp-F$6&FjfmF\\bpF^bpFbbp-F$6&7^oFecnFhcnFicnFjcn7$F>$!2o*********** ****F-7$FC$!2M)**************F-F_dn7$FM$!29q*************F-7$FS$!2on)* ***********F-7$FX$!2#*=%************F-7$Fgn$!2/Ot***********F-7$F\\o$! 2#R\")*)**********F-Faen7$Ffo$!2]f+z*********F-7$F[p$!2qV^4*********F- FjenF]fnF`fnFcfn7$Fdq$!2%4'[RA))*****F-7$Fiq$!3?6fX2n%*****FQ7$F^r$!3S E>)[gv(****FQ7$Fcr$!3wPi)QO%**)***FQ7$Fhr$!3a*e@VP8g***FQFegnFhgn7$Fcs $!3:!>$GZK)y\"**FQF^hnFahn7$F]t$!3S*\\3F%4(yO*FQ7$Fbt$!3&4bQS$otO()FQ7 $Fi\\n$!3\"[\\N_i:P@)FQ7$Fgt$!3o#Q8&4#4I](FQ7$Fa]n$!3I6ee\\g*Gc'FQ7$F \\u$!3k#G'[P/hi`FQFfin7$Fau$!3dhRj&=K=G#FQ7$Fidl$!3urh,%*HF#*[Feu7$Fgu $\"3uy%\\30faL\"FQFbjnFejn7$F_bm$\"3XL4!y7(HEeFQF[[oF^[o7$F[w$\"3(Ry:r uuFE*FQ7$Fe[o$\"3(='RI?.ww%*FQ7$F`w$\"3i?frR%G)H'*FQF\\\\o7$Few$\"3H2X bk#ye\")*FQFd\\oFg\\oFj\\o7$Fdx$\"3/47Mb*ow***FQ7$Fix$\"3G?BB0-V****FQ Fc]o7$Fcy$\"3#eelq.p*****FQ7$Fhy$\"2sq(*=9$******F-7$F]z$\"2uIMTR)**** **F-7$Fbz$\"2aePhj*******F-Fb^o7$F\\[l$\"2'[fUy********F-Fh^oF[_o7$F[ \\l$\"2?RR(**********F-7$F`\\l$\"2=rO***********F-Fd_oF\\bpF^bpFbbp-F$ 6&7aoFecnFhcnFicnFjcnFj_oF[`oF\\`oF]`o7$FSF_gm7$FX$!2o!**************F -7$Fgn$!2[Y*************F-7$F\\o$!2w^(************F-7$Fao$!2M1')****** *****F-F_ao7$F[p$!2q`\"e**********F-7$F`p$!2q#R4)*********F-FhaoF[boF^ boFabo7$Fiq$!2G!4:#[\"******F-7$F^r$!3[/iTdf&*****FQ7$Fcr$!3i;I6Xav*** *FQ7$Fhr$!3ca8X_&>))***FQ7$F]s$!3'y9dMf_N***FQ7$Fcs$!3_UJQD4Wi**FQ7$F] cl$!3DmM%)[JC>**FQFicoF\\do7$F]t$!3O([\"H#f;vg*FQ7$Fedo$!3G\\:XRC#=T*F Q7$Fbt$!3s>zI$*)=H7*FQ7$Fi\\n$!34JQzjK%[o)FQ7$Fgt$!3U%FQ7$Fau$!3GyX @u^*Qf#FQF^fo7$Fidl$!3Fi'eEO.)*e&Feu7$Fgfo$\"3hx:fsgOv[Feu7$Fgu$\"3nQ^ a5vXB:FQ7$Fgam$\"3R1T\\qL)*=MFQ7$F\\v$\"3%*)o&4!)f!>2&FQ7$F_bm$\"3q0nw wqT?kFQFggo7$Ffv$\"3D%)\\R)z'Q%)))FQ7$F[w$\"3%[x*y4K,J&*FQ7$Fe[o$\"3&) QCL:nc%o*FQ7$F`w$\"30@F;a\"*Q)y*FQ7$F]\\o$\"3f#>cCD&Ge)*FQFiho7$Fcfl$ \"3j`'owFC*f**FQF_io7$F_x$\"3Y6o\"*=/())*********F-F`[p7$Ff[l$\"2;lg*** ********F-7$F[\\l$\"2!QF************F-7$F`\\l$\"2!e&)************F-7$F e\\l$\"2ou*************F-F\\bpF^bpFbbp-%+AXESLABELSG6%%\"xGQ!6\"-%%FON TG6#%(DEFAULTG-%%VIEWG6$;F(Fe\\lF_dr" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" "Curve 4" "Curve 5" "Curve 6" "Curve 7" "Curve 8" "Curve 9" "Curve 10" "Curve 11" "Cur ve 12" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 60 "plot(subs(mu=1,al pha=2,beta=0.3,factor(diff(f,x))),x=-5..5);" }}{PARA 13 "" 1 "" {GLPLOT2D 541 541 541 {PLOTDATA 2 "6%-%'CURVESG6$7_o7$$!\"&\"\"!$\"3U% *)enF&*=n%!#B7$$!3YLLLe%G?y%!#<$\"3@vk@D$HHr(F-7$$!3QmmT&esBf%F1$\"3-P l&>&y0$>\"!#A7$$!3ALL$3s%3zVF1$\"3TK0TGi`[>F97$$!3^LL$e/$QkTF1$\"3_XiE BOw#>$F97$$!3ommT5=q]RF1$\"3O(QoI1/#>_F97$$!3ILL3_>f_PF1$\"3bq-Z(fL;B) F97$$!3K++vo1YZNF1$\"3/())R#QNS>8!#@7$$!3;LL3-OJNLF1$\"3<*3HYZq\"\\@FS 7$$!3p***\\P*o%Q7$F1$\"3a1i3-=A&\\$FS7$$!3Kmmm\"RFj!HF1$\"3J9@)yAxPw&F S7$$!33LL$e4OZr#F1$\"3xC7$$!3Lmmmm`'zY\"F1$\"3k')4(GL\"Gl:F\\q7$$!3#****\\(=t)eC\"F1 $\"3G4#onWZof#F\\q7$$!3\"ommmh5$\\5F1$\"3k'z;_rs\\0%F\\q7$$!3S$***\\(= [jL)!#=$\"3Y$y=m;jPe'F\\q7$$!3*f***\\iXg#G'F_r$\"3_3FU'36w.\"F_r7$$!3n dmmT&Q(RTF_r$\"3v))=\\A^n\\;F_r7$$!3Ihm\"HdGe:$F_r$\"3AF?L#=B+.#F_r7$$ !3$\\mmTg=><#F_r$\"3#*\\^5$*Hw'[#F_r7$$!3g***\\7yQ16\"F_r$\"3%e/&R7Q&f 2$F_r7$$!3uDMLLe*e$\\Fgo$\"3g>#p&ReXuPF_r7$$\"3womT5D,`5F_r$\"3eR7T_%* 3?YF_r7$$\"3zrm;zRQb@F_r$\"3`.]z,+Z#e&F_r7$$\"3lOLL$e,]6$F_r$\"31jEdyA ]*\\'F_r7$$\"3_,+](=>Y2%F_r$\"3TI#*)3IdOY(F_r7$$\"36QLe*[K56&F_r$\"3Kx !*fyg<8&)F_r7$$\"3rumm\"zXu9'F_r$\"3tWMx\\XG3&*F_r7$$\"3#yLLe9i\"=sF_r $\"3B]RHRL*)R5F17$$\"3$4+++]y))G)F_r$\"37]K#)\\Xf16F17$$\"3V,+DJ?i7))F _r$\"3@x:^R9#)G6F17$$\"3%>++DcljL*F_r$\"3!)G/4FyKV6F17$$\"3=-]7GtB)f*F _r$\"3h`5s&f[v9\"F17$$\"3W-+v$44,')*F_r$\"3hnNBCCq\\6F17$$\"3Q+v$f3)>7 5F1$\"3\"GisOtt(\\6F17$$\"3H++]i_QQ5F1$\"3v7\")\\2?wZ6F17$$\"3U+](=-N( R6F1$\"3ZQ%)3L/4s(F_r7$$\"3jKLL$Qx$o;F1$\"37$oe(3$o))p'F_r7$$\"3bm m;z)Qjx\"F1$\"3A'H]oOxgq%F_r7$$\"3N L$ek`H@)>F1$\"3WAYe7#o$RRF_r7$$\"3@mm\"zpe*z?F1$\"3wh)yQWT!pKF_r7$$\"3 oL$e9\"=\"p=#F1$\"3dXE]:X?WEF_r7$$\"3;,++D\\'QH#F1$\"3r8%yZ8@R7#F_r7$$ \"3/n;zp%*\\%R#F1$\"3luct\"ys$>uH(H'Q \"F_r7$$\"3s++D1#=bq#F1$\"3G`U#[?aDv)F\\q7$$\"3\"HLL$3s?6HF1$\"3M$>?ml sT`&F\\q7$$\"3a***\\7`Wl7$F1$\"3S)3#*)Qz&[S$F\\q7$$\"3enmmm*RRL$F1$\"3 6=j'eE(=D@F\\q7$$\"3%zmmTvJga$F1$\"32?P^Ur[48F\\q7$$\"3^MLe9tOcPF1$\"3 O'[oaE\"4!4)Fgo7$$\"31,++]Qk\\RF1$\"3#zP,'\\zH$>&Fgo7$$\"3![LL3dg6<%F1 $\"3=q*pCjlH7$Fgo7$$\"3&ymmmw(GpVF1$\"3)f=Z&oC(4)>Fgo7$$\"3C++D\"oK0e% F1$\"3g[E!4*3.>7Fgo7$$\"36,+v=5s#y%F1$\"3yRA\"4x;%ewFS7$$\"\"&F*$\"3D` &[CStok%FS-%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*F_al-%+AXESLABELSG6$%\" xGQ!6\"-%%VIEWG6$;F(Fd`l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "F:=exp(-alpha*exp(-(x-mu)/beta));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"FG-%$expG6#,$*&%&alphaG\"\"\"-F&6#,$*&,&%\"xGF+%# muG!\"\"F+%%betaGF3F3F+F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 102 "for i from 1 to 6 do\n p[i]:=plot(subs(alpha=1,beta=i,mu=1,F),x= -5..5);\nod:\ndisplay(seq(p[i],i=0..5));" }}{PARA 13 "" 1 "" {GLPLOT2D 541 541 541 {PLOTDATA 2 "6*-%'CURVESG6$7Y7$$!\"&\"\"!$!2+T+a p*******!#<7$$!3YLLLe%G?y%F-$!2?]QUT*******F-7$$!3QmmT&esBf%F-$!2o.'Gl *)******F-7$$!3ALL$3s%3zVF-$!2))\\_z.)******F-7$$!3^LL$e/$QkTF-$!2/j3P E'******F-7$$!3ommT5=q]RF-$!2))o'z1H******F-7$$!3ILL3_>f_PF-$!2W]D%[r) *****F-7$$!3K++vo1YZNF-$!3Mh$\\'>i(*****!#=7$$!3;LL3-OJNLF-$!3O_-Gh]&* ****FQ7$$!3p***\\P*o%Q7$F-$!3W%)Qm]_\"*****FQ7$$!3Kmmm\"RFj!HF-$!3%*o% RRCP)****FQ7$$!33LL$e4OZr#F-$!3?7tXG3r****FQ7$$!3w*****\\n\\!*\\#F-$!3 !Ga4RrZ%****FQ7$$!3&)*****\\ixCG#F-$!3G[mT+C%*)***FQ7$$!3\"******\\KqP 2#F-$!3)=.Jp,A!)***FQ7$$!3:LL3-TC%)=F-$!3GPs\"*Hw]'***FQ7$$!3Zmmm\"4z) e;F-$!3A4'>K^MJ***FQ7$$!3Lmmmm`'zY\"F-$!3Ty\\B#*)Hy)**FQ7$$!3#****\\(= t)eC\"F-$!3KbPZh(>j(**FQ7$$!3\"ommmh5$\\5F-$!3,&=zKCLt&**FQ7$$!3S$*** \\(=[jL)FQ$!3bhpOQ0n=**FQ7$$!3*f***\\iXg#G'FQ$!3b4%o`>>*\\)*FQ7$$!3ndm mT&Q(RTFQ$!3Ky@gb$ykr*FQ7$$!3$\\mmTg=><#FQ$!3K8\"RgSBT\\*FQ7$$!3uDMLLe *e$\\!#?$!3_j(=tYsZ1*FQ7$$\"3zrm;zRQb@FQ$!3;3Q:%)y0k#)FQ7$$\"3_,+](=>Y 2%FQ$!3dMHnl//3rFQ7$$\"36QLe*[K56&FQ$!35s>u*)f2^iFQ7$$\"3rumm\"zXu9'FQ $!3Jq&3XV^7@&FQ7$$\"3#yLLe9i\"=sFQ$!3h'o>ZeGj%RFQ7$$\"3$4+++]y))G)FQ$! 3a\"4c!*zl<^#FQ7$$\"3%>++DcljL*FQ$!3&HGbe!ew@**!#>7$$\"3H++]i_QQ5F-$\" 3\"R/wN.N9v&Feu7$$\"3U+](=-N(R6F-$\"3\\O#G#o-'e1#FQ7$$\"3b++D\"y%3T7F- $\"3!R&\\#f&[YmMFQ7$$\"3F+]P4kh`8F-$\"36'f/!4g0d[FQ7$$\"3,++]P![hY\"F- $\"3(Q9wC`P(QgFQ7$$\"3KmmT5FEn:F-$\"3l.*4thi`\"pFQ7$$\"3jKLL$Qx$o;F-$ \"3T'4oBP(pEwFQ7$$\"3Z+++v.I%)=F-$\"3BD7&f\\\"z$o)FQ7$$\"3@mm\"zpe*z?F -$\"33YwC4B:Y#*FQ7$$\"3;,++D\\'QH#F-$\"3#\\l6*e=(ff*FQ7$$\"3'HL$e9S8& \\#F-$\"3+U5k**e1x(*FQ7$$\"3s++D1#=bq#F-$\"3\"pbbq%>y!))*FQ7$$\"3\"HLL $3s?6HF-$\"3w\"R'3(*=]N**FQ7$$\"3a***\\7`Wl7$F-$\"3\\le7ID9m**FQ7$$\"3 enmmm*RRL$F-$\"3+f(oi27=)**FQ7$$\"3%zmmTvJga$F-$\"3SKozN(p.***FQ7$$\"3 ^MLe9tOcPF-$\"3S'oVh+v[***FQ7$$\"31,++]Qk\\RF-$\"31;'*p6(Hr***FQ7$$\"3 ![LL3dg6<%F-$\"3W.tk>J_)***FQ7$$\"3&ymmmw(GpVF-$\"3S%y,s([=****FQ7$$\" 3C++D\"oK0e%F-$\"3o!QQB[n&****FQ7$$\"36,+v=5s#y%F-$\"3/')G>!=k(****FQ7 $$\"\"&F*$\"3'e&z];r()****FQ-%'COLOURG6&%$RGBG$\"*++++\"!\")$F*F*F`]l- F$6$7S7$F($\"3ZWhc'[O,@'!$$>7$F/$\"3Q%)*4P]V8G\"!$e\"7$F4$\"3PiZvQcY.G !$M\"7$F9$\"3Gb&**f%GhLo!$7\"7$F>$\"3#Q>nBNe#p5!#$*7$FC$\"3\"Hvu(p@E?W !#z7$FH$\"3QM*4_Or+q%!#o7$FM$\"3Iy>8#HrO,\"!#e7$FS$\"3(\\^&y7*f<&p!#^7 $FX$\"3ARE4(e,DX\"!#W7$Fgn$\"3CT;0(3T@c#!#R7$F\\o$\"3&oaVC$Q+!\\\"!#N7 $Fao$\"3Kc;\"*z1a$G%!#K7$Ffo$\"3wh;A\"Q5%*o#!#H7$F[p$\"3'ysR?Ybc1%!#F7 $F`p$\"3I*p=1>A+q\"!#D7$Fep$\"3c/owi=%GG'!#C7$Fjp$\"32kITFtW;v!#B7$F_q $\"3tRf\"\\*pVyy!#A7$Fdq$\"3mCU/#*Rr`U!#@7$Fiq$\"3;rE,V,y<>F_s7$F^r$\" 3*\\BKa)>GFhF_s7$Fcr$\"3-i(zy3mqj\"Feu7$Fhr$\"3H(Qg9k@ET$Feu7$F]s$\"3 \\W??uQFQ7$Fav$\"3;'=P(QM mdXFQ7$F[w$\"3Z![n9a1(R`FQ7$Few$\"3T&Rl$)>D(*)fFQ7$Fjw$\"3#=Yi'\\Gg;mF Q7$F_x$\"3mx'yO'G[?rFQ7$Fdx$\"3'G(*G_JKtB&R'\\x*FQ7$Fe\\l$\"3ClmhI2^=)*FQFi\\l-F$6$7S 7$F($\"3W#HQ[py@*=!#E7$F/$\"3HZV(e9\"[0:Fcal7$F4$\"3dpL.\\s2!o(Fcal7$F 9$\"3B*z](*)pbFSFgal7$F>$\"3PD?_P.%H!=F[bl7$FC$\"3;,2$pt%)p)oF[bl7$FH$ \"3w>Y=psq7@F_bl7$FM$\"3D5%G0.OO.'F_bl7$FS$\"3R/]&o$p3/;Fcbl7$FX$\"3*[ >!zL.faQFcbl7$Fgn$\"3(4Q3\"\\9xl')Fcbl7$F\\o$\"3o1]:V6@];F_s7$Fao$\"3@ E()R!)y$o<$F_s7$Ffo$\"3v*p)H/5vKdF_s7$F[p$\"3?J6I*=/3c*F_s7$F`p$\"3\\# 3ZV@JdX\"Feu7$Fep$\"3UvRtvTs%G#Feu7$Fjp$\"3o:k8#3?HA$Feu7$F_q$\"3,/-+# f&4CYFeu7$Fdq$\"39E%p6,2f;'Feu7$Fiq$\"3oT5J^gp(>)Feu7$F^r$\"3F,1nf'=k/ \"FQ7$Fcr$\"3qt$)o9J:;8FQ7$Fhr$\"3/kD$H\"Rf\"f\"FQ7$F]s$\"3(=2O#*HQ^\" >FQ7$Fcs$\"3o0^^I6uvAFQ7$Fhs$\"3\"f[1Q-Neg#FQ7$Fbt$\"3?ErJH9tuHFQ7$F\\ u$\"3Yyq:$4VWO$FQ7$Fgu$\"3[&4rD%eR\\PFQ7$Fav$\"3x1wxX\\?@TFQ7$F[w$\"30 g&R@7]*GXFQ7$Few$\"3GB9yj!Hu)[FQ7$Fjw$\"3n-^QNJ&*e_FQ7$F_x$\"3Q))4'[<] Ne&FQ7$Fdx$\"31g?;BsaBfFQ7$Fix$\"3i*4CYhy!GiFQ7$F^y$\"3UhIC?RhHlFQ7$Fc y$\"3E(>-0Elt!oFQ7$Fhy$\"3\\m\"y2]4*zqFQ7$F]z$\"3\\6#f9gw[K(FQ7$Fbz$\" 3\\O&)G[O%zb(FQ7$Fgz$\"3k\"[w->o@x(FQ7$F\\[l$\"37,lsn7sazFQ7$Fa[l$\"3j bn!)\\r'y9)FQ7$Ff[l$\"3V)=E/F,oI)FQ7$F[\\l$\"3'*f'HyU4FY)FQ7$F`\\l$\"3 ooQm*pD'*f)FQ7$Fe\\l$\"3am6$\\=IUt)FQFi\\l-F$6$7S7$F($\"3;X4J$*)*yzhFc bl7$F/$\"3)46]Gt-s.\"F_s7$F4$\"3#Q8kY,t+e\"F_s7$F9$\"3bNz@?@%*fCF_s7$F >$\"3toLpq5)\\s$F_s7$FC$\"3@RU?#4C:Z&F_s7$FH$\"3uO=\\+2AKwF_s7$FM$\"3: j!z\\e#R`5Feu7$FS$\"3(3gFSfbuV\"Feu7$FX$\"3*3hlk\"Qj=>Feu7$Fgn$\"3T6bx yZwHDFeu7$F\\o$\"3$H;%**H_(f<$Feu7$Fao$\"3MP&)=-'QY.%Feu7$Ffo$\"3%=?c: )\\^X]Feu7$F[p$\"3Zc1Q]r-nhFeu7$F`p$\"3pbTpsw*QJ(Feu7$Fep$\"3W`e(*4J\" z$))Feu7$Fjp$\"3Ou]aD5RE5FQ7$F_q$\"3t4!ywH>u?\"FQ7$Fdq$\"34(z2G2u1Q\"F Q7$Fiq$\"3(f0oz;^Re\"FQ7$F^r$\"3?w!)y!zR$*y\"FQ7$Fcr$\"3hc^#Ri*p9?FQ7$ Fhr$\"3a>bN/ITIAFQ7$F]s$\"3X!*4oMw7rCFQ7$Fcs$\"3'[!fd*pD%GFFQ7$Fhs$\"3 fwjX!>Ar&HFQ7$Fbt$\"3A(zu%pqq2KFQ7$F\\u$\"3Y[$\"3nLZ'*z\"HPj#Feu7$FC$\"3D6v!HQBA=$F eu7$FH$\"3&43;g,o!fPFeu7$FM$\"3+!)HD8*Q:J5FQ7$F[p$\"38#G2_O/u:\"FQ7$F`p$ \"3nO2*HQi)y7FQ7$Fep$\"3!)>ESW0QJ9FQ7$Fjp$\"31()z^6J7n:FQ7$F_q$\"3PB8A i!*4Kpl 5%FQ7$Few$\"3IB![\"yhw!H%FQ7$Fjw$\"3w**)ySw_e[%FQ7$F_x$\"3.dw;Z%\\3m%F Q7$Fdx$\"38'[RUZa)\\[FQ7$Fix$\"3#o'H/!op^-&FQ7$F^y$\"3?HC+`V]0_FQ7$Fcy $\"3h9\\E&*Qmy`FQ7$Fhy$\"3jRX]+`NcbFQ7$F]z$\"3(>pD+X4Qs&FQ7$Fbz$\"3!\\ $z!emJ6*eFQ7$Fgz$\"3!erq0m&*H0'FQ7$F\\[l$\"33Z1CEu/)>'FQ7$Fa[l$\"3v>;$ e?])fjFQ7$Ff[l$\"3A+Wba'y/]'FQ7$F[\\l$\"3b88\\g[h$Feu7$F/$\" 3Qo)oZ'p&[;%Feu7$F4$\"31$H3%RW\"zo%Feu7$F9$\"3[)o_hPqpK&Feu7$F>$\"3D0' *e$=4d-'Feu7$FC$\"3jJHZw'erx'Feu7$FH$\"3'>,V7[kT_(Feu7$FM$\"3CZp$opE([ $)Feu7$FS$\"3fQ8rt'*)eD*Feu7$FX$\"3]+<+)[d9-\"FQ7$Fgn$\"3()GGV\\&Qc7\" FQ7$F\\o$\"3lLhTZ(o>A\"FQ7$Fao$\"3Y)\\\"QG*y`L\"FQ7$Ffo$\"3&f-zJG`VX\" FQ7$F[p$\"3tnh'QHFOd\"FQ7$F`p$\"3+$f&3bZn&o\"FQ7$Fep$\"3]Tx9lFFB=FQ7$F jp$\"31fBwS6JV>FQ7$F_q$\"3$oC'RO^l'3#FQ7$Fdq$\"3,!pOtB,m@#FQ7$Fiq$\"3w v2bc7v](QB;`EFQ7$Fhr$\"3+tb@Tib #z#FQ7$F]s$\"3tMUBo)3Y%HFQ7$Fcs$\"3k7NlXS2/JFQ7$Fhs$\"3paY\")y$yQC$FQ7 $Fbt$\"3/G#oH,DcR$FQ7$F\\u$\"3HCHR4>#Hb$FQ7$Fgu$\"3\")3RmKk.2PFQ7$Fav$ \"3G?*oOz1h&QFQ7$F[w$\"3.acr8@G@SFQ7$Few$\"3d()GuWd9pTFQ7$Fjw$\"3_')fE xN>EVFQ7$F_x$\"3jda+$HjvY%FQ7$Fdx$\"3>]*eQs()3i%FQ7$Fix$\"3n@Nww%*zjZF Q7$F^y$\"32Y`t(f+;\"\\FQ7$Fcy$\"3[n%o8-yV0&FQ7$Fhy$\"391oiy]'=?&FQ7$F] z$\"3)*[#G9F]=M&FQ7$Fbz$\"3(>`\">!e#y#[&FQ7$Fgz$\"3=!4kI'G@?cFQ7$F\\[l $\"37?'Gf&*eVu&FQ7$Fa[l$\"3**=kIJO.%)eFQ7$Ff[l$\"34d\"RumEl+'FQ7$F[\\l $\"3ZT#32ALX8'FQ7$F`\\l$\"34U$zNl!\\aiFQ7$Fe\\l$\"3#p=?emh0Q'FQFi\\l-% +AXESLABELSG6%%\"xGQ!6\"-%%FONTG6#%(DEFAULTG-%%VIEWG6$;F(Fe\\lF]^o" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" "Curve 4" "Curve 5" "Curve 6" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "phi: =tanh((x-mu)/alpha);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$phiG-%%tanh G6#*&,&%\"xG\"\"\"%#muG!\"\"F+%&alphaGF-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "phi := tanh((x-mu)/alpha);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$phiG-%%tanhG6#*&,&%\"xG\"\"\"%#muG!\"\"F+%&alphaGF- " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 93 "restart:\nphi := tanh(( x-mu)/alpha);\nassume(q>-1,q<1);\nsys:=subs(x=x1,phi)=0,subs(x=x2,phi) =q;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$phiG-%%tanhG6#*&,&%\"xG\"\" \"%#muG!\"\"F+%&alphaGF-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$sysG6$/ -%%tanhG6#*&,&%#x1G\"\"\"%#muG!\"\"F-%&alphaGF/\"\"!/-F(6#*&,&%#x2GF-F .F/F-F0F/%#q|irG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "sol:=al lvalues(solve(\{sys\},\{mu,alpha\}));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG6$<$/%#muG%#x1G/%&alphaG,$*(\"\"#\"\"\",&%#x2G!\"\"F)F/F/-%# lnG6#,$*&,&F/F2%#q|irGF/F/,&F/F/F9F/F2F2F2F/<$F'/F+*&F0F/-F46#,$*$F6#F /F.F2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 48 "phiinv:=subs(sol [1],convert(solve(phi=y,x),ln));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% 'phiinvG,&%#x1G\"\"\"**\"\"#F',&*&#F'F)F'-%#lnG6#,&%\"yGF'F'F'F'F'*&#F 'F)F'-F.6#,&F'F'F1!\"\"F'F7F',&%#x2GF7F&F'F'-F.6#,$*&,&F'F7%#q|irGF'F' ,&F'F'F?F'F7F7F7F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "J:=co nvert(subs(sol[1],x=phiinv,diff(phi,x)),exp);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"JG,$*&#\"\"\"\"\"#F(*(,&F(F(*$)%\"yGF)F(!\"\"F(,&%# x2GF/%#x1GF(F/-%#lnG6#,$*&,&F(F/%#q|irGF(F(,&F(F(F9F(F/F/F(F(F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "simplify(subs(x=solve(phi=q, x),diff(phi,x)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&\"\"\"!\"\" *$)%#q|irG\"\"#F&F&F&%&alphaGF'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "ff:=collect(factor(convert(solve(phi=q,x),ln)),ln);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#ffG,(%#muG\"\"\"*&#F'\"\"#F'*&%&a lphaGF'-%#lnG6#,&F'F'%#q|irGF'F'F'F'*&#F'F*F'*&F,F'-F.6#,&F'F'F1!\"\"F 'F'F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 84 "subs(q=0,ff);\neva lf[25](simplify(solve(subs(q=3/4,ff)-subs(q=1/4,ff)=m3-m1,alpha)));" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#%#muG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&$\":EY\\?s7fN8YOR\"!#C\"\"\"%#m3GF(F(*&$\":EY\\?s7fN8YOR\"F' F(%#m1GF(!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+hVH'Q\"!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "14 0 0" 30 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidCovarianceGauss.txt000066400000000000000000000063241307543307100231470ustar00rootroot00000000000000> restart: > f:=(exp(alpha*(x-mu))-exp(-beta*(x-mu)))/(exp(alpha*(x-mu))+exp(-beta* > (x-mu))); exp(alpha (x - mu)) - exp(-beta (x - mu)) f := ----------------------------------------- exp(alpha (x - mu)) + exp(-beta (x - mu)) > with(plots): > for i from 0 to 6 do > p[i]:=plot(subs(alpha=3,beta=i,mu=1,f),x=-5..5); > > q[i]:=plot(subs(alpha=i,beta=3,mu=1,f),x=-5..5,color="green",style="po > int",symbol="circle"); > od: > display(seq(p[i],i=0..5),seq(q[i],i=0..5)); > > plot(subs(mu=1,alpha=2,beta=0.3,factor(diff(f,x))),x=-5..5); > F:=exp(-alpha*exp(-(x-mu)/beta)); x - mu F := exp(-alpha exp(- ------)) beta > for i from 1 to 6 do > p[i]:=plot(subs(alpha=1,beta=i,mu=1,F),x=-5..5); > od: > display(seq(p[i],i=0..5)); > > phi:=tanh((x-mu)/alpha); x - mu phi := tanh(------) alpha > phi := tanh((x-mu)/alpha); x - mu phi := tanh(------) alpha > restart: > phi := tanh((x-mu)/alpha); > assume(q>-1,q<1); > sys:=subs(x=x1,phi)=0,subs(x=x2,phi)=q; x - mu phi := tanh(------) alpha x1 - mu x2 - mu sys := tanh(-------) = 0, tanh(-------) = q~ alpha alpha > sol:=allvalues(solve({sys},{mu,alpha})); 2 (-x2 + x1) sol := {mu = x1, alpha = -------------}, -1 + q~ ln(- -------) 1 + q~ -x2 + x1 {mu = x1, alpha = -------------------} / -1 + q~\1/2 ln(-|- -------| ) \ 1 + q~ / > phiinv:=subs(sol[1],convert(solve(phi=y,x),ln)); 2 (1/2 ln(y + 1) - 1/2 ln(1 - y)) (-x2 + x1) phiinv := x1 + -------------------------------------------- -1 + q~ ln(- -------) 1 + q~ > J:=convert(subs(sol[1],x=phiinv,diff(phi,x)),exp); 2 -1 + q~ (1 - y ) ln(- -------) 1 + q~ J := 1/2 ---------------------- -x2 + x1 > simplify(subs(x=solve(phi=q,x),diff(phi,x))); 2 -1 + q~ - -------- alpha > ff:=collect(factor(convert(solve(phi=q,x),ln)),ln); ff := mu + 1/2 alpha ln(1 + q~) - 1/2 alpha ln(1 - q~) > subs(q=0,ff); > evalf[25](simplify(solve(subs(q=3/4,ff)-subs(q=1/4,ff)=m3-m1,alpha))); mu 1.393646133559127220494626 m3 - 1.393646133559127220494626 m1 > -1.386294361 > openturns-1.9/validation/src/ValidCovarianceMatrixLapack.sce000066400000000000000000000001541307543307100243730ustar00rootroot00000000000000clear all matrix1=[1,0.5;0.5,1] pt = [5;0] result = matrix1 \ pt det(matrix1) spec(matrix1) chol(matrix1) openturns-1.9/validation/src/ValidCramerVonMises.mws000066400000000000000000000110041307543307100227450ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 239 "restart:\nf:=piecew ise(WW < 0.0275, 1 - exp(-13.953 + 775.5 * WW - 12542.61 * WW^2),WW < \+ 0.051, 1 - exp(-5.903 + 179.546 * WW - 1515.29 * WW^2), WW < 0.092, ex p(0.886 - 31.62 * WW + 10.897 * WW^2), exp(1.111 - 34.242 * WW + 12.83 2 * WW^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG-%*PIECEWISEG6&7$ ,&\"\"\"F*-%$expG6#,($\"&`R\"!\"$!\"\"*&$\"%bxF2F*%#WWGF*F**&$\"(hUD\" !\"#F*)F6\"\"#F*F2F22F6$\"$v#!\"%7$,&F*F*-F,6#,($\"%.fF1F2*&$\"'Y&z\"F 1F*F6F*F**&$\"'H::F:F*F;F*F2F22F6$\"#^F17$-F,6#,($\"$'))F1F**&$\"%iJF: F*F6F*F2*&$\"&(*3\"F1F*F;F*F*2F6$\"##*F17$-F,6#,($\"%66F1F**&$\"&UU$F1 F*F6F*F2*&$\"&KG\"F1F*F;F*F*%*otherwiseG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "plot(f,WW=-1..2);" }}{PARA 13 "" 1 "" {GLPLOT2D 279 279 279 {PLOTDATA 2 "6%-%'CURVESG6$7fo7$$!\"\"\"\"!$\"\"\"F*7$$!3Z**** *\\P&3Y$*!#=F+7$$!3C++Dcx6x()F0F+7$$!3b++]iTDP\")F0F+7$$!3C****\\P\"\\ J\\(F0F+7$$!3g***\\7V0@&oF0F+7$$!3x++DcexdiF0F+7$$!3j***\\i+#QUcF0F+7$ $!3$****\\i!3%f+&F0F+7$$!3<++D\"oS:P%F0F+7$$!3h*****\\<#)*=PF0F+7$$!3# *****\\(G3U9$F0F+7$$!3[*****\\-\\r\\#F0F+7$$!3>+++vGVZ=F0F+7$$!3_***** \\(4J@7F0F+7$$!3;,+]iIKFl!#>F+7$$!3))***\\i!z%o9$FenF+7$$\"3'R,++]siL# !#?$\"3_741!=]*****F07$$\"3\"R,]P%[!f\"fF\\o$\"3'fg(p(zZ%****F07$$\"3% Q,+v=Pb\\*F\\o$\"3S=]\\=>c&***F07$$\"3Q,v$fLN&G6Fen$\"3P0#yj#p%)))**F0 7$$\"3Q,]7`p^28Fen$\"38plXyg8u**F07$$\"3Q,DJq&)\\'[\"Fen$\"3H[_0BHlW** F07$$\"3P,+](=![l;Fen$\"3Ylb#H?12*)*F07$$\"3O,+DcmS\"Q#Fen$\"3n9uqFp%f D*F07$$\"3O,++DJL(4$Fen$\"3K&R*H;:kR$)F07$$\"3N,]PfjHbMFen$\"3zAOx*ztq y(F07$$\"3M,+v$ffK\"QFen$\"3>$QLU5]H;(F07$$\"3M,]7GGArTFen$\"3UcO,VzL, lF07$$\"3L,+]ig=HXFen$\"3S&>\"HM;x\\eF07$$\"3K,](oH\\r)[Fen$\"3)fxi/jy VE&F07$$\"3K,+DJD6X_Fen$\"3FyTSmU5fZF07$$\"3J,]ild2.cFen$\"37:xd_'>yE% F07$$\"3J,+++!R5'fFen$\"3ii#[Xa>$GQF07$$\"3!4](oz;$Qz'Fen$\"3W%z$[tIFw HF07$$\"3\\+]PfViEwFen$\"3$*pKY?;O#)4kaq !=F07$$\"3o***\\(=(4AH*Fen$\"3#*Gg1(QF&39F07$$\"3))*\\7y]zd4\"F0$\"3?5 Kj4s::$)Fen7$$\"3\")***\\P/QBE\"F0$\"3$f%\\Xop(Q%\\Fen7$$\"3k*\\7.dq(4 9F0$\"3SXk#p'G()QJFen7$$\"3Z**\\(o4.sb\"F0$\"3cRQ5X>-/?Fen7$$\"3I*\\PM iNYq\"F0$\"317$)>e1j'G\"Fen7$$\"38******\\\"o?&=F0$\"35cOuC)*o1$)F\\o7 $$\"3*)**\\(o%=ev@F0$\"3#3c]u;gHC$F\\o7$$\"3k++vVb4*\\#F0$\"3GuFUD.`+8 F\\o7$$\"3w++DJ'=_6$F0$\"3cx9,YpPeC!#@7$$\"3#4++vVy!ePF0$\"3s]`^Yw1'z% !#A7$$\"3'4+](=WU[VF0$\"3OTSyDA,u6Ffx7$$\"3s****\\7B>&)\\F0$\"3l^Ngwl3 WG!#B7$$\"3w***\\P>:mk&F0$\"35PB\"R#eb\"G(!#C7$$\"3d***\\iv&QAiF0$\"3Y B7]o<&oV#Fgy7$$\"3j++]PPBWoF0$\"3f#\\`pD$R?#)!#D7$$\"3&*)*****\\Nm'[(F 0$\"34F:y2f#*oHFbz7$$\"36****\\(yb^6)F0$\"32xQ2W6b97Fbz7$$\"3')***\\PM aKs)F0$\"3Jq*>N$=$Hj&!#E7$$\"3c****\\7TW)R*F0$\"3W+(R,!)4Co#Fb[l7$$\"3 z*****\\@80+\"!#<$\"3d(R^G$*e<_\"Fb[l7$$\"30++]7,Hl5F[\\l$\"3Xt)>cz$3@ #*!#F7$$\"3')**\\P4w)R7\"F[\\l$\"37a9]!yusU'Fc\\l7$$\"3<++]x%f\")=\"F[ \\l$\"3K3gh\\*QGz%Fc\\l7$$\"3!)**\\P/-a[7F[\\l$\"3z>ZTWI'\\+%Fc\\l7$$ \"3/+](=Yb;J\"F[\\l$\"3E2jIOynoOFc\\l7$$\"3()****\\i@Ot8F[\\l$\"3+]&Ra j>qr$Fc\\l7$$\"3')**\\PfL'zV\"F[\\l$\"3I:Q=,sE%=%Fc\\l7$$\"3>+++!*>=+: F[\\l$\"3shHo'pQ%*=&Fc\\l7$$\"3.++DE&4Qc\"F[\\l$\"3!p#>;2%3u;(Fc\\l7$$ \"3=+]P%>5pi\"F[\\l$\"3)HG?KbtR4\"Fb[l7$$\"39+++bJ*[o\"F[\\l$\"3*oKd+e ibw\"Fb[l7$$\"34++Dr\"[8v\"F[\\l$\"3[g7UZi&zR$Fb[l7$$\"3++++Ijy5=F[\\l $\"3E@Je->'yr'Fb[l7$$\"32+]P/)fT(=F[\\l$\"3B]$[*[DQN:Fbz7$$\"31+]i0j\" [$>F[\\l$\"3'e&oq'3Y-t$Fbz7$$\"\"#F*$\"3*)4E\\OM$e2\"Fgy-%'COLOURG6&%$ RGBG$\"#5F)$F*F*Feal-%+AXESLABELSG6$Q#WW6\"Q!Fjal-%%VIEWG6$;F(F[al%(DE FAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "solve(1.111 - 34.242 * WW + 12.832 * WW^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$$\"+4^jNE! \"*$\"+9G*\\G$!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "solve( exp(-13.953 + 775.5 * WW - 12542.61 * WW^2)=1.0e-253,WW);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$$!+&yZB%=!#5$\"+],kgCF%" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidCramerVonMises.txt000066400000000000000000000016311307543307100227630ustar00rootroot00000000000000> restart: > f:=piecewise(WW < 0.0275, 1 - exp(-13.953 + 775.5 * WW - 12542.61 * > WW^2),WW < 0.051, 1 - exp(-5.903 + 179.546 * WW - 1515.29 * WW^2), WW > < 0.092, exp(0.886 - 31.62 * WW + 10.897 * WW^2), exp(1.111 - 34.242 * > WW + 12.832 * WW^2)); f := { 2 { 1 - exp(-13.953 + 775.5 WW - 12542.61 WW ) , WW < 0.0275 2 1 - exp(-5.903 + 179.546 WW - 1515.29 WW ) , WW < 0.051 2 exp(0.886 - 31.62 WW + 10.897 WW ) , WW < 0.092 2 exp(1.111 - 34.242 WW + 12.832 WW ) , otherwise > plot(f,WW=-1..2); > solve(1.111 - 34.242 * WW + 12.832 * WW^2); 2.635635109, 0.03284992814 > solve(exp(-13.953 + 775.5 * WW - 12542.61 * WW^2)=1.0e-253,WW); -0.1842347785, 0.2460640150 > openturns-1.9/validation/src/ValidCumulativeDistributionNetwork.mw000066400000000000000000000504251307543307100257670ustar00rootroot00000000000000 restart: Digits:=20: with(Statistics): PHI:=CDF(RandomVariable(Normal(0,1)),x): cdf:=PHI^2*subs(x=y,PHI)^2: pdf:=diff(diff(cdf,x),y): quantile:=solve(subs(x=t,y=t,cdf)=q,t)[1]: survival:=int(int(subs(x=s,y=t,pdf),s=x..infinity),t=y..infinity): mean:=int(int(x*pdf,x=-infinity..infinity),y=-infinity..infinity): var:=int(int((x-mean)^2*pdf,x=-infinity..infinity),y=-infinity..infinity): std:=sqrt(var): skew:=int(int((x-mean)^3*pdf,x=-infinity..infinity),y=-infinity..infinity)/std^3: kurt:=int(int((x-mean)^4*pdf,x=-infinity..infinity),y=-infinity..infinity)/std^4: cov:=int(int((x-mean)*(y-mean)*pdf,x=-infinity..infinity),y=-infinity..infinity): evalf(subs(x=1.0,y=1.0,q=0.95,["cdf",cdf,"pdf",pdf,"survival",survival,"quantile",quantile,"mean",mean,"std",std,"skew",skew,"kurt",kurt,"var",var,"cov",cov])); NzZRJGNkZjYiJCI1LyczcGVZcHIxLCYhIz9RJHBkZkYkJCI1IVsyJlIkKltjIXlsIkYnUSlzdXJ2aXZhbEYkJCI0UGJxZSIqZj9YYClGJ1EpcXVhbnRpbGVGJCQiNTMsN11BdkMrTUEhIz5RJW1lYW5GJCQiNSZwR2N4YSRlKj1rJkYnUSRzdGRGJCQiNUQlUWNsPHJfa0QpRidRJXNrZXdGJCQiNXdKRGw2dHdbcDhGJ1Ela3VydEYkJCI1IXBrSz5hSlc8MSRGMVEkdmFyRiQkIjVaRyQ0aSJRNiFwIm9GJ1EkY292RiQkIiIhRkM= openturns-1.9/validation/src/ValidDiff.mws000066400000000000000000000036701307543307100207320ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 201 "restart:\nValNum:=x =1,y=1;\nf1:=sqrt(x^2+y^2);\nf2:=arctan(y/x);\ng11:=diff(f1,x);\ng21:= diff(f1,y);\ng12:=diff(f2,x);\ng22:=diff(f2,y);\nevalf(subs(ValNum,));\nevalf(subs(ValNum,<|>));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%'ValNumG6$/%\"xG\"\"\"/%\"yGF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f1G*$,&*$)%\"xG\"\"#\"\"\"F+*$)%\"yGF*F+F+#F+F*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f2G-%'arctanG6#*&%\"yG\"\"\"%\"xG! \"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$g11G*&,&*$)%\"xG\"\"#\"\"\" F+*$)%\"yGF*F+F+#!\"\"F*F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$g21 G*&,&*$)%\"xG\"\"#\"\"\"F+*$)%\"yGF*F+F+#!\"\"F*F.F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$g12G,$*(%\"yG\"\"\"%\"xG!\"#,&F(F(*&F'\"\"#F)F*F( !\"\"F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$g22G*&\"\"\"F&*&%\"xGF&, &F&F&*&%\"yG\"\"#F(!\"#F&F&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-% 'RTABLEG6%\"*;8bM\"-%'VECTORG6#7$$\"+iN@99!\"*$\"+M;)R&y!#5&%'VectorG6 #%$rowG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*g6eN\"-%'MAT RIXG6#7$7$$\"+5y1rq!#5$!+++++]F.7$F,$\"+++++]F.%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 2 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 134551316 135581160 }{RTABLE M7R0 I6RTABLE_SAVE/134551316X*%)anythingG6"6"[gl!$%!!!"#"#$"+iN@99!"*$"+M;)R&y!#5F& } {RTABLE M7R0 I6RTABLE_SAVE/135581160X,%)anythingG6"6"[gl!"%!!!#%"#"#$"+5y1rq!#5F'$!+++++]F)$ "+++++]F)F& } openturns-1.9/validation/src/ValidDiff.txt000066400000000000000000000030751307543307100207420ustar00rootroot00000000000000> restart: > ValNum:=x=1,y=1; > f1:=sqrt(x^2+y^2); > f2:=arctan(y/x); > g11:=diff(f1,x); > g21:=diff(f1,y); > g12:=diff(f2,x); > g22:=diff(f2,y); > evalf(subs(ValNum,)); > evalf(subs(ValNum,<|>)); ValNum := x = 1, y = 1 2 2 1/2 f1 := (x + y ) f2 := arctan(y/x) x g11 := ------------ 2 2 1/2 (x + y ) y g21 := ------------ 2 2 1/2 (x + y ) y g12 := - ------------- / 2 \ 2 | y | x |1 + ----| | 2 | \ x / 1 g22 := ------------ / 2 \ | y | x |1 + ----| | 2 | \ x / [1.414213562, 0.7853981634] [0.7071067810 -0.5000000000] [ ] [0.7071067810 0.5000000000 ] > openturns-1.9/validation/src/ValidDistFunc.mws000066400000000000000000000101541307543307100215740ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "evalf[25](log(4));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":kW$)=1*)>6O%H'Q\"!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "evalf[25](1+log(9/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":eKPtSFwnRxS]#!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "factor(subs(t=(1-a)/(b+1-a),b*t/(b*t+a*(1-t)^b))); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(%\"bG\"\"\",&F&!\"\"%\"aGF&F&, ,F%F&*&F%F&F)F&F(*(F)F&)*&F%F&,(F%F&F&F&F)F(F(F%F&F%F&F&*&F)F&F-F&F&*& )F)\"\"#F&F-F&F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "plo t(\{mu,sqrt(2*mu*log(128*mu/Pi))\},mu=6..13);" }}{PARA 13 "" 1 "" {GLPLOT2D 272 272 272 {PLOTDATA 2 "6&-%'CURVESG6$7S7$$\"\"'\"\"!F(7$$ \"3\\mm;z+e_h!#R`G'F.F07$$\"3RmmT&pSYV'F.F37$$\"3jmm\"z '=$\\e'F.F67$$\"31L$3Ft3Xt'F.F97$$\"3cm;aLc=toF.F<7$$\"3J+](=`xn,(F.F? 7$$\"3$omT&y/GlrF.FB7$$\"3y**\\PurI8tF.FE7$$\"3wLL$e#3dluF.FH7$$\"3!om ;Ht%o*f(F.FK7$$\"3w++]F_m]xF.FN7$$\"3i****\\icE-zF.FQ7$$\"3f++]s2O[!)F .FT7$$\"3vm;aG\"H5=)F.FW7$$\"32LL$ej%yQ$)F.FZ7$$\"36MLLVUUs%)F.Fgn7$$ \"35+](o()yyi)F.Fjn7$$\"3%GLL$oD[l()F.F]o7$$\"3#3+voibk\"*)F.F`o7$$\"3 W,]i!o<-1*F.Fco7$$\"3qLL3-$=-@*F.Ffo7$$\"32M$3xplzM*F.Fio7$$\"3/nm\"H( [a'\\*F.F\\p7$$\"3Km;ayo(3l*F.F_p7$$\"3k+]7VLA&y*F.Fbp7$$\"3&ym;a?@.$* *F.Fep7$$\"3+++]\\@-35!#;Fhp7$$\"3&***\\PopoA5FjpF\\q7$$\"31+voMf(o.\" FjpF_q7$$\"3)***\\ii.j_5FjpFbq7$$\"3GLL$oT'ym5FjpFeq7$$\"34++DE5!>3\"F jpFhq7$$\"3kmT&)3rf&4\"FjpF[r7$$\"3,++vW0d56FjpF^r7$$\"3KL3-\"QfY7\"Fj pFar7$$\"3%**\\PWF'QR6FjpFdr7$$\"3ELLe/Xy`6FjpFgr7$$\"31+v=<\"e)o6FjpF jr7$$\"3ymmm(zvL=\"FjpF]s7$$\"3qm;zAAA)>\"FjpF`s7$$\"3VL3-7d%H@\"FjpFc s7$$\"3+++]p]ZE7FjpFfs7$$\"3QL$e*R7)>C\"FjpFis7$$\"3qmmmV,&eD\"FjpF\\t 7$$\"36+vo(GP1F\"FjpF_t7$$\"31+DJr/z%G\"FjpFbt7$$\"#8F*Fet-%'COLOURG6& %$RGBG$\"*++++\"!\")$F*F*F^u-F$6$7S7$F($\"33_T!*F.7$FE$\"3%pC\"z%=/%G\"*F.7$FH$\"3q+mXjlgR#*F.7$FK$ \"35F_$\\TKnL*F.7$FN$\"3OI`>Ax!faQvd+\"Fjp7$F]o$\"3*3)R?x78:5Fjp7$F`o$\"3SdL'p=A`-\"F jp7$Fco$\"3?!y=&Qg&\\.\"Fjp7$Ffo$\"3W$)G&p`O\\/\"Fjp7$Fio$\"31]'fs$*QS 0\"Fjp7$F\\p$\"3p?(*ox6zj5Fjp7$F_p$\"3)fXI&e,&Q2\"Fjp7$Fbp$\"3%p8R7,\\ D3\"Fjp7$Fep$\"3;(e'RP^)=4\"Fjp7$Fhp$\"3*HC9pPn95\"Fjp7$F\\q$\"30o3qh6 y56Fjp7$F_q$\"3V]\"Qt'ot>6Fjp7$Fbq$\"3;9'Gxf<'H6Fjp7$Feq$\"3N?>_./WQ6F jp7$Fhq$\"3%H,UA$Q!y9\"Fjp7$F[r$\"3^T_q%yQi:\"Fjp7$F^r$\"3VtQ*\\O2a;\" Fjp7$Far$\"3hXeG3Y)R<\"Fjp7$Fdr$\"3qTl9k(**G=\"Fjp7$Fgr$\"3SS9e>pc\"> \"Fjp7$Fjr$\"3:VRc@'*e+7Fjp7$F]s$\"3x%*4Q76B47Fjp7$F`s$\"3\"f!Gf++-=7F jp7$Fcs$\"3Ok,JM()oE7Fjp7$Ffs$\"3MVA#e]8YB\"Fjp7$Fis$\"3*>JBa$)[OC\"Fj p7$F\\t$\"3wp!)o'*zo^7Fjp7$F_t$\"3)4q&R:j@g7Fjp7$Fbt$\"3.oG*f+Q$o7Fjp7 $Fet$\"3#Q/z#**=-x7Fjp-Fht6&Fjt$\")Vyg>F]u$\")d@R!)F]uFg^l-%+AXESLABEL SG6$%#muGQ!6\"-%%VIEWG6$;F(Fet%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "evalf[25](128/Pi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":DMo&f?D:VlOuS!#B" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "evalf[25](exp(1/78));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":^&=$e=+Kz/.H,\"!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "evalf[25](sqrt(Pi/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":#) y?^-]:t89LD\"!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "7 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidDistFunc.txt000066400000000000000000000014021307543307100216010ustar00rootroot00000000000000> evalf[25](log(4)); 1.386294361119890618834464 > evalf[25](1+log(9/2)); 2.504077396776274073373258 > factor(subs(t=(1-a)/(b+1-a),b*t/(b*t+a*(1-t)^b))); / - b (-1 + a)/| \ / b \b / b \b 2 / b \b b - b a + a |---------| b + a |---------| - a |---------| \b + 1 - a/ \b + 1 - a/ \b + 1 - a/ \ | / > plot({mu,sqrt(2*mu*log(128*mu/Pi))},mu=6..13); > evalf[25](128/Pi); 40.74366543152520595683425 > evalf[25](exp(1/78)); 1.012903047932001858318551 > evalf[25](sqrt(Pi/2)); 1.253314137315500251207882 > openturns-1.9/validation/src/ValidDistribution.mws000066400000000000000000001010641307543307100225350ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 818 "restart:\nwith(Stat istics):\nassume(u<1,u>0,r>0,t>r);\nbeta_:=RandomVariable(Beta(r,t-r)) :\npdf:=factor(subs(u=(x-a)/(b-a),PDF(beta_,u))/(b-a));\nddf:=(diff(pd f,x));\ncdf:=subs(u=(x-a)/(b-a),CDF(beta_,u));\nmu_:=a+(b-a)*Mean(beta _);\nvar_:=(b-a)^2*Variance(beta_);\nsol:=subs(m='mu',v='var',solve(\{ mu_=m,var_=v\},\{r,t\}));\nqdf:=a+(b-a)*Quantile(beta_,p);\nqdf2:=solv e(cdf=p,x);\npdfgr:=map(_x->factor(subs(t=r+s,_x)),[diff(pdf, r)/pdf,d iff(pdf, t)/pdf,diff(pdf, a)/pdf,diff(pdf, b)/pdf]);\ncdfgr:=[diff(cdf , r),diff(cdf, t),diff(cdf, a),diff(cdf, b)];\nvalnum:=r=1,t=3,a=-2,b= 2:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\nevalf( subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); \nevalf(subs(valnum,x=1,cdfgr));\nevalf(solve(subs(valnum,cdf)=0.95,x) );\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,var_));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$pdfG,$**)*&,&%\"xG!\"\"%\"aG\"\"\"F-,&%\"bGF+ F,F-F+,&F-F+%#r|irGF-F-)*&,&F/F+F*F-F-F.F+,(%#t|irGF-F1F+F-F+F--%%Beta G6$F1,&F6F-F1F+F+F.F+F+" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$ddfG,&*. )*&,&%\"xG!\"\"%\"aG\"\"\"F-,&%\"bGF+F,F-F+,&F-F+%#r|irGF-F-F0F-F)F+)* &,&F/F+F*F-F-F.F+,(%#t|irGF-F1F+F-F+F--%%BetaG6$F1,&F6F-F1F+F+F.F+F-*. F'F-F2F-F5F-F4F+F7F+F.F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG* *-%%BetaG6$%#r|irG,&%#t|irG\"\"\"F)!\"\"F-F)F-)*&,&%\"xGF,%\"aGF-F,,&% \"bGF,F2F-F-F)F,-%*hypergeomG6%7$F),(F+F-F)F,F,F,7#,&F,F,F)F,F/F," }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%\"aG\"\"\"*(,&%\"bGF'F&!\"\" F'%#r|irGF'%#t|irGF+F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*,,& %\"bG\"\"\"%\"aG!\"\"\"\"#%#r|irGF(,&%#t|irGF(F,F*F(F.!\"#,&F.F(F(F(F* " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%#r|irG,$*(,2*&)%\"aG\" \"#\"\"\"%#muGF/!\"\"*&%\"bGF/F,F/F/*&F-F/%$varGF/F/*(F.F/F-F/)F0F.F/F /**F.F/F3F/F-F/F0F/F1*&F3F/F7F/F/*&F5F/F0F/F1*$)F0\"\"$F/F1F/,&F3F1F-F /F1F5F1F1/%#t|irG,$*&,,*&F-F/F0F/F1*&F3F/F-F/F/F5F/*$F7F/F/*&F0F/F3F/F 1F/F5F1F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG%%FAILG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G-%'RootOfG6#,&*&),$*&,&%#_ZG\"\"\"% \"aG!\"\"F/,&%\"bGF1F0F/F1F1%#r|irGF/-%*hypergeomG6%7$F4,(%#t|irGF1F4F /F/F/7#,&F/F/F4F/F+F/F1*(%\"pGF/-%%BetaG6$F4,&F:F/F4F1F/F4F/F/" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7&,*-%#lnG6#*&,&%\"xG!\"\"%\" aG\"\"\"F/,&%\"bGF-F.F/F-F/-F(6#*&,&F1F-F,F/F/F0F-F--%$PsiG6#%#r|irGF- -F76#%\"sGF/,(F2F/F:F--F76#,&F9F/F%&cdfgrG7&,**,-%%B etaG6$%#r|irG,&%#t|irG\"\"\"F+!\"\"F/F+F/)*&,&%\"xGF.%\"aGF/F.,&%\"bGF .F4F/F/F+F.-%*hypergeomG6%7$F+,(F-F/F+F.F.F.7#,&F.F.F+F.F1F.,&-%$PsiG6 #F+F.-F@6#F,F/F.F/**F(F/F+!\"#F0F.F7F.F/*,F(F/F+F/F0F.-%#lnG6#F1F.F7F. F.**F(F/F+F/F0F.-%%diffG6$F7F+F.F.,&*,F(F/F+F/F0F.F7F.,&FBF.-F@6#F-F/F .F/**F(F/F+F/F0F.-FL6$F7F-F.F.,&*.F(F/F0F.,&*&F.F.F5F/F/*&F2F.F5FEF.F. F2F/F5F.F7F.F.*.F(F/F0F.F;F.F=F/-F86%7$F=,(F-F/F+F.\"\"#F.7#,&FjnF.F+F .F1F.FXF.F.,&**F(F/F0F.F5F/F7F.F/*0F(F/F0F.F;F.F=F/FfnF.F2F.F5FEF/" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$!++++]7!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++++]7!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++++ v$*!#5" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7&,&$\"+T\\y%4#!#5\"\"\"*&$ \"++++]7F'F(-%$PsiG6#%\"sGF(F(,($\"+^z'Gt\"F'!\"\"*&$\"++++]7F'F(F,F(F 3*&F*F(-F-6#,&$F(\"\"!F(F/F(F(F(,$*&$\"++++DJ!#6F(F/F(F(,&$\"++++]7F'F 3*&$\"++++v$*FAF(F/F(F(" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7&,&$\"+I%> qp#!#5!\"\"*&$\"+++++:!\"*\"\"\"-%%diffG6$-%*hypergeomG6%7$F-F(7#\"\"# #\"\"$\"\"%F-F-F-,&$\"+++](o%F'F-*&F*F--F/6$F1F8F-F-$!++++DJ!#6$!*++]P *F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+4Gd06!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+nmmmm!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+* )))))))))!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "factor(subs (sol,r/t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"aG\"\"\"%#muG!\" \"F&,&%\"bGF(F%F&F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 360 "res tart:\nwith(Statistics):\nexponential_:=RandomVariable(Exponential(1/l ambda)):\nassume(u>0);\npdf:=subs(u=x-'gamma',PDF(exponential_,u));\nc df:=subs(u=x-'gamma',CDF(exponential_,u));\nmu_:='gamma'+Mean(exponent ial_);\nvar_:=Variance(exponential_);\nqdf:='gamma'+Quantile(exponenti al_,p);\nqdf2:=solve(cdf=p,x);\n[factor(diff(pdf,lambda))];\n[factor(d iff(cdf,lambda))];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*&%'lambd aG\"\"\"-%$expG6#,$*&,&%\"xGF'%&gammaG!\"\"F'F&F'F0F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG6#,$*&,&%\"xGF&%&gammaG!\" \"F&%'lambdaGF&F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%&gamm aG\"\"\"*&F'F'%'lambdaG!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%v ar_G*&\"\"\"F&*$)%'lambdaG\"\"#F&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%&gammaG\"\"\"*&%'lambdaG!\"\"-%#lnG6#,&F'F'%\"pGF*F'F* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G*&,&*&%'lambdaG\"\"\"%&gam maGF)F)-%#lnG6#,&F)F)%\"pG!\"\"F0F)F(F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#,$*&-%$expG6#,$*&,&%\"xG\"\"\"%&gammaG!\"\"F-%'lambdaGF-F/F-,( F-F/*&F0F-F,F-F-*&F0F-F.F-F/F-F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7# *&,&%\"xG\"\"\"%&gammaG!\"\"F'-%$expG6#,$*&F%F'%'lambdaGF'F)F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 890 "restart:\nwith(Statistics): \ngamma_:=RandomVariable(Gamma(1/lambda,k)):\nassume(u>0);\npdf:=subs( u=x-_gamma,PDF(gamma_,u));\ncdf:=subs(u=x-_gamma,CDF(gamma_,u)):\ncdf2 :=simplify(convert(cdf,hypergeom),symbolic);\nmu_:=_gamma+Mean(gamma_) ;\nvar_:=Variance(gamma_);\nsubs(m='mu',v='var',solve(\{mu_=m,var_=v\} ,\{k,lambda\}));\n#qdf:=_gamma+Quantile(gamma_,p);\n#qdf2:=solve(cdf=p ,x);\nmap(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, k)/p df, diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf]);\n#dCDFdk:=collect( map(_u->simplify(convert(_u,hypergeom),symbolic),convert(diff(subs(_ga mma=0,cdf2), k),hypergeometric)),x);\n#dCDFdlambda:=map(_u->factor(sim plify(convert(_u,hypergeom),symbolic)),diff(cdf2, lambda));\n#dCDFdgam ma:=map(_u->simplify(convert(_u,hypergeom),symbolic),diff(cdf2, _gamma ));\ncollect(expand(simplify(factor(convert(subs(_gamma=0,lambda=1,dif f(cdf2,k)),'StandardFunctions'))),trig),k);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG**)*&,&%\"xG\"\"\"%'_gammaG!\"\"F*%'lambdaGF*,&% \"kGF*F*F,F*-%$expG6#,$F'F,F*F-F*-%&GAMMAG6#F/F," }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%cdf2G*&,,-%&GAMMAG6#,&%\"kG\"\"\"\"\"#F,F,-F(6$,&F+F ,F,F,*&,&%\"xGF,%'_gammaG!\"\"F,%'lambdaGF,F5*&F.F,F+F,F5**F+F,)F2F+F, -%$expG6#,$F1F5F,)F6F+F,F,*(F9F,F:F,F>F,F,F,F'F5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\"\"*&%'lambdaG!\"\"%\"kGF'F'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&%'lambdaG!\"#%\"kG\"\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<$/%'lambdaG*&,&%'_gammaG!\"\"%#muG\" \"\"F+%$varGF)/%\"kG*&F,F)F'\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 %,(-%#lnG6#,&%\"xG\"\"\"%'_gammaG!\"\"F*-F&6#%'lambdaGF*-%$PsiG6#%\"kG F,,$*&,(F3F,*&F/F*F)F*F**&F/F*F+F*F,F*F/F,F,*&,*F3F,F*F*F7F*F8F,F*F(F, " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,Z*,,&%\"kG\"\"\"F'F'!\"#F&F'-%&GA MMAG6#F&!\"\"-F*6$F%%\"xGF'-%$PsiGF+F'F'*,\"\"#F'F%F(F)F,F-F'F0F'F'*,F %F(F&F,F)F,F-F'F0F'F'*,F3F'F%F(F)F,F-F'-%#lnG6#F/F'F,*,F%F(F&F,F)F,F-F 'F6F'F,*,F%F(F&F'F)F,F-F'F6F'F,*,F3F'F%F(F&F,F)F,F-F'F'*(F%F(F)F,F-F'F '*.F%F(F&F,F)F,)F/F&F'F/F'-%*hypergeomG6%7$F%F%7$,&F&F'F3F'FD,$F/F,F'F ,**F%F(F&F(F)F,F-F'F'*(F%F(F&F3F6F'F'*&F%F(F6F'F'*(F%F(F&F3F0F'F,*&F%F (F0F'F,**F3F'F%F(F&F'F0F'F,*.F%F(F&F'F)F,F>F'-%$expGF8F,F0F'F,*.F3F'F% F(F)F,F>F'FMF,F0F'F,*.F%F(F&F,F)F,F>F'FMF,F0F'F,*.F%F(F&F'F)F,F>F'F6F' FMF,F'*.F3F'F%F(F)F,F>F'F6F'FMF,F'*.F%F(F&F,F)F,F>F'F6F'FMF,F'**F3F'F% F(F&F'F6F'F'*.F3F'F%F(F&F,F)F,F>F'FMF,F,**F%F(F)F,F>F'FMF,F,*&F3F'F%F( F,*,F%F(F&F(F)F,F>F'FMF,F,*&F'F'*&)F%F3F'F&F'F,F,*&F%F(F&F'F," }}} {PARA 12 "" 1 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 423 "restart:\nwith(Statistics):\ngumbel_:=RandomVariable(Gumbel(bet a,1/alpha)):\npdf:=PDF(gumbel_,x);\nddf:=factor(diff(pdf,x));\ncdf:=CD F(gumbel_,x);\nmu_:=Mean(gumbel_);\nvar_:=Variance(gumbel_);\nassume(v >0):\nsubs(m='mu',v='var',allvalues(solve(\{mu_=m,var_=v\},\{alpha,bet a\})));\nqdf:=Quantile(gumbel_,p);\nqdf2:=solve(cdf=p,x);\nmap(factor, [diff(pdf,alpha)/pdf,diff(pdf,beta)/pdf]);\nmap(factor,[diff(cdf,alpha )/cdf,diff(cdf,beta)/cdf]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG *(%&alphaG\"\"\"-%$expG6#,$*&,&%\"xGF'%%betaG!\"\"F'F&F'F0F'-F)6#,$F(F 0F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG**)%&alphaG\"\"#\"\"\"-% $expG6#,$*&,&%\"xGF)%%betaG!\"\"F)F'F)F2F)-F+6#,$F*F2F),&F)F2F*F)F)" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%$expG6#,$-F&6#,$*&,&%\"xG\" \"\"%%betaG!\"\"F/%&alphaGF/F1F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $mu_G,&%%betaG\"\"\"*&%&gammaGF'%&alphaG!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"'!\"\"%&alphaG!\"#%#PiG\"\"#\"\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<$/,$*(\"\"'!\"\"F'#\"\"\"\"\"#*&%#PiG F+%#v|irGF(F)F*,$*(F'F(F'F)*&F-F+%$varGF(F)F(/*(,&%&gammaGF(**F'F(%\"m GF*F'F)F,F)F*F*F'F)F,#F(F+,$*(,&F6F(**F'F(%#muGF*F'F)F1F)F(F*F'F)F1F9F (" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%%betaG\"\"\"*&%&alphaG! \"\"-%#lnG6#,$-F,6#%\"pGF*F'F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%q df2G*&,&*&%%betaG\"\"\"%&alphaGF)F)-%#lnG6#,$-F,6#%\"pG!\"\"F2F)F*F2" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$*&,,\"\"\"F&*&%&alphaGF&%\"xGF&!\" \"*&%%betaGF&F(F&F&*(F(F&-%$expG6#,$*&,&F)F&F,F*F&F(F&F*F&F)F&F&*(F(F& F.F&F,F&F*F&F(F*,$*&F(F&,&F&F*F.F&F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$*&,&%\"xG\"\"\"%%betaG!\"\"F'-%$expG6#,$*&F%F'%&alphaGF'F)F',$ *&F/F'F*F'F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 571 "restart:\n with(Statistics):\nwith(student):\nassume(u>0,sigma>0):\nlognormal_:=R andomVariable(LogNormal(mu,sigma)):\npdf:=subs(u='x-_gamma',PDF(lognor mal_,u));\ncdf:=subs(u='x-_gamma',CDF(lognormal_,u));\ncdf2:=value(cha ngevar(ln(x)=y,Int(pdf,x=0..t)));\nmu_:='_gamma'+Mean(lognormal_);\nva r_:=Variance(lognormal_);\nqdf:='_gamma'+Quantile(lognormal_,p);\nqdf2 :=solve(cdf2=p,x);\nfact:=pdf:\nmap(factor,[diff(pdf,mu)/fact,diff(pdf ,sigma)/fact,diff(pdf,_gamma)/fact]);\nfact:=pdf:\nmap(factor,[diff(cd f,mu)/fact,diff(cdf,sigma)/fact,diff(cdf,_gamma)/fact]) assuming x - _ gamma > exp(mu);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&#\"\"\" \"\"#F(*,,&%\"xGF(%'_gammaG!\"\"F.%'sigma|irGF.F)F'%#PiG#F.F)-%$expG6# ,$*&#F(F)F(*&,&-%#lnG6#F+F(%#muGF.F)F/!\"#F(F.F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6$7$,&#\"\"\"\"\"#F+*&#F+F,F+-%$ erfG6#,$*&F*F+*(,&%#muGF+-%#lnG6#,&%\"xGF+%'_gammaG!\"\"F=F+%'sigma|ir GF=F,F*F+F+F+F=2F:-%$expG6#F67$,&F*F+*&F*F+-F06#,$*&F*F+*(,&F7F+F6F=F+ F>F=F,F*F+F+F+F+%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf 2G,&*&#\"\"\"\"\"#F(-%$erfG6#,$*&F'F(*(F)F',&%#muGF(-%#lnG6#,$%'_gamma G!\"\"F7F(%'sigma|irGF7F(F(F(F(*&#F(F)F(-F+6#,$*&F'F(*(F)F',&-F36#,&% \"tGF(F6F7F7F1F(F(F8F7F(F(F(F7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$m u_G,&%'_gammaG\"\"\"-%$expG6#,&%#muGF'*&\"\"#!\"\"%'sigma|irGF.F'F'" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&-%$expG6#,&*&\"\"#\"\"\"%#m uGF,F,*$)%'sigma|irGF+F,F,F,,&-F'6#F.F,F,!\"\"F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG%%FAILG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qd f2G6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%,$*&,&%#muG\"\"\"-%#lnG6#, &%\"xGF(%'_gammaG!\"\"F/F(%'sigma|irG!\"#F/,$*(,(F'F(F)F/F0F(F(,(F'F/F )F(F0F(F(F0!\"$F/*(F0F1,(*$)F0\"\"#F(F(F)F(F'F/F(F,F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%,&%\"xG!\"\"%'_gammaG\"\"\"*(,&-%#lnG6#,&F%F(F'F &F(%#muGF&F(F$F(%'sigma|irGF&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 439 "restart:\nwith(Statistics):\nassume(beta>0):\nlogistic_:=Rand omVariable(Logistic(alpha,beta)):\npdf:=PDF(logistic_,x);\nddf:=factor (diff(pdf,x));\ncdf:=CDF(logistic_,x);\nmu_:='gamma'+Mean(logistic_); \nvar_:=Variance(logistic_);\nqdf:=Quantile(logistic_,p);\nqdf2:=solve (cdf=p,x);\ndpdf:=map(factor,[diff(pdf,alpha),diff(pdf,beta)]);\nfacto r(dpdf[2]-(x-alpha)*dpdf[1]/beta);\ndcdf:=map(factor,[diff(cdf,alpha), diff(cdf,beta)]);\nfactor(dcdf[2]/dcdf[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*(-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F,%&beta| irGF.F,F/F.,&F,F,F&F,!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG,$ **-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-%&beta|irGF/F-,&F-F/F'F-F-F0! \"#,&F-F-F'F-!\"$F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG*&\"\"\" F&,&F&F&-%$expG6#,$*&,&%\"xGF&%&alphaG!\"\"F&%&beta|irGF0F0F&F0" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%&gammaG\"\"\"%&alphaGF'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"$!\"\"%&beta|irG\"\"#% #PiGF*\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%&alphaG\"\" \"*&%&beta|irGF'-%#lnG6#*&%\"pGF',&F'F'F.!\"\"F0F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&%&alphaG\"\"\"*&-%#lnG6#,$*&,&F'!\"\"%\"pG F'F'F0F/F/F'%&beta|irGF'F/" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%dpdfG 7$**-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-%&beta|irGF/F-,&F-F/F'F-F-F 0!\"#,&F-F-F'F-!\"$**F'F-,.F,F/*&F,F-F'F-F-F.F-*&F.F-F'F-F/F0F/*&F0F-F 'F-F/F-F0F4F3F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(%&beta|irG!\"#- %$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-F%F/F-,&F-F-F'F-F&F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%dcdfG7$,$*(,&\"\"\"F)-%$expG6#,$*&,&%\"xG F)%&alphaG!\"\"F)%&beta|irGF2F2F)!\"#F3F2F*F)F2,$**F(F4F/F)F3F4F*F)F2 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"xG\"\"\"%&alphaG!\"\"F&%&be ta|irGF(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 265 "restart:\nwith (Statistics):\nassume(sigma>0):\nnormal_:=RandomVariable(Normal(mu,sig ma)):\npdf:=subs(u=x,PDF(normal_,u));\ncdf:=subs(u=x,CDF(normal_,u)); \ncdf2:=int(pdf,x=0..t);\nmu_:=Mean(normal_);\nvar_:=Variance(normal_) ;\nqdf:=Quantile(normal_,p);\nqdf2:=solve(cdf2=p,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)%'sigma| irGF--%$expG6#,$*(F)F-,&%\"xGF(%#muGF-F)F.!\"#F-F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,$**F(!\"\"F (F&,&%\"xGF'%#muGF/F'%'sigma|irGF/F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G,&*&#\"\"\"\"\"#F(-%$erfG6#,$**F)!\"\"%#muGF(%'sigma|irG F/F)F'F(F(F(*&F'F(-F+6#,$**F)F/F)F',&%\"tGF(F0F/F(F1F/F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%#muG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*$)%'sigma|irG\"\"#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,$*&#\"\"\"\"\"#F(*&,&*&%#muGF(F)#F(F)!\"\"*(F)F(-%'RootO fG6#,(-%$erfG6#%#_ZGF(F(F/*&F)F(%\"pGF(F(F(%'sigma|irGF(F(F(F)F.F(F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 847 "restart:\nwith(Statistics):\nassume(sigma>0):\n normal_:=RandomVariable(Normal(mu,sigma)):\npdf:=PDF(normal_,x)/(subs( x=b,CDF(normal_,x))-subs(x=a,CDF(normal_,x)));\ncdf:=int(subs(x=t,pdf) ,t=a..x);\nmu_:=int(x*pdf,x=a..b);\nvar_:=int((x-mu_)^2*pdf,x=a..b);\n qdf:=solve(cdf=p,x);\nmap(_x->factor(subs(erf(sqrt(2)*(b-mu)/2/sigma)= 2*PhiB-1,erf(sqrt(2)*(a-mu)/2/sigma)=2*PhiA-1,exp(-(b-mu)^2/2/sigma^2) =sqrt(2*Pi)*sigma*phiB,exp(-(a-mu)^2/2/sigma^2)=sqrt(2*Pi)*sigma*phiA, x=mu+sigma*X,a=mu+sigma*A,b=mu+sigma*B,_x)),[diff(pdf,mu),diff(pdf,sig ma),diff(pdf,a),diff(pdf,b)]);\nmap(_x->factor(subs(erf(sqrt(2)*(b-mu) /2/sigma)=2*PhiB-1,erf(sqrt(2)*(a-mu)/2/sigma)=2*PhiA-1,exp(-(b-mu)^2/ 2/sigma^2)=sqrt(2*Pi)*sigma*phiB,exp(-(a-mu)^2/2/sigma^2)=sqrt(2*Pi)*s igma*phiA,x=mu+sigma*X,a=mu+sigma*A,b=mu+sigma*B,_x)),[diff(cdf,mu),di ff(cdf,sigma),diff(cdf,a),diff(cdf,b)]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&#\"\"\"\"\"#F(*,F)F'%#PiG#!\"\"F)%'sigma|irGF--%$expG 6#,$*(F)F-,&%\"xGF(%#muGF-F)F.!\"#F-F(,&*&F'F(-%$erfG6#,$**F)F-F)F',&% \"bGF(F6F-F(F.F-F(F(F(*&#F(F)F(-F;6#,$**F)F-F)F',&%\"aGF(F6F-F(F.F-F(F (F-F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,$*&,&-%$erfG6#,$* *\"\"#!\"\"F-#\"\"\"F-,&%\"aGF0%#muGF.F0%'sigma|irGF.F0F.-F)6#,$**F-F. F-F/,&%\"xGF0F3F.F0F4F.F0F0F0,&-F)6#,$**F-F.F-F/,&%\"bGF0F3F.F0F4F.F0F .F(F0F.F." }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$mu_G*(,**(\"\"##\"\"\" F(%'sigma|irGF*-%$expG6#,$*(F(!\"\",(*(F(F*%#muGF*%\"aGF*F1*$)F4F(F*F* *$)F5F(F*F*F*F+!\"#F1F*F1*(F4F*-%$erfG6#,$**F(F1F(F),&F5F*F4F1F*F+F1F* F*%#PiGF)F**(F(F)F+F*-F-6#,$*(F(F1,(*(F(F*F4F*%\"bGF*F1F6F**$)FJF(F*F* F*F+F:F1F*F**(F4F*-F=6#,$**F(F1F(F),&FJF*F4F1F*F+F1F*F*FBF)F1F*FB#F1F( ,&FNF1F%%var_G,$*,,>**%'sigm a|irG\"\"\")%#PiG#\"\"$\"\"#F*-%$expG6#*&,(*$)%#muGF/F*F**$)%\"aGF/F*F **$)%\"bGF/F*F*F*F)!\"#F*)-%$erfG6#,$**F/!\"\"F/#F*F/,&F:F*F7FEF*F)FEF *F/F*FE*,F@F*F/FFF7F*F,F*-F16#,$*(F/FE,**(F/F*F7F*F=F*F*F5F*F;F**&F/F* F9F*F*F*F)F>F*F*F**.F/F*F@F*F)F*-FA6#,$**F/FEF/FF,&F=F*F7FEF*F)FEF*F*F +F*F0F*F**,F@F*F/FFF=F*F,F*FIF*FE*,F@F*F/FFF7F*F,F*-F16#,$*(F/FE,**(F/ F*F7F*F:F*F*F5F*F8F**&F/F*FF*F*FE*,F@F*F/FFF:F*F,F*FXF*F**, F/FFF:F*FQF*F,F*FXF*FE**F/F*F)F*-F16#*&,&*(F/F*F7F*F:F*F*F;F*F*F)F>F*F ,FFF***\"\"%F*F)F*F,FF-F16#,$*(F/FE,*F8F**(F/F*F7F*F:F*F*F;F**(F/F*F7F *F=F*F*F*F)F>F*F*FE**F)F*)FQF/F*F+F*F0F*FE*,F/FFF=F*FQF*F,F*FIF*F***F/ F*F)F*-F16#*&,&*(F/F*F7F*F=F*F*F8F*F*F)F>F*F,FFF**,F/FFF7F*FQF*F,F*FXF *F**,F/FFF7F*FQF*F,F*FIF*FEF*F)F*,(*$F[pF*F**(F/F*FQF*F@F*FE*$F?F*F*FE F,#!\"$F/-F16#,$F3FEF*FE" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,$* &#\"\"\"\"\"#F(*&,&*&F)F'%#muGF(F(*(F)F(-%'RootOfG6#,*-%$erfG6#%#_ZGF( -F46#,$**F)!\"\"F)F',&%\"aGF(F-F;F(%'sigma|irGF;F(F;*&%\"pGF(-F46#,$** F)F;F)F',&%\"bGF(F-F;F(F>F;F(F(F;*&F@F(F7F(F(F(F>F(F(F(F)F'F(F(" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#7&,$*&#\"\"\"\"\"#F'*.F(F&-%$expG6#,$* &F(!\"\"%\"XGF(F/F',**&F0F'%%PhiBGF'F'*&F0F'%%PhiAGF'F/*&%'sigma|irGF' %%phiBGF'F'*&F7F'%%phiAGF'F/F'%#PiG#F/F(F7!\"#,&F3F'F5F/F=F'F',$*&F&F' *.F(F&F*F',.F3F/F5F'*&)F0F(F'F3F'F'*&FDF'F5F'F/*(F7F'F8F'%\"BGF'F'*(F7 F'F:F'%\"AGF'F/F'F;FF=F'F',$*&F&F'*.F;FF=F(F&F:F'F'F ',$*&#F'F(F'*.F;FF=F(F&F8F'F'F/" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7&,$*&#\"\"\"\"\"#F'**,2*,F(F'%%phiAGF'%'sigma|irGF'%#P iGF&%%PhiBGF'F'*(F(F&-%$expG6#,$*&F(!\"\"%\"XGF(F6F'F/F'F6*(F(F&F1F'%% PhiAGF'F'*,F(F'F-F'F.F&F9F'%%phiBGF'F6*(F-F'F.F&F;F'F'*(F,F'F-F'F.F&F6 **F-F'F.F&-%$erfG6#,$*(F(F6F(F&F7F'F'F'F;F'F'**F-F'F.F&F?F'F,F'F6F'F.# F6F(F-F6,&F/F'F9F6!\"#F'F',$*&#F'F(F'**,2*.F(F'F,F'%\"AGF'F-F'F.F&F/F' F6**F(F&F7F'F1F'F/F'F'**F(F&F7F'F1F'F9F'F6*.F(F'F-F'F.F&F9F'F;F'%\"BGF 'F'**F-F'F.F&F;F'FRF'F6**F,F'FNF'F-F'F.F&F'*,F-F'F.F&F?F'F;F'FRF'F6*,F -F'F.F&F?F'F,F'FNF'F'F'F.FEF-F6FFFGF'F6,$*&F&F'*(F,F',(*&F(F'F/F'F6F'F 'F?F'F'FFFGF'F',$*&#F'F(F'*(,(*&F(F'F9F'F6F'F'F?F'F'F;F'FFFGF'F6" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 463 "restart:\nwith(Statistics): \nassume(u>0,nu>0):\nstudent_:=RandomVariable(StudentT(nu)):\npdf:=sub s(u=x-mu,PDF(student_,u));\ncdf:=subs(u=x-mu,CDF(student_,u)):\ncdf2:= simplify(convert(subs(mu=0,(cdf - 1)*Beta(1/2,nu/2)*sqrt(nu)), GAMMA)) assuming nu > 1:\nmu_:=mu+Mean(student_);\nvar_:=Variance(student_); \nfactor(diff((1+(x-mu)^2/nu)^(-1/2-1/2*nu),x));\nmap(factor,[diff((1+ (x-mu)^2/nu)^(-1/2-1/2*nu),mu),diff(pdf,nu)]);\n#qdf:=Quantile(student _,p):\n#qdf2:=solve(cdf=p,x):" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pd fG**-%&GAMMAG6#,&#\"\"\"\"\"#F+*&F,!\"\"%$nu|irGF+F+F+*&%#PiGF+F/F+#F. F,-F'6#,$*&F,F.F/F+F+F.),&F+F+*&,&%\"xGF+%#muGF.F,F/F.F+F)F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%#muG\"\"\"-%*PIECEWISEG6$7$%*undef inedG1%$nu|irGF'7$\"\"!%*otherwiseGF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G-%*PIECEWISEG6$7$%*undefinedG1%$nu|irG\"\"#7$*&F+\"\"\",&F, !\"\"F+F/F1%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**)*&,*%$ nu|irG\"\"\"*$)%\"xG\"\"#F)F)*(F-F)F,F)%#muGF)!\"\"*$)F/F-F)F)F)F(F0,& #F)F-F0*&F-F0F(F)F0F),&F(F)F)F)F),&F,F)F/F0F)F'F0F0" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#7$**)*&,*%$nu|irG\"\"\"*$)%\"xG\"\"#F)F)*(F-F)F,F)%#m uGF)!\"\"*$)F/F-F)F)F)F(F0,&#F)F-F0*&F-F0F(F)F0F),&F(F)F)F)F),&F,F)F/F 0F)F'F0,$*&#F)F-F)*2-%&GAMMAG6#,&F:F)*&F-F0F(F)F)F)%#PiGF)F(F),B*&-%$P siGF>F)F(F)F)*&FDF)F+F)F)**F-F)FDF)F,F)F/F)F0*&FDF)F2F)F)F)F0*&-FE6#,$ *&F-F0F(F)F)F)F(F)F0*&FJF)F+F)F0**F-F)FJF)F,F)F/F)F)*&FJF)F2F)F0*&-%#l nG6#F&F)F(F)F0*&FRF)F+F)F0**F-F)FRF)F,F)F/F)F)*&FRF)F2F)F0F*F)*(F-F)F, F)F/F)F0F1F)F)*&FAF)F(F)#!\"$F--F=FKF0)F&F?F0F'F0F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 376 "restart:\nwith(Statistics):\nassum e(aa,x%$pdfG-%*PIECEWISEG6&7$\"\"!2% #x|irG%#a|irG7$,$**\"\"#\"\"\",&F+F1F,!\"\"F1,&%#b|irGF1F,F3F3,&%#m|ir GF1F,F3F3F11F+F77$,$**F0F1,&F5F1F+F3F1F4F3,&F5F1F7F3F3F11F+F57$F)%*oth erwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG-%*PIECEWISEG6%7$,$* (\"\"#\"\"\",&%#b|irGF,%#a|irG!\"\"F0,&%#m|irGF,F/F0F0F,2%#x|irGF27$%* undefinedG/F4F27$,$*(F+F,F-F0,&F.F,F2F0F0F02F2F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6&7$\"\"!2%#x|irG%#a|irG7$*(,&F+\" \"\"F,!\"\"\"\"#,&%#b|irGF0F,F1F1,&%#m|irGF0F,F1F11F+F67$,&F0F0*(,&F4F 0F+F1F2F3F1,&F4F0F6F1F1F11F+F47$F0%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,(*&\"\"$!\"\"%#a|irG\"\"\"F**&F'F(%#b|irGF*F**& F'F(%#m|irGF*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,.*&#\"\"\" \"#=F(*$)%#a|irG\"\"#F(F(F(*&F'F(*$)%#b|irGF-F(F(F(*&F'F(*$)%#m|irGF-F (F(F(*&#F(F)F(*&F,F(F1F(F(!\"\"*&#F(F)F(*&F,F(F5F(F(F9*&#F(F)F(*&F1F(F 5F(F(F9" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%*PIECEWISEG6$7$,&% #a|irG\"\"\"*$*(%\"pGF+,&%#b|irGF+F*!\"\"F+,&%#m|irGF+F*F1F+#F+\"\"#F+ 2F.*&F2F+F/F17$,&F0F+*$*(,&F+F+F.F1F+F/F+,&F0F+F3F1F+F4F1%*otherwiseG " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7%-%*PIECEWISEG6$7$,$**\"\"#\"\"\" ,,*&%#b|irGF+%#m|irGF+!\"\"*$)%#a|irGF*F+F+*&%#x|irGF+F/F+F+*(F*F+F5F+ F3F+F0*&F5F+F.F+F+F+,&F.F0F3F+!\"#,&F/F0F3F+F9F+1F5F/7$,$**F*F+,&F.F0F 5F+F+F8F9,&F.F0F/F+F0F+%*otherwiseG-F%6%7$,$**F*F+F?F+F8F0F@F9F+2F/F57 $%*undefinedG/F/F57$,$**F*F+,&F5F0F3F+F+F8F0F:F9F02F5F/-F%6$7$,$**F*F+ FNF+F8F9F:F0F0F;7$,$**F*F+,,*$)F.F*F+F+*&F3F+F/F+F0F4F+*(F*F+F5F+F.F+F 0*&F5F+F3F+F+F+F8F9F@F9F0FA" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7%-%*PI ECEWISEG6$7$**,&%#x|irG!\"\"%#a|irG\"\"\"F-,.*(\"\"#F-%#b|irGF-%#m|irG F-F-*&F,F-F1F-F+*&F,F-F2F-F+*&F*F-F2F-F+*(F0F-F*F-F,F-F-*&F*F-F1F-F+F- ,&F1F+F,F-!\"#,&F2F+F,F-F91F*F27$*(,&F1F+F*F-F0F8F9,&F1F+F2F-F+%*other wiseG-F%6$7$*(F>F0F8F+F?F91F2F*7$*(F)F0F8F+F:F92F*F2-F%6$7$*(F)F0F8F9F :F+F;7$,$**F>F-,.*&F1F-F2F-F-F3F-*(F0F-F,F-F2F-F+F5F-*(F0F-F*F-F1F-F+* &F*F-F,F-F-F-F8F9F?F9F+F@" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 336 "restart:\nwith(Statistics):\nassume(aa):\nuniform_:=Rand omVariable(Uniform(a,b)):\npdf:=subs(u=x,PDF(uniform_,u));\ncdf:=subs( u=x,CDF(uniform_,u));\ncdf2:=int(pdf,x=0..t);\nmu_:=Mean(uniform_);\nv ar_:=Variance(uniform_);\nqdf:=Quantile(uniform_,p);\nqdf2:=solve(cdf= p,x);\n[diff(pdf,a),diff(pdf,b)];\nmap(factor,[diff(cdf,a),diff(cdf,b) ]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PIECEWISEG6%7$\"\"!2% #x|irG%#a|irG7$*&\"\"\"F/,&%#b|irGF/F,!\"\"F22F+F17$F)%*otherwiseG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6%7$\"\"!2%#x|irG% #a|irG7$*&,&F+\"\"\"F,!\"\"F0,&%#b|irGF0F,F1F12F+F37$F0%*otherwiseG" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G*&,&%#b|irG\"\"\"%#a|irG!\"\" F*%\"tGF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&*&\"\"#!\"\"%#a| irG\"\"\"F**&F'F(%#b|irGF*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var _G,$*&\"#7!\"\",&%#b|irG\"\"\"%#a|irGF(\"\"#F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%#a|irG\"\"\"*&%\"pGF',&%#b|irGF'F&!\"\"F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,(%#a|irG\"\"\"*&%\"pGF'%#b| irGF'F'*&F)F'F&F'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$*&\"\"\"F% *$),&%#b|irGF%%#a|irG!\"\"\"\"#F%F+,$F$F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$*&,&%#b|irG!\"\"%#x|irG\"\"\"F),&F&F'%#a|irGF)!\"#*&, &F(F'F+F)F)F*F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 557 "restart :\nwith(Statistics):\nassume(u>0,alpha>0,beta>0):\nweibull_:=RandomVar iable(Weibull(alpha,beta)):\npdf:=subs(u=x-'gamma',PDF(weibull_,u));\n ddf:=diff(pdf,x);\ncdf:=subs(u=x-'gamma',CDF(weibull_,u));\ncdf2:=int( pdf,x=0..t);\nmu_:='gamma'+Mean(weibull_);\nvar_:=Variance(weibull_); \nsubs(m='mu',v='var',solve(\{mu_=m,var_=v\},\{alpha,beta\}));\nqdf:=' gamma'+Quantile(weibull_,p);\nqdf2:=solve(cdf=p,x);\ndpdf:=[diff(pdf,a lpha),diff(pdf,beta)]:\nmap(factor,dpdf);\nfactor(dpdf[2]/dpdf[1]);\nd cdf:=[diff(cdf,alpha),diff(cdf,beta)]:\nmap(factor,dcdf);\nfactor(dcdf [2]/dcdf[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG**%&beta|irG\" \"\"),&%\"xGF'%&gammaG!\"\",&F'F,F&F'F')%'alpha|irGF&F,-%$expG6#,$)*&F )F'F/F,F&F,F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG,&*.%&beta|irG \"\"\"),&%\"xGF(%&gammaG!\"\",&F(F-F'F(F(F.F(F*F-)%'alpha|irGF'F--%$ex pG6#,$)*&F*F(F0F-F'F-F(F(*.F'\"\"#F)F(F/F-F5F(F*F-F1F(F-" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG6#,$)*&,&%\"xGF&%&gammaG !\"\"F&%'alpha|irGF0%&beta|irGF0F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%%cdf2G,&-%$expG6#,$*()%&gammaG%&beta|irG\"\"\"-F'6#*(%#PiGF.F-F.^#F. F.F.)%'alpha|irG,$F-!\"\"F.F7F.-F'6#,$*&),&%\"tGF.F,F7F-F.F4F.F7F7" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%&gammaG\"\"\"*&%'alpha|irGF' -%&GAMMAG6#*&,&%&beta|irGF'F'F'F'F/!\"\"F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&%'alpha|irG\"\"\",&-%&GAMMAG6#*&,&%&beta|irGF '\"\"#F'F'F.!\"\"F'*$)-F*6#*&,&F.F'F'F'F'F.F0F/F'F0F'" }}{PARA 7 "" 1 "" {TEXT -1 38 "Warning, solutions may have been lost\n" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#/%\"vG%$varG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%$qdfG,&%&gammaG\"\"\"*&%'alpha|irGF')-%#lnG6#*&F'F',&F'F'%\"pG!\"\"F 1*&F'F'%&beta|irGF1F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&* &-%$expG6#*&-%#lnG6#,$-F,6#,&\"\"\"F2%\"pG!\"\"F4F2%&beta|irGF4F2%'alp ha|irGF2F2%&gammaGF2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$*.%&beta|irG \"\"#),&%\"xG\"\"\"%&gammaG!\"\",&F*F,F%F*F*-%$expG6#,$)*&F(F*%'alpha| irGF,F%F,F*,&F*F,F2F*F*)F4F%F,F4F,,$**F'F*F.F*,*F*F,*&F%F*-%#lnG6#F(F* F,*&F%F*-F<6#F4F*F**(F%F*F2F*-F<6#F3F*F*F*F6F,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**,*\"\"\"!\"\"*&%&beta|irGF&-%#lnG6#,&%\"xGF&%&gamma GF'F&F'*&F)F&-F+6#%'alpha|irGF&F&*(F)F&)*&F-F&F3F'F)F&-F+6#F6F&F&F&F3F &F)!\"#,&F&F'F5F&F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$,$**)*&,&% \"xG\"\"\"%&gammaG!\"\"F*%'alpha|irGF,%&beta|irGF*F.F*F-F,-%$expG6#,$F &F,F*F,*(F&F*-%#lnG6#F'F*F/F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(- %#lnG6#*&,&%\"xG\"\"\"%&gammaG!\"\"F+%'alpha|irGF-F+%&beta|irGF-F.F+F- " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 149 "-(-1+simplify(-beta*ln (x-gamma)+beta*ln(alpha),'symbolic')+beta*((x-gamma)/alpha)^beta*ln((x -gamma)/alpha))*alpha/beta^2/(-1+((x-gamma)/alpha)^beta);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**,(\"\"\"!\"\"*&%&beta|irGF&,&-%#lnG6#,&%\"x GF&%&gammaGF'F&-F,6#%'alpha|irGF'F&F'*(F)F&)*&F.F&F3F'F)F&-F,6#F6F&F&F &F3F&F)!\"#,&F&F'F5F&F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 154 "-(-1-simplify(beta*(ln(x-gamma)-ln(alpha)),'assume = positive')+b eta*((x-gamma)/alpha)^beta*ln((x-gamma)/alpha))*alpha/beta^2/(-1+((x-g amma)/alpha)^beta);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**,(\"\"\"!\" \"*&%&beta|irGF&,&-%#lnG6#,&%\"xGF&%&gammaGF'F&-F,6#%'alpha|irGF'F&F'* (F)F&)*&F.F&F3F'F)F&-F,6#F6F&F&F&F3F&F)!\"#,&F&F'F5F&F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 326 "restart:\nwith(Statistics):\ngeome tric_:=RandomVariable(Geometric(p)):\npdf:=subs(u=n-1,ProbabilityFunct ion(geometric_,u));\ncdf:=simplify(subs(u=n-1,CDF(geometric_,u)));\nmu _:=factor(1+Mean(geometric_));\nvar_:=Variance(geometric_);\nqdf:=simp lify(1+Quantile(geometric_,q));\nqdf2:=solve(cdf=q,K);\nfactor(diff(pd f, p));\ndiff(cdf, p);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PI ECEWISEG6$7$\"\"!2%\"nG\"\"\"7$*&%\"pGF,),&F,F,F/!\"\",&F+F,F,F2F,%*ot herwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6$7$\" \"!2%\"nG\"\"\"7$,&F,F,),&F,F,%\"pG!\"\"-%&floorG6#F+F21F,F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G*&\"\"\"F&%\"pG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&,&\"\"\"F'%\"pG!\"\"F'F(!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%%ceilG6#*&-%#lnG6#,&\"\"\"F-%\"qG! \"\"F--F*6#,&F-F-%\"pGF/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G 6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%*PIECEWISEG6$7$\"\"!2%\"nG\" \"\"7$*(),&F*F*%\"pG!\"\",&F)F*F*F0F*,&F*F0*&F/F*F)F*F*F*,&F*F0F/F*F0% *otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%*PIECEWISEG6$7$\"\"!2 %\"nG\"\"\"7$*(),&F*F*%\"pG!\"\"-%&floorG6#F)F*F1F*F.F01F*F)" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 356 "restart:\nwith(Statistics): \npoisson_:=RandomVariable(Poisson(lambda)):\npdf:=subs(u=n,Probabilit yFunction(poisson_,u));\nexpand(log(pdf)) assuming n > 0, lambda > 0; \ncdf:=simplify(subs(u=n,CDF(poisson_,u)));\nmu_:=Mean(poisson_);\nvar _:=Variance(poisson_);\nqdf:=simplify(Quantile(poisson_,q));\nqdf2:=so lve(cdf=q,K);\nfactor(diff(pdf, lambda));\ndiff(cdf, lambda);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PIECEWISEG6$7$\"\"!2%\"nGF)7 $*()%'lambdaGF+\"\"\"-%$expG6#,$F/!\"\"F0-%*factorialG6#F+F5%*otherwis eG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%\"nG\"\"\"-%#lnG6#%'lambdaG F&F&F*!\"\"-F(6#-%*factorialG6#F%F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%$cdfG*&-%&GAMMAG6$,&-%&floorG6#%\"nG\"\"\"F.F.%'lambdaGF.-F'6#F)!\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%'lambdaG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G%'lambdaG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%'RootOfG6#,&-%&floorG6#%#_ZG\"\"\"-F&6#,(*&-%&GAMMAG6$,&F, F-F-F-%'lambdaGF-F,F-F-F2F-*&%\"qGF--F36#,&F,F-\"\"#F-F-!\"\"F=" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%*PIECEWISEG6$7$\"\"!2%\"nGF'7$*,)%'lambdaGF)\"\"\"-%$ expG6#,$F-!\"\"F.,&F)F.F-F3F.F-F3-%*factorialG6#F)F3%*otherwiseG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$*()%'lambdaG-%&floorG6#%\"nG\"\"\"-% $expG6#,$F&!\"\"F+-%&GAMMAG6#,&F'F+F+F+F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "allvalues(qdf);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-% 'RootOfG6#,&-%&floorG6#%#_ZG\"\"\"-F$6#,(*&-%&GAMMAG6$,&F*F+F+F+%'lamb daGF+F*F+F+F0F+*&%\"qGF+-F16#,&F*F+\"\"#F+F+!\"\"F;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "plot(subs(lambda=10,GAMMA((n)+1,lambda)/G AMMA((n)+1)),n=0..50);" }}{PARA 13 "" 1 "" {GLPLOT2D 314 314 314 {PLOTDATA 2 "6%-%'CURVESG6$7gn7$$\"\"!F)$\"+wH**RX!#97$$\"+4x&)*3\"!\" *$\"+X/\"4&f!#87$$\"+uq8Q?F0$\"+r\\EIH!#77$$\"+OnNrDF0$\"+@r`6hF97$$\" +(RwX5$F0$\"+\"\\nd;\"!#67$$\"+%eI8k$F0$\"+/nLp?FD7$$\"+sZ3yTF0$\"+$\\ _)QMFD7$$\"+hyG7ZF0$\"+]:Z$Q&FD7$$\"+]4\\Y_F0$\"+l4*=,)FD7$$\"+&flF hn7$$\"+fmpisF0$\"+TxZzCFhn7$$\"+DV1$z(F0$\"+/t+\"3$Fhn7$$\"+#*>VB$)F0 $\"+i*Q]s$Fhn7$$\"+l()4_))F0$\"+&R-7R%Fhn7$$\"+Mbw!Q*F0$\"+\"3XC1&Fhn7 $$\"+!HkX#**F0$\"+_juQdFhn7$$\"+0j$o/\"!\")$\"+)o`HQ'Fhn7$$\"+GTt%4\"F dq$\"+$HL@\"pFhn7$$\"+_>jU6Fdq$\"+.Pv(R(Fhn7$$\"+eNb'>\"Fdq$\"+rw\\')y Fhn7$$\"+j^Z]7Fdq$\"+p0-6$)Fhn7$$\"+)=h(e8Fdq$\"+(z@S(*)Fhn7$$\"+Q[6j9 Fdq$\"+q:.-%*Fhn7$$\"+\\z(yb\"Fdq$\"+vSG^'*Fhn7$$\"+b/cq;Fdq$\"+ot\"o# )*Fhn7$$\"+Fdq$\"+ifo!)**Fhn7$$\"+\"f#=$3#Fdq$\"+dc%>***Fhn7$$\"+t(pe=#Fdq$\" +'y^m***Fhn7$$\"+uI,$H#Fdq$\"+8\">()***Fhn7$$\"+rSS\"R#Fdq$\"+n-\\**** Fhn7$$\"+`?`(\\#Fdq$\"+/)=)****Fhn7$$\"++#pxg#Fdq$\"+=2%*****Fhn7$$\"+ g4t.FFdq$\"+S$y*****Fhn7$$\"+!Hst!GFdq$\"+]H******Fhn7$$\"+ERW9HFdq$\" +ry******Fhn7$$\"+KE>>IFdq$\"+h$*******Fhn7$$\"+#RU07$Fdq$\"+.)******* Fhn7$$\"+?S2LKFdq$\"+^********Fhn7$$\"+$p)=MLFdq$\"+')********Fhn7$$\" +*=]@W$Fdq$\"+#*********Fhn7$$\"+]$z*RNFdq$\"+)*********Fhn7$$\"+kC$pk $Fdq$\"+++++5F07$$\"+3qcZPFdqF\\z7$$\"+/\"fF&QFdqF\\z7$$\"+0OgbRFdqF\\ z7$$\"+nAFjSFdqF\\z7$$\"+&)*pp;%FdqF\\z7$$\"+ye,tUFdqF\\z7$$\"+fO=yVFd qF\\z7$$\"+E>#[Z%FdqF\\z7$$\"+(G!e&e%FdqF\\z7$$\"+&)Qk%o%FdqF\\z7$$\"+ UjE!z%FdqF\\z7$$\"+60O\"*[FdqF\\z7$$\"#]F)F\\z-%'COLOURG6&%$RGBG$\"#5! \"\"F(F(-%+AXESLABELSG6$Q\"n6\"Q!F`]l-%%VIEWG6$;F(Fc\\l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "solve(GAMMA((n)+1,lambda)/GA MMA((n)+1)=q,n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RootOfG6#,&-%&G AMMAG6$,&%#_ZG\"\"\"F,F,%'lambdaG!\"\"*&%\"qGF,-F(6#F*F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "int(1/sqrt(2*Pi)*exp(-t^2/2),t=-inf inity..x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&#\"\"\"\"\"#F%*&F$F%-% $erfG6#,$*(F&!\"\"F&F$%\"xGF%F%F%F%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidDistribution.txt000066400000000000000000001453461307543307100225610ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u<1,u>0,r>0,t>r); > beta_:=RandomVariable(Beta(r,t-r)): > pdf:=factor(subs(u=(x-a)/(b-a),PDF(beta_,u))/(b-a)); > ddf:=(diff(pdf,x)); > cdf:=subs(u=(x-a)/(b-a),CDF(beta_,u)); > mu_:=a+(b-a)*Mean(beta_); > var_:=(b-a)^2*Variance(beta_); > sol:=subs(m='mu',v='var',solve({mu_=m,var_=v},{r,t})); > qdf:=a+(b-a)*Quantile(beta_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=map(_x->factor(subs(t=r+s,_x)),[diff(pdf, r)/pdf,diff(pdf, > t)/pdf,diff(pdf, a)/pdf,diff(pdf, b)/pdf]); > cdfgr:=[diff(cdf, r),diff(cdf, t),diff(cdf, a),diff(cdf, b)]; > valnum:=r=1,t=3,a=-2,b=2: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,var_)); /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| |------| \-b + a/ \-b + a/ pdf := - --------------------------------------- Beta(r~, t~ - r~) (-b + a) /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| (-1 + r~) |------| \-b + a/ \-b + a/ ddf := ------------------------------------------------- (-x + a) Beta(r~, t~ - r~) (-b + a) /-x + a\(-1 + r~) /-b + x\(t~ - r~ - 1) |------| |------| (t~ - r~ - 1) \-b + a/ \-b + a/ - ----------------------------------------------------- (-b + x) Beta(r~, t~ - r~) (-b + a) /x - a\r~ x - a |-----| hypergeom([r~, -t~ + r~ + 1], [1 + r~], -----) \b - a/ b - a cdf := -------------------------------------------------------- Beta(r~, t~ - r~) r~ (b - a) r~ mu_ := a + ---------- t~ 2 (b - a) r~ (t~ - r~) var_ := --------------------- 2 t~ (t~ + 1) 2 2 2 2 sol := {r~ = - (-a mu + b a + a var + 2 a mu - 2 b a mu + b mu 3 - var mu - mu )/((-b + a) var), 2 -a mu + b a + var + mu - mu b t~ = - ------------------------------} var qdf := FAIL / _Z - a\r~ qdf2 := RootOf(-|- ------| \ -b + a/ _Z - a hypergeom([r~, -t~ + r~ + 1], [1 + r~], - ------) -b + a + p Beta(r~, t~ - r~) r~) -x + a -b + x pdfgr := [ln(------) - ln(------) - Psi(r~) + Psi(s), -b + a -b + a -b + x ln(------) - Psi(s) + Psi(r~ + s), -b + a -b + x + r~ b - r~ x - s x + s a - --------------------------------, (-x + a) (-b + a) x + r~ b - r~ x - s x + s a - a - -------------------------------] (-b + x) (-b + a) /x - a\r~ |-----| %1 (Psi(r~) - Psi(t~ - r~)) \b - a/ cdfgr := [- ------------------------------------- Beta(r~, t~ - r~) r~ /x - a\r~ /x - a\r~ x - a |-----| %1 |-----| ln(-----) %1 \b - a/ \b - a/ b - a - --------------------- + ---------------------- 2 Beta(r~, t~ - r~) r~ Beta(r~, t~ - r~) r~ /x - a\r~ / d \ |-----| |--- %1| \b - a/ \dr~ / + --------------------, Beta(r~, t~ - r~) r~ /x - a\r~ |-----| %1 (Psi(t~ - r~) - Psi(t~)) \b - a/ - ------------------------------------- Beta(r~, t~ - r~) r~ /x - a\r~ / d \ |-----| |--- %1| \b - a/ \dt~ / + --------------------, Beta(r~, t~ - r~) r~ /x - a\r~ / 1 x - a \ |-----| |- ----- + --------| (b - a) %1 \b - a/ | b - a 2| \ (b - a) / /x - a\r~ ----------------------------------------- + |-----| Beta(r~, t~ - r~) (x - a) \b - a/ (-t~ + r~ + 1) x - a hypergeom([1 + r~, -t~ + r~ + 2], [2 + r~], -----) b - a / 1 x - a \ |- ----- + --------|/(Beta(r~, t~ - r~) (1 + r~)), | b - a 2| \ (b - a) / /x - a\r~ |-----| %1 \b - a/ /x - a\r~ - ------------------------- - |-----| (-t~ + r~ + 1) Beta(r~, t~ - r~) (b - a) \b - a/ x - a hypergeom([1 + r~, -t~ + r~ + 2], [2 + r~], -----) (x - a) b - a / 2 / (Beta(r~, t~ - r~) (1 + r~) (b - a) )] / x - a %1 := hypergeom([r~, -t~ + r~ + 1], [1 + r~], -----) b - a -0.1250000000 0.1250000000 0.9375000000 [0.2094784941 + 0.1250000000 Psi(s), -0.1732867951 - 0.1250000000 Psi(s) + 0.1250000000 Psi(1. + s), 0.03125000000 s, -0.1250000000 + 0.09375000000 s] [-0.2697019430 + 1.500000000 diff(hypergeom([1, -1], [2], 3/4), 1), 0.4687500000 + 1.500000000 diff(hypergeom([1, -1], [2], 3/4), 3), -0.03125000000, -0.0937500000] 1.105572809 -0.6666666667 0.8888888889 > factor(subs(sol,r/t)); a - mu ------ -b + a > restart: > with(Statistics): > exponential_:=RandomVariable(Exponential(1/lambda)): > assume(u>0); > pdf:=subs(u=x-'gamma',PDF(exponential_,u)); > cdf:=subs(u=x-'gamma',CDF(exponential_,u)); > mu_:='gamma'+Mean(exponential_); > var_:=Variance(exponential_); > qdf:='gamma'+Quantile(exponential_,p); > qdf2:=solve(cdf=p,x); > [factor(diff(pdf,lambda))]; > [factor(diff(cdf,lambda))]; pdf := lambda exp(-(x - gamma) lambda) cdf := 1 - exp(-(x - gamma) lambda) 1 mu_ := gamma + ------ lambda 1 var_ := ------- 2 lambda ln(1 - p) qdf := gamma - --------- lambda lambda gamma - ln(1 - p) qdf2 := ------------------------ lambda [-exp(-(x - gamma) lambda) (-1 + lambda x - lambda gamma)] [(x - gamma) exp(-(x - gamma) lambda)] > restart: > with(Statistics): > gamma_:=RandomVariable(Gamma(1/lambda,k)): > assume(u>0); > pdf:=subs(u=x-_gamma,PDF(gamma_,u)); > cdf:=subs(u=x-_gamma,CDF(gamma_,u)): > cdf2:=simplify(convert(cdf,hypergeom),symbolic); > mu_:=_gamma+Mean(gamma_); > var_:=Variance(gamma_); > subs(m='mu',v='var',solve({mu_=m,var_=v},{k,lambda})); > #qdf:=_gamma+Quantile(gamma_,p); > #qdf2:=solve(cdf=p,x); > map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, k)/pdf, > diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf]); > #dCDFdk:=collect(map(_u->simplify(convert(_u,hypergeom),symbolic),conv > ert(diff(subs(_gamma=0,cdf2), k),hypergeometric)),x); > #dCDFdlambda:=map(_u->factor(simplify(convert(_u,hypergeom),symbolic)) > ,diff(cdf2, lambda)); > #dCDFdgamma:=map(_u->simplify(convert(_u,hypergeom),symbolic),diff(cdf > 2, _gamma)); > collect(expand(simplify(factor(convert(subs(_gamma=0,lambda=1,diff(cdf > 2,k)),'StandardFunctions'))),trig),k); (k - 1) pdf := ((x - _gamma) lambda) exp(-(x - _gamma) lambda) lambda/GAMMA(k) cdf2 := (GAMMA(k + 2) - GAMMA(k + 1, (x - _gamma) lambda) - GAMMA(k + 1, (x - _gamma) lambda) k k k + k (x - _gamma) exp(-(x - _gamma) lambda) lambda k k + (x - _gamma) exp(-(x - _gamma) lambda) lambda )/ GAMMA(k + 2) k mu_ := _gamma + ------ lambda k var_ := ------- 2 lambda 2 -_gamma + mu (-_gamma + mu) {lambda = ------------, k = ---------------} var var [ln(x - _gamma) + ln(lambda) - Psi(k), -k + lambda x - lambda _gamma - -----------------------------, lambda -k + 1 + lambda x - lambda _gamma ---------------------------------] x - _gamma k GAMMA(k + 1, x) Psi(k) 2 GAMMA(k + 1, x) Psi(k) ------------------------ + ------------------------ 2 2 (k + 1) GAMMA(k) (k + 1) GAMMA(k) GAMMA(k + 1, x) Psi(k) 2 GAMMA(k + 1, x) ln(x) + ---------------------- - ----------------------- 2 2 (k + 1) k GAMMA(k) (k + 1) GAMMA(k) GAMMA(k + 1, x) ln(x) k GAMMA(k + 1, x) ln(x) - --------------------- - ----------------------- 2 2 (k + 1) k GAMMA(k) (k + 1) GAMMA(k) 2 GAMMA(k + 1, x) GAMMA(k + 1, x) + ------------------- + ----------------- 2 2 (k + 1) k GAMMA(k) (k + 1) GAMMA(k) k x x hypergeom([k + 1, k + 1], [k + 2, k + 2], -x) - -------------------------------------------------- 2 (k + 1) k GAMMA(k) 2 2 GAMMA(k + 1, x) k ln(x) ln(x) k Psi(k) + -------------------- + -------- + -------- - --------- 2 2 2 2 2 (k + 1) k GAMMA(k) (k + 1) (k + 1) (k + 1) k Psi(k) 2 k Psi(k) k x Psi(k) - -------- - ---------- - ------------------------ 2 2 2 (k + 1) (k + 1) (k + 1) GAMMA(k) exp(x) k k 2 x Psi(k) x Psi(k) - ------------------------ - -------------------------- 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) k GAMMA(k) exp(x) k k k x ln(x) 2 x ln(x) + ------------------------ + ------------------------ 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) k x ln(x) 2 k ln(x) + -------------------------- + --------- 2 2 (k + 1) k GAMMA(k) exp(x) (k + 1) k k 2 x x - -------------------------- - ------------------------ 2 2 (k + 1) k GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) k 2 x 1 - -------- - --------------------------- - ---------- 2 2 2 2 (k + 1) (k + 1) k GAMMA(k) exp(x) (k + 1) k k - -------- 2 (k + 1) > restart: > with(Statistics): > gumbel_:=RandomVariable(Gumbel(beta,1/alpha)): > pdf:=PDF(gumbel_,x); > ddf:=factor(diff(pdf,x)); > cdf:=CDF(gumbel_,x); > mu_:=Mean(gumbel_); > var_:=Variance(gumbel_); > assume(v>0): > subs(m='mu',v='var',allvalues(solve({mu_=m,var_=v},{alpha,beta}))); > qdf:=Quantile(gumbel_,p); > qdf2:=solve(cdf=p,x); > map(factor,[diff(pdf,alpha)/pdf,diff(pdf,beta)/pdf]); > map(factor,[diff(cdf,alpha)/cdf,diff(cdf,beta)/cdf]); pdf := alpha exp(-(x - beta) alpha) exp(-exp(-(x - beta) alpha)) 2 ddf := alpha exp(-(x - beta) alpha) exp(-exp(-(x - beta) alpha)) (-1 + exp(-(x - beta) alpha)) cdf := exp(-exp(-(x - beta) alpha)) gamma mu_ := beta + ----- alpha 2 Pi var_ := -------- 2 6 alpha / / 2\1/2\ | 1/2 |Pi | | / 2\1/2 / 2\1/2 | m 6 |---| | 1/2 |Pi | 1/2 |Pi | | \v~ / | 1/2 6 |---| 6 |---| |-gamma + ---------------| 6 \v~ / \var/ \ 6 / {------------- = - -------------, ------------------------------- 6 6 / 2\1/2 |Pi | |---| \v~ / / / 2\1/2\ | 1/2 |Pi | | | mu 6 |---| | | \var/ | 1/2 |-gamma - ----------------| 6 \ 6 / = - --------------------------------} / 2\1/2 |Pi | |---| \var/ ln(-ln(p)) qdf := beta - ---------- alpha beta alpha - ln(-ln(p)) qdf2 := ----------------------- alpha [(1 - alpha x + beta alpha + alpha exp(-(x - beta) alpha) x - alpha exp(-(x - beta) alpha) beta)/alpha, -alpha (-1 + exp(-(x - beta) alpha))] [(x - beta) exp(-(x - beta) alpha), -alpha exp(-(x - beta) alpha)] > restart: > with(Statistics): > with(student): > assume(u>0,sigma>0): > lognormal_:=RandomVariable(LogNormal(mu,sigma)): > pdf:=subs(u='x-_gamma',PDF(lognormal_,u)); > cdf:=subs(u='x-_gamma',CDF(lognormal_,u)); > cdf2:=value(changevar(ln(x)=y,Int(pdf,x=0..t))); > mu_:='_gamma'+Mean(lognormal_); > var_:=Variance(lognormal_); > qdf:='_gamma'+Quantile(lognormal_,p); > qdf2:=solve(cdf2=p,x); > fact:=pdf: > map(factor,[diff(pdf,mu)/fact,diff(pdf,sigma)/fact,diff(pdf,_gamma)/fa > ct]); > fact:=pdf: > map(factor,[diff(cdf,mu)/fact,diff(cdf,sigma)/fact,diff(cdf,_gamma)/fa > ct]) assuming x - _gamma > exp(mu); 2 1/2 (ln(x - _gamma) - mu) 2 exp(-1/2 ----------------------) 2 sigma~ pdf := 1/2 ------------------------------------- 1/2 (x - _gamma) sigma~ Pi { 1/2 cdf := { (mu - ln(x - _gamma)) 2 { 1/2 - 1/2 erf(1/2 --------------------------) , { sigma~ x - _gamma < exp(mu) 1/2 (ln(x - _gamma) - mu) 2 1/2 + 1/2 erf(1/2 --------------------------) , otherwise sigma~ 1/2 2 (mu - ln(-_gamma)) cdf2 := 1/2 erf(1/2 -----------------------) sigma~ 1/2 2 (-ln(t - _gamma) + mu) - 1/2 erf(1/2 ---------------------------) sigma~ 2 sigma~ mu_ := _gamma + exp(mu + -------) 2 2 2 var_ := exp(2 mu + sigma~ ) (exp(sigma~ ) - 1) qdf := FAIL qdf2 := mu - ln(x - _gamma) [- -------------------, - (mu - ln(x - _gamma) + sigma~) 2 sigma~ 3 (-mu + ln(x - _gamma) + sigma~)/sigma~ , 2 sigma~ + ln(x - _gamma) - mu -----------------------------] 2 sigma~ (x - _gamma) (ln(x - _gamma) - mu) (-x + _gamma) [-x + _gamma, -----------------------------------, -1] sigma~ > restart: > with(Statistics): > assume(beta>0): > logistic_:=RandomVariable(Logistic(alpha,beta)): > pdf:=PDF(logistic_,x); > ddf:=factor(diff(pdf,x)); > cdf:=CDF(logistic_,x); > mu_:='gamma'+Mean(logistic_); > var_:=Variance(logistic_); > qdf:=Quantile(logistic_,p); > qdf2:=solve(cdf=p,x); > dpdf:=map(factor,[diff(pdf,alpha),diff(pdf,beta)]); > factor(dpdf[2]-(x-alpha)*dpdf[1]/beta); > dcdf:=map(factor,[diff(cdf,alpha),diff(cdf,beta)]); > factor(dcdf[2]/dcdf[1]); x - alpha exp(---------) beta~ pdf := --------------------------- / x - alpha \2 beta~ |1 + exp(---------)| \ beta~ / x - alpha / x - alpha \ exp(---------) |-1 + exp(---------)| beta~ \ beta~ / ddf := - ------------------------------------ 2 / x - alpha \3 beta~ |1 + exp(---------)| \ beta~ / 1 cdf := -------------------- x - alpha 1 + exp(- ---------) beta~ mu_ := gamma + alpha 2 2 beta~ Pi var_ := ---------- 3 p qdf := alpha + beta~ ln(-----) 1 - p -1 + p qdf2 := alpha - ln(- ------) beta~ p x - alpha / x - alpha \ exp(---------) |-1 + exp(---------)| beta~ \ beta~ / x - alpha / dpdf := [------------------------------------, exp(---------) |-x 2 / x - alpha \3 beta~ \ beta~ |1 + exp(---------)| \ beta~ / x - alpha x - alpha + x exp(---------) + alpha - alpha exp(---------) - beta~ beta~ beta~ x - alpha \ / / 3 / x - alpha \3\ - beta~ exp(---------)| / |beta~ |1 + exp(---------)| |] beta~ / / \ \ beta~ / / x - alpha exp(---------) beta~ - ---------------------------- 2 / x - alpha \2 beta~ |1 + exp(---------)| \ beta~ / x - alpha exp(- ---------) beta~ dcdf := [- -----------------------------, / x - alpha \2 |1 + exp(- ---------)| beta~ \ beta~ / x - alpha (x - alpha) exp(- ---------) beta~ - ------------------------------] / x - alpha \2 2 |1 + exp(- ---------)| beta~ \ beta~ / x - alpha --------- beta~ > restart: > with(Statistics): > assume(sigma>0): > normal_:=RandomVariable(Normal(mu,sigma)): > pdf:=subs(u=x,PDF(normal_,u)); > cdf:=subs(u=x,CDF(normal_,u)); > cdf2:=int(pdf,x=0..t); > mu_:=Mean(normal_); > var_:=Variance(normal_); > qdf:=Quantile(normal_,p); > qdf2:=solve(cdf2=p,x); 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma~ pdf := 1/2 --------------------- 1/2 Pi sigma~ 1/2 2 (x - mu) cdf := 1/2 + 1/2 erf(-------------) 2 sigma~ 1/2 1/2 mu 2 2 (t - mu) cdf2 := 1/2 erf(--------) + 1/2 erf(-------------) 2 sigma~ 2 sigma~ mu_ := mu 2 var_ := sigma~ 1/2 1/2 qdf := -1/2 (-mu 2 + 2 RootOf(erf(_Z) - 1 + 2 p) sigma~) 2 qdf2 := > restart: > with(Statistics): > assume(sigma>0): > normal_:=RandomVariable(Normal(mu,sigma)): > pdf:=PDF(normal_,x)/(subs(x=b,CDF(normal_,x))-subs(x=a,CDF(normal_,x)) > ); > cdf:=int(subs(x=t,pdf),t=a..x); > mu_:=int(x*pdf,x=a..b); > var_:=int((x-mu_)^2*pdf,x=a..b); > qdf:=solve(cdf=p,x); > map(_x->factor(subs(erf(sqrt(2)*(b-mu)/2/sigma)=2*PhiB-1,erf(sqrt(2)*( > a-mu)/2/sigma)=2*PhiA-1,exp(-(b-mu)^2/2/sigma^2)=sqrt(2*Pi)*sigma*phiB > ,exp(-(a-mu)^2/2/sigma^2)=sqrt(2*Pi)*sigma*phiA,x=mu+sigma*X,a=mu+sigm > a*A,b=mu+sigma*B,_x)),[diff(pdf,mu),diff(pdf,sigma),diff(pdf,a),diff(p > df,b)]); > map(_x->factor(subs(erf(sqrt(2)*(b-mu)/2/sigma)=2*PhiB-1,erf(sqrt(2)*( > a-mu)/2/sigma)=2*PhiA-1,exp(-(b-mu)^2/2/sigma^2)=sqrt(2*Pi)*sigma*phiB > ,exp(-(a-mu)^2/2/sigma^2)=sqrt(2*Pi)*sigma*phiA,x=mu+sigma*X,a=mu+sigm > a*A,b=mu+sigma*B,_x)),[diff(cdf,mu),diff(cdf,sigma),diff(cdf,a),diff(c > df,b)]); 2 / 1/2 (x - mu) / | 1/2 pdf := 1/2 2 exp(- ---------) / |Pi sigma~ 2 / \ 2 sigma~ / 1/2 1/2 \\ | 2 (b - mu) 2 (a - mu) || |1/2 erf(-------------) - 1/2 erf(-------------)|| \ 2 sigma~ 2 sigma~ // 1/2 1/2 2 (a - mu) 2 (x - mu) -erf(-------------) + erf(-------------) 2 sigma~ 2 sigma~ cdf := - ---------------------------------------- 1/2 1/2 2 (b - mu) 2 (a - mu) -erf(-------------) + erf(-------------) 2 sigma~ 2 sigma~ / 2 2 | 1/2 -2 mu a + mu + a mu_ := |-2 sigma~ exp(- ------------------) | 2 \ 2 sigma~ 1/2 2 (a - mu) 1/2 + mu erf(-------------) Pi 2 sigma~ 2 2 1/2 -2 mu b + mu + b + 2 sigma~ exp(- ------------------) 2 2 sigma~ 1/2 \ / 2 (b - mu) 1/2| / | 1/2 - mu erf(-------------) Pi | / |Pi 2 sigma~ | / \ / / 1/2 1/2 \\ | 2 (b - mu) 2 (a - mu) || |-erf(-------------) + erf(-------------)|| \ 2 sigma~ 2 sigma~ // / | (3/2) 2 1/2 var_ := - |-sigma~ Pi exp(%5) %1 + %1 2 mu Pi %3 | \ (3/2) 1/2 + 2 %1 sigma~ %2 Pi exp(%5) - %1 2 b Pi %3 1/2 1/2 1/2 - %1 2 mu Pi %4 + %1 2 a Pi %4 - 2 a %2 Pi %4 2 2 mu a + b 1/2 + 2 sigma~ exp(-----------) Pi 2 sigma~ 2 2 1/2 a + 2 mu a + b + 2 mu b - 4 sigma~ Pi exp(-------------------------) 2 2 sigma~ 2 (3/2) 1/2 - sigma~ %2 Pi exp(%5) + 2 b %2 Pi %3 2 2 mu b + a 1/2 1/2 + 2 sigma~ exp(-----------) Pi + 2 mu %2 Pi %4 2 sigma~ \ 1/2 | / - 2 mu %2 Pi %3| sigma~ exp(-%5) / ( | / / 2 2 3/2 (%2 - 2 %2 %1 + %1 ) Pi ) 1/2 2 (a - mu) %1 := erf(-------------) 2 sigma~ 1/2 2 (b - mu) %2 := erf(-------------) 2 sigma~ 2 2 2 2 mu b + mu + b + 2 a %3 := exp(------------------------) 2 2 sigma~ 2 2 2 2 mu a + mu + a + 2 b %4 := exp(------------------------) 2 2 sigma~ 2 2 2 mu + a + b %5 := ------------- 2 sigma~ / 1/2 | 1/2 2 (a - mu) qdf := 1/2 |2 mu + 2 RootOf(erf(_Z) - erf(-------------) \ 2 sigma~ 1/2 1/2 \ 2 (b - mu) 2 (a - mu) | 1/2 - p erf(-------------) + p erf(-------------)) sigma~| 2 2 sigma~ 2 sigma~ / 2 1/2 X [1/2 2 exp(- ----) (X PhiB - X PhiA + sigma~ phiB - sigma~ phiA) 2 2 / 1/2 2 2 1/2 X / (Pi sigma~ (PhiB - PhiA) ), 1/2 2 exp(- ----) ( / 2 2 2 -PhiB + PhiA + X PhiB - X PhiA + sigma~ phiB B / 1/2 2 2 - sigma~ phiA A) / (Pi sigma~ (PhiB - PhiA) ), / 2 X 1/2 exp(- ----) 2 phiA 2 1/2 ---------------------------, 1/2 2 Pi sigma~ (PhiB - PhiA) 2 X 1/2 exp(- ----) 2 phiB 2 -1/2 ---------------------------] 1/2 2 Pi sigma~ (PhiB - PhiA) / 2 | 1/2 1/2 X [1/2 |2 phiA sigma~ Pi PhiB - 2 exp(- ----) PhiB \ 2 2 1/2 X 1/2 + 2 exp(- ----) PhiA - 2 sigma~ Pi PhiA phiB 2 1/2 1/2 + sigma~ Pi phiB - phiA sigma~ Pi 1/2 1/2 2 X + sigma~ Pi erf(------) phiB 2 1/2 \ 1/2 2 X | / 1/2 - sigma~ Pi erf(------) phiA| / (Pi sigma~ 2 / / / 2 | 1/2 (PhiB - PhiA) ), -1/2 |-2 phiA A sigma~ Pi PhiB \ 2 2 1/2 X 1/2 X + 2 X exp(- ----) PhiB - 2 X exp(- ----) PhiA 2 2 1/2 1/2 + 2 sigma~ Pi PhiA phiB B - sigma~ Pi phiB B 1/2 1/2 1/2 2 X + phiA A sigma~ Pi - sigma~ Pi erf(------) phiB B 2 1/2 \ 1/2 2 X | / 1/2 + sigma~ Pi erf(------) phiA A| / (Pi sigma~ 2 / / / 1/2 \ | 2 X | phiA |-2 PhiB + 1 + erf(------)| 2 \ 2 / (PhiB - PhiA) ), 1/2 --------------------------------, 2 (PhiB - PhiA) / 1/2 \ | 2 X | |-2 PhiA + 1 + erf(------)| phiB \ 2 / -1/2 --------------------------------] 2 (PhiB - PhiA) > restart: > with(Statistics): > assume(u>0,nu>0): > student_:=RandomVariable(StudentT(nu)): > pdf:=subs(u=x-mu,PDF(student_,u)); > cdf:=subs(u=x-mu,CDF(student_,u)): > cdf2:=simplify(convert(subs(mu=0,(cdf - 1)*Beta(1/2,nu/2)*sqrt(nu)), > GAMMA)) assuming nu > 1: > mu_:=mu+Mean(student_); > var_:=Variance(student_); > factor(diff((1+(x-mu)^2/nu)^(-1/2-1/2*nu),x)); > map(factor,[diff((1+(x-mu)^2/nu)^(-1/2-1/2*nu),mu),diff(pdf,nu)]); > #qdf:=Quantile(student_,p): > #qdf2:=solve(cdf=p,x): nu~ GAMMA(1/2 + ---) 2 pdf := ------------------------------------------------- / nu~\ |1/2 + ---| \ 2 / / 2\ 1/2 nu~ | (x - mu) | (Pi nu~) GAMMA(---) |1 + ---------| 2 \ nu~ / /{ undefined nu~ <= 1 \ mu_ := mu + |{ | \{ 0 otherwise/ { undefined nu~ <= 2 { var_ := { nu~ { -------- otherwise { -2 + nu~ / nu~\ |- 1/2 - ---| \ 2 / / 2 2\ |nu~ + x - 2 x mu + mu | |-----------------------| (nu~ + 1) (x - mu) \ nu~ / - --------------------------------------------------------- 2 2 nu~ + x - 2 x mu + mu / nu~\ |- 1/2 - ---| \ 2 / /%1 \ |---| (nu~ + 1) (x - mu) \nu~/ nu~ [-------------------------------------, 1/2 GAMMA(1/2 + ---) Pi nu~ %1 2 / nu~ nu~ 2 |Psi(1/2 + ---) nu~ + Psi(1/2 + ---) x \ 2 2 nu~ nu~ 2 - 2 Psi(1/2 + ---) x mu + Psi(1/2 + ---) mu - 1 2 2 nu~ nu~ 2 nu~ - Psi(---) nu~ - Psi(---) x + 2 Psi(---) x mu 2 2 2 nu~ 2 %1 %1 2 %1 - Psi(---) mu - ln(---) nu~ - ln(---) x + 2 ln(---) x mu 2 nu~ nu~ nu~ / | | %1 2 2 2\ / | 3/2 - ln(---) mu + x - 2 x mu + mu | / |(Pi nu~) nu~ / / \ / nu~\ \ |1/2 + ---| | \ 2 / | nu~ /%1 \ | GAMMA(---) |---| %1|] 2 \nu~/ / 2 2 %1 := nu~ + x - 2 x mu + mu > restart: > with(Statistics): > assume(aa,x triangular_:=RandomVariable(Triangular(a,b,m)): > pdf:=subs(u=x,PDF(triangular_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u=x,CDF(triangular_,u)); > mu_:=Mean(triangular_); > var_:=Variance(triangular_); > qdf:=Quantile(triangular_,p); > map(factor,[diff(pdf,a),diff(pdf,m),diff(pdf,b)]); > map(factor,[diff(cdf,a),diff(cdf,m),diff(cdf,b)]); { 0 x~ < a~ { { 2 (x~ - a~) { ------------------- x~ <= m~ { (b~ - a~) (m~ - a~) pdf := { { 2 (b~ - x~) { ------------------- x~ <= b~ { (b~ - a~) (b~ - m~) { { 0 otherwise { 2 { ------------------- x~ < m~ { (b~ - a~) (m~ - a~) { ddf := { undefined x~ = m~ { { 2 { - ------------------- m~ < x~ { (b~ - a~) (b~ - m~) { 0 x~ < a~ { { 2 { (x~ - a~) { ------------------- x~ <= m~ { (b~ - a~) (m~ - a~) cdf := { { 2 { (b~ - x~) { 1 - ------------------- x~ <= b~ { (b~ - a~) (b~ - m~) { { 1 otherwise a~ b~ m~ mu_ := ---- + ---- + ---- 3 3 3 2 2 2 var_ := 1/18 a~ + 1/18 b~ + 1/18 m~ - 1/18 a~ b~ - 1/18 a~ m~ - 1/18 b~ m~ { 1/2 m~ - a~ { a~ + (p (b~ - a~) (m~ - a~)) p < ------- qdf := { b~ - a~ { { 1/2 { b~ - ((1 - p) (b~ - a~) (b~ - m~)) otherwise { 2 { 2 (-b~ m~ + a~ + x~ m~ - 2 x~ a~ + x~ b~) { ------------------------------------------ x~ <= m~ { 2 2 [{ (-b~ + a~) (-m~ + a~) , { { 2 (-b~ + x~) { ---------------------- otherwise { 2 { (-b~ + a~) (-b~ + m~) { 2 (-b~ + x~) { ---------------------- m~ < x~ { 2 { (-b~ + a~) (-b~ + m~) { { { { undefined m~ = x~, { { { { 2 (-x~ + a~) { { - ---------------------- x~ < m~ { 2 { (-b~ + a~) (-m~ + a~) 2 (-x~ + a~) - ---------------------- , x~ <= m~ 2 (-b~ + a~) (-m~ + a~) 2 2 (b~ - a~ m~ + x~ m~ - 2 x~ b~ + x~ a~) - ----------------------------------------- , otherwise] 2 2 (-b~ + a~) (-b~ + m~) { { [{ (-x~ + a~) (2 b~ m~ - a~ b~ - a~ m~ - x~ m~ + 2 x~ a~ - x~ b~)/( { { 2 2 (-b~ + a~) (-m~ + a~) ) , x~ <= m~ 2 (-b~ + x~) ---------------------- , otherwise, 2 (-b~ + a~) (-b~ + m~) { 2 { (-b~ + x~) { ---------------------- m~ <= x~ { 2 { { (-b~ + a~) (-b~ + m~) { { , { { 2 { { (-x~ + a~) { { ---------------------- x~ < m~ { 2 { (-b~ + a~) (-m~ + a~) 2 (-x~ + a~) ---------------------- , x~ <= m~ 2 (-b~ + a~) (-m~ + a~) - (-b~ + x~) (b~ m~ + a~ b~ - 2 a~ m~ + x~ m~ - 2 x~ b~ + x~ a~)/( 2 2 (-b~ + a~) (-b~ + m~) ) , otherwise] > restart: > with(Statistics): > assume(aa): > uniform_:=RandomVariable(Uniform(a,b)): > pdf:=subs(u=x,PDF(uniform_,u)); > cdf:=subs(u=x,CDF(uniform_,u)); > cdf2:=int(pdf,x=0..t); > mu_:=Mean(uniform_); > var_:=Variance(uniform_); > qdf:=Quantile(uniform_,p); > qdf2:=solve(cdf=p,x); > [diff(pdf,a),diff(pdf,b)]; > map(factor,[diff(cdf,a),diff(cdf,b)]); { 0 x~ < a~ { { 1 pdf := { ------- x~ < b~ { b~ - a~ { { 0 otherwise { 0 x~ < a~ { { x~ - a~ cdf := { ------- x~ < b~ { b~ - a~ { { 1 otherwise t cdf2 := ------- b~ - a~ a~ b~ mu_ := ---- + ---- 2 2 2 (b~ - a~) var_ := ---------- 12 qdf := a~ + p (b~ - a~) qdf2 := a~ + p b~ - p a~ 1 1 [----------, - ----------] 2 2 (b~ - a~) (b~ - a~) -b~ + x~ -x~ + a~ [-----------, -----------] 2 2 (-b~ + a~) (-b~ + a~) > restart: > with(Statistics): > assume(u>0,alpha>0,beta>0): > weibull_:=RandomVariable(Weibull(alpha,beta)): > pdf:=subs(u=x-'gamma',PDF(weibull_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u=x-'gamma',CDF(weibull_,u)); > cdf2:=int(pdf,x=0..t); > mu_:='gamma'+Mean(weibull_); > var_:=Variance(weibull_); > subs(m='mu',v='var',solve({mu_=m,var_=v},{alpha,beta})); > qdf:='gamma'+Quantile(weibull_,p); > qdf2:=solve(cdf=p,x); > dpdf:=[diff(pdf,alpha),diff(pdf,beta)]: > map(factor,dpdf); > factor(dpdf[2]/dpdf[1]); > dcdf:=[diff(cdf,alpha),diff(cdf,beta)]: > map(factor,dcdf); > factor(dcdf[2]/dcdf[1]); (-1 + beta~) /x - gamma\beta~ beta~ (x - gamma) exp(-|---------| ) \ alpha~ / pdf := ---------------------------------------------------- beta~ alpha~ (-1 + beta~) ddf := beta~ (x - gamma) (-1 + beta~) /x - gamma\beta~ / beta~ 2 exp(-|---------| ) / ((x - gamma) alpha~ ) - beta~ \ alpha~ / / (-1 + beta~) /x - gamma\beta~ (x - gamma) |---------| \ alpha~ / /x - gamma\beta~ / beta~ exp(-|---------| ) / (alpha~ (x - gamma)) \ alpha~ / / /x - gamma\beta~ cdf := 1 - exp(-|---------| ) \ alpha~ / beta~ (-beta~) cdf2 := exp(-gamma exp(Pi beta~ I) alpha~ ) beta~ (-beta~) - exp(-(t - gamma) alpha~ ) beta~ + 1 mu_ := gamma + alpha~ GAMMA(---------) beta~ / beta~ + 2 beta~ + 1 2\ var_ := alpha~ |GAMMA(---------) - GAMMA(---------) | \ beta~ beta~ / Warning, solutions may have been lost v = var / 1 \ |-----| \beta~/ 1 qdf := gamma + alpha~ ln(-----) 1 - p ln(-ln(1 - p)) qdf2 := exp(--------------) alpha~ + gamma beta~ 2 (-1 + beta~) /x - gamma\beta~ [beta~ (x - gamma) exp(-|---------| ) \ alpha~ / / /x - gamma\beta~\ / beta~ |-1 + |---------| | / (alpha~ alpha~), - \ \ alpha~ / / / (-1 + beta~) /x - gamma\beta~ / (x - gamma) exp(-|---------| ) |-1 \ alpha~ / \ - beta~ ln(x - gamma) + beta~ ln(alpha~) /x - gamma\beta~ x - gamma \ / beta~ + beta~ |---------| ln(---------)| / alpha~ ] \ alpha~ / alpha~ / / / - |-1 - beta~ ln(x - gamma) + beta~ ln(alpha~) \ /x - gamma\beta~ x - gamma \ / / 2 + beta~ |---------| ln(---------)| alpha~ / |beta~ \ alpha~ / alpha~ / / \ / /x - gamma\beta~\\ |-1 + |---------| || \ \ alpha~ / // /x - gamma\beta~ /x - gamma\beta~ |---------| beta~ exp(-|---------| ) \ alpha~ / \ alpha~ / [- ---------------------------------------------, alpha~ /x - gamma\beta~ x - gamma /x - gamma\beta~ |---------| ln(---------) exp(-|---------| )] \ alpha~ / alpha~ \ alpha~ / x - gamma ln(---------) alpha~ alpha~ - -------------------- beta~ > -(-1+simplify(-beta*ln(x-gamma)+beta*ln(alpha),'symbolic')+beta*((x-ga > mma)/alpha)^beta*ln((x-gamma)/alpha))*alpha/beta^2/(-1+((x-gamma)/alph > a)^beta); / - |-1 - beta~ (ln(x - gamma) - ln(alpha~)) \ /x - gamma\beta~ x - gamma \ / / 2 + beta~ |---------| ln(---------)| alpha~ / |beta~ \ alpha~ / alpha~ / / \ / /x - gamma\beta~\\ |-1 + |---------| || \ \ alpha~ / // > -(-1-simplify(beta*(ln(x-gamma)-ln(alpha)),'assume = > positive')+beta*((x-gamma)/alpha)^beta*ln((x-gamma)/alpha))*alpha/beta > ^2/(-1+((x-gamma)/alpha)^beta); / - |-1 - beta~ (ln(x - gamma) - ln(alpha~)) \ /x - gamma\beta~ x - gamma \ / / 2 + beta~ |---------| ln(---------)| alpha~ / |beta~ \ alpha~ / alpha~ / / \ / /x - gamma\beta~\\ |-1 + |---------| || \ \ alpha~ / // > restart: > with(Statistics): > geometric_:=RandomVariable(Geometric(p)): > pdf:=subs(u=n-1,ProbabilityFunction(geometric_,u)); > cdf:=simplify(subs(u=n-1,CDF(geometric_,u))); > mu_:=factor(1+Mean(geometric_)); > var_:=Variance(geometric_); > qdf:=simplify(1+Quantile(geometric_,q)); > qdf2:=solve(cdf=q,K); > factor(diff(pdf, p)); > diff(cdf, p); { 0 n < 1 pdf := { { (n - 1) { p (1 - p) otherwise { 0 n < 1 cdf := { { floor(n) { 1 - (1 - p) 1 <= n mu_ := 1/p 1 - p var_ := ----- 2 p ln(1 - q) qdf := ceil(---------) ln(1 - p) qdf2 := { 0 n < 1 { { (n - 1) { (1 - p) (-1 + p n) { ------------------------- otherwise { -1 + p { 0 n < 1 { { floor(n) { (1 - p) floor(n) { ------------------------ 1 <= n { 1 - p > restart: > with(Statistics): > poisson_:=RandomVariable(Poisson(lambda)): > pdf:=subs(u=n,ProbabilityFunction(poisson_,u)); > expand(log(pdf)) assuming n > 0, lambda > 0; > cdf:=simplify(subs(u=n,CDF(poisson_,u))); > mu_:=Mean(poisson_); > var_:=Variance(poisson_); > qdf:=simplify(Quantile(poisson_,q)); > qdf2:=solve(cdf=q,K); > factor(diff(pdf, lambda)); > diff(cdf, lambda); { 0 n < 0 { pdf := { n { lambda exp(-lambda) { -------------------- otherwise { n! n ln(lambda) - lambda - ln(n!) GAMMA(floor(n) + 1, lambda) cdf := --------------------------- GAMMA(floor(n) + 1) mu_ := lambda var_ := lambda qdf := RootOf(floor(_Z) - RootOf(GAMMA(_Z + 1, lambda) _Z + GAMMA(_Z + 1, lambda) - q GAMMA(_Z + 2))) qdf2 := { 0 n < 0 { { n { lambda exp(-lambda) (n - lambda) { --------------------------------- otherwise { lambda n! floor(n) lambda exp(-lambda) - --------------------------- GAMMA(floor(n) + 1) > # > allvalues(qdf); RootOf(floor(_Z) - RootOf(GAMMA(_Z + 1, lambda) _Z + GAMMA(_Z + 1, lambda) - q GAMMA(_Z + 2))) > plot(subs(lambda=10,GAMMA((n)+1,lambda)/GAMMA((n)+1)),n=0..50); > solve(GAMMA((n)+1,lambda)/GAMMA((n)+1)=q,n); RootOf(-GAMMA(_Z + 1, lambda) + q GAMMA(_Z + 1)) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x); 1/2 2 x 1/2 + 1/2 erf(------) 2 > openturns-1.9/validation/src/ValidDualLinearCombination.mw000066400000000000000000001255751307543307100241130ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZVLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRImZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSN4MUYnRi9GMi1GNjYtUSJeRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjExMTExMTFlbUYnL0ZORmlvLUkjbW5HRiQ2JFEiM0YnRjlGZ24tRjY2LVEiKkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4xNjY2NjY3ZW1GJy9GTkZjcEZnbi1GLDYlUSRzaW5GJy9GMEY9RjktSShtZmVuY2VkR0YkNiQtRiM2Ky1GLDYlUSN4MkYnRi9GMkZnbi1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmVxRmduLUZccDYkUSQyLjVGJ0Y5RmduRl9wRmduLUYsNiVRI3gzRidGL0YyRjlGZ24tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRmRxRmZxRmduLUZqcDYkLUYjNidGYm9GZ25GYXFGZ25GXnFGOUZlby1GXHA2JFEiMkYnRjlGZ24tRjY2LVEiL0YnRjlGO0Y+L0ZBRjFGQkZERkZGSEZicEZkcEZnbi1GanA2JC1GIzYpLUZccDYkUSQxLjBGJ0Y5RmduRmFxRmduRmpxRmVvRmRyRjktRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVEiZ0YnRi9GMkZfby1GLDYlUSRleHBGJ0ZocEY5LUZqcDYkLUYjNixGXXJGYm9GZ25GX3BGZ25GXnFGZ25GYXFGZ25GanFGOUZnbkZnckZnbi1GLDYlUSRjb3NGJ0ZocEY5LUZqcDYkLUYjNi9GX3NGZ25GYXFGZ25GXnFGZ25GX3BGZ25GanFGZ25GXXJGZ25GYm9GOUZic0ZPRmduLUYsNiVRImhGJ0YvRjJGX28tRiw2JVEnTWF0cml4RidGL0YyLUZqcDYkLUYjNiMtRmpwNiYtRiM2Iy1GanA2Ji1GIzYlLUZccDYkUSQxLjVGJ0Y5LUY2Ni1RIixGJ0Y5RjtGZXNGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRmdxRjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGOUZhdkZkdkY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0Zcb0ZhcUZqdC1GanA2JC1GIzYjLUZqcDYmLUYjNiMtRmpwNiYtRiM2JkZdci1GXHA2JFEkMy41RidGOUZcdi1GXHA2JFEkMC41RidGOUY5RmF2RmR2RjlGYXZGZHZGOUZndkZmc0Zicw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUkIiNEISIiRi9GLyomLCZGJEYvRi5GLyIiIywmJCIjNUYzRi8qJEYwRjZGL0YzRjM= KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywmKiZJI3gxR0YoIiIiSSN4MkdGKEYtISIiSSN4M0dGKEYtRi0tSSRjb3NHRiU2IywoJCEjNUYvRi0qJkYuRi1GMEYtRi9GLEYtRi8= LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciKkc5SV0i QyU+SSJwRzYiNiUvSSN4MUdGJSQiIzchIiIvSSN4MkdGJSQiI0JGKy9JI3gzR0YlJCIjTUYrRistSSZldmFsZkclKnByb3RlY3RlZEc2Iy1JJXN1YnNHRjY2JEYkSSJoR0Yl LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciKk9HSV0i QyY+SSNkaEc2Ii1JJ01hdHJpeEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjNyU3JC1JJWRpZmZHRik2JCZJImhHRiU2JCIiIkY0SSN4MUdGJS1GLzYkJkYyNiRGNCIiI0Y1NyQtRi82JEYxSSN4MkdGJS1GLzYkRjhGPjckLUYvNiRGMUkjeDNHRiUtRi82JEY4RkQhIiItSSZldmFsZkdGKTYjLUklc3Vic0dGKTYkSSJwR0YlRiRGNA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciKmsnejQ6 JkkiaEc2IjYkIiIiIiIj LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUkIiNEISIiRi9GMSomLCZGJEYvRi5GLyIiIywmJCIjNUYzRi8qJEYwRjZGL0YzJCEjREYzKiYtSSRleHBHRik2IywmKiZGJEYvRi5GL0YzRjBGL0YvLUkkY29zR0YpNiMsKCQhIzVGM0YvKiZGLkYvRjBGL0YzRiRGL0YzJCIiJkYz JSFH TTdSMApJNlJUQUJMRV9TQVZFLzE1MDMwMTQyOFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyMiIiIjLCgqJiUjeDFHIiIkLSUkc2luRzYjLCYlI3gyRyIiIiUjeDNHJCIjRCEiIkYwJCIjOkY0KiYsJkYpRjBGL0YwIiIjLCYkIiM1RjRGMCokRjFGOUYwRjQkISM6RjQqJi0lJGV4cEc2IywmKiZGKUYwRi9GMEY0RjFGMEYwLSUkY29zRzYjLCgkISM1RjRGMComRi9GMEYxRjBGNEYpRjBGNCQhI05GNCwoRihGMkY3JCEjREY0RkAkIiImRjRGJg==TTdSMApJNlJUQUJMRV9TQVZFLzE1MDMwMjgzNlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyMiIiIjJCErP3FXakshIikkISszcTQnZSMhIipGJg==TTdSMApJNlJUQUJMRV9TQVZFLzE1MDk3OTY2NFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyciJCIjJCIrQUpvKHkiISIoJCErXmN0YFBGKSQhK2kmKmVgSUYpJCErN1pLYlEhIikkIitRJGYrNyZGMCQiKycpKUh4RiVGMEYm openturns-1.9/validation/src/ValidEV3.mw000066400000000000000000001565221307543307100203010ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZGLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRImZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZnbi1GLDYlUSN4MUYnRi9GMi1GNjYtUSJeRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjExMTExMTFlbUYnL0ZORmlvLUkjbW5HRiQ2JFEiM0YnRjlGZ24tRjY2LVEiKkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4xNjY2NjY3ZW1GJy9GTkZjcEZnbi1GLDYlUSRzaW5GJy9GMEY9RjktSShtZmVuY2VkR0YkNiQtRiM2Ky1GLDYlUSN4MkYnRi9GMkZnbi1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmVxRmduLUkmbWZyYWNHRiQ2KC1GXHA2JFEiNUYnRjktRiM2Iy1GXHA2JFEiMkYnRjkvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmdyLyUpYmV2ZWxsZWRHRj1GZ25GX3BGZ24tRiw2JVEjeDNGJ0YvRjJGOUZnbi1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGZHFGZnFGZ24tRmpwNiQtRiM2J0Zib0ZnbkZhcUZnbkZecUY5RmVvRl9yRmduLUY2Ni1RIi9GJ0Y5RjtGPi9GQUYxRkJGREZGRkhGYnBGZHBGZ24tRmpwNiQtRiM2KS1GXHA2JEZkckY5RmduRmFxRmduRlxzRmVvRl9yRjktRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZqbkZNRk9GZ24tRiw2JVElZGlmZkYnRi9GMi1GanA2JC1GIzYlRlxvLUY2Ni1RIixGJ0Y5RjtGY3RGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRlxzRjlGYHRGT0ZnbkZkdC1GanA2JC1GIzYnRlxvRlt1RlxzLUY2Ni1RIiRGJ0Y5RjtGPkZARkJGREZGRkhGam5GW29GX3JGOUZgdA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUjIiImIiIjRi9GLyomLCZGJEYvRi5GL0YzLCZGL0YvKiRGMEYzRi8hIiJGOA== LCYqJkkjeDFHNiIiIiQtSSRjb3NHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUjIiImIiIjRi9GMSooLCZGJEYvRi5GL0YzLCZGL0YvKiRGMEYzRi8hIiNGMEYvRjM= LCgqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUjIiImIiIjRi8jISNEIiIlKigsJkYkRi9GLkYvRjMsJkYvRi8qJEYwRjNGLyEiJEYwRjMhIikqJkY4RjNGOSEiI0Yz Qy4+SSRkZjFHNiIsJiomSSN4MUdGJSIiIy1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjLCZJI3gyR0YlIiIiSSN4M0dGJSMiIiZGKUYyIiIkLUkiKkdGLTYkKiYsJkYoRilGMUYpRjIsJkYyRjIqJEYzRilGMkYyKiRGPCEiIyEiIkZAPkkkZGYyR0YlLCYqJkYoRjYtSSRjb3NHRixGL0YyRjJGN0ZARkA+SSRkZjNHRiUsJkZERjQqKCwmRihGMkYxRjJGKUY8Rj9GM0YyRilGQD5JJHJlZkdGJTclLUklZGlmZkdGLTYkSSJmR0YlRigtRlA2JEZSRjEtRlA2JEZSRjNGMj5JI290R0YlNyVGJEZCRkhGMi1JJG1hcEdGLTYkSSlzaW1wbGlmeUdGJSwmKiZGKEY2RipGMiMhI0QiIiUqJiwmKiZGS0YpRjxGKUYpKihGS0YpRjNGKS1GODYkRlxvRjxGMiEiKUYyRjwhIiVGMkYy LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyUsJiomSSN4MUc2IiIiIy1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCZJI3gyR0YmIiIiSSN4M0dGJiMiIiZGJ0YwIiIkKiYsJkYlRjBGL0YwRjAsJkYwRjAqJEYxRidGMCEiIiEiIywmKiZGJUY0LUkkY29zR0YqRi1GMEYwRjVGOiwmRjxGMiooRjZGJ0Y3RjpGMUYwRic= NyUsJiomSSN4MUc2IiIiIy1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCZJI3gyR0YmIiIiSSN4M0dGJiMiIiZGJ0YwIiIkKiYsJkYlRidGL0YnRjAsJkYwRjAqJEYxRidGMCEiIkY5LCYqJkYlRjQtSSRjb3NHRipGLUYwRjBGNUY5LCZGO0YyKigsJkYlRjBGL0YwRidGNyEiI0YxRjBGJw== LCYqJkkjeDFHNiIiIiQtSSRzaW5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywmSSN4MkdGJSIiIkkjeDNHRiUjIiImIiIjRi8jISNEIiIlKigsJkYkRi9GLkYvRjMsJiokRjBGMyIjOiEiIkYvRi8sJkYvRi9GOkYvISIkISIj QzI+SSZkMmYxMUc2IiwmKiZJI3gxR0YlIiIiLUkkc2luRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJkkjeDJHRiVGKUkjeDNHRiUjIiImIiIjRikiIictSSIqR0YtNiQqJiwmRjVGKSokRjJGNUY1RiksJkYpRilGPEYpRjUqJEY9ISIlISIiRkA+SSZkMmYyMUdGJSwmKiZGKEY1LUkkY29zR0YsRi9GKSIiJEY3RkBGQD5JJmQyZjIyR0YlLCYqJkYoRkdGKkYpRkBGN0ZARkA+SSZkMmYzMUdGJSwmRkQjIiM6RjUtRjg2JCooRjJGKSwmRihGNUYxRjVGKUY9RjVGPkY1RkA+SSZkMmYzMkdGJSwmRksjISImRjVGUUY1RkA+SSZkMmYzM0dGJSwmRksjISNEIiIlKiYsJiomLCZGKEYpRjFGKUY1Rj1GNUY1KihGXW9GNUYyRjUtRjg2JEZpbkY9RikhIilGKUY9Rj9GKUZAPkkkcmVmR0YlNygtSSVkaWZmR0YtNiRJImZHRiUtSSIkR0YtNiRGKEY1LUZmbzYkLUZmbzYkRmhvRjFGKC1GZm82JC1GZm82JEZob0YyRigtRmZvNiRGaG8tRmpvNiRGMUY1LUZmbzYkRl5wRjItRmZvNiRGaG8tRmpvNiRGMkY1Rik+SSNvdEdGJTcoRiRGQkZJRk1GVkZlbkYp LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NygsJiomSSN4MUc2IiIiIi1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCZJI3gyR0YmRidJI3gzR0YmIyIiJiIiI0YnIiInKiQsJkYnRicqJEYwRjNGJyEiIiEiIywmKiZGJUYzLUkkY29zR0YqRi1GJyIiJEY1RjksJkY7IyIjOkYzKigsJkYlRidGL0YnRidGNkY5RjBGJyIiJSwmKiZGJUY+RihGJ0Y4RjVGOSwmRkYjISImRjNGQkZELChGRiMhI0RGRCooRkNGM0Y2ISIkRjBGMyEiKSomRkNGM0Y2RjlGMw== NygsJiomSSN4MUc2IiIiIi1JJHNpbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYjLCZJI3gyR0YmRidJI3gzR0YmIyIiJiIiI0YnIiInKiYsJkYzRicqJEYwRjNGM0YnLCZGJ0YnRjdGJyEiIyEiIiwmKiZGJUYzLUkkY29zR0YqRi1GJyIiJEY1RjosJiomRiVGP0YoRidGOkY1RjosJkY8IyIjOkYzKihGMEYnLCZGJUYzRi9GM0YnRjhGOUYzLCZGQSMhIiZGM0ZFRjMsJkZBIyEjRCIiJSomLCYqJiwmRiVGJ0YvRidGM0Y4RjNGMyooRlFGM0YwRjMsJkZNRidGN0ZNRichIilGJ0Y4ISIlRic= QyYtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiYsJiomSSN4MUdGKCIiIiwmRi5GLiokSSN4M0dGKCIiI0YuRjJGMiooRi1GLkYxRjItSSIqR0YmNiQiIiVGL0YuISIpRi5GLyEiJUYuLUYkNiMtSSVkaWZmR0YmNiQsJCooRi1GLkYxRi5GLyEiI0YyRjFGLg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKEkjeDFHNiIiIiIsJiokSSN4M0dGJSIiIyIjOiEiIkYmRiYsJkYmRiZGKEYmISIkISIj LCQqKEkjeDFHNiIiIiIsJiEiIkYmKiRJI3gzR0YlIiIjIiIkRiYsJkYmRiZGKUYmISIkISIj LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/ValidEV3_2.mw000066400000000000000000001044221307543307100205120ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY4LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRImZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JKG1mZW5jZWRHRiQ2JC1GIzYnLUYsNiVRInhGJ0YvRjJGZ24tRjY2LVEiKkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4xNjY2NjY3ZW1GJy9GTkZecEZnbi1GLDYlUSJ5RidGL0YyRjktRjY2LVEiL0YnRjlGO0Y+L0ZBRjFGQkZERkZGSEZdcEZfcC1GY282JC1GIzYnLUkjbW5HRiQ2JFEiMUYnRjktRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZjcUZgcC1GNjYtUSJeRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjExMTExMTFlbUYnL0ZORmlxLUZccTYkUSIyRidGOUY5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPLUYsNiVRI2RmRidGL0YyRl9vRmduLUZjbzYmLUYjNictRiw2JVElZGlmZkYnRi9GMi1GY282JC1GIzYlRlxvLUY2Ni1RIixGJ0Y5RjtGYXJGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRmdvRjlGYHNGaXItRmNvNiQtRiM2JUZcb0Zgc0ZgcEY5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGXnJGT0Znbi1GLDYlUSRkMmZGJ0YvRjJGX28tRmNvNiYtRiM2KkZpci1GY282JC1GIzYmRmJyLUZjbzYmLUYjNiNGW3FGOUZpc0ZcdEZgc0Znb0Y5RmBzRmlyLUZjbzYkLUYjNiZGYnJGanRGYHNGYHBGOUZgc0Zpci1GY282JC1GIzYmRmJyLUZjbzYmLUYjNiNGW3JGOUZpc0ZcdEZgc0ZgcEY5RjlGaXNGXHRGXnI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KihJInhHNiIiIiJJInlHRiRGJSwmRiVGJSokRiYiIiNGJSEiIg== NyQqJkkieUc2IiIiIiwmRiZGJiokRiQiIiNGJiEiIiwmKiZJInhHRiVGJkYnRipGJiooRi1GJkYkRilGJyEiI0Yv NyUiIiEsJiokLCYiIiJGJyokSSJ5RzYiIiIjRichIiJGJyomRilGK0YmISIjRi4sJiooSSJ4R0YqRidGJkYuRilGJyEiJyooRjFGJ0YpIiIkRiYhIiQiIik= QyQ+SSN0cEc2Ii1JIitHJSpwcm90ZWN0ZWRHNiQsJiooSSJ4R0YlIiIiLCZGLUYtKiRJInlHRiUiIiNGLSEiI0YwRi0hIiUqKkYsRi1GMCIiJC1JIipHRig2JCIiJUYuRi1GLkYzIiIpLCRGK0YyRi0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqKEkieEc2IiIiIiwmRiZGJiokSSJ5R0YlIiIjRiYhIiNGKUYmISInKipGJEYmRikiIiQsJiIiJUYmRihGMEYmRichIiUiIik= LUkpc2ltcGxpZnlHNiI2IywmJkkkZDJmR0YkNiMiIiQiIiJJI3RwR0YkISIi LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKEkieEc2IiIiIkkieUdGJSIiJCwmRiZGJiokRiciIiNGJiEiJCEjQw== JSFH openturns-1.9/validation/src/ValidElliptical.mws000066400000000000000000000135131307543307100221410ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "R:=(Fx+dFx*dp-Fa-dFa *dp)/(Fb+dFb*dp-Fa-dFa*dp);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"RG* &,*%#FxG\"\"\"*&%$dFxGF(%#dpGF(F(%#FaG!\"\"*&%$dFaGF(F+F(F-F(,*%#FbGF( *&%$dFbGF(F+F(F(F,F-F.F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "series(R,dp,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#+)%#dpG*&,&%#Fx G\"\"\"%#FaG!\"\"F(,&%#FbGF(F)F*F*\"\"!*&,(%$dFxGF(%$dFaGF**(F&F(,&F,F *F)F(F*,&%$dFbGF(F1F*F(F(F(F+F*F(-%\"OG6#F(\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "factor((dFx-dFa+(Fx-Fa)/(-Fb+Fa)*(dFb-dFa))/( Fb-Fa));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,.*&%$dFxG\"\"\"%#FbGF'F '*&F&F'%#FaGF'!\"\"*&%$dFaGF'F(F'F+*&%#FxGF'%$dFbGF'F+*&F/F'F-F'F'*&F* F'F0F'F'F',&F(F+F*F'!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "r:=(fx+dfx*dp)/(Fb+dFb*dp-Fa-dFa*dp);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG*&,&%#fxG\"\"\"*&%$dfxGF(%#dpGF(F(F(,*%#FbGF(*&%$dFbGF(F+F (F(%#FaG!\"\"*&%$dFaGF(F+F(F1F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "series(r,dp,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#+)%#dpG*&%# fxG\"\"\",&%#FbGF'%#FaG!\"\"F+\"\"!*&,&%$dfxGF'*(F&F',&F)F+F*F'F+,&%$d FbGF'%$dFaGF+F'F'F'F(F+F'-%\"OG6#F'\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 147 "with(Statistics):\nwith(LinearAlgebra):\nassume(sigm a>0):\npdf:=PDF(RandomVariable(Normal(mu,sigma)),x);\ncdf:=CDF(RandomV ariable(Normal(mu,sigma)),x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pd fG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)%'sigma|irGF--%$expG6#,$*(F)F-, &%\"xGF(%#muGF-F)F.!\"#F-F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ cdfG,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,$**F(!\"\"F(F&,&%\"xGF'%#muGF/F'%' sigma|irGF/F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 89 "dfx:=V ector([diff(pdf,mu),diff(pdf,sigma)]);\ndFx:=Vector([diff(cdf,mu),diff (cdf,sigma)]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$dfxG-%'RTABLEG6% \"*w#))49-%'MATRIXG6#7$7#,$*&#\"\"\"\"\"#F1*,F2F0%#PiG#!\"\"F2%'sigma| irG!\"$,&%\"xGF1%#muGF6F1-%$expG6#,$*(F2F6F9F2F7!\"#F6F1F1F17#,&*&#F1F 2F1**F2F0F4F5F7FAF%$dFxG-%'RTABLEG6%\"*7( >59-%'MATRIXG6#7$7#,$*&#\"\"\"\"\"#F1**F2#F1F2%#PiG#!\"\"F2%'sigma|irG F7-%$expG6#,$*(F2F7,&%\"xGF1%#muGF7F2F8!\"#F7F1F1F77#,$*&#F1F2F1*,F5F6 F9F1F2F4F>F1F8FAF1F7&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 428 "nf:=1/(subs(x=b,cdf)-subs(x=a,cdf)):\np:=pdf*nf:\n dft_ref:=Vector([diff(p,mu),diff(p,sigma)]):\ndft:=dfx*nf-pdf*nf^2*(su bs(x=b,dFx)-subs(x=a,dFx)):\nevalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma =1.5,dft));\nevalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,dfx));\neva lf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,nf));\nevalf(subs(a=1.0,b=4 .0,x=2.5,mu=2.0,sigma=1.5,subs(x=b,dFx)));\nevalf(subs(a=1.0,b=4.0,x=2 .5,mu=2.0,sigma=1.5,subs(x=a,dFx)));" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#-%'RTABLEG6%\"*czgO\"-%'MATRIXG6#7$7#$\"+!e'*fY#!#67#$!*t&Q3f!#5&%'V ectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*CT vO\"-%'MATRIXG6#7$7#$\"+JE'3f&!#67#$!+,n*3\\\"!#5&%'VectorG6#%'columnG " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+c@qB:!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*)o]p8-%'MATRIXG6#7$7#$!+)\\+M4\"!#57#$!+ It'yX\"F.&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'R TABLEG6%\"*#>mq8-%'MATRIXG6#7$7#$!+qLlH@!#57#$\"+8*o(>9F.&%'VectorG6#% 'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "map(factor,dft- dft_ref);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*wNaT\"-%'M ATRIXG6#7$7#\"\"!F+&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "(dfx);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6% \"*w#))49-%'MATRIXG6#7$7#,$*&#\"\"\"\"\"#F/*,F0F.%#PiG#!\"\"F0%'sigma| irG!\"$,&%\"xGF/%#muGF4F/-%$expG6#,$*(F0F4F7F0F5!\"#F4F/F/F/7#,&*&#F/F 0F/**F0F.F2F3F5F?F:F/F/F4*&F.F/*,F0F.F2F3F5!\"%F7F0F:F/F/F/&%'VectorG6 #%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 104 "phi:=1/sqrt( 2*Pi)*exp(-t/2):\nNF:=1/sigma:\n-2*NF*subs(t=((x-mu)/sigma)^2,diff(phi ,t))*(x-mu)/sigma/sigma;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&#\"\" \"\"\"#F&*,F'F%%#PiG#!\"\"F'%'sigma|irG!\"$,&%\"xGF&%#muGF+F&-%$expG6# ,$*(F'F+F.F'F,!\"#F+F&F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "dfx[1]*(x-mu)/sigma-NF*subs(t=((x-mu)/sigma)^2,phi)/sigma;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&#\"\"\"\"\"#F&**F'#F&F'%#PiG#!\"\" F'%'sigma|irG!\"#-%$expG6#,$*(F'F,,&%\"xGF&%#muGF,F'F-F.F,F&F&F,*&F)F& *,F'F)F*F+F-!\"%F4F'F/F&F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "12 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 140988276 141019712 136607956 136754124 136950688 137066192 141543576 }{RTABLE M7R0 I6RTABLE_SAVE/140988276X*%)anythingG6"6"[gl!#%!!!"#"#,$*,""##"""F)%#PiG#!""F)%' sigma|irG!"$,&%"xGF+%#muGF.F+-%$expG6#,$*&F1F)F/!"#F-F+F*,&**F)F*F,F-F/F9F4F+F- *,F)F*F,F-F/!"%F1F)F4F+F*F& } {RTABLE M7R0 I6RTABLE_SAVE/141019712X*%)anythingG6"6"[gl!#%!!!"#"#,$**""##"""F)%#PiG#!""F)%' sigma|irGF.-%$expG6#,$*&,&%"xGF+%#muGF.F)F/!"#F-F+F-,$*,F,F-F0F+F)F*F5F+F/F8F-F & } {RTABLE M7R0 I6RTABLE_SAVE/136607956X*%)anythingG6"6"[gl!#%!!!"#"#$"+!e'*fY#!#6$!*t&Q3f!#5F& } {RTABLE M7R0 I6RTABLE_SAVE/136754124X*%)anythingG6"6"[gl!#%!!!"#"#$"+JE'3f&!#6$!+,n*3\"!#5F& } {RTABLE M7R0 I6RTABLE_SAVE/136950688X*%)anythingG6"6"[gl!#%!!!"#"#$!+)\+M4"!#5$!+It'yX"F)F& } {RTABLE M7R0 I6RTABLE_SAVE/137066192X*%)anythingG6"6"[gl!#%!!!"#"#$!+qLlH@!#5$"+8*o(>9F)F& } {RTABLE M7R0 I6RTABLE_SAVE/141543576X*%)anythingG6"6"[gl!#%!!!"#"#""!F'F& } openturns-1.9/validation/src/ValidElliptical.txt000066400000000000000000000162621307543307100221560ustar00rootroot00000000000000> R:=(Fx+dFx*dp-Fa-dFa*dp)/(Fb+dFb*dp-Fa-dFa*dp); Fx + dFx dp - Fa - dFa dp R := ------------------------- Fb + dFb dp - Fa - dFa dp > series(R,dp,2); (Fx - Fa) (dFb - dFa) dFx - dFa + --------------------- Fx - Fa -Fb + Fa 2 ------- + --------------------------------- dp + O(dp ) Fb - Fa Fb - Fa > factor((dFx-dFa+(Fx-Fa)/(-Fb+Fa)*(dFb-dFa))/(Fb-Fa)); dFx Fb - dFx Fa - dFa Fb - Fx dFb + Fx dFa + Fa dFb --------------------------------------------------- 2 (-Fb + Fa) > r:=(fx+dfx*dp)/(Fb+dFb*dp-Fa-dFa*dp); fx + dfx dp r := ------------------------- Fb + dFb dp - Fa - dFa dp > series(r,dp,2); fx (dFb - dFa) dfx + -------------- fx -Fb + Fa 2 ------- + -------------------- dp + O(dp ) Fb - Fa Fb - Fa > with(Statistics): > with(LinearAlgebra): > assume(sigma>0): > pdf:=PDF(RandomVariable(Normal(mu,sigma)),x); > cdf:=CDF(RandomVariable(Normal(mu,sigma)),x); 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma~ pdf := 1/2 --------------------- 1/2 Pi sigma~ 1/2 2 (x - mu) cdf := 1/2 + 1/2 erf(-------------) 2 sigma~ > dfx:=Vector([diff(pdf,mu),diff(pdf,sigma)]); > dFx:=Vector([diff(cdf,mu),diff(cdf,sigma)]); dfx := [ 2 ] [ 1/2 (x - mu) ] [ 2 (x - mu) exp(- ---------)] [ 2 ] [ 2 sigma~ ] [1/2 ------------------------------] [ 1/2 3 ] [ Pi sigma~ ] [ 2 [ 1/2 (x - mu) [ 2 exp(- ---------) [ 2 [ 2 sigma~ [-1/2 --------------------- [ 1/2 2 [ Pi sigma~ 2 ] 1/2 2 (x - mu) ] 2 (x - mu) exp(- ---------)] 2 ] 2 sigma~ ] + 1/2 -------------------------------] 1/2 4 ] Pi sigma~ ] [ 2 ] [ 1/2 (x - mu) ] [ 2 exp(- ---------) ] [ 2 ] [ 2 sigma~ ] [ -1/2 --------------------- ] [ 1/2 ] [ Pi sigma~ ] dFx := [ ] [ 2 ] [ (x - mu) 1/2 ] [ exp(- ---------) 2 (x - mu)] [ 2 ] [ 2 sigma~ ] [-1/2 ------------------------------] [ 1/2 2 ] [ Pi sigma~ ] > nf:=1/(subs(x=b,cdf)-subs(x=a,cdf)): > p:=pdf*nf: > dft_ref:=Vector([diff(p,mu),diff(p,sigma)]): > dft:=dfx*nf-pdf*nf^2*(subs(x=b,dFx)-subs(x=a,dFx)): > evalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,dft)); > evalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,dfx)); > evalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,nf)); > evalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,subs(x=b,dFx))); > evalf(subs(a=1.0,b=4.0,x=2.5,mu=2.0,sigma=1.5,subs(x=a,dFx))); [0.02465996580] [ ] [-0.0590838573] [0.05590862631] [ ] [-0.1490896701] 1.523702156 [-0.1093400498] [ ] [-0.1457867330] [-0.2129653370] [ ] [0.1419768913 ] > map(factor,dft-dft_ref); [0] [ ] [0] > (dfx); [ 2 ] [ 1/2 (x - mu) ] [ 2 (x - mu) exp(- ---------)] [ 2 ] [ 2 sigma~ ] [1/2 ------------------------------] [ 1/2 3 ] [ Pi sigma~ ] [ 2 [ 1/2 (x - mu) [ 2 exp(- ---------) [ 2 [ 2 sigma~ [-1/2 --------------------- [ 1/2 2 [ Pi sigma~ 2 ] 1/2 2 (x - mu) ] 2 (x - mu) exp(- ---------)] 2 ] 2 sigma~ ] + 1/2 -------------------------------] 1/2 4 ] Pi sigma~ ] > phi:=1/sqrt(2*Pi)*exp(-t/2): > NF:=1/sigma: > -2*NF*subs(t=((x-mu)/sigma)^2,diff(phi,t))*(x-mu)/sigma/sigma; 2 1/2 (x - mu) 2 (x - mu) exp(- ---------) 2 2 sigma~ 1/2 ------------------------------ 1/2 3 Pi sigma~ > dfx[1]*(x-mu)/sigma-NF*subs(t=((x-mu)/sigma)^2,phi)/sigma; 2 2 1/2 (x - mu) 1/2 2 (x - mu) 2 exp(- ---------) 2 (x - mu) exp(- ---------) 2 2 2 sigma~ 2 sigma~ -1/2 --------------------- + 1/2 ------------------------------- 1/2 2 1/2 4 Pi sigma~ Pi sigma~ > openturns-1.9/validation/src/ValidEpanechnikov.mws000066400000000000000000000657571307543307100225120ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plo t" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 775 "restart:\nwith(Stat istics):\na:=-1:b:=1:\nassume(x>a,x0,p<1:\nqdf2[1];\nevalf(subs(x=0.5,ddf));\nevalf(subs(x=0.5, pdf));\nevalf(subs(x=0.5,cdf));\nevalf(subs(x=0.5,cf));\nevalf(solve(s ubs(cdf)=0.95,x));\nevalf(subs(mu_));\nevalf(subs(sqrt(var_)));\nevalf (subs(skew_));\nevalf(subs(kurt_));\nevalf(subs(var_));\nevalf([mu_,sq rt(var_)]);\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$**\"\"$\"\" \"\"\"%!\"\",&%#x|irGF(F(F(F(,&F(F*F,F(F(F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&roughG#\"\"$\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%$ddfG,$*(\"\"$\"\"\"\"\"#!\"\"%#x|irGF(F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,(*&#\"\"$\"\"%\"\"\"%#x|irGF*F*#F*\"\"#F**&#F*F )F**$)F+F(F*F*!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*(^#\"#7 \"\"\"%#x|irG!\"$,(F(F(*&^##F(\"\"#F(F)F(F(*&-%$expG6#*&F)F(^#F(F(F(,& F(F(*&^##!\"\"F/F(F)F(F(F(F:F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$m u_G\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G#\"\"\"\"\"&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G#\"#:\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# ,&*$),(\"\"\"F'*&\"\"#F'%\"pGF'!\"\"*&F)F',&F*F+*$)F*F)F'F'#F'F)F'#F' \"\"$F'F'*&F'F'*$)F&#F'F2F'F+F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+ ++++v!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++++Dc!#5" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"+++]P%)!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #^$$\"+w@qG'*!#5$\"+k7heCF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%$\"+dF* HH(!#5$\"+o/9[7!\"*$!+V(Ru(>F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" \"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+af8sW!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Vr &G9#!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++?!#5" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"\"!F%$\"+af8sW!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "qdf2[1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*$) ,(\"\"\"F'*&\"\"#F'%\"pGF'!\"\"*&F)F',&F*F+*$)F*F)F'F'#F'F)F'#F'\"\"$F 'F'*&F'F'*$)F&#F'F2F'F+F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "N:=3:\nf:=simplify(su bs(p=q+1/2,2*cos(arccos(1-2*p)/3-2*Pi/3)));\np1:=subs(q=p-1/2,convert( series(f,q,N),polynom));\nassume(r,real,r>0);\nw:=simplify(subs(p=r^2, convert(series(subs(q=p-1/2,f),p,N),polynom)));\np2:=subs(r=sqrt(p),w) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$*&\"\"#\"\"\"-%$cosG6#,&* &\"\"$!\"\"%#PiGF(F(*&#F(F.F(-%'arccosG6#,$*&F'F(%\"qGF(F(F(F(F(F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#p1G,&*(\"\"%\"\"\"\"\"$!\"\"%\"pGF( F(#\"\"#F)F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"wG,.\"\"\"!\"\"*&# \"\"#\"\"$F&*&F+#F&F*%#r|irGF&F&F&*&#F*\"\"*F&*$)F.F*F&F&F&*&#\"\"&\"# \")F&*&F+F-)F.F+F&F&F&*&#\"#;\"$V#F&*$)F.\"\"%F&F&F&*&#\"#x\"%;HF&*&F+ F-)F.F6F&F&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#p2G,.\"\"\"!\"\"** \"\"#F&\"\"$F'F*#F&F)%\"pGF+F&*(F)F&\"\"*F'F,F&F&**\"\"&F&\"#\")F'F*F+ F,#F*F)F&*(\"#;F&\"$V#F'F,F)F&**\"#xF&\"%;HF'F*F+F,#F0F)F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 105 "plot(subs(q=p-1/2,f)-p2,p=0..1/2); \nplot(subs(q=p-1/2,f)-(p2-(subs(x=p2,cdf)-p)/subs(x=p2,pdf)),p=0..1/2 );" }}{PARA 13 "" 1 "" {GLPLOT2D 1657 515 515 {PLOTDATA 2 "6%-%'CURVES G6$7S7$$\"\"!F)$\"3;E1])4#*3W%!#L7$$\"3HLLL3x&)*3\"!#>$\"3k#oWq)y^9[!# D7$$\"3umm\"H2P\"Q?F0$\"321d'*GM?cK!#C7$$\"3MLL$eRwX5$F0$\"32$ev-\"[?' =\"!#B7$$\"3CLL$3x%3yTF0$\"3!)4!\\K'zNoHF?7$$\"3=mm\"z%4\\Y_F0$\"3K$o+ ]'z1=gF?7$$\"3)HL$eR-/PiF0$\"3](y8[^Q=.\"!#A7$$\"3A***\\il'pisF0$\"3A& \\g8d>=m\"FO7$$\"3_KLe*)>VB$)F0$\"3zIa5y6v]DFO7$$\"3z)**\\7`l2Q*F0$\"3 3@()f!f'=?PFO7$$\"3tmm;/j$o/\"!#=$\"3(40aOb1jE&FO7$$\"3NLL3_>jU6F\\o$ \"3jk(4LeDt&pFO7$$\"3!*****\\i^Z]7F\\o$\"3m,ZOt7Ay#*FO7$$\"3(*****\\(= h(e8F\\o$\"3]7EF0ip57!#@7$$\"3)*****\\P[6j9F\\o$\"3,7i#>j1g`\"F^p7$$\" 3KL$e*[z(yb\"F\\o$\"3kjB8;&*)3)=F^p7$$\"3gmm;a/cq;F\\o$\"3tiV6\"Gq$eBF ^p7$$\"3]mmm;t,mF\\o$\"3&ovJybhY2%F^p7$$\"35+]i!f#=$3#F\\o$\"3 3*o=*o_h_[F^p7$$\"3/+](=xpe=#F\\o$\"3B4a&)zpd(o&F^p7$$\"3smm\"H28IH#F \\o$\"3Juk]1rNkmF^p7$$\"3km;zpSS\"R#F\\o$\"35r-L!)fGjwF^p7$$\"3GLL3_?` (\\#F\\o$\"3cG\\28b0e))F^p7$$\"3#HLe*)>pxg#F\\o$\"3L&QU\\54P-\"!#?7$$ \"3u**\\Pf4t.FF\\o$\"3o'f37j&)f:\"F[t7$$\"32LLe*Gst!GF\\o$\"3j+C6g5[78 F[t7$$\"3#)*****\\#RW9HF\\o$\"3SnL\"Hzw**[\"F[t7$$\"3[***\\7j#>>IF\\o$ \"3$H#o$z0&=!o\"F[t7$$\"3h**\\i!RU07$F\\o$\"34%HdS0%z!)=F[t7$$\"3b*** \\(=S2LKF\\o$\"3\\3V`vB$Q7#F[t7$$\"3Kmmm\"p)=MLF\\o$\"3\"4'evhDahBF[t7 $$\"3!*****\\(=]@W$F\\o$\"3!R0j7I'yOEF[t7$$\"35L$e*[$z*RNF\\o$\"3:f(>' ))>U1HF[t7$$\"3#*****\\iC$pk$F\\o$\"3&[PHQu&[CKF[t7$$\"39m;H2qcZPF\\o$ \"3.K([+.5sa$F[t7$$\"3p**\\7.\"fF&QF\\o$\"35E+y)yP-\"RF[t7$$\"3Xmm;/Og bRF\\o$\"3?77F7(f>H%F[t7$$\"3x**\\ilAFjSF\\o$\"3n**HR\\jd@ZF[t7$$\"3YL LL$)*pp;%F\\o$\"3Yk/Xba'f;&F[t7$$\"3>LL3xe,tUF\\o$\"3vRD-^qA`cF[t7$$\" 3em;HdO=yVF\\o$\"3#Rep2%)H5<'F[t7$$\"3()*****\\#>#[Z%F\\o$\"30B^3LS#)y mF[t7$$\"3immT&G!e&e%F\\o$\"3T\"pDY1S0I(F[t7$$\"3;LLL$)Qk%o%F\\o$\"3+K 5Dz&pW*yF[t7$$\"37+]iSjE!z%F\\o$\"3ThLR@NDp&)F[t7$$\"37+]P40O\"*[F\\o$ \"3H(zy$f%ytD*F[t7$$\"3++++++++]F\\o$\"3@u7ryqa/5F0-%'COLOURG6&%$RGBG$ \"*++++\"!\")F(F(-%+AXESLABELSG6$%\"pGQ!6\"-%%VIEWG6$;F($\"+++++]!#5%( DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Cur ve 1" }}}{PARA 13 "" 1 "" {GLPLOT2D 937 937 937 {PLOTDATA 2 "6%-%'CURV ESG6$7eo7$$\"3w******R`!eS$!#@$!3py))*pVa.7#!#K7$$\"3^******z1h6oF*$!3 (y7/<6W#f$)!#L7$$\"3.+++-;u@5!#?$\"31R#*pyi\"Hm\"F-7$$\"3\"******f8ABO \"F7$\"3R&H[F1G]5)F37$$\"32+++/K[V?F7$!3%*\\'pmFU26%F37$$\"3!)*****>FW Ys#F7$!3R[UD*y2+N'F37$$\"39+++3k'p3%F7$\"3&z8%e%GE>y$F37$$\"3/+++X&)G \\aF7$\"3\\c'H$)RD$*)HF37$$\"3F+++?G$R<)F7$!3Y&4i`ng1p\"F-7$$\"3,+++4x &)*3\"!#>$!3Sa_^F'QTSH!#H7$$\"3+ +++sZ3yTFen$!3lR^VCSqB'Fen$!3#H7(eC&RgV\"!#F7$$\"3$3++!fmpisFen$!3?au%z?!pfLF jp7$$\"3R*****>*>VB$)Fen$!3?U4%30))H>(Fjp7$$\"3T+++Mbw!Q*Fen$!3Mt$oY&4 c-9!#E7$$\"3*******\\IOo/\"!#=$!3t$*eq6AT(e#Fjq7$$\"3,+++_>jU6F^r$!3() >EAdC@.\"H\\-oq5\"!#D7$$\"3.+++Q[6j9F^r$!3QF^r$!3p!>k)e3Qg()F`s7$$\"3&)*****4f#=$3#F^r$!3)45;7Um5<\"!# C7$$\"39+++t(pe=#F^r$!3ih=ZCM*4_\"Fdu7$$\"3))*****R28IH#F^r$!3zs%e8)>s p>Fdu7$$\"33+++rSS\"R#F^r$!3#=04*[Y-oCFdu7$$\"3/+++`?`(\\#F^r$!3&HUXSk S06$Fdu7$$\"3B++++#pxg#F^r$!3tr[%z1(\\2RFdu7$$\"3z******f4t.FF^r$!3A>IF^r$!34%[G;DF#*G)Fdu7$$\"3G+++#RU07$F^r $!3bD8WxS+d(*Fdu7$$\"3@+++?S2LKF^r$!3)[5up\\#*y:\"!#B7$$\"3w*****Hp)=M LF^r$!3^Yqp=)y'Q8F\\y7$$\"3.+++*=]@W$F^r$!3:IqkcNn[:F\\y7$$\"3&)****** \\$z*RNF^r$!3mbd]Bbf_F\\y7$$\"3 4+++3qcZPF^r$!3h#**ybMMn@#F\\y7$$\"3x*****R5fF&QF^r$!32,'yCMM)eCF\\y7$ $\"3&)*****\\g.c&RF^r$!3/>7*\\sU4p#F\\y7$$\"3*)*****pEsK1%F^r$!3rCM(e \\&y=HF\\y7$$\"3F+++&)*pp;%F^r$!3sF,nQ@y5JF\\y7$$\"3$******z(e,tUF^r$! 3R\\H*R-/EE$F\\y7$$\"3C+++o(*fDVF^r$!3HN$*4U&z[J$F\\y7$$\"31+++fO=yVF^ r$!3wUJ[+h$zM$F\\y7$$\"30+++EKM-WF^r$!3M-v$pjjdN$F\\y7$$\"3'******>z-l U%F^r$!3I+`Cz4ZeLF\\y7$$\"3s*****fd#eQWF^r$!3e&G-@C*ydLF\\y7$$\"3'**** ***eBm]WF^r$!38q*RO$oobLF\\y7$$\"3>+++U@uiWF^r$!3*4B_&GX6_LF\\y7$$\"3& ******f#>#[Z%F^r$!3e%p4K$>-ZLF\\y7$$\"3E+++16?IXF^r$!3Y<9tPSt-LF\\y7$$ \"33+++(G!e&e%F^r$!3Lw6e[%e+A$F\\y7$$\"3-+++'37^j%F^r$!3]Q`&fB&y3JF\\y 7$$\"3'******\\)Qk%o%F^r$!3H3Z(HAWu&HF\\y7$$\"3')*****R6but%F^r$!3)GV2 D&R?YFF\\y7$$\"3C+++UjE!z%F^r$!3-&e!*HoRoZ#F\\y7$$\"3@+++%))Rb\"[F^r$! 3h:O94r@DBF\\y7$$\"3?+++EM\"3%[F^r$!3'3)4pTDrd@F\\y7$$\"3=+++op3m[F^r$ !3g)*GA8:Tt>F\\y7$$\"3C+++60O\"*[F^r$!3dB\"fX3e8x\"F\\y7$$\"3D+++%Q?&= \\F^r$!3V;v2TCHL:F\\y7$$\"3<+++c-oX\\F^r$!3\"4u,B[tAF\"F\\y7$$\"33+++G ,%G(\\F^r$!3$Gdz)*o6%p)*Fdu7$$\"3++++++++]F^r$!31Rno9WqenFdu-%'COLOURG 6&%$RGBG$\"*++++\"!\")$\"\"!FeclFdcl-%+AXESLABELSG6$%\"pGQ!6\"-%%VIEWG 6$;Fdcl$\"+++++]!#5%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "evalf[25](-2*Pi/3);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$!:H%3B\\&>$R-^R%4#!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 681 "ff:=subs(q=p-1/2,f):\np1:=convert(series(ff,p=1/2,8),polynom);\n# p2:=convert(series(ff,p=0,4),polynom);\np2:=-1+2/3*3^(1/2)*p^(1/2)+2/9 *p+5/81*3^(1/2)*p^(3/2)+16/243*p^2+77/2916*3^(1/2)*p^(5/2)+224/6561*p^ 3;#+2431/157464*3^(1/2)*p^(7/2);\npx:=0.5:\neps:=evalf(2^(-53));\nDigi ts:=100:\na:=evalf(p1):\na1:=a:\nb:=evalf(p2):\nb1:=b:\nevalf(subs(p=p x,[abs(a-ff)-eps,abs(b-ff)-eps]));\na:=a:\na:=evalf(a-(subs(x=a,cdf)-p )/subs(x=a,pdf)):\na2:=a:\nb:=evalf(b-(subs(x=b,cdf)-p)/subs(x=b,pdf)) :\nb2:=b:\nevalf(subs(p=px,[abs(a-ff)-eps,abs(b-ff)-eps]));\n\na:=eval f(a-(subs(x=a,cdf)-p)/subs(x=a,pdf)):\na3:=a:\nb:=evalf(b-(subs(x=b,cd f)-p)/subs(x=b,pdf)):\nb3:=b:\nevalf(subs(p=px,[abs(a-ff)-eps,abs(b-ff )-eps]));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 59 "plot([log(abs(a3-ff)), log(abs(b3-ff)),log(eps)],p=0..1/2);;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#p1G,,*(\"\"%\"\"\"\"\"$!\"\"%\"pGF(F(#\"\"#F)F**(\"#kF(\"#\")F*, &F+F(#F(F-F*F)F(*(\"%C5F(\"$H(F*F1\"\"&F(*(\"&Ob'F(\"&$o>F*F1\"\"(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#p2G,0\"\"\"!\"\"**\"\"#F&\"\"$F'F *#F&F)%\"pGF+F&*(F)F&\"\"*F'F,F&F&**\"\"&F&\"#\")F'F*F+F,#F*F)F&*(\"#; F&\"$V#F'F,F)F&**\"#xF&\"%;HF'F*F+F,#F0F)F&*(\"$C#F&\"%hlF'F,F*F&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$epsG$\"+DIA56!#D" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#7$$!_qxr'[8>&y\")************************************ *************************************\\-B-6\"!$:\"$\"_q!zDbw#f,p9fEt0L Izt\\=6%o&)fV9zjbppS3:=6#p$\\CTFe'yQf'Gyx&!$-\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$$!_q50?oC&=^***************************************** *********************************\\-B-6\"!$:\"$\"_q>&G#3W&oa(GcuGvkG[r )[nzt3>DhH%\\1ZF)*H2$G33z))\\M\"\\MWl'HfG\"!$1\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$$!_q50?oC&=^***************************************** *********************************\\-B-6\"!$:\"$!_qxr'[8?B&Rpq0V\"\\,s* *)H?\"orfr+r/4+'z/M#[<85@SCG\")G%=y[)3-6\"F&" }}{PARA 13 "" 1 "" {GLPLOT2D 937 937 937 {PLOTDATA 2 "6'-%'CURVESG6$7hn7$$\"\"!F)$!_q\"p*p'oL\"*yxSXA%oCZ,**oCVk$=wT-L;t`&Ro_\\zAd\")4WpY\"\\MK!#**7$$\" _qMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL3x&)*3\"!$,\"$!_qzcey'o `h$*zgca)*H_`[snu_J-dQqOM)*y:$Gu!)>EHnV(R&*3\")[%*=9j(F,7$$\"_qnmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"H2P\"Q?F0$!_q[>luooVY&)4EwA4/W/ $e^_(p!pjGHJJMuyzJSbt1&*Qk'pH>Yow06(*F,7$$\"_qMLLLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLLLLLL$eRwX5$F0$!_q;j:vf#p1g@fw0'yN*4V#ef#*Rhd_e'y[f_'\\ F2RiVU;Y!fsN\">6WuehZ@BV5\")yc C9v/GM\"F=7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"z%4\\Y_ F0$!_qqn\"\\)Q?'ozlGad<5Qf*G#)=Vw/46B(Gugxr:2B=5bla2Ez$>2[HI0:F=7$$\"_ qNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLeR-/PiF0$!_qNk].!QH0]&4=) ))[Ff$=#om9k*Qd$fT=9JSP&*fv]j;DN$4a1Dq.Sk[;F=7$$\"_q-+++++++++++++++++ ++++++++++++++++++++++++++DcmpisF0$!_qYE]!)R9ez'R>0w%[wsV,_zmfx$>Z?j'3 yzg>rf@P8m]ja1w+Jv.#z\"F=7$$\"_qOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL LLLLLLe*)>VB$)F0$!_qZs&\\&)[*Q^6>!=\\zY=x4N<@)G_8%*Q:MZ/`DIt75&H0P![&4 hi=kvm$>F=7$$\"_q.+++++++++++++++++++++++++++++++++++++++++++DJbw!Q*F0 $!_qzl?8L.D#))f^Q\"4L\")z(H[\"=^e))*3]nTIp(f<+5%**\\KwcU4'*>T*yMVy?F=7 $$\"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm;/j$o/\"!$+\"$!_qP0& y%p45_eZvEK`+@d\"zs\\wso16!4vkP]XD\")y\"4/B$*yqZ#R)[WoFA#F=7$$\"_qMLLL LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL3_>jU6Fin$!_q,0Wn$*p#>0;e**onX ]^%Rcp**=GkGIFJsq3c8_\\QwNOVI@-lX.vP&>$p0\\c]uFCBrS]c*= FSNEF=7$$\"_q++++++++++++++++++++++++++++++++++++++++++++]P[6j9Fin$!_q 'zsW>b&e>Cl*R7vne>/9l;9iR:^&zejRA]%4V-a'GUI!430$oLN$[x#F=7$$\"_qMLLLLL LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$e*[z(yb\"Fin$!_qxATzvtVO%y]Xl\"R c*z21NUP8'>Y7>[-zQ`!\\Y3rgL?02.HGTW.F!HF=7$$\"_qnmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmm;a/cq;Fin$!_qd#)H(=A#*GA$*[rFf=t()p&Rhy/Z<2cYW35 bxFO')\\H>H'*pC9uSo$\\n0$F=7$$\"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmm;t,m6_nFjjQH6&4e^K'3gV`d1\"yG)p4;?\"Ra=6Z0$)\\=a%)4LvyFYLF=7$$ \"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"pW`(>Fin$!_qIv\"*y> %e%p?egTg*>(>8+T2)>(pd@1,#f#pE.&*eBT&Gqm\\/6yZ**)*3\")[$F=7$$\"_q,++++ ++++++++++++++++++++++++++++++++++++++]i!f#=$3#Fin$!_q4&o$4Q5V$***)>MH y3jaW/-c7Z3)QN0*>\\N,Y'fpo3'HYaw%f@Bo$*e^7#y md;+F7m(ydPSc\\:!4S%Q*ekE!QF=7$$\"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmm\"H28IH#Fin$!_qe].8\\CB,4Y=SRy+aL'y2iGw]KzPA&zz=Q1H8^9q61yNj jYEVJpRF=7$$\"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm;zpSS\"R#Fi n$!_qL.JwDd(pLl5o\"4^$H^,9IA8%G.zY)['y`#4G1d*Hzio%G8Kfd^.Zo7%F=7$$\"_q MLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL3_?`(\\#Fin$!_qJKOv;](G)*o /$R3e0:'[3#*Qrh@Xs%[$GWz)426&Qz?H&QmaY3Y<[7-VF=7$$\"_qMLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLLLLLLLLLLLLL$e*)>pxg#Fin$!_q)\\H!*yOupvWLr7)*3e]/JNS&[< kj?*R9N4209i'RkVm6%[Yzw+rD2\\%F=7$$\"_q,++++++++++++++++++++++++++++++ ++++++++++++]Pf4t.FFin$!_qSZ#4j'3])=t*)32XmP1sggrBB8(eYK]wZL%[sS6 ;>$zJp_=4m%F=7$$\"_qMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLe*Gst! GFin$!_qE^j@S'3'\\%QQxND/m!y\\_y*G.s?pmHP(G5G,g_g$4#3F!3kY0(*f3<&[F=7$ $\"_q,++++++++++++++++++++++++++++++++++++++++++++DRW9HFin$!_q(4cF8kLU #ykoEDsbG?$f-Pnp:tFBsuIeDu?+L,]+#[.!)HhL*Gjs0&F=7$$\"_q,++++++++++++++ +++++++++++++++++++++++++++++DJE>>IFin$!_qc(f.w)4D![k>o)*zcG,i9KTHo4lu .O-!Gq>d8\\Zit`u))f:4!ynPwE&F=7$$\"_q,++++++++++++++++++++++++++++++++ ++++++++++]i!RU07$Fin$!_q./6Z>n)o)\\eh2l%p!H'=7=xsnwv$o`&35N[@5mzAsxZ[ w*y(e#\\\\'4[&F=7$$\"_q,+++++++++++++++++++++++++++++++++++++++++++v=S 2LKFin$!_q*y\"p(f7Ip<7*4k\"Hb#R\\*3rvn'HU$444kZ2Ad(Q[v9LHgft.nCO^_IdF= 7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"p)=MLFin$!_ql&3 \"fIfVSrAhfG(3#G(H&QCR'fIv^![i\\7wsaU5kdQo=+-6]*H%RlnfF=7$$\"_q,++++++ +++++++++++++++++++++++++++++++++++++](=]@W$Fin$!_q?w/-/#Rb`Sl%e.\\w#f %4P5%*3(\\q\")QX=@GeOB?s+6kzC#oC>2sJ?OiF=7$$\"_qMLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLLLLLLL$e*[$z*RNFin$!_q1^/agi3S_kQhQ*p))4/Ab%3$pt!>iiJLk AJC[CyThN<&f&Q5]No>&\\'F=7$$\"_q,+++++++++++++++++++++++++++++++++++++ ++++++]iC$pk$Fin$!_q(z=O7yK*RoIX\"p-'Q1)Q`5\"o@Ox8&QvN)>u*R,By>bN.e(ed jV]h*zz'F=7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm;H2qcZPFin $!_q_30C#pfGzU>yc8??>]x)\\)R>b023ld'p&p'RZS*4*4_5=n-&H&yTn/rF=7$$\"_q, ++++++++++++++++++++++++++++++++++++++++++]7.\"fF&QFin$!_q$RCMm,\\*36@ MO]5Le$3tmnMysy5O/3eI%p$*Rs#z9,JLKc7I.!=$=X(F=7$$\"_qommmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmm;/OgbRFin$!_q3W;-')H^po.g+:.6>p%o\"HL![oC*R 4v4hS7\"H+p1/;^u(z/0G6RcAyF=7$$\"_q,++++++++++++++++++++++++++++++++++ ++++++++]ilAFjSFin$!_qL\\DAyha#y+$>bcswtVE\"G&4C*=X4P3)eDcBw3H/VE\\Dud j%f%G-1^#)F=7$$\"_qNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$)*pp; %Fin$!_qn*zV%f$yN&3TPQ@@g5b7j2W=$zg/B:Sm6A:sUcxBm4OpNH`8t\"=7()F=7$$\" _qNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL3xe,tUFin$!_q!ol(f6L#Hm; cl.-)[R&*[TD7jxm^'QWa#3sOx7>DO'f/H%=B\\:+iTY#*F=7$$\"_qommmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmm;HdO=yVFin$!_qHrr&f-s*Q&f@(=_(e^')yqUQAJf# >:P%ou3eMGJ5FgA%G&>(H&H2r]&e)*F=7$$\"_q,++++++++++++++++++++++++++++++ ++++++++++++++D>#[Z%Fin$!_qB.OTVp@4E2;;A#>)y)yvR<#[!3%f+R9Qv$3#pj%4az[ wb*f\"3l1jS>0\"!#(*7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm T&G!e&e%Fin$!_qP^b^@B-ClAmYda0B_O%)o^W!zz[Bb55/MzBi?7NE9G@4CTGH8X9\"Fa y7$$\"_qNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$)Qk%o%Fin$!_q!** oQbQ!y9&*>)fW,h$R-i;K-@R.na#[//Sm%*Ql@HggiyE)4<([L*=^7Fay7$$\"_qommmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"z>6but%Fin$!_qwh>yN]22ocZ=0L)p% 4g^$RAfSgse\"HrPcS$H09wCUco^$)=7\\\\EFK\"Fay7$$\"_q-++++++++++++++++++ ++++++++++++++++++++++++]iSjE!z%Fin$!_qm8(>hk;yY6\"yW2d'**)*\\*4)QWLO*Qc3#*[2\"y`&pY$)pym'RH'3p&G)43i?+ 2-qO0D+u\"=_\"p7N%z^\"Fay7$$\"_q-+++++++++++++++++++++++++++++++++++++ +++++]P40O\"*[Fin$!_q2Zh=.(\\aF1D![dosE_\\&HDnNp$p5%odfD]IcPMfD^e@V]fE 8Xlpm\"Fay7$$\"_q-+++++++++++++++++++++++++++++++++++++++++]7.#Q?&=\\F in$!_q$)3Ap!)H5)\\`'za0)G+Fe>SsMIj&R79L(H\\Fay7$$\"_q++++++++++++ ++++++++++++++++++++++++++++++Dc,\">g#f\\Fin$!_qCI,^I)[_fxu:*y?(RiW3*e u:t(f%*H'G8+i*\\SIuyoGr?N%*4J3,3&\\?Fay7$$\"_q++++++++++++++++++++++++ ++++++++++++++++++]PMF,%G(\\Fin$!_q$p^2LCNA9*y(Q7\"\\KJo&4ok/O)*)>dWg! *eWuJ!Ru2\\HHkZ#e# *)[36EMEUZ+E#Fay7$$\"_q+++++++++++++++++++++++++++++++++++++++++]7y]&4 I'z\\Fin$!_qELG.:@mc>7r7?;QG1GbTO#o*)e\"\\d'QomLW)o_-@RCqY;+M5u%RbT:n0wO\"f^UD1&p1aH#Fay7$$\"_q++++ +++++++++++++++++++++++++++++++++++++D1RvZ]\")*)\\Fin$!_qj2F+*[6sq6G/ \\)o736x0HeZg@Eu,gvt(oi39!\\=wHIod++sBwr%G#Fay7$$\"_q+++++++++++++++++ ++++++++++++++++++++++++]Pf$=.5K*\\Fin$!_q2F4Qn]NQ1fdb,B4c%oS3$*3Ot*oq ?]iG`kM-b?E)[>#pI\\Y:517)G#Fay7$$\"_q+++++++++++++++++++++++++++++++++ ++++++++++++++++]Fin$!_qK9xn$HZn[FiT)*Q;O,4U/o%4!=zRjGR@o'*)p2!Reerx$y KF^2W(RmI#Fay-%'COLOURG6&%$RGBG$\"*++++\"!\")F(F(-F$6$7[p7$$\"_qqmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm;aQ`!eS$!$.\"$!_q=4!>;!G\\fAt+LjL d+B4%e=i!QETpv/,1!H#ye57(o&p?7'[ANap5z;\"Fay7$$\"_qSLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLLLLLLLLLLL3x1h6oF__l$!_qT0__\"*\\Xi9\\(HzWeMgE7#>v(eL:A wsIxAi9#zYB&*\\RyI[Ehb>%)>\"3\"Fay7$$\"_q,++++++++++++++++++++++++++++ ++++++++++++++Dc,;u@5!$-\"$!_q!RY]U(\\Jg^Da'Q(*R**)yCE$[#*RPK:0iO)[o** p@=yb788*QW%*4H0j/.\"Fay7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmTN@Ki8Fj_l$!_q&=[W?GGiU)RMwVVu#pS9f&[Jvp9*Ry(oU?L&zI_q!QpX>3kP<2? fW**F=7$$\"_qNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL3FpE!Hq\"Fj_l$ !_qvUQB0!p^@^y-jT<\\i0<<'3&)eOF,Y3eANy_#yc#*RW!G8N.HhB>Gl'*F=7$$\"_q-+ +++++++++++++++++++++++++++++++++++++++++]7.K[V?Fj_l$!_qN)*HQ)3f\"3Kz2 _B]wbiNVd;*\\uH;fECRs)RI)zt$\\()z\\3g,y\"4oQqV*F=7$$\"_qommmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmm\"zptjSQ#Fj_l$!_q[@w))[+n@Jt./fV1a-m1'R`= x\"GI'G+jgsfJ^Mu&oMvul>*f(3*QSC*F=7$$\"_qNLLLLLLLLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLL$3FWYs#Fj_l$!_qeb16\"yO@)*)e[0YJ$Q'*H#f[7J$f)e&*o0HvkU; a_G&>uB[3HAdW%p$o2*F=7$$\"_qommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm m;aQ`!eS$Fj_l$!_q'*Q7!\\1me\"[w,nr:iT:(4n#H%>OL3JdT(*4L'z.1^Vyk(\\ElR3 R:(Q(z)F=7$$\"_q-+++++++++++++++++++++++++++++++++++++++++++D1k'p3%Fj_ l$!_qtQq^^bzK\"zs1ngOJ%[-94mJ8S&*>(Q%Q,zV?$Q#=P)3Zk*H\"fNB1@!p&)F=7$$ \"_qOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$eRZF\"oZFj_l$!_qd+;1,i g_HJz\\s^1*e8s!)*)y;39&)\\9tK,fe]Cp1>'H.#)eybHT8\"fP)F=7$$\"_qqmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmT&)G\\aFj_l$!_q[Px\"Re&>jh?]>FmsT q_j*)*Q![&yl;H#o7jg=TE'30y'yjE$=UTu4'3#)F=7$$Fd_lFj_l$!_qf+I$HW!yt]qEc RuchY@7(oW&o9q)H(RKyzh'4rN#Hqc5\\j7o\")H\\)*GzF=7$$\"_q0++++++++++++++ +++++++++++++++++++++++++++++]7G$R<)Fj_l$!_qd1viUlZoPd]hey*=wXlm_Bq8kf 9j#eC-3)*)R)yl9#HH9$Qh-#*)o/q(F=7$$\"_qqmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmm\"z%\\DO&*Fj_l$!_qH;r?N9>,`5i=Y&4NZ=%f[7Y-;,l49DGST]')>^( Qq*[x'zK)\\^'Gs](F=7$F.$!_q%HN`7P3'R^<\\\"RUw\"H3d\"zN#R))o\"z)>3>8+g& Q5Wuz:>V'4\"[8'oA\")RtF=7$$\"_qnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmm\"z%\\v#pK\"F0$!_qwxeNbF-aV7wADM-&)y%QSyu8o*eeJsENqyjW47]U3hpz^&\\ G')3I4(F=7$$\"_q+++++++++++++++++++++++++++++++++++++++++++]i!R(*Rc\"F 0$!_q\"G q?3'pH$p//nzr))o$\\Z:U5oj&QPO%e[=([m()*>F%*)[qalF=7$$\"_q+++++++++++++ ++++++++++++++++++++++++++++++]PMnNrDF0$!_q@lV-S!3c![\"*3\\YIIWE&GsBbH g\"ReEF.6A/'*Hv8-]re'QH(Ho/$fJE'F=7$F9$!_qF7HEa'G)H_OM4l(eZ_`&e*\\W))* RP)[c-_7$G`5@v5^'y$>U#HT#fcvEgF=7$$\"_qMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLL$eI8k$F0$!_qs52h(=^9#Huswc^oj'Hu>PvW\"pN1#[Ai\"3weyR61'* )=th%eCSe2sEeF=7$F?$!_qY8(pu\\J,(H'yi\"\\@9,>/#3qJjBf+kwqzU$e3.r])zLFj #eJZ]>$zUl&F=7$FD$!_qVOb)f$Rfe\")z&3Ds$3o!)\\nd #>A1ez6%zv!=o+Z(3^pm7P(fnmW*>rD[px^]ZTc$f$yG&>O7J=#*Q tUF_^F=7$FN$!_qUDY)[YE;r$)zk\"**H!=_C-><*y@`ib+\"y_8n@/xO(>$*Q%o]2j5K; U='\\F=7$FS$!_qjjh:lYa9IGEw>'))>X!3nfvA1'z<0.BF\"p#Gv1]SYF=_Dh*HVa&)e \"z%F=7$FX$!_q]L$p/$z>#)QultplTFVaPzbvys'\\.\\?^-W)GmvZc2&4-A*HZ)Re?Dk %F=7$Fgn$!_qdk]$[S054du(*)zhVY5G3i6\"4#3J&G$4>$3\"\\MR&)[e/wV7'*f`o\"[ #41XF=7$F]o$!_qknip>5tZ`w6`;*f0r\\Aq@I:6B'G#H\\Y3&46(RksE2&=%3&[LlU\"o uR%F=7$Fbo$!_q(\\\\Y;%**3gr!R4X(R0,8z$Q6qUN0pCS&f\"y\"31EfVR60Xw\"*[zX Bp!fG%F=7$Fgo$!_q%*3Iq[^(3#GA)o)Rj!R7KC4_$*)eeTdU$[`RcB-JF%[a\\)e]'RxT )eON=%F=7$F\\p$!_qkZo0(3gPW!)Rc`F/]'pz&[J>`iiCyIBPQKvb4dibDW]FyAQG['o# 4%F=7$Fap$!_qob4wj\"3q]%o<)**\\O\"*za%y?[^+%*fsOMh2r@f7R=>EU5b=1%4'GL& f,%F=7$Ffp$!_qlRl5'\\9m+%GtoX`%3dkp1#pZp)*p**p<+,Xn1$fO^k&p(H57LYfa\") 4$RF=7$F[q$!_qmvvM-3w^]x)f&f$\\re^5g>Yx^zMz:i4^8&4A;JUo7Z]m[-1U/ujQF=7 $F`q$!_q->Si;8\\1O/K\"eL7aKl$yq=9?`]P%3#GO)4y9qZvvN]#*Q\"4&H7f//z$F=7$ Feq$!_q0`Zd[@l!fHNR^rxB,E\"*[B?qLcr7dp2E^aAN')[*=%fC^yK\"pv7XHPF=7$Fjq $!_quT%\\@<[`\"pe(ov)=:yA#\\$Hcqx>4$o4l$3_99_qxd\"yDt2xQg\"G;YmOF=7$F_ r$!_qAn*G8t>795X!\\-\"Q]5]A!*=+_?m&R\\;'Q'H!f55(ppF5?e8T0%=FZ*4OF=7$Fd r$!_qRj-7cV;@\")\\\"[p_6#zoWY[w7)\\7#*3rQ`b*f9'[LMhwn44/jt?O/Vb$F=7$Fi r$!_q$)))R`e+7<8-@r$R76(yt-;]u!\\pfJCm8Uc/&z!Gxw;[N^!fz4^,*f]$F=7$F^s$ !_q7eTb@UM1\"ep9(>\"pn,qxQa39U:.>a*3/df,z7/oCzUG:bu]3gncMF=7$Fcs$!_qoA gCr=UXR\"z(Qdj'[?:U\"\\$*34Z=`l+%)H&3I#fS@/-(y24?0:%*=b$3MF=7$Fhs$!_q/ zc>7e?)fIL]'4Gq$=0s]!Q4vg4Y%QK$*z0jojlacZDq7SvG/Y#eoLF=7$F]t$!_q%**oGy e%GKBo`g-siQ)H(*>qiL\"\\GEgf&zo[M)G$F=7$Fgt$!_q.=8G^&3u +#>%o1h5l=MwPiCt7#y\\\"4YT)4sJDc)H))zme_(*Hp?#3&>D$F=7$F\\u$!_qcrP@`Ku bART1_Vjd4R$*\\/0BC[m8R$p2)4w0s$*o%4f3`0W:>6'*)=KF=7$Fau$!_qedt(3()ouh >9%yL'yFS5&)[F3AvY]w(**[@?75Sl0*QiOMLB(*)\\U>n%=$F=7$Ffu$!_qr\"zB.hobP %e6N#[e'z)zG&G^8nK&eizVBi\\XC;t$=?/NwjeF#)=8;cJF=7$F[v$!_q<[]^?(44_%of YO/RAnxC\")p+B]kkmHAkCcLV6?%=Fl8([!>![#ym^**)*>a?3$F=7$Fjv$!_q)\\<)=.47F&oG4!)> JfqYX3$)*z&eFVeBC#>pTL]rD%*)[&*3>Tw=NHCJ1$F=7$F_w$!_qQ(4Ci*4df-Dt?2./i n-'R@X&)*[Jc=.Ido\\*zcOB@(f8v[Z1`pjBYIF=7$Fdw$!_qo7M2^vbR!*QyW2hx!3\"G RImXKNzkQ\"pYBQ$*[NNY$zK?&=v0H.$F=7$Fiw$!_q#=Y%))=2_Q9t%\\7Tu-\"*) pA)*R$\\8vLh<3#GL'eqS(G>!\\A2i'H3]!4*yAIF=7$F^x$!_q4Y*H#o.S=FS(G/qQ@\" *)oj5()o6rj],B&*zd\"p=g%G,rL!3Q*y^S'*pv1n=3=Z]t!*f\"oxrBIF=7$F]y$!_qX8\">Izp6t_G*fE;UYA#Gd x%3$3jX#yij!)>fL90-'\\1Dbmw_$fnuQPIF=7$Fcy$!_q6eBq+0%Q'olg0!G%)[!pJm\\ [!**f5%Q$)RT>`$))Q')Qr4qpMQI>95w7d1$F=7$Fhy$!_qD[c5h5%Q>%)[Oy_(ebVVx=- aMMdXDNl')[9Mv#>`Vo34h'RC8'GV$3JF=7$F]z$!_qmt?)=O5mVM%e@S$GN!eK$F=7$Fa[l$!_q..2a2W1%4IZ1RH%GWph)4%HgB1kU'[ +#)R?w1u.!p<)[mUThS5]))*)Q$F=7$Ff[l$!_ql8J*p=gbuIO&GKdi3$R)G)3XWt$fQ#o 4w(GW\"HWR_(GHU&=U;1\"=VIwMF=7$F[\\l$!_qu6?s;t+o05@R`(4gdJ<()*=oCm=:rH ]$)4!o*)\\/%euqQr*)yx]%fHd`$F=7$F`\\l$!_q?`W!)4ng82#e<,TBpJ%)\\)G:X/$ \\&pB_*GZkY.nij?u1\">Fd%GOuJXh$F=7$Fj\\l$!_q)GIlYlAm8'yL)[jUpJ\"fb\"z/ y+/V#orK$\\B-rxr&fo)epf?84))Qt$F=7$Fd]l$!_qm\"zJ_d;%osP%oj9@;c&4,F\\`;>8]rv2!\\( QkRDS\"eG0/.$*)y?,.(yx$F=7$Fi]l$!_qL!R5C?H#>=JoGz_tIZS[h&oi46mK]#)Q4D? xe&=%f5p*z88_u*[#4NQF=7$$\"_q+++++++++++++++++++++++++++++++++++++++++ voz\"f,0m*\\Fin$!_q@nvA())p,yp\"o&eB\">q0&G3>3!ecA-O%)yd9J\\5q?5#\\(eL GOZIx`$G#RF=7$F^^l$!_qf()3E^/5*HtJ,^pwdbGKIpwy&)H#edqk9kf$otFh-`O>zBu$ HE1`+[F=-Fc^l6&Fe^l$\")Vyg>Fh^l$\")d@R!)Fh^lFh`m-F$6$7S7$F($!_q(=(>+oo cMuhC)y#oiHLSQKl$R^8^&eG.u&*z\\Hm*)4>i>ECZR$p0!otOF=7$F.F`am7$F4F`am7$ F9F`am7$F?F`am7$FDF`am7$FIF`am7$FNF`am7$FSF`am7$FXF`am7$FgnF`am7$F]oF` am7$FboF`am7$FgoF`am7$F\\pF`am7$FapF`am7$FfpF`am7$F[qF`am7$F`qF`am7$Fe qF`am7$FjqF`am7$F_rF`am7$FdrF`am7$FirF`am7$F^sF`am7$FcsF`am7$FhsF`am7$ F]tF`am7$FbtF`am7$FgtF`am7$F\\uF`am7$FauF`am7$FfuF`am7$F[vF`am7$F`vF`a m7$FevF`am7$FjvF`am7$F_wF`am7$FdwF`am7$FiwF`am7$F^xF`am7$FcxF`am7$FhxF `am7$F]yF`am7$FcyF`am7$FhyF`am7$FbzF`am7$F\\[lF`am7$F^^lF`am-Fc^l6&Fe^ l$\")'>!\\&)Fh^l$\")#)eqkFh^l$\")?!\\D\"Fh^l-%+AXESLABELSG6$%\"pGQ!6\" -%%VIEWG6$;F(F^^l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "y:=convert((cdf-q)/pdf,parfrac,x); \nconvert(subs(x=y,(cdf-q)/pdf),parfrac,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"yG,(*&\"\"$!\"\"%#x|irG\"\"\"F***\"\"#F*F'F(%\"qGF* ,&F)F*F*F*F(F(*(F'F(,&F,F(*&F,F*F-F*F*F*,&F*F(F)F*F(F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*&\"\"*!\"\"%#x|irG\"\"\"F(**\"\"#F(%\"qGF(,&*$) F'F*F(F(F(F&F(,,*&\"\"$F(F'F(F&*$)F'F1F(F(*&\"\"%F(F+F(F(\"\"&F&*&F1F( F.F(F(F&F&**F*F(F%F&F+F(,&F'F(F(F(F&F&*&,*F*F(*&F*F(F+F(F&*&F*F(F.F(F& *(F*F(F+F(F.F(F(F(,,*&F1F(F.F(F&F(F(*&F1F(F'F(F&F2F(*&F5F(F+F(F(F&F(*( F%F&,&F*F&*&F*F(F+F(F(F(,&F(F&F'F(F&F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "assume(u,real):Re(convert(simplify(cf),trig));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"'\"\"\"%#u|irG!\"$,(F'F&*&\"\" #F&-%$sinG6#F'F&!\"\"*&F'F&-%$cosGF.F&F&F&F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidEpanechnikov.txt000066400000000000000000000162311307543307100225020ustar00rootroot00000000000000> restart: > with(Statistics): > a:=-1:b:=1: > assume(x>a,x beta_:=RandomVariable(BetaDistribution(2,2)): > pdf:=factor(subs(u=(x-a)/(b-a),PDF(beta_,u))/(b-a)); > rough:=int(pdf^2,x=a..b); > ddf:=(diff(pdf,x)); > cdf:=int(subs(x=u,pdf),u=a..x); > cf:=subs(u=x,simplify(CharacteristicFunction(beta_,u),hypergeom)); > mu_:=a+(b-a)*Mean(beta_); > var_:=(b-a)^2*Variance(beta_); > skew_:=simplify(convert(Skewness(beta_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(beta_),GAMMA),symbolic); > qdf2:=solve(cdf=p,x) assuming p>0,p<1: > qdf2[1]; > evalf(subs(x=0.5,ddf)); > evalf(subs(x=0.5,pdf)); > evalf(subs(x=0.5,cdf)); > evalf(subs(x=0.5,cf)); > evalf(solve(subs(cdf)=0.95,x)); > evalf(subs(mu_)); > evalf(subs(sqrt(var_))); > evalf(subs(skew_)); > evalf(subs(kurt_)); > evalf(subs(var_)); > evalf([mu_,sqrt(var_)]); > 3 (x~ + 1) (-1 + x~) pdf := - -------------------- 4 rough := 3/5 3 x~ ddf := - ---- 2 3 cdf := 3/4 x~ + 1/2 - 1/4 x~ 12 I (1 + 1/2 I x~ - exp(x~ I) (1 - 1/2 I x~)) cf := ---------------------------------------------- 3 x~ mu_ := 0 var_ := 1/5 skew_ := 0 kurt_ := 15/7 2 1/2 (1/3) 1 (1 - 2 p + 2 (-p + p ) ) + ------------------------------- 2 1/2 (1/3) (1 - 2 p + 2 (-p + p ) ) -0.7500000000 0.5625000000 0.8437500000 0.9628702176 + 0.2458611264 I 0.7292992757, 1.248140468, -1.977439743 0. 0.4472135954 0. 2.142857143 0.2000000000 [0., 0.4472135954] > qdf2[1]; 2 1/2 (1/3) 1 (1 - 2 p + 2 (-p + p ) ) + ------------------------------- 2 1/2 (1/3) (1 - 2 p + 2 (-p + p ) ) > > N:=3: > f:=simplify(subs(p=q+1/2,2*cos(arccos(1-2*p)/3-2*Pi/3))); > p1:=subs(q=p-1/2,convert(series(f,q,N),polynom)); > assume(r,real,r>0); > w:=simplify(subs(p=r^2,convert(series(subs(q=p-1/2,f),p,N),polynom))); > p2:=subs(r=sqrt(p),w); Pi f := 2 cos(---- + 1/3 arccos(2 q)) 3 4 p p1 := --- - 2/3 3 1/2 2 1/2 3 16 4 w := -1 + 2/3 3 r~ + 2/9 r~ + 5/81 3 r~ + --- r~ 243 77 1/2 5 + ---- 3 r~ 2916 1/2 1/2 1/2 3/2 2 1/2 5/2 2 3 p 2 p 5 3 p 16 p 77 3 p p2 := -1 + ----------- + --- + ----------- + ----- + ------------ 3 9 81 243 2916 > plot(subs(q=p-1/2,f)-p2,p=0..1/2); > plot(subs(q=p-1/2,f)-(p2-(subs(x=p2,cdf)-p)/subs(x=p2,pdf)),p=0..1/2); > evalf[25](-2*Pi/3); -2.094395102393195492308429 > ff:=subs(q=p-1/2,f): > p1:=convert(series(ff,p=1/2,8),polynom); > #p2:=convert(series(ff,p=0,4),polynom); > p2:=-1+2/3*3^(1/2)*p^(1/2)+2/9*p+5/81*3^(1/2)*p^(3/2)+16/243*p^2+77/29 > 16*3^(1/2)*p^(5/2)+224/6561*p^3;#+2431/157464*3^(1/2)*p^(7/2); > px:=0.5: > eps:=evalf(2^(-53)); > Digits:=100: > a:=evalf(p1): > a1:=a: > b:=evalf(p2): > b1:=b: > evalf(subs(p=px,[abs(a-ff)-eps,abs(b-ff)-eps])); > a:=a: > a:=evalf(a-(subs(x=a,cdf)-p)/subs(x=a,pdf)): > a2:=a: > b:=evalf(b-(subs(x=b,cdf)-p)/subs(x=b,pdf)): > b2:=b: > evalf(subs(p=px,[abs(a-ff)-eps,abs(b-ff)-eps])); > > a:=evalf(a-(subs(x=a,cdf)-p)/subs(x=a,pdf)): > a3:=a: > b:=evalf(b-(subs(x=b,cdf)-p)/subs(x=b,pdf)): > b3:=b: > evalf(subs(p=px,[abs(a-ff)-eps,abs(b-ff)-eps])); > plot([log(abs(a3-ff)),log(abs(b3-ff)),log(eps)],p=0..1/2);; 3 5 4 p 64 (p - 1/2) 1024 (p - 1/2) p1 := --- - 2/3 + ------------- + --------------- 3 81 729 7 65536 (p - 1/2) + ---------------- 19683 1/2 1/2 1/2 3/2 2 1/2 5/2 2 3 p 2 p 5 3 p 16 p 77 3 p p2 := -1 + ----------- + --- + ----------- + ----- + ------------ 3 9 81 243 2916 3 224 p + ------ 6561 -15 eps := 0.1110223025 10 [-0.111022302499999999999999999999999999999999999999999999999999\ -15 9999999999999999999999998178519134867177 10 , 0.005777828\ 6593878658274124493692111815084069695563791443598568411184\ 97379303305732659146901592765525790] [-0.111022302499999999999999999999999999999999999999999999999999\ -15 9999999999999999999999999511852468200510 10 , 0.128592966\ 5443449134498879080828307299827470649429612519087379674887\ -6 148286475287456287546854408228519 10 ] [-0.111022302499999999999999999999999999999999999999999999999999\ -15 9999999999999999999999999511852468200510 10 , -0.11102088\ 4878184288128244021101317482340479600090471007159716812029\ -15 8997201491430570693952320134867177 10 ] > y:=convert((cdf-q)/pdf,parfrac,x); > convert(subs(x=y,(cdf-q)/pdf),parfrac,x); x~ 2 q -2 + 2 q y := ---- - ---------- + ----------- 3 3 (x~ + 1) 3 (-1 + x~) 2 x~ 2 q (x~ - 1) 2 q ---- - ----------------------------- - ---------- 9 3 2 9 (x~ + 1) -3 x~ + x~ + 4 q - 5 + 3 x~ 2 2 2 - 2 q - 2 x~ + 2 q x~ -2 + 2 q + ----------------------------- + ----------- 2 3 9 (-1 + x~) -3 x~ + 1 - 3 x~ + x~ + 4 q > assume(u,real):Re(convert(simplify(cf),trig)); 6 (u~ - 2 sin(u~) + u~ cos(u~)) - ------------------------------- 3 u~ > openturns-1.9/validation/src/ValidEstimate.mws000066400000000000000000000243631307543307100216370ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 133 "restart:\nmu:=alpha *GAMMA(1+1/beta);\nvar:=alpha^2*(GAMMA(1+2/beta)-GAMMA(1+1/beta)^2);\n V:=alpha^2*(GAMMA(1+1/beta)-GAMMA(1+1/beta)^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#muG*&%&alphaG\"\"\"-%&GAMMAG6#,&F'F'*&F'F'%%betaG!\" \"F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$varG*&)%&alphaG\"\"#\"\" \",&-%&GAMMAG6#,&F)F)*&F(F)%%betaG!\"\"F)F)*$)-F,6#,&F)F)*&F)F)F0F1F)F (F)F1F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"VG*&)%&alphaG\"\"#\"\" \",&-%&GAMMAG6#,&F)F)*&F)F)%%betaG!\"\"F)F)*$)F+F(F)F1F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 300 "with(plots):\np1:=plot(V/var,beta= 0...30,color='red'):\nexpr1:=evalf(convert(series(V/var,beta=infinity, 3),polynom)):\np2:=plot(expr1,beta=0...30,color='blue'):\nx:=fsolve(di ff(V/var,beta),beta):\nexpr:=convert(series(V/var,beta=x,3),polynom): \np3:=plot(expr,beta=0...2,color='green'):\ndisplay(\{p1,p2,p3\});" }} {PARA 13 "" 1 "" {GLPLOT2D 309 309 309 {PLOTDATA 2 "6'-%'CURVESG6$7S7$ $\"\"!F)$\"3Z'f&oL^81B!#=7$$\"39LLLL3VfV!#>$\"3A?OQ_LcC=F,7$$\"3&pmm;H [D:)F0$\"3E$F07$$\"3?LL$e4;[\\ #F,$\"35`)fKOd9#[!#?7$$\"3p****\\i'y]!HF,$!3u'*zU&zR`2#F07$$\"3,LL$ezs $HLF,$!3:1,VbL(pP%F07$$\"3_****\\7iI_PF,$!3#[$[X0\"4QK'F07$$\"3$pmmm@X t=%F,$!3d]fvriZkzF07$$\"3RLLL3y_qXF,$!3An#)e3)*e0\"*F07$$\"3i******\\1 !>+&F,$!3Ic,dPH&\\+\"F,7$$\"3()******\\Z/NaF,$!3g!yr&**zUj5F,7$$\"3&** *****\\$fC&eF,$!3?G_\\PkN&3\"F,7$$\"3ELL$ez6:B'F,$!3iUekI!)*f2\"F,7$$ \"3Rmmm;=C#o'F,$!3u7pgrtgG5F,7$$\"3-mmmm#pS1(F,$!3*[$*oq[$Rw&*F07$$\"3 ]****\\i`A3vF,$!3e>#eqZl^R)F07$$\"3slmmm(y8!zF,$!3Hd9m\"Q0/.(F07$$\"3V ++]i.tK$)F,$!3ytuEv)=#)=&F07$$\"39++](3zMu)F,$!3%o?ZV?c')4$F07$$\"3\"p mm;H_?<*F,$!3U&\\K^!e_'p&FL7$$\"3dmm;zihl&*F,$\"3mEESP\"zk1#F07$$\"3;L LL3#G,***F,$\"3&GA%z7yhY_F07$$\"3*)F07$$\"3 !****\\PQ#\\\"3\"Fds$\"3=\"H&[GgWU7F,7$$\"3BLL$e\"*[H7\"Fds$\"3K!e\\`Y SIl\"F,7$$\"3#*******pvxl6Fds$\"3&)4\"fuOCA6#F,7$$\"3z****\\_qn27Fds$ \"3gw`oGl'ef#F,7$$\"3&)***\\i&p@[7Fds$\"33Pi\\u*=i4$F,7$$\"3%)****\\2' HKH\"Fds$\"3w!QGGh7\"*o$F,7$$\"3_mmmwanL8Fds$\"3\\0J.&\\m`D%F,7$$\"3'* *****\\2goP\"Fds$\"3ggr&ezz\\*[F,7$$\"3CLLeR<*fT\"Fds$\"3\\+%)4qfz0bF, 7$$\"3(******\\)Hxe9Fds$\"3'*3yc6jb2iF,7$$\"3Ymm\"H!o-*\\\"Fds$\"350(Q aql-!pF,7$$\"3))***\\7k.6a\"Fds$\"3m)fim_Mzl(F,7$$\"3emmmT9C#e\"Fds$\" 37.#[Q>&)=V)F,7$$\"3\"****\\i!*3`i\"Fds$\"34;\"Fds7$$\"3&*******p(G**y\"Fds$\"3aif5'fGSG\"F ds7$$\"3lmm;9@BM=Fds$\"3I'4R3z\"*))Q\"Fds7$$\"3ELLL`v&Q(=Fds$\"3o1W@*= 2f[\"Fds7$$\"30++DOl5;>Fds$\"3+Cr<#o*p#f\"Fds7$$\"3/++v.Uac>Fds$\"3[/w pDc:)p\"Fds7$$\"\"#F)$\"3+C'==:<]\"=Fds-%'COLOURG6&%$RGBGF($\"*++++\"! \")F(-F$6$7hn7$$\"3<+++-K[V?F0$!3k2$)pI[2'G%!#Y7$$\"3s*****\\Smp3%F0$! 34xM\"*H'Rjj\"!#J7$$\"38+++5'\\/8'F0$!3'4(*z=>\"z*3\"!#E7$$\"3W******4 G$R<)F0$!3ou_(p`%*))p#!#C7$$\"3.+++A**3E7F,$!3[zQ7#y*)zJ'!#A7$$\"3*)** ***>c'yM;F,$!3Se3<,Z*eG*!#@7$$\"31+++W)z@X#F,$!3!z]`ok_AE\"F07$$\"3')* ****\\7t&pKF,$!3ZKt]c))QBTF07$$\"3%******fSmp3%F,$!3!y,[vGg-T(F07$$\"3 6+++)ofV!\\F,$!3EUi,B)3w!)*F07$$\"3F+++qHv@dF,$!3?BO*>\\r?3\"F,7$$\"3s ******\\i9RlF,$!3#f,z%eB&)\\5F,7$$\"3X+++XV)RQ*F,$!3L%[4H$*GY_#F07$$\" 3,+++WA)GA\"Fds$\"3r9Y026Z35F,7$$\"3$******z$eui=Fds$\"37FvCNW[hSF,7$$ \"3&)*****>'3&o]#Fds$\"3/8\"39^F\"ppF,7$$\"3)*******oX*y9$Fds$\"3ZJS\\ )>quo*F,7$$\"39+++WTAUPFds$\"3_+lX=P%)47Fds7$$\"3%******R*zhdVFds$\"3X fQ@%Q!)=X\"Fds7$$\"35+++%>fS*\\Fds$\"3gelH&=rkp\"Fds7$$\"32+++>$f%GcFd s$\"3SPV3#z;h$>Fds7$$\"3<+++Dy,\"G'Fds$\"3bTA6UuVz@Fds7$$\"3E+++7FOB+\"!#;$\"3m0(y)>uGTNF ds7$$\"3#********Q5'f5Fddl$\"3m^t$=,lou$Fds7$$\"3&******R!QBE6Fddl$\"3 v)GQxoWa)RFds7$$\"3\"******\\\"o?&=\"Fddl$\"3s%ol]$>?'>%Fds7$$\"33+++a &4*\\7Fddl$\"33Q0O'*>/FWFds7$$\"3$******H'=_68Fddl$\"3]kt-^X_YYFds7$$ \"3-+++Wy!eP\"Fddl$\"33s%Rx4K_([Fds7$$\"31+++UC%[V\"Fddl$\"3kP&)\\\"Fddl$\"3XJ%*[TI36`Fds7$$\"3.+++>:mk:Fddl$\"31jwQ w7oXbFds7$$\"3<+++w&QAi\"Fddl$\"3)**\\%Gz(R(\\dFds7$$\"3++++uLU%o\"Fdd l$\"3^mq+%4z*pfFds7$$\"3%******\\Nm'['Fds7$$\"3$**** ***yb^6=Fddl$\"3eK\\CQ6o>kFds7$$\"3/+++MaKs=Fddl$\"3aqO1OonMmFds7$$\"3 )******4TW)R>Fddl$\"3k>`'f6!Hl?Fddl$\"3\"QInb0,jJ(Fds7$$\"3#*******3w)R7#Fddl$\" 3X0Q9\\][BvFds7$$\"3/+++y%f\")=#Fddl$\"3H[%=.\\>*\\xFds7$$\"3.+++/-a[A Fddl$\"3%ocni28H'zFds7$$\"3()*****>Yb;J#Fddl$\"3y!f.Q2#\\&=)Fds7$$\"35 +++i@OtBFddl$\"3]\"eBcK[IS)Fds7$$\"35+++fL'zV#Fddl$\"3&pZUIKb2j)Fds7$$ \"35+++!*>=+DFddl$\"3Y,=iOc,]))Fds7$$\"3,+++E&4Qc#Fddl$\"3iI\"HJC&>u!* Fds7$$\"3))*****R>5pi#Fddl$\"3!)y!R42wkH*Fds7$$\"3'******\\:$*[o#Fddl$ \"3dpZ\"))H%p+&*Fds7$$\"31+++r\"[8v#Fddl$\"3,[ub4KrM(*Fds7$$\"3=+++Ijy 5GFddl$\"32P<&Q9!*R%**Fds7$$\"3&******R!)fT(GFddl$\"3o4o`]\"4n,\"Fddl7 $$\"35+++1j\"[$HFddl$\"3HsY$)R*f!Q5Fddl7$$\"#IF)$\"3&>6H[N,51\"Fddl-F[ [l6&F][lF^[lF(F(-F$6$7S7$F(F(7$Fb_l$\"3#o!['pT>YH#F,7$$\"3*****\\PC#)G A\"Fds$\"3SMDS-b:\"H%F,7$$\"3*)****\\Peui=Fds$\"37_zmT\"pk`'F,7$$\"3L+ +]i3&o]#Fds$\"3_D2Axhm'z)F,7$$\"3'****\\(oX*y9$Fds$\"3zZ*z!*37Y5\"Fds7 $$\"3o***\\P9CAu$Fds$\"31\\L0O`;88Fds7$$\"3#****\\P*zhdVFds$\"3.&z=M95 \"H:Fds7$$\"33++v$>fS*\\Fds$\"3ny$3@dSCv\"Fds7$$\"30++v=$f%GcFds$\"3Q* y!GxZ0v>Fds7$Fdbl$\"3X[Y1]3//AFds7$$\"3I++]7t0CFds7 $$\"3J+++v4&G](Fds$\"3;!49!o#)yKEFds7$$\"39*****\\7nD:)Fds$\"33EnkVpxg GFds7$Fhcl$\"3'z0$*yF'[!3$Fds7$$\"35++v$pnsM*Fds$\"3b6\">>S.+G$Fds7$$ \"3,++]siL-5Fddl$\"3E$[&4g&[s^$Fds7$Fhdl$\"33+&p&GjA=PFds7$$\"3*)**\\P /QBE6Fddl$\"3I6@c^7,_RFds7$Fbel$\"34)HT<_]*eTFds7$$\"3-+]Pa&4*\\7Fddl$ \"3T3yB*p&*fQ%Fds7$$\"3.+]7j=_68Fddl$\"3W#)=s*R'>-YFds7$$\"3+++vVy!eP \"Fddl$\"3chTt\\\"zx#[Fds7$$\"39+](=WU[V\"Fddl$\"3$zneN`M\\.&Fds7$$\"3 1++DJ#>&)\\\"Fddl$\"3/)pL2gz$e_Fds7$$\"3)***\\P>:mk:Fddl$\"3CmkVFiZ!\\ &Fds7$$\"3()**\\iv&QAi\"Fddl$\"3uF6FBq^#p&Fds7$$\"3:++vtLU%o\"Fddl$\"3 PP5'yhE2\"fFds7$F_hl$\"341m*3[eh8'Fds7$$\"34++vyb^6=Fddl$\"3Z&)G`y&*pc jFds7$$\"3****\\PMaKs=Fddl$\"3WWz]IW3qlFds7$$\"3#)***\\7TW)R>Fddl$\"3* )H\\]F>,2oFds7$$\"3z*****\\@80+#Fddl$\"3,bGL@=!*>qFds7$$\"3'*****\\7,H l?Fddl$\"3tc@VBs?ZsFds7$$\"3')**\\P4w)R7#Fddl$\"3()='f>qzJX(Fds7$$\"3N ++]x%f\")=#Fddl$\"3Rb5XD?OywFds7$$\"3(***\\P/-a[AFddl$\"3;ow)H/T-*yFds 7$$\"38+](=Yb;J#Fddl$\"39$Hxkm:<6)Fds7$$\"3y****\\i@OtBFddl$\"3+VR\"Gf Z#G$)Fds7$$\"3/+]PfL'zV#Fddl$\"3x:Rb_k$\\b)Fds7$F[\\m$\"3$3e$4nZEt()Fd s7$$\"3?++DE&4Qc#Fddl$\"3'RcnD+Pl**)Fds7$$\"3<+]P%>5pi#Fddl$\"3-0T?J/' z@*Fds7$$\"3K+++bJ*[o#Fddl$\"3J)QtfcD9U*Fds7$$\"3E++Dr\"[8v#Fddl$\"39o wWr&>Yl*Fds7$$\"3#)******Hjy5GFddl$\"36&yp)p5>j)*Fds7$$\"3D+]P/)fT(GFd dl$\"3_#RS*yrb35Fddl7$$\"3:+]i0j\"[$HFddl$\"38aQJ^=%)H5Fddl7$Fc^m$\"3* *****fQ^r_5Fddl-F[[l6&F][lF(F(F^[l-%+AXESLABELSG6%Q%beta6\"Q!Fc]n-%%FO NTG6#%(DEFAULTG-%%VIEWG6$;F(Fc^mFh]n" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "expr1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\"+i/04N!#5\"\"\"%%betaGF(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "solve(\{mu=m,k*beta*V=v\},\{alpha,beta\});" }}{PARA 7 "" 1 "" {TEXT -1 38 "Warning, solutions may have been lost\n" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "M:=map(factor,<,>);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"MG-%'RTABLEG6%\"*woMR\"-%'MATRIXG6#7$7$-%&GAMM AG6#*&,&%%betaG\"\"\"F4F4F4F3!\"\",$**%&alphaGF4-%$PsiGF0F4F.F4F3!\"#F 57$,$*(\"\"#F4F8F4,&-F/6#*&,&F3F4F?F4F4F3F5F5*$)F.F?F4F4F4F5,$**F?F4F8 F?,&*&-F:FBF4FAF4F5*&FFF4F9F4F4F4F3F;F4%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "help(Psi);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "r:=(log(k)-Psi(k)-S)/(Psi(1,k)-1/k);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG*&,(-%#lnG6#%\"kG\"\"\"-%$PsiGF)!\"\"%\"SGF. F+,&-F-6$F+F*F+*&F+F+F*F.F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "p:=expand(evalf(convert(series(r,k),polynom)));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"pG,<%\"kG\"\"\"*&)F&\"\"#F'-%#lnG6#F&F'F'*&$\" +lc@x:!\"*F'F)F'F'*($F'\"\"!F'%\"SGF'F)F'!\"\"*&$\"+pCl7 " 0 "" {MPLTEXT 1 0 36 "series(solve(log(k)-Psi(k)-S,k),_Z);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#+%%#_ZG-%'RootOfG6#,(-%#lnG6#F$!\"\"-%$PsiGF+\"\" \"%\"SGF/\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "n:=1;eval f(series(solve(convert(series(log(k)-Psi(k)-S,k,n),polynom),k),S));" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#+1%\"SG^$$!+\")>/\"Q$!#6$\"+V_(=8'!#5\"\"!^$$\"+VWK1DF+ $\"+Lmm()=F+\"\"\"^$$\"+M4`59F+$!+Toy08F(\"\"#^$$\"+k:X5ZF($!+#p^Sg$F( \"\"$^$$\"+&=f\"p6F($!+Dzs$3#F(\"\"%^$$\"+Ar>MB!#7$!+\"\\ORK*FH\"\"&-% \"OG6#F2\"\"'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "10 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 139346876 }{RTABLE M7R0 I6RTABLE_SAVE/139346876X,%)anythingG6"6"[gl!"%!!!#%"#"#-%&GAMMAG6#*&,&%%betaG"" "F-F-F-F,!"",$*&%&alphaGF-,&-F(6#*&,&F,F-""#F-F-F,F.F.*$F'F7F-F-!"#,$**F1F--%$P siGF)F-F'F-F,F9F.,$*(F1F7,&*&-F=F4F-F3F-F.*&F'F7F restart: > mu:=alpha*GAMMA(1+1/beta); > var:=alpha^2*(GAMMA(1+2/beta)-GAMMA(1+1/beta)^2); > V:=alpha^2*(GAMMA(1+1/beta)-GAMMA(1+1/beta)^2); 1 mu := alpha GAMMA(1 + ----) beta 2 / 2 1 2\ var := alpha |GAMMA(1 + ----) - GAMMA(1 + ----) | \ beta beta / 2 / 1 1 2\ V := alpha |GAMMA(1 + ----) - GAMMA(1 + ----) | \ beta beta / > with(plots): > p1:=plot(V/var,beta=0...30,color='red'): > expr1:=evalf(convert(series(V/var,beta=infinity,3),polynom)): > p2:=plot(expr1,beta=0...30,color='blue'): > x:=fsolve(diff(V/var,beta),beta): > expr:=convert(series(V/var,beta=x,3),polynom): > p3:=plot(expr,beta=0...2,color='green'): > display({p1,p2,p3}); > expr1; 0.3509050462 beta > solve({mu=m,k*beta*V=v},{alpha,beta}); Warning, solutions may have been lost > M:=map(factor,<, r,beta)>>); M := [ beta + 1 beta + 1 ] [ alpha Psi(--------) GAMMA(--------)] [ beta + 1 beta beta ] [GAMMA(--------) , - -----------------------------------] [ beta 2 ] [ beta ] [ / beta + 2 beta + 1 2\ 2 / [-2 alpha |-GAMMA(--------) + GAMMA(--------) | , 2 alpha | [ \ beta beta / \ beta + 2 beta + 2 -Psi(--------) GAMMA(--------) beta beta beta + 1 2 beta + 1 \ / 2] + GAMMA(--------) Psi(--------)| / beta ] beta beta / / ] > help(Psi); > r:=(log(k)-Psi(k)-S)/(Psi(1,k)-1/k); ln(k) - Psi(k) - S r := ------------------ Psi(1, k) - 1/k > p:=expand(evalf(convert(series(r,k),polynom))); 2 2 2 3 p := k + k ln(k) + 1.577215665 k - 1. S k - 1.712652469 k 3 3 4 4 + k ln(k) - 1. S k - 0.700897539 k - 0.644934068 k ln(k) 4 5 5 + 0.644934068 S k + 1.578815873 k + 0.114245670 k ln(k) 5 - 0.114245670 S k > series(solve(log(k)-Psi(k)-S,k),_Z); RootOf(-ln(_Z) + Psi(_Z) + S) > n:=1;evalf(series(solve(convert(series(log(k)-Psi(k)-S,k,n),polynom),k > ),S)); n := 1 - 0.03381041981 + 0.6131875243 I + (0.2506324443 + 0.1887666633 I) 2 S + (0.1410530934 - 0.01305786841 I) S + 3 (0.04710451564 - 0.03604051692 I) S + 4 (0.01169159185 - 0.02083727925 I) S + 5 6 (0.002334197122 - 0.009323936491 I) S + O(S ) > openturns-1.9/validation/src/ValidEstimateLogistic.mws000066400000000000000000000062701307543307100233320ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 753 "restart:\nwith(Stat istics):\nassume(beta>0):\nlogistic_:=RandomVariable(Logistic(alpha,be ta)):\npdf:=PDF(logistic_,x);\nddf:=factor(diff(pdf,x));\ncdf:=CDF(log istic_,x);\nmu_:=Mean(logistic_);\nvar_:=Variance(logistic_);\nqdf:=Qu antile(logistic_,p);\nqdf2:=solve(cdf=p,x);\npdfgr:=map(factor,[diff(p df,alpha),diff(pdf,beta)]);\nfactor(pdfgr[2]-(x-alpha)*pdfgr[1]/beta); \ncdfgr:=map(factor,[diff(cdf,alpha),diff(cdf,beta)]);\nfactor(dcdf[2] /dcdf[1]);\nvalnum:=alpha=-0.5,beta=1.5:\nevalf(subs(valnum,x=1,ddf)); \nevalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf(su bs(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(subs(valnum,x=1,cdfgr));\nev alf(solve(subs(valnum,cdf)=0.95,x));\nevalf(subs(valnum,mu_));\nevalf( subs(valnum,var_));\nevalf(subs(valnum,[mu_,sqrt(var_)]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*(-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\" \"F,%&beta|irGF.F,F/F.,&F,F,F&F,!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%$ddfG,$**-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-%&beta|irGF/F-,&F- F/F'F-F-F0!\"#,&F-F-F'F-!\"$F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$c dfG*&\"\"\"F&,&F&F&-%$expG6#,$*&,&%\"xGF&%&alphaG!\"\"F&%&beta|irGF0F0 F&F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%&alphaG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"$!\"\"%&beta|irG\"\"#%#PiGF*\"\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%&alphaG\"\"\"*&%&beta| irGF'-%#lnG6#*&%\"pGF',&F'F'F.!\"\"F0F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&%&alphaG\"\"\"*&-%#lnG6#,$*&,&F'!\"\"%\"pGF'F 'F0F/F/F'%&beta|irGF'F/" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7$ **-%$expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-%&beta|irGF/F-,&F-F/F'F-F-F0! \"#,&F-F-F'F-!\"$**F'F-,.F,F/*&F,F-F'F-F-F.F-*&F.F-F'F-F/F0F/*&F0F-F'F -F/F-F0F4F3F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(%&beta|irG!\"#-%$ expG6#*&,&%\"xG\"\"\"%&alphaG!\"\"F-F%F/F-,&F-F-F'F-F&F/" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&cdfgrG7$,$*(,&\"\"\"F)-%$expG6#,$*&,&%\"xGF)% &alphaG!\"\"F)%&beta|irGF2F2F)!\"#F3F2F*F)F2,$**F(F4F/F)F3F4F*F)F2" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#*&&%%dcdfG6#\"\"#\"\"\"&F%6#F(!\"\"" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+<@7QS!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Aiu58!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+(y& e5t!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+<@7QS!#6$!+Eg=+ZF&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+Aiu58!#5F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+o%em\"R!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!\" &!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+.L?-u!\"*" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$!\"&!\"\"$\"+[!*p?F!\"*" }}}}{MARK "1" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidEstimateLogistic.txt000066400000000000000000000106001307543307100233330ustar00rootroot00000000000000> restart: > with(Statistics): > assume(beta>0): > logistic_:=RandomVariable(Logistic(alpha,beta)): > pdf:=PDF(logistic_,x); > ddf:=factor(diff(pdf,x)); > cdf:=CDF(logistic_,x); > mu_:=Mean(logistic_); > var_:=Variance(logistic_); > qdf:=Quantile(logistic_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=map(factor,[diff(pdf,alpha),diff(pdf,beta)]); > factor(pdfgr[2]-(x-alpha)*pdfgr[1]/beta); > cdfgr:=map(factor,[diff(cdf,alpha),diff(cdf,beta)]); > factor(dcdf[2]/dcdf[1]); > valnum:=alpha=-0.5,beta=1.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); x - alpha exp(---------) beta~ pdf := --------------------------- / x - alpha \2 beta~ |1 + exp(---------)| \ beta~ / x - alpha / x - alpha \ exp(---------) |-1 + exp(---------)| beta~ \ beta~ / ddf := - ------------------------------------ 2 / x - alpha \3 beta~ |1 + exp(---------)| \ beta~ / 1 cdf := -------------------- x - alpha 1 + exp(- ---------) beta~ mu_ := alpha 2 2 beta~ Pi var_ := ---------- 3 p qdf := alpha + beta~ ln(-----) 1 - p -1 + p qdf2 := alpha - ln(- ------) beta~ p x - alpha / x - alpha \ exp(---------) |-1 + exp(---------)| beta~ \ beta~ / x - alpha / pdfgr := [------------------------------------, exp(---------) |-x 2 / x - alpha \3 beta~ \ beta~ |1 + exp(---------)| \ beta~ / x - alpha x - alpha + x exp(---------) + alpha - alpha exp(---------) - beta~ beta~ beta~ x - alpha \ / / 3 / x - alpha \3\ - beta~ exp(---------)| / |beta~ |1 + exp(---------)| |] beta~ / / \ \ beta~ / / x - alpha exp(---------) beta~ - ---------------------------- 2 / x - alpha \2 beta~ |1 + exp(---------)| \ beta~ / x - alpha exp(- ---------) beta~ cdfgr := [- -----------------------------, / x - alpha \2 |1 + exp(- ---------)| beta~ \ beta~ / x - alpha (x - alpha) exp(- ---------) beta~ - ------------------------------] / x - alpha \2 2 |1 + exp(- ---------)| beta~ \ beta~ / dcdf[2] ------- dcdf[1] -0.04038122117 0.1310746222 0.7310585787 [0.04038122117, -0.04700186026] [-0.1310746222, -0.1310746222] 3.916658468 -0.5 7.402203303 [-0.5, 2.720699048] openturns-1.9/validation/src/ValidEstimatedTruncatedNormal.mws000066400000000000000000000050471307543307100250240ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 528 "restart:\nPhi:=proc (x)\n int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x)\nend:\nsigma:=sqrt (v);\n#PhiA:=Phi((a-mu)/sigma);\n#PhiB:=Phi((b-mu)/sigma);\n#phiA:=1/s qrt(2*Pi)*exp(-((a-mu)/sigma)^2/2);\n#phiB:=1/sqrt(2*Pi)*exp(-((b-mu)/ sigma)^2/2);\nassume(PhiB>PhiA,b>a,b>m,a%&sigmaG*$%\"vG#\"\"\"\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'iD enomG*&\"\"\"F&,&%&PhiB|irGF&%&PhiA|irG!\"\"F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&ratioG*(,&%%phiBG\"\"\"%%phiAG!\"\"F(,&%&PhiB|irGF(% &PhiA|irGF*F*%\"vG#F(\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&aNorm G*&,&%#a|irG\"\"\"%#muG!\"\"F(%\"vG#F*\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&bNormG*&,&%#b|irG\"\"\"%#muG!\"\"F(%\"vG#F*\"\"#" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#eqG<$/%#s2G*&%\"vG\"\"\",(F*F**(F)# F*\"\"#,&*(,&%#b|irGF*%#muG!\"\"F*F)#F4F.%%phiBGF*F**(,&%#a|irGF*F3F4F *F)F5%%phiAGF*F4F*,&%&PhiB|irGF*%&PhiA|irGF4F4F4*(,&F6F*F:F4F.F;!\"#F) F*F4F*/%#m|irG,&F3F**(F)F*F?F*F;F4F4" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%$solG<$/%#muG*&,2*&%#m|irG\"\"\"%&PhiA|irGF,!\"\"*&%%phiBGF,)F+\" \"#F,F,*&%%phiAGF,F1F,F.*(F4F,%#a|irGF,F+F,F,*(F0F,%#b|irGF,F+F,F.*&%# s2GF,F0F,F,*&F:F,F4F,F.*&F+F,%&PhiB|irGF,F,F,,.F-F.*&F0F,F+F,F,*&F4F,F +F,F.*&F4F,F6F,F,*&F0F,F8F,F.F=F,F./%\"vG,$*(F:F,,&F=F.F-F,F,F>F.F." } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "factor(subs(sol,mu)-1);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,>*&%#m|irG\"\"\"%&PhiA|irGF'!\"\"* &%%phiBGF')F&\"\"#F'F'*&%%phiAGF'F,F'F)*(F/F'%#a|irGF'F&F'F'*(F+F'%#b| irGF'F&F'F)*&%#s2GF'F+F'F'*&F5F'F/F'F)*&F&F'%&PhiB|irGF'F'F(F'*&F+F'F& F'F)*&F/F'F&F'F'*&F/F'F1F'F)*&F+F'F3F'F'F8F)F',.F(F)F9F'F:F)F;F'F " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidEstimatedTruncatedNormal.txt000066400000000000000000000053231307543307100250320ustar00rootroot00000000000000> restart: > Phi:=proc(x) > int(1/sqrt(2*Pi)*exp(-t^2/2),t=-infinity..x) > end: > sigma:=sqrt(v); > #PhiA:=Phi((a-mu)/sigma); > #PhiB:=Phi((b-mu)/sigma); > #phiA:=1/sqrt(2*Pi)*exp(-((a-mu)/sigma)^2/2); > #phiB:=1/sqrt(2*Pi)*exp(-((b-mu)/sigma)^2/2); > assume(PhiB>PhiA,b>a,b>m,a iDenom:=1/(PhiB-PhiA);ratio:=(phiB-phiA)*iDenom*sigma;aNorm:=(a-mu)/si > gma;bNorm:=(b-mu)/sigma; > eq:={m=mu-sigma^2*(phiB-phiA)/(PhiB-PhiA),s2=(sigma * sigma * (1 - > sigma * (bNorm * phiB - aNorm * phiA) * iDenom - ratio * ratio))}; > sol:=map(factor,solve(eq,{mu,v})); 1/2 sigma := v 1 iDenom := ------------- PhiB~ - PhiA~ 1/2 (phiB - phiA) v ratio := ------------------ PhiB~ - PhiA~ a~ - mu aNorm := ------- 1/2 v b~ - mu bNorm := ------- 1/2 v / | | | eq := {s2 = v | | \ 1/2 /(b~ - mu) phiB (a~ - mu) phiA\ v |-------------- - --------------| | 1/2 1/2 | 2 \ v v / (phiB - phiA) v 1 - -------------------------------------- - ---------------- PhiB~ - PhiA~ 2 (PhiB~ - PhiA~) \ | | | v (phiB - phiA) |, m~ = mu - ---------------} | PhiB~ - PhiA~ / 2 2 sol := {mu = (-m~ PhiA~ + phiB m~ - phiA m~ + phiA a~ m~ - phiB b~ m~ + s2 phiB - s2 phiA + m~ PhiB~)/( -PhiA~ + phiB m~ - phiA m~ + phiA a~ - phiB b~ + PhiB~), s2 (-PhiB~ + PhiA~) v = - ------------------------------------------------------} -PhiA~ + phiB m~ - phiA m~ + phiA a~ - phiB b~ + PhiB~ > factor(subs(sol,mu)-1); 2 2 (-m~ PhiA~ + phiB m~ - phiA m~ + phiA a~ m~ - phiB b~ m~ + s2 phiB - s2 phiA + m~ PhiB~ + PhiA~ - phiB m~ + phiA m~ - phiA a~ + phiB b~ - PhiB~)/( -PhiA~ + phiB m~ - phiA m~ + phiA a~ - phiB b~ + PhiB~) > openturns-1.9/validation/src/ValidExponential.mws000066400000000000000000000070041307543307100223430ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1034 "restart:\nwith(Sta tistics):\nexponential_:=RandomVariable(Exponential(1/lambda)):\nassum e(u>0);\npdf:=subs(u=x-_gamma,PDF(exponential_,u));\nddf:=diff(pdf,x); \ncdf:=subs(u=x-_gamma,CDF(exponential_,u));\ncf:=subs(u=x,exp(-I*_gam ma)*CharacteristicFunction(exponential_,u));\nmu_:=_gamma+Mean(exponen tial_);\nvar_:=Variance(exponential_);\nskew_:=simplify(convert(Skewne ss(exponential_),GAMMA),symbolic);\nkurt_:=simplify(convert(Kurtosis(e xponential_),GAMMA),symbolic);\nqdf:=_gamma+Quantile(exponential_,p); \nqdf2:=solve(cdf=p,x);\npdfgr:=[factor(diff(pdf,lambda)),factor(diff( pdf,_gamma))];\ncdfgr:=[factor(diff(cdf,lambda)),factor(diff(cdf,_gamm a))];\nvalnum:=lambda=2.5,_gamma=-0.5:\nevalf(subs(valnum,x=1,ddf));\n evalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf(subs (valnum,x=1,cf));\nevalf(subs(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(s ubs(valnum,x=1,cdfgr));\nevalf(solve(subs(valnum,cdf)=0.95,x));\nevalf (subs(valnum,mu_));\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnu m,skew_));\nevalf(subs(valnum,kurt_));\nevalf(subs(valnum,var_));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*&%'lambdaG\"\"\"-%$expG6#,$*&, &%\"xGF'%'_gammaG!\"\"F'F&F'F0F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $ddfG,$*&)%'lambdaG\"\"#\"\"\"-%$expG6#,$*&,&%\"xGF*%'_gammaG!\"\"F*F( F*F3F*F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG6# ,$*&,&%\"xGF&%'_gammaG!\"\"F&%'lambdaGF&F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*&-%$expG6#*&^#!\"\"\"\"\"%'_gammaGF,F,,&F,F,*(F* F,%'lambdaGF+%\"xGF,F,F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&% '_gammaG\"\"\"*&F'F'%'lambdaG!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%%var_G*&\"\"\"F&*$)%'lambdaG\"\"#F&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&ku rt_G\"\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%'_gammaG\"\"\"* &%'lambdaG!\"\"-%#lnG6#,&F'F'%\"pGF*F'F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G*&,&*&%'lambdaG\"\"\"%'_gammaGF)F)-%#lnG6#,&F)F)%\"pG!\" \"F0F)F(F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7$,$*&-%$expG6# ,$*&,&%\"xG\"\"\"%'_gammaG!\"\"F/%'lambdaGF/F1F/,(F/F1*&F2F/F.F/F/*&F2 F/F0F/F1F/F1*&)F2\"\"#F/F(F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdf grG7$*&,&%\"xG\"\"\"%'_gammaG!\"\"F)-%$expG6#,$*&F'F)%'lambdaGF)F+F),$ *&F1F)F,F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+;\"f)p9!#5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+lkVze!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+TD#[w*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$\"+ +a<7f!#5$\"+Yb7frF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+7,Qnk!#6$ \"+;\"f)p9!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+z=mFN!#6$!+lkVz eF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+%4HH)p!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+++++5!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++ +++S!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" +++++;!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 \+ 0 0" 757 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidExponential.txt000066400000000000000000000056631307543307100223650ustar00rootroot00000000000000> restart: > with(Statistics): > exponential_:=RandomVariable(Exponential(1/lambda)): > assume(u>0); > pdf:=subs(u=x-_gamma,PDF(exponential_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u=x-_gamma,CDF(exponential_,u)); > cf:=subs(u=x,exp(-I*_gamma)*CharacteristicFunction(exponential_,u)); > mu_:=_gamma+Mean(exponential_); > var_:=Variance(exponential_); > skew_:=simplify(convert(Skewness(exponential_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(exponential_),GAMMA),symbolic); > qdf:=_gamma+Quantile(exponential_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=[factor(diff(pdf,lambda)),factor(diff(pdf,_gamma))]; > cdfgr:=[factor(diff(cdf,lambda)),factor(diff(cdf,_gamma))]; > valnum:=lambda=2.5,_gamma=-0.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); pdf := lambda exp(-(x - _gamma) lambda) 2 ddf := -lambda exp(-(x - _gamma) lambda) cdf := 1 - exp(-(x - _gamma) lambda) exp(-I _gamma) cf := -------------- x I 1 - ------ lambda 1 mu_ := _gamma + ------ lambda 1 var_ := ------- 2 lambda skew_ := 2 kurt_ := 9 ln(1 - p) qdf := _gamma - --------- lambda lambda _gamma - ln(1 - p) qdf2 := ------------------------- lambda pdfgr := [ -exp(-(x - _gamma) lambda) (-1 + lambda x - lambda _gamma), 2 lambda exp(-(x - _gamma) lambda)] cdfgr := [(x - _gamma) exp(-(x - _gamma) lambda), -lambda exp(-(x - _gamma) lambda)] -0.1469859116 0.05879436465 0.9764822541 0.5912175400 + 0.7159125546 I [-0.06467380112, 0.1469859116] [0.03527661879, -0.05879436465] 0.6982929094 -0.1000000000 0.4000000000 2. 9. 0.1600000000 > openturns-1.9/validation/src/ValidFORMKernelMixture.mws000066400000000000000000000132351307543307100233420ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 141 "restart:\nwith(Stat istics):\n#Digits:=30:\nphi:=proc(x)\n 1/sqrt(2*Pi)*exp(-x^2/2)\nend: \nPHI:=proc(x)\n int(phi(t),t=-infinity..x)\nend:\ng:=x1+x2;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG,&%#x1G\"\"\"%#x2GF'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 108 "CDF_x1:=1/2*CDF(Normal(mu1,sigma1) ,x1)+1/2*CDF(Normal(mu2,sigma2),x1);\nCDF_x2:=CDF(Normal(mux2,sigmax2) ,x2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'CDF_x1G,(#\"\"\"\"\"#F'*&# F'\"\"%F'-%$erfG6#,$**F(!\"\"F(F&,&%#x1GF'%$mu1GF1F'%'sigma1GF1F'F'F'* &F*F'-F-6#,$**F(F1F(F&,&F3F'%$mu2GF1F'%'sigma2GF1F'F'F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%'CDF_x2G,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,$**F(! \"\"F(F&,&%#x2GF'%%mux2GF/F'%(sigmax2GF/F'F'F'" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 191 "u1:=subs(s=CDF_x1,Quantile(Normal(0,1),s));\n u2:=subs(t=CDF_x2,Quantile(Normal(0,1),t));\nX1:=subs(s=solve(CDF_x1=U 1,x1),CDF(Normal(0,1),s));\nX2:=subs(t=solve(CDF_x2=U2,x2),CDF(Normal( 0,1),t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#u1G*&-%'RootOfG6#,(-%$ erfG6#%#_ZG!\"\"*&#\"\"\"\"\"#F1-F+6#,$**F2F.F2F0,&%#x1GF1%$mu1GF.F1%' sigma1GF.F1F1F1*&F0F1-F+6#,$**F2F.F2F0,&F8F1%$mu2GF.F1%'sigma2GF.F1F1F 1F1F2F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#u2G*&-%'RootOfG6#,&-%$er fG6#%#_ZG!\"\"-F+6#,$**\"\"#F.F3#\"\"\"F3,&%#x2GF5%%mux2GF.F5%(sigmax2 GF.F5F5F5F3F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#X1G,&#\"\"\"\"\"#F '*&F&F'-%$erfG6#,$*&F&F'*&-%'RootOfG6#,*F(F'-F+6#,$**F(!\"\"F(F&,&%#_Z GF'%$mu1GF8F'%'sigma1GF8F'F'-F+6#,$**F(F8F(F&,&F:F'%$mu2GF8F'%'sigma2G F8F'F'*&\"\"%F'%#U1GF'F8F'F(F&F'F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#X2G,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,&*(F(!\"\"F(F&%%mux2GF'F'* &-%'RootOfG6#,(-F+6#%#_ZGF'F'F'*&F(F'%#U2GF'F/F'%(sigmax2GF'F'F'F'" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 216 "G:=subs(x1=X1,x2=X2,g):\nL :=1/2*(U1^2+U2^2)+lambda*G:\nsys:=\{diff(L,U1),diff(L,U2),diff(L,lambd a)\}:\nValNum:=\{mu1=-1.0,sigma1=0.25,mu2=2.0,sigma2=2.0,mux2=2.5,sigm ax2=3.0\}:\nevalf(subs(ValNum,sys)):\nvars:=\{U1,U2,lambda\}:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "sol:=fsolve(subs(ValNum,sys) ,vars);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$solG-%'fsolveG6$<%,&%#U1 G\"\"\"*.\"\"#F+%'lambdaGF+%#PiG#!\"\"F--%$expG6#,$*&#F+F-F+*$)-%'Root OfG6#,*F-F+-%$erfG6#,$*($\"+++++?!\"*F+F-#F+F-,&%#_ZGF+$\"#5F1F+F+F+F+ -F?6#,$*($\"+++++D!#5F+F-FF,&FHF+$\"#?F1F1F+F+F+*&\"\"%F+F*F+F1F-F+F+F 1F+,&**$\"+++++SFEF+F/F0-F36#,$*&$\"+++++!)FEF+),&F:F+FIF+F-F+F1F+F-FF F+**$\"+++++]FQF+F/F0-F36#,$*&$\"++++]7FQF+),&F:F+$FTF1F1F-F+F1F+F-FFF +F1F-FFF+,&%#U2GF+**$\"#IF1F+F.F+-F36#,$*$),&*&$\"++++]7FEF+F-FFF+*&F \\pF+-F;6#,(-F?6#FHF+F+F+*&F-F+FjoF+F1F+F+F-F+F1F+-F36#,$*$)FhpF-F+F1F 1F+,(F+F+*&FFF+-F?6#,$*&FFF+*&F:F+F-FFF+F+F+F+*&FFF+-F?6#FcpF+F+<%F.Fj oF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 600 "\nPointConception:= subs(sol,[u_E,u_F,u_L]);\nbeta:=subs(sol,sqrt(u_L^2+u_F^2+u_E^2));\nFa cteursImportance:=subs(sol,[F_E=(u_E/beta)^2,F_F=(u_F/beta)^2,F_L=(u_L /beta)^2]);\nPdef_FORM:=PHI(-beta);\nwith(plots):\np1:=implicitplot3d( subs(ValNum,g),u_E=-4..0,u_F=0..4,u_L=0..4,style=PATCHNOGRID,scaling=c onstrained,axes=normal,grid=[31,31,31],lightmodel='light1'):\np2:=poin tplot3d(PointConception,symbol=circle,symbolsize=15,style=POINT,color= red,scaling=constrained):\np3:=spacecurve([PointConception[1]*t,PointC onception[2]*t,PointConception[3]*t],t=0..1,color=blue,scaling=constra ined):\ndisplay3d(\{p1,p2,p3\});" }}{PARA 7 "" 1 "" {TEXT -1 33 "Warni ng, computation interrupted\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 132 "expr:=subs(ValNum,solve(g,u_F));\nA:=infinity;\nPde:=Int(Int(in t(phi(u_E)*phi(u_F)*phi(u_L),u_F=expr..infinity),u_E=-A..A),u_L=-A..A) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%exprG,$*&#\"\"\"\"#]F(*&,,*&\" $S#F(-%$erfG6#,$*(\"\"#!\"\"F3#F(F3%$u_LGF(F(F(F4*&\"$![F(%$u_EGF(F(*& #F(\"$D\"F(*$)F.\"\"$F(F(F4*&#\"#7\"\"&F(*$)F.F3F(F(F4\"%!3#F(F(,**&#F (\"'+]7F(F=F(F4*&#F?\"%]7F(FDF(F4*&#\"\"'\"#DF(F.F(F4\"\")F4F4F(F4" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG%)infinityG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$PdeG-%$IntG6$-F&6$,$*&#\"\"\"\"\"%F-*(-%$expG6#,&*& \"\"#!\"\"%$u_EGF5F6*&F5F6%$u_LGF5F6F-,&-%$erfG6#,$**\"#5F-,,*&\"&++$F --F<6#,$*(F5F6F5#F-F5F9F-F-F-F6*&\"&++'F-F7F-F-*$)FD\"\"$F-F6*&\"$+$F- )FDF5F-F6\"'++EF-F-,*FKF-*&FOF-FPF-F-*&FCF-FDF-F-\"(+++\"F-F6F5FHF-F-F -F6F-%#PiGF6F-F6/F7;,$%)infinityGF6FZ/F9FX" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 42 "for i from 1 to 10 do\n evalf[i](Pde);\nod;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"'!\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#g!\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$/'!\"' " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"%Qg!\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"&y.'!\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"'&y.' !\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"(]y.'!#5" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\")+&y.'!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"*+ ]y.'!#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++&y.'!#8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidFORMKernelMixture.txt000066400000000000000000000154741307543307100233620ustar00rootroot00000000000000> restart: > with(Statistics): > #Digits:=30: > phi:=proc(x) > 1/sqrt(2*Pi)*exp(-x^2/2) > end: > PHI:=proc(x) > int(phi(t),t=-infinity..x) > end: > g:=x1+x2; g := x1 + x2 > CDF_x1:=1/2*CDF(Normal(mu1,sigma1),x1)+1/2*CDF(Normal(mu2,sigma2),x1); > CDF_x2:=CDF(Normal(mux2,sigmax2),x2); 1/2 1/2 2 (x1 - mu1) 2 (x1 - mu2) CDF_x1 := 1/2 + 1/4 erf(---------------) + 1/4 erf(---------------) 2 sigma1 2 sigma2 1/2 2 (x2 - mux2) CDF_x2 := 1/2 + 1/2 erf(----------------) 2 sigmax2 > u1:=subs(s=CDF_x1,Quantile(Normal(0,1),s)); > u2:=subs(t=CDF_x2,Quantile(Normal(0,1),t)); > X1:=subs(s=solve(CDF_x1=U1,x1),CDF(Normal(0,1),s)); > X2:=subs(t=solve(CDF_x2=U2,x2),CDF(Normal(0,1),t)); 1/2 2 (x1 - mu1) u1 := RootOf(-erf(_Z) + 1/2 erf(---------------) 2 sigma1 1/2 2 (x1 - mu2) 1/2 + 1/2 erf(---------------)) 2 2 sigma2 1/2 2 (x2 - mux2) 1/2 u2 := RootOf(-erf(_Z) + erf(----------------)) 2 2 sigmax2 X1 := 1/2 + 1/2 erf(1/2 RootOf( 1/2 1/2 2 (_Z - mu1) 2 (_Z - mu2) 1/2 2 + erf(---------------) + erf(---------------) - 4 U1) 2 ) 2 sigma1 2 sigma2 1/2 2 mux2 X2 := 1/2 + 1/2 erf(--------- + RootOf(erf(_Z) + 1 - 2 U2) sigmax2) 2 > G:=subs(x1=X1,x2=X2,g): > L:=1/2*(U1^2+U2^2)+lambda*G: > sys:={diff(L,U1),diff(L,U2),diff(L,lambda)}: > ValNum:={mu1=-1.0,sigma1=0.25,mu2=2.0,sigma2=2.0,mux2=2.5,sigmax2=3.0} > : > evalf(subs(ValNum,sys)): > vars:={U1,U2,lambda}: > sol:=fsolve(subs(ValNum,sys),vars); / / 2 1/2 / | 1/2 | sol := fsolve({U1 + 2 lambda exp(-1/2 %1 ) 2 / |Pi | / | | \ \ 2 1/2 4.000000000 exp(-8.000000000 (%1 + 1.0) ) 2 ---------------------------------------------- 1/2 Pi 2 1/2\\ 0.5000000000 exp(-0.1250000000 (%1 - 2.0) ) 2 || + ------------------------------------------------||, U2 + 1/2 || Pi // 3.0 lambda 1/2 2 exp(-(1.250000000 2 + 3.0 RootOf(erf(_Z) + 1 - 2 U2)) ) / 2 / exp(-RootOf(erf(_Z) + 1 - 2 U2) ), 1 / 1/2 + 1/2 erf(1/2 %1 2 ) 1/2 + 1/2 erf(1.250000000 2 + 3.0 RootOf(erf(_Z) + 1 - 2 U2)) }, {lambda, U2, U1}) 1/2 %1 := RootOf(2 + erf(2.000000000 2 (_Z + 1.0)) 1/2 + erf(0.2500000000 2 (_Z - 2.0)) - 4 U1) > > PointConception:=subs(sol,[u_E,u_F,u_L]); > beta:=subs(sol,sqrt(u_L^2+u_F^2+u_E^2)); > FacteursImportance:=subs(sol,[F_E=(u_E/beta)^2,F_F=(u_F/beta)^2,F_L=(u > _L/beta)^2]); > Pdef_FORM:=PHI(-beta); > with(plots): > p1:=implicitplot3d(subs(ValNum,g),u_E=-4..0,u_F=0..4,u_L=0..4,style=PA > TCHNOGRID,scaling=constrained,axes=normal,grid=[31,31,31],lightmodel=' > light1'): > p2:=pointplot3d(PointConception,symbol=circle,symbolsize=15,style=POIN > T,color=red,scaling=constrained): > p3:=spacecurve([PointConception[1]*t,PointConception[2]*t,PointConcept > ion[3]*t],t=0..1,color=blue,scaling=constrained): > display3d({p1,p2,p3}); Warning, computation interrupted > expr:=subs(ValNum,solve(g,u_F)); > A:=infinity; > Pde:=Int(Int(int(phi(u_E)*phi(u_F)*phi(u_L),u_F=expr..infinity),u_E=-A > ..A),u_L=-A..A); / 1/2 1/2 3 | 2 u_L 2 u_L expr := -1/50 |-240 erf(--------) + 480 u_E - 1/125 erf(--------) \ 2 2 1/2 2 \ / 1/2 3 2 u_L | / | 2 u_L - 12/5 erf(--------) + 2080| / |-1/125000 erf(--------) 2 / / \ 2 1/2 2 1/2 \ 2 u_L 2 u_L | - 3/1250 erf(--------) - 6/25 erf(--------) - 8| 2 2 / A := infinity infinity infinity / / 2 2 / / | | u_E u_L | | Pde := | | -1/4 exp(- ---- - ----) |erf(10 | | | 2 2 \ \ / / -infinity -infinity 1/2 1/2 3 2 u_L 2 u_L -30000 erf(--------) + 60000 u_E - erf(--------) 2 2 1/2 2 \ / 1/2 3 2 u_L | 1/2 / | 2 u_L - 300 erf(--------) + 260000| 2 / |erf(--------) 2 / / \ 2 1/2 2 1/2 \ \ 2 u_L 2 u_L | | + 300 erf(--------) + 30000 erf(--------) + 1000000|) - 1|/ 2 2 / / Pi du_E du_L > for i from 1 to 10 do > evalf[i](Pde); > od; 0.0006 0.00060 0.000604 0.0006038 0.00060378 0.000603785 0.0006037850 0.00060378500 0.000603785000 0.0006037850000 > openturns-1.9/validation/src/ValidFisherSnedecorFactory.mw000066400000000000000000000711541307543307100241340ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY5LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRIm1GJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJm1mcmFjR0YkNigtRiw2JVEjZDJGJ0YvRjItRiM2KUZlby1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORl5wLUkjbW5HRiQ2JFEiMkYnRjlGLy8lK2V4ZWN1dGFibGVHRj0vJTBmb250X3N0eWxlX25hbWVHUSgyRH5NYXRoRidGMi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXnEvJSliZXZlbGxlZEdGPS1GNjYtUSI7RidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSJ2RidGL0YyRl9vLUZjbzYoLUYjNilGYHAtRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUklbXN1cEdGJDYlRmVvLUYjNidGYHBGL0ZkcEZmcEYyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0Zeci1JKG1mZW5jZWRHRiQ2JC1GIzYpLUYsNiVRI2QxRidGL0YyLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGXXBGX3BGZW9Gam9GYHBGZHBGOUY5RmRwRjktRiM2K0Zec0Zeci1GYnI2JS1GanI2JEZob0Y5RmRyRmZyRl5yLUZqcjYkLUYjNilGZW9Gam8tRmFwNiRRIjRGJ0Y5Ri9GZHBGZnBGMkY5Ri9GZHBGZnBGMkZpcEZccUZfcUZhcUZjcUZPLUYsNiVRJHNvbEYnRi9GMkZfb0Znbi1GLDYlUSZzb2x2ZUYnRi9GMi1GanI2JC1GIzYnLUZqcjYmLUYjNitGXG8tRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEjbXVGJy9GMEY9RjktRjY2LVEiLEYnRjlGO0ZmcUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRidGZ3FGX3UtRiw2JVEnc2lnbWEyRidGL0YyRmRwRjlGOS8lJW9wZW5HUSJ8ZnJGJy8lJmNsb3NlR1EifGhyRidGZnUtRmpyNiYtRiM2J0Zec0ZmdUZlb0ZkcEY5RjlGXnZGYXZGZHBGOUY5RmNxRmRwRjk= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiZJI2QyRzYiIiIiLCZGI0YlIiIjISIiRig= LCQqLiIiIyIiIilJI2QyRzYiRiRGJSwoSSNkMUdGKEYlRidGJUYkISIiRiVGKkYrKSwmRidGJUYkRitGJEYrLCZGJ0YlIiIlRitGK0Yl PCQvSSNkMUc2IiwkKigiIiMiIiIpSSNtdUdGJUYoRiksKiokRipGKSEiIiokKUYrIiIkRilGKSomSSdzaWdtYTJHRiVGKUYrRilGKSomRihGKUYzRilGLkYuRi4vSSNkMkdGJSwkKihGKEYpRitGKSwmRilGLkYrRilGLkYp LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; Warning, solutions may have been lost LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/ValidFrankCopula.mws000066400000000000000000000143011307543307100222600ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "restart:\nCDF_frank: =-log(1+(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1))/theta;" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*CDF_frankG,$*&-%#lnG6#,&\"\"\"F+*( ,&-%$expG6#,$*&%&thetaGF+%\"uGF+!\"\"F+F+F5F+,&-F/6#,$*&F3F+%\"vGF+F5F +F+F5F+,&-F/6#,$F3F5F+F+F5F5F+F+F3F5F5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "PDF_frank:=factor(diff(diff(CDF_frank,u),v));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%*PDF_frankG,$*,-%$expG6#,$*&%&thetaG \"\"\"%\"uGF-!\"\"F-F,F--F(6#,$*&F,F-%\"vGF-F/F-,&-F(6#,$F,F/F-F-F/F-, *F6F-*&F'F-F0F-F-F'F/F0F/!\"#F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 60 "algsubs(exp(-theta*v)=V,algsubs(exp(-theta*u)=U,PDF_frank));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*,%&thetaG\"\"\",&-%$expG6#,$F%!\" \"F&F&F,F&%\"UGF&%\"VGF&,*F(F&F.F,*&F-F&F.F&F&F-F,!\"#F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "du:=factor(diff(PDF_frank,u));\ndv: =factor(diff(PDF_frank,v));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "with (codegen,optimize,makeproc,cost,prep2trans):\noptimize(CDF_frank);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#duG,$*.%&thetaG\"\"#-%$expG6#,$*&F' \"\"\"%\"uGF.!\"\"F.-F*6#,$*&F'F.%\"vGF.F0F.,&-F*6#,$F'F0F.F.F0F.,*F7F 0*&F)F.F1F.F.F)F0F1F.F.,*F7F.F;F.F)F0F1F0!\"$F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#dvG,$*.%&thetaG\"\"#-%$expG6#,$*&F'\"\"\"%\"uGF.!\" \"F.-F*6#,$*&F'F.%\"vGF.F0F.,&-F*6#,$F'F0F.F.F0F.,*F7F0*&F)F.F1F.F.F)F .F1F0F.,*F7F.F;F.F)F0F1F0!\"$F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'/%# t2G-%$expG6#,$*&%&thetaG\"\"\"%\"uGF+!\"\"/%#t5G-F&6#,$*&F*F+%\"vGF+F- /%#t8G-F&6#,$F*F-/%$t13G-%#lnG6#,&F+F+*(,&F$F+F+F-F+,&F/F+F+F-F+,&F6F+ F+F-F-F+/%$t16G,$*&F;F+F*F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "optimize(du);\noptimize(dv);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6* /%#t1G*$)%&thetaG\"\"#\"\"\"/%#t3G-%$expG6#,$*&F'F)%\"uGF)!\"\"/%#t6G- F-6#,$*&F'F)%\"vGF)F2/%#t8G-F-6#,$F'F2/%$t10G*&F+F)F4F)/%$t13G,*F;F)F@ F)F+F2F4F2/%$t14G*$)FCF(F)/%$t19G,$*0F$F)F+F)F4F),&F;F)F)F2F),*F;F2F@F )F+F2F4F)F)FCF2FFF2F2" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*/%#t1G*$)%&th etaG\"\"#\"\"\"/%#t3G-%$expG6#,$*&F'F)%\"uGF)!\"\"/%#t6G-F-6#,$*&F'F)% \"vGF)F2/%#t8G-F-6#,$F'F2/%$t10G*&F+F)F4F)/%$t13G,*F;F)F@F)F+F2F4F2/%$ t14G*$)FCF(F)/%$t19G,$*0F$F)F+F)F4F),&F;F)F)F2F),*F;F2F@F)F+F)F4F2F)FC F2FFF2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "factor(du/dv); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,*-%$expG6#,$%&thetaG!\"\"F**&-F &6#,$*&F)\"\"\"%\"uGF0F*F0-F&6#,$*&F)F0%\"vGF0F*F0F0F,F*F2F0F0,*F%F*F+ F0F,F0F2F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 68 "theta:=2.5; evalf(Int(Int((u-0.5)*(v-0.5)*PDF_frank,u=0..1),v=0..1));" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&thetaG $\"#D!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+.g^8K!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "theta:='theta';CDF_frank;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&thetaGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&-%#lnG6#,&\"\"\"F)*(,&-%$expG6#,$*&%&thetaGF)%\"uGF)!\"\"F)F)F3 F),&-F-6#,$*&F1F)%\"vGF)F3F)F)F3F),&-F-6#,$F1F3F)F)F3F3F)F)F1F3F3" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "limit(CDF_frank,theta=0);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#*&%\"uG\"\"\"%\"vGF%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "factor((subs(v=u,(expand(1+(exp(-th eta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1)))))-1);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#,$**-%$expG6#%&thetaG\"\"\",&-F&6#*&F(F)%\"uGF)F)F)! \"\"\"\"#,&F)F/F%F)F/F+!\"#F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "f:=(exp(-u*theta))/(exp(-theta)-1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG*&-%$expG6#,$*&%&thetaG\"\"\"%\"uGF,!\"\"F,,&-F'6 #,$F+F.F,F,F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "g:=solve (f=y,u);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG*&,&-%#lnG6#,$*&%\"y G\"\"\",&F-!\"\"-%$expG6#%&thetaGF-F-F/F/F3F-F-F3F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "map(expand,subs(y=f+subs(u=v,f),g));\nexp and(CDF_frank);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&-%#lnG6#*&,&*&- %$expG6#,$*&%&thetaG\"\"\"%\"uGF1!\"\"F1,&-F,6#,$F0F3F1F1F3F3F3*&-F,6# ,$*&F0F1%\"vGF1F3F1F4F3F3F1,&F1F3-F,6#F0F1F1F3F0F1F1F0F3" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,$*&-%#lnG6#,&\"\"\"F)*(,&-%$expG6#,$*&%&thetaGF )%\"uGF)!\"\"F)F)F3F),&-F-6#,$*&F1F)%\"vGF)F3F)F)F3F),&-F-6#,$F1F3F)F) F3F3F)F)F1F3F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "factor((1 +(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1)));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#*&,*-%$expG6#,$%&thetaG!\"\"\"\"\"*&-F&6#,$*&F)F +%\"uGF+F*F+-F&6#,$*&F)F+%\"vGF+F*F+F+F-F*F2F*F+,&F%F+F+F*F*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "subs(v=0,CDF_frank);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&-%#lnG6#,&\"\"\"F)*(,&-%$expG6#,$* &%&thetaGF)%\"uGF)!\"\"F)F)F3F),&-F-6#\"\"!F)F)F3F),&-F-6#,$F1F3F)F)F3 F3F)F)F1F3F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 148 "restart:\n phi:=-log((exp(-theta*t)-1)/(exp(-theta)-1));\npsi:=solve(phi=y,t);\n# assume(p>0, p < 1, theta>0):\nq:=simplify(solve(subs(y=2*phi,psi)=p,t) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$phiG,$-%#lnG6#*&,&-%$expG6#,$ *&%&thetaG\"\"\"%\"tGF1!\"\"F1F1F3F1,&-F,6#,$F0F3F1F1F3F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$psiG*&,(-%#lnG6#,(\"\"\"F+-%$expG6#%&thet aG!\"\"-F-6#,&%\"yGF+F/F+F+F0F4F+F/F+F+F/F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG*&,&-%#lnG6#,(*&*&,&\"\"\"!\"\"-%$expG6#*&%\"pGF. %&thetaGF.F.F.,&F.F/-F16#F5F.F/#F.\"\"#-F16#,$*(F:F/,&F4F.F.F/F.F5F.F/ F.F.*&F,F9-F16#,$*(F:F/F5F.,&\"\"$F/F4F.F.F/F.F/F7F.F/F5F.F.F5F/" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 205 "diff(simplify(q-(\n 1-log (\n (sqrt(\n (exp(theta*p)-1)/\n ( exp(theta)-1)*exp(theta)/exp(theta*p)\n )*(1-exp(theta))+ exp(theta)\n )/theta)),symbolic),t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }}{MARK "6 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidFrankCopula.txt000066400000000000000000000142121307543307100222720ustar00rootroot00000000000000> restart: > CDF_frank:=-log(1+(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1)) > /theta; (exp(-theta u) - 1) (exp(-theta v) - 1) ln(1 + ---------------------------------------) exp(-theta) - 1 CDF_frank := - ----------------------------------------------- theta > PDF_frank:=factor(diff(diff(CDF_frank,u),v)); PDF_frank := - exp(-theta u) theta exp(-theta v) (exp(-theta) - 1)/ (exp(-theta) + exp(-theta u) exp(-theta v) - exp(-theta u) 2 - exp(-theta v)) > algsubs(exp(-theta*v)=V,algsubs(exp(-theta*u)=U,PDF_frank)); theta (exp(-theta) - 1) U V - ---------------------------- 2 (exp(-theta) - V + U V - U) > du:=factor(diff(PDF_frank,u)); > dv:=factor(diff(PDF_frank,v)); > with(codegen,optimize,makeproc,cost,prep2trans): > optimize(CDF_frank); 2 du := - theta exp(-theta u) exp(-theta v) (exp(-theta) - 1) ( -exp(-theta) + exp(-theta u) exp(-theta v) - exp(-theta u) / + exp(-theta v)) / (exp(-theta) / + exp(-theta u) exp(-theta v) - exp(-theta u) 3 - exp(-theta v)) 2 dv := - theta exp(-theta u) exp(-theta v) (exp(-theta) - 1) ( -exp(-theta) + exp(-theta u) exp(-theta v) + exp(-theta u) / - exp(-theta v)) / (exp(-theta) / + exp(-theta u) exp(-theta v) - exp(-theta u) 3 - exp(-theta v)) t2 = exp(-theta u), t5 = exp(-theta v), t8 = exp(-theta), (t2 - 1) (t5 - 1) t13 t13 = ln(1 + -----------------), t16 = - ----- t8 - 1 theta > optimize(du); > optimize(dv); 2 t1 = theta , t3 = exp(-theta u), t6 = exp(-theta v), t8 = exp(-theta), t10 = t3 t6, t13 = t8 + t10 - t3 - t6, 2 t1 t3 t6 (t8 - 1) (-t8 + t10 - t3 + t6) t14 = t13 , t19 = - --------------------------------------- t13 t14 2 t1 = theta , t3 = exp(-theta u), t6 = exp(-theta v), t8 = exp(-theta), t10 = t3 t6, t13 = t8 + t10 - t3 - t6, 2 t1 t3 t6 (t8 - 1) (-t8 + t10 + t3 - t6) t14 = t13 , t19 = - --------------------------------------- t13 t14 > factor(du/dv); (-exp(-theta) + exp(-theta u) exp(-theta v) - exp(-theta u) + exp(-theta v))/(-exp(-theta) + exp(-theta u) exp(-theta v) + exp(-theta u) - exp(-theta v)) > theta:=2.5;evalf(Int(Int((u-0.5)*(v-0.5)*PDF_frank,u=0..1),v=0..1)); > theta := 2.5 0.03213516003 > theta:='theta';CDF_frank; theta := theta (exp(-theta u) - 1) (exp(-theta v) - 1) ln(1 + ---------------------------------------) exp(-theta) - 1 - ----------------------------------------------- theta > limit(CDF_frank,theta=0); u v > factor((subs(v=u,(expand(1+(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-t > heta)-1)))))-1); 2 exp(theta) (exp(theta u) - 1) - ------------------------------- 2 (-1 + exp(theta)) exp(theta u) > f:=(exp(-u*theta))/(exp(-theta)-1); exp(-theta u) f := --------------- exp(-theta) - 1 > g:=solve(f=y,u); -ln(-y (-1 + exp(theta))) + theta g := --------------------------------- theta > map(expand,subs(y=f+subs(u=v,f),g)); > expand(CDF_frank); / / exp(-theta u) exp(-theta v) \ |-ln(|- --------------- - ---------------| (-1 + exp(theta))) \ \ exp(-theta) - 1 exp(-theta) - 1/ \ + theta|/theta / (exp(-theta u) - 1) (exp(-theta v) - 1) ln(1 + ---------------------------------------) exp(-theta) - 1 - ----------------------------------------------- theta > factor((1+(exp(-theta*u)-1)*(exp(-theta*v)-1)/(exp(-theta)-1))); (exp(-theta) + exp(-theta u) exp(-theta v) - exp(-theta u) - exp(-theta v))/(exp(-theta) - 1) > subs(v=0,CDF_frank); (exp(-theta u) - 1) (exp(0) - 1) ln(1 + --------------------------------) exp(-theta) - 1 - ---------------------------------------- theta > restart: > phi:=-log((exp(-theta*t)-1)/(exp(-theta)-1)); > psi:=solve(phi=y,t); > #assume(p>0, p < 1, theta>0): > q:=simplify(solve(subs(y=2*phi,psi)=p,t)); exp(-theta t) - 1 phi := -ln(-----------------) exp(-theta) - 1 -ln(1 - exp(theta) + exp(y + theta)) + y + theta psi := ------------------------------------------------ theta / /-1 + exp(p theta)\1/2 (p - 1) theta q := |-ln(|-----------------| exp(- -------------) \ \ -1 + exp(theta) / 2 /-1 + exp(p theta)\1/2 theta (-3 + p) - |-----------------| exp(- --------------) + exp(theta)) \ -1 + exp(theta) / 2 \ + theta|/theta / > diff(simplify(q-( > 1-log( > (sqrt( > (exp(theta*p)-1)/ > (exp(theta)-1)*exp(theta)/exp(theta*p) > )*(1-exp(theta))+exp(theta) > )/theta)),symbolic),t); 0 > openturns-1.9/validation/src/ValidFrechet.py000066400000000000000000000007411307543307100212600ustar00rootroot00000000000000from __future__ import print_function from sympy import * x, gamma_, beta_, alpha_ = symbols('x gamma_ beta_ alpha_') cdf = exp(-((x-gamma_)/beta_)**(-alpha_)) print('dcdf/dalpha', diff(cdf, alpha_)) print('dcdf/dbeta',diff(cdf, beta_)) print('dcdf/dgamma',diff(cdf, gamma_)) pdf = alpha_/beta_*((x-gamma_)/beta_)**(-1.-alpha_)*exp(-((x-gamma_)/beta_)**(-alpha_)) print('dpdf/dalpha',diff(pdf, alpha_)) print('dpdf/dbeta',diff(pdf, beta_)) print('dpdf/dgamma',diff(pdf, gamma_)) openturns-1.9/validation/src/ValidGamma.mws000066400000000000000000000313461307543307100211050ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plo t" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1692 "restart:\nwith(Sta tistics):\ngamma_:=RandomVariable(Gamma(1/lambda,k)):\nassume(u>0);\np df:=subs(u=x-_gamma,PDF(gamma_,u));\ncdf:=subs(u=x-_gamma,CDF(gamma_,u )):\ncdf2:=simplify(convert(cdf,hypergeom),symbolic);\ncf:=subs(u=x,ex p(-I*_gamma)*CharacteristicFunction(gamma_,u));\nmu_:=_gamma+Mean(gamm a_);\nvar_:=Variance(gamma_);\nskew_:=simplify(convert(Skewness(gamma_ ),GAMMA),symbolic);\nkurt_:=simplify(convert(Kurtosis(gamma_),GAMMA),s ymbolic);\nsol:=subs(m='mu',v='var',solve(\{mu_=m,var_=v\},\{k,lambda \}));\n#qdf:=_gamma+Quantile(gamma_,p);\n#qdf2:=solve(cdf=p,x);\npdfgr :=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, k)/pdf, \+ diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf]);\ncdfgr:=map(_u->simpli fy(convert(_u,hypergeom),symbolic),[diff(cdf, k), diff(cdf, lambda), d iff(cdf, _gamma)]);\n#dCDFdk:=collect(map(_u->simplify(convert(_u,hype rgeom),symbolic),convert(diff(subs(_gamma=0,cdf2), k),hypergeometric)) ,x);\n#dCDFdlambda:=map(_u->factor(simplify(convert(_u,hypergeom),symb olic)),diff(cdf2, lambda));\n#dCDFdgamma:=map(_u->simplify(convert(_u, hypergeom),symbolic),diff(cdf2, _gamma));\ncollect(expand(simplify(fac tor(convert(subs(_gamma=0,lambda=1,diff(cdf2,k)),'StandardFunctions')) ),trig),k);\nvalnum:=k=1.5,lambda=2.5,_gamma=-0.5;\nevalf(subs(valnum, x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf)); \nevalf(subs(valnum,x=1,cf));\nevalf(subs(valnum,x=1,map(_x->_x*pdf,pd fgr)));\nevalf(subs(valnum,x=1,cdfgr));\nevalf(fsolve(subs(valnum,cdf) =0.95,x));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,sqrt(var_))); \nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_));\nevalf(subs(v alnum,var_));\nevalf(subs(valnum,[mu_,sqrt(var_)]));\nevalf(subs(sol,m u=mu_,var=var_,valnum,[k,lambda]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%$pdfG**)*&,&%\"xG\"\"\"%'_gammaG!\"\"F*%'lambdaGF*,&%\"kGF*F*F,F*-% $expG6#,$F'F,F*F-F*-%&GAMMAG6#F/F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%%cdf2G*&,,-%&GAMMAG6#,&%\"kG\"\"\"\"\"#F,F,-F(6$,&F+F,F,F,*&,&%\"xGF ,%'_gammaG!\"\"F,%'lambdaGF,F5*&F.F,F+F,F5**F+F,)F2F+F,-%$expG6#,$F1F5 F,)F6F+F,F,*(F9F,F:F,F>F,F,F,F'F5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %#cfG*&-%$expG6#*&^#!\"\"\"\"\"%'_gammaGF,F,),&F,F,*(F*F,%'lambdaGF+% \"xGF,F,,$%\"kGF+F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gam maG\"\"\"*&%'lambdaG!\"\"%\"kGF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%%var_G*&%'lambdaG!\"#%\"kG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%&skew_G,$*&\"\"#\"\"\"%\"kG#!\"\"F'F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$*(\"\"$\"\"\"%\"kG!\"\",&F)F(\"\"#F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%\"kG*&%$varG!\"\",&%'_gammaGF*%#muG \"\"\"\"\"#/%'lambdaG*&F+F.F)F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%& pdfgrG7%,(-%#lnG6#,&%\"xG\"\"\"%'_gammaG!\"\"F,-F(6#%'lambdaGF,-%$PsiG 6#%\"kGF.*&,(F5F,*&F1F,F+F,F.*&F1F,F-F,F,F,F1F.,$*&,*F5F,F,F.F8F.F9F,F ,F*F.F." }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7%,$*(,hq*.\"\"#\" \"\"%\"xGF+)%'lambdaG,&%\"kGF+F*F+F+),&F,F+%'_gammaG!\"\"F0F+-%*hyperg eomG6%7$F/F/7$,&F0F+\"\"$F+F:,$*&F2F+F.F+F4F+F3F+F4**\"\")F+-%&GAMMAG6 $,&F0F+F+F+F=F+-%#lnG6#F2F+F0F+F+*(F@F+-FE6#F.F+)F0F;F+F+**\"\"&F+F@F+ FHF+)F0F*F+F+**F?F+F@F+FHF+F0F+F+*(F@F+-%$PsiG6#F/F+FJF+F4**FLF+F@F+FP F+FMF+F4**F?F+F@F+FPF+F0F+F4*(FDF+-FAFRF+FMF+F4*,\"\"%F+-%$expG6#F%'valnumG6%/% \"kG$\"#:!\"\"/%'lambdaG$\"#DF*/%'_gammaG$!\"&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%$ddfG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+;Qr%G\"!# 5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+yaTC%*!#5" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#^$$\"+2A]*G%!#5$\"+B^>^yF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"+;))>^;!#5$!+NCCc6F&$\"+.ma$y#F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$!+h!\\iv)!#6$\"+2HG3xF&$!+=Qr%G\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+!eXH1\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++5!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+%[z*)*[!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+iJ*Hj\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+********p!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"+++++C!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++5!#5$\"+%[z*) *[F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"#:!\"\"$\"#DF&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 12 "" 1 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "simplify(expand(so lve(subs(lambda=a,k=1,pdf)=epsilon,x)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&*&%\"aG\"\"\"%'_gammaGF(!\"\"-%#lnG6#*&%(epsilonGF(F'F*F(F (F'F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 141 "sol:=exp(-Lambe rtW(-1,-(epsilon*GAMMA(k))^(1/(k-1))/(k-1)))*(epsilon*GAMMA(k))^(1/(k- 1));\nplot(subs(k=2,_gamma=0,a=1,sol),epsilon=0..0.0001);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG*&-%$expG6#,$-%)LambertWG6$!\"\",$*&)*&% (epsilonG\"\"\"-%&GAMMAG6#%\"kGF3*&F3F3,&F7F3F3F-F-F3F9F-F-F-F3F0F3" } }{PARA 13 "" 1 "" {GLPLOT2D 745 745 745 {PLOTDATA 2 "6%-%'CURVESG6$7^o 7$$\"+v1h6o!#<$\"+8x4Z>!\")7$$\"+N@Ki8!#;$\"+lS&R(=F-7$$\"+-K[V?F1$\"+ \\Q4J=F-7$$\"+qUkCFF1$\"+&**[1!=F-7$$\"+Q`!eS$F1$\"+OL,xF]o$\"+$3fQf\"F-7$$\"+;arz@F]o$\"+$z2'z:F-7$$\"+!y%*z7$ F]o$\"+\\W,T:F-7$$\"+XTFwSF]o$\"+$[zE^\"F-7$$\"+qMrU^F]o$\"+%**zx[\"F- 7$$\"+\"z_\"4iF]o$\"+lxcn9F-7$$\"+l6m#G(F]o$\"+ArW]9F-7$$\"+S&phN)F]o$ \"+>HnN9F-7$$\"+*=)H\\5!#9$\"+[;=69F-7$$\"+[!3uC\"Fdr$\"+]&eDR\"F-7$$ \"+J$RDX\"Fdr$\"+-'[hP\"F-7$$\"+)R'ok;Fdr$\"+/=Wh8F-7$$\"+1J:w=Fdr$\"+ K-`[8F-7$$\"+3En$4#Fdr$\"+/ynO8F-7$$\"+/RE&G#Fdr$\"+v3@F8F-7$$\"+D.&4] #Fdr$\"+'3auJ\"F-7$$\"+vB_Y2aFdr$\"+d9yL7F-7$$\"+yXu9cFdr$\"+[u oH7F-7$$\"+\\y))GeFdr$\"+-DhD7F-7$$\"+i_QQgFdr$\"+Fsw@7F-7$$\"+!y%3TiF dr$\"+#oq\"=7F-7$$\"+O![hY'Fdr$\"+d1J97F-7$$\"+#Qx$omFdr$\"+pU&4@\"F-7 $$\"+u.I%)oFdr$\"+x-[27F-7$$\"+(pe*zqFdr$\"+BWU/7F-7$$\"+C\\'QH(Fdr$\" +oz<,7F-7$$\"+8S8&\\(Fdr$\"+.%3#)>\"F-7$$\"+0#=bq(Fdr$\"+7x=&>\"F-7$$ \"+2s?6zFdr$\"+!\\7B>\"F-7$$\"+IXaE\")Fdr$\"+c2Q*=\"F-7$$\"+l*RRL)Fdr$ \"+z!Hm=\"F-7$$\"+`<.Y&)Fdr$\"+XW)Q=\"F-7$$\"+8tOc()Fdr$\"+W%G7=\"F-7$ $\"+\\Qk\\*)Fdr$\"+DI%)y6F-7$$\"+p0;r\"*Fdr$\"+*4rh<\"F-7$$\"+lxGp$*Fd r$\"+h\\$Q<\"F-7$$\"+!oK0e*Fdr$\"+$[(Rr6F-7$$\"+<5s#y*Fdr$\"+**Q6p6F-7 $$\"\"\"!\"%$\"+]9rm6F--%'COLOURG6&%$RGBG$\"*++++\"F-$\"\"!Ff`lFe`l-%+ AXESLABELSG6$%(epsilonGQ!6\"-%%VIEWG6$;Fe`lFj_l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 48 "plot(subs(epsilon=1e-16,\{sol,k\}), k=100..100000);" }}{PARA 13 "" 1 "" {GLPLOT2D 937 937 937 {PLOTDATA 2 "6&-%'CURVESG6$7S7$$\"$+\"\"\"!F(7$$\"3()***\\7qNvF#!#9F,7$$\"33+vory> sTF.F07$$\"3.+]()QO%HI'F.F37$$\"3[,]7sL\"yW)F.F67$$\"3\"*\\PR\"*)[#e5! #8F97$$\"3(*\\(o)R1;c7F;F=7$$\"3**\\(=>z'3h9F;F@7$$\"34](=:r@In\"F;FC7 $$\"3y\\P9`pF%)=F;FF7$$\"3(***\\sN*y:5#F;FI7$$\"3!**\\i-kyHH#F;FL7$$\" 3A+]nu$\\%3DF;FO7$$\"31+]i_[![s#F;FR7$$\"3@+]KXMILHF;FU7$$\"3)*\\(=?9S E7$F;FX7$$\"3\")**\\U(yzxM$F;Fen7$$\"34++q)f-&QNF;Fhn7$$\"3i\\(o&o&e.w $F;F[o7$$\"3-++&RpQn&RF;F^o7$$\"3()\\(og\"))>sTF;Fao7$$\"3+]i?/yOxVF;F do7$$\"3c+vo>,W\"f%F;Fgo7$$\"3Z]PWJ`-)y%F;Fjo7$$\"3q*\\i+/p++&F;F]p7$$ \"3>](=&fGK?_F;F`p7$$\"3**\\7$oXa?T&F;Fcp7$$\"3B+veM)H\">cF;Ffp7$$\"3d ***\\@'*eI$eF;Fip7$$\"3e*\\Ps(oMUgF;F\\q7$$\"3%)\\(okpV[C'F;F_q7$$\"36 +DY*)=opkF;Fbq7$$\"3&)***\\f+4<*F;Fis7$$\"3j++!*y%=*p$*F;F\\t7$$\"3a\\(o&[@& 4e*F;F_t7$$\"3N]7t(HQHy*F;Fbt7$$\"'++5F*Fet-%'COLOURG6&%$RGBG$\"*++++ \"!\")$F*F*F^u-F$6$7S7$F($\"+=B!R/#!\"(7$$\"+,d`xA!\"'$\"+dZC!o#Fiu7$$ \"+sy>sTFiu$\"+;PF2ZFiu7$$\"+RO%HI'Fiu$\"+ups`pFiu7$$\"+sL\"yW)Fiu$\"+ 4AC'>*Fiu7$$\"+\"*)[#e5!\"&$\"+lF^w7$$\"+O*y:5#F^w$\"+JqfsTF^w$\"+jY%RL%F^w7$$\"+/yOxVF^w$\"+W&HHa%F^w7$$\"+? ,W\"f%F^w$\"+\"p()3w%F^w7$$\"+J`-)y%F^w$\"+I7'4'\\F^w7$$\"+S!p++&F^w$ \"+spow^F^w7$$\"+gGK?_F^w$\"+)R#o+aF^w7$$\"+dW07aF^w$\"+Dgg&f&F^w7$$\" +N)H\">cF^w$\"+#4kg!eF^w7$$\"+i*eI$eF^w$\"+@HUBgF^w7$$\"+xoMUgF^w$\"+X [+OiF^w7$$\"+'pV[C'F^w$\"+eXjTkF^w7$$\"+*)=opkF^w$\"+C&*))pmF^w7$$\"+1 !4d)3vF^w7$$\"+\"))Qw\\(F^w$\"+<\\v7xF^w7$$ \"+)o7yq(F^w$\"+ub%e#zF^w7$$\"+,gH8zF^w$\"+o;9M\")F^w7$$\"+()zTG\")F^w $\"+p'o@N)F^w7$$\"+FggN$)F^w$\"+H&=@c)F^w7$$\"+Ad[Z&)F^w$\"+Gpyw()F^w7 $$\"+Z4hd()F^w$\"+jCk*)*)F^w7$$\"+1Up]*)F^w$\"+lq?&=*F^w7$$\"+5%*)><*F ^w$\"+:CJ4%*F^w7$$\"+z%=*p$*F^w$\"+NHs4'*F^w7$$\"+\\@&4e*F^w$\"+)=wL#) *F^w7$$\"+)HQHy*F^w$\"+OTy-5!\"%7$Fet$\"+aRvC5Fcdl-Fht6&Fjt$\")Vyg>F]u $\")d@R!)F]uFidl-%+AXESLABELSG6$%\"kGQ!6\"-%%VIEWG6$;F(Fet%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Cur ve 2" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalf(gamma);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# $\"+\\m:sd!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidGamma.txt000066400000000000000000000302301307543307100211050ustar00rootroot00000000000000> restart: > with(Statistics): > gamma_:=RandomVariable(Gamma(1/lambda,k)): > assume(u>0); > pdf:=subs(u=x-_gamma,PDF(gamma_,u)); > cdf:=subs(u=x-_gamma,CDF(gamma_,u)): > cdf2:=simplify(convert(cdf,hypergeom),symbolic); > cf:=subs(u=x,exp(-I*_gamma)*CharacteristicFunction(gamma_,u)); > mu_:=_gamma+Mean(gamma_); > var_:=Variance(gamma_); > skew_:=simplify(convert(Skewness(gamma_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(gamma_),GAMMA),symbolic); > sol:=subs(m='mu',v='var',solve({mu_=m,var_=v},{k,lambda})); > #qdf:=_gamma+Quantile(gamma_,p); > #qdf2:=solve(cdf=p,x); > pdfgr:=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, > k)/pdf, diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf]); > cdfgr:=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(cdf, k), > diff(cdf, lambda), diff(cdf, _gamma)]); > #dCDFdk:=collect(map(_u->simplify(convert(_u,hypergeom),symbolic),conv > ert(diff(subs(_gamma=0,cdf2), k),hypergeometric)),x); > #dCDFdlambda:=map(_u->factor(simplify(convert(_u,hypergeom),symbolic)) > ,diff(cdf2, lambda)); > #dCDFdgamma:=map(_u->simplify(convert(_u,hypergeom),symbolic),diff(cdf > 2, _gamma)); > collect(expand(simplify(factor(convert(subs(_gamma=0,lambda=1,diff(cdf > 2,k)),'StandardFunctions'))),trig),k); > valnum:=k=1.5,lambda=2.5,_gamma=-0.5; > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(fsolve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); > evalf(subs(sol,mu=mu_,var=var_,valnum,[k,lambda])); (k - 1) pdf := ((x - _gamma) lambda) exp(-(x - _gamma) lambda) lambda/GAMMA(k) cdf2 := (GAMMA(k + 2) - GAMMA(k + 1, (x - _gamma) lambda) - GAMMA(k + 1, (x - _gamma) lambda) k k k + exp(-(x - _gamma) lambda) lambda (x - _gamma) k k + k exp(-(x - _gamma) lambda) lambda (x - _gamma) )/ GAMMA(k + 2) / x I \(-k) cf := exp(-I _gamma) |1 - ------| \ lambda/ k mu_ := _gamma + ------ lambda k var_ := ------- 2 lambda 2 skew_ := ---- 1/2 k 3 (k + 2) kurt_ := --------- k 2 -_gamma + mu (-_gamma + mu) sol := {lambda = ------------, k = ---------------} var var pdfgr := [ln(x - _gamma) + ln(lambda) - Psi(k), k - lambda x + lambda _gamma ----------------------------, lambda k - 1 - lambda x + lambda _gamma - --------------------------------] x - _gamma (k + 2) (k + 1) cdfgr := [(lambda (x - _gamma) hypergeom([k + 2, k + 2], [k + 3, k + 3], %1) _gamma - (k + 2) (k + 1) lambda (x - _gamma) hypergeom([k + 2, k + 2], [k + 3, k + 3], %1) x - 4 Psi(k + 2) GAMMA(k + 2) k k + 4 k exp(%1) lambda (x - _gamma) k k - 8 exp(%1) Psi(k + 2) lambda (x - _gamma) k k k 3 - exp(%1) Psi(k + 2) lambda (x - _gamma) k k k 2 - 5 exp(%1) Psi(k + 2) lambda (x - _gamma) k k k 2 + 5 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k + 8 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k 3 + exp(%1) lambda ln(lambda) (x - _gamma) k k k 3 + exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k 2 + 5 exp(%1) lambda ln(lambda) (x - _gamma) k k k + 8 exp(%1) lambda ln(lambda) (x - _gamma) k k k 3 + 4 exp(%1) lambda (x - _gamma) + %2 Psi(k + 2) k 2 3 + 5 %2 Psi(k + 2) k + 8 %2 Psi(k + 2) k - %2 ln(lambda) k 2 - 5 %2 ln(lambda) k - 8 %2 ln(lambda) k 3 2 - %2 ln(x - _gamma) k - 5 %2 ln(x - _gamma) k 2 - 8 %2 ln(x - _gamma) k - Psi(k + 2) GAMMA(k + 2) k - 4 Psi(k + 2) GAMMA(k + 2) k 2 + ln(x - _gamma) GAMMA(k + 2) k + 4 ln(x - _gamma) GAMMA(k + 2) k 2 + ln(lambda) GAMMA(k + 2) k + 4 ln(lambda) GAMMA(k + 2) k k k + 4 exp(%1) lambda ln(lambda) (x - _gamma) k k - 4 exp(%1) Psi(k + 2) lambda (x - _gamma) k k + 4 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k 2 + exp(%1) lambda (x - _gamma) k + 4 ln(lambda) GAMMA(k + 2) + 4 ln(x - _gamma) GAMMA(k + 2) + 4 %2 Psi(k + 2) - 4 %2 ln(x - _gamma) - 4 %2 ln(lambda)) / 2 (k + 1) k / ((k + 2) GAMMA(k + 2)), (-lambda (x - _gamma) x / (k + 1) k - lambda (x - _gamma) k x (k + 1) k + lambda (x - _gamma) _gamma (k + 1) k + lambda (x - _gamma) k _gamma (k + 1) (k + 1) + lambda (x - _gamma) k (k + 1) (k + 1) + lambda (x - _gamma) k k k k 2 + lambda (x - _gamma) k + lambda (x - _gamma) k ) exp(%1)/(GAMMA(k + 2) lambda), - exp(%1) ( (k + 1) k -lambda (x - _gamma) x (k + 1) k - lambda (x - _gamma) k x (k + 1) k + lambda (x - _gamma) _gamma (k + 1) k + lambda (x - _gamma) k _gamma (k + 1) (k + 1) + lambda (x - _gamma) k (k + 1) (k + 1) + lambda (x - _gamma) k k k k 2 + lambda (x - _gamma) k + lambda (x - _gamma) k )/( (x - _gamma) GAMMA(k + 2))] %1 := -(x - _gamma) lambda %2 := GAMMA(k + 1, (x - _gamma) lambda) 2 k 2 GAMMA(k + 1, x) - -------- - -------- + ------------------- 2 2 2 (k + 1) (k + 1) (k + 1) k GAMMA(k) k k 2 x x - -------------------------- - ------------------------ 2 2 (k + 1) k GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) k GAMMA(k + 1, x) ln(x) 2 GAMMA(k + 1, x) ln(x) - ----------------------- - ----------------------- 2 2 (k + 1) GAMMA(k) (k + 1) GAMMA(k) GAMMA(k + 1, x) Psi(k) 2 GAMMA(k + 1, x) Psi(k) + ---------------------- + ------------------------ 2 2 (k + 1) k GAMMA(k) (k + 1) GAMMA(k) GAMMA(k + 1, x) ln(x) k GAMMA(k + 1, x) Psi(k) - --------------------- + ------------------------ 2 2 (k + 1) k GAMMA(k) (k + 1) GAMMA(k) k x 1 ln(x) - --------------------------- - ---------- + -------- 2 2 2 2 (k + 1) k GAMMA(k) exp(x) (k + 1) k (k + 1) 2 k Psi(k) GAMMA(k + 1, x) GAMMA(k + 1, x) - --------- + ----------------- + -------------------- 2 2 2 2 (k + 1) (k + 1) GAMMA(k) (k + 1) k GAMMA(k) 2 Psi(k) 2 k Psi(k) k ln(x) 2 k ln(x) - -------- - ---------- + -------- + --------- 2 2 2 2 (k + 1) (k + 1) (k + 1) (k + 1) k k k x ln(x) x ln(x) + ------------------------ + -------------------------- 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) k GAMMA(k) exp(x) k k 2 x ln(x) 2 x Psi(k) + ------------------------ - ------------------------ 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) k x x hypergeom([k + 1, k + 1], [k + 2, k + 2], -x) - -------------------------------------------------- 2 (k + 1) k GAMMA(k) k k k x Psi(k) x Psi(k) - ------------------------ - -------------------------- 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) k GAMMA(k) exp(x) valnum := k = 1.5, lambda = 2.5, _gamma = -0.5 ddf 0.1284713816 0.9424415478 0.4289502207 + 0.7851195123 I [0.1651198816, -0.1156242435, 0.2783546603] [-0.08756249102, 0.07708282900, -0.1284713816] 1.062945580 0.1000000000 0.4898979484 1.632993162 6.999999999 0.2400000000 [0.1000000000, 0.4898979484] [1.5, 2.5] > restart:assume(k,integer,k>2): > eq:=F(k+1)=F(k)-x^k*exp(-x)/k/GAMMA(k); > collect(expand(solve(eq,F(k+1))),F(k)); k~ x exp(-x) eq := F(k~ + 1) = F(k~) - ------------ k~ GAMMA(k~) k~ x F(k~) - ------------------- k~ GAMMA(k~) exp(x) > map(factor,collect(expand(solve(subs(k=k-1,eq),F(k-1))),F(k))); k~ x F(k~) + ------------------ GAMMA(k~) x exp(x) > int(log(x),x); x ln(x) - x > openturns-1.9/validation/src/ValidGammaEstimate.mws000066400000000000000000000144101307543307100225720ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1397 "restart:\nwith(Sta tistics):\ngamma_:=RandomVariable(Gamma(1/lambda,k)):\nassume(u>0);\np df:=subs(u=x-_gamma,PDF(gamma_,u));\ncdf:=subs(u=x-_gamma,CDF(gamma_,u )):\ncdf2:=simplify(convert(cdf,hypergeom),symbolic);\nmu_:=_gamma+Mea n(gamma_);\nvar_:=Variance(gamma_);\nsol:=subs(m='mu',v='var',solve(\{ mu_=m,var_=v\},\{k,lambda\}));\n#qdf:=_gamma+Quantile(gamma_,p);\n#qdf 2:=solve(cdf=p,x);\npdfgr:=map(_u->simplify(convert(_u,hypergeom),symb olic),[diff(pdf, k)/pdf, diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf] );\ncdfgr:=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(cdf, k), diff(cdf, lambda), diff(cdf, _gamma)]);\n#dCDFdk:=collect(map(_u- >simplify(convert(_u,hypergeom),symbolic),convert(diff(subs(_gamma=0,c df2), k),hypergeometric)),x);\n#dCDFdlambda:=map(_u->factor(simplify(c onvert(_u,hypergeom),symbolic)),diff(cdf2, lambda));\n#dCDFdgamma:=map (_u->simplify(convert(_u,hypergeom),symbolic),diff(cdf2, _gamma));\nco llect(expand(simplify(factor(convert(subs(_gamma=0,lambda=1,diff(cdf2, k)),'StandardFunctions'))),trig),k);\nvalnum:=k=1.5,lambda=2.5,_gamma= -0.5;\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\neva lf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr) ));\nevalf(subs(valnum,x=1,cdfgr));\nevalf(fsolve(subs(valnum,cdf)=0.9 5,x));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,var_));\nevalf(sub s(valnum,[mu_,sqrt(var_)]));\nevalf(subs(sol,mu=mu_,var=var_,valnum,[k ,lambda]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG**)*&,&%\"xG\"\" \"%'_gammaG!\"\"F*%'lambdaGF*,&%\"kGF*F*F,F*-%$expG6#,$F'F,F*F-F*-%&GA MMAG6#F/F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G,$*&,(-%&GAMMAG6 #,&%\"kG\"\"\"F-F-!\"\"-F)6$F+*&,&%\"xGF-%'_gammaGF.F-%'lambdaGF-F-*(- %$expG6#,$F1F.F-)F5F,F-)F2F,F-F.F-F(F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\"\"*&%'lambdaG!\"\"%\"kGF'F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%%var_G*&%'lambdaG!\"#%\"kG\"\"\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$solG<$/%'lambdaG*&,&%'_gammaG!\"\"%#muG\"\"\" F-%$varGF+/%\"kG*&F.F+F)\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pd fgrG7%,(-%#lnG6#,&%\"xG\"\"\"%'_gammaG!\"\"F,-F(6#%'lambdaGF,-%$PsiG6# %\"kGF.,$*&,(F5F.*&F1F,F+F,F,*&F1F,F-F,F.F,F1F.F.*&,*F5F.F,F,F9F,F:F.F ,F*F." }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7%,$*(,bo*,\"\"%\"\" \"-%$expG6#,$*&,&%\"xGF+%'_gammaG!\"\"F+%'lambdaGF+F4F+-%$PsiG6#,&%\"k GF+\"\"#F+F+)F5F:F+)F1F:F+F+*,F*F+F,F+FF%F+*,F'F%F)F-F 0F+F3F%-%$PsiGF2F%F%**F*F%F'F%F)F-F>F%F%*,F'F+F)F-F0F+F3F%FBF%F%*,F'F% F)F-F0F+F3F%F>F%F+*,F*F%F)F-F0F+F3F%FBF%F%*.F'F+F)F-F0F+F;F%F5F%-%*hyp ergeomG6%7$F)F)7$,&F'F%F*F%FN,$F5F+F%F+*(F'F*F)F-FBF%F+*&F)F-F>F%F%*&F )F-FBF%F+**F)F-F0F+F8F+F;F%F+*(F'F*F)F-F>F%F%*.F*F%F'F+F)F-F0F+F8F+F;F %F+*.F'F+F)F-F0F+F8F+F;F%FBF%F+*.F'F%F)F-F0F+F8F+F;F%FBF%F+*.F*F%F)F-F 0F+F8F+F;F%FBF%F+*.F'F+F)F-F0F+F8F+F;F%F>F%F%*.F*F%F)F-F0F+F8F+F;F%F>F %F%*.F'F%F)F-F0F+F8F+F;F%F>F%F%**F*F%F'F%F)F-FBF%F+" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%'valnumG6%/%\"kG$\"#:!\"\"/%'lambdaG$\"#DF*/%'_gamm aG$!\"&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%$ddfG" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"+;Qr%G\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" +yaTC%*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"+;))>^;!#5$!+NCCc6F &$\"+.ma$y#F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$!+M!\\iv)!#6$\"++H G3xF&$!+;Qr%G\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+!eXH1\"!\"* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++5!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++C!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++ +++5!#5$\"+%[z*)*[F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"#:!\"\"$ \"#DF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 110 "restart:assume(k ,integer,k>2):\neq:=F(k+1)=F(k)-x^k*exp(-x)/k/GAMMA(k);\ncollect(expan d(solve(eq,F(k+1))),F(k));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#eqG/- %\"FG6#,&%#k|irG\"\"\"F+F+,&-F'6#F*F+**)%\"xGF*F+-%$expG6#,$F1!\"\"F+F *F6-%&GAMMAGF.F6F6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&-%\"FG6#%#k|ir G\"\"\"**F'!\"\"-%&GAMMAGF&F*)%\"xGF'F(-%$expG6#F.F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "map(factor,collect(expand(solve(sub s(k=k-1,eq),F(k-1))),F(k)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&-%\" FG6#%#k|irG\"\"\"**-%&GAMMAGF&!\"\"%\"xGF,)F-F'F(-%$expG6#F-F,F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "int(log(x),x);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,&*&%\"xG\"\"\"-%#lnG6#F%F&F&F%!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 12 "" 1 "" {TEXT -1 0 "" }}}{MARK "6" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidGammaEstimate.txt000066400000000000000000000254031307543307100226070ustar00rootroot00000000000000> restart: > with(Statistics): > gamma_:=RandomVariable(Gamma(1/lambda,k)): > assume(u>0); > pdf:=subs(u=x-_gamma,PDF(gamma_,u)); > cdf:=subs(u=x-_gamma,CDF(gamma_,u)): > cdf2:=simplify(convert(cdf,hypergeom),symbolic); > mu_:=_gamma+Mean(gamma_); > var_:=Variance(gamma_); > sol:=subs(m='mu',v='var',solve({mu_=m,var_=v},{k,lambda})); > #qdf:=_gamma+Quantile(gamma_,p); > #qdf2:=solve(cdf=p,x); > pdfgr:=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, > k)/pdf, diff(pdf, lambda)/pdf, diff(pdf, _gamma)/pdf]); > cdfgr:=map(_u->simplify(convert(_u,hypergeom),symbolic),[diff(cdf, k), > diff(cdf, lambda), diff(cdf, _gamma)]); > #dCDFdk:=collect(map(_u->simplify(convert(_u,hypergeom),symbolic),conv > ert(diff(subs(_gamma=0,cdf2), k),hypergeometric)),x); > #dCDFdlambda:=map(_u->factor(simplify(convert(_u,hypergeom),symbolic)) > ,diff(cdf2, lambda)); > #dCDFdgamma:=map(_u->simplify(convert(_u,hypergeom),symbolic),diff(cdf > 2, _gamma)); > collect(expand(simplify(factor(convert(subs(_gamma=0,lambda=1,diff(cdf > 2,k)),'StandardFunctions'))),trig),k); > valnum:=k=1.5,lambda=2.5,_gamma=-0.5; > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(fsolve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); > evalf(subs(sol,mu=mu_,var=var_,valnum,[k,lambda])); (k - 1) pdf := ((x - _gamma) lambda) exp(-(x - _gamma) lambda) lambda/GAMMA(k) cdf2 := - (-GAMMA(k + 1) + GAMMA(k + 1, (x - _gamma) lambda) k k - exp(-(x - _gamma) lambda) lambda (x - _gamma) )/ GAMMA(k + 1) k mu_ := _gamma + ------ lambda k var_ := ------- 2 lambda 2 -_gamma + mu (-_gamma + mu) sol := {lambda = ------------, k = ---------------} var var pdfgr := [ln(x - _gamma) + ln(lambda) - Psi(k), -k + lambda x - lambda _gamma - -----------------------------, lambda -k + 1 + lambda x - lambda _gamma ---------------------------------] x - _gamma k k cdfgr := [- (4 exp(%1) Psi(k + 2) lambda (x - _gamma) k k - 4 exp(%1) lambda ln(lambda) (x - _gamma) k k 2 - exp(%1) lambda (x - _gamma) k k k 2 - 5 exp(%1) lambda ln(lambda) (x - _gamma) k k k - 8 exp(%1) lambda ln(lambda) (x - _gamma) k k k 2 - 5 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k - 4 exp(%1) lambda (x - _gamma) k k k - 4 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k - 8 exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k 3 - exp(%1) lambda ln(lambda) (x - _gamma) k k k 3 - exp(%1) lambda (x - _gamma) ln(x - _gamma) k k k + 8 exp(%1) Psi(k + 2) lambda (x - _gamma) k k k 3 + exp(%1) Psi(k + 2) lambda (x - _gamma) k k k 2 + 5 exp(%1) Psi(k + 2) lambda (x - _gamma) k 3 2 + %2 k ln(lambda) + 5 %2 ln(lambda) k 3 2 + %2 k ln(x - _gamma) + 5 %2 ln(x - _gamma) k 3 2 - %2 Psi(k + 2) k - 5 %2 Psi(k + 2) k + 8 %2 k ln(lambda) + 8 %2 k ln(x - _gamma) - 8 %2 Psi(k + 2) k - ln(lambda) GAMMA(k + 3) k - ln(x - _gamma) GAMMA(k + 3) k + Psi(k + 2) GAMMA(k + 3) k + 2 Psi(k + 2) GAMMA(k + 3) - 2 ln(lambda) GAMMA(k + 3) - 2 ln(x - _gamma) GAMMA(k + 3) + 4 %2 ln(lambda) + 4 %2 ln(x - _gamma) - 4 %2 Psi(k + 2) k k (k + 2) - 4 exp(%1) lambda (x - _gamma) - lambda (k + 1) (x - _gamma) hypergeom([k + 2, k + 2], [k + 3, k + 3], %1) _gamma + (k + 2) (k + 1) lambda (x - _gamma) hypergeom([k + 2, k + 2], [k + 3, k + 3], %1) x)/((k + 2) (k + 1) k GAMMA(k + 3)), - (lambda (x - _gamma) x (k + 1) k + lambda (x - _gamma) k x (k + 1) k - lambda (x - _gamma) _gamma (k + 1) k - lambda (x - _gamma) k _gamma (k + 1) (k + 1) - lambda (x - _gamma) k (k + 1) (k + 1) - lambda (x - _gamma) k k k k 2 - lambda (x - _gamma) k - lambda (x - _gamma) k ) exp(%1)/(GAMMA(k + 2) lambda), exp(%1) ( (k + 1) k lambda (x - _gamma) x (k + 1) k + lambda (x - _gamma) k x (k + 1) k - lambda (x - _gamma) _gamma (k + 1) k - lambda (x - _gamma) k _gamma (k + 1) (k + 1) - lambda (x - _gamma) k (k + 1) (k + 1) - lambda (x - _gamma) k k k k 2 - lambda (x - _gamma) k - lambda (x - _gamma) k )/( (x - _gamma) GAMMA(k + 2))] %1 := -(x - _gamma) lambda %2 := GAMMA(k + 1, (x - _gamma) lambda) 1 2 k 2 GAMMA(k + 1, x) - ---------- - -------- - -------- + ------------------- 2 2 2 2 k (k + 1) (k + 1) (k + 1) k (k + 1) GAMMA(k) k GAMMA(k + 1, x) x + ----------------- - --------------------------- 2 2 2 (k + 1) GAMMA(k) k (k + 1) GAMMA(k) exp(x) GAMMA(k + 1, x) 2 GAMMA(k + 1, x) ln(x) + -------------------- - ----------------------- 2 2 2 k (k + 1) GAMMA(k) (k + 1) GAMMA(k) GAMMA(k + 1, x) ln(x) k GAMMA(k + 1, x) Psi(k) - --------------------- + ------------------------ 2 2 k (k + 1) GAMMA(k) (k + 1) GAMMA(k) 2 k ln(x) GAMMA(k + 1, x) Psi(k) + --------- + ---------------------- 2 2 (k + 1) k (k + 1) GAMMA(k) k GAMMA(k + 1, x) ln(x) 2 GAMMA(k + 1, x) Psi(k) - ----------------------- + ------------------------ 2 2 (k + 1) GAMMA(k) (k + 1) GAMMA(k) k x x hypergeom([k + 1, k + 1], [k + 2, k + 2], -x) - -------------------------------------------------- 2 k (k + 1) GAMMA(k) 2 k k Psi(k) ln(x) Psi(k) x - --------- + -------- - -------- - ------------------------ 2 2 2 2 (k + 1) (k + 1) (k + 1) (k + 1) GAMMA(k) exp(x) 2 k k ln(x) 2 x + -------- - -------------------------- 2 2 (k + 1) k (k + 1) GAMMA(k) exp(x) k k x Psi(k) k x Psi(k) - -------------------------- - ------------------------ 2 2 k (k + 1) GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) k k 2 x Psi(k) x ln(x) - ------------------------ + -------------------------- 2 2 (k + 1) GAMMA(k) exp(x) k (k + 1) GAMMA(k) exp(x) k k 2 x ln(x) k x ln(x) + ------------------------ + ------------------------ 2 2 (k + 1) GAMMA(k) exp(x) (k + 1) GAMMA(k) exp(x) 2 k Psi(k) - ---------- 2 (k + 1) valnum := k = 1.5, lambda = 2.5, _gamma = -0.5 ddf 0.1284713816 0.9424415478 [0.1651198816, -0.1156242435, 0.2783546603] [-0.08756249034, 0.07708282900, -0.1284713816] 1.062945580 0.1000000000 0.2400000000 [0.1000000000, 0.4898979484] [1.5, 2.5] > restart:assume(k,integer,k>2): > eq:=F(k+1)=F(k)-x^k*exp(-x)/k/GAMMA(k); > collect(expand(solve(eq,F(k+1))),F(k)); k~ x exp(-x) eq := F(k~ + 1) = F(k~) - ------------ k~ GAMMA(k~) k~ x F(k~) - ------------------- k~ GAMMA(k~) exp(x) > map(factor,collect(expand(solve(subs(k=k-1,eq),F(k-1))),F(k))); k~ x F(k~) + ------------------ GAMMA(k~) x exp(x) > int(log(x),x); x ln(x) - x > openturns-1.9/validation/src/ValidGeneralizedPareto.mw000066400000000000000000003145231307543307100233050ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZhcS1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSdhc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2KS1GLDYlUSZzaWdtYUYnL0YwRj1GOS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JI21uR0YkNiRRIjFGJ0Y5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEjbXVGJ0Znb0Y5RmhvLUZccDYkUSIwRidGOUY5RjVGT0ZnbkZkby1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNRltwRjVGT0ZnbkZlcEZbcUZocEY1Rk9GZ24tRiw2JVEkY2RmRidGL0YyRltxRltwLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GZXEtSSVtc3VwR0YkNiUtRmBvNiQtRiM2JUZbcC1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIRmRxRmZxLUkmbWZyYWNHRiQ2KC1GIzYlLUYsNiVRI3hpRidGZ29GOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRmBvNiQtRiM2JS1GLDYlUSJ4RidGL0YyRmFxRmVwRjktRiM2I0Zkby8lLmxpbmV0aGlja25lc3NHRl5wLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmlzLyUpYmV2ZWxsZWRHRj1GOS1GIzYkLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZkcUZmcS1GYnI2KEZbcC1GIzYjRmZyRmVzRmdzRmpzRlx0LyUxc3VwZXJzY3JpcHRzaGlmdEdGanAtRjY2LVEiO0YnRjlGO0ZicEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRJHBkZkYnRi9GMkZbcS1GLDYlUSVkaWZmRidGL0YyLUZgbzYkLUYjNiVGXnFGX3BGYHNGOUZpdEZPLUYsNiVRIm1GJ0YvRjJGW3FGZ24tRiw2JVEkaW50RidGL0YyLUZgbzYkLUYjNitGYHNGaXJGXHVGX3BGYHNGaG9GZXAtRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkhGZHFGW28tRiw2JVEpaW5maW5pdHlGJ0YvRjJGOUZnbi1GNjYtUSlhc3N1bWluZ0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZnbkZmci1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZocEZpdEZPRmduLUYsNiVRJWNkZjBGJ0YvRjJGW3FGW3BGYXEtRiw2JVEkZXhwRidGZ29GOS1GYG82JC1GIzYkRmB0LUZicjYoRlxzRmNzRmVzRmdzRmpzRlx0RjlGaXRGT0Znbi1GLDYlUSVwZGYwRidGL0YyRltxRl91LUZgbzYkLUYjNiVGXHdGX3BGYHNGOUZpdEZPLUZQNiZGUkZVRlgvRmVuUSVhdXRvRictRiw2JVEicEYnRi9GMkZbcUZnbi1GLDYlUShjb252ZXJ0RidGL0YyLUZgbzYkLUYjNiYtRiw2JVEnc2VyaWVzRidGL0YyLUZgbzYkLUYjNipGW3BGYXFGZ25GXnFGX3BGZnJGX3AtRlxwNiRRIjNGJ0Y5RjlGX3AtRiw2JVEocG9seW5vbUYnRi9GMkY5Rml0Rk8tRiw2JVEnZmFjdG9yRidGL0YyLUZgbzYkLUYjNiNGY3hGOUZpdEZPRmduLUYsNiVRJXBkZjFGJ0YvRjJGW3FGanktRmBvNiQtRiM2JEZfdS1GYG82JC1GIzYlRmN4Rl9wRmBzRjlGOUZpdEZPLUYsNiVRKXNpbXBsaWZ5RidGL0YyLUZgbzYkLUYjNiVGZ25GX3UtRmBvNiQtRiM2JUZhekZfcEZmckY5RjlGaXRGT0ZcW2wtRmBvNiQtRiM2JUZnbkZfdS1GYG82JC1GIzYlRmF6Rl9wRmBzRjlGOUZpdEZnbkZPRlxbbC1GYG82JC1GIzYnRmduRl91LUZgbzYkLUYjNiVGXHVGX3BGZnJGOUZfcC1GLDYlUSlzeW1ib2xpY0YnRi9GMkY5Rml0Rk9GXFtsLUZgbzYkLUYjNidGZ25GX3UtRmBvNiQtRiM2JUZcdUZfcEZgc0Y5Rl9wRmdcbEY5Rml0RmduRmdu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYiIiJGIyksJkYjRiMqJkkjeGlHNiJGI0kieEdGKEYjRiMsJCokRichIiJGLEYs KiYpLCYiIiJGJSomSSN4aUc2IkYlSSJ4R0YoRiVGJSwkKiRGJyEiIkYsRiVGJEYs KiYsKCEiIiIiIiomLUkmbGltaXRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JSooLCZGJUYlSSJ4R0YsRiVGJSksJkYlRiUqJkkjeGlHRixGJUYwRiVGJSwkKiRGNEYkRiRGJSwmRjRGJUYkRiVGJC9GMEkpaW5maW5pdHlHRipJJWxlZnRHRixGJUY0RiVGJUYnRiRGJUY3RiQ= LCYiIiJGIy1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInhHRikhIiJGLQ== LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJEkieEdGJyEiIg== LCYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkSSJ4R0YoISIiIiIiKihGI0YtRisiIiNJI3hpR0YoRi0jRi1GLw== LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInhHRikhIiIiIiIsJiIiI0YuKiZGLEYwSSN4aUdGKUYuRi5GLiNGLkYw LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInhHRikhIiIiIiIsKCIiI0YuKiZGLEYwSSN4aUdGKUYuRi4qJkYyRi5GLEYuISIjRi4jRi1GMA== LCQqKEkieEc2IiIiIiwmRiRGJiEiI0YmRiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2IywkRiQhIiJGJiNGMCIiIw== LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInhHRikhIiIiIiIsKiIiI0YuKiZGLEYwSSN4aUdGKUYuRi4qJkYyRi5GLEYuISIlRjJGMEYuI0YuRjA= KigsLComKSwmIiIiRicqJkkjeGlHNiJGJ0kieEdGKkYnRicsJComLCZGJ0YnRilGJ0YnRikhIiJGL0YnLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRio2I0YmRidGJyoqRiVGJ0YwRidGKUYnRitGJ0YnKihGJUYnRilGJ0YrRidGLyooKUYmLCQqJiwmRidGJ0YpIiIjRidGKUYvRi9GJ0YrRidGKUY9Ri8qKEY5RidGK0Y9RikiIiRGL0YnRikhIiNGJkYv LCQqJiksJiIiIkYmKiZJI3hpRzYiRiZJInhHRilGJkYmLCQqJiwmRiZGJkYoIiIjRiZGKCEiIkYvRiYsJkYmRiZGKEYmRiZGLw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZlbi1JI21pR0YkNiVRJHNvbEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUYsNiVRJnNvbHZlRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNictSSZtZnJhY0dGJDYoLUYjNiUtRiw2JVEjeGlGJy9GMEY9RjktRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORl5vLUklbXN1cEdGJDYlLUYsNiVRInhGJ0YvRjItRiM2Iy1JI21uR0YkNiRRIjJGJ0Y5LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0Zmby8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZHAvJSliZXZlbGxlZEdGPS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUShlcHNpbG9uRidGaW5GOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRl1vL0ZOUSwwLjMzMzMzMzNlbUYnRmNvRjktRjY2LVEiO0YnRjlGO0ZicUZARkJGREZGRkhGXW9GTS1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0Zeby8lJmRlcHRoR0Zdci8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIRl1vRl9vLUYsNiVRJ3Nlcmllc0YnRi9GMi1GUzYkLUYjNihGKy1GUzYmLUYjNiMtRmlvNiRGYXBGOUY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRl9xRlxxRl9xRmhvRjlGZXItRjY2LVEpYXNzdW1pbmdGJ0Y5RjtGPkZARkJGREZGRkhGXW9GX29GZXJGZm4tRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRmlvNiRGXnBGOUZlcUZocUZlckZockZbc0ZlckZbdEZlckZmbi1GNjYtUSI8RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZhdEZlcUZocUZlckZoci1GUzYkLUYjNihGKy1GUzYmRmZvRjlGZXNGaHNGX3FGXHFGX3FGaG9GOUZlckZbdEZlckZmbkZedEZhdEZlcUZlckZocUZlckZockZmdEZlckZbdEZlckZmbkZjdEZhdEZlcUZocUZlci1GLDYlUSZldmFsZkYnRi9GMi1GUzYkLUYjNiMtRmFvNiVGaG8tRiM2JC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GW3YtRlg2KC1GaW82JFEjNTNGJ0Y5RmZvRl9wRmJwRmVwRmdwRlxwRjlGZXFGZXJGZXI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NiQqKEkjeGlHNiIhIiIiIiMjIiIiRicqJkkoZXBzaWxvbkdGJUYpRiRGKUYoLCRGI0Ym KihJI3hpRzYiIyEiIiIiI0YnIyIiIkYnSShlcHNpbG9uR0YkRig= KixeIyIiIkYkSSN4aUc2IiEiIiIiIyNGJEYoLCRGJUYnRilJKGVwc2lsb25HRiZGKQ== LCQqKEkjeGlHNiIjISIiIiIjRigjIiIiRihJKGVwc2lsb25HRiVGKUYn KixeIyEiIiIiIkkjeGlHNiJGJCIiIyNGJUYoLCRGJkYkRilJKGVwc2lsb25HRidGKQ== JCIrODduYDUhIzw= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2JVEmc3NwZGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSomY29sb25lcTtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GLDYlUSVkaWZmRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNigtSSNtbkdGJDYkUSIxRidGOS1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmluLUYsNiVRJGV4cEYnL0YwRj1GOS1GUzYkLUYjNiQtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRmhuRmpuLUkmbWZyYWNHRiQ2KC1GUzYkLUYjNiUtRiw2JVEieEYnRi9GMkZlbi1GLDYlUSNtdUYnRl5vRjlGOS1GIzYjLUYsNiVRJnNpZ21hRidGXm9GOS8lLmxpbmV0aGlja25lc3NHRlovJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXHEvJSliZXZlbGxlZEdGPUY5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkgvRktRJjAuMGVtRicvRk5RLDAuMzMzMzMzM2VtRidGXXBGOS1GNjYtUSI7RidGOUY7RmRxRkBGQkZERkZGSEZlcUZN LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEkaW50RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNi0tRiw2JVEkZXhwRicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUY2NiQtRiM2Jy1GLDYlUSJJRidGL0YyLUkjbW9HRiQ2LVEnJnNkb3Q7RidGPy8lJmZlbmNlR0Y+LyUqc2VwYXJhdG9yR0Y+LyUpc3RyZXRjaHlHRj4vJSpzeW1tZXRyaWNHRj4vJShsYXJnZW9wR0Y+LyUubW92YWJsZWxpbWl0c0dGPi8lJ2FjY2VudEdGPi8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRmZuLUYsNiVRInVGJ0YvRjJGSC1GLDYlUSJ4RidGL0YyRj9GSEY6LUY2NiQtRiM2JC1GSTYtUSomdW1pbnVzMDtGJ0Y/RkxGTkZQRlJGVEZWRlgvRmVuUSwwLjIyMjIyMjJlbUYnL0ZobkZnb0Zcb0Y/LUZJNi1RIixGJ0Y/RkwvRk9GMUZQRlJGVEZWRlhGWi9GaG5RLDAuMzMzMzMzM2VtRidGXG8tRkk2LVEiPUYnRj9GTEZORlBGUkZURlZGWC9GZW5RLDAuMjc3Nzc3OGVtRicvRmhuRmNwLUkjbW5HRiQ2JFEiMEYnRj8tRkk2LVEjLi5GJ0Y/RkxGTkZQRlJGVEZWRlhGZm9GZ24tRiw2JVEpaW5maW5pdHlGJ0YvRjJGPy1GSTYtUSI7RidGP0ZMRlxwRlBGUkZURlZGWEZaRmRwLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRmZuLyUmZGVwdGhHRmdxLyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiVRKGNvbnZlcnRGJ0YvRjItRjY2JC1GIzYmRistRjY2JC1GIzYsRjpGQUZILUklbXN1cEdGJDYlLUY2NiQtRiM2JS1GZnA2JFEiMUYnRj8tRkk2LVEiK0YnRj9GTEZORlBGUkZURlZGWEZmb0Zob0Zcb0Y/LUYjNiZGY29GYXMtRkk2LVEoJm1pbnVzO0YnRj9GTEZORlBGUkZURlZGWEZmb0Zoby1JJm1mcmFjR0YkNihGYXMtRiM2Iy1GLDYlUSN4aUYnRj1GPy8lLmxpbmV0aGlja25lc3NHRmNzLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmh0LyUpYmV2ZWxsZWRHRj4vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZocEZpb0Zcb0ZfcEZlcEZpcEZccUY/RmlvLUYsNiVRKmh5cGVyZ2VvbUYnRj1GP0Y/Rl9x LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJCwmKiZeIyIiIkYnSSJ1RzYiRidGJyEiIkYnRipGKg== KiYtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCYiIiJGKyokSSN4aUdGKCEiIkYrRi4sKCo2XiNGLkYrLUYkNiNGLEYrLCZGLUYrRi5GK0YrSSJ1R0YoRi4sJkYtIiIjRi5GK0YuKSomXiNGK0YrRjVGKywkKiZGNEYrRi1GLiNGLkY3RistSSRleHBHRiU2IyomXiNGPUYrRjVGK0YrKUY5LCQqJiwmRi0iIiRGLkYrRitGLUYuI0YrRjdGKy1GPzYjKiZeI0ZIRitGNUYrRi4tSSpoeXBlcmdlb21HRic2JTcjKiZGNkYrRi1GLjcjRkVGOUYrRisqOkY6RitGMkYrRi1GKywoKihGOkYrRjVGK0YtRitGK0YtRi5GK0YrRitGNEYuRjZGLkY1Ri5GOEYrRj5GK0ZDRitGSUYuLUZONiU3I0Y8RlJGOUYrRisqKkkjUGlHRiZGKy1JJGNzY0dGJTYjKiZGWkYrRi1GLkYrKSomRjFGK0Y1RitGLEYrLUY/NiNGam5GK0YuRis= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYqLUkjbWlHRiQ2JVEmc29sdmVGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2Ki1JI21uR0YkNiRRIjFGJy9GM1Enbm9ybWFsRictSSNtb0dGJDYtUSgmbWludXM7RidGPi8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGRi8lKXN0cmV0Y2h5R0ZGLyUqc3ltbWV0cmljR0ZGLyUobGFyZ2VvcEdGRi8lLm1vdmFibGVsaW1pdHNHRkYvJSdhY2NlbnRHRkYvJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0ZVLUYsNiVRJGV4cEYnL0YwRkZGPi1GNjYkLUYjNiQtRkE2LVEqJnVtaW51czA7RidGPkZERkdGSUZLRk1GT0ZRRlNGVi1JJm1mcmFjR0YkNigtRjY2JC1GIzYlLUYsNiVRInhGJ0YvRjJGQC1GLDYlUSNtdUYnRmVuRj5GPi1GIzYjLUYsNiVRJnNpZ21hRidGZW5GPi8lLmxpbmV0aGlja25lc3NHRj0vJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGY3AvJSliZXZlbGxlZEdGRkY+LUZBNi1RIj1GJ0Y+RkRGR0ZJRktGTUZPRlEvRlRRLDAuMjc3Nzc3OGVtRicvRldGXHEtRiw2JVEicUYnRi9GMi1GQTYtUSIsRidGPkZEL0ZIRjFGSUZLRk1GT0ZRL0ZUUSYwLjBlbUYnL0ZXUSwwLjMzMzMzMzNlbUYnRmRvRj4tRkE2LVEiO0YnRj5GREZkcUZJRktGTUZPRlFGZXFGXXEtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdGZnEvJSZkZXB0aEdGYXIvJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRkE2LVEifkYnRj5GREZHRklGS0ZNRk9GUUZlcS9GV0ZmcUYrLUY2NiQtRiM2KUY6RkAtSSVtc3VwR0YkNiUtRjY2JC1GIzYlRjotRkE2LVEiK0YnRj5GREZHRklGS0ZNRk9GUUZTRlYtRl5vNigtRiM2JS1GLDYlUSN4aUYnRmVuRj4tRkE2LVEnJnNkb3Q7RidGPkZERkdGSUZLRk1GT0ZRRmVxRlxzRmBvRmpvRl9wRmFwRmRwRmZwRj4tRiM2JEZqbi1GXm82KEY6LUYjNiNGX3RGX3BGYXBGZHBGZnAvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmhwRl5xRmFxRmRvRj5GaXE= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCZJI211RzYiIiIiKiYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjLCZGJUYlSSJxR0YkISIiRiVJJ3NpZ21hfGlyR0YkRiVGLw== KiYsKComLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJComLUkjbG5HRic2IywmIiIiRjJJInFHRiohIiJGMkkjeGlHRipGMkY0RjJJJ3NpZ21hfGlyR0YqRjJGMkY2RjQqJkY1RjJJI211R0YqRjJGMkYyRjVGNA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY4LUkjbWlHRiQ2JVEnYXNzdW1lRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiotRiw2JVEibkYnRi9GMi1JI21vR0YkNi1RIixGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjEvJSlzdHJldGNoeUdGRS8lKnN5bW1ldHJpY0dGRS8lKGxhcmdlb3BHRkUvJS5tb3ZhYmxlbGltaXRzR0ZFLyUnYWNjZW50R0ZFLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMzMzMzMzM2VtRictRj42LVEifkYnRkFGQy9GR0ZFRkhGSkZMRk5GUEZSL0ZWRlQtRiw2JVEncG9zaW50RidGL0YyRj0tRiw2JVEmc2lnbWFGJy9GMEZFRkEtRj42LVEiPkYnRkFGQ0ZlbkZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGYm8tSSNtbkdGJDYkUSIwRidGQUZBLUY+Ni1RIjpGJ0ZBRkNGZW5GSEZKRkxGTkZQRmFvRmNvLUYsNiVRJGludEYnRi9GMi1GNjYkLUYjNiwtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GIzYjRjovJTFzdXBlcnNjcmlwdHNoaWZ0R0Znby1GPjYtUScmc2RvdDtGJ0ZBRkNGZW5GSEZKRkxGTkZQRlJGZm4tRiw2JVEkZXhwRidGXW9GQS1GNjYkLUYjNiQtRj42LVEqJnVtaW51czA7RidGQUZDRmVuRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZqcUZlcEZBRj1GZXAtRj42LVEiPUYnRkFGQ0ZlbkZIRkpGTEZORlBGYW9GY29GZG8tRj42LVEjLi5GJ0ZBRkNGZW5GSEZKRkxGTkZQRmlxRmZuLUYsNiVRKWluZmluaXR5RidGL0YyRkEtRj42LVEiO0YnRkFGQ0ZGRkhGSkZMRk5GUEZSRmNvLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlQvJSZkZXB0aEdGXXMvJSpsaW5lYnJlYWtHUShuZXdsaW5lRidGKy1GNjYkLUYjNi5GOkY9RlhGZ25GPUZqbkZeb0Zkb0Y9LUYsNiVRI3hpRidGXW9GQUZeb0Zkb0ZBRmhvLUYsNiVRJ2V4cGFuZEYnRi9GMi1GNjYkLUYjNiQtRiw2JVEkbG9nRidGXW9GQS1GNjYkLUYjNiRGW3AtRjY2JC1GIzYrRmJwRlxxLUZjcDYlLUY2NiQtRiM2Jy1GZW82JFEiMUYnRkEtRj42LVEiK0YnRkFGQ0ZlbkZIRkpGTEZORlBGaXFGW3JGaXNGXHFGZXBGQS1GIzYmRmZxRmR1LUY+Ni1RKCZtaW51cztGJ0ZBRkNGZW5GSEZKRkxGTkZQRmlxRltyLUkmbWZyYWNHRiQ2KEZkdS1GIzYjRmlzLyUubGluZXRoaWNrbmVzc0dGZnUvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaHYvJSliZXZlbGxlZEdGRUZqcEY9RmVwRlxyRmRvRl9yRmJyRkFGQUZBRmVyRlhGaHJGKy1GNjYkLUYjNi5GOkY9RlhGZ25GPUZqbkZeb0Zkb0Y9RmlzLUY+Ni1RIjxGJ0ZBRkNGZW5GSEZKRkxGTkZQRmFvRmNvRmRvRkFGaG8tRjY2JC1GIzYkRmN0LUY2NiQtRiM2JEZbcC1GNjYkLUYjNixGYnBGXHFGXnVGPUZlcEZcckZkb0ZfckZmcUZfdkZBRkFGQUZlckZYRlg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkqZmFjdG9yaWFsRyUqcHJvdGVjdGVkRzYjSSNufGlyRzYi LC4qJiwmSSNufGlyRzYiISIiRiciIiJGKC1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YmNiNJJHhpfGlyR0YmRihGKC1GKjYjLUkmR0FNTUFHRis2I0YlRigtRipGNEYoLUYqNiMtRjM2IyokRi9GJ0YnRilGKC1GKjYjLUYzNiMsJkY6RihGJUYnRig= LUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiwpLCQqJEkkeGl8aXJHRichIiJGL0kjbnxpckdGJyIiIi1JJkdBTU1BR0YkNiNGLEYxRi5GLy1GMzYjLCZGMUYxRjBGMUYxLUYzNiMsKEYtRi9GMEYxRjFGMUYvRi8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYsLUYsNiVRJkdBTU1BRicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUY2NiQtRiM2Iy1GLDYlUSJ4RidGL0YyRj8tSSNtb0dGJDYtUSIsRidGPy8lJmZlbmNlR0Y+LyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRj4vJSpzeW1tZXRyaWNHRj4vJShsYXJnZW9wR0Y+LyUubW92YWJsZWxpbWl0c0dGPi8lJ2FjY2VudEdGPi8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUZJNi1RIn5GJ0Y/RkwvRk9GPkZQRlJGVEZWRlhGWi9GaG5GZm5GRS1GSTYtUSI9RidGP0ZMRl1vRlBGUkZURlZGWC9GZW5RLDAuMjc3Nzc3OGVtRicvRmhuRmNvLUZJNi1RKiZ1bWludXMwO0YnRj9GTEZdb0ZQRlJGVEZWRlgvRmVuUSwwLjIyMjIyMjJlbUYnL0ZobkZpby1JI21uR0YkNiRRIjJGJ0Y/LUZJNi1RIy4uRidGP0ZMRl1vRlBGUkZURlZGWEZob0Zeb0ZbcEY/ LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdkcTckJCErY2BGKCo+ISIqJCIxZnolPmlUKFI9ISM4NyQkISs3MmIlKj4hIiokIjFvIlEpKVJpQEEqISM5NyQkIStvZyM9Kj4hIiokIjI6I0hHbG4iUjsnISM6NyQkIStCOTUqKT4hIiokIjFWOydRZkJcaiUhIzk3JCQhK01AbCQpPiEiKiQiMicpZTAnKUgkPjFKISM6NyQkIStZRz95PiEiKiQiMUE9KltoJDRVQiEjOTckJCErcFVJbj4hIiokIjJBYz55Ok0meTohIzo3JCQhKyNwMGsmPiEiKiQiMkslcGlJdUkoPiIhIzo3JCQhK1EmM1kkPiEiKiQiMVRwVjpESXMiKSEjOjckJCErJFE2RyI+ISIqJCIwcklbJiozU0cnISM5NyQkISszLSlbKD0hIiokIjEyRDlVIUclKWUlISM6NyQkIStNIVxwJD0hIiokIjFWJFIsaCJIMFAhIzo3JCQhKykpUWpePCEiKiQiMUtfKzBWJUh4IyEjOjckJCErPUt2bDshIiokIjEqRyY+IWYmeTNDISM6NyQkIStDMkchZSIhIiokIjJGXWEub05ISSMhIzs3JCQhKyJ5TzVdIiEiKiQiMCopZkRZaDpPIyEjOTckJCErb1UpKj05ISIqJCIyJWVzJVElZigzZSMhIzs3JCQhK1RhN004ISIqJCIxLjQhXEk5NC8kISM6NyQkIStlKFEmXDchIiokIjI7aVQ0JFwxR1IhIzs3JCQhK2Q0YGk2ISIqJCIyJj09Ulx4QV9mISM7NyQkISspcDdVNyIhIiokIjF5Q0YjSCFHKXooISM6NyQkIStRVyplMyIhIiokIjInUWUwTCMpeUw2ISM6NyQkISsnekRWMSIhIiokIjJuRjo/eT43XyIhIzo3JCQhK2FydlU1ISIqJCIxLmpqZXRZLUIhIzk3JCQhKyUqXE9QNSEiKiQiMmE5IUdQZkJSRSEjOjckJCErTEcoPi4iISIqJCIyUG9mQDpXKSozJCEjOjckJCErczFlRTUhIiokIjFcMmYqZXROcyQhIzk3JCQhKzcmKT1ANSEiKiQiMXMjZVdSSS1vJSEjOTckJCErX2p6OjUhIiokIjJiW3ZFSzowSCchIzo3JCQhKyI+Ly8sIiEiKiQiMXVZXVNscHEmKiEjOTckJCEqNjN4KyIhIikkIjAzQlxkOktIIiEjNzckJCEqLjddKyIhIikkIjE6SWNWQi8iKj4hIzg3JCQhKiZmSi01ISIpJCIxSFZyUHRvOFYhIzg3JCQhKSgpPicqKiohIikkITJkKFxMKkgtNmojISM4NyQkISsmPkYicCoqISM1JCEyLlt0TjpvTEMkISM5NyQkISpwYj8lKiohIiokITJNbCFbOls1STwhIzk3JCQhMSoqKioqKnpUKVwiKiohIzskITJ0RF9HIioqZiE9IiEjOTckJCErdkUieikpKiEjNSQhMSllUzMkR1tsKikhIzk3JCQhKm1wUCQpKiEiKiQhMFVbVCYqKVFnZyEjODckJCEqbEUneigqISIqJCExMmVfQCdwSmUlISM5NyQkISprJFtEKCohIiokITFIeChHVWwqKW8kISM5NyQkIStEMU1yJyohIzUkITJEZmk3RFUnKjMkISM6NyQkISpoKD48JyohIiokITF5I1JiQ3orbSMhIzk3JCQhKVkwaiYqISIpJCExPkQiKm88PFBCISM5NyQkISpiI1tZJCohIiokITI7QTlbMVc+ZSIhIzo3JCQhKTAiKkgiKiEiKSQhMiVvSGpXSk4vNyEjOjckJCEpZlw3KCkhIikkITFNeil6JD5EJFEpISM6NyQkISk4MyZIKSEiKSQhMHJKMyMqZjpiJyEjOTckJCEqVHdwYCghIiokITFVJkh2aCZ6JylbISM6NyQkISpQO2JqJyEiKiQhMmNFanhCcCMpKlIhIzs3JCQhKlpoPShlISIqJCEwdUM9VXp4bCQhIzk3JCQhKkdcTilcISIqJCEyQmA1R09qXmEkISM7NyQkISpaVXM+JSEiKiQhMXplIjNvSixtJCEjOjckJCEqR1JYTCQhIiokITExXTZrLmBoUyEjOjckJCEqJD0vOEQhIiokITEjKW8wOilcSilbISM6NyQkISpVJiplbCIhIiokITFHdVRmKFstIm8hIzo3JCQhKlZKQkUiISIqJCEvTiFlO1ExaykhIzg3JCQhKVduKG8pISIqJCEwJVxmQmM3PTchIzg3JCQhKnY5XmMnISM1JCEyaykqZXZKUXllIiEjOjckJCEpXmJVVyEiKiQhMCN6ayswRThCISM4NyQkISt2X0YiUSQhIzYkITE2MzBadmo9SSEjOTckJCEqWCYqKj5CISM1JCEyOS9uPmI+L1AlISM6NyQkIStRYk4qeSIhIzYkITEnPiZcUF83W2MhIzk3JCQhK0RjcmU3ISM2JCExJDNFZUooZS4hKSEjOTckJCEqcGNSJCoqISM2JCEyI3A4WV8mPkQsIiEjOTckJCEyMCsrXTdkMkcoISM+JCEyMyZmbiM9RyR6OCEjOTckJCEraXZiRlkhIzckITJPUVR5SCZ5bUAhIzk3JCQhKGVWKD4hIiokITF1KT5UR0gyMiYhIzg3JCQiMSwrK2dscTp5ISM+JCIxViNcJjQlKSopeTchIzc3JCQiKzckKlxQTiEjNyQiMTlhYCJSPTYjRyEjODckJCIyJioqKioqKnB6VSRIJyEjPiQiMk4oeWUpKSlbS2UiISM5NyQkIitEbU5cISohIzckIjJCWW1jYW4kKjQiISM5NyQkIislUkBoWCIhIzYkIjBHWD8nKmU3Im8hIzg3JCQiK0RySTI/ISM2JCIxJDMoSHRtLUVcISM5NyQkIitjR1xlRCEjNiQiMSJ6YDI/LUwmUSEjOTckJCIrKWV5JzRKISM2JCIyPFl4XWhONTskISM6NyQkIis+ViczbSQhIzYkIjIlM0RoQndQeEUhIzo3JCQiKjBdP0AlISM1JCIyW3dLcURKL0sjISM6NyQkIit2SHo7ayEjNiQiMipcYGwsbW8xOiEjOjckJCIpZmBAJykhIiokIjJKVHg/OXYrNiIhIzo3JCQiKmorZ0MiISIqJCIxJ0dqOS8qSGZ2ISM6NyQkIipuWilIOyEiKiQiMVswJD1ZeCEqcCYhIzo3JCQiKkt5KmVDISIqJCIxKGYkemk+ZCpvJCEjOjckJCIpOWI6TCEiKSQiMSMqcDF1SyVScCMhIzo3JCQiKjBUTjolISIqJCIwW2xmbzFXOCMhIzk3JCQiKjdSVidcISIqJCIxUVNcW1cnXHkiISM6NyQkIio6I2ZrZSEiKiQiMlV0Jj5NIyk0QDohIzs3JCQiKmA0Tm4nISIqJCIxOWdJeXoqR04iISM6NyQkIik6P1B2ISIpJCIyJHlZVlt6XD83ISM7NyQkIip6TSk+JCkhIiokIjJmc2ZYRlosOCIhIzs3JCQiKShmYTwqISIpJCIyRnA7RT53WzAiISM7NyQkIioxTzApKiohIiokIjJXTyxHQ0Y2KyIhIzs3JCQiKyNHMkEzIiEiKiQiMVoiUT0/K3hlKiEjOzckJCIrJClHW2s2ISIqJCIxZTZFKm9gUkcqISM7NyQkIis3eWhdNyEiKiQiMT4reEBLdmkhKiEjOzckJCIrKClmZEw4ISIqJCIwZCw3SjQmSCopISM6NyQkIistRlQ9OSEiKiQiMSoqenM2cTlrKSkhIzs3JCQiK0VwYS06ISIqJCIwTW0seT5KJykpISM6NyQkIiphZCl6OiEiKSQiMUFWSUl2MDkqKSEjOzckJCIrR1VZbzshIiokIjE4KFFIJ1tUSSEqISM7NyQkIisyXnJaPCEiKiQiMSJHQnZDW2E9KiEjOzckJCIrc0lASz0hIiokIjF6Wz1qVkkuJSohIzs3JCQiKzIlKTM4PiEiKiQiMWNkJipccjtqJyohIzs3JCQiIz8hIiIkIiM1ISIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhIz8hIiIkIiM/ISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJ4NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIkUyIhIiItJSlCT1VORFNfWUc2IyQiI10hIiItJS1CT1VORFNfV0lEVEhHNiMkIiVxUCEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiUhKVEhIiItJSlDSElMRFJFTkc2Ig== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY7LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJW51bTNGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSdleHBhbmRGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1JJW1zdXBHRiQ2JS1GZm82JC1GIzYpLUYsNiVRImFGJ0YvRjItRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZocC1GLDYlUSJiRidGL0YyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GLDYlUSJ4RidGL0YyLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZ3BGaXAtRiw2JVElbWVhbkYnRi9GMkY5LUYjNiMtSSNtbkdGJDYkUSIzRidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGOS1GNjYtUSI7RidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuRk1GT0Ziby1GZm82JC1GIzYkLUYsNiVRJXN1YnNGJ0YvRjItRmZvNiQtRiM2Ki1GLDYlUSJtRidGL0YyLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRI211RicvRjBGPUY5RmRwLUkmbWZyYWNHRiQ2KC1GLDYlUSgmc2lnbWE7RidGanNGOS1GIzYlLUZccjYkUSIxRidGOUZjcS1GLDYlUSN4aUYnRmpzRjkvJS5saW5ldGhpY2tuZXNzR0ZldC8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZddS8lKWJldmVsbGVkR0Y9LUY2Ni1RIixGJ0Y5RjtGZXJGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRKGNvbGxlY3RGJ0YvRjItRmZvNiQtRiM2JkZqci1GZm82JC1GIzYsLUYsNiVRI1gyRidGL0YyRmRzLUZbcDYlRmBxLUYjNiMtRlxyNiRRIjJGJ0Y5Rl9yRmJ1LUYsNiVRI1gzRidGL0YyRmRzLUZbcDYlRmBxRmlxRl9yRmJ1RmJvLUZmbzYkLUYjNiRGanItRmZvNiQtRiM2MEZfd0Zkc0Zcd0ZidUZldkZkc0ZidkZidUZgcUZkcy1GXHQ2KC1GZm82JC1GIzYlRmFzRmNxRmdzRjktRiM2Iy1GLDYlUSZzaWdtYUYnRmpzRjlGaXRGW3VGXnVGYHVGYnVGZ3UtRmZvNiQtRiM2JkZiby1GZm82JC1GIzYlRmduRmpyLUZmbzYkLUYjNi9GZnFGZHNGYXNGYnVGYXBGZHNGZ3NGYnVGanBGZHNGYXhGYnVGXG9GOUY5RmJ1RmBxRjlGOUY5RjlGYnVGYHFGOUY5RjlGYnJGT0Znbi1GLDYlUSVudW0yRidGL0YyRl9vRmJvLUZmbzYkLUYjNiMtRltwNiVGXXBGZ3ZGX3JGOUZickZPRmJvLUZmbzYkLUYjNiRGanItRmZvNiQtRiM2KkZhc0Zkc0Znc0ZkcC1GXHQ2KC1GLDYlUSgmc2lnbWE7RidGanNGOUZhdEZpdEZbdUZedUZgdUZidUZndS1GZm82JC1GIzYmRmpyLUZmbzYkLUYjNixGYnZGZHNGZXZGYnVGXHdGZHNGX3dGYnVGYm8tRmZvNiQtRiM2JEZqci1GZm82JC1GIzYwRl93RmRzRlx3RmJ1RmV2RmRzRmJ2RmJ1RmBxRmRzRml3RmJ1Rmd1LUZmbzYkLUYjNiZGYm8tRmZvNiQtRiM2JUZnbkZqci1GZm82JC1GIzYvRmZxRmRzRmFzRmJ1RmFwRmRzRmdzRmJ1RmpwRmRzRmF4RmJ1RmB5RjlGOUZidUZgcUY5RjlGOUY5RmJ1RmBxRjlGOUY5RmJyRmdu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LDYqJEkiYUc2IiIiJCIiIiooRiQiIiNJImJHRiVGJ0kieEdGJUYnRiYqJkYkRilJJW1lYW5HRiVGJyEiJCooRiRGJ0YqRilGK0YpRiYqKkYkRidGKkYnRitGJ0YtRichIicqJkYkRidGLUYpRiYqJkYqRiZGK0YmRicqKEYqRilGK0YpRi1GJ0YuKihGKkYnRitGJ0YtRilGJiokRi1GJiEiIg== LCgqJkkmc2lnbWFHNiIiIiRJInhHRiVGJiIiIiooRiciIiNGJEYmLCZGKEYoSSN4aUdGJSEiIkYtISIkKiZGJEYmRitGLkYq LC4qJEkiYUc2IiIiIyIiIiooRiRGJ0kiYkdGJUYnSSJ4R0YlRidGJiomRiRGJ0klbWVhbkdGJUYnISIjKiZGKUYmRipGJkYnKihGKUYnRipGJ0YsRidGLSokRixGJkYn LCYqJkkmc2lnbWFHNiIiIiNJInhHRiVGJiIiIiomRiRGJiwmRihGKEkjeGlHRiUhIiIhIiNGLA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEnZmFjdG9yRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiUtSSVtc3VwR0YkNiUtRiw2JVEibUYnRi9GMi1GIzYjLUkjbW5HRiQ2JFEiM0YnL0YzUSdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictSSNtb0dGJDYtUSgmbWludXM7RidGRi8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGUS8lKXN0cmV0Y2h5R0ZRLyUqc3ltbWV0cmljR0ZRLyUobGFyZ2VvcEdGUS8lLm1vdmFibGVsaW1pdHNHRlEvJSdhY2NlbnRHRlEvJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0Zqbi1GOzYlLUYsNiVRJSZtdTtGJy9GMEZRRkZGQEZIRkY= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYsJkkibUc2IiIiIkkjbXVHRiUhIiJGJiwoKiRGJCIiI0YmKiZGJEYmRidGJkYmKiRGJ0YrRiZGJg== JSFH openturns-1.9/validation/src/ValidGeometric.mws000066400000000000000000000056751307543307100220070ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 782 "restart:\nwith(Stat istics):\ngeometric_:=RandomVariable(Geometric(p)):\npdf:=subs(u=n-1,P robabilityFunction(geometric_,u));\ncdf:=simplify(subs(u=n-1,CDF(geome tric_,u)));\nmu_:=factor(1+Mean(geometric_));\nvar_:=Variance(geometri c_);\nskew_:=simplify(convert(Skewness(geometric_),GAMMA),symbolic);\n kurt_:=simplify(convert(Kurtosis(geometric_),GAMMA),symbolic);\nqdf:=s implify(1+Quantile(geometric_,q));\nqdf2:=solve(cdf=q,K);\npdfgr:=fact or(diff(pdf, p));\ncdfgr:=diff(cdf, p);\nvalnum:=p=0.7:\nevalf(subs(va lnum,n=3,pdf));\nevalf(subs(valnum,n=3,cdf));\nevalf(subs(valnum,n=3,m ap(_x->_x,pdfgr)));\nevalf(subs(valnum,n=3,cdfgr));\nevalf(subs(valnum ,q=0.95,qdf));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,sqrt(var_) ));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_));\nevalf(sub s(valnum,var_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PIECEWIS EG6$7$\"\"!2%\"nG\"\"\"7$*&%\"pGF,),&F,F,F/!\"\",&F+F,F,F2F,%*otherwis eG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6$7$\"\"!2% \"nG\"\"\"7$,&F,F,),&F,F,%\"pG!\"\"-%&floorG6#F+F21F,F+" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$mu_G*&\"\"\"F&%\"pG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&,&\"\"\"F'%\"pG!\"\"F'F(!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G,$*&,&\"\"#!\"\"%\"pG\"\"\"F+,&F+F+F*F)#F )F(F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$*&,(*$)%\"pG\"\"# \"\"\"F,*&\"\"*F,F*F,!\"\"F.F,F,,&F,F/F*F,F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%%ceilG6#*&-%#lnG6#,&\"\"\"F-%\"qG!\"\"F--F*6#, &F-F-%\"pGF/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG-%*PIECEWISEG6$7$\"\"!2%\"nG \"\"\"7$*(),&F,F,%\"pG!\"\",&F+F,F,F2F,,&F,F2*&F1F,F+F,F,F,,&F,F2F1F,F 2%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG-%*PIECEWISE G6$7$\"\"!2%\"nG\"\"\"7$*(),&F,F,%\"pG!\"\"-%&floorG6#F+F,F3F,F0F21F,F +" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#j!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$t*!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+++++L! #5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++F!#5" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"\"$\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+H9 dG9!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+lzgCy!#5" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"+:WYtB!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$\"+LLLj5!\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+!)*[C7'!#5" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidGeometric.txt000066400000000000000000000055021307543307100220050ustar00rootroot00000000000000> restart: > with(Statistics): > geometric_:=RandomVariable(Geometric(p)): > pdf:=subs(u=n-1,ProbabilityFunction(geometric_,u)); > cdf:=simplify(subs(u=n-1,CDF(geometric_,u))); > mu_:=factor(1+Mean(geometric_)); > var_:=Variance(geometric_); > skew_:=simplify(convert(Skewness(geometric_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(geometric_),GAMMA),symbolic); > qdf:=simplify(1+Quantile(geometric_,q)); > qdf2:=solve(cdf=q,K); > pdfgr:=factor(diff(pdf, p)); > cdfgr:=diff(cdf, p); > valnum:=p=0.7: > evalf(subs(valnum,n=3,pdf)); > evalf(subs(valnum,n=3,cdf)); > evalf(subs(valnum,n=3,map(_x->_x,pdfgr))); > evalf(subs(valnum,n=3,cdfgr)); > evalf(subs(valnum,q=0.95,qdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); { 0 n < 1 pdf := { { (n - 1) { p (1 - p) otherwise { 0 n < 1 cdf := { { floor(n) { 1 - (1 - p) 1 <= n mu_ := 1/p 1 - p var_ := ----- 2 p -2 + p skew_ := - ---------- 1/2 (1 - p) 2 p - 9 p + 9 kurt_ := - ------------ -1 + p ln(1 - q) qdf := ceil(---------) ln(1 - p) qdf2 := { 0 n < 1 { pdfgr := { (n - 1) { (1 - p) (-1 + p n) { ------------------------- otherwise { -1 + p { 0 n < 1 { cdfgr := { floor(n) { (1 - p) floor(n) { ------------------------ 1 <= n { 1 - p 0.063 0.973 -0.3300000000 0.2700000000 3. 1.428571429 0.7824607965 2.373464415 10.63333333 0.6122448980 > openturns-1.9/validation/src/ValidGumbel.mws000066400000000000000000000212641307543307100212740ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1113 "restart:\nwith(Sta tistics):\nassume(alpha>0);\ngumbel_:=RandomVariable(Gumbel(beta,1/alp ha)):\npdf:=PDF(gumbel_,x);\nddf:=factor(diff(pdf,x));\ncdf:=CDF(gumbe l_,x);\nassume(u,real):cf:=CharacteristicFunction(gumbel_,u);\nmu_:=Me an(gumbel_);\nvar_:=Variance(gumbel_);\nskew_:=simplify(convert(Skewne ss(gumbel_),GAMMA),symbolic);\nkurt_:=simplify(convert(Kurtosis(gumbel _),GAMMA),symbolic);\nassume(v>0):\nsol:=allvalues(solve(\{mu_=m,var_= v\},\{alpha,beta\})):\nmap(_x->collect(simplify(_x,symbolic),m),subs(s ol[1],v=sigma^2,[alpha,beta]));\nqdf:=Quantile(gumbel_,p);\nqdf2:=solv e(cdf=p,x);\npdfgr:=map(factor,[diff(pdf,alpha)/pdf,diff(pdf,beta)/pdf ]);\ncdfgr:=map(factor,[diff(cdf,alpha)/cdf,diff(cdf,beta)/cdf]);\nval num:=alpha=2,beta=-0.5:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valn um,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,map (_x->_x*pdf,pdfgr)));\nevalf(subs(valnum,x=1,map(_x->_x*cdf,cdfgr))); \nevalf(solve(subs(valnum,cdf)=0.95,x));\nevalf(subs(valnum,mu_));\nev alf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,skew_));\nevalf(subs( valnum,kurt_));\nevalf(subs(valnum,var_));\nevalf(subs(valnum,[mu_,sqr t(var_)]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*(%'alpha|irG\" \"\"-%$expG6#,$*&,&%\"xGF'%%betaG!\"\"F'F&F'F0F'-F)6#,$F(F0F'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG**-%$expG6#,$*&,&%\"xG\"\"\"%%b etaG!\"\"F-%'alpha|irGF-F/F-)F0\"\"#F--F'6#,$F&F/F-,&F-F/F&F-F-" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%$expG6#,$-F&6#,$*&,&%\"xG\"\" \"%%betaG!\"\"F/%'alpha|irGF/F1F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %#cfG*&-%$expG6#*(%%betaG\"\"\"%#u|irGF+^#F+F+F+-%&GAMMAG6#,&F+F+*(^#! \"\"F+%'alpha|irGF4F,F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G ,&%%betaG\"\"\"*&%&gammaGF'%'alpha|irG!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"'!\"\"%'alpha|irG!\"#%#PiG\"\"#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G,$,$-%$intG6$,$*(,(*&%#_tG \"\"\"%'alpha|irGF/!\"\"*&F0F/%%betaGF/F/%&gammaGF/\"\"$F0!\"#-%$expG6 #,(F-F1F2F/-F86#,$*&,&F.F/F3F1F/F0F/F1F1F/F1/F.;,$%)infinityGF1FC**\" \"'F/FE#F/\"\"#F0F5%#PiG!\"$F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&k urt_G,$,$-%$intG6$*(,(*&%$_t0G\"\"\"%'alpha|irGF.!\"\"*&F/F.%%betaGF.F .%&gammaGF.\"\"%F/!\"$-%$expG6#,(F,F0F1F.-F76#,$*&,&F-F.F2F0F.F/F.F0F0 F./F-;,$%)infinityGF0FB*(\"#OF.F/F4%#PiG!\"%F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$,$**\"\"'!\"\"F&#\"\"\"\"\"#%#PiGF)%&sigmaGF'F),&%\"m GF)**%&gammaGF)F,F)F&F(F+F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qd fG,&%%betaG\"\"\"*&%'alpha|irG!\"\"-%#lnG6#,$-F,6#%\"pGF*F'F*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,$*&,&*&%'alpha|irG\"\"\"%%bet aGF*!\"\"-%#lnG6#,$-F.6#%\"pGF,F*F*F)F,F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7$*&,,\"\"\"F(*&%'alpha|irGF(%\"xGF(!\"\"*&F*F (%%betaGF(F(*(F*F(-%$expG6#,$*&,&F+F(F.F,F(F*F(F,F(F+F(F(*(F*F(F0F(F.F (F,F(F*F,,$*&F*F(,&F(F,F0F(F(F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%& cdfgrG7$*&,&%\"xG\"\"\"%%betaG!\"\"F)-%$expG6#,$*&F'F)%'alpha|irGF)F+F ),$*&F1F)F,F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+AeU+=!#5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+O>!QZ*!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+H*>V^*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+* p#Hm()!#6$\"+AeU+=!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+_9N0r!# 6$!+O>!QZ*F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Xi(4&)*!#5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$!+w;#R6#!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+_\"\\FT'!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ *4Z&R6!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+(******R&!\"*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+p^L7T!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+w;#R6#!#5$\"+_\"\\FT'F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 78 "map(_x->collect(simplify(_x,symbolic),m),subs(sol[ 1],v=sigma^2,[alpha,beta]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$,$** \"\"'!\"\"F&#\"\"\"\"\"#%#PiGF)%&sigmaGF'F),&%\"mGF)**%&gammaGF)F,F)F& F(F+F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "evalf[25](-12*s qrt(6)*Zeta(3)/Pi^3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!:$z#\\d'[YS *4Z&R6!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "3+12/5;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6##\"#F\"\"&" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 19 "evalf[25](Zeta(3));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":Q(*R&G%ffJ!p0-7!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "_envAllValues:=true:assume(x0):R:=expand(solve(pdf =epsilon,x));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"RG,&%&beta|irG\" \"\"*&%'alpha|irG!\"\"-%#lnG6#,$-%)LambertWG6#,$*&F)F*%)epsilon|irGF'F *F*F'F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "R1 := beta-1/alp ha*ln(-LambertW(-1,-1/alpha*epsilon));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#R1G,&%&beta|irG\"\"\"*&%'alpha|irG!\"\"-%#lnG6#,$-%)LambertWG 6$F*,$*&F)F*%)epsilon|irGF'F*F*F'F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "plot(subs(alpha=1,beta=-1,\{R,R1\}),epsilon=0..0.001) ;\npdf;" }}{PARA 13 "" 1 "" {GLPLOT2D 745 745 745 {PLOTDATA 2 "6&-%'CU RVESG6$7^o7$$\"+v1h6o!#;$\"+Om%*>8!\")7$$\"+N@Ki8!#:$\"+]=j]7F-7$$\"+- K[V?F1$\"+r_357F-7$$\"+qUkCFF1$\"+'*pJ\"=\"F-7$$\"+Q`!eS$F1$\"+sD+f6F- 7$$\"+0k'p3%F1$\"+\\.xS6F-7$$\"+su7oZF1$\"+8_ND6F-7$$\"+S&)G\\aF1$\"+0 ?+76F-7$$F)F1$\"+9vo*3\"F-7$$\"+5G$R<)F1$\"+A_Xr5F-7$$\"+X\\DO&*F1$\"+ =+/c5F-7$$\"+3x&)*3\"!#9$\"+UnoU5F-7$$F0F]o$\"+:@P?5F-7$$\"+ilyM;F]o$ \"+'oR@+\"F-7$$\"+*)4D2>F]o$\"*YVs')*F-7$$\"+;arz@F]o$\"*M4Pt*F-7$$\"+ !y%*z7$F]o$\"*.-DP*F-7$$\"+XTFwSF]o$\"*L,x5*F-7$$\"+qMrU^F]o$\"+$=$Hv) )!\"*7$$\"+\"z_\"4iF]o$\"+4*Qoo)Fbq7$$\"+l6m#G(F]o$\"+$Hct_)Fbq7$$\"+S &phN)F]o$\"+j<%)*Q)Fbq7$$\"+*=)H\\5!#8$\"+#)Q6i\")Fbq7$$\"+[!3uC\"Fer$ \"+zx9*)zFbq7$$\"+J$RDX\"Fer$\"+4=)o$yFbq7$$\"+)R'ok;Fer$\"+?r`+xFbq7$ $\"+1J:w=Fer$\"+h#H4e(Fbq7$$\"+3En$4#Fer$\"+37@ruFbq7$$\"+/RE&G#Fer$\" +#GIOQ(Fbq7$$\"+D.&4]#Fer$\"+D%>MH(Fbq7$$\"+vB_Y2aFer$\"+(\\>?_' Fbq7$$\"+yXu9cFer$\"+%[#Q%['Fbq7$$\"+\\y))GeFer$\"+C4$pW'Fbq7$$\"+i_QQ gFer$\"+L&*f6kFbq7$$\"+!y%3TiFer$\"+j=cyjFbq7$$\"+O![hY'Fer$\"+lF6VjFb q7$$\"+#Qx$omFer$\"+IlH7jFbq7$$\"+u.I%)oFer$\"+dzS!G'Fbq7$$\"+(pe*zqFe r$\"++QO_iFbq7$$\"+C\\'QH(Fer$\"+zodAiFbq7$$\"+8S8&\\(Fer$\"+%GO`>'Fbq 7$$\"+0#=bq(Fer$\"+/DjnhFbq7$$\"+2s?6zFer$\"+P#o79'Fbq7$$\"+IXaE\")Fer $\"+]7R9hFbq7$$\"+l*RRL)Fer$\"+`*p\"*3'Fbq7$$\"+`<.Y&)Fer$\"+&)z,kgFbq 7$$\"+8tOc()Fer$\"+RGoRgFbq7$$\"+\\Qk\\*)Fer$\"+n3$y,'Fbq7$$\"+p0;r\"* Fer$\"+u&eL*fFbq7$$\"+lxGp$*Fer$\"+$[l>(fFbq7$$\"+!oK0e*Fer$\"+1#['\\f Fbq7$$\"+<5s#y*Fer$\"+tMuGfFbq7$$\"\"\"!\"$$\"+xUv1fFbq-%'COLOURG6&%$R GBG$\"*++++\"F-$\"\"!Fg`lFf`l-F$6$7fn7$F($!+bODNQFbq7$F/$!+72+\"z$Fbq7 $F5$!+>M6kPFbq7$F:$!+UwbWPFbq7$FD$!+5AG;PFbq7$FN$!+l$)o&p$Fbq7$FW$!+a \"oem$Fbq7$F[o$!+.b6WOFbq7$Feo$!+\"3lDh$Fbq7$F_p$!+h*4&*e$Fbq7$Fdp$!+? [sfNFbq7$Fip$!+@AEPNFbq7$Fdq$!+t%Q$Fbq7$Fbt$!+WU!eP$Fbq7$Fgt$!+5e^mLFbq7$F\\u$!+Ow(yN$Fb q7$Fau$!+/86]LFbq7$Ffu$!+eH$Fbq7$Fhx$!+E&QqG$Fbq7$F]y$!+1R% HG$Fbq7$Fby$!+3=myKFbq7$Fgy$!+D0QuKFbq7$F\\z$!+\")GKqKFbq7$Faz$!+c?^mK Fbq7$Ffz$!+m]SiKFbq7$F[[l$!+O&>)eKFbq7$F`[l$!+RT4bKFbq7$Fe[l$!+v]!=D$F bq7$Fj[l$!+'R)H[KFbq7$F_\\l$!+s%z]C$Fbq7$Fd\\l$!+`RzTKFbq7$Fi\\l$!+-hl QKFbq7$F^]l$!+6fWNKFbq7$Fc]l$!+3IUKKFbq7$Fh]l$!+]#)RHKFbq7$F]^l$!+%*>Y EKFbq7$Fb^l$!+\\r\"QA$Fbq7$Fg^l$!+ue%3A$Fbq7$F\\_l$!+v.C=KFbq7$Fa_l$!+ KU^:KFbq7$Ff_l$!++J&H@$Fbq7$F[`l$!+\">^-@$Fbq-Fa`l6&Fc`l$\")Vyg>F-$\") d@R!)F-F[\\m-%+AXESLABELSG6$%)epsilon|irGQ!6\"-%%VIEWG6$;Ff`lF[`l%(DEF AULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve \+ 1" "Curve 2" }}}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(%'alpha|irG\"\"\"-%$ expG6#,$*&,&%#x|irGF%%&beta|irG!\"\"F%F$F%F.F%-F'6#,$F&F.F%" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "6 0 0" 33 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidGumbel.txt000066400000000000000000000112271307543307100213030ustar00rootroot00000000000000> restart: > with(Statistics): > assume(alpha>0); > gumbel_:=RandomVariable(Gumbel(beta,1/alpha)): > pdf:=PDF(gumbel_,x); > ddf:=factor(diff(pdf,x)); > cdf:=CDF(gumbel_,x); > assume(u,real):cf:=CharacteristicFunction(gumbel_,u); > mu_:=Mean(gumbel_); > var_:=Variance(gumbel_); > skew_:=simplify(convert(Skewness(gumbel_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(gumbel_),GAMMA),symbolic); > assume(v>0): > sol:=allvalues(solve({mu_=m,var_=v},{alpha,beta})): > map(_x->collect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2,[alpha, > beta])); > qdf:=Quantile(gumbel_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=map(factor,[diff(pdf,alpha)/pdf,diff(pdf,beta)/pdf]); > cdfgr:=map(factor,[diff(cdf,alpha)/cdf,diff(cdf,beta)/cdf]); > valnum:=alpha=2,beta=-0.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,map(_x->_x*cdf,cdfgr))); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); pdf := alpha~ exp(-(x - beta) alpha~) exp(-exp(-(x - beta) alpha~)) 2 ddf := exp(-(x - beta) alpha~) alpha~ exp(-exp(-(x - beta) alpha~)) (-1 + exp(-(x - beta) alpha~)) cdf := exp(-exp(-(x - beta) alpha~)) u~ I cf := exp(beta u~ I) GAMMA(1 - ------) alpha~ gamma mu_ := beta + ------ alpha~ 2 Pi var_ := --------- 2 6 alpha~ infinity 1/2 3 / 6 6 alpha~ | skew_ := -------------- | 3 | Pi / -infinity 3 (_t alpha~ - alpha~ beta - gamma) / exp(-_t alpha~ + alpha~ beta - exp(-(_t - beta) alpha~)) / / 2 alpha~ d_t infinity 4 / 36 alpha~ | kurt_ := ---------- | 4 | Pi / -infinity 4 (-_t0 alpha~ + alpha~ beta + gamma) exp(-_t0 alpha~ + alpha~ beta - exp(-(_t0 - beta) alpha~)) / 3 / alpha~ d_t0 / 1/2 1/2 6 Pi gamma sigma 6 [-------, m - ----------------] 6 sigma Pi ln(-ln(p)) qdf := beta - ---------- alpha~ -alpha~ beta + ln(-ln(p)) qdf2 := - ------------------------- alpha~ pdfgr := [(1 - alpha~ x + alpha~ beta + alpha~ exp(-(x - beta) alpha~) x - alpha~ exp(-(x - beta) alpha~) beta)/alpha~, -alpha~ (-1 + exp(-(x - beta) alpha~))] cdfgr := [(x - beta) exp(-(x - beta) alpha~), -alpha~ exp(-(x - beta) alpha~)] -0.1800425822 0.09473801936 0.9514319929 [-0.08766292699, 0.1800425822] [0.07105351452, -0.09473801936] 0.9850976245 -0.2113921676 0.6412749152 1.139547099 5.399999997 0.4112335169 [-0.2113921676, 0.6412749152] > map(_x->collect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2,[alpha, > beta])); 1/2 1/2 6 Pi gamma sigma 6 [-------, m - ----------------] 6 sigma Pi > evalf[25](-12*sqrt(6)*Zeta(3)/Pi^3); -1.139547099404648657492793 > 3+12/5; 27/5 > evalf[25](Zeta(3)); 1.202056903159594285399738 > openturns-1.9/validation/src/ValidGumbelCopula.mws000066400000000000000000000417051307543307100224420ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annota tion Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "H elp Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized" -1 22 "Time s" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Input Pl aceholder" -1 201 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 } {CSTYLE "Code" -1 202 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "2D Inert Output" -1 203 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 205 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 207 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 64 "CDF_gumbel:=exp(-((-log(u))^theta + (-log(v))^theta)^ (1/theta));" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I$expG6$%*protectedGI(_s yslibG6\"6#,$),&),$-I#lnGF$6#I\"uGF'!\"\"I&thetaGF'\"\"\"),$-F/6#I\"vG F'F2F3F4*$F3F2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "PDF_gum bel:=factor(diff(diff(CDF_gumbel,u),v));\nwith(CodeGeneration):\nC(dif f(" }{MPLTEXT 1 0 27 "PDF_gumbel,u),optimize);\nC(" }{MPLTEXT 1 0 5 "d iff(" }{MPLTEXT 1 0 24 "PDF_gumbel,v),optimize);" }}{PARA 11 "" 1 "" {XPPMATH 20 "*6),&),$-I#lnG6$%*protectedGI(_syslibG6\"6#I#u|irGF,!\"\" I'theta|irGF,\"\"\"),$-F(6#I#v|irGF,F/F0F1*$F0F/F1F2F1F%F1-I$expGF)6#, $F#F/F1,(F/F1F0F1F#F1F1F6F/F4F/F$!\"#F.F/F'F/" }}{PARA 207 "" 1 "" {TEXT 208 0 "" }{HYPERLNK 208 "Warning, the following variable name re placements were made: [\"cg\", \"cg1\", \"cg3\"] = [\"theta~\", \"u~\" , \"v~\"]" 4 "http://www.maplesoft.com/support/help/errors/view.aspx?p ath=Warning,%20the%20following%20variable%20name%20replacements%20were %20made%3A%20%5B%22cg%22,%20%22cg1%22,%20%22cg3%22%5D%20%3D%20%5B%22th eta%7E%22,%20%22u%7E%22,%20%22v%7E%22%5D" "" }{TEXT 208 0 "" }}{PARA 6 "" 1 "" {TEXT 209 14 "t1 = log(cg1);" }{TEXT 209 19 "\nt2 = pow(-t1, \+ cg);" }{TEXT 209 15 "\nt3 = log(cg3);" }{TEXT 209 19 "\nt4 = pow(-t3, \+ cg);" }{TEXT 209 14 "\nt5 = t2 + t4;" }{TEXT 209 26 "\nt7 = pow(t5, 0. 1e1 / cg);" }{TEXT 209 14 "\nt8 = t2 * t2;" }{TEXT 209 23 "\nt10 = pow (cg1, 0.2e1);" }{TEXT 209 19 "\nt11 = 0.1e1 / t10;" }{TEXT 209 15 "\nt 12 = t1 * t1;" }{TEXT 209 19 "\nt13 = 0.1e1 / t12;" }{TEXT 209 17 "\nt 14 = t11 * t13;" }{TEXT 209 15 "\nt15 = t5 * t5;" }{TEXT 209 24 "\nt17 = 0.1e1 / t15 / t5;" }{TEXT 209 16 "\nt20 = exp(-t7);" }{TEXT 209 24 "\nt22 = -0.1e1 + cg + t7;" }{TEXT 209 19 "\nt23 = 0.1e1 / cg3;" } {TEXT 209 18 "\nt25 = 0.1e1 / t3;" }{TEXT 209 23 "\nt26 = t22 * t23 * \+ t25;" }{TEXT 209 15 "\nt29 = t7 * t4;" }{TEXT 209 17 "\nt35 = t23 * t2 5;" }{TEXT 209 19 "\nt36 = 0.1e1 / t15;" }{TEXT 209 15 "\nt40 = t7 * t 7;" }{TEXT 209 16 "\nt41 = t40 * t4;" }{TEXT 209 16 "\nt48 = t8 * t20; " }{TEXT 209 23 "\nt51 = t23 * t17 * t25;" }{TEXT 209 28 "\nt62 = t29 \+ * t2 * t20 * t22;" }{TEXT 209 17 "\nt63 = t36 * t11;" }{TEXT 209 251 " \nt71 = t7 * t8 * t14 * t17 * t4 * t20 * t26 + t29 * t2 * cg * t11 * t 13 * t20 * t22 * t35 * t36 - t41 * t8 * t11 * t13 * t17 * t20 * t26 + \+ t41 * t48 * t14 * t51 - 0.2e1 * t29 * t48 * t22 * t51 * t14 * cg - t62 * t35 * t63 / t1 - t62 * t35 * t63 * t13;" }}{PARA 207 "" 1 "" {TEXT 208 0 "" }{HYPERLNK 208 "Warning, the following variable name replacem ents were made: [\"cg\", \"cg1\", \"cg3\"] = [\"theta~\", \"u~\", \"v~ \"]" 4 "http://www.maplesoft.com/support/help/errors/view.aspx?path=Wa rning,%20the%20following%20variable%20name%20replacements%20were%20mad e%3A%20%5B%22cg%22,%20%22cg1%22,%20%22cg3%22%5D%20%3D%20%5B%22theta%7E %22,%20%22u%7E%22,%20%22v%7E%22%5D" "" }{TEXT 208 0 "" }}{PARA 6 "" 1 "" {TEXT 209 14 "t1 = log(cg1);" }{TEXT 209 19 "\nt2 = pow(-t1, cg);" }{TEXT 209 15 "\nt3 = log(cg3);" }{TEXT 209 19 "\nt4 = pow(-t3, cg);" }{TEXT 209 14 "\nt5 = t2 + t4;" }{TEXT 209 26 "\nt7 = pow(t5, 0.1e1 / \+ cg);" }{TEXT 209 14 "\nt8 = t4 * t4;" }{TEXT 209 14 "\nt9 = t7 * t8;" }{TEXT 209 23 "\nt10 = pow(cg3, 0.2e1);" }{TEXT 209 19 "\nt11 = 0.1e1 \+ / t10;" }{TEXT 209 15 "\nt12 = t3 * t3;" }{TEXT 209 19 "\nt13 = 0.1e1 \+ / t12;" }{TEXT 209 17 "\nt14 = t11 * t13;" }{TEXT 209 15 "\nt15 = t5 * t5;" }{TEXT 209 24 "\nt17 = 0.1e1 / t15 / t5;" }{TEXT 209 17 "\nt18 = t14 * t17;" }{TEXT 209 16 "\nt20 = exp(-t7);" }{TEXT 209 16 "\nt21 = \+ t2 * t20;" }{TEXT 209 24 "\nt22 = -0.1e1 + cg + t7;" }{TEXT 209 19 "\n t23 = 0.1e1 / cg1;" }{TEXT 209 18 "\nt25 = 0.1e1 / t1;" }{TEXT 209 23 "\nt26 = t22 * t23 * t25;" }{TEXT 209 15 "\nt29 = t7 * t4;" }{TEXT 209 17 "\nt33 = t21 * t22;" }{TEXT 209 31 "\nt36 = 0.1e1 / t15 * t23 * t25;" }{TEXT 209 15 "\nt39 = t7 * t7;" }{TEXT 209 16 "\nt40 = t39 * t 8;" }{TEXT 209 17 "\nt52 = t29 * t33;" }{TEXT 209 223 "\nt65 = t9 * t1 8 * t21 * t26 + t29 * cg * t11 * t13 * t33 * t36 - t40 * t11 * t2 * t1 3 * t17 * t20 * t26 + t40 * t21 * t14 * t23 * t17 * t25 - t52 * t11 / \+ t3 * t36 - t52 * t14 * t36 - 0.2e1 * t9 * t33 * t18 * t23 * t25 * cg;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "with(codegen,optimize,co st);" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$I)optimizeG6\"I%costGF$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "optimize(PDF_gumbel);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6+/I#t1G6\"-I#lnG6$%*protectedGI(_syslib GF%6#I\"uGF%/I#t2GF%),$F$!\"\"I&thetaGF%/I#t3GF%-F'6#I\"vGF%/I#t4GF%), $F4F1F2/I#t5GF%,&F.\"\"\"F9F?/I#t7GF%)F=*$F2F1/I#t9GF%-I$expGF(6#,$FAF 1/I$t17GF%*$F=\"\"#/I$t24GF%*6FAF?F9F?F.F?FEF?,(F1F?F2F?FAF?F?F7F1F4F1 FKF1F,F1F$F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "solve(subs( u=t,v=t,CDF_gumbel)=y,t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "*$-I$expG6$ %*protectedGI(_syslibG6\"6#-F$6#*&,&-I#lnGF%6#\"\"#!\"\"*&-F/6#,$-F/6# I\"yGF(F2\"\"\"I&thetaGF(F:F:F:F;F2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "phi:=(-log(t))^theta;" }}{PARA 11 "" 1 "" {XPPMATH 20 "),$-I#lnG6$%*protectedGI(_syslibG6\"6#I\"tGF)!\"\"I&thetaGF)" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "phi := (-ln(t))^theta;" }} {PARA 11 "" 1 "" {XPPMATH 20 "),$-I#lnG6$%*protectedGI(_syslibG6\"6#I \"tGF)!\"\"I&thetaGF)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "fa ctor(simplify(diff(phi,t)));" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(),$- I#lnG6$%*protectedGI(_syslibG6\"6#I\"tGF+!\"\",&I&thetaGF+\"\"\"F.F1F1 F0F1F-F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "factor((diff( phi,t$2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*,),$-I#lnG6$%*protecte dGI(_syslibG6\"6#I\"tGF+!\"\"I&thetaGF+\"\"\"F/F0,(F/F.F&F0F0F0F0F-!\" #F&F2F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "du:=diff(CDF_gum bel,u);\n" }{MPLTEXT 1 0 23 "dv:=diff(CDF_gumbel,v);" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*.),&),$-I#lnG6$%*protectedGI(_syslibG6\"6#I\"uGF-! \"\"I&thetaGF-\"\"\"),$-F)6#I\"vGF-F0F1F2*$F1F0F2F&F2F/F0F(F0F%F0-I$ex pGF*6#,$F$F0F2F0" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*.),&),$-I#lnG6$%* protectedGI(_syslibG6\"6#I\"uGF-!\"\"I&thetaGF-\"\"\"),$-F)6#I\"vGF-F0 F1F2*$F1F0F2F3F2F7F0F5F0F%F0-I$expGF*6#,$F$F0F2F0" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 45 "fu:=factor(du/((-log(u))^theta/(u*log(u)))); \n" }{MPLTEXT 1 0 45 "fv:=factor(dv/((-log(v))^theta/(v*log(v))));\n" }{MPLTEXT 1 0 6 "fu/fv;" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(),&),$-I# lnG6$%*protectedGI(_syslibG6\"6#I\"uGF-!\"\"I&thetaGF-\"\"\"),$-F)6#I \"vGF-F0F1F2*$F1F0F2F%F0-I$expGF*6#,$F$F0F2F0" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(),&),$-I#lnG6$%*protectedGI(_syslibG6\"6#I\"uGF-!\"\" I&thetaGF-\"\"\"),$-F)6#I\"vGF-F0F1F2*$F1F0F2F%F0-I$expGF*6#,$F$F0F2F0 " }}{PARA 11 "" 1 "" {XPPMATH 20 "\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "optimize(fu);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*/I#t 1G6\"-I#lnG6$%*protectedGI(_syslibGF%6#I\"uGF%/I#t2GF%),$F$!\"\"I&thet aGF%/I#t3GF%-F'6#I\"vGF%/I#t4GF%),$F4F1F2/I#t5GF%,&F.\"\"\"F9F?/I#t7GF %)F=*$F2F1/I$t10GF%-I$expGF(6#,$FAF1/I$t12GF%,$*(FAF?F=F1FEF?F1" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "a:=(diff(PDF_gumbel, theta)) :\n" }{MPLTEXT 1 0 9 "cost(a);\n" }{MPLTEXT 1 0 17 "cost(factor(a));\n " }{MPLTEXT 1 0 19 "cost(optimize(a));\n" }{MPLTEXT 1 0 26 "cost(optim ize(factor(a)));" }}{PARA 11 "" 1 "" {XPPMATH 20 ",*I*additionsG6\"\"$ \\\"I0multiplicationsGF$\"$[\"I*divisionsGF$\"#dI*functionsGF$\"$<$" } }{PARA 11 "" 1 "" {XPPMATH 20 ",*I0multiplicationsG6\"\"$0#I*additions GF$\"$h\"I*divisionsGF$\"#AI*functionsGF$\"$R$" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,I*functionsG6\"\"#7I,assignmentsGF$\"#HI0multiplication sGF$\"#WI*additionsGF$\"#;I*divisionsGF$\"#5" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,I*functionsG6\"\"#7I,assignmentsGF$\"#NI0multiplication sGF$\"#iI*additionsGF$F'I*divisionsGF$\"\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 164 "algsubs(minusLogUPowTheta+minusLogVPowTheta=sum1, subs((-logU)^theta=minusLogUPowTheta,(-logV)^theta=minusLogVPowTheta,a lgsubs(log(u)=logU,algsubs(log(v)=logV,a))));" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*6)I%sum1G6\"*$I&thetaGF&!\"\"\"\"\"-I$expG6$%*protecte dGI(_syslibGF&6#,$F$F)F*F(!\"#I\"vGF&F)I\"uGF&F)-I#lnGF-6#F3F)-F66#F4F ),&*$I2minusLogVPowThetaGF&\"\"#F)*&F%F*F " 0 " " {MPLTEXT 1 0 85 "INT:=subs(theta=2.5,Int(Int((u-0.5)*(v-0.5)*PDF_gum bel,u=eps..1-eps),v=eps..1-eps));\n" }{MPLTEXT 1 0 29 "evalf[7](subs(e ps=1e-8,INT));" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I$IntG6$%*protectedGI (_syslibG6\"6$-F#6$*8,&I\"uGF'\"\"\"$!\"&!\"\"F.F.,&I\"vGF'F.F/F.F.,&* $,$-I#lnGF$6#F-F1$\"#DF1F.*$,$-F86#F3F1F:F.$!+++++;!\"*F=F:F6F:-I$expG F$6#,$*$F4$\"+++++S!#5F1F.,&$\"#:F1F.FGF.F.F3F1F>F1F-F1F7F1/F-;I$epsGF ',&F.F.FPF1/F3FO" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"(/bc'!\")" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "cov:=proc(t)\n" }{MPLTEXT 1 0 67 " evalf(subs(theta=t,Int(Int(CDF_gumbel-u*v,u=0..1),v=0..1) ))\n" }{MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "cov(2.5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+GZ]ll!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "assume(u>0,u<1,v>0,v<1);limit(CDF_g umbel, theta=infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I&limitG6$%* protectedGI(_syslibG6\"6$-I$expGF$6#,$),&),$-I#lnGF$6#I#u|irGF'!\"\"I& thetaGF'\"\"\"),$-F26#I#v|irGF'F5F6F7*$F6F5F5/F6I)infinityGF%" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 59 "evalf(subs(u=0.2,v=0.2,theta =2.5,[PDF_gumbel,CDF_gumbel]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\" +fdf?A!\"*$\"+8R#f>\"!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "solve(subs(u=t,v=t,theta=2.5,CDF_gumbel)=0.5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%$\"+$)et8f!#5^$$\"+)pGsX\"!\"*$!+b`6[YF%^$F'$\"+b`6[YF% " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "assume(theta>0,v>0,v<1, u>0);(CDF_gumbel, u=0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$-I$expG6$%* protectedGI(_syslibG6\"6#,$),&),$-I#lnGF%6#I#u|irGF(!\"\"I'theta|irGF( \"\"\"),$-F06#I#v|irGF(F3F4F5*$F4F3F3/F2\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidGumbelCopula.txt000066400000000000000000000261651307543307100224560ustar00rootroot00000000000000> restart: > CDF_gumbel:=exp(-((-log(u))^theta + (-log(v))^theta)^(1/theta)); / 1 \ |-----| \theta/ theta theta CDF_gumbel := exp(-((-ln(u)) + (-ln(v)) ) ) > PDF_gumbel:=factor(diff(diff(CDF_gumbel,u),v)); / 1 \ / 1 \ |-----| |-----| \theta/ theta theta \theta/ PDF_gumbel := %1 (-ln(v)) (-ln(u)) exp(-%1 ) / / 1 \\ | |-----|| | \theta/| / 2 \-1 + theta + %1 / / (v ln(v) %1 u ln(u)) / theta theta %1 := (-ln(u)) + (-ln(v)) > with(codegen,optimize,cost); [optimize, cost] > optimize(PDF_gumbel); theta theta t1 = ln(u), t2 = (-t1) , t3 = ln(v), t4 = (-t3) , / 1 \ |-----| \theta/ 2 t5 = t2 + t4, t7 = t5 , t9 = exp(-t7), t17 = t5 , t7 t4 t2 t9 (-1 + theta + t7) t24 = ----------------------------- v t3 t17 u t1 > solve(subs(u=t,v=t,CDF_gumbel)=y,t); 1 ----------------------------------- -ln(2) + ln(-ln(y)) theta exp(exp(-------------------------)) theta > phi:=(-log(t))^theta; theta phi := (-ln(t)) > phi := (-ln(t))^theta; theta phi := (-ln(t)) > factor(simplify(diff(phi,t))); (theta - 1) (-ln(t)) theta - ------------------------- t > factor((diff(phi,t$2))); theta (-ln(t)) theta (theta - ln(t) - 1) --------------------------------------- 2 2 t ln(t) > du:=diff(CDF_gumbel,u); > dv:=diff(CDF_gumbel,v); / 1 \ |-----| \theta/ theta theta theta du := - ((-ln(u)) + (-ln(v)) ) (-ln(u)) / 1 \ |-----| \theta/ theta theta / exp(-((-ln(u)) + (-ln(v)) ) ) / (u ln(u) / theta theta ((-ln(u)) + (-ln(v)) )) / 1 \ |-----| \theta/ theta theta theta dv := - ((-ln(u)) + (-ln(v)) ) (-ln(v)) / 1 \ |-----| \theta/ theta theta / exp(-((-ln(u)) + (-ln(v)) ) ) / (v ln(v) / theta theta ((-ln(u)) + (-ln(v)) )) > fu:=factor(du/((-log(u))^theta/(u*log(u)))); > fv:=factor(dv/((-log(v))^theta/(v*log(v)))); > fu/fv; / 1 \ |-----| \theta/ theta theta fu := - ((-ln(u)) + (-ln(v)) ) / 1 \ |-----| \theta/ theta theta / exp(-((-ln(u)) + (-ln(v)) ) ) / ( / theta theta (-ln(u)) + (-ln(v)) ) / 1 \ |-----| \theta/ theta theta fv := - ((-ln(u)) + (-ln(v)) ) / 1 \ |-----| \theta/ theta theta / exp(-((-ln(u)) + (-ln(v)) ) ) / ( / theta theta (-ln(u)) + (-ln(v)) ) 1 > optimize(fu); theta theta t1 = ln(u), t2 = (-t1) , t3 = ln(v), t4 = (-t3) , / 1 \ |-----| \theta/ t7 t10 t5 = t2 + t4, t7 = t5 , t10 = exp(-t7), t12 = - ------ t5 > a:=(diff(PDF_gumbel, theta)): > cost(a); > cost(factor(a)); > cost(optimize(a)); > cost(optimize(factor(a))); 149 additions + 148 multiplications + 57 divisions + 317 functions 205 multiplications + 162 additions + 22 divisions + 339 functions 12 functions + 29 assignments + 44 multiplications + 16 additions + 10 divisions 12 functions + 35 assignments + 62 multiplications + 36 additions + 8 divisions > algsubs(minusLogUPowTheta+minusLogVPowTheta=sum1,subs((-logU)^theta=mi > nusLogUPowTheta,(-logV)^theta=minusLogVPowTheta,algsubs(log(u)=logU,al > gsubs(log(v)=logV,a)))); / 1 \ / 1 \ |-----| |-----| \theta/ \theta/ sum1 exp(-sum1 ) // || 2 || (-minusLogVPowTheta + sum1 minusLogVPowTheta) \\ 3 2 -2 ln(-logV) theta + 3 theta ln(-logV) - theta ln(-logV) 2 3 - 3 ln(-logU) theta + 2 ln(-logU) theta + theta ln(-logU) / 1 \ |-----| 2 \theta/ + 3 ln(-logU) theta sum1 / 1 \ |-----| \theta/ - 3 sum1 theta ln(-logU) / 1 \ |-----| 2 \theta/ - 3 ln(-logV) theta sum1 / / 1 \\2 | |-----|| | \theta/| - \sum1 / theta ln(-logV) / 1 \ |-----| \theta/ + 3 sum1 theta ln(-logV) / / 1 \\2 \ | |-----|| | | \theta/| | + \sum1 / theta ln(-logU)/ minusLogVPowTheta / / 1 \\2 | |-----|| | \theta/| + ln(sum1) sum1 - \sum1 / theta ln(-logU) sum1 3 2 - ln(-logU) theta sum1 + 2 ln(-logU) theta sum1 / 1 \ |-----| \theta/ - ln(sum1) theta sum1 + sum1 ln(sum1) theta sum1 / 1 \ |-----| 2 \theta/ + ln(-logV) theta sum1 sum1 / / 1 \\2 | |-----|| | \theta/| + \sum1 / ln(sum1) sum1 / 1 \ |-----| \theta/ 2 + 3 sum1 theta ln(-logU) sum1 + theta sum1 / 1 \ |-----| \theta/ 2 - 3 sum1 ln(sum1) sum1 - theta ln(-logV) sum1 / 1 \ |-----| 2 \theta/ - 2 ln(-logU) theta sum1 sum1 - theta ln(-logU) sum1 \ | 3 | / 2 3 + ln(-logV) theta sum1/ / (theta v u ln(v) ln(u) sum1 ) / > INT:=subs(theta=2.5,Int(Int((u-0.5)*(v-0.5)*PDF_gumbel,u=eps..1-eps),v > =eps..1-eps)); > evalf[7](subs(eps=1e-8,INT)); 1 - eps 1 - eps / / | | 2.5 INT := | | (u - 0.5) (v - 0.5) (-ln(v)) | | / / eps eps 2.5 2.5 2.5 0.4000000000 (-ln(u)) exp(-((-ln(u)) + (-ln(v)) ) ) 2.5 2.5 0.4000000000 / (1.5 + ((-ln(u)) + (-ln(v)) ) ) / ( / 2.5 2.5 1.600000000 ((-ln(u)) + (-ln(v)) ) v ln(v) u ln(u)) du dv 0.06565504 > cov:=proc(t) > evalf(subs(theta=t,Int(Int(CDF_gumbel-u*v,u=0..1),v=0..1))) > end: > cov(2.5); 0.06565504728 > assume(u>0,u<1,v>0,v<1);limit(CDF_gumbel, theta=infinity); / 1 \ |-----| \theta/ theta theta lim exp(-((-ln(u~)) + (-ln(v~)) ) ) theta -> infinity > evalf(subs(u=0.2,v=0.2,theta=2.5,[PDF_gumbel,CDF_gumbel])); [2.220595759, 0.1195923913] > solve(subs(u=t,v=t,theta=2.5,CDF_gumbel)=0.5); 0.5913735883, 1.457228698 - 0.4648115355 I, 1.457228698 + 0.4648115355 I > assume(theta>0,v>0,v<1,u>0);(CDF_gumbel, u=0); / 1 \ |------| \theta~/ theta~ theta~ exp(-((-ln(u~)) + (-ln(v~)) ) ), u~ = 0 > openturns-1.9/validation/src/ValidGumbelEstimate.mws000066400000000000000000000031711307543307100227650ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 301 "restart:\nwith(Stat istics):\nassume(alpha>0);\ngumbel_:=RandomVariable(Gumbel(beta,1/alph a)):\npdf:=PDF(gumbel_,x);\nmu_:=Mean(gumbel_);\nvar_:=Variance(gumbel _);\nassume(v>0):\nsol:=allvalues(solve(\{mu_=m,var_=v\},\{alpha,beta \})):\nmap(_x->collect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2, [alpha,beta]));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG*(%'alpha| irG\"\"\"-%$expG6#,$*&,&%\"xGF'%%betaG!\"\"F'F&F'F0F'-F)6#,$F(F0F'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%%betaG\"\"\"*&%&gammaGF'%'al pha|irG!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"'!\" \"%'alpha|irG!\"#%#PiG\"\"#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 $,$**\"\"'!\"\"F&#\"\"\"\"\"#%#PiGF)%&sigmaGF'F),&%\"mGF)**%&gammaGF)F ,F)F&F(F+F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 78 "map(_x->co llect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2,[alpha,beta]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$,$**\"\"'!\"\"F&#\"\"\"\"\"#%#PiGF )%&sigmaGF'F),&%\"mGF)**%&gammaGF)F,F)F&F(F+F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidGumbelEstimate.txt000066400000000000000000000023101307543307100227700ustar00rootroot00000000000000> restart: > with(Statistics): > assume(alpha>0); > gumbel_:=RandomVariable(Gumbel(beta,1/alpha)): > pdf:=PDF(gumbel_,x); > mu_:=Mean(gumbel_); > var_:=Variance(gumbel_); > assume(v>0): > sol:=allvalues(solve({mu_=m,var_=v},{alpha,beta})): > map(_x->collect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2,[alpha, > beta])); > pdf := alpha~ exp(-(x - beta) alpha~) exp(-exp(-(x - beta) alpha~)) gamma mu_ := beta + ------ alpha~ 2 Pi var_ := --------- 2 6 alpha~ 1/2 1/2 6 Pi gamma sigma 6 [-------, m - ----------------] 6 sigma Pi > map(_x->collect(simplify(_x,symbolic),m),subs(sol[1],v=sigma^2,[alpha, > beta])); 1/2 1/2 6 Pi gamma sigma 6 [-------, m - ----------------] 6 sigma Pi > openturns-1.9/validation/src/ValidHisto.mws000066400000000000000000000046011307543307100211430ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 184 "restart:\nfirstX:=- 1.5;\nh:=[0.5,1.5,3.5,2.5];\nl:=[1.0,0.7,1.2,0.9];\ncl:=[seq(sum(l[i], i=1..j),j=1..4)];\ns:=[seq(h[i]*l[i],i=1..4)];\nsurface:=sum(s[i],i=1. .4);\nnh:=map(_x->_x/surface,h);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% 'firstXG$!#:!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"hG7&$\"\"&!\" \"$\"#:F($\"#NF($\"#DF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"lG7&$\" #5!\"\"$\"\"(F($\"#7F($\"\"*F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#c lG7&$\"#5!\"\"$\"#%\"sG7&$\"#]!\"#$\"$0\"F($\"$?%F($\"$D#F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(surfaceG$\"$+)!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%#nhG7&$\"++++]i!#6$\"++++v=!#5$\"++++vVF+$\"++++DJF+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 245 "nx:=[firstX,seq(cl[i]+firstX,i=1.. 4)];\nnp:=[0,seq(sum(s[i],i=1..j)/surface,j=1..4)];\nnl:=[0,seq(cl[i], i=1..4)];\nmean:=sum(int(x*nh[i],x=firstX+nl[i]..firstX+nl[i+1]),i=1.. 4);\nvar:=sum(int((x-mean)^2*nh[i],x=firstX+nl[i]..firstX+nl[i+1]),i=1 ..4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#nxG7'$!#:!\"\"$!\"&F($\"\" #F($\"#9F($\"#BF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#npG7'\"\"!$\"+ +++]i!#6$\"+++]P>!#5$\"+++](=(F,$\"+++++5!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#nlG7'\"\"!$\"#5!\"\"$\"#%%meanG$\"+++D\"e)!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$varG$\"+v\"[??(!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 169 "q:=0.95;\nfor i from 1 to 4 do\n Xq:=solve((xq-nx[i +1])/(q-np[i+1])=(nx[i]-nx[i+1])/(np[i]-np[i+1]),xq);\n if ((Xq>=nx[i ]) and (Xq%\"qG$\"#&*!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$\"++++S@!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 1 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidHisto.txt000066400000000000000000000025321307543307100211550ustar00rootroot00000000000000> restart: > firstX:=-1.5; > h:=[0.5,1.5,3.5,2.5]; > l:=[1.0,0.7,1.2,0.9]; > cl:=[seq(sum(l[i],i=1..j),j=1..4)]; > s:=[seq(h[i]*l[i],i=1..4)]; > surface:=sum(s[i],i=1..4); > nh:=map(_x->_x/surface,h); firstX := -1.5 h := [0.5, 1.5, 3.5, 2.5] l := [1.0, 0.7, 1.2, 0.9] cl := [1.0, 1.7, 2.9, 3.8] s := [0.50, 1.05, 4.20, 2.25] surface := 8.00 nh := [0.06250000000, 0.1875000000, 0.4375000000, 0.3125000000] > nx:=[firstX,seq(cl[i]+firstX,i=1..4)]; > np:=[0,seq(sum(s[i],i=1..j)/surface,j=1..4)]; > nl:=[0,seq(cl[i],i=1..4)]; > mean:=sum(int(x*nh[i],x=firstX+nl[i]..firstX+nl[i+1]),i=1..4); > var:=sum(int((x-mean)^2*nh[i],x=firstX+nl[i]..firstX+nl[i+1]),i=1..4); nx := [-1.5, -0.5, 0.2, 1.4, 2.3] np := [0, 0.06250000000, 0.1937500000, 0.7187500000, 1.000000000] nl := [0, 1.0, 1.7, 2.9, 3.8] mean := 0.8581250000 var := 0.7202048175 > q:=0.95; > for i from 1 to 4 do > > Xq:=solve((xq-nx[i+1])/(q-np[i+1])=(nx[i]-nx[i+1])/(np[i]-np[i+1]),xq) > ; > if ((Xq>=nx[i]) and (Xq print(Xq); > fi: > od: q := 0.95 2.140000000 > > openturns-1.9/validation/src/ValidHistogramPolynom.mw000066400000000000000000001373041307543307100232140ustar00rootroot00000000000000 restart: Digits:=50: f:=piecewise(X < 0.00000000000000000000, 0.0, X < 1.00000000000000000000, 0.11111111111111110494, X < 3.00000000000000000000, 0.22222222222222220989, X < 4.00000000000000000000, 0.44444444444444441977, 0.0); plot(f,X=-1..5); LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYrMkkiWEc2IiQiIiFGKkYpMkYnJCI2KysrKysrKysrKyIhIz8kIjUlXDU2NjY2NjY2IkYuMkYnJCI2KysrKysrKysrKyRGLiQiNSopNEFBQUFBQUFBRi4yRickIjYrKysrKysrKysrJUYuJCI1eD5XV1dXV1dXV0YuRik= NiotJSdDVVJWRVNHNiQ3YHo3JCQhIzUhIiIkIiIhISIiNyQkITFqQ1wpcFZYbyohIzskIiIhISIiNyQkITFLa0dkbzE1JSohIzskIiIhISIiNyQkITFuTnJVKilRLCIqISM7JCIiISEiIjckJCExakZiNVxtIXopISM7JCIiISEiIjckJCExKFF4YXA8OVspISM7JCIiISEiIjckJCExPE5xU2ZxJT4pISM7JCIiISEiIjckJCExVCJHY19LeSp5ISM7JCIiISEiIjckJCExeGAyOmMhM2YoISM7JCIiISEiIjckJCExJGY9UE1qWkcoISM7JCIiISEiIjckJCExYzdEXTcnKnBwISM7JCIiISEiIjckJCExdVsoXFIkbyNwJyEjOyQiIiEhIiI3JCQhMXddLC5VYCFRJyEjOyQiIiEhIiI3JCQhMTdDWydILnIxJyEjOyQiIiEhIiI3JCQhMT1OcVNYMGxkISM7JCIiISEiIjckJCExVSRvT0xsMlwmISM7JCIiISEiIjckJCExPE1vTyozWTsmISM7JCIiISEiIjckJCExaEBWJ282JCkpWyEjOyQiIiEhIiI3JCQhMkReLTBJN3BjJSEjPCQiIiEhIiI3JCQhMk1pQ1xRPkNHJSEjPCQiIiEhIiI3JCQhMXJUJG9jJkdxUiEjOyQiIiEhIiI3JCQhMChSemUuMXRPISM6JCIiISEiIjckJCExemU8TnEkSE8kISM7JCIiISEiIjckJCEyOk5xUyxaInlJISM8JCIiISEiIjckJCExakReLUQnNHgjISM7JCIiISEiIjckJCEyND5RdzclKT1YIyEjPCQiIiEhIiI3JCQhMTM7S2thN3VAISM7JCIiISEiIjckJCEyQVkjXClcUVQoPSEjPCQiIiEhIiI3JCQhMUVfLzRFQWs6ISM7JCIiISEiIjckJCEyb01wUVBJNUUiISM8JCIiISEiIjckJCEwN0NbJ0h3dycqISM7JCIiISEiIjckJCExaEFYITRtJj5rISM8JCIiISEiIjckJCEyJkdkOUgpSEdcJCEjPSQiIiEhIiI3JCQhKHMuJD4hIikkIiIhISIiNyQkITJPclUmMzw5ek8hIz4kIiIhISIiNyQkITJiMzxNJHpPND4hIz4kIiIhISIiNyQkITF0WCJIZVRmUiIhIz4kIiIhISIiNyQkIjFvTnIjSEZIWCghIz4kIjE2NjY2NjY2NiEjOzckJCIyMzxNb2h6LGoiISM+JCIxNjY2NjY2NjYhIzs3JCQiMSYpcFIvbDE6RCEjPSQiMTY2NjY2NjY2ISM7NyQkIjEqemY+UmAqKlIkISM9JCIxNjY2NjY2NjYhIzs3JCQiMWI1QFU0XVJwISM9JCIxNjY2NjY2NjYhIzs3JCQiMjdCWSNcWyF6LyIhIz0kIjE2NjY2NjY2NiEjOzckJCIyRFsnSGZWImV2IiEjPSQiMTY2NjY2NjY2ISM7NyQkIjJRdFkkcFFzakMhIz0kIjE2NjY2NjY2NiEjOzckJCIxR2M3RCEpZTZTISM8JCIxNjY2NjY2NjYhIzs3JCQiMUJYITQ9XyVmYiEjPCQiMTY2NjY2NjY2ISM7NyQkIjFlO0xtN0hzJSkhIzwkIjE2NjY2NjY2NiEjOzckJCIyd14uMnUvPDoiISM8JCIxNjY2NjY2NjYhIzs3JCQiMk1tS2xJJlFcOSEjPCQiMTY2NjY2NjY2ISM7NyQkIjEleWM4Rkg1dyIhIzskIjE2NjY2NjY2NiEjOzckJCIyOEJZI1wlejYxIyEjPCQiMTY2NjY2NjY2ISM7NyQkIjJaJSopeWRqN29CISM8JCIxNjY2NjY2NjYhIzs3JCQiMlB4YTRmSkRuIyEjPCQiMTY2NjY2NjY2ISM7NyQkIjIkWydIZlFbQSZIISM8JCIxNjY2NjY2NjYhIzs3JCQiMXZcKiopUk5HRiQhIzskIjE2NjY2NjY2NiEjOzckJCIxSmhBWEFkZk4hIzskIjE2NjY2NjY2NiEjOzckJCIxO0trR05IbFEhIzskIjE2NjY2NjY2NiEjOzckJCIyMDpJZyF5IXo6JSEjPCQiMTY2NjY2NjY2ISM7NyQkIjElKil5ZE49R1slISM7JCIxNjY2NjY2NjYhIzs3JCQiMV8vND1xO2taISM7JCIxNjY2NjY2NjYhIzs3JCQiMWY7TG0tXSQzJiEjOyQiMTY2NjY2NjY2ISM7NyQkIjEjUXdfJnlgdWAhIzskIjE2NjY2NjY2NiEjOzckJCIwKWY+UnMpR3AmISM6JCIxNjY2NjY2NjYhIzs3JCQiMWxIZj0qb3YnZiEjOyQiMTY2NjY2NjY2ISM7NyQkIjE2QVcpRypSIUcnISM7JCIxNjY2NjY2NjYhIzs3JCQiMVsmND4pemQjZSchIzskIjE2NjY2NjY2NiEjOzckJCIxTW5NcCNmWClvISM7JCIxNjY2NjY2NjYhIzs3JCQiMWAwNkEnSGE9KCEjOyQiMTY2NjY2NjY2ISM7NyQkIjEwNT9TPVp1dSEjOyQiMTY2NjY2NjY2ISM7NyQkIjE8TG1LVCRweSghIzskIjE2NjY2NjY2NiEjOzckJCIxVylvUE5MWjMpISM7JCIxNjY2NjY2NjYhIzs3JCQiMXdfMDZJOilSKSEjOyQiMTY2NjY2NjY2ISM7NyQkIjAnPVB1Syg9bykhIzokIjE2NjY2NjY2NiEjOzckJCIwJz5SeXNWJioqKSEjOiQiMTY2NjY2NjY2ISM7NyQkIjFXKW9QJnB4JkgqISM7JCIxNjY2NjY2NjYhIzs3JCQiMCYpcFJmJlEmZiohIzokIjE2NjY2NjY2NiEjOzckJCIxdFkkcHljPXYqISM7JCIxNjY2NjY2NjYhIzs3JCQiMShcKiopenpLMyoqISM7JCIxNjY2NjY2NjYhIzs3JCQiMUdjNytwTlcqKiEjOyQiMTY2NjY2NjY2ISM7NyQkIjFmPE4/ZVEhKSoqISM7JCIxNjY2NjY2NjYhIzs3JCQiMSNIMy8wJFIqKSoqISM7JCIxNjY2NjY2NjYhIzs3JCQiMUNbWSFHKyUpKioqISM7JCIxNjY2NjY2NjYhIzs3JCQiMmU4XzV2UzIrIiEjOyQiMUFBQUFBQUFBISM7NyQkIjEqeWRTWlQ7KyIhIzokIjFBQUFBQUFBQSEjOzckJCIyYjRwKyNIVy41ISM7JCIxQUFBQUFBQUEhIzs3JCQiMS0vM21WQzA1ISM6JCIxQUFBQUFBQUEhIzs3JCQiMiNHYzddLFg3NSEjOyQiMUFBQUFBQUFBISM7NyQkIjJVJjM8TWZsPjUhIzskIjFBQUFBQUFBQSEjOzckJCIyLC4xN046Vy4iISM7JCIxQUFBQUFBQUEhIzs3JCQiMTE3Q29aPFw1ISM6JCIxQUFBQUFBQUEhIzs3JCQiMlByVSZvcXciMyIhIzskIjFBQUFBQUFBQSEjOzckJCIyMzxNb3N3NzYiISM7JCIxQUFBQUFBQUEhIzs3JCQiMndcKiopemVYVDYhIzskIjFBQUFBQUFBQSEjOzckJCIyLS4xN0laQDwiISM7JCIxQUFBQUFBQUEhIzs3JCQiMlB1Wygqb2UuPyIhIzskIjFBQUFBQUFBQSEjOzckJCIyJjQ+UTs2Vkk3ISM7JCIxQUFBQUFBQUEhIzs3JCQiMlB1WyhIWUZnNyEjOyQiMUFBQUFBQUFBISM7NyQkIjE5R2M3ej4jSCIhIzokIjFBQUFBQUFBQSEjOzckJCIyJW9PdEUpby5LIiEjOyQiMUFBQUFBQUFBISM7NyQkIjI9TW9PQHNHTiIhIzskIjFBQUFBQUFBQSEjOzckJCIyPE9zVywvQVEiISM7JCIxQUFBQUFBQUEhIzs3JCQiMlomND4pSEU3VCIhIzskIjFBQUFBQUFBQSEjOzckJCIxPE1vd1hWVTkhIzokIjFBQUFBQUFBQSEjOzckJCIydlomNCo0cFBaIiEjOyQiMUFBQUFBQUFBISM7NyQkIjI9UHVbKCl5QV0iISM7JCIxQUFBQUFBQUEhIzs3JCQiMillPE4hKlxiSzohIzskIjFBQUFBQUFBQSEjOzckJCIqXyxAYyIhIikkIjFBQUFBQUFBQSEjOzckJCIyakNcKXAtOCVmIiEjOyQiMUFBQUFBQUFBISM7NyQkIjJgMzxNL1c9aSIhIzskIjFBQUFBQUFBQSEjOzckJCIydVwqKik+Vm5gOyEjOyQiMUFBQUFBQUFBISM7NyQkIjIjSGU7YGtmJG8iISM7JCIxQUFBQUFBQUEhIzs3JCQiMjpHYzdkSEtyIiEjOyQiMUFBQUFBQUFBISM7NyQkIjFvTnJpaSlHdSIhIzokIjFBQUFBQUFBQSEjOzckJCIyKm9QdjVVOHQ8ISM7JCIxQUFBQUFBQUEhIzs3JCQiMk9zVypHbD4wPSEjOyQiMUFBQUFBQUFBISM7NyQkIjF4YDJOWGZNPSEjOiQiMUFBQUFBQUFBISM7NyQkIjIuMDU/OTlPJz0hIzskIjFBQUFBQUFBQSEjOzckJCIyYjVAVWlOWSo9ISM7JCIxQUFBQUFBQUEhIzs3JCQiMlcpb1B2JiplRD4hIzskIjFBQUFBQUFBQSEjOzckJCIxPU9zJWVzTCY+ISM6JCIxQUFBQUFBQUEhIzs3JCQiMi4yOUdjJEcnKT4hIzskIjFBQUFBQUFBQSEjOzckJCIyeGQ6SiU+I1EsIyEjOyQiMUFBQUFBQUFBISM7NyQkIjI8SWc/PEpnLyMhIzskIjFBQUFBQUFBQSEjOzckJCIwLS8zd3JuMiMhIzkkIjFBQUFBQUFBQSEjOzckJCIxQlkjXFc+VTUjISM6JCIxQUFBQUFBQUEhIzs3JCQiMic0PlFPczNOQCEjOyQiMUFBQUFBQUFBISM7NyQkIjAqemZSJ2ZoOyMhIzkkIjFBQUFBQUFBQSEjOzckJCIydl8wNk8lMyg+IyEjOyQiMUFBQUFBQUFBISM7NyQkIjJYIkhlT2J2REEhIzskIjFBQUFBQUFBQSEjOzckJCIyQlghNHlHV2JBISM7JCIxQUFBQUFBQUEhIzs3JCQiMidHZDlwYjknRyMhIzskIjFBQUFBQUFBQSEjOzckJCIxMjlHJ3pcbkojISM6JCIxQUFBQUFBQUEhIzs3JCQiMjI5R2MrSSNbQiEjOyQiMUFBQUFBQUFBISM7NyQkIjIpeWQ6InpkZlAjISM7JCIxQUFBQUFBQUEhIzs3JCQiMWY8TjVGPDJDISM6JCIxQUFBQUFBQUEhIzs3JCQiMURdKyxlXlFDISM6JCIxQUFBQUFBQUEhIzs3JCQiMlciSGV3MXNvQyEjOyQiMUFBQUFBQUFBISM7NyQkIjJCVidHKGZcaFwjISM7JCIxQUFBQUFBQUEhIzs3JCQiMlgjXClwQmwoR0QhIzskIjFBQUFBQUFBQSEjOzckJCIyLjA1PydcUmNEISM7JCIxQUFBQUFBQUEhIzs3JCQiMTpJZytcYCllIyEjOiQiMUFBQUFBQUFBISM7NyQkIjEvMzsjPiUpcGgjISM6JCIxQUFBQUFBQUEhIzs3JCQiMVwpcFJkKD5bRSEjOiQiMUFBQUFBQUFBISM7NyQkIjImcFF4JTQ/em4jISM7JCIxQUFBQUFBQUEhIzs3JCQiMiR5YzhGQyQqM0YhIzskIjFBQUFBQUFBQSEjOzckJCIyOEJZI0g5VFBGISM7JCIxQUFBQUFBQUEhIzs3JCQiMCwtLykpSCJvRiEjOSQiMUFBQUFBQUFBISM7NyQkIjFaJSopeXJQKyFHISM6JCIxQUFBQUFBQUEhIzs3JCQiMmM1QFVlOHkjRyEjOyQiMUFBQUFBQUFBISM7NyQkIjAtLzNHN3kmRyEjOSQiMUFBQUFBQUFBISM7NyQkIjFXKFsocFEhKSkpRyEjOiQiMUFBQUFBQUFBISM7NyQkIjI6TG1LNEIiPkghIzskIjFBQUFBQUFBQSEjOzckJCIxRF0rLCZlJVtIISM6JCIxQUFBQUFBQUEhIzs3JCQiMlgpb1AmW1daJ0ghIzskIjFBQUFBQUFBQSEjOzckJCIyTnVbKHAvLiIpSCEjOyQiMUFBQUFBQUFBISM7NyQkIjAsLS9KWiQpKUghIzkkIjFBQUFBQUFBQSEjOzckJCIya0ZiNTprYypIISM7JCIxQUFBQUFBQUEhIzs3JCQiMkdmPTdPJFwoKkghIzskIjFBQUFBQUFBQSEjOzckJCIyJzQ+UXJESyoqSCEjOyQiMUFBQUFBQUFBISM7NyQkIjFvTll3ckIrSSEjOiQiMVdXV1dXV1dXISM7NyQkIjFFX2EieV42KyQhIzokIjFXV1dXV1dXVyEjOzckJCIyVylvaSdRbT8rJCEjOyQiMVdXV1dXV1dXISM7NyQkIjFWJjM8KjQpSCskISM6JCIxV1dXV1dXV1chIzs3JCQiMXdeLjclUm0rJCEjOiQiMVdXV1dXV1dXISM7NyQkIjIkND1PS3lINUkhIzskIjFXV1dXV1dXVyEjOzckJCIybEVgMVRBZi0kISM7JCIxV1dXV1dXV1chIzs3JCQiMlFzVyopKXBhVEkhIzskIjFXV1dXV1dXVyEjOzckJCIxTW5NcEwnKXBJISM6JCIxV1dXV1dXV1chIzs3JCQiMjlKaUNsPzM1JCEjOyQiMVdXV1dXV1dXISM7NyQkIjEkZTtML1wqSEohIzokIjFXV1dXV1dXVyEjOzckJCIyJD1Pcy9tUmdKISM7JCIxV1dXV1dXV1chIzs3JCQiMUxsSWhZOyE+JCEjOiQiMVdXV1dXV1dXISM7NyQkIjJZJSopeWQhSDhBJCEjOyQiMVdXV1dXV1dXISM7NyQkIjIkKil5ZHZTTV5LISM7JCIxV1dXV1dXV1chIzs3JCQiMWhAVm0oUT9HJCEjOiQiMVdXV1dXV1dXISM7NyQkIjFXKFsoKkd6Q0okISM6JCIxV1dXV1dXV1chIzs3JCQiMUppQ3A0WFNMISM6JCIxV1dXV1dXV1chIzs3JCQiMWtGYnEnNERQJCEjOiQiMVdXV1dXV1dXISM7NyQkIjIlemU8Ykw9LE0hIzskIjFXV1dXV1dXVyEjOzckJCIxKWU8TltiPFYkISM6JCIxV1dXV1dXV1chIzs3JCQiMjlHYzcicCxoTSEjOyQiMVdXV1dXV1dXISM7NyQkIjJkOkppJ3pdJFwkISM7JCIxV1dXV1dXV1chIzs3JCQiMjpKaUMkR2tATiEjOyQiMVdXV1dXV1dXISM7NyQkIjFLa0dkaGRgTiEjOiQiMVdXV1dXV1dXISM7NyQkIjJZITQ9Oyp6RWUkISM7JCIxV1dXV1dXV1chIzs3JCQiMlYnR2RhW145TyEjOyQiMVdXV1dXV1dXISM7NyQkIjJGYzdELSQpPmskISM7JCIxV1dXV1dXV1chIzs3JCQiMnRbKFxmZ0V0TyEjOyQiMVdXV1dXV1dXISM7NyQkIjFAVSUpR1JbLlAhIzokIjFXV1dXV1dXVyEjOzckJCIyKFJ6ZWQ/b0xQISM7JCIxV1dXV1dXV1chIzs3JCQiMjpLa0c0cFB3JCEjOyQiMVdXV1dXV1dXISM7NyQkIjJuT3RZSnRFeiQhIzskIjFXV1dXV1dXVyEjOzckJCIxKWY+UmE+UiNRISM6JCIxV1dXV1dXV1chIzs3JCQiMjI6SWdZKnBgUSEjOyQiMVdXV1dXV1dXISM7NyQkIjElemU8VlRdKVEhIzokIjFXV1dXV1dXVyEjOzckJCIxXy80ZU1UOFIhIzokIjFXV1dXV1dXVyEjOzckJCIyQ1kjXGUpcFolUiEjOyQiMVdXV1dXV1dXISM7NyQkIjJuSWhBJW95ZlIhIzskIjFXV1dXV1dXVyEjOzckJCIyMTpJZyNRIVsoUiEjOyQiMVdXV1dXV1dXISM7NyQkIjF3Xi5VU0gjKVIhIzokIjFXV1dXV1dXVyEjOzckJCIxLC0vZVV5KilSISM6JCIxV1dXV1dXV1chIzs3JCQiMk9yVWdPSE4qUiEjOyQiMVdXV1dXV1dXISM7NyQkIjFFXy91V0YoKlIhIzokIjFXV1dXV1dXVyEjOzckJCIxYWUvXjJAKSpSISM6JCIxV1dXV1dXV1chIzs3JCQiMkJbWSFHcTkqKlIhIzskIjFXV1dXV1dXVyEjOzckJCIwNlpdSSQzK1MhIzkkIiIhISIiNyQkIjFReC8jZT41KyUhIzokIiIhISIiNyQkIjEmKipbZzgjKkcrJSEjOiQiIiEhIiI3JCQiMV4tMCFwa1orJSEjOiQiIiEhIiI3JCQiMU1uTTQ9VD9TISM6JCIiISEiIjckJCIxO0trRyplZy4lISM6JCIiISEiIjckJCIwN0NbMSMpWzElISM5JCIiISEiIjckJCIxc1cqKSkqM1MlNCUhIzokIiIhISIiNyQkIjApZj4qPiQqcDclISM5JCIiISEiIjckJCIxUHVbZEddY1QhIzokIiIhISIiNyQkIjFrRmI1P28nPSUhIzokIiIhISIiNyQkIjEnSGY9VnR0QCUhIzokIiIhISIiNyQkIjAsLS8jW2VYVSEjOSQiIiEhIiI3JCQiMXdeLlpzbHZVISM6JCIiISEiIjckJCIwLC0vdytiSSUhIzkkIiIhISIiNyQkIjAzO0svQ3VMJSEjOSQiIiEhIiI3JCQiMU5wUWRcZmxWISM6JCIiISEiIjckJCIxMztLVyQpNClSJSEjOiQiIiEhIiI3JCQiMUdjN1gsVkZXISM6JCIiISEiIjckJCIxQFUlKUdDWGNXISM6JCIiISEiIjckJCIxJG9PdHFnd1slISM6JCIiISEiIjckJCIxVyhbKEhfKio9WCEjOiQiIiEhIiI3JCQiMVF3XzBdXVpYISM6JCIiISEiIjckJCIxRF0rQDZ5eFghIzokIiIhISIiNyQkIjFtS2xdd0syWSEjOiQiIiEhIiI3JCQiMTdEXStrTlJZISM6JCIiISEiIjckJCIxXy4ydSwyblkhIzokIiIhISIiNyQkIjFrRmJdLyEqKXAlISM6JCIiISEiIjckJCIxJjQ+UWVBKUdaISM6JCIiISEiIjckJCIxWyY0PnFiJWVaISM6JCIiISEiIjckJCIxTW9PJFI3Iil5JSEjOiQiIiEhIiI3JCQiMU5xU1QuTz1bISM6JCIiISEiIjckJCIwKnpmZkVVXVshIzkkIiIhISIiNyQkIjFWJ0dkbT8pelshIzokIiIhISIiNyQkIjJsSmpFRlMpM1whIzskIiIhISIiNyQkIjI6UHVbdmgpUlwhIzskIiIhISIiNyQkIjFeLC4xZCIzKFwhIzokIiIhISIiNyQkIiNdISIiJCIiISEiIi0lJkNPTE9SRzYnJSRSR0JHJCIpQyllcSUhIikkIiIhISIiJCIoJz4hXCYhIiktJStfQVRUUklCVVRFRzYjLyUnc291cmNlRyUsbWF0aGRlZmF1bHRHLSUlVklFV0c2JDskISM1ISIiJCIjXSEiIiUoREVGQVVMVEctJiUmX0FYSVNHNiMiIiI2Jy0lK19HUklETElORVNHNictJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKkxJTkVTVFlMRUc2IyIiIS0lKlRISUNLTkVTU0c2IyIiIS0lLVRSQU5TUEFSRU5DWUc2IyQiIiEhIiItJSlfVklTSUJMRUc2IyIiIS0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUqTElORVNUWUxFRzYjIiIhLSUqVEhJQ0tORVNTRzYjIiIhLSUtVFJBTlNQQVJFTkNZRzYjJCIiISEiIi0mJSZfQVhJU0c2IyIiIzYnLSUrX0dSSURMSU5FU0c2Jy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUqTElORVNUWUxFRzYjIiIhLSUqVEhJQ0tORVNTRzYjIiIhLSUtVFJBTlNQQVJFTkNZRzYjJCIiISEiIi0lKV9WSVNJQkxFRzYjIiIhLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSUrQVhFU0xBQkVMU0c2JC1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRIlg2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2IlEhNiItJSlfVklTSUJMRUc2IyIiIi0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJF0iISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlZ1AhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlK04hIiItJSlDSElMRFJFTkc2Ii0lK0FOTk9UQVRJT05HNictJSlCT1VORFNfWEc2IyQiIiEhIiItJSlCT1VORFNfWUc2IyQiIiEhIiItJS1CT1VORFNfV0lEVEhHNiMkIiUrUyEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiUrUyEiIi0lKUNISUxEUkVORzYiRzYi p:=[1,-2.2874785549890686021 + 0.91499142199562744082 * X,3.3223719225143555356 - 4.0318795162740403981 * X + 0.90770062408263729736 * X^2,-3.7695261214714959053 + 9.4838015768534997818 * X - 5.4325202194983113202 * X^2 + 0.85723137895668566344 * X^3,4.3162479760853935673 - 19.313532953901070499 * X + 19.980792509789800704 * X^2 - 7.2910026122392910253 * X^3 + 0.86780752813327277639 * X^4,-4.9430602443643110178 + 33.834492423822439378 * X - 54.353202012333596826 * X^2 + 34.007119806774696258 * X^3 - 9.1072966894010658478 * X^4 + 0.8757749585893709332 * X^5]; q:=[1,-1.9473404508356195741 + 0.77893618033424782965 * X,1.6357828957765605526 - 3.0490242434703245245 * X + 0.75799764711971762132 * X^2,-1.3850174041910259248 + 6.5810514770150749797 * X - 4.1252237620721974309 * X^2 + 0.66403856412362494144 * X^3,0.45306132940746035587 - 8.3361538546431539487 * X + 11.639003841070080014 * X^2 - 4.7979587833879104863 * X^3 + 0.60587834290569542173 * X^4,0.51238257749558591136 + 8.6732169655492796778 * X - 23.441002171922903585 * X^2 + 17.647700318666821317 * X^3 - 5.1527510747584850392 * X^4 + 0.51803244960147953879 * X^5]; NygiIiIsJiQhNUBnbyEqKVxieXVHIyEjPkYjSSJYRzYiJCI1IzNXRmMqPlUiKlwiKiEjPywoJCI1Y2BiVl5BPlBBTEYnRiNGKCQhNSIpUlNTRjsmej0uJUYnKiRGKCIiIyQiNU8oSFBFM0MxcTIqRiwsKiQhNWAhZlxyOTdFJnBQRidGI0YoJCI1PXkqXGBvZCxRWypGJ0YyJCE1LUs2JClcPi1fS2FGJyokRigiIiQkIjVXamNvYyp5OEJkKUYsLCwkIjV0YyRSJjN3ekM7VkYnRiNGKCQhNSpccTUhUiZIYDgkPiEjPUYyJCI1LzIhKSp5NER6ISkqPkZGRj0kITVgLSJIUkFoLTVIKEYnKiRGKCIiJSQiNVJ3RkZMIkd2IXknKUYsLC4kITV5LDZWT1ctMVZcRidGI0YoJCI1eSRSQyNRVSNcTVEkRkZGMiQhNUVvZkxCLC1LTmFGRkY9JCI1ZWlwdW4hKT5yK01GRkZLJCE1eSVlMSwlKm8nSDIiKkYnKiRGKCIiJiQiNEskNFAqZWVceHYpRic= NygiIiIsJiQhNVRkPmMkM1hTdCU+ISM+RiNJIlhHNiIkIjVsSHlDTS49Typ5KCEjPywoJCI1RWJnbHgmKkd5TjtGJ0YjRigkITVYX0MuWlZVLVxJRicqJEYoIiIjJCI1S0B3cj5yaygqenZGLCwqJCE1WyNmLSI+L3UsJlEiRidGI0YoJCI1KHpcMjpxWl41ZSdGJ0YyJCE1NFYoPnM/d0JfNyVGJyokRigiIiQkIjVXVFxpQlRjUVNtRiwsLCQiNShlTmd1U0g4MWAlRixGI0YoJCE1KFtSOlZZJlE6TyQpRidGMiQiNTkrM3E1JVErUjsiISM9Rj0kITVqWzV6USR5ZXp6JUYnKiRGKCIiJSQiNXRAYXAwSE15ZWdGLCwuJCI1TzZmZSZceERRNyZGLEYjRigkIjV5bnojXGIncEB0JylGJ0YyJCE1JmUuSCM+PC01V0JGSEY9JCI1PDgjb209LnFadyJGSEZLJCE1I1JdW2VaMl5GOiZGJyokRigiIiYkIjV6USZ6OWdcQy49JkYs M:=Matrix(6,6): N:=Matrix(6,6): for i from 1 to 6 do for j from 1 to 6 do M[i,j]:=int(p[i]*p[j]*f,X=0..4); N[i,j]:=int(q[i]*q[j]*f,X=0..4); end do: end do: evalf[16](M); evalf[16](N); LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciNV0uMj12ZCUpb1c9 LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciNSFmcSE9dmQlKW9XPQ== TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODg0NTc3NTE4MDcwMzUwWCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjRSInIickIjEqKioqKioqKioqKioqKioqISM7JCExKysrKysrK10hI04kITF4UWMiKjQoWzgiISNJJCIxVmZVKT14UVIiRi4kITFxN1l0MiM0byIhI0skITFjbVciRygqSFAoISNIRikkIjEoKSoqKioqKioqKioqKioqRigkITEuIzMmUSY0Z1EkISNKJCExaWBRdWt6OFBGOyQiMVgmeS8mKltMKyRGOyQhMXMqM010OVAqXEY2RixGOSQiMSYpKioqKioqKioqKioqKipGKCQiMU1UI3BZJil6NiNGOyQhMSRSMChSNXc0P0YuJCExKipRTSU+QHY1IkY2Ri9GPEZEJCIxJCkqKioqKioqKioqKioqKkYoJCExdldtKm9NazwiRi4kITEpeScpcCJRKjMpSEY7RjFGPkZGRkwkIjF6KioqKioqKioqKioqKipGKCQiMSlSMD07XVB1KkY7RjRGQEZIRk5GUiQiMSIpKioqKioqKioqKioqKipGKEYlTTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODg0NTc3NTE4MDcwNTkwWCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjRSInIickIjEqKioqKioqKioqKioqKioqISM7JCIxKysrKysrK0QhI04kITElM3AqKVJqIVJNRigkIjFzeGFFOywjUiNGKCQiMWhpUW11aiYpKSohIzwkITFGZj5uW3F5SUYoRikkIjFiZkI2NT5ac0YoJCIxdlJKWnRvZEhGKCQhMTNcTFBmLSNwJEYoJCExWkc6c1lMRTZGKCQiMS8nelh5ZUtGJ0YyRixGNyQiMU87MEBsR2okKkYoJCExMUFeQnMrbTpGKCQhMTVxZXAsXjddRigkIjE1JipwMyNvRnEjRihGLkY5RkEkIjEhZWBRQmRyYClGKCQiMWhUJ29rSTkqSEYoJCExUm12cGhyOWFGKEYwRjtGQ0ZJJCIxTDA+X2gnZSYpKUYoJCExMSRmMlxNOE0iRihGM0Y9RkVGS0ZPJCIxZiJINnk7ciopKUYoRiU= openturns-1.9/validation/src/ValidIndependentCopula.mws000066400000000000000000000036161307543307100234630ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 870 "restart:\nwith(Stat istics):\nX:=Uniform(0,1):\npdf:=PDF(X,x)*PDF(X,y)*PDF(X,z):\npdf_x:=i nt(int(pdf,y=0..1),z=0..1):\npdf_y:=int(int(pdf,z=0..1),x=0..1):\npdf_ z:=int(int(pdf,x=0..1),y=0..1):\npdf:=pdf_x*pdf_y*pdf_z:\nddf:=[diff(p df,x),diff(pdf,y),diff(pdf,z)]:\nmean:=[int(x*pdf_x,x=0..1),int(y*pdf_ y,y=0..1),int(z*pdf_z,z=0..1)]:\ncovariance:=array(1..3,1..3):\nfct:=[ pdf_x,pdf_y,pdf_z]:\nvar:=[x,y,z]:\nfor i from 1 to 3 do\n for j from 1 to 3 do\n covariance[i,j]:=int(int((var[i]-mean[i])*(var[j]-mean [j])*fct[i]*fct[j],var[i]=0..1),var[j]=0..1);\n od:\nod:\ncdf:=subs(u =x,v=y,w=z,int(int(int(pdf,x=0..u),y=0..v),z=0..w)):\nassume(t>0,t<1): \nqdf:=subs(x=t,y=t,z=t,cdf):\nvalnum:=x=0.6,y=0.6,z=0.6:\nevalf(subs( valnum,ddf));\nevalf(subs(valnum,pdf));\nevalf(subs(valnum,cdf));\neva lf(fsolve(subs(valnum,qdf)=0.95,t));\nevalf(subs(valnum,mean));\nevalf (map(_x->subs(valnum,_x),covariance));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"\"!F%F$F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"\"\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$;#!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+DdZI)*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"+ ++++]!#5F$F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7%7%$\"+LL LL$)!#6$\"\"!F,F+7%F+F(F+7%F+F+F(Q(pprint56\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 711 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidIndependentCopula.txt000066400000000000000000000026671307543307100235010ustar00rootroot00000000000000> restart: > with(Statistics): > X:=Uniform(0,1): > pdf:=PDF(X,x)*PDF(X,y)*PDF(X,z): > pdf_x:=int(int(pdf,y=0..1),z=0..1): > pdf_y:=int(int(pdf,z=0..1),x=0..1): > pdf_z:=int(int(pdf,x=0..1),y=0..1): > pdf:=pdf_x*pdf_y*pdf_z: > ddf:=[diff(pdf,x),diff(pdf,y),diff(pdf,z)]: > mean:=[int(x*pdf_x,x=0..1),int(y*pdf_y,y=0..1),int(z*pdf_z,z=0..1)]: > covariance:=array(1..3,1..3): > fct:=[pdf_x,pdf_y,pdf_z]: > var:=[x,y,z]: > for i from 1 to 3 do > for j from 1 to 3 do > > covariance[i,j]:=int(int((var[i]-mean[i])*(var[j]-mean[j])*fct[i]*fct[ > j],var[i]=0..1),var[j]=0..1); > od: > od: > cdf:=subs(u=x,v=y,w=z,int(int(int(pdf,x=0..u),y=0..v),z=0..w)): > assume(t>0,t<1): > qdf:=subs(x=t,y=t,z=t,cdf): > valnum:=x=0.6,y=0.6,z=0.6: > evalf(subs(valnum,ddf)); > evalf(subs(valnum,pdf)); > evalf(subs(valnum,cdf)); > evalf(fsolve(subs(valnum,qdf)=0.95,t)); > evalf(subs(valnum,mean)); > evalf(map(_x->subs(valnum,_x),covariance)); [0., 0., 0.] 1. 0.216 0.9830475725 [0.5000000000, 0.5000000000, 0.5000000000] [0.08333333333 0. 0. ] [ ] [ 0. 0.08333333333 0. ] [ ] [ 0. 0. 0.08333333333] > openturns-1.9/validation/src/ValidInverseIsoprobabilisticTransformationEllipticalCopula.mws000066400000000000000000000054371307543307100330200ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 339 "restart:\nDigits:=2 0:\nwith(Statistics):\nX1:=RandomVariable(Uniform(-1,2)):\nCDF1:=CDF(X 1,x1):\nX2:=RandomVariable(Gamma(1/2,2)):\nCDF2:=CDF(X2,x2):\nX3:=Rand omVariable(Beta(r,t-r)):\nCDF3:=subs(t3=((x3+1)/3),r=2,t=5,CDF(X3,t3)) :\nQDF1:=proc(q)\n fsolve(CDF1=q,x1)\nend:\nQDF2:=proc(q)\n fsolve(C DF2=q,x2)\nend:\nQDF3:=proc(q)\n fsolve(CDF3=q,x3)\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 762 "vars:=Su1,S2,S3:\nfcns:=S1,S2,S3: \nS:=array(1..3):\nX:=[QDF1,CDF2,CDF3]:\nDT:=array(1..3,1..3):\nD2T:=a rray(1..3,1..3,1..3):\nT1:=evalf(subs(u=CDF1,PHIInv)):\nT2:=evalf(subs (u=CDF2,PHIInv)):\nT3:=evalf(subs(u=CDF3,PHIInv)):\nfor i from 1 to 3 \+ do\n T[i] := fcns[i]:\nod:\nfor i from 1 to 3 do\n for j from 1 to 3 do\n DT[i, j] := diff(fcns[j], vars[i]):\n od:\nod:\nfor i from 1 to 3 do\n for j from 1 to 3 do\n for k from 1 to 3 do\n D2T[ i, j, k] := diff(diff(fcns[k],vars[j]), vars[i]):\n od:\n od:\nod: \nprint(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),U));\nprint(map(_ x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),T));\nprint(map(_x->evalf(subs (x1=1.0,x2=1.0,x3=1.0,_x)),DT));\nprint(map(_x->evalf(subs(x1=1.0,x2=1 .0,x3=1.0,_x)),D2T));\nevalf(subs(x3=1,diff(CDF3,x3$2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"5mmmmmmmmmm!#?$\"5LC>;!H]T*RfF&$\"5))))))) )))))))))))))F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#7%$\"5= !\\daH*HF2V!#?$\"5#)**GFBQ)pprint316\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7%7%$\"5#)pp&3i5*en\"*!#?$ \"\"!F,F+7%F+$\"5u)o@(**\\d'eR\"!#>F+7%F+F+$\"5FhQ)pprint336\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!5ZWWWWWWWWW!#?" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 54 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidInverseIsoprobabilisticTransformationEllipticalCopula.txt000066400000000000000000000046131307543307100330240ustar00rootroot00000000000000> restart: > Digits:=20: > with(Statistics): > X1:=RandomVariable(Uniform(-1,2)): > CDF1:=CDF(X1,x1): > X2:=RandomVariable(Gamma(1/2,2)): > CDF2:=CDF(X2,x2): > X3:=RandomVariable(Beta(r,t-r)): > CDF3:=subs(t3=((x3+1)/3),r=2,t=5,CDF(X3,t3)): > QDF1:=proc(q) > fsolve(CDF1=q,x1) > end: > QDF2:=proc(q) > fsolve(CDF2=q,x2) > end: > QDF3:=proc(q) > fsolve(CDF3=q,x3) > end: > vars:=Su1,S2,S3: > fcns:=S1,S2,S3: > S:=array(1..3): > X:=[QDF1,CDF2,CDF3]: > DT:=array(1..3,1..3): > D2T:=array(1..3,1..3,1..3): > T1:=evalf(subs(u=CDF1,PHIInv)): > T2:=evalf(subs(u=CDF2,PHIInv)): > T3:=evalf(subs(u=CDF3,PHIInv)): > for i from 1 to 3 do > T[i] := fcns[i]: > od: > for i from 1 to 3 do > for j from 1 to 3 do > DT[i, j] := diff(fcns[j], vars[i]): > od: > od: > for i from 1 to 3 do > for j from 1 to 3 do > for k from 1 to 3 do > D2T[i, j, k] := diff(diff(fcns[k],vars[j]), vars[i]): > od: > od: > od: > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),U)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),T)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),DT)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),D2T)); > evalf(subs(x3=1,diff(CDF3,x3$2))); [0.66666666666666666666, 0.59399415029016192433, 0.88888888888888888888] [0.43072729929545749018, 0.23783161172327289982, 1.2206403488473496984] [0.91675891062085696982 , 0. , 0.] [ ] [0. , 1.3958657499972168874 , 0.] [ ] [0. , 0. , 1.5644348483337176127] array(1 .. 3, 1 .. 3, 1 .. 3, [ (1, 1, 1) = 0.36200342352556526451 (1, 1, 2) = 0. (1, 1, 3) = 0. (1, 2, 1) = 0. (1, 2, 2) = 0. (1, 2, 3) = 0. (1, 3, 1) = 0. (1, 3, 2) = 0. (1, 3, 3) = 0. (2, 1, 1) = 0. (2, 1, 2) = 0. (2, 1, 3) = 0. (2, 2, 1) = 0. (2, 2, 2) = -0.93246484095220475381 (2, 2, 3) = 0. (2, 3, 1) = 0. (2, 3, 2) = 0. (2, 3, 3) = 0. (3, 1, 1) = 0. (3, 1, 2) = 0. (3, 1, 3) = 0. (3, 2, 1) = 0. (3, 2, 2) = 0. (3, 2, 3) = 0. (3, 3, 1) = 0. (3, 3, 2) = 0. (3, 3, 3) = 0.6408117548914454467 ]) -0.44444444444444444447 > openturns-1.9/validation/src/ValidInverseNatafCopula.mws000066400000000000000000000074761307543307100236230ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 405 "restart:\nwith(Line arAlgebra):\nL:=<|>;\nU:=;\nZ:=L.U;\nS:=< F(Z[1]),F(Z[2])>;\nJ:=array(1..2,1..2):\nfor i from 1 to 2 do\n for j from 1 to 2 do\n J[i, j] := diff(S[i],u[j]);\n od:\nod:\nprint(J) ;\nH:=array(1..2,1..2,1..2):\nfor i from 1 to 2 do\n for j from 1 to \+ 2 do\n for k from 1 to 2 do\n H[i, j, k] := diff(diff(S[i],u[j ]),u[k]);\n od:\n od:\nod:\nprint(H);\nL.Transpose(L);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG-%'RTABLEG6%\"*%)oxN\"-%'MATRIXG6#7$7$ %$L11G%$L12G7$%$L21G%$L22G%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"UG-%'RTABLEG6%\"*!Gaa8-%'MATRIXG6#7$7#&%\"uG6#\"\"\"7#&F/6#\"\"#& %'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"ZG-%'RTABL EG6%\"*gE&f8-%'MATRIXG6#7$7#,&*&%$L11G\"\"\"&%\"uG6#F1F1F1*&%$L12GF1&F 36#\"\"#F1F17#,&*&%$L21GF1F2F1F1*&%$L22GF1F7F1F1&%'VectorG6#%'columnG " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"SG-%'RTABLEG6%\"*)=(*f8-%'MATR IXG6#7$7#-%\"FG6#,&*&%$L11G\"\"\"&%\"uG6#F4F4F4*&%$L12GF4&F66#\"\"#F4F 47#-F/6#,&*&%$L21GF4F5F4F4*&%$L22GF4F:F4F4&%'VectorG6#%'columnG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7$7$*&--%\"DG6#%\"FG6#,&*& %$L11G\"\"\"&%\"uG6#F2F2F2*&%$L12GF2&F46#\"\"#F2F2F2F1F2*&F)F2F7F27$*& -F*6#,&*&%$L21GF2F3F2F2*&%$L22GF2F8F2F2F2FBF2*&F>F2FDF2Q)pprint286\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%&ARRAYG6$7%;\"\"\"\"\"#F'F'7*/6%F( F(F(*&---%#@@G6$%\"DGF)6#%\"FG6#,&*&%$L11GF(&%\"uG6#F(F(F(*&%$L12GF(&F ;6#F)F(F(F()F9F)F(/6%F(F(F)*(F.F(F>F(F9F(/6%F(F)F(FD/6%F(F)F)*&F.F()F> F)F(/6%F)F(F(*&-F/6#,&*&%$L21GF(F:F(F(*&%$L22GF(F?F(F(F()FRF)F(/6%F)F( F)*(FNF(FTF(FRF(/6%F)F)F(FX/6%F)F)F)*&FNF()FTF)F(Q)pprint296\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*+\"Qi8-%'MATRIXG6#7$7$, &*$)%$L11G\"\"#\"\"\"F1*$)%$L12GF0F1F1,&*&F/F1%$L21GF1F1*&F4F1%$L22GF1 F17$F5,&*$)F7F0F1F1*$)F9F0F1F1%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 157 "D2:=array(1..2,1..2,1..2):\nfor i from 1 to 2 do\n \+ for j from 1 to 2 do\n for k from 1 to 2 do\n D2[i, j, k] := H [k, j, i];\n od:\n od:\nod:\nprint(D2);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%&ARRAYG6$7%;\"\"\"\"\"#F'F'7*/6%F(F(F(*&---%#@@G6$%\" DGF)6#%\"FG6#,&*&%$L11GF(&%\"uG6#F(F(F(*&%$L12GF(&F;6#F)F(F(F()F9F)F(/ 6%F(F(F)*&-F/6#,&*&%$L21GF(F:F(F(*&%$L22GF(F?F(F(F()FIF)F(/6%F(F)F(*(F .F(F>F(F9F(/6%F(F)F)*(FEF(FKF(FIF(/6%F)F(F(FO/6%F)F(F)FR/6%F)F)F(*&F.F ()F>F)F(/6%F)F)F)*&FEF()FKF)F(Q)pprint306\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 135776884 135454280 135952660 135997188 136238100 }{RTABLE M7R0 I6RTABLE_SAVE/135776884X,%)anythingG6"6"[gl!"%!!!#%"#"#%$L11G%$L21G%$L12G%$L22G F& } {RTABLE M7R0 I6RTABLE_SAVE/135454280X*%)anythingG6"6"[gl!#%!!!"#"#&%"uG6#"""&F(6#""#F& } {RTABLE M7R0 I6RTABLE_SAVE/135952660X*%)anythingG6"6"[gl!#%!!!"#"#,&*&%$L11G"""&%"uG6#F*F*F* *&%$L12GF*&F,6#""#F*F*,&*&%$L21GF*F+F*F**&%$L22GF*F0F*F*F& } {RTABLE M7R0 I6RTABLE_SAVE/135997188X*%)anythingG6"6"[gl!#%!!!"#"#-%"FG6#,&*&%$L11G"""&%"uG6 #F-F-F-*&%$L12GF-&F/6#""#F-F--F(6#,&*&%$L21GF-F.F-F-*&%$L22GF-F3F-F-F& } {RTABLE M7R0 I6RTABLE_SAVE/136238100X,%)anythingG6"6"[gl!"%!!!#%"#"#,&*$%$L11G""#"""*$%$L12G F*F+,&*&F)F+%$L21GF+F+*&F-F+%$L22GF+F+F.,&*$F0F*F+*$F2F*F+F& } openturns-1.9/validation/src/ValidInverseNatafCopula.txt000066400000000000000000000051361307543307100236230ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > L:=<|>; > U:=; > Z:=L.U; > S:=; > J:=array(1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > J[i, j] := diff(S[i],u[j]); > od: > od: > print(J); > H:=array(1..2,1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > for k from 1 to 2 do > H[i, j, k] := diff(diff(S[i],u[j]),u[k]); > od: > od: > od: > print(H); > L.Transpose(L); [L11 L12] L := [ ] [L21 L22] [u[1]] U := [ ] [u[2]] [L11 u[1] + L12 u[2]] Z := [ ] [L21 u[1] + L22 u[2]] [F(L11 u[1] + L12 u[2])] S := [ ] [F(L21 u[1] + L22 u[2])] [D(F)(L11 u[1] + L12 u[2]) L11 , D(F)(L11 u[1] + L12 u[2]) L12] [D(F)(L21 u[1] + L22 u[2]) L21 , D(F)(L21 u[1] + L22 u[2]) L22] array(1 .. 2, 1 .. 2, 1 .. 2, [ 2 (1, 1, 1) = %2 L11 (1, 1, 2) = %2 L12 L11 (1, 2, 1) = %2 L12 L11 2 (1, 2, 2) = %2 L12 2 (2, 1, 1) = %1 L21 (2, 1, 2) = %1 L22 L21 (2, 2, 1) = %1 L22 L21 2 (2, 2, 2) = %1 L22 ]) (2) %1 := (D )(F)(L21 u[1] + L22 u[2]) (2) %2 := (D )(F)(L11 u[1] + L12 u[2]) [ 2 2 ] [ L11 + L12 L11 L21 + L12 L22] [ ] [ 2 2 ] [L11 L21 + L12 L22 L21 + L22 ] > D2:=array(1..2,1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > for k from 1 to 2 do > D2[i, j, k] := H[k, j, i]; > od: > od: > od: > print(D2); array(1 .. 2, 1 .. 2, 1 .. 2, [ 2 (1, 1, 1) = %2 L11 2 (1, 1, 2) = %1 L21 (1, 2, 1) = %2 L12 L11 (1, 2, 2) = %1 L22 L21 (2, 1, 1) = %2 L12 L11 (2, 1, 2) = %1 L22 L21 2 (2, 2, 1) = %2 L12 2 (2, 2, 2) = %1 L22 ]) (2) %1 := (D )(F)(L21 u[1] + L22 u[2]) (2) %2 := (D )(F)(L11 u[1] + L12 u[2]) > openturns-1.9/validation/src/ValidInverseNatafCopula2.mws000066400000000000000000000101571307543307100236730ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 254 "restart:\nDigits:=2 0:\nwith(Statistics):\nG:=RandomVariable(Normal(0,1)):\nX1:=RandomVari able(Uniform(-1,2)):\nCDF1:=CDF(X1,x1);\nX2:=RandomVariable(Gamma(1/2, 2)):\nCDF2:=CDF(X2,x2);\nX3:=RandomVariable(Beta(r,t-r)):\nCDF3:=subs( t3=((x3+1)/3),r=2,t=5,CDF(X3,t3));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%%CDF1G-%*PIECEWISEG6%7$\"\"!2%#x1G!\"\"7$,&#\"\"\"\"\"$F0*&F1F,F+F0F 02F+\"\"#7$F0%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF2G- %*PIECEWISEG6$7$\"\"!1%#x2GF)7$,(-%$expG6#,$*&\"\"#\"\"\"F+F4!\"\"F5*( F3F4F.F4F+F4F5F4F42F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF3G-%* PIECEWISEG6%7$\"\"!2,$*&\"\"$!\"\"%#x3G\"\"\"F0#F.F-7$,$*&#F0\"\"#F0*( -%%BetaG6$F6F-F.,&*&F-F.F/F0F0#F0F-F0F6-%*hypergeomG6%7$F6!\"#7#F-F;F0 F0F02F+#F6F-7$F0%*otherwiseG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 101 "X1:=evalf(subs(subs(x1=1,CDF1)));\nX2:=evalf(subs(subs(x2=1,CDF 2)));\nX3:=evalf(subs(subs(x3=1,CDF3)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#X1G$\"5nmmmmmmmmm!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#X2 G$\"5LC>;!H]T*Rf!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#X3G$\"5*)))) )))))))))))))))!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 80 "u1:=f solve(CDF(G,x)=X1,x);\nu2:=fsolve(CDF(G,x)=X2,x);\nu3:=fsolve(CDF(G,x) =X3,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#u1G$\"5A!\\daH*HF2V!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#u2G$\"5&)**GFB%#u3G$\"5$)p\\t%)[.k?7!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 110 "INEC_g1:=evalf(subs(x=u1,PDF(G,x)));\nIN EC_g2:=evalf(subs(x=u2,PDF(G,x)));\nINEC_g3:=evalf(subs(x=u3,PDF(G,x)) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(INEC_g1G$\"5IAxJvYx*fj$!#?" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(INEC_g2G$\"5H%Q@*ymZ%(INEC_g3G$\"5(3\"oI?65&R*=!#?" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 134 "INEC_h1:=evalf(subs(x=u1,di ff(PDF(G,x),x)));\nINEC_h2:=evalf(subs(x=u2,diff(PDF(G,x),x)));\nINEC_ h3:=evalf(subs(x=u3,diff(PDF(G,x),x)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(INEC_h1G$!5O\"[O.(*[Bhc\"!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(INEC_h2G$!5MNn+I`b_B#*!#@" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%( INEC_h3G$!5Gx.Z,BI$=J#!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 128 "IMT_g1:=1/evalf(subs(x1=1,diff(CDF1,x1)));\nIMT_g2:=1/evalf(subs( x2=1,diff(CDF2,x2)));\nIMT_g3:=1/evalf(subs(x3=1,diff(CDF3,x3)));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'IMT_g1G$\"5+++++++++I!#>" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'IMT_g2G$\"5pbiEtCSEZ=!#>" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'IMT_g3G$\"5,+++++++vL!#>" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 233 "IMT_h1:=-evalf(subs(x1=1,diff(CDF1,x1$2)))/ev alf(subs(x1=1,diff(CDF1,x1)))^3;\nIMT_h2:=-evalf(subs(x2=1,diff(CDF2,x 2$2)))/evalf(subs(x2=1,diff(CDF2,x2)))^3;\nIMT_h3:=-evalf(subs(x3=1,di ff(CDF3,x3$2)))/evalf(subs(x3=1,diff(CDF3,x3)))^3;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%'IMT_h1G$!\"!\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'IMT_h2G$\"5E%\\^rqP%Q7M!#>" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% 'IMT_h3G$\"5-++++]Pf3 " 0 "" {MPLTEXT 1 0 18 "diff(f(g(x)),x$2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&---%#@@G 6$%\"DG\"\"#6#%\"fG6#-%\"gG6#%\"xG\"\"\")-%%diffG6$F/F2F+F3F3*&--F*F,F .F3-F66$F/-%\"$G6$F2F+F3F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 98 "IMT_h1*INEC_g1^2+IMT_g1*INEC_h1;\nIMT_h2*INEC_g2^2+IMT_g2*INEC_h2; \nIMT_h3*INEC_g3^2+IMT_g3*INEC_h3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# $!53W%45\"p/P)p%!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"5*f#pbcV\"z% GM!#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!59-?V>-Xit;!#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 9 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidInverseNatafCopula2.txt000066400000000000000000000066641307543307100237140ustar00rootroot00000000000000> restart: > Digits:=20: > with(Statistics): > G:=RandomVariable(Normal(0,1)): > X1:=RandomVariable(Uniform(-1,2)): > CDF1:=CDF(X1,x1); > X2:=RandomVariable(Gamma(1/2,2)): > CDF2:=CDF(X2,x2); > X3:=RandomVariable(Beta(r,t-r)): > CDF3:=subs(t3=((x3+1)/3),r=2,t=5,CDF(X3,t3)); { 0 x1 < -1 { { x1 CDF1 := { 1/3 + ---- x1 < 2 { 3 { { 1 otherwise { 0 x2 <= 0 CDF2 := { { -exp(-2 x2) - 2 exp(-2 x2) x2 + 1 0 < x2 { { CDF3 := { x3 { 0 , ---- < -1/3 { 3 / x3 \2 x3 |---- + 1/3| hypergeom([2, -2], [3], ---- + 1/3) \ 3 / 3 1/2 ------------------------------------------------- , Beta(2, 3) x3 ---- < 2/3 3 1 , otherwise > X1:=evalf(subs(subs(x1=1,CDF1))); > X2:=evalf(subs(subs(x2=1,CDF2))); > X3:=evalf(subs(subs(x3=1,CDF3))); X1 := 0.66666666666666666667 X2 := 0.59399415029016192433 X3 := 0.88888888888888888889 > u1:=fsolve(CDF(G,x)=X1,x); > u2:=fsolve(CDF(G,x)=X2,x); > u3:=fsolve(CDF(G,x)=X3,x); u1 := 0.43072729929545749022 u2 := 0.23783161172327289985 u3 := 1.2206403488473496983 > INEC_g1:=evalf(subs(x=u1,PDF(G,x))); > INEC_g2:=evalf(subs(x=u2,PDF(G,x))); > INEC_g3:=evalf(subs(x=u3,PDF(G,x))); INEC_g1 := 0.36359977467531772230 INEC_g2 := 0.38781747667892138429 INEC_g3 := 0.18939510112030681087 > INEC_h1:=evalf(subs(x=u1,diff(PDF(G,x),x))); > INEC_h2:=evalf(subs(x=u2,diff(PDF(G,x),x))); > INEC_h3:=evalf(subs(x=u3,diff(PDF(G,x),x))); INEC_h1 := -0.15661234897033648136 INEC_h2 := -0.092235255533000673534 INEC_h3 := -0.23118330230147037728 > IMT_g1:=1/evalf(subs(x1=1,diff(CDF1,x1))); > IMT_g2:=1/evalf(subs(x2=1,diff(CDF2,x2))); > IMT_g3:=1/evalf(subs(x3=1,diff(CDF3,x3))); IMT_g1 := 3.0000000000000000000 IMT_g2 := 1.8472640247326625569 IMT_g3 := 3.3750000000000000001 > IMT_h1:=-evalf(subs(x1=1,diff(CDF1,x1$2)))/evalf(subs(x1=1,diff(CDF1,x > 1)))^3; > IMT_h2:=-evalf(subs(x2=1,diff(CDF2,x2$2)))/evalf(subs(x2=1,diff(CDF2,x > 2)))^3; > IMT_h3:=-evalf(subs(x3=1,diff(CDF3,x3$2)))/evalf(subs(x3=1,diff(CDF3,x > 3)))^3; IMT_h1 := -0. IMT_h2 := 3.4123843770715149426 IMT_h3 := 17.085937500000000002 > diff(f(g(x)),x$2); / 2 \ (2) /d \2 |d | (D )(f)(g(x)) |-- g(x)| + D(f)(g(x)) |--- g(x)| \dx / | 2 | \dx / > IMT_h1*INEC_g1^2+IMT_g1*INEC_h1; > IMT_h2*INEC_g2^2+IMT_g2*INEC_h2; > IMT_h3*INEC_g3^2+IMT_g3*INEC_h3; -0.46983704691100944408 0.34284791435655692599 -0.16736245021943200214 > openturns-1.9/validation/src/ValidInverseNormal.mw000066400000000000000000001235651307543307100224710ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZaLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2xhbWJkYUYnL0YwRj1GOS1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIjFGJ0Y5LUYjNiMtRmdvNiRRIjJGJ0Y5LyUubGluZXRoaWNrbmVzc0dGaW8vJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGY3AvJSliZXZlbGxlZEdGPUY1Rk9GZ24tRiw2JVEjbXVGJ0Zfb0Y5RmBvRlxwRjVGT0ZnbkZnbi1GLDYlUSJmRidGL0YyRmBvLUYsNiVRJGV4cEYnRl9vRjktSShtZmVuY2VkR0YkNiQtRiM2JS1GYnE2JC1GIzYjLUZkbzYoRlxvLUYjNiNGaHBGX3BGYXBGZHBGZnBGOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRmJxNiQtRiM2JkZmby1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmlyLUYsNiVRJXNxcnRGJ0Zfb0Y5LUZicTYkLUYjNiVGZm9GZXItRmRvNigtRiM2J0ZccEZeci1JJW1zdXBHRiQ2JS1GLDYlUSUmbXU7RidGX29GOUZqby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGXnItRiw2JVEidEYnRi9GMi1GIzYjRlxvRl9wRmFwRmRwRmZwRjlGOUY5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPRmduLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGXnVGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GLDYlUSJpRidGL0YyRmduLUY2Ni9RJWZyb21GJ0ZbdUZddUZfdUY7Rj5GQEZCRkRGRkZIRmpuRltvRmduRmZvRmduLUY2Ni9RI3RvRidGW3VGXXVGX3VGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GZ282JFEiNEYnRjlGZ24tRjY2L1EjZG9GJ0ZbdUZddUZfdUY7Rj5GQEZCRkRGRkZIRmpuRltvRk9GZ25GZ25GZ25GZ24tRiw2JVEiZ0YnRi9GMkZgby1GLDYlUSVkaWZmRidGL0YyLUZicTYkLUYjNidGW3EtRjY2LVEiLEYnRjlGO0ZndEZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRidGX3QtRjY2LVEiJEYnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZhdUY5RmR0Rk9GZ24tRiw2JVEmcHJpbnRGJ0YvRjItRmJxNiQtRiM2Iy1GYnE2Ji1GIzYmRmB2Rmp2LUYsNiVRJmV2YWxmRidGL0YyLUZicTYkLUYjNiQtRiw2JVElc3Vic0YnRi9GMi1GYnE2JC1GIzYnRl90LUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZnbzYkRl50RjlGanZGYHZGOUY5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGOUZkdEZPRmduLUY2Ni9RI29kRidGW3VGXXVGX3VGO0Y+RkBGQkZERkZGSEZqbkZbb0Y1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJiMiIiIiIiVGKyokLCZGK0YrSSJ0R0YnISM7I0YrIiIjIyEiIkYs NyQsJComLCYiIiJGJkkidEc2IiEjOyMhIiIiIiMtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywmI0YmIiIlRiYqJEYlI0YmRiwjRitGNUYmRiwkRiwiIiE= NyQsJiomLCYiIiJGJkkidEc2IiEjOyMhIiQiIiMtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywmI0YmIiIlRiYqJEYlI0YmRiwjISIiRjVGJiIjOyomRiVGOUYtRiZGNSQiIz8iIiE= NyQsKComLCYiIiJGJkkidEc2IiEjOyMhIiYiIiMtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywmI0YmIiIlRiYqJEYlI0YmRiwjISIiRjVGJiIkJVEqJkYlISIjRi1GJiIjJyoqJkYlIyEiJEYsRi1GJiIiKSQiJClbIiIh NyQsKiomLCYiIiJGJkkidEc2IiEjOyMhIigiIiMtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywmI0YmIiIlRiYqJEYlI0YmRiwjISIiRjVGJiImZ2AiKiZGJSEiJEYtRiYiJVNRKiZGJSMhIiZGLEYtRiYiJCVRKiZGJSEiI0YtRiYiIzskIiYrJz4iIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY2LUkobWZlbmNlZEdGJDYkLUYjNiUtRiw2JC1GIzYnLUkjbW5HRiQ2JFErMC4wMDM5MDYyNUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RIipGJ0Y4LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZBLyUpc3RyZXRjaHlHRkEvJSpzeW1tZXRyaWNHRkEvJShsYXJnZW9wR0ZBLyUubW92YWJsZWxpbWl0c0dGQS8lJ2FjY2VudEdGQS8lJ2xzcGFjZUdRLDAuMTY2NjY2N2VtRicvJSdyc3BhY2VHRlAtRiw2JC1GIzYtLUYsNiQtRiM2Ji1JI21pR0YkNiVRJGV4cEYnLyUnaXRhbGljR0ZBRjgtRiw2JC1GIzYnLUYsNiQtRiM2JS1GNTYkUSUwLjI1RidGOC8lK2V4ZWN1dGFibGVHRkFGOEY4LUY8Ni1RIitGJ0Y4Rj9GQkZERkZGSEZKRkwvRk9RLDAuMjIyMjIyMmVtRicvRlJGXHAtRiw2JC1GIzYlLUYsNiQtRiM2KC1GPDYtUSomdW1pbnVzMDtGJ0Y4Rj9GQkZERkZGSEZKRkxGW3BGXXBGY29GOy1GLDYkLUYjNiYtRmZuNiVRJXNxcnRGJ0ZpbkY4LUYsNiQtRiM2Jy1GLDYkLUYjNiUtRjU2JFEiMUYnRjhGZm9GOEY4RmhvLUYsNiQtRiM2KEZmcC1GNTYkUSMxNkYnRjhGOy1GZm42JVEidEYnL0ZqblEldHJ1ZUYnL0Y5USdpdGFsaWNGJ0Zmb0Y4RjhGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGOy1GLDYkLUYjNictRiw2JC1GIzYmRmZwLUY1NiRRIjhGJ0Y4RmZvRjhGOC1GPDYtUSIvRidGOEY/RkIvRkVGZnJGRkZIRkpGTEZORlFGaXBGZm9GOEY4RjtGaXJGO0ZpckY7RmlyRmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmhvLUYsNiQtRiM2JS1GLDYkLUYjNihGZnAtRjU2JFEkMC41RidGOEY7LUYsNiQtRiM2Ky1GLDYkLUYjNidGaXJGZHMtRiw2JC1GIzYnRmlwLUY8Ni1RIl5GJ0Y4Rj9GQkZERkZGSEZKRkwvRk9RLDAuMTExMTExMWVtRicvRlJGY3UtRiw2JC1GIzYlLUY1NiRRIjJGJ0Y4RmZvRjhGOEZmb0Y4RjhGZm9GOEY4RjtGV0Y7RmlyRjtGaXJGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGaG8tRiw2JC1GIzYlLUYsNiQtRiM2J0ZpdUY7LUYsNiQtRiM2KS1GLDYkLUYjNictRiw2JC1GIzYlLUYsNiQtRiM2J0Zhc0Y7LUYsNiQtRiM2J0ZndEZkc0ZbdUZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZoby1GLDYkLUYjNiUtRiw2JC1GIzYoRmZwRml1RjstRiw2JC1GIzYnLUYsNiQtRiM2KUZpckY7RmlwRjtGaXJGZm9GOEY4RmRzLUYsNiQtRiM2J0ZbdUZfdUZldUZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGZm9GOEY4RjtGV0Y7RmlyRmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmhvLUYsNiQtRiM2JS1GLDYkLUYjNihGZnBGY29GOy1GLDYkLUYjNitGV0Y7RmlyRjtGZ3RGO0ZpckZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZoby1GLDYkLUYjNiUtRiw2JC1GIzYnRmFzRjstRiw2JC1GIzYnLUYsNiQtRiM2J0ZndEZfdUZldUZmb0Y4RjhGO0ZXRmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmhvLUYsNiQtRiM2JS1GLDYkLUYjNihGZnBGaXVGOy1GLDYkLUYjNictRiw2JC1GIzYrLUYsNiQtRiM2JS1GLDYkLUYjNidGYXNGOy1GLDYkLUYjNidGaHZGZHNGW3VGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGaG8tRiw2JC1GIzYlLUYsNiQtRiM2KEZmcEZfckY7LUYsNiQtRiM2Jy1GLDYkLUYjNilGaXJGO0ZpcEY7Rmd0RmZvRjhGOEZkc0ZoeEZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZoby1GLDYkLUYjNiUtRiw2JC1GIzYoRmZwRml1RjstRiw2JC1GIzYnLUYsNiQtRiM2KS1GLDYkLUYjNiUtRiw2JC1GIzYnRmFzRjstRiw2JC1GIzYpRmd0RjtGaXBGO0ZpckZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZoby1GLDYkLUYjNictRiw2JC1GIzYnRmlyRl91RmV1RmZvRjhGOEY7RmlyRmZvRjhGOEZoby1GLDYkLUYjNiUtRiw2JC1GIzYnRmFzRjstRiw2JC1GIzYpRmd0RjtGaXJGO0ZpcEZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGZHNGaHhGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGaG8tRiw2JC1GIzYlLUYsNiQtRiM2J0ZpdUY7LUYsNiQtRiM2Jy1GLDYkLUYjNiUtRiw2JC1GIzYnLUY1NiRRIjRGJ0Y4RjstRiw2JC1GIzYvRmlyRjtGaXBGO0ZpckY7RmlyRjtGaXBGO0ZbdUZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZkcy1GLDYkLUYjNidGaHhGX3VGZXVGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmZvRjhGOEY7RldGZm9GOEY4RmZvRjhGOEZmb0Y4RjhGaG8tRiw2JC1GIzYlLUYsNiQtRiM2J0ZgdEY7LUYsNiQtRiM2KUZXRjtGaXJGO0ZodkZmb0Y4RjhGZm9GOEY4RmZvRjhGOEZoby1GLDYkLUYjNiUtRiw2JC1GIzYoRmZwLUY1NiRRJjAuMTI1RidGOEY7LUYsNiQtRiM2K0ZXRjtGaXJGO0ZpckY7Rmd0RmZvRjhGOEZmb0Y4RjhGZm9GOEY4RmhvLUYsNiQtRiM2JS1GLDYkLUYjNidGaGFsRjstRiw2JC1GIzYpRmd0RjtGV0Y7Rmd0RmZvRjhGOEZmb0Y4RjhGZm9GOEY4LUY8Ni1RIjtGJ0Y4Rj8vRkNGZnJGREZGRkhGSkZML0ZPUSYwLjBlbUYnL0ZSUSwwLjI3Nzc3NzhlbUYnRmZvRjg= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCoqKCQiKysrKys7ISIpIiIiLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJiQiI0QhIiNGJyomRjBGJyksJkYnRicqJiIjO0YnSSJ0R0YtRichIiIjRiciIiNGJ0Y5RicpRjVGO0Y5RicqKCQiJyshWyUhIiRGJylGNSMiIiZGO0Y5RihGJ0YnKigkIiYhM1lGOUYnKUY1IiIkRjlGKEYnRicqKCImZ2AiRicpRjUjIiIoRjtGOUYoRidGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/ValidIshigami.mws000066400000000000000000000034741307543307100216160ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "restart:\nf:=sin(x1 )+a*(sin(x2))^2+b*x3^4*sin(x1);\np:=1/(2*Pi)^3;\nM:=int(int(int(f*p,x1 =-Pi..Pi),x2=-Pi..Pi),x3=-Pi..Pi);\nDt:=int(int(int((f-M)^2*p,x1=-Pi.. Pi),x2=-Pi..Pi),x3=-Pi..Pi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG ,(-%$sinG6#%#x1G\"\"\"*&%\"aGF*)-F'6#%#x2G\"\"#F*F**(%\"bGF*)%#x3G\"\" %F*F&F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG,$*&\"\"\"F'*&\"\") F')%#PiG\"\"$F'!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"MG,$*&\" \"#!\"\"%\"aG\"\"\"F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#DtG,**&#\" \"\"\"#=F(*&)%\"bG\"\"#F()%#PiG\"\")F(F(F(*&#F(\"\"&F(*&F,F()F/\"\"%F( F(F(*&#F(F0F(*$)%\"aGF-F(F(F(#F(F-F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 157 "evalf(subs(a=7,b=0.1,[M,Dt]));\nD1:=evalf(subs(a=7,b =0.1,[b*Pi^4/5+b^2*Pi^8/50+1/2,a^2/8,0]/Dt));\nD2:=evalf(subs(a=7,b=0. 1,[0,b^2*Pi^8/18-b^2*Pi^8/50,0]/Dt));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++N!\"*$\"+&zeWQ\"!\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %#D1G7%$\"+7>0RJ!#5$\"+X96CWF($\"\"!F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#D2G7%$\"\"!F'$\"+Um$oV#!#5F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "D1[1]+D1[2]+D1[3]+D2[1]+D2[2]+D2[3];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+**********!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 157 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidIsoProbabilisicTransformationEllipticalCopula.mws000066400000000000000000000065161307543307100312370ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 223 "restart:\nDigits:=2 0:\nwith(Statistics):\nX1:=RandomVariable(Uniform(-1,2)):\nCDF1:=CDF(X 1,x1);\nX2:=RandomVariable(Gamma(1/2,2)):\nCDF2:=CDF(X2,x2);\nX3:=Rand omVariable(Beta(r,t-r)):\nCDF3:=subs(t3=((x3+1)/3),r=2,t=5,CDF(X3,t3)) ;\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF1G-%*PIECEWISEG6%7$\"\"!2 %#x1G!\"\"7$,&#\"\"\"\"\"$F0*&F1F,F+F0F02F+\"\"#7$F0%*otherwiseG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF2G-%*PIECEWISEG6$7$\"\"!1%#x2GF) 7$,(-%$expG6#,$*&\"\"#\"\"\"F+F4!\"\"F5*(F3F4F.F4F+F4F5F4F42F)F+" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF3G-%*PIECEWISEG6%7$\"\"!2,$*&\" \"$!\"\"%#x3G\"\"\"F0#F.F-7$,$*&#F0\"\"#F0*(-%%BetaG6$F6F-F.,&*&F-F.F/ F0F0#F0F-F0F6-%*hypergeomG6%7$F6!\"#7#F-F;F0F0F02F+#F6F-7$F0%*otherwis eG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "PHIInv:=Quantile(Norm al(0,1),u);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'PHIInvG*&-%'RootOfG6 #,(-%$erfG6#%#_ZG!\"\"\"\"\"F.*&\"\"#F/%\"uGF/F/F/F1#F/F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 761 "vars:=x1,x2,x3:\nfcns:=T1,T2,T3:\n T:=array(1..3):\nU:=[CDF1,CDF2,CDF3]:\nDT:=array(1..3,1..3):\nD2T:=arr ay(1..3,1..3,1..3):\nT1:=evalf(subs(u=CDF1,PHIInv)):\nT2:=evalf(subs(u =CDF2,PHIInv)):\nT3:=evalf(subs(u=CDF3,PHIInv)):\nfor i from 1 to 3 do \n T[i] := fcns[i]:\nod:\nfor i from 1 to 3 do\n for j from 1 to 3 d o\n DT[i, j] := diff(fcns[j], vars[i]):\n od:\nod:\nfor i from 1 t o 3 do\n for j from 1 to 3 do\n for k from 1 to 3 do\n D2T[i, j, k] := diff(diff(fcns[k],vars[j]), vars[i]):\n od:\n od:\nod:\n print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),U));\nprint(map(_x- >evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),T));\nprint(map(_x->evalf(subs(x 1=1.0,x2=1.0,x3=1.0,_x)),DT));\nprint(map(_x->evalf(subs(x1=1.0,x2=1.0 ,x3=1.0,_x)),D2T));\nevalf(subs(x3=1,diff(CDF3,x3$2)));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%$\"5mmmmmmmmmm!#?$\"5LC>;!H]T*RfF&$\"5)))))))) ))))))))))))F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#7%$\"5=! \\daH*HF2V!#?$\"5#)**GFBQ)pprint316\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7%7%$\"5#)pp&3i5*en\"*!#?$ \"\"!F,F+7%F+$\"5u)o@(**\\d'eR\"!#>F+7%F+F+$\"5FhQ)pprint336\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!5ZWWWWWWWWW!#?" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 9 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidIsoProbabilisicTransformationEllipticalCopula.txt000066400000000000000000000063721307543307100312500ustar00rootroot00000000000000> restart: > Digits:=20: > with(Statistics): > X1:=RandomVariable(Uniform(-1,2)): > CDF1:=CDF(X1,x1); > X2:=RandomVariable(Gamma(1/2,2)): > CDF2:=CDF(X2,x2); > X3:=RandomVariable(Beta(r,t-r)): > CDF3:=subs(t3=((x3+1)/3),r=2,t=5,CDF(X3,t3)); > { 0 x1 < -1 { { x1 CDF1 := { 1/3 + ---- x1 < 2 { 3 { { 1 otherwise { 0 x2 <= 0 CDF2 := { { -exp(-2 x2) - 2 exp(-2 x2) x2 + 1 0 < x2 { { CDF3 := { x3 { 0 , ---- < -1/3 { 3 / x3 \2 x3 |---- + 1/3| hypergeom([2, -2], [3], ---- + 1/3) \ 3 / 3 1/2 ------------------------------------------------- , Beta(2, 3) x3 ---- < 2/3 3 1 , otherwise > PHIInv:=Quantile(Normal(0,1),u); 1/2 PHIInv := RootOf(-erf(_Z) - 1 + 2 u) 2 > vars:=x1,x2,x3: > fcns:=T1,T2,T3: > T:=array(1..3): > U:=[CDF1,CDF2,CDF3]: > DT:=array(1..3,1..3): > D2T:=array(1..3,1..3,1..3): > T1:=evalf(subs(u=CDF1,PHIInv)): > T2:=evalf(subs(u=CDF2,PHIInv)): > T3:=evalf(subs(u=CDF3,PHIInv)): > for i from 1 to 3 do > T[i] := fcns[i]: > od: > for i from 1 to 3 do > for j from 1 to 3 do > DT[i, j] := diff(fcns[j], vars[i]): > od: > od: > for i from 1 to 3 do > for j from 1 to 3 do > for k from 1 to 3 do > D2T[i, j, k] := diff(diff(fcns[k],vars[j]), vars[i]): > od: > od: > od: > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),U)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),T)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),DT)); > print(map(_x->evalf(subs(x1=1.0,x2=1.0,x3=1.0,_x)),D2T)); > evalf(subs(x3=1,diff(CDF3,x3$2))); [0.66666666666666666666, 0.59399415029016192433, 0.88888888888888888888] [0.43072729929545749018, 0.23783161172327289982, 1.2206403488473496984] [0.91675891062085696982 , 0. , 0.] [ ] [0. , 1.3958657499972168874 , 0.] [ ] [0. , 0. , 1.5644348483337176127] array(1 .. 3, 1 .. 3, 1 .. 3, [ (1, 1, 1) = 0.36200342352556526451 (1, 1, 2) = 0. (1, 1, 3) = 0. (1, 2, 1) = 0. (1, 2, 2) = 0. (1, 2, 3) = 0. (1, 3, 1) = 0. (1, 3, 2) = 0. (1, 3, 3) = 0. (2, 1, 1) = 0. (2, 1, 2) = 0. (2, 1, 3) = 0. (2, 2, 1) = 0. (2, 2, 2) = -0.93246484095220475381 (2, 2, 3) = 0. (2, 3, 1) = 0. (2, 3, 2) = 0. (2, 3, 3) = 0. (3, 1, 1) = 0. (3, 1, 2) = 0. (3, 1, 3) = 0. (3, 2, 1) = 0. (3, 2, 2) = 0. (3, 2, 3) = 0. (3, 3, 1) = 0. (3, 3, 2) = 0. (3, 3, 3) = 0.6408117548914454467 ]) -0.44444444444444444447 > openturns-1.9/validation/src/ValidLaplace.mws000066400000000000000000000103441307543307100214170ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 930 "restart:\nwith(Stat istics):\nassume(lambda>0):\nlaplace_:=RandomVariable(Laplace(mu,lambd a)):\npdf:=subs(u=x,PDF(laplace_,u));\nddf:=factor(diff(pdf,x));\ncdf: =subs(u=x,CDF(laplace_,u));\ncf:=CharacteristicFunction(laplace_,x);\n mu_:=Mean(laplace_);\nevalf[25](mu_);\nvar_:=Variance(laplace_);\neval f[25](sqrt(var_));\nevalf[25](var_);\nskew_:=simplify((Skewness(laplac e_)));\nevalf[25](skew_);\nkurt_:=simplify((Kurtosis(laplace_)));\neva lf[25](kurt_);\nqdf:=Quantile(laplace_,p);\npdfgr:=[diff(pdf,lambda),d iff(pdf,mu)];\ncdfgr:=[diff(cdf,lambda),diff(cdf,mu)];\nvalnum:=lambda =1.5,mu=0.5;\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf) );\nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,cf));\nevalf(s ubs(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(subs(valnum,x=1,cdfgr));\ne valf(subs(valnum,p=0.95,qdf));\nevalf(subs(valnum,mu_));\nevalf(subs(v alnum,sqrt(var_)));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kur t_));\nevalf(subs(valnum,var_));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%$pdfG,$*&#\"\"\"\"\"#F(*&%(lambda|irG!\"\"-%$expG6#,$*&-%$absG6#,&% \"xGF,%#muGF(F(F+F,F,F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG ,$*&#\"\"\"\"\"#F(*(%(lambda|irG!\"#-%$absG6$F(,&%\"xG!\"\"%#muGF(F(-% $expG6#,$*&-F.6#F0F(F+F2F2F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $cdfG-%*PIECEWISEG6$7$,$*&#\"\"\"\"\"#F,-%$expG6#,$*&,&%\"xG!\"\"%#muG F,F,%(lambda|irGF5F5F,F,2F4F67$,&F,F,*&#F,F-F,-F/6#,$*&,&F4F,F6F5F,F7F 5F5F,F5%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*&-%$expG 6#*(%#muG\"\"\"%\"xGF+^#F+F+F+,&F+F+*&)%(lambda|irG\"\"#F+)F,F2F+F+!\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%#muG" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#%#muG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*& \"\"#\"\"\")%(lambda|irGF'F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*& $\":*o,)[]4tBc8UT\"!#C\"\"\"%(lambda|irGF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\"\"#\"\"!\"\"\")%(lambda|irGF&F(F(" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&skew_G\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$\"\"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"'\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%*PIECEWISEG6$7$,&%#muG\"\"\"*&%(lambda|irGF+-%#lnG6#,$*&\" \"#F+%\"pGF+F+F+F+2F4#F+F37$,&F*F+*&F-F+-F/6#,&F3F+*&F3F+F4F+!\"\"F+F> %*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7$,&*&#\"\"\" \"\"#F)*&%(lambda|irG!\"#-%$expG6#,$*&-%$absG6#,&%\"xG!\"\"%#muGF)F)F, F8F8F)F)F8*&#F)F*F)*(F,!\"$F3F)F.F)F)F),$*&#F)F*F)*(F,F--F46$F)F6F)F.F )F)F8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7$-%*PIECEWISEG6$7$, $*&#\"\"\"\"\"#F-*(,&%\"xG!\"\"%#muGF-F-%(lambda|irG!\"#-%$expG6#,$*&F 0F-F4F2F2F-F-F-2F1F37$,$*&#F-F.F-*(,&F1F-F3F2F-F4F5-F76#,$*&FAF-F4F2F2 F-F-F2%*otherwiseG-F'6$7$,$*&#F-F.F-*&F4F2FBF-F-F21F3F17$,$*&#F-F.F-*& F4F2F6F-F-F2F;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'valnumG6$/%(lambd a|irG$\"#:!\"\"/%#muG$\"\"&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+,= H#f\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+-xV)Q#!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ZMM " 0 "" {MPLTEXT 1 0 16 "factor(ddf /pdf);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&-%$absG6$\"\"\",&%\"xG!\" \"%#muGF'F'%(lambda|irGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidLaplace.txt000066400000000000000000000116031307543307100214270ustar00rootroot00000000000000> restart: > with(Statistics): > assume(lambda>0): > laplace_:=RandomVariable(Laplace(mu,lambda)): > pdf:=subs(u=x,PDF(laplace_,u)); > ddf:=factor(diff(pdf,x)); > cdf:=subs(u=x,CDF(laplace_,u)); > cf:=CharacteristicFunction(laplace_,x); > mu_:=Mean(laplace_); > evalf[25](mu_); > var_:=Variance(laplace_); > evalf[25](sqrt(var_)); > evalf[25](var_); > skew_:=simplify((Skewness(laplace_))); > evalf[25](skew_); > kurt_:=simplify((Kurtosis(laplace_))); > evalf[25](kurt_); > qdf:=Quantile(laplace_,p); > pdfgr:=[diff(pdf,lambda),diff(pdf,mu)]; > cdfgr:=[diff(cdf,lambda),diff(cdf,mu)]; > valnum:=lambda=1.5,mu=0.5; > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(subs(valnum,p=0.95,qdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > | -x + mu | exp(- -----------) lambda~ pdf := 1/2 ------------------ lambda~ | -x + mu | abs(1, -x + mu) exp(- -----------) lambda~ ddf := 1/2 ---------------------------------- 2 lambda~ { -x + mu { 1/2 exp(- -------) x < mu { lambda~ cdf := { { x - mu { 1 - 1/2 exp(- -------) otherwise { lambda~ exp(mu x I) cf := --------------- 2 2 1 + lambda~ x mu_ := mu mu 2 var_ := 2 lambda~ 1.414213562373095048801689 lambda~ 2 2. lambda~ skew_ := 0 0. kurt_ := 6 6. { mu + lambda~ ln(2 p) p < 1/2 qdf := { { mu - lambda~ ln(2 - 2 p) otherwise pdfgr := [ | -x + mu | | -x + mu | exp(- -----------) | -x + mu | exp(- -----------) lambda~ lambda~ -1/2 ------------------ + 1/2 ------------------------------, 2 3 lambda~ lambda~ | -x + mu | abs(1, -x + mu) exp(- -----------) lambda~ -1/2 ----------------------------------] 2 lambda~ { -x + mu { (-x + mu) exp(- -------) { lambda~ { 1/2 ------------------------ x < mu { 2 { lambda~ cdfgr := [{ , { x - mu { (x - mu) exp(- -------) { lambda~ { -1/2 ----------------------- otherwise { 2 { lambda~ { x - mu { exp(- -------) { lambda~ { -1/2 -------------- mu <= x { lambda~ { ] { -x + mu { exp(- -------) { lambda~ { -1/2 -------------- x < mu { lambda~ valnum := lambda~ = 1.5, mu = 0.5 -0.1592291801 0.2388437702 0.6417343447 0.2700254037 + 0.1475155503 I [-0.1061527867, 0.1592291801] [-0.07961459006, -0.2388437702] 3.953877640 0.5 2.121320343 0. 6. 4.50 > factor(ddf/pdf); abs(1, -x + mu) --------------- lambda~ > openturns-1.9/validation/src/ValidLeastSquareAlgorithm.mws000066400000000000000000000112051307543307100241530ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1894 "restart:\ndelta:=( x^3+1.5*y^3-x*y-a*x-b*y-c*x^2-d*y^2)^2;\nK1:=lambda*(a^2+b^2+c^2+d^2): \nK2:=lambda*(a^2+b^2+c^2+d^2+1/4*(a*b+b*c+c*d)):\nJc:=0:\nfor i from \+ 0 to 4 do\n for j from 0 to 4 do\n Jc:=Jc+subs(x=i/5,y=j/5,delta); \n od:\nod:\nJnum:=0:\nfor i from 0 to 4 do\n for j from 0 to 4 do\n w:=(i+1)*(j+1):\nxi:=j/5:\nyj:=i/5:\n#print(evalf([w,xi,yj]));\n Jn um:=Jnum+w*subs(x=xi,y=yj,delta);\n od:\nod:\n# Equi-weight\nJc0:=Jc: \nsolC0:=evalf(solve(\{diff(Jc0,a),diff(Jc0,b),diff(Jc0,c),diff(Jc0,d) \},\{a,b,c,d\})):\nprint(\"uniform weight, no penalization\");\nsubs(s olC0,[a,b,c,d]);\nresidualC0:=subs(solC0,Jc0)/25;\nJc1:=subs(lambda=1/ 4,Jc+K1):\nsyst:=diff(Jc1,a),diff(Jc1,b),diff(Jc1,c),diff(Jc1,d):\nm:= Matrix(4,4):\nvar:=a,b,c,d:\nfor i from 1 to 4 do\n for j from 1 to 4 do\n m[i,j]:=evalf(1/2*diff(syst[i],var[j]));\n od:\nod:\nprint(m );\nsolC1:=evalf(solve(\{diff(Jc1,a),diff(Jc1,b),diff(Jc1,c),diff(Jc1, d)\},\{a,b,c,d\})):\nprint(\"uniform weight, spherical penalization\") ;\nsubs(solC1,[a,b,c,d]);\nresidualC1:=subs(solC1,Jc1)/25;\n# Weighted \nJnum0:=Jnum:\nsolN0:=evalf(solve(\{diff(Jnum0,a),diff(Jnum0,b),diff( Jnum0,c),diff(Jnum0,d)\},\{a,b,c,d\})):\nprint(\"non uniform weight, n o penalization\");\nsubs(solN0,[a,b,c,d]);\nresidualN0:=subs(solN0,Jnu m0)/25;\nJnum1:=subs(lambda=1/4,Jnum+K1):\nsolN1:=evalf(solve(\{diff(J num1,a),diff(Jnum1,b),diff(Jnum1,c),diff(Jnum1,d)\},\{a,b,c,d\})):\npr int(\"non uniform weight, spherical penalization\");\nsubs(solN1,[a,b, c,d]);\nresidualN1:=subs(solN1,Jnum1)/25;\nJnum2:=subs(lambda=1/4,Jnum +K2):\nsolN2:=evalf(solve(\{diff(Jnum2,a),diff(Jnum2,b),diff(Jnum2,c), diff(Jnum2,d)\},\{a,b,c,d\})):\nsyst:=diff(Jnum2,a),diff(Jnum2,b),diff (Jnum2,c),diff(Jnum2,d):\nm:=Matrix(4,4):\nvar:=a,b,c,d:\nfor i from 1 to 4 do\n for j from 1 to 4 do\n m[i,j]:=evalf(1/2*diff(syst[i],v ar[j]));\n od:\nod:\nprint(m);\nprint(\"non uniform weight, non spher ical penalization\");\nsubs(solN2,[a,b,c,d]);\nresidualN2:=subs(solN2, Jnum2)/25;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&deltaG*$),0*$)%\"xG\" \"$\"\"\"F,*&$\"#:!\"\"F,)%\"yGF+F,F,*&F*F,F2F,F0*&%\"aGF,F*F,F0*&%\"b GF,F2F,F0*&%\"cGF,)F*\"\"#F,F0*&%\"dGF,)F2F;F,F0F;F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q@uniform~weight,~no~penalization6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!+kjjBH!#5$!+kjjVYF&$\"+====yF&$\"+#===Q\"!\"* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+residualC0G$\"+X&)zI6!#6" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*7W.o\"-%'MATRIXG6#7&7&$ \"++++]i!\"*$\"\"%\"\"!F/$\"+++++CF.7&F/F,F2F/7&F/F2$\"++++#3$F.$\"+++ +S9F.7&F2F/F8F6%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#QGuniform~ weight,~spherical~penalization6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 &$!+KE/!)G!#6$\"+ic=)H(F&$\"+n+6VL!#5$\"+8nzhdF+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+residualC1G$\"+$fuG;#!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#QDnon~uniform~weight,~no~penalization6\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7&$!+TlhYC!#5$!+cA!4c%F&$\"+ot%*ylF&$\"+!)=v+8! \"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+residualN0G$\"+/G@=()!#6" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#QKnon~uniform~weight,~spherical~penali zation6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!+/y8AA!#5$!+vT!)3GF&$ \"+h3S\\fF&$\"+k.*G2\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+resid ualN1G$\"+#*ewo5!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"* ))fBp\"-%'MATRIXG6#7&7&$\"++++Dy!\")$\"++]7.kF.$\"++++[aF.$\"++++gTF.7 &F/F,$\"++]7jTF.F17&F1F6$\"+++g%*RF.$\"++]72FF.7&F3F1F;F9%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#QOnon~uniform~weight,~non~spherical~pe nalization6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!+qzDf?!#5$!+Xw%*R GF&$\"+^nL_dF&$\"+q\\1t5!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+res idualN2G$\"+[2%=3\"!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 1716 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 168034412 169235988 } {RTABLE M7R0 I6RTABLE_SAVE/168034412X,%)anythingG6"6"[gl!"%!!!#1"%"%$"++++]i!"*$""%""!F*$"++ +++CF)F*F'F-F*F*F-$"++++#3$F)$"++++S9F)F-F*F1F/F& } {RTABLE M7R0 I6RTABLE_SAVE/169235988X,%)anythingG6"6"[gl!"%!!!#1"%"%$"++++Dy!")$"++]7.kF)$"+ +++[aF)$"++++gTF)F*F'$"++]7jTF)F,F,F0$"+++g%*RF)$"++]72FF)F.F,F4F2F& } openturns-1.9/validation/src/ValidLeastSquareAlgorithm.txt000066400000000000000000000023651307543307100241730ustar00rootroot00000000000000> restart: > delta:=(x^3+1.5*y^3-x*y-a*x-b*y-c*x^2-d*y^2)^2; > J:=int(int((x^3+y^3-a*x-b*y-c*x^2-d*y^2)^2,x=0..1),y=0..1); > Jnum:=0: > for i from 0 to 4 do > for j from 0 to 4 do > Jnum:=Jnum+(i+1)*(j+1)*subs(x=i/5,y=j/5,delta); > od: > od: 3 3 2 2 2 delta := (x + 1.5 y - x y - a x - b y - c x - d y ) 2 2 23 13 b d 13 a b d 2 d c d a b J := -- - d/2 - ---- + ---- - c/2 - ---- + --- + ----- + --- + ---- 56 20 5 20 2 9 3 3 2 2 b c b a c a c a + --- + --- + ---- + --- + ---- 3 2 5 2 3 > subs(evalf(solve({diff(J,a),diff(J,b),diff(J,c),diff(J,d)},{a,b,c,d})) > ,[a,b,c,d]); > subs(evalf(solve({diff(Jnum,a),diff(Jnum,b),diff(Jnum,c),diff(Jnum,d)} > ,{a,b,c,d})),[a,b,c,d]); [-0.3882352941, -0.3882352941, 1.323529412, 1.323529412] [-0.2446616541, -0.4560902256, 0.6578947368, 1.300751880] > sqrt(subs(evalf(solve({diff(J,a),diff(J,b),diff(J,c),diff(J,d)},{a,b,c > ,d})),Jnum)); 3.816973479 > openturns-1.9/validation/src/ValidLinearCombination.mws000066400000000000000000000056471307543307100234650ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 251 "restart:\nf0:=x1^3 \+ * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2);\nf1:=exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1);\ncoefficients:=<0.3, 2.9>;\nf:=f0*coef ficients[1]+f1*coefficients[2];\nx:=<1.2,2.3,3.4>;\nvalue:=evalf(subs( x1=x[1],x2=x[2],x3=x[3],f));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f0G ,&*&)%#x1G\"\"$\"\"\"-%$sinG6#,&%#x2GF**&$\"#D!\"\"F*%#x3GF*F*F*F**&,& F(F*F/F*\"\"#,&$\"#5F3F**$)F4F7F*F*F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f1G*&-%$expG6#,&*&%#x1G\"\"\"%#x2GF,!\"\"%#x3GF,F,-%$cosG6#,( $\"#5F.F.*&F-F,F/F,F.F+F,F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-coef ficientsG-%'RTABLEG6%\"*g%Ga8-%'MATRIXG6#7$7#$\"\"$!\"\"7#$\"#HF0&%'Ve ctorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,(*($\"\"$! \"\"\"\"\")%#x1GF(F*-%$sinG6#,&%#x2GF**&$\"#DF)F*%#x3GF*F*F*F**($F(F)F *,&F,F*F1F*\"\"#,&$\"#5F)F**$)F5F9F*F*F)F)*($\"#HF)F*-%$expG6#,&*&F,F* F1F*F)F5F*F*-%$cosG6#,($F%\"xG-%'RTABLEG6%\"*%[)RN\"-%'MATRIXG6#7%7#$\"#7!\" \"7#$\"#BF07#$\"#MF0&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&valueG$\"+\\!)*>H#!\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 82 "gradient:=evalf(subs(x1=x[1],x2=x[2],x3=x[3],));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)gr adientG-%'RTABLEG6%\"*7D]N\"-%'MATRIXG6#7%7#$!+&o-_b\"!\"(7#$\"+R%ek4$ F07#$\"+#e6`_#F0&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 237 "hessian:=evalf[5](subs(x1=x[1],x2=x[2],x3=x[3],<||>));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(hessianG-%'RTABLEG6%\"*;*ef8-%'MATRIXG6#7%7%$\"&+W\" !\"\"$!&w`$F0$!&ll#F07%F1$\"&4:*F0$\"&C&oF07%F3F8$\"&!G]F0%'MatrixG" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 9 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 135428460 135398484 135502512 135958916 }{RTABLE M7R0 I6RTABLE_SAVE/135428460X*%)anythingG6"6"[gl!#%!!!"#"#$""$!""$"#HF)F& } {RTABLE M7R0 I6RTABLE_SAVE/135398484X*%)anythingG6"6"[gl!#%!!!"$"$$"#7!""$"#BF)$"#MF)F& } {RTABLE M7R0 I6RTABLE_SAVE/135502512X*%)anythingG6"6"[gl!#%!!!"$"$$!+&o-_b"!"($"+R%ek4$F)$"+ #e6`_#F)F& } {RTABLE M7R0 I6RTABLE_SAVE/135958916X,%)anythingG6"6"[gl!"%!!!#*"$"$$"&+W"!""$!&w`$F)$!&ll#F )F*$"&4:*F)$"&C&oF)F,F0$"&!G]F)F& } openturns-1.9/validation/src/ValidLinearCombination.txt000066400000000000000000000043721307543307100234700ustar00rootroot00000000000000> restart: > f0:=x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2); > f1:=exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1); > coefficients:=<0.3, 2.9>; > f:=f0*coefficients[1]+f1*coefficients[2]; > x:=<1.2,2.3,3.4>; > value:=evalf(subs(x1=x[1],x2=x[2],x3=x[3],f)); 2 3 (x1 + x2) f0 := x1 sin(x2 + 2.5 x3) - ---------- 2 1.0 + x3 exp(-x1 x2 + x3) f1 := ---------------------- cos(-1.0 - x2 x3 + x1) [0.3] coefficients := [ ] [2.9] 2 3 0.3 (x1 + x2) f := 0.3 x1 sin(x2 + 2.5 x3) - -------------- 2 1.0 + x3 2.9 exp(-x1 x2 + x3) + ---------------------- cos(-1.0 - x2 x3 + x1) [1.2] [ ] x := [2.3] [ ] [3.4] value := 22.91998049 > gradient:=evalf(subs(x1=x[1],x2=x[2],x3=x[3], ff(f,x3)>)); [-155.5202685] [ ] gradient := [309.6458439 ] [ ] [252.5311582 ] > hessian:=evalf[5](subs(x1=x[1],x2=x[2],x3=x[3],< iff(diff(f,x1),x2),diff(diff(f,x1),x3)>| (f,x2),x2),diff(diff(f,x2),x3)>| 2),diff(diff(f,x3),x3)>>)); [1440.0 -3537.6 -2656.5] [ ] hessian := [-3537.6 9150.9 6852.4 ] [ ] [-2656.5 6852.4 5028.0 ] > openturns-1.9/validation/src/ValidLogNormal.mws000066400000000000000000000171471307543307100217600ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1422 "restart:\nwith(Sta tistics):\nwith(student):\nassume(u>0,sigmaLog>0):\nlognormal_:=Random Variable(LogNormal(muLog,sigmaLog)):\npdf:=subs(u='x-_gamma',PDF(logno rmal_,u));\nddf:=diff(pdf,x);\ncdf:=subs(u='x-_gamma',CDF(lognormal_,u ));\ncf:=CharacteristicFunction(lognormal_,u);\ncdf2:=value(changevar( ln(x)=y,Int(pdf,x=0..t)));\nmu_:='_gamma'+Mean(lognormal_);\nvar_:=Var iance(lognormal_);\nskew_:=simplify(factor(convert(Skewness(lognormal_ ),GAMMA)),symbolic);\nkurt_:=simplify(factor(convert(Kurtosis(lognorma l_),GAMMA)),symbolic);\nsol:=solve(\{mu_=mu,var_=sigma\},\{muLog,sigma Log\});\nqdf:='_gamma'+Quantile(lognormal_,p);\nqdf2:=solve(cdf2=p,x); \nfact:=pdf:\npdfgr:=map(factor,[diff(pdf,muLog)/fact,diff(pdf,sigmaLo g)/fact,diff(pdf,_gamma)/fact]);\nfact:=pdf:\ncdfgr:=map(factor,[diff( cdf,muLog)/fact,diff(cdf,sigmaLog)/fact,diff(cdf,_gamma)/fact]) assumi ng x - _gamma > exp(muLog);\nvalnum:=muLog=-1.0,sigmaLog=1.5,_gamma=-0 .5:\n#valnum:=muLog=.0,sigmaLog=1.,_gamma=0.:\nevalf(subs(valnum,x=1,d df));\nevalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\neva lf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr)));\nevalf(subs(valnum,x=1,map (_x->_x*pdf,cdfgr)));\nevalf(fsolve(subs(valnum,cdf)=0.95,x));\n_EnvAl lSolutions := true:allvalues(evalf(subs(valnum,mu_)));\nevalf(subs(val num,sqrt(var_)));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_ ));\nevalf(subs(valnum,var_));\nevalf(subs(valnum,[mu_,sqrt(var_)])); \nevalf(subs(valnum,[mu_,sqrt(var_)/mu_]));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&#\"\"\"\"\"#F(*,,&%\"xGF(%'_gammaG!\"\"F.%*s igmaLog|irGF.F)F'%#PiG#F.F)-%$expG6#,$*&#F(F)F(*&,&-%#lnG6#F+F(%&muLog GF.F)F/!\"#F(F.F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG,&*&# \"\"\"\"\"#F(*,,&%\"xGF(%'_gammaG!\"\"!\"#%*sigmaLog|irGF.F)#F(F)%#PiG #F.F)-%$expG6#,$*&#F(F)F(*&,&-%#lnG6#F+F(%&muLogGF.F)F0F/F(F.F(F(F.*&# F(F)F(*.F+F/F0!\"$F)F1F2F3F;F(F4F(F(F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6$7$,&#\"\"\"\"\"#F+*&#F+F,F+-%$erfG6#,$*&F* F+*(,&%&muLogGF+-%#lnG6#,&%\"xGF+%'_gammaG!\"\"F=F+%*sigmaLog|irGF=F,F *F+F+F+F=2F:-%$expG6#F67$,&F*F+*&F*F+-F06#,$*&F*F+*(,&F7F+F6F=F+F>F=F, F*F+F+F+F+%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*,%#Pi G#\"\"\"\"\"#%*sigmaLog|irG!\"\"F)F'-%$expG6#,$*(F)F+F*!\"#%&muLogGF)F +F(-%%evalG6$-%+invfourierG6%*(%\"uGF+-%*HeavisideG6#F:F(-F-6#,$*&F'F( *(-%#lnGF=F(,&FCF+*&F)F(F2F(F(F(F*F1F(F(F(F:%\"vG<#/FG%#u|irGF(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G,&*&#\"\"\"\"\"#F(-%$erfG6#,$* &#F(F)F(*(F)F/,&-%#lnG6#,$%'_gammaG!\"\"F(%&muLogGF7F(%*sigmaLog|irGF7 F(F(F(F7*&F/F(-F+6#,$*&F/F(*(F)F/,&-F36#,&%\"tGF(F6F7F(F8F7F(F9F7F(F(F (F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\"\"-%$expG 6#,&%&muLogGF'*&\"\"#!\"\"%*sigmaLog|irGF.F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&-%$expG6#,&*&\"\"#\"\"\"%&muLogGF,F,*$)%*sigm aLog|irGF+F,F,F,,&-F'6#F.F,F,!\"\"F," }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%&skew_G*(,(-%$expG6#,&*&\"\"$\"\"\"%&muLogGF-F-*(\"\"*F-\"\"#!\"\" %*sigmaLog|irGF1F-F-*&F,F--F(6#,&*&F,F-F.F-F-*(\"\"&F-F1F2F3F1F-F-F2*& F1F--F(6#,&*(F,F-F1F2F3F1F-*&F,F-F.F-F-F-F-F--F(6#,&*&F,F-F.F-F2*(F,F- F1F2F3F1F2F-,&-F(6#*$)F3F1F-F-F-F2#!\"$F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G*(,*-%$expG6#,&*&\"\"%\"\"\"%&muLogGF-F-*&\"\" )F-)%*sigmaLog|irG\"\"#F-F-F-*&F,F--F(6#,&*&F,F-F.F-F-*&\"\"&F-F1F-F-F -!\"\"*&\"\"'F--F(6#,&*&F,F-F.F-F-*&\"\"$F-F1F-F-F-F-*&FCF--F(6#,&*&F3 F-F1F-F-*&F,F-F.F-F-F-F;F--F(6#,&*&F,F-F.F-F;*&F3F-F1F-F;F-,&-F(6#*$F1 F-F-F-F;!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%&muLogG-%#l nG6#*&,(*$)%'_gammaG\"\"#\"\"\"F1*(F0F1F/F1%#muGF1!\"\"*$)F3F0F1F1F1-% 'RootOfG6$,,*(F0F1F/F1F3F1F1F5F4%&sigmaGF4F-F4*$)%#_ZGF0F1F1/%&labelG% $_L1GF4/%*sigmaLog|irG-F86$,&F=F1*&F0F1-F)6#*&F7F1,&F/F4F3F1F4F1F4/FA% $_L2G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG%%FAILG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%%qdf2G6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %&pdfgrG7%*&,&-%#lnG6#,&%\"xG\"\"\"%'_gammaG!\"\"F-%&muLogGF/F-%*sigma Log|irG!\"#,$*(,(F(F-F0F/F1F-F-,(F(F/F0F-F1F-F-F1!\"$F/*(F1F2,(*$)F1\" \"#F-F-F(F-F0F/F-F+F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7%,& %\"xG!\"\"%'_gammaG\"\"\"*(,&-%#lnG6#,&F'F*F)F(F*%&muLogGF(F*F&F*%*sig maLog|irGF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+)e/\"Q7!#5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+n66V6!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+$QZhD)!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"+ crXSr!#6$!+]&))HI*!#7$\"+)e/\"Q7!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7%$!+]nm9 " 0 "" {MPLTEXT 1 0 80 "tmp:=factor(diff((1/2+1/2*erf(1/2*(ln(x-_ gamma)-muLog)/sigmaLog*2^(1/2)))^N,x));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$tmpG,$*2),&#\"\"\"\"\"#F**&#F*F+F*-%$erfG6#,$*&F)F**(,&%&muLo gGF*-%#lnG6#,&%\"xGF*%'_gammaG!\"\"FF*F+F)-%$expG6#,$*&#F*F+F**&F4F+F=!\"#F*F " 0 "" {MPLTEXT 1 0 44 "int(subs(N= 2,_gamma=0,tmp)*x,x=0..infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#- %$intG6$,$*0\"\"#\"\"\",&#F)F(F)*&#F)F(F)-%$erfG6#,$*&F+F)*(,&%&muLogG F)-%#lnG6#%\"xG!\"\"F)%*sigmaLog|irGF:F(F+F)F)F)F:F(F(F+-%$expG6#,$*&# F)F(F)*&F4F(F;!\"#F)F:F)F;F:%#PiG#F:F(,&F)F:F.F)F:F:/F9;\"\"!%)infinit yG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 132 "evalf[40](subs(muLog =1.2,sigmaLog=0.3,skew_));\nevalf[40](subs(muLog=1.2,sigmaLog=0.3,(exp (sigmaLog^2)+2)*sqrt(exp(sigmaLog^2)-1)));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"IGMQ(R-p\"=W:%GqNlD2\\`\\*!#S" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"ILOQ(R-p\"=W:%GqNlD2\\`\\*!#S" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 6 "kurt_;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,*- %$expG6#,&*&\"\"%\"\"\"%&muLogGF+F+*&\"\")F+)%*sigmaLog|irG\"\"#F+F+F+ *&F*F+-F&6#,&*&F*F+F,F+F+*&\"\"&F+F/F+F+F+!\"\"*&\"\"'F+-F&6#,&*&F*F+F ,F+F+*&\"\"$F+F/F+F+F+F+*&FAF+-F&6#,&*&F1F+F/F+F+*&F*F+F,F+F+F+F9F+-F& 6#,&*&F*F+F,F+F9*&F1F+F/F+F9F+,&-F&6#*$F/F+F+F+F9!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 177 "mu2:=exp(2*muLog+sigmaLog^2)*(exp( sigmaLog^2)-1);\nmu4:=exp(4*muLog+2*sigmaLog^2)*\n (exp(sigmaLog^2 )-1)^2*\n (exp(4*sigmaLog^2)+2*exp(3*sigmaLog^2)+3*exp(2*sigmaLog^ 2)-3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu2G*&-%$expG6#,&*&\"\"# \"\"\"%&muLogGF,F,*$)%*sigmaLog|irGF+F,F,F,,&-F'6#F.F,F,!\"\"F," }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu4G*(-%$expG6#,&*&\"\"#\"\"\")%*si gmaLog|irGF+F,F,*&\"\"%F,%&muLogGF,F,F,),&-F'6#*$F-F,F,F,!\"\"F+F,,*-F '6#,$*&F0F,F-F,F,F,*&F+F,-F'6#,$*&\"\"$F,F-F,F,F,F,*&FBF,-F'6#,$*&F+F, F-F,F,F,F,FBF7F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 80 "evalf(s ubs(valnum,exp(4*sigmaLog^2)+2*exp(3*sigmaLog^2)+3*exp(2*sigmaLog^2)-3 ));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+&GDy+\"!\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 225 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidLogNormal.txt000066400000000000000000000247431307543307100217710ustar00rootroot00000000000000> restart: > with(Statistics): > with(student): > assume(u>0,sigmaLog>0): > lognormal_:=RandomVariable(LogNormal(muLog,sigmaLog)): > pdf:=subs(u='x-_gamma',PDF(lognormal_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u='x-_gamma',CDF(lognormal_,u)); > cf:=CharacteristicFunction(lognormal_,u); > cdf2:=value(changevar(ln(x)=y,Int(pdf,x=0..t))); > mu_:='_gamma'+Mean(lognormal_); > var_:=Variance(lognormal_); > skew_:=simplify(factor(convert(Skewness(lognormal_),GAMMA)),symbolic); > kurt_:=simplify(factor(convert(Kurtosis(lognormal_),GAMMA)),symbolic); > sol:=solve({mu_=mu,var_=sigma},{muLog,sigmaLog}); > qdf:='_gamma'+Quantile(lognormal_,p); > qdf2:=solve(cdf2=p,x); > fact:=pdf: > pdfgr:=map(factor,[diff(pdf,muLog)/fact,diff(pdf,sigmaLog)/fact,diff(p > df,_gamma)/fact]); > fact:=pdf: > cdfgr:=map(factor,[diff(cdf,muLog)/fact,diff(cdf,sigmaLog)/fact,diff(c > df,_gamma)/fact]) assuming x - _gamma > exp(muLog); > valnum:=muLog=-1.0,sigmaLog=1.5,_gamma=-0.5: > #valnum:=muLog=.0,sigmaLog=1.,_gamma=0.: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,map(_x->_x*pdf,pdfgr))); > evalf(subs(valnum,x=1,map(_x->_x*pdf,cdfgr))); > evalf(fsolve(subs(valnum,cdf)=0.95,x)); > _EnvAllSolutions := true:allvalues(evalf(subs(valnum,mu_))); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); > evalf(subs(valnum,[mu_,sqrt(var_)/mu_])); > 2 1/2 (ln(x - _gamma) - muLog) 2 exp(-1/2 -------------------------) 2 sigmaLog~ pdf := 1/2 ---------------------------------------- 1/2 (x - _gamma) sigmaLog~ Pi 2 1/2 (ln(x - _gamma) - muLog) 2 exp(-1/2 -------------------------) 2 sigmaLog~ 1/2 ddf := -1/2 ---------------------------------------- - 1/2 2 2 1/2 (x - _gamma) sigmaLog~ Pi 2 (ln(x - _gamma) - muLog) (ln(x - _gamma) - muLog) exp(-1/2 -------------------------) 2 sigmaLog~ / 2 3 1/2 / ((x - _gamma) sigmaLog~ Pi ) / { 1/2 cdf := { (muLog - ln(x - _gamma)) 2 { 1/2 - 1/2 erf(1/2 -----------------------------) , { sigmaLog~ x - _gamma < exp(muLog) 1/2 (ln(x - _gamma) - muLog) 2 1/2 + 1/2 erf(1/2 -----------------------------) , otherwise sigmaLog~ 2 1/2 1/2 muLog cf := Pi 2 exp(- ------------) invfourier( 2 2 sigmaLog~ ln(u) (-ln(u) + 2 muLog) | Heaviside(u) exp(1/2 ------------------------) | 2 | sigmaLog~ | ----------------------------------------------, u, v)| / u |v = u~ sigmaLog~ 1/2 2 (ln(-_gamma) - muLog) cdf2 := -1/2 erf(1/2 --------------------------) sigmaLog~ 1/2 2 (ln(t - _gamma) - muLog) + 1/2 erf(1/2 -----------------------------) sigmaLog~ 2 sigmaLog~ mu_ := _gamma + exp(muLog + ----------) 2 2 2 var_ := exp(2 muLog + sigmaLog~ ) (exp(sigmaLog~ ) - 1) / 2 | 9 sigmaLog~ skew_ := |exp(3 muLog + ------------) \ 2 2 5 sigmaLog~ - 3 exp(3 muLog + ------------) 2 2 \ 3 sigmaLog~ | + 2 exp(------------ + 3 muLog)| 2 / 2 3 sigmaLog~ / 2 3/2 exp(-3 muLog - ------------) / (exp(sigmaLog~ ) - 1) 2 / 2 kurt_ := (exp(4 muLog + 8 sigmaLog~ ) 2 - 4 exp(4 muLog + 5 sigmaLog~ ) 2 + 6 exp(4 muLog + 3 sigmaLog~ ) 2 - 3 exp(2 sigmaLog~ + 4 muLog)) 2 / 2 2 exp(-4 muLog - 2 sigmaLog~ ) / (exp(sigmaLog~ ) - 1) / 2 2 / sol := {muLog = ln((_gamma - 2 _gamma mu + mu ) / RootOf( / 2 2 2 2 _gamma mu - mu - sigma - _gamma + _Z , label = _L1)), 2 sigmaLog~ = RootOf(_Z - 2 ln(RootOf( 2 2 2 2 _gamma mu - mu - sigma - _gamma + _Z , label = _L1)/( -_gamma + mu)), label = _L2)} qdf := FAIL qdf2 := ln(x - _gamma) - muLog pdfgr := [----------------------, - 2 sigmaLog~ (ln(x - _gamma) - muLog + sigmaLog~) 3 (-ln(x - _gamma) + muLog + sigmaLog~)/sigmaLog~ , 2 sigmaLog~ + ln(x - _gamma) - muLog -----------------------------------] 2 sigmaLog~ (x - _gamma) (ln(x - _gamma) - muLog) (-x + _gamma) cdfgr := [-x + _gamma, --------------------------------------, -1] sigmaLog~ -0.1238104588 0.1143111167 0.8256147383 [0.07140457156, -0.009302988550, 0.1238104588] [-0.1714666750, -0.1606602859, -0.1143111167] 3.837423204 0.633148453 3.301282864 33.46804681 10078.25285 10.89846855 [0.633148453, 3.301282864] [0.633148453, 5.214073964] > tmp:=factor(diff((1/2+1/2*erf(1/2*(ln(x-_gamma)-muLog)/sigmaLog*2^(1/2 > )))^N,x)); / 1/2 \N | (muLog - ln(x - _gamma)) 2 | 1/2 tmp := - |1/2 - 1/2 erf(1/2 -----------------------------)| N 2 \ sigmaLog~ / 2 / (muLog - ln(x - _gamma)) / | exp(-1/2 -------------------------) / |(x - _gamma) 2 / \ sigmaLog~ / 1/2 \ 1/2 | (muLog - ln(x - _gamma)) 2 | sigmaLog~ Pi |-1 + erf(1/2 -----------------------------)| \ sigmaLog~ / \ | | / > int(subs(N=2,_gamma=0,tmp)*x,x=0..infinity); infinity / / 1/2 \2 | | (muLog - ln(x)) 2 | 1/2 | - 2 |1/2 - 1/2 erf(1/2 --------------------)| 2 | \ sigmaLog~ / / 0 2 / (muLog - ln(x)) / | 1/2 exp(-1/2 ----------------) / |sigmaLog~ Pi 2 / \ sigmaLog~ / 1/2 \\ | (muLog - ln(x)) 2 || |-1 + erf(1/2 --------------------)|| dx \ sigmaLog~ // > evalf[40](subs(muLog=1.2,sigmaLog=0.3,skew_)); > evalf[40](subs(muLog=1.2,sigmaLog=0.3,(exp(sigmaLog^2)+2)*sqrt(exp(sig > maLog^2)-1))); > 0.9495349072565357028415441816902397383428 0.9495349072565357028415441816902397383633 > kurt_; 2 2 (exp(4 muLog + 8 sigmaLog~ ) - 4 exp(4 muLog + 5 sigmaLog~ ) 2 + 6 exp(4 muLog + 3 sigmaLog~ ) 2 - 3 exp(2 sigmaLog~ + 4 muLog)) 2 / 2 2 exp(-4 muLog - 2 sigmaLog~ ) / (exp(sigmaLog~ ) - 1) / > mu2:=exp(2*muLog+sigmaLog^2)*(exp(sigmaLog^2)-1); > mu4:=exp(4*muLog+2*sigmaLog^2)* > (exp(sigmaLog^2)-1)^2* > (exp(4*sigmaLog^2)+2*exp(3*sigmaLog^2)+3*exp(2*sigmaLog^2)-3); 2 2 mu2 := exp(2 muLog + sigmaLog~ ) (exp(sigmaLog~ ) - 1) 2 2 2 mu4 := exp(2 sigmaLog~ + 4 muLog) (exp(sigmaLog~ ) - 1) ( 2 2 2 exp(4 sigmaLog~ ) + 2 exp(3 sigmaLog~ ) + 3 exp(2 sigmaLog~ ) - 3) > evalf(subs(valnum,exp(4*sigmaLog^2)+2*exp(3*sigmaLog^2)+3*exp(2*sigmaL > og^2)-3)); 10078.25285 > openturns-1.9/validation/src/ValidLogUniform.mw000066400000000000000000002230421307543307100217550ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZecS1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GLDYlUSdhc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Mi1GLDYlUSVhTG9nRidGL0YyLUY2Ni1RIj5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEiMEYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSC9GS0ZXL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRJWJMb2dGJ0YvRjJGYm9GZW9GaW9GYHBGYm9GX29GaW8tRiw2JVEidEYnRi9GMkZiby1GLDYlUSRleHBGJy9GMEY9RjktRltvNiQtRiM2I0Zfb0Y5RjktRjY2LVEiO0YnRjlGO0ZccEZARkJGREZGRkhGXXBGTUZPLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGXXAvRk5GVy1GLDYlUSRwZGZGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1JJm1mcmFjR0YkNigtRmZvNiRRIjFGJ0Y5LUYjNiUtRiw2JVEieEYnRi9GMi1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGXXBGZHEtRltvNiQtRiM2J0ZgcEZhcS1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GYXNGYXFGX29GOS8lLmxpbmV0aGlja25lc3NHRmByLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmdzLyUpYmV2ZWxsZWRHRj1GXnFGT0ZhcS1GLDYlUSVkaWZmRidGL0YyLUZbbzYkLUYjNiZGZXFGaW9GYXFGX29GOUZecUZPRmFxRlx0LUZbbzYkLUYjNiZGZXFGaW9GYXFGYHBGOUZecUZPRmFxLUYsNiVRJGNkZkYnRi9GMkZocS1GLDYlUSRpbnRGJ0YvRjItRltvNiQtRiM2KkZlcUZpb0Zjci1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZmcEZqcC1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZgc0ZkcUZjcEY5Rl5xRk9GYXEtRiw2JVEnZmFjdG9yRidGL0YyLUZbbzYkLUYjNiRGXHQtRltvNiQtRiM2JkZndEZpb0ZhcUZfb0Y5RjlGXnFGT0ZhcUZndS1GW282JC1GIzYkRlx0LUZbbzYkLUYjNiZGZ3RGaW9GYXFGYHBGOUY5Rl5xRk9GYXEtRiw2JVEjbXVGJ0ZpcEY5RmhxRmp0LUZbbzYkLUYjNi1GY3JGZnJGZXFGaW9GY3JGYXVGZnBGanBGZHVGZnAtRltvNiQtRiM2I0ZgcEY5RjlGXnFGT0ZPRmFxLUYsNiVRI21uRidGL0YyRmhxRmp0LUZbbzYkLUYjNi0tSSVtc3VwR0YkNiVGY3ItRiM2Iy1GLDYlUSJuRidGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdGaG9GZnJGZXFGaW9GY3JGYXVGZnBGanBGZHVGZnBGYXdGOUZecUZPRmFxRmFxLUYsNiVRJ3NpZ21hMkYnRi9GMkZocUZqdC1GW282JC1GIzYtLUZdeDYlRmNyLUYjNiMtRmZvNiRRIjJGJ0Y5RmR4RmZyRmVxRmlvRmNyRmF1RmZwRmpwRmR1RmZwRmF3RjktRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZgc0Zicy1GXXg2JS1GLDYlUSUmbXU7RidGaXBGOUZfeUZkeEZecUZPRmFxLUYsNiVRJG1hcEYnRi9GMi1GW282JC1GIzYpRmNyLUY2Ni1RKCZzcmFycjtGJ0Y5RjtGPkZARkJGREZGRkhGXXBGZHEtRiw2JVEoY29sbGVjdEYnRi9GMi1GW282JC1GIzYmRmNyRmlvRmZwRmpwRjlGaW9GZ3UtRltvNiQtRiM2I0ZmeEY5RjlGXnFGTy1GNjYtUSIjRidGOUY7Rj5GQEZCRkRGRkZIRl1wRmRxLUYsNiVRKn5zaW1wbGlmeUYnRi9GMi1GW282JC1GIzYlLUYsNiVRI3MyRidGL0YyRmR5RmZ4RjlGXnFGT0ZhW2wtRiw2JVExfnNrZXcmQXNzaWduO2ludEYnRi9GMi1GW282JC1GIzYtLUZdeDYlLUZbbzYkLUYjNiVGY3JGZHlGanZGOS1GIzYjLUZmbzYkUSIzRidGOUZkeEZmckZlcUZpb0ZjckZhdUZmcEZqcEZkdUZmcEZhd0Y5Rl5xRk9GYVtsLUYsNiVRMX5rdXJ0JkFzc2lnbjtpbnRGJ0YvRjItRltvNiQtRiM2LS1GXXg2JUZnXGwtRiM2Iy1GZm82JFEiNEYnRjlGZHhGZnJGZXFGaW9GY3JGYXVGZnBGanBGZHVGZnBGYXdGOUZecUZPLUYsNiVRIm1GJ0YvRjJGaHFGanRGaHdGXnFGT0ZhcS1GLDYlUShjb252ZXJ0RidGL0YyLUZbbzYkLUYjNiYtRiw2JVEnZXhwYW5kRidGL0YyLUZbbzYkLUYjNiNGXl5sRjlGaW9GZnBGOUZecUZhcUZhcUZhcQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiZJInhHNiIhIiIsJkkmYkxvZ3xpckdGJCIiIkkmYUxvZ3xpckdGJEYlRiU= KiZJInhHNiIhIiIsJkkmYkxvZ3xpckdGJCIiIkkmYUxvZ3xpckdGJEYlISIj LCQqJkkieEc2IiEiIiwmSSZiTG9nfGlyR0YlIiIiSSZhTG9nfGlyR0YlRiYhIiNGJg== LCQqJiwmSSZhTG9nfGlyRzYiISIiLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2I0kjdHxpckdGJiIiIkYvLCZJJmJMb2d8aXJHRiZGJ0YlRi9GJ0Yn KiYsJkkmYkxvZ3xpckc2IiEiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNJI3R8aXJHRiUiIiJGLiwmRiRGJkkmYUxvZ3xpckdGJUYuISIj LCQqJiwmSSZhTG9nfGlyRzYiISIiLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2I0kjdHxpckdGJiIiIkYvLCZJJmJMb2d8aXJHRiZGJ0YlRi8hIiNGJw== KiYsJkkmYkxvZ3xpckc2IiIiIkkmYUxvZ3xpckdGJSEiIkYoLCYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2I0YkRiYtRis2I0YnRihGJg== KigsJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJIm5HRikiIiJJJmFMb2d8aXJHRilGLUYtLUYlNiMqJkYsRi1JJmJMb2d8aXJHRilGLSEiIkYtRixGMywmRjJGM0YuRi1GMw== LCYqJiwmSSZiTG9nfGlyRzYiIiIiSSZhTG9nfGlyR0YmISIiRiksJiokLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YmNiNGJSIiI0YnKiQtRi02I0YoRjJGKUYnI0YnRjIqJkYkISIjLCZGLEYnRjRGKUYyRik= LCQqKCwmLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJJmJMb2d8aXJHRioiIiItRiY2I0kmYUxvZ3xpckdGKiEiIkYtLCoqJiwoISIjRi1GLEYxRjBGLUYtRi5GLUYtKiZGJUYtRixGLUYxRiUiIiMqJkYlRi1GMEYtRi1GLSwmRixGMUYwRi1GNSNGMUY3 KigsJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJIm5HRikiIiJJJmFMb2d8aXJHRilGLUYtLUYlNiMqJkYsRi1JJmJMb2d8aXJHRilGLSEiIkYtRixGMywmRjJGM0YuRi1GMw== LCYqKEkibkc2IiEiIiwmSSZiTG9nfGlyR0YlRiZJJmFMb2d8aXJHRiUiIiJGJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjKiZGJEYqRilGKkYqRioqKEYkRiZGJ0YmLUYsNiMqJkYkRipGKEYqRipGJg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiZJInhHNiIhIiIsJkkmYkxvZ3xpckdGJCIiIkkmYUxvZ3xpckdGJEYlRiU= KiZJInhHNiIhIiIsJkkmYkxvZ3xpckdGJCIiIkkmYUxvZ3xpckdGJEYlISIj LCQqJkkieEc2IiEiIiwmSSZiTG9nfGlyR0YlIiIiSSZhTG9nfGlyR0YlRiYhIiNGJg== LCQqJiwmSSZhTG9nfGlyRzYiISIiLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2I0kjdHxpckdGJiIiIkYvLCZJJmJMb2d8aXJHRiZGJ0YlRi9GJ0Yn KiYsJkkmYkxvZ3xpckc2IiEiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNJI3R8aXJHRiUiIiJGLiwmRiRGJkkmYUxvZ3xpckdGJUYuISIj LCQqJiwmSSZhTG9nfGlyRzYiISIiLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2I0kjdHxpckdGJiIiIkYvLCZJJmJMb2d8aXJHRiZGJ0YlRi8hIiNGJw== KiYsJkkmYkxvZ3xpckc2IiIiIkkmYUxvZ3xpckdGJSEiIkYoLCYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2I0YkRiYtRis2I0YnRihGJg== LCQqJiwoKiRJInhHNiIiIiMiIiIqJkYmRilJIm1HRidGKSEiJSomRitGKC1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YnNiNGJkYpRihGKUkiY0dGJyEiIiNGKUYo LCQqJiwmSSJ4RzYiIiIiSSJtR0YmISIjIiIjSSJjR0YmISIiI0YnRio= KihJIm1HNiIiIiMsJi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJInhHRiQiIiIhIiNGLkYuSSJjR0YkISIi IiIh LCQqJiwqKiZJI3MyRzYiIiIiSSJjR0YnRighIiMqJEkieEdGJyIiI0YoKiZGLEYoSSJtR0YnRighIiUqJkYvRi0tSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjRixGKEYtRihGKSEiIiNGOEYt LCQqJixGKiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkSSZiTG9nfGlyR0YrIiIkIiIiSSZhTG9nfGlyR0YrIiIjISIjKiYtRic2IywkRjFGL0YwRjFGMkYyKihGJkYwRi5GMEYxRjAiIiUqJkYxRjAtRic2IywmRi5GMkYxRjBGMCIiKiomRjFGMC1GJzYjLCZGLkYwRjFGMkYwRj4qKEY1RjBGLkYwRjFGMCEiJSomRjFGMEYmRjAhIioqJkYxRjBGNUYwRkYqJkYuRjBGNUYwRj5GNSIjNyomRjVGMEYuRjJGMiomRi5GMEYmRjBGPkZAISNPKiZGLkYwRkBGMEZGRiYhIzcqJkYmRjBGLkYyRjMqJkYuRjBGO0YwRkZGOyIjT0YwLCoqJEYxRi9GMComRi5GMEYxRjIhIiQqJkYuRjJGMUYwRi8qJEYuRi8hIiJGWCNGMCIiJw== LCQqJixebyomSSZhTG9nfGlyRzYiIiIiLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YnNiMsJEYmIiIlRigiI08qJkYmRigtRio2IywkSSZiTG9nfGlyR0YnRjBGKCEjTyomRiZGKC1GKjYjLCZGNiIiJEYmRihGKCIjcyomRiZGKC1GKjYjLCZGNkYoRiZGPEYoISNzKiZGKUYoRjZGPCEiJComRilGKEYmRjxGPComRjYiIiNGKUYoISM7KiZGJkZHRilGKEZIKiZGNkYoRjlGKEZCKiZGNkYoRilGKEY3KiZGNkZHRj9GKCIjOyomRiZGR0Y/RihGTSomRjZGKEY/RihGPSomRjZGKEYzRihGMSomRjNGKEY2RjxGPComRjNGKEYmRjxGRComRjZGR0YzRihGSComRiZGR0YzRihGSComRjZGR0Y5RihGTSomRiZGR0Y5RihGTUY5IiRXIkY/RldGKUY3RjNGNy1GKjYjLCZGNkZHRiZGRyEkOyMqKEY2RihGJkYoRj9GKCEjSyooRjNGKEY2RkdGJkYoISIqKihGKUYoRjZGR0YmRigiIioqKEYpRihGNkYoRiZGR0ZpbiooRjZGKEYmRihGKUYoIiNLKihGM0YoRjZGKEYmRkdGW28qKEY2RihGJkYoRjlGKEZnbiooRjZGKEYmRihGM0YoRl5vRigsLCokRjZGMEYoKiZGNkY8RiZGKCEiJSomRjZGR0YmRkciIicqJkY2RihGJkY8RmVvKiRGJkYwRighIiIjRigiIzc= KigsJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJIm5HRikiIiJJJmFMb2d8aXJHRilGLUYtLUYlNiMqJkYsRi1JJmJMb2d8aXJHRilGLSEiIkYtRixGMywmRjJGM0YuRi1GMw== LCYqKEkibkc2IiEiIiwmSSZiTG9nfGlyR0YlRiZJJmFMb2d8aXJHRiUiIiJGJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjKiZGJEYqRilGKkYqRioqKEYkRiZGJ0YmLUYsNiMqJkYkRipGKEYqRipGJg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEnZmFjdG9yRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkobWZlbmNlZEdGJDYkLUYjNiUtRiw2JVEnc2lnbWEyRidGL0YyLyUrZXhlY3V0YWJsZUdRJmZhbHNlRicvRjNRJ25vcm1hbEYnRkBGPUZA LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKCMiIiIiIiNGJSwwKiZJJmFMb2d8aXJHNiJGJS1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKjYjLCQqJkYmRiVGKUYlRiVGJUYlKiZGKUYlLUYsNiMsJComRiZGJUkmYkxvZ3xpckdGKkYlRiVGJSEiIiomRjhGJUY0RiVGJSomRiZGJUY0RiVGOSomIiIlRiUtRiw2IywmRjhGJUYpRiVGJUYlKiZGJkYlRitGJUY5KiZGK0YlRjhGJUY5RiUpLCZGOEY5RilGJUYmRjlGJQ== LCQqKCMiIiIiIiNGJSwwKiZJJmFMb2d8aXJHNiJGJS1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKjYjLCQqJkYmRiVGKUYlRiVGJUYlKiZGKUYlLUYsNiMsJComRiZGJUkmYkxvZ3xpckdGKkYlRiVGJSEiIiomRjhGJUY0RiVGJSomRiZGJUY0RiVGOSomIiIlRiUtRiw2IywmRjhGJUYpRiVGJUYlKiZGJkYlRitGJUY5KiZGK0YlRjhGJUY5RiUpLCZGOEY5RilGJUYmRjlGJQ== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbW9HRiQ2LVEhRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkNGLw== QyQtSSRpbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JComLUkkZXhwR0YlNiMqKF4jIiIiRjBJInVHRihGMEkidEdGKEYwRjBGMiEiIkYyRjA= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQtSSNFaUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYkIiIiKiheIyEiIkYqSSJ1R0YoRipJI3R8aXJHRihGKkYt JSFH openturns-1.9/validation/src/ValidLogUniformCharacteristicFunction.mw000066400000000000000000000734571307543307100263510ustar00rootroot00000000000000 restart: assume(aL<bL,exp(aL)>0,exp(bL)>0,exp(bL)>exp(aL)); evalf[20](Ei(0.05+3*I)); LCYkIjUiZUZxI3BIPyoqPTchIz8iIiIqJiQiNTlIUmBLbG9RT00hIz5GJl4jRiZGJkYm phi:=int(exp(I*u*t)/(t*(bL-aL)),t=exp(aL)..exp(bL)); LCQqJiwmLUkjRWlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JCIiIiwkKigsJF4jRixGLEYsLUkkZXhwR0YnNiNJJGFMfGlyRzYjL0knX2xvY2FsR0YoSTJfbjE0MDcxMDc3ODY4MzM5MkdGKkYsSSJ1R0YqRiwhIiJGLC1GJjYkRiwsJCooRi9GLC1GMjYjSSRiTHxpckc2Iy9GN0kyX24xNDA3MTA3Nzg2ODM3MTJHRipGLEY5RixGOkY6RiwsJkZBRjpGNEYsRjpGOg== cf:=evalf[20](subs(aL=-0.5,bL=1.5,u=1.0,phi)); evalf[20](log(cf)); LCYkIjUveXVDano8Jz4nKikhI0AhIiIqJiQiNTk+RXJDKip6Qj5gISM/IiIiXiNGK0YrRis= LCYkIjUjM2JnKFFAa2ZzaCEjPyEiIiomJCI1b05ZYmY2M3JQPCEjPiIiIl4jRitGK0Yr simplify(Ei(1,-(a+b*I))/Ei(1,a+b*I)) KiYtSSNFaUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYkIiIiLCZJImFHRighIiIqJiwkXiNGKkYqRipJImJHRihGKkYtRiotRiQ2JEYqLCZGLEYqKiZGMEYqRjFGKkYqRi0= series(phi,u=0) KzFJInVHNiIsJComLCZJJGJMfGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDA3MTA3Nzg2ODM3MTJHRiQiIiJJJGFMfGlyRzYjL0YrSTJfbjE0MDcxMDc3ODY4MzM5MkdGJCEiIkYuLCZGKEYzRi9GLkYzRjMiIiEsJComLCYqJiwkXiNGLkYuRi4tSSRleHBHNiRGLEkoX3N5c2xpYkdGJDYjRi9GLkYzKiZGO0YuLUY9NiNGKEYuRi5GLkY0RjNGM0YuLCQqJiwmKiYjRi4iIiVGLilGPCIiI0YuRi4qJkZIRi4pRkJGS0YuRjNGLkY0RjNGM0ZLLCQqJiwmKiYqJiNGLiIjPUYuRjtGLkYuKUY8IiIkRi5GLiomLCRGUkYuRi4pRkJGVkYuRjNGLkY0RjNGM0ZWLCQqJiwmKiYjRi4iIycqRi4pRjxGSUYuRjMqJkZobkYuKUZCRklGLkYuRi5GNEYzRjNGSSwkKiYsJiomLCQqJiNGLiIkKydGLkY7Ri5GLkYuKUY8IiImRi5GMyomRmJvRi4pRkJGZm9GLkYuRi5GNEYzRjNGZm8tSSJPR0YsNiNGLiIiJw== Ei(1,-1.0*I) XiQkIStII1JTUCQhIzUkIitrRDhaaUYl help(Ei); openturns-1.9/validation/src/ValidLogistic.mws000066400000000000000000000177411307543307100216430ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plo t" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1230 "restart:\nwith(Sta tistics):\nassume(beta>0,beta,real,alpha,real):\nlogistic_:=RandomVari able(Logistic(alpha,beta)):\npdf:=PDF(logistic_,x);\nddf:=factor(diff( pdf,x));\ncdf:=CDF(logistic_,x);\ncf:=subs(u=x,CharacteristicFunction( logistic_,u));\nrough:=factor(int(pdf^2,x=-infinity..infinity));\nmu_: =Mean(logistic_);\nvar_:=Variance(logistic_);\n#skew_:=simplify(conver t(Skewness(logistic_),GAMMA),symbolic);\nskew_:=Int((x-mu_)^3*pdf,x=-i nfinity..infinity)/var_^(3/2);\n#kurt_:=simplify(convert(Kurtosis(logi stic_),GAMMA),symbolic);\nkurt_:=Int((x-mu_)^4*pdf,x=-infinity..infini ty)/var_^2;\nqdf:=Quantile(logistic_,p);\nqdf2:=solve(cdf=p,x);\npdfgr :=map(factor,[diff(pdf,alpha),diff(pdf,beta)]);\nfactor(pdfgr[2]-(x-al pha)*pdfgr[1]/beta);\ncdfgr:=map(factor,[diff(cdf,alpha),diff(cdf,beta )]);\nfactor(dcdf[2]/dcdf[1]);\nvalnum:=alpha=-1/2,beta=3/2:\nevalf(su bs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\nevalf(subs(valnum, x=1,cdf));\nevalf(subs(valnum,x=1,cf));\nevalf(subs(valnum,x=1,map(_x- >_x,pdfgr)));\nevalf(subs(valnum,x=1,cdfgr));\nevalf(solve(subs(valnum ,cdf)=0.95,x));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,sqrt(var_ )));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_));\nevalf(su bs(valnum,var_));\nevalf(subs(valnum,[mu_,sqrt(var_)]));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$pdfG*(-%$expG6#*&,&%\"xG\"\"\"%'alpha|irG!\" \"F,%&beta|irGF.F,F/F.,&F,F,F&F,!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%$ddfG,$**-%$expG6#*&,&%\"xG\"\"\"%'alpha|irG!\"\"F-%&beta|irGF/F-, &F-F/F'F-F-F0!\"#,&F-F-F'F-!\"$F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %$cdfG*&\"\"\"F&,&F&F&-%$expG6#,$*&,&%\"xGF&%'alpha|irG!\"\"F&%&beta|i rGF0F0F&F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*,-%$expG6#*(%'alp ha|irG\"\"\"%\"xGF+^#F+F+F+%#PiGF+%&beta|irGF+F,F+-%%sinhG6#*(F.F+F/F+ F,F+!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&roughG,$*&\"\"\"F'*&\" \"'F'%&beta|irGF'!\"\"F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%'a lpha|irG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*(\"\"$!\"\"%&be ta|irG\"\"#%#PiGF*\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G, $,$-%$IntG6$**,&%\"xG\"\"\"%'alpha|irG!\"\"\"\"$-%$expG6#*&F+F-%&beta| irGF/F-F5F/,&F-F-F1F-!\"#/F,;,$%)infinityGF/F;*(F0F-F0#F-\"\"#*&)F5F>F -)%#PiGF>F-#!\"$F>F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$,$- %$IntG6$**,&%\"xG\"\"\"%'alpha|irG!\"\"\"\"%-%$expG6#*&F+F-%&beta|irGF /F-F5F/,&F-F-F1F-!\"#/F,;,$%)infinityGF/F;*(\"\"*F-F5!\"%%#PiGF>F-" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%'alpha|irG\"\"\"*&%&beta|irG F'-%#lnG6#*&%\"pGF',&F'F'F.!\"\"F0F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&%'alpha|irG\"\"\"*&-%#lnG6#,$*&,&F'!\"\"%\"pGF'F'F0F/F /F'%&beta|irGF'F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7$**-%$e xpG6#*&,&%\"xG\"\"\"%'alpha|irG!\"\"F-%&beta|irGF/F-,&F-F/F'F-F-F0!\"# ,&F-F-F'F-!\"$**F'F-,.F,F/*&F,F-F'F-F-F.F-*&F.F-F'F-F/F0F/*&F0F-F'F-F/ F-F0F4F3F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(%&beta|irG!\"#-%$exp G6#*&,&%\"xG\"\"\"%'alpha|irG!\"\"F-F%F/F-,&F-F-F'F-F&F/" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&cdfgrG7$,$*(,&\"\"\"F)-%$expG6#,$*&,&%\"xGF)% 'alpha|irG!\"\"F)%&beta|irGF2F2F)!\"#F3F2F*F)F2,$**F(F4F/F)F3F4F*F)F2 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&&%%dcdfG6#\"\"#\"\"\"&F%6#F(!\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+<@7QS!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Aiu58!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+(y& e5t!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$\"+H$)pIu!#6$!+***3%fSF& " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+<@7QS!#6$!+Eg=+ZF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+Aiu58!#5F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+p%em\"R!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!++ +++]!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+[!*p?F!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+I^$4L\"!#@" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+*******>%!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+.L?-u!\"* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+++++]!#5$\"+[!*p?F!\"*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "qdf2 := alpha-ln(-(-1+p)/p)* beta;\ndiff(kurt_,alpha);\ndiff(kurt_,beta);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&%'alpha|irG\"\"\"*&-%#lnG6#,$*&,&F'!\"\"%\"pG F'F'F0F/F/F'%&beta|irGF'F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" } }{PARA 12 "" 1 "" {XPPMATH 20 "6#,&,$-%$intG6$,(**,&%$_t0G!\"\"%'alpha |irG\"\"\"\"\"&%&beta|irG!\"$-%$expG6#,$*&F*F.F0F,F,F.,&F.F.F2F.!\"#F. **F*\"\"%F0F8F2F.F7F8F,*,\"\"#F.F*F/F2F " 0 "" {MPLTEXT 1 0 33 "plot(subs(valnum,pdf) ,x=-10..10);" }}{PARA 13 "" 1 "" {GLPLOT2D 355 355 355 {PLOTDATA 2 "6% -%'CURVESG6$7ao7$$!#5\"\"!$\"3?lz>^T()z6!#?7$$!3\"pmmm\"p0k&*!#<$\"3*> M0cpAfd\"F-7$$!3uKL$39PkbeE?F-7$$!3XmmmT%p\"e()F1$\"3)fy! o5?#yo#F-7$$!3/nmm\"4m(G$)F1$\"3XRrj@w6pNF-7$$!3OLL$3i.9!zF1$\"3$4?=h$ f%)GZF-7$$!3fmm;/R=0vF1$\"3pU*y7t[>8'F-7$$!3k++]P8#\\4(F1$\"3$Q+B\"oz) R,)F-7$$!3Kmm;/siqmF1$\"3x.-yTO)\\0\"!#>7$$!3Q****\\(y$pZiF1$\"3n]3cAL 2%Q\"FW7$$!3jKLL$yaE\"eF1$\"3h^\"=gIRO#=FW7$$!3s%HaF1$\"3\")oj1 g9I;BFW7$$!3]******\\$*4)*\\F1$\"33z@%eKL_,$FW7$$!3p******\\_&\\c%F1$ \"3oWW3&G#p**QFW7$$!3$)******\\1aZTF1$\"3\"y#z/_2t]\\FW7$$!3Imm;/#)[oP F1$\"3KkP*>0uz3'FW7$$!3%HLLL=exJ$F1$\"3-$\\kP]()em(FW7$$!3!GLL$eW%o7$F 1$\"39VQJ&[Q8S)FW7$$!3lKLLL2$f$HF1$\"3&e?msa>)p\"*FW7$$!3CmmT&o_Qr#F1$ \"3])pTBrd&45!#=7$$!3%)****\\PYx\"\\#F1$\"3!Q%\\Z;T7/6Fiq7$$!3smmTNz>& H#F1$\"3GZIvZ:+)=\"Fiq7$$!3gLLLL7i)4#F1$\"3d6$>7Z^/F\"Fiq7$$!39mmTNa%H )=F1$\"3W\\K>?:Bd8Fiq7$$!3n)***\\P'psm\"F1$\"3ceFRV)*yP9Fiq7$$!3%*)*** *\\F&*=Y\"F1$\"3`)e?%R$>k]\"Fiq7$$!3?****\\74_c7F1$\"3@kxs_s,l:Fiq7$$! 3PlmT5VBU5F1$\"3$)=v5?JQ8;Fiq7$$!3M:LL$3x%z#)Fiq$\"3YalUcw!pk\"Fiq7$$! 3'*=Le9rc&H(Fiq$\"3Qz'z91Ypl\"Fiq7$$!3gAL$e9d;J'Fiq$\"3T7yD9Z[j;Fiq7$$ !3UC$e9;-(>eFiq$\"3j#)e*[+Bam\"Fiq7$$!3BEL3xruF`Fiq$\"3@/(y)fxYm;Fiq7$ $!30G$3F>#zN[Fiq$\"3>MH&Rt;mm\"Fiq7$$!3()HLL3s$QM%Fiq$\"3(Gg!z1'pem\"F iq7$$!3`kmT&QdDG$Fiq$\"3D4^#)Rj@h;Fiq7$$!3>****\\ivF@AFiq$\"3)Q+x7N\\C l\"Fiq7$$!3'QL$eRx**f6Fiq$\"3:R%pW[b'R;Fiq7$$!3\\^omm;zr)*F-$\"3!e@\"Fiq7$$\"3cnm;HCjV9F1$\"3\"e/o2y6Z7\"Fiq7$$\"3>++++d xd;F1$\"3]6#*p2gJL5Fiq7$$\"3Q++]7JFn=F1$\"30jyFs!HHX*FW7$$\"3f+++D0xw? F1$\"3!))*4;\"Qk**f)FW7$$\"3%3+]P/q%zAF1$\"3x\"=hpB`/\"yFW7$$\"35,+]i& p@[#F1$\"3p'pSJNAJ1(FW7$$\"3++++vgHKHF1$\"3Y)p?&pvyubFW7$$\"3ElmmmZvOL F1$\"36?FK/Wz[WFW7$$\"3&4+++v+'oPF1$\"3O^%=`8+#fMFW7$$\"3UKL$eR<*fTF1$ \"3uJLKZeOLFFW7$$\"3L-++])Hxe%F1$\"3u*)ptup\\*4#FW7$$\"3!fmm\"H!o-*\\F 1$\"3>$[]-RI-j\"FW7$$\"3X,+]7k.6aF1$\"38p)odHsF-7$$\"3 " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidLogistic.txt000066400000000000000000000175031307543307100216500ustar00rootroot00000000000000> restart: > with(Statistics): > assume(beta>0,beta,real,alpha,real): > logistic_:=RandomVariable(Logistic(alpha,beta)): > pdf:=PDF(logistic_,x); > ddf:=factor(diff(pdf,x)); > cdf:=CDF(logistic_,x); > cf:=subs(u=x,CharacteristicFunction(logistic_,u)); > rough:=factor(int(pdf^2,x=-infinity..infinity)); > mu_:=Mean(logistic_); > var_:=Variance(logistic_); > #skew_:=simplify(convert(Skewness(logistic_),GAMMA),symbolic); > skew_:=Int((x-mu_)^3*pdf,x=-infinity..infinity)/var_^(3/2); > #kurt_:=simplify(convert(Kurtosis(logistic_),GAMMA),symbolic); > kurt_:=Int((x-mu_)^4*pdf,x=-infinity..infinity)/var_^2; > qdf:=Quantile(logistic_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=map(factor,[diff(pdf,alpha),diff(pdf,beta)]); > factor(pdfgr[2]-(x-alpha)*pdfgr[1]/beta); > cdfgr:=map(factor,[diff(cdf,alpha),diff(cdf,beta)]); > factor(dcdf[2]/dcdf[1]); > valnum:=alpha=-1/2,beta=3/2: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(solve(subs(valnum,cdf)=0.95,x)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); > evalf(subs(valnum,[mu_,sqrt(var_)])); x - alpha~ exp(----------) beta~ pdf := ---------------------------- / x - alpha~ \2 beta~ |1 + exp(----------)| \ beta~ / x - alpha~ / x - alpha~ \ exp(----------) |-1 + exp(----------)| beta~ \ beta~ / ddf := - -------------------------------------- 2 / x - alpha~ \3 beta~ |1 + exp(----------)| \ beta~ / 1 cdf := --------------------- x - alpha~ 1 + exp(- ----------) beta~ exp(alpha~ x I) Pi beta~ x cf := -------------------------- sinh(Pi beta~ x) 1 rough := ------- 6 beta~ mu_ := alpha~ 2 2 beta~ Pi var_ := ---------- 3 skew_ := infinity / 3 x - alpha~ 1/2 | (x - alpha~) exp(----------) 3 3 | beta~ --------------- | ----------------------------- dx 2 2 3/2 | / x - alpha~ \2 (beta~ Pi ) | beta~ |1 + exp(----------)| / \ beta~ / -infinity infinity / 4 x - alpha~ | (x - alpha~) exp(----------) 9 | beta~ kurt_ := ---------- | ----------------------------- dx 4 4 | / x - alpha~ \2 beta~ Pi | beta~ |1 + exp(----------)| / \ beta~ / -infinity p qdf := alpha~ + beta~ ln(-----) 1 - p -1 + p qdf2 := alpha~ - ln(- ------) beta~ p x - alpha~ / x - alpha~ \ exp(----------) |-1 + exp(----------)| beta~ \ beta~ / x - alpha~ / pdfgr := [--------------------------------------, exp(----------) | 2 / x - alpha~ \3 beta~ \ beta~ |1 + exp(----------)| \ beta~ / x - alpha~ x - alpha~ -x + x exp(----------) + alpha~ - alpha~ exp(----------) beta~ beta~ x - alpha~ \ / / 3 - beta~ - beta~ exp(----------)| / |beta~ beta~ / / \ / x - alpha~ \3\ |1 + exp(----------)| |] \ beta~ / / x - alpha~ exp(----------) beta~ - ----------------------------- 2 / x - alpha~ \2 beta~ |1 + exp(----------)| \ beta~ / x - alpha~ exp(- ----------) beta~ cdfgr := [- ------------------------------, / x - alpha~ \2 |1 + exp(- ----------)| beta~ \ beta~ / x - alpha~ (x - alpha~) exp(- ----------) beta~ - -------------------------------] / x - alpha~ \2 2 |1 + exp(- ----------)| beta~ \ beta~ / dcdf[2] ------- dcdf[1] -0.04038122117 0.1310746222 0.7310585787 0.07430698329 - 0.04059408999 I [0.04038122117, -0.04700186026] [-0.1310746222, -0.1310746222] 3.916658469 -0.5000000000 2.720699048 -11 0.1330935130 10 4.199999999 7.402203303 [-0.5000000000, 2.720699048] > qdf2 := alpha-ln(-(-1+p)/p)*beta; > diff(kurt_,alpha); > diff(kurt_,beta); -1 + p qdf2 := alpha~ - ln(- ------) beta~ p 0 infinity / 5 4 9 | (-_t0 + alpha~) %1 (-_t0 + alpha~) %1 ---------- | ------------------- - ------------------- 4 4 | 3 2 2 2 beta~ Pi / beta~ (1 + %1) beta~ (1 + %1) -infinity 5 2 2 (-_t0 + alpha~) %1 - ---------------------- d_t0 3 3 beta~ (1 + %1) / infinity \ | / 4 | | 36 | (-_t0 + alpha~) %1 | - |---------- | ------------------- d_t0| | 5 4 | 2 | |beta~ Pi / beta~ (1 + %1) | \ -infinity / -_t0 + alpha~ %1 := exp(- -------------) beta~ > plot(subs(valnum,pdf),x=-10..10); > openturns-1.9/validation/src/ValidMarginalTransformation.mws000066400000000000000000000165601307543307100245450ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 901 "restart:\nwith(Stat istics):\nassume(y>g):\nPx:=PDF(RandomVariable(Normal(mu,sigma)),x);\n Fx:=CDF(RandomVariable(Normal(mu,sigma)),x):\nPy:=PDF(RandomVariable(G amma(1/lambda,k)),y-g);\nFy:=subs(Int(subs(y=t,Py),t=g..y));\n# Margin al transformation\nT:=[Fx,Fy]:\nvalnum:=x=1/2,y=1/2,mu=1,sigma=5/2,k=3 /2,lambda=3,g=0:\nprint(\"Value=\");\nevalf(subs(valnum,T));\nprint(\" Parameters gradient\");\nevalf(subs(valnum,map(_t->diff(_t,mu),T)));\n evalf(subs(valnum,map(_t->diff(_t,sigma),T)));\nevalf[40](subs(epsilon =1e-10,subs(valnum,(subs(k=k+epsilon,T)-subs(k=k-epsilon,T))/(2*epsilo n))));\nevalf(subs(valnum,map(_t->diff(_t,lambda),T)));\nevalf(subs(va lnum,map(_t->diff(_t,g),T)));\nprint(\"Gradient\");\nevalf(subs(valnum ,diff(T,x)));\nevalf(subs(valnum,diff(T,y)));\nprint(\"Hessian\");\nev alf(subs(valnum,diff(T,x$2)));\nevalf(subs(valnum,diff(diff(T,x),y))); \nevalf(subs(valnum,diff(diff(T,y),x)));\nevalf(subs(valnum,diff(T,y$2 )));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#PxG,$*&#\"\"\"\"\"#F(**F) F'%#PiG#!\"\"F)%&sigmaGF--%$expG6#,$*(F)F-,&%\"xGF(%#muGF-F)F.!\"#F-F( F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#PyG**)*&,&%#y|irG\"\"\"%#g| irG!\"\"F*%'lambdaGF*,&%\"kGF*F*F,F*-%$expG6#,$F'F,F*F-F*-%&GAMMAG6#F/ F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#FyG-%$IntG6$**)*&,&%\"tG\"\" \"%#g|irG!\"\"F-%'lambdaGF-,&%\"kGF-F-F/F--%$expG6#,$F*F/F-F0F--%&GAMM AG6#F2F//F,;F.%#y|irG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q'Value=6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+1HS2U!#5$\"+P#[P3'F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q4Parameters~gradient6\"" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$$!+v23D*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q)Gradient6\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"+v23D*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q(Hessian6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+?mL^7!#6$ \"\"!F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%F$" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"\"!F%F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# 7$$\"\"!F%$!+dR;]=!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1637 "Digits:=50:\nepsnum:=1e-5:\nQuant:=proc(F,rules)\n local eq,sol:\n \+ FX:=subs(rules,F):\n eq:=subs(rules,F)=subs(rules,q):\n sol:=fsolve( eq,x,0..10,fulldigits);\n print([\"sol\",sol]);\n print([\"verif\",e valf(subs(x=sol,lhs(eq)))]);\n sol\nend:\n# Marginal transformation\n valnum2:=p=1/2,q=1/2,mu=1,sigma=5/2,k=3/2,lambda=3,g=0:\nprint(\"Value =\");\n[Quant(Fx,\{valnum2\}),Quant(subs(y=x,Fy),\{valnum2\})];\nprint (\"Parameters gradient\");\n#[(Quant(subs(mu=mu+epsnum,Fx),\{valnum2\} )-Quant(subs(mu=mu-epsnum,Fx),\{valnum2\}))/(2*epsnum),(Quant(subs(mu= mu+epsnum,y=x,Fy),\{valnum2\})-Quant(subs(mu=mu-epsnum,y=x,Fy),\{valnu m2\}))/(2*epsnum)];\n#[(Quant(subs(sigma=sigma+epsnum,Fx),\{valnum2\}) -Quant(subs(sigma=sigma-epsnum,Fx),\{valnum2\}))/(2*epsnum),(Quant(sub s(sigma=sigma+epsnum,y=x,Fy),\{valnum2\})-Quant(subs(sigma=sigma-epsnu m,y=x,Fy),\{valnum2\}))/(2*epsnum)];\n#[(Quant(subs(k=k+epsnum,Fx),\{v alnum2\})-Quant(subs(k=k-epsnum,Fx),\{valnum2\}))/(2*epsnum),(Quant(su bs(k=k+epsnum,y=x,Fy),\{valnum2\})-Quant(subs(k=k-epsnum,y=x,Fy),\{val num2\}))/(2*epsnum)];\nq1:=Quant(subs(k=k+epsnum,y=x,Fy),\{valnum2\}); \nevalf(subs(y=q1,valnum2,subs(k=k+epsnum,Fy)));\nq2:=Quant(subs(k=k-e psnum,y=x,Fy),\{valnum2\});\nevalf(subs(y=q2,valnum2,subs(k=k-epsnum,F y)));\nv:=(q1-q2)/(2*epsnum);\n#[(Quant(subs(lambda=lambda+epsnum,Fx), \{valnum2\})-Quant(subs(lambda=lambda-epsnum,Fx),\{valnum2\}))/(2*epsn um),(Quant(subs(lambda=lambda+epsnum,y=x,Fy),\{valnum2\})-Quant(subs(l ambda=lambda-epsnum,y=x,Fy),\{valnum2\}))/(2*epsnum)];\n#[(Quant(subs( g=g+epsnum,Fx),\{valnum2\})-Quant(subs(g=g-epsnum,Fx),\{valnum2\}))/(2 *epsnum),(Quant(subs(g=g+epsnum,y=x,Fy),\{valnum2\})-Quant(subs(g=g-ep snum,y=x,Fy),\{valnum2\}))/(2*epsnum)];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q'Value=6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q$sol6\"$\"S+++ +++++++++++++++++++++5!#\\" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q&veri f6\"$\"S++++++++++++++++++++++++]!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7$Q$sol6\"$\"S(Q9-L]]<%3%3@+r_cV/B#H2)*GVR!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q&verif6\"$\"S++++++++++++++++++++++++]!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"S++++++++++++++++++++++++5!#\\$\"S(Q9-L ]]<%3%3@+r_cV/B#H2)*GVR!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q4Parame ters~gradient6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q$sol6\"$\"S0en7 /gwN,D-,HfOT/qa1b%y99\"!#\\" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q&ver if6\"$\"SgR`bw))Q$[%*QEJTN>:\\T8b[()=t%!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#q1G$\"S0en7/gwN,D-,HfOT/qa1b%y99\"!#\\" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"SgR`bw))Q$[%*QEJTN>:\\T8b[()=t%!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q$sol6\"$\"Szr0:H(\\\\m?'ef([f'4Y&)3u_q5ju !#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$Q&verif6\"$\"Sp@c5LLYDs9+5+mC yk8>Gc'QyN$!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#q2G$\"Szr0:H(\\\\ m?'ef([f'4Y&)3u_q5ju!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"Sp@c5LLY Ds9+5+mCyk8>Gc'QyN$!#]" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"vG$\"SO/ &eg:bjMS>`7!***>!\\2p&*[(Qe(>!#X" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 537 "\nevalf(subs(valnum,map(_t->diff(_t,sigma),T)));\nev alf[40](subs(epsilon=1e-10,subs(valnum,(subs(k=k+epsilon,T)-subs(k=k-e psilon,T))/(2*epsilon))));\nevalf(subs(valnum,map(_t->diff(_t,lambda), T)));\nevalf(subs(valnum,map(_t->diff(_t,g),T)));\nprint(\"Gradient\") ;\nevalf(subs(epsilon=1e-7,valnum,(subs(x=x+epsilon,T)-subs(x=x-epsilo n,T))/(2*epsilon)));\nevalf(subs(valnum,diff(T,y)));\nprint(\"Hessian \");\nevalf(subs(valnum,diff(T,x$2)));\nevalf(subs(valnum,diff(diff(T, x),y)));\nevalf(subs(valnum,diff(diff(T,y),x)));\nevalf(subs(valnum,di ff(T,y$2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q'Value=6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++5!\"*$\"+2)*GVR!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q4Parameters~gradient6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#$\"++,++5!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"+]:MGJ!#6$\"\"!F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%$\"B$ [ii>A*>=&y(e9q99q'!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%$\" +)H.=a\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%$!+)y>3D*!#5 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q)Gradient6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"%k:!\"%$\"\"!F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7$$\"\"!F%$\"+'y>3D*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q(Hessian6 \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+?mL^7!#6$\"\"!F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"\"!F%$!+dR; ]=!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0 " 83 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidMeixner.mw000066400000000000000000001617351307543307100213150ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZfby1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiMtRiw2JVEmcGxvdHNGJ0YvRjJGOUY1Rk9GZ24tRiw2JVEnYXNzdW1lRidGL0YyLUZgbzYkLUYjNiktRiw2JVEmZGVsdGFGJy9GMEY9RjktRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRImtGJ0YvRjJGaXAtRiw2JVEoaW50ZWdlckYnRi9GMkY5RjVGT0Znbi1GLDYlUSd2YWxudW1GJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZnbi1GLDYlUSViZXRhRidGYXBGOS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GZnA2JFEiMkYnRjlGaXBGXnBGXnItRmZwNiRRIjFGJ0Y5RjVGT0Znbi1GLDYlUSJLRidGL0YyRmhxLUkmbWZyYWNHRiQ2KC1JJW1zdXBHRiQ2JS1GYG82JC1GIzYmRmFyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GLDYlUSRjb3NGJ0ZhcEY5LUZgbzYkLUYjNiMtRltzNihGW3ItRiM2I0Zhci8lLmxpbmV0aGlja25lc3NHRmZyLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmZ0LyUpYmV2ZWxsZWRHRj1GOUY5LUYjNiVGYXJGZHNGXnAvJTFzdXBlcnNjcmlwdHNoaWZ0R0ZocC1GIzYoRmFyRmRzLUYsNiVRI1BpRidGYXBGOUZkcy1GLDYlUSZHQU1NQUYnRmFwRjktRmBvNiRGW3VGOUZidEZkdEZndEZpdEY1Rk9GZ24tRiw2JVEiZ0YnRi9GMkZocS1GLDYlUSRleHBGJ0ZhcEY5LUZgbzYkLUYjNiVGW3JGZHMtRiw2JVEieEYnRi9GMkY5RmRzLUZgbzYkLUYjNictRiw2JVEjUmVGJ0ZhcEY5LUZeczYlLUZgbzYkLUYjNiRGZHUtRmBvNiQtRiM2J0ZecC1GNjYtUSIrRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORlt4LUYsNiVRIklGJ0YvRjJGZHNGY3ZGOUY5RmB0Rl11Rmd3LUYsNiVRI0ltRidGYXBGOUZdd0Y5RjVGT0Znbi1GLDYlUSJmRidGL0YyRmhxRmdyRmRzLUYsNiVGW3ZGYXBGOUY1Rk9GZ24tRiw2JVElcGxvdEYnRi9GMi1GYG82JC1GIzYrLUYsNiVRJXN1YnNGJ0YvRjItRmBvNiQtRiM2JUZlcUZpcEZjeEY5RmlwRmN2Rl5yLUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZqd0ZceC1GZnA2JFEiNUYnRjktRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkhGandGW28tRmZwNiRRIzEwRidGOUY5LUY2Ni1RIjtGJ0Y5RjtGXHFGQEZCRkRGRkZIRmpuRk0tRlA2JkZSRlVGWC9GZW5RJWF1dG9GJ0ZPRmV6RmduRmh4LUZgbzYkLUYjNitGX3ktRmBvNiQtRiM2JkZlcUZpcC1GLDYlUSVzcXJ0RidGYXBGOS1GYG82JC1GIzYjRmN4RjlGOUZpcEZjdkZeckZmeUZpeUZcekZfekY5RmJ6RjVGT0Znbi1GLDYlUS1pbXBsaWNpdHBsb3RGJ0YvRjItRmBvNiQtRiM2N0ZhW2wtRmBvNiQtRiM2JEZfeS1GYG82JC1GIzYoRmN2Rl5yLUZbczYoLUYjNiMtRiw2JVEidkYnRi9GMi1GIzYjLUYsNiVRInVGJ0YvRjJGYnRGZHRGZ3RGaXRGaXBGX3ktRmBvNiQtRiM2JUZlcUZpcEZpdUY5RjlGOUZeckZgXWxGaXBGYF1sRl5yRmVwRlx6LUZmcDYkUSQxLjVGJ0Y5RmlwRltdbEZeckZmeS1GZnA2JFEkMC41RidGOUZcei1GZnA2JFEkMi41RidGOUZpcC1GLDYlUSVncmlkRidGL0YyRl5yLUZgbzYmLUYjNiUtRmZwNiRRIzExRidGOUZpcEZnXmxGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0Y5RmJ6LUYsNiNRIUYn LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdobzckJCEjXSEiIiQiMk1LdSQzWGolKlIhI0Y3JCQhLHZvVUluJSEjNSQiMXJYTChRYWArIyEjRDckJCEuRCJ5KWUmKVElISM3JCIxTXQuSjpBSiIpISNENyQkIS1EIjNGJ29TISM2JCIxXy51NmFeMFIhI0M3JCQhLXZvWGRZUCEjNiQiMigqKlw0RmVqJCk9ISNDNyQkIS5EY3JfZ1UkISM3JCIxJkhzIm9TKTQmKikhI0I3JCQhLkQiR3opKUdKISM3JCIydDQzQlhlc3ckISNCNyQkIS5ESisiPkBHISM3JCIybFtkT1Q2RGwiISNBNyQkIS5ESlNxSF0jISM3JCIxREVsXFU1SHYhI0A3JCQhLkQxTXFkPSMhIzckIjJjLVNHa1IpZUwhI0A3JCQhLHYzIlxmPSEjNSQiMWl1XyopKTQmSDohIz43JCQhMikqKipcUDkvQGQiISM7JCIxejQlKnA3Um5jISM+NyQkITIpKipcN0ckUi5UIiEjOyQiMlwrPWInKio0bzYhIz43JCQhMikqKioqXDdYZFs3ISM7JCIyLkU5ZCVRRXdCISM+NyQkITIqKioqXFAqKmZ0OyIhIzskIjIoKUd6XCYqPVNQJCEjPjckJCEyLCsrXVpYaDMiISM7JCIxUicpR3VtTm9aISM9NyQkITIvK11pJjQkXCsiISM7JCIxYDgjZSMqekpxJyEjPTckJCExLysrdlY7UCMqISM7JCIxKjNlakVuZ08qISM9NyQkITEtKytEJ2Y9bighIzskIjJFY0tDalMlWzwhIz03JCQhMSoqKioqXChbYjFoISM7JCIwTUIhSG48YkohIzs3JCQhMSoqXDcuIzNebyUhIzskIjF4SSJwS3ZEPiYhIzw3JCQhMiYqKipcN2BoT0UkISM8JCIxaFZcKT02dTspISM8NyQkITIlKlwoPVVGYT1DISM8JCIyImYtISkpRyhbVTUhIzw3JCQhMiUqKlw3YFJVdDohIzwkIjA5OyZRJykqSEkiISM6NyQkITEkKlxpUzswJEcoISM8JCIyUV0yIjNuaCNmIiEjPDckJCIxMisrXWk4bzYhIzwkIjJiWzpzSWw+IT4hIzw3JCQiMScqKipcUDRTRiQpISM8JCIyT1poLiYzVHFAISM8NyQkIjImKSoqKlxpbG1bOiEjPCQiMiVbSVJjRCZmViMhIzw3JCQiMnQqKlw3LiRma0EhIzwkIjIxPkRpKHBSIXAjISM8NyQkIjEnKioqKioqXD4wKUghIzskIjEkekJtaCtrI0ghIzs3JCQiMSdcKG96QEo4USEjOyQiMSZ6NDUwYSpwSiEjOzckJCIyYSpcUGZbNVlZISM8JCIxSC4pXEo0VVAkISM7NyQkIjEmXGkhUnYqKXlhISM7JCIyJipHVUQlUidmYCQhIzw3JCQiMSYqKlwoPS1wNmohIzskIjFGa1IjKlshW2wkISM7NyQkIjEmXGk6JkcmKVtxISM7JCIweShRRGhhRFAhIzo3JCQiMSYqXFAlWzpneSghIzskIjEkUSRlVTQ8bVAhIzs3JCQiMVg3eStvZmEiKSEjOyQiMUpMI1FgRWd4JCEjOzckJCIxJlwoPTwieUpfKSEjOyQiMWU/eW4tU3pQISM7NyQkIjFZUGZMJWY8KikpISM7JCIxVFg8IylIbndQISM7NyQkIjEnKioqKipcMk1nIyohIzskIjE6JmUiXCRII29QISM7NyQkIjIpKlxQTSM0eigzIiEjOyQiMnY+NzgpZjV0TyEjPDckJCIudj14WiZcNyEjNyQiMjh0Tldfa2FdJCEjPDckJCIyLCtdUGF5TlMiISM7JCIwYjgnKVJiPUkkISM6NyQkIjItK0RjSjR3YiIhIzskIjEoKnpuQnYydEkhIzs3JCQiL3Y9blVLPTwhIzgkIjJXJT5EWmt5QEchIzw3JCQiLXY9I1Ihej0hIzYkIjI4P2BsNU8lb0QhIzw3JCQiMi9daVNyRG0tIyEjOyQiMkdDVDM/SjFNIyEjPDckJCIyMit2JDRBQHVAISM7JCIyUXhPRiFcc0BAISM8NyQkIjIwXTdHPS9NTCMhIzskIjJWQiopUlh5JykqPSEjPDckJCIyLitdaTonZiNcIyEjOyQiMktUTzpSczZwIiEjPDckJCIvRGN3PSZ6bCMhIzgkIjJkNT1jPVdKXCIhIzw3JCQiLnZvZjJMI0chIzckIjE6JlFfKj4/ODghIzs3JCQiMicqKioqXFAtRG5IISM7JCIyeHZcREY6NTwiISM8NyQkIjIkKipcN3lHPjZKISM7JCIyUl4pW21rd1Q1ISM8NyQkIjIzK10ob282QU0hIzskIjFpaWt3TytOISkhIzw3JCQiMigqKioqKlx4Skx1JCEjOyQiMTRTRWhNNCI0JyEjPDckJCItdiQqeWRkUyEjNiQiMD5AXyI+OzdZISM7NyQkIi52PTxGO08lISM3JCIxciMqRzleI1FdJCEjPDckJCIxKioqXGkwQSMqcCUhIzokIjEiKkdWajtxbkQhIzw3JCQiMSoqKioqXDJtRCsmISM6JCIyOSRIQCsuUUw+ISM9NyQkIixEY11rSyYhIzUkIjJhVyMpPTF5QVUiISM9NyQkIjEqKlwoby9RKj5jISM6JCIyRlhRXmlBTTIiISM9NyQkIjEtK10oUSh6U2YhIzokIjFFIUcmKio9JXAneSEjPTckJCIudj0tLEZDJyEjNyQiMUtzO1ErcmNlISM9NyQkIjEsXVA0dEZlbCEjOiQiMV9kYWQxYCJIJSEjPTckJCIxKioqKlw3MyJvJ28hIzokIjIkPV9zZEdXZkohIz43JCQiLnZvejspKj0oISM3JCIxUUVxVXoneUcjISM9NyQkIjIwKysrJio0NF0oISM7JCIxaixJKUhtTG4iISM9NyQkIjEsK0RKdy8+eSEjOiQiMU5zY1VlNjg3ISM9NyQkIi52PSg0Yk0iKSEjNyQiMXc6JzM9I2UuKSkhIz43JCQiMS0rK3ZkWUMlKSEjOiQiMSk0aiFITE5bbCEjPjckJCIxLCtEYzN1YygpISM6JCIybTgmKj0nZSV6bCUhIz83JCQiMSoqKioqKlw7JFIwKiEjOiQiMSRHK2tUMi9WJCEjPjckJCIxLF0oPS0qenEkKiEjOiQiMk1PaWJbJXlzQyEjPzckJCIuRCJHOjN1JyohIzckIjFEKFF2PVVkIT0hIz43JCQiJCsiISIiJCIxdml0XnprJ0ciISM+LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhI10hIiIkIiQrIiEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEieDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJFMiISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlSVAhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlP04hIiItJSlDSElMRFJFTkc2Ig== LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdbbzckJCEjXSEiIiQiMW8jXEw1Ny5LJyEjQDckJCEsdm9VSW4lISM1JCIyJj4oUillYDU7OSEjQDckJCEuRCJ5KWUmKVElISM3JCIyTGVdRW9IOiZHISNANyQkIS1EIjNGJ29TISM2JCIxWDZ3LEJUXGkhIz83JCQhLXZvWGRZUCEjNiQiMkU2KVFIaFhzOCEjPzckJCEuRGNyX2dVJCEjNyQiMU1mbUMmPj0qSCEjPjckJCEuRCJHeikpR0ohIzckIjFbTExbJyp6UGghIz43JCQhLkRKKyI+QEchIzckIjJDIykzRVgrYkciISM+NyQkIS5ESlNxSF0jISM3JCIxazs7RjgjUnUjISM9NyQkIS5EMU1xZD0jISM3JCIxJylmISozKFxieiYhIz03JCQhLHYzIlxmPSEjNSQiMmBuK2tiTG5CIiEjPTckJCEyKSoqKlxQOS9AZCIhIzskIjJ4ZjdeTEcxUSMhIz03JCQhMikqKioqXDdYZFs3ISM7JCIxbSIpR3lPcHVbISM8NyQkITIsKytdWlhoMyIhIzskIjFweGxsKUdgIXAhIzw3JCQhMS8rK3ZWO1AjKiEjOyQiMTYicEJVV3luKiEjPDckJCExLSsrRCdmPW4oISM7JCIyUVFQJ1FoR0E4ISM8NyQkITEqKioqKlwoW2IxaCEjOyQiMSdSSldyIkd3PCEjOzckJCExKipcNy4jM15vJSEjOyQiMjlQLjlJQSh5QSEjPDckJCEyJioqKlw3YGhPRSQhIzwkIjFrRFklSG95JkchIzs3JCQhMiUqXCg9VUZhPUMhIzwkIjJEdSkqUTxkKEdLISM8NyQkITIlKipcN2BSVXQ6ISM8JCIxWz1wVnNxNE8hIzs3JCQhMSQqXGlTOzAkRyghIzwkIjEjUkZNQGcyKlIhIzs3JCQiMTIrK11pOG82ISM8JCIxT18nR3NfNk8lISM7NyQkIjImKSoqKlxpbG1bOiEjPCQiMjIhem0zcWBOXCEjPDckJCIxJyoqKioqKlw+MClIISM7JCIxRylcKEc7aTRhISM7NyQkIjJhKlxQZls1WVkhIzwkIjFLXzhtV3ozZSEjOzckJCIxJioqXCg9LXA2aiEjOyQiMVJiP08jKVxYZyEjOzckJCIxJlxpOiZHJilbcSEjOyQiMSR5Pls+RFA1JyEjOzckJCIxJipcUCVbOmd5KCEjOyQiMUtDbnNPInA4JyEjOzckJCIxWDd5K29mYSIpISM7JCIxS25KKT1RXDknISM7NyQkIjEmXCg9PCJ5Sl8pISM7JCIxNGQnenEjb1poISM7NyQkIjFZUGZMJWY8KikpISM7JCIxLzNdbVRZWGghIzs3JCQiMScqKioqKlwyTWcjKiEjOyQiMTI1VjgwZlFoISM7NyQkIjIpKlxQTSM0eigzIiEjOyQiMShIeVtZOjExJyEjOzckJCIudj14WiZcNyEjNyQiMSxyI3pNJ3A/ZiEjOzckJCIyLStEY0o0d2IiISM7JCIxX0RtVlhgVmIhIzs3JCQiLXY9I1Ihej0hIzYkIjEwKHojZlMoejEmISM7NyQkIjIyK3YkNEFAdUAhIzskIjF2KzY8Jj1pZyUhIzs3JCQiMi4rXWk6J2YjXCMhIzskIjFSRW9XbVE3VCEjOzckJCIudm9mMkwjRyEjNyQiMU0jM0QhSCJRaSQhIzs3JCQiMiQqKlw3eUc+NkohIzskIjJjb2J0c1N3QSQhIzw3JCQiMjMrXShvbzZBTSEjOyQiMW8pUl4/M1kkRyEjOzckJCIyKCoqKioqXHhKTHUkISM7JCIybjhSQjI5IW9DISM8NyQkIi12JCp5ZGRTISM2JCIyLVQpXFtXZlpAISM8NyQkIi52PTxGO08lISM3JCIyYUc9IT4yJj0oPSEjPDckJCIxKioqXGkwQSMqcCUhIzokIjJmX3JCJ1xTLTshIzw3JCQiMSoqKioqXDJtRCsmISM6JCIyblN3TFlnL1IiISM8NyQkIixEY11rSyYhIzUkIjJUT2YjKipIZiM+IiEjPDckJCIxKipcKG8vUSo+YyEjOiQiMSU9OzI2aGcuIiEjOzckJCIxLStdKFEoelNmISM6JCIxRjpNKEd5JnApKSEjPDckJCIudj0tLEZDJyEjNyQiMU81Vy1YIkhsKCEjPDckJCIxLF1QNHRGZWwhIzokIjFVakJHdig0YichIzw3JCQiMSoqKipcNzMibydvISM6JCIxQkdPXkAqM2kmISM8NyQkIi52b3o7KSo9KCEjNyQiMV5SVWJpOyR5JSEjPDckJCIyMCsrKyYqNDRdKCEjOyQiMUQ1dTkrbyE0JSEjPDckJCIxLCtESncvPnkhIzokIjBQSGFEIilIWyQhIzs3JCQiLnY9KDRiTSIpISM3JCIxKWZuKTRKM25IISM8NyQkIjEtKyt2ZFlDJSkhIzokIjJPQS9XMHYqZUQhIz03JCQiMSwrRGMzdWMoKSEjOiQiMilbJSlcIltGI2VAISM9NyQkIjEqKioqKipcOyRSMCohIzokIjIuXG9sIWY4Xz0hIz03JCQiMSxdKD0tKnpxJCohIzokIjI5aiYqeSgqM0RkIiEjPTckJCIuRCJHOjN1JyohIzckIjBVbiVwIXpQTSIhIzs3JCQiJCsiISIiJCIybnZGQjAwVjgiISM9LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhI10hIiIkIiQrIiEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEieDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJFMiISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlSVAhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlP04hIiItJSlDSElMRFJFTkc2Ig== LSUlUExPVEc2JS0lJ0NVUlZFU0c2JTckNyQkIiIhISIiJCEiJiEiIjckJCIiISEiIiQhIiMhIiI3Zm43JCQiIzohIiMkITJRclJKSUVBKD0hIzw3JCQiMiYpW0RiOCRwZUAhIzwkISIjISIiNyQkIiIkISIiJCEyVyEpeV1tVG1sIyEjPDckJCIxcmVoaylHL0gkISM7JCEyRHVKI0h4JjNlIyEjPDckJCIjWCEiIyQhMnVMTzhhLlp2IyEjPDckJCIxKWVgT20peVtbISM7JCExd3JJRnRkKHAjISM7NyQkIiInISIiJCEyO1YmZTZdWU1DISM8NyQkIjFsekFaJ2ZMPichIzskITIpSGZYJUg+blEjISM8NyQkIjBkWXlENWwsKCEjOiQhIiMhIiI3JCQiMXYnengzKEhKdSEjOyQhMidbJGZiPCVmaT0hIzw3JCQiI3YhIiMkITFHWWtHamcsPSEjOzckJCIxb1gpcENATGgpISM7JCEyZDhwUlxVbUEiISM8NyQkIiIqISIiJCExZFRLc2xKbiQpISM8NyQkIjFNYVxTJEg+byohIzskITI5cDMqNG9lUU8hIz03JCQiJDAiISIjJCIyWSYqb0JfJ1JuYyEjPTckJCIxSyo+eU1EXjEiISM6JCIxLk8sTy8kXChwISM8NyQkIjFuI3p5JWYhKikzIiEjOiQiIiIhIiI3JCQiMkcrLSI9OUlfNiEjOyQiMmAlKmZ6anJSJj4hIzw3JCQiIzchIiIkIjE2QkI8Q1c7RyEjOzckJCIydXkhKio0ZHhLNyEjOyQiMihbVT0rZVtXTCEjPDckJCIyS00yS0F2cEUiISM7JCIiJSEiIjckJCIyKXoqKkh5amMqSCIhIzskIjEuLytNQ24zXSEjOzckJCIkTiIhIiMkIjEqUVhKJFJXLWwhIzs3JCQiMkM0OSlRRC9nOCEjOyQiMWAiPVBBXCIqeichIzs3JCQiMnYqek9mMSNvTyIhIzskIiIoISIiNyQkIjImZW4vVTtdKFIiISM7JCIxSlsxZnInKlwhKiEjOzckJCIyKHooRzglb2g6OSEjOyQiIzUhIiI3JCQiMXhaZmw6Ozs5ISM6JCIxWS8iKW9vbm42ISM6NyQkIjE5JCopSFg3T1UiISM6JCIjOCEiIjckJCIxaj0heSopZTFTIiEjOiQiMlFGJ1IvQW8pXCIhIzs3JCQiMloqZScqMzotJVIiISM7JCIjOyEiIjckJCIkTiIhIiMkIjI+XXVVInpYLT0hIzs3JCQiMjdVPFV5OjpLIiEjOyQiIz4hIiI3JCQiIzchIiIkIjE8eDJwI1w7PCMhIzo3JCQiMjptMllraCF5NiEjOyQiI0EhIiI3JCQiJDAiISIjJCIyJCo0QDhbcm9MIyEjOzckJCIxak80NXNMRCgqISM7JCIxbjcpemJLXE4jISM6NyQkIiIqISIiJCIyMlBcVVkxW1EjISM7NyQkIjEmSCtWKGYxSSMpISM7JCIyOCUqUl4hbylSTiMhIzs3JCQiI3YhIiMkIjJGJW9NeitXTUIhIzs3JCQiMWFqKVJUZ18vKCEjOyQiMUhGPzx6JTRIIyEjOjckJCIxPScqPSZ6O0U+JyEjOyQiI0EhIiI3JCQiMWkzdypvQzYxJyEjOyQiMncjeS9pXXgoPSMhIzs3JCQiIichIiIkIjJYOV0lZVFzIz0jISM7NyQkIjEtJVxCSSs7PSYhIzskIjImPixgUip6TzEjISM7NyQkIiNYISIjJCIybGQnKXAzczMkPiEjOzckJCIyJClvJGU7dng0VyEjPCQiMkFFJG8nXFchPT4hIzs3JCQiMWIoXCcqeUp4TyUhIzskIiM+ISIiNyQkIjJsRF5hOHQjW08hIzwkIjIoWyg0SFBYLngiISM7NyQkIjIkRy9CYyFSaj0kISM8JCIjOyEiIjckJCIyYCYpelE+VUQ0JCEjPCQiMUhTQWg6XCJlIiEjOjckJCIiJCEiIiQiMkEhKm9SKipRY2IiISM7NyQkIjIzekIkXGl0RUEhIzwkIjI9Q04sdl9ZWCIhIzs3JCQiMjpiQlpxYGs2IyEjPCQiIzghIiI3JCQiMU5iO3YvdS89ISM7JCIxJCpvJ1whPjBSNyEjOjckJCIyJm8sJ29FJDNCOiEjPCQiIzUhIiI3JCQiMVZpbXltXjc6ISM7JCIxOXZtVW0nXCgqKiEjOzckJCIjOiEiIyQiMUslZic+TjVCKiohIzstJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJ1NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiItSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJ2NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiItJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiRJJyEiIi0lKUJPVU5EU19ZRzYjJCIjXSEiIi0lLUJPVU5EU19XSURUSEc2IyQiJSFIJCEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiU/USEiIi0lKUNISUxEUkVORzYi QyQ+SSVleHByRzYiLCYtSSRpbnRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiU2JComLUkkZXhwR0YpNiMsJi1GLzYjKiYsJkkjUGlHRiojISIiIiIjKiZJImtHRiUiIiJGNkY8RjlGPEkieEdGJUY4RjgqKEkmZGVsdGFHRiVGPEkidUdGJUY8Rj1GOEY8RjwtSSRjb3NHRik2I0ZARjwvRkA7RjUsJkY2I0Y8RjlGOkY5RjwtRig2JComLUYvNiMsJi1GLzYjKiYsJi1JIipHRio2JCwkRjYiIiRGR0Y4RjpGOUY8Rj1GOEY4Rj5GPEY8RkFGPC9GQDtGRiwmRlJGPEY6RjlGPEY8 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqKkkieEc2IiIiIy1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjKiYsJiooSSdkZWx0YXxpckdGJSIiIkkja3xpckdGJUYxSSNQaUdGKkYxRiYqJi1GKDYjLCQqKEYzRjEsJiEiIkYxRjIiIiVGMUYkRjojRjFGJkYxRiRGMUY6RjFGJEY6RjEsJi1GKDYjLCQqKEYkRjpGMEYxRjNGMSNGOkYmRjEtRig2IywkRkFGPEYxRjEsJiokRjBGJkYxKiRGJEYmRjFGOkYxKipGJEYmLUYoNiMsJComLCZGLyEiIyomLUYoNiMsJCooRjNGMSwmISIkRjFGMkY7RjFGJEY6RjxGMUYkRjFGMUYxRiRGOkY6RjEsJkZDRjEtRig2IywkRkEjIiIkRiZGMUYxRkZGOkY6 LUkoY29udmVydEclKnByb3RlY3RlZEc2JC1JKXNpbXBsaWZ5RzYkRiRJKF9zeXNsaWJHNiI2I0klZXhwckdGKkkldHJpZ0dGKA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KihJInhHNiIiIiMsMi1JJWNvc2hHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2IywkKiYsJiomLUkkZXhwR0YpNiMsJComLCYqJkkja3xpckdGJCIiIkkjUGlHRipGOSIiJUY6ISIiRjlGI0Y8I0Y5RiVGOUYjRjlGJSooRjpGOUknZGVsdGF8aXJHRiRGOSwmRjhGOSNGPEY7RjlGOSEiJUY5RiNGPEY9RjktSSVzaW5oR0YpRixGPC1GKDYjLCQqJiwmRjBGJSooRjpGOSwmRjhGOSNGOUY7RjlGOUY/RjlGQkY5RiNGPEY9RjktRkRGRkY8LUYoNiMsJComLCYqJi1GMjYjLCQqJiwmRjdGO0Y6ISIkRjlGI0Y8Rj1GOUYjRjkhIiNGSkY7RjlGI0Y8Rj1GPC1GREZPRjwtRig2IywkKiYsJkZTRloqKCwmRjhGOSMiIiRGO0Y5RjlGOkY5Rj9GOUY7RjlGI0Y8Rj1GPC1GREZnbkY8RjksJiokRj9GJUY5KiRGI0YlRjlGPA== QyQtSSVwbG90RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQtSSVzdWJzR0YmNiRJJ3ZhbG51bUdGKC1JJHN1bUdGJTYkKiZJInhHRigiIiNJJWV4cHJHRigiIiIvSSJrR0YoOyEiI0YzL0YyOyEiJiIiJkY1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdocDckJCEjXSEiIiQiMVYuJHAyIlw3PyEjOTckJCEyTkxMJGUlRz95JSEjOyQiMXJlJnpWSWl5IiEjOTckJCExbW1UJmVzQmYlISM6JCIxJ1FHbWdOSWciISM5NyQkITFMTCQzcyUzelYhIzokIjI8TTEkKWVNPlQiISM6NyQkITJOTExlLyRRa1QhIzskIjJsaXdtU1VbQiIhIzo3JCQhMm5tOy8iPXFdUiEjOyQiMig0O3ItO3lzNSEjOjckJCEyTEwkM18+Zl9QISM7JCIvWidmQ242TSohIzg3JCQhMi4rXShvMVlaTiEjOyQiL1U/bU1XNyEpISM4NyQkITFMTDMtT0pOTCEjOiQiME9TYCQ9QVduISM5NyQkITIoKioqXFAqbyVRNyQhIzskIjFlKm9CJyo0R2UmISM6NyQkITJqbW07UkZqIUghIzskIjFARE8kZXRkXCUhIzo3JCQhMUxMJGU0T1pyIyEjOiQiMm0lUjUpUUxBaiQhIzs3JCQhMigqKioqKlxuXCEqXCMhIzskIjFuVCM0TnMueCMhIzo3JCQhK0R3WiNHIyEiKiQiMVRxU0pQeEU/ISM6NyQkIStELnh0PyEiKiQiMTtuY1lLXUY5ISM6NyQkITJKTCQzLVRDJSk9ISM7JCIxR05pZTItQSkqISM7NyQkITJsbW07NHopZTshIzskIjFeeldjb3E3ZCEjOzckJCEyam1tbU9selkiISM7JCIybEcjNCkpZWQpPSQhIzw3JCQhLXY9dCllQyIhIzYkIjJXP0IweUEyRiIhIzw3JCQhMm9tbW1oNSRcNSEjOyQiMU5CYyEpKXAzdiQhIzw3JCQhMSQqKipcKD1bakwpISM7JCIybkEhKXojeXZkTyEjPjckJCExJyoqKlxpWGcjRychIzskIjE9ZTBRNVF0byEjPzckJCEyeGxtO2FRKFJUISM8JCIydHNlLCJSQ2FHISNCNyQkITFsbTsvJz0+PCMhIzskIjEyKEhqYHppLSkhI0c3JCQhMicqKipcN3lRMTYiISM8JCIxKHpmVmgqNENjISNRNyQkITFFTUxMZSplJFwhIz0kIiIhISIiNyQkIjE3Oy9FdnVWKSkhIz0kITIiKWZhOSNbdSZlIiIkMiM3JCQiMThIZD9wTnQ6ISM8JCExYzB0cDIyLnQiJDIiNyQkIjFsO2EpM1JCRSMhIzwkITEoNExhQSlmImYoIiNvNyQkIjE8L15jN0teSCEjPCQhMkQvSEAmNHl0OyIjWjckJCIxcCJ6V1UuLmskISM8JCEyT2NbZ2lreiFIIiNNNyQkIjFAelcjZiZHSFYhIzwkITFuWCM+RTt5YyciI0U3JCQiMkVuOy93biM9XSEjPSQhMSkqZlR4Syo9JFEiIz83JCQiMldVJlFHKlxzcSYhIz0kITFcI3A8MCxUaygiIzo3JCQiMXdUTic0S2lSJyEjPCQhMnd0SWh3Q0tsIiIjNjckJCIxR0hLa1VAJjMoISM8JCEyMDc9SSVwO0M+IiIpNyQkIjBvIkhLaz51eCEjOyQhMShbOGNucGBuKCIiJzckJCIxSy9FKyd5SlkpISM8JCExYDlFMlomXHUoIiIlNyQkIjElPUgjbzI7XyIqISM8JCEzUFF0VEEpPicqZiIiIiI3JCQiMU96Pk9IOVQpKiEjPCQhMmN3VVF2YnchZSIiITckJCIyKW9tVDVELGA1ISM8JCExQFAhPVIxTUokIiIhNyQkIjFXTkBGMiI+NyIhIzskITJjeSI0JDMnNElGISIjNyQkIjIiPi8sVyozMz4iISM8JCExbydwdjhIXS8kISIjNyQkIjJWSDIzOzIoZjchIzwkITI8RUF0Ljs2UCUhIiU3JCQiMiZwVGd4YGdHOCEjPCQhMU5ZPCZRPCdmeCEiJTckJCIyWi8sV2YudlIiISM8JCEyLicqKW8kM1cpXDshIiY3JCQiMCN6PjY9U205ISM6JCExRUslUVhTUjQlISImNyQkIjEmeiUqei0rYGAiISM7JCEyRDsxWyZIcGc2ISInNyQkIjIubiJ6VyMpPi87ISM8JCEybDElWydcZldwJCEiKDckJCIyYmEpZWhrNHQ7ISM8JCEyMXdVRGVTNUkiISIoNyQkIjIyVSZReVkqPnUiISM8JCEyYmRDd2Z3cysmISIpNyQkIjJlSCM9JipHKjMiPSEjPCQhMlk6ST5ZVFYzIyEiKTckJCIxciJ6PjYieno9ISM7JCExeSYqek55UiwkKiEiKTckJCIyaS93KEckKm9bPiEjPCQhMXcyZj0icGhUJSEiKTckJCIyOSNIZFh2ZTw/ISM8JCExJypRKyZvc2lAIyEiKTckJCIybXpwQncmWyczIyEjPCQhMmA/ZCYpekAhcDYhIio3JCQiMj1ubSJ6UlFiQCEjPCQhMURZcXM8PVxrISIqNyQkIjIkKTNGJXorTzpBISM8JCExbWVTIm9dQShSISIqNyQkIjEwdm96aEx2QSEjOyQhMUxDTypRS21eIyEiKjckJCIyOiN6JSp6QUpOQiEjPCQhMiMqKXB0SzJOTzshIzU3JCQiMVEkMy1RKUcmUiMhIzskITFoVTdEUXYqMyIhIio3JCQiMXIiSDJlU19eIyEjOyQhMnZZSikzdEFjXiEjNjckJCIxLytEInkjPk5FISM7JCExeGpLdE9fS0UhIzU3JCQiMi9uIkgjPSg0dkchIzwkITBZRHRrRGpHKSEjNTckJCIybkxMTGUsXTYkISM8JCEyPU9RZDErKik9JCEjNzckJCIxLl1QJSlmIVxOJCEjOyQhMjBeMCIqNDtVViIhIzc3JCQiMXBtVCZRNVtmJCEjOyQhMHBRbUorXkgoISM2NyQkIjJgTGVreTlaJFEhIzwkITFfIj0lZldNJjQlISM3NyQkIjI6Kyt2PT5ZMiUhIzwkITInUnIlZVAmKTNcIyEjODckJCIxUUxlKltLNTYmISM7JCExci1xa3hzamEhIzg3JCQiMXZtbSJ6WHU5JyEjOyQhMVFNJ0dGbiJvQiEjODckJCIxLCsrKyZ5KSlHKSEjOyQhMkMzYCMpPVxNJkghIzk3JCQiMi4rK0RFJlFRNSEjOyQhMjs1LHFmUy4sJCEjOTckJCIyMCtdN3klM1Q3ISM7JCEyYktkYFtDUVkjISM5NyQkIix2LltoWSIhIzUkITIvaTdMWzg8Jz4hIzk3JCQiMkVMTExReCRvOyEjOyQhMmNJVCpmcHhrOyEjOTckJCIyMCsrXVArVik9ISM7JCExdzdKNU4lM1kiISM4NyQkIjFtbSJ6cGUqej8hIzokITJuST0nXCYpXFQ4ISM5NyQkIjEsKytEXCdRSCMhIzokITIudCM0Sz0hcEQiISM5NyQkIjFMTGU5UzgmXCMhIzokITIoM1Q1P2JKMTchIzk3JCQiMjIrXWk/PWJxIyEjOyQhMmAoWyxHOmZ0NiEjOTckJCIxTExMM3M/NkghIzokITIkUSVmKT5oUWI2ISM5NyQkIjImKioqXDdgV2w3JCEjOyQhMSl6NCstaW45IiEjODckJCIyd21tbScqUlJMJCEjOyQhMkVDbCMqPSU+WTYhIzk3JCQiMW9tO2E8LllOISM6JCEyM2siZi1GSF82ISM5NyQkIjJYTCRlOXRPY1AhIzskITIybmhuWFdZOyIhIzk3JCQiMSwrK11Ra1xSISM6JCEyQSRSK1AvXyI9IiEjOTckJCIxTkwkM2RnNjwlISM6JCEyW1poIkdwUjI3ISM5NyQkIjFvbW1teEdwViEjOiQhMjtsRkJPXGpCIiEjOTckJCItRCJvSzBlJSEjNiQhMVl4XGh3JkhGIiEjODckJCIxLCt2PTVzI3klISM6JCExOi1SJTQnNDg4ISM4NyQkIiNdISIiJCEyLVc3ZWtgNk8iISM5LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQhI10hIiIkIiNdISIiJShERUZBVUxURy0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USJ4NiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIjcSEiIi0lKUJPVU5EU19ZRzYjJCIkPyIhIiItJS1CT1VORFNfV0lEVEhHNiMkIiUhKVEhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlP1EhIiItJSlDSElMRFJFTkc2Ig== JSFH JSFH JSFH openturns-1.9/validation/src/ValidMultiNomial.mws000066400000000000000000000062101307543307100223050ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 148 "restart:\nq := 1 - \+ p;\nnp := n * p;\nr := p / q;\ng := r * (n + 1);\nf:=q^n;\nfactor(g / \+ k - r);\nfor i from 1 to 10 do\n f := factor(f * (g / i - r));\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG,&\"\"\"F&%\"pG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#npG*&%\"nG\"\"\"%\"pGF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG*&%\"pG\"\"\",&F'F'F&!\"\"F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG*(%\"pG\"\"\",&F'F'F&!\"\"F),&%\"nGF'F'F'F'" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG),&\"\"\"F'%\"pG!\"\"%\"nG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,$**%\"pG\"\"\",(%\"nGF&F&F&%\"kG!\"\" F&,&F&F*F%F&F*F)F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$**),& \"\"\"F)%\"pG!\"\"%\"nGF)F,F)F*F),&F)F+F*F)F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$*.\"\"#!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,F',& F-F+F+F(F+,&F+F(F,F+!\"#F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$ *0\"\"'!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"$,&F-F+F+F(F+,&F-F+\"\" #F(F+,&F+F(F,F+!\"$F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$*2\"# C!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"%,&F-F+F+F(F+,&F-F+\"\"#F(F+, &F-F+\"\"$F(F+,&F+F(F,F+!\"%F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" fG,$*4\"$?\"!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"&,&F-F+F+F(F+,&F-F +\"\"#F(F+,&F-F+\"\"$F(F+,&F-F+\"\"%F(F+,&F+F(F,F+!\"&F(" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"fG,$*6\"$?(!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F +F,\"\"',&F-F+F+F(F+,&F-F+\"\"#F(F+,&F-F+\"\"$F(F+,&F-F+\"\"%F(F+,&F-F +\"\"&F(F+,&F+F(F,F+!\"'F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$ *8\"%S]!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"(,&F-F+F+F(F+,&F-F+\"\" #F(F+,&F-F+\"\"$F(F+,&F-F+\"\"%F(F+,&F-F+\"\"&F(F+,&F-F+\"\"'F(F+,&F+F (F,F+!\"(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$*:\"&?.%!\"\"), &\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"),&F-F+F+F(F+,&F-F+\"\"#F(F+,&F-F+\" \"$F(F+,&F-F+\"\"%F(F+,&F-F+\"\"&F(F+,&F-F+\"\"'F(F+,&F-F+\"\"(F(F+,&F +F(F,F+!\")F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$*<\"'!)GO!\" \"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"\"*,&F-F+F+F(F+,&F-F+\"\"#F(F+,&F-F +\"\"$F(F+,&F-F+\"\"%F(F+,&F-F+\"\"&F(F+,&F-F+\"\"'F(F+,&F-F+\"\"(F(F+ ,&F-F+\"\")F(F+,&F+F(F,F+!\"*F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"fG,$*>\"(+)GO!\"\"),&\"\"\"F+%\"pGF(%\"nGF+F-F+F,\"#5,&F-F+F+F(F+,&F -F+\"\"#F(F+,&F-F+\"\"$F(F+,&F-F+\"\"%F(F+,&F-F+\"\"&F(F+,&F-F+\"\"'F( F+,&F-F+\"\"(F(F+,&F-F+\"\")F(F+,&F-F+\"\"*F(F+,&F+F(F,F+!#5F+" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "100!;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"it++++++++++++ko\"4@&=^#ePAF3#zp`iG=l:wRYT*3c\"*HK*** f<_*Q'Hfo9i\"Qk#ofr!\\+nEc)Q#*p\"o_T%RW:iK$*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 72 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidMultiNomial.txt000066400000000000000000000060631307543307100223240ustar00rootroot00000000000000> restart: > q := 1 - p; > np := n * p; > r := p / q; > g := r * (n + 1); > f:=q^n; > factor(g / k - r); > for i from 1 to 10 do > f := factor(f * (g / i - r)); > od; q := 1 - p np := n p p r := ----- 1 - p p (n + 1) g := --------- 1 - p n f := (1 - p) p (n + 1 - k) - ------------- (-1 + p) k n (1 - p) n p f := - ------------ -1 + p n 2 (1 - p) n p (n - 1) f := --------------------- 2 2 (-1 + p) n 3 (1 - p) n p (n - 1) (n - 2) f := - ----------------------------- 3 6 (-1 + p) n 4 (1 - p) n p (n - 1) (n - 2) (n - 3) f := ------------------------------------- 4 24 (-1 + p) n 5 (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) f := - --------------------------------------------- 5 120 (-1 + p) n 6 (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) (n - 5) f := ----------------------------------------------------- 6 720 (-1 + p) n 7 f := - (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) (n - 5) / 7 (n - 6) / (5040 (-1 + p) ) / n 8 f := (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) (n - 5) (n - 6) / 8 (n - 7) / (40320 (-1 + p) ) / n 9 f := - (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) (n - 5) / 9 (n - 6) (n - 7) (n - 8) / (362880 (-1 + p) ) / n 10 f := (1 - p) n p (n - 1) (n - 2) (n - 3) (n - 4) (n - 5) (n - 6) / 10 (n - 7) (n - 8) (n - 9) / (3628800 (-1 + p) ) / > 100!; 9332621544394415268169923885626670049071596826438162146859296389\ 5217599993229915608941463976156518286253697920827223758251\ 185210916864000000000000000000000000 > openturns-1.9/validation/src/ValidMultiStudent.mws000066400000000000000000000071041307543307100225170ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "restart:\nwith(Linea rAlgebra):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 216 "dim:=3;\nnu: =2;\nSigma:=<<1,1/2,1/4>|<1/2,1,1/2>|<1/4,1/2,1>>;\nx:=;\np: =GAMMA((dim+nu)/2)/(GAMMA(nu/2)*nu^(dim/2)*Pi^(dim/2)*Determinant(Sigm a)^(1/2)*(1+1/nu*Transpose(x).MatrixInverse(Sigma).x)^((dim+nu)/2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$dimG\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#nuG\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&Sigma G-%'RTABLEG6%\"*CqxN\"-%'MATRIXG6#7%7%\"\"\"#F.\"\"##F.\"\"%7%F/F.F/7% F1F/F.%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xG-%'RTABLEG6% \"*?#)fN\"-%'MATRIXG6#7%7#%#x1G7#%#x2G7#%#x3G&%'VectorG6#%'columnG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG,$*.\"#[!\"\"%#PiGF(\"\"##\"\"\" F*\"\"*F+\"#;F+,*F,F,*&%#x1GF,,&*(F*F,\"\"$F(F1F,F,*&F4F(%#x2GF,F(F,F, *&F6F,,(*&F4F(F1F,F(*(\"\"&F,\"\"'F(F6F,F,*&F4F(%#x3GF,F(F,F,*&F>F,,&* &F4F(F6F,F(*(F*F,F4F(F>F,F,F,F,#!\"&F*F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 116 "for n from 1 to 8 do\n disp([n,evalf[n](Int(Int(Int (p,x1=-infinity..1/2),x2=-infinity..1),x3=-infinity..3/2))]);\nod;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"\"$\"\"'!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"#$\"#b!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"$$\"$^&!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"%$\"%4b!\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"&$\"&!4b!\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"'$\"'&*3b!\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\"($\"(`*3b!\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%%dispG6#7$\"\")$\")J&*3b!\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "with(Statistics):\nX:=RandomVariable(StudentT(NU )):\npt:=PDF(X,t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#ptG**-%&GAMMA G6#,&#\"\"\"\"\"#F+*&F,!\"\"%#NUGF+F+F+*&%#PiGF+F/F+#F.F,-F'6#,$*&F,F. F/F+F+F.),&F+F+*&%\"tGF,F/F.F+F)F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "simplify((pt*sqrt(2+t^2)^3),symbolic);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#*.-%&GAMMAG6#,&#\"\"\"\"\"#F)*&F*!\"\"%#NUGF)F)F )%#PiG#F,F*)F-,$*&F*F,F-F)F)F),&F*F)*$)%\"tGF*F)F)#\"\"$F*-F%6#F1F,),& F-F)F4F),&#F)F*F,*&F*F,F-F)F,F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "convert(1/Beta(1/2,NU/2),GAMMA);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(%#PiG#!\"\"\"\"#-%&GAMMAG6#,$*&F'F&%#NUG\"\"\"F.F&-F)6#,&#F.F' F.*&F'F&F-F.F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 114 "coef:= 1/Pi:\nfor i from 1 to 101-1 do\n if (i mod 2 = 0) and (i>2) then\n \+ coef := coef * (i-1) / (i-2);\n fi;\nod;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "evalf(coef);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"+4TSLD!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "(coef/Beta( 1/2,101/2-1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"#**\"\"\"%#PiG !\"#F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "9 0 0 " 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 135777024 135598220 }{RTABLE M7R0 I6RTABLE_SAVE/135777024X,%)anythingG6"6"[gl!"%!!!#*"$"$"""#F'""##F'""%F(F'F(F*F (F'F& } {RTABLE M7R0 I6RTABLE_SAVE/135598220X*%)anythingG6"6"[gl!#%!!!"$"$%#x1G%#x2G%#x3GF& } openturns-1.9/validation/src/ValidMultiStudent.txt000066400000000000000000000067201307543307100225330ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > dim:=3; > nu:=2; > Sigma:=<<1,1/2,1/4>|<1/2,1,1/2>|<1/4,1/2,1>>; > x:=; > p:=GAMMA((dim+nu)/2)/(GAMMA(nu/2)*nu^(dim/2)*Pi^(dim/2)*Determinant(Si > gma)^(1/2)*(1+1/nu*Transpose(x).MatrixInverse(Sigma).x)^((dim+nu)/2)); dim := 3 nu := 2 [ 1 1/2 1/4] [ ] Sigma := [1/2 1 1/2] [ ] [1/4 1/2 1 ] [x1] [ ] x := [x2] [ ] [x3] 1/2 1/2 1/2 / / / /2 x1 x2 \ p := 2 9 16 / |48 Pi |1 + x1 |---- - ----| / \ \ \ 3 3 / / x1 5 x2 x3 \ / x2 2 x3\\5/2\ + x2 |- ---- + ---- - ----| + x3 |- ---- + ----|| | \ 3 6 3 / \ 3 3 // / > for n from 1 to 8 do > > disp([n,evalf[n](Int(Int(Int(p,x1=-infinity..1/2),x2=-infinity..1),x3= > -infinity..3/2))]); > od; disp([1, 0.6]) disp([2, 0.55]) disp([3, 0.551]) disp([4, 0.5509]) disp([5, 0.55090]) disp([6, 0.550895]) disp([7, 0.5508953]) disp([8, 0.55089531]) > with(Statistics): > X:=RandomVariable(StudentT(NU)): > pt:=PDF(X,t); NU GAMMA(1/2 + ----) 2 pt := --------------------------------------------- / NU \ |1/2 + ----| \ 2 / / 2 \ 1/2 NU | t | (Pi NU) GAMMA(----) |1 + ----| 2 \ NU / > simplify((pt*sqrt(2+t^2)^3),symbolic); / NU \ / NU \ |- 1/2 - ----| |----| \ 2 / NU \ 2 / 2 3/2 2 / GAMMA(1/2 + ----) NU (2 + t ) (NU + t ) / 2 / / 1/2 NU \ |Pi GAMMA(----)| \ 2 / > convert(1/Beta(1/2,NU/2),GAMMA); NU GAMMA(1/2 + ----) 2 ----------------- 1/2 NU Pi GAMMA(----) 2 > coef:=1/Pi: > for i from 1 to 101-1 do > if (i mod 2 = 0) and (i>2) then > coef := coef * (i-1) / (i-2); > fi; > od; > evalf(coef); 2.533404109 > (coef/Beta(1/2,101/2-1)); 99 --- 2 Pi > openturns-1.9/validation/src/ValidNatafEllipticalcopula.mws000066400000000000000000000057361307543307100243270ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 352 "restart:\nG:=<|>;\nY:=;\nT:=G.Y;\nJ:=array(1..2,1..2): \nfor i from 1 to 2 do\n for j from 1 to 2 do\n J[i, j] := diff(T[ i],x[j]);\n od:\nod:\nprint(J);\nH:=array(1..2,1..2,1..2):\nfor i fro m 1 to 2 do\n for j from 1 to 2 do\n for k from 1 to 2 do\n H [i, j, k] := diff(diff(T[i],x[j]),x[k]);\n od:\n od:\nod:\nprint(H );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GG-%'RTABLEG6%\"*kDON\"-%'MA TRIXG6#7$7$%$G11G%$G12G7$%$G21G%$G22G%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"YG-%'RTABLEG6%\"*w9bM\"-%'MATRIXG6#7$7#-%\"QG6#&%\" xG6#\"\"\"7#-F/6#&F26#\"\"#&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"TG-%'RTABLEG6%\"*KNiN\"-%'MATRIXG6#7$7#,&*&%$G11G\" \"\"-%\"QG6#&%\"xG6#F1F1F1*&%$G12GF1-F36#&F66#\"\"#F1F17#,&*&%$G21GF1F 2F1F1*&%$G22GF1F:F1F1&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7$7$*&%$G11G\"\"\"-%%diffG6$-%\"QG6#&%\"xG6 #F*F1F**&%$G12GF*-F,6$-F/6#&F26#\"\"#F:F*7$*&%$G21GF*F+F**&%$G22GF*F6F *Q(pprint96\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%&ARRAYG6$7%;\"\"\" \"\"#F'F'7*/6%F(F(F(*&%$G11GF(-%%diffG6$-%\"QG6#&%\"xG6#F(-%\"$G6$F5F) F(/6%F(F(F)\"\"!/6%F(F)F(F=/6%F(F)F)*&%$G12GF(-F06$-F36#&F66#F)-F96$FH F)F(/6%F)F(F(*&%$G21GF(F/F(/6%F)F(F)F=/6%F)F)F(F=/6%F)F)F)*&%$G22GF(FD F(Q)pprint106\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 157 "D2:=arr ay(1..2,1..2,1..2):\nfor i from 1 to 2 do\n for j from 1 to 2 do\n \+ for k from 1 to 2 do\n D2[i, j, k] := H[k, j, i];\n od:\n od :\nod:\nprint(D2);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%&ARRAYG6$7%;\" \"\"\"\"#F'F'7*/6%F(F(F(*&%$G11GF(-%%diffG6$-%\"QG6#&%\"xG6#F(-%\"$G6$ F5F)F(/6%F(F(F)*&%$G21GF(F/F(/6%F(F)F(\"\"!/6%F(F)F)FA/6%F)F(F(FA/6%F) F(F)FA/6%F)F)F(*&%$G12GF(-F06$-F36#&F66#F)-F96$FPF)F(/6%F)F)F)*&%$G22G F(FLF(Q)pprint116\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "3 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 135362564 134551476 135623532 }{RTABLE M7R0 I6RTABLE_SAVE/135362564X,%)anythingG6"6"[gl!"%!!!#%"#"#%$G11G%$G21G%$G12G%$G22G F& } {RTABLE M7R0 I6RTABLE_SAVE/134551476X*%)anythingG6"6"[gl!#%!!!"#"#-%"QG6#&%"xG6#"""-F(6#&F+6 #""#F& } {RTABLE M7R0 I6RTABLE_SAVE/135623532X*%)anythingG6"6"[gl!#%!!!"#"#,&*&%$G11G"""-%"QG6#&%"xG6 #F*F*F**&%$G12GF*-F,6#&F/6#""#F*F*,&*&%$G21GF*F+F*F**&%$G22GF*F3F*F*F& } openturns-1.9/validation/src/ValidNatafEllipticalcopula.txt000066400000000000000000000064061307543307100243330ustar00rootroot00000000000000> restart: > G:=<|>; > Y:=; > T:=G.Y; > J:=array(1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > J[i, j] := diff(T[i],x[j]); > od: > od: > print(J); > H:=array(1..2,1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > for k from 1 to 2 do > H[i, j, k] := diff(diff(T[i],x[j]),x[k]); > od: > od: > od: > print(H); [G11 G12] G := [ ] [G21 G22] [Q(x[1])] Y := [ ] [Q(x[2])] [G11 Q(x[1]) + G12 Q(x[2])] T := [ ] [G21 Q(x[1]) + G22 Q(x[2])] [ / d \ / d \] [G11 |----- Q(x[1])| G12 |----- Q(x[2])|] [ \dx[1] / \dx[2] /] [ ] [ / d \ / d \] [G21 |----- Q(x[1])| G22 |----- Q(x[2])|] [ \dx[1] / \dx[2] /] array(1 .. 2, 1 .. 2, 1 .. 2, [ / 2 \ | d | (1, 1, 1) = G11 |------ Q(x[1])| | 2 | \dx[1] / (1, 1, 2) = 0 (1, 2, 1) = 0 / 2 \ | d | (1, 2, 2) = G12 |------ Q(x[2])| | 2 | \dx[2] / / 2 \ | d | (2, 1, 1) = G21 |------ Q(x[1])| | 2 | \dx[1] / (2, 1, 2) = 0 (2, 2, 1) = 0 / 2 \ | d | (2, 2, 2) = G22 |------ Q(x[2])| | 2 | \dx[2] / ]) > D2:=array(1..2,1..2,1..2): > for i from 1 to 2 do > for j from 1 to 2 do > for k from 1 to 2 do > D2[i, j, k] := H[k, j, i]; > od: > od: > od: > print(D2); array(1 .. 2, 1 .. 2, 1 .. 2, [ / 2 \ | d | (1, 1, 1) = G11 |------ Q(x[1])| | 2 | \dx[1] / / 2 \ | d | (1, 1, 2) = G21 |------ Q(x[1])| | 2 | \dx[1] / (1, 2, 1) = 0 (1, 2, 2) = 0 (2, 1, 1) = 0 (2, 1, 2) = 0 / 2 \ | d | (2, 2, 1) = G12 |------ Q(x[2])| | 2 | \dx[2] / / 2 \ | d | (2, 2, 2) = G22 |------ Q(x[2])| | 2 | \dx[2] / ]) > > openturns-1.9/validation/src/ValidNegativeBinomial.mws000066400000000000000000001035151307543307100232760ustar00rootroot00000000000000{VERSION 13 0 "Linux" "13.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 12 40 120 40 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "MS Serif" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "MS Serif" 1 12 0 0 0 1 1 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "MS Serif" 1 14 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Head ing 2" -1 4 1 {CSTYLE "" -1 -1 "MS Serif" 1 16 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Time s" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {CSTYLE "Annotation Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier " 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times " 1 12 0 0 255 1 2 2 2 2 2 1 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized " -1 22 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Sym bol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple \+ Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic Small204" -1 201 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Input Placeholder" -1 202 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "Code" -1 203 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Inert Output" -1 204 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 205 " Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Ti mes" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "MS Serif" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Unde rlined" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Promp t" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 0 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Foote r" -1 206 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 207 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 208 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 " Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "MS Serif" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fi xed" -1 23 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {XPPEDIT 19 1 "Typesetting:-mrow(Typ esetting:-mi(\"restart\", italic = \"true\", mathvariant = \"italic\") , Typesetting:-mo(\":\", mathvariant = \"normal\", fence = \"false\", \+ separator = \"false\", stretchy = \"false\", symmetric = \"false\", la rgeop = \"false\", movablelimits = \"false\", accent = \"false\", lspa ce = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(h eight = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \+ \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \+ \"false\", largeop = \"false\", movablelimits = \"false\", accent = \" false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"wi th\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenc ed(Typesetting:-mrow(Typesetting:-mi(\"Statistics\", italic = \"true\" , mathvariant = \"italic\")), mathvariant = \"normal\"), Typesetting:- mo(\":\", mathvariant = \"normal\", fence = \"false\", separator = \"f alse\", stretchy = \"false\", symmetric = \"false\", largeop = \"false \", movablelimits = \"false\", accent = \"false\", lspace = \"0.277777 8em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex \", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Ty pesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", sepa rator = \"false\", stretchy = \"false\", symmetric = \"false\", largeo p = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"d\", italic = \"tru e\", mathvariant = \"italic\"), Typesetting:-mo(\"≔\", mathvar iant = \"normal\", fence = \"false\", separator = \"false\", stretchy \+ = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \+ \"0.2777778em\"), Typesetting:-mi(\"RandomVariable\", italic = \"true \", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow( Typesetting:-mi(\"NegativeBinomial\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi( \"r\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo( \",\", mathvariant = \"normal\", fence = \"false\", separator = \"true \", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", \+ movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rsp ace = \"0.3333333em\"), Typesetting:-mn(\"1\", mathvariant = \"normal \"), Typesetting:-mo(\"&uminus0;\", mathvariant = \"normal\", fence = \+ \"false\", separator = \"false\", stretchy = \"false\", symmetric = \" false\", largeop = \"false\", movablelimits = \"false\", accent = \"fa lse\", lspace = \"0.2222222em\", rspace = \"0.2222222em\"), Typesettin g:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator = \+ \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"fa lse\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.0em\"), Typesetting:-mi(\"p\", italic = \"true\", mat hvariant = \"italic\")), mathvariant = \"normal\")), mathvariant = \"n ormal\"), Typesetting:-mo(\":\", mathvariant = \"normal\", fence = \"f alse\", separator = \"false\", stretchy = \"false\", symmetric = \"fal se\", largeop = \"false\", movablelimits = \"false\", accent = \"false \", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:- mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", lineb reak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", \+ fence = \"false\", separator = \"false\", stretchy = \"false\", symmet ric = \"false\", largeop = \"false\", movablelimits = \"false\", accen t = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-m i(\"ProbabilityFunction\", italic = \"true\", mathvariant = \"italic\" ), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", itali c = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathva riant = \"normal\", fence = \"false\", separator = \"true\", stretchy \+ = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.333 3333em\"), Typesetting:-mi(\"x\", italic = \"true\", mathvariant = \"i talic\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvaria nt = \"normal\", fence = \"false\", separator = \"true\", stretchy = \+ \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.27777 78em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", de pth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \", math variant = \"normal\", fence = \"false\", separator = \"false\", stretc hy = \"false\", symmetric = \"false\", largeop = \"false\", movablelim its = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0. 0em\"), Typesetting:-mi(\"CDF\", italic = \"true\", mathvariant = \"it alic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", \+ mathvariant = \"normal\", fence = \"false\", separator = \"true\", str etchy = \"false\", symmetric = \"false\", largeop = \"false\", movable limits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \+ \"0.3333333em\"), Typesetting:-mi(\"x\", italic = \"true\", mathvarian t = \"italic\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", ma thvariant = \"normal\", fence = \"false\", separator = \"true\", stret chy = \"false\", symmetric = \"false\", largeop = \"false\", movableli mits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0 .2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em \", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \" , mathvariant = \"normal\", fence = \"false\", separator = \"false\", \+ stretchy = \"false\", symmetric = \"false\", largeop = \"false\", mova blelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace \+ = \"0.0em\"), Typesetting:-mi(\"Quantile\", italic = \"true\", mathvar iant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting :-mi(\"d\", italic = \"true\", mathvariant = \"italic\"), Typesetting: -mo(\",\", mathvariant = \"normal\", fence = \"false\", separator = \" true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false \", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mi(\"q\", italic = \"true\", \+ mathvariant = \"italic\")), mathvariant = \"normal\"), Typesetting:-mo (\";\", mathvariant = \"normal\", fence = \"false\", separator = \"tru e\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rs pace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting :-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator = \+ \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"fa lse\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em \", rspace = \"0.0em\"), Typesetting:-mi(\"Mean\", italic = \"true\", \+ mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Type setting:-mi(\"d\", italic = \"true\", mathvariant = \"italic\")), math variant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\" , fence = \"false\", separator = \"true\", stretchy = \"false\", symme tric = \"false\", largeop = \"false\", movablelimits = \"false\", acce nt = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typeset ting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"norm al\", fence = \"false\", separator = \"false\", stretchy = \"false\", \+ symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesett ing:-mi(\"Variance\", italic = \"false\", mathvariant = \"normal\"), T ypesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \+ \"false\", mathvariant = \"normal\")), mathvariant = \"normal\"), Type setting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separa tor = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \" 0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0 ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), \+ Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", se parator = \"false\", stretchy = \"false\", symmetric = \"false\", larg eop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"Skewness\", itali c = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesett ing:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvariant = \"it alic\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvarian t = \"normal\", fence = \"false\", separator = \"true\", stretchy = \" false\", symmetric = \"false\", largeop = \"false\", movablelimits = \+ \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.277777 8em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", dep th = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \", mathv ariant = \"normal\", fence = \"false\", separator = \"false\", stretch y = \"false\", symmetric = \"false\", largeop = \"false\", movablelimi ts = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0 em\"), Typesetting:-mi(\"Kurtosis\", italic = \"true\", mathvariant = \+ \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\" d\", italic = \"true\", mathvariant = \"italic\")), mathvariant = \"no rmal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"fa lse\", separator = \"true\", stretchy = \"false\", symmetric = \"false \", largeop = \"false\", movablelimits = \"false\", accent = \"false\" , lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(h eight = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \+ \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \+ \"false\", largeop = \"false\", movablelimits = \"false\", accent = \" false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"r \", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mo(\"&c oloneq;\", mathvariant = \"normal\", fence = \"false\", separator = \" false\", stretchy = \"false\", symmetric = \"false\", largeop = \"fals e\", movablelimits = \"false\", accent = \"false\", lspace = \"0.27777 78em\", rspace = \"0.2777778em\"), Typesetting:-mn(\"4.5\", mathvarian t = \"normal\"), Typesetting:-mo(\":\", mathvariant = \"normal\", fenc e = \"false\", separator = \"false\", stretchy = \"false\", symmetric \+ = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \+ \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typese tting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\" , linebreak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"nor mal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\" , accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typeset ting:-mi(\"p\", italic = \"true\", mathvariant = \"italic\"), Typesett ing:-mo(\"≔\", mathvariant = \"normal\", fence = \"false\", se parator = \"false\", stretchy = \"false\", symmetric = \"false\", larg eop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mn(\"0.7\" , mathvariant = \"normal\"), Typesetting:-mo(\":\", mathvariant = \"no rmal\", fence = \"false\", separator = \"false\", stretchy = \"false\" , symmetric = \"false\", largeop = \"false\", movablelimits = \"false \", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778 em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", dept h = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \", mathva riant = \"normal\", fence = \"false\", separator = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimit s = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0e m\"), Typesetting:-mi(\"x\", italic = \"true\", mathvariant = \"italic \"), Typesetting:-mo(\"≔\", mathvariant = \"normal\", fence = \+ \"false\", separator = \"false\", stretchy = \"false\", symmetric = \" false\", largeop = \"false\", movablelimits = \"false\", accent = \"fa lse\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesettin g:-mn(\"5.0\", mathvariant = \"normal\"), Typesetting:-mo(\":\", mathv ariant = \"normal\", fence = \"false\", separator = \"false\", stretch y = \"false\", symmetric = \"false\", largeop = \"false\", movablelimi ts = \"false\", accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0 .0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo( \" \", mathvariant = \"normal\", fence = \"false\", separator = \"fals e\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rs pace = \"0.0em\"), Typesetting:-mi(\"q\", italic = \"true\", mathvaria nt = \"italic\"), Typesetting:-mo(\"≔\", mathvariant = \"norma l\", fence = \"false\", separator = \"false\", stretchy = \"false\", s ymmetric = \"false\", largeop = \"false\", movablelimits = \"false\", \+ accent = \"false\", lspace = \"0.2777778em\", rspace = \"0.2777778em\" ), Typesetting:-mn(\"0.95\", mathvariant = \"normal\"), Typesetting:-m o(\":\", mathvariant = \"normal\", fence = \"false\", separator = \"fa lse\", stretchy = \"false\", symmetric = \"false\", largeop = \"false \", movablelimits = \"false\", accent = \"false\", lspace = \"0.277777 8em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex \", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Ty pesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false\", sepa rator = \"false\", stretchy = \"false\", symmetric = \"false\", largeo p = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"ProbabilityFunction \", italic = \"true\", mathvariant = \"italic\"), Typesetting:-mfenced (Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mathvaria nt = \"italic\"), Typesetting:-mo(\",\", mathvariant = \"normal\", fen ce = \"false\", separator = \"true\", stretchy = \"false\", symmetric \+ = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \+ \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Typesetting: -mi(\"x\", italic = \"true\", mathvariant = \"italic\")), mathvariant \+ = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence \+ = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \+ \"false\", largeop = \"false\", movablelimits = \"false\", accent = \" false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-m space(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebr eak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", f ence = \"false\", separator = \"false\", stretchy = \"false\", symmetr ic = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi (\"CDF\", italic = \"true\", mathvariant = \"italic\"), Typesetting:-m fenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\", mat hvariant = \"italic\"), Typesetting:-mo(\",\", mathvariant = \"normal \", fence = \"false\", separator = \"true\", stretchy = \"false\", sym metric = \"false\", largeop = \"false\", movablelimits = \"false\", ac cent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em\"), Types etting:-mi(\"x\", italic = \"true\", mathvariant = \"italic\")), mathv ariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmet ric = \"false\", largeop = \"false\", movablelimits = \"false\", accen t = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesett ing:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", \+ linebreak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"norma l\", fence = \"false\", separator = \"false\", stretchy = \"false\", s ymmetric = \"false\", largeop = \"false\", movablelimits = \"false\", \+ accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetti ng:-mi(\"Quantile\", italic = \"true\", mathvariant = \"italic\"), Typ esetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \" true\", mathvariant = \"italic\"), Typesetting:-mo(\",\", mathvariant \+ = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"fa lse\", symmetric = \"false\", largeop = \"false\", movablelimits = \"f alse\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.3333333em \"), Typesetting:-mi(\"q\", italic = \"true\", mathvariant = \"italic \")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \+ \"normal\", fence = \"false\", separator = \"true\", stretchy = \"fals e\", symmetric = \"false\", largeop = \"false\", movablelimits = \"fal se\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\" ), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \+ \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \", mathvarian t = \"normal\", fence = \"false\", separator = \"false\", stretchy = \+ \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\" ), Typesetting:-mi(\"Mean\", italic = \"true\", mathvariant = \"italic \"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", ita lic = \"true\", mathvariant = \"italic\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", s eparator = \"true\", stretchy = \"false\", symmetric = \"false\", larg eop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \+ \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline \"), Typesetting:-mo(\" \", mathvariant = \"normal\", fence = \"false \", separator = \"false\", stretchy = \"false\", symmetric = \"false\" , largeop = \"false\", movablelimits = \"false\", accent = \"false\", \+ lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi(\"sqrt\", ita lic = \"false\", mathvariant = \"normal\"), Typesetting:-mfenced(Types etting:-mrow(Typesetting:-mi(\"Variance\", italic = \"true\", mathvari ant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting: -mi(\"d\", italic = \"false\", mathvariant = \"normal\")), mathvariant = \"normal\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mat hvariant = \"normal\", fence = \"false\", separator = \"true\", stretc hy = \"false\", symmetric = \"false\", largeop = \"false\", movablelim its = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0. 2777778em\"), Typesetting:-mspace(height = \"0.0ex\", width = \"0.0em \", depth = \"0.0ex\", linebreak = \"newline\"), Typesetting:-mo(\" \" , mathvariant = \"normal\", fence = \"false\", separator = \"false\", \+ stretchy = \"false\", symmetric = \"false\", largeop = \"false\", mova blelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace \+ = \"0.0em\"), Typesetting:-mi(\"Skewness\", italic = \"true\", mathvar iant = \"italic\"), Typesetting:-mfenced(Typesetting:-mrow(Typesetting :-mi(\"d\", italic = \"true\", mathvariant = \"italic\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \"true\", stretchy = \"false\", symmetric = \+ \"false\", largeop = \"false\", movablelimits = \"false\", accent = \" false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-m space(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", linebr eak = \"newline\"), Typesetting:-mo(\" \", mathvariant = \"normal\", f ence = \"false\", separator = \"false\", stretchy = \"false\", symmetr ic = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mi (\"Kurtosis\", italic = \"true\", mathvariant = \"italic\"), Typesetti ng:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"true\" , mathvariant = \"italic\")), mathvariant = \"normal\"), Typesetting:- mo(\";\", mathvariant = \"normal\", fence = \"false\", separator = \"t rue\", stretchy = \"false\", symmetric = \"false\", largeop = \"false \", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\", wi dth = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Typesett ing:-mspace(height = \"0.0ex\", width = \"0.0em\", depth = \"0.0ex\", \+ linebreak = \"auto\"), Typesetting:-mo(\" \", mathvariant = \"normal\" , fence = \"false\", separator = \"false\", stretchy = \"false\", symm etric = \"false\", largeop = \"false\", movablelimits = \"false\", acc ent = \"false\", lspace = \"0.0em\", rspace = \"0.0em\"), Typesetting: -mi(\"Variance\", italic = \"false\", mathvariant = \"normal\"), Types etting:-mfenced(Typesetting:-mrow(Typesetting:-mi(\"d\", italic = \"fa lse\", mathvariant = \"normal\")), mathvariant = \"normal\"), Typesett ing:-mo(\";\", mathvariant = \"normal\", fence = \"false\", separator \+ = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"f alse\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0e m\", rspace = \"0.2777778em\"), Typesetting:-mspace(height = \"0.0ex\" , width = \"0.0em\", depth = \"0.0ex\", linebreak = \"newline\"), Type setting:-mo(\"\", mathvariant = \"normal\", fence = \"false\", separat or = \"false\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \" 0.0em\", rspace = \"0.0em\"));" "-I%mrowG6#/I+modulenameG6\"I,Typesett ingGI(_syslibGF'6`r-I#miGF$6%Q(restartF'/%'italicGQ%trueF'/%,mathvaria ntGQ'italicF'-I#moGF$6-Q\":F'/F3Q'normalF'/%&fenceGQ&falseF'/%*separat orGF=/%)stretchyGF=/%*symmetricGF=/%(largeopGF=/%.movablelimitsGF=/%'a ccentGF=/%'lspaceGQ,0.2777778emF'/%'rspaceGFL-I'mspaceGF$6&/%'heightGQ &0.0exF'/%&widthGQ&0.0emF'/%&depthGFT/%*linebreakGQ(newlineF'-F66-Q\"~ F'F9F;F>F@FBFDFFFH/FKFW/FNFW-F,6%Q%withF'F/F2-I(mfencedGF$6$-F#6#-F,6% Q+StatisticsF'F/F2F9F5FOFgn-F,6%Q\"dF'F/F2-F66-Q*≔F'F9F;F>F@FB FDFFFHFJFM-F,6%Q/RandomVariableF'F/F2-F`o6$-F#6$-F,6%Q1NegativeBinomia lF'F/F2-F`o6$-F#6(-F,6%Q\"rF'F/F2-F66-Q\",F'F9F;/F?F1F@FBFDFFFHFjn/FNQ ,0.3333333emF'-I#mnGF$6$Q\"1F'F9-F66-Q*&uminus0;F'F9F;F>F@FBFDFFFH/FKQ ,0.2222222emF'/FNF\\rFgn-F,6%Q\"pF'F/F2F9F9F5FOFgn-F,6%Q4ProbabilityFu nctionF'F/F2-F`o6$-F#6%FgoF^q-F,6%Q\"xF'F/F2F9-F66-Q\";F'F9F;FaqF@FBFD FFFHFjnFMFOFgn-F,6%Q$CDFF'F/F2FdrF[sFOFgn-F,6%Q)QuantileF'F/F2-F`o6$-F #6%FgoF^q-F,6%Q\"qF'F/F2F9F[sFOFgn-F,6%Q%MeanF'F/F2-F`o6$-F#6#FgoF9F[s FOFgn-F,6%Q)VarianceF'/F0F=F9-F`o6$-F#6#-F,6%FioFetF9F9F[sFOFgn-F,6%Q) SkewnessF'F/F2F^tF[sFOFgn-F,6%Q)KurtosisF'F/F2F^tF[sFOFgnF[qFjo-Feq6$Q $4.5F'F9F5FOFgnF^rFjo-Feq6$Q$0.7F'F9F5FOFgnFhrFjo-Feq6$Q$5.0F'F9F5FOFg nFhsFjo-Feq6$Q%0.95F'F9F5FOFgnFarFdrF[sFOFgnF^sFdrF[sFOFgnFasFdsF[sFOF gnF[tF^tF[sFOFgn-F,6%Q%sqrtF'FetF9-F`o6$-F#6$-F,6%FdtF/F2FftF9F[sFOFgn F\\uF^tF[sFOFgnF_uF^tF[sFO-FP6&FRFUFX/FenQ%autoF'FgnFbtFftF[sFO-F66-Q! F'F9F;F>F@FBFDFFFHFjnF[o" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I*piecewise G%*protectedG6%2I\"xG6\"\"\"!F)*,-I&GAMMAG6$F$I(_syslibGF(6#,&I\"rGF( \"\"\"F'F2F2-F,6#F1!\"\"-I*factorialGF$6#F'F5),&F2F2I\"pGF(F5F1F2)F;F' F2" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&\"\"\"F#*.-I&GAMMAG6$%*protected GI(_syslibG6\"6#,(I\"xGF*F#F#F#I\"rGF*F#F#-F&6#F.!\"\"-F&6#,&F-F#\"\"# F#F1),&F#F#I\"pGF*F1F.F#)F8,&F-F#F#F#F#-I*hypergeomGF)6%7$F#F,7#F4F8F# F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "I%FAILG%*protectedG" }}{PARA 11 "" 1 "" {XPPMATH 20 "*(I\"rG6\"\"\"\"I\"pGF$F%,&F%F%F&!\"\"F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "*(I\"rG6\"\"\"\"I\"pGF$F%,&F%F%F&!\"\"!\"#" }} {PARA 11 "" 1 "" {XPPMATH 20 "-I*piecewiseG%*protectedG6%/,&\"\"\"F(I \"pG6\"!\"\"F(I)infinityGF$*&,&F(F(F)F(F(*&I\"rGF*F(F)F(#F+\"\"#" }} {PARA 11 "" 1 "" {XPPMATH 20 "-I*piecewiseG%*protectedG6%/,&\"\"\"F(I \"pG6\"!\"\"F(I)infinityGF$,(\"\"$F(*$I\"rGF*F+\"\"'*(F'\"\"#F0F+F)F+F (" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+n\")psj!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"32xX7j\\%R.#!#=" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"#A \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"++++]5!\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+$yzg\"f!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+( )[Ty&*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+iZ!>O%!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+++++N!\")" }}}{EXCHG {PARA 0 "> " 0 "" {XPPEDIT 19 1 "Typesetting:-mrow(Typesetting:-mi(\"sum\", italic = \"t rue\", mathvariant = \"italic\"), Typesetting:-mfenced(Typesetting:-mr ow(Typesetting:-mo(\"\", mathvariant = \"normal\", fence = \"false\", \+ separator = \"false\", stretchy = \"false\", symmetric = \"false\", la rgeop = \"false\", movablelimits = \"false\", accent = \"false\", lspa ce = \"0.0em\", rspace = \"0.0em\"), Typesetting:-mfenced(Typesetting: -mrow(Typesetting:-mn(\"1\", mathvariant = \"normal\"), Typesetting:-m o(\",\", mathvariant = \"normal\", fence = \"false\", separator = \"tr ue\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\" , movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", r space = \"0.3333333em\"), Typesetting:-mn(\"2\", mathvariant = \"norma l\"), Typesetting:-mo(\",\", mathvariant = \"normal\", fence = \"false \", separator = \"true\", stretchy = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", l space = \"0.0em\", rspace = \"0.3333333em\"), Typesetting:-mn(\"3\", m athvariant = \"normal\")), mathvariant = \"normal\", open = \"[\", clo se = \"]\")), mathvariant = \"normal\"), Typesetting:-mo(\";\", mathva riant = \"normal\", fence = \"false\", separator = \"true\", stretchy \+ = \"false\", symmetric = \"false\", largeop = \"false\", movablelimits = \"false\", accent = \"false\", lspace = \"0.0em\", rspace = \"0.277 7778em\"));" "-I%mrowG6#/I+modulenameG6\"I,TypesettingGI(_syslibGF'6%- I#miGF$6%Q$sumF'/%'italicGQ%trueF'/%,mathvariantGQ'italicF'-I(mfencedG F$6$-F#6$-I#moGF$6-Q!F'/F3Q'normalF'/%&fenceGQ&falseF'/%*separatorGFB/ %)stretchyGFB/%*symmetricGFB/%(largeopGFB/%.movablelimitsGFB/%'accentG FB/%'lspaceGQ&0.0emF'/%'rspaceGFQ-F66&-F#6'-I#mnGF$6$Q\"1F'F>-F;6-Q\", F'F>F@/FDF1FEFGFIFKFMFO/FSQ,0.3333333emF'-FY6$Q\"2F'F>Ffn-FY6$Q\"3F'F> F>/%%openGQ\"[F'/%&closeGQ\"]F'F>-F;6-Q\";F'F>F@FinFEFGFIFKFMFO/FSQ,0. 2777778emF'" }}{PARA 206 "" 1 "" {TEXT 209 0 "" }{HYPERLNK 209 "Error, invalid input: range expected for first argument of this form of seq, but received [1, 2, 3]" 4 "http://www.maplesoft.com/support/help/erro rs/view.aspx?path=Error,%20invalid%20input%3A%20range%20expected%20for %20first%20argument%20of%20this%20form%20of%20seq,%20but%20received%20 %5B1,%202,%203%5D" "" }{TEXT 209 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {XPPEDIT 19 1 "" "%#%?G" }}}{EXCHG {PARA 0 "> " 0 "" {TEXT 210 0 "" }} }} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidNonCentralChiSquare.mws000066400000000000000000000265111307543307100237310ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annota tion Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "H elp Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized" -1 22 "Time s" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Input Pl aceholder" -1 201 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 } {CSTYLE "Code" -1 202 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "2D Inert Output" -1 203 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 205 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 207 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 60 "with(Statistics):\nassume(nu>0,lambda>0):\nnoncentral chisquare" }{MPLTEXT 1 0 50 ":=RandomVariable(NonCentralChiSquare(nu,l ambda)):\n" }{MPLTEXT 1 0 9 "pdf:=PDF(" }{MPLTEXT 1 0 19 "noncentralch isquare" }{MPLTEXT 1 0 23 ",x):\nddf:=diff(pdf,x):\n" }{MPLTEXT 1 0 9 "cdf:=CDF(" }{MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 5 ",x ):\n" }{MPLTEXT 1 0 49 "cdf2:=simplify(convert(cdf,hypergeom),symbolic ):\n" }{MPLTEXT 1 0 27 "cf:=CharacteristicFunction(" }{MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 5 ",x):\n" }{MPLTEXT 1 0 10 "mu_:= Mean(" }{MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 3 "):\n" } {MPLTEXT 1 0 15 "var_:=Variance(" }{MPLTEXT 1 0 19 "noncentralchisquar e" }{MPLTEXT 1 0 3 "):\n" }{MPLTEXT 1 0 33 "skew_:=simplify(convert(Sk ewness(" }{MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 20 "),GA MMA),symbolic):\n" }{MPLTEXT 1 0 33 "kurt_:=simplify(convert(Kurtosis( " }{MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 20 "),GAMMA),sy mbolic):\n" }{MPLTEXT 1 0 61 "sol:=subs(m='mu',v='var',solve(\{mu_=m,v ar_=v\},\{nu,lambda\})):\n" }{MPLTEXT 1 0 14 "qdf:=Quantile(" } {MPLTEXT 1 0 19 "noncentralchisquare" }{MPLTEXT 1 0 5 ",p):\n" } {MPLTEXT 1 0 22 "qdf2:=solve(cdf=p,x):\n" }{MPLTEXT 1 0 101 "pdfgr:=ma p(_u->simplify(convert(_u,hypergeom),symbolic),[diff(pdf, nu)/pdf, dif f(pdf, lambda)/pdf]):\n" }{MPLTEXT 1 0 93 "cdfgr:=map(_u->simplify(con vert(_u,hypergeom),symbolic),[diff(cdf, nu), diff(cdf, lambda)]):\n" } {MPLTEXT 1 0 101 "collect(expand(simplify(factor(convert(subs(lambda=1 ,diff(cdf2,k)),'StandardFunctions'))),trig),nu):\n" }{MPLTEXT 1 0 27 " valnum:=nu=1.5,lambda=2.5;\n" }{MPLTEXT 1 0 29 "evalf(subs(valnum,x=1, ddf));\n" }{MPLTEXT 1 0 29 "evalf(subs(valnum,x=1,pdf));\n" }{MPLTEXT 1 0 29 "evalf(subs(valnum,x=1,cdf));\n" }{MPLTEXT 1 0 28 "evalf(subs(v alnum,x=1,cf));\n" }{MPLTEXT 1 0 47 "evalf(subs(valnum,x=1,map(_x->_x* pdf,pdfgr)));\n" }{MPLTEXT 1 0 31 "evalf(subs(valnum,x=1,cdfgr));\n" } {MPLTEXT 1 0 40 "evalf(fsolve(subs(valnum,cdf)=0.95,x));\n" }{MPLTEXT 1 0 25 "evalf(subs(valnum,mu_));\n" }{MPLTEXT 1 0 32 "evalf(subs(valnu m,sqrt(var_)));\n" }{MPLTEXT 1 0 27 "evalf(subs(valnum,skew_));\n" } {MPLTEXT 1 0 27 "evalf(subs(valnum,kurt_));\n" }{MPLTEXT 1 0 26 "evalf (subs(valnum,var_));\n" }{MPLTEXT 1 0 38 "evalf(subs(valnum,[mu_,sqrt( var_)]));\n" }{MPLTEXT 1 0 52 "evalf(subs(sol,mu=mu_,var=var_,valnum,[ nu,lambda]));" }}{PARA 207 "" 1 "" {TEXT 208 0 "" }{HYPERLNK 208 "Warn ing, solve may be ignoring assumptions on the input variables." 4 "htt p://www.maplesoft.com/support/help/errors/view.aspx?path=Warning,%20so lve%20may%20be%20ignoring%20assumptions%20on%20the%20input%20variables ." "" }{TEXT 208 0 "" }}{PARA 206 "" 1 "" {TEXT 209 0 "" }{HYPERLNK 209 "Error, (in solve) cannot solve expressions with int(-(-1+Heavisid e(-_t))*exp(-(1/2)*_t-(1/2)*lambda)*_t^((1/2)*nu-1)*hypergeom([], [(1/ 2)*nu], (1/4)*lambda*_t)/(GAMMA((1/2)*nu)*2^((1/2)*nu)), _t = -infinit y .. x) for x" 4 "http://www.maplesoft.com/support/help/errors/view.as px?path=Error,%20(in%20solve)%20cannot%20solve%20expressions%20with%20 int(-(-1+Heaviside(-_t))*exp(-(1%2F2)*_t-(1%2F2)*lambda)*_t%5E((1%2F2) *nu-1)*hypergeom(%5B%5D,%20%5B(1%2F2)*nu%5D,%20(1%2F4)*lambda*_t)%2F(G AMMA((1%2F2)*nu)*2%5E((1%2F2)*nu)),%20_t%20%3D%20-inf" "" }{TEXT 209 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$/I$nu|irG6\"$\"#:!\"\"/I(lambda |irGF%$\"#DF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "$!+'Qh;x#!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+smC\"o\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+**pF`?!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "^$$\"+cTn!z%!#6$\"+ e4'R&>!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$,($\"+mS()=S!#6\"\"\"-I%d iffG%*protectedG6$-I(BesselIG6$F*I(_syslibG6\"6$$\"+++++v!#5$\"+I)Q6e \"!\"*$\"#:!\"\"$\"+*G;JC*F&-F)6$-F-6$$\"++++])!#>" }}{PARA 11 "" 1 "" {XPPMATH 20 "^$$\"+*=siE'!\"*$\"+ >y#Gc$!#>" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+++++8!\")" }}{PARA 11 " " 1 "" {XPPMATH 20 "7$$\"#S!\"\"$\"+w7b0O!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"\"!F$$\"+,+++S!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidNormal1.mws000066400000000000000000000110471307543307100213700ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1119 "restart:\nwith(Lin earAlgebra):\nwith(Statistics):\nfor dim from 1 to 4 do\n print(\"--- -------------------------------------------------------------------\") ;\n mu:=;\n assume(seq(s[i]>0,i=1..3));\n sigma :=[seq(s[i],i=1..dim)];\n C:=Matrix(dim,dim):\n for i from 1 to dim \+ do\n C[i,i]:=1;\n od:\n for i from 2 to dim do\n C[i-1, i]:=1/ 2;\n C[i, i-1]:=1/2;\n od:\n for i from 1 to dim do\n for j fr om 1 to dim do\n C[i, j] := C[i, j] * sigma[i] * sigma[j];\n o d:\n od:\n x:=:\n pdf:=1/(2*Pi)^(dim/2)/sqrt(De terminant(C))*exp(-Transpose(x-mu).MatrixInverse(C).(x-mu)/2):\n pdfg r:=[seq(diff(pdf,m[i]),i=1..dim),seq(diff(pdf,s[i]),i=1..dim)];\n ddf :=[seq(diff(pdf,X[i]),i=1..dim)]:\n valnum:=seq(m[i]=0,i=1..dim),seq( s[i]=i,i=1..dim);\n valnumX:=seq(X[i]=1/2,i=1..dim);\n print(evalf(s ubs(valnum,valnumX,ddf)));\n print(evalf(subs(valnum,valnumX,pdf))); \n cdf:=evalf(combine(expand(subs(valnum,pdf)),exp)):\n A:=-infinity :\n for i from 1 to dim do\n cdf:=Int(cdf,X[i]=A..0.5);\n od:\n \+ print(evalf[8-dim](cdf));\n print(evalf(subs(valnum,valnumX,pdfgr))); \n#print(pdfgr);\nod:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Qao---------- ------------------------------------------------------------6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7#$!+LmKg8%F&" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#Qao-------------------------------------------------- --------------------6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&$!+lu))=& *!#8$\"+m5%)f8F&$!+m5%)f8F&$\"\"!F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$\"+z#4=j\"!#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$IntG6$-F$6$-F$6$ -F$6$,$*&$\"%))=!\"'\"\"\"-%$expG6#,6*&$\"%+!)!\"%F1)&%\"XG6#F1\"\"#F1 !\"\"*($\"%+gF9F1F;F1&F<6#F>F1F1*($\"%nEF9F1F;F1&F<6#\"\"$F1F?*($\"%+5 F9F1F;F1&F<6#\"\"%F1F1*&$\"%+IF9F1)FCF>F1F?*($FGF9F1FCF1FHF1F1*($FMF9F 1FCF1FNF1F?*&$\"%L8F9F1)FHF>F1F?*(FLF1FHF1FNF1F1*&$\"%+]!\"&F1)FNF>F1F ?F1F1/F;;$F?%)infinityG$\"\"&F?/FCF^o/FHF^o/FNF^o" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7*$\"+lu))=&*!#8$!+m5%)f8F&$\"+m5%)f8F&$\"\"!F,$!+1\\'e :\"!#7$!+gm+*\\)F&$!+(3CF@&F&$!+)>B&zSF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 92 "restart:with(Statistics):\nX:=RandomVariable(Normal(m u,sigma)):\npdf:=PDF(X,x);\ncdf:=CDF(X,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)%&sigmaGF-- %$expG6#,$*(F)F-,&%\"xGF(%#muGF-F)F.!\"#F-F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&#\"\"\"\"\"#F'*&#F'F(F'-%$erfG6#,$**F(!\"\"F(F &,&%\"xGF0%#muGF'F'%&sigmaGF0F'F'F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "factor(diff(cdf,mu)/pdf);factor(diff(cdf,sigma)/pdf); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"xG!\"\"%#muG\"\"\"F(%&sigmaGF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "assume(sigma>0):int(pdf^2,x=-infinity..in finity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"\"\"F%*(\"\"#F%%#PiG #F%F'%'sigma|irGF%!\"\"F%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "evalf[25](1/(2*sqrt(Pi)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\": )RSZV\"yQx\"z%4#G!#D" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }}{MARK "0 0 0" 992 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidNormal1.txt000066400000000000000000000105731307543307100214040ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > with(Statistics): > for dim from 1 to 4 do > > print("--------------------------------------------------------------- > -------"); > mu:=; > assume(seq(s[i]>0,i=1..3)); > sigma:=[seq(s[i],i=1..dim)]; > C:=Matrix(dim,dim): > for i from 1 to dim do > C[i,i]:=1; > od: > for i from 2 to dim do > C[i-1, i]:=1/2; > C[i, i-1]:=1/2; > od: > for i from 1 to dim do > for j from 1 to dim do > C[i, j] := C[i, j] * sigma[i] * sigma[j]; > od: > od: > x:=: > > pdf:=1/(2*Pi)^(dim/2)/sqrt(Determinant(C))*exp(-Transpose(x-mu).Matrix > Inverse(C).(x-mu)/2): > pdfgr:=[seq(diff(pdf,m[i]),i=1..dim),seq(diff(pdf,s[i]),i=1..dim)]; > ddf:=[seq(diff(pdf,X[i]),i=1..dim)]: > valnum:=seq(m[i]=0,i=1..dim),seq(s[i]=i,i=1..dim); > valnumX:=seq(X[i]=1/2,i=1..dim); > print(evalf(subs(valnum,valnumX,ddf))); > print(evalf(subs(valnum,valnumX,pdf))); > cdf:=evalf(combine(expand(subs(valnum,pdf)),exp)): > A:=-infinity: > for i from 1 to dim do > cdf:=Int(cdf,X[i]=A..0.5); > od: > print(evalf[8-dim](cdf)); > print(evalf(subs(valnum,valnumX,pdfgr))); > #print(pdfgr); > od: "---------------------------------------------------------------\ -------" [-0.1760326633] 0.3520653266 0.6914625 [0.1760326633, -0.2640489950] "---------------------------------------------------------------\ -------" [-0.04054550354, 0.] 0.08109100710 0.486770 [0.04054550354, 0., -0.06081825531, -0.04054550354] "---------------------------------------------------------------\ -------" [-0.007545293311, 0.001077899044, -0.001077899044] 0.01293478853 0.32981 [0.007545293311, -0.001077899044, 0.001077899044, -0.009162141878, -0.006736869028, -0.004131946337] "---------------------------------------------------------------\ -------" [-0.0009518887465, 0.0001359841066, -0.0001359841066, 0.] 0.001631809279 0.5 0.5 0.5 / / / | | | | | | | | | / / / Float(-infinity) Float(-infinity) Float(-infinity) 0.5 / | 2 | 0.001888 exp(-0.8000 X[1] | / Float(-infinity) + 0.6000 X[1] X[2] - 0.2667 X[1] X[3] + 0.1000 X[1] X[4] 2 - 0.3000 X[2] + 0.2667 X[2] X[3] - 0.1000 X[2] X[4] 2 2 - 0.1333 X[3] + 0.1000 X[3] X[4] - 0.05000 X[4] ) dX[1] d X[2] dX[3] dX[4] [0.0009518887465, -0.0001359841066, 0.0001359841066, 0., -0.001155864906, -0.0008499006660, -0.0005212724087, -0.0004079523198] > restart:with(Statistics): > X:=RandomVariable(Normal(mu,sigma)): > pdf:=PDF(X,x); > cdf:=CDF(X,x); 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma pdf := 1/2 --------------------- 1/2 Pi sigma 1/2 2 (-x + mu) cdf := 1/2 - 1/2 erf(--------------) 2 sigma > factor(diff(cdf,mu)/pdf);factor(diff(cdf,sigma)/pdf); -1 -x + mu ------- sigma > assume(sigma>0):int(pdf^2,x=-infinity..infinity); 1 -------------- 1/2 2 Pi sigma~ > evalf[25](1/(2*sqrt(Pi))); 0.2820947917738781434740398 > openturns-1.9/validation/src/ValidNormalCDF3D.txt000066400000000000000000000011031307543307100220140ustar00rootroot00000000000000restart: Digits:=30: with(LinearAlgebra): R:=Matrix([[1,rho12,rho13],[rho12,1,rho23],[rho13,rho23,1]]); sigma:=Matrix([[1,0,0],[0,1,0],[0,0,1]]); Sigma:=sigma.R.sigma; Eigenvalues(Sigma); x:=Vector([x1,x2,x3]): pdf:=1/((2*Pi)^((3)/(2))*abs(Determinant(Sigma))^(1/(2)))*exp(expand(-1/(2)* Transpose(x).MatrixInverse(Sigma).x)); valrho:=rho12=0.5,rho13=0.2,rho23=0.1: valnum:=x1=0.1,x2=0.2,x3=0.3: for n to 16 do cdf := evalf[n](Int(Int(int(subs(valrho,pdf), x1 = -infinity .. subs(valnum,x1)), x2 = -infinity .. subs(valnum,x2)), x3 = -infinity .. subs(valnum,x3))) end do; quit openturns-1.9/validation/src/ValidNormalCDF3D_cholesky.mw000066400000000000000000001063331307543307100235340ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZgby1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiMtRiw2JVEuTGluZWFyQWxnZWJyYUYnRi9GMkY5RjVGT0Znbi1GLDYlUSdhc3N1bWVGJ0YvRjItRjY2LVEiKEYnRjkvRjxGMUY+L0ZBRjFGQkZERkZGSC9GS1EsMC4xNjY2NjY3ZW1GJy9GTkZgcC1GLDYlUSZyaG8xMkYnRi9GMi1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRJXJlYWxGJ0YvRjJGZXAtRiw2JVEmcmhvMTNGJ0YvRjJGZXBGW3FGZXAtRiw2JVEmcmhvMjNGJ0YvRjJGZXBGW3FGZXBGYnAtRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORltyLUkjbW5HRiQ2JFEiMUYnRjlGZXBGYnAtRjY2LVEiPEYnRjlGO0Y+RkBGQkZERkZGSEZKRk1GXXJGZXBGXnFGZHFGZ3FGXXJGZ25GZXBGXnFGYXJGXXJGZXBGYXFGZHFGZ3FGXXJGZXBGYXFGYXJGXXItRjY2LVEiKUYnRjlGXXBGPkZecEZCRkRGRkZIRl9wRmFwLUY2Ni1RIjtGJ0Y5RjtGaHBGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSJNRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVElc3Vic0YnRi9GMi1GYG82JC1GIzYpRmJwLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUZecjYkUSIwRidGOUZlcEZnbi1GLDYlUSdNYXRyaXhGJ0YvRjItRmBvNiQtRiM2Iy1GYG82Ji1GIzYoLUZgbzYmLUYjNidGXXJGZXBGYnBGZXBGXnFGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZlcC1GYG82Ji1GIzYnRmJwRmVwRl1yRmVwRmFxRjlGXHVGX3VGZXAtRmBvNiYtRiM2J0ZecUZlcEZhcUZlcEZdckY5Rlx1Rl91LUYsNiNRIUYnRjlGXHVGX3VGOUY5RmdyRk8tRiw2JVEkbWFwRidGL0YyLUZgbzYkLUYjNictRiw2JVEpc2ltcGxpZnlGJ0YvRjJGZXBGZ24tRiw2JVEwTFVEZWNvbXBvc2l0aW9uRidGL0YyLUZgbzYkLUYjNilGanJGZXAtRiw2JVEnbWV0aG9kRidGL0YyRmdzLUY2Ni1RIidGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMTExMTExMWVtRidGW28tRiw2JVEpQ2hvbGVza3lGJ0YvRjJGYXdGOUY5RmdyRk9GZ24tRiw2JVEtRWlnZW52ZWN0b3JzRidGL0YyLUZgbzYkLUYjNiNGanJGOUZncg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMDspWzMjSGhTIg== LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciMCcqKVwzI0hoUyI= NiQtJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJJ2NvbHVtbkdGKTYjL0kkJWlkR0YpIjB3NiczI0hoUyItSSdNYXRyaXhHRiY2Iy9GLiIwJ0hoMyNIaFMi LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY1LUkjbW5HRiQ2JFEiMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RKCZtaW51cztGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y4LyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRkctSSVtc3VwR0YkNiUtSSNtaUdGJDYlUSkmcmhvOzEyfGlyRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUYsNiRRIjJGJ0YvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0YyLUZLNiUtRk42JVEpJnJobzsxM3xpckYnRlFGVEZWRllGMi1GSzYlLUZONiVRKSZyaG87MjN8aXJGJ0ZRRlRGVkZZLUYzNi1RIitGJ0YvRjZGOUY7Rj1GP0ZBRkNGRUZIRlYtRjM2LVExJkludmlzaWJsZVRpbWVzO0YnRi9GNkY5RjtGPUY/RkFGQy9GRlEmMC4wZW1GJy9GSUZnby1GTjYlUSgmcmhvOzIzRidGUUZULUYzNi1RInxpckYnRi9GNkY5RjtGPUY/RkFGQy9GRlEsMC4xMTExMTExZW1GJy9GSUZgcEZjby1GTjYlUSgmcmhvOzEyRidGUUZURlxwRmNvLUZONiVRKCZyaG87MTNGJ0ZRRlRGXHAtRjM2LVEiO0YnRi9GNi9GOkZTRjtGPUY/RkFGQ0Zmby9GSVEsMC4yNzc3Nzc4ZW1GJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCwiIiJGIyokKUkoJnJobzsxMkc2IiIiI0YjISIiKiQpSSgmcmhvOzEzR0YnRihGI0YpKiQpSSgmcmhvOzIzR0YnRihGI0YpKipGKEYjJkkifGlyRyUqcHJvdGVjdGVkRzYjSSdyaG8yM3xpckdGJ0YjJkYyNiNJJ3JobzEyfGlyR0YnRiMmRjI2I0kncmhvMTN8aXJHRidGI0Yj LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= TTdSMApJPFJUQUJMRV9TQVZFLzE0MDYxMjkyMDg0ODgxNlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyoiJCIkIiIiIiIhJSdyaG8xM3xpckdGKEYnJSdyaG8yM3xpckdGKUYqRidGJg==TTdSMApJPFJUQUJMRV9TQVZFLzE0MDYxMjkyMDg0OTg5NlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyoiJCIkIiIiIiIhJSdyaG8xM3xpckdGKEYnJSdyaG8yM3xpckdGKEYoKiQsKEYnRicqJEYpIiIjISIiKiRGKkYuRi8jRidGLkYmTTdSMApJPFJUQUJMRV9TQVZFLzE0MDYxMjkyMDg2MTE3NlgqJSphbGdlYnJhaWNHNiI2IltnbCEjJSEhISIkIiQiIiIsJkYnRicqJCwmKiQlJ3JobzEzfGlyRyIiI0YnKiQlJ3JobzIzfGlyR0YtRicjRidGLUYnLCZGJ0YnRikhIiJGJg==TTdSMApJPFJUQUJMRV9TQVZFLzE0MDYxMjkyMDg2MTI5NlgsJSphbGdlYnJhaWNHNiI2IltnbCEiJSEhISMqIiQiJCwkKiYlJ3JobzIzfGlyRyIiIiUncmhvMTN8aXJHISIiRixGKiIiISomRitGKiwmKiRGKyIiI0YqKiRGKUYxRiojRixGMSomRilGKkYvRjNGKiwkRi5GLCwkRjRGLEYqRiY= openturns-1.9/validation/src/ValidNormalCopula.mws000066400000000000000000000331551307543307100224570ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annota tion Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "H elp Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized" -1 22 "Time s" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Input Pl aceholder" -1 201 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 } {CSTYLE "Code" -1 202 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "2D Inert Output" -1 203 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 205 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 207 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 21 "with(LinearAlgebra):\n" }{MPLTEXT 1 0 18 "with(Statis tics):\n" }{MPLTEXT 1 0 23 "for dim from 1 to 2 do\n" }{MPLTEXT 1 0 28 " sigma:=[seq(1,i=1..dim)];\n" }{MPLTEXT 1 0 22 " C:=Matrix(dim,d im):\n" }{MPLTEXT 1 0 25 " for i from 1 to dim do\n" }{MPLTEXT 1 0 15 " C[i,i]:=1;\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 25 " fo r i from 2 to dim do\n" }{MPLTEXT 1 0 20 " C[i-1, i]:=1/4;\n" } {MPLTEXT 1 0 20 " C[i, i-1]:=1/4;\n" }{MPLTEXT 1 0 6 " od:\n" } {MPLTEXT 1 0 25 " for i from 1 to dim do\n" }{MPLTEXT 1 0 27 " for j from 1 to dim do\n" }{MPLTEXT 1 0 48 " C[i, j] := C[i, j] * si gma[i] * sigma[j];\n" }{MPLTEXT 1 0 8 " od:\n" }{MPLTEXT 1 0 6 " o d:\n" }{MPLTEXT 1 0 27 " x:=:\n" }{MPLTEXT 1 0 84 " f:=1/(2*Pi)^(dim/2)/sqrt(Determinant(C))*exp(-Transpose(x).Matri xInverse(C).x/2):\n" }{MPLTEXT 1 0 71 " print(evalf(subs(seq(X[i]=Qua ntile(Normal(0,1),u[i]),i=1..dim),f)));\n" }{MPLTEXT 1 0 98 " print(e valf(subs(seq(X[i]=Quantile(Normal(0,1),u[i]),i=1..dim),[seq(diff(f,X[ j]),j=1..dim)])));\n" }{MPLTEXT 1 0 33 " cdf:=(combine(expand(f),exp) ):\n" }{MPLTEXT 1 0 16 " A:=-infinity:\n" }{MPLTEXT 1 0 25 " for i f rom 1 to dim do\n" }{MPLTEXT 1 0 54 " cdf:=Int(cdf,X[i]=A..Quantile (Normal(0,1),u[i]));\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 14 " \+ print(cdf);\n" }{MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "7 #\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_sy slibG6\"6#/I$%idGF'\"0+Q*zl_,9" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'Ve ctorG6$%*protectedGI(_syslibG6\"6#I'columnGF(6#/I$%idGF(\"0oLq1E:S\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(\"\"##\"\"\"F$I#PiG%*protectedG#! \"\"F$-I$expG6$F(I(_syslibG6\"6#,$*$&I\"XGF/6#F&F$F)F&F%" }}{PARA 11 " " 1 "" {XPPMATH 20 ",$-I$expG6$%*protectedGI(_syslibG6\"6#,$*$-I'RootO fGF%6#,(-I$erfGF%6#I#_ZGF%!\"\"F4\"\"\"&I\"uGF(6#F5\"\"#F9$F4\"\"!$\"+ -GU*)R!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "7#,$*&-I'RootOfG6$%*protect edGI(_syslibG6\"6#,(-I$erfG6$%*protectedGI(_syslibG6\"6#I#_ZG6$%*prote ctedGI(_syslibG6\"!\"\"!\"\"\"\"\"&I\"uG6\"6#\"\"\"\"\"#\"\"\"-I$expG6 $%*protectedGI(_syslibG6\"6#,$*$-I'RootOfG6$%*protectedGI(_syslibG6\"6 #,(-I$erfG6$%*protectedGI(_syslibG6\"6#I#_ZG6$%*protectedGI(_syslibG6 \"!\"\"!\"\"\"\"\"&I\"uG6\"6#\"\"\"\"\"#\"\"#$!\"\"\"\"!\"\"\"$!+Ne*=k &!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(\"\"##\"\"\"F$I#PiG%*protect edG#!\"\"F$-I$expG6$F(I(_syslibG6\"6#,$*$&I\"XGF/6#F&F$F)F&F%" }} {PARA 11 "" 1 "" {XPPMATH 20 ",$I)infinityG%*protectedG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I$IntG6$%*protectedGI(_syslibG6\"6$,$*(\"\"## \"\"\"F+I#PiGF%#!\"\"F+-I$expGF$6#,$*$&I\"XGF'6#F-F+F/F-F,/F6;,$I)infi nityGF%F0*&-I'RootOfGF$6#,(-I$erfGF$6#I#_ZGF$F0F0F-&I\"uGF'F8F+F-F+F," }}{PARA 11 "" 1 "" {XPPMATH 20 "7$\"\"\"F#" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_syslibG6\"6#/I$%idGF'\"0)))='p D:S\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_sys libG6\"6#I'columnGF(6#/I$%idGF(\"0?()*zl_,9" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(I#PiG%*protectedG!\"\"\"#:#\"\"\"\"\"#-I$expG6$F%I(_s yslibG6\"6#,&*&&I\"XGF/6#F)F),&F3#\"#;F'&F46#F*#!\"%F'F)#F&F**&F9F),&F 3F;F9F7F)F=F)#F*F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$-I$expG6$%*prote ctedGI(_syslibG6\"6#,&*&-I'RootOfGF%6#,(-I$erfGF%6#I#_ZGF%!\"\"F4\"\" \"&I\"uGF(6#F5\"\"#F5,&F,$\"+nW\\3:!\"*-F-6#,(F0F4F4F5&F76#F9F9$!+mhBr P!#5F5$!+5y1rqFE*&F>F5,&F,FCF>F;F5FF$\"+%=XPk\"FE" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$,$*&,&-I'RootOfG6$%*protectedGI(_syslibG6\"6#,(-I$erfGF (6#I#_ZGF(!\"\"F2\"\"\"&I\"uGF+6#F3\"\"#$!+nW\\3:!\"*-F'6#,(F.F2F2F3&F 56#F7F7$\"+mhBrP!#5F3-I$expGF(6#,&*&F&F3,&F&$\"+nW\\3:F:F;$!+mhBrPFBF3 $!+5y1rqFB*&F;F3,&F&FKF;FIF3FMF3$\"+%=XPk\"FB,$*&,&F&F@F;F8F3FCF3FQ" } }{PARA 11 "" 1 "" {XPPMATH 20 ",$*(I#PiG%*protectedG!\"\"\"#:#\"\"\"\" \"#-I$expG6$F%I(_syslibG6\"6#,(*$&I\"XGF/6#F)F*#!\")F'*&F3F)&F46#F*F)# \"\"%F'*$F9F*F6F)#F*F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$I)infinityG% *protectedG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I$IntG6$%*protected GI(_syslibG6\"6$-F#6$,$*(I#PiGF%!\"\"\"#:#\"\"\"\"\"#-I$expGF$6#,(*$&I \"XGF'6#F1F2#!\")F/*&F8F1&F96#F2F1#\"\"%F/*$F>F2F;F1#F2F//F8;,$I)infin ityGF%F.*&-I'RootOfGF$6#,(-I$erfGF$6#I#_ZGF$F.F.F1&I\"uGF'F:F2F1F2F0/F >;FF*&-FJ6#,(FMF.F.F1&FRF?F2F1F2F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "pdf:=diff(diff(cdf,u[1]),u[2]);\n" }{MPLTEXT 1 0 36 " evalf(subs(u[1]=0.2,u[2]=0.2,pdf));\n" }{MPLTEXT 1 0 36 "evalf(subs(u[ 1]=0.2,u[2]=0.2,cdf));\n" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$**-I$expG6 $%*protectedGI(_syslibG6\"6#,$*$-I'RootOfGF&6#,(-I$erfGF&6#I#_ZGF&!\" \"F5\"\"\"&I\"uGF)6#\"\"#F:F:F5F5-F%6#,$*$-F.6#,(F1F5F5F6&F86#F6F:F:F5 F5\"#:#F6F:-F%6#,(F>#!#;FD*&F?F6F-F6#\"\")FDF,FIF6#\"\"%FD" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+Ww(**=\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"+=TiRh!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "PDF_:=pro c(x,y)\n" }{MPLTEXT 1 0 33 " evalf(subs(u[1]=x,u[2]=y,pdf))\n" } {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "eps :=1e-1:\n" }{MPLTEXT 1 0 21 "for i from 2 to 9 do\n" }{MPLTEXT 1 0 16 " eps:=0.1*eps:\n" }{MPLTEXT 1 0 96 " print([eps,i,evalf[i](Int(Int( (u[1]-1/2)*(u[2]-1/2)*pdf,u[1]=eps..1-eps),u[2]=eps..1-eps))]);\n" } {MPLTEXT 1 0 4 "od:\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "7%$\"\"\"!\"#\" \"#$\"# !\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "7%$\"\"\"!\"%\"\"%^$$\"%*)>!\"&$ \"%CB!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "7%$\"\"\"!\"&\"\"&-I$IntG6$% *protectedGI(_syslibG6\"6$-F(6$,$*,,&&I\"uGF,6#F$F$$!&++&F%F$F$,&&F46# \"\"#F$F6F$F$-I$expGF)6#,$*$-I'RootOfGF)6#,(-I$erfGF)6#I#_ZGF)!\"\"FIF $F9F;F;$FI\"\"!FI-F=6#,$*$-FB6#,(FEFIFIF$F3F;F;FJFI-F=6#,(FO$!&n1\"!\" %*&FPF$FAF$$\"&LL&F%F@FVF$$\"&G.\"FX/F3;F#$\"&*****F%/F9Fin" }}{PARA 207 "" 1 "" {TEXT 208 0 "" }{HYPERLNK 208 "Warning, computation inter rupted" 4 "http://www.maplesoft.com/support/help/errors/view.aspx?path =Warning,%20%20computation%20interrupted" "" }{TEXT 208 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "inf:=1.0:\n" }{MPLTEXT 1 0 23 "for i from 1 to 100 do\n" }{MPLTEXT 1 0 16 " inf:=inf+1.0:\n" } {MPLTEXT 1 0 13 "Digits:=2*i;\n" }{MPLTEXT 1 0 134 " print([inf,evalf [2*i](Int(Int((CDF(Normal(0,1),s)-1/2)*(CDF(Normal(0,1),t)-1/2)*subs(X [1]=s,X[2]=t,f),s=-inf..inf),t=-inf..inf))]);\n" }{MPLTEXT 1 0 3 "od:" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#?!\"\"$\"#8!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#I!\"\"$\"%O>!\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#S!\"\"$\"'\"H*>!\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#] !\"\"$\")ej%*>!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#g!\"\"$\"+7V l%*>!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#q!\"\"$\"-k$QaY*>!#8" } }{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"#!)!\"\"$\"/%QPQaY*>!#:" }}{PARA 207 "" 1 "" {TEXT 208 0 "" }{HYPERLNK 208 "Warning, computation inter rupted" 4 "http://www.maplesoft.com/support/help/errors/view.aspx?path =Warning,%20%20computation%20interrupted" "" }{TEXT 208 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidNormalCopula.txt000066400000000000000000000147631307543307100224740ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > with(Statistics): > for dim from 1 to 2 do > sigma:=[seq(1,i=1..dim)]; > C:=Matrix(dim,dim): > for i from 1 to dim do > C[i,i]:=1; > od: > for i from 2 to dim do > C[i-1, i]:=1/4; > C[i, i-1]:=1/4; > od: > for i from 1 to dim do > for j from 1 to dim do > C[i, j] := C[i, j] * sigma[i] * sigma[j]; > od: > od: > x:=: > > f:=1/(2*Pi)^(dim/2)/sqrt(Determinant(C))*exp(-Transpose(x).MatrixInver > se(C).x/2): > print(evalf(subs(seq(X[i]=Quantile(Normal(0,1),u[i]),i=1..dim),f))); > > print(evalf(subs(seq(X[i]=Quantile(Normal(0,1),u[i]),i=1..dim),[seq(di > ff(f,X[j]),j=1..dim)]))); > cdf:=(combine(expand(f),exp)): > A:=-infinity: > for i from 1 to dim do > cdf:=Int(cdf,X[i]=A..Quantile(Normal(0,1),u[i])); > od: > print(cdf); > od; sigma := [1] C := [0] x := [X[1]] 1/2 2 2 exp(-1/2 X[1] ) f := 1/2 -------------------- 1/2 Pi 2 0.3989422802 exp(-1. RootOf(erf(_Z) + 1 - 2 u[1]) ) [-0.5641895835 RootOf(erf(_Z) + 1 - 2 u[1]) 2 exp(-1. RootOf(erf(_Z) + 1 - 2 u[1]) )] 1/2 2 2 exp(-1/2 X[1] ) cdf := 1/2 -------------------- 1/2 Pi A := -infinity 1/2 RootOf(erf(_Z) + 1 - 2 u[1]) 2 / 1/2 2 | 2 exp(-1/2 X[1] ) | 1/2 -------------------- dX[1] | 1/2 / Pi -infinity sigma := [1, 1] [0 0] C := [ ] [0 0] [X[1]] x := [ ] [X[2]] 1/2 /16 \ f := 2/15 15 exp(-1/2 X[1] |-- X[1] - 4/15 X[2]| \15 / / 16 \ - 1/2 X[2] |-4/15 X[1] + -- X[2]|)/Pi \ 15 / 0.1643745184 exp(-0.7071067810 RootOf(erf(_Z) + 1 - 2 u[1]) ( 1.508494467 RootOf(erf(_Z) + 1 - 2 u[1]) - 0.3771236166 RootOf(erf(_Z) + 1 - 2 u[2])) - 0.7071067810 RootOf(erf(_Z) + 1 - 2 u[2]) ( -0.3771236166 RootOf(erf(_Z) + 1 - 2 u[1]) + 1.508494467 RootOf(erf(_Z) + 1 - 2 u[2]))) [0.1643745184 (-1.508494467 %2 + 0.3771236166 %1) exp( -0.7071067810 %2 (1.508494467 %2 - 0.3771236166 %1) - 0.7071067810 %1 (-0.3771236166 %2 + 1.508494467 %1)), 0.1643745184 (0.3771236166 %2 - 1.508494467 %1) exp( -0.7071067810 %2 (1.508494467 %2 - 0.3771236166 %1) - 0.7071067810 %1 (-0.3771236166 %2 + 1.508494467 %1))] %1 := RootOf(erf(_Z) + 1 - 2 u[2]) %2 := RootOf(erf(_Z) + 1 - 2 u[1]) 1/2 2 2 15 exp(-8/15 X[1] + 4/15 X[1] X[2] - 8/15 X[2] ) cdf := 2/15 ---------------------------------------------------- Pi A := -infinity 1/2 RootOf(erf(_Z) + 1 - 2 u[2]) 2 / | | | / -infinity 1/2 RootOf(erf(_Z) + 1 - 2 u[1]) 2 / | | | / -infinity 1/2 2 2 15 exp(-8/15 X[1] + 4/15 X[1] X[2] - 8/15 X[2] ) 2/15 ---------------------------------------------------- d Pi X[1] dX[2] > pdf:=diff(diff(cdf,u[1]),u[2]); > evalf(subs(u[1]=0.2,u[2]=0.2,pdf)); > evalf(subs(u[1]=0.2,u[2]=0.2,cdf)); > 1/2 16 2 pdf := 4/15 15 exp(--- RootOf(erf(_Z) + 1 - 2 u[1]) + 8/15 15 RootOf(erf(_Z) + 1 - 2 u[1]) RootOf(erf(_Z) + 1 - 2 u[2]) 16 2 / - -- RootOf(erf(_Z) + 1 - 2 u[2]) ) / ( 15 / 2 exp(-RootOf(erf(_Z) + 1 - 2 u[2]) ) 2 exp(-RootOf(erf(_Z) + 1 - 2 u[1]) )) 1.189977644 0.06139624118 > PDF_:=proc(x,y) > evalf(subs(u[1]=x,u[2]=y,pdf)) > end: > eps:=1e-1: > for i from 2 to 9 do > eps:=0.1*eps: > > print([eps,i,evalf[i](Int(Int((u[1]-1/2)*(u[2]-1/2)*pdf,u[1]=eps..1-ep > s),u[2]=eps..1-eps))]); > od: > [0.01, 2, 0.017] [0.001, 3, 0.0195] -21 [0.0001, 4, 0.01989 + 0.2324 10 I] Warning, computation interrupted > inf:=1.0: > for i from 1 to 100 do > inf:=inf+1.0: > Digits:=2*i; > > print([inf,evalf[2*i](Int(Int((CDF(Normal(0,1),s)-1/2)*(CDF(Normal(0,1 > ),t)-1/2)*subs(X[1]=s,X[2]=t,f),s=-inf..inf),t=-inf..inf))]); > od: [2.0, 0.013] [3.0, 0.01936] [4.0, 0.0199291] [5.0, 0.019946358] [6.0, 0.01994654312] [7.0, 0.0199465438364] [8.0, 0.019946543837384] [9.0, 0.01994654383738411] 10.0 10.0 / / | | [10.0, | | 0.0410936296040999870 | | / / -10.0 -10.0 erf(0.707106781186547525 s) erf(0.707106781186547525 t) exp(- 0.500000000000000000 s (1.06666666666666667 s - 0.266666666666666667 t) - 0.500000000000000000 t (-0.266666666666666667 s + 1.06666666666666667 t)) ds dt] Warning, computation interrupted > openturns-1.9/validation/src/ValidNumericalSample.R000066400000000000000000000016751307543307100225410ustar00rootroot00000000000000dim <- 3 size <- 100 #sample <- matrix(nrow=size, ncol=dim) #for (i in 1:size) #{ # x <- i - 1 # sample[i, 1] <- x # sample[i, 2] <- x * x # sample[i, 3] <- size - 1 - sqrt(x) #} sample <- matrix(nrow=4, ncol=3) sample[1, 1] <- 1 sample[1, 2] <- 0 sample[1, 3] <- 9 sample[2, 1] <- 2 sample[2, 2] <- 3 sample[2, 3] <- 5 sample[3, 1] <- 5 sample[3, 2] <- 1 sample[3, 3] <- 8 sample[4, 1] <- 6 sample[4, 2] <- 7 sample[4, 3] <- 2 print("min") print(apply(sample, 2, min)) print("max") print(apply(sample, 2, max)) print("mean") print(apply(sample, 2, mean)) print("cov") print(cov(sample)) print("sd") print(chol(cov(sample))) print("sd by component") print(apply(sample, 2, sd)) print("cor Pearson") print(cor(sample)) print("cor Spearman") print(cor(sample, method="spearman")) print("cor kendall") print(cor(sample, method="kendall")) print("range by component") print(apply(sample, 2, range)) print("var by component") print(apply(sample, 2, var)) openturns-1.9/validation/src/ValidOrthogonalProductFactory.mws000066400000000000000000000117761307543307100250750ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3829 "restart:\nwith(Pol ynomialTools):\nwith(Statistics):\nw:=PDF(RandomVariable(Uniform(-1,1) ),x) assuming x>0, x<1:\nassume(n,integer,n>1,alpha,real,alpha>0):\n# \+ Legendre\nR:=n*Pn=(2*n-1)*xPn_1+0*Pn_1-(n-1)*Pn_2:\nnormF:=sqrt(1/(2*n +1)):\nS:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n- 1,normF)*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R):\nmap(_x->factor(simplif y(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn_1)/coeff(lhs(S),Qn),c oeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_2)/coeff(lhs(S),Qn) ]):\nC0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF *Vector([1]))):\nC1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs (n=1,1/normF*Vector([0,1]))):\nU:=C0[1]:V:=C1[1]+C1[2]*x:\nlegendreFac tory:=evalf(U):\nlegendreFactory:=legendreFactory,evalf(V):\nfor i fro m 2 to 9 do\n W:=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U, solve(S,Qn)),x)):\n legendreFactory:=legendreFactory,evalf(W);\n U:= V:\n V:=W:\nod:\nw:=PDF(RandomVariable(Normal(0,1)),x):\n# Hermite\nR :=Pn=xPn_1-(n-1)*Pn_2:\nnormF:=sqrt(GAMMA(n+1)):\nS:=subs(Pn=normF*Qn, Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF)*xQn_1,Pn_2=subs(n= n-2,normF)*Qn_2,R):\nmap(_x->factor(simplify(convert(_x,GAMMA),symboli c)),[coeff(rhs(S),xQn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs (S),Qn),coeff(rhs(S),Qn_2)/coeff(lhs(S),Qn)]):\nC0:=map(_x->simplify(c onvert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vector([1]))):\nC1:=map(_x ->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vector([0,1])) ):\nU:=C0[1]:\nV:=C1[1]+C1[2]*x:\nhermiteFactory:=evalf(U):\nhermiteFa ctory:=hermiteFactory,evalf(V):\nfor i from 2 to 9 do\n W:=map(factor ,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x)):\n hermite Factory:=hermiteFactory,evalf(W);\n U:=V:\n V:=W:\nod:\nw:=PDF(Rando mVariable(Gamma(1,alpha+1)),x):\n# Laguerre\nR:=n*Pn=-xPn_1+(2*n-1+alp ha)*Pn_1-(n-1+alpha)*Pn_2:\nnormF:=sqrt(GAMMA(n+alpha+1)/GAMMA(alpha+1 )/GAMMA(n+1)):\nS:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1= subs(n=n-1,normF)*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R):\nmap(_x->facto r(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn_1)/coeff(lhs (S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_2)/coeff(l hs(S),Qn)]):\nC0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n= 0,1/normF*Vector([1]))):\nC1:=map(_x->simplify(convert(_x,GAMMA),symbo lic),subs(n=1,1/normF*Vector([1+alpha,-1]))):\nalpha_num:=2.5:\nU:=C0[ 1]:\nV:=C1[1]+C1[2]*x:\nlaguerreFactory:=evalf(subs(alpha=alpha_num,U) ):\nlaguerreFactory:=laguerreFactory,evalf(subs(alpha=alpha_num,V)):\n for i from 2 to 9 do\n W:=map(_x->factor(simplify(_x,symbolic)),colle ct(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,alpha=alpha_num,solve(S,Qn)),x)): \n laguerreFactory:=laguerreFactory,evalf(W);\n U:=V:\n V:=W:\nod: \np:=<0.5|0.5|0.5>:\n# Expand the enumerate function\nevalf(subs(x=p[1 ],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][1])*subs(x=p[3], [hermiteFactory][1]));\nevalf(subs(x=p[1],[laguerreFactory][2])*subs(x =p[2],[legendreFactory][1])*subs(x=p[3],[hermiteFactory][1]));\nevalf( subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][2])*su bs(x=p[3],[hermiteFactory][1]));\nevalf(subs(x=p[1],[laguerreFactory][ 1])*subs(x=p[2],[legendreFactory][1])*subs(x=p[3],[hermiteFactory][2]) );\nevalf(subs(x=p[1],[laguerreFactory][3])*subs(x=p[2],[legendreFacto ry][1])*subs(x=p[3],[hermiteFactory][1]));\nevalf(subs(x=p[1],[laguerr eFactory][2])*subs(x=p[2],[legendreFactory][2])*subs(x=p[3],[hermiteFa ctory][1]));\nevalf(subs(x=p[1],[laguerreFactory][2])*subs(x=p[2],[leg endreFactory][1])*subs(x=p[3],[hermiteFactory][2]));\nevalf(subs(x=p[1 ],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][3])*subs(x=p[3], [hermiteFactory][1]));\nevalf(subs(x=p[1],[laguerreFactory][1])*subs(x =p[2],[legendreFactory][2])*subs(x=p[3],[hermiteFactory][2]));\nevalf( subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][1])*su bs(x=p[3],[hermiteFactory][3]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"\"\"\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+^uc.;!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+SSDg')!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+aG+\\?!\"*" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+],t)Q\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+bs$y,)!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+l\\ 3&z#!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+?q7IV!#5" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$!+e3I.`!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidOrthogonalProductFactory.txt000066400000000000000000000106121307543307100250720ustar00rootroot00000000000000> restart: > with(PolynomialTools): > with(Statistics): > w:=PDF(RandomVariable(Uniform(-1,1)),x) assuming x>0, x<1: > assume(n,integer,n>1,alpha,real,alpha>0): > # Legendre > R:=n*Pn=(2*n-1)*xPn_1+0*Pn_1-(n-1)*Pn_2: > normF:=sqrt(1/(2*n+1)): > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R): > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]): > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))): > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([0,1]))): > U:=C0[1]:V:=C1[1]+C1[2]*x: > legendreFactory:=evalf(U): > legendreFactory:=legendreFactory,evalf(V): > for i from 2 to 9 do > > W:=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x) > ): > legendreFactory:=legendreFactory,evalf(W); > U:=V: > V:=W: > od: > w:=PDF(RandomVariable(Normal(0,1)),x): > # Hermite > R:=Pn=xPn_1-(n-1)*Pn_2: > normF:=sqrt(GAMMA(n+1)): > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R): > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]): > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))): > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([0,1]))): > U:=C0[1]: > V:=C1[1]+C1[2]*x: > hermiteFactory:=evalf(U): > hermiteFactory:=hermiteFactory,evalf(V): > for i from 2 to 9 do > > W:=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x) > ): > hermiteFactory:=hermiteFactory,evalf(W); > U:=V: > V:=W: > od: > w:=PDF(RandomVariable(Gamma(1,alpha+1)),x): > # Laguerre > R:=n*Pn=-xPn_1+(2*n-1+alpha)*Pn_1-(n-1+alpha)*Pn_2: > normF:=sqrt(GAMMA(n+alpha+1)/GAMMA(alpha+1)/GAMMA(n+1)): > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R): > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]): > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))): > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([1+alpha,-1]))): > alpha_num:=2.5: > U:=C0[1]: > V:=C1[1]+C1[2]*x: > laguerreFactory:=evalf(subs(alpha=alpha_num,U)): > laguerreFactory:=laguerreFactory,evalf(subs(alpha=alpha_num,V)): > for i from 2 to 9 do > > W:=map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,xQn_1=x*V,Qn > _1=V,Qn_2=U,alpha=alpha_num,solve(S,Qn)),x)): > laguerreFactory:=laguerreFactory,evalf(W); > U:=V: > V:=W: > od: > p:=<0.5|0.5|0.5>: > # Expand the enumerate function > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][2])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 2])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][2])); > evalf(subs(x=p[1],[laguerreFactory][3])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][2])*subs(x=p[2],[legendreFactory][ > 2])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][2])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][2])); > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 3])*subs(x=p[3],[hermiteFactory][1])); > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 2])*subs(x=p[3],[hermiteFactory][2])); > evalf(subs(x=p[1],[laguerreFactory][1])*subs(x=p[2],[legendreFactory][ > 1])*subs(x=p[3],[hermiteFactory][3])); 1. 1.603567451 0.8660254040 0.5 2.049002854 1.388730150 0.8017837255 -0.2795084965 0.4330127020 -0.5303300858 > openturns-1.9/validation/src/ValidOrthogonalUniVariateFactory.mws000066400000000000000000001474411307543307100255230ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 } 1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotation Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "C ourier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Printe d Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 } {PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Hyperlin kError" -1 206 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Tim es" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 } {PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet Item" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "HyperlinkWarning" -1 207 1 {CSTYLE "" -1 -1 "Courier" 1 12 0 0 255 1 2 2 1 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annota tion Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "H elp Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 } {CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 } {CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 "Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Small" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Small" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number" -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labels" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title" -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphasized" -1 22 "Time s" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic Small204" -1 201 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Ma ple Input Placeholder" -1 202 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "Code" -1 203 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic Small205" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Inert Output" -1 205 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 206 " Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Ti mes" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underli ned" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 " Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 207 "Times" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 208 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 209 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 " Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times" 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed " -1 23 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{PSTYLE "" -1 208 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 2 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" -1 209 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 2 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" -1 210 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 2 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 12 "Digits:=20:\n" }{MPLTEXT 1 0 7 "d1:=5:\n" }{MPLTEXT 1 0 8 "d2:=10:\n" }{MPLTEXT 1 0 23 "with(PolynomialTools):\n" } {MPLTEXT 1 0 18 "with(Statistics):\n" }{MPLTEXT 1 0 10 "lowB:=-1:\n" } {MPLTEXT 1 0 10 "highB:=1:\n" }{MPLTEXT 1 0 72 "w:=PDF(RandomVariable( Uniform(lowB,highB)),x) assuming x>lowB, x1,alpha,real,alpha>0);\n" }{MPLTEXT 1 0 11 "# Lege ndre\n" }{MPLTEXT 1 0 41 "R:=n*Pn=(2*n-1)*xPn_1+0*Pn_1-(n-1)*Pn_2;\n" }{MPLTEXT 1 0 24 "normF:=sqrt(1/(2*n+1));\n" }{MPLTEXT 1 0 110 "S:=sub s(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF)*xQn_ 1,Pn_2=subs(n=n-2,normF)*Qn_2,R);\n" }{MPLTEXT 1 0 176 "recCoeff:=map( _x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn_1)/ coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_2 )/coeff(lhs(S),Qn)]);\n" }{MPLTEXT 1 0 81 "C0:=map(_x->simplify(conver t(_x,GAMMA),symbolic),subs(n=0,1/normF*Vector([1])));\n" }{MPLTEXT 1 0 83 "C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/norm F*Vector([0,1])));\n" }{MPLTEXT 1 0 11 "U:=1:V:=x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 22 "for i from 2 to d1 do\n" }{MPLTEXT 1 0 75 " W:=map(factor,collect(subs(n=i,xPn_1=x*V,Pn_1=V,Pn_2=U,solve(R,P n)),x)):\n" }{MPLTEXT 1 0 10 " L:=L,W:\n" }{MPLTEXT 1 0 124 " print( map(_x->factor(simplify(_x,symbolic)),W),\"->\",map(_x->factor(simplif y(_x,symbolic)),collect(subs(n=i,W/normF),x)));\n" }{MPLTEXT 1 0 8 " \+ U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d1,d1):\n" }{MPLTEXT 1 0 22 "for i from 1 to d1 do \n" }{MPLTEXT 1 0 24 " for j from 1 to d1 do\n" }{MPLTEXT 1 0 44 " \+ M[i,j]:=int(L[i]*L[j]*w,x=lowB..highB):\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 10 "print(M);\n" }{MPLTEXT 1 0 10 "U:=C0[1]:\n" }{MPLTEXT 1 0 18 "V:=C1[1]+C1[2]*x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 10 "evalf(U);\n" }{MPLTEXT 1 0 10 "evalf(V );\n" }{MPLTEXT 1 0 22 "for i from 2 to d2 do\n" }{MPLTEXT 1 0 75 " W :=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x)) :\n" }{MPLTEXT 1 0 10 " L:=L,W:\n" }{MPLTEXT 1 0 39 "# print(evalf(C oefficientList(W,x)));\n" }{MPLTEXT 1 0 36 " print(evalf(sort(W,desce nding)));\n" }{MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" } {MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d2,d2):\n" } {MPLTEXT 1 0 22 "for i from 1 to d2 do\n" }{MPLTEXT 1 0 24 " for j fr om 1 to d2 do\n" }{MPLTEXT 1 0 44 " M[i,j]:=int(L[i]*L[j]*w,x=lowB. .highB):\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" } {MPLTEXT 1 0 10 "print(M);\n" }{MPLTEXT 1 0 11 "fsolve(W);\n" } {MPLTEXT 1 0 35 "evalf(int(cos(x)*w,x=lowB..highB));" }}{PARA 11 "" 1 "" {XPPMATH 20 "#\"\"\"\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "/*&I#n|i rG6\"\"\"\"I#PnGF%F&,&*&,&*&\"\"#F&F$F&F&F&!\"\"F&I&xPn_1GF%F&F&*&,&F$ F&F&F-F&I%Pn_2GF%F&F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "*$),&*&\"\"#\" \"\"I#n|irG6\"F'F'F'F'#F'F&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "/*(I #n|irG6\"\"\"\"),&*&\"\"#F&F$F&F&F&F&#F&F*!\"\"I#QnGF%F&,&*&),&F)F&F&F ,F+F&I&xQn_1GF%F&F&*(,&F$F&F&F,F&),&F)F&\"\"$F,F+F,I%Qn_2GF%F&F," }} {PARA 11 "" 1 "" {XPPMATH 20 "7%*(),&*&\"\"#\"\"\"I#n|irG6\"F(F(F(!\" \"#F(F'F(F)F+),&F&F(F(F(F,F(\"\"!,$**,&F)F(F(F+F(),&F&F(\"\"$F+F,F+F)F +F-F(F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_s yslibG6\"6#I'columnGF(6#/I$%idGF(\"0c=q@hNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_syslibG6\"6#I'columnGF(6#/I$% idGF(\"0wDq@hNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,&*&#\"\"$\"\"#\" \"\")I\"xG6\"F'F(F(#F(F'!\"\"Q#->F+,&*(F%F()\"\"&F,F(F)F(F(*&F,F(F1F(F -" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,&*&#\"\"&\"\"#\"\"\")I\"xG6\"\" \"$F(F(*&#F,F'F(F*F(!\"\"Q#->F+,&*(F%F()\"\"(#F(F'F(F)F(F(*(F.F(F3F(F* F(F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,(#\"\"$\"\")\"\"\"*&#\"#NF&F' )I\"xG6\"\"\"%F'F'*&#\"#:F.F')F,\"\"#F'!\"\"Q#->F-,(*&#\"$0\"F&F'F+F'F '*&#\"#XF.F'F2F'F4#\"\"*F&F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,(*&# \"#j\"\")\"\"\")I\"xG6\"\"\"&F(F(*&#\"#N\"\"%F()F*\"\"$F(!\"\"*&#\"#:F 'F(F*F(F(Q#->F+,(*(F%F()\"#6#F(\"\"#F(F)F(F(*(F.F(F:F(F1F(F3*(F5F(F:F( F*F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_sys libG6\"6#/I$%idGF'\"0cmq@hNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"\" \"\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*&$\"5NHx)ov!30K\"\"\"I \"xG6\"F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&*&$\"5Ya%o\\i'>5aL!#>\" \"\")I\"xG6\"\"\"#F'F'$\"5#[[*)\\())R.=6F&!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&*&$\"5iZw9mx#yVh'!#>\"\"\")I\"xG6\"\"\"$F'F'*&$\"5e)e)o fmpioRF&F'F)F'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",(*&$\"5+++++++]7 8!#=\"\"\")I\"xG6\"\"\"%F'F'*&$\"5++++++++D6F&F')F)\"\"#F'!\"\"$F.!#>F '" }}{PARA 11 "" 1 "" {XPPMATH 20 ",(*&$\"57Qx[SA?%=h#!#=\"\"\")I\"xG6 \"\"\"&F'F'*&$\"5!o[(4c\"pY?!HF&F')F)\"\"$F'!\"\"*&$\"5rruj\">[r'=i!#> F'F)F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",**&$\"5>aM6&Rl9b?&!#=\"\"\" )I\"xG6\"\"\"'F'F'*&$\"53#*G(pN2H%)4(F&F')F)\"\"%F'!\"\"*&$\"5O(HCBX-V hO#F&F')F)\"\"#F'F'$\"5Tl'\\#etZtE6!#>F1" }}{PARA 11 "" 1 "" {XPPMATH 20 ",**&$\"5Blj=qfOWQ5!#<\"\"\")I\"xG6\"\"\"(F'F'*&$\"5%Qu3E=\"f[x;F&F ')F)\"\"&F'!\"\"*&$\"5F*>&e%G'f$\\i(!#=F')F)\"\"$F'F'*&$\"5kVC(G)p5:s% )!#>F'F)F'F1" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,*&$\"5bcyQvHp#G2#!#<\" \"\")I\"xG6\"\"\")F'F'*&$\"5AKt0aNpFpQF&F')F)\"\"'F'!\"\"*&$\"5?`h&>^: vAB#F&F')F)\"\"%F'F'*&$\"5Pg%Q<-5#oeS!#=F')F)\"\"#F'F1$\"5m0H[]%p6u7\" !#>F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,*&$\"5!*H>QY,8DRT!#<\"\"\")I \"xG6\"\"\"*F'F'*&$\"59ABjFWLZl()F&F')F)\"\"(F'!\"\"*&$\"5]DEM*4MJe8'F &F')F)\"\"&F'F'*&$\"5-'=@Mu3!Ht:F&F')F)\"\"$F'F1*&$\"5?jip)oy(ps5!#=F' F)F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",.*&$\"5W<\"p'**)*z9o#)!#<\"\" \")I\"xG6\"\"#5F'F'*&$\"5mkU(4(ybCe>!#;F')F)\"\")F'!\"\"*&$\"5[Tqc_HGn 7;F/F')F)\"\"'F'F'*&$\"5FQ,*=%)4wbP&F&F')F)\"\"%F'F2*&$\"5R8jz'e!ye-i! #=F')F)\"\"#F'F'$\"5;vQ0VPKuF6!#>F2" }}{PARA 11 "" 1 "" {XPPMATH 20 "- I'MatrixG6$%*protectedGI(_syslibG6\"6#/I$%idGF'\"0ONo@hNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,$!5W?<<<&Gl!R(*!#?$!5B5X)*)omL1l)F%$!5Q1W-*H o&4%z'F%$!5z!>Z#HTR&RL%F%$!5)3@J;)*QV()[\"F%$\"5)3@J;)*QV()[\"F%$\"5z! >Z#HTR&RL%F%$\"5Q1W-*Ho&4%z'F%$\"5B5X)*)omL1l)F%$\"5W?<<<&Gl!R(*F%" }} {PARA 11 "" 1 "" {XPPMATH 20 "$\"5l1l*y![)4ZT)!#?" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 9 "restart:\n" }{MPLTEXT 1 0 7 "d1:=5:\n" } {MPLTEXT 1 0 8 "d2:=10:\n" }{MPLTEXT 1 0 12 "Digits:=50:\n" }{MPLTEXT 1 0 23 "with(PolynomialTools):\n" }{MPLTEXT 1 0 18 "with(Statistics): \n" }{MPLTEXT 1 0 17 "lowB:=-infinity:\n" }{MPLTEXT 1 0 17 "highB:=inf inity:\n" }{MPLTEXT 1 0 64 "w:=PDF(RandomVariable(Normal(0,1)),x) assu ming x>lowB, xfactor(simplify(convert(_x,GAMMA), symbolic)),[coeff(rhs(S),xQn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/co eff(lhs(S),Qn),coeff(rhs(S),Qn_2)/coeff(lhs(S),Qn)]);\n" }{MPLTEXT 1 0 81 "C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/norm F*Vector([1])));\n" }{MPLTEXT 1 0 83 "C1:=map(_x->simplify(convert(_x, GAMMA),symbolic),subs(n=1,1/normF*Vector([0,1])));\n" }{MPLTEXT 1 0 11 "U:=1:V:=x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 22 "for i \+ from 2 to d1 do\n" }{MPLTEXT 1 0 75 " W:=map(factor,collect(subs(n=i, xPn_1=x*V,Pn_1=V,Pn_2=U,solve(R,Pn)),x)):\n" }{MPLTEXT 1 0 10 " L:=L, W:\n" }{MPLTEXT 1 0 124 " print(map(_x->factor(simplify(_x,symbolic)) ,W),\"->\",map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,W/no rmF),x)));\n" }{MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d1,d1):\n" } {MPLTEXT 1 0 22 "for i from 1 to d1 do\n" }{MPLTEXT 1 0 24 " for j fr om 1 to d1 do\n" }{MPLTEXT 1 0 44 " M[i,j]:=int(L[i]*L[j]*w,x=lowB. .highB):\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" } {MPLTEXT 1 0 10 "print(M);\n" }{MPLTEXT 1 0 10 "U:=C0[1]:\n" }{MPLTEXT 1 0 18 "V:=C1[1]+C1[2]*x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 10 "evalf(U);\n" }{MPLTEXT 1 0 10 "evalf(V);\n" }{MPLTEXT 1 0 22 "fo r i from 2 to d2 do\n" }{MPLTEXT 1 0 75 " W:=map(factor,collect(subs( n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x)):\n" }{MPLTEXT 1 0 10 " L :=L,W:\n" }{MPLTEXT 1 0 39 "# print(evalf(CoefficientList(W,x)));\n" }{MPLTEXT 1 0 19 " print(evalf(W));\n" }{MPLTEXT 1 0 8 " U:=V:\n" } {MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M :=Matrix(d2,d2):\n" }{MPLTEXT 1 0 22 "for i from 1 to d2 do\n" } {MPLTEXT 1 0 24 " for j from 1 to d2 do\n" }{MPLTEXT 1 0 44 " M[i, j]:=int(L[i]*L[j]*w,x=lowB..highB):\n" }{MPLTEXT 1 0 6 " od:\n" } {MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 10 "print(M);\n" }{MPLTEXT 1 0 11 "fsolve(W);\n" }{MPLTEXT 1 0 36 "evalf(int(cos(x)*w,x=lowB..highB)) ;\n" }{MPLTEXT 1 0 9 "d3:=256:\n" }{MPLTEXT 1 0 33 "JM:=Matrix(d3,d3,s hape=band[1]):\n" }{MPLTEXT 1 0 22 "for i from 1 to d3 do\n" }{MPLTEXT 1 0 45 "JM[i,i]:=subs(n=i,-recCoeff[2]/recCoeff[1]);\n" }{MPLTEXT 1 0 32 "od:\nold:=subs(n=1,recCoeff[1]):\n" }{MPLTEXT 1 0 82 "for i from 1 to d3-1 do\nc0:=subs(n=i+1,recCoeff[1]):\nc2:=subs(n=i+1,recCoeff[3 ]):\n" }{MPLTEXT 1 0 383 "JM[i,i+1]:=sqrt(-c2/(c0*old)):\nJM[i+1,i]:=J M[i,i+1];\nold:=c0:\nod:\nwith(LinearAlgebra):\ne,v:=evalf(Eigenvector s(JM)):\nres:=Matrix(2,d3):\nfor i from 1 to d3 do\n n:=norm(v[1..d3, i],2);\n res[1,i]:=e[i];\n res[2,i]:=v[1,i]*v[1,i]/n^2;\nod:\nprint( res);\nfd:=fopen(\"HermiteNodesWeights.csv\",WRITE,TEXT):\nfor i from \+ 1 to d3 do\nfprintf(fd, \"%.25g; %.25g\\n\",res[1,i],res[2,i]);\nod:\n fclose(fd):" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(\"\"##\"\"\"F$I#PiG%* protectedG#!\"\"F$-I$expG6$F(I(_syslibG6\"6#,$*$I\"xGF/F$F)F&F%" }} {PARA 11 "" 1 "" {XPPMATH 20 "/I#PnG6\",&I&xPn_1GF$\"\"\"*&,&I\"nGF$F' !\"\"F'F'I%Pn_2GF$F'F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "*$-I&GAMMAG6$% *protectedGI(_syslibG6\"6#,&I\"nGF(\"\"\"F,F,#F,\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "/*&-I&GAMMAG6$%*protectedGI(_syslibG6\"6#,&I\"nGF)\" \"\"F-F-#F-\"\"#I#QnGF)F-,&*&-F%6#F,F.I&xQn_1GF)F-F-*(,&F,F-!\"\"F-F-- F%6#F7F.I%Qn_2GF)F-F8" }}{PARA 11 "" 1 "" {XPPMATH 20 "7%*$I\"nG6\"#! \"\"\"\"#\"\"!,$*&F$F&,&F$\"\"\"F'F-#F-F(F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_syslibG6\"6#I'columnGF(6#/I$% idGF(\")s#R1\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protect edGI(_syslibG6\"6#I'columnGF(6#/I$%idGF(\")7,k5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,&*$I\"xG6\"\"\"#\"\"\"!\"\"F(Q#->F&,&*&F'#F(F'F%F'F-*$ F'F-#F)F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,&*$I\"xG6\"\"\"$\"\"\"F% !\"$Q#->F&,&*&\"\"'#F(\"\"#F%F'#F(F-*&F-F.F%F(#!\"\"F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,(\"\"$\"\"\"*$I\"xG6\"\"\"%F%*$F'\"\"#!\"'Q#->F(, (*&\"\"'#F%F+F'F)#F%\"#7*&F0F1F'F+#!\"\"F+*$F0F1#F%F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%,(*$I\"xG6\"\"\"&\"\"\"*$F%\"\"$!#5F%\"#:Q#->F&,(*& \"#I#F(\"\"#F%F'#F(\"#g*&F0F1F%F*#!\"\"\"\"'*&F0F1F%F(#F(\"\"%" }} {PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_syslibG6\"6#/ I$%idGF'\")#>W1\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"\"\"\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "I\"xG6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&*$I\"xG6\"\"\"#$\"SX)oPf$[GR!\\[5iV%3SCva'=\"y1rq!#]$!SX)oPf$[GR! \\[5iV%3SCva'=\"y1rqF)\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&*$I\"x G6\"\"\"$$\"S7wnC\"*4m)*=)4X7S@mj,jQY!H[#3%!#]F$$!S%G.utH)fpXHNP?k)4 \\!*e\"Rr[uC7!#\\" }}{PARA 11 "" 1 "" {XPPMATH 20 ",(*$I\"xG6\"\"\"%$ \"S1)QBc\\I$\\4\\Di+2J=3:$>BXT7/#!#]*$F$\"\"#$!S$G.utH)fpXHNP?k)4\\!*e \"Rr[uC7!#\\$\"S;k,(o[\"*z%GZw'=5K\\X_%z&pNCP7'F)\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",(*$I\"xG6\"\"\"&$\"Sm'*\\#y!zecN+oYI;;wboFv\"H4(G \"*!#^*$F$\"\"$$!Sm'*\\#y!zecN+oYI;;wboFv\"H4(G\"*!#]F$$\"S]\\P<'=)[L0 ?+dWUUOG:Hw$R1$p8!#\\" }}{PARA 11 "" 1 "" {XPPMATH 20 ",**$I\"xG6\"\" \"'$\"SDN*fI5S#Rga)yW*G:S\\\\'*\\i*zns$!#^*$F$\"\"%$!S(G!**ea,')e!>G=< MH-TUZ\\P%*p,f&!#]*$F$\"\"#$\"S'3(pPY!ewrX[:D!)oIsA%[7$)40x;!#\\F,\"\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 ",**$I\"xG6\"\"\"($\"SD_$[wzr([vlF7 sp#=Hw_ZXU!f39!#^*$F$\"\"&$!SsR:1v2U_33yXTm$G@!3)\\:*)R!eH!#]*$F$\"\"$ $\"S')p2`(Q5iUS!*G2K=k5S!\\xX*>!z9!#\\F$$!S')p2`(Q5iUS!*G2K=k5S!\\xX*> !z9F3" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,*$I\"xG6\"\"\")$\"S`#eC'*>'oV (oa?er+()*\\t*fb?>,)\\!#_*$F$\"\"'$!S6$)[*e8K#[7`(H/?O'*zDzcvPLWR\"!#] *$F$\"\"%$\"SLi6#>5uhV[JA.:F(\\V%fnJ.De/\"!#\\*$F$\"\"#$!SnCB%Q?[B(oHY k+VX*p))=Nj1];4#F3$\"Sn6eg40(3=Ud6;vN'[3KtG7e*[ogQ-!HLyl'=N(R+m \"!#_*$F$\"\"($!S0*\\\\&RMU#\\il%)*e3W)*>o>nYI9wf!#^*$F$\"\"&$\"S-up_6 Y/<1*)Q$>!HO)4mc0!*>]\\F'!#]*$F$\"\"$$!SnCB%Q?[B(oHYk+VX*p))=Nj1];4#!# \\F$$\"S]V<)G:hUlAZ$[D2fCl\"R^(\\vto:F8" }}{PARA 11 "" 1 "" {XPPMATH 20 ",.*$I\"xG6\"\"#5$\"S'z\")*fa'*zq7Q#Q2$)Q\" *=2L!#]*$F$\"\"%$!SmU*)>\"*ogwPX-Y)4N1>\"p`TpXf`;!#\\*$F$\"\"#$\"S)RT) zO.\"\\m!o.pZE&fyO0BT&=R![#F8$!S)z#oft1#)H8O2Q&H0>dt5Y#3Pyg\\F3\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_syslibG6\" 6#/I$%idGF'\"))[=1\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,$!S81!*eZ*[87R /m%\\;b,:7BLGGYf[!#\\$!SRIWJY\"HVuXdavOixAp#>b$[B=e$F%$!Sze2WIbk`3\\o$ =^i(3ea*Q;%eK%[#F%$!SNcyo1uc\"p;kTmk1D$=e6R%4*)fY\"F%$!Sz?yM8$*=A' \\\\5$[Li/`w\\:vqN\\[!#]$\"Sz?yM8$*=A'\\\\5$[Li/`w\\:vqN\\[F.$\"SNcyo1 uc\"p;kTmk1D$=e6R%4*)fY\"F%$\"Sze2WIbk`3\\o$=^i(3ea*Q;%eK%[#F%$\"SRIWJ Y\"HVuXdavOixAp#>b$[B=e$F%$\"S81!*eZ*[87R/m%\\;b,:7BLGGYf[F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"S>([N\"=>W`/=\"*\\`*z.OULErf1`1'!#]" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" }{MPLTEXT 1 0 7 " d1:=5:\n" }{MPLTEXT 1 0 8 "d2:=10:\n" }{MPLTEXT 1 0 12 "Digits:=20:\n" }{MPLTEXT 1 0 23 "with(PolynomialTools):\n" }{MPLTEXT 1 0 18 "with(St atistics):\n" }{MPLTEXT 1 0 9 "lowB:=0:\n" }{MPLTEXT 1 0 17 "highB:=in finity:\n" }{MPLTEXT 1 0 69 "w:=PDF(RandomVariable(Gamma(1,alpha+1)),x ) assuming x>lowB, xfactor(simplify(convert (_x,GAMMA),symbolic)),[coeff(rhs(S),xQn_1)/coeff(lhs(S),Qn),coeff(rhs( S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_2)/coeff(lhs(S),Qn)]);\n" } {MPLTEXT 1 0 81 "C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs (n=0,1/normF*Vector([1])));\n" }{MPLTEXT 1 0 90 "C1:=map(_x->simplify( convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vector([-1-alpha,1])));\n " }{MPLTEXT 1 0 16 "alpha_num:=2.5:\n" }{MPLTEXT 1 0 10 "U:=C0[1]:\n" }{MPLTEXT 1 0 18 "V:=C1[1]+C1[2]*x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" } {MPLTEXT 1 0 22 "for i from 2 to d1 do\n" }{MPLTEXT 1 0 102 " W:=map( _x->factor(simplify(_x,symbolic)),collect(subs(n=i,xPn_1=x*V,Pn_1=V,Pn _2=U,solve(R,Pn)),x)):\n" }{MPLTEXT 1 0 67 "print([factor(int(W*W*w,x= lowB..highB)),factor(expand(normF^2))]);\n" }{MPLTEXT 1 0 10 " L:=L,W :\n" }{MPLTEXT 1 0 176 " print(map(_x->factor(simplify(_x,symbolic)), W),\"->\",map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,W/nor mF),x)),collect(evalf(subs(n=i,alpha=alpha_num,W/normF)),x));\n" } {MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d1,d1):\n" }{MPLTEXT 1 0 22 "for i from 1 to d1 do\n" }{MPLTEXT 1 0 24 " for j from 1 to d1 do\n" } {MPLTEXT 1 0 44 " M[i,j]:=int(L[i]*L[j]*w,x=lowB..highB):\n" } {MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 10 "pri nt(M);\n" }{MPLTEXT 1 0 32 "U:=subs(alpha=alpha_num,C0[1]):\n" } {MPLTEXT 1 0 40 "V:=subs(alpha=alpha_num,C1[1]+C1[2]*x):\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 32 "evalf(subs(alpha=alpha_num,U));\n" }{MPLTEXT 1 0 32 "evalf(subs(alpha=alpha_num,V));\n" }{MPLTEXT 1 0 22 "for i from 2 to d2 do\n" }{MPLTEXT 1 0 118 " W:=map(_x->factor(si mplify(_x,symbolic)),collect(subs(alpha=alpha_num,n=i,xQn_1=x*V,Qn_1=V ,Qn_2=U,solve(S,Qn)),x)):\n" }{MPLTEXT 1 0 10 " L:=L,W:\n" }{MPLTEXT 1 0 34 "# print((CoefficientList(W,x)));\n" }{MPLTEXT 1 0 19 " print (evalf(W));\n" }{MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d2,d2):\n" } {MPLTEXT 1 0 22 "for i from 1 to d2 do\n" }{MPLTEXT 1 0 24 " for j fr om 1 to d2 do\n" }{MPLTEXT 1 0 76 " M[i,j]:=simplify(int(subs(alpha =alpha_num,L[i]*L[j]*w),x=lowB..highB)):\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 10 "print(M);\n" }{MPLTEXT 1 0 16 "alpha_num:=2.5:\n" }{MPLTEXT 1 0 33 "fsolve(subs(alpha=alpha_num,W ));\n" }{MPLTEXT 1 0 57 "evalf(int(subs(alpha=alpha_num,cos(x)*w),x=lo wB..highB));" }}{PARA 11 "" 1 "" {XPPMATH 20 "*()I\"xG6\"I&alphaGF%\" \"\"-I$expG6$%*protectedGI(_syslibGF%6#,$F$!\"\"F'-I&GAMMAGF*6#,&F&F'F 'F'F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "/I#PnG6\",(I&xPn_1GF$\"\"\"*&,( *&\"\"#F'I\"nGF$F'F'F'!\"\"I&alphaGF$F'F'I%Pn_1GF$F'F-*(,(F,F'F'F-F.F' F',&F,F'F'F-F'I%Pn_2GF$F'F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "*$)*(-I&G AMMAG6$%*protectedGI(_syslibG6\"6#,&I\"nGF*\"\"\"F.F.F.-F&6#,(I&alphaG F*F.F-F.F.F.F.-F&6#,&F2F.F.F.!\"\"#F.\"\"#F." }}{PARA 11 "" 1 "" {XPPMATH 20 "/*&)*(-I&GAMMAG6$%*protectedGI(_syslibG6\"6#,&I\"nGF+\"\" \"F/F/F/-F'6#,(I&alphaGF+F/F.F/F/F/F/-F'6#,&F3F/F/F/!\"\"#F/\"\"#F/I#Q nGF+F/,(*&)*(-F'6#F.F/-F'6#,&F3F/F.F/F/F4F7F8F/I&xQn_1GF+F/F/*(,(*&F9F /F.F/F/F/F7F3F/F/F=F/I%Qn_1GF+F/F7**,(F.F/F/F7F3F/F/,&F.F/F/F7F/)*(-F' 6#FKF/-F'6#FJF/F4F7F8F/I%Qn_2GF+F/F7" }}{PARA 11 "" 1 "" {XPPMATH 20 " 7%*&)I\"nG6\"#\"\"\"\"\"#!\"\"),&I&alphaGF&F(F%F(F'F*,$*(,(*&F)F(F%F(F (F(F*F-F(F(F$F*F+F*F*,$**F$F*),&F%F(F(F*F'F(),(F%F(F(F*F-F(F'F(F+F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_syslibG6 \"6#I'columnGF(6#/I$%idGF(\"0Wx$=7c.9" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_syslibG6\"6#I'columnGF(6#/I$%idGF(\"0%eQ= 7c.9" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$*&,.*&\"\"#\"\"\")I&alphaG6\"F &F'!\"\"*&F(F'),&F)F'F'F'#F'F&F'F'*(\"\"&F'F-F'F)F'F'*&\"\"%F'F)F'F+F& F+*&\"\"'F'F-F'F'F'F-F+*.-I&GAMMAG6$%*protectedGI(_syslibGF*6#I\"nGF*F 'F=F'-F86#,&F)F'F=F'F'F@F'-F86#F)F+F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&,.*&),&I&alphaG6\"\"\"\"F)F)#F)\"\"#!\"\")I\"xGF(F+F)F)**F+F),&F 'F)F+F)F)F.F)F%F,F,*&F%F)F'F)F)*&\"\"$F)F%F)F)F'F,F)F,Q#->F(,(*,F*F)F& F,)F+F*F))F0F*F,F-F)F)**F&F,F7F)F8F)F.F)F,*,F*F),*F1F)F2F)F'F,F)F,F)F7 F)F%F,F8F,F),(*&$\"5'4Q_4Q_4Q_*!#@F)F-F)F)*&$\"5(G9dG9dG9d)!#?F)F.F)F, $\"5!p(45()oPs47!#>F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$,0\"#q\"\"\"* $)I&alphaG6\"\"\"$F%F%*(\"\"#F%)F(F,F%),&F(F%F%F%#F%F,F%!\"\"*&\"#EF%F -F%F%*&\"#MF%F.F%F1*(\"#OF%F.F%F(F%F1*&\"#$)F%F(F%F%*.-I&GAMMAG6$%*pro tectedGI(_syslibGF)6#I\"nGF)F%FAF%-F<6#,&F(F%FAF%F%FDF%-F<6#F(F1F(F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&,2*&),&I&alphaG6\"\"\"\"F)F)#F)\"\"# !\"\")I\"xGF(\"\"$F)F)**F/F),&F'F)F/F)F))F.F+F)F%F,F,*(,,*&F/F))F'F+F) F,*&\"#;F)F'F)F,\"#>F,*&F%F)F'F)F)*$F%F)F)F)F.F)F%F,F,*(F/F)F%F)F'F)F, *&\"#6F)F%F)F,*&\"\"&F)F'F)F)F@F)*&,*F:F)*&F/F)F%F)F)F'F,F)F,F)F'F)F,Q #->F(,**.#F)\"\"'F)F&F,)FHF*F)),&F'F)F+F)F*F,)F1F*F,F-F)F)*.F*F)FLF)F& F,FIF)FJF,F2F)F,*0FGF)F4F)FIF)F.F)F&F,FJF,FLF,F,*.FGF),.F=F)*&FHF)F'F) F,F@F,*(FHF)F%F)F'F)F)*&F6F)F%F)F)*$F6F)F,F)FIF)F%F,FJF,FLF,F,,**&$\"5 xLmxF)F.F)F)$\"5S-eg()*e^]\\\"F[oF," }}{PARA 11 "" 1 "" {XPPMATH 20 "7$,4 \"%C7\"\"\"*&\"\"'F%)I&alphaG6\"\"\"%F%F%*&\"#[F%)F)\"\"$F%F%*(\"#7F%F .F%),&F)F%F%F%#F%\"\"#F%!\"\"*(\"#CF%)F)F5F%F2F%F6*&\"$q&F%F9F%F%*&\"$ ['F%F2F%F6*(\"$g'F%F2F%F)F%F6*&\"%3;F%F)F%F%*.-I&GAMMAG6$%*protectedGI (_syslibGF*6#I\"nGF*F%FIF%-FD6#,&F)F%FIF%F%FLF%-FD6#F)F6F)F6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&,6*&),&I&alphaG6\"\"\"\"F)F)#F)\"\"#!\"\")I \"xGF(\"\"%F)F)**F/F),&F'F)F/F)F))F.\"\"$F)F%F,F,*(,,*&\"\"'F))F'F+F)F ,*&\"#VF)F'F)F,\"#tF,*&F%F)F'F)F)*$F%F)F)F))F.F+F)F%F,F,**F+F),0*&\"#> F)F8F)F,*&\"#fF)F'F)F,\"#aF,*(\"\"(F)F%F)F'F)F)*&F7F)F%F)F)*&F+F))F'F3 F)F,*&F8F)F%F)F)F)F.F)F%F,F)*&\"#]F)F%F)F)*(F/F),*FF(,,*0#F)FSF)F& F,)F7F*F)),&F'F)F+F)F*F,),&F'F)F3F)F*F,)F1F*F,F-F)F)*0#F)F3F)F`oF)F&F, F[oF)F\\oF,F^oF,F2F)F,*2FjnF)F5F)F[oF)F>F)F&F,F\\oF,F^oF,F`oF,F,*2#F)F 7F)F@F)F[oF)F.F)F&F,F\\oF,F^oF,F`oF,F)*0FjnF),2FLF)*(\"#5F)F8F)F%F)F)* (\"#NF)F%F)F'F)F)*&FioF)F8F)F,*&F[pF)F'F)F,FQF,*&FJF)F%F)F)*$FJF)F,F)F [oF)F%F,F\\oF,F^oF,F`oF,F),,*&$\"5g%)Q(yucQ\")f%!#AF)F-F)F)*&$\"5+5sWa Fg^&>\"!#?F)F2F)F,*&$\"5!pON;AagGs*FhpF)F>F)F)*&$\"5<[[\"HO!Gl?F!#>F)F .F)F,$\"54cfhj'HO<#=F_qF)" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$,8\"&+9$ \"\"\"*(\"%W5F%)I&alphaG6\"\"\"$F%),&F)F%F%F%#F%\"\"#F%!\"\"*(\"$C&F%) F)F/F%F,F%F0*(\"#WF%)F)\"\"%F%F,F%F0*&\"#AF%)F)\"\"&F%F%*&\"&+q\"F%F,F %F0*&\"$'oF%F6F%F%*&\"%')HF%F(F%F%*&\"&1t\"F%F3F%F%*(\"&Cl\"F%F,F%F)F% F0*&\"&/N%F%F)F%F%*.-I&GAMMAG6$%*protectedGI(_syslibGF*6#I\"nGF*F%FOF% -FJ6#,&F)F%FOF%F%FRF%-FJ6#F)F0F)F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6& ,:*&),&I&alphaG6\"\"\"\"F)F)#F)\"\"#!\"\")I\"xGF(\"\"&F)F)**F/F),&F'F) F/F)F))F.\"\"%F)F%F,F,*(,,*&\"#\"*F)F'F)F,\"$,#F,*&\"#5F))F'F+F)F,*&F% F)F'F)F)*$F%F)F)F))F.\"\"$F)F%F,F,*(,0*&\"$%\\F)F'F)F,\"$@'F,*&\"$B\"F )F;F)F,*(\"#CF)F%F)F'F)F)*&\"#@F)F%F)F)*&F:F))F'F?F)F,*(F?F)F;F)F%F)F) F))F.F+F)F%F,F)*(,4\"$=(F,*&\"$B*F)F'F)F,*&\"$$RF)F;F)F,*&\"#tF)FLF)F, *&F/F))F'F3F)F,*(F?F)FLF)F%F)F)*&\"$=\"F)F%F)F)*(\"#QF)F;F)F%F)F)*(\"$ `\"F)F%F)F'F)F)F)F.F)F%F,F,*(F/F),.*&\"#6F)F%F)F)*&\"\"'F)F'F)F,F/F,*( F`oF)F%F)F'F)F)*&F;F)F%F)F)*$F;F)F,F)F'F)F,*&\"$a\"F)F'F)F)*&,2*&\"#]F )F%F)F)*(F:F)F;F)F%F)F)*(\"#NF)F%F)F'F)F)F9F,*&F\\pF)F'F)F,\"#EF,*&FLF )F%F)F)*$FLF)F,F)F'F)F,FeoF)*(\"#gF)F%F)F'F)F,*&\"$u#F)F%F)F,*(\"#?F), *FF(,.*2#F)FbpF)F&F,)\"#IF*F)),&F'F )F+F)F*F,),&F'F)F?F)F*F,),&F'F)F3F)F*F,)F1F*F,F-F)F)*2#F)\"#7F)FeqF)F& F,F]qF)F_qF,FaqF,FcqF,F2F)F,*4F\\qF)F5F)F]qF)F>F)F&F,F_qF,FaqF,FcqF,Fe qF,F,*4F\\qF)FAF)F]qF)FNF)F&F,F_qF,FaqF,FcqF,FeqF,F)*4F\\qF)FPF)F]qF)F .F)F&F,F_qF,FaqF,FcqF,FeqF,F,*2F\\qF),6FeoF,*(\"$D#F)F%F)F'F)F)*&\"#&) F)F;F)F,*&F_rF)F'F)F,*(FarF)F;F)F%F)F)*(\"#:F)FLF)F%F)F)*&FerF)FLF)F,* &FYF)F%F)F)*$FYF)F,FcpF)F)F]qF)F%F,F_qF,FaqF,FcqF,FeqF,F,,.*&$\"5Mo/m& z$)G(3v!#BF)F-F)F)*&$\"5kvEPB9Lx:G!#@F)F2F)F,*&$\"5U#H]t1X>wj$!#?F)F>F )F)*&$\"5FLS1'[A`![>!#>F)FNF)F,*&$\"5=t\"4Gu&*fm,%FisF)F.F)F)$\"5\") \\A-aFhBw@FisF," }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protect edGI(_syslibG6\"6#/I$%idGF'\"0/z&o$fNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "$\"\"\"\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&$\"5GpqpQ$pG3(=!#> !\"\"*&$\"5Pp([[#Q[AX`!#?\"\"\"I\"xG6\"F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 ",(*&$\"5z*e\\\\FhTF'F)F'!\"\"$\"5!RgX!3SIC1GF/F'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",**&$\"5\"*eE^1LYM'Q%!#@\"\"\")I\"xG6\"\"\"$F'F'*&$\"5?() eubW'ouB(!#?F')F)\"\"#F'!\"\"*&$\"5C\\c30!*3'oD$!#>F'F)F'F'$\"5u!fm#RQ 5n*z$F6F2" }}{PARA 11 "" 1 "" {XPPMATH 20 ",,*&$\"5u;'[3#o&HBg)!#A\"\" \")I\"xG6\"\"\"%F'F'*&$\"5OS1Ut(o0mB#!#?F')F)\"\"$F'!\"\"*&$\"5HG?2Q#p *>X=!#>F')F)\"\"#F'F'*&$\"5'[3;Ur2*fNbF6F'F)F'F2$\"5?u!R*\\#>\\O%[F6F' " }}{PARA 11 "" 1 "" {XPPMATH 20 ",.*&$\"5J:U64OXv/9!#A\"\"\")I\"xG6\" \"\"&F'F'*&$\"5T2$yT.^HyE&!#@F')F)\"\"%F'!\"\"*&$\"5k*zJWMOy\"[o!#?F') F)\"\"$F'F'*&$\"5z*[P%*)*4)\\mP!#>F')F)\"\"#F'F2*&$\"5,_VBwC2iu%)F!#B\"\"\")I\"xG6\"\"\"'F'F'*&$\"5ob!e;zR&>.5!#@F')F)\"\"&F'!\" \"*&$\"5Sa)e$4r8*4)=!#?F')F)\"\"%F'F'*&$\"5[SVWh@D>I;!#>F')F)\"\"$F'F2 *&$\"5[/z&f;:WXs'FH[aS!4%!#@F')F)\"\"&F'F'*&$\"59ox\\O5o+8^!#?F')F)\"\"%F'F2*&$\"5H\\Ns tEWXBL!#>F')F)\"\"$F'F'*&$\"5Er(GB3'*Rn4\"!#=F')F)\"\"#F'F2*&$\"5*o:$ \\BT*4^k\"FHF'F)F'F'$\"5Q%yluhq\\bA)FBF2" }}{PARA 11 "" 1 "" {XPPMATH 20 ",4*&$\"5,Q0jrhF(=j#!#D\"\"\")I\"xG6\"\"\")F'F'*&$\"5$>lpT)>Jx5A!#B F')F)\"\"(F'!\"\"*&$\"5k#4ktMi?3N(!#AF')F)\"\"'F'F'*&$\"5v&*=0*f]R'\\7 !#?F')F)\"\"&F'F2*&$\"5F_6h'o.P:<\"!#>F')F)\"\"%F'F'*&$\"5z\"*zPq\"f#* >4'FBF')F)\"\"$F'F2*&$\"5tZR&=F'zHv;!#=F')F)\"\"#F'F'*&$\"5A/l_\\BX&R: #FMF'F)F'F2$\"5)fXy\"HS5bB%*FBF'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",6*& $\"5^_B;#*)y*)pe#!#E\"\"\")I\"xG6\"\"\"*F'F'*&$\"5&[.)Q`JW`xE!#CF')F) \"\")F'!\"\"*&$\"5juHUChWcC6!#AF')F)\"\"(F'F'*&$\"5WgU!edb%y#\\#!#@F') F)\"\"'F'F2*&$\"52K/:f3.IyJ!#?F')F)\"\"&F'F'*&$\"50CGOWJ_s$Q#!#>F')F) \"\"%F'F2*&$\"5U!*QAH+w%H.\"!#=F')F)\"\"$F'F'*&$\"5$))fqJy00[V#FNF')F) \"\"#F'F2*&$\"5lBp11!pb\"RFFNF'F)F'F'$\"5+Pr8!G@F_1\"FNF2" }}{PARA 11 "" 1 "" {XPPMATH 20 ",8*&$\"5u-L105S(QJ#!#F\"\"\")I\"xG6\"\"#5F'F'*&$ \"5UG\"HjD^UB*G!#DF')F)\"\"*F'!\"\"*&$\"5'RK]^-D(y'\\\"!#BF')F)\"\")F' F'*&$\"5124Uq+V+\">%!#AF')F)\"\"(F'F2*&$\"51eZ2#*\\Yanp!#@F')F)\"\"'F' F'*&$\"5A`i\">Ha&*o5(!#?F')F)\"\"&F'F2*&$\"5DewWK9(4=W%!#>F')F)\"\"%F' F'*&$\"5?I\"4\\n.:)\\;!#=F')F)\"\"$F'F2*&$\"5+\"3+&H8Nu-MFTF')F)\"\"#F 'F'*&$\"5)43+&H8Nu-MFTF'F)F'F2$\"5QG]KlH-'4>\"FTF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_syslibG6\"6#/I$%idGF'\"0))G6 \\fNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,$\"5_J`I)*)pgZ6(!#?$\"5Nq'[ Hh!yZ&y\"!#>$\"5E&)4Ag<7[9LF($\"5`j$eqCD\\IL&F($\"5r(*R9`-Mw!*yF($\"5) )[G&GwRnh5\"!#=$\"5#H:&)RCB-h\\\"F1$\"5%H:Lxy!=Ay>F1$\"5pb6O(fWm(*e#F1 $\"5bMuu@Tt@EMF1" }}{PARA 11 "" 1 "" {XPPMATH 20 ",&$\"5^\"\\_pOG5nu#! #?!\"\"*&$\"\"!F)\"\"\"^#F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" }{MPLTEXT 1 0 7 "d1:=5:\n" }{MPLTEXT 1 0 8 "d2:=10: \n" }{MPLTEXT 1 0 12 "Digits:=20:\n" }{MPLTEXT 1 0 23 "with(Polynomial Tools):\n" }{MPLTEXT 1 0 18 "with(Statistics):\n" }{MPLTEXT 1 0 10 "lo wB:=-1:\n" }{MPLTEXT 1 0 10 "highB:=1:\n" }{MPLTEXT 1 0 90 "w:=simplif y(PDF(-1+2*RandomVariable(Beta(b+1,a+1)),x),symbolic) assuming x>lowB, xfac tor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn_1)/coeff(l hs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_2)/coeff (lhs(S),Qn)]);\n" }{MPLTEXT 1 0 81 "C0:=map(_x->simplify(convert(_x,GA MMA),symbolic),subs(n=0,1/normF*Vector([1])));\n" }{MPLTEXT 1 0 96 "C1 :=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vector ([-(a-b)/(2+a+b),1])));\n" }{MPLTEXT 1 0 23 "a_num:=2.5:b_num:=3.5:\n" }{MPLTEXT 1 0 10 "U:=C0[1]:\n" }{MPLTEXT 1 0 18 "V:=C1[1]+C1[2]*x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 22 "for i from 2 to d1 do\n " }{MPLTEXT 1 0 102 " W:=map(_x->factor(simplify(_x,symbolic)),collec t(subs(n=i,xPn_1=x*V,Pn_1=V,Pn_2=U,solve(R,Pn)),x)):\n" }{MPLTEXT 1 0 10 " L:=L,W:\n" }{MPLTEXT 1 0 211 " #print(subs(u=1-x,map(_x->factor( simplify(_x,symbolic)),collect(subs(x=1-u,W),u))),\"->\",map(_x->facto r(simplify(_x,symbolic)),collect(subs(n=i,W/normF),x)),collect(evalf(s ubs(n=i,a=a_num,b=b_num,W/normF)),x));\n" }{MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 " M:=Matrix(d1,d1):\n" }{MPLTEXT 1 0 22 "for i from 1 to d1 do\n" } {MPLTEXT 1 0 24 " for j from 1 to d1 do\n" }{MPLTEXT 1 0 83 " M[i, j]:=evalf(simplify(int(subs(a=a_num,b=b_num,L[i]*L[j]*w),x=lowB..highB ))):\n" }{MPLTEXT 1 0 6 " od:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 9 "print(M);" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$**#\"\"\"\"\"#F%),&* &F$F%I\"xG6\"F%F%F$F%I\"aGF+F%),&F$F%F)!\"\"I\"bGF+F%-I%BetaG6$%*prote ctedGI(_syslibGF+6$,&F,F%F%F%,&F0F%F%F%F/F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "/I#PnG6\",(I&xPn_1GF$\"\"\"*,,&I\"aGF$F'I\"bGF$!\"\"F',&F *F'F+F'F',**&\"\"#F'I\"nGF$F'F'F0F,F*F'F+F'F,,(F/F'F*F'F+F'F,I%Pn_1GF$ F'F,*4\"\"%F',&F1F'F'F,F',(F1F'F*F'F'F,F',(F1F'F+F'F'F,F',*F1F'F*F'F+F 'F'F,F')F.F0F,,*F/F'F*F'F+F'F'F,F,,*F/F'F*F'F+F'\"\"$F,F,I%Pn_2GF$F'F, " }}{PARA 11 "" 1 "" {XPPMATH 20 "*$)*6)\"\"%I\"nG6\"\"\"\"-I&GAMMAG6$ %*protectedGI(_syslibGF(6#,(I\"aGF(F)\"\"#F)I\"bGF(F)F))-F+6#,**&F2F)F 'F)F)F1F)F3F)F)F)F2!\"\"F7F9-F+6#,*F'F)F)F)F1F)F3F)F)-F+6#,(F'F)F)F)F3 F)F)-F+6#,(F'F)F)F)F1F)F)-F+6#,&F'F)F)F)F)-F+6#,&F3F)F)F)F9-F+6#,&F1F) F)F)F9#F)F2F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "/*&)*6)\"\"%I\"nG6\"\" \"\"-I&GAMMAG6$%*protectedGI(_syslibGF)6#,(I\"aGF)F*\"\"#F*I\"bGF)F*F* )-F,6#,**&F3F*F(F*F*F2F*F4F*F*F*F3!\"\"F8F:-F,6#,*F(F*F*F*F2F*F4F*F*-F ,6#,(F(F*F*F*F4F*F*-F,6#,(F(F*F*F*F2F*F*-F,6#,&F(F*F*F*F*-F,6#,&F4F*F* F*F:-F,6#,&F2F*F*F*F:#F*F3F*I#QnGF)F*,(*&)*6)F',&F(F*F*F:F*F+F*)-F,6#, *F9F*F2F*F4F*F*F:F3F:FXF:-F,6#,(F(F*F2F*F4F*F*-F,6#,&F(F*F4F*F*-F,6#,& F(F*F2F*F*-F,6#F(F*FGF:FJF:FMF*I&xQn_1GF)F*F**.,&F2F*F4F:F*,&F2F*F4F*F *,*F9F*F3F:F2F*F4F*F:,(F9F*F2F*F4F*F:FQF*I%Qn_1GF)F*F:*6F'F*FTF*,(F(F* F2F*F*F:F*,(F(F*F4F*F*F:F*,*F(F*F2F*F4F*F*F:F*)FboF3F:FXF:,*F9F*F2F*F4 F*\"\"$F:F:)*6)F',&F(F*F3F:F*F+F*)-F,6#FjoF3F:FjoF:-F,6#FhoF*-F,6#FgoF *-F,6#FfoF*-F,6#FTF*FGF:FJF:FMF*I%Qn_2GF)F*F:" }}{PARA 11 "" 1 "" {XPPMATH 20 "7%,$*2#\"\"\"\"\"#F&),**&F'F&I\"nG6\"F&F&I\"aGF,F&I\"bGF, F&F&!\"\"F%F&,(F*F&F-F&F.F&F&),*F*F&F-F&F.F&F&F&F%F&),(F+F&F-F&F.F&F%F /),&F+F&F.F&F%F/),&F+F&F-F&F%F/)F+F%F/F&,$*6F%F&,&F-F&F.F/F&,&F-F&F.F& F&F1F&F(F&F3F/F5F/F7F/F9F/,*F*F&F'F/F-F&F.F&F/F/,$*:),(F+F&F.F&F&F/F%F &),*F+F&F-F&F.F&F&F/F%F&F0F&F1F&F9F/),*F*F&F-F&F.F&\"\"$F/F%F/),&F+F&F &F/F%F&F3F/F5F/),(F+F&F-F&F&F/F%F&F7F/F>F/F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*protectedGI(_syslibG6\"6#I'columnGF(6#/I$% idGF(\"0!G8m0c.9" }}{PARA 11 "" 1 "" {XPPMATH 20 "-&I'VectorG6$%*prote ctedGI(_syslibG6\"6#I'columnGF(6#/I$%idGF(\"0SUhcgNS\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I'MatrixG6$%*protectedGI(_syslibG6\"6#/I$%idGF'\")% )*>$Q" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1 "\n" }{MPLTEXT 1 0 10 "U:=C0[1]:\n" }{MPLTEXT 1 0 18 "V:=C1[1]+C1[2]*x:\n" }{MPLTEXT 1 0 8 "L:=U,V:\n" }{MPLTEXT 1 0 32 "evalf(subs(a=a_num,b=b_num,U));\n" } {MPLTEXT 1 0 32 "evalf(subs(a=a_num,b=b_num,V));\n" }{MPLTEXT 1 0 22 " for i from 2 to d2 do\n" }{MPLTEXT 1 0 118 " W:=map(_x->factor(simpli fy(_x,symbolic)),collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,a=a_num,b=b_ num,solve(S,Qn)),x)):\n" }{MPLTEXT 1 0 10 " L:=L,W:\n" }{MPLTEXT 1 0 34 "# print((CoefficientList(W,x)));\n" }{MPLTEXT 1 0 19 " print(eva lf(W));\n" }{MPLTEXT 1 0 8 " U:=V:\n" }{MPLTEXT 1 0 8 " V:=W:\n" } {MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 18 "M:=Matrix(d2,d2):\n" } {MPLTEXT 1 0 22 "for i from 1 to d2 do\n" }{MPLTEXT 1 0 24 " for j fr om 1 to d2 do\n" }{MPLTEXT 1 0 83 " M[i,j]:=evalf(simplify(int(subs (a=a_num,b=b_num,L[i]*L[j]*w),x=lowB..highB))):\n" }{MPLTEXT 1 0 6 " \+ od:\n" }{MPLTEXT 1 0 4 "od:\n" }{MPLTEXT 1 0 10 "print(M);\n" } {MPLTEXT 1 0 11 "fsolve(W);\n" }{MPLTEXT 1 0 58 "evalf(int(subs(a=a_nu m, b=b_num,cos(x)*w),x=lowB..highB));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"\"\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&$\"5@FsA4IZkzP!#? \"\"\"*&$\"5w\"y\"Q2%y:P-$!#>\"\"\"%\"xG\"\"\"\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&$\"5WaWX=g%*Gfv!#>\"\"\")%\"xG\"\"#\"\"\"\"\"\"* &$\"5*3*3p.#*y&=^\"!#>\"\"\"%\"xG\"\"\"\"\"\"$\"5SaWX=g%*Gfv!#?!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,**&$\"5*\\!Rz)=7Vdu\"!#=\"\"\")%\"x G\"\"$\"\"\"\"\"\"*&$\"5`iZ)>Z!yNkV!#>\"\"\")%\"xG\"\"#\"\"\"\"\"\"*&$ \"5`iZ)>Z!yNkV!#>\"\"\"%\"xG\"\"\"!\"\"$\"5_iZ)>Z!yNkV!#?!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,,*&$\"5*=O=\"\"\"%\"x G\"\"\"!\"\"$\"5l\"\"\"%\"xG\"\"\"\"\"\"$\"5tLaB*>0@Cl%!#?\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,0*&$\"50/f=0cTdo\"\"\"%\"xG\"\"\"\"\"\"$\"5H))*o(f\\p^zl!#?!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,2*&$\"5_+b[\"3%*Qzq$!#<\"\"\")%\"xG\" \"(\"\"\"\"\"\"*&$\"5?D*>&GH'yxH\"!#<\"\"\")%\"xG\"\"'\"\"\"\"\"\"*&$ \"5cv(fby)eL$*Q!#<\"\"\")%\"xG\"\"&\"\"\"!\"\"*&$\"5mP**42\">#[\"3\"!# <\"\"\")%\"xG\"\"%\"\"\"!\"\"*&$\"5nP**42\">#[\"3\"!#<\"\"\")%\"xG\"\" $\"\"\"\"\"\"*&$\"55$Q7e#3\"zx-#!#=\"\"\")%\"xG\"\"#\"\"\"\"\"\"*&$\"5 P5YP>%pj#fn!#>\"\"\"%\"xG\"\"\"!\"\"$\"5&)yvE&e\\X!G[!#?!\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,4*&$\"5yrL^VK033x!#<\"\"\")%\"xG\"\") \"\"\"\"\"\"*&$\"5grd4Vv$QH!G!#<\"\"\")%\"xG\"\"(\"\"\"\"\"\"*&$\"5\\+ _$3SJ%G5)*!#<\"\"\")%\"xG\"\"'\"\"\"!\"\"*&$\"5:g0D?%H&3VH!#<\"\"\")% \"xG\"\"&\"\"\"!\"\"*&$\"5B+KJv\"\"\"%\"xG\"\"\"!\" \"$\"5$pT&eE]Q!pQ'!#?\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,6*&$\" 5V\\m^WoU<#f\"!#;\"\"\")%\"xG\"\"*\"\"\"\"\"\"*&$\"5WNu$pm]`1(f!#<\"\" \")%\"xG\"\")\"\"\"\"\"\"*&$\"5:u\\xm-9E)Q#!#;\"\"\")%\"xG\"\"(\"\"\"! \"\"*&$\"5l3SG%Rb8!*f(!#<\"\"\")%\"xG\"\"'\"\"\"!\"\"*&$\"5J,E94L?&)R6 !#;\"\"\")%\"xG\"\"&\"\"\"\"\"\"*&$\"5D.l&GF3I'\\G!#<\"\"\")%\"xG\"\"% \"\"\"\"\"\"*&$\"5=-5d[)Q`(**=!#<\"\"\")%\"xG\"\"$\"\"\"!\"\"*&$\"5%pL =wukbi;$!#=\"\"\")%\"xG\"\"#\"\"\"!\"\"*&$\"5GUe/p=\"Rc\"z!#>\"\"\"%\" xG\"\"\"\"\"\"$\"5W^O:=\\WFZ\\!#?\"\"\"" }}{PARA 0 "" 1 "" {XPPMATH 20 "6#,8*&$\"5oT.%H\"GJosK!#;\"\"\")%\"xG\"#5\"\"\"\"\"\"*&$\"5]aq(\\+GC (e7!#;\"\"\")%\"xG\"\"*\"\"\"\"\"\"*&$\"5DXnRAg#fUm&!#;\"\"\")%\"xG\" \")\"\"\"!\"\"*&$\"5v\"elu+U'3))=!#;\"\"\")%\"xG\"\"(\"\"\"!\"\"*&$\"5 4oZ18N7:/L!#;\"\"\")%\"xG\"\"'\"\"\"\"\"\"*&$\"5k&=Jc.b@8,*!#<\"\"\")% \"xG\"\"&\"\"\"\"\"\"*&$\"5waEpHDYV4v!#<\"\"\")%\"xG\"\"%\"\"\"!\"\"*& $\"5%4`Qf]#p)=]\"!#<\"\"\")%\"xG\"\"$\"\"\"!\"\"*&$\"5/\"\\ps*of2Kc!#= \"\"\")%\"xG\"\"#\"\"\"\"\"\"*&$\"5*)yQuu(=iyD'!#>\"\"\"%\"xG\"\"\"\" \"\"$\"5')yQuu(=iyD'!#?!\"\"" }}{PARA 0 "" 1 "" {XPPMATH 20 "-I%mrowG6 #/I+modulenameG6\"I,TypesettingGI(_syslibGF'6#-I(mactionGF$6%-I(mfence dGF$6(-F#6#-I'mtableGF$6>-I$mtrGF$6/-I$mtdGF$6(-I#mnGF$6$Q#1.F'/%,math variantGQ'normalF'/%)rowalignGQ!F'/%,columnalignGFE/%+groupalignGFE/%( rowspanGQ\"1F'/%+columnspanGFL-F:6(-F#6%-F=6$Q61.0000000000000000000F' F@-I#moGF$6-Q1⁢F'F@/%&fenceGQ&falseF'/%*separatorGFfn/% )stretchyGFfn/%*symmetricGFfn/%(largeopGFfn/%.movablelimitsGFfn/%'acce ntGFfn/%'lspaceGQ&0.0emF'/%'rspaceGFeo-I%msupGF$6%-F=6$Q#10F'F@-F=6$Q$ -20F'F@/%1superscriptshiftGQ\"0F'FCFFFHFJFM-F:6(-F#6%-F=6$Q63.75000000 00000000000F'F@FVFhoFCFFFHFJFM-F:6(-F#6%-F=6$Q69.2500000000000000000F' F@FVFhoFCFFFHFJFM-F:6(-F#6$-FW6-Q*&uminus0;F'F@FZFgnFinF[oF]oF_oFao/Fd oQ,0.2222222emF'/FgoFjq-F#6%-F=6$Q63.0000000000000000000F'F@FV-Fio6%F[ p-F=6$Q$-19F'F@FapFCFFFHFJFM-F:6(-F#6%-F=6$Q61.1750000000000000000F'F@ FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q62.0062500000000000000F'F@FVFarFCFFFHFJ FM-F:6(-F#6$Ffq-F#6%-F=6$Q64.5000000000000000000F'F@FVFarFCFFFHFJFM-F: 6(-F#6%-F=6$Q66.9875000000000000000F'F@FVFarFCFFFHFJFM-F:6(-F#6$Ffq-F# 6%-F=6$Q61.8929687500000000000F'F@FVFarFCFFFHFJFMFCFFFH-F76/FO-F:6(-F= 6$Q70.99999999999999999992F'F@FCFFFHFJFM-F:6(-F#6%-F=6$Q66.61437827766 14764764F'F@FV-Fio6%F[p-F=6$Q$-21F'F@FapFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F =6$Q62.1827448316282872371F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q61.984313 4832984429428F'F@FVFarFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q62.97647022494 76644142F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q69.0947701317845301547F'F@F VFhoFCFFFHFJFM-F:6(-F#6%-F=6$Q61.0205040771249135134F'F@FV-Fio6%F[p-F= 6$Q$-18F'F@FapFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q63.2008866307968930803 F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q61.5279509106142549118F'F@FVFgxFCFF FHFJFMFCFFFH-F76/FdpFduF9-F:6(-F#6%-F=6$Q67.2758161054276241242F'F@FVF hoFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q63.3071891388307382383F'F@FVFarFCF FFHFJFM-F:6(-F#6%-F=6$Q61.7953312467938293293F'F@FVFarFCFFFHFJFM-F:6(- F#6$FfqF[wFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q61.4764237226922938564F'F@ FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q61.3701212146584486987F'F@FVFgxFCFFFHFJ FM-F:6(-F#6%-F=6$Q68.7994853872460713840F'F@FVFhoFCFFFHFJFMFCFFFH-F76/ F[qF`vF^z-F:6(-F=6$Q70.99999999999999999974F'F@FCFFFHFJFM-F:6(-F#6%-F= 6$Q68.1831708838497142869F'F@FVFhoFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q63 .7642586065708685755F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q62.884567736557 0242893F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q63.3755579895880071445F'F@FV FarFCFFFHFJFM-F:6(-F#6%-F=6$Q64.6985039491437109609F'F@FVFarFCFFFHFJFM -F:6(-F#6%-F=6$Q62.1259196025334570262F'F@FVFgxFCFFFHFJFMFCFFFH-F76/Fb qFivFezFg]l-F:6(-F=6$Q70.99999999999999999961F'F@FCFFFHFJFM-F:6(-F#6%- F=6$Q65.1754916950676566140F'F@FVFhoFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q 64.4476881754487674180F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q63.3425050530 645282459F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q62.9112140784755568489F'F@ FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q69.0301547804565884002F'F@FVFarFCFFFHFJ FMFCFFFH-F76/FfrF`wF^[lF^^lFj`l-F:6(-F=6$Q70.99999999999999999962F'F@F CFFFHFJFM-F:6(-F#6%-F=6$Q68.3961661172674519498F'F@FVFhoFCFFFHFJFM-F:6 (-F#6$Ffq-F#6%-F=6$Q62.3989046049335577097F'F@FVFarFCFFFHFJFM-F:6(-F#6 %-F=6$Q65.9172980255027756745F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q65.157 6449006071490532F'F@FVFarFCFFFHFJFMFCFFFH-F76/F]sFiwFe[lFg^lFaalFfcl-F :6(-F=6$Q70.99999999999999999969F'F@FCFFFHFJFM-F:6(-F#6%-F=6$Q61.01776 90281408926534F'F@FVFarFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q63.2794779795 650985520F'F@FVFarFCFFFHFJFM-F:6(-F#6%-F=6$Q66.7388646257207589380F'F@ FVFarFCFFFHFJFMFCFFFH-F76/FdsF`xFi[lF^_lFjalF]dlF[fl-F:6(-F=6$Q70.9999 9999999999999985F'F@FCFFFHFJFM-F:6(-F#6%-F=6$Q61.1768360896140897157F' F@FVFarFCFFFHFJFM-F:6(-F#6$Ffq-F#6%-F=6$Q62.1084979938919107283F'F@FVF arFCFFFHFJFMFCFFFH-F76/F]tF\\yFb\\lFe_lFablFfdlFbflFigl-F:6(-F=6$Q70.9 9999999999999999994F'F@FCFFFHFJFM-F:6(-F#6%-F=6$Q61.005438379553570020 1F'F@FVFarFCFFFHFJFMFCFFFH-F76/FdtFeyFi\\lF\\`lFhblF]elF[glF`hlF`il-F: 6(-F=6$Q70.99999999999999999988F'F@FCFFFHFJFMFCFFFH/%&alignGQ%axisF'/F DQ)baselineF'/FGQ'centerF'/FIQ'|frleft|hrF'/%/alignmentscopeGQ%trueF'/ %,columnwidthGQ%autoF'/%&widthGF\\[m/%+rowspacingGQ&1.0exF'/%.columnsp acingGQ&0.8emF'/%)rowlinesGQ%noneF'/%,columnlinesGFg[m/%&frameGFg[m/%- framespacingGQ,0.4em~0.5exF'/%*equalrowsGFfn/%-equalcolumnsGFfn/%-disp laystyleGFfn/%%sideGQ&rightF'/%0minlabelspacingGFd[mF@/I+msemanticsGF$ Q'MatrixF'/%%openGQ\"[F'/%&closeGQ\"]F'Fj\\m/%+actiontypeGQ.rtableaddr essF'/%)rtableidGQ*173393824F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,$!57 wsJlM\"o!#@$\"5uO*))>f)4%o-$F%$\"5\\f'e " 0 "" {MPLTEXT 1 0 146 "qqqsim plify(2^(a+b+1)*GAMMA(a+1)*GAMMA(b+1)/GAMMA(a+b+1)*product(4*(n-1)*(n+ a-1)*(n+b-1)*(n+a+b-1)/(2*n-2+a+b)^2/(2*n+a+b-1)/(2*n+a+b-3),n=2..N)); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*4)\"\"#,(%\"aG\"\"\"%\"bG\"\"\"\" \"\"!\"\"\"\"\")-%&GAMMAG6#,(*&\"\"#\"\"\"%\"NG\"\"\"\"\"\"%\"aG\"\"\" %\"bG\"\"\"\"\"#!\"\",**&\"\"#\"\"\"%\"NG\"\"\"\"\"\"%\"aG\"\"\"%\"bG \"\"\"\"\"\"!\"\"\"\"\")\"\"%%\"NG\"\"\",(\"\"\"\"\"\"%\"aG\"\"\"%\"bG \"\"\"\"\"\"-%&GAMMAG6#,(%\"NG\"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\"\"-%&GAM MAG6#,&%\"NG\"\"\"%\"bG\"\"\"\"\"\"-%&GAMMAG6#,&%\"NG\"\"\"%\"aG\"\"\" \"\"\"-%&GAMMAG6#%\"NG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "with(CodeGeneration):\n" }{MPLTEXT 1 0 22 "C(recCoeff, optimize) ;" }}{PARA 7 "" 1 "" {TEXT 210 28 "Warning, unable to optimize\n" }} {PARA 208 "" 1 "" {TEXT 208 273 "cg[0] = sqrt((double) (2 * n + a + b \+ - 1)) * (double) (2 * n + a + b) * sqrt((double) (2 * n + a + b + 1)) \+ * pow((double) (n + a + b), -0.1e1 / 0.2e1) * pow((double) (n + b), -0 .1e1 / 0.2e1) * pow((double) (n + a), -0.1e1 / 0.2e1) * pow((double) n , -0.1e1 / 0.2e1) / 0.2e1;" }}{PARA 209 "" 1 "" {TEXT 208 316 "cg[1] = -(double) (a - b) * (double) (a + b) * sqrt((double) (2 * n + a + b + 1)) * sqrt((double) (2 * n + a + b - 1)) * pow((double) (n + a + b), \+ -0.1e1 / 0.2e1) * pow((double) (n + b), -0.1e1 / 0.2e1) * pow((double) (n + a), -0.1e1 / 0.2e1) * pow((double) n, -0.1e1 / 0.2e1) / (double) (2 * n - 2 + a + b) / 0.2e1;" }}{PARA 210 "" 1 "" {TEXT 208 428 "cg[2 ] = -sqrt((double) (n + b - 1)) * sqrt((double) (n + a + b - 1)) * (do uble) (2 * n + a + b) * sqrt((double) (2 * n + a + b + 1)) * pow((doub le) n, -0.1e1 / 0.2e1) * pow((double) (2 * n + a + b - 3), -0.1e1 / 0. 2e1) * sqrt((double) (n - 1)) * sqrt((double) (n + a - 1)) * pow((doub le) (n + a), -0.1e1 / 0.2e1) * pow((double) (n + b), -0.1e1 / 0.2e1) * pow((double) (n + a + b), -0.1e1 / 0.2e1) / (double) (2 * n - 2 + a + b);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 261 "rules:=1/sqrt(2*n+ a+b-1)=1/sqrt2Nm1AB,sqrt(n)=sqrtN,sqrt(n+b)=sqrtNB,sqrt(n+a)=sqrtNA,sq rt(2*n+3+a+b)=sqrt2Np3AB,sqrt(2*n+1+a+b)=sqrt2Np1AB,1/sqrt(n+1+a+b)=1/ sqrtNp1AB,1/sqrt(n+1)=1/sqrtNp1,sqrt(n+a+b)=sqrtNAB,1/sqrt(n+1+b)=1/sq rtNp1B,1/sqrt(n+1+a)=1/sqrtNp1A;\n" }{MPLTEXT 1 0 33 "subs(rules,subs( n=n+1,recCoeff));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&rulesG6-/*&\" \"\"\"\"\"*$),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"\" \"\"!\"\"#\"\"\"\"\"#\"\"\"!\"\"*&\"\"\"\"\"\"%+sqrt2Nm1ABG!\"\"/*$)% \"nG#\"\"\"\"\"#\"\"\"%&sqrtNG/*$),&%\"nG\"\"\"%\"bG\"\"\"#\"\"\"\"\"# \"\"\"%'sqrtNBG/*$),&%\"nG\"\"\"%\"aG\"\"\"#\"\"\"\"\"#\"\"\"%'sqrtNAG /*$),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"$\"\"\"%\"aG\"\"\"%\"bG\"\"\"# \"\"\"\"\"#\"\"\"%+sqrt2Np3ABG/*$),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"%\"a G\"\"\"%\"bG\"\"\"\"\"\"\"\"\"#\"\"\"\"\"#\"\"\"%+sqrt2Np1ABG/*&\"\"\" \"\"\"*$),*%\"nG\"\"\"\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\" \"\"!\"\"*&\"\"\"\"\"\"%*sqrtNp1ABG!\"\"/*&\"\"\"\"\"\"*$),&%\"nG\"\" \"\"\"\"\"\"\"#\"\"\"\"\"#\"\"\"!\"\"*&\"\"\"\"\"\"%(sqrtNp1G!\"\"/*$) ,(%\"nG\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\"\"\"%(sqrtNABG/*&\"\" \"\"\"\"*$),(%\"nG\"\"\"\"\"\"\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\"\"\"!\"\" *&\"\"\"\"\"\"%)sqrtNp1BG!\"\"/*&\"\"\"\"\"\"*$),(%\"nG\"\"\"\"\"\"\" \"\"%\"aG\"\"\"#\"\"\"\"\"#\"\"\"!\"\"*&\"\"\"\"\"\"%)sqrtNp1AG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%,$*2\"\"#!\"\"%+sqrt2Np1ABG\"\"\", **&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"#\"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\"\" %+sqrt2Np3ABG\"\"\"%*sqrtNp1ABG!\"\"%)sqrtNp1BG!\"\"%)sqrtNp1AG!\"\"%( sqrtNp1G!\"\"\"\"\",$*6\"\"#!\"\",&%\"aG\"\"\"%\"bG!\"\"\"\"\",&%\"aG \"\"\"%\"bG\"\"\"\"\"\"%+sqrt2Np3ABG\"\"\"%+sqrt2Np1ABG\"\"\"%*sqrtNp1 ABG!\"\"%)sqrtNp1BG!\"\"%)sqrtNp1AG!\"\"%(sqrtNp1G!\"\",(*&\"\"#\"\"\" %\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"!\"\"!\"\",$*:%'sqrtNBG\"\"\"%( sqrtNABG\"\"\",**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"#\"\"\"%\"aG\"\"\"% \"bG\"\"\"\"\"\"%+sqrt2Np3ABG\"\"\"%(sqrtNp1G!\"\"%+sqrt2Nm1ABG!\"\"%& sqrtNG\"\"\"%'sqrtNAG\"\"\"%)sqrtNp1AG!\"\"%)sqrtNp1BG!\"\"%*sqrtNp1AB G!\"\",(*&\"\"#\"\"\"%\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"!\"\"!\"\" " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "subs(n=n+1, recCoeff);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%,$*2\"\"#!\"\"),**&\"\"#\"\"\"%\" nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\"\"\"\"\"#\"\"\"\"\"#\"\"\",**& \"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"#\"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\"\"),* *&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"$\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\" \"\"#\"\"\"),*%\"nG\"\"\"\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\" #!\"\"),(%\"nG\"\"\"\"\"\"\"\"\"%\"bG\"\"\"#\"\"\"\"\"#!\"\"),(%\"nG\" \"\"\"\"\"\"\"\"%\"aG\"\"\"#\"\"\"\"\"#!\"\"),&%\"nG\"\"\"\"\"\"\"\"\" #\"\"\"\"\"#!\"\"\"\"\",$*6\"\"#!\"\",&%\"aG\"\"\"%\"bG!\"\"\"\"\",&% \"aG\"\"\"%\"bG\"\"\"\"\"\"),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"$\"\" \"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\"\"\"),**&\"\"#\"\"\"%\"nG\"\"\" \"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\"\"\"\"\"#\"\"\"\"\"#\"\"\"),*%\"nG\"\" \"\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#!\"\"),(%\"nG\"\"\"\" \"\"\"\"\"%\"bG\"\"\"#\"\"\"\"\"#!\"\"),(%\"nG\"\"\"\"\"\"\"\"\"%\"aG \"\"\"#\"\"\"\"\"#!\"\"),&%\"nG\"\"\"\"\"\"\"\"\"#\"\"\"\"\"#!\"\",(*& \"\"#\"\"\"%\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"!\"\"!\"\",$*:),&%\" nG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\"\"\"),(%\"nG\"\"\"%\"aG\"\"\"%\"bG\" \"\"#\"\"\"\"\"#\"\"\",**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"#\"\"\"%\"aG \"\"\"%\"bG\"\"\"\"\"\"),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"\"\"$\"\"\"%\" aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#\"\"\"),&%\"nG\"\"\"\"\"\"\"\"\"#\"\"\" \"\"#!\"\"),**&\"\"#\"\"\"%\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"\"\" \"!\"\"#\"\"\"\"\"#!\"\")%\"nG#\"\"\"\"\"#\"\"\"),&%\"nG\"\"\"%\"aG\" \"\"#\"\"\"\"\"#\"\"\"),(%\"nG\"\"\"\"\"\"\"\"\"%\"aG\"\"\"#\"\"\"\"\" #!\"\"),(%\"nG\"\"\"\"\"\"\"\"\"%\"bG\"\"\"#\"\"\"\"\"#!\"\"),*%\"nG\" \"\"\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"#\"\"\"\"\"#!\"\",(*&\"\"#\"\"\" %\"nG\"\"\"\"\"\"%\"aG\"\"\"%\"bG\"\"\"!\"\"!\"\"" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 10 "1806*1807;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#\"(UME$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidOrthogonalUniVariateFactory.txt000066400000000000000000001104751307543307100255310ustar00rootroot00000000000000> restart: > with(PolynomialTools): > with(Statistics): > w:=PDF(RandomVariable(Uniform(-1,1)),x) assuming x>0, x<1; > assume(n,integer,n>1,alpha,real,alpha>0); > # Legendre > R:=n*Pn=(2*n-1)*xPn_1+0*Pn_1-(n-1)*Pn_2; > normF:=sqrt(1/(2*n+1)); > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R); > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]); > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))); > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([0,1]))); > U:=1:V:=x: > for i from 2 to 5 do > > W:=map(factor,collect(subs(n=i,xPn_1=x*V,Pn_1=V,Pn_2=U,solve(R,Pn)),x) > ): > > print(map(_x->factor(simplify(_x,symbolic)),W),"->",map(_x->factor(sim > plify(_x,symbolic)),collect(subs(n=i,W/normF),x))); > U:=V: > V:=W: > od: > U:=C0[1]:V:=C1[1]+C1[2]*x: > evalf(CoefficientList(U,x)); > evalf(CoefficientList(V,x)); > for i from 2 to 9 do > > W:=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x) > ): > print(evalf(Int(W*W*w,x=-1..1))); > print(evalf(CoefficientList(W,x))); > U:=V: > V:=W: > od: w := 1/2 R := n~ Pn = (2 n~ - 1) xPn_1 - (n~ - 1) Pn_2 1 normF := ------------- 1/2 (2 n~ + 1) n~ Qn 1/2 (n~ - 1) Qn_2 S := ------------- = (2 n~ - 1) xQn_1 - ------------- 1/2 1/2 (2 n~ + 1) (2 n~ - 3) 1/2 1/2 1/2 (2 n~ - 1) (2 n~ + 1) (n~ - 1) (2 n~ + 1) [---------------------------, 0, - ----------------------] n~ 1/2 (2 n~ - 3) n~ C0 := [1] [ 0 ] C1 := [ ] [ 1/2] [3 ] 2 1/2 2 1/2 3 x 3 5 x 5 ---- - 1/2, "->", --------- - ---- 2 2 2 3 1/2 3 1/2 5/2 x - 3/2 x, "->", 5/2 7 x - 3/2 7 x 4 2 4 2 3/8 + 35/8 x - 15/4 x , "->", 105/8 x - 45/4 x + 9/8 5 3 63/8 x - 35/4 x + 15/8 x, "->", 1/2 5 1/2 3 1/2 63/8 11 x - 35/4 11 x + 15/8 11 x [1.] [0., 1.732050808] 1.000000000 [-1.118033988, 0., 3.354101966] 1.000000000 [0., -3.968626966, 0., 6.614378278] 1.000000000 [1.125000000, 0., -11.25000000, 0., 13.12500000] 1.000000000 [0., 6.218671481, 0., -29.02046691, 0., 26.11842022] 1.000000000 [-1.126734773, 0., 23.66143024, 0., -70.98429073, 0., 52.05514653] 1.000000000 [0., -8.472151069, 0., 76.24935962, 0., -167.7485912, 0., 103.8443660] 1.000000000 [1.127411695, 0., -40.58682101, 0., 223.2275155, 0., -386.9276936, 0., 207.2826930] 1.000000000 [0., 10.72697787, 0., -157.3290088, 0., 613.5831342, 0., -876.5473345, 0., 413.9251302] > restart: > with(PolynomialTools): > with(Statistics): > w:=PDF(RandomVariable(Normal(0,1)),x); > # Hermite > R:=Pn=xPn_1-(n-1)*Pn_2; > normF:=sqrt(GAMMA(n+1)); > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R); > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]); > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))); > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([0,1]))); > U:=1:V:=x: > for i from 2 to 5 do > > W:=map(factor,collect(subs(n=i,xPn_1=x*V,Pn_1=V,Pn_2=U,solve(R,Pn)),x) > ): > > print(map(_x->factor(simplify(_x,symbolic)),W),"->",map(_x->factor(sim > plify(_x,symbolic)),collect(subs(n=i,W/normF),x))); > U:=V: > V:=W: > od: > U:=C0[1]:V:=C1[1]+C1[2]*x: > evalf(CoefficientList(U,x)); > evalf(CoefficientList(V,x)); > for i from 2 to 9 do > > W:=map(factor,collect(subs(n=i,xQn_1=x*V,Qn_1=V,Qn_2=U,solve(S,Qn)),x) > ): > print(evalf(Int(W*W*w,x=-infinity..infinity))); > print(evalf(CoefficientList(W,x))); > U:=V: > V:=W: > od: 2 1/2 x 2 exp(- ----) 2 w := 1/2 ---------------- 1/2 Pi R := Pn = xPn_1 - (n - 1) Pn_2 1/2 normF := GAMMA(n + 1) 1/2 S := GAMMA(n + 1) Qn = 1/2 1/2 GAMMA(n) xQn_1 - (n - 1) GAMMA(n - 1) Qn_2 1/2 1 (n - 1) [----, 0, - ----------] 1/2 1/2 n n C0 := [1] [0] C1 := [ ] [1] 1/2 2 1/2 2 2 x 2 x - 1, "->", ------- - ---- 2 2 3 1/2 3 1/2 x - 3 x, "->", 1/6 6 x - 1/2 6 x 4 2 1/2 4 1/2 2 1/2 3 + x - 6 x , "->", 1/12 6 x - 1/2 6 x + 1/4 6 5 3 1/2 5 1/2 3 1/2 x - 10 x + 15 x, "->", 1/60 30 x - 1/6 30 x + 1/4 30 x [1.] [0., 1.] 1.000000000 [-0.7071067810, 0., 0.7071067810] 1.000000000 [0., -1.224744872, 0., 0.4082482906] 1.000000000 [0.6123724358, 0., -1.224744872, 0., 0.2041241453] 1.000000000 [0., 1.369306394, 0., -0.9128709291, 0., 0.09128709291] 1.000000000 [-0.5590169943, 0., 1.677050983, 0., -0.5590169943, 0., 0.03726779963] 1.000000000 [0., -1.479019946, 0., 1.479019946, 0., -0.2958039892, 0., 0.01408590425] 1.000000000 [0.5229125167, 0., -2.091650067, 0., 1.045825033, 0., -0.1394433378, 0., 0.004980119206] 1.000000000 [0., 1.568737550, 0., -2.091650066, 0., 0.6274950201, 0., -0.05976143047, 0., 0.001660039735] > restart: > with(PolynomialTools): > with(Statistics): > w:=PDF(RandomVariable(Gamma(1,alpha+1)),x); > # Laguerre > R:=n*Pn=-xPn_1+(2*n-1+alpha)*Pn_1-(n-1+alpha)*Pn_2; > normF:=sqrt(GAMMA(n+alpha+1)/GAMMA(alpha+1)/GAMMA(n+1)); > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R); > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]); > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or([1]))); > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or([1+alpha,-1]))); > alpha_num:=2.5: > U:=1:V:=1+alpha-x: > for i from 2 to 3 do > > W:=map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,xPn_1=x*V,Pn > _1=V,Pn_2=U,solve(R,Pn)),x)): > > print(map(_x->factor(simplify(_x,symbolic)),W),"->",map(_x->factor(sim > plify(_x,symbolic)),collect(subs(n=i,W/normF),x)),collect(evalf(subs(n > =i,alpha=alpha_num,W/normF)),x)); > U:=V: > V:=W: > od: > U:=C0[1]:V:=C1[1]+C1[2]*x: > evalf(CoefficientList(subs(alpha=alpha_num,U),x)); > evalf(CoefficientList(subs(alpha=alpha_num,V),x)); > for i from 2 to 9 do > > W:=map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,xQn_1=x*V,Qn > _1=V,Qn_2=U,alpha=alpha_num,solve(S,Qn)),x)): > print(evalf(Int(subs(alpha=alpha_num,W*W*w),x=0..infinity))); > print((CoefficientList(W,x))); > U:=V: > V:=W: > od: { 0 x < 0 { w := { alpha { x exp(-x) { ---------------- otherwise { GAMMA(alpha + 1) R := n Pn = -xPn_1 + (2 n - 1 + alpha) Pn_1 - (n - 1 + alpha) Pn_2 / GAMMA(n + alpha + 1) \1/2 normF := |-----------------------------| \GAMMA(alpha + 1) GAMMA(n + 1)/ / GAMMA(n + alpha + 1) \1/2 S := n |-----------------------------| Qn = \GAMMA(alpha + 1) GAMMA(n + 1)/ / GAMMA(n + alpha) \1/2 -|-------------------------| xQn_1 \GAMMA(alpha + 1) GAMMA(n)/ / GAMMA(n + alpha) \1/2 + (2 n - 1 + alpha) |-------------------------| Qn_1 \GAMMA(alpha + 1) GAMMA(n)/ / GAMMA(n - 1 + alpha) \1/2 - (n - 1 + alpha) |-----------------------------| Qn_2 \GAMMA(alpha + 1) GAMMA(n - 1)/ 1 2 n - 1 + alpha [- -------------------, -------------------, 1/2 1/2 1/2 1/2 (n + alpha) n (n + alpha) n 1/2 1/2 (n - 1) (n - 1 + alpha) - -----------------------------] 1/2 1/2 (n + alpha) n C0 := [1] [ 1/2 ] [ (alpha + 1) ] [ ] C1 := [ 1 ] [- --------------] [ 1/2] [ (alpha + 1) ] 2 x (alpha + 1) alpha ---- - (2 + alpha) x + ----------------- + 1 + alpha, "->", 2 2 1/2 2 1/2 1/2 2 x 2 (2 + alpha) x ------------------------------- - --------------------- 1/2 1/2 1/2 2 (alpha + 1) (2 + alpha) (alpha + 1) 1/2 1/2 1/2 (alpha + 1) (2 + alpha) 2 + ----------------------------------, 2 2 0.1781741613 x - 1.603567452 x + 2.806243040 3 2 x (3 + alpha) x (3 + alpha) (2 + alpha) x - ---- + -------------- - ------------------------- 6 2 2 (alpha + 1) (2 + alpha) alpha (alpha + 1) alpha + ----------------------------- + ----------------- + 1 6 2 + alpha, "->", 1/2 3 6 x - ---------------------------------------------- 1/2 1/2 1/2 6 (alpha + 1) (2 + alpha) (3 + alpha) 1/2 1/2 2 (3 + alpha) 6 x + ------------------------------- 1/2 1/2 2 (alpha + 1) (2 + alpha) 1/2 1/2 1/2 (3 + alpha) (2 + alpha) 6 x - ------------------------------------ 1/2 2 (alpha + 1) 1/2 1/2 1/2 1/2 (alpha + 1) (2 + alpha) (3 + alpha) 6 + -------------------------------------------------, 6 3 2 -0.04386344634 x + 0.7237468645 x - 3.256860890 x + 3.799671039 [1.] [1.870828693, -0.5345224839] 1.000000001 [2.806243040, -1.603567452, 0.1781741614] 1.000000002 [3.799671039, -3.256860890, 0.7237468648, -0.04386344637] 1.000000001 [4.843649192, -5.535599076, 1.845199693, -0.2236605687, 0.008602329571] 1.000000001 [5.932234508, -8.474620723, 3.766498103, -0.6848178366, 0.05267829511, -0.001404754537] 1.000000002 [7.060771360, -12.10417948, 6.724544156, -1.630192524, 0.1880991373, -0.01003195398, 0.0001967049802] 1.000000003 [8.225549714, -16.45109943, 10.96739962, -3.323454434, 0.5113006820, -0.04090405454, 0.001604080569, -0.00002412151234] 1.000000004 [9.423551064, -21.53954527, 16.75297966, -6.091992609, 1.171537040, -0.1249639508, 0.007350820636, -0.0002210773124, -5 0.2631872767 10 ] 1.000000003 [10.65227215, -27.39155695, 24.34805062, -10.32947604, 2.383725238, -0.3178300313, 0.02492784559, -0.001124564463, -6 0.00002677534436, -0.2586989793 10 ] > restart: > with(PolynomialTools): > with(Statistics): > w:=simplify(PDF(-1+2*RandomVariable(Beta(b+1,a+1)),x),symbolic); > # Jacobi > R:=Pn=(2*n+a+b)*(2*n-1+a+b)/2/(n+a+b)/n*xPn_1+(a-b)*(a+b)*(2*n-1+a+b)/ > 2/(n+a+b)/(2*n-2+a+b)/n*Pn_1-(a+n-1)*(b+n-1)*(2*n+a+b)/(2*n-2+a+b)/(n+ > a+b)/n*Pn_2; > normF:=convert(sqrt(2^(a+b+1)*GAMMA(n+a+1)*GAMMA(n+b+1)/(2*n+a+b+1)/GA > MMA(n+a+b+1)/GAMMA(n+1)/2^(a+b+1)/Beta(b+1,a+1)),GAMMA); > S:=subs(Pn=normF*Qn,Pn_1=subs(n=n-1,normF)*Qn_1,xPn_1=subs(n=n-1,normF > )*xQn_1,Pn_2=subs(n=n-2,normF)*Qn_2,R); > map(_x->factor(simplify(convert(_x,GAMMA),symbolic)),[coeff(rhs(S),xQn > _1)/coeff(lhs(S),Qn),coeff(rhs(S),Qn_1)/coeff(lhs(S),Qn),coeff(rhs(S), > Qn_2)/coeff(lhs(S),Qn)]); > C0:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=0,1/normF*Vect > or(CoefficientList(simplify(JacobiP(0,a,b,x)),x)))); > C1:=map(_x->simplify(convert(_x,GAMMA),symbolic),subs(n=1,1/normF*Vect > or(CoefficientList(simplify(JacobiP(1,a,b,x)),x)))); > a_num:=2.5:b_num:=3.5: > U:=1:V:=simplify(JacobiP(1,a,b,x)): > for i from 2 to 5 do > > W:=map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,xPn_1=x*V,Pn > _1=V,Pn_2=U,solve(R,Pn)),x)): > > print(subs(u=1-x,map(_x->factor(simplify(_x,symbolic)),collect(subs(x= > 1-u,W),u))),"->",map(_x->factor(simplify(_x,symbolic)),collect(subs(n= > i,W/normF),x)),collect(evalf(subs(n=i,a=a_num,b=b_num,W/normF)),x)); > U:=V: > V:=W: > od: > U:=C0[1]:V:=C1[1]+C1[2]*x: > evalf(CoefficientList(subs(a=a_num,b=b_num,U),x)); > evalf(CoefficientList(subs(a=a_num,b=b_num,V),x)); > for i from 2 to 10 do > > W:=map(_x->factor(simplify(_x,symbolic)),collect(subs(n=i,xQn_1=x*V,Qn > _1=V,Qn_2=U,a=a_num,b=b_num,solve(S,Qn)),x)): > print(evalf(Int(subs(a=a_num,b=b_num,W*W*w),x=-1..1))); > print((CoefficientList(W,x))); > U:=V: > V:=W: > od: { 0 x < -1 { { b a w := { (x/2 + 1/2) (1/2 - x/2) { 1/2 ------------------------- x < 1 { Beta(b + 1, a + 1) { { 0 1 <= x (2 n + a + b) (2 n - 1 + a + b) xPn_1 R := Pn = ------------------------------------- 2 (n + a + b) n (a - b) (b + a) (2 n - 1 + a + b) Pn_1 + -------------------------------------- 2 (n + a + b) (2 n - 2 + a + b) n (a + n - 1) (b + n - 1) (2 n + a + b) Pn_2 - ------------------------------------------ (2 n - 2 + a + b) (n + a + b) n normF := (GAMMA(n + a + 1) GAMMA(n + b + 1) GAMMA(b + 2 + a)/( (2 n + a + b + 1) GAMMA(n + a + b + 1) GAMMA(n + 1) 1/2 GAMMA(b + 1) GAMMA(a + 1))) S := (GAMMA(n + a + 1) GAMMA(n + b + 1) GAMMA(b + 2 + a)/( (2 n + a + b + 1) GAMMA(n + a + b + 1) GAMMA(n + 1) 1/2 GAMMA(b + 1) GAMMA(a + 1))) Qn = 1/2 (2 n + a + b) (2 n - 1 + a + b) (GAMMA(n + a) GAMMA(n + b) GAMMA(b + 2 + a) /((2 n - 1 + a + b) GAMMA(n + a + b) GAMMA(n) GAMMA(b + 1) 1/2 GAMMA(a + 1))) xQn_1/((n + a + b) n) + 1/2 (a - b) (b + a) (2 n - 1 + a + b) (GAMMA(n + a) GAMMA(n + b) GAMMA(b + 2 + a) /((2 n - 1 + a + b) GAMMA(n + a + b) GAMMA(n) GAMMA(b + 1) 1/2 GAMMA(a + 1))) Qn_1/((n + a + b) (2 n - 2 + a + b) n) - (a + n - 1) (b + n - 1) (2 n + a + b) (GAMMA(a + n - 1) GAMMA(b + n - 1) GAMMA(b + 2 + a)/((2 n - 3 + a + b) GAMMA(n - 1 + a + b) GAMMA(n - 1) GAMMA(b + 1) GAMMA(a + 1)))^ 1/2 Qn_2/((2 n - 2 + a + b) (n + a + b) n) 1/2 1/2 (2 n - 1 + a + b) (2 n + a + b) (2 n + a + b + 1) [-------------------------------------------------------, 1/2 1/2 1/2 1/2 2 (n + a) (n + b) (n + a + b) n 1/2 1/2 (2 n - 1 + a + b) (a - b) (b + a) (2 n + a + b + 1) / 1/2 1/2 1/2 1/2 / (2 (n + a) (n + b) (n + a + b) n / 1/2 (2 n - 2 + a + b)), - (2 n + a + b) (a + n - 1) 1/2 1/2 1/2 (b + n - 1) (n - 1 + a + b) (n - 1) 1/2 / 1/2 1/2 (2 n + a + b + 1) / ((n + a) (n + b) / 1/2 1/2 1/2 (2 n - 3 + a + b) (n + a + b) n (2 n - 2 + a + b))] C0 := [1] [ 1/2 ] [ (a - b) (b + 3 + a) ] [ ----------------------- ] [ 1/2 1/2 ] [ 2 (b + 1) (a + 1) ] C1 := [ ] [ 1/2] [(b + 2 + a) (b + 3 + a) ] [--------------------------] [ 1/2 1/2 ] [ 2 (b + 1) (a + 1) ] 2 (a + 4 + b) (b + 3 + a) (1 - x) (b + 3 + a) (2 + a) (1 - x) -------------------------------- - --------------------------- 8 2 2 (a + 4 + b) (b + 3 + a) a (a - b) (b + 3 + a) + ----------------------- + ---- - a/8 + ------------------- 8 8 4 2 b a b 1/2 - 1/2 - b/8 + ---- - ---, "->", (a + 4 + b) (b + 3 + a) 2 8 4 1/2 1/2 2 / 1/2 1/2 (5 + a + b) (b + 2 + a) x / (8 (b + 1) (b + 2) / 1/2 1/2 (a + 1) (2 + a) ) 1/2 1/2 1/2 (a - b) (b + 3 + a) 2 (5 + a + b) (b + 2 + a) x + -------------------------------------------------------- 1/2 1/2 1/2 1/2 4 (b + 1) (b + 2) (a + 1) (2 + a) 2 2 1/2 1/2 + (a - a - 2 a b - 4 - b + b ) 2 (5 + a + b) 1/2 / 1/2 1/2 1/2 (b + 2 + a) / (8 (b + 1) (b + 2) (a + 1) / 1/2 2 (2 + a) ), 7.559289462 x - 1.511857892 x - 0.7559289462 3 (6 + a + b) (5 + a + b) (a + 4 + b) (1 - x) - -------------------------------------------- 48 2 (5 + a + b) (a + 4 + b) (3 + a) (1 - x) + ---------------------------------------- 8 (a + 4 + b) (3 + a) (2 + a) (1 - x) - ----------------------------------- 4 (6 + a + b) (5 + a + b) (a + 4 + b) + ----------------------------------- 48 2 2 (a - b) (a - 3 a - 2 a b - 16 + b - 3 b) + ------------------------------------------ 48 2 2 (a + 4 + b) (a - a - 2 a b + b - 6 - b) + ----------------------------------------- 16 (a - b) (5 + a + b) (a + 4 + b) + -------------------------------, "->", (6 + a + b) 16 1/2 1/2 1/2 (5 + a + b) (a + 4 + b) 6 (7 + a + b) (b + 2 + a) 1/2 3 / 1/2 1/2 1/2 (b + 3 + a) x / (48 (b + 1) (b + 2) (b + 3) / 1/2 1/2 1/2 (a + 1) (2 + a) (3 + a) ) + (a - b) (5 + a + b) 1/2 1/2 1/2 1/2 (a + 4 + b) 6 (7 + a + b) (b + 2 + a) (b + 3 + a) 2 / 1/2 1/2 1/2 1/2 x / (16 (b + 1) (b + 2) (b + 3) (a + 1) / 1/2 1/2 (2 + a) (3 + a) ) + (a + 4 + b) 2 2 1/2 1/2 (a - a - 2 a b + b - 6 - b) 6 (7 + a + b) 1/2 1/2 / 1/2 1/2 (b + 2 + a) (b + 3 + a) x / (16 (b + 1) (b + 2) / 1/2 1/2 1/2 1/2 (b + 3) (a + 1) (2 + a) (3 + a) ) + (a - b) 2 2 1/2 1/2 (a - 3 a - 2 a b - 16 + b - 3 b) 6 (7 + a + b) 1/2 1/2 / 1/2 1/2 (b + 2 + a) (b + 3 + a) / (48 (b + 1) (b + 2) / 1/2 1/2 1/2 1/2 3 (b + 3) (a + 1) (2 + a) (3 + a) ), 17.45743122 x 2 - 4.364357804 x - 4.364357804 x + 0.4364357804 4 (5 + a + b) (6 + a + b) (8 + a + b) (7 + a + b) (1 - x) -------------------------------------------------------- 384 3 (5 + a + b) (7 + a + b) (6 + a + b) (4 + a) (1 - x) - ---------------------------------------------------- 48 2 (5 + a + b) (6 + a + b) (4 + a) (3 + a) (1 - x) + ------------------------------------------------ 16 (5 + a + b) (4 + a) (3 + a) (2 + a) (1 - x) - ------------------------------------------- 12 4 (5 + a + b) (6 + a + b) (8 + a + b) (7 + a + b) a + ----------------------------------------------- + --- 384 384 3 3 2 a b a a b - ---- - ---- + ---- 96 64 64 2 3 (5 + a + b) (7 + a + b) (6 + a + b) (a - b) 37 a a b + ------------------------------------------- - ----- - ---- 96 384 96 7 a + --- 64 2 2 (5 + a + b) (6 + a + b) (a - a - 2 a b - 8 + b - b) + ----------------------------------------------------- 64 3 43 a b b + ------ - ---- 192 64 2 2 (5 + a + b) (a - b) (a - 3 a - 2 a b - 22 + b - 3 b) + ------------------------------------------------------ 96 4 2 2 2 2 7 b b 37 b a b a b + --- + --- + 3/8 - ----- + ----- + ----, "->", (5 + a + b) 64 384 384 64 64 1/2 1/2 (6 + a + b) (8 + a + b) (7 + a + b) 6 (9 + a + b) 1/2 1/2 1/2 4 / (b + 2 + a) (b + 3 + a) (a + 4 + b) x / (192 / 1/2 1/2 1/2 1/2 1/2 (b + 1) (b + 2) (b + 3) (4 + b) (a + 1) 1/2 1/2 1/2 (2 + a) (3 + a) (4 + a) ) + (5 + a + b) (7 + a + b) 1/2 1/2 1/2 (6 + a + b) (a - b) 6 (9 + a + b) (b + 2 + a) 1/2 1/2 3 / 1/2 (b + 3 + a) (a + 4 + b) x / (48 (b + 1) / 1/2 1/2 1/2 1/2 1/2 (b + 2) (b + 3) (4 + b) (a + 1) (2 + a) 1/2 1/2 (3 + a) (4 + a) ) + (5 + a + b) (6 + a + b) 2 2 1/2 1/2 (a - a - 2 a b - 8 + b - b) 6 (9 + a + b) 1/2 1/2 1/2 2 / (b + 2 + a) (b + 3 + a) (a + 4 + b) x / (32 / 1/2 1/2 1/2 1/2 1/2 (b + 1) (b + 2) (b + 3) (4 + b) (a + 1) 1/2 1/2 1/2 (2 + a) (3 + a) (4 + a) ) + (5 + a + b) (a - b) 2 2 1/2 1/2 (a - 3 a - 2 a b - 22 + b - 3 b) 6 (9 + a + b) 1/2 1/2 1/2 / (b + 2 + a) (b + 3 + a) (a + 4 + b) x / (48 / 1/2 1/2 1/2 1/2 1/2 (b + 1) (b + 2) (b + 3) (4 + b) (a + 1) 1/2 1/2 1/2 4 3 3 (2 + a) (3 + a) (4 + a) ) + (a - 4 a b - 6 a 2 2 2 2 3 2 + 6 a b + 6 a b - 37 a - 4 a b + 42 a + 6 a b + 86 a b 3 2 4 1/2 1/2 - 6 b - 37 b + 42 b + b + 144) 6 (9 + a + b) 1/2 1/2 1/2 / (b + 2 + a) (b + 3 + a) (a + 4 + b) / (192 / 1/2 1/2 1/2 1/2 1/2 (b + 1) (b + 2) (b + 3) (4 + b) (a + 1) 1/2 1/2 1/2 4 (2 + a) (3 + a) (4 + a) ), 38.64367133 x 3 2 - 11.04104895 x - 16.56157342 x + 2.760262238 x + 0.6900655592 - (6 + a + b) (8 + a + b) (7 + a + b) (a + 10 + b) (9 + a + b) 5 (1 - x) /3840 + (6 + a + b) (8 + a + b) (7 + a + b) 4 (9 + a + b) (a + 5) (1 - x) /384 - (6 + a + b) (8 + a + b) 3 (7 + a + b) (a + 5) (4 + a) (1 - x) /96 2 (7 + a + b) (6 + a + b) (a + 5) (4 + a) (3 + a) (1 - x) + -------------------------------------------------------- 48 (6 + a + b) (a + 5) (4 + a) (3 + a) (2 + a) (1 - x) - --------------------------------------------------- + 48 (6 + a + b) (8 + a + b) (7 + a + b) (a + 10 + b) (9 + a + b)/ 4 3 3 2 2 3840 + (6 + a + b) (a - 4 a b - 6 a + 6 a b - 49 a 2 2 3 2 4 3 + 6 a b + 110 a b - 4 a b + 6 a b + 54 a + b - 6 b 2 - 49 b + 54 b + 240)/768 + (a - b) (7 + a + b) (6 + a + b) 2 2 4 3 (a - 3 a - 2 a b + b - 3 b - 28)/384 + (a - b) (a - 4 a b 3 2 2 2 2 - 10 a - 65 a + 6 a b + 10 a b + 250 a + 190 a b 3 2 4 3 2 - 4 a b + 10 a b + 1024 + b - 10 b - 65 b + 250 b)/3840 (6 + a + b) (8 + a + b) (7 + a + b) (9 + a + b) (a - b) + ------------------------------------------------------- + 768 (6 + a + b) (8 + a + b) (7 + a + b) 2 2 (a - a - 2 a b + b - 10 - b)/384, "->", (6 + a + b) 1/2 (8 + a + b) (7 + a + b) (a + 10 + b) (9 + a + b) 30 1/2 1/2 1/2 1/2 (11 + a + b) (b + 2 + a) (b + 3 + a) (a + 4 + b) 1/2 5 / 1/2 1/2 1/2 (5 + a + b) x / (1920 (b + 1) (b + 2) (b + 3) / 1/2 1/2 1/2 1/2 1/2 (4 + b) (5 + b) (a + 1) (2 + a) (3 + a) 1/2 1/2 (4 + a) (a + 5) ) + (6 + a + b) (8 + a + b) (7 + a + b) 1/2 1/2 1/2 (9 + a + b) (a - b) 30 (11 + a + b) (b + 2 + a) 1/2 1/2 1/2 4 / (b + 3 + a) (a + 4 + b) (5 + a + b) x / (384 / 1/2 1/2 1/2 1/2 1/2 (b + 1) (b + 2) (b + 3) (4 + b) (5 + b) 1/2 1/2 1/2 1/2 1/2 (a + 1) (2 + a) (3 + a) (4 + a) (a + 5) ) + (6 + a + b) (8 + a + b) (7 + a + b) 2 2 1/2 1/2 (a - a - 2 a b + b - 10 - b) 30 (11 + a + b) 1/2 1/2 1/2 1/2 (b + 2 + a) (b + 3 + a) (a + 4 + b) (5 + a + b) 3 / 1/2 1/2 1/2 1/2 x / (192 (b + 1) (b + 2) (b + 3) (4 + b) / 1/2 1/2 1/2 1/2 1/2 (5 + b) (a + 1) (2 + a) (3 + a) (4 + a) 1/2 (a + 5) ) + (a - b) (7 + a + b) (6 + a + b) 2 2 1/2 1/2 (a - 3 a - 2 a b + b - 3 b - 28) 30 (11 + a + b) 1/2 1/2 1/2 1/2 (b + 2 + a) (b + 3 + a) (a + 4 + b) (5 + a + b) 2 / 1/2 1/2 1/2 1/2 x / (192 (b + 1) (b + 2) (b + 3) (4 + b) / 1/2 1/2 1/2 1/2 1/2 (5 + b) (a + 1) (2 + a) (3 + a) (4 + a) 1/2 4 3 3 2 (a + 5) ) + (6 + a + b) (a - 4 a b - 6 a + 6 a b 2 2 2 3 2 4 - 49 a + 6 a b + 110 a b - 4 a b + 6 a b + 54 a + b 3 2 1/2 1/2 - 6 b - 49 b + 54 b + 240) 30 (11 + a + b) 1/2 1/2 1/2 1/2 (b + 2 + a) (b + 3 + a) (a + 4 + b) (5 + a + b) x / 1/2 1/2 1/2 1/2 / (384 (b + 1) (b + 2) (b + 3) (4 + b) / 1/2 1/2 1/2 1/2 1/2 (5 + b) (a + 1) (2 + a) (3 + a) (4 + a) 1/2 4 3 3 2 2 2 (a + 5) ) + (a - b) (a - 4 a b - 10 a - 65 a + 6 a b 2 3 2 4 + 10 a b + 250 a + 190 a b - 4 a b + 10 a b + 1024 + b 3 2 1/2 1/2 - 10 b - 65 b + 250 b) 30 (11 + a + b) 1/2 1/2 1/2 1/2 (b + 2 + a) (b + 3 + a) (a + 4 + b) (5 + a + b) / 1/2 1/2 1/2 1/2 / (1920 (b + 1) (b + 2) (b + 3) (4 + b) / 1/2 1/2 1/2 1/2 1/2 (5 + b) (a + 1) (2 + a) (3 + a) (4 + a) 1/2 5 4 3 (a + 5) ), 83.37138529 x - 26.05355790 x - 52.10711581 x 2 + 11.16581053 x + 5.582905266 x - 0.4652421053 [1.] [-0.3779644730, 3.023715785] 1.000000001 [-0.7559289457, -1.511857892, 7.559289463] 1.000000000 [0.4364357803, -4.364357804, -4.364357804, 17.45743122] 1.000000001 [0.6900655594, 2.760262237, -16.56157342, -11.04104895, 38.64367134 ] 1.000000001 [-0.4652421054, 5.582905265, 11.16581053, -52.10711581, -26.05355790, 83.37138531] 0.9999999999 [-0.6579516949, -3.947710168, 27.63397118, 36.84529491, -147.3811796, -58.95247187, 176.8574156] 1.000000001 [0.4828045497, -6.759263698, -20.27779109, 108.1482191, 108.1482191, -389.3335887, -129.7778630, 370.7938943] 1.000000002 [0.6386903852, 5.109523082, -40.87618466, -81.75236932, 367.8856618, 294.3085295, -981.0284316, -280.2938378, 770.8080540] 1.000000002 [-0.4947274452, 7.915639125, 31.66255650, -189.9753391, -284.9630085, 1139.852034, 759.9013560, -2388.261405, -597.0653515, 1592.174270] 1.000000003 [-0.6257862198, -6.257862196, 56.32075978, 150.1886928, -750.9434636, -901.1321560, 3304.151239, 1888.086422, -5664.259267, -1258.724283, 3272.683133] > openturns-1.9/validation/src/ValidPoisson.mws000066400000000000000000000374611307543307100215210ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plo t" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 815 "restart:\nwith(Stat istics):\npoisson_:=RandomVariable(Poisson(lambda)):\npdf:=subs(u=n,Pr obabilityFunction(poisson_,u));\ncdf:=simplify(subs(u=n,CDF(poisson_,u )));\nmu_:=Mean(poisson_);\nvar_:=Variance(poisson_);\nskew_:=simplify (convert(Skewness(poisson_),GAMMA),symbolic);\nkurt_:=simplify(convert (Kurtosis(poisson_),GAMMA),symbolic);\nqdf:=simplify(Quantile(poisson_ ,q));\nqdf2:=solve(cdf=q,K);\npdfgr:=[factor(diff(pdf, lambda))];\ncdf gr:=[diff(cdf, lambda)];\nvalnum:=lambda=10:\nevalf(subs(valnum,n=12,p df));\nevalf(subs(valnum,n=12,cdf));\nevalf(subs(valnum,n=12,pdfgr)); \nevalf(subs(valnum,n=12,cdfgr));\nq:=evalf(Quantile(Poisson(subs(valn um,lambda)),0.95));\nevalf(subs(valnum,n=q,cdf));\nevalf(subs(valnum,m u_));\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,skew_));\nev alf(subs(valnum,kurt_));\nevalf(subs(valnum,var_));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$pdfG-%*PIECEWISEG6$7$\"\"!2%\"nGF)7$*()%'lambdaGF+ \"\"\"-%$expG6#,$F/!\"\"F0-%*factorialG6#F+F5%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG*&-%&GAMMAG6$,&-%&floorG6#%\"nG\"\"\"F.F .%'lambdaGF.-F'6#F)!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G%'l ambdaG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G%'lambdaG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G*&\"\"\"F&*$%'lambdaG#F&\"\"#!\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G*&%'lambdaG!\"\",&*&\"\"$ \"\"\"F&F+F+F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG-%'RootOf G6#,&-%&floorG6#%#_ZG\"\"\"-F&6#,(*&-%&GAMMAG6$,&F,F-F-F-%'lambdaGF-F, F-F-F2F-*&%\"qGF--F36#,&\"\"#F-F,F-F-!\"\"F=" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfgr G7#-%*PIECEWISEG6$7$\"\"!2%\"nGF*7$*,)%'lambdaGF,\"\"\"-%$expG6#,$F0! \"\"F1,&F,F1F0F6F1F0F6-%*factorialG6#F,F6%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7#,$*()%'lambdaG-%&floorG6#%\"nG\"\"\"-%$ expG6#,$F)!\"\"F.-%&GAMMAG6#,&F*F.F.F.F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+4I.y%*!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+kZ c:z!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#$\"+-mg&*=!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#$!+4I.y%*!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG$\"#:\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+off7&*!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+gwFiJ!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+gw FiJ!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++J!\"*" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"#5\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "fsolve(subs(lambda=0.2,GAMMA(n+1,lambda)/GAMMA(n+1))= 0.95,n);" }{TEXT -1 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+p-fad!# 5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 111 "plot(map(_x->subs(lam bda=30,_x),[GAMMA(floor(n)+1,lambda)/GAMMA(floor(n)+1),CDF(Gamma(1,lam bda),n)]),n=0..100);" }}{PARA 13 "" 1 "" {GLPLOT2D 446 446 446 {PLOTDATA 2 "6&-%'CURVESG6$7gn7$$\"\"!F)$\"+pHid$*!#B7$$\"+;arz@!\"*$ \"+[m,,X!#?7$$\"+XTFwSF0$\"+_4ICO!#=7$$\"+\"z_\"4iF0$\"++U>t6!#;7$$\"+ S&phN)F0$\"+/f2Y?!#:7$$\"+*=)H\\5!\")$\"+uv([B#!#97$$\"+[!3uC\"FI$\"+& \\wpn\"!#87$$\"+J$RDX\"FI$\"+iR#o?*FR7$$\"+)R'ok;FI$\"+p[ssQ!#77$$\"+_ (>/x\"FI$\"+0i@qsFgn7$$\"+1J:w=FI$\"+x,F$H\"!#67$$\"+dG\"\\)>FI$\"+WoM (=#Fbo7$$\"+3En$4#FI$\"+X=YGNFbo7$$\"+c#o%*=#FI$\"+>/MWaFbo7$$\"+/RE&G #FI$\"+5@!p0)Fbo7$$\"+9r5$R#FI$\"+F\"fk9\"!#57$$\"+D.&4]#FI$\"+YOd$3#F \\q7$$\"+]jB4EFI$\"+,gOtEF\\q7$$\"+vB_Y2aFI$\"+ f(G(****F\\q7$$\"+yXu9cFI$\"+3i#*****F\\q7$$\"+\\y))GeFI$\"+87)*****F \\q7$$\"+i_QQgFI$\"+=b******F\\q7$$\"+!y%3TiFI$\"+&**)******F\\q7$$\"+ O![hY'FI$\"+)y*******F\\q7$$\"+#Qx$omFI$\"+e********F\\q7$$\"+u.I%)oFI $\"+\"*********F\\q7$$\"+(pe*zqFI$\"+++++5F07$$\"+C\\'QH(FIF\\z7$$\"+8 S8&\\(FIF\\z7$$\"+0#=bq(FI$\"+)*********F\\q7$$\"+2s?6zFI$\"+********* *F\\q7$$\"+IXaE\")FIFgz7$$\"+l*RRL)FIF\\z7$$\"+`<.Y&)FIFgz7$$\"+8tOc() FIF\\[l7$$\"+\\Qk\\*)FIF\\z7$$\"+p0;r\"*FIF\\z7$$\"+lxGp$*FIF\\[l7$$\" +!oK0e*FIF\\z7$$\"+<5s#y*FIF\\z7$$\"$+\"F)F\\z-%'COLOURG6&%$RGBG$\"#5! \"\"F(F(-F$6$7fn7$F(F(7$F.$\"+B!>b]'!#L7$F5$\"+P>v&\\\"!#D7$F;$\"+'Q=t %e!#@7$FA$\"+J!4I_&F97$FG$\"+8C%Rk'F?7$FN$\"+\"R6!3=FL7$FT$\"+=72'\\#F R7$FY$\"+!Q#=B?Fgn7$Fin$\"+o*eqw%Fgn7$F^o$\"+me&G,\"Fbo7$Fdo$\"+w\"=$* *>Fbo7$Fio$\"+AE=F\\q7$Fcq$\"+&GMaY#F\\q7$Fhq$\"+PF^'=$F\\q7$F]r$ \"+b8CLRF\\q7$Fbr$\"+$Gr>q%F\\q7$Fgr$\"+GAu%R&F\\q7$F\\s$\"+,A(=1'F\\q 7$Fas$\"+!3Z\"*z'F\\q7$Ffs$\"+[\\#pX(F\\q7$F[t$\"+pXw%**F\\q7$Fcv$\"+\\Iew**F\\q7$Fhv$\"+;!H 1***F\\q7$F]w$\"+dRb'***F\\q7$Fbw$\"+^6h)***F\\q7$Fgw$\"+`%)\\****F\\q 7$F\\x$\"+K9$)****F\\q7$Fax$\"+RR%*****F\\q7$Ffx$\"+q7)*****F\\q7$F[y$ \"+JY******F\\q7$F`y$\"+.$)******F\\q7$Fey$\"+?&*******F\\q7$Fjy$\"+/* *******F\\q7$F_z$\"+f********F\\q7$Fbz$\"+.+++5F07$Fez$\"+/+++5F07$Fjz $\"+V********F\\q7$F_[lF\\z7$Fb[l$\"+0+++5F07$Fe[lFifl7$Fh[lFifl7$F[\\ lFifl7$F^\\lFifl7$Fa\\lFifl7$Fd\\lFgz7$Fg\\lFiflFi\\l-F]]l6&F_]lF(F`]l F(-%+AXESLABELSG6$Q\"n6\"Q!Fhgl-%%VIEWG6$;F(Fj\\l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" }} }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 161 "cdf:=convert(CDF(Gamma(1, lambda),n),GAMMA);\ncdf2:=1-GAMMA(lambda,n)/GAMMA(lambda);\ncdf3:=GAMM A(n,lambda)/GAMMA(n);\nevalf(subs(lambda=100,n=100,[cdf,cdf2,cdf3])); " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6$7$\"\"!2%\"n GF)7$*,-%$expG6#,$*&\"\"#!\"\"F+\"\"\"F4F5,(*&-F/6#,$*&F3F4F+F5F5F5,(- %&GAMMAG6#,&F3F5%'lambdaGF5F4-F>6$,&F5F5FAF5F+F5*&FBF5FAF5F5F5F4*&)F+, &*&F3F4FAF5F5F5F4F5-%+WhittakerMG6%,&*&F3F4FAF5F5F5F5,&*&F3F4FAF5F5#F5 F3F5F+F5F5*(FGF5FJF5FAF5F5F5-F>6#FAF4FAF4FDF41F)F+" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%%cdf2G,&\"\"\"F&*&-%&GAMMAG6$%'lambdaG%\"nGF&-F)6#F +!\"\"F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf3G*&-%&GAMMAG6$%\"nG %'lambdaG\"\"\"-F'6#F)!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$\"+& )z)H8&!#5$\"+#)z)H8&F&$\"+=?,n[F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "with(plots):\nseries(diff(GAMMA(n,x)/GAMMA(n),x),n); " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#+/%\"nG,$*&%\"xG!\"\"-%$expG6#,$F' F(\"\"\"F(F-,&*(F'F(-%#lnG6#F'F-F)F-F(*(F'F(F)F-%&gammaGF-F(\"\"#,(*&# F-F5F-*(F'F(F0F5F)F-F-F(*(F'F(F)F-,&*&\"#7F(%#PiGF5F-*&F5F(F4F5F-F-F-* *F)F-,&F0F-F4F-F-F'F(F4F-F(\"\"$,***F)F-FAF-F'F(F;F-F-*(F'F(F)F-,(*&#F -FBF--%%ZetaG6#FBF-F(*(F=F(F>F5F4F-F(*&\"\"'F(F4FBF(F-F-*&#F-FNF-*(F'F (F0FBF)F-F-F(*&#F-F=F-**F)F-,**&FNF-)F0F5F-F-*$)F>F5F-F(*&FNF-)F4F5F-F -*(F=F-F4F-F0F-F-F-F'F(F4F-F-F(\"\"%,,**F)F-FAF-F'F(FFF-F-*(F'F(F)F-,* *&\"$g\"F(F>FgnF-*&#F-FBF-*&FIF-F4F-F-F-*(\"#CF(F>F5F4F5F-*&FboF(F4Fgn F-F-F-*&#F-FboF-*(F'F(F0FgnF)F-F-F(*&#F-F=F-**F)F-FUF-F'F(F;F-F-F-*&#F -F=F-**F)F-,0*&F0F-FYF-F(*(FNF-F0F-FenF-F-*&FYF-F4F-F(*&F5F-)F4FBF-F-* &FgnF-FIF-F-*&F5F-)F0FBF-F-*(FNF-F4F-FWF-F-F-F'F(F4F-F-F(\"\"&-%\"OG6# F-FN" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "plot(log(subs(n=2,G AMMA(n+1,x)-x*GAMMA(n,x)))/x^(1/4),x=1..10);" }}{PARA 13 "" 1 "" {GLPLOT2D 772 772 772 {PLOTDATA 2 "6%-%'CURVESG6$7S7$$\"\"\"\"\"!$\"+6 *G7')*!#67$$\"+)Quh>\"!\"*$!+lo6sKF-7$$\"+tY'oO\"F1$!+er#RT\"!#57$$\"+ ^P#)e:F1$!+//%**e#F97$$\"+f_0_F1$!+$)HkW[F97 $$\"+VsmA@F1$!+_xT]eF97$$\"+)R&G2BF1$!+p@@soF97$$\"+ex@)\\#F1$!+xym5zF 97$$\"+'zP&)o#F1$!+K(o%H*)F97$$\"+[`I%)GF1$!+C5Di**F97$$\"+9vtcIF1$!+, t.'3\"F17$$\"+#Hb3D$F1$!+12'f=\"F17$$\"+Q,xXMF1$!+K68&G\"F17$$\"+3ngLO F1$!+'Ry'z8F17$$\"+3.=/QF1$!+mTsk9F17$$\"+=)3q+%F1$!+js!\\c\"F17$$\"+q 6$)yTF1$!+4t,\\;F17$$\"+89qyVF1$!+&GIgu\"F17$$\"+X/ibXF1$!+!o(>J=F17$$ \"+j'G(\\ZF1$!+PW\"R#>F17$$\"+*elX$\\F1$!+\"pG:,#F17$$\"+JNUF^F1$!+\\X F-@F17$$\"+Et_/`F1$!+?)G]=#F17$$\"+%pdb\\&F1$!+sMptAF17$$\"+eX)Rp&F1$! +`(f^O#F17$$\"+FdrmeF1$!+8kFWCF17$$\"+@,F`gF1$!+!o9#HDF17$$\"+l!**fC'F 1$!+niU;EF17$$\"+OnaMkF1$!+.RB,FF17$$\"+.j(ph'F1$!+bF#Gy#F17$$\"+MK`>o F1$!+f<*G(GF17$$\"+X'R:+(F1$!+Q%oL&HF17$$\"+Q.(e>(F1$!+sN$)QIF17$$\"+G G'>P(F1$!+7x(e6$F17$$\"+K%yWc(F1$!+LQo*>$F17$$\"+81iXxF1$!+X_9yKF17$$ \"+'Qm\\$zF1$!+lCwfLF17$$\"+)['3?\")F1$!+\"*\\_$F17$$\"+qfa+&)F1$!+)fK7g$F17$$\"+z&G9p)F1$!+4V(>o$F17$$\"+$eI2))) F1$!+ZfohPF17$$\"+l%zY0*F1$!+SAiMQF17$$\"+9X/a#*F1$!+&zdy\"RF17$$\"+!* *eBV*F1$!+$z()>*RF17$$\"+8%zCi*F1$!+JKqqSF17$$\"+<*[W!)*F1$!+$RQd9%F17 $$\"#5F*$!+`v/EUF1-%'COLOURG6&%$RGBG$Fgz!\"\"$F*F*F`[l-%+AXESLABELSG6$ Q\"x6\"Q!Fe[l-%%VIEWG6$;F(Ffz%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 126 "for i from 0 to 99 do\n level:=(0.5+i)/100.0;\n \+ q:=evalf(Quantile(Poisson(subs(valnum,lambda)),level));\nprint([level, q]);\nod:\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++]!#7$\"\"$\" \"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++:!#6$\"\"%\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++D!#6$\"\"%\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++N!#6$\"\"&\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++X!#6$\"\"&\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++b!#6$\"\"&\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"+++++l!#6$\"\"&\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++v! #6$\"\"'\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++&)!#6$\"\"' \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++&*!#6$\"\"'\"\"!" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]5!#5$\"\"'\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]6!#5$\"\"'\"\"!" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$$\"++++]7!#5$\"\"'\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]8!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]9!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]:!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++];! #5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]?!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]@!#5$\"\"(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]A!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]B!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]C! #5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]D!#5$\"\") \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]E!#5$\"\")\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]F!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]G!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]H!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]I!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]J!#5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]K! #5$\"\")\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]L!#5$\"\"* \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]M!#5$\"\"*\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]N!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]O!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]P!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]Q!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]R!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]S! #5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]T!#5$\"\"* \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]U!#5$\"\"*\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]V!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]W!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]X!#5$\"\"*\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]Y!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]Z!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++][!# 5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]\\!#5$\"#5\" \"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]]!#5$\"#5\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]^!#5$\"#5\"\"!" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"++++]_!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]`!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]a!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]b!#5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]c!# 5$\"#5\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]d!#5$\"#5\"\" !" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]e!#5$\"#6\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]f!#5$\"#6\"\"!" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"++++]g!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]h!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]i!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]j!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]k!# 5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]l!#5$\"#6\"\" !" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]m!#5$\"#6\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]n!#5$\"#6\"\"!" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"++++]o!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]p!#5$\"#6\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]q!#5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]r!#5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]s!# 5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]t!#5$\"#7\"\" !" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]u!#5$\"#7\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]v!#5$\"#7\"\"!" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"++++]w!#5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]x!#5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]y!#5$\"#7\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]z!#5$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]!)! #5$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]\")!#5$\"#8 \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]#)!#5$\"#8\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]$)!#5$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]%)!#5$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]&)!#5$\"#8\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]')!#5$\"#9\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]()!#5$\"#9\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++])) !#5$\"#9\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]*)!#5$\"#9 \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]!*!#5$\"#9\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]\"*!#5$\"#9\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]#*!#5$\"#:\"\"!" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$$\"++++]$*!#5$\"#:\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]%*!#5$\"#:\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]&*!#5$\"#;\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"++++]'*!#5$\"#;\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++](* !#5$\"#<\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++])*!#5$\"#< \"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"++++]**!#5$\"#>\"\"!" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 704 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidPoisson.txt000066400000000000000000000317571307543307100215340ustar00rootroot00000000000000> restart: > with(Statistics): > poisson_:=RandomVariable(Poisson(lambda)): > pdf:=subs(u=n,ProbabilityFunction(poisson_,u)); > cdf:=simplify(subs(u=n,CDF(poisson_,u))); > mu_:=Mean(poisson_); > var_:=Variance(poisson_); > skew_:=simplify(convert(Skewness(poisson_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(poisson_),GAMMA),symbolic); > qdf:=simplify(Quantile(poisson_,q)); > qdf2:=solve(cdf=q,K); > pdfgr:=[factor(diff(pdf, lambda))]; > cdfgr:=[diff(cdf, lambda)]; > valnum:=lambda=10: > evalf(subs(valnum,n=12,pdf)); > evalf(subs(valnum,n=12,cdf)); > evalf(subs(valnum,n=12,pdfgr)); > evalf(subs(valnum,n=12,cdfgr)); > q:=evalf(Quantile(Poisson(subs(valnum,lambda)),0.95)); > evalf(subs(valnum,n=q,cdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); { 0 n < 0 { pdf := { n { lambda exp(-lambda) { -------------------- otherwise { n! GAMMA(floor(n) + 1, lambda) cdf := --------------------------- GAMMA(floor(n) + 1) mu_ := lambda var_ := lambda 1 skew_ := --------- 1/2 lambda 3 lambda + 1 kurt_ := ------------ lambda qdf := RootOf(floor(_Z) - RootOf(GAMMA(_Z + 1, lambda) _Z + GAMMA(_Z + 1, lambda) - q GAMMA(2 + _Z))) qdf2 := { 0 n < 0 { pdfgr := [{ n ] { lambda exp(-lambda) (n - lambda) { --------------------------------- otherwise { lambda n! floor(n) lambda exp(-lambda) cdfgr := [- ---------------------------] GAMMA(floor(n) + 1) 0.09478033009 0.7915564764 [0.01895606602] [-0.09478033009] q := 15. 0.9512595968 10. 3.162277660 0.3162277660 3.100000000 10. > fsolve(subs(lambda=0.2,GAMMA(n+1,lambda)/GAMMA(n+1))=0.95,n);# 0.5754590269 > plot(map(_x->subs(lambda=30,_x),[GAMMA(floor(n)+1,lambda)/GAMMA(floor( > n)+1),CDF(Gamma(1,lambda),n)]),n=0..100); > cdf:=convert(CDF(Gamma(1,lambda),n),GAMMA); > cdf2:=1-GAMMA(lambda,n)/GAMMA(lambda); > cdf3:=GAMMA(n,lambda)/GAMMA(n); > evalf(subs(lambda=100,n=100,[cdf,cdf2,cdf3])); { { cdf := { { 0 , n < 0 { / | | exp(- n/2) |-exp(n/2) (-GAMMA(2 + lambda) \ + GAMMA(1 + lambda, n) + GAMMA(1 + lambda, n) lambda) /lambda \ |------ - 1| \ 2 / lambda lambda + n WhittakerM(------ + 1, ------ + 1/2, n) + 2 2 /lambda \ \ |------ - 1| | \ 2 / lambda lambda | n WhittakerM(------ + 1, ------ + 1/2, n) lambda| 2 2 / /(GAMMA(lambda) lambda (1 + lambda)) , 0 <= n GAMMA(lambda, n) cdf2 := 1 - ---------------- GAMMA(lambda) GAMMA(n, lambda) cdf3 := ---------------- GAMMA(n) [0.5132987985, 0.5132987982, 0.4867012018] > with(plots): > series(diff(GAMMA(n,x)/GAMMA(n),x),n); / | | exp(-x) / ln(x) exp(-x) exp(-x) gamma\ 2 | - ------- n + |- ------------- - -------------| n + | x \ x x / \ / 2 2\ |Pi gamma | 2 exp(-x) |--- + ------| ln(x) exp(-x) \12 2 / -1/2 -------------- + ---------------------- x x \ / | | | | exp(-x) (ln(x) + gamma) gamma| 3 | - -----------------------------| n + | x / \ / 2 2\ |Pi gamma | exp(-x) (ln(x) + gamma) |--- + ------| \12 2 / -------------------------------------- x / 2 3\ | Pi gamma gamma | exp(-x) |-1/3 Zeta(3) - --------- - ------| \ 12 6 / + ------------------------------------------- x 3 ln(x) exp(-x) - 1/6 -------------- - 1/12 x \ | 2 2 2 | exp(-x) (6 ln(x) - Pi + 6 gamma + 12 gamma ln(x)) gamma| ----------------------------------------------------------| x / / | | 4 | n + | \ / 2 3\ | Pi gamma gamma | exp(-x) (ln(x) + gamma) |-1/3 Zeta(3) - --------- - ------| \ 12 6 / ----------------------------------------------------------- x / 4 2 2 4\ |Pi Pi gamma gamma | exp(-x) |--- + 1/3 Zeta(3) gamma + ---------- + ------| \160 24 24 / + ------------------------------------------------------- x 4 ln(x) exp(-x) - 1/24 -------------- + 1/12 exp(-x) x / 2 2\ 2 2 2 |Pi gamma | (6 ln(x) - Pi + 6 gamma + 12 gamma ln(x)) |--- + ------|/x \12 2 / 2 2 2 - 1/12 exp(-x) (-ln(x) Pi + 6 ln(x) gamma - Pi gamma \ | | 3 3 2 | + 2 gamma + 4 Zeta(3) + 2 ln(x) + 6 gamma ln(x) ) gamma/x| / 5 6 n + O(n ) > plot(log(subs(n=2,GAMMA(n+1,x)-x*GAMMA(n,x)))/x^(1/4),x=1..10); > for i from 0 to 99 do > level:=(0.5+i)/100.0; > q:=evalf(Quantile(Poisson(subs(valnum,lambda)),level)); > print([level,q]); > od: > [0.005000000000, 3.] [0.01500000000, 4.] [0.02500000000, 4.] [0.03500000000, 5.] [0.04500000000, 5.] [0.05500000000, 5.] [0.06500000000, 5.] [0.07500000000, 6.] [0.08500000000, 6.] [0.09500000000, 6.] [0.1050000000, 6.] [0.1150000000, 6.] [0.1250000000, 6.] [0.1350000000, 7.] [0.1450000000, 7.] [0.1550000000, 7.] [0.1650000000, 7.] [0.1750000000, 7.] [0.1850000000, 7.] [0.1950000000, 7.] [0.2050000000, 7.] [0.2150000000, 7.] [0.2250000000, 8.] [0.2350000000, 8.] [0.2450000000, 8.] [0.2550000000, 8.] [0.2650000000, 8.] [0.2750000000, 8.] [0.2850000000, 8.] [0.2950000000, 8.] [0.3050000000, 8.] [0.3150000000, 8.] [0.3250000000, 8.] [0.3350000000, 9.] [0.3450000000, 9.] [0.3550000000, 9.] [0.3650000000, 9.] [0.3750000000, 9.] [0.3850000000, 9.] [0.3950000000, 9.] [0.4050000000, 9.] [0.4150000000, 9.] [0.4250000000, 9.] [0.4350000000, 9.] [0.4450000000, 9.] [0.4550000000, 9.] [0.4650000000, 10.] [0.4750000000, 10.] [0.4850000000, 10.] [0.4950000000, 10.] [0.5050000000, 10.] [0.5150000000, 10.] [0.5250000000, 10.] [0.5350000000, 10.] [0.5450000000, 10.] [0.5550000000, 10.] [0.5650000000, 10.] [0.5750000000, 10.] [0.5850000000, 11.] [0.5950000000, 11.] [0.6050000000, 11.] [0.6150000000, 11.] [0.6250000000, 11.] [0.6350000000, 11.] [0.6450000000, 11.] [0.6550000000, 11.] [0.6650000000, 11.] [0.6750000000, 11.] [0.6850000000, 11.] [0.6950000000, 11.] [0.7050000000, 12.] [0.7150000000, 12.] [0.7250000000, 12.] [0.7350000000, 12.] [0.7450000000, 12.] [0.7550000000, 12.] [0.7650000000, 12.] [0.7750000000, 12.] [0.7850000000, 12.] [0.7950000000, 13.] [0.8050000000, 13.] [0.8150000000, 13.] [0.8250000000, 13.] [0.8350000000, 13.] [0.8450000000, 13.] [0.8550000000, 13.] [0.8650000000, 14.] [0.8750000000, 14.] [0.8850000000, 14.] [0.8950000000, 14.] [0.9050000000, 14.] [0.9150000000, 14.] [0.9250000000, 15.] [0.9350000000, 15.] [0.9450000000, 15.] [0.9550000000, 16.] [0.9650000000, 16.] [0.9750000000, 17.] [0.9850000000, 17.] [0.9950000000, 19.] > openturns-1.9/validation/src/ValidPoutreArticle.mws000066400000000000000000000022641307543307100226420ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "int(int(z^2,x=-a/2.. a/2),z=-a/2..a/2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"#7!\"\"%\" aG\"\"%\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "1e-8/12.;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+LLLL$)!#>" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 38 "subs(a=1e-2,e=1e-3,a^4/12-(a-e)^4/12);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+LL$e'G!#>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "subs(F=10,L=1,E=2.1e11,I_=a^4/12-(a-e)^4/12,a=2e -2,e=1e-3,[I_,F*L^3/3/E/I_]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\" *+]KZ#!#<$\"+Qw(yT'!#7" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidPoutreArticle.txt000066400000000000000000000011251307543307100226460ustar00rootroot00000000000000> int(int(z^2,x=-a/2..a/2),z=-a/2..a/2); 4 a ---- 12 > 1e-8/12.; -9 0.8333333333 10 > subs(a=1e-2,e=1e-3,a^4/12-(a-e)^4/12); -9 0.2865833333 10 > subs(F=10,L=1,E=2.1e11,I_=a^4/12-(a-e)^4/12,a=2e-2,e=1e-3,[I_,F*L^3/3/ > E/I_]); -8 [0.247325000 10 , 0.006417877638] > openturns-1.9/validation/src/ValidProductDistribution.mw000066400000000000000000001420251307543307100237150ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZXLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUStTdGF0aXN0aWNzRidGL0YyRjlGNUZPLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJXBkZjFGJ0YvRjItRjY2LVEqJmNvbG9uZXE7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GLDYlUSRQREZGJ0YvRjItRltvNiQtRiM2Ji1GLDYlUS9SYW5kb21WYXJpYWJsZUYnRi9GMi1GW282JC1GIzYkLUYsNiVRJ05vcm1hbEYnRi9GMi1GW282JC1GIzYlLUkjbW5HRiQ2JFEiMEYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZlby9GTlEsMC4zMzMzMzMzZW1GJy1GY3E2JFEiMUYnRjlGOUY5RmZxLUkmbWZyYWNHRiQ2KC1GLDYlUSJ4RidGL0YyLUYjNiMtRiw2JVEidEYnRi9GMi8lLmxpbmV0aGlja25lc3NHRl5yLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRl5zLyUpYmV2ZWxsZWRHRj1GOUZiby1GNjYtUSlhc3N1bWluZ0YnRjlGO0Y+RkBGQkZERkZGSEZlb0Zmb0Zib0Zfci1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZicUZmcUZfci1GNjYtUSI8RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZcckY1Rk9GYm8tRjY2LVEiI0YnRjlGO0Y+RkBGQkZERkZGSEZlb0Zmby1GLDYlUTBwZGYxJkFzc2lnbjtQREZGJ0YvRjItRltvNiQtRiM2JkZkcC1GW282JC1GIzYlLUYsNiNRIUYnLUYjNiQtRiw2JVEoVW5pZm9ybUYnRi9GMi1GW282JC1GIzYlRlxyRmZxLUZjcTYkUSIyRidGOUY5Rmp0RjlGZnFGX3JGOUY1Rk9GYm8tRiw2JVElcGRmMkYnRi9GMkZqb0ZdcC1GW282JC1GIzYmRmRwLUZbbzYkLUYjNiRGX3VGXnFGOUZmcUZnckY5RmJvRmNzRmJvRmdyRmZzRmJxRmZxRmdyRmlzRlxyRjVGT0Ziby1GLDYlUSRwZGZGJ0YvRjJGam8tRiw2JVEkaW50RidGL0YyLUZbbzYkLUYjNiktRmByNigtRiM2JUZnby1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGZW9GZm9GaXUtRiM2JC1GLDYlUSRhYnNGJy9GMEY9RjktRltvNiRGZXJGOUZqckZcc0Zfc0Zhc0ZmcUZnci1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZicS1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJ0Zmb0ZcckY5LUY2Ni1RIjtGJ0Y5RjtGaXFGQEZCRkRGRkZIRmVvRk0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJiwmKiYiIiMjIiIiRiYtSSZsaW1pdEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYlLUkjRWlHRis2JEYoLCQqJkkieEdGLkYmSSJ0R0YuISIjRicvRjYiIiFJJnJpZ2h0R0YuRighIiIqJi1GMTYkRigsJCokRjVGJkYnRihGJkYnRihGKEkjUGlHRiwjRjtGJiNGKCIiJQ== QyQtSSVwbG90RzYiNiRJJHBkZkdGJS9JInhHRiU7ISIjIiIjIiIi LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdjbzckJCEjPyEiIiQiK0ExQ2EoKiEjNzckJCErJFE2RyI+ISIqJCIrd1c6UTchIzY3JCQhK00hXHAkPSEiKiQiK2hIKW9eIiEjNjckJCErKSlRal48ISIqJCIrelFxJyo9ISM2NyQkISs9S3ZsOyEiKiQiKi02Sk8jISM1NyQkIStDMkchZSIhIiokIisnR0xuI0ghIzY3JCQhKyJ5TzVdIiEiKiQiK0JwbWBOISM2NyQkIStvVSkqPTkhIiokIitMcyJvSyUhIzY3JCQhK1RhN004ISIqJCIrVzlcIkcmISM2NyQkIStlKFEmXDchIiokIitIJEdvVCchIzY3JCQhK2Q0YGk2ISIqJCIrel1JNHkhIzY3JCQhK1FXKmUzIiEiKiQiKigqKUdjIyohIzU3JCQhKSgpPicqKiohIikkIitEcF08NiEjNTckJCEpMCIqSCIqISIpJCIrKilmY1k4ISM1NyQkISk4MyZIKSEiKSQiK1J2VjM7ISM1NyQkISpUd3BgKCEiKiQiKyk0YCEpKT0hIzU3JCQhKlA7YmonISIqJCIrVCkzT0cjISM1NyQkISpaaD0oZSEiKiQiKyZIeFtvIyEjNTckJCEqR1xOKVwhIiokIitjSCgpXEshIzU3JCQhKlpVcz4lISIqJCIrV1hnbVEhIzU3JCQhKkdSWEwkISIqJCIrcjIsQVohIzU3JCQhKiQ9LzhEISIqJCIqaipcLmUhIio3JCQhK0Qnb1czIyEjNSQiKmZcK2AnISIqNyQkISpVJiplbCIhIiokIitcaVhLdSEjNTckJCEqVkpCRSIhIiokIitBIj5QXSkhIzU3JCQhKVduKG8pISIqJCIrUXIpZikqKiEjNTckJCEqdjleYychIzUkIis5VC41NiEiKjckJCEpXmJVVyEiKiQiKzRWZ2w3ISIqNyQkISt2X0YiUSQhIzYkIiskXEJXUCIhIio3JCQhKlgmKio+QiEjNSQiKzopUllfIiEiKjckJCErUWJOKnkiISM2JCIrXnNBRzshIio3JCQhK0RjcmU3ISM2JCIrPVhhbzwhIio3JCQhKnBjUiQqKiEjNiQiKzlhKEgnPSEiKjckJCErRHJ2IUcoISM3JCIpPSRwKT4hIig3JCQhK2l2YkZZISM3JCIrWDp0bkAhIio3JCQhKGVWKD4hIiokIis8S2EyRCEiKjckJCIqYzFkInkhIzckIiszKlJzKEchIio3JCQiKzckKlxQTiEjNyQiKyo+ISpbRiMhIio3JCQiKih6VSRIJyEjNiQiKy56MVg/ISIqNyQkIitEbU5cISohIzckIitwNj0rPiEiKjckJCIrJVJAaFgiISM2JCIqPEkvciIhIik3JCQiK0RySTI/ISM2JCIqbCJRI2UiISIpNyQkIispZXknNEohIzYkIit1MiJ5UyIhIio3JCQiKjBdP0AlISM1JCIrXCwlb0ciISIqNyQkIit2SHo7ayEjNiQiK3M4OD42ISIqNyQkIilmYEAnKSEiKiQiKjBPOysiISIpNyQkIipqK2dDIiEiKiQiK14sRWImKSEjNTckJCIqblopSDshIiokIioxaVtcKCEiKjckJCIrJipIVFc/ISM1JCIrJVFEZWcnISM1NyQkIipLeSplQyEiKiQiKypbQHcpZSEjNTckJCIpOWI6TCEiKSQiKyZbbk51JSEjNTckJCIqMFROOiUhIiokIisoR3VbIVIhIzU3JCQiKjdSVidcISIqJCIrenpbakshIzU3JCQiKjojZmtlISIqJCIrXnYuKm8jISM1NyQkIipgNE5uJyEiKiQiKyhcYmBFIyEjNTckJCIpOj9QdiEiKSQiKzpNJ3opPSEjNTckJCIqek0pPiQpISIqJCIreiQ+K2ciISM1NyQkIikoZmE8KiEiKSQiKy5pXUw4ISM1NyQkIioxTzApKiohIiokIithY0lANiEjNTckJCIrI0cyQTMiISIqJCIrPiYpb0okKiEjNjckJCIrJClHW2s2ISIqJCIqSiNIdnghIzU3JCQiKzd5aF03ISIqJCIrKXpqNVMnISM2NyQkIisoKWZkTDghIiokIitoR0MpRyYhIzY3JCQiKy1GVD05ISIqJCIrdURwS1YhIzY3JCQiK0VwYS06ISIqJCIpInkxYSQhIio3JCQiKmFkKXo6ISIpJCIqcCp6SEghIzU3JCQiK0dVWW87ISIqJCIrJT5ZcE0jISM2NyQkIisyXnJaPCEiKiQiKmxRZyI+ISM1NyQkIitzSUBLPSEiKiQiKydmQWdgIiEjNjckJCIrMiUpMzg+ISIqJCIrTnVBUDchIzY3JCQiIz8hIiIkIitBMUNhKCohIzctJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJVZJRVdHNiQ7JCEjPyEiIiQiIz8hIiIlKERFRkFVTFRHLSUrQVhFU0xBQkVMU0c2JC1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRIng2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2IlEhNiItJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiRTIiEiIi0lKUJPVU5EU19ZRzYjJCIjXSEiIi0lLUJPVU5EU19XSURUSEc2IyQiJSF5JCEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiU/TiEiIi0lKUNISUxEUkVORzYi LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZBLUkjbWlHRiQ2JVEpc2ltcGxpZnlGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1GLDYlUSRwZGZGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUYsNiVRKXN5bWJvbGljRidGL0YyRkEtRj42LVEifkYnRkFGQy9GR0ZFRkhGSkZMRk5GUEZSL0ZWRlQtRj42LVEpYXNzdW1pbmdGJ0ZBRkNGaG5GSEZKRkxGTkZQRlJGaW5GZW4tRiw2JVEieEYnRi9GMi1GPjYtUSI+RidGQUZDRmhuRkhGSkZMRk5GUC9GU1EsMC4yNzc3Nzc4ZW1GJy9GVkZkby1JI21uR0YkNiRRIjBGJ0ZBLUY+Ni1RIjtGJ0ZBRkNGRkZIRkpGTEZORlBGUkZlby1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR0ZULyUmZGVwdGhHRmJwLyUqbGluZWJyZWFrR1EobmV3bGluZUYnRitGNUZlbkZqbkZlbkZdby1GPjYtUSI8RidGQUZDRmhuRkhGSkZMRk5GUEZjb0Zlb0Zmb0Zqb0ZdcEYrRjVGZW5Gam5GZW5GXW8tRj42LVEiPUYnRkFGQ0ZobkZIRkpGTEZORlBGY29GZW9GZm9Gam9GZW5GZW4= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LCQqKC1JI0VpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQiIiIsJCokSSJ4R0YpIiIjI0YrRi9GK0YvRjBJI1BpR0YnIyEiIkYvI0YrIiIl LCQqKC1JI0VpRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQiIiIsJCokSSJ4R0YpIiIjI0YrRi9GK0YvRjBJI1BpR0YnIyEiIkYvI0YrIiIl Error, (in assuming) when calling 'Ei'. Received: 'numeric exception: division by zero' LUknc2VyaWVzRyUqcHJvdGVjdGVkRzYkLUkjRWlHNiRGJEkoX3N5c2xpYkc2IjYkIiIiSSJ1R0YqRi0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KzFJInVHNiIsJkkmZ2FtbWFHJSpwcm90ZWN0ZWRHISIiLUkjbG5HNiRGJ0koX3N5c2xpYkdGJDYjRiNGKCIiISIiIkYvI0YoIiIlIiIjI0YvIiM9IiIkI0YoIiMnKkYxI0YvIiQrJyIiJi1JIk9HRic2I0YvIiIn LUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMtSSVzdWJzR0YkNiQvSSJ4RzYiJCIiIiEjNUkkcGRmR0Yr LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYtSSZsaW1pdEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYlLUkjRWlHRiU2JCIiIiwkKiRJInRHRighIiMkIisrKysrXSEjSS9GMCIiIUkmcmlnaHRHRigkISssOXIlKj4hIzUkIitvLzY0IyohIipGLQ== LUkmbGltaXRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JUkkcGRmR0YnL0kieEdGJyIiIUklbGVmdEdGJw== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder SSlpbmZpbml0eUclKnByb3RlY3RlZEc= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElaGVscEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRJmxpbWl0RidGL0YyL0YzUSdub3JtYWxGJw== JSFH openturns-1.9/validation/src/ValidProductFunction.mws000066400000000000000000000055541307543307100232130ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 219 "restart:\nf0:=x1^3 \+ * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2);\nf1:=exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1);\ncoefficients:=<0.3, 2.9>;\nf:=f0*f1; \nx:=<1.2,2.3,3.4>;\nvalue:=evalf(subs(x1=x[1],x2=x[2],x3=x[3],f));" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f0G,&*&)%#x1G\"\"$\"\"\"-%$sinG6#, &%#x2GF**&$\"#D!\"\"F*%#x3GF*F*F*F**&,&F(F*F/F*\"\"#,&$\"#5F3F**$)F4F7 F*F*F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f1G*&-%$expG6#,&*&%#x1G \"\"\"%#x2GF,!\"\"%#x3GF,F,-%$cosG6#,($\"#5F.F.*&F-F,F/F,F.F+F,F." }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%-coefficientsG-%'RTABLEG6%\"*o%)>N\" -%'MATRIXG6#7$7#$\"\"$!\"\"7#$\"#HF0&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG*(,&*&)%#x1G\"\"$\"\"\"-%$sinG6#,&%#x2GF+ *&$\"#D!\"\"F+%#x3GF+F+F+F+*&,&F)F+F0F+\"\"#,&$\"#5F4F+*$)F5F8F+F+F4F4 F+-%$expG6#,&*&F)F+F0F+F4F5F+F+-%$cosG6#,($F;F4F4*&F0F+F5F+F4F)F+F4" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xG-%'RTABLEG6%\"*3&)>N\"-%'MATRIX G6#7%7#$\"#7!\"\"7#$\"#BF07#$\"#MF0&%'VectorG6#%'columnG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&valueG$!+5VG%=#!\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 82 "gradient:=evalf(subs(x1=x[1],x2=x[2],x3=x[3],));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%)gradientG-%'RTABLEG6%\"*)e)>N\"-%'MATRIXG6#7%7#$\"+29gE5!\"(7#$!+N7 !o#HF07#$!+7Lp^BF0&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 237 "hessian:=evalf[5](subs(x1=x[1],x2=x[2],x3=x[3],<||>));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(hessianG-%'RTABLEG6%\"*+iJN\"-%'MATRIXG6#7%7%$!&^x)! \"#$\"&Sy#!\"\"$\"&)H?F37%F1$!&Sg)F3$!&DQ'F37%F4F9$!&!)f%F3%'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "3 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 135198468 135198508 135198588 135316200 }{RTABLE M7R0 I6RTABLE_SAVE/135198468X*%)anythingG6"6"[gl!#%!!!"#"#$""$!""$"#HF)6" } {RTABLE M7R0 I6RTABLE_SAVE/135198508X*%)anythingG6"6"[gl!#%!!!"$"$$"#7!""$"#BF)$"#MF)6" } {RTABLE M7R0 I6RTABLE_SAVE/135198588X*%)anythingG6"6"[gl!#%!!!"$"$$"+29gE5!"($!+N7!o#HF)$!+7 Lp^BF)6" } {RTABLE M7R0 I6RTABLE_SAVE/135316200X,%)anythingG6"6"[gl!"%!!!#*"$"$$!&^x)!"#$"&Sy#!""$"&)H? F,F*$!&Sg)F,$!&DQ'F,F-F1$!&!)f%F,6" } openturns-1.9/validation/src/ValidProductFunction.txt000066400000000000000000000043641307543307100232220ustar00rootroot00000000000000> restart: > f0:=x1^3 * sin(x2 + 2.5 * x3) - (x1 + x2)^2 / (1.0 + x3^2); > f1:=exp(-x1 * x2 + x3) / cos(1.0 + x2 * x3 - x1); > coefficients:=<0.3, 2.9>; > f:=f0*f1; > x:=<1.2,2.3,3.4>; > value:=evalf(subs(x1=x[1],x2=x[2],x3=x[3],f)); 2 3 (x1 + x2) f0 := x1 sin(x2 + 2.5 x3) - ---------- 2 1.0 + x3 exp(-x1 x2 + x3) f1 := ---------------------- cos(-1.0 - x2 x3 + x1) [0.3] coefficients := [ ] [2.9] / 2\ | 3 (x1 + x2) | |x1 sin(x2 + 2.5 x3) - ----------| exp(-x1 x2 + x3) | 2 | \ 1.0 + x3 / f := ---------------------------------------------------- cos(-1.0 - x2 x3 + x1) [1.2] [ ] x := [2.3] [ ] [3.4] value := -21.84284310 > gradient:=evalf(subs(x1=x[1],x2=x[2],x3=x[3], ff(f,x3)>)); [102.6601407 ] [ ] gradient := [-292.6801235] [ ] [-235.1693312] > hessian:=evalf[5](subs(x1=x[1],x2=x[2],x3=x[3],< iff(diff(f,x1),x2),diff(diff(f,x1),x3)>| (f,x2),x2),diff(diff(f,x2),x3)>| 2),diff(diff(f,x3),x3)>>)); [-877.51 2784.0 2029.8 ] [ ] hessian := [2784.0 -8604.0 -6382.5] [ ] [2029.8 -6382.5 -4598.0] > openturns-1.9/validation/src/ValidQuadraticFunction.mws000066400000000000000000000055471307543307100235120ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 397 "restart:\nwith(Line arAlgebra):\ncenter:=<-1,1/2,1>;\nconst:=<-1,2>;\nLinear:=<<1,2,3>|<4, 5,6>>;\nQuadratic:=array(1..2):\nQuadratic[1]:=<<7,8,9>|<8,10,11>|<9,1 1,12>>;\nQuadratic[2]:=<<-7,-8,-9>|<-8,-10,-11>|<-9,-11,-12>>;\nPoint: =<7,8,9>;\nres:=const+Transpose(Linear).(Point-center)+1/2*;\nevalf(res);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'centerG-%'RTABLEG6%\"*?27N\"-%'MATRIXG6#7%7#!\"\"7##\"\"\"\" \"#7#F1&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&con stG-%'RTABLEG6%\"*g72O\"-%'MATRIXG6#7$7#!\"\"7#\"\"#&%'VectorG6#%'colu mnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'LinearG-%'RTABLEG6%\"*[09O\" -%'MATRIXG6#7%7$\"\"\"\"\"%7$\"\"#\"\"&7$\"\"$\"\"'%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*QuadraticG6#\"\"\"-%'RTABLEG6%\"*gK;O\"- %'MATRIXG6#7%7%\"\"(\"\")\"\"*7%F2\"#5\"#67%F3F6\"#7%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*QuadraticG6#\"\"#-%'RTABLEG6%\"*# \\nh8-%'MATRIXG6#7%7%!\"(!\")!\"*7%F2!#5!#67%F3F6!#7%'MatrixG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%&PointG-%'RTABLEG6%\"*g6$e8-%'MATRIX G6#7%7#\"\"(7#\"\")7#\"\"*&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$resG-%'RTABLEG6%\"*+!\\m8-%'MATRIXG6#7$7##\"&01\"\" \"%7##!%V**F0&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# -%'RTABLEG6%\"*k$fm8-%'MATRIXG6#7$7#$\"+++D^E!\"'7#$!+++v&[#F.&%'Vecto rG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "0 0 0" 103 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 135120720 136071260 136140548 136163260 136167492 135831160 136649000 136659364 }{RTABLE M7R0 I6RTABLE_SAVE/135120720X*%)anythingG6"6"[gl!#%!!!"$"$!""#"""""#F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136071260X*%)anythingG6"6"[gl!#%!!!"#"#!""""#F& } {RTABLE M7R0 I6RTABLE_SAVE/136140548X,%)anythingG6"6"[gl!"%!!!#'"$"#"""""#""$""%""&""'F& } {RTABLE M7R0 I6RTABLE_SAVE/136163260X,%)anythingG6"6"[gl!"%!!!#*"$"$""("")""*F("#5"#6F)F+"#7 F& } {RTABLE M7R0 I6RTABLE_SAVE/136167492X,%)anythingG6"6"[gl!"%!!!#*"$"$!"(!")!"*F(!#5!#6F)F+!#7 F& } {RTABLE M7R0 I6RTABLE_SAVE/135831160X*%)anythingG6"6"[gl!#%!!!"$"$""("")""*F& } {RTABLE M7R0 I6RTABLE_SAVE/136649000X*%)anythingG6"6"[gl!#%!!!"#"##"&01"""%#!%V**F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136659364X*%)anythingG6"6"[gl!#%!!!"#"#$"+++D^E!"'$!+++v&[#F)F& } openturns-1.9/validation/src/ValidQuadraticFunction.txt000066400000000000000000000037221307543307100235140ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > center:=<-1,1/2,1>; > const:=<-1,2>; > Linear:=<<1,2,3>|<4,5,6>>; > Quadratic:=array(1..2): > Quadratic[1]:=<<7,8,9>|<8,10,11>|<9,11,12>>; > Quadratic[2]:=<<-7,-8,-9>|<-8,-10,-11>|<-9,-11,-12>>; > Point:=<7,8,9>; > res:=const+Transpose(Linear).(Point-center)+1/2* r).Quadratic[1].(Point-center),Transpose(Point-center).Quadratic[2].(P > oint-center)>; > evalf(res); [-1 ] [ ] center := [1/2] [ ] [ 1 ] [-1] const := [ ] [ 2] [1 4] [ ] Linear := [2 5] [ ] [3 6] [7 8 9] [ ] Quadratic[1] := [8 10 11] [ ] [9 11 12] [-7 -8 -9] [ ] Quadratic[2] := [-8 -10 -11] [ ] [-9 -11 -12] [7] [ ] Point := [8] [ ] [9] [10605/4] res := [ ] [-9943/4] [2651.250000 ] [ ] [-2485.750000] > openturns-1.9/validation/src/ValidQuadraticTaylor.mws000066400000000000000000000101501307543307100231610ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1319 "restart:\nwith(Lin earAlgebra):\nPoint:=<1,2>:\ncenter:=Vector(Point):\n\"center\",evalf( center);\nf:=:\nconst:=subs (x1=Point[1],x2=Point[2],f):\n\"const\",evalf(const);\nDf:=di ff(_x,x1),f)|map(_x->diff(_x,x2),f)>:\nLinear:=Transpose(subs(x1=Point [1],x2=Point[2],Df)):\n\"linear\",evalf(Linear);\nQuadratic:=array(1.. 3):\nQuadratic[1]:=subs(x1=Point[1],x2=Point[2],<|>):\nQuadratic[2]:=subs(x1=Point[1],x2=Point[2],<|>):\nQuadratic[3]:=subs(x1=Point[1],x2=Point[2],<|>):\n\"quadratic\",map(evalf,Quadratic);\nres:=const+Trans pose(Linear).(Point-center)+1/2*:\nevalf(res);\nPoint [1]:=Point[1]+0.4:\nPoint[2]:=Point[2]-0.4/2:\nevalf(Point);\nres:=con st+Transpose(Linear).(Point-center)+1/2*:\nevalf(res) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q'center6\"-%'RTABLEG6%\"*/&3c8-% 'MATRIXG6#7$7#$\"\"\"\"\"!7#$\"\"#F0&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q&const6\"-%'RTABLEG6%\"*gK*e8-%'MATRIXG6#7%7#$ \"+oU(H4*!#57#$!+m\\#***)*F07#$\"+^?h$\\\"F0&%'VectorG6#%'columnG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6$Q'linear6\"-%'RTABLEG6%\"*+*Hi8-%'MATR IXG6#7$7%$\"+oU(H4*!#5$!+\"3+7T\"F0$\"+^?h$\\\"F07%$!+l$o9;%F0F1$!+=MN *[#F0%'MatrixG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q*quadratic6\"K%'vec torG6#7%-%'RTABLEG6%\"*/\\HO\"-%'MATRIXG6#7$7$$\"\"!F3$!+l$o9;%!#57$F4 $!+oU(H4*F6%'MatrixG-F*6%\"*C]HO\"-F.6#7$7$$\"+m\\#***)*F6FBFAF:-F*6% \"*ckHO\"-F.6#7$7$$\"+^?h$\\\"F6$!+=MN*[#F67$FM$\"+qa'H)RF6F:Q(pprint0 F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*['Ho8-%'MATRIXG6# 7%7#$\"+oU(H4*!#57#$!+m\\#***)*F.7#$\"+^?h$\\\"F.&%'VectorG6#%'columnG " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*!)*4o8-%'MATRIXG6#7 $7#$\"#9!\"\"7#$\"+++++=!\"*&%'VectorG6#%'columnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"*7BLP\"-%'MATRIXG6#7%7#$\"+j:Nr8!\"*7#$!+ $[mT)**!#57#$\"+-TA()HF2&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 167 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 135608504 135893260 136229900 136294904 136295024 136296456 136829648 136809980 137332312 }{RTABLE M7R0 I6RTABLE_SAVE/135608504X*%)anythingG6"6"[gl!#%!!!"#"#$"""""!$""#F)F& } {RTABLE M7R0 I6RTABLE_SAVE/135893260X*%)anythingG6"6"[gl!#%!!!"$"$$"+oU(H4*!#5$!+m\#***)*F)$ "+^?h$\"F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136229900X,%)anythingG6"6"[gl!"%!!!#'"#"$$"+oU(H4*!#5$!+l$o9;%F)$ !+"3+7T"F)F,$"+^?h$\"F)$!+=MN*[#F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136294904X,%)anythingG6"6"[gl!"%!!!#%"#"#$""!F($!+l$o9;%!#5F)$!+o U(H4*F+F& } {RTABLE M7R0 I6RTABLE_SAVE/136295024X,%)anythingG6"6"[gl!"%!!!#%"#"#$"+m\#***)*!#5F'F'F'F& } {RTABLE M7R0 I6RTABLE_SAVE/136296456X,%)anythingG6"6"[gl!"%!!!#%"#"#$"+^?h$\"!#5$!+=MN*[#F)F *$"+qa'H)RF)F& } {RTABLE M7R0 I6RTABLE_SAVE/136829648X*%)anythingG6"6"[gl!#%!!!"$"$$"+oU(H4*!#5$!+m\#***)*F)$ "+^?h$\"F)F& } {RTABLE M7R0 I6RTABLE_SAVE/136809980X*%)anythingG6"6"[gl!#%!!!"#"#$"#9!""$"+++++=!"*F& } {RTABLE M7R0 I6RTABLE_SAVE/137332312X*%)anythingG6"6"[gl!#%!!!"$"$$"+j:Nr8!"*$!+$[mT)**!#5$" +-TA()HF,F& } openturns-1.9/validation/src/ValidQuadraticTaylor.txt000066400000000000000000000055571307543307100232110ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > Point:=<1,2>: > center:=Vector(Point): > "center",evalf(center); > f:=: > const:=subs(x1=Point[1],x2=Point[2],f): > "const",evalf(const); > Df:=diff(_x,x1),f)|map(_x->diff(_x,x2),f)>: > Linear:=Transpose(subs(x1=Point[1],x2=Point[2],Df)): > "linear",evalf(Linear); > Quadratic:=array(1..3): > Quadratic[1]:=subs(x1=Point[1],x2=Point[2],< ff(diff(f[1],x1),x2)>|> > ): > Quadratic[2]:=subs(x1=Point[1],x2=Point[2],< ff(diff(f[2],x1),x2)>|> > ): > Quadratic[3]:=subs(x1=Point[1],x2=Point[2],< ff(diff(f[3],x1),x2)>|> > ): > "quadratic",map(evalf,Quadratic); > res:=const+Transpose(Linear).(Point-center)+1/2* r).Quadratic[1].(Point-center),Transpose(Point-center).Quadratic[2].(P > oint-center),Transpose(Point-center).Quadratic[3].(Point-center)>: > evalf(res); > Point[1]:=Point[1]+0.4: > Point[2]:=Point[2]-0.4/2: > evalf(Point); > res:=const+Transpose(Linear).(Point-center)+1/2* r).Quadratic[1].(Point-center),Transpose(Point-center).Quadratic[2].(P > oint-center),Transpose(Point-center).Quadratic[3].(Point-center)>: > evalf(res); [1.] "center", [ ] [2.] [0.9092974268 ] [ ] "const", [-0.9899924966] [ ] [0.1493612051 ] [0.9092974268 -0.1411200081 0.1493612051 ] "linear", [ ] [-0.4161468365 -0.1411200081 -0.2489353418] [[ 0. -0.4161468365] "quadratic", [[ ], [[-0.4161468365 -0.9092974268] [0.9899924966 0.9899924966] [ ], [0.9899924966 0.9899924966] [0.1493612051 -0.2489353418]] [ ]] [-0.2489353418 0.3982965470 ]] [0.9092974268 ] [ ] [-0.9899924966] [ ] [0.1493612051 ] [ 1.4 ] [ ] [1.800000000] [ 1.371351563 ] [ ] [-0.9984166483] [ ] [0.2987224102 ] > openturns-1.9/validation/src/ValidRandomMixture.mws000066400000000000000000000215621307543307100226600ustar00rootroot00000000000000{VERSION 6 0 "Linux" "6.0" } {USTYLETAB {PSTYLE "Ordered List 1" -1 200 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 } {PSTYLE "Ordered List 2" -1 201 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 36 2 0 2 2 -1 1 }{PSTYLE "Ordered List 3" -1 202 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 72 2 0 2 2 -1 1 }{PSTYLE "Ordered List 4" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 108 2 0 2 2 -1 1 }{PSTYLE "Ordered List 5" -1 204 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 144 2 0 2 2 -1 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 8 8 2 0 2 0 2 2 -1 1 }{PSTYLE "Annotatio n Title" -1 205 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Fixed Width" -1 17 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Line Prin ted Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 " Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Help" -1 10 1 {CSTYLE "" -1 -1 "Courier" 1 9 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Dash Item" -1 16 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 1 2 2 2 1 0 0 1 }3 1 0 0 12 12 2 0 2 0 2 2 -1 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 " Courier" 1 10 255 0 255 1 2 2 2 2 2 1 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 4 2 0 2 0 2 2 -1 1 }{PSTYLE "Bullet I tem" -1 15 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 4" -1 20 1 {CSTYLE "" -1 -1 "Times" 1 10 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Headin g 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 8 2 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "List Item" -1 14 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 3 3 2 0 2 0 2 2 -1 1 }{CSTYLE "Annotation Text" -1 200 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Maple Name" -1 35 "Times" 1 12 104 64 92 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold" -1 5 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Menus" -1 36 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Italic" -1 3 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Normal" -1 30 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Text" -1 28 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Nonterminal" -1 24 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Heading" -1 26 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic" -1 42 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Variable" -1 25 "Courier" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Italic Bold" -1 40 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "Default" -1 38 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Italic" -1 43 " Times" 1 12 0 0 0 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Maple Input" -1 0 "C ourier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Bold Smal l" -1 10 "Times" 1 1 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Sma ll" -1 7 "Times" 1 1 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Page Number " -1 33 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Output Labe ls" -1 29 "Times" 1 8 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Plot Title " -1 27 "Times" 1 10 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Emphas ized" -1 22 "Times" 1 12 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math Symbol 2" -1 16 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Ma ple Comment" -1 21 "Courier" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Maple Input Placeholder" -1 201 "Courier" 1 12 200 0 200 1 2 1 2 2 1 2 0 0 0 1 }{CSTYLE "Code" -1 202 "Courier" 1 12 255 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Inert Output" -1 203 "Times" 1 12 144 144 144 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "2D Math Italic Small" -1 204 "Times" 1 1 0 0 0 1 1 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Comment" -1 18 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined Bold" -1 41 "Tim es" 1 12 0 0 0 1 1 1 2 2 2 2 0 0 0 1 }{CSTYLE "Copyright" -1 34 "Times " 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Hyperlink" -1 17 "Times" 1 12 0 128 128 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Underlined" -1 44 "Times" 1 12 0 0 0 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Prompt" -1 1 "Couri er" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "2D Input" -1 19 "Times" 1 12 255 0 0 1 2 2 2 2 1 2 0 0 0 1 }{CSTYLE "Header and Footer" -1 205 "Ti mes" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Text" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Help Notes" -1 37 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Help Bold" -1 39 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "Equation Label" -1 207 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 0 0 0 1 }{CSTYLE "LaTeX" -1 32 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }{CSTYLE "Popup" -1 31 "Times" 1 12 0 128 128 1 1 2 1 2 2 2 0 0 0 1 }{CSTYLE "Dictionary Hyperlink" -1 45 "Times " 1 12 147 0 15 1 2 2 1 2 2 2 0 0 0 1 }{CSTYLE "Help Fixed" -1 23 "Cou rier" 1 10 0 0 0 1 2 2 2 2 2 2 0 0 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" } {MPLTEXT 1 0 18 "with(Statistics):\n" }{MPLTEXT 1 0 45 "pdf1:=PDF(Rand omVariable(Uniform(-1, 3)),x):\n" }{MPLTEXT 1 0 45 "pdf2:=PDF(RandomVa riable(Uniform(-1, 3)),x):\n" }{MPLTEXT 1 0 54 "pdf_lin:=PDF(RandomVar iable(Triangular(-2, 6, 2)),t);\n" }{MPLTEXT 1 0 57 "p_lin:=int(pdf1*s ubs(x=t-x,pdf2),x=-infinity..infinity);\n" }{MPLTEXT 1 0 37 "evalf(sub s(t=0.5, [p_lin, pdf_lin]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I*piece wiseG%*protectedG6)2I\"tG6\"!\"#\"\"!1F'\"\"#,&#\"\"\"\"\")F/F'#F/\"#; 1F'\"\"',&#\"\"$F0F/F'#!\"\"F2F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I*p iecewiseG%*protectedG6*1I\"tG6\"!\"#\"\"!1F'\"\"#,&#\"\"\"\"\")F/F'#F/ \"#;1F'\"\"',&#\"\"$F0F/F'#!\"\"F22F4F'F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"+++]i:!#5F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "pdf1:=PDF(RandomVariable(Normal(0, 1)),x):\n" }{MPLTEXT 1 0 43 " pdf2:=PDF(RandomVariable(Normal(1, 2)),x):\n" }{MPLTEXT 1 0 44 "pdf3:= PDF(RandomVariable(Normal(-2, 2)),x):\n" }{MPLTEXT 1 0 47 "pdf_lin:=PD F(RandomVariable(Normal(-1, 3)),t);\n" }{MPLTEXT 1 0 67 "pdf12:=subs(t =x,int(pdf1*subs(x=t-x,pdf2),x=-infinity..infinity)):\n" }{MPLTEXT 1 0 68 "p_lin:=simplify(int(pdf12*subs(x=t-x,pdf3),x=-infinity..infinity ));\n" }{MPLTEXT 1 0 37 "evalf(subs(t=0.5, [p_lin, pdf_lin]));" }} {PARA 11 "" 1 "" {XPPMATH 20 ",$*(\"\"##\"\"\"F$I#PiG%*protectedG#!\" \"F$-I$expG6$F(I(_syslibG6\"6#,$*$,&I\"tGF/F&F&F&F$#F*\"#=F&#F&\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 ",$*(\"\"##\"\"\"F$I#PiG%*protectedG#! \"\"F$-I$expG6$F(I(_syslibG6\"6#,$*$,&I\"tGF/F&F&F&F$#F*\"#=F&#F&\"\"' " }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"+*3^N<\"!#5F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "with(Statistics):\n" }{MPLTEXT 1 0 45 "pd f1:=PDF(RandomVariable(Exponential(1)),x):\n" }{MPLTEXT 1 0 45 "pdf2:= PDF(RandomVariable(Exponential(1)),x):\n" }{MPLTEXT 1 0 45 "pdf_lin:=P DF(RandomVariable(Gamma(1, 2)),t);\n" }{MPLTEXT 1 0 57 "p_lin:=int(pdf 1*subs(x=t-x,pdf2),x=-infinity..infinity);\n" }{MPLTEXT 1 0 37 "evalf( subs(t=0.5, [p_lin, pdf_lin]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I*pi ecewiseG%*protectedG6%2I\"tG6\"\"\"!F)*&F'\"\"\"-I$expG6$F$I(_syslibGF (6#,$F'!\"\"F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "-I*piecewiseG%*protect edG6&1I\"tG6\"\"\"!F)2F)F'*&F'\"\"\"-I$expG6$F$I(_syslibGF(6#,$F'!\"\" F," }}{PARA 11 "" 1 "" {XPPMATH 20 "7$$\"+)H`E.$!#5F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {XPPEDIT 19 1 "" "%#%?G" }}}} {MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }openturns-1.9/validation/src/ValidRayleigh.mws000066400000000000000000000114351307543307100216240ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1016 "restart:\nwith(Sta tistics):\nassume(u>0,sigma>0):\nrayleigh_:=RandomVariable(Rayleigh(si gma)):\npdf:=subs(u=x-_gamma,PDF(rayleigh_,u));\nddf:=factor(diff(pdf, x));\ncdf:=subs(u=x-_gamma,CDF(rayleigh_,u));\ncf:=CharacteristicFunct ion(rayleigh_,x)*exp(I*x*_gamma);\nmu_:=_gamma+Mean(rayleigh_);\nevalf [25](mu_);\nvar_:=Variance(rayleigh_);\nevalf[25](sqrt(var_));\nevalf[ 25](var_);\nskew_:=simplify((Skewness(rayleigh_)));\nevalf[25](skew_); \nkurt_:=simplify((Kurtosis(rayleigh_)));\nevalf[25](kurt_);\nqdf:=_ga mma+Quantile(rayleigh_,p);\npdfgr:=map(factor,[diff(pdf,sigma),diff(pd f,_gamma)]);\ncdfgr:=map(factor,[diff(cdf,sigma),diff(cdf,_gamma)]);\n valnum:=sigma=2.5,_gamma=-0.5;\nevalf(subs(valnum,x=1,ddf));\nevalf(su bs(valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum, x=1,cf));\nevalf(subs(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(subs(valn um,x=1,cdfgr));\nevalf(subs(valnum,p=0.95,qdf));\nevalf(subs(valnum,mu _));\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,skew_));\neva lf(subs(valnum,kurt_));\nevalf(subs(valnum,var_));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$pdfG*(,&%\"xG\"\"\"%'_gammaG!\"\"F(%'sigma|irG!\"# -%$expG6#,$*(\"\"#F*F&F2F+F,F*F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $ddfG,$**-%$expG6#,$*(\"\"#!\"\",&%\"xG\"\"\"%'_gammaGF-F,%'sigma|irG! \"#F-F0,(F1F-F/F0F2F-F0,(F1F-F/F0F2F0F0F2!\"%F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG6#,$*(\"\"#!\"\",&%\"xGF&%'_gam maGF-F,%'sigma|irG!\"#F-F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG*& -%$SumG6$**-%&GAMMAG6#,&\"\"\"F.*&\"\"#!\"\"%\"kGF.F.F.),$*&F.F.*&F0F. )%'sigma|irGF0F.F1F.,$*&F0F1F2F.F1F.)*&%\"xGF.^#F.F.F2F.-%*factorialG6 #F2F1/F2;\"\"!%)infinityGF.-%$expG6#*(F=F.%'_gammaGF.F>F.F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\"\"**\"\"#!\"\"%'sigma| irGF'F)#F'F)%#PiGF,F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&%'_gammaG\" \"\"*&$\":#)y?^-]:t89LD\"!#CF%%'sigma|irGF%F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&,&\"\"#\"\"\"*&F'!\"\"%#PiGF(F*F()%'sigma|irG F'F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\":d$R4`N.ivPO^l!#D\"\"\" %'sigma|irGF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&$\"9y'o2Q.^?tO? H%!#C\"\"\")%'sigma|irG\"\"#F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% &skew_G,$*.\"\"#\"\"\"F'#F(F'%#PiGF),&\"\"$!\"\"F*F(F(,&\"\"%F-F*F(F-, &\"\")F(*&F'F(F*F(F-#F-F'F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":q*= >Qr$*=yl56j!#D" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$*&,&\"#K! \"\"*&\"\"$\"\"\")%#PiG\"\"#F,F,F,,&\"\"%F)F.F,!\"#F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\":i'[G1Qwo+$*3XK!#C" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%'_gammaG\"\"\"*$,$*(\"\"#F')%'sigma|irGF+F'-% #lnG6#,&F'F'%\"pG!\"\"F'F3#F'F+F'" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#> %&pdfgrG7$**,&%\"xG\"\"\"%'_gammaG!\"\"F)-%$expG6#,$*(\"\"#F+F'F1%'sig ma|irG!\"#F+F),**&F1F))F2F1F)F+*$)F(F1F)F)*(F1F)F(F)F*F)F+*$)F*F1F)F)F )F2!\"&**F,F),(F*F+F(F)F2F+F),(F*F+F(F)F2F)F)F2!\"%" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%&cdfgrG7$,$*(,&%\"xG\"\"\"%'_gammaG!\"\"\"\"#%'sigm a|irG!\"$-%$expG6#,$*(F-F,F(F-F.!\"#F,F*F,,$*(F(F*F.F5F0F*F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'valnumG6$/%'sigma|irG$\"#D!\"\"/%'_gammaG $!\"&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+lp;`&)!#6" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"+2&[Y+#!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$\"+')yHZ;!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$!+RI:v:!#5$\"+kl@ HCF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+@%\\]J\"!#5$!+lp;`&)!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!+/\"*y-7!#5$!+2&[Y+#F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+xqO>c!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+U`GLE!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+W4%yj\"!\"* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+)f16J'!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+%H*3XK!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+c H_#o#!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 152 "cf2:=proc(x, \+ sigma, _gamma)\n local t;\n t := sigma * x / sqrt(2);\n (1 - t * (2 * dawson(t) - I * exp(-t * t) * sqrt(Pi))) * exp(I * _gamma * x)\nend : " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "evalf(cf2(1.0, 2.5, \+ -0.5));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$!+SI:v:!#5$\"+kl@HCF&" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "3 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidRayleigh.txt000066400000000000000000000135711307543307100216400ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u>0,sigma>0): > rayleigh_:=RandomVariable(Rayleigh(sigma)): > pdf:=subs(u=x-_gamma,PDF(rayleigh_,u)); > ddf:=factor(diff(pdf,x)); > cdf:=subs(u=x-_gamma,CDF(rayleigh_,u)); > cf:=CharacteristicFunction(rayleigh_,x)*exp(I*x*_gamma); > mu_:=_gamma+Mean(rayleigh_); > evalf[25](mu_); > var_:=Variance(rayleigh_); > evalf[25](sqrt(var_)); > evalf[25](var_); > skew_:=simplify((Skewness(rayleigh_))); > evalf[25](skew_); > kurt_:=simplify((Kurtosis(rayleigh_))); > evalf[25](kurt_); > qdf:=_gamma+Quantile(rayleigh_,p); > pdfgr:=map(factor,[diff(pdf,sigma),diff(pdf,_gamma)]); > cdfgr:=map(factor,[diff(cdf,sigma),diff(cdf,_gamma)]); > valnum:=sigma=2.5,_gamma=-0.5; > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(subs(valnum,p=0.95,qdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); 2 (x - _gamma) (x - _gamma) exp(- -------------) 2 2 sigma~ pdf := --------------------------------- 2 sigma~ 2 (x - _gamma) ddf := - exp(- -------------) (-_gamma + x - sigma~) 2 2 sigma~ / 4 (-_gamma + x + sigma~) / sigma~ / 2 (x - _gamma) cdf := 1 - exp(- -------------) 2 2 sigma~ / / 1 \(- k/2) k\ |infinity GAMMA(1 + k/2) |---------| (x I) | | ----- | 2| | | \ \2 sigma~ / | cf := | ) ----------------------------------------| | / k! | | ----- | \ k = 0 / exp(x _gamma I) 1/2 1/2 sigma~ 2 Pi mu_ := _gamma + ----------------- 2 _gamma + 1.253314137315500251207882 sigma~ / Pi \ 2 var_ := |2 - ----| sigma~ \ 2 / 0.6551363775620335530939357 sigma~ 2 0.429203673205103380768678 sigma~ 1/2 1/2 2 2 Pi (-3 + Pi) skew_ := - ----------------------- 1/2 (-4 + Pi) (8 - 2 Pi) 0.6311106578189371381918970 2 -32 + 3 Pi kurt_ := - ----------- 2 (-4 + Pi) 3.245089300687638062848662 2 1/2 qdf := _gamma + (-2 sigma~ ln(1 - p)) 2 (x - _gamma) pdfgr := [(x - _gamma) exp(- -------------) 2 2 sigma~ 2 2 2 / 5 (-2 sigma~ + x - 2 x _gamma + _gamma ) / sigma~ , / 2 (x - _gamma) exp(- -------------) (-_gamma + x - sigma~) 2 2 sigma~ / 4 (-_gamma + x + sigma~) / sigma~ ] / 2 2 (x - _gamma) (x - _gamma) exp(- -------------) 2 2 sigma~ cdfgr := [- ----------------------------------, 3 sigma~ 2 (x - _gamma) (x - _gamma) exp(- -------------) 2 2 sigma~ - ---------------------------------] 2 sigma~ valnum := sigma~ = 2.5, _gamma = -0.5 0.08553166965 0.2004648507 0.1647297886 -0.1575153039 + 0.2429216564 I [-0.1315049421, -0.08553166965] [-0.1202789104, -0.2004648507] 5.619367077 2.633285342 1.637840944 0.6311106598 3.245089294 2.682522956 > cf2:=proc(x, sigma, _gamma) > local t; > t := sigma * x / sqrt(2); > (1 - t * (2 * dawson(t) - I * exp(-t * t) * sqrt(Pi))) * exp(I * > _gamma * x) > end: > evalf(cf2(1.0, 2.5, -0.5)); -0.1575153040 + 0.2429216564 I > openturns-1.9/validation/src/ValidSORM.mws000066400000000000000000000105751307543307100206440ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 507 "restart:\nwith(Line arAlgebra):\nDigits:=30:\nG:=-F_*L_^3/(6*E_*I_)-s;\nT:=E_=E_moy+E_sd*u 1,F_=F_moy+F_sd*u2,L_=L_moy+L_sd*u3,I_=I_moy+I_sd*u4;\ng:=subs(T,G):\n L:=1/2*(u1^2+u2^2+u3^2+u4^2)-lambda*g:\nsys:=diff(L,u1),diff(L,u2),dif f(L,u3),diff(L,u4),diff(L,lambda):\n#sol:=solve(\{sys\},\{u1,u2,u3,u4, lambda\});\nnum:=E_moy=50,E_sd=1,F_moy=1,F_sd=1,L_moy=10,L_sd=1,I_moy= 5,I_sd=1,s=-3/2;\nsolnum:=fsolve(subs(num,\{sys\}),\{u1,u2,u3,u4,lambd a\}):\nsubs(solnum,[u1,u2,u3,u4,lambda]);\nbeta:=subs(solnum,sqrt(u1^2 +u2^2+u3^2+u4^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"GG,&*,\"\"'! \"\"%#F_G\"\"\"%#L_G\"\"$%#E_GF(%#I_GF(F(%\"sGF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"TG6&/%#E_G,&%&E_moyG\"\"\"*&%%E_sdGF*%#u1GF*F*/%#F_ G,&%&F_moyGF**&%%F_sdGF*%#u2GF*F*/%#L_G,&%&L_moyGF**&%%L_sdGF*%#u3GF*F */%#I_G,&%&I_moyGF**&%%I_sdGF*%#u4GF*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$numG6+/%&E_moyG\"#]/%%E_sdG\"\"\"/%&F_moyGF+/%%F_sdGF+/%&L_mo yG\"#5/%%L_sdGF+/%&I_moyG\"\"&/%%I_sdGF+/%\"sG#!\"$\"\"#" }}{PARA 12 " " 1 "" {XPPMATH 20 "6#7'$!??.E-9TL`Q')=8a.J!#J$\"?ZSw(R'))y]b)Gw;%>%)! #I$\"?[D:&Qx2JH)\\by.aWF)$!?QCX8nN?x0%['*yBK$F)$!?#y745'*)4enqT;(Q.\"! #H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%betaG$\"?B4Q>Z'=-zH1%\\D45!#H " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 177 "grad_g:=:\nhess_g:=diff(_x,u1),grad_g) |map(_x->diff(_x,u2),grad_g)|map(_x->diff(_x,u3),grad_g)|map(_x->diff( _x,u4),grad_g)>:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 87 "map(_x- >evalf(subs(num,solnum,_x)),grad_g):\nmap(_x->evalf(subs(num,solnum,_x )),hess_g):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 173 "M:=-(Diagon alMatrix(<1|1|1|1>)-grad_g.Transpose(grad_g)/Norm(grad_g,2,conjugate=f alse)^2).hess_g/Norm(grad_g,2,conjugate=false):\nMnum:=map(_x->evalf(s ubs(num,solnum,_x)),M);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%MnumG-%' RTABLEG6%\"*sR_O\"-%'MATRIXG6#7&7&$\"??$zfe#RuHPn&yj\"[h!#L$!?7\"HUl7; GVi6;J=;\"!#J$!?55/z;ZM,+$)[GtLdF0$!?w$))RUlZG5X.0<\"RrF07&$\"?&)*fYl& 3?Nikf)z'y:!#M$!?]=b2.i/]2`Yj;x8!#I$\"?/lh&H4DVhI5/rab\"F3$\"?.(*=J19q \"o\"H[&Hn$>F37&$\"?_c!3F([\"G#4lU%G:N)!#N$\"?#))Qu1![7eKVY%)Rn;F>$!?R i.2:s2(H9>_N@S$F3$\"?%)>6&ob!yE=[0#oX-\"F37&$!?7Jg7yvyx=R6`hHiFF$!?$)H ofjx\")\\(4sZaPC\"F>$!?a*[D[*Q')Q!Gv=J!Qh!#K$\"?)\\d1\\nd?z&p_:>)G'F3% 'MatrixG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "curvatures:=Eig envalues(Mnum);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+curvaturesG-%'RT ABLEG6%\"*?jNU\"-%'MATRIXG6#7&7#^$$!?U@F7HLcm;nD1!H]\"!#I$\"\"!F37#^$$ \"?lGv)QzUl\\@LAj\"yS!#LF27#^$$!?vE2w$******\\Dsj!G?>!#fF27#^$$\"?\"\\ 'ziJP[#=9y#))4kT!#JF2&%'VectorG6#%'columnG" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 87 "with(Statistics):\nX:=RandomVariable(Normal(0,1)): \nPFORM:=evalf(subs(x=-beta,CDF(X,x)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&PFORMG$\"?3rb&GDl\"o\\l>>Ek:!#I" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 88 "PSORM:=PFORM:\nfor i from 1 to 4 do\n PSORM:=PSORM/s qrt(1+beta*curvatures[i]);\nod:\nPSORM;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$$\"?RzV.fd.$*el$4 " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "7 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }{RTABLE_HANDLES 136523972 142356320 }{RTABLE M7R0 I6RTABLE_SAVE/136523972X,%)anythingG6"6"[gl!"%!!!#1"%"%$"??$zfe#RuHPn&yj"[h!#L$ "?&)*fYl&3?Nikf)z'y:!#M$"?_c!3F(["G#4lU%G:N)!#N$!?7Jg7yvyx=R6`hHiF/$!?7"HUl7;GV i6;J=;"!#J$!?]=b2.i/]2`Yj;x8!#I$"?#))Qu1![7eKVY%)Rn;F7$!?$)Hofjx")\(4sZaPC"F7$! ?55/z;ZM,+$)[GtLdF)$"?/lh&H4DVhI5/rab"F4$!?Ri.2:s2(H9>_N@S$F4$!?a*[D[*Q')Q!Gv=J !Qh!#K$!?w$))RUlZG5X.0<"RrF)$"?.(*=J19q"o"H[&Hn$>F4$"?%)>6&ob!yE=[0#oX-"F4$"?)\ d1\nd?z&p_:>)G'F4F& } {RTABLE M7R0 I6RTABLE_SAVE/142356320X*-%(complexG6#%'sfloatG6"6"[gl"#%!!!"%"%$!?U@F7HLcm;nD1 !H]"!#I$""!F.$"?lGv)QzUl\@LAj"yS!#LF-$!?vE2w$******\Dsj!G?>!#fF-$"?"\'ziJP[#=9y #))4kT!#JF-F) } openturns-1.9/validation/src/ValidSampleComputation.sce000066400000000000000000000030721307543307100234660ustar00rootroot00000000000000lines(0); Sample=... [ 3.92916 , 3.89263 , 0.446781; 2.9039 , 1.80452 , 0.566517; 0.962047, 1.73582 , 1.87565 ; 1.49738 ,-1.97567 , 1.54773 ; 0.202148,-0.822598, 0.905646; -1.80895 ,-0.587343, 2.24034 ; 2.1505 , 1.4477 , 2.3731 ; 2.90242 , 4.33725 , 2.11401 ; 1.26622 ,-0.60984 ,-0.363285; 0.900494,-1.77254 , 1.39818 ]; SampleSize = size(Sample, 1); SampleDimension = size(Sample, 2); ratio = SampleSize / (SampleSize - 1); SampleMin = min(Sample, 'r') SampleMax = max(Sample, 'r') SampleMean = mean(Sample, 'r') SampleCovariance = mvvacov(Sample) * ratio SampleStandardDeviation = chol(SampleCovariance)' SampleStandardDeviationPerComponent = stdev(Sample, 'r') Pearson = zeros(SampleDimension, SampleDimension); Id = diag(ones(SampleSize, 1)); for i=1:SampleDimension for j=1:SampleDimension Pearson(i, j) = correl(Sample(:, i),Sample(:, j), Id); end end Pearson Spearman = zeros(SampleDimension, SampleDimension) Range = zeros(SampleDimension, SampleDimension); RangePerComponent = strange(Sample, 'r') MedianPerComponent = median(Sample, 'r') Sd = SampleStandardDeviationPerComponent; Mode = SampleMin Variance = diag(SampleCovariance)' Skewness = cmoment(Sample, 3, 'r') ./ (SampleSize * Sd .^ 3) Kurtosis = cmoment(Sample, 4, 'r') ./ (SampleSize * Sd .^ 4) - 3 Sorted = -sort(-Sample, 'r'); QuantilePerComponent = (1 - g) * Sorted(floor(0.25 * SampleSize), :) + g * Sorted(ceil(0.25 * SampleSize), :) //(j - m) / n <= p < (j - m + 1) / n //g = np + m - j //p(k) = (k - 1) / (n - 1) = (k - alpha) / (n - alpha - beta + 1) //m = alpha + p(1 - alpha - beta) openturns-1.9/validation/src/ValidSolveLinearSystemRect.sce000066400000000000000000000012751307543307100242730ustar00rootroot00000000000000m1=[1 5; 2 12]; disp("m1=") disp(m1) p1=[5;0] disp("p1=") disp(p1) x1=m1\p1 disp("x1=") disp(x1) r1=m1*x1 disp("m1*x1=") disp(r1) m2=[1 5 3; 2 12 4] disp("m2=") disp(m2) p2=[5;0] disp("p2=") disp(p2) x2=m2\p2 disp("x2=") disp(x2) r2=m2*x2 disp("m2*x2=") disp(r2) m3=[1 5; 2 12; 4 3 ]; disp("m3=") disp(m3) p3=[5;0;1] disp("p3=") disp(p3) x3=m3\p3 disp("x3=") disp(x3) r3=m3*x3 disp("m3*x3=") disp(r3) b1=[5 10 15 20; 1 2 3 4] disp("b1=") disp(b1) x4=m1\b1 disp("x4=") disp(x4) r4=m1*x4 disp("m1*x4=") disp(m1*x4) x5=m2\b1 disp("x5=") disp(x5) r5=m2*x5 disp("m2*x5=") disp(r5) b2=[5 10 15 20; 1 2 3 4; -2 -4 -6 -8] disp("b2=") disp(b2) x6=m3\b2 disp("x6=") disp(x6) r6=m3*x6 disp("m3*x6=") disp(r6)openturns-1.9/validation/src/ValidSpecFunc.mws000066400000000000000000000034671307543307100215740ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 506 "restart:\nRfs:=(int ((diff(1/sqrt(2*Pi)*exp(-x*x/2),x$2))^2,x=-infinity..infinity));\nassu me(x>0,x<1):\n_beta:=Beta(a,b);\n_betaInc:=int(t^(a-1)*(1-t)^(b-1),t=0 ..x);\n_betaRatioInc:=_betaInc/beta;\nvalnum:=a=3.5,b=5.6:\nvalx:=x=0. 3:\nvaly:=y=0.002:\nbeta:=evalf(subs(valnum,_beta));\nbetaInc:=evalf(s ubs(valnum,valx,_betaInc));\nbetaRatioInc:=evalf(subs(valnum,valx,_bet aRatioInc));\nbetaIncInv:=fsolve(subs(valnum,_betaInc)=subs(valy,y),x, 0..1);\nbetaRatioIncInv:=fsolve(subs(valnum,_betaRatioInc)=subs(valy,y ),x,0..1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&_betaG-%%BetaG6$%\"aG %\"bG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)_betaIncG*()%#x|irG%\"aG\" \"\"F(!\"\"-%*hypergeomG6%7$F(,&%\"bGF*F)F)7#,&F)F)F(F)F'F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%._betaRatioIncG**)%#x|irG%\"aG\"\"\"F(!\" \"-%*hypergeomG6%7$F(,&%\"bGF*F)F)7#,&F)F)F(F)F'F)%%betaGF*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%betaG$\"+*odM4%!#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(betaIncG$\"+\"=*R(H\"!#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-betaRatioIncG$\"+'oX%pJ!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+betaIncInvG$\"+/X76P!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%0betaRatioIncInvG$\"+m#3@K&!#6" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidSpecFunc.txt000066400000000000000000000023331307543307100215740ustar00rootroot00000000000000> restart: > Rfs:=(int((diff(1/sqrt(2*Pi)*exp(-x*x/2),x$2))^2,x=-infinity..infinity > )); > assume(x>0,x<1): > _beta:=Beta(a,b); > _betaInc:=int(t^(a-1)*(1-t)^(b-1),t=0..x); > _betaRatioInc:=_betaInc/beta; > valnum:=a=3.5,b=5.6: > valx:=x=0.3: > valy:=y=0.002: > beta:=evalf(subs(valnum,_beta)); > betaInc:=evalf(subs(valnum,valx,_betaInc)); > betaRatioInc:=evalf(subs(valnum,valx,_betaRatioInc)); > betaIncInv:=fsolve(subs(valnum,_betaInc)=subs(valy,y),x,0..1); > betaRatioIncInv:=fsolve(subs(valnum,_betaRatioInc)=subs(valy,y),x,0..1 > ); _beta := Beta(a, b) a x~ hypergeom([a, -b + 1], [1 + a], x~) _betaInc := --------------------------------------- a a x~ hypergeom([a, -b + 1], [1 + a], x~) _betaRatioInc := --------------------------------------- a beta beta := 0.004093457689 betaInc := 0.001297399181 betaRatioInc := 0.3169445686 betaIncInv := 0.3711124504 betaRatioIncInv := 0.05322108266 > openturns-1.9/validation/src/ValidStudent.mws000066400000000000000000000214061307543307100215050ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1065 "restart:\nwith(Sta tistics):\nassume(u>0,nu>0):\nstudent_:=RandomVariable(StudentT(nu)): \npdf:=subs(u=(x-mu)/sigma,PDF(student_,u));\nddf:=factor(diff(pdf,x)) ;\ncdf:=subs(u=(x-mu)/sigma,CDF(student_,u)):\ncdf2:=simplify(convert( subs(mu=0,(cdf - 1)*Beta(1/2,nu/2)*sqrt(nu)), GAMMA)) assuming nu > 1: \nrough:=int(pdf^2,x=-infinity..infinity);\nmu_:=mu+Mean(student_);\nv ar_:=Variance(student_);\nskew_:=simplify(convert(Skewness(student_),G AMMA),symbolic);\nkurt_:=simplify(convert(Kurtosis(student_),GAMMA),sy mbolic);\npdfgr:=map(factor,[diff(pdf,nu),diff(pdf,mu),diff(pdf,sigma) ]):\ncdfgr:=map(factor,[diff(cdf,nu),diff(cdf,mu),diff(cdf,sigma)]):\n #qdf:=Quantile(student_,p):\n#qdf2:=solve(cdf=p,x):\nvalnum:=nu=5,mu=- 0.5,sigma=1.0:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pd f));\nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,pdfgr));\nev alf(subs(valnum,x=1,cdfgr));\nevalf(subs(valnum,mu+Quantile(StudentT(s ubs(valnum,nu)),0.95)));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum, sqrt(var_)));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_)); \nevalf(subs(valnum,var_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG **-%&GAMMAG6#,&*&\"\"#!\"\"%$nu|irG\"\"\"F.#F.F+F.F.*&%#PiGF.F-F.#F,F+ -F'6#,$*&F+F,F-F.F.F,),&F.F.*(,&%\"xGF.%#muGF,F+%&sigmaG!\"#F-F,F.F)F, " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG*0-%&GAMMAG6#,&*&\"\"#!\"\" %$nu|irG\"\"\"F.#F.F+F.F.,&F-F.F.F.F.,&%\"xGF,%#muGF.F.*&%#PiGF.F-F.#F ,F+-F'6#,$*&F+F,F-F.F.F,)*(,**&)%&sigmaGF+F.F-F.F.*$)F2F+F.F.*(F+F.F2F .F3F.F,*$)F3F+F.F.F.F@!\"#F-F,F)F,F=F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&roughG-%$intG6$*,-%&GAMMAG6#,&*&\"\"#!\"\"%$nu|irG\"\"\"F1#F1 F.F1F.%#PiGF/F0F/-F*6#,$*&F.F/F0F1F1!\"#),&F1F1*(,&%\"xGF1%#muGF/F.%&s igmaGF8F0F/F1F,F8/F=;,$%)infinityGF/FC" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%#muG\"\"\"-%*PIECEWISEG6$7$%*undefinedG1%$nu|irGF'7$\" \"!%*otherwiseGF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G-%*PIECEW ISEG6$7$%*undefinedG1%$nu|irG\"\"#7$*&F+\"\"\",&F,!\"\"F+F/F1%*otherwi seG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G-%*PIECEWISEG6$7$%*und efinedG1%$nu|irG\"\"#7$\"\"!2F,F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %&kurt_G-%*PIECEWISEG6$7$%*undefinedG1%$nu|irG\"\"#7$,$*(\"\"$\"\"\",& \"\"%!\"\"F+F1F4,&F,F4F+F1F1F12F,F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$!+aDtX:!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ZM " 0 "" {MPLTEXT 1 0 435 "map(co llect,map(collect,simplify(subs(x^2=xRed*nu-nu+2*x*mu-mu^2,factor(subs (nu+x^2-2*x*mu+mu^2=xRed*nu,-nu-x^2+2*x*mu-mu^2=-xRed*nu,collect(conve rt(pdfgr[1]*Beta(1/2,nu/2)*sqrt(nu),GAMMA),Psi)))),symbolic),ln),xRed) ;\nmap(collect,map(collect,simplify(subs(x^2=xRed*nu-nu+2*x*mu-mu^2,fa ctor(subs(nu+x^2-2*x*mu+mu^2=xRed*nu,-nu-x^2+2*x*mu-mu^2=-xRed*nu,coll ect(convert(pdfgr[2]*Beta(1/2,nu/2)*sqrt(nu),GAMMA),Psi)))),symbolic), ln),xRed);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,$*&#\"\"\"\"\"#F&**%$nu |irG!\"\",4*&,,*(F'F&-%#lnG6#%&sigmaGF&F)F&F*F)F**&-%$PsiG6#,$*&F'F*F) F&F&F&F)F&F&*&-F06#,(*$)F2F'F&F&%%xRedGF&F&F*F&F)F&F&*&-F56#,&*&F'F*F) F&F&#F&F'F&F&F)F&F*F&F?F&F&*&,&*(F'F&F>F&F)F&F**&F'F&F)F&F&F&F/F&F&F)F &*&,&*&F>F&F)F&F&F)F*F&F:F&F&*(F4F&F)F&F>F&F&*(FAF&F)F&F>F&F*F=F&F@F&F 3F*F&)F<,&*&F'F*F)F&F*#\"\"$F'F*F&)F2,&F)F&F&F&F&F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*,,&%$nu|irG\"\"\"F'F'F',&%\"xG!\"\"%#muGF'F'),( *$)%&sigmaG\"\"#F'F'%%xRedGF'F'F*,&*&F1F*F&F'F*#\"\"$F1F*F')F0F%F'F&F* F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 499 "densityGenerator:=su bs(x=mu+sqrt(u),pdf);\ndensityGeneratorDerivative:=factor(diff(density Generator, u));\nevalf(subs(valnum,u=1,densityGeneratorDerivative));\n evalf((subs(valnum,u=1+1e-5,densityGenerator)-subs(valnum,u=1-1e-5,den sityGenerator))/2e-5);\ndensityGeneratorSecondDerivative:=factor(diff( densityGeneratorDerivative, u));\nevalf(subs(valnum,u=1,densityGenerat orSecondDerivative));\nevalf((subs(valnum,u=1+1e-5,densityGeneratorDer ivative)-subs(valnum,u=1-1e-5,densityGeneratorDerivative))/2e-5);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%1densityGeneratorG**-%&GAMMAG6#,&*& \"\"#!\"\"%$nu|irG\"\"\"F.#F.F+F.F.*&%#PiGF.F-F.#F,F+-F'6#,$*&F+F,F-F. F.F,),&F.F.*(%#u|irGF.%&sigmaG!\"#F-F,F.F)F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%;densityGeneratorDerivativeG,$*&#\"\"\"\"\"#F(*.-%&GA MMAG6#,&*&F)!\"\"%$nu|irGF(F(#F(F)F(F(,&F1F(F(F(F(*&%#PiGF(F1F(#F0F)-F ,6#,$*&F)F0F1F(F(F0)*(,&*&)%&sigmaGF)F(F1F(F(%#u|irGF(F(F@!\"#F1F0F.F0 F=F0F(F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+()*)R)4\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+d>R)4\"!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%AdensityGeneratorSecondDerivativeG,$*&#\"\"\"\"\"%F(*0,&%$nu|i rGF(F(F(F(-%&GAMMAG6#,&*&\"\"#!\"\"F,F(F(#F(F2F(F(,&F,F(\"\"$F(F(*&%#P iGF(F,F(#F3F2-F.6#,$*&F2F3F,F(F(F3)*(,&*&)%&sigmaGF2F(F,F(F(%#u|irGF(F (FC!\"#F,F3F0F3F@FEF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+4*fEK(! #6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+YIhAt!#6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "assume(a<0):int((1+x)^a,x=-infinity..infini ty);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$intG6$),&\"\"\"F(%\"xGF(%#a |irG/F);,$%)infinityG!\"\"F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "evalf[25](4/(2*sqrt(Pi)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \":fh*Qd7b4n\"z$G6!#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "ph i:=C*(1+beta/nu)^(-(d+nu)/2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ph iG*&%\"CG\"\"\"),&F'F'*&%%betaGF'%$nu|irG!\"\"F',&*&\"\"#F-%\"dGF'F-*& F0F-F,F'F-F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "simplify(di ff(phi,beta)/(-1/2*C*(1+beta/nu)^(-1/2*(nu+d+2))*(d+nu)/nu),symbolic); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 73 "simplify(diff(phi,beta$2)/(-1/4*C*(1+beta/nu)^(-1/2 *(nu+d+4))),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,,*$)%$n u|irG\"\"#\"\"\"F**(F)F*F(F*%\"dGF*F**&F)F*F(F*F**$)F,F)F*F**&F)F*F,F* F*F*F(!\"#!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 68 "simplify (-(nu^2+2*nu*d+2*nu+d^2+2*d)/nu^2+(1+d/nu)^2+2/nu*(d/nu+1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "factor(-(nu^2+2*nu*d+2*nu+d^2+2*d)/nu^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(,(%$nu|irG\"\"\"%\"dGF'\"\"#F'F',&F(F'F&F'F'F&!\"#! \"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "delta:=(subs(nu=nu+ epsilon,pdf)-pdf)/epsilon;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&delta G*&,&**-%&GAMMAG6#,(*&\"\"#!\"\"%$nu|irG\"\"\"F0*&F-F.%(epsilonGF0F0#F 0F-F0F0*&%#PiGF0,&F/F0F2F0F0#F.F--F)6#,&*&F-F.F/F0F0*&F-F.F2F0F0F.),&F 0F0*(,&%\"xGF0%#muGF.F-%&sigmaG!\"#F6F.F0F+F.F0**-F)6#,&*&F-F.F/F0F0F3 F0F0*&F5F0F/F0F7-F)6#,$*&F-F.F/F0F0F.),&F0F0*(F@F-FCFDF/F.F0FHF.F.F0F2 F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "limit(delta, epsilon= 0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%&limitG6$*&,&**-%&GAMMAG6#,(* &\"\"#!\"\"%$nu|irG\"\"\"F1*&F.F/%(epsilonGF1F1#F1F.F1F1*&%#PiGF1,&F0F 1F3F1F1#F/F.-F*6#,&*&F.F/F0F1F1*&F.F/F3F1F1F/),&F1F1*(,&%\"xGF1%#muGF/ F.%&sigmaG!\"#F7F/F1F,F/F1**-F*6#,&*&F.F/F0F1F1F4F1F1*&F6F1F0F1F8-F*6# ,$*&F.F/F0F1F1F/),&F1F1*(FAF.FDFEF0F/F1FIF/F/F1F3F//F3\"\"!" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "series(delta,epsilon=0,2);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#+)%(epsilonG,&**-%&GAMMAG6#,&*&\"\"# !\"\"%$nu|irG\"\"\"F/#F/F,F/F/*&%#PiGF/F.F/#F-F,-F(6#,$*&F,F-F.F/F/F-- %$expG6#*&F*F/-%#lnG6#*(,**&)%&sigmaGF,F/F.F/F/*$)%\"xGF,F/F/*(F,F/FFF /%#muGF/F-*$)FHF,F/F/F/FC!\"#F.F-F/F-F/**F'F/F1F3F4F-),&F/F/*(,&FFF/FH F-F,FCFKF.F-F/F*F-F-F-*&,&*&,(*&#F/F,F/*(F'F/F1F3F.F-F/F-*&F0F/*(-%$Ps iGF)F/F'F/F1F3F/F/*&#F/F,F/*(F'F/F1F3-FenF5F/F/F-F/F4F-F/*.F'F/F1F3F4F --F96#,$*&F0F/*&,&F.F/F/F/F/F " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "13 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidStudent.txt000066400000000000000000000215221307543307100215150ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u>0,nu>0): > student_:=RandomVariable(StudentT(nu)): > pdf:=subs(u=x-mu,PDF(student_,u)); > ddf:=factor(diff(pdf,x)); > cdf:=subs(u=x-mu,CDF(student_,u)): > cdf2:=simplify(convert(subs(mu=0,(cdf - 1)*Beta(1/2,nu/2)*sqrt(nu)), > GAMMA)) assuming nu > 1: > rough:=int(pdf^2,x=-infinity..infinity); > mu_:=mu+Mean(student_); > var_:=Variance(student_); > skew_:=simplify(convert(Skewness(student_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(student_),GAMMA),symbolic); > pdfgr:=map(factor,[diff(pdf,nu),diff(pdf,mu)]): > cdfgr:=map(factor,[diff(cdf,nu),diff(cdf,mu)]): > #qdf:=Quantile(student_,p): > #qdf2:=solve(cdf=p,x): > valnum:=nu=5,mu=-0.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,pdfgr)); > evalf(subs(valnum,x=1,cdfgr)); > evalf(subs(valnum,mu+Quantile(StudentT(subs(valnum,nu)),0.95))); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); nu~ GAMMA(1/2 + ---) 2 pdf := ------------------------------------------------- / nu~\ |1/2 + ---| \ 2 / / 2\ 1/2 nu~ | (x - mu) | (Pi nu~) GAMMA(---) |1 + ---------| 2 \ nu~ / / | | | nu~ / | 1/2 ddf := - GAMMA(1/2 + ---) (1 + nu~) (x - mu) / |(Pi nu~) 2 / \ / nu~\ |1/2 + ---| \ 2 / / 2 2\ nu~ |nu~ + x - 2 x mu + mu | GAMMA(---) |-----------------------| 2 \ nu~ / \ | | | 2 2 | (nu~ + x - 2 x mu + mu )| / infinity / | | | | rough := | | | | | / -infinity nu~ 2 GAMMA(1/2 + ---) 2 ------------------------------------------------ dx / / nu~\\2 | |1/2 + ---|| | \ 2 /| |/ 2\ | nu~ 2 || (x - mu) | | Pi nu~ GAMMA(---) ||1 + ---------| | 2 \\ nu~ / / /{ undefined nu~ <= 1 \ mu_ := mu + |{ | \{ 0 otherwise/ { undefined nu~ <= 2 { var_ := { nu~ { -------- otherwise { -2 + nu~ { undefined nu~ <= 2 skew_ := { { 0 2 < nu~ { undefined nu~ <= 2 { kurt_ := { 3 (-2 + nu~) { ------------ 2 < nu~ { nu~ - 4 -0.1545732554 0.1245173447 0.9030481600 [0.001274928807, 0.1545732554] [0.005719977472, -0.1245173445] 1.515042560 -0.5 1.290994449 0. 9. 1.666666667 > map(collect,map(collect,simplify(subs(x^2=xRed*nu-nu+2*x*mu-mu^2,facto > r(subs(nu+x^2-2*x*mu+mu^2=xRed*nu,-nu-x^2+2*x*mu-mu^2=-xRed*nu,collect > (convert(pdfgr[1]*Beta(1/2,nu/2)*sqrt(nu),GAMMA),Psi)))),symbolic),ln) > ,xRed); > map(collect,map(collect,simplify(subs(x^2=xRed*nu-nu+2*x*mu-mu^2,facto > r(subs(nu+x^2-2*x*mu+mu^2=xRed*nu,-nu-x^2+2*x*mu-mu^2=-xRed*nu,collect > (convert(pdfgr[2]*Beta(1/2,nu/2)*sqrt(nu),GAMMA),Psi)))),symbolic),ln) > ,xRed); // nu~ nu~ \ -1/2 ||Psi(---) nu~ + ln(xRed) nu~ - nu~ - Psi(1/2 + ---) nu~| xRed \\ 2 2 / / nu~\ |- 3/2 - ---| \ \ 2 / + 1 + nu~| xRed /nu~ / / nu~\ |- 3/2 - ---| \ 2 / (1 + nu~) (x - mu) xRed ------------------------------------ nu~ > densityGenerator:=subs(x=mu+sqrt(nu/(nu-2))*sqrt(u),pdf); > densityGeneratorDerivative:=factor(diff(densityGenerator, u)); > evalf(subs(valnum,u=1,densityGeneratorDerivative)); > evalf((subs(valnum,u=1+1e-5,densityGenerator)-subs(valnum,u=1-1e-5,den > sityGenerator))/2e-5); > densityGeneratorSecondDerivative:=factor(diff(densityGeneratorDerivati > ve, u)); > evalf(subs(valnum,u=1,densityGeneratorSecondDerivative)); > evalf((subs(valnum,u=1+1e-5,densityGeneratorDerivative)-subs(valnum,u= > 1-1e-5,densityGeneratorDerivative))/2e-5); densityGenerator := nu~ GAMMA(1/2 + ---) 2 ------------------------------------------------ / nu~\ |1/2 + ---| \ 2 / 1/2 nu~ / u~ \ (Pi nu~) GAMMA(---) |1 + --------| 2 \ -2 + nu~/ / | | nu~ / | densityGeneratorDerivative := -1/2 (1 + nu~) GAMMA(1/2 + ---) / | 2 / \ / nu~\ |1/2 + ---| \ 2 / /-2 + nu~ + u~\ nu~ (-2 + nu~ + u~) |-------------| GAMMA(---) \ -2 + nu~ / 2 \ | | 1/2| (Pi nu~) | / -0.09188814925 -0.09188888436 nu~ densityGeneratorSecondDerivative := 1/4 (1 + nu~) GAMMA(1/2 + ---) 2 / / nu~\ | |1/2 + ---| | \ 2 / / | 2 /-2 + nu~ + u~\ (3 + nu~) / |(-2 + nu~ + u~) |-------------| / \ \ -2 + nu~ / \ | | nu~ 1/2| GAMMA(---) (Pi nu~) | 2 / 0.1378322239 0.1378322239 > assume(a<0):int((1+x)^a,x=-infinity..infinity); infinity / | a~ | (1 + x) dx | / -infinity > evalf[25](4/(2*sqrt(Pi))); 1.128379167095512573896159 > openturns-1.9/validation/src/ValidStudentEstimate.mws000066400000000000000000000066771307543307100232160ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 279 "restart:\nwith(Stat istics):\nassume(u>0,nu>0):\nstudent_:=RandomVariable(StudentT(nu)):\n pdf:=subs(u=x-mu,PDF(student_,u));\nmu_:=mu+Mean(student_);\nvar_:=Var iance(student_);\nlogLike:=map(factor,[diff(Sum(subs(x=x[i],log(pdf)), i=1..N),nu),diff(Sum(subs(x=x[i],log(pdf)),i=1..N),mu)]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG**-%&GAMMAG6#,&#\"\"\"\"\"#F+*&F,!\"\"%$ nu|irGF+F+F+*&%#PiGF+F/F+#F.F,-F'6#,$*&F,F.F/F+F+F.),&F+F+*&,&%\"xGF+% #muGF.F,F/F.F+F)F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%#muG\" \"\"-%*PIECEWISEG6$7$%*undefinedG1%$nu|irGF'7$\"\"!%*otherwiseGF'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G-%*PIECEWISEG6$7$%*undefinedG1 %$nu|irG\"\"#7$*&F+\"\"\",&F,!\"\"F+F/F1%*otherwiseG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(logLikeG7$-%$SumG6$,$*&#\"\"\"\"\"#F,*&,B*&-%$Psi G6#,&F+F,*&F-!\"\"%$nu|irGF,F,F,F7F,F,*&F1F,)&%\"xG6#%\"iGF-F,F,**F-F, F1F,F:F,%#muGF,F6*&F1F,)F?F-F,F,F,F6*&-F26#,$*&F-F6F7F,F,F,F7F,F6*&FCF ,F9F,F6**F-F,FCF,F:F,F?F,F,*&FCF,FAF,F6*&-%#lnG6#*&,*F7F,*$F9F,F,*(F-F ,F:F,F?F,F6*$FAF,F,F,F7F6F,F7F,F6*&FKF,F9F,F6**F-F,FKF,F:F,F?F,F,*&FKF ,FAF,F6FPF,*(F-F,F:F,F?F,F6FRF,F,FOF6F,F,/F=;F,%\"NG-F'6$,$*(,&F,F,F7F ,F,,&F:F6F?F,F,FOF6F6FW" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " solve(\{logLike[1],logLike[2]\},\{mu,nu\});" }}{PARA 7 "" 1 "" {TEXT -1 38 "Warning, solutions may have been lost\n" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 23 "collect(logLike[1],nu);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,>*&,(*&#\"\"\"\"\"#F(-%$PsiG6#,$*&F)!\"\"%$nu|irGF(F(F (F/*&#F(F)F(-%#lnG6#*&,*F0F(*$)%\"xGF)F(F(*(F)F(F:F(%#muGF(F/*$)FF(F(F(#F(F)F/*&#F(F)F( *&F*F(F9F(F(F/*(F*F(F:F(FF(F(F/*&#F(F)F(*&F3F(F9 F(F(F/*(F3F(F:F(FF(F(F/*&F:F(F " 0 "" {MPLTEXT 1 0 36 "subs(mu=Sum(y[i],i=1..N )/N,logLike);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$,B*&#\"\"\"\"\"#F'* &-%$PsiG6#,&F&F'*&F(!\"\"%$nu|irGF'F'F'F0F'F'F'*&F&F'*&F*F')%\"xGF(F'F 'F'**F*F'F4F'-%$SumG6$&%\"yG6#%\"iG/F<;F'%\"NGF'F?F/F/*&F&F'*(F*F'F6F( F?!\"#F'F'#F'F(F/*&#F'F(F'*&-F+6#,$*&F(F/F0F'F'F'F0F'F'F/*&#F'F(F'*&FG F'F3F'F'F/**FGF'F4F'F6F'F?F/F'*&#F'F(F'*(FGF'F6F(F?FBF'F/*&#F'F(F'*&-% #lnG6#*&,*F0F'*$F3F'F'**F(F'F4F'F6F'F?F/F/*&F6F(F?FBF'F'F0F/F'F0F'F'F/ *&#F'F(F'*&FUF'F3F'F'F/**FUF'F4F'F6F'F?F/F'*&#F'F(F'*(FUF'F6F(F?FBF'F/ *&F(F/F4F(F'*(F4F'F6F'F?F/F/*&F&F'FfnF'F'*&,&F4F'*&F6F'F?F/F/F',&F'F'F 0F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0 " 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidStudentEstimate.txt000066400000000000000000000174411307543307100232160ustar00rootroot00000000000000> restart: > with(Statistics): > assume(u>0,nu>0): > student_:=RandomVariable(StudentT(nu)): > pdf:=subs(u=x-mu,PDF(student_,u)); > mu_:=mu+Mean(student_); > var_:=Variance(student_); > logLike:=map(factor,[diff(Sum(subs(x=x[i],log(pdf)),i=1..N),nu),diff(S > um(subs(x=x[i],log(pdf)),i=1..N),mu)]); nu~ GAMMA(1/2 + ---) 2 pdf := ------------------------------------------------- / nu~\ |1/2 + ---| \ 2 / / 2\ 1/2 nu~ | (x - mu) | (Pi nu~) GAMMA(---) |1 + ---------| 2 \ nu~ / /{ undefined nu~ <= 1 \ mu_ := mu + |{ | \{ 0 otherwise/ { undefined nu~ <= 2 { var_ := { nu~ { -------- otherwise { -2 + nu~ N ----- / / \ | | nu~ nu~ 2 logLike := [ ) |1/2 |Psi(1/2 + ---) nu~ + Psi(1/2 + ---) x[i] / \ \ 2 2 ----- i = 1 nu~ nu~ 2 - 2 Psi(1/2 + ---) x[i] mu + Psi(1/2 + ---) mu - 1 2 2 nu~ nu~ 2 nu~ - Psi(---) nu~ - Psi(---) x[i] + 2 Psi(---) x[i] mu 2 2 2 2 2 nu~ 2 nu~ + x[i] - 2 x[i] mu + mu - Psi(---) mu - ln(-----------------------------) nu~ 2 nu~ 2 2 nu~ + x[i] - 2 x[i] mu + mu 2 - ln(-----------------------------) x[i] nu~ 2 2 nu~ + x[i] - 2 x[i] mu + mu + 2 ln(-----------------------------) x[i] mu nu~ 2 2 nu~ + x[i] - 2 x[i] mu + mu 2 2 - ln(-----------------------------) mu + x[i] - 2 x[i] mu nu~ \ \ 2| / 2 2 | + mu | / (nu~ + x[i] - 2 x[i] mu + mu )|, / / / N ----- \ / (1 + nu~) (-x[i] + mu) \ ) |- -----------------------------|] / | 2 2| ----- \ nu~ + x[i] - 2 x[i] mu + mu / i = 1 > solve({logLike[1],logLike[2]},{mu,nu}); Warning, solutions may have been lost > collect(logLike[1],nu); 2 / nu~ nu~ \ x |-1/2 Psi(---) - 1/2 %1 + 1/2 Psi(1/2 + ---)| nu~ + ---- \ 2 2 / 2 nu~ 2 nu~ + 1/2 Psi(1/2 + ---) x - Psi(1/2 + ---) x mu 2 2 nu~ 2 nu~ 2 + 1/2 Psi(1/2 + ---) mu - 1/2 - 1/2 Psi(---) x 2 2 nu~ nu~ 2 2 + Psi(---) x mu - 1/2 Psi(---) mu - 1/2 %1 x + %1 x mu 2 2 2 2 mu - 1/2 %1 mu - x mu + --- 2 2 2 nu~ + x - 2 x mu + mu %1 := ln(-----------------------) nu~ > subs(mu=Sum(y[i],i=1..N)/N,logLike); nu~ nu~ 2 [1/2 Psi(1/2 + ---) nu~ + 1/2 Psi(1/2 + ---) x 2 2 / N \ |----- | nu~ | \ | Psi(1/2 + ---) x | ) y[i]| 2 | / | |----- | \i = 1 / - ----------------------------- N / N \2 |----- | nu~ | \ | Psi(1/2 + ---) | ) y[i]| 2 | / | |----- | \i = 1 / nu~ + 1/2 ---------------------------- - 1/2 - 1/2 Psi(---) nu~ 2 2 N / N \ |----- | nu~ | \ | Psi(---) x | ) y[i]| 2 | / | |----- | nu~ 2 \i = 1 / - 1/2 Psi(---) x + ----------------------- 2 N / N \2 |----- | nu~ | \ | Psi(---) | ) y[i]| 2 | / | |----- | \i = 1 / 2 - 1/2 ---------------------- - 1/2 %1 nu~ - 1/2 %1 x 2 N / N \ / N \2 |----- | |----- | | \ | | \ | %1 x | ) y[i]| %1 | ) y[i]| | / | | / | |----- | |----- | 2 \i = 1 / \i = 1 / x + ----------------- - 1/2 ---------------- + ---- N 2 2 N / N \ / N \2 |----- | |----- | | \ | | \ | x | ) y[i]| | ) y[i]| | / | | / | |----- | |----- | \i = 1 / \i = 1 / - -------------- + 1/2 -------------, N 2 N / N \ | ----- | | \ | | ) y[i]| | / | | ----- | | i = 1 | |x - ----------| (1 + nu~)] \ N / / N \ / N \2 |----- | |----- | | \ | | \ | 2 x | ) y[i]| | ) y[i]| | / | | / | |----- | |----- | 2 \i = 1 / \i = 1 / nu~ + x - ---------------- + ------------- N 2 N %1 := ln(-------------------------------------------) nu~ > openturns-1.9/validation/src/ValidTriangular.mws000066400000000000000000000233341307543307100221710ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1192 "restart:\nwith(Sta tistics):\nassume(aa,xfactor(_x),[diff(pdf,a),diff(pdf,m),diff(pdf,b)]);\ncdfgr:= map(factor,[diff(cdf,a),diff(cdf,m),diff(cdf,b)]);\nvalnum:=a=-0.5,m=1 .5,b=2.5:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf)); \nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,cf));\nevalf(sub s(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(subs(valnum,x=1,cdfgr));\neva lf(subs(valnum,p=0.25,qdf));\nevalf(subs(valnum,x=2,ddf));\nevalf(subs (valnum,x=2,pdf));\nevalf(subs(valnum,x=2,cdf));\nevalf(subs(valnum,x= 2,map(_x->_x,pdfgr)));\nevalf(subs(valnum,x=2,cdfgr));\nevalf(subs(val num,p=0.95,qdf));\nevalf(subs(valnum,mu_));\nevalf(subs(valnum,sqrt(va r_)));\nevalf(subs(valnum,skew_));\nevalf(subs(valnum,kurt_));\nevalf( subs(valnum,var_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PIECE WISEG6&7$\"\"!2%#x|irG%#a|irG7$,$**\"\"#\"\"\",&F+F1F,!\"\"F1,&%#b|irG F1F,F3F3,&%#m|irGF1F,F3F3F11F+F77$,$**F0F1,&F5F1F+F3F1F4F3,&F5F1F7F3F3 F11F+F57$F)%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG-%*P IECEWISEG6%7$,$*(\"\"#\"\"\",&%#b|irGF,%#a|irG!\"\"F0,&%#m|irGF,F/F0F0 F,2%#x|irGF27$%*undefinedG/F4F27$,$*(F+F,F-F0,&F.F,F2F0F0F02F2F4" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG-%*PIECEWISEG6&7$\"\"!2%#x|irG% #a|irG7$*(,&F+\"\"\"F,!\"\"\"\"#,&%#b|irGF0F,F1F1,&%#m|irGF0F,F1F11F+F 67$,&F0F0*(,&F4F0F+F1F2F3F1,&F4F0F6F1F1F11F+F47$F0%*otherwiseG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG,$*(\"\"#\"\"\"%#PiGF(,(*,F)!\" \"%#x|irG!\"#,&%#m|irGF,%#a|irGF(F,,&%#b|irGF(F1F,F,-%$expG6#*(F1F(F-F (^#F(F(F(F(*,F)F,,&F3F,F1F(F,,&F3F(F0F,F,F-F.-F56#*(F3F(F-F(F8F(F(F(*, F)F,F-F.F;F,,&F0F(F1F,F,-F56#*(F0F(F-F(F8F(F(F(F(F(" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%&roughG,$*(\"\"%\"\"\"\"\"$!\"\",&%#b|irGF*%#a|irGF (F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,(*&\"\"$!\"\"%#a|irG \"\"\"F**&F'F(%#b|irGF*F**&F'F(%#m|irGF*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,.*&#\"\"\"\"#=F(*$)%#a|irG\"\"#F(F(F(*&F'F(*$) %#b|irGF-F(F(F(*&F'F(*$)%#m|irGF-F(F(F(*&#F(F)F(*&F,F(F1F(F(!\"\"*&#F( F)F(*&F,F(F5F(F(F9*&#F(F)F(*&F1F(F5F(F(F9" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G,$*,\"\"#\"\"\"\"\"&!\"\",6*&F'F()%#b|irG\"\"$ F(F(*(F/F(%#a|irGF()F.F'F(F**(F/F(F2F(%#m|irGF(F***\"#7F(F1F(F.F(F4F(F (*(F/F()F1F'F(F.F(F**(F/F(F.F()F4F'F(F**&F'F()F1F/F(F(*&F'F()F4F/F(F(* (F/F(F1F(F:F(F**(F/F(F8F(F4F(F*F(,.*$F8F(F(*$F2F(F(*$F:F(F(*&F1F(F.F(F **&F1F(F4F(F**&F.F(F4F(F*F*,.*&F'F(F8F(F(*&F'F(F2F(F(*&F'F(F:F(F(*(F'F (F1F(F.F(F**(F'F(F1F(F4F(F**(F'F(F.F(F4F(F*#F*F'F(" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%&kurt_G#\"#7\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%$qdfG-%*PIECEWISEG6$7$,&%#a|irG\"\"\"*$*(%\"pGF+,&%#b|irGF+F*!\"\" F+,&%#m|irGF+F*F1F+#F+\"\"#F+2F.*&F2F+F/F17$,&F0F+*$*(,&F.F1F+F+F+F/F+ ,&F0F+F3F1F+F4F1%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdf grG7%-%*PIECEWISEG6$7$,$**\"\"#\"\"\",,*&%#b|irGF-%#m|irGF-!\"\"*$)%#a |irGF,F-F-*&%#x|irGF-F1F-F-*(F,F-F7F-F5F-F2*&F7F-F0F-F-F-,&F0F2F5F-!\" #,&F1F2F5F-F;F-1F7F17$,$**F,F-,&F0F-F7F2F-F:F;,&F0F-F1F2F2F-%*otherwis eG-F'6%7$,$**F,F-FAF-F:F2FBF;F22F1F77$%*undefinedG/F1F77$,$**F,F-,&F7F 2F5F-F-F:F2F%&cdfgrG7%-%*PIECEWISEG6$7$,$**,&%#x| irG!\"\"%#a|irG\"\"\"F0,.*(\"\"#F0%#b|irGF0%#m|irGF0F.*&F/F0F4F0F0*&F/ F0F5F0F0*&F-F0F5F0F0*(F3F0F-F0F/F0F.*&F-F0F4F0F0F0,&F4F.F/F0!\"#,&F5F. F/F0F7$**FBF0, .*&F4F0F5F0F0F6F0*(F3F0F/F0F5F0F.F8F0*(F3F0F-F0F4F0F.*&F-F0F/F0F0F0F;F 9W0$!#5" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"+++++C!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #$\"+*)))))))Q!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 143 "pdfgr 1:=map(_x->factor(_x/(2/(b-a))),(simplify(pdfgr) assuming x < m));\npd fgr2:=map(_x->factor(_x/(2/(b-a))),(simplify(pdfgr) assuming x > m)); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'pdfgr1G7%*(,,*&%#b|irG\"\"\"%#m |irGF*!\"\"*$)%#a|irG\"\"#F*F**&%#x|irGF*F+F*F**(F0F*F2F*F/F*F,*&F2F*F )F*F*F*,&F)F*F/F,F,,&F+F,F/F*!\"#*&,&F2F,F/F*F*F6F7,$*(F9F*F5F,F6F,F, " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'pdfgr2G7%*(,&%#b|irG\"\"\"%#x|i rG!\"\"F),&F(F)%#a|irGF+F+,&F(F)%#m|irGF+F+*&F'F)F.!\"#,$*(,,*$)F(\"\" #F)F)*&F-F)F/F)F+*(F7F)F*F)F(F)F+*&F*F)F/F)F)*&F*F)F-F)F)F)F,F+F.F1F+ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 99 "factor(pdfgr1[1])=((-a* (x-a)+x*(b-a)-m*(b-x))/(m-a)^2/(b-a));\nfactor(pdfgr1[2]);\nfactor(pdf gr1[3]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/*(,,*&%#b|irG\"\"\"%#m|ir GF(!\"\"*$)%#a|irG\"\"#F(F(*&%#x|irGF(F)F(F(*(F.F(F0F(F-F(F**&F0F(F'F( F(F(,&F'F(F-F*F*,&F)F*F-F(!\"#*(,(*&F-F(,&F0F(F-F*F(F**&F0F(F3F(F(*&F) F(,&F'F(F0F*F(F*F(,&F)F(F-F*F5F3F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# *&,&%#x|irG!\"\"%#a|irG\"\"\"F(,&%#m|irGF&F'F(!\"#" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#,$*(,&%#x|irG!\"\"%#a|irG\"\"\"F),&%#b|irGF)F(F'F',&% #m|irGF'F(F)F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 95 "factor( pdfgr2[1]);\nfactor(pdfgr2[2]);\nfactor(pdfgr2[3]-(-(x-a)*m-(b-x)*b)/( (b-a)*(b-m)*(b-m)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,&%#b|irG\" \"\"%#x|irG!\"\"F&,&F%F&%#a|irGF(F(,&F%F&%#m|irGF(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%#b|irG\"\"\"%#x|irG!\"\"F&,&F%F&%#m|irGF(!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&%#x|irG\"\"\",&%#b|irGF%%#m|irG!\" \"!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 163 "cdfgr1:=map(_x-> factor(_x/((x-a)/(b-a)/(m-a))),(simplify(cdfgr) assuming x < m));\ncdf gr2:=map(_x->factor(_x/((b-x)/(b-a)/(b-m))),(simplify(cdfgr) assuming \+ x > m));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'cdfgr1G7%,$*(,.*(\"\"# \"\"\"%#b|irGF+%#m|irGF+!\"\"*&%#a|irGF+F,F+F+*&F0F+F-F+F+*&%#x|irGF+F -F+F+*(F*F+F3F+F0F+F.*&F3F+F,F+F+F+,&F,F+F0F.F.,&F-F.F0F+F.F.,$*&,&F3F .F0F+F+F7F.F.*&F:F+F6F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'cdfgr2G7 %,$*&,&%#b|irG\"\"\"%#x|irG!\"\"F*,&F)F*%#a|irGF,F,F,,$*&F(F*,&F)F*%#m |irGF,F,F,*(,.*&F)F*F2F*F**&F.F*F)F*F**(\"\"#F*F.F*F2F*F,*(F8F*F+F*F)F *F,*&F+F*F2F*F**&F+F*F.F*F*F*F-F,F1F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 104 "factor(cdfgr1[1]-(x*(m-a)+x*(b-a)-m*(b-a)-b*(m-a))/( (m-a)*(b-a)));\nfactor(cdfgr1[2]);\nfactor(cdfgr1[3]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&%#x |irG!\"\"%#a|irG\"\"\"F),&%#m|irGF'F(F)F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%#x|irG!\"\"%#a|irG\"\"\"F(,&%#b|irGF(F'F&F&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 104 "factor(cdfgr2[1]);\nfactor( cdfgr2[2]);\nfactor(cdfgr2[3]-(m*x-m*a+a*b-a*m+x*a-x*b-b*x+b*m)/((b-m) *(b-a)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&%#b|irG\"\"\"%#x|ir G!\"\"F',&F&F'%#a|irGF)F)F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&% #b|irG\"\"\"%#x|irG!\"\"F',&F&F'%#m|irGF)F)F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "exp and(m*x-m*a+a*b-a*m+x*a-x*b-b*x+b*m-((b-a)*(m-x)+(a-x)*(b-m)));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Expr:=(factor(skew_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%ExprG,$*0\"\"#\"\"\"\"\"&!\"\",(*&F'F(%#a|irGF(F*%#b|irGF(%#m |irGF(F(,(F-F(F.F(*&F'F(F/F(F*F(,(F-F**&F'F(F.F(F(F/F*F(,.*$)F-F'F(F(* $)F.F'F(F(*$)F/F'F(F(*&F-F(F.F(F**&F-F(F/F(F**&F.F(F/F(F*F*,.*&F'F(F6F (F(*&F'F(F8F(F(*&F'F(F:F(F(*(F'F(F-F(F.F(F**(F'F(F-F(F/F(F**(F'F(F.F(F /F(F*#F*F'F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "Expr:=expan d(subs(a=AmM+m,subs(b=BmM+m,factor(var_))));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%ExprG,(*&#\"\"\"\"#=F(*$)%$AmMG\"\"#F(F(F(*&F'F(*$)% $BmMGF-F(F(F(*&#F(F)F(*&F,F(F1F(F(!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "(simplify(18^(3/2)/270));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"\"&!\"\"\"\"##\"\"\"F'F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 105 "expand(a_ * (a_ - b_) + b_ * (b_ - m_) + m_ * ( m_ - a_)-((b_ - m_)^2+(m_ - a_)^2+(b_ - m_) * (m_ - a_)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 25 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidTriangular.txt000066400000000000000000000276601307543307100222100ustar00rootroot00000000000000> restart: > with(Statistics): > assume(aa,x triangular_:=RandomVariable(Triangular(a,b,m)): > pdf:=subs(u=x,PDF(triangular_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u=x,CDF(triangular_,u)); > cf:=subs(u=x,CharacteristicFunction(triangular_,u)); > rough:=factor(int(pdf^2,x=a..b)); > mu_:=Mean(triangular_); > var_:=Variance(triangular_); > skew_:=simplify(convert(Skewness(triangular_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(triangular_),GAMMA),symbolic); > qdf:=Quantile(triangular_,p); > pdfgr:=map(_x->factor(_x),[diff(pdf,a),diff(pdf,m),diff(pdf,b)]); > cdfgr:=map(factor,[diff(cdf,a),diff(cdf,m),diff(cdf,b)]); > valnum:=a=-0.5,m=1.5,b=2.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(subs(valnum,p=0.25,qdf)); > evalf(subs(valnum,x=2,ddf)); > evalf(subs(valnum,x=2,pdf)); > evalf(subs(valnum,x=2,cdf)); > evalf(subs(valnum,x=2,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=2,cdfgr)); > evalf(subs(valnum,p=0.95,qdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); { 0 x~ < a~ { { 2 (x~ - a~) { ------------------- x~ <= m~ { (b~ - a~) (m~ - a~) pdf := { { 2 (b~ - x~) { ------------------- x~ <= b~ { (b~ - a~) (b~ - m~) { { 0 otherwise { 2 { ------------------- x~ < m~ { (b~ - a~) (m~ - a~) { ddf := { undefined x~ = m~ { { 2 { - ------------------- m~ < x~ { (b~ - a~) (b~ - m~) { 0 x~ < a~ { { 2 { (x~ - a~) { ------------------- x~ <= m~ { (b~ - a~) (m~ - a~) cdf := { { 2 { (b~ - x~) { 1 - ------------------- x~ <= b~ { (b~ - a~) (b~ - m~) { { 1 otherwise / exp(m~ x~ I) cf := 2 Pi |-------------------------- | 2 \Pi x~ (b~ - m~) (m~ - a~) exp(b~ x~ I) exp(a~ x~ I) \ + --------------------------- + ---------------------------| 2 2| Pi x~ (b~ - m~) (-b~ + a~) Pi (-m~ + a~) (b~ - a~) x~ / 4 rough := ----------- 3 (b~ - a~) a~ b~ m~ mu_ := ---- + ---- + ---- 3 3 3 2 2 2 var_ := 1/18 a~ + 1/18 b~ + 1/18 m~ - 1/18 a~ b~ - 1/18 a~ m~ - 1/18 b~ m~ 3 2 2 2 skew_ := 2 (2 b~ - 3 a~ b~ - 3 b~ m~ - 3 a~ b~ + 12 a~ b~ m~ 2 3 2 3 2 / - 3 b~ m~ + 2 a~ - 3 a~ m~ + 2 m~ - 3 a~ m~) / (5 / 2 2 2 (a~ + b~ + m~ - a~ b~ - a~ m~ - b~ m~) 2 2 2 1/2 (2 a~ + 2 b~ + 2 m~ - 2 a~ b~ - 2 a~ m~ - 2 b~ m~) ) kurt_ := 12/5 { 1/2 m~ - a~ { a~ + (p (b~ - a~) (m~ - a~)) p < ------- qdf := { b~ - a~ { { 1/2 { b~ - ((1 - p) (b~ - a~) (b~ - m~)) otherwise pdfgr := [ { 2 { 2 (-b~ m~ + a~ + x~ m~ - 2 x~ a~ + x~ b~) { ------------------------------------------ x~ <= m~ { 2 2 { (b~ - a~) (-m~ + a~) { { 2 (b~ - x~) { -------------------- otherwise { 2 { (b~ - a~) (b~ - m~) { 2 (b~ - x~) { -------------------- m~ < x~ { 2 { (b~ - a~) (b~ - m~) { { { , { undefined m~ = x~, { { { { 2 (-x~ + a~) { { --------------------- x~ < m~ { 2 { (b~ - a~) (-m~ + a~) 2 (-x~ + a~) - --------------------- , x~ <= m~ 2 (b~ - a~) (-m~ + a~) 2 2 (b~ - a~ m~ - 2 x~ b~ + x~ m~ + x~ a~) - ----------------------------------------- , otherwise] 2 2 (b~ - a~) (b~ - m~) { { cdfgr := [{ - (-x~ + a~) { { (-2 b~ m~ + a~ b~ + a~ m~ + x~ m~ - 2 x~ a~ + x~ b~)/( 2 2 (b~ - a~) (-m~ + a~) ) , x~ <= m~ 2 (b~ - x~) - -------------------- , otherwise, 2 (b~ - a~) (b~ - m~) { 2 { (b~ - x~) { - -------------------- m~ <= x~ { 2 { { (b~ - a~) (b~ - m~) { { , { { 2 { { (-x~ + a~) { { - --------------------- x~ < m~ { 2 { (b~ - a~) (-m~ + a~) 2 (-x~ + a~) --------------------- , x~ <= m~ 2 (b~ - a~) (-m~ + a~) (b~ - x~) (b~ m~ + a~ b~ - 2 a~ m~ - 2 x~ b~ + x~ m~ + x~ a~) 2 2 /((b~ - a~) (b~ - m~) ) , otherwise] 0.3333333333 0.4999999999 0.3749999998 0.3123054248 + 0.7583220702 I [0.0833333334, -0.2499999999, -0.1666666666] [-0.1875000000, -0.1875000000, -0.1250000000] 0.724744872 -0.6666666666 0.333333333 0.9166666667 [0.1111111112, 0.333333333, 0.222222223] [-0.02777777778, -0.08333333332, -0.2222222222] 2.112701665 1.166666667 0.6236095645 -0.3054414193 2.400000000 0.3888888889 > pdfgr1:=map(_x->factor(_x/(2/(b-a))),(simplify(pdfgr) assuming x < > m)); > pdfgr2:=map(_x->factor(_x/(2/(b-a))),(simplify(pdfgr) assuming x > > m)); 2 -b~ m~ + a~ + x~ m~ - 2 x~ a~ + x~ b~ -x~ + a~ pdfgr1 := [--------------------------------------, -----------, 2 2 (b~ - a~) (-m~ + a~) (-m~ + a~) -x~ + a~ - --------------------] (b~ - a~) (-m~ + a~) b~ - x~ b~ - x~ pdfgr2 := [-------------------, ----------, (b~ - a~) (b~ - m~) 2 (b~ - m~) 2 b~ - a~ m~ - 2 x~ b~ + x~ m~ + x~ a~ - -------------------------------------] 2 (b~ - a~) (b~ - m~) > factor(pdfgr1[1])=((-a*(x-a)+x*(b-a)-m*(b-x))/(m-a)^2/(b-a)); > factor(pdfgr1[2]); > factor(pdfgr1[3]); 2 -b~ m~ + a~ + x~ m~ - 2 x~ a~ + x~ b~ -------------------------------------- = 2 (b~ - a~) (-m~ + a~) -a~ (x~ - a~) + x~ (b~ - a~) - m~ (b~ - x~) ------------------------------------------- 2 (m~ - a~) (b~ - a~) -x~ + a~ ----------- 2 (-m~ + a~) -x~ + a~ - -------------------- (b~ - a~) (-m~ + a~) > factor(pdfgr2[1]); > factor(pdfgr2[2]); > factor(pdfgr2[3]-(-(x-a)*m-(b-x)*b)/((b-a)*(b-m)*(b-m))); b~ - x~ ------------------- (b~ - a~) (b~ - m~) b~ - x~ ---------- 2 (b~ - m~) x~ ---------- 2 (b~ - m~) > cdfgr1:=map(_x->factor(_x/((x-a)/(b-a)/(m-a))),(simplify(cdfgr) > assuming x < m)); > cdfgr2:=map(_x->factor(_x/((b-x)/(b-a)/(b-m))),(simplify(cdfgr) > assuming x > m)); -2 b~ m~ + a~ b~ + a~ m~ + x~ m~ - 2 x~ a~ + x~ b~ cdfgr1 := [- --------------------------------------------------, (b~ - a~) (-m~ + a~) -x~ + a~ -x~ + a~ - --------, --------] -m~ + a~ b~ - a~ b~ - x~ b~ - x~ cdfgr2 := [- -------, - -------, b~ - a~ b~ - m~ b~ m~ + a~ b~ - 2 a~ m~ - 2 x~ b~ + x~ m~ + x~ a~ -------------------------------------------------] (b~ - a~) (b~ - m~) > factor(cdfgr1[1]-(x*(m-a)+x*(b-a)-m*(b-a)-b*(m-a))/((m-a)*(b-a))); > factor(cdfgr1[2]); > factor(cdfgr1[3]); 0 -x~ + a~ - -------- -m~ + a~ -x~ + a~ -------- b~ - a~ > factor(cdfgr2[1]); > factor(cdfgr2[2]); > factor(cdfgr2[3]-(m*x-m*a+a*b-a*m+x*a-x*b-b*x+b*m)/((b-m)*(b-a))); b~ - x~ - ------- b~ - a~ b~ - x~ - ------- b~ - m~ 0 > expand(m*x-m*a+a*b-a*m+x*a-x*b-b*x+b*m-((b-a)*(m-x)+(a-x)*(b-m))); 0 > Expr:=(factor(skew_)); Expr := 2 (-2 a~ + b~ + m~) (a~ + b~ - 2 m~) (-a~ + 2 b~ - m~)/(5 2 2 2 (a~ + b~ + m~ - a~ b~ - a~ m~ - b~ m~) 2 2 2 1/2 (2 a~ + 2 b~ + 2 m~ - 2 a~ b~ - 2 a~ m~ - 2 b~ m~) ) > Expr:=expand(subs(a=AmM+m,subs(b=BmM+m,factor(var_)))); 2 2 Expr := 1/18 AmM + 1/18 BmM - 1/18 AmM BmM > (simplify(18^(3/2)/270)); 1/2 2 ---- 5 > expand(a_ * (a_ - b_) + b_ * (b_ - m_) + m_ * (m_ - a_)-((b_ - > m_)^2+(m_ - a_)^2+(b_ - m_) * (m_ - a_))); 0 > openturns-1.9/validation/src/ValidTruncatedNormal.mws000066400000000000000000000461711307543307100231670ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 977 "restart:\nwith(Stat istics):\nassume(sigma>0):\nnormal_:=RandomVariable(Normal(mu,sigma)): \n\nsimplificationRules:=x=mu+sigma*X,a=mu+sigma*A,b=mu+sigma*B,erf(sq rt(2)*A/2)=2*PhiA-1,erf(sqrt(2)*B/2)=2*PhiB-1,erf(sqrt(2)*X/2)=2*PhiX- 1,exp(-A^2/2)=sqrt(2*Pi)*phiA,exp(-B^2/2)=sqrt(2*Pi)*phiB,exp(-X^2/2)= sqrt(2*Pi)*phiX:\nMySimplify:=proc(u,fact)\n local res;\n res:=map(_ x->(subs(simplificationRules,_x)),u);\n if fact then\n res:=map(_x ->factor(subs(simplificationRules,_x)),factor(res));\n fi:\n res\nen d:\n\npdf:=PDF(normal_,x)/(subs(x=b,CDF(normal_,x))-subs(x=a,CDF(norma l_,x))):\nPDF_:=MySimplify(pdf,true);\nddf:=diff(pdf,x):\nDDF_:=MySimp lify(ddf,true);\ncdf:=int(subs(x=t,pdf),t=a..x):\nCDF_:=MySimplify(cdf ,true);\nmu_:=collect(collect(int(x*pdf,x=a..b),mu),sigma);\nMU_:=MySi mplify(mu_,true);\nvar_:=int((x-mu_)^2*pdf,x=a..b):\nVAR_:=MySimplify( var_,true);\nskew_:=int((x-mu_)^3*pdf,x=a..b):\nSKEW_:=MySimplify(skew _,true);\nkurt_:=int((x-mu_)^4*pdf,x=a..b):\nKURT_:=MySimplify(kurt_,t rue);\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%PDF_G,$*(%%phiXG\"\"\"%' sigma|irG!\"\",&%%PhiBGF*%%PhiAGF(F*F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%DDF_G**%\"XG\"\"\"%%phiXGF'%'sigma|irG!\"#,&%%PhiBG!\"\"%%Phi AGF'F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%CDF_G*&,&%%PhiAG\"\"\"%%P hiXG!\"\"F(,&%%PhiBGF*F'F(F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_ G,&**,&*&\"\"##\"\"\"F)-%$expG6#,$*(F)!\"\",(*(F)F+%#muGF+%\"aGF+F1*$) F4F)F+F+*$)F5F)F+F+F+%'sigma|irG!\"#F1F+F1*&F)F*-F-6#,$*(F)F1,(*(F)F+F 4F+%\"bGF+F1F6F+*$)FCF)F+F+F+F:F;F1F+F+F+,&-%$erfG6#,$**F)F1F)F*,&FCF+ F4F1F+F:F1F+F+-FH6#,$**F)F1F)F*,&F5F+F4F1F+F:F1F+F1F1%#PiG#F1F)F:F+F1* *,&*&FRF*FMF+F+*&FRF*FGF+F1F+FFF1FRFSF4F+F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$MU_G,$*&,**&%'sigma|irG\"\"\"%%phiAGF*F**&F)F*%%phiB GF*!\"\"*&%%PhiBGF*%#muGF*F**&%%PhiAGF*F1F*F.F*,&F0F.F3F*F.F." }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%%VAR_G,$*&#\"\"\"\"\"#F(*,%'sigma|ir GF),6*,F)#F(F)%#PiGF(-%$expG6#,$*(F)!\"\",,*&\"\"'F()%#muGF)F(F(**\"\" %F(F:F(F+F(%\"AGF(F(*&)F+F)F()F=F)F(F(**FF(**FF(F(F+FEF(F/F.F(*&-F16#*&,**&F]oF(F9F(F(**F)F(F:F(F+F(F=F(F(**F) F(F:F(F+F(FBF(F(FQF(F(F+FEF(F/F.F(*,F)F.F/F(FJF(FHF(FBF(F(**F)F()F/#F] oF)F(-F16#*&,,*&F]oF(F9F(F(**F)F(F:F(F+F(F=F(F(F>F(**F)F(F:F(F+F(FBF(F (FQF(F(F+FEF()FFF)F(F5*,F%&SKEW_G,$*&#\"\"\"\"\"#F(*,%'sigma|irG\"\"$,R**F)#F(F ))%#PiGF)F(-%$expG6#,$*(F)!\"\",,*&\"\"'F()%#muGF)F(F(**\"\"%F(FF(FF(FF(FF(FF(F< F(F+F(FDF(F(F(F+FGF(F(F(*(F)F/F1F(-F36#,$*(F)F7,,*&F:F(F;F(F(**F>F(FF(FF(FF(FF(FF(FF(FF(F%&KURT_G,$*&#\"\"\"\"\"%F(*,%'sigma|irGF),br**F)F(-%$expG6#*&,,*& \"\"'F()%#muG\"\"#F(F(**F)F(F6F(F+F(%\"BGF(F(*&)F+F7F()F9F7F(F(**F)F(F 6F(F+F(%\"AGF(F(*(F7F(F;F()F>F7F(F(F(F+!\"#F()%#PiG#\"\"&F7F()%%PhiAGF 7F(F(**\"#7F()FC#\"\"(F7F(-F/6#,$*(F7F(,,*&\"\"$F(F5F(F(**F7F(F6F(F+F( F>F(F(*&F;F(F@F(F(**F7F(F6F(F+F(F9F(F(F:F(F(F+FAF(F()FGF)F(!\"\"**F)F( -F/6#*&,,*&F4F(F5F(F(**F)F(F6F(F+F(F>F(F(FUF(**F)F(F6F(F+F(F9F(F(*(F7F (F;F(FF(F(*(FSF(F;F(F@F(F(**F]oF(F6F(F+F(F9F(F(*(FSF(F;F(FF(F(**F7F(F6F(F+F(F9F(F(F:F(F(F+FAF(F()FC#FS F7F(F(*(FSF(-F/6#,$*(F7F(,**&FSF(F5F(F(**F7F(F6F(F+F(F9F(F(**F7F(F6F(F +F(F>F(F(FUF(F(F+FAF(F(FhpF(F(*(\"#=F(-F/6#*&,,*&F4F(F5F(F(**F)F(F6F(F +F(F>F(F(FUF(**F)F(F6F(F+F(F9F(F(F:F(F(F+FAF(FhpF(F(*(FIF(FhpF(-F/6#,$ *(F7FX,,*&FIF(F5F(F(**F]oF(F6F(F+F(F>F(F(FUF(**F]oF(F6F(F+F(F9F(F(*(FS F(F;F(FF(F(*(FSF(F;F(F@F(F(**F]oF(F6F(F+F(F9F(F(F:F(F(F+FAF(F(FX*,F] oF(FBF(FZF(F\\pF(F@F(F(*,F]oF(F.F(FBF(FjoF(FGF(FX*,F]oF(FZF(FBF(FjoF(F GF(FX*,F]oF(F.F(FBF(FF(F(**F]oF(F6F(F+F(F9F(F(*(FSF(F;F(FF(F(*0F4F(F7Fdt)FCFSF(-F/6#,$*(F7FX,,*&FIF(F5F( F(**F]oF(F6F(F+F(F>F(F(*(FSF(F;F(F@F(F(**F]oF(F6F(F+F(F9F(F(*(F)F(F;F( FFSF(FGF(F(*0FdqF(F7FdtFauF(-F/6#,$*(F7FX,,*&F IF(F5F(F(**F]oF(F6F(F+F(F9F(F(*(FSF(F;F(FF(F(*(F )F(F;F(F@F(F(F(F+FAF(F(F\\pF(FGF(F9F(FX*.FatF(F.F(FBF(FjoF(FF(FX*0FdqF(F7FdtFauF(FbuF(F\\pF(FGF(F>F(F(*0Fdq F(F7FdtFauF(FbuF(FjoF(F>F(FFF(FX*0F4F(F7FdtFauF(F^vF(FjoF()F9FSF(FFF(F (*.F4F(F7FdtFauF(FbuF(FhsF(F>F(F(*.F4F(F7FdtFetF(FftF(F9F(FGF(FX*.F4F( F7FdtFetF(-F/6#,$*(F7FX,,*&FIF(F5F(F(**F]oF(F6F(F+F(F>F(F(FUF(**F]oF(F 6F(F+F(F9F(F(*(F)F(F;F(FF(F(*.F4F(F7FdtFetF(-F/6# ,$*(F7FX,,*&FIF(F5F(F(**F]oF(F6F(F+F(F9F(F(F:F(**F]oF(F6F(F+F(F>F(F(*( F)F(F;F(F@F(F(F(F+FAF(F(F9F(FGF(FX*.FIF(F7FdtFetF(-F/6#,$*(F7FX,,*&FIF (F5F(F(**F]oF(F6F(F+F(F>F(F(*(FSF(F;F(F@F(F(**F]oF(F6F(F+F(F9F(F(*(F7F (F;F(FF(FX*.F4F(F7FdtFauF(F^vF(FjsF(F9F(F(*.F4F(F7FdtFa uF(FbuF(FjsF(F>F(FX*.F7F(F7FdtFauF(FbuF(F\\vF(FhsF(F(*.F7F(F7FdtFauF(F ^vF(FjsF(F_wF(F(*0F4F(F7FdtFauF(FbuF(FjoF(F\\vF(FFF(FX*.F4F(F7FdtFetF( FgxF(FGF(F>F(F(*.F4F(F7FdtFauF(F^vF(FhsF(F9F(FX*.FatF(FBF(F^oF(FjoF(FG F(F@F(F(*.FatF(FBF(F^oF(FjoF(FF (FX*.F7F(F7FdtFauF(F^vF(F_wF(FhsF(FX*.F4F(F7FdtFetF(F]xF(FjoF(F9F(F(*. F4F(F7FdtFetF(FftF(FjoF(F9F(F(F(-F/6#,$*(F7F(FQF(F+FAFXF(,&FjoFXFGF(! \"%FC#!\"(F7F(FX" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 739 "qdf:=s olve(cdf=p,x):\nQDF_:=MySimplify(qdf,true);\npdfgr:=[diff(pdf,mu),diff (pdf,sigma),diff(pdf,a),diff(pdf,b)]:\nPDFGR_:=MySimplify(pdfgr,true); \ncdfgr:=[diff(cdf,mu),diff(cdf,sigma),diff(cdf,a),diff(cdf,b)]:\nCDFG R_:=MySimplify(cdfgr,true);\nvalnum:=mu=0.5,sigma=3,a=-2,b=2:\nddf_num :=evalf(subs(valnum,x=1,ddf));\npdf_num:=evalf(subs(valnum,x=1,pdf)); \ncdf_num:=evalf(subs(valnum,x=1,cdf));\npdfgr_num:=evalf(subs(valnum, x=1,map(_x->_x,pdfgr)));\ncdfgr_num:=evalf(subs(valnum,x=1,cdfgr));\nq uantile_num:=evalf(solve(subs(valnum,cdf)=0.95,x));\nmu_num:=evalf(sub s(valnum,mu_));\nstd_num:=evalf(subs(valnum,sqrt(var_)));\nskew_num:=e valf(subs(valnum,skew_/(var_^(3/2))));\nkurt_num:=evalf(subs(valnum,ku rt_/(var_^2)));\nvar_num:=evalf(subs(valnum,var_));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%%QDF_G,$*&#\"\"\"\"\"#F(*&,&*&%#muGF(F)F'F(*(F)F(-% 'RootOfG6#,,-%$erfG6#%#_ZGF(*&F)F(%%PhiAGF(!\"\"F(F(*(F)F(%\"pGF(%%Phi BGF(F9*(F)F(F;F(F8F(F(F(%'sigma|irGF(F(F(F)F'F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'PDFGR_G7&,$**%%phiXG\"\"\",**&%\"XGF)%%PhiBGF)!\"\"* &F,F)%%PhiAGF)F)%%phiBGF.%%phiAGF)F)%'sigma|irG!\"#,&F-F.F0F)F4F.,$**F (F),.F-F)F0F.*&)F,\"\"#F)F-F)F.*&F:F)F0F)F)*&F1F)%\"BGF)F.*&F2F)%\"AGF )F)F)F3F4F5F4F.**F(F)F2F)F3F4F5F4,$**F(F)F1F)F3F4F5F4F." }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%'CDFGR_G7&,$*(,.*&%%phiAG\"\"\"%%PhiBGF+!\"\"* &%%phiXGF+F,F+F+*&F/F+%%PhiAGF+F-*&F1F+%%phiBGF+F+*&%%PhiXGF+F3F+F-*&F 5F+F*F+F+F+,&F,F-F1F+!\"#%'sigma|irGF-F-*(,.*(F*F+%\"AGF+F,F+F+*(%\"XG F+F/F+F,F+F-*(F?F+F/F+F1F+F+*(F1F+F3F+%\"BGF+F-*(F5F+F3F+FBF+F+*(F5F+F *F+F=F+F-F+F7F8F9F-,$**F*F+,&F,F+F5F-F+F7F8F9F-F-**,&F1F+F5F-F+F3F+F7F 8F9F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(ddf_numG$!+,\\b*[\"!#6" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%(pdf_numG$\"+A))>\"o#!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(cdf_numG$\"+DrwQu!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*pdfgr_numG7&$\"+L.QrF!#6$!+T78!=\"F($\"+D(>5:&F($!+c ^%GV'F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*cdfgr_numG7&$!+,#RS/%!#6 $\")N#ea$!#5$!*fX0#\\F+$!+U.u%y\"F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%-quantile_numG$\"+R-)\\z\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %'mu_numG$\"*cqG(p!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(std_numG$ \"+co\\>6!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)skew_numG$!+>S:&3( !#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)kurt_numG$\"+iK()o=!\"*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%(var_numG$\"+5KF`7!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 349 "pdfgrS:=map(_x->collect(factor(sub s(phiX=phiXNorm*Delta,phiA=phiANorm*Delta,phiB=phiBNorm*Delta,algsubs( PhiB-PhiA=Delta,_x))),[phiX,X]),pdfgrR);\ncdfgrS:=map(_x->collect(fact or(subs(phiX=phiXNorm*Delta,phiA=phiANorm*Delta,phiB=phiBNorm*Delta,Ph iX=PhiXNorm*Delta,PhiA=PhiANorm*Delta,PhiB=PhiBNorm*Delta,algsubs(PhiB -PhiA=Delta,_x))),[phiX,X]),pdfgrR);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%'pdfgrSG%'pdfgrRG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'cdfgrSG%'p dfgrRG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 378 "evalf(subs(valnu m,x=1,subs(phiXNorm=phiX/Delta,phiANorm=phiA/Delta,phiBNorm=phiB/Delta ,Delta=PhiB-PhiA,PhiA=1/2+1/2*erf(A/sqrt(2)),PhiB=1/2+1/2*erf(B/sqrt(2 )),phiX=exp(-xNorm*xNorm/2)/sqrt(2*Pi)/sigma,phiA=exp(-aNorm*aNorm/2)/ sqrt(2*Pi)/sigma,phiB=exp(-bNorm*bNorm/2)/sqrt(2*Pi)/sigma,X=xNorm,A=a Norm,B=bNorm,xNorm=(x-mu)/sigma,aNorm=(a-mu)/sigma,bNorm=(b-mu)/sigma, phiBNorm)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+C@C*R#!#5" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 924 "mu_simplified:=map(collect, map(factor,collect(factor(algsubs(\n PhiBNorm-PhiANo rm=1/NormalizationFactor,\n factor(subs(\n \+ exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm,\n \+ exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm,\n \+ exp(-xNorm^2/2)=sqrt(2*Pi)*phiXNorm,\n \+ erf(sqrt(2)*aNorm/2)=2*PhiANorm-1,\n \+ erf(sqrt(2)*bNorm/2)=2*PhiBNorm-1,\n \+ expand(subs(\n a =mu+sigma*aNorm,\n b=mu+sigm a*bNorm,\n mu_\n \+ )\n \+ )\n )\n )\n \+ )\n ),\n sigma\n)),NormalizationFa ctor);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%.mu_simplifiedG,&*(%4Norma lizationFactorG\"\"\",&%)phiANormGF(%)phiBNormG!\"\"F(%'sigma|irGF(F(% #muGF(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1246 "var_simplified: =map(collect,map(factor,collect(factor(algsubs(\n P hiBNorm-PhiANorm=1/NormalizationFactor,\n factor(su bs(\n exp(-aNorm^2/2)=sqrt(2*Pi)*phiANo rm,\n exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNo rm,\n exp(aNorm^2/2)=1/(sqrt(2*Pi)*phiA Norm),\n exp(bNorm^2/2)=1/(sqrt(2*Pi)*p hiBNorm),\n exp(aNorm^2)=1/(sqrt(2*Pi)* phiANorm)^2,\n exp(bNorm^2)=1/(sqrt(2*P i)*phiBNorm)^2,\n exp(xNorm^2)=1/(sqrt( 2*Pi)*phiXNorm)^2,\n erf(sqrt(2)*aNorm/ 2)=2*PhiANorm-1,\n erf(sqrt(2)*bNorm/2) =2*PhiBNorm-1,\n expand(subs(\n \+ a=mu+sigma*aNorm,\n \+ b=mu+sigma*bNorm,\n \+ var_\n \+ )\n )\n \+ )\n )\n )\n \+ ),\n sigma\n )),NormalizationFactor);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%/var_simplifiedG*&,(\"\"\"F'*&,(*(\" \"#F'%)phiANormGF'%)phiBNormGF'F'*$)F,F+F'!\"\"*$)F-F+F'F0F')%4Normali zationFactorGF+F'F'*&,&*&F,F'%&aNormGF'F'*&F-F'%&bNormGF'F0F'F4F'F'F') %'sigma|irGF+F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1248 "skew_s implified:=map(collect,map(factor,collect(factor(algsubs(\n \+ PhiBNorm-PhiANorm=1/NormalizationFactor,\n \+ factor(subs(\n exp(-aNorm^2/2)=sqrt(2* Pi)*phiANorm,\n exp(-bNorm^2/2)=sqrt(2* Pi)*phiBNorm,\n exp(aNorm^2/2)=1/(sqrt( 2*Pi)*phiANorm),\n exp(bNorm^2/2)=1/(sq rt(2*Pi)*phiBNorm),\n exp(aNorm^2)=1/(s qrt(2*Pi)*phiANorm)^2,\n exp(bNorm^2)=1 /(sqrt(2*Pi)*phiBNorm)^2,\n exp(xNorm^2 )=1/(sqrt(2*Pi)*phiXNorm)^2,\n erf(sqrt (2)*aNorm/2)=2*PhiANorm-1,\n erf(sqrt(2 )*bNorm/2)=2*PhiBNorm-1,\n expand(subs( \n a=mu+sigma*aNorm,\n \+ b=mu+sigma*bNorm,\n \+ skew_\n \+ )\n )\n \+ )\n )\n \+ )\n ),\n NormalizationFactor\n )),si gma);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%0skew_simplifiedG,(**\"\"# \"\"\")%'sigma|irG\"\"$F(),&%)phiANormGF(%)phiBNormG!\"\"F+F()%4Normal izationFactorGF+F(F(*,F+F(F)F(F-F(,&*&F.F(%&aNormGF(F(*&F/F(%&bNormGF( F0F()F2F'F(F0*(F)F(,**&F.F()F6F'F(F(F.F0F/F(*&F/F()F8F'F(F0F(F2F(F(" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1400 "kurt_simplified:=map(col lect,map(factor,collect(factor(algsubs(\n PhiBNorm- PhiANorm=1/NormalizationFactor,\n factor(subs(\n \+ exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm,\n \+ exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm,\n \+ exp(aNorm^2/2)=1/(sqrt(2*Pi)*phiANorm),\n exp(bNorm^2/2)=1/(sqrt(2*Pi)*phiBNorm) ,\n exp(3*aNorm^2/2)=1/(sqrt(2*Pi)*phiA Norm)^3,\n exp(3*bNorm^2/2)=1/(sqrt(2*P i)*phiBNorm)^3,\n exp(aNorm^2)=1/(sqrt( 2*Pi)*phiANorm)^2,\n exp(bNorm^2)=1/(sq rt(2*Pi)*phiBNorm)^2,\n exp(xNorm^2)=1/ (sqrt(2*Pi)*phiXNorm)^2,\n erf(sqrt(2)* aNorm/2)=2*PhiANorm-1,\n erf(sqrt(2)*bN orm/2)=2*PhiBNorm-1,\n expand(subs(\n \+ a=mu+sigma*aNorm,\n \+ b=mu+sigma*bNorm,\n \+ kurt_\n \+ )\n )\n \+ )\n )\n )\n \+ ),\n NormalizationFactor\n )),sigma) ;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%0kurt_simplifiedG,,**\"\"$\"\" \")%'sigma|irG\"\"%F(),&%)phiANormGF(%)phiBNormG!\"\"F+F()%4Normalizat ionFactorGF+F(F0*,\"\"'F(F)F()F-\"\"#F(,&*&F.F(%&aNormGF(F(*&F/F(%&bNo rmGF(F0F()F2F'F(F(*,F6F(F)F(F-F(,*F.F(*(F6F(F.F()F9F6F(F(*(F6F(F/F()F; F6F(F0F/F0F()F2F6F(F0*(F)F(,**(F'F(F/F(F;F(F0*&F/F()F;F'F(F0*(F'F(F.F( F9F(F(*&F.F()F9F'F(F(F(F2F(F(*&F'F(F)F(F(" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 462 "k1:=kurt_simplified:\nL1:=coeffs(expand(k1),Normal izationFactor):\nk2:=subs(ratio=(phiBNorm-phiANorm)*NormalizationFacto r,crossTerm1=(bNorm*phiBNorm-aNorm*phiANorm)*NormalizationFactor,cross Term2=(bNorm^2*phiBNorm-aNorm^2*phiANorm)*NormalizationFactor,crossTer m3=(bNorm^3*phiBNorm-aNorm^3*phiANorm)*NormalizationFactor,\n (3 - 3* ratio^4 - 6*ratio^2*crossTerm1 - 2*ratio*(ratio+2*crossTerm2) - 3*cros sTerm1-crossTerm3)\n):\nL2:=coeffs(expand(k2),NormalizationFactor):" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "for i from 1 to 4 do\n factor(L1[ i]/L2[i]);\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%'sigma|irG\"\"% \"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%'sigma|irG\"\"%\"\"\"" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%'sigma|irG\"\"%\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%'sigma|irG\"\"%\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "evalf(subs(valnum,k2));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#,.$\"\"$\"\"!\"\"\"*($F%F&F'),&*&$F'F&F'%)phiANormGF '!\"\"%)phiBNormGF'\"\"%F')%4NormalizationFactorGF1F'F/**$\"\"'F&F')F+ \"\"#F')F3F%F',&*($F'F&F'F.F'%&aNormGF'F/*&F0F'%&bNormGF'F'F'F/**$F8F& F'F+F'F3F',&*&F+F'F3F'F'*($F8F&F',&*&F0F')F?F8F'F'*($F'F&F'F.F')F=F8F' F/F'F3F'F'F'F/*($F%F&F'F:F'F3F'F/*($F'F&F',&*&F0F')F?F%F'F'*($F'F&F'F. F')F=F%F'F/F'F3F'F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} }{MARK "11" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidTruncatedNormal.txt000066400000000000000000000726441307543307100232040ustar00rootroot00000000000000> restart: > with(Statistics): > assume(sigma>0): > normal_:=RandomVariable(Normal(mu,sigma)): > > simplificationRules:=x=mu+sigma*X,a=mu+sigma*A,b=mu+sigma*B,erf(sqrt(2 > )*A/2)=2*PhiA-1,erf(sqrt(2)*B/2)=2*PhiB-1,erf(sqrt(2)*X/2)=2*PhiX-1,ex > p(-A^2/2)=sqrt(2*Pi)*phiA,exp(-B^2/2)=sqrt(2*Pi)*phiB,exp(-X^2/2)=sqrt > (2*Pi)*phiX: > MySimplify:=proc(u,fact) > local res; > res:=map(_x->(subs(simplificationRules,_x)),u); > if fact then > res:=map(_x->factor(subs(simplificationRules,_x)),factor(res)); > fi: > res > end: > > pdf:=PDF(normal_,x)/(subs(x=b,CDF(normal_,x))-subs(x=a,CDF(normal_,x)) > ): > PDF_:=MySimplify(pdf,true); > ddf:=diff(pdf,x): > DDF_:=MySimplify(ddf,true); > cdf:=int(subs(x=t,pdf),t=a..x): > CDF_:=MySimplify(cdf,true); > mu_:=collect(collect(int(x*pdf,x=a..b),mu),sigma); > MU_:=MySimplify(mu_,true); > var_:=int((x-mu_)^2*pdf,x=a..b): > VAR_:=MySimplify(var_,true); > skew_:=int((x-mu_)^3*pdf,x=a..b): > SKEW_:=MySimplify(skew_,true); > kurt_:=int((x-mu_)^4*pdf,x=a..b): > KURT_:=MySimplify(kurt_,true); > phiX PDF_ := - --------------------- sigma~ (-PhiB + PhiA) X phiX DDF_ := ---------------------- 2 sigma~ (-PhiB + PhiA) PhiA - PhiX CDF_ := ------------ -PhiB + PhiA / 2 2 | 1/2 -2 mu a + mu + a mu_ := - |-2 exp(- ------------------) | 2 \ 2 sigma~ 2 2 \ / 1/2 -2 mu b + mu + b | / | + 2 exp(- ------------------)| sigma~ / | 2 | / \ 2 sigma~ / / 1/2 1/2 \ \ | 2 (b - mu) 2 (a - mu) | 1/2| |erf(-------------) - erf(-------------)| Pi | \ 2 sigma~ 2 sigma~ / / / 1/2 1/2 \ | 1/2 2 (a - mu) 1/2 2 (b - mu) | |Pi erf(-------------) - Pi erf(-------------)| mu \ 2 sigma~ 2 sigma~ / - -------------------------------------------------------- / 1/2 1/2 \ | 2 (b - mu) 2 (a - mu) | 1/2 |erf(-------------) - erf(-------------)| Pi \ 2 sigma~ 2 sigma~ / sigma~ phiA - sigma~ phiB + PhiB mu - PhiA mu MU_ := - --------------------------------------------- -PhiB + PhiA / 2 | VAR_ := -1/2 sigma~ | | \ 2 2 2 3 mu + 2 mu sigma~ B + 2 mu sigma~ A + sigma~ A 1/2 exp(--------------------------------------------------) Pi 2 sigma~ 1/2 2 2 2 - 2 Pi exp((6 mu + 4 mu sigma~ A + sigma~ A 2 2 / 2 1/2 + 4 mu sigma~ B + sigma~ B ) / (2 sigma~ )) + 2 Pi exp( / 2 2 2 (6 mu + 4 mu sigma~ B + sigma~ B + 4 mu sigma~ A 2 2 / 2 1/2 2 + 2 sigma~ A ) / (2 sigma~ )) PhiB B - 2 Pi exp((6 mu / 2 2 2 2 + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B + 2 sigma~ B ) / 2 (3/2) 1/2 / (2 sigma~ )) PhiB A + 4 Pi exp(%1) PhiB PhiA - 2 / 2 2 2 Pi exp((6 mu + 4 mu sigma~ B + sigma~ B + 4 mu sigma~ A 2 2 / 2 1/2 2 + 2 sigma~ A ) / (2 sigma~ )) B PhiA + 2 Pi exp((6 mu / 2 2 2 2 + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B + 2 sigma~ B ) / 2 (3/2) 2 / (2 sigma~ )) A PhiA - 2 Pi exp(%1) PhiB + / 2 2 2 3 mu + 2 mu sigma~ A + 2 mu sigma~ B + sigma~ B 1/2 exp(--------------------------------------------------) Pi 2 sigma~ \ (3/2) 2| / 2 - 2 Pi exp(%1) PhiA | exp(-%1) / ((-PhiB + PhiA) | / / 3/2 Pi ) 2 2 2 %1 := (3 mu + 2 mu sigma~ A + sigma~ A + 2 mu sigma~ B 2 2 / 2 + sigma~ B ) / sigma~ / / 3 | (3/2) SKEW_ := -1/2 sigma~ |3 Pi %3 PhiB A - 3 | \ 2 2 2 3 mu + 2 mu sigma~ A + 2 mu sigma~ B + sigma~ B exp(--------------------------------------------------) 2 sigma~ (3/2) 1/2 2 2 1/2 Pi PhiB A - 2 2 Pi %2 PhiB A PhiA + 2 Pi exp(- ( 2 2 2 -6 mu - 4 mu sigma~ A + sigma~ A - 4 mu sigma~ B 2 2 / 2 1/2 2 - 2 sigma~ B ) / (2 sigma~ )) - 2 2 Pi %1 PhiB PhiA / 1/2 2 1/2 2 2 + 2 2 Pi %2 PhiB PhiA + 2 2 Pi %1 PhiB B PhiA + 3 1/2 2 Pi 2 2 2 6 mu + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B exp(--------------------------------------------------) - 2 2 sigma~ 1/2 2 2 2 2 Pi exp((6 mu + 4 mu sigma~ B - sigma~ B 2 2 / 2 1/2 + 4 mu sigma~ A + 2 sigma~ A ) / (2 sigma~ )) - 3 2 Pi / 2 2 2 6 mu + 4 mu sigma~ A + 4 mu sigma~ B + sigma~ B exp(--------------------------------------------------) 2 2 sigma~ 1/2 2 2 2 1/2 2 2 + 2 Pi %2 A PhiA + 2 Pi %1 PhiA 1/2 2 2 2 1/2 2 2 + 2 Pi %2 PhiB A + 2 Pi %1 PhiB (3/2) (3/2) - 3 Pi %3 A PhiA - 3 Pi %3 PhiA B + 3 2 2 2 3 mu + 2 mu sigma~ B + 2 mu sigma~ A + sigma~ A exp(--------------------------------------------------) 2 sigma~ (3/2) 1/2 2 2 2 1/2 2 2 Pi PhiA B - 2 Pi %1 B PhiA - 2 Pi %2 PhiB (3/2) + 3 Pi %3 PhiB B + 3 2 2 2 3 mu + 2 mu sigma~ A + 2 mu sigma~ B + sigma~ B exp(--------------------------------------------------) 2 sigma~ (3/2) 1/2 2 2 Pi A PhiA - 2 Pi %2 PhiA - 3 2 2 2 3 mu + 2 mu sigma~ B + 2 mu sigma~ A + sigma~ A exp(--------------------------------------------------) 2 sigma~ \ (3/2) 1/2 2 2 2| 2 Pi PhiB B - 2 Pi %1 PhiB B | exp(- (3 mu | / 2 2 2 2 + 2 mu sigma~ A + sigma~ A + 2 mu sigma~ B + sigma~ B ) / 2 / 3 5/2 / sigma~ ) / ((-PhiB + PhiA) Pi ) / / 2 2 2 %1 := exp((6 mu + 4 mu sigma~ B + sigma~ B + 4 mu sigma~ A 2 2 / 2 + 2 sigma~ A ) / (2 sigma~ )) / 2 2 2 %2 := exp((6 mu + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B 2 2 / 2 + 2 sigma~ B ) / (2 sigma~ )) / 2 2 2 %3 := exp((6 mu + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B 2 2 / 2 + sigma~ B ) / (2 sigma~ )) / / 4 | (7/2) 2 %1 4 KURT_ := -1/4 sigma~ |-12 Pi exp(-------) PhiA | 2 \ sigma~ (5/2) 2 2 (5/2) 2 2 + 8 %5 Pi B PhiA + 8 Pi %8 PhiB A (5/2) 2 2 (5/2) 2 2 - 8 Pi %2 PhiB A + 8 %5 Pi PhiB B + 3 2 2 2 2 (3 mu + 2 mu sigma~ B + 2 mu sigma~ A + sigma~ A ) exp(------------------------------------------------------) 2 sigma~ (3/2) Pi + 3 2 2 2 2 (3 mu + 2 mu sigma~ A + 2 mu sigma~ B + sigma~ B ) exp(------------------------------------------------------) 2 sigma~ (3/2) (3/2) 2 2 2 Pi - 12 Pi exp((12 mu + 8 mu sigma~ A + sigma~ A 2 2 / 2 + 8 mu sigma~ B + 3 sigma~ B ) / (2 sigma~ )) + 18 exp(( / 2 2 2 6 mu + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B 2 2 / 2 (3/2) (3/2) 2 + sigma~ B ) / sigma~ ) Pi - 12 Pi exp((12 mu / 2 2 2 2 + 8 mu sigma~ A + 3 sigma~ A + 8 mu sigma~ B + sigma~ B ) / 2 1/2 2 / (2 sigma~ )) + 12 2 Pi %3 PhiB A / 1/2 3 3 3 1/2 2 + 2 2 Pi %7 A PhiA + 12 2 Pi %6 PhiA B 1/2 3 2 3 1/2 3 3 + 6 2 Pi %7 PhiB A PhiA + 6 2 Pi %4 PhiB B 1/2 2 1/2 3 2 + 6 2 Pi %3 PhiB B - 18 2 Pi %7 PhiB A PhiA 1/2 2 1/2 3 3 2 - 6 2 Pi %6 PhiB A + 6 2 Pi %4 PhiB B PhiA (5/2) 2 (5/2) - 16 Pi %8 PhiB A PhiA - 8 %8 Pi PhiB PhiA (5/2) 2 2 1/2 3 3 - 8 Pi %2 B PhiA - 6 2 Pi %7 PhiB A (5/2) 2 1/2 2 2 + 16 Pi %2 PhiB A PhiA - 6 2 Pi exp((12 mu 2 2 2 2 + 8 mu sigma~ B + sigma~ B + 8 mu sigma~ A + 4 sigma~ A ) / 2 (5/2) 2 / (2 sigma~ )) PhiA B - 8 Pi %2 PhiB / (5/2) 2 (7/2) 2 %1 4 + 4 %8 Pi PhiB - 12 Pi exp(-------) PhiB 2 sigma~ (5/2) 2 (5/2) + 4 %8 Pi PhiA - 8 %5 Pi PhiB PhiA 1/2 3 2 1/2 3 3 2 + 18 2 Pi %4 PhiB PhiA B - 6 2 Pi %7 PhiB A PhiA 1/2 2 2 2 2 + 6 2 Pi exp((12 mu + 8 mu sigma~ A + sigma~ A 2 2 / 2 + 8 mu sigma~ B + 4 sigma~ B ) / (2 sigma~ )) A PhiA / 1/2 2 1/2 3 3 3 - 12 2 Pi %6 PhiB B - 2 2 Pi %4 B PhiA 1/2 3 2 1/2 3 3 - 18 2 Pi %4 PhiB PhiA B - 6 2 Pi %4 PhiA B 1/2 3 2 3 - 6 2 Pi %4 PhiB B PhiA (7/2) 2 %1 3 (5/2) 2 2 + 48 Pi exp(-------) PhiB PhiA - 8 Pi %2 PhiB B 2 sigma~ (5/2) 2 2 (7/2) 2 %1 3 + 8 Pi %8 A PhiA + 48 Pi exp(-------) PhiB PhiA 2 sigma~ (5/2) 2 1/2 3 2 + 16 Pi %2 PhiB B PhiA + 18 2 Pi %7 PhiB A PhiA 1/2 3 3 3 1/2 3 3 1/2 - 2 2 Pi %7 PhiB A + 6 2 Pi %7 A PhiA - 6 2 2 2 2 2 Pi exp((12 mu + 8 mu sigma~ A + sigma~ A + 8 mu sigma~ B 2 2 / 2 1/2 2 + 4 sigma~ B ) / (2 sigma~ )) PhiB A + 6 2 Pi exp(( / 2 2 2 12 mu + 8 mu sigma~ B + sigma~ B + 8 mu sigma~ A 2 2 / 2 + 4 sigma~ A ) / (2 sigma~ )) PhiB B / (5/2) 2 1/2 2 - 16 %5 Pi PhiB B PhiA + 6 2 Pi %6 A PhiA (5/2) 2 2 - 8 Pi %2 A PhiA (7/2) 2 %1 2 2 (5/2) 2 - 72 Pi exp(-------) PhiB PhiA + 4 %5 Pi PhiB 2 sigma~ (5/2) 2 1/2 2 + 4 %5 Pi PhiA - 6 2 Pi %3 PhiA B 1/2 3 3 3 1/2 2 + 2 2 Pi %4 PhiB B - 12 2 Pi %3 A PhiA \ (5/2) (5/2) 2| + 16 Pi %2 PhiB PhiA - 8 Pi %2 PhiA | | / 2 %1 / 4 7/2 exp(- -------) / ((-PhiB + PhiA) Pi ) 2 / sigma~ 2 2 2 %1 := 3 mu + 2 mu sigma~ A + sigma~ A + 2 mu sigma~ B 2 2 + sigma~ B 2 2 2 %2 := exp((12 mu + 8 mu sigma~ A + 3 sigma~ A + 8 mu sigma~ B 2 2 / 2 + 3 sigma~ B ) / (2 sigma~ )) / 2 2 2 %3 := exp((12 mu + 8 mu sigma~ A + 8 mu sigma~ B + 3 sigma~ B 2 2 / 2 + 2 sigma~ A ) / (2 sigma~ )) / 2 2 2 %4 := exp((12 mu + 8 mu sigma~ B + 3 sigma~ B + 8 mu sigma~ A 2 2 / 2 + 4 sigma~ A ) / (2 sigma~ )) / 2 2 2 %5 := exp((6 mu + 4 mu sigma~ B + sigma~ B + 4 mu sigma~ A 2 2 / 2 + 2 sigma~ A ) / sigma~ ) / 2 2 2 %6 := exp((12 mu + 8 mu sigma~ A + 3 sigma~ A + 8 mu sigma~ B 2 2 / 2 + 2 sigma~ B ) / (2 sigma~ )) / 2 2 2 %7 := exp((12 mu + 8 mu sigma~ A + 3 sigma~ A + 8 mu sigma~ B 2 2 / 2 + 4 sigma~ B ) / (2 sigma~ )) / 2 2 2 %8 := exp((6 mu + 4 mu sigma~ A + sigma~ A + 4 mu sigma~ B 2 2 / 2 + 2 sigma~ B ) / sigma~ ) / > qdf:=solve(cdf=p,x): > QDF_:=MySimplify(qdf,true); > pdfgr:=[diff(pdf,mu),diff(pdf,sigma),diff(pdf,a),diff(pdf,b)]: > PDFGR_:=MySimplify(pdfgr,true); > cdfgr:=[diff(cdf,mu),diff(cdf,sigma),diff(cdf,a),diff(cdf,b)]: > CDFGR_:=MySimplify(cdfgr,true); > valnum:=mu=0.5,sigma=3,a=-2,b=2: > ddf_num:=evalf(subs(valnum,x=1,ddf)); > pdf_num:=evalf(subs(valnum,x=1,pdf)); > cdf_num:=evalf(subs(valnum,x=1,cdf)); > pdfgr_num:=evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > cdfgr_num:=evalf(subs(valnum,x=1,cdfgr)); > quantile_num:=evalf(solve(subs(valnum,cdf)=0.95,x)); > mu_num:=evalf(subs(valnum,mu_)); > std_num:=evalf(subs(valnum,sqrt(var_))); > skew_num:=evalf(subs(valnum,skew_/(var_^(3/2)))); > kurt_num:=evalf(subs(valnum,kurt_/(var_^2))); > var_num:=evalf(subs(valnum,var_)); 1/2 QDF_ := 1/2 (mu 2 + 2 RootOf(erf(_Z) - 2 PhiA + 1 - 2 p PhiB + 2 p PhiA) sigma~) 1/2 2 phiX (-X PhiB + X PhiA - phiB + phiA) PDFGR_ := [- -------------------------------------, 2 2 sigma~ (-PhiB + PhiA) 2 2 phiX (PhiB - PhiA - X PhiB + X PhiA - phiB B + phiA A) - --------------------------------------------------------, 2 2 sigma~ (-PhiB + PhiA) phiX phiA phiX phiB -----------------------, - -----------------------] 2 2 2 2 sigma~ (-PhiB + PhiA) sigma~ (-PhiB + PhiA) CDFGR_ := [- (-phiA PhiB + phiX PhiB - phiX PhiA + PhiA phiB 2 - PhiX phiB + PhiX phiA)/((-PhiB + PhiA) sigma~), ( phiA A PhiB - X phiX PhiB + X phiX PhiA - PhiA phiB B 2 + PhiX phiB B - PhiX phiA A)/((-PhiB + PhiA) sigma~), phiA (PhiB - PhiX) (PhiA - PhiX) phiB - ----------------------, ----------------------] 2 2 (-PhiB + PhiA) sigma~ (-PhiB + PhiA) sigma~ ddf_num := -0.01489554901 pdf_num := 0.2681198822 cdf_num := 0.7438767125 pdfgr_num := [ 0.02771380333, -0.01180131241, 0.05151019725, -0.06432845156] cdfgr_num := [-0.04044039201, 0.0035458235, -0.0492054559, -0.1784740342] quantile_num := 1.794980239 mu_num := 0.0697287056 std_num := 1.119496856 skew_num := -0.07085153763 kurt_num := 1.868873413 var_num := 1.253273210 > pdfgrS:=map(_x->collect(factor(subs(phiX=phiXNorm*Delta,phiA=phiANorm* > Delta,phiB=phiBNorm*Delta,algsubs(PhiB-PhiA=Delta,_x))),[phiX,X]),pdfg > rR); > cdfgrS:=map(_x->collect(factor(subs(phiX=phiXNorm*Delta,phiA=phiANorm* > Delta,phiB=phiBNorm*Delta,PhiX=PhiXNorm*Delta,PhiA=PhiANorm*Delta,PhiB > =PhiBNorm*Delta,algsubs(PhiB-PhiA=Delta,_x))),[phiX,X]),pdfgrR); pdfgrS := pdfgrR cdfgrS := pdfgrR > evalf(subs(valnum,x=1,subs(phiXNorm=phiX/Delta,phiANorm=phiA/Delta,phi > BNorm=phiB/Delta,Delta=PhiB-PhiA,PhiA=1/2+1/2*erf(A/sqrt(2)),PhiB=1/2+ > 1/2*erf(B/sqrt(2)),phiX=exp(-xNorm*xNorm/2)/sqrt(2*Pi)/sigma,phiA=exp( > -aNorm*aNorm/2)/sqrt(2*Pi)/sigma,phiB=exp(-bNorm*bNorm/2)/sqrt(2*Pi)/s > igma,X=xNorm,A=aNorm,B=bNorm,xNorm=(x-mu)/sigma,aNorm=(a-mu)/sigma,bNo > rm=(b-mu)/sigma,phiBNorm))); 0.2399242124 > mu_simplified:=map(collect,map(factor,collect(factor(algsubs( > PhiBNorm-PhiANorm=1/NormalizationFactor, > factor(subs( > exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm, > exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm, > exp(-xNorm^2/2)=sqrt(2*Pi)*phiXNorm, > erf(sqrt(2)*aNorm/2)=2*PhiANorm-1, > erf(sqrt(2)*bNorm/2)=2*PhiBNorm-1, > expand(subs( > a=mu+sigma*aNorm, > b=mu+sigma*bNorm, > mu_ > ) > ) > ) > ) > ) > ), > sigma > )),NormalizationFactor); mu_simplified := NormalizationFactor (phiANorm - phiBNorm) sigma~ + mu > var_simplified:=map(collect,map(factor,collect(factor(algsubs( > PhiBNorm-PhiANorm=1/NormalizationFactor, > factor(subs( > exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm, > exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm, > > exp(aNorm^2/2)=1/(sqrt(2*Pi)*phiANorm), > > exp(bNorm^2/2)=1/(sqrt(2*Pi)*phiBNorm), > > exp(aNorm^2)=1/(sqrt(2*Pi)*phiANorm)^2, > > exp(bNorm^2)=1/(sqrt(2*Pi)*phiBNorm)^2, > > exp(xNorm^2)=1/(sqrt(2*Pi)*phiXNorm)^2, > erf(sqrt(2)*aNorm/2)=2*PhiANorm-1, > erf(sqrt(2)*bNorm/2)=2*PhiBNorm-1, > expand(subs( > a=mu+sigma*aNorm, > b=mu+sigma*bNorm, > var_ > ) > ) > ) > ) > ) > ), > sigma > )),NormalizationFactor); var_simplified := (1 + 2 2 (-phiBNorm - phiANorm + 2 phiANorm phiBNorm) 2 NormalizationFactor + (phiANorm aNorm - phiBNorm bNorm) NormalizationFactor) 2 sigma~ > skew_simplified:=map(collect,map(factor,collect(factor(algsubs( > PhiBNorm-PhiANorm=1/NormalizationFactor, > factor(subs( > exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm, > exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm, > > exp(aNorm^2/2)=1/(sqrt(2*Pi)*phiANorm), > > exp(bNorm^2/2)=1/(sqrt(2*Pi)*phiBNorm), > > exp(aNorm^2)=1/(sqrt(2*Pi)*phiANorm)^2, > > exp(bNorm^2)=1/(sqrt(2*Pi)*phiBNorm)^2, > > exp(xNorm^2)=1/(sqrt(2*Pi)*phiXNorm)^2, > erf(sqrt(2)*aNorm/2)=2*PhiANorm-1, > erf(sqrt(2)*bNorm/2)=2*PhiBNorm-1, > expand(subs( > a=mu+sigma*aNorm, > b=mu+sigma*bNorm, > skew_ > ) > ) > ) > ) > ) > ), > NormalizationFactor > )),sigma); skew_simplified := 3 3 3 2 sigma~ (phiANorm - phiBNorm) NormalizationFactor - 3 3 sigma~ (phiANorm - phiBNorm) 2 (-phiBNorm bNorm + phiANorm aNorm) NormalizationFactor + 3 sigma~ 2 2 (phiANorm aNorm - phiBNorm bNorm - phiANorm + phiBNorm) NormalizationFactor > kurt_simplified:=map(collect,map(factor,collect(factor(algsubs( > PhiBNorm-PhiANorm=1/NormalizationFactor, > factor(subs( > exp(-aNorm^2/2)=sqrt(2*Pi)*phiANorm, > exp(-bNorm^2/2)=sqrt(2*Pi)*phiBNorm, > > exp(aNorm^2/2)=1/(sqrt(2*Pi)*phiANorm), > > exp(bNorm^2/2)=1/(sqrt(2*Pi)*phiBNorm), > > exp(3*aNorm^2/2)=1/(sqrt(2*Pi)*phiANorm)^3, > > exp(3*bNorm^2/2)=1/(sqrt(2*Pi)*phiBNorm)^3, > > exp(aNorm^2)=1/(sqrt(2*Pi)*phiANorm)^2, > > exp(bNorm^2)=1/(sqrt(2*Pi)*phiBNorm)^2, > > exp(xNorm^2)=1/(sqrt(2*Pi)*phiXNorm)^2, > erf(sqrt(2)*aNorm/2)=2*PhiANorm-1, > erf(sqrt(2)*bNorm/2)=2*PhiBNorm-1, > expand(subs( > a=mu+sigma*aNorm, > b=mu+sigma*bNorm, > kurt_ > ) > ) > ) > ) > ) > ), > NormalizationFactor > )),sigma); kurt_simplified := 4 4 4 -3 sigma~ (phiANorm - phiBNorm) NormalizationFactor + 6 4 2 sigma~ (phiANorm - phiBNorm) 3 (-phiBNorm bNorm + phiANorm aNorm) NormalizationFactor - 2 4 sigma~ (phiANorm - phiBNorm) 2 2 (phiANorm + 2 phiANorm aNorm - phiBNorm - 2 phiBNorm bNorm ) 2 4 NormalizationFactor + sigma~ (-3 phiBNorm bNorm 3 3 - phiBNorm bNorm + phiANorm aNorm + 3 phiANorm aNorm) 4 NormalizationFactor + 3 sigma~ > k1:=kurt_simplified: > L1:=coeffs(expand(k1),NormalizationFactor): > k2:=subs(ratio=(phiBNorm-phiANorm)*NormalizationFactor,crossTerm1=(bNo > rm*phiBNorm-aNorm*phiANorm)*NormalizationFactor,crossTerm2=(bNorm^2*ph > iBNorm-aNorm^2*phiANorm)*NormalizationFactor,crossTerm3=(bNorm^3*phiBN > orm-aNorm^3*phiANorm)*NormalizationFactor, > (3 - 3*ratio^4 - 6*ratio^2*crossTerm1 - 2*ratio*(ratio+2*crossTerm2) > - 3*crossTerm1-crossTerm3) > ): > L2:=coeffs(expand(k2),NormalizationFactor): > for i from 1 to 4 do > factor(L1[i]/L2[i]); > od; 4 sigma~ 4 sigma~ 4 sigma~ 4 sigma~ > evalf(subs(valnum,k2)); 4 4 3. - 3. (-1. phiANorm + phiBNorm) NormalizationFactor - 6. 2 3 (-1. phiANorm + phiBNorm) NormalizationFactor (phiBNorm bNorm - 1. phiANorm aNorm) + 2. (-1. phiANorm + phiBNorm) NormalizationFactor ( (phiBNorm bNorm - 1. phiANorm aNorm) NormalizationFactor + 2 2 2. (phiBNorm bNorm - 1. phiANorm aNorm ) NormalizationFactor ) - 3. (phiBNorm bNorm - 1. phiANorm aNorm) NormalizationFactor - 3 3 1. (phiBNorm bNorm - 1. phiANorm aNorm ) NormalizationFactor > openturns-1.9/validation/src/ValidTruncatedNormalFactory.mw000066400000000000000000001425041307543307100243310ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY9LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUStTdGF0aXN0aWNzRidGL0YyRjlGNUZPRmduLUY2Ni1RIiNGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRiw2JVEvcGhpJkFzc2lnbjtQREZGJ0YvRjItRmBvNiQtRiM2Ji1GLDYlUS9SYW5kb21WYXJpYWJsZUYnRi9GMi1GYG82JC1GIzYkLUYsNiVRJ05vcm1hbEYnRi9GMi1GYG82JC1GIzYlLUYsNiVRI211RicvRjBGPUY5LUY2Ni1RIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam4vRk5RLDAuMzMzMzMzM2VtRictRiw2JVEmc2lnbWFGJ0ZicUY5RjlGOUZjcS1GLDYlUSJ4RidGL0YyRjktRjY2LVEiO0YnRjlGO0ZmcUZARkJGREZGRkhGam5GTUZPRmduRmdvLUYsNiVRL1BISSZBc3NpZ247Q0RGRidGL0YyRl1wRl9yRk9GZ24tRiw2JVEkUEhJRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEiRkYnRi9GMi1GYG82JC1GIzYjRlxyRjlGX3JGZ24= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkiRkc2IjYjSSJ4R0Yk QyQ+SSJMRzYiLCgqJkkibkdGJSIiIi1JJGxvZ0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjLCYtSSVzdWJzR0YtNiQvSSJ4R0YlKiYsJkkiYkdGJUYpSSNtdUdGJSEiIkYpSSZzaWdtYUdGJUY6SSRQSElHRiVGKS1GMjYkL0Y1KiYsJkkiYUdGJUYpRjlGOkYpRjtGOkY8RjpGKUY6KiZGKEYpLUYrNiMtSSVzcXJ0R0YlNiMsJComSSNQaUdGLUYpRjsiIiNGTEYpRjoqJi1JIi9HRiw2IywkKiRGO0ZMRkxGKS1JJHN1bUdGJTYkKiQsJiZJIlhHRiU2I0kiaUdGJUYpRjlGOkZML0ZlbjtGKUYoRilGOkYp LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqJkkibkc2IiIiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJi1JIkZHRiU2IyomLCZJImJHRiVGJkkjbXVHRiUhIiJGJkkmc2lnbWFHRiVGNUYmLUYvNiMqJiwmSSJhR0YlRiZGNEY1RiZGNkY1RjVGJkY1KiZGJEYmLUYoNiMqJiIiIyNGJkZAKiZJI1BpR0YqRiZGNkZARkFGJkY1KiYsJiomRiRGJkY0RkBGJi1JJHN1bUdGKTYkLCYqJiZJIlhHRiU2I0kiaUdGJUYmRjRGJiEiIyokRkxGQEYmL0ZPO0YmRiRGJkYmRjZGUCNGNUZA QyY+SSVkTG11RzYiLUklZGlmZkclKnByb3RlY3RlZEc2JEkiTEdGJUkjbXVHRiUiIiI+SShkTHNpZ21hR0YlLUYnNiRGKkkmc2lnbWFHRiVGLA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYqKEkibkc2IiIiIiwmKiYtLUkiREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjSSJGR0YlNiMqJiwmSSJiR0YlRiZJI211R0YlISIiRiZJJnNpZ21hR0YlRjZGJkY3RjZGNiomLUYqNiMqJiwmSSJhR0YlRiZGNUY2RiZGN0Y2RiZGN0Y2RiZGJiwmLUYwRjFGJi1GMEY6RjZGNkY2KiYsJiomRiRGJkY1RiYiIiMtSSRzdW1HRiw2JCwkJkkiWEdGJTYjSSJpR0YlISIjL0ZMO0YmRiRGJkYmRjdGTSNGNkZE LCgqKEkibkc2IiIiIiwmKigtLUkiREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJTYjSSJGR0YlNiMqJiwmSSJiR0YlRiZJI211R0YlISIiRiZJJnNpZ21hR0YlRjZGJkYzRiZGNyEiI0Y2KigtRio2IyomLCZJImFHRiVGJkY1RjZGJkY3RjZGJkY9RiZGN0Y4RiZGJiwmLUYwRjFGJi1GMEY7RjZGNkY2KiZGJEYmRjdGNkY2KiYsJiomRiRGJkY1IiIjRiYtSSRzdW1HRiw2JCwmKiYmSSJYR0YlNiNJImlHRiVGJkY1RiZGOCokRkxGRkYmL0ZPO0YmRiRGJkYmRjchIiRGJg== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY0LUkjbWlHRiQ2JVEnZDJMbXUyRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtRiw2JVElZGlmZkYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYnLUYsNiVRIkxGJ0YvRjItRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTlEsMC4zMzMzMzMzZW1GJy1GLDYlUSNtdUYnL0YwRj1GOS1GNjYtUSIkRidGOUY7Rj5GQEZCRkRGRkZIRmhuL0ZORmluLUkjbW5HRiQ2JFEiMkYnRjlGOS1GNjYtUSI7RidGOUY7RmduRkBGQkZERkZGSEZobkZNLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRmluLyUmZGVwdGhHRmBwLyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiVRKmQyTHNpZ21hMkYnRi9GMkY1Rk8tRlM2JC1GIzYnRldGWi1GLDYlUSZzaWdtYUYnRl9vRjlGYG9GZG9GOUZob0ZbcC1GLDYlUStkMkxtdXNpZ21hRidGL0YyRjVGTy1GUzYkLUYjNiZGTy1GUzYkLUYjNiVGV0ZaRlxvRjlGWkZfcUY5RmhvLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkhGaG5GY28= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCgqKEkibkc2IiIiIiwmKiYtLS1JI0BARzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiRJIkRHRi0iIiM2I0kiRkdGJTYjKiYsJkkiYkdGJUYmSSNtdUdGJSEiIkYmSSZzaWdtYUdGJUY6RiZGOyEiI0YmKiYtRio2IyomLCZJImFHRiVGJkY5RjpGJkY7RjpGJkY7RjxGOkYmLCYtRjRGNUYmLUY0Rj9GOkY6RjoqKEYkRiYsJiomLS1GMUYzRjVGJkY7RjpGOiomLUZKRj9GJkY7RjpGJkYyRkNGPEYmKiZGJEYmRjtGPEY6 LCoqKEkibkc2IiIiIiwqKigtLS1JI0BARzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiRJIkRHRi0iIiM2I0kiRkdGJTYjKiYsJkkiYkdGJUYmSSNtdUdGJSEiIkYmSSZzaWdtYUdGJUY6RiZGN0YyRjshIiVGJiooLS1GMUYzRjVGJkY3RiZGOyEiJEYyKigtRio2IyomLCZJImFHRiVGJkY5RjpGJkY7RjpGJkZFRjJGO0Y8RjoqKC1GP0ZDRiZGRUYmRjtGQCEiI0YmLCYtRjRGNUYmLUY0RkNGOkY6RjoqKEYkRiYsJiooRj5GJkY3RiZGO0ZJRjoqKEZIRiZGRUYmRjtGSUYmRjJGSkZJRiYqJkYkRiZGO0ZJRiYqJiwmKiZGJEYmRjlGMkYmLUkkc3VtR0YtNiQsJiomJkkiWEdGJTYjSSJpR0YlRiZGOUYmRkkqJEZaRjJGJi9GZ247RiZGJEYmRiZGO0Y8RkA= LCgqKEkibkc2IiIiIiwqKigtLS1JI0BARzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiRJIkRHRi0iIiM2I0kiRkdGJTYjKiYsJkkiYkdGJUYmSSNtdUdGJSEiIkYmSSZzaWdtYUdGJUY6RiZGN0YmRjshIiRGJiomLS1GMUYzRjVGJkY7ISIjRiYqKC1GKjYjKiYsJkkiYUdGJUYmRjlGOkYmRjtGOkYmRkVGJkY7RjxGOiomLUY/RkNGJkY7RkBGOkYmLCYtRjRGNUYmLUY0RkNGOkY6RjoqKkYkRiYsJiomRj5GJkY7RjpGOiomRkhGJkY7RjpGJkYmRklGQCwmKihGPkYmRjdGJkY7RkBGOiooRkhGJkZFRiZGO0ZARiZGJkYmKiYsJiomRiRGJkY5RiZGMi1JJHN1bUdGLTYkLCQmSSJYR0YlNiNJImlHRiVGQC9GZ247RiZGJEYmRiZGO0Y8RiY= JSFH openturns-1.9/validation/src/ValidTruncatedNormalFactory.mws000066400000000000000000000020401307543307100245020ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 118 "restart:\nwith(Stat istics):\npdf:=PDF(RandomVariable(Normal(mu,sigma)),t);\ncdf:=CDF(Rand omVariable(Normal(mu,sigma)),t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $pdfG,$*&#\"\"\"\"\"#F(**F)F'%#PiG#!\"\"F)%&sigmaGF--%$expG6#,$*(F)F-, &%\"tGF(%#muGF-F)F.!\"#F-F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ cdfG,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,$**F(!\"\"F(F&,&%\"tGF'%#muGF/F'%& sigmaGF/F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidTruncatedNormalFactory.txt000066400000000000000000000013231307543307100245160ustar00rootroot00000000000000> restart: > with(Statistics): > pdf:=PDF(RandomVariable(Normal(mu,sigma)),t); > cdf:=CDF(RandomVariable(Normal(mu,sigma)),t); 2 1/2 (t - mu) 2 exp(- ---------) 2 2 sigma pdf := 1/2 --------------------- 1/2 Pi sigma 1/2 2 (t - mu) cdf := 1/2 + 1/2 erf(-------------) 2 sigma > openturns-1.9/validation/src/ValidUniVariatePolynomial.mws000066400000000000000000000034171307543307100241740ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 128 "restart:\nP1:=1.3+2 .4*x+2*x^2-0.5*x^3+4*x^4;\nevalf(subs(x=1.2,P1));\nP1*x^3;\nP1*x^0;\nP 1*x^1;\nP2:=-2.5+3.5*x-1.2*x^2;\nP1+P2;\nP1-P2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#P1G,,$\"#8!\"\"\"\"\"*&$\"#CF(F)%\"xGF)F)*&\"\"#F))F -F/F)F)*&$\"\"&F(F))F-\"\"$F)F(*&\"\"%F))F-F7F)F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"'/\\9!\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,,$\" #8!\"\"\"\"\"*&$\"#CF'F(%\"xGF(F(*&\"\"#F()F,F.F(F(*&$\"\"&F'F()F,\"\" $F(F'*&\"\"%F()F,F6F(F(F(F3F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,$\" #8!\"\"\"\"\"*&$\"#CF&F'%\"xGF'F'*&\"\"#F')F+F-F'F'*&$\"\"&F&F')F+\"\" $F'F&*&\"\"%F')F+F5F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,,$\"#8! \"\"\"\"\"*&$\"#CF'F(%\"xGF(F(*&\"\"#F()F,F.F(F(*&$\"\"&F'F()F,\"\"$F( F'*&\"\"%F()F,F6F(F(F(F,F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#P2G,( $\"#D!\"\"F(*&$\"#NF(\"\"\"%\"xGF,F,*&$\"#7F(F,)F-\"\"#F,F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,$\"#7!\"\"F&*&$\"#fF&\"\"\"%\"xGF*F**&$\" \")F&F*)F+\"\"#F*F**&$\"\"&F&F*)F+\"\"$F*F&*&\"\"%F*)F+F7F*F*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,,$\"#Q!\"\"\"\"\"*&$\"#6F&F'%\"xGF'F& *&$\"#KF&F')F+\"\"#F'F'*&$\"\"&F&F')F+\"\"$F'F&*&\"\"%F')F+F7F'F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidUniVariatePolynomial.txt000066400000000000000000000016641307543307100242070ustar00rootroot00000000000000> restart: > P1:=1.3+2.4*x+2*x^2-0.5*x^3+4*x^4; > evalf(subs(x=1.2,P1)); > P1*x^3; > P1*x^0; > P1*x^1; > P2:=-2.5+3.5*x-1.2*x^2; > P1+P2; > P1-P2; 2 3 4 P1 := 1.3 + 2.4 x + 2 x - 0.5 x + 4 x 14.4904 2 3 4 3 (1.3 + 2.4 x + 2 x - 0.5 x + 4 x ) x 2 3 4 1.3 + 2.4 x + 2 x - 0.5 x + 4 x 2 3 4 (1.3 + 2.4 x + 2 x - 0.5 x + 4 x ) x 2 P2 := -2.5 + 3.5 x - 1.2 x 2 3 4 -1.2 + 5.9 x + 0.8 x - 0.5 x + 4 x 2 3 4 3.8 - 1.1 x + 3.2 x - 0.5 x + 4 x > openturns-1.9/validation/src/ValidUniform.mws000066400000000000000000000070041307543307100214740ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 946 "restart:\nwith(Stat istics):\nassume(aa):\nuniform_:=RandomVariable(Uniform(a,b)) :\npdf:=subs(u=x,PDF(uniform_,u));\nddf:=diff(pdf,x);\ncdf:=subs(u=x,C DF(uniform_,u));\ncf:=subs(u=x,CharacteristicFunction(uniform_,u));\nc df2:=int(pdf,x=0..t);\nrough:=int(pdf^2,x=a..b);\nmu_:=Mean(uniform_); \nvar_:=Variance(uniform_);\nskew_:=simplify(convert(Skewness(uniform_ ),GAMMA),symbolic);\nkurt_:=simplify(convert(Kurtosis(uniform_),GAMMA) ,symbolic);\nqdf:=Quantile(uniform_,p);\nqdf2:=solve(cdf=p,x);\npdfgr: =[diff(pdf,a),diff(pdf,b)];\ncdfgr:=map(factor,[diff(cdf,a),diff(cdf,b )]);\nvalnum:=a=-0.5,b=1.5:\nevalf(subs(valnum,x=1,ddf));\nevalf(subs( valnum,x=1,pdf));\nevalf(subs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1 ,cf));\nevalf(subs(valnum,x=1,map(_x->_x,pdfgr)));\nevalf(subs(valnum, x=1,cdfgr));\nevalf(subs(valnum,p=0.95,qdf));\nevalf(subs(valnum,mu_)) ;\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,skew_));\nevalf( subs(valnum,kurt_));\nevalf(subs(valnum,var_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG-%*PIECEWISEG6%7$\"\"!2%#x|irG%#a|irG7$*&\"\"\"F /,&%#b|irGF/F,!\"\"F22F+F17$F)%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ddfG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG -%*PIECEWISEG6%7$\"\"!2%#x|irG%#a|irG7$*&,&F+\"\"\"F,!\"\"F0,&%#b|irGF 0F,F1F12F+F37$F0%*otherwiseG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#cfG **^#!\"\"\"\"\",&-%$expG6#*(%#b|irGF(%#x|irGF(^#F(F(F(-F+6#*(%#a|irGF( F/F(F0F(F'F(F/F',&F.F(F4F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf 2G*&,&%#b|irG\"\"\"%#a|irG!\"\"F*%\"tGF(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&roughG*&\"\"\"F&,&%#b|irGF&%#a|irG!\"\"F*" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$mu_G,&*&\"\"#!\"\"%#a|irG\"\"\"F**&F'F(%#b|irGF*F* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G,$*&\"#7!\"\",&%#b|irG\"\" \"%#a|irGF(\"\"#F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G#\"\"*\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG,&%#a|irG\"\"\"*&%\"pGF',&%#b|irGF'F&!\"\"F 'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,(%#a|irG\"\"\"*&%\"pGF '%#b|irGF'F'*&F)F'F&F'!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&pdfg rG7$*&\"\"\"F'*$),&%#b|irGF'%#a|irG!\"\"\"\"#F'F-,$F&F-" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&cdfgrG7$*&,&%#b|irG!\"\"%#x|irG\"\"\"F+,&F(F) %#a|irGF+!\"#*&,&F*F)F-F+F+F,F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" \"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++]!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++v!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#^$ $\"+DEg%Q(!#5$\"+,oAMSF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+++++ D!#5$!+++++DF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$!++++]7!#5$!++++] PF&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"%+9!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++]!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+$p- Nx&!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"!F$" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"+++++=!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ LLLLL!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidUniform.txt000066400000000000000000000066231307543307100215130ustar00rootroot00000000000000> restart: > with(Statistics): > assume(aa): > uniform_:=RandomVariable(Uniform(a,b)): > pdf:=subs(u=x,PDF(uniform_,u)); > ddf:=diff(pdf,x); > cdf:=subs(u=x,CDF(uniform_,u)); > cf:=subs(u=x,CharacteristicFunction(uniform_,u)); > cdf2:=int(pdf,x=0..t); > rough:=int(pdf^2,x=a..b); > mu_:=Mean(uniform_); > var_:=Variance(uniform_); > skew_:=simplify(convert(Skewness(uniform_),GAMMA),symbolic); > kurt_:=simplify(convert(Kurtosis(uniform_),GAMMA),symbolic); > qdf:=Quantile(uniform_,p); > qdf2:=solve(cdf=p,x); > pdfgr:=[diff(pdf,a),diff(pdf,b)]; > cdfgr:=map(factor,[diff(cdf,a),diff(cdf,b)]); > valnum:=a=-0.5,b=1.5: > evalf(subs(valnum,x=1,ddf)); > evalf(subs(valnum,x=1,pdf)); > evalf(subs(valnum,x=1,cdf)); > evalf(subs(valnum,x=1,cf)); > evalf(subs(valnum,x=1,map(_x->_x,pdfgr))); > evalf(subs(valnum,x=1,cdfgr)); > evalf(subs(valnum,p=0.95,qdf)); > evalf(subs(valnum,mu_)); > evalf(subs(valnum,sqrt(var_))); > evalf(subs(valnum,skew_)); > evalf(subs(valnum,kurt_)); > evalf(subs(valnum,var_)); { 0 x~ < a~ { { 1 pdf := { ------- x~ < b~ { b~ - a~ { { 0 otherwise ddf := 0 { 0 x~ < a~ { { x~ - a~ cdf := { ------- x~ < b~ { b~ - a~ { { 1 otherwise -I (exp(b~ x~ I) - exp(a~ x~ I)) cf := -------------------------------- x~ (b~ - a~) t cdf2 := ------- b~ - a~ 1 rough := ------- b~ - a~ a~ b~ mu_ := ---- + ---- 2 2 2 (b~ - a~) var_ := ---------- 12 skew_ := 0 kurt_ := 9/5 qdf := a~ + p (b~ - a~) qdf2 := a~ + p b~ - p a~ 1 1 pdfgr := [----------, - ----------] 2 2 (b~ - a~) (b~ - a~) -b~ + x~ -x~ + a~ cdfgr := [-----------, -----------] 2 2 (-b~ + a~) (-b~ + a~) 0. 0.5000000000 0.7500000000 0.7384602625 + 0.4034226801 I [0.2500000000, -0.2500000000] [-0.1250000000, -0.3750000000] 1.400 0.5000000000 0.5773502693 0. 1.800000000 0.3333333333 > openturns-1.9/validation/src/ValidWeibull.mws000066400000000000000000000155421307543307100214660ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1202 "restart:\nwith(Sta tistics):\nassume(u>0,alpha>0,beta>0):\nweibull_:=RandomVariable(Weibu ll(alpha,beta)):\npdf:=subs(u=x-_gamma,PDF(weibull_,u));\nddf:=factor( diff(pdf,x));\ncdf:=subs(u=x-_gamma,CDF(weibull_,u));\ncdf2:=int(pdf,x =0..t);\nmu_:=_gamma+Mean(weibull_);\nvar_:=Variance(weibull_);\nskew_ :=simplify((Skewness(weibull_)));\nkurt_:=simplify((Kurtosis(weibull_) ));\nsubs(m='mu',v='var',solve(\{mu_=m,var_=v\},\{alpha,beta\}));\nqdf :=_gamma+Quantile(weibull_,p);\nqdf2:=solve(cdf=p,x);\npdfgr:=[diff(pd f,alpha),diff(pdf,beta),diff(pdf,_gamma)];\ncdfgr:=[diff(cdf,alpha),di ff(cdf,beta),diff(cdf,_gamma)];\nvalnum:=alpha=2,beta=1.5,_gamma=-0.5; \nevalf(subs(valnum,x=1,ddf));\nevalf(subs(valnum,x=1,pdf));\nevalf(su bs(valnum,x=1,cdf));\nevalf(subs(valnum,x=1,map(_x->_x,pdfgr)));\neval f(subs(valnum,x=1,cdfgr));\nevalf(subs(valnum,p=0.95,qdf));\nevalf(sub s(valnum,mu_));\nevalf(subs(valnum,sqrt(var_)));\nevalf(subs(valnum,sk ew_));\nevalf(subs(valnum,kurt_));\nevalf(subs(valnum,var_));\nevalf(s ubs(valnum,[mu_,sqrt(var_)]));\nsys:=\{evalf(subs(valnum,mu_))=mu_,eva lf(subs(valnum,var_))=var_\};\nsol:=fsolve(subs(_gamma=0.5,sys),\{alph a,beta\});\nratio:=factor(var_/(mu_-_gamma)^2+1);\n#evalf(subs(sol,mu= mu_,var=var_,valnum,[alpha,beta]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%$pdfG**%&beta|irG\"\"\"),&%\"xGF'%'_gammaG!\"\",&F'F,F&F'F')%'alpha |irGF&F,-%$expG6#,$)*&F)F'F/F,F&F,F'" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%$ddfG,$*.%&beta|irG\"\"\"),&%\"xGF(%'_gammaG!\"\",&F(F-F'F(F(-%$ex pG6#,$)*&F*F(%'alpha|irGF-F'F-F(,(F(F(F'F-*&F'F(F3F(F(F(F*F-)F5F'F-F- " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG6#,$)*&,&% \"xGF&%'_gammaG!\"\"F&%'alpha|irGF0%&beta|irGF0F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G,&-%$expG6#,$*&),$%'_gammaG!\"\"%&beta|irG\"\" \")%'alpha|irG,$F/F.F0F.F0-F'6#,$*&),&F-F.%\"tGF0F/F0F1F0F.F." }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\"\"*&%'alpha|irGF '-%&GAMMAG6#*&,&%&beta|irGF'F'F'F'F/!\"\"F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&)%'alpha|irG\"\"#\"\"\",&-%&GAMMAG6#*&,&%&bet a|irGF)F(F)F)F0!\"\"F)*$)-F,6#*&,&F0F)F)F)F)F0F1F(F)F1F)" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%&skew_G*&,(-%&GAMMAG6#*&,&\"\"$\"\"\"%&beta|ir GF-F-F.!\"\"F-*&\"\"#F-)-F(6#*&,&F.F-F-F-F-F.F/F,F-F-*(F,F-F3F--F(6#*& ,&F.F-F1F-F-F.F/F-F/F-,&F8F-*$)F3F1F-F/#!\"$F1" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kurt_G,$*&,**(\"\"%\"\"\"-%&GAMMAG6#*&,&%&beta|irGF* F*F*F*F0!\"\"F*-F,6#*&,&\"\"$F*F0F*F*F0F1F*F*-F,6#*&,&F)F*F0F*F*F0F1F1 *&F6F*)F+F)F*F**(\"\"'F*)F+\"\"#F*-F,6#*&,&F0F*F@F*F*F0F1F*F1F*,&FAF1* $F?F*F*!\"#F1" }}{PARA 7 "" 1 "" {TEXT -1 67 "Warning, solve may be ig noring assumptions on the input variables.\n" }}{PARA 7 "" 1 "" {TEXT -1 38 "Warning, solutions may have been lost\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%\"vG%$varG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$qdfG ,&%'_gammaG\"\"\"*&%'alpha|irGF')-%#lnG6#*&F'F',&F'F'%\"pG!\"\"F1*&F'F '%&beta|irGF1F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&*&-%$ex pG6#*&-%#lnG6#,$-F,6#,&\"\"\"F2%\"pG!\"\"F4F2%&beta|irGF4F2%'alpha|irG F2F2%'_gammaGF2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7%,&*,%&be ta|irG\"\"#),&%\"xG\"\"\"%'_gammaG!\"\",&F-F/F(F-F-)%'alpha|irGF(F/-%$ expG6#,$)*&F+F-F2F/F(F/F-F2F/F/*.F(F)F*F-F1F/F7F-F2F/F3F-F-,**(F*F-F1F /F3F-F-*,F(F-F*F--%#lnG6#F+F-F1F/F3F-F-*,F(F-F*F-F1F/F3F--F>6#F2F-F/*. F(F-F*F-F1F/F7F--F>6#F8F-F3F-F/,&*.F(F-F*F-F0F-F+F/F1F/F3F-F/*.F(F)F*F -F1F/F7F-F+F/F3F-F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7%,$** )*&,&%\"xG\"\"\"%'_gammaG!\"\"F,%'alpha|irGF.%&beta|irGF,F0F,F/F.-%$ex pG6#,$F(F.F,F.*(F(F,-%#lnG6#F)F,F1F,,$**F(F,F0F,F*F.F1F,F." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'valnumG6%/%'alpha|irG\"\"#/%&beta|irG$\"# :!\"\"/%'_gammaG$!\"&F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+:Tjs5!#5 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+kzT#R$!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+k3.xZ!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$!+jR L<*)!#6$\"+iVc>>!#5$\"+:Tjs5F)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$! +vMJWD!#5$!+:$y$f(*!#6$!+mzT#R$F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"+w7AcO!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+'e!\\08!\"*" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+%ereA\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ol)>2\"!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ wNS!R%!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+S6w-:!\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+'e!\\08!\"*$\"+%ereA\"F&" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$sysG<$/$\"+'e!\\08!\"*,&%'_gammaG\"\"\"*&%'al pha|irGF,-%&GAMMAG6#*&,&%&beta|irGF,F,F,F,F4!\"\"F,F,/$\"+S6w-:F)*&)F. \"\"#F,,&-F06#*&,&F4F,F;F,F,F4F5F,*$)F/F;F,F5F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%'alpha|irG$\"+b$fP.&!#5/%&beta|irG$!+Oj*4D#! \"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&ratioG*&-%&GAMMAG6#*&,&%&bet a|irG\"\"\"\"\"#F,F,F+!\"\"F,-F'6#*&,&F+F,F,F,F,F+F.!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 79 "X:=x-_gamma:powX:=(X/alpha)^beta:fa ct:=powX/X*exp(-powX):factor(pdfgr[2]/fact);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*,),&%\"xG\"\"\"%'_gammaG!\"\",&F(F*%&beta|irGF(F(,*F (F**&F,F(-%#lnG6#F&F(F**&F,F(-F06#%'alpha|irGF(F(*(F,F()*&F&F(F5F*F,F( -F06#F8F(F(F(F&F()F5F,F*F7F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 92 "combine(beta*ln(x-_gamma)-beta*ln(alpha)-beta*((x-_gamma)/alph a)^beta*ln((x-_gamma)/alpha));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*& %&beta|irG\"\"\"-%#lnG6#*&,&%\"xGF&%'_gammaG!\"\"F&%'alpha|irGF.F&F&*( F%F&)F*F%F&F'F&F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "sk:=(G AMMA(1+3/beta)*alpha^3-3*mu_*var_-mu_^3)/var_^3/2;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#skG,$*&#\"\"\"\"\"#F(*(,(*&-%&GAMMAG6#,&*&\"\"$F(% &beta|irG!\"\"F(F(F(F()%'alpha|irGF2F(F(**F2F(,&%'_gammaGF(*&F6F(-F.6# *&,&F3F(F(F(F(F3F4F(F(F()F6F)F(,&-F.6#*&,&F3F(F)F(F(F3F4F(*$)F;F)F(F4F (F4*$)F8F2F(F4F(F6!\"'F@!\"$F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "evalf(subs(alpha=2, beta=3,sk-skew_));" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,($\"+3+1AQ!\")\"\"\"*&$\"+p%R(\\%)!\"*F'%'_gamm aGF'!\"\"*&$\"+C*[\\o'F+F'),&F,F'$\"+B!ffy\"F+F'\"\"$F'F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "5 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidWeibull.txt000066400000000000000000000210141307543307100214660ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "with(Statistics):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "assume(u>0,alpha>0,beta>0):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "weibull_:=RandomVariable(Weibull(al pha,beta)):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "pdf:=subs(u= x-_gamma,PDF(weibull_,u));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$pdfG* *%&beta|irG\"\"\"),&%\"xGF'%'_gammaG!\"\",&F'F,F&F'F')%'alpha|irGF&F,- %$expG6#,$)*&F)F'F/F,F&F,F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ddf:=factor(diff(pdf,x));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$dd fG,$*.%&beta|irG\"\"\"),&%\"xGF(%'_gammaG!\"\",&F(F-F'F(F(-%$expG6#,$) *&F*F(%'alpha|irGF-F'F-F(,(F(F(F'F-*&F'F(F3F(F(F(F*F-)F5F'F-F-" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "cdf:=subs(u=x-_gamma,CDF(wei bull_,u));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$cdfG,&\"\"\"F&-%$expG 6#,$)*&,&%\"xGF&%'_gammaG!\"\"F&%'alpha|irGF0%&beta|irGF0F0" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "cdf2:=int(pdf,x=0..t);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%cdf2G,&-%$expG6#,$*&),$%'_gammaG!\" \"%&beta|irG\"\"\")%'alpha|irG,$F/F.F0F.F0-F'6#,$*&),&F-F.%\"tGF0F/F0F 1F0F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "mu_:=_gamma+Mean (weibull_);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$mu_G,&%'_gammaG\"\" \"*&%'alpha|irGF'-%&GAMMAG6#*&,&%&beta|irGF'F'F'F'F/!\"\"F'F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "var_:=Variance(weibull_);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%var_G*&)%'alpha|irG\"\"#\"\"\",&-% &GAMMAG6#*&,&%&beta|irGF)F(F)F)F0!\"\"F)*$)-F,6#*&,&F0F)F)F)F)F0F1F(F) F1F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "skew_:=simplify((Sk ewness(weibull_)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&skew_G,$*&,( -%&GAMMAG6#*&,&\"\"$\"\"\"%&beta|irGF.F.F/!\"\"F0*&\"\"#F.)-F)6#*&,&F/ F.F.F.F.F/F0F-F.F0*(F-F.F4F.-F)6#*&,&F/F.F2F.F.F/F0F.F.F.,&F9F.*$)F4F2 F.F0#!\"$F2F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "kurt_:=sim plify((Kurtosis(weibull_)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&kur t_G*&,**(\"\"%\"\"\"-%&GAMMAG6#*&,&%&beta|irGF)F)F)F)F/!\"\"F)-F+6#*&, &\"\"$F)F/F)F)F/F0F)F0-F+6#*&,&F(F)F/F)F)F/F0F)*&F5F))F*F(F)F0*(\"\"'F ))F*\"\"#F)-F+6#*&,&F/F)F?F)F)F/F0F)F)F),&F@F)*$F>F)F0!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "subs(m='mu',v='var',solve(\{mu_=m,v ar_=v\},\{alpha,beta\}));" }}{PARA 7 "" 1 "" {TEXT -1 67 "Warning, sol ve may be ignoring assumptions on the input variables.\n" }}{PARA 7 " " 1 "" {TEXT -1 38 "Warning, solutions may have been lost\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%\"vG%$varG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "qdf:=_gamma+Quantile(weibull_,p);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$qdfG,&%'_gammaG\"\"\"*&%'alpha|irGF')-%#lnG6#*&F'F ',&F'F'%\"pG!\"\"F1*&F'F'%&beta|irGF1F'F'" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 21 "qdf2:=solve(cdf=p,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%qdf2G,&*&-%$expG6#*&-%#lnG6#,$-F,6#,&\"\"\"F2%\"pG!\"\"F4F2%& beta|irGF4F2%'alpha|irGF2F2%'_gammaGF2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "pdfgr:=[diff(pdf,alpha),diff(pdf,beta),diff(pdf,_gamm a)];" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&pdfgrG7%,&*,%&beta|irG\"\"# ),&%\"xG\"\"\"%'_gammaG!\"\",&F-F/F(F-F-)%'alpha|irGF(F/-%$expG6#,$)*& F+F-F2F/F(F/F-F2F/F/*.F(F)F*F-F1F/F7F-F2F/F3F-F-,**(F*F-F1F/F3F-F-*,F( F-F*F--%#lnG6#F+F-F1F/F3F-F-*,F(F-F*F-F1F/F3F--F>6#F2F-F/*.F(F-F*F-F1F /F7F--F>6#F8F-F3F-F/,&*.F(F-F*F-F0F-F+F/F1F/F3F-F/*.F(F)F*F-F1F/F7F-F+ F/F3F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "cdfgr:=[diff(cd f,alpha),diff(cdf,beta),diff(cdf,_gamma)];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&cdfgrG7%,$**)*&,&%\"xG\"\"\"%'_gammaG!\"\"F,%'alpha| irGF.%&beta|irGF,F0F,F/F.-%$expG6#,$F(F.F,F.*(F(F,-%#lnG6#F)F,F1F,,$** F(F,F0F,F*F.F1F,F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "valnu m:=alpha=2,beta=1.5,_gamma=-0.5;\nvalnum:=alpha=5,beta=8,_gamma=0;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'valnumG6%/%'alpha|irG\"\"#/%&beta|i rG$\"#:!\"\"/%'_gammaG$!\"&F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'va lnumG6%/%'alpha|irG\"\"&/%&beta|irG\"\")/%'_gammaG\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "evalf(subs(valnum,x=1,ddf));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+O@fL9!#8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "evalf(subs(valnum,x=1,pdf));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"+dZ*z/#!#9" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "evalf(subs(valnum,x=1,cdf));" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$\"&+c#!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "evalf(subs( valnum,x=1,map(_x->_x,pdfgr)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$ !+AKywK!#9$!+BE6SIF&$!+O@fL9!#8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "evalf(subs(valnum,x=1,cdfgr));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%$!+9&*)f4%!#:$!+30:?TF&$!+dZ*z/#!#9" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "evalf(subs(valnum,p=0.95,qdf));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"+IG*\\t&!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "evalf(subs(valnum,mu_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+*\\8(3Z!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "evalf(subs(valnum,sqrt(var_)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++fE')p!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "eval f(subs(valnum,skew_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$!+^[EP`!#5 " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "evalf(subs(valnum,kurt_ ));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+rjnFL!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "evalf(subs(valnum,var_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\")6z!)[!\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "evalf(subs(valnum,[mu_,sqrt(var_)]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+*\\8(3Z!\"*$\"++fE')p!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 65 "sys:=\{evalf(subs(valnum,mu_))=mu_,evalf(su bs(valnum,var_))=var_\};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$sysG<$/ $\"+'e!\\08!\"*,&%'_gammaG\"\"\"*&%'alpha|irGF,-%&GAMMAG6#*&,&%&beta|i rGF,F,F,F,F4!\"\"F,F,/$\"+S6w-:F)*&)F.\"\"#F,,&-F06#*&,&F4F,F;F,F,F4F5 F,*$)F/F;F,F5F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "sol:=fso lve(subs(_gamma=0.5,sys),\{alpha,beta\});" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG<$/%'alpha|irG$\"+b$fP.&!#5/%&beta|irG$!+Oj*4D#! \"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "ratio:=factor(var_/( mu_-_gamma)^2+1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&ratioG*&-%&GAM MAG6#*&,&%&beta|irG\"\"\"\"\"#F,F,F+!\"\"F,-F'6#*&,&F+F,F,F,F,F+F.!\"# " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "#evalf(subs(sol,mu=mu_, var=var_,valnum,[alpha,beta]));" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "X:=x-_gamma:powX:=(X/alpha)^beta:fact:=powX/X*exp(-powX):facto r(pdfgr[" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "2]/fact);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#,$*,),&%\"xG\"\"\"%'_gammaG!\"\",&F(F*%&beta|irG F(F(,*F(F**&F,F(-%#lnG6#F&F(F**&F,F(-F06#%'alpha|irGF(F(*(F,F()*&F&F(F 5F*F,F(-F06#F8F(F(F(F&F()F5F,F*F7F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "combine(beta*ln(x-_gamma)-beta*ln(alpha)-beta*((x-_ga mma)/alpha)^beta*" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "ln((x-_gamma)/ alpha));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&%&beta|irG\"\"\"-%#lnG 6#*&,&%\"xGF&%'_gammaG!\"\"F&%'alpha|irGF.F&F&*(F%F&)F*F%F&F'F&F." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "sk:=(GAMMA(1+3/beta)*alpha^3 -3*mu_*var_-mu_^3)/var_^3/2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#skG ,$*&#\"\"\"\"\"#F(*(,(*&-%&GAMMAG6#,&*&\"\"$F(%&beta|irG!\"\"F(F(F(F() %'alpha|irGF2F(F(**F2F(,&%'_gammaGF(*&F6F(-F.6#*&,&F3F(F(F(F(F3F4F(F(F ()F6F)F(,&-F.6#*&,&F3F(F)F(F(F3F4F(*$)F;F)F(F4F(F4*$)F8F2F(F4F(F6!\"'F @!\"$F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "evalf(subs(alp ha=2, beta=3,sk-skew_));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,($\"+3+1A Q!\")\"\"\"*&$\"+p%R(\\%)!\"*F'%'_gammaGF'!\"\"*&$\"+C*[\\o'F+F'),&F,F '$\"+B!ffy\"F+F'\"\"$F'F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "30 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidWilks.mws000066400000000000000000000220411307543307100211440ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 410 "restart:\nCa:=proc( alpha,r,N)\n local sum, i, k;\n sum:=0;\n for i from N-r+1 to N do \n k:=binomial(N,i)*alpha^i*(1-alpha)^(N-i);\n sum:=sum+k;\n# \+ print([i,k,sum]);\n od:\n return evalf(1-sum)\nend:\nCa2:=proc(alph a,r,N)\n local sum, i, k;\n sum:=0;\n for i from 0 to r-1 do\n k :=binomial(N,N-r+1+i)*alpha^(N-r+1+i)*(1-alpha)^(r-1-i);\n sum:=sum +k;\n print([i,k,sum]);\n od:\n return evalf(1-sum)\nend:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 386 "with(Statistics):\nNmax:=20 0:\nalpha:=0.95;\nbeta:=0.95;\ntb:=Quantile(Normal(0,1),beta):\nfor r \+ from 1 to 4 do\nNini:=ceil(-1/2*(alpha*tb^2+2*r-2+(alpha*tb^2*(alpha*t b^2+4*r-4))^(1/2))/(alpha-1));\nfor N from Nini to Nmax do\n y:=Ca(al pha,r,N);\n x:=Ca2(alpha,r,N);\n if (x>beta) then\n print([N,x,y] );break;\n fi:\nod:\nod:\nevalf[100](Beta(N-r,r+1)*CDF(Beta(N-r,r+1), alpha)*N!/(N-r-1)!/r!);\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&alphaG $\"#&*!\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%betaG$\"#&*!\"#" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+>SGWp!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+=)pqf'!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+Fj@ni!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7%\"\"!$\"+6b&Q&f!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\" +NF;cc!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+)faLP&!#6F% " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+ooo/^!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+DDX\\[!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"#f$\"+[Z0:&*!#5F%" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7%\"\"!$\"+N#Q5G&!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$ \"+*=IL:\"!#6$\"+C%oVV'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$ \"+IGlu]!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+!ojc4\"!# 6$\"+5lJqhF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+wLqv[!#6F% " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+'\\!)3/\"!#6$\"+sQe;fF '" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+KA'Ro%!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+5ZO)))*!#7$\"+.()zsc!#6" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+Vf?*\\%!#6F%" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+uk%RR*!#7$\"+!f+'Qa!#6" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%\"\"!$\"+y`@@V!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+]\"\\U#*)!#7$\"+$HSO@&!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+bex\\T!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+$pO!y%)!#7$\"+C&zv*\\!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"#$*$\"+[?C+&*!#5F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+q'Hp\\%!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\" $\"+g7ag9!#6$\"+I4ZdfF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"#$\"+ z*='!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+] -6XV!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+#zs#*R\"!#6$ \"+UIQWdF'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"#$\"+II8MA!#7$\"+X jznf!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+y$=y>%!#6F%" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+=)z/M\"!#6$\"+'>)HQbF'" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"#$\"+zjUA@!#7$\"+M3a]d!#6" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+]9&\\0%!#6F%" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+gz1%G\"!#6$\"+5%>!R`F'" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%\"\"#$\"+g]I;?!#7$\"+;*\\1a&!#6" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7%\"\"!$\"+vsS;R!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+'3Y*H7!#6$\"+hLNY^F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"#$\"+2)*[:>!#7$\"+UB!zL&!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!$\"+=U3#y$!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+Ki-y6!#6$\"+]/6g\\F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7%\"\"#$\"+;`r>=!#7$\"+#)>3U^!#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 %\"\"!$\"+=8)=l$!#6F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"$\"+' \\B#G6!#6$\"+9[5!y%F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"#$\"+^& H(G?b0&*!#5F%" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#$\"_q+++++++++++++++++++++++++++++++++++++++++++++++++5 !#**" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 95 "ia:=n*Alpha+tb*sqrt (n*Alpha*(1-Alpha));\nsol:=solve(ia=n-R+1,n);\nfactor(sol[1]);\nfactor (sol[2]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#iaG,&*&%\"nG\"\"\"%&Al phaGF(F(*&%#tbGF(*(F'F(F)F(,&F(F(F)!\"\"F(#F(\"\"#F(" }}{PARA 7 "" 1 " " {TEXT -1 38 "Warning, solutions may have been lost\n" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$solG6$*&,**(\"\"#!\"\"%&AlphaG\"\"\"%#tbGF)F*% \"RGF*F,F,*&F)F*,(*&)F+F)F,)F-\"\"%F,F,**F4F,F+F,)F-F)F,F.F,F,*(F4F,F+ F,F6F,F*#F,F)F,F,,&F+F,F,F*F**&,**(F)F*F+F,F-F)F*F.F*F,F,*&F)F*F0F8F*F ,F9F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"#!\"\",**&%&AlphaG\" \"\")%#tbGF%F*F&*&F%F*%\"RGF*F&F%F**$*(F)F*F+F*,(F(F**&\"\"%F*F.F*F*F3 F&F*#F*F%F*F*,&F)F*F*F&F&F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\" \"#!\"\",**&%&AlphaG\"\"\")%#tbGF%F*F**&F%F*%\"RGF*F*F%F&*$*(F)F*F+F*, (F(F**&\"\"%F*F.F*F*F3F&F*#F*F%F*F*,&F)F*F*F&F&F&" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 72 "solve(subs(Alpha=alpha, R=4, tb=Quantile(Nor mal(0,1),beta),ia=n-R+1),n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+,j )*o9!\"(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "restart:assume (N,integer,r,integer,r0,alpha<1,i>0,i%&ratioG*,-%*factorialG6#%#N|i rG\"\"\"-F'6#,*F)F*%#r|irG!\"\"F*F*%#i|irGF*F/%'alpha|irGF/-F'6#,&F)F* F*F*F/-F'6#,*F)F*\"\"#F*F.F/F0F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "q:=(N+2-r+i)/(N+1)/alpha;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG*(,*%#N|irG\"\"\"\"\"#F(%#r|irG!\"\"%#i|irGF(F(,& F'F(F(F(F+%'alpha|irGF+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 48 " evalf(subs(N=100,r=7,alpha=0.95,i=5,[ratio,q]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+%[4A/\"!\"*F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "subs(N=N+1,binomial(N,N-r+1+i)*alpha^(N-r+1+i)*(1-alp ha)^(r-1-i));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(-%)binomialG6$,&%#N |irG\"\"\"F)F),*F(F)\"\"#F)%#r|irG!\"\"%#i|irGF)F))%'alpha|irGF*F)),&F )F)F0F-,(F,F)F)F-F.F-F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " .5281038235e-1/.1153330189e-1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+ pt%*yX!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 14 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ValidWilks.txt000066400000000000000000000167741307543307100211750ustar00rootroot00000000000000> restart: > Ca:=proc(alpha,r,N) > local sum, i, k; > sum:=0; > for i from N-r+1 to N do > k:=binomial(N,i)*alpha^i*(1-alpha)^(N-i); > sum:=sum+k; > # print([i,k,sum]); > od: > return evalf(1-sum) > end: > Ca2:=proc(alpha,r,N) > local sum, i, k; > sum:=0; > for i from 0 to r-1 do > k:=binomial(N,N-r+1+i)*alpha^(N-r+1+i)*(1-alpha)^(r-1-i); > sum:=sum+k; > print([i,k,sum]); > od: > return evalf(1-sum) > end: > with(Statistics): > Nmax:=200: > alpha:=0.95; > beta:=0.95; > tb:=Quantile(Normal(0,1),beta): > for r from 1 to 4 do > Nini:=ceil(-1/2*(alpha*tb^2+2*r-2+(alpha*tb^2*(alpha*tb^2+4*r-4))^(1/2 > ))/(alpha-1)); > for N from Nini to Nmax do > y:=Ca(alpha,r,N); > x:=Ca2(alpha,r,N); > if (x>beta) then > print([N,x,y]);break; > fi: > od: > od: > evalf[100](Beta(N-r,r+1)*CDF(Beta(N-r,r+1),alpha)*N!/(N-r-1)!/r!); > alpha := 0.95 beta := 0.95 [0, 0.06944284019, 0.06944284019] [0, 0.06597069818, 0.06597069818] [0, 0.06267216327, 0.06267216327] [0, 0.05953855511, 0.05953855511] [0, 0.05656162735, 0.05656162735] [0, 0.05373354598, 0.05373354598] [0, 0.05104686868, 0.05104686868] [0, 0.04849452525, 0.04849452525] [59, 0.9515054748, 0.9515054748] [0, 0.05281038235, 0.05281038235] [1, 0.01153330189, 0.06434368424] [0, 0.05074652830, 0.05074652830] [1, 0.01095663680, 0.06170316510] [0, 0.04875703376, 0.04875703376] [1, 0.01040880496, 0.05916583872] [0, 0.04683962232, 0.04683962232] [1, 0.009888364710, 0.05672798703] [0, 0.04499205943, 0.04499205943] [1, 0.009393946474, 0.05438600590] [0, 0.04321215378, 0.04321215378] [1, 0.008924249150, 0.05213640293] [0, 0.04149775855, 0.04149775855] [1, 0.008478036693, 0.04997579524] [93, 0.9500242048, 0.9500242048] [0, 0.04496929670, 0.04496929670] [1, 0.01460541260, 0.05957470930] [2, 0.002351718979, 0.06192642828] [0, 0.04345110250, 0.04345110250] [1, 0.01399272792, 0.05744383042] [2, 0.002234133030, 0.05967796345] [0, 0.04197818378, 0.04197818378] [1, 0.01340479818, 0.05538298196] [2, 0.002122426379, 0.05750540834] [0, 0.04054951450, 0.04054951450] [1, 0.01284067960, 0.05339019410] [2, 0.002016305060, 0.05540649916] [0, 0.03916407275, 0.03916407275] [1, 0.01229946086, 0.05146353361] [2, 0.001915489807, 0.05337902342] [0, 0.03782084218, 0.03782084218] [1, 0.01178026232, 0.04960110450] [2, 0.001819715316, 0.05142081982] [0, 0.03651881318, 0.03651881318] [1, 0.01128223496, 0.04780104814] [2, 0.001728729551, 0.04952977769] [124, 0.9504702223, 0.9504702223] [0, 0.04017872184, 0.04017872184] [1, 0.01579439410, 0.05597311594] [2, 0.004110869698, 0.06008398564] [3, 0.0005313368998, 0.06061532254] [0, 0.03895950546, 0.03895950546] [1, 0.01521021788, 0.05416972334] [2, 0.003931893058, 0.05810161640] [3, 0.0005047700548, 0.05860638645] [0, 0.03777204108, 0.03777204108] [1, 0.01464630164, 0.05241834272] [2, 0.003760536908, 0.05617887963] [3, 0.0004795315521, 0.05665841118] [0, 0.03661575411, 0.03661575411] [1, 0.01410201340, 0.05071776751] [2, 0.003596486641, 0.05431425415] [3, 0.0004555549745, 0.05476980912] [0, 0.03549006708, 0.03549006708] [1, 0.01357673707, 0.04906680415] [2, 0.003439440058, 0.05250624421] [3, 0.0004327772258, 0.05293902144] [0, 0.03439440058, 0.03439440058] [1, 0.01306987222, 0.04746427280] [2, 0.003289106916, 0.05075337972] [3, 0.0004111383645, 0.05116451808] [0, 0.03332817416, 0.03332817416] [1, 0.01258083396, 0.04590900812] [2, 0.003145208488, 0.04905421661] [3, 0.0003905814462, 0.04944479806] [153, 0.9505552019, 0.9505552019] 1.00000000000000000000000000000000000000000000000000000000000000\ 0000000000000000000000000000000000000 > ia:=n*Alpha+tb*sqrt(n*Alpha*(1-Alpha)); > sol:=solve(ia=n-R+1,n); > factor(sol[1]); > factor(sol[2]); 1/2 ia := n Alpha + tb (n Alpha (1 - Alpha)) Warning, solutions may have been lost / 2 | Alpha tb sol := |- --------- - R + 1 \ 2 2 4 2 2 1/2\ (Alpha tb + 4 Alpha tb R - 4 Alpha tb ) | + ---------------------------------------------|/(Alpha - 1) 2 / / 2 | Alpha tb , |- --------- - R + 1 \ 2 2 4 2 2 1/2\ (Alpha tb + 4 Alpha tb R - 4 Alpha tb ) | - ---------------------------------------------|/(Alpha - 1) 2 / 2 2 2 1/2 -Alpha tb - 2 R + 2 + (Alpha tb (Alpha tb + 4 R - 4)) ----------------------------------------------------------- 2 (Alpha - 1) 2 2 2 1/2 Alpha tb + 2 R - 2 + (Alpha tb (Alpha tb + 4 R - 4)) - ---------------------------------------------------------- 2 (Alpha - 1) > solve(subs(Alpha=alpha, R=4, > tb=Quantile(Normal(0,1),beta),ia=n-R+1),n); 146.8986301 > restart:assume(N,integer,r,integer,r0,alpha<1,i>0,i =convert(simplify((binomial(N,N-r+1+i)*alpha^(N-r+1+i)*(1-alpha)^(r-1- > i))/(binomial(N+1,N+1-r+1+i)*alpha^(N+1-r+1+i)*(1-alpha)^(r-1-i)),symb > olic),factorial); N~! (N~ + 2 - r~ + i~)! ratio := ------------------------------------ (N~ - r~ + 1 + i~)! alpha~ (N~ + 1)! > q:=(N+2-r+i)/(N+1)/alpha; N~ + 2 - r~ + i~ q := ---------------- (N~ + 1) alpha~ > evalf(subs(N=100,r=7,alpha=0.95,i=5,[ratio,q])); [1.042209484, 1.042209484] > subs(N=N+1,binomial(N,N-r+1+i)*alpha^(N-r+1+i)*(1-alpha)^(r-1-i)); (N~ + 2 - r~ + i~) binomial(N~ + 1, N~ + 2 - r~ + i~) alpha~ (r~ - 1 - i~) (1 - alpha~) > .5281038235e-1/.1153330189e-1; 4.578947369 > openturns-1.9/validation/src/ValidZipfMandelbrot.mw000066400000000000000000000650171307543307100226220ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZnby1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSdhc3N1bWVGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2MS1GLDYlUSJzRidGL0YyLUY2Ni1RIj5GJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEiMEYnRjktRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJy1GLDYlUSJxRidGL0YyLUY2Ni1RLyZHcmVhdGVyRXF1YWw7RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZqb0ZecC1GLDYlUSJuRidGL0YyRmdvRmpvRl5wRmpwRl5wLUYsNiVRKGludGVnZXJGJ0YvRjJGOUY1Rk9GZ24tRiw2JVEndmFsbnVtRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk1GanAtRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRltwNiRRIzE1RidGOUZecEZkcEZmcS1GW3A2JFEkMS4yRidGOUZecEZkb0ZmcS1GW3A2JFEkMi4wRidGOUY1Rk8tRiw2JVEickYnRi9GMkZjcS1JJm1mcmFjR0YkNigtRltwNiRRIjFGJ0Y5LUYjNiMtSSVtc3VwR0YkNiUtRmBvNiQtRiM2JS1GLDYlUSJrRidGL0YyLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GW3RGZHBGOS1GIzYjRmRvLyUxc3VwZXJzY3JpcHRzaGlmdEdGXXAvJS5saW5ldGhpY2tuZXNzR0Zqci8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZldC8lKWJldmVsbGVkR0Y9RjVGTy1GLDYlUSVIbnFzRidGL0YyRmNxLUYsNiVRJFN1bUYnRi9GMi1GYG82JC1GIzYpRmJyRl5wRmRzRmZxRmhyLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmpzRltvRmpwRjlGNUZPLUYsNiVRInBGJ0YvRjJGY3EtRmZyNihGYnItRiM2I0ZqdEZhdEZjdEZmdEZodC1GNjYtUSI7RidGOUY7RmFwRkBGQkZERkZGSEZqbkZNRk8tRiw2JVElbWVhbkYnRi9GMkZjcUZddS1GYG82JC1GIzYrRmRzLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZndUZecEZkc0ZmcUZockZkdUZqcEY5RjVGTy1GLDYlUSRjb3ZGJ0YvRjJGY3FGXXUtRmBvNiQtRiM2Ky1GXnM2JS1GYG82JC1GIzYlRmRzLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGanNGXHRGYXZGOS1GIzYjLUZbcDYkUSIyRidGOUZfdEZodkZndUZecEZkc0ZmcUZockZkdUZqcEY5RjVGTy1GLDYlUSRzdGRGJ0YvRjJGY3EtRiw2JVElc3FydEYnL0YwRj1GOS1GYG82JC1GIzYjRlt3RjlGNUZPLUYsNiVRJXNrZXdGJ0YvRjJGY3FGXXUtRmBvNiQtRiM2Ky1GXnM2JS1GYG82JC1GIzYjLUZmcjYoRmR3LUYjNiNGYHhGYXRGY3RGZnRGaHRGOS1GIzYjLUZbcDYkUSIzRidGOUZfdEZodkZndUZecEZkc0ZmcUZockZkdUZqcEY5RjVGTy1GLDYlUSVrdXJ0RidGL0YyRmNxRl11LUZgbzYkLUYjNistRl5zNiVGZHktRiM2Iy1GW3A2JFEiNEYnRjlGX3RGaHZGZ3VGXnBGZHNGZnFGaHJGZHVGanBGOUY1Rk9GZ24tRiw2JVEmZXZhbGZGJ0YvRjItRmBvNiYtRiM2Iy1GW3A2JFEjMjBGJ0Y5RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRictRmBvNiQtRiM2JC1GLDYlUSVzdWJzRidGL0YyLUZgbzYkLUYjNiVGYHFGXnAtRmBvNiYtRiM2K0ZhdkZecEZbd0ZecEZgeEZecEZbeUZecEZhekY5RmlbbEZcXGxGOUY5Rl52 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYpLCZJImtHNiIiIiJJI3F8aXJHRiZGJ0kjc3xpckdGJiEiIi1JJFN1bUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJjYkKiRGI0YqL0YlO0YnSSNufGlyR0YmRio= NyckIjU2L1NVP0kqM29BJCEjPiQiNWI+bShIPD08IlInKkYlJCI1SUAhSChvbkZwL0pGJSQiNXo3L2Ijb2xJOCI9RiUkIjVgZjw+NydvRVUlZUYl JSFH openturns-1.9/validation/src/Variance.mws000066400000000000000000000121041307543307100206220ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 103 "restart:\nassume(si gma>0):\np:=1/(sigma*sqrt(2*Pi))*exp(-(x-mu)^2/(2*sigma^2));\nF:=int(p ,x=-infinity..t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG,$*&#\"\"\" \"\"#F(**%'sigma|irG!\"\"F)F'%#PiG#F,F)-%$expG6#,$*(F)F,,&%\"xGF(%#muG F,F)F+!\"#F,F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"FG,&#\"\"\" \"\"#F'*&F&F'-%$erfG6#,$**F(!\"\"F(F&,&%\"tGF'%#muGF/F'%'sigma|irGF/F' F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 285 "m:=int(x*p,x=-infi nity..infinity);\nv:=int((x-m)^2*p,x=-infinity..infinity);\n-int(2*(w- m)*subs(t=w,F),w=-infinity..m)+int(2*(w-m)*subs(t=w,1-F),w=m..infinity );\nint(3*w^2*subs(t=m-w,F)-3*w^2*subs(t=w+m,1-F),w=0..infinity);\nV:= 2*Int(t*(1-subs(t=u+m,G(t))+subs(t=m-u,G(t))),t=0..infinity);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"mG%#muG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"vG*$)%'sigma|irG\"\"#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%'sigma|irG\"\"#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"VG,$*&\"\"#\"\"\"-% $IntG6$*&%\"tGF(,(F(F(-%\"GG6#,&%\"uGF(%#muGF(!\"\"-F06#,&F4F(F3F5F(F( /F-;\"\"!%)infinityGF(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "restart:\nwith(student):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 99 "assume (alpha>0):\nII:=changevar(t=-alpha*log((1-v)/2),Int(2*t*(1-F(t-mu)+F(m u-t)),t=0..infinity),v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#IIG-%$IntG6$,$*,\"\"#\"\"\"%'alpha| irGF*-%#lnG6#,&#F+F*F+*&F*!\"\"%\"vGF+F3F+,(F+F3-%\"FG6#,&*&F,F+F-F+F3 %#muGF3F+-F76#,&F;F+F:F+F3F+,&F+F3F4F+F3F3/F4;F3F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "subs(phi(t)=2*t*(1-F(t-mu)+F(mu-t)),II);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$IntG6$,$*(-%$phiG6#,$*&%'alpha|irG \"\"\"-%#lnG6#,&#F.\"\"#F.*&F4!\"\"%\"vGF.F6F.F6F.F-F.,&F.F6F7F.F6F6/F 7;F6F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "int(sin(x)^2,x=0. .2*Pi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%#PiG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "plot(Pi/2*cosh(t)/(cosh(Pi*sinh(t))^2),t=2..3 );" }}{PARA 13 "" 1 "" {GLPLOT2D 274 274 274 {PLOTDATA 2 "6%-%'CURVESG 6$7gn7$$\"\"#\"\"!$\"3s?*z%[F*y*H!#E7$$\"3IL3FWYs-?!#<$\"3t;[n%)*\\!=G F-7$$\"3gm;a)G\\a+#F1$\"3A`.c_za[EF-7$$\"3!**\\7G$R<3?F1$\"3sg)zd2>))[ #F-7$$\"3>LL3x&)*3,#F1$\"3Ml.%zOD$QBF-7$$\"3z**\\ilyM;?F1$\"33oR$RzII1 #F-7$$\"3$ommT:(z@?F1$\"3)Re3>Y)*)==F-7$$\"3C$e*)4bQl-#F1$\"3\"y*3/zU> H;F-7$$\"35+D\"y%*z7.#F1$\"3*\\)z&3\\4&e9F-7$$\"3&pTNYM@g.#F1$\"3QZG$f \"z,08F-7$$\"3OL$e9ui2/#F1$\"3!GTa[`gq;\"F-7$$\"3r*\\(oMrU^?F1$\"3%[0) =tZcf!*!#F7$$\"3]mm\"z_\"4i?F1$\"3.IcKX1a8qF`o7$$\"3rmmm6m#G2#F1$\"33v \"*y9!=`S&F`o7$$\"3ZmmT&phN3#F1$\"3Z@_S(R9T:%F`o7$$\"3UL$e*=)H\\5#F1$ \"3NA6t\")zyQCF`o7$$\"3sm;z/3uC@F1$\"3V?EAa37t9F`o7$$\"3z**\\7LRDX@F1$ \"3e,iM,NgZ')!#G7$$\"3\"om\"zR'ok;#F1$\"3J+v%Fdr7$$\"3* )****\\PAvrAF1$\"3Uf?B+&G$4DFdr7$$\"3%)****\\nHi#H#F1$\"3DY[yU!*=Q8Fdr 7$$\"3bm;z*ev:J#F1$\"3MGe`Haotu!#I7$$\"3[LL$347TL#F1$\"3zU!3\"z&zTo$Fi s7$$\"3>LLLjM?`BF1$\"33]MTRb\"z*>Fis7$$\"39+]7o7TvBF1$\"3\"z3C!\\\\Ze' *!#J7$$\"3WLLLQ*o]R#F1$\"3/$[:BFei+&Fit7$$\"3C+]7=lj;CF1$\"3GcPg#)4p(R #Fit7$$\"3&***\\PaRY2a#F1$\"3LE O<'3e0]#F^w7$$\"3%om;zXu9c#F1$\"3A(oKzu(3`'fX&>F^x7$$\"3q**\\7y%3 Ti#F1$\"3BaE\")=;B?$)!#N7$$\"3\"****\\P![hYEF1$\"3))=.E!)33dJFix7$$\"3 ELLLQx$om#F1$\"3!GU$)o4!z'H\"Fix7$$\"3')****\\P+V)o#F1$\"39X>*\\fGV\" \\!#O7$$\"3im;zpe*zq#F1$\"3[pH " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "6 0 0 " 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Variance.txt000066400000000000000000000041761307543307100206450ustar00rootroot00000000000000> restart: > assume(sigma>0): > p:=1/(sigma*sqrt(2*Pi))*exp(-(x-mu)^2/(2*sigma^2)); > F:=int(p,x=-infinity..t); 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma~ p := 1/2 --------------------- 1/2 sigma~ Pi 1/2 2 (t - mu) F := 1/2 + 1/2 erf(-------------) 2 sigma~ > m:=int(x*p,x=-infinity..infinity); > v:=int((x-m)^2*p,x=-infinity..infinity); > -int(2*(w-m)*subs(t=w,F),w=-infinity..m)+int(2*(w-m)*subs(t=w,1-F),w=m > ..infinity); > int(3*w^2*subs(t=m-w,F)-3*w^2*subs(t=w+m,1-F),w=0..infinity); > V:=2*Int(t*(1-subs(t=u+m,G(t))+subs(t=m-u,G(t))),t=0..infinity); m := mu 2 v := sigma~ 2 sigma~ 0 infinity / | V := 2 | t (1 - G(u + mu) + G(mu - u)) dt | / 0 > restart: > with(student): > assume(alpha>0): > II:=changevar(t=-alpha*log((1-v)/2),Int(2*t*(1-F(t-mu)+F(mu-t)),t=0..i > nfinity),v); > 1 / | 2 II := | - 2 alpha~ ln(1/2 - v/2) (-1 | / -1 + F(-alpha~ ln(1/2 - v/2) - mu) - F(mu + alpha~ ln(1/2 - v/2)))/(-1 + v) dv > subs(phi(t)=2*t*(1-F(t-mu)+F(mu-t)),II); 1 / | phi(-alpha~ ln(1/2 - v/2)) alpha~ | - --------------------------------- dv | -1 + v / -1 > int(sin(x)^2,x=0..2*Pi); Pi > plot(Pi/2*cosh(t)/(cosh(Pi*sinh(t))^2),t=2..3); > openturns-1.9/validation/src/VonMisesCDF.mw000066400000000000000000000734321307543307100210020ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZDLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEjbXVGJy9GMEY9RjlGX28tRmNvNiRRIjBGJ0Y5RjVGT0Znbi1GLDYlUSZrYXBwYUYnRmlvRjlGX28tRmNvNiRRIzUwRidGOUY1Rk9GZ24tRiw2JVEkcGRmRidGL0YyRl9vLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGV4cEYnRmlvRjktSShtZmVuY2VkR0YkNiQtRiM2JkZdcC1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tRiw2JVEkY29zRidGaW9GOS1GX3E2JC1GIzYlLUYsNiVRInhGJ0YvRjItRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZkckZmb0Y5RjktRiM2KS1GY282JFEiMkYnRjlGY3EtRiw2JVEjUGlGJ0Zpb0Y5RmNxRmduLUYsNiVRKEJlc3NlbElGJ0Zpb0Y5LUZfcTYkLUYjNiZGam8tRjY2LVEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0ZnbkZdcEY5LyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZgdC8lKWJldmVsbGVkR0Y9LUY2Ni1RIjtGJ0Y5RjtGaHNGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSRjZGZGJ0YvRjJGX28tRiw2JVEkSW50RidGL0YyLUZfcTYkLUYjNitGY3BGZXNGZ25GXXItRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRmNyRmVyRltzLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmNyRltvLUYsNiVRInRGJ0YvRjJGOUZldA== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKC1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQtSSRjb3NHRiY2I0kieEdGKSIjXSIiIkkjUGlHRichIiItSShCZXNzZWxJR0YmNiQiIiFGMEYzI0YxIiIj LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCooLUkkZXhwR0YkNiMsJC1JJGNvc0dGJDYjSSJ4R0YnIiNdIiIiSSNQaUdGJSEiIi1JKEJlc3NlbElHRiQ2JCIiIUYzRjYjRjQiIiMvRjI7LCRGNUY2SSJ0R0Yn QyQtJkkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMiJCsjNiMtRiU2Iy1JJXN1YnNHRiY2JC9JInRHNiIkISIiRjNJJGNkZkdGMSIiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCJjd0B5JioqZlprOVFkJSo+STMoeUY1cScqcC5EJ1tOIVJRTSQzKzM5SyR6W3gxUDQvKHlAOFoweWlEQTowX0lud29mXVRiQlgnKT5pViU+X1VCKlIrPDh1bGM7dDhrJW8lUkY8JD4wWnBTa05vJ1JTIyEkKyM= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElaGVscEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYjLUYsNiVRKEJlc3NlbElGJy9GMFEmZmFsc2VGJy9GM1Enbm9ybWFsRidGPw== JSFH openturns-1.9/validation/src/Weibull_moment.mws000066400000000000000000000035061307543307100220620ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 93 "restart:\nassume(eps >0,a>0,b>0);\nf:=b/a*(x/a)^(b-1)*exp(-(x/a)^b);\nI0:=int(x*f,x=0..infi nity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG**%#b|irG\"\"\"%#a|irG !\"\")*&%\"xGF'F(F),&F&F'F'F)F'-%$expG6#,$)F+F&F)F'" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#I0G*&%#a|irG\"\"\"-%&GAMMAG6#*&,&%#b|irGF'F'F'F'F- !\"\"F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 110 "xmax:=solve(dif f(f,x),x);\ng:=factor(simplify(b/a*exp(-(x/a)^b)/subs(x=xmax,f),symbol ic));\nsol:=solve(g=eps,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%xmax G*&-%$expG6#*&-%#lnG6#*&,&%#b|irG\"\"\"F0!\"\"F0F/F1F0F/F1F0%#a|irGF0 " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG-%$expG6#,$*&,0*()%\"xG%#b|i rG\"\"\")%#a|irG,$F.!\"\"F/F.F/F/*&F.F/-%#lnG6#F.F/F3*&F.F/-F66#,&F.F/ F/F3F/F/F5F/F9F3F.F3F/F/F/F.F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% $solG-%$expG6#*&,&-%#lnG6#,$*&,,-F+6#*&,&%#b|irG\"\"\"F5!\"\"F5F4F6F6F 5F5*&F4F5F0F5F5F4F6*&-F+6#%%eps|irGF5F4F5F5F5F4F6F6F5*&F4F5-F+6#%#a|ir GF5F5F5F4F6" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "series(sol,b =1,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#+),&%#b|irG\"\"\"F&!\"\"-%$e xpG6#,&-%#lnG6#,$-F-6#%%eps|irGF'F&-F-6#%#a|irGF&\"\"!*&F(F&,&*&,&-F-6 #F$F'F&F&F&F0F'F'F,F'F&F&-%\"OG6#F&\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/Weibull_moment.txt000066400000000000000000000032171307543307100220720ustar00rootroot00000000000000> restart: > assume(eps>0,a>0,b>0); > f:=b/a*(x/a)^(b-1)*exp(-(x/a)^b); > I0:=int(x*f,x=0..infinity); / x \(b~ - 1) / x \b~ b~ |----| exp(-|----| ) \ a~ / \ a~ / f := -------------------------------- a~ b~ + 1 I0 := a~ GAMMA(------) b~ > xmax:=solve(diff(f,x),x); > g:=factor(simplify(b/a*exp(-(x/a)^b)/subs(x=xmax,f),symbolic)); > sol:=solve(g=eps,x); b~ - 1 ln(------) b~ xmax := exp(----------) a~ b~ b~ (-b~) g := exp(- (x a~ b~ - b~ ln(b~) + b~ ln(b~ - 1) + ln(b~) - ln(b~ - 1) - b~ + 1)/b~) / | | sol := exp(| \ b~ - 1 b~ - 1 -ln(------) + 1 + b~ ln(------) - b~ + ln(eps~) b~ b~ b~ ln(- --------------------------------------------------) b~ \ | | + b~ ln(a~)|/b~) / > series(sol,b=1,2); exp(ln(-ln(eps~)) + ln(a~)) + exp(ln(-ln(eps~)) + ln(a~)) / -ln(b~ - 1) + 1 \ 2 |- --------------- - ln(-ln(eps~))| (b~ - 1) + O((b~ - 1) ) \ ln(eps~) / > openturns-1.9/validation/src/asymptoticGamma.mw000066400000000000000000001021231307543307100220470ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY8LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMjBGJ0Y5RjVGT0Znbi1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiMtRiw2JVErU3RhdGlzdGljc0YnRi9GMkY5RjVGT0Znbi1GLDYlUSRwZGZGJ0YvRjJGX28tRiw2JVEkUERGRidGL0YyLUZqbzYkLUYjNiYtRiw2JVEvUmFuZG9tVmFyaWFibGVGJ0YvRjItRmpvNiQtRiM2JC1GLDYlUSZHYW1tYUYnL0YwRj1GOS1Gam82JC1GIzYlLUkmbWZyYWNHRiQ2KC1GY282JFEiMUYnRjktRiM2Iy1GLDYlUSdsYW1iZGFGJ0ZlcUY5LyUubGluZXRoaWNrbmVzc0dGX3IvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaXIvJSliZXZlbGxlZEdGPS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRImtGJ0YvRjJGOUY5Rl5zLUZbcjYoLUYsNiVRInhGJ0YvRjJGYHJGZXJGZ3JGanJGXHNGOUZnbi1GNjYtUSlhc3N1bWluZ0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZnbkZpcy1GNjYtUSI+RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GY282JFEiMEYnRjktRjY2LVEiO0YnRjlGO0Zhc0ZARkJGREZGRkhGam5GTQ== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiopSSJ4RzYiLCZJImtHRiUiIiIhIiJGKEYoLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJEYkRilGKEknbGFtYmRhR0YlRigtSSZHQU1NQUdGLDYjRidGKQ== QyQ+SShwZGZTaW1wRzYiLUkpYXNzdW1pbmdHSShfc3lzbGliR0YlNiQ3Iy1JKXNpbXBsaWZ5RzYkJSpwcm90ZWN0ZWRHRig2Iy1JKGNvbnZlcnRHRi42JC1JJ3Nlcmllc0dGLjYlLUkiK0dGLjYkLUkkbG9nR0YtNiNJJHBkZkdGJSwmKiYsJkkia0dGJSIiIiEiIkZBRkEtRjo2IyomSSJ4R0YlRkFGQEZCRkFGQkZGRkEvRkBJKWluZmluaXR5R0YuIiM2SShwb2x5bm9tR0YuNyQtSSI+R0YuNiRGRiIiIS1GTTYkSSdsYW1iZGFHRiVGT0ZB LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqJiw0KiRJImtHNiIiIikhJVNdKiYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjRiYiIiJGJiIiKCIlP0QqJi1GLDYjIiIjRjFGJkYyRjMqJi1GLDYjSSdsYW1iZGFHRidGMUYmRjJGKSomLUYsNiNJI1BpR0YuRjFGJkYyRjMqJEYmIiInIiQ/JSokRiYiIiUhIzkqJEYmRjdGRCEiJEYxRjFGJiEiKCMhIiIiJVNd LUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMtSSdleHBhbmRHRiQ2JEkocGRmU2ltcEc2IkkieEdGKg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LDJJImtHNiIiIiItSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjRiMkITUrKysrKysrKytdISM/JCE1Ij11c1k/TCZRKj0qRi5GJS1GJzYjSSdsYW1iZGFHRiRGJSokRiMhIiIkITVMTExMTExMTEwkKSEjQCokRiMhIiQkIjV5eHh4eHh4eHhGISNBKiRGIyEiJiQhNXpdT3pdT3pdT3ohI0IqJEYjISIoJCI1NVFfNFFfNFFfZkZC JSFH openturns-1.9/validation/src/besselI0.csv000066400000000000000000000112561307543307100205340ustar00rootroot000000000000001.6332411821417589e+294 1.5426636430214175e+291 1.4576302598620906e+288 1.3777864225504420e+285 1.3028010618436793e+282 1.2323650477431042e+279 1.1661896993621849e+276 1.1040053984053779e+273 1.0455602989410341e+270 9.9061912667765019e+266 9.3896206144051005e+263 8.9038369699826734e+260 8.4469207280872430e+257 8.0170777264258795e+254 7.6126308540531011e+251 7.2320122381261415e+248 6.8737559688659661e+245 6.5364913252844668e+242 6.2189364669226170e+239 5.9198925593382312e+236 5.6382383034001000e+233 5.3729248405991053e+230 5.1229710085909013e+227 4.8874589230495867e+224 4.6655298636476809e+221 4.4563804435962354e+218 4.2592590436882366e+215 4.0734624931986277e+212 3.8983329813127759e+209 3.7332551839916144e+206 3.5776535923420011e+203 3.4309900296543121e+200 3.2927613453022855e+197 3.1624972746803416e+194 3.0397584552883253e+191 2.9241345899704383e+188 2.8152427491816481e+185 2.7127258049995612e+182 2.6162509904311297e+179 2.5255085783915722e+176 2.4402106755683491e+173 2.3600901272378568e+170 2.2848995299913963e+167 2.2144103502659264e+164 2.1484121475842561e+161 2.0867119025118212e+158 2.0291334505618080e+155 1.9755170246618561e+152 1.9257189103769610e+149 1.8796112199177331e+146 1.8370817931176767e+143 2.1246198511800766e+180 2.8770718748340420e+176 3.9036384048197610e+172 5.3073093858006220e+168 7.2310964177694644e+164 9.8741659929820488e+160 1.3514739884641169e+157 1.8542725469797489e+153 2.5506396918439323e+149 3.5179460150489446e+145 4.8657831748171140e+141 6.7499953595230884e+137 9.3931237960201029e+133 1.3114351827224381e+130 1.8373609455870957e+126 1.6435754557774539e+163 1.2080750952538867e+158 8.9288418110513733e+152 6.6381270625613022e+147 4.9660666912415144e+142 3.7400761169320787e+137 2.8369587497562969e+132 2.1684845101067159e+127 1.6712522578117199e+122 1.2995451433908167e+117 1.0202819605424627e+112 8.0944004169761836e+106 6.4951401402883619e+101 5.2770581996820011e+96 4.3463266823325936e+91 3.6340332862892207e+86 6.2184124207806932e+06 2.3549702231681622e+06 8.9344622792005131e+05 3.3964937329789269e+05 1.2941856270064054e+05 4.9444489582214657e+04 1.8948925349295310e+04 7.2884893398209324e+03 2.8157166284661630e+03 1.0935883545113506e+03 4.2756411572179940e+02 1.6859390851028874e+02 6.7234406976477828e+01 2.7239871823603931e+01 1.1301921952136295e+01 4.8807925858649499e+00 2.2795853023360664e+00 1.2660658777520082e+00 1.0000000000000000e+00 1.2660658777520082e+00 2.2795853023360664e+00 4.8807925858649499e+00 1.1301921952136295e+01 2.7239871823603931e+01 6.7234406976477828e+01 1.6859390851028874e+02 4.2756411572179940e+02 1.0935883545113506e+03 2.8157166284661630e+03 7.2884893398209324e+03 1.8948925349295310e+04 4.9444489582214657e+04 1.2941856270064054e+05 3.3964937329789269e+05 8.9344622792005131e+05 2.3549702231681622e+06 6.2184124207806932e+06 3.6340332862892207e+86 4.3463266823325936e+91 5.2770581996820011e+96 6.4951401402883619e+101 8.0944004169761836e+106 1.0202819605424627e+112 1.2995451433908167e+117 1.6712522578117199e+122 2.1684845101067159e+127 2.8369587497562969e+132 3.7400761169320787e+137 4.9660666912415144e+142 6.6381270625613022e+147 8.9288418110513733e+152 1.2080750952538867e+158 1.6435754557774539e+163 1.8373609455870957e+126 1.3114351827224381e+130 9.3931237960201029e+133 6.7499953595230884e+137 4.8657831748171140e+141 3.5179460150489446e+145 2.5506396918439323e+149 1.8542725469797489e+153 1.3514739884641169e+157 9.8741659929820488e+160 7.2310964177694644e+164 5.3073093858006220e+168 3.9036384048197610e+172 2.8770718748340420e+176 2.1246198511800766e+180 1.8370817931176767e+143 1.8796112199177331e+146 1.9257189103769610e+149 1.9755170246618561e+152 2.0291334505618080e+155 2.0867119025118212e+158 2.1484121475842561e+161 2.2144103502659264e+164 2.2848995299913963e+167 2.3600901272378568e+170 2.4402106755683491e+173 2.5255085783915722e+176 2.6162509904311297e+179 2.7127258049995612e+182 2.8152427491816481e+185 2.9241345899704383e+188 3.0397584552883253e+191 3.1624972746803416e+194 3.2927613453022855e+197 3.4309900296543121e+200 3.5776535923420011e+203 3.7332551839916144e+206 3.8983329813127759e+209 4.0734624931986277e+212 4.2592590436882366e+215 4.4563804435962354e+218 4.6655298636476809e+221 4.8874589230495867e+224 5.1229710085909013e+227 5.3729248405991053e+230 5.6382383034001000e+233 5.9198925593382312e+236 6.2189364669226170e+239 6.5364913252844668e+242 6.8737559688659661e+245 7.2320122381261415e+248 7.6126308540531011e+251 8.0170777264258795e+254 8.4469207280872430e+257 8.9038369699826734e+260 9.3896206144051005e+263 9.9061912667765019e+266 1.0455602989410341e+270 1.1040053984053779e+273 1.1661896993621849e+276 1.2323650477431042e+279 1.3028010618436793e+282 1.3777864225504420e+285 1.4576302598620906e+288 1.5426636430214175e+291 1.6332411821417589e+294 openturns-1.9/validation/src/besselI0.txt000066400000000000000000000155541307543307100205650ustar00rootroot000000000000001073751707130651817086266331365969645010944.00000000000000000000 397006235177227491461666679499847525990400.00000000000000000000 146795606740704815894367609856171828051968.00000000000000000000 54281459645989887615199585058558226464768.00000000000000000000 20073041263108892429728568853254125912064.00000000000000000000 7423325861873598119095238259865771048960.00000000000000000000 2745415388946213370502561386597030297600.00000000000000000000 1015412047323470948847969434131037683712.00000000000000000000 375579435740478121146930039684293722112.00000000000000000000 138927140609851414713768234141572136960.00000000000000000000 51392383455079722491413287545790791680.00000000000000000000 19012419299061115890382998073480577024.00000000000000000000 7034019697320240609198172790755164160.00000000000000000000 2602543404422557048203365069195575296.00000000000000000000 962988811171473526873439896170659840.00000000000000000000 356347763040718849431611254081847296.00000000000000000000 131873359382547427042338461638983680.00000000000000000000 48805758438177439726774683619557376.00000000000000000000 18064118728572781129644189635575808.00000000000000000000 6686440578103397953350940412084224.00000000000000000000 2475178404333834921275578589904896.00000000000000000000 916330564974918151324385014710272.00000000000000000000 339260157932468182503989658517504.00000000000000000000 125617305809726550656234618355712.00000000000000000000 46516064020852911389990618923008.00000000000000000000 17226390780353724348422917455872.00000000000000000000 6380056142917994847839551750144.00000000000000000000 2363168219162154402113636007936.00000000000000000000 875398527094280003924506181632.00000000000000000000 324309129774585015183689646080.00000000000000000000 120158895791241185479165476864.00000000000000000000 44524323179696191919162916864.00000000000000000000 16500027821407333928436498432.00000000000000000000 6115322228329153031288389632.00000000000000000000 2266745504580104355487678464.00000000000000000000 840303984562380585985638400.00000000000000000000 311545791818700173053263872.00000000000000000000 115520963170110227634716672.00000000000000000000 42840534014887198166351872.00000000000000000000 15889342066108211107201024.00000000000000000000 5894077055609376008568832.00000000000000000000 2186686615847308042960896.00000000000000000000 811372374203646072586240.00000000000000000000 301105728540204869877760.00000000000000000000 111759710290859758977024.00000000000000000000 41487895607327236030464.00000000000000000000 15403875980563370213376.00000000000000000000 5720234198350867464192.00000000000000000000 2124592654876452323328.00000000000000000000 789257391486391025664.00000000000000000000 293255378384887742464.00000000000000000000 108983584160255852544.00000000000000000000 40510499585616125952.00000000000000000000 15061540511040702464.00000000000000000000 5601064760356669440.00000000000000000000 2083414075176887808.00000000000000000000 775155953784256128.00000000000000000000 288480254859043392.00000000000000000000 107389541368032816.00000000000000000000 39988262828307688.00000000000000000000 14894774793419286.00000000000000000000 5549742955313858.00000000000000000000 2068504714850871.50000000000000000000 771245522292718.12500000000000000000 287666777811195.18750000000000000000 107338818494510.00000000000000000000 40068575042538.62500000000000000000 14963796904155.79882812500000000000 5590908381350.30175781250000000000 2089962966491.60766601562500000000 781672297823.95642089843750000000 292520631785.68011474609375000000 109534604731.75192260742187500000 41042005854.75528717041015625000 15388976705.65949440002441406250 5774560606.46566677093505859375 2168619088.24133872985839843750 815142122.51287508010864257812 306692993.64035689830780029297 115513961.92215441167354583740 43558282.55955188721418380737 16446190.44061098992824554443 6218412.42078069318085908890 2354970.22316816216334700584 893446.22792005131486803293 339649.37329789268551394343 129418.56270064054115209728 49444.48958221465727547184 18948.92534929531029774807 7288.48933982093240047107 2815.71662846616300157621 1093.58835451135064431583 427.56411572179939639682 168.59390851028874180884 67.23440697647782826607 27.23987182360393077829 11.30192195213629524631 4.88079258586494990624 2.27958530233606637694 1.26606587775200818413 1.00000000000000000000 1.26606587775200818413 2.27958530233606637694 4.88079258586494990624 11.30192195213629524631 27.23987182360393077829 67.23440697647782826607 168.59390851028874180884 427.56411572179939639682 1093.58835451135064431583 2815.71662846616300157621 7288.48933982093240047107 18948.92534929531029774807 49444.48958221465727547184 129418.56270064054115209728 339649.37329789268551394343 893446.22792005131486803293 2354970.22316816216334700584 6218412.42078069318085908890 3.6340332862892206545e+86 4.3463266823325936179e+91 5.2770581996820011264e+96 6.495140140288361869e+101 8.094400416976183619e+106 1.0202819605424626782e+112 1.2995451433908166689e+117 1.6712522578117199089e+122 2.1684845101067159361e+127 2.8369587497562968675e+132 3.7400761169320787391e+137 4.9660666912415144079e+142 6.6381270625613021672e+147 8.9288418110513733001e+152 1.2080750952538867171e+158 1.6435754557774539396e+163 1.8373609455870956701e+126 1.311435182722438116e+130 9.3931237960201028869e+133 6.7499953595230884428e+137 4.8657831748171139849e+141 3.5179460150489446174e+145 2.5506396918439323172e+149 1.8542725469797489369e+153 1.3514739884641168895e+157 9.8741659929820488189e+160 7.2310964177694643515e+164 5.3073093858006220019e+168 3.9036384048197609635e+172 2.8770718748340419715e+176 2.1246198511800765605e+180 1.8370817931176767398e+143 1.8796112199177330722e+146 1.9257189103769610125e+149 1.9755170246618560878e+152 2.0291334505618079932e+155 2.0867119025118212195e+158 2.1484121475842561119e+161 2.2144103502659263809e+164 2.2848995299913962551e+167 2.3600901272378568195e+170 2.4402106755683491253e+173 2.5255085783915722333e+176 2.6162509904311297049e+179 2.7127258049995611735e+182 2.8152427491816480512e+185 2.9241345899704383153e+188 3.0397584552883253455e+191 3.1624972746803416047e+194 3.2927613453022855405e+197 3.430990029654312059e+200 3.577653592342001101e+203 3.7332551839916143903e+206 3.8983329813127759193e+209 4.0734624931986277023e+212 4.2592590436882366479e+215 4.4563804435962354119e+218 4.6655298636476809241e+221 4.8874589230495866798e+224 5.1229710085909012871e+227 5.3729248405991052849e+230 5.6382383034001000055e+233 5.9198925593382312169e+236 6.2189364669226170161e+239 6.5364913252844668486e+242 6.8737559688659661368e+245 7.2320122381261414717e+248 7.6126308540531011172e+251 8.0170777264258794778e+254 8.4469207280872430067e+257 8.9038369699826734284e+260 9.3896206144051004958e+263 9.9061912667765019355e+266 1.0455602989410340949e+270 1.1040053984053778587e+273 1.1661896993621849313e+276 1.2323650477431042246e+279 1.3028010618436792873e+282 1.3777864225504419698e+285 1.4576302598620906269e+288 1.542663643021417489e+291 1.6332411821417589343e+294 openturns-1.9/validation/src/besselI0_maple.csv000066400000000000000000000127241307543307100217130ustar00rootroot0000000000000023;815142122.51289225652 23.01;823153474.57155716556 23.02;831243643.85532311551 23.03;839413406.50060606975 23.04;847663546.29311317748 23.05;855994854.74328941154 23.06;864408131.16250888221 23.07;872904182.74001818212 23.08;881483824.62063918973 23.09;890147879.98323883255 23.1;898897180.11997338522 23.11;907732564.51631495252 23.12;916654880.93186786301 23.13;925664985.48198277519 23.14;934763742.72017637542 23.15;943952025.72136462441 23.16;953230716.16591758819 23.17;962600704.42454396825 23.18;972062889.64401352635 23.19;981618179.83372568016 23.2;991267491.95313262773 23.21;1001011752.0000254415 23.22;1010851895.0996916557 23.23;1020788865.5949529561 23.24;1030823617.1370916647 23.25;1040957112.7776747985 23.26;1051190325.0612845704 23.27;1061524236.1191642829 23.28;1071959837.7637886597 23.29;1082498131.5843677444 23.3;1093140129.0432935906 23.31;1103886851.5735390535 23.32;1114739330.6770180911 23.33;1125698608.0239170703 23.34;1136765735.5530066718 23.35;1147941775.5729440795 23.36;1159227800.8645752365 23.37;1170624894.7842470485 23.38;1182134151.3681395085 23.39;1193756675.4376278222 23.4;1205493582.7056847045 23.41;1217345999.8843331267 23.42;1229315064.7931598888 23.43;1241401926.4689004982 23.44;1253607745.2761059374 23.45;1265933693.0189020081 23.46;1278380953.0538520468 23.47;1290950720.4039339105 23.48;1303644201.8736422416 23.49;1316462616.165227128 23.5;1329407193.996080386 23.51;1342479178.2172808031 23.52;1355679823.9333097896 23.53;1369010398.6229490044 23.54;1382472182.2613716295 23.55;1396066467.4434390876 23.56;1409794559.5082151108 23.57;1423657776.6647091894 23.58;1437657450.1188615437 23.59;1451794924.2017818877 23.6;1466071556.4992543694 23.61;1480488717.9825211994 23.62;1495047793.1403575995 23.63;1509750180.1124508302 23.64;1524597290.8240961822 23.65;1539590551.1222229411 23.66;1554731400.9127634691 23.67;1570021294.2993786706 23.68;1585461699.7235532455 23.69;1601054100.106074263 23.7;1616799992.9899067232 23.71;1632700890.684479911 23.72;1648758320.4113984792 23.73;1664973824.4515923404 23.74;1681348960.2939195816 23.75;1697885300.7852367602 23.76;1714584434.2819510788 23.77;1731447964.803069082 23.78;1748477512.1847566602 23.79;1765674712.2364252964 23.8;1783041216.8983596335 23.81;1800578694.4009015936 23.82;1818288829.42520643 23.83;1836173323.2655862423 23.84;1854233893.9934566431 23.85;1872472276.6229024152 23.86;1890890223.2778781581 23.87;1909489503.3610600798 23.88;1928271903.724365248 23.89;1947239228.8411547795 23.9;1966393300.9801376064 23.91;1985735960.3809916235 23.92;2005269065.4317191876 23.93;2024994492.8477541068 23.94;2044914137.8528374277 23.95;2065029914.3616794991 23.96;2085343755.1644259638 23.97;2105857612.1129455048 23.98;2126573456.3089573484 23.99;2147493278.2940167044 24;2168619088.2413765037 24.01;2189952916.1497439751 24.02;2211496812.0389507865 24.03;2233252846.1475556597 24.04;2255223109.1323985583 24.05;2277409712.2701257313 24.06;2299814787.6607050928 24.07;2322440488.4329516044 24.08;2345288988.952082525 24.09;2368362485.0293225891 24.1;2391663194.1335793702 24.11;2415193355.6052092904 24.12;2438955230.8718949356 24.13;2462951103.666654543 24.14;2487183280.2480047317 24.15;2511654089.6222977581 24.16;2536365883.7682547846 24.17;2561321037.8637168671 24.18;2586521950.5146355766 24.19;2611971043.986325392 24.2;2637670764.4370002147 24.21;2663623582.1536165821 24.22;2689831991.7900463753 24.23;2716298512.6076020456 24.24;2743025688.7179376101 24.25;2770016089.3283488971 24.26;2797272308.9894967534 24.27;2824796967.8455771628 24.28;2852592711.8869624578 24.29;2880662213.2053380493 24.3;2909008170.2513593385 24.31;2937633308.0948537202 24.32;2966540378.6875928322 24.33;2995732161.1286604551 24.34;3025211461.9324417177 24.35;3054981115.2992595156 24.36;3085043983.3886843104 24.37;3115402956.5955437308 24.38;3146060953.8286586623 24.39;3177020922.7923327745 24.4;3208285840.2706227005 24.41;3239858712.4144163544 24.42;3271742575.0313471424 24.43;3303940493.8785720992 24.44;3336455564.9584422577 24.45;3369290914.8170938404 24.46;3402449700.845989143 24.47;3435935111.5864362675 24.48;3469750367.0371171486 24.49;3503898718.9646536107 24.5;3538383451.2172414847 24.51;3573207880.0413831121 24.52;3608375354.4017488638 24.53;3643889256.3041986029 24.54;3679753001.1219943284 24.55;3715970037.9252355439 24.56;3752543849.8135492085 24.57;3789477954.2520664421 24.58;3826775903.4107184743 24.59;3864441284.5068846496 24.6;3902477720.1514256244 24.61;3940888868.6981352192 24.62;3979678424.5966447214 24.63;4018850118.7488137671 24.64;4058407718.8686422691 24.65;4098355029.8457381984 24.66;4138695894.1123763698 24.67;4179434192.0141837337 24.68;4220573842.1844870213 24.69;4262118801.9223589515 24.7;4304073067.5743995604 24.71;4346440674.9202895801 24.72;4389225699.5621531555 24.73;4432432257.3177675596 24.74;4476064504.6176579373 24.75;4520126638.9061154864 24.76;4564622899.0461778639 24.77;4609557565.7286109867 24.78;4654934961.8849317885 24.79;4700759453.1045118804 24.8;4747035448.0558024616 24.81;4793767398.9117212243 24.82;4840959801.7792424006 24.83;4888617197.1332315042 24.84;4936744170.2545667351 24.85;4985345351.6725894243 24.86;5034425417.6119263215 24.87;5083989090.4437269471 24.88;5134041139.1413596592 24.89;5184586379.7406105191 24.9;5235629675.8044294735 24.91;5287175938.892268811 24.92;5339230129.0340592992 24.93;5391797255.2088698528 24.94;5444882375.8282970404 24.95;5498490599.2246311947 24.96;5552627084.1438463517 24.97;5607297040.2434617154 24.98;5662505728.5953228129 24.99;5718258462.1933509818 25;5774560606.4663103158 openturns-1.9/validation/src/besselI1_maple.csv000066400000000000000000000127071307543307100217150ustar00rootroot0000000000000021.5;183765294.5659708418 21.51;185570595.26870666266 21.52;187393649.88300391189 21.53;189234633.17359528683 21.54;191093721.62704942991 21.55;192971093.468748515 21.56;194866928.68003335835 21.57;196781409.01551770811 21.58;198714718.02057338313 21.59;200667041.04898794787 21.6;202638565.28079662711 21.61;204629479.74029018104 21.62;206639975.31420047818 21.63;208670244.77006552076 21.64;210720482.77477569459 21.65;212790885.91330303299 21.66;214881652.70761530187 21.67;216992983.63577673106 21.68;219125081.15123723499 21.69;221278149.70231198398 21.7;223452395.75185320581 21.71;225648027.79711611594 21.72;227865256.3898208932 21.73;230104294.15641263706 21.74;232365355.81852126156 21.75;234648658.2136233002 21.76;236954420.31590761583 21.77;239282863.257347029 21.78;241634210.34897789853 21.79;244008687.1023897076 21.8;246406521.25142672954 21.81;248827942.77410386753 21.82;251273183.91473878336 21.83;253742479.20630245127 21.84;256236065.49299029397 21.85;258754181.9530160791 21.86;261297070.1216307764 21.87;263864973.91436859685 21.88;266458139.65052245776 21.89;269076816.0768511395 21.9;271721254.39152042194 21.91;274391708.26828051163 21.92;277088433.88088209321 21.93;279811689.92773336181 21.94;282561737.65680041642 21.95;285338840.8907534178 21.96;288143266.05236093805 21.97;290975282.19013495335 21.98;293835161.00422895506 21.99;296723176.8725916793 22;299639606.87737897973 22.01;302584730.83162639281 22.02;305558831.30618497078 22.03;308562193.65692298221 22.04;311595106.05219610627 22.05;314657859.50058877263 22.06;317750747.8789293249 22.07;320874067.96058171246 22.08;324028119.44401644165 22.09;327213204.98166354498 22.1;330429630.20905035354 22.11;333677703.77422688597 22.12;336957737.36748169478 22.13;340270045.7513510389 22.14;343614946.79092427996 22.15;346992761.48444842805 22.16;350403813.99423479199 22.17;353848431.67787071809 22.18;357326945.11973943102 22.19;360839688.16285102012 22.2;364386997.9409876446 22.21;367969214.91116606137 22.22;371586682.88642061017 22.23;375239749.0689098212 22.24;378928764.08334984225 22.25;382654082.01077791356 22.26;386416060.42264915067 22.27;390215060.41526992779 22.28;394051446.64457118671 22.29;397925587.36122502907 22.3;401837854.44610798327 22.31;405788623.44611437033 22.32;409778273.61032322739 22.33;413807187.92652228149 22.34;417875753.15809250051 22.35;421984359.88125678371 22.36;426133402.52269638873 22.37;430323279.3975387281 22.38;434554392.74772020376 22.39;438827148.78072778476 22.4;443141957.70872306953 22.41;447499233.7880526114 22.42;451899395.35914832328 22.43;456342864.88682181513 22.44;460830069.00095655593 22.45;465361438.5376017904 22.46;469937408.58047217951 22.47;474558418.50285717302 22.48;479224912.00994416202 22.49;483937337.18155949945 22.5;488696146.51533151672 22.51;493501796.97027970589 22.52;498354750.01083427747 22.53;503255471.65129034603 22.54;508204432.50070103753 22.55;513202107.80821385487 22.56;518248977.50885468101 22.57;523345526.26976384221 22.58;528492243.53688869782 22.59;533689623.58213726708 22.6;538938165.55099744803 22.61;544238373.51062642859 22.62;549590756.49841493554 22.63;554995828.57103101277 22.64;560454108.8539480668 22.65;565966121.59146196429 22.66;571532396.19720201354 22.67;577153467.30514070992 22.68;582829874.82110717307 22.69;588562163.97480925288 22.7;594350885.37236933014 22.71;600196595.04937888738 22.72;606099854.52447697609 22.73;612061230.85345775645 22.74;618081296.68391233761 22.75;624160630.31041019767 22.76;630299815.73022551509 22.77;636499442.69961379577 22.78;642760106.7906442333 22.79;649082409.44859329374 22.8;655466958.04990507045 22.81;661914365.9607240094 22.82;668425252.59600566074 22.83;675000243.47921116836 22.84;681639970.30259126551 22.85;688345070.9880656018 22.86;695116189.74870328434 22.87;701953977.15081057393 22.88;708859090.17663173602 22.89;715832192.28766910557 22.9;722873953.48862848449 22.91;729985050.39199605145 22.92;737166166.28325302417 22.93;744417991.18673437682 22.94;751741221.93213797677 22.95;759136562.22169056838 22.96;766604722.69797709468 22.97;774146421.01243991229 22.98;781762381.89455451959 22.99;789453337.22168848353 23;797220026.08965031677 23.01;805063194.88393512342 23.02;812983597.35167389928 23.03;820981994.67429344025 23.04;829059155.54089388169 23.05;837215856.22235096072 23.06;845452880.64615016361 23.07;853771020.47195999137 23.08;862171075.16795164793 23.09;870653852.08787252784 23.1;879220166.54888095299 23.11;887870841.91014968195 23.12;896606709.65224578943 23.13;905428609.45729458907 23.14;914337389.28993534798 23.15;923333905.47907661877 23.16;932419022.80045909151 23.17;941593614.56003394691 23.18;950858562.67816477019 23.19;960214757.7746611655 23.2;969663099.25465229076 23.21;979204495.39530861433 23.22;988839863.43342027686 23.23;998570129.65384052472 23.24;1008396229.478802765 23.25;1018319107.5581198768 23.26;1028339717.8602744986 23.27;1038459023.7644090981 23.28;1048677998.1532247179 23.29;1058997623.5067973779 23.3;1069418891.9973212051 23.31;1079942805.5847874505 23.32;1090570376.1136086421 23.33;1101302625.4101972185 23.34;1112140585.3815080751 23.35;1123085298.1145545506 23.36;1134137815.9769074774 23.37;1145299201.7181870105 23.38;1156570528.5725570494 23.39;1167952880.3622321629 23.4;1179447351.602007024 23.41;1191055047.6048184632 23.42;1202777084.5883503459 23.43;1214614589.7826915837 23.44;1226568701.539057687 23.45;1238640569.4395863744 23.46;1250831354.4082178536 23.47;1263142228.8226704971 23.48;1275574376.6275227396 23.49;1288128993.4484121331 23.5;1300807286.7073626018 openturns-1.9/validation/src/cdflib_replacement.mw000066400000000000000000001612001307543307100225130ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZYLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEjMjBGJ0Y5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGam5GTUZPLUYsNiVRImFGJ0YvRjJGX28tRmNvNiRRJDEwLkYnRjlGNUZPRmduLUYsNiVRInhGJ0YvRjJGX28tRmNvNiRRJDEyLkYnRjlGNUZPRmduLUYsNiVRI2dhRidGL0YyRl9vLUYsNiVRJkdBTU1BRicvRjBGPUY5LUkobWZlbmNlZEdGJDYkLUYjNiNGam9GOUZmb0ZPRmduLUYsNiVRJGdheEYnRi9GMkZfb0ZmcC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GaXFGaXAtRl5xNiQtRiM2JUZqby1GNjYtUSIsRidGOUY7RmlvRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0ZgcEY5RmZvRk9GZ24tRiw2JVEiUEYnRi9GMkZfb0ZicS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGam5GW28tSSVtc3VwR0YkNiVGZnAtRiM2JEZlcS1GY282JFEiMUYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRmZvRk9GZ24tRiw2JVEiUUYnRi9GMkZfb0Zfcy1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIRmhxRmpxRmJxRmdyRmpyRmZvRmdu LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiM/ JCInISlHTyIiIQ== JCI1Iip5Vyt0QnQ/XEYhIzk= JCI1S153W0gkUXlnZCghIz8= JCI1b1tCXnE7OyNSVSMhIz8= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUkjbWlHRiQ2JVEkdmFsRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSNtbkdGJDYkUTs3LjU3NjA3ODM4MzI5NDg3NzQ4Mjk3ZS0wMUYnRjktRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSC9GS1EmMC4wZW1GJ0ZNLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHRlgvJSZkZXB0aEdGaG4vJSpsaW5lYnJlYWtHUShuZXdsaW5lRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSEZXL0ZORlgtRlA2JFEiMUYnRjktRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZbcC1JJm1mcmFjR0YkNigtRiM2I0YrLUYjNiMtRiw2JVEiUEYnRi9GMi8lLmxpbmV0aGlja25lc3NHRmZvLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRltxLyUpYmV2ZWxsZWRHRj0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI2KEhbeFtIJFF5Z2QoISNA JCElIUciISM+ Qyw+SSJ4RzYiLkYkISIiPkknRGlnaXRzR0YlIiNdRic+SSZkZWx0YUdGJS1JKXNpbXBsaWZ5RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsKC1JJGxvZ0dGLzYjLUkmR0FNTUFHRi82I0YkIiIiKiYsJi1GNUY5RjpGJ0Y6RjpGJEY6RidGPSNGOiIiI0Y6PkknZHByaW1lR0YlLUkoY29udmVydEdGMDYkLUknc2VyaWVzR0YwNiVGLC9GJEkpaW5maW5pdHlHRjAiIz9JKHBvbHlub21HRjBGOi1JJ2Zzb2x2ZUdGLzYjLywmRixGOkZBRicsJC1JIl5HRjA2JEY/ISNgRidGOg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCotSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLUkmR0FNTUFHRiU2I0kieEdGKCIiIiomRi1GLi1GJEYsRi4hIiJGLUYuRjAjRi4iIiM= LDYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiYiIiMjIiIiRitJI1BpR0YmRixGLSokSSJ4R0YoISIiI0YtIiM3KiRGMCEiJCNGMSIkZyQqJEYwISImI0YtIiVnNyokRjAhIigjRjEiJSFvIiokRjAhIiojRi0iJSk9IiokRjAhIzYjISQicCInZy5PKiRGMCEjOCNGLSIkYyIqJEYwISM6IyElPE8iJytDNyokRjAhIzwjIiZuUSUiJyk9VyM= JCJTJ3BXbEoieSRwcCFSTjlId3Z5ZVxLXEEiMzIocCEjXA== evalf[20](convert(subs(u=1/t,convert(sort(series(log(GAMMA(u))-((log(u)-1)*u-log(u)/2),u=infinity,20)),polynom)),horner,t)); LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYkIjV4VEZuL0tgUSo9KiEjPyIiIiomLCYkIjVMTExMTExMTEwkKSEjQEYmKiYsJiQhNXl4eHh4eHh4eEYhI0FGJiomLCYkIjV6XU96XU96XU96ISNCRiYqJiwmJCE1NVFfNFFfNFFfZkY1RiYqJiwmJCI1JTN2VDN2VDN2VClGNUYmKiYsJiQhNXBfPHBfPHBfPD5GMEYmKiYsJiQiNWtENWtENWtENWtGMEYmKiYsJiQhNUk9Q3JaZmAxYkhGK0YmKiRJInRHNiIiIiMkIjU7dDAkKW9CUFcneiJGJUYmRktGTUYmRiZGS0ZNRiZGJkZLRk1GJkYmRktGTUYmRiZGS0ZNRiZGJkZLRk1GJkYmRktGTUYmRiZGS0YmRiY= QyQtSSlhc3N1bWluZ0dJKF9zeXNsaWJHNiI2JDcjLUknZXhwYW5kRyUqcHJvdGVjdGVkRzYjLUknc2VyaWVzR0YrNiQtSSRsb2dHNiRGK0YlNiMqKkknbGFtYmRhR0YmIiIiKUkidUdGJiwmSSJrR0YmRjYhIiJGNkY2LUkkZXhwR0YyNiMsJEY4RjtGNi1JJkdBTU1BR0YyNiNGOkY7L0Y6SSlpbmZpbml0eUdGKzclLUkiPkdGKzYkRjUiIiEtRkc2JEY6RkktRkc2JEY4RklGNg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LDoqJkkia0c2IiIiIi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiNJInVHRiVGJkYmKiZGJEYmLUYoNiNGJEYmISIiRiRGJi1GKDYjIiIjI0YxRjQtRig2I0knbGFtYmRhR0YlRiZGJ0YxRi1GMS1GKDYjSSNQaUdGKkY1Ri8jRiZGNCokRiRGMSNGMSIjNyokRiQhIiQjRiYiJGckLUkiT0dGKjYjKiRGJCEiJkYm LUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMtSSRsb2dHNiRGJEkoX3N5c2xpYkc2IjYjLUklc3FydEdGKDYjLCRJI1BpR0YkIiIj LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI1eFRGbi9LYFEqPSohIz8= QygtSSV3aXRoRzYiNiNJK1N0YXRpc3RpY3NHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiUhIiI+SSRwZGZHRiUtSSRQREZHRiU2JC1JL1JhbmRvbVZhcmlhYmxlR0YlNiMtSSZHYW1tYUdGJTYkIyIiIiIjNSQiJyoqKioqKiEiJEkieEdGJUYrPkkkcmVmR0YlLSZJJmV2YWxmR0YpNiMiI0k2Iy1JJXN1YnNHRik2JC9GPSIjKipGLUY4 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI/V3UxWEMiPShvI1soNFRtNjchI0k= QyY+SSV2YWwwRzYiJCI2b3BralooNFRtNjchI0AiIiI+SSVlcnIwR0YlLCZGKUYpKiZGJEYpSSRyZWZHRiUhIiJGL0Yp LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI2b3BralooNFRtNjchI0A= JCIpciw9XyEjPw== QyYtSSV3aXRoRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJK1N0YXRpc3RpY3NHRiUhIiItSShjb252ZXJ0R0YmNiQtSSRDREZHRig2JC1JL1JhbmRvbVZhcmlhYmxlR0YoNiMtSSlTdHVkZW50VEdGKDYjSSNudUdGKEkieEdGKEkmR0FNTUFHRiUiIiI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCYjIiIiIiIjRiQqLEkieEc2IkYkLUkmR0FNTUFHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRig2IywmSSNudUdGKEYjRiNGJEYkLUkqaHlwZXJnZW9tR0YtNiU3JEYjRi83IyMiIiRGJSwkKiZGJ0YlRjAhIiJGOkYkKiZJI1BpR0YsRiRGMEYkI0Y6RiUtRio2IywkRjBGI0Y6RiQ= JSFH openturns-1.9/validation/src/dProb.mws000066400000000000000000000206111307543307100201420ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 " " 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "restart;\ndbeta:=bet a*(sqrt(1-2*ln(epsilon)/beta^2)-1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%&dbetaG*&%%betaG\"\"\",&*$,&F'F'*(\"\"#F'-%#lnG6#%(epsilonGF'F&!\"# !\"\"#F'F,F'F'F2F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 201 "phi: =proc(x)\n1/(2*Pi)^(N/2)*exp(-x*x/2)\nend:\nPHI:=proc(x)\nint(phi(t),t =-infinity..x)\nend:\nkhi2:=proc(x,n)\n1/GAMMA(n/2)*(1/2)^(n/2)*x^(n/2 -1)*exp(-1/2*x)\nend:\nKHI2:=proc(x,n)\nint(khi2(t,n),t=0..x)\nend:\n " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 177 "sol1:=solve(phi(beta+d beta)/phi(beta)=epsilon,dbeta);\nsol2:=solve(PHI(-beta-dbeta)/PHI(-bet a)=epsilon,dbeta);\nsol3:=solve((1-KHI2(beta+dbeta,6))/(1-KHI2(beta,6) )=epsilon,dbeta);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%sol1G6$,&%%bet aG!\"\"*$,&*$)F'\"\"#\"\"\"F.*&F-F.-%#lnG6#%(epsilonGF.F(#F.F-F.,&F'F( F)F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%sol2G,$*&#\"\"\"\"\"#F(*&,& *&F)#F(F)%%betaGF(F(*&F)F(-%'RootOfG6#,*-%$erfG6#%#_ZG!\"\"F(F(*&%(eps ilonGF(-F56#,$*(F)F8F)F-F.F(F(F(F(F:F8F(F8F(F)F-F(F8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%sol3G6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 60 "plot(subs(beta=5,n=2,[sol1[1],sol2,sol3]),epsilon=0.001..1);" }} {PARA 13 "" 1 "" {GLPLOT2D 338 338 338 {PLOTDATA 2 "6'-%'CURVESG6$7gn7 $$\"3-+++++++5!#?$\"3+MDc6&4-B\"!#<7$$\"3\"\\iSm!*z/o\"F*$\"3(R9/$F*$\"3%\\`D]* p.\\5F-7$$\"3)**\\ili>>s$F*$\"3>asWhdc:5F-7$$\"3=]P%)R%zG3&F*$\"3Z@)y0 @a`j*!#=7$$\"3%***\\7`#RQW'F*$\"3Ax(3_a*=O#*FG7$$\"3Z*\\(oz)ed;*F*$\"3 Kt1E[-NQ')FG7$$\"32+]i]yw)=\"!#>$\"3O>\">U`)FG7$$\"3;+v$fx^Jt\"FU$ \"32f;X+ooTvFG7$$\"31++D,d`xAFU$\"3.ga%Q#)3]1(FG7$$\"3Q](okym[A$FU$\"3 N1VZCFC_kFG7$$\"3P+vory>sTFU$\"3S)f\\wWbT*fFG7$$\"3()**\\()QO%HI'FU$\" 3q8XgYpU__FG7$$\"3],]7sL\"yW)FU$\"3OA%oEVj(>ZFG7$$\"3.]PR\"*)[#e5FG$\" 3`%))\\4F\"[1VFG7$$\"3**\\(o)R1;c7FG$\"3o2pT4/')*)RFG7$$\"32](=>z'3h9F G$\"3/IT4pbA4PFG7$$\"37](=:r@In\"FG$\"3l'*)4mwPkX$FG7$$\"3/]P9`pF%)=FG $\"3XR'G*4]_LKFG7$$\"3K+]sN*y:5#FG$\"3hGy`2&)4GIFG7$$\"3?+DES'yHH#FG$ \"3F7$**[3sM'GFG7$$\"3H+]nu$\\%3DFG$\"3CR?\"*p=I$p#FG7$$\"3;+]i_[![s#F G$\"3CFK4K01ODFG7$$\"34+]KXMILHFG$\"3ci&G!Ri_&R#FG7$$\"3&*\\(=?9SE7$FG $\"3%[M'pr-,wAFG7$$\"3Q+]U(yzxM$FG$\"3hW\"4%)GlE9#FG7$$\"3<++q)f-&QNFG $\"3ygGI7yHO?FG7$$\"3<](o&o&e.w$FG$\"3D%pZPE/$>>FG7$$\"3))***\\RpQn&RF G$\"3f1H$3dj6#=FG7$$\"3l](og\"))>sTFG$\"3E`BHGIu=,W\"f%FG$\"3#[(f:eMFL:FG7$$\"3V]PWJ`-)y%FG$ \"33Z(\\V>b=X\"FG7$$\"3I+D1S!p++&FG$\"3-LU$3UkvO\"FG7$$\"33](=&fGK?_FG $\"3)Ql\"H6gd$G\"FG7$$\"33]7$oXa?T&FG$\"3y#y&RQU>87FG7$$\"3r+veM)H\">c FG$\"3Z$[A&\\X#)R6FG7$$\"3`***\\@'*eI$eFG$\"3v^Dd0%3n1\"FG7$$\"3(**\\P s(oMUgFG$\"34qF/a\\Kw**FU7$$\"3P](okpV[C'FG$\"3z))H[j#R&H$*FU7$$\"3n* \\i%*)=opkFG$\"3-DBUAmgM')FU7$$\"3]***\\f+4<*FG$\"3rvTk=)Rcs\"FU7$$\" 32++!*y%=*p$*FG$\"3%3w]t8C**H\"FU7$$\"3*4vo&[@&4e*FG$\"3@*3nYt0Vb)F*7$ $\"3o]7t(HQHy*FG$\"3F%>G_C=rQ%F*7$$\"\"\"\"\"!$Fj]lFj]l-%'COLOURG6&%$R GBG$\"#5!\"\"F[^lF[^l-F$6$7\\p7$$Fi]l!\"$$\"+60^)>\"!\"*7$$\"+1*z/o\"! #7$\"+gC#f6\"F[_l7$$\"+7)f4O#F__l$\"+nh_i5F[_l7$$\"+=(R9/$F__l$\"+@.K@ 5F[_l7$$\"+D'>>s$F__l$\"+b;/\"*)*!#57$$\"+P%zG3&F__l$\"+D%eHQ*Fa`l7$$ \"+]#RQW'F__l$\"+!=Rx**)Fa`l7$$\"+v)ed;*F__l$\"+]J)4Q)Fa`l7$$\"+]yw)= \"!#6$\"+0$zH&zFa`l7$$\"+v<:LD'Fa`l7$$\"+sy>sTFdal$\"+:e,6eFa`l7$$ \"+RO%HI'Fdal$\"++[X(3&Fa`l7$$\"+sL\"yW)Fdal$\"+[p`qXFa`l7$$\"+\"*)[#e 5Fa`l$\"+5<:oTFa`l7$$\"+S1;c7Fa`l$\"++LdgQFa`l7$$\"+#z'3h9Fa`l$\"+[mN) e$Fa`l7$$\"+7<-t;Fa`l$\"+?E2VLFa`l7$$\"+`pF%)=Fa`l$\"+c&4n7$Fa`l7$$\"+ Wz#H*>Fa`l$\"+\\+kCIFa`l7$$\"+O*y:5#Fa`l$\"+P1mFHFa`l7$$\"+i)G%\\@Fa`l $\"+AuQ')GFa`l7$$\"+)yys>#Fa`l$\"+Q79YGFa`l7$$\"+^P?@AFa`l$\"+'pMj#GFa `l7$$\"+9(G^C#Fa`l$\"+WKt1GFa`l7$$\"+b*46D#Fa`l$\"+czv,GFa`l7$$\"+&>\" 4dAFa`l$\"+$GPpz#Fa`l7$$\"+OC2jAFa`l$\"+e)G@z#Fa`l7$%*undefinedGF\\hl7 $$\"+v$\\%3DFa`l$\"+7]8.EFa`l7$$\"+9ri;EFa`l$\"+u?ZDDFa`l7$$\"+`[![s#F a`l$\"+sM&3X#Fa`l7$$\"+L/KJFFa`l$\"+CPPYCFa`l7$$\"+\"3XMy#Fa`l$\"+/Kg6 CFa`l7$$\"+i1'**y#Fa`l$\"+*e9sS#Fa`l7$$\"+ViZ'z#Fa`l$\"+X6&HS#Fa`l7$$ \"+C=*H!GFa`l$\"+qBe)R#Fa`l7$$\"+')H-;GFa`l$\"+SL5!R#Fa`l7$$\"+[T0HGFa `l$\"+)*za\"Q#Fa`l7$$\"+'zy6)GFa`l$\"+'o;yM#Fa`l7$$\"+e*4U*GFa`l$\"+*G [%RBFa`l7$$\"+?6C2HFa`l$\"+SsAJBFa`l7$$\"+,nv8HFa`l$\"+=$>qK#Fa`l7$$\" +#Gs-#HFa`l$\"+C5$HK#Fa`lF[hl7$$\"+,V0ERFa`l$\"+%>KLx\"Fa`l7$$\"+z6>KR Fa`l$\"+yAVqsTFa`l$\"+S.uf;Fa`l7$$\"+ /yOxVFa`l$\"+s*3*p:Fa`l7$$\"+?,W\"f%Fa`l$\"+CcM![\"Fa`l7$$\"+J`-)y%Fa` l$\"+H;j,9Fa`l7$$\"+S!p++&Fa`l$\"+YO>?8Fa`l7$$\"+gGK?_Fa`l$\"+U%)**Q7F a`l7$$\"+dW07aFa`l$\"+%z%*4<\"Fa`l7$$\"+N)H\">cFa`l$\"+Q.6+6Fa`l7$$\"+ i*eI$eFa`l$\"+3*R%H5Fa`l7$$\"+xoMUgFa`l$\"+SL0F'*Fdal7$$\"+'pV[C'Fa`l$ \"++ZI-!*Fdal7$$\"+*)=opkFa`l$\"+&*R=J$)Fdal7$$\"+1!4ZxF dal7$$\"+vgT()oFa`l$\"+5e\">9(Fdal7$$\"+R(yG3(Fa`l$\"+0&o%4mFdal7$$\"+ g5d'H(Fa`l$\"+]>4VgFdal7$$\"+\"))Qw\\(Fa`l$\"+!=QW_&Fdal7$$\"+)o7yq(Fa `l$\"+=Ua'*\\Fdal7$$\"+,gH8zFa`l$\"+q[t$\\%Fdal7$$\"+()zTG\")Fa`l$\"+! pj2)RFdal7$$\"+FggN$)Fa`l$\"+w2v)\\$Fdal7$$\"+Ad[Z&)Fa`l$\"+8Ef< *Fa`l$\"+Gn)Rm\"Fdal7$$\"+z%=*p$*Fa`l$\"+$4dLD\"Fdal7$$\"+\\@&4e*Fa`l$ \"+5&eqC)F__l7$$\"+)HQHy*Fa`l$\"+--=HUF__l7$Fh]l$\"+efCf5!#:-F]^l6&F_^ lF[^lF`^lF[^l-F$6$7S7$Fg^l$!+'f)y**pF[_l7$F]bl$!+wS<&*pF[_l7$Fgbl$!+*e T6*pF[_l7$F\\cl$!+zqe')pF[_l7$Facl$!+h7)>)pF[_l7$Ffcl$!+ygPxpF[_l7$F[d l$!+Xt3tpF[_l7$F`dl$!+4qiopF[_l7$Fedl$!+JH*R'pF[_l7$Fjdl$!+Z?NfpF[_l7$ Fdel$!+8bbapF[_l7$$\"+S'yHH#Fa`l$!+g8J]pF[_l7$F^hl$!+<:^XpF[_l7$Fhhl$! +X$o1%pF[_l7$$\"+XMILHFa`l$!+5%yf$pF[_l7$$\"+U,kAJFa`l$!+U+qJpF[_l7$$ \"+(yzxM$Fa`l$!+#G)eEpF[_l7$$\"+*f-&QNFa`l$!+@qBApF[_l7$$\"+p&e.w$Fa`l $!+X5:RIeoF[_l7$Fiam$!+1wz_oF[_l7$F^bm$!+1H#y%oF[_l7$Fc bm$!+bF[UoF[_l7$Fhbm$!+pzhPoF[_l7$F]cm$!+U5FKoF[_l7$Fbcm$!+_D@FoF[_l7$ Fgcm$!+ph*=#oF[_l7$F\\dm$!+9'pm\"oF[_l7$Fadm$!+up;6oF[_l7$Ffdm$!+!*p$e !oF[_l7$F[em$!+u^N+oF[_l7$F`em$!+Ws)[z'F[_l7$Feem$!+nZ$)*y'F[_l7$Fjem$ !+@1,%y'F[_l7$F_fm$!+%yq(ynF[_l7$Fdfm$!+8<:tnF[_l7$Fifm$!+(*=unnF[_l7$ Fh]l$!+JL*=w'F[_l-F]^l6&F_^lF`^lF`^lF[^l-%+AXESLABELSG6$Q(epsilon6\"Q! F[bn-%%VIEWG6$;Fg^lFh]l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" "Curve 2" "Curve 3" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "series(sol1[1]/sol2,epsilon);" }} {PARA 8 "" 1 "" {TEXT -1 51 "Error, (in series/RootOf) unable to compu te series\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "with(stats); " }}{PARA 7 "" 1 "" {TEXT -1 116 "Warning, these names have been redef ined: anova, describe, fit, importdata, random, statevalf, statplots, \+ transform\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7*%&anovaG%)describeG%$ fitG%+importdataG%'randomG%*statevalfG%*statplotsG%*transformG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 13 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/dProb.txt000066400000000000000000000032171307543307100201560ustar00rootroot00000000000000> restart; > dbeta:=beta*(sqrt(1-2*ln(epsilon)/beta^2)-1); // 2 ln(epsilon)\1/2 \ dbeta := beta ||1 - -------------| - 1| || 2 | | \\ beta / / > phi:=proc(x) > 1/(2*Pi)^(N/2)*exp(-x*x/2) > end: > PHI:=proc(x) > int(phi(t),t=-infinity..x) > end: > khi2:=proc(x,n) > 1/GAMMA(n/2)*(1/2)^(n/2)*x^(n/2-1)*exp(-1/2*x) > end: > KHI2:=proc(x,n) > int(khi2(t,n),t=0..x) > end: > > sol1:=solve(phi(beta+dbeta)/phi(beta)=epsilon,dbeta); > sol2:=solve(PHI(-beta-dbeta)/PHI(-beta)=epsilon,dbeta); > sol3:=solve((1-KHI2(beta+dbeta,6))/(1-KHI2(beta,6))=epsilon,dbeta); 2 1/2 sol1 := -beta + (beta - 2 ln(epsilon)) , 2 1/2 -beta - (beta - 2 ln(epsilon)) / | 1/2 sol2 := -1/2 |2 beta \ 1/2 \ 2 beta | - 2 RootOf(-erf(_Z) + 1 + epsilon erf(---------) - epsilon)| 2 / 1/2 2 sol3 := > plot(subs(beta=5,n=2,[sol1[1],sol2,sol3]),epsilon=0.001..1); > series(sol1[1]/sol2,epsilon); Error, (in series/RootOf) unable to compute series > with(stats); Warning, these names have been redefined: anova, describe, fit, importdata, random, statevalf, statplots, transform [anova, describe, fit, importdata, random, statevalf, statplots, transform] > openturns-1.9/validation/src/equality_constrained_quadratic_quadratic.mws000066400000000000000000000061561307543307100274240ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 425 "restart:\nDigits:=2 0:\ndim:=4;\nassume(t>0);\nThr:=1.0;\nf:=1/2*sum(x[i]^2,i=0..dim-1):\n g:=sum((x[i]-i)^2,i=0..dim-1)-Thr;\nL:=f+lambda*g:\nvars:=seq(x[i],i=0 ..dim-1),lambda:\nsysteme:=seq(diff(L,vars[i]),i=1..dim+1):\nsol:=solv e(\{systeme\},\{vars\}):\nfor j from 1 to 2 do\n res[j]:=subs(sol[j], [seq(vars[i],i=1..dim)]):\nod:\nif sum(res[1][i]^2,i=1..dim) < sum(res [2][i]^2,i=1..dim) then\n print([1,res[1]]);\nelse\n print([2,res[2] ]);\nfi:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$dimG\"\"%" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%$ThrG$\"#5!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG,,*$)&%\"xG6#\"\"!\"\"#\"\"\"F-*$),&&F)6#F-F-F-!\"\"F,F-F- *$),&&F)6#F,F-F,F3F,F-F-*$),&&F)6#\"\"$F-F>F3F,F-F-$\"#5F3F3" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"\"7&$\"\"!F'$\"5K:cd(3e(QFt!#?$\"51B^^ <;vZl9!#>$\"5f%osiUF;#)>#F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "expand(subs(allvalues(sol),x[5]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#&%\"xG6#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "ifac tor(3795/23);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "factor(sum(i^2,i=0 ..N));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(-%!G6#\"\"$\"\"\"-F%6#\"\" &F(-F%6#\"#6F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"'!\"\"%\"NG \"\"\",&F'F(F(F(F(,&*&\"\"#F(F'F(F(F(F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "sum(i^2,i=0..dim-1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#9" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "ss:=allvalues(sol);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#ssG6$<'/&%\"xG6#\"\"\",$**,&%#t|irGF+*$,**&F/F+ )&%\"vG6#\"\"!\"\"#F+F+*&F/F+)&F5F*F8F+F+*&F/F+)&F56#F8F8F+F+*&F/F+)&F 56#\"\"$F8F+F+#F+F8!\"\"F+F/FFF;F+,&F+F+*&F.F+F/FFFFFFFF/%'lambdaG,$*& #F+F8F+FHF+FF/&F)FC,$**F.F+F/FFFBF+FGFFFF/&F)F?,$**F.F+F/FFF>F+FGFFFF/ &F)F6,$**F.F+F/FFF4F+FGFFFF<'/FJ,$*&#F+F8F+*&,&F/F+F0F+F+F/FFF+FF/FO,$ **FjnF+F/FFFBF+,&F+F+FinFFFFFF/FS,$**FjnF+F/FFF>F+F^oFFFF/F(,$**FjnF+F /FFF;F+F^oFFFF/FW,$**FjnF+F/FFF4F+F^oFFFF" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 51 "factor(subs(ss[1],x[1]));\nfactor(subs(ss[2],x[1])) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(,&%#t|irG\"\"\"*$*&F&F',**$)& %\"vG6#\"\"!\"\"#F'F'*$)&F.6#F'F1F'F'*$)&F.6#F1F1F'F'*$)&F.6#\"\"$F1F' F'F'#F'F1!\"\"F'F4F'F)#F@F1F@" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,&% #t|irG\"\"\"*$*&F%F&,**$)&%\"vG6#\"\"!\"\"#F&F&*$)&F-6#F&F0F&F&*$)&F-6 #F0F0F&F&*$)&F-6#\"\"$F0F&F&F&#F&F0F&F&F3F&F(#!\"\"F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/equality_constrained_quadratic_quadratic.txt000066400000000000000000000063461307543307100274360ustar00rootroot00000000000000> restart: > Digits:=20: > dim:=4; > assume(t>0); > Thr:=1.0; > f:=1/2*sum(x[i]^2,i=0..dim-1): > g:=sum((x[i]-i)^2,i=0..dim-1)-Thr; > L:=f+lambda*g: > vars:=seq(x[i],i=0..dim-1),lambda: > systeme:=seq(diff(L,vars[i]),i=1..dim+1): > sol:=solve({systeme},{vars}): > for j from 1 to 2 do > res[j]:=subs(sol[j],[seq(vars[i],i=1..dim)]): > od: > if sum(res[1][i]^2,i=1..dim) < sum(res[2][i]^2,i=1..dim) then > print([1,res[1]]); > else > print([2,res[2]]); > fi: dim := 4 Thr := 1.0 2 2 2 2 g := x[0] + (x[1] - 1) + (x[2] - 2) + (x[3] - 3) - 1.0 [1, [0., 0.73273875808757561532, 1.4654775161751512306, 2.1982162742627268459]] > expand(subs(allvalues(sol),x[5])); x[5] > ifactor(3795/23); > factor(sum(i^2,i=0..N)); (3) (5) (11) N (N + 1) (2 N + 1) ------------------- 6 > sum(i^2,i=0..dim-1); 14 > > ss:=allvalues(sol); (t~ - %1) v[1] t~ - %1 ss := {x[1] = - ----------------, lambda = -1/2 -------, / t~ - %1\ t~ t~ |1 - -------| \ t~ / (t~ - %1) v[3] (t~ - %1) v[2] x[3] = - ----------------, x[2] = - ----------------, / t~ - %1\ / t~ - %1\ t~ |1 - -------| t~ |1 - -------| \ t~ / \ t~ / (t~ - %1) v[0] t~ + %1 x[0] = - ----------------}, {lambda = -1/2 -------, / t~ - %1\ t~ t~ |1 - -------| \ t~ / (t~ + %1) v[3] (t~ + %1) v[2] x[3] = - ----------------, x[2] = - ----------------, / t~ + %1\ / t~ + %1\ t~ |1 - -------| t~ |1 - -------| \ t~ / \ t~ / (t~ + %1) v[1] (t~ + %1) v[0] x[1] = - ----------------, x[0] = - ----------------} / t~ + %1\ / t~ + %1\ t~ |1 - -------| t~ |1 - -------| \ t~ / \ t~ / 2 2 2 2 1/2 %1 := (t~ v[0] + t~ v[1] + t~ v[2] + t~ v[3] ) > factor(subs(ss[1],x[1])); > factor(subs(ss[2],x[1])); 2 2 2 2 1/2 (t~ - (t~ (v[0] + v[1] + v[2] + v[3] )) ) v[1] - --------------------------------------------------- 2 2 2 2 1/2 (t~ (v[0] + v[1] + v[2] + v[3] )) 2 2 2 2 1/2 (t~ + (t~ (v[0] + v[1] + v[2] + v[3] )) ) v[1] --------------------------------------------------- 2 2 2 2 1/2 (t~ (v[0] + v[1] + v[2] + v[3] )) > openturns-1.9/validation/src/julia.mw000066400000000000000000007105261307543307100200300ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZccC1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSNmeEYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRInhGJ0YvRjJGNUZPRmduLUYsNiVRI2Z5RidGL0YyRl9vLUYsNiVRInlGJ0YvRjJGNUZPRmduLUY2Ni9RJGZvckYnLyUlYm9sZEdGMS9GM1ElYm9sZEYnLyUrZm9udHdlaWdodEdGYXBGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GLDYlUSJpRidGL0YyRmduLUY2Ni9RJWZyb21GJ0ZecEZgcEZicEY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUkjbW5HRiQ2JFEiMUYnRjlGZ24tRjY2L1EjdG9GJ0ZecEZgcEZicEY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUZbcTYkUSI0RidGOUZnbi1GNjYvUSNkb0YnRl5wRmBwRmJwRjtGPkZARkJGREZGRkhGam5GW29GT0Znbi1GLDYlUSR0bXBGJ0YvRjJGX29GXG8tRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvRlxvLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GYXJGZW9GanFGZW8tRjY2LVEiO0YnRjlGOy9GP0YxRkBGQkZERkZGSEZqbkZNRk9GZ25GZW9GX28tRltxNiRRIjJGJ0Y5RmpxRlxvRmpxRmVvLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGYHJGYnJGanBGY3JGT0ZnbkZcb0Zfb0ZncUZjckZPRmduLUY2Ni9RI29kRidGXnBGYHBGYnBGO0Y+RkBGQkZERkZGSEZqbkZbb0Y1Rk9GZ24tRiw2JVEiZ0YnRi9GMkZfby1GLDYlUSdleHBhbmRGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2KUZcb0ZqcUZcb0ZqckZlb0ZqcUZlb0Y5RjVGT0Znbi1GLDYlUSV3aXRoRidGL0YyLUZnczYkLUYjNiMtRiw2JVEmcGxvdHNGJ0YvRjJGOUY1Rk9GZ24tRiw2JVEncGxvdDNkRidGL0YyLUZnczYkLUYjNjstRiw2JVEkbG9nRicvRjBGPUY5LUZnczYkLUYjNiNGYHNGOS1GNjYtUSIsRidGOUY7RmZyRkBGQkZERkZGSEZqbi9GTlEsMC4zMzMzMzMzZW1GJ0Ziby1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTS1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGYHJGYnItRltxNiRRJDEuNUYnRjktRjY2LVEjLi5GJ0Y5RjtGPkZARkJGREZGRkhGYHJGW29GX3ZGZHVGaG9GaXVGXHZGX3ZGYnZGX3ZGZHVGZ24tRiw2JVElZ3JpZEYnRi9GMkZpdS1GZ3M2Ji1GIzYlLUZbcTYkUSQxMDFGJ0Y5RmR1Rlx3RjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGZHUtRiw2JVEpY29udG91cnNGJ0YvRjJGaXUtRmdzNiYtRiM2J0ZqcEZkdUZnckZkdUZhcUY5Rl93RmJ3RjlGY3I= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUnUExPVDNERzYpLSUlR1JJREc2JjskISM6ISIiJCIjOiEiIjskISM6ISIiJCIjOiEiIjdhcTdhcSQiMjo+KSpbPzAhR0YhIzokIjJtYClRanhyLUYhIzokIjJXSywhKlIpXHhFISM6JCIwenkpUTtOX0UhIzgkIjFqJ29lIz1HRkUhIzkkIjFfYWokNCRILUUhIzkkIjF1PWZUJCpReEQhIzkkIjJqISopejRVZF9EISM6JCIxKVsiKVIwXnlfIyEjOSQiMmoqPiEzI0hBLkQhIzokIjBDRE5fI3B5QyEjOCQiMUVwPj1BRWFDISM5JCIyWmBVLylSJCpIQyEjOiQiMiUpb3ZIUTRkUyMhIzokIjJZeiUpUWQqZSJRIyEjOiQiMkRrV2REdnZOIyEjOiQiMmBKd2JtbU9MIyEjOiQiMlcwYmNiaik0QiEjOiQiMU1BOXZeOydHIyEjOSQiMi08JlxfLWRpQSEjOiQiMVd4ZXlwMlJBISM5JCIyZUhjLypIbzpBISM6JCIxQSVwYk4mUSM+IyEjOSQiMVh0XWMwPXBAISM5JCIxLGwjZlprZzkjISM5JCIxYXduIlFLSTcjISM5JCIwelM+Iip5KzUjISM4JCIybWNPLTEpPng/ISM6JCIxKVFyLDskUWE/ISM5JCIxOS14cG9pSj8hIzkkIjJVIXBDYjYjKjM/ISM6JCIyVUBiU0ZkaSk+ISM6JCIyQ1pgcXZETyc+ISM6JCIydHQsJypROzUlPiEjOiQiMk5aIlIiPj0lPT4hIzokIjFuWHklUj5lKj0hIzkkIjJOcDY5VTJLKD0hIzokIjIjKVFebiYpbzAmPSEjOiQiMld0JFFBJSopeSM9ISM6JCIyPTciZlhSOjA9ISM6JCIyRTRxZktZQnkiISM6JCIyKGZKdClcXCVmPCEjOiQiMW9CViVSWGt0IiEjOSQiMm5TW1wqW0o4PCEjOiQiMmBjIXomeVArcCIhIzokIjF4dzMwRmZtOyEjOSQiMlc2Iz0hNGRIayIhIzokIjEqZWhONzIiPjshIzkkIjE3XjYibzxdZiIhIzkkIjJfKWZlKEdpMWQiISM6JCIyKDRbI3AzOGdhIiEjOiQiMjtgJltSMy9AOiEjOiQiMlAmZk9rXHImXCIhIzokIjJrWGBabC4rWiIhIzokIjI4PmUmM1QoUVciISM6JCIyTjxjJVFISDw5ISM6JCIyJWV3bGVvQSFSIiEjOiQiMlUhPkgnelZFTyIhIzokIjJtYStDbDlYTCIhIzokIjJRXTdaMDtlSSIhIzokIjIqKSpvJjNpTWxGIiEjOiQiMWtFTDZOblk3ISM5JCIyJSlwJSk+VWlpQCIhIzokIjJFazVIbHNgPSIhIzokIjIkKkhfc1VSVDoiISM6JCIyKD1cUlRSekE2ISM6JCIxXkk6U3BxIjQiISM5JCIxX0ojekNVOTEiISM5JCIyIz1RMzkqNEcuIiEjOiQiMlRZYyJHQypvKyIhIzokIjFRITMocEEqKlwpKiEjOiQiMXM8M2RLMiZvKiEjOiQiMWk5RFNSLCdlKiEjOiQiMSc+ISpmQS8tYyohIzokIjEkZkJBKyZbNCcqISM6JCIwL3VILFIzdCohIzkkIjFpVixedSR6IioqISM6JCIxdHIjPl5iaSwiISM5JCIyKG9kJCl6R2NYNSEjOiQiMkpRN2NdOCl5NSEjOiQiMjotSXAhSD06NiEjOiQiMjNsKGZ0RShSOiIhIzokIjFadG9oaGklPiIhIzkkIjIvZiQqb2M8bkIiISM6JCIxOSMqPl5uIyp6NyEjOSQiMnVkZ0ApNCxDOCEjOiQiMlYjXDI+LnlvOCEjOiQiMkJSOXhFelNUIiEjOiQiMnRcY0FydShmOSEjOiQiMmQzJ1wpKilbZF0iISM6JCIyWFEoUjdmKj1iIiEjOiQiMk5IXiNcLTcpZiIhIzokIjIyPSpcOGtMVzshIzokIjJvWmEjZSlvL3AiISM6JCIxJWVeQik9WE88ISM5JCIyRGphSEtIQXkiISM6JCIxSyg+dCxheCM9ISM5JCIyN20ycDIoKUgoPSEjOiQiMnMmXFZVcSp5Ij4hIzokIjFEckgpKSplQyc+ISM5JCIxYFBiS09sMT8hIzk3YXEkIjJNQm85RCIpNHEjISM6JCIxNzUkcDBpYG4jISM5JCIyPE5HKFw9IilcRSEjOiQiMiMpKlsuKlJOVmkjISM6JCIxWF9FI0dQKilmIyEjOSQiMjxEbiFlPWl0RCEjOiQiMl9tITRSS1JbRCEjOiQiMiR6Jylwa19EQkQhIzokIjIoWycpeXQ5QClcIyEjOiQiMjpjIyl5MmxLWiMhIzokIjFpIVFZJCo9JVtDISM5JCIxOm8iPl92T1UjISM5JCIyUCxIRCJwLipSIyEjOiQiMk1KXihcWl11QiEjOiQiMUszcEItM11CISM5JCIyLyU0YVtTd0RCISM6JCIyTCxZMldjOkkjISM6JCIwNmohKTRkdUYjISM4JCIxdSZ6JXpeWWBBISM5JCIyQW08Zkd6JkhBISM6JCIxMDlqVHV6MEEhIzkkIjF2djx3cTYjPSMhIzkkIjEmW0FvK04mZUAhIzkkIjEtJkg3VVpdOCMhIzkkIjJkcmUtJylcOzYjISM6JCIyTnIqcCtzTCkzIyEjOiQiMi1GXXhqLl4xIyEjOiQiMlUkcC9uRSU+LyMhIzokIjEjb1lnMVopPT8hIzkkIjJLWV1YKCkzZSo+ISM6JCIyMCF5OXUkPkcoPiEjOiQiMjt0V2oxcClcPiEjOiQiMlpROCJcdyVwIz4hIzokIjIjSCVvOipSLy8+ISM6JCIybCE+VjFoOSIpPSEjOiQiMUI/Kik+NkNlPSEjOSQiMS5DUlFfSk49ISM5JCIxZmIhPXJgQiI9ISM5JCIxIz1bQnpTJCp5IiEjOSQiMmJaKFspb2ZpdyIhIzokIjJ1aHBIXiM0VjwhIzokIjIxdHhSQT8pPjwhIzokIjI5SS8kZURVJ3AiISM6JCIyQUI3YCZ6KEduIiEjOiQiMSgpZVBxTTtcOyEjOSQiMjJWamtuYV9pIiEjOiQiMSZ5I2VfYjcsOyEjOSQiMk86RCFlJFtuZCIhIzokIjImXF16IlwkNF86ISM6JCIxKHBmdUxIcl8iISM5JCIyWHA4XjRBPV0iISM6JCIyR28tWWdOaFoiISM6JCIxaiRvIm82Ll05ISM5JCIxXjdAKFFuTVUiISM5JCIxInpeJVErUydSIiEjOSQiMjciZSI+LiN5bzghIzokIjJAUDc1X2owTSIhIzokIjI3cmcuRyNwNjghIzokIjJ0IVFNVFg2I0ciISM6JCIyam5UdmZ3PEQiISM6JCIyVFprTXBGMUEiISM6JCIyRl1qNC9EJyk9IiEjOiQiMlkjPShvTVVkOiIhIzokIjJ4d15MNCUpPjciISM6JCIyJT5EJ3o1NHUzIiEjOiQiMWpqRCdwb0AwIiEjOSQiMi4nKT1ERG1sLCIhIzokIjFKY1hwaVc2KSohIzokIjFfcSIzeSYpelkqISM6JCIwRVh4WjQpWyIqISM5JCIxPCcpKip6QjpzKSkhIzokIjE4VFhAYiEpZScpISM6JCIxOShSM0sqPUYmKSEjOiQiMS8kUXAmWyV6WykhIzokIjAjUi1JWyxVJikhIzkkIjFHN09aQTEkbykhIzokIjAjNDpnUCo0ISopISM5JCIxUXReTl0vJT0qISM6JCIwX0Ehb1YiKT4mKiEjOSQiMSR5WCJ6UkknKikqISM6JCIxJUgmKSkpNCwuLiIhIzkkIjInR3JqRCVmSjIiISM6JCIyJlEicCVHTWY8NiEjOiQiMiNcYUIqKW88ajYhIzokIjI0Jj4pSCR5aDQ3ISM6JCIyY0Z4YyEzcmM3ISM6JCIycjlpeCkzSS84ISM6JCIyRF9WO09nQU4iISM6JCIySiNIa0pkWis5ISM6JCIyJUdsJUcjPiUpWzkhIzokIjJqVSI0YTJFKFwiISM6JCIyYlc8QVtUY2EiISM6JCIyZDlacCg+IVJmIiEjOiQiMlZaJ1FIKHA+ayIhIzokIjFQXG5lQnkqbyIhIzkkIjEtaElsdkdQPCEjOSQiMmEtTFJpVVd5IiEjOiQiMnl2RiRmTkBKPSEjOiQiMjMpPiJwOXV2KD0hIzokIjJadGNHJltdQj4hIzokIjJjSGhleiIqKm8+ISM6N2FxJCIyOyU9Jz1BJCpRbiMhIzokIjJtTUljTFB6ayMhIzokIjFEcSo+Xl4/aSMhIzkkIjFSQiIpKXlTaWYjISM5JCIyeTAjNDArXnFEISM6JCIxRm9zclAnW2EjISM5JCIyTW4+PlcxJD5EISM6JCIxJT1VOjNVUVwjISM5JCIxMCopZlJXWm9DISM5JCIxPkwpKj1wP1ZDISM5JCIyJVt1cFpELz1DISM6JCIybXAhcF1SKUhSIyEjOiQiMkFBX0NLTCFvQiEjOiQiMW5gWStDPlZCISM5JCIyTzAuJ1JDWT1CISM6JCIyVlo1dj1XUUgjISM6JCIyTXUnKTQneUxwQSEjOiQiMmtnVEw3VlxDIyEjOiQiMihweW1pIWYxQSMhIzokIjI5NU80PCVbJz4jISM6JCIyWU8neUJqVHNAISM6JCIyVjdqM3dfJVtAISM6JCIyTHI5bDEhZkNAISM6JCIwMmUxOkMzNSMhIzgkIjJuI0hmSC06eD8hIzokIjJGbU9sIUdjYD8hIzokIjJ5IzNrXmMwST8hIzokIjFPOUMieUBtKyMhIzkkIjJ3I2UzT01EJCk+ISM6JCIyWSNwRWU/JSpmPiEjOiQiMiUqZnlsRXltJD4hIzokIjF2MikqSD1YOD4hIzkkIjIlW28jKVE7RCEqPSEjOiQiMk4hZlh0YzFuPSEjOiQiMnUqW29wNClRJT0hIzokIjBXWzFlJG8/PSEjOCQiMTlIS00mZXV6IiEjOSQiMG5NZnkqPXU8ISM4JCIxPGdHaywnM3YiISM5JCIyTzFOM0pedXMiISM6JCIyQ11MLGhWUnEiISM6JCIyc2hkKjRoSiFvIiEjOiQiMXgoZiJIa2FjOyEjOSQiMiMqXD00bDVFaiIhIzokIjJvIlJuKT4kWzM7ISM6JCIyelEuO3BPVGUiISM6JCIxMFktdzxhZjohIzkkIjEvWGlHcG1NOiEjOSQiMlgtSXBBeSU0OiEjOiQiMnRNOz8zUlJbIiEjOiQiMjZxIj5HKjQhZTkhIzokIjJ2ISoqW2t5a0o5ISM6JCIyQm1zTkMxW1MiISM6JCIxcyJ6Yz9NdVAiISM5JCIyNjQrJ2ZoWlw4ISM6JCIyZVBUNkFyM0siISM6JCIyclF3YWpfOkgiISM6JCIyMEAkM1JzV2g3ISM6JCIyNmNnLjJ2L0IiISM6JCIyOl9IXkxcJik+IiEjOiQiMiVITUE1cmRsNiEjOiQiMl88J0cjXGg5OCIhIzokIjJmSDxTXDFoNCIhIzokIjIwMGZSM0YlZjUhIzokIjIqPmo3ZihvOC0iISM6JCIxRThPdGNXPikqISM6JCIxbm1TZkYuOCUqISM6JCIxTjlPaixdKSoqKSEjOiQiMXZjXG0lUVdlKSEjOiQiMTw/ZkxicCc9KSEjOiQiMk41LCJwYGpJeSEjOyQiMXhgIWUpSFJcdiEjOiQiMU0yKT4jb0F1dCEjOiQiMS5DTSVmTjZLKCEjOiQiMUAmeltiLHFRKCEjOiQiMSZSektcYCJldiEjOiQiMjo/W0UtOyk9eSEjOyQiMVRZdzEvKUc6KSEjOiQiMER6cS5WTmEpISM5JCIxTl4uTlpqdSopISM6JCIxJEc8RCgqKXBLJSohIzokIjFAOCdlOz0hMyoqISM6JCIyY3N5I1tNVlI1ISM6JCIxdSpSJyl5I3opMyIhIzkkIjJVaC1DJVxtUTYhIzokIjFYJClwaXgiKik9IiEjOSQiMllcOXZCYSVSNyEjOiQiMVtUKnolbz0hSCIhIzkkIjJbYSU9RHEtVDghIzokIjJXS1xEYCQpPVIiISM6JCIyXCFbR1RebVU5ISM6JCIyXihHWG5YRyRcIiEjOiQiMkIkNHQnKT5tVjohIzokIjInZjEhcFRGUGYiISM6JCIyJ3A/Nmk9VVY7ISM6JCIyYHRTKD11cCNwIiEjOiQiMV42MVptXlQ8ISM5JCIyYD9HUl1eKSp5IiEjOiQiMXBQJkgyI29QPSEjOSQiMihmZndlXypcKT0hIzokIjJ1PjgpXE55Sj4hIzo3YXEkIjIzZykqUUpTbmsjISM6JCIxeWBUQkRXP0UhIzkkIjJbdSFwU2dAJWYjISM6JCIyaTQ3Nj9tIW9EISM6JCIydDg9WTgpKj5hIyEjOiQiMmNyT1J0O2deIyEjOiQiMnlvKlxBbTchXCMhIzokIjIwTWBBN0tWWSMhIzokIjIvRCNlQHNqUUMhIzokIjJZJ3liVmIvOEMhIzokIjImWy1yOS5jKFEjISM6JCIyTk8tWEwlPWlCISM6JCIxVzZtWCo+cEwjISM5JCIybSoqKVswIXA8SiMhIzokIjFNUkNlR3QnRyMhIzkkIjFDdGozQiI9RSMhIzkkIjItUmNrZjJxQiMhIzokIjJDXHZBUD1CQCMhIzokIjJOQnhUblZ4PSMhIzokIjE6SU8wPkdqQCEjOSQiMkI4JVw3MyQqUUAhIzokIjJMJipwWFkobzlAISM6JCIxOis3SyNbMDQjISM5JCIxT0NZbSgzbDEjISM5JCIyJ2U9d3lSY1U/ISM6JCIyQ2owJz0hMyg9PyEjOiQiMmwpZiE9RE1cKj4hIzokIjI8I283UF9Ccj4hIzokIjItNEM7cS13JT4hIzokIjIpSGRGOXYtQz4hIzokIjFYdGJkJypcKz4hIzkkIjIjWyYqZSc+M3EoPSEjOiQiMScpeVZYN2FgPSEjOSQiMVxBM0lmM0k9ISM5JCIySyNcW1okR20hPSEjOiQiMmJBcStfYEp5IiEjOiQiMmwkKnlaTVgnZjwhIzokIjJsQHNjYCczTzwhIzokIjJFX0UpZSZlQ3IiISM6JCIyWXN3emJUKClvIiEjOiQiMih6OC1wVSJcbSIhIzokIjFKRTRAUiY0ayIhIzkkIjJaaSw5N09vaCIhIzokIjImUVFbP1pgI2YiISM6JCIxRSJvUGxAIW86ISM5JCIyb0NhWHZtS2EiISM6JCIyb0V2Q2BQIz06ISM6JCIyKG9bSTUqKSpHXCIhIzokIjJVTilcNUhAbjkhIzokIjJPI1wyIkdRNlciISM6JCIyJG95SFsrajk5ISM6JCIydCRILiIpKlF3USIhIzokIjIkUUpqWzQ2ZzghIzokIjJpM18yOicpPkwiISM6JCIyUlhQUT4pPi44ISM6JCIxZXd4JilIbnQ3ISM5JCIxO3JoPXVLVjchIzkkIjFsI29CInkxNzchIzkkIjJ6PiYqcDUpeXo2ISM6JCIyZUN3eCN5T1k2ISM6JCIyRTgrIlIqcDs2IiEjOiQiMlpvKXosKlFiMiIhIzokIjIkUjtvJW8qelA1ISM6JCIxdkV2VFVmIykqKiEjOiQiMSkpMyNIdWFyYyohIzokIjFzNjlLMHlIIiohIzokIjEkKVsxMk9EcCcpISM6JCIwKVIoWyE+SCc9KSEjOSQiMSM9I3BLImVpbyghIzokIjFseVpQXlglPSghIzokIjFeeDI5Wjw5biEjOiQiMUJbVVhoLUpqISM6JCIxLT0oKmZPYCY0JyEjOiQiMUNfSnIiek8uJyEjOiQiMVJOPSFINm03JyEjOiQiMS44USFlPVBNJyEjOiQiMWxGMCNlVEltJyEjOiQiMShcLXpALV8xKCEjOiQiMS5oKW81TnRfKCEjOiQiMVteWTJtbEUhKSEjOiQiMThjcl9fc1gmKSEjOiQiMUFFT05zJ1EyKiEjOiQiMU4xJHk7N2RnKiEjOiQiMmNlclYpKTNSLCIhIzokIjJPYE9VaU90MSIhIzokIjJ6a1BJQlUzNyIhIzokIjJ0NyUqby42VzwiISM6JCIyVkYrP0AwIUc3ISM6JCIyPFZwOic+YyJHIiEjOiQiMiJlWCJccitdTCIhIzokIjJLZCZvKSlIQilRIiEjOiQiMipvT3VOODxUOSEjOiQiMUtBJ2YlZXQkXCIhIzkkIjJcdW0kZXomZWEiISM6JCIxc04pKjQ/WyhmIiEjOSQiMm9dVT08bCZbOyEjOiQiMnVfJ3knUnchKnAiISM6JCIybTltNShbKipbPCEjOiQiMUJKPzQkMyQpeiIhIzkkIjJBI1FfKzgsWj0hIzokIjF4S3I9UTUmKj0hIzk3YXEkIjEjKW8mUWVAJj5FISM5JCIyQkZEV1B3R2YjISM6JCIyYyk+LCMqUUltRCEjOiQiMTw1ITMhKTQpUkQhIzkkIjJQIj5YYCYqUjhEISM6JCIyO1ZebU55cVsjISM6JCIyKD5qR082JjNZIyEjOiQiMjk0KlstRHNNQyEjOiQiMjwtNFtyJ3AzQyEjOiQiMiNRUXZad3gjUSMhIzokIjJfQkxwdm9wTiMhIzokIjJ4UjhnL3Q3TCMhIzokIjI5TWlZLiRwMEIhIzokIjI5a0h3c0ktRyMhIzokIjApPTEmZSgpW0QjISM4JCIybjQzVFxrJ0hBISM6JCIyNzk+PXVoWD8jISM6JCIyOHUjSCopKnkmekAhIzokIjA5a3BDOlo6IyEjOCQiMSg0IyozJilvKkhAISM5JCIyMGlWKVJ1TDBAISM6JCIyKHAlUkgkeiIzMyMhIzokIjJZUChlMmxTYz8hIzokIjEyPFN4Jik0Sz8hIzkkIjIzMyh5cCgpKXkrIyEjOiQiMm1UW0chNHgkKT4hIzokIjIyNCFHaHp0Zj4hIzokIjEob3ozMiN5Tj4hIzkkIjFIW0tyVyo9Ij4hIzkkIjFUMyVvW2whKSk9ISM5JCIxNCVvVlwlR2s9ISM5JCIxVyE0KSkpKVIwJT0hIzkkIjEkb3dbLz5vIj0hIzkkIjI6UjVdRjNKeiIhIzokIjFqKCpwI3kjUnA8ISM5JCIyWHRNL2hjY3UiISM6JCIyMkMzOGUjKT1zIiEjOiQiMmQjZTFMQTApcCIhIzokIjImR0Q1VmQ5dTshIzokIjJbKVJhVT05XTshIzokIjIkKlsucnI8Z2kiISM6JCIyZDtrPSopWzxnIiEjOiQiMWRdWic0NHRkIiEjOSQiMiY+XVcxLG5fOiEjOiQiMidlREJiOiF5XyIhIzokIjJbWzkxcnFFXSIhIzokIjEsYEkyQUN4OSEjOSQiMnVrLWZzeDlYIiEjOiQiMi1GSGVnTmBVIiEjOiQiMTQ3J29QcSgpUiIhIzkkIjJaVFgpKj1LPFAiISM6JCIxTUMrQWg7VzghIzkkIjI8SVtgSzZnSiIhIzokIjJ4Xml3KCoqPihHIiEjOiQiMjM2dUspZmxkNyEjOiQiMktfcVlOJEhGNyEjOiQiMnVcJz4lPTlnPiIhIzokIjIqR29KJzMxUDsiISM6JCIyYT4zTyYqUS04IiEjOiQiMkZ0Sk8jM1kmNCIhIzokIjJyLVRNZyM+ZjUhIzokIjIzSj04T0A3LSIhIzokIjBaJnlmIz5IIikqISM5JCIxVD00ISl5JzRSKiEjOiQiMSRHTyFcQGxVKikhIzokIjEnM11lNmBOWSkhIzokIjFhOW8zM2hbeiEjOiQiMWxJPlAqNEZSKCEjOiQiMGAsTGtoR3onISM5JCIyWFA8LScpSF06JyEjOyQiMXM1dlxTXDdiISM6JCIxI2VvVSpHQGVcISM6JCIybFReX01cUWolISM7JCIxW0A8NVFMIWYlISM6JCIxYydHInA/VldaISM6JCIxeDgydS5MRl0hIzokIjFaMCJHIyl6TVUmISM6JCIxVyhcLGpkdiJmISM6JCIxZnRcJFx1XFonISM6JCIxNCFcIm8uOWdxISM6JCIxYmpKODxkXXchIzokIjFMeG1cKUhsQikhIzokIjFFNCY+Pyd6OikpISM6JCIxMSlIKWUrVSpRKiEjOiQiMTRYenc4SGYqKiEjOiQiMmBoU205KnBfNSEjOiQiMWRzXnAhUSQ0NiEjOSQiMjNNcSJ6eiZlOyIhIzokIjJKM24zaDhBQSIhIzokIjEiM2tRaUMkeTchIzkkIjAwa240JzRNOCEjOCQiMHMpPicqUVYqUSIhIzgkIjIsZjVzSGFVVyIhIzokIjIuVE1qcylbKVwiISM6JCIybXRTVS0mM186ISM6JCIyJEg2N3JsKzA7ISM6JCIyJG84azsuQmQ7ISM6JCIxVWJJOld1MzwhIzkkIjJ5QV1PKWVhZjwhIzokIjFkWEAkXFEnND0hIzkkIjJBRkxXKTQuZj0hIzo3YXEkIjJzbyllV2ZCI2YjISM6JCIyMTFDKW91QmxEISM6JCIyUEElKm9KOCRRRCEjOiQiMW5KazomcDleIyEjOSQiMSpmU1woPXIlWyMhIzkkIjFmOkldZi9lQyEjOSQiMjg7a10reDlWIyEjOiQiMmFFPEMoKjRdUyMhIzokIjJPKj1kPCVcJ3lCISM6JCIxNE9PKyYqUl9CISM5JCIxdXRiUVJFRUIhIzkkIjBOLEAoZkMrQiEjOCQiMjgkPmFHJFtWRiMhIzokIjJpYnAoKj10JltBISM6JCIyKD5ZQGdAI0hBIyEjOiQiMi5YY2xCJ1IoPiMhIzokIjImM3glKnlkKj48IyEjOiQiMnlyJHAkWz9uOSMhIzokIjJWV2pzTnA6NyMhIzokIjIoUSVbOXBTbDQjISM6JCIxOy1WUj9qcj8hIzkkIjIuSW5DPlNvLyMhIzokIjIjMz8obzpoQC0jISM6JCIxJClcIjQ4IWYoKj4hIzkkIjJldnM3W0BKKD4hIzokIjJ1Zj4nPShbKFs+ISM6JCIyRDZlPlprVyM+ISM6JCIycyI0R2gvRSs+ISM6JCIybiZbOm91N3c9ISM6JCIydTY6UUliPyY9ISM6JCIyLTBXVnhLIUc9ISM6JCIyL1kjW1V3Ly89ISM6JCIxPEhkJmUnMyF5IiEjOSQiMlozZSFcXjhjPCEjOiQiMmxfV1tweEB0IiEjOiQiMTxlb1Z0PjM8ISM5JCIyUVNIMCJmPCVvIiEjOiQiMXkrXUpRNGc7ISM5JCIyQUxbMzNJZmoiISM6JCIyJClmaGQyaTtoIiEjOiQiMixfL2tjbHNlIiEjOiQiMjByK3pdOUZjIiEjOiQiMXBlOzU0KXpgIiEjOSQiMS9WXmdZLjg6ISM5JCIyXzBRRkpWeVsiISM6JCIyM1FKWyQ9UGk5ISM6JCIyO0wzY0kjZU85ISM6JCIxIypbK1tOVjU5ISM5JCIyTmgkbyRvISlRUSIhIzokIjEjPi8lKmV1b04iISM5JCIyN2Y2LEJoJEg4ISM6JCIyM1QhR08zRyw4ISM6JCIyI1trJUgpb2NzNyEjOiQiMik0LylRIls5VjchIzokIjJVbWRaVklIQCIhIzokIjJQJ2ZHcnkjPT0iISM6JCIyOU5veiVwc1w2ISM6JCIyR00pNCV5Klw7NiEjOiQiMj5hcGJKJyo+MyIhIzokIjBIXHlKUWcvIiEjOCQiMm56YDBJNiUzNSEjOiQiMUUueFRLYClvKiEjOiQiMHAjb1VHUnEjKiEjOSQiMUtCNHdTZUQpKSEjOiQiMDRuQ2Y5KVskKSEjOSQiMkQiKXBpeEJKJHkhIzskIjAnM1EjPXQicHMhIzkkIjEjPm5LbW9VaychIzokIjFEJSpHZCIpUlRmISM6JCIxImU5JTRKZ1NeISM6JCIxYUsqSE45bUIlISM6JCIxeT9bI3AuIlFMISM6JCIyLmF5JltNY2VHISM7JCIybCxAYFFGImZIISM7JCIxRFl6Jkc6WUMkISM6JCIyTSkpZmI7IypmZiQhIzskIjE5NnZTTl4iMyUhIzokIjEpUnE3QUJvcSUhIzokIjFIIVFsP0d2UiYhIzokIjF0KlJxO3MwNCchIzokIjBKMHVaJDRobiEjOSQiMGw4Kj1UUDF1ISM5JCIxdnEnPUdHOy4pISM6JCIwXyV5ISpIVlYnKSEjOSQiMUxJQ3pzRFojKiEjOiQiMEM1JD5NdVkpKiEjOSQiMjByYylHV1BXNSEjOiQiMnN0JFtaI3BRNSIhIzokIjJ3cEtaZzJKOyIhIzokIjIpZSNHNVApKT5BIiEjOiQiMid6ZHRdWlIhRyIhIzokIjFfYlR3a0BROCEjOSQiMjdQPlBeaGBSIiEjOiQiMThmNFctd145ISM5JCIyJFFmamddTzI6ISM6JCIyRF9Nd2paQGMiISM6JCIyI2UqKT1gYDQ7OyEjOiQiMjxKTWtxMiNwOyEjOiQiMm0mKkhjOCRcQDwhIzokIjBpLDpRbUh4IiEjOCQiMmA1JUcra2tCPSEjOjdhcSQiMllTdFg7IylbYyMhIzokIjItcGkkNFVfUEQhIzokIjEkXGJcTlUtXiMhIzkkIjEybmJGSS8kWyMhIzkkIjB5dDtWS2ZYIyEjOCQiMlg5QCY0bCIqR0MhIzokIjI8Iik0KioqMystQyEjOiQiMjtxaHAqMz52QiEjOiQiMTpGKiozOVxbQiEjOSQiMUdGIXoicCE+SyMhIzkkIjEqeSRSUjlXJkgjISM5JCIydlo0VlspNHBBISM6JCIyVSEpWzgtIilHQyMhIzokIjIoenhOVDl6O0EhIzokIjJsM1VMX0ozPiMhIzokIjAnb0YtQytsQCEjOCQiMkRqOyhRWElSQCEjOiQiMlZmSyxwUFA2IyEjOiQiMjJSR1EpM0kpMyMhIzokIjJYaTc3UiMqSDEjISM6JCIyMy5SSnE0eS4jISM6JCIxQGwnZl1cRiwjISM5JCIxJjRWemwyeSk+ISM5JCIyV1ciW2wiekgnPiEjOiQiMkFXcSllImUjUT4hIzokIjJCOGJwJ3lqOD4hIzokIjI6bTsuZjUiKik9ISM6JCIyQiMqKltzd21rPSEjOiQiMSxrd28lKkhTPSEjOSQiMmNgUEBKJipmIj0hIzokIjImSE0kZlpWPHoiISM6JCIyRXEmcEs2YG48ISM6JCIyYV8keTNWTVY8ISM6JCIxJ3lSVCR5Oz48ISM5JCIxMjJgJ0cmKVxwIiEjOSQiMjNZMiVIKnkybiIhIzokIjJsRzdCa0hsayIhIzokIjFFTFhVb0BBOyEjOSQiMi1uKm8mUj15ZiIhIzokIjJyVidvOTBKdDohIzokIjJZRCw5a24nWzohIzokIjFAX0s1QidRXyIhIzkkIjIjUkIqeilcJykpXCIhIzokIjEqZlxKKVFrdDkhIzkkIjEtc2U/WjtbOSEjOSQiMSczJSkpcC9SQTkhIzkkIjJbczkiPTVHJ1IiISM6JCIyLGpIRngjenA4ISM6JCIyQVhQcjx5R00iISM6JCIyYkNjbTYmWzo4ISM6JCIySlclKmY9Y3ZHIiEjOiQiMSMpb2QheUYhZjchIzkkIjIuKHkiPScqRylINyEjOiQiMUtLSUgrKSkqPiIhIzkkIjIlb3ZQMzI0cDYhIzokIjEqRyEzRXlOUDYhIzkkIjIzJ2VyJkhpWDUiISM6JCIyJlxJdF1eY3E1ISM6JCIyI0hZXVhBP041ISM6JCIwQmVgWHFGKSoqISM5JCIwUV95NjFiZiohIzkkIjFHZEMjXHRzPSohIzokIjEiMztFZFRWdikhIzokIjEjKUhpPSMqKT1IKSEjOiQiMjBwP2JQNU56KCEjOyQiMUtxOzouU11zISM6JCIxMiF6WCUpUSpcbSEjOiQiMSpleWxfU0koZiEjOiQiMUZJdExXcyk9JiEjOiQiMWE9NlA+alRVISM6JCIxOlVFXkYmKj5JISM6JCIxV2RJZjQ2NTghIzokIjFZLTppXENpSyEjOyQiMWIyRk9iN1Q3ISM6JCIxMSUqekA/I2ZxIiEjOiQiMTt2bSVvPj8sIyEjOiQiMkZlWVgua0llIyEjOyQiMVxQclYrNE9NISM6JCIxOidwV3k4XUslISM6JCIxOWRRMWAmcDkmISM6JCIxMDs/WDgmeiplISM6JCIxUk92KHlwamYnISM6JCIxYllOaEhvZ3MhIzokIjByTmZCLl4heiEjOSQiMVVXUFhZRFImKSEjOiQiMXYrb044dW8iKiEjOiQiMVglMz5LL2d6KiEjOiQiMidlIUdtJypHQC8iISM6JCIyT0wqKTQkcE4vNiEjOiQiMk5cLi4qeTdtNiEjOiQiMmtSKGUwOEdGNyEjOiQiMik9bWAvJ3p3RyIhIzokIjJ3XiVIbSg9c00iISM6JCIycyJwYjQqR2VTIiEjOiQiMmBvKz4mKnBNWSIhIzokIjItZCVRdGI3PzohIzokIjJ2ai5oQSh6djohIzokIjBybGsmKilcSTshIzgkIjJGTUMpZktEJW8iISM6JCIyJT0zJT4jejNQPCEjOiQiMmx2YHlwTCEqeSIhIzo3YXEkIjJfJUgwbylldWAjISM6JCIyOilmISk9W3Q0RCEjOiQiMiNSQTNIKSkzI1sjISM6JCIyYURgVXdGWFgjISM6JCIyZEs5VEVlcVUjISM6JCIyJkdsdSlwJ28qUiMhIzokIjI9MnhQNz5DUCMhIzokIjI7YE1hQmhfTSMhIzokIjJzYi5lSz0jPUIhIzokIjImKkd6J1FfSCJIIyEjOiQiMUZTU0VqXGtBISM5JCIxKSlwLjNhI3lCIyEjOSQiMmNOaSJIZEc2QSEjOiQiMWs9ZUIqels9IyEjOSQiMjhIbnEoKjQnZUAhIzokIjI7XW5LPnhDOCMhIzokIjFhbnhoQFsxQCEjOSQiMXkieiNHWmkhMyMhIzkkIjEmPSNmbVIhXDAjISM5JCIwKkhNXyI9JEg/ISM4JCIyJG82JHp0a1ErIyEjOiQiMjtzZiRHLmF5PiEjOiQiMiQ+L1lkMU1gPiEjOiQiMkdLKSpSY2cjRz4hIzokIjInW2o2blJILj4hIzokIjFVS2RTUVZ5PSEjOSQiMil5Y0ImPXNPJj0hIzokIjI6NC8kKioqKioqRz0hIzokIjJgW3hkQzJXIT0hIzokIjIyaSlvO0cpKXo8ISM6JCIydCEqZk9cOWF2IiEjOiQiMiMpUUxWISopKTR0IiEjOiQiMjJrMFVaImYxPCEjOiQiMiZbKlJMUDFBbyIhIzokIjEjKkhLZGsieWwiISM5JCIyOlpxOz8uTWoiISM6JCIyN0FhJ0dtJSozOyEjOiQiMlFhNV9BRFdlIiEjOiQiMiMqeiM9XWUiKWY6ISM6JCIxTWVqR080TjohIzkkIjI9WlAuJD1CNTohIzokIjJoajQoRzw/JlsiISM6JCIyLVR4YlZzKmY5ISM6JCIyYVhYZXE1WFYiISM6JCIyTyd6dS8yeTM5ISM6JCIyWilwWUdQdSNRIiEjOiQiMWVvZG15TmM4ISM5JCIyI1JKeSJmeCZIOCEjOiQiMmsxWSZlS04tOCEjOiQiMVs4MihbSVlGIiEjOSQiMmFSQEJTXGpDIiEjOiQiMidmQVUpb1Z1QCIhIzokIjImZTkuMSVSeT0iISM6JCIxUVFDLU5YZDYhIzkkIjJGWi1wIj4+RTYhIzokIjJuZ1I8OlpSNCIhIzokIjFVWjk4XmZnNSEjOSQiMl5kN1wmNCpmLSIhIzokIjE9dig0O04nKiopKiEjOiQiMSdSdiUpUnhJXyohIzokIjFLND9jNnVGIiohIzokIjBXRGkvTzByKSEjOSQiMWpSIik9W2JuIykhIzokIjIwZUhDUE9QeighIzskIjFzP20+P0wjRyghIzokIjE2WHFNdSxDbiEjOiQiMSdvPUlJQGA1JyEjOiQiMFlBbCdcaDBhISM5JCIxKXlDXyFScCFmJSEjOiQiMmolKlJ6OFxvZiQhIzskIjI5YyhlISplOCJHIyEjOyQiMm4hM0UsM1ZXPyEjPCQhMlpMKFI1YmUpSCIhIzskIjJVSW11KnkiZk8iISM8JCIyZGh4JlxsZ1JNISM8JCIxaF5RdTYhPWknISM8JCIxVV1bOGJdLXchIzskIjJCRidHO2BYcUAhIzskIjJtVGUiMyU+S0wkISM7JCIxKFxVaSlcYndVISM6JCIxNHgiM01gcTMmISM6JCIxY2wiKilIKG8+ZSEjOiQiMWh4VUMiXCkzbCEjOiQiMSkqKVFQUWxqPCghIzokIjFVeCE0RCdRTnkhIzokIjFPMXpjJilmI1wpISM6JCIxKVE5SDxOKzoqISM6JCIwMnJyTDVvISkqISM5JCIyS20hPUFLMVk1ISM6JCIyZVtOKlIjKikzNiIhIzokIjIvRjR5JClHXDwiISM6JCIwbk5wbzIhUTchIzgkIjEyZlhWKywrOCEjOSQiMiplcE5JMSgzTyIhIzokIjJsNiIqMz9qMFUiISM6JCIyKXpTMlomKjN6OSEjOiQiMj0zeTtTcWtgIiEjOiQiMmFFMD5cUUZmIiEjOiQiMiUqSEo8XUx6ayIhIzokIjJBcDtPYik0LTwhIzokIjIwN1grJHlGYjwhIzo3YXEkIjI6JkhUT1gnKjREISM6JCIxMS1PUXQnPVsjISM5JCIyRmBYMk1dUVgjISM6JCIxKT1DOCozI2ZVIyEjOSQiMiMpXCFRNGgzKVIjISM6JCIyJ1Ijb3ckR05xQiEjOiQiMnlNVk9mRkZNIyEjOiQiMmNWYC9fO19KIyEjOiQiMiRHOztRYCN5RyMhIzokIjBgIW8mSGYwRSMhIzgkIjIkb1QoUTdCTUIjISM6JCIyc3NdLSo0VTFBISM6JCIyaVs7Y1hjJnpAISM6JCIyO1EjKkhWS0c6IyEjOiQiMSJbNSFcNkRFQCEjOSQiMigpKTMiejU5KSo0IyEjOiQiMXpNOmU/X3Q/ISM5JCIxL3VhaFxQWj8hIzkkIjFuIipvaz5QQD8hIzkkIjJPMSNSczheJio+ISM6JCIyTSc0cEExenA+ISM6JCIxKkdASEUxVSU+ISM5JCIxTlBJRVJ2PT4hIzkkIjJpaz4lMyRHTSo9ISM6JCIyT3pQSDlCI289ISM6JCIyJypmXmY8SkolPSEjOiQiMk0nXElRVDk9PSEjOiQiMUs2SzpGRCR6IiEjOSQiMkQlcFI4bFdvPCEjOiQiMl8mbyhILTlQdSIhIzokIjIpKlJvdWRVIT48ISM6JCIyJClcI3AyJD1XcCIhIzokIjEsclkiNEUpcDshIzkkIjItXykpeVxcX2siISM6JCIyLkYqeUQybj87ISM6JCIybm8sZGBxZ2YiISM6JCIyMXJJVzxHOWQiISM6JCIyV2tDNUhAbmEiISM6JCIyXHA7RCVlIz5fIiEjOiQiMiMqcHlzKWYsKFwiISM6JCIyQzRsSidSJz5aIiEjOiQiMik+KjNvJSpSblciISM6JCIybE1NJSopPUpAOSEjOiQiMj4jR0xCYGsmUiIhIzokIjJMRWU7OC4ocDghIzokIjJpbWBCRlhNTSIhIzokIjJrUT5aV0dvSiIhIzokIjIoWyg+VW8wKSpHIiEjOiQiMkJHJVFuZUtpNyEjOiQiMm5WJ3kuSkxNNyEjOiQiMiQ0aGomKWZ3MDchIzokIjJ6PWpvbGNsPCIhIzokIjJNeWE8bEhtOSIhIzokIjFMcSNvVitmNiIhIzkkIjJpPDhsY3RVMyIhIzokIjI4byssTFM7MCIhIzokIjJuPyIqKT1kKHksIiEjOiQiMHBVS3FXJEcpKiEjOSQiMSgqWy5mJGVNWSohIzokIjEqKWYiKilbbD8zKiEjOiQiMTg7TGY+ciJvKSEjOiQiMSQ0KmZRdlFmIykhIzokIjEkNFYlR0pMNnkhIzokIjFOIip5JVFkRkwoISM6JCIxTVd5Iip6UzxvISM6JCIyJjM3JWU+LnBEJyEjOyQiMTpnJDNdZidSYyEjOiQiMWsseCIpRzlcXCEjOiQiMWAvPTY+NmhUISM6JCIyMkZgJilSXC9DJCEjOyQiMXMtUDIoXCFbQCEjOiQiMSoqSCpwXSZRXiUqISM7JCIxPjNAQCopeil6IiEjOyQiMSQ0b0o5QyJmRyEjPCQhMSM+b3RMRGUxJSEjOyQhMjNBYi5sTEhTIyEjOyQhMThwdV9YQCEzIiEjOiQiMnlDPS9MVU1DIiEjOyQiMmszcUddRmFiIyEjOyQiMjgnWzYhKnBKTE4hIzskIjFPc2xqNnpdViEjOiQiMSV5Pj5LJFwlMyYhIzokIjFKaFcqcGFzeCYhIzokIjFGNC5FQDBiayEjOiQiMSozKVFfL2JLciEjOiQiMT5LMT03djp5ISM6JCIxZnMsLWZdLyYpISM6JCIxPnU2Yl9DJj4qISM6JCIwMmNYRT1MKSkqISM5JCIyeVJiPiVwV2M1ISM6JCIyaydwOmVyYUI2ISM6JCIyRVhEbHU/JSo9IiEjOiQiMlk1OT1kXFJEIiEjOiQiMjdwKGYjKVwzPDghIzokIjJSdCQzcGQjKXk4ISM6JCIxQHUleSY0P1I5ISM5JCIyTWJBIWZ1RClcIiEjOiQiMm5bPyZcOzBjOiEjOiQiMm0lW3NiUWs3OyEjOiQiMUVxY2lbNG87ISM5JCIxVzsjUnpqQ3MiISM5N2FxJCIyLT0tNV4oUiNbIyEjOiQiMSkpKmZzaT5SWCMhIzkkIjJLLnBoRUNiVSMhIzokIjIvJClbW0k+c1IjISM6JCIyWnYwLVI3IXBCISM6JCIybk02bCkzIjRNIyEjOiQiMjB2U0AjPSNISiMhIzokIjFIbCxPPTAmRyMhIzkkIjJFNkJWNzJ0RCMhIzokIjFyJmYhKVEkcEhBISM5JCIxTjYpPnk6QT8jISM5JCIyTm5UYScpeVs8IyEjOiQiMjlkKmVibG9aQCEjOiQiMlAlKSlHJDNVMTcjISM6JCIyMlxQPyZ6dSQ0IyEjOiQiMkcoKlErIWYrbj8hIzokIjElR2FhJ29UUz8hIzkkIjJzU0VaJjQpUiwjISM6JCIybndKUFQocCgpPiEjOiQiMmAlNFEsWWNoPiEjOiQiMll6cF4nKnpiJD4hIzokIjIlKkh5IT0rdTQ+ISM6JCIxQE44Oy4vJSk9ISM5JCIyJikqKSkqZVZ2JWU9ISM6JCIxNHg3XipRSSQ9ISM5JCIxKEhDeVNCeCE9ISM5JCIyLj0iKnBIP0R5IiEjOiQiMmVQKlJDK1VkPCEjOiQiMXhvenc9VEs8ISM5JCIyV1FkUylSWzI8ISM6JCIxJVFkb0ZCRW8iISM5JCIxaz1hUmEieWwiISM5JCIyOHQkKXkmWy9MOyEjOiQiMTxbV2hYSDM7ISM5JCIybihHPmdoYSRlIiEjOiQiMVldIVx4eihlOiEjOSQiMTQxb2dSKFJgIiEjOSQiMkc/I2VBYzU0OiEjOiQiMm0vOD8jKlxUWyIhIzokIjJ2ZzE+PCEzZjkhIzokIjIibzg5PXgnUVYiISM6JCIyXi0ieS49WzM5ISM6JCIyJWYiZTxUKilHUSIhIzokIjEqNFAvM2JxTiIhIzkkIjEsbTEmb1M0TCIhIzkkIjIsSC9rPDBYSSIhIzokIjJRIm9ubFVxeDchIzokIjI4ZTdDLyFcXTchIzokIjJjNCJRMzAiR0EiISM6JCIxT0VtMSE0WT4iISM5JCIxPjpWPk4jZTsiISM5JCIyNy83NCFlUU82ISM6JCIybzY7REk/aTUiISM6JCIyTFd2VyRHQ3Y1ISM6JCIxJSpvKyIqKWVMLyIhIzkkIjIlUUREVTpZNTUhIzokIjFPcmVJd0drKCohIzokIjEnUSozPi0/NiUqISM6JCIxTkw7cCk9UC8qISM6JCIxWiozOjZCKmYnKSEjOiQiMVBqKGZESnZEKSEjOiQiMS9BRkszIVEkeSEjOiQiMUdydDBjUiZRKCEjOiQiMSl6OikqejIjM3AhIzokIjFsXyQqZlE3KFInISM6JCIxJFFQImY/dFhlISM6JCIwPE1Hdj1nQyYhIzkkIjE8XCU0LSZHKWUlISM6JCIxZWNNJWZ3QCdRISM6JCIxYnk/bEkoPjEkISM6JCIxTCUqXGcnKWYwQSEjOiQiMiZ6dCMqPkkiKXo4ISM7JCIxX0AlUTdjMlQoISM7JCIxJW8lej0zb01IISM7JCExcj8kSCl5ISpRPiEjOyQhMTdhd11XeiVbKCEjOyQhMVcjNHc3bkRaIyEjOyQiMmtXcEBHR1YrIiEjOyQiMicpUU0lUUtebj8hIzskIjFtaFR2ZUpRSCEjOiQiMldqKGU4JjROcCQhIzskIjEqPWwtLXd3USUhIzokIjFPbHp0JSl6ZV0hIzokIjFNNWMqSCdlS2QhIzokIjFpYW8hZXdIVSchIzokIjBeJT1zQXpLciEjOSQiMSR5MFVoUW8meSEjOiQiMUw1RUFzVidlKSEjOiQiMCcqNF1vN0pKKiEjOSQiMVBCJWVvUUkrIiEjOSQiMnchKio0U3lTdDUhIzokIjFXaSlRMSE+VTYhIzkkIjJUVCczdi1INDchIzokIjIocG0vZykpcHU3ISM6JCIyKD5lNjFvWFE4ISM6JCIxVTxZYURqKzkhIzkkIjJyMFcsVjI4WSIhIzokIjIvdkAyJG9jPzohIzokIjJ1JFx1Ml5ceTohIzokIjJsOSVHX0Y8TjshIzokIjJ4UkgpKilcbiFwIiEjOjdhcSQiMjAtO3cqZnZhQyEjOiQiMWRBcWokKillVSMhIzkkIjJYbSFcYHg1KFIjISM6JCIyai85WWk+JW9CISM6JCIxJyp5NS9LJClSQiEjOSQiMXVWNkprTjZCISM5JCIwc3kmKSpvKkhHIyEjOCQiMWQielh6aFpEIyEjOSQiMkIpNCdSJXlsRUEhIzokIjI5PGE0RCJwKT4jISM6JCIyPG9RTWtuMzwjISM6JCIxJ3AhWz4/PlZAISM5JCIyTlEmcCdwb2M2IyEjOiQiMk0ieSpbRSwkKTMjISM6JCIyWkEmUVVENGg/ISM6JCIyJG9WME9YL00/ISM6JCIyYSg9UzAlZXIrIyEjOiQiMmQkKSpHSVdWISk+ISM6JCIyJFwtPiMpPihRJj4hIzokIjJZemUlKVxwdSM+ISM6JCIyOXVRIWZXQSw+ISM6JCIyTCF6J1tPTF4oPSEjOiQiMUZEOzw8Plw9ISM5JCIwInlvJypSUkI9ISM4JCIwSCo0VU90KHoiISM4JCIyZTthay0uQXgiISM6JCIyY1hYNVYkelk8ISM6JCIybV4rZSwmXEA8ISM6JCIyY1ssY3knSCdwIiEjOiQiMmRQPT9iJz1yOyEjOiQiMi0iSDMhKjM6WTshIzokIjJ1aGQpKjN2NmkiISM6JCIyLXJgRTVWaWYiISM6JCIycGgwPVtQOGQiISM6JCIyJClvLXpKUmthIiEjOiQiMlJoJEhvIkc6XyIhIzokIjIzMS0wKT5lJ1wiISM6JCIyZCUzIiozcWRyOSEjOiQiMiU0a25CeFtZOSEjOiQiMkY6PC5yJ0dAOSEjOiQiMi9kcXhiV2ZSIiEjOiQiMic+bSM+dEgvUCIhIzokIjIoXG9xSSUzWk0iISM6JCIyPVVgY1RXKD04ISM6JCIyN1MkcDgpKVwjSCIhIzokIjIyXDg3KSlIZkUiISM6JCIyKj5Wdz9GKipRNyEjOiQiMmxiTyZRKlE7QCIhIzokIjFiSTZHaSJRPSIhIzkkIjImKXlxRid5WWI2ISM6JCIyQmQ6WTJLbDciISM6JCIxJVxyUUhUcDQiISM5JCIyd29mYUBAbTEiISM6JCIyX2sqR18nKltONSEjOiQiMi1pTF43Yk0rIiEjOiQiMU9CJkhGXlRxKiEjOiQiMSR6a1spKVJETyohIzokIjFZVFNxQ1MzISohIzokIjFMXHheVUJTJykhIzokIjF1ckBdNEljIykhIzokIjFZJHpyUiJmYXkhIzokIjFIRFBPPndLdSEjOiQiMEAobz9bMikpcCEjOSQiMS5GRSMpKlF0XichIzokIjF3YFNRcChvLCchIzokIjFQQDRlI3pEWyYhIzokIjEsaT1YIyo+NVwhIzokIjEqKlwnWypmRCdIJSEjOiQiMjwsLS4hPlFTTyEjOyQiMicqeicpZkUrMiZIISM7JCIyTVc5P2BaTkQjISM7JCIyKXllP0lSPSw7ISM7JCIyKj1wXyk0cjwwIiEjOyQiMSIzRyYqKXpaIT0nISM7JCIyTS9UYDAnekhHISM8JCIycDg5Y00oPj45ISM8JCIxQ1xtOi1vIj4lISM7JCIyN1ZXciFSIT0wIiEjOyQiMkFMdig9YioqcDwhIzskIjJDMGFfcSNmYUMhIzskIjJERXVYcHVZNCQhIzskIjJzcCMqKjRXKD5yJCEjOyQiMFxEJUgscU5WISM5JCIxREt3UW5kIipcISM6JCIxRE9EQVdmI3AmISM6JCIxb2tCTl4wTmshIzokIjFjb2R0T3IucyEjOiQiMSZbKnA7eiM0KXohIzokIjEoKTN0YCkzRnYpISM6JCIxL0QuKFIwLV4qISM6JCIyOCZRUjx1KFstIiEjOiQiMnUrUDpDYm00IiEjOiQiMmEnKipmMjJMbTYhIzokIjJ3cyplO3gnUkIiISM6JCIyLXFJQi5zJypIIiEjOiQiMid5SEsuY2NqOCEjOiQiMjdDXy9rc2RVIiEjOiQiMjdDN1hYN2tbIiEjOiQiMmslSDwjNCdmWDohIzokIjFzLjNsXVUuOyEjOSQiMWZZQS43KipmOyEjOTdhcSQiMlUqPiJIMlFxVSMhIzokIjFSOk5aU3goUiMhIzkkIjJzQSozQHhmb0IhIzokIjEpemEhKT09JlJCISM5JCIyRkQzR0pXMEojISM6JCIxJkh0eG0lbyJHIyEjOSQiMTx4Q3B1JUhEIyEjOSQiMlY/WEheU1ZBIyEjOiQiMU5kJyk0NihlPiMhIzkkIjExJjRMLVl2OyMhIzkkIjJZSFF5U3IkUkAhIzokIjBZWDR2Xzg2IyEjOCQiMVQpPiI9W1wkMyMhIzkkIjJicHo9ZyxlMCMhIzokIjItVzdfRncjRz8hIzokIjEiPilvXDYjNCsjISM5JCIyJG9kS1F3dHQ+ISM6JCIyOmgnM0Jpc1k+ISM6JCIyOzFrbVUnKSk+PiEjOiQiMSYpSC4peTtLKj0hIzkkIjFiJVE1JVtybT0hIzkkIjJWdlVeNHguJT0hIzokIjFQcUs8ISo+OT0hIzkkIjJNaGxTLHYiKXkiISM6JCIyKCl6aUFUKUhpPCEjOiQiMSdIbiFROWNPPCEjOSQiMVhsYiM+YjRyIiEjOSQiMSd6M01pcGFvIiEjOSQiMjdhWD1cJDRnOyEjOiQiMi83PlZMOVtqIiEjOiQiMiRHVWk9JT0nNDshIzokIjE4JTRWcCFcJWUiISM5JCIyWEROdXQ5JWY6ISM6JCIyeSkpWykqb3NWYCIhIzokIjJtXSo+JD5YJDQ6ISM6JCIyJnp4KXlKNlZbIiEjOiQiMkYneisoW1sjZjkhIzokIjJXeSM0JlJLVFYiISM6JCIyJDQqKjRAcCQqMzkhIzokIjJiIzRlTVNqJFEiISM6JCIyRl1bTHAkPmU4ISM6JCIyaHMwLXQkZUs4ISM6JCIxdllVRChwbkkiISM5JCIyVzNlMSdbciFHIiEjOiQiMiU0SSQpWyh6VkQiISM6JCIyNEooSExBc0Y3ISM6JCIyMyEpXCFbcnArNyEjOiQiMnl5ZCNIZ0R0NiEjOiQiMXBGVW1uTVg2ISM5JCIyJHk2WnpKInA2IiEjOiQiMi9hOmRdJSp5MyIhIzokIjI4WiozeVpBZTUhIzokIjI0ZE9NMkt5LSIhIzokIjE+JFFCMndqJyoqISM6JCIwVDlmXFliayohIzkkIjBlYyV6QihbSiohIzkkIjA7OyZwbUd0KikhIzkkIjEjbytEXShmPicpISM6JCIxPFcncCEpb0NEKSEjOiQiMTREKCk9KSpScXkhIzokIjEscEBrZHFydSEjOiQiMUxsQnhYXWFxISM6JCIxXidcJlwnPm5oJyEjOiQiMTYiXCpbJz1oOichIzokIjJiT0YiUSFHL24mISM7JCIxUCc+cF0rdzomISM6JCIxVFVTQTdRO1khIzokIjFqNWpdKUd1LyUhIzokIjJXJltUOSNmYFgkISM7JCIxbmhzRVUkPiZHISM6JCIyJXA3Tm15VGZBISM7JCIyKSk9YXdjdityIiEjOyQiMms3NUY4WG9CIiEjOyQiMU1uaVFUQkYnKSEjOyQiMXM1JzROPDg3JyEjOyQiMUx6O3YqZiZ6YCEjOyQiMSdwUiF6KWYiW3AhIzskIjJpUFZMJDR5YTUhIzskIjJqJ1FlM0ltQDohIzskIjFyIzNqaEslPj8hIzokIjExZy1SI0gnPkQhIzokIjImKipcPiFwKyRISSEjOyQiMjghPUNvKHoieU4hIzskIjFedk1XRUstVSEjOiQiMVJMbDZncz1cISM6JCIxUDEuRCNcM3ImISM6JCIxSjMiPShleVVsISM6JCIxYTxUPy14IlEoISM6JCIxKSlbX3B5SDIjKSEjOiQiMTNaUidbLyU0ISohIzokIjF5c0JOL18leSohIzokIjJsMGwob2tCYDUhIzokIjA9LWIvO2E3IiEjOCQiMU1wPV87PCY+IiEjOSQiMmh2akM/KXBpNyEjOiQiMlchXCIpcFU9RzghIzokIjIkSFZ6VE8hPVIiISM6JCIydzN5aWo3UFgiISM6JCIyeiNlIkc2XVNeIiEjOiQiMicpUiEqUm1RSGQiISM6JCIxY0B4V2lbSTshIzk3YXEkIjInZXAyJHBUIypSIyEjOiQiMkUwKG8uNWRwQiEjOiQiMSM+JkdkMyoqUkIhIzkkIjF2RDBYNV41QiEjOSQiMU1mJj44VDZHIyEjOSQiMiVcayJ5USEqPUQjISM6JCIyVUB3b3JuRkEjISM6JCIyYGddbmUieSQ+IyEjOiQiMUZfcmQqUlw7IyEjOSQiMU5wSTgtRE9AISM5JCIxbFdAJDQ+eDUjISM5JCIybE4iUkhFTno/ISM6JCIxeSZSaTNjNjAjISM5JCIxMmhlMFI4Qj8hIzkkIjJqXTNxbCpHJio+ISM6JCIxRU8nUSpmaW4+ISM5JCIyMCpIOTpZOVM+ISM6JCIxJFtHSUJZRyI+ISM5JCIydT5rZGFJZCk9ISM6JCIybHAyX0AnemU9ISM6JCIyVkshPlszL0s9ISM6JCIxQ2FoISk0WTA9ISM5JCIyZEVvSTFfIXo8ISM6JCIyYjY4bVczR3YiISM6JCIyJilSPnVPQm5zIiEjOiQiMUJbKilHKil5KzwhIzkkIjFQKTMsMycqXG4iISM5JCIyd0ZnJSplTSRcOyEjOiQiMUEhcEYsJHpCOyEjOSQiMj1KUV9sZSQpZiIhIzokIjI7VUJxXzxJZCIhIzokIjIlPjRWI0hheGEiISM6JCIydTNPSUBfRF8iISM6JCIxJkc9XzMkUihcIiEjOSQiMjs4XUY8ZEFaIiEjOiQiMlEkUjZOSjdaOSEjOiQiMk9sUkAmeic+VSIhIzokIjJkXV1gJW93J1IiISM6JCIyejxmZz4kXHI4ISM6JCIyYXYheWYlPWhNIiEjOiQiMk4zRGYyNzFLIiEjOiQiMjIxOTVQVFxIIiEjOiQiMkwxYUdYciFwNyEjOiQiMWx3PiM0bEhDIiEjOSQiMXkhcHVlI2U7NyEjOSQiMlFaP3JnIikpKj0iISM6JCIyVj5bSis8RzsiISM6JCIyIypSXSMpZVNgOCIhIzokIjFwcDNvM1MyNiEjOSQiMlZIdyI+RiUqeTUhIzokIjI8RWhBKzIqXDUhIzokIjJkXFEyNUktLSIhIzokIjEqM1VTdUwlKSopKiEjOiQiMGsuNEBEbmUqISM5JCIxUioqcFMlb2pFKiEjOiQiMSllWW5MJVtPKikhIzokIjFkIlFHIkg2J2YpISM6JCIxTUclUWYvVUMpISM6JCIxOjY0VUdoenkhIzokIjJsYj9FWiE0LHYhIzskIjFqPFtGUkgyciEjOiQiMSdRbGMyLm9wJyEjOiQiMEFxO3dwIm9pISM5JCIxNnQ/KCl5LD9lISM6JCIxcltqXk1CXmAhIzokIjFPMjR4bkloWyEjOiQiMXIjNCgpXD40TiUhIzokIjJYZHlDdSkpRyNRISM7JCIxLTlLTiNITkckISM6JCIxeGdZLiZIVXUjISM6JCIxVjVlMVNUQUEhIzokIjIqW1ZmVzVYUzwhIzskIjJFVSJIcng4QTghIzskIjFIUEhESGosKiohIzskIjEpcC05PydlJ28oISM7JCIxSjdzJCo9XVhvISM7JCIxQzRvLWZgS3YhIzskIjFFZj1tUDR1JiohIzskIjIoM1dIdz4/XjchIzskIjFrRCFRcFh2ZSIhIzokIjJPJXktb3ooKlE+ISM7JCIxRDNnOCU9KjNCISM6JCIxKlx5bUhePnUjISM6JCIyYS4+WjAiMzlMISM7JCIxUVQpR1lEZDElISM6JCIxKXpCLEkueiVcISM6JCIxdi43dm86eGUhIzokIjJ2XnNfI3kmeXonISM7JCIybCR6bmA0TCdvKCEjOyQiMUY0aylwLmhgKSEjOiQiMSd5cEYoZXdaJCohIzokIjEkbzlhMkpDLCIhIzkkIjImZmhqdXEjcDMiISM6JCIyUXJgU0cuJ2U2ISM6JCIybSdIRFhBd0Y3ISM6JCIyLzBLQWxtWUgiISM6JCIyJFFIaiIzVSZmOCEjOiQiMjI6NldoImVBOSEjOiQiMiNbOiN5aF1SWyIhIzokIjI9dShlIjMielY6ISM6JCIyJ1IjRyhcYEEtOyEjOjdhcSQiMjMkKkhecWs4UCMhIzokIjBLPzBSeDdNIyEjOCQiMjE0dTtpJEc2QiEjOiQiMmxnbFAmUlIiRyMhIzokIjF3UkJAKD07RCMhIzkkIjImKTQhKT0neic+QSMhIzokIjFScDRSOFgjPiMhIzkkIjAlKXlLMXlJOyMhIzgkIjIoKW9STiJvJlE4IyEjOiQiMkQoKj00bSZ6L0AhIzokIjFYP0UlKj4hZjIjISM5JCIyOF0/KlxDPVo/ISM6JCIyM2BFaiVHaz0/ISM6JCIyVjRdVjcpRyEqPiEjOiQiMjFMXlRIQUAnPiEjOiQiMmxnKCoqKVFbVCQ+ISM6JCIydEhMaVVvaiE+ISM6JCIyJUhBR3ZMeXk9ISM6JCIyQyxVQTgkUl49ISM6JCIyRno3Ll0nPkM9ISM6JCIydiszXTwiPih6IiEjOiQiMkxiUkd0dC54IiEjOiQiMidlOSg+aVJQdSIhIzokIjFuJTRLOiRHPDwhIzkkIjJlUV0nKlsoKjRwIiEjOiQiMnRiaExqdVttIiEjOiQiMUEqKWYyYSEqUTshIzkkIjEydUhMJXpJaCIhIzkkIjJ4KSlvKSk0JlEoZSIhIzokIjI9ZS5GXzQ9YyIhIzokIjFMdTszJlFqYCIhIzkkIjJFLiRIIlxjNF4iISM6JCIyNnVWPFtZY1siISM6JCIyaVlkeioqKlFnOSEjOiQiMmBcO3cqcDtOOSEjOiQiMk4kXHIvZSYqNDkhIzokIjJudyRbTUl0JVEiISM6JCIxJHByc150JWY4ISM5JCIyVCFRO0EtOk04ISM6JCIyIkhtbCE9TSgzOCEjOiQiMiJRUTY1Vz4kRyIhIzokIjJWJXktT3lcZDchIzokIjJCS1Q4QDQ7QiIhIzokIjIoW21GSTVcMDchIzokIjJycD9MVi4iejYhIzokIjImbytFKjQvQzoiISM6JCIyI1thXT4iW2A3IiEjOiQiMikqb1UlXHkpeTQiISM6JCIyc20nR0pGKCpwNSEjOiQiMVhTLSQzXDovIiEjOSQiMlIpM3RbKWZELCIhIzokIjEtIls/MlYlSCkqISM6JCIxL1ttIVJ4al8qISM6JCIxb1dqI2U1ZEAqISM6JCIxSk4hKlFVcScqKSkhIzokIjBCQTNsbyZvJikhIzkkIjEtLUkoemYvQikhIzokIjE+a3lQInk5KXkhIzokIjJibFYiRzVuP3YhIzskIjBmMW15VHE5KCEjOSQiMXpTTnEuZGZuISM6JCIxSDd0a09EZGohIzokIjF3JzM5MHkiUmYhIzokIjFfWzphUGsvYiEjOiQiMSV5Ri1ocEwwJiEjOiQiMGknemdvImVlJSEjOSQiMTk/QFFdbi5UISM6JCIxKFJfTVFOMGgkISM6JCIybFxWI29ecTdKISM7JCIyJ1JMIkdhYio+RSEjOyQiMSJRS3VJJ3lYQCEjOiQiMXJmVVQkKnkxPCEjOiQiMjMqUSopbyJ5N0siISM7JCIxTzs4YlU7MzUhIzokIjBFUjROJD5qeSEjOiQiMTQmW2R5LCY9biEjOyQiMVwhKWVDcm0xbiEjOyQiMU9NPClIc2hxKCEjOyQiMVg5NnNYKHlUKiEjOyQiMV4xTypcJ2ZYNiEjOiQiMCZcbnloJXBNIiEjOSQiMiNlPG9DXSFIYCIhIzskIjJLPjNsYyU+aDwhIzskIjIxNmo/KWYxRUEhIzskIjJFVzdXSDNzMiQhIzskIjFOKm9tWDRaOSUhIzokIjF4Iioza0htRF8hIzokIjFNOyp5VjspW2khIzokIjAqSGNRdDMwcyEjOSQiMCg+Lj1UQywiKSEjOSQiMFcleXcqKj1ZKikhIzkkIjAoUiJISTF5dSohIzkkIjIzaj9NV143MCIhIzokIjFVWzZ1YGFDNiEjOSQiMmAjelE6WTImPiIhIzokIjJXJlxoJ2ZzSkUiISM6JCIyWDlITSI9Nkg4ISM6JCIyWlJlSkM8SlIiISM6JCIxdy0oW1N3YFgiISM5JCIxVnlMZXAvOzohIzkkIjIpPUB6NERFdjohIzo3YXEkIjIvJlJLaFtTVkIhIzokIjFWYTMyLSpHSiMhIzkkIjBeOSVbQVojRyMhIzgkIjJgXDl4UGlARCMhIzokIjIuPGNceHI+QSMhIzokIjIxJFwnUUs2Pj4jISM6JCIyTGRrZF8iKj47IyEjOiQiMk4iekk3Q0FLQCEjOiQiMUIsV2VNaC1AISM5JCIya1s6cVx0SjIjISM6JCIyJUdGXk8xIlIvIyEjOiQiMmExZ0s9S1ssIyEjOiQiMnh4I1twWCVmKT4hIzokIjJ1cj8kKUdgcyY+ISM6JCIyJGY7dE9Hd0c+ISM6JCIwMC9wbXcvIT4hIzgkIjJNNmZrOShScz0hIzokIjFMOU1GYl9XPSEjOSQiMW9vKkcjPidvIj0hIzkkIjJ3KHlCI0gwJSp5IiEjOiQiMnQjPWlJTTppPCEjOiQiMnQxVFUnSDVOPCEjOiQiMkQicGNaJFwjMzwhIzokIjI8MEI3J29lIm8iISM6JCIydTsuJDMnM15sIiEjOiQiMk4oSDUybCEpRzshIzokIjFhP1R5N24tOyEjOSQiMm11LGVVI3B3OiEjOiQiMTcoUng/ZTNiIiEjOSQiMiczJFIzZ2JeXyIhIzokIjJVUSUzYS1kKlwiISM6JCIyYCRIVU1rM3U5ISM6JCIxM3Bsa3BvWzkhIzkkIjIycEddOmBMVSIhIzokIjIlSHFGSVoxKVIiISM6JCIyTDdxVHYqenM4ISM6JCIxW09mYFhgWjghIzkkIjJDJylmVGtWQUsiISM6JCIyZUAzIWYnKipvSCIhIzokIjJCYSs/R3Q5RiIhIzokIjIiPkYhZj1MZkMiISM6JCIyRW9JYShmQz83ISM6JCIyTClRRk1oUCU+IiEjOiQiMipSSFh1ZkdvNiEjOiQiMTFXbyZlTj45IiEjOSQiMiRmOSk9eSNHOjYhIzokIjJWWShlVElHKTMiISM6JCIyajcvIlIlKikzMSIhIzokIjIwXlpNY19JLiIhIzokIjI4VS5LVT9aKyIhIzokIjFrYDFyTFFlKCohIzokIjFwKjQ4OClbaiUqISM6JCIxeF0ob0I5PjsqISM6JCIxZTQiPSNwLWApKSEjOiQiMWpbeSM9Z2hgKSEjOiQiMUxBQSMpb2g1IykhIzokIjE4XG1oL252eSEjOiQiMVAzTCVbcDBgKCEjOiQiMU8kXC4kcGF1ciEjOiQiMUBcZUxzJG8hbyEjOiQiMSxybkVjcUVrISM6JCIxNHQiPmknXExnISM6JCIyMCY+SEM6ckVjISM7JCIxKiopKVtVJ0doPyYhIzokIjEyJnpvYyQpPnglISM6JCIxUCZwUkRHX0slISM6JCIyMFpTcW0iKXknUSEjOyQiMllWc3d5aU1TJCEjOyQiMlZnLTAjKlx1JEghIzskIjBGUyF6SWt4QyEjOSQiMiVmImZlamtVLiMhIzskIjJNMikzOCgzKD47ISM7JCIyO01mUzJrIVs3ISM7JCIxOUpVXUM2WSQqISM7JCIxdVwkKmZyZFxwISM7JCIxSD1ObVdsRGEhIzskIjE3XSdILjpwJFshIzskIjFOMjhGXEs2XiEjOyQiMU9kNEcjR0MrJyEjOyQiMVFpSFBsbiE0KCEjOyQiMSQpendGaSg+IXkhIzskIjFFTjhkdT1EdSEjOyQiMUMyVlt1ZFxiISM7JCIxYT1IJkhnTmInISM7JCIyUC5lPSE+SCcpPSEjOyQiMkNBPjZBJVxhTCEjOyQiMW9jYUJMVFNZISM6JCIxJmVYW1QlXG9kISM6JCIvO11ZWjQleSchIzgkIjFpayg9OnJ0cighIzokIjFtUjJlKClvKGUpISM6JCIxYCJ6L1cmKnpTKiEjOiQiMndAUzEoZXQ9NSEjOiQiMiQzbk94IlJLNCIhIzokIjInWyp5SUAzWzsiISM6JCIyTV4menglSFFCIiEjOiQiMnNQWGs6NDFJIiEjOiQiMkZiXEFAJVJsOCEjOiQiMnJaYnEjb1FHOSEjOiQiMmhPKFIuWXYqWyIhIzokIjJZdHZMKHpqXDohIzo3YXEkIjJ3bjNzJClmYEojISM6JCIxI3AnPjFqUyVHIyEjOSQiMmtpdT12X05EIyEjOiQiMmBIOFdbNkdBIyEjOiQiMSQ9NExoJT4jPiMhIzkkIjIoKkh1WCZScmhAISM6JCIxLiJlXCQ0UUpAISM5JCIyUHRZWVwxNzUjISM6JCIyKCpRVSsqND9yPyEjOiQiMjkiZUwpNHU4LyMhIzokIjFLWmpEWnQ2PyEjOSQiMTAmKlE/NEgjKT4hIzkkIjI7T2JQelxJJj4hIzokIjJBMVckW3UsQz4hIzokIjElKWZhOyopPiYqPSEjOSQiMikpR18jNCIpZm09ISM6JCIxN3BRdnhAUT0hIzkkIjJ0aCc9cyVmKyI9ISM6JCIyI2ZrbVhONyN5IiEjOiQiMjMyLy03NFd2IiEjOiQiMjBdKXAmNDlwcyIhIzokIjEjPlEuOk4nKnAiISM5JCIyRWF4bXVuRG4iISM6JCIySyEqKVxRaHFYOyEjOiQiMkRWW2VQViE+OyEjOiQiMCVbcDA4ZCNmIiEjOCQiMURpKGVjIUdtOiEjOSQiMkUqKW8uZGcsYSIhIzokIjIzdz5XWyo+OTohIzokIjBqMSgpPSVRKVsiISM4JCIyUiNRUkstcWk5ISM6JCIxKj4icHY8OFA5ISM5JCIyJik0X0tfaDtUIiEjOiQiMnZ1MS9scWlRIiEjOiQiMmpsb1pzUTRPIiEjOiQiMkopXDdFT2tOOCEjOiQiMiNHLXBuOU81OCEjOiQiMnM9VzxfbV1HIiEjOiQiMkstKFFfNnRmNyEjOiQiMT5ga2RkS003ISM5JCIyXjUkXEEoPSkzNyEjOiQiMl9ecU5Rd0o9IiEjOiQiMTdXYzBJT2Q2ISM5JCIybl5XJW8yTUo2ISM6JCIyIzRXNmsocF01IiEjOiQiMjxdSDErMyZ5NSEjOiQiMmJkVz9UNjswIiEjOiQiMjkjeUZzUUxDNSEjOiQiMThQSEFARm0qKiEjOiQiMW1APzRDVCVvKiEjOiQiMWRZVVF4QihSKiEjOiQiMXctdGBuPy8iKiEjOiQiMSVveV9GZlohKSkhIzokIi9KUWB1SilcKSEjOCQiMDw/JjR4RyU9KSEjOSQiMkUyXy4nUjFpeSEjOyQiL25CeUcuSnYhIzgkIjFcaCkqPUJlIT4oISM6JCIxcmg7I2Y5LCVvISM6JCIxKFwqejtxMXprISM6JCIxVU46WkslcDUnISM6JCIxS3MoPj1nTHMmISM6JCIxS0teJXk7IkdgISM6JCIvQG54Q0hAXCEjOCQiMUFkNHdJUS5YISM6JCIxRS49Qil6YTIlISM6JCIxYnRKRCYqW1JPISM6JCIybk9GX3B5JCk+JCEjOyQiMTBkJFxWLmt2IyEjOiQiMkJwOztcciM+QiEjOyQiMj5YXUAnND8lKj0hIzskIjIjb2hBSyI+KipbIiEjOyQiMkUiUnQzcHY7NiEjOyQiMEg7I1xrKClweSEjOiQiMWkjZkkrQz06JiEjOyQiMWVkIlErbVc8JCEjOyQiMk5SRnRpQk4yIyEjPCQiMid6a0ckPVkuKD0hIzwkIjFFI3A7WD1cTyMhIzskIjFYYkImeWRxMiQhIzskIjJMNyhHQ04wOEshIzwkIjF4RSt0PSQ+UyIhIzskITEzRiQ+IjM8bmYhIzskITFPRyVRIj1mJHkkISM6JCIxZjRERkRAYHkhIzskIjJrZl0zJlspKnpGISM7JCIybSRILmotKjRAJSEjOyQiMHU+aVZAeVImISM5JCIxVT09ZkNwVmshIzokIjFaQD9VLlcmUighIzokIjFXYS1KMmV5IykhIzokIjAnUio+UE0oMyIqISM5JCIxbT0jR21xaSopKiEjOiQiMmYoXF5DIVxbMSIhIzokIjJRUVU8W3dxOCIhIzokIjJAKWVWXiM9bj8iISM6JCIyJypIKik+eCQ0dTchIzokIjInXEg5TXpYUjghIzokIjFcSl41dywuOSEjOSQiMkd3bTIzVlxZIiEjOiQiMlluc1U9d2BfIiEjOjdhcSQiMTRvLmFzQShHIyEjOSQiMWBWMzVDI2VEIyEjOSQiMig9bTlONF9DQSEjOiQiMk8/Q2Y5T0w+IyEjOiQiMmEnKmVXPCJHaUAhIzokIjFHJXBdJylvODgjISM5JCIyQiQqKlxuO2grQCEjOiQiMVd4KHpfQCsyIyEjOSQiMTdhMyF5NCdSPyEjOSQiMi84OXYuKFE0PyEjOiQiMiRRMSYzNGokej4hIzokIjElb1wwIm9hXD4hIzkkIjIyKVE5ZWclKj4+ISM6JCIycyxOdmduMCo9ISM6JCIyT2wkKnkyPDknPSEjOiQiMmJBcyN6KSlcSz0hIzokIjJYa0I6PDtRIT0hIzokIjJrIUhgTzNQdjwhIzokIjIvLVRKWWpydSIhIzokIjIxKT5dVkw+PjwhIzokIjJ5Jz4reiVlOXAiISM6JCIyL25DTGZiUm0iISM6JCIxRWghKVwsb087ISM5JCIyOyc+Iypwamk0OyEjOiQiMVsnPSdcc3kjZSIhIzkkIjI2WGYtZGFoYiIhIzokIjIqZmVALCo9KEg6ISM6JCIybzsmZiJmcE1dIiEjOiQiMUgsQ1xaUng5ISM5JCIyIj4hUmY/IlteOSEjOiQiMl8yLShvV3JEOSEjOiQiMng7UnpseStTIiEjOiQiMid5I1xWVmNYUCIhIzokIjJZKlxCPCpHIlw4ISM6JCIxZVFyKGZ2UEsiISM5JCIyQ0VbM0R1JSlIIiEjOiQiMnItMDUmMz90NyEjOiQiMWtOdiVcSHpDIiEjOSQiMVJESk5CakE3ISM5JCIyOHgkKT5genM+IiEjOiQiMi9iQnNAUj08IiEjOiQiMl9QeElbeGk5IiEjOiQiMSUpcHUoUWUwNyIhIzkkIjJ5UyQ9IylSayU0IiEjOiQiMWRcI2ZOJVxvNSEjOSQiMlFXUTVxbj8vIiEjOiQiMjJiITMkUj9gLCIhIzokIjFcc3EmKTMyIykpKiEjOiQiMUhrXydSM29nKiEjOiQiMWFqRSZHS3BLKiEjOiQiMGZeK0ZYPi8qISM5JCIxOnkhUiEqUTh2KSEjOiQiMShlZTcrJ2ZhJSkhIzokIjFtVC9vUD5eIikhIzokIjE3ViUpW3pnU3khIzokIjFOLyJ6Vj1CXyghIzokIjEuTW4kKXAiZT4oISM6JCIxVDloanloZ28hIzokIjFCWExMRkY7bCEjOiQiMlheP3JFIlJpaCEjOyQiMWJacClvcCcpeiYhIzokIjEiRyhcbChIXFUmISM6JCIxbSdmMDdyNi8mISM6JCIxJz0pUUglUndrJSEjOiQiMi9MKD4jZTZcQyUhIzskIjIpKSpHKHpNJipSJFEhIzskIjEjKTRLJXlNa1QkISM6JCIxWDhJWFVTJSpIISM6JCIyJ1tPJXpybjJkIyEjOyQiMWtyLzJ3M1xAISM6JCIyL2E+XFQyT3QiISM7JCIyPEs6KWYmRyRIOCEjOyQiMS9CcGEwa0MlKiEjOyQiMSRHZi9zcHUiZSEjOyQiMldAWmBaXzJoIyEjPCQiMUxgcT1VXWxHISM9JCEyKFxIUDE6TEU7ISM8JCEyV1ZPT11ScDYjISM8JCExYGAoPXBQemAiISM7JCExL3JhVkVhWVYhIzwkIjInZVM3MWFaZkwhIz0kITEoXFJnMCNbbEohIzwkITJaK0Z4PjJxcCQhIzwkITElKT06RXooZVAmISM7JCIyMU1UdCgzMjA1ISM7JCIxVysnPm8oKj1sIyEjOiQiMUoxQ0tyPy1TISM6JCIyJlEpSCdSNGdnXiEjOyQiMjAmKipwekZLJT4nISM7JCIxdHghZVU8MTkoISM6JCIvTDJkQGtAISkhIzgkIjEmPiU9Z1pnXikpISM6JCIxLkdTJUghPlMnKiEjOiQiMlBMI1FPRVZSNSEjOiQiMFVlMyJmIj42IiEjOCQiMllGQ1t0aT09IiEjOiQiMnYmXFx5PWVcNyEjOiQiMSZbNTA4P2BKIiEjOSQiMm5ZSSY9ekZ6OCEjOiQiMVVoUUAtaVQ5ISM5JCIyJj53bDxXWy06ISM6N2FxJCIxKTNaanEvIWZBISM5JCIxO2VtSV44RkEhIzkkIjJ2WnQ/U3NgPiMhIzokIjJqWkk9JTR0akAhIzokIjFvKUh5K0RBOCMhIzkkIjInUTQkKXombzM1IyEjOiQiMmE+TilSX25wPyEjOiQiMXNcZVwhZSdRPyEjOSQiMSgqNFhGJUh5KyMhIzkkIjEkWyo+RjU/eD4hIzkkIjInKXBvN2kkeVk+ISM6JCIyQ049NypwZTs+ISM6JCIxUFgjeiMpPm0pPSEjOSQiMk1FbVFrKilvJj0hIzokIjJuJT1bKnAtdSM9ISM6JCIxJiopb10lUjspeiIhIzkkIjJvYXUhenA8cDwhIzokIjEkWygqRy1XL3UiISM5JCIxV1NgNmYnPnIiISM5JCIxdygqZSk0VVBvIiEjOSQiMjtsI1J0MXhiOyEjOiQiMUplQihRWyFHOyEjOSQiMWBqPiZvcTBnIiEjOSQiMigqKnpjUjxMdDohIzokIjJ4Nl4yW0NqYSIhIzokIjJObSlbQDFhPjohIzokIjI+I0drcTEoSFwiISM6JCIyJykqPkZMUmdtOSEjOiQiMkIqKnlYXEcvVyIhIzokIjJsR0RqPUpXVCIhIzokIjI4OyRcTnZmKVEiISM6JCIyLERmaXA2SE8iISM6JCIxJz1Rd09jdEwiISM5JCIyUD1yLnE3PkoiISM6JCIyKXltbig+Z2xHIiEjOiQiMi1GZl9odzdFIiEjOiQiMjcnZlRteS5PNyEjOiQiMiM+JVEiUXoiM0AiISM6JCIyJnlheEIpKWUmPSIhIzokIjJ5X0ByWj8uOyIhIzokIjFkaSE9eiEpXDgiISM5JCIxKT4hcDNjYDQ2ISM5JCIyVCZ6dl8oW1IzIiEjOiQiMmIhPiEqKjQjPWU1ISM6JCIyJTQhZkpuJj5LNSEjOiQiMjNVV3Z3WmYrIiEjOiQiMTEmb3QtXlJ6KiEjOiQiMVJELU8rJFxfKiEjOiQiMTswZSo0Yz5EKiEjOiQiMXVgQiI+aFgoKikhIzokIjFESTV4MUYjcCkhIzokIjFkTUNHbWcvJSkhIzokIjE0MFp1PDQ2IikhIzokIjFfPk8uVkQ2eSEjOiQiMVw8cXVQai92ISM6JCIybHFDKCpcKXkhPighIzskIjE5JCo+RVtJcG8hIzokIjFvJ3A6KCkzKVJsISM6JCIxKXBBa00iKT4/JyEjOiQiMVQwJUc9d2ImZSEjOiQiMU1vJClwT1crYiEjOiQiMVcmMzpmZWw4JiEjOiQiMUdOM3JLMGtaISM6JCIwYClmWFREJFElISM5JCIwJzMwTCI9WipSISM5JCIyVydcTUs3RSpmJCEjOyQiMWAkSHpgbXo+JCEjOiQiMnQhZjlzTDojeiMhIzskIjJseUUhM3RHJFEjISM7JCIyMWtOMnY/Ryg+ISM7JCIxV3ckKilSIio+YyIhIzokIjJCOl5EQi48OiIhIzskIjF4I1FuRGYlR3UhIzskIjFXUHUheTcmekwhIzskITJhMUddJHkkelAmISM9JCExJXAoKWVbIVtcUyEjOyQhMXB6OVEhMzNiJyEjOyQhMXdnRyxSIilmcyEjOyQhMSNlRiUqZStSLCchIzskITFQMiRcL3NHayQhIzskITJ3WVolRyoqKVw9IiEjPCQiMU1KJHowKzYqeSEjPCQiMXJwOGUnKjM2RiEjOyQiMT1mKm9rVyNmciEjOyQiMmFjMio9KD1EbCIhIzskIjIpR3BsMiZlXyNHISM7JCIyOENhRmpNaShSISM7JCIxJyoqPXhtNk0vJiEjOiQiMjAhUVR4WTJJZyEjOyQiMSczOCkpXEkpXHAhIzokIjFNLiUpKilIMDp5ISM6JCIxMkImel03YWopISM6JCIwLWRYd3MjPSUqISM5JCIxUng3Q3EjcCwiISM5JCIyYD8lekt6RiozIiEjOiQiMjJpW3B3QyNmNiEjOiQiMVBKSXZLL0Y3ISM5JCIyOzBlWydwJkhIIiEjOiQiMjhdbXI7XHJOIiEjOiQiMVJCKD0oPXg+OSEjOSQiMmtZaCtKXzRbIiEjOjdhcSQiMmsjM3UmeipvSUEhIzokIjI5JT0+Jio0TSk+IyEjOiQiMUVkZ3RENW1AISM5JCIyZEh2XzshKlI4IyEjOiQiMnZcKCkqbyM+PzUjISM6JCIybl0oKik+Xj9xPyEjOiQiMjglWzliRGNRPyEjOiQiMSV5O2IoZTUyPyEjOSQiMidcayVlcVtlKD4hIzokIjInW2U5ZFEhWyU+ISM6JCIyTiwpbyQ+JClSIj4hIzokIjItalAkM3ZSJCk9ISM6JCIyRkloJDRrMGA9ISM6JCIxYHpxQCNvSCM9ISM5JCIyMWJGYCEqUkp6IiEjOiQiMi1xJVwjKnBkajwhIzokIjFGIlFgYSRHTTwhIzkkIjE8cChROGlfcSIhIzkkIjJbeHJRJFFedzshIzokIjF4d3dVI1EhWzshIzkkIjIlM1gqNF5MKT47ISM6JCIyPCcqcFxRJyo9ZiIhIzokIjJZYnp0REFVYyIhIzokIjFFSXY+XyFvYCIhIzkkIjJOJ3AxNyJRJzQ6ISM6JCIyJFwvN2tEciNbIiEjOiQiMSwmeVAtPmdYIiEjOSQiMi1vanl3WSZIOSEjOiQiMnRWJlsjKlFHLjkhIzokIjJ5PyQqM0c8c1AiISM6JCIxVElZW0RMXjghIzkkIjIjXGA0bVJoRDghIzokIjJpdTNdT1crSSIhIzokIjEmR1R2LTBZRiIhIzkkIjImUXQpKnBiRlw3ISM6JCIyIls8ZUNRLkM3ISM6JCIyRzkoUUdkJikpPiIhIzokIjF1VChwQTpQPCIhIzkkIjJUYSVRK1VlWzYhIzokIjIyVm56VEtNNyIhIzokIjJpKWVQRnZBKTQiISM6JCIwPF05M05IMiIhIzgkIjJFZyozMCc9di8iISM6JCIyI0hOdC0oUj4tIiEjOiQiMWVQVWY/ZWgqKiEjOiQiMTQmSCgqZkI4cSohIzokIjFqdTokWyE+USUqISM6JCIxc3UpKVwwdXIiKiEjOiQiMWIoZilmT18sKikhIzokIjF0TEVPXjNGJykhIzokIjBMRWJxcHpNKSEjOSQiMWl2X09nc2ohKSEjOiQiMVJOOj8/IlJ4KCEjOiQiMHBWIXA0NXl1ISM5JCIxUCdbQCYqKSllPCghIzokIjI6L0tIXS5wJ28hIzskIjFONC5WUiIzYichIzokIjFoK2VGTk1GaSEjOiQiMlgiPiJlXiRHJyplISM7JCIxI0dQXDA0dmImISM6JCIyTj5WTU8nKjRAJiEjOyQiMSZ5WikpKipSbyZbISM6JCIxXlslKkd5RSZcJSEjOiQiMUxlW3ElXG03JSEjOiQiMXJFP142XF5QISM6JCIyV1BHKmVmU3FMISM7JCIxOCcqcEZLLyUpSCEjOiQiMig0b04oemFIZiMhIzskIjI6LjVISnF0PiMhIzskIjJ0KVEoW0Reb3oiISM7JCIxdF11UCwhKSpRIiEjOiQiMSZwIipwXGskRygqISM7JCIxcygqKUgpKXo9UyYhIzskIjFZPTUqMzgkeSQpISM8JCExRC45LEpJSlMhIzskITElKm8ncEt5KXohKiEjOyQhMTAqKT0mUmh6TCIhIzokITFONS5TKyJ6WCIhIzokITJbJmUnR3AvSTsiISM7JCExJFFlI1siKVJdbyEjOyQhMkRFJilHcF0mKjMjISM8JCIyMCd5Mj49RktCISM8JCIxak9IPSNmdSpwISM7JCIybix5dSkpKj0tOCEjOyQiMnd5eEJtLHc1IyEjOyQiMXUjPW5yJypcMCQhIzokIjJEIjMpXGskZlRTISM7JCIxWDslUSJIYzJdISM6JCIwN0cjKUhZQiRmISM5JCIxTF9cVmM0OG8hIzokIjFeSjw5PCVIbCghIzokIi92ZyZwTmtYKSEjOCQiMWNBYClRNiFHIyohIzokIjAxNVd3XTooKiohIzkkIjJvZGFMckshcDUhIzokIjFvQj5YbHFRNiEjOSQiMXlIVCMpR1MxNyEjOSQiMmUyU1A3NUJGIiEjOiQiMnJjSy0kZWVPOCEjOiQiMiVSQUtERE8qUiIhIzokIjIpUUMtdkJ2ZzkhIzo3YXEkIjJCKls0cyxHLUEhIzokIjJBaE8leWtWcEAhIzokIjJrSUUmNG5xT0AhIzokIjExWyJIJHk1L0AhIzkkIjJtNEJucmM7MiMhIzokIjIjUjlGJykqcCRSPyEjOiQiMlp1QkUoUUUyPyEjOiQiMScqcHJiU052PiEjOSQiMSUqR0QwYmxWPiEjOSQiMUY4J0hLIz03PiEjOSQiMT1HOyFmWjQpPSEjOSQiMmtHP1pBaipcPSEjOiQiMnNfVjkmKVIjPj0hIzokIjJCLWwoKm8neSl5IiEjOiQiMjl5RT9ZNidlPCEjOiQiMm5wLl1LPyhHPCEjOiQiMiVwY05FeTYqcCIhIzokIjIwMyRlJylvISlwOyEjOiQiMkNNNWUhKSl5UzshIzokIjJ5bTJNSGo/aCIhIzokIjFfLzs8JkdPZSIhIzkkIjI5SyRcbjZbYjohIzokIjJFJHBCSmxoRjohIzokIjI8YHAnbyZHK10iISM6JCIxJ0dUcikqNEZaIiEjOSQiMnRlXlhJX2NXIiEjOiQiMjNeTGoqZSUpPTkhIzokIjImKioqPS8tIUcjUiIhIzokIjJEIj4hZiJHJWZPIiEjOiQiMiNlWnVzNyMpUjghIzokIjIySj49PCxSSiIhIzokIjJqSUluKnA7KUciISM6JCIxcko2QD1naTchIzkkIjInXE5FeHI9UDchIzokIjJsbnVRIkghPkAiISM6JCIxJlJhQDBGbj0iISM5JCIyR0A4MGxOOzsiISM6JCIyb3BaIylvLW04IiEjOiQiMk9SVyJ5KipmNjYhIzokIjJEJ1J0O3JmJzMiISM6JCIyTnNiIno5Y2g1ISM6JCIyek1eTUVlay4iISM6JCIyMTBhb2VdNywiISM6JCIxYShlY00nKiplKSohIzokIjBkQCEqZltPZyohIzkkIjFrJHp3TFVnTSohIzokIjEoKXokUVRYZDMqISM6JCIxbyhwMkQ8QiMpKSEjOiQiMTJielBGSmImKSEjOiQiMWJ6OERtRyVHKSEjOiQiMWMtJFFbKXozISkhIzokIjF4ZzNKJD0lR3ghIzokIjFsVztiSXRVdSEjOiQiMSM0ciYqemA4OighIzokIjEqSFZiWkNSJm8hIzokIjFucUReOjhdbCEjOiQiMTQmcHI+OihSaSEjOiQiMWolPT1zIltBZiEjOiQiMHctOyhwSilmJiEjOSQiMXBZbk4qKj5uXyEjOiQiMk9rMWo2OiNIXCEjOyQiMS9MdCQ+aFhlJSEjOiQiMSRvZjgrX05CJSEjOiQiMjlCKVFxT2d3USEjOyQiMmJKMXEhKSk+OU4hIzskIjJvJ0dBJls5bzkkISM7JCIxSCM0bkkmenVGISM6JCIybEokeWxdOSlSIyEjOyQiMSpmayo+Kik+Oz8hIzokIjIlXEw+KjQ9cmkiISM7JCIxNl9jUTM2RjchIzokIjFEKFwyXko/NCkhIzskIjFhXHhMKD1AaCQhIzskITF6YEhTQ3J4OCEjOyQhMVZBc1JCZU1zISM7JCExOiR5NjVMQ1giISM6JCExVCUpb1xvJypRQiEjOiQhMTh3KXkmWzUvRiEjOiQhMkRMaipwb0R2PSEjOyQhMWhZIylSIWZ3eCohIzskITEkPngqZXcmUl8jISM7JCIxZFhtOEAlcHUkISM7JCIxYXIqZVNpcCcpKiEjOyQiMip5SXA5bCxiOyEjOyQiMXUuJFJpVmZUIyEjOiQiMkZcXiZHanhiSyEjOyQiMFcwcllPVDglISM5JCIxbl1aeUZbOl0hIzokIjEtUHZTPll6ZSEjOiQiMjBzNCw2SHVyJyEjOyQiMW5IZjZ2OEZ2ISM6JCIxVlY9Tm1GNCQpISM6JCIxPkFoREJvbCEqISM6JCIxPVtlQkNdKXoqISM6JCIyWSF6ITNpJCk0MCIhIzokIjI7X2NkYGYsNyIhIzokIjFwOTIjW1l2PSIhIzkkIjJpXFxkbiFIYDchIzokIjJrTHNzOD12SiIhIzokIjE+MzZ5c0whUSIhIzkkIjJlZkE0WlQ9VyIhIzo3YXEkIjJBaElQZXRQPCMhIzokIjEnSCYpRy89LzkjISM5JCIyT3ppbyQqenI1IyEjOiQiMVxdKikqcHhTMiMhIzkkIjE+QTs4KEg2LyMhIzkkIjJhRV5TOWEkMz8hIzokIjJEbV9ceG9kKD4hIzokIjIwQ21ZIzNSVj4hIzokIjFkdzptbkI2PiEjOSQiMjNFKipcOUEkej0hIzokIjJ2bCFILjltWj0hIzokIjJHYEpUcm5pIj0hIzokIjJ2SGk8JEc6JnkiISM6JCIyYiJmRGlwS2E8ISM6JCIyVkw1ImYnKXpCPCEjOiQiMiM9IltzdXVOcCIhIzokIjElPSV6eC1tajshIzkkIjBtOVleZVNqIiEjOCQiMnhzQz8mNHgvOyEjOiQiMlVeJ1JodHp2OiEjOiQiMWgzc2llOFo6ISM5JCIyTGQzYywkeT06ISM6JCIyKkd4J0cjUnQhXCIhIzokIjJkSG4oUUIpSFkiISM6JCIyJmZRW3QyX045ISM6JCIyQm4qNCZlUyQzOSEjOiQiMlEtRTQwSzlRIiEjOiQiMlkqKSopM1QleWE4ISM6JCIyZVNRcyhlUUc4ISM6JCIyKT5jJW9nQkFJIiEjOiQiMSZcc1tqJEd3NyEjOSQiMiZmTkpyMmJdNyEjOiQiMiZlJCoqW1kzXUEiISM6JCIxJUcyPGtRJyo+IiEjOSQiMnhQSSVHOlV1NiEjOiQiMiRlJj5CWk4kXDYhIzokIjJUIVE3cm5OQzYhIzokIjJUKEh0RSZmJSo0IiEjOiQiMiIqKlxmTmJodTUhIzokIjJvIlFPRlV6XDUhIzokIjJMMCV6Z0UnXC0iISM6JCIwcDNIZSYzKzUhIzgkIi8mNEhhYjd2KiEjOCQiMUBQKFJTSi9dKiEjOiQiMSpReldtcnpDKiEjOiQiMHprL0tdTSoqKSEjOSQiMSYqXE85M1ZPKCkhIzokIjAieiZHRXFrWikhIzkkIjFzLmQrVTc4IykhIzokIjF3MWloPSZmJXohIzokIjFSLSMpZT9fdXchIzokIjI6U1AqZig+JSlSKCEjOyQiMWJTTiZcYHM2KCEjOiQiMVdBK2BQbUlvISM6JCIxPSUpWzdETFFsISM6JCIwKWVhQlMqKlJpISM5JCIxQUMhKj5vV05mISM6JCIxZUcsV25jQ2MhIzokIjBSLlVSP3RJJiEjOSQiMWBnZkt5eCQpXCEjOiQiMTFCNk1EN2FZISM6JCIyJj5vNUVgbD1WISM7JCIyMUUpenB0eXhSISM7JCIwVDIocFwsS08hIzkkIjI6PiwjXGcnPUckISM7JCIxbSEqPSdIL3kjSCEjOiQiMScpSEpuPDJxRCEjOiQiMk1aXVokR1czQSEjOyQiMk5DOkdXWz0lPSEjOyQiMmkmeTlcOiF5WSIhIzskIjJVRHdEQiNcIjMiISM7JCIxT1ZXcyE9RnUnISM7JCIyJmVubTZPZDNCISM8JCEyWikqPlY4PGJ3IyEjPCQhMV50YldLeEkhKiEjOyQhMShbJWVDanF6PCEjOiQhMmQjUj5iQ0t3TCEjOyQhMXAzXjslSFQmZSEjOiQhMjgmbyNHc2whKlEjISM7JCEyMV5tUlxuRjMiISM7JCEybGovKjNJKmYpPiEjPCQiMUQvZmNeLixgISM7JCIyQSEqPXkjKWY4QCIhIzskIjI3OERiJ3pFMD4hIzskIjIwdEY4RUQzayMhIzskIjInXGJQISpSbz5NISM7JCIxWikqZlcsZUVVISM6JCIxYiUpXCVvPkYvJiEjOiQiMFljTioqKmVgZSEjOSQiMWlza3ZRWV1tISM6JCIxOTMnNHRvIUh1ISM6JCIxRkMsJSo0Knk9KSEjOiQiMCIzXTdfI3AjKikhIzkkIjBmOmRrMXBrKiEjOSQiMlU3aHA1KSlbLiIhIzokIjIwWGE3dShSLjYhIzokIjJtTVB1WEguPCIhIzokIjJFJCkzcC0meU43ISM6JCIyOUVUYUVjKSpIIiEjOiQiMVY2ZHJbaWk4ISM5JCIyJEcqcDcyalRVIiEjOjdhcSQiMmA1JlJRejtYQCEjOiQiMSg0RigpPSNHNkAhIzkkIjBZaW1HPHYyIyEjOCQiMSxCSSJHJCpRLyMhIzkkIjFkPy1HLVY1PyEjOSQiMmBLIip6K1tyKD4hIzokIjJHLlpUOG1TJT4hIzokIjJXSUByYS43Ij4hIzokIjJMQzJiU3kmeT0hIzokIjFyNWx2eT9ZPSEjOSQiMWwqPW8jejU5PSEjOSQiMlg1SCFRSkgjeSIhIzokIjJXRyUqSF93MnYiISM6JCIyeUBHJXokcCY+PCEjOiQiMjxWKFFvNm8pbyIhIzokIjJiZEwkRyU+ImU7ISM6JCIxRj5BRigqKXlpIiEjOSQiMmBVKT5hYyp6ZiIhIzokIjJlUyswJilRJW86ISM6JCIyJFtcLHghPiNSOiEjOiQiMlg7JXk4Vkw1OiEjOiQiMS43cSUpM3kiWyIhIzkkIjIvPGQpKWZgTlgiISM6JCIyT1U2JykqZWtEOSEjOiQiMiZvQWUuKzApUiIhIzokIjEjZiZbUnF2cTghIzkkIjIkNEE6VHJ2VjghIzokIjIxN28sX1JxSiIhIzokIjI2cDQlKlsjZiFIIiEjOiQiMUVQRFJNU2s3ISM5JCIyNyMpXEx3ZSVRNyEjOiQiMSY9OGF0VkZAIiEjOSQiMjN3SkJNVXM9IiEjOiQiMVgoPkYzUD47IiEjOSQiMkF3dU51M284IiEjOiQiMWxNY3FoJD02IiEjOSQiMiVRcUxcZypwMyIhIzokIjJFTyUqZXJpQTEiISM6JCIyUD86Sywzdy4iISM6JCIyI0g9PjQ3Kzg1ISM6JCIxJzNiXCgpKjMlKSkqISM6JCIxOTUvKT1iemoqISM6JCIxJHlQSTpFN1IqISM6JCIxTGNUcicqXFYiKiEjOiQiMSNcVDVjYVYqKSkhIzokIjEiKj4ob1JiTGspISM6JCIxOGooPSlwMCFSKSEjOiQiMW0qM2ZRNFM4KSEjOiQiMUJZRjxOd3V5ISM6JCIxVjJaSnMoPWgoISM6JCIxY2tjSD8jXE0oISM6JCIxJSlSKilbL1x0cSEjOiQiMSVSI1wkSC9zeichIzokIjFYKVI0KVFzOmwhIzokIjFVUC4jW2UoR2khIzokIjFOeiIzM3lnJGYhIzokIjEiKTNBZGtfUGMhIzokIjAlXHJhYC5MYCEjOSQiMCYqRyQqM1JFLSYhIzkkIjFUPVI9JClbMVohIzokIjElb0cydWdbUSUhIzokIjFlIVxkO2wiZVMhIzokIjJXeDlHZ0xwcyQhIzskIjElKTRbY1B6IlIkISM6JCIyJipvMWNlNk0wJCEjOyQiMTtLczkvUjdGISM6JCIxN2VoOCQ0InBCISM6JCIyViF5WHkjeU0tIyEjOyQiMkFLPlJyeVhuIiEjOyQiMm46JypcelEsSyIhIzskIjFSUSp6dTJ2YiohIzskIjFoSVpZTFNPZCEjOyQiMWtUM3hpdTA7ISM7JCEybm1HJlx4QWdJISM8JCExYShScjlud2wpISM7JCEyT0BDSUthJillIiEjOyQhMiV5ZT5ANGZRRCEjOyQhMmI3cjJRViZcSCEjOyQhMkA8X0liZFYqPSEjOyQhMVZrJT02dygqWykhIzskITE9dVE8M3kpKnAhIz0kIjFreSU9Nm5mRSghIzskIjJGPTsqZSkpUj05ISM7JCIyYHVlR2QoKSozQCEjOyQiMjJkKUgnXCFcPkchIzskIjJOYTpMPSM9Yk4hIzskIjFuQURlbm81ViEjOiQiMWokNHk9ZWkyJiEjOiQiMWVFLnIhZUMlZSEjOiQiMXknKWY7PkAtbSEjOiQiMURYLDgqPjVOKCEjOiQiMUMrJ2VtMmszKSEjOiQiMFhna0RucyEpKSEjOSQiMXZ1elcoR0xeKiEjOiQiMl54ZCRSKHovLSIhIzokIjIkZiNwb1U3IykzIiEjOiQiMihbVTZ4b2VhNiEjOiQiMiVROUYtP20+NyEjOiQiMjtFSClRYVwkRyIhIzokIjJbIVJ2YTk5WTghIzokIjIxKXBJMSxsMjkhIzo3YXEkIjFEMEt4OFk7QCEjOSQiMi5ZK2ZeRD8zIyEjOiQiMjFKYzd1OHgvIyEjOiQiMUZoKD4peWE4PyEjOSQiMnl0ViZbKVwmej4hIzokIjJMOkEwVlRkJT4hIzokIjIvXSo+d1M5Nz4hIzokIjJZPVYnZSd5KHk9ISM6JCIyOVJpS0JsYyU9ISM6JCIxS28xJHpBRyI9ISM5JCIyMztUKEchcC15IiEjOiQiMndiSzg1PyFbPCEjOiQiMltrd2NWITQ7PCEjOiQiMkImeWRVRFwlbyIhIzokIjJOblxyKG9CYDshIzokIjItYHYmUjxMQTshIzokIjI7JjQpR0EkeSJmIiEjOiQiMjFJbixAJmZoOiEjOiQiMjlKWjdVcDxgIiEjOiQiMWlWKWVdMEJdIiEjOSQiMndXVCF5Nj90OSEjOiQiMjA/eUdRX1dXIiEjOiQiMTI1KWVbYGdUIiEjOSQiMWxZa3J1KnpRIiEjOSQiMSJbI2ZRaEZnOCEjOSQiMiRmUld2LSlHTCIhIzokIjJjMS1jISkqejA4ISM6JCIybnEqKW8pUS16NyEjOiQiMmY3UGkmNGFfNyEjOiQiMkAobyk+clFqQSIhIzokIjJrSW0uLi8vPyIhIzokIjI3dk1zIkdzdTYhIzokIjJzKT1ALCl6I1w2ISM6JCIyQSRvU3ojZVM3IiEjOiQiMjkwczwkKVIhKjQiISM6JCIxS3U2Q1M/dTUhIzkkIjJIVFZEN0cmXDUhIzokIjJcampJJW8pXC0iISM6JCIyYyM0QWZAYis1ISM6JCIxKUhlXyg9JD53KiEjOiQiMCJRO2U7dz0mKiEjOSQiMVVKek9ga3YjKiEjOiQiMVw0Rnc2PkshKiEjOiQiMVpCTXdUKXp5KSEjOiQiMS5bNG4pKmVVJikhIzokIjEnSGQxIyplYkgpISM6JCIxPEhVYkNWWSEpISM6JCIxKSkpcEwjenUleighIzokIjImSDJUMWIvU3YhIzskIjE9Z0grXSg9RyghIzokIjFpIlwnR0shKT5xISM6JCIxbzA6KTRBTXYnISM6JCIxJlsqUXF1TiNbJyEjOiQiMSllQ2kyemk/JyEjOiQiMjAxNjZzNlwjZiEjOyQiMD02ZCtbIVFjISM5JCIxS2xmKG9pYk0mISM6JCIxcHM+KGZHdS8mISM6JCIxOmUmKlFPdFZaISM6JCIxXG89JXkocE1XISM6JCIvO3AzISlvP1QhIzgkIjInKW9hJWV4QS1RISM7JCIxKCpmcSRvJioqek0hIzokIjJVLyYpPjQxWzokISM7JCIxRikqWzw1Y0ZHISM6JCIyMiJIOilRaCIqXCMhIzskIjJPOjRrNGouPCMhIzskIjJsVHgkZU1jVD0hIzskIjIzVUhtI1tdNzohIzskIjIvKj4rOlopPT0iISM7JCIxOmBKamRtbyUpISM7JCIxbicpUlR2LkRdISM7JCIyaklpVkdDPVQiISM8JCEwKXBBek9qdEMhIzokITEnRzRhQ1onR24hIzskITBXUWFsJXBFNiEjOSQhMnlXdC8lbyI9XiIhIzskITJOPCpIMWZ3WDohIzskITJuVHRMOWZtMyIhIzskITFteGZRTUsjNCUhIzskIjJhNkdcNFlYJ0chIzwkIjFHLVpFeTgzJyohIzskIjEpXDZSLCVbQjshIzokIjF3YE45NTIhSCMhIzokIjJjejpoWl42KEghIzskIjEleUJ0PCg+cU8hIzokIjF6Q0RyMSdbUSUhIzokIjBzLHh0OCc0XiEjOSQiMSZmQTNePiNRZSEjOiQiMTt5JnpKV19jJyEjOiQiMU14a1pYaCdHKCEjOiQiMSo9SDVJKGUqKnohIzokIjFZQ3UoKUdbLSgpISM6JCIxJUd4LTojUSVSKiEjOiQiMjAyT20+KFsyNSEjOiQiMmRXUyhbZFF1NSEjOiQiMi4nKno/TlYsOSIhIzokIjEpWyV6cit5LzchIzkkIjJGZ1NESkAkbzchIzokIjJvKHlvbVl6STghIzokIjJfQyRcNyJHQVIiISM6N2FxJCIyL0s/Xk9fdzMjISM6JCIyUCN6KDQhW2tfPyEjOiQiMjwjZXElSGt4LCMhIzokIjJaZFRyak1JKT4hIzokIjJaIillcnp6JVs+ISM6JCIxKkdEUHBCVCI+ISM5JCIyeCd6RlgqKikqej0hIzokIjInXEV6Kzs1WT0hIzokIjF1JUglZTNbNz0hIzkkIjI8ZSc0eihbIno8ISM6JCIyTCdmZC5dN1k8ISM6JCIxJyp6J0dbRk1yIiEjOSQiMkwvKz9CczVvIiEjOiQiMiR5X2U8SjJcOyEjOiQiMkxyNikpb1R1aCIhIzokIjE0N0JncT0nZSIhIzkkIjIiXEJxX2VKYjohIzokIjBzIj0nPktbXyIhIzgkIjJtRiMpW3pQWlwiISM6JCIxcyozPTBLXVkiISM5JCIyMShlMVlBck45ISM6JCIybCI0Jkd2dG5TIiEjOiQiMS92JkhINSN5OCEjOSQiMkg3Mmg+OStOIiEjOiQiMiYqcEkybXdASyIhIzokIjJWVlY/KnpvJUgiISM6JCIyJltlXyt5YG43ISM6JCIyXjEwVjk6MkMiISM6JCIyLzJtOWczVUAiISM6JCIyTVE7P0UxISk9IiEjOiQiMik+IkdTaiY0aTYhIzokIjIjUldEa01ZTzYhIzokIjIlXC4sIVsmNDY2ISM6JCIyPUlAZjF3ZjMiISM6JCIybi1BZCp5M2g1ISM6JCIyW1RdXGE2ay4iISM6JCIyJm84UjleIz4sIiEjOiQiMVpQN2UqUWcoKSohIzokIjBgQ1Y1LFVqKiEjOSQiMSIpM2VsdVUkUiohIzokIjFIKj1AO3ZMOiohIzokIjFwPjhAJXBPIiopISM6JCIwaGI3eDBSbikhIzkkIjF4aDQmXGBPVikhIzokIjAiNC4tLVkjPikhIzkkIjFpcUhRdCYpXHohIzokIjF0JGV2Vm1gcSghIzokIjE5WW1MZl1ldSEjOiQiMkR3K19TKXozcyEjOyQiMS8nUkY+eWQmcCEjOiQiMk0oZiFwVCoqKilwJyEjOyQiMSwpZi1fVyFRayEjOiQiMiZSbENdTmBzaCEjOyQiMU0qcF1bTUAhZiEjOiQiMjs4I0hvXGRFYyEjOyQiMWNxalhlbFhgISM6JCIvcCVbJ29FZl0hIzgkIjEwbC1wWlNuWiEjOiQiMHktKEdQPnFXISM5JCIyJlIkZWNgMno7JSEjOyQiMVZiYDhAKjQnUSEjOiQiMlgjKXo1YyYzXU4hIzskIjIuVSkpKUg1Lk9LISM7JCIxQlZWYV8oKT5IISM6JCIyJUhZMXNGJUdnIyEjOyQiMkJZdWRkdGlHIyEjOyQiMU9od3o7XnI+ISM6JCIyeTxFZUlPKGY7ISM7JCIyTkUmUlclUjxOIiEjOyQiMlJDX04hem5aNSEjOyQiMSpwKno5UHRvdSEjOyQiMihHIlFVZGYjeVchIzwkIjJ3OypIcCZRIylbIiEjPCQhMWBtQCRHNCIqXCIhIzskITIoeWwkR2w9R1MlISM8JCExNEhGdm83RHAhIzskITEwc3UiKnp2XCQpISM7JCExUEBlJmZNUm0oISM7JCExUCFmcVMlUS1YISM7JCIxXHVbKFslelBRISM8JCIwPllgQSV5cGchIzokIjEqSC0kM08wMjchIzokIjJlLlsoZlJqQj0hIzskIjBrKCk9SiJSYkMhIzkkIjIoKnlgVyxTUTUkISM7JCIyMWJqO0N0IXBQISM7JCIxejc6SyJlKVtXISM6JCIxYT5AKmZ5I1JeISM6JCIxQHRYdFchZSRlISM6JCIxVmJRWyllVGAnISM6JCIxRyRbSkIleUlzISM6JCIxLCJlM0FwSCN6ISM6JCIxeCkpKXpAeCgzJykhIzokIjA2Zz5RJypvRyohIzkkIjFjJlx6PyJbYyoqISM6JCIyUE4jKXpwLDwxIiEjOiQiMktkelJhQG83IiEjOiQiMil5VGVbUio0PiIhIzokIjE4OmA5XkBhNyEjOSQiMmU3ZyJ5d1s7OCEjOiQiMkEpUl9VJT15UCIhIzo3YXEkIjFeTSgpKXpSKGU/ISM5JCIxKltUQjRQSi0jISM5JCIxUCJRKUhTbSgpPiEjOSQiMiNSXy9ubE1fPiEjOiQiMUhBbGY0QDw+ISM5JCIyalwlUTJORyMpPSEjOiQiMmNjUihvLWZaPSEjOiQiMkY8JT1ebjo4PSEjOiQiMmtWOU5lMiF6PCEjOiQiMTJCLnpoO1g8ISM5JCIxKlsmKioqUmE7ciIhIzkkIjJ1XCJHTkFceTshIzokIjEjeSQ9L3ZwWDshIzkkIjE7LGIqZiZHODshIzkkIjJkP0pIR3A3ZSIhIzokIjJIKFskSGFlJ1w6ISM6JCIyPVBkYl9nJT06ISM6JCIyKkdwJj5hendbIiEjOiQiMjFHMV46PHRYIiEjOiQiMiczTkRVQlBGOSEjOiQiMmtETmFzVHlSIiEjOiQiMikpW154Jik+KG84ISM6JCIyM3dZIVwmKioqUjghIzokIjJqKEhMNkFuNjghIzokIjJXYWg+P0dQRyIhIzokIjJLM3o4OWRoRCIhIzokIjIjKWUsQz1bKkc3ISM6JCIydkAwJTQtNC03ISM6JCIyVXdDKFs+ZHY2ISM6JCIyOlM+Zig+UVw2ISM6JCIyc102OWgzTjciISM6JCIya01TS3FSejQiISM6JCIyd2JjU0lpRTIiISM6JCIxVm5iZUFtWjUhIzkkIjI+VDBtc0JILSIhIzokIjFGc2dgbkclKSoqISM6JCIxYTE4KHpqOnUqISM6JCIwKilbPnRIM10qISM5JCIxOztCLzQiPUUqISM6JCIxOkkoeU8nPkMhKiEjOiQiMXY5YD1yaih5KSEjOiQiMV5SbjNxdV4mKSEjOiQiMW5LQGFgNTskKSEjOiQiMSdIRGs2aC0zKSEjOiQiMU9vO1MlUVAleSEjOiQiMSQqR25rSy8xdyEjOiQiMSVbRFBxcW1PKCEjOiQiMW5iPz1INkRyISM6JCIxTyYpZXFzJzMpbyEjOiQiMmxeQShbWVdMbSEjOyQiMmNLPFsnelAjUSchIzskIjBOQl8nNEJGaCEjOSQiMWxVST53Z25lISM6JCIxLHQ+JltpSmcmISM6JCIxWyVIMGQ3T0wmISM6JCIxeHUhKTM4dmVdISM6JCIxLzAiPk1sJXlaISM6JCIybGkwcCFbdiNcJSEjOyQiMTtBKSk9eHYsVSEjOiQiMFkrPnR5ZCFSISM5JCIyJikqcEUzPkswTyEjOyQiMTshKlJOZjcsTCEjOiQiMiUpcHdpRSk+JSpIISM7JCIyLSZ5eFo8JWVvIyEjOyQiMTRHXmdObXhCISM6JCIyODRaPGdfOjIjISM7JCIyM0YoSD0saHA8ISM7JCIyYEY5LSVRLXU5ISM7JCIyKXB1dUZYKm89IiEjOyQiMVglR1dMSDE1KiEjOyQiMW04JylRNF5dayEjOyQiMmxNKjQjeT9MJFIhIzwkIjJmZ3ciZSwjSGQiISM8JCExUS1AYmNuYWQhIzwkITI5UCE+OGgkUlEjISM8JCEyYTAzI0hoImVmJCEjPCQhMWY/aUNyJ3AhUSEjOyQhMXomZixwK1ZnIyEjOyQiMjdJIj5cOXgmUiIhIz0kIjAnKT0jUTIpXDolISM6JCIxJEdUbFc8XiwqISM7JCIyUGc8N19dKFE5ISM7JCIxeih5JDQlNCozPyEjOiQiMjgsWzIkcHAuRSEjOyQiMW5yNlZnSj5LISM6JCIyZT4qNChwMkomUSEjOyQiMW9XVGxiNy1YISM6JCIxTkZwLEYqRzsmISM6JCIyJnAnSHFjIXBKZSEjOyQiME5FVHBbXF0nISM5JCIyYjk6KG9gX3pyISM7JCIxJGU6NUhLRyZ5ISM6JCIxXiJlN09QR18pISM6JCIxMyJRKm8iKip6PSohIzokIjEwRDlFazxaKSohIzokIjJiaWFJJFEmKlw1ISM6JCIydGUtQHlbVzYiISM6JCIyTyllQy4sO3k2ISM6JCIyQUk4NT5lNUMiISM6JCIyaHRJeiNINy44ISM6JCIyYHpHMU1UVk8iISM6N2FxJCIxczlYU0pzSD8hIzkkIjJXOjN6IykqXCQqPiEjOiQiMmxDa2hAM3UmPiEjOiQiMjI8NihcbVpAPiEjOiQiMVRyXUZSdCYpPSEjOSQiMUN4MzshNC0mPSEjOSQiMjd1SVxzSVwiPSEjOiQiMngkKXohXHQjKno8ISM6JCIyJHlCYSdHRV91IiEjOiQiMkdSbzBrYDNyIiEjOiQiMndTKlI+USRvbiIhIzokIjIlKTQ+I1siKj1WOyEjOiQiMWpoZTQmUio0OyEjOSQiMkE4RiRIPzV4OiEjOiQiMidSIilbQzNwVzohIzokIjItKEhMR29yNzohIzokIjIwM3ZXcSg9IlsiISM6JCIyLDQ6ImV5NV05ISM6JCIxM3lBWiZ5JT45ISM5JCIybVtIMjQpSCpRIiEjOiQiMlZeblg7aSZmOCEjOiQiMShcZDI8ay1MIiEjOSQiMWZaMmZjUiw4ISM5JCIyYyJIdnduJUhGIiEjOiQiMl8vRSU9biFcQyIhIzokIjJbIXombzlrc0AiISM6JCIyRyUpXFtiMis+IiEjOiQiMVBxPlNiN2o2ISM5JCIybUZqKG9wZ082ISM6JCIxbXl4MDVXNTYhIzkkIjJqJnBVLXFoJTMiISM6JCIyKGUydUxVN2Y1ISM6JCIyeUAwWFxeUi4iISM6JCIyQ213PmQnMzQ1ISM6JCIxI2VQbUVjXiUpKiEjOiQiMTAiXC9DREFnKiEjOiQiMSNcNzxwIik9TyohIzokIjE2amg0ISoqUTcqISM6JCIwKm9PQSssKSkpKSEjOSQiMT4xKVx1LlJsKSEjOiQiMFAoM05UQUAlKSEjOSQiMCIpNFAvciYqPSkhIzkkIjFNd2BhTF1leiEjOiQiMSZvPTI3V3ZzKCEjOiQiMXR5JipmdD0nXCghIzokIjE0YSx4ZyFSRSghIzokIjEmeiNIZDU7SXEhIzokIjFXZyZbLDVXeichIzokIjE9SylIeDtoYichIzokIjEsJkguSGdaSichIzokIjFBNHMwTiUpcGchIzokIjFDKyhwOS00I2UhIzokIjEqZitrI1FebmIhIzokIjE4LW5Eekk0YCEjOiQiMEBmbiZwKGYvJiEjOSQiMCY+JHlGIUh4WiEjOSQiMUM3NFU3Ni5YISM6JCIxRSNbUjA+TUElISM6JCIxQmk/bG5MUVIhIzokIjJCcjNXKW87W08hIzskIjF1LiNmJGVWYEwhIzokIjImKj0lSDR4JVwwJCEjOyQiMW1PQ1NmJVF2IyEjOiQiMlB5Iik+PXk7WCMhIzskIjJEW1JvO2EvOiMhIzskIjFZIXBoMnpFJj0hIzokIjJhZGZtO1E4YyIhIzskIjEzOzYjUTMpejchIzokIjItN011TyFwNjUhIzskIjFMI1xmKSo9Z2coISM7JCIxYzpEV0FhK2AhIzskIjJ3KipSKSlvaWlCJCEjPCQiMXBRalhaM2Q5ISM7JCIyOmc7I0ghWz0tJCEjPiQhMFolSDcwIltLKiEjOyQhMks9X3hYRCZlNyEjPCQhMXNyaEEwUzl0ISM8JCIxIiopRzpXTWBMKSEjPCQiMU54P1cjemJbJCEjOyQiMWplVykpNFgvciEjOyQiMlRldyczPGNaNiEjOyQiMjI9MCshPTxSOyEjOyQiMSIpZSZRQU0tPCMhIzokIjIyNSdcTGZJSkYhIzskIjJ3TS0obyZSbEokISM7JCIyJEgwVG1RIj0jUiEjOyQiMWFkeFM9Z1ZYISM6JCIxXDMyMlldeV4hIzokIjEsNVdvRD5CZSEjOiQiMUdhJmZuOlhaJyEjOiQiMXNRKDN5SSdIciEjOiQiMTBwJ29memd5KCEjOiQiMSpIWXhOMj1XKSEjOiQiMWMyT2F5OCY0KiEjOiQiMWFPNyVbRFp1KiEjOiQiMjFbLkwwXSpRNSEjOiQiMiVvIVxPdWhHNSIhIzokIjJbN2trL1RoOyIhIzokIjJRdSc+IXpOKEc3ISM6JCIyPlFkTlMwMUgiISM6JCIydzNNIWUoPTxOIiEjOjdhcSQiMmxUc3BkLTErIyEjOiQiMkwlUmshKTR0aj4hIzokIjJRcXhTViMqcCM+ISM6JCIyY2I8ciJ6VCEqPSEjOiQiMic+S0tmIVJTJj0hIzokIjFMS10+eSl5Ij0hIzkkIjI8SFVuNicqPnkiISM6JCIyZUtdelQmUlk8ISM6JCIxPFc8IUg7NnIiISM5JCIxdWNMSHo9dzshIzkkIjJsKWZXIW9QO2siISM6JCIxbkBVbjBcMjshIzkkIjJuaCcqSCYpb1BkIiEjOiQiMWpyYl07XFM6ISM5JCIxNGtwNFluMjohIzkkIjJoUGZicEhgWiIhIzokIjFIRmp5XVlWOSEjOSQiMigqUiZbWV4zNzkhIzokIjJFXzdDayE+IlEiISM6JCIyaisnUkcqeTJOIiEjOiQiMk1dWj1PVzNLIiEjOiQiMmsra3l3eThIIiEjOiQiMl8iZnkiKT5QaTchIzokIjIwK3U2VjdRQiIhIzokIjI5JWVCQXhvMDchIzokIjJaSDNNPiYpejwiISM6JCIySCdmSilSI3BdNiEjOiQiMjYzRzxbKHpCNiEjOiQiMV8wYDolKkcoNCIhIzkkIjJXYDh0MWU2MiIhIzokIjIlNEJBIzMlUlg1ISM6JCIyOXUiW3AmKSkqPjUhIzokIjFiIT5gKWZLXCoqISM6JCIxUj9AY187LSgqISM6JCIxNEppKik9SGUlKiEjOiQiMWRJeXQtZDwjKiEjOiQiMU0zMjg+JCl6KikhIzokIjFVZWRMcydbdSkhIzokIjBLOiJmKT1DXikhIzkkIjBpZzwveEBHKSEjOSQiMU1zKipbeHhgISkhIzokIjE+XkRlTyFvI3khIzokIjFqJVxnLSl5K3chIzokIjFeVWVHNkF2dCEjOiQiMVAqNGd2ZSZcciEjOiQiMSg0SVM2S0sjcCEjOiQiMUgqcG9YZWNwJyEjOiQiMmJ1MCVSPURtayEjOyQiMSZwTVpeTFdCJyEjOiQiMiY9Jls7cFQnKipmISM7JCIxJjMvMGVTOHcmISM6JCIxPEpxeSlHIT5iISM6JCIyTkNpNDJbQUYmISM7JCIxZj5tWjZmP10hIzokIjF3MSUqKWU3UHclISM6JCIxRSkqKT51UzhdJSEjOiQiMSkqXCVvMCVITFUhIzokIjJ2I3lvaEldZlIhIzskIjEoXHdrWFMrbyQhIzokIjJfdDRjQ2leUiQhIzskIjIzJFxyJEdqYDUkISM7JCIyViNvKT5sXTkiRyEjOyQiMXZPemRzajlEISM6JCIxWEEwInphbUAjISM6JCIyLT0wUCd6KCk+PiEjOyQiMlliJCk9NFJ1aSIhIzskIjIiKj5jPSdRSFY4ISM7JCIyN2k1ckAjPXM1ISM7JCIwPi0wKSk0Vj4pISM6JCIxOSZwWE5gZiFmISM7JCIxOio0eHkpXDVSISM7JCIyd1JjMyE0eGRBISM8JCIwLS07JnlLayoqISM7JCIxSkFILydRcCM9ISM8JCEyKHAoW21CPVQzIiEjPSQiMiVHTXQrbiZwQCMhIz0kIjJbK089Siw4RyIhIzwkIjFIVUokMyg0X0ohIzskIjE5VnFvJ3klW2UhIzskIjEkbzhQPDBbSSohIzskIjFaZVZzKD0tTSIhIzokIjInUVIvKHo7NiE9ISM7JCIyY0ZXcSZ5OC1CISM7JCIyTEU3Ykc8XSRHISM7JCIyTCoqZjxLLVFSJCEjOyQiMmAiUkQxbSx1UiEjOyQiMSh6ZEdtcT5kJSEjOiQiMHY0Z0BoVj0mISM5JCIxQ0NDREE2M2UhIzokIjFKblttbE5TayEjOiQiMU9QP2c0WnlxISM6JCIxLSUqZWc7Nj94ISM6JCIwJz16cylIS08pISM5JCIwNywneV8xMSEqISM5JCIxMyFIJ2VVN1onKiEjOiQiMkYpWyQ0MTomRzUhIzokIjIkZih5NFo0PjQiISM6JCIyQ1xYVVkzWzoiISM6JCIyI1s7JSl6Kzk8NyEjOiQiMnZtYV1VWCl5NyEjOiQiMjg0ZVsmbygpUjghIzo3YXEkIjJDZEhfQHo4KD4hIzokIjJiSnkjUSNIUSQ+ISM6JCIyRyM0NEtGVCcqPSEjOiQiMiQqXCVmImVqImY9ISM6JCIyOzhveGM7QCM9ISM6JCIxTktcNnFJJnkiISM5JCIxLih6X05xKFs8ISM5JCIxZWZgKG9URHIiISM5JCIxIyoqSCI9X2x3OyEjOSQiMVljWj1QOVQ7ISM5JCIycyFvKVIlei4xOyEjOiQiMk1XITNoZ09yOiEjOiQiMjs2KlwvSjpQOiEjOiQiMkFPU0lcP01dIiEjOiQiMk1TPEJqJj1xOSEjOiQiMjMyRTpqaHVWIiEjOiQiMUwpUXI6ZF9TIiEjOSQiMicpXEgrV3dOUCIhIzokIjJDOyI0VyU+Q00iISM6JCIyPHlnWD4jeTY4ISM6JCIxKCo0I1FEZDtHIiEjOSQiMjkqKipIQVYuXzchIzokIjEjZVtJJDQhSEEiISM5JCIyUF9oNz9WVT4iISM6JCIyWGMpeSVlWWc7IiEjOiQiMmJZaiczbUhRNiEjOiQiMmBpPmVdejQ2IiEjOiQiMjpDJFJGRjMlMyIhIzokIjJXKUhTel9mZDUhIzokIjI8V1ElW3ldSjUhIzokIjI3LUx5bzdlKyIhIzokIjF2YS4kW0tdISkqISM6JCIxb2c1UGJ0YiYqISM6JCIxI1I7UFZ0LEoqISM6JCIwckU+RXEjbyEqISM5JCIxRCczVjtEKkgpKSEjOiQiMSgqZVJELysmZikhIzokIjEqcCh6Wy5KaiQpISM6JCIxJClmNjQ/aE0iKSEjOiQiMW0rL14pKWYzeiEjOiQiMXVGYV55KltvKCEjOiQiMXpOPSRmcUlZKCEjOiQiMiZRNCJmPD1FQyghIzskIjFGNDwlXCopSC0oISM6JCIxYEdpJDQjZi5vISM6JCIxWGchUWsvUWUnISM6JCIxbUtKTisqSE8nISM6JCIxJCkqKil6QDMwOSchIzokIjE+KnBeNUdkImYhIzokIjFHNThOIlEhKW8mISM6JCIyYkdWbk9ib1gmISM7JCIyWFdmb0VMO0EmISM7JCIxeE5iOSdvPSlcISM6JCIydlhCNkAzcnQlISM7JCIxPHVicGomcFslISM6JCIxNio9OF0lM0pVISM6JCIySycqKnlzWENwUiEjOyQiMS1BbEkpKUcsUCEjOiQiMXIjb0MxKj5GTSEjOiQiMVUjWyQ+KUhyOSQhIzokIjJzWEh2WXI5J0chIzskIjJaMCY9Vy8lNGQjISM7JCIyQlMxNipccXdBISM7JCIxdUJaJEdgMCk+ISM6JCIyT2pdKUhSNSZvIiEjOyQiMm5hM3R6U1NSIiEjOyQiMjlPWyhlKT1CNiIhIzskIi9vJioqKSllQlkpISM5JCIxYHBOXiMzQS4nISM7JCIyJXo/LSY0KT03UiEjPCQiMlt6JCllaFl0PCMhIzwkIjFoTCcpKXlRLyopKSEjPCQiMSdmN3AtTHk5KiEjPSQhMmVyQTVvQypIPSEjPSQiMVttbSY+azpvKiEjPSQiMS9jSFFFQyNvKiEjPCQiMVBALSZvSjJaIyEjOyQiMVRqIlxmJ1JJWSEjOyQiMTMmKVsqRzBAVyghIzskIjJuJyp6SCdcRyczIiEjOyQiMmldIlsiKTM1I1siISM7JCIyTD5cKGZyVkI+ISM7JCIxSzVsb2hkLUMhIzokIjJ2WiZmNkoxOEghIzskIjJXLCM+JTNlKFxNISM7JCIxMCZ6ZC1QJjNTISM6JCIxbHdga3EkZmUlISM6JCIwNjVYITQqKXleISM5JCIxZXpQSyR6WHkmISM6JCIxNF8jNGx1LlMnISM6JCIwbm1iak1RLSghIzkkIjFfQTo+WnJfdyEjOiQiMVc2OVQpelxHKSEjOiQiMWpwJXpzMyk9KikhIzokIjFHWGpHK2ZfJiohIzokIjJwJClRXUMiXD01ISM6JCIybCRIIUc5YjkzIiEjOiQiMUEiSCJHYS9XNiEjOSQiMnhHdWxdc2g/IiEjOiQiMiRRXVN1NHduNyEjOiQiMnomSG0mPlsoRzghIzo3YXEkIjJpa1lxSmI/JT4hIzokIjEtQC1EVXouPiEjOSQiMiVbdl9EZW1sPSEjOiQiMmQ7RzY/MngjPSEjOiQiMFJcMGtjKip5IiEjOCQiMmFeIXlYS1hfPCEjOiQiMWhEJCpma0I6PCEjOSQiMTFLYj5iTXk7ISM5JCIyKTRmQVMpPT1rIiEjOiQiMShSPyxOJHAwOyEjOSQiMm0xIVEjei4rZCIhIzokIjIoKW9JTC0jeU06ISM6JCIySil6IylRajArOiEjOiQiMiVHRClbJzMmZVkiISM6JCIyLVhbLTAmPUs5ISM6JCIyPm0nRyhIdCEqUiIhIzokIjJzaTlGd0NsTyIhIzokIjJjPTc9TlZYTCIhIzokIjItMipwPXo3LjghIzokIjImKnouQm5zQUYiISM6JCIyTCRSenR4Jz5DIiEjOiQiMiVwbyR5NCtBQCIhIzokIjJjcyVHPVQmSD0iISM6JCIydV1tJnBHQGE2ISM6JCIycHo6J0cqZWY3IiEjOiQiMk1dQSZlYDwpNCIhIzokIjIsKHAmUmJZMzIiISM6JCIyazdLJUgqZVIvIiEjOiQiMnNbYVhSLHYsIiEjOiQiMVY0X2ZjbDkqKiEjOiQiMDNvXHVjJWUnKiEjOSQiMTZZPCw5UTElKiEjOiQiMVp5KkgxMyVlIiohIzokIjFbQzVJJj1YIiopISM6JCIxN0tKJlIlb3UnKSEjOiQiMWB2bVk7JilRJSkhIzokIjE0I1tvbENwPykhIzokIjJsJClmNy1eKHl6ISM7JCIxNCFlKCl5M1R2KCEjOiQiMWxHKlJcKHBLdiEjOiQiMU4pUXUuTVRKKCEjOiQiMVpiYjhSJno0KCEjOiQiMVZgd2B3aCQpbyEjOiQiMW5GNVw8X3FtISM6JCIxUTAmKmVHLGVrISM6JCIxOFdWcFFTWGkhIzokIjFYRkNiLio+LichIzokIjEsVk0pPW1xImUhIzokIjEmPSJlZ3QkKipmJiEjOiQiMSpmdzJaTCp6YCEjOiQiMWRTJio0blRjXiEjOiQiMTdEW0MmKXlHXCEjOiQiMGUoW1FXXCdwJSEjOSQiMT1KTiJ6RiFmVyEjOiQiMTQ1eEtNJGZAJSEjOiQiMmFML194N28nUiEjOyQiMihHJls+Nks4ciQhIzskIjJ0JEgibyhvQlxNISM7JCIyJ2Z4NCdwdi49JCEjOyQiMSdwI3BkKVJaIUghIzokIjJPelhvVEVEaSMhIzskIjI6PSMpKUduQk1CISM7JCIxVidcbWBFMy8jISM6JCIyVEVbV1xGUnUiISM7JCIyPEElKjQoKmVoVyIhIzskIjIoR2Y8RUlgXjYhIzskIjFkQUpsXTBmJykhIzskIjBGV0hpKj10ZiEjOiQiMjk3cWtsWiNmTiEjPCQiMSdSdWVpKXlJOiEjOyQhMV9yQS5JIm9bJiEjPiQhMExNIT0hUWRzKiEjOyQhMlVFd04hKXBtTCIhIzwkITJzY0htZSFlLDYhIzwkITIxKEdSIyozNykpRyEjPSQiMioqW2J3KypcIjMiISM8JCIyYEhVaSJSWCgqSCEjPCQiMT5nRXZYIilcYSEjOyQiMVcvKGUhZW1AJSkhIzskIjFhKCk+RD49KT0iISM6JCIxRUlENEVkeTohIzokIjJWeDBmKyc9Mz8hIzskIjFsL0kqKVsqPVojISM6JCIyWXYlKlwhNDJsSCEjOyQiMkQhSCEqPnF0JFskISM7JCIxMSY+IlEoKVxDUyEjOiQiMXlMIUdXKVElZSUhIzokIjFKQzZ3bHJnXiEjOiQiMWV5eEgrKDR2JiEjOiQiMW91Rno1d19qISM6JCIxOyU+PlA4USdwISM6JCIxJVE7JjMnbz5lKCEjOiQiMClvMSo+LF8/KSEjOSQiMWJZNSo+TDskKSkhIzokIjBscG8kZWFmJSohIzkkIjJQMWopUSdRKDM1ISM6JCIyL0N0I1FxUHI1ISM6JCIyYWtyQSd6dUw2ISM6JCIyaSFRKSlwY3UmPiIhIzokIjEsdCczbnpzRCIhIzkkIjE8JHozcHQjPTghIzk3YXEkIjI7OFpQZU1FIj4hIzokIjFbdnJ1bml0PSEjOSQiMS4oKTRaJFxaJD0hIzkkIjBZMlkqRy8neiIhIzgkIjJOUClcMSdcdnYiISM6JCIyMTotJ1FHSj48ISM6JCIyMWNtUGV3OG8iISM6JCIxN0VeVlt5VjshIzkkIjFPQTI0NGUxOyEjOSQiMihbPF1ubCEpcDohIzokIjJAYCQqb0QsTmAiISM6JCIyLEtASz8seFwiISM6JCIyKEdFPnomUUNZIiEjOiQiMkNUKWVKMnVGOSEjOiQiMnJNL29fSE9SIiEjOiQiMmAxR08nMzdnOCEjOiQiMSU+eHBSQ3NLIiEjOSQiMUQ1QTFOJVxIIiEjOSQiMnBCX3RfdktFIiEjOiQiMnloMzREN0FCIiEjOiQiMmREVipvMXUsNyEjOiQiMl8kb1pPUiU9PCIhIzokIjJfayZcKFwtRDkiISM6JCIyKmVQJ1FKJnA4NiEjOiQiMmFEJyp5NyxhMyIhIzokIjI4dlBhbypmZDUhIzokIjI6LmdfJUdGSTUhIzokIjIlXFhfLGJTLjUhIzokIjE8LHAlW2kpcCgqISM6JCIxZUlaMnMyNSYqISM6JCIxaSE+V11sWUQqISM6JCIxW3dOXipHTysqISM6JCIwRl1cOCYqcHYpISM5JCIwSE8jelIhW14pISM5JCIxIilbYiQ9ITR4IykhIzokIjFvKz9TRydRLykhIzokIjJ2R01iJFEzOnkhIzskIjEjb3d1MVoxZighIzokIjFOJnlrcWcuUCghIzokIjFeTjYkZU1SOighIzokIjF1WC9xVSg0JXAhIzokIjF5aSRSZyMpNHQnISM6JCIwLkMpPiVvTF8nISM5JCIxLCRcL05odUonISM6JCIxLnZ4ajNgN2ghIzokIjFXJ0d2UTJ5IWYhIzokIjEiSG1ZVC5EcSYhIzokIjE7N0dERyRlXCYhIzokIjEudy93ci0oRyYhIzokIjFQTlhzI1tgMiYhIzokIjEwLWhibzRnWyEjOiQiMSMpcHJhd2hTWSEjOiQiMSJHR0xQLGpUJSEjOiQiMFo/SlUlZSc9JSEjOSQiMjIpMy9cdSU0JlIhIzskIjIoZWtWIilSIiozUCEjOyQiMl9HaGgrXitZJCEjOyQiMW9OcDFTKFI/JCEjOiQiMWM6UT8uT1NIISM6JCIxRDwyMG8oKm9FISM6JCIxbkVzajh0KlEjISM6JCIxPjIpM2dqRjUjISM6JCIyJXBkKj51KWYzPSEjOyQiMXolXCMqXCwlMzohIzokIjJUSCRlaTNRLzchIzskIjFGPS92QC0vISohIzskIjFOZmUpNGwjR2chIzskIjFpdC9hLVU5SyEjOyQiMSozXkw/MyMpKnAhIzwkITEuJj06ajwhWzghIzskITJPdkIqNERMbEYhIzwkITJFayFcWT0iUlckISM8JCEydEkkNHosIXBPJCEjPCQhMi8iSEBPUkAoZiMhIzwkITJwJlE9TTtBSTchIzwkIjEteGk/JnpxXCchIzwkIjIlSFZSMyhlailIISM8JCIxRUM/ZDI3WmQhIzskIjEuSHonPUswIiopISM7JCIydztceSZlZVg3ISM7JCIyQW0qb1JWJGVqIiEjOyQiMi1dYkFISyplPyEjOyQiMlZXMSdvNyc9XiMhIzskIjEvX1BQeW8iKkghIzokIjFRQ0M/NXAmXCQhIzokIjEyUUw2dFBAUyEjOiQiMSYpW3Q/JEhrYyUhIzokIjFGNGwpeU8nR14hIzokIjE0L09UNiVlcSYhIzokIjFQMWJYZCFmSCchIzokIjFsIXpbSDZuKm8hIzokIjFiIT56JilwaF0oISM6JCIxJCp6LzYpXEE3KSEjOiQiMG1HIlJbK1YoKSEjOSQiMXQ2KCoqKT1nbSQqISM6JCIxKVEyW3BXOCoqKiEjOiQiMnkiZm8nNHA6MSIhIzokIjFGNktnaSNRNyIhIzkkIjEpM05IIlx5Jj0iISM5JCIyNDE6VV9TdEMiISM6JCIyVE1CWU8vJTM4ISM6N2FxJCIyKW83RipcQUopPSEjOiQiMiMzQ3JtI0hMJT0hIzokIjB6KT1pQG0uPSEjOCQiMSo9YDRpbFR3IiEjOSQiMShvejY7JylbcyIhIzkkIjFlTk9BPihlbyIhIzkkIjE+MHd3PzxaOyEjOSQiMSpbPkM2TykzOyEjOSQiMkZ2L1QqSCI0ZCIhIzokIjJYIXkpekBdTWAiISM6JCIxbDcvKHkjXCdcIiEjOSQiMiYqSGhlOSMzZzkhIzokIjJjbGpdN2JVVSIhIzokIjJEPGlcJkgvKlEiISM6JCIyejBUVVRxV04iISM6JCIyYUgtLD1iMEsiISM6JCIyR1tSMVcydEciISM6JCIyS2wiXDwpSFpEIiEjOiQiMkNjKHpGdyJHQSIhIzokIjJVbys0XGY6PiIhIzokIjIuVWUpZiNRNDsiISM6JCIxI3BkT0JLNDgiISM5JCIxdCdlZWU7OjUiISM5JCIyKjRYIjQkXG1zNSEjOiQiMWFsLVQ0Tlc1ISM5JCIyOnRdSiMqXGwsIiEjOiQiMSQ0XiVlRVMjKikqISM6JCIwJDRecW0vQycqISM5JCIxYXk0YDBKZyQqISM6JCIxclBVJT1KNjUqISM6JCIxT21HdU5dWSkpISM6JCIxIjRBPSRmWidmKSEjOiQiMTBNYGMoUTZOKSEjOiQiMDpabCR5ZzUiKSEjOSQiMS1tP0k7K3Z5ISM6JCIwI3lUeVVUV3chIzkkIjFRcW5XaikpPXUhIzokIjE8a1lFaFApPighIzokIjFiOWIpek1GKXAhIzokIi52VGApb3JuISM3JCIxI1wpejsrJFtjJyEjOiQiMVE4ZiNcPztPJyEjOiQiMWYtLCcpPlNoaCEjOiQiMVs7dGt5VGpmISM6JCIxKClHR0AqUW93JiEjOiQiMXMlWzBzInpxYiEjOiQiMXVbZFVoUXVgISM6JCIxWWlhdCdSbjwmISM6JCIwIjRrUG8qcChcISM5JCIyRE5rXStWVnglISM7JCIxbSdbOF43IW9YISM6JCIxLFVSPTpIZFYhIzokIjF3QyF5TTs6OSUhIzokIjJtTlJtPG8rI1IhIzskIjIlKlEhRyQzbEJwJCEjOyQiMT4oSHZiX3lYJCEjOiQiMTcrI0gmUSpmQCQhIzokIjI8XjsjM0BFbUghIzskIjJhbSRHUHM4M0YhIzskIjImejZELEU2VEMhIzskIjJhPF1WPz9aOyMhIzskIjJ1QCk9NitmeT0hIzskIjJfZTFeXXJEZSIhIzskIjJOUD1DLG9wRiIhIzskIjFsb0wpM0IoSCcqISM7JCIxaWhnSS9bTWshIzskIjI5N2lTLkNEQyQhIzwkIjImZkZcKypRP2kiISM9JCExaSZSSCkpNGppIyEjOyQhMVQpW1VJTHEnWyEjOyQhMUxRKltaYTJHJyEjOyQhMXc5PlZjSSZvJyEjOyQhMW9DUGI/J1w0JyEjOyQhMid5ZmRYIkd1byUhIzwkITJ3ZHJWITRDekUhIzwkITBsLy0xLW9NIyEjOyQiMTNLJkdHPkhiIyEjOyQiMSNHbjUkKT08ayYhIzskIjBSZkglKXBtLCohIzokIjI3amEwIUc/bjchIzskIjJBWjxWK0EtbSIhIzskIjJ4VF1rS2wpej8hIzskIjJpeWo1IilvXF8jISM7JCIydCNmdCcqeTslKkghIzskIjFDOWdcOypmWyQhIzokIjJrNHRYYTIqKSpSISM7JCIxcD8kemRBOGAlISM6JCIxRlhEW0ljIjMmISM6JCIxUEV6bVYmeWsmISM6JCIyYjBAJypSOSRHaSEjOyQiMmxnRFtbbDQjbyEjOyQiMWtcNnRSd0J1ISM6JCIxIzNxZU5VWS4pISM6JCIxVT5FTnViXicpISM6JCIxaUtqXiFRREYqISM6JCIxUiIpWykzRmQqKSohIzokIjJVVkshSDklPjAiISM6JCIyZiUqb2AkZT85NiEjOiQiMkZFLi0lKUhpPCIhIzokIjI9WyRvNmMqeUIiISM6JCIwPmdHLy4iKkgiISM4N2FxJCIybHJ5R3VFTiY9ISM6JCIyIzNAJHkuMUgiPSEjOiQiMSwjKltrWlNzPCEjOSQiMlhQNydSOjJLPCEjOiQiMkdwTjFuZD5wIiEjOiQiMlgiUikqb202XzshIzokIjIlKnAlRy9PZzc7ISM6JCIyJXpveiNIdU1kIiEjOiQiMjxQImZBVnlNOiEjOiQiMkcnUS1JemUnXCIhIzokIjJbZUtsdk8qZTkhIzokIjFsMCo0YHk9VSIhIzkkIjFoQ01SZFgmUSIhIzkkIjJZY0YhZVZxXDghIzokIjJcbCY+UUZsOTghIzokIjIqUS1HSjJLIUciISM6JCIyTW5rMzk+bkMiISM6JCIyJzRYJylwJlxRQCIhIzokIjIjKXopXDFacSI9IiEjOiQiMkZOVSpmIXAtOiIhIzokIjJsaGk2Nz8mPjYhIzokIjJXbW42KilIJSozIiEjOiQiMlEmMzUjcG0qZjUhIzokIjJMLCMqKmVyNEo1ISM6JCIyJ1JzJD1JKXktNSEjOiQiMWpVWHFfNF0oKiEjOiQiMShITWc1WHRaKiEjOiQiMS4peWo9RyU0IyohIzokIjEtKGZWcjZpJSopISM6JCIxJls3dFZVd28pISM6JCIxNFQyKCopW1BWKSEjOiQiMXgqPSk+b2olPSkhIzokIi94ZyRwdy8leiEjOCQiMDlkVipIWyx4ISM5JCIyWFVUInpfKXlZKCEjOyQiMUIybiFbIyopUnMhIzokIjFzOCZwM2B3LCghIzokIjE0JSo+JT46NyFvISM6JCIwTV4heTdcIWYnISM5JCIxbEJFVURCJlEnISM6JCIxOGskSG07XT0nISM6JCIxLHRebDJEKilmISM6JCIxUjg6NCEqPSh6JiEjOiQiMVVeZWI9J3pnJiEjOiQiMVRFKCpcRGg/YSEjOiQiMTY0elBlOE1fISM6JCIxUVJoRldeWl0hIzokIjE8SiNvJilcKGZbISM6JCIxRicpRy9lKSlwWSEjOiQiMWYhR0k7QnFaJSEjOiQiMVcoPXg3Ri5HJSEjOiQiMSdlZSg0ci16UyEjOiQiMDsucF41QyhRISM5JCIyRVlFeVU2KWZPISM7JCIyTF5VajEmZlNNISM7JCIyTnkhKm8kKVFUQCQhIzskIjJsK3ZXaDUpekghIzskIjEiKikpUSU0WHB0IyEjOiQiMjolKTMtWj5bWyMhIzskIjIkZURUaDNqQUEhIzskIjJPNjwmeS9bXD4hIzskIjJ5KVs3c11QazshIzskIjJBVURpQW9pTyIhIzskIjIsKClSaDYhPmE1ISM7JCIxMDZ4cXZxdnMhIzskIjJqJ1EoNEY1KXBRISM8JCIyL2t1M3IuW2QkISM9JCEyWDppVjpldjskISM8JCExKkcyMm44UVwnISM7JCEvRmEqSFMlSCMqISM5JCEyVD1Ob1EmSCUzIiEjOyQhMnYnMzEpUSI+JjQiISM7JCExO3RuZFArWCcqISM7JCEwQ3RtQCtzTyghIzokITJGImVCUislPWIlISM8JCEyc0FUamwoXGA5ISM8JCIyM1U/JD5VXEE9ISM8JCIxOVZJVjZaXl8hIzskIjEkeloyX2pBJSkpISM7JCIyMk0rJFt3Rmg3ISM7JCIyLVAlWypIS3psIiEjOyQiMjN1JSlSVjBgMiMhIzskIjJOKylbPFknUl4jISM7JCIxViI9a0k5UyhIISM6JCIxcmBDTTE+Yk0hIzokIjFHc0FXXiNwJlIhIzokIjFfTkJrSlB5VyEjOiQiMVl0SCYpKj4lPV0hIzokIjJEYyhbXkNvdmIhIzskIjEoKTRGWTFfW2ghIzokIjFcaTNHIm9ddCchIzokIjFZYlVrQUdMdCEjOiQiMVthJyl5LixUeiEjOiQiMWYlSG53amdiKSEjOiQiMHYmKmZkIUh3IiohIzkkIjFBJ1xseFInKnoqISM6JCIybi8rJzM2VVU1ISM6JCIySEomSHYpR1s1IiEjOiQiMjpRdihwZi5uNiEjOiQiMnlpWF4jPSIqRzchIzokIjJaN3FsMFkuSCIhIzo3YXEkIjFlIlxQb2RRIz0hIzkkIjIoeiJvZylRTyN5IiEjOiQiMVZEJTN4ejR1IiEjOSQiMmlwYVRaZSgqcCIhIzokIjJDLD1yZGMoZTshIzokIjJPbiVvMk8uPTshIzokIjI8Y3BaTV53ZCIhIzokIjJsLTcrIkhuUDohIzokIjJ5WDBKa2giKVwiISM6JCIyKTQlPTh4eiJmOSEjOiQiMmM5T0QhcHk/OSEjOiQiMiJbJlJKUlFJUSIhIzokIjIkSGBubE8pZk0iISM6JCIyW1RaUWRrJzQ4ISM6JCIyOVtbLCRSNnU3ISM6JCIyI28kZixLYSRSNyEjOiQiMkY9P0tLKFIwNyEjOiQiMiIpelslUktDczYhIzokIjI2OVskKVEiKSlSNiEjOiQiMTgmcCMpKjRIMzYhIzkkIjE0OFtiRVd4NSEjOSQiMWIyaE0tSVo1ISM5JCIyKUcmR2c+QnksIiEjOiQiMSM9Z2w5InAqKSkqISM6JCIwLjMhKilIJ3BnKiEjOSQiMSRbZDtraidIJCohIzokIjFNVCo0T211MCohIzokIjAkKW88bkEseikhIzkkIjEoKXlHLyZ6dV8pISM6JCIxcDdUTzVccCMpISM6JCIxPUlEJ3lCaSwpISM6JCIxT2xpPkwmeXcoISM6JCIxejMyODRsQ3YhIzokIjEtdCE+JillcEcoISM6JCIyWHQjUlhSOmJxISM7JCIxS1BXOi9nSG8hIzokIjFgKD1OWCZmNW0hIzokIjAoekhDSUopUichIzkkIjFiLiIqPkt2Iz4nISM6JCIxdyNINSZbcSQqZiEjOiQiMW9EQit2cytlISM6JCIxRlNTeWc6OGMhIzokIjFtNC5NbzdJYSEjOiQiMS0iUlIpKj4xRCYhIzokIjFBYHlUPF50XSEjOiQiMW4iZnUrR3cqWyEjOiQiMW5MWElKekBaISM6JCIxQ0gwI0dwW2ElISM6JCIxYSJcb0YleWxWISM6JCIxLFI2KWVaTj0lISM6JCIydkEqKVFgYnMqUiEjOyQiMm1KKVFxcjMxUSEjOyQiMiRcQjxvQ0g0TyEjOyQiMWpSP2VTPDFNISM6JCIyOlJWXVFqZz4kISM7JCIxUCwvLjtIeUghIzokIjJ1KioqKkcwYkB2IyEjOyQiMlhIOmxudW9eIyEjOyQiMSMzJTN3I1s6RiMhIzokIjJiR101OyU0Oj8hIzskIjJvOEAoM1o9WTwhIzskIjE9P1wtJnBKWSIhIzokIjFNKEgtTiMqUjsiISM6JCIxRUEnW1Y3N1kpISM7JCIxQ2EwVCpSYjEmISM7JCIxdUdxNDAqM1UiISM7JCEybHVCLGxKZVwjISM8JCExR0g9UmQhUm0nISM7JCEycypSaHRyKT40IiEjOyQhMkJeSnNsSU1aIiEjOyQhMltTQiNHO2wrPCEjOyQhMk40J3olMz8tbiIhIzskITEqKjNWWmFWOjkhIzokITEoUiIpW3E2XDAiISM6JCEvdlA4Jyo+I28nISM5JCExJ3pidHRgdCRHISM7JCIwLiE9S1o9UyUqISM7JCIyWmc9KUd1YitaISM8JCIxdSNlL0MpbyhbKSEjOyQiMTdRKj4pW2xONyEjOiQiMTkieU43SVtqIiEjOiQiMVlnN0hCUVw/ISM6JCIxJypcY3ImNDpbIyEjOiQiMVZgZXVWb0tIISM6JCIxTSIpKlIuJ3kuTSEjOiQiMiRRTyVwTCU9JipRISM7JCIxYE9nJSopem5TJSEjOiQiMFIjcEt6LFFcISM5JCIxLSlHXlknKnlbJiEjOiQiMTlNIkh5KClcMCchIzokIjEnW3VFYiZbUG0hIzokIjE+WVU2MUdMcyEjOiQiMW1eREsmZisleSEjOiQiMSwhKVEnKVFUYiUpISM6JCIxX2NQJkhZcDIqISM6JCIxWnovYTpPLSgqISM6JCIyJ1wkKip5Y2BILiIhIzokIjInKT4rSTJjYzQiISM6JCIyQ3MlekBuPGU2ISM6JCIyTyFHaERHUD83ISM6JCIyN1lqTC9EQEciISM6N2FxJCIyYlMhKjQoKkdUeiIhIzokIjJPJ0cqUW83PHYiISM6JCIyYVVTeGAjUjQ8ISM6JCIyQk81ZF1Fc20iISM6JCIyQWwzciRwRkQ7ISM6JCIyPWBSKHAraCRlIiEjOiQiMmRdXCMqSCZIVTohIzokIjIvJVspKnlUUyw6ISM6JCIwbktiODQ1WSIhIzgkIjFeVmAtPj1AOSEjOSQiMlxqZiopcCIqPlEiISM6JCIyd3I2dT8uTk0iISM6JCIyMFBAOld1ZEkiISM6JCIyYXhtY2lhKW83ISM6JCIydiNweFJBeUs3ISM6JCIydjUxK1MkZSg+IiEjOiQiMlo4TWN1cUs7IiEjOiQiMm8hKj0oeUglKUg2ISM6JCIyPipIRmJeRyg0IiEjOiQiMml1LC93cGIxIiEjOiQiMiQpcD5kX2VZLiIhIzokIjJgUWIheltdLzUhIzokIjEtWDtqJ28wdiohIzokIjFlblgxT2dpJSohIzokIjEtbz1ZUGkhPSohIzokIjE6aEMtSjkvKikhIzokIjFCTl9yK3ZLJykhIzokIjFaJlFrcE1oTykhIzokIjApcGZdOjYvIikhIzkkIjE7QypHKG9qWXkhIzokIjFYSnRqIj1RZighIzokIjFCSE5IUiJmTSghIzokIjEkejJ0JTNLLnIhIzokIjElKik0RW5YbCdvISM6JCIyTncrOTdnaGonISM7JCIxOllsIzRSRlQnISM6JCIxek5mTGZ5Jz4nISM6JCIxaV91ZUNsKSlmISM6JCIxRjcmXChbWSl5JiEjOiQiMTtHbCEzb2dmJiEjOiQiMSUpeTVDKSkqNFQmISM6JCIxbyM9XyVIXEtfISM6JCIxc0YxIipbX2ZdISM6JCIxPE8pb0VyMypbISM6JCIxI1tULVcnPURaISM6JCIxT2ooUiZ6MmhYISM6JCIxW2RGej88KFIlISM6JCIxTEJIeFA7S1UhIzokIjE8JSk+bCJcWzElISM6JCIybldoNlFUVCpRISM7JCIxMVtuV0EyPlAhIzokIjImPikpRypcI3lRTiEjOyQiMXhkK3RJXV9MISM6JCIyKClRdDowSCZmSiEjOyQiMTJxVHdyPWZIISM6JCIyMnJXd3cnel1GISM7JCIxKGY4Ry5CT2AjISM6JCIxViplN2w/b0kjISM6JCIyT25cYDZrJHA/ISM7JCIxRDkpekFmKj49ISM6JCIyUSUpKSoqem8jcGIiISM7JCIybE0tVylcL3k3ISM7JCIwPFRZd2hLISkqISM6JCIxbGc5I1FucGYnISM7JCIxLl5bIm8kRzBKISM7JCExT11Gam06LXYhIzwkITBhRnBNdHgyJiEjOiQhMlguMyI9bWAsNSEjOyQhMidSKlFIdykzbjohIzskITFwImUxdT9SPCMhIzokITJkZUtSc2hxZyMhIzskITJtL2QmKW9hXlsjISM7JCEyXD4oUU9BZ2c+ISM7JCExelVFKXpQLlIiISM6JCExI0g5U0onKlx2KSEjOyQhMWJNRVF2LFpUISM7JCIxYihwUz4lcDwjKiEjPSQiMVdcWm5GKXo2JSEjOyQiMUBBZCJwJ2ZcISkhIzskIjIjKmYlW0B4Yyg+IiEjOyQiMkRvR2tOLWlmIiEjOyQiMWNtSkdWdzA/ISM6JCIxTEU+WiY0KkhDISM6JCIyYCNHKSpHUk1yRyEjOyQiMUBOYl10K0tMISM6JCIxUjZKQTA8OFEhIzokIjEqSE5YP3BhSiUhIzokIjFreDVzTyEqUVshIzokIjE3MHpXUCRHUSYhIzokIjBSazlMKCpmJWYhIzkkIi8qZiVROGRFbCEjOCQiMThaWGskekE3KCEjOiQiMVdcWkxiYEl4ISM6JCIxJXBFJT5PZ1skKSEjOiQiMVJYPiZSW1AoKikhIzokIjFXIkdsNWhMZyohIzokIjJlP1wpZlxdQjUhIzokIjJMI1w0MiNwbTMiISM6JCIyciNvTkxma1w2ISM6JCIySzgqPUA4Rzc3ISM6JCIyREtwaiEqW1dGIiEjOjdhcSQiMk4hKmZMQmVWdyIhIzokIjIwbFs3N200cyIhIzokIjFiUHJEPmx4OyEjOSQiMjpdLihHKHlXaiIhIzokIjIpcGpySF5eImYiISM6JCIxamJeLVskKVs6ISM5JCIyI1x0KXB2OmxdIiEjOiQiMjtzKipHRVJZWSIhIzokIjJ4MD1UUylHQjkhIzokIjIzMkA6RFlEUSIhIzokIjIjSDtuck9cVTghIzokIjIwaWhtI28/LjghIzokIjJCTGpzWWFaRSIhIzokIjI8MThGPCY+RjchIzokIjIva20oUVpkIT4iISM6JCIyNk1vLiZSI1w6IiEjOiQiMk1fIzQlKXBEPzYhIzokIjIzWylSZTFkJzMiISM6JCIyYEJiTm9XUTAiISM6JCIyQEZVXidIL0E1ISM6JCIxR00kKUghZjYiKiohIzokIjE7ZyFwQ04raCohIzokIjEuWTU4QVI7JCohIzokIjFPa3JVI1EmSCEqISM6JCIxOExwc3h6WygpISM6JCIxNmhHNj9idCUpISM6JCIxWjFAUnFGLiMpISM6JCIxVltJNCR5diR6ISM6JCIxM3ZJNTFBd3chIzokIjEsYXBkQTo+dSEjOiQiMnZfW0lfQGw7KCEjOyQiMVRtSDtBbz1wISM6JCIxSC0pND0lPXdtISM6JCIyJltURCJ5VihSayEjOyQiMWFsMjkrPjVpISM6JCIxWyp6JSlbJVEpKWYhIzokIjBOJyl6Zz1eeCYhIzkkIjFPbTkpRykqNGQmISM6JCIyWG4nKXpSTGpQJiEjOyQiMUJsZiFwXzU+JiEjOiQiMTIzJ3leaVksJiEjOiQiMTgxSHknZWklWyEjOiQiLyU9WzspZSVvJSEjOCQiMVwxMlZpOUdYISM6JCIxWVptcyQpR3ZWISM6JCIxSzJMUHNMQ1UhIzokIjEyLDMkeXFPMiUhIzokIjBScEFbJXlAUiEjOSQiMmRkdTJLRnR3JCEjOyQiMWNhRkVcNjRPISM6JCIyJSkpUi4kekNoVyQhIzskIjJNXylSeCR5dUYkISM7JCIxYGsrRlBULUohIzokIjJiMmsibzNEP0ghIzskIjAiKSozWTJOSUYhIzkkIjJjQFhcPm4/YCMhIzskIjJFdSY+TyxwQ0IhIzskIjEiXHdQdXd0NSMhIzokIjJuQiRcd18xej0hIzskIjJzYTxHKUhPUTshIzskIjJvbDt0ciRSJFEiISM7JCIyKT5LS20uZTY2ISM7JCIxcko0OD08JD4pISM7JCIwR0dYa3VXLCYhIzokIjIvSnZEVSl5LjohIzwkITIlPVo/J3AqPWJDISM8JCExV0JDUzVaXXEhIzskITImSCoqND9aKDNFIiEjOyQhLyhSVGh3Xig+ISM4JCEyTTxFMk15RihIISM7JCEyYkJTIXpXKT5DJSEjOyQhMjxXPjE1IW8kcCQhIzskITFgLmxZTCFvXCMhIzokITIwIz1UbmZmZTshIzskITFIT2tTJlJ2LSIhIzokITEoPjU/aUpLNCYhIzskITFuazlpPCpwXyYhIzwkIjFsO0IoKlJeQ08hIzskIjElcCwlPkxHOHchIzskIjJDITMveSp5SjoiISM7JCIyMlQnXC9PV1k6ISM7JCIyJVFuXS55U1o+ISM7JCIydlY/PTYmKjNPIyEjOyQiMic0JDR1bmsxeiMhIzskIjFuJGVIMkMnUkshIzokIjEnZT1tUjoqNFAhIzokIjFITy0oRzpIPyUhIzokIjEtV0wsKik9PlohIzokIjFeendIRVdlXyEjOiQiMWtGeF0pPiY+ZSEjOiQiMTdPUSI0ci9TJyEjOiQiMSwlbzA7MCgpKnAhIzokIjEocGooXDA/NnchIzokIjFgUV1uKFFaQikhIzokIjFNIlwjKnA+aCcpKSEjOiQiMXdLYkQzTC0mKiEjOiQiMidlSShvKmUxOTUhIzokIjIjKSpwI2Z2dXkyIiEjOiQiMVQ8Xm01WVQ2ISM5JCIxQVcnZXVoWT8iISM5JCIyYGthcCVmTW43ISM6N2FxJCIxdUYyLnpjTTwhIzkkIjJPeEQqKmZVLHAiISM6JCIxX1JmVDd4WDshIzkkIjIuSCt3P0E6ZyIhIzokIjIkXE9uI3lxdWIiISM6JCIyazUlSDIpKXA4OiEjOiQiMmE9b2ooUkhxOSEjOiQiMiRSTGw+KFt0VSIhIzokIjIoW2slemdlXFEiISM6JCIyMDAlb1wtQVY4ISM6JCIyLnRjZ25HQUkiISM6JCIyJSlcNDZFdT9FIiEjOiQiMjNoWnBHUkdBIiEjOiQiMmkvSChSVmYlPSIhIzokIjIkPjZFK1tSWjYhIzokIjI3KXBKZHhGNjYhIzokIjFiKGUycWZpMiIhIzkkIjJvS0lcS05CLyIhIzokIjIpPmoqM294JTQ1ISM6JCIxJz1CMW8oUncoKiEjOiQiMUxTISozW2RuJSohIzokIjE4XDhrbWBuIiohIzokIjF3SFA+JUhhKCkpISM6JCIxUV1gOCpvLmYpISM6JCIxR0NULklcNiQpISM6JCIxPDVhPD0sUSEpISM6JCIxJHpkc1phI3B4ISM6JCIxVCFcKilvNlpdKCEjOiQiMTYrdVdSMldzISM6JCIxdVMpZXBrcylwISM6JCIwY0RXb21XdCchIzkkIjEoPUFablBoWychIzokIjAneSJHUzRJQychIzkkIjFwQ2dpODExZyEjOiQiMGJceE1na3gmISM5JCIyV0clMzkjZmFiJiEjOyQiMURVKTRtYlVNJiEjOiQiMCc0LjBSI1E5JiEjOSQiMSYqM2ElelhaJlwhIzokIjEuQmYkKm8yeFohIzokIjFGOURLMkc1WSEjOiQiMSZbKT5DKFtLWCUhIzokIjB2WUlyKlIvViEjOSQiMG9bPUZLPTslISM5JCIxNytvR05cQlMhIzokIjEnUnhsPEt0KVEhIzokIjFHPCozYzo5diQhIzokIjIzVSM+PFYrOU8hIzskIjElcExkLylldE0hIzokIjElXEQkZi8qKUdMISM6JCIxJGVgJ1xLJil5SiEjOiQiMjsjMytFamdBSSEjOyQiMXRbdidmSCVmRyEjOiQiMmQoKnkmKioqMygpbyMhIzskIjI7PGV1VCgpKTREISM7JCIyPFVIOVo0Q0sjISM7JCIyNyxnNHlkYzcjISM7JCIyNyQ+XThvKCk9PiEjOyQiMkhKXyQ9JXk1cSIhIzskIjInPiYqKj13PjRaIiEjOyQiMllIRz9DUWxBIiEjOyQiMWhjPk9OO2AnKiEjOyQiMUtLX0R6RU5vISM7JCIxdWc4Jno7d3YkISM7JCIwSkZHJipbW1IkISM7JCEybWx6Oi9oW2EkISM8JCExJyplIz1RKilRNSkhIzskITJ0d0g2cCFwcjghIzskITEiPWR0JCoqPj1AISM6JCExZCsncCJbSW1LISM6JCExMSxSN255VmQhIzokITI6N2tccSMpUUklISM7JCEydXYkZUFBPmhFISM7JCEyKFJYO0tUKlx0IiEjOyQhMXdAVnpyYXQ1ISM6JCExJypIKTRnLSFIYSEjOyQhMC8xTVcyN10pISM7JCIybWpIKlJiaDVMISM8JCIxVXlxenonPUMoISM7JCIxclxKKmZJcTUiISM6JCIyJGVWTmAjXCgpWyIhIzskIjI5bHAoeWNOdz0hIzskIjIjNEd6TypmYUYjISM7JCIyOnJ2X1RxMXAjISM7JCIyJm8meUtnI3lESiEjOyQiMmE3MiEpXDtRZSQhIzskIjEpXCl5ZEslcDElISM6JCIxNDFAIil6TXdYISM6JCIxSj1XI1skNDdeISM6JCIxWD1BSCdmSW4mISM6JCIxSztgI286cUQnISM6JCIxR0t6c3QkMydvISM6JCIxV2tNdHIjM1soISM6JCIxRjcyUVQxOCIpISM6JCIxPmZpX0FyYCgpISM6JCIxRFBBdFRDKlIqISM6JCIyb0wocFpxbC81ISM6JCIxXClleSIpMyRwNSEjOSQiMiUzVmdCc21MNiEjOiQiMiJIWFVbTGMoPiIhIzokIjIkeis3QGgnM0UiISM6N2FxJCIyb2xZcDwneS88ISM6JCIyKGVSdSxqRWY7ISM6JCIyWjBXPVJwUGgiISM6JCIxWDAlKXoicCRvOiEjOSQiMiRRKSlbdHo5QjohIzokIjEtUi5xaz55OSEjOSQiMk1eaiRmSmhMOSEjOiQiMmEzJ3k9S10qUSIhIzokIjJSWiJwM28oZk0iISM6JCIyLVtpc3BZSkkiISM6JCIxXygzI3leN2g3ISM5JCIyIm8pZkpJPytBIiEjOiQiMnUkZSlRYEoqejYhIzokIjJRW1ImR10lNDkiISM6JCIwQ3YyISpHSjUiISM4JCIyZCQ+MTIqR2wxIiEjOiQiMWgqKmUpM2w2LiIhIzkkIjE4IipcI3opSHEqKiEjOiQiMUEkKjNbMSkzayohIzokIjEzIz5bXCh5QSQqISM6JCIxRTcnPi8jPjohKiEjOiQiMV8iRyg+QDU8KCkhIzokIjEnZTYtaUJ1VSkhIzokIjEoKSoqXE9yLVgiKSEjOiQiMTtVYWVNIilveSEjOiQiMWhhR0hbeChmKCEjOiQiMSxhdCV6XTVMKCEjOiQiMSYzKD1KIXp6MSghIzokIjEpcGEyR1UiM28hIzokIjFWQnooPTc5YichIzokIjF2LXYqPiopekgnISM6JCIxdyFmL2xNJVtnISM6JCIxKFtWJXluby5lISM6JCIxKEg0Y1ZaXWMmISM6JCIxTEB3TUM3TWAhIzokIjI7RFckeiIqcDdeISM7JCIxaDEmPWFhRCFcISM6JCIxKik9TyY9MV9xJSEjOiQiMmI0I1EseWtAWCEjOyQiMUByZXoxOF9WISM6JCIxUWBXPVgwJz4lISM6JCIxZlhpZz4rX1MhIzokIjEmKWYleiZcIXoiUiEjOiQiMlYxUk0kNEgieiQhIzskIjJ3S24qKUhVJnBPISM7JCIxLTw3K2Q2XU4hIzokIjJ4aFB3KFJwSU0hIzskIjFcQVYheW8jNEwhIzokIjJbM1wzeW1UPSQhIzskIjJQO0J3P1BTMCQhIzskIjEmKW9ncGwieSJIISM6JCIyOVQ1ZSk9b3VGISM7JCIyQ1BmKCkpKikqUmkjISM7JCIxJ1xvZGpvX1kjISM6JCIxOXJfYS8yKUgjISM6JCIyUV5WLSdIK0FAISM7JCIydSUpejluO20kPiEjOyQiMSU+IT5SakxUPCEjOiQiMmI6ISlvLm5gYCIhIzskIjJwKEctM25kPDghIzskIjJQJkdmRVBNJzMiISM7JCIxZjhIb1FdJFIpISM7JCIxXyQ+dlEqKUd0JiEjOyQiMT4xZypRLFUkRyEjOyQhMlhpJFwlW05EciQhIz0kITFOeiZbRUhdKVIhIzskITE+WyY9USc0aCIpISM7JCEya3RQJUdTcTg4ISM7JCEyZEw7JGVyKWYjPiEjOyQhMi5cMFZhLGVuIyEjOyQhMi1tIVJsO1RITCEjOyQhMSgqUl9vIlJyMiQhIzokITFjKHBYTT0jKkcjISM6JCEya3VnJWYjKnB6OiEjOyQhMUZ3Xmk8NCcpKiohIzskITFWPj5MSyRmMiYhIzskITFHRkgzYVp2dSEjPCQiMVhDLD47aDtLISM7JCIxKFsqbzd4dG5wISM7JCIyKSk+Wyl6ZW1oNSEjOyQiMTopeTMxVVxVIiEjOiQiMkREZmFRV096IiEjOyQiMidvYnp1cnl0QCEjOyQiMScpUSRbSlsxZCMhIzokIjIkUUROUCl6KSkpSCEjOyQiMW4+YEsvWUtNISM6JCIxWyo0cS4vWCFSISM6JCIxUmBDIj1scFMlISM6JCIxc1pKclVMU1whIzokIjEoUS0lUnZYLmIhIzokIjJiIjRMKEgpZiQ0JyEjOyQiMU8oRzhibG5xJyEjOiQiMjpGeSM9TEFRdCEjOyQiMSlbJGZbRC4kKXohIzokIjFtT1Z1aVxPJykhIzokIjFHck4oeVhXSCohIzokIjF2K1VaNlBgKiohIzokIjI9K1MjW04vaDUhIzokIjIpZi4kZSg+TUU2ISM6JCIxVUNdJ2VqNT4iISM5JCIyKDQkRyxGJDNiNyEjOjdhcSQiMjtlJz5EIltdbiIhIzokIjFSdio+WG8kRzshIzkkIjJ5Tk5AR3M7ZSIhIzokIjI0TCUzYyZRXWAiISM6JCIyYkZKVnhjJilbIiEjOiQiMmIrIkhycUtVOSEjOiQiMj1rKmVAKWZrUiIhIzokIjJqNCkpPmt1NU4iISM6JCIwJEg5XicpSDE4ISM4JCIyXkI8QCdRRWk3ISM6JCIyWEs+YmguIj43ISM6JCIyWWpMTi1bcDwiISM6JCIyWTkhKXpcPWY4IiEjOiQiMiUpZTJxZUBoNCIhIzokIjJuLiwrYVV3MCIhIzokIjEkKT11RiNSMC0iISM5JCIxOCY9Li1zJFspKiEjOiQiMXZrJXkvbl9dKiEjOiQiMWxuKUdvQWM8KiEjOiQiMTJJIlEnPWxlKSkhIzokIjFSPTpkbUdgJikhIzokIi9eWTUuRGUjKSEjOCQiMll1W2YnNDlzeiEjOyQiMW15NmF6XiRwKCEjOiQiMUEpeSplTik0VSghIzokIjFcSmt1akRgciEjOiQiMCVIbWpkQiopbyEjOSQiMXNUKFtnZiFHbSEjOiQiMUhPeWEqZSJwaiEjOiQiMXpET1VKSjdoISM6JCIxTG4nZSlvcWRlISM6JCIyOlRjIVFvKWZnJiEjOyQiMWF5UXEhMyRlYCEjOiQiMDo4RFpeajYmISM5JCIxbnEjKlJGRyMpWyEjOiQiMWl5YSkqeWhlWSEjOiQiMU9aLlEmb3pXJSEjOiQiMSIqZnlzOm5fVSEjOiQiMTBKKVtPaVYyJSEjOiQiMkNgXm1XLk8iUiEjOyQiMnVvXFYnUnBwUCEjOyQiMS5qaEc+dFNPISM6JCIxeD9DQlYhUl8kISM6JCIxO3JreCYpKmVUJCEjOiQiMkM/JSpIdDNMSiQhIzskIjJYOEI5U1pIQCQhIzskIjJCNi55d0s/NiQhIzskIjEtOzU5V0UzSSEjOiQiMTE0VWs3IykqKkchIzokIjJDLnpNQTpgeSMhIzskIjFFKWU+WERQbSMhIzokIjFFZCZ6PkdWYCMhIzokIjJ5ZlBfM0htUiMhIzskIjJ3OzZfVipIXUEhIzskIjFNTSk9NTpeNCMhIzokIjJqIz55P1oqMyQ+ISM7JCIyakdRIUdPVmQ8ISM7JCIyJT5WPCRlSFdkIiEjOyQiMjBkeUhfJ1IiUSIhIzskIjJ3IUcmKSpmaXY8IiEjOyQiMSU9UnVIJVs8JyohIzskIjFSUTxNbT9BdCEjOyQiMldMPGwhUTpsWyEjPCQiMWZQXnIpKkc3QSEjOyQhMW1nQFhJYD9vISM8JCExVkg5QS1gd1EhIzskITE4U29EOjNSdSEjOyQhMnkxMCpcOUVVNiEjOyQhMiJRZWxASGB3OiEjOyQhMlY3K3RoZ2kqPiEjOyQhMU0neWI6c3JDIyEjOiQhMSVbLTE2I3BZQCEjOiQhMWo7biJmZz53IiEjOiQhMj5ZMSV6diU9SCIhIzskITEuVCpSMHV0TikhIzskITJMZScpWzZkJGVUISM8JCEyQyl6Pi9DLzlIISM9JCIyWHNrdCVHP0hMISM8JCIwKkdLcjkmPXonISM6JCIxNzRKXG1tPDUhIzokIjInMylbQCVRYWI4ISM7JCIyXz0iZjZaUCpwIiEjOyQiMU0pUVQ0J0hiPyEjOiQiMWZrRFV4OUhDISM6JCIyZGVoJFFxW0VHISM7JCIyaiIpR2htW0NEJCEjOyQiMXBsI0dzKlI2UCEjOiQiMSoqPXcoPiRSMVUhIzokIjFDRGchKipbJlFaISM6JCIxNGVkYU5pMWAhIzokIjJsc0cheiVIcSFmISM7JCIxTEUqKVxDUE1sISM6JCIxQzxWOEpKIz0oISM6JCIxOWIpZitSVyV5ISM6JCIxN20vYHYhXF4pISM6JCIxRyVSIzNjeSk9KiEjOiQiMXcoUmFpT0AnKSohIzokIjFsYilwOSY+YDUhIzkkIjJPKVEocCEzZz42ISM6JCIxUGBlUzpGJj0iISM5JCIyMVNydy4oNF03ISM6N2FxJCIyKT14aV9wUlg7ISM6JCIyWjBXZ3opWyhmIiEjOiQiMjhkOCEpXDkmXDohIzokIjIyKm9HdHhiLDohIzokIjJ3OlQqPl9yYDkhIzokIjFmeUIheSc0MTkhIzkkIjJrL3gjKW9EKWU4ISM6JCIydGw6Ij54Ljc4ISM6JCIyJ28kMzVhemVFIiEjOiQiMkNmcUUoZl0/NyEjOiQiMmg3YyRvZjJ3NiEjOiQiMmtLTykzc3VLNiEjOiQiMURXcClHcDE0IiEjOSQiMkRrYHBvdipcNSEjOiQiMmolMysuXXg1NSEjOiQiMWs8TUlJVUooKiEjOiQiMTpYd0p2NnIkKiEjOiQiMWhReEkmPW4tKiEjOiQiMEwmZXZQayhwKSEjOSQiME46RVx2R1EpISM5JCIxJkdeMF1KNTMpISM6JCIwJTRMdF5ZIXooISM5JCIxW1Y5KlF6JDR2ISM6JCIxeVcpNCEpUmZCKCEjOiQiMUtWV3FuUG9wISM6JCIxWUAiWz1yXXEnISM6JCIyYj1LQDdEWVcnISM7JCIxKVIhKilRRSNmPSchIzokIjFWJGZ5TCk9R2YhIzokIjFGRSkzd141biYhIzokIjEuTXheUWk5YSEjOiQiMWM9cG1wZWZeISM6JCIxYWBcPjFIMlwhIzokIjElelIhSCZIKWZZISM6JCIxOWBSeSZlK1UlISM6JCIxVCFcK0N4OT4lISM6JCIxOl9KbDwieihSISM6JCIyTzxNRTRsSHkkISM7JCIyeTltQl0zJDRPISM7JCIyJmZuQi4pPiFlTSEjOyQiMVhVTmkxQkdMISM6JCIyTFxCaGVXc0AkISM7JCIyWUElcC8jcDU3JCEjOyQiMWIicCtYSV4uJCEjOiQiMlBpbGlVPFwmSCEjOyQiMncvKUgiejlrKEchIzskIjFqdEJcakkneiMhIzokIjFvS1wjXDI/ciMhIzokIjIkcCwiPiQqKmZARSEjOyQiMmt2SC9SRVBfIyEjOyQiMkVzeCQ+Knp1VCMhIzskIjJWZzEhM1JJLUIhIzskIjFEVmRhciF6PCMhIzokIjEwOzlvQD5XPyEjOiQiMkN1ekA5Iz4sPiEjOyQiMShmIjNqNyxcPCEjOiQiMiM0S3NNTHcoZSIhIzskIjInbypIcnYvdlQiISM7JCIyTVBnI0gnZiJRNyEjOyQiMiUqKXp6YnNWXDUhIzskIjFONypSUWZ1XSkhIzskIjExbnkvYjc2ayEjOyQiMiQ+ZEchb3g3PiUhIzwkIjJFX2VWcCVmSD0hIzwkITEnKipHQ3kjKm8lcCEjPCQhMFx1al1fISpSJCEjOiQhMUROUHkhSERHJyEjOyQhMSRvTExzTyopRyohIzskITJRLWMmM053QTchIzskITFNaSFbWyYqXFkiISM6JCEyNzpPJEdzKUhlIiEjOyQhMW83O28oXCc+OiEjOiQhMl9VV0RgT1JIIiEjOyQhMVUyJilbJG89eSohIzskITFaSzRFZVhNaiEjOyQhMm4mWypHJVFqLUghIzwkIjExLzFUKlFsNSUhIzwkIjJiPT9RJ3o6KWYkISM8JCIxeSg0eDRzQnAnISM7JCIxTCQ9Kil5InBUKCohIzskIjJldERjJVI3IUciISM7JCIyJls1RVp6J0hmIiEjOyQiMjsxKj5CPiQpPT4hIzskIjE9ITNKKVw0a0EhIzokIjJOVV9oRV1gaiMhIzskIjJqWjBBR0ojUkkhIzskIjJ0Pj5KbUQ+WyQhIzskIjJROTk0UV4jb1IhIzskIjFPXD4mUVEvXSUhIzokIjFsZj1udDl4XSEjOiQiMWkwTVtqTyRwJiEjOiQiMUoxOSd5dzhNJyEjOiQiMnY+NVR1QEIsKCEjOyQiMXdgPXg6bShwKCEjOiQiMSQ+Jlt1J3orUikhIzokIjAnW2ZYKTNRMyohIzkkIjFYJEgvdnBYeCohIzokIjFkUE5WSSRmLyIhIzkkIjIoKVwoR0VFZzg2ISM6JCIySyIqZjQhM0whPSIhIzokIjJ5JzNQNVMuWTchIzo3YXEkIjJuJlx2MmEpZWgiISM6JCIxXiJcJSpIeG1jIiEjOSQiMi4uJVEoSFR0XiIhIzokIjJIdyRHZF0nelkiISM6JCIyaFBdbHleJz05ISM6JCIyYSYqNGxEQCZwOCEjOiQiMSpbMCN5LXI/OCEjOSQiMndLIT4qUnNCRiIhIzokIjIjKTQ5J1xsbkM3ISM6JCIydV8rcE0veTwiISM6JCIyS0oiKVJ3WD44IiEjOiQiMihbKVI2KkdIKDMiISM6JCIyMk5QSmhKUy8iISM6JCIybk1gYENKQisiISM6JCIxeTtDQGZLQicqISM6JCIxJG8wNDZiOEMqISM6JCIxVHdAX3UoeSgpKSEjOiQiMXopZWgvc0ZgKSEjOiQiMS47U1BvSDAjKSEjOiQiMSMqKjMocC44JSp5ISM6JCIyME1oc2p0dWYoISM7JCIwYmtdaiQ+OHQhIzkkIjFuJylbeUcpKlFxISM6JCIxTkJcPzFec24hIzokIjAvdSMpb1w6XichIzkkIjFhajVLTjJhaSEjOiQiMVpEJCkpW0YkKSpmISM6JCIwPUhKaSUpR3UmISM5JCIxdyw8NSkqcCdbJiEjOiQiMUhmKDRydyJIXyEjOiQiMDpBWk9oLShcISM5JCIybFxLXFFzMHIlISM7JCIxJSozcSE9bzpYJSEjOiQiMUc+encxdCY+JSEjOiQiMiMpeUVRRTFuJVIhIzskIjIoeSE+RWwpRzRQISM7JCIxJW9bJT4rMypbJCEjOiQiMG04TCNRcCJIJCEjOSQiMiY0V2laIVs6NyQhIzskIjFWPzYkUj4xKUghIzokIjI5J1snKT5LdW5HISM7JCIxV0JWKT1fKXlGISM6JCIyOFpzL2Y5ITNGISM7JCIyI0gibzchZnNbRSEjOyQiMndlO2UwUFxmIyEjOyQiMTcnKm9KRGhURCEjOiQiMW5gYCdRIylbWyMhIzokIjEjPjRGJEcmPlUjISM6JCIxKW8meiJHPjROIyEjOiQiMXRXYkglbzBGIyEjOiQiMiQqNEZCeTItPSMhIzskIjFuJXA3U0smej8hIzokIjIlKUcjKW85RCZvPiEjOyQiMTx1IVsjPVFaPSEjOiQiMmAnSCZRIT1YOzwhIzskIjAlXEs9Yj13OiEjOSQiMj0pXGtvPTNGOSEjOyQiMm1PLzgiM2pwNyEjOyQiMjFWXykpcFxVNSIhIzskIjFRTG4lb21ASiohIzskIjFDbyUpXDo2MXYhIzskIjFAMWBRTiJHaSYhIzskIjElKkhTO050ZU8hIzskIjI6LiwpeiU9KTQ7ISM8JCExXkVxWUI6Wl8hIzwkITEuV1V3T1ZNRiEjOyQhMSRcKUgjb1hDKVwhIzskITEubl4pXHchenIhIzskITA7dmgpXFVYIiohIzokITJRUyo0YidIIWY1ISM7JCEyRCtFQ2JHbTYiISM7JCEyPSt2Jj4jZV4xIiEjOyQhMSVRcEsvbSI+IiohIzskITF2dnU8a114byEjOyQhMC03cGhHTUUlISM6JCEyPUNINHBMU14iISM8JCIxYENhczVHVzchIzskIjInXFBxVEJwaVIhIzwkIjFUSjdhWHdRbSEjOyQiMSZSK2JZRHFIKiEjOyQiMiUpPi5oMmR5PiIhIzskIjFZME5DSGV0OSEjOiQiMllYO2cjeStqPCEjOyQiMiZcVXIiXGxJMiMhIzskIjIlMy5LIilwXzZDISM7JCIxbilHYSRHKXB5IyEjOiQiMVk/TitMUTNLISM6JCIxJVt4InlqaSRvJCEjOiQiMFUnZi4qZnJAJSEjOSQiMk5oQGwwI3AyWyEjOyQiMVVzNmVxc1phISM6JCIyJkgpNF42PGI3JyEjOyQiMFBGJilbYyJHbyEjOSQiMXZDLFhbMld2ISM6JCIxI2YjKipSSz5rIykhIzokIjEocCkqRygqMz8pKikhIzokIjFCKCkpZUpqSnAqISM6JCIyMDRmISo+KltSNSEjOiQiMl8pXHhzVWIzNiEjOiQiMS1wdFQ0VXc2ISM5JCIyPVNOZVVaSUMiISM6N2FxJCIydjpkN0t4bGUiISM6JCIyQWxRInBnKmZgIiEjOiQiMjtUOWQkNEAmWyIhIzokIjIwWSRHWkBKTTkhIzokIjFmOyJSWjNNUSIhIzkkIjItJ1JiKioqR0VMIiEjOiQiMk5IUilwVjcjRyIhIzokIjJrIyo+KjRzMUs3ISM6JCIxTCIpR2Q4bCM9IiEjOSQiMkx3aUpeKjNNNiEjOiQiMnZBRlMoKTNtMyIhIzokIjIoZkwya1VXUzUhIzokIjE2ZEJISEdlKiohIzokIjFDPjg/QnlIJiohIzokIjFwKiplbSMpej8iKiEjOiQiMEc/I2VGcEsoKSEjOSQiMSpIUDJzZmhPKSEjOiQiMV9kI0gwKDRAISkhIzokIjFBLG5wLmMncCghIzokIjFGRDQ2JT4zUighIzokIjBGOydSLV4sciEjOSQiMTI1MDMoXGUjbyEjOiQiMV9aTTJnJzNjJyEjOiQiMUI7KypIL09JJyEjOiQiMXNyTCllJEdeZyEjOiQiMSRRPzVXKzkhZSEjOiQiMVsqKio0JioqeV5iISM6JCIxWmwxKGZpMUkmISM6JCIxUio0aSEqUW0vJiEjOiQiMXgkeid5WyEpKXklISM6JCIxN2ZmSD0ib18lISM6JCIxQ1MrMFgvaFUhIzokIjJDbilIMXMoRypSISM7JCIwKGUlPSMqPV1zJCEjOSQiMXkoZWpfJio9WSQhIzokIjJOYHpWPjEqNEshIzskIjJ3LTk9OEhzKEghIzskIjJ4J2Y0MCJmRngjISM7JCIyKDRWRTd3LC9FISM7JCIyZE4+KzZlWVojISM7JCIyd3coNG9LJkhRIyEjOyQiMjAwQlg2P0JLIyEjOyQiMXBrKCkqWyxORyMhIzokIjJrKUdRRkArZEEhIzskIjJYIXBwVEpwTUEhIzskIjEkXFZyaihSNUEhIzokIjEoZltGNDEpekAhIzokIjIxYDJoWzssOSMhIzskIjF0TGxTO2sqMyMhIzokIjEkKTNkMFJbRj8hIzokIjI3aDs+bChIYD4hIzskIjFpIlJRJHk3bj0hIzokIjJGJypmdWgvJHA8ISM7JCIxdTFRUV1QZzshIzokIjIkejU8ZGYwVDohIzskIjFVKnlPJWU+NzkhIzokIjFhaldDZXR1NyEjOiQiMlhTeW5jaidINiEjOyQiMWFUVC0qeSZ6KCohIzskIjEjUSdbb1VHMCMpISM7JCIxMTQ6KjNRO2UnISM7JCIxXyRHam5RXiJcISM7JCIxXGhqWixZNkshIzskIjJhP3Vrdk10WiIhIzwkITIlXChINi1rWXYjISM9JCEyYEkicDEkKjRCPyEjPCQhMXlUWlt3dz1QISM7JCExOl0kM1A2KHlfISM7JCExW2M+eXJtcWwhIzskITB2VC94NSg+dSEjOiQhMVp3UCc+cThsKCEjOyQhMUxqJUclPmpvciEjOyQhMWhhIylmbDE0ZyEjOyQhMG1pLSRbQ0RWISM6JCEyTWkhWzBiTDNCISM8JCEyUDBJOi9GbUAiISM9JCIyKWZgMC4+PERAISM8JCIyd1ZuRlo1UVAlISM8JCIxJjR0YDwmZjBtISM7JCIxN1xCQlcqMyQpKSEjOyQiMTReVFg+OzM2ISM6JCIxKkgjUVcnSDFNIiEjOiQiMjcobyZwXyFwJ2UiISM7JCIyYHNZPykpelAmPSEjOyQiMl9sZVN4KHpdQCEjOyQiMk93K3JrWycpWyMhIzskIjJkRmI/SUQvKUchIzskIjJsSyhbSW9wUkwhIzskIjJqSCVmNCVwZChRISM7JCIxKkdDKSlSIip6WyUhIzokIjEpbyhRT007a14hIzokIjFFJFtNU3RdKWUhIzokIjE+PiFmPGU2aichIzokIjE3MGpfMXQnUSghIzokIjElZmRiKSlvNDkpISM6JCIxWDpFRFA4KCkpKSEjOiQiMSxWcyZSazhpKiEjOiQiMWZVcnlfO001ISM5JCIyKSoqbyFIQjdaNSIhIzokIjJaLzxMTGNQPCIhIzokIjIjUVojXGo5OEMiISM6N2FxJCIxJ0dyWUJcdmIiISM5JCIyRCUpcERaQGJdIiEjOiQiMlVBJSlvSyg+YDkhIzokIjFEPDVBdm0rOSEjOSQiMjR0IXB5WC9bOCEjOiQiMk9FSVJmbGFIIiEjOiQiMkNiI3pxWDRWNyEjOiQiMk0pKSk9OFI3Ij4iISM6JCIyOl1lO2t1KFI2ISM6JCIyVyUzKipHW0gqMyIhIzokIjFCYE96YyYqUjUhIzkkIjEvcyUzS1gvIyoqISM6JCIxJFEjW2onUSZlJSohIzokIjF5ZkAySGw7ISohIzokIjFGUkAqW3pzZikhIzokIjElUUkoNEhLLSMpISM6JCIxTE4iXEJHRyR5ISM6JCIvJ1siKkdpKClbKCEjOCQiMlhJOXp3PypvciEjOyQiMT5wQSRRMTUobyEjOiQiMTM9LVl2Jz1mJyEjOiQiMS0kXGpCTHlLJyEjOiQiMWtEQ3B3MHZnISM6JCIxJXBBaFkvKUhlISM6JCIxUHBmSHFqKWUmISM6JCIyTl9qM0s8JltgISM7JCIxZTU1WHEkbzUmISM6JCIxcmMzZEtUaFshIzokIjFrZikqXDFbNVkhIzokIjFqNkkoeTZGTiUhIzokIjFVXTspeSlIKDMlISM6JCIyUEUkW3h1ODlRISM7JCIxRFIta2Y7TU4hIzokIjEsRiMzI0giKlxLISM6JCIyT0dtIjNCRm1IISM7JCIybTlNI3BQTyJwIyEjOyQiMnQxPCg+KWVwViMhIzskIjJjIilSd1xBdUAjISM7JCIxJj5eRWNVaC8jISM6JCIxRkJSKm8hPUk+ISM6JCIyVk9wJz47a209ISM7JCIyQzcqZXFDJ1IlPSEjOyQiMjdHIylveEZwJT0hIzskIjA5eTx5SjknPSEjOSQiMjshKVJQbmBuKD0hIzskIjJBSjgmNC10Jik9ISM7JCIyTzIqPkc5LCUpPSEjOyQiMUMxXSFSJT5wPSEjOiQiMXhMQF9uOFM9ISM6JCIyKCozYi5YIlwneiIhIzskIjJMdz40aDwlUTwhIzskIjIjPitITUFUbTshIzskIjI6IkhUQiY9N2UiISM7JCIyRXNpU3N6UFsiISM7JCIyQEk3XSFvQHY4ISM7JCIxTGlUP1Qib0QiISM6JCIyM3pWcHMrKzgiISM7JCIxKD54IkcuPWoqKiEjOyQiMUAiXCUqSClvdCYpISM7JCIxekcpb0otdjkoISM7JCIxJHolZStcJSkqcCYhIzskIjF4SCJbMmlaQyUhIzskIjJgWDduailRJnojISM8JCIyTWVsSHRFYU8iISM8JCEyKHlhclJqInB3IyEjPiQhMTpBTzs5YmQ4ISM7JCEvM2NQMEkjZSMhIzkkITBuIVFNUzRRTyEjOiQhMS1FVjIxaFBXISM7JCEyPGNbcChbKCl6WyEjPCQhMTcneSg+SChmKFshIzskITEoPTZ5P2BOUSUhIzskITEwa15kJm8hSE0hIzskITJsTzBjTGUrNSMhIzwkITE4SjhWV2tLXiEjPCQiMmFjSSpbZ0Y+NyEjPCQiMWIib1djODMsJCEjOyQiMnVvTT1LPmwhWyEjPCQiMU5nIipIN1YjZSchIzskIjEiW18zPWs/TSkhIzskIjJ5NUFndyFINjUhIzskIjIoKW9WKVwnelU+IiEjOyQiMm9ALHoocGQqUSIhIzskIjImeT9UJypRIVxnIiEjOyQiMnZgTDhRXydcPSEjOyQiMV47IylmLmRPQCEjOiQiMUdILiR6N1ZbIyEjOiQiMm5iT043dXIiSCEjOyQiMld3ZDNWIjRjTSEjOyQiMSZIKlssUTYuVCEjOiQiMVYyYSplKCplJFshIzokIjFmXlF5Oj8/YyEjOiQiMkRleUFMSGJVJyEjOyQiMSNvTlNdMzlCKCEjOiQiMS0sYGAvSEUhKSEjOiQiMFopKmZGI1wvKSkhIzkkIjFsKVFoOipvaiYqISM6JCIyPSIqek4oUUxJNSEjOiQiMlZhLCd5IXpCNSIhIzokIjIjbzJmJXohZXM2ISM6JCIyJjNOa3Y5LlQ3ISM6N2FxJCIydWhFOzAjKilHOiEjOiQiMlZoI2Usa012OSEjOiQiMUg4YDhJUkA5ISM5JCIyWDhNUTk/ck8iISM6JCIyXllUPkJURUoiISM6JCIyeCVlWiYqKik0ZTchIzokIjJIMnRaQXBPPyIhIzokIjIjZVknUSFRY1w2ISM6JCIyOktzbVNLZzQiISM6JCIyJ2VdOyJHaUwvIiEjOiQiMWNEUip6YSg9KiohIzokIjEydnUicEUjPiUqISM6JCIwNDZ3IjNzUSopISM5JCIxRyVIb3g4NFspISM6JCIxWSo+UT8qPlwhKSEjOiQiMTYwQjZ5SVl3ISM6JCIxMS5EcngnUUYoISM6JCIwVTFuPDs/JHAhIzkkIjJ2L1wkZikzIz5tISM7JCIydnNLWDFKQkwnISM7JCIxNFpVJjMkNG5nISM6JCIwViFbXCF6Jj1lISM5JCIxNEomPWV6PGUmISM6JCIxPWhiLnMpPk4mISM6JCIwdGksTjpdNyYhIzkkIjExOEdVZEUoKlshIzokIjEnekUzXCdwbFkhIzokIjElMytjL1d4VSUhIzokIjFUUyp6WFU3PSUhIzokIjEqenAzKGVQQ1IhIzokIjJQYyJIRT1xYk8hIzskIjA6XiEpeilIdUwhIzkkIjI4YmdUQ0UsMyQhIzskIjIlejo8ZTR1dUYhIzskIjEpKTNxNmFjaUMhIzokIjIkNHFIMSVHRzojISM7JCIySzI1UltEPCc9ISM7JCIxV0BaOSlHRmgiISM6JCIyWSkpKmVcRjdKOSEjOyQiMnZyKEcyXHJKOCEjOyQiMXA9b2VJKSkzOCEjOiQiMl5nXCcpKipILU0iISM7JCIxWlNAWi9XKlIiISM6JCIxUERzbSllY1kiISM6JCIyJGYjcEQ/SGNfIiEjOyQiMWoiKSozVnc/ZCIhIzokIjJiaEIlXCc9OmciISM7JCIxREFpUzBrNzshIzokIjFYXGczMUkwOyEjOiQiMXZPJlJ5IikqejohIzokIjIpW1c2QiozdmAiISM7JCIyWmNzWW48Knk5ISM7JCIxYUpYS3BTMDkhIzokIjJIWkdUKmVMPTghIzskIjJVRy5eJD5DPjchIzskIjJPYmhXUWkpNDYhIzskIjBQPUZsYzkjKiohIzokIjE9S0JgPlEjbykhIzskIjFkSClcSmdWUyghIzskIjE5TjNzcCg0NichIzskIjFAJkgwXCJIRFshIzskIjFvKW9xP0Eob04hIzskIjI9Uyt3cnQvTyMhIzwkIjI8JlsmZk0mMz03ISM8JCIwTihbJFJqXWYiISM7JCExJTRPWm8uUCR6ISM8JCEyTUJYPGtdMGgiISM8JCEyMkcwLyFmKDREIyEjPCQhMUUoZUUpb1pqRSEjOyQhMmJ5Xmh6OFZ6IyEjPCQhMjoqcHo8J1s6ZyMhIzwkITIvW09XMyRccj8hIzwkITJlXm1XJTNZRzchIzwkITIkeUEqcFUzVEoiISM9JCIyLnoheXBEcFM2ISM8JCIybEloNk1Tbl0jISM8JCIxellWNCR5dSpRISM7JCIxJ0hiWS8kZmpfISM7JCIweCs9NVYmemwhIzokIjE6RkhqJFFhJXkhIzskIjEyTDROSCV5MyohIzskIjJrd3c1O0NlLiIhIzskIjJrTng7LHJFPCIhIzskIjJYRTdZSUNySyIhIzskIjItXiJwTnZQMjohIzskIjImKXBFXiJRKVtzIiEjOyQiMXUwJTRFQkcrIyEjOiQiMiR6Ulc9STcmUSMhIzskIjE7SipRSmFOI0ghIzokIjFeWyJmVmEvaiQhIzokIjBVTlIjWzRkVyEjOSQiMSMqW29hWD1PYCEjOiQiMVVuTiF6cDNBJyEjOiQiMSllPSJSZy4pMyghIzokIjFeUDFjUSMpR3ohIzokIjE4enZgUzhUKCkhIzokIjFBLS1BISpwRCYqISM6JCIyJSlRM3BdRyVHNSEjOiQiMk0sJXojeiIqPTUiISM6JCIydyVIRydvY0o8IiEjOiQiMlg9MjAlSFNVNyEjOjdhcSQiMjdNUF9nNzJdIiEjOiQiMWU/QyVlI2VYOSEjOSQiMk5hZ25QNyoqUSIhIzokIjIpZXc/JnAkeUw4ISM6JCIxJ3pvSHUxdEYiISM5JCIxek9hJClmaT83ISM5JCIxZTVGISllI1I7IiEjOSQiMWFVPS5nVjI2ISM5JCIyWl8xSXpNOTAiISM6JCIxa1MsIzM4RCcqKiEjOiQiMW81JCo+VGtBJSohIzokIjA4TS9oKCkqKSopKSEjOSQiMTlHTSkzZ2hSKSEjOiQiMWltLVBQKCo9eiEjOiQiMWxTVjAzNnN1ISM6JCIxRiVRPDYoZWZxISM6JCIxOTVGPidIU28nISM6JCIxL3kvV2EmZk0nISM6JCIyJyopUjBnck9WZyEjOyQiMSNlXik9QiI+eCYhIzokIjEoUjFLUCRlRGIhIzokIjEkbzEvJWVtKEgmISM6JCIxeVloZ2JlIjMmISM6JCIxdVstMi1YclshIzokIjJYaHonemBFaVkhIzskIjEwRGNoTiIqXFchIzokIjF4UmJ5VytKVSEjOiQiMWs+W0ovby1TISM6JCIyd3dLbkBHQ3ckISM7JCIyVThOcGhHel0kISM7JCIxWDhOQzYocEIkISM6JCIxPipvXVohW1pIISM6JCIxTVljYGd2UEUhIzokIjJ0RSZvIUhZckkjISM7JCIyTW4sdlY9dyY+ISM7JCIyc0wqXF96LihmIiEjOyQiMXZiZ1NoJVxDIiEjOiQiMW1kTEY7cClRKiEjOyQiMXc4KXpwKSkqKkgoISM7JCIxM0JAaSMpcE5sISM7JCIxaEomZmBtWSdwISM7JCIxUXhBW1wieTQpISM7JCIxVVQnb0RpSVkqISM7JCIyTyZSL3RaOHg1ISM7JCIyayd5NnkpUicpPSIhIzskIjJVcTVlT3FkRiIhIzskIjFCPilRd0h2TCIhIzokIjJRXkcrXlhZUCIhIzskIjJaXSpvd2pcKVEiISM7JCIyZkU+LzVmMVEiISM7JCIxZnN1aFl1XzghIzokIjJsXWwneShvakkiISM7JCIyUCEzZU1fPVY3ISM7JCIyXyVIcjInW1w7IiEjOyQiMiM9LzNBJilldDUhIzskIi8iXCcqSD1HciohIzkkIjE7PmZdVzIwJykhIzskIjE+PnVUTWtTdSEjOyQiMD5bUmExLkQnISM6JCIxPFhNNmNZbV0hIzskIjEqRzI3KjRBQFIhIzskIjFAZW1CI1JTJUchIzskIjIkUV9MSkVzZj0hIzwkIjFbUSNSIltwdikqISM8JCIydmw5KFttZEJDISM9JCExT2NPcUJNSE8hIzwkITFVOGBpZ3dPIikhIzwkITEmSDNgYk42NCIhIzskITIyPnZJWiopRzwiISM8JCEyTVhkLFtncy4iISM8JCExaWwleUVPO3InISM8JCExbEN5RTNZYHkhIz0kIjAlekZkRDpaciEjOyQiMnlfR2lJaz5tIiEjPCQiMVQnKlxSWydHcSMhIzskIjFrJz50dmRIeCQhIzskIjFYKlJTPnVGIlshIzskIjEpKjNMMFs3dmQhIzskIjBMMmx5dTZqJyEjOiQiMTt2NiwnKmZ3dCEjOyQiMTYxckNrMFEhKSEjOyQiMS06QEhJJW9uKSEjOyQiMWstKkdRcThRKiEjOyQiMExqZTMwUi0iISM5JCIyblYmKSkpKT1vSDYhIzskIjJrJFJbbC93YzchIzskIjI4MFJeOj4pPjkhIzskIjJjdHRbPSVvKm8iISM7JCIxL3ldaCkqWzRBISM6JCIyPEBKI1spUmMuJCEjOyQiMEMkW2JWX0lTISM5JCIxJilvTyRRXzIwJiEjOiQiMXVUL1t4KWYuJyEjOiQiMjFpeSFRTDFzcCEjOyQiMWBEYD83RGd5ISM6JCIxSCZwVnZuY3EpISM6JCIxWHlWNCg+UF4qISM6JCIyQylHJlItPCpHNSEjOiQiMlwnWyRmIykqZi42ISM6JCIyemUhKUh5WmQ8IiEjOiQiMmklW1sxLGpYNyEjOjdhcSQiMioqW0pWKVw4dDkhIzokIjJlbTB2eWlqVCIhIzokIjJ5OzYyJlwqKWU4ISM6JCIxJHlGckEsM0kiISM5JCIybmwheldGPVU3ISM6JCIyJjMudHEpeko9IiEjOiQiMlVjYDteISlSNyIhIzokIjJDeSI9ViFHWzEiISM6JCIxKWZ3JlJ5LTE1ISM5JCIwLTkuKzomeiUqISM5JCIxWGltIylbUTUqKSEjOiQiMG5gLktjek4pISM5JCIxKCopKXAlelV6I3khIzokIjFsZTEhSDBtSyghIzokIjFeXFImW18vJ28hIzokIjJOJXAjZVtSYlYnISM7JCIwIlEicHlyaTAnISM5JCIxNy5NQSgqKlJzJiEjOiQiMScpenRCITRoViYhIzokIjJiNCVvc05EJz0mISM7JCIxWCh6azsmcGxcISM6JCIyRCk0YiZlUV13JSEjOyQiMWkmZlIhSGd2WCEjOiQiMVwuOFVBNiFSJSEjOiQiMXgqcFdvL0c/JSEjOiQiMXh5Uz5yPzRTISM6JCIybzsqPiR5JHkwUSEjOyQiMm9dSHJldiYqZSQhIzskIjFpOCZlaHd5TiQhIzokIjFidElKayZ6NSQhIzokIjJEZSlSb10jbyRHISM7JCIyQiE+cnB5L1REISM7JCIyPSk+cyV6aG1AIyEjOyQiMm1VcSJlX1BmPSEjOyQiMlBKXGEyM2NZIiEjOyQiMTBtbStuKGYuIiEjOiQiMS1XNTM7TGBlISM7JCIxZmIiPVMwZWwiISM7JCExRk9GJCpwOk42ISM7JCExRCdIW1czb10iISM7JCIyYDdCdzZYM1wiISM9JCIvKFJiJ1tGKGYjISM5JCIxKD0xcVNAVywmISM7JCIxLDlpcWN6IzQoISM7JCIxZWwwSycqUW0oKSEjOyQiMltaPl8lKiozMDUhIzskIjJ4YlgpUnVGKTQiISM7JCIxVE1pMzYlKmY2ISM6JCIyOEI4R2sjUSQ+IiEjOyQiMmNNYjh6Nzk/IiEjOyQiMk1gXS1XWms9IiEjOyQiMiRHKG8oUlNrXTYhIzskIjJhXWMrJWUvJzQiISM7JCIyJltARFVrc0M1ISM7JCIxX3ZlTzFMKlEqISM7JCIxaTxOZSdSQVQpISM7JCIxPVhTLG4nZU0oISM7JCIxTTIqUl4uXkEnISM7JCIwO1R2Lj8oKjMmISM6JCIvRDpLPCJIKVIhIzkkIjFjLTwiKWZGW0ghIzskIjFPJ3A4QT5iLSMhIzskIjEmSDBcVyxnQyIhIzskIjEoNGZ2UCMpeUgnISM8JCIwWyRRVCU0ZiY9ISM7JCExNyZcQXpdIUcnKSEjPSQhMk03IXA4JzNOKj0hIz0kITFNRDVaXjtxNyEjPCQiMU0lb0huKW8hKikqISM9JCIydSZvNSMqeiVRJ1shIz0kIjJ2TXlOXk0pRzUhIzwkIjFBdzc2dTw1PCEjOyQiMll4NjI7SzpdIyEjPCQiMmImW3gtJEc1TyQhIzwkIjE+cGI7dHRPVSEjOyQiMW9XTUdkYHJdISM7JCIxJiplPHIhKWUzZSEjOyQiMFZiUkg8cVInISM6JCIxLE5iM0trKXonISM7JCIxa3VbIUgieigqcCEjOyQiMXIqW3lSMGgsKCEjOyQiMXA2XENdNklwISM7JCIxeSZST0kiPXZvISM7JCIxLmE7ZkcibypwISM7JCIxMTonXCg+WD90ISM7JCIxPlU3NyZSZmgoISM7JCIxZkdNMm8sJ1soISM7JCIxIkhpajhTWEsoISM7JCIyN0coPXNwbFE2ISM7JCIybjArY0dTMEcjISM7JCIyWmU2YDlOX2YkISM7JCIxcEdGWCdcciFbISM6JCIxZGNpQyozQiFmISM6JCIxXk52KW9NVyFwISM6JCIxI29cQCUzV015ISM6JCIxayNRXmlUdXEpISM6JCIxT2QkKlJsP00mKiEjOiQiMiJcekFzZkRLNSEjOiQiMjYpcDRVSSR5NSIhIzokIjI6YWY1eidmIT0iISM6JCIydSkpW21DJSozRCIhIzo3YXEkIjI3P19mUixqVyIhIzokIjIpZipbLW5VeVEiISM6JCIyUE9eT2gzJkc4ISM6JCIyaD1dUC9dJG83ISM6JCIyL0MkZnE1WDI3ISM6JCIyTiZcLEYmUmY5IiEjOiQiMi1AR0dsKSpSMyIhIzokIjAzVEUkKnk9LSIhIzgkIjEkUT9xIlIzKmYqISM6JCIwSjhaTycqXCkqKSEjOSQiMWwrS21JYCJRKSEjOiQiMlhMM09PMVl6KCEjOyQiMSh6IzN2QTVKcyEjOiQiMSxUI0hPIyoqKXAnISM6JCIxX0BwKCl6RzJpISM6JCIxIilvQ2lOS2xkISM6JCIxJGVbRmtAM1EmISM6JCIxZGNZYmQrZF0hIzokIjFvXyVcLDEveiUhIzokIjEzdkpCNz9yWCEjOiQiMSNSVz1OWGdRJSEjOiQiMUg8LXA4V0BVISM6JCIxWC5JKFtPZjElISM6JCIxMCF6RigqMzMiUiEjOiQiMmklNGxBLHpcUCEjOyQiMVhaSV44VXlOISM6JCIxPFA2PSkpUSRSJCEjOiQiMTxlbShHYz4+JCEjOiQiL1RecjxdckghIzgkIjIyV1ByLD4iSEYhIzskIjJEKEcrPy9CaEMhIzskIjJHJDQpKSpRXUo7IyEjOyQiMjMlKnAlby5gRz0hIzskIjIyVWYjZVppWzkhIzskIjBOJHBUcFc2NSEjOSQiMFRDYTsycCwmISM6JCExdXNXZCZlLEwqISM8JCExeShHWWdiTVcoISM7JCEwJik+R0RkQ0IiISM5JCExdVU1cTB2czYhIzokITFWSFNpV3hSdCEjOyQhMkJ4YDEkPSFIeSMhIzwkIjE3JXltcl0jKVIqISM8JCIyMEhLK3lTKyRRISM8JCIxZjVYOChlei4nISM7JCIxOGQhKUgiZmxwKCEjOyQiMSc9d1w2X1khKikhIzskIjFbJVxicVBQdCohIzskIjJOKzYrbjhPLSIhIzskIjIvaFpGej1eLyIhIzskIjJ6LWJ3Q3A0LyIhIzskIjFGJip5eCI+UCwiISM6JCIxN2A3dHBjYycqISM7JCIxKlE6VmowLioqKSEjOyQiMXkjXFxqZ0U7KSEjOyQiMUdtTFNFIT0/KCEjOyQiMTdJIipRJioqPTknISM7JCIxJz1odUUsWy0mISM7JCIyeDQyaDRsMSFSISM8JCIwRjQ3JVthRUchIzokIjJROztBejw/Jz0hIzwkIjEnNE9MZiF6aDUhIzskIjFvc1olZjQqcFkhIzwkIjFpT3hHTTphKSohIz0kITF2MD4lKVI/N1chIz0kIjEoMyYqR1NncDsjISM9JCIxKW87U1w8JCpwIyEjPCQiMShlVCo0dGBObiEjPCQiMi4lKipbNCtUMzchIzwkIjJCZyQ+aGRVYD0hIzwkIjFmbCs1MHIoZSMhIzskIjFUZFs9JT5tUSQhIzskIi5AKG9yWj1VISM4JCIxdTJdOzkrVl0hIzskIjFSZUpYLWQ2ZSEjOyQiMXdQMG8kSClvayEjOyQiMUApXFoleTBicCEjOyQiMSN5MiN5MEo0cyEjOyQiMCVHbU0mb1k8KCEjOiQiMCdHSjsiKj40byEjOiQiMXpnYSlSdCc0aCEjOyQiMVZ3I1xzZm86JiEjOyQiMidwKVIpXCFvTTwlISM8JCIxI1w3PypwSi9OISM7JCIwJUgiNCRHVEdMISM6JCIxYHhHJnAnM1tKISM7JCIyUFA0Jj1GM0E5ISM8JCExSm5AOy1OI0gmISM7JCEya10hUkNwY1w1ISM7JCIyMGwwJyl5NzpcIiEjOyQiMU5mISopPT9HSCQhIzokIjEkKjM4JHBoRW8lISM6JCIxRT1EYGRsZ2UhIzokIjFyXWcrKyJ6IXAhIzokIjAnR1dzTSNcJ3khIzkkIjFPLGMjKVIoXHYpISM6JCIxbXYjKXA8eSNmKiEjOiQiMiczIz0ydUkpUTUhIzokIjJpSSg+PU8nWzYiISM6JCIyMkVqJ2UvIXo9IiEjOiQiMi0hKTRiOVMkZTchIzo3YXEkIjJQKWVPaEFQPzkhIzokIjI7QWVHJD4/ZzghIzokIjJ0dihHKUdfKilIIiEjOiQiMjJSLkZeWW1CIiEjOiQiMiJvJ3pOPlRMPCIhIzokIjJ4dEFLd1IiNDYhIzokIjEoUSgzZyczVS8iISM5JCIxQWhfZyZbenkqISM6JCIxYS1nTSg9QzgqISM6JCIxMykpKlw6LitbKSEjOiQiMVw2XTFaSU95ISM6JCIxXDVWJz48ITNzISM6JCIyMDpIISlmZUlnJyEjOyQiMSYpM0J1YjFKZyEjOiQiMVB0YF0uOi9iISM6JCIxMEh6TCh5by4mISM6JCIwOkR1NyhbVlkhIzkkIjAzXyRvZWxKViEjOSQiMSdbbChHIjNuNCUhIzokIjJDbDBHYTtAI1IhIzskIjIxYWwkbzBCJ3kkISM7JCIyWlhqIVJtQXBPISM7JCIxRyJcdDM1amIkISM6JCIybSFwV0QjKXBQTSEjOyQiMmwxbEotOHRJJCEjOyQiMm4vbipbRFJoSiEjOyQiMk8nUmZRNVQoKkghIzskIjIoW3kkKls3SjhHISM7JCIxIilbIUhnV3BnIyEjOiQiMVkjNCdbZ2d2QiEjOiQiMjwkKVEhXGBiOkAhIzskIjJjLSFwPSkpUkA9ISM7JCIyTHdCJilHT15bIiEjOyQiMSZ6TyZ5ZlwlNCIhIzokIjEqKnBidGA4KEgnISM7JCIxKD05LlZjVm0mISM8JCExekhxR2htJSpvISM7JCEyUXFuJm9BUFI8ISM7JCEyMlhGMTxAUzMkISM7JCEydSxpXFNweWIjISM7JCEvJnkkUiozX1ciISM4JCExJ1JBQ2hFZUAoISM7JCEybkdddFtzOUgjISM8JCIxbTJaYTA/VzchIzskIjEoZk42WixHJlEhIzskIjEpcCRHKHknPil5JiEjOyQiMThOIlElUlMtcyEjOyQiMTFEdmpsaiM+KSEjOyQiMSk9RGNVLlcjKSkhIzskIjFYamZSaCRSOSohIzskIjE7Jj1LMyJbJj0qISM7JCIxO2pnJjQvZygqKSEjOyQiMSYpUjombzAnUSYpISM7JCIxKmV0V0QlUSYqeSEjOyQiMUtYZ0xCQHFxISM7JCIxVSlIXms9PDQnISM7JCIyO3YoeSpRb2wqXCEjPCQiMSopekB6RXhLUSEjOyQiMT5JSSwlM0BtIyEjOyQiMSZ5Ol0kKj4pZjohIzskIjFzOz1cNlIiNCchIzwkITEtRldFZScqMzYhIzwkITEweHAwK1BAYSEjPCQhMGVNTyEqb1FoJyEjOyQhMXI6RkciKTNQWyEjPCQhMUspZSpwbDQkSCYhIz0kIjFzNXVWVXRXZCEjPCQiMjc6K0cwJFtWOCEjPCQiMkUlPjAhRzh5PyMhIzwkIjJ4T1ZPeVwwOCQhIzwkIjFtXSFvXVEyMyUhIzskIjF5eXUrTGlHXSEjOyQiMXklMzE0RzglZiEjOyQiMS8ya0UpKnl6biEjOyQiMW9dbj8pcHBcKCEjOyQiMGtbLSM9IXAuKSEjOiQiMXdDaiJwTFNMKSEjOyQiMWxUKFxOaUVKKSEjOyQiMWJAXENITCgpeSEjOyQiMVZcXTBUJnoncCEjOyQiMW0+JVJVVDlbJiEjOyQiMS1lKW9tTUZXJCEjOyQiMnNLdjVOeC45IiEjPCQhMVEjeTtiND8vJyEjPCQhMC1gSyoqeWVJKSEjOyQhMktBdUsrcnlWIiEjPiQhMVlsNko1Sy9WISM8JCExMC9mVm9ENmQhIzskITEqKXpXeVNhOSopISM7JCIyR3I/IkcyVVI6ISM7JCIxMDJGYXEmKVxMISM6JCIxdEZ1VW9sYVohIzokIjEoR2VwaFJTJWYhIzokIjFeSS96JG8hKipwISM6JCIxI3BLXjJhNSd6ISM6JCIxLSJ5dXgsUyYpKSEjOiQiMVAxR2g3PSRwKiEjOiQiMUsoUVtZJiopWzUhIzkkIjE2RzlHKyhbNyIhIzkkIjIqRyJIPC8oeSg+IiEjOiQiMiI+JykqR1loIW83ISM6N2FxJCIxcChIOzpEYlIiISM5JCIyMU9LLEVXT0wiISM6JCIyakcyYmRkL0YiISM6JCIxWkd3Xi0mZj8iISM5JCIyeTpvRSl5OFM2ISM6JCIyXE1tKUdKM3Q1ISM6JCIyXEpWbGg8XCsiISM6JCIxRVA1ImYhb2UkKiEjOiQiMXcjKm86UCNHbSkhIzokIjFseGVFOFpteiEjOiQiMTRjZyE+ZWVGKCEjOiQiMGJ6UUl0JClmJyEjOSQiMV54My9sWlVmISM6JCIxaShvcTxdJj1gISM6JCIxL2pnYyhROXUlISM6JCIxMTotWStaTFUhIzokIjFFSDJvY0pBUSEjOiQiMjx2YU5STHNfJCEjOyQiMVB0YXpaIj1NJCEjOiQiMUVOSklKd01LISM6JCIxOEdgUGFZb0ohIzokIjFYcSZbLSF6OEohIzokIjIudCRRPVcqSDAkISM7JCIyM0RlIylmT24oSCEjOyQiMlBXLUo9bzApRyEjOyQiMm1US1Y3KFxpRiEjOyQiMihwYSpbdEw6aSMhIzskIjIxZzM4alNvWCMhIzskIjFtX0MiUiE+bkEhIzokIjJrVF5VPFEwMCMhIzskIjJ6KVI7UiZwTiE9ISM7JCIyd2dPYlR6NV8iISM7JCIxYCk0dV9lXD4iISM6JCIxV3BYZGFKQiIpISM7JCIxJD0lPUZlVzxOISM7JCExOidHUEJ5dEQjISM7JCEyWiVlQDJZZyw1ISM7JCEyI1Erbis4YiY+IyEjOyQhMUheJnkyLDJyJSEjOiQhMmMuMWdgTW5HJCEjOyQhMVdNQVlYLWg8ISM6JCExKm8jKipccEUlXCohIzskITJ1PjdzJDNXLVUhIzwkITFRKTRiaCxlWCUhIzwkIjFjTjxwI2VfSyMhIzskIjE4IypHaHFZI1IlISM7JCIxMSc0YiU0Nj5mISM7JCIxbSkpKUdRPXArKCEjOyQiMWxQZj1LKEhzKCEjOyQiMT1jJFswI1w4IikhIzskIjEqUV9AYGg7QCkhIzskIjEqcCpSIVxzRC8pISM7JCIxZE0mcF5jbmkoISM7JCIxZik+J0doPiQpcCEjOyQiMTozaUM3VUtoISM7JCIxRiQpPSopPj8rXiEjOyQiMS8pPlUtW0EjUiEjOyQiMS9EP1xUK11FISM7JCIxXHoyP0VyYzghIzskIjJwb2ZTaVUlNDkhIz0kITEudCFcKikpR3ooKSEjPCQhMiRRUGVwLWF5OiEjPCQhMVlgUG0hUSsoPSEjOyQhMloyX24hUkJCPCEjPCQhMm93XTxbPyV5NiEjPCQhMTddMEF5KXBCJCEjPCQiMVIjKjMsK2khUighIzwkIjIobykzPWprKD4+ISM8JCIybm8mZTBnJClcSiEjPCQiMS5tV3VQUyFRJSEjOyQiMU0hMzF4NmJkJiEjOyQiMV93KT44UVpxJyEjOyQiMVYyMi4hcHF0KCEjOyQiMUFgO0BhT08nKSEjOyQiMUF5WCVwQCFlJCohIzskIjF1JTNsW25nJSkqISM7JCIyWFpHYiIqeUgrIiEjOyQiLm1Sd0spPSkqISM4JCIxMiRvOyRScyY0KiEjOyQiMU8wJSpIck8weCEjOyQiMVxKMHYxelhhISM7JCIyajReNUoyQDQjISM8JCEyVnNBViEqcEtPIyEjPCQhMSI+Jlt5ay5FbCEjOyQhMURLY2wwLSJRJyEjOyQhMik9RHckUkZaMSMhIzwkIjJ3TTM9KFIoXDEjISM8JCIxanNTbUwpXDsmISM7JCIxRiJwOV45J1E2ISM6JCIxcl4rWG1IJ1EjISM6JCIxdERrS29LblAhIzokIjJNWEohMzpRRl0hIzskIjFDdURwMjhjaCEjOiQiMTMmW25QJm8hPSghIzokIjBIJVwnPndbNykhIzkkIjEieTsoW2UtMSEqISM6JCIxKHprPzs2bCQpKiEjOiQiMjMwKTNyPmBpNSEjOiQiMikqRyQ+JylHIno4IiEjOiQiMlFXTEdMLC5AIiEjOiQiMmhQNHAvIjQhRyIhIzo3YXEkIjIzLSJ6IjNfPlAiISM6JCIybj5XRVAmUjM4ISM6JCIyMzVeM1cpR1Y3ISM6JCIyOSdSPUZuY3c2ISM6JCIyUjwzeEopPTM2ISM6JCIyVVo9azJgIlE1ISM6JCIxakQkKipSNWBtKiEjOiQiMSpbKD1GMixOKikhIzokIjE8JUdFXWZSPikhIzokIjFZVG0jKj1SWnUhIzokIjJYJzQxKjRQQ3EnISM7JCIxSzk6V25TbmYhIzokIjE+IXoqSCZHMUQmISM6JCIxUXh4KlsoZWdYISM6JCIwWzN2d3czIlIhIzkkIjJGIyk0WjQiM0tMISM7JCIybSgqPlZKQywpRyEjOyQiMjNyL3hDVCQzRSEjOyQiMWVIIW90WHhdIyEjOiQiMWhbXypHdSUzRCEjOiQiMjddKW8uKD02YSMhIzskIjEqemNwZG1lYyMhIzokIjJpdjsiWy0jZmMjISM7JCIyRjtQOTVuZ2AjISM7JCIyJXBDJnAjcChlWiMhIzskIjIkKmUncDY5XidRIyEjOyQiMi5oUV0/PSRwQSEjOyQiMiVILWIjZiI+REAhIzskIjJDcDZ1ITRCYT4hIzskIjIjKnlYK2IiW2I8ISM7JCIyYDE8KW9Aa0U6ISM7JCIyMiZvMmJJa2o3ISM7JCIxOHhiKnpBKCpmKiEjOyQiMVdcJyo9bFliZyEjOyQiMiUpND0sN1x6JT0hIzwkITJPXlRdJTNoakshIzwkITE0NyZbIVJzRScqISM7JCEyKT5TOVImPlp1IiEjOyQhMkRkJ1twJ0ctViMhIzskITJ4QUFBaihRSkEhIzskITJPak5YIkgoPWAiISM7JCExIzNnczt4J28jKiEjOyQhMjpSciVwMyhcbiUhIzwkITJAa19PMkd2PSIhIzwkIjJEI0cnKilmJVIkWyIhIzwkIjJFTnglKmU0eV8kISM8JCIxelFVbVw+cF0hIzskIjEoby02JFFpKj0nISM7JCIxN1smM1wiKVwlcCEjOyQiMXl2ZCxUM3V0ISM7JCIxTUBTTVROL3YhIzskIjFraD5jb2didCEjOyQiMXhdSCF5IypHJXAhIzskIjExO3JAbjF6aSEjOyQiMVkjenpeJ3B4YCEjOyQiMmopempmYi1kVSEjPCQiMjArQU0qXCFmJUghIzwkIjIkWyp5M2w9RlwiISM8JCEwKCk0IXBSR0pBISM8JCEyJGYpPUkqXC11OSEjPCQhMlY5UlJUQiQpbyMhIzwkITEtPi1cLkttTSEjOyQhMiUpKT5qJmYleltPISM8JCExdCgpKkdYNzk+JCEjOyQhMURXP15iKyY9IyEjOyQhMTlVXGpqVishKSEjPCQiMSNccDglZkEnKnkhIzwkIjEpPTMkKkgkM11DISM7JCIxYWsoPls9TjQlISM7JCIxJlxwUid6Zm1jISM7JCIxJlInW28vLU9yISM7JCIxOzBWVydmb1opISM7JCIxRmY5UixVaycqISM7JCIxZmM7KCkqcG8xIiEjOiQiMk8pNC9mby1YNiEjOyQiMjwxYXpvTmM+IiEjOyQiMiRwM11gKno6QCIhIzskIjJrIzNuQko0JD0iISM7JCIyeXUqSDEkM2o0IiEjOyQiMU5Xb1VbZS8kKiEjOyQiLyYzPztNKj5sISM5JCIyQShwNUwnKWUzPyEjPCQhMWJqLlc/I1xWJiEjOyQhMnghPkxANkJbPCEjOyQhMiQ+MSlwd0xEcCIhIzskITIuIUcheTJZWzUkISM8JCIwKHB2IVtJZk4nISM6JCIyTlxfQWsua1EiISM7JCIyN3VNXV9VJzNBISM7JCIydmQiMzFgKD5BJCEjOyQiMSdvO05fXGBMJSEjOiQiMSd6MVcmUiVRViYhIzokIjBKUUIrLzhaJyEjOSQiMSxBTWpcX1R1ISM6JCIxPUssaWwjNE4pISM6JCIxXm0vVVI7MyMqISM6JCIyS1tHJClIOUArIiEjOiQiMnInSCFmTlUnejUhIzokIjFZaSFvbUhSOiIhIzkkIjFHb1lmM1NENyEjOSQiMixxP3g6KVIlSCIhIzo3YXEkIjJFInBNT1kmKVw4ISM6JCIyYHEwQUspcCVHIiEjOiQiME0/Mm5QeEAiISM4JCIyI29jYipmWSlbNiEjOiQiMmFgRlMocCF6MiIhIzokIjItRC5hc0ZbKyIhIzokIjEjcFx0Jz15JkgqISM6JCIxJyoqb0hRP0NfKSEjOiQiMkRSNWgkKls0dCghIzskIjF0bicqM3QicCNwISM6JCIxUmdsMyRwIT5oISM6JCIyJkhJUCkpMzM9YCEjOyQiMTB1KWVSYEVgJSEjOiQiMkVTXnUrY113JCEjOyQiMm05SV8qUW05SSEjOyQiMihHZztHJHpfSSMhIzskIjJ5ISpvRFlYW3UiISM7JCIyRz0tJypHIW8wOiEjOyQiMlp2cElrI0d1OiEjOyQiMiVcXEhqeT9jPCEjOyQiMmJII0dMJHphIz4hIzskIjI8KSlma0AvVy8jISM7JCIyVmNLKG9BWDRAISM7JCIxZHBiKD5iZjcjISM6JCIyUSdSQXpLUCtAISM7JCIyJkddOXUxRlE/ISM7JCIxQXg/PDwhUiU+ISM6JCIxUF8zJyo+Pz89ISM6JCIyKlxtYHchUilvOyEjOyQiMCUpKUheb0EhXCIhIzkkIjElZkM3V3pNRyIhIzokIjFEUSpHSi9qLyIhIzokIjEsJFxBeS8nW3ghIzskIjIxcSpvbXYmcGolISM8JCIyWEgoeiQ0Lz8xIiEjPCQhMFo8ay1MI0dJISM6JCExY1VUPyVwI3B2ISM7JCEyRSEpXDNdblw/IiEjOyQhMWVRX0wleUxcIiEjOiQhMnU8UEAyYmZXIiEjOyQhMSQzJT4jPW5TOCIhIzokITE4eUImcGhbYSghIzskITFGYyc9OTY9MSUhIzskITIoPUUieXkjKipINiEjPCQiMnRQOms5RXREIiEjPCQiMmN2QkRyZSZmSiEjPCQiMjJiRVQxS2dqJSEjPCQiMTw8YWRla01kISM7JCIxO0BXL2JSIlwnISM7JCIxJSkpb3UjZUVLcCEjOyQiMVxER3ZzRnZxISM7JCIxXiMzKHBKQktwISM7JCIxLCMpbz88QjVsISM7JCIxRnAhZi4ySyJlISM7JCIxYChlL21iUiVbISM7JCIxXnBRXiNbdWckISM7JCIyTE1zRE12bzYjISM8JCIxQ15VMVBoXFMhIzwkITJNMytwMEFkWCIhIzwkITJGa3Y+JnoiNEskISM8JCEyJD5zWD1OLVRcISM8JCExXDVwOTNlcWYhIzskITFzUSMpUlJmIzQnISM7JCExYm1jWEBRQV8hIzskITFgQkkkKVFYcE4hIzskITJNRDdzI1xJdDkhIzwkIjFgdkpcbzd2eCEjPCQiMjhkZVY8L0srJCEjPCQiMXluTltZejVeISM7JCIxWlNnWDp1ZHEhIzskIjBWWiFSIXldIykpISM6JCIySmxmXGlMLC8iISM7JCIyZVJhcVVadDwiISM7JCIyV3RjVjtiQEgiISM7JCIyXDQzaSUzXSJRIiEjOyQiMVQlUlN1LjRXIiEjOiQiMlt1bkgxaVJZIiEjOyQiMk44b110QzpXIiEjOyQiMmNMOVwzZyxPIiEjOyQiMms5YXEoSDIqPiIhIzskIjEmeTNVeVc8QiohIzskIjInKmZoJkdgT1pZISM8JCEyblFEQSJIJ1JSJCEjPCQhMTZEKHoiPVBqPyEjOiQhMlh0cURReFgoPiEjOyQiMWkjPlpiaVUuKiEjPCQiMlVYKUctVHNiNyEjOyQiMik+TWYyKT1NOyMhIzskIjEoXC5pMCV5T0khIzokIjImeT5JTmgvaVIhIzskIjFycVlmM2RLXCEjOiQiMXRlLHhCSTJmISM6JCIxZkZiJDNQYCZvISM6JCIxKVJaXUwmUWp4ISM6JCIxeS1tJkhrKkcnKSEjOiQiMUwxInkqPkthJSohIzokIjFCOyRmImZLQzUhIzkkIjJoenokSGgoKio0IiEjOiQiMkxTOTwmKltGPCIhIzokIjImPmJ0JHBqSEMiISM6JCIyKVxkJTQhSCozSiIhIzo3YXEkIjJhIylvImZrVkg4ISM6JCIyam5xVzMwR0UiISM6JCIyJD1vSTMlPVQ+IiEjOiQiMkxNeC06eko3IiEjOiQiMWlwSlJaeFw1ISM5JCIwYFhlKCo0cHQqISM5JCIxdSM0JilcTXUlKikhIzokIjF0RmNgXFRHIikhIzokIjElKUhEQ2MyIkcoISM6JCIxYWJlZyVvMVQnISM6JCIxUmNWeFVjR2IhIzokIjEiejViOFA+bCUhIzokIjEkPWhpUU9keiQhIzokIjI6I28iSFlXXiZIISM7JCIxXmNPKW96OzQjISM6JCIyVVooPU04I0c6IiEjOyQiMUgtb2U4JUhZIyEjOyQiMWxWKD56WiI+YiEjPCQiMXhlP3NnNTZiISM7JCIydWlYXnpiOC4iISM7JCIyTk40cVJ1Wk8iISM7JCIyJz04P04qenlkIiEjOyQiMm8/IypIMSZmLDwhIzskIjJpWCVmc151ZDwhIzskIjIkNFRUKilSO2g8ISM7JCIxPVxedGQyQTwhIzokIjJBMiYzTWZnWjshIzskIjJpJVxnOCVvRWEiISM7JCIxM1ZVKnAiWzU5ISM6JCIyQnE3RT11R0QiISM7JCIyUDJna00mW3E1ISM7JCIxMmNcQHBiSCcpISM7JCIxInBQeVlKQkgnISM7JCIxZlJkYy9aI28kISM7JCIxKT5IdTZlODApISM8JCEyYGdJWS8sNUcjISM8JCEwTmdba1ZTUSYhIzokITFUImVHWHpyMCkhIzskITEmWzlCIWZTJ2UqISM7JCExRnhsTyFwZVUqISM7JCExSmElUlxzXnkoISM7JCEwVSVvYkhKJFImISM6JCExd3NRNyZbaCdHISM7JCExW051d20zQl8hIzwkIjJpdCcpeV9rYV4iISM8JCIxKlEhPWpLJVxAJCEjOyQiMncmKUd6Jz5xeVghIzwkIjFcaiNRKWUnKT5jISM7JCIvcGViO1BfaiEjOSQiMWZJYVp2Rih5JyEjOyQiMWAlKmYwPVpKcCEjOyQiMVBJYVp2Rih5JyEjOyQiMWNvZWI7UF9qISM7JCIxJUdFUSllJyk+YyEjOyQiMjB3R3onPnF5WCEjPCQiMjBFIT1qSyVcQCQhIzwkIjFzbCl5X2thXiIhIzskITJtdVhubiczQl8hIz0kITFbdlE3JltoJ0chIzskITFeWm9iSEokUiYhIzskITE7ZSVSXHNeeSghIzskITEuImVtLnBlVSohIzskITBzOUIhZlMnZSohIzokITFBI2VHWHpyMCkhIzskITEiR2dba1ZTUSYhIzskITFqL2pXNSsiRyMhIzskIjAnNFY8ImU4MCkhIzskIjFSVWRjL1ojbyQhIzskIjFgeiR5WUpCSCchIzskIjEjKmVcQHBiSCcpISM7JCIyRjVna00mW3E1ISM7JCIyKkhGaCM9dUdEIiEjOyQiMUpWVSpwIls1OSEjOiQiMXhcZzglb0VhIiEjOiQiMlc0JjNNZmdaOyEjOyQiMkUlXF50ZDJBPCEjOyQiMlU4OSUqKVI7aDwhIzskIjJQWyVmc151ZDwhIzskIjIlPkEqSDEmZiw8ISM7JCIyQ00sXyQqenlkIiEjOyQiMlVONHFSdVpPIiEjOyQiMjxyWF56YjguIiEjOyQiMTxsP3NnNTZiISM7JCIya2AqKT56WiI+YiEjPSQiMUMwb2U4JUhZIyEjOyQiMnZmKD1NOCNHOiIhIzskIjE3Zk8pb3o7NCMhIzokIjJRIW8iSFlXXiZIISM7JCIwRWhpUU9keiQhIzkkIjEsNF5OciQ+bCUhIzokIjFSZFZ4VWNHYiEjOiQiMWFjZWclbzFUJyEjOiQiMXhJRENjMiJHKCEjOiQiMCZHY2BcVEciKSEjOSQiMWEkNCYpXE11JSopISM6JCIxLWMlZSgqNHB0KiEjOiQiMXBwSlJaeFw1ISM5JCIwTngtOnpKNyIhIzgkIjJaI29JMyU9VD4iISM6JCIyQ29xVzMwR0UiISM6JCIxSilvImZrVkg4ISM5N2FxJCIxV2QlNCFIKjNKIiEjOSQiMk9eTlBwakhDIiEjOiQiMnBSOTwmKltGPCIhIzokIjIjKnl6JEhoKCoqNCIhIzokIjE7OyRmImZLQzUhIzkkIjFoMCJ5Kj5LYSUqISM6JCIxKD5nY0hrKkcnKSEjOiQiMUB0L05gUWp4ISM6JCIxeEViJDNQYCZvISM6JCIxSGQseEJJMmYhIzokIjFBcVlmM2RLXCEjOiQiMSl5LGA4WT8nUiEjOiQiMlBNLmkwJXlPSSEjOyQiMiU9TWYyKT1NOyMhIzskIjJfTilHLVRzYjchIzskIjEnSERZYmlVLiohIzwkITEnUmpEUXhYKD4hIzokITIyN3d6Ij1Qaj8hIzskITJ2LkJBIkgnUlIkISM8JCIxTC5jR2BPWlkhIzskIjEjUTNVeVc8QiohIzskIjJXNGFxKEgyKj4iISM7JCIxUFYiXDNnLE8iISM6JCIybTZvXXRDOlciISM7JCIxTHgnSDFpUlkiISM6JCIxOCVSU3UuNFciISM6JCIyMjIzaSUzXSJRIiEjOyQiMiQ0bk5rXjojSCIhIzskIjJ0UGFxVVp0PCIhIzskIjFKJ2ZcaUwsLyIhIzokIjA5WiFSIXldIykpISM6JCIxL1FnWDp1ZHEhIzskIjFbbE5bWXo1XiEjOyQiMkVNZVY8L0srJCEjPCQiMChmSlxvN3Z4ISM7JCExS0JARlxJdDkhIzskITJhTS1MKVFYcE4hIzwkITBlbWI5I1FBXyEjOiQhMShwQilSUmYjNCchIzskITEmeSFwOTNlcWYhIzskITJNJHBYPU4tVFwhIzwkITF2YCg+JnoiNEskISM7JCEyMCUpKipvMEFkWCIhIzwkIjJZQkZrcTgnXFMhIz0kIjJjXnNETXZvNiMhIzwkIjI6NChRXiNbdWckISM8JCIxbSllL21iUiVbISM7JCIxOXEhZi4ySyJlISM7JCIxayMpbz88QjVsISM7JCIxJkgzKHBKQktwISM7JCIxckRHdnNGdnEhIzskIjElKSlvdSNlRUtwISM7JCIxIzRVV10mUiJcJyEjOyQiMXI7YWRla01kISM7JCIyQ1pFVDFLZ2olISM8JCIxV09fNyhlJmZKISM7JCIybUE6azlFdEQiISM8JCEwJUcieXkjKipINiEjOiQhMUZmJz05Nj0xJSEjOyQhMEFRX3BoW2EoISM6JCEydDglPiM9blM4IiEjOyQhMndCUEAyYmZXIiEjOyQhMk4qUV9MJXlMXCIhIzskITEvKVwzXW5cPyIhIzokITEsVFQ/JXAjcHYhIzskITFAc1RFSUJHSSEjOyQiMSllKHokNC8/MSIhIzskIjFWK3BtdiZwaiUhIzskIjFHJ1xBeS8nW3ghIzskIjJ5JlEqR0ovai8iISM7JCIxSFlBVCV6TUciISM6JCIyJXApKUheb0EhXCIhIzskIjF3bWB3IVIpbzshIzokIjIob18zJyo+Pz89ISM7JCIyR3Yyc3IsUiU+ISM7JCIydTBYVG5xI1E/ISM7JCIyLypSQXpLUCtAISM7JCIxKClwYig+YmY3IyEjOiQiMSNlSyhvQVg0QCEjOiQiMUgqZmtAL1cvIyEjOiQiMllNI0dMJHphIz4hIzskIjJ0LSZIank/YzwhIzskIjEqeXBJayNHdTohIzokIjEnUi0nKkchbzA6ISM6JCIycyIpb0RZWFt1IiEjOyQiMTRpO0ckel9JIyEjOiQiMmNHSV8qUW05SSEjOyQiMShcXnUrY113JCEjOiQiMTh2KWVSYEVgJSEjOiQiMVxKUCkpMzM9YCEjOiQiMTxobDMkcCE+aCEjOiQiMXZvJyozdCJwI3AhIzokIjF2LzZPKls0dCghIzokIjFzIXBIUT9DXykhIzokIjB4XHQnPXkmSCohIzkkIjJ2RC5hc0ZbKyIhIzokIjJCYUZTKHAhejIiISM6JCIyW25iJipmWSlbNiEjOiQiMmpNPzJuUHhAIiEjOiQiMjdyMEFLKXAlRyIhIzokIjIkPXBNT1kmKVw4ISM6N2FxJCIyV3A/eDopUiVIIiEjOiQiMkAjb1lmM1NENyEjOiQiMihSaSFvbUhSOiIhIzokIjIvJ0ghZk5VJ3o1ISM6JCIybFpHJClIOUArIiEjOiQiMXlsL1VSOzMjKiEjOiQiMU9KLGlsIzROKSEjOiQiMDdVTCdcX1R1ISM5JCIxLiNRQisvOFonISM6JCIxN25TYVIlUVYmISM6JCIxKmU7Tl9cYEwlISM6JCIxUjozMWAoPkEkISM6JCIxTlguRERrM0EhIzokIjE0RkRVT1MnUSIhIzokIjApUnchW0lmTichIzokITEjbzp5MllbNSQhIzskITIpPl8ocHdMRHAiISM7JCExNFNMQDZCWzwhIzokITBhV1MvQVxWJiEjOiQiMi9iNUpqKWUzPyEjPCQiMXIpMz87TSo+bCEjOyQiMVRSb1VbZS8kKiEjOyQiMipSKCpIMSQzajQiISM7JCIyQSEzbkJKNCQ9IiEjOyQiMiJmM11gKno6QCIhIzskIjFVUyZ6b05jPiIhIzokIjJ3JzQvZm8tWDYhIzskIjJwaWxyKSpwbzEiISM7JCIxT2Q5UixVaycqISM7JCIxRy5WVydmb1opISM7JCIxRmhbby8tT3IhIzskIjF2I3BSJ3pmbWMhIzskIjFZaSg+Wz1ONCUhIzskIjItKnpJKkgkM11DISM8JCIxbyZvOCVmQScqeSEjPCQhMVVaXGpqVishKSEjPCQhMVJXP15iKyY9IyEjOyQhMTAoKSpHWDc5PiQhIzskITImZT1qJmYleltPISM8JCExJnBAIVwuS21NISM7JCExSipRUlRCJClvIyEjOyQhMjtrPUkqXC11OSEjPCQhMnRdKikqb1JHSkEhIz4kIjJ3OHozbD1GXCIhIzwkIjFoQFUkKlwhZiVIISM7JCIxSCJRJ2ZiLWRVISM7JCIxbiR6el4ncHhgISM7JCIxLDxyQG4xemkhIzskIjFkXkgheSMqRyVwISM7JCIxRGk+Y29nYnQhIzskIjF1QFNNVE4vdiEjOyQiMSpmeDo1JTN1dCEjOyQiMCJbJjNcIilcJXAhIzokIjFwRTVKUWkqPSchIzskIjFHUVVtXD5wXSEjOyQiMW5zWiplNHlfJCEjOyQiMlZwaSopZiVSJFsiISM8JCEyWSVHbHQhR3Y9IiEjPCQhMjJwciVwMyhcbiUhIzwkITFaMEVucm5vIyohIzskITIoNGRgOUgoPWAiISM7JCEwTUFBaihRSkEhIzkkITJiaidbcCdHLVYjISM7JCEyJikqUjlSJj5adSIhIzskITFPMyZbIVJzRScqISM7JCExSzYvWDNoakshIzskIjI8Vz0sN1x6JT0hIzwkIjFfYCcqPWxZYmchIzskIjEpM2UmKnpBKCpmKiEjOyQiMiMpKW8yYklrajchIzskIjEuciIpb0BrRTohIzokIjJNI2UvXTpbYjwhIzskIjFEPFQyNEJhPiEjOiQiMlhFXURmIj5EQCEjOyQiMVcnUV0/PSRwQSEjOiQiMi9pJ3A2OV4nUSMhIzskIjImM0QmcCNwKGVaIyEjOyQiMicqPlA5NW5nYCMhIzskIjEleTsiWy0jZmMjISM6JCIydSVvJnBkbWVjIyEjOyQiMVcmKW8uKD02YSMhIzokIjI6KVtfKkd1JTNEISM7JCIybjAub3RYeF0jISM7JCIxVFtxWjdNM0UhIzokIjJFKio+VkpDLClHISM7JCIwJio0WjQiM0tMISM5JCIxI2Yzdnd3MyJSISM6JCIxQnl4KlsoZWdYISM6JCIyYzZ6KkgmRzFEJiEjOyQiMU06OlduU25mISM6JCIxYTUxKjRQQ3EnISM6JCIwQmtFKj1SWnUhIzkkIjEtJkdFXWZSPikhIzokIjFsdj1GMixOKikhIzokIjBrSyoqUjVgbSohIzkkIjI6Wz1rMmAiUTUhIzokIjIzPTN4Sik9MzYhIzokIjIjb1I9Rm5jdzYhIzokIjEyNiYzVylHVjchIzkkIjJFP1dFUCZSMzghIzokIjJuLSJ6IjNfPlAiISM6N2FxJCIyM1A0cC8iNCFHIiEjOiQiMVFNJEdMLC5AIiEjOSQiMk9HJD4nKUciejgiISM6JCIyWi8pM3I+YGk1ISM6JCIxQ1oxaTZeTykqISM6JCIxPW5yW2UtMSEqISM6JCIxN1VcJz53WzcpISM6JCIxVSVbblAmbyE9KCEjOiQiMSdIZCNwMjhjaCEjOiQiMSNSSiEzOlFGXSEjOiQiMV9Fa0tvS25QISM6JCIyJCkpXCtYbUgnUSMhIzskIjJRaW45XjknUTYhIzskIjE9IzRrTyQpXDsmISM7JCIxaWp6clIoXDEjISM7JCEyN0VwUFJGWjEjISM8JCExR2hibDAtIlEnISM7JCExOkBbeWsuRWwhIzskITJkYj9WISpwS08jISM8JCIxZkQwNnQ1IzQjISM7JCIxO1IwdjF6WGEhIzskIjFFLCUqSHJPMHghIzskIjEsI287JFJzJjQqISM7JCIxM2QnUndLKT0pKiEjOyQiMiZvJUdiIip5SCsiISM7JCIxXyEzbFtuZyUpKiEjOyQiMGBkV3BAIWUkKiEjOiQiMDRsNlVsamopISM6JCIxUjEyLiFwcXQoISM7JCIxdXYpPjhRWnEnISM7JCIxY3hncTxedmIhIzskIjInb2tXdVBTIVElISM8JCIxQmJlMGckKVxKISM7JCIyeXMzPWprKD4+ISM8JCIxVCcpMywraSFSKCEjPCQhMWheMEF5KXBCJCEjPCQhMiRSMnYiWz8leTYhIzwkITJlLV9uIVJCQjwhIzwkITFWX1BtIVErKD0hIzskITJQZSRlcC1heTohIzwkITBZMFwqKSlHeigpISM7JCIxRToxQ0VXNDkhIzwkIjFOInkraTduTiIhIzskIjJGby0jXFQrXUUhIzwkIjIuKCo+VS1bQSNSISM8JCIxdyUpPSopPj8rXiEjOyQiMVQ0aUM3VUtoISM7JCIwKCo+J0doPiQpcCEjOiQiMWBOJnBeY25pKCEjOyQiMSN5KlIhXHNELykhIzskIjFgQzpLOm02IykhIzskIjFrYyRbMCNcOCIpISM7JCIxJXokZj1LKEhzKCEjOyQiMXgpKSlHUT1wKyghIzskIjEqZTRiJTQ2PmYhIzskIjFtIipHaHFZI1IlISM7JCIxb008cCNlX0sjISM7JCExbTdeOjshZVglISM8JCEyY1U3cyQzVy1VISM8JCExeEkqKlxwRSVcKiEjOyQhMic9TkFZWC1oPCEjOyQhMndEMWdgTW5HJCEjOyQhMSYzYnkyLDJyJSEjOiQhMidSKnAxSV5iPiMhIzskITIlcGRAMllnLDUhIzskITFLIUdQQnl0RCMhIzskIjEibyU9RmVXPE4hIzskIjEydVhkYUpCIikhIzskIjEnKik0dV9lXD4iISM6JCIyeWtPYlR6NV8iISM7JCIyeS1rIlImcE4hPSEjOyQiMllYXlU8UTAwIyEjOyQiMS5gQyJSIT5uQSEjOiQiMVYnMzhqU29YIyEjOiQiMiM0YipbdEw6aSMhIzskIjJjWEtWNyhcaUYhIzskIjJuWy1KPW8wKUchIzskIjJjSGUjKWZPbihIISM7JCIyJm9QUT1XKkgwJCEjOyQiMlc0ZFstIXo4SiEjOyQiMmwmR2BQYVlvSiEjOyQiMGQ4LjhqWkIkISM5JCIxJVFaJnpaIj1NJCEjOiQiMk4kW2IkUkxzXyQhIzskIjIxK3Qhb2NKQVEhIzskIjEiZUBnL3FNQiUhIzokIjE7a2djKFE5dSUhIzokIjFbKW9xPF0mPWAhIzokIjFUeTMvbFpVZiEjOiQiMVsnelFJdCQpZichIzokIjEmcDAxPmVlRighIzokIjAmeWVFOFpteiEjOSQiMWgkKm86UCNHbSkhIzokIjEvUTUiZiFvZSQqISM6JCIyQUtWbGg8XCsiISM6JCIyPU5tKUdKM3Q1ISM6JCIyVjtvRSl5OFM2ISM6JCIyTyZHd14tJmY/IiEjOiQiMkRIMmJkZC9GIiEjOiQiMm9PSyxFV09MIiEjOiQiMll4SDs6RGJSIiEjOjdhcSQiMTknKSpHWWghbzchIzkkIjJNN0g8Lyh5KD4iISM6JCIyWiFHOUcrKFs3IiEjOiQiMmJzUVtZJiopWzUhIzokIjFyMEdoNz0kcCohIzokIjFUIXl1eCxTJikpISM6JCIyJypmS14yYTUneiEjOyQiMScqSC96JG8hKipwISM6JCIxIj5lcGhSUyVmISM6JCIxTkR1VW9sYVohIzokIjJ3VnFVMGQpXEwhIzskIjJqWj4iRzJVUjohIzskITE+ISpceVNhOSopISM7JCExJVJpTiVvRDZkISM7JCExKFsmPUo1Sy9WISM8JCEwUSgqSCtyeVYiISM8JCExRyVwSyoqeWVJKSEjPCQhMkViVjtiND8vJyEjPSQiMShRdzVOeC45IiEjOyQiMWxeKW9tTUZXJCEjOyQiMSo+VFJVVDlbJiEjOyQiMTxcXTBUJnoncCEjOyQiMHoiXENITCgpeSEjOiQiMXlXKFxOaUVKKSEjOyQiMSZSSztwTFNMKSEjOyQiMUAmWy0jPSFwLikhIzskIjFOW24/KXBwXCghIzskIjF6MWtFKSp5em4hIzskIjE0JTMxNEc4JWYhIzskIjEveHUrTGlHXSEjOyQiMSV6L29dUTIzJSEjOyQiMm5AVk95XDA4JCEjPCQiMUY9MCFHOHk/IyEjOyQiMVArIUcwJFtWOCEjOyQiMk1uU1BDTVp1JiEjPSQhMVsqZipwbDQkSCYhIz0kITEnUnIjRyIpM1BbISM8JCExdlJqLipvUWgnISM8JCExOm9wMCtQQGEhIzwkITFiOFdFZScqMzYhIzwkIjFWTD1cNlIiNCchIzwkIjFfZixOKj4pZjohIzskIjEnPi44UzNAbSMhIzskIjI7Oz0jekV4S1EhIzwkIjE+enkqUW9sKlwhIzskIi04WCc9PDQnISM3JCIxd1lnTEJAcXEhIzskIjE8UFphVVEmKnkhIzskIjEsVDombzAnUSYpISM7JCIxPGtnJjQvZygqKSEjOyQiMTAnPUszIlsmPSohIzskIjE9a2ZSaCRSOSohIzskIjFWX2lETVNDKSkhIzskIjFaRHZqbGojPikhIzskIjFOTiJRJVJTLXMhIzskIjEpcCRHKHknPil5JiEjOyQiMjJkTjZaLEcmUSEjPCQiMnVwcVdiK1VDIiEjPCQhMicpUV10W3M5SCMhIzwkITFYRFU3bSNlQCghIzskITI6X3kkUiozX1ciISM7JCEyPCxpXFNweWIjISM7JCEyJXpyaXE2LSUzJCEjOyQhMk5hbiZvQVBSPCEjOyQhMU0/cUdobSUqbyEjOyQiLzhLSWtOa2MhIzokIjFodmJ0YDgoSCchIzskIjIkXG9geWZcJTQiISM7JCIyPCJRXylHT15bIiEjOyQiMidwK3A9KSlSQD0hIzskIjJsKClRIVxgYjpAISM7JCIxKkc0J1tnZ3ZCISM6JCIyMSNcIUhnV3BnIyEjOyQiMnQpeSQqWzdKOEchIzskIjEtU2ZRNVQoKkghIzokIjJ2M24qW0RSaEohIzskIjJjNWxKLTh0SSQhIzskIjIxJnBXRCMpcFBNISM7JCIydDtcdDM1amIkISM7JCIyOF1qIVJtQXBPISM7JCIyJyllbCRvMEIneSQhIzskIjJEczBHYTtAI1IhIzskIjFaYndHIjNuNCUhIzokIjFhQE5vZWxKViEjOiQiMVJfVUZyW1ZZISM6JCIxIypIekwoeW8uJiEjOiQiMUZ1YF0uOi9iISM6JCIxbzRCdWIxSmchIzokIjFII0ghKWZlSWcnISM6JCIxVTZWJz48ITNzISM6JCIxTTddMVpJT3khIzokIjAqKSkqXDouK1spISM5JCIxRi5nTSg9QzgqISM6JCIxJz5FMGNbenkqISM6JCIyV1IoM2cnM1UvIiEjOiQiMlt1QUt3UiI0NiEjOiQiMlpuek4+VEw8IiEjOiQiMShSLkZeWW1CIiEjOSQiMk53KEcpR18qKUgiISM6JCIydkFlRyQ+P2c4ISM6JCIyJiopZU9oQVA/OSEjOjdhcSQiMl96NGI5UyRlNyEjOiQiMWJLbWUvIXo9IiEjOSQiMikqSCg+PU8nWzYiISM6JCIyQj89MnVJKVE1ISM6JCIvdiMpcDx5I2YqISM4JCIxIjNnRClSKFx2KSEjOiQiMHpVQ1pCXCd5ISM5JCIxZVxnKysieiFwISM6JCIxXzxEYGRsZ2UhIzokIjFeMTgkcGhFbyUhIzokIjItSzEqKT0/R0gkISM7JCIyelMzJyl5NzpcIiEjOyQhMTRIVUNwY1w1ISM6JCExRWY5Oy1OI0gmISM7JCIydEpBJj1GM0E5ISM8JCIxVmNIJnAnM1tKISM7JCIxJD02NCRHVEdMISM7JCIya1Y0PypwSi9OISM8JCIyO0BTKVwhb008JSEjPCQiMTdhI1xzZm86JiEjOyQiMSZcWyYpUnQnNGghIzskIjE3S0o7Iio+NG8hIzskIjFyPW1NJm9ZPCghIzskIjFNKTMjeTBKNHMhIzskIjEjcFxaJXkwYnAhIzskIjEsTTBvJEgpb2shIzskIjEobzpgQ3E6ImUhIzskIjFSMV07OStWXSEjOyQiMjwhM3Nvclo9VSEjPCQiMTNjWz0lPm1RJCEjOyQiMUFrKzUwcihlIyEjOyQiMFckPmhkVWA9ISM6JCIyQiIpKls0K1QzNyEjPCQiMUMvJSo0dGBObiEjPCQiMT1nLCVcPCQqcCMhIzwkIjIpSGIqR1NncDsjISM+JCExRkw9JSlSPzdXISM9JCIxeDp5R006YSkqISM9JCIxXCR5V2Y0KnBZISM8JCIyZUFPTGYhemg1ISM8JCIyJSlIO0F6PD8nPSEjPCQiMFY0NyVbYUVHISM6JCIyLkUyaDRsMSFSISM8JCIxYzhZbjchWy0mISM7JCIxdUoiKlEmKio9OSchIzskIjEmeU8uay09PyghIzskIjFFJVxcamdFOykhIzskIjBfOlZqMC4qKikhIzokIjFUYTd0cGNjJyohIzskIjFSJip5eCI+UCwiISM6JCIyJlFdbFojcDQvIiEjOyQiMik+d3Ujej1eLyIhIzskIjE3NSxxT2hCNSEjOiQiMUMmXGJxUFB0KiEjOyQiMER3XDZfWSEqKSEjOiQiMWpkISlIImZscCghIzskIjEuNlg4KGV6LichIzskIjJMSksreVMrJFEhIzwkIjFOKXltcl0jKVIqISM8JCExPVBsST0hSHkjISM7JCExUUZTaVd4UnQhIzskITJhQC8sZF1GPCIhIzskITIvdD5HRGRDQiIhIzskITFodmkvY1hWdSEjOyQhMSJIUXViZSxMKiEjPCQiMDhEYTsycCwmISM6JCIyQ1QkcFRwVzY1ISM7JCIyJHolZiNlWmlbOSEjOyQiMSIqKnAlby5gRz0hIzokIjEiKTQpKSpRXUo7IyEjOiQiMig9SCs/L0JoQyEjOyQiMSZbUHIsPiJIRiEjOiQiMVdUXnI8XXJIISM6JCIxZmVtKEdjPj4kISM6JCIxaVA2PSkpUSRSJCEjOiQiMiQqeS84TkAleU4hIzskIjEjKjRsQSx6XFAhIzokIjFcIXpGKCozMyJSISM6JCIxKFErdFtPZjElISM6JCIyRHlAIXA4V0BVISM7JCIxVVclPU5YZ1ElISM6JCIxdHZKQjc/clghIzokIjFIYCVcLDEveiUhIzokIjFNZFliZCtkXSEjOiQiMVgnW0ZrQDNRJiEjOiQiMWZwQ2lOS2xkISM6JCIxQ0FwKCl6RzJpISM6JCIxb1QjSE8jKiopcCchIzokIjF6RzN2QTVKcyEjOiQiMTAlM09PMVl6KCEjOiQiMVYsS21JYCJRKSEjOiQiMShROFpPJypcKSopISM6JCIxZS8tPFIzKmYqISM6JCIycjNURSQqeT0tIiEjOiQiMnJAR0dsKSpSMyIhIzokIjIuJ1wsRiZSZjkiISM6JCIxWktmcTVYMjchIzkkIjJCPl1QL10kbzchIzokIjIsUF5PaDMmRzghIzokIjJkJypbLW5VeVEiISM6JCIycD9fZlIsalciISM6N2FxJCIyQykpW21DJSozRCIhIzokIjJjYGY1eidmIT0iISM6JCIyXChwNFVJJHk1IiEjOiQiMk4lekFzZkRLNSEjOiQiMXljJCpSbD9NJiohIzokIjBBUV5pVHVxKSEjOSQiMTInXEAlM1dNeSEjOiQiMUxNdilvTVchcCEjOiQiMUNkaUMqM0IhZiEjOiQiMXNGRlgnXHIhWyEjOiQiMWo4SlheQiZmJCEjOiQiMidSIypmJkdTMEcjISM7JCIyLzslPXNwbFE2ISM7JCIxcF5OTyxhQ3QhIzskIjEqW1N0IW8sJ1soISM7JCIxJj5BQF5SZmgoISM7JCIxRUcoXCg+WD90ISM7JCIwJlE7ZkcibypwISM6JCIxI1FST0kiPXZvISM7JCIxZitcQ102SXAhIzskIjFrMyZ5UjBoLCghIzskIjFNaFshSCJ6KCpwISM7JCIxb0RiM0trKXonISM7JCIxTVomUkg8cVInISM7JCIxLmM8ciEpZTNlISM7JCIxTFZNR2Rgcl0hIzskIjIkKjRkbEpQbkIlISM8JCIxIlt1RklHNU8kISM7JCIyWm82MjtLOl0jISM8JCIxQHY3NnU8NTwhIzskIjI2O3lOXk0pRzUhIzwkIjEpZTBAKnolUSdbISM8JCIxMFAmSG4pbyEqKSohIz0kITFqQDVaXjtxNyEjPCQhMkIlKipvOCczTio9ISM9JCExKEhdQXpdIUcnKSEjPSQiMjx1JFFUJTRmJj0hIz0kIjFjJmZ2UCMpeUgnISM8JCIyIipRMFxXLGdDIiEjPCQiMjd3cDhBPmItIyEjPCQiMTMvPCIpZkZbSCEjOyQiMWlFOks8IkgpUiEjOyQiMUE4YVArcyozJiEjOyQiMTA0KlJeLl5BJyEjOyQiMSNvLzlxbWVNKCEjOyQiMUM+TmUnUkFUKSEjOyQiMTl4ZU8xTCpRKiEjOyQiMWtARFVrc0M1ISM6JCIyLl9jKyVlLyc0IiEjOyQiMkR1byhSU2tdNiEjOyQiMmphXS1XWms9IiEjOyQiMWVgTiJ6Nzk/IiEjOiQiMVZLIkdrI1EkPiIhIzokIjJCWEInMzYlKmY2ISM7JCIyIm9iJSlSdUYpNCIhIzskIjJbWz5fJSoqMzA1ISM7JCIxcG0wSycqUW0oKSEjOyQiMTw6aXFjeiM0KCEjOyQiMVhqKzI5VTldISM7JCIxPipSYidbRihmIyEjOyQiMkhyRXc2WDNcIiEjPSQhMjQwSFtXM29dIiEjPCQhMkMjR0YkKnA6TjYhIzwkIjJYVTs9UzBlbCIhIzwkIjA8MCIzO0xgZSEjOiQiMmlubTFxd2YuIiEjOyQiMmpQXGEyM2NZIiEjOyQiMl9bcSJlX1BmPSEjOyQiMmIuQVp6aG1AIyEjOyQiMkQmPnJweS9URCEjOyQiMkZqKVJvXSNvJEchIzskIjIoKlIyOFZjejUkISM7JCIya1NeZWh3eU4kISM7JCIyTWJIcmV2JiplJCEjOyQiMEAqPiR5JHkwUSEjOSQiMUJ6Uz5yPzRTISM6JCIxQStaJW8vRz8lISM6JCIxKVJJQEM3LFIlISM6JCIxMidmUiFIZ3ZYISM6JCIxTTViJmVRXXclISM6JCIxLyl6azsmcGxcISM6JCIxZVRvc05EJz0mISM6JCIxViFRUC00aFYmISM6JCIxeC5NQSgqKlJzJiEjOiQiMXZRInB5cmkwJyEjOiQiMC1GZVtSYlYnISM5JCIxRF1SJltfLydvISM6JCIxWGYxIUgwbUsoISM6JCIxbSopcCV6VXojeSEjOiQiMVxQTj9qJnpOKSEjOiQiMEttRSlbUTUqKSEjOSQiMSI0OS4rOiZ6JSohIzokIjJiZ3cmUnktMTUhIzokIjIqKnkiPVYhR1sxIiEjOiQiMjNkYDteISlSNyIhIzokIjE6LnRxKXpKPSIhIzkkIjJMbSF6V0Y9VTchIzokIjIjKnlGckEsM0kiISM6JCIyUjw2MiZcKillOCEjOiQiMjxuMHZ5aWpUIiEjOiQiMmJcSlYpXDh0OSEjOjdhcSQiMVRbWzEsalg3ISM5JCIxJGUhKUh5WmQ8IiEjOSQiMWVbJGYjKSpmLjYhIzkkIjJ1KEcmUi08Kkc1ISM6JCIxKnlQJTQoPlBeKiEjOiQiMW0lcFZ2bmNxKSEjOiQiMWREYD83RGd5ISM6JCIxNyd5IVFMMXNwISM6JCIxY1UvW3gpZi4nISM6JCIxKm9tTFFfMjAmISM6JCIxZEhbYlZfSVMhIzokIjI5Q0ojWylSYy4kISM7JCIxJm8zOicpKls0QSEjOiQiMkVCdVs9JW8qbyIhIzskIjJiJilRXjo+KT45ISM7JCIxTVBbbC93YzchIzokIjJkNCYpKSkpPW9INiEjOyQiMk1KamUzMFItIiEjOyQiMUInKSlHUXE4USohIzskIjFLK0BISSVvbikhIzskIjE9M3JDazBRISkhIzskIjFRWjYsJypmd3QhIzskIjFtWF0neXU2aichIzskIjFzN0wwWzd2ZCEjOyQiMi9PUlM+dUYiWyEjPCQiLyo9dHZkSHgkISM5JCIwRypcUlsnR3EjISM6JCIyTCh5QTFWJz5tIiEjPCQiMUIheXNiX3I5KCEjPCQhMShHP28jM1lgeSEjPSQhMWonW3lFTztyJyEjPCQhMi5MZCxbZ3MuIiEjPCQhMWReMnQlKilHPCIhIzskITJjUDNgYk42NCIhIzwkITFqMmBpZ3dPIikhIzwkITE0ZU9xQk1ITyEjPCQiMSVSOihbbWRCQyEjPCQiMXNYI1IiW3B2KSohIzwkIjFRYExKRXNmPSEjOyQiMWNmbUIjUlMlRyEjOyQiMnZXMjcqNEFAUiEjPCQiMW5ZTTZjWW1dISM7JCIxYiRbUmExLkQnISM7JCIxJjNVPFdWMVcoISM7JCIxKTQjZl1XMjAnKSEjOyQiMXQjXCcqSD1HciohIzskIjJiViEzQSYpZXQ1ISM7JCIxaUhyMidbXDsiISM6JCIyLiMzZU1fPVY3ISM7JCIyRF9sJ3kob2pJIiEjOyQiMlZGWjxtV0ZOIiEjOyQiMjBHPi81ZjFRIiEjOyQiMiQ+Jipvd2pcKVEiISM7JCIyJUcmRyteWFlQIiEjOyQiMngkPilRd0h2TCIhIzskIjIkPjIiZU9xZEYiISM7JCIyQSl5NnkpUicpPSIhIzskIjJDKFIvdFo4eDUhIzskIjFzVidvRGlJWSohIzskIjFXIUcjW1wieTQpISM7JCIxdk4mZmBtWSdwISM7JCIxVkdAaSMpcE5sISM7JCIxWD8penApKSoqSCghIzskIjF2a0xGO3ApUSohIzskIjJZazAxOVlcQyIhIzskIjJEUypcX3ouKGYiISM7JCIxTjxdUCU9dyY+ISM6JCIxRWBvIUhZckkjISM6JCIxKm9rTjBjeGojISM6JCIwKCpvXVohW1pIISM5JCIxJFJeVjdycEIkISM6JCIyTj1OcGhHel0kISM7JCIyWiJHdDsjR0N3JCEjOyQiMTY/W0ovby1TISM6JCIxQ1NieVcrSlUhIzokIjFhRGNoTiIqXFchIzokIjJEbXonemBFaVkhIzskIjFEXC0yLVhyWyEjOiQiMUhaaGdiZSIzJiEjOiQiMU1uU1NlbShIJiEjOiQiMV9rP3RMZURiISM6JCIxWDsmKT1CIj54JiEjOiQiMV9TMGdyT1ZnISM6JCIxcHkvV2EmZk0nISM6JCIxIjNyIz4nSFNvJyEjOiQiMSVcUTw2KGVmcSEjOiQiMUpUVjAzNnN1ISM6JCIxUW4tUFAoKj16ISM6JCIwKkdNKTNnaFIpISM5JCIxLlVWNXcpKikqKSkhIzokIjFONiQqPlRrQSUqISM6JCIxTlQsIzM4RCcqKiEjOiQiMUpsKyR6TTkwIiEjOSQiMjJFJT0uZ1YyNiEjOiQiMlkxci0pZSNSOyIhIzokIjJgb1ZOKWZpPzchIzokIjJCISlvSHUxdEYiISM6JCIxbHc/JnAkeUw4ISM5JCIyJFwwd3dCIioqUSIhIzokIjJSMVVVZSNlWDkhIzokIjJuTVBfZzcyXSIhIzo3YXEkIjIjenJdU0hTVTchIzokIjJCJUhHJ29jSjwiISM6JCIybysleiN6Iio9NSIhIzokIjEkUTNwXUclRzUhIzkkIjFhLC1BISpwRCYqISM6JCIwKHl2YFM4VCgpISM5JCIxMlAxY1EjKUd6ISM6JCIwdj0iUmcuKTMoISM5JCIxUG9OIXpwM0EnISM6JCIyOjImb2FYPU9gISM7JCIxLmMkUiNbNGRXISM6JCIyW1A6ZlZhL2okISM7JCIyJyp6JCpRSmFOI0ghIzskIjFMVlc9STcmUSMhIzokIjJrW1Q0RUJHKyMhIzskIjItaUZeIlEpW3MiISM7JCIyYjQjcE52UDI6ISM7JCIyZnc3WUlDcksiISM7JCIyKVFybjY1bnM2ISM7JCIyQWN3NTtDZS4iISM7JCIxWHk0TkgleTMqISM7JCIxJmYlSGokUWEleSEjOyQiMXkiKnosSmF6bCEjOyQiMV5lbFdJZmpfISM7JCIxYlxWNCR5dSpRISM7JCIxMzE7VC51MUQhIzskIjI+MCJ5cERwUzYhIzwkITJ5SCoqcFUzVEoiISM9JCEyKW9nWVczWUc3ISM8JCExa3BWJTMkXHI/ISM7JCEyJlJ1ejwnWzpnIyEjPCQhMWU7Oid6OFZ6IyEjOyQhMUInZUUpb1pqRSEjOyQhMlVUMC8hZig0RCMhIzwkITJCOVg8a10waCIhIzwkITFXW3Qlby5QJHohIzwkIjJzeShbJFJqXWYiISM9JCIyVCVcJmZNJjM9NyEjPCQiMkFeK3dydC9PIyEjPCQiMiQpKipvcT9BKG9OISM8JCIxaSdIMFwiSERbISM7JCIxeU8zc3AoNDYnISM7JCIxTUopXEpnVlMoISM7JCIxKFJMSyY+USNvKSEjOyQiMV4mPUZsYzkjKiohIzskIjI9ZGhXUWkpNDYhIzskIjJDSS5eJD5DPjchIzskIjI4XEdUKmVMPTghIzskIjJHPGBDJHBTMDkhIzskIjEjZXNZbjwqeTkhIzokIjFtVzZCKjN2YCIhIzokIjEjcGBSeSIpKno6ISM6JCIyRSdcZzMxSTA7ISM7JCIyR0NBMWFTRWgiISM7JCIyV2pCJVwnPTpnIiEjOyQiMk09KSozVnc/ZCIhIzskIjIxR3BEP0hjXyIhIzskIjInZkRzbSllY1kiISM7JCIyXjI5c1dTJSpSIiEjOyQiMiVRJ1wnKSoqSC1NIiEjOyQiMiU0Pm9lSSkpMzghIzskIjJ3dyhHMlxySjghIzskIjI8JSoqZVxGN0o5ISM7JCIyXz9zVyIpR0ZoIiEjOyQiMmE4NVJbRDwnPSEjOyQiMDIoSDElR0c6IyEjOSQiMVk0cTZhY2lDISM6JCIxTzs8ZTR1dUYhIzokIjJhZ2dUQ0UsMyQhIzskIjIyP14hKXopSHVMISM7JCIyVmgiSEU9cWJPISM7JCIxWylwMyhlUENSISM6JCIxKTMlKnpYVTc9JSEjOiQiMUwsZ1hTdUZXISM6JCIyYiVvIzNcJ3BsWSEjOyQiMWE4R1VkRSgqWyEjOiQiMHlpLE46XTcmISM5JCIxbGhiLnMpPk4mISM6JCIxaEomPWV6PGUmISM6JCIxJVshW1wheiY9ZSEjOiQiMWtaVSYzJDRuZyEjOiQiMSd5S1gxSkJMJyEjOiQiMDZcJGYpMyM+bSEjOSQiMSVbMW48Oz8kcCEjOiQiMXMuRHJ4J1FGKCEjOiQiMXcwQjZ5SVl3ISM6JCIxOCsjUT8qPlwhKSEjOiQiMSVcSG94ODRbKSEjOiQiMWE2aDwzc1EqKSEjOiQiMXl2dSJwRSM+JSohIzokIjFCRVIqemEoPSoqISM6JCIyXzFsNkdpTC8iISM6JCIyJkdCbjFDLic0IiEjOiQiMllta1EhUWNcNiEjOiQiMiV6SXhDI3BPPyIhIzokIjJWJmVaJioqKTRlNyEjOiQiMjlaVD5CVEVKIiEjOiQiMjE5TVE5P3JPIiEjOiQiMU44YDhJUkA5ISM5JCIwaSNlLGtNdjkhIzgkIjJIaUU7MCMqKUc6ISM6N2FxJCIyUF1WY1pKNUMiISM6JCIyTnchZiV6IWVzNiEjOiQiMGEsJ3khekI1IiEjOCQiMmMhKnpOKFFMSTUhIzokIjAjKVFoOipvaiYqISM5JCIxI1IpKmZGI1wvKSkhIzokIjFsK2BgL0hFISkhIzokIjJOZ05TXTM5QighIzskIjE5JnlBTEhiVSchIzokIjEkPiZReTo/P2MhIzokIjFDNWEqZSgqZSRbISM6JCIxXCQqWyxRNi5UISM6JCIwOWQzViI0Y00hIzkkIjJsIWZgQlQ8PEghIzskIjEqXEpJejdWWyMhIzokIjE5OyMpZi5kT0AhIzokIjJFRUw4UV8nXD0hIzskIjIpXEBUJypRIVxnIiEjOyQiMkBELHoocGQqUSIhIzskIjJFZ1YpXCd6VT4iISM7JCIybTlBZ3chSDY1ISM7JCIxI3BdMz1rP00pISM7JCIxQmQiKkg3ViNlJyEjOyQiMHNOPUs+bCFbISM6JCIyO3dtV2M4MywkISM8JCIyKiopNCQqW2dGPjchIzwkITJFIj06VldrS14hIz0kITJtZjBjTGUrNSMhIzwkITJFUjt2Ym8hSE0hIzwkITJZKTMieT9gTlElISM8JCEyJVsjeig+SChmKFshIzwkITFaI1twKFsoKXpbISM7JCEyOnNLdWc1d1YlISM8JCExLjRRTVM0UU8hIzskITIwcWd2YCtCZSMhIzwkITJYL2lqVF52TiIhIzwkITJ3LDIoUmoicHcjISM+JCIyUXBsSHRFYU8iISM8JCIyamU3bmopUSZ6IyEjPCQiMihbSiJbMmlaQyUhIzwkIjAnXGUrXCUpKnAmISM6JCIxXkkpb0otdjkoISM7JCIxKEhcJSpIKW90JikhIzskIjBReCJHLj1qKiohIzokIjIvIlElcHMrKzgiISM7JCIyQUQ7Lzc5b0QiISM7JCIyPEs3XSFvQHY4ISM7JCIxVUYxQyh6UFsiISM6JCIxSkhUQiY9N2UiISM6JCIyKFErSE1BVG07ISM7JCIxJHk+NGg8JVE8ISM6JCIyKDReTl05XCd6IiEjOyQiMnJSOEF2TywlPSEjOyQiMlhrKzBSJT5wPSEjOyQiMl80Kj5HOSwlKT0hIzskIjJXTDgmNC10Jik9ISM7JCIybiMpUlBuYG4oPSEjOyQiMnc7eTx5SjknPSEjOyQiMkZKIylveEZwJT0hIzskIjIjZSIqZXFDJ1IlPSEjOyQiMmlTcCc+O2ttPSEjOyQiMXZCUipvIT1JPiEjOiQiMnZDXkVjVWgvIyEjOyQiMjooKVJ3XEF1QCMhIzskIjJQNzwoPillcFYjISM7JCIyRD9NI3BQTyJwIyEjOyQiMVJqOzNCRm1IISM6JCIxY0YjMyNIIipcSyEjOiQiMnkoUi1rZjtNTiEjOyQiMlZKJFt4dTg5USEjOyQiMSQ0bCIpeSlIKDMlISM6JCIxOTdJKHk2Rk4lISM6JCIxOGcpKlwxWzVZISM6JCIwcyYzZEtUaFshIzkkIjExNjVYcSRvNSYhIzokIjF0TiczSzwmW2AhIzokIjJsKXBmSHFqKWUmISM7JCIxWkY3bVchKUhlISM6JCIxOkVDcHcwdmchIzokIjFlJFxqQkx5SychIzokIjFsPS1Zdic9ZichIzokIjImeXBBJFExNShvISM7JCIxalYienc/Km9yISM6JCIxaCdbIipHaSgpWyghIzokIjEmZjhcQkdHJHkhIzokIjFXL3Q0SEstIykhIzokIjElKlJAKlt6c2YpISM6JCIxWmdAMkhsOyEqISM6JCIxX0NbaidRJmUlKiEjOiQiMW9zJTNLWC8jKiohIzokIjImSGBPemMmKlI1ISM6JCIyOSYzKipHW0gqMyIhIzokIjEzJmU7a3UoUjYhIzkkIjItKikpPThSNyI+IiEjOiQiMillRHpxWDRWNyEjOiQiMEZJUmZsYUgiISM4JCIycHQhcHlYL1s4ISM6JCIyNHQsQF9uMVMiISM6JCIyKUhVKW9LKD5gOSEjOiQiMiNbKXBEWkBiXSIhIzokIjI6SHJZQlx2YiIhIzo3YXEkIjJcdENcajk4QyIhIzokIjIsLzxMTGNQPCIhIzokIjJPKm8hSEI3WjUiISM6JCIyVkQ5KHlfO001ISM6JCIwRUNkUms4aSohIzkkIjE+OkVEUDgoKSkpISM6JCIxeHZiJikpbzQ5KSEjOiQiMGJJRWxJblEoISM5JCIxZD0hZjxlNmonISM6JCIxeCJbTVN0XSllISM6JCIxJVwoUU9NO2teISM6JCIxMVMjKSlSIip6WyUhIzokIjF0V2Y0JXBkKFEhIzokIjFCeFtJb3BSTCEjOiQiMUNaMC1gVSEpRyEjOiQiMkYyLHJrWycpWyMhIzskIjFzJWZTeCh6XUAhIzokIjJXP1k/KSl6UCY9ISM7JCIyI0dxJnBfIXAnZSIhIzskIjJkJT5RVydIMU0iISM7JCIycyFcVFg+OzM2ISM7JCIxVGFCQlcqMyQpKSEjOyQiMSNvdGA8JmYwbSEjOyQiMTIreHMvIlFQJSEjOyQiMm9IYUkhPjxEQCEjPCQhMlppPjovRm1AIiEjPSQhMjg4IVswYkwzQiEjPCQhMkR5ai0kW0NEViEjPCQhMS9qIylmbDE0ZyEjOyQhMSgpZiVHJT5qb3IhIzskITF3dVAnPnE4bCghIzskITFENldxMnI+dSEjOyQhMVxgPnlybXFsISM7JCExW18kM1A2KHlfISM7JCEwLHUlW3d3PVAhIzokITJCPiJwMSQqNEI/ISM8JCEycz5HNi1rWXYjISM9JCIyOUl1a3ZNdFoiISM8JCIxLWpqWixZNkshIzskIjJ3X0dqblFeIlwhIzwkIjF5NToqM1E7ZSchIzskIjFzbFtvVUcwIykhIzskIjBNOUMhKnkmeigqISM6JCIyWFV5bmNqJ0g2ISM7JCIyWlBZVyNldHU3ISM7JCIxaip5TyVlPjc5ISM6JCIyNDVyciZmMFQ6ISM7JCIyX3AhUVFdUGc7ISM7JCIyTykqZnVoLyRwPCEjOyQiMSQ9UlEkeTduPSEjOiQiMkJqOz5sKEhgPiEjOyQiMlkhNGQwUltGPyEjOyQiMllSYDFrVCcqMyMhIzskIjJLYjJoWzssOSMhIzskIjIwaVtGNDEpekAhIzskIjE9TjlQd1I1QSEjOiQiMjIkcHBUSnBNQSEjOyQiMTtIUUZAK2RBISM6JCIyOV13KSpbLE5HIyEjOyQiMmwzQlg2P0JLIyEjOyQiMncheTRvSyZIUSMhIzskIjEqUj4rNmVZWiMhIzokIjFlVkU3dywvRSEjOiQiMik9ZzQwImZGeCMhIzskIjIvMzk9OEhzKEghIzskIjJrZXpWPjEqNEshIzskIjJBJCllal8mKj1ZJCEjOyQiMj0jZiU9Iyo9XXMkISM7JCIyTXMpSDFzKEcqUiEjOyQiMXZTKzBYL2hVISM6JCIxaWZmSD0ib18lISM6JCIxRSV6J3lbISkpeSUhIzokIjEoKSo0aSEqUW0vJiEjOiQiMSdmbXFmaTFJJiEjOiQiMSkqKioqNCYqKnleYiEjOiQiMUovLVQvUyxlISM6JCIxQHNMKWUkR15nISM6JCIxdjsrKkgvT0knISM6JCIxMFtNMmcnM2MnISM6JCIxZjUwMyhcZSNvISM6JCIxQ2poUi1eLHIhIzokIjElZSM0NiU+M1IoISM6JCIwPXEncC5jJ3AoISM5JCIxN2UjSDAoNEAhKSEjOiQiMWR0dD8oZmhPKSEjOiQiME0/I2VGcEsoKSEjOSQiMUsrZm0jKXo/IiohIzokIjAqPjg/QnlIJiohIzkkIjB4TiNISEdlKiohIzkkIjJoT3RTRVcvLyIhIzokIjJSQkZTKCkzbTMiISM6JCIyJnBGOzgmKjNNNiEjOiQiMVIiKUdkOGwjPSIhIzkkIjJDJCo+KjRzMUs3ISM6JCIyJypIUilwVjcjRyIhIzokIjFtUmIqKipHRUwiISM5JCIxbDsiUlozTVEiISM5JCIyaVkkR1pASk05ISM6JCIxPFdyTjRAJlsiISM5JCIyeGxRInBnKmZgIiEjOiQiMkg7ZDdLeGxlIiEjOjdhcSQiMigpUk5lVVpJQyIhIzokIjJ1Km90VDRVdzYhIzokIjJ4KFx4c1ViMzYhIzokIjJeM2YhKj4qW1I1ISM6JCIxSCgpKWVKakpwKiEjOiQiMSdvKSpHKCozPykqKSEjOiQiMXBEKipSSz5rIykhIzokIjF5QixYWzJXdiEjOiQiMUJ0XylbYyJHbyEjOiQiMWwqNF42PGI3JyEjOiQiMk5BPCJlcXNaYSEjOyQiMiZ5OV9jP3AyWyEjOyQiMWRpZi4qZnJAJSEjOiQiMmwteSJ5amkkbyQhIzskIjJ0JT5OK0xRM0shIzskIjJFT0dhJEcpcHkjISM7JCIxcic+OClwXzZDISM6JCIxI2U5PFxsSTIjISM6JCIybSZwLEV5K2o8ISM7JCIyOFxcViNIZXQ5ISM7JCIyJ1FNNXdxJnk+IiEjOyQiMUxAXWxhLShIKiEjOyQiMS87N2FYd1FtISM7JCIyWlwqcFRCcGlSISM8JCIyQSpHYXM1R1c3ISM8JCExaUgkNHBMU14iISM7JCEyRSMzInBoR01FJSEjPCQhMXgoW3hUMXYobyEjOyQhMWIlb0svbSI+IiohIzskITJpKVxkPiNlXjEiISM7JCEyXihmVV8mR202IiEjOyQhMkdPKjRiJ0ghZjUhIzskITEjM3ZoKVxVWCIqISM7JCExJGY7JilcdyF6ciEjOyQhMU4iKUgjb1hDKVwhIzskITEoPUNrbkxXdCMhIzskITJrVCtuTV9yQyYhIz0kIjJRQiwpeiU9KTQ7ISM8JCIyaz0ua15MKGVPISM8JCIxJnpJJlFOIkdpJiEjOyQiMC1aKVw6NjF2ISM6JCIxZU5uJW9tQEoqISM7JCIxX0MmKSlwXFU1IiEjOiQiMSlRLzgiM2pwNyEjOiQiMk4rWCdvPTNGOSEjOyQiMjgnXEs9Yj13OiEjOyQiMnYpSCZRIT1YOzwhIzskIjIpUnUhWyM9UVo9ISM7JCIyMUojKW85RCZvPiEjOyQiMicqW3A3U0smej8hIzskIjFBcksjeTItPSMhIzokIjJqXGEmSCVvMEYjISM7JCIxN2R6Ikc+NE4jISM6JCIxPCM0RiRHJj5VIyEjOiQiMSRSTmxRIylbWyMhIzokIjIoUScqb0pEaFREISM7JCIxPG0iZTBQXGYjISM6JCIyLjtvNyFmc1tFISM7JCIxMERaIWY5ITNGISM6JCIyOVFLJSk9Xyl5RiEjOyQiMjghXCcpPkt1bkchIzskIjJqMzdKUj4xKUghIzskIjJgWEN3L1s6NyQhIzskIjIkM1BKQlFwIkgkISM7JCIyUHRbJT4rMypbJCEjOyQiMUgiPkVsKUc0UCEjOiQiMiRSbyNRRTFuJVIhIzskIjF5Pnp3MXQmPiUhIzokIjFYNHEhPW86WCUhIzokIjFZRCRcUXMwciUhIzokIjEqPkFaT2gtKFwhIzokIjF5Zig0cnciSF8hIzokIjFDLTw1KSpwJ1smISM6JCIxSCNISmklKUd1JiEjOiQiMmJmSykpW0YkKSpmISM7JCIxLms1S04yYWkhIzokIjEiNHUjKW9cOl4nISM6JCIxKVEjXD8xXnNuISM6JCIwcylbeUcpKlFxISM5JCIxL1kxTk8+OHQhIzokIjEmUmhzanR1ZighIzokIjFcITQocC44JSp5ISM6JCIxZTtTUG9IMCMpISM6JCIxVCplaC9zRmApISM6JCIveEBfdSh5KCkpISM4JCIxV2QhNDZiOEMqISM6JCIwdVQ3I2ZLQicqISM5JCIySk5gYENKQisiISM6JCIycE5QSmhKUy8iISM6JCIyWyYpUjYqR0goMyIhIzokIjIkPjgpUndYPjgiISM6JCIyT2ArcE0veTwiISM6JCIyWDU5J1xsbkM3ISM6JCIyTUwhPipSc0JGIiEjOiQiMltcMCN5LXI/OCEjOiQiMjgnKjRsREAmcDghIzokIjI9UV1seV4nPTkhIzokIjImb1BHZF0nelkiISM6JCIyZS4lUShIVHReIiEjOiQiMmw6XCUqSHhtYyIhIzokIjFpXHYyYSllaCIhIzk3YXEkIjJaJzNQNVMuWTchIzokIjI3IipmNCEzTCE9IiEjOiQiMk5cKEdFRWc4NiEjOiQiMHZgTC9MZi8iISM4JCIxXCRIL3ZwWHgqISM6JCIxKHklZlgpM1EzKiEjOiQiMW9eW3UneitSKSEjOiQiMSdSJj14Om0ocCghIzokIjEwLDZXPEs3cSEjOiQiMUwuOSd5dzhNJyEjOiQiMSkpNE1bak8kcCYhIzokIjFuaD1udDl4XSEjOiQiMCRcPiZRUS9dJSEjOSQiMnNBOTRRXiNvUiEjOyQiMig9Jj1KbUQ+WyQhIzskIjEtaD8jR0ojUkkhIzokIjIoUUc6bS1OTkUhIzskIjJuJXk1JClcNGtBISM7JCIyUHEqPkI+JCk9PiEjOyQiMjMqNEVaeidIZiIhIzskIjIub0RjJVI3IUciISM7JCIxdnUiKil5InBUKCohIzskIjFRcHEoNHNCcCchIzskIjIobzwjUSd6OilmJCEjPCQiMVoqUjUlKlFsNSUhIzwkITEiKnoqRyVRai1IISM7JCEwIj40RWVYTWohIzokITFVMiYpWyRvPXkqISM7JCEybiFSYUtsJFJIIiEjOyQhMiZmNDtvKFwnPjohIzskITItTk8kR3MpSGUiISM7JCEyJ1xnIVtbJipcWSIhIzskITJlK2MmM053QTchIzskITFIR0xCbiQqKUcqISM7JCExJkd0JHkhSERHJyEjOyQhMVBWUDFEMCpSJCEjOyQhMS9tVSN5IypvJXAhIzwkIjJib2VWcCVmSD0hIzwkIjFKZkchb3g3PiUhIzskIjFDcHkvYjc2ayEjOyQiMSVbIipSUWZ1XSkhIzskIjJNLCl6YnNWXDUhIzskIjJlUmcjSCdmIlE3ISM7JCIySyoqSHJ2L3ZUIiEjOyQiMk1CQlpManhlIiEjOyQiMjNpIjNqNyxcPCEjOyQiMml3ekA5Iz4sPiEjOyQiMihIOzlvQD5XPyEjOyQiMVxWZGFyIXo8IyEjOiQiMUhtKzNSSS1CISM6JCIydXV4JD4qenVUIyEjOyQiMj15SC9SRVBfIyEjOyQiMSc+NT4kKipmQEUhIzokIjEmSCRcI1wyP3IjISM6JCIxIlJQI1xqSSd6IyEjOiQiMmsyKUgiejlrKEchIzskIjFiY0VFdSJcJkghIzokIjEpPXArWEleLiQhIzokIjIwRSVwLyNwNTckISM7JCIxSk43J2VXc0AkISM6JCIxJkdhQm1JI0dMISM6JCIxLW9CLik+IWVNISM6JCIyRT5tQl0zJDRPISM7JCIyKT5VaiM0bEh5JCEjOyQiMkRFOmB3NnooUiEjOyQiMSI0XCtDeDk+JSEjOiQiMWtgUnkmZStVJSEjOiQiMVYpUiFIJkgpZlkhIzokIjEuYVw+MUgyXCEjOiQiMTA+cG1wZWZeISM6JCIxX014XlFpOWEhIzokIjF3RSkzd141biYhIzokIjEjUmZ5TCk9R2YhIzokIjFaLyopUUUjZj0nISM6JCIxTkE4QV5pV2shIzokIjEoPjdbPXJdcSchIzokIjEjUVcveHckb3AhIzokIjImSFgpNCEpUmZCKCEjOyQiMSpSVyIqUXokNHYhIzokIjEkKjRMdF5ZIXooISM6JCIwTV4wXUo1MykhIzkkIjEwYWgjXHZHUSkhIzokIjEoUSZldlBrKHApISM6JCIxPVJ4SSY9bi0qISM6JCIwZGs8YDw2UCohIzkkIjFCPU1JSVVKKCohIzokIjJAJjMrLl14NTUhIzokIjImW08mcG92Klw1ISM6JCIyMVYlcClHcDE0IiEjOiQiMkNMTykzc3VLNiEjOiQiMkE4YyRvZjJ3NiEjOiQiMiQpZnFFKGZdPzchIzokIjJXUDM1YXplRSIhIzokIjFqYzY+eC43OCEjOSQiMkAweCMpb0QpZTghIzokIjJaJ3lCIXknNDE5ISM6JCIyTDtUKj5fcmA5ISM6JCIyaSpvR3R4Yiw6ISM6JCIyb2Q4ISlcOSZcOiEjOiQiMDFXZ3opWyhmIiEjOCQiMUN4aV9wUlg7ISM5N2FxJCIyYlJydy4oNF03ISM6JCIyPkwmZVM6RiY9IiEjOiQiMih6UShwITNnPjYhIzokIjJBYyYpcDkmPmA1ISM6JCIwclJhaU9AJykqISM5JCIxIltSIzNjeSk9KiEjOiQiMWBtL2B2IVxeKSEjOiQiMU1hKWYrUlcleSEjOiQiMkQkPVY4SkojPSghIzskIjE8RiopXENQTWwhIzokIjFsKUcheiVIcSFmISM6JCIxRWVkYU5pMWAhIzokIjFtQGchKipbJlFaISM6JCIxc0B3KD4kUjFVISM6JCIyZC5GR3MqUjZQISM7JCIyWnhIaG1bQ0QkISM7JCIyayo+T1FxW0VHISM7JCIyKW9qRFV4OUhDISM7JCIyKFJ3OCU0J0hiPyEjOyQiMm47IWY2WlAqcCIhIzskIjJwOl1AJVFhYjghIzskIjJYKCk0JFxtbTw1ISM7JCIxY0NLcjkmPXonISM7JCIxKEhqdCVHP0hMISM7JCEyKClwNFVTVVMiSCEjPSQhMUpXKVs2ZCRlVCEjOyQhMG0rUzB1dE4pISM6JCExPmZTenYlPUgiISM6JCEyIz00biJmZz53IiEjOyQhMncqPmc1QHBZQCEjOyQhMkMxeWI6c3JDIyEjOyQhMlwiKipIPDFFJyo+ISM7JCEyZShmbEBIYHc6ISM7JCEyNzAwKlw5RVU2ISM7JCExVFNvRDozUnUhIzskITJCalVAQUlsKFEhIzwkITExPkBYSWA/byEjPCQiMl4xOTooKSpHN0EhIzwkIjJ2ajxsIVE6bFshIzwkIjEiNHVUajFBSyghIzskIjFWJVJ1SCVbPCcqISM7JCIxTUcmKSpmaXY8IiEjOiQiMm5meUhfJ1IiUSIhIzskIjJVTXVKZUhXZCIhIzskIjI7SlEhR09WZDwhIzskIjI7Jj55P1oqMyQ+ISM7JCIyKGZNKT01Ol40IyEjOyQiMk0+Nl9WKkhdQSEjOyQiMUN3QiYzSG1SIyEjOiQiMkV2Yno+R1ZgIyEjOyQiMkQmKWU+WERQbSMhIzskIjAxek1BOmB5IyEjOSQiMU00VWs3IykqKkchIzokIjIvaixUVGsjM0khIzskIjFVSiF5d0s/NiQhIzokIjFsSlUsdSVIQCQhIzokIjFOVSpIdDNMSiQhIzokIjA6WndkKSplVCQhIzkkIjE5QENCViFSXyQhIzokIjFUamhHPnRTTyEjOiQiMUcoXFYnUnBwUCEjOiQiMXY6bFlNZzhSISM6JCIxXEopW09pVjIlISM6JCIxUWd5czpuX1UhIzokIjEjeU0hUSZvelclISM6JCIwInphKSp5aGVZISM5JCIxO3IjKlJGRyMpWyEjOiQiMSk+OERaXmo2JiEjOiQiMS56UXEhMyRlYCEjOiQiMFljIVFvKWZnJiEjOSQiMSJ5bWUpb3FkZSEjOiQiMUdFT1VKSjdoISM6JCIyd24keWEqZSJwaiEjOyQiMEF1W2dmIUdtISM5JCIxKSlIbWpkQiopbyEjOiQiMSo+VllQY0s6KCEjOiQiMXQpeSplTik0VSghIzokIjE9ejZhel4kcCghIzokIjEoeltmJzQ5c3ohIzokIjFgXlk1LkRlIykhIzokIjEjKj06ZG1HYCYpISM6JCIxaUkiUSc9bGUpKSEjOiQiMCNvKUdvQWM8KiEjOSQiMGBZeS9uX10qISM5JCIxbyY9Li1zJFspKiEjOiQiMSopPXVGI1IwLSIhIzkkIjJBLywrYVV3MCIhIzokIjJUZjJxZUBoNCIhIzokIjIsOiEpelw9ZjgiISM6JCIyLmtMTi1bcDwiISM6JCIyMUw+YmguIj43ISM6JCIxVHM2aVFFaTchIzkkIjJjJEg5XicpSDE4ISM6JCIxLSIpKT5rdTVOIiEjOSQiMnZrKmVAKWZrUiIhIzokIjI3LCJIcnFLVTkhIzokIjEiR0pWeGMmKVsiISM5JCIya0wlM2MmUV1gIiEjOiQiMWpgOCNHcztlIiEjOSQiMlhhKCo+WG8kRzshIzokIjJtZSc+RCJbXW4iISM6N2FxJCIxMSRHLEYkM2I3ISM5JCIyZlYtbGVqNT4iISM6JCIydU5JZSg+TUU2ISM6JCIyMitTI1tOL2g1ISM6JCIxYitVWjZQYCoqISM6JCIwNGR0eVhXSCohIzkkIjFkT1Z1aVxPJykhIzokIjElUSRmW0QuJCl6ISM6JCIxeiJ5Iz1MQVF0ISM6JCIxNCdHOGJsbnEnISM6JCIyOiozTChIKWYkNCchIzskIjAlPVNSdlguYiEjOSQiMW5gSnJVTFNcISM6JCIydmpXNz1scFMlISM7JCIyWGE0cS4vWCFSISM7JCIyKEg+YEsvWUtNISM7JCIxMz5OUCl6KSkpSCEjOiQiMW9XJFtKWzFkIyEjOiQiMmMkb3p1cnl0QCEjOyQiMmkkKWVhUVdPeiIhIzskIjF3IXkzMVVcVSIhIzokIjI0elwpemVtaDUhIzskIjEvMm83eHRucCEjOyQiMjInKT4hPjtoO0shIzwkITE4MEczYVp2dSEjPCQhMTpDPkxLJGYyJiEjOyQhMThzXWk8NCcpKiohIzskITE3PFlmIypwejohIzokITFFKXBYTT0jKkcjISM6JCEyJGYiRyZvIlJyMiQhIzskITJ1QyNSbDtUSEwhIzskITIkW2RJVzohZW4jISM7JCEyaV07JGVyKWYjPiEjOyQhMmh2UCVHU3E4OCEjOyQhMSoqXCY9USc0aCIpISM7JCExXHkmW0VIXSlSISM7JCExTUJcJVtORHIkISM8JCIxUTJnKlEsVSRHISM7JCIwYz52USopR3QmISM6JCIxbDpIb1FdJFIpISM7JCIyInlHZkVQTSczIiEjOyQiMikpKkctM25kPDghIzskIjJXPSEpby5uYGAiISM7JCIyJT0tPlJqTFQ8ISM7JCIyRCgpejluO20kPiEjOyQiMi9hVi0nSCtBQCEjOyQiMDlGWFhxISlIIyEjOSQiMk9fb2Rqb19ZIyEjOyQiMi9TZigpKSopKlJpIyEjOyQiMVIvImUpPW91RiEjOiQiMThwZ3BsInkiSCEjOiQiMkQ+Qnc/UFMwJCEjOyQiMk82XDN5bVQ9JCEjOyQiMid6QVYheW8jNEwhIzskIjFcd2p4UnBJTSEjOiQiMU08NytkNl1OISM6JCIyOU9uKilIVSZwTyEjOyQiMjI1Uk0kNEgieiQhIzskIjI8LVl6JlwheiJSISM7JCIxKWZDMSc+K19TISM6JCIxeWBXPVgwJz4lISM6JCIxaXJlejE4X1YhIzokIjFSQFEseWtAWCEjOiQiMU0+TyY9MV9xJSEjOiQiMTIyJj1hYUQhXCEjOiQiMSpIVyR6IipwN14hIzokIjEiPWlaVkFUTCYhIzokIjFYJDRjVlpdYyYhIzokIjFNTld5bm8uZSEjOiQiMUMiZi9sTSVbZyEjOiQiMUIudio+Kil6SCchIzokIjIwUiN6KD03OWInISM7JCIxWVp2IUdVIjNvISM6JCIxTnI9SiF6ejEoISM6JCIxXmF0JXpdNUwoISM6JCIxNmJHSFt4KGYoISM6JCIxbVVhZU0iKW95ISM6JCIxUitdT3ItWCIpISM6JCIxUTtAP09VRiUpISM6JCIxMCNHKD5ANTwoKSEjOiQiMEdoPi8jPjohKiEjOSQiMWojPltcKHlBJCohIzokIjF4JCozWzEpM2sqISM6JCIxbyIqXCN6KUhxKiohIzokIjJuJyoqZSkzbDYuIiEjOiQiMjklPjEyKkdsMSIhIzokIjJjQ3YyISpHSjUiISM6JCIyJipbUiZHXSU0OSIhIzokIjJKJWUpUWBKKno2ISM6JCIyUSgpZkpJPytBIiEjOiQiMnl2MyN5XjdoNyEjOiQiMmZbaXNwWUpJIiEjOiQiMid6OXAzbyhmTSIhIzokIjEiNCd5PUtdKlEiISM5JCIyKD1OT2ZKaEw5ISM6JCIydyFSLnFrPnk5ISM6JCIyUCUpKVt0ejlCOiEjOiQiMi5iUyl6InAkbzohIzokIjAxVz1ScFBoIiEjOCQiMWtSdSxqRWY7ISM5JCIyPW1ZcDwneS88ISM6N2FxJCIybDI/NjdtM0UiISM6JCIyaF9DJVtMYyg+IiEjOiQiMnJJL09Bbk84IiEjOiQiMlYlKWV5IikzJHA1ISM6JCIxSHRwWnFsLzUhIzkkIjEkZkJLPFcjKlIqISM6JCIxdGdpX0FyYCgpISM6JCIxdzgyUVQxOCIpISM6JCIxWm1NdHIjM1soISM6JCIwMyR6c3QkMydvISM5JCIxJG9KRG86cUQnISM6JCIxcD1BSCdmSW4mISM6JCIwQlVDWyQ0N14hIzkkIjEvKDQ3KXpNd1ghIzokIjEnPSl5ZEslcDElISM6JCIxRXQrKVw7UWUkISM6JCIxPSF5S2cjeURKISM6JCIxZGZGOi9uIXAjISM6JCIwQCV6TypmYUYjISM5JCIwbXEoeWNOdz0hIzkkIjEmKkdOYCNcKClbIiEjOiQiMmQnR0oqZklxNSIhIzskIjEjSCpwenonPUMoISM7JCIyPHRDKlJiaDVMISM8JCExYShHTFcyN10pISM8JCExMj0qNGctIUhhISM7JCEwVkklenJhdDUhIzkkITIlNEk7S1QqXHQiISM7JCEvLmVBQT5oRSEjOCQhMnZmalxxIylRSSUhIzskITFGQlI3bnlWZCEjOiQhMWsqZnAiW0ltSyEjOiQhMSxsTlAqKj49QCEjOiQhMiM0KUg2cCFwcjghIzskITEoSEQ9USopUTUpISM7JCEyUEB6Oi9oW2EkISM8JCIyOkNIRyYqW1tSJCEjPSQiMSJwT156O3d2JCEjOyQiMUFPX0R6RU5vISM7JCIxOGc+T047YCcqISM7JCIyMUtHP0NRbEEiISM7JCIyI1smKio9dz40WiIhIzskIjJFTV8kPSV5NXEiISM7JCIyJWY+XThvKCk9PiEjOyQiMVQrJzR5ZGM3IyEjOiQiMVwlSDlaNENLIyEjOiQiMSo+ZXVUKCkpNEQhIzokIjEvIXomKioqMygpbyMhIzokIjEtXHYnZkglZkchIzokIjFeMytFamdBSSEjOiQiMThPbFxLJil5SiEjOiQiMllfRCRmLyopR0whIzskIjFEUHRYISlldE0hIzokIjJCWCM+PFYrOU8hIzskIjIzdyIqM2M6OXYkISM7JCIyLVZ4bDxLdClRISM7JCIxWStvR05cQlMhIzokIjJicls9Rks9OyUhIzskIjEoeVlJcipSL1YhIzokIjFCJik+QyhbS1glISM6JCIxbTlESzJHNVkhIzokIjFYQmYkKm8yeFohIzokIjFRNGElelhaJlwhIzokIjEvNS4wUiNROSYhIzokIjBGJSk0bWJVTSYhIzkkIjFKVjM5I2ZhYiYhIzokIjEnZlx4TWdreCYhIzokIjE7RGdpODExZyEjOiQiMTN6IkdTNElDJyEjOiQiMU5Bc3V3OCdbJyEjOiQiMTNjVSVvbVd0JyEjOiQiMUJUKWVwa3MpcCEjOiQiMDFTWiVSMldzISM5JCIwNFwqKW82Wl0oISM5JCIxVHlEeFdEcHghIzokIjFuNWE8PSxRISkhIzokIjF5Q1QuSVw2JCkhIzokIjA0Tk4iKm8uZikhIzkkIjFGSVA+JUhhKCkpISM6JCIxa1w4a21gbiIqISM6JCIxJzMvKjNbZG4lKiEjOiQiMVJLaSFvKFJ3KCohIzokIjFEaiozb3glNDUhIzkkIjJCTElcS05CLyIhIzokIjIwd2UycWZpMiIhIzokIjJuKXBKZHhGNjYhIzokIjJZN2gtIVtSWjYhIzokIjI+MEgoUlZmJT0iISM6JCIybGhacEdSR0EiISM6JCIyVF00NkV1P0UiISM6JCIyY3RjZ25HQUkiISM6JCIxY1NvXC1BVjghIzkkIjJVWFl6Z2VcUSIhIzokIjJbTWAnPihbdFUiISM6JCIyNj5vaihSSHE5ISM6JCIyPDYlSDIpKXA4OiEjOiQiMllsdEV5cXViIiEjOiQiMmNIK3c/QTpnIiEjOiQiMWRSZlQ3eFg7ISM5JCIyJ3lkIyoqZlUscCIhIzokIjF6RjIuemNNPCEjOTdhcSQiMi5rYXAlZk1uNyEjOiQiMiY9VydldWhZPyIhIzokIjJjdDZsMWg5OSIhIzokIjJNK0ZmdnV5MiIhIzokIjIuL3RvKmUxOTUhIzokIjFLSmJEM0wtJiohIzokIjEzIVwjKnA+aCcpKSEjOiQiMVJQXW4oUVpCKSEjOiQiMWBRd1wwPzZ3ISM6JCIxIkdvMDswKCkqcCEjOiQiMSxQUSI0ci9TJyEjOiQiMjpndDImKT4mPmUhIzskIjFUd3dIRVdlXyEjOiQiMXRSTCwqKT0+WiEjOiQiMWNGLShHOkg/JSEjOiQiMldgO21SOio0UCEjOyQiMng5ZkgyQydSSyEjOyQiMUInM3VuazF6IyEjOiQiMlo4Pz02JiozTyMhIzskIjIlUXldLnlTWj4hIzskIjJcZihcL09XWTohIzskIjF1Ri95KnlKOiIhIzokIjFFR1Q+TEc4dyEjOyQiMURcQSgqUl5DTyEjOyQhMUIzTmk8KnBfJiEjPCQhMXkxLEE7QiQ0JiEjOyQhMmg1VzFhUnYtIiEjOyQhMkVWNHUnZmZlOyEjOyQhMm4kKVxtTS5vXCMhIzskITJgZT8xNSFvJHAkISM7JCExMzYwelcpPkMlISM6JCExJyplc1MkeUYoSCEjOiQhMlUzU1Rod14oPiEjOyQhMnMsKyxzdTNFIiEjOyQhMS9GQ1M1Wl1xISM7JCEyN3UvaXAqPWJDISM8JCIyWFJ2RFUpeS46ISM8JCIxKHBHWGt1VywmISM7JCIxR040OD08JD4pISM7JCIyYERCak8hZTY2ISM7JCIyJylvO3RyJFIkUSIhIzskIjJGZTxHKUhPUTshIzskIjJhRSRcd18xej0hIzskIjE9bHhWblAyQCEjOiQiMkN4Jj5PLHBDQiEjOyQiMmlDWFw+bj9gIyEjOyQiMiRSKSozWTJOSUYhIzskIjJgNWsibzNEP0ghIzskIjJRWzFxczhDNSQhIzskIjFhJilSeCR5dUYkISM6JCIyJj5TLiR6Q2hXJCEjOyQiMShbdmkjXDY0TyEjOiQiMTNZeD90S25QISM6JCIyQlVwQVsleUBSISM7JCIxVCwzJHlxTzIlISM6JCIxbjJMUHNMQ1UhIzokIjEjeWtFUClHdlYhIzokIjEob3FJQ1kiR1ghIzokIjFRJT1bOyllJW8lISM6JCIxXzFIeSdlaSVbISM6JCIxWjMneV5pWSwmISM6JCIxbGxmIXBfNT4mISM6JCIxO24pelJMalAmISM6JCIxem05KUcpKjRkJiEjOiQiMlhSJyl6Zz1eeCYhIzskIjElKip6JSlbJVEpKWYhIzokIi9tMjkrPjVpISM4JCIyYz5hN3lWKFJrISM7JCIxdy0pND0lPXdtISM6JCIxKG8nSDtBbz1wISM6JCIxdyZbSV9AbDsoISM6JCIwWCZwZEE6PnUhIzkkIjFjdkk1MUF3dyEjOiQiMSMqW0k0JHl2JHohIzokIjEmcDUjUnFGLiMpISM6JCIxaGhHNj9idCUpISM6JCIxakxwc3h6WygpISM6JCIxKFs7RkNRJkghKiEjOiQiMWFZNThBUjskKiEjOiQiMXBnIXBDTitoKiEjOiQiMSJbTClIIWY2IioqISM6JCIydkZVXidIL0E1ISM6JCIyMUNiTm9XUTAiISM6JCIyaVspUmUxZCczIiEjOiQiMihHRDQlKXBEPzYhIzokIjJsTW8uJlIjXDoiISM6JCIyZmttKFFaZCE+IiEjOiQiMnMxOEY8Jj5GNyEjOiQiMVFMRW5Xdms3ISM5JCIyZmlobSNvPy44ISM6JCIyWmpyO24kXFU4ISM6JCIyaDJAOkRZRFEiISM6JCIyTDE9VFMpR0I5ISM6JCIxRigqKkdFUllZIiEjOSQiMlhOKClwdjpsXSIhIzokIjIlb2JeLVskKVs6ISM6JCIyXlA7KEheXiJmIiEjOiQiMm9dLihHKHlXaiIhIzokIjB3OGQjPmx4OyEjOCQiMmJsWzc3bTRzIiEjOiQiMiYzKmZMQmVWdyIhIzo3YXEkIjJFS3BqISpbV0YiISM6JCIyeDcqPUA4Rzc3ISM6JCIyMCRvTkxma1w2ISM6JCIyLiNcNDIjcG0zIiEjOiQiMl8/XClmXF1CNSEjOiQiMTEhR2w1aExnKiEjOiQiMSZcJT4mUltQKCopISM6JCIxTWlVPk9nWyQpISM6JCIxSltaTGJgSXghIzokIjFMX1hrJHpBNyghIzokIjFkJ2YlUThkRWwhIzokIjF5UVlKdCpmJWYhIzokIjFCLHpXUCRHUSYhIzokIjEjMzNAbi4qUVshIzokIjFDVWAvI3BhSiUhIzokIjFtPkpBMDw4USEjOiQiMU5GYl10K0tMISM6JCIxL0IpKkdSTXJHISM6JCIxbTw+WiY0KkhDISM6JCIyRno9JEdWdzA/ISM7JCIyUkNJa04taWYiISM7JCIyI29PW0B4Yyg+IiEjOyQiMXA2ZCJwJ2ZcISkhIzskIjFtcFtuRil6NiUhIzskIjFHXS0mPiVwPCMqISM9JCExL0NHUXYsWlQhIzskITFwcy05aipcdikhIzskITFuTEUpelAuUiIhIzokITIxZSZRT0FnZz4hIzskITE9c2Ipb2FeWyMhIzokITIkZjEkUnNocWcjISM7JCExI1tkMXU/UjwjISM6JCExbCZRSHcpM246ISM6JCEyQiF5NT1tYCw1ISM7JCExKTRGcE10eDImISM7JCExZExFam06LXYhIzwkIjE2Y1sibyRHMEohIzskIjBkWUBRbnBmJyEjOiQiMW84a2s8RS4pKiEjOyQiMXdCUyUpXC95NyEjOiQiMjkoKSkqKnpvI3BiIiEjOyQiMWU5KXpBZio+PSEjOiQiMTQoXGA2ayRwPyEjOiQiMXYqZTdsP29JIyEjOiQiMnlpOEcuQk9gIyEjOyQiMkZ1V3d3J3pdRiEjOyQiMiRRcVR3cj1mSCEjOyQiMFV0OjBIJmZKISM5JCIxM2UrdEldX0whIzokIjFfKSlHKlwjeVFOISM6JCIyJFFbbldBMj5QISM7JCIyJ3o5OyJRVFQqUSEjOyQiMFgpPmwiXFsxJSEjOSQiMW1CSHhQO0tVISM6JCIxJXl2I3o/PChSJSEjOiQiMXNqKFImejJoWCEjOiQiMT46Q1NrPURaISM6JCIyWGwkKW9FcjMqWyEjOyQiMTZHMSIqW19mXSEjOiQiMTIkPV8lSFxLXyEjOiQiMUN6NUMpKSo0VCYhIzokIjJ2JkdsITNvZ2YmISM7JCIwRl5cKFtZKXkmISM5JCIxMmB1ZUNsKSlmISM6JCIxQk9mTGZ5Jz4nISM6JCIwbWFFNFJGVCchIzkkIjE2M1NALDtPbSEjOiQiMjAlKjRFblhsJ28hIzskIjFSeUlaM0suciEjOiQiMChITkhSImZNKCEjOSQiMSM+TFA7PVFmKCEjOiQiMWtDKkcob2pZeSEjOiQiMUZxZl06Ni8iKSEjOiQiMSZmUWtwTWhPKSEjOiQiMGRCOjJdRmopISM5JCIxbGhDLUo5LyopISM6JCIwJm89WVBpIT0qISM5JCIwIm9YMU9naSUqISM5JCIxX1g7aidvMHYqISM6JCIyMFJiIXpbXS81ISM6JCIyTXE+ZF9lWS4iISM6JCIyOHYsL3dwYjEiISM6JCIycypIRmJeRyg0IiEjOiQiMkAiKj0oeUglKUg2ISM6JCIyKVJUalgyRmo2ISM6JCIySDYxK1MkZSg+IiEjOiQiMkckcHhSQXlLNyEjOiQiMjN5bWNpYSlvNyEjOiQiMmVQQDpXdWRJIiEjOiQiMUI8VDJLXVY4ISM5JCIyL2tmKilwIio+USIhIzokIjJrTk1EIT49QDkhIzokIjJfbktiODQ1WSIhIzokIjJkJVspKnlUUyw6ISM6JCIyNF5cIypIJkhVOiEjOiQiMVAmUihwK2gkZSIhIzkkIjJzbDNyJHBGRDshIzokIjJ3TzVkXUVzbSIhIzokIjIvVlN4YCNSNDwhIzokIjInb0cqUW83PHYiISM6JCIwVCEqNCgqR1R6IiEjODdhcSQiMmZYakwvREBHIiEjOiQiMSd6N2MjR1A/NyEjOSQiMlFzJXpAbjxlNiEjOiQiMD4rSTJjYzQiISM4JCIyQk0qKnljYEguIiEjOiQiMWF5L2E6Ty0oKiEjOiQiMXJkUCZIWXAyKiEjOiQiMWkjKVEnKVFUYiUpISM6JCIxNFtESyZmKyV5ISM6JCIxWWBVNjFHTHMhIzokIjEmKlJuX2JbUG0hIzokIjFAQiJIeSgpXDAnISM6JCIwI3o3bGsqeVsmISM5JCIxLEtwS3osUVwhIzokIjFcWWclKil6blMlISM6JCIyRVNXcEwlPSYqUSEjOyQiMldXJipSLid5Lk0hIzskIjAoW2V1Vm9LSCEjOSQiMXBjY3ImNDpbIyEjOiQiMngiZjdIQlFcPyEjOyQiMlBZd043SVtqIiEjOyQiMlU0Iio+KVtsTjchIzskIjE7SVtTIylvKFspISM7JCIyOz0heUd1YitaISM8JCIxJGZ6PXQlPVMlKiEjPCQhMTtYUVBQTlBHISM7JCExXydvTGgqPiNvJyEjOyQhMlFtISlbcTZcMCIhIzskITEkeUl1V05hVCIhIzokITImZiQpeiUzPy1uIiEjOyQhMnM/RSNHO2wrPCEjOyQhMXMtQmQxVnQ5ISM6JCEyYXk4TzwoKT40IiEjOyQhMTBLPVJkIVJtJyEjOyQhMicqcEIsbEplXCMhIzwkIjInSFFxNDAqM1UiISM8JCIxL2YwVCpSYjEmISM7JCIxJ2ZpW1Y3N1kpISM7JCIyaXdILU4jKlI7IiEjOyQiMiJbP1wtJnBKWSIhIzskIjJXO0AoM1o9WTwhIzskIjJ2Sl01OyU0Oj8hIzskIjE7VDN3I1s6RiMhIzokIjFEYF53WShvXiMhIzokIjIuLitIMGJAdiMhIzskIjFvLC8uO0h5SCEjOiQiMUJNLyZRamc+JCEjOiQiMScqUj9lUzwxTSEjOiQiMkVRcyJvQ0g0TyEjOyQiMiVcJClRcXIzMVEhIzskIjFoIyopUWBicypSISM6JCIxTVI2KWVaTj0lISM6JCIxKj1cb0YleWxWISM6JCIwJ0gwI0dwW2ElISM5JCIxLk1YSUp6QFohIzokIjEuI2Z1K0d3KlshIzokIjFmYHlUPF50XSEjOiQiMVIiUlIpKj4xRCYhIzokIjEwNS5NbzdJYSEjOiQiMW5TU3lnOjhjISM6JCIxM0VCK3ZzK2UhIzokIjJsSkg1JltxJCpmISM7JCIxKFI1Kj5LdiM+JyEjOiQiMTghKUhDSUopUichIzokIjEpej1OWCZmNW0hIzokIjF3UFc6L2dIbyEjOiQiMHkjUlhSOmJxISM5JCIxW3QhPiYpZXBHKCEjOiQiMUU0Mjg0bEN2ISM6JCIxJGVFJz5MJnl3KCEjOiQiMW1JRCd5QmksKSEjOiQiMTw4VE81XHAjKSEjOiQiMVB6Ry8menVfKSEjOiQiMXgpbzxuQSx6KSEjOiQiMSM9JSo0T211MCohIzokIjFLdmxUT21IJCohIzokIjF5ITMhKilIJ3BnKiEjOiQiMUstY1k2cCopKSohIzokIjFNJkdnPkJ5LCIhIzkkIjB3NVlCK3QvIiEjOCQiMlRKIltiRVd4NSEjOiQiMiQ9JnAjKSo0SDM2ISM6JCIyajlbJClRIikpUjYhIzokIjJOISlbJVJLQ3M2ISM6JCIyeT0/S0soUjA3ISM6JCIyTFBmLEthJFI3ISM6JCIybVtbLCRSNnU3ISM6JCIyLFVaUWRrJzQ4ISM6JCIyV0x2Y20kKWZNIiEjOiQiMkxiUkpSUUlRIiEjOiQiMjQ6T0QhcHk/OSEjOiQiMmBUPTh4eiJmOSEjOiQiMWphNVY7OylcIiEjOSQiMj0uNysiSG5QOiEjOiQiMW4mcFpNXndkIiEjOSQiMiZ5WW8yTy49OyEjOiQiMngsPXJkYyhlOyEjOiQiMjdxYVRaZSgqcCIhIzokIjFbRCUzeHo0dSIhIzkkIjJWPW9nKVFPI3kiISM6JCIyRztcUG9kUSM9ISM6N2FxJCIxQixkY2dNIUgiISM5JCIyR2pYXiM9IipHNyEjOiQiMmlQdihwZi5uNiEjOiQiMi9KJkh2KUdbNSIhIzokIjJUMCsnMzZVVTUhIzokIjFNKFxseFInKnoqISM6JCIxKTMnKmZkIUh3IiohIzokIjF1Kkdud2pnYikhIzokIjFXYCcpeS4sVHohIzokIjFhW1VrQUdMdCEjOiQiMCVvM0cib110JyEjOSQiMShScWlrPyZbaCEjOiQiMXIoKVteQ292YiEjOiQiMWRlSCYpKj4lPV0hIzokIjE3XEJrSlB5VyEjOiQiMSpIR1U5RHAmUiEjOiQiMSI+VlVqIT5iTSEjOiQiMiU9ZVQxVix1SCEjOyQiMTEnKVs8WSdSXiMhIzokIjE8bilSVjBgMiMhIzokIjI8MCRbKkhLemwiISM7JCIxZEFJW3dGaDchIzokIjFKKmUyX2pBJSkpISM7JCIxTj5GVjZaXl8hIzskIjIueFskPlVcQT0hIzwkITEmel5qbChcYDkhIzskITJ1ZS4jUislPWIlISM8JCExT2NuOy0/bnQhIzskITEqKW9tZFArWCcqISM7JCEyRiY0MSlRIj4mNCIhIzskITE+aiRvUSZIJTMiISM6JCExJyk+YSpIUyVIIyohIzskITFcPXFxTyJRXCchIzskITI8WmhWOmV2OyQhIzwkIjFFeCgzci5bZCQhIzwkIjFHVSg0RjUpcFEhIzskIjBQcjJkMmRGKCEjOiQiMVUpUmg2IT5hNSEjOiQiMjRURGlBb2lPIiEjOyQiMCNcN3NdUGs7ISM5JCIyeTg8JnkvW1w+ISM7JCIybGY3OSczakFBISM7JCIyJXkpMy1aPltbIyEjOyQiMUEqKVElNFhwdCMhIzokIjI7L3ZXaDUpekghIzskIjJ4IjMqbyQpUVRAJCEjOyQiMVlETW1dZlNNISM6JCIya1xFeVU2KWZPISM7JCIxJD4ucF41QyhRISM6JCIxQCdlKDRyLXpTISM6JCIxeSg9eDdGLkclISM6JCIxJTRHSTtCcVolISM6JCIxaicpRy9lKSlwWSEjOiQiMWFKI28mKVwoZlshIzokIjF1UmhGV15aXSEjOiQiMVs0elBlOE1fISM6JCIxekUoKlxEaD9hISM6JCIwPSZlYj0nemcmISM5JCIxejg6NCEqPSh6JiEjOiQiMVV0XmwyRCopZiEjOiQiMWBrJEhtO109JyEjOiQiMTJDRVVEQiZRJyEjOiQiMSRRXiF5N1whZichIzokIjFeJSo+JT46NyFvISM6JCIxOjkmcDNgdywoISM6JCIxbjJuIVsjKilScyEjOiQiMXA5OXpfKXlZKCEjOiQiMSc9ZFYqSFsseCEjOiQiMVp4ZyRwdy8leiEjOiQiMUIhPik+b2olPSkhIzokIjFkVDIoKilbUFYpISM6JCIxTERKUENrKG8pISM6JCIwdmZWcjZpJSopISM5JCIxXil5aj1HJTQjKiEjOiQiMVpWLjFeTXglKiEjOiQiMTZWWHFfNF0oKiEjOiQiMllDUD1JKXktNSEjOiQiMiM9PyoqZXI0SjUhIzokIjIpZTM1I3BtKmY1ISM6JCIyJ3B3OyIqKUglKjMiISM6JCIyOWlpNjc/Jj42ISM6JCIyeE5VKmYhcC06IiEjOiQiMkwhKSlcMVpxIj0iISM6JCIxOlgnKXAmXFFAIiEjOSQiMiZ5WSczOT5uQyIhIzokIjFXLUdKMkshRyIhIzkkIjBtJj5RRmw5OCEjOCQiMihwdi1lVnFcOCEjOiQiMmpZVSRSZFgmUSIhIzokIjItZCEqNGB5PVUiISM6JCIwZktsdk8qZTkhIzgkIjIib1EtSXplJ1wiISM6JCIycFAiZkFWeU06ISM6JCIyVylveiNIdU1kIiEjOiQiMldxJUcvT2c3OyEjOiQiMiY+Uikqb202XzshIzokIjJ1cE4xbmQ+cCIhIzokIjImekJoUjoySzwhIzokIjExIypba1pTczwhIzkkIjE4QCR5LjFIIj0hIzkkIjI6c3lHdUVOJj0hIzo3YXEkIjJpPWdHLy4iKkgiISM6JCIyJ3lNbzZjKnlCIiEjOiQiMnhFLi0lKUhpPCIhIzokIjJPJypvYCRlPzk2ISM6JCIyJFFDLkg5JT4wIiEjOiQiMTclKVspM0ZkKikqISM6JCIxPE1qXiFRREYqISM6JCIxVj1FTnViXicpISM6JCIxLTEoZU5VWS4pISM6JCIybEk4SihSd0J1ISM7JCIxRVojW1tsNCNvISM6JCIxUS1pKlI5JEdpISM6JCIxMkt6bVYmeWsmISM6JCIxLDdEW0ljIjMmISM6JCIxJmZKemRBOGAlISM6JCIyMFNzWGEyKikqUiEjOyQiMWYjKmZcOypmWyQhIzokIjJZLE1uKnk7JSpIISM7JCIyQzJtNSIpb1xfIyEjOyQiMTItWEVgJyl6PyEjOiQiMnhGQVYrQS1tIiEjOyQiMjxnYTAhRz9uNyEjOyQiMSlIPEklKXBtLCohIzskIjEqUm81JCk9PGsmISM7JCIyZF5VR0c+SGIjISM8JCEyOnJHLTEtb00jISM9JCEyWl4kUS80Q3pFISM8JCEybCR5YlgiR3VvJSEjPCQhMVQkcGAwaVw0JyEjOyQhMSNmIz5WY0kmbychIzskITElNCkqW1phMkcnISM7JCEyOTFWVUlMcSdbISM8JCExbWUkSCkpNGppIyEjOyQiMndoRDAhKlE/aSIhIz0kIjJhU2pTLkNEQyQhIzwkIjFyb2dJL1tNayEjOyQiMSoqb0wpM0IoSCcqISM7JCIyb1Q9QyxvcEYiISM7JCIyMGYxXl1yRGUiISM7JCIyI3AjKT02K2Z5PSEjOyQiMk9AXVY/P1o7IyEjOyQiMmNBXjdnNzZXIyEjOyQiMkZxJEdQczgzRiEjOyQiMmJhOyMzQEVtSCEjOyQiMVkrI0gmUSpmQCQhIzokIjFgKEh2Yl95WCQhIzokIjFCL0ckM2xCcCQhIzokIjJFUlJtPG8rI1IhIzskIjIwXi15TTs6OSUhIzskIjFQVVI9OkhkViEjOiQiMSwoWzheNyFvWCEjOiQiMSpRa10rVlZ4JSEjOiQiMVo0a1BvKnAoXCEjOiQiMSNHWU5uUm48JiEjOiQiMTZcZFVoUXVgISM6JCIwXlswcyJ6cWIhIzkkIjFESEdAKlFvdyYhIzokIjEob0paJ3lUamYhIzokIjEqSDVnKT5TaGghIzokIjF5OGYjXD87TychIzokIjFMJil6OyskW2MnISM6JCIxVV08TSYpb3JuISM6JCIxKFxeJil6TUYpcCEjOiQiMFltazd3JCk+KCEjOSQiMSIzeFlNJykpPXUhIzokIjFreVR5VVRXdyEjOiQiMVltP0k7K3Z5ISM6JCIxJz5abCR5ZzUiKSEjOiQiMV9NYGMoUTZOKSEjOiQiMVFAIz0kZlonZikhIzokIjEjbydHdU5dWSkpISM6JCIxPlFVJT1KNjUqISM6JCIvejRgMEpnJCohIzgkIjF5NF5xbS9DJyohIzokIjFWNlhlRVMjKikqISM6JCIyanRdSiMqXGwsIiEjOiQiMihlbC1UNE5XNSEjOiQiMlpeOTQkXG1zNSEjOiQiMXknZWVlOzo1IiEjOSQiMShwZE9CSzQ4IiEjOSQiMl9VZSlmI1E0OyIhIzokIjIjKm8rNFxmOj4iISM6JCIyd2MoekZ3IkdBIiEjOiQiMiVlO1w8KUhaRCIhIzokIjJ5W1IxVzJ0RyIhIzokIjIvSS0sPWIwSyIhIzokIjFqNUM5L1phOCEjOSQiMnY8aVwmSC8qUSIhIzokIjIybWpdN2JVVSIhIzokIjJZSWhlOSMzZzkhIzokIjBGVHF5I1wnXCIhIzgkIjIoNHkpekBdTWAiISM6JCIydnYvVCpIIjRkIiEjOiQiMSVcPkM2TykzOyEjOSQiMUMwd3c/PFo7ISM5JCIyR2NqQiM+KGVvIiEjOiQiMSNwejY7JylbcyIhIzkkIjElPmA0aWxUdyIhIzkkIjJZeik9aUBtLj0hIzokIjJHVDduRUhMJT0hIzokIjJNRnIjKlxBSik9ISM6N2FxJCIyOk1CWU8vJTM4ISM6JCIxZV1AQzBNWjchIzkkIjJQNE5IIlx5Jj0iISM6JCIyTjlALkVFUTciISM6JCIyMiNmbyc0cDoxIiEjOiQiMSU9MltwVzgqKiohIzokIjF3OygqKik9Z20kKiEjOiQiMU0jRyJSWytWKCkhIzokIjBCWjUiKVxBNykhIzkkIjA9PnomKXBoXSghIzkkIjF0KXlbSDZuKm8hIzokIjF6JFxidTBmSCchIzokIjFSX09UNiVlcSYhIzokIjFLKVsnKXlPJ0deISM6JCIxSm90PyRIa2MlISM6JCIxL1lMNnRQQFMhIzokIjI6O1QtLSJwJlwkISM7JCIyMSt6dCR5byIqSCEjOyQiMTkkNCdvNyc9XiMhIzokIjJYVGdBSEsqZT8hIzskIjImSENwUlYkZWoiISM7JCIyUDVZeSZlZVg3ISM7JCIxRzMobz1LMCIqKSEjOyQiMT1UQmQyN1pkISM7JCIxN19NMyhlailIISM7JCIxd0JzPyZ6cVwnISM8JCEyKHoyO007QUk3ISM8JCExJjQvaSRSQChmIyEjOyQhMk5fIzR6LCFwTyQhIzwkITFqcVxZPSJSVyQhIzskITFiQSMqNERMbEYhIzskITJ2Wj46ajwhWzghIzwkIjEkZUdMPzMjKSpwISM8JCIxKGVeU0Q/V0AkISM7JCIxZXNlKTRsI0dnISM7JCIxUEcvdkAtLyEqISM7JCIyJGZNZWkzUS83ISM7JCIyJClcXCMqXCwlMzohIzskIjI3eSYqPnUpZjM9ISM7JCIyPXYhKTNnakY1IyEjOyQiMjhwQVBPSigqUSMhIzskIjIoZjwyMG8oKm9FISM7JCIxI2YiUT8uT1NIISM6JCIybmckcDFTKFI/JCEjOyQiMUM4OzE1MGdNISM6JCIyUVxPOSlSIiozUCEjOyQiMiQ+NC9cdSU0JlIhIzskIjExMDdCV2UnPSUhIzokIjE8JEdMUCxqVCUhIzokIjE9cXJhd2hTWSEjOiQiMVUtaGJvNGdbISM6JCIyTmRgQ0ZbYDImISM7JCIwa1pnPEZxRyYhIzkkIjFgN0dERyRlXCYhIzokIjBMbVlULkRxJiEjOSQiMSRvR3ZRMnkhZiEjOiQiMVV2eGozYDdoISM6JCIxVCRcL05odUonISM6JCIxclMjKT4lb0xfJyEjOiQiMT5qJFJnIyk0dCchIzokIjE5WS9xVSg0JXAhIzokIjEkZjhKZU1SOighIzokIjF5JnlrcWcuUCghIzokIjFDblpucWshZighIzokIjFKVmBOUTM6eSEjOiQiMTgsP1NHJ1EvKSEjOiQiMURcYiQ9ITR4IykhIzokIjFQakJ6UiFbXikhIzokIjE7LiZcOCYqcHYpISM6JCIxJXBkOCYqR08rKiEjOiQiMTMiPlddbFlEKiEjOiQiMTFKWjJzMjUmKiEjOiQiMWwscCVbaSlwKCohIzokIjFhWF8sYlMuNSEjOSQiMmouZ18lR0ZJNSEjOiQiMWN4ViZvKmZkNSEjOSQiMi1FJyp5NyxhMyIhIzokIjJQd2pRSiZwODYhIzokIjBsJlwoXC1EOSIhIzgkIjItJW9aT1IlPTwiISM6JCIyMEVWKm8xdSw3ISM6JCIyRWkzNEQ3QUIiISM6JCIyPUNfdF92S0UiISM6JCIwLkBpXVZcSCIhIzgkIjIjKj54cFJDc0siISM6JCIyLjJHTyczN2c4ISM6JCIxX1Yhb19IT1IiISM5JCIyd1QpZUoydUY5ISM6JCIyTWojPnomUUNZIiEjOiQiMl5LQEs/LHhcIiEjOiQiMVBOKm9ELE5gIiEjOSQiMk52LHZjMSlwOiEjOiQiMVRBMjQ0ZTE7ISM5JCIxPEVeVlt5VjshIzkkIjJjY21QZXc4byIhIzokIjJfOi0nUUdKPjwhIzokIjImeSQpXDEnXHZ2IiEjOiQiMWx1ZyUqRy8neiIhIzkkIjEzKCk0WiRcWiQ9ISM5JCIyRGI8WnhFTyg9ISM6JCIyaThaUGVNRSI+ISM6N2FxJCIyJDQkejNwdCM9OCEjOiQiMkVKbjNuenNEIiEjOiQiMi4iUSkpcGN1Jj4iISM6JCIyT2xyQSd6dUw2ISM6JCIyc0J0I1FxUHI1ISM6JCIyTTdqKVEnUSgzNSEjOiQiMTkqcG8kZWFmJSohIzokIjEmUS8iKj5MOyQpKSEjOiQiMXVrMSo+LF8/KSEjOiQiMSo9PSYzJ28+ZSghIzokIi8tIz5QOFEncCEjOCQiMWApeSN6NXdfaiEjOiQiMSNldihIKyg0diYhIzokIjFCazZ3bHJnXiEjOiQiMU03IUdXKVElZSUhIzokIjFIQzZRKClcQ1MhIzokIjJqIm8hKj5xdCRbJCEjOyQiMllXKilcITQybEghIzskIjFGYEgqKVsqPVojISM6JCIxOkEhZisnPTM/ISM6JCIyWVlaIzRFZHk6ISM7JCIydm8oPkQ+PSk9IiEjOyQiMFdNZSFlbUAlKSEjOiQiMUgtRXZYIilcYSEjOyQiMSopUUU7UlgoKkghIzskIjJ6IlxqMiEqXCIzIiEjPCQhMXZiIz4qMzcpKUchIzwkITJqMCVmJ2UhZSw2ISM8JCEwKFxkLilwbUwiISM6JCExQEs1PSFRZHMqISM8JCExNDEtO0kib1smISM+JCIyd3l5ZWkpeUk6ISM8JCIxRiNwa2xaI2ZOISM7JCIxeTglSGkqPXRmISM7JCIxI1s4YDFiIWYnKSEjOyQiMihHZjxFSWBeNiEjOyQiMiUzVSo0KCplaFciISM7JCIyQkhbV1xGUnUiISM7JCIxPihcbWBFMy8jISM6JCIyKFJBKSlHbkJNQiEjOyQiMUVlJW9URURpIyEjOiQiMU9GcGQpUlohSCEjOiQiMSp6KDQncHYuPSQhIzokIjF2SCJvKG9CXE0hIzokIjFqJls+Nks4ciQhIzokIjF0Vj92RiJvJ1IhIzokIjFYNXhLTSRmQCUhIzokIjFiSk4iekYhZlchIzokIjE9d1tRV1wncCUhIzokIjFcRFtDJil5R1whIzokIjElNGEqNG5UY14hIzokIjFQbXhxTSQqemAhIzokIjFBN2VndCQqKmYmISM6JCIxUlZNKT1tcSJlISM6JCIxJXlVX04hKj4uJyEjOiQiMWBXVnBRU1hpISM6JCIxeDAmKmVHLGVrISM6JCIxMkc1XDxfcW0hIzokIjEkUWxQbDxPKW8hIzokIjEqZWJOIlImejQoISM6JCIxeClRdS5NVEooISM6JCIxMkgqUlwocEt2ISM6JCIwMGUoKXkzVHYoISM5JCIxeilmNy1eKHl6ISM6JCIxXiNbb2xDcD8pISM6JCIxKGZubWteKVElKSEjOiQiMWRLSiZSJW91JykhIzokIjEkXC0sYD1YIiopISM6JCIxJCp5KkgxMyVlIiohIzokIjFlWTwsOVExJSohIzokIjFDIm9cdWMlZScqISM6JCIxKik0X2ZjbDkqKiEjOiQiMj5cYVhSLHYsIiEjOiQiMjc4SyVIKmVSLyIhIzokIjF2cCZSYlkzMiIhIzkkIjIjM0RfZWA8KTQiISM6JCIyOyFlaEcqZWY3IiEjOiQiMkFebSZwR0BhNiEjOiQiMi90JUc9VCZIPSIhIzokIjJXKG8keTQrQUAiISM6JCIyJFFSenR4Jz5DIiEjOiQiMlghUUlzRUZzNyEjOiQiMl4yKnA9ejcuOCEjOiQiMjM+Nz1OVlhMIiEjOiQiMkBqOUZ3Q2xPIiEjOiQiMnBtJ0coSHQhKlIiISM6JCIyXlhbLTAmPUs5ISM6JCIyS2AjKVsnMyZlWSIhIzokIjEpKXojKVFqMCs6ISM5JCIyTnBJTC0jeU06ISM6JCIyOzIhUSN6LitkIiEjOiQiMS0vN11McDA7ISM5JCIyWyJmQVMpPT1rIiEjOiQiMTZLYj5iTXk7ISM5JCIxbUQkKmZrQjo8ISM5JCIyL18heVhLWF88ISM6JCIxJlJcMGtjKip5IiEjOSQiMi48RzY/MngjPSEjOiQiMWB2X0RlbWw9ISM5JCIyazVBXUElei4+ISM6JCIxXm0vPGAwVT4hIzk3YXEkIjIpZkhtJj5bKEc4ISM6JCIyXywwVyg0d243ISM6JCIyM0l1bF1zaD8iISM6JCIyYjhIIkdhL1c2ISM6JCIxR0ghRzliOTMiISM5JCIyTyMpUV1DIlw9NSEjOiQiMVRXakcrZl8mKiEjOiQiMTtyJXpzMyk9KikhIzokIjFzI1I2JSl6XEcpISM6JCIwOmAiPlpyX3chIzkkIjEiPm1iak1RLSghIzokIjFZVyM0bHUuUychIzokIjFLKnlCTHpYeSYhIzokIjFzN14vNCopeV4hIzokIjFRI1JYMVBmZSUhIzokIjFlbnhEcWAzUyEjOiQiMjhWIj4lM2UoXE0hIzskIjFWOmY2SjE4SCEjOiQiMWhFam9oZC1DISM6JCIyV21KKGZyVkI+ISM7JCIyLyl6WiIpMzUjWyIhIzskIjIpNGgoSCdcRyczIiEjOyQiMSllMigqRzBAVyghIzskIjJuSikqW2YnUklZISM8JCIxQHYjXG9KMlojISM7JCIxJ3pLd2pVQW8qISM8JCIvKjR6Pms6byohIzskITFLIjM3b0MqSD0hIzwkIjElM2t0LUx5OSohIz0kIjEjWyQqKil5US8qKSkhIzwkIjEqKUcpZWhZdDwjISM7JCIybTs6XTQpPTdSISM8JCIxMkZPXiMzQS4nISM7JCIxeW0mKiopKWVCWSkhIzskIjFvI1soZSk9QjYiISM6JCIyQFYzdHpTU1IiISM7JCIyQXddKUhSNSZvIiEjOyQiMlFVc01HYDApPiEjOyQiMjlVMTYqXHF3QSEjOyQiMUJePVcvJTRkIyEjOiQiMTEmSHZZcjknRyEjOiQiMm1FWyQ+KUhyOSQhIzskIjEvJG9DMSo+Rk0hIzokIjJuQl8xJCkpRyxQISM7JCIyTyshenNYQ3BSISM7JCIxXCo9OF0lM0pVISM6JCIxYnVicGomcFslISM6JCIxKFxCNkAzcnQlISM6JCIyYmhgWGhvPSlcISM7JCIxJFtmb0VMO0EmISM6JCIxQ0x1bWAmb1gmISM6JCIxbjU4TiJRISlvJiEjOiQiMWQqcF41R2QiZiEjOiQiMUErKnpAMzA5JyEjOiQiMTBMSk4rKkhPJyEjOiQiMSYzMVFrL1FlJyEjOiQiMSQqR2kkNCNmLm8hIzokIjFuNDwlXCopSC0oISM6JCIxejQiZjw9RUMoISM6JCIyMGkkPSRmcUlZKCEjOyQiMTtHYV55KltvKCEjOiQiMTQsL14pKWYzeiEjOiQiMUVnNjQ/aE0iKSEjOiQiMVZ4elsuSmokKSEjOiQiMVRmUkQvKyZmKSEjOiQiMW4nM1Y7RCpIKSkhIzokIjFhbiM+RXEjbyEqISM6JCIxT2tyTE08NSQqISM6JCIxOGg1UGJ0YiYqISM6JCIxQWIuJFtLXSEpKiEjOiQiMmMtTHlvN2UrIiEjOiQiMmpXUSVbeV1KNSEjOiQiMSopSFN6X2ZkNSEjOSQiMmpDJFJGRjMlMyIhIzokIjIsaj5lXXo0NiIhIzokIjIuWmonM21IUTYhIzokIjFwJil5JWVZZzsiISM5JCIyJkc6RSxLQyU+IiEjOiQiMShlW0kkNCFIQSIhIzkkIjJpKioqSEFWLl83ISM6JCIyPStAUURkO0ciISM6JCIybnlnWD4jeTY4ISM6JCIydDsiNFclPkNNIiEjOiQiMk9dSCtXd05QIiEjOiQiMnokKVFyOmRfUyIhIzokIjJjMkU6amh1ViIhIzokIjIjM3VKS2M9cTkhIzokIjJyT1NJXD9NXSIhIzokIjJtNipcL0o6UDohIzokIjIjWy8zaGdPcjohIzokIjE3bylSJXouMTshIzkkIjIwbHYlPVA5VDshIzokIjEoKipIIj1fbHc7ISM5JCIyRSdmYChvVERyIiEjOiQiMnZxel9OcShbPCEjOiQiMEMkXDZxSSZ5IiEjOCQiMm04b3hjO0AjPSEjOiQiMS9YZiJlaiJmPSEjOSQiMnUjNDRLRlQnKj0hIzokIjBLeSNRI0hRJD4hIzgkIjF4JkhfQHo4KD4hIzk3YXEkIjJlMmVbJm8oKVI4ISM6JCIyeW5hXVVYKXk3ISM6JCIxKmVUKXorOTw3ISM5JCIxIltYVVkzWzoiISM5JCIyLXR5NFo0PjQiISM6JCIyMCFcJDQxOiZHNSEjOiQiMSc+RydlVTdaJyohIzokIjF1QGd5XzExISohIzokIjFHO3pzKUhLTykhIzokIjJPTydlZzs2P3ghIzskIjFwPj9nNFp5cSEjOiQiMWBOW21sTlNrISM6JCIxJlFcX0E3IjNlISM6JCIxQVorOzdPJT0mISM6JCIxNEAlR21xPmQlISM6JCIyQzRlaWc7UyhSISM7JCIyazpZPEstUVIkISM7JCIxKik+XiZHPF0kRyEjOiQiMSwnUnEmeTgtQiEjOiQiMiR6Mi8oejs2IT0hIzskIjJNI3lWcyg9LU0iISM7JCIxdSI9UTwwW0kqISM7JCIxckBfbyd5JVtlISM7JCIxJj1pTTMoNF9KISM7JCIyd0o2PUosOEciISM8JCIxKHo+NXFjcEAjISM8JCEyb1Vsa0I9VDMiISM9JCIxa0ZpLidRcCM9ISM8JCIwRWg6JnlLayoqISM7JCIybiVHJDMhNHhkQSEjPCQiMGoteHkpXDVSISM6JCIwX19YTmBmIWYhIzokIjEmPShcISkpNFY+KSEjOyQiMi9JNXJAIz1zNSEjOyQiMiNwZyY9J1FIVjghIzskIjIoW00pPTRSdWkiISM7JCIydjowUCd6KCk+PiEjOyQiMj1MXzV6YW1AIyEjOyQiMV9PemRzajlEISM6JCIyViVvKT5sXTkiRyEjOyQiMV9cciRHamA1JCEjOiQiMSZ5NGNDaV5SJCEjOiQiMiRRbFpjLy8hbyQhIzskIjInZXlvaEldZlIhIzskIjFPXSVvMCVITFUhIzokIjI5JykqKT51UzhdJSEjOyQiMToyJSopZTdQdyUhIzokIjEpKj5tWjZmP10hIzokIjJER2k0MltBRiYhIzskIjFjSnF5KUchPmIhIzokIjFDVF0hZVM4dyYhIzokIjJ2Yls7cFQnKipmISM7JCIxTlp0OU5WTWkhIzokIjJieTAlUj1EbWshIzskIjFwKnBvWGVjcCchIzokIjFQLC45QEJCcCEjOiQiMXgqNGd2ZSZcciEjOiQiMSNIJWVHNkF2dCEjOiQiMk5dXGctKXkrdyEjOyQiMWheRGVPIW8jeSEjOiQiMXZzKipbeHhgISkhIzokIjFqMXdUcTwjRykhIzokIjFpYDZmKT1DXikhIzokIjEmKWVkTHMnW3UpISM6JCIxeDMyOD4kKXoqKSEjOiQiL0p5dC1kPCMqISM4JCIxYEppKik9SGUlKiEjOiQiMSQzN2lEbEBxKiEjOiQiMSwiPmApZktcKiohIzokIjFZPFtwJikpKj41ISM5JCIxOUJBIzMlUlg1ISM5JCIxUk5KbiFlNjIiISM5JCIybWJJYlQqRyg0IiEjOiQiMmUzRzxbKHpCNiEjOiQiMnYnZkopUiNwXTYhIzokIjImKkgzTT4mKXo8IiEjOiQiMVllQkF4bzA3ISM5JCIyYCt1NlY3UUIiISM6JCIwI2Z5Iik+UGk3ISM4JCIyNyxreXd5OEgiISM6JCIyIzN2JT1PVzNLIiEjOiQiMjgsJ1JHKnkyTiIhIzokIjJ3XzdDayE+IlEiISM6JCIyWFMmW1leMzc5ISM6JCIyUnRLJ3ldWVY5ISM6JCIxIlFmYnBIYFoiISM5JCIyUVQncDRZbjI6ISM6JCIyejtkMGwiXFM6ISM6JCIyOGknKkgmKW9QZCIhIzokIjI9PEF1YyFcMjshIzokIjEiKmZXIW9QO2siISM5JCIyJnljTEh6PXc7ISM6JCIyO1V1LEg7NnIiISM6JCIyM0xdelQmUlk8ISM6JCIya0hVbjYnKj55IiEjOiQiMnZCLiY+eSl5Ij0hIzokIjJVQUIkZiFSUyY9ISM6JCIyLmM8ciJ6VCEqPSEjOiQiMiUzeDJNQypwIz4hIzokIjFbUmshKTR0aj4hIzkkIjFAQyhwZC0xKyMhIzk3YXEkIjI0Mk0hZSg9PE4iISM6JCIyI3p0Yi5hZyFIIiEjOiQiMm14Jz4hek4oRzchIzokIjIqKTRray9UaDsiISM6JCIxJCoqW091aEc1IiEjOSQiMiQqWy5MMF0qUTUhIzokIjA9QlRbRFp1KiEjOSQiMV8rT2F5OCY0KiEjOiQiMS5KdWR0IT1XKSEjOiQiMUMicG9memd5KCEjOiQiMSI0dTN5SSdIciEjOiQiMT1NJmZuOlhaJyEjOiQiMWtwVm9EPkJlISM6JCIxclUyMlldeV4hIzokIjFGKWUyJT1nVlghIzokIjJEOEZrJ1EiPSNSISM7JCIxYSoqcG8mUmxKJCEjOiQiMTJpXkxmSUpGISM6JCIyYTdPUUFNLTwjISM7JCIyTWYtKyE9PFI7ISM7JCIyVTYobzM8Y1o2ISM7JCIxVSI+JykpNFgvciEjOyQiMXdEMVcjemJbJCEjOyQiMTA/OVdXTE4kKSEjPCQhMUN1OEEwUzl0ISM8JCEycz9cd1hEJmU3ISM8JCExVSJvQl41W0sqISM8JCIxY00mPi5bPS0kISM9JCIyRUU9Y3UlM2Q5ISM8JCIyYkc2KSlvaWlCJCEjPCQiMWhHQldBYStgISM7JCIxZCVbZikqPWdnKCEjOyQiMkw+TXVPIXA2NSEjOyQiMSZwNkBRMyl6NyEjOiQiMlRXZm07UThjIiEjOyQiMmo5cGgyekUmPSEjOyQiMWEnUm87YS86IyEjOiQiMiVRPCk+PXk7WCMhIzskIjF1T0NTZiVRdiMhIzokIjIpUVVINHglXDAkISM7JCIydlQ/ZiRlVmBMISM7JCIyd3YzVylvO1tPISM7JCIxamk/bG5MUVIhIzokIjIxRltSMD5NQSUhIzskIjFpNzRVNzYuWCEjOiQiMSMqPiR5RiFIeFohIzokIjFbI2ZuJnAoZi8mISM6JCIxXy1uRHpJNGAhIzokIjFRMVNFUV5uYiEjOiQiMWorKHA5LTQjZSEjOiQiMWk0czBOJSlwZyEjOiQiMjlhSC5IZ1pKJyEjOyQiMWVLKUh4O2hiJyEjOiQiMk4zY1ssNVd6JyEjOyQiMU9HSGQ1O0lxISM6JCIwWDpxMjFSRSghIzkkIjE5eiYqZnQ9J1woISM6JCIybHM9MjdXdnMoISM7JCIxd3dgYUxdZXohIzokIjFgKTRQL3ImKj0pISM6JCIxN3UzTlRBQCUpISM6JCIxaTEpXHUuUmwpISM6JCIxTHBPQSssKSkpKSEjOiQiMWFqaDQhKipRNyohIzokIjFPRHIicCIpPU8qISM6JCIwOlwvQ0RBZyohIzkkIjFGd2ptaTpYKSohIzokIjJvbXc+ZCczNDUhIzokIjJCQTBYXF5SLiIhIzokIjJLd1NQQkMiZjUhIzokIjFocFUtcWglMyIhIzkkIjIxKHl4MDVXNTYhIzokIjI3R2oob3BnTzYhIzokIjI7Lyg+U2I3ajYhIzokIjJ1JSlcW2IyKz4iISM6JCIyJTR6Jm85a3NAIiEjOiQiMDBFJT1uIVxDIiEjOCQiMi8jSHZ3biVIRiIhIzokIjJRd3UhZmNSLDghIzokIjI8XWQyPGstTCIhIzokIjIiPnZja0BjZjghIzokIjI5XEgyNClIKlEiISM6JCIySCJ5QVomeSU+OSEjOiQiMl40OiJleTVdOSEjOiQiMl4zdldxKD0iWyIhIzokIjF2SExHb3I3OiEjOSQiMlc5KVtDM3BXOiEjOiQiMm84RiRIPzV4OiEjOiQiMng7J2U0JlIqNDshIzokIjJNNT4jWyIqPVY7ISM6JCIyQVQqUj5RJG9uIiEjOiQiMnVSbzBrYDNyIiEjOiQiMSRRVWxHRV91IiEjOSQiMkMlKXohXHQjKno8ISM6JCIxWTIkXHNJXCI9ISM5JCIyKEd4MzshNC0mPSEjOiQiMmQ5MnYjUnQmKT0hIzokIjJhPDYoXG1aQD4hIzokIjFeVTs7IzN1Jj4hIzkkIjFmIjN6IykqXCQqPiEjOSQiMXc5WFNKc0g/ISM5N2FxJCIyX3lHMU1UVk8iISM6JCIyMXNJeiNINy44ISM6JCIyb0k4NT5lNUMiISM6JCIyJHplQy4sO3k2ISM6JCIxOkU1I3lbVzYiISM5JCIyKUdZMExRJipcNSEjOiQiMVI7OUVrPFopKiEjOiQiL3AkKm8iKip6PSohIzgkIjF5eERodCRHXykhIzokIjE3Jj01SEtHJnkhIzokIjBlPihvYF96ciEjOSQiMiZmKEdUcFtcXSchIzskIjFRLS5uMHBKZSEjOiQiMlhzInAsRipHOyYhIzskIjEoeTdhY0RAXSUhIzokIjJiTyYzKHAySiZRISM7JCIxdyw2VmdKPkshIzokIjFlJkgyJHBwLkUhIzokIjFfUU00JTQqMz8hIzokIjAvRTdfXShROSEjOSQiMSN6YG1XPF4sKiEjOyQiMjsxOCJRMilcOiUhIzwkIjJkVUlnWHJkUiIhIz0kITE0KDQtcCtWZyMhIzskITF1JDRZN25wIVEhIzskITJNcSlISGgiZWYkISM8JCExKFwkKkg2T1JRIyEjOyQhMXMmcFRsdll2JiEjPCQiMWZcPGUsI0hkIiEjOyQiMWBFMiN5P0wkUiEjOyQiMTcmXClRNF5dayEjOyQiME5WV0xIMTUqISM6JCIyeHRbeF8lKm89IiEjOyQiMiZ6WUBTUS11OSEjOyQiMmtyKEg9LGhwPCEjOyQiMjAuWjxnXzoyIyEjOyQiMT5IXmdObXhCISM6JCIxIip5eFo8JWVvIyEjOiQiMigqcHdpRSk+JSpIISM7JCIyWjMqUk5mNyxMISM7JCIydC9uIzM+SzBPISM7JCIyQ14rPnR5ZCFSISM7JCIyYkUjKSk9eHYsVSEjOyQiMXpjIXAhW3YjXCUhIzokIjFXMCI+TWwleVohIzokIjE6diEpMzh2ZV0hIzokIjEqW0gwZDdPTCYhIzokIjFWdD4mW2lKZyYhIzokIjEyVkk+d2duZSEjOiQiMFJCXyc0QkZoISM5JCIxbXQiWyd6UCNRJyEjOiQiMmxiQShbWVdMbSEjOyQiMXkmKWVxcyczKW8hIzokIjEyYz89SDZEciEjOiQiMUVicy4ybm10ISM6JCIxTUhua0svMXchIzokIjF5bztTJVFQJXkhIzokIjFQYFU7NkUhMykhIzokIjBKOFVOMGhKKSEjOSQiMSUqUm4zcXVeJikhIzokIjE8OmA9cmooeSkhIzokIjFlSSh5Tyc+QyEqISM6JCIxZjtCLzQiPUUqISM6JCIxTipbPnRIM10qISM6JCIxKHBJcnpqOnUqISM6JCIxc3NnYG5HJSkqKiEjOiQiMmpUMG1zQkgtIiEjOiQiMnV1YyZlQW1aNSEjOiQiMWlsMC9CbXM1ISM5JCIyM05TS3FSejQiISM6JCIyPV42OWgzTjciISM6JCIyZlM+Zig+UVw2ISM6JCIyKW9ac1s+ZHY2ISM6JCIyQUEwJTQtNC03ISM6JCIyR2YsQz1bKkc3ISM6JCIyeTN6ODlkaEQiISM6JCIxXDonPj9HUEciISM5JCIyNClITDZBbjY4ISM6JCIyY3dZIVwmKioqUjghIzokIjJPXF54Jik+KG84ISM6JCIyN0VOYXNUeVIiISM6JCIyTF5gQU1zdFUiISM6JCIyYEcxXjo8dFgiISM6JCIyUCRwJj5hendbIiEjOiQiMmtQZGJfZyU9OiEjOiQiMnYoWyRIYWUnXDohIzokIjIvQEpIR3A3ZSIhIzokIjIxN10mKmYmRzg7ISM6JCIybHkkPS92cFg7ISM6JCIxLTpHTkFceTshIzkkIjJOXCYqKipSYTtyIiEjOiQiMjpKSyF6aDtYPCEjOiQiMVRXXiRlMiF6PCEjOSQiMnQ8JT1ebjo4PSEjOiQiMi5kUihvLWZaPSEjOiQiMSxYUTJORyMpPSEjOSQiMk9CXydmNEA8PiEjOiQiMVdfL25sTV8+ISM5JCIyPDlRKUhTbSgpPiEjOiQiMk9cVEI0UEotIyEjOiQiMmJYdCkpelIoZT8hIzo3YXEkIjFsUl9VJT15UCIhIzkkIjJCNmcieXdbOzghIzokIjI3YUpYNjpVRCIhIzokIjJKOyVlW1IqND4iISM6JCIyKXAmelJhQG83IiEjOiQiMmNQIyl6cCw8MSIhIzokIjFeJlx6PyJbYyoqISM6JCIwdWc+UScqb0cqISM5JCIxenUpekB4KDMnKSEjOiQiMVReJjNBcEgjeiEjOiQiMGFYSkIleUlzISM5JCIxJW93JFspZVRgJyEjOiQiMSIzXE1aL2UkZSEjOiQiMT43QCpmeSNSXiEjOiQiMUJSPUsiZSlbVyEjOiQiMiQpKip5O0N0IXBQISM7JCIxR1BaOSslUTUkISM6JCIyQjUmKj1KIlJiQyEjOyQiMikpZVIoZlJqQj0hIzskIjFgWjYzTzAyNyEjOiQiMVApelhBJXlwZyEjOyQiMk9mPUFcJXpQUSEjPSQhMUpKRzJXUS1YISM7JCExczBKJmZNUm0oISM7JCExUm4qPip6dlwkKSEjOyQhMUpCQ3ZvN0RwISM7JCEyJkcuJUhsPUdTJSEjPCQhMlVjIj4kRzQiKlwiISM8JCIyKHp5SHAmUSMpWyIhIzwkIjBfXlVkZiN5VyEjOiQiMWQ8ejlQdG91ISM7JCIxWkliLnpuWjUhIzokIjJWSyVSVyVSPE4iISM7JCIyTWtFZUlPKGY7ISM7JCIxc2h3ejtecj4hIzokIjFoVnh2TkYnRyMhIzokIjIkPVkxc0YlR2cjISM7JCIyREpNV0R2KT5IISM7JCIxJVspKSlINS5PSyEjOiQiMXUpejVjJjNdTiEjOiQiMiR5YmA4QCo0J1EhIzskIjF2JGVjYDJ6OyUhIzokIjE+R3FHUD5xVyEjOiQiMVhsLXBaU25aISM6JCIxVHAlWydvRWZdISM6JCIxKTRQYyVlbFhgISM6JCIxdEBIb1xkRWMhIzokIjF2KnBdW01AIWYhIzokIjBlWS1iTEQ8JyEjOSQiMVYpZi1fVyFRayEjOiQiMTlnIXBUKioqKXAnISM6JCIxWSdSRj55ZCZwISM6JCIxLjM/MCUpejNzISM6JCIyYmxrTyRmXWV1ISM7JCIxOiVldlZtYHEoISM6JCIxL3JIUXQmKVx6ISM6JCIxXzQuLS1ZIz4pISM6JCIwQSc0JlxgT1YpISM5JCIxYGNEcmQhUm4pISM6JCIxNz84QCVwTyIqKSEjOiQiMXQqPUA7dkw6KiEjOiQiMUM0ZWx1VSRSKiEjOiQiMXRYSy82P00nKiEjOiQiMHpCImUqUWcoKSohIzkkIjJGUCJSOV4jPiwiISM6JCIyIz4vJlxhNmsuIiEjOiQiMjYuQWQqeTNoNSEjOiQiMmlJQGYxd2YzIiEjOiQiMlJONStbJjQ2NiEjOiQiMk9XYVVZams4IiEjOiQiMlg3R1NqJjRpNiEjOiQiMSlROz9FMSEpPSIhIzkkIjJbMm05ZzNVQCIhIzokIjIncF1JV15yUzchIzokIjJLJmVfK3lgbjchIzokIjIoUU0vIyp6byVIIiEjOiQiMlJxSTJtd0BLIiEjOiQiMnY3Mmg+OStOIiEjOiQiMiUzdiZISDUjeTghIzokIjI4IzQmR3Z0blMiISM6JCIyYShlMVlBck45ISM6JCIybigqMz0wS11ZIiEjOiQiMjdHIylbelBaXCIhIzokIjJccyI9Jz5LW18iISM6JCIyUU4tRiZlSmI6ISM6JCIyT0BKLTEoPSdlIiEjOiQiMT08Iikpb1R1aCIhIzkkIjEkRyZlPEoyXDshIzkkIjFbKytLQTIibyIhIzkkIjIxK29HW0ZNciIhIzokIjFvZmQuXTdZPCEjOSQiMmtlJzR6KFsiejwhIzokIjIoeSVIJWUzWzc9ISM6JCIyVWwjeis7NVk9ISM6JCIyQih6RlgqKikqej0hIzokIjJRSERQcEJUIj4hIzokIjE+KWVyenolWz4hIzkkIjIkejo5UFkuJCk+ISM6JCIyaiNlcSVIa3gsIyEjOiQiMiRHeig0IVtrXz8hIzokIjJaSz9eT193MyMhIzo3YXEkIjImKj4kXDciR0FSIiEjOiQiMnQqeW9tWXpJOCEjOiQiMidmMGE3OEtvNyEjOiQiMktcJXpyK3kvNyEjOiQiMiMqKil6P05WLDkiISM6JCIyS1dTKFtkUXU1ISM6JCIySDhPbT4oWzI1ISM6JCIxbXdGXUBRJVIqISM6JCIwRlV4KUdbLSgpISM5JCIxKWVMNUkoZSoqeiEjOiQiMWt2a1pYaCdHKCEjOiQiMSVIY3pKV19jJyEjOiQiMU00JDNePiNRZSEjOiQiMUdWcVBQaDReISM6JCIxbzBCcjEnW1ElISM6JCIxdC5OeHI+cU8hIzokIjEpUVFoWl42KEghIzokIjJDQyVROTUyIUgjISM7JCIybzxqUiwlW0I7ISM7JCIxJ3o2ZyN5ODMnKiEjOyQiMTFneiU0WVgnRyEjOyQhMVk0ZVJNSyM0JSEjOyQhMnMzKG9WImZtMyIhIzskITJkZ0tsIWZ3WDohIzskITJPQm0wJW8iPV4iISM7JCEyS3VjYWwlcEU2ISM7JCExRiJlYENaJ0duISM7JCEyJilRVSJ6T2p0QyEjPCQiMi0pW1UlR0M9VCIhIzwkIjFoJGY4YVBdLSYhIzskIjE9PkdqZG1vJSkhIzskIjIkZiYqKlxyJSk9PSIhIzskIjInKTRIbSNbXTc6ISM7JCIxRnVQZU1jVD0hIzokIjFNITRrNGouPCMhIzokIjIuJkc6KVFoIipcIyEjOyQiMS0pKls8NWNGRyEjOiQiMmMvJik+NDFbOiQhIzskIjExZ3EkbyYqKnpNISM6JCIyTnhhJWV4QS1RISM7JCIxUDtwMyEpbz9UISM6JCIxJCpvPSV5KHBNVyEjOiQiMWhlJipRT3RWWiEjOiQiMTp0PihmR3UvJiEjOiQiMXBsZihvaWJNJiEjOiQiMUE3cjAhWyFRYyEjOiQiMSw2NkA8IlwjZiEjOiQiMjBqQ2kyemk/JyEjOyQiMUYmKlFxdU4jWychIzokIjBoXSIpNEFNdichIzkkIjEvI1wnR0shKT5xISM6JCIwMSdIK10oPUcoISM5JCIweDVrXVgrYSghIzkkIjAkKnBMI3p1JXooISM5JCIwJ0hVYkNWWSEpISM5JCIxUnRsPyplYkgpISM6JCIxWls0bikqZVUmKSEjOiQiMFJVajwlKXp5KSEjOSQiMSMqNEZ3Nj5LISohIzokIjElPSR6T2BrdiMqISM6JCIxX1E7ZTt3PSYqISM6JCIxVCRlXyg9JD53KiEjOiQiMilINEFmQGIrNSEjOiQiMiNSTzFWbylcLSIhIzokIjJ0VFZEN0cmXDUhIzokIjJqVjxULS9VMiIhIzokIjFjP3hKKVIhKjQiISM5JCIybSRvU3ojZVM3IiEjOiQiMjsqPUAsKXojXDYhIzokIjJjdk1zIkdzdTYhIzokIjI0Sm0uLi8vPyIhIzokIjJsKG8pPnJRakEiISM6JCIyMDhQaSY0YV83ISM6JCIyOHIqKW8pUS16NyEjOiQiMDItYyEpKnowOCEjOCQiMlQnUld2LSlHTCIhIzokIjJjWyNmUWhGZzghIzokIjImcFlrcnUqelEiISM6JCIyPCwiKWVbYGdUIiEjOiQiMl4/eUdRX1dXIiEjOiQiMkFYVCF5Nj90OSEjOiQiMmxPJSllXTBCXSIhIzokIjJpSlo3VXA8YCIhIzokIjEwdDs1X2ZoOiEjOSQiMmkmNClHQSR5ImYiISM6JCIxTmJkUjxMQTshIzkkIjJ5blxyKG9CYDshIzokIjFkeWRVRFwlbyIhIzkkIjIlXG1uTi80OzwhIzokIjJBY0s4NT8hWzwhIzokIjJhO1QoRyFwLXkiISM6JCIyaiRvMSR6QUciPSEjOiQiMSdSaUtCbGMlPSEjOSQiMSo9VidlJ3koeT0hIzkkIjEwJio+d1M5Nz4hIzkkIjJ3OkEwVlRkJT4hIzokIjJDdVYmWylcJno+ISM6JCIyOTh3Pil5YTg/ISM6JCIxOmpEVFByWj8hIzkkIjFsLyFmXkQ/MyMhIzkkIjIkSDBLeDhZO0AhIzo3YXEkIjAqcEkxLGwyOSEjOCQiMiI0UnZhOTlZOCEjOiQiMjhGSClRYVwkRyIhIzokIjJFU3JBK2knPjchIzokIjIlKj05cihvZWE2ISM6JCIxQyRwb1U3IykzIiEjOSQiMmMleU5SKHovLSIhIzokIjF1KyFbdUdMXiohIzokIjAqeVhjc0UyKSkhIzkkIjFqTyZlbTJrMykhIzokIjFqKDNJIio+NU4oISM6JCIwYjVtIj5ALW0hIzkkIjFbLi9yIWVDJWUhIzokIjA8JnooPWVpMiYhIzkkIjElUio+ZW5vNVYhIzokIjBFM0w9Iz1iTiEjOSQiMVF4TCdcIVw+RyEjOiQiMlY8TUhkKCkqM0AhIzskIjJEV2MpZSkpUj05ISM7JCIxaXI1NHInZkUoISM7JCExQUxiNzR5KSpwISM9JCExWm4jXDZ3KCpbKSEjOyQhMm1OYkNiZFYqPSEjOyQhMiZmb2p6TGFcSCEjOyQhMVp2QUA0ZlFEISM6JCEyOzQpeUFWYillIiEjOyQhMXRddVlybWQnKSEjOyQhMkRxeCFceEFnSSEjPCQiMSVbOXNGWWRnIiEjOyQiMTQjemtNLmt0JiEjOyQiMWJoJXp1MnZiKiEjOyQiMlgoKSkqXHpRLEsiISM7JCIyRD9AUnJ5WG4iISM7JCIyRmdlJXkjeU0tIyEjOyQiMTpqaDgkNCJwQiEjOiQiMWxLczkvUjdGISM6JCIyWSRwZyZlNk0wJCEjOyQiMjwpNFtjUHoiUiQhIzskIjI3ejlHZ0xwcyQhIzskIjEiNFxkO2wiZVMhIzokIjFOKEcydWdbUSUhIzokIjAqPVI9JClbMVohIzkkIjElKipHJCozUkUtJiEjOiQiMSUpXHJhYC5MYCEjOiQiMlgjNEFka19QYyEjOyQiMXd6IjMzeWckZiEjOiQiMSR5TD9bZShHaSEjOiQiMSkpKVI0KVFzOmwhIzokIjFPQ1wkSC9zeichIzokIjFEUyopWy9cdHEhIzokIjEpXG0mSD8jXE0oISM6JCIxJnlxOUJ4PWgoISM6JCIxbFlGPE53dXkhIzokIjE0ITRmUTRTOCkhIzokIjFjaig9KXAwIVIpISM6JCIxTT8ob1JiTGspISM6JCIxTDovaFhOJSopKSEjOiQiMXZjVHInKlxWIiohIzokIjFFeS5gaEEiUiohIzokIjFlNS8pPWJ6aiohIzokIjFHXiZcKCkqMyUpKSohIzokIjJOJD0+NDcrODUhIzokIjIiM19AOCEzdy4iISM6JCIxblYqZXJpQTEiISM5JCIyRy9QJFxnKnAzIiEjOiQiMiNwTWNxaCQ9NiIhIzokIjJtd3VOdTNvOCIhIzokIjIlXCg+RjNQPjsiISM6JCIyX3dKQk1Vcz0iISM6JCIyJSo9OGF0VkZAIiEjOiQiMmMjKVxMd2UlUTchIzokIjIwdGAjUk1TazchIzokIjJicDQlKlsjZiFIIiEjOiQiMl83byxfUnFKIiEjOiQiMTlBOlRydlY4ISM5JCIybGYmW1JxdnE4ISM6JCIySEYjZS4rMClSIiEjOiQiMUc5aCkqZWtEOSEjOSQiMl88ZCkpZmBOWCIhIzokIjJ3PyxaKTN5IlsiISM6JCIxcFR5OFZMNTohIzkkIjJHJlwseCE+I1I6ISM6JCIyMFQrMCYpUSVvOiEjOiQiMipIJSk+YWMqemYiISM6JCIyPSQ+QUYoKil5aSIhIzokIjBlTCRHJT4iZTshIzgkIjJqVihRbzZvKW8iISM6JCIyQ0FHJXokcCY+PCEjOiQiMigpRyUqSF93MnYiISM6JCIyKTMiSCFRSkgjeSIhIzokIjIncCo9byN6NTk9ISM6JCIyYzJeYyh5P1k9ISM6JCIxW3NdMCV5Jnk9ISM5JCIxNDg3Wk4/Nj4hIzkkIjJ1LlpUOG1TJT4hIzokIjBMIip6K1tyKD4hIzgkIjFoPy1HLVY1PyEjOSQiMTBCSSJHJCpRLyMhIzkkIjJXWWltRzx2MiMhIzokIjI5NUYoKT0jRzZAISM6JCIyJjReUlF6O1hAISM6N2FxJCIxbCpwNzJqVFUiISM5JCIyeTxyOihbaWk4ISM6JCIyUEdUYUVjKSpIIiEjOiQiMmEoKTNwLSZ5TjchIzokIjIuTlB1WEguPCIhIzokIjFYWERUeFIuNiEjOSQiMiUzOCdwNSkpWy4iISM6JCIxJSlbclhtIXBrKiEjOiQiMThMXDdfI3AjKikhIzokIjFGSywlKjQqeT0pISM6JCIxTU0mNHRvIUh1ISM6JCIxJG9WYyhRWV1tISM6JCIxWURmJCoqKmVgZSEjOiQiMSlcP1hvPkYvJiEjOiQiMSo0TFg5IWVFVSEjOiQiMk8rUS8qUm8+TSEjOyQiMTJvVmhfIzNrIyEjOiQiMkxjaWInekUwPiEjOyQiMmB3ZnkjKWY4QCIhIzskIjFodSVROk41SSYhIzskITIzU1BUKyQqZik+ISM8JCEyV2p4UVxuRjMiISM7JCExIjNrTnNsISpRIyEjOiQhMXIqNCplJEhUJmUhIzokITJEISlwd1hBalAkISM7JCEyOHBPW0sxKHo8ISM7JCExYHdaV0t4SSEqISM7JCExKTM3VTg8YncjISM7JCIyTyJbIT1odCYzQiEjPCQiMUZ5U3MhPUZ1JyEjOyQiMk4mW2RLQVwiMyIhIzskIjExbzlcOiF5WSIhIzokIjInXGwiR1dbPSU9ISM7JCIxcilcWiRHVzNBISM6JCIxZkdKbjwycUQhIzokIjF4Iyo9J0gveSNIISM6JCIyJCpcLCNcZyc9RyQhIzskIjJjUDIocFwsS08hIzskIjE5JCl6cHR5eFIhIzokIjFobzVFYGw9ViEjOiQiMkRLN1RgQVRsJSEjOyQiMSo0J2ZLeXgkKVwhIzokIjFMTT8lUj90SSYhIzokIjEoKkcsV25jQ2MhIzokIjFsQyEqPm9XTmYhIzokIjFCZmFCUyoqUmkhIzokIjFqJSlbN0RMUWwhIzokIjEnRy1JdmoxJG8hIzokIjEpNGFgXGBzNighIzokIjFXdSQqZig+JSlSKCEjOiQiMkRHPyllP191dyEjOyQiMHM/Oyc9JmYleiEjOSQiMTkvZCtVNzgjKSEjOiQiMWB6JkdFcWtaKSEjOiQiMC9sViIzVk8oKSEjOSQiMU1bWT8uWCQqKikhIzokIjFKJXpXbXJ6QyohIzokIjFrUChSU0ovXSohIzokIjFXJjRIYWI3diohIzokIjJXcDNIZSYzKzUhIzokIjJ2MCV6Z0UnXC0iISM6JCIxQFFPRlV6XDUhIzkkIjJNKyZmTmJodTUhIzokIjIleUh0RSZmJSo0IiEjOiQiMiczUTdybk5DNiEjOiQiMkdjPkJaTiRcNiEjOiQiMSNRSSVHOlV1NiEjOSQiMiMpRzI8a1EnKj4iISM6JCIxaiQqKltZM11BIiEjOSQiMWtOSnIyYl03ISM5JCIyJypcc1tqJEd3NyEjOiQiMlZpWG9nQkFJIiEjOiQiMi1UUXMoZVFHOCEjOiQiMSoqKSopM1QleWE4ISM5JCIyI0dnIzQwSzlRIiEjOiQiMnBuKjQmZVMkMzkhIzokIjFrUVt0Ml9OOSEjOSQiMi5JbihRQilIWSIhIzokIjJOdG5HI1J0IVwiISM6JCIyemQzYywkeT06ISM6JCIyYiczc2llOFo6ISM6JCIyJz1sUmh0enY6ISM6JCIyQ3RDPyY0eC87ISM6JCIyW205WV5lU2oiISM6JCIyJik9JXp4LW1qOyEjOiQiMUIiW3N1dU5wIiEjOSQiMidRLjZmJyl6QjwhIzokIjAjZkRpcEthPCEjOCQiMS1Cd0pHOiZ5IiEjOSQiMnVgSlRybmkiPSEjOiQiMWkxSC45bVo9ISM5JCIxbCMqKlw5QSR6PSEjOSQiMjhtZGh3TzciPiEjOiQiMltDbVkjM1JWPiEjOiQiMm5tX1x4b2QoPiEjOiQiMihwNzBXVE4zPyEjOiQiMk1BaUpySDYvIyEjOiQiMkwwJiopKnB4UzIjISM6JCIxKXppbyQqenI1IyEjOSQiMi5JJilHLz0vOSMhIzokIjJsaElQZXRQPCMhIzo3YXEkIjJGZEE0WlQ9VyIhIzokIjInSDM2eXNMIVEiISM6JCIyZktzczg9dkoiISM6JCIyTVpcZG4hSGA3ISM6JCIyOVtyP1tZdj0iISM6JCIyY2BjZGBmLDciISM6JCIyMGwyM2kkKTQwIiEjOiQiMTJzZUJDXSl6KiEjOiQiMW0oM2NLI29sISohIzokIjAyJj1ObUY0JCkhIzkkIjFXWWc2djhGdiEjOiQiMV9IODUiSHVyJyEjOiQiMUc/d1M+WXplISM6JCIxVl9WeUZbOl0hIzokIjEzUDtuazhNVCEjOiQiMHYxJ0dqeGJLISM5JCIxWD4lUmlWZlQjISM6JCIyUD5WW147XWwiISM7JCIxOC9BLUMncCcpKiEjOyQiMVgqSEo2VXB1JCEjOyQhMVY9IVJsZFJfIyEjOyQhMXdeJm8uZnd4KiEjOyQhMUszMHFvRHY9ISM6JCEwUHlfJls1L0YhIzkkITE4cU9bbycqUUIhIzokITI3MCVILEpWXzkhIzskITFXOi5SQmVNcyEjOyQhMlAiKT0tVzd4UCIhIzwkIjBiJ3BMKD1AaCQhIzokIjFZKj0yXko/NCkhIzskIjIya2omUTM2RjchIzskIjFzST4qND1yaSIhIzokIjJgIkgnKj4qKT47PyEjOyQiMFIjeWxdOSlSIyEjOSQiMSJlNG5JJnp1RiEjOiQiMXdFQSZbOW85JCEjOiQiMkxCMXEhKSk+OU4hIzskIjImeSIpUXFPZ3dRISM7JCIxVCdmOCtfTkIlISM6JCIxUUx0JD5oWGUlISM6JCIxam1JO15ASFwhIzokIjE4Wm5OKio+bl8hIzokIjEsR2dycEopZiYhIzokIjEvJj09cyJbQWYhIzokIjImXCZwcj46KFJpISM7JCIxNnJEXjo4XWwhIzokIjJOTVZiWkNSJm8hIzskIjFQNmQqemA4OighIzokIjE0WDtiSXRVdSEjOiQiMDcnM0okPSVHeCEjOSQiLy4kUVspejMhKSEjOCQiMSkqejhEbUclRykhIzokIjFfYnpQRkpiJikhIzokIjE3KXAyRDxCIykpISM6JCIxSyFRUVRYZDMqISM6JCIxNCV6d0xVZ00qISM6JCIxNzstKmZbT2cqISM6JCIxKHplY00nKiplKSohIzokIjFiUyZvZV03LCIhIzkkIjJCTl5NRWVrLiIhIzokIjFHZDp6OWNoNSEjOSQiMm8nUnQ7cmYnMyIhIzokIjEpUlcieSoqZjY2ISM5JCIyN3FaIylvLW04IiEjOiQiMnNAODBsTjs7IiEjOiQiMiQqUmFAMEZuPSIhIzokIjI0b3VRIkghPkAiISM6JCIxYU5FeHI9UDchIzkkIjJhPDg2Iz1naTchIzokIjIySkluKnA7KUciISM6JCIyXko+PTwsUkoiISM6JCIyRndXRkZAKVI4ISM6JCIxPD4hZiJHJWZPIiEjOSQiMS8hPi8tIUcjUiIhIzkkIjJgXkxqKmUlKT05ISM6JCIyPGZeWElfY1ciISM6JCIyL0hUcikqNEZaIiEjOiQiMmlgcCdvJkcrXSIhIzokIjFQcEJKbGhGOiEjOSQiMUVMXG42W2I6ISM5JCIybFhncl5HT2UiISM6JCIyR24yTUhqP2giISM6JCIxWi4iZSEpKXlTOyEjOSQiMSYzJGUnKW8hKXA7ISM5JCIyUG5iaiN5NipwIiEjOiQiMSxQK0Quc0c8ISM5JCIyZHlFP1k2J2U8ISM6JCIybS1sKCpvJ3kpeSIhIzokIjI6YFY5JilSIz49ISM6JCIxIkg/WkFqKlw9ISM5JCIyRCNHOyFmWjQpPSEjOiQiMjdMaEhLIz03PiEjOiQiMikpKkdEMGJsVj4hIzokIjItKzxkMGFgKD4hIzokIjFcUGlzUUUyPyEjOSQiMVc5RicpKnAkUj8hIzkkIjEsSnM7bmxyPyEjOSQiMi4iWyJIJHk1L0AhIzokIjIxSkUmNG5xT0AhIzokIjJsaE8leWtWcEAhIzokIjJpKls0cyxHLUEhIzo3YXEkIjI5VEFdUF8yWSIhIzokIjEuQUtERE8qUiIhIzkkIjItZEstJGVlTzghIzokIjJ3NlNQNzVCRiIhIzokIjE5SFQjKUdTMTchIzkkIjJ4ViM+WGxxUTYhIzokIjJkUWFMckshcDUhIzokIjEmNDVXd106KCoqISM6JCIxbnFfKVE2IUcjKiEjOiQiMSk0NGNwTmtYKSEjOiQiMS4sPTk8JUhsKCEjOiQiMVUmM05rJjQ4byEjOiQiMVtMOylIWUIkZiEjOiQiMWVzKlEiSGMyXSEjOiQiMmJISFxrJGZUUyEjOyQiMSlcdWtyJypcMCQhIzokIjIlSCN5Qm0sdzUjISM7JCIyQ01TdikpKj0tOCEjOyQiMXk8WD0jZnUqcCEjOyQiMnZaS1UjPUZLQiEjPCQhMiUzczIkcF0mKjMjISM8JCExYCwuYiIpUl1vISM7JCExdnhmI3AvSTsiISM6JCExOCRmI1IrInpYIiEjOiQhMVg2TiZSaHpMIiEjOiQhMTgkR3BLeSl6ISohIzskITJqOSVmK0pJSlMhIzwkIjEoMyRRJTQ4JHkkKSEjPCQiMXJiJEcpKXo9UyYhIzskIjFBNnUnXGskRygqISM7JCIyZF1KeDgrKSpRIiEjOyQiMnhzd1tEXm96IiEjOyQiMm0zNUhKcXQ+IyEjOyQiMlk2YnR6YUhmIyEjOyQiMmJPK3hBVlMpSCEjOyQiMUYmRyplZlNxTCEjOiQiMSQpRz9eNlxeUCEjOiQiMCZlW3ElXG03JSEjOSQiMTNcJSpHeUUmXCUhIzokIjJOd1opKSoqUm8mWyEjOyQiMVlLV2pqKjRAJiEjOiQiME1QXDA0dmImISM5JCIxaj4iZV4kRycqZSEjOiQiMTcsZUZOTUZpISM6JCIxIyk0LlZSIjNiJyEjOiQiMSMzS0hdLnAnbyEjOiQiMSRvW0AmKikpZTwoISM6JCIxT1AvcDQ1eXUhIzokIjElZWAsLTdSeCghIzokIjEyd19PZ3NqISkhIzokIjF3al8wKHB6TSkhIzokIjE9TUVPXjNGJykhIzokIi8pZilmT18sKikhIzgkIjE8dikpXDB1ciIqISM6JCIxMnY6JFshPlElKiEjOiQiMWAmSCgqZkI4cSohIzokIjEuUVVmP2VoKiohIzokIjJQYExGcVI+LSIhIzokIjEyJyozMCc9di8iISM5JCIyVzxdOTNOSDIiISM6JCIyMiplUEZ2QSk0IiEjOiQiMl5WbnpUS003IiEjOiQiMiVbWFErVWVbNiEjOiQiMiV5VChwQTpQPCIhIzokIjFaclFHZCYpKT4iISM5JCIyRXYiZUNRLkM3ISM6JCIyRk0oKSpwYkZcNyEjOiQiMiYqR1R2LTBZRiIhIzokIjIxdjNdT1crSSIhIzokIjJOTiY0bVJoRDghIzokIjJgL2olW0RMXjghIzokIjJBQCQqM0c8c1AiISM6JCIyPFcmWyMqUUcuOSEjOiQiMlpvanl3WSZIOSEjOiQiMmFdeVAtPmdYIiEjOiQiMlBYP1RjN0ZbIiEjOiQiMiJvcDE3IlEnNDohIzokIjIwLmAoPl8hb2AiISM6JCIyImYmenREQVVjIiEjOiQiMmonKnBcUScqPWYiISM6JCIyRl4lKjReTCk+OyEjOiQiMjdvbkZDUSFbOyEjOiQiMiV6PChRJFFedzshIzokIjI5I3AoUThpX3EiISM6JCIyNzhRYGEkR008ISM6JCIxMFpcIypwZGo8ISM5JCIxYnZLMCpSSnoiISM5JCIydSZ6cUAjb0gjPSEjOiQiMTI4TzRrMGA9ISM5JCIyWGpQJDN2UiQpPSEjOiQiMnksKW8kPiQpUiI+ISM6JCIxYGU5ZFEhWyU+ISM5JCIyVVhZZXFbZSg+ISM6JCIyJCl5O2IoZTUyPyEjOiQiMmMlWzliRGNRPyEjOiQiMTZ2Kik+Xj9xPyEjOSQiMjxdKCkqbyM+PzUjISM6JCIvYEZsLCpSOCMhIzckIjB0ME9kLWg7IyEjOCQiMmQlPT4mKjRNKT4jISM6JCIyMiQzdSZ6Km9JQSEjOjdhcSQiMiQ+OTE1QiY0WyIhIzokIjFwQig9KD14PjkhIzkkIjFyaztuIlxyTiIhIzkkIjJSNWVbJ3AmSEgiISM6JCIxMkpJdksvRjchIzkkIjJkaltwd0MjZjYhIzokIjI3dSV6S3pGKjMiISM6JCIyUiR6N0NxI3AsIiEjOiQiMVpqYmtGRj0lKiEjOiQiMC1iel03YWopISM5JCIwLXEpKilIMDp5ISM5JCIxaGkiKSlcSSlccCEjOiQiMXNiVnhZMklnISM6JCIxNnlpbjtUVl0hIzokIjIkSCczRWpNaShSISM7JCIyO0oyel1lXyNHISM7JCIyTFo/Ij4oPURsIiEjOyQiMWwvZmJZQ2ZyISM7JCIxTmlLaicqMzZGISM7JCIwOWxcLSs2KnkhIzskITJOPl1YIyoqKVw9IiEjPCQhMSIpR1FTPyhHayQhIzskITFAbkgkZStSLCchIzskITFmJGVyKlEiKWZzISM7JCExJDQkZk8hMzNiJyEjOyQhMicpKj07JFshW1xTISM8JCExMSN6WCN5JHpQJiEjPCQiMiVlYWEieTcmekwhIzwkIjFoWSJwRGYlR3UhIzskIjI8cklEQi48OiIhIzskIjJLI1EjKilSIio+YyIhIzskIjJfKmZ0XTIjRyg+ISM7JCIyLi5GITN0RyRRIyEjOyQiMicpKlI5c0w6I3ojISM7JCIxVSJIemBtej4kISM6JCIxZV1NSzdFKmYkISM6JCIxOjUwTCI9WipSISM6JCIxNCcpZlhURCRRJSEjOiQiMU9PM3JLMGtaISM6JCIxKGUzOmZlbDgmISM6JCIxJypvJClwT1crYiEjOiQiMTcxJUc9d2ImZSEjOiQiMV5GVVk4KT4/JyEjOiQiMHNwOigpMylSbCEjOSQiMW0kKj5FW0lwbyEjOiQiMV5acypcKXkhPighIzokIjEkeixaeExZXSghIzokIjInKSo+Ty5WRDZ5ISM7JCIxYTBadTw0NiIpISM6JCIxLk5DR21nLyUpISM6JCIwMi5ybnFBcCkhIzkkIjBVTjc+aFgoKikhIzkkIjBjIWUqNGM+RCohIzkkIjEkZUFnLklcXyohIzokIjBib3QtXlJ6KiEjOSQiMmBVV3Z3WmYrIiEjOiQiMlEsZkpuJj5LNSEjOiQiMio0PiEqKjQjPWU1ISM6JCIyJWV6dl8oW1IzIiEjOiQiMkM/IXAzY2A0NiEjOiQiMjpFMT16ISlcOCIhIzokIjFLOjd4L0tnNiEjOSQiMSRbdlAjKSllJj0iISM5JCIyT1VRIlF6IjNAIiEjOiQiMmMnZlRteS5PNyEjOiQiMllGZl9odzdFIiEjOiQiMSRvd3c+Z2xHIiEjOSQiMSk9ci5xNz5KIiEjOSQiMi8+UXdPY3RMIiEjOiQiMllEZmlwNkhPIiEjOiQiMmU7JFxOdmYpUSIhIzokIjIySERqPUpXVCIhIzokIjJvKip5WFxHL1ciISM6JCIxLj9GTFJnbTkhIzkkIjJqI0drcTEoSFwiISM6JCIyeW0pW0AxYT46ISM6JCIyQTdeMltDamEiISM6JCIyVCtvJlI8THQ6ISM6JCIyeE4nPiZvcTBnIiEjOiQiMmMkZUIoUVshRzshIzokIjFjRVJ0MXhiOyEjOSQiMi95KmUpNFVQbyIhIzokIjInW1NgNmYnPnIiISM6JCIyeFsoKkctVy91IiEjOiQiMV5YMnpwPHA8ISM5JCIxKiopb10lUjspeiIhIzkkIjI4Jj1bKnAtdSM9ISM6JCIyd0VtUWsqKW8mPSEjOiQiMjhhQ3ojKT5tKT0hIzokIjJuTj03KnBlOz4hIzokIjEuKG83aSR5WT4hIzkkIjJ0Wyo+RjU/eD4hIzokIjI5K151VUh5KyMhIzokIjF3XGVcIWUnUT8hIzkkIjIoKj5OKVJfbnA/ISM6JCIxVjQkKXombzM1IyEjOSQiMkIoKUh5K0RBOCMhIzokIjItW0k9JTR0akAhIzokIjI5W3Q/U3NgPiMhIzokIjIvI2VtSV44RkEhIzokIjEjNFpqcS8hZkEhIzk3YXEkIjIvbWR3VCVbLTohIzokIjJzOydRQC1pVDkhIzokIjJiVEkmPXpGejghIzokIjInKXA1MDg/YEoiISM6JCIxLl1ceT1lXDchIzkkIjJoWENbdGk9PSIhIzokIjJrTWUzImYiPjYiISM6JCIyOEQjUU9FVlI1ISM6JCIweiRSJUghPlMnKiEjOSQiMV8vO2daZ14pKSEjOiQiMV48MGRAa0AhKSEjOiQiMTllImVVPDE5KCEjOiQiMkRsOSh6RkslPichIzskIjEvaGVSNGdnXiEjOiQiMWspekA4MkErJSEjOiQiMShmSzlvKCo9bCMhIzokIjExVjV2MzIwNSEjOiQhMSVIM0AieihlUCYhIzskITEkKkdpK3MrKHAkISM7JCExXkBMKT0jW2xKISM8JCIxWT8hZVt2JWZMISM8JCEyREIpcDNGYVlWISM9JCEyJ3BcIz1wUHpgIiEjPCQhMlpPKXAsJlJwNiMhIzwkITFuQ2A0OkxFOyEjOyQiMiNSTnYkKlJdbEchIz4kIjIwInlnd0N2NUUhIzwkIjF2W0pAKHB1ImUhIzskIjBMblliU1lVKiEjOiQiMilHVSEpZiZHJEg4ISM7JCIyYDMtXFQyT3QiISM7JCIxUEwwMnczXEAhIzokIjI7W1t6cm4yZCMhIzskIjI7WStgQy9XKkghIzskIjFQQ0sleU1rVCQhIzokIjIlKUhzek0mKlIkUSEjOyQiMXp1PiNlNlxDJSEjOiQiMk49KVFIJVJ3ayUhIzskIjEoZmYwN3I2LyYhIzokIjEqRyhcbChIXFUmISM6JCIxMltwKW9wJyl6JiEjOiQiMWgwN243UmloISM6JCIxaVhMTEZGO2whIzokIjEmWzZPJ3loZ28hIzokIjFbTW4kKXAiZT4oISM6JCIxIls1elY9Ql8oISM6JCIxYlYlKVt6Z1N5ISM6JCIxNFUvb1A+XiIpISM6JCIxSidlNysnZmElKSEjOiQiMCd5IVIhKlE4dikhIzkkIjFOOzBxXyU+LyohIzokIjEpUm1fR0twSyohIzokIjF0a18nUjNvZyohIzokIjEkSDJkKTMyIykpKiEjOiQiMl5iITMkUj9gLCIhIzokIjFbJVE1cW4/LyIhIzkkIjI5J1wjZk4lXG81ISM6JCIyQVQkPSMpUmslNCIhIzokIjIjKSlwdShRZTA3IiEjOiQiMiV6dDIkW3hpOSIhIzokIjJZYkJzQFI9PCIhIzokIjJheCQpPmB6cz4iISM6JCIyS2E3YExLRUEiISM6JCIyJm9OdiVcSHpDIiEjOiQiMjkuMDUmMz90NyEjOiQiMm1FWzNEdSUpSCIhIzokIjJBJ1FyKGZ2UEsiISM6JCIyKikqXEI8KkciXDghIzokIjJIR1xWVmNYUCIhIzokIjFzIlJ6bHkrUyIhIzkkIjInej9xb1dyRDkhIzokIjJNLVJmPyJbXjkhIzokIjJLOFMjXFpSeDkhIzokIjFyXmYiZnBNXSIhIzkkIjJVJ2VALCo9KEg6ISM6JCIyYVhmLWRhaGIiISM6JCIyQWw9J1xzeSNlIiEjOiQiMW0+Iypwamk0OyEjOSQiMi44MSlcLG9POyEjOiQiMlpuQ0xmYlJtIiEjOiQiMXM+K3olZTlwIiEjOSQiMSYpPl1WTD4+PCEjOSQiMlotVEpZanJ1IiEjOiQiMjIiSGBPM1B2PCEjOiQiMiVbT19yaCJRIT0hIzokIjIlSEFGeikpXEs9ISM6JCIxZU8qeTI8OSc9ISM5JCIyOi1OdmduMCo9ISM6JCIxJilROWVnJSo+PiEjOSQiMSlvXDAib2FcPiEjOSQiMkFrXTM0aiR6PiEjOiQiMlY4OXYuKFE0PyEjOiQiMTthMyF5NCdSPyEjOSQiMVt4KHpfQCsyIyEjOSQiMU8qKlxuO2grQCEjOSQiMkNWcF0nKW84OCMhIzokIjIkcCplVzwiR2lAISM6JCIydj9DZjlPTD4jISM6JCIyRWlZXiQ0X0NBISM6JCIybk4lMzVDI2VEIyEjOiQiMThvLmFzQShHIyEjOTdhcSQiMmxoc1U9d2BfIiEjOiQiMkpzbTIzVlxZIiEjOiQiMk86ODBoPElTIiEjOiQiMk0pSDlNelhSOCEjOiQiMmRHKik+eCQ0dTchIzokIjAqZlZeIz1uPyIhIzgkIjFKQ3UiW3dxOCIhIzkkIjJGZTpYLVxbMSIhIzokIjFiTCNHbXFpKikqISM6JCIxSEcrc1Z0MyIqISM6JCIxJGY+NXQhZXkjKSEjOiQiMWBiPlUuVyZSKCEjOiQiMXc+QWZDcFZrISM6JCIxJ3omM085I3lSJiEjOiQiMWgyPmotKjRAJSEjOiQiMlZlVjQmWykqekYhIzskIjEmPjlLYzdLJnkhIzskITJ4Q0ojKik9ZiR5JCEjOyQhMSdmOVkmMzxuZiEjOyQiMVchUXgpPSQ+UyIhIzskIjInKkdoJylcYElAJCEjPCQiMUxtXCl5ZHEyJCEjOyQiMSJHLHJXPVxPIyEjOyQiMmVsSEM+WS4oPSEjPCQiMkdISkRpQk4yIyEjPCQiMWM/ay5nWXVKISM7JCIxJ1x6XStDPTomISM7JCIxPDlsXWsoKXB5ISM7JCIxMyIpcDNwdjs2ISM6JCIyXj4qPksiPioqWyIhIzskIjJZJTQ4aTQ/JSo9ISM7JCIxeiQ+O1xyIz5CISM6JCIyQVpTXFYua3YjISM7JCIyeEZEX3B5JCk+JCEjOyQiMSJ6OmBfKltSTyEjOiQiMShmIj1CKXphMiUhIzokIjFUZzR3SVEuWCEjOiQiMU1BbnhDSEBcISM6JCIxV0leJXk7IkdgISM6JCIyYkZ4Pj1nTHMmISM7JCIxKWZgckNWcDUnISM6JCIxcyYqejtxMXprISM6JCIxTGk7I2Y5LCVvISM6JCIxIz4nKSo9QmUhPighIzokIjFXbkJ5Ry5KdiEjOiQiMUBATmdSMWl5ISM6JCIxOy1fNHhHJT0pISM6JCIxWUpRYHVKKVwpISM6JCIwdHlfRmZaISkpISM5JCIwS0lQdjFVNSohIzkkIjEsWlVReEIoUiohIzokIjBALSM0Q1QlbyohIzkkIjFkUEhBQEZtKiohIzokIjJjI3lGc1FMQzUhIzokIjIoelgvNzloXjUhIzokIjJoXUgxKzMmeTUhIzokIjJOVDlUd3BdNSIhIzokIjFAWFdvMk1KNiEjOSQiMmtUa2IranQ6IiEjOiQiMic+MGQkUXdKPSIhIzokIjIlNEpcQSg9KTM3ISM6JCIyTEtYd3ZEVkIiISM6JCIydi0oUV82dGY3ISM6JCIyOT5XPF9tXUciISM6JCIyREIhcG45TzU4ISM6JCIydSlcN0VPa044ISM6JCIyMG1vWnNRNE8iISM6JCIyO3YxL2xxaVEiISM6JCIyRzVfS19oO1QiISM6JCIyTD8icHY8OFA5ISM6JCIyI0dRUkstcWk5ISM6JCIyV2oxKCk9JVEpWyIhIzokIjFsKD5XWyo+OTohIzkkIjJuKilvLmRnLGEiISM6JCIyJEhpKGVjIUdtOiEjOiQiMlUlW3AwOGQjZiIhIzokIjJuVltlUFYhPjshIzokIjJ2ISopXFFocVg7ISM6JCIxWnZuWXhjczshIzkkIjJqPlEuOk4nKnAiISM6JCIyW10pcCY0OXBzIiEjOiQiMXZTPz8iNFd2IiEjOSQiMk5ZbWNhQkB5IiEjOiQiMjtpJz1zJWYrIj0hIzokIjE7cFF2eEBRPSEjOSQiMSRIXyM0IilmbT0hIzkkIjEpKWZhOyopPiYqPSEjOSQiMW1TTVt1LEM+ISM5JCIxbWB2JHpcSSY+ISM5JCIxNCYqUT80SCMpPiEjOSQiMU9aakRadDY/ISM5JCIyYCJlTCk0dTgvIyEjOiQiMk9SVSsqND9yPyEjOiQiMVFuayVcMTc1IyEjOSQiMTIiZVwkNFFKQCEjOSQiMk9JdVgmUnJoQCEjOiQiMSg9NExoJT4jPiMhIzkkIjIkKkg4V1s2R0EjISM6JCIyLmp1PXZfTkQjISM6JCIxJ3AnPjFqUyVHIyEjOSQiMjpvM3MkKWZgSiMhIzo3YXEkIjIkb2RQdHpqXDohIzokIjIpKlEoUi5ZdipbIiEjOiQiMipIYjBGb1FHOSEjOiQiMiNRJlxBQCVSbDghIzokIjJNX1hrOjQxSSIhIzokIjI4aCZ6eCVIUUIiISM6JCIyKm8qeUlAM1s7IiEjOiQiMjEnb094IlJLNCIhIzokIjJLJilSMShldD01ISM6JCIwNCRbU2EqelMqISM5JCIxVSJlIWUoKW8oZSkhIzokIjElMykqPTpydHIoISM6JCIxZWplWVo0JXknISM6JCIxciZ5W1QlXG9kISM6JCIxRzVsQkxUU1khIzokIjFQZXpAVVxhTCEjOiQiMnNEOEMhPkgnKT0hIzskIjFoaCdwSWdOYichIzskIjFNWGhRdWRcYiEjOyQiMXouelx1PUR1ISM7JCIxQylIa0J3PiF5ISM7JCIxVlh4WWxuITQoISM7JCIxVDhIUSNHQysnISM7JCIxZik0I0dcSzZeISM7JCIxcHc0S10icCRbISM7JCIxeWk7bldsRGEhIzskIjBsInppcmRccCEjOiQiMGJUOlg3aE0qISM6JCIyOGAyVDJrIVs3ISM7JCIxTjozOCgzKD47ISM6JCIxQjQlZWprVS4jISM6JCIyO25kIXpJa3hDISM7JCIyJVErXj8qXHUkSCEjOyQiMXJMbih5aU1TJCEjOiQiMi8nMy9uOyl5J1EhIzskIjJEaHBSREdfSyUhIzskIjFZKXpvYyQpPnglISM6JCIxXyopW1UnR2g/JiEjOiQiMUE/SEM6ckVjISM6JCIxdHQiPmknXExnISM6JCIxIj14bWkwblUnISM6JCIxX1xlTHMkbyFvISM6JCIxJVFcLiRwYXVyISM6JCIxJCkzTCVbcDBgKCEjOiQiMWNcbWgvbnZ5ISM6JCIwR0FBKW9oNSMpISM5JCIxNlx5Iz1naGApISM6JCIxLzUiPSNwLWApKSEjOiQiMUJeKG9COT47KiEjOiQiMTorSkoiKVtqJSohIzokIjEzYTFyTFFlKCohIzokIjJkVS5LVT9aKyIhIzokIjE6dldqRDBMNSEjOSQiMjI4LyJSJSopMzEiISM6JCIyKW91ZVRJRykzIiEjOiQiMk9ZIik9eSNHOjYhIzokIjIvVCVvJmVOPjkiISM6JCIyVCVIWHVmR282ISM6JCIydylRRk1oUCU+IiEjOiQiMnBvSWEoZkM/NyEjOiQiMk1zLWY9TGZDIiEjOiQiMm1hKz9HdDlGIiEjOiQiMio+IzMhZicqKm9IIiEjOiQiMm4nKWZUa1ZBSyIhIzokIjJCbCRmYFhgWjghIzokIjJ5N3FUdip6czghIzokIjJPLngtdGshKVIiISM6JCIxJnBHXTpgTFUiISM5JCIxN3Bsa3BvWzkhIzkkIjImUkhVTWszdTkhIzokIjImKVElM2EtZCpcIiEjOiQiMkZKUjNnYl5fIiEjOiQiMmhyUng/ZTNiIiEjOiQiMjR2LGVVI3B3OiEjOiQiMihlP1R5N24tOyEjOiQiMngoSDUybCEpRzshIzokIjI7PC4kMyczXmwiISM6JCIxY0lBaG9lIm8iISM5JCIyayJwY1okXCMzPCEjOiQiMjoyVFUnSDVOPCEjOiQiMjokPWlJTTppPCEjOiQiMkIpeUIjSDAlKnkiISM6JCIyQihvKkcjPidvIj0hIzokIjFQOU1GYl9XPSEjOSQiMng2Zms5KFJzPSEjOiQiMlUwL3Btdy8hPiEjOiQiMk9tSm4kR3dHPiEjOiQiMjxzPyQpR2BzJj4hIzokIjEjeSNbcFglZik+ISM5JCIyJHArRSQ9S1ssIyEjOiQiMkV0N2xqNVIvIyEjOiQiMi5cOnFcdEoyIyEjOiQiMnQ3UyVlTWgtQCEjOiQiMnUiekk3Q0FLQCEjOiQiMnNka2RfIio+OyMhIzokIjJYJFwnUUs2Pj4jISM6JCIxdWgmXHhyPkEjISM5JCIyIypcOXhQaUBEIyEjOiQiMlFeOSVbQVojRyMhIzokIjFaYTMyLSpHSiMhIzkkIjJWJlJLaFtTVkIhIzo3YXEkIjJWNCN6NERFdjohIzokIjJRKHlMZXAvOzohIzokIjIjKUhxW1N3YFgiISM6JCIyXlhlSkM8SlIiISM6JCIyJVsiSE0iPTZIOCEjOiQiMiM9XWgnZnNKRSIhIzokIjJubyhROlkyJj4iISM6JCIyaEQ6VFBYWDciISM6JCIybjY/TVdeNzAiISM6JCIxY0UiSEkxeXUqISM6JCIxaUV5dyoqPVkqKSEjOiQiMWNTLz1UQywiKSEjOiQiMSJcUCZRdDMwcyEjOiQiMWxqJXpWOylbaSEjOiQiMXYib1InSG1EXyEjOiQiMTcwYmMlNFo5JSEjOiQiMi5NJ3AkSDNzMiQhIzskIjEzQXIiKWYxRUEhIzokIjJiJW80bVg+aDwhIzskIjJRYSxTLTBIYCIhIzskIjIvU3olemglcE0iISM7JCIyZE1GKSlcJ2ZYNiEjOyQiMVVqMSVldXlUKiEjOyQiMShwM0RJc2hxKCEjOyQiMTBeWkFybTFuISM7JCIxREoncHksJj1uISM7JCIxbD85X0w+ankhIzskIjIvOnFdRGsiMzUhIzskIjI4Jz4iKW8ieTdLIiEjOyQiMkQpZlFUJCp5MTwhIzskIjFXclEyanlYQCEjOiQiMlpdO0dhYio+RSEjOyQiMnZdWiNvXnE3SiEjOyQiMjksXk1RTjBoJCEjOyQiMjBONiNRXW4uVCEjOyQiMjAheXpnbyJlZSUhIzskIjFLIkctaHBMMCYhIzokIjFoXDphUGsvYiEjOiQiMHAzOTB5IlJmISM5JCIxcDd0a09EZGohIzokIjF0VE5xLmRmbiEjOiQiMmxqMW15VHE5KCEjOyQiMTRQOUc1bj92ISM6JCIxc2t5UCJ5OSl5ISM6JCIxYS1JKHpmL0IpISM6JCIwR0EzbG8mbyYpISM5JCIxImUuKlFVcScqKSkhIzokIjE7WGojZTVkQCohIzokIjFfW20hUnhqXyohIzokIjFbIls/MlYlSCkqISM6JCIyJikpM3RbKWZELCIhIzokIjImXFMtJDNcOi8iISM6JCIyPG4nR0pGKCpwNSEjOiQiMldwVSVceSl5NCIhIzokIjJFWDAmPiJbYDciISM6JCIxdCtFKjQvQzoiISM5JCIyO3E/TFYuIno2ISM6JCIySmx3LS4iXDA3ISM6JCIybktUOEA0O0IiISM6JCIyKVt5LU95XGQ3ISM6JCIyQyVRNjVXPiRHIiEjOiQiMk1qYzE9TSgzOCEjOiQiMiUzUTtBLTpNOCEjOiQiMnRwcnNedCVmOCEjOiQiMXJQW01JdCVRIiEjOSQiMnkkXHIvZSYqNDkhIzokIjImKlw7dypwO045ISM6JCIyL1pkeioqKlFnOSEjOiQiMl91VjxbWWNbIiEjOiQiMm8uJEgiXGM0XiIhIzokIjJ0Vm4iMyZRamAiISM6JCIyZmUuRl80PWMiISM6JCIyPSopbykpNCZRKGUiISM6JCIyN1QoSEwlekloIiEjOiQiMUUqKWYyYSEqUTshIzkkIjI4Y2hManVbbSIhIzokIjBSXScqWygqNHAiISM4JCIyN1o0SzokRzw8ISM6JCIxajkoPmlSUHUiISM5JCIyd2JSR3R0LngiISM6JCIyOSwzXTwiPih6IiEjOiQiMm16Ny5dJz5DPSEjOiQiMmosVUE4JFJePSEjOiQiMlBCI0d2THl5PSEjOiQiMjtJTGlVb2ohPiEjOiQiMi9oKCoqKVFbVCQ+ISM6JCIxTjg6JUhBQCc+ISM5JCIyJik0XVY3KUchKj4hIzokIjFObEtZR2s9PyEjOSQiMmNdPypcQz1aPyEjOiQiMiVcP0UlKj4hZjIjISM6JCIybygqPTRtJnovQCEjOiQiMkVwUk4ibyZROCMhIzokIjFXKXlLMXlJOyMhIzkkIjFWcDRSOFgjPiMhIzkkIjJDNSEpPSd6Jz5BIyEjOiQiMil6UkJAKD07RCMhIzokIjIvaGxQJlJSIkcjISM6JCIyWDR1O2kkRzZCISM6JCIyTks/MFJ4N00jISM6JCIyWiQqSF5xazhQIyEjOjdhcSQiMm5CRyhcYEEtOyEjOiQiMiY9eGUiMyJ6VjohIzokIjI7VEB5aF1SWyIhIzokIjEwN1Q5O2VBOSEjOSQiMkEqR2oiM1UmZjghIzokIjI4JD1CX21tJUgiISM6JCIyXDRgX0NpeEEiISM6JCIxclAwJUcuJ2U2ISM5JCIxRG9qdXEjcDMiISM5JCIxIlw5YTJKQywiISM5JCIwbHpGKGV3WiQqISM5JCIxJFxhJylwLmhgKSEjOiQiMCUqek8mNEwnbyghIzkkIi8lUl8jeSZ5eichIzgkIjEvXT92bzp4ZSEjOiQiMlhJeCxJLnolXCEjOyQiMUdXZ2lhc2xTISM6JCIxbm5gYDUzOUwhIzokIjJ5R052SF4+dSMhIzskIjJEZnlOVD0qM0IhIzskIjJqIz15b3ooKlE+ISM7JCIyRksyVXBYdmUiISM7JCIxRCNvZCg+P143ISM6JCIxNjVVa1A0dSYqISM7JCIxUkcwJSplYEt2ISM7JCIxT1w/JCo9XVhvISM7JCIxZWdzMWllJ28oISM7JCIxIzNgaCNIaiwqKiEjOyQiMkV3MTh4UEBLIiEjOyQiMlV3MFgvXi91IiEjOyQiMllqR2wrOUNBIyEjOyQiMSdbJVsuJkhVdSMhIzokIjIlSHNLTiNITkckISM7JCIyJzQheUN1KSlHI1EhIzskIjEqKnlxKVw+NE4lISM6JCIxQCkqM3huSWhbISM6JCIxPF1qXk1CXmAhIzokIjFycj8oKXksP2UhIzokIjF4LW5oKHAib2khIzokIjE3YW12SSFvcCchIzokIjE7PVtGUkgyciEjOiQiMSwxaXMvNCx2ISM6JCIxaTY0VUdoenkhIzokIjElKUclUWYvVUMpISM6JCIxLiNRRyJINidmKSEjOiQiMVFtdU9WW08qKSEjOiQiMSMqKipwUyVvakUqISM6JCIxKG8uNEBEbmUqISM6JCIxTkAvV1BWKSopKiEjOiQiMjBdUTI1SS0tIiEjOiQiMmpFaEErMipcNSEjOiQiMSpIdyI+RiUqeTUhIzkkIjJOKHAzbzNTMjYhIzokIjJRU10jKWVTYDgiISM6JCIyKSk+W0orPEc7IiEjOiQiMiV5LzcyOykpKj0iISM6JCIyRDNwdWUjZTs3ISM6JCIyJnB3PiM0bEhDIiEjOiQiMnkxYUdYciFwNyEjOiQiMl8xOTVQVFxIIiEjOiQiMnkzRGYyNzFLIiEjOiQiMihmMnlmJT1oTSIhIzokIjJCPWZnPiRccjghIzokIjBeXWAlb3cnUiIhIzgkIjJ6bFJAJnonPlUiISM6JCIxUVI2Tko3WjkhIzkkIjJkOF1GPGRBWiIhIzokIjEqRz1fMyRSKFwiISM5JCIyPDRPSUBfRF8iISM6JCIyUCM0ViNIYXhhIiEjOiQiMmRVQnFfPElkIiEjOiQiMTskUV9sZSQpZiIhIzkkIjJpLXBGLCR6QjshIzokIjI9R2clKmVNJFw7ISM6JCIyOCUpMywzJypcbiIhIzokIjJ1I1sqKUcqKXkrPCEjOiQiMkNTPnVPQm5zIiEjOiQiMig+SmhZJTNHdiIhIzokIjBGb0kxXyF6PCEjOCQiMUdhaCEpNFkwPSEjOSQiMidHLj5bMy9LPSEjOiQiMSx4PzppemU9ISM5JCIyPD9rZGFJZCk9ISM6JCIyc1tHSUJZRyI+ISM6JCIyVypIOTpZOVM+ISM6JCIyLmpqUSpmaW4+ISM6JCIwXjNxbCpHJio+ISM4JCIyODYnZTBSOEI/ISM6JCIyPWVSaTNjNjAjISM6JCIyM08iUkhFTno/ISM6JCIxcFdAJDQ+eDUjISM5JCIyKVFwSTgtRE9AISM6JCIyN0I6eCYqUlw7IyEjOiQiMiM0MXYnZSJ5JD4jISM6JCIxPWkob3JuRkEjISM5JCIyTFg7eVEhKj1EIyEjOiQiMVFmJj44VDZHIyEjOSQiMXpEMFg1XjVCISM5JCIxJz4mR2QzKipSQiEjOSQiMmwwKG8uNWRwQiEjOiQiMkQncDIkcFQjKlIjISM6N2FxJCIxL0B4V2lbSTshIzkkIjEyLypSbVFIZCIhIzkkIjFuZCJHNl1TXiIhIzkkIjI6LnlpajdQWCIhIzokIjFEVnpUTyE9UiIhIzkkIjJNKlwiKXBVPUc4ISM6JCIyY2hqQz8pcGk3ISM6JCIydyZwPV87PCY+IiEjOiQiMkYpPV1YZ1RENiEjOiQiMSxid29rQmA1ISM5JCIxdnRDTi9fJXkqISM6JCIwdXFqWy8lNCEqISM5JCIwVUImcHlIMiMpISM5JCIxJzRML0FxPFEoISM6JCIxcyJIPShleVVsISM6JCIxOkUhXEFcM3ImISM6JCIwJFJqNmdzPVwhIzkkIjFlWFxXRUstVSEjOiQiMVZQIylvKHoieU4hIzokIjExMTQhcCskSEkhIzokIjJMMihbUSNIJz5EISM7JCIyKEhedDtFVj4/ISM7JCIyQ29HJDNJbUA6ISM7JCIyN3pCUCQ0eWE1ISM7JCIxdU4qeicpZiJbcCEjOyQiMU12J28pKmYmemAhIzskIjFkKUhVTjw4NychIzskIjE9W1RSVEJGJykhIzskIjEjKkhrS14lb0IiISM6JCIyX0FQdmN2K3IiISM7JCIwXClHbXlUZkEhIzkkIjI7cUhuQU0+JkchIzskIjI5SkBXQGZgWCQhIzskIjFQNGpdKUd1LyUhIzokIjE3WVNBN1E7WSEjOiQiMXUpPnBdK3c6JiEjOiQiMXN0N1EhRy9uJiEjOiQiMSQqKlsqWyc9aDonISM6JCIxVidcJlwnPm5oJyEjOiQiMUxsQnhYXWFxISM6JCIxUnBAa2RxcnUhIzokIjIlekQoKT0pKlJxeSEjOyQiMW5XJ3AhKW9DRCkhIzokIjFOMl0tdmY+JykhIzokIjEvaV5wbUd0KikhIzokIjBqYyV6QihbSiohIzkkIjFkVyJmXFliayohIzokIjFwJFFCMndqJyoqISM6JCIyYmRPTTJLeS0iISM6JCIyaFoqM3laQWU1ISM6JCIxWGJyMFgqeTMiISM5JCIySD1yJXpKInA2IiEjOiQiMk94QWt3WWA5IiEjOiQiMkN6ZCNIZ0R0NiEjOiQiMmEhKVwhW3JwKzchIzokIjJgSihITEFzRjchIzokIjJQLEwpWyh6VkQiISM6JCIyKCkzZTEnW3IhRyIhIzokIjImellVRChwbkkiISM6JCIyMHQwLXQkZUs4ISM6JCIxMiZbTHAkPmU4ISM5JCIyKUg0ZU1TaiRRIiEjOiQiMlEiKio0QHAkKjM5ISM6JCIyKCl5IzQmUktUViIhIzokIjFueisoW1sjZjkhIzkkIjJPeSgpeUo2VlsiISM6JCIyNF4qPiQ+WCQ0OiEjOiQiMSMqKVspKm9zVmAiISM5JCIyKWVfVlBaVGY6ISM6JCIydFQ0VnAhXCVlIiEjOiQiMkVCQyc9JT0nNDshIzokIjJZNz5WTDlbaiIhIzokIjJhYVg9XCQ0ZzshIzokIi8pM01pcGFvIiEjNyQiMiVcbGIjPmI0ciIhIzokIi90MVE5Y088ISM3JCIxLkdFNyUpSGk8ISM5JCIyeGhsUyx2Iil5IiEjOiQiMVRxSzwhKj45PSEjOSQiMiNlRjkmNHguJT0hIzokIjIpZSVRNSVbcm09ISM6JCIyIyopSC4peTtLKj0hIzokIjFtU21FaykpPj4hIzkkIjJlaCczQmlzWT4hIzokIjJBeEQkUXd0dD4hIzokIjEmPilvXDYjNCsjISM5JCIxV0NAdmlGRz8hIzkkIjIlKnB6PWcsZTAjISM6JCIxWCk+Ij1bXCQzIyEjOSQiMlFZWDR2Xzg2IyEjOiQiMiYpSFF5U3IkUkAhIzokIjIpNCY0TC1ZdjsjISM6JCIxUmQnKTQ2KGU+IyEjOSQiMiMzXyVIXlNWQSMhIzokIjFAeENwdSVIRCMhIzkkIjEqSHR4bSVvIkcjISM5JCIyakQzR0pXMEojISM6JCIxLVswKT09JlJCISM5JCIxSiMqM0B4Zm9CISM5JCIxVjpOWlN4KFIjISM5JCIxKSo+IkgyUXFVIyEjOTdhcSQiMjhvQ0s/IioqZjshIzokIjJWTSEzbF1VLjshIzokIjJkKkc8IzQnZlg6ISM6JCIxV0BeYUNUJ1siISM5JCIyZjhfL2tzZFUiISM6JCIwdEFMZ2xOTyIhIzgkIjJEa0lCLnMnKkgiISM6JCIyXiEqKmU7eCdSQiIhIzokIjFLKipmMjJMbTYhIzkkIjJITk86Q2JtNCIhIzokIjJRYSRSPHUoWy0iISM6JCIxamAtKFIwLV4qISM6JCIxb0p0YCkzRnYpISM6JCIxSCkzbiJ6IzQpeiEjOiQiMWZaZnRPci5zISM6JCIxPnVATl4wTmshIzokIjFbIipbQVdmI3AmISM6JCIvWXRRbmQiKlwhIzgkIjImbzdvSCxxTlYhIzskIjIoPVU9NVcoPnIkISM7JCIyLndhWnB1WTQkISM7JCIxdkdrMEZmYUMhIzokIjJpbGMrXyYqKnA8ISM7JCIyJHpsWjJSIT0wIiEjOyQiMV4+VDktbyI+JSEjOyQiMT5JSFZ0Pj45ISM7JCIxM0Y+cWd6SEchIzskIjFWVW4pKnpaIT0nISM7JCIyT2UicCk0cjwwIiEjOyQiMmtRXi0kUj0sOyEjOyQiMnNKND5gWk5EIyEjOyQiMmJUKCpmRSsyJkghIzskIjJqSEAuIT5RU08hIzskIjIwWWtbKmZEJ0glISM7JCIxTmU9WCMqPjVcISM6JCIxPUY0ZSN6RFsmISM6JCIwazAlUXAobywnISM5JCIydilHRSMpKlF0XichIzskIjFcc28/WzIpKXAhIzokIjFhRFBPPndLdSEjOiQiMUclenJSImZheSEjOiQiMU1zQF00SWMjKSEjOiQiMSQpXHheVUJTJykhIzokIjEjPi8vWi0lMyEqISM6JCIxVlsnWykpUkRPKiEjOiQiMSVRX0hGXlRxKiEjOiQiMl9pTF43Yk0rIiEjOiQiMGwqR18nKltONSEjOCQiMkNwZmFAQG0xIiEjOiQiMiopXHJRSFRwNCIhIzokIjJyZDpZMktsNyIhIzokIjJKenFGJ3lZYjYhIzokIjIoZkk2R2kiUT0iISM6JCIyNmNPJlEqUTtAIiEjOiQiMlhLazJzIyoqUTchIzokIjJeXDg3KSlIZkUiISM6JCIyY1MkcDgpKVwjSCIhIzokIjJpVWBjVFcoPTghIzokIjFhb3FJJTNaTSIhIzkkIjJSaUU+dEgvUCIhIzokIjJaZHF4YldmUiIhIzokIjFkcko1bkdAOSEjOSQiMlBUd09zKFtZOSEjOiQiMCYzIiozcWRyOSEjOCQiMWw/XSEpPmUnXCIhIzkkIjIiPU9IbyJHOl8iISM6JCIyQ3AtekpSa2EiISM6JCIxQGMhPVtQOGQiISM5JCIyWHJgRTVWaWYiISM6JCIyO2lkKSozdjZpIiEjOiQiMlgiSDMhKjM6WTshIzokIjBRPT9iJz1yOyEjOCQiMiYqWyxjeSdIJ3AiISM6JCIxQDAhZSwmXEA8ISM5JCIwWVg1ViR6WTwhIzgkIjIocFRYRUk/czwhIzokIjElSCo0VU90KHoiISM5JCIyViJ5bycqUlJCPSEjOiQiMUpEOzw8Plw9ISM5JCIydyF6J1tPTF4oPSEjOiQiMmF1USFmV0EsPiEjOiQiMSp6ZSUpXHB1Iz4hIzkkIjJLRCE+Iyk+KFEmPiEjOiQiMihSKSpHSVdWISk+ISM6JCIyJ3o9UzAlZXIrIyEjOiQiMkFQYWdgV1MuIyEjOiQiMihHX1FVRDRoPyEjOiQiMnQieSpbRSwkKTMjISM6JCIyeVEmcCdwb2M2IyEjOiQiLzJbPj8+VkAhIzckIjJjb1FNa24zPCMhIzokIjJgPGE0RCJwKT4jISM6JCIyaSk0J1IleWxFQSEjOiQiMjI7elh6aFpEIyEjOiQiMUMoeSYpKm8qSEcjISM5JCIyJHlWNkprTjZCISM6JCIyKSoqeTUvSyQpUkIhIzokIjItMDlZaT4lb0IhIzokIjIlbzFcYHg1KFIjISM6JCIyMUUtUE8qKWVVIyEjOiQiMUNnaCgqZnZhQyEjOTdhcSQiMk5SSCkqKVxuIXAiISM6JCIyLTclR19GPE47ISM6JCIyKUhcdTJeXHk6ISM6JCIySnVAMiRvYz86ISM6JCIyKm9TOUl1SWg5ISM6JCIyOXpoV2JLMVMiISM6JCIyQyFlNjFvWFE4ISM6JCIxL24vZykpcHU3ISM5JCIyWGQnM3YtSDQ3ISM6JCIyYChlKVExIT5VNiEjOiQiMWAsNVN5U3Q1ISM5JCIyOnVTZW9RSSsiISM6JCIxJlE6XW83SkoqISM6JCIxLGtDQXNWJ2UpISM6JCIybFszVWhRbyZ5ISM7JCIxYVc7c0F6S3IhIzokIjFcP2whZXdIVSchIzokIjFvWGMqSCdlS2QhIzokIjI6aV9QWil6ZV0hIzskIjJPPDsvLXd3USUhIzskIjIuXiZmOCY0TnAkISM7JCIyTzNrWyhlSlFIISM7JCIxW25QUUtebj8hIzokIjI7I3BOJEdHVisiISM7JCExUi0kSDxuRFojISM7JCExZVs7IVsleiVbKCEjOyQhMm5pIj5weSEqUT4hIzwkIjJhMkhXIjNvTUghIzwkIjEpUjF3N2MyVCghIzskIjF3QicqPkkiKXo4ISM6JCIwSjwubSlmMEEhIzkkIjIkZTZDbEkoPjEkISM7JCIyWjNaVmZ3QCdRISM7JCIxYVglNC0mRyllJSEjOiQiMTddJEd2PWdDJiEjOiQiMSpvUCJmP3RYZSEjOiQiMGhOKmZRNyhSJyEjOSQiMmwhZSIpKnoyIzNwISM7JCIxVnJ0MGNSJlEoISM6JCIyMEdzQSQzIVEkeSEjOyQiMWRqKGZESnZEKSEjOiQiMU8hNDo2QipmJykhIzokIjEuTTtwKT1QLyohIzokIjFOJSozPi0/NiUqISM6JCIwPihlSXdHaygqISM5JCIyUWFfQWFoLywiISM6JCIxKipvKyIqKWVMLyIhIzkkIjIkW2FaTUdDdjUhIzokIjI7NztEST9pNSIhIzokIjFZPyI0IWVRTzYhIzkkIjJQX0olPk4jZTsiISM6JCIyMmtpbSs0WT4iISM6JCIyLTUiUTMwIkdBIiEjOiQiMmZlN0MvIVxdNyEjOiQiMiY9b25sVXF4NyEjOiQiMlpIL2s8MFhJIiEjOiQiMmFnbV1vUzRMIiEjOiQiMk41UC8zYnFOIiEjOiQiMlI7ZTxUKilHUSIhIzokIjIlSDV5Lj1bMzkhIzokIjJDUFQiPXgnUVYiISM6JCIxN20hPjwhM2Y5ISM5JCIyMTA4PyMqXFRbIiEjOiQiMTJBZUFjNTQ6ISM5JCIyS2ghb2dSKFJgIiEjOiQiMi0wMFx4eihlOiEjOiQiMjMpRz5naGEkZSIhIzokIjI5I1tXaFhIMzshIzokIjJidCQpeSZbL0w7ISM6JCIyI289YVJhInlsIiEjOiQiMSlRZG9GQkVvIiEjOSQiMigpUWRTKVJbMjwhIzokIjEiKW96dz1USzwhIzkkIjBRKlJDK1VkPCEjOCQiMlU9IipwSD9EeSIhIzokIjI4SUN5U0J4IT0hIzokIjE4eDdeKlFJJD0hIzkkIjJDISopKmVWdiVlPSEjOiQiMUROODsuLyUpPSEjOSQiMlBJeSE9K3U0PiEjOiQiMSp6cF4nKnpiJD4hIzkkIjInXDRRLFljaD4hIzokIjFyPHQ4dXAoKT4hIzkkIjE2a3NhNClSLCMhIzkkIjEpR2FhJ29UUz8hIzkkIjJuKCpRKyFmK24/ISM6JCIyWVxQPyZ6dSQ0IyEjOiQiMnclKSlHJDNVMTcjISM6JCIyYGQqZWJsb1pAISM6JCIydW5UYScpeVs8IyEjOiQiMVI2KT55OkE/IyEjOSQiMXYmZiEpUSRwSEEhIzkkIjJtNkJWNzJ0RCMhIzokIjJHYDtnJD0wJkcjISM6JCIyWHZTQCM9I0hKIyEjOiQiMjFONmwpMyI0TSMhIzokIjInZWQ/IVI3IXBCISM6JCIyViQpW1tJPnNSIyEjOiQiMVAhcGhFQ2JVIyEjOSQiMSMqKmZzaT5SWCMhIzkkIjElPS01XihSI1sjISM5N2FxJCIyY21AUnpqQ3MiISM6JCIxS3FjaVs0bzshIzkkIjE9XHNiUWs3OyEjOSQiMllePyZcOzBjOiEjOiQiMiJvQy1mdUQpXCIhIzokIjFYdCV5JjQ/UjkhIzkkIjIsIlEzcGQjKXk4ISM6JCIxYnhmIylcMzw4ISM5JCIyYCpRIj1kXFJEIiEjOiQiMmthRGx1PyUqPSIhIzokIjJbI3A6ZXJhQjYhIzokIjIscGE+JXBXYzUhIzokIjFLPmNrIz1MKSkqISM6JCIxViUzXkRYXz4qISM6JCIwaDY/IWZdLyYpISM5JCIxeFguPTd2OnkhIzokIjFsP1RfL2JLciEjOiQiMVVrLEVAMGJrISM6JCIxJnB5JSpwYXN4JiEjOiQiMThlK0FMXCUzJiEjOiQiMVwmNFA7InpdViEjOiQiMSIpPkkhKnBKTE4hIzokIjIlXFkpSF1GYWIjISM7JCIycnohZUxCV1Y3ISM7JCEyQUcrTWM5LTMiISM7JCEyVncmKT5nTEhTIyEjOyQhMk0uWktKRGUxJSEjPCQiMiVcTTw0VjdmRyEjPSQiMnNKd1ckKil6KXoiISM8JCIwWWgoKlwmUV4lKiEjOiQiMiQ0W04yKFwhW0AhIzskIjFhbGcpUlwvQyQhIzokIjFKbD02PjZoVCEjOiQiMVtcdyIpRzlcXCEjOiQiMWFxJDNdZidSYyEjOiQiMCM9JWU+LnBEJyEjOSQiMVJceSIqelM8byEjOiQiMVkkKnklUWRGTCghIzokIjFESldHSkw2eSEjOiQiMWAiKmZRdlFmIykhIzokIjEmcEokZj5yIm8pISM6JCIxZWciKilbbD8zKiEjOiQiMWNcLmYkZU1ZKiEjOiQiMVhGQy5aTUcpKiEjOiQiMkNAIiopPWQoeSwiISM6JCIya28rLExTOzAiISM6JCIyOT04bGN0VTMiISM6JCIxUXEjb1YrZjYiISM5JCIyJCl5YTxsSG05IiEjOiQiMkg+am9sY2w8IiEjOiQiMlQ2T2MpZncwNyEjOiQiMjhXJ3kuSkxNNyEjOiQiMShHJVFuZUtpNyEjOSQiMkx2PlVvMCkqRyIhIzokIjEiUj5aV0dvSiIhIzkkIjIzbmBCRlhNTSIhIzokIjJ4RWU7OC4ocDghIzokIjJqI0dMQmBrJlIiISM6JCIyMk5NJSopPUpAOSEjOiQiMlUjKjNvJSpSblciISM6JCIybjRsSidSJz5aIiEjOiQiMk1xeXMpZiwoXCIhIzokIjIiKnA7RCVlIz5fIiEjOiQiMiVbWS0iSEBuYSIhIzokIjJccklXPEc5ZCIhIzokIjEicCxkYHFnZiIhIzkkIjF1Iyp5RDJuPzshIzkkIjJYXykpeVxcX2siISM6JCIyYDVuOTRFKXA7ISM6JCIyRF0jcDIkPVdwIiEjOiQiMS8lb3VkVSE+PCEjOSQiMiZmbyhILTlQdSIhIzokIjJvJXBSOGxXbzwhIzokIjJrOEBgcl9LeiIhIzokIjJ4J1xJUVQ5PT0hIzokIjEvOyZmPEpKJT0hIzkkIjEpelBIOUIjbz0hIzkkIjBsPiUzJEdNKj0hIzgkIjFSUElFUnY9PiEjOSQiMSRIQEhFMVUlPiEjOSQiMngnNHBBMXpwPiEjOiQiMnYxI1JzOF4mKj4hIzokIjIzPCpvaz5QQD8hIzokIjIlM3VhaFxQWj8hIzokIjEkW2AiZT9fdD8hIzkkIjJFKjMiejU5KSo0IyEjOiQiMllbNSFcNkRFQCEjOiQiMmJRIypIVktHOiMhIzokIjBcO2NYYyZ6QCEjOCQiMUoyRCEqNFUxQSEjOSQiMkE8dVE3Qk1CIyEjOiQiMU0wbyZIZjBFIyEjOSQiMUs7O1FgI3lHIyEjOSQiMVJNWD9sQDpCISM5JCIyPE5WT2ZGRk0jISM6JCIyTkNvdyRHTnFCISM6JCIxLTBRNGgzKVIjISM5JCIxIz5DOCozI2ZVIyEjOSQiMmlgWDJNXVFYIyEjOiQiMEBnJFF0Jz1bIyEjOCQiMmEmSFRPWCcqNEQhIzo3YXEkIjJYNlgrJHlGYjwhIzokIjFkbWhgJik0LTwhIzkkIjJPREo8XUx6ayIhIzokIjFAXyE+XFFGZiIhIzkkIjJ0MHk7U3FrYCIhIzokIjJhMnVxYSozejkhIzokIjJrQSIqMz9qMFUiISM6JCIxIylvTkkxKDNPIiEjOSQiMmIkZlhWKywrOCEjOiQiMi1YTnBvMiFRNyEjOiQiMEs0eSQpR1w8IiEjOCQiMi5bTSpSIyopMzYiISM6JCIyKVsuPUFLMVk1ISM6JCIxOUI8UC4ibyEpKiEjOiQiMXc7IUg8Tis6KiEjOiQiMSUpKXluYilmI1wpISM6JCIxN2IiNEQnUU55ISM6JCIxS0ptJFFsajwoISM6JCIxZEZXQyJcKTNsISM6JCIxSlYiKilIKG8+ZSEjOiQiMk5qOjJNYHEzJiEjOyQiMV5tVycpXGJ3VSEjOiQiMW5SNTMlPktMJCEjOiQiMktWPWhKYi88IyEjOyQiMSUpSG0/Yl0tdyEjOyQiMWtMQm8+IT1pJyEjPCQiMjFwPFBmMSdSTSEjPCQiMi9RSzEieiJmTyIhIzwkITIkKkg1R10mZSlIIiEjOyQiMmxwKyZ5MlZXPyEjPCQiMlBdJFwhKmU4IkcjISM7JCIxMi8rUSJcb2YkISM6JCIxTlBBMFJwIWYlISM6JCIxPmxfbVxoMGEhIzokIjEmZjxJSUBgNSchIzokIjFuVnFNdSxDbiEjOiQiMVw/bT4/TCNHKCEjOiQiMmF6SENQT1B6KCEjOyQiMXpSIik9W2JuIykhIzokIjFBYkFZZ2A1KCkhIzokIjApND9jNnVGIiohIzkkIjBZdiUpUnhJXyohIzkkIjF5dig0O04nKiopKiEjOiQiMjdlN1wmNCpmLSIhIzokIjJ3dVdKNiZmZzUhIzokIjI9aFI8OlpSNCIhIzokIjJ6Wi1wIj4+RTYhIzokIjFWUUMtTlhkNiEjOSQiMk5ZSmdTUnk9IiEjOiQiMlhFQSUpb1Z1QCIhIzokIjItU0BCU1xqQyIhIzokIjJHTnJxW0lZRiIhIzokIjFyZ2FlS04tOCEjOSQiMlE5JHkiZngmSDghIzokIjJFJ29kbXlOYzghIzokIjIiKilwWUdQdSNRIiEjOiQiMW96dS8yeTM5ISM5JCIyKWZhJWVxNVhWIiEjOiQiMllUeGJWcypmOSEjOiQiMi9rNChHPD8mWyIhIzokIjF3dUxJPUI1OiEjOSQiMiRRZWpHTzROOiEjOiQiMkwhRz1dZSIpZjohIzokIjFbMEBEX1UlZSIhIzkkIjJiQWEnR20lKjM7ISM6JCIyZFpxOz8uTWoiISM6JCIyaSpIS2RrInlsIiEjOiQiMkcmKlJMUDFBbyIhIzokIjFYYz91OWYxPCEjOSQiMkRSTFYhKikpNHQiISM6JCIyOyIqZk9cOWF2IiEjOiQiMUQnKW87RykpejwhIzkkIjImKlt4ZEMyVyE9ISM6JCIyZTQvJCoqKioqKkc9ISM6JCIxJG9OXz1zTyY9ISM5JCIyakN0MCVRVnk9ISM6JCIyRE47cidSSC4+ISM6JCIxRiQpKlJjZyNHPiEjOSQiMktVZ3VsU0wmPiEjOiQiMmJzZiRHLmF5PiEjOiQiMkU8Snp0a1ErIyEjOiQiMSUqSE1fIj0kSD8hIzkkIjIjKj0jZm1SIVwwIyEjOiQiMSM9eiNHWmkhMyMhIzkkIjJ5dnc8OyNbMUAhIzokIjJjXW5LPnhDOCMhIzokIjJfSG5xKCo0J2VAISM6JCIyeSc9ZUIqels9IyEjOiQiMiZmQjtIZEc2QSEjOiQiMSMqcC4zYSN5QiMhIzkkIjFKU1NFalxrQSEjOSQiMSRIeidRX0giSCMhIzkkIjIyYy5lSz0jPUIhIzokIjFOWFZON0VYQiEjOSQiMmEyeFA3PkNQIyEjOiQiMkNgWSgpcCdvKlIjISM6JCIyI0hWNmsjZXFVIyEjOiQiMWZLRGt4X2FDISM5JCIxVkEzSCkpMyNbIyEjOSQiMmEpZiEpPVt0NEQhIzokIjIpW0gwbylldWAjISM6N2FxJCIyRXZgeXBMISp5IiEjOiQiMnQjMyU+I3ozUDwhIzokIjExViMpZktEJW8iISM5JCIxJnBsayYqKVxJOyEjOSQiMSRlLmhBKHp2OiEjOSQiMkFjJVF0Yjc/OiEjOiQiMjtyKz4mKnBNWSIhIzokIjFub2I0KkdlUyIhIzkkIjJvbiVIbSg9c00iISM6JCIyJEhsYC8nendHIiEjOiQiMXh2ZTA4R0Y3ISM5JCIyTipHSSEqeTdtNiEjOiQiMmN5KSk0JHBOLzYhIzokIjJPOEdtJypHQC8iISM6JCIxaFwhPksvZ3oqISM6JCIwIz1tTjh1byIqISM5JCIxakpSWFlEUiYpISM6JCIxNmoiZkIuXiF6ISM6JCIxXHZKaEhvZ3MhIzokIjFLNm8oeXBqZichIzokIjImKlFDXk1eeiplISM7JCIxbyRSaklicDkmISM6JCIxal1QJXk4XUslISM6JCIyeHRDTi8hNE9NISM7JCIyJSplX0wua0llIyEjOyQiMVJZPSVvPj8sIyEjOiQiMnk3KEhDPyNmcSIhIzskIjEkMzpxYEQ2QyIhIzokIjFuTT5hXENpSyEjOyQiMXIqXHkmNDY1OCEjOiQiMiVwKCk9XkYmKj5JISM7JCIxbG44UD5qVFUhIzokIjE5KVFQVkMoKT0mISM6JCIxWT1kRTAvdGYhIzokIjJ1RXlYJSlRKlxtISM7JCIwV25eSisvRCghIzkkIjFLM192Ll4keighIzokIjEoKkdpPSMqKT1IKSEjOiQiMDk7RWRUVnYpISM5JCIxVWRDI1x0cz0qISM6JCIxYEMmeTYxYmYqISM6JCIxJEdlYFhxRikqKiEjOiQiMU5ZXVhBP041ISM5JCIyXDBMMjpsMDIiISM6JCIyaCdlciZIaVg1IiEjOiQiMlVIITNFeU5QNiEjOiQiMlFkeCQzMjRwNiEjOiQiMnJCLiRIKykpKj4iISM6JCIyYCh5Ij0nKkcpSDchIzokIjJuKW9kIXlGIWY3ISM6JCIxW1cqZj1jdkciISM5JCIyLkRjbTYmWzo4ISM6JCIxZHU4eCJ5R00iISM5JCIyW2pIRngjenA4ISM6JCIyI0haNj01RydSIiEjOiQiMjE0JSkpcC9SQTkhIzokIjJuPyhlP1o7WzkhIzokIjJNZ1xKKVFrdDkhIzokIjJPTSMqeilcJykpXCIhIzokIjJgQUQuSmlRXyIhIzokIjIqZTdTVHdtWzohIzokIjI5VydvOTBKdDohIzokIjJZbipvJlI9eWYiISM6JCIwTGBDJW9AQTshIzgkIjIzSDdCa0hsayIhIzokIjJaWTIlSCp5Mm4iISM6JCIyM3JJbEcmKVxwIiEjOiQiMi56UlQkeTs+PCEjOiQiMihITnkzVk1WPCEjOiQiMmxxJnBLNmBuPCEjOiQiMk1WTGZaVjx6IiEjOiQiMGFQQEomKmYiPSEjOCQiMTBrd28lKkhTPSEjOSQiMUUqKltzd21rPSEjOSQiMmFtOy5mNSIqKT0hIzokIjJtOGJwJ3lqOD4hIzokIjJsV3EpZSJlI1E+ISM6JCIyJ1s5W2wiekgnPiEjOiQiMiMqNFZ6bDJ5KT4hIzokIjJhX21mXVxGLCMhIzokIjFOIVJKcTR5LiMhIzkkIjFHRUAiUiMqSDEjISM5JCIyWVJHUSkzSSkzIyEjOiQiMiMpZksscFBQNiMhIzokIjJrajsoUVhJUkAhIzokIjFrb0YtQytsQCEjOSQiMi80VUxfSjM+IyEjOiQiMlB5ZDhXIno7QSEjOiQiMnghKVs4LSIpR0MjISM6JCIxIls0VlspNHBBISM5JCIyRnokUlI5VyZIIyEjOiQiMUtGIXoicCE+SyMhIzkkIjIoPUYqKjM5XFtCISM6JCIyYnFocCozPnZCISM6JCIyXyIpNCoqKjMrLUMhIzokIjFbNl80bCIqR0MhIzkkIjEleXQ7VktmWCMhIzkkIjE2bmJGSS8kWyMhIzkkIjJuXGJcTlUtXiMhIzokIjJQcGkkNFVfUEQhIzokIjImM01ka0ApW2MjISM6N2FxJCIxLFRHK2trQj0hIzkkIjFFO10iUW1IeCIhIzkkIjJMISpIYzgkXEA8ISM6JCIxR1ZWMXg/cDshIzkkIjJ4IiopPWBgNDs7ISM6JCIydFtNd2paQGMiISM6JCIyQSJmamddTzI6ISM6JCIyTyFlNFctd145ISM6JCIyInojPlBeaGBSIiEjOiQiMkFiOmtaOyNROCEjOiQiMmJ3TjJ2JVIhRyIhIzokIjIjPXktciQpKT5BIiEjOiQiMj5MS1pnMko7IiEjOiQiMk40JFtaI3BRNSIhIzokIjJkemQpR1dQVzUhIzokIjF6Ykk+TXVZKSohIzokIjBFQSN6c0RaIyohIzkkIjE5c3ghKkhWVicpISM6JCIxZlAhPUdHOy4pISM6JCIxV2snKT1UUDF1ISM6JCIxN2VPeE00aG4hIzokIjFjVSFwO3MwNCchIzokIjFzKWZtP0d2UiYhIzokIjFcc0FASyNvcSUhIzokIjAqKVEuYTg6MyUhIzkkIjImNGlcbEAqZmYkISM7JCIyWldZYUc6WUMkISM7JCIxOiY9XlFGImZIISM6JCIydSkqWyFbTWNlRyEjOyQiMSpHYUBwLiJRTCEjOiQiMVkpUUdOOW1CJSEjOiQiMW0oKlE0SmdTXiEjOiQiMXU3SGQiKVJUZiEjOiQiMSxRRWonb1VrJyEjOiQiMSoqKXpCPXQicHMhIzokIjFYI3BpeEJKJHkhIzokIjFqcVkjZjkpWyQpISM6JCIxWj80d1NlRCkpISM6JCIwZCNvVUdScSMqISM5JCIxOi54VEtgKW8qISM6JCIxLFFiKzhUMzUhIzkkIjEnSFx5SlFnLyIhIzkkIjFbJnBiSicqPjMiISM5JCIyeU0pNCV5Klw7NiEjOiQiMmpOb3olcHNcNiEjOiQiMipvZkdyeSM9PSIhIzokIjFwd3ZNLyRIQCIhIzkkIjJbVCEpUSJbOVY3ISM6JCIxYGslSClvY3M3ISM5JCIyY1QhR08zRyw4ISM6JCIxJ2Y2LEJoJEg4ISM5JCIybT4vJSpldW9OIiEjOiQiMiQ9T28kbyEpUVEiISM6JCIybipbK1tOVjU5ISM6JCIyakwzY0kjZU85ISM6JCIyYVFKWyQ9UGk5ISM6JCIyJ2YhUUZKVnlbIiEjOiQiMiYzVl5nWS44OiEjOiQiMk4oZTs1NCl6YCIhIzokIjE6MiF6XTlGYyIhIzkkIjJXXy9rY2xzZSIhIzokIjJFZ2hkMmk7aCIhIzokIjJsTFszM0lmaiIhIzokIjI9Mys6JFE0ZzshIzokIjEzJUgwImY8JW8iISM5JCIyOCNlb1Z0PjM8ISM6JCIyM2BXW3B4QHQiISM6JCIxKjNlIVxeOGM8ISM5JCIyOSNIZCZlJzMheSIhIzokIjJWWSNbVXcvLz0hIzokIjJXMFdWeEshRz0hIzokIjI8NzpRSWI/Jj0hIzokIjFoWzpvdTd3PSEjOSQiMjojNEdoL0UrPiEjOiQiMms2ZT5aa1cjPiEjOiQiMjxnPic9KFsoWz4hIzokIjIoZkZGIltASig+ISM6JCIxKClcIjQ4IWYoKj4hIzkkIjJELHNvOmhALSMhIzokIjJZSW5DPlNvLyMhIzokIjIpPi1WUj9qcj8hIzokIjJFV1s5cFNsNCMhIzokIjIjW01FZCRwOjcjISM6JCIyPHMkcCRbP245IyEjOiQiMkRyWip5ZCo+PCMhIzokIjFha2JPaVIoPiMhIzkkIjJPaTktO0FIQSMhIzokIjBjcCgqPXQmW0EhIzgkIjFOPmFHJFtWRiMhIzkkIjJQTixAKGZDK0IhIzokIjJ1UGQmUVJFRUIhIzokIjJGaGouXSpSX0IhIzokIjJ2Kj1kPCVcJ3lCISM6JCIyJHBzVHMqNF1TIyEjOiQiMWxUMTBxWkpDISM5JCIxajpJXWYvZUMhIzkkIjJEZ1NcKD1yJVsjISM6JCIyMzxWY15wOV4jISM6JCIyd0ElKm9KOCRRRCEjOiQiMlgxQylvdUJsRCEjOiQiMSJwKWVXZkIjZiMhIzk3YXEkIjElR0xXKTQuZj0hIzkkIjFmWEAkXFEnND0hIzkkIjF5LGwkKWVhZjwhIzkkIjJhYjBgVFcoMzwhIzokIjJOUVRtSklzbCIhIzokIjJVP0A2ZDFdZyIhIzokIjEkelNVLSYzXzohIzkkIjInW1hMRSgpWylcIiEjOiQiMiZSMEAoSGFVVyIhIzokIjJzaCk+JypRVipRIiEjOiQiMmMva240JzRNOCEjOiQiMnQsa1FpQyR5NyEjOiQiMkJobjNoOEFBIiEjOiQiMkdkcSJ6eiZlOyIhIzokIjJbNzwmcCFRJDQ2ISM6JCIyemtTbTkqcF81ISM6JCIxUTJ6dzhIZioqISM6JCIxTGwiKWUrVSpRKiEjOiQiMTpLJz4/J3o6KSkhIzokIjBBNChcKUhsQikhIzkkIjE+MUY4PGRddyEjOiQiMTlrOG8uOWdxISM6JCIxPlViJFx1XFonISM6JCIxRVwuSXdiPGYhIzokIjFwMyFHIyl6TVUmISM6JCIxcnkudS5MRl0hIzokIjI6Tic0cD9WV1ohIzskIjFSbEE1UUwhZiUhIzokIjFKKio+WCRcUWolISM6JCIwJilbVSpHQGVcISM5JCIyLzpEKFxTXDdiISM7JCIyOiZ5QGcpSF06JyEjOyQiMSNIL0xraEd6JyEjOiQiMW5HPlAqNEZSKCEjOiQiMSMqKnonMzNoW3ohIzokIjEoKSpcZTZgTlkpISM6JCIvay5cQGxVKikhIzgkIjFAPjQhKXknNFIqISM6JCIwWyZ5ZiM+SCIpKiEjOSQiMlxKPThPQDctIiEjOiQiMjMuVE1nIz5mNSEjOiQiMVI8akIzWSY0IiEjOSQiMi0/M08mKlEtOCIhIzokIjJaJG9KJzMxUDsiISM6JCIyQ10nPiU9OWc+IiEjOiQiMihHMG5hTEhGNyEjOiQiMmM2dUspZmxkNyEjOiQiMkRfaXcoKio+KEciISM6JCIybUlbYEs2Z0oiISM6JCIyKVFDK0FoO1c4ISM6JCIyJj5hJSkqPUs8UCIhIzokIjJOQGhvUHEoKVIiISM6JCIyXEZIZWdOYFUiISM6JCIxX0UhZnN4OVgiISM5JCIyYUkwdD9Vc1oiISM6JCIyIypbOTFycUVdIiEjOiQiMktjS19iLHlfIiEjOiQiMUNdVzEsbl86ISM5JCIyODF2azQ0dGQiISM6JCIyLjxrPSopWzxnIiEjOiQiMk9cLnJyPGdpIiEjOiQiMSopUmFVPTldOyEjOSQiMkdgLUp1WFRuIiEjOiQiMCRlMUxBMClwIiEjOCQiMlpDMzhlIyk9cyIhIzokIjImUVpWNW1sWDwhIzokIjFuKCpwI3kjUnA8ISM5JCIyZVI1XUYzSnoiISM6JCIyb293Wy8+byI9ISM6JCIyeS80KSkpKVIwJT0hIzokIjE4JW9WXCVHaz0hIzkkIjJgJTMlb1tsISkpPSEjOiQiMkskW0tyVyo9Ij4hIzokIjEicHozMiN5Tj4hIzkkIjJZNCFHaHp0Zj4hIzokIjFAJVtHITR4JCk+ISM5JCIyWjMoeXAoKSl5KyMhIzokIjI5cix1ZCk0Sz8hIzokIjImeXRlMmxTYz8hIzokIjJPWlJIJHoiMzMjISM6JCIyV2lWKVJ1TDBAISM6JCIyMzUjKjMmKW8qSEAhIzokIjFXVCdwQzpaOiMhIzkkIjJfdSNIKikqeSZ6QCEjOiQiMls5Pj11aFg/IyEjOiQiMjE1M1RcaydIQSEjOiQiMSUpPTEmZSgpW0QjISM5JCIyYGtId3NJLUcjISM6JCIxWEJtTUlwMEIhIzkkIjI4UzhnL3Q3TCMhIzokIjFSSyRwdm9wTiMhIzkkIjI9JVF2Wnd4I1EjISM6JCIyYC00W3IncDNDISM6JCIxJjQqWy1Ec01DISM5JCIyT0snR082JjNZIyEjOiQiMmJWXm1OeXFbIyEjOiQiMnciPlhgJipSOEQhIzokIjIwLSwzISk0KVJEISM6JCIxKik+LCMqUUltRCEjOSQiMXdfVXVqKEdmIyEjOSQiMmMpbyZRZUAmPkUhIzo3YXEkIjI4RjgoPVE1Jio9ISM6JCIwJVFfKzgsWj0hIzgkIjIkR0o/NCQzJCl6IiEjOiQiMWBoMXJbKipbPCEjOSQiMkNeJ3knUnchKnAiISM6JCIyYltVPTxsJls7ISM6JCIybmUkKSo0P1soZiIhIzokIjIiZm5PZXomZWEiISM6JCIyVjJpZiVldCRcIiEjOiQiMiZRUHVOODxUOSEjOiQiMmNpJm8pKUhCKVEiISM6JCIybWc5XHIrXUwiISM6JCIxJj1wOic+YyJHIiEjOSQiMiR5Lys3XytHNyEjOiQiMnImUSpvLjZXPCIhIzokIjE8ei5MQSUzNyIhIzkkIjJpYk9VaU90MSIhIzokIjI9SHNWKSkzUiwiISM6JCIxdihHeTs3ZGcqISM6JCIxLkpPTnMnUTIqISM6JCIxVj9xX19zWCYpISM6JCIxMkRYMm1sRSEpISM6JCIxQW0nbzVOdF8oISM6JCIxPlMjekAtXzEoISM6JCIxdzwuI2VUSW0nISM6JCIxXyQ0L2U9UE0nISM6JCIyWFgtLUg2bTcnISM7JCIxUXhLciJ6Ty4nISM6JCIvViYqZk9gJjQnISM4JCIydXQ3YTlFNUwnISM7JCIxSzUyOVo8OW4hIzokIjFFLFtQXlglPSghIzokIjFfWnBLImVpbyghIzokIjFtUChbIT5IJz0pISM6JCIxOV8xMk9EcCcpISM6JCIxKEhUQGAheUgiKiEjOiQiMVk1I0h1YXJjKiEjOiQiMUhGdlRVZiMpKiohIzokIjBrIm8lbyp6UDUhIzgkIjIoKm8peiwqUWIyIiEjOiQiMiZSLDVSKnA7NiIhIzokIjJBRHd4I3lPWTYhIzokIjJEPyYqcDUpeXo2ISM6JCIyLEZvQiJ5MTc3ISM6JCIyODc8Jz11S1Y3ISM6JCIyS214ZClIbnQ3ISM6JCIyKmV1JFE+KT4uOCEjOiQiMjk0XzI6Jyk+TCIhIzokIjJMOUwnWzQ2ZzghIzokIjJAJUguIikqUXdRIiEjOiQiMXR5SFsrajk5ISM5JCIyJEdcMiJHUTZXIiEjOiQiMillJClcNUhAbjkhIzokIjJNKFtJNSopKkdcIiEjOiQiMjlGdkNgUCM9OiEjOiQiMjhEYVh2bUthIiEjOiQiMi84b1BsQCFvOiEjOiQiMVZRWz9aYCNmIiEjOSQiMUg7U0BoJG9oIiEjOSQiMmFqIzRAUiY0ayIhIzokIjElUUAhcFUiXG0iISM5JCIxSG4oemJUKClvIiEjOSQiMUZsIyllJmVDciIhIzkkIjIzQXNjYCczTzwhIzokIjIzJSp5Wk1YJ2Y8ISM6JCIyKUgtMj9OOiR5IiEjOiQiMnYjXFtaJEdtIT0hIzokIjFgQTNJZjNJPSEjOSQiMi4qeVZYN2FgPSEjOiQiMkRiKmUnPjNxKD0hIzokIjFcdGJkJypcKz4hIzkkIjJQdHZVXkZTIz4hIzokIjJYNEM7cS13JT4hIzokIjJjI283UF9Ccj4hIzokIjIvKmYhPURNXCo+ISM6JCIyamowJz0hMyg9PyEjOiQiMWo9d3lSY1U/ISM5JCIyKVJDWW0oM2wxIyEjOiQiMT4rN0sjWzA0IyEjOSQiMnMmKnBYWShvOUAhIzokIjJpOCVcNzMkKlFAISM6JCIxPklPMD5HakAhIzkkIjJ2QnhUblZ4PSMhIzokIjJqXHZBUD1CQCMhIzokIjJRUmNrZjJxQiMhIzokIjJ4S1AnM0IiPUUjISM6JCIyeCRSQ2VHdCdHIyEjOiQiLipbMCFwPEojISM2JCIxWzZtWCo+cEwjISM5JCIydU8tWEwlPWlCISM6JCIyQ0Q1WkpndlEjISM6JCIyJ295YlZiLzhDISM6JCIxYUFlQHNqUUMhIzkkIjFXTERBQExrQyEjOSQiMjxwKlxBbTchXCMhIzokIjImPm4kUnQ7Z14jISM6JCIyNzk9WTgpKj5hIyEjOiQiMigqNDc2P20hb0QhIzokIjIkWzJwU2dAJWYjISM6JCIyPFE6TV9VL2kjISM6JCIyVmcpKlFKU25rIyEjOjdhcSQiMlE+OClcTnlKPiEjOiQiMlonZndlXypcKT0hIzokIjI3eGBIMiNvUD0hIzokIjJ5P0dSXV4pKnkiISM6JCIxWDYxWm1eVDwhIzkkIjB4Uyg9dXAjcCIhIzgkIjFiQDZpPVVWOyEjOSQiMmxxK3BURlBmIiEjOiQiMlklNHQnKT5tVjohIzokIjJsKkdYblhHJFwiISM6JCIyMidbR1RebVU5ISM6JCIyY1dcRGAkKT1SIiEjOiQiMnVcJT1EcS1UOCEjOiQiMkImUip6JW89IUgiISM6JCIyUGo5dkJhJVI3ISM6JCIyUFEpcGl4IiopPSIhIzokIjJZUS1DJVxtUTYhIzokIjI4KSpSJyl5I3opMyIhIzokIjF4JHojW01WUjUhIzkkIjE4JnllOz0hMyoqISM6JCIxIjRORCgqKXBLJSohIzokIjF5UzBOWmp1KikhIzokIi9WM1BJYVYmKSEjOCQiMTRLeDEvKUc6KSEjOiQiMXgoUUUtOyk9eSEjOiQiMTYrSSRcYCJldiEjOiQiMEUuXGIscVEoISM5JCIyREdRVmZONksoISM7JCIxQiUqKT4jb0F1dCEjOiQiMWlweiYpSFJcdiEjOiQiMSIzKyJwYGpJeSEjOiQiMS1lZkxicCc9KSEjOiQiMVttXG0lUVdlKSEjOiQiMSczaEw7KyYpKiopISM6JCIxdmtTZkYuOCUqISM6JCIxRjpPdGNXPikqISM6JCIybkxFImYobzgtIiEjOiQiMWkhZlIzRiVmNSEjOSQiMSx0LCVcMWg0IiEjOSQiMlY9J0cjXGg5OCIhIzokIjJjVkItNnhiOyIhIzokIjFHJkheTFwmKT4iISM5JCIyc2NnLjJ2L0IiISM6JCIya0AkM1JzV2g3ISM6JCIyRlJ3YWpfOkgiISM6JCIyOFFUNkFyM0siISM6JCIyajQrJ2ZoWlw4ISM6JCIxeCJ6Yz9NdVAiISM5JCIxbkVkVmkhW1MiISM5JCIyQyIqKltreWtKOSEjOiQiMTE8PkcqNCFlOSEjOSQiMV9qLCMzUlJbIiEjOSQiMUgrJHBBeSU0OiEjOSQiMigzWGlHcG1NOiEjOiQiMiY0WS13PGFmOiEjOiQiMkRSLjtwT1RlIiEjOiQiMjkjUm4pPiRbMzshIzokIjJOXT00bDVFaiIhIzokIjI4eWYiSGthYzshIzokIjFBdyYqNGhKIW8iISM5JCIybl1MLGhWUnEiISM6JCIxb10kM0pedXMiISM5JCIyOS0nR2ssJzN2IiEjOiQiMlZuTWZ5Kj11PCEjOiQiMiQ9SEtNJmV1eiIhIzokIjFXJVsxZSRvPz0hIzkkIjI8IVxvcDQpUSU9ISM6JCIydSFmWHRjMW49ISM6JCIyRiZvIylRO0QhKj0hIzokIjF6MikqSD1YOD4hIzkkIjJMZ3lsRXltJD4hIzokIjInR3BFZT8lKmY+ISM6JCIyOiRlM09NRCQpPiEjOiQiMFdUN3lAbSsjISM4JCIyPCQza15jMEk/ISM6JCIybW1PbCFHY2A/ISM6JCIyMSRIZkgtOng/ISM6JCIxdSFlMTpDMzUjISM5JCIyc3I5bDEhZkNAISM6JCIyI0dKJzN3XyVbQCEjOiQiMiZvanlCalRzQCEjOiQiMmA1TzQ8JVsnPiMhIzokIjJPKHltaSFmMUEjISM6JCIyLmhUTDdWXEMjISM6JCIxWm4pNCd5THBBISM5JCIxeS9eKD1XUUgjISM5JCIydjAuJ1JDWT1CISM6JCIyMFBsL1MjPlZCISM6JCIyZUFfQ0tMIW9CISM6JCIvMnBdUilIUiMhIzckIjFfdXBaRC89QyEjOSQiMUJMKSo9cD9WQyEjOSQiMiYzKilmUldab0MhIzokIjJ2PVU6M1VRXCMhIzokIjF4Jz4+VzEkPkQhIzkkIjFKb3NyUCdbYSMhIzkkIjI4MSM0MCtecUQhIzokIjJFTTcpKXlTaWYjISM6JCIyJEdxKj5eXj9pIyEjOiQiME5JY0xQemsjISM4JCIxWD0nPUEkKlFuIyEjOTdhcSQiMTY4J2V6Iioqbz4hIzkkIjIlPW4mRyZbXUI+ISM6JCIyKG8+InA5dXYoPSEjOiQiMWN4S2ZOQEo9ISM5JCIyOi1MUmlVV3kiISM6JCIxNGhJbHZHUDwhIzkkIjI4KFxuZUJ5Km8iISM6JCIyZFsnUUgocD5rIiEjOiQiMi06WnAoPiFSZiIhIzokIjEpWzxBW1RjYSIhIzkkIjJOUSI0YTJFKFwiISM6JCIyI3lrJUcjPiUpWzkhIzokIjJleVU7dHYvUyIhIzokIjEib1Y7T2dBTiIhIzkkIjIvP2l4KTNJLzghIzokIjJqPXhjITNyYzchIzokIjIpXEEpSCR5aDQ3ISM6JCIyJDRaQiopbzxqNiEjOiQiMihmJHAlR01mPDYhIzokIjJrR1BjVWZKMiIhIzokIjIjSGMpKSk0LC4uIiEjOiQiMXcxOXpSSScqKSohIzokIjE3Xy1vViIpPiYqISM6JCIxVU9fTl0vJT0qISM6JCIxQzQ5Z1AqNCEqKSEjOiQiMDJndENpSW8pISM5JCIxN2ctSVssVSYpISM6JCIwV1FwJlslelspISM5JCIwJEglM0sqPUYmKSEjOSQiMENhOV8wKWUnKSEjOSQiMHkmKip6QjpzKSkhIzkkIjEoell4WjQpWyIqISM6JCIxR3oiM3kmKXpZKiEjOiQiMSNIYyVwaVc2KSohIzokIjJ5Jyk9RERtbCwiISM6JCIyUE5jaXBvQDAiISM6JCIybV9pejU0dTMiISM6JCIyJnA8TiQ0JSk+NyIhIzokIjJ5Iz0ob01VZDoiISM6JCIyJjNOJzQvRCcpPSIhIzokIjIneldZJHBGMUEiISM6JCIxJG9UdmZ3PEQiISM5JCIyRyJRTVRYNiNHIiEjOiQiMmxyZy5HI3A2OCEjOiQiMXlCLEBOY1M4ISM5JCIybCJlIj4uI3lvOCEjOiQiMmh6XiVRK1MnUiIhIzokIjJmRDZzUW5NVSIhIzokIjFvJG8ibzYuXTkhIzkkIjJ5by1ZZ05oWiIhIzokIjIkKnA4XjRBPV0iISM6JCIyPHFmdUxIcl8iISM6JCIyVDAmeiJcJDRfOiEjOiQiMiNlXi1lJFtuZCIhIzokIjImKnkjZV9iNyw7ISM6JCIyYFZqa25hX2kiISM6JCIyOiplUHFNO1w7ISM6JCIybEI3YCZ6KEduIiEjOiQiMTFWSWVEVSdwIiEjOSQiMU54KFJBPyk+PCEjOSQiMjxpcEheIzRWPCEjOiQiMil6dVspb2ZpdyIhIzokIjEnPVtCelMkKnkiISM5JCIyTGMwPXJgQiI9ISM6JCIydFMjUlFfSk49ISM6JCIydC0jKik+NkNlPSEjOiQiMjMiPlYxaDkiKT0hIzokIjJOVm86KlIvLz4hIzokIjInKVE4Ilx3JXAjPiEjOiQiMmN0V2oxcClcPiEjOiQiMlcheTl1JD5HKD4hIzokIjJ2WV1YKCkzZSo+ISM6JCIyaW9ZZzFaKT0/ISM6JCIxUXAvbkUlPi8jISM5JCIxdS12UE81bD8hIzkkIjJ1cipwK3NMKTMjISM6JCIyJz4oZS0nKVw7NiMhIzokIjJlXUg3VVpdOCMhIzokIjEqW0FvK04mZUAhIzkkIjF6djx3cTYjPSMhIzkkIjE0OWpUdXowQSEjOSQiMW13ImZHeiZIQSEjOSQiMnlkeiV6XllgQSEjOiQiMTlKMSk0ZHVGIyEjOSQiMTxndVNrYixCISM5JCIyViU0YVtTd0RCISM6JCIyYyQzcEItM11CISM6JCIxPDh2XFpddUIhIzkkIjJ3LEhEInAuKlIjISM6JCIyJj1vIj5fdk9VIyEjOiQiMmMxUVkkKj0lW0MhIzokIjFsRCl5MmxLWiMhIzkkIjJFbCl5dDlAKVwjISM6JCIxJG8pcGtfREJEISM5JCIyKW8xNFJLUltEISM6JCIyYERuIWU9aXREISM6JCIyJVtfRSNHUCopZiMhIzokIjI9IVwuKlJOVmkjISM6JCIyYE5HKFw9IilcRSEjOiQiMmEsSnAwaWBuIyEjOiQiMm1CbzlEIik0cSMhIzo3YXEkIjJNdmBEamBtKyMhIzokIjJvNyhIKSkqZUMnPiEjOiQiMnYnXFZVcSp5Ij4hIzokIjFrdyFwMigpSCg9ISM5JCIyQnU+dCxheCM9ISM6JCIxQlkmSEtIQXkiISM5JCIxI2VeQik9WE88ISM5JCIyOlphI2Upby9wIiEjOiQiMD4qXDhrTFc7ISM4JCIyRUFeI1wtNylmIiEjOiQiMlhVKFI3Zio9YiIhIzokIjJ1MSdcKSopW2RdIiEjOiQiMlddY0FydShmOSEjOiQiMXNWcm4jelNUIiEjOSQiMjwhWzI+LnlvOCEjOiQiMm5oZ0ApNCxDOCEjOiQiMmNNKj5ebiMqejchIzokIjJ4cyQqb2M8bkIiISM6JCIxMHlvaGhpJT4iISM5JCIyb2IoZnRFKFI6IiEjOiQiMmtPSXAhSD06NiEjOiQiMkI5N2NdOCl5NSEjOiQiMipwZSQpekdjWDUhIzokIjJNT0Y+XmJpLCIhIzokIjEiKmYsXnUkeiIqKiEjOiQiMTgyKUgsUjN0KiEjOiQiMXpVQS1dWzQnKiEjOiQiMSd5IypmQS8tYyohIzokIjBFXy0lUiwnZSohIzkkIjFWRDNkSzImbyohIzokIjFFdXFwQSoqXCkqISM6JCIyTWNjIkdDKm8rIiEjOiQiMiVbUjM5KjRHLiIhIzokIjJLO0J6Q1U5MSIhIzokIjJAMmAsJXBxIjQiISM6JCIyTyJcUlRSekE2ISM6JCIyO0pfc1VSVDoiISM6JCIyJlwxIkhsc2A9IiEjOiQiMkFxJSk+VWlpQCIhIzokIjIqcEVMNk5uWTchIzokIjJXIXAmM2lNbEYiISM6JCIyLl43WjA7ZUkiISM6JCIyR2IrQ2w5WEwiISM6JCIyKDQ+SCd6VkVPIiEjOiQiMWt3bGVvQSFSIiEjOSQiMip5aFhRSEg8OSEjOiQiMmw+ZSYzVChRVyIhIzokIjI7WWBabC4rWiIhIzokIjIoZWZPa1xyJlwiISM6JCIya2AmW1IzL0A6ISM6JCIyWCJbI3AzOGdhIiEjOiQiMikqKWZlKEdpMWQiISM6JCIybjY6Nm88XWYiISM6JCIyTGZoTjcyIj47ISM6JCIxPkA9ITRkSGsiISM5JCIyPG8oMzBGZm07ISM6JCIwZCF6JnlQK3AiISM4JCIxNiVbXCpbSjg8ISM5JCIyR1BLV1JYa3QiISM6JCIxa0p0KVxcJWY8ISM5JCIxKDRxZktZQnkiISM5JCIyZDciZlhSOjA9ISM6JCIyKFFQUUElKil5Iz0hIzokIjJEUl5uJilvMCY9ISM6JCIyeHA2OVUySyg9ISM6JCIyMmQleSVSPmUqPSEjOiQiMnVaIlIiPj0lPT4hIzokIjI7dSwnKlE7NSU+ISM6JCIyblpgcXZETyc+ISM6JCIyJj1fMHVzRCcpPiEjOiQiMTNwQ2I2IyozPyEjOSQiMnlAcShwb2lKPyEjOiQiMSNSciw7JFFhPyEjOSQiMjBkTy0xKT54PyEjOiQiMSV6Uz4iKnkrNSMhIzkkIjFld24iUUtJNyMhIzkkIjJbXUVmWmtnOSMhIzokIjFcdF1jMD1wQCEjOSQiMmVVcGJOJlEjPiMhIzokIjIoKkhjLypIbzpBISM6JCIyeHUoZXlwMlJBISM6JCIyUTwmXF8tZGlBISM6JCIydkJVXjxsaEcjISM6JCIyJGVdbGJOJyk0QiEjOiQiMT5qZGxtbUxCISM5JCIxWVl1Yl9kZEIhIzkkIjImKXolKVFkKmUiUSMhIzokIjEjcHZIUTRkUyMhIzkkIjIoUURXISlSJCpIQyEjOiQiMCRwPj1BRWFDISM4JCIxV19fQkRweUMhIzkkIi4tMyNIQS5EISM2JCIyPFwiKVIwXnlfIyEjOiQiMCIqKXo0VWRfRCEjOCQiMnUoPWZUJCpReEQhIzokIjJiWE5PNCRILUUhIzokIjJtbW9lIz1HRkUhIzokIjElenkpUTtOX0UhIzkkIjFHOCsqUilceEUhIzkkIjBhKVFqeHItRiEjOCQiMSY+KSpbPzAhR0YhIzktJSZTVFlMRUc2IyUvU1VSRkFDRUNPTlRPVVJHLSYlJl9BWElTRzYjIiIiNictJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKl9TVUJUSUNLU0c2IyUmZmFsc2VHLSUmX01PREVHNiMiIiItJSZfTU9ERUc2IyIiIi0lJl9NT0RFRzYjIiIiLSYlJl9BWElTRzYjIiIjNiMtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0mJSZfQVhJU0c2IyIiJDYjLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJStQUk9KRUNUSU9ORzYsJCIxd24oPnEqKioqKlwhIzskITEvJFwzcG41MighIzskIjF3big+cSoqKioqXCEjOyQiMXduKD5xKioqKipcISM7JCIxLyRcM3BuNTIoISM7JCIxd24oPnEqKioqKlwhIzskITEvJFwzcG41MighIzskIiIhISIiJCIxLyRcM3BuNTIoISM7JCIjNSEiIi0lJlNUWUxFRzYjJS9TVVJGQUNFQ09OVE9VUkctJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiQrIiEiIi0lKUJPVU5EU19ZRzYjJCIkKyIhIiItJS1CT1VORFNfV0lEVEhHNiMkIiUrUiEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiUrUiEiIi0lKUNISUxEUkVORzYi JSFH openturns-1.9/validation/src/lambda_U.mws000066400000000000000000000017761307543307100206130ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 147 "restart:\nassume(te ta,real,theta>0):\nphi:=(-log(t))^theta:\nphiinv:=solve(phi=s,t);\nlam bda:=2-2*limit(diff(subs(s=2*s,phiinv),s)/diff(phiinv,s),s=0);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'phiinvG*&\"\"\"F&-%$expG6#-F(6#*&-% #lnG6#%\"sGF&%'theta|irG!\"\"F2" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%' lambdaG,&\"\"#\"\"\"*&F&F')F&*&F'F'%'theta|irG!\"\"F'F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/lambda_U.txt000066400000000000000000000011051307543307100206060ustar00rootroot00000000000000> restart: > assume(teta,real,theta>0): > phi:=(-log(t))^theta: > phiinv:=solve(phi=s,t); > lambda:=2-2*limit(diff(subs(s=2*s,phiinv),s)/diff(phiinv,s),s=0); 1 phiinv := ---------------- ln(s) exp(exp(------)) theta~ / 1 \ |------| \theta~/ lambda := 2 - 2 2 > openturns-1.9/validation/src/optimal_lhs/000077500000000000000000000000001307543307100206575ustar00rootroot00000000000000openturns-1.9/validation/src/optimal_lhs/README000066400000000000000000000070321307543307100215410ustar00rootroot00000000000000Here are instructions to validate this module. A) Validation of SpaceFilling evaluate() methods ================================================ 1) Generate samples with otlhs: $ python generate_lhs_samples.py This command generates centered LHS and writes them into the following files: design_dim_2_size_20_1_centered.csv design_dim_2_size_20_2_centered.csv design_dim_2_size_20_3_centered.csv design_dim_2_size_20_4_centered.csv design_dim_2_size_20_5_centered.csv design_dim_2_size_20_6_centered.csv design_dim_2_size_20_7_centered.csv design_dim_2_size_20_8_centered.csv design_dim_2_size_20_9_centered.csv design_dim_2_size_20_10_centered.csv design_dim_50_size_100_1_centered.csv design_dim_50_size_100_2_centered.csv design_dim_50_size_100_3_centered.csv design_dim_50_size_100_4_centered.csv design_dim_50_size_100_5_centered.csv It also calls the evaluate() method of space filling criteria, and stores result in file space_filling_criteria.val 2) Compute criteria of these LHS designs with R package DiceDesign: $ R --no-save < validate_spacefilling_evaluate.R This creates a file space_filling_criteria_ref.val 3) Compare space_filling_criteria.val and space_filling_criteria_ref.val $ diff space_filling_criteria.val space_filling_criteria_ref.val There should be no difference 4) Command $ python generate_lhs_nonunit_samples.py does the same thing for a distribution which is outside of the unit cube, in order to test normalization. Steps 2 and 3 can be performed, files have a _nonunit suffix. There is a single numerical difference, due to rounding errors. B) Validation of SpaceFilling perturbLHS() methods ================================================== 1) Generate samples with otlhs: $ python compute_spacefilling_perturbLHS.py This command generates two centered LHS and writes them into the following files: design_dim_2_size_20_centered_perturbLHS.csv design_dim_50_size_100_centered_perturbLHS.csv It also calls the perturbLHS() method of space filling criteria (except for MinDist) for all tuples (row1,row2,col), and stores result in file space_filling_criteria_perturbation.val 2) Compute criteria updates of these LHS designs with R package DiceDesign: $ R --no-save < validate_spacefilling_perturbLHS.R This creates a file space_filling_criteria_ref.val 3) Compare space_filling_criteria_perturbation.val and space_filling_criteria_perturbation_ref.val $ diff space_filling_criteria_perturbation{,_ref}.val There should be no difference C) Validation of Monte Carlo method =================================== 1) Run OTLHS Monte Carlo algorithms $ python validate_MC_small.py $ python validate_MC_big.py D) Validation of Simulated Annealing method =========================================== 1) Run OTLHS Simulated Annealing algorithms on a small sample $ python validate_SA_small.py This creates a small_OTLHS.pdf file 2) Run R counterpart, which uses DiceDesign: $ R --no-save < validate_SA_small.R This creates a Rplots.pdf file 3) Compare small_OTLHS.pdf and Rplots.pdf 4) Run OTLHS Simulated Annealing algorithms on a large sample $ python validate_SA_big.py This creates a large_OTLHS.pdf file 5) Run R counterpart, which uses DiceDesign: $ R --no-save < validate_SA_big.R This creates a Rplots.pdf file 6) Compare large_OTLHS.pdf and Rplots.pdf openturns-1.9/validation/src/optimal_lhs/compute_spacefilling_perturbLHS.py000077500000000000000000000051651307543307100275510ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot # Bounds are [0,1]^dimension dimension = 2 # Size of sample size = 20 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized # For each design, evaluation of some criteria fp = open("space_filling_criteria_perturbation.val", "w") design = lhsDesign.generate() filename = "design_dim_2_size_20_centered_perturbLHS.csv" design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("initial design=%s\n"%filename) fp.write("c2=%1.10e, phip=%1.10e, mindist=%1.10e\n"%(c2,phip,mindist)) # Perturbations # Echange of type: #tmp = design[row1, column] #design[row1, column] = design[row2, column] #design[row2, column] = tmp for row1 in range(size): for row2 in range(size): for column in range(dimension): # The 3-upplet (row1, row2, column) # Criteria exchange design[row1, column] and design[row2, column] updated_c2 = ot.SpaceFillingC2().perturbLHS(design, c2, row1, row2, column) #updated_phip = ot.SpaceFillingPhiP().perturbLHS(design, phip, row1, row2, column) fp.write("row1=%d, row2=%d, column=%d, updated c2=%1.10e\n"%(row1+1,row2+1, column+1, updated_c2)) ## New test with biggest dimension dimension = 50 # Size of sample size = 100 lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized design = lhsDesign.generate() # export the design filename = "design_dim_50_size_100_centered_perturbLHS.csv" design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("initial design=%s\n"%filename) fp.write("c2=%1.10e, phip=%1.10e, mindist=%1.10e\n"%(c2,phip,mindist)) for row1 in range(0, size, 10): for row2 in range(0, size, 10): for column in range(0, dimension, 10): # The 3-upplet (row1, row2, column) # Criteria exchange design[row1, column] and design[row2, column] updated_c2 = ot.SpaceFillingC2().perturbLHS(design, c2, row1, row2, column) updated_phip = ot.SpaceFillingPhiP().perturbLHS(design, phip, row1, row2, column) fp.write("row1=%d, row2=%d, column=%d, updated c2=%1.10e\n"%(row1+1,row2+1, column+1, updated_c2)) fp.close() openturns-1.9/validation/src/optimal_lhs/generate_lhs_nonunit_samples.py000077500000000000000000000032171307543307100271750ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot dimension = 2 # Size of sample size = 20 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(20.0, 30.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized # Number of designs to generate N = 10 # For each design, evaluation of some criteria fp = open("space_filling_criteria_nonunit.val", "w") for i in range(N): design = lhsDesign.generate() filename = "design_dim_%d_size_%d_%d_nonunit.csv"%(dimension, size,i+1) design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("design=%s\n"%filename) fp.write("c2=%1.13e, phip=%1.13e, mindist=%1.13e\n"%(c2,phip,mindist)) # New test with biggest dimension dimension = 50 # Size of sample size = 100 lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(20.0, 30.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized # Number of designs to generate N = 5 # For each design, evaluation of some criteria for i in range(N): design = lhsDesign.generate() filename = "design_dim_%d_size_%d_%d_nonunit.csv"%(dimension, size,i+1) design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("design=%s\n"%filename) fp.write("c2=%1.13e, phip=%1.13e, mindist=%1.13e\n"%(c2,phip,mindist)) fp.close() openturns-1.9/validation/src/optimal_lhs/generate_lhs_samples.py000077500000000000000000000033021307543307100254160ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot # Bounds are [0,1]^dimension dimension = 2 # Size of sample size = 20 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized # Number of designs to generate N = 10 # For each design, evaluation of some criteria fp = open("space_filling_criteria.val", "w") for i in range(N): design = lhsDesign.generate() filename = "design_dim_%d_size_%d_%d_centered.csv"%(dimension, size,i+1) design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("design=%s\n"%filename) fp.write("c2=%1.13e, phip=%1.13e, mindist=%1.13e\n"%(c2,phip,mindist)) # New test with biggest dimension dimension = 50 bounds = ot.Interval(dimension) # Size of sample size = 100 lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setRandomShift(False) # centered lhsDesign.setAlwaysShuffle(True) # randomized # Number of designs to generate N = 5 # For each design, evaluation of some criteria for i in range(N): design = lhsDesign.generate() filename = "design_dim_%d_size_%d_%d_centered.csv"%(dimension, size,i+1) design.exportToCSVFile(filename, ";") c2 = ot.SpaceFillingC2().evaluate(design) phip = ot.SpaceFillingPhiP().evaluate(design) mindist = ot.SpaceFillingMinDist().evaluate(design) fp.write("design=%s\n"%filename) fp.write("c2=%1.13e, phip=%1.13e, mindist=%1.13e\n"%(c2,phip,mindist)) fp.close() openturns-1.9/validation/src/optimal_lhs/result_valid_mc.txt000066400000000000000000000060621307543307100246000ustar00rootroot00000000000000cpu time=0.710267 dimension=2, size=10,mc=class=MonteCarloLHS name=Unnamed lhs=class=LHSDesign name=Unnamed centeredDesign=false bounds=class=Interval name=Unnamed dimension=2 lower bound=class=NumericalPoint name=Unnamed dimension=2 values=[0,0] upper bound=class=NumericalPoint name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] size=10 spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=true simulation size=10000 optimal value=0.0642964786744 c2=0.0642964786744 phiP=4.65627107594 minDist=0.214814736222 cpu time=0.476781 dimension=2, size=10,mc=class=MonteCarloLHS name=Unnamed lhs=class=LHSDesign name=Unnamed centeredDesign=false bounds=class=Interval name=Unnamed dimension=2 lower bound=class=NumericalPoint name=Unnamed dimension=2 values=[0,0] upper bound=class=NumericalPoint name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] size=10 spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=false simulation size=10000 optimal value=0.26664409103 c2=0.0736722081539 phiP=3.78723556096 minDist=0.26664409103 cpu time=109.478783 dimension=50, size=100,mc=class=MonteCarloLHS name=Unnamed lhs=class=LHSDesign name=Unnamed centeredDesign=false bounds=class=Interval name=Unnamed dimension=50 lower bound=class=NumericalPoint name=Unnamed dimension=50 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] upper bound=class=NumericalPoint name=Unnamed dimension=50 values=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite lower bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite upper bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] size=100 spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=true simulation size=10000 optimal value=24.4271255677 c2=24.4271255677 phiP=0.517506664801 minDist=1.9344630632 cpu time=53.362973 dimension=50, size=100,mc=class=MonteCarloLHS name=Unnamed lhs=class=LHSDesign name=Unnamed centeredDesign=false bounds=class=Interval name=Unnamed dimension=50 lower bound=class=NumericalPoint name=Unnamed dimension=50 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] upper bound=class=NumericalPoint name=Unnamed dimension=50 values=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite lower bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite upper bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] size=100 spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=false simulation size=10000 optimal value=2.19769753289 c2=25.9132595604 phiP=0.480960355717 minDist=2.19769753289 openturns-1.9/validation/src/optimal_lhs/result_valid_sa.txt000066400000000000000000000062641307543307100246100ustar00rootroot00000000000000dimension=50, size=100,sa=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=50 lower bound=class=NumericalPoint name=Unnamed dimension=50 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] upper bound=class=NumericalPoint name=Unnamed dimension=50 values=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite lower bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite upper bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=true profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.999 iMax=50000 22.1899353514 c2=22.1899353514 phiP=0.444302801638 minDist=2.37642365829 INF - *** Log Beginning *** INF - MinDist criterion replaced by PhiP in SimulatedAnnealingLHS dimension=50, size=100,sa=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=50 lower bound=class=NumericalPoint name=Unnamed dimension=50 values=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] upper bound=class=NumericalPoint name=Unnamed dimension=50 values=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite lower bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] finite upper bound=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.999 iMax=50000 0.426214237126 c2=22.5879141212 phiP=0.426214237126 minDist=2.64401105643 dimension=2, size=10,sa=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=2 lower bound=class=NumericalPoint name=Unnamed dimension=2 values=[0,0] u pper bound=class=NumericalPoint name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingImplementation minimization=true profile=class=TemperatureProfile implementation=class=GeometricProfile name=Unnamed T0=10 c=0.999 iMax=50000 0.069986956535 c2=0.0699869565349 phiP=4.9359057749 minDist=0.202597060777 INF - *** Log Beginning *** INF - MinDist criterion replaced by PhiP in SimulatedAnnealingLHS dimension=2, size=10,sa=class=SimulatedAnnealingLHS name=Unnamed bounds=class=Interval name=Unnamed dimension=2 lower bound=class=NumericalPoint name=Unnamed dimension=2 values=[0,0] upper bound=class=NumericalPoint name=Unnamed dimension=2 values=[1,1] finite lower bound=[1,1] finite upper bound=[1,1] spaceFilling=class=SpaceFilling implementation=class=SpaceFillingPhiP p=50 profile=class=TemperatureProfile implementation=class=LinearProfile name=Unnamed T0=10 iMax=50000 3.41371266216 c2=0.0732504356111 phiP=3.41371266216 minDist=0.293958972711 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria.val000066400000000000000000000034421307543307100260470ustar00rootroot00000000000000design=design_dim_2_size_20_1_centered.csv c2=3.7424634916177e-02, phip=9.2368609820592e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_2_centered.csv c2=3.9756801916269e-02, phip=1.4539725173219e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_3_centered.csv c2=3.4622655857252e-02, phip=1.4142135623826e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_4_centered.csv c2=3.5310809939870e-02, phip=1.4456309011263e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_5_centered.csv c2=4.6320657363751e-02, phip=1.4456309011328e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_6_centered.csv c2=4.1862612180906e-02, phip=1.4539725173244e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_7_centered.csv c2=4.0934133661406e-02, phip=1.4539725173228e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_8_centered.csv c2=3.5951054207203e-02, phip=9.1957299868635e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_9_centered.csv c2=3.8810157157769e-02, phip=9.2706042376728e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_10_centered.csv c2=3.8826257849676e-02, phip=1.4456309011263e+01, mindist=7.0710678118655e-02 design=design_dim_50_size_100_1_centered.csv c2=2.6124591580463e+01, phip=5.4534391739897e-01, mindist=1.8351839144892e+00 design=design_dim_50_size_100_2_centered.csv c2=2.5427092291761e+01, phip=5.1713345771273e-01, mindist=1.9406699874013e+00 design=design_dim_50_size_100_3_centered.csv c2=2.6141690805074e+01, phip=4.9453167540663e-01, mindist=2.1044951888755e+00 design=design_dim_50_size_100_4_centered.csv c2=2.6322210826622e+01, phip=5.1691817925687e-01, mindist=1.9479219696898e+00 design=design_dim_50_size_100_5_centered.csv c2=2.7777966135178e+01, phip=5.1782924202828e-01, mindist=1.9647391684394e+00 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria_nonunit.val000066400000000000000000000034231307543307100276200ustar00rootroot00000000000000design=design_dim_2_size_20_1_nonunit.csv c2=4.4357011356332e-02, phip=9.2368609820592e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_2_nonunit.csv c2=4.6324814650957e-02, phip=1.4539725173219e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_3_nonunit.csv c2=4.2261234399007e-02, phip=1.4142135623826e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_4_nonunit.csv c2=4.2165120114984e-02, phip=1.4456309011263e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_5_nonunit.csv c2=5.2539455833220e-02, phip=1.4456309011328e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_6_nonunit.csv c2=5.0367916188338e-02, phip=1.4539725173244e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_7_nonunit.csv c2=4.7038414132210e-02, phip=1.4539725173228e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_8_nonunit.csv c2=4.2643525269354e-02, phip=9.1957299868635e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_9_nonunit.csv c2=4.5189290427044e-02, phip=9.2706042376728e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_10_nonunit.csv c2=4.5572906886560e-02, phip=1.4456309011263e+00, mindist=7.4432292756479e-02 design=design_dim_50_size_100_1_nonunit.csv c2=2.7474974620471e+01, phip=5.4534391739897e-02, mindist=1.8537211257467e+00 design=design_dim_50_size_100_2_nonunit.csv c2=2.6731806114566e+01, phip=5.1713345771273e-02, mindist=1.9602727145467e+00 design=design_dim_50_size_100_3_nonunit.csv c2=2.7492784068713e+01, phip=4.9453167540663e-02, mindist=2.1257527160358e+00 design=design_dim_50_size_100_4_nonunit.csv c2=2.7686010211620e+01, phip=5.1691817925687e-02, mindist=1.9675979491816e+00 design=design_dim_50_size_100_5_nonunit.csv c2=2.9253721790400e+01, phip=5.1782924202828e-02, mindist=1.9845850186257e+00 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria_nonunit_ref.val000066400000000000000000000034231307543307100304540ustar00rootroot00000000000000design=design_dim_2_size_20_1_nonunit.csv c2=4.4357011356332e-02, phip=9.2368609820592e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_2_nonunit.csv c2=4.6324814650957e-02, phip=1.4539725173219e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_3_nonunit.csv c2=4.2261234399007e-02, phip=1.4142135623826e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_4_nonunit.csv c2=4.2165120114984e-02, phip=1.4456309011263e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_5_nonunit.csv c2=5.2539455833220e-02, phip=1.4456309011328e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_6_nonunit.csv c2=5.0367916188338e-02, phip=1.4539725173244e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_7_nonunit.csv c2=4.7038414132210e-02, phip=1.4539725173228e+00, mindist=7.4432292756479e-02 design=design_dim_2_size_20_8_nonunit.csv c2=4.2643525269348e-02, phip=9.1957299868635e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_9_nonunit.csv c2=4.5189290427044e-02, phip=9.2706042376728e-01, mindist=1.1768778828946e-01 design=design_dim_2_size_20_10_nonunit.csv c2=4.5572906886560e-02, phip=1.4456309011263e+00, mindist=7.4432292756479e-02 design=design_dim_50_size_100_1_nonunit.csv c2=2.7474974620471e+01, phip=5.4534391739897e-02, mindist=1.8537211257467e+00 design=design_dim_50_size_100_2_nonunit.csv c2=2.6731806114566e+01, phip=5.1713345771273e-02, mindist=1.9602727145467e+00 design=design_dim_50_size_100_3_nonunit.csv c2=2.7492784068713e+01, phip=4.9453167540663e-02, mindist=2.1257527160358e+00 design=design_dim_50_size_100_4_nonunit.csv c2=2.7686010211620e+01, phip=5.1691817925687e-02, mindist=1.9675979491816e+00 design=design_dim_50_size_100_5_nonunit.csv c2=2.9253721790400e+01, phip=5.1782924202828e-02, mindist=1.9845850186257e+00 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria_perturbation.val000066400000000000000000002157001307543307100306470ustar00rootroot00000000000000initial design=design_dim_2_size_20_centered_perturbLHS.csv c2=3.7424634916e-02, phip=9.2368609821e+00, mindist=1.1180339887e-01 row1=1, row2=1, column=1, updated c2=3.7424634916e-02 row1=1, row2=1, column=2, updated c2=3.7424634916e-02 row1=1, row2=2, column=1, updated c2=3.8348445843e-02 row1=1, row2=2, column=2, updated c2=3.8348445843e-02 row1=1, row2=3, column=1, updated c2=3.6962525598e-02 row1=1, row2=3, column=2, updated c2=3.6962525598e-02 row1=1, row2=4, column=1, updated c2=4.1840211503e-02 row1=1, row2=4, column=2, updated c2=4.1840211503e-02 row1=1, row2=5, column=1, updated c2=3.7399576182e-02 row1=1, row2=5, column=2, updated c2=3.7399576182e-02 row1=1, row2=6, column=1, updated c2=4.3824688232e-02 row1=1, row2=6, column=2, updated c2=4.3824688232e-02 row1=1, row2=7, column=1, updated c2=4.1989323626e-02 row1=1, row2=7, column=2, updated c2=4.1989323626e-02 row1=1, row2=8, column=1, updated c2=3.7699181670e-02 row1=1, row2=8, column=2, updated c2=3.7699181670e-02 row1=1, row2=9, column=1, updated c2=4.1690566062e-02 row1=1, row2=9, column=2, updated c2=4.1690566062e-02 row1=1, row2=10, column=1, updated c2=3.7607888782e-02 row1=1, row2=10, column=2, updated c2=3.7607888782e-02 row1=1, row2=11, column=1, updated c2=3.8656866125e-02 row1=1, row2=11, column=2, updated c2=3.8656866125e-02 row1=1, row2=12, column=1, updated c2=3.8291360626e-02 row1=1, row2=12, column=2, updated c2=3.8291360626e-02 row1=1, row2=13, column=1, updated c2=3.9583497807e-02 row1=1, row2=13, column=2, updated c2=3.9583497807e-02 row1=1, row2=14, column=1, updated c2=4.4023894632e-02 row1=1, row2=14, column=2, updated c2=4.4023894632e-02 row1=1, row2=15, column=1, updated c2=3.7190096781e-02 row1=1, row2=15, column=2, updated c2=3.7190096781e-02 row1=1, row2=16, column=1, updated c2=3.7156470481e-02 row1=1, row2=16, column=2, updated c2=3.7156470481e-02 row1=1, row2=17, column=1, updated c2=3.8527305883e-02 row1=1, row2=17, column=2, updated c2=3.8527305883e-02 row1=1, row2=18, column=1, updated c2=4.0458043682e-02 row1=1, row2=18, column=2, updated c2=4.0458043682e-02 row1=1, row2=19, column=1, updated c2=4.1200464786e-02 row1=1, row2=19, column=2, updated c2=4.1200464786e-02 row1=1, row2=20, column=1, updated c2=4.0819459803e-02 row1=1, row2=20, column=2, updated c2=4.0819459803e-02 row1=2, row2=1, column=1, updated c2=3.8348445843e-02 row1=2, row2=1, column=2, updated c2=3.8348445843e-02 row1=2, row2=2, column=1, updated c2=3.7424634916e-02 row1=2, row2=2, column=2, updated c2=3.7424634916e-02 row1=2, row2=3, column=1, updated c2=4.0542919217e-02 row1=2, row2=3, column=2, updated c2=4.0542919217e-02 row1=2, row2=4, column=1, updated c2=3.8299520867e-02 row1=2, row2=4, column=2, updated c2=3.8299520867e-02 row1=2, row2=5, column=1, updated c2=3.7632808806e-02 row1=2, row2=5, column=2, updated c2=3.7632808806e-02 row1=2, row2=6, column=1, updated c2=3.9693869786e-02 row1=2, row2=6, column=2, updated c2=3.9693869786e-02 row1=2, row2=7, column=1, updated c2=3.7872857017e-02 row1=2, row2=7, column=2, updated c2=3.7872857017e-02 row1=2, row2=8, column=1, updated c2=3.7715756636e-02 row1=2, row2=8, column=2, updated c2=3.7715756636e-02 row1=2, row2=9, column=1, updated c2=3.7641111814e-02 row1=2, row2=9, column=2, updated c2=3.7641111814e-02 row1=2, row2=10, column=1, updated c2=3.8413582215e-02 row1=2, row2=10, column=2, updated c2=3.8413582215e-02 row1=2, row2=11, column=1, updated c2=3.8608331984e-02 row1=2, row2=11, column=2, updated c2=3.8608331984e-02 row1=2, row2=12, column=1, updated c2=3.7582952234e-02 row1=2, row2=12, column=2, updated c2=3.7582952234e-02 row1=2, row2=13, column=1, updated c2=4.3091220667e-02 row1=2, row2=13, column=2, updated c2=4.3091220667e-02 row1=2, row2=14, column=1, updated c2=3.9693869786e-02 row1=2, row2=14, column=2, updated c2=3.9693869786e-02 row1=2, row2=15, column=1, updated c2=3.6920228854e-02 row1=2, row2=15, column=2, updated c2=3.6920228854e-02 row1=2, row2=16, column=1, updated c2=3.7341040406e-02 row1=2, row2=16, column=2, updated c2=3.7341040406e-02 row1=2, row2=17, column=1, updated c2=3.7524702512e-02 row1=2, row2=17, column=2, updated c2=3.7524702512e-02 row1=2, row2=18, column=1, updated c2=3.7341040406e-02 row1=2, row2=18, column=2, updated c2=3.7341040406e-02 row1=2, row2=19, column=1, updated c2=3.7963512727e-02 row1=2, row2=19, column=2, updated c2=3.7963512727e-02 row1=2, row2=20, column=1, updated c2=3.7897602808e-02 row1=2, row2=20, column=2, updated c2=3.7897602808e-02 row1=3, row2=1, column=1, updated c2=3.6962525598e-02 row1=3, row2=1, column=2, updated c2=3.6962525598e-02 row1=3, row2=2, column=1, updated c2=4.0542919217e-02 row1=3, row2=2, column=2, updated c2=4.0542919217e-02 row1=3, row2=3, column=1, updated c2=3.7424634916e-02 row1=3, row2=3, column=2, updated c2=3.7424634916e-02 row1=3, row2=4, column=1, updated c2=4.3351508608e-02 row1=3, row2=4, column=2, updated c2=4.3351508608e-02 row1=3, row2=5, column=1, updated c2=3.7458020484e-02 row1=3, row2=5, column=2, updated c2=3.7458020484e-02 row1=3, row2=6, column=1, updated c2=4.7301990430e-02 row1=3, row2=6, column=2, updated c2=4.7301990430e-02 row1=3, row2=7, column=1, updated c2=3.5759310656e-02 row1=3, row2=7, column=2, updated c2=3.5759310656e-02 row1=3, row2=8, column=1, updated c2=3.8004648382e-02 row1=3, row2=8, column=2, updated c2=3.8004648382e-02 row1=3, row2=9, column=1, updated c2=3.6115831689e-02 row1=3, row2=9, column=2, updated c2=3.6115831689e-02 row1=3, row2=10, column=1, updated c2=3.6571550399e-02 row1=3, row2=10, column=2, updated c2=3.6571550399e-02 row1=3, row2=11, column=1, updated c2=3.6580094295e-02 row1=3, row2=11, column=2, updated c2=3.6580094295e-02 row1=3, row2=12, column=1, updated c2=4.7506350087e-02 row1=3, row2=12, column=2, updated c2=4.7506350087e-02 row1=3, row2=13, column=1, updated c2=3.7021659858e-02 row1=3, row2=13, column=2, updated c2=3.7021659858e-02 row1=3, row2=14, column=1, updated c2=3.9218660082e-02 row1=3, row2=14, column=2, updated c2=3.9218660082e-02 row1=3, row2=15, column=1, updated c2=4.3192630142e-02 row1=3, row2=15, column=2, updated c2=4.3192630142e-02 row1=3, row2=16, column=1, updated c2=4.5558789477e-02 row1=3, row2=16, column=2, updated c2=4.5558789477e-02 row1=3, row2=17, column=1, updated c2=3.8209662372e-02 row1=3, row2=17, column=2, updated c2=3.8209662372e-02 row1=3, row2=18, column=1, updated c2=5.2326888868e-02 row1=3, row2=18, column=2, updated c2=5.2326888868e-02 row1=3, row2=19, column=1, updated c2=3.6665423748e-02 row1=3, row2=19, column=2, updated c2=3.6665423748e-02 row1=3, row2=20, column=1, updated c2=3.9851013771e-02 row1=3, row2=20, column=2, updated c2=3.9851013771e-02 row1=4, row2=1, column=1, updated c2=4.1840211503e-02 row1=4, row2=1, column=2, updated c2=4.1840211503e-02 row1=4, row2=2, column=1, updated c2=3.8299520867e-02 row1=4, row2=2, column=2, updated c2=3.8299520867e-02 row1=4, row2=3, column=1, updated c2=4.3351508608e-02 row1=4, row2=3, column=2, updated c2=4.3351508608e-02 row1=4, row2=4, column=1, updated c2=3.7424634916e-02 row1=4, row2=4, column=2, updated c2=3.7424634916e-02 row1=4, row2=5, column=1, updated c2=4.0287756187e-02 row1=4, row2=5, column=2, updated c2=4.0287756187e-02 row1=4, row2=6, column=1, updated c2=3.6970979141e-02 row1=4, row2=6, column=2, updated c2=3.6970979141e-02 row1=4, row2=7, column=1, updated c2=3.4523228392e-02 row1=4, row2=7, column=2, updated c2=3.4523228392e-02 row1=4, row2=8, column=1, updated c2=3.7707470064e-02 row1=4, row2=8, column=2, updated c2=3.7707470064e-02 row1=4, row2=9, column=1, updated c2=3.4423513746e-02 row1=4, row2=9, column=2, updated c2=3.4423513746e-02 row1=4, row2=10, column=1, updated c2=3.7557999129e-02 row1=4, row2=10, column=2, updated c2=3.7557999129e-02 row1=4, row2=11, column=1, updated c2=3.7223692705e-02 row1=4, row2=11, column=2, updated c2=3.7223692705e-02 row1=4, row2=12, column=1, updated c2=3.8135984301e-02 row1=4, row2=12, column=2, updated c2=3.8135984301e-02 row1=4, row2=13, column=1, updated c2=4.3774744986e-02 row1=4, row2=13, column=2, updated c2=4.3774744986e-02 row1=4, row2=14, column=1, updated c2=3.6098522111e-02 row1=4, row2=14, column=2, updated c2=3.6098522111e-02 row1=4, row2=15, column=1, updated c2=3.7971743423e-02 row1=4, row2=15, column=2, updated c2=3.7971743423e-02 row1=4, row2=16, column=1, updated c2=3.7666009858e-02 row1=4, row2=16, column=2, updated c2=3.7666009858e-02 row1=4, row2=17, column=1, updated c2=3.8332144456e-02 row1=4, row2=17, column=2, updated c2=3.8332144456e-02 row1=4, row2=18, column=1, updated c2=3.7996424814e-02 row1=4, row2=18, column=2, updated c2=3.7996424814e-02 row1=4, row2=19, column=1, updated c2=3.9010938192e-02 row1=4, row2=19, column=2, updated c2=3.9010938192e-02 row1=4, row2=20, column=1, updated c2=3.7257258335e-02 row1=4, row2=20, column=2, updated c2=3.7257258335e-02 row1=5, row2=1, column=1, updated c2=3.7399576182e-02 row1=5, row2=1, column=2, updated c2=3.7399576182e-02 row1=5, row2=2, column=1, updated c2=3.7632808806e-02 row1=5, row2=2, column=2, updated c2=3.7632808806e-02 row1=5, row2=3, column=1, updated c2=3.7458020484e-02 row1=5, row2=3, column=2, updated c2=3.7458020484e-02 row1=5, row2=4, column=1, updated c2=4.0287756187e-02 row1=5, row2=4, column=2, updated c2=4.0287756187e-02 row1=5, row2=5, column=1, updated c2=3.7424634916e-02 row1=5, row2=5, column=2, updated c2=3.7424634916e-02 row1=5, row2=6, column=1, updated c2=4.2396677919e-02 row1=5, row2=6, column=2, updated c2=4.2396677919e-02 row1=5, row2=7, column=1, updated c2=4.0388467396e-02 row1=5, row2=7, column=2, updated c2=4.0388467396e-02 row1=5, row2=8, column=1, updated c2=3.8004648382e-02 row1=5, row2=8, column=2, updated c2=3.8004648382e-02 row1=5, row2=9, column=1, updated c2=4.0132322368e-02 row1=5, row2=9, column=2, updated c2=4.0132322368e-02 row1=5, row2=10, column=1, updated c2=3.7715756636e-02 row1=5, row2=10, column=2, updated c2=3.7715756636e-02 row1=5, row2=11, column=1, updated c2=3.7541354512e-02 row1=5, row2=11, column=2, updated c2=3.7541354512e-02 row1=5, row2=12, column=1, updated c2=3.7374500647e-02 row1=5, row2=12, column=2, updated c2=3.7374500647e-02 row1=5, row2=13, column=1, updated c2=3.7173287433e-02 row1=5, row2=13, column=2, updated c2=3.7173287433e-02 row1=5, row2=14, column=1, updated c2=4.2507097038e-02 row1=5, row2=14, column=2, updated c2=4.2507097038e-02 row1=5, row2=15, column=1, updated c2=3.7674305549e-02 row1=5, row2=15, column=2, updated c2=3.7674305549e-02 row1=5, row2=16, column=1, updated c2=3.7674305549e-02 row1=5, row2=16, column=2, updated c2=3.7674305549e-02 row1=5, row2=17, column=1, updated c2=3.8632606676e-02 row1=5, row2=17, column=2, updated c2=3.8632606676e-02 row1=5, row2=18, column=1, updated c2=3.8494847689e-02 row1=5, row2=18, column=2, updated c2=3.8494847689e-02 row1=5, row2=19, column=1, updated c2=4.0550626365e-02 row1=5, row2=19, column=2, updated c2=4.0550626365e-02 row1=5, row2=20, column=1, updated c2=4.0256717435e-02 row1=5, row2=20, column=2, updated c2=4.0256717435e-02 row1=6, row2=1, column=1, updated c2=4.3824688232e-02 row1=6, row2=1, column=2, updated c2=4.3824688232e-02 row1=6, row2=2, column=1, updated c2=3.9693869786e-02 row1=6, row2=2, column=2, updated c2=3.9693869786e-02 row1=6, row2=3, column=1, updated c2=4.7301990430e-02 row1=6, row2=3, column=2, updated c2=4.7301990430e-02 row1=6, row2=4, column=1, updated c2=3.6970979141e-02 row1=6, row2=4, column=2, updated c2=3.6970979141e-02 row1=6, row2=5, column=1, updated c2=4.2396677919e-02 row1=6, row2=5, column=2, updated c2=4.2396677919e-02 row1=6, row2=6, column=1, updated c2=3.7424634916e-02 row1=6, row2=6, column=2, updated c2=3.7424634916e-02 row1=6, row2=7, column=1, updated c2=3.6443151601e-02 row1=6, row2=7, column=2, updated c2=3.6443151601e-02 row1=6, row2=8, column=1, updated c2=3.8045739559e-02 row1=6, row2=8, column=2, updated c2=3.8045739559e-02 row1=6, row2=9, column=1, updated c2=3.6716526233e-02 row1=6, row2=9, column=2, updated c2=3.6716526233e-02 row1=6, row2=10, column=1, updated c2=3.7173287433e-02 row1=6, row2=10, column=2, updated c2=3.7173287433e-02 row1=6, row2=11, column=1, updated c2=3.7790254016e-02 row1=6, row2=11, column=2, updated c2=3.7790254016e-02 row1=6, row2=12, column=1, updated c2=3.6228142357e-02 row1=6, row2=12, column=2, updated c2=3.6228142357e-02 row1=6, row2=13, column=1, updated c2=4.4797916231e-02 row1=6, row2=13, column=2, updated c2=4.4797916231e-02 row1=6, row2=14, column=1, updated c2=3.8332144456e-02 row1=6, row2=14, column=2, updated c2=3.8332144456e-02 row1=6, row2=15, column=1, updated c2=3.8168747669e-02 row1=6, row2=15, column=2, updated c2=3.8168747669e-02 row1=6, row2=16, column=1, updated c2=3.6063878031e-02 row1=6, row2=16, column=2, updated c2=3.6063878031e-02 row1=6, row2=17, column=1, updated c2=4.0334269531e-02 row1=6, row2=17, column=2, updated c2=4.0334269531e-02 row1=6, row2=18, column=1, updated c2=3.8168747669e-02 row1=6, row2=18, column=2, updated c2=3.8168747669e-02 row1=6, row2=19, column=1, updated c2=4.5593072924e-02 row1=6, row2=19, column=2, updated c2=4.5593072924e-02 row1=6, row2=20, column=1, updated c2=3.8632606676e-02 row1=6, row2=20, column=2, updated c2=3.8632606676e-02 row1=7, row2=1, column=1, updated c2=4.1989323626e-02 row1=7, row2=1, column=2, updated c2=4.1989323626e-02 row1=7, row2=2, column=1, updated c2=3.7872857017e-02 row1=7, row2=2, column=2, updated c2=3.7872857017e-02 row1=7, row2=3, column=1, updated c2=3.5759310656e-02 row1=7, row2=3, column=2, updated c2=3.5759310656e-02 row1=7, row2=4, column=1, updated c2=3.4523228392e-02 row1=7, row2=4, column=2, updated c2=3.4523228392e-02 row1=7, row2=5, column=1, updated c2=4.0388467396e-02 row1=7, row2=5, column=2, updated c2=4.0388467396e-02 row1=7, row2=6, column=1, updated c2=3.6443151601e-02 row1=7, row2=6, column=2, updated c2=3.6443151601e-02 row1=7, row2=7, column=1, updated c2=3.7424634916e-02 row1=7, row2=7, column=2, updated c2=3.7424634916e-02 row1=7, row2=8, column=1, updated c2=3.3689438977e-02 row1=7, row2=8, column=2, updated c2=3.3689438977e-02 row1=7, row2=9, column=1, updated c2=3.7307550156e-02 row1=7, row2=9, column=2, updated c2=3.7307550156e-02 row1=7, row2=10, column=1, updated c2=3.4140932890e-02 row1=7, row2=10, column=2, updated c2=3.4140932890e-02 row1=7, row2=11, column=1, updated c2=3.5452126856e-02 row1=7, row2=11, column=2, updated c2=3.5452126856e-02 row1=7, row2=12, column=1, updated c2=3.4604599385e-02 row1=7, row2=12, column=2, updated c2=3.4604599385e-02 row1=7, row2=13, column=1, updated c2=3.3381930720e-02 row1=7, row2=13, column=2, updated c2=3.3381930720e-02 row1=7, row2=14, column=1, updated c2=3.6494565330e-02 row1=7, row2=14, column=2, updated c2=3.6494565330e-02 row1=7, row2=15, column=1, updated c2=3.6784552445e-02 row1=7, row2=15, column=2, updated c2=3.6784552445e-02 row1=7, row2=16, column=1, updated c2=3.4195808202e-02 row1=7, row2=16, column=2, updated c2=3.4195808202e-02 row1=7, row2=17, column=1, updated c2=3.3363202763e-02 row1=7, row2=17, column=2, updated c2=3.3363202763e-02 row1=7, row2=18, column=1, updated c2=3.7173287433e-02 row1=7, row2=18, column=2, updated c2=3.7173287433e-02 row1=7, row2=19, column=1, updated c2=3.7798522439e-02 row1=7, row2=19, column=2, updated c2=3.7798522439e-02 row1=7, row2=20, column=1, updated c2=3.3966576198e-02 row1=7, row2=20, column=2, updated c2=3.3966576198e-02 row1=8, row2=1, column=1, updated c2=3.7699181670e-02 row1=8, row2=1, column=2, updated c2=3.7699181670e-02 row1=8, row2=2, column=1, updated c2=3.7715756636e-02 row1=8, row2=2, column=2, updated c2=3.7715756636e-02 row1=8, row2=3, column=1, updated c2=3.8004648382e-02 row1=8, row2=3, column=2, updated c2=3.8004648382e-02 row1=8, row2=4, column=1, updated c2=3.7707470064e-02 row1=8, row2=4, column=2, updated c2=3.7707470064e-02 row1=8, row2=5, column=1, updated c2=3.8004648382e-02 row1=8, row2=5, column=2, updated c2=3.8004648382e-02 row1=8, row2=6, column=1, updated c2=3.8045739559e-02 row1=8, row2=6, column=2, updated c2=3.8045739559e-02 row1=8, row2=7, column=1, updated c2=3.3689438977e-02 row1=8, row2=7, column=2, updated c2=3.3689438977e-02 row1=8, row2=8, column=1, updated c2=3.7424634916e-02 row1=8, row2=8, column=2, updated c2=3.7424634916e-02 row1=8, row2=9, column=1, updated c2=3.4140932890e-02 row1=8, row2=9, column=2, updated c2=3.4140932890e-02 row1=8, row2=10, column=1, updated c2=3.6877883597e-02 row1=8, row2=10, column=2, updated c2=3.6877883597e-02 row1=8, row2=11, column=1, updated c2=3.6665423748e-02 row1=8, row2=11, column=2, updated c2=3.6665423748e-02 row1=8, row2=12, column=1, updated c2=4.0007540522e-02 row1=8, row2=12, column=2, updated c2=4.0007540522e-02 row1=8, row2=13, column=1, updated c2=3.9042967339e-02 row1=8, row2=13, column=2, updated c2=3.9042967339e-02 row1=8, row2=14, column=1, updated c2=3.6460297566e-02 row1=8, row2=14, column=2, updated c2=3.6460297566e-02 row1=8, row2=15, column=1, updated c2=3.7757162216e-02 row1=8, row2=15, column=2, updated c2=3.7757162216e-02 row1=8, row2=16, column=1, updated c2=3.8818208338e-02 row1=8, row2=16, column=2, updated c2=3.8818208338e-02 row1=8, row2=17, column=1, updated c2=3.7382861028e-02 row1=8, row2=17, column=2, updated c2=3.7382861028e-02 row1=8, row2=18, column=1, updated c2=4.1914833873e-02 row1=8, row2=18, column=2, updated c2=4.1914833873e-02 row1=8, row2=19, column=1, updated c2=3.6374486919e-02 row1=8, row2=19, column=2, updated c2=3.6374486919e-02 row1=8, row2=20, column=1, updated c2=3.7407930959e-02 row1=8, row2=20, column=2, updated c2=3.7407930959e-02 row1=9, row2=1, column=1, updated c2=4.1690566062e-02 row1=9, row2=1, column=2, updated c2=4.1690566062e-02 row1=9, row2=2, column=1, updated c2=3.7641111814e-02 row1=9, row2=2, column=2, updated c2=3.7641111814e-02 row1=9, row2=3, column=1, updated c2=3.6115831689e-02 row1=9, row2=3, column=2, updated c2=3.6115831689e-02 row1=9, row2=4, column=1, updated c2=3.4423513746e-02 row1=9, row2=4, column=2, updated c2=3.4423513746e-02 row1=9, row2=5, column=1, updated c2=4.0132322368e-02 row1=9, row2=5, column=2, updated c2=4.0132322368e-02 row1=9, row2=6, column=1, updated c2=3.6716526233e-02 row1=9, row2=6, column=2, updated c2=3.6716526233e-02 row1=9, row2=7, column=1, updated c2=3.7307550156e-02 row1=9, row2=7, column=2, updated c2=3.7307550156e-02 row1=9, row2=8, column=1, updated c2=3.4140932890e-02 row1=9, row2=8, column=2, updated c2=3.4140932890e-02 row1=9, row2=9, column=1, updated c2=3.7424634916e-02 row1=9, row2=9, column=2, updated c2=3.7424634916e-02 row1=9, row2=10, column=1, updated c2=3.4432590646e-02 row1=9, row2=10, column=2, updated c2=3.4432590646e-02 row1=9, row2=11, column=1, updated c2=3.5460940464e-02 row1=9, row2=11, column=2, updated c2=3.5460940464e-02 row1=9, row2=12, column=1, updated c2=3.4250595595e-02 row1=9, row2=12, column=2, updated c2=3.4250595595e-02 row1=9, row2=13, column=1, updated c2=3.3828291394e-02 row1=9, row2=13, column=2, updated c2=3.3828291394e-02 row1=9, row2=14, column=1, updated c2=3.6827005018e-02 row1=9, row2=14, column=2, updated c2=3.6827005018e-02 row1=9, row2=15, column=1, updated c2=3.5985806905e-02 row1=9, row2=15, column=2, updated c2=3.5985806905e-02 row1=9, row2=16, column=1, updated c2=3.3587249048e-02 row1=9, row2=16, column=2, updated c2=3.3587249048e-02 row1=9, row2=17, column=1, updated c2=3.3828291394e-02 row1=9, row2=17, column=2, updated c2=3.3828291394e-02 row1=9, row2=18, column=1, updated c2=3.8689188394e-02 row1=9, row2=18, column=2, updated c2=3.8689188394e-02 row1=9, row2=19, column=1, updated c2=3.8689188394e-02 row1=9, row2=19, column=2, updated c2=3.8689188394e-02 row1=9, row2=20, column=1, updated c2=3.4287071887e-02 row1=9, row2=20, column=2, updated c2=3.4287071887e-02 row1=10, row2=1, column=1, updated c2=3.7607888782e-02 row1=10, row2=1, column=2, updated c2=3.7607888782e-02 row1=10, row2=2, column=1, updated c2=3.8413582215e-02 row1=10, row2=2, column=2, updated c2=3.8413582215e-02 row1=10, row2=3, column=1, updated c2=3.6571550399e-02 row1=10, row2=3, column=2, updated c2=3.6571550399e-02 row1=10, row2=4, column=1, updated c2=3.7557999129e-02 row1=10, row2=4, column=2, updated c2=3.7557999129e-02 row1=10, row2=5, column=1, updated c2=3.7715756636e-02 row1=10, row2=5, column=2, updated c2=3.7715756636e-02 row1=10, row2=6, column=1, updated c2=3.7173287433e-02 row1=10, row2=6, column=2, updated c2=3.7173287433e-02 row1=10, row2=7, column=1, updated c2=3.4140932890e-02 row1=10, row2=7, column=2, updated c2=3.4140932890e-02 row1=10, row2=8, column=1, updated c2=3.6877883597e-02 row1=10, row2=8, column=2, updated c2=3.6877883597e-02 row1=10, row2=9, column=1, updated c2=3.4432590646e-02 row1=10, row2=9, column=2, updated c2=3.4432590646e-02 row1=10, row2=10, column=1, updated c2=3.7424634916e-02 row1=10, row2=10, column=2, updated c2=3.7424634916e-02 row1=10, row2=11, column=1, updated c2=3.7290793751e-02 row1=10, row2=11, column=2, updated c2=3.7290793751e-02 row1=10, row2=12, column=1, updated c2=4.0311019568e-02 row1=10, row2=12, column=2, updated c2=4.0311019568e-02 row1=10, row2=13, column=1, updated c2=3.8004648382e-02 row1=10, row2=13, column=2, updated c2=3.8004648382e-02 row1=10, row2=14, column=1, updated c2=3.7004773998e-02 row1=10, row2=14, column=2, updated c2=3.7004773998e-02 row1=10, row2=15, column=1, updated c2=3.9058972063e-02 row1=10, row2=15, column=2, updated c2=3.9058972063e-02 row1=10, row2=16, column=1, updated c2=3.9693869786e-02 row1=10, row2=16, column=2, updated c2=3.9693869786e-02 row1=10, row2=17, column=1, updated c2=3.6852453088e-02 row1=10, row2=17, column=2, updated c2=3.6852453088e-02 row1=10, row2=18, column=1, updated c2=4.0085574695e-02 row1=10, row2=18, column=2, updated c2=4.0085574695e-02 row1=10, row2=19, column=1, updated c2=3.6279860785e-02 row1=10, row2=19, column=2, updated c2=3.6279860785e-02 row1=10, row2=20, column=1, updated c2=3.7148059150e-02 row1=10, row2=20, column=2, updated c2=3.7148059150e-02 row1=11, row2=1, column=1, updated c2=3.8656866125e-02 row1=11, row2=1, column=2, updated c2=3.8656866125e-02 row1=11, row2=2, column=1, updated c2=3.8608331984e-02 row1=11, row2=2, column=2, updated c2=3.8608331984e-02 row1=11, row2=3, column=1, updated c2=3.6580094295e-02 row1=11, row2=3, column=2, updated c2=3.6580094295e-02 row1=11, row2=4, column=1, updated c2=3.7223692705e-02 row1=11, row2=4, column=2, updated c2=3.7223692705e-02 row1=11, row2=5, column=1, updated c2=3.7541354512e-02 row1=11, row2=5, column=2, updated c2=3.7541354512e-02 row1=11, row2=6, column=1, updated c2=3.7790254016e-02 row1=11, row2=6, column=2, updated c2=3.7790254016e-02 row1=11, row2=7, column=1, updated c2=3.5452126856e-02 row1=11, row2=7, column=2, updated c2=3.5452126856e-02 row1=11, row2=8, column=1, updated c2=3.6665423748e-02 row1=11, row2=8, column=2, updated c2=3.6665423748e-02 row1=11, row2=9, column=1, updated c2=3.5460940464e-02 row1=11, row2=9, column=2, updated c2=3.5460940464e-02 row1=11, row2=10, column=1, updated c2=3.7290793751e-02 row1=11, row2=10, column=2, updated c2=3.7290793751e-02 row1=11, row2=11, column=1, updated c2=3.7424634916e-02 row1=11, row2=11, column=2, updated c2=3.7424634916e-02 row1=11, row2=12, column=1, updated c2=4.0550626365e-02 row1=11, row2=12, column=2, updated c2=4.0550626365e-02 row1=11, row2=13, column=1, updated c2=3.7148059150e-02 row1=11, row2=13, column=2, updated c2=3.7148059150e-02 row1=11, row2=14, column=1, updated c2=3.7839837455e-02 row1=11, row2=14, column=2, updated c2=3.7839837455e-02 row1=11, row2=15, column=1, updated c2=4.0038772441e-02 row1=11, row2=15, column=2, updated c2=4.0038772441e-02 row1=11, row2=16, column=1, updated c2=4.0357506100e-02 row1=11, row2=16, column=2, updated c2=4.0357506100e-02 row1=11, row2=17, column=1, updated c2=3.6835489662e-02 row1=11, row2=17, column=2, updated c2=3.6835489662e-02 row1=11, row2=18, column=1, updated c2=3.9018947943e-02 row1=11, row2=18, column=2, updated c2=3.9018947943e-02 row1=11, row2=19, column=1, updated c2=3.7341040406e-02 row1=11, row2=19, column=2, updated c2=3.7341040406e-02 row1=11, row2=20, column=1, updated c2=3.7341040406e-02 row1=11, row2=20, column=2, updated c2=3.7341040406e-02 row1=12, row2=1, column=1, updated c2=3.8291360626e-02 row1=12, row2=1, column=2, updated c2=3.8291360626e-02 row1=12, row2=2, column=1, updated c2=3.7582952234e-02 row1=12, row2=2, column=2, updated c2=3.7582952234e-02 row1=12, row2=3, column=1, updated c2=4.7506350087e-02 row1=12, row2=3, column=2, updated c2=4.7506350087e-02 row1=12, row2=4, column=1, updated c2=3.8135984301e-02 row1=12, row2=4, column=2, updated c2=3.8135984301e-02 row1=12, row2=5, column=1, updated c2=3.7374500647e-02 row1=12, row2=5, column=2, updated c2=3.7374500647e-02 row1=12, row2=6, column=1, updated c2=3.6228142357e-02 row1=12, row2=6, column=2, updated c2=3.6228142357e-02 row1=12, row2=7, column=1, updated c2=3.4604599385e-02 row1=12, row2=7, column=2, updated c2=3.4604599385e-02 row1=12, row2=8, column=1, updated c2=4.0007540522e-02 row1=12, row2=8, column=2, updated c2=4.0007540522e-02 row1=12, row2=9, column=1, updated c2=3.4250595595e-02 row1=12, row2=9, column=2, updated c2=3.4250595595e-02 row1=12, row2=10, column=1, updated c2=4.0311019568e-02 row1=12, row2=10, column=2, updated c2=4.0311019568e-02 row1=12, row2=11, column=1, updated c2=4.0550626365e-02 row1=12, row2=11, column=2, updated c2=4.0550626365e-02 row1=12, row2=12, column=1, updated c2=3.7424634916e-02 row1=12, row2=12, column=2, updated c2=3.7424634916e-02 row1=12, row2=13, column=1, updated c2=4.7847186946e-02 row1=12, row2=13, column=2, updated c2=4.7847186946e-02 row1=12, row2=14, column=1, updated c2=3.5977121878e-02 row1=12, row2=14, column=2, updated c2=3.5977121878e-02 row1=12, row2=15, column=1, updated c2=3.7790254016e-02 row1=12, row2=15, column=2, updated c2=3.7790254016e-02 row1=12, row2=16, column=1, updated c2=3.7341040406e-02 row1=12, row2=16, column=2, updated c2=3.7341040406e-02 row1=12, row2=17, column=1, updated c2=4.1048487166e-02 row1=12, row2=17, column=2, updated c2=4.1048487166e-02 row1=12, row2=18, column=1, updated c2=3.6665423748e-02 row1=12, row2=18, column=2, updated c2=3.6665423748e-02 row1=12, row2=19, column=1, updated c2=4.3595909196e-02 row1=12, row2=19, column=2, updated c2=4.3595909196e-02 row1=12, row2=20, column=1, updated c2=3.9456980353e-02 row1=12, row2=20, column=2, updated c2=3.9456980353e-02 row1=13, row2=1, column=1, updated c2=3.9583497807e-02 row1=13, row2=1, column=2, updated c2=3.9583497807e-02 row1=13, row2=2, column=1, updated c2=4.3091220667e-02 row1=13, row2=2, column=2, updated c2=4.3091220667e-02 row1=13, row2=3, column=1, updated c2=3.7021659858e-02 row1=13, row2=3, column=2, updated c2=3.7021659858e-02 row1=13, row2=4, column=1, updated c2=4.3774744986e-02 row1=13, row2=4, column=2, updated c2=4.3774744986e-02 row1=13, row2=5, column=1, updated c2=3.7173287433e-02 row1=13, row2=5, column=2, updated c2=3.7173287433e-02 row1=13, row2=6, column=1, updated c2=4.4797916231e-02 row1=13, row2=6, column=2, updated c2=4.4797916231e-02 row1=13, row2=7, column=1, updated c2=3.3381930720e-02 row1=13, row2=7, column=2, updated c2=3.3381930720e-02 row1=13, row2=8, column=1, updated c2=3.9042967339e-02 row1=13, row2=8, column=2, updated c2=3.9042967339e-02 row1=13, row2=9, column=1, updated c2=3.3828291394e-02 row1=13, row2=9, column=2, updated c2=3.3828291394e-02 row1=13, row2=10, column=1, updated c2=3.8004648382e-02 row1=13, row2=10, column=2, updated c2=3.8004648382e-02 row1=13, row2=11, column=1, updated c2=3.7148059150e-02 row1=13, row2=11, column=2, updated c2=3.7148059150e-02 row1=13, row2=12, column=1, updated c2=4.7847186946e-02 row1=13, row2=12, column=2, updated c2=4.7847186946e-02 row1=13, row2=13, column=1, updated c2=3.7424634916e-02 row1=13, row2=13, column=2, updated c2=3.7424634916e-02 row1=13, row2=14, column=1, updated c2=3.6107177937e-02 row1=13, row2=14, column=2, updated c2=3.6107177937e-02 row1=13, row2=15, column=1, updated c2=4.5041406490e-02 row1=13, row2=15, column=2, updated c2=4.5041406490e-02 row1=13, row2=16, column=1, updated c2=4.6495734198e-02 row1=13, row2=16, column=2, updated c2=4.6495734198e-02 row1=13, row2=17, column=1, updated c2=3.7922332452e-02 row1=13, row2=17, column=2, updated c2=3.7922332452e-02 row1=13, row2=18, column=1, updated c2=5.0552975171e-02 row1=13, row2=18, column=2, updated c2=5.0552975171e-02 row1=13, row2=19, column=1, updated c2=3.5890156013e-02 row1=13, row2=19, column=2, updated c2=3.5890156013e-02 row1=13, row2=20, column=1, updated c2=3.9106946935e-02 row1=13, row2=20, column=2, updated c2=3.9106946935e-02 row1=14, row2=1, column=1, updated c2=4.4023894632e-02 row1=14, row2=1, column=2, updated c2=4.4023894632e-02 row1=14, row2=2, column=1, updated c2=3.9693869786e-02 row1=14, row2=2, column=2, updated c2=3.9693869786e-02 row1=14, row2=3, column=1, updated c2=3.9218660082e-02 row1=14, row2=3, column=2, updated c2=3.9218660082e-02 row1=14, row2=4, column=1, updated c2=3.6098522111e-02 row1=14, row2=4, column=2, updated c2=3.6098522111e-02 row1=14, row2=5, column=1, updated c2=4.2507097038e-02 row1=14, row2=5, column=2, updated c2=4.2507097038e-02 row1=14, row2=6, column=1, updated c2=3.8332144456e-02 row1=14, row2=6, column=2, updated c2=3.8332144456e-02 row1=14, row2=7, column=1, updated c2=3.6494565330e-02 row1=14, row2=7, column=2, updated c2=3.6494565330e-02 row1=14, row2=8, column=1, updated c2=3.6460297566e-02 row1=14, row2=8, column=2, updated c2=3.6460297566e-02 row1=14, row2=9, column=1, updated c2=3.6827005018e-02 row1=14, row2=9, column=2, updated c2=3.6827005018e-02 row1=14, row2=10, column=1, updated c2=3.7004773998e-02 row1=14, row2=10, column=2, updated c2=3.7004773998e-02 row1=14, row2=11, column=1, updated c2=3.7839837455e-02 row1=14, row2=11, column=2, updated c2=3.7839837455e-02 row1=14, row2=12, column=1, updated c2=3.5977121878e-02 row1=14, row2=12, column=2, updated c2=3.5977121878e-02 row1=14, row2=13, column=1, updated c2=3.6107177937e-02 row1=14, row2=13, column=2, updated c2=3.6107177937e-02 row1=14, row2=14, column=1, updated c2=3.7424634916e-02 row1=14, row2=14, column=2, updated c2=3.7424634916e-02 row1=14, row2=15, column=1, updated c2=3.7757162216e-02 row1=14, row2=15, column=2, updated c2=3.7757162216e-02 row1=14, row2=16, column=1, updated c2=3.5460940464e-02 row1=14, row2=16, column=2, updated c2=3.5460940464e-02 row1=14, row2=17, column=1, updated c2=3.5959745530e-02 row1=14, row2=17, column=2, updated c2=3.5959745530e-02 row1=14, row2=18, column=1, updated c2=4.1547903661e-02 row1=14, row2=18, column=2, updated c2=4.1547903661e-02 row1=14, row2=19, column=1, updated c2=4.0241189080e-02 row1=14, row2=19, column=2, updated c2=4.0241189080e-02 row1=14, row2=20, column=1, updated c2=3.6150425981e-02 row1=14, row2=20, column=2, updated c2=3.6150425981e-02 row1=15, row2=1, column=1, updated c2=3.7190096781e-02 row1=15, row2=1, column=2, updated c2=3.7190096781e-02 row1=15, row2=2, column=1, updated c2=3.6920228854e-02 row1=15, row2=2, column=2, updated c2=3.6920228854e-02 row1=15, row2=3, column=1, updated c2=4.3192630142e-02 row1=15, row2=3, column=2, updated c2=4.3192630142e-02 row1=15, row2=4, column=1, updated c2=3.7971743423e-02 row1=15, row2=4, column=2, updated c2=3.7971743423e-02 row1=15, row2=5, column=1, updated c2=3.7674305549e-02 row1=15, row2=5, column=2, updated c2=3.7674305549e-02 row1=15, row2=6, column=1, updated c2=3.8168747669e-02 row1=15, row2=6, column=2, updated c2=3.8168747669e-02 row1=15, row2=7, column=1, updated c2=3.6784552445e-02 row1=15, row2=7, column=2, updated c2=3.6784552445e-02 row1=15, row2=8, column=1, updated c2=3.7757162216e-02 row1=15, row2=8, column=2, updated c2=3.7757162216e-02 row1=15, row2=9, column=1, updated c2=3.5985806905e-02 row1=15, row2=9, column=2, updated c2=3.5985806905e-02 row1=15, row2=10, column=1, updated c2=3.9058972063e-02 row1=15, row2=10, column=2, updated c2=3.9058972063e-02 row1=15, row2=11, column=1, updated c2=4.0038772441e-02 row1=15, row2=11, column=2, updated c2=4.0038772441e-02 row1=15, row2=12, column=1, updated c2=3.7790254016e-02 row1=15, row2=12, column=2, updated c2=3.7790254016e-02 row1=15, row2=13, column=1, updated c2=4.5041406490e-02 row1=15, row2=13, column=2, updated c2=4.5041406490e-02 row1=15, row2=14, column=1, updated c2=3.7757162216e-02 row1=15, row2=14, column=2, updated c2=3.7757162216e-02 row1=15, row2=15, column=1, updated c2=3.7424634916e-02 row1=15, row2=15, column=2, updated c2=3.7424634916e-02 row1=15, row2=16, column=1, updated c2=3.7466362228e-02 row1=15, row2=16, column=2, updated c2=3.7466362228e-02 row1=15, row2=17, column=1, updated c2=3.7938809926e-02 row1=15, row2=17, column=2, updated c2=3.7938809926e-02 row1=15, row2=18, column=1, updated c2=3.7963512727e-02 row1=15, row2=18, column=2, updated c2=3.7963512727e-02 row1=15, row2=19, column=1, updated c2=3.7591266254e-02 row1=15, row2=19, column=2, updated c2=3.7591266254e-02 row1=15, row2=20, column=1, updated c2=3.6767557692e-02 row1=15, row2=20, column=2, updated c2=3.6767557692e-02 row1=16, row2=1, column=1, updated c2=3.7156470481e-02 row1=16, row2=1, column=2, updated c2=3.7156470481e-02 row1=16, row2=2, column=1, updated c2=3.7341040406e-02 row1=16, row2=2, column=2, updated c2=3.7341040406e-02 row1=16, row2=3, column=1, updated c2=4.5558789477e-02 row1=16, row2=3, column=2, updated c2=4.5558789477e-02 row1=16, row2=4, column=1, updated c2=3.7666009858e-02 row1=16, row2=4, column=2, updated c2=3.7666009858e-02 row1=16, row2=5, column=1, updated c2=3.7674305549e-02 row1=16, row2=5, column=2, updated c2=3.7674305549e-02 row1=16, row2=6, column=1, updated c2=3.6063878031e-02 row1=16, row2=6, column=2, updated c2=3.6063878031e-02 row1=16, row2=7, column=1, updated c2=3.4195808202e-02 row1=16, row2=7, column=2, updated c2=3.4195808202e-02 row1=16, row2=8, column=1, updated c2=3.8818208338e-02 row1=16, row2=8, column=2, updated c2=3.8818208338e-02 row1=16, row2=9, column=1, updated c2=3.3587249048e-02 row1=16, row2=9, column=2, updated c2=3.3587249048e-02 row1=16, row2=10, column=1, updated c2=3.9693869786e-02 row1=16, row2=10, column=2, updated c2=3.9693869786e-02 row1=16, row2=11, column=1, updated c2=4.0357506100e-02 row1=16, row2=11, column=2, updated c2=4.0357506100e-02 row1=16, row2=12, column=1, updated c2=3.7341040406e-02 row1=16, row2=12, column=2, updated c2=3.7341040406e-02 row1=16, row2=13, column=1, updated c2=4.6495734198e-02 row1=16, row2=13, column=2, updated c2=4.6495734198e-02 row1=16, row2=14, column=1, updated c2=3.5460940464e-02 row1=16, row2=14, column=2, updated c2=3.5460940464e-02 row1=16, row2=15, column=1, updated c2=3.7466362228e-02 row1=16, row2=15, column=2, updated c2=3.7466362228e-02 row1=16, row2=16, column=1, updated c2=3.7424634916e-02 row1=16, row2=16, column=2, updated c2=3.7424634916e-02 row1=16, row2=17, column=1, updated c2=3.9456980353e-02 row1=16, row2=17, column=2, updated c2=3.9456980353e-02 row1=16, row2=18, column=1, updated c2=3.6665423748e-02 row1=16, row2=18, column=2, updated c2=3.6665423748e-02 row1=16, row2=19, column=1, updated c2=4.1056099408e-02 row1=16, row2=19, column=2, updated c2=4.1056099408e-02 row1=16, row2=20, column=1, updated c2=3.8070372977e-02 row1=16, row2=20, column=2, updated c2=3.8070372977e-02 row1=17, row2=1, column=1, updated c2=3.8527305883e-02 row1=17, row2=1, column=2, updated c2=3.8527305883e-02 row1=17, row2=2, column=1, updated c2=3.7524702512e-02 row1=17, row2=2, column=2, updated c2=3.7524702512e-02 row1=17, row2=3, column=1, updated c2=3.8209662372e-02 row1=17, row2=3, column=2, updated c2=3.8209662372e-02 row1=17, row2=4, column=1, updated c2=3.8332144456e-02 row1=17, row2=4, column=2, updated c2=3.8332144456e-02 row1=17, row2=5, column=1, updated c2=3.8632606676e-02 row1=17, row2=5, column=2, updated c2=3.8632606676e-02 row1=17, row2=6, column=1, updated c2=4.0334269531e-02 row1=17, row2=6, column=2, updated c2=4.0334269531e-02 row1=17, row2=7, column=1, updated c2=3.3363202763e-02 row1=17, row2=7, column=2, updated c2=3.3363202763e-02 row1=17, row2=8, column=1, updated c2=3.7382861028e-02 row1=17, row2=8, column=2, updated c2=3.7382861028e-02 row1=17, row2=9, column=1, updated c2=3.3828291394e-02 row1=17, row2=9, column=2, updated c2=3.3828291394e-02 row1=17, row2=10, column=1, updated c2=3.6852453088e-02 row1=17, row2=10, column=2, updated c2=3.6852453088e-02 row1=17, row2=11, column=1, updated c2=3.6835489662e-02 row1=17, row2=11, column=2, updated c2=3.6835489662e-02 row1=17, row2=12, column=1, updated c2=4.1048487166e-02 row1=17, row2=12, column=2, updated c2=4.1048487166e-02 row1=17, row2=13, column=1, updated c2=3.7922332452e-02 row1=17, row2=13, column=2, updated c2=3.7922332452e-02 row1=17, row2=14, column=1, updated c2=3.5959745530e-02 row1=17, row2=14, column=2, updated c2=3.5959745530e-02 row1=17, row2=15, column=1, updated c2=3.7938809926e-02 row1=17, row2=15, column=2, updated c2=3.7938809926e-02 row1=17, row2=16, column=1, updated c2=3.9456980353e-02 row1=17, row2=16, column=2, updated c2=3.9456980353e-02 row1=17, row2=17, column=1, updated c2=3.7424634916e-02 row1=17, row2=17, column=2, updated c2=3.7424634916e-02 row1=17, row2=18, column=1, updated c2=4.4447759208e-02 row1=17, row2=18, column=2, updated c2=4.4447759208e-02 row1=17, row2=19, column=1, updated c2=3.6176349990e-02 row1=17, row2=19, column=2, updated c2=3.6176349990e-02 row1=17, row2=20, column=1, updated c2=3.7582952234e-02 row1=17, row2=20, column=2, updated c2=3.7582952234e-02 row1=18, row2=1, column=1, updated c2=4.0458043682e-02 row1=18, row2=1, column=2, updated c2=4.0458043682e-02 row1=18, row2=2, column=1, updated c2=3.7341040406e-02 row1=18, row2=2, column=2, updated c2=3.7341040406e-02 row1=18, row2=3, column=1, updated c2=5.2326888868e-02 row1=18, row2=3, column=2, updated c2=5.2326888868e-02 row1=18, row2=4, column=1, updated c2=3.7996424814e-02 row1=18, row2=4, column=2, updated c2=3.7996424814e-02 row1=18, row2=5, column=1, updated c2=3.8494847689e-02 row1=18, row2=5, column=2, updated c2=3.8494847689e-02 row1=18, row2=6, column=1, updated c2=3.8168747669e-02 row1=18, row2=6, column=2, updated c2=3.8168747669e-02 row1=18, row2=7, column=1, updated c2=3.7173287433e-02 row1=18, row2=7, column=2, updated c2=3.7173287433e-02 row1=18, row2=8, column=1, updated c2=4.1914833873e-02 row1=18, row2=8, column=2, updated c2=4.1914833873e-02 row1=18, row2=9, column=1, updated c2=3.8689188394e-02 row1=18, row2=9, column=2, updated c2=3.8689188394e-02 row1=18, row2=10, column=1, updated c2=4.0085574695e-02 row1=18, row2=10, column=2, updated c2=4.0085574695e-02 row1=18, row2=11, column=1, updated c2=3.9018947943e-02 row1=18, row2=11, column=2, updated c2=3.9018947943e-02 row1=18, row2=12, column=1, updated c2=3.6665423748e-02 row1=18, row2=12, column=2, updated c2=3.6665423748e-02 row1=18, row2=13, column=1, updated c2=5.0552975171e-02 row1=18, row2=13, column=2, updated c2=5.0552975171e-02 row1=18, row2=14, column=1, updated c2=4.1547903661e-02 row1=18, row2=14, column=2, updated c2=4.1547903661e-02 row1=18, row2=15, column=1, updated c2=3.7963512727e-02 row1=18, row2=15, column=2, updated c2=3.7963512727e-02 row1=18, row2=16, column=1, updated c2=3.6665423748e-02 row1=18, row2=16, column=2, updated c2=3.6665423748e-02 row1=18, row2=17, column=1, updated c2=4.4447759208e-02 row1=18, row2=17, column=2, updated c2=4.4447759208e-02 row1=18, row2=18, column=1, updated c2=3.7424634916e-02 row1=18, row2=18, column=2, updated c2=3.7424634916e-02 row1=18, row2=19, column=1, updated c2=5.0971593055e-02 row1=18, row2=19, column=2, updated c2=5.0971593055e-02 row1=18, row2=20, column=1, updated c2=4.2418784738e-02 row1=18, row2=20, column=2, updated c2=4.2418784738e-02 row1=19, row2=1, column=1, updated c2=4.1200464786e-02 row1=19, row2=1, column=2, updated c2=4.1200464786e-02 row1=19, row2=2, column=1, updated c2=3.7963512727e-02 row1=19, row2=2, column=2, updated c2=3.7963512727e-02 row1=19, row2=3, column=1, updated c2=3.6665423748e-02 row1=19, row2=3, column=2, updated c2=3.6665423748e-02 row1=19, row2=4, column=1, updated c2=3.9010938192e-02 row1=19, row2=4, column=2, updated c2=3.9010938192e-02 row1=19, row2=5, column=1, updated c2=4.0550626365e-02 row1=19, row2=5, column=2, updated c2=4.0550626365e-02 row1=19, row2=6, column=1, updated c2=4.5593072924e-02 row1=19, row2=6, column=2, updated c2=4.5593072924e-02 row1=19, row2=7, column=1, updated c2=3.7798522439e-02 row1=19, row2=7, column=2, updated c2=3.7798522439e-02 row1=19, row2=8, column=1, updated c2=3.6374486919e-02 row1=19, row2=8, column=2, updated c2=3.6374486919e-02 row1=19, row2=9, column=1, updated c2=3.8689188394e-02 row1=19, row2=9, column=2, updated c2=3.8689188394e-02 row1=19, row2=10, column=1, updated c2=3.6279860785e-02 row1=19, row2=10, column=2, updated c2=3.6279860785e-02 row1=19, row2=11, column=1, updated c2=3.7341040406e-02 row1=19, row2=11, column=2, updated c2=3.7341040406e-02 row1=19, row2=12, column=1, updated c2=4.3595909196e-02 row1=19, row2=12, column=2, updated c2=4.3595909196e-02 row1=19, row2=13, column=1, updated c2=3.5890156013e-02 row1=19, row2=13, column=2, updated c2=3.5890156013e-02 row1=19, row2=14, column=1, updated c2=4.0241189080e-02 row1=19, row2=14, column=2, updated c2=4.0241189080e-02 row1=19, row2=15, column=1, updated c2=3.7591266254e-02 row1=19, row2=15, column=2, updated c2=3.7591266254e-02 row1=19, row2=16, column=1, updated c2=4.1056099408e-02 row1=19, row2=16, column=2, updated c2=4.1056099408e-02 row1=19, row2=17, column=1, updated c2=3.6176349990e-02 row1=19, row2=17, column=2, updated c2=3.6176349990e-02 row1=19, row2=18, column=1, updated c2=5.0971593055e-02 row1=19, row2=18, column=2, updated c2=5.0971593055e-02 row1=19, row2=19, column=1, updated c2=3.7424634916e-02 row1=19, row2=19, column=2, updated c2=3.7424634916e-02 row1=19, row2=20, column=1, updated c2=3.6835489662e-02 row1=19, row2=20, column=2, updated c2=3.6835489662e-02 row1=20, row2=1, column=1, updated c2=4.0819459803e-02 row1=20, row2=1, column=2, updated c2=4.0819459803e-02 row1=20, row2=2, column=1, updated c2=3.7897602808e-02 row1=20, row2=2, column=2, updated c2=3.7897602808e-02 row1=20, row2=3, column=1, updated c2=3.9851013771e-02 row1=20, row2=3, column=2, updated c2=3.9851013771e-02 row1=20, row2=4, column=1, updated c2=3.7257258335e-02 row1=20, row2=4, column=2, updated c2=3.7257258335e-02 row1=20, row2=5, column=1, updated c2=4.0256717435e-02 row1=20, row2=5, column=2, updated c2=4.0256717435e-02 row1=20, row2=6, column=1, updated c2=3.8632606676e-02 row1=20, row2=6, column=2, updated c2=3.8632606676e-02 row1=20, row2=7, column=1, updated c2=3.3966576198e-02 row1=20, row2=7, column=2, updated c2=3.3966576198e-02 row1=20, row2=8, column=1, updated c2=3.7407930959e-02 row1=20, row2=8, column=2, updated c2=3.7407930959e-02 row1=20, row2=9, column=1, updated c2=3.4287071887e-02 row1=20, row2=9, column=2, updated c2=3.4287071887e-02 row1=20, row2=10, column=1, updated c2=3.7148059150e-02 row1=20, row2=10, column=2, updated c2=3.7148059150e-02 row1=20, row2=11, column=1, updated c2=3.7341040406e-02 row1=20, row2=11, column=2, updated c2=3.7341040406e-02 row1=20, row2=12, column=1, updated c2=3.9456980353e-02 row1=20, row2=12, column=2, updated c2=3.9456980353e-02 row1=20, row2=13, column=1, updated c2=3.9106946935e-02 row1=20, row2=13, column=2, updated c2=3.9106946935e-02 row1=20, row2=14, column=1, updated c2=3.6150425981e-02 row1=20, row2=14, column=2, updated c2=3.6150425981e-02 row1=20, row2=15, column=1, updated c2=3.6767557692e-02 row1=20, row2=15, column=2, updated c2=3.6767557692e-02 row1=20, row2=16, column=1, updated c2=3.8070372977e-02 row1=20, row2=16, column=2, updated c2=3.8070372977e-02 row1=20, row2=17, column=1, updated c2=3.7582952234e-02 row1=20, row2=17, column=2, updated c2=3.7582952234e-02 row1=20, row2=18, column=1, updated c2=4.2418784738e-02 row1=20, row2=18, column=2, updated c2=4.2418784738e-02 row1=20, row2=19, column=1, updated c2=3.6835489662e-02 row1=20, row2=19, column=2, updated c2=3.6835489662e-02 row1=20, row2=20, column=1, updated c2=3.7424634916e-02 row1=20, row2=20, column=2, updated c2=3.7424634916e-02 initial design=design_dim_50_size_100_centered_perturbLHS.csv c2=2.5933526830e+01, phip=5.0679289904e-01, mindist=1.9883410170e+00 row1=1, row2=1, column=1, updated c2=2.5933526830e+01 row1=1, row2=1, column=11, updated c2=2.5933526830e+01 row1=1, row2=1, column=21, updated c2=2.5933526830e+01 row1=1, row2=1, column=31, updated c2=2.5933526830e+01 row1=1, row2=1, column=41, updated c2=2.5933526830e+01 row1=1, row2=11, column=1, updated c2=2.5933738073e+01 row1=1, row2=11, column=11, updated c2=2.5924419236e+01 row1=1, row2=11, column=21, updated c2=2.5940814355e+01 row1=1, row2=11, column=31, updated c2=2.5939838190e+01 row1=1, row2=11, column=41, updated c2=2.5974918099e+01 row1=1, row2=21, column=1, updated c2=2.5954966503e+01 row1=1, row2=21, column=11, updated c2=2.5976709061e+01 row1=1, row2=21, column=21, updated c2=2.5921412261e+01 row1=1, row2=21, column=31, updated c2=2.5933949755e+01 row1=1, row2=21, column=41, updated c2=2.5978627876e+01 row1=1, row2=31, column=1, updated c2=2.5937844658e+01 row1=1, row2=31, column=11, updated c2=2.5987869277e+01 row1=1, row2=31, column=21, updated c2=2.5906262058e+01 row1=1, row2=31, column=31, updated c2=2.5939543048e+01 row1=1, row2=31, column=41, updated c2=2.5981361854e+01 row1=1, row2=41, column=1, updated c2=2.5949158713e+01 row1=1, row2=41, column=11, updated c2=2.5951281144e+01 row1=1, row2=41, column=21, updated c2=2.5938192548e+01 row1=1, row2=41, column=31, updated c2=2.5931680673e+01 row1=1, row2=41, column=41, updated c2=2.5974584692e+01 row1=1, row2=51, column=1, updated c2=2.5923873642e+01 row1=1, row2=51, column=11, updated c2=2.5969994810e+01 row1=1, row2=51, column=21, updated c2=2.5917551142e+01 row1=1, row2=51, column=31, updated c2=2.5934989583e+01 row1=1, row2=51, column=41, updated c2=2.5972805980e+01 row1=1, row2=61, column=1, updated c2=2.5935767193e+01 row1=1, row2=61, column=11, updated c2=2.5936876014e+01 row1=1, row2=61, column=21, updated c2=2.5932238787e+01 row1=1, row2=61, column=31, updated c2=2.5932255853e+01 row1=1, row2=61, column=41, updated c2=2.5933083520e+01 row1=1, row2=71, column=1, updated c2=2.5987080640e+01 row1=1, row2=71, column=11, updated c2=2.5979899704e+01 row1=1, row2=71, column=21, updated c2=2.5900914561e+01 row1=1, row2=71, column=31, updated c2=2.5944742446e+01 row1=1, row2=71, column=41, updated c2=2.5932103372e+01 row1=1, row2=81, column=1, updated c2=2.5944774499e+01 row1=1, row2=81, column=11, updated c2=2.5943273285e+01 row1=1, row2=81, column=21, updated c2=2.5914209186e+01 row1=1, row2=81, column=31, updated c2=2.5938827900e+01 row1=1, row2=81, column=41, updated c2=2.5940720373e+01 row1=1, row2=91, column=1, updated c2=2.5967106387e+01 row1=1, row2=91, column=11, updated c2=2.5980127960e+01 row1=1, row2=91, column=21, updated c2=2.5915269145e+01 row1=1, row2=91, column=31, updated c2=2.5939196990e+01 row1=1, row2=91, column=41, updated c2=2.5966376233e+01 row1=11, row2=1, column=1, updated c2=2.5933738073e+01 row1=11, row2=1, column=11, updated c2=2.5924419236e+01 row1=11, row2=1, column=21, updated c2=2.5940814355e+01 row1=11, row2=1, column=31, updated c2=2.5939838190e+01 row1=11, row2=1, column=41, updated c2=2.5974918099e+01 row1=11, row2=11, column=1, updated c2=2.5933526830e+01 row1=11, row2=11, column=11, updated c2=2.5933526830e+01 row1=11, row2=11, column=21, updated c2=2.5933526830e+01 row1=11, row2=11, column=31, updated c2=2.5933526830e+01 row1=11, row2=11, column=41, updated c2=2.5933526830e+01 row1=11, row2=21, column=1, updated c2=2.5928795918e+01 row1=11, row2=21, column=11, updated c2=2.5924931714e+01 row1=11, row2=21, column=21, updated c2=2.5939179436e+01 row1=11, row2=21, column=31, updated c2=2.5934834730e+01 row1=11, row2=21, column=41, updated c2=2.5931512526e+01 row1=11, row2=31, column=1, updated c2=2.5932178748e+01 row1=11, row2=31, column=11, updated c2=2.5923343371e+01 row1=11, row2=31, column=21, updated c2=2.5947615362e+01 row1=11, row2=31, column=31, updated c2=2.5933647317e+01 row1=11, row2=31, column=41, updated c2=2.5930624207e+01 row1=11, row2=41, column=1, updated c2=2.5908543683e+01 row1=11, row2=41, column=11, updated c2=2.5900818869e+01 row1=11, row2=41, column=21, updated c2=2.6002456865e+01 row1=11, row2=41, column=31, updated c2=2.5944480372e+01 row1=11, row2=41, column=41, updated c2=2.5911272893e+01 row1=11, row2=51, column=1, updated c2=2.5936803709e+01 row1=11, row2=51, column=11, updated c2=2.5924824746e+01 row1=11, row2=51, column=21, updated c2=2.5941287381e+01 row1=11, row2=51, column=31, updated c2=2.5934564097e+01 row1=11, row2=51, column=41, updated c2=2.5932417272e+01 row1=11, row2=61, column=1, updated c2=2.5889737515e+01 row1=11, row2=61, column=11, updated c2=2.5938218146e+01 row1=11, row2=61, column=21, updated c2=2.5940752674e+01 row1=11, row2=61, column=31, updated c2=2.5926697661e+01 row1=11, row2=61, column=41, updated c2=2.5939807769e+01 row1=11, row2=71, column=1, updated c2=2.5920611924e+01 row1=11, row2=71, column=11, updated c2=2.5919841318e+01 row1=11, row2=71, column=21, updated c2=2.5963690569e+01 row1=11, row2=71, column=31, updated c2=2.5930867137e+01 row1=11, row2=71, column=41, updated c2=2.5946932200e+01 row1=11, row2=81, column=1, updated c2=2.5926072692e+01 row1=11, row2=81, column=11, updated c2=2.5923227317e+01 row1=11, row2=81, column=21, updated c2=2.5973967666e+01 row1=11, row2=81, column=31, updated c2=2.5932338439e+01 row1=11, row2=81, column=41, updated c2=2.5945749316e+01 row1=11, row2=91, column=1, updated c2=2.5931575723e+01 row1=11, row2=91, column=11, updated c2=2.5931156155e+01 row1=11, row2=91, column=21, updated c2=2.5936360231e+01 row1=11, row2=91, column=31, updated c2=2.5933607427e+01 row1=11, row2=91, column=41, updated c2=2.5934057081e+01 row1=21, row2=1, column=1, updated c2=2.5954966503e+01 row1=21, row2=1, column=11, updated c2=2.5976709061e+01 row1=21, row2=1, column=21, updated c2=2.5921412261e+01 row1=21, row2=1, column=31, updated c2=2.5933949755e+01 row1=21, row2=1, column=41, updated c2=2.5978627876e+01 row1=21, row2=11, column=1, updated c2=2.5928795918e+01 row1=21, row2=11, column=11, updated c2=2.5924931714e+01 row1=21, row2=11, column=21, updated c2=2.5939179436e+01 row1=21, row2=11, column=31, updated c2=2.5934834730e+01 row1=21, row2=11, column=41, updated c2=2.5931512526e+01 row1=21, row2=21, column=1, updated c2=2.5933526830e+01 row1=21, row2=21, column=11, updated c2=2.5933526830e+01 row1=21, row2=21, column=21, updated c2=2.5933526830e+01 row1=21, row2=21, column=31, updated c2=2.5933526830e+01 row1=21, row2=21, column=41, updated c2=2.5933526830e+01 row1=21, row2=31, column=1, updated c2=2.5933967735e+01 row1=21, row2=31, column=11, updated c2=2.5933571856e+01 row1=21, row2=31, column=21, updated c2=2.5934918169e+01 row1=21, row2=31, column=31, updated c2=2.5934349306e+01 row1=21, row2=31, column=41, updated c2=2.5933085009e+01 row1=21, row2=41, column=1, updated c2=2.5927089273e+01 row1=21, row2=41, column=11, updated c2=2.5935985518e+01 row1=21, row2=41, column=21, updated c2=2.5967735380e+01 row1=21, row2=41, column=31, updated c2=2.5937988045e+01 row1=21, row2=41, column=41, updated c2=2.5922420103e+01 row1=21, row2=51, column=1, updated c2=2.5936295955e+01 row1=21, row2=51, column=11, updated c2=2.5934349238e+01 row1=21, row2=51, column=21, updated c2=2.5933676847e+01 row1=21, row2=51, column=31, updated c2=2.5933506998e+01 row1=21, row2=51, column=41, updated c2=2.5934321006e+01 row1=21, row2=61, column=1, updated c2=2.5918262198e+01 row1=21, row2=61, column=11, updated c2=2.6004851679e+01 row1=21, row2=61, column=21, updated c2=2.5917406796e+01 row1=21, row2=61, column=31, updated c2=2.5922504185e+01 row1=21, row2=61, column=41, updated c2=2.5948485381e+01 row1=21, row2=71, column=1, updated c2=2.5932892846e+01 row1=21, row2=71, column=11, updated c2=2.5933331275e+01 row1=21, row2=71, column=21, updated c2=2.5942603276e+01 row1=21, row2=71, column=31, updated c2=2.5932768488e+01 row1=21, row2=71, column=41, updated c2=2.5941748901e+01 row1=21, row2=81, column=1, updated c2=2.5935148415e+01 row1=21, row2=81, column=11, updated c2=2.5942545114e+01 row1=21, row2=81, column=21, updated c2=2.5949520529e+01 row1=21, row2=81, column=31, updated c2=2.5931941958e+01 row1=21, row2=81, column=41, updated c2=2.5944397996e+01 row1=21, row2=91, column=1, updated c2=2.5934710996e+01 row1=21, row2=91, column=11, updated c2=2.5933332290e+01 row1=21, row2=91, column=21, updated c2=2.5932919397e+01 row1=21, row2=91, column=31, updated c2=2.5934733035e+01 row1=21, row2=91, column=41, updated c2=2.5931706758e+01 row1=31, row2=1, column=1, updated c2=2.5937844658e+01 row1=31, row2=1, column=11, updated c2=2.5987869277e+01 row1=31, row2=1, column=21, updated c2=2.5906262058e+01 row1=31, row2=1, column=31, updated c2=2.5939543048e+01 row1=31, row2=1, column=41, updated c2=2.5981361854e+01 row1=31, row2=11, column=1, updated c2=2.5932178748e+01 row1=31, row2=11, column=11, updated c2=2.5923343371e+01 row1=31, row2=11, column=21, updated c2=2.5947615362e+01 row1=31, row2=11, column=31, updated c2=2.5933647317e+01 row1=31, row2=11, column=41, updated c2=2.5930624207e+01 row1=31, row2=21, column=1, updated c2=2.5933967735e+01 row1=31, row2=21, column=11, updated c2=2.5933571856e+01 row1=31, row2=21, column=21, updated c2=2.5934918169e+01 row1=31, row2=21, column=31, updated c2=2.5934349306e+01 row1=31, row2=21, column=41, updated c2=2.5933085009e+01 row1=31, row2=31, column=1, updated c2=2.5933526830e+01 row1=31, row2=31, column=11, updated c2=2.5933526830e+01 row1=31, row2=31, column=21, updated c2=2.5933526830e+01 row1=31, row2=31, column=31, updated c2=2.5933526830e+01 row1=31, row2=31, column=41, updated c2=2.5933526830e+01 row1=31, row2=41, column=1, updated c2=2.5919597452e+01 row1=31, row2=41, column=11, updated c2=2.5941804369e+01 row1=31, row2=41, column=21, updated c2=2.5946686904e+01 row1=31, row2=41, column=31, updated c2=2.5942452875e+01 row1=31, row2=41, column=41, updated c2=2.5924017485e+01 row1=31, row2=51, column=1, updated c2=2.5933933947e+01 row1=31, row2=51, column=11, updated c2=2.5934573167e+01 row1=31, row2=51, column=21, updated c2=2.5933823342e+01 row1=31, row2=51, column=31, updated c2=2.5934237310e+01 row1=31, row2=51, column=41, updated c2=2.5933572446e+01 row1=31, row2=61, column=1, updated c2=2.5903691852e+01 row1=31, row2=61, column=11, updated c2=2.6019288651e+01 row1=31, row2=61, column=21, updated c2=2.5898919500e+01 row1=31, row2=61, column=31, updated c2=2.5929826529e+01 row1=31, row2=61, column=41, updated c2=2.5952568660e+01 row1=31, row2=71, column=1, updated c2=2.5934875264e+01 row1=31, row2=71, column=11, updated c2=2.5934029285e+01 row1=31, row2=71, column=21, updated c2=2.5936546118e+01 row1=31, row2=71, column=31, updated c2=2.5933120401e+01 row1=31, row2=71, column=41, updated c2=2.5941607848e+01 row1=31, row2=81, column=1, updated c2=2.5930845962e+01 row1=31, row2=81, column=11, updated c2=2.5946045086e+01 row1=31, row2=81, column=21, updated c2=2.5938701275e+01 row1=31, row2=81, column=31, updated c2=2.5933207967e+01 row1=31, row2=81, column=41, updated c2=2.5944841938e+01 row1=31, row2=91, column=1, updated c2=2.5938065326e+01 row1=31, row2=91, column=11, updated c2=2.5932007590e+01 row1=31, row2=91, column=21, updated c2=2.5937100519e+01 row1=31, row2=91, column=31, updated c2=2.5933311266e+01 row1=31, row2=91, column=41, updated c2=2.5930951880e+01 row1=41, row2=1, column=1, updated c2=2.5949158713e+01 row1=41, row2=1, column=11, updated c2=2.5951281144e+01 row1=41, row2=1, column=21, updated c2=2.5938192548e+01 row1=41, row2=1, column=31, updated c2=2.5931680673e+01 row1=41, row2=1, column=41, updated c2=2.5974584692e+01 row1=41, row2=11, column=1, updated c2=2.5908543683e+01 row1=41, row2=11, column=11, updated c2=2.5900818869e+01 row1=41, row2=11, column=21, updated c2=2.6002456865e+01 row1=41, row2=11, column=31, updated c2=2.5944480372e+01 row1=41, row2=11, column=41, updated c2=2.5911272893e+01 row1=41, row2=21, column=1, updated c2=2.5927089273e+01 row1=41, row2=21, column=11, updated c2=2.5935985518e+01 row1=41, row2=21, column=21, updated c2=2.5967735380e+01 row1=41, row2=21, column=31, updated c2=2.5937988045e+01 row1=41, row2=21, column=41, updated c2=2.5922420103e+01 row1=41, row2=31, column=1, updated c2=2.5919597452e+01 row1=41, row2=31, column=11, updated c2=2.5941804369e+01 row1=41, row2=31, column=21, updated c2=2.5946686904e+01 row1=41, row2=31, column=31, updated c2=2.5942452875e+01 row1=41, row2=31, column=41, updated c2=2.5924017485e+01 row1=41, row2=41, column=1, updated c2=2.5933526830e+01 row1=41, row2=41, column=11, updated c2=2.5933526830e+01 row1=41, row2=41, column=21, updated c2=2.5933526830e+01 row1=41, row2=41, column=31, updated c2=2.5933526830e+01 row1=41, row2=41, column=41, updated c2=2.5933526830e+01 row1=41, row2=51, column=1, updated c2=2.5913834050e+01 row1=41, row2=51, column=11, updated c2=2.5932986348e+01 row1=41, row2=51, column=21, updated c2=2.5961719168e+01 row1=41, row2=51, column=31, updated c2=2.5938755235e+01 row1=41, row2=51, column=41, updated c2=2.5921962697e+01 row1=41, row2=61, column=1, updated c2=2.5931653815e+01 row1=41, row2=61, column=11, updated c2=2.5972349336e+01 row1=41, row2=61, column=21, updated c2=2.5926644669e+01 row1=41, row2=61, column=31, updated c2=2.5927208354e+01 row1=41, row2=61, column=41, updated c2=2.5957022115e+01 row1=41, row2=71, column=1, updated c2=2.5944361100e+01 row1=41, row2=71, column=11, updated c2=2.5938647684e+01 row1=41, row2=71, column=21, updated c2=2.5931770348e+01 row1=41, row2=71, column=31, updated c2=2.5945027185e+01 row1=41, row2=71, column=41, updated c2=2.5915381659e+01 row1=41, row2=81, column=1, updated c2=2.5928684886e+01 row1=41, row2=81, column=11, updated c2=2.5927796897e+01 row1=41, row2=81, column=21, updated c2=2.5934152888e+01 row1=41, row2=81, column=31, updated c2=2.5939438515e+01 row1=41, row2=81, column=41, updated c2=2.5926855278e+01 row1=41, row2=91, column=1, updated c2=2.5930326906e+01 row1=41, row2=91, column=11, updated c2=2.5935552663e+01 row1=41, row2=91, column=21, updated c2=2.5969027772e+01 row1=41, row2=91, column=31, updated c2=2.5943110364e+01 row1=41, row2=91, column=41, updated c2=2.5911002770e+01 row1=51, row2=1, column=1, updated c2=2.5923873642e+01 row1=51, row2=1, column=11, updated c2=2.5969994810e+01 row1=51, row2=1, column=21, updated c2=2.5917551142e+01 row1=51, row2=1, column=31, updated c2=2.5934989583e+01 row1=51, row2=1, column=41, updated c2=2.5972805980e+01 row1=51, row2=11, column=1, updated c2=2.5936803709e+01 row1=51, row2=11, column=11, updated c2=2.5924824746e+01 row1=51, row2=11, column=21, updated c2=2.5941287381e+01 row1=51, row2=11, column=31, updated c2=2.5934564097e+01 row1=51, row2=11, column=41, updated c2=2.5932417272e+01 row1=51, row2=21, column=1, updated c2=2.5936295955e+01 row1=51, row2=21, column=11, updated c2=2.5934349238e+01 row1=51, row2=21, column=21, updated c2=2.5933676847e+01 row1=51, row2=21, column=31, updated c2=2.5933506998e+01 row1=51, row2=21, column=41, updated c2=2.5934321006e+01 row1=51, row2=31, column=1, updated c2=2.5933933947e+01 row1=51, row2=31, column=11, updated c2=2.5934573167e+01 row1=51, row2=31, column=21, updated c2=2.5933823342e+01 row1=51, row2=31, column=31, updated c2=2.5934237310e+01 row1=51, row2=31, column=41, updated c2=2.5933572446e+01 row1=51, row2=41, column=1, updated c2=2.5913834050e+01 row1=51, row2=41, column=11, updated c2=2.5932986348e+01 row1=51, row2=41, column=21, updated c2=2.5961719168e+01 row1=51, row2=41, column=31, updated c2=2.5938755235e+01 row1=51, row2=41, column=41, updated c2=2.5921962697e+01 row1=51, row2=51, column=1, updated c2=2.5933526830e+01 row1=51, row2=51, column=11, updated c2=2.5933526830e+01 row1=51, row2=51, column=21, updated c2=2.5933526830e+01 row1=51, row2=51, column=31, updated c2=2.5933526830e+01 row1=51, row2=51, column=41, updated c2=2.5933526830e+01 row1=51, row2=61, column=1, updated c2=2.5892224826e+01 row1=51, row2=61, column=11, updated c2=2.5995694066e+01 row1=51, row2=61, column=21, updated c2=2.5912175753e+01 row1=51, row2=61, column=31, updated c2=2.5924011520e+01 row1=51, row2=61, column=41, updated c2=2.5943889581e+01 row1=51, row2=71, column=1, updated c2=2.5937886485e+01 row1=51, row2=71, column=11, updated c2=2.5932952347e+01 row1=51, row2=71, column=21, updated c2=2.5940293428e+01 row1=51, row2=71, column=31, updated c2=2.5932923328e+01 row1=51, row2=71, column=41, updated c2=2.5940176824e+01 row1=51, row2=81, column=1, updated c2=2.5928797667e+01 row1=51, row2=81, column=11, updated c2=2.5940164614e+01 row1=51, row2=81, column=21, updated c2=2.5946164433e+01 row1=51, row2=81, column=31, updated c2=2.5932190330e+01 row1=51, row2=81, column=41, updated c2=2.5942156376e+01 row1=51, row2=91, column=1, updated c2=2.5943071906e+01 row1=51, row2=91, column=11, updated c2=2.5934401872e+01 row1=51, row2=91, column=21, updated c2=2.5933765060e+01 row1=51, row2=91, column=31, updated c2=2.5934487467e+01 row1=51, row2=91, column=41, updated c2=2.5932772594e+01 row1=61, row2=1, column=1, updated c2=2.5935767193e+01 row1=61, row2=1, column=11, updated c2=2.5936876014e+01 row1=61, row2=1, column=21, updated c2=2.5932238787e+01 row1=61, row2=1, column=31, updated c2=2.5932255853e+01 row1=61, row2=1, column=41, updated c2=2.5933083520e+01 row1=61, row2=11, column=1, updated c2=2.5889737515e+01 row1=61, row2=11, column=11, updated c2=2.5938218146e+01 row1=61, row2=11, column=21, updated c2=2.5940752674e+01 row1=61, row2=11, column=31, updated c2=2.5926697661e+01 row1=61, row2=11, column=41, updated c2=2.5939807769e+01 row1=61, row2=21, column=1, updated c2=2.5918262198e+01 row1=61, row2=21, column=11, updated c2=2.6004851679e+01 row1=61, row2=21, column=21, updated c2=2.5917406796e+01 row1=61, row2=21, column=31, updated c2=2.5922504185e+01 row1=61, row2=21, column=41, updated c2=2.5948485381e+01 row1=61, row2=31, column=1, updated c2=2.5903691852e+01 row1=61, row2=31, column=11, updated c2=2.6019288651e+01 row1=61, row2=31, column=21, updated c2=2.5898919500e+01 row1=61, row2=31, column=31, updated c2=2.5929826529e+01 row1=61, row2=31, column=41, updated c2=2.5952568660e+01 row1=61, row2=41, column=1, updated c2=2.5931653815e+01 row1=61, row2=41, column=11, updated c2=2.5972349336e+01 row1=61, row2=41, column=21, updated c2=2.5926644669e+01 row1=61, row2=41, column=31, updated c2=2.5927208354e+01 row1=61, row2=41, column=41, updated c2=2.5957022115e+01 row1=61, row2=51, column=1, updated c2=2.5892224826e+01 row1=61, row2=51, column=11, updated c2=2.5995694066e+01 row1=61, row2=51, column=21, updated c2=2.5912175753e+01 row1=61, row2=51, column=31, updated c2=2.5924011520e+01 row1=61, row2=51, column=41, updated c2=2.5943889581e+01 row1=61, row2=61, column=1, updated c2=2.5933526830e+01 row1=61, row2=61, column=11, updated c2=2.5933526830e+01 row1=61, row2=61, column=21, updated c2=2.5933526830e+01 row1=61, row2=61, column=31, updated c2=2.5933526830e+01 row1=61, row2=61, column=41, updated c2=2.5933526830e+01 row1=61, row2=71, column=1, updated c2=2.5948869284e+01 row1=61, row2=71, column=11, updated c2=2.6008859745e+01 row1=61, row2=71, column=21, updated c2=2.5889669986e+01 row1=61, row2=71, column=31, updated c2=2.5935890670e+01 row1=61, row2=71, column=41, updated c2=2.5907295681e+01 row1=61, row2=81, column=1, updated c2=2.5918681727e+01 row1=61, row2=81, column=11, updated c2=2.5958729259e+01 row1=61, row2=81, column=21, updated c2=2.5902890790e+01 row1=61, row2=81, column=31, updated c2=2.5931569280e+01 row1=61, row2=81, column=41, updated c2=2.5920085758e+01 row1=61, row2=91, column=1, updated c2=2.5924010002e+01 row1=61, row2=91, column=11, updated c2=2.6009228690e+01 row1=61, row2=91, column=21, updated c2=2.5910186090e+01 row1=61, row2=91, column=31, updated c2=2.5927235649e+01 row1=61, row2=91, column=41, updated c2=2.5933026982e+01 row1=71, row2=1, column=1, updated c2=2.5987080640e+01 row1=71, row2=1, column=11, updated c2=2.5979899704e+01 row1=71, row2=1, column=21, updated c2=2.5900914561e+01 row1=71, row2=1, column=31, updated c2=2.5944742446e+01 row1=71, row2=1, column=41, updated c2=2.5932103372e+01 row1=71, row2=11, column=1, updated c2=2.5920611924e+01 row1=71, row2=11, column=11, updated c2=2.5919841318e+01 row1=71, row2=11, column=21, updated c2=2.5963690569e+01 row1=71, row2=11, column=31, updated c2=2.5930867137e+01 row1=71, row2=11, column=41, updated c2=2.5946932200e+01 row1=71, row2=21, column=1, updated c2=2.5932892846e+01 row1=71, row2=21, column=11, updated c2=2.5933331275e+01 row1=71, row2=21, column=21, updated c2=2.5942603276e+01 row1=71, row2=21, column=31, updated c2=2.5932768488e+01 row1=71, row2=21, column=41, updated c2=2.5941748901e+01 row1=71, row2=31, column=1, updated c2=2.5934875264e+01 row1=71, row2=31, column=11, updated c2=2.5934029285e+01 row1=71, row2=31, column=21, updated c2=2.5936546118e+01 row1=71, row2=31, column=31, updated c2=2.5933120401e+01 row1=71, row2=31, column=41, updated c2=2.5941607848e+01 row1=71, row2=41, column=1, updated c2=2.5944361100e+01 row1=71, row2=41, column=11, updated c2=2.5938647684e+01 row1=71, row2=41, column=21, updated c2=2.5931770348e+01 row1=71, row2=41, column=31, updated c2=2.5945027185e+01 row1=71, row2=41, column=41, updated c2=2.5915381659e+01 row1=71, row2=51, column=1, updated c2=2.5937886485e+01 row1=71, row2=51, column=11, updated c2=2.5932952347e+01 row1=71, row2=51, column=21, updated c2=2.5940293428e+01 row1=71, row2=51, column=31, updated c2=2.5932923328e+01 row1=71, row2=51, column=41, updated c2=2.5940176824e+01 row1=71, row2=61, column=1, updated c2=2.5948869284e+01 row1=71, row2=61, column=11, updated c2=2.6008859745e+01 row1=71, row2=61, column=21, updated c2=2.5889669986e+01 row1=71, row2=61, column=31, updated c2=2.5935890670e+01 row1=71, row2=61, column=41, updated c2=2.5907295681e+01 row1=71, row2=71, column=1, updated c2=2.5933526830e+01 row1=71, row2=71, column=11, updated c2=2.5933526830e+01 row1=71, row2=71, column=21, updated c2=2.5933526830e+01 row1=71, row2=71, column=31, updated c2=2.5933526830e+01 row1=71, row2=71, column=41, updated c2=2.5933526830e+01 row1=71, row2=81, column=1, updated c2=2.5943173005e+01 row1=71, row2=81, column=11, updated c2=2.5942041835e+01 row1=71, row2=81, column=21, updated c2=2.5932759444e+01 row1=71, row2=81, column=31, updated c2=2.5934469562e+01 row1=71, row2=81, column=41, updated c2=2.5931849984e+01 row1=71, row2=91, column=1, updated c2=2.5929030997e+01 row1=71, row2=91, column=11, updated c2=2.5931819108e+01 row1=71, row2=91, column=21, updated c2=2.5947106952e+01 row1=71, row2=91, column=31, updated c2=2.5931742656e+01 row1=71, row2=91, column=41, updated c2=2.5942654154e+01 row1=81, row2=1, column=1, updated c2=2.5944774499e+01 row1=81, row2=1, column=11, updated c2=2.5943273285e+01 row1=81, row2=1, column=21, updated c2=2.5914209186e+01 row1=81, row2=1, column=31, updated c2=2.5938827900e+01 row1=81, row2=1, column=41, updated c2=2.5940720373e+01 row1=81, row2=11, column=1, updated c2=2.5926072692e+01 row1=81, row2=11, column=11, updated c2=2.5923227317e+01 row1=81, row2=11, column=21, updated c2=2.5973967666e+01 row1=81, row2=11, column=31, updated c2=2.5932338439e+01 row1=81, row2=11, column=41, updated c2=2.5945749316e+01 row1=81, row2=21, column=1, updated c2=2.5935148415e+01 row1=81, row2=21, column=11, updated c2=2.5942545114e+01 row1=81, row2=21, column=21, updated c2=2.5949520529e+01 row1=81, row2=21, column=31, updated c2=2.5931941958e+01 row1=81, row2=21, column=41, updated c2=2.5944397996e+01 row1=81, row2=31, column=1, updated c2=2.5930845962e+01 row1=81, row2=31, column=11, updated c2=2.5946045086e+01 row1=81, row2=31, column=21, updated c2=2.5938701275e+01 row1=81, row2=31, column=31, updated c2=2.5933207967e+01 row1=81, row2=31, column=41, updated c2=2.5944841938e+01 row1=81, row2=41, column=1, updated c2=2.5928684886e+01 row1=81, row2=41, column=11, updated c2=2.5927796897e+01 row1=81, row2=41, column=21, updated c2=2.5934152888e+01 row1=81, row2=41, column=31, updated c2=2.5939438515e+01 row1=81, row2=41, column=41, updated c2=2.5926855278e+01 row1=81, row2=51, column=1, updated c2=2.5928797667e+01 row1=81, row2=51, column=11, updated c2=2.5940164614e+01 row1=81, row2=51, column=21, updated c2=2.5946164433e+01 row1=81, row2=51, column=31, updated c2=2.5932190330e+01 row1=81, row2=51, column=41, updated c2=2.5942156376e+01 row1=81, row2=61, column=1, updated c2=2.5918681727e+01 row1=81, row2=61, column=11, updated c2=2.5958729259e+01 row1=81, row2=61, column=21, updated c2=2.5902890790e+01 row1=81, row2=61, column=31, updated c2=2.5931569280e+01 row1=81, row2=61, column=41, updated c2=2.5920085758e+01 row1=81, row2=71, column=1, updated c2=2.5943173005e+01 row1=81, row2=71, column=11, updated c2=2.5942041835e+01 row1=81, row2=71, column=21, updated c2=2.5932759444e+01 row1=81, row2=71, column=31, updated c2=2.5934469562e+01 row1=81, row2=71, column=41, updated c2=2.5931849984e+01 row1=81, row2=81, column=1, updated c2=2.5933526830e+01 row1=81, row2=81, column=11, updated c2=2.5933526830e+01 row1=81, row2=81, column=21, updated c2=2.5933526830e+01 row1=81, row2=81, column=31, updated c2=2.5933526830e+01 row1=81, row2=81, column=41, updated c2=2.5933526830e+01 row1=81, row2=91, column=1, updated c2=2.5939286618e+01 row1=81, row2=91, column=11, updated c2=2.5945247041e+01 row1=81, row2=91, column=21, updated c2=2.5952562965e+01 row1=81, row2=91, column=31, updated c2=2.5932456889e+01 row1=81, row2=91, column=41, updated c2=2.5941777490e+01 row1=91, row2=1, column=1, updated c2=2.5967106387e+01 row1=91, row2=1, column=11, updated c2=2.5980127960e+01 row1=91, row2=1, column=21, updated c2=2.5915269145e+01 row1=91, row2=1, column=31, updated c2=2.5939196990e+01 row1=91, row2=1, column=41, updated c2=2.5966376233e+01 row1=91, row2=11, column=1, updated c2=2.5931575723e+01 row1=91, row2=11, column=11, updated c2=2.5931156155e+01 row1=91, row2=11, column=21, updated c2=2.5936360231e+01 row1=91, row2=11, column=31, updated c2=2.5933607427e+01 row1=91, row2=11, column=41, updated c2=2.5934057081e+01 row1=91, row2=21, column=1, updated c2=2.5934710996e+01 row1=91, row2=21, column=11, updated c2=2.5933332290e+01 row1=91, row2=21, column=21, updated c2=2.5932919397e+01 row1=91, row2=21, column=31, updated c2=2.5934733035e+01 row1=91, row2=21, column=41, updated c2=2.5931706758e+01 row1=91, row2=31, column=1, updated c2=2.5938065326e+01 row1=91, row2=31, column=11, updated c2=2.5932007590e+01 row1=91, row2=31, column=21, updated c2=2.5937100519e+01 row1=91, row2=31, column=31, updated c2=2.5933311266e+01 row1=91, row2=31, column=41, updated c2=2.5930951880e+01 row1=91, row2=41, column=1, updated c2=2.5930326906e+01 row1=91, row2=41, column=11, updated c2=2.5935552663e+01 row1=91, row2=41, column=21, updated c2=2.5969027772e+01 row1=91, row2=41, column=31, updated c2=2.5943110364e+01 row1=91, row2=41, column=41, updated c2=2.5911002770e+01 row1=91, row2=51, column=1, updated c2=2.5943071906e+01 row1=91, row2=51, column=11, updated c2=2.5934401872e+01 row1=91, row2=51, column=21, updated c2=2.5933765060e+01 row1=91, row2=51, column=31, updated c2=2.5934487467e+01 row1=91, row2=51, column=41, updated c2=2.5932772594e+01 row1=91, row2=61, column=1, updated c2=2.5924010002e+01 row1=91, row2=61, column=11, updated c2=2.6009228690e+01 row1=91, row2=61, column=21, updated c2=2.5910186090e+01 row1=91, row2=61, column=31, updated c2=2.5927235649e+01 row1=91, row2=61, column=41, updated c2=2.5933026982e+01 row1=91, row2=71, column=1, updated c2=2.5929030997e+01 row1=91, row2=71, column=11, updated c2=2.5931819108e+01 row1=91, row2=71, column=21, updated c2=2.5947106952e+01 row1=91, row2=71, column=31, updated c2=2.5931742656e+01 row1=91, row2=71, column=41, updated c2=2.5942654154e+01 row1=91, row2=81, column=1, updated c2=2.5939286618e+01 row1=91, row2=81, column=11, updated c2=2.5945247041e+01 row1=91, row2=81, column=21, updated c2=2.5952562965e+01 row1=91, row2=81, column=31, updated c2=2.5932456889e+01 row1=91, row2=81, column=41, updated c2=2.5941777490e+01 row1=91, row2=91, column=1, updated c2=2.5933526830e+01 row1=91, row2=91, column=11, updated c2=2.5933526830e+01 row1=91, row2=91, column=21, updated c2=2.5933526830e+01 row1=91, row2=91, column=31, updated c2=2.5933526830e+01 row1=91, row2=91, column=41, updated c2=2.5933526830e+01 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria_perturbation_ref.val000066400000000000000000002157001307543307100315030ustar00rootroot00000000000000initial design=design_dim_2_size_20_centered_perturbLHS.csv c2=3.7424634916e-02, phip=9.2368609821e+00, mindist=1.1180339887e-01 row1=1, row2=1, column=1, updated c2=3.7424634916e-02 row1=1, row2=1, column=2, updated c2=3.7424634916e-02 row1=1, row2=2, column=1, updated c2=3.8348445843e-02 row1=1, row2=2, column=2, updated c2=3.8348445843e-02 row1=1, row2=3, column=1, updated c2=3.6962525598e-02 row1=1, row2=3, column=2, updated c2=3.6962525598e-02 row1=1, row2=4, column=1, updated c2=4.1840211503e-02 row1=1, row2=4, column=2, updated c2=4.1840211503e-02 row1=1, row2=5, column=1, updated c2=3.7399576182e-02 row1=1, row2=5, column=2, updated c2=3.7399576182e-02 row1=1, row2=6, column=1, updated c2=4.3824688232e-02 row1=1, row2=6, column=2, updated c2=4.3824688232e-02 row1=1, row2=7, column=1, updated c2=4.1989323626e-02 row1=1, row2=7, column=2, updated c2=4.1989323626e-02 row1=1, row2=8, column=1, updated c2=3.7699181670e-02 row1=1, row2=8, column=2, updated c2=3.7699181670e-02 row1=1, row2=9, column=1, updated c2=4.1690566062e-02 row1=1, row2=9, column=2, updated c2=4.1690566062e-02 row1=1, row2=10, column=1, updated c2=3.7607888782e-02 row1=1, row2=10, column=2, updated c2=3.7607888782e-02 row1=1, row2=11, column=1, updated c2=3.8656866125e-02 row1=1, row2=11, column=2, updated c2=3.8656866125e-02 row1=1, row2=12, column=1, updated c2=3.8291360626e-02 row1=1, row2=12, column=2, updated c2=3.8291360626e-02 row1=1, row2=13, column=1, updated c2=3.9583497807e-02 row1=1, row2=13, column=2, updated c2=3.9583497807e-02 row1=1, row2=14, column=1, updated c2=4.4023894632e-02 row1=1, row2=14, column=2, updated c2=4.4023894632e-02 row1=1, row2=15, column=1, updated c2=3.7190096781e-02 row1=1, row2=15, column=2, updated c2=3.7190096781e-02 row1=1, row2=16, column=1, updated c2=3.7156470481e-02 row1=1, row2=16, column=2, updated c2=3.7156470481e-02 row1=1, row2=17, column=1, updated c2=3.8527305883e-02 row1=1, row2=17, column=2, updated c2=3.8527305883e-02 row1=1, row2=18, column=1, updated c2=4.0458043682e-02 row1=1, row2=18, column=2, updated c2=4.0458043682e-02 row1=1, row2=19, column=1, updated c2=4.1200464786e-02 row1=1, row2=19, column=2, updated c2=4.1200464786e-02 row1=1, row2=20, column=1, updated c2=4.0819459803e-02 row1=1, row2=20, column=2, updated c2=4.0819459803e-02 row1=2, row2=1, column=1, updated c2=3.8348445843e-02 row1=2, row2=1, column=2, updated c2=3.8348445843e-02 row1=2, row2=2, column=1, updated c2=3.7424634916e-02 row1=2, row2=2, column=2, updated c2=3.7424634916e-02 row1=2, row2=3, column=1, updated c2=4.0542919217e-02 row1=2, row2=3, column=2, updated c2=4.0542919217e-02 row1=2, row2=4, column=1, updated c2=3.8299520867e-02 row1=2, row2=4, column=2, updated c2=3.8299520867e-02 row1=2, row2=5, column=1, updated c2=3.7632808806e-02 row1=2, row2=5, column=2, updated c2=3.7632808806e-02 row1=2, row2=6, column=1, updated c2=3.9693869786e-02 row1=2, row2=6, column=2, updated c2=3.9693869786e-02 row1=2, row2=7, column=1, updated c2=3.7872857017e-02 row1=2, row2=7, column=2, updated c2=3.7872857017e-02 row1=2, row2=8, column=1, updated c2=3.7715756636e-02 row1=2, row2=8, column=2, updated c2=3.7715756636e-02 row1=2, row2=9, column=1, updated c2=3.7641111814e-02 row1=2, row2=9, column=2, updated c2=3.7641111814e-02 row1=2, row2=10, column=1, updated c2=3.8413582215e-02 row1=2, row2=10, column=2, updated c2=3.8413582215e-02 row1=2, row2=11, column=1, updated c2=3.8608331984e-02 row1=2, row2=11, column=2, updated c2=3.8608331984e-02 row1=2, row2=12, column=1, updated c2=3.7582952234e-02 row1=2, row2=12, column=2, updated c2=3.7582952234e-02 row1=2, row2=13, column=1, updated c2=4.3091220667e-02 row1=2, row2=13, column=2, updated c2=4.3091220667e-02 row1=2, row2=14, column=1, updated c2=3.9693869786e-02 row1=2, row2=14, column=2, updated c2=3.9693869786e-02 row1=2, row2=15, column=1, updated c2=3.6920228854e-02 row1=2, row2=15, column=2, updated c2=3.6920228854e-02 row1=2, row2=16, column=1, updated c2=3.7341040406e-02 row1=2, row2=16, column=2, updated c2=3.7341040406e-02 row1=2, row2=17, column=1, updated c2=3.7524702512e-02 row1=2, row2=17, column=2, updated c2=3.7524702512e-02 row1=2, row2=18, column=1, updated c2=3.7341040406e-02 row1=2, row2=18, column=2, updated c2=3.7341040406e-02 row1=2, row2=19, column=1, updated c2=3.7963512727e-02 row1=2, row2=19, column=2, updated c2=3.7963512727e-02 row1=2, row2=20, column=1, updated c2=3.7897602808e-02 row1=2, row2=20, column=2, updated c2=3.7897602808e-02 row1=3, row2=1, column=1, updated c2=3.6962525598e-02 row1=3, row2=1, column=2, updated c2=3.6962525598e-02 row1=3, row2=2, column=1, updated c2=4.0542919217e-02 row1=3, row2=2, column=2, updated c2=4.0542919217e-02 row1=3, row2=3, column=1, updated c2=3.7424634916e-02 row1=3, row2=3, column=2, updated c2=3.7424634916e-02 row1=3, row2=4, column=1, updated c2=4.3351508608e-02 row1=3, row2=4, column=2, updated c2=4.3351508608e-02 row1=3, row2=5, column=1, updated c2=3.7458020484e-02 row1=3, row2=5, column=2, updated c2=3.7458020484e-02 row1=3, row2=6, column=1, updated c2=4.7301990430e-02 row1=3, row2=6, column=2, updated c2=4.7301990430e-02 row1=3, row2=7, column=1, updated c2=3.5759310656e-02 row1=3, row2=7, column=2, updated c2=3.5759310656e-02 row1=3, row2=8, column=1, updated c2=3.8004648382e-02 row1=3, row2=8, column=2, updated c2=3.8004648382e-02 row1=3, row2=9, column=1, updated c2=3.6115831689e-02 row1=3, row2=9, column=2, updated c2=3.6115831689e-02 row1=3, row2=10, column=1, updated c2=3.6571550399e-02 row1=3, row2=10, column=2, updated c2=3.6571550399e-02 row1=3, row2=11, column=1, updated c2=3.6580094295e-02 row1=3, row2=11, column=2, updated c2=3.6580094295e-02 row1=3, row2=12, column=1, updated c2=4.7506350087e-02 row1=3, row2=12, column=2, updated c2=4.7506350087e-02 row1=3, row2=13, column=1, updated c2=3.7021659858e-02 row1=3, row2=13, column=2, updated c2=3.7021659858e-02 row1=3, row2=14, column=1, updated c2=3.9218660082e-02 row1=3, row2=14, column=2, updated c2=3.9218660082e-02 row1=3, row2=15, column=1, updated c2=4.3192630142e-02 row1=3, row2=15, column=2, updated c2=4.3192630142e-02 row1=3, row2=16, column=1, updated c2=4.5558789477e-02 row1=3, row2=16, column=2, updated c2=4.5558789477e-02 row1=3, row2=17, column=1, updated c2=3.8209662372e-02 row1=3, row2=17, column=2, updated c2=3.8209662372e-02 row1=3, row2=18, column=1, updated c2=5.2326888868e-02 row1=3, row2=18, column=2, updated c2=5.2326888868e-02 row1=3, row2=19, column=1, updated c2=3.6665423748e-02 row1=3, row2=19, column=2, updated c2=3.6665423748e-02 row1=3, row2=20, column=1, updated c2=3.9851013771e-02 row1=3, row2=20, column=2, updated c2=3.9851013771e-02 row1=4, row2=1, column=1, updated c2=4.1840211503e-02 row1=4, row2=1, column=2, updated c2=4.1840211503e-02 row1=4, row2=2, column=1, updated c2=3.8299520867e-02 row1=4, row2=2, column=2, updated c2=3.8299520867e-02 row1=4, row2=3, column=1, updated c2=4.3351508608e-02 row1=4, row2=3, column=2, updated c2=4.3351508608e-02 row1=4, row2=4, column=1, updated c2=3.7424634916e-02 row1=4, row2=4, column=2, updated c2=3.7424634916e-02 row1=4, row2=5, column=1, updated c2=4.0287756187e-02 row1=4, row2=5, column=2, updated c2=4.0287756187e-02 row1=4, row2=6, column=1, updated c2=3.6970979141e-02 row1=4, row2=6, column=2, updated c2=3.6970979141e-02 row1=4, row2=7, column=1, updated c2=3.4523228392e-02 row1=4, row2=7, column=2, updated c2=3.4523228392e-02 row1=4, row2=8, column=1, updated c2=3.7707470064e-02 row1=4, row2=8, column=2, updated c2=3.7707470064e-02 row1=4, row2=9, column=1, updated c2=3.4423513746e-02 row1=4, row2=9, column=2, updated c2=3.4423513746e-02 row1=4, row2=10, column=1, updated c2=3.7557999129e-02 row1=4, row2=10, column=2, updated c2=3.7557999129e-02 row1=4, row2=11, column=1, updated c2=3.7223692705e-02 row1=4, row2=11, column=2, updated c2=3.7223692705e-02 row1=4, row2=12, column=1, updated c2=3.8135984301e-02 row1=4, row2=12, column=2, updated c2=3.8135984301e-02 row1=4, row2=13, column=1, updated c2=4.3774744986e-02 row1=4, row2=13, column=2, updated c2=4.3774744986e-02 row1=4, row2=14, column=1, updated c2=3.6098522111e-02 row1=4, row2=14, column=2, updated c2=3.6098522111e-02 row1=4, row2=15, column=1, updated c2=3.7971743423e-02 row1=4, row2=15, column=2, updated c2=3.7971743423e-02 row1=4, row2=16, column=1, updated c2=3.7666009858e-02 row1=4, row2=16, column=2, updated c2=3.7666009858e-02 row1=4, row2=17, column=1, updated c2=3.8332144456e-02 row1=4, row2=17, column=2, updated c2=3.8332144456e-02 row1=4, row2=18, column=1, updated c2=3.7996424814e-02 row1=4, row2=18, column=2, updated c2=3.7996424814e-02 row1=4, row2=19, column=1, updated c2=3.9010938192e-02 row1=4, row2=19, column=2, updated c2=3.9010938192e-02 row1=4, row2=20, column=1, updated c2=3.7257258335e-02 row1=4, row2=20, column=2, updated c2=3.7257258335e-02 row1=5, row2=1, column=1, updated c2=3.7399576182e-02 row1=5, row2=1, column=2, updated c2=3.7399576182e-02 row1=5, row2=2, column=1, updated c2=3.7632808806e-02 row1=5, row2=2, column=2, updated c2=3.7632808806e-02 row1=5, row2=3, column=1, updated c2=3.7458020484e-02 row1=5, row2=3, column=2, updated c2=3.7458020484e-02 row1=5, row2=4, column=1, updated c2=4.0287756187e-02 row1=5, row2=4, column=2, updated c2=4.0287756187e-02 row1=5, row2=5, column=1, updated c2=3.7424634916e-02 row1=5, row2=5, column=2, updated c2=3.7424634916e-02 row1=5, row2=6, column=1, updated c2=4.2396677919e-02 row1=5, row2=6, column=2, updated c2=4.2396677919e-02 row1=5, row2=7, column=1, updated c2=4.0388467396e-02 row1=5, row2=7, column=2, updated c2=4.0388467396e-02 row1=5, row2=8, column=1, updated c2=3.8004648382e-02 row1=5, row2=8, column=2, updated c2=3.8004648382e-02 row1=5, row2=9, column=1, updated c2=4.0132322368e-02 row1=5, row2=9, column=2, updated c2=4.0132322368e-02 row1=5, row2=10, column=1, updated c2=3.7715756636e-02 row1=5, row2=10, column=2, updated c2=3.7715756636e-02 row1=5, row2=11, column=1, updated c2=3.7541354512e-02 row1=5, row2=11, column=2, updated c2=3.7541354512e-02 row1=5, row2=12, column=1, updated c2=3.7374500647e-02 row1=5, row2=12, column=2, updated c2=3.7374500647e-02 row1=5, row2=13, column=1, updated c2=3.7173287433e-02 row1=5, row2=13, column=2, updated c2=3.7173287433e-02 row1=5, row2=14, column=1, updated c2=4.2507097038e-02 row1=5, row2=14, column=2, updated c2=4.2507097038e-02 row1=5, row2=15, column=1, updated c2=3.7674305549e-02 row1=5, row2=15, column=2, updated c2=3.7674305549e-02 row1=5, row2=16, column=1, updated c2=3.7674305549e-02 row1=5, row2=16, column=2, updated c2=3.7674305549e-02 row1=5, row2=17, column=1, updated c2=3.8632606676e-02 row1=5, row2=17, column=2, updated c2=3.8632606676e-02 row1=5, row2=18, column=1, updated c2=3.8494847689e-02 row1=5, row2=18, column=2, updated c2=3.8494847689e-02 row1=5, row2=19, column=1, updated c2=4.0550626365e-02 row1=5, row2=19, column=2, updated c2=4.0550626365e-02 row1=5, row2=20, column=1, updated c2=4.0256717435e-02 row1=5, row2=20, column=2, updated c2=4.0256717435e-02 row1=6, row2=1, column=1, updated c2=4.3824688232e-02 row1=6, row2=1, column=2, updated c2=4.3824688232e-02 row1=6, row2=2, column=1, updated c2=3.9693869786e-02 row1=6, row2=2, column=2, updated c2=3.9693869786e-02 row1=6, row2=3, column=1, updated c2=4.7301990430e-02 row1=6, row2=3, column=2, updated c2=4.7301990430e-02 row1=6, row2=4, column=1, updated c2=3.6970979141e-02 row1=6, row2=4, column=2, updated c2=3.6970979141e-02 row1=6, row2=5, column=1, updated c2=4.2396677919e-02 row1=6, row2=5, column=2, updated c2=4.2396677919e-02 row1=6, row2=6, column=1, updated c2=3.7424634916e-02 row1=6, row2=6, column=2, updated c2=3.7424634916e-02 row1=6, row2=7, column=1, updated c2=3.6443151601e-02 row1=6, row2=7, column=2, updated c2=3.6443151601e-02 row1=6, row2=8, column=1, updated c2=3.8045739559e-02 row1=6, row2=8, column=2, updated c2=3.8045739559e-02 row1=6, row2=9, column=1, updated c2=3.6716526233e-02 row1=6, row2=9, column=2, updated c2=3.6716526233e-02 row1=6, row2=10, column=1, updated c2=3.7173287433e-02 row1=6, row2=10, column=2, updated c2=3.7173287433e-02 row1=6, row2=11, column=1, updated c2=3.7790254016e-02 row1=6, row2=11, column=2, updated c2=3.7790254016e-02 row1=6, row2=12, column=1, updated c2=3.6228142357e-02 row1=6, row2=12, column=2, updated c2=3.6228142357e-02 row1=6, row2=13, column=1, updated c2=4.4797916231e-02 row1=6, row2=13, column=2, updated c2=4.4797916231e-02 row1=6, row2=14, column=1, updated c2=3.8332144456e-02 row1=6, row2=14, column=2, updated c2=3.8332144456e-02 row1=6, row2=15, column=1, updated c2=3.8168747669e-02 row1=6, row2=15, column=2, updated c2=3.8168747669e-02 row1=6, row2=16, column=1, updated c2=3.6063878031e-02 row1=6, row2=16, column=2, updated c2=3.6063878031e-02 row1=6, row2=17, column=1, updated c2=4.0334269531e-02 row1=6, row2=17, column=2, updated c2=4.0334269531e-02 row1=6, row2=18, column=1, updated c2=3.8168747669e-02 row1=6, row2=18, column=2, updated c2=3.8168747669e-02 row1=6, row2=19, column=1, updated c2=4.5593072924e-02 row1=6, row2=19, column=2, updated c2=4.5593072924e-02 row1=6, row2=20, column=1, updated c2=3.8632606676e-02 row1=6, row2=20, column=2, updated c2=3.8632606676e-02 row1=7, row2=1, column=1, updated c2=4.1989323626e-02 row1=7, row2=1, column=2, updated c2=4.1989323626e-02 row1=7, row2=2, column=1, updated c2=3.7872857017e-02 row1=7, row2=2, column=2, updated c2=3.7872857017e-02 row1=7, row2=3, column=1, updated c2=3.5759310656e-02 row1=7, row2=3, column=2, updated c2=3.5759310656e-02 row1=7, row2=4, column=1, updated c2=3.4523228392e-02 row1=7, row2=4, column=2, updated c2=3.4523228392e-02 row1=7, row2=5, column=1, updated c2=4.0388467396e-02 row1=7, row2=5, column=2, updated c2=4.0388467396e-02 row1=7, row2=6, column=1, updated c2=3.6443151601e-02 row1=7, row2=6, column=2, updated c2=3.6443151601e-02 row1=7, row2=7, column=1, updated c2=3.7424634916e-02 row1=7, row2=7, column=2, updated c2=3.7424634916e-02 row1=7, row2=8, column=1, updated c2=3.3689438977e-02 row1=7, row2=8, column=2, updated c2=3.3689438977e-02 row1=7, row2=9, column=1, updated c2=3.7307550156e-02 row1=7, row2=9, column=2, updated c2=3.7307550156e-02 row1=7, row2=10, column=1, updated c2=3.4140932890e-02 row1=7, row2=10, column=2, updated c2=3.4140932890e-02 row1=7, row2=11, column=1, updated c2=3.5452126856e-02 row1=7, row2=11, column=2, updated c2=3.5452126856e-02 row1=7, row2=12, column=1, updated c2=3.4604599385e-02 row1=7, row2=12, column=2, updated c2=3.4604599385e-02 row1=7, row2=13, column=1, updated c2=3.3381930720e-02 row1=7, row2=13, column=2, updated c2=3.3381930720e-02 row1=7, row2=14, column=1, updated c2=3.6494565330e-02 row1=7, row2=14, column=2, updated c2=3.6494565330e-02 row1=7, row2=15, column=1, updated c2=3.6784552445e-02 row1=7, row2=15, column=2, updated c2=3.6784552445e-02 row1=7, row2=16, column=1, updated c2=3.4195808202e-02 row1=7, row2=16, column=2, updated c2=3.4195808202e-02 row1=7, row2=17, column=1, updated c2=3.3363202763e-02 row1=7, row2=17, column=2, updated c2=3.3363202763e-02 row1=7, row2=18, column=1, updated c2=3.7173287433e-02 row1=7, row2=18, column=2, updated c2=3.7173287433e-02 row1=7, row2=19, column=1, updated c2=3.7798522439e-02 row1=7, row2=19, column=2, updated c2=3.7798522439e-02 row1=7, row2=20, column=1, updated c2=3.3966576198e-02 row1=7, row2=20, column=2, updated c2=3.3966576198e-02 row1=8, row2=1, column=1, updated c2=3.7699181670e-02 row1=8, row2=1, column=2, updated c2=3.7699181670e-02 row1=8, row2=2, column=1, updated c2=3.7715756636e-02 row1=8, row2=2, column=2, updated c2=3.7715756636e-02 row1=8, row2=3, column=1, updated c2=3.8004648382e-02 row1=8, row2=3, column=2, updated c2=3.8004648382e-02 row1=8, row2=4, column=1, updated c2=3.7707470064e-02 row1=8, row2=4, column=2, updated c2=3.7707470064e-02 row1=8, row2=5, column=1, updated c2=3.8004648382e-02 row1=8, row2=5, column=2, updated c2=3.8004648382e-02 row1=8, row2=6, column=1, updated c2=3.8045739559e-02 row1=8, row2=6, column=2, updated c2=3.8045739559e-02 row1=8, row2=7, column=1, updated c2=3.3689438977e-02 row1=8, row2=7, column=2, updated c2=3.3689438977e-02 row1=8, row2=8, column=1, updated c2=3.7424634916e-02 row1=8, row2=8, column=2, updated c2=3.7424634916e-02 row1=8, row2=9, column=1, updated c2=3.4140932890e-02 row1=8, row2=9, column=2, updated c2=3.4140932890e-02 row1=8, row2=10, column=1, updated c2=3.6877883597e-02 row1=8, row2=10, column=2, updated c2=3.6877883597e-02 row1=8, row2=11, column=1, updated c2=3.6665423748e-02 row1=8, row2=11, column=2, updated c2=3.6665423748e-02 row1=8, row2=12, column=1, updated c2=4.0007540522e-02 row1=8, row2=12, column=2, updated c2=4.0007540522e-02 row1=8, row2=13, column=1, updated c2=3.9042967339e-02 row1=8, row2=13, column=2, updated c2=3.9042967339e-02 row1=8, row2=14, column=1, updated c2=3.6460297566e-02 row1=8, row2=14, column=2, updated c2=3.6460297566e-02 row1=8, row2=15, column=1, updated c2=3.7757162216e-02 row1=8, row2=15, column=2, updated c2=3.7757162216e-02 row1=8, row2=16, column=1, updated c2=3.8818208338e-02 row1=8, row2=16, column=2, updated c2=3.8818208338e-02 row1=8, row2=17, column=1, updated c2=3.7382861028e-02 row1=8, row2=17, column=2, updated c2=3.7382861028e-02 row1=8, row2=18, column=1, updated c2=4.1914833873e-02 row1=8, row2=18, column=2, updated c2=4.1914833873e-02 row1=8, row2=19, column=1, updated c2=3.6374486919e-02 row1=8, row2=19, column=2, updated c2=3.6374486919e-02 row1=8, row2=20, column=1, updated c2=3.7407930959e-02 row1=8, row2=20, column=2, updated c2=3.7407930959e-02 row1=9, row2=1, column=1, updated c2=4.1690566062e-02 row1=9, row2=1, column=2, updated c2=4.1690566062e-02 row1=9, row2=2, column=1, updated c2=3.7641111814e-02 row1=9, row2=2, column=2, updated c2=3.7641111814e-02 row1=9, row2=3, column=1, updated c2=3.6115831689e-02 row1=9, row2=3, column=2, updated c2=3.6115831689e-02 row1=9, row2=4, column=1, updated c2=3.4423513746e-02 row1=9, row2=4, column=2, updated c2=3.4423513746e-02 row1=9, row2=5, column=1, updated c2=4.0132322368e-02 row1=9, row2=5, column=2, updated c2=4.0132322368e-02 row1=9, row2=6, column=1, updated c2=3.6716526233e-02 row1=9, row2=6, column=2, updated c2=3.6716526233e-02 row1=9, row2=7, column=1, updated c2=3.7307550156e-02 row1=9, row2=7, column=2, updated c2=3.7307550156e-02 row1=9, row2=8, column=1, updated c2=3.4140932890e-02 row1=9, row2=8, column=2, updated c2=3.4140932890e-02 row1=9, row2=9, column=1, updated c2=3.7424634916e-02 row1=9, row2=9, column=2, updated c2=3.7424634916e-02 row1=9, row2=10, column=1, updated c2=3.4432590646e-02 row1=9, row2=10, column=2, updated c2=3.4432590646e-02 row1=9, row2=11, column=1, updated c2=3.5460940464e-02 row1=9, row2=11, column=2, updated c2=3.5460940464e-02 row1=9, row2=12, column=1, updated c2=3.4250595595e-02 row1=9, row2=12, column=2, updated c2=3.4250595595e-02 row1=9, row2=13, column=1, updated c2=3.3828291394e-02 row1=9, row2=13, column=2, updated c2=3.3828291394e-02 row1=9, row2=14, column=1, updated c2=3.6827005018e-02 row1=9, row2=14, column=2, updated c2=3.6827005018e-02 row1=9, row2=15, column=1, updated c2=3.5985806905e-02 row1=9, row2=15, column=2, updated c2=3.5985806905e-02 row1=9, row2=16, column=1, updated c2=3.3587249048e-02 row1=9, row2=16, column=2, updated c2=3.3587249048e-02 row1=9, row2=17, column=1, updated c2=3.3828291394e-02 row1=9, row2=17, column=2, updated c2=3.3828291394e-02 row1=9, row2=18, column=1, updated c2=3.8689188394e-02 row1=9, row2=18, column=2, updated c2=3.8689188394e-02 row1=9, row2=19, column=1, updated c2=3.8689188394e-02 row1=9, row2=19, column=2, updated c2=3.8689188394e-02 row1=9, row2=20, column=1, updated c2=3.4287071887e-02 row1=9, row2=20, column=2, updated c2=3.4287071887e-02 row1=10, row2=1, column=1, updated c2=3.7607888782e-02 row1=10, row2=1, column=2, updated c2=3.7607888782e-02 row1=10, row2=2, column=1, updated c2=3.8413582215e-02 row1=10, row2=2, column=2, updated c2=3.8413582215e-02 row1=10, row2=3, column=1, updated c2=3.6571550399e-02 row1=10, row2=3, column=2, updated c2=3.6571550399e-02 row1=10, row2=4, column=1, updated c2=3.7557999129e-02 row1=10, row2=4, column=2, updated c2=3.7557999129e-02 row1=10, row2=5, column=1, updated c2=3.7715756636e-02 row1=10, row2=5, column=2, updated c2=3.7715756636e-02 row1=10, row2=6, column=1, updated c2=3.7173287433e-02 row1=10, row2=6, column=2, updated c2=3.7173287433e-02 row1=10, row2=7, column=1, updated c2=3.4140932890e-02 row1=10, row2=7, column=2, updated c2=3.4140932890e-02 row1=10, row2=8, column=1, updated c2=3.6877883597e-02 row1=10, row2=8, column=2, updated c2=3.6877883597e-02 row1=10, row2=9, column=1, updated c2=3.4432590646e-02 row1=10, row2=9, column=2, updated c2=3.4432590646e-02 row1=10, row2=10, column=1, updated c2=3.7424634916e-02 row1=10, row2=10, column=2, updated c2=3.7424634916e-02 row1=10, row2=11, column=1, updated c2=3.7290793751e-02 row1=10, row2=11, column=2, updated c2=3.7290793751e-02 row1=10, row2=12, column=1, updated c2=4.0311019568e-02 row1=10, row2=12, column=2, updated c2=4.0311019568e-02 row1=10, row2=13, column=1, updated c2=3.8004648382e-02 row1=10, row2=13, column=2, updated c2=3.8004648382e-02 row1=10, row2=14, column=1, updated c2=3.7004773998e-02 row1=10, row2=14, column=2, updated c2=3.7004773998e-02 row1=10, row2=15, column=1, updated c2=3.9058972063e-02 row1=10, row2=15, column=2, updated c2=3.9058972063e-02 row1=10, row2=16, column=1, updated c2=3.9693869786e-02 row1=10, row2=16, column=2, updated c2=3.9693869786e-02 row1=10, row2=17, column=1, updated c2=3.6852453088e-02 row1=10, row2=17, column=2, updated c2=3.6852453088e-02 row1=10, row2=18, column=1, updated c2=4.0085574695e-02 row1=10, row2=18, column=2, updated c2=4.0085574695e-02 row1=10, row2=19, column=1, updated c2=3.6279860785e-02 row1=10, row2=19, column=2, updated c2=3.6279860785e-02 row1=10, row2=20, column=1, updated c2=3.7148059150e-02 row1=10, row2=20, column=2, updated c2=3.7148059150e-02 row1=11, row2=1, column=1, updated c2=3.8656866125e-02 row1=11, row2=1, column=2, updated c2=3.8656866125e-02 row1=11, row2=2, column=1, updated c2=3.8608331984e-02 row1=11, row2=2, column=2, updated c2=3.8608331984e-02 row1=11, row2=3, column=1, updated c2=3.6580094295e-02 row1=11, row2=3, column=2, updated c2=3.6580094295e-02 row1=11, row2=4, column=1, updated c2=3.7223692705e-02 row1=11, row2=4, column=2, updated c2=3.7223692705e-02 row1=11, row2=5, column=1, updated c2=3.7541354512e-02 row1=11, row2=5, column=2, updated c2=3.7541354512e-02 row1=11, row2=6, column=1, updated c2=3.7790254016e-02 row1=11, row2=6, column=2, updated c2=3.7790254016e-02 row1=11, row2=7, column=1, updated c2=3.5452126856e-02 row1=11, row2=7, column=2, updated c2=3.5452126856e-02 row1=11, row2=8, column=1, updated c2=3.6665423748e-02 row1=11, row2=8, column=2, updated c2=3.6665423748e-02 row1=11, row2=9, column=1, updated c2=3.5460940464e-02 row1=11, row2=9, column=2, updated c2=3.5460940464e-02 row1=11, row2=10, column=1, updated c2=3.7290793751e-02 row1=11, row2=10, column=2, updated c2=3.7290793751e-02 row1=11, row2=11, column=1, updated c2=3.7424634916e-02 row1=11, row2=11, column=2, updated c2=3.7424634916e-02 row1=11, row2=12, column=1, updated c2=4.0550626365e-02 row1=11, row2=12, column=2, updated c2=4.0550626365e-02 row1=11, row2=13, column=1, updated c2=3.7148059150e-02 row1=11, row2=13, column=2, updated c2=3.7148059150e-02 row1=11, row2=14, column=1, updated c2=3.7839837455e-02 row1=11, row2=14, column=2, updated c2=3.7839837455e-02 row1=11, row2=15, column=1, updated c2=4.0038772441e-02 row1=11, row2=15, column=2, updated c2=4.0038772441e-02 row1=11, row2=16, column=1, updated c2=4.0357506100e-02 row1=11, row2=16, column=2, updated c2=4.0357506100e-02 row1=11, row2=17, column=1, updated c2=3.6835489662e-02 row1=11, row2=17, column=2, updated c2=3.6835489662e-02 row1=11, row2=18, column=1, updated c2=3.9018947943e-02 row1=11, row2=18, column=2, updated c2=3.9018947943e-02 row1=11, row2=19, column=1, updated c2=3.7341040406e-02 row1=11, row2=19, column=2, updated c2=3.7341040406e-02 row1=11, row2=20, column=1, updated c2=3.7341040406e-02 row1=11, row2=20, column=2, updated c2=3.7341040406e-02 row1=12, row2=1, column=1, updated c2=3.8291360626e-02 row1=12, row2=1, column=2, updated c2=3.8291360626e-02 row1=12, row2=2, column=1, updated c2=3.7582952234e-02 row1=12, row2=2, column=2, updated c2=3.7582952234e-02 row1=12, row2=3, column=1, updated c2=4.7506350087e-02 row1=12, row2=3, column=2, updated c2=4.7506350087e-02 row1=12, row2=4, column=1, updated c2=3.8135984301e-02 row1=12, row2=4, column=2, updated c2=3.8135984301e-02 row1=12, row2=5, column=1, updated c2=3.7374500647e-02 row1=12, row2=5, column=2, updated c2=3.7374500647e-02 row1=12, row2=6, column=1, updated c2=3.6228142357e-02 row1=12, row2=6, column=2, updated c2=3.6228142357e-02 row1=12, row2=7, column=1, updated c2=3.4604599385e-02 row1=12, row2=7, column=2, updated c2=3.4604599385e-02 row1=12, row2=8, column=1, updated c2=4.0007540522e-02 row1=12, row2=8, column=2, updated c2=4.0007540522e-02 row1=12, row2=9, column=1, updated c2=3.4250595595e-02 row1=12, row2=9, column=2, updated c2=3.4250595595e-02 row1=12, row2=10, column=1, updated c2=4.0311019568e-02 row1=12, row2=10, column=2, updated c2=4.0311019568e-02 row1=12, row2=11, column=1, updated c2=4.0550626365e-02 row1=12, row2=11, column=2, updated c2=4.0550626365e-02 row1=12, row2=12, column=1, updated c2=3.7424634916e-02 row1=12, row2=12, column=2, updated c2=3.7424634916e-02 row1=12, row2=13, column=1, updated c2=4.7847186946e-02 row1=12, row2=13, column=2, updated c2=4.7847186946e-02 row1=12, row2=14, column=1, updated c2=3.5977121878e-02 row1=12, row2=14, column=2, updated c2=3.5977121878e-02 row1=12, row2=15, column=1, updated c2=3.7790254016e-02 row1=12, row2=15, column=2, updated c2=3.7790254016e-02 row1=12, row2=16, column=1, updated c2=3.7341040406e-02 row1=12, row2=16, column=2, updated c2=3.7341040406e-02 row1=12, row2=17, column=1, updated c2=4.1048487166e-02 row1=12, row2=17, column=2, updated c2=4.1048487166e-02 row1=12, row2=18, column=1, updated c2=3.6665423748e-02 row1=12, row2=18, column=2, updated c2=3.6665423748e-02 row1=12, row2=19, column=1, updated c2=4.3595909196e-02 row1=12, row2=19, column=2, updated c2=4.3595909196e-02 row1=12, row2=20, column=1, updated c2=3.9456980353e-02 row1=12, row2=20, column=2, updated c2=3.9456980353e-02 row1=13, row2=1, column=1, updated c2=3.9583497807e-02 row1=13, row2=1, column=2, updated c2=3.9583497807e-02 row1=13, row2=2, column=1, updated c2=4.3091220667e-02 row1=13, row2=2, column=2, updated c2=4.3091220667e-02 row1=13, row2=3, column=1, updated c2=3.7021659858e-02 row1=13, row2=3, column=2, updated c2=3.7021659858e-02 row1=13, row2=4, column=1, updated c2=4.3774744986e-02 row1=13, row2=4, column=2, updated c2=4.3774744986e-02 row1=13, row2=5, column=1, updated c2=3.7173287433e-02 row1=13, row2=5, column=2, updated c2=3.7173287433e-02 row1=13, row2=6, column=1, updated c2=4.4797916231e-02 row1=13, row2=6, column=2, updated c2=4.4797916231e-02 row1=13, row2=7, column=1, updated c2=3.3381930720e-02 row1=13, row2=7, column=2, updated c2=3.3381930720e-02 row1=13, row2=8, column=1, updated c2=3.9042967339e-02 row1=13, row2=8, column=2, updated c2=3.9042967339e-02 row1=13, row2=9, column=1, updated c2=3.3828291394e-02 row1=13, row2=9, column=2, updated c2=3.3828291394e-02 row1=13, row2=10, column=1, updated c2=3.8004648382e-02 row1=13, row2=10, column=2, updated c2=3.8004648382e-02 row1=13, row2=11, column=1, updated c2=3.7148059150e-02 row1=13, row2=11, column=2, updated c2=3.7148059150e-02 row1=13, row2=12, column=1, updated c2=4.7847186946e-02 row1=13, row2=12, column=2, updated c2=4.7847186946e-02 row1=13, row2=13, column=1, updated c2=3.7424634916e-02 row1=13, row2=13, column=2, updated c2=3.7424634916e-02 row1=13, row2=14, column=1, updated c2=3.6107177937e-02 row1=13, row2=14, column=2, updated c2=3.6107177937e-02 row1=13, row2=15, column=1, updated c2=4.5041406490e-02 row1=13, row2=15, column=2, updated c2=4.5041406490e-02 row1=13, row2=16, column=1, updated c2=4.6495734198e-02 row1=13, row2=16, column=2, updated c2=4.6495734198e-02 row1=13, row2=17, column=1, updated c2=3.7922332452e-02 row1=13, row2=17, column=2, updated c2=3.7922332452e-02 row1=13, row2=18, column=1, updated c2=5.0552975171e-02 row1=13, row2=18, column=2, updated c2=5.0552975171e-02 row1=13, row2=19, column=1, updated c2=3.5890156013e-02 row1=13, row2=19, column=2, updated c2=3.5890156013e-02 row1=13, row2=20, column=1, updated c2=3.9106946935e-02 row1=13, row2=20, column=2, updated c2=3.9106946935e-02 row1=14, row2=1, column=1, updated c2=4.4023894632e-02 row1=14, row2=1, column=2, updated c2=4.4023894632e-02 row1=14, row2=2, column=1, updated c2=3.9693869786e-02 row1=14, row2=2, column=2, updated c2=3.9693869786e-02 row1=14, row2=3, column=1, updated c2=3.9218660082e-02 row1=14, row2=3, column=2, updated c2=3.9218660082e-02 row1=14, row2=4, column=1, updated c2=3.6098522111e-02 row1=14, row2=4, column=2, updated c2=3.6098522111e-02 row1=14, row2=5, column=1, updated c2=4.2507097038e-02 row1=14, row2=5, column=2, updated c2=4.2507097038e-02 row1=14, row2=6, column=1, updated c2=3.8332144456e-02 row1=14, row2=6, column=2, updated c2=3.8332144456e-02 row1=14, row2=7, column=1, updated c2=3.6494565330e-02 row1=14, row2=7, column=2, updated c2=3.6494565330e-02 row1=14, row2=8, column=1, updated c2=3.6460297566e-02 row1=14, row2=8, column=2, updated c2=3.6460297566e-02 row1=14, row2=9, column=1, updated c2=3.6827005018e-02 row1=14, row2=9, column=2, updated c2=3.6827005018e-02 row1=14, row2=10, column=1, updated c2=3.7004773998e-02 row1=14, row2=10, column=2, updated c2=3.7004773998e-02 row1=14, row2=11, column=1, updated c2=3.7839837455e-02 row1=14, row2=11, column=2, updated c2=3.7839837455e-02 row1=14, row2=12, column=1, updated c2=3.5977121878e-02 row1=14, row2=12, column=2, updated c2=3.5977121878e-02 row1=14, row2=13, column=1, updated c2=3.6107177937e-02 row1=14, row2=13, column=2, updated c2=3.6107177937e-02 row1=14, row2=14, column=1, updated c2=3.7424634916e-02 row1=14, row2=14, column=2, updated c2=3.7424634916e-02 row1=14, row2=15, column=1, updated c2=3.7757162216e-02 row1=14, row2=15, column=2, updated c2=3.7757162216e-02 row1=14, row2=16, column=1, updated c2=3.5460940464e-02 row1=14, row2=16, column=2, updated c2=3.5460940464e-02 row1=14, row2=17, column=1, updated c2=3.5959745530e-02 row1=14, row2=17, column=2, updated c2=3.5959745530e-02 row1=14, row2=18, column=1, updated c2=4.1547903661e-02 row1=14, row2=18, column=2, updated c2=4.1547903661e-02 row1=14, row2=19, column=1, updated c2=4.0241189080e-02 row1=14, row2=19, column=2, updated c2=4.0241189080e-02 row1=14, row2=20, column=1, updated c2=3.6150425981e-02 row1=14, row2=20, column=2, updated c2=3.6150425981e-02 row1=15, row2=1, column=1, updated c2=3.7190096781e-02 row1=15, row2=1, column=2, updated c2=3.7190096781e-02 row1=15, row2=2, column=1, updated c2=3.6920228854e-02 row1=15, row2=2, column=2, updated c2=3.6920228854e-02 row1=15, row2=3, column=1, updated c2=4.3192630142e-02 row1=15, row2=3, column=2, updated c2=4.3192630142e-02 row1=15, row2=4, column=1, updated c2=3.7971743423e-02 row1=15, row2=4, column=2, updated c2=3.7971743423e-02 row1=15, row2=5, column=1, updated c2=3.7674305549e-02 row1=15, row2=5, column=2, updated c2=3.7674305549e-02 row1=15, row2=6, column=1, updated c2=3.8168747669e-02 row1=15, row2=6, column=2, updated c2=3.8168747669e-02 row1=15, row2=7, column=1, updated c2=3.6784552445e-02 row1=15, row2=7, column=2, updated c2=3.6784552445e-02 row1=15, row2=8, column=1, updated c2=3.7757162216e-02 row1=15, row2=8, column=2, updated c2=3.7757162216e-02 row1=15, row2=9, column=1, updated c2=3.5985806905e-02 row1=15, row2=9, column=2, updated c2=3.5985806905e-02 row1=15, row2=10, column=1, updated c2=3.9058972063e-02 row1=15, row2=10, column=2, updated c2=3.9058972063e-02 row1=15, row2=11, column=1, updated c2=4.0038772441e-02 row1=15, row2=11, column=2, updated c2=4.0038772441e-02 row1=15, row2=12, column=1, updated c2=3.7790254016e-02 row1=15, row2=12, column=2, updated c2=3.7790254016e-02 row1=15, row2=13, column=1, updated c2=4.5041406490e-02 row1=15, row2=13, column=2, updated c2=4.5041406490e-02 row1=15, row2=14, column=1, updated c2=3.7757162216e-02 row1=15, row2=14, column=2, updated c2=3.7757162216e-02 row1=15, row2=15, column=1, updated c2=3.7424634916e-02 row1=15, row2=15, column=2, updated c2=3.7424634916e-02 row1=15, row2=16, column=1, updated c2=3.7466362228e-02 row1=15, row2=16, column=2, updated c2=3.7466362228e-02 row1=15, row2=17, column=1, updated c2=3.7938809926e-02 row1=15, row2=17, column=2, updated c2=3.7938809926e-02 row1=15, row2=18, column=1, updated c2=3.7963512727e-02 row1=15, row2=18, column=2, updated c2=3.7963512727e-02 row1=15, row2=19, column=1, updated c2=3.7591266254e-02 row1=15, row2=19, column=2, updated c2=3.7591266254e-02 row1=15, row2=20, column=1, updated c2=3.6767557692e-02 row1=15, row2=20, column=2, updated c2=3.6767557692e-02 row1=16, row2=1, column=1, updated c2=3.7156470481e-02 row1=16, row2=1, column=2, updated c2=3.7156470481e-02 row1=16, row2=2, column=1, updated c2=3.7341040406e-02 row1=16, row2=2, column=2, updated c2=3.7341040406e-02 row1=16, row2=3, column=1, updated c2=4.5558789477e-02 row1=16, row2=3, column=2, updated c2=4.5558789477e-02 row1=16, row2=4, column=1, updated c2=3.7666009858e-02 row1=16, row2=4, column=2, updated c2=3.7666009858e-02 row1=16, row2=5, column=1, updated c2=3.7674305549e-02 row1=16, row2=5, column=2, updated c2=3.7674305549e-02 row1=16, row2=6, column=1, updated c2=3.6063878031e-02 row1=16, row2=6, column=2, updated c2=3.6063878031e-02 row1=16, row2=7, column=1, updated c2=3.4195808202e-02 row1=16, row2=7, column=2, updated c2=3.4195808202e-02 row1=16, row2=8, column=1, updated c2=3.8818208338e-02 row1=16, row2=8, column=2, updated c2=3.8818208338e-02 row1=16, row2=9, column=1, updated c2=3.3587249048e-02 row1=16, row2=9, column=2, updated c2=3.3587249048e-02 row1=16, row2=10, column=1, updated c2=3.9693869786e-02 row1=16, row2=10, column=2, updated c2=3.9693869786e-02 row1=16, row2=11, column=1, updated c2=4.0357506100e-02 row1=16, row2=11, column=2, updated c2=4.0357506100e-02 row1=16, row2=12, column=1, updated c2=3.7341040406e-02 row1=16, row2=12, column=2, updated c2=3.7341040406e-02 row1=16, row2=13, column=1, updated c2=4.6495734198e-02 row1=16, row2=13, column=2, updated c2=4.6495734198e-02 row1=16, row2=14, column=1, updated c2=3.5460940464e-02 row1=16, row2=14, column=2, updated c2=3.5460940464e-02 row1=16, row2=15, column=1, updated c2=3.7466362228e-02 row1=16, row2=15, column=2, updated c2=3.7466362228e-02 row1=16, row2=16, column=1, updated c2=3.7424634916e-02 row1=16, row2=16, column=2, updated c2=3.7424634916e-02 row1=16, row2=17, column=1, updated c2=3.9456980353e-02 row1=16, row2=17, column=2, updated c2=3.9456980353e-02 row1=16, row2=18, column=1, updated c2=3.6665423748e-02 row1=16, row2=18, column=2, updated c2=3.6665423748e-02 row1=16, row2=19, column=1, updated c2=4.1056099408e-02 row1=16, row2=19, column=2, updated c2=4.1056099408e-02 row1=16, row2=20, column=1, updated c2=3.8070372977e-02 row1=16, row2=20, column=2, updated c2=3.8070372977e-02 row1=17, row2=1, column=1, updated c2=3.8527305883e-02 row1=17, row2=1, column=2, updated c2=3.8527305883e-02 row1=17, row2=2, column=1, updated c2=3.7524702512e-02 row1=17, row2=2, column=2, updated c2=3.7524702512e-02 row1=17, row2=3, column=1, updated c2=3.8209662372e-02 row1=17, row2=3, column=2, updated c2=3.8209662372e-02 row1=17, row2=4, column=1, updated c2=3.8332144456e-02 row1=17, row2=4, column=2, updated c2=3.8332144456e-02 row1=17, row2=5, column=1, updated c2=3.8632606676e-02 row1=17, row2=5, column=2, updated c2=3.8632606676e-02 row1=17, row2=6, column=1, updated c2=4.0334269531e-02 row1=17, row2=6, column=2, updated c2=4.0334269531e-02 row1=17, row2=7, column=1, updated c2=3.3363202763e-02 row1=17, row2=7, column=2, updated c2=3.3363202763e-02 row1=17, row2=8, column=1, updated c2=3.7382861028e-02 row1=17, row2=8, column=2, updated c2=3.7382861028e-02 row1=17, row2=9, column=1, updated c2=3.3828291394e-02 row1=17, row2=9, column=2, updated c2=3.3828291394e-02 row1=17, row2=10, column=1, updated c2=3.6852453088e-02 row1=17, row2=10, column=2, updated c2=3.6852453088e-02 row1=17, row2=11, column=1, updated c2=3.6835489662e-02 row1=17, row2=11, column=2, updated c2=3.6835489662e-02 row1=17, row2=12, column=1, updated c2=4.1048487166e-02 row1=17, row2=12, column=2, updated c2=4.1048487166e-02 row1=17, row2=13, column=1, updated c2=3.7922332452e-02 row1=17, row2=13, column=2, updated c2=3.7922332452e-02 row1=17, row2=14, column=1, updated c2=3.5959745530e-02 row1=17, row2=14, column=2, updated c2=3.5959745530e-02 row1=17, row2=15, column=1, updated c2=3.7938809926e-02 row1=17, row2=15, column=2, updated c2=3.7938809926e-02 row1=17, row2=16, column=1, updated c2=3.9456980353e-02 row1=17, row2=16, column=2, updated c2=3.9456980353e-02 row1=17, row2=17, column=1, updated c2=3.7424634916e-02 row1=17, row2=17, column=2, updated c2=3.7424634916e-02 row1=17, row2=18, column=1, updated c2=4.4447759208e-02 row1=17, row2=18, column=2, updated c2=4.4447759208e-02 row1=17, row2=19, column=1, updated c2=3.6176349990e-02 row1=17, row2=19, column=2, updated c2=3.6176349990e-02 row1=17, row2=20, column=1, updated c2=3.7582952234e-02 row1=17, row2=20, column=2, updated c2=3.7582952234e-02 row1=18, row2=1, column=1, updated c2=4.0458043682e-02 row1=18, row2=1, column=2, updated c2=4.0458043682e-02 row1=18, row2=2, column=1, updated c2=3.7341040406e-02 row1=18, row2=2, column=2, updated c2=3.7341040406e-02 row1=18, row2=3, column=1, updated c2=5.2326888868e-02 row1=18, row2=3, column=2, updated c2=5.2326888868e-02 row1=18, row2=4, column=1, updated c2=3.7996424814e-02 row1=18, row2=4, column=2, updated c2=3.7996424814e-02 row1=18, row2=5, column=1, updated c2=3.8494847689e-02 row1=18, row2=5, column=2, updated c2=3.8494847689e-02 row1=18, row2=6, column=1, updated c2=3.8168747669e-02 row1=18, row2=6, column=2, updated c2=3.8168747669e-02 row1=18, row2=7, column=1, updated c2=3.7173287433e-02 row1=18, row2=7, column=2, updated c2=3.7173287433e-02 row1=18, row2=8, column=1, updated c2=4.1914833873e-02 row1=18, row2=8, column=2, updated c2=4.1914833873e-02 row1=18, row2=9, column=1, updated c2=3.8689188394e-02 row1=18, row2=9, column=2, updated c2=3.8689188394e-02 row1=18, row2=10, column=1, updated c2=4.0085574695e-02 row1=18, row2=10, column=2, updated c2=4.0085574695e-02 row1=18, row2=11, column=1, updated c2=3.9018947943e-02 row1=18, row2=11, column=2, updated c2=3.9018947943e-02 row1=18, row2=12, column=1, updated c2=3.6665423748e-02 row1=18, row2=12, column=2, updated c2=3.6665423748e-02 row1=18, row2=13, column=1, updated c2=5.0552975171e-02 row1=18, row2=13, column=2, updated c2=5.0552975171e-02 row1=18, row2=14, column=1, updated c2=4.1547903661e-02 row1=18, row2=14, column=2, updated c2=4.1547903661e-02 row1=18, row2=15, column=1, updated c2=3.7963512727e-02 row1=18, row2=15, column=2, updated c2=3.7963512727e-02 row1=18, row2=16, column=1, updated c2=3.6665423748e-02 row1=18, row2=16, column=2, updated c2=3.6665423748e-02 row1=18, row2=17, column=1, updated c2=4.4447759208e-02 row1=18, row2=17, column=2, updated c2=4.4447759208e-02 row1=18, row2=18, column=1, updated c2=3.7424634916e-02 row1=18, row2=18, column=2, updated c2=3.7424634916e-02 row1=18, row2=19, column=1, updated c2=5.0971593055e-02 row1=18, row2=19, column=2, updated c2=5.0971593055e-02 row1=18, row2=20, column=1, updated c2=4.2418784738e-02 row1=18, row2=20, column=2, updated c2=4.2418784738e-02 row1=19, row2=1, column=1, updated c2=4.1200464786e-02 row1=19, row2=1, column=2, updated c2=4.1200464786e-02 row1=19, row2=2, column=1, updated c2=3.7963512727e-02 row1=19, row2=2, column=2, updated c2=3.7963512727e-02 row1=19, row2=3, column=1, updated c2=3.6665423748e-02 row1=19, row2=3, column=2, updated c2=3.6665423748e-02 row1=19, row2=4, column=1, updated c2=3.9010938192e-02 row1=19, row2=4, column=2, updated c2=3.9010938192e-02 row1=19, row2=5, column=1, updated c2=4.0550626365e-02 row1=19, row2=5, column=2, updated c2=4.0550626365e-02 row1=19, row2=6, column=1, updated c2=4.5593072924e-02 row1=19, row2=6, column=2, updated c2=4.5593072924e-02 row1=19, row2=7, column=1, updated c2=3.7798522439e-02 row1=19, row2=7, column=2, updated c2=3.7798522439e-02 row1=19, row2=8, column=1, updated c2=3.6374486919e-02 row1=19, row2=8, column=2, updated c2=3.6374486919e-02 row1=19, row2=9, column=1, updated c2=3.8689188394e-02 row1=19, row2=9, column=2, updated c2=3.8689188394e-02 row1=19, row2=10, column=1, updated c2=3.6279860785e-02 row1=19, row2=10, column=2, updated c2=3.6279860785e-02 row1=19, row2=11, column=1, updated c2=3.7341040406e-02 row1=19, row2=11, column=2, updated c2=3.7341040406e-02 row1=19, row2=12, column=1, updated c2=4.3595909196e-02 row1=19, row2=12, column=2, updated c2=4.3595909196e-02 row1=19, row2=13, column=1, updated c2=3.5890156013e-02 row1=19, row2=13, column=2, updated c2=3.5890156013e-02 row1=19, row2=14, column=1, updated c2=4.0241189080e-02 row1=19, row2=14, column=2, updated c2=4.0241189080e-02 row1=19, row2=15, column=1, updated c2=3.7591266254e-02 row1=19, row2=15, column=2, updated c2=3.7591266254e-02 row1=19, row2=16, column=1, updated c2=4.1056099408e-02 row1=19, row2=16, column=2, updated c2=4.1056099408e-02 row1=19, row2=17, column=1, updated c2=3.6176349990e-02 row1=19, row2=17, column=2, updated c2=3.6176349990e-02 row1=19, row2=18, column=1, updated c2=5.0971593055e-02 row1=19, row2=18, column=2, updated c2=5.0971593055e-02 row1=19, row2=19, column=1, updated c2=3.7424634916e-02 row1=19, row2=19, column=2, updated c2=3.7424634916e-02 row1=19, row2=20, column=1, updated c2=3.6835489662e-02 row1=19, row2=20, column=2, updated c2=3.6835489662e-02 row1=20, row2=1, column=1, updated c2=4.0819459803e-02 row1=20, row2=1, column=2, updated c2=4.0819459803e-02 row1=20, row2=2, column=1, updated c2=3.7897602808e-02 row1=20, row2=2, column=2, updated c2=3.7897602808e-02 row1=20, row2=3, column=1, updated c2=3.9851013771e-02 row1=20, row2=3, column=2, updated c2=3.9851013771e-02 row1=20, row2=4, column=1, updated c2=3.7257258335e-02 row1=20, row2=4, column=2, updated c2=3.7257258335e-02 row1=20, row2=5, column=1, updated c2=4.0256717435e-02 row1=20, row2=5, column=2, updated c2=4.0256717435e-02 row1=20, row2=6, column=1, updated c2=3.8632606676e-02 row1=20, row2=6, column=2, updated c2=3.8632606676e-02 row1=20, row2=7, column=1, updated c2=3.3966576198e-02 row1=20, row2=7, column=2, updated c2=3.3966576198e-02 row1=20, row2=8, column=1, updated c2=3.7407930959e-02 row1=20, row2=8, column=2, updated c2=3.7407930959e-02 row1=20, row2=9, column=1, updated c2=3.4287071887e-02 row1=20, row2=9, column=2, updated c2=3.4287071887e-02 row1=20, row2=10, column=1, updated c2=3.7148059150e-02 row1=20, row2=10, column=2, updated c2=3.7148059150e-02 row1=20, row2=11, column=1, updated c2=3.7341040406e-02 row1=20, row2=11, column=2, updated c2=3.7341040406e-02 row1=20, row2=12, column=1, updated c2=3.9456980353e-02 row1=20, row2=12, column=2, updated c2=3.9456980353e-02 row1=20, row2=13, column=1, updated c2=3.9106946935e-02 row1=20, row2=13, column=2, updated c2=3.9106946935e-02 row1=20, row2=14, column=1, updated c2=3.6150425981e-02 row1=20, row2=14, column=2, updated c2=3.6150425981e-02 row1=20, row2=15, column=1, updated c2=3.6767557692e-02 row1=20, row2=15, column=2, updated c2=3.6767557692e-02 row1=20, row2=16, column=1, updated c2=3.8070372977e-02 row1=20, row2=16, column=2, updated c2=3.8070372977e-02 row1=20, row2=17, column=1, updated c2=3.7582952234e-02 row1=20, row2=17, column=2, updated c2=3.7582952234e-02 row1=20, row2=18, column=1, updated c2=4.2418784738e-02 row1=20, row2=18, column=2, updated c2=4.2418784738e-02 row1=20, row2=19, column=1, updated c2=3.6835489662e-02 row1=20, row2=19, column=2, updated c2=3.6835489662e-02 row1=20, row2=20, column=1, updated c2=3.7424634916e-02 row1=20, row2=20, column=2, updated c2=3.7424634916e-02 initial design=design_dim_50_size_100_centered_perturbLHS.csv c2=2.5933526830e+01, phip=5.0679289904e-01, mindist=1.9883410170e+00 row1=1, row2=1, column=1, updated c2=2.5933526830e+01 row1=1, row2=1, column=11, updated c2=2.5933526830e+01 row1=1, row2=1, column=21, updated c2=2.5933526830e+01 row1=1, row2=1, column=31, updated c2=2.5933526830e+01 row1=1, row2=1, column=41, updated c2=2.5933526830e+01 row1=1, row2=11, column=1, updated c2=2.5933738073e+01 row1=1, row2=11, column=11, updated c2=2.5924419236e+01 row1=1, row2=11, column=21, updated c2=2.5940814355e+01 row1=1, row2=11, column=31, updated c2=2.5939838190e+01 row1=1, row2=11, column=41, updated c2=2.5974918099e+01 row1=1, row2=21, column=1, updated c2=2.5954966503e+01 row1=1, row2=21, column=11, updated c2=2.5976709061e+01 row1=1, row2=21, column=21, updated c2=2.5921412261e+01 row1=1, row2=21, column=31, updated c2=2.5933949755e+01 row1=1, row2=21, column=41, updated c2=2.5978627876e+01 row1=1, row2=31, column=1, updated c2=2.5937844658e+01 row1=1, row2=31, column=11, updated c2=2.5987869277e+01 row1=1, row2=31, column=21, updated c2=2.5906262058e+01 row1=1, row2=31, column=31, updated c2=2.5939543048e+01 row1=1, row2=31, column=41, updated c2=2.5981361854e+01 row1=1, row2=41, column=1, updated c2=2.5949158713e+01 row1=1, row2=41, column=11, updated c2=2.5951281144e+01 row1=1, row2=41, column=21, updated c2=2.5938192548e+01 row1=1, row2=41, column=31, updated c2=2.5931680673e+01 row1=1, row2=41, column=41, updated c2=2.5974584692e+01 row1=1, row2=51, column=1, updated c2=2.5923873642e+01 row1=1, row2=51, column=11, updated c2=2.5969994810e+01 row1=1, row2=51, column=21, updated c2=2.5917551142e+01 row1=1, row2=51, column=31, updated c2=2.5934989583e+01 row1=1, row2=51, column=41, updated c2=2.5972805980e+01 row1=1, row2=61, column=1, updated c2=2.5935767193e+01 row1=1, row2=61, column=11, updated c2=2.5936876014e+01 row1=1, row2=61, column=21, updated c2=2.5932238787e+01 row1=1, row2=61, column=31, updated c2=2.5932255853e+01 row1=1, row2=61, column=41, updated c2=2.5933083520e+01 row1=1, row2=71, column=1, updated c2=2.5987080640e+01 row1=1, row2=71, column=11, updated c2=2.5979899704e+01 row1=1, row2=71, column=21, updated c2=2.5900914561e+01 row1=1, row2=71, column=31, updated c2=2.5944742446e+01 row1=1, row2=71, column=41, updated c2=2.5932103372e+01 row1=1, row2=81, column=1, updated c2=2.5944774499e+01 row1=1, row2=81, column=11, updated c2=2.5943273285e+01 row1=1, row2=81, column=21, updated c2=2.5914209186e+01 row1=1, row2=81, column=31, updated c2=2.5938827900e+01 row1=1, row2=81, column=41, updated c2=2.5940720373e+01 row1=1, row2=91, column=1, updated c2=2.5967106387e+01 row1=1, row2=91, column=11, updated c2=2.5980127960e+01 row1=1, row2=91, column=21, updated c2=2.5915269145e+01 row1=1, row2=91, column=31, updated c2=2.5939196990e+01 row1=1, row2=91, column=41, updated c2=2.5966376233e+01 row1=11, row2=1, column=1, updated c2=2.5933738073e+01 row1=11, row2=1, column=11, updated c2=2.5924419236e+01 row1=11, row2=1, column=21, updated c2=2.5940814355e+01 row1=11, row2=1, column=31, updated c2=2.5939838190e+01 row1=11, row2=1, column=41, updated c2=2.5974918099e+01 row1=11, row2=11, column=1, updated c2=2.5933526830e+01 row1=11, row2=11, column=11, updated c2=2.5933526830e+01 row1=11, row2=11, column=21, updated c2=2.5933526830e+01 row1=11, row2=11, column=31, updated c2=2.5933526830e+01 row1=11, row2=11, column=41, updated c2=2.5933526830e+01 row1=11, row2=21, column=1, updated c2=2.5928795918e+01 row1=11, row2=21, column=11, updated c2=2.5924931714e+01 row1=11, row2=21, column=21, updated c2=2.5939179436e+01 row1=11, row2=21, column=31, updated c2=2.5934834730e+01 row1=11, row2=21, column=41, updated c2=2.5931512526e+01 row1=11, row2=31, column=1, updated c2=2.5932178748e+01 row1=11, row2=31, column=11, updated c2=2.5923343371e+01 row1=11, row2=31, column=21, updated c2=2.5947615362e+01 row1=11, row2=31, column=31, updated c2=2.5933647317e+01 row1=11, row2=31, column=41, updated c2=2.5930624207e+01 row1=11, row2=41, column=1, updated c2=2.5908543683e+01 row1=11, row2=41, column=11, updated c2=2.5900818869e+01 row1=11, row2=41, column=21, updated c2=2.6002456865e+01 row1=11, row2=41, column=31, updated c2=2.5944480372e+01 row1=11, row2=41, column=41, updated c2=2.5911272893e+01 row1=11, row2=51, column=1, updated c2=2.5936803709e+01 row1=11, row2=51, column=11, updated c2=2.5924824746e+01 row1=11, row2=51, column=21, updated c2=2.5941287381e+01 row1=11, row2=51, column=31, updated c2=2.5934564097e+01 row1=11, row2=51, column=41, updated c2=2.5932417272e+01 row1=11, row2=61, column=1, updated c2=2.5889737515e+01 row1=11, row2=61, column=11, updated c2=2.5938218146e+01 row1=11, row2=61, column=21, updated c2=2.5940752674e+01 row1=11, row2=61, column=31, updated c2=2.5926697661e+01 row1=11, row2=61, column=41, updated c2=2.5939807769e+01 row1=11, row2=71, column=1, updated c2=2.5920611924e+01 row1=11, row2=71, column=11, updated c2=2.5919841318e+01 row1=11, row2=71, column=21, updated c2=2.5963690569e+01 row1=11, row2=71, column=31, updated c2=2.5930867137e+01 row1=11, row2=71, column=41, updated c2=2.5946932200e+01 row1=11, row2=81, column=1, updated c2=2.5926072692e+01 row1=11, row2=81, column=11, updated c2=2.5923227317e+01 row1=11, row2=81, column=21, updated c2=2.5973967666e+01 row1=11, row2=81, column=31, updated c2=2.5932338439e+01 row1=11, row2=81, column=41, updated c2=2.5945749316e+01 row1=11, row2=91, column=1, updated c2=2.5931575723e+01 row1=11, row2=91, column=11, updated c2=2.5931156155e+01 row1=11, row2=91, column=21, updated c2=2.5936360231e+01 row1=11, row2=91, column=31, updated c2=2.5933607427e+01 row1=11, row2=91, column=41, updated c2=2.5934057081e+01 row1=21, row2=1, column=1, updated c2=2.5954966503e+01 row1=21, row2=1, column=11, updated c2=2.5976709061e+01 row1=21, row2=1, column=21, updated c2=2.5921412261e+01 row1=21, row2=1, column=31, updated c2=2.5933949755e+01 row1=21, row2=1, column=41, updated c2=2.5978627876e+01 row1=21, row2=11, column=1, updated c2=2.5928795918e+01 row1=21, row2=11, column=11, updated c2=2.5924931714e+01 row1=21, row2=11, column=21, updated c2=2.5939179436e+01 row1=21, row2=11, column=31, updated c2=2.5934834730e+01 row1=21, row2=11, column=41, updated c2=2.5931512526e+01 row1=21, row2=21, column=1, updated c2=2.5933526830e+01 row1=21, row2=21, column=11, updated c2=2.5933526830e+01 row1=21, row2=21, column=21, updated c2=2.5933526830e+01 row1=21, row2=21, column=31, updated c2=2.5933526830e+01 row1=21, row2=21, column=41, updated c2=2.5933526830e+01 row1=21, row2=31, column=1, updated c2=2.5933967735e+01 row1=21, row2=31, column=11, updated c2=2.5933571856e+01 row1=21, row2=31, column=21, updated c2=2.5934918169e+01 row1=21, row2=31, column=31, updated c2=2.5934349306e+01 row1=21, row2=31, column=41, updated c2=2.5933085009e+01 row1=21, row2=41, column=1, updated c2=2.5927089273e+01 row1=21, row2=41, column=11, updated c2=2.5935985518e+01 row1=21, row2=41, column=21, updated c2=2.5967735380e+01 row1=21, row2=41, column=31, updated c2=2.5937988045e+01 row1=21, row2=41, column=41, updated c2=2.5922420103e+01 row1=21, row2=51, column=1, updated c2=2.5936295955e+01 row1=21, row2=51, column=11, updated c2=2.5934349238e+01 row1=21, row2=51, column=21, updated c2=2.5933676847e+01 row1=21, row2=51, column=31, updated c2=2.5933506998e+01 row1=21, row2=51, column=41, updated c2=2.5934321006e+01 row1=21, row2=61, column=1, updated c2=2.5918262198e+01 row1=21, row2=61, column=11, updated c2=2.6004851679e+01 row1=21, row2=61, column=21, updated c2=2.5917406796e+01 row1=21, row2=61, column=31, updated c2=2.5922504185e+01 row1=21, row2=61, column=41, updated c2=2.5948485381e+01 row1=21, row2=71, column=1, updated c2=2.5932892846e+01 row1=21, row2=71, column=11, updated c2=2.5933331275e+01 row1=21, row2=71, column=21, updated c2=2.5942603276e+01 row1=21, row2=71, column=31, updated c2=2.5932768488e+01 row1=21, row2=71, column=41, updated c2=2.5941748901e+01 row1=21, row2=81, column=1, updated c2=2.5935148415e+01 row1=21, row2=81, column=11, updated c2=2.5942545114e+01 row1=21, row2=81, column=21, updated c2=2.5949520529e+01 row1=21, row2=81, column=31, updated c2=2.5931941958e+01 row1=21, row2=81, column=41, updated c2=2.5944397996e+01 row1=21, row2=91, column=1, updated c2=2.5934710996e+01 row1=21, row2=91, column=11, updated c2=2.5933332290e+01 row1=21, row2=91, column=21, updated c2=2.5932919397e+01 row1=21, row2=91, column=31, updated c2=2.5934733035e+01 row1=21, row2=91, column=41, updated c2=2.5931706758e+01 row1=31, row2=1, column=1, updated c2=2.5937844658e+01 row1=31, row2=1, column=11, updated c2=2.5987869277e+01 row1=31, row2=1, column=21, updated c2=2.5906262058e+01 row1=31, row2=1, column=31, updated c2=2.5939543048e+01 row1=31, row2=1, column=41, updated c2=2.5981361854e+01 row1=31, row2=11, column=1, updated c2=2.5932178748e+01 row1=31, row2=11, column=11, updated c2=2.5923343371e+01 row1=31, row2=11, column=21, updated c2=2.5947615362e+01 row1=31, row2=11, column=31, updated c2=2.5933647317e+01 row1=31, row2=11, column=41, updated c2=2.5930624207e+01 row1=31, row2=21, column=1, updated c2=2.5933967735e+01 row1=31, row2=21, column=11, updated c2=2.5933571856e+01 row1=31, row2=21, column=21, updated c2=2.5934918169e+01 row1=31, row2=21, column=31, updated c2=2.5934349306e+01 row1=31, row2=21, column=41, updated c2=2.5933085009e+01 row1=31, row2=31, column=1, updated c2=2.5933526830e+01 row1=31, row2=31, column=11, updated c2=2.5933526830e+01 row1=31, row2=31, column=21, updated c2=2.5933526830e+01 row1=31, row2=31, column=31, updated c2=2.5933526830e+01 row1=31, row2=31, column=41, updated c2=2.5933526830e+01 row1=31, row2=41, column=1, updated c2=2.5919597452e+01 row1=31, row2=41, column=11, updated c2=2.5941804369e+01 row1=31, row2=41, column=21, updated c2=2.5946686904e+01 row1=31, row2=41, column=31, updated c2=2.5942452875e+01 row1=31, row2=41, column=41, updated c2=2.5924017485e+01 row1=31, row2=51, column=1, updated c2=2.5933933947e+01 row1=31, row2=51, column=11, updated c2=2.5934573167e+01 row1=31, row2=51, column=21, updated c2=2.5933823342e+01 row1=31, row2=51, column=31, updated c2=2.5934237310e+01 row1=31, row2=51, column=41, updated c2=2.5933572446e+01 row1=31, row2=61, column=1, updated c2=2.5903691852e+01 row1=31, row2=61, column=11, updated c2=2.6019288651e+01 row1=31, row2=61, column=21, updated c2=2.5898919500e+01 row1=31, row2=61, column=31, updated c2=2.5929826529e+01 row1=31, row2=61, column=41, updated c2=2.5952568660e+01 row1=31, row2=71, column=1, updated c2=2.5934875264e+01 row1=31, row2=71, column=11, updated c2=2.5934029285e+01 row1=31, row2=71, column=21, updated c2=2.5936546118e+01 row1=31, row2=71, column=31, updated c2=2.5933120401e+01 row1=31, row2=71, column=41, updated c2=2.5941607848e+01 row1=31, row2=81, column=1, updated c2=2.5930845962e+01 row1=31, row2=81, column=11, updated c2=2.5946045086e+01 row1=31, row2=81, column=21, updated c2=2.5938701275e+01 row1=31, row2=81, column=31, updated c2=2.5933207967e+01 row1=31, row2=81, column=41, updated c2=2.5944841938e+01 row1=31, row2=91, column=1, updated c2=2.5938065326e+01 row1=31, row2=91, column=11, updated c2=2.5932007590e+01 row1=31, row2=91, column=21, updated c2=2.5937100519e+01 row1=31, row2=91, column=31, updated c2=2.5933311266e+01 row1=31, row2=91, column=41, updated c2=2.5930951880e+01 row1=41, row2=1, column=1, updated c2=2.5949158713e+01 row1=41, row2=1, column=11, updated c2=2.5951281144e+01 row1=41, row2=1, column=21, updated c2=2.5938192548e+01 row1=41, row2=1, column=31, updated c2=2.5931680673e+01 row1=41, row2=1, column=41, updated c2=2.5974584692e+01 row1=41, row2=11, column=1, updated c2=2.5908543683e+01 row1=41, row2=11, column=11, updated c2=2.5900818869e+01 row1=41, row2=11, column=21, updated c2=2.6002456865e+01 row1=41, row2=11, column=31, updated c2=2.5944480372e+01 row1=41, row2=11, column=41, updated c2=2.5911272893e+01 row1=41, row2=21, column=1, updated c2=2.5927089273e+01 row1=41, row2=21, column=11, updated c2=2.5935985518e+01 row1=41, row2=21, column=21, updated c2=2.5967735380e+01 row1=41, row2=21, column=31, updated c2=2.5937988045e+01 row1=41, row2=21, column=41, updated c2=2.5922420103e+01 row1=41, row2=31, column=1, updated c2=2.5919597452e+01 row1=41, row2=31, column=11, updated c2=2.5941804369e+01 row1=41, row2=31, column=21, updated c2=2.5946686904e+01 row1=41, row2=31, column=31, updated c2=2.5942452875e+01 row1=41, row2=31, column=41, updated c2=2.5924017485e+01 row1=41, row2=41, column=1, updated c2=2.5933526830e+01 row1=41, row2=41, column=11, updated c2=2.5933526830e+01 row1=41, row2=41, column=21, updated c2=2.5933526830e+01 row1=41, row2=41, column=31, updated c2=2.5933526830e+01 row1=41, row2=41, column=41, updated c2=2.5933526830e+01 row1=41, row2=51, column=1, updated c2=2.5913834050e+01 row1=41, row2=51, column=11, updated c2=2.5932986348e+01 row1=41, row2=51, column=21, updated c2=2.5961719168e+01 row1=41, row2=51, column=31, updated c2=2.5938755235e+01 row1=41, row2=51, column=41, updated c2=2.5921962697e+01 row1=41, row2=61, column=1, updated c2=2.5931653815e+01 row1=41, row2=61, column=11, updated c2=2.5972349336e+01 row1=41, row2=61, column=21, updated c2=2.5926644669e+01 row1=41, row2=61, column=31, updated c2=2.5927208354e+01 row1=41, row2=61, column=41, updated c2=2.5957022115e+01 row1=41, row2=71, column=1, updated c2=2.5944361100e+01 row1=41, row2=71, column=11, updated c2=2.5938647684e+01 row1=41, row2=71, column=21, updated c2=2.5931770348e+01 row1=41, row2=71, column=31, updated c2=2.5945027185e+01 row1=41, row2=71, column=41, updated c2=2.5915381659e+01 row1=41, row2=81, column=1, updated c2=2.5928684886e+01 row1=41, row2=81, column=11, updated c2=2.5927796897e+01 row1=41, row2=81, column=21, updated c2=2.5934152888e+01 row1=41, row2=81, column=31, updated c2=2.5939438515e+01 row1=41, row2=81, column=41, updated c2=2.5926855278e+01 row1=41, row2=91, column=1, updated c2=2.5930326906e+01 row1=41, row2=91, column=11, updated c2=2.5935552663e+01 row1=41, row2=91, column=21, updated c2=2.5969027772e+01 row1=41, row2=91, column=31, updated c2=2.5943110364e+01 row1=41, row2=91, column=41, updated c2=2.5911002770e+01 row1=51, row2=1, column=1, updated c2=2.5923873642e+01 row1=51, row2=1, column=11, updated c2=2.5969994810e+01 row1=51, row2=1, column=21, updated c2=2.5917551142e+01 row1=51, row2=1, column=31, updated c2=2.5934989583e+01 row1=51, row2=1, column=41, updated c2=2.5972805980e+01 row1=51, row2=11, column=1, updated c2=2.5936803709e+01 row1=51, row2=11, column=11, updated c2=2.5924824746e+01 row1=51, row2=11, column=21, updated c2=2.5941287381e+01 row1=51, row2=11, column=31, updated c2=2.5934564097e+01 row1=51, row2=11, column=41, updated c2=2.5932417272e+01 row1=51, row2=21, column=1, updated c2=2.5936295955e+01 row1=51, row2=21, column=11, updated c2=2.5934349238e+01 row1=51, row2=21, column=21, updated c2=2.5933676847e+01 row1=51, row2=21, column=31, updated c2=2.5933506998e+01 row1=51, row2=21, column=41, updated c2=2.5934321006e+01 row1=51, row2=31, column=1, updated c2=2.5933933947e+01 row1=51, row2=31, column=11, updated c2=2.5934573167e+01 row1=51, row2=31, column=21, updated c2=2.5933823342e+01 row1=51, row2=31, column=31, updated c2=2.5934237310e+01 row1=51, row2=31, column=41, updated c2=2.5933572446e+01 row1=51, row2=41, column=1, updated c2=2.5913834050e+01 row1=51, row2=41, column=11, updated c2=2.5932986348e+01 row1=51, row2=41, column=21, updated c2=2.5961719168e+01 row1=51, row2=41, column=31, updated c2=2.5938755235e+01 row1=51, row2=41, column=41, updated c2=2.5921962697e+01 row1=51, row2=51, column=1, updated c2=2.5933526830e+01 row1=51, row2=51, column=11, updated c2=2.5933526830e+01 row1=51, row2=51, column=21, updated c2=2.5933526830e+01 row1=51, row2=51, column=31, updated c2=2.5933526830e+01 row1=51, row2=51, column=41, updated c2=2.5933526830e+01 row1=51, row2=61, column=1, updated c2=2.5892224826e+01 row1=51, row2=61, column=11, updated c2=2.5995694066e+01 row1=51, row2=61, column=21, updated c2=2.5912175753e+01 row1=51, row2=61, column=31, updated c2=2.5924011520e+01 row1=51, row2=61, column=41, updated c2=2.5943889581e+01 row1=51, row2=71, column=1, updated c2=2.5937886485e+01 row1=51, row2=71, column=11, updated c2=2.5932952347e+01 row1=51, row2=71, column=21, updated c2=2.5940293428e+01 row1=51, row2=71, column=31, updated c2=2.5932923328e+01 row1=51, row2=71, column=41, updated c2=2.5940176824e+01 row1=51, row2=81, column=1, updated c2=2.5928797667e+01 row1=51, row2=81, column=11, updated c2=2.5940164614e+01 row1=51, row2=81, column=21, updated c2=2.5946164433e+01 row1=51, row2=81, column=31, updated c2=2.5932190330e+01 row1=51, row2=81, column=41, updated c2=2.5942156376e+01 row1=51, row2=91, column=1, updated c2=2.5943071906e+01 row1=51, row2=91, column=11, updated c2=2.5934401872e+01 row1=51, row2=91, column=21, updated c2=2.5933765060e+01 row1=51, row2=91, column=31, updated c2=2.5934487467e+01 row1=51, row2=91, column=41, updated c2=2.5932772594e+01 row1=61, row2=1, column=1, updated c2=2.5935767193e+01 row1=61, row2=1, column=11, updated c2=2.5936876014e+01 row1=61, row2=1, column=21, updated c2=2.5932238787e+01 row1=61, row2=1, column=31, updated c2=2.5932255853e+01 row1=61, row2=1, column=41, updated c2=2.5933083520e+01 row1=61, row2=11, column=1, updated c2=2.5889737515e+01 row1=61, row2=11, column=11, updated c2=2.5938218146e+01 row1=61, row2=11, column=21, updated c2=2.5940752674e+01 row1=61, row2=11, column=31, updated c2=2.5926697661e+01 row1=61, row2=11, column=41, updated c2=2.5939807769e+01 row1=61, row2=21, column=1, updated c2=2.5918262198e+01 row1=61, row2=21, column=11, updated c2=2.6004851679e+01 row1=61, row2=21, column=21, updated c2=2.5917406796e+01 row1=61, row2=21, column=31, updated c2=2.5922504185e+01 row1=61, row2=21, column=41, updated c2=2.5948485381e+01 row1=61, row2=31, column=1, updated c2=2.5903691852e+01 row1=61, row2=31, column=11, updated c2=2.6019288651e+01 row1=61, row2=31, column=21, updated c2=2.5898919500e+01 row1=61, row2=31, column=31, updated c2=2.5929826529e+01 row1=61, row2=31, column=41, updated c2=2.5952568660e+01 row1=61, row2=41, column=1, updated c2=2.5931653815e+01 row1=61, row2=41, column=11, updated c2=2.5972349336e+01 row1=61, row2=41, column=21, updated c2=2.5926644669e+01 row1=61, row2=41, column=31, updated c2=2.5927208354e+01 row1=61, row2=41, column=41, updated c2=2.5957022115e+01 row1=61, row2=51, column=1, updated c2=2.5892224826e+01 row1=61, row2=51, column=11, updated c2=2.5995694066e+01 row1=61, row2=51, column=21, updated c2=2.5912175753e+01 row1=61, row2=51, column=31, updated c2=2.5924011520e+01 row1=61, row2=51, column=41, updated c2=2.5943889581e+01 row1=61, row2=61, column=1, updated c2=2.5933526830e+01 row1=61, row2=61, column=11, updated c2=2.5933526830e+01 row1=61, row2=61, column=21, updated c2=2.5933526830e+01 row1=61, row2=61, column=31, updated c2=2.5933526830e+01 row1=61, row2=61, column=41, updated c2=2.5933526830e+01 row1=61, row2=71, column=1, updated c2=2.5948869284e+01 row1=61, row2=71, column=11, updated c2=2.6008859745e+01 row1=61, row2=71, column=21, updated c2=2.5889669986e+01 row1=61, row2=71, column=31, updated c2=2.5935890670e+01 row1=61, row2=71, column=41, updated c2=2.5907295681e+01 row1=61, row2=81, column=1, updated c2=2.5918681727e+01 row1=61, row2=81, column=11, updated c2=2.5958729259e+01 row1=61, row2=81, column=21, updated c2=2.5902890790e+01 row1=61, row2=81, column=31, updated c2=2.5931569280e+01 row1=61, row2=81, column=41, updated c2=2.5920085758e+01 row1=61, row2=91, column=1, updated c2=2.5924010002e+01 row1=61, row2=91, column=11, updated c2=2.6009228690e+01 row1=61, row2=91, column=21, updated c2=2.5910186090e+01 row1=61, row2=91, column=31, updated c2=2.5927235649e+01 row1=61, row2=91, column=41, updated c2=2.5933026982e+01 row1=71, row2=1, column=1, updated c2=2.5987080640e+01 row1=71, row2=1, column=11, updated c2=2.5979899704e+01 row1=71, row2=1, column=21, updated c2=2.5900914561e+01 row1=71, row2=1, column=31, updated c2=2.5944742446e+01 row1=71, row2=1, column=41, updated c2=2.5932103372e+01 row1=71, row2=11, column=1, updated c2=2.5920611924e+01 row1=71, row2=11, column=11, updated c2=2.5919841318e+01 row1=71, row2=11, column=21, updated c2=2.5963690569e+01 row1=71, row2=11, column=31, updated c2=2.5930867137e+01 row1=71, row2=11, column=41, updated c2=2.5946932200e+01 row1=71, row2=21, column=1, updated c2=2.5932892846e+01 row1=71, row2=21, column=11, updated c2=2.5933331275e+01 row1=71, row2=21, column=21, updated c2=2.5942603276e+01 row1=71, row2=21, column=31, updated c2=2.5932768488e+01 row1=71, row2=21, column=41, updated c2=2.5941748901e+01 row1=71, row2=31, column=1, updated c2=2.5934875264e+01 row1=71, row2=31, column=11, updated c2=2.5934029285e+01 row1=71, row2=31, column=21, updated c2=2.5936546118e+01 row1=71, row2=31, column=31, updated c2=2.5933120401e+01 row1=71, row2=31, column=41, updated c2=2.5941607848e+01 row1=71, row2=41, column=1, updated c2=2.5944361100e+01 row1=71, row2=41, column=11, updated c2=2.5938647684e+01 row1=71, row2=41, column=21, updated c2=2.5931770348e+01 row1=71, row2=41, column=31, updated c2=2.5945027185e+01 row1=71, row2=41, column=41, updated c2=2.5915381659e+01 row1=71, row2=51, column=1, updated c2=2.5937886485e+01 row1=71, row2=51, column=11, updated c2=2.5932952347e+01 row1=71, row2=51, column=21, updated c2=2.5940293428e+01 row1=71, row2=51, column=31, updated c2=2.5932923328e+01 row1=71, row2=51, column=41, updated c2=2.5940176824e+01 row1=71, row2=61, column=1, updated c2=2.5948869284e+01 row1=71, row2=61, column=11, updated c2=2.6008859745e+01 row1=71, row2=61, column=21, updated c2=2.5889669986e+01 row1=71, row2=61, column=31, updated c2=2.5935890670e+01 row1=71, row2=61, column=41, updated c2=2.5907295681e+01 row1=71, row2=71, column=1, updated c2=2.5933526830e+01 row1=71, row2=71, column=11, updated c2=2.5933526830e+01 row1=71, row2=71, column=21, updated c2=2.5933526830e+01 row1=71, row2=71, column=31, updated c2=2.5933526830e+01 row1=71, row2=71, column=41, updated c2=2.5933526830e+01 row1=71, row2=81, column=1, updated c2=2.5943173005e+01 row1=71, row2=81, column=11, updated c2=2.5942041835e+01 row1=71, row2=81, column=21, updated c2=2.5932759444e+01 row1=71, row2=81, column=31, updated c2=2.5934469562e+01 row1=71, row2=81, column=41, updated c2=2.5931849984e+01 row1=71, row2=91, column=1, updated c2=2.5929030997e+01 row1=71, row2=91, column=11, updated c2=2.5931819108e+01 row1=71, row2=91, column=21, updated c2=2.5947106952e+01 row1=71, row2=91, column=31, updated c2=2.5931742656e+01 row1=71, row2=91, column=41, updated c2=2.5942654154e+01 row1=81, row2=1, column=1, updated c2=2.5944774499e+01 row1=81, row2=1, column=11, updated c2=2.5943273285e+01 row1=81, row2=1, column=21, updated c2=2.5914209186e+01 row1=81, row2=1, column=31, updated c2=2.5938827900e+01 row1=81, row2=1, column=41, updated c2=2.5940720373e+01 row1=81, row2=11, column=1, updated c2=2.5926072692e+01 row1=81, row2=11, column=11, updated c2=2.5923227317e+01 row1=81, row2=11, column=21, updated c2=2.5973967666e+01 row1=81, row2=11, column=31, updated c2=2.5932338439e+01 row1=81, row2=11, column=41, updated c2=2.5945749316e+01 row1=81, row2=21, column=1, updated c2=2.5935148415e+01 row1=81, row2=21, column=11, updated c2=2.5942545114e+01 row1=81, row2=21, column=21, updated c2=2.5949520529e+01 row1=81, row2=21, column=31, updated c2=2.5931941958e+01 row1=81, row2=21, column=41, updated c2=2.5944397996e+01 row1=81, row2=31, column=1, updated c2=2.5930845962e+01 row1=81, row2=31, column=11, updated c2=2.5946045086e+01 row1=81, row2=31, column=21, updated c2=2.5938701275e+01 row1=81, row2=31, column=31, updated c2=2.5933207967e+01 row1=81, row2=31, column=41, updated c2=2.5944841938e+01 row1=81, row2=41, column=1, updated c2=2.5928684886e+01 row1=81, row2=41, column=11, updated c2=2.5927796897e+01 row1=81, row2=41, column=21, updated c2=2.5934152888e+01 row1=81, row2=41, column=31, updated c2=2.5939438515e+01 row1=81, row2=41, column=41, updated c2=2.5926855278e+01 row1=81, row2=51, column=1, updated c2=2.5928797667e+01 row1=81, row2=51, column=11, updated c2=2.5940164614e+01 row1=81, row2=51, column=21, updated c2=2.5946164433e+01 row1=81, row2=51, column=31, updated c2=2.5932190330e+01 row1=81, row2=51, column=41, updated c2=2.5942156376e+01 row1=81, row2=61, column=1, updated c2=2.5918681727e+01 row1=81, row2=61, column=11, updated c2=2.5958729259e+01 row1=81, row2=61, column=21, updated c2=2.5902890790e+01 row1=81, row2=61, column=31, updated c2=2.5931569280e+01 row1=81, row2=61, column=41, updated c2=2.5920085758e+01 row1=81, row2=71, column=1, updated c2=2.5943173005e+01 row1=81, row2=71, column=11, updated c2=2.5942041835e+01 row1=81, row2=71, column=21, updated c2=2.5932759444e+01 row1=81, row2=71, column=31, updated c2=2.5934469562e+01 row1=81, row2=71, column=41, updated c2=2.5931849984e+01 row1=81, row2=81, column=1, updated c2=2.5933526830e+01 row1=81, row2=81, column=11, updated c2=2.5933526830e+01 row1=81, row2=81, column=21, updated c2=2.5933526830e+01 row1=81, row2=81, column=31, updated c2=2.5933526830e+01 row1=81, row2=81, column=41, updated c2=2.5933526830e+01 row1=81, row2=91, column=1, updated c2=2.5939286618e+01 row1=81, row2=91, column=11, updated c2=2.5945247041e+01 row1=81, row2=91, column=21, updated c2=2.5952562965e+01 row1=81, row2=91, column=31, updated c2=2.5932456889e+01 row1=81, row2=91, column=41, updated c2=2.5941777490e+01 row1=91, row2=1, column=1, updated c2=2.5967106387e+01 row1=91, row2=1, column=11, updated c2=2.5980127960e+01 row1=91, row2=1, column=21, updated c2=2.5915269145e+01 row1=91, row2=1, column=31, updated c2=2.5939196990e+01 row1=91, row2=1, column=41, updated c2=2.5966376233e+01 row1=91, row2=11, column=1, updated c2=2.5931575723e+01 row1=91, row2=11, column=11, updated c2=2.5931156155e+01 row1=91, row2=11, column=21, updated c2=2.5936360231e+01 row1=91, row2=11, column=31, updated c2=2.5933607427e+01 row1=91, row2=11, column=41, updated c2=2.5934057081e+01 row1=91, row2=21, column=1, updated c2=2.5934710996e+01 row1=91, row2=21, column=11, updated c2=2.5933332290e+01 row1=91, row2=21, column=21, updated c2=2.5932919397e+01 row1=91, row2=21, column=31, updated c2=2.5934733035e+01 row1=91, row2=21, column=41, updated c2=2.5931706758e+01 row1=91, row2=31, column=1, updated c2=2.5938065326e+01 row1=91, row2=31, column=11, updated c2=2.5932007590e+01 row1=91, row2=31, column=21, updated c2=2.5937100519e+01 row1=91, row2=31, column=31, updated c2=2.5933311266e+01 row1=91, row2=31, column=41, updated c2=2.5930951880e+01 row1=91, row2=41, column=1, updated c2=2.5930326906e+01 row1=91, row2=41, column=11, updated c2=2.5935552663e+01 row1=91, row2=41, column=21, updated c2=2.5969027772e+01 row1=91, row2=41, column=31, updated c2=2.5943110364e+01 row1=91, row2=41, column=41, updated c2=2.5911002770e+01 row1=91, row2=51, column=1, updated c2=2.5943071906e+01 row1=91, row2=51, column=11, updated c2=2.5934401872e+01 row1=91, row2=51, column=21, updated c2=2.5933765060e+01 row1=91, row2=51, column=31, updated c2=2.5934487467e+01 row1=91, row2=51, column=41, updated c2=2.5932772594e+01 row1=91, row2=61, column=1, updated c2=2.5924010002e+01 row1=91, row2=61, column=11, updated c2=2.6009228690e+01 row1=91, row2=61, column=21, updated c2=2.5910186090e+01 row1=91, row2=61, column=31, updated c2=2.5927235649e+01 row1=91, row2=61, column=41, updated c2=2.5933026982e+01 row1=91, row2=71, column=1, updated c2=2.5929030997e+01 row1=91, row2=71, column=11, updated c2=2.5931819108e+01 row1=91, row2=71, column=21, updated c2=2.5947106952e+01 row1=91, row2=71, column=31, updated c2=2.5931742656e+01 row1=91, row2=71, column=41, updated c2=2.5942654154e+01 row1=91, row2=81, column=1, updated c2=2.5939286618e+01 row1=91, row2=81, column=11, updated c2=2.5945247041e+01 row1=91, row2=81, column=21, updated c2=2.5952562965e+01 row1=91, row2=81, column=31, updated c2=2.5932456889e+01 row1=91, row2=81, column=41, updated c2=2.5941777490e+01 row1=91, row2=91, column=1, updated c2=2.5933526830e+01 row1=91, row2=91, column=11, updated c2=2.5933526830e+01 row1=91, row2=91, column=21, updated c2=2.5933526830e+01 row1=91, row2=91, column=31, updated c2=2.5933526830e+01 row1=91, row2=91, column=41, updated c2=2.5933526830e+01 openturns-1.9/validation/src/optimal_lhs/space_filling_criteria_ref.val000066400000000000000000000034421307543307100267030ustar00rootroot00000000000000design=design_dim_2_size_20_1_centered.csv c2=3.7424634916177e-02, phip=9.2368609820592e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_2_centered.csv c2=3.9756801916269e-02, phip=1.4539725173219e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_3_centered.csv c2=3.4622655857252e-02, phip=1.4142135623826e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_4_centered.csv c2=3.5310809939870e-02, phip=1.4456309011263e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_5_centered.csv c2=4.6320657363751e-02, phip=1.4456309011328e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_6_centered.csv c2=4.1862612180906e-02, phip=1.4539725173244e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_7_centered.csv c2=4.0934133661406e-02, phip=1.4539725173228e+01, mindist=7.0710678118655e-02 design=design_dim_2_size_20_8_centered.csv c2=3.5951054207203e-02, phip=9.1957299868635e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_9_centered.csv c2=3.8810157157769e-02, phip=9.2706042376728e+00, mindist=1.1180339887499e-01 design=design_dim_2_size_20_10_centered.csv c2=3.8826257849676e-02, phip=1.4456309011263e+01, mindist=7.0710678118655e-02 design=design_dim_50_size_100_1_centered.csv c2=2.6124591580463e+01, phip=5.4534391739897e-01, mindist=1.8351839144892e+00 design=design_dim_50_size_100_2_centered.csv c2=2.5427092291761e+01, phip=5.1713345771273e-01, mindist=1.9406699874013e+00 design=design_dim_50_size_100_3_centered.csv c2=2.6141690805074e+01, phip=4.9453167540663e-01, mindist=2.1044951888755e+00 design=design_dim_50_size_100_4_centered.csv c2=2.6322210826622e+01, phip=5.1691817925687e-01, mindist=1.9479219696898e+00 design=design_dim_50_size_100_5_centered.csv c2=2.7777966135178e+01, phip=5.1782924202828e-01, mindist=1.9647391684394e+00 openturns-1.9/validation/src/optimal_lhs/validate_MC_big.py000077500000000000000000000033241307543307100242270ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages from openturns.viewer import View import time ot.RandomGenerator.SetSeed(0) ot.Log.Show(ot.Log.INFO) # Bounds are [0,1]^dimension dimension = 50 nSimu = 10000 c2 = ot.SpaceFillingC2() pp = PdfPages('large_mc_OTLHS.pdf') # Size of sample size = 100 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized mc = ot.MonteCarloLHS(lhsDesign, nSimu, c2) tic = time.time() design = mc.generate() result = mc.getResult() toc = time.time() print("cpu time=%f"%(toc-tic)) print("dimension=%d, size=%d,mc=%s"%(dimension, size, mc)) print("optimal value="+ str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) # plot criterion crit = result.drawHistoryCriterion() # in pdf pp.savefig(View(crit, plot_kwargs={'color':'blue'}).getFigure()) minDist = ot.SpaceFillingMinDist() # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized mc = ot.MonteCarloLHS(lhsDesign, nSimu, minDist) tic = time.time() result = mc.generate() toc = time.time() print("cpu time=%f"%(toc-tic)) print("dimension=%d, size=%d,mc=%s"%(dimension, size, mc)) print("optimal value="+ str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) # plot criterion crit = result.drawHistoryCriterion() pp.savefig(View(crit, plot_kwargs={'color':'blue'}).getFigure()) pp.close() openturns-1.9/validation/src/optimal_lhs/validate_MC_small.py000077500000000000000000000035251307543307100246010ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages from openturns.viewer import View import time ot.Log.Show(ot.Log.INFO) # Bounds are [0,1]^dimension dimension = 2 bounds = ot.Interval(dimension) nSimu = 10000 c2 = ot.SpaceFillingC2() # Size of sample size = 10 print("dimension=%d, size=%d"%(dimension, size)) for nSimu in [100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800, 409600]: ot.RandomGenerator.SetSeed(0) # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized mc = ot.MonteCarloLHS(lhsDesign, nSimu, c2) tic = time.time() design = mc.generate() result = mc.getResult() toc = time.time() print("%d %f %f"%(nSimu,result.getOptimalValue(), toc-tic)) pp = PdfPages('small_mc_OTLHS.pdf') # plot criterion & save it crit = result.drawHistoryCriterion() fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() pp.savefig(fig) plt.close(fig) minDist = ot.SpaceFillingMinDist() # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized mc = ot.MonteCarloLHS(lhsDesign, nSimu, minDist) tic = time.time() design = mc.generate() result = mc.getResult() toc = time.time() print("cpu time=%f"%(toc-tic)) print("dimension=%d, size=%d,mc=%s"%(dimension, size, mc)) print("optimal value="+ str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) # plot criterion & save it crit = result.drawHistoryCriterion() fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() pp.savefig(fig) plt.close(fig) pp.close() openturns-1.9/validation/src/optimal_lhs/validate_SA_big.R000066400000000000000000000023021307543307100237740ustar00rootroot00000000000000library(DiceDesign) set.seed(123) dimension <- 50 size <- 100 X <- lhsDesign(size, dimension)$design dt1 <- system.time( result <- discrepSA_LHS(X,T0=10,c=0.999,it=50000,criterion="C2",profile="GEOM") ) print(dt1) print(min(result$critValues)) print(discrepancyCriteria(result$design, type='C2')) plot(result$design) png("dice_c2_crit_big.png") plot(result$critValues,type="l", col='blue', xlab="Iterations", ylab="C2 criterion", main="C2 criterion history of optimal design") dev.off() png("dice_c2_proba_big.png") plot(result$probaValues,type="p", pch=".", xlab="Iterations", ylab="Probability", main="Probability history of optimal design") dev.off() plot(result$tempValues,type="l") dt2 <- system.time( result <- maximinSA_LHS(X,T0=10,c=0.999,it=50000,profile="GEOM") ) print(dt2) print(mindist(result$design)) plot(result$design) png("dice_mindist_crit_big.png") plot(result$critValues,type="l", col='blue', xlab="Iterations", ylab="PhiP criterion", main="PhiP criterion history of optimal design") dev.off() png("dice_phip_proba_big.png") plot(result$probaValues,type="p", pch=".", xlab="Iterations", ylab="Probability", main="Probability history of optimal design") dev.off() plot(result$tempValues,type="l") openturns-1.9/validation/src/optimal_lhs/validate_SA_big.py000077500000000000000000000045761307543307100242450ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages from openturns.viewer import View import time ot.RandomGenerator.SetSeed(0) ot.Log.Show(ot.Log.INFO) # Bounds are [0,1]^dimension dimension = 50 # Size of sample size = 100 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized geomProfile = ot.GeometricProfile(10.0, 0.999, 50000) c2 = ot.SpaceFillingC2() sa = ot.SimulatedAnnealingLHS(lhsDesign, geomProfile, c2) tic = time.time() design = sa.generate() result = sa.getResult() toc = time.time() dt1 = toc-tic print("time=%f"%dt1) print("dimension=%d, size=%d,sa=%s"%(dimension, size, sa)) print(str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) crit = result.drawHistoryCriterion() proba = result.drawHistoryProbability() temp = result.drawHistoryTemperature() pp = PdfPages('large_OTLHS.pdf') # Criterion fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() fig.savefig("otlhs_c2_crit_big.png") pp.savefig(fig) plt.close(fig) # Proba fig = View(proba, plot_kwargs={'marker': 'o', 'ms': 0.6}, axes_kwargs={'ylim': [-0.05, 1.05]}).getFigure() fig.savefig("lhs_c2_proba_big.png") pp.savefig(fig) plt.close(fig) # Temperature fig = View(temp).getFigure() pp.savefig(fig) plt.close(fig) minDist = ot.SpaceFillingMinDist() sa = ot.SimulatedAnnealingLHS(lhsDesign, geomProfile, minDist) tic = time.time() design = sa.generate() result = sa.getResult() toc = time.time() dt2 = toc-tic print("time=%f"%dt2) print("dimension=%d, size=%d,sa=%s"%(dimension, size, sa)) print(str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) crit = result.drawHistoryCriterion() proba = result.drawHistoryProbability() temp = result.drawHistoryTemperature() # Criterion fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() fig.savefig("otlhs_mindist_crit_big.png") pp.savefig(fig) plt.close(fig) # Proba fig = View(proba, plot_kwargs={'marker': 'o', 'ms': 0.6}, axes_kwargs={'ylim': [-0.05, 1.05]}).getFigure() fig.savefig("lhs_mindist_proba_big.png") pp.savefig(fig) plt.close(fig) # Temperature fig = View(temp).getFigure() pp.savefig(fig) plt.close(fig) pp.close() openturns-1.9/validation/src/optimal_lhs/validate_SA_small.R000066400000000000000000000034231307543307100243500ustar00rootroot00000000000000library(DiceDesign) set.seed(123) dimension <- 2 size <- 10 X <- lhsDesign(size, dimension)$design dt1 <- system.time( result <- discrepSA_LHS(X,T0=10,c=0.999,it=50000,criterion="C2",profile="GEOM") ) print(dt1) print(min(result$critValues)) print(discrepancyCriteria(result$design, type='C2')) png("dice_lhs_sa_geom_10.png") plot(result$design, col="blue", xlab="", ylab="", main="LHS design of size = 10, optimization of C2 criterion using geometric SA") dev.off() png("dice_c2_crit.png") plot(result$critValues,type="l", col='blue', xlab="Iterations", ylab="C2 criterion", main="C2 criterion history of optimal design") dev.off() png("dice_c2_proba.png") plot(result$probaValues,type="p", pch=".", xlab="Iterations", ylab="Probability", main="Probability history of optimal design") dev.off() png("dice_geom_profile.png") plot(result$tempValues,type="l", col='red', xlab="Iterations", ylab="Temperature criterion", main="Temperature criterion history of optimal design") dev.off() dt2 <- system.time( result <- maximinSA_LHS(X,T0=10,it=50000,profile="LINEAR") ) print(dt2) print(mindist(result$design)) png("dice_lhs_sa_lin_10.png") plot(result$design, col="blue", xlab="", ylab="", main="LHS design of size = 10, optimization of MinDist criterion using linear SA") dev.off() png("dice_mindist_crit.png") plot(result$critValues,type="l", col='blue', xlab="Iterations", ylab="PhiP criterion", main="PhiP criterion history of optimal design") dev.off() png("dice_mindist_proba.png") plot(result$probaValues,type="p", pch=".", xlab="Iterations", ylab="Probability", main="Probability history of optimal design") dev.off() png("dice_lin_profile.png") plot(result$tempValues,type="l", col='red', xlab="Iterations", ylab="Temperature criterion", main="Temperature criterion history of optimal design") dev.off() openturns-1.9/validation/src/optimal_lhs/validate_SA_small.py000077500000000000000000000046041307543307100246040ustar00rootroot00000000000000#! /usr/bin/env python import openturns as ot import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages from openturns.viewer import View import time ot.RandomGenerator.SetSeed(0) ot.Log.Show(ot.Log.INFO) # Bounds are [0,1]^dimension dimension = 2 bounds = ot.Interval(dimension) # Size of sample size = 10 # Factory: lhs generates lhsDesign = ot.LHSExperiment(ot.ComposedDistribution([ot.Uniform(0.0, 1.0)] * dimension), size) lhsDesign.setAlwaysShuffle(True) # randomized geomProfile = ot.GeometricProfile(10.0, 0.999, 50000) c2 = ot.SpaceFillingC2() sa = ot.SimulatedAnnealingLHS(lhsDesign, geomProfile, c2) tic = time.time() result = sa.generate() toc = time.time() dt1 = toc-tic print("time=%f"%dt1) print("dimension=%d, size=%d,sa=%s"%(dimension, size, sa)) print(str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) crit = result.drawHistoryCriterion() proba = result.drawHistoryProbability() temp = result.drawHistoryTemperature() pp = PdfPages('small_OTLHS.pdf') # Criterion fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() fig.savefig("crit_sa_geom.png") pp.savefig(fig) plt.close(fig) # Proba fig = View(proba, plot_kwargs={'marker': 'o', 'ms': 0.6}, axes_kwargs={'ylim': [-0.05, 1.05]}).getFigure() fig.savefig("lhs_c2_proba.png") pp.savefig(fig) plt.close(fig) # Temperature fig = View(temp).getFigure() pp.savefig(fig) plt.close(fig) linearProfile = ot.LinearProfile(10.0, 50000) minDist = ot.SpaceFillingMinDist() sa = ot.SimulatedAnnealingLHS(lhsDesign, linearProfile, minDist) tic = time.time() result = sa.generate() toc = time.time() dt2 = toc-tic print("time=%f"%dt2) print("dimension=%d, size=%d,sa=%s"%(dimension, size, sa)) print(str(result.getOptimalValue())+" c2="+str(result.getC2())+" phiP="+str(result.getPhiP())+" minDist="+str(result.getMinDist())) crit = result.drawHistoryCriterion() proba = result.drawHistoryProbability() temp = result.drawHistoryTemperature() # Criterion fig = View(crit, plot_kwargs={'color':'blue'}).getFigure() fig.savefig("crit_sa_lin.png") pp.savefig(fig) plt.close(fig) # Proba fig = View(proba, plot_kwargs={'marker': 'o', 'ms': 0.6}, axes_kwargs={'ylim': [-0.05, 1.05]}).getFigure() fig.savefig("lhs_mindist_proba.png") pp.savefig(fig) plt.close(fig) # Temperature fig = View(temp).getFigure() pp.savefig(fig) plt.close(fig) pp.close() openturns-1.9/validation/src/optimal_lhs/validate_spacefilling_evaluate.R000066400000000000000000000022141307543307100272000ustar00rootroot00000000000000library(DiceDesign) # For each design, evaluation of some criteria # Comparison to be done with space_filling_criteria.val basename <- "design_dim_2_size_20_" files <- paste0(basename, 1:10, "_centered.csv") content_file <- c() for (f in files) { data <- data <- read.table(f, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.13e", c2), ", phip=", sprintf("%1.13e", phip), ", mindist=", sprintf("%1.13e", minDist)) content_file <- c(content_file, c(paste0("design=", f), values_formated)) } basename <- "design_dim_50_size_100_" files <- paste0(basename, 1:5, "_centered.csv") for (f in files) { data <- data <- read.table(f, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.13e", c2), ", phip=", sprintf("%1.13e", phip), ", mindist=", sprintf("%1.13e", minDist)) content_file <- c(content_file, c(paste0("design=", f), values_formated)) } fileConn <-file("space_filling_criteria_ref.val") writeLines(content_file, fileConn) close(fileConn) openturns-1.9/validation/src/optimal_lhs/validate_spacefilling_evaluate_nonunit.R000066400000000000000000000022221307543307100307510ustar00rootroot00000000000000library(DiceDesign) # For each design, evaluation of some criteria # Comparison to be done with space_filling_criteria.val basename <- "design_dim_2_size_20_" files <- paste0(basename, 1:10, "_nonunit.csv") content_file <- c() for (f in files) { data <- data <- read.table(f, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.13e", c2), ", phip=", sprintf("%1.13e", phip), ", mindist=", sprintf("%1.13e", minDist)) content_file <- c(content_file, c(paste0("design=", f), values_formated)) } basename <- "design_dim_50_size_100_" files <- paste0(basename, 1:5, "_nonunit.csv") for (f in files) { data <- data <- read.table(f, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.13e", c2), ", phip=", sprintf("%1.13e", phip), ", mindist=", sprintf("%1.13e", minDist)) content_file <- c(content_file, c(paste0("design=", f), values_formated)) } fileConn <-file("space_filling_criteria_nonunit_ref.val") writeLines(content_file, fileConn) close(fileConn) openturns-1.9/validation/src/optimal_lhs/validate_spacefilling_perturbLHS.R000066400000000000000000000042551307543307100274330ustar00rootroot00000000000000library(DiceDesign) # Comparison to be done with space_filling_criteria.val filename <- "design_dim_2_size_20_centered_perturbLHS.csv" data <- read.table(filename, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.10e", c2), ", phip=", sprintf("%1.10e", phip), ", mindist=", sprintf("%1.10e", minDist)) content_file <- c() content_file <- c(content_file, c(paste0("initial design=", filename), values_formated)) fileConn <-file("space_filling_criteria_perturbation_ref.val", open="w") # Perturbations dimension <- 2 size <- 20 for (row1 in 1:size) { for (row2 in 1:size) { for (column in 1:dimension) { # The 3-tuple (row1, row2, column) # Criteria exchange design[row1, column] and design[row2, column] updated_c2 <- sqrt( DiceDesign:::discrepancyC2_EP(data, row1, row2, column, c2*c2) ) values_formated <- paste0("row1=",row1, ", row2=", row2, ", column=", column, ", updated c2=", sprintf("%1.10e", updated_c2)) writeLines(values_formated, fileConn) } } } close(fileConn) ## New test with biggest dimension fileConn <-file("space_filling_criteria_perturbation_ref.val", open="a+") dimension <- 50 size <- 100 # export the design filename <- "design_dim_50_size_100_centered_perturbLHS.csv" data <- read.table(filename, sep=";") minDist <- mindist(data) phip <- phiP(data) c2 <- discrepancyCriteria(data,type='C2')$DisC2 values_formated <- paste0("c2=", sprintf("%1.10e", c2), ", phip=", sprintf("%1.10e", phip), ", mindist=", sprintf("%1.10e", minDist)) writeLines(c(paste0("initial design=", filename), values_formated), fileConn) # Perturbations for (row1 in seq(1,size,10)) { for (row2 in seq(1,size,10)) { for (column in seq(1,dimension,10)) { # The 3-tuple (row1, row2, column) # Criteria exchange design[row1, column] and design[row2, column] updated_c2 <- sqrt( DiceDesign:::discrepancyC2_EP(data, row1, row2, column, c2*c2) ) values_formated <- paste0("row1=",row1, ", row2=", row2, ", column=", column, ", updated c2=", sprintf("%1.10e", updated_c2)) writeLines(values_formated, fileConn) } } } close(fileConn) openturns-1.9/validation/src/pNonCentralStudent.mw000066400000000000000000001340101307543307100225020ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZQLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJXdpdGhGJ0YvRjItSShtZmVuY2VkR0YkNiQtRiM2Iy1GLDYlUStTdGF0aXN0aWNzRidGL0YyRjlGNUZPLUYsNiVRJGNkZkYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUYsNiVRJENERkYnRi9GMi1GYG82JC1GIzYnRmduLUYsNiVRM05vbkNlbnRyYWxTdHVkZW50VEYnRi9GMi1GYG82JC1GIzYmLUkjbW5HRiQ2JFEkMS4wRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnRmduLUZccTYkUTcyLjMyNjE3NDMwNzM1MzM0NzYyNTU5RidGOUY5Rl9xLUYsNiVRInhGJ0YvRjJGOUY1Rk9GZ24tRjY2L1EkZm9yRicvJSVib2xkR0YxL0YzUSVib2xkRicvJStmb250d2VpZ2h0R0ZhckY7Rj5GQEZCRkRGRkZIRmpuRltvRmduLUYsNiVRJXZhbFhGJ0YvRjJGZ24tRjY2L1ElZnJvbUYnRl5yRmByRmJyRjtGPkZARkJGREZGRkhGam5GW29GZ24tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORl5zLUZccTYkUSMzMEYnRjlGZ24tRjY2L1EjdG9GJ0ZeckZgckZickY7Rj5GQEZCRkRGRkZIRmpuRltvRmduRmBzRmduLUY2Ni9RI2J5RidGXnJGYHJGYnJGO0Y+RkBGQkZERkZGSEZqbkZbb0Znbi1GXHE2JFEkMC41RidGOUZnbi1GNjYvUSNkb0YnRl5yRmByRmJyRjtGPkZARkJGREZGRkhGam5GW29GT0ZnbkZnbkZnbkZnbi1GLDYlUSZldmFsZkYnRi9GMi1GYG82Ji1GIzYjRmBzRjkvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRictRmBvNiQtRiM2Iy1GYG82Ji1GIzYmRmRyRl9xLUYsNiVRJXN1YnNGJ0YvRjItRmBvNiQtRiM2KEZocS1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZkckZfcUZnbkZnb0Y5RjlGZnRGaXRGOS1GNjYtUSI7RidGOUY7RmJxRkBGQkZERkZGSEZqbkZNRk9GZ24tRjY2L1Ejb2RGJ0ZeckZgckZickY7Rj5GQEZCRkRGRkZIRmpuRltvRl52 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder NyQkISNJIiIhJCI/IXkhcCFvZEo3JVIhPVpYaSwqISNN NyQkISQmSCEiIiQiPz9bQmJMR2dCTExoOS5wIiohI00= NyQkISQhSCEiIiQiPz1dJHpBUT0jMyRlKlxVM0YkKiEjTQ== NyQkISQmRyEiIiQiPyZbXFpYKnlFKHpPayI0byFcKiEjTQ== NyQkISQhRyEiIiQiP3N1KVJcYykqUSQzdz4kPSxtKiEjTQ== NyQkISR2IyEiIiQiP09CLCczNUc1J2U2Jypbck4pKiEjTQ== NyQkISRxIyEiIiQiPzY8KEg5TWJAbExiRSJ5LDUhI0w= NyQkISRsIyEiIiQiPypSLUxjemI9Pj0uJXpuPzUhI0w= NyQkISRnIyEiIiQiPzVhbiRSP15sJCl6PjcsLi8iISNM NyQkISRiIyEiIiQiP2dzcCxXOCtwJlxIXyRwZzUhI0w= NyQkISRdIyEiIiQiP1FuRUx3UWpbd0RxNyE+MyIhI0w= NyQkISRYIyEiIiQiP3gkNGo9V1RGMWdPRHVSNSIhI0w= NyQkISRTIyEiIiQiP3Z5akcqXE8uU05zXm1wNyIhI0w= NyQkISROIyEiIiQiP2Y2TkI7dz4vJj00cU80OiIhI0w= NyQkISRJIyEiIiQiPyl5bSlSQktiTC1jUiZbZjwiISNM NyQkISREIyEiIiQiP3BxY3lDJWVQKClcJUc5Mi03ISNM NyQkISQ/IyEiIiQiP00iPXQrKmYkZS1mZTEiUUg3ISNM NyQkISQ6IyEiIiQiP3ZeY0BGOUBbcTcmPWd6RCIhI0w= NyQkISQ1IyEiIiQiPzYoMzQnSG5mVCkpPSJSKip5RyIhI0w= NyQkISQwIyEiIiQiPyNcW3QkZWBaZiFbJD4iKUg+OCEjTA== NyQkISQrIyEiIiQiP3kuKHlINCtGel93dGxBTiIhI0w= NyQkISQmPiEiIiQiPyM+aHlLLVE5Ny4nPUcjcFEiISNM NyQkISQhPiEiIiQiPyN6XylwNHVIJFtEOGgtTVUiISNM NyQkISQmPSEiIiQiPzY6P3hVUGcmNG0/dl89WSIhI0w= NyQkISQhPSEiIiQiPydwW0V6SDoobyFbI2ZzVi06ISNM NyQkISR2IiEiIiQiP0ZGKG87a2k8ZSIpKXApUWBhIiEjTA== NyQkISRxIiEiIiQiP0ZCOioqPTJyeVlXKHloMmYiISNM NyQkISRsIiEiIiQiPylcOWQnNCoqKjNrLyRHXCQqUTshI0w= NyQkISRnIiEiIiQiP2FOT3k3KClmN19YdmQ2IXAiISNM NyQkISRiIiEiIiQiPyhcbTJMO18qZjNMd1xmVzwhI0w= NyQkISRdIiEiIiQiPy9LJ1FpKXBGPDcieSY9cS09ISNM NyQkISRYIiEiIiQiPzUpXCNcXFRGbCo+Ino1IlsnPSEjTA== NyQkISRTIiEiIiQiPy8uNlFqJXk1LlxocV04JD4hI0w= NyQkISROIiEiIiQiPzZXclVKUDlId1R1PyJHKyMhI0w= NyQkISRJIiEiIiQiPyIpZipIVWVEcDInUT8+d3o/ISNM NyQkISREIiEiIiQiP0ZGWEsoUk9fNGRPVGRHOyMhI0w= NyQkISQ/IiEiIiQiPyhIT0puNDczYTJDJFwnR0QjISNM NyQkISQ6IiEiIiQiP0p0OSV6Q0ZgMEZlciRvXUIhI0w= NyQkISQ1IiEiIiQiP0YlKSllYSwjPj9jQ1BmUGRDISNM NyQkISQwIiEiIiQiP2lnTXduOEV3aCtFYD91RCEjTA== NyQkISQrIiEiIiQiPylvaScpbyFIUidSMzpKKG8tRiEjTA== NyQkISMmKiEiIiQiPyhvLjVnNWkzVGZgIVxsV0chI0w= NyQkISMhKiEiIiQiPysqM0gkKlFMRiFlbyZSWUIrJCEjTA== NyQkISMmKSEiIiQiP1F4SDxbKClRKj52JmZQX3lKISNM NyQkISMhKSEiIiQiP10lKTQqeWwrIXBcZDFeandMISNM NyQkISN2ISIiJCI/clVORkJlemxbJVJbVDVnJCEjTA== NyQkISNxISIiJCI/Z3hfWEs2KnohcD1SKVJ0JlEhI0w= NyQkISNsISIiJCI/QCczUUJcZypmVUgzSyRHOiUhI0w= NyQkISNnISIiJCI/RVooWyEpej9JPUVfbEtzXCUhI0w= NyQkISNiISIiJCI/JTRqdUExIj1GKD1Kc05QIVwhI0w= NyQkISNdISIiJCI/WFp1VzhoXU5AXzgjUjJSJiEjTA== NyQkISNYISIiJCI/KTMjW3NZMVtjUlhfbm0lKWYhI0w= NyQkISNTISIiJCI/OCQqKmVDJW9oU3MqZk5iW3MnISNM NyQkISNOISIiJCI/QksvaCEzeShRI1I3WXhDbighI0w= NyQkISNJISIiJCI/WlAkKlElZXYmKVxrdj5qeiMqKSEjTA== NyQkISNEISIiJCI/NSp6WU87ZF1gbG4tK28xIiEjSw== NyQkISM/ISIiJCI/byoqR05PInomNFhbeFBJQjghI0s= NyQkISM6ISIiJCI/SzdLeVllK3FvXCdlI2VPPCEjSw== NyQkISM1ISIiJCI/LnpTLkxYdSR6cm8uKytdIyEjSw== NyQkISImISIiJCI/KFI5bWdHQWRcW3hBek9FJSEjSw== NyQkIiIhRiReJCQiP1tyTF8rWCZcI1J0Km9pLysiISNKRiM= NyQkIiImISIiJCI/eCQqNGpxW3gpSCRcXFh1P0whI0o= NyQkIiM1ISIiJCI/QCpmeSN6Iz1lJEgpUSsrK3YqISNK NyQkIiM6ISIiJCI/VFZ2dkRjciUpUSgqKVwoKj4mPiEjSQ== NyQkIiM/ISIiJCI/IUcqKW9vQi9jeSEpKXp0eW9IISNJ NyQkIiNEISIiJCI/KSpSS2hOSDooeWN2VGBjJ1EhI0k= NyQkIiNJISIiJCI/KFxLVExfZDF6PGw6MzNoJSEjSQ== NyQkIiNOISIiJCI/bjVGdi5dSVNidCplTy1BJiEjSQ== NyQkIiNTISIiJCI/d0UkeUNDS3Z5KikzZCFmPmQhI0k= NyQkIiNYISIiJCI/dWIkKm8lXEpEKj4memQnR0toISNJ NyQkIiNdISIiJCI/Xi1WUXFxLHBBb14nb3FaJyEjSQ== NyQkIiNiISIiJCI/UTIlUlUxJW8/bThld0tvbiEjSQ== NyQkIiNnISIiJCI/WFkoR1MpR0xwSWdeaCpwLCghI0k= NyQkIiNsISIiJCI/QjVYWT0udCYpWyJlMylSSnMhI0k= NyQkIiNxISIiJCI/KmVFLEMhcCUpZVksOTMjelQoISNJ NyQkIiN2ISIiJCI/TD8uNyYpendgOGYrYV4iZSghI0k= NyQkIiMhKSEiIiQiP2N6OiQ+JkcpKW8wWzw6MUV4ISNJ NyQkIiMmKSEiIiQiP2chKip6PmA8cVEmcEJEamF5ISNJ NyQkIiMhKiEiIiQiPzhiPzhHTSV6VDQ+dylvcHohI0k= NyQkIiMmKiEiIiQiP3c8Kj1yMCEzblFCdiY+SzIpISNJ NyQkIiQrIiEiIiQiPzQmNHIyJEchKVxOWUAnW287KSEjSQ== NyQkIiQwIiEiIiQiP2cpZlEoeUdsbm44YkYiPkQpISNJ NyQkIiQ1IiEiIiQiP2A5eD4/RGlpMlQ5PF9IJCkhI0k= NyQkIiQ6IiEiIiQiP3lZYEIlb1VXK2F0dC4xUykhI0k= NyQkIiQ/IiEiIiQiPycqKmVTNXVgcWdbTHdTZlkpISNJ NyQkIiREIiEiIiQiP0YuI0hCQyUzRUs0XWU+RSYpISNJ NyQkIiRJIiEiIiQiP1E7X3cmKltUMyJRbHJNPmUpISNJ NyQkIiROIiEiIiQiP01xJlxDYyJSMD88N0drTCcpISNJ NyQkIiRTIiEiIiQiP0snW0IoWyh5KzwmKSlbKlE8bykhI0k= NyQkIiRYIiEiIiQiP296KTR2MCpmKCpIO3BpZUUoKSEjSQ== NyQkIiRdIiEiIiQiPyVvPDoxMC90NCJcTDZdbygpISNJ NyQkIiRiIiEiIiQiP2hiX1lUT3FIRCEpcC53MikpISNJ NyQkIiRnIiEiIiQiP0M4Nm9jLCQpRzw5Q3NnVykpISNJ NyQkIiRsIiEiIiQiPycqPiM9VD5Hdk1eVkZjI3opKSEjSQ== NyQkIiRxIiEiIiQiPyRbWyE0J29BJXoyUDV2Kj0iKikhI0k= NyQkIiR2IiEiIiQiP2A+RVk8ckMoUSZlUygqcFUqKSEjSQ== NyQkIiQhPSEiIiQiP2leQic+eXclPkokKlxNIj0oKikhI0k= NyQkIiQmPSEiIiQiPy9leDhpbC9Ec140S1AqKiopISNJ NyQkIiQhPiEiIiQiP2hLJTM/Jls/KkdodHIqXEQhKiEjSQ== NyQkIiQmPiEiIiQiP0E7IT02ZGghKj5kVWAsLjAqISNJ NyQkIiQrIyEiIiQiP2tsRHkheUIpeW5NbWwoUTIqISNJ NyQkIiQwIyEiIiQiPyIqejEoejk0PUVmakw4ajQqISNJ NyQkIiQ1IyEiIiQiPyhHS05ePy9PKio0eDIjcDwiKiEjSQ== NyQkIiQ6IyEiIiQiPzBfbl82V3lQW116YzNRIiohI0k= NyQkIiQ/IyEiIiQiPyIqPUpHYiI0bTpdYl1ndjoqISNJ NyQkIiREIyEiIiQiPzdLWktYLjtwKXprNXhoPCohI0k= NyQkIiRJIyEiIiQiPyMqSCY+RmRjKD4meTMlMypSPiohI0k= NyQkIiROIyEiIiQiP1giWzNlIlI9Kj1aJz1DMDYjKiEjSQ== NyQkIiRTIyEiIiQiP05cWFRldCUpNGtxeCQzdUEqISNJ NyQkIiRYIyEiIiQiPy8lPW0tWSI9Jz1pTF0sSkMqISNJ NyQkIiRdIyEiIiQiP2UwbiJmMVs8Ny4jKT5yImUjKiEjSQ== NyQkIiRiIyEiIiQiPzIlPSYqZmEyQ1gqPTRRbHMjKiEjSQ== NyQkIiRnIyEiIiQiP0RpSk83clNMOmY8SGUnRyohI0k= NyQkIiRsIyEiIiQiPy0oW116Iz5tUyYpZidmKikqKkgqISNJ NyQkIiRxIyEiIiQiPytyLUI0aD1neHJTRSFISiohI0k= NyQkIiR2IyEiIiQiPy01amh4WjVXbVxxKFtgSyohI0k= NyQkIiQhRyEiIiQiP0R3dmRhUFpJVWc6R05QJCohI0k= NyQkIiQmRyEiIiQiP1hoLWovdCllbSopKXl5JCpbJCohI0k= NyQkIiQhSCEiIiQiP04qPSxTdTdmWyFvJFtELE8qISNJ NyQkIiQmSCEiIiQiPys9THgmSDUlNDlHMWQkNFAqISNJ NyQkIiQrJCEiIiQiP3F5YiM9I3lNKSpwUCZIKFEiUSohI0k= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/qnorm.mws000066400000000000000000000115051307543307100202320ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 904 "restart:\nDigits:=4 0;\na:=[-3.969683028665376e+01, 2.209460984245205e+02,\n-2.75928510446 9687e+02, 1.383577518672690e+02,\n-3.066479806614716e+01, 2.5066282774 59239e+00];\nb:=[-5.447609879822406e+01, 1.615858368580409e+02,\011-1. 556989798598866e+02, 6.680131188771972e+01, -1.328068155288572e+01];\n c:=[-7.784894002430293e-03, -3.223964580411365e-01, -2.400758277161838 e+00, -2.549732539343734e+00, 4.374664141464968e+00, 2.938163982698783 e+00];\nd:=[7.784695709041462e-03, 3.224671290700398e-01, 2.4451341371 42996e+00, 3.754408661907416e+00];\n#u := q - 0.5;\n#t := u * u;\nu := U * (((((a[1] * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) * t + a [6])\n\011 /(((((b[1] * t + b[2]) * t + b[3]) * t + b[4]) * t + b[5 ]) * t + 1.0);\nt_ := sqrt(2.0)*Q;#sqrt(-2.0 * log(q));\nu_ := (((((c[ 1] * t_ + c[2]) * t_ + c[3]) * t_ + c[4]) * t_ + c[5]) * t_ + c[6])\n \011 /((((d[1] * t_ + d[2]) * t_ + d[3]) * t_ + d[4]) *t_ + 1.0);\n " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'DigitsG\"#S" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#>%\"aG7($!1w`mGIopR!#9$\"10_C%)4Y4A!#8$!1(opW5&GfFF+$ \"1!ps'=vd$Q\"F+$!1;Zh1)zk1$F($\"1R#fuFGm]#!#:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG7'$!11C#)z)4wW&!#9$\"14/eo$eeh\"!#8$!1m))f)z*)pb \"F+$\"1s>x)=J,o'F($!1s&)Gb\"o!G8F(" }}{PARA 12 "" 1 "" {XPPMATH 20 "6 #>%\"cG7($!1$HIC+%*[y(!#=$!1l8T!ekRA$!#;$!1Q=;x#e2S#!#:$!1MPMRDt\\DF.$ \"1o\\YTTmuVF.$\"1$y)p#)R;QHF." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" dG7&$\"1i9/4dp%y(!#=$\"1)R+2HrYA$!#;$\"1'*H9PT8XC!#:$\"1;u!>m3Wv$F." } }{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"uG*(%\"UG\"\"\",&*&,&*&,&*&,&*&,& *&$\"1w`mGIopR!#9F'%\"tGF'!\"\"$\"10_C%)4Y4A!#8F'F'F5F'F'$\"1(opW5&GfF F9F6F'F5F'F'$\"1!ps'=vd$Q\"F9F'F'F5F'F'$\"1;Zh1)zk1$F4F6F'F5F'F'$\"1R# fuFGm]#!#:F'F',&*&,&*&,&*&,&*&,&*&$\"11C#)z)4wW&F4F'F5F'F6$\"14/eo$eeh \"F9F'F'F5F'F'$\"1m))f)z*)pb\"F9F6F'F5F'F'$\"1s>x)=J,o'F4F'F'F5F'F'$\" 1s&)Gb\"o!G8F4F6F'F5F'F'$\"#5F6F'F6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%#t_G,$*&$\"Iq&y!)p4Us)o,)[]4tBc8UT\"!#R\"\"\"%\"QGF*F*" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#u_G*&,&*($\"Iq&y!)p4Us)o,)[]4tBc8UT\"!#R\"\" \",&*(F(F+,&*(F(F+,&*(F(F+,&*&$\"II3e80W-qj)zs')Q()zE]45\"!#TF+%\"QGF+ !\"\"$\"1l8T!ekRA$!#;F8F+F7F+F+$\"1Q=;x#e2S#!#:F8F+F7F+F+$\"1MPMRDt\\D F>F8F+F7F+F+$\"1o\\YTTmuVF>F+F+F7F+F+$\"1$y)p#)R;QHF>F+F+,&*(F(F+,&*(F (F+,&*(F(F+,&*&$\"IJmmLA-2l(yh+tSn]AA45\"F6F+F7F+F+$\"1)R+2HrYA$F;F+F+ F7F+F+$\"1'*H9PT8XCF>F+F+F7F+F+$\"1;u!>m3Wv$F>F+F+F7F+F+$\"#5F8F+F8" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 168 "with(numapprox):\nierf1:= convert(evalf((subs(q=(y+1)/2,normal(expand(sqrt(2.)*u))))),horner);\n ierf2:=subs(Q=sqrt(-ln((y+1)/2.)),hornerform(factor(evalf(sqrt(2)*u_)) ,Q));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&ierf1G*(%\"UG\"\"\",&$\"I$ R4Css&=dm0bHl2\"eq2\\a$!#R!\"\"*&,&$\"I$3`871vY-n24rvd7LdmL%!#QF'*&,&$ \"Impc[!Hwm')=()eBV,:4um&>!#PF,*&,&$\"IWB&G5V4k%)\\+%y$4&><%=A!RF6F'*& ,&$\"ISEA#[&*3'>g7#)>wPX*o\\Y7$F6F,*&$\"Ij?h$oDu&fXOBey3Yx&zRh&F1F'%\" tGF'F'F'FBF'F'F'FBF'F'F'FBF'F'F'FBF'F'F',&$F'\"\"!F,*&,&$\"I++++++++++ ++s&)Gb\"o!G8F1F'*&,&$\"I++++++++++++s>x)=J,o'F1F,*&,&$\"I++++++++++++ m))f)z*)pb\"F6F'*&,&$\"I++++++++++++4/eo$eeh\"F6F,*&$\"I++++++++++++1C #)z)4wW&F1F'FBF'F'F'FBF'F'F'FBF'F'F'FBF'F'F'FBF'F'F," }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&ierf2G,$*6$\"I/F*H&QCbtEF#[>8;W%40+?!#R\"\"\",&*$ ,$-%#lnG6#,&*&$\"I+++++++++++++++++++]!#SF*%\"yGF*F*F3F*!\"\"#F*\"\"#F *$\"I*37-]Ca*)zn^*\\O9[IsxtA!#QF*F*,&F,F*$\"I4JyZK#)\\C5Xr;iaV?/^_`F)F *F*,&F,F*$\"IL@0$fXBFVy*R3')3j'e)))=;F)F*F*,&F,F*$\"IU'ycv'yzI;V;bd,;9 PvnSF5F*F*,&F,F*$\"IHd,w%>N#eF&3k4ml\\v^ZK)F5F7F*,&F,F*$\"I69f'Rt[=JAI tAJ7mub+F#F " 0 "" {MPLTEXT 1 0 129 "yn:=0.1:\nsubs(y=yn,ierf1); \nsubs(q=(yn+1)/2,u*sqrt(2.));\nevalf(subs(y=yn,ierf2));\nevalf(subs(Q =sqrt(-ln((yn+1)/2.)),u_*sqrt(2.)));" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#$\"IW/0NP\"zAo.fnza#=5)>rx\"!#S" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"IX/0NP\"zAo.fnza#=5)>rx\"!#S" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"I E.+()[k2Z-\"**)R\\Y72'\\Nx\"!#S" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\" IE.+()[k2Z-\"**)R\\Y72'\\Nx\"!#S" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "3 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/qnorm.txt000066400000000000000000000107441307543307100202470ustar00rootroot00000000000000> restart: > Digits:=40; > a:=[-3.969683028665376e+01, 2.209460984245205e+02, > -2.759285104469687e+02, 1.383577518672690e+02, > -3.066479806614716e+01, 2.506628277459239e+00]; > b:=[-5.447609879822406e+01, 1.615858368580409e+02, > -1.556989798598866e+02, 6.680131188771972e+01, > -1.328068155288572e+01]; > c:=[-7.784894002430293e-03, -3.223964580411365e-01, > -2.400758277161838e+00, -2.549732539343734e+00, 4.374664141464968e+00, > 2.938163982698783e+00]; > d:=[7.784695709041462e-03, 3.224671290700398e-01, > 2.445134137142996e+00, 3.754408661907416e+00]; > #u := q - 0.5; > #t := u * u; > u := U * (((((a[1] * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) * t > + a[6]) > /(((((b[1] * t + b[2]) * t + b[3]) * t + b[4]) * t + b[5]) * t + > 1.0); > t_ := sqrt(2.0)*Q;#sqrt(-2.0 * log(q)); > u_ := (((((c[1] * t_ + c[2]) * t_ + c[3]) * t_ + c[4]) * t_ + c[5]) * > t_ + c[6]) > /((((d[1] * t_ + d[2]) * t_ + d[3]) * t_ + d[4]) *t_ + 1.0); > Digits := 40 a := [-39.69683028665376, 220.9460984245205, -275.9285104469687, 138.3577518672690, -30.66479806614716, 2.506628277459239] b := [-54.47609879822406, 161.5858368580409, -155.6989798598866, 66.80131188771972, -13.28068155288572] c := [-0.007784894002430293, -0.3223964580411365, -2.400758277161838, -2.549732539343734, 4.374664141464968, 2.938163982698783] d := [0.007784695709041462, 0.3224671290700398, 2.445134137142996, 3.754408661907416] u := U (((((-39.69683028665376 t + 220.9460984245205) t - 275.9285104469687) t + 138.3577518672690) t - 30.66479806614716) t + 2.506628277459239)/(((( (-54.47609879822406 t + 161.5858368580409) t - 155.6989798598866) t + 66.80131188771972) t - 13.28068155288572) t + 1.0) t_ := 1.414213562373095048801688724209698078570 Q u_ := (1.414213562373095048801688724209698078570 ( 1.414213562373095048801688724209698078570 ( 1.414213562373095048801688724209698078570 ( 1.414213562373095048801688724209698078570 ( -0.01100950267987388672798637002440513580830 Q - 0.3223964580411365) Q - 2.400758277161838) Q - 2.549732539343734) Q + 4.374664141464968) Q + 2.938163982698783)/( 1.414213562373095048801688724209698078570 ( 1.414213562373095048801688724209698078570 ( 1.414213562373095048801688724209698078570 ( 0.01100922225067407300617876507022233666631 Q + 0.3224671290700398) Q + 2.445134137142996) Q + 3.754408661907416) Q + 1.0) > with(numapprox): > ierf1:=convert(evalf((subs(q=(y+1)/2,normal(expand(sqrt(2.)*u))))),hor > ner); > ierf2:=subs(Q=sqrt(-ln((y+1)/2.)),hornerform(factor(evalf(sqrt(2)*u_)) > ,Q)); ierf1 := U (-3.544907705810765295505665718572722409393 + ( 43.36657331257757109076702467506121353083 + ( -195.6674091501432358871886667629048566966 + ( 390.2218417195093784004984640943102852344 + ( -312.4649689453776198212601960895482222640 + 56.13979577460878582336455957425683612063 t) t) t) t) t)/( -1. + (13.28068155288572000000000000000000000000 + ( -66.80131188771972000000000000000000000000 + ( 155.6989798598866000000000000000000000000 + ( -161.5858368580409000000000000000000000000 + 54.47609879822406000000000000000000000000 t) t) t) t) t) ierf2 := - 2.000050944416131948227267355243852992704 (%1 + 22.73777230481436499516779895424500212089) (%1 + 5.352510420435462167145102449823247783109) (%1 + 1.618888586630886083997843272345593052133) (%1 + 0.4067753714160157551643163079786755678642) (%1 - 0.8324751754965660964085275823519476015729)/( (%1 + 22.70055746612312273302231184873396591411) (%1 + 5.213271232693735748366578666495225744200) (%1 + 1.138444540257063858241777655664381170080) (%1 + 0.2383634405785183657476502235410438313666)) %1 := (-ln(0.5000000000000000000000000000000000000000 y 1/2 + 0.5000000000000000000000000000000000000000)) > yn:=0.1: > subs(y=yn,ierf1); > subs(q=(yn+1)/2,u*sqrt(2.)); > evalf(subs(y=yn,ierf2)); > evalf(subs(Q=sqrt(-ln((yn+1)/2.)),u_*sqrt(2.))); 0.1777119810182547967590368227913735050444 0.1777119810182547967590368227913735050445 0.1773549607124649398991024707644887000326 0.1773549607124649398991024707644887000326 > openturns-1.9/validation/src/shifted_moments.mw000066400000000000000000000675351307543307100221210ustar00rootroot00000000000000 restart: with(Statistics): X:=RandomVariable(Normal(0,1)): Y:=X^2+2*sin(X): PDF(Y,y); Digits:=20: INF:=infinity: Mmn:=int((x^2+2*sin(x)-m)^n*PDF(X,x),x=-INF..INF); IiIh LUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQsJCoqKSwoKiRJInhHRiciIiMiIiItSSRzaW5HRiQ2I0YuRi9JIm1HRichIiJJIm5HRidGMEYvI0YwRi9JI1BpR0YlI0Y1Ri8tSSRleHBHRiQ2IywkRi1GOUYwRjcvRi47LCRJKWluZmluaXR5R0YlRjVGQQ== mean:=evalf(subs(m=0,n=1,Mmn)); JCI1KysrKysrKysrNSEjPg== for k from 2 to 10 do print(evalf(subs(m=0,n=k,Mmn))); end do; XiQkIjVpaHVuX0wlSCRIWiEjPiQiNVg5IXpES1kyO2IiISNg XiQkIjVhJUchZiMpNE5nVkIhIz0kITVtUDluJTQyUGtIKSEjXQ== XiQkIjUrbCdmTmwwIlFTOiEjPCQhNTdtJHlneERldShRISNf XiQkIjVTTmBAR19oVGg3ISM7JCE1IXpkKGUpek1gOjonISNb JCI1ejAqKVFNKTQkRyFIIiEjOg== XiQkIjVcSitSZzFZaUc7ISM5JCI1K202a3QoM0RnYikhI1o= JCI1XyYqZlUkPjNhKG9DISM4 XiQkIjVXSDZOVUshKT1UViEjNyQiNWIvYF0oKkctayMpWyEjVw== JCI1RTUsSmI6K10kZSkhIzY= openturns-1.9/validation/src/ti.mws000066400000000000000000000115641307543307100175170ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 137 "restart:\np:=(2*Pi) ^(-16/2)/sigma1^13/sigma2^3*exp(-1/(2*sigma1^2)*sum((x[i]-1)^2,i=1..13 ))*exp(-1/(2*sigma2^2)*sum((x[i]-1)^2,i=14..16));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"pG,$*&#\"\"\"\"$c#F(*,%#PiG!\")%'sigma1G!#8%'sigma2 G!\"$-%$expG6#,$*&#F(\"\"#F(*&F-!\"#,<*$),&&%\"xG6#F(F(F(!\"\"F7F(F(*$ ),&&F?6#F7F(F(FAF7F(F(*$),&&F?6#\"\"$F(F(FAF7F(F(*$),&&F?6#\"\"%F(F(FA F7F(F(*$),&&F?6#\"\"&F(F(FAF7F(F(*$),&&F?6#\"\"'F(F(FAF7F(F(*$),&&F?6# \"\"(F(F(FAF7F(F(*$),&&F?6#\"\")F(F(FAF7F(F(*$),&&F?6#\"\"*F(F(FAF7F(F (*$),&&F?6#\"#5F(F(FAF7F(F(*$),&&F?6#\"#6F(F(FAF7F(F(*$),&&F?6#\"#7F(F (FAF7F(F(*$),&&F?6#\"#8F(F(FAF7F(F(F(F(FAF(-F26#,$*&#F(F7F(*&F/F9,(*$) ,&&F?6#\"#9F(F(FAF7F(F(*$),&&F?6#\"#:F(F(FAF7F(F(*$),&&F?6#\"#;F(F(FAF 7F(F(F(F(FAF(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "dp:=di ff(p,sigma1);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#dpG,&*&#\"#8\"$c# \"\"\"*,%#PiG!\")%'sigma1G!#9%'sigma2G!\"$-%$expG6#,$*&#F*\"\"#F**&F.! \"#,<*$),&&%\"xG6#F*F*F*!\"\"F8F*F**$),&&F@6#F8F*F*FBF8F*F**$),&&F@6# \"\"$F*F*FBF8F*F**$),&&F@6#\"\"%F*F*FBF8F*F**$),&&F@6#\"\"&F*F*FBF8F*F **$),&&F@6#\"\"'F*F*FBF8F*F**$),&&F@6#\"\"(F*F*FBF8F*F**$),&&F@6#\"\") F*F*FBF8F*F**$),&&F@6#\"\"*F*F*FBF8F*F**$),&&F@6#\"#5F*F*FBF8F*F**$),& &F@6#\"#6F*F*FBF8F*F**$),&&F@6#\"#7F*F*FBF8F*F**$),&&F@6#F(F*F*FBF8F*F *F*F*FBF*-F36#,$*&#F*F8F**&F0F:,(*$),&&F@6#\"#9F*F*FBF8F*F**$),&&F@6# \"#:F*F*FBF8F*F**$),&&F@6#\"#;F*F*FBF8F*F*F*F*FBF*F*FB*&#F*F)F**.F,F-F .!#;F0F1F;F*F2F*FcqF*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "p_i:=subs(sigma1=tau1,sigma2=tau2,p);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$p_iG,$*&#\"\"\"\"$c#F(*,%#PiG!\")%%tau1G!#8%%tau2G! \"$-%$expG6#,$*&#F(\"\"#F(*&F-!\"#,<*$),&&%\"xG6#F(F(F(!\"\"F7F(F(*$), &&F?6#F7F(F(FAF7F(F(*$),&&F?6#\"\"$F(F(FAF7F(F(*$),&&F?6#\"\"%F(F(FAF7 F(F(*$),&&F?6#\"\"&F(F(FAF7F(F(*$),&&F?6#\"\"'F(F(FAF7F(F(*$),&&F?6#\" \"(F(F(FAF7F(F(*$),&&F?6#\"\")F(F(FAF7F(F(*$),&&F?6#\"\"*F(F(FAF7F(F(* $),&&F?6#\"#5F(F(FAF7F(F(*$),&&F?6#\"#6F(F(FAF7F(F(*$),&&F?6#\"#7F(F(F AF7F(F(*$),&&F?6#\"#8F(F(FAF7F(F(F(F(FAF(-F26#,$*&#F(F7F(*&F/F9,(*$),& &F?6#\"#9F(F(FAF7F(F(*$),&&F?6#\"#:F(F(FAF7F(F(*$),&&F?6#\"#;F(F(FAF7F (F(F(F(FAF(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "collect( expand(p/p_i),exp);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#*\\t%'sigma1G!# 8%'sigma2G!\"$-%$expG6#,$*(\"#8\"\"\"\"\"#!\"\"F$!\"#F0F.-F)6#*&F$F1&% \"xG6#F.F.F.-F)6#*&F$F1&F66#F/F.F.-F)6#*&F$F1&F66#\"\"$F.F.-F)6#*&F$F1 &F66#\"\"%F.F.-F)6#*&F$F1&F66#\"\"&F.F.-F)6#*&F$F1&F66#\"\"'F.F.-F)6#* &F$F1&F66#\"\"(F.F.-F)6#*&F$F1&F66#\"\")F.F.-F)6#*&F$F1&F66#\"\"*F.F.- F)6#*&F$F1&F66#\"#5F.F.-F)6#*&F$F1&F66#\"#6F.F.-F)6#*&F$F1&F66#\"#7F.F .-F)6#*&F$F1&F66#F-F.F.-F)6#,$*&#F.F/F.*&F$F1F5F/F.F0F.-F)6#,$*&#F.F/F .*&F$F1F;F/F.F0F.-F)6#,$*&#F.F/F.*&F$F1F@F/F.F0F.-F)6#,$*&#F.F/F.*&F$F 1FFF/F.F0F.-F)6#,$*&#F.F/F.*&F$F1FLF/F.F0F.-F)6#,$*&#F.F/F.*&F$F1FRF/F .F0F.-F)6#,$*&#F.F/F.*&F$F1FXF/F.F0F.-F)6#,$*&#F.F/F.*&F$F1FhnF/F.F0F. -F)6#,$*&#F.F/F.*&F$F1F^oF/F.F0F.-F)6#,$*&#F.F/F.*&F$F1FdoF/F.F0F.-F)6 #,$*&#F.F/F.*&F$F1FjoF/F.F0F.-F)6#,$*&#F.F/F.*&F$F1F`pF/F.F0F.-F)6#,$* &#F.F/F.*&F$F1FfpF/F.F0F.-F)6#,$*&#F.F/F.*&F&F1&F66#\"#9F/F.F0F.-F)6#* &F&F1F\\vF.F.-F)6#,$*(FBF.F/F0F&F1F0F.-F)6#,$*&#F.F/F.*&F&F1&F66#\"#:F /F.F0F.-F)6#*&F&F1F\\wF.F.-F)6#,$*&#F.F/F.*&F&F1&F66#\"#;F/F.F0F.-F)6# *&F&F1FhwF.F.%%tau1GF-%%tau2GFB-F)6#,$*(F-F.F/F0F^xF1F0F0-F)6#*&F^xF1F 5F.F0-F)6#*&F^xF1F;F.F0-F)6#*&F^xF1F@F.F0-F)6#*&F^xF1FFF.F0-F)6#*&F^xF 1FLF.F0-F)6#*&F^xF1FRF.F0-F)6#*&F^xF1FXF.F0-F)6#*&F^xF1FhnF.F0-F)6#*&F ^xF1F^oF.F0-F)6#*&F^xF1FdoF.F0-F)6#*&F^xF1FjoF.F0-F)6#*&F^xF1F`pF.F0-F )6#*&F^xF1FfpF.F0-F)6#,$*&#F.F/F.*&F^xF1F5F/F.F0F0-F)6#,$*&#F.F/F.*&F^ xF1F;F/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1F@F/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1F FF/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1FLF/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1FRF/F .F0F0-F)6#,$*&#F.F/F.*&F^xF1FXF/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1FhnF/F.F0 F0-F)6#,$*&#F.F/F.*&F^xF1F^oF/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1FdoF/F.F0F0 -F)6#,$*&#F.F/F.*&F^xF1FjoF/F.F0F0-F)6#,$*&#F.F/F.*&F^xF1F`pF/F.F0F0-F )6#,$*&#F.F/F.*&F^xF1FfpF/F.F0F0-F)6#,$*&#F.F/F.*&F_xF1F\\vF/F.F0F0-F) 6#*&F_xF1F\\vF.F0-F)6#,$*(FBF.F/F0F_xF1F0F0-F)6#,$*&#F.F/F.*&F_xF1F\\w F/F.F0F0-F)6#*&F_xF1F\\wF.F0-F)6#,$*&#F.F/F.*&F_xF1FhwF/F.F0F0-F)6#*&F _xF1FhwF.F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK " 3 0 0" 26 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ti.txt000066400000000000000000000212001307543307100175140ustar00rootroot00000000000000> restart: > p:=(2*Pi)^(-16/2)/sigma1^13/sigma2^3*exp(-1/(2*sigma1^2)*sum((x[i]-1)^ > 2,i=1..13))*exp(-1/(2*sigma2^2)*sum((x[i]-1)^2,i=14..16)); 2 2 2 p := 1/256 exp(-1/2 ((x[1] - 1) + (x[2] - 1) + (x[3] - 1) 2 2 2 2 + (x[4] - 1) + (x[5] - 1) + (x[6] - 1) + (x[7] - 1) 2 2 2 2 + (x[8] - 1) + (x[9] - 1) + (x[10] - 1) + (x[11] - 1) 2 2 / 2 + (x[12] - 1) + (x[13] - 1) ) / sigma1 ) / 2 2 2 (x[14] - 1) + (x[15] - 1) + (x[16] - 1) / 8 exp(-1/2 ------------------------------------------) / (Pi 2 / sigma2 13 3 sigma1 sigma2 ) > dp:=diff(p,sigma1); 13 %1 dp := ---- exp(-1/2 -------) 256 2 sigma1 2 2 2 (x[14] - 1) + (x[15] - 1) + (x[16] - 1) / 8 exp(-1/2 ------------------------------------------) / (Pi 2 / sigma2 14 3 %1 sigma1 sigma2 ) + 1/256 %1 exp(-1/2 -------) 2 sigma1 2 2 2 (x[14] - 1) + (x[15] - 1) + (x[16] - 1) / 8 exp(-1/2 ------------------------------------------) / (Pi 2 / sigma2 16 3 sigma1 sigma2 ) 2 2 2 2 %1 := (x[1] - 1) + (x[2] - 1) + (x[3] - 1) + (x[4] - 1) 2 2 2 2 + (x[5] - 1) + (x[6] - 1) + (x[7] - 1) + (x[8] - 1) 2 2 2 2 + (x[9] - 1) + (x[10] - 1) + (x[11] - 1) + (x[12] - 1) 2 + (x[13] - 1) > p_i:=subs(sigma1=tau1,sigma2=tau2,p); 2 2 2 p_i := 1/256 exp(-1/2 ((x[1] - 1) + (x[2] - 1) + (x[3] - 1) 2 2 2 2 + (x[4] - 1) + (x[5] - 1) + (x[6] - 1) + (x[7] - 1) 2 2 2 2 + (x[8] - 1) + (x[9] - 1) + (x[10] - 1) + (x[11] - 1) 2 2 / 2 + (x[12] - 1) + (x[13] - 1) ) / tau1 ) / 2 2 2 (x[14] - 1) + (x[15] - 1) + (x[16] - 1) / 8 exp(-1/2 ------------------------------------------) / (Pi 2 / tau2 13 3 tau1 tau2 ) > collect(expand(p/p_i),exp); 13 x[1] x[2] x[3] exp(- ---------) exp(-------) exp(-------) exp(-------) 2 2 2 2 2 sigma1 sigma1 sigma1 sigma1 x[4] x[5] x[6] x[7] exp(-------) exp(-------) exp(-------) exp(-------) 2 2 2 2 sigma1 sigma1 sigma1 sigma1 x[8] x[9] x[10] x[11] exp(-------) exp(-------) exp(-------) exp(-------) 2 2 2 2 sigma1 sigma1 sigma1 sigma1 2 2 x[12] x[13] x[1] x[2] exp(-------) exp(-------) exp(-1/2 -------) exp(-1/2 -------) 2 2 2 2 sigma1 sigma1 sigma1 sigma1 2 2 2 x[3] x[4] x[5] exp(-1/2 -------) exp(-1/2 -------) exp(-1/2 -------) 2 2 2 sigma1 sigma1 sigma1 2 2 2 x[6] x[7] x[8] exp(-1/2 -------) exp(-1/2 -------) exp(-1/2 -------) 2 2 2 sigma1 sigma1 sigma1 2 2 2 x[9] x[10] x[11] exp(-1/2 -------) exp(-1/2 -------) exp(-1/2 -------) 2 2 2 sigma1 sigma1 sigma1 2 2 2 x[12] x[13] x[14] exp(-1/2 -------) exp(-1/2 -------) exp(-1/2 -------) 2 2 2 sigma1 sigma1 sigma2 2 x[14] 3 x[15] x[15] exp(-------) exp(- ---------) exp(-1/2 -------) exp(-------) 2 2 2 2 sigma2 2 sigma2 sigma2 sigma2 2 / x[16] x[16] 13 3 / | 13 exp(-1/2 -------) exp(-------) tau1 tau2 / |sigma1 2 2 / | sigma2 sigma2 \ 3 13 x[1] x[2] x[3] sigma2 exp(- -------) exp(-----) exp(-----) exp(-----) 2 2 2 2 2 tau1 tau1 tau1 tau1 x[4] x[5] x[6] x[7] x[8] exp(-----) exp(-----) exp(-----) exp(-----) exp(-----) 2 2 2 2 2 tau1 tau1 tau1 tau1 tau1 x[9] x[10] x[11] x[12] x[13] exp(-----) exp(-----) exp(-----) exp(-----) exp(-----) 2 2 2 2 2 tau1 tau1 tau1 tau1 tau1 2 2 2 x[1] x[2] x[3] exp(-1/2 -----) exp(-1/2 -----) exp(-1/2 -----) 2 2 2 tau1 tau1 tau1 2 2 2 x[4] x[5] x[6] exp(-1/2 -----) exp(-1/2 -----) exp(-1/2 -----) 2 2 2 tau1 tau1 tau1 2 2 2 x[7] x[8] x[9] exp(-1/2 -----) exp(-1/2 -----) exp(-1/2 -----) 2 2 2 tau1 tau1 tau1 2 2 2 x[10] x[11] x[12] exp(-1/2 ------) exp(-1/2 ------) exp(-1/2 ------) 2 2 2 tau1 tau1 tau1 2 2 x[13] x[14] x[14] 3 exp(-1/2 ------) exp(-1/2 ------) exp(-----) exp(- -------) 2 2 2 2 tau1 tau2 tau2 2 tau2 2 2 \ x[15] x[15] x[16] x[16] | exp(-1/2 ------) exp(-----) exp(-1/2 ------) exp(-----)| 2 2 2 2 | tau2 tau2 tau2 tau2 / > openturns-1.9/validation/src/truncnorm.mws000066400000000000000000000150361307543307100211300ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 264 "restart:\nDigits:=2 0;\nassume(sigma>0);\na:=mu+alpha*sigma;\nb:=mu+beta*sigma;\nf:=1/sqrt (2*Pi)/sigma*exp(-(x-mu)^2/2/sigma^2):\n#f:=diff(Phi((x-mu)/sigma),x); #/(Phi((b-mu)/sigma)-Phi((a-mu)/sigma));\nIab:=simplify(int(f,x=a..b)) ;\ng:=f/Iab;\nphi:=int(exp(I*u*x)*g,x=a..b);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'DigitsG\"#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"a G,&%#muG\"\"\"*&%&alphaGF'%'sigma|irGF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG,&%#muG\"\"\"*&%%betaGF'%'sigma|irGF'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$IabG,&*&#\"\"\"\"\"#F(-%$erfG6#,$*(F)!\" \"F)#F(F)%&alphaGF(F(F(F/*&F0F(-F+6#,$*(F)F/F)F0%%betaGF(F(F(F(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG,$*&#\"\"\"\"\"#F(*,F)F'%#PiG#! \"\"F)%'sigma|irGF--%$expG6#,$*(F)F-,&%\"xGF(%#muGF-F)F.!\"#F-F(,&*&#F (F)F(-%$erfG6#,$*(F)F-F)F'%&alphaGF(F(F(F-*&F'F(-F<6#,$*(F)F-F)F'%%bet aGF(F(F(F(F-F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$phiG*(-%$expG6# ,&*(\"\"#!\"\"%'sigma|irGF+%\"uGF+F,*(F.\"\"\"%#muGF0^#F0F0F0F0,&-%$er fG6#,&*(F+F,F+#F0F+%&alphaGF0F,**^#F9F0F+F9F-F0F.F0F0F,-F56#,&*(F+F,F+ F9%%betaGF0F,F;F0F0F0,&-F56#,$*(F+F,F+F9F:F0F0F0-F56#,$*(F+F,F+F9FAF0F 0F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 580 "int(subs(mu=0,sig ma=1,f),x=-infinity..t);\nRuleErf:=erf(alpha/sqrt(2))=2*Phi(alpha)-1,e rf(beta/sqrt(2))=2*Phi(beta)-1:\nRuleExpAlpha:=exp(-alpha^2/2)=ExpAlph a:\nRuleExpBeta:=exp(-beta^2/2)=ExpBeta:\nRuleA:=Phi(beta)=_A+Phi(alph a):\nsolve(RuleA,_A);\nRuleB:=ExpBeta=sqrt(2*Pi)*_B+ExpAlpha:\nsolve(R uleB,_B);\nRuleC:=beta*ExpBeta=sqrt(2*Pi)*_C+alpha*ExpAlpha:\nsolve(Ru leC,_C);\nRuleD:=beta^2*ExpBeta=sqrt(2*Pi)*_D+alpha^2*ExpAlpha:\nsolve (RuleD,_D);\nRuleE:=beta^3*ExpBeta=sqrt(2*Pi)*_E+alpha^3*ExpAlpha:\nso lve(RuleE,_E);\nRule_b:=_B=_b*_A:\nRule_c:=_C=_c*_A:\nRule_d:=_D=_d*_A :\nRule_e:=_E=_e*_A:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&#\"\"\"\"\"# F%*&F$F%-%$erfG6#,$*(F&!\"\"F&F$%\"tGF%F%F%F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&-%$PhiG6#%%betaG\"\"\"-F%6#%&alphaG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"#!\"\",&%(ExpBetaGF&%)ExpAlphaG\"\"\"F* F%#F*F%%#PiG#F&F%F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"#!\"\", &*&%%betaG\"\"\"%(ExpBetaGF*F&*&%&alphaGF*%)ExpAlphaGF*F*F*F%#F*F%%#Pi G#F&F%F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"#!\"\",&*&)%%betaG F%\"\"\"%(ExpBetaGF+F&*&)%&alphaGF%F+%)ExpAlphaGF+F+F+F%#F+F%%#PiG#F&F %F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"#!\"\",&*&)%%betaG\"\"$ \"\"\"%(ExpBetaGF,F&*&)%&alphaGF+F,%)ExpAlphaGF,F,F,F%#F,F%%#PiG#F&F%F &" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 154 "m1:=simplify(int(x*g, x=a..b),symbolic):\nm1:=applyrule([Rule_b,Rule_c,Rule_d],mu+expand(app lyrule([RuleErf,RuleExpAlpha,RuleExpBeta,RuleA,RuleB],m1-mu)));\n" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#m1G,&%#muG\"\"\"*&%'sigma|irGF'%#_b GF'!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 196 "m2:=int((x-m1) ^2*g,x=a..b):\nnormal(applyrule([Rule_b,Rule_c],normal(applyrule(RuleB ,normal(applyrule(RuleC,normal(map(_x->applyrule([RuleErf,RuleA,RuleEx pAlpha,RuleExpBeta],_x),expand(m2)))))))));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&)%'sigma|irG\"\"#\"\"\",(%#_cGF(F(!\"\"*$)%#_bGF'F( F(F(F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 268 "m3:=factor(int(( x-m1)^3*g,x=a..b)):\nmap(factor,collect(normal(applyrule([Rule_b,Rule_ c,Rule_d],normal(applyrule(RuleB,normal(applyrule(RuleC,normal(applyru le(RuleD,normal(map(_x->applyrule([RuleErf,RuleA,RuleExpAlpha,RuleExpB eta],_x),expand(m3))))))))))/sigma^3),_b));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&\"\"#\"\"\")%#_bG\"\"$F&!\"\"*&,&*&F)F&%#_cGF&F&F&F *F&F(F&F*%#_dGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 300 "m4:=fa ctor(int((x-m1)^4*g,x=a..b)):\nmap(factor,collect(normal(applyrule([Ru le_b,Rule_c,Rule_d,Rule_e],normal(applyrule(RuleB,normal(applyrule(Rul eC,normal(applyrule(RuleD,normal(applyrule(RuleE,normal(map(_x->applyr ule([RuleErf,RuleA,RuleExpAlpha,RuleExpBeta],_x),expand(m4)))))))))))) /sigma^4),_b));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,.*&\"\"$\"\"\")%#_ bG\"\"%F&!\"\"*(\"\"#F&,&F&F&*&F%F&%#_cGF&F&F&)F(F,F&F**(F)F&F(F&%#_dG F&F**&F%F&F/F&F*%#_eGF*F%F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "int(x^3*g,x=a..b);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#*(,:**\"\"# \"\"\")%'sigma|irG\"\"$F'F&#F'F&-%$expG6#,$*&F&!\"\"%&alphaGF&F1F'F'*. F*F'F&F+)F)F&F'F,F'%#muGF'F2F'F'*,F*F'F&F+F)F'F,F')F5F&F'F'*()F5F*F'-% $erfG6#,$*(F&F1F&F+F2F'F'F'%#PiGF+F1**F(F'F&F+F,F')F2F&F'F'*,F*F'F4F'F 5F'F:F'F?F+F1**F&F'F(F'F&F+-F-6#,$*&F&F1%%betaGF&F1F'F1*.F*F'F&F+F4F'F DF'F5F'FHF'F1*,F*F'F&F+F)F'FDF'F7F'F1*(F9F'-F;6#,$*(F&F1F&F+FHF'F'F'F? F+F'**F(F'F&F+FDF')FHF&F'F1*,F*F'F4F'F5F'FLF'F?F+F'F'F?#F1F&,&F:F1FLF' F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 122 "Phitruncinv:=solve(i nt(subs(alpha=(1e-7-mu)/sigma,beta=(4.68e-3-mu)/sigma,mu=6.68e-5,sigma =5.5e-6,g),x=-infinity..u)=y,u);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>% ,PhitruncinvG,&$\"5****************zm!#C\"\"\"*&$\"5#oF-_Ifu\"yx!#DF)- %'RootOfG6#,(*&\"5******************\\F)-%$erfG6#%#_ZGF)!\"\"\"5****** ************\\F8*&\"6++++++++++\"F)%\"yGF)F)F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "Phi:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity ..u);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$PhiG,&#\"\"\"\"\"#F'*&F&F' -%$erfG6#,$*(F(!\"\"F(F&%\"uGF'F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "U:=simplify(subs(u=Phitruncinv,Phi));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"UG,&#\"\"\"\"\"#F'*&F&F'-%$erfG6#,&*(F(!\"\"%# muGF'F(F&F'*&-%'RootOfG6#,*-F+6#%#_ZGF'F'F'*&%\"yGF'-F+6#,$*(F(F/F(F&% &alphaGF'F'F'F'*&F:F'-F+6#,$*(F(F/F(F&%%betaGF'F'F'F/F'%'sigma|irGF'F' F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 85 "evalf(subs(alpha=(1 e-7-mu)/sigma,beta=(4.68e-3-mu)/sigma,mu=6.68e-5,sigma=5.5e-6,U));" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#,&$\"5+++++++++]!#?\"\"\"*&F$F'-%$erfG 6#,&$\"5IYPhK)HtMs%!#CF'*&$\"#b!\"(F'-%'RootOfG6#,*-F*6#%#_ZGF'F'F'*&% \"yGF'-F*6#,$*&$\"5jjjjjjjjjg!#>F'\"\"##F'FD!\"\"F'F'*&F%!# " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "7 0 0" 118 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/truncnorm.txt000066400000000000000000000204751307543307100211440ustar00rootroot00000000000000> restart: > Digits:=20; > assume(sigma>0); > a:=mu+alpha*sigma; > b:=mu+beta*sigma; > f:=1/sqrt(2*Pi)/sigma*exp(-(x-mu)^2/2/sigma^2): > #f:=diff(Phi((x-mu)/sigma),x);#/(Phi((b-mu)/sigma)-Phi((a-mu)/sigma)); > Iab:=simplify(int(f,x=a..b)); > g:=f/Iab; > phi:=int(exp(I*u*x)*g,x=a..b); Digits := 20 a := mu + alpha sigma~ b := mu + beta sigma~ 1/2 1/2 2 alpha 2 beta Iab := -1/2 erf(----------) + 1/2 erf(---------) 2 2 2 1/2 (x - mu) 2 exp(- ---------) 2 2 sigma~ g := 1/2 -------------------------------------------------------- / 1/2 1/2 \ 1/2 | 2 alpha 2 beta | Pi sigma~ |-1/2 erf(----------) + 1/2 erf(---------)| \ 2 2 / 2 2 / sigma~ u | phi := exp(- ---------- + u mu I) | 2 \ 1/2 2 alpha 1/2 -erf(- ---------- + 1/2 I 2 sigma~ u) 2 1/2 \ / 2 beta 1/2 | / | + erf(- --------- + 1/2 I 2 sigma~ u)| / | 2 / / \ 1/2 1/2 \ 2 alpha 2 beta | erf(----------) - erf(---------)| 2 2 / > int(subs(mu=0,sigma=1,f),x=-infinity..t); > RuleErf:=erf(alpha/sqrt(2))=2*Phi(alpha)-1,erf(beta/sqrt(2))=2*Phi(bet > a)-1: > RuleExpAlpha:=exp(-alpha^2/2)=ExpAlpha: > RuleExpBeta:=exp(-beta^2/2)=ExpBeta: > RuleA:=Phi(beta)=_A+Phi(alpha): > solve(RuleA,_A); > RuleB:=ExpBeta=sqrt(2*Pi)*_B+ExpAlpha: > solve(RuleB,_B); > RuleC:=beta*ExpBeta=sqrt(2*Pi)*_C+alpha*ExpAlpha: > solve(RuleC,_C); > RuleD:=beta^2*ExpBeta=sqrt(2*Pi)*_D+alpha^2*ExpAlpha: > solve(RuleD,_D); > RuleE:=beta^3*ExpBeta=sqrt(2*Pi)*_E+alpha^3*ExpAlpha: > solve(RuleE,_E); > Rule_b:=_B=_b*_A: > Rule_c:=_C=_c*_A: > Rule_d:=_D=_d*_A: > Rule_e:=_E=_e*_A: 1/2 2 t 1/2 + 1/2 erf(------) 2 Phi(beta) - Phi(alpha) 1/2 (-ExpBeta + ExpAlpha) 2 - -------------------------- 1/2 2 Pi 1/2 (-beta ExpBeta + alpha ExpAlpha) 2 - ------------------------------------- 1/2 2 Pi 2 2 1/2 (-beta ExpBeta + alpha ExpAlpha) 2 - --------------------------------------- 1/2 2 Pi 3 3 1/2 (-beta ExpBeta + alpha ExpAlpha) 2 - --------------------------------------- 1/2 2 Pi > m1:=simplify(int(x*g,x=a..b),symbolic): > m1:=applyrule([Rule_b,Rule_c,Rule_d],mu+expand(applyrule([RuleErf,Rule > ExpAlpha,RuleExpBeta,RuleA,RuleB],m1-mu))); > m1 := mu - sigma~ _b > m2:=int((x-m1)^2*g,x=a..b): > normal(applyrule([Rule_b,Rule_c],normal(applyrule(RuleB,normal(applyru > le(RuleC,normal(map(_x->applyrule([RuleErf,RuleA,RuleExpAlpha,RuleExpB > eta],_x),expand(m2))))))))); 2 2 -sigma~ (_c - 1 + _b ) > m3:=factor(int((x-m1)^3*g,x=a..b)): > map(factor,collect(normal(applyrule([Rule_b,Rule_c,Rule_d],normal(appl > yrule(RuleB,normal(applyrule(RuleC,normal(applyrule(RuleD,normal(map(_ > x->applyrule([RuleErf,RuleA,RuleExpAlpha,RuleExpBeta],_x),expand(m3))) > )))))))/sigma^3),_b)); 3 -2 _b - (3 _c - 1) _b - _d > m4:=factor(int((x-m1)^4*g,x=a..b)): > map(factor,collect(normal(applyrule([Rule_b,Rule_c,Rule_d,Rule_e],norm > al(applyrule(RuleB,normal(applyrule(RuleC,normal(applyrule(RuleD,norma > l(applyrule(RuleE,normal(map(_x->applyrule([RuleErf,RuleA,RuleExpAlpha > ,RuleExpBeta],_x),expand(m4))))))))))))/sigma^4),_b)); 4 2 -3 _b - 2 (1 + 3 _c) _b - 4 _b _d - 3 _c - _e + 3 > int(x^3*g,x=a..b); / 2 | 3 1/2 alpha |2 sigma~ 2 exp(- ------) \ 2 2 1/2 2 alpha + 3 2 sigma~ exp(- ------) mu alpha 2 2 1/2 alpha 2 + 3 2 sigma~ exp(- ------) mu 2 1/2 3 2 alpha 1/2 - mu erf(----------) Pi 2 2 3 1/2 alpha 2 + sigma~ 2 exp(- ------) alpha 2 1/2 2 2 alpha 1/2 - 3 sigma~ mu erf(----------) Pi 2 2 3 1/2 beta - 2 sigma~ 2 exp(- -----) 2 2 1/2 2 beta - 3 2 sigma~ exp(- -----) mu beta 2 2 1/2 1/2 beta 2 3 2 beta 1/2 - 3 2 sigma~ exp(- -----) mu + mu erf(---------) Pi 2 2 2 3 1/2 beta 2 - sigma~ 2 exp(- -----) beta 2 1/2 \ / 2 2 beta 1/2| / | 1/2 + 3 sigma~ mu erf(---------) Pi | / |Pi 2 / / \ / 1/2 1/2 \\ | 2 alpha 2 beta || |-erf(----------) + erf(---------)|| \ 2 2 // > Phitruncinv:=solve(int(subs(alpha=(1e-7-mu)/sigma,beta=(4.68e-3-mu)/si > gma,mu=6.68e-5,sigma=5.5e-6,g),x=-infinity..u)=y,u); Phitruncinv := 0.000066799999999999999999 + -5 0.77781745930520227682 10 RootOf( -49999999999999999999 erf(_Z) - 49999999999999999999 + 100000000000000000000 y) > Phi:=int(1/sqrt(2*Pi)*exp(-x^2/2),x=-infinity..u); 1/2 2 u Phi := 1/2 + 1/2 erf(------) 2 > U:=simplify(subs(u=Phitruncinv,Phi)); 1/2 mu 2 U := 1/2 + 1/2 erf(------- + 2 1/2 1/2 2 alpha 2 beta RootOf(erf(_Z) + 1 + y erf(----------) - y erf(---------)) 2 2 sigma~) > evalf(subs(alpha=(1e-7-mu)/sigma,beta=(4.68e-3-mu)/sigma,mu=6.68e-5,si > gma=5.5e-6,U)); 0.50000000000000000000 + 0.50000000000000000000 erf( -5 0.000047234732983261374630 + 0.55 10 RootOf(erf(_Z) + 1 1/2 + y erf(-6.0636363636363636363 2 ) 1/2 - y erf(419.38181818181818181 2 ))) > openturns-1.9/validation/src/validAdaptiveStieltjesAlgorithm.mw000066400000000000000000000637021307543307100252340ustar00rootroot00000000000000 restart: assume(alpha_n>0,beta_n>0,b_n>0,b_nM1>0); with(Statistics): pdf:=PDF(RandomVariable(Normal(0,1)),x): P:=x: int(x*P*P*pdf,x=-infinity..infinity); int(x*P*x*P*pdf,x=-infinity..infinity); IiIh IiIk res:=collect(algsubs(P_n*P_nM1*t=P_n^2,expand(((t-alpha_n)*P_n-beta_n*P_nM1)^2)),t); LCwqJkkkUF9uRzYiIiIjSSJ0R0YlRiYiIiIqKEYkRiZGJ0YoSSlhbHBoYV9ufGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDA1NjA1MTMxMDE0MDhHRiVGKCEiIyomLCYqJEYqRiZGKEkoYmV0YV9ufGlyRzYjL0YtSTJfbjE0MDU2MDUxMzA1MTc3NkdGJUYwRihGJEYmRigqKkYkRihJJlBfbk0xR0YlRihGNEYoRipGKEYmKiZGOUYmRjRGJkYo res1:=algsubs(P_n*P_nM1=sqrt(b_n*b_nM1)*pi_n*pi_nM1,subs(P_n^2=b_n*pi_n^2,P_nM1^2=b_nM1*pi_nM1^2,res)): K0:=coeff(res1,t,0): res1:=res1-K0+algsubs(pi_n*pi_nM1=0,subs(pi_n^2=1,pi_nM1^2=1,K0)); K1:=coeff(res1,t,1): res1:=collect(res1-K1*t+algsubs(pi_n^2*t=alpha_n,expand(K1*t)),t); LCwqKEklYl9ufGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDA1NjA1MTMwNTExMDRHNiIiIiJJJXBpX25HRioiIiNJInRHRipGLUYrKipGJEYrRixGLUYuRitJKWFscGhhX258aXJHNiMvRidJMl9uMTQwNTYwNTEzMTAxNDA4R0YqRishIiMqJkknYl9uTTF8aXJHNiMvRidJMl9uMTQwNTYwNTEzMDUxNDI0R0YqRitJKGJldGFfbnxpckc2Iy9GJ0kyX24xNDA1NjA1MTMwNTE3NzZHRipGLUYrKiZGJEYrRjBGLUYrKiZGJEYrRjpGK0Y0 LCoqKEklYl9ufGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDA1NjA1MTMwNTExMDRHNiIiIiJJJXBpX25HRioiIiNJInRHRipGLUYrKiZJJ2Jfbk0xfGlyRzYjL0YnSTJfbjE0MDU2MDUxMzA1MTQyNEdGKkYrSShiZXRhX258aXJHNiMvRidJMl9uMTQwNTYwNTEzMDUxNzc2R0YqRi1GKyomRiRGK0kpYWxwaGFfbnxpckc2Iy9GJ0kyX24xNDA1NjA1MTMxMDE0MDhHRipGLSEiIiomRiRGK0Y0RishIiM= res2:=simplify(subs(b_nM1=b_n/beta_n,expand(simplify(res1/b_n)))); LCgqJkklcGlfbkc2IiIiI0kidEdGJUYmIiIiKiRJKWFscGhhX258aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDU2MDUxMzEwMTQwOEdGJUYmISIiSShiZXRhX258aXJHNiMvRi1JMl9uMTQwNTYwNTEzMDUxNzc2R0YlRjA= openturns-1.9/validation/src/validAdaptiveStieltjesAlgorithm2.mw000066400000000000000000002241301307543307100253100ustar00rootroot00000000000000 restart: Digits:=25: with(Statistics): pdfs:=[PDF(RandomVariable(Laplace(0,1)),x),PDF(RandomVariable(Logistic(0,1)),x),PDF(RandomVariable(Normal(0,1)),x),PDF(RandomVariable(Normal(1,1)),x),PDF(RandomVariable(Rayleigh(1)),x),PDF(RandomVariable(StudentT(22)),x),PDF(RandomVariable(Triangular(-1,1,0.3)),x),PDF(RandomVariable(Uniform(-1,1)),x),PDF(RandomVariable(Uniform(-1,3)),x),PDF(RandomVariable(Weibull(1,3)),x)]: a_list:=[-infinity,-infinity,-infinity,-infinity, 0,-infinity,-1,-1,-1, 0]: b_list:=[ infinity, infinity, infinity, infinity,infinity, infinity, 1, 1, 3,infinity]: for i from 1 to 11 do: pdf:=pdfs[i]; a:=a_list[i]: b:=b_list[i]: print(pdf); p0:=0: p1:=1: q0:=0: q1:=1: Kprec:=1: Knext:=0: for n from 1 to 4 do: if n>1 then K:=Knext; else K:=evalf(Int(p1*p1*pdf,x=a..b)): end if: #print("K",K); alpha:=evalf(Int(x*p1*p1*pdf,x=a..b))/K; beta:=K/Kprec; #print(evalf(["monic", alpha, beta])); p2:=expand((x-alpha)*p1-beta*p0); Kprec:=K; p0:=p1; p1:=p2; Knext:=evalf(Int(p2*p2*pdf,x=a..b)); betaNext:=Knext/K; a0:=1/sqrt(betaNext): a1:=-alpha/sqrt(betaNext): a2:=-sqrt(beta/betaNext): q2:=expand((a0*x+a1)*q1+a2*q0): q0:=q1; q1:=q2: #print(evalf(["normalize", a0, a1, a2])); print(sort(evalf[7](p2/sqrt(Knext)),x, ascending)); end do: print(evalf[7](fsolve(p2,x))); end do: LCQtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkLUkkYWJzR0YmNiNJInhHRighIiIjIiIiIiIj LCRJInhHNiIkIihtNTIoISIo LCYkIShPQFolISIoIiIiKiRJInhHNiIiIiMkIihvZ0IjRiU= LCZJInhHNiIkISgtTngmISIoKiRGIyIiJCQiKF83IlshIik= LCgkIihYdEgkISIoIiIiKiRJInhHNiIiIiMkISgtWWMjRiUqJEYoIiIlJCIoVkZqKCEiKg== NiYkIShxKXpjISInJCEoKD1kNkYlJCIoKD1kNkYlJCIocSl6Y0Yl KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0kieEdGKCIiIiwmRitGK0YjRishIiM= LCYkIihOKnAjKSEjTiIiIkkieEc2IiQiKCFIOGIhIig= LCgkIShxLGYmISIoIiIiSSJ4RzYiJCEoNXpSIiEjTSokRiciIiMkIigzIypwIkYl LCokIihyIm83ISNNIiIiSSJ4RzYiJCEoYEUiXCEiKCokRiciIiMkIShMalspISNOKiRGJyIiJCQiKClSYk4hIik= LCwkIihcKD1VISIoIiIiSSJ4RzYiJCEocDVaIyEjTSokRiciIiMkISgnM2U/RiUqJEYnIiIkJCIoXW5OIiEjTiokRiciIiUkIigzVWgmISIq NiYkISgjKj0oZSEiJyQhKCRHdzlGJSQiKCRHdzlGJSQiKCMqPShlRiU= LCQqKCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkLUkkZXhwRzYkRihJKF9zeXNsaWJHNiI2IywkKiRJInhHRi9GJEYpRiZGJQ== LCYkIihTOillISNNIiIiSSJ4RzYiJCIoKysrIiEiJw== LCgkIShtNTIoISIoIiIiSSJ4RzYiJCEoQis7JSEjTSokRiciIiMkIihtNTIoRiU= LCokISgyM2IqISNNIiIiSSJ4RzYiJCEoWFpBIiEiJyokRiciIiMkIihnbk0jRiUqJEYnIiIkJCIoI1sjMyUhIig= LCwkIihFUDcnISIoIiIiSSJ4RzYiJCIobiZwZSEjTSokRiciIiMkIShYWkEiISInKiRGJyIiJCQhKFtTPCJGKyokRiciIiUkIihVNy8jRiU= NiYkISg5V0wjISInJCEoUSc+dSEiKCQiKFEnPnVGKCQiKDlXTCNGJQ== LCQqKCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkLUkkZXhwRzYkRihJKF9zeXNsaWJHNiI2IywkKiQsJkkieEdGL0YmRipGJkYkRilGJkYl LCYkISgrKysiISInIiIiSSJ4RzYiJCIoKysrIkYl LCZJInhHNiIkISg4VVQiISInKiRGIyIiIyQiKG01MighIig= LCgkIihrXDspISIoIiIiKiRJInhHNiIiIiMkIShYWkEiISInKiRGKCIiJCQiKCNbIzMlRiU= LCokISglWyMzJSEiKCIiIkkieEc2IiQiKCUqSGoiISInKiRGJyIiJCQhKG9cOylGJSokRiciIiUkIihVNy8jRiU= NiYkISg5V0wiISInJCIoaS5lIyEiKCQiKGs+dSJGJSQiKDlXTCRGJQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMkkieEc2IiIiIUYpKiZGJyIiIi1JJGV4cEc2JEYkSShfc3lzbGliR0YoNiMsJCokRiciIiMjISIiRjNGKw== LCYkIShlSSI+ISInIiIiSSJ4RzYiJCIoK2tfIkYl LCgkIihdYyVHISInIiIiSSJ4RzYiJCEoKFExXUYlKiRGJyIiIyQiKGlXciJGJQ== LCokIShSUXkkISInIiIiSSJ4RzYiJCIoKCplMyIhIiYqJEYnIiIjJCEoT1IkekYlKiRGJyIiJCQiKFdwZyJGJQ== LCwkIihDU3MlISInIiIiSSJ4RzYiJCEoY1UlPiEiJiokRiciIiMkIihfb0QjRisqJEYnIiIkJCEoM0RmKkYlKiRGJyIiJSQiKEo8SyJGJQ== NiYkIigvNydSISIoJCIoT248IiEiJyQiKG41PyNGKCQiKDZPWyRGKA== LCQqJiIjQSMiIiIiIiMsJkYmRiYqJEkieEc2IkYnI0YmRiQjISNCRicjIiZ6IikpIih3Jls1 LCRJInhHNiIkIihEWWAqISIo LCYkIShPbGEnISIoIiIiKiRJInhHNiIiIiMkIignUl5mRiU= LCZJInhHNiIkISgmSD41ISInKiRGIyIiJCQiKCUqKXpGISIo LCgkIigiKilIXiEiKCIiIiokSSJ4RzYiIiIjJCEoblZSKUYlKiRGKCIiJSQiKCpcPDVGJQ== NiYkIShdVHYjISInJCEoa0U6KSEiKCQiKGtFOilGKCQiKF1UdiNGJQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYpMkkieEc2IiEiIiIiITFGJyQiIiRGKSwmJCI6M0JwMkJwMkJwMkJwKCEjRCIiIkYnRi8xRidGMiwmJCI6ciZHOWRHOWRHOWRHOSEjQ0YyRickITpyJkc5ZEc5ZEc5ZEc5RjdGKg== LCYkIShhTlQjISIoIiIiSSJ4RzYiJCIoYU5UIyEiJw== LCgkIShRTHgpISIoIiIiSSJ4RzYiJCEoJVIpRyVGJSokRiciIiMkIig/YTEmISIn LCokIihXZGYjISIoIiIiSSJ4RzYiJCEoKnlPVCEiJyokRiciIiMkIShJdiwiRisqJEYnIiIkJCIoaWwuIiEiJg== LCwkIihLOHkpISIoIiIiSSJ4RzYiJCIoYWhEKkYlKiRGJyIiIyQhKEQ+TiIhIiYqJEYnIiIkJCEoJlsnKj4hIicqJEYnIiIlJCIoJjQ9QEYv NiYkIShrJEh1ISIoJCEoQ3hOI0YlJCIoV081JEYlJCIoR2dpKEYl LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkieEc2IiEiIiIiITJGJyIiIiNGLCIiI0Yq LCRJInhHNiIkIiheP3QiISIn LCYkIShNIT02ISInIiIiKiRJInhHNiIiIiMkIigtVE4kRiU= LCZJInhHNiIkIShGJ29SISInKiRGIyIiJCQiKHlWaCdGJw== LCgkIigrXTciISInIiIiKiRJInhHNiIiIiMkISgrXTciISImKiRGKCIiJSQiKCtESiJGLQ== NiYkIShqOGgpISIoJCEoNSkqUiRGJSQiKDUpKlIkRiUkIihqOGgpRiU= LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkieEc2IiEiIiIiITJGJyIiJCMiIiIiIiVGKg== LCYkIShlLW0pISIoIiIiSSJ4RzYiJCIoZS1tKUYl LCgkISgnMyZ6IyEiKCIiIkkieEc2IiQhKF9xbiIhIicqJEYnIiIjJCIoZl9RKUYl LCokIig7djoiISInIiIiSSJ4RzYiJCIoJnlnXCEiKCokRiciIiMkISgjUiFbI0YlKiRGJyIiJCQiKHZ6RSlGKw== LCwkISh0PW4pISIoIiIiSSJ4RzYiJCIoXFBNIyEiJyokRiciIiMkIih2JDRARisqJEYnIiIkJCEoXDdHJEYrKiRGJyIiJSQiKEFKPylGJQ== NiYkIShFRkEoISIoJCIoei4/JEYlJCIoaSp6OyEiJyQiKHNBcyNGKg== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMkkieEc2IiIiIUYpLCQqJkYnIiIjLUkkZXhwRzYkRiRJKF9zeXNsaWJHRig2IywkKiRGJyIiJCEiIiIiIkY0 LCYkIShPOXYjISInIiIiSSJ4RzYiJCIoJz0iMyRGJQ== LCgkIignNCNSJiEiJyIiIkkieEc2IiQhKHAnUjghIiYqJEYnIiIjJCIoaSh5c0Yl LCokIShXeiIqKSEiJyIiIkkieEc2IiQiKF9GbCQhIiYqJEYnIiIjJCEoV11HJUYrKiRGJyIiJCQiKG0jKVwiRis= LCwkIihTRUwiISImIiIiSSJ4RzYiJCEoKTNCekYlKiRGJyIiIyQiKCZHJlwiISIlKiRGJyIiJCQhKEstNiJGLyokRiciIiUkIihXLyJHRiU= NiYkIig/JWVKISIoJCIoMi1QKEYlJCIoSyoqPiIhIickIigoZShwIkYq Error, invalid subscript selector openturns-1.9/validation/src/validBesselI0.py000066400000000000000000000011231307543307100213410ustar00rootroot00000000000000from openturns import * data_ref=NumericalSample.ImportFromCSVFile("besselI1_maple.csv") print data_ref, data_ref.getSize() errMax = 0 err1 = 100 err2 = 100 for j in range(data_ref.getSize()): x = data_ref[j, 0] ref = data_ref[j, 1] val1 = SpecFunc.BesselI1(x) val2 = SpecFunc.BesselI2(x) err1 = abs(ref - val1) err2 = abs(ref - val2) if ref != 0.0: err1 /= abs(ref) err2 /= abs(ref) if err1 < err2: print "111111111 x=", x, "error 1=", err1, "error 2=", err2 else: print "222222222 x=", x, "error 1=", err1, "error 2=", err2 openturns-1.9/validation/src/validBoxCox.mw000066400000000000000000001174531307543307100211460ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYyLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1ElYXV0b0YnLUZQNiZGUkZVRlgvRmVuUShuZXdsaW5lRictRjY2LVEifkYnRjlGO0Y+RkBGQkZERkZGSC9GS0ZXL0ZORlctRiw2JVEiZkYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1JKG1mZW5jZWRHRiQ2JC1GIzYlLUklbXN1cEdGJDYlLUYsNiVRInhGJ0YvRjItRiM2Iy1GLDYlUSdsYW1iZGFGJy9GMEY9RjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GYXEtSSNtbkdGJDYkUSIxRidGOUY5RmRwLyUubGluZXRoaWNrbmVzc0dGZnEvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGW3IvJSliZXZlbGxlZEdGPS1GNjYtUSI7RidGOUY7L0Y/RjFGQEZCRkRGRkZIRl5vRk1GZ25GW28tRiw2JVEiZ0YnRi9GMkZjby1GLDYlUSlzaW1wbGlmeUYnRi9GMi1Gam82JC1GIzYkLUYsNiVRJnNvbHZlRidGL0YyLUZqbzYkLUYjNidGYG8tRjY2LVEiPUYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEieUYnRi9GMi1GNjYtUSIsRidGOUY7RmNyRkBGQkZERkZGSEZeby9GTlEsMC4zMzMzMzMzZW1GJ0ZhcEY5RjlGYHI= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiYsJilJInhHNiJJJ2xhbWJkYUdGJiIiIiEiIkYoRihGJ0Yp KSwmIiIiRiQqJkkieUc2IkYkSSdsYW1iZGFHRidGJEYkKiRGKCEiIg== QygtSSdmYWN0b3JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2Iy1JKGNvbnZlcnRHRiY2JC1JJ3Nlcmllc0dGJjYlSSJmR0YoL0knbGFtYmRhR0YoIiIhIiIjSShwb2x5bm9tR0YmIiIiLUYkNiMtRis2JC1GLjYlLUklZGlmZkdGJjYkRjBJInhHRihGMUY0RjVGNi1GJDYjLUYrNiQtRi42JS1GPjYkRjAtSSIkR0YmNiRGQEY0RjFGNEY1RjY= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0kieEdGJw== KiYsJiIiIkYkKiYtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJ4R0YrRiRJJ2xhbWJkYUdGK0YkRiRGJEYtISIi LCQqJiwoIiIiRiVJJ2xhbWJkYUc2IiEiIiomLUkjbG5HNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRic2I0kieEdGJ0YlRiZGJUYlRiVGMCEiI0Yo QywtSShjb252ZXJ0RyUqcHJvdGVjdGVkRzYkLUkpc2ltcGxpZnlHNiRGJUkoX3N5c2xpYkc2IjYkLUklZGlmZkdGJTYkSSJnR0YrSSJ5R0YrSSlzeW1ib2xpY0dGK0kkZXhwR0YpIiIiLUYoNiQtRi42JEYwLUkiJEdGJTYkRjEiIiNGMkY0LUknZmFjdG9yR0YpNiMtRiQ2JC1JJ3Nlcmllc0dGJTYlRjAvSSdsYW1iZGFHRisiIiEiIiVJKHBvbHlub21HRiVGNC1GPjYjLUYkNiQtRkM2JUYtRkVGSEZJRjQtRj42Iy1GJDYkLUZDNiVGN0ZFRjxGSUY0 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCooLCYhIiIiIiJJJ2xhbWJkYUdGJ0YtRi1GLkYsLUkjbG5HRiQ2IywmRi1GLSomSSJ5R0YnRi1GLkYtRi1GLUYs LCQqJiksJiIiIkYmKiZJInlHNiJGJkknbGFtYmRhR0YpRiZGJiwkKiYsJiEiIkYmRioiIiNGJkYqRi5GLkYmLCZGLkYmRipGJkYmRi4= LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJ5R0YpIiIiLCoiI0NGLComRisiIiNJJ2xhbWJkYUdGKUYsISM3KiZGMUYwRisiIiQiIikqJkYxRjBGKyIiJUY0RiwjRixGLg== LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJ5R0YpIiIiLC4iI0NGLComRisiIiNJJ2xhbWJkYUdGKUYsISM3KiZGK0YsRjFGLCEjQyomRjFGMEYrIiIkIiM/KiZGMUYwRisiIiVGNiomRjFGMEYrRjBGLkYsI0YsRi4= LCQqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSJ5R0YpIiIiLCohIiNGLComRitGLEknbGFtYmRhR0YpRiwiIiUqJkYrIiIjRjBGLEYsRjBGM0YsIyEiIkYz JSFH openturns-1.9/validation/src/validConditionalDistribution.mw000066400000000000000000001556031307543307100246060ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzZpcy1JI21pR0YkNiVRKHJlc3RhcnRGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtb0dGJDYtUSI6RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRkwtSSdtc3BhY2VHRiQ2Ji8lJ2hlaWdodEdRJjAuMGV4RicvJSZ3aWR0aEdRJjAuMGVtRicvJSZkZXB0aEdGVC8lKmxpbmVicmVha0dRKG5ld2xpbmVGJy1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLRlcvRk5GVy1GLDYlUSV3aXRoRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiMtRiw2JVErU3RhdGlzdGljc0YnRi9GMkY5RjVGT0Znbi1GLDYlUSVwZGZYRidGL0YyLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSEZKRk0tRiw2JVEkUERGRidGL0YyLUZgbzYkLUYjNiYtRiw2JVEvUmFuZG9tVmFyaWFibGVGJ0YvRjItRmBvNiQtRiM2JC1GLDYlUSdOb3JtYWxGJ0YvRjItRmBvNiQtRiM2JS1GLDYlUSNtdUYnL0YwRj1GOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRJnNpZ21hRidGZXFGOUY5RjlGZnEtRiw2JVEieEYnRi9GMkY5LUY2Ni1RIjtGJ0Y5RjtGaXFGQEZCRkRGRkZIRmpuRk1GT0Znbi1GLDYlUSZwZGZNdUYnRi9GMkZqb0ZdcC1GYG82JC1GIzYmRmRwLUZgbzYkLUYjNiQtRiw2JVEoVW5pZm9ybUYnRi9GMi1GYG82JC1GIzYlLUkjbW5HRiQ2JFEiMEYnRjlGZnEtRmhzNiRRIjFGJ0Y5RjlGOUZmcUZicUY5RmJyRk9GZ24tRiw2JVEpcGRmU2lnbWFGJ0YvRjJGam9GXXAtRmBvNiQtRiM2JkZkcC1GYG82JC1GIzYkRmBzLUZgbzYkLUYjNiVGW3RGZnEtRmhzNiRRIjJGJ0Y5RjlGOUZmcUZcckY5RmJyRk9GTy1GNjYtUSIjRidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUYsNiVRLX5GaXJzdH5jYXNlfkYnRi9GMkZPLUZQNiZGUkZVRlgvRmVuUSVhdXRvRidGZ24tRiw2JVEkcGRmRidGL0YyRmpvRmdvLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbb0ZlckZddkZedEZickZPRmduLUYsNiVRLHBkZk1hcmdpbmFsRidGL0YyRmpvLUYsNiVRJGludEYnRi9GMi1GYG82JC1GIzYvRmp1RmZxRmJxLUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRmdzLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnRltvRlt0RmZxRlxyRmp2Rlt0Rl13Rl11RjlGYnJGT0Znbi1GLDYlUSxjZGZNYXJnaW5hbEYnRi9GMkZqb0Zjdi1GYG82JC1GIzYrRmB2RmZxRmduRl9yRmp2LUY2Ni1RKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZgdy9GTkZhdy1GLDYlUSlpbmZpbml0eUYnRi9GMkZddy1GLDYlUSJ0RidGL0YyRjlGYnJGT0Znbi1GLDYlUSZldmFsZkYnRi9GMi1GYG82JC1GIzYkLUYsNiVRJXN1YnNGJ0YvRjItRmBvNiQtRiM2J0ZfckZqdkZnc0ZmcUZgdkY5RjlGYnJGT0ZnbkZjeC1GYG82JC1GIzYkRmp4LUZgbzYkLUYjNidGYHhGanZGZ3NGZnFGYndGOUY5RmJyRk9GZ24tRiw2JVElbWVhbkYnRi9GMkZqb0Zjdi1GYG82JC1GIzYsRl9yRl12RmB2RmZxRl9yRmp2Rml3Rl14Rl13Rl14RjlGYnJGTy1GLDYlUSR2YXJGJ0YvRjJGam9GY3YtRmBvNiQtRiM2LC1JJW1zdXBHRiQ2JS1GYG82JC1GIzYlRl9yLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGYHdGXHhGaXlGOS1GIzYjRl11LyUxc3VwZXJzY3JpcHRzaGlmdEdGanNGXXZGYHZGZnFGX3JGanZGaXdGXXhGXXdGXXhGOUZickZnbkZPRmduRmN4LUZgbzYkLUYjNiMtRmBvNiYtRiM2JUZpeUZmcUZgekY5LyUlb3BlbkdRIltGJy8lJmNsb3NlR1EiXUYnRjlGYnJGT0ZgdS1GLDYlUS5+U2Vjb25kfmNhc2V+RidGL0YyRk9GZ25GZ25GanVGam9GangtRmBvNiQtRiM2KkZicUZqdi1JJm1mcmFjR0YkNihGW3RGYVtsLyUubGluZXRoaWNrbmVzc0dGXXQvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYV1sLyUpYmV2ZWxsZWRHRj1GZnFGZ25GZ29GXXZGXnRGOUZickZPRmduRmB2RmpvRmN2LUZgbzYkLUYjNipGanVGZnFGZ25GXHJGanZGW3RGXXdGXXVGOUZickZPRmduRmJ3RmpvRmN2RmV3RmJyRk9GZ25GY3hGZnhGYnJGT0ZnbkZjeEZheUZickZPRmduRml5RmpvRmN2Rlx6RmJyRk9GYHpGam9GY3ZGY3pGYnJGZ25GT0ZnbkZjeEZlW2xGYnJGZ24= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQqKiIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkSSZzaWdtYUc2IkYqLUkkZXhwRzYkRihJKF9zeXNsaWJHRiw2IywkKiYsJkkieEdGLEYmSSNtdUdGLEYqRiRGKyEiI0YpRiZGJQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkjbXVHNiIiIiFGKTJGJyIiIkYrRik= LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkmc2lnbWFHNiIiIiIiIiEyRiciIiNGKUYq LCQqLiIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkSSZzaWdtYUc2IkYqLUkkZXhwRzYkRihJKF9zeXNsaWJHRiw2IywkKiYsJkkieEdGLEYmSSNtdUdGLEYqRiRGKyEiI0YpRiYtSSpwaWVjZXdpc2VHRig2JzJGNiIiIUY8MkY2RiZGJkY8RiYtRjk2JzJGK0YmRjwyRitGJEYmRjxGJkYl LCQqJiw2KiYiIiMjIiIiRiYtSSNFaUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYkRigsKEYnRihJInhHRi4hIiIqJEYxRiZGJ0YoRigqJi1JJGVyZkdGKzYjLCQqJkYxRihGJkYnRidGKEkjUGlHRixGJ0YmKiYtRjY2IywmKiRGJkYnI0YyRiZGOUYnRihGOkYnISIjKihGJkYnLUYqNiRGKCwkRjNGJ0YoRjFGKEYoKihGJkYnRilGKEYxRihGMiomRiZGJy1GKjYkRigsKCNGKCIiKUYoRjEjRjIiIiVGM0ZLRihGMiomLUY2NiMsJEY5I0YoRk5GKEY6RichIiUqJi1GNjYjLCZGP0ZNRjlGU0YoRjpGJ0ZOKihGJkYnLUYqNiRGKCwkRjNGS0YoRjFGKEYyKihGJkYnRkhGKEYxRihGKEYoRjpGQEZN LCQqJkkjUGlHJSpwcm90ZWN0ZWRHIyEiIiIiIyxMKiRGJCMiIiJGKCIiJSooLUkkZXJmRzYkRiVJKF9zeXNsaWJHNiI2IywkKiZJInRHRjNGLEYoRitGK0YsRjdGLEYkRishIiUqKEYkRistRjA2IywmKiRGKEYrRiZGNkYrRixGN0YsRi0qKC1GMDYjLCRGNiNGLEYtRixGN0YsRiRGKyIiKSooRiRGKy1GMDYjLCZGPSNGJ0YtRjZGQkYsRjdGLCEiKSooRihGKy1JI0VpR0YxNiRGLCwoRitGLEY3RicqJEY3RihGK0YsRjdGLCEiIyooRihGKy1GTDYkRiwsKCNGLEZDRixGN0ZIRk9GVUYsRjdGLEYoKihGKEYrRjdGKC1GTDYkRiwsJEZPRitGLEYnKihGKEYrRjdGKEZLRixGLCooRihGK0Y3RigtRkw2JEYsLCRGT0ZVRixGLCooRihGK0Y3RihGUkYsRicqJkY6RixGJEYrRjgqJkZFRixGJEYrRkMqJkYoRistRkw2JEYsLCQqJCwmRjdGLEYnRixGKEYrRixGLComLUkkZXhwR0YxNiMsJEZPRiZGLEYoRitGUComRihGKy1GZG82IywkRmBvRiZGLEYtKiZGKEYrLUZkbzYjLChGJkYsRjdGLEZPRiZGLEZQKiZGKEYrLUZMNiRGLCwkRmBvRlVGLEYnKiYtRmRvNiMsJEZPI0YnRkNGLEYoRitGQyomRihGKy1GZG82IywkRmBvRmdwRiwhIzsqJkYoRistRmRvNiMsKEZncEYsRjdGQkZPRmdwRixGQ0YsRlU= JCIrSTFbUEQhIzU= JCIrJTRTZ24kISM1 IyIiIiIiIw== IyIjSCIjNw== NyQkIisrKysrXSEjNSQiK25tbTtDISIq LCQqLCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkSSZzaWdtYUc2IkYqLUkkZXhwRzYkRihJKF9zeXNsaWJHRiw2IywkKiYsJkkieEdGLEYmRilGJkYkRishIiNGKUYmLUkqcGllY2V3aXNlR0YoNicyRitGJiIiITJGK0YkRiZGO0YmRiU= LCQqKCIiIyMiIiJGJCwmLUkjRWlHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JEYmLCgqJEkieEdGLUYkRiVGMSMhIiJGJCNGJiIiKUYmRjMtRik2JEYmLChGMEY0RjEjRjNGNSNGJiIjS0YmRiZGJkkjUGlHRitGMiNGJiIiJQ== LCQqJiwwKiRJI1BpRyUqcHJvdGVjdGVkRyMiIiIiIiMhIiUqKEYqRihJInRHNiJGKS1JI0VpRzYkRidJKF9zeXNsaWJHRi42JEYpLCgqJEYtRipGKEYtIyEiIkYqI0YpIiIpRilGKUYqKiZGJkYoLUkkZXJmR0YxNiMsJiomRi1GKUYqRihGKCokRipGKCNGNyIiJUYpRkIqJkYqRigtRjA2JEYpLCQqJCwmRi1GKkY3RilGKkY4RilGNyooRipGKEYtRiktRjA2JEYpLChGNUY4Ri0jRjdGOSNGKSIjS0YpRikhIiMqJkYmRigtRjw2IywmRj8jRilGQkZARk1GKSEiKSomRipGKC1GMDYkRiksJEZHRk5GKUYpRilGJkY2Rk0= JCIrPyhcYGUjISM1 JCIrVUsjeWskISM1 IyIiIiIiIw== IyIiKCIiJA== NyQkIisrKysrXSEjNSQiK0xMTExCISIq LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVElcGxvdEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYqLUYsNiVRLHBkZk1hcmdpbmFsRidGL0YyLUkjbW9HRiQ2LVEiLEYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMS8lKXN0cmV0Y2h5R0ZFLyUqc3ltbWV0cmljR0ZFLyUobGFyZ2VvcEdGRS8lLm1vdmFibGVsaW1pdHNHRkUvJSdhY2NlbnRHRkUvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR1EsMC4zMzMzMzMzZW1GJy1GLDYlUSJ4RidGL0YyLUY+Ni1RIj1GJ0ZBRkMvRkdGRUZIRkpGTEZORlAvRlNRLDAuMjc3Nzc3OGVtRicvRlZGam4tRj42LVEqJnVtaW51czA7RidGQUZDRmhuRkhGSkZMRk5GUC9GU1EsMC4yMjIyMjIyZW1GJy9GVkZgby1JI21uR0YkNiRRIjZGJ0ZBLUY+Ni1RIy4uRidGQUZDRmhuRkhGSkZMRk5GUEZfby9GVkZURmJvRkEtRj42LVEiO0YnRkFGQ0ZGRkhGSkZMRk5GUEZSRltv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= %; LSUlUExPVEc2Ji0lJ0NVUlZFU0c2JDdhbzckJCEjZyEiIiQiK2gvPigpPSEjODckJCEqOk0lUWQhIikkIitleicqW0khIzg3JCQhKy1yJTNeJiEiKiQiK2JwUnVYISM4NyQkIStsOyFcRCYhIiokIiooeUxFciEjNzckJCErYidmcypcISIqJCIremJRKTQiISM3NyQkIStzQCUzdSUhIiokIitbJ29wbSIhIzc3JCQhK1UuNi5YISIqJCIrPWFQREMhIzc3JCQhKy1HJnBEJSEiKiQiKylcYVRgJCEjNzckJCErQWpQLVMhIiokIis3VDZfXiEjNzckJCErc2loW1AhIiokIiouaCI0dSEjNjckJCEqKEdmKFskISIpJCIrI0hPSDEiISM2NyQkISs6TG9kSyEiKiQiKz5ENlg5ISM2NyQkISpoZikpKkghIikkIipET3UsIyEjNTckJCEqOnQqUUYhIikkIitBKHlJeSMhIzY3JCQhKlJDJilbIyEiKSQiKylHL1x1JCEjNjckJCErQUg0aEEhIiokIiombyhcJVshIzU3JCQhKiJcbCEqPiEiKSQiK29WK3ZrISM2NyQkISpXZTp3IiEiKSQiKzdzNWAiKSEjNjckJCErI3lrXVwiISIqJCIrUTpGWDUhIzU3JCQhK2goPXJQIiEiKiQiKyI+TSNlNiEjNTckJCEqdXMiZjchIikkIit6N0F4NyEjNTckJCEraHN3SDYhIiokIisiKlFoODkhIzU3JCQhKyN5aC4rIiEiKiQiK1FhZ2E6ISM1NyQkISpscjh4KSEiKiQiK3cqejhwIiEjNTckJCEqW0QiUnYhIiokIislUkEnRz0hIzU3JCQhK2xlU2BpISM1JCIrME0jKnA+ISM1NyQkISpEJ29uXCEiKiQiK0hfZDFAISM1NyQkISsmRyUqcHkkISM1JCIrKlskW0RBISM1NyQkISpLLWpnIyEiKiQiK09YdE5CISM1NyQkISh2SSNmISIqJCIrKVFcT2AjISM1NyQkIis6XWhqNyEjNSQiKyY+dyc0RSEjNTckJCIqeWdrZSMhIiokIipSIVFrRSEiKjckJCIqTUpBOyQhIiokIitvWjQibyMhIzU3JCQiKT4rUVAhIikkIitBck4kcCMhIzU3JCQiKllzUEolISIqJCIqIm80LEYhIio3JCQiKi1WJiopWyEiKiQiKjRwVXEjISIqNyQkIiosbi8/JiEiKiQiKlV2U3EjISIqNyQkIigiUjZiISIoJCIrVVZhLUYhIzU3JCQiKipcSkFlISIqJCIrVSV5JypwIyEjNTckJCIrJikqUUs4JyEjNSQiKmIjWyZwIyEiKjckJCIqKHAzYm4hIiokIitfODgkbyMhIzU3JCQiKiZcJHBQKCEiKiQiKy1RZGxFISM1NyQkIit2WHpoJykhIzUkIisjNFlMaCMhIzU3JCQiKVVsWSoqISIpJCIrZSIpKjNhIyEjNTckJCIrOkIxWTchIiokIitGbGlbQiEjNTckJCIrRT9vbjghIiokIisnenNoQiMhIzU3JCQiK1E8SSpbIiEiKiQiKXlJOUAhIik3JCQiKyNwUlZpIiEiKiQiK1gpMzUoPiEjNTckJCIrWHdQZjwhIiokIitQYWJBPSEjNTckJCIrX19yISk9ISIqJCIrQjxSKG8iISM1NyQkIionRzAtPyEiKSQiK0s2dV86ISM1NyQkIitibWdKQCEiKiQiK1ApUTtUIiEjNTckJCIqWGc2RSMhIikkIitUMjx2NyEjNTckJCIrV2FieUIhIiokIipRP286IiEiKjckJCIrUS8mZlwjISIqJCIqI3pXVzUhIio3JCQiKiJ6al9GISIpJCIrdis1QyMpISM2NyQkIis9MzslKkghIiokIitlTVteayEjNjckJCIrWz1pWUshIiokIitEYSxCXCEjNjckJCIqbFtNXCQhIikkIip2J2ZCUCEjNTckJCIrUU0mPXYkISIqJCIrIypmJCpSRiEjNjckJCIqJ3pzK1MhIikkIisnSHhFLCMhIzY3JCQiKSJRX0QlISIoJCIrVkN3XDkhIzY3JCQiKnlTd10lISIpJCIqIj1OTTUhIzU3JCQiKmlzJlJaISIpJCIrOlcsL3YhIzc3JCQiKm8jUjBdISIpJCIrOjVgSF4hIzc3JCQiKktYSkMmISIpJCIrKSlISjNPISM3NyQkIipBUm1cJiEiKSQiKzxOKClcQyEjNzckJCIqQWwjUmQhIikkIit2PT1yOyEjNzckJCIjZyEiIiQiK2w0VSQ0IiEjNy0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUlVklFV0c2JDskISNnISIiJCIjZyEiIiUoREVGQVVMVEctJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEieDYiLyUnZmFtaWx5R1EhNiIvJSVzaXplR1EjMTA2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiUSE2Ii0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJFMiISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlIXkkISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJT9OISIiLSUpQ0hJTERSRU5HNiI= JSFH openturns-1.9/validation/src/validElliptical.sce000066400000000000000000000003211307543307100221360ustar00rootroot00000000000000mean=[0,0,0] sigma=[1,2,3] R=[1,0.5,0;0.5,1,0.5;0,0.5,1] C=diag(sigma)*R*diag(sigma) cholesky=chol(C)' inverseCholesky=cholesky^(-1) inverseR=R^(-1) inverseCovariance=C^(-1) normalizationFactor=1/sqrt(det(C)) openturns-1.9/validation/src/validEnumerate.mws000066400000000000000000000303621307543307100220450ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 152 "restart:\nf:=GAMMA( n+d+1)/GAMMA(n+1)/GAMMA(d+1):\np:=convert(series(f,n,2),polynom):\nsol :=solve(p=k,n);\nwith(plots):\nplot3d(f-p,n=0..5,d=0..5,axes=boxed);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG*&,&\"\"\"!\"\"%\"kGF'F',&-%$ PsiG6#,&%\"dGF'F'F'F'%&gammaGF'F(" }}{PARA 13 "" 1 "" {GLPLOT3D 745 745 745 {PLOTDATA 3 "6%-%%GRIDG6%;$\"\"!F($\"\"&F(F&X,%)anythingG6\"6 \"[gl'!%\"!!#\\bm\":\":00000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000BF775C3616247523BF7C1EB08AC5EDEBBF76C69A2C065B48BF6 727AF000F17C13F493D1047440E013F7411B4DAD3FBB43F832B3702A408D93F8CB7769 F24BB243F9340B1D7F11BA03F9835AB07AB1A203F9D3088D64A466D3FA115273B7AA1D 43FA38F102A79E40D3FA6044E45EDA6E03FA873B577793BDF3FAADC787A2FDEFA3FAD3 E0E5E8BA84A3FAF981FDAB17EF83FB0F53D052368553FB21A824B8206153FB33BDD763 1426A3FB4595355D8F3A33FB572EE131364283FB688BB988D79270000000000000000B F94CF0AB552C221BF999A4E627318A5BF951E5971055CD3BF85CEA570E692B43F68181 FAE0693363F936404FDB9D65A3FA2B89D15D51D613FAC5212958598183FB328296E273 ECD3FB8498298E0B1E83FBD817DC7D8A6883FC163D4B3BC7EA33FC40AE4D46340AD3FC 6B39BF454E0893FC95C3A62BA4FEC3FCC036D7A8540ED3FCEA834621F69593FD0A4E60 8608B563FD1F3D06E05DBD13FD340A1C68B558E3FD48B30A505D5CF3FD5D35EA821B4C 03FD71916293730EF3FD85C48572C98AD0000000000000000BFA525554D5A1300BFAA7 D22EDFB219DBFA63066CE60E3AABF9739713AD5BEE43F79F86B8535E9AF3FA520CF277 6E5B03FB499BF87A97CF33FBF725BC3F456C23FC5732D56C0D0163FCB68012702B4763 FD0C4D2EB8CE5DE3FD3E6C0CD2FE1293FD715B7D57AE3793FDA4E8C99C5A82F3FDD8EC 0541F65413FE06A2B98D5BC6F3FE20EDD080F60483FE3B4D01B2D4F663FE55B7F4A7CB FB33FE7027D899DC2003FE8A9716FA9BD1A3FEA5011662647093FEBF620BE7289383FE D9B6D5398EDF30000000000000000BFB129FFAC80CE88BFB5D3FA85C611C3BFB2879EE 0CF64E2BFA3A069D6282D553F862F6408CD8AE13FB23A3C66E38EDB3FC1EF42CF43B0C 03FCB9BED874491DC3FD2FB2F51137D673FD86E92FD3032713FDE1B5CBF4F89F73FE1F BCE5783A2F73FE4FDBB80855CB23FE8104F283F0AEE3FEB30FA57C8B47C3FEE5DA3824 9C8803FF0CA46933FEBDC3FF26A21734AD8F53FF40DC589FC31833FF5B4ADCA5BB6E93 FF75E689FC069003FF90A9485AAF1A83FFAB8DD51DDCBD63FFC68FA05C0086E0000000 000000000BFB8B451277B4940BFBFD39F69F42CBCBFBB559617C390F0BFAD42EB68118 DFC3F90B341CCAE37EF3FBBB108C4B44A563FCB7A403FF08CC43FD5516577E6DCE73FD D8810A75879323FE323F8E6FCBBE23FE7BEB0F5EEBE963FEC8C602E0027F53FF0C35AC E468E493FF35441BB477A793FF5F6BE6FF8F2813FF8A902D0D990993FFB6987035027C 73FFE36FBD0D7849D40008820123B8E434001FA2C7191D772400371353EFC14384004E CD9E8C7B2BA40066CC502BA2AC54007F0AA9BA81A440000000000000000BFC080978EC D43DDBFC58042E32CF526BFC2A878CE49AEDEBFB42A6010CEE9B93F973961E014B4343 FC36A926E83CB8F3FD36B2E2EBC80FA3FDE5B57B776FA323FE52D0A52B6A8963FEBA2C 5634BFFB33FF140B97DB1FEE33FF4DF1E4A31C1323FF8A81D7D35D8213FFC980151F5D 23B400055D4141C753440027032E664D6F8400499F638C5B3174006D21D93F5D1E5400 917C820F41EFF400B6A2F58DE129A400DC8A2CD8EAD71401019425FCBED7F401153A3B 290FB29401293355373F0680000000000000000BFC4F6BDDB87139FBFCB964894A1EBA BBFC82990925EE7C2BFBA57B553CC6A583F9E968A81B4DCA73FC9C5B90DF05C083FD9F 77DF61594933FE470B94899487C3FECB5CD38541ABA3FF2DB1B93E2D3FE3FF7B0AD3B2 5DFA73FFCD4D49D2E5734400120F8EE4F0EC24003F9A42812EE9A4006F266B958B7E34 00A098252BC4BB1400D3D71FDFCCE254010466FDB04480E4011FB4E29F35D494013BCC C9AAB700E40158A71969B377E401763CF3986000140194881A90CFF17401B382DBAABE B890000000000000000BFC9AF78F27AC959BFD10CFEBFAB5497BFCE1E9F22F59754BFC 08CCB18A564EA3FA35D19685F4E953FD06F1B7CB856563FE0AC77401E154E3FEA6D2CC 47143163FF2ADDCBB3D94713FF8B056D636BF153FFF34A1833F5C844003198812D5E7F 64006D2A033E78E19400AC2E6F654ECA8400EE80DA11FC2354011A00A557F9F844013E 49E3EEFD4E5401640FCEF99195B4018B47674C03529401B3E6CFC6040E6401DDE5207F 96270402049D212FF2D944021AEF68F3DF60540231E6036BB41CF0000000000000000B FCEA0B30CF6F833BFD47E99B70A689BBFD23D84F50B9F09BFC4315C88D4EBCE3FA7CB1 7400D8C303FD454E04922D6103FE4C3ABEA06CD013FF08F61DD3FB6A43FF78E344E6ED 6803FFF52325000C0BD4003E8E3199DE96840088298B520BC41400D730ACF10F4C5401 15BC853C14834401426F4FC96BEF440171A148130300D401A3451117BB99B401D74EFB 5042E3840206DA5BE6B0A3A40223368E20E1EF440240B7F9E70C3E24025F5AEC6FD550 04027F1C0B3E4C96E4029FF847DA8A24B0000000000000000BFD1E14108BC6FBBBFD81 A3BB0914A18BFD59A300EF95D9EBFC813ECCB33B4513FAC8F1B8027F2513FD88F9E7C0 A1A3E3FE93DB15D4976053FF440CBD682AE1B3FFCFACF85FE7601400360DDFCDC1A594 008C689B29BC91F400EAB222670821E4012860A29015EAD4015F3AAFDAB4D3240199DA 2CF226789401D83498C0782224020D20B92EC67834022FFCE886C534340254AC0A39EA B264027B2BD347E61DB402A37A65FD0A016402CD963E8B2B16E402F97E240268BB0403 13988DF0C3F7E0000000000000000BFD487490D42BC46BFDBDB32C15465E1BFD920EF1 AE85436BFCC2FA739B7A91C3FB0D1E3E2E8EDEB3FDD1B48FF2AF6813FEE1734684DAD6 E3FF84908CB78056D40017951AB32372440077FF9CFD4020F400E35A7527B08454012C C41B7DB4E1A4016D3B845F0E9D2401B30ECF26D5680401FE3C8A618FB464022762D94A 786304025256902A2F2894027FFB8D8A41B7E402B0548354DEA9A402E36491FAE9C0A4 030C9797F72D1DA40328DC0B4E67C20403468199ADBB8F9403658A4DBECFB400000000 000000000BFD73FDF8A4FE0CFBFDFBD979E5667A2BFDCCE097DAD29EFBFD0402E7D5AB 8773FB382302412B7703FE0FA1EDF35A7793FF1A696C7BE564E3FFCA66FCAC6C0CD400 4BA5AA85356FB400C06E62DF1D5C640121C43DD8B9D134016A7FBD8756EE4401BA7570 FE4D80F40208DABA238573D40238298BC9C4A704026B3204D526E37402A1FFDDC64447 8402DC9F7657CB1814030D8ED4D1FEE5D4032EC3D6692DC1040351F57ADBBE57440377 2A938481AF74039E6A00746F12B403C7BAAA75DFD610000000000000000BFDA08E65BC 7AF8ABFE1DF10C13ABFBCBFE04F27016E0B99BFD2813359A743DA3FB656583BD644F13 FE38B9AC672F41C3FF46E6B4DDF64884000ABBB1D890E174008400CE9C85B2340107B0 B72F23259401568B0D1214DE1401AEB4C630507FC402082CE349214254023DD55849F6 A1C402786DD0D8CB07D402B811A4479D787402FCDD1CEBF404740323769C1E59317403 4B2FBB3C00B7340375A8DB10317B8403A2F10BDE8586F403D31773F26B1704040315A3 8DB93BA4041E1DDFF64A49A0000000000000000BFDCE0995A2608A0BFE3ED02C75205F FBFE2477CA2233C2BBFD4D946893787E83FB94C7B1C9AAF323FE6409B75B42E933FF76 1D116AADEB340032D5622767781400C09F93C1F1DB0401326FD4974F1A24019012C318 3A80D401F98B0CD5F3B4640237996E87E1D0040278B50DFEC6442402C04A840D156744 030746CC4CF526340331D9ADD6678044035FF8EE6E3237B40391BFF9F87F024403C74A 8B266442D404005A4D5B7D7F34041F0D293A0B13B4043FCC015EFAB7440462A50D153C 5240000000000000000BFDFC57B5AFB5F6EBFE6076F1BDB6C92BFE44ED0FC0F0D42BFD 746FB3051455C3FBC62E7DB09EB2A3FE917C5C0ADC96B3FFA7F9A518B9F164005D75CE E42934D40100BDB2FE6F8724016077D8761AB0D401CE6BEC1827D044022594C0F199AD 34026BA50A7625A12402B9B76D59F594C403080FCCAEC4CF04033799DFDAC68A94036B A61268B8504403A461661964800403E1F99B7CC8A88404124E8C34D7224404363D69B6 D2E574045CE121B4B0A144048651A90E56AFE404B2A72874685CB0000000000000000B FE15B23EF95C6F4BFE82D4C481BE756BFE66414C6A55A31BFD9C90BE8FD962A3FBF981 73880CFF43FEC0FDBA3BB6CB93FFDC6AF1AA409FA4008A92E179572EE401234703D65F 83E40191CBEEF35FAB040208D34804B7B0F40251DB1ECF78F99402A473F24023DC8403 008CE8990620D4033426C1FB8D7F84036D49F350F0079403AC3AB57DD0BB4403F13EDB A2D37F24041E4ED64B25C33404474FE20ACC8CB40473C77CE83304C404A3DB2645640D 4404D7B0E87ED9FAC40507B7A8C5868770000000000000000BFE2D8F42B9CA21EBFEA5 DB2CD949545BFE8865804009E3EBFDC5E54E09339693FC17552D2E0B8113FEF27B8A20 3B1A240009B058083AF33400BA231BD6FEB2840147E8C4AB7C565401C66F24466C8724 022CE91E124AEC740281AB46C02DD80402E229F241D15BA403278CAFB66683F403649A 990DD885C403A89FDE6A03290403F400BA65162F4404239221177CC95404513A1CDF08 E48404832E78306852A404B9A691BA272DC404F4DAF2CE942244051A82A283CE005405 3D3024A1CAEB80000000000000000BFE45BB5D9FD4826BFEC97D7793CF192BFEAB4C52 46A761EBFDF05CF070EBD073FC32CA761F2FDFE3FF12F275A48312D4002665D71B1596 5400EC1D89752B9D94016EA021934DA52401FE64673D7BE18402537F05B9D34AF402B5 178039CC299403127536D655E2940351F985AD538AC403999C046AC8CBB403E9E56415 534E640421B1B28FB4BE640453544EEC773724048A2626361FA1B404C67518ACCA2304 0504489C256514640528665DDEAD74F4054FBDF9AE5740E4057A7A9FCD3A5AF0000000 000000000BFE5E2FFF6E820B3BFEEDB06D234C93EBFECEE9D13F783B0BFE0DF460EE0A 11E3FC4F174ACA53A0C3FF2D951DB3F0071400444ED952A854B401103CD93AD57A3401 976A672B4C22E4021CD745B01EA774027C9C5718EB895402EC31B8CA366F8403366C31 B482FF04037FF1CBBF86933403D35BF03B66DE640418B29664050D34044D6808AD4DAB 840488337D4D889EF404C97DF439CE2CF40508DA175053AA840530A350E95192C4055C 54B6543A69E4058C2A276B7ED42405C06150B955F780000000000000000BFE76E766A3 6F7DBBFF09350B5C76F0CBFEF33340B05A8C8BFE243D9BC1E7EC63FC6C33201B86F7B3 FF491E79B51A2014006364B17F025864012B97C81CA89C0401C2450043E17004023C28 257A26D17402A8483842E78634031385C467CE7064035D0B395C42203403B193CBE4C5 6704040905C023462B34043FB5608CB2AB64047D5B1506F841C404C27F31B960895405 07D8025CA69F140532C0E72136DC640562475DEC9A47940596BB73017F5C0405D07027 C46A27C40607DDB96FF8B660000000000000000BFE8FDC7FAE722A0BFF1BD0C798B065 9BFF0C0F77278FF81BFE3B03FA0A9D92D3FC8A161573B83C23FF6587C4AFF2CC640083 A11776580FD401481BC1A334335401EF2D732AC4FAA4025D26246C70EC8402D689A07D 388FF40332DB1C386FDE14038663700C826F6403E6FDB98C2841F4042AEE074DFD0E14 046A2142713EB19404B1C390C3B21BF4050144767BDD4624052E97282288EC0405613C DE5F1B6E7405999D25892684D405D8241D15BA7C74060EA13FF91453740634B6D7CDB1 CF20000000000000000BFEA90ACA110E4DDBFF2EA76E0312D9FBFF1ED2079AE52F5BFE 5241D1643ECC73FCA8B8DEC810BF33FF82CAAAF855808400A4FE1E66D0F8140165C525 90AAAA04020F10AFFEBE6A14027FD289097E83F40303B3AD614CA12403542161B1F6B2 A403B285CC3A55BC54041026D932B6B694044F7F94E1F9DAA404981CD926F83C6404EA DB34B9C609E40524521396B5B9940559372479B1F2B405949EBBD52DC46405D71182A9 930BE406108F7A3047C6740639AEBD1AA821F40667354006804CC0000000000000000B FEC26E42D3BA26DBFF41B566987F2C2BFF31DD51251CD63BFE69F1EC386F54A3FCC814 B735FB7E53FFA0E13F79D74B4400C7762CCB17C9840184907F129E820402278F3F291B E95402A42E8F7A5BE6B4031D740443DC78C4037760EE677C3B1403E1831AB73B6B1404 2ED0DF9FE334C40476D349A50F998404C9CF2AB02CD90405146E5AF91FE704054A9325 DF62A6A40587F46CA7F3FA6405CD3A1E37F96B94060D8AEAAD8863E40639218793DD97 F40669C3ADD4BA0124069FD94D0DCFCC60000000000000000BFEDC0352A36E8D3BFF54 F77114840A5BFF452DABCE943C0BFE820F7CE470F223FCE823510A5611A3FFBFC5F188 BB476400EB03F5406700F401A47A81416F47440241114DEB455DE402CA3B6A69AB3F64 03388911FCD7AC84039CA1F971F15F040409B600187EA704044F8BEA597A9AA404A102 1F40621AD404FF5FA3E34990F4053601E1076C5AF40574335AF23EF73405BB0D318ABC 87040605B2C3BC82D2B406331008BE14A32406661739416A2DA4069F4851D76328C406 DF2AAAA98C55E-%+AXESLABELSG6%%\"nG%\"dGQ!F.-%*AXESSTYLEG6#%$BOXG" 1 2 0 1 10 0 2 1 1 2 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "assume(n,integer,d,integer); convert(f,factorial);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(-%*factoria lG6#,&%#n|irG\"\"\"%#d|irGF)F)-F%6#F(!\"\"-F%6#F*F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "product((n+k)/k,k=1..d);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(-%&GAMMAG6#,(%#n|irG\"\"\"%#d|irGF)F)F)F)-F%6#,& F(F)F)F)!\"\"-F%6#,&F)F)F*F)F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "for i from 1 to 5 do\n expand(subs(n=i,f));\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&\"\"\"F$%#d|irGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(\"\"\"F$*&#\"\"$\"\"#F$%#d|irGF$F$*&#F$F(F$*$)F)F(F$F $F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,*\"\"\"F$*&#\"#6\"\"'F$%#d|irG F$F$*$)F)\"\"#F$F$*&#F$F(F$*$)F)\"\"$F$F$F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,\"\"\"F$*&#\"#D\"#7F$%#d|irGF$F$*&#\"#N\"#CF$*$)F)\" \"#F$F$F$*&#\"\"&F(F$*$)F)\"\"$F$F$F$*&#F$F-F$*$)F)\"\"%F$F$F$" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,.\"\"\"F$*&#\"$P\"\"#gF$%#d|irGF$F$*& #\"#:\"\")F$*$)F)\"\"#F$F$F$*&#\"#<\"#CF$*$)F)\"\"$F$F$F$*&#F$F-F$*$)F )\"\"%F$F$F$*&#F$\"$?\"F$*$)F)\"\"&F$F$F$" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/validEnumerate.txt000066400000000000000000000023361307543307100220560ustar00rootroot00000000000000> restart: > f:=GAMMA(n+d+1)/GAMMA(n+1)/GAMMA(d+1): > p:=convert(series(f,n,2),polynom): > sol:=solve(p=k,n); > with(plots): > plot3d(f-p,n=0..5,d=0..5,axes=boxed); -1 + k sol := ------------------ Psi(d + 1) + gamma > assume(n,integer,d,integer);convert(f,factorial); (n~ + d~)! ---------- n~! d~! > product((n+k)/k,k=1..d); GAMMA(n~ + d~ + 1) --------------------------- GAMMA(n~ + 1) GAMMA(1 + d~) > for i from 1 to 5 do > expand(subs(n=i,f)); > od; 1 + d~ 2 1 + 3/2 d~ + 1/2 d~ 2 3 1 + 11/6 d~ + d~ + 1/6 d~ 25 35 2 3 4 1 + -- d~ + -- d~ + 5/12 d~ + 1/24 d~ 12 24 137 2 17 3 4 5 1 + --- d~ + 15/8 d~ + -- d~ + 1/8 d~ + 1/120 d~ 60 24 > openturns-1.9/validation/src/validFrechet.mw000066400000000000000000001570411307543307100213210ustar00rootroot00000000000000 restart: assume(alpha>0,beta>0,g,real); with(Statistics): valnum:=alpha=6.0,beta=1.5,g=-1.0,x=1.0,q=0.95,u=1.0; cdf:=exp(-((x-g)/beta)^(-alpha)); pdf:=factor(simplify(diff(cdf,x))); ddf:=factor(diff(pdf,x)); quantile:=solve(cdf=q,x); cf:=Int(exp(I*u*x)*pdf,x=g..infinity); cdfgr:=[diff(cdf,alpha),diff(cdf,beta),diff(cdf,g)]; pdfgr:=[diff(pdf,alpha),diff(pdf,beta),diff(pdf,g)]; evalf(subs(valnum,[ddf,log(pdf), pdf,cdf,quantile,pdfgr,cdfgr])); NigvSSdhbHBoYXxpckc2Iy9JJ19sb2NhbEclKnByb3RlY3RlZEdJMl9uMTQwMDU0OTA5ODg0Mjg4RzYiJCIjZyEiIi9JJmJldGF8aXJHNiMvRidJMl9uMTQwMDU0OTA5ODg0NjA4R0YqJCIjOkYtL0kjZ3xpckc2Iy9GJ0kyX24xNDAwNTQ5MDk4ODQ5MjhHRiokISM1Ri0vSSJ4R0YqJCIjNUYtL0kicUdGKiQiIyYqISIjL0kidUdGKkY+ LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCkqJiwmSSJ4R0YnIiIiSSNnfGlyRzYjL0knX2xvY2FsR0YlSTJfbjE0MDA1NDkwOTg4NDkyOEdGJyEiIkYuSSZiZXRhfGlyRzYjL0YySTJfbjE0MDA1NDkwOTg4NDYwOEdGJ0Y0LCRJJ2FscGhhfGlyRzYjL0YySTJfbjE0MDA1NDkwOTg4NDI4OEdGJ0Y0RjQ= KiopSSZiZXRhfGlyRzYjL0knX2xvY2FsRyUqcHJvdGVjdGVkR0kyX24xNDAwNTQ5MDk4ODQ2MDhHNiJJJ2FscGhhfGlyRzYjL0YnSTJfbjE0MDA1NDkwOTg4NDI4OEdGKiIiIiksJkkieEdGKkYvSSNnfGlyRzYjL0YnSTJfbjE0MDA1NDkwOTg4NDkyOEdGKiEiIiwmRitGN0Y3Ri9GL0YrRi8tSSRleHBHNiRGKEkoX3N5c2xpYkdGKjYjLCQqJkYjRi8pRjEsJEYrRjdGL0Y3Ri8= LCQqLilJJmJldGF8aXJHNiMvSSdfbG9jYWxHJSpwcm90ZWN0ZWRHSTJfbjE0MDA1NDkwOTg4NDYwOEc2IkknYWxwaGF8aXJHNiMvRihJMl9uMTQwMDU0OTA5ODg0Mjg4R0YrIiIiKSwmSSJ4R0YrRjBJI2d8aXJHNiMvRihJMl9uMTQwMDU0OTA5ODg0OTI4R0YrISIiLCZGLEY4RjhGMEYwRixGMC1JJGV4cEc2JEYpSShfc3lzbGliR0YrNiMsJComRiRGMClGMiwkRixGOEYwRjhGMCwoKihGJEYwRixGMEZBRjBGMEYsRjhGOEYwRjAsJkYzRjhGNEYwRjhGOA== LCYqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCQqJi1JI2xuR0YmNiMsJC1GLjYjSSJxR0YpISIiIiIiSSdhbHBoYXxpckdGKUY0RjRGNUkmYmV0YXxpckdGKUY1RjVJI2d8aXJHRilGNQ== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqLC1JJGV4cEdGJDYjKiheIyIiIkYvSSJ1R0YnRi9JInhHRidGL0YvKUkmYmV0YXxpckdGJ0knYWxwaGF8aXJHRidGLyksJkYxRi9JI2d8aXJHRichIiIsJkY0RjhGOEYvRi9GNEYvLUYrNiMsJComRjJGLylGNiwkRjRGOEYvRjhGLy9GMTtGN0kpaW5maW5pdHlHRiU= NyUqKCkqJiwmSSJ4RzYiIiIiSSNnfGlyR0YoISIiRilJJmJldGF8aXJHRihGKywkSSdhbHBoYXxpckdGKEYrRiktSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKDYjRiVGKS1JJGV4cEdGMTYjLCRGJEYrRiksJCoqRiRGKUYuRilGLEYrRjVGKUYrLCQqKkYkRilGLkYpRiZGK0Y1RilGKw== NyUsKiosKUkmYmV0YXxpckc2IkknYWxwaGF8aXJHRiciIiItSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJzYjRiZGKSksJkkieEdGJ0YpSSNnfGlyR0YnISIiLCZGKEY0RjRGKUYpRihGKS1JJGV4cEdGLDYjLCQqJkYlRikpRjEsJEYoRjRGKUY0RilGKSosRiVGKUYwRiktRis2I0YxRilGKEYpRjZGKUY0KihGJUYpRjBGKUY2RilGKSosRiVGKUYwRilGKEYpLCYqKEYlRilGKkYpRjtGKUY0KihGJUYpRjtGKUY+RilGKUYpRjZGKUYpLCYqLEYlRilGKCIiI0YmRjRGMEYpRjZGKUYpKi5GJUZHRjBGKUYoRkdGJkY0RjtGKUY2RilGNCwmKi5GJUYpRjBGKUY1RilGMUY0RihGKUY2RilGNCouRiVGR0YwRilGKEZHRjtGKUYxRjRGNkYpRjQ= NykkISs+TltEOCEiKiQhKzttZWEhKSEjNSQiKzoiSClvV0YoJCIrWVNncCQpRigkIitPdSMzWSJGJTclJCErLGooKT5KISM2JCIrPSUqUXA5RiUkIis+TltEOEYlNyUkIityK00mRyVGMiQhK0YpUSVlZkYoJCErPyJIKW9XRig= mean:=int(x*subs(g=0,pdf),x=0..infinity)+g; Mn:=Int((t-m)^n*subs(x=t,pdf),t=g..infinity); M0:=Int(t^n*subs(x=t,subs(g=0,pdf)),t=0..infinity); var:=value(subs(m=mean,n=2,g=0,Mn)); std:=sqrt(var); skew:=factor(simplify(value(subs(m=mean,n=3,g=0,Mn))/std^3,symbolic)); kurt:=factor(simplify(value(subs(m=mean,n=4,g=0,Mn))/std^4,symbolic)); evalf(subs(valnum,[mean,var,std,skew,kurt])); LCYqJkkmYmV0YXxpckc2IiIiIi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJkYmRiYqJEknYWxwaGF8aXJHRiUhIiJGMEYmRiZJI2d8aXJHRiVGJg== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqLCksJkkidEdGJyIiIkkibUdGJyEiIkkibkdGJ0YtKUkmYmV0YXxpckdGJ0knYWxwaGF8aXJHRidGLSksJkYsRi1JI2d8aXJHRidGLywmRjNGL0YvRi1GLUYzRi0tSSRleHBHRiQ2IywkKiZGMUYtKUY1LCRGM0YvRi1GL0YtL0YsO0Y2SSlpbmZpbml0eUdGJQ== LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqLClJInRHRidJIm5HRiciIiIpSSZiZXRhfGlyR0YnSSdhbHBoYXxpckdGJ0YtKUYrLCZGMCEiIkYzRi1GLUYwRi0tSSRleHBHRiQ2IywkKiZGLkYtKUYrLCRGMEYzRi1GM0YtL0YrOyIiIUkpaW5maW5pdHlHRiU= LCYqJkkmYmV0YXxpckc2IiIiIy1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMqJiwmISIjIiIiSSdhbHBoYXxpckdGJUYwRjBGMSEiIkYwRjAqJkYkRiYtRig2IyomLCZGMUYwRjJGMEYwRjFGMkYmRjI= KiQsJiomSSZiZXRhfGlyRzYiIiIjLUkmR0FNTUFHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiY2IyomLCYhIiMiIiJJJ2FscGhhfGlyR0YmRjFGMUYyISIiRjFGMSomRiVGJy1GKTYjKiYsJkYyRjFGM0YxRjFGMkYzRidGMyNGMUYn LCQqJiwoKiQtSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiYsJkknYWxwaGF8aXJHRisiIiIhIiJGMEYwRi9GMSIiJCEiIyomRiZGMC1GJzYjKiYsJkYzRjBGL0YwRjBGL0YxRjBGMi1GJzYjKiYsJiEiJEYwRi9GMEYwRi9GMUYxRjAsJiokRiYiIiNGMUY1RjAjRj1GQEYx KiYsKiokLUkmR0FNTUFHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IyomLCZJJ2FscGhhfGlyR0YqIiIiISIiRi9GL0YuRjAiIiUhIiQqJi1GJjYjKiYsJiEiI0YvRi5GL0YvRi5GMEYvRiUiIiMiIicqJkYlRi8tRiY2IyomLCZGMkYvRi5GL0YvRi5GMEYvISIlLUYmNiMqJiwmRkBGL0YuRi9GL0YuRjBGL0YvLCYqJEYlRjlGMEY0Ri9GOA== NyckIipYMD0kcCEiKiQiKjBdISp6IkYlJCIrODVfVFUhIzUkIitZa2MwR0YlJCIrKz4ieVkjISIp for i from 1 to 5 do [evalf(subs(n=i,m=0,alpha=subs(valnum,alpha),beta=1,g=0,Mn)),simplify(value(M0))]; end do; NyQkIitJcXlHNiEiKiomKUkmYmV0YXxpckc2IkkibkdGKSIiIi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiMqJiwmRiohIiJJJ2FscGhhfGlyR0YpRitGK0Y1RjRGKw== NyQkIitSejZhOCEiKiomKUkmYmV0YXxpckc2IkkibkdGKSIiIi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiMqJiwmRiohIiJJJ2FscGhhfGlyR0YpRitGK0Y1RjRGKw== NyQkIiteUVhzPCEiKiomKUkmYmV0YXxpckc2IkkibkdGKSIiIi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiMqJiwmRiohIiJJJ2FscGhhfGlyR0YpRitGK0Y1RjRGKw== NyQkIitOJlEqeUUhIioqJilJJmJldGF8aXJHNiJJIm5HRikiIiItSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGKTYjKiYsJkYqISIiSSdhbHBoYXxpckdGKUYrRitGNUY0Ris= NyQkIistZ0ptYiEiKiomKUkmYmV0YXxpckc2IkkibkdGKSIiIi1JJkdBTU1BRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YpNiMqJiwmRiohIiJJJ2FscGhhfGlyR0YpRitGK0Y1RjRGKw== m:=int(x*subs(g=0,pdf),x=0..infinity); KiZJJmJldGF8aXJHNiIiIiItSSZHQU1NQUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjLCZGJUYlKiRJJ2FscGhhfGlyR0YkISIiRi9GJQ== openturns-1.9/validation/src/validGLMAlgo.mw000066400000000000000000004040561307543307100211640ustar00rootroot00000000000000 restart: Digits:=30: assume(sigma2>0,theta>0): with(LinearAlgebra): N:=3: x:=[seq((-1+2*k/N),k=0..N)]: dim:=nops(x); y:=[seq((exp(x[i])), i=1..dim)]: print(x); print(y); plot([seq([x[i], y[i]], i=1..dim)]); C:=sigma2*exp(-abs(s-t)/theta): Sigma:=Matrix(dim,shape=symmetric): for i from 1 to dim do for j from 1 to i do Sigma[i,j]:=subs(s=x[i],t=x[j],C); end do: end do: print(Sigma); mu:=beta[1]: z:=Matrix(dim,1): for i from 1 to dim do z[i]:=y[i]-subs(t=x[i],mu); end do: loglikelihood:=-(Transpose(z).MatrixInverse(Sigma).z)[1,1]/2-1/2*log((2*Pi)^dim*Determinant(Sigma)): params:=beta[1],sigma2,theta: #params:=theta,sigma2: eqns:=seq(diff(loglikelihood,params[i]),i=1..nops([params])): sol_beta_1:=simplify(solve(eqns[1],beta[1])); print("========================================================================================="); sol_sigma2:=simplify(solve(subs(beta[1]=sol_beta_1,eqns[2]),sigma2)); print("========================================================================================="); eq_theta_reduced:=simplify(subs(beta[1]=sol_beta_1,sigma2=sol_sigma2,eqns[3])): plot(eq_theta_reduced,theta=1/100..10,numpoints=1000); theta_star:=fsolve(eq_theta_reduced,theta=1/100..10); sigma2_star:=evalf(subs(theta=theta_star,sol_sigma2)); beta_star:=evalf(subs(theta=theta_star,sol_beta_1)); log_likelihood_star:=evalf(subs(beta[1]=beta_star,sigma2=sigma2_star,theta=theta_star,loglikelihood)); print("========================================================================================="); loglikelihood_reduced:=factor(subs(beta[1]=sol_beta_1,sigma2=sol_sigma2,loglikelihood)): plot(loglikelihood_reduced,theta=1/100..10,numpoints=1000); #sol:=fsolve({eqns},{params}): LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEkZGltRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVErfiZBc3NpZ247fkYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZMLUkjbW5HRiQ2JFEiNEYnRjk= LUkobWZlbmNlZEc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUklbXJvd0dGJDYpLUYsNiQtSSNtb0dGJDYtUSomdW1pbnVzMDtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjkvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGSC1JI21uR0YkNiRRIjFGJ0Y0LUYxNi1RIixGJ0Y0RjcvRjtRJXRydWVGJ0Y8Rj5GQEZCRkQvRkdRJjAuMGVtRicvRkpRLDAuMzMzMzMzM2VtRictRiw2JEYwLUkmbWZyYWNHRiQ2KEZLLUZMNiRRIjNGJ0Y0LyUubGluZXRoaWNrbmVzc0dGTi8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zeby8lKWJldmVsbGVkR0Y5Rk9GWkZPRktGNC8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJw== LUkobWZlbmNlZEc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUklbXJvd0dGJDYpLUklbXN1cEdGJDYlLUkjbW9HRiQ2LVEvJkV4cG9uZW50aWFsRTtGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjovJSlzdHJldGNoeUdGOi8lKnN5bW1ldHJpY0dGOi8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdRLDAuMTExMTExMWVtRictRiw2JC1GMjYtUSomdW1pbnVzMDtGJ0Y1RjhGO0Y9Rj9GQUZDRkUvRkhRLDAuMjIyMjIyMmVtRicvRktGUy1JI21uR0YkNiRRIjFGJ0Y1LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy1GMjYtUSIsRidGNUY4L0Y8USV0cnVlRidGPUY/RkFGQ0ZFRkcvRktRLDAuMzMzMzMzM2VtRictRi82JUYxLUYsNiRGTy1JJm1mcmFjR0YkNihGVS1GVjYkUSIzRidGNS8lLmxpbmV0aGlja25lc3NHRlgvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGW3AvJSliZXZlbGxlZEdGOkZZRmZuLUYvNiVGMUZhb0ZZRmZuRjFGNS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJw== NiktJSdDVVJWRVNHNiQ3JjckJCEjNSEiIiQiMkxVOTxUJXp5TyEjPDckJCExTExMTExMTEwhIzskIjEkKnl0MEpKbHIhIzs3JCQiMUxMTExMTExMISM7JCIyJiozJzNEQ2gmUiIhIzs3JCQiIzUhIiIkIjFYIWYlRz1HPUYhIzotJSZDT0xPUkc2JyUkUkdCRyQiKUMpZXElISIpJCIiISEiIiQiKCc+IVwmISIpLSUrX0FUVFJJQlVURUc2Iy8lJ3NvdXJjZUclLG1hdGhkZWZhdWx0Ry0mJSZfQVhJU0c2IyIiIjYnLSUrX0dSSURMSU5FU0c2Jy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUqTElORVNUWUxFRzYjIiIhLSUqVEhJQ0tORVNTRzYjIiIhLSUtVFJBTlNQQVJFTkNZRzYjJCIiISEiIi0lKV9WSVNJQkxFRzYjIiIhLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSYlJl9BWElTRzYjIiIjNictJStfR1JJRExJTkVTRzYnLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSUpX1ZJU0lCTEVHNiMiIiEtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKkxJTkVTVFlMRUc2IyIiIS0lKlRISUNLTkVTU0c2IyIiIS0lLVRSQU5TUEFSRU5DWUc2IyQiIiEhIiItJStBWEVTTEFCRUxTRzYkUSE2IlEhNiItJSlfVklTSUJMRUc2IyIiIi0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJF0iISIiLSUpQk9VTkRTX1lHNiMkIiNdISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlZ1AhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlK04hIiItJSlDSElMRFJFTkc2Ii0lK0FOTk9UQVRJT05HNictJSlCT1VORFNfWEc2IyQiIiEhIiItJSlCT1VORFNfWUc2IyQiIiEhIiItJS1CT1VORFNfV0lEVEhHNiMkIiUrUyEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiUrUyEiIi0lKUNISUxEUkVORzYiRzYi LUknTWF0cml4RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMvSSQlaWRHRiciNWVEKGVqPVgpb1c9 KigsOi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjIiIjISIiLUYlNiMjIiIlIiIkRiwtRiU2IywkKiZGLyIiIkkndGhldGF8aXJHRilGLEYsRjYtRiU2IywkKigjRitGMUY2LCZGN0Y2RjZGLEY2RjdGLEY2RjYtRiU2IywkKihGPEY2LCZGN0Y2RitGLEY2RjdGLEY2RjYtRiU2IywkKihGPEY2LCZGN0Y2RjFGLEY2RjdGLEY2RiwtRiU2IywkKihGPEY2LCYqJkYrRjZGN0Y2RjZGNkYsRjZGN0YsRjZGNi1GJTYjLCQqKEYvRjZGPUY2RjdGLEY2RjYtRiU2IywkKihGPEY2LCZGTUY2RjFGLEY2RjdGLEY2RiwtRiU2IywkKihGPEY2LCYqJkYxRjZGN0Y2RjZGK0YsRjZGN0YsRjZGNi1GJTYjRjxGLEY2RixGNi1GJTYjRixGNiwqKiZGK0Y2LUYlNiMsJComRjxGNkY3RixGLEY2RjYqJkYwRjZGMkY2RjYqJkYrRjYtRiU2IywkKiZGK0Y2RjdGLEYsRjZGLEYwRixGLA== UWRwPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT02Ig== Warning, solve may be ignoring assumptions on the input variables. LCQqKiIiJCIiIi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjISIjRiUsanJGJSEiIiomIyIjO0YkRiUtRic2IywkKigjIiIjRiRGJSwmKiYiIiVGJUkndGhldGF8aXJHRitGJUYlRiRGL0YlRjxGL0YlRiVGJSomI0Y7RiRGJS1GJzYjLCQqKEY3RiUsJiomIiImRiVGPEYlRiVGJUYvRiVGPEYvRiVGJUYlKiZGJEYlLUYnNiMsJCooRj5GJSwmKiZGJEYlRjxGJUYlRiVGL0YlRjxGL0YlRiVGJSomRjtGJS1GJzYjLCQqKEY3RiUsJkZERiVGJEYvRiVGPEYvRiVGJUYvKiZGN0YlLUYnNiMsJCooRjdGJSwmRkRGJSIiKUYvRiVGPEYvRiVGJUYlKiYjRllGJEYlLUYnNiMsJCooRjdGJSwmRkRGJSIiJ0YvRiVGPEYvRiVGJUYvKiZGN0YlLUYnNiMsJCooRjdGJSwmRllGL0ZMRiVGJUY8Ri9GJUYlRi8qJkZlbkYlLUYnNiMsJCooRjdGJSwmRkRGJUY4Ri9GJUY8Ri9GJUYlRi8qJkY7RiUtRic2IywkKihGN0YlLCZGREYlRjtGL0YlRjxGL0YlRiVGJSomI0YlRiRGJS1GJzYjLCQqKEZlbkYlLCZGPEYlRjhGL0YlRjxGL0YlRiVGLyomI0ZFRiRGJS1GJzYjLCQqKEY3RiUsJkY6RiVGJUYvRiVGPEYvRiVGJUYvKiZGX3BGJS1GJzYjLCQqKEY3RiUsJkY6RiUiIipGL0YlRjxGL0YlRiVGLyomRl9wRiUtRic2IywkKihGN0YlLCYqJkZbb0YlRjxGJUYlIiIoRi9GJUY8Ri9GJUYlRi8qJkZlbkYlLUYnNiMsJCooRjdGJSwmRjpGJUZqcUYvRiVGPEYvRiVGJUYlKiZGX3BGJS1GJzYjLCQqKEY3RiUsJiomRjhGJUY8RiVGJUZicUYvRiVGPEYvRiVGJUYvKiZGPkYlLUYnNiMsJCooRjdGJSwmRkRGJUZqcUYvRiVGPEYvRiVGJUYvKiZGX3BGJS1GJzYjLCQqKEY3RiUsJkZpcUYlRiVGL0YlRjxGL0YlRiVGJS1GJzYjLCQqKEY3RiUsJkZpcUYlRkVGL0YlRjxGL0YlRiUqJkZbb0YlLUYnNiMsJCooRjdGJSwmRjpGJUZFRi9GJUY8Ri9GJUYlRi8qJkY7RiUtRic2IywkKigjIiM1RiRGJSwmRjxGJUYlRi9GJUY8Ri9GJUYlRiUqJkY3RiUtRic2I0ZkdEYlRiUqJkZfcEYlLUYnNiMsJCooRj5GJSwmRjxGJUY7Ri9GJUY8Ri9GJUYlRi8qJkY3RiUtRic2IywkKihGN0YlLCZGPEYlRllGL0YlRjxGL0YlRiVGJSomRjhGJS1GJzYjLCQqKEY3RiUsJkZMRiVGanFGL0YlRjxGL0YlRiVGLyomRmVuRiUtRic2IywkKihGN0YlLCZGZ3JGJUZqcUYvRiVGPEYvRiVGJUYlKiZGPkYlLUYnNiMsJCooRjdGJSwmRjxGJUZqcUYvRiVGPEYvRiVGJUYvKiZGOEYlLUYnNiMsJCooRjdGJSwmRkxGJUY7Ri9GJUY8Ri9GJUYlRiUqJkY4RiUtRic2IywkKihGN0YlLCZGTEYlRkVGL0YlRjxGL0YlRiVGJSomRjtGJS1GJzYjLCQqKEY3RiVGX3VGJUY8Ri9GJUYlRiUqJkZbb0YlLUYnNiMsJCooRjdGJSwmRmdyRiVGRUYvRiVGPEYvRiVGJUYvKiZGO0YlLUYnNiMsJCooRjdGJSwmRjxGJUZFRi9GJUY8Ri9GJUYlRiUqJkZlbkYlLUYnNiMsJCooRjdGJSwmRjxGJUZbb0YvRiVGPEYvRiVGJUYvLUYnNiMqJiwmRjpGJUY4Ri9GJUY8Ri9GLy1GJzYjKiYsJkY6RiVGO0YvRiVGPEYvRiUqJkY3RiUtRic2IyomLCZGZ3JGJUY4Ri9GJUY8Ri9GJUYvKiZGN0YlLUYnNiMqJiwmRmdyRiVGO0YvRiVGPEYvRiVGJSomRl9wRiUtRic2I0ZlbkYlRi8tRic2I0Y7Ri8qJkY+RiUtRic2IywkKihGPkYlLCZGPEYlRiRGL0YlRjxGL0YlRiVGJSomRjhGJS1GJzYjLCQqKEY+RiVGZHBGJUY8Ri9GJUYlRi8qJkYkRiUtRic2IywkKihGPkYlLCZGTEYlRjhGL0YlRjxGL0YlRiVGLyomRj5GJS1GJzYjLCQqKEY+RiUsJkZnckYlRiRGL0YlRjxGL0YlRiVGJSomRjhGJS1GJzYjLCQqKEZlbkYlRmZ0RiVGPEYvRiVGJUYvKiZGPkYlLUYnNiMsJCooRj5GJSwmRmdyRiVGJUYvRiVGPEYvRiVGJUYlKiZGN0YlLUYnNiMqJiwmRmdyRiVGW29GL0YlRjxGL0YlRiUqJkZkdEYlLUYnNiMsJCooRjdGJUZiW2xGJUY8Ri9GJUYlRi8qJkZmcEYlLUYnNiMsJCooRjdGJUZjXGxGJUY8Ri9GJUYlRi8qJkY+RiUtRic2IywkKihGPkYlRmZ0RiVGPEYvRiVGJUYlKiZGMUYlLUYnNiMsJCooRjdGJUZoW2xGJUY8Ri9GJUYlRiUqJkZlbkYlLUYnNiMsJCooRjdGJUZkcEYlRjxGL0YlRiVGLyomRjtGJS1GJzYjLCQqKEY3RiVGZ3pGJUY8Ri9GJUYlRi8qJkY+RiUtRic2IywkKihGN0YlRmZ0RiVGPEYvRiVGJUYlKiZGN0YlLUYnNiNGN0YlRiUtRic2IywkKiZGZHRGJUY8Ri9GL0YlKiZGJEYlLUYnNiMsJComRmVuRiVGPEYvRi9GJUYvKiZGX3BGJS1GJzYjLCQqJiMiIzlGJEYlRjxGL0YvRiVGLyomRl9wRiUtRic2I0Y+RiVGLyomRj5GJS1GJzYjRjhGJUYlLUYnNiMsJComRjtGJUY8Ri9GL0YlKiZGJEYlLUYnNiMsJComRj5GJUY8Ri9GL0YlRiUtRic2IywkKiZGOEYlRjxGL0YvRi8qJkZfcEYlLUYnNiMsJComRjdGJUY8Ri9GL0YlRiVGJSw2RjJGLyomRllGJS1GJzYjLCQqJkZbb0YlRjxGL0YvRiVGJSomRjJGJS1GJzYjLCQqJkYxRiVGPEYvRi9GJUYvKiYiI1tGJUZfX2xGJUYlKiYiIycqRiVGZF9sRiVGLyomIiNLRiVGaV9sRiVGLyomIiNrRiVGZWBsRiVGJSomRmlibEYlRmpgbEYlRiUqJkZnYmxGJUZeYWxGJUYvKiZGWUYlRmNhbEYlRiVGL0Yl UWRwPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT02Ig== NiotJSdDVVJWRVNHNiQ3aWluNyQkIiIiISIjJCIxVih5M1JIaXQmISNUNyQkIilNRVk/ISIqJCIxTW4pUUonRz4oKSEjRjckJCIqZjZtJkghIzUkIjFpZlkqM0JFXCohI0I3JCQiKk0kUiEpUiEjNSQiMVk/YHltPkg8ISM/NyQkIipPeGNcJSEjNSQiMFAsdXU0S0MqISM+NyQkIipRaDQsJiEjNSQiMlB1LjdsKFI9TSEjPzckJCIrWGp6QmIhIzYkIjEyR2AqKj5AdScqISM+NyQkIipKSm0uJyEjNSQiMTInZU1wJkhlQSEjPTckJCIqamV2KXAhIzUkIjBbMVsxSV9kKCEjPDckJCIqeik9c3ohIzUkIjBzZ2wnKSpRISo9ISM7NyQkIipyJVwhKiopISM1JCIxZV0qR281MSRRISM8NyQkIisiXGAwKyIhIzUkIjFUbGQoUT1pYichIzw3JCQiK19HJ1w1IiEjNSQiMVZgJSkpMypRMjUhIzs3JCQiK3VtI3A+IiEjNSQiMipwJkg5eXZATyIhIzw3JCQiK2NoWCs4ISM1JCIyQy0ncCZRVkR6IiEjPDckJCIqdTVXUyIhIiokIjFuZlFPKGZ4QiMhIzs3JCQiK1ctZi86ISM1JCIxJHp2YSh6UWlFISM7NyQkIitKR2MmZiIhIzUkIjImWypvalxSSy4kISM8NyQkIitPIVFQcSIhIzUkIjJYLG8jUWVxWE0hIzw3JCQiK0NtUCZ6IiEjNSQiMDwiKSlSZTBsUCEjOjckJCIrKDN1PiE+ISM1JCIyREgjKjNjOXY0JSEjPDckJCIrLzRMJyo+ISM1JCIyKFxWTUpuK2JWISM8NyQkIisoR2IpKjQjISM1JCIwJXk4P0VVKGYlISM6NyQkIisiKVxWKT4jISM1JCIxJ1sjSFNfNiF6JSEjOzckJCIqYiNILEIhIiokIjFmKVFnQSNHYFwhIzs3JCQiKzJ6dSZSIyEjNSQiMThxRCQ0KzYyJiEjOzckJCIqeEl3XCMhIiokIjFHT1RtcVBtXiEjOzckJCIrSiVlTWcjISM1JCIxY2ZHTXBUTF8hIzs3JCQiK0A8ZSZwIyEjNSQiMXdJJyo0WCJ5RSYhIzs3JCQiLCZmJkhgdSMhIzYkIjF4MTtiSyJ6RiYhIzs3JCQiKylSeF16IyEjNSQiMUslWyMpKikpWyNHJiEjOzckJCIrJHlyayVHISM1JCIwKD5BbFR2IkcmISM6NyQkIitvaCd5KkchIzUkIjE3biYpb2shZUYmISM7NyQkIitaYjlbSCEjNSQiMSRvMmFsZ19FJiEjOzckJCIrRVxVKSpIISM1JCIxOldyJzNTLkQmISM7NyQkIismcD9kNCQhIzUkIjEqNCEpcGAtLEAmISM7NyQkIitlNXYuSyEjNSQiMEslZiMqMyYpXF4hIzo3JCQiK1c2IzNJJCEjNSQiMUJOTHdkbiQzJiEjOzckJCIqPWtXUyQhIiokIjEvPVp5M0stXSEjOzckJCIrdixRKVwkISM1JCIxX25vPSkpXD9cISM7NyQkIitrXjAsTyEjNSQiMSYqb1tGU21CWyEjOzckJCIrRlZtKHAkISM1JCIwJlsjNEgtbnMlISM6NyQkIitSKFsnKXokISM1JCIydCZ5KzpuVD9ZISM8NyQkIipZenQqUSEiKiQiMk0hRzhoUWc3WCEjPDckJCIrdjh1K1MhIzUkIjFrcFFsZmAnUiUhIzs3JCQiKyU9IkgrVCEjNSQiMk9bU00oZVcjRyUhIzw3JCQiK1VfNC1VISM1JCIyVkNLeEVXVDslISM8NyQkIis2ajAuViEjNSQiMTZ1SSE+NGUvJSEjOzckJCIrWyFIZVIlISM1JCIxblIhNCM0a09SISM7NyQkIit1cTotWCEjNSQiMjpGNStSIVw2USEjPDckJCIrRyJlc2YlISM1JCIxYTdKKVIiKikqcCQhIzs3JCQiKyhvYicpcCUhIzUkIjFaVidvZiJmImUkISM7NyQkIisqMzFkeiUhIzUkIjFLLkApRypIcE0hIzs3JCQiKykzb00hXCEjNSQiMSlmJmYleWdmTSQhIzs3JCQiK2g/eScqXCEjNSQiMUsnUms/KFxTSyEjOzckJCIrYlVwLV4hIzUkIjFSbDxodFtBSiEjOzckJCIrQTxBKj4mISM1JCIxYWxZKnpSbSwkISM7NyQkIissdyFbSSYhIzUkIjI5LW5hL15HIUghIzw3JCQiK2UuImZSJiEjNSQiMjF3ZWZnRWshRyEjPDckJCIra2RtKlwmISM1JCIxMycqNG4kbycpcCMhIzs3JCQiK2skKSkpKmYmISM1JCIyTThSTSIpPW5mIyEjPDckJCIrIlxYK3EmISM1JCIyMi1XKipbISlwXCMhIzw3JCQiK2VUJCkqeiYhIzUkIjFiJCpvOzd4KlIjISM7NyQkIitGKSpwJiplISM1JCIxWlYvKFFMJTNCISM7NyQkIithSkwqKmYhIzUkIjEyWTouTCc+QCMhIzs3JCQiK0hLNSk0JyEjNSQiMipSJSl6cFNAQUAhIzw3JCQiKyMzYT8/JyEjNSQiMi1gJXlzPTFJPyEjPDckJCIrT1k6J0gnISM1JCIybDhFQWZuJ1s+ISM8NyQkIitrTDorayEjNSQiMjlXWGI8SjQnPSEjPDckJCIrQmd3KlwnISM1JCIyeEsocCU+YyF6PCEjPDckJCIrQWk4KmYnISM1JCIyLUUlW2IqZiUqcCIhIzw3JCQiKnlHSHEnISIqJCIyY2V3aD0xJj07ISM8NyQkIis6Yl8peichIzUkIjFKQilcInopZWEiISM7NyQkIitbJ0hrKm8hIzUkIjJYWikqeWY5TVoiISM8NyQkIitXdV8vcSEjNSQiMkE2d3c6JWUmUiIhIzw3JCQiK1c2Uy1yISM1JCIyJyp6RW14Y3FLIiEjPDckJCIrTmBcLXMhIzUkIjJlJFEmKikqRyUpZTchIzw3JCQiK1wmKUcvdCEjNSQiMSpbLVokb08iPiIhIzs3JCQiK0BqJnlSKCEjNSQiMilmSHJMQSo0OCIhIzw3JCQiK09sZihcKCEjNSQiMkUiUm95WkxvNSEjPDckJCIrQXZkJ2YoISM1JCIyPClvWkkmW3krIiEjPDckJCIqVGNDcSghIiokIjF4KVJociVwXCUqISM8NyQkIitVKiopZXooISM1JCIxcy90em0yNSopISM8NyQkIitVR3AueiEjNSQiMTJDaVI7ei8kKSEjPDckJCIrW20oNCspISM1JCIxI28hPVpYNHV4ISM8NyQkIisqKVFCKDQpISM1JCIxaU5bWnY2anMhIzw3JCQiK1k4dSsjKSEjNSQiMWRURkF6IipHbiEjPDckJCIrN3ZtLyQpISM1JCIxb3NMIj5YITNpISM8NyQkIitOXEEqUikhIzUkIjBZdThJW3N1JiEjOzckJCIrPTJrKlwpISM1JCIxWlR3ajJBcl8hIzw3JCQiKzNuaihmKSEjNSQiMU9HZ0slUiY+WyEjPDckJCIrJlJsUXEpISM1JCIxNz1uMSN5UU0lISM8NyQkIitXRnkmeikhIzUkIjJYPFdUKVtxVlIhIz03JCQiK2hKTiwqKSEjNSQiMVs/JTQjPXknXCQhIzw3JCQiKy5cZishKiEjNSQiMjlCMEdYI28pMyQhIz03JCQiK3kheSkpNCohIzUkIjFPTCFlRyNwJnAjISM8NyQkIitRJVJzPiohIzUkIjJ2W1tJVTNLSiMhIz03JCQiKyp6aHZIKiEjNSQiMG8vbSxRUiQ+ISM7NyQkIitAPSFSUyohIzUkIjIoUnFZLmhfVjohIz03JCQiKzNfUywmKiEjNSQiMkZhLEJ6YWQ+IiEjPTckJCIrck5sKGYqISM1JCIxKT0/O2p4dmgpISM9NyQkIisoW1QwcSohIzUkIjE+QzEicCtsOSYhIz03JCQiK0RhPy4pKiEjNSQiMXUjZTk+UUJ5IiEjPTckJCIrMUNOJiopKiEjNSQhMVckUiopKmYwYjYhIz03JCQiKzoyWCs1ISIqJCExOXg/a1smcGAlISM9NyQkIix5RiVlNDUhIzUkITJiY3QpRyZRd0coISM+NyQkIixhK24tLSIhIzUkITIwMU4kNFxnVDUhIz03JCQiK01FWUk1ISIqJCEyMlIpeUBJXUo4ISM9NyQkIixmNm0mUjUhIzUkITJYJnA5MnlRJGUiISM9NyQkIixNJFIhKVw1ISM1JCEydDNBSExMIWY9ISM9NyQkIixRaDQsMSIhIzUkITF5MTNtNWVHQCEjPDckJCIsSkptLjIiISM1JCEyR1R0LT4jPSpRIyEjPTckJCIsamV2KXo1ISM1JCExVl1xYlg6Q0UhIzw3JCQiLHopPXMqMyIhIzUkITJZIlJGaTkiNCdHISM9NyQkIixyJVwhKio0IiEjNSQhMmE0OURGZCopNCQhIz03JCQiLCJcYDA1NiEjNSQhMjs9eiRRW2FITCEjPTckJCIsX0cnXD82ISM1JCExN1A0I1xmKmZOISM8NyQkIix1bSNwSDYhIzUkITFwY0EpKXpQZFAhIzw3JCQiLGNoWCs5IiEjNSQhMTdlNUkkKmZ0UiEjPDckJCIrdTVXXTYhIiokITEwcD9QbFklPSUhIzw3JCQiLFctZi87IiEjNSQhMVA1Pm1yIz5RJSEjPDckJCIsSkdjJnA2ISM1JCExPEojXGUmW2NYISM8NyQkIixPIVFQIT0iISM1JCExZmpiYl9LZVohIzw3JCQiLENtUCYqPSIhIzUkITE+R0diR2RDXCEjPDckJCIsKDN1Pis3ISM1JCExRiJ6VChlazdeISM8NyQkIiwvNEwnNDchIzUkITEjZkJbeSRbdV8hIzw3JCQiLChHYikqPjchIzUkITEtKCpmQFU8WmEhIzw3JCQiLCIpXFYpSDchIzUkITFYZDtscysyYyEjPDckJCIrYiNILEMiISIqJCExJT4zIXBsNnBkISM8NyQkIiwyenUmXDchIzUkITJYcikpSDkwUiJmISM9NyQkIit4SXdmNyEiKiQhMXlKY1w0I2UxJyEjPDckJCIsSiVlTXE3ISM1JCEwX1cvcm4hPmkhIzs3JCQiLEA8ZSZ6NyEjNSQhMSlcO0pRJ3pbaiEjPDckJCIsKVJ4XSpHIiEjNSQhMSxOQE0qcF5bJyEjPDckJCIsb2gneSpIIiEjNSQhMXpFJikqcCozQW0hIzw3JCQiLEVcVSk0OCEjNSQhMWonKSpHT1ZBdichIzw3JCQiLCZwP2Q+OCEjNSQhMWBOPCN5J3B1byEjPDckJCIsZTV2LkwiISM1JCExIlEnWz1PdzFxISM8NyQkIixXNiMzUzghIzUkITF4JHliRUc/NyghIzw3JCQiKz1rV104ISIqJCExJlt6SGBSO0MoISM8NyQkIix2LFEpZjghIzUkITFgOGRvNy1adCEjPDckJCIsa14wLFAiISM1JCExIzNGR0hdIWZ1ISM8NyQkIixGVm0oejghIzUkITFsKypmTDA6YyghIzw3JCQiLFIoWycpKlEiISM1JCEwTkApSCM9Y20oISM7NyQkIitZenQqUiIhIiokITFiXl9sdWBreCEjPDckJCIsdjh1K1QiISM1JCExJHBcKWVwOGx5ISM8NyQkIiwlPSJIK1UiISM1JCExWmlpWSZSI2Z6ISM8NyQkIixVXzQtViIhIzUkITE4KXpdRz9GMCkhIzw3JCQiLDZqMC5XIiEjNSQhMUxlQHYsdlUiKSEjPDckJCIsWyFIZVw5ISM1JCExI1xNPVspPUIjKSEjPDckJCIsdXE6LVkiISM1JCExTl5zV0d2NyQpISM8NyQkIixHImVzcDkhIzUkITEnKVJXJ2ZWMFIpISM8NyQkIiwob2InKXo5ISM1JCExQ1MmSC9RNlopISM8NyQkIiwqMzFkKlsiISM1JCExNj8+JDNtZ2EpISM8NyQkIiwpM29NKzohIzUkITEkKj5AX216RScpISM8NyQkIixoP3knNDohIzUkITEqcCNmNiRmWXApISM8NyQkIixiVXAtXyIhIzUkITAkPSpcYlglcCgpISM7NyQkIixBPEEqSDohIzUkITEwNl55VWVOKSkhIzw3JCQiLCx3IVtTOiEjNSQhMSk+Mk5cIXkwKikhIzw3JCQiLGUuImZcOiEjNSQhMFpSV0MpZWsqKSEjOzckJCIsa2RtKmY6ISM1JCExeFkjKjQlRydIISohIzw3JCQiLGskKSkpKnA6ISM1JCExQy5WSmhhITQqISM8NyQkIiwiXFgrIWUiISM1JCExX3BnSiEqZlwiKiEjPDckJCIsZVQkKSoqZSIhIzUkITEqR0AvMm1tPyohIzw3JCQiLEYpKnAmKmYiISM1JCExJSkzKUhEbylmIyohIzw3JCQiLGFKTCo0OyEjNSQhMXVtNnIoUWNKKiEjPDckJCIsSEs1KT47ISM1JCExOzI+NSNcck8qISM8NyQkIiwjM2E/STshIzUkITFpY1YwUm4+JSohIzw3JCQiLE9ZOidSOyEjNSQhMWowJlxzbGRZKiEjPDckJCIsa0w6K2wiISM1JCExJVJkQiVwODomKiEjPDckJCIsQmd3KmY7ISM1JCExN2I7NCY+NGMqISM8NyQkIixBaTgqcDshIzUkITFtKFsueGVeZyohIzw3JCQiK3lHSCFvIiEiKiQhMSZ5ayJceigpXCcqISM8NyQkIiw6Yl8pKm8iISM1JCExR1tkc0p2Km8qISM8NyQkIixbJ0hrKnAiISM1JCExKVxmVSd6SkgoKiEjPDckJCIsV3VfL3IiISM1JCExY0okKVxIYXIoKiEjPDckJCIsVzZTLXMiISM1JCEwIik0KD1nWzMpKiEjOzckJCIsTmBcLXQiISM1JCEwJlJ5UUUuWCkqISM7NyQkIixcJilHL3UiISM1JCEwTll5W100KSkqISM7NyQkIixAaiZ5XDwhIzUkITEqPWV5aSIpRyIqKiEjPDckJCIsT2xmKGY8ISM1JCExJEduKXBHIWUlKiohIzw3JCQiLEF2ZCdwPCEjNSQhMUclUUhtaHQoKiohIzw3JCQiK1RjQyF5IiEiKiQhMltcUzFSIyo0KyIhIzw3JCQiLFUqKillKnkiISM1JCEyTjpCOG5sUCsiISM8NyQkIixVR3AuIT0hIzUkITI+OSdvSTsmbysiISM8NyQkIixbbSg0NT0hIzUkITIpW0csKkhNJjQ1ISM8NyQkIiwqKVFCKD49ISM1JCEyVlxwJm9iNDc1ISM8NyQkIixZOHUrJD0hIzUkITJ3KEgvKiopW1osIiEjPDckJCIsN3ZtLyU9ISM1JCEyKVwpNCRwLko8NSEjPDckJCIsTlxBKlw9ISM1JCEyeU80KnBQYj41ISM8NyQkIiw9MmsqZj0hIzUkITIiPmc1OHUlPS0iISM8NyQkIiwzbmoocD0hIzUkITJSdVIoMygqKlItIiEjPDckJCIsJlJsUSEpPSEjNSQhMlp5QC82UmktIiEjPDckJCIsV0Z5JiopPSEjNSQhMiVIQkQqKioqNEc1ISM8NyQkIixoSk4sIT4hIzUkITIleVpVKFteLC4iISM8NyQkIiwuXGYrIj4hIzUkITJbej9ySSkqPi4iISM8NyQkIix5IXkpKT4+ISM1JCEyI3knb1Q5XlAuIiEjPDckJCIsUSVSc0g+ISM1JCEybVsqZSlHSmEuIiEjPDckJCIsKnpodlI+ISM1JCEyODx1ZFBxcS4iISM8NyQkIixAPSFSXT4hIzUkITJPZiE9aXZzUTUhIzw3JCQiLDNfUywnPiEjNSQhMiMpM2RCQncsLyIhIzw3JCQiLHJObChwPiEjNSQhMm9aJWYjUlQ6LyIhIzw3JCQiLChbVDAhKT4hIzUkITElZWJyN0pILyIhIzs3JCQiLERhPy4qPiEjNSQhMlldRU8meUNXNSEjPDckJCIsMUNOJioqPiEjNSQhMmRnNGticmAvIiEjPDckJCIrOjJYNT8hIiokITI4IWV3Kj5MbS8iISM8NyQkIix5RiVlPj8hIzUkITJOdXlcS0t3LyIhIzw3JCQiLGErbi0uIyEjNSQhMmhKIz4wcnRbNSEjPDckJCIrTUVZUz8hIiokITJHLU5rJilHKFw1ISM8NyQkIixmNm0mXD8hIzUkITJVSmVhKFFjXTUhIzw3JCQiLE0kUiEpZj8hIzUkITJ1QjNaTVo5MCIhIzw3JCQiLFFoNCwyIyEjNSQhMj08T1dneUEwIiEjPDckJCIsSkptLjMjISM1JCEyKClSTUdZXEkwIiEjPDckJCIsamV2KSozIyEjNSQhMm1EeCg+XXJgNSEjPDckJCIseik9cyo0IyEjNSQhMmVicV9dYlYwIiEjPDckJCIsciVcISo0QCEjNSQhMkdWazQtblwwIiEjPDckJCIsIlxgMD9AISM1JCEyQ0xQZElFYjAiISM8NyQkIixfRydcSUAhIzUkITJQI2U3IlxdZzAiISM8NyQkIix1bSNwUkAhIzUkITJWJmVRaC1aYzUhIzw3JCQiLGNoWCs6IyEjNSQhMk94T3cjcCpvMCIhIzw3JCQiK3U1V2dAISIqJCEyc0lSbWR4czAiISM8NyQkIixXLWYvPCMhIzUkITIoKW9rcj4rdzAiISM8NyQkIixKR2MmekAhIzUkITJFaytGV2N5MCIhIzw3JCQiLE8hUVAhPiMhIzUkITIiZixtM242ZTUhIzw3JCQiLENtUCYqPiMhIzUkITInUjpPdy1JZTUhIzw3JCQiLCgzdT41QSEjNSQhMkVJUCRHQVplNSEjPDckJCIsLzRMJz5BISM1JCEyQHNwYCh6ZWU1ISM8NyQkIiwoR2IpKkhBISM1JCEyIilwIypIXncnZTUhIzw3JCQiLCIpXFYpUkEhIzUkITIiKUcoZSdHQyhlNSEjPDckJCIrYiNILEQjISIqJCEyNCJbQ1VxdGU1ISM8NyQkIiwyenUmZkEhIzUkITJHKj5zaWhyZTUhIzw3JCQiK3hJd3BBISIqJCEydEBFZ1pmJ2U1ISM8NyQkIixKJWVNIUcjISM1JCEyJXpdaE9SY2U1ISM8NyQkIixAPGUmKkcjISM1JCExNG9ocTVYZTUhIzs3JCQiLClSeF0qSCMhIzUkITIuOF1fJSkpSGU1ISM8NyQkIixvaCd5NEIhIzUkITJNdCIpKW8jNCJlNSEjPDckJCIsRVxVKT5CISM1JCExQFQ0InkjKnkwIiEjOzckJCIsJnA/ZEhCISM1JCEyYT9pJSp6YXcwIiEjPDckJCIsZTV2Lk0jISM1JCEySk5gKClbZXQwIiEjPDckJCIsVzYjM11CISM1JCEyKTRrcE9UMWQ1ISM8NyQkIis9a1dnQiEiKiQhMlRSMzA/QG4wIiEjPDckJCIsdixRKXBCISM1JCEyOSV5USdbJlFjNSEjPDckJCIsa14wLFEjISM1JCEydTNjcCU+KmYwIiEjPDckJCIsRlZtKCpRIyEjNSQhMjxCLDgmcGZiNSEjPDckJCIsUihbJykqUiMhIzUkITI5YksmbyFmXjAiISM8NyQkIitZenQ0QyEiKiQhMk9rRFEkb3FhNSEjPDckJCIsdjh1K1UjISM1JCEyeSMqb0RXM1UwIiEjPDckJCIsJT0iSCtWIyEjNSQhMjpHSSYpKVtxYDUhIzw3JCQiLFVfNC1XIyEjNSQhMjtAV3ZobUowIiEjPDckJCIsNmowLlgjISM1JCEyKHBkSSEzNUUwIiEjPDckJCIsWyFIZWZDISM1JCExa1AlKio+ej8wIiEjOzckJCIsdXE6LVojISM1JCEyUChRUmIkWzkwIiEjPDckJCIsRyJlc3pDISM1JCEyKlt1OktWJzMwIiEjPDckJCIsKG9iJykqWyMhIzUkITJhamEqZTpBXTUhIzw3JCQiLCozMWQqXCMhIzUkITFlNk4pUShlXDUhIzs3JCQiLCkzb001RCEjNSQhMlg6InlPPycpWzUhIzw3JCQiLGg/eSc+RCEjNSQhMidlITR1TjsjWzUhIzw3JCQiLGJVcC1gIyEjNSQhMkJzYCJHVVlaNSEjPDckJCIsQTxBKlJEISM1JCEyPV8wJD44d1k1ISM8NyQkIiwsdyFbXUQhIzUkITJgQVVXKlEoZi8iISM8NyQkIixlLiJmZkQhIzUkITJRJm9zdCN6Xy8iISM8NyQkIixrZG0qcEQhIzUkITIkUmQkZldyVy8iISM8NyQkIixrJCkpKSp6RCEjNSQhMHAhZjVZblY1ISM6NyQkIiwiXFgrIWYjISM1JCEwJlI6KltpRy8iISM6NyQkIixlVCQpKipmIyEjNSQhMmk3IXBIIVE/LyIhIzw3JCQiLEYpKnAmNEUhIzUkITI5NXl1Iz5CVDUhIzw3JCQiLGFKTCo+RSEjNSQhMmhRPT9TWC4vIiEjPDckJCIsSEs1KUhFISM1JCEyQDYiR0xpW1I1ISM8NyQkIiwjM2E/U0UhIzUkITFzNEVtdGNRNSEjOzckJCIsT1k6J1xFISM1JCExPmxoXkhzUDUhIzs3JCQiLGtMOittIyEjNSQhMls5aS43d24uIiEjPDckJCIsQmd3KnBFISM1JCEyQiMpW048Y2UuIiEjPDckJCIsQWk4KnpFISM1JCEyIlFnJEcyRVwuIiEjPDckJCIreUdIIXAjISIqJCEyLzheSnFUUi4iISM8NyQkIiw6Yl8pKnAjISM1JCEyRjo2N3NCSS4iISM8NyQkIixbJ0hrNEYhIzUkITInPlJ3KGZzPy4iISM8NyQkIixXdV8vcyMhIzUkITIuXlgobyk0NS4iISM8NyQkIixXNlMtdCMhIzUkITJpPCkqKXBsLkk1ISM8NyQkIixOYFwtdSMhIzUkITFjRUIlZUkhSDUhIzs3JCQiLFwmKUcvdiMhIzUkITJAIkhgN28qei0iISM8NyQkIixAaiZ5ZkYhIzUkITJSO19rSFBxLSIhIzw3JCQiLE9sZihwRiEjNSQhMnY7bD8mXCtFNSEjPDckJCIsQXZkJ3pGISM1JCEyc2dkXio0KFwtIiEjPDckJCIrVGNDIXojISIqJCExIjRdTCNbJlEtIiEjOzckJCIsVSoqKWUqeiMhIzUkITJaL0c9T2hHLSIhIzw3JCQiLFVHcC4iRyEjNSQhMndkSCtdMDwtIiEjPDckJCIsW20oND9HISM1JCEyJCl5MkgjUWw/NSEjPDckJCIsKilRQihIRyEjNSQhMloxXVRWMCc+NSEjPDckJCIsWTh1KyVHISM1JCEyMjIhZVwncCU9NSEjPDckJCIsN3ZtLyZHISM1JCEyZk5fJkgySzw1ISM8NyQkIixOXEEqZkchIzUkITJAallvOm9pLCIhIzw3JCQiLD0yaypwRyEjNSQhMUMzQFlJOTo1ISM7NyQkIiwzbmooekchIzUkITIlNHopZSh6Ljk1ISM8NyQkIiwmUmxRISpHISM1JCEyNF0mKW9TS0csIiEjPDckJCIsV0Z5JioqRyEjNSQhMjBwIWYxSXk2NSEjPDckJCIsaEpOLCJIISM1JCExUVlGInpxMCwiISM7NyQkIiwuXGYrI0ghIzUkITJmQ11fbkMlNDUhIzw3JCQiLHkheSkpSEghIzUkITIlKVxzRWEkRzM1ISM8NyQkIixRJVJzUkghIzUkITJuQTZxaE5yKyIhIzw3JCQiLCp6aHZcSCEjNSQhMjpNJzRBKmVmKyIhIzw3JCQiLEA9IVJnSCEjNSQhMik+U2xmYHEvNSEjPDckJCIsM19TLChIISM1JCExLWhuZS9iLjUhIzs3JCQiLHJObCh6SCEjNSQhMTNaOzxhUy01ISM7NyQkIiwoW1QwISpIISM1JCEyUFFTeTB3NisiISM8NyQkIixEYT8uKyQhIzUkITFycikqPTFXKioqKiEjPDckJCIsMUNOJjRJISM1JCExXmdtdCpRJCkpKiohIzw3JCQiKzoyWD9JISIqJCExT1ZtKVtPXigqKiEjPDckJCIseUYlZUhJISM1JCExTyJSQ1xaUycqKiEjPDckJCIsYStuLS8kISM1JCExbmFnSDUuXioqISM8NyQkIitNRVldSSEiKiQhMSNRO3d3aSZRKiohIzw3JCQiLGY2bSZmSSEjNSQhMW92TiEpUlJGKiohIzw3JCQiLE0kUiEpcEkhIzUkITFlX2QrVXo5KiohIzw3JCQiLFFoNCwzJCEjNSQhMWNoY00uMi0qKiEjPDckJCIsSkptLjQkISM1JCExSD5dOiFvJCopKSohIzw3JCQiLGpldikqNCQhIzUkITFQcikzInpieCkqISM8NyQkIix6KT1zNEohIzUkITE7N2ZzbEhsKSohIzw3JCQiLHIlXCEqPkohIzUkITEkUl0kPkFlXykqISM8NyQkIiwiXGAwSUohIzUkITFubGQpKWUoKVIpKiEjPDckJCIsX0cnXFNKISM1JCExPSMpeTNKeEUpKiEjPDckJCIsdW0jcFxKISM1JCExb1I1VGQ/OikqISM8NyQkIixjaFgrOyQhIzUkITBNbCgpPmJAISkqISM7NyQkIit1NVdxSiEiKiQhMCZHOUI/LSp5KiEjOzckJCIsVy1mLz0kISM1JCExT21zQyVSangqISM8NyQkIixKR2MmKj0kISM1JCExaVF6YDQhW3cqISM8NyQkIixPIVFQK0shIzUkITEneiVwJD1iNXYqISM8NyQkIixDbVAmNEshIzUkITEyJG8nZitSUigqISM8NyQkIiwoM3U+P0shIzUkITFWVzdRISl6RCgqISM8NyQkIiwvNEwnSEshIzUkITEwaCpRT1pQciohIzw3JCQiLChHYikqUkshIzUkITFqPCE0ImZdKygqISM8NyQkIiwiKVxWKVxLISM1JCExUjpCdiV5eW8qISM8NyQkIitiI0gsRSQhIiokITEtPWwuXG91JyohIzw3JCQiLDJ6dSZwSyEjNSQhMUJsZjNPYmknKiEjPDckJCIreEl3ekshIiokITFab3B0RVhcJyohIzw3JCQiLEolZU0hSCQhIzUkITF1P11OI0dlaiohIzw3JCQiLEA8ZSYqSCQhIzUkITEseUFZYSZSaSohIzw3JCQiLClSeF00TCEjNSQhMSY9ZUkyPzZoKiEjPDckJCIsb2gneT5MISM1JCExXjB6eHIleWYqISM8NyQkIixFXFUpSEwhIzUkITFhQCdmZ11bZSohIzw3JCQiLCZwP2RSTCEjNSQhMTc8ViZlbEFkKiEjPDckJCIsZTV2Lk4kISM1JCExTlpgWTdHZSYqISM8NyQkIixXNiMzZ0whIzUkITF0b0FsbnFYJiohIzw3JCQiKz1rV3FMISIqJCExQyY+YUlzQWAqISM8NyQkIix2LFEpekwhIzUkITAxUy54IjQ/JiohIzs3JCQiLGteMCxSJCEjNSQhMVcneSFSJW9uXSohIzw3JCQiLEZWbSgqUiQhIzUkITFcTzU+a0ElXCohIzw3JCQiLFIoWycpNE0hIzUkITFPJmV6MjY2WyohIzw3JCQiK1l6dD5NISIqJCExJSo0K1tRR28lKiEjPDckJCIsdjh1K1YkISM1JCExUmpPdjImW1gqISM8NyQkIiwlPSJIK1ckISM1JCExWWFhInk0PlcqISM8NyQkIixVXzQtWCQhIzUkITFiRy88SW5HJSohIzw3JCQiLDZqMC5ZJCEjNSQhMTYjZUJ5VmJUKiEjPDckJCIsWyFIZXBNISM1JCExUSZvLTV5TVMqISM8NyQkIix1cTotWyQhIzUkITF5L0IpZlsnKlEqISM8NyQkIixHImVzKlskISM1JCExUkdiJTR6c1AqISM8NyQkIiwob2InKSpcJCEjNSQhMWs1eGk0NGskKiEjPDckJCIsKjMxZDROISM1JCExNEc0KTRwOU4qISM8NyQkIiwpM29NP04hIzUkITBrXCJbZFhQJCohIzs3JCQiLGg/eSdITiEjNSQhMSxJJiopM0JgSyohIzw3JCQiLGJVcC1hJCEjNSQhMUs/TiozYjpKKiEjPDckJCIsQTxBKlxOISM1JCExalJwSSssKkgqISM8NyQkIiwsdyFbZ04hIzUkITFOaDE7OkgmRyohIzw3JCQiLGUuImZwTiEjNSQhMTIiUSoqUWVNRiohIzw3JCQiLGtkbSp6TiEjNSQhMSRSTipIaykqZiMqISM8NyQkIixrJCkpKSoqZSQhIzUkITEjRycqKSpIeXBDKiEjPDckJCIsIlxYKytPISM1JCExRl9RbFQpUkIqISM8NyQkIixlVCQpKjRPISM1JCEwdERNdlY1QSohIzs3JCQiLEYpKnAmPk8hIzUkITFmSSlbLz0nMyMqISM8NyQkIixhSkwqSE8hIzUkITFjaUBoRD4mPiohIzw3JCQiLEhLNSlSTyEjNSQhMS52JClHVlMjPSohIzw3JCQiLCMzYT9dTyEjNSQhMWtHbSNRYCpvIiohIzw3JCQiLE9ZOidmTyEjNSQhMGoubWEleWMiKiEjOzckJCIsa0w6K24kISM1JCExaDM8PldNViIqISM8NyQkIixCZ3cqek8hIzUkITExVFUhNCFbSSIqISM8NyQkIixBaTgqKm8kISM1JCExPiJ5Lj9jdzYqISM8NyQkIit5R0grUCEiKiQhMTo0I3BzclU1KiEjPDckJCIsOmJfKTRQISM1JCExQDpHU08mPjQqISM8NyQkIixbJ0hrPlAhIzUkITEkKW8tOCFbJHohKiEjPDckJCIsV3VfL3QkISM1JCExJyk+Xyd5VGExKiEjPDckJCIsVzZTLXUkISM1JCExJil5RlY+J0cwKiEjPDckJCIsTmBcLXYkISM1JCEwRF4qXHorUyEqISM7NyQkIixcJilHL3ckISM1JCExMXYpUXhacC0qISM8NyQkIixAaiZ5cFAhIzUkITFWQjYlKlEmXCwqISM8NyQkIixPbGYoelAhIzUkITFLaz1sMT0tISohIzw3JCQiLEF2ZCcqeSQhIzUkITFALXdicV4qKSopISM8NyQkIitUY0MrUSEiKiQhMUtgWD1cKWYoKikhIzw3JCQiLFUqKillNFEhIzUkITE4bSg+bmJTJyopISM8NyQkIixVR3AuI1EhIzUkITEnKVszO2tJXSopISM8NyQkIixbbSg0SVEhIzUkITFzRFgiXDd6JCopISM8NyQkIiwqKVFCKFJRISM1JCExMmJsOENtRCopISM8NyQkIixZOHUrJlEhIzUkITF2J2ZLVC9EIiopISM8NyQkIiw3dm0vJ1EhIzUkITFwbSJcJykzJCoqKSkhIzw3JCQiLE5cQSpwUSEjNSQhMSU+MnZ2O3QpKSkhIzw3JCQiLD0yayp6USEjNSQhMS1zOypSJ2Z1KSkhIzw3JCQiLDNuaigqKVEhIzUkITFXIj1oVSg+aSkpISM8NyQkIiwmUmxRK1IhIzUkITEyIzQnUk94WykpISM8NyQkIixXRnkmNFIhIzUkITFocXZuRTxQKSkhIzw3JCQiLGhKTiwjUiEjNSQhMXgkUWQ8bFEjKSkhIzw3JCQiLC5cZiskUiEjNSQhMUZaIjQpPVA2KSkhIzw3JCQiLHkheSkpUlIhIzUkITEoKUcpXDw6ISp6KSEjPDckJCIsUSVSc1xSISM1JCEwQCgqZXBrbXkpISM7NyQkIiwqemh2ZlIhIzUkITBXJz5OWjN1KCkhIzs3JCQiLEA9IVJxUiEjNSQhMVIvWXIpbzJ3KSEjPDckJCIsM19TLClSISM1JCExYG9wPm1kWygpISM8NyQkIixyTmwoKilSISM1JCEwMUJFXmRsdCkhIzs3JCQiLChbVDArUyEjNSQhMVQqUTRHRlBzKSEjPDckJCIsRGE/LiwlISM1JCExJT1DUnFWNHIpISM8NyQkIiwxQ04mPlMhIzUkITFNJD1ydyZbKnApISM8NyQkIis6MlhJUyEiKiQhMSlwYCkpKUckZm8pISM8NyQkIix5RiVlUlMhIzUkITF3ZXR5IjRZbikhIzw3JCQiLGErbi0wJSEjNSQhMTEzOz5WUWgnKSEjPDckJCIrTUVZZ1MhIiokITExcHpQQXlbJykhIzw3JCQiLGY2bSZwUyEjNSQhMSUpZl5GbGFQJykhIzw3JCQiLE0kUiEpelMhIzUkITFtSXR4JUhcaSkhIzw3JCQiLFFoNCw0JSEjNSQhMWVvLj4qW0FoKSEjPDckJCIsSkptLjUlISM1JCExelhiRylbJypmKSEjPDckJCIsamV2KTRUISM1JCExJm8jb2ldKXplKSEjPDckJCIseik9cz5UISM1JCExVl9GPGsjZmQpISM8NyQkIixyJVwhKkhUISM1JCExViJba0d2TWMpISM8NyQkIiwiXGAwU1QhIzUkITFwJz1AUiUzXiYpISM8NyQkIixfRydcXVQhIzUkITEoPU0uN2ckUSYpISM8NyQkIix1bSNwZlQhIzUkITF4MjdoMDxGJikhIzw3JCQiLGNoWCs8JSEjNSQhMTEmPTsvJWY5JikhIzw3JCQiK3U1VyE9JSEiKiQhMXBecDJ3KT5dKSEjPDckJCIsVy1mLz4lISM1JCExSyUqRyZvZikqWykhIzw3JCQiLEpHYyYqPiUhIzUkITElXG5FMmspeSUpISM8NyQkIixPIVFQNVUhIzUkITEpPi5pRTZlWSkhIzw3JCQiLENtUCY+VSEjNSQhMUBYVFtFeGElKSEjPDckJCIsKDN1PklVISM1JCExLjI+T1ImPlcpISM8NyQkIiwvNEwnUlUhIzUkITFqXi50b2lJJSkhIzw3JCQiLChHYikqXFUhIzUkITFkKnpMaj8jPSUpISM8NyQkIiwiKVxWKWZVISM1JCExM2RRLnlVMSUpISM8NyQkIitiI0gsRiUhIiokITBoYCEpKVw5JVIpISM7NyQkIiwyenUmelUhIzUkITFeYHMjPSYpR1EpISM8NyQkIit4SXcqRyUhIiokITF5d1ZNNndxJCkhIzw3JCQiLEolZU0rViEjNSQhMSJlX20rIj5lJCkhIzw3JCQiLEA8ZSY0ViEjNSQhMWV1aTcib3NNKSEjPDckJCIsKVJ4XT5WISM1JCExQTNNeTlcTiQpISM8NyQkIixvaCd5SFYhIzUkITFAXXBxdE1CJCkhIzw3JCQiLEVcVSlSViEjNSQhMUojKWVQKClbNiQpISM8NyQkIiwmcD9kXFYhIzUkITFBcWJ6Yy4rJCkhIzw3JCQiLGU1di5PJSEjNSQhMUdeI1EtVnRHKSEjPDckJCIsVzYjM3FWISM1JCEwJ28pKj4oZmZGKSEjOzckJCIrPWtXIVElISIqJCExdzImZURHUUUpISM8NyQkIix2LFEpKlElISM1JCEwQzI0ZmJHRCkhIzs3JCQiLGteMCxTJSEjNSQhMChbLlo7KTNDKSEjOzckJCIsRlZtKDRXISM1JCExLik+UD9PJ0gjKSEjPDckJCIsUihbJyk+VyEjNSQhMHdxbVIuekApISM7NyQkIitZenRIVyEiKiQhMFxLLzlhaz8pISM7NyQkIix2OHUrVyUhIzUkITFuTW9zM1wlPikhIzw3JCQiLCU9IkgrWCUhIzUkITFrKHkjXDYqSD0pISM8NyQkIixVXzQtWSUhIzUkITFKP1o9UERyIikhIzw3JCQiLDZqMC5aJSEjNSQhMWliLSc9TydmIikhIzw3JCQiLFshSGV6VyEjNSQhL1YqeiUzKSpbIikhIzo3JCQiLHVxOi1cJSEjNSQhMWFMI1I9I3pPIikhIzw3JCQiLEciZXMqXCUhIzUkIS8kSEolPSJmNykhIzo3JCQiLChvYicpNFghIzUkITFqRVpqTEw5IikhIzw3JCQiLCozMWQ+WCEjNSQhMWNvWyp6c0s1KSEjPDckJCIsKTNvTUlYISM1JCExOEFPYmgsIjQpISM8NyQkIixoP3knUlghIzUkITEpM25sIlFVITMpISM8NyQkIixiVXAtYiUhIzUkITEqSGpiMkQlbyEpISM8NyQkIixBPEEqZlghIzUkITF4UUFkOV5kISkhIzw3JCQiLCx3IVtxWCEjNSQhMS87KXlrKGZYISkhIzw3JCQiLGUuImZ6WCEjNSQhMThgaSM+UWAuKSEjPDckJCIsa2RtKiplJSEjNSQhMSJmMzNpd08tKSEjPDckJCIsayQpKSkqKmYlISM1JCExbnF4UV5WNyEpISM8NyQkIiwiXFgrNVkhIzUkITFka2o6T0EsISkhIzw3JCQiLGVUJCkqPlkhIzUkITBcJVJNZTIhKnohIzs3JCQiLEYpKnAmSFkhIzUkIS9gTW11UXp6ISM6NyQkIixhSkwqUlkhIzUkITEmPU1DUmN5J3ohIzw3JCQiLEhLNSlcWSEjNSQhMXYsODshKilvJnohIzw3JCQiLCMzYT9nWSEjNSQhMWhHVXMsUFh6ISM8NyQkIixPWToncFkhIzUkITFHViZIIVInXCR6ISM8NyQkIixrTDorbyUhIzUkITE6WGM2altCeiEjPDckJCIsQmd3KipvJSEjNSQhMSgqUmExZF43eiEjPDckJCIsQWk4KipwJSEjNSQhMSY0KEdmVGYseiEjPDckJCIreUdINVohIiokITFuR1MuL0AhKnkhIzw3JCQiLDpiXyk+WiEjNSQhMEgkWyxydXp5ISM7NyQkIixbJ0hrSFohIzUkITFCOS1xRTBweSEjPDckJCIsV3VfL3UlISM1JCExJnplWSMqcHMmeSEjPDckJCIsVzZTLXYlISM1JCExS01KL1dpWXkhIzw3JCQiLE5gXC13JSEjNSQhMS5DKVJ3ZmQkeSEjPDckJCIsXCYpRy94JSEjNSQhMThKR0hSdEN5ISM8NyQkIixAaiZ5elohIzUkITFkcVUlcD5ZInkhIzw3JCQiLE9sZigqeSUhIzUkITE2bzpEKydRIXkhIzw3JCQiLEF2ZCcqeiUhIzUkIS9PKSlvVz8keighIzo3JCQiK1RjQzVbISIqJCExdCVReCIzJD15KCEjPDckJCIsVSoqKWU+WyEjNSQhMSRvLVAyOj14KCEjPDckJCIsVUdwLiRbISM1JCExeSkpR1tNR2d4ISM8NyQkIixbbSg0U1shIzUkITFhYVNMJioqKVx4ISM8NyQkIiwqKVFCKFxbISM1JCEwPiMqKnloa1J4ISM7NyQkIixZOHUrJ1shIzUkITEjKW9rM1FrR3ghIzw3JCQiLDd2bS8oWyEjNSQhMW1KQSg9QHdyKCEjPDckJCIsTlxBKnpbISM1JCExZlV3T0xoMnghIzw3JCQiLD0yayoqKVshIzUkITAvJypHVzJxcCghIzs3JCQiLDNuaigqKlshIzUkITEoejQoZSp5bW8oISM8NyQkIiwmUmxRNVwhIzUkITF0YilINjJibighIzw3JCQiLFdGeSY+XCEjNSQhMTk1QnkyJ2VtKCEjPDckJCIsaEpOLCRcISM1JCExRmUybFwhW2woISM8NyQkIiwuXGYrJVwhIzUkITBiSnJtTVdrKCEjOzckJCIseSF5KSlcXCEjNSQhMXAnPTpDJz1NdyEjPDckJCIsUSVSc2ZcISM1JCExei9FcTcmUmkoISM8NyQkIiwqemh2cFwhIzUkITE9KipbI1xNTmgoISM8NyQkIixAPSFSISlcISM1JCExQlokUlE8RGcoISM8NyQkIiwzX1MsKlwhIzUkITEnUUErInpWI2YoISM8NyQkIixyTmwoKipcISM1JCExQl01QSozRGUoISM8NyQkIiwoW1QwNV0hIzUkITFZeWFueCI+ZCghIzw3JCQiLERhPy4tJiEjNSQhMWtlOyY0dDhjKCEjPDckJCIsMUNOJkhdISM1JCExJCk0XUkmRz5iKCEjPDckJCIrOjJYU10hIiokITFwIikzKTRsMmEoISM8NyQkIix5RiVlXF0hIzUkITEpWylcN1ZXSnYhIzw3JCQiLGErbi0xJiEjNSQhMSUqPjUmKmZjP3YhIzw3JCQiK01FWXFdISIqJCExbFlrJD0yLV4oISM8NyQkIixmNm0mel0hIzUkITAoNEVndCg0XSghIzs3JCQiLE0kUiEpKjMmISM1JCExJjNaPkQ+MVwoISM8NyQkIixRaDQsNSYhIzUkITE6KFFUdjotWyghIzw3JCQiLEpKbS42JiEjNSQhMCR6XF5bKSlwdSEjOzckJCIsamV2KT5eISM1JCEwJFJxJVFGLlkoISM7NyQkIix6KT1zSF4hIzUkITE4bTZVP1hddSEjPDckJCIsciVcISpSXiEjNSQhMXl0V1U3RVN1ISM8NyQkIiwiXGAwXV4hIzUkITEuWF5eYzdJdSEjPDckJCIsX0cnXGdeISM1JCEweCFHIVFCKD51ISM7NyQkIix1bSNwcF4hIzUkITFyKGVkcSFlNXUhIzw3JCQiLGNoWCs9JiEjNSQhMSl5MS1ANS5TKCEjPDckJCIrdTVXIT4mISIqJCExQF44VTQtIVIoISM8NyQkIixXLWYvPyYhIzUkITFadGN2dTchUSghIzw3JCQiLEpHYyY0XyEjNSQhMTdudGw/O3J0ISM8NyQkIixPIVFQP18hIzUkITBjJzQnZUMwTyghIzs3JCQiLENtUCZIXyEjNSQhMSg9OVcpSGBedCEjPDckJCIsKDN1PlNfISM1JCExRVFmYmo0VHQhIzw3JCQiLC80TCdcXyEjNSQhMTw5cFYmeT1MKCEjPDckJCIsKEdiKSpmXyEjNSQhMXVBOTtyeUB0ISM8NyQkIiwiKVxWKXBfISM1JCExMFQmWy0qPjd0ISM8NyQkIitiI0gsRyYhIiokITFKXz4wcUAtdCEjPDckJCIsMnp1JipHJiEjNSQhMSo0KTMkR3FJSCghIzw3JCQiK3hJdypIJiEiKiQhMTJAPDtjQSRHKCEjPDckJCIsSiVlTTVgISM1JCEwbGR5OUJJRighIzs3JCQiLEA8ZSY+YCEjNSQhMHllYUFoVEUoISM7NyQkIiwpUnhdSGAhIzUkITExIT1vSTVZRCghIzw3JCQiLG9oJ3lSYCEjNSQhMVolZlZFbFpDKCEjPDckJCIsRVxVKVxgISM1JCEwZHd5UmJeQighIzs3JCQiLCZwP2RmYCEjNSQhMS4lPUJreGVBKCEjPDckJCIsZTV2LlAmISM1JCExbFUlW2cqZjpzISM8NyQkIixXNiMzIVEmISM1JCExJD5JJ0hfUTFzISM8NyQkIis9a1chUiYhIiokITFDMyQ0cm9sPighIzw3JCQiLHYsUSkqUiYhIzUkITFqPkQoKUdwKD0oISM8NyQkIixrXjAsVCYhIzUkITB2ME5MNSF5ciEjOzckJCIsRlZtKD5hISM1JCEwMy4oZik+Km9yISM7NyQkIixSKFsnKUhhISM1JCExNihbJlIlUSVmciEjPDckJCIrWXp0UmEhIiokITEiZV90Mio9XXIhIzw3JCQiLHY4dStYJiEjNSQhMWApUkNbRjA5KCEjPDckJCIsJT0iSCtZJiEjNSQhMSZ5JClHNFY3OCghIzw3JCQiLFVfNC1aJiEjNSQhMWZ1aC4ncDw3KCEjPDckJCIsNmowLlsmISM1JCExRzRLR2NSN3IhIzw3JCQiLFshSGUqWyYhIzUkITEpPlYqeS4hUTUoISM8NyQkIix1cTotXSYhIzUkITFqW0JfNChSNCghIzw3JCQiLEciZXM0YiEjNSQhMVckKXohKiopPiYzKCEjPDckJCIsKG9iJyk+YiEjNSQhMS9CVillbWUyKCEjPDckJCIsKjMxZEhiISM1JCExQWpjMlImcDEoISM8NyQkIiwpM29NU2IhIzUkITFLOWFiKnpxMCghIzw3JCQiLGg/eSdcYiEjNSQhMU9dIjMoKVsmW3EhIzw3JCQiLGJVcC1jJiEjNSQhMU9vb3B0KSlRcSEjPDckJCIsQTxBKnBiISM1JCExWlhWJ3AsLC4oISM8NyQkIiwsdyFbIWUmISM1JCExYSxXY0leP3EhIzw3JCQiLGUuImYqZSYhIzUkITF5KilRLHhEN3EhIzw3JCQiLGtkbSoqZiYhIzUkITF2PGctaChHKyghIzw3JCQiLGskKSkpKjRjISM1JCExMExmNVckUSpwISM8NyQkIiwiXFgrP2MhIzUkITFRJSlmdic9WylwISM8NyQkIixlVCQpKkhjISM1JCExUCY9cipmJmUocCEjPDckJCIsRikqcCZSYyEjNSQhMWkyTERWRW5wISM8NyQkIixhSkwqXGMhIzUkITFlckE+cSp6JnAhIzw3JCQiLEhLNSlmYyEjNSQhMUEjZjNTJT1ccCEjPDckJCIsIzNhP3FjISM1JCExJ1sqW2EuJCpScCEjPDckJCIsT1k6J3pjISM1JCExeTJeJmVyOiRwISM8NyQkIixrTDorcCYhIzUkITElKm9WVlFOQXAhIzw3JCQiLEJndyoqcCYhIzUkITFtKkhjdldOInAhIzw3JCQiLEFpOCo0ZCEjNSQhMDkjcG5reC9wISM7NyQkIit5R0g/ZCEiKiQhMWMtdGAmUWMqbyEjPDckJCIsOmJfKUhkISM1JCExS3dydzJDKClvISM8NyQkIixbJ0hrUmQhIzUkITFqJlFSc2UneW8hIzw3JCQiLFd1Xy92JiEjNSQhMW8hUig9Wj9wbyEjPDckJCIsVzZTLXcmISM1JCExJCl5OitXbWdvISM8NyQkIixOYFwteCYhIzUkITEqPSgzYiVcPiZvISM8NyQkIixcJilHL3kmISM1JCEwbjxVUDFKJW8hIzs3JCQiLEBqJnkqeSYhIzUkITAyZnVVJipcJG8hIzs3JCQiLE9sZigqeiYhIzUkITEpKW89MHpPRW8hIzw3JCQiLEF2ZCc0ZSEjNSQhMVU2JipwWyN5Im8hIzw3JCQiK1RjQz9lISIqJCExYD5FdXJxM28hIzw3JCQiLFUqKillSGUhIzUkITEjZicpKUgqeTEhbyEjPDckJCIsVUdwLiVlISM1JCExbEV1LW1WInonISM8NyQkIixbbSg0XWUhIzUkITFaInljLDpKeSchIzw3JCQiLCopUUIoZmUhIzUkITEicHZmJSkpKlt4JyEjPDckJCIsWTh1KyhlISM1JCExYjkqekokM21uISM8NyQkIiw3dm0vKWUhIzUkITEmeWlQU19zdichIzw3JCQiLE5cQSoqKWUhIzUkITFSZC8oPU4jXG4hIzw3JCQiLD0yayoqKmUhIzUkITFib0wjZVIydSchIzw3JCQiLDNuaig0ZiEjNSQhMShlVGkmb1lLbiEjPDckJCIsJlJsUT9mISM1JCExKVIkKSpRJD5OcychIzw3JCQiLFdGeSZIZiEjNSQhMSZcby88JXo6biEjPDckJCIsaEpOLCVmISM1JCExPVEmZSYzJXBxJyEjPDckJCIsLlxmKyZmISM1JCExRWRPbXFqKXAnISM8NyQkIix5IXkpKWZmISM1JCEwMlVjUUovcCchIzs3JCQiLFElUnNwZiEjNSQhMS5GRHJwQiNvJyEjPDckJCIsKnpodnpmISM1JCExO1o8enUqUW4nISM8NyQkIixAPSFSISpmISM1JCExLFQoUih5MmxtISM8NyQkIiwzX1MsKychIzUkITEuZzIyJDRxbCchIzw3JCQiLHJObCg0ZyEjNSQhMCIzKil6OjFcbSEjOzckJCIsKFtUMD9nISM1JCExaTxyL1VlU20hIzw3JCQiLERhPy4uJyEjNSQhMXAkZXlTV0BqJyEjPDckJCIsMUNOJlJnISM1JCExSEY/O2FlQ20hIzw3JCQiKzoyWF1nISIqJCEwbSt2MF5jaCchIzs3JCQiLHlGJWVmZyEjNSQhMTA+cnE7PjNtISM8NyQkIixhK24tMichIzUkITFLJz4zMidbKmYnISM8NyQkIitNRVkhMychIiokITA7R3BZJz4iZichIzs3JCQiLGY2bSYqMychIzUkITEvYDg+MCJRZSchIzw3JCQiLE0kUiEpKjQnISM1JCExQkVpeD1fdmwhIzw3JCQiLFFoNCw2JyEjNSQhMVxERCY0KD5ubCEjPDckJCIsSkptLjcnISM1JCExMGlYZjAkKmVsISM8NyQkIixqZXYpSGghIzUkITEsNjhHSUdebCEjPDckJCIseik9c1JoISM1JCExTHYnb0MiUVZsISM8NyQkIixyJVwhKlxoISM1JCEvIypSVHJBTmwhIzo3JCQiLCJcYDBnaCEjNSQhMTRMOCJHPHJfJyEjPDckJCIsX0cnXHFoISM1JCExMTEwIzQlej1sISM8NyQkIix1bSNwemghIzUkITBlSUp4eTleJyEjOzckJCIsY2hYKz4nISM1JCExNjAoSDFoS10nISM8NyQkIit1NVcraSEiKiQhMW4+YUMkR11cJyEjPDckJCIsVy1mL0AnISM1JCExaEgtX0E2KFsnISM8NyQkIixKR2MmPmkhIzUkITFaTlY0KFEqemshIzw3JCQiLE8hUVBJaSEjNSQhMTxPbD5zVXJrISM8NyQkIixDbVAmUmkhIzUkITFBVDomZktVWSchIzw3JCQiLCgzdT5daSEjNSQhMSg+S1VqIillWCchIzw3JCQiLC80TCdmaSEjNSQhMXVQbDtlXVtrISM8NyQkIiwoR2IpKnBpISM1JCExUW85SDNWU2shIzw3JCQiLCIpXFYpemkhIzUkITFESCY+WWVGVichIzw3JCQiK2IjSCxIJyEiKiQhMGJEO3JxWlUnISM7NyQkIiwyenUmKkgnISM1JCExKG9qeEBedVQnISM8NyQkIit4SXc0aiEiKiQhMUJUIik+SWQ0ayEjPDckJCIsSiVlTT9qISM1JCExKT46KXAjMzlTJyEjPDckJCIsQDxlJkhqISM1JCExeExeQ2hKJVInISM8NyQkIiwpUnhdUmohIzUkITBPImVnQm4nUSchIzs3JCQiLG9oJ3lcaiEjNSQhMSlmPTomSHp5aiEjPDckJCIsRVxVKWZqISM1JCExKFsiSCw6NXJqISM8NyQkIiwmcD9kcGohIzUkITFoUXUtY25qaiEjPDckJCIsZTV2LlEnISM1JCExJSoqPWh3W2FOJyEjPDckJCIsVzYjMyFSJyEjNSQhMTRqWD9JMltqISM8NyQkIis9a1crayEiKiQhMHloNSdcQFNqISM7NyQkIix2LFEpNGshIzUkITEzWSdSaTRKTCchIzw3JCQiLGteMCxVJyEjNSQhMSVwPzg5ZWBLJyEjPDckJCIsRlZtKEhrISM1JCExNCEpUUIuMz1qISM8NyQkIixSKFsnKVJrISM1JCEwIkglKmUiKls1aiEjOzckJCIrWXp0XGshIiokITFyLy1FTTMuaiEjPDckJCIsdjh1K1knISM1JCExcmstTHNNJkgnISM8NyQkIiwlPSJIK1onISM1JCExM1NuIW83ekcnISM8NyQkIixVXzQtWychIzUkITFzQ1slSEUuRychIzw3JCQiLDZqMC5cJyEjNSQhMVxrSHkiPkdGJyEjPDckJCIsWyFIZSpcJyEjNSQhMTZMUkJgJGZFJyEjPDckJCIsdXE6LV4nISM1JCExVDxucUQxZWkhIzw3JCQiLEciZXM+bCEjNSQhMD5gJmVqLl5pISM7NyQkIiwob2InKUhsISM1JCEyO24tQXpnTkMnISM9NyQkIiwqMzFkUmwhIzUkITElR2BOKjRVT2khIzw3JCQiLCkzb01dbCEjNSQhMUQ2TD0xXkdpISM8NyQkIixoP3knZmwhIzUkITFeJFFGaHY7QSchIzw3JCQiLGJVcC1kJyEjNSQhMTJcJGVUTVJAJyEjPDckJCIsQTxBKnpsISM1JCExInA4TVslKm8/JyEjPDckJCIsLHchWyFmJyEjNSQhMjp5OnBmNSMqPichIz03JCQiLGUuImYqZichIzUkITFWTD0jbyVmIz4nISM8NyQkIixrZG0qNG0hIzUkITF3TzRlYzImPSchIzw3JCQiLGskKSkpKj5tISM1JCEyRD8jejomR3k8JyEjPTckJCIsIlxYK0ltISM1JCEyWSozISpRO2dxaCEjPTckJCIsZVQkKSpSbSEjNSQhMTBPJXB1O007JyEjPDckJCIsRikqcCZcbSEjNSQhMWxjNV8oR2w6JyEjPDckJCIsYUpMKmZtISM1JCEyVyM+czwmKTRcaCEjPTckJCIsSEs1KXBtISM1JCExV2w2cUEuVWghIzw3JCQiLCMzYT8hbychIzUkITE0ODZsOWhNaCEjPDckJCIsT1k6JypvJyEjNSQhMWsoPSRSITN6NychIzw3JCQiLGtMOitxJyEjNSQhMSZvM0A5OjA3JyEjPDckJCIsQmd3KjRuISM1JCEyOEZxT1JcTTYnISM9NyQkIixBaTgqPm4hIzUkITIlSGZddmRUMWghIz03JCQiK3lHSEluISIqJCExaExjOV0zKjQnISM8NyQkIiw6Yl8pUm4hIzUkITFSJWY/VlpCNCchIzw3JCQiLFsnSGtcbiEjNSQhMUpGMjs5WSYzJyEjPDckJCIsV3VfL3cnISM1JCEyd1syLjJ2eTInISM9NyQkIixXNlMteCchIzUkITFhJ1FFRkA1MichIzw3JCQiLE5gXC15JyEjNSQhMk9CUjFxRVMxJyEjPTckJCIsXCYpRy96JyEjNSQhMW9CakQnR3AwJyEjPDckJCIsQGomeSp6JyEjNSQhMmM2LyE+d1RdZyEjPTckJCIsT2xmKDRvISM1JCExUFpzLjhcVmchIzw3JCQiLEF2ZCc+byEjNSQhMVlxMW5Aak9nISM8NyQkIitUY0NJbyEiKiQhMUxXej00SkhnISM8NyQkIixVKiopZVJvISM1JCEyJz5tJVslUSdHLSchIz03JCQiLFVHcC4mbyEjNSQhMTI1enE1VzpnISM8NyQkIixbbSg0Z28hIzUkITJiM2o1NGQoM2chIz03JCQiLCopUUIocG8hIzUkITAnPjRZcjotZyEjOzckJCIsWTh1KylvISM1JCEyQ0tePy52XSpmISM9NyQkIiw3dm0vKm8hIzUkITFRdyopNCl6eilmISM8NyQkIixOXEEqKipvISM1JCExJD09MHFQOilmISM8NyQkIiw9MmsqNHAhIzUkITFlNCZHXTVaKGYhIzw3JCQiLDNuaig+cCEjNSQhMmJwIWZGPDFvZiEjPTckJCIsJlJsUUlwISM1JCExdCUqemApcDMnZiEjPDckJCIsV0Z5JlJwISM1JCExN2NtTSlmWSZmISM8NyQkIixoSk4sJnAhIzUkITFAKnBqPVV2JWYhIzw3JCQiLC5cZisncCEjNSQhMmsieUsoZmwzJWYhIz03JCQiLHkheSkpcHAhIzUkITBoSSEpPW5VJGYhIzs3JCQiLFElUnN6cCEjNSQhMkVIa1A4eHcjZiEjPTckJCIsKnpodiopcCEjNSQhMVU5dHcncDQjZiEjPDckJCIsQD0hUitxISM1JCEyMCpbZ2NfKFEiZiEjPTckJCIsM19TLCwoISM1JCExYnBzSlVRMmYhIzw3JCQiLHJObCg+cSEjNSQhLzdxRygqKTQhZiEjOjckJCIsKFtUMElxISM1JCExayUqeUIkb1QqZSEjPDckJCIsRGE/Li8oISM1JCExYmhqbmpQKCllISM8NyQkIiwxQ04mXHEhIzUkITFHZXNvREgiKWUhIzw3JCQiKzoyWGdxISIqJCExVT4oeSk0NXVlISM8NyQkIix5RiVlcHEhIzUkITF4JWY6KGY0b2UhIzw3JCQiLGErbi0zKCEjNSQhMXNqRjpwM2hlISM8NyQkIitNRVkhNCghIiokITFccEp2PlRhZSEjPDckJCIsZjZtJio0KCEjNSQhMms9UVcrayVbZSEjPTckJCIsTSRSISk0ciEjNSQhMVRIP0YkKXlUZSEjPDckJCIsUWg0LDcoISM1JCEwX1YjR0YzTmUhIzs3JCQiLEpKbS44KCEjNSQhMW4sZkxLVUdlISM8NyQkIixqZXYpUnIhIzUkITFMIWYrb2hBI2UhIzw3JCQiLHopPXNcciEjNSQhMSV5eC5hJSplImUhIzw3JCQiLHIlXCEqZnIhIzUkITFUIVsmKUdCJDRlISM8NyQkIiwiXGAwcXIhIzUkITFcc2gpKW95LWUhIzw3JCQiLF9HJ1whPSghIzUkITEuTk00eDIneiYhIzw3JCQiLHVtI3AqPSghIzUkITFFcExcLT0heiYhIzw3JCQiLGNoWCs/KCEjNSQhMCZISjBYYiR5JiEjOzckJCIrdTVXNXMhIiokITFtQGUmejpweCYhIzw3JCQiLFctZi9BKCEjNSQhMiZHbDlLO2BxZCEjPTckJCIsSkdjJkhzISM1JCEyYXRQeWhYWncmISM9NyQkIixPIVFQU3MhIzUkITIveCQ0JGZ6eXYmISM9NyQkIixDbVAmXHMhIzUkITJqJCo+cjd2P3YmISM9NyQkIiwoM3U+Z3MhIzUkITInb29JOXBMWGQhIz03JCQiLC80TCdwcyEjNSQhMSdwKyFwWlFSZCEjPDckJCIsKEdiKSp6cyEjNSQhMTkqMykqZW5HdCYhIzw3JCQiLCIpXFYpKkcoISM1JCExL1ZeaVhuRWQhIzw3JCQiK2IjSCxJKCEiKiQhMSQ9JVtMaEE/ZCEjPDckJCIsMnp1JjR0ISM1JCExejNOTWtKOWQhIzw3JCQiK3hJdz50ISIqJCExLWJmUlsmenEmISM8NyQkIixKJWVNSXQhIzUkITFRdyZHKDRPLGQhIzw3JCQiLEA8ZSZSdCEjNSQhMTNBMDVFaiZwJiEjPDckJCIsKVJ4XVx0ISM1JCExKSpcPU16WCpvJiEjPDckJCIsb2gneWZ0ISM1JCExXiR5WDEjNCRvJiEjPDckJCIsRVxVKXB0ISM1JCExKilmKlFBeG9uJiEjPDckJCIsJnA/ZHp0ISM1JCExO0NPd2goM24mISM8NyQkIixlNXYuUighIzUkITFERVx1cEFrYyEjPDckJCIsVzYjMyt1ISM1JCEyJXlXb1lbRWVjISM9NyQkIis9a1c1dSEiKiQhMi9XQTorNz5sJiEjPTckJCIsdixRKT51ISM1JCEyRGl3QCVwO1ljISM9NyQkIixrXjAsVighIzUkITFIME8+JykqKVJjISM8NyQkIixGVm0oUnUhIzUkITJFN2QiXEQsTWMhIz03JCQiLFIoWycpXHUhIzUkITJXKnBiVkEoeWkmISM9NyQkIitZenRmdSEiKiQhMS8oeXU3Iik9aSYhIzw3JCQiLHY4dStaKCEjNSQhMXdoPEQ9aTpjISM8NyQkIiwlPSJIK1soISM1JCExeCFva3YwJzRjISM8NyQkIixVXzQtXCghIzUkITIlKj54KSkpZlkuYyEjPTckJCIsNmowLl0oISM1JCExb24wVSYqUShmJiEjPDckJCIsWyFIZTR2ISM1JCExJCo9TVlvIj1mJiEjPDckJCIsdXE6LV8oISM1JCEwIkdXV0ZXJmUmISM7NyQkIixHImVzSHYhIzUkITFiTXNiS3Z6YiEjPDckJCIsKG9iJylSdiEjNSQhMTlpWCozKnB0YiEjPDckJCIsKjMxZFx2ISM1JCExeSYpNGpnInpjJiEjPDckJCIsKTNvTWd2ISM1JCEyRF4jcCMqel1oYiEjPTckJCIsaD95J3B2ISM1JCEyQy4pSChIcWZiJiEjPTckJCIsYlVwLWUoISM1JCExcCYzKlt2cFxiISM8NyQkIixBPEEqKmUoISM1JCEybCV5ZFZBKlJhJiEjPTckJCIsLHchWyt3ISM1JCExUlJ1JT5reGAmISM8NyQkIixlLiJmNHchIzUkITEiPWtELyxDYCYhIzw3JCQiLGtkbSo+dyEjNSQhMWl6OG1cSUViISM8NyQkIixrJCkpKSpIdyEjNSQhMm1Ea2VbRy9fJiEjPTckJCIsIlxYK1N3ISM1JCExMFxkP3djOWIhIzw3JCQiLGVUJCkqXHchIzUkITJrMCVvIioqUigzYiEjPTckJCIsRikqcCZmdyEjNSQhMXd0ITNUX0pdJiEjPDckJCIsYUpMKnB3ISM1JCExVmNnP1Q3KFwmISM8NyQkIixISzUpenchIzUkITJNUCZSRS5SIlwmISM9NyQkIiwjM2E/IXAoISM1JCExKCpmPnZ6TyZbJiEjPDckJCIsT1k6JypwKCEjNSQhMjFgVF4wRip6YSEjPTckJCIsa0w6K3IoISM1JCExMFV6emMjUlomISM8NyQkIixCZ3cqPnghIzUkITEqPi5BMCo9b2EhIzw3JCQiLEFpOCpIeCEjNSQhMXdBTDN4WmlhISM8NyQkIit5R0hTeCEiKiQhMXcncHJBQ2xYJiEjPDckJCIsOmJfKVx4ISM1JCEyJylbJT0yPDBeYSEjPTckJCIsWydIa2Z4ISM1JCExJjQlR2N5WFhhISM8NyQkIixXdV8veCghIzUkITJDYSlIIj4lSFJhISM9NyQkIixXNlMteSghIzUkITJFWitGKVtzTGEhIz03JCQiLE5gXC16KCEjNSQhMSopZVsiUVMhR2EhIzw3JCQiLFwmKUcvIXkhIzUkITJYNTZIJDRGQWEhIz03JCQiLEBqJnk0eSEjNSQhMSh6VmwjeihwVCYhIzw3JCQiLE9sZig+eSEjNSQhMShmallfWThUJiEjPDckJCIsQXZkJ0h5ISM1JCExPXE8XCpvZFMmISM8NyQkIitUY0NTeSEiKiQhMjBpayZIWiIpKlImISM9NyQkIixVKiopZVx5ISM1JCExNlRgMzJkJVImISM8NyQkIixVR3AuJ3khIzUkITIxeDBhPUsmKVEmISM9NyQkIixbbSg0cXkhIzUkITFZJT4pelE0JFEmISM8NyQkIiwqKVFCKHp5ISM1JCEwaTYtP0J4UCYhIzs3JCQiLFk4dSsqeSEjNSQhMWU/a0ckZj5QJiEjPDckJCIsN3ZtLyF6ISM1JCEwKXpzRFI9bWAhIzs3JCQiLE5cQSo0eiEjNSQhMVR4KGZSUjRPJiEjPDckJCIsPTJrKj56ISM1JCExMDoyJGUhUWJgISM8NyQkIiwzbmooSHohIzUkITImUTFab2knKlxgISM9NyQkIiwmUmxRU3ohIzUkITEmelNoIykzVE0mISM8NyQkIixXRnkmXHohIzUkITFoSCVHTF0hUmAhIzw3JCQiLGhKTiwneiEjNSQhMmxHcElvXktMJiEjPTckJCIsLlxmKyh6ISM1JCExXG1rXToieUsmISM8NyQkIix5IXkpKXp6ISM1JCEyJTNmRlxWVkFgISM9NyQkIixRJVJzKil6ISM1JCExJ0gwKz5qcUomISM8NyQkIiwqemh2Kip6ISM1JCExL3N0YGJmNmAhIzw3JCQiLEA9IVI1ISkhIzUkITFNSHA3OyJlSSYhIzw3JCQiLDNfUywtKSEjNSQhMlg+Jj5CKT0wSSYhIz03JCQiLHJObChIISkhIzUkITFvbFItU0kmSCYhIzw3JCQiLChbVDBTISkhIzUkITIlKilIUUgtdSpHJiEjPTckJCIsRGE/LjApISM1JCEyJ0dcJWZrKj4lRyYhIz03JCQiLDFDTiZmISkhIzUkIS8xW1RnQnpfISM6NyQkIis6MlhxISkhIiokITJ3enFrd25MRiYhIz03JCQiLHlGJWV6ISkhIzUkITEqRyopPStuJW9fISM8NyQkIixhK24tNCkhIzUkITJYQ0oxK1lGRSYhIz03JCQiK01FWSsiKSEiKiQhMlcxK1Ipb0hkXyEjPTckJCIsZjZtJjQiKSEjNSQhMXknKlxZMFdfXyEjPDckJCIsTSRSISk+IikhIzUkITFhdCp6RyopcEMmISM8NyQkIixRaDQsOCkhIzUkITIvSyJ5c0ZeVF8hIz03JCQiLEpKbS45KSEjNSQhMSh6bEU0dGdCJiEjPDckJCIsamV2KVwiKSEjNSQhMWZZbTwlUjVCJiEjPDckJCIseik9c2YiKSEjNSQhMXYnPTwwUGVBJiEjPDckJCIsciVcISpwIikhIzUkITI7KVEkWzduL0EmISM9NyQkIiwiXGAwIT0pISM1JCExZmw9IylbNzpfISM8NyQkIixfRydcIT4pISM1JCExYDAleWZTJzRfISM8NyQkIix1bSNwKj4pISM1JCExRi1yVSI+Wz8mISM8NyQkIixjaFgrQCkhIzUkITFHKEdPXSwlKj4mISM8NyQkIit1NVc/IykhIiokITFRIilIT0MoUj4mISM8NyQkIixXLWYvQikhIzUkITFHYSI9dl0oKT0mISM8NyQkIixKR2MmUiMpISM1JCExREFWT3csJT0mISM8NyQkIixPIVFQXSMpISM1JCExPCFbPkErJXleISM8NyQkIixDbVAmZiMpISM1JCExWCF5NGldTzwmISM8NyQkIiwoM3U+cSMpISM1JCExRzUtamg4b14hIzw3JCQiLC80TCd6IykhIzUkITJjamtASGtLOyYhIz03JCQiLChHYikqKkcpISM1JCExKFJMOTtIejomISM8NyQkIiwiKVxWKSpIKSEjNSQhMjE0WWxqZUc6JiEjPTckJCIrYiNILEopISIqJCExL3VCPyN5djkmISM8NyQkIiwyenUmPiQpISM1JCExJ3k3M0RRRjkmISM8NyQkIit4SXdIJCkhIiokITEvLkpLdV9QXiEjPDckJCIsSiVlTVMkKSEjNSQhMndPUk1gREA4JiEjPTckJCIsQDxlJlwkKSEjNSQhMXB4eSkqPlZGXiEjPDckJCIsKVJ4XWYkKSEjNSQhMjtfTVcxc0I3JiEjPTckJCIsb2gneXAkKSEjNSQhMSY9Iz54WTo8XiEjPDckJCIsRVxVKXokKSEjNSQhMSVIYCU0LjE3XiEjPDckJCIsJnA/ZCpRKSEjNSQhMTx4O3UvOTJeISM8NyQkIixlNXYuUykhIzUkITFbLGRSJSlvLF4hIzw3JCQiLFc2IzM1JSkhIzUkITFzTylmLip6JzQmISM8NyQkIis9a1c/JSkhIiokITEwayRcVyllIjQmISM8NyQkIix2LFEpSCUpISM1JCExMGwmUW52bzMmISM8NyQkIixrXjAsVykhIzUkITE2WUQ8SHQiMyYhIzw3JCQiLEZWbShcJSkhIzUkITFXSWVtSSFwMiYhIzw3JCQiLFIoWycpZiUpISM1JCEydWVxJHBRJz0yJiEjPTckJCIrWXp0cCUpISIqJCExOGFCJ1FZcDEmISM8NyQkIix2OHUrWykhIzUkITFSRGM4ITM9MSYhIzw3JCQiLCU9IkgrXCkhIzUkITFiOCMqeSZvbzAmISM8NyQkIixVXzQtXSkhIzUkITIleVlRT28jPTAmISM9NyQkIiw2ajAuXikhIzUkITE6eiJvTU9vLyYhIzw3JCQiLFshSGU+JikhIzUkITEiKTRXRyplQS8mISM8NyQkIix1cTotYCkhIzUkITFkIVEjb0MtUF0hIzw3JCQiLEciZXNSJikhIzUkITEmKWVqU3hNS10hIzw3JCQiLChvYicpXCYpISM1JCEyOkg4L21zdC0mISM9NyQkIiwqMzFkZiYpISM1JCExTVokKipwPkUtJiEjPDckJCIsKTNvTXEmKSEjNSQhMjlGcmJCX3QsJiEjPTckJCIsaD95J3omKSEjNSQhMk5eKzxiKno3XSEjPTckJCIsYlVwLWYpISM1JCExJDRBdyE9azJdISM8NyQkIixBPEEqKmYpISM1JCExSGVvVypcSCsmISM8NyQkIiwsdyFbNScpISM1JCExakRxTXUjeSpcISM8NyQkIixlLiJmPicpISM1JCExQWlkZGNUJCpcISM8NyQkIixrZG0qSCcpISM1JCExR0MuYS1TKSlcISM8NyQkIixrJCkpKSpSJykhIzUkITFkIltfemtOKVwhIzw3JCQiLCJcWCtdJykhIzUkITA0JD14OXV5XCEjOzckJCIsZVQkKSpmJykhIzUkITFfO0Y0WyVSKFwhIzw3JCQiLEYpKnAmcCcpISM1JCEyWG9eUDFYJHBcISM9NyQkIixhSkwqeicpISM1JCEyJ3omUnh6IlFrXCEjPTckJCIsSEs1KSpvKSEjNSQhMSlHaSYqSGcnZlwhIzw3JCQiLCMzYT8rKCkhIzUkITJ1Jz5XYC9xYVwhIz03JCQiLE9ZOic0KCkhIzUkITJrSUEkNCk9LSZcISM9NyQkIixrTDorcykhIzUkITFeM2oxW0ZYXCEjPDckJCIsQmd3KkgoKSEjNSQhMUYpSEk/WzAlXCEjPDckJCIsQWk4KlIoKSEjNSQhMlk6WnZ1VGUkXCEjPTckJCIreUdIXSgpISIqJCExXCwzSV0kNCRcISM8NyQkIiw6Yl8pZigpISM1JCExeTkkSDBDayNcISM8NyQkIixbJ0hrcCgpISM1JCEyVz0iPjdDIj0jXCEjPTckJCIsV3VfL3kpISM1JCExQyNvaENJbiJcISM8NyQkIixXNlMteikhIzUkITBIZSFmdTg3XCEjOzckJCIsTmBcLSEpKSEjNSQhMSllUzQrXHUhXCEjPDckJCIsXCYpRy8iKSkhIzUkITJrM3gteSpvLVwhIz03JCQiLEBqJnk+KSkhIzUkITEqKWUnZiZISykqWyEjPDckJCIsT2xmKEgpKSEjNSQhMkMkeXgmSHdPKlshIz03JCQiLEF2ZCdSKSkhIzUkITFkRUolUXQhKilbISM8NyQkIitUY0NdKSkhIiokITJiX2RVIiplVClbISM9NyQkIixVKiopZWYpKSEjNSQhMTBjOCkqKkgpelshIzw3JCQiLFVHcC4oKSkhIzUkITF4V1omXFdbKFshIzw3JCQiLFttKDQhKSkpISM1JCEyOW48TyhRTnFbISM9NyQkIiwqKVFCKCopKSkhIzUkITJiMm4uWj1mJ1shIz03JCQiLFk4dSshKikhIzUkITEqcCcpeWxkNidbISM8NyQkIiw3dm0vIiopISM1JCEyTyl5Xi5tUWNbISM9NyQkIixOXEEqPiopISM1JCExKClmKSl6TTBfWyEjPDckJCIsPTJrKkgqKSEjNSQhMXIpPjovZ3UlWyEjPDckJCIsM25qKFIqKSEjNSQhMUROaGtgKUglWyEjPDckJCIsJlJsUV0qKSEjNSQhMnYwWiRbUDlRWyEjPTckJCIsV0Z5JmYqKSEjNSQhMVVCX0M+J1IkWyEjPDckJCIsaEpOLCgqKSEjNSQhMShIQlRgbiJIWyEjPDckJCIsLlxmKykqKSEjNSQhMUQnUlohKm9ZI1shIzw3JCQiLHkheSkpKikqKSEjNSQhMSwoKkcib0AtI1shIzw3JCQiLFElUnMqKiopISM1JCEyd2UnKlsjKXlkIlshIz03JCQiLCp6aHY0ISohIzUkITFiLyh6XmI3IlshIzw3JCQiLEA9IVI/ISohIzUkITE8Rm1CKXBrIVshIzw3JCQiLDNfUywuKiEjNSQhMkQlUWhxKSozLVshIz03JCQiLHJObChSISohIzUkITIxR0V2JFF4KHolISM9NyQkIiwoW1QwXSEqISM1JCEyYlE+Y0xvSnolISM9NyQkIixEYT8uMSohIzUkITIydFc8TiJlKXklISM9NyQkIiwxQ04mcCEqISM1JCExeFoqcFlyV3klISM8NyQkIis6MlghMyohIiokITFPUks0PWh6WiEjPDckJCIseUYlZSozKiEjNSQhMkNxI0cneV9ieCUhIz03JCQiLGErbi01KiEjNSQhMVUuME5QIjN4JSEjPDckJCIrTUVZNSIqISIqJCExUXUyRiMqSG1aISM8NyQkIixmNm0mPiIqISM1JCExOWhncl9GaVohIzw3JCQiLE0kUiEpSCIqISM1JCExXnY/U3h2ZFohIzw3JCQiLFFoNCw5KiEjNSQhMiZIKEg7aD1LdiUhIz03JCQiLEpKbS46KiEjNSQhMicpSDk0TjQoW1ohIz03JCQiLGpldilmIiohIzUkITEyQDNpZ2BXWiEjPDckJCIseik9c3AiKiEjNSQhMlguUy5LQS11JSEjPTckJCIsciVcISp6IiohIzUkITEoeT1KK3BkdCUhIzw3JCQiLCJcYDAhPiohIzUkITEmKWZ3LSFROHQlISM8NyQkIixfRydcKyMqISM1JCEyRDIrQl8peUVaISM9NyQkIix1bSNwNCMqISM1JCExLSVcP0wpeUFaISM8NyQkIixjaFgrQSohIzUkITF4WFMlKUdIPVohIzw3JCQiK3U1V0kjKiEiKiQhMkUhKVsoKkcoeThaISM9NyQkIixXLWYvQyohIzUkITJ1LUpYPGAlNFohIz03JCQiLEpHYyZcIyohIzUkITF1SiYpXFNfMFohIzw3JCQiLE8hUVBnIyohIzUkITFmP0N6LCczcSUhIzw3JCQiLENtUCZwIyohIzUkITEjZiRbYWkicHAlISM8NyQkIiwoM3U+IUcqISM1JCEybE5MSmRPQnAlISM9NyQkIiwvNEwnKkcqISM1JCEyQ0J2aigqKkcpbyUhIz03JCQiLChHYikqKkgqISM1JCExX15AdXomUW8lISM8NyQkIiwiKVxWKTQkKiEjNSQhMSZveVU9WCd6WSEjPDckJCIrYiNILEsqISIqJCExIlIhcCVRZF9uJSEjPDckJCIsMnp1JkgkKiEjNSQhMVlJJ3osTjduJSEjPDckJCIreEl3UiQqISIqJCEyd2JlJlxRIXBtJSEjPTckJCIsSiVlTV0kKiEjNSQhMk87YzM/OENtJSEjPTckJCIsQDxlJmYkKiEjNSQhMTE9XXkzXmVZISM8NyQkIiwpUnhdcCQqISM1JCExbGRjYkxJYVkhIzw3JCQiLG9oJ3l6JCohIzUkITJOIT1FKUdrKlxZISM9NyQkIixFXFUpKlEqISM1JCExLnEyRXBzWFkhIzw3JCQiLCZwP2QqUiohIzUkITFeIzN3O007ayUhIzw3JCQiLGU1di5UKiEjNSQhMSRcc2MtKTRQWSEjPDckJCIsVzYjMz8lKiEjNSQhMVooNE9USElqJSEjPDckJCIrPWtXSSUqISIqJCExKClmXUJIcEdZISM8NyQkIix2LFEpUiUqISM1JCEwXio0Ky14Q1khIzs3JCQiLGteMCxYKiEjNSQhMTRJNCcpKilbP1khIzw3JCQiLEZWbShmJSohIzUkITEzYTcqcG5raCUhIzw3JCQiLFIoWycpcCUqISM1JCExZCYpPk06RjdZISM8NyQkIitZenR6JSohIiokITFqLlZeaDwzWSEjPDckJCIsdjh1K1wqISM1JCExbSlHXz8nKlFnJSEjPDckJCIsJT0iSCtdKiEjNSQhMWJ6ViJRInkqZiUhIzw3JCQiLFVfNC1eKiEjNSQhMlluKnlUMmUmZiUhIz03JCQiLDZqMC5fKiEjNSQhMXlNSj5BVSJmJSEjPDckJCIsWyFIZUgmKiEjNSQhMWx6MCNSMndlJSEjPDckJCIsdXE6LWEqISM1JCEyRUNIaHJVS2UlISM9NyQkIixHImVzXCYqISM1JCEyYU40K3JYJHpYISM9NyQkIiwob2InKWYmKiEjNSQhMVt3P2N4PnZYISM8NyQkIiwqMzFkcCYqISM1JCEyJ2YoKT1dV0JyWCEjPTckJCIsKTNvTSFlKiEjNSQhMUUpSCQpXFRvYyUhIzw3JCQiLGg/eScqZSohIzUkITEjKkc1SlQvalghIzw3JCQiLGJVcC1nKiEjNSQhMTg3cyZcVChlWCEjPDckJCIsQTxBKjQnKiEjNSQhMScpeWdjcCNbYiUhIzw3JCQiLCx3IVs/JyohIzUkITFObktCRGJdWCEjPDckJCIsZS4iZkgnKiEjNSQhMTtaJm9scW9hJSEjPDckJCIsa2RtKlInKiEjNSQhMURtO3JXb1VYISM8NyQkIixrJCkpKSpcJyohIzUkITFyRjM5emtRWCEjPDckJCIsIlxYK2cnKiEjNSQhMiZwQmBRNGlNWCEjPTckJCIsZVQkKSpwJyohIzUkITE2KG9XbToxYCUhIzw3JCQiLEYpKnAmeicqISM1JCEvUFkzVnhFWCEjOjckJCIsYUpMKipvKiEjNSQhLzlPLSlHRV8lISM6NyQkIixISzUpKnAqISM1JCEwXCNSJW8lbz1YISM7NyQkIiwjM2E/NSgqISM1JCExVVlNKSkzYTlYISM8NyQkIixPWTonPigqISM1JCExbjpHNGh6NVghIzw3JCQiLGtMOit0KiEjNSQhMjBAIUhNV20xWCEjPTckJCIsQmd3KlIoKiEjNSQhMWViJDQqUXItWCEjPDckJCIsQWk4KlwoKiEjNSQhMSd5KD5iJ3ooKVwlISM8NyQkIit5R0hnKCohIiokITJZO3MmXHVuJVwlISM9NyQkIiw6Yl8pcCgqISM1JCExSHJsKGUwNFwlISM8NyQkIixbJ0hreigqISM1JCEwPEknXCFccVslISM7NyQkIixXdV8veiohIzUkITEmNGBoVil6I1slISM8NyQkIixXNlMtISkqISM1JCExJjNzSGZjKnlXISM8NyQkIixOYFwtIikqISM1JCEyJXB1Uyc+TV1aJSEjPTckJCIsXCYpRy8jKSohIzUkITEiei5qMF81WiUhIzw3JCQiLEBqJnlIKSohIzUkITFSKlsxdyhSblchIzw3JCQiLE9sZihSKSohIzUkITJhNWJFeTNOWSUhIz03JCQiLEF2ZCdcKSohIzUkITIlXEEnUiFmbGZXISM9NyQkIitUY0NnKSohIiokITIxInA6bjthYlchIz03JCQiLFUqKillcCkqISM1JCExJmY6Ozo8PlglISM8NyQkIixVR3AuKSkqISM1JCExOXEkXEtVeFclISM8NyQkIixbbSg0ISopKiEjNSQhMHZpMFIiKVJXJSEjOzckJCIsKilRQigqKikqISM1JCExJEhKLUFtLVclISM8NyQkIixZOHUrIioqISM1JCEyRDhkeiV6Rk9XISM9NyQkIiw3dm0vIyoqISM1JCExXCkpKTRhIUdLVyEjPDckJCIsTlxBKkgqKiEjNSQhMSdRaTFkXCdHVyEjPDckJCIsPTJrKlIqKiEjNSQhMWJ1bm0qKnpDVyEjPDckJCIsM25qKFwqKiEjNSQhMXUpM2lSXDVVJSEjPDckJCIsJlJsUWcqKiEjNSQhMXMpPUxyISpwVCUhIzw3JCQiLFdGeSZwKiohIzUkITFlSiJmbSVbOFchIzw3JCQiLGhKTiwpKiohIzUkITFGWXc4WFk0VyEjPDckJCIsLlxmKyoqKiEjNSQhMWtXRlo9cDBXISM8NyQkIiQrIiEiIiQhMS0hUSRlIz4+UyUhIzwtJSZDT0xPUkc2JyUkUkdCRyQiKUMpZXElISIpJCIiISEiIiQiKCc+IVwmISIpLSUrX0FUVFJJQlVURUc2Iy8lJ3NvdXJjZUclLG1hdGhkZWZhdWx0Ry0lJVZJRVdHNiQ7JCIiIiEiIyQiJCsiISIiJShERUZBVUxURy0mJSZfQVhJU0c2IyIiIjYnLSUrX0dSSURMSU5FU0c2Jy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUqTElORVNUWUxFRzYjIiIhLSUqVEhJQ0tORVNTRzYjIiIhLSUtVFJBTlNQQVJFTkNZRzYjJCIiISEiIi0lKV9WSVNJQkxFRzYjIiIhLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSYlJl9BWElTRzYjIiIjNictJStfR1JJRExJTkVTRzYnLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSUpX1ZJU0lCTEVHNiMiIiEtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKkxJTkVTVFlMRUc2IyIiIS0lKlRISUNLTkVTU0c2IyIiIS0lLVRSQU5TUEFSRU5DWUc2IyQiIiEhIiItJStBWEVTTEFCRUxTRzYkLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEoJiM5NTI7fGlyNiIvJSdmYW1pbHlHUSE2Ii8lJXNpemVHUSMxMDYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiJRITYiLSUpX1ZJU0lCTEVHNiMiIiItJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiRnJiEiIi0lKUJPVU5EU19ZRzYjJCIjcSEiIi0lLUJPVU5EU19XSURUSEc2IyQiJStMISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJT9RISIiLSUpQ0hJTERSRU5HNiItJStBTk5PVEFUSU9ORzYnLSUpQk9VTkRTX1hHNiMkIiIhISIiLSUpQk9VTkRTX1lHNiMkIiIhISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlK1MhIiItJS5CT1VORFNfSEVJR0hURzYjJCIlK1MhIiItJSlDSElMRFJFTkc2Ig==Ig== JCI/VnltaG5BLGRUc0YyJCllKSohI0k= JCI/IzNlLCdvYSkqeSQzMzQhb0IhKiEjSQ== JCI/ckViKClwITQmUkxeJ0cuRVEiISNI JCE/ZFooKWVBTk13ImVtOlQ5LSYhI0g= UWRwPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT02Ig== NiotJSdDVVJWRVNHNiQ3ZGluNyQkIiIiISIjJCExKSllTikpejRbXyEjOjckJCIpTUVZPyEiKiQhMSQpZU4pKXo0W18hIzo3JCQiKmY2bSZIISM1JCExPTlCKSl6NFtfISM6NyQkIipNJFIhKVIhIzUkITE5NUVaejRbXyEjOjckJCIqUWg0LCYhIzUkITImeiZHM3EnNFtfISM7NyQkIipKSm0uJyEjNSQhMT1fMVdjM1tfISM6NyQkIipqZXYpcCEjNSQhMTJvVDBEL1tfISM6NyQkIip6KT1zeiEjNSQhMUBUZlR4InpDJiEjOjckJCIqciVcISoqKSEjNSQhMDh1JWZMalpfISM5NyQkIisiXGAwKyIhIzUkITEwXig0ZzdyQyYhIzo3JCQiK19HJ1w1IiEjNSQhMi9AZjkqKlxpQyYhIzs3JCQiK3VtI3A+IiEjNSQhMiZHYjJJSTtYXyEjOzckJCIrY2hYKzghIzUkITFRejJ4PmBWXyEjOjckJCIqdTVXUyIhIiokITFoI0d3VlA5QyYhIzo3JCQiK1ctZi86ISM1JCExZHQhNCsjKSpRXyEjOjckJCIrSkdjJmYiISM1JCExaWtfeikqUU9fISM6NyQkIitPIVFQcSIhIzUkITFIYiwmUiMpR0ImISM6NyQkIitDbVAmeiIhIzUkITEoW0UlM2lkSF8hIzo3JCQiKygzdT4hPiEjNSQhMTAmcFdxIlFEXyEjOjckJCIrLzRMJyo+ISM1JCExRUNfIz4iUkBfISM6NyQkIisoR2IpKjQjISM1JCExJDRzQGlgbkAmISM6NyQkIisiKVxWKT4jISM1JCExWjt1P043N18hIzo3JCQiKmIjSCxCISIqJCExJyo0NilRNHI/JiEjOjckJCIrMnp1JlIjISM1JCEyRChRPXpGUC1fISM7NyQkIip4SXdcIyEiKiQhMlh5S1coXDooPiYhIzs3JCQiK0olZU1nIyEjNSQhMSMqeVY8JFw7PiYhIzo3JCQiK0A8ZSZwIyEjNSQhMXNgP2MxIm89JiEjOjckJCIrKVJ4XXojISM1JCExJTM2bEZnOj0mISM6NyQkIitvaCd5KkchIzUkITEjKkhPPkA4d14hIzo3JCQiK0VcVSkqSCEjNSQhMVsiejw8UTM8JiEjOjckJCIrJnA/ZDQkISM1JCEwKEdjRiNbZDsmISM5NyQkIitlNXYuSyEjNSQhMSRwXDEiNDpnXiEjOjckJCIrVzYjM0kkISM1JCExXkwnW0AkPWJeISM6NyQkIio9a1dTJCEiKiQhMWFCXT5jJipcXiEjOjckJCIrdixRKVwkISM1JCExQE9NNWJIWF4hIzo3JCQiK2teMCxPISM1JCExXnhBKlwjSFNeISM6NyQkIitGVm0ocCQhIzUkITEnNG9HIyl5YzgmISM6NyQkIitSKFsnKXokISM1JCExUEQsdyllNDgmISM6NyQkIipZenQqUSEiKiQhMVYsXVorWEVeISM6NyQkIit2OHUrUyEjNSQhMXcnZVhaWD03JiEjOjckJCIrJT0iSCtUISM1JCEwaG9AT0R2NiYhIzk3JCQiK1VfNC1VISM1JCExUGNFa2RBOF4hIzo3JCQiKzZqMC5WISM1JCExKD5qWUYiMzReISM6NyQkIitbIUhlUiUhIzUkITFgU2AqW3lgNSYhIzo3JCQiK3VxOi1YISM1JCExKD4uISpHZjc1JiEjOjckJCIrRyJlc2YlISM1JCExc2hpRHdvKDQmISM6NyQkIisob2InKXAlISM1JCExL01WdmcqUjQmISM6NyQkIisqMzFkeiUhIzUkITE0c08rWmQhNCYhIzo3JCQiKykzb00hXCEjNSQhMkRyKikqM0YhcDMmISM7NyQkIitoP3knKlwhIzUkITFyTkFwKEhRMyYhIzo3JCQiK2JVcC1eISM1JCEwKmU7Wi5ZITMmISM5NyQkIitBPEEqPiYhIzUkITEtSiM0XihceF0hIzo3JCQiKyx3IVtJJiEjNSQhMUJRJGVpc1YyJiEjOjckJCIrZS4iZlImISM1JCExJUh5czRzPDImISM6NyQkIitrZG0qXCYhIzUkITFvSCFHUDsqb10hIzo3JCQiK2skKSkpKmYmISM1JCEyTnNRSidIRW1dISM7NyQkIisiXFgrcSYhIzUkITF5LTQjSDdQMSYhIzo3JCQiK2VUJCkqeiYhIzUkITAqMyczRnA3MSYhIzk3JCQiK0YpKnAmKmUhIzUkITEwayZlbDchZl0hIzo3JCQiK2FKTCoqZiEjNSQhMT0mKXpTMG5jXSEjOjckJCIrSEs1KTQnISM1JCExbD1yIkdJWDAmISM6NyQkIisjM2E/PychIzUkITFERXlBQlBfXSEjOjckJCIrT1k6J0gnISM1JCEyMDojKilwL11dXSEjOzckJCIra0w6K2shIzUkITFmeXIuKD4mW10hIzo3JCQiK0JndypcJyEjNSQhMjt1WFMkcHFZXSEjOzckJCIrQWk4KmYnISM1JCExKVE3MSEpeVwvJiEjOjckJCIqeUdIcSchIiokITImMyopPiI0ZEsvJiEjOzckJCIrOmJfKXonISM1JCExbkRpNFp1VF0hIzo3JCQiK1snSGsqbyEjNSQhMURVJFImb0VTXSEjOjckJCIrV3VfL3EhIzUkITFwSGYnUjsoUV0hIzo3JCQiK1c2Uy1yISM1JCExPSZwMjwlUVBdISM6NyQkIitOYFwtcyEjNSQhMV8jKSoqZSw0T10hIzo3JCQiK1wmKUcvdCEjNSQhMWExc1hLJVsuJiEjOjckJCIrQGomeVIoISM1JCEyTipcbXhvdkxdISM7NyQkIitPbGYoXCghIzUkITBldV1AZ0UuJiEjOTckJCIrQXZkJ2YoISM1JCExL3lEUkdqSl0hIzo3JCQiKlRjQ3EoISIqJCExW05SIz4qZkldISM6NyQkIitVKiopZXooISM1JCExNGBCJGZUKEhdISM6NyQkIitVR3AueiEjNSQhMUJ3XF5RIilHXSEjOjckJCIrW20oNCspISM1JCEwaG47Jz0uR10hIzk3JCQiKyopUUIoNCkhIzUkITJ2RzpFRDN0LSYhIzs3JCQiK1k4dSsjKSEjNSQhMSN6aHNDJWVFXSEjOjckJCIrN3ZtLyQpISM1JCExRStJTkAiZi0mISM6NyQkIitOXEEqUikhIzUkITJ2Jz5lLHFNRF0hIzs3JCQiKz0yaypcKSEjNSQhMndxZjIhUnpDXSEjOzckJCIrM25qKGYpISM1JCEwYHRoZCpIQ10hIzk3JCQiKyZSbFFxKSEjNSQhMS8ielMqSCJRLSYhIzo3JCQiK1dGeSZ6KSEjNSQhMVhNbCg9S00tJiEjOjckJCIraEpOLCopISM1JCExNCZmeGJSSS0mISM6NyQkIisuXGYrISohIzUkITImNDRKd0dyQV0hIzs3JCQiK3kheSkpNCohIzUkITE6MHE3KEdDLSYhIzo3JCQiK1ElUnM+KiEjNSQhMWZpLmZDPUFdISM6NyQkIisqemh2SCohIzUkITFBJ3l0XXA+LSYhIzo3JCQiK0A9IVJTKiEjNSQhMWpXKltyJXlAXSEjOjckJCIrM19TLCYqISM1JCEyRCNIVFs3bEBdISM7NyQkIityTmwoZiohIzUkITFXJnBgSV86LSYhIzo3JCQiKyhbVDBxKiEjNSQhMWAlUVVlIltAXSEjOjckJCIrRGE/LikqISM1JCEwcDAzNVk5LSYhIzk3JCQiKzFDTiYqKSohIzUkITE6L19wS1dAXSEjOjckJCIrOjJYKzUhIiokITFUXStJV1pAXSEjOjckJCIseUYlZTQ1ISM1JCExZE5TJVtHOi0mISM6NyQkIixhK24tLSIhIzUkITFLXkpJSmlAXSEjOjckJCIrTUVZSTUhIiokITFfKyl5PFc8LSYhIzo3JCQiLGY2bSZSNSEjNSQhMTcnb18hcCg9LSYhIzo3JCQiLE0kUiEpXDUhIzUkITAnPWcoPWA/LSYhIzk3JCQiLFFoNCwxIiEjNSQhMVFNR0koZUEtJiEjOjckJCIsSkptLjIiISM1JCEwZiNRIlshXEFdISM5NyQkIixqZXYpejUhIzUkITE3Ij5zKilHRi0mISM6NyQkIix6KT1zKjMiISM1JCExPHI7KikqKSpILSYhIzo3JCQiLHIlXCEqKjQiISM1JCExPFFjJlwtTC0mISM6NyQkIiwiXGAwNTYhIzUkITElRypvNSlHTy0mISM6NyQkIixfRydcPzYhIzUkITEkeWJSYCkpUi0mISM6NyQkIix1bSNwSDYhIzUkITFrT0RRXUtDXSEjOjckJCIsY2hYKzkiISM1JCExdFJnJUdEWi0mISM6NyQkIit1NVddNiEiKiQhMUwjb0BQXF4tJiEjOjckJCIsVy1mLzsiISM1JCEyTm9Jcl15Yi0mISM7NyQkIixKR2MmcDYhIzUkITEwJlFpNiYpZi0mISM6NyQkIixPIVFQIT0iISM1JCExS0ROKCkqKVtFXSEjOjckJCIsQ21QJio9IiEjNSQhMSVwN09vS3AtJiEjOjckJCIsKDN1Pis3ISM1JCExLXBxL3hZRl0hIzo3JCQiLC80TCc0NyEjNSQhMT5ocid5ZHotJiEjOjckJCIsKEdiKSo+NyEjNSQhMVUpM20hR15HXSEjOjckJCIsIilcVilINyEjNSQhMjAkKVE+cWQhSF0hIzs3JCQiK2IjSCxDIiEiKiQhMTNbUS1Ha0hdISM6NyQkIiwyenUmXDchIzUkITEmKiopbyVmJT5JXSEjOjckJCIreEl3ZjchIiokITFgZDUnKlshMy4mISM6NyQkIixKJWVNcTchIzUkITB5U3AoXFhKXSEjOTckJCIsQDxlJno3ISM1JCEwLjwkKipRLktdISM5NyQkIiwpUnhdKkciISM1JCExJFFoSlJzRS4mISM6NyQkIixvaCd5KkgiISM1JCExQ0x4bWdNTF0hIzo3JCQiLEVcVSk0OCEjNSQhMSxnJjRiPVMuJiEjOjckJCIsJnA/ZD44ISM1JCExbiQ9LF0ib01dISM6NyQkIixlNXYuTCIhIzUkITEuSThZOFZOXSEjOjckJCIsVzYjM1M4ISM1JCExQGpNOHI2T10hIzo3JCQiKz1rV104ISIqJCExIkheM1xoby4mISM6NyQkIix2LFEpZjghIzUkITFUIio+bmxhUF0hIzo3JCQiLGteMCxQIiEjNSQhMVckeT1xMSRRXSEjOjckJCIsRlZtKHo4ISM1JCExRD1IJ0dLIVJdISM6NyQkIixSKFsnKSpRIiEjNSQhMXMhb0U7LClSXSEjOjckJCIrWXp0KlIiISIqJCExYEwhNCFIY1NdISM6NyQkIix2OHUrVCIhIzUkITE7WTwkb3E4LyYhIzo3JCQiLCU9IkgrVSIhIzUkITEzN1FpJGVALyYhIzo3JCQiLFVfNC1WIiEjNSQhMVh0I3BVdEgvJiEjOjckJCIsNmowLlciISM1JCExUC4xMDV6Vl0hIzo3JCQiLFshSGVcOSEjNSQhMmJiZCN5LGJXXSEjOzckJCIsdXE6LVkiISM1JCExREIhKT4kSGEvJiEjOjckJCIsRyJlc3A5ISM1JCEwLWJ1ZUJpLyYhIzk3JCQiLChvYicpejkhIzUkITFFKlJWWnlxLyYhIzo3JCQiLCozMWQqWyIhIzUkITF1VCZbRC96LyYhIzo3JCQiLCkzb00rOiEjNSQhMSd6dSlvJkgpW10hIzo3JCQiLGg/eSc0OiEjNSQhMWwkby52UCdcXSEjOjckJCIsYlVwLV8iISM1JCExPjolPmdpMDAmISM6NyQkIixBPEEqSDohIzUkITExanEsQlReXSEjOjckJCIsLHchW1M6ISM1JCExWyMzKyUqW0IwJiEjOjckJCIsZS4iZlw6ISM1JCExXFg6c0g7YF0hIzo3JCQiLGtkbSpmOiEjNSQhMGIiUSlbJzRhXSEjOTckJCIsayQpKSkqcDohIzUkITFFdUxIWCtiXSEjOjckJCIsIlxYKyFlIiEjNSQhMVIlUVkpeiJmMCYhIzo3JCQiLGVUJCkqKmUiISM1JCExTVx1c1EkbzAmISM6NyQkIixGKSpwJipmIiEjNSQhMDk4J1EhPngwJiEjOTckJCIsYUpMKjQ7ISM1JCEybDtcW2Qib2VdISM7NyQkIixISzUpPjshIzUkITFKPjFRVWdmXSEjOjckJCIsIzNhP0k7ISM1JCExOiozZ3EhZWddISM6NyQkIixPWTonUjshIzUkITFQWyk9R3A5MSYhIzo3JCQiLGtMOitsIiEjNSQhMSlRYDNIY0MxJiEjOjckJCIsQmd3KmY7ISM1JCExbmBHNmtTal0hIzo3JCQiLEFpOCpwOyEjNSQhMVVyWyJwZVYxJiEjOjckJCIreUdIIW8iISIqJCExLHpCcHpObF0hIzo3JCQiLDpiXykqbyIhIzUkITElcE4+USNHbV0hIzo3JCQiLFsnSGsqcCIhIzUkITFeMClmKkhCbl0hIzo3JCQiLFd1Xy9yIiEjNSQhMjBUWCc0cUdvXSEjOzckJCIsVzZTLXMiISM1JCExWj5XL19DcF0hIzo3JCQiLE5gXC10IiEjNSQhMkR3YGkiKUctMiYhIzs3JCQiLFwmKUcvdSIhIzUkITEudFQ3R0JyXSEjOjckJCIsQGomeVw8ISM1JCEyWChHIUcmKWVAMiYhIzs3JCQiLE9sZihmPCEjNSQhMTFmKnBAXEoyJiEjOjckJCIsQXZkJ3A8ISM1JCEyMEliS0JOVDImISM7NyQkIitUY0MheSIhIiokITFXPSIpZkw+dl0hIzo3JCQiLFUqKillKnkiISM1JCExJSp5O0QqSGgyJiEjOjckJCIsVUdwLiE9ISM1JCExX0UoeW84czImISM6NyQkIixbbSg0NT0hIzUkITFCIj5UXSU+eV0hIzo3JCQiLCopUUIoPj0hIzUkITFcZy0lXG4iel0hIzo3JCQiLFk4dSskPSEjNSQhMVRpXnFrQCEzJiEjOjckJCIsN3ZtLyU9ISM1JCEyO3BeKipSczczJiEjOzckJCIsTlxBKlw9ISM1JCExJmVOJjRhQiMzJiEjOjckJCIsPTJrKmY9ISM1JCExN3FlaC5FJDMmISM6NyQkIiwzbmoocD0hIzUkITIwYDxEemlVMyYhIzs3JCQiLCZSbFEhKT0hIzUkITF6OyQ+eF5gMyYhIzo3JCQiLFdGeSYqKT0hIzUkITFQJltWI2ZIJzMmISM6NyQkIixoSk4sIT4hIzUkITFKWm0lUSNRKDMmISM6NyQkIiwuXGYrIj4hIzUkITJ2bz55azAlKTMmISM7NyQkIix5IXkpKT4+ISM1JCExcGotJ3o/JSozJiEjOjckJCIsUSVSc0g+ISM1JCEwKDMtUyVRLzQmISM5NyQkIiwqemh2Uj4hIzUkITEnUlR2Lnk5NCYhIzo3JCQiLEA9IVJdPiEjNSQhMSNmZm51ImUjNCYhIzo3JCQiLDNfUywnPiEjNSQhMVU7K2BfZiQ0JiEjOjckJCIsck5sKHA+ISM1JCEwdHl3MShmJTQmISM5NyQkIiwoW1QwISk+ISM1JCExei4lKjMlcGM0JiEjOjckJCIsRGE/Lio+ISM1JCEyO0s6XCEzdSc0JiEjOzckJCIsMUNOJioqPiEjNSQhMk4/Km9wTnEoNCYhIzs3JCQiKzoyWDU/ISIqJCExQCtvUGAlKSk0JiEjOjckJCIseUYlZT4/ISM1JCExbyhRb3UsKSo0JiEjOjckJCIsYStuLS4jISM1JCEyRHZyK11ANDUmISM7NyQkIitNRVlTPyEiKiQhMSxbPWs3Kj41JiEjOjckJCIsZjZtJlw/ISM1JCExJj4rbUVaSDUmISM6NyQkIixNJFIhKWY/ISM1JCExQiFHPkZCUzUmISM6NyQkIixRaDQsMiMhIzUkITFVWEIkSDJeNSYhIzo3JCQiLEpKbS4zIyEjNSQhMVleJFEpcD0xXiEjOjckJCIsamV2KSozIyEjNSQhMk5NKVt4Jyk9Ml4hIzs3JCQiLHopPXMqNCMhIzUkITFpTlQ7bEEzXiEjOjckJCIsciVcISo0QCEjNSQhMXImZiYpWyskNF4hIzo3JCQiLCJcYDA/QCEjNSQhMVEiUTBoci42JiEjOjckJCIsX0cnXElAISM1JCExUk0icCZSWjZeISM6NyQkIix1bSNwUkAhIzUkITEzK0lQYFc3XiEjOjckJCIsY2hYKzojISM1JCExaCMpXD8kUk42JiEjOjckJCIrdTVXZ0AhIiokITE2KFxfQFFZNiYhIzo3JCQiLFctZi88IyEjNSQhMSMqKmZlYihwOl4hIzo3JCQiLEpHYyZ6QCEjNSQhMVdkSCwpZm02JiEjOjckJCIsTyFRUCE+IyEjNSQhMnYmW3UlRy95NiYhIzs3JCQiLENtUCYqPiMhIzUkITEpbz5ZLHUoPV4hIzo3JCQiLCgzdT41QSEjNSQhMW8wV0pBISo+XiEjOjckJCIsLzRMJz5BISM1JCExRDhUSDUhNDcmISM6NyQkIiwoR2IpKkhBISM1JCExJnBUYChwKj43JiEjOjckJCIsIilcVilSQSEjNSQhMTAqWz1rU0k3JiEjOjckJCIrYiNILEQjISIqJCExOTVvSCdIVDcmISM6NyQkIiwyenUmZkEhIzUkITBGK2hsSF43JiEjOTckJCIreEl3cEEhIiokITAmb2AhRzNpNyYhIzk3JCQiLEolZU0hRyMhIzUkITB5KXooZUd0NyYhIzk3JCQiLEA8ZSYqRyMhIzUkITElcEs9cy4kR14hIzo3JCQiLClSeF0qSCMhIzUkITEpSFc8d2MkSF4hIzo3JCQiLG9oJ3k0QiEjNSQhMTIhZSV6V1dJXiEjOjckJCIsRVxVKT5CISM1JCExYSYpbyVSMzo4JiEjOjckJCIsJnA/ZEhCISM1JCExJFJ6Z2NQRDgmISM6NyQkIixlNXYuTSMhIzUkITEmb1p0Kip6TzgmISM6NyQkIixXNiMzXUIhIzUkITJ2Sy5hQjFaOCYhIzs3JCQiKz1rV2dCISIqJCEwKXlkTDshZTgmISM5NyQkIix2LFEpcEIhIzUkITFqJCkqeiFSek9eISM6NyQkIixrXjAsUSMhIzUkITJOVyopPk55eTgmISM7NyQkIixGVm0oKlEjISM1JCExR10yWyQpKilRXiEjOjckJCIsUihbJykqUiMhIzUkITEteVo8VCcqUl4hIzo3JCQiK1l6dDRDISIqJCEybFhEQm0wNTkmISM7NyQkIix2OHUrVSMhIzUkITFzVzVzYjRVXiEjOjckJCIsJT0iSCtWIyEjNSQhMVpcJWV5V0o5JiEjOjckJCIsVV80LVcjISM1JCExeWU7R3NAV14hIzo3JCQiLDZqMC5YIyEjNSQhMmIhKnl0QiFHWF4hIzs3JCQiLFshSGVmQyEjNSQhMmxdSHhfY2k5JiEjOzckJCIsdXE6LVojISM1JCExZnFbXFtQWl4hIzo3JCQiLEciZXN6QyEjNSQhMTA7cjZYUFteISM6NyQkIiwob2InKSpbIyEjNSQhMSpHWCRRKFIlXF4hIzo3JCQiLCozMWQqXCMhIzUkITB0UWpuZS86JiEjOTckJCIsKTNvTTVEISM1JCExQTAlUU0qZV5eISM6NyQkIixoP3knPkQhIzUkITFAbG55eGNfXiEjOjckJCIsYlVwLWAjISM1JCExPnc1cnZuYF4hIzo3JCQiLEE8QSpSRCEjNSQhMTdYJ1FLKW9hXiEjOjckJCIsLHchW11EISM1JCEvWCk+OSR6Yl4hIzg3JCQiLGUuImZmRCEjNSQhMGwnb1BkdWNeISM5NyQkIixrZG0qcEQhIzUkITFLNylRJilIeTomISM6NyQkIixrJCkpKSp6RCEjNSQhMSY0YUJEdyllXiEjOjckJCIsIlxYKyFmIyEjNSQhMU1IWWg2IypmXiEjOjckJCIsZVQkKSoqZiMhIzUkITFPciQqNDknNDsmISM6NyQkIixGKSpwJjRFISM1JCExLFlPIikqZj47JiEjOjckJCIsYUpMKj5FISM1JCExUE9pJ2VRSTsmISM6NyQkIixISzUpSEUhIzUkITEmSCdROGQxa14hIzo3JCQiLCMzYT9TRSEjNSQhMU40Kj16WF47JiEjOjckJCIsT1k6J1xFISM1JCExKjNsSnBBaDsmISM6NyQkIixrTDorbSMhIzUkITEyL3I/OT9uXiEjOjckJCIsQmd3KnBFISM1JCExYGUjUXNMI29eISM6NyQkIixBaTgqekUhIzUkITFtczAmZmkjcF4hIzo3JCQiK3lHSCFwIyEiKiQhMUVOZGhpTHFeISM6NyQkIiw6Yl8pKnAjISM1JCExayJlIlFVS3JeISM6NyQkIixbJ0hrNEYhIzUkITElKXBQWV5Mc14hIzo3JCQiLFd1Xy9zIyEjNSQhMnYyKSkzQV1NPCYhIzs3JCQiLFc2Uy10IyEjNSQhMWEmUkgkKWVXPCYhIzo3JCQiLE5gXC11IyEjNSQhMVZ1N1AkKlt2XiEjOjckJCIsXCYpRy92IyEjNSQhMlhOIj0mSE9sPCYhIzs3JCQiLEBqJnlmRiEjNSQhMjosIW8/eFx4XiEjOzckJCIsT2xmKHBGISM1JCExakwnZWRAJnleISM6NyQkIixBdmQnekYhIzUkITJEcFFaaE8mel4hIzs3JCQiK1RjQyF6IyEiKiQhMVEkXEVEQDE9JiEjOjckJCIsVSoqKWUqeiMhIzUkITFsNyhHVHg6PSYhIzo3JCQiLFVHcC4iRyEjNSQhMTQpb1xZekU9JiEjOjckJCIsW20oND9HISM1JCExUToxM0huJD0mISM6NyQkIiwqKVFCKEhHISM1JCExWDdKZFtsJT0mISM6NyQkIixZOHUrJUchIzUkITB5Kip5ajRkPSYhIzk3JCQiLDd2bS8mRyEjNSQhMTpYMilcbm49JiEjOjckJCIsTlxBKmZHISM1JCExMj5CYCpHeD0mISM6NyQkIiw9MmsqcEchIzUkITEnSChlIykpWygpPSYhIzo3JCQiLDNuaih6RyEjNSQhMExsNjlWKCo9JiEjOTckJCIsJlJsUSEqRyEjNSQhMS96disoPjM+JiEjOjckJCIsV0Z5JioqRyEjNSQhMDAudz1dPD4mISM5NyQkIixoSk4sIkghIzUkITFwYCI+cDxHPiYhIzo3JCQiLC5cZisjSCEjNSQhMUMleTwuP1E+JiEjOjckJCIseSF5KSlISCEjNSQhMnZfO2hjNls+JiEjOzckJCIsUSVSc1JIISM1JCExIltSTXctZT4mISM6NyQkIiwqemh2XEghIzUkITFOUyJmYjdvPiYhIzo3JCQiLEA9IVJnSCEjNSQhMUh6Km9pIil5PiYhIzo3JCQiLDNfUywoSCEjNSQhMSJIU2dvZykpPiYhIzo3JCQiLHJObCh6SCEjNSQhMWYmemkuRSkqPiYhIzo3JCQiLChbVDAhKkghIzUkITFGbk5lbiYzPyYhIzo3JCQiLERhPy4rJCEjNSQhMTNGO3RSKT0/JiEjOjckJCIsMUNOJjRJISM1JCExSyZbLSlbIUc/JiEjOjckJCIrOjJYP0khIiokITExeXhNVypRPyYhIzo3JCQiLHlGJWVISSEjNSQhMSx5KzldIVs/JiEjOjckJCIsYStuLS8kISM1JCExJSlIQ14ob2U/JiEjOjckJCIrTUVZXUkhIiokITFWKm9obyMpbz8mISM6NyQkIixmNm0mZkkhIzUkITFvOEpMcHkyXyEjOjckJCIsTSRSISlwSSEjNSQhMUB1O1BFISkzXyEjOjckJCIsUWg0LDMkISM1JCExWEUoKW9QIyk0XyEjOjckJCIsSkptLjQkISM1JCExeHdOVihRM0AmISM6NyQkIixqZXYpKjQkISM1JCExMkU1KmV5PEAmISM6NyQkIix6KT1zNEohIzUkITJEdG8pZjB2N18hIzs3JCQiLHIlXCEqPkohIzUkITJYeSl5LFh2OF8hIzs3JCQiLCJcYDBJSiEjNSQhMSpvISpRJFJ2OV8hIzo3JCQiLF9HJ1xTSiEjNSQhMndALGBpIXk6XyEjOzckJCIsdW0jcFxKISM1JCEyOlQ1NyFRbztfISM7NyQkIixjaFgrOyQhIzUkITFbSjIqRypwPF8hIzo3JCQiK3U1V3FKISIqJCEwJCllY2U8KD1fISM5NyQkIixXLWYvPSQhIzUkITBrcyo0d3A+XyEjOTckJCIsSkdjJio9JCEjNSQhMTcyPGtrZT9fISM6NyQkIixPIVFQK0shIzUkITJiSiRHST9rQF8hIzs3JCQiLENtUCY0SyEjNSQhMT5gJylvXWBBXyEjOjckJCIsKDN1Pj9LISM1JCEwRjYqUURkQl8hIzk3JCQiLC80TCdISyEjNSQhMXBeJ2VtKltDXyEjOjckJCIsKEdiKSpSSyEjNSQhMXZtTCFmJVxEXyEjOjckJCIsIilcVilcSyEjNSQhMiYpXCEpNENda0EmISM7NyQkIitiI0gsRSQhIiokITE2WUJNZ1dGXyEjOjckJCIsMnp1JnBLISM1JCExSDpCKEdmJEdfISM6NyQkIit4SXd6SyEiKiQhMmI0NidvSU1IXyEjOzckJCIsSiVlTSFIJCEjNSQhMWV4JG9fai5CJiEjOjckJCIsQDxlJipIJCEjNSQhMSY9V1VtXTdCJiEjOjckJCIsKVJ4XTRMISM1JCExPCV5eGMyQUImISM6NyQkIixvaCd5PkwhIzUkITEuTiU0IVs+TF8hIzo3JCQiLEVcVSlITCEjNSQhMSdcb15IZlRCJiEjOjckJCIsJnA/ZFJMISM1JCExaUJVWzc0Tl8hIzo3JCQiLGU1di5OJCEjNSQhMUYrWyllQ2hCJiEjOjckJCIsVzYjM2dMISM1JCExIilcVSw9MFBfISM6NyQkIis9a1dxTCEiKiQhMTNMTF4vL1FfISM6NyQkIix2LFEpekwhIzUkITF2b0M3XiQqUV8hIzo3JCQiLGteMCxSJCEjNSQhMWlkai4+IipSXyEjOjckJCIsRlZtKCpSJCEjNSQhMmI1JHlRKEgzQyYhIzs3JCQiLFIoWycpNE0hIzUkITFgZFpYeXlUXyEjOjckJCIrWXp0Pk0hIiokITFEQEEqR0JGQyYhIzo3JCQiLHY4dStWJCEjNSQhMCo9KFxELFBDJiEjOTckJCIsJT0iSCtXJCEjNSQhMTQmWyVSPWtXXyEjOjckJCIsVV80LVgkISM1JCExKik+VSFSLWNDJiEjOjckJCIsNmowLlkkISM1JCExaUhkY09iWV8hIzo3JCQiLFshSGVwTSEjNSQhMS9WbS1tVVpfISM6NyQkIix1cTotWyQhIzUkITB1LDJzRCVbXyEjOTckJCIsRyJlcypbJCEjNSQhMSxMKyk0PSRcXyEjOjckJCIsKG9iJykqXCQhIzUkITEvZ2VpI28tRCYhIzo3JCQiLCozMWQ0TiEjNSQhMWUzKilRazxeXyEjOjckJCIsKTNvTT9OISM1JCEwNEJvVCQ9X18hIzk3JCQiLGg/eSdITiEjNSQhMXR6I2U7YUlEJiEjOjckJCIsYlVwLWEkISM1JCExPCpHQDVUU0QmISM6NyQkIixBPEEqXE4hIzUkITBNZnVKUlxEJiEjOTckJCIsLHchW2dOISM1JCExKjRIdFY/ZkQmISM6NyQkIixlLiJmcE4hIzUkITFlTSVSImV3Y18hIzo3JCQiLGtkbSp6TiEjNSQhMTNdVydHRnhEJiEjOjckJCIsayQpKSkqKmUkISM1JCExXkVZJXBhJ2VfISM6NyQkIiwiXFgrK08hIzUkITE7c1klPiFlZl8hIzo3JCQiLGVUJCkqNE8hIzUkITFlUnQmKjRdZ18hIzo3JCQiLEYpKnAmPk8hIzUkITFhV2giUSVRaF8hIzo3JCQiLGFKTCpITyEjNSQhMWMxaDAhUUJFJiEjOjckJCIsSEs1KVJPISM1JCExY0MnUWVYS0UmISM6NyQkIiwjM2E/XU8hIzUkITF0RlYuJSo+a18hIzo3JCQiLE9ZOidmTyEjNSQhMk9AQFdqaF1FJiEjOzckJCIsa0w6K24kISM1JCExaHVTSEssbV8hIzo3JCQiLEJndyp6TyEjNSQhMUB4WCJRQnBFJiEjOjckJCIsQWk4KipvJCEjNSQhMTIhWz0vSXlFJiEjOjckJCIreUdIK1AhIiokITElUjc/cHYob18hIzo3JCQiLDpiXyk0UCEjNSQhMS1kIT1XWCdwXyEjOjckJCIsWydIaz5QISM1JCExczBca1xgcV8hIzo3JCQiLFd1Xy90JCEjNSQhMSwmcC1uOjpGJiEjOjckJCIsVzZTLXUkISM1JCEyWCNSKkdLLUNGJiEjOzckJCIsTmBcLXYkISM1JCExdl1RPXlJdF8hIzo3JCQiLFwmKUcvdyQhIzUkITFPaC1sdEF1XyEjOjckJCIsQGomeXBQISM1JCExXFNATjkydl8hIzo3JCQiLE9sZih6UCEjNSQhMVUlWzomKnBmRiYhIzo3JCQiLEF2ZCcqeSQhIzUkITFjYlZwLidvRiYhIzo3JCQiK1RjQytRISIqJCExM0EqSFg2eUYmISM6NyQkIixVKiopZTRRISM1JCExIikpek5iXCd5XyEjOjckJCIsVUdwLiNRISM1JCExQSxgal5oel8hIzo3JCQiLFttKDRJUSEjNSQhMWhDViFHJlshRyYhIzo3JCQiLCopUUIoUlEhIzUkITJsbFcmSF1NIkcmISM7NyQkIixZOHUrJlEhIzUkITFjVjBAI29BRyYhIzo3JCQiLDd2bS8nUSEjNSQhMT4pW3d4JD4kRyYhIzo3JCQiLE5cQSpwUSEjNSQhMUtdRzFaLiVHJiEjOjckJCIsPTJrKnpRISM1JCExNmRPJVxFXEcmISM6NyQkIiwzbmooKilRISM1JCExTyxlaGJ6JkcmISM6NyQkIiwmUmxRK1IhIzUkITF4Wy1vaXQnRyYhIzo3JCQiLFdGeSY0UiEjNSQhMUU9ZCE0XHZHJiEjOjckJCIsaEpOLCNSISM1JCExOSJ6PkwiWylHJiEjOjckJCIsLlxmKyRSISM1JCExTiVwd1NjJCpHJiEjOjckJCIseSF5KSlSUiEjNSQhMSpIOio0PUEhSCYhIzo3JCQiLFElUnNcUiEjNSQhMDp4YW8nMyJIJiEjOTckJCIsKnpodmZSISM1JCExbW9EYHYnPkgmISM6NyQkIixAPSFScVIhIzUkITFIWVciKSkqKkdIJiEjOjckJCIsM19TLClSISM1JCExInpiOlxgUEgmISM6NyQkIixyTmwoKilSISM1JCEwWyU+XFxmJUgmISM5NyQkIiwoW1QwK1MhIzUkITFCPT52SlwmSCYhIzo3JCQiLERhPy4sJSEjNSQhMTc6LUoiKVEnSCYhIzo3JCQiLDFDTiY+UyEjNSQhMWw0OyFIIT4oSCYhIzo3JCQiKzoyWElTISIqJCExI1JELzlSIilIJiEjOjckJCIseUYlZVJTISM1JCEyRDE6JGU+JCopSCYhIzs3JCQiLGErbi0wJSEjNSQhMXUjM20keiYpKkgmISM6NyQkIitNRVlnUyEiKiQhMU0nKmV3LnUrYCEjOjckJCIsZjZtJnBTISM1JCEyRGl3YD9GOkkmISM7NyQkIixNJFIhKXpTISM1JCExdj5nYjNULWAhIzo3JCQiLFFoNCw0JSEjNSQhMiZ6Y29mISpILmAhIzs3JCQiLEpKbS41JSEjNSQhMSlwNWV1Ij0vYCEjOjckJCIsamV2KTRUISM1JCEway5fJiopKlxJJiEjOTckJCIseik9cz5UISM1JCExbVJIZ1IlZUkmISM6NyQkIixyJVwhKkhUISM1JCExKFFLeWg7bkkmISM6NyQkIiwiXGAwU1QhIzUkITE2VidmQCZlMmAhIzo3JCQiLF9HJ1xdVCEjNSQhMTFtd2t0WjNgISM6NyQkIix1bSNwZlQhIzUkITEnM10uMmkjNGAhIzo3JCQiLGNoWCs8JSEjNSQhMXBecEtVOTVgISM6NyQkIit1NVchPSUhIiokITBGUiQzKEc1SiYhIzk3JCQiLFctZi8+JSEjNSQhMUNnZUQpej1KJiEjOjckJCIsSkdjJio+JSEjNSQhMVZyISlwO2w3YCEjOjckJCIsTyFRUDVVISM1JCExL11YbSJvTkomISM6NyQkIixDbVAmPlUhIzUkITElKT1gYk1NOWAhIzo3JCQiLCgzdT5JVSEjNSQhMSpROyVIU0M6YCEjOjckJCIsLzRMJ1JVISM1JCExKm8heV0rLztgISM6NyQkIiwoR2IpKlxVISM1JCEyJjMpZVE9N3BKJiEjOzckJCIsIilcVilmVSEjNSQhMSZwUSFvOXU8YCEjOjckJCIrYiNILEYlISIqJCExaWApM10wJz1gISM6NyQkIiwyenUmelUhIzUkITFoUyM0JXlSPmAhIzo3JCQiK3hJdypHJSEiKiQhMTRNWSZIXi1LJiEjOjckJCIsSiVlTStWISM1JCExQjc+KVtPNksmISM6NyQkIixAPGUmNFYhIzUkITEoZnoqb2YhPksmISM6NyQkIiwpUnhdPlYhIzUkITFDTy4rZnRBYCEjOjckJCIsb2gneUhWISM1JCExJmU7MTIjZkJgISM6NyQkIixFXFUpUlYhIzUkITEuS21mJUdXSyYhIzo3JCQiLCZwP2RcViEjNSQhMFs9XWRPX0smISM5NyQkIixlNXYuTyUhIzUkITFmPjFYRDhFYCEjOjckJCIsVzYjM3FWISM1JCExV3JdWGskcEsmISM6NyQkIis9a1chUSUhIiokITBCREFjJHpGYCEjOTckJCIsdixRKSpRJSEjNSQhMiYqPXRDOnAmR2AhIzs3JCQiLGteMCxTJSEjNSQhMSJSPyUqKmVUSGAhIzo3JCQiLEZWbSg0VyEjNSQhMVB0cys6QElgISM6NyQkIixSKFsnKT5XISM1JCExdmk0dD4vSmAhIzo3JCQiK1l6dEhXISIqJCExNy5EbkYmPUwmISM6NyQkIix2OHUrVyUhIzUkITF0IyplJFErRkwmISM6NyQkIiwlPSJIK1glISM1JCEyJm80LHJiXkxgISM7NyQkIixVXzQtWSUhIzUkITE6RTFOIVtWTCYhIzo3JCQiLDZqMC5aJSEjNSQhMiZcTSNwVXNeTCYhIzs3JCQiLFshSGV6VyEjNSQhMWBcSEMqR2ZMJiEjOjckJCIsdXE6LVwlISM1JCExVzU3VFp6T2AhIzo3JCQiLEciZXMqXCUhIzUkITFAIjM2L292TCYhIzo3JCQiLChvYicpNFghIzUkITFuW18sOVJRYCEjOjckJCIsKjMxZD5YISM1JCExUUwmUk95IlJgISM6NyQkIiwpM29NSVghIzUkITFiXD5HNDBTYCEjOjckJCIsaD95J1JYISM1JCExYicqcFFhITNNJiEjOjckJCIsYlVwLWIlISM1JCEvZls9MW1UYCEjODckJCIsQTxBKmZYISM1JCExTzNBOypRQ00mISM6NyQkIiwsdyFbcVghIzUkITEqM2xrLypHVmAhIzo3JCQiLGUuImZ6WCEjNSQhMVUlPV5iQFNNJiEjOjckJCIsa2RtKiplJSEjNSQhMWApNChmWSZbTSYhIzo3JCQiLGskKSkpKipmJSEjNSQhMW8hRypcI2VjTSYhIzo3JCQiLCJcWCs1WSEjNSQhMTpodyE+Z2tNJiEjOjckJCIsZVQkKSo+WSEjNSQhMSo9MmUxZXNNJiEjOjckJCIsRikqcCZIWSEjNSQhMVdIR0ZOLVtgISM6NyQkIixhSkwqUlkhIzUkITE2Qi9nKVwpW2AhIzo3JCQiLEhLNSlcWSEjNSQhMUEsLC9qalxgISM6NyQkIiwjM2E/Z1khIzUkITJ2RC0wJEdZXWAhIzs3JCQiLE9ZOidwWSEjNSQhMT1DWS8rQF5gISM6NyQkIixrTDorbyUhIzUkITEocHZOak0/TiYhIzo3JCQiLEJndyoqbyUhIzUkITJiJFJfbUwjR04mISM7NyQkIixBaTgqKnAlISM1JCEyMEFoPjQ0T04mISM7NyQkIit5R0g1WiEiKiQhMSxna0YnR1dOJiEjOjckJCIsOmJfKT5aISM1JCExUGNxMEM9YmAhIzo3JCQiLFsnSGtIWiEjNSQhMjBdQT1NYGZOJiEjOzckJCIsV3VfL3UlISM1JCExPi4qPkwub04mISM6NyQkIixXNlMtdiUhIzUkITFwWyQ0JD1kZGAhIzo3JCQiLE5gXC13JSEjNSQhMS1UXylvYyRlYCEjOjckJCIsXCYpRy94JSEjNSQhMFI9VnZgImZgISM5NyQkIixAaiZ5elohIzUkITEsNyFSVSYpKWZgISM6NyQkIixPbGYoKnklISM1JCExV3EoKj1WbWdgISM6NyQkIixBdmQnKnolISM1JCExV2Q/RGlWaGAhIzo3JCQiK1RjQzVbISIqJCExaDNwZTJFaWAhIzo3JCQiLFUqKillPlshIzUkITF6SWR1dClITyYhIzo3JCQiLFVHcC4kWyEjNSQhMVkmcHBkQ1FPJiEjOjckJCIsW20oNFNbISM1JCExVkZoQCF6WE8mISM6NyQkIiwqKVFCKFxbISM1JCEyJltFIj5eQ2BPJiEjOzckJCIsWTh1KydbISM1JCExLV1RYF03bWAhIzo3JCQiLDd2bS8oWyEjNSQhMSxZcylvRnBPJiEjOjckJCIsTlxBKnpbISM1JCExKTR6UChwbG5gISM6NyQkIiw9MmsqKilbISM1JCEwRD1yU0klb2AhIzk3JCQiLDNuaigqKlshIzUkITElZkpuPCU9cGAhIzo3JCQiLCZSbFE1XCEjNSQhMV9hJCpHLCtxYCEjOjckJCIsV0Z5Jj5cISM1JCEyJjRQcyg+MDJQJiEjOzckJCIsaEpOLCRcISM1JCEydndSPyFSXnJgISM7NyQkIiwuXGYrJVwhIzUkITFFUFhqSUZzYCEjOjckJCIseSF5KSlcXCEjNSQhMVtKJyp5US10YCEjOjckJCIsUSVSc2ZcISM1JCEybFRrVkd1UFAmISM7NyQkIiwqemh2cFwhIzUkITE2L1g5J1FYUCYhIzo3JCQiLEA9IVIhKVwhIzUkITFHRig9bFpgUCYhIzo3JCQiLDNfUywqXCEjNSQhMScqUl1KJSkzd2AhIzo3JCQiLHJObCgqKlwhIzUkITFjVkI4KD1vUCYhIzo3JCQiLChbVDA1XSEjNSQhMWpHczskKWZ4YCEjOjckJCIsRGE/Li0mISM1JCExNy05UV5QeWAhIzo3JCQiLDFDTiZIXSEjNSQhMXRYYmc5MnpgISM6NyQkIis6MlhTXSEiKiQhMSlIcCl6XiopemAhIzo3JCQiLHlGJWVcXSEjNSQhMVJbZSVcJGUhUSYhIzo3JCQiLGErbi0xJiEjNSQhMjpCISpwWihRIlEmISM7NyQkIitNRVlxXSEiKiQhMWMqKnA8UDojUSYhIzo3JCQiLGY2bSZ6XSEjNSQhMVVheigpcCRHUSYhIzo3JCQiLE0kUiEpKjMmISM1JCEydlpcUFIvT1EmISM7NyQkIixRaDQsNSYhIzUkITJYZGBuImVQJVEmISM7NyQkIixKSm0uNiYhIzUkITEyJSkpKjREOSZRJiEjOjckJCIsamV2KT5eISM1JCExcG87KFFfZVEmISM6NyQkIix6KT1zSF4hIzUkITImeSVcclknZSdRJiEjOzckJCIsciVcISpSXiEjNSQhMSl5Sj9qV3RRJiEjOjckJCIsIlxgMF1eISM1JCExUGcnUUwqNClRJiEjOjckJCIsX0cnXGdeISM1JCExUU9HbFgoKSlRJiEjOjckJCIsdW0jcHBeISM1JCEyT0ZsM1xjJipRJiEjOzckJCIsY2hYKz0mISM1JCExPm5mc0pLIVImISM6NyQkIit1NVchPiYhIiokITFYW3ZMPjQiUiYhIzo3JCQiLFctZi8/JiEjNSQhMVlaa208JD1SJiEjOjckJCIsSkdjJjRfISM1JCEyMHQlKnp1LURSJiEjOzckJCIsTyFRUD9fISM1JCExKCopeSRcJipIJFImISM6NyQkIixDbVAmSF8hIzUkITE+PkxYTyhSUiYhIzo3JCQiLCgzdT5TXyEjNSQhMmIwQE91Y1pSJiEjOzckJCIsLzRMJ1xfISM1JCExZFcyIioqW2FSJiEjOjckJCIsKEdiKSpmXyEjNSQhMVFWcydcMmlSJiEjOjckJCIsIilcVilwXyEjNSQhMTA5XC4pR3BSJiEjOjckJCIrYiNILEcmISIqJCEyYkldXFMhbyhSJiEjOzckJCIsMnp1JipHJiEjNSQhMURpTDEocCQpUiYhIzo3JCQiK3hJdypIJiEiKiQhMk5xRk5DNyIqUiYhIzs3JCQiLEolZU01YCEjNSQhMWx3PnFDKSkqUiYhIzo3JCQiLEA8ZSY+YCEjNSQhMlhRJm93P2IrYSEjOzckJCIsKVJ4XUhgISM1JCExNEksYVZGLGEhIzo3JCQiLG9oJ3lSYCEjNSQhMTlASlMmPj9TJiEjOjckJCIsRVxVKVxgISM1JCExUUFiImVaRlMmISM6NyQkIiwmcD9kZmAhIzUkITFEZDAhM15NUyYhIzo3JCQiLGU1di5QJiEjNSQhMXcmXClRNkIvYSEjOjckJCIsVzYjMyFRJiEjNSQhMS5RTTU2JFxTJiEjOjckJCIrPWtXIVImISIqJCExeGszJFx4Y1MmISM6NyQkIix2LFEpKlImISM1JCExPkMxXEhOMWEhIzo3JCQiLGteMCxUJiEjNSQhMS9XM1svNDJhISM6NyQkIixGVm0oPmEhIzUkITE2b1FxTXkyYSEjOjckJCIsUihbJylIYSEjNSQhMU51aVNwXTNhISM6NyQkIitZenRSYSEiKiQhMlg7I1FTTEA0YSEjOzckJCIsdjh1K1gmISM1JCEybCVwNSkqPSYqNGEhIzs3JCQiLCU9IkgrWSYhIzUkITFNWSZSRmkxVCYhIzo3JCQiLFVfNC1aJiEjNSQhMSIzUjV5KFE2YSEjOjckJCIsNmowLlsmISM1JCEwIj04SGo1N2EhIzk3JCQiLFshSGUqWyYhIzUkITJPIz5xbWR3N2EhIzs3JCQiLHVxOi1dJiEjNSQhMSVSJypwZD9OVCYhIzo3JCQiLEciZXM0YiEjNSQhMUZKJlEhWz45YSEjOjckJCIsKG9iJyk+YiEjNSQhMlhCPEN2N1xUJiEjOzckJCIsKjMxZEhiISM1JCExeiVwYS4qZjphISM6NyQkIiwpM29NU2IhIzUkITJ2QD5CMGdqVCYhIzs3JCQiLGg/eSdcYiEjNSQhMHQ6JHkiPXFUJiEjOTckJCIsYlVwLWMmISM1JCExaGJ2JD5reFQmISM6NyQkIixBPEEqcGIhIzUkITFMS2E6S1c9YSEjOjckJCIsLHchWyFlJiEjNSQhMUUuZykpXD0+YSEjOjckJCIsZS4iZiplJiEjNSQhMUdmXytVIyk+YSEjOjckJCIsa2RtKipmJiEjNSQhMTkkKUd0N2I/YSEjOjckJCIsayQpKSkqNGMhIzUkITFaK1ttRURAYSEjOjckJCIsIlxYKz9jISM1JCEwO3pycF8+VSYhIzk3JCQiLGVUJCkqSGMhIzUkITBFc2JEXEVVJiEjOTckJCIsRikqcCZSYyEjNSQhMSc+MCgpZTxMVSYhIzo3JCQiLGFKTCpcYyEjNSQhMVFENVwiUlNVJiEjOjckJCIsSEs1KWZjISM1JCExWCc+YyZmc0NhISM6NyQkIiwjM2E/cWMhIzUkITE3ISk0W3lXRGEhIzo3JCQiLE9ZOid6YyEjNSQhMWAqcGZdK2hVJiEjOjckJCIsa0w6K3AmISM1JCExJylwNCw0I29VJiEjOjckJCIsQmd3KipwJiEjNSQhMXQrRTsrXkZhISM6NyQkIixBaTgqNGQhIzUkITFfXXchZSc+R2EhIzo3JCQiK3lHSD9kISIqJCExLjp4cUYiKkdhISM6NyQkIiw6Yl8pSGQhIzUkITE9N3dwOmRIYSEjOjckJCIsWydIa1JkISM1JCExMHIkKVFhQ0lhISM6NyQkIixXdV8vdiYhIzUkITFsP10mXCkpNFYmISM6NyQkIixXNlMtdyYhIzUkITFCbSo9Umc7ViYhIzo3JCQiLE5gXC14JiEjNSQhMT0xQm9tTUthISM6NyQkIixcJilHL3kmISM1JCExKCllJCoqcFZJViYhIzo3JCQiLEBqJnkqeSYhIzUkITBCZ1hoJG9MYSEjOTckJCIsT2xmKCp6JiEjNSQhMWopZiEzXE9NYSEjOjckJCIsQXZkJzRlISM1JCExJVtLZDtTXVYmISM6NyQkIitUY0M/ZSEiKiQhMUBTZFk6d05hISM6NyQkIixVKiopZUhlISM1JCExLjMmSEwoUk9hISM6NyQkIixVR3AuJWUhIzUkITFNJilbbipIclYmISM6NyQkIixbbSg0XWUhIzUkITBXbSRmLXpQYSEjOTckJCIsKilRQihmZSEjNSQhMTYrdCh5VSVRYSEjOjckJCIsWTh1KyhlISM1JCExMjAoUWVWIlJhISM6NyQkIiw3dm0vKWUhIzUkITFMOCJ6SFkpUmEhIzo3JCQiLE5cQSoqKWUhIzUkITElWzRyJ1tbU2EhIzo3JCQiLD0yayoqKmUhIzUkITEjSFQsPGk2VyYhIzo3JCQiLDNuaig0ZiEjNSQhMHUnNElCIz1XJiEjOTckJCIsJlJsUT9mISM1JCExLFF5TnFgVWEhIzo3JCQiLFdGeSZIZiEjNSQhMSJ5KXApb2FKVyYhIzo3JCQiLGhKTiwlZiEjNSQhMWlVUTVLJ1FXJiEjOjckJCIsLlxmKyZmISM1JCExMG1vMSVHWFcmISM6NyQkIix5IXkpKWZmISM1JCExVSg+bU8nPVhhISM6NyQkIixRJVJzcGYhIzUkITE6c1JWUyVlVyYhIzo3JCQiLCp6aHZ6ZiEjNSQhMUFSci1TXllhISM6NyQkIixAPSFSISpmISM1JCExYXAqZkJCc1cmISM6NyQkIiwzX1MsKychIzUkITExcjs1Rih5VyYhIzo3JCQiLHJObCg0ZyEjNSQhMVVCIVEwOCZbYSEjOjckJCIsKFtUMD9nISM1JCExLnNoRG4+XGEhIzo3JCQiLERhPy4uJyEjNSQhMW93dVMheSlcYSEjOjckJCIsMUNOJlJnISM1JCExWWJXQykpW11hISM6NyQkIis6MlhdZyEiKiQhMHVoOlc2N1gmISM5NyQkIix5RiVlZmchIzUkITFbeFZYYCI9WCYhIzo3JCQiLGErbi0yJyEjNSQhL01QOjNfX2EhIzg3JCQiK01FWSEzJyEiKiQhMUVpcl5LPmBhISM6NyQkIixmNm0mKjMnISM1JCExKkcjelZIemBhISM6NyQkIixNJFIhKSo0JyEjNSQhMWIyJnlibVdYJiEjOjckJCIsUWg0LDYnISM1JCExc2IqNHlWXlgmISM6NyQkIixKSm0uNychIzUkITFOImVYJHAiZVgmISM6NyQkIixqZXYpSGghIzUkITImZV9XeC1XY2EhIzs3JCQiLHopPXNSaCEjNSQhMVRVUFpcM2RhISM6NyQkIixyJVwhKlxoISM1JCExL3JWWzN2ZGEhIzo3JCQiLCJcYDBnaCEjNSQhMmxDPiYpeTglZWEhIzs3JCQiLF9HJ1xxaCEjNSQhMWgnKSlmJVs0ZmEhIzo3JCQiLHVtI3B6aCEjNSQhMVZIcy1TcGZhISM6NyQkIixjaFgrPichIzUkITFjISo+MnhPZ2EhIzo3JCQiK3U1VytpISIqJCExPCk+SEtWNVkmISM6NyQkIixXLWYvQCchIzUkITE8cChcZiRwaGEhIzo3JCQiLEpHYyY+aSEjNSQhMTNZJnpUJEdpYSEjOjckJCIsTyFRUElpISM1JCExOGE1RVIpSFkmISM6NyQkIixDbVAmUmkhIzUkITFoYnpHbWRqYSEjOjckJCIsKDN1Pl1pISM1JCExWEBLYV9Fa2EhIzo3JCQiLC80TCdmaSEjNSQhL2BtaVMoW1kmISM4NyQkIiwoR2IpKnBpISM1JCExWFs2QTdhbGEhIzo3JCQiLCIpXFYpemkhIzUkITExKjQmUmQ8bWEhIzo3JCQiK2IjSCxIJyEiKiQhMW5NWCcpcCRvWSYhIzo3JCQiLDJ6dSYqSCchIzUkITEvTW0lXFZ1WSYhIzo3JCQiK3hJdzRqISIqJCExTzpcQHA0b2EhIzo3JCQiLEolZU0/aiEjNSQhMWUiPSUqenUob2EhIzo3JCQiLEA8ZSZIaiEjNSQhMSVmQjk+ayRwYSEjOjckJCIsKVJ4XVJqISM1JCEyOltQeSwrK1omISM7NyQkIixvaCd5XGohIzUkITFHYyM0NGMxWiYhIzo3JCQiLEVcVSlmaiEjNSQhMTItY1pySHJhISM6NyQkIiwmcD9kcGohIzUkITF3JylSbm0iPlomISM6NyQkIixlNXYuUSchIzUkITE0ai4kcC5FWiYhIzo3JCQiLFc2IzMhUichIzUkITFAbykpZS1BdGEhIzo3JCQiKz1rVytrISIqJCExNCR5XXl4UVomISM6NyQkIix2LFEpNGshIzUkITEmSDQqKSpHWnVhISM6NyQkIixrXjAsVSchIzUkITAwInlfRjd2YSEjOTckJCIsRlZtKEhrISM1JCExVkFtKVtMZFomISM6NyQkIixSKFsnKVJrISM1JCExO1cmRzhyalomISM6NyQkIitZenRcayEiKiQhMVJARzFRKnBaJiEjOjckJCIsdjh1K1knISM1JCEyJilvIzQwXGt4YSEjOzckJCIsJT0iSCtaJyEjNSQhMUEwX043RnlhISM6NyQkIixVXzQtWychIzUkITEyUUMlKTQiKnlhISM6NyQkIiw2ajAuXCchIzUkITJYRypmdFlhemEhIzs3JCQiLFshSGUqXCchIzUkITE2J3oySUUsWyYhIzo3JCQiLHVxOi1eJyEjNSQhMURsZ0VAeiFbJiEjOjckJCIsRyJlcz5sISM1JCExeShRMiVwUSJbJiEjOjckJCIsKG9iJylIbCEjNSQhMS1uVSwvLSNbJiEjOjckJCIsKjMxZFJsISM1JCExJ29JXCpmaSNbJiEjOjckJCIsKTNvTV1sISM1JCEyTiMqUnhoKEgkWyYhIzs3JCQiLGg/eSdmbCEjNSQhMk48L2VdeVFbJiEjOzckJCIsYlVwLWQnISM1JCEwZD5xL1BYWyYhIzk3JCQiLEE8QSp6bCEjNSQhMSQqelpBbDgmWyYhIzo3JCQiLCx3IVshZichIzUkITJEbnpxWiJ6JlsmISM7NyQkIixlLiJmKmYnISM1JCExYlN6U2ZOJ1smISM6NyQkIixrZG0qNG0hIzUkITFXXnZsISkqcFsmISM6NyQkIixrJCkpKSo+bSEjNSQhMWJdI29lPHdbJiEjOjckJCIsIlxYK0ltISM1JCExcyNSJHlmQilbJiEjOjckJCIsZVQkKSpSbSEjNSQhMXIkUWVQXikpWyYhIzo3JCQiLEYpKnAmXG0hIzUkITFhVGowPlcqWyYhIzo3JCQiLGFKTCpmbSEjNSQhMVkkUj9heitcJiEjOjckJCIsSEs1KXBtISM1JCExXDkoKVJsbyFcJiEjOjckJCIsIzNhPyFvJyEjNSQhMVpHX0JZSyJcJiEjOjckJCIsT1k6JypvJyEjNSQhMWJtTnk6IT5cJiEjOjckJCIsa0w6K3EnISM1JCExTSpIJSlbUURcJiEjOjckJCIsQmd3KjRuISM1JCExQFQ8PHk5JFwmISM6NyQkIixBaTgqPm4hIzUkITEnZm5BJ1x2JFwmISM6NyQkIit5R0hJbiEiKiQhMiZ5PD8jUSlRJVwmISM7NyQkIiw6Yl8pUm4hIzUkITJiK2hFNnJcXCYhIzs3JCQiLFsnSGtcbiEjNSQhMWtEWFRzYyZcJiEjOjckJCIsV3VfL3cnISM1JCExPCdHaWxDaVwmISM6NyQkIixXNlMteCchIzUkITEjUUlbPT5vXCYhIzo3JCQiLE5gXC15JyEjNSQhMTE3aDNsVShcJiEjOjckJCIsXCYpRy96JyEjNSQhMnYmMylSVVYhKVwmISM7NyQkIixAaiZ5KnonISM1JCEyRGYnZV8pNCcpXCYhIzs3JCQiLE9sZig0byEjNSQhMXBIK3hIQCpcJiEjOjckJCIsQXZkJz5vISM1JCExRS86RzMiKSpcJiEjOjckJCIrVGNDSW8hIiokITFeUksjZlwvXSYhIzo3JCQiLFUqKillUm8hIzUkITFlSCYzajc1XSYhIzo3JCQiLFVHcC4mbyEjNSQhMXc5ejc6bSxiISM6NyQkIixbbSg0Z28hIzUkITFWMmMjUllBXSYhIzo3JCQiLCopUUIocG8hIzUkITFAaj1oVyNHXSYhIzo3JCQiLFk4dSspbyEjNSQhMSR6XERPWE1dJiEjOjckJCIsN3ZtLypvISM1JCEwWikpKVEhb1NdJiEjOTckJCIsTlxBKioqbyEjNSQhMjpbX0AlUmovYiEjOzckJCIsPTJrKjRwISM1JCEyJik+VytDTV9dJiEjOzckJCIsM25qKD5wISM1JCExUWkjPVQ+ZV0mISM6NyQkIiwmUmxRSXAhIzUkITI6ZWAhNElYMWIhIzs3JCQiLFdGeSZScCEjNSQhMT1AIjRqK3FdJiEjOjckJCIsaEpOLCZwISM1JCExSyYpKTQqKUd3XSYhIzo3JCQiLC5cZisncCEjNSQhMF9BUyEpPSMzYiEjOTckJCIseSF5KSlwcCEjNSQhMUZ6eW1CISkzYiEjOjckJCIsUSVSc3pwISM1JCEyOlJrXnUmUTRiISM7NyQkIiwqemh2KilwISM1JCExYnk6KDMhKSo0YiEjOjckJCIsQD0hUitxISM1JCExYEomZU00MV4mISM6NyQkIiwzX1MsLCghIzUkITEtXDtfYz02YiEjOjckJCIsck5sKD5xISM1JCEwTyRSP1J2NmIhIzk3JCQiLChbVDBJcSEjNSQhMmwwJCkpNDJPN2IhIzs3JCQiLERhPy4vKCEjNSQhME1YJ3phJ0heJiEjOTckJCIsMUNOJlxxISM1JCEwJD5ALnhdOGIhIzk3JCQiKzoyWGdxISIqJCExVixiIkdcVF4mISM6NyQkIix5RiVlcHEhIzUkITFEKUg+XyZvOWIhIzo3JCQiLGErbi0zKCEjNSQhMU0oPiwtN2BeJiEjOjckJCIrTUVZITQoISIqJCExUHJQYSM0Zl4mISM6NyQkIixmNm0mKjQoISM1JCExKCkqKikpUT5XO2IhIzo3JCQiLE0kUiEpNHIhIzUkITF2Iz1ATlNxXiYhIzo3JCQiLFFoNCw3KCEjNSQhMUszXVU/azxiISM6NyQkIixKSm0uOCghIzUkITEvb3UoPVMjPWIhIzo3JCQiLGpldilSciEjNSQhMU8memA4JXo9YiEjOjckJCIseik9c1xyISM1JCExZlJEKjRuJD5iISM6NyQkIixyJVwhKmZyISM1JCExUEphKyFmKj5iISM6NyQkIiwiXGAwcXIhIzUkITF4KGUkUSRbMF8mISM6NyQkIixfRydcIT0oISM1JCEybDxgSyZROkBiISM7NyQkIix1bSNwKj0oISM1JCExPiZcOWgnb0BiISM6NyQkIixjaFgrPyghIzUkITE+IzRGcyZHQWIhIzo3JCQiK3U1VzVzISIqJCExb2lfL20pR18mISM6NyQkIixXLWYvQSghIzUkITEjKlI+OF1ZQmIhIzo3JCQiLEpHYyZIcyEjNSQhMEo9LHIqKVJfJiEjOTckJCIsTyFRUFNzISM1JCExOkQ6VEhoQ2IhIzo3JCQiLENtUCZccyEjNSQhMUgibyE+LjlEYiEjOjckJCIsKDN1PmdzISM1JCExelRUO0p2RGIhIzo3JCQiLC80TCdwcyEjNSQhMWRXQFpcSEViISM6NyQkIiwoR2IpKnpzISM1JCExKVE9Z3gpKW9fJiEjOjckJCIsIilcVikqRyghIzUkITEkeSUqXGhgdV8mISM6NyQkIitiI0gsSSghIiokITE3czE6Qi9HYiEjOjckJCIsMnp1JjR0ISM1JCExMHQoPU0jZUdiISM6NyQkIit4SXc+dCEiKiQhMUBVaDNVO0hiISM6NyQkIixKJWVNSXQhIzUkITBCIjQ+endIYiEjOTckJCIsQDxlJlJ0ISM1JCExOzNHJClHSEliISM6NyQkIiwpUnhdXHQhIzUkITFlQiNvRWYzYCYhIzo3JCQiLG9oJ3lmdCEjNSQhMmwqMyM+dlY5YCYhIzs3JCQiLEVcVSlwdCEjNSQhMVVfLENcLEtiISM6NyQkIiwmcD9kenQhIzUkITElUjoib3BjS2IhIzo3JCQiLGU1di5SKCEjNSQhMV92ak4jekpgJiEjOjckJCIsVzYjMyt1ISM1JCEwZHBKeEdQYCYhIzk3JCQiKz1rVzV1ISIqJCExL3BlJClbSk1iISM6NyQkIix2LFEpPnUhIzUkITF5UG09YSVbYCYhIzo3JCQiLGteMCxWKCEjNSQhMS4wKW8iW1VOYiEjOjckJCIsRlZtKFJ1ISM1JCExXCRbJClScGZgJiEjOjckJCIsUihbJylcdSEjNSQhMS0kXGMuUWxgJiEjOjckJCIrWXp0ZnUhIiokITFlN28kUSQ0UGIhIzo3JCQiLHY4dStaKCEjNSQhMXYyW1tUblBiISM6NyQkIiwlPSJIK1soISM1JCExJCk0LCQpR0JRYiEjOjckJCIsVV80LVwoISM1JCExKXkxNWwuKVFiISM6NyQkIiw2ajAuXSghIzUkITFFazJ3IXAkUmIhIzo3JCQiLFshSGU0diEjNSQhMXdqay0iKSkpUmIhIzo3JCQiLHVxOi1fKCEjNSQhMVkjKlxJQltTYiEjOjckJCIsRyJlc0h2ISM1JCExWmxPVEssVGIhIzo3JCQiLChvYicpUnYhIzUkITJsLCRvMih5OmEmISM7NyQkIiwqMzFkXHYhIzUkITFkaXFjJD5AYSYhIzo3JCQiLCkzb01ndiEjNSQhMURMMkAhPkZhJiEjOjckJCIsaD95J3B2ISM1JCExSnAtSHhCVmIhIzo3JCQiLGJVcC1lKCEjNSQhMSpwSzwlZSNRYSYhIzo3JCQiLEE8QSoqZSghIzUkITFMOGBrN09XYiEjOjckJCIsLHchWyt3ISM1JCEyMEs3SElZXGEmISM7NyQkIixlLiJmNHchIzUkITJEbENUY11hYSYhIzs3JCQiLGtkbSo+dyEjNSQhMV4zR2tVLVliISM6NyQkIixrJCkpKSpIdyEjNSQhMSxqTkl5ZFliISM6NyQkIiwiXFgrU3chIzUkITE9OSxaLzhaYiEjOjckJCIsZVQkKSpcdyEjNSQhMCM0XVovb1piISM5NyQkIixGKSpwJmZ3ISM1JCExLjlqeSMzI1tiISM6NyQkIixhSkwqcHchIzUkITFBNTp3I3koW2IhIzo3JCQiLEhLNSl6dyEjNSQhMXVmRFc0S1xiISM6NyQkIiwjM2E/IXAoISM1JCExdz8lZVkiKilcYiEjOjckJCIsT1k6JypwKCEjNSQhMSVlSWZRMi9iJiEjOjckJCIsa0w6K3IoISM1JCExdSQpPnpwKDRiJiEjOjckJCIsQmd3Kj54ISM1JCExKXB2Yyc+X15iISM6NyQkIixBaTgqSHghIzUkITEkelpvMGw/YiYhIzo3JCQiK3lHSFN4ISIqJCExJFE3QnJKRWImISM6NyQkIiw6Yl8pXHghIzUkITFMRWJ3STpgYiEjOjckJCIsWydIa2Z4ISM1JCExKnBDSlsnb2BiISM6NyQkIixXdV8veCghIzUkITJYIillPXp1VWImISM7NyQkIixXNlMteSghIzUkITFpVDIkKW8hW2ImISM6NyQkIixOYFwteighIzUkITI6aiR5I1tdYGImISM7NyQkIixcJilHLyF5ISM1JCExRGVyRUYhZmImISM6NyQkIixAaiZ5NHkhIzUkITE6QyMpRyk0a2ImISM6NyQkIixPbGYoPnkhIzUkITF0WFZRKVxwYiYhIzo3JCQiLEF2ZCdIeSEjNSQhMXlBcyM9JltkYiEjOjckJCIrVGNDU3khIiokITFhWD9DczBlYiEjOjckJCIsVSoqKWVceSEjNSQhMCZ6IUhdaCZlYiEjOTckJCIsVUdwLid5ISM1JCExJz51d3NVImZiISM6NyQkIixbbSg0cXkhIzUkITAnKnoqem1tZmIhIzk3JCQiLCopUUIoenkhIzUkITEkKSl6SmUlPWdiISM6NyQkIixZOHUrKnkhIzUkITFqKEgjPjR1Z2IhIzo3JCQiLDd2bS8heiEjNSQhMUtvOjEqKUhoYiEjOjckJCIsTlxBKjR6ISM1JCExcilbMTIxPWMmISM6NyQkIiw9MmsqPnohIzUkITFGISlROVRNaWIhIzo3JCQiLDNuaihIeiEjNSQhMlhmTVtsb0djJiEjOzckJCIsJlJsUVN6ISM1JCExInAvTm1PTWMmISM6NyQkIixXRnkmXHohIzUkITEqUnBza0ZSYyYhIzo3JCQiLGhKTiwneiEjNSQhMiZbNiZvKTRca2IhIzs3JCQiLC5cZisoeiEjNSQhMUh0KykqKj5dYyYhIzo3JCQiLHkheSkpenohIzUkITElZTh6T1ZiYyYhIzo3JCQiLFElUnMqKXohIzUkITJYIkhiRG0xbWIhIzs3JCQiLCp6aHYqKnohIzUkITEyS2ByKCpmbWIhIzo3JCQiLEA9IVI1ISkhIzUkITFLRzMqSGtyYyYhIzo3JCQiLDNfUywtKSEjNSQhMWY8ZHY4b25iISM6NyQkIixyTmwoSCEpISM1JCExTFV6IUgiPm9iISM6NyQkIiwoW1QwUyEpISM1JCExKHBwcyNldG9iISM6NyQkIixEYT8uMCkhIzUkITFZIUgkMyd5I3BiISM6NyQkIiwxQ04mZiEpISM1JCExZVloLWB3cGIhIzo3JCQiKzoyWHEhKSEiKiQhMEImKWVCVC5kJiEjOTckJCIseUYlZXohKSEjNSQhMTcnbyRlRSMzZCYhIzo3JCQiLGErbi00KSEjNSQhMERpJ29eUXJiISM5NyQkIitNRVkrIikhIiokITFHOSMzWUA+ZCYhIzo3JCQiLGY2bSY0IikhIzUkITFCKnluJCkqUnNiISM6NyQkIixNJFIhKT4iKSEjNSQhMmxTPkhIUEhkJiEjOzckJCIsUWg0LDgpISM1JCExdWpkW3hadGIhIzo3JCQiLEpKbS45KSEjNSQhMTxDc3ZdLHViISM6NyQkIixqZXYpXCIpISM1JCEwbTYpW0ZedWIhIzk3JCQiLHopPXNmIikhIzUkITFQI0dsYkZdZCYhIzo3JCQiLHIlXCEqcCIpISM1JCExYyIzSlZmYmQmISM6NyQkIiwiXGAwIT0pISM1JCExOSkqR2chKjN3YiEjOjckJCIsX0cnXCE+KSEjNSQhMTtfdSJHTG1kJiEjOjckJCIsdW0jcCo+KSEjNSQhMVszV2VANnhiISM6NyQkIixjaFgrQCkhIzUkITFKXThJMmx4YiEjOjckJCIrdTVXPyMpISIqJCExLU1aXDQ+eWIhIzo3JCQiLFctZi9CKSEjNSQhMSlHPnUsNih5YiEjOjckJCIsSkdjJlIjKSEjNSQhMSM0V2gkRz16YiEjOjckJCIsTyFRUF0jKSEjNSQhMUp0UDlMdXpiISM6NyQkIixDbVAmZiMpISM1JCEwJlsoemo8LWUmISM5NyQkIiwoM3U+cSMpISM1JCExM0AqPiUpbzJlJiEjOjckJCIsLzRMJ3ojKSEjNSQhMVtUJjRFYzdlJiEjOjckJCIsKEdiKSoqRykhIzUkITEoSGIlMzB6ImUmISM6NyQkIiwiKVxWKSpIKSEjNSQhMUgrYEQoKUgjZSYhIzo3JCQiK2IjSCxKKSEiKiQhMTYoKVFrJUdHZSYhIzo3JCQiLDJ6dSY+JCkhIzUkITF0Ink/WDlMZSYhIzo3JCQiK3hJd0gkKSEiKiQhMVFEV1YiUVFlJiEjOjckJCIsSiVlTVMkKSEjNSQhMlgvQitiIlElZSYhIzs3JCQiLEA8ZSZcJCkhIzUkITE2cDBBVCZbZSYhIzo3JCQiLClSeF1mJCkhIzUkITAqW2RGU08mZSYhIzk3JCQiLG9oJ3lwJCkhIzUkITFkdG0iRyEqZWUmISM6NyQkIixFXFUpeiQpISM1JCExLEs7K1lTJ2UmISM6NyQkIiwmcD9kKlEpISM1JCExPiIqZVU8IXBlJiEjOjckJCIsZTV2LlMpISM1JCExIltOVTxgdWUmISM6NyQkIixXNiMzNSUpISM1JCExazU+ZSJbemUmISM6NyQkIis9a1c/JSkhIiokITEqPTNlOHclKWUmISM6NyQkIix2LFEpSCUpISM1JCExWmEuJzRhKillJiEjOjckJCIsa14wLFcpISM1JCEwJnkkbzd3JSplJiEjOTckJCIsRlZtKFwlKSEjNSQhMWZvVU5vJyoqZSYhIzo3JCQiLFIoWycpZiUpISM1JCExJClwKCpvI3ovZiYhIzo3JCQiK1l6dHAlKSEiKiQhMiY+XiNceHo0ZiYhIzs3JCQiLHY4dStbKSEjNSQhMiZlWmNRS10iZiYhIzs3JCQiLCU9IkgrXCkhIzUkITFvIlxZKm8rI2YmISM6NyQkIixVXzQtXSkhIzUkITElZnV3V0BEZiYhIzo3JCQiLDZqMC5eKSEjNSQhMSpHNU5CSklmJiEjOjckJCIsWyFIZT4mKSEjNSQhMTYrJSpIIypcJGYmISM6NyQkIix1cTotYCkhIzUkITEoeiUqWzNOU2YmISM6NyQkIixHImVzUiYpISM1JCExTykpbykpUV4lZiYhIzo3JCQiLChvYicpXCYpISM1JCExX2I6L1ItJmYmISM6NyQkIiwqMzFkZiYpISM1JCEwOyYpPmU2YmYmISM5NyQkIiwpM29NcSYpISM1JCExKno3Y2FfZ2YmISM6NyQkIixoP3kneiYpISM1JCEyOm8yQV8/bGYmISM7NyQkIixiVXAtZikhIzUkITEkUSNlbDYwKGYmISM6NyQkIixBPEEqKmYpISM1JCExOXEvOVZgKGYmISM6NyQkIiwsdyFbNScpISM1JCExX05SJUdpISlmJiEjOjckJCIsZS4iZj4nKSEjNSQhMlhjSyMqUjwmKWYmISM7NyQkIixrZG0qSCcpISM1JCEyRD1JR0JOISpmJiEjOzckJCIsayQpKSkqUicpISM1JCExcHIpMyVcYCpmJiEjOjckJCIsIlxYK10nKSEjNSQhMSdmKnpRUS4rYyEjOjckJCIsZVQkKSpmJykhIzUkITFtWFBAL2ArYyEjOjckJCIsRikqcCZwJykhIzUkITFYclBKcSssYyEjOjckJCIsYUpMKnonKSEjNSQhMWlwKFF3QDpnJiEjOjckJCIsSEs1KSpvKSEjNSQhMWRxKkgnPSwtYyEjOjckJCIsIzNhPysoKSEjNSQhMSMzVmc7RkRnJiEjOjckJCIsT1k6JzQoKSEjNSQhMkQmcDwmPiQqSGcmISM7NyQkIixrTDorcykhIzUkITF1InBXdjJOZyYhIzo3JCQiLEJndypIKCkhIzUkITFtXyY0OCtTZyYhIzo3JCQiLEFpOCpSKCkhIzUkITFtN0lTM1wvYyEjOjckJCIreUdIXSgpISIqJCExMTFBKilHKzBjISM6NyQkIiw6Yl8pZigpISM1JCEyOlNIWzB1YWcmISM7NyQkIixbJ0hrcCgpISM1JCExKCp6R1loJmZnJiEjOjckJCIsV3VfL3kpISM1JCExYWNlM3pbMWMhIzo3JCQiLFc2Uy16KSEjNSQhMScpR00tKm9wZyYhIzo3JCQiLE5gXC0hKSkhIzUkITBSX1NNZ3VnJiEjOTckJCIsXCYpRy8iKSkhIzUkIS9fdlknZnpnJiEjODckJCIsQGomeT4pKSEjNSQhMWkkZmg8PSUzYyEjOjckJCIsT2xmKEgpKSEjNSQhMWVUOS9sISozYyEjOjckJCIsQXZkJ1IpKSEjNSQhMiZvKnpybCFSNGMhIzs3JCQiK1RjQ10pKSEiKiQhMTQrZVkhMyo0YyEjOjckJCIsVSoqKWVmKSkhIzUkITFIeF0pPWsuaCYhIzo3JCQiLFVHcC4oKSkhIzUkITElMz4meioqKTNoJiEjOjckJCIsW20oNCEpKSkhIzUkITF1I1tXK2s4aCYhIzo3JCQiLCopUUIoKikpKSEjNSQhMShlVXhmSz1oJiEjOjckJCIsWTh1KyEqKSEjNSQhMiY+QTc1Z0w3YyEjOzckJCIsN3ZtLyIqKSEjNSQhMDQuTyc0JUdoJiEjOTckJCIsTlxBKj4qKSEjNSQhMS5BM20qKkg4YyEjOjckJCIsPTJrKkgqKSEjNSQhMiZlWDhlcHk4YyEjOzckJCIsM25qKFIqKSEjNSQhMjE1bC94aFVoJiEjOzckJCIsJlJsUV0qKSEjNSQhMXcnKj54Zng5YyEjOjckJCIsV0Z5JmYqKSEjNSQhMV5FSSVcP19oJiEjOjckJCIsaEpOLCgqKSEjNSQhMiZHX19rMHQ6YyEjOzckJCIsLlxmKykqKSEjNSQhMScpNEInZjRpaCYhIzo3JCQiLHkheSkpKikqKSEjNSQhLzRTaE5vO2MhIzg3JCQiLFElUnMqKiopISM1JCExT05SbXU6PGMhIzo3JCQiLCp6aHY0ISohIzUkITF2QnRwLms8YyEjOjckJCIsQD0hUj8hKiEjNSQhMTBLQFc8Oj1jISM6NyQkIiwzX1MsLiohIzUkITAkeXF4LGk9YyEjOTckJCIsck5sKFIhKiEjNSQhMWk3QmpAMz5jISM6NyQkIiwoW1QwXSEqISM1JCEwWCU9ZmJkPmMhIzk3JCQiLERhPy4xKiEjNSQhMSopKSo9NHUxP2MhIzo3JCQiLDFDTiZwISohIzUkITByJjR0JTMwaSYhIzk3JCQiKzoyWCEzKiEiKiQhMVspUmJYSTVpJiEjOjckJCIseUYlZSozKiEjNSQhMSJwbyo9b1lAYyEjOjckJCIsYStuLTUqISM1JCExVk0wRG4oPmkmISM6NyQkIitNRVk1IiohIiokITFaPEg0SFlBYyEjOjckJCIsZjZtJj4iKiEjNSQhMSlRcF9pJypHaSYhIzo3JCQiLE0kUiEpSCIqISM1JCEyRGkscSVSUUJjISM7NyQkIixRaDQsOSohIzUkITFkRU1LUyhRaSYhIzo3JCQiLEpKbS46KiEjNSQhMVA5T0M4T0NjISM6NyQkIixqZXYpZiIqISM1JCExQ2lpJHA3W2kmISM6NyQkIix6KT1zcCIqISM1JCEwQkFEa3pfaSYhIzk3JCQiLHIlXCEqeiIqISM1JCExYm5OOkB3RGMhIzo3JCQiLCJcYDAhPiohIzUkITBVKSoqKmVVaWkmISM5NyQkIixfRydcKyMqISM1JCExRiMpUltqdEVjISM6NyQkIix1bSNwNCMqISM1JCExKSkqXHomMzxGYyEjOjckJCIsY2hYK0EqISM1JCExYUQrdCZmd2kmISM6NyQkIit1NVdJIyohIiokITF4ZSJwIylcIkdjISM6NyQkIixXLWYvQyohIzUkITFbJUhZJD1pR2MhIzo3JCQiLEpHYyZcIyohIzUkITI5cykqcDNdIUhjISM7NyQkIixPIVFQZyMqISM1JCExI0cqb2IpZSZIYyEjOjckJCIsQ21QJnAjKiEjNSQhMiZ6PDdiJSopKkhjISM7NyQkIiwoM3U+IUcqISM1JCExLTBKISopKltJYyEjOjckJCIsLzRMJypHKiEjNSQhMk53KUdgQyQ0aiYhIzs3JCQiLChHYikqKkgqISM1JCExRGU4d3ZUSmMhIzo3JCQiLCIpXFYpNCQqISM1JCEwbjg8NXo9aiYhIzk3JCQiK2IjSCxLKiEiKiQhMXZPIkhAZ0JqJiEjOjckJCIsMnp1JkgkKiEjNSQhMWkjKipmaSxHaiYhIzo3JCQiK3hJd1IkKiEiKiQhMU9aNEN0RkxjISM6NyQkIixKJWVNXSQqISM1JCExbz8jUig0eExjISM6NyQkIixAPGUmZiQqISM1JCExXiZwNEorVWomISM6NyQkIiwpUnhdcCQqISM1JCExY3FHLk9tTWMhIzo3JCQiLG9oJ3l6JCohIzUkITEwTUwhelReaiYhIzo3JCQiLEVcVSkqUSohIzUkITEqUV89PDRjaiYhIzo3JCQiLCZwP2QqUiohIzUkITBlbEEpNDFPYyEjOTckJCIsZTV2LlQqISM1JCEyYiE9ZnVAY09jISM7NyQkIixXNiMzPyUqISM1JCExaihwMDU3cWomISM6NyQkIis9a1dJJSohIiokITFuRSxkP1xQYyEjOjckJCIsdixRKVIlKiEjNSQhMShcZzVlRXpqJiEjOjckJCIsa14wLFgqISM1JCEwVlAlNDdTUWMhIzk3JCQiLEZWbShmJSohIzUkITFlKTRuUlopUWMhIzo3JCQiLFIoWycpcCUqISM1JCExZiwwd0xKUmMhIzo3JCQiK1l6dHolKiEiKiQhMDs7bmFvKFJjISM5NyQkIix2OHUrXCohIzUkITImZihwYGpXLWsmISM7NyQkIiwlPSJIK10qISM1JCExZU5bWkZxU2MhIzo3JCQiLFVfNC1eKiEjNSQhMkQlKjQrIjM8VGMhIzs3JCQiLDZqMC5fKiEjNSQhMTAmb1pkTTtrJiEjOjckJCIsWyFIZUgmKiEjNSQhMC5ybE5nP2smISM5NyQkIix1cTotYSohIzUkITImb1NwOnphVWMhIzs3JCQiLEciZXNcJiohIzUkITEvOmIsTylIayYhIzo3JCQiLChvYicpZiYqISM1JCExaTBuRHhXVmMhIzo3JCQiLCozMWRwJiohIzUkITFvejJlOipRayYhIzo3JCQiLCkzb00hZSohIzUkITJ2MHFtI1JRV2MhIzs3JCQiLGg/eScqZSohIzUkITEoKkhkKiopNFtrJiEjOjckJCIsYlVwLWcqISM1JCExMyFvTyZISFhjISM6NyQkIixBPEEqNCcqISM1JCExeFhYM0d0WGMhIzo3JCQiLCx3IVs/JyohIzUkITE5VDgzTkBZYyEjOjckJCIsZS4iZkgnKiEjNSQhMSMqb0QzemlZYyEjOjckJCIsa2RtKlInKiEjNSQhMW9OVmAlKjRaYyEjOjckJCIsayQpKSkqXCcqISM1JCExJypwdUlYYlpjISM6NyQkIiwiXFgrZycqISM1JCExOCZmcCEqMyFbYyEjOjckJCIsZVQkKSpwJyohIzUkITFYMiUzQGglW2MhIzo3JCQiLEYpKnAmeicqISM1JCEwI1s7ZGAqKVtjISM5NyQkIixhSkwqKm8qISM1JCEyMDB4cEVrJFxjISM7NyQkIixISzUpKnAqISM1JCExJ29GRHg1KVxjISM6NyQkIiwjM2E/NSgqISM1JCExJGY6I3ktR11jISM6NyQkIixPWTonPigqISM1JCExZlN4QVxxXWMhIzo3JCQiLGtMOit0KiEjNSQhMU9OI1wjUTxeYyEjOjckJCIsQmd3KlIoKiEjNSQhMXJKJCpbRGleYyEjOjckJCIsQWk4KlwoKiEjNSQhMFEhKSopeXA/bCYhIzk3JCQiK3lHSGcoKiEiKiQhMUZtKGVeT0RsJiEjOjckJCIsOmJfKXAoKiEjNSQhMW95LTdnJ0hsJiEjOjckJCIsWydIa3ooKiEjNSQhMUJ5UyxiU2BjISM6NyQkIixXdV8veiohIzUkITEkPjQ8SiEqUWwmISM6NyQkIixXNlMtISkqISM1JCEwaT08KClHVmwmISM5NyQkIixOYFwtIikqISM1JCExJjQmKkcqcHhhYyEjOjckJCIsXCYpRy8jKSohIzUkITEjKUdGPUJCYmMhIzo3JCQiLEBqJnlIKSohIzUkITEkKVtrJFxdY2wmISM6NyQkIixPbGYoUikqISM1JCExKGVmKXllNGNjISM6NyQkIixBdmQnXCkqISM1JCExTmRpIVxQbGwmISM6NyQkIitUY0NnKSohIiokITE0SztjJTRxbCYhIzo3JCQiLFUqKillcCkqISM1JCExeXl5JGVEdWwmISM6NyQkIixVR3AuKSkqISM1JCExLClwIylHMHpsJiEjOjckJCIsW20oNCEqKSohIzUkITFgQGUpelAkZWMhIzo3JCQiLCopUUIoKiopKiEjNSQhMTBhNiZRbChlYyEjOjckJCIsWTh1KyIqKiEjNSQhMURBSnpaQWZjISM6NyQkIiw3dm0vIyoqISM1JCExPkMqb2gmb2ZjISM6NyQkIixOXEEqSCoqISM1JCExNl8/XVg1Z2MhIzo3JCQiLD0yaypSKiohIzUkITJtXyU9aiFcMG0mISM7NyQkIiwzbmooXCoqISM1JCExKSlvLCNcIyk0bSYhIzo3JCQiLCZSbFFnKiohIzUkITF3NGw9PlhoYyEjOjckJCIsV0Z5JnAqKiEjNSQhMnY5YGJ2ZD1tJiEjOzckJCIsaEpOLCkqKiEjNSQhMTZEcXdNS2ljISM6NyQkIiwuXGYrKioqISM1JCExOXNRIyozd2ljISM6NyQkIiQrIiEiIiQhMSdIYElsKT5qYyEjOi0lJkNPTE9SRzYnJSRSR0JHJCIpQyllcSUhIikkIiIhISIiJCIoJz4hXCYhIiktJStfQVRUUklCVVRFRzYjLyUnc291cmNlRyUsbWF0aGRlZmF1bHRHLSUlVklFV0c2JDskIiIiISIjJCIkKyIhIiIlKERFRkFVTFRHLSYlJl9BWElTRzYjIiIiNictJStfR1JJRExJTkVTRzYnLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIiEhIiItJSpMSU5FU1RZTEVHNiMiIiEtJSpUSElDS05FU1NHNiMiIiEtJS1UUkFOU1BBUkVOQ1lHNiMkIiIhISIiLSUpX1ZJU0lCTEVHNiMiIiEtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKkxJTkVTVFlMRUc2IyIiIS0lKlRISUNLTkVTU0c2IyIiIS0lLVRSQU5TUEFSRU5DWUc2IyQiIiEhIiItJiUmX0FYSVNHNiMiIiM2Jy0lK19HUklETElORVNHNictJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lKkxJTkVTVFlMRUc2IyIiIS0lKlRISUNLTkVTU0c2IyIiIS0lLVRSQU5TUEFSRU5DWUc2IyQiIiEhIiItJSlfVklTSUJMRUc2IyIiIS0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUqTElORVNUWUxFRzYjIiIhLSUqVEhJQ0tORVNTRzYjIiIhLSUtVFJBTlNQQVJFTkNZRzYjJCIiISEiIi0lK0FYRVNMQUJFTFNHNiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USgmIzk1Mjt8aXI2Ii8lJ2ZhbWlseUdRITYiLyUlc2l6ZUdRIzEwNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2IlEhNiItJSlfVklTSUJMRUc2IyIiIi0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJHEmISIiLSUpQk9VTkRTX1lHNiMkIiRnJSEiIi0lLUJPVU5EU19XSURUSEc2IyQiJSFIJCEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiVnTSEiIi0lKUNISUxEUkVORzYiLSUrQU5OT1RBVElPTkc2Jy0lKUJPVU5EU19YRzYjJCIiISEiIi0lKUJPVU5EU19ZRzYjJCIiISEiIi0lLUJPVU5EU19XSURUSEc2IyQiJStTISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJStTISIiLSUpQ0hJTERSRU5HNiI=NiI= plot(loglikelihood_reduced,theta=1/100..10,numpoints=1000); TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODg0NTE4NjM1ODcyNTU4WCwlKWFueXRoaW5nRzYjJSpzeW1tZXRyaWNHNiJbZ2whIiYhISEjKyIlIiUqJiUoc2lnbWEyfGlyRyIiIi1JJGV4cEc2JCUqcHJvdGVjdGVkRyUoX3N5c2xpYkc2IywkKiYtJSRhYnNHNiMiIiFGKiUndGhldGF8aXJHISIiRjhGKiomRilGKi1GLDYjLCQqJi1GNDYjIyIiIyIiJEYqRjdGOEY4RipGKComRilGKi1GLDYjLCQqJi1GNDYjIyIiJUZCRipGN0Y4RjhGKkY5RigqJkYpRiotRiw2IywkKiYtRjQ2I0ZBRipGN0Y4RjhGKkZDRjlGKDYi openturns-1.9/validation/src/validInverseGamma.mw000066400000000000000000001111731307543307100223130ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY2LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ2Fzc3VtZUYnRi9GMi1JKG1mZW5jZWRHRiQ2JC1GIzYtLUYsNiVRImtGJ0YvRjItRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuL0ZOUSwwLjMzMzMzMzNlbUYnLUYsNiVRJ2xhbWJkYUYnL0YwRj1GOUZnb0Zqb0ZecC1GLDYlUSJ0RidGL0YyRmdvRmpvRjlGNUZPRmduLUYsNiVRJHBkZkYnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGV4cEYnRmdwRjktRmBvNiQtRiM2JC1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkgvRktRLDAuMjIyMjIyMmVtRicvRk5GYXItRmJxNigtRltwNiRRIjFGJ0Y5LUYjNiVGZHAtRjY2LVEnJnNkb3Q7RidGOUY7Rj5GQEZCRkRGRkZIRmpuRltvLUZgbzYkLUYjNiMtRiw2JVEieEYnRi9GMkY5LyUubGluZXRoaWNrbmVzc0dGZ3IvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaHMvJSliZXZlbGxlZEdGPUY5LUYjNigtSSVtc3VwR0YkNiUtRiw2JVEpJmxhbWJkYTtGJ0ZncEY5LUYjNiNGZG8vJTFzdXBlcnNjcmlwdHNoaWZ0R0ZdcEZqci1GYHQ2JUZdcy1GIzYlRmRvLUY2Ni1RIitGJ0Y5RjtGPkZARkJGREZGRkhGYHJGYnJGZXJGZ3RGanItRiw2JVEmR0FNTUFGJ0ZncEY5LUZgbzYkRmV0RjlGZHNGZnNGaXNGW3QtRjY2LVEiO0YnRjlGO0ZhcEZARkJGREZGRkhGam5GTUZPRmduLUYsNiVRJGNkZkYnRi9GMkZecS1GLDYlUSRpbnRGJ0YvRjItRmBvNiQtRiM2KUZbcUZecEZhcy1GNjYtUSI9RidGOUY7Rj5GQEZCRkRGRkZIRkpGTUZqby1GNjYtUSMuLkYnRjlGO0Y+RkBGQkZERkZGSEZgckZbb0ZocEY5RmV1 LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiotSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkKiZJKGxhbWJkYXxpckdGKCEiIkkieEdGKEYtRi0iIiIpRixJI2t8aXJHRihGLSlGLiwmRjFGL0YvRi9GLS1JJkdBTU1BR0YlNiNGMUYt KiwsLCooSSNQaUclKnByb3RlY3RlZEciIiItSSRjc2NHNiRGJkkoX3N5c2xpYkc2IjYjKiZGJUYnSSNrfGlyR0YsRidGJ0YvIiIjRicqKEYlRidGKEYnRi9GJ0YnKjIpSSN0fGlyR0YsLCZGLyEiIkY2RidGJylJKGxhbWJkYXxpckdGLEY1RicpKiZGNEY2RjhGNiwkRi8jRjZGMEYnLUkkZXhwR0YqNiMsJEY6RjxGJy1JK1doaXR0YWtlck1HRio2JSwkRi8jRidGMCwmRi9GRUZFRidGOkYnLUkmR0FNTUFHRio2IywmRidGJ0YvRjZGJ0Y0RidGOEYnRjYqNClGNCwkRi9GNkYnKUY4Rk1GJ0Y5RidGPUYnLUZCNiUsJkYvRkVGJ0YnRkZGOkYnRkdGJ0Y0RidGOEYnRi9GJ0Y2KjJGTEYnRk5GJ0Y5RidGPUYnRk9GJ0ZHRidGNEYnRjhGJ0Y2RidGR0Y2Ri9GNiwmRi9GJ0YnRidGNi1GSDYjRi9GNg== JSFH print(); # input placeholder QyYtSSlzaW1wbGlmeUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLUknZmFjdG9yR0YlNiMqJi1JJWRpZmZHRiY2JEkkY2RmR0YoSSdsYW1iZGFHRigiIiItSSVzdWJzR0YmNiQvSSJ4R0YoSSJ0R0YoSSRwZGZHRighIiJGMy1GJDYjLUYrNiMtRi82JEYxSSJrR0YoRjs= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder KiZJI3R8aXJHNiIiIiJJKGxhbWJkYXxpckdGJCEiIg== LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder Warning, inserted missing semicolon at end of statement KiwsLCoqKUkja3xpckc2IiIiIyIiIkkobGFtYmRhfGlyR0YnRiktSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRic2IywkKiZGKiEiIkkieEdGJ0YzRjNGKUY0RilGKSo4KSomSSN0fGlyR0YnRjNGKkYzLCQqJiNGKUYoRilGJkYpRjNGKS1GLDYjLCQqKEY7RilGOEYzRipGM0YzRiktSStXaGl0dGFrZXJNR0YtNiUsJkY6RilGKUYpLCZGOkYpRjtGKUY3RikpRipGJkYpKUY0LCZGJkYpRilGKUYpKUYqRihGKUY0RikpRjgsJEYmRjNGKSlGKkZKRilGOEYpRiZGKUYpKiZGK0YpRiZGKUYzKjZGNkYpRjxGKUZARilGRUYpRkZGKUZIRilGNEYpKUY4LCZGJkYzRilGM0YpKUYqRk9GKUY4RilGKSo0RjZGKUY8RilGQEYpRkVGKUZGRilGKkYpRjRGKUZJRilGS0YpRjNGKUY0RjNGK0YzRiZGM0ZIRjM= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/validOTRobOpt.mw000066400000000000000000000665331307543307100214160ustar00rootroot00000000000000 restart: with(Statistics): valnum:=x=1.0,alpha=0.5: pdf:=PDF(RandomVariable(Normal(0,1)),t): f:=x*(1+theta_1)+theta_2^2; mean:=int(int(f*subs(t=theta_1,pdf)*subs(t=theta_2,pdf),theta_1=-infinity..infinity),theta_2=-infinity..infinity); mean2:=int(int(f^2*subs(t=theta_1,pdf)*subs(t=theta_2,pdf),theta_1=-infinity..infinity),theta_2=-infinity..infinity): meanstd:=(1-alpha)*mean+alpha*sqrt(mean2-mean^2); quantile_neg:=solve(x*(1+theta_1)+theta_2^2<=s,theta_1) assuming x<0; quantile_pos:=solve(x*(1+theta_1)+theta_2^2<=s,theta_1) assuming x>0; quantile_0:=solve(x*(1+theta_1)+theta_2^2<=s,theta_1) assuming x=0; evalf(subs(valnum,[mean, meanstd])); LCYqJkkieEc2IiIiIiwmRiZGJkkodGhldGFfMUdGJUYmRiZGJiokSSh0aGV0YV8yR0YlIiIjRiY= LCZJInhHNiIiIiJGJUYl LCYqJiwmIiIiRiVJJmFscGhhRzYiISIiRiUsJkkieEdGJ0YlRiVGJUYlRiUqJkYmRiUsKiokRikiIiNGKCokRipGLkYuRipGLiIiJEYlI0YlRi5GJQ== PCMxKiYsKCokSSh0aGV0YV8yRzYiIiIjISIiSSJzRzYiIiIiSSJ4RzYiISIiIiIiSSJ4RzYiISIiSSh0aGV0YV8xRzYi PCMxSSh0aGV0YV8xRzYiKiYsKCokSSh0aGV0YV8yRzYiIiIjISIiSSJzRzYiIiIiSSJ4RzYiISIiIiIiSSJ4RzYiISIi LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMSwmKiRJKHRoZXRhXzJHNiIiIiMiIiJJInhHRipGLEkic0dGKjcjSSh0aGV0YV8xR0YqNyI= NyQkIiM/ISIiJCIrL2EtbT0hIio= openturns-1.9/validation/src/validStandardDistributionPolynomialFactory.mw000066400000000000000000002241301307543307100274670ustar00rootroot00000000000000 restart: Digits:=25: with(Statistics): pdfs:=[PDF(RandomVariable(Laplace(0,1)),x),PDF(RandomVariable(Logistic(0,1)),x),PDF(RandomVariable(Normal(0,1)),x),PDF(RandomVariable(Normal(1,1)),x),PDF(RandomVariable(Rayleigh(1)),x),PDF(RandomVariable(StudentT(22)),x),PDF(RandomVariable(Triangular(-1,1,0.3)),x),PDF(RandomVariable(Uniform(-1,1)),x),PDF(RandomVariable(Uniform(-1,3)),x),PDF(RandomVariable(Weibull(1,3)),x)]: a_list:=[-infinity,-infinity,-infinity,-infinity, 0,-infinity,-1,-1,-1, 0]: b_list:=[ infinity, infinity, infinity, infinity,infinity, infinity, 1, 1, 3,infinity]: for i from 1 to 11 do: pdf:=pdfs[i]; a:=a_list[i]: b:=b_list[i]: print(pdf); p0:=0: p1:=1: q0:=0: q1:=1: Kprec:=1: Knext:=0: for n from 1 to 4 do: if n>1 then K:=Knext; else K:=evalf(Int(p1*p1*pdf,x=a..b)): end if: #print("K",K); alpha:=evalf(Int(x*p1*p1*pdf,x=a..b))/K; beta:=K/Kprec; #print(evalf(["monic", alpha, beta])); p2:=expand((x-alpha)*p1-beta*p0); Kprec:=K; p0:=p1; p1:=p2; Knext:=evalf(Int(p2*p2*pdf,x=a..b)); betaNext:=Knext/K; a0:=1/sqrt(betaNext): a1:=-alpha/sqrt(betaNext): a2:=-sqrt(beta/betaNext): q2:=expand((a0*x+a1)*q1+a2*q0): q0:=q1; q1:=q2: #print(evalf(["normalize", a0, a1, a2])); print(sort(evalf[7](p2/sqrt(Knext)),x, ascending)); end do: print(evalf[7](fsolve(p2,x))); end do: LCQtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IywkLUkkYWJzR0YmNiNJInhHRighIiIjIiIiIiIj LCRJInhHNiIkIihtNTIoISIo LCYkIShPQFolISIoIiIiKiRJInhHNiIiIiMkIihvZ0IjRiU= LCZJInhHNiIkISgtTngmISIoKiRGIyIiJCQiKF83IlshIik= LCgkIihYdEgkISIoIiIiKiRJInhHNiIiIiMkISgtWWMjRiUqJEYoIiIlJCIoVkZqKCEiKg== NiYkIShxKXpjISInJCEoKD1kNkYlJCIoKD1kNkYlJCIocSl6Y0Yl KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0kieEdGKCIiIiwmRitGK0YjRishIiM= LCYkIihOKnAjKSEjTiIiIkkieEc2IiQiKCFIOGIhIig= LCgkIShxLGYmISIoIiIiSSJ4RzYiJCEoNXpSIiEjTSokRiciIiMkIigzIypwIkYl LCokIihyIm83ISNNIiIiSSJ4RzYiJCEoYEUiXCEiKCokRiciIiMkIShMalspISNOKiRGJyIiJCQiKClSYk4hIik= LCwkIihcKD1VISIoIiIiSSJ4RzYiJCEocDVaIyEjTSokRiciIiMkISgnM2U/RiUqJEYnIiIkJCIoXW5OIiEjTiokRiciIiUkIigzVWgmISIq NiYkISgjKj0oZSEiJyQhKCRHdzlGJSQiKCRHdzlGJSQiKCMqPShlRiU= LCQqKCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkLUkkZXhwRzYkRihJKF9zeXNsaWJHNiI2IywkKiRJInhHRi9GJEYpRiZGJQ== LCYkIihTOillISNNIiIiSSJ4RzYiJCIoKysrIiEiJw== LCgkIShtNTIoISIoIiIiSSJ4RzYiJCEoQis7JSEjTSokRiciIiMkIihtNTIoRiU= LCokISgyM2IqISNNIiIiSSJ4RzYiJCEoWFpBIiEiJyokRiciIiMkIihnbk0jRiUqJEYnIiIkJCIoI1sjMyUhIig= LCwkIihFUDcnISIoIiIiSSJ4RzYiJCIobiZwZSEjTSokRiciIiMkIShYWkEiISInKiRGJyIiJCQhKFtTPCJGKyokRiciIiUkIihVNy8jRiU= NiYkISg5V0wjISInJCEoUSc+dSEiKCQiKFEnPnVGKCQiKDlXTCNGJQ== LCQqKCIiIyMiIiJGJEkjUGlHJSpwcm90ZWN0ZWRHIyEiIkYkLUkkZXhwRzYkRihJKF9zeXNsaWJHNiI2IywkKiQsJkkieEdGL0YmRipGJkYkRilGJkYl LCYkISgrKysiISInIiIiSSJ4RzYiJCIoKysrIkYl LCZJInhHNiIkISg4VVQiISInKiRGIyIiIyQiKG01MighIig= LCgkIihrXDspISIoIiIiKiRJInhHNiIiIiMkIShYWkEiISInKiRGKCIiJCQiKCNbIzMlRiU= LCokISglWyMzJSEiKCIiIkkieEc2IiQiKCUqSGoiISInKiRGJyIiJCQhKG9cOylGJSokRiciIiUkIihVNy8jRiU= NiYkISg5V0wiISInJCIoaS5lIyEiKCQiKGs+dSJGJSQiKDlXTCRGJQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMkkieEc2IiIiIUYpKiZGJyIiIi1JJGV4cEc2JEYkSShfc3lzbGliR0YoNiMsJCokRiciIiMjISIiRjNGKw== LCYkIShlSSI+ISInIiIiSSJ4RzYiJCIoK2tfIkYl LCgkIihdYyVHISInIiIiSSJ4RzYiJCEoKFExXUYlKiRGJyIiIyQiKGlXciJGJQ== LCokIShSUXkkISInIiIiSSJ4RzYiJCIoKCplMyIhIiYqJEYnIiIjJCEoT1IkekYlKiRGJyIiJCQiKFdwZyJGJQ== LCwkIihDU3MlISInIiIiSSJ4RzYiJCEoY1UlPiEiJiokRiciIiMkIihfb0QjRisqJEYnIiIkJCEoM0RmKkYlKiRGJyIiJSQiKEo8SyJGJQ== NiYkIigvNydSISIoJCIoT248IiEiJyQiKG41PyNGKCQiKDZPWyRGKA== LCQqJiIjQSMiIiIiIiMsJkYmRiYqJEkieEc2IkYnI0YmRiQjISNCRicjIiZ6IikpIih3Jls1 LCRJInhHNiIkIihEWWAqISIo LCYkIShPbGEnISIoIiIiKiRJInhHNiIiIiMkIignUl5mRiU= LCZJInhHNiIkISgmSD41ISInKiRGIyIiJCQiKCUqKXpGISIo LCgkIigiKilIXiEiKCIiIiokSSJ4RzYiIiIjJCEoblZSKUYlKiRGKCIiJSQiKCpcPDVGJQ== NiYkIShdVHYjISInJCEoa0U6KSEiKCQiKGtFOilGKCQiKF1UdiNGJQ== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYpMkkieEc2IiEiIiIiITFGJyQiIiRGKSwmJCI6M0JwMkJwMkJwMkJwKCEjRCIiIkYnRi8xRidGMiwmJCI6ciZHOWRHOWRHOWRHOSEjQ0YyRickITpyJkc5ZEc5ZEc5ZEc5RjdGKg== LCYkIShhTlQjISIoIiIiSSJ4RzYiJCIoYU5UIyEiJw== LCgkIShRTHgpISIoIiIiSSJ4RzYiJCEoJVIpRyVGJSokRiciIiMkIig/YTEmISIn LCokIihXZGYjISIoIiIiSSJ4RzYiJCEoKnlPVCEiJyokRiciIiMkIShJdiwiRisqJEYnIiIkJCIoaWwuIiEiJg== LCwkIihLOHkpISIoIiIiSSJ4RzYiJCIoYWhEKkYlKiRGJyIiIyQhKEQ+TiIhIiYqJEYnIiIkJCEoJlsnKj4hIicqJEYnIiIlJCIoJjQ9QEYv NiYkIShrJEh1ISIoJCEoQ3hOI0YlJCIoV081JEYlJCIoR2dpKEYl LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkieEc2IiEiIiIiITJGJyIiIiNGLCIiI0Yq LCRJInhHNiIkIiheP3QiISIn LCYkIShNIT02ISInIiIiKiRJInhHNiIiIiMkIigtVE4kRiU= LCZJInhHNiIkIShGJ29SISInKiRGIyIiJCQiKHlWaCdGJw== LCgkIigrXTciISInIiIiKiRJInhHNiIiIiMkISgrXTciISImKiRGKCIiJSQiKCtESiJGLQ== NiYkIShqOGgpISIoJCEoNSkqUiRGJSQiKDUpKlIkRiUkIihqOGgpRiU= LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYnMkkieEc2IiEiIiIiITJGJyIiJCMiIiIiIiVGKg== LCYkIShlLW0pISIoIiIiSSJ4RzYiJCIoZS1tKUYl LCgkISgnMyZ6IyEiKCIiIkkieEc2IiQhKF9xbiIhIicqJEYnIiIjJCIoZl9RKUYl LCokIig7djoiISInIiIiSSJ4RzYiJCIoJnlnXCEiKCokRiciIiMkISgjUiFbI0YlKiRGJyIiJCQiKHZ6RSlGKw== LCwkISh0PW4pISIoIiIiSSJ4RzYiJCIoXFBNIyEiJyokRiciIiMkIih2JDRARisqJEYnIiIkJCEoXDdHJEYrKiRGJyIiJSQiKEFKPylGJQ== NiYkIShFRkEoISIoJCIoei4/JEYlJCIoaSp6OyEiJyQiKHNBcyNGKg== LUkqcGllY2V3aXNlRyUqcHJvdGVjdGVkRzYlMkkieEc2IiIiIUYpLCQqJkYnIiIjLUkkZXhwRzYkRiRJKF9zeXNsaWJHRig2IywkKiRGJyIiJCEiIiIiIkY0 LCYkIShPOXYjISInIiIiSSJ4RzYiJCIoJz0iMyRGJQ== LCgkIignNCNSJiEiJyIiIkkieEc2IiQhKHAnUjghIiYqJEYnIiIjJCIoaSh5c0Yl LCokIShXeiIqKSEiJyIiIkkieEc2IiQiKF9GbCQhIiYqJEYnIiIjJCEoV11HJUYrKiRGJyIiJCQiKG0jKVwiRis= LCwkIihTRUwiISImIiIiSSJ4RzYiJCEoKTNCekYlKiRGJyIiIyQiKCZHJlwiISIlKiRGJyIiJCQhKEstNiJGLyokRiciIiUkIihXLyJHRiU= NiYkIig/JWVKISIoJCIoMi1QKEYlJCIoSyoqPiIhIickIigoZShwIkYq Error, invalid subscript selector openturns-1.9/validation/src/valid_FrankCopula.mw000066400000000000000000001202171307543307100223000ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY3LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJ0RpZ2l0c0YnRi9GMi1GNjYtUSomY29sb25lcTtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUkjbW5HRiQ2JFEkMTAwRidGOUY1Rk9GZ24tRiw2JVEmdGhldGFGJy9GMEY9RjlGX28tRmNvNiRRLTEuMGUmbWludXM7M0YnRjlGNUZPRmduLUYsNiVRIkNGJ0YvRjJGX28tRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmRwLUkmbWZyYWNHRiQ2KC1GIzYkLUYsNiVRJGxvZ0YnRmlvRjktSShtZmVuY2VkR0YkNiQtRiM2JS1GY282JFEiMUYnRjktRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZjcEZlcC1GZ3A2KC1GIzYlLUZfcTYkLUYjNiYtRiw2JVEkZXhwRidGaW9GOS1GX3E2JC1GIzYmRmBwRmZvLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZqbkZbby1GLDYlUSJ1RidGL0YyRjktRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZjcEZlcEZjcUY5RmhyLUZfcTYkLUYjNiZGYXItRl9xNiQtRiM2JkZgcEZmb0Zoci1GLDYlUSJ2RidGL0YyRjlGXnNGY3FGOS1GIzYjLUZfcTYkLUYjNiZGYXItRl9xNiQtRiM2JEZgcEZmb0Y5Rl5zRmNxRjkvJS5saW5ldGhpY2tuZXNzR0ZlcS8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZqdC8lKWJldmVsbGVkR0Y9RjktRiM2I0Zmb0ZmdEZodEZbdUZddS1GNjYtUSI7RidGOUY7L0Y/RjFGQEZCRkRGRkZIRmpuRk0= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LCQtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCYiIiJGKyomLCYtSSRleHBHRiU2IywkSSJ1R0YoJCEjNSEiJUYrISIiRitGKywmLUYvNiMsJEkidkdGKEYzRitGNkYrRiskIV9xZipmJFw8TGI2Y3YoRzttMXYtaCshXF1Ia2cmUW5IcCVRZHpdJ29FS154V1dXPkxMTDMrMCsiISMnKiQhX3ErKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrNUY+ NiI= %; QyQ+SSZEZWJ5ZUc2ImYqNiRJInhHRiVJIm5HRiVGJUYlRiVDJEAkMjkkIiIhTywmLUYkNiQsJEYtISIiOSUiIiIqKEY1RjZGLUY2LCZGNUY2RjZGNkY0RjRPLUkmZXZhbGZHJSpwcm90ZWN0ZWRHNiMqKEY1RjYpRi1GNUY0LUkkSW50R0YlNiQqJilJInRHRiVGNUY2LCYtSSRleHBHNiRGPEkoX3N5c2xpYkdGJTYjRkVGNkY0RjZGNC9GRTtGLkYtRjZGJUYlRiVGNA== print(); # input placeholder QzQtSSZwcmludEclKnByb3RlY3RlZEc2I1EkcmhvNiIiIiI+SSRyaG9HRigsJiNGKSIjN0YpKiYsJi1JJkRlYnllR0YoNiRJJnRoZXRhR0YoIiIjRiktRjI2JEY0RikhIiJGKUY0RjhGKUYpPkkncmhvQXBwR0YoKiZGNEYpLCYtSSIvRzYkRiVJKF9zeXNsaWJHRig2IyQiJD8oRjgkIiM1RjgqJi1JIipHRiU2JEY0RjRGKS1GPjYjJCIlK2EiIiFGKUY4RilGKSwmRilGKSomRjpGKUYrRjhGOEYpKiYsJkYrRilGOkY4RilGNCEiJkYpLUYkNiNRJHRhdUYoRik+SSR0YXVHRigsJkYpRikqJi1GSDYkIiIlLCZGNkYpRjhGKUYpRjRGOEYpRik+SSd0YXVBcHBHRigsJComRjRGKSwmRkRGKS1GSDYkLCRGNCRGKSEiI0Y0RjhGKSNGKSIiKkYpLCZGKUYpKiZGam5GKUZYRjhGOEYp LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder USRyaG82Ig== JCJccUxMcSl6UUMhKVw1c29mQFtvc3ZTJj5oMzxMeVUnMz8oXGZkIXlVV0l2eVlzcS5QcSkpKSkpUSIhJCwi JCJfcXEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEuUHEpKSkpKVEiISQvIg== JCJgcC9hbCVwI28zTSNRbigpXHJRXnMmUSJRKCpHMTMrazJnMSwtWWJVMj1vRSpRPzViIyEkKyI= JCJfcSsrKysrKysrSUUnSExHJW8/VnoxTilmWHlaY2BxJGVUI1E4J3ohUlxJbzcqUU51MHVFUTNWTiEkMCI= USR0YXU2Ig== JCJccSsrTW1lOkRcLi5fXWZ2L2pJbzVQYyJbY2IsZzlDK280UjdYLzVaayopPSsrKys2NjY2ISQrIg== JCJfcSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys2NjY2ISQuIg== JCJgcF92JHo1JW8jUllZNUpZbF1AI1t5OWs9TWZsLTAqZnhsZl0zSlVqby9jLW8rPCEkKyI= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRJTU0MDBGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictRiM2Iy1GLzYkUSM3MkYnRjIvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRj8vJSliZXZlbGxlZEdRJmZhbHNlRic= LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder IiN2 print(); # input placeholder LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/valid_IteratedQuadrature.mw000066400000000000000000000611431307543307100236740ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY2LUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC4wZW1GJy8lJmRlcHRoR0ZULyUqbGluZWJyZWFrR1EobmV3bGluZUYnLUYsNiVRJmV2YWxmRidGL0YyLUkobWZlbmNlZEdGJDYmLUYjNiMtSSNtbkdGJDYkUSMzMEYnRjlGOS8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJy1GW282JC1GIzYlLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktGVy9GTkZXLUYsNiVRJEludEYnRi9GMi1GW282JC1GIzYrRmJwLUZbbzYkLUYjNi4tRltvNiQtRiM2JS1GYG82JFEiMUYnRjktRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZocS1GLDYlUSN4MUYnRi9GMkY5LUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSEZgcEZhcEZdcC1GLDYlUSRleHBGJy9GMEY9RjktRltvNiQtRiM2Ji1GNjYtUSomdW1pbnVzMDtGJ0Y5RjtGPkZARkJGREZGRkhGZ3FGaXEtSSVtc3VwR0YkNiVGanEtRiM2Iy1GYG82JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2Ni1RKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGZ3FGaXEtRlxzNiUtRiw2JVEjeDJGJ0YvRjJGXnNGY3NGOS1GNjYtUSIsRidGOUY7L0Y/RjFGQEZCRkRGRkZIRmBwL0ZOUSwwLjMzMzMzMzNlbUYnRlt0LUY2Ni1RIj1GJ0Y5RjtGPkZARkJGREZGRkhGSkZNRmhyRmpxLUY2Ni1RIy4uRidGOUY7Rj5GQEZCRkRGRkZIRmdxRmFwRmpxRjlGXnRGanFGZHRGaHItRmBvNiRRJDEuOUYnRjlGZ3QtRmBvNiRRJDIuMUYnRjlGOUY5LUY2Ni1RIjtGJ0Y5RjtGYXRGQEZCRkRGRkZIRmBwRk0tRlA2JkZSRlVGWC9GZW5RJWF1dG9GJ0ZPRmduRmpuLUZbbzYkLUYjNiVGXXBGYnAtRltvNiQtRiM2K0ZicC1GW282JC1GIzYzRl1xRl1yRl1wRmByRmRyRl50Rlt0RmR0RmhyLUkmbWZyYWNHRiQ2KEZhcUZecy8lLmxpbmV0aGlja25lc3NHRmNxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmp2LyUpYmV2ZWxsZWRHRj1GZnNGXXAtRmR2NihGanEtRiM2JC1GLDYlUSRhYnNGJ0ZjckY5LUZbbzYkLUYjNiNGanFGOUZmdkZodkZbd0Zdd0ZndEZjdkZkcUZfd0Y5Rl50RmpxRmR0RmhyRmp0Rmd0Rl11RjlGOUZgdUZdcEZPRmduRmpuLUZbbzYkLUYjNiVGXXBGYnAtRltvNiQtRiM2K0ZicC1GW282JC1GIzYxRmN3LUZbbzYkLUYjNiVGYXFGZHEtRlxzNiVGW3QtRiM2Iy1GYG82JFEiM0YnRjlGY3NGOUZdckZdcEZgckZkckZedEZbdEZkdEZoci1GLDYlUSVzcXJ0RidGY3JGOS1GW282JC1GIzYmLUZkdjYoRmFxLUYjNiMtRmBvNiRRIjRGJ0Y5RmZ2Rmh2Rlt3Rl13RmRxRl1wRltzRjlGZ3RGYXktRltvNiQtRiM2JkZoeUZdcEZkcUZbc0Y5RjlGXnRGanFGZHRGaHJGanRGZ3RGXXVGOUY5RmB1Rl1w LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder JCI/RVZoemtUWz8vIlE4d19BIiEjSA== JCI/J0h3Nmk6bmBmKnBJPiJmKj4hI0g= JCI/Vi4xJ1FRXyc0cUNLLVo8QSEjSA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic= openturns-1.9/validation/src/valid_SORM.txt000066400000000000000000000066221307543307100210520ustar00rootroot00000000000000> restart: > with(LinearAlgebra): > Digits:=30: > G:=-F_*L_^3/(6*E_*I_)-s; > T:=E_=E_moy+E_sd*u1,F_=F_moy+F_sd*u2,L_=L_moy+L_sd*u3,I_=I_moy+I_sd*u4 > ; > g:=subs(T,G): > L:=1/2*(u1^2+u2^2+u3^2+u4^2)-lambda*g: > sys:=diff(L,u1),diff(L,u2),diff(L,u3),diff(L,u4),diff(L,lambda): > #sol:=solve({sys},{u1,u2,u3,u4,lambda}); > num:=E_moy=50,E_sd=1,F_moy=1,F_sd=1,L_moy=10,L_sd=1,I_moy=5,I_sd=1,s=- > 3/2; > solnum:=fsolve(subs(num,{sys}),{u1,u2,u3,u4,lambda}): > subs(solnum,[u1,u2,u3,u4,lambda]); > beta:=subs(solnum,sqrt(u1^2+u2^2+u3^2+u4^2)); 3 F_ L_ G := - ------- - s 6 E_ I_ T := E_ = E_moy + E_sd u1, F_ = F_moy + F_sd u2, L_ = L_moy + L_sd u3, I_ = I_moy + I_sd u4 num := E_moy = 50, E_sd = 1, F_moy = 1, F_sd = 1, L_moy = 10, L_sd = 1, I_moy = 5, I_sd = 1, s = -3/2 [-0.0310354131886385333411402260320, 0.841941676288555078886397764047, 0.445403785549829310777385152548, -0.332237896484057720356713452438, -1.03387164170675809896100912782] beta := 1.00925494062979021864719380923 > grad_g:=: > hess_g:=diff(_x,u1),grad_g)|map(_x->diff(_x,u2),grad_g)|map(_ > x->diff(_x,u3),grad_g)|map(_x->diff(_x,u4),grad_g)>: > map(_x->evalf(subs(num,solnum,_x)),grad_g): > map(_x->evalf(subs(num,solnum,_x)),hess_g): > M:=-(DiagonalMatrix(<1|1|1|1>)-grad_g.Transpose(grad_g)/Norm(grad_g,2, > conjugate=false)^2).hess_g/Norm(grad_g,2,conjugate=false): > Mnum:=map(_x->evalf(subs(num,solnum,_x)),M); Mnum := [0.000614816378567372974392585979320 , -0.0116183116116243281612654229112 , -0.000573373284883000134471679041010 , -0.000713911705034510284765423988376] [0.0000157867985964623520085654659985 , -0.137716634653075004620307551850 , 0.0155547104103061432509295616504 , 0.0193672954829168170140631189703] [ -5 [0.835152844265092281487270805652 10 , 0.166739844643325812480067438882 , -0.0340213552191429707721507036239 , ] 0.0102456820548182678055685111984] [ -5 [-0.622961531139187778757812603112 10 , -0.124375447720974981776359682983 , -0.00613803118752803886389482548954 , ] 0.0628819155269579205767490657498] > curvatures:=Eigenvalues(Mnum); [ -0.150290062567166656332912272142 + 0. I ] [ ] [ 0.000407816322332149654279388752865 + 0. I ] curvatures := [ ] [ -29 ] [-0.192028063722549999999376072675 10 + 0. I] [ ] [ 0.0416409882781418248373162796491 + 0. I ] > with(Statistics): > X:=RandomVariable(Normal(0,1)): > PFORM:=evalf(subs(x=-beta,CDF(X,x))); PFORM := 0.156426191965496816525285557108 > PSORM:=PFORM: > for i from 1 to 4 do > PSORM:=PSORM/sqrt(1+beta*curvatures[i]); > od: > PSORM; 0.166341709365589303575903437939 - 0. I > openturns-1.9/validation/src/valid_VonMises.mw000066400000000000000000000565521307543307100216500ustar00rootroot00000000000000 LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbWlHRiQ2JVEocmVzdGFydEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIjpGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSYwLjBlbUYnL0ZORlMtRiw2JVEnYXNzdW1lRidGL0YyLUkobWZlbmNlZEdGJDYkLUYjNiUtRiw2JVEma2FwcGFGJy9GMEY9RjktRjY2LVEiPkYnRjlGO0Y+RkBGQkZERkZGSEZKRk0tSSNtbkdGJDYkUSIwRidGOUY5RjU= QyQ+SSJnRzYiLUkkSW50R0YlNiQqJi1JIipHJSpwcm90ZWN0ZWRHNiRJInhHRiVGLiIiIi1JJGV4cEdGJTYjKiZJJmthcHBhR0YlRi8tSSRjb3NHRiU2I0YuRi9GLy9GLjssJEkjUGlHRiwhIiJGO0Yv LUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHRic2JVE1b3V0cHV0fnJlZGlyZWN0ZWQuLi5GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRic= print(); # input placeholder LUkkSW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiQqJkkieEdGJyIiIy1JJGV4cEdGJDYjKiZJJ2thcHBhfGlyR0YnIiIiLUkkY29zR0YkNiNGKkYxRjEvRio7LCRJI1BpR0YlISIiRjg= openturns-1.9/validation/src/valid_confidence_region.mw000066400000000000000000000753111307543307100235370ustar00rootroot00000000000000 restart: f:=sqrt(lambda/(2*Pi*x^3))*exp(-lambda*(x-mu)^2/(2*x*mu^2)); LCQqKCIiIyMiIiJGJCooSSdsYW1iZGFHNiJGJkkjUGlHJSpwcm90ZWN0ZWRHISIiSSJ4R0YpISIkRiUtSSRleHBHNiRGK0koX3N5c2xpYkdGKTYjLCQqKkYoRiYsJkYtRiZJI211R0YpRixGJEYtRixGNyEiIyNGLEYkRiZGJQ== solve(f=y,x); Warning, solutions may have been lost LUknUm9vdE9mRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJiooIiIjIyIiIkYrKihJJ2xhbWJkYUdGJ0YtSSNQaUdGJSEiIkkjX1pHRiQhIiRGLC1JJGV4cEdGJDYjLCQqKkYvRi0sJkYyRi1JI211R0YnRjFGK0YyRjFGOiEiIyNGMUYrRi1GMUkieUdGJ0Yr logPDF:=log(alpha/beta)+(-1-alpha)*log(x/beta)-(x/beta)^(-alpha); cdf:=exp(-(x/beta)^(-alpha)); LCgtSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjKiZJJmFscGhhR0YoIiIiSSViZXRhR0YoISIiRiwqJiwmRi5GLEYrRi5GLC1GJDYjKiZJInhHRihGLEYtRi5GLEYsKUYzLCRGK0YuRi4= LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCkqJkkieEdGJyIiIkklYmV0YUdGJyEiIiwkSSZhbHBoYUdGJ0YvRi8= x_opt:=solve(logPDF=y,x); y_opt:=simplify(subs(x=x_opt,cdf)); KiYtSSRleHBHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IyooLCoqJi1JKUxhbWJlcnRXR0YlNiMsJCooSSZhbHBoYUdGKCIiIi1GJDYjLCQqKCwmLUkjbG5HRiU2IyomRjJGM0klYmV0YUdGKCEiIkYzSSJ5R0YoRj5GM0YyRjMsJkYzRjNGMkYzRj5GPkYzRkBGPkY+RjNGMkYzRjMqJkYyRjNGOUYzRjMqJkYyRjNGP0YzRj5GLUYzRjNGQEY+RjJGPkYzRj1GMw== LUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsJCktRiM2IyooLCoqJi1JKUxhbWJlcnRXR0YkNiMsJCooSSZhbHBoYUdGJyIiIi1GIzYjLCQqKCwmLUkjbG5HRiQ2IyomRjVGNkklYmV0YUdGJyEiIkY2SSJ5R0YnRkFGNkY1RjYsJkY2RjZGNUY2RkFGQUY2RkNGQUZBRjZGNUY2RjYqJkY1RjZGPEY2RjYqJkY1RjZGQkY2RkFGMEY2RjZGQ0ZBRjVGQSwkRjVGQUZB openturns-1.9/validation/src/valid_sobol.txt000066400000000000000000000022641307543307100214060ustar00rootroot00000000000000restart: a := [0, 1/2, 1]: f := product((abs(4 * x[i] - 2) + a[i]) / (1 + a[i]), i=1..3): mu := int(int(int(f, x[1]=0..1), x[2]=0..1), x[3]=0..1): f1 := int(int(f, x[2]=0..1), x[3]=0..1) - mu: f2 := int(int(f, x[3]=0..1), x[1]=0..1) - mu: f3 := int(int(f, x[1]=0..1), x[2]=0..1) - mu: f12 := int(f, x[3]=0..1) - mu - f1 - f2: f23 := int(f, x[1]=0..1) - mu - f2 - f3: f31 := int(f, x[2]=0..1) - mu - f3 - f1: f123 := f - mu - f1 - f2 - f3 - f12 - f23 - f31: var := int(int(int(f^2, x[1]=0..1), x[2]=0..1), x[3]=0..1) - mu^2: D1 := int(f1^2, x[1]=0..1): D2 := int(f2^2, x[2]=0..1): D3 := int(f3^2, x[3]=0..1): D12 := int(int(f12^2, x[1]=0..1), x[2]=0..1): D23 := int(int(f23^2, x[2]=0..1), x[3]=0..1): D31 := int(int(f31^2, x[3]=0..1), x[1]=0..1): D123 := int(int(int(f123^2, x[1]=0..1), x[2]=0..1), x[3]=0..1): S1 := D1 / var: S2 := D2 / var: S3 := D3 / var: S12 := D12 / var: S23 := D23 / var: S31 := D31 / var: S123 := D123 / var: m := [mu, evalf(mu)]; v := [var, evalf(var)]; s1 := [S1, evalf(S1)]; s2 := [S2, evalf(S2)]; s3 := [S3, evalf(S3)]; s12 := [S12, evalf(S12)]; s23 := [S23, evalf(S23)]; s31 := [S31, evalf(S31)]; s123 := [S123, evalf(S123)]; openturns-1.9/validation/src/ziggurat_exponential.mws000066400000000000000000000401321307543307100233360ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 597 "restart:\nst:=time( );\n#Digits:=30:\nwith(linalg):\nf:=exp(-t);\ninvf:=solve(subs(t=u,f)= t,u);\nN:=128:\nz:=proc(r)\n local x,v,i;\n x:=vector(N);\n \+ x[N]:=r;\n v:=r*subs(t=r,f)+int(f,t=r..infinity);\n for i fr om N-1 by -1 to 1 do\n x[i]:=subs(t=v/x[i+1]+subs(t=x[i+1],f),in vf);\n od:\n return (v-x[1]+x[1]*subs(t=x[1],f));\nend:\npoint s:=proc(r)\n local x,v,i;\n x:=vector(N);\n x[N]:=r;\n \+ v:=evalhf(r*subs(t=r,f)+int(f,t=r..infinity));\n for i from N-1 b y -1 to 1 do\n x[i]:=evalhf(subs(t=v/x[i+1]+subs(t=x[i+1],f),inv f));\n od:\n return evalhf(x);\nend:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#stG$\"'yiS!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"fG-%$expG6#,$%\"tG!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%invfG, $-%#lnG6#%\"tG!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "plot (z(r),r=4..10,numpoints=11);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 691 "\neps:=1e-20:\nrmin:=5:\nzmin:=evalf(z(rmin)):\ncontinue:=true; \nstep:=0.001:\nwhile continue do\n while (Im(zmin) <> 0) do\n rmi n:=rmin+step;\n zmin:=evalf(z(rmin)):\n print([rmin,zmin]);\n o d:\n step:=step*0.5;\n while ((zmin<0) and (Im(zmin) = 0.0)) do\n \+ print([rmin,zmin]);\n rmin:=rmin-step;\n zmin:=evalf(z(rmin)): \n od:\n continue:=Im(zmin)<>0;\nod:\nrmax:=3.54:\nzmax:=evalf(z(rma x)):\nwhile (rmax-rmin>eps) do\n m:=0.5*(rmax+rmin);\n zm:=evalf(z(m ));\n if zm*zmin>0 then\n rmin:=m;\n zmin:=zm;\n else\n rma x:=m;\n zmax:=zm;\n fi:\n print([m,zm]);\nod:\nr:=0.5*(rmin+rmax) ;\nv:=evalf(r*subs(t=r,f)+int(f,t=r..infinity));\nevalf(100*(1-int(f,t =0..infinity)/v/(N+1)));\ntime()-st;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%)continueG%%trueG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"%IN!\"$$ !=:HEU1B'z!R_]h'***!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"&]_$!\" %$!=4eef5$eX@$3OuvN!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"']AN!\" &$!<7)z4t5Yw?KFkfQ!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"(]7_$!\" '$\"=v#HtZ[GY3QMEO?\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\")](=_ $!\"($\"sh$=OYAN!#8$!9D1Ut&G11%Q7%e'!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"0]7GQ#>AN!#9$\":.AI'=4v#R#4\\ab!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"1](=U#[>AN!#:$\":>f!GethF^g/[C!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"2](=#\\/'>AN!#;$\"9dBm$p:]#*G&=[*)!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"3]PMFbm>AN!#<$\"9Tgpn$*>fi\\.#=\" !#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"4](=#\\/'p>AN!#=$!9PX,t7DW zL/,F!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"5]7G8'y!o>AN!#>$!8pd, 0TP`VR]f(!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"6]7GQn:t'>AN!#?$ \"8,_:&40_ddl7@!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"7](oaN9(pn> AN!#@$!8V[r^>^Ln\">TF!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"8]iS \"p3k]n>AN!#A$!7$oL'>-El\"zE9$!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 $$\"9]il(f7/6u'>AN!#B$\"7q]r[dW3$R>**)!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\":]Pfev\\seu'>AN!#C$\"7'=!=\"4hu4IY#H!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\";]P4'\\Loc#[n>AN!#D$!6mUq#[Ku_C!4\"!#I " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"<]i:5a/fkqu'>AN!#E$\"7Xdju5j' y-yS\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"=](oa&=!pjgwu'>AN!#F $\"6SIc)[.+8*Q\\'!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\">](=UKd7g 'ezu'>AN!#G$\"6Z%y5b'Q,B=q#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"?]P%)*3nPAN!#H$\"54VA'H-q))y0)!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?v=n8SOax@=[n>AN!#H$!5!oIxx3-#GA9!#I" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"?8yv^b1kC\\9[n>AN!#H$\"5MT7Q$)RL!yJ$!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?W[r#y9#4^N;[n>AN!#H$\"4mg\"\\<&f 1wZ*!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?gL>)R*yJkG<[n>AN!#H$! 4xus-n!ogsB!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?-TX!4-0x?o\"[n >AN!#H$\"4WUwgU*)*\\_N!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?JPK Wd9,O0<[n>AN!#H$\"3$)e=&yVl%**e!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# 7$$\"?Y&e7dnk,qr\"[n>AN!#H$!3D*GsXJ,L\"*)!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?R6zdm!)3=6<[n>AN!#H$!3ugjNQz\"p]\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?Ou0,i(\\q#3<[n>AN!#H$\"3c7([(\\PF'>#!# I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?)GC%H9*oD(4<[n>AN!#H$\"2#oT 'p0znW$!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?9xgV!\\G`/r\"[n>AN !#H$!2y6*Hj,?6e!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?,g^O-([*35 <[n>AN!#H$!2SKnJb5A=\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?W,( H$3)e2*4<[n>AN!#H$\"2+Y)*=D%GK6!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# 7$$\"?sIuMbP&)**4<[n>AN!#H$!0@UM1:j\\#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?3m&Q=G1`*4<[n>AN!#H$\"1?-K1bgOb!#I" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"?S)*Hf=+e(*4<[n>AN!#H$\"16!))***p[VE!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?c9-(p)or)*4<[n>AN!#H$\"1(*=#ouFp >\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?kA)e6K&G**4<[n>AN!#H$ \"0W)Q-7[OZ!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?oEJDQ&p&**4<[n >AN!#H$\"0.t%pI3?6!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?qy-!ok6 (**4<[n>AN!#H$!/b%)p*f6)o!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"? p-n_#fS'**4<[n>AN!#H$\"/FWi`$)f@!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7$$\"?p!\\j'>hn**4<[n>AN!#H$!/8q.BmgB!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?o'4&4c$e'**4<[n>AN!#H$!.wiqMT+\"!#I" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"?o**3Ju%\\'**4<[n>AN!#H$\"/v!f%4rH5!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?=)*H?:Rl**4<[n>AN!#H$\".-kP([YY! #I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?VZ!\\c8c'**4<[n>AN!#H$\".j ]Lw6#=!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?1s?(eCd'**4<[n>AN!# H$\"-'R93_3%!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?P%e$)4!yl**4< [n>AN!#H$!-Zf%p!yH!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?@GyUBvl **4<[n>AN!#H$\",GU$pNb!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?G1d ?iwl**4<[n>AN!#H$!-Ze+D77!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"? Cnn\"Gfd'**4<[n>AN!#H$!,0e.MH$!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7 $$\"?s(HA\"evl**4<[n>AN!#H$\",<#\\9@6!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?[K&padd'**4<[n>AN!#H$!,,LHh3\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?5:fzmvl**4<[n>AN!#H$\"*oz2v\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG$\"?zBF8rvl**4<[n>AN!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"vG$\"?ix*e')z*4[_PwugN8!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"?=\"Q_p-A,/)[fe&3o\"!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"&'G%)!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 185 "t:=points(r):\ny:=vector(N+2):\ny[1]:=0:\nfor i from 2 to N+1 do \n y[i]:=t[i-1];\nod:\ny[N+2]:=evalf(v/subs(t=r,f)):\nz:=vector(N+1): \nfor i from 1 to N+1 do\n z[i]:=y[i]/y[i+1];\nod:\nprint(z);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#7]s$\"\"!F($\"?V+&)p\\[`&Q QNvZ[](!#I$\"?XkZ(zR&o^&4Jr-u])F+$\"?RC+mq;R>jp>aLM*)F+$\"?`J\\N8&=Z%4 P==:q\"*F+$\"?L(G!)HTMBYSB.7%>$*F+$\"?c5e#GXp3.y#)*oDA%*F+$\"?Lt\"*\\% e\"HiR#*H`O(\\*F+$\"?L)3!y;(\\lr]x!Qfa&*F+$\"?'*pMnwDP%*eVm(H'*f*F+$\" ?ZW'y/.8he<.v#)fj*F+$\"?L$RRGAv\\\\zYtMfm*F+$\"?_GRd0s_T(yt:L5p*F+$\"? s(>&3k9i1lbvTO7(*F+$\"?PVD%42D'Ro!HZ72t*F+$\"?wTc/tP(f(HS\")*emu*F+$\" ?CKdHz,h0'o3$Hkg(*F+$\"?XR7v/<\\_k$)QD+t(*F+$\"?pbU)=t\"zhJ**[C+%y*F+$ \"?-L/%)e*o%y(*H\"p_Qz*F+$\"?'Rk0R:[\\/4!p?s-)*F+$\"?&H(*\\j+9CHBOzZ2 \")*F+$\"?e`ML5H$3S(QRD/=)*F+$\"?$ee(o;_*e$Q#))o*pC)*F+$\"?&zalzi0&)> \"4)G(zI)*F+$\"?)Rsg9cV07kw1,k$)*F+$\"?fu&)HHR%3Wfhxm:%)*F+$\"?:bt'z6B b2+G+Uj%)*F+$\"?8B@`sq'32$e9ww])*F+$\"?KlDj'H9Z`;***)y[&)*F+$\"?:d\"eQ e.\\>Sj[1(e)*F+$\"?vBS$e'3VL\\r#3xA')*F+$\"?%)>Ox])HOsAQ39c')*F+$\"?uK HO8M?>wAm!Q(o)*F+$\"?*en&f%*Q*zDOv>n;()*F+$\"?1@x$R7fn!4>wvTu)*F+$\"?o ZbC7@u60;:N+x)*F+$\"?>![+0l-W`M+yP%z)*F+$\"?o`\"e;?l\"[V$)*yJ<))*F+$\" ?Q_<*p$Qz%Rnry&*Q))*F+$\"?pk4SS`E\\i.$)*Qf))*F+$\"?z7>KgC$HC(e!opy))*F +$\"?7*3lV)*eX(RF\"Q&p*))*F+$\"?(fW3XsAFF 8e+/fY(*)*F+$\"?32;.yuY;!z/O%y)*)*F+$\"?RUg(>py#)[Y3@M+!**F+$\"?zyW'G? IW4>S**=7!**F+$\"?WWX!)Q\"GBe=%[>M-**F+$\"?PEYRi]#)RE6RgS.**F+$\"?D@(H K;gJF%y\")RT/**F+$\"?*Q%o@d#\\\"RG$REo`!**F+$\"?BwLC$=A^eXO;ri!**F+$\" ?W=z19=B!GHiwCr!**F+$\"?uJ4v@dzS)\\*y4$z!**F+$\"?t)Gh(f9wSC4W:p3**F+$ \"?uuGo7pCyV_]!3%4**F+$\"?kq$\\&H3[bq\"R%>35**F+$\"?kgH2xj:#4hd`92\"** F+$\"?>)HA:2$GD#*G6qI6**F+$\"?_.aa* *4)3,P\"**F+$\"?bq/C+:V>Au[929**F+$\"?`$**R/8]%RTVHpS9**F+$\"?EZ)e\"**F +$\"?NR,#**[r]S1p`ve\"**F+$\"?2!eQq8&>V*oZ9Ie\"**F+$\"?(3Bf@\\s\\&*pry Zd\"**F+$\"?BN@#**GG+(z^yvi:**F+$\"?u:v&H2%*zi,S\\oa\"**F+$\"?'=W:zul) ))=he$p_\"**F+$\"?W\"o\"*[W9$3pTM)G]\"**F+$\"?BYp!eBfLjMeSXZ\"**F+$\"? j)G+&p4'>7)fitT9**F+$\"?FEnSP)fE#z/!yUS\"**F+$\"?!)H!)*)ygh7>J'\\>O\"* *F+$\"?KroiLN'**QUe3XJ\"**F+$\"?0W/L$3DEeo'Goh7**F+$\"?n.0xPD\"yT%eu;. 7**F+$\"?5;mw3TUG!>8?'Q6**F+$\"?**y@#4!Ru!R@bcw1\"**F+$\"?bIMGt#*>Bz6X %)*)4**F+$\"?@0I4^%>%HeDrp/4**F+$\"?ahX]tS6JEgZm63**F+$\"?MG%fMg\"3YG? a752**F+$\"?g!fL6H9&**RNKP*f!**F+$\"?!4x#)3B6h2)*f/'y/**F+$\"?EtHw_N!> P]Q,pM!**F+$\"?*yh,Yj*)R$>z/@.-**F+$\"?_f$Gs%p80Hx'=j/!**F+$\"?j@L%yuX &=(zj@[()*)*F+$\"?^$o$*)Gq')>/(>&3(o*)*F+$\"?Rz#3u;#Hi'yt'>\"[*)*F+$\" ?*Rr3&R=&)po([.\\D*)*F+$\"?6tp/f-;0uAM`0!*)*F+$\"?TGf[*oJ#o1YF*)H())*F +$\"?ajBhe7m#>#p88C%))*F+$\"?+Yj`REK#*RHSc$3))*F+$\"?Y'=DsDG))3&e)GCq( )*F+$\"?CUwFuY$oLN7cNF()*F+$\"?bMi2:u&\\`VF0zy')*F+$\"?#=r#=!Q5HB+T/RB ')*F+$\"?Ffmq5b^#)yfa['f&)*F+$\"?H+)e(pnUSzwljb[)*F+$\"?S+sCZ5aur$zhT) R)*F+$\"?-\\)[+\"\\FN!=%f3WH)*F+$\"?*\\3=Qp%)GcOgK1o\")*F+$\"?.xd5;<6< ZE5g6,)*F+$\"?=tW9^9]&)R.Xv*F+$\"?#\\9(3W< gBrPLTU<(*F+$\"?o:b1Rw#[/;43R;m*F+$\"?>nHu7d$>OU,Pioc*F+$\"?BS4LuHx-2' Q-\"Hj$*F+$\"?bWa*4&4?.O+o?\\s#*F+Q(pprint06\"" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 80 "writeto(\"zigAbs.txt\");print(y);writeto(\"zig Rat.txt\");print(z);writeto(terminal);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 72 "vector([.69828363320908991, .78118354989999061, .7937 0592389489407, 0]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#7&$ \"2\"**34Kj$G)p!#<$\"2h!****)\\N=\"yF)$\"22%*[*Q#fq$zF)\"\"!Q(pprint06 \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2552 "vector([.7504847753 5383857, .85074027131095516, .89343354196963194, .91701518183709447, . 93194120323404624, .94222568982780309, .94973653299239623, .9554593807 7507166, .95996297664358943, .96359827503175862, .96659347346794949, . 96910331573787415, .97123641755565066, .97307124729068396, .9746658981 4029760, .97606429308686056, .97730025388364525, .97840024489931618, . 97938526912997784, .98027220690090450, .98107477936232924, .9818042539 3874008, .98246996888238359, .98307972880911985, .98364010676641205, . 98415667761594405, .98463420028000756, .98507676145830715, .9854878899 9165345, .98587064863401946, .98622770827149339, .98656140838227233, . 98687380662276195, .98716671975362574, .98744175761909067, .9877003515 1605120, .98794377800345342, .98817317898343486, .98838957871673949, . 98859389830362490, .98878696805872424, .98896953812739748, .9891422876 2696040, .98930583254504435, .98946073258633692, .98960749712591216, . 98974659040058136, .98987843604790162, .99000342108464880, .9901218994 0190944, .99023419484185828, .99034060391126399, .99044139817842731, . 99053682639328391, .99062711636455849, .99071247662292805, .9907930978 9498403, .99086915440924409, .99094080505243783, .99100819439170557, . 99107145357610920, .99113070112892251, .99118604364047460, .9912375763 6983612, .99128538376231757, .99132953988856886, .99137010880999548, . 99140714487422192, .99144069294341396, .99147078855739107, .9914974580 3261747, .99152071849731542, .99154057786209781, .99155703472464074, . 99157007820598915, .99157968771509899, .99158583263712792, .9915884719 3977956, .99158755369064052, .99158301447689427, .99157477871699552, . 99156275785179700, .99154684940016281, .99152693586118888, .9915028834 4169082, .99147454058346333, .99144173625981221, .99140427800479225, . 99136194963119127, .99131450858423899, .99126168286685828, .9912031674 5844180, .99113862013190281, .99106765655213910, .99098984451179232, . 99090469712558292, .99081166476026313, .99071012542028460, .9905993732 3539995, .99047860459980760, .99034690138503720, .99020321047919340, . 99004631867729052, .98987482163797186, .98968708519704195, .9894811967 3786624, .98925490348768697, .98900553342274055, .98872989274606682, . 98842413136921927, .98808356402939922, .98770242885850886, .9872735561 2353372, .98678790527435347, .98623390441002328, .98559648545978825, . 98485563657679404, .98398416179371746, .98294408594180356, .9816806326 0365628, .98011160102647170, .97810739411739857, .97545031959640279, . 97174241333771234, .96616390809160447, .95668623701423621, .9363291023 8607026, 0]);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#7\\s$\"2d QQNvZ[](!#<$\"2;b4Jr-u])F)$\"2%>jp>aLM*)F)$\"2Z%4P==:q\"*F)$\"2CYSB.7% >$*F)$\"24.y#)*oDA%*F)$\"2B'R#*H`O(\\*F)$\"2mr]x!Qfa&*F)$\"2V*eVm(H'*f *F)$\"2ie<.v#)fj*F)$\"2\\\\zYtMfm*F)$\"2:uyt:L5p*F)$\"2m]cb\"4)G(zI)*F)$\"207kw1,k$)*F)$\"20Wfhxm: %)*F)$\"2c2+G+Uj%)*F)$\"2:2$e9ww])*F)$\"2X`;***)y[&)*F)$\"2Y>Sj[1(e)*F )$\"2R$\\r#3xA')*F)$\"2LsAQ39c')*F)$\"2&>wAm!Q(o)*F)$\"2uDOv>n;()*F)$ \"2n!4>wvTu)*F)$\"2?^g^^.q()*F)$\"2U`M+yP%z)*F)$\"2'[V$)*yJ<))*F)$\"2 \\Rnry&*Q))*F)$\"2!\\i.$)*Qf))*F)$\"2CC(e!opy))*F)$\"2[(RF\"Q&p*))*F)$ \"2Sgpi(GU\"*)*F)$\"2NW]aKeI*)*F)$\"2#pL'eK2Y*)*F)$\"2;7f7(\\2'*)*F)$ \"2O\"e+/fY(*)*F)$\"2i,z/O%y)*)*F)$\"2!)[Y3@M+!**F)$\"2W4>S**=7!**F)$ \"2Ge=%[>M-**F)$\"2*RE6RgS.**F)$\"2JF%y\")RT/**F)$\"2\"RG$REo`!**F)$\" 2\\eXO;ri!**F)$\"20GHiwCr!**F)$\"2.%)\\*y4$z!**F)$\"24W#4W:p3**F)$\"2$ yV_]!3%4**F)$\"2d035**F)$\"2?4hd`92\"**F)$\"2^A*G6qI6**F)$\"2gu/kV g=\"**F)$\"27O)pjdP7**F)$\"2dAu[929**F)$\"2'RTVHpS9**F)$\"22\"Rd&)yq9**F)$\"2ZZ)e\"**F)$\"2_S1p` ve\"**F)$\"2F%*oZ9Ie\"**F)$\"2_&*pryZd\"**F)$\"2+(z^yvi:**F)$\"2\"G;+% \\oa\"**F)$\"2)))=he$p_\"**F)$\"2#3pTM)G]\"**F)$\"2LjMeSXZ\"**F)$\"2@7 )fitT9**F)$\"2D#z/!yUS\"**F)$\"2F\">J'\\>O\"**F)$\"2**QUe3XJ\"**F)$\"2 Geo'Goh7**F)$\"2!=Weu;.7**F)$\"2\"G!>8?'Q6**F)$\"25R@bcw1\"**F)$\"2K#z 6X%)*)4**F)$\"2#HeDrp/4**F)$\"28j-wk;\"3**F)$\"2g%G?a752**F)$\"2&**RNK P*f!**F)$\"2g2)*f/'y/**F)$\"2?P]Q,pM!**F)$\"2S$>z/@.-**F)$\"2_!Hx'=j/! **F)$\"2'=(zj@[()*)*F)$\"2&>/(>&3(o*)*F)$\"2Cmyt'>\"[*)*F)$\"2(po([.\\ D*)*F)$\"2bSFULb+*)*F)$\"2#o1YF*)H())*F)$\"2F>#p88C%))*F)$\"2A*RHSc$3) )*F)$\"2')3&e)GCq()*F)$\"2sLN7cNF()*F)$\"2Z`VF0zy')*F)$\"2GB+T/RB')*F) $\"2D)yfa['f&)*F)$\"2/%zwljb[)*F)$\"2Y.Xv*F)$\"2M7xL8C ur*F)$\"2Z/;43R;m*F)$\"2@OU,Pioc*F)$\"2EqgQ-\"Hj$*F)\"\"!Q(pprint06\" " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "factor(int(3/4*(1-u^2), u=-1..t));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"%!\"\",&%\"tG\" \"\"\"\"#F&F),&F(F)F)F)F*F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1 "\030" }}}}{MARK "1 0 \+ 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ziggurat_exponential.txt000066400000000000000000000507461307543307100233630ustar00rootroot00000000000000> restart: > st:=time(); > #Digits:=30: > with(linalg): > f:=exp(-t); > invf:=solve(subs(t=u,f)=t,u); > N:=128: > z:=proc(r) > local x,v,i; > x:=vector(N); > x[N]:=r; > v:=r*subs(t=r,f)+int(f,t=r..infinity); > for i from N-1 by -1 to 1 do > x[i]:=subs(t=v/x[i+1]+subs(t=x[i+1],f),invf); > od: > return (v-x[1]+x[1]*subs(t=x[1],f)); > end: > points:=proc(r) > local x,v,i; > x:=vector(N); > x[N]:=r; > v:=evalhf(r*subs(t=r,f)+int(f,t=r..infinity)); > for i from N-1 by -1 to 1 do > x[i]:=evalhf(subs(t=v/x[i+1]+subs(t=x[i+1],f),invf)); > od: > return evalhf(x); > end: st := 406.278 f := exp(-t) invf := -ln(t) > plot(z(r),r=4..10,numpoints=11); > > eps:=1e-20: > rmin:=5: > zmin:=evalf(z(rmin)): > continue:=true; > step:=0.001: > while continue do > while (Im(zmin) <> 0) do > rmin:=rmin+step; > zmin:=evalf(z(rmin)): > print([rmin,zmin]); > od: > step:=step*0.5; > while ((zmin<0) and (Im(zmin) = 0.0)) do > print([rmin,zmin]); > rmin:=rmin-step; > zmin:=evalf(z(rmin)): > od: > continue:=Im(zmin)<>0; > od: > rmax:=3.54: > zmax:=evalf(z(rmax)): > while (rmax-rmin>eps) do > m:=0.5*(rmax+rmin); > zm:=evalf(z(m)); > if zm*zmin>0 then > rmin:=m; > zmin:=zm; > else > rmax:=m; > zmax:=zm; > fi: > print([m,zm]); > od: > r:=0.5*(rmin+rmax); > v:=evalf(r*subs(t=r,f)+int(f,t=r..infinity)); > evalf(100*(1-int(f,t=0..infinity)/v/(N+1))); > time()-st; continue := true [3.530, -0.009996615052390796230642262915] [3.5250, -0.003575743608321455831059585809] [3.52250, -0.000385964273220764610730979812] [3.521250, 0.001203626343808462848477329275] [3.5218750, 0.000409276727465453135234206327] [3.52218750, 0.000011767339979993585170327073] [3.522343750, -0.000187070727064630593432329263] [3.5222656250, -0.000087644753826144721517271541] [3.52222656250, -0.000037936971390182178795111643] [3.522207031250, -0.000013084381746361836172193567] -6 [3.5221972656250, -0.658412384060628573420625 10 ] -5 [3.52219238281250, 0.5554490923927509186302203 10 ] -5 [3.522194824218750, 0.2448046051276173582805919 10 ] -6 [3.5221960449218750, 0.894818528925015693662357 10 ] -6 [3.52219665527343750, 0.118203496259199367696041 10 ] -6 [3.522196960449218750, -0.270104337944251273014537 10 ] -7 [3.5221968078613281250, -0.75950394353374105015769 10 ] -7 [3.52219673156738281250, 0.21126557575205095155201 10 ] -7 [3.522196769714355468750, -0.27411916733511951714843 10 ] -8 [3.5221967506408691406250, -0.3142679165260219633683 10 ] -8 [3.52219674110412597656250, 0.8991939308445748715070 10 ] -8 [3.522196745872497558593750, 0.2924630097461091180186 10 ] -9 [3.5221967482566833496093750, -0.109024527432482704266 10 ] -8 [3.52219674706459045410156250, 0.1407802786631074635745 10 ] -9 [3.522196747660636901855468750, 0.649389130003488563040 10 ] -9 [3.5221967479586601257324218750, 0.270182301386551078447 10 ] -10 [3.52219674810767173767089843750, 0.80578887002296224309 10 ] -10 [3.52219674818217754364013671875, -0.14222820208777730680 10 ] -10 [3.52219674814492464065551757813, 0.33178033398338124134 10 ] -11 [3.52219674816355109214782714844, 0.9477606595174916066 10 ] -11 [3.52219674817286431789398193360, -0.2372606806702727477 10 ] -11 [3.52219674816820770502090454102, 0.3552499894260764244 10 ] -12 [3.52219674817053601145744323731, 0.589946543785185883 10 ] -12 [3.52219674817170016467571258546, -0.891330131457228925 10 ] -12 [3.52219674817111808806657791139, -0.150691793835636074 10 ] -12 [3.52219674817082704976201057436, 0.219627374974871256 10 ] -13 [3.52219674817097256891429424288, 0.34467790569641682 10 ] -13 [3.52219674817104532849043607714, -0.58112001632991178 10 ] -13 [3.52219674817100894870236516001, -0.11822105531673240 10 ] -13 [3.52219674817099075880832970144, 0.11322842518984600 10 ] -15 [3.52219674817099985375534743072, -0.249631506344221 10 ] -14 [3.52219674817099530628183856608, 0.5536605506320220 10 ] -14 [3.52219674817099758001859299840, 0.2643486999988011 10 ] -14 [3.52219674817099871688697021456, 0.1196927746821897 10 ] -15 [3.52219674817099928532115882264, 0.473648120238844 10 ] -15 [3.52219674817099956953825312668, 0.112008306947303 10 ] -16 [3.52219674817099971164680027870, -0.68811599698455 10 ] -16 [3.52219674817099964059252670269, 0.21598353624427 10 ] -16 [3.52219674817099967611966349069, -0.23606623037013 10 ] -17 [3.52219674817099965835609509668, -0.1004134706276 10 ] -16 [3.52219674817099964947431089968, 0.10297109459075 10 ] -17 [3.52219674817099965391520299818, 0.4646487376402 10 ] -17 [3.52219674817099965613564904743, 0.1821176335063 10 ] -18 [3.52219674817099965724587207206, 0.408520814396 10 ] -18 [3.52219674817099965780098358437, -0.297806945947 10 ] -19 [3.52219674817099965752342782821, 0.55356934228 10 ] -18 [3.52219674817099965766220570628, -0.121225005847 10 ] -19 [3.52219674817099965759281676724, -0.32934035805 10 ] -19 [3.52219674817099965755812229772, 0.11211449217 10 ] -19 [3.52219674817099965757546953248, -0.10861293301 10 ] -21 [3.52219674817099965756679591510, 0.175077968 10 ] r := 3.52219674817099965757113272379 v := 0.133560747637524809979865897762 16.8085585948804012202695238118 84.286 > t:=points(r): > y:=vector(N+2): > y[1]:=0: > for i from 2 to N+1 do > y[i]:=t[i-1]; > od: > y[N+2]:=evalf(v/subs(t=r,f)): > z:=vector(N+1): > for i from 1 to N+1 do > z[i]:=y[i]/y[i+1]; > od: > print(z); [0., 0.750484775353838553484969850043, 0.850740271310955168539797476445, 0.893433541969631939167066002439, 0.917015181837094471851335493153, 0.931941203234046233441298028733, 0.942225689827803086945282581056, 0.949736532992396229158449917333, 0.955459380775071654971678008833, 0.959962976643589437257667346996, 0.963598275031758611303047864447, 0.966593473467949497522283939333, 0.969103315737874152720557392852, 0.971236417555650662146408519772, 0.973071247290683962507094254337, 0.974665898140297597377304564176, 0.976064293086860561017929573224, 0.977300253883645249170475123945, 0.978400244899316179173188425569, 0.979385269129977846895884043302, 0.980272206900904494815390564396, 0.981074779362329241400634997295, 0.981804253938740083291033345358, 0.982469968882383589521668758583, 0.983079728809119850562796554795, 0.983640106766412054356146072398, 0.984156677615944084392929857459, 0.984634200280007552311796735515, 0.985076761458307086707253212313, 0.985487889991653471429663256532, 0.985870648634019490358385815715, 0.986227708271493343086583402375, 0.986561408382272362985077361984, 0.986873806622761920341336293274, 0.987166719753625799389459567589, 0.987441757619090675912393772106, 0.987700351516051174211224554768, 0.987943778003453440265050048019, 0.988173178983434816520165815368, 0.988389578716739479383699175238, 0.988593898303624926534040096469, 0.988786968058724293246032191279, 0.988969538127397455898436508912, 0.989142287626960404173170844597, 0.989305832545044324977737622638, 0.989460732586336934407985727862, 0.989607497125912170683173044980, 0.989746590400581327272272451975, 0.989878436047901646747803160708, 0.990003421084648827869197604239, 0.990121899401909443020286447879, 0.990234194841858232813880454444, 0.990340603911263982506239462637, 0.990441398178427316016322972125, 0.990536826393283914925721684389, 0.990627116364558512218324337623, 0.990712476622928023181406791844, 0.990793097894984079572175093174, 0.990869154409244076145976128873, 0.990940805052437824691268287474, 0.991008194391705548082954937064, 0.991071453576109215637707296064, 0.991130701128922528307152229819, 0.991186043640474608746669498017, 0.991237576369836074033189634373, 0.991285383762317554082871105898, 0.991329539888568903748275039752, 0.991370108809995454035219189473, 0.991407144874221943150024047055, 0.991440692943413945013043999353, 0.991470788557391074579718311726, 0.991497458032617503483410551001, 0.991520718497315401540555107636, 0.991540577862097828628588285611, 0.991557034724640724341601679445, 0.991570078205989141038468359572, 0.991579687715098995526722137843, 0.991585832637127947522049524329, 0.991588471939779518821684067585, 0.991587553690640507148992013935, 0.991583014476894319513703858007, 0.991574778716995497249215923087, 0.991562757851797002828992213523, 0.991546849400162799407295751574, 0.991526935861188886574791544186, 0.991502883441690831444489168144, 0.991474540583463335923580694623, 0.991441736259812196096950028863, 0.991404278004792265983740672627, 0.991361949631191261607889802980, 0.991314508584238996353362687132, 0.991261682866858262508333044405, 0.991203167458441781253777050367, 0.991138620131902842410876661610, 0.991067656552139074390092217899, 0.990989844511792319927328343055, 0.990904697125582941945109300521, 0.990811664760263111407350456154, 0.990710125420284608160345942834, 0.990599373235399951429113359060, 0.990478604599807611123088277090, 0.990346901385037190355276297326, 0.990203210479193398963460161789, 0.990046318677290513694722835952, 0.989874821637971854574784332163, 0.989687085197041986702889368351, 0.989481196737866229216740827939, 0.989254903487686985183950871399, 0.989005533422740516025904697311, 0.988729892746066823168948592841, 0.988424131369219266125861236354, 0.988083564029399232263953634600, 0.987702428858508882825722518646, 0.987273556123533683467427764224, 0.986787905274353495741507623455, 0.986233904410023291038018271182, 0.985596485459788251551070665927, 0.984855636576794042676975880029, 0.983984161793717454104724720040, 0.982944085941803527491004884902, 0.981680632603656288469381808499, 0.980111601026471711171610577703, 0.978107394117398550145114447318, 0.975450319596402797690182574081, 0.971742413337712360174408714492, 0.966163908091604482763906551568, 0.956686237014236193571274296719, 0.936329102386070277297433094023, 0.927249206800360320095099544455] > writeto("zigAbs.txt");print(y);writeto("zigRat.txt");print(z);writeto( > terminal); > vector([.69828363320908991, .78118354989999061, .79370592389489407, > 0]); [0.69828363320908991, 0.78118354989999061, 0.79370592389489407, 0] > vector([.75048477535383857, .85074027131095516, .89343354196963194, > .91701518183709447, .93194120323404624, .94222568982780309, > .94973653299239623, .95545938077507166, .95996297664358943, > .96359827503175862, .96659347346794949, .96910331573787415, > .97123641755565066, .97307124729068396, .97466589814029760, > .97606429308686056, .97730025388364525, .97840024489931618, > .97938526912997784, .98027220690090450, .98107477936232924, > .98180425393874008, .98246996888238359, .98307972880911985, > .98364010676641205, .98415667761594405, .98463420028000756, > .98507676145830715, .98548788999165345, .98587064863401946, > .98622770827149339, .98656140838227233, .98687380662276195, > .98716671975362574, .98744175761909067, .98770035151605120, > .98794377800345342, .98817317898343486, .98838957871673949, > .98859389830362490, .98878696805872424, .98896953812739748, > .98914228762696040, .98930583254504435, .98946073258633692, > .98960749712591216, .98974659040058136, .98987843604790162, > .99000342108464880, .99012189940190944, .99023419484185828, > .99034060391126399, .99044139817842731, .99053682639328391, > .99062711636455849, .99071247662292805, .99079309789498403, > .99086915440924409, .99094080505243783, .99100819439170557, > .99107145357610920, .99113070112892251, .99118604364047460, > .99123757636983612, .99128538376231757, .99132953988856886, > .99137010880999548, .99140714487422192, .99144069294341396, > .99147078855739107, .99149745803261747, .99152071849731542, > .99154057786209781, .99155703472464074, .99157007820598915, > .99157968771509899, .99158583263712792, .99158847193977956, > .99158755369064052, .99158301447689427, .99157477871699552, > .99156275785179700, .99154684940016281, .99152693586118888, > .99150288344169082, .99147454058346333, .99144173625981221, > .99140427800479225, .99136194963119127, .99131450858423899, > .99126168286685828, .99120316745844180, .99113862013190281, > .99106765655213910, .99098984451179232, .99090469712558292, > .99081166476026313, .99071012542028460, .99059937323539995, > .99047860459980760, .99034690138503720, .99020321047919340, > .99004631867729052, .98987482163797186, .98968708519704195, > .98948119673786624, .98925490348768697, .98900553342274055, > .98872989274606682, .98842413136921927, .98808356402939922, > .98770242885850886, .98727355612353372, .98678790527435347, > .98623390441002328, .98559648545978825, .98485563657679404, > .98398416179371746, .98294408594180356, .98168063260365628, > .98011160102647170, .97810739411739857, .97545031959640279, > .97174241333771234, .96616390809160447, .95668623701423621, > .93632910238607026, 0]); [0.75048477535383857, 0.85074027131095516, 0.89343354196963194, 0.91701518183709447, 0.93194120323404624, 0.94222568982780309, 0.94973653299239623, 0.95545938077507166, 0.95996297664358943, 0.96359827503175862, 0.96659347346794949, 0.96910331573787415, 0.97123641755565066, 0.97307124729068396, 0.97466589814029760, 0.97606429308686056, 0.97730025388364525, 0.97840024489931618, 0.97938526912997784, 0.98027220690090450, 0.98107477936232924, 0.98180425393874008, 0.98246996888238359, 0.98307972880911985, 0.98364010676641205, 0.98415667761594405, 0.98463420028000756, 0.98507676145830715, 0.98548788999165345, 0.98587064863401946, 0.98622770827149339, 0.98656140838227233, 0.98687380662276195, 0.98716671975362574, 0.98744175761909067, 0.98770035151605120, 0.98794377800345342, 0.98817317898343486, 0.98838957871673949, 0.98859389830362490, 0.98878696805872424, 0.98896953812739748, 0.98914228762696040, 0.98930583254504435, 0.98946073258633692, 0.98960749712591216, 0.98974659040058136, 0.98987843604790162, 0.99000342108464880, 0.99012189940190944, 0.99023419484185828, 0.99034060391126399, 0.99044139817842731, 0.99053682639328391, 0.99062711636455849, 0.99071247662292805, 0.99079309789498403, 0.99086915440924409, 0.99094080505243783, 0.99100819439170557, 0.99107145357610920, 0.99113070112892251, 0.99118604364047460, 0.99123757636983612, 0.99128538376231757, 0.99132953988856886, 0.99137010880999548, 0.99140714487422192, 0.99144069294341396, 0.99147078855739107, 0.99149745803261747, 0.99152071849731542, 0.99154057786209781, 0.99155703472464074, 0.99157007820598915, 0.99157968771509899, 0.99158583263712792, 0.99158847193977956, 0.99158755369064052, 0.99158301447689427, 0.99157477871699552, 0.99156275785179700, 0.99154684940016281, 0.99152693586118888, 0.99150288344169082, 0.99147454058346333, 0.99144173625981221, 0.99140427800479225, 0.99136194963119127, 0.99131450858423899, 0.99126168286685828, 0.99120316745844180, 0.99113862013190281, 0.99106765655213910, 0.99098984451179232, 0.99090469712558292, 0.99081166476026313, 0.99071012542028460, 0.99059937323539995, 0.99047860459980760, 0.99034690138503720, 0.99020321047919340, 0.99004631867729052, 0.98987482163797186, 0.98968708519704195, 0.98948119673786624, 0.98925490348768697, 0.98900553342274055, 0.98872989274606682, 0.98842413136921927, 0.98808356402939922, 0.98770242885850886, 0.98727355612353372, 0.98678790527435347, 0.98623390441002328, 0.98559648545978825, 0.98485563657679404, 0.98398416179371746, 0.98294408594180356, 0.98168063260365628, 0.98011160102647170, 0.97810739411739857, 0.97545031959640279, 0.97174241333771234, 0.96616390809160447, 0.95668623701423621, 0.93632910238607026, 0] > factor(int(3/4*(1-u^2),u=-1..t)); 2 (t - 2) (t + 1) - ---------------- 4 > >  openturns-1.9/validation/src/ziggurat_normal.mws000066400000000000000000000417101307543307100223030ustar00rootroot00000000000000{VERSION 6 0 "IBM INTEL LINUX" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 592 "restart:\nst:=time( );\nDigits:=30:\nwith(linalg):\nf:=exp(-t^2/2);\ninvf:=solve(subs(t=u, f)=t,u)[1];\nN:=128:\nz:=proc(r)\n local x,v,i;\n x:=vector(N) ;\n x[N]:=r;\n v:=r*subs(t=r,f)+int(f,t=r..infinity);\n fo r i from N-1 by -1 to 1 do\n x[i]:=subs(t=v/x[i+1]+subs(t=x[i+1] ,f),invf);\n od:\n return (v-x[1]+x[1]*subs(t=x[1],f));\nend: \npoints:=proc(r)\n local x,v,i;\n x:=vector(N);\n x[N]:=r ;\n v:=evalf(r*subs(t=r,f)+int(f,t=r..infinity));\n for i from N-1 by -1 to 1 do\n x[i]:=eval(subs(t=v/x[i+1]+subs(t=x[i+1],f) ,invf));\n od:\n return x;\nend:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#stG$\"&4'>!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG-%$ex pG6#,$*&\"\"#!\"\"%\"tGF*F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%invf G*$,$*&\"\"#\"\"\"-%#lnG6#%\"tGF)!\"\"#F)F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 689 "eps:=1e-20:\nrmin:=3.4:\nzmin:=evalf(z(rmin)):\nc ontinue:=true;\nstep:=0.1:\nwhile continue do\n while (Im(zmin) <> 0) do\n rmin:=rmin+step;\n zmin:=evalf(z(rmin)):\n print([rmin, zmin]);\n od:\n step:=step*0.5;\n while ((zmin<0) and (Im(zmin) = 0 .0)) do\n print([rmin,zmin]);\n rmin:=rmin-step;\n zmin:=eval f(z(rmin)):\n od:\n continue:=Im(zmin)<>0;\nod:\nrmax:=3.5:\nzmax:=e valf(z(rmax)):\nwhile (rmax-rmin>eps) do\n m:=0.5*(rmax+rmin);\n zm: =evalf(z(m));\n if zm*zmin>0 then\n rmin:=m;\n zmin:=zm;\n els e\n rmax:=m;\n zmax:=zm;\n fi:\n print([m,zm]);\nod:\nr:=0.5*( rmin+rmax);\nv:=evalf(r*subs(t=r,f)+int(f,t=r..infinity));\nevalf(100* (1-int(f,t=0..infinity)/v/(N+1)));\ntime()-st;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)continueG%%trueG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# 7$$\"#N!\"\"$!?E![-*f()[oc&y3Az6$!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7$$\"#N!\"\"$!?E![-*f()[oc&y3Az6$!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"$X$!\"#$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"$X$!\"#$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$$\"$X$!\"#$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"%]M!\"$$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"%]M!\"$$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7$$\"&+X$!\"%$!>ba-M7nEG&zp!)G&o#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"&+X$!\"%$!>ba-M7nEG&zp!)G&o#!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"(v=Z$!\"'$!?W,w?v<(p)G!*43\"3`\"! #I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\")D\"yX$!\"($!>0S$fy[*p_Q,!ox(GfM3 >5**)**GJ!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"+DcEZM!\"*$!>.)eB \"3E\"[4vXV'z:\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\",D\"y]XM!# 5$!=PS/u4A$y1!e<&e<#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"-D1*GY W$!#6$\"=Xq(pkC/Q`KhNnD#!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\".v $f$o]W$!#7$\";A^;z)Ry@Rb&HTt!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$ \"/v$f3)GXM!#8$!=;h$G#3*[;u&=\"3T/\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"0DcEAy^W$!#9$!<)e`m'3LZr\\+hW$[!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"1Dc,\"HB^W$!#:$!De4XM!#;$!;r*H+BAE,4bYIa'!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"3Dc^G#4#3XM!#<$\":<]wze*3(pDPG-%!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"4vVBS(e*)3XM!#=$!;XBq&3_?>\\9&fpI !#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"5DJ&p7b_&3XM!#>$!;8Vj_#H?t @qeML\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"6D\"yD*)*)3Q3XM!#?$ !:YV-xSU*e6=QbY!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"7Dc,T?f]H3X M!#@$!9lG#oRD(*[S*[hJ!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"8D\"G j)fQ9_#3XM!#A$\":'RJ#=Jx\"4,]P`=!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7$$\"9v=U#)>`,OF3XM!#B$\"9V!\\98hF$*R2io(!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\":v=#*>/o.L%G3XM!#C$\"9Vv=#*> a!=QBC!*G3XM!#G$!8C\">xKqg]4f06!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# 7$$\"?DJ&pi#>\"pd*)o)G3XM!#H$\"7w(Q,]]zcnO*e!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?Pf38Miadfc))G3XM!#H$!7D!)GO#[&)\\?6e#!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?I&>+-3HswFx)G3XM!#H$\"7[#=d6HBlt il\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?LFb;dwQio9))G3XM!#H$! 6K))QsDq$RBCY!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?JhGoo$3[JPz) G3XM!#H$\"6$GX'>]mO^#pf!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?K% >CH,)f)3U!))G3XM!#H$\"5)\\(\\g\">L(3Dn!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?#3'[/NG\\vW4))G3XM!#H$!66Su@Atfie(>!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?dFX)RUX?Go!))G3XM!#H$!5Z3df;4$pn^'!#I " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?%4Oa%=7d$oL<1))G3XM! #H$!5L7B;uY^I1K!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?f-p$[k-&f% e!))G3XM!#H$!5b?9z1mI2^:!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?x Jck\"=7C#o0))G3XM!#H$!4VEuc'e-dMs!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7$$\"?N'**\\+&p'Q+c!))G3XM!#H$!4_#z?)z0!\\'4$!#I" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$$\"?ly@DMVf%fb!))G3XM!#H$!4#f\"))Gx&*\\u-\"!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?zpKNE!e**Qb!))G3XM!#H$\"1&y$owB4 qq!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?ACFI!=wA\\b!))G3XM!#H$! 3bhMuE$**=5&!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?,(*zK.r6Ta0)) G3XM!#H$!3QIR[,#*f:D!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?SL1%[ cPbTb!))G3XM!#H$!3(3Xd)Q\"\\CA\"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #7$$\"?g^pf&zZFSb!))G3XM!#H$!2IL]a2T(ed!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?q5^(4\"HN'Rb!))G3XM!#H$!2$*G!*)=f'e_#!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?D!>k'oa:$Rb!))G3XM!#H$!1Ez51MG%4 *!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?-I(3vuc:Rb!))G3XM!#H$!1i ;r9b475!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?\"***4$pQd2Rb!))G3 XM!#H$\"1#4')4V)**GI!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?(\\') >s1d6Rb!))G3XM!#H$\"1Hs8e9X35!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$ $\"?\\(Hkt!pN\"Rb!))G3XM!#H$!.DsGG?#=!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?A\"3#H()pD\"Rb!))G3XM!#H$\"0j]#\\r9L]!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?N*=Gt%pI\"Rb!))G3XM!#H$\"0$)*=LMY2D!#I" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?UViMF>L\"Rb!))G3XM!#H$\"0re^d@YC \"!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?Xq_NDNC@!#I" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$$\"?Q::0%\"rG$\"? *GQ&\\WlN\"Rb!))G3XM!#H" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"vG$\"?b \\Z11)))*zvs6\"3\\$)*!#K" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\">#HyBR- #oRe\">;(H@\"!#G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"'Fk?!\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 185 "t:=points(r):\ny:=vector(N+ 2):\ny[1]:=0:\nfor i from 2 to N+1 do\n y[i]:=t[i-1];\nod:\ny[N+2]:=e valf(v/subs(t=r,f)):\nz:=vector(N+1):\nfor i from 1 to N+1 do\n z[i]: =y[i]/y[i+1];\nod:\nprint(z);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#K%'ve ctorG6#7]s$\"\"!F($\"?V+&)p\\[`&QQNvZ[](!#I$\"?XkZ(zR&o^&4Jr-u])F+$\"? RC+mq;R>jp>aLM*)F+$\"?`J\\N8&=Z%4P==:q\"*F+$\"?L(G!)HTMBYSB.7%>$*F+$\" ?c5e#GXp3.y#)*oDA%*F+$\"?Lt\"*\\%e\"HiR#*H`O(\\*F+$\"?L)3!y;(\\lr]x!Qf a&*F+$\"?'*pMnwDP%*eVm(H'*f*F+$\"?ZW'y/.8he<.v#)fj*F+$\"?L$RRGAv\\\\zY tMfm*F+$\"?_GRd0s_T(yt:L5p*F+$\"?s(>&3k9i1lbvTO7(*F+$\"?PVD%42D'Ro!HZ7 2t*F+$\"?wTc/tP(f(HS\")*emu*F+$\"?CKdHz,h0'o3$Hkg(*F+$\"?XR7v/<\\_k$)Q D+t(*F+$\"?pbU)=t\"zhJ**[C+%y*F+$\"?-L/%)e*o%y(*H\"p_Qz*F+$\"?'Rk0R:[ \\/4!p?s-)*F+$\"?&H(*\\j+9CHBOzZ2\")*F+$\"?e`ML5H$3S(QRD/=)*F+$\"?$ee( o;_*e$Q#))o*pC)*F+$\"?&zalzi0&)>\"4)G(zI)*F+$\"?)Rsg9cV07kw1,k$)*F+$\" ?fu&)HHR%3Wfhxm:%)*F+$\"?:bt'z6Bb2+G+Uj%)*F+$\"?8B@`sq'32$e9ww])*F+$\" ?KlDj'H9Z`;***)y[&)*F+$\"?:d\"eQe.\\>Sj[1(e)*F+$\"?vBS$e'3VL\\r#3xA')* F+$\"?%)>Ox])HOsAQ39c')*F+$\"?uKHO8M?>wAm!Q(o)*F+$\"?*en&f%*Q*zDOv>n;( )*F+$\"?1@x$R7fn!4>wvTu)*F+$\"?oZbC7@u60;:N+x)*F+$\"?>![+0l-W`M+yP%z)* F+$\"?o`\"e;?l\"[V$)*yJ<))*F+$\"?Q_<*p$Qz%Rnry&*Q))*F+$\"?pk4SS`E\\i.$ )*Qf))*F+$\"?z7>KgC$HC(e!opy))*F+$\"?7*3lV)*eX(RF\"Q&p*))*F+$\"?(fW3XsAFF8e+/fY(*)*F+$\"?32;.yuY;!z/O%y)*)*F+$ \"?RUg(>py#)[Y3@M+!**F+$\"?zyW'G?IW4>S**=7!**F+$\"?WWX!)Q\"GBe=%[>M-** F+$\"?PEYRi]#)RE6RgS.**F+$\"?D@(HK;gJF%y\")RT/**F+$\"?*Q%o@d#\\\"RG$RE o`!**F+$\"?BwLC$=A^eXO;ri!**F+$\"?W=z19=B!GHiwCr!**F+$\"?uJ4v@dzS)\\*y 4$z!**F+$\"?t)Gh(f9wSC4W:p3**F+$\"?uuGo7pCyV_]!3%4**F+$\"?kq$\\&H3[bq \"R%>35**F+$\"?kgH2xj:#4hd`92\"**F+$\"?>)HA:2$GD#*G6qI6**F+$\"?_.aa**4)3,P\"**F+$\"?bq/C+:V>Au[929**F+$\" ?`$**R/8]%RTVHpS9**F+$\"?EZ)e\"**F+$\"?NR,#**[r]S1p`ve\"**F+$\"?2!eQq8& >V*oZ9Ie\"**F+$\"?(3Bf@\\s\\&*pryZd\"**F+$\"?BN@#**GG+(z^yvi:**F+$\"?u :v&H2%*zi,S\\oa\"**F+$\"?'=W:zul)))=he$p_\"**F+$\"?W\"o\"*[W9$3pTM)G] \"**F+$\"?BYp!eBfLjMeSXZ\"**F+$\"?j)G+&p4'>7)fitT9**F+$\"?FEnSP)fE#z/! yUS\"**F+$\"?!)H!)*)ygh7>J'\\>O\"**F+$\"?KroiLN'**QUe3XJ\"**F+$\"?0W/L $3DEeo'Goh7**F+$\"?n.0xPD\"yT%eu;.7**F+$\"?5;mw3TUG!>8?'Q6**F+$\"?**y@ #4!Ru!R@bcw1\"**F+$\"?bIMGt#*>Bz6X%)*)4**F+$\"?@0I4^%>%HeDrp/4**F+$\"? ahX]tS6JEgZm63**F+$\"?MG%fMg\"3YG?a752**F+$\"?g!fL6H9&**RNKP*f!**F+$\" ?!4x#)3B6h2)*f/'y/**F+$\"?EtHw_N!>P]Q,pM!**F+$\"?*yh,Yj*)R$>z/@.-**F+$ \"?_f$Gs%p80Hx'=j/!**F+$\"?j@L%yuX&=(zj@[()*)*F+$\"?^$o$*)Gq')>/(>&3(o *)*F+$\"?Rz#3u;#Hi'yt'>\"[*)*F+$\"?*Rr3&R=&)po([.\\D*)*F+$\"?6tp/f-;0u AM`0!*)*F+$\"?TGf[*oJ#o1YF*)H())*F+$\"?ajBhe7m#>#p88C%))*F+$\"?+Yj`REK #*RHSc$3))*F+$\"?Y'=DsDG))3&e)GCq()*F+$\"?CUwFuY$oLN7cNF()*F+$\"?bMi2: u&\\`VF0zy')*F+$\"?#=r#=!Q5HB+T/RB')*F+$\"?Ffmq5b^#)yfa['f&)*F+$\"?H+) e(pnUSzwljb[)*F+$\"?S+sCZ5aur$zhT)R)*F+$\"?-\\)[+\"\\FN!=%f3WH)*F+$\"? *\\3=Qp%)GcOgK1o\")*F+$\"?.xd5;<6.Xv*F+$\"?#\\9(3WnHu7d$>OU,Pioc*F+$\"?BS4LuHx-2'Q-\"Hj$*F+$\"?bWa*4&4?.O+o?\\s#*F+Q (pprint06\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 80 "writeto(\"zi gAbs.txt\");print(y);writeto(\"zigRat.txt\");print(z);writeto(terminal );" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 72 "vector([.698283633209 08991, .78118354989999061, .79370592389489407, 0]);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#K%'vectorG6#7&$\"2\"**34Kj$G)p!#<$\"2h!****)\\N=\"yF) $\"22%*[*Q#fq$zF)\"\"!Q(pprint06\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2552 "vector([.75048477535383857, .85074027131095516, .89 343354196963194, .91701518183709447, .93194120323404624, .942225689827 80309, .94973653299239623, .95545938077507166, .95996297664358943, .96 359827503175862, .96659347346794949, .96910331573787415, .971236417555 65066, .97307124729068396, .97466589814029760, .97606429308686056, .97 730025388364525, .97840024489931618, .97938526912997784, .980272206900 90450, .98107477936232924, .98180425393874008, .98246996888238359, .98 307972880911985, .98364010676641205, .98415667761594405, .984634200280 00756, .98507676145830715, .98548788999165345, .98587064863401946, .98 622770827149339, .98656140838227233, .98687380662276195, .987166719753 62574, .98744175761909067, .98770035151605120, .98794377800345342, .98 817317898343486, .98838957871673949, .98859389830362490, .988786968058 72424, .98896953812739748, .98914228762696040, .98930583254504435, .98 946073258633692, .98960749712591216, .98974659040058136, .989878436047 90162, .99000342108464880, .99012189940190944, .99023419484185828, .99 034060391126399, .99044139817842731, .99053682639328391, .990627116364 55849, .99071247662292805, .99079309789498403, .99086915440924409, .99 094080505243783, .99100819439170557, .99107145357610920, .991130701128 92251, .99118604364047460, .99123757636983612, .99128538376231757, .99 132953988856886, .99137010880999548, .99140714487422192, .991440692943 41396, .99147078855739107, .99149745803261747, .99152071849731542, .99 154057786209781, .99155703472464074, .99157007820598915, .991579687715 09899, .99158583263712792, .99158847193977956, .99158755369064052, .99 158301447689427, .99157477871699552, .99156275785179700, .991546849400 16281, .99152693586118888, .99150288344169082, .99147454058346333, .99 144173625981221, .99140427800479225, .99136194963119127, .991314508584 23899, .99126168286685828, .99120316745844180, .99113862013190281, .99 106765655213910, .99098984451179232, .99090469712558292, .990811664760 26313, .99071012542028460, .99059937323539995, .99047860459980760, .99 034690138503720, .99020321047919340, .99004631867729052, .989874821637 97186, .98968708519704195, .98948119673786624, .98925490348768697, .98 900553342274055, .98872989274606682, .98842413136921927, .988083564029 39922, .98770242885850886, .98727355612353372, .98678790527435347, .98 623390441002328, .98559648545978825, .98485563657679404, .983984161793 71746, .98294408594180356, .98168063260365628, .98011160102647170, .97 810739411739857, .97545031959640279, .97174241333771234, .966163908091 60447, .95668623701423621, .93632910238607026, 0]);" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#K%'vectorG6#7\\s$\"2dQQNvZ[](!#<$\"2;b4Jr-u])F)$\"2%> jp>aLM*)F)$\"2Z%4P==:q\"*F)$\"2CYSB.7%>$*F)$\"24.y#)*oDA%*F)$\"2B'R#*H `O(\\*F)$\"2mr]x!Qfa&*F)$\"2V*eVm(H'*f*F)$\"2ie<.v#)fj*F)$\"2\\\\zYtMf m*F)$\"2:uyt:L5p*F)$\"2m]cb \"4)G(zI)*F)$\"207kw1,k$)*F)$\"20Wfhxm:%)*F)$\"2c2+G+Uj%)*F)$\"2:2$e9w w])*F)$\"2X`;***)y[&)*F)$\"2Y>Sj[1(e)*F)$\"2R$\\r#3xA')*F)$\"2LsAQ39c' )*F)$\"2&>wAm!Q(o)*F)$\"2uDOv>n;()*F)$\"2n!4>wvTu)*F)$\"2?^g^^.q()*F)$ \"2U`M+yP%z)*F)$\"2'[V$)*yJ<))*F)$\"2\\Rnry&*Q))*F)$\"2!\\i.$)*Qf))*F) $\"2CC(e!opy))*F)$\"2[(RF\"Q&p*))*F)$\"2Sgpi(GU\"*)*F)$\"2NW]aKeI*)*F) $\"2#pL'eK2Y*)*F)$\"2;7f7(\\2'*)*F)$\"2O\"e+/fY(*)*F)$\"2i,z/O%y)*)*F) $\"2!)[Y3@M+!**F)$\"2W4>S**=7!**F)$\"2Ge=%[>M-**F)$\"2*RE6RgS.**F)$\"2 JF%y\")RT/**F)$\"2\"RG$REo`!**F)$\"2\\eXO;ri!**F)$\"20GHiwCr!**F)$\"2. %)\\*y4$z!**F)$\"24W#4W:p3**F)$\"2$yV_]!3%4**F)$\"2d035**F)$\"2?4h d`92\"**F)$\"2^A*G6qI6**F)$\"2gu/kVg=\"**F)$\"27O)pjdP7**F)$\"2dAu[929**F)$\"2'RTVH pS9**F)$\"22\"Rd&)yq9**F)$\"2ZZ)e\"**F)$\"2_S1p`ve\"**F)$\"2F%*oZ9Ie\"**F)$\"2_&*pr yZd\"**F)$\"2+(z^yvi:**F)$\"2\"G;+%\\oa\"**F)$\"2)))=he$p_\"**F)$\"2#3 pTM)G]\"**F)$\"2LjMeSXZ\"**F)$\"2@7)fitT9**F)$\"2D#z/!yUS\"**F)$\"2F\" >J'\\>O\"**F)$\"2**QUe3XJ\"**F)$\"2Geo'Goh7**F)$\"2!=Weu;.7**F)$\"2\"G !>8?'Q6**F)$\"25R@bcw1\"**F)$\"2K#z6X%)*)4**F)$\"2#HeDrp/4**F)$\"28j-w k;\"3**F)$\"2g%G?a752**F)$\"2&**RNKP*f!**F)$\"2g2)*f/'y/**F)$\"2?P]Q,p M!**F)$\"2S$>z/@.-**F)$\"2_!Hx'=j/!**F)$\"2'=(zj@[()*)*F)$\"2&>/(>&3(o *)*F)$\"2Cmyt'>\"[*)*F)$\"2(po([.\\D*)*F)$\"2bSFULb+*)*F)$\"2#o1YF*)H( ))*F)$\"2F>#p88C%))*F)$\"2A*RHSc$3))*F)$\"2')3&e)GCq()*F)$\"2sLN7cNF() *F)$\"2Z`VF0zy')*F)$\"2GB+T/RB')*F)$\"2D)yfa['f&)*F)$\"2/%zwljb[)*F)$ \"2Y.Xv*F)$\"2M7xL8Cur*F)$\"2Z/;43R;m*F)$\"2@OU,Pioc*F )$\"2EqgQ-\"Hj$*F)\"\"!Q(pprint06\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "factor(int(3/4*(1-u^2),u=-1..t));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#,$*(\"\"%!\"\",&%\"tG\"\"\"\"\"#F&F),&F(F)F)F)F*F&" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1 "\030" }}}}{MARK "4 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } openturns-1.9/validation/src/ziggurat_normal.txt000066400000000000000000000524471307543307100223250ustar00rootroot00000000000000> restart: > st:=time(); > Digits:=30: > with(linalg): > f:=exp(-t^2/2); > invf:=solve(subs(t=u,f)=t,u)[1]; > N:=128: > z:=proc(r) > local x,v,i; > x:=vector(N); > x[N]:=r; > v:=r*subs(t=r,f)+int(f,t=r..infinity); > for i from N-1 by -1 to 1 do > x[i]:=subs(t=v/x[i+1]+subs(t=x[i+1],f),invf); > od: > return (v-x[1]+x[1]*subs(t=x[1],f)); > end: > points:=proc(r) > local x,v,i; > x:=vector(N); > x[N]:=r; > v:=evalf(r*subs(t=r,f)+int(f,t=r..infinity)); > for i from N-1 by -1 to 1 do > x[i]:=eval(subs(t=v/x[i+1]+subs(t=x[i+1],f),invf)); > od: > return x; > end: st := 19.609 2 t f := exp(- ----) 2 1/2 invf := (-2 ln(t)) > eps:=1e-20: > rmin:=3.4: > zmin:=evalf(z(rmin)): > continue:=true; > step:=0.1: > while continue do > while (Im(zmin) <> 0) do > rmin:=rmin+step; > zmin:=evalf(z(rmin)): > print([rmin,zmin]); > od: > step:=step*0.5; > while ((zmin<0) and (Im(zmin) = 0.0)) do > print([rmin,zmin]); > rmin:=rmin-step; > zmin:=evalf(z(rmin)): > od: > continue:=Im(zmin)<>0; > od: > rmax:=3.5: > zmax:=evalf(z(rmax)): > while (rmax-rmin>eps) do > m:=0.5*(rmax+rmin); > zm:=evalf(z(m)); > if zm*zmin>0 then > rmin:=m; > zmin:=zm; > else > rmax:=m; > zmax:=zm; > fi: > print([m,zm]); > od: > r:=0.5*(rmin+rmax); > v:=evalf(r*subs(t=r,f)+int(f,t=r..infinity)); > evalf(100*(1-int(f,t=0..infinity)/v/(N+1))); > time()-st; continue := true [3.5, -0.311792208785566848875990248026] [3.5, -0.311792208785566848875990248026] [3.45, -0.026852880697952826671234025455] [3.45, -0.026852880697952826671234025455] [3.45, -0.026852880697952826671234025455] [3.450, -0.026852880697952826671234025455] [3.450, -0.026852880697952826671234025455] [3.4500, -0.026852880697952826671234025455] [3.4500, -0.026852880697952826671234025455] [3.471875, -0.153081080990288697177520760144] [3.4578125, -0.071779667717385269948785934005] [3.45078125, -0.031289989910190834592877768001] [3.447265625, -0.011579643457509481260812358803] [3.4455078125, -0.002175851758006783220974044037] [3.44462890625, 0.002256735613253380424646977045] [3.445068359375, 0.000073412955539217839879165122] [3.4452880859375, -0.001044108118574164890822836116] [3.44517822265625, -0.000483446100497147330866653588] [3.445123291015625, -0.000204524377980705171102147066] [3.4450958251953125, -0.000065430465509012622230029971] -5 [3.44508209228515625, 0.4022837256970895879765017 10 ] [3.445088958740234375, -0.000030695951449192052085702345] [3.4450855255126953125, -0.000013334587021732029252634313] -5 [3.44508380889892578125, -0.4655381811589424077024346 10 ] -6 [3.445082950592041015625, -0.316148940489725396822865 10 ] -5 [3.4450825214385986328125, 0.1853375001091773118231396 10 ] -6 [3.44508273601531982421875, 0.768620739932761131449043 10 ] -6 [3.445082843303680419921875, 0.226237826994343510741743 10 ] -7 [3.4450828969478607177734375, -0.44955074946371630009425 10 ] -7 [3.44508287012577056884765625, 0.90641496476426589498257 10 ] -7 [3.445082883536815643310546875, 0.22843240877873785271136 10 ] -7 [3.4450828902423381805419921875, -0.11055909506070327719124 10 ] -8 [3.44508288688957691192626953125, 0.5893667567950500138776 10 ] -8 [3.44508288856595754623413085937, -0.2581120498548236288025 10 ] -8 [3.44508288772776722908020019530, 0.1656273652329115718248 10 ] -9 [3.44508288814686238765716552733, -0.462423393702572388832 10 ] -9 [3.44508288793731480836868286131, 0.596925136665019645283 10 ] -10 [3.44508288804208859801292419432, 0.67250873319160497498 10 ] -9 [3.44508288809447549283504486082, -0.197586259732221744011 10 ] -10 [3.44508288806828204542398452757, -0.65167693091659570847 10 ] -11 [3.44508288805518532171845436094, 0.1041590142468226701 10 ] -10 [3.44508288806173368357121944425, -0.32063051467416231233 10 ] -10 [3.44508288805845950264483690259, -0.15510730660679142055 10 ] -11 [3.44508288805682241218164563177, -0.7234570258656742643 10 ] -11 [3.44508288805600386695004999635, -0.3096490057982079252 10 ] -11 [3.44508288805559459433425217865, -0.1027449957728881592 10 ] -14 [3.44508288805538995802635326979, 0.7070092376683785 10 ] -12 [3.44508288805549227618030272422, -0.510189932674346155 10 ] -12 [3.44508288805544111710332799701, -0.251559920148393038 10 ] -12 [3.44508288805541553756484063340, -0.122244913885745087 10 ] -13 [3.44508288805540274779559695160, -0.57587410754503330 10 ] -13 [3.44508288805539635291097511070, -0.25258659188902893 10 ] -14 [3.44508288805539315546866419025, -0.9094283406107926 10 ] -14 [3.44508288805539155674750873002, -0.1012095514711662 10 ] -14 [3.44508288805539075738693099991, 0.3028998430986092 10 ] -14 [3.44508288805539115706721986497, 0.1008451458137229 10 ] -17 [3.44508288805539135690736429749, -0.1822028287225 10 ] -15 [3.44508288805539125698729208122, 0.503314714925063 10 ] -15 [3.44508288805539130694732818935, 0.250746343318983 10 ] -15 [3.44508288805539133192734624342, 0.124462157515871 10 ] -16 [3.44508288805539134441735527045, 0.61320064614406 10 ] -16 [3.44508288805539135066235978396, 0.29749018163637 10 ] -16 [3.44508288805539135378486204072, 0.13963494938300 10 ] -17 [3.44508288805539135534611316910, 0.6070733325554 10 ] -17 [3.44508288805539135612673873329, 0.2124352519261 10 ] -18 [3.44508288805539135651705151538, 0.151162116056 10 ] -18 [3.44508288805539135671220790643, -0.835433085551 10 ] -18 [3.44508288805539135661462971091, -0.342135484724 10 ] -19 [3.44508288805539135656584061315, -0.95486684372 10 ] -19 [3.44508288805539135654144606427, 0.27837715801 10 ] -19 [3.44508288805539135655364333872, -0.33824484295 10 ] -20 [3.44508288805539135654754470150, -0.2993384285 10 ] r := 3.44508288805539135654449538289 v := 0.00983490811172757998880606474955 1.2129716191583968202392378292 206.427 > t:=points(r): > y:=vector(N+2): > y[1]:=0: > for i from 2 to N+1 do > y[i]:=t[i-1]; > od: > y[N+2]:=evalf(v/subs(t=r,f)): > z:=vector(N+1): > for i from 1 to N+1 do > z[i]:=y[i]/y[i+1]; > od: > print(z); [0., 0.750484775353838553484969850043, 0.850740271310955168539797476445, 0.893433541969631939167066002439, 0.917015181837094471851335493153, 0.931941203234046233441298028733, 0.942225689827803086945282581056, 0.949736532992396229158449917333, 0.955459380775071654971678008833, 0.959962976643589437257667346996, 0.963598275031758611303047864447, 0.966593473467949497522283939333, 0.969103315737874152720557392852, 0.971236417555650662146408519772, 0.973071247290683962507094254337, 0.974665898140297597377304564176, 0.976064293086860561017929573224, 0.977300253883645249170475123945, 0.978400244899316179173188425569, 0.979385269129977846895884043302, 0.980272206900904494815390564396, 0.981074779362329241400634997295, 0.981804253938740083291033345358, 0.982469968882383589521668758583, 0.983079728809119850562796554795, 0.983640106766412054356146072398, 0.984156677615944084392929857459, 0.984634200280007552311796735515, 0.985076761458307086707253212313, 0.985487889991653471429663256532, 0.985870648634019490358385815715, 0.986227708271493343086583402375, 0.986561408382272362985077361984, 0.986873806622761920341336293274, 0.987166719753625799389459567589, 0.987441757619090675912393772106, 0.987700351516051174211224554768, 0.987943778003453440265050048019, 0.988173178983434816520165815368, 0.988389578716739479383699175238, 0.988593898303624926534040096469, 0.988786968058724293246032191279, 0.988969538127397455898436508912, 0.989142287626960404173170844597, 0.989305832545044324977737622638, 0.989460732586336934407985727862, 0.989607497125912170683173044980, 0.989746590400581327272272451975, 0.989878436047901646747803160708, 0.990003421084648827869197604239, 0.990121899401909443020286447879, 0.990234194841858232813880454444, 0.990340603911263982506239462637, 0.990441398178427316016322972125, 0.990536826393283914925721684389, 0.990627116364558512218324337623, 0.990712476622928023181406791844, 0.990793097894984079572175093174, 0.990869154409244076145976128873, 0.990940805052437824691268287474, 0.991008194391705548082954937064, 0.991071453576109215637707296064, 0.991130701128922528307152229819, 0.991186043640474608746669498017, 0.991237576369836074033189634373, 0.991285383762317554082871105898, 0.991329539888568903748275039752, 0.991370108809995454035219189473, 0.991407144874221943150024047055, 0.991440692943413945013043999353, 0.991470788557391074579718311726, 0.991497458032617503483410551001, 0.991520718497315401540555107636, 0.991540577862097828628588285611, 0.991557034724640724341601679445, 0.991570078205989141038468359572, 0.991579687715098995526722137843, 0.991585832637127947522049524329, 0.991588471939779518821684067585, 0.991587553690640507148992013935, 0.991583014476894319513703858007, 0.991574778716995497249215923087, 0.991562757851797002828992213523, 0.991546849400162799407295751574, 0.991526935861188886574791544186, 0.991502883441690831444489168144, 0.991474540583463335923580694623, 0.991441736259812196096950028863, 0.991404278004792265983740672627, 0.991361949631191261607889802980, 0.991314508584238996353362687132, 0.991261682866858262508333044405, 0.991203167458441781253777050367, 0.991138620131902842410876661610, 0.991067656552139074390092217899, 0.990989844511792319927328343055, 0.990904697125582941945109300521, 0.990811664760263111407350456154, 0.990710125420284608160345942834, 0.990599373235399951429113359060, 0.990478604599807611123088277090, 0.990346901385037190355276297326, 0.990203210479193398963460161789, 0.990046318677290513694722835952, 0.989874821637971854574784332163, 0.989687085197041986702889368351, 0.989481196737866229216740827939, 0.989254903487686985183950871399, 0.989005533422740516025904697311, 0.988729892746066823168948592841, 0.988424131369219266125861236354, 0.988083564029399232263953634600, 0.987702428858508882825722518646, 0.987273556123533683467427764224, 0.986787905274353495741507623455, 0.986233904410023291038018271182, 0.985596485459788251551070665927, 0.984855636576794042676975880029, 0.983984161793717454104724720040, 0.982944085941803527491004884902, 0.981680632603656288469381808499, 0.980111601026471711171610577703, 0.978107394117398550145114447318, 0.975450319596402797690182574081, 0.971742413337712360174408714492, 0.966163908091604482763906551568, 0.956686237014236193571274296719, 0.936329102386070277297433094023, 0.927249206800360320095099544455] > writeto("zigAbs.txt");print(y);writeto("zigRat.txt");print(z);writeto( > terminal); > vector([.69828363320908991, .78118354989999061, .79370592389489407, > 0]); [0.69828363320908991, 0.78118354989999061, 0.79370592389489407, 0] > vector([.75048477535383857, .85074027131095516, .89343354196963194, > .91701518183709447, .93194120323404624, .94222568982780309, > .94973653299239623, .95545938077507166, .95996297664358943, > .96359827503175862, .96659347346794949, .96910331573787415, > .97123641755565066, .97307124729068396, .97466589814029760, > .97606429308686056, .97730025388364525, .97840024489931618, > .97938526912997784, .98027220690090450, .98107477936232924, > .98180425393874008, .98246996888238359, .98307972880911985, > .98364010676641205, .98415667761594405, .98463420028000756, > .98507676145830715, .98548788999165345, .98587064863401946, > .98622770827149339, .98656140838227233, .98687380662276195, > .98716671975362574, .98744175761909067, .98770035151605120, > .98794377800345342, .98817317898343486, .98838957871673949, > .98859389830362490, .98878696805872424, .98896953812739748, > .98914228762696040, .98930583254504435, .98946073258633692, > .98960749712591216, .98974659040058136, .98987843604790162, > .99000342108464880, .99012189940190944, .99023419484185828, > .99034060391126399, .99044139817842731, .99053682639328391, > .99062711636455849, .99071247662292805, .99079309789498403, > .99086915440924409, .99094080505243783, .99100819439170557, > .99107145357610920, .99113070112892251, .99118604364047460, > .99123757636983612, .99128538376231757, .99132953988856886, > .99137010880999548, .99140714487422192, .99144069294341396, > .99147078855739107, .99149745803261747, .99152071849731542, > .99154057786209781, .99155703472464074, .99157007820598915, > .99157968771509899, .99158583263712792, .99158847193977956, > .99158755369064052, .99158301447689427, .99157477871699552, > .99156275785179700, .99154684940016281, .99152693586118888, > .99150288344169082, .99147454058346333, .99144173625981221, > .99140427800479225, .99136194963119127, .99131450858423899, > .99126168286685828, .99120316745844180, .99113862013190281, > .99106765655213910, .99098984451179232, .99090469712558292, > .99081166476026313, .99071012542028460, .99059937323539995, > .99047860459980760, .99034690138503720, .99020321047919340, > .99004631867729052, .98987482163797186, .98968708519704195, > .98948119673786624, .98925490348768697, .98900553342274055, > .98872989274606682, .98842413136921927, .98808356402939922, > .98770242885850886, .98727355612353372, .98678790527435347, > .98623390441002328, .98559648545978825, .98485563657679404, > .98398416179371746, .98294408594180356, .98168063260365628, > .98011160102647170, .97810739411739857, .97545031959640279, > .97174241333771234, .96616390809160447, .95668623701423621, > .93632910238607026, 0]); [0.75048477535383857, 0.85074027131095516, 0.89343354196963194, 0.91701518183709447, 0.93194120323404624, 0.94222568982780309, 0.94973653299239623, 0.95545938077507166, 0.95996297664358943, 0.96359827503175862, 0.96659347346794949, 0.96910331573787415, 0.97123641755565066, 0.97307124729068396, 0.97466589814029760, 0.97606429308686056, 0.97730025388364525, 0.97840024489931618, 0.97938526912997784, 0.98027220690090450, 0.98107477936232924, 0.98180425393874008, 0.98246996888238359, 0.98307972880911985, 0.98364010676641205, 0.98415667761594405, 0.98463420028000756, 0.98507676145830715, 0.98548788999165345, 0.98587064863401946, 0.98622770827149339, 0.98656140838227233, 0.98687380662276195, 0.98716671975362574, 0.98744175761909067, 0.98770035151605120, 0.98794377800345342, 0.98817317898343486, 0.98838957871673949, 0.98859389830362490, 0.98878696805872424, 0.98896953812739748, 0.98914228762696040, 0.98930583254504435, 0.98946073258633692, 0.98960749712591216, 0.98974659040058136, 0.98987843604790162, 0.99000342108464880, 0.99012189940190944, 0.99023419484185828, 0.99034060391126399, 0.99044139817842731, 0.99053682639328391, 0.99062711636455849, 0.99071247662292805, 0.99079309789498403, 0.99086915440924409, 0.99094080505243783, 0.99100819439170557, 0.99107145357610920, 0.99113070112892251, 0.99118604364047460, 0.99123757636983612, 0.99128538376231757, 0.99132953988856886, 0.99137010880999548, 0.99140714487422192, 0.99144069294341396, 0.99147078855739107, 0.99149745803261747, 0.99152071849731542, 0.99154057786209781, 0.99155703472464074, 0.99157007820598915, 0.99157968771509899, 0.99158583263712792, 0.99158847193977956, 0.99158755369064052, 0.99158301447689427, 0.99157477871699552, 0.99156275785179700, 0.99154684940016281, 0.99152693586118888, 0.99150288344169082, 0.99147454058346333, 0.99144173625981221, 0.99140427800479225, 0.99136194963119127, 0.99131450858423899, 0.99126168286685828, 0.99120316745844180, 0.99113862013190281, 0.99106765655213910, 0.99098984451179232, 0.99090469712558292, 0.99081166476026313, 0.99071012542028460, 0.99059937323539995, 0.99047860459980760, 0.99034690138503720, 0.99020321047919340, 0.99004631867729052, 0.98987482163797186, 0.98968708519704195, 0.98948119673786624, 0.98925490348768697, 0.98900553342274055, 0.98872989274606682, 0.98842413136921927, 0.98808356402939922, 0.98770242885850886, 0.98727355612353372, 0.98678790527435347, 0.98623390441002328, 0.98559648545978825, 0.98485563657679404, 0.98398416179371746, 0.98294408594180356, 0.98168063260365628, 0.98011160102647170, 0.97810739411739857, 0.97545031959640279, 0.97174241333771234, 0.96616390809160447, 0.95668623701423621, 0.93632910238607026, 0] > factor(int(3/4*(1-u^2),u=-1..t)); 2 (t - 2) (t + 1) - ---------------- 4 > > 

    Bi @=0%ޟ!| Dt@A76e|=!hZM \p!1-q.k|> @1 j{r Ycĕo*{@<I6H&]JOzƌ?)g}|B]` ďZ6{mW>] ޘL >\sXdsTv\uF(p)W5@eQ\@'1i}rC[IXѢ8C ˋ\ډ>ؽ|[ x0h|) ,n|u @ "!(Emܾ-}BH/ Dz { ٺbZݡ}=os1.t]!c  =B u]7B\"zBczBGcs,# AA7!.p~ ](hIB=!(0Bqd m:އt"./t@h P*1Mp?^~^ 8XQJ+0yʔ- ]>`-7 (V{/ml>ƿ5 |. w=Pur3;".un6i|[# F_h ]/` at-.$;TiL5H\oqɞ׋ yZqF\AG7hGuEq|Qcg,rP@Kq7v n t'7".7 ".7*`1A l|&cE/ wn}w)RO i8{2`Jq0n-&mܓ9,z8ƙ'jy{~G }ߟG= >@!_# BDƴk '%-SiLF͏OPY֧nbqr8.U/|A^ LT988@B+x':8֗¸~S_;+c)ee56w:!$!Bk06@!JWB3P𡻸7Wia0? uBƀ4=%7W%fp~ISK:JISNΝ;a.myLIS{I'KXo!쾾"Yx`ُj%k`Χfxx~^3=o*{k^1/۞fy6L~OdI/my⋳_{~?[5y3㧿z0O&=nN2~PO|:_e7 t_b<1>ymsHXbs*y-;ﻷ"8\94=&7omz{l #'6]ӢMzv? ۳b{>'  ދާ{)/{D)1NsM}eMyy|v,p8(q1'"tF-§]EwYGnxG\[ E,h s_!l6fl6$L@ @Ny!@K\QJzG`S&qA鱻n@ۃ7~_|&+I`1p[gPefl6fmDKn 6@"@.(%5J'I>;~7Xu7Xw7X~nÛm۶ɲɊÀNBH*Sm @l6flv@x!\Q*c@6=!8<1o3*mG:JIw}7ܹ/_3&MGuǏ<?{˜DR娟~ ogfl6fi-k @P=H@`B8QJ[a׮]2hqzOwg ρ~׬-[2Xfl6fC6ƀY@ho9%nI…4Ʋ(l6fl6 ^x=! (1 8`ہDVcfrM`HˮO @<80ŒaAD\<^i@B#8i GYz*xNSK:Zk֬%KMD`v0oO v /BEo5PiPS⟅i4[6b[ͥ"/V\) 6ٍnq}ӷϲe| i|X.'bʎ@ bLw)= ,1v \Zp!lۺ m.MBYG]\6Z^5Nxꞿ;}??S_}υJu#6bKE JHp$ٍe'qle>vlv8kCZv};_8fD Y88uPi?xG>PG:Zh rE~} G̀6 o+TvT\xm6@ >&fqdl>vlv8kgHˮovO +>C) +135v t E&`~8mٲEzl:Ghpiݵ+.X\;~fXn;,[ *?' 8hg򴱭 @Mcle| lvϾ傛$0c@4?1 v}=qx1@}{׼͡T&Ɇnha0MD=]9}.]<~7sمr>f jA @1 n{(x1B87.ȢYfAmmN' Dp& D mOe.~-`͆jݎoVl  @L&(O"e󴱭  °V;n5 zea]sAV0l\}1-'M.qTOۧ޼~(h CC[? =win J: f~g{"^`Ä^s^D>y򴱭 2@ih:Ub`3'1=Z D ĩ[(=iZ>kּCSo#vZ jV92yHqz8ԣ]@xϑ󍾗G'W+W.!+6KXڀgߴ3TBAc@G0<(Zg<(QŒG 5j,]TO& qlͽÒ|7턵vʞl="Zƿg{Ogg_>V[ 09OׇmeP= 4&heGm. A97?q]\he\4*l{=;TtWP]gI9/N7c7q+űrȐh{cy RLeUf}Qb 'u|M :bA Jj @?p<k,OZSK: O(y@/'aww`m튭AϿ }(6Nkgo |uWV檴U<]_9ܖ=a/loVbD;ap 6H #yIAܳ'(fI^v8ͿltyM\WZE< ʐ!2fG6vL@a*Ve#c0ayø~|6u4?goU2ۍKÿ>cZ.9i#vm }ay,+{etyjCfy*=D|cy9vͲcKcZ. Ϝ#]}|?D\Vwwouo8oJ ƀĴ[qk,+qiPK:aРAvZ=%0ߴiS@L}K‡k?|c<j|d%,~ |x |&xAm (ϊ_@,u9TMIe<]D"\A t Bl֩<_XXv%בy}pЯ\ ͛_ +pmp+&WC Z]>ܥ={/|lǾJ˗Ǫ4\ub|,n:f-ic,*ag Rx}VxapΠsYi?˶Ხ3|lO?$/?pv6 ꪣ_ lpDIDkgCK@8z[$#Ydu;/˅KaGcϣ-OwFKnnBAw Cp%#<ܑ/0V~Rz@xM$$ yX/'u>1ϼ4zJϼUtt^臠sE3z/fxm[+PXKjҴ]+6Ѽ0W.Ci`[7#˲.dmc8vq>+x!6an{cٯ >Hdz쁮stB)闂:SYm?$ԑPzu[^>m$$m7zEZX@ @iߣ`1 NZwv%c@bLG'Avmsk]@sdNk9/J@V O{΢\yad<ٶ:1Ϻ)CL{On*/z-LXNtg !ǀŘF1p-Ox}u# E/oXlk>:\>?36b[ͥ4  /gs//\͚]//U͚U/: z|]>rw>s.&n:)OX*pWѩSB1?DPA{6&-+~z:M}N|81G0Nc@t}=Nj19 P ISG:Z8ŋ嗸~6ۊm. eS04Gg}Vtrp7X|_yqzA/7˱皀mEGxǎw#oĻB5D <( B\a*sIGcE ZP Hm6A'|f@6l6\/|@-aWB'n@tC6э"oY2l65!-!8Aϱ +G:[fuhs|hyӎ;{O!T>**['G*ÇK.'Q6"oY2l65!-/sI] ܏0E{?𿏚?m W4rCE M7$OHp6OUm>vlv;kCZv};_8lx>BR"vz@I?h̘10n89pGӯ]?$|ݲn;t#q*xpUj+ -_]4i\9@@EH͇ʸfl6fgsF ~GIѦr ûŘF;+~/D @LP=]ᒎ,BrJ5j=`vNat֠GW7?@_E _Y-z!S(2J€:t(.?3 r|pbfl6fl!ܩ2@c@h!ǀ "A1}e "bQ<@@M:@Duu5̛7O뢻x^‡M>l~n+=">f3(?T%/GZ e3!%pE\O^@[/@l6fl2Wfқ @pt};;\Nj1-Ļ@hNX$t&E@/_ k)iԷ$|Xa0fsvpK'KV‚׋l@~Ȑay+صkB0`l6fl@c@P6qx1c+)N %YdĚ5k ˅KaGcϣ-OwFKnn+ϕq}6CZn?A l6flv9{gC'Ő/;J>ǀ@cWmzA,dK'q%Ȇ"V*`㞱l/nS_{'ı0 xݏQpaA'A'ʼ~?KY) @ffl6f!j `O%c@t}.D\<^b: @đ,5kTa?YF8C[ y3eXuWCU%o߾{fl6]dݷlDX6B|x}e &7$ Le.(&_|5 0z*jHbl6fq!y#B=ƀKτJG@lc'mtKY X@l6f7m :;8@q8*/ehŲfl6i.¸ǀ8#_@l?h VWB,VT l6f @_c@a DedMިDb3-òj"T4*V9*Y&KS. Xx1`l6n.$(1 (@∞0K.hl!t8EpU eE_O; g>u܇Pq\nX>znVV%;wJ7 1++BZLiʪ*.ҕP],+4*=S߀qԯ̃޲ Ld?fl6@2[z647~@ t@&iG:[ïOӆ-N+zxflqB Jn +rpP^61<G:[ckן6 ] bU kò5`ʭDRTAx$ѳ лvA6 f͚:VJB>ӘPŤӦMaÆy{>Ko@l6.@A(Kn  ]o = BQSK:[+W>v-{O{w;@Hƒ۠ƉYh%3`_)JxZ˹Ę1c`ܸqzj=%d*{HBX0do ,er-?_ wi =:ƷlGZXi=SL=vm7o~tX )̈ϝ>:2@l6nL :7 Jn  @(c@#:YLxvs'?mD lfVuTԻ 6`6w,,74Xr%5 .]&' "d3A.4(V6q&Ӛ ˅# )g:}rV:\RD |ܹsf92}V,麗yDÀLB`Bl6fYs" >pӿM>~r!ǀzW`Ǯ`ێ]>n J:8!-co<.*5M:4qZ_s?ޓ@̅-+53%hf`oj~vA(ܿa޼y2(^^˓ߗڮPN4eC gL#y>!-3rqRj/AC.]np 3@; @l6. Tƀ ~NĔ'XґEyBC>5aߴn){>,_*#śa$_S_I0W,XU!]~He_ Ub1й3pj׳`u._ l .j@Z|9 4֮])r4Uᛎr2-l/|JHұu(h4apC>"P)D|ez6fERm`DS7%Ғl,%|d|6Xj|bk#o6i#~YրBLe`1G0gm#G0&#um?S/Xq;|6B?m?W5XfMKo+ނۂY݆Ie]QtW\:P!A8$Cz& AOk3߂yv_"b|JLl6fG0[ƀ{z∞x1C1 p|bS :B ,dK7~,y#dJXzM:kya'RaDBI a-[5 hjժzu4 AYyt0)P4XP2(wh갠\}i>DAm@5c H/ H]_afl6@<:jys-!ǀ BAc!{@\1^Pv >'-R"tdQ޿P'˅KaGcϣ-OwFKnn)E8o > Z~-VoZfFo/$){ê>'j-4hB1rVTfl6z@7TBD$c@z{x <(t@(wi,G:NP۸z3{mpazO 3~|'=퍯<͝gqi dUPJ=U/ ˚~Aqg_`D l6fA!5r  bL\ƀI8%3y%YT__~o\:x9v_7h{$hտ=8D܏?W>st{4+25{V[?|mظ'PC K l6f>?@D;'LtdQ}B?YF8C[ y3eS@="QgUAΟ`V[l~&1% X,K l6f@@Nx :]K:I|'_} t| ̪*,Wr?ELeflvvf&mj !lq6>q#BB閕 !=O^秺(z.ԙc95Uκ]ӔLy}<j|{= jb]vˮmEho$lV*ޤw8vǀ@c $@@U^*=NKy]OE ݮ8Iw#U$>(n5}jHE'긬 ~'J@qO" s ](rW])INvu!5{>= P.WW \`((H}ÿYBqB@@@ԥgBC[MT L8*/5ꫯu*A'M1ҦMTLx!mkh:+Ņ:sYi*-f/;_6:r3mcmAgg#ZXtu5u_= 1PNnNJ䭤zhڮ&ڹ_xrud_*~`:6X7.BoI9+SWРS=wٶA0iu4eʝntUQ>C1&pPi5?ٿe=Z%oX?x,8} yQSx~ "V==8<0hϵ k{\[1]s?L|²raږR%ɹ-dĨsNP`W;w` ulkRNm[7,YT8,ӽ:dZɓeˌ\m$:H*jaFq>}ybۛ:O*GKvǐSG wY>87AALX| u&}ǃ$ZNӅ Qɲ[N?͛ 7UE9LS&.ZK˳]6fc]dL{fcӬFWӹCd wۮg1 zŘU>zBI@ *Td#\T‡.]B{"|<ӺYI9g #EyUtiy̧$[R"*gS:|yqsS71i9O1eggJK:6GPw5fS/\ma PR>2Q-qֲiLn:"̧&򮱀^SOЮ9o|PH{t0/Y?]a9:owkCPNȱnl0og52 @(!Cƀ"n<^]5zC>1iqU^*V‡BHs8᫷`}'/&+/S]lL Qm1ub0vŔKXvՑ<"W\:PSE }Ш >֟*O^lV9)ǛK`q5b5☑ǎ>' 4~H0)T?"" R9.iLnPEl\Nn7ߒA`}Žlf!Bj92L( Lm#vc%;FڟІncL~0*nVc)8|e9%c@Bq&wxO <(tWO@쀿tK:Xb8$nI禐ӛ+nAIya{J;Bl:MWbf~<9>TqQˣJ l;Puem x!Jn|_w+Swzeu1RmNϱ,k}ܲB,V)*z>ǃk>gޤemUy:jB6$@yy.=\ڳ6HJ=ikY-V6e.|^k|Wf^_fiY*cݬ}VV!߂їAD8j @yP,@k Z T K(Q$3U^*VѤ%/$ť, HE PH;2(37L8]]ɼXД*}Sݏςt~^39k~ZgYBr:X=NIZgq䜏ztK9yR=8њaa;@c\eHPuF9ro=^)fv[Nm-# e6{{ʛL:h9YE>HLp]y[jle/i{c@{=LqdxQ Dij A(M_B VyD%/ey k4X+=({F1dJL |=.*/ !gznosVg5Q9D @1 pbL{Nqz@"tK !7oߏ3&*b|bE9U@ n"@1,r 'j'3a#zJAX @BD`@XR <0+4t0f* B!ǀ BADŒz@ xOzZh1V#.`@XQU *G @@ha!Ģmp@@A(y [ׯŋüy󚄱fV*%b!fA1} B-CG:X%֬YK,M6;fl;qU,fl6  Jp C#ת1 1 &nƀ0"tK B-Zm۶mMvV{@XROX,V9*;#" TO c@L ƀ8@aƁ+Rb iرcl}S2j\1`X$>XrTV1MPQRc@HwW:B?!ØIB Y%Po-[l6#.4>s4'A`g4l3UJ *Ge3g>!\Qc@%= 6BP"tK BaMlMb[t$& i$b'J*)VgVy*3ĂfR_> =G0@H1ZN#P@lڟͭ*.OOifxߕyjlj4 *]•t!\i(z>*e+RzXL(z^ԙc95Uκ]ӔՕ*O~G6XeY(W몶^v}m,*@}#aUYryR"{ĵ[0M'ncgI+>Y%016lܨЪ2"*Z{SӫW`ڳL^u]fAD-ږ|΃iq©-N:F*k_kI:>j=EΣ+K(H$(vq%uY$9vϫۅօ<),d@A\1_p]mV6 m g52iނBc`'1 :އt}ǀcB#@uS?"b */1A<~zAVCpжaggYٞj؇z(`zEEOxV֓<y _ mɧydД"Hʬbڶ,V:E'*T_s*`-C | !,[ VjҴe`!heO̾sL98upW$*Cj+EAu@V\qSzc r882 ]i[b;H9^?S9AY_4vHct]}e#ۚy*f%6nVc+ǀVq@1 G0zyP,_B@ǜƀX+@Kp;X*/1AM`͚5OC0}v?ZV􀧃ej'Y}WFI aϺ4ѕ_Co"j @yP,i |k Jr 8` Le.`@ u\jUCZ CwL+Zs2;(-S3;T!ҚֽJDIn5buwP*!W'NniN}N:Ll۩vFWgt/Yrx XۉŪ?'(u`D02)  4@.)@L sN0&`^óNec3 k,+(G!fz 4T9^0Kϭ7qr|WX]ԁr)Y{@(-4aƁP= lfM \*/1AƍaʕvWgyC W}>WMN:q٘ [#(onf!Bj9+L( Lm#vc%;FڟІncL~0*nVc)B7g^ VB BY= I$ؤY%0߰a?4)c@4J@4i T*)TgxCn<3޸Gy)#*MY.,ߩg"ߕWY`}X7k0?c@`Տ`ǀQfz _<^i xls0`A(@c@4"˖-oRfQ*Nޜ.7f- n~:ru 6A(ySa$j3.]'zsYӺ=GցŪ?E'1cL*R B;49A=V`Gw&w=8 s-Ov]Ǹ84O\6Y'{1Jm7rHo:c/ôd77=f;tLg])N}]:߅Z4۟@`@@ x"./= . |N!cBG0Le.`@Zhl+>ְlٲ&al+j\oV)o#,V=*| T\pU^RodLaK#oD?h`8]sOǀ@c@ n@ bL#xeK c;uS-!!$%PF%_IۊmƶW X&c5|*~iGVUa p  p  3 @|o?%= &nF@$GJMU^ba E G C XN̿^|>aȣ XD` Bxw=a#{Bx@w"yCb1 LU^bbF X,V)',o !"c@h!ǀ "./=~{%o!zC\*/1` #,U @^`p6#c@M9QcbL B<  2DVyU `l6f9d  @1 KτJ#xw-!.}WB6(8`2y㌁U^bbFb|bQ@mDioϲ D ۡ$ 6Y"tK t$:I8_'m̓5@XROX,V9*+*ǀ' (1 zmi x9qgl0z1e47c@ 8ӌVlҬ$@z/ B z0/|tíI*S:*&籑YuR*}N8Q} SюHo"`X%DPHe"_]i}|׫B=X 7mdg.d/ <(@\_8-S c@hG:X%IݘP3uot͙uIj>s$oR傛,yHH\{@!S\O5 {@̯ ^ aZ{.is;j @H@ j @1 BAMoI#m#uO Le.`@$wcBn"Ho&:nz7EA}MZʼϨu*,VQ*r>1}!C~ 649*BP9tƀP-i!bD@qA.`@$sc7`Glɝ/M'Ϩuꪦ G4cU {]Kz@oX.@ <3(ބ%ygVDW qTNc9w㜃X,V(_!} Jj @[ u|< >.`@䳨V*)/ Q+Tks F.T<|POԶ4~bR|"C9Ot9ܢu9H}qB }:b Kr ê4" #b n_JҪu$'**?!59yJaMHEҡ|mj(H۶阶XdE'5xiɳ|e,N7M zs(XW&L}o Mz@ ^C!!AC[a7<+0*~Q@lX,V)+|"5P_1/ -X,VB4ǀ"G0 xhYl%0*'XٛG"9{?XMBaaСoR7 / !@U^bbF UI0p@PQc@r@|C!?D&*/1` rbJ_|>aX{@ xp&az #zGfG1 BAx @|‡_1 "B ^ 4h*iE6g4*@l6fs0/͎:EѶ s=Gc,7EPd#\"^8hT]ޑh9ˀY88Y.l<+[,h$qUJ *G@9n<^@̒U$C ƀ76iVyDbbLG[ E@LXÂDO5]IK $퟾\| DV(1W X,V)',UHƀ bLA(% Le.`@$Ɂ GDju$˕A6>WUUBDSC=A0uTa^WZNM.iw2ĒUJ *G@gHc@ Nj1-o.:rJ ^ @U^bՕx /R[S1."RYjY1!ڞ-}bOBs|jaƀ0cn 3!xۂ#@p e H"Ѐ;7\ @dʷ仡NYrp!o A.N\nc~_eiKCb;b,߂p @ZVc B "t_#g큐$,W= ,0@q!nzž%%ro#- n|+jڪktIm@SK:X%eȯ8D~ F}L|hPs, =- G4/ZKڮじp4x|U}WOdy(]g:.6U5N:=Ǘ^t|О@tf3P(1 CĒAVyD *TNRj\:H[n6ZAf8LRoGv}F9xiZj= h7A]-K5}$.OpXqD]֋@5oP:eJX'c)Zbq͖%(1 $@ &%;@Ğ<KU5Y!j|\#.hB`=fyR y=!/%mumQ#|Y)3%c@@XQV)X.@zx(!/H2GH>+瓸(TT5X"&-#X%0j}oWi, "9ot濙mKip $ H*5E'1bS{@/aYدƀ"K>(pI*$пN**<<#RAJP^RB G%16I XꌩGMXɟx,U}x˪D Jc s7BA'6= FKw*2qU^bbF (U*y5bHQrc@ ~{ٻBkW@h MD`@XQ9#b|bXŤB(1 4#z@d@~&xiE6g4*J@G5U꪿ bA(_[ǀ z&D/=ٱx1- 4{@h!ë@E6K X¨z@XOX,V9*+hp/1j @` xbbیVlҬ0bbJI|>aX娬bq=o{ \d S$Pc@fG"MσbIbBKdQIK ~{GٷN1T,fl6瞟Gv:+S;އtUc@?ΎNj1#(i66T&Ɇf@~5zay-_yX&bJI|>aX娬g]€ vk~r C¾)gŘFwBA@;-.`@̚5 jkku*T/0GJ9b|bQ @1 KτJ9B(1m_D`@3ƍWSRHd=8GrY&,U@P1ur TU]Uv?? \*o;xLX5?z66/6eY|)*eD/5d 2 Jk +W'y) @PpQVyj0h Xv'qKxy(%7H{l)߶aZC94kab j2r'a0J |:|[ᖗKu;ζVY]?<e(_yO6}w|dmgcڻlL#%~ÆQwUUe-s;FmuΫhۼ_JI8Y,]6T=te2.+_A!7 ݕKK 68TSK:Xr߂(sBd@ gL37(('-.ꢭTWv9=?h=jޠaK5q9T|(uum@۝ *cP<'ڎmV|$uڧU0@.-ܾ֟`>m?S;ӦHyy:K i$'X7~;z̤1e[2srۼ_AQuu^[/rܲuv2b v8)&b@~otK f͚:b^M9NYymjYح<͡okjCzyC.7rA2rDvk[iڎl &/$AqNn>S'i?#<ˍ?҉\$iSӭdq G*K[2)Cۄי\ʶtRg},. }g[V^pXpx.a%:@tA(kקáo)$ؤYr,V}tDv-RM=u Ur&.* k4 v-GnK9pFtdR?$(i_jHƕc O4=v6t> Q9mʱ}uBqҖLж8eYFZe>JJyvJ R* p =<jc@4;4?ǀŘv^Aa@ƀhq̹MU^bbFM@tY34ZӾ_|7j^ .Mcz|-*|:4ePqTl\uE߂&]5KXMZ+zq*0۟r)bݤ6дj{1Scԟx']^g ӯS\}(L'e_ⶃW2tm%Lwn^KYAo TR?Ƕ {i@<3 80ǀP#sH79D#{CΒ bLSA!D ~ 4|pLpA0*nawKQ(aSY.ą/|ցr̍UgL=R굕vZ/.Ô)fxjN]V+t|5_Tq|ʷ?R{7RfSxU(_y_$;>31S6udZ^zay׭}i|<3qrlmɴXgːNX*)>}9yu}=He ڞ~!͏ǀ@a%1 @Řvݭ5@`b/ \*/1` ,]q>`& X N TUk*ۼjue4v·!۲m_&!D1 (@@D]z&4TZV|`A'] >ND`@XUJjIp/ XXFSmwpY>(P_.0"B=ƀHX9yc @đVyU1`X$>4زX8(PʶuhR BL{@@P_@c@@XUJ *G@1y;9@oN)wZሷ%$S넙^תTb|bQ.zATƀxD6x[s@đVyDB*f `l6f|^] a/a6Dzs#RYfAmmNVzqUJ *Ge=Eƀ8/@ V#A@8VT&,Ɇf@3ƍWS(.sM`;F'㖳4OuupUJ *G :b B`σv͎c@Sc?^@`9 "xw B!YTNbʕ0j(XtK6E ,q` Z .E ^*%b c@!ǀ Nj1Jǫw.G! b*=ؤYr(Q]] ͓dv챠g~ to:t>\ X,V))|22ngX5 h//(!ǀ8TثMG GG%DŒbB@ |0G:Xr˗àA`ڵzJz:-3+caz)`:H:yXo<ɓHo+.>:Dbr{>@Ӛ_] U"@_~nFm ݋0G`\1'JY,7.wu7O%lۆIT8i*q)S/>K`c@!ǀ "./t@hT8z Le.` @Yz@ 2?ޤ>ACj7 UWds,V+z>cJ;9{̯ x<}c-KX(s=Jɴ=MnTrDr8pU+d֩[ VSU@ tbx;fB@,K:XrVc 󋂲 >$Ub^TY RfgVcysLSw}.*}E'&HP={n9|Yw"c].C\M;R[N%C * 8@}mtۇՔTWvD謕?6wW);b!j>8s٘4Ru2bu Yf>d}GQtY#nJYuh Jm D;_T⇝x@b-=OZ */ `[MD 'ʽ1|n:b7M~]붦r48Y,O86:IhY(cOB[>xz sbbLH > :qA‡cދE6K X¨ySw#M1SߔL/ _g,+Y8;pWq(6O:vEᴘs U l%+-S]>*'s.YSN*nHڬ2(,UW\\&mcQ@:tǀPB7/ƴ€@cƀ+6iVyU5XHe|p$⦓eZ7~ufXqOı*NiH?CT<ɹ"q^H(JǤگkD]||9u`;*Wϻβ,yv=]k//zΤH[&,|_UMs;FG6g ǀ8 jӉ}izKa/@>Acƀ`Ҭ0*nA:7P 8o|d"2MY](EǷ8Y,O >3<18SiRFjxSK:X%,VaT KcY,V(|"K-BxT48A$ brM_F6@\c@Wz \*/1` #Eq|"~qnXsEݘ/ %r-G壺*1 ^%SW+/48|88*/1` #E͝b5J}<zT  cKn |bw Dʝp?qU^b$H/>d"UJ *Ge㦼r@>1&w@|] @c@@$HFUJ *G@ rgk?Dsbt N`6tK f͚:VYP l6f9_58蔋vDaD!> w'Ĺ@w%VmҬR1cq`zJyz@&鳁3#VY(GPUYQU/,U@PAǀ`_=DsG -x.0"'>$<凝@ ɠ 0iVyʕ+aԨQtR=5=rN|!Dؐ!@w+`NL*K[X%,U 0c@Pc@Pcݮk'}]K:Xr(Q]] ͓d^Bӳ@ =}h|b#-zUJ *G@p8ǀ"&/ƴזּ:{ϯ '~-'#X;{@ M P˗/Aڵk8q0@KO\24HV*%b BbðDh~űcovs ؏`A# ?OA*6iVyĚ5k!!Pe`XEMG0ҶU_*^L>Ar?u1QQ>纳Xe"$FֵˈCD!ytj|@0=gKc@E@|)S5Pd#jVyĪU¾ L%AF`3*ܤy6!{Cg6'U/*nG>\e>{ 4M|*dX|Jڥ$5D3b2øA^lY?1 g1 >K8Ⱦ\:{"A?Fb@(V*/ + iZ\vu5X '$Nq zMgXP}9r  xӿqnByO7С ^XNx{S\ĬYVX«0N_9t'ASJV/&,e寠:X@6UGfiXeP.7U\:W9j\ .<ᅷK@6@`Y0DXIK XVS2+`y)TP`1 _~ uʽ< βDN_XS|'`(4=M~tdXFV!"j @yP,iƻk`A_Z x8MSW)A+f@XQq}Ϳf 8i [^PҮ}Os2QqUbWxy'@r;a ,%,VaTz@"yVݭ<9ATִ+O~3 GAUF4;1Isc a=.$_,U FNQZ= 1>'"tK X¨ˤ~@aX|:D@|@p@= XJ D®.֠wn(]q۽webJI|>aX娺!Jl  5; |@V"tK /s$+PIGd`BVA:39Y;Foid1`X$>XrT!D⯃|I@t Fq`i 5kT`VU"žbۅmSFEI +.b|bQ!}@ܯz@ >tY.`@3ƍWS vo 06M@&qu;'yn6Մu<l )vCu]9Ji%̃L `mio։*fl6u%8kC=!({@t mU^*'rJ5j,]TOM+XN?AWwWcFumyD0C#,`4UL@ڶ:.ϙ'mPtg~={dfl6ݴ]tz@|cQ3@t|tϷ!#R9ytI =H" XI@ˆ'_ӛ?bڎ SrLjSBZ֯z R?u\^y$0LSFwflvv!D)񛣢ľ*/+Sq`)@-_ k׮S VA>@ Xmy 8) )u&)!]|yu\^yr$Sbfl6]~qsZ :kwFтtK ֬Y P1IR'տi?` eq$ƀ8_n..p*/XjU1 `pbPeZ& 8.ߞ߆z>6:rec]m` zD&lmt9 <һ]&.0p.LH@g!rIYo)mVt=2l6f7grR f(n't@đVyUK.u#/h #l`뉫r ˍ5uuЮ+0ei6fM/RB !(hb8Cr0‡bI 3z<$ihwfy< uҺo۲l6nr.$(OY {޴ k>HmVyU'8P:[6DkƍS%$,3 NpZrg~{K'2A C60˔`l64/ǀH!q.p*/1` qV 0$/gF`Y ; 6XcAl6]* 0ǀshļ|8sxqqU^bbFE H`fl6]:+@ K1 o3 B"Rb UՕm"C5UַWCeE%T7zC rwfl64]HQ= s@H $|@U^b$$HAsZLr+SmgUifl6T]ƀ= (h ^q \ĬYV 1  \7l6f٥ioBӯĤ)j,@<23= lD`@3ƍWS  ʫ +B>QSE{8u<2Qc@8IB^3qRaРAvZ=%NnƉA b<8F XSgTn{ @Xz%l6fXrS}R-b>f= ,rk֬2mf!'Z8^>RN_P6ޤzP i`JEmK.5X,V)3 Jo  $|bA@~f'F hԬR9UVq  }e`ܓ[ :(zd2O ֳ7TR T.#@R3b Гfn>h/۝GCmVyD`XUb. ke pa0[. ; ZUas=^d;6[.UGdr\&#>7mc` G/6fXT$ƀL̈́=@l%4o8{@@̚5 jkku*@z =:̸솀 68mT#uOR:vnܲ AWq|zAj,'4ȫ10b՛m;\ JD"48KB HT.Ūo/P=  38gf7 qy.MWqA{ol3`V ! (1 )}L"bbFE d0ޗg{HM0::V!|8VÆ<7igVb>fqu4ѹv| E>΢ˎMڔ`Ėtv`c 1޲n̛>`~k`NǴ1ZVUStSHi/*6t~ްbeR!DiX >TyK:X%,VaT"qA )72i9 :C@C\rgw98_ZlrI=df]^4N@nt|=/'ͼV* dk)K~snm&1`F Jk ! )ACb ,-,Vad{@x4uZ#|.|鵀ʒT= C‚|L:Y,VUa\= n= |88*/1` ƀ(fa #E T`˒i$ L`BiDbO0o>FOY1QfJyZz`T*  -1 @@ x0]ppRbbF u/ BXggI{N ȶԉyiiHXv9&lz@rs7fWW_M0}DAv۫!rrf^k9zS&(=Ug>mRdJYo!xDiq>_`̔u |8FK:X%,VaT-bu,M{(XyI:M' G'A("S Y W? m8>_.zBUhe #z`F4F&$xB p>\<}P!q$h -0 Mv ,/%3D"x@Pp *KD v{ybnN_ݰ Z,r(Q]] ͓d9Az4r0JN n=4:fl6iƀxݵm5xc .,r˗àA`ڵzJ>6' J =cĴȼ2;CdW*|bQZ4@B 4 \*/XfMz@8c2|9#BbTApT n=n[˰+@XROX,V9>DɌAc@4 ~9. ~D*'jժ::Gb{''$BiiʚBzH~"G滐N[#zu`UJ *G@Kģfi 8OAx{>섋-QrTg>{~u9u99l`rN19062L06I19r PQ e 0y~jwڵLhyzVwuUWwt~F&$"t@sLP9h$x?f1dlx1w%oX ^KOo$e;e= ,bԩiӦd .1vqOdϛ&%:}?n 7ǩ Y 5s[6t$@xh{@<uaDeD>nu_1 Y@WCp4} ~|T<n\ַF.ME$z,DPuKFc+IVw~hc@<x*.A`dOD_j Xg:488CcCK_sYJ߷趻Jn;@Qxhj| phob7VqV 4>qɲb+\ jCޕ%:xY}]p7Ct,+ɾ^e}/uev]vς oku94ouq~f.޶m:{[N43U^}G{x+~;@LQsGP K\npwL8$ {mZR_ƷQjo,tڹ%Jq@Y\E,<=ok#5/_'=dzv9s=jXG˦Oyޖn}{?!8{)HoowsDq: Ԇb*5o箙'F߫kqГI؜4N_: @Ԇ FCbr;|؋cR3in!=tݜnjK$z^y/qI}сga]y}JJoJWn.v` 퀿0pϙ.uѶyvC!v҈Y;!t 'wSKN]%Ml 6 $ jC NKk5k~`o-o IxD׏Sr>Lu*X_u$7}}߃1Gilf}¿_r[ϯ'tNS2@4~PC+J +v$s6a>ΙAޢ'60EI?RLa5Jo^2\/0}`ԆI 7x[^ao;z{C5Wr֑!_P/˻1o#A:B?hd_ấ~tϖ}8 v  T(CKD\BNpW DW#e]g,%? cbѨQ9suBO2y }yz*`/']^(p.snۼgThxqt}ud"^ 5mtr߃ <zÿ~@?{H: =wa?uo)qp# = ^.LL; 2$Re+K+s3Ͽ63:x?f y $@|^XqJ@YԩSeӦMTĵ>:.Rə;sπ'Ќt&@XyO_F*BeD J4 /իW'T@ٽJ ӻ y®momڙL' y }Tߧ2{Ïn6K> @@# 4# v LkGXv 4<^rLGf +Wx@,Y\Z(N7PwSKhy':Ds;?Wث caPMHr2wo/|>]K1zI{@v 7-4@3Ru${@$SW΍qX ^]L8\v E3E۷,X .I4_{8֯%O[BaK#^?auH{q$-]oq[h$x?f#cNp#Wp'@2 \T zʲe믗k&Q9;_wqH=R9ߑawt㯷zzJ@DDDĎDUBЯ`|' QxHN+\4[XfM{@(WRa3Ã7Hu0^;_eKM[ˣuR׽xܯ`Tܓ QsCEυ= Z;+I8(@Lrg!>]+4 VZU1 ,`ʀG@("* ˝tRL[|eoj}޺;eqtP1 /'Ќt4@Xz+?oL!@YAOh.* v9|= t#^CH~HW9D @:Qm y6@<=bZ*@ { '@=O9-2ckq]+4*=+ E_8:xاEZɻ~%~J_Awޛ Dq/B8f`1@X?@ Ν; BBp)~a%ƇI=sz&+D?B omݝ+4.^~4+ɾ_uk{]VP8BS|_69+sSsRxohv: 9ȼј{@" ß V@ zrL6$2~)a<.%~JBhsYv DǠ4gg Qm L;*/@x{@| w\T AHS" ?Z&gU4^qh@PrpaC>@w}?^(࿟t}=>}~e&lP_h= * ׮H׮t@sQMp# M  _B`~N 4v%-esy:>Zn>U rޛs Rb@ ^.׮m\T ښ<@ F )d?@ex"g?< 0۴fwۯ@sDqtQ_<*)&5X(ӿf^Cv LFQ_ z&~xE{}w}б)vu){" p8nBn5@1 \`u#DUÇo3Qt6R*,jc{Վ Br?dGߕJa`qV?;TF4(HFhzs\G$ sty)͛vwJޛ@:@x  n(c` S+IpW E%5!-@L:U6mڔLUJ/!֔VSn}|\Wӳ@u4I<4  H?@4qn1@\#1Fr1 6Bk߿ 8PV^\Re?dw:;_Gl\ɺ;4΅xISXiwLo#!qmY h.] x F `\_h.* D=+W< K,I.-K~Htjo - +|HJv-Dh:Gt ݾ{{y1P=yngAFqOv= –zs[$@D! 2= yJB= + ,K ;Dt]/o/3`ĺ#iK6tu"Rmг!@@# 4# 6B41 bX= ׃'@+w e˖_/k׮M.ɣ1 rvl2PwGH=R9O4@369q ~梒mf͚P>3h (efZeKM[ˣuR׽x}}nMO 1"@41 6@Pip#DUVUw K4(v?H fr/xԺ?.7mɻyvSPz+=FhF"l:@#D!@AO"t@sLPh$x?f&bl#wm rS"{@K%b[:ulڴ)=h$x?fȗ尳 q('{hޞ7_:6@ 4@31QEp:\v{@@B5_ @ 2cm9 ts Fe&u {@:@׍W:&@* K!5@0eWfIQǡ`y?q{0D;3!z>Dl1@ S ]+,=7@x~5Cp,jȼW J-goKտHk45 ăSWɧ~ kAW'>_:&@ؽ @4=6@{ dHË w`?G>iiCrJ-eS{S$^OpYWm@.ڧEZt_|{H¾FS:tWumLdTAWF9D‰= QrOdpn`_c@<.(1O-LJr27mC|RFqQj]m@)2'a+Jݫ>3.o-LL˭R"lq/$@~ǀrBvF@00{y`0Z.k4NU:.ȼVjσY!~,u * fS/U c_mc@V b8]z|ȄLw\T mi#D|C,8>$w7Zɿv+U<]@Ar~,5P͟cD@&3=m@-ܥ]OYu@QNԗ_b#D EZQu j@PbиBM"3/\ ȎVٲm[#5@\4b٧0ry hSUjՃ~X_+kms!Sf[ 3K 6rur+,0t`]!~bcm($5Fд˻}[2ti'.: P ] eSc= 6>/4--U6nۖR/ԩSe&x fC>=g@J zz鮡 B)|O, "J=w @wÐ]6g..zS{M%~J"5^nסE׾μo%Na+ {9$@h.J@t[k۶-^ֻDezJ=uw~r+΀I@U^Z^[l}Scie̺:}YsԇmUKtyoCrv<;ܖ@~H-D" N\ n| ܕBsQ*@EʪmReaXr<dɒr:O p;u_u0uD{"˧n_]?.?Ͻ<4@3ґqE9D6@<1= '%_Ƈoy\Vn>C.\('O~]w;e}? o6[뮓.LniMtVx۶z4@(˖-믿^֮]\;M"J3h cm`9pn"]Vryoݙiw^ǕMg>"Mmr(y OP{@ +7>ҡ_;ҥKܰaC4ׯ'Lќ9sdرQ*n%۶.f͚MzZk/Vt๸g@Cv]y ~1u;܁(oW޴^'Ќ2@41 EX KObvՉ6@Qf qG ͛7n 6lH~Hr>uYVVX)K,{_fϞ#cƌZZdCk,ںUoVP/jժ"F_3=D[3/6[4GeK=8DTf^5Fh{TW|| xM]/-DDDDmTyWϓǧ F 6V"@CcjP/ׯNe\/slڤB?fT]RC׭z'u3`̙2zBXu,ڶzs%u /H~HW9. '/{ 6@pI'ErV tO>X ֠Q¾#-^<믏·[kWZ-˖-~˫&#F3[Z֭?Ju N*U 'Ќt&@XwB n-"k]Ƈ/| һw FYhr*4?|:Jzh:j%_1WQW-=\qZa%G ew7ޔ_~E^|q~a* 6mMv{j  Oeh= 4@$y N26 H_:PPo[{oꪫg(@_{2o|4ltC׭o̝̜9[OU&O*#Gʩm2mozkJKE76؜1s,@ _AbnȾ$̓3Eޗޗ9(ǀxh uf'83n#FT ￯x tB… !t^]Ιa2m+2~$y_-2w9F*ңD:Re}Ww[q{EϷϵF~ԞI{nWޗ T#9St$@~u6gy|pÝ[Ef"t(o6_~xy@|$WƎx 4i8y̋q9YUf.ۖr.=7@a_v9MA&Lz__ d 7Ϸ#ەlxݸx_ hp#Dc  ==> sZ厭 ]PP ȬYs..At3fϙ3':n>56mL}:o'=-CAn3Ig^no:˻u"TJ߇K3y.GAgA'ş>3?;p}zR5?;ޗ2@49b| 6>_:PPBBOe\mXxIS˔)/QcF:n0ad;vB~ 8X-'2m)k @p_}Ð(~2]nYѴW%oL]E]z'^ϽVE3#WkaC)go71^?r_)~xy+?w:p3Hx_ro'vUȾGI}o?{/{{ǀ"@:Dɟ0aJ1f=˗ƌȰ!C?o9 d2~l~weg}Z$`d~wއ/Nȣn\3XSiɻܐ|P˔?׵lE*3oyw[?]1Oq+]}?> \^X.E~t乔wZSC|?\peOek3wW>ի;U [N,3f*gkfbS>+3dԗe„I2zK2tsÏʱ'B"#gsVp9W_ymHJ0UߧEZ/'~u%=6@%kݩJtYuc˔?w[xYҷk;g&Kkí>!~sp./pq:suX&ϥSv+JWR<ř} ehc@ S6@+wUB?YfEC=$<{[+rG<,`Fy%ƥ2w?(g\yrWSʦMJ)*: O(Jzn0$ K=8™T;]MKXhmWO0{e2m/W\꾖?%yl?< /_;<'J+C%}? lh{_?#;*fyޗyRey_a5@d|0@ݖ ~Pe.]*-{Oz->}ztу;MYN@<1]yr/~|!湫Deў:CLq/řW\G"UZ/9Rϳ׍q9ң=W Pgy!es4X?S1s畾^f3}wVZyKzr >T肜GRze+9y_s /@.'@l:= yhoo;vȖ-[]3@6mwĉ+3f˽1ΖﯔyQEXʞ 4K,I.-p? e~_Dl_Zyٿ48|/>7Hݾ~9_ޖs^w~/hһ<&zP\&>VCאx)J̓Kޗklaà JGof8}A ;!-OL[ML|\v_y5 D%)900yxgx~hᆉ(byQ뷗y{y{_"A!@4_J=,EyU~ҳ}iWR3Rшǀ  ^ ܕ6;m @_nN{L#QM/3Z$Gt^gO ʲe믏URx7?w*@.׉_|ywH_?t(Q8,^gk3EJ̓] Kޗ7Bęό8BÃ~騄[Zysrc+oZ&ץrK>Kd+ˏ.]\>Li7@h[?8L~_F_-7>!гe1qr΅_y !@@# 4#^^d&@5tB1@8$@S1 je}?ƹʨGOM!cgߞ&>3-ݚ K ՄhՌ^r~a7@1vqLN)lǭwʆmAu c1yt"5cear["o nL|2{`;rcCScȳˇK˹-_y !@@# 4# x  l(Nmw!Ri_7+L9P8]|Yl$2n)OL@Ne΢-2xlΜc@}Pdp] \4.+]dٮ['' "O8ˬ3/@$${xpSnZoz:}z E >nFFmy: Ǘg҃X3p(ǀxu%~# n|w @g%$q\prO$Kv3(ߴs|~L\MueKV nKzie"M8>lm;vʦ;响m߉ p/,/^:R^xwOs׆ؓceQԲ&vLy}Oʭ<-7xB9,B c~(w>ז§;@؁hG^_+^@4d0s=nsN' *rc۷= †Z2@h|Pt!2IV>&'e>\`֥a0v'_ň! ndSX.<:yKoUZeV"!)O;BeyߧJ"Gf}b(Dl3Est::FDD&w"E'E1do?>/1 }e7[k_nz`[|!IFh`~?}\`YXIrcY~^gX =@lO<jt_essG&1ݾϺoTcȾ$ϛ"2xϧ 8~p|+.oo#.<U|mܖy)tQc,Kt[m,[y*핼s%g{пyۨZ:eYC_pC!@\UyydY],i?.w/}~,G o `BWb/(:_WBŖmA'l])2`?[.o(?WS~"3W,>U1qY\glα}CzH)Sy˘#\OozH.1~2u;rON$@@sD.j>>%MV tEyl |M/}.|Poxr[@O vo?^.Р#6mt>Q}N-_ϟWz3yIO="@s&z>9B7]&5yvmMG*ƒǝycفzJۇ ~?kJJZ!~h4ϾؿH]ޖ]_ (*|ugBfs<{_ o;x ?R۾ ?a/OLoWg;$QP] ^ :A~Q0·c{%k$}^ri& ܯ~i'mܷXoFA=q{}A*y3=ZGO6o|m/>u9fo.'v9;eY~|!IFGf> 7RZ:e2W4\v\yn7y\ո-Rܴ%x%u;u딺rIJ!ܽSyܥyAC}?џ^sIp/sNe 9dF[}B|Z&TBemThyod36*= †Em+'?9NMCK{aT;ߐ,{FJַ:ħ0va^HG/r7ʱ,ύyUv 1O4:=:@ABya?5,5O JoşWvp֣Nh9˕v>}t6SRe{ zzOCz?sCs/zx53uK"Hvn#8@uoˮ#t[w^Xc64׈ -mmo߶G%>t=;sM>#?ಥ@2@41 >rij‰8]kKeT&x/Q#߾?<7ft3-= W5{:wk^}۩>g~yY>sJ֙ihO;K{>y s]&0,5ȴyy"8@uoˮ/t[V5X{2oc6xn[Wm_ܽ >cޓRqz[$? a:+/Nx-'@hx/_lckoUUe 1 wgG"?>*)W^-G* 1O4:==@4`cꗦ?+DcO7| "  ɏyXj6it慣b{˾']qа)۞_y !@zz{yZP4 4'6 &>qqn jQBni}bWd{dmσ/<  v=iKT ^#ν>^Qu ?@{AxfB1@hrlnW-Ap!@@# 4#|>- Gâ{aMl jkOŇPea>:ėW9^-O W0<H~HUŒ.GwCa_Qz  vb1oK3dSRB8%KO 1|gXoN9|h{@b} ϑc@0O t O}e/y~ 9?2b|cÂ/< t$@@ϡǼ*Ƿ-刉qTR'@ ʱ3_[^z_R>=$@@Co :zanO9rhh{@<2}}&@+|\K-G;/^/ǜ}}5rW\!pw̅_@^?S)!QbhtM5BC:V5en4gʾG_ rȉD,oسaY{}rI _D Ǖȱ\MurYyUrɗA'!z|?afQ-З^st'@}SM񐎕N_ƻ F4!gȾG] 7r/Y:qXaٮQ;@np#D&@kkC[Q qf@Mrȑg#NR=29g}:_>嘖R>;5;&B̓.@cJsK<5yiڛo#{|z4_G=ˢ񖎻>8,<>u!R_=0a.+g]Mr 8𧿗y~a^Tύy]bhtM5BC'͕xox6O>}eOT?>r xY4qQg9gPPCBچ8@\T`ǀ8JTy5q?3/OLb9Ww|nLXONL_θ~<·'O/Y:rAvZcx7@婡#Q ȤWf˯%Y gHpl\|PC}@-E|x?Ma +O/_#OI:Zw7f{U Nկ_\%tET;7;RrJ,1qz8B~Y/xj4;3?hw+FBXC}@ 8@ J|X ˧ot{=#ߧm(<]g8J-7kWA'^._;W>7|v}.p!BЃP1 v?Tی~t/ڿ?P;$<4. =NWiaCXC}@Č$@8 P6<"T6Suw|cxt{dȲ52@|ޟ.5/YqȨn=Xk9j9+_.X8\$'̖/-c^m腘'@}S]8FM#'_rO)FcOT?<ꗲq|LѸS|m8Z;D#^ZV |HxD'@+w=>wːe"k*K-~F^2Ĭ/Nf=Xk>*9r ɏrs̯e$@ 0[ඔC_"@ ꛪĄ9rwɗj3-7sG>ƌtuWex<Ͽ.sۀUģ3˗8!hiۋ!'@{BĽ %NH-BF5Z[6@\x[ʡPtltxi[oQ*4: /$@ O~1[bQ,|U<֙gt^:[Wq5W?wGG_${K| 9rL)9@@}S]Biaheσϖq_G,o렓 J ty- laD!>$*zz1qWyWc׼0~xE!D4W?R>?n|o/<  jFLzCNo8~,{||? :񖎻<ฬ BPPk ܕxU]Qx<ܕ޲ ~?T9~Xnjx=)_0G8bhtM5BC%y/<&ϏQ$d/,o{ePPQQW0<@{B Q]'ɾ?D~tGRv?,WYW=*g:|/<  jxhwJ9{,hLGqtܵϯv>eį/" ef@Mvd/GRwY.f/cg,:-B̓&@wf\wxʗ.4#c=;_.o'\jC}@īeďK>ǀ 輪˾?踋V:E{W\,W=&9 吟|!IFPT t<4r#SS6Y4>'w8S8<_m4q~?<8.Ն#.KGo%]똗cҴe7KaS z~w:u_.G 1O4:qzws[)~&Gt۽ȃ^'#O8%okԔqXh|+ t8Sz]BOƵT83dޢS'r9$@@Co ?=֢ %)/(sz7%l-K2i{@a6& \&#Hpmqu ^PUЏj|Xj߸l*n++ɬ91vpN,&ӗmW>.lcBo g,Z.cߓK>iOii= {mc~ e 'D`}{6bCRZd6vVħ+EW \M5eBItC{Z7%>}%Q (@ = Z.l;dtV@}SM8}dɆvXR~]=8c@4 _"vMeX@@}SUChoK$岍r\տ- 8_DC[= .hu5eU[Z| !@ D/x8 ;+_? 5|3geMmS&Y9W/x=Ė6bvymiK .s rN{{\#S-Dx{|O֣Sk =ΕeĉgȊm222ݭK׶'@ D 6l = ݑ_ =i t3YnLAƽVY#c Wns/"B̓!@dkO8vjy|r3GZ&s~m{ xxy9;guլ]8/^W|S/8\5R;G=gNln*Z6@ 9Wzlt C^{umxT~['''WoQ~,f,`9 1O4:nybMq $@:s ˥G2;0Y6'|]}80w*bDXgA0/.Y'g 1O4:Qn( L| ;4k~< h9ž:/LzY^5rK,R؎ǵmtK[1 W0Q?;S>Z]ywZ9_y !@7p#( ~l\TNHWܯ4%64 , {. ^M 6)7'riEB:h !@dZ /NJ~= 7`Cw=w:xMԀYہG_zqW~Z?+^k6\7W0xC{/9 />@d|y! T:嶁{]יppQtvqɧ8sek#G+79]|!IFP4}N^X ~l87#g 4oyu;d;[d҂! 1O4::n{{6@ʆHI ?=EmhW $@@CoeRIlSgQu >#D!@\Z)!)Lˆ=֗Z9|K"+7+vk+k+ͩq@}SM8>vye\]?~t(>D"qp O|27}Lr#rm5+W/[嗗YNElo77|ctն6@}SMwY]")ךN:яO,g͆tկe1 0T8<ֵɂ;RmmߙP腘'@}SMf<]>))כNюqYlYt=wjɦM:m ݶ<'@ / 6@ʆBsQ*@cCdɼ`HHAo V3Zg\z ~P~MC 1Y7#lxP_42N3+T6R<&|W @ @}SMmC;Xj^zn/Q 6?X\m+T<&3U/PT 26Ke:DUb3ȸlUh.J sMn.2Vj@ @}SMN3i\ >ӟ = e+#'=.fceb; EbCmmm}H]N R jBA/qTQY<D!n]&g6@ʆBsA Qڵk'zPP6'@\3|aB2Oh.P4bذa<һwoyGdPPPS{@T =!&@X YMUVIpM7ɀ䭷ފDhPi ~pn`aRI F CMŇ˫ݟ>goNBÃc@ 6 F j!@ܑ < `fcٕ{B@sQij  !@>Dnp 0+4Fe#9BsQmP YM@i?@X5@o  QpVl @@}C5 Q*z EGǀBo>#/@ؕ{B@sA :]= =! @@}C^By{@ʆBsA jqQIJȇP }@$BĨrdaW E5F@@}C~Я`T =! @@}C?9":e%".,h @@}C&BKƞfeV; EB%@d!@7 B}@ @L, ʴl*4O( !@dNli'4@o>e&{ wv @m @7lP+̃r BeCO$@@ȇP }@I+r* !@tOh.P :y P\1 RMP }@- 2zr0@2*z EB%@d!@7lP6@ؕ{B@sA Qc@! =!( vܙ,c@ gJ44@o>@Z:@UYʆsv @m @7lPr_aW 6 DtnS&@6DKd\6*4+ !@dNw(@h|pD\6+\T 4jμ*z 6 D2 7@ؕ{B@sё  DtQ*@{B@sA Qwj(Fn|pDl)4@o>fD!{@ 8XP }@M'BĨIrTaW 6 Dc@FO~P c@t4@ʆBsA j 2+T6 @m @7lP 6>®J!Y c@l7>'47B  Dǀ()QXlm =梒a @}C= J-{Y447B  f>&eU®Lˆ=BsQm  Dt&@$"7@`Q02.yJD(B  Dtqs 7>544!i "Բn|pDT63+L\ jij1@JEG;ƇqW0Ee#9BsA :]6@6@! =!4@  Dt= FbyPn|o(qX\ j!@dZ6@ܜ|C&m =\ D9ꏥ_sk6]'4@oyǀpD1BM' =! @@}C;D6@ʆBsQIP !@7lPGOca$^ BeCO'~%JCo>b : n|l\j.aW ͅ> P JTxiR 46a\y 1 J[FOcƇF BeCO'~5JHCo> {ir >6ʍӌ 3+T6 } :!@dZUp =!'~as%@!@7'qI`1 .F|^Ba  DtqKS<(7>".ih.O<jE{@ + BeCO'~B4jq)aqXve\4 !@dN wu ?@{B@sOJ/ !@tx) 14@ʆBsO|@!@7lPǧaljVh'> ꛦ> Vn|dqXveQHΫ\\˹  DtU_pヺ\Oh.O<: eD BeCO'>_<j1S$@=4>L0.2m6ʬv } :ij= LNm+Ӳaϫ\a4:]Q86 n|Oh._:4:]:@->:K̓r8 \y "Բo/*z ͅ> #{m!=@<(7>® }sJSm¤刈kY7%4IIȸlUh._.@\ i-"tA(o3lFqv } :%@dZ6@<| =BSm}wm!=@|xiJ_BN4 ,\=DDt1& \O<DDDc@w 1+T6 } :%@dZ6@4:_0l|p =BE/#@!@ """ַlPn|p]'4'@t"""b}K1 Ζ^78\BS1ڽW^vZpj|d}{^/=f5=+>u :r ǀ \yj l(8Q{Y?t4 ] ,<.NJXlPy"T6 } :Oe3xuzjŨfJH@DDĎHlz@J.'@tZ kkϽz`YPㆷAfctrXRLyؿ,X#- {5ufagםxCDDƐc@9f8 BcT6*4'@tZxnʞv Az<@N Ly3/7/ Jz<6_;n~n[w|$TؽQӈP6}. 56 l|kLYBS\gg_ojYg<{^0k[*@t;'{|M"""6lPpヺ\vX\yj 2bzv]uwi(| L9Mog>fCE ""bcI1 LKm+BS;`R1 =YWzYBA&@P}c͛o/Oͳz|zl G^DtqsJ7>yqوϫ\yj b0]ށ6,D./y= g-G{LUw:|ss 6#I_ǚs DDD{ >U44'@t]k&V4IL #"ԲS$@%c\y'@828MfH"""& }@- nJb2Oh.O< F4h|(|zJ@DDDDt1@ / y } :O؜ "'@0zr%{fV; ͅ> X6{5 " 5 d7`'> [De~$@2#3}Xve\y-"t:  # } :%@dNW04Zn1"qSn =BC@DDDo > IG;wp!>4g*z ͅ> "אgáe:e^{5i{{7y5Qg׹ tSh~]Xg%?*a퀈LDeuIx8<8 ve\yj 5:kH{i5 FwlZj=-CvԞMf{KNf(@|s vB-~Ovevhh4f@VdEuKͳ ӹz}F4Ϛ]ƽ}dɻQ2~FIDAT_K]sC*%Z6~6ZUj[۶ͻtz;1\uTx\(y R.}=^]f"bI~[<8Tc=@5@ؕ{B@sO|@mH;vwKeD FJ7oX?we `:\(Y.2q#U]ϝ.5/cq-w9)3<;-tl54Fy`~<~9Fr+yyK.#"6ʑ$@s 5% ﵵ`3D NCsO|@Yxzg@F ޼7+tZ?]67L90U\e P܈`">J5q Ftx=qV۰mv^EݯJv5煷cT:U=үs."bcIlrĤTi'@ʆBsO|@` +tr{x^aPF/"7Zo4ȳXZ+qa܆.5>ԲzFy˔Ͼ33S m_zdY8+eZ6̹в1wcEJn=R?,SY_9P1""6lPmpC&@A۷ } :OD|ATj^ۈqEF(RGDl` >npH}CĻix 0U  8'> YĥW }X%@> 6B8 n"T6 } :1uJ:@Xy$@dZ6@\5* ۶" \y>@ """bWJ>=> Oh.O<DDDQ6>X`L F nAD!8y-"G #!1q y-""F!l =B b [D9B3ƇD =!'~w}u… eү_?뮻"̻Sv>OR-JX rQ.@Y "9 Oh.ߝ"4x֥KF%KD/7"f>ORqF}m\R֬Y=7l=2X aĚprD @۶$@ʆBsO @P|w}l޼ 4aC7Dccj'k}=_Jjժ\W^]PÃWyoԺX }@- F&tĀD BeCO'~w+Vd="lduЭ_-u>tFWʕ <=_Uv=uE$@djsĨ8@,0ZύF|^B=%@pI'ErV jнvͤƅ}GZ.0x/_]lyLބT%@dNoTD\6͊>{B _ݻQ֮$tj*wtF7ɬs : vm99h 2dH!iPP5@<10 veZ6y }= 8 dĈk(o̝VSpBtCmtg~C^{mflok"""bKbBwe9 }c@|2~IJeˣxc̜9}رc_~|躍͒W^yU{B_|L@DDDlL >W0JFMJ zfcEe D; ͅ>{BS!^Q5k̘zS{D1cF9s6Ly9*Fg/m@P+  6< 2>e|\vXQpnNCsO T!]U -^{р2·N4MƏ,sxSB#N [DWC1 4@hla$@e6]'4IuB?a7n;Qƌ /4^F'sT%@ """6lbd9g|BeCO'~w,.S7k֬u>ÈA|I5jTQR CDGGAzxq$@ʆBsO :XCnC_屆VX }@2(56^G8® }wghT-1 J#&Ad׃6@p bz穿gQDeĵ/Mc̃^h\k_0BeCO'~wDLN%-deģ&ɱ^=!z`3 =Bzm!=@lx~ҔBǀQ)5a6]'4'@ """""Vn7%FB{=ũs(@ ͅ> ۘ"tlyt|  3!ƧN3+.ih.O@DDDDDF ~P+GM pRzldho.;lPSh.O@DDDDDFn/( FN#̓~ ,uo'® } +QDeDS?^^%j8 \X Bߔ()ry/t O&*z ͅ> ۨjqry/q^ BeCO'>r=@ݑ 1 lxaW ͅ> ۨ"Mbd94 n|Oh.O@DDD+{/u{v mlìn//]tk7% O"*&ih.O@DDDzz-#ֆ=t m7WajsFʄd u5]tv m?kC@PQN=bR&@:sv } /\V\}`9Cnvsef>ps 84mvu~Fn/ݯ`$+BDDDĮWw׿ͮn>6̷m_3eCP) Bߔ( FMIy } ^cۥ6 [6$@Dbkx Է*z ͅ> ]<5мfQ;9@}@- c@Y44'@ """vvn:6@ jgPPF=;eÞW'>~ZfM:իWoz͙?H鵷~Mn,w gWKp9uV ; f?u-Op[d/'ej?^ > V?@eѬŇl`(FY@=vkx&{s䜽# 4HHpS= Nߵ6sNp|d *z ͅ> ]<^!7K]>Fٻ20(g3Vˌ^gL/MV BT}{8pZvox~h=rϸE2X3z~PmNPSh.O@DDDzyժU$4dM6z> h{(3v:*y}R*7N|^=io^3߫𳉗9콝˪"g|' 0[Fq`, E‹W2+qnxJf;<=e4@ܹ3YX Dٯ`3aW ͅ> ]3=F7N٣HNKQKS0Mt;!׌mqCCrr9f?Ďx}"M ?@VI \~{*f捑>.}^tm8{1^>L'ۢ ̋~vwJaE @|8 T:9%~HlD(@{D+~ =BDDDĮ,XM$}v%<]Od?x˻JϝۆXKmwWmX]7Lš8=$D<|D+u*a1l#ǀ'>͛eqTpfKvz3\=*?ݥW˨ݣnJDnc%Wk_ϧEz}z*=F7~DeD+y } ^;x7ozV Bhv"@cXG6s}S" @d;f`yV7@ʆBsO|"""b׫ConJ0lېQj!z~P{ ?@e'*z {s碧njDhnېQjo#T c@ ve\ GnܸQ̙]* lðnƴ`s}S """bxˢEd2k,LEOh V yalذ1ͮn>B!@)Q1 & \ [nENYdIjEOh V >J&Lfv):rAձR== BeCO @ """v7|sWjUcu{v mlìng¯_3]t  sD!qbx6@$@ʆBsA@DDDDDN t,FF n/pj+\ SCt,FzoJ4@{B@sA@DDDDDN oߞ WD=7%! 8TJ^x u<!=@}@ p J =+V @ """""0 T UnWW/e!8b瞋^tСC 6@ >< o|u BߔPr p'{Ɍ3JEa׫X+Y6?zN vu-jYmee{hٟRC?Oݟٔz͸OWyQCnCY?{칆~njs56@u͛'}Q7%+O, d|۬j'n*6lUVE_^8&LH`?V{a} ]}`/ϳ9yw@5vp9?k`t-Q7:p_7y7oЇRnܸ1jvYn;еlQk}moju1Zj%ZhcgԾV;} mR~fGo_O:=zL>]~mYp\2>uZ75T rGN=bR  d7`'vV^--sʠAtCKiߨU^^g 8d|ЇZꃑ{qA؟? P+s+'}34QCR>l hY]v6#{EnT mΝ}κ*/}Ҿ:U>WϭR{qE}wdz}]9P>NpB9 4/Pve\_1 Atk׮KFnĈ hĉ쇒J-uoyot\]7`kryJCF:cއ#6CAl.gd9`j}nM=}nt_륔54 *a6Ͻ zmnc#Bnoc6u6w뮫9SPb ]n?иeyoԮM4ty7Rv"5ɿ]v9ٟ\j\S~?C"? JЕBa>^&vmlCϨt }ݨ.۟?';ή>rZiegҾgvT3- *Q%70^}t|?גZC}@FDl)4 \?Y&:Hֺz+Z/X^Z0r-7mmbW?l9CXNC:Sm+3ŮXUOy~w)?J?~|aAN]pɒ%5,xKo~$5PP6@X9(ŠX|֭J`4Bhxx' /.DDDDDD0iҤB|(8:ұ)AY?&tPPa#Āb ~f@ >ȸlUh^ AC7~g>1sK:r_ 6,_DDDDDDlhGB:.҃NqtLc+D >5 q @@1@h;JZt7"#b֬YыK[?DDDDDF֎t,c":fұ:ұz>5 м:"F -yz|2W|My7BXHD:61t̤c'7>=CO ~P   6i =&/B.C%=ղ/25 DDDDDfP@:1tc%3IPPPPP+O ooVfFr^ƾ l_+S鿐cj*Yre3˖-CDDDDDlh1tlc$+IN:_pZkBAZC}@ F Pܽ!EOZ֯_QHH:V1CW 5t: T+Dl)@T}hn@DDDDDlFmpA vP>$@ʆ/[Н j!@ܙ z O&r  K]BN ! =!~j .uD(@ʆ@ j:@#D0@ P?B W0r]'P>qg*@$Mm^2@{B@ :љ[w F*z C((Tkq , N*⌂vPPPP+loPPP  yPPPi?@DV BeCO~j 5 PJ1 PPPPk =!~j N$>d!^ P?BN$@hYN@ j 6>BK{vPPPPaW C((Tkg< _E2_b*@ج C((Tkt E"H}#'@DeY!5T?@|PPSBAZC}@ u@ C((TkD`pm.A((TktB!l =!5Ԋġ--n[ Hu~ BeCO~j +Ge#>@ :]'F⽶6cGq @#P>Z[e;"IDl)P>j;CƇ!qJP?BZ6@\6|]'P>a,=ePPPS nH+kzjDl)P>F1 F 2T6PPPPp<7ﶵ֔o8O A((TktqrH FO| P?BNĝN0j?nX&Z[ >PSBAZC}@Ƈt6INFy9@C  _B|HFLp҆m+!5t: _pR";Z BNgD! ҡD'c@gVh~j c@1 ? hdNկ`$+F~j +}?I9pn xa"ﵵS28]sN!5t_M`'a--~[[15>k(qFr oZ4P>ױcWIJ?4@\3|"E9zٙ1 P?B36 ?:Wz];r"ɋÌÍӧ2OBAZC}@m! 5EjimmQtOBAZC}@5@<_D8$@>z"ddkk +P?B$@n\)r l|н!zPSBAZC}@uk!@;fZ!@ǀЃPaW C((Tkg"$R7Z/lu+z `x\vǀhBAZC}@?b64>|ŇT _0lxj|& r  5T OD"7ڐ׎N= ON A((Tk= Z_ >'--'5>hxl|dBNW0/= uIrxKKtIN A((Tk+%a--^[[!< 0wDl)3_y%H޽妛nW_}5|np#Dp^9|"ܙo'"T6PPXj/M&ׯ.j+wA(  dQ ߩqوϫP?vZ뮻 /'|\N NnI(+MC l PP\RF-k֬ ηNaY"@h|P5>"T6PPPP5@<6k|ퟟDusq@Db? ¨D{ } 4P>~. W.:?~aD?'@K]YT6*P>ӟ;._6Ȁ[{@O6 C((Tk |B(>$"T6PPPP5@<:sK|Fs~~W0hDl)P>~ˣW˗X4@\6,7@ؕ{B@ :׷5@ܾ&:U@DDDDDDDւPi Ypj*btZ"T BeCOC{ :ry[W­N|x~ = =DDDDDDDւPPmWf| ~Pa+=DDDDDDDւP:&QxrߕoZ6y5`gZ B}@5@< +nY/JNQ#""""""b2dH (@Y>呅1lRNuÆ 2p@ݻwp>"""""""vދ/XxO]kAI-+ 3]!Oܜ|aW ;C=Ňn) """""""v^ \rE* c]~̞=[^}|DDDDDDD@c@}Y >{>u|Ju3 =!Buƍ{!""""""b0aB B|kA y8>$q ?"""""""D-L34L34L34L38ӟ:rx Q4L34L34L34L7t 6+".'difififivB"""""""bDDDDDDDrr7DDDDDDDo8 c@DDDDDDX>@؃PK?#5_0: f2U׽L=/4{qT"@د`T HpL), f&DbUрXoB|Ƈ(@brދ0fgğ%)I֕^~u_)."""""""w˳>(LZAP>@81!'ҙ/ˆ,3S< κ5`XQ,_'Ox0 %Q]H"As 6"DNJ8O ns{G1 2XW0t^~.ׯWT N"""""""v.qBz,/obDzW0첋gD,[uvQ+^5I8H+A%#|5x⺣W3=<"} 7O"""""""v F^,A#˼]dQA8G qbp'|JvQ+7zB |W0;^|xH@DDDDDDJL$>ċ); 4>3(B?szuOr9vECq<9Tby^v2[t^\sA>ewwJm3Tuywԋ:*Wi[߱dv zaM.RNznݺٯS_UzrVzf/Q_ӻӪBGVpƝ6{e8114/K;BǪŽ vTvt뜣Ե]HҎPW;RW[+i>-De!]P/O;tY|eY?L.Χ+uI RNAg],mKtxg|tgm]hs|62YZu9w:ukgN`ǧT  \D~zX?|W߳enk.}RQO^or<1zyfѩކ^7<'mS;g@5?#g.0?gs\:;ٿ3ί~>'ڙm؛Vy \y:sóuch~gt/!5y! y<نe58k|}]os[Szc,WA2n u[73>2ao]6@+FM}<_0Ai/G.'>d|Pmk;v}{w'޵m+Pw:ޱ%vmn)W7ߌ_7M X!/'ruk?z͎ȫwȕWm/xe+GKoMy-q.KoY௭6E.,lHOD颭Z-EK˯ߘo?nݲBK{geY~;.-_{]/Ru/C.*b]Bߏ^Pye|U=Ϝ_3.z0{<<3j.?Ŝ|37vfICL9x`EOq}9G1aMa`UƑ? +er=GWvؽ{>זrg[;"w=SޖvHޚwԧvVqcoco>*xie~<[nm=2?=^"3Oivb~ޮKSջuP===k2ɴ 'coo?3[7H#;"v+o/߷%Kn6n/޳qcѻBnYf~oCoGYwݛ"eǯԯjb^p|-R>5E&ݮ͑U8vWh~f&~E?پEKgwX?=֥󌯓^[յؿ몎y޴"RZ%{bwjk{[Zdb! (@$eb7%! >InPI|P$uՎL||e6@zib^CaiR n|P0 6B$1KB>H?8Tc~\}|\Ou|׏҆BV/:ƒ ` E(:`=G]PPhp=K}'63NCi~8j./D$> swC^f ~xPmx8~VcC 6>$†Pp(cA}9 P2N^&"/Bnkj|pvFA=BO56$6h<]nCC) !xbm $>PNpp- A W7"ҹ\ŇBHC;sDqhȳD|( j5A  *1ҮG yBÞOźb; "!Ė 넅J8@bD(8ɰoS lnajDd60 7/ݭzIx0~<&k*:$!hFnxH̩j;!jr8RLJbxP̄t|HO3nxHLJBxP!|+ 5Bӟȗ#&4i\k'N1e aCb&@l+[+ae(>QpQ ! 4>XCjÃkQt`l|!e]!G~‚ઁ!.-ld(W bamC!8:ѡj(4Vr!QtpMD(BBRJ\mxPOc9+6{} 6~xpDUP|W.7J956 lH^RbG{ލt.O!u4<"U/wpP\(n!~ C'@8vB6/>4:1NN|D Qݣa(@]c`oJ~0~ F?4i7"U[{GSm I|TpB5kO uC)K =!P1B|9 -bĂH{9tv`ÃՊ8en_H'%PQxr̆@@SzАg}^-|(>~&保y"yrYQ8%:Ơevysk[fo2rGlY3c_O|m[[W=+glM;=+[pZ[NݔvʦvNvb\'.o-8q҆6M; NBdXCn(Z>JcuslY1_JίwuugQ#WU戕m%rEarG{3reU, Vy|c|Ǵ9u\^ps޽:ǁ*QA_}uI<2rqguQraiN,\Q֧p q-R*uGw;ʸ=;v[6xvgў~ogg3?_ƧwCf;uSw8yJof7:]G):@53@zck֑5ѹ~Ez#<^mv[ɠ)DVJܒ̴BK.=M3v?"`SNgϞt҅@ `ՙ26m3<pP&i!CkYk1`i'a1lذI&HDDDDDDs6g_c8m> 1Xk߿?ǏO5HI!C&yDDDDDDDڧ0 SPP`ęzO#"""""">@ @(j'Fj)ۻ`DDDDDDD #_Oq2"""""""Xpv/cFDDDDDD6?OɊs_U󋈈 M=O .Ƙ~ӦM(RӋ GYgɓۼٳ'.16qB`P-.""""""*CAAxcnZl.xoC=an-8qC4ꟁύsoEÀ<e8_|""""""@ 6n_ z墋*ףxqW/v:jK8l;UU=tLJY<>]b_vdIjjzPSӣ~`1~+B(Rk 7 ?3\tQZ(,4<@ ,]PSc6Am0DɓC"URXɓ˙=;C$bZp޽aDDDDDDD:Y`ϋ/9{ytfg0t?վݳn=ƺu])+e9Jd6kٴ#uag;Z1r tnD?N ϒxܡOxw j~,Z:ſVcnC zI@ `80bqo_{aMYN x*2NA$~ݚ5n~,/b{xt\&LYvܩ߳h a֬jqQVey@$b=^xBZ]DDDDDDTW} aðax Z]DDDDDDT?t``m~_8nL""""""@=XnG6kޱZ92@$lV.""""""*4>Ο >>@>Ͻ9zQz" XH$4xP(tҰa(,,$4QYYʕ+q]%`*~AODY>xW^y;l0F cڬfI$IK/q7^܄?@DϺu6cb1BUL\L+czE>g^{盂0@b<4T͛7s9Sˀ&9nN>}0`@Cso&!L2|{מWWWw"G/;z7G#k-ݺuO>TTT<\"mj7h:c: O}y=\_C[=lذ/"PpAAz+= `2c9ta`ޕW^y<@2:"m@ @׮]mVO<D)}bmfr)q2Ͷ֞={&QP'HZk?mw(rh}'褡He^&y%"yX,fEDChxRj4Oש D_V>yPpRLG5=<n8Ti~xL+rg轇OHGtTf6jϽUt@]v Li޹s'*Hgc}VO4gϞ6 };7[nV:@ 6MhޱclVTh>oQQwƷ}ٳuTӊt@s])S  I&L&="gر曦c(͑bZ B,XccDzi&ŰHOHl^$9Z}L&Qp  Ud2x,Q 6u?"h 8MfеkW:'hY`P&fyzWU"ZW:S[a t"/2ySD"\}j]q/~A<ϛd瑩Nt@ 1 hx[{'v]|`IgiaxKu^7|σ:Ub2hi1+b¼yA$ 2D&_,,4-03g[^ׅt:?x `$û.U^lnj b ={Œ3HR]t,/r2 6xyZZkûᄃ3Yxャ 0n^ +3H5V#|i:5oV1,zlƌ !УGUVẮ"p? c . hHKgL uaĈ˖ĥ3pap٭”)!RɤbX:@ /m0h{Feƍj]Vxwt¹))N6UGC: _J_8S,Yxw\<1l- k Gd_rc@{VTUwEJfH,[Xz\pA%Kfպ"P ~4ǽdI`}4Ř10[eJ1"_ׅH?h4wpIMKk.?q-x%ni̜ᓟ#lN:)Ȏ;(++ӧO:@j<.uc+d ~Z_bܸJn! 4q.s]3Ӽˍ7p饕lْ~Zfc);^Hd@:8 %%l۶M+A a~@nZˋ׿ywe+ٽ-/̙Kx3f$4<@.q*5ʟok-ȶZ%SǍছj0**,cTOWQPWK*eӟsN>Vii_U7'y sE 1lӟ&3|H/aѢwWM8l8J~ZR?Jca w[c Y ˦M(oFO :4wlÔyft3ڵ^gryy^Jozuc^w$q]~7mŸn%}L.YJK-_Ry.$L&<<W/b&UWU7o4jӟR}Y=_Vfٸ1{=w7 2,Xңߏ2K]evG?lLF,^>P}Ǧq>xp~Yjj$ zk ׵$SO-g̘ F p,]aejY,v\n^mȦ]Ԙsc E 8iT6wR.0+qƍ"4\}5<;cxc8`زŏ[4_b q.ׯL&szjc^CDI&72D1_~y\ q! C]{g*"l|ÀYM;o?N8O?> ŠA)/,ݺ9NMMvMO~dڴB>ju+c*l,ɤeh>vGѣ<͛9 G\x8P[7cg.2pܺ:ZpPu1uE#5*~ʰuu'+ Gδx1Z㯲jJy衇(//3Ϥ/Ny!jjl%4~8Džh@Q?5DXR)dPP꫙vظ#{n+Wf M.u>j<5P/?;HRY韙\&'?YհZyA˫xulc]{j*{,׿^w֯ڲ~z4*Hg5sq[|˖nlZ}k)) {X$;wzř1>XWTqM5lؐ%;2G?JOW$))3Ϥ򗫹ja%bǁ\}u5_ju~M=ZzvݰifRZW:gM[0r^4y^*Ymwyyږ97/DпRvޭ֕jv&۷{&W0rdmۊY .seUb JJ<~$W\Q/YKm'Cu'?;TT;cر _泟{kqƅ|K_'S xsuc3̙3WXRѠLbkҳ' oaJ>Sw_6[l ߟrK kٳ)c׿2[/YP}ٱ?xLSt1`׮ݔ("K= s# <|UbJN?uo!Zn㷿M0th#*x1Z ?ǩ\}u50fܸ6x,[Z8w{RDcuajT2{v˳\} ZMaΝ[Coܬ`֭]Xjk-ݶͣ{wd0|xo;6ĺt-?x^ӽ?a|OC**2J6 '?VGC:7nn+/ ?fM]ĉA<3ȠAfУd C33L LچB<@߾͏B?-](ŬtVp2;˳feX&O|Z^.)?/[>{3pXr nQHDz`ٲt,f81w+ےX [ee„ G8os&9 /Y{ߋ1thsvn<|!{0O߾'׿T96T -IBPYi)-pC5-[<z(΅\wǵ0`@ #QSӦ `'*&L6tio~S7Q]筵'iV٬>-ش3Æ]S躖=Fp5̜Y}p}ưB!>'L?`0ɪUY M(?b6UxKNgO=5Cq/=w7uWuu4)W^y`0H:V KGl}޽~^l޼^yqࡇ ǃ#l8 pxy99x^6ƿ'?oW:z6-ӃTVZB!?@<>_I~.u g1v]'Lĸ$ӧ uVNp8_R5&r/bzׅ g|,? W\iVӡO .NSD>;7宻bMX'yjZΟgAC]%(NѨ Y,柉00~Sʸ0GDjxٱc>ɬȐSUQQQnq=?^Y4D?#?+*0ghw".&P\\DYY`X:0wȷbv0uZjj+(0xNy~wry_?nL1zQM$syS0\sM5>SbŊEZ}zfȯt1X~n\$whn*06iĆzj-=H%%鴵iqhr3'é6;yOt,%qU \==ũ19!?F+(v7\=3C0-ǁ<&QPegjk/䕇󟵶tؔNΝݻf[t`b  ;tP֬~u^>8`>oDThl)/|Udb{wCO)tRk*b[Hp*سL܎bի_jOWMxW_kV:wxj;` yAsr5ȁ?;[2 @_ ڠ-] iZ}$$-_΃ 8C\;U_;svȑu#@ &Mزe˵T`һwo.R*++h^x?>V ?ѱX׿NEE}0k-3s_.Óc{A,; t'?5Y"w Ϗ5jRLͿRb1LQlC<7푗=ϣw޹a>'{,FE6="3i[u7nsơNyeY {?99rٓH$.=u9?`E>ADq`0hv?gq : ]ֱ ֎ n#!yXPPTTd3Ӵ3$P(D h7˜\P bEEEGEAA8S hЮg1M+h@4mע4"X4 bW?},{bD Z @0ؾ6):aȱz\g-iAƏo{=V87ofӦM[ ҁHǛ`0#muZ֮]˞={jTMt҅'x͏EEE >M6ip 5p8gD"_N:ږ >}:555;9b]EQs${宻Ji;ѭ[7y#r7tO=TZﴨrҵkW?v҅󎓪:;ew RDA5DMBLb/_5EX7_[ޑ^ܥ۲m-YvaEwfvfwf{s|sөS'mۦnBDsK4Q *bmlWz{"Tx<pƝisR(mw(.m:+iZRe0m;K*Nd<-].'n[Rڢ禀7o>i%M9r$͛7W1!jqi (!v'ՠGn)jy kԩ i|e~iFM)6ATYVnwm7ݻO>Y$(*nݺѢE ժ^XRV#?xq^8vW_m۶JSzsZmo|ZRA/۶O?T'0M-8kl:Sn43)0`~' g!QJj? .$+.f 2Dƽ$6bHz;9n9sL h׮j]TE}:#GzOے#sp7h4 O!gx΍i&ݚ&trŋjQ %_>,xF!C/GV13Ѳx3e߾H@$s:yy\}jͿ"ٺbOIL6+.U"Y g2<Ç{D("$7WU+QZZt  `<n^{/7IZ˂Jc޼躮2#RºuOW0(2DgΜ\JCVG&B )kWf T E;efGB,Kr n*aݪU)T>^mI^. Th*`"3% {YvZh ,ؼ9u\:K#=k%)RŒ4<k.5P@Hz+VXB$K)hTr9ʆ Ea.W+S'gM_N;bI*,m\ж-L0ǣT嫒IQQ/s1M2`w^%+6 a' -Zhi&MR"уDG mLSsFF̚5Kٶ"}!`פIԛ5hͪUԞT)%%]l +VV-J,Ϙa yMjjb*P4vƢEoB@˖ZĉqjQ. ]D"7oVOWؾ !0MF-E|B 1A`.W:! TR$D^`" ZpeBɉ wvKɟc0h ӴXz]E*(??5v0M*[R*U(  `57pg'7ifa)3C'Gд԰=tB۶mSOWꬰmX.wm27`n:ԅ kضMgȶfT(HPk- ֯R"иr`)@h#={lJKe5xD ֮]l[k]ceA^%/K=W#3 wbj]T B?& 7W㬳`B )h̶mO)]; 4LTKјYRA8l٢"FJ@o87a˖zTe?^ 5 :tL4IP@ ضaT,K reh(6]fXa$99M@AA&B[B_0C=lڴ߯>a#${3ia۶m~yP@uX!paM$N0`o! @CјYi۰}- Uul;HضO d(..V Er5y!6{ER)AW۷u 4\N}n~AJ9`0kܘfR$lj8m޼P(=Eml~Y}ťU~9ꛣ[ַ_R)HK%KJ}nOv:dÇ:şBp:d|Sݶa7 SB )ȸ͛-Nh .)fР2KxUg.^HKsc'zL8tݙ{O1~ö%M8T^^ 47mNig2mZ0n\ eb-&Miie9u<)wHivE]vx-f2.}3 nQ5h6wVku/ !ur6m*(HeM⢖-3x߿JѣC9xX!A۱c1sرslb.޽oPB :0`߾YYhQ ?e?mp{o={r:d!7 лw)7\Ά ^sO^ VΜ9d]eܸ);!!^ ӧ@C虴}M$"8nG; $-MW"$zf2{yFҥ,ZÅsO^,[fr S/1M>n6wS\m,X`0lX9zUiU/U䴃]޽Xp>G.E ŋVX;ޒ%9,Z9̚e0qbӔj}KrM^Q,2>$\}BJ0w &F(kYY睧QTKR|'Tv"c7'_`1 :7.H 6K-[ m./wti^Wxq6قQld1~6OR/ϡW/]T,^O=`Ȑ,^yظ1PHbbEסW/}4G @T@߲`&[ >͎n3P*73J̝kC~vt{BJg6bEnW}AJXࡇZni}6XLn!nOSxGUKS t-fG2>#r:pݶ `~Y\r.58`p\RʡC66z0|Ks6+gl Cr5~eb;w~YAv͛i׮jeX4vk1ņs-)em?wZihA2B^^'F2f|;+X84A߾XwQ|q͛#0S_Uv+%/vQ^^Nnnja %c >=-ƿ#0yoӉDN>4g9s"\y!~&n7|A[fE~.gg!xt>LvciN0z/A .M$gϞ=wy)I\‰YO&cƌ{u I~ڏ/>ݬį_or'Hw pe,[YgiYe7/>p|zk-[K `3vlMHy}Z톋.?epib;<[u{QMFPR"),yt '^_q=ff?gvÇfұc -[:]ԩJ:vԘ931cBg:vu'SN)bAZe<";JvﶛTTH|peL5tli!Ǝ 7Wp]^}6K/>=3l==Ѷn=@@VPvkpn~{JP(>[cwQy9G4%AV63dʔR58͙E\p!zRM+^05z3gF\|qzMs0$br-:vԙ=ۤK ۆNƌ^#x<ΠAJ>ÓOSVfse,Yb2tk4iifLT-Lv;a~Jis88rE:tZkWٳ ƍ%%wCldQZ{kXxS?|e&  XơCHD֩~G˖`rjao*XXe?s͗;CC2xp<4b?SOJoM톏>O#\uUw]#q^4 0ZUW2u /cwzЫW ӧG4HhV#+KcڵXZ" ̥KͪA*>`{vAGhTЮNZS-رN5bocŊ&WiUg&.t_% /oӧۖ{_.cV?$4,KүGV,K)E:˗~t1Θ%N:E#3?> ) /.XglZtf?,_OZZ1ZiLŕW O}M.:sd aBf2|紷U+&M4 UUbEh(&]s%ڥ&lz/mg?)!jhC$6u[~8o^N>-O/}ʖ %O %@֭VPSS:yT0ͱ?]#4l3عsjeF <y `P2wn K CVfXIX}sƔ)YUeacK2U;uٲHut?8JS4 ./= mڷO{O&E}fA}L28~y`pTe(b9n,2%8m]cld\3ǖ%@pN*ʕ+u]24lUTH줿ӄߍeٵkzx!XNm=٢DΌ@i:Ǣl1g6Z?g5?n^"T"z8t舲mE,2ɶm{-[iIBڿ_yӾfRKJH@㫲2V{e˒tਔ;vPLؙZR"ٳ'5ĽA@}'HueeGDW'Hevdޑ 6m463g RYI/W:A4WE|܆0Xs-l[r֯ߨ#*bEC2֙ [9s /+RnG'Mpق-tv;oiD )=IXhf駽0Ц~r':/+_'ߘ&md蒂Ydyy >fYpnF݀v7N,`'N pflb'P6gBu!"IJP]wn:VڭVVml)@Q?LϷ}b47<֭[mX`Df&--^;j˲B9r gW9_"hS[ۗ/7;}7oSLѺYzk+`p)pNe` D 2[ܮHnZόիD go3,Nz+`$ pV^͑#G'v u%usr'?Ν7n<.^y'>||iTJa6nȽC`%jnzbZ0(޺բG&\q('{ n bO駟z]ܔnYcדz 'GЩƎ']~3zafLSbԨQrܸqbݺu6(RX`ΦMCκ_7+h҄SG|j*ڴii8)2~xywf(3P6\g0["N%hĉ'ݢ֭[3 D2wwJHzԄZ -٣+lIȟ_x?D"1_~eƎKii8Kn U <俹قO5H8o߾XYѳgO* E<fE*mLm[垧zVZ0 4eYib 4K/QL)/¸\"Юi4^|Ȑ!/LΝ%N5Q1uCamCa-fpn+^x!ǥA$k8PM_ F/Rr-hFî=g%@nnnzf!DAkRKS4jJٳg<SNL(\"EmRש um׮]\MFk tS?כXV\ӄk9ipSXqX!iһwS_ FPdI* K }Thi.WRa IDATVH@:45@vvvܶ=us9 G55E Ṳ/+%}QRVMMQ||#${Ӕ|{Uv{gZnnnVJI&M]5J:I;n`ge!wD6z=<K\}gg^oEl.Wj,V$!`ϖ-ScqssBʶ1d _Nr ۻΆRܵҢEOnO7omhi222*dggxd!nMzU-%;qdi"z @#0MӴzZnG>s7Zx*sC-P`۰rIno>TS"f\۶^g@EqCe=:ȿW\R"ٵ˖ݻqt̬ kwRE='5 n\yef{TT@vZ6=*k7 lQÇ%AD6MyŽImlD7A`vv}E- jUWs^rU)-X /XnVe {ce1m=Mӌ{a%Y]oQ-j quT h~Yʚ[*4xZjca %(04mOqqqr8)/Vj $B\.n;yl[D\o<pg֬YC<a0de9*:pvmʕD"l;9}n7{NF *HkU:L2"$]{n5HP4njǟ.4Mҥ$MܚɈ#m[ٷ"}:={5COHrkNa=:na1YFP"/rs|qߓ4cvIFemd,DN'|rh(s_fRۗm…6yyyʶx $_INFv!H (.U7O|>N;*@:,…LZJI͚ vڭvPm_b)aJdmۆ^qoӦMʊ 6lHNC존TYP$u bJPfJt+@ *Ј{*UTL7Uh})aS&oQT`0ZT76cQ^*<۷RUPL1UZaHJ^];7ȑ#E)@Aնݻm**)hYDII 4xN]w\[Z"ً !ml)BYQb='E1ӄ݀޽{U}ES`̙NT?us,[L٭)88b.GSC49|Z+h샦EE!E"pIEEΤ%GJzТ,^D)ύwL-"H \peJhAscEE6%%vW.R |:׾E#DL}mEYYwcυj6Bx$͛-B`b 3g ٘*׻.L><33RJڵs}͚5*;Om0́g&ol0*@{tڷ%*)~f͊:3;3MGز:W/7;vlò,%)eCbٞ=PZ7ߘn[$4Mk!&L08x/og矯3gTM"vk{J Iy%sZ\i2wfU6PQ!73`F ˪ŎF9bgӔY|~.}l,0X`>5MINPPPDzC\ ;=T@^IޮB@(~}aʹ*ܓ&D30ͬYE?ii_a}OZSݸ)~dJa1JFM7L+5ʏiJƎ$t'xq/$'L B!K/7Ϡm[&NtaY#љE5k}:iE} KM8t3ـ0!W0׿,}y4ر!JK%ӧgvod=+6-odӟ)*O+*$<^/F> ̙ceK~͛QW"XEغ>4IiaHkiiK.)<|I7TNւO'1c{W^guוӭu׹?g?KqKMF@z: ZرkAF1{A4uX;+4nxK/uW, wE0rHO+@ b 4I2K@xL>.ŏA s]^}6˂;^ #5Lf`ƍ9tӮƴiNgSR"yӧgq%.F{0?TeKvqF"ZH4p5k5!Y$2I^ɯgڴl&Mp~76ky feӥ#6SY 0vM~Ν6q]^ƌqeDF~PN8,<9ѽ{)tR5m _5o56,Q~y,CjډﭞD}s:͚iӭ[)dVw 1iR&|>jӧLE~.~/keg[17k׆ٱc;wVKKMYc+p [nӟzzE0~L?4'cϋکu]`y?ÇmPɸK/u{u9۷Bm4gQYwJPx(tDs,8!uzG%D͟]ܥݻl"㏝_K:b-[BҾ}{^_S㦛,Y/wGy=GD$'v81B8 |q&ݻV9&>o+_D\5Ҙ:Kp9.vKyy9^WYTScr547~ iAy#ӻ֭u**JI=U3N痻u; 9? .8/&pw yf%f>lY6qn%pFL>Mm6:B8q5- M74osq|<+%]&j6lm#;:uOX#%w2%/pmD|%^w[:H)jt>RB&Mn 4l!]vd]yWkBV46n l.YC.]4L4͉nAy]`su%KpeUϨ响4ba($OYY=w୷|q|OZ6 z7~3m<\xνVtΛ+x4z.t扻 80رcz Z(3=֣GmP=Ʋ_{'T1tB .XpLə4Y녩S,\hЩN:99YJ!{~9[nUl8ՙ ul<,qn}6_PBfJ0oׯd׮6 x`MjdgKƌU!ym'-ضΝ5/X'dUa"Ð<~\i|U6s:ksr'g1{u|矯?!wq6uBmKZ`۶ض13߶]' l;t8x${=`ذrrrTTȪ_Vp5emq1üz7?n+g@799*9,f?? -MpY#\qEM`7`k׮cmCA}B<4da{2pjo1>.࣏2Y)З -KiqnzԿ_76ǻ]!%6…0MS=]S*3p;:vow1x4D"V4-a+ -ctb,Vذ22%B>.pGM,nCǎ:-[:K uhQK盜{_Ӳ9h̚5_]=]e1 xqC>\:O>^7cML= Nw)htlܓi&жm[1'|`,q!GێKWߒ]t_Q_`m;wV?-.tG'~㾑 A po':tz1oU"nfcfvSd]|||}epҌ'Lpm裏2nܸI⻡d}DݎX8b_dsZng3Ͽ뱴4gwZK.GNnT~ TH4;7mfOGNdI]=vu=&^իWTCEcgPXh3Bt]T)cjڱWvsǿW?wc~9vLJe(^mU;_f{rvޭvQ* uݙn7͛U@\P@#1MsǶ%;@DP"EX˖Y)h ՓU4fL`R)!]r]Wh,Y %-ZhjvδbI @ dn *֦˄s)`mhdf _x-H{ԘESG%(n4kB@4Wuy)A dIjxI5j\ 5fB s椆ѲPq[0vooÆqYQX>yrjre}UNKuX'ݻ $nwx4 *>1?tjpgeӉe#`^m"&Yp}+QBq6j&+Wj~ M8 (ߛX@yDpvDz]CWV4FҼ}x8?ꋫ'Ll< 4g65m,m7xx2aq8/BNk`k7bڷo/Dzz:MX:kgL$  ٹsgg#Kh$*BcO ={ZU|U`z$ %ԉ/4Mz 7УG222dZZx-#.ח_m`0H8SN`XeJ=vE mL`!;}|>O[Ue_|HJoV$X=vӦM:t:b6<DW<^0z}-[t=sߟ4 5hP XdIO>ymiieգW( /ȟ'QoRJyyw:*P㤓#7|CVMvۣG3=5ՎU\ػwoеB>lF X#KKKs͛7#FЬY3|>=Gf͸[YnlѢ '%Q ũ(<@D_zwxUU[R"0((Uup V,}mpel" HU@:H ~on;g )csr~k 8Q1Ĭ.vhѢA-mڴ7p@'ҿXP6Tм8Z'Ly&7- h9`˃`ӢƠV*ƭ)¼-_5Lt,,8 .͛7%%% zxx<("*Ǝ;C5=fg]1DQU.bwz7ge5lǬ43bZl), 0?6D!Owuɪƹŭ]ܻX~׺u!\[n*&NxODikeV11躎 {'$m[4KLL! f{ ((4"ǦoZ*տvC"wiɊ5Jt l)3+Gb0,@giAdffb6x<̽Cۇwh8SK4(kn~SN"33DTUbY_x<'Ν+̙-p7Ql\kŐ599AǠ^ EQu=%w*~Ǣ16o;{طo}pX2zR !} \˻[xFôB1tP9ŋpB"!{ Ub{n7DJ)À2d&I~vu\r& E\7_]7>OL804%T 4D.cǎRӴ+cSTUC #<5-N UCҀ[oUxÇ-bPu(a!jlxnoĭdݺu'ax`jkg1/pvAEJc|>wNF/!HTz !?lO=4: :r{l Pö4)됰N2umAzlm{CĻʽm}6o\f.1ܞC1b,k)%͂-IMw8CqV@ lMRSS2VyQw5\ZYJo$."dJ* /Zn0Eb0FhZL d=,l6<\JIRRTƦF[֭2d[֭[Yz9SĄdrWjGBo[ш+B)P-ĊT '[,jnZqVGp8r"fΜ{ŏ+Vqqq~Cs(" ɒvZ6m/ K0LO5RW9?H$RJ:t?\OUU>V^C詛=R+  _~"V0a}ݲTO /-_T^{]s˖-σRʀn8fz3'!*}@j^h4q[ > =V~@96~e-E5BjCtZbb_! f͚0;)x^ˁVx!e\QOKԟbvN)an`',Rw̓CpC/~eee&`oxhej sbnT gg7ҽ7b+tFJJJӼaRJJJJ~][-N΢M~u`ITkQzq8!XvB!z_PT.g5p @#r:zbʔ)ILyVoDL[n5zHٴZR9z"1w/0ۊQ\B~ͭ~|^}Uƌjzz:K, :>H(vz|/VJ=q1h }ݐЉ+0]fyL&S A˙9s5.XsO*6=t;E_c rByWq\"rJf̘uT10dثWݻwgyBɼ I /ѣGMBZ2 ۴QٿE-]BٶM6q:6bլiӦz*saɒ%ZӛgMQ'X߯3i{@[l:&C5[,fsjNu\2j edf9O=UΆ ڵkA;l;vlu㉊#lw{K`!yENn8e8L4 h )Zpo_s{HA7E={tڴ)bƍqp-dwhѣGYdI(n ͧVYχTUUIڶ56mG#Ԭ `? u)BVV6/+Vλ~F[p 0el۶޽{D>k ikcfP%X_׋~kDiv{tqɓzbXbiioMRw^JJJl޼y9X[R"{lۦѢEZ)~¤IxX56Пڋ%~&:,Df̘Izzz0.=3-,Ѹ6 ӦbZc>yx 8Quƍ|Ng)zT:ӱ uDWpO%6m`ժ5q+ #62dȭap̟?ۇۭ%sxg^/Qe|?ފ g^n,<ɉ 㤔t#,&`ĉt1X_[KzӟQWV/G%###sM&8pE6i['0>O:~hTo=XxgB a87ho1Gl `>jm˅;|Xwŋӯ_P+1To.ըrFx<0l7\T;E<+0[~[p.v~c…]t]'Oݗiщ޿.+]fvfٲuY$O\W< ; ]p!CZE߾&|(b^%K .+׸` y=ڎ9RҭW_95K.1^8yY4-/3Gˈg{^Ng4S?z9RZhj!%$%)kaf<OPkBf/^%tTvx낵͙㉺C;[Y|98_փDV86QTTL^^^(o]|:vx&vUB]\63o"_/AvAh֭ @o]m8#MQx%tdҥKc5 )*5&<ʶm()) @]mzYd߾+>ʲepA∭es,DT*^m˖-$>I(u4]%K|΃uYPY#>\v ˆ y|3D'LNN 9,Rmq":Kjٳg+>t/Pa&ˣtEJB3f3L:5ؙXEE={wPPpJ}&AApӱ@h*LGl磪j8M|Qh025 nk}R_Deh\r)@7~ٳ}D ư]NY=F~~H;'`+-?p@rhl0sˆӾ:zT]~mr9tPc1J`ݺ92k-82mtvR2Z,\btokxM^Ћc(ȑ#@w=^ OwfӦyسG nm6X7:w6Yf*=[i#+53KJKصkW6eSԿ8!:sV;| -6./O'??T^#}=z4*uFË_AU!>>čSD9tPlQ4Xqyc]ٽ{w8$L\$D?7@=?/Qw^R"%>̜9;tB) %Gpnm UP8]4qhg )cڴ&$.rb}Ni"!!1/'v}m?d3{ \ߋNY^/|KNIQ[Ϲ\3Ps~¢"mی hqqN9/H0kpr N-):$#jI- eꓱ&+J>U-"рI)),Ѵ߳IڴQPXP ;')aӦK'VQ/Oꅻpe!DኝsgAu*M)S0LÒ;FQ#HMfQ??!uY2ݒseek^/,]cz-&haؑCqqqP[BΖ:_E%ddgÚ56,(,`wXJ>f+;jDq(`R/?kW3{h$& >8$A^ΰae4i`2c&Ю^}IϞ&v=]l-.8_2!D(X߯=B2ͅ0zL:|۩9g6R*| /X~w%^o MvS5Mg.ziK Z IDATlۖBvS?BT`[e<ø@DmݵK?ܘ#b^/ dVT:\`u&KL5T{!gpE5yGwމy9#Cb1>4U#5yyHWnj/뺤kW3Pƍرc0EYO{{wN9ODNi++Y]J@v%;wjs?MnΦM>%S&pwtMO&nC9ذAsgKzyq;CX(, VFr_(ТBN*[j8U\ɐ!|k.-X;.WIhmDeqVT:40_OgE|.3֏LµZ:pf 0b!C,<\:]N GL0dH#G:X$ww %oGyqgmn^J8lc_ҥKL?/8{\ G#&`6C.V(RP,1-5ʧM؇ R87x_ {/ /4H\._| ?Wq%*\ ]q=6t]IFp2uY0t_f+s8 пI֢iZ/U{$Zxnv{,~))S<@|A°aVz#t矏y ^2y ^>眺2Zddq3f 1/ްB w o'[ ʄz.j;5={дi@w=_RC:x;wFvWd6e˒HJ<#lؐsk&ӡʗ_yA\c&7WgB˖%qf%:-ZLet uƭb㥗 ٳgOP|дmp8 '7Wc#.DQ/fq+p4sJN;16gP4c)I׌=z*YGQvnBJhZ!1- |j$),]> 4)$)GutL)x˖ 0~x,K 'o -2zͫ*_cQzK)Xj\\ !h#֮]T \ ,f'ni6fT п 99*5ҥ>vN09s O83'~H䩧xȑ>ͦM)ܙB6*{xؼ9S(+{Jgc7{p/h,w^a6SVӦ/Y$cȭ'o=T_ݍ{rV Tp`B-[*ˉ<@p}yYd2;[eɡTk(+"7Wl/ Bq[E:סZ3L%K}dd53N9GX'7E*^/c0邶m.!r%5ڀKiѭ+n5MrFktBӾq8&R9}`_Dfpե7uIVr@:@W'У?\. %:f39b,|ULJKTNyshPVfK %%M{1'W iO,XPUl [L:%VoxjIJؾ]f\ye)^JH XʸqnMF P @`5(+ q{Ύ7h!%E.B9YhZeK믷IesO\~pkW;x έfcg镙.Y3de2nPg|&-MpUIbx#5k|sZs{<̌O<G i6o }b~! kRgDdh:mR/yש~~cg )IЦ!\b*MѸ2 $F9HM\}QVsv^xɞ=:|aK/$O[o#{٣sfʘ4MTPZRZgm[@18Wf:5pw"~ձsտ fqpǮ՝V:бJ|!@ p$0Pǟ)x[fMvcl O6qr`2_5f?-,\\{m)?=nSR ^x ^~*^>tH/N/[c*^>g%/_}eCÌcٲe1}`d<[ߪcc1\},j,^죨Hʽc׎ #_ u&ҩS=Μ#7۷kLaz7ߌlެ1i;5z1cp%wajvrȑnLb`>pѥn/ui x`}8Zپ}s ֆZ5p6U)LފMd e۬Y__r/>z2,[cR|?e0+%%F:.ҌT]{oᇆa_?s5k| 3SvTy'_x]i` 23GYdHn`$'5K:1c>>_ة*d4,5Ua 37.L"3S5k|ugsN?7?l}lڤ1dʕ>z6 X,0  tc6h̙x\]KkӮΝ\cX_w1},Mм?/h}LA\BFҼ޽ysxWɮ]M>wv>UtwWkW\a}Jk[Y[q˗: AwߍI$/p%5=IBBD[>f֬q~z:ujtc5EèE dbԩP5k|i>v^޴/l/%rʓ+,+5 /JNdĈܣLL`ݤ#~nڤs: q̺fF6x9!AhQMr3ewM,xV6lHw\o޼PmTTD?e@iM2]~Er$rŋ$ RY%J/Mv"7*dI,+KRҤMKU~Q4H6#ezӤǓ&:K<`eeir۶5*LBc&u=Mڕ"KJR9ƽ^,LeeiryV ȭ[#GW_}U0#z4ɃSeYYZ~\4pr;VZZsNgZ95k^.?nw]w%:$_y  ѱv$K.6eKEnߞ"4J{͛e,^Ji\gk6 S鲠 U>*Gˤ&rٲe2//O\ÆYeqq02w1>/dgD[oUbqÆdٯI6kȬ,Eí2+x;TY^&gH\c.dv"CReqq2GaRNg\"Yoԍ-)-ǝ(h>]w9*"6^=_yycqBJRY_~&&NnC6мkbT.̿WqJfʕ\uU8G>\׿TxD]TeՃ#fs_3Tk~e a#_ FIJn*6l a+0C͟W@\۷kl)~СjynFd$&V]qM3sseJ׍Z2wbOI$& Nߌ {ڴIGJSyr:uRy;[t쨒YY$&koaLQrssiժU8_^BIqXB3RH}m۴Q??6@`qm}>I~f\]0{vb'@%={)[l tJ**~ 0/?k'yEqq񲿴{_͝w67{\˩ ?p2iPϮ ߊ ^^ ~,\qEIñ\{/i lcGٳ˓IL J=j]d"o\caԨ"*]zF`rqw~.jeǗ'tnFAA*6d*XF;\z+"`+x ^O 8zp s&^v\ \Ʈ]|Q<_oa6 \w Af&̜9ݻԝ"%̟}ExV2ϧnVZP)&m@CPToݼYgR/?d&hrFs5OxC(㫯K^|1E\qE)M xuYZZc$^km ڶUiBfر3\r`w߹Nx `ݻ/\!p?:lݪթ͛5~Uw}\:dԒk-il2ɓO:1b!etCvu3m1.4n]w- 5SPU8,XruO |WD['QP,в$%JἹ\6QIET]QIM3pfKT F?n}V*P_~ME\sM)w믿' WyiF)m`rI~tGzѣc GoL14/51[ `}&L0mkS0zƌ'c,U/`﮾_r2^*3ࠠ \#e'z}'*ѣG8|pl8ygNqS]±ĴMʼn竪xj:n"ڱ/%4mjŋx3-Y⋺ !Ϸ0iR,6vi,^>ÿe Rh))|O9&y2;sTf͚CjMh˖y+9ЏM?Xcڏcy:wۏx<\6~a[xkV npna-͊Bۦ;Y˺nԪah8)dV1aٲepn]dm.BL~[GFc :u2i^vVoެETye*s ؖ'9t(=Dr2L4)؛AbL%RA ֮]ܯ`ue>GW~ [h" tKf[GlŁh$%cH=yӀUӦE&61{p?98,h+;=zXlPI+Vx#Qʆ kY㳂͛5њ6lrִ@iDxL凫~7ϋ,9ҳž={vݘω'cش 6Ґ"!_pZ7@FgK9Nj:SO/WU)RڴQY* Ea }L>S'Rb`@!t/?:";[0GC%) 6lP[n޼9M67[XXHNN\htʺ ^ۢ<ʣt -{"k͕B?0$Z<Ȑ^zΦI& J))(( '' >@ T/2녭[5ѻwt Ű 1gNY(80\ >sM\3д8\o`F\\^z)۷Yf Z.PZjdXBnݺ]*dٳT̙(309YP\K8Ʀ9ysd4MV )..-iҤׯm۶ BPPPݻY`yyy}0:0 _Οˬ.:M֩JJ00BJӦy/*j!jK5<?Y_KFU]w%ǏpF۸͙}PJ!dԭX FI:|T"RRBvB|<cF/zXVOoߋPV^0b-|: XTc5->.JyRS-ZؾHm/ѣ'OB4`رc#p)|͌}grsu".L0p>sCg!|uCXv/ߥ Um;ikF?^|F^UUyW1c8} _H?s*-ZD_]&@?X b`O>8 )N'ۧ=*CA23#J5Ls)jz\; |OO`fQBsB׮*Wר}IB`.xώ΅ qb덌?JhBY f0=6bVr_kKQaDX?&!Api ՜(l@E-$$$-mF)*f I gu\ d2=LƦ[vZ-_mpJJ$eu3իxDV,<-Ԃ6`_{ul\6bB*l]|Ħ,[?rnhfAA3$&11WI -,mvn_`+M)-%ߘu,bɺwMtR{u8P&MgԡpN `رڶr't]]~ (iٍOs;OO0  Nh~[''jB|t,&N RSvSSn^W$ yT LX0䷿->`:y7IS4Mz!`0Ȓ%K2eY҈mL2E|͞e0ػw/#G DQx≴ Yv-\s3C6]t!<hTw|D+pWe6<3͛5n#$BޱuEϞ'7_ KTUijj tSZ;JJs tjfNh0o_~wyl\P`r߾O>'[֭/L{ݫy7ַ%$[}o] >x܊lH޽EA|=l⩧"{ R œ~^py݂=C弆W첃K@l_i6 n^paىwNn'"TUUQ^^.WX{3ơ8ŁӟVHeelY $ikܷך#@_~d!j]u{: lfLsnݻ1bh83l9XȺ5\x;5]bSLmQS 'v64;UU6uu^޲+f߾{dtY~R伣gOE(-" J늆4 Z+VJ1l2Y?ڷp6n'KLXt|jM} {fxȕ$gL9s@r˗<4w;*m*,}#GȂ֛o&qfx`WNk֬GC2ß۴V Wqի, @&Y a``r3gN[f]]P[;n7P[[+ j㜯萦 8MJJ`ܹp9"z66z`  },HAyeK"6l"++edD]DVdW/ilܶ _#-+dl\dI'<}v…WKn27|}A@S\8ݳj}6Lle )ΝMMZH;괏h),t8~{28gOi»'g.}ύFa&[.[f˅:'[=HkM0C*l&<2kwYوoؾ4U:8S])8`9sTCD~}׎FIR7Z}3 RС QRrr2q'&}amض-+#K, raٺ:j9xÊoFZJKÖ́YFZ6n<9m** ϟ/NH~9na.Gu尧=]1>CZJJNgT][n $ 9q3ZJ)~hRs7Kiꫛ((85ݾJj).>dҥr@Cvdw]:.f`C8FW [aauLӍ(v|RŽ PR?ѵ;:5GC4lwػxeuRXLEZILihMVSij1>Կy]5T:9&t=8~eC)7.̼y $ ΧǒMl Nhr(qvvhljEE5~ <9;.n~W+[v Abb]tw+ dQsǮYWZƄ”/}izg C466qi] i$[llӕ]w[oYEQ((eҤ&5:c)(_D(+MM:9q߆i*5Ӧ5 r46Nş_:6qݥq!v$ΗGk[ilԬ\iT-/gРzJKk[5J)b1ͣQYYGױ&>sϭo_I1c!RZZ*+_c&nZ.ŋGoSTJ1lX 5k.)xq];ĉGgq9>JÏ}/8Z|ZcΜPՆaӟn!ru+~EE VϲekZ\|;^\ye۷Ze?$ؼy( fg]vlpgb̟߃&7<|)?Q6UW_b'?55^m3sfsjX#L//!mѮ_,j.>_I,[r;Yk w[Yb2>?w+Ǟq.瞋~7p$WPq3fN(u6 X:D=VHk+|`lqع׿.!R_-躑UMD8`„ {:?k# ZOj`#FOUU㈪6TߕhdBڲ:tfsE, Q}>۠`ݺ2q^ogb֬[o HS:k2mU@?-?l--Gk8V~Yv(NBπdzEdFO~$Sﰛɛm{t:85SnSڱ#hƏ7ٲe;[zO"Tyʖsq֬1{? ]*lbQT%䧜-ᩧ"G VضNY52j86l<Bjz ZMk_ӭ S"w!EEС=J$` GMR .Ȥ}Iʞ{ցu8ˉ壯UVq6ӄ~oz(EED;O>ڝ<]k'se;uyWZ%Y3G>!{ Qu.:{8Рo~3COKJܒldf\}V͗kG8矏qQD5b& Ȁ3"Ikm@K$CQRbFRݾ/v3v{:ݲ4jw*A5젔B<۳X[8N '¬XT2fNwxCm?4|MAСCһ2ww:GeULSq9r(KiE!8Sؿd[LZeҞeWFdp~|Çp|+Ҳ_IMf6l2i] >ÇL߹ǂ@i#0{AzhV'c׬Z͡CGkAiYb{z޵Gq&EE0|%|xkj\G#׷j)*J#YDN-qT;!JAibX|(+:yzf~8&<9DU D,He 3),T[N|ZQ^S)eƾ}rP&yK3pp$#*.ziY!xgr ?ݶ W^>VM$7ls$ڠ aph4.9x$ Gq+mXȦmKl~y *9$Bh`…D 1qI ou[llH,H F#s:D:D tvXaӹp8pdbNwD"a{+WҪѭ=74hG^)SIZL?t.v:}TV aƌ1% ؒ%8OܧA߾" M `G]CUyl[sEJdb Go_~Df kבּpzYD+=p>w5otxSV:e1Ђ_ywr~NرiU')t;83f}cAm_?E6!bB>`/[0'~+2wn"(6TjoT s.B0nɛo&P +ԟnغQP5 kIAosڵyEyxMW] 'A aP%N#%\fk5vlK)hlԩ[,met̙q_LCC{w*n>,Dzi^!O[s3Ze)}"<`.l?M4nAhL}t}ebTV2 2Pg m9?}(/},EO$_pDAA# ZAܲS }Z@"Ѵ8! }Y[N MBw{}LN?x&ӸIHK!FɗHuIMoQ B|Nj!O 5V GHP z<ԭJ`{03Y xI/UtEI @H@4,7;g0i8Ϫlw$d{- ,?>uTƌC~(-֚:׬YObeU+ xJJJnԧ>GGYYZ{7677sA֯__x /S<~A8c߻G?0 tD>/.㗉Nx0Oqz 0@7R477S]]ڵk9so 2P4Rޫi{zNoKO~ު֤^^kZ)ij~7nQ'M usw:?SN6MSKi;S_ve=)DB݅sq}}D"A:u{semj-I(tG&&N,qǡW꺱X}s (Β/9"'pH$m;mmX,ƥ^0XT簏]4c+(//:Cr@o 9;٥OEEZV$ 'MP)E(\o) 3ާRC/yL٣T)EAAAV֔JӢ(nm(4Mp Ĺ:i`P+2h$R#NH HX D, dOv)2P&\lw 3wzI4/A8U=_L~(* WZlM*CF?uBL% 1.A@B?1}6L;r4==@Ld-cq7 Ҽ|pmsBIyM (+_!t nbmw6 I7 LJd`4hq4|(pI X!x rR^jzϞ= atFmh8ϰms}@Ӳ@wsL8s3yd",xeYz뭞') g!7̧>)of ҥKy! I68^z)_~c޽{~'=,38wygZ [.$ X*,Gcj:u1rߧN4Hȱ ˎ=hXHXB_TpAΔU8l 8455C,**J,|@ Ɛf hYGx3LP,N8P P[[i+{B!b"|G=%"˲S\\,3>E?T"niO'̙,?S:9?qV>9kms睟&!:Δb9QVfF\tH~_Kp>H9=IDA[w_3Ok.^x I@xyrS8(y$7DP̙gʹȊa~;.lhlĈˋWF{%3g>(m Byi(GU\{m2nȑɿbnw]M}}=ŢaѭaÌsǏb'zu9sC+WZ̙30DD8_9a:!o̟$?sq@lG>9ړ}?vo߻!6u3֧[lذQF?vn`cYX,zcP ym阻#r lmkFtci۶mϙ1oHcֳ ΝK09mmP[رd[ޕ:wXt 8+WZ5cbn@i cVc#k+FGd!˗[Az  ӧO' 6kX}gf~JCrW^bΜyAѰWŹ8Ф H? d؊H?GUuG# g!=sf`0)>;ȦMrG͝rߌiFDCC&+k{k r@ uuuҺ|Ȓ Yi3&đ#մdAd^}5  #G8fƍiHdKÙ &xrk0ŋ1l2^߿ߡ%xn%LU~>, jÜμy\w44rZ|C>F''̎&ۆ{= ml`ؕMzYfI.hVlofxZsH?n˂ɓ@:|H5a.;!C **`r @.d5^m|1ǁcfÆ ^q܄/ry 4Xlk8TW;9Xq4=z( `ժբ[ dfQc2wnƠAz).\(;_hLfX5,_йXӳA>={Ja >=;P1tIcc% l6tԲ`~GzZ)mu,Z$Gw$ @k%|h( 29rÇˊشίBkM7ؾi]!Vv,%ƶmۤu?wQCk$ V+V$Te܈e(۷o^սTimG2S޽9֓};_ٸumǃv-[y绉sTi92h+ jD8 {ј4)D<.s 6J~}̟?_xJ@!Q֭5;vhimuV vR+նM@g^q4 =s^&oСݚ*ӄsҒtPk~{ g㾳xn60 bX`YI+jiÀ;6Ѩq4۷ضCR0`0c Ȉrcn4 7{;ljsōh /)*R H7xオ}5+ 慅QӟpōEcfFNϭcзokb۶3i+/9C3DSS&@AګxYTJaYi¼q4|/X`yZ#oT8(q20vl5kޗdDB>1sD» vpb j/C47H5tqmPHASS]hug5 tk0|I[[]vIz,g \7nt[B_nE^{VVؾ'?)f4o¥p'ǥGut<^zEe{&*W[$c2%ȏ~TSOEK IDATV3` bOZQ-,*M<%%Dӄ,`P{m{xx:$v1Bz)L+㴶BmKJLppk(=|PJQPL6MzV<+W 7ۜ~vui7p~V̊W_ĥ~{ S6\}uؼy3'N5I@@(tVt3iRHM qmi**J) s`޼yL(j<)ྤ1pa"Q1ykN q}]ӛkxْQ\H'%ALL$z/]WrKxҝRw8$ݻ$d# ,~~h|-Bq4ZZ4 û/,.2>}?DUB4}{?,`Y m--s]J;wFw}O3W y2cSƽR5wM-޺xب mj݃nqc$ kg݆̈m׾ʕW<"Rw^$=1h7/M響qxMM.,q`x6#+Η ֹsdjƷ~յ^lG>n Zr$́; _j+'w8tSk7H@i7xB[x#yYgݻgO!C @3pQ&F*+sRgVZ%$Վ?dDZ)sM.4hF ٵa&n9#bY8?nu'C45m6i]v6d5]8.^vYk=:@( .9J.ew4Æ>۠Ta {olfg2bYD&DhllR"GliA:=o=\{imuQNK_/_υb1Wp%&,^޽{K !ƕ;v 8CMi;W?(4KPM|8i/޽{9su3!2: xgZv'C{ y´iA8LMMnCv`F?̗ 0WB>Α#羈- L "v9 'kqAo+dej( 86;v֕C?|F"S8rFV|޳pܟ3۶@\ʈ ċ558:ElYQ-lXƭ뇼y#F($d@vyFs`md!A]5*Dvm<MHQV￿ZZ6Y4f57Cu n.ѣ6lgv6~HC5bIq1̟?_*xH@!kjjrAki°aP]}XZVW[g)ɃRPR1BlByC=[RnpBiYϬñC JJ v!% [ڞd.ͮm4)̾}eBdV`o#QQslݺUZ6Ch8[JA#~ c3[Abmƙض#9x$ OYp4l"@c`+1M0sM3-.łE&aw^L"2S˃*Gz7ԩa@K ~u4.L`p4:0uG [qDH"8rDy} ({748ړ&}kAp2d]Vis:eclw=ZØ1&rQ3Ms}qOE>?{^TU~^-ќ}G5@dѢO }EfB^-JhO&ee*e?EܙA&ٷ^~?< hy2/ LVhc^|qH;Okhn葹0V P$͛!lp,IOǽmC$)*R鿙bŘ1KņfTǢQ T/YQUmSjaE0 0t $P +eVhܸgJUhkU0M>7Q%ɂ=/`FON=3 U :!`04g81UW5yi47{P*A)RIԵ eyo5EEn{VԲ,9bݻ7?)+܄ v4ivjxnРA>(Go߾xiDZuǞ/OHs y=zC &}RQQ]vzU]]|{<E"IH XZl?Y=Ì;VӇRbpau/X~ֲ% H?}g}V_pʶmxYo50`ĉg>o|腛Y}=*f͚,TZk gL0AUVVO?"]5<4͑?Oi<0aTVVҧOƏ.}=|Bo+ O3f`Ȑ!6e{Ǎ|[J 㣑W+ ՋCD"8V3,Z[[?p4VH33"JHaѣ)..VX,-Zko-|ԱWR^^ÉiZklۦiӦ'MyfJd8W^wyDѴӶmcY^z)ɒ`c% $+G\e:ʒ*m\|*Ϗ0``t UJ[Hy4I߂P իWFFeeeJs yB 2j(lȗZs(0JN(b*2uf֚={7((6G\r@g m3(#lNhXowRc53˂NoU];;~% yWg2UX+]Y LQJ>S4-䳎M$2/ $pʬ|:y[)(^'Cqy=pEmoMVY[ir G;s\J4{<+'9y} rLb{%muOnf ր%G}EeqO: ^  Bw'\5HQ4شik*Y!| ) &,ΝL, 0- 7B7.-!' 9_yAְC /s B!v%nf(Whz@5OkYre8ΘO'9/,tLtth0\7twv,­?6.pPMtrJ w0EEEEW׏={={K:mSkeYS__ϡC655 0'PQƉH$Buu5hnUJQVVFfP(4΢BSGtBiYuuuÇ \H])8!%,W^/{DwH0SիJճ>6q@CC>r9555kۀ|6>So-@mSshY /8p`?]PPR 0N{7GgQWW>|N}}gq7eKǩ >uW@jDn ZZSQQw2dអz)O~RB!A=R qظqK/UUD"Z3> /% ي%)N8hZ-q yfڶla5:^tE=Zh2&RJGL0_7h|cbzSiۋan$Z`A_7o>]tevNlHK.|ߕCTWWSrssկ~ѣbk]s.s5%-noXlۑHFuxzz:'NVսgy=z4n+$*w f ܪ*rw}a)qg!gD4s=;͓ttZ[v:{ oFu [AFPZWA׮].Y@upnI /3cL~mub8%Ge۷'33S&۠}1 "[Usg%4h8`I֠iN.NVt9sj[[˻L8 @qNGh8nSFXn%`\(A>}bEْ f IڏAJu׹LCp;wN }>p:hXm`Z˧OWwX(EIL㏷뺝7'33כ`'l*++O R 0e*@@X{·0j Un=yLXE0ݻwLOu/n?4EM ` ;vУGA*FF:@zzz®OJ^oKs flؠ٠嗻K,XQL&E<O`hD3TN,3/GZjIM r%4JQebn")[ rrL]d\.0lsrrGu6## QUeX4 7p[~R5$ H(3+:NFKB XZgmC0$:_bE* 1 c]Z+)1-HOWHOΘN.^˕мm!D,Nni2M au iiaƌv$IuH:fyH`F7mpEN@g۶mSAU8Sv*[k0?2)`a̙M1]][P.4.{;ɩ#R a!DBX2N<AW_Ay0pٳgvXLr$,w~fG":Vޥ}aٓ`SkSid]e}8.)%\bÆ66rlZ/jD: -64u{ m}VFII Tvj[aNA{@$dV pm+8eINl۾]?]U%.qW{x D"^֢`-h VUUa.t'kXl3Gi-34 0oʕ5FJS<8γ@ ҉*-5|m,FtU.^}۷ەH1H^#;;4xGMM 555;0[%RNظQWq`g pצrbȉ9[N't3n QU q'7OԘ-0idH@qq1.,"RjϾ}oWN>}صkW[VK#$SӐAx0s ϟϥ^z|>-[iqL0?-Ƶ3.۱``kjݻ)ME us֬Yqzo~ó>6NëuBӷ ~֭[Sο0 :tCZ'N䣏>jQ;N߱x:CX˸23MnРAJHG)0TVVq'jhԯ7|K\~$?7!urjVXömCVXa)>#?D""/36a(޽Mb2)<) yChR6l ,uSW]u=zĸ ??F,D0NnRUa87nvD>YJ߾ 7 0gj7U}[<]e+Xp)O=$*9<١\u?duFŋ1qĔU| ϝ=mJڵ+oI0sN@[LssXo2ÇszOn* G?Q[CJq02Jðq&8at•W*,Z{tJJBr(뒚h}?ݱ6R@n7!=.r=4YFiiuHOkIp)vU`0x0,] zk #@gEo̓GTUrOoI0LнP+W/W,FNJjj$".DU%a~+jo{99, c@Zg  L:gy2Fdܹ^t0VOtiZ28 orƏ?C!Y9& uxt0jÇ)..N62YpbQ1w]@dRd>8ЂW9,Z_"G3'Cr3.@U%\r C^vaO?5󺲲Kf3n[onW.{'>'Veey]䥗jh(6 8|eeń6Sr2͙EALaժUBɨ5*Z@)S"RQDΝVSVfiSwҹyfd{ٴ)K5V((ᡇv[׬}%.̧8ދǑZ2Wj0.6 otS^gV3cF}vZU$NbYTP``ǰ0r0سgo2jDFlx- RK 첺9̬wx23ÒYQ}\w+Qgҭawo믵 Ǝu5m)[6nlZYA Aǎ^Ѐ0s^i_݀^@/pk(d 5p`]n*ƏwG[y |j>lޜ/N:u3g ֓Հtf)an7_>HGkwsΎbgi7pX6t/x0ej0w}7?d3,vs`kgYjU*|8~r;cmtdڵ躞,#L <=1fԚMiN/e+Z2Pvt4]=ɘ1N~ wץrnCeKz9Ft`ѢEV':JIQ!{^`͚tikDzlx \SZjOju7u8D{td߭b\:G(*2xpTugh[)'+ C+zaÆѽ) 0p`- vtq7:*jICCU%=ƛoְaFz:5bPQ!?G}x4N?Y"À U|2luӎ]* jGY sBTlH<g88xJ4 4(fxߏ! ^z)"6(dg+ |ɓ} +Y^Krp~~XgH3$?_cG={R{'%?7*bQI$RPP`L \cz喬ɱ)̙3g `*o׹>O<`:4AEE%Oy'.;vb: 5LXx]*M{&ju㔼Vˊi O}B2si[Ǧ}m=T+}h{m/KVY2S4fq:͜P(Į]0?FD;GO8,yQ// 7JJdBs|"S'x_úMw~4~t+_Dxt~C/ÆUU\- An>LII1V`:uل0+~{nRZZjyg~70 Сt\NϞrcN^7IҸr}B:f'njছ܌a:feҳΝb_~2b٩.䪫{2ḭ&[ oCo0uo3QkvbzҹƆzHr>-n'9z=w b?=<+xdȐJwx9S/ryfUٰaƧ-+PtdGr{v;ݘZi0t蠰bE6.tT 䬵 q*e},L^ԩ /t:󹺘93O?p\{)S|ZBsr 7 Z;0m /tEǻwR:Ga0pj:L01\MöI4mL7[I^ s̱9+Wjwo.Ko깺ك1S $;wSXY̪*lY9%˒$K[r ?/_a9m98˥͛u0\cx}61[sm{ n70[Q3g6(+V: R;9YsY.l͍ؐ7o{<z5.W7 ]?8k\7Bm3;9sԣ ;ϴmԹiu@q`Qq4 |-TU8thШZ83MСYT|> 7T#D)\o D)橴o_Fff)RMzz)W]Ct^Nnn3gF>ny9y}|oѨ"s8LCc֬v14fK~in  !cZó`Ls_Ʉ յ]1rd%>_)&TiAprUx"_Q%B!u+##w s ~23˸*:d֬L7#G:yt}7ҤԱdΙ3.>@]XӥBn΃ru`ܹǗz_Il_B2aR. %zӡCtRA׮eѶe|s5 !z(@nn}sx n|cr{/>pС,."~b"{㦠`pK` %  /"}q~IO/7 &kģV a(CҩS'9*23xG֩*>ΈN^x! _2yr4sNУBQ^mΓ-SmQ[7ꤿ^[Xnq-PY\0 AT}<1|4yjVo`.o73x0θqn͝_*_2A*[a׮;O5`~sBb)V87q3 +5;zs quk~ qHdC ><„ n"ͭ_ IDAT5F^/)LE$"9J^|1ov[YTzN50  s7hQocrQgӟ~|k,AN=Ç|V{CӦE<۵o`۶2WðDk4h֦?^3z[ow}Q/$=]pdf~IV'LgSSO_l^~pmfo_'fsD1CGX!8 'UUGۄ{[ROcaC woGMq=7W3xwz9ؿ?2~˖eQTd0bD&58i9,[4JD-$O>MUUyyyV7`XڕW2%",*G ڵ$)ԩarEv=^Aɽz/C:dЩDžVrU<{rOWj{tU5 ɦHFSa~gG 444-HQQz0LC#rwx,,8zΘDX2|  40Z$;S=|w fp nOM ,ZE Otm4 . 3g [5GnjApEfٺu+{~̙.!4,^) `.@ j|Q(mڤ#nNp9N"F7aÜ|1\P.safT~݂rIf8J/:i pi ,XO?sW ˇHvE-#\&m㕻ֲzaڴ?MczC+qoM!3wn AJ-׸^TVw4~o5׸yB~ػ{-ֻ\w]Z\ᄘUt]؂TPifUnb5s> qG5C86-lѤЧ!`ѢEviVvLEѳӉɌ0+=4,*oY^+aPgli9ؼYg sq6ԩ0w^ /7Q*\v-Ç<5WVIif?6=_u\ LY\u laڼ0Ó.̟r }}it}!~`^RkO ۶0;5u`e*'G)e ۀj/~v?뇯\zK/T3fKa r_bFt֭f2WD ٳ…Y ָ^$o>MS#7V zT8xPwc֑$v5q晞vEiYS? \Aio+ݼReT^=G_1rdS5׸v]$օ0y Sp.M1n石n:esq0of Ĕ`=cǺ:Κ)Bb@A(d^]m\.32?[S#4Yk ac~ڈ*{F4PPUe4;XS# 4 ϊX.bv=6Pp&3 Q5m-]wy^Ko+×i,&klÐfk d-vAG0(1 mf 3S!?OCn:_2_ځ0i$>쳩u)'cz:аDn>JkYݳ2t|}ڔ4XPI0h&I k>emuԮ fA2|a3>믿^\\)lakK Ip=o=5P3 S麩WcQUMlj%bXzEmm8,q86Rk 1>$GNv6_'p}駟omQk%i}T@JPs)l؛Z-g HD"BVn|9bD)J1QlQvu.B;VLHt2QAJZGnۦ_ Ĩ2q'OzC8p\:!GmLT3"Dl%{ T1;`X݈Jm9rhaA>FrmᆺUUSכ];z0vKhA[ 6 `1L]paH==nhOu1cHxfd5kO 7wxR3#R@LM,X~9H{wk,0*(**\[ +R$ a~y($ǃrH]q.mڴ.ėqM iUU۷O# Cҡn-岅IQd͡CftAi9ȀsڥV:= /`RY)'aX0 I߾=ر35KYˀaY9aݐ_@05|ʬ2IuNBpHٳi]I3E=Lo,TU(*2DS]2a]\uW3ry)[/k> tLtr)Qb0qc̴\xԳBn㬳J3qeŭ\ӑ |=E p [nہi"ǍsX%'o/=ݻw V&О~5uoHnрM\)ݖ5i0n_4XR'&˖ /`j`V ^nZnn9&M/'??l%~;ρ@2l"_ulٲ ܛoժ/TG~)0ͧbh7u1,egL+nO?- Ѯ];~ )//g֭ L21\'YB{0:XUt;E8\I0x@}T7{a-c[}n{/r :u"77+~~0ٳ>1+^?_(X>rG]v {սqԽ`FlOqg?ƍ:t '''nP(DEE۶m /(\%5M]\ͬkq6C#]<^vDz0w/<\N'B-SQc2m?./a<'bRJ8{.N:ѥK1|pٷo(++k;iL !xꩧ)((mXdee%l9##)=_~>thZuSԩwzw L0A_wyyڵKhH^:t/3A^ٺUC8-z'$-MsgM>{>lcH$B8nU{O>}:%%%"9SxND:igqF(GJM߿XlY9%nRz<(=[df zt4uĈD-ґŒD41l00w8i=irHOOOfce1# gf wwjcN\TWW*s[+cWwa:r!LIE;NnwlSR'UO?Uq8t<̈́^322R5ea@a.^t%]i#jq՚5 M=ztaNIRJ[u L }iSXz#}t͕O!BwlO)B#iiiMIR׬ѰC3 ]]) @Ӵ;0 =zF&$f>dɲ&SBk5 CZ>p>}HdXmd>ǎvf[z5RQfzVΌL*\~NsРA"{n̖i| ;au[lo Kj|0ÀÛ˹t:%9$e(q~<5lh&l(/[ŧfr^^^Bz}j00!HIcRȵku^n7LJ(b+N85l&h"us2SVlA XkieJ~~~Bw)c^lG IUZH֐}ܸQ=z(q54 Oh0t}d:+GGrq:QG(D)8ryEaYgc,6ۈb<| 5BL}26!N:| ȅ Uѯ]q&zv&e;NN'z*6ma=tW'tf0Q8toiHzH 渍( poj3)EXCCj^ ԰ja){P6.x 5{$wy@aQ6ZE[MV32I8 :_MHDD"q+zGJVČ 3Vp࿴šmH6QS^uZ,c1w3EXCشWq`D{ ;Cr2qDnϵEQ*++kO$#Zor 'Y;.+UUyyiôbQ Z/<&_!֌Cq3dMtIr饗`q LKKcABvL J}Ԟ>Tս ^pO%lmOp7 !D\q[TTă>"xIbm`IZgD !۷C[PVVZ_I%w}5  ]H)ԩ;w+**j۱ZTZc H6EI,?/  IWep婠|>gqF܏5Jbi9@Ere ܑQV:l ^0h׮]q\pp8R@Jl"{BmEйsgpKs7UEJw^J CNsk H$=ýcWUUq׳e˖ `rsOӍ;bJ"O)%{.;N&N9ɱCo9N|*4Ç\4h'bO[nSƎwZ"l`8 [c$8E褪*k׮e޽|z<ax|/iի^d)$V.j(fǑӁ à 7)^&< $%)&HzA4]p/4mr\ 6g"RrJIlkՀ@1qXfx8!|GıJz3lcc謬?27pH2ٹs'UUU'K"R ><|kSP4MgCI?SdӦMx<`X5RMZ{y-7+_sMIYsY,ZZ447q> $={Xu;4sf>kwVwL^.klW֣z"L yNzM)8p`v  ϲ ?e/yr***ʲyT$X z@ [e40`@*vv.zt VWK}5j9.NI?~C%e|A>}t&,w}3f̘D?gTUv|*ɋ/Yp!cƌ! )vj`^#j>}ڠl/Xݺ&OW/{90lުqƵ(}%d?_ƍfV`>)Sj9pÆ K:0o^@)v>7/$+ rr`1p8y#  ΡVښB%>z֬YôiӒw.?߁7vн;̛7ӧwt,3QLwf:me\M 0a„d~~uq .lzZ8pł3g ctԌdre9爁˗ѷ &L(@Mtm뱌D`' )..>&`-ikݳF^,\.(Qx.]t1y !>\z)̜9P(#P:ڐ!Znjq -;LD>/^~%jkl޼Y}Nx mz'j1l?$$–6sGv@c%B7KBue ?'&9l?t]f,)1lPP`n@9K.سg?p#g4u 6oqԭ a֬Yd}s$|n֯_$ 0g.Z!ZB޽;& ڏ> K[f 2at]?sf-444$ۖ3fD4alf۷ooOML,.ȴKi&o/HdX1@/*2a{8];uf*@!9s"i  re H hp8 l9vR; vŋuiw@J7IyyǏOR eH[s@A$Ӧv]bh~Q8m݋.m۶%tQ_~<hZJZB0M0|S֯߈iik>c7褲i38B*PPPȔXhDXf F*s9]}!9;tsXe{Ɗ Wu'XYۮ+@qyw SX; ׯOEк׮Vp%N\.Xn]g~,MF3#RaKƏoN[O/XѻFia;ϰ3?ڼY0쿼l*f 0֑YP] uu.5.  ,lRXnش4axkڼys* ti:4H| uɜ9qBRRbrn-LS 1%Lyzœɷ+WFINƀ# ZyȦM:pBJ7;9r ۮOJ VAN  o3hdVU_LpK̙3eJhDI+` WJu\һF^ 5cUڵXZ]礬=ƙ8; A8|شr=>u`ݺS!{MLvjnF* $c.C !0MJI_VfR]mwx8vcǎaQKG]lNfϞIgͳfӢ)BǎQSSs/řt^r6= ϪcpNP[[lJ1izi:nJKh(:'Ec0fϞ;r+$552-'Sз/].]e%v8eV[KW(|2[EHux'v2/]-#deƍOb Rq`C&UU2 q+m)/֯ߐʥ ÀÇ !̤Z RJ  +V$* b9ޞ=CY,ɨ*- uSӬ?vsvp">''G0l  5>{ʹku0BNg*ɝQQ4^\\u2D[+ٹsk"Cy l5kң;p v#2^ v1xW0hcʩT@ %DT`Akvhb&糮o!-)%"fEԩ/Ib_?_ϨQ5x>wA\دopn֭[60dg5y6VW܌ؑa}n<9?q8k=|i<ۛ^5|R|^k<<N)++S ظlY*V*x8l @QLa]HzbUxѣ;.7_vY2|5SY]˟˖F9?;O,w6ߣ;#G:8zx" xK;uaƩoݪ3vlMdش&>űc5V V){Nn#qi._>Ann|i!NeK|E 'Mq\.W*v,^kᑒF$:ft6 aNZl}tjV)5M[! |I #FX8QF&&'tzkOʸ9EN t8/v[ymm-%%%pBy.~ҥs2r<ѝG_徔5Yoa ͸ NI cX ͛iu89X5o^M !x Bh7ss5{o=nw|͛[s۶m˃ML9>ߩvzS0n >}4rr`ѢEhSw2 XXhHmι\'xa\OKjZ3R6񳥽v8~&a C6ͱR$⦾GQ@tYRu 95 ډ+2YYֿiIߢuk򃥪ge5^hRCn79)%ÆYoܳgO"<} wxÓOZ B;!:.#> 3fL '0aB EEM@>`Ԩ(x`ɒ%iNzVްAorT[0+t ӔM|rNVyi}= 4j\w8~}2M)پ}{v[a 0{ %?W^YT񗿄rK-O%>W3lX5?iu XO~Ҁ)zK.fn@_2WԐ !%LDӬ j0fb6=j yA4nՊsQmgVVsp Y9β 8Avv0,:7ہkqQ[jmn]r `ٳ[ ~[.o]²̙3U-O,+8anť:0fْ?QFyܒZ-y},%Hz_oDۜחsĉD)F /4pu ^͵p䈉-x*6޽-;3~| CVQPi*n+k,sVix?YYM3ðl/CJP2BàM\b8bD5tS-W\Q/he\Sĉ5|a;R6o>[v ooUMY %^p]uk !0@#++!8 ̊G7mN?͢EyZ6lrnņ |afcƌUU1eŮ]l܍PH4>|>k)(~+ `VmHv>P[+h`ڴ:x_"q5|3uYiG3fL [ѣ͎M~k8Ck&MRW`A)SjZ w NAE;b||6lȧԤrye?irzÞ=ٱVwA\y˺uǦ8J F9p:vfH.A Zc 8a"? p̜fҤZnŋ#A B&X"Ҏ}YY>6l9.|sv9<ܙ2k-y^`֬pǖ{믟jo]1òs洶W]la.>^2Gvsd޽BWf oG?󬬔֙K/᷿ /3n\ _Z}c֭m3fL5~)kF YҥѰckMSRZ{2OD1 x@QQQGwk|F#Gc3gzu,^ܜ8b3paGzո~'? dIG;scݾqqKjj$h\sM-7ڦwÒ{#Uycְzuc8[QGcܹGxرLfӦ|zI[6=VsHk׺ ѡ>OY6 ZJ|h: Ҵf `nDSQ]-yq?KMơCuI(D̜?1JKq3SDX5gp^|:'pnuzYžnrڹ(-5ٴɚ_lY+x%khk %[뫯81r$}8Ze!OLmj,]^*c[^}8ٿߑ켥>qG-1CN׷#Z-Zn~lxp%NVo>Fڶ ev:Y9v\ SUx+VMav4̛9UWRTTDze^+kϽ/ټ^*Ia$LkkrℕA lڤzu>oDכ}?9Y6K0aB5>}45Q`͚u{l\߼q-:} -ğ{D$hMJ'I@Z/y ?Gzlf+"vBtn{.\$U_`Μ0W\qss{oL_ _2'洩5kE"+>\.x ,Gx"͋/64oS>}4zt4p4}? <}BJ3nTJq2YmBpnd<&Ov3ztղX+ZA 8pǣ}$%uy=g?{|Ѓôinͳμ!t|3,QN.|xGcx{5%VlcjkQ/l/JCv0]~mѣ2E apծ7bG!nO40|cYOo0M_̞'xI//hrǾv?Zݹ'l'QL%ͨof~ݓO1"qF{{:\Vv{s?Bw_}t"v:\u7aШ"&s#C3q֠W/8HKg$^&,Ek':Jl? B杰"cӿ™%NY`c!C$Yۿ`Ç%(*28k; ea-p۶mcҤI0̙#vj˳:sIujkeMapJeh`cM r2n6 V.7=w:^oҲ2yweĩd ]V&ӟN>˭s*Fg+&77Wqa'fQ^.o0cD%[ 9f 6=ٞ!['e]w^l0M>sqJ`"r[A@id0EEFge.|NdϞ=ә8 \%&e"ܴS|zWWKɷexIKf\&NtetXJNӬ5$o)f={ V/J88tȤg\WJyYشi={b~Fg#Ը`%CuZb&Lp!B!WQѩrs-磡9`A󙜡C #x~ѯ`(GZweΦ)2|F^߻w a/xx,:u7w1#̠A1jɈ6b`l*a? ϱת[]bssY]e+hu:.Pg IDAT2 ++*#jǏ?]2.oeӴv p``Ǐ̙!ťZӟAUqRҽF~>t$-;m"[,_To[{w))1ٹӺNeyJh=Cvj% \pƼyV ۍVnӦټjܯ'(+3O٥jA]6Bz͛T Ee(R}LFth@ `kw:3kqM|uLRː!Zn&]{~7g'ÇkM}^sX,i硥qN BQQQ*r:]8NC($oѴ杼awr;p7ey&OPRҍ@Z,{, hV*Mڵ.q!3;ʂOu=\g02?_3:Ւ|j>Fq.^}Nj/x}j|Y\pFTUI~l{oe @Yi0mZc:Z><W ;!|>+}ioqn`M۷s7'{,P}dժ< y<,}4z_‡AS/={ YSؿ!x#@C!=xxO9h0v,X[oEq* Ν3u<='unN?QދЭ`47FY^mk.?|]0m,$7תSX<ڃ- ",7С]nhOd.m^okYO]*6}u o54XuN[bdSK/YYn_\?U!K/uruN#m٦p ly#@׭0 o~s]ux=&?1`!jM:5cY,duXѣ<حS={C$"9xW| OS!ݍuk GplYRZqœOfK^|4i*+zٳyG26=2_:3 Lr8X?d~t6j?d9i@ӚSnt`ˉ=m5EJ TE doޜRҘ:՚RJrr4rrNpkҿBX8~[YvJΆK. .`FdcgDݼd#[*\-9=:lɓyg/e`QN2d8Oꫯp뭷gϞ?Hx3'li!y<6o!CRNVD܂U9p`P ,~_+6nvF9t&;vF=˖ cɒy<̘1#`Zrﭷ9vN+3{C߿cRWW2Ó^)EaP|60(OnvzyaV<>wQ^쇷ۖ>y6G9l!DZRgm$":ٲe  z/z}#Ipŋqw# )|-VوE0h M;ks=Q>o:Lmغ b#>]0Lfݱ4(4K\ZoUdNFԒ-9y2N~4rO]L;s&7oAz_/YlƏwQ]]ﷵCؾ{GגK'ؖLniG;.[|‚Td{^svÔ)Vcyy8,oR"j)7sdd̻sK-޶[gG@,r***m/*# ZnLƏwb&۷oTegOYd.X5G;#ر=U1 (},օ~e3 I%V͝.iࢋ\44ԝ\3s-cթ8ש;uN:6 }@III*O**2 ,A^\2 f{SOVEVi{N"c):`UG W]DJM6)@޾ FWK.E x944 nwZylu63޽s"U _Rb6U;|>,YK=N4I0{TxJR= 0kF;vŸ^-%lެcd5Ӥ0۷O mmJH c` |>XlY*ӄCLa%!3g'Š+13ө0B6L{w?~G{e@͂ȨOЫƲeTّJln#٩&']8t¥YfLlmvzA$;viFa"n~}DݏRXN&(@KIuepPTܳ!BUUU*ކIqw DP8#SC$ 2-lرN(..N 8R1|Wpt"h^PjupqPqſ jkJtLTBX={V!6$PjVbؼH#F8zEGvC \W'))Ъp . pv4?9MɸqƟ`ׯ>hFrváCRvnݴ3UT?} Ð Te!ͭipV`j 0>8m[; @ _hX0QC_RXAkT9JC\CA!/Zvcƨ6I6ŋaZҷFZ> t.气+p*v8bQeNA1h)92e Aܺ5=2w4 &Nt*@d6%K"iAT .ԥ{K)}I,{|, LbDR嗧lq(*2a,Ýw> }z=-')ec&OJN=jjicQVj.*nǁuzZl֦Z vѢK!Rw'R@dj=cXdW1lrYm #Bk=[X6mҵku\.{*M=86"N06KeGbuO \Y)G͛o_nQGfަ XbӦs#W~ _*p:^H0 OٴK^t}m_ՂEGx6_/iw@jg4)[)qɀV1ht=%=XY)<9i%`ebKḰGsIcg C8h -B薆* y&s6n?GGp֭yy!PQaI R0_~@I3M47(tY*//?ᄞ4ؿߤA6H\.)I3 NѤvk% {ܿגV̲]'x?&V|t!) t {n* (w5PnFf Yr :qE6~*S{aÆѽ{w|><7M`0ݳguPF戚 qkC G 純@ ݿT} ~_~|>@nV8S!qoz\JI0^__?pjCC%(cgur7| ׋ƑiDB9rD~T^^jgvz}/^xAw}x^hNK) ÄB!/y >XT1~~slv.E""_tϟ?C3)3p~\<W8C 2錬\ixD~~ NK)8=qD1uT \PWuu_BCdeeiZ9t:z__nB5U8UblbNnnnRb QWFde5|EVsWe(7Rʤ+@-XBhTu4r+dpY6L V@!|Z%.iT]-;;;iW2N|W:ßTjZTu髐گ(L6[T9VyԼny@;DV.+'RH;d8* 9H9Ui|:c?3(3[5DqZA!!J̅zm^T*(~+d4`xgy"< XTMT 4-nė+|oprmw*}pBohWL;/)^ -:R+t'Sd/Xns=WfggRO}TWWАF@&gs6O>p\$(׮6 L䰪`>}p8KJD^7PUUB8s%014rQJPʎM0x`f̘!L3zg7(+Z!I ՋKvʵKW#ywXi/Q],t]gɒ%"х}>wk׮ìpnۭ8l,hFn/nf:q:m & 77S얆 _rQ]lg߹BJPPHt:[0굪y.F(im+~D"LTNyG:i8:aUiR@FyL[% X S\fϞMII'|LZ`ir͛DZclC=D~CY*u)çΝ;n+hؿիʕ+ڊ999Zu8M mg `JJJxzpǤd.{,^秞zvT`tf,?sO ~joh<`- ,oW 2E@W=W^4؅ÒkYh< PH=ato~_tۛR/Y`!.K]3x]wݓrsWS\\8%d1Rs>j̿F @%c83g?CCCC4# ')({&߮Ά}M}^g4E6v_!kpNfSZZJ^^^:QtzU imD SO}x^e\ԂF Vø\~rC8q'NPi ~/Io0uj((~2]2=2ؤ.֯_"^&#TopG8 梠`gSam%d1RH`!Y0B:ԈFhaۥ,)NSgg]J**Lq~Ͻ`(={L yR¸qNnX|ye53>;ҽA]@ǏNS@f;r1D8 KJ 4ޞ0vr4NCrZC<3f74@k\ΡCOy tG֨M@d/ݻӥ @&^cNaI(Gv烕+WtT2ѩ}ժp4FtvՌPṰBdeAް{^<(M]6,He)%BXc'T~Bv3X{:?pe0g\n(IbzZ8\xcʩVN_N ciBq!^lKn֯ߤLAPSTd 7r=رc&*lЁ… uҡ \a͚8[RB& w: 5ݻ !0 n9~6LŶ !^DT3cyyfZpB?~X44a( )**R=g^+x1#GLs0$ÆY.,,Tz5Vҁ{躴<:x84Xb x*/A *0 *+=j0KE*XPCrz'Rw 9/^+r+?rvihǥ9 ӄɓaݺ.gjLlGk`lؠE]Qdgòe˔`KvNżZɱc1\֎![!p:| DANࢋ3gδ]1"rXeAnV]}'QKZ[mڋm@`ɒ(=`F^a%(@[Gr \PyaVrB2~`Gq3s IDAT>`7;v bsX*-&,X"M&NtWQSS.PS.MR”).NUOe\2'>ۂeнKWukOsIõMLqSQqp8Oz`Fдym3X/ j};w#J8\wi8,%e}իWۮB(o@ѣqVZw~/ ;tSVvRl)@A!v,Y,br M?ÒGSScRVfNY$B!7a}}-]6L T+淝8aqW%{<GdI|Ǐϗ!wo?3&֬Yj{T*ٱ0!3>j ruɱcg^ᩧgpٳ^#S72 @G2jy$o 4^y%@VV|{ |A3uz6?@h`ll1<3Nx%%&vZIEowNHy'D}}5ssѰLQgG`nbMC!\.XNŴ. 0}N0vUxƍJP۽@E8]..6ڴ˝yyΛo8[^`ɒ%"gZ@ae$%af͊kA@;!z+DgPEodJ)S;wPE r@`JE{uO-ˣO Ɏ:.\zsaPVf2qlAE\ѣ&矯QTdлF;wHiUwc{w… q:ؠ^˗G)SqoS:Y<`&砬dݺyyK/8:~ꫭ{ JKMƌqk%pAx] ^?މ+b;b9!{k&(@q8ăߏg ZLfܷF]]]޹S1c˽zi .w;^lȑ#)6LghXtH6c%W||;YlLχ] 3Wc(R:N`+]N'\~%K" 1]ѣK0]0v1 n&@ EL`TĎ,3cFt 5Բ{w~z~8_t E%Ӧ^y/xx0=鄟ɓ|kY!$3g|399u rssռVFt9;ǖ-\\=󌟛nroV⣸ࡇ|A.W_ꩬ4),Ƨ?]aw6:K='<7ロCob\..駳]8w]0}z]\-ULG޽I&Y>C&F>AN2Zy'-5;Ojַu/Yxl Fv#OK_r7C<[nq|y?1ğ,b^["vcgäwSSW4 (, e ~Ш$j!!*&7jbs5j4Afyf{ >O?4MsNUk^Gp:ep8,ٶsOA.w Ə[L+ݼF rvgB\|c ^hTqAۆHYڵk6lRC9瞥nEl[v>h!x!99NvO[7~,0khFU+S?hۃ,Xsgg㏣L=қL?1T-&dβOV8<.;W^g0CV3ztrcmC߾ksNl[+W&`pmsTu쇜T3wW<AQtq#>W^䐝pㆨ?:۱v8ϟWN| wۄƾŰ,FYc1jvV]b. 4 Neły\qE5Ky"}gs9$%%%id&5pGJyyR#{M۶kXu30iR~l~ ]7(>&Т\W\qҰA²ɺu:].-e.olpa_ew'ob]D"5Bmj9[_oѯ3-Ce cSX(jj$A.E۶<d7-[޳p|χ)SC5*)3ӄ/4N-hb#ԲhwЫuy(. E_{A DtZI霗Scǎat3 Q c5@i-:Vg&wU{loQƏлη0$<:C)1oִۆQt[6gJgIڹߤݶ=k'Nl^sA\x;6'`N5_|MS2n Ud5tQc -><(̚e!^xO8,y6_SQ!d:mW7QPѾe˖k)2N{ՄΝnY_d~q/iR#7W5͢E&we7UllʃY d +tc)ײv u^}Տ99 B8ۍ7zxmPV-2z9M_r.^}O$7S'],Yb~FpקV6czl6mصw&'QL/9 ۆ}em'H ]vkU[fTn3vDžB5Gwѓ弼ӱn('a'뭷 q/lv>GmKoG2Eò긩_ÀGǎ+_{5a!e? , П.VEZB`YDV G]]nI^:V .6` (hBFi\UB?0݌@@裵{n\.I%nB INM72"//7M#鹘h*Пs"++ MӰ,+(+=;kh6Z+{ZQQQt+ލM]9>`߹mX[CT*Eps,4T&<]뫃'`[JX3LmT4DNNNRؽ-#lASqVcjOr>Cu =^jjUFe|vSVq:4ߟ =A h[(^z| (d5B4Z eCZ4iN*̧~quKFFa.n;<ɣ:o*vj=]J^^plo^nQts4R2a՝gYOrr3 IJg%`WxM"  :[dp۫ qLO-rfm*lYrs7{^?|"HTIKCS+4G0 &LknfmQL٦d袋()).`rя~'|VRę XEqqqB}%PYYl (XhNJHǣFZ<(MghwB.7G4MKHP]ד^hXtKsmVVVܯk,Oܟb; BPvYwBP$ <8Q@6@0:}>8!bOIENHc6N|4>'a竑He5W}L6첔܂@@.4 /ꫯVg. Lܴ@z'gZm9bs5̞)'QuR8vS5--ӧҺuzkXDT %VkAy{nwZ rr`Μ9taEӰɝ6st׮:~`ƍisnRNV 2%J&4tfjHnŧa):``*VRot4Jf G#/Oй/۶t5ܜdD1> %: =r4"ΩSaÄ .p&u)ܼũ$٫rܱvp2j嫰m[m"JU@ɇF44gPJɦMhWPU\l'`bN 79x})'D0J7ۆC,_\UWd? 0kL07 9Cy"U U]K]\lP(8SJcŊhކj`aeBL҃aTs E*5L%ʕnƤ kתDjmH,SVU۶sgժU\L (2m/ʹw4ltOXP4Gee6v2ݽ˒tLLJ65nH5ڶٳP(THM& IuL{S% ;tٳ?v [,|EL߷mQX{@\١ۗu0&\v`ٲ/T@* '8= L;B8 Ν{R#J ? ق .Й:p^ IDATu*^WS H ֬13`952fή]V*Rn= T_ofg f}$@hPVdj l<93 k{wsaT^ν{mQSKQz/;wRYY ESplY&denBJjjjHB">?챨Hf0l8tp ܣ.Sd cL^xScʕ $u’j,$mgT.u9 EstB,YL V)?Wg^D%OTV-)%nU+Xt*(H((Pgx)]:,ZHT@kS^.e\)^bJtohřʲ`n ]O:-[ tSvUfp*r}-4-5,%\qsp\JÊt.K9"T8>ښ iRac\rI9HE?ߐrh;+'|J)xݻHTOXq-rREN* &7WMr?j|eJ8aN^-[v MAөˎ>0DAnFvv?"'G D|4%B}7 :uҩd޽jTD*r*t̙F\5#0C6_N]t6ׯWĊDc֭08NBD2**l(#̞m DYY׬˒aQ t4Μg_P^.)/w׵N۶0D r"n7q=,{w'cu -O5wRq=X[ ) 4rr.nkZiv ڶdݺujP\毕{DUee v[7mE2:ta޼yGj푲eC az<.]+Dtkp5nqQ HU[c6Լ5}j)IcBpy̙3GP4WkC4 ۶%йp͛-n~7&>_|4m0t |jy-KE=p,:hitG.;i f̘LmNr >=PZjrg,Ǚ|JKKU=AU"6[OsL`pL ,^.HNJ{&4#mC֭G>f i3 nK~NSOղpa>K+f|tRJzv!c۶Yd_ .kuOjxFtc9H~S'eΜX3!? j;ˋzK3~x PRLX͉L>vٶKt6lPRRB׮]f}na%ud_sOٜw^%+VXmèQn>pʨUEtO=mZ3v͹Nk |>ع3~zB@߾.vQZZJΝR85yi$Z&u+V=&駋 |>5`/ЇDl}3aୃoxpNv8~vٲ`}͛7" qv䓍yBcHFjQ0eKg.k% 5H8qSew"M,QIUd^#$W1Mj7of֭*4J'dk ?{.@@\l` An╭op&N<JSx֭}&Mܼ9qvٲ`p`sN&D")y.LO=gWS'.Vp;^v׿l2.R8C)R瑈d۶E++%ղ~ip$nxZƏP0iײ`7D=YEs;,g;PXb+ ?ȸq{aYΝ3aFC\ 9Z VUIz .^z)~vٶ%-Z%XnŊ&=컘r)?^7}z;k8E> i̙3U2NRd&$:0o`ңOd׮`ЦE]!Kv|"RB>ء5!M+`**h^E1ƾ*+kE}]]w*gùր`jzӰI\H6Zq?AIiiAɵ˱7a 8"9̛gtxͻn/&xx{8-N.Wymq99s /gT",6M()bݢXkpXu,BZ|JUJӧë=wuC K-ϛanݺˁQ8P~uiNaUWy??JEERD{/={nO}1 0֭[ݯ79`wlr0@R5bGSx O?M^dVVJ1/4% UV^xu/mfDa1w"P/fΜImm-RJHUW]ŀw=8H<[7l8in$H3(A _n4X`{a̘1U{ 䅻wۜsNz0M=ڍ!H>`. $BJ qUWqM7q~[m+M}Р>'%vݻknv,JͭW\"A6lFRztY[7 JU0<@(rf:v}˲ٳhժwtb 3틆I }:; Ǥ{)ڼ< $cgܒe(s\doiпFL!*Ner"EH ,޽{ӵkW@ۭCҮN:ƓvSfwҲܘn `ȑn 2H;BnAj$M3e5@^ SAAAEEENm3uXǎ:: 儜QwYYYI7RJZnP: N}lνb0n(ڵ+Bg!PѣGS,+ηXK2γ5JU0e˖d%rss&Ȋдま}Uº 4_j5^,p$ FF СjR]Rm!YYY+햰< V_x;v(l;lۦSN%JvLw ;牯`q&}>BxΆͽ8c_Μ%Q\=#BI*Ne~m.+e=wڇ{HZJ 7eUDiixRrݸ\."H"ډ\ƼNEFd旿 TUXX>RJv4.}Ν؏Q(fRew-X'!&p?x׭e*u\)[$(xU?8J˖~nc<*FudjL'9L[Һn(nw-???eol͔#G7mA^v?,7dgC09j& ѦS뺞2ing{>?L͈`Pv $vjI͓q7qGM.JZJ_ P1N'(\w]iVM W 69-,ʸym5Z)Qp5L{n^5tU9Mg"cȠtH*e4#) L7pv$t /-*%-,SaT&1 {p2dhXi'ؿkE@G wvNL $d$JH+/S%%L(`Nsp"q&z~60F IEޔ].4.஄u)RVԐT@N< oÇOdXSS+:B4x衇D(Jn7'Of͵Jۊ 7ImtE?NX'H$»ˑ#GCV(@vv6'NIq\̟?ɓ'UizW}_u298qСX@B::7ofV(eYtؑG}4a̝;#GTXԘ9 c&^j&O>l (bUOTm)KT(@)m+ u9vmaE꧉:+{{PU@BG-MضM txrQPPD4Mjjjq_6WYYYgm1<0qR)P-ˢH$*ZqRl||j٧OVxnn.SN[nj)2]ചZduH oٜ{iA<{/)EDKq b׼'xgytxB曌=4ըS36)ٶm2dHZEEE|嗤 BgkuӺu%ުDͅeK7b& u/6ٲeG!//O=uE&Q Xz}X֩l|)SZe(I"b%;[dOr…mƅ^FB΂TNX{OH[oE())AJ E4--[q&i2W?8ݻwӻwo5A`g;@ J w`֬Yne{7[\zťVuVP4M}MC@tjS6XV}6 (X|zڊ?9tȖB,7`Ϟ=i+MWUޕ+-aY_Mxn\B!mۦL`JuƶɸhTr%.@sNUOq *6wuiiaq>>lA Kio-2ѱ,I׮:BM՟"#Ҳ$kZdضaPgthr qr3NrV:$Bb0kBMűi{TN/YbEv4 :?_vffY,^ldl``7BҥKNjef@Fa8/,P4f5֭yXJh9;kP$c50m,]ϼNpo/+V"#Y"%lؐlRJڵhJtWڶ2T4-@- FtM5 u?yr'?\{ÿ/<X*T3 &#ȶ }:)۶mS"5ئVfG,䦛\:E&FJgSM2qSMRXyԦBҘC3* :B@tfɒ%9 0>$z ^-[ `ڴix21hyIM \L :N.=Cz)B )a?ܿ_ZRT,O_p.nS!ӄ!CpRzl")Jy'rOv\l/j,$#܌N?{-={zߖaY_ɱȶ/Mp"n7de9g糲]{\~c)%~%'?Y8`sU^mކxcyOk?k4J'M>SŠ>it ;rti :<6o^JY/]j֭5~: /Թik+0os-]))IyyrDF)`,_nX1Ϙu1y^LRJޘ&fbIᡇLT[bBlz/<Dzb>vuz ph  a@8=ݍiL|4o4%>g77x_.WOfwkwuzhuڵʧV@OX, ,1v n]/GkҥN*x#FTs9ॗBhZ999cu|yCԂAQ+dSS}E(+jzWJOv ~8s! f*"UqEULP…U /d*Ff:!/輶 WV#N M7m,Q^n}(ʕ&VO߿r&M 1n\+;JJM+ ]/[hv~ty&uGJxӄb M+痿 1zt5:Tv z߿ XWpƏpӧtﮱkzLӤ΀So_ի9^ ,_&77?Ѯgg\N6N݊łgS\܂Kg߻P0}zvPVf3iRn] ?=u\.oBJ>cFvs5fRJ.]Eh*P X6uQ5ڷX ; a|ǦMiE[0Z1oyٻLjQ ĉ>V'<@G%kbE>>mذ?㩧B{7Wʡ(eeeJÊL\ i vG+ W~Vg %K6͎mݛ_YYGb__GyyO>e׮l[_n] >8~t4 ^=/~bΜ<֬)஻@xD7//_ 8Crnn ?o"/yd4A˖Qsn(k?B%&UrqA**?t^QI8 mh|ЩS%[;N4>0} tkٷ>^,Kr-^oMyyeP$ZMe6 XVb^Kvv;wii CK>0ʗ_Z.(q^n݊[(lmؾVF1Me5!qZ wa{̇aH**$?Irt >];u"gѻξ}6nw9=zT0cAVsNaɽѴ2Zs1/hySܴaS-fwpr~?\pޟFi]ӄHDs}Ŕ)FU!mwQ\@ @NNzL[LM>nFyfW{W+xE?y,xSW@v.8ZslǀZɛo0rd5kL6m8a\m+")ti>cƏO4UO]|VZj_ԚW+ϙcpMn띠wװašC-pʎ]M,\dnf1cWTSYYH^ ;jjZ %?ïÇӡC߈hLr٨֭_rW#}6K?woR AEkvQ*+m}S,'GS~%=WiJl1?>U)mCnnzfhN|iu.7%v~; >U}v77ѣ>[_R68?>^=n4ڵst~LشKi-lnƍ۩R=xДf 0e!rH0{?e۶gݻ9z55#5~V{9Y*'J78x&vIB_ιjnbʕlMHoonSQѸ4]w8"9r6W_:C!Njw :ضdҤΡE0?0$۷[zkW:E0n#9rD< %U ϛgrA۶ݻ7<5Zt&uҙzc5ӪBKOmq0sf.+W]ń >ڴq>֭5:u:~\~ի-d̘j<'ѿʕy,\hҹS۽S!I-lh sU")NHSu,jk-Z4hK]yawv>0)S_E~:=zhNBvYb?=u.nҪqv.}>uTӣGEE;`Sh*.]*ƍ S+[W/'XifHK8<<ߣ@$ 7dŋ,g_SXA4SuqZx"ݍݘ-vlGb-N@NԷ<ݢyv>ߕ[h|Cp`cQ[_ 65ײt#DD$sڅp`D8.MXTu1hq=}N(՟;MN0%%%"wM3 ;0sqk:#bArbhF嚄^M&17sc&ƈPz&C> Oe3 EN{< s}Z[_YVmXoggTpӺ\V9=:m5]8q